ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJsb2NrCmluZGV4IGQyZjkwMzMuLjQ4NzNjNzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYmxvY2sKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ibG9jawpAQCAtMTI4LDMgKzEyOCwxNyBAQAogCQlwcmVmZXJyZWQgcmVxdWVzdCBzaXplIGZvciB3b3JrbG9hZHMgd2hlcmUgc3VzdGFpbmVkCiAJCXRocm91Z2hwdXQgaXMgZGVzaXJlZC4gIElmIG5vIG9wdGltYWwgSS9PIHNpemUgaXMKIAkJcmVwb3J0ZWQgdGhpcyBmaWxlIGNvbnRhaW5zIDAuCisKK1doYXQ6CQkvc3lzL2Jsb2NrLzxkaXNrPi9xdWV1ZS9ub21lcmdlcworRGF0ZToJCUphbnVhcnkgMjAxMAorQ29udGFjdDoKK0Rlc2NyaXB0aW9uOgorCQlTdGFuZGFyZCBJL08gZWxldmF0b3Igb3BlcmF0aW9ucyBpbmNsdWRlIGF0dGVtcHRzIHRvCisJCW1lcmdlIGNvbnRpZ3VvdXMgSS9Pcy4gRm9yIGtub3duIHJhbmRvbSBJL08gbG9hZHMgdGhlc2UKKwkJYXR0ZW1wdHMgd2lsbCBhbHdheXMgZmFpbCBhbmQgcmVzdWx0IGluIGV4dHJhIGN5Y2xlcworCQliZWluZyBzcGVudCBpbiB0aGUga2VybmVsLiBUaGlzIGFsbG93cyBvbmUgdG8gdHVybiBvZmYKKwkJdGhpcyBiZWhhdmlvciBvbiBvbmUgb2YgdHdvIHdheXM6IFdoZW4gc2V0IHRvIDEsIGNvbXBsZXgKKwkJbWVyZ2UgY2hlY2tzIGFyZSBkaXNhYmxlZCwgYnV0IHRoZSBzaW1wbGUgb25lLXNob3QgbWVyZ2VzCisJCXdpdGggdGhlIHByZXZpb3VzIEkvTyByZXF1ZXN0IGFyZSBlbmFibGVkLiBXaGVuIHNldCB0byAyLAorCQlhbGwgbWVyZ2UgdHJpZXMgYXJlIGRpc2FibGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIC0KKwkJd2hpY2ggZW5hYmxlcyBhbGwgdHlwZXMgb2YgbWVyZ2UgdHJpZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKaW5kZXggYTA3YzBmMy4uYTk4NmU5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgpAQCAtMTU5LDMgKzE1OSwxNCBAQAogCQlkZXZpY2UuICBUaGlzIGlzIHVzZWZ1bCB0byBlbnN1cmUgYXV0byBwcm9iaW5nIHdvbid0CiAJCW1hdGNoIHRoZSBkcml2ZXIgdG8gdGhlIGRldmljZS4gIEZvciBleGFtcGxlOgogCQkjIGVjaG8gIjA0NmQgYzMxNSIgPiAvc3lzL2J1cy91c2IvZHJpdmVycy9mb28vcmVtb3ZlX2lkCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlLy4uLi9hdm9pZF9yZXNldAorRGF0ZToJCURlY2VtYmVyIDIwMDkKK0NvbnRhY3Q6CU9saXZlciBOZXVrdW0gPG9saXZlckBuZXVrdW0ub3JnPgorRGVzY3JpcHRpb246CisJCVdyaXRpbmcgMSB0byB0aGlzIGZpbGUgdGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoaXMKKwkJZGV2aWNlIHdpbGwgbW9ycGggaW50byBhbm90aGVyIG1vZGUgd2hlbiBpdCBpcyByZXNldC4KKwkJRHJpdmVycyB3aWxsIG5vdCB1c2UgcmVzZXQgZm9yIGVycm9yIGhhbmRsaW5nIGZvcgorCQlzdWNoIGRldmljZXMuCitVc2VyczoKKwkJdXNiX21vZGVzd2l0Y2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXBvd2VyCkBAIC0wLDAgKzEsNzkgQEAKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyLworRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyIGRpcmVjdG9yeSBjb250YWlucyBhdHRyaWJ1dGVzCisJCWFsbG93aW5nIHRoZSB1c2VyIHNwYWNlIHRvIGNoZWNrIGFuZCBtb2RpZnkgc29tZSBwb3dlcgorCQltYW5hZ2VtZW50IHJlbGF0ZWQgcHJvcGVydGllcyBvZiBnaXZlbiBkZXZpY2UuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyL3dha2V1cAorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL3dha2V1cCBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyCisJCXNwYWNlIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB0byB3YWtlIHVwIHRoZSBzeXN0ZW0KKwkJZnJvbSBzbGVlcCBzdGF0ZXMsIHN1Y2ggYXMgdGhlIG1lbW9yeSBzbGVlcCBzdGF0ZSAoc3VzcGVuZCB0bworCQlSQU0pIGFuZCBoaWJlcm5hdGlvbiAoc3VzcGVuZCB0byBkaXNrKSwgYW5kIHRvIGVuYWJsZSBvciBkaXNhYmxlCisJCWl0IHRvIGRvIHRoYXQgYXMgZGVzaXJlZC4KKworCQlTb21lIGRldmljZXMgc3VwcG9ydCAid2FrZXVwIiBldmVudHMsIHdoaWNoIGFyZSBoYXJkd2FyZSBzaWduYWxzCisJCXVzZWQgdG8gYWN0aXZhdGUgdGhlIHN5c3RlbSBmcm9tIGEgc2xlZXAgc3RhdGUuICBTdWNoIGRldmljZXMKKwkJaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUgc3lzZnMgcG93ZXIvd2FrZXVwCisJCWZpbGU6CisKKwkJKyAiZW5hYmxlZFxuIiB0byBpc3N1ZSB0aGUgZXZlbnRzOworCQkrICJkaXNhYmxlZFxuIiBub3QgdG8gZG8gc287CisKKwkJSW4gdGhhdCBjYXNlcyB0aGUgdXNlciBzcGFjZSBjYW4gY2hhbmdlIHRoZSBzZXR0aW5nIHJlcHJlc2VudGVkCisJCWJ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYnkgd3JpdGluZyBlaXRoZXIgImVuYWJsZWQiLCBvcgorCQkiZGlzYWJsZWQiIHRvIGl0LgorCisJCUZvciB0aGUgZGV2aWNlcyB0aGF0IGFyZSBub3QgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHN5c3RlbSB3YWtldXAKKwkJZXZlbnRzIHRoaXMgZmlsZSBjb250YWlucyAiXG4iLiAgSW4gdGhhdCBjYXNlcyB0aGUgdXNlciBzcGFjZQorCQljYW5ub3QgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlCisJCWVuYWJsZWQgdG8gd2FrZSB1cCB0aGUgc3lzdGVtLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbCBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyCisJCXNwYWNlIHRvIGNvbnRyb2wgdGhlIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIGRldmljZS4KKworCQlBbGwgZGV2aWNlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHRoZQorCQlwb3dlci9jb250cm9sIGZpbGU6CisKKwkJKyAiYXV0b1xuIiB0byBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisJCSsgIm9uXG4iIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHBvd2VyIG1hbmFnZWQ7CisKKwkJVGhlIGRlZmF1bHQgZm9yIGFsbCBkZXZpY2VzIGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IG1heQorCQliZSBzdWJqZWN0IHRvIGF1dG9tYXRpYyBwb3dlciBtYW5hZ2VtZW50LCBkZXBlbmRpbmcgb24gdGhlaXIKKwkJZHJpdmVycy4gIENoYW5naW5nIHRoaXMgYXR0cmlidXRlIHRvICJvbiIgcHJldmVudHMgdGhlIGRyaXZlcgorCQlmcm9tIHBvd2VyIG1hbmFnaW5nIHRoZSBkZXZpY2UgYXQgcnVuIHRpbWUuICBEb2luZyB0aGF0IHdoaWxlCisJCXRoZSBkZXZpY2UgaXMgc3VzcGVuZGVkIGNhdXNlcyBpdCB0byBiZSB3b2tlbiB1cC4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvYXN5bmMKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9hc3luYyBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyIHNwYWNlIHRvCisJCWVuYWJsZSBvciBkaWFzYmxlIHRoZSBkZXZpY2UncyBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIHRvCisJCWJlIGV4ZWN1dGVkIGFzeW5jaHJvbm91c2x5IChpZS4gaW4gc2VwYXJhdGUgdGhyZWFkcywgaW4gcGFyYWxsZWwKKwkJd2l0aCB0aGUgbWFpbiBzdXNwZW5kL3Jlc3VtZSB0aHJlYWQpIGR1cmluZyBzeXN0ZW0td2lkZSBwb3dlcgorCQl0cmFuc2l0aW9ucyAoZWcuIHN1c3BlbmQgdG8gUkFNLCBoaWJlcm5hdGlvbikuCisKKwkJQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUKKwkJcG93ZXIvYXN5bmMgZmlsZToKKworCQkrICJlbmFibGVkXG4iIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lOworCQkrICJkaXNhYmxlZFxuIiB0byBmb3JiaWQgaXQ7CisKKwkJVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIG1heSBiZSBjaGFuZ2VkIGJ5IHdyaXRpbmcgZWl0aGVyCisJCSJlbmFibGVkIiwgb3IgImRpc2FibGVkIiB0byBpdC4KKworCQlJdCBnZW5lcmFsbHkgaXMgdW5zYWZlIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lCisJCW9mIGEgZGV2aWNlIHVubGVzcyBpdCBpcyBjZXJ0YWluIHRoYXQgYWxsIG9mIHRoZSBQTSBkZXBlbmRlbmNpZXMKKwkJb2YgdGhlIGRldmljZSBhcmUga25vd24gdG8gdGhlIFBNIGNvcmUuICBIb3dldmVyLCBmb3Igc29tZQorCQlkZXZpY2VzIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byAiZW5hYmxlZCIgYnkgYnVzIHR5cGUgY29kZSBvcgorCQlkZXZpY2UgZHJpdmVycyBhbmQgaW4gdGhhdCBjYXNlcyBpdCBzaG91bGQgYmUgc2FmZSB0byBsZWF2ZSB0aGUKKwkJZGVmYXVsdCB2YWx1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWFzdXMtbGFwdG9wCmluZGV4IGExY2I2NjAuLjFkNzc1MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcApAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvZGlzcGxheQorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzX2xhcHRvcC9kaXNwbGF5CiBEYXRlOgkJSmFudWFyeSAyMDA3CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjAKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTEzLDcgKzEzLDcgQEAKIAkJRXg6IC0gMCAoMDAwMGIpIG1lYW5zIG5vIGRpc3BsYXkKIAkJICAgIC0gMyAoMDAxMWIpIENSVCtMQ0QuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvZ3BzCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2dwcwogRGF0ZToJCUphbnVhcnkgMjAwNwogS2VybmVsVmVyc2lvbjoJMi42LjIwCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CkBAIC0yMSw3ICsyMSw3IEBACiAJCUNvbnRyb2wgdGhlIGdwcyBkZXZpY2UuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgogVXNlcnM6CQlMYXBzdXMKIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9sZWRkCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2xlZGQKIERhdGU6CQlKYW51YXJ5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMAogQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgpAQCAtMjksMTEgKzI5LDExIEBACiAJCVNvbWUgbW9kZWxzIGxpa2UgdGhlIFcxTiBoYXZlIGEgTEVEIGRpc3BsYXkgdGhhdCBjYW4gYmUKIAkJdXNlZCB0byBkaXNwbGF5IHNldmVyYWwgaW5mb3JtYXRpb25zLgogCQlUbyBjb250cm9sIHRoZSBMRUQgZGlzcGxheSwgdXNlIHRoZSBmb2xsb3dpbmcgOgotCQkgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wLworCQkgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wLwogCQl3aGVyZSBUIGNvbnRyb2wgdGhlIDMgbGV0dGVycyBkaXNwbGF5LCBhbmQgREREIHRoZSAzIGRpZ2l0cyBkaXNwbGF5LgogCQlUaGUgREREIHRhYmxlIGNhbiBiZSBmb3VuZCBpbiBEb2N1bWVudGF0aW9uL2xhcHRvcHMvYXN1cy1sYXB0b3AudHh0CiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvYmx1ZXRvb3RoCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2JsdWV0b290aAogRGF0ZToJCUphbnVhcnkgMjAwNwogS2VybmVsVmVyc2lvbjoJMi42LjIwCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CkBAIC00Miw3ICs0Miw3IEBACiAJCVRoaXMgbWF5IGNvbnRyb2wgdGhlIGxlZCwgdGhlIGRldmljZSBvciBib3RoLgogVXNlcnM6CQlMYXBzdXMKIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC93bGFuCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL3dsYW4KIERhdGU6CQlKYW51YXJ5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMAogQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcAppbmRleCA3NDQ1ZGZiLi41YjAyNmM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcApAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2Rpc3AKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMvZGlzcAogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTksMjEgKzksMjEgQEAKIAkJLSAzID0gTENEK0NSVAogCQlJZiB5b3UgcnVuIFgxMSwgeW91IHNob3VsZCB1c2UgeHJhbmRyIGluc3RlYWQuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2NhbWVyYQorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9jYW1lcmEKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2CiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBEZXNjcmlwdGlvbjoKIAkJQ29udHJvbCB0aGUgY2FtZXJhLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvY2FyZHIKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMvY2FyZHIKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2CiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBEZXNjcmlwdGlvbjoKIAkJQ29udHJvbCB0aGUgY2FyZCByZWFkZXIuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgogCi1XaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jcHVmdgorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9jcHVmdgogRGF0ZToJCUp1biAyMDA5CiBLZXJuZWxWZXJzaW9uOgkyLjYuMzEKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTQyLDcgKzQyLDcgQEAKIAkJICAgIGAtLS0tLS0tLS0tLS0gQXZhaWxhYmxlcyBtb2RlcwogCQlGb3IgZXhhbXBsZSwgMHgzMDEgbWVhbnM6IG1vZGUgMSBzZWxlY3RlZCwgMyBhdmFpbGFibGUgbW9kZXMuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2F2YWlsYWJsZV9jcHVmdgorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9hdmFpbGFibGVfY3B1ZnYKIERhdGU6CQlKdW4gMjAwOQogS2VybmVsVmVyc2lvbjoJMi42LjMxCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgppbmRleCBkY2ZmNGQwLi5kNmE4MDFmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCkBAIC0xMDEsMyArMTAxLDE2IEBACiAKIAkJQ0FVVElPTjogVXNpbmcgaXQgd2lsbCBjYXVzZSB5b3VyIG1hY2hpbmUncyByZWFsLXRpbWUgKENNT1MpCiAJCWNsb2NrIHRvIGJlIHNldCB0byBhIHJhbmRvbSBpbnZhbGlkIHRpbWUgYWZ0ZXIgYSByZXN1bWUuCisKK1doYXQ6CQkvc3lzL3Bvd2VyL3BtX2FzeW5jCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvcG93ZXIvcG1fYXN5bmMgZmlsZSBjb250cm9scyB0aGUgc3dpdGNoIGFsbG93aW5nIHRoZQorCQl1c2VyIHNwYWNlIHRvIGVuYWJsZSBvciBkaXNhYmxlIGFzeW5jaHJvbm91cyBzdXNwZW5kIGFuZCByZXN1bWUKKwkJb2YgZGV2aWNlcy4gIElmIGVuYWJsZWQsIHRoaXMgZmVhdHVyZSB3aWxsIGNhdXNlIHNvbWUgZGV2aWNlCisJCWRyaXZlcnMnIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgdG8gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwKKwkJd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIHRoZSBtYWluIHN1c3BlbmQgdGhyZWFkLiAgSXQgaXMgZW5hYmxlZAorCQlpZiB0aGlzIGZpbGUgY29udGFpbnMgIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4gIEl0IG1heSBiZQorCQlkaXNhYmxlZCBieSB3cml0aW5nICIwIiB0byB0aGlzIGZpbGUsIGluIHdoaWNoIGNhc2UgYWxsIGRldmljZXMKKwkJd2lsbCBiZSBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwKaW5kZXggZjlhNmUyYy4uMWIyZGQ0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgPC9zZWN0MT4KIAogICAgICA8c2VjdDE+PHRpdGxlPkF0b21pYyBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb248L3RpdGxlPgotIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAorIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWMuaAogIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAogICAgICA8L3NlY3QxPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwKaW5kZXggM2VkODgxMi4uYzFlZDZhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZWlvYm9vay50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbApAQCAtMzE2LDcgKzMxNiw3IEBACiAKICAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CiAgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KLSFJYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCiAhRWxpYi9pb21hcC5jCiAgIDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAppbmRleCBmM2YzN2YxLi5hZmZiMTVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgICAgIHRoaXMgdGhvdWdoIGFuZCB0aGUgcmVjb21tZW5kYXRpb24gdG8gYWxsb3cgb25seSBhIHNpbmdsZQogICAgICAgICBpbnRlcmZhY2UgaW4gU1RBIG1vZGUgYXQgZmlyc3QhCiAgICAgICA8L3BhcmE+Ci0hRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2lmX2luaXRfY29uZgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV92aWYKICAgICA8L2NoYXB0ZXI+CiAKICAgICA8Y2hhcHRlciBpZD0icngtdHgiPgpAQCAtMjM0LDcgKzIzNCw2IEBACiAgICAgICA8dGl0bGU+TXVsdGlwbGUgcXVldWVzIGFuZCBRb1Mgc3VwcG9ydDwvdGl0bGU+CiAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcwotIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cwogICAgIDwvY2hhcHRlcj4KIAogICAgIDxjaGFwdGVyIGlkPSJBUCI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCmluZGV4IGY5MmYyNDMuLmU4NzAzMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCkBAIC01ODksNyArNTg5LDggQEAKIAkgICAgPGVudHJ5PjwvZW50cnk+CiAJICAgIDxlbnRyeT5BIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIGN1c3RvbQogKGRyaXZlciBkZWZpbmVkKSBidWZmZXIgdHlwZXMKLTxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQgaGlnaGVyLjwvZW50cnk+Cis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci4gQXBwbGljYXRpb25zCitzaG91bGQgc2V0IHRoaXMgdG8gMC48L2VudHJ5PgogCSAgPC9yb3c+CiAJPC90Ym9keT4KICAgICAgIDwvdGdyb3VwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbAppbmRleCAxODcwODE3Li5iODQzYmQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbApAQCAtNTQsMTIgKzU0LDEwIEBACiBkcml2ZXIncyBpbmNvbWluZyBxdWV1ZS4gVGhlIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNlbGVjdGVkIEkvTwogbWV0aG9kLjwvcGFyYT4KIAotICAgIDxwYXJhPlRvIGVucXVldWUgYSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkgbWFwcGVkPC9saW5rPgotYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYQotJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyBwcmV2aW91c2x5ICZ2NGwyLWZvcm1hdDsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgotZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiBhbmQgdGhlCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIGJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+CitmaWVsZCBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgd2FzIHByZXZpb3VzbHkgdXNlZAord2l0aCAmdjRsMi1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPi4gQXBwbGljYXRpb25zIG11c3QgYWxzbyBzZXQgdGhlCiA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVmFsaWQgaW5kZXggbnVtYmVycyByYW5nZSBmcm9tCiB6ZXJvIHRvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCAmVklESU9DLVJFUUJVRlM7CiAoJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+KSBtaW51cyBvbmUuIFRoZQpAQCAtNzAsOCArNjgsMTkgQEAKIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PikgYXBwbGljYXRpb25zIG11c3QgYWxzbwogaW5pdGlhbGl6ZSB0aGUgPHN0cnVjdGZpZWxkPmJ5dGVzdXNlZDwvc3RydWN0ZmllbGQ+LAogPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gYW5kCi08c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLiBTZWUgPHhyZWYKLQlsaW5rZW5kPSJidWZmZXIiIC8+IGZvciBkZXRhaWxzLiBXaGVuCis8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBzZWUgPHhyZWYKK2xpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGRldGFpbHMuCitBcHBsaWNhdGlvbnMgbXVzdCBhbHNvIHNldCA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiB0byAwLiBJZiBhIGRyaXZlcgorc3VwcG9ydHMgY2FwdHVyaW5nIGZyb20gc3BlY2lmaWMgdmlkZW8gaW5wdXRzIGFuZCB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgdmlkZW8KK2lucHV0LCB0aGVuIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IHNob3VsZCBiZSBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD4gYW5kIHRoZSBmaWVsZAorPHN0cnVjdGZpZWxkPmlucHV0PC9zdHJ1Y3RmaWVsZD4gbXVzdCBiZSBpbml0aWFsaXplZCB0byB0aGUgZGVzaXJlZCBpbnB1dC4KK1RoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtdXN0IGJlIHNldCB0byAwLgorPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwZWQ8L2xpbms+CitidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LiBXaGVuCiA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwogc3RydWN0dXJlIHRoZSBkcml2ZXIgc2V0cyB0aGUKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX01BUFBFRDwvY29uc3RhbnQ+IGFuZApAQCAtODEsMTQgKzkwLDEwIEBACiAmRUlOVkFMOy48L3BhcmE+CiAKICAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4KLWJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKLSZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLWZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4gYW5kIHRoZQorYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50PiwgdGhlCiA8c3RydWN0ZmllbGQ+bS51c2VycHRyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlCi1idWZmZXIgYW5kIDxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiB0byBpdHMgc2l6ZS4gV2hlbiB0aGUKLWJ1ZmZlciBpcyBpbnRlbmRlZCBmb3Igb3V0cHV0IGFkZGl0aW9uYWwgZmllbGRzIG11c3QgYmUgc2V0IGFzIGFib3ZlLgorYnVmZmVyIGFuZCA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gdG8gaXRzIHNpemUuCiBXaGVuIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCiBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PgogZmxhZyBhbmQgY2xlYXJzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKQEAgLTk2LDEzICsxMDEsMTQgQEAKIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvciBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuCiBUaGlzIGlvY3RsIGxvY2tzIHRoZSBtZW1vcnkgcGFnZXMgb2YgdGhlIGJ1ZmZlciBpbiBwaHlzaWNhbCBtZW1vcnksCiB0aGV5IGNhbm5vdCBiZSBzd2FwcGVkIG91dCB0byBkaXNrLiBCdWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKLWRlcXVldWVkLCB1bnRpbCB0aGUgJlZJRElPQy1TVFJFQU1PRkY7IG9yICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgYXJlCitkZXF1ZXVlZCwgdW50aWwgdGhlICZWSURJT0MtU1RSRUFNT0ZGOyBvciAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGlzCiBjYWxsZWQsIG9yIHVudGlsIHRoZSBkZXZpY2UgaXMgY2xvc2VkLjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KIGlvY3RsIHRvIGRlcXVldWUgYSBmaWxsZWQgKGNhcHR1cmluZykgb3IgZGlzcGxheWVkIChvdXRwdXQpIGJ1ZmZlcgogZnJvbSB0aGUgZHJpdmVyJ3Mgb3V0Z29pbmcgcXVldWUuIFRoZXkganVzdCBzZXQgdGhlCi08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorYW5kIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+CiBmaWVsZHMgb2YgYSAmdjRsMi1idWZmZXI7IGFzIGFib3ZlLCB3aGVuIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PgogaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgZmlsbHMgdGhlCiByZW1haW5pbmcgZmllbGRzIG9yIHJldHVybnMgYW4gZXJyb3IgY29kZS48L3BhcmE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKaW5kZXggZDgzNDk5My4uZTY0OTgwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbApAQCAtNTQsMTIgKzU0LDEzIEBACiAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKLSAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseQorICAgIG9mIGEgJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyB3YXMgcHJldmlvdXNseSB1c2VkIHdpdGgKICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7CiA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCBhbmQgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CiAgICAgZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvCiB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOwogICAgICgmdjRsMi1yZXF1ZXN0YnVmZmVyczsgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4pIG1pbnVzIG9uZS4KK1RoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBzaG91bGQgdG8gc2V0IHRvIDAuCiBBZnRlciBjYWxsaW5nIDxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiB3aXRoIGEgcG9pbnRlciB0bwogICAgIHRoaXMgc3RydWN0dXJlIGRyaXZlcnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgb3IgZmlsbCB0aGUgcmVzdCBvZgogdGhlIHN0cnVjdHVyZS48L3BhcmE+CkBAIC02OCw4ICs2OSw4IEBACiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiwKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1FVRVVFRDwvY29uc3RhbnQ+IGFuZAogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfRE9ORTwvY29uc3RhbnQ+IGZsYWdzIHdpbGwgYmUgdmFsaWQuIFRoZQotPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpbGwgYmUgc2V0IHRvCi08Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LCB0aGUgPHN0cnVjdGZpZWxkPm0ub2Zmc2V0PC9zdHJ1Y3RmaWVsZD4KKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0byB0aGUgY3VycmVudAorSS9PIG1ldGhvZCwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+CiBjb250YWlucyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBtZW1vcnksCiB0aGUgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0cyBzaXplLiBUaGUgZHJpdmVyIG1heQogb3IgbWF5IG5vdCBzZXQgdGhlIHJlbWFpbmluZyBmaWVsZHMgYW5kIGZsYWdzLCB0aGV5IGFyZSBtZWFuaW5nbGVzcyBpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbAppbmRleCBiYWIzODA4Li4xYzA4MTYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApAQCAtNTQsMjMgKzU0LDIzIEBACiBhbGxvY2F0ZWQgd2l0aCB0aGlzIGlvY3RsIGJlZm9yZSB0aGV5IGNhbiBiZSBtYXBwZWQgaW50byB0aGUKIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gVXNlciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYnkKIGFwcGxpY2F0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhpcyBpb2N0bCBpcyBtZXJlbHkgdXNlZCB0byBzd2l0Y2ggdGhlCi1kcml2ZXIgaW50byB1c2VyIHBvaW50ZXIgSS9PIG1vZGUuPC9wYXJhPgorZHJpdmVyIGludG8gdXNlciBwb2ludGVyIEkvTyBtb2RlIGFuZCB0byBzZXR1cCBzb21lIGludGVybmFsIHN0cnVjdHVyZXMuPC9wYXJhPgogCi0gICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhyZWUKLWZpZWxkcyBvZiBhIDxzdHJ1Y3RuYW1lPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KKyAgICA8cGFyYT5UbyBhbGxvY2F0ZSBkZXZpY2UgYnVmZmVycyBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSBhbGwKK2ZpZWxkcyBvZiB0aGUgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT4gc3RydWN0dXJlLgogVGhleSBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlc3BlY3RpdmUKIHN0cmVhbSBvciBidWZmZXIgdHlwZSwgdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvCi10aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgYW5kIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgotbXVzdCBiZSBzZXQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwKLWlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvCi1hbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBidWZmZXJzIGFuZCBzdG9yZXMgdGhlIGFjdHVhbCBudW1iZXIKK3RoZSBkZXNpcmVkIG51bWJlciBvZiBidWZmZXJzLCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK211c3QgYmUgc2V0IHRvIHRoZSByZXF1ZXN0ZWQgSS9PIG1ldGhvZCBhbmQgdGhlIHJlc2VydmVkIGFycmF5CittdXN0IGJlIHplcm9lZC4gV2hlbiB0aGUgaW9jdGwKK2lzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byBhbGxvY2F0ZQordGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnVmZmVycyBhbmQgaXQgc3RvcmVzIHRoZSBhY3R1YWwgbnVtYmVyCiBhbGxvY2F0ZWQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJdCBjYW4gYmUKIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCwgZXZlbiB6ZXJvLCB3aGVuIHRoZSBkcml2ZXIgcnVucyBvdXQKLW9mIGZyZWUgbWVtb3J5LiBBIGxhcmdlciBudW1iZXIgaXMgcG9zc2libGUgd2hlbiB0aGUgZHJpdmVyIHJlcXVpcmVzCi1tb3JlIGJ1ZmZlcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5Ljxmb290bm90ZT4KLQk8cGFyYT5Gb3IgZXhhbXBsZSB2aWRlbyBvdXRwdXQgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGJ1ZmZlcnMsCitvZiBmcmVlIG1lbW9yeS4gQSBsYXJnZXIgbnVtYmVyIGlzIGFsc28gcG9zc2libGUgd2hlbiB0aGUgZHJpdmVyIHJlcXVpcmVzCittb3JlIGJ1ZmZlcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBGb3IgZXhhbXBsZSB2aWRlbyBvdXRwdXQgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGJ1ZmZlcnMsCiBvbmUgZGlzcGxheWVkIGFuZCBvbmUgZmlsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48L3BhcmE+Ci0JPC9mb290bm90ZT4gV2hlbiBtZW1vcnkgbWFwcGluZyBJL08gaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwKKyAgICA8cGFyYT5XaGVuIHRoZSBJL08gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGlvY3RsCiByZXR1cm5zIGFuICZFSU5WQUw7LjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gY2FsbCA8Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PgpAQCAtODEsMTQgKzgxLDYgQEAKIHJlYXNvbiB3aHkgbXVubWFwKClwaW5nIG9uZSBvciBldmVuIGFsbCBidWZmZXJzIG11c3QgaW1wbHkKIHN0cmVhbW9mZi4tLT48L3BhcmE+CiAKLSAgICA8cGFyYT5UbyBuZWdvdGlhdGUgdXNlciBwb2ludGVyIEkvTywgYXBwbGljYXRpb25zIGluaXRpYWxpemUgb25seQotdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIHNldAotPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IHRvCi08Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+LiBXaGVuIHRoZSBpb2N0bCBpcyBjYWxsZWQKLXdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgcHJlcGFyZXMgZm9yIHVzZXIgcG9pbnRlcgotSS9PLCB3aGVuIHRoaXMgSS9PIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bCByZXR1cm5zIGFuCi0mRUlOVkFMOy48L3BhcmE+Ci0KICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcmVxdWVzdGJ1ZmZlcnMiPgogICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlcXVlc3RidWZmZXJzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CiAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgpAQCAtOTcsOSArODksNyBAQAogCSAgPHJvdz4KIAkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KIAkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KLQkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgb3IgZ3JhbnRlZC4gVGhpcwotZmllbGQgaXMgb25seSB1c2VkIHdoZW4gPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGlzIHNldCB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIG51bWJlciBvZiBidWZmZXJzIHJlcXVlc3RlZCBvciBncmFudGVkLjwvZW50cnk+CiAJICA8L3Jvdz4KIAkgIDxyb3c+CiAJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgpAQCAtMTIwLDcgKzExMCw3IEBACiAJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CiAJICAgIDxlbnRyeT5BIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIGN1c3RvbQogKGRyaXZlciBkZWZpbmVkKSBidWZmZXIgdHlwZXMgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+IGFuZAotaGlnaGVyLjwvZW50cnk+CitoaWdoZXIuIFRoaXMgYXJyYXkgc2hvdWxkIGJlIHplcm9lZCBieSBhcHBsaWNhdGlvbnMuPC9lbnRyeT4KIAkgIDwvcm93PgogCTwvdGJvZHk+CiAgICAgICA8L3Rncm91cD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKaW5kZXggOWJiNjJmNy4uNzFiNmY1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKQEAgLTYsMTYgKzYsMjIgQEAKIAktIFJldmlldyBDaGVja2xpc3QgZm9yIFJDVSBQYXRjaGVzCiBsaXN0UkNVLnR4dAogCS0gVXNpbmcgUkNVIHRvIFByb3RlY3QgUmVhZC1Nb3N0bHkgTGlua2VkIExpc3RzCitsb2NrZGVwLnR4dAorCS0gUkNVIGFuZCBsb2NrZGVwIGNoZWNraW5nCiBOTUktUkNVLnR4dAogCS0gVXNpbmcgUkNVIHRvIFByb3RlY3QgRHluYW1pYyBOTUkgSGFuZGxlcnMKK3JjdWJhcnJpZXIudHh0CisJLSBSQ1UgYW5kIFVubG9hZGFibGUgTW9kdWxlcworcmN1bGlzdF9udWxscy50eHQKKwktIFJDVSBsaXN0IHByaW1pdGl2ZXMgZm9yIHVzZSB3aXRoIFNMQUJfREVTVFJPWV9CWV9SQ1UKIHJjdXJlZi50eHQKIAktIFJlZmVyZW5jZS1jb3VudCBkZXNpZ24gZm9yIGVsZW1lbnRzIG9mIGxpc3RzL2FycmF5cyBwcm90ZWN0ZWQgYnkgUkNVCiByY3UudHh0CiAJLSBSQ1UgQ29uY2VwdHMKLXJjdWJhcnJpZXIudHh0Ci0JLSBVbmxvYWRpbmcgbW9kdWxlcyB0aGF0IHVzZSBSQ1UgY2FsbGJhY2tzCiBSVEZQLnR4dAogCS0gTGlzdCBvZiBSQ1UgcGFwZXJzIChiaWJsaW9ncmFwaHkpIGdvaW5nIGJhY2sgdG8gMTk4MC4KK3N0YWxsd2Fybi50eHQKKwktIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MgKENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SKQogdG9ydHVyZS50eHQKIAktIFJDVSBUb3J0dXJlIFRlc3QgT3BlcmF0aW9uIChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkKIHRyYWNlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAppbmRleCBkMmI4NTIzLi41YWVhNDU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dApAQCAtMjUsMTAgKzI1LDEwIEBACiBvcHRpbWl6ZWQgZm9yIG1vZGVybiBjb21wdXRlciBzeXN0ZW1zLCB3aGljaCBpcyBub3Qgc3VycHJpc2luZyBnaXZlbgogdGhhdCB0aGVzZSBvdmVyaGVhZHMgd2VyZSBub3Qgc28gZXhwZW5zaXZlIGluIHRoZSBtaWQtODBzLiAgTm9uZXRoZWxlc3MsCiBwYXNzaXZlIHNlcmlhbGl6YXRpb24gYXBwZWFycyB0byBiZSB0aGUgZmlyc3QgZGVmZXJyZWQtZGVzdHJ1Y3Rpb24KLW1lY2hhbmlzbSB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uICBGdXJ0aGVybW9yZSwgdGhlIHJlbGV2YW50IHBhdGVudCBoYXMKLWxhcHNlZCwgc28gdGhpcyBhcHByb2FjaCBtYXkgYmUgdXNlZCBpbiBub24tR1BMIHNvZnR3YXJlLCBpZiBkZXNpcmVkLgotKEluIGNvbnRyYXN0LCB1c2Ugb2YgUkNVIGlzIHBlcm1pdHRlZCBvbmx5IGluIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyCi1HUEwuICBTb3JyeSEhISkKK21lY2hhbmlzbSB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uICBGdXJ0aGVybW9yZSwgdGhlIHJlbGV2YW50IHBhdGVudAoraGFzIGxhcHNlZCwgc28gdGhpcyBhcHByb2FjaCBtYXkgYmUgdXNlZCBpbiBub24tR1BMIHNvZnR3YXJlLCBpZiBkZXNpcmVkLgorKEluIGNvbnRyYXN0LCBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgaXMgcGVybWl0dGVkIG9ubHkgaW4gc29mdHdhcmUgbGljZW5zZWQKK3VuZGVyIGVpdGhlciBHUEwgb3IgTEdQTC4gIFNvcnJ5ISEhKQogCiBJbiAxOTkwLCBQdWdoIFtQdWdoOTBdIG5vdGVkIHRoYXQgZXhwbGljaXRseSB0cmFja2luZyB3aGljaCB0aHJlYWRzCiB3ZXJlIHJlYWRpbmcgYSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBwZXJtaXR0ZWQgZGVmZXJyZWQgZnJlZSB0byBvcGVyYXRlCkBAIC0xNTAsNiArMTUwLDE4IEBACiBMV04gIldoYXQgaXMgUkNVPyIgc2VyaWVzIFtQYXVsRU1jS2VubmV5MjAwN1doYXRJc1JDVUZ1bmRhbWVudGFsbHksCiBQYXVsRU1jS2VubmV5MjAwOFdoYXRJc1JDVVVzYWdlLCBhbmQgUGF1bEVNY0tlbm5leTIwMDhXaGF0SXNSQ1VBUEldLgogCisyMDA4IHNhdyBhIGpvdXJuYWwgcGFwZXIgb24gcmVhbC10aW1lIFJDVSBbRGluYWthckd1bmlndW50YWxhMjAwOElCTVN5c0pdLAorYSBoaXN0b3J5IG9mIGhvdyBMaW51eCBjaGFuZ2VkIFJDVSBtb3JlIHRoYW4gUkNVIGNoYW5nZWQgTGludXgKK1tQYXVsRU1jS2VubmV5MjAwOFJDVU9TUl0sIGFuZCBhIGRlc2lnbiBvdmVydmlldyBvZiBoaWVyYXJjaGljYWwgUkNVCitbUGF1bEVNY0tlbm5leTIwMDhIaWVyYXJjaGljYWxSQ1VdLgorCisyMDA5IGludHJvZHVjZWQgdXNlci1sZXZlbCBSQ1UgYWxnb3JpdGhtcyBbUGF1bEVNY0tlbm5leTIwMDlNYWxpY2lvdXNVUkNVXSwKK3doaWNoIE1hdGhpZXUgRGVzbm95ZXJzIGlzIG5vdyBtYWludGFpbmluZyBbTWF0aGlldURlc25veWVyczIwMDlVUkNVXQorW01hdGhpZXVEZXNub3llcnNQaERdLiAgVElOWV9SQ1UgW1BhdWxFTWNLZW5uZXkyMDA5QmxvYXRXYXRjaFJDVV0gbWFkZQoraXRzIGFwcGVhcmFuY2UsIGFzIGRpZCBleHBlZGl0ZWQgUkNVIFtQYXVsRU1jS2VubmV5MjAwOWV4cGVkaXRlZFJDVV0uCitUaGUgcHJvYmxlbSBvZiByZXNpemVhYmxlIFJDVS1wcm90ZWN0ZWQgaGFzaCB0YWJsZXMgbWF5IG5vdyBiZSBvbiBhIHBhdGgKK3RvIGEgc29sdXRpb24gW0pvc2hUcmlwbGV0dDIwMDlSUEhhc2hdLgorCiBCaWJ0ZXggRW50cmllcwogCiBAYXJ0aWNsZXtLdW5nODAKQEAgLTczMCw2ICs3NDIsMTEgQEAKICIKIH0KIAorIworIwkiV2hhdCBpcyBSQ1U/IiBMV04gc2VyaWVzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIEBhcnRpY2xle0RpbmFrYXJHdW5pZ3VudGFsYTIwMDhJQk1TeXNKCiAsYXV0aG9yPSJELiBHdW5pZ3VudGFsYSBhbmQgUC4gRS4gTWNLZW5uZXkgYW5kIEouIFRyaXBsZXR0IGFuZCBKLiBXYWxwb2xlIgogLHRpdGxlPSJUaGUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc20gZm9yIHN1cHBvcnRpbmcgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvbiBzaGFyZWQtbWVtb3J5IG11bHRpcHJvY2Vzc29yIHN5c3RlbXMgd2l0aCB7TGludXh9IgpAQCAtODIwLDMgKzgzNywzOSBAQAogCVVuaXByb2Nlc3NvciBhc3N1bXB0aW9ucyBhbGxvdyBzaW1wbGlmaWVkIFJDVSBpbXBsZW1lbnRhdGlvbi4KICIKIH0KKworQHVucHVibGlzaGVke1BhdWxFTWNLZW5uZXkyMDA5ZXhwZWRpdGVkUkNVCissQXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IgorLFRpdGxlPSJbe1BBVENIfSAtdGlwIDAvM10gZXhwZWRpdGVkICdiaWcgaGFtbWVyJyB7UkNVfSBncmFjZSBwZXJpb2RzIgorLG1vbnRoPSJKdW5lIgorLGRheT0iMjUiCisseWVhcj0iMjAwOSIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDkvNi8yNS8zMDZ9CitbVmlld2VkIEF1Z3VzdCAxNiwgMjAwOV0iCissYW5ub3RhdGlvbj0iCisJRmlyc3QgcG9zdGluZyBvZiBleHBlZGl0ZWQgUkNVIHRvIGJlIGFjY2VwdGVkIGludG8gLXRpcC4KKyIKK30KKworQHVucHVibGlzaGVke0pvc2hUcmlwbGV0dDIwMDlSUEhhc2gKKyxBdXRob3I9Ikpvc2ggVHJpcGxldHQiCissVGl0bGU9IlNjYWxhYmxlIGNvbmN1cnJlbnQgaGFzaCB0YWJsZXMgdmlhIHJlbGF0aXZpc3RpYyBwcm9ncmFtbWluZyIKKyxtb250aD0iU2VwdGVtYmVyIgorLHllYXI9IjIwMDkiCissbm90ZT0iTGludXggUGx1bWJlcnMgQ29uZmVyZW5jZSBwcmVzZW50YXRpb24iCissYW5ub3RhdGlvbj0iCisJUlAgZnVuIHdpdGggaGFzaCB0YWJsZXMuCisiCit9CisKK0BwaGR0aGVzaXN7TWF0aGlldURlc25veWVyc1BoRAorLCB0aXRsZSAgPSAiTG93LUltcGFjdCBPcGVyYXRpbmcgU3lzdGVtIFRyYWNpbmciCissIGF1dGhvciA9ICJNYXRoaWV1IERlc25veWVycyIKKywgc2Nob29sID0gIkVjb2xlIFBvbHl0ZWNobmlxdWUgZGUgTW9udHJcJ3tlfWFsIgorLCBtb250aCAgPSAiRGVjZW1iZXIiCissIHllYXIgICA9IDIwMDkKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly93d3cubHR0bmcub3JnL3B1Yi90aGVzaXMvZGVzbm95ZXJzLWRpc3NlcnRhdGlvbi0yMDA5LTEyLnBkZn0KK1tWaWV3ZWQgRGVjZW1iZXIgOSwgMjAwOV0iCit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAppbmRleCA1MTUyNWEzLi5jYmMxODBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKQEAgLTgsMTMgKzgsMTIgQEAKIG92ZXIgYSByYXRoZXIgbG9uZyBwZXJpb2Qgb2YgdGltZSwgYnV0IGltcHJvdmVtZW50cyBhcmUgYWx3YXlzIHdlbGNvbWUhCiAKIDAuCUlzIFJDVSBiZWluZyBhcHBsaWVkIHRvIGEgcmVhZC1tb3N0bHkgc2l0dWF0aW9uPyAgSWYgdGhlIGRhdGEKLQlzdHJ1Y3R1cmUgaXMgdXBkYXRlZCBtb3JlIHRoYW4gYWJvdXQgMTAlIG9mIHRoZSB0aW1lLCB0aGVuCi0JeW91IHNob3VsZCBzdHJvbmdseSBjb25zaWRlciBzb21lIG90aGVyIGFwcHJvYWNoLCB1bmxlc3MKLQlkZXRhaWxlZCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IFJDVSBpcyBub25ldGhlbGVzcwotCXRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiAgWWVzLCB5b3UgbWlnaHQgdGhpbmsgb2YgUkNVCi0JYXMgc2ltcGx5IGN1dHRpbmcgb3ZlcmhlYWQgb2ZmIG9mIHRoZSByZWFkZXJzIGFuZCBpbXBvc2luZyBpdAotCW9uIHRoZSB3cml0ZXJzLiAgVGhhdCBpcyBleGFjdGx5IHdoeSBub3JtYWwgdXNlcyBvZiBSQ1Ugd2lsbAotCWRvIG11Y2ggbW9yZSByZWFkaW5nIHRoYW4gdXBkYXRpbmcuCisJc3RydWN0dXJlIGlzIHVwZGF0ZWQgbW9yZSB0aGFuIGFib3V0IDEwJSBvZiB0aGUgdGltZSwgdGhlbiB5b3UKKwlzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgc29tZSBvdGhlciBhcHByb2FjaCwgdW5sZXNzIGRldGFpbGVkCisJcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBSQ1UgaXMgbm9uZXRoZWxlc3MgdGhlIHJpZ2h0CisJdG9vbCBmb3IgdGhlIGpvYi4gIFllcywgUkNVIGRvZXMgcmVkdWNlIHJlYWQtc2lkZSBvdmVyaGVhZCBieQorCWluY3JlYXNpbmcgd3JpdGUtc2lkZSBvdmVyaGVhZCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgbm9ybWFsIHVzZXMKKwlvZiBSQ1Ugd2lsbCBkbyBtdWNoIG1vcmUgcmVhZGluZyB0aGFuIHVwZGF0aW5nLgogCiAJQW5vdGhlciBleGNlcHRpb24gaXMgd2hlcmUgcGVyZm9ybWFuY2UgaXMgbm90IGFuIGlzc3VlLCBhbmQgUkNVCiAJcHJvdmlkZXMgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzIHNpdHVhdGlvbgpAQCAtMzUsMTMgKzM0LDEzIEBACiAKIAlJZiB5b3UgY2hvb3NlICNiLCBiZSBwcmVwYXJlZCB0byBkZXNjcmliZSBob3cgeW91IGhhdmUgaGFuZGxlZAogCW1lbW9yeSBiYXJyaWVycyBvbiB3ZWFrbHkgb3JkZXJlZCBtYWNoaW5lcyAocHJldHR5IG11Y2ggYWxsIG9mCi0JdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgcmVhZHMgdG8gYmUgcmVvcmRlcmVkKSwgYW5kIGJlIHByZXBhcmVkCi0JdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZCBjb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UKLQljaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QKLQliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yCi0JZXhhbXBsZSwgaWYgdGhlIHRhc2sgaXMgdXBkYXRpbmcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmCi0JdGhhdCBvdGhlciB0YXNrcyBjYW4gcmVhZCwgdGhlcmUgYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8KLQlib3R0bGVuZWNrKS4KKwl0aGVtIC0tIGV2ZW4geDg2IGFsbG93cyBsYXRlciBsb2FkcyB0byBiZSByZW9yZGVyZWQgdG8gcHJlY2VkZQorCWVhcmxpZXIgc3RvcmVzKSwgYW5kIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gd2h5IHRoaXMgYWRkZWQKKwljb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UgY2hvb3NlICNjLCBiZSBwcmVwYXJlZCB0bworCWV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QgYmVjb21lIGEgbWFqb3IgYm90dGxlbmVjayBvbgorCWJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yIGV4YW1wbGUsIGlmIHRoZSB0YXNrIGlzIHVwZGF0aW5nCisJaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmIHRoYXQgb3RoZXIgdGFza3MgY2FuIHJlYWQsIHRoZXJlCisJYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8gYm90dGxlbmVjaykuCiAKIDIuCURvIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG1ha2UgcHJvcGVyIHVzZSBvZgogCXJjdV9yZWFkX2xvY2soKSBhbmQgZnJpZW5kcz8gIFRoZXNlIHByaW1pdGl2ZXMgYXJlIG5lZWRlZApAQCAtNTEsOCArNTAsMTAgQEAKIAlhY3R1YXJpYWwgcmlzayBvZiB5b3VyIGtlcm5lbC4KIAogCUFzIGEgcm91Z2ggcnVsZSBvZiB0aHVtYiwgYW55IGRlcmVmZXJlbmNlIG9mIGFuIFJDVS1wcm90ZWN0ZWQKLQlwb2ludGVyIG11c3QgYmUgY292ZXJlZCBieSByY3VfcmVhZF9sb2NrKCkgb3IgcmN1X3JlYWRfbG9ja19iaCgpCi0Jb3IgYnkgdGhlIGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2suCisJcG9pbnRlciBtdXN0IGJlIGNvdmVyZWQgYnkgcmN1X3JlYWRfbG9jaygpLCByY3VfcmVhZF9sb2NrX2JoKCksCisJcmN1X3JlYWRfbG9ja19zY2hlZCgpLCBvciBieSB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9jay4KKwlEaXNhYmxpbmcgb2YgcHJlZW1wdGlvbiBjYW4gc2VydmUgYXMgcmN1X3JlYWRfbG9ja19zY2hlZCgpLCBidXQKKwlpcyBsZXNzIHJlYWRhYmxlLgogCiAzLglEb2VzIHRoZSB1cGRhdGUgY29kZSB0b2xlcmF0ZSBjb25jdXJyZW50IGFjY2Vzc2VzPwogCkBAIC02MiwyNSArNjMsMjcgQEAKIAlvZiB3YXlzIHRvIGhhbmRsZSB0aGlzIGNvbmN1cnJlbmN5LCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbjoKIAogCWEuCVVzZSB0aGUgUkNVIHZhcmlhbnRzIG9mIHRoZSBsaXN0IGFuZCBobGlzdCB1cGRhdGUKLQkJcHJpbWl0aXZlcyB0byBhZGQsIHJlbW92ZSwgYW5kIHJlcGxhY2UgZWxlbWVudHMgb24gYW4KLQkJUkNVLXByb3RlY3RlZCBsaXN0LiAgQWx0ZXJuYXRpdmVseSwgdXNlIHRoZSBSQ1UtcHJvdGVjdGVkCi0JCXRyZWVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBMaW51eCBrZXJuZWwuCisJCXByaW1pdGl2ZXMgdG8gYWRkLCByZW1vdmUsIGFuZCByZXBsYWNlIGVsZW1lbnRzIG9uCisJCWFuIFJDVS1wcm90ZWN0ZWQgbGlzdC4JQWx0ZXJuYXRpdmVseSwgdXNlIHRoZSBvdGhlcgorCQlSQ1UtcHJvdGVjdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0bworCQl0aGUgTGludXgga2VybmVsLgogCiAJCVRoaXMgaXMgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4KIAogCWIuCVByb2NlZWQgYXMgaW4gKGEpIGFib3ZlLCBidXQgYWxzbyBtYWludGFpbiBwZXItZWxlbWVudAogCQlsb2NrcyAodGhhdCBhcmUgYWNxdWlyZWQgYnkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzKQogCQl0aGF0IGd1YXJkIHBlci1lbGVtZW50IHN0YXRlLiAgT2YgY291cnNlLCBmaWVsZHMgdGhhdAotCQl0aGUgcmVhZGVycyByZWZyYWluIGZyb20gYWNjZXNzaW5nIGNhbiBiZSBndWFyZGVkIGJ5IHRoZQotCQl1cGRhdGUtc2lkZSBsb2NrLgorCQl0aGUgcmVhZGVycyByZWZyYWluIGZyb20gYWNjZXNzaW5nIGNhbiBiZSBndWFyZGVkIGJ5CisJCXNvbWUgb3RoZXIgbG9jayBhY3F1aXJlZCBvbmx5IGJ5IHVwZGF0ZXJzLCBpZiBkZXNpcmVkLgogCiAJCVRoaXMgd29ya3MgcXVpdGUgd2VsbCwgYWxzby4KIAogCWMuCU1ha2UgdXBkYXRlcyBhcHBlYXIgYXRvbWljIHRvIHJlYWRlcnMuICBGb3IgZXhhbXBsZSwKLQkJcG9pbnRlciB1cGRhdGVzIHRvIHByb3Blcmx5IGFsaWduZWQgZmllbGRzIHdpbGwgYXBwZWFyCi0JCWF0b21pYywgYXMgd2lsbCBpbmRpdmlkdWFsIGF0b21pYyBwcmltaXRpdmVzLiAgT3BlcmF0aW9ucwotCQlwZXJmb3JtZWQgdW5kZXIgYSBsb2NrIGFuZCBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgYXRvbWljCi0JCXByaW1pdGl2ZXMgd2lsbCAtbm90LSBhcHBlYXIgdG8gYmUgYXRvbWljLgorCQlwb2ludGVyIHVwZGF0ZXMgdG8gcHJvcGVybHkgYWxpZ25lZCBmaWVsZHMgd2lsbAorCQlhcHBlYXIgYXRvbWljLCBhcyB3aWxsIGluZGl2aWR1YWwgYXRvbWljIHByaW1pdGl2ZXMuCisJCVNlcXVlbmNlcyBvZiBwZXJhdGlvbnMgcGVyZm9ybWVkIHVuZGVyIGEgbG9jayB3aWxsIC1ub3QtCisJCWFwcGVhciB0byBiZSBhdG9taWMgdG8gUkNVIHJlYWRlcnMsIG5vciB3aWxsIHNlcXVlbmNlcworCQlvZiBtdWx0aXBsZSBhdG9taWMgcHJpbWl0aXZlcy4KIAogCQlUaGlzIGNhbiB3b3JrLCBidXQgaXMgc3RhcnRpbmcgdG8gZ2V0IGEgYml0IHRyaWNreS4KIApAQCAtOTgsOSArMTAxLDkgQEAKIAkJYSBuZXcgc3RydWN0dXJlIGNvbnRhaW5pbmcgdXBkYXRlZCB2YWx1ZXMuCiAKIDQuCVdlYWtseSBvcmRlcmVkIENQVXMgcG9zZSBzcGVjaWFsIGNoYWxsZW5nZXMuICBBbG1vc3QgYWxsIENQVXMKLQlhcmUgd2Vha2x5IG9yZGVyZWQgLS0gZXZlbiBpMzg2IENQVXMgYWxsb3cgcmVhZHMgdG8gYmUgcmVvcmRlcmVkLgotCVJDVSBjb2RlIG11c3QgdGFrZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBtZWFzdXJlcyB0byBwcmV2ZW50Ci0JbWVtb3J5LWNvcnJ1cHRpb24gcHJvYmxlbXM6CisJYXJlIHdlYWtseSBvcmRlcmVkIC0tIGV2ZW4geDg2IENQVXMgYWxsb3cgbGF0ZXIgbG9hZHMgdG8gYmUKKwlyZW9yZGVyZWQgdG8gcHJlY2VkZSBlYXJsaWVyIHN0b3Jlcy4gIFJDVSBjb2RlIG11c3QgdGFrZSBhbGwgb2YKKwl0aGUgZm9sbG93aW5nIG1lYXN1cmVzIHRvIHByZXZlbnQgbWVtb3J5LWNvcnJ1cHRpb24gcHJvYmxlbXM6CiAKIAlhLglSZWFkZXJzIG11c3QgbWFpbnRhaW4gcHJvcGVyIG9yZGVyaW5nIG9mIHRoZWlyIG1lbW9yeQogCQlhY2Nlc3Nlcy4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgZW5zdXJlcyB0aGF0CkBAIC0xMTMsMTQgKzExNiwyNSBAQAogCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIGFsc28gYW4gZXhjZWxsZW50CiAJCWRvY3VtZW50YXRpb24gYWlkLCBsZXR0aW5nIHRoZSBwZXJzb24gcmVhZGluZyB0aGUgY29kZQogCQlrbm93IGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCisJCVBsZWFzZSBub3RlIHRoYXQgY29tcGlsZXJzIGNhbiBhbHNvIHJlb3JkZXIgY29kZSwgYW5kCisJCXRoZXkgYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBhZ2dyZXNzaXZlIGFib3V0IGRvaW5nCisJCWp1c3QgdGhhdC4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgdGhlcmVmb3JlCisJCWFsc28gcHJldmVudHMgZGVzdHJ1Y3RpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KIAotCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMKLQkJIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaCBhcyB0aGUKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4gIE5vdGUgdGhhdCBpdCBpcyBwZXJmZWN0bHkKLQkJbGVnYWwgKGlmIHJlZHVuZGFudCkgZm9yIHVwZGF0ZS1zaWRlIGNvZGUgdG8gdXNlCi0JCXJjdV9kZXJlZmVyZW5jZSgpIGFuZCB0aGUgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwKLQkJcHJpbWl0aXZlcy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBjb2RlCi0JCXRoYXQgaXMgY29tbW9uIHRvIHJlYWRlcnMgYW5kIHVwZGF0ZXJzLgorCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIHVzZWQgYnkgdGhlCisJCXZhcmlvdXMgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaAorCQlhcyB0aGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4gIE5vdGUgdGhhdCBpdCBpcworCQlwZXJmZWN0bHkgbGVnYWwgKGlmIHJlZHVuZGFudCkgZm9yIHVwZGF0ZS1zaWRlIGNvZGUgdG8KKwkJdXNlIHJjdV9kZXJlZmVyZW5jZSgpIGFuZCB0aGUgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwKKwkJcHJpbWl0aXZlcy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBjb2RlIHRoYXQKKwkJaXMgY29tbW9uIHRvIHJlYWRlcnMgYW5kIHVwZGF0ZXJzLiAgSG93ZXZlciwgbG9ja2RlcAorCQl3aWxsIGNvbXBsYWluIGlmIHlvdSBhY2Nlc3MgcmN1X2RlcmVmZXJlbmNlKCkgb3V0c2lkZQorCQlvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBTZWUgbG9ja2RlcC50eHQKKwkJdG8gbGVhcm4gd2hhdCB0byBkbyBhYm91dCB0aGlzLgorCisJCU9mIGNvdXJzZSwgbmVpdGhlciByY3VfZGVyZWZlcmVuY2UoKSBub3IgdGhlICJfcmN1KCkiCisJCWxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMgY2FuIHN1YnN0aXR1dGUgZm9yIGEgZ29vZAorCQljb25jdXJyZW5jeSBkZXNpZ24gY29vcmRpbmF0aW5nIGFtb25nIG11bHRpcGxlIHVwZGF0ZXJzLgogCiAJYi4JSWYgdGhlIGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLCB0aGUgbGlzdF9hZGRfdGFpbF9yY3UoKQogCQlhbmQgbGlzdF9hZGRfcmN1KCkgcHJpbWl0aXZlcyBtdXN0IGJlIHVzZWQgaW4gb3JkZXIKQEAgLTEzNSwxMSArMTQ5LDE0IEBACiAJCXJlYWRlcnMuICBTaW1pbGFybHksIGlmIHRoZSBobGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsCiAJCXRoZSBobGlzdF9kZWxfcmN1KCkgcHJpbWl0aXZlIGlzIHJlcXVpcmVkLgogCi0JCVRoZSBsaXN0X3JlcGxhY2VfcmN1KCkgcHJpbWl0aXZlIG1heSBiZSB1c2VkIHRvCi0JCXJlcGxhY2UgYW4gb2xkIHN0cnVjdHVyZSB3aXRoIGEgbmV3IG9uZSBpbiBhbgotCQlSQ1UtcHJvdGVjdGVkIGxpc3QuCisJCVRoZSBsaXN0X3JlcGxhY2VfcmN1KCkgYW5kIGhsaXN0X3JlcGxhY2VfcmN1KCkgcHJpbWl0aXZlcworCQltYXkgYmUgdXNlZCB0byByZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUKKwkJaW4gdGhlaXIgcmVzcGVjdGl2ZSB0eXBlcyBvZiBSQ1UtcHJvdGVjdGVkIGxpc3RzLgogCi0JZC4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KKwlkLglSdWxlcyBzaW1pbGFyIHRvICg0YikgYW5kICg0YykgYXBwbHkgdG8gdGhlICJobGlzdF9udWxscyIKKwkJdHlwZSBvZiBSQ1UtcHJvdGVjdGVkIGxpbmtlZCBsaXN0cy4KKworCWUuCVVwZGF0ZXMgbXVzdCBlbnN1cmUgdGhhdCBpbml0aWFsaXphdGlvbiBvZiBhIGdpdmVuCiAJCXN0cnVjdHVyZSBoYXBwZW5zIGJlZm9yZSBwb2ludGVycyB0byB0aGF0IHN0cnVjdHVyZSBhcmUKIAkJcHVibGljaXplZC4gIFVzZSB0aGUgcmN1X2Fzc2lnbl9wb2ludGVyKCkgcHJpbWl0aXZlCiAJCXdoZW4gcHVibGljaXppbmcgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgY2FuCkBAIC0xNTEsMTYgKzE2OCwzMSBAQAogCWl0IGNhbm5vdCBibG9jay4KIAogNi4JU2luY2Ugc3luY2hyb25pemVfcmN1KCkgY2FuIGJsb2NrLCBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20KLQlhbnkgc29ydCBvZiBpcnEgY29udGV4dC4gIERpdHRvIGZvciBzeW5jaHJvbml6ZV9zY2hlZCgpIGFuZAotCXN5bmNocm9uaXplX3NyY3UoKS4KKwlhbnkgc29ydCBvZiBpcnEgY29udGV4dC4gIFRoZSBzYW1lIHJ1bGUgYXBwbGllcyBmb3IKKwlzeW5jaHJvbml6ZV9yY3VfYmgoKSwgc3luY2hyb25pemVfc2NoZWQoKSwgc3luY2hyb25pemVfc3JjdSgpLAorCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQoKSwgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCgpLAorCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlKCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgogCi03LglJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1KCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycwotCW11c3QgdXNlIHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkuICBJZiB0aGUgdXBkYXRlcgotCXVzZXMgY2FsbF9yY3VfYmgoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgdXNlCi0JcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4gIElmIHRoZSB1cGRhdGVyCi0JdXNlcyBjYWxsX3JjdV9zY2hlZCgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdAotCWRpc2FibGUgcHJlZW1wdGlvbi4gIE1peGluZyB0aGluZ3MgdXAgd2lsbCByZXN1bHQgaW4gY29uZnVzaW9uCi0JYW5kIGJyb2tlbiBrZXJuZWxzLgorCVRoZSBleHBlZGl0ZWQgZm9ybXMgb2YgdGhlc2UgcHJpbWl0aXZlcyBoYXZlIHRoZSBzYW1lIHNlbWFudGljcworCWFzIHRoZSBub24tZXhwZWRpdGVkIGZvcm1zLCBidXQgZXhwZWRpdGluZyBpcyBib3RoIGV4cGVuc2l2ZQorCWFuZCB1bmZyaWVuZGx5IHRvIHJlYWwtdGltZSB3b3JrbG9hZHMuCVVzZSBvZiB0aGUgZXhwZWRpdGVkCisJcHJpbWl0aXZlcyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byByYXJlIGNvbmZpZ3VyYXRpb24tY2hhbmdlCisJb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vdCBub3JtYWxseSBiZSB1bmRlcnRha2VuIHdoaWxlIGEgcmVhbC10aW1lCisJd29ya2xvYWQgaXMgcnVubmluZy4KKworNy4JSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdSgpIG9yIHN5bmNocm9uaXplX3JjdSgpLCB0aGVuIHRoZQorCWNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IHVzZSByY3VfcmVhZF9sb2NrKCkgYW5kCisJcmN1X3JlYWRfdW5sb2NrKCkuICBJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1X2JoKCkgb3IKKwlzeW5jaHJvbml6ZV9yY3VfYmgoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QKKwl1c2UgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4gIElmIHRoZQorCXVwZGF0ZXIgdXNlcyBjYWxsX3JjdV9zY2hlZCgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCksIHRoZW4KKwl0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLCBwb3NzaWJseQorCWJ5IGNhbGxpbmcgcmN1X3JlYWRfbG9ja19zY2hlZCgpIGFuZCByY3VfcmVhZF91bmxvY2tfc2NoZWQoKS4KKwlJZiB0aGUgdXBkYXRlciB1c2VzIHN5bmNocm9uaXplX3NyY3UoKSwgdGhlIHRoZSBjb3JyZXNwb25kaW5nCisJcmVhZGVycyBtdXN0IHVzZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCksCisJYW5kIHdpdGggdGhlIHNhbWUgc3JjdV9zdHJ1Y3QuCVRoZSBydWxlcyBmb3IgdGhlIGV4cGVkaXRlZAorCXByaW1pdGl2ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGVpciBub24tZXhwZWRpdGVkIGNvdW50ZXJwYXJ0cy4KKwlNaXhpbmcgdGhpbmdzIHVwIHdpbGwgcmVzdWx0IGluIGNvbmZ1c2lvbiBhbmQgYnJva2VuIGtlcm5lbHMuCiAKIAlPbmUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKQogCW1heSBiZSBzdWJzdGl0dXRlZCBmb3IgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKQpAQCAtMjEyLDYgKzI0NCw4IEBACiAJZS4JUGVyaW9kaWNhbGx5IGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKSwgcGVybWl0dGluZyBhIGxpbWl0ZWQKIAkJbnVtYmVyIG9mIHVwZGF0ZXMgcGVyIGdyYWNlIHBlcmlvZC4KIAorCVRoZSBzYW1lIGNhdXRpb25zIGFwcGx5IHRvIGNhbGxfcmN1X2JoKCkgYW5kIGNhbGxfcmN1X3NjaGVkKCkuCisKIDkuCUFsbCBSQ1UgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgd2hpY2ggaW5jbHVkZQogCXJjdV9kZXJlZmVyZW5jZSgpLCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLAogCWxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KCksIGFuZCBsaXN0X2Zvcl9lYWNoX3NhZmVfcmN1KCksCkBAIC0yMTksNyArMjUzLDkgQEAKIAltdXN0IGJlIHByb3RlY3RlZCBieSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2Nrcy4gIFJDVQogCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2soKQogCWFuZCByY3VfcmVhZF91bmxvY2soKSwgb3IgYnkgc2ltaWxhciBwcmltaXRpdmVzIHN1Y2ggYXMKLQlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLgorCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCksIGluIHdoaWNoIGNhc2UKKwl0aGUgbWF0Y2hpbmcgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIG11c3QgYmUgdXNlZCBpbiBvcmRlcgorCXRvIGtlZXAgbG9ja2RlcCBoYXBweSwgaW4gdGhpcyBjYXNlLCByY3VfZGVyZWZlcmVuY2VfYmgoKS4KIAogCVRoZSByZWFzb24gdGhhdCBpdCBpcyBwZXJtaXNzaWJsZSB0byB1c2UgUkNVIGxpc3QtdHJhdmVyc2FsCiAJcHJpbWl0aXZlcyB3aGVuIHRoZSB1cGRhdGUtc2lkZSBsb2NrIGlzIGhlbGQgaXMgdGhhdCBkb2luZyBzbwpAQCAtMjI5LDcgKzI2NSw4IEBACiAxMC4JQ29udmVyc2VseSwgaWYgeW91IGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sCiAJYW5kIHlvdSBkb24ndCBob2xkIHRoZSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2NrLCB5b3UgLW11c3QtCiAJdXNlIHRoZSAiX3JjdSgpIiB2YXJpYW50cyBvZiB0aGUgbGlzdCBtYWNyb3MuICBGYWlsaW5nIHRvIGRvIHNvCi0Jd2lsbCBicmVhayBBbHBoYSBhbmQgY29uZnVzZSBwZW9wbGUgcmVhZGluZyB5b3VyIGNvZGUuCisJd2lsbCBicmVhayBBbHBoYSwgY2F1c2UgYWdncmVzc2l2ZSBjb21waWxlcnMgdG8gZ2VuZXJhdGUgYmFkIGNvZGUsCisJYW5kIGNvbmZ1c2UgcGVvcGxlIHRyeWluZyB0byByZWFkIHlvdXIgY29kZS4KIAogMTEuCU5vdGUgdGhhdCBzeW5jaHJvbml6ZV9yY3UoKSAtb25seS0gZ3VhcmFudGVlcyB0byB3YWl0IHVudGlsCiAJYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgcmN1X3JlYWRfbG9jaygpLXByb3RlY3RlZCBSQ1UgcmVhZC1zaWRlCkBAIC0yMzksMTUgKzI3NiwyMSBAQAogCXJjdV9yZWFkX2xvY2soKS1wcm90ZWN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCBkbyAtbm90LQogCXVzZSBzeW5jaHJvbml6ZV9yY3UoKS4KIAotCUlmIHlvdSB3YW50IHRvIHdhaXQgZm9yIHNvbWUgb2YgdGhlc2Ugb3RoZXIgdGhpbmdzLCB5b3UgbWlnaHQKLQlpbnN0ZWFkIG5lZWQgdG8gdXNlIHN5bmNocm9uaXplX2lycSgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCkuCisJU2ltaWxhcmx5LCBkaXNhYmxpbmcgcHJlZW1wdGlvbiBpcyBub3QgYW4gYWNjZXB0YWJsZSBzdWJzdGl0dXRlCisJZm9yIHJjdV9yZWFkX2xvY2soKS4gIENvZGUgdGhhdCBhdHRlbXB0cyB0byB1c2UgcHJlZW1wdGlvbgorCWRpc2FibGluZyB3aGVyZSBpdCBzaG91bGQgYmUgdXNpbmcgcmN1X3JlYWRfbG9jaygpIHdpbGwgYnJlYWsKKwlpbiByZWFsLXRpbWUga2VybmVsIGJ1aWxkcy4KKworCUlmIHlvdSB3YW50IHRvIHdhaXQgZm9yIGludGVycnVwdCBoYW5kbGVycywgTk1JIGhhbmRsZXJzLCBhbmQKKwljb2RlIHVuZGVyIHRoZSBpbmZsdWVuY2Ugb2YgcHJlZW1wdF9kaXNhYmxlKCksIHlvdSBpbnN0ZWFkCisJbmVlZCB0byB1c2Ugc3luY2hyb25pemVfaXJxKCkgb3Igc3luY2hyb25pemVfc2NoZWQoKS4KIAogMTIuCUFueSBsb2NrIGFjcXVpcmVkIGJ5IGFuIFJDVSBjYWxsYmFjayBtdXN0IGJlIGFjcXVpcmVkIGVsc2V3aGVyZQogCXdpdGggc29mdGlycSBkaXNhYmxlZCwgZS5nLiwgdmlhIHNwaW5fbG9ja19pcnFzYXZlKCksCiAJc3Bpbl9sb2NrX2JoKCksIGV0Yy4gIEZhaWxpbmcgdG8gZGlzYWJsZSBpcnEgb24gYSBnaXZlbgotCWFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jayBhcyBzb29uIGFzIHRoZQotCVJDVSBjYWxsYmFjayBoYXBwZW5zIHRvIGludGVycnVwdCB0aGF0IGFjcXVpc2l0aW9uJ3MgY3JpdGljYWwKLQlzZWN0aW9uLgorCWFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jayBhcyBzb29uIGFzCisJdGhlIFJDVSBzb2Z0aXJxIGhhbmRsZXIgaGFwcGVucyB0byBydW4geW91ciBSQ1UgY2FsbGJhY2sgd2hpbGUKKwlpbnRlcnJ1cHRpbmcgdGhhdCBhY3F1aXNpdGlvbidzIGNyaXRpY2FsIHNlY3Rpb24uCiAKIDEzLglSQ1UgY2FsbGJhY2tzIGNhbiBiZSBhbmQgYXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLiAgSW4gbWFueSBjYXNlcywKIAl0aGUgY2FsbGJhY2sgY29kZSBzaW1wbHkgd3JhcHBlcnMgYXJvdW5kIGtmcmVlKCksIHNvIHRoYXQgdGhpcwpAQCAtMjY1LDI5ICszMDgsMzAgQEAKIAlub3QgdGhlIGNhc2UsIGEgc2VsZi1zcGF3bmluZyBSQ1UgY2FsbGJhY2sgd291bGQgcHJldmVudCB0aGUKIAl2aWN0aW0gQ1BVIGZyb20gZXZlciBnb2luZyBvZmZsaW5lLikKIAotMTQuCVNSQ1UgKHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKSwgYW5kIHN5bmNocm9uaXplX3NyY3UoKSkKLQltYXkgb25seSBiZSBpbnZva2VkIGZyb20gcHJvY2VzcyBjb250ZXh0LiAgVW5saWtlIG90aGVyIGZvcm1zIG9mCi0JUkNVLCBpdCAtaXMtIHBlcm1pc3NpYmxlIHRvIGJsb2NrIGluIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0Jc2VjdGlvbiAoZGVtYXJrZWQgYnkgc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpKSwKLQloZW5jZSB0aGUgIlNSQ1UiOiAic2xlZXBhYmxlIFJDVSIuICBQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdQotCWRvbid0IG5lZWQgdG8gc2xlZXAgaW4gcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCB5b3Ugc2hvdWxkCi0JYmUgdXNpbmcgUkNVIHJhdGhlciB0aGFuIFNSQ1UsIGJlY2F1c2UgUkNVIGlzIGFsbW9zdCBhbHdheXMKLQlmYXN0ZXIgYW5kIGVhc2llciB0byB1c2UgdGhhbiBpcyBTUkNVLgorMTQuCVNSQ1UgKHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKSwgc3JjdV9kZXJlZmVyZW5jZSgpLAorCXN5bmNocm9uaXplX3NyY3UoKSwgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkpIG1heSBvbmx5CisJYmUgaW52b2tlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIFVubGlrZSBvdGhlciBmb3JtcyBvZiBSQ1UsIGl0CisJLWlzLSBwZXJtaXNzaWJsZSB0byBibG9jayBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uCisJKGRlbWFya2VkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKSksIGhlbmNlIHRoZQorCSJTUkNVIjogInNsZWVwYWJsZSBSQ1UiLiAgUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgZG9uJ3QgbmVlZAorCXRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgeW91IHNob3VsZCBiZSB1c2luZworCVJDVSByYXRoZXIgdGhhbiBTUkNVLCBiZWNhdXNlIFJDVSBpcyBhbG1vc3QgYWx3YXlzIGZhc3RlciBhbmQKKwllYXNpZXIgdG8gdXNlIHRoYW4gaXMgU1JDVS4KIAogCUFsc28gdW5saWtlIG90aGVyIGZvcm1zIG9mIFJDVSwgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24KIAlhbmQgY2xlYW51cCBpcyByZXF1aXJlZCB2aWEgaW5pdF9zcmN1X3N0cnVjdCgpIGFuZAogCWNsZWFudXBfc3JjdV9zdHJ1Y3QoKS4JVGhlc2UgYXJlIHBhc3NlZCBhICJzdHJ1Y3Qgc3JjdV9zdHJ1Y3QiCiAJdGhhdCBkZWZpbmVzIHRoZSBzY29wZSBvZiBhIGdpdmVuIFNSQ1UgZG9tYWluLglPbmNlIGluaXRpYWxpemVkLAogCXRoZSBzcmN1X3N0cnVjdCBpcyBwYXNzZWQgdG8gc3JjdV9yZWFkX2xvY2soKSwgc3JjdV9yZWFkX3VubG9jaygpCi0JYW5kIHN5bmNocm9uaXplX3NyY3UoKS4gIEEgZ2l2ZW4gc3luY2hyb25pemVfc3JjdSgpIHdhaXRzIG9ubHkKLQlmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgZ292ZXJuZWQgYnkgc3JjdV9yZWFkX2xvY2soKQotCWFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgY2FsbHMgdGhhdCBoYXZlIGJlZW4gcGFzc2QgdGhlIHNhbWUKLQlzcmN1X3N0cnVjdC4gIFRoaXMgcHJvcGVydHkgaXMgd2hhdCBtYWtlcyBzbGVlcGluZyByZWFkLXNpZGUKLQljcml0aWNhbCBzZWN0aW9ucyB0b2xlcmFibGUgLS0gYSBnaXZlbiBzdWJzeXN0ZW0gZGVsYXlzIG9ubHkKLQlpdHMgb3duIHVwZGF0ZXMsIG5vdCB0aG9zZSBvZiBvdGhlciBzdWJzeXN0ZW1zIHVzaW5nIFNSQ1UuCi0JVGhlcmVmb3JlLCBTUkNVIGlzIGxlc3MgcHJvbmUgdG8gT09NIHRoZSBzeXN0ZW0gdGhhbiBSQ1Ugd291bGQKLQliZSBpZiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgd2VyZSBwZXJtaXR0ZWQgdG8KLQlzbGVlcC4KKwlzeW5jaHJvbml6ZV9zcmN1KCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLiAgQSBnaXZlbgorCXN5bmNocm9uaXplX3NyY3UoKSB3YWl0cyBvbmx5IGZvciBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCXNlY3Rpb25zIGdvdmVybmVkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKQorCWNhbGxzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0aGUgc2FtZSBzcmN1X3N0cnVjdC4gIFRoaXMgcHJvcGVydHkKKwlpcyB3aGF0IG1ha2VzIHNsZWVwaW5nIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB0b2xlcmFibGUgLS0KKwlhIGdpdmVuIHN1YnN5c3RlbSBkZWxheXMgb25seSBpdHMgb3duIHVwZGF0ZXMsIG5vdCB0aG9zZSBvZiBvdGhlcgorCXN1YnN5c3RlbXMgdXNpbmcgU1JDVS4JVGhlcmVmb3JlLCBTUkNVIGlzIGxlc3MgcHJvbmUgdG8gT09NIHRoZQorCXN5c3RlbSB0aGFuIFJDVSB3b3VsZCBiZSBpZiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMKKwl3ZXJlIHBlcm1pdHRlZCB0byBzbGVlcC4KIAogCVRoZSBhYmlsaXR5IHRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBkb2VzIG5vdAogCWNvbWUgZm9yIGZyZWUuCUZpcnN0LCBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkgYW5kCkBAIC0zMTEsMTIgKzM1NSwxMiBAQAogCWRlc3RydWN0aXZlIG9wZXJhdGlvbiwgYW5kIC1vbmx5LSAtdGhlbi0gaW52b2tlIGNhbGxfcmN1KCksCiAJc3luY2hyb25pemVfcmN1KCksIG9yIGZyaWVuZHMuCiAKLQlCZWNhdXNlIHRoZXNlIHByaW1pdGl2ZXMgb25seSB3YWl0IGZvciBwcmUtZXhpc3RpbmcgcmVhZGVycywKLQlpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHNhZmV0eSB0bwotCWFueSBzdWJzZXF1ZW50IHJlYWRlcnMuCisJQmVjYXVzZSB0aGVzZSBwcmltaXRpdmVzIG9ubHkgd2FpdCBmb3IgcHJlLWV4aXN0aW5nIHJlYWRlcnMsIGl0CisJaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IGFueSBzdWJzZXF1ZW50CisJcmVhZGVycyB3aWxsIGV4ZWN1dGUgc2FmZWx5LgogCi0xNi4JVGhlIHZhcmlvdXMgUkNVIHJlYWQtc2lkZSBwcmltaXRpdmVzIGRvIC1ub3QtIGNvbnRhaW4gbWVtb3J5Ci0JYmFycmllcnMuICBUaGUgQ1BVIChhbmQgaW4gc29tZSBjYXNlcywgdGhlIGNvbXBpbGVyKSBpcyBmcmVlCi0JdG8gcmVvcmRlciBjb2RlIGludG8gYW5kIG91dCBvZiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgotCUl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgUkNVIHVwZGF0ZS1zaWRlIHByaW1pdGl2ZXMgdG8KLQlkZWFsIHdpdGggdGhpcy4KKzE2LglUaGUgdmFyaW91cyBSQ1UgcmVhZC1zaWRlIHByaW1pdGl2ZXMgZG8gLW5vdC0gbmVjZXNzYXJpbHkgY29udGFpbgorCW1lbW9yeSBiYXJyaWVycy4gIFlvdSBzaG91bGQgdGhlcmVmb3JlIHBsYW4gZm9yIHRoZSBDUFUKKwlhbmQgdGhlIGNvbXBpbGVyIHRvIGZyZWVseSByZW9yZGVyIGNvZGUgaW50byBhbmQgb3V0IG9mIFJDVQorCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUKKwlSQ1UgdXBkYXRlLXNpZGUgcHJpbWl0aXZlcyB0byBkZWFsIHdpdGggdGhpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNGI1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0CkBAIC0wLDAgKzEsNjcgQEAKK1JDVSBhbmQgbG9ja2RlcCBjaGVja2luZworCitBbGwgZmxhdm9ycyBvZiBSQ1UgaGF2ZSBsb2NrZGVwIGNoZWNraW5nIGF2YWlsYWJsZSwgc28gdGhhdCBsb2NrZGVwIGlzCithd2FyZSBvZiB3aGVuIGVhY2ggdGFzayBlbnRlcnMgYW5kIGxlYXZlcyBhbnkgZmxhdm9yIG9mIFJDVSByZWFkLXNpZGUKK2NyaXRpY2FsIHNlY3Rpb24uICBFYWNoIGZsYXZvciBvZiBSQ1UgaXMgdHJhY2tlZCBzZXBhcmF0ZWx5IChidXQgbm90ZQordGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBpbiAyLjYuMzIgYW5kIGVhcmxpZXIpLiAgVGhpcyBhbGxvd3MgbG9ja2RlcCdzCit0cmFja2luZyB0byBpbmNsdWRlIFJDVSBzdGF0ZSwgd2hpY2ggY2FuIHNvbWV0aW1lcyBoZWxwIHdoZW4gZGVidWdnaW5nCitkZWFkbG9ja3MgYW5kIHRoZSBsaWtlLgorCitJbiBhZGRpdGlvbiwgUkNVIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcHJpbWl0aXZlcyB0aGF0IGNoZWNrIGxvY2tkZXAncworc3RhdGU6CisKKwlyY3VfcmVhZF9sb2NrX2hlbGQoKSBmb3Igbm9ybWFsIFJDVS4KKwlyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBmb3IgUkNVLWJoLgorCXJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIGZvciBSQ1Utc2NoZWQuCisJc3JjdV9yZWFkX2xvY2tfaGVsZCgpIGZvciBTUkNVLgorCitUaGVzZSBmdW5jdGlvbnMgYXJlIGNvbnNlcnZhdGl2ZSwgYW5kIHdpbGwgdGhlcmVmb3JlIHJldHVybiAxIGlmIHRoZXkKK2FyZW4ndCBjZXJ0YWluIChmb3IgZXhhbXBsZSwgaWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldCkuCitUaGlzIHByZXZlbnRzIHRoaW5ncyBsaWtlIFdBUk5fT04oIXJjdV9yZWFkX2xvY2tfaGVsZCgpKSBmcm9tIGdpdmluZyBmYWxzZQorcG9zaXRpdmVzIHdoZW4gbG9ja2RlcCBpcyBkaXNhYmxlZC4KKworSW4gYWRkaXRpb24sIGEgc2VwYXJhdGUga2VybmVsIGNvbmZpZyBwYXJhbWV0ZXIgQ09ORklHX1BST1ZFX1JDVSBlbmFibGVzCitjaGVja2luZyBvZiByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmVzOgorCisJcmN1X2RlcmVmZXJlbmNlKHApOgorCQlDaGVjayBmb3IgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXJjdV9kZXJlZmVyZW5jZV9iaChwKToKKwkJQ2hlY2sgZm9yIFJDVS1iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQocCk6CisJCUNoZWNrIGZvciBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJc3JjdV9kZXJlZmVyZW5jZShwLCBzcCk6CisJCUNoZWNrIGZvciBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBjKToKKwkJVXNlIGV4cGxpY2l0IGNoZWNrIGV4cHJlc3Npb24gImMiLgorCXJjdV9kZXJlZmVyZW5jZV9yYXcocCkKKwkJRG9uJ3QgY2hlY2suICAoVXNlIHNwYXJpbmdseSwgaWYgYXQgYWxsLikKKworVGhlIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGNoZWNrIGV4cHJlc3Npb24gY2FuIGJlIGFueSBib29sZWFuCitleHByZXNzaW9uLCBidXQgd291bGQgbm9ybWFsbHkgaW5jbHVkZSBvbmUgb2YgdGhlIHJjdV9yZWFkX2xvY2tfaGVsZCgpCitmYW1pbHkgb2YgZnVuY3Rpb25zIGFuZCBhIGxvY2tkZXAgZXhwcmVzc2lvbi4gIEhvd2V2ZXIsIGFueSBib29sZWFuCitleHByZXNzaW9uIGNhbiBiZSB1c2VkLiAgRm9yIGEgbW9kZXJhdGVseSBvcm5hdGUgZXhhbXBsZSwgY29uc2lkZXIKK3RoZSBmb2xsb3dpbmc6CisKKwlmaWxlID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGZkdC0+ZmRbZmRdLAorCQkJCSAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgIGxvY2tkZXBfaXNfaGVsZCgmZmlsZXMtPmZpbGVfbG9jaykgfHwKKwkJCQkgICAgIGF0b21pY19yZWFkKCZmaWxlcy0+Y291bnQpID09IDEpOworCitUaGlzIGV4cHJlc3Npb24gcGlja3MgdXAgdGhlIHBvaW50ZXIgImZkdC0+ZmRbZmRdIiBpbiBhbiBSQ1Utc2FmZSBtYW5uZXIsCithbmQsIGlmIENPTkZJR19QUk9WRV9SQ1UgaXMgY29uZmlndXJlZCwgdmVyaWZpZXMgdGhhdCB0aGlzIGV4cHJlc3Npb24KK2lzIHVzZWQgaW46CisKKzEuCUFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgb3IKKzIuCXdpdGggZmlsZXMtPmZpbGVfbG9jayBoZWxkLCBvcgorMy4Jb24gYW4gdW5zaGFyZWQgZmlsZXNfc3RydWN0LgorCitJbiBjYXNlICgxKSwgdGhlIHBvaW50ZXIgaXMgcGlja2VkIHVwIGluIGFuIFJDVS1zYWZlIG1hbm5lciBmb3IgdmFuaWxsYQorUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgaW4gY2FzZSAoMikgdGhlIC0+ZmlsZV9sb2NrIHByZXZlbnRzCithbnkgY2hhbmdlIGZyb20gdGFraW5nIHBsYWNlLCBhbmQgZmluYWxseSwgaW4gY2FzZSAoMykgdGhlIGN1cnJlbnQgdGFzaworaXMgdGhlIG9ubHkgdGFzayBhY2Nlc3NpbmcgdGhlIGZpbGVfc3RydWN0LCBhZ2FpbiBwcmV2ZW50aW5nIGFueSBjaGFuZ2UKK2Zyb20gdGFraW5nIHBsYWNlLgorCitUaGVyZSBhcmUgY3VycmVudGx5IG9ubHkgInVuaXZlcnNhbCIgdmVyc2lvbnMgb2YgdGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpCithbmQgUkNVIGxpc3QtL3RyZWUtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGRvIG5vdCAoeWV0KSBjaGVjayBmb3IKK2JlaW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEluIHRoZSBmdXR1cmUsIHNlcGFyYXRlCit2ZXJzaW9ucyBvZiB0aGVzZSBwcmltaXRpdmVzIG1pZ2h0IGJlIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCAyYTIzNTIzLi4zMTg1MjcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTc1LDYgKzc1LDggQEAKIAlzZWFyY2ggZm9yIHRoZSBzdHJpbmcgIlBhdGVudCIgaW4gUlRGUC50eHQgdG8gZmluZCB0aGVtLgogCU9mIHRoZXNlLCBvbmUgd2FzIGFsbG93ZWQgdG8gbGFwc2UgYnkgdGhlIGFzc2lnbmVlLCBhbmQgdGhlCiAJb3RoZXJzIGhhdmUgYmVlbiBjb250cmlidXRlZCB0byB0aGUgTGludXgga2VybmVsIHVuZGVyIEdQTC4KKwlUaGVyZSBhcmUgbm93IGFsc28gTEdQTCBpbXBsZW1lbnRhdGlvbnMgb2YgdXNlci1sZXZlbCBSQ1UKKwlhdmFpbGFibGUgKGh0dHA6Ly9sdHRuZy5vcmcvP3E9bm9kZS8xOCkuCiAKIG8JSSBoZWFyIHRoYXQgUkNVIG5lZWRzIHdvcmsgaW4gb3JkZXIgdG8gc3VwcG9ydCByZWFsdGltZSBrZXJuZWxzPwogCkBAIC05MSw0OCArOTMsNCBAQAogCiBvCVdoYXQgYXJlIGFsbCB0aGVzZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeT8KIAotCi0JTk1JLVJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gaW1wbGVtZW50IGR5bmFtaWMKLQkJTk1JIGhhbmRsZXJzLCB3aGljaCBjYW4gYmUgcmV2ZWN0b3JlZCBvbiB0aGUgZmx5LAotCQl3aXRob3V0IHJlYm9vdGluZy4KLQotCVJURlAudHh0Ci0KLQkJTGlzdCBvZiBSQ1UtcmVsYXRlZCBwdWJsaWNhdGlvbnMgYW5kIHdlYiBzaXRlcy4KLQotCVVQLnR4dAotCi0JCURpc2N1c3Npb24gb2YgUkNVIHVzYWdlIGluIFVQIGtlcm5lbHMuCi0KLQlhcnJheVJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gcHJvdGVjdCBhcnJheXMsIHdpdGgKLQkJcmVzaXplYWJsZSBhcnJheXMgd2hvc2UgZWxlbWVudHMgcmVmZXJlbmNlIG90aGVyCi0JCWRhdGEgc3RydWN0dXJlcyBiZWluZyBvZiB0aGUgbW9zdCBpbnRlcmVzdC4KLQotCWNoZWNrbGlzdC50eHQKLQotCQlMaXN0cyB0aGluZ3MgdG8gY2hlY2sgZm9yIHdoZW4gaW5zcGVjdGluZyBjb2RlIHRoYXQKLQkJdXNlcyBSQ1UuCi0KLQlsaXN0UkNVLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gdXNlIFJDVSB0byBwcm90ZWN0IGxpbmtlZCBsaXN0cy4KLQkJVGhpcyBpcyB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgY29tbW9uIHVzZSBvZiBSQ1UKLQkJaW4gdGhlIExpbnV4IGtlcm5lbC4KLQotCXJjdS50eHQKLQotCQlZb3UgYXJlIHJlYWRpbmcgaXQhCi0KLQlyY3VyZWYudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byBjb21iaW5lIHVzZSBvZiByZWZlcmVuY2UgY291bnRzCi0JCXdpdGggUkNVLgotCi0Jd2hhdGlzUkNVLnR4dAotCi0JCU92ZXJ2aWV3IG9mIGhvdyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHdvcmtzLiAgQWxvbmcKLQkJdGhlIHdheSwgcHJlc2VudHMgYSBjb25jZXB0dWFsIHZpZXcgb2YgUkNVLgorCVNlZSAwMC1JTkRFWCBmb3IgdGhlIGxpc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIzZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApAQCAtMCwwICsxLDU4IEBACitVc2luZyBSQ1UncyBDUFUgU3RhbGwgRGV0ZWN0b3IKKworVGhlIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIGVuYWJsZXMKK1JDVSdzIENQVSBzdGFsbCBkZXRlY3Rvciwgd2hpY2ggZGV0ZWN0cyBjb25kaXRpb25zIHRoYXQgdW5kdWx5IGRlbGF5CitSQ1UgZ3JhY2UgcGVyaW9kcy4gIFRoZSBzdGFsbCBkZXRlY3RvcidzIGlkZWEgb2Ygd2hhdCBjb25zdGl0dXRlcworInVuZHVseSBkZWxheWVkIiBpcyBjb250cm9sbGVkIGJ5IGEgcGFpciBvZiBDIHByZXByb2Nlc3NvciBtYWNyb3M6CisKK1JDVV9TRUNPTkRTX1RJTExfU1RBTExfQ0hFQ0sKKworCVRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCBSQ1Ugd2lsbCB3YWl0IGZyb20KKwl0aGUgYmVnaW5uaW5nIG9mIGEgZ3JhY2UgcGVyaW9kIHVudGlsIGl0IGlzc3VlcyBhbiBSQ1UgQ1BVCisJc3RhbGwgd2FybmluZy4JSXQgaXMgbm9ybWFsbHkgdGVuIHNlY29uZHMuCisKK1JDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSworCisJVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwZXJpb2Qgb2YgdGltZSB0aGF0IFJDVSB3aWxsIHdhaXQgYWZ0ZXIKKwlpc3N1aW5nIGEgc3RhbGwgd2FybmluZyB1bnRpbCBpdCBpc3N1ZXMgYW5vdGhlciBzdGFsbCB3YXJuaW5nLgorCUl0IGlzIG5vcm1hbGx5IHNldCB0byB0aGlydHkgc2Vjb25kcy4KKworUkNVX1NUQUxMX1JBVF9ERUxBWQorCisJVGhlIENQVSBzdGFsbCBkZXRlY3RvciB0cmllcyB0byBtYWtlIHRoZSBvZmZlbmRpbmcgQ1BVIHJhdCBvbiBpdHNlbGYsCisJYXMgdGhpcyBvZnRlbiBnaXZlcyBiZXR0ZXItcXVhbGl0eSBzdGFjayB0cmFjZXMuICBIb3dldmVyLCBpZgorCXRoZSBvZmZlbmRpbmcgQ1BVIGRvZXMgbm90IGRldGVjdCBpdHMgb3duIHN0YWxsIGluIHRoZSBudW1iZXIKKwlvZiBqaWZmaWVzIHNwZWNpZmllZCBieSBSQ1VfU1RBTExfUkFUX0RFTEFZLCB0aGVuIG90aGVyIENQVXMgd2lsbAorCWNvbXBsYWluLiAgVGhpcyBpcyBub3JtYWxseSBzZXQgdG8gdHdvIGppZmZpZXMuCisKK1RoZSBmb2xsb3dpbmcgcHJvYmxlbXMgY2FuIHJlc3VsdCBpbiBhbiBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmc6CisKK28JQSBDUFUgbG9vcGluZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJCitvCUEgQ1BVIGxvb3Bpbmcgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCitvCUEgQ1BVIGxvb3Bpbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorCitvCUZvciAhQ09ORklHX1BSRUVNUFQga2VybmVscywgYSBDUFUgbG9vcGluZyBhbnl3aGVyZSBpbiB0aGUga2VybmVsCisJd2l0aG91dCBpbnZva2luZyBzY2hlZHVsZSgpLgorCitvCUEgYnVnIGluIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24uCisKK28JQSBoYXJkd2FyZSBmYWlsdXJlLiAgVGhpcyBpcyBxdWl0ZSB1bmxpa2VseSwgYnV0IGhhcyBvY2N1cnJlZAorCWF0IGxlYXN0IG9uY2UgaW4gYSBmb3JtZXIgbGlmZS4gIEEgQ1BVIGZhaWxlZCBpbiBhIHJ1bm5pbmcgc3lzdGVtLAorCWJlY29taW5nIHVucmVzcG9uc2l2ZSwgYnV0IG5vdCBjYXVzaW5nIGFuIGltbWVkaWF0ZSBjcmFzaC4KKwlUaGlzIHJlc3VsdGVkIGluIGEgc2VyaWVzIG9mIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MsIGV2ZW50dWFsbHkKKwlsZWFkaW5nIHRoZSByZWFsaXphdGlvbiB0aGF0IHRoZSBDUFUgaGFkIGZhaWxlZC4KKworVGhlIFJDVSwgUkNVLXNjaGVkLCBhbmQgUkNVLWJoIGltcGxlbWVudGF0aW9ucyBoYXZlIENQVSBzdGFsbCB3YXJuaW5nLgorU1JDVSBkb2VzIG5vdCBkbyBzbyBkaXJlY3RseSwgYnV0IGl0cyBjYWxscyB0byBzeW5jaHJvbml6ZV9zY2hlZCgpIHdpbGwKK3Jlc3VsdCBpbiBSQ1Utc2NoZWQgZGV0ZWN0aW5nIGFueSBDUFUgc3RhbGxzIHRoYXQgbWlnaHQgYmUgb2NjdXJyaW5nLgorCitUbyBkaWFnbm9zZSB0aGUgY2F1c2Ugb2YgdGhlIHN0YWxsLCBpbnNwZWN0IHRoZSBzdGFjayB0cmFjZXMuICBUaGUgb2ZmZW5kaW5nCitmdW5jdGlvbiB3aWxsIHVzdWFsbHkgYmUgbmVhciB0aGUgdG9wIG9mIHRoZSBzdGFjay4gIElmIHlvdSBoYXZlIGEgc2VyaWVzCitvZiBzdGFsbCB3YXJuaW5ncyBmcm9tIGEgc2luZ2xlIGV4dGVuZGVkIHN0YWxsLCBjb21wYXJpbmcgdGhlIHN0YWNrIHRyYWNlcworY2FuIG9mdGVuIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBzdGFsbCBpcyBvY2N1cnJpbmcsIHdoaWNoIHdpbGwgdXN1YWxseQorYmUgaW4gdGhlIGZ1bmN0aW9uIG5lYXJlc3QgdGhlIHRvcCBvZiB0aGUgc3RhY2sgdGhhdCBzdGF5cyB0aGUgc2FtZSBmcm9tCit0cmFjZSB0byB0cmFjZS4KKworUkNVIGJ1Z3MgY2FuIG9mdGVuIGJlIGRlYnVnZ2VkIHdpdGggdGhlIGhlbHAgb2YgQ09ORklHX1JDVV9UUkFDRS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKaW5kZXggOWRiYTNiYi4uMGU1MGJjMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKQEAgLTMwLDYgKzMwLDE4IEBACiAKIFRoaXMgbW9kdWxlIGhhcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CiAKK2Zxc19kdXJhdGlvbglEdXJhdGlvbiAoaW4gbWljcm9zZWNvbmRzKSBvZiBhcnRpZmljaWFsbHkgaW5kdWNlZCBidXJzdHMKKwkJb2YgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaW52b2NhdGlvbnMuICBJbiBSQ1UKKwkJaW1wbGVtZW50YXRpb25zIGhhdmluZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlc2UKKwkJYnVyc3RzIGhlbHAgZm9yY2UgcmFjZXMgYmV0d2VlbiBmb3JjaW5nIGEgZ2l2ZW4gZ3JhY2UKKwkJcGVyaW9kIGFuZCB0aGF0IGdyYWNlIHBlcmlvZCBlbmRpbmcgb24gaXRzIG93bi4KKworZnFzX2hvbGRvZmYJSG9sZG9mZiB0aW1lIChpbiBtaWNyb3NlY29uZHMpIGJldHdlZW4gY29uc2VjdXRpdmUgY2FsbHMKKwkJdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgd2l0aGluIGEgYnVyc3QuCisKK2Zxc19zdHV0dGVyCVdhaXQgdGltZSAoaW4gc2Vjb25kcykgYmV0d2VlbiBjb25zZWN1dGl2ZSBidXJzdHMKKwkJb2YgY2FsbHMgdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuCisKIGlycXJlYWRlcnMJU2F5cyB0byBpbnZva2UgUkNVIHJlYWRlcnMgZnJvbSBpcnEgbGV2ZWwuICBUaGlzIGlzIGN1cnJlbnRseQogCQlkb25lIHZpYSB0aW1lcnMuICBEZWZhdWx0cyB0byAiMSIgZm9yIHZhcmlhbnRzIG9mIFJDVSB0aGF0CiAJCXBlcm1pdCB0aGlzLiAgKE9yLCBtb3JlIGFjY3VyYXRlbHksIHZhcmlhbnRzIG9mIFJDVSB0aGF0IGRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCBkNTQyY2EyLi4xZGMwMGVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTMyMywxNCArMzIzLDE3IEBACiAJRGVmZXIJCQlQcm90ZWN0CiAKIGEuCXN5bmNocm9uaXplX3JjdSgpCXJjdV9yZWFkX2xvY2soKSAvIHJjdV9yZWFkX3VubG9jaygpCi0JY2FsbF9yY3UoKQorCWNhbGxfcmN1KCkJCXJjdV9kZXJlZmVyZW5jZSgpCiAKIGIuCWNhbGxfcmN1X2JoKCkJCXJjdV9yZWFkX2xvY2tfYmgoKSAvIHJjdV9yZWFkX3VubG9ja19iaCgpCisJCQkJcmN1X2RlcmVmZXJlbmNlX2JoKCkKIAotYy4Jc3luY2hyb25pemVfc2NoZWQoKQlwcmVlbXB0X2Rpc2FibGUoKSAvIHByZWVtcHRfZW5hYmxlKCkKK2MuCXN5bmNocm9uaXplX3NjaGVkKCkJcmN1X3JlYWRfbG9ja19zY2hlZCgpIC8gcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCkKKwkJCQlwcmVlbXB0X2Rpc2FibGUoKSAvIHByZWVtcHRfZW5hYmxlKCkKIAkJCQlsb2NhbF9pcnFfc2F2ZSgpIC8gbG9jYWxfaXJxX3Jlc3RvcmUoKQogCQkJCWhhcmRpcnEgZW50ZXIgLyBoYXJkaXJxIGV4aXQKIAkJCQlOTUkgZW50ZXIgLyBOTUkgZXhpdAorCQkJCXJjdV9kZXJlZmVyZW5jZV9zY2hlZCgpCiAKIFRoZXNlIHRocmVlIG1lY2hhbmlzbXMgYXJlIHVzZWQgYXMgZm9sbG93czoKIApAQCAtNzgwLDkgKzc4Myw4IEBACiBBUElzLCBzaW5jZSB0aGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gY2F0ZWdvcml6ZSB0aGVtCiBpbiBkb2Nib29rLiAgSGVyZSBpcyB0aGUgbGlzdCwgYnkgY2F0ZWdvcnkuCiAKLVJDVSBwb2ludGVyL2xpc3QgdHJhdmVyc2FsOgorUkNVIGxpc3QgdHJhdmVyc2FsOgogCi0JcmN1X2RlcmVmZXJlbmNlCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UKQEAgLTgwOCw3ICs4MTAsNyBAQAogCiAJcmN1X3JlYWRfbG9jawkJc3luY2hyb25pemVfbmV0CQlyY3VfYmFycmllcgogCXJjdV9yZWFkX3VubG9jawkJc3luY2hyb25pemVfcmN1Ci0JCQkJc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZAorCXJjdV9kZXJlZmVyZW5jZQkJc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZAogCQkJCWNhbGxfcmN1CiAKIApAQCAtODE2LDcgKzgxOCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrX2JoCWNhbGxfcmN1X2JoCQlyY3VfYmFycmllcl9iaAogCXJjdV9yZWFkX3VubG9ja19iaAlzeW5jaHJvbml6ZV9yY3VfYmgKLQkJCQlzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkCisJcmN1X2RlcmVmZXJlbmNlX2JoCXN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQKIAogCiBzY2hlZDoJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCkBAIC04MjUsMTIgKzgyNywxNCBAQAogCXJjdV9yZWFkX3VubG9ja19zY2hlZAljYWxsX3JjdV9zY2hlZAogCVtwcmVlbXB0X2Rpc2FibGVdCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZAogCVthbmQgZnJpZW5kc10KKwlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQKIAogCiBTUkNVOglDcml0aWNhbCBzZWN0aW9ucwlHcmFjZSBwZXJpb2QJCUJhcnJpZXIKIAogCXNyY3VfcmVhZF9sb2NrCQlzeW5jaHJvbml6ZV9zcmN1CU4vQQogCXNyY3VfcmVhZF91bmxvY2sJc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQKKwlzcmN1X2RlcmVmZXJlbmNlCiAKIFNSQ1U6CUluaXRpYWxpemF0aW9uL2NsZWFudXAKIAlpbml0X3NyY3Vfc3RydWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dAppbmRleCA5ZDU4YzdjNS4uZWIwZmFlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CkBAIC01OSw3ICs1OSwxMSBAQAogCQkJCVRoaXMgbWFwcyB0aGUgcGxhdGZvcm1zIFJBTSwgYW5kIHR5cGljYWxseQogCQkJCW1hcHMgYWxsIHBsYXRmb3JtIFJBTSBpbiBhIDE6MSByZWxhdGlvbnNoaXAuCiAKLVRBU0tfU0laRQlQQUdFX09GRlNFVC0xCUtlcm5lbCBtb2R1bGUgc3BhY2UKK1BLTUFQX0JBU0UJUEFHRV9PRkZTRVQtMQlQZXJtYW5lbnQga2VybmVsIG1hcHBpbmdzCisJCQkJT25lIHdheSBvZiBtYXBwaW5nIEhJR0hNRU0gcGFnZXMgaW50byBrZXJuZWwKKwkJCQlzcGFjZS4KKworTU9EVUxFU19WQUREUglNT0RVTEVTX0VORC0xCUtlcm5lbCBtb2R1bGUgc3BhY2UKIAkJCQlLZXJuZWwgbW9kdWxlcyBpbnNlcnRlZCB2aWEgaW5zbW9kIGFyZQogCQkJCXBsYWNlZCBoZXJlIHVzaW5nIGR5bmFtaWMgbWFwcGluZ3MuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9xdWV1ZS1zeXNmcy50eHQKaW5kZXggZTE2NDQwM2YuLmY2NTI3NDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0CkBAIC0yNSwxMSArMjUsMTEgQEAKIAogbm9tZXJnZXMgKFJXKQogLS0tLS0tLS0tLS0tLQotVGhpcyBlbmFibGVzIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIGxvb2t1cCBsb2dpYyBpbnZvbHZlZCB3aXRoIElPIG1lcmdpbmcKLXJlcXVlc3RzIGluIHRoZSBibG9jayBsYXllci4gTWVyZ2luZyBtYXkgc3RpbGwgb2NjdXIgdGhyb3VnaCBhIGRpcmVjdAotMS1oaXQgY2FjaGUsIHNpbmNlIHRoYXQgY29tZXMgZm9yIChhbG1vc3QpIGZyZWUuIFRoZSBJTyBzY2hlZHVsZXIgd2lsbCBub3QKLXdhc3RlIGN5Y2xlcyBkb2luZyB0cmVlL2hhc2ggbG9va3VwcyBmb3IgbWVyZ2VzIGlmIG5vbWVyZ2VzIGlzIDEuIERlZmF1bHRzCi10byAwLCBlbmFibGluZyBhbGwgbWVyZ2VzLgorVGhpcyBlbmFibGVzIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIGxvb2t1cCBsb2dpYyBpbnZvbHZlZCB3aXRoIElPCittZXJnaW5nIHJlcXVlc3RzIGluIHRoZSBibG9jayBsYXllci4gQnkgZGVmYXVsdCAoMCkgYWxsIG1lcmdlcyBhcmUKK2VuYWJsZWQuIFdoZW4gc2V0IHRvIDEgb25seSBzaW1wbGUgb25lLWhpdCBtZXJnZXMgd2lsbCBiZSB0cmllZC4gV2hlbgorc2V0IHRvIDIgbm8gbWVyZ2UgYWxnb3JpdGhtcyB3aWxsIGJlIHRyaWVkIChpbmNsdWRpbmcgb25lLWhpdCBvciBtb3JlCitjb21wbGV4IHRyZWUvaGFzaCBsb29rdXBzKS4KIAogbnJfcmVxdWVzdHMgKFJXKQogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAppbmRleCBkYTQyYWI0Li4yYjVmODIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtODgsMTIgKzg4LDEyIEBACiAJVGhpcyBpcyB1c2VkIHByaW1hcmlseSBkdXJpbmcgZmF1bHQgcHJvY2Vzc2luZy4KIAogNSkgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiAKIAlBdCB0aGUgZW5kIG9mIGV2ZXJ5IHBhZ2UgZmF1bHQsIHRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvCiAJdGVsbCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgdGhhdCBhIHRyYW5zbGF0aW9uCi0JZGVzY3JpYmVkIGJ5ICJwdGUiIG5vdyBleGlzdHMgYXQgdmlydHVhbCBhZGRyZXNzICJhZGRyZXNzIgotCWZvciBhZGRyZXNzIHNwYWNlICJ2bWEtPnZtX21tIiwgaW4gdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzLgorCW5vdyBleGlzdHMgYXQgdmlydHVhbCBhZGRyZXNzICJhZGRyZXNzIiBmb3IgYWRkcmVzcyBzcGFjZQorCSJ2bWEtPnZtX21tIiwgaW4gdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzLgogCiAJQSBwb3J0IG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBpbiBhbnkgd2F5IGl0IHNvIGNob29zZXMuCiAJRm9yIGV4YW1wbGUsIGl0IGNvdWxkIHVzZSB0aGlzIGV2ZW50IHRvIHByZS1sb2FkIFRMQgpAQCAtMzc3LDMgKzM3NywyNyBAQAogCUFsbCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBmbHVzaF9pY2FjaGVfcGFnZSBjYW4gYmUgaW1wbGVtZW50ZWQgaW4KIAlmbHVzaF9kY2FjaGVfcGFnZSBhbmQgdXBkYXRlX21tdV9jYWNoZS4gSW4gMi43IHRoZSBob3BlIGlzIHRvCiAJcmVtb3ZlIHRoaXMgaW50ZXJmYWNlIGNvbXBsZXRlbHkuCisKK1RoZSBmaW5hbCBjYXRlZ29yeSBvZiBBUElzIGlzIGZvciBJL08gdG8gZGVsaWJlcmF0ZWx5IGFsaWFzZWQgYWRkcmVzcworcmFuZ2VzIGluc2lkZSB0aGUga2VybmVsLiAgU3VjaCBhbGlhc2VzIGFyZSBzZXQgdXAgYnkgdXNlIG9mIHRoZQordm1hcC92bWFsbG9jIEFQSS4gIFNpbmNlIGtlcm5lbCBJL08gZ29lcyB2aWEgcGh5c2ljYWwgcGFnZXMsIHRoZSBJL08KK3N1YnN5c3RlbSBhc3N1bWVzIHRoYXQgdGhlIHVzZXIgbWFwcGluZyBhbmQga2VybmVsIG9mZnNldCBtYXBwaW5nIGFyZQordGhlIG9ubHkgYWxpYXNlcy4gIFRoaXMgaXNuJ3QgdHJ1ZSBmb3Igdm1hcCBhbGlhc2VzLCBzbyBhbnl0aGluZyBpbgordGhlIGtlcm5lbCB0cnlpbmcgdG8gZG8gSS9PIHRvIHZtYXAgYXJlYXMgbXVzdCBtYW51YWxseSBtYW5hZ2UKK2NvaGVyZW5jeS4gIEl0IG11c3QgZG8gdGhpcyBieSBmbHVzaGluZyB0aGUgdm1hcCByYW5nZSBiZWZvcmUgZG9pbmcKK0kvTyBhbmQgaW52YWxpZGF0aW5nIGl0IGFmdGVyIHRoZSBJL08gcmV0dXJucy4KKworICB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKKyAgICAgICBmbHVzaGVzIHRoZSBrZXJuZWwgY2FjaGUgZm9yIGEgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIHJhbmdlIGluCisgICAgICAgdGhlIHZtYXAgYXJlYS4gIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGRhdGEgdGhlIGtlcm5lbAorICAgICAgIG1vZGlmaWVkIGluIHRoZSB2bWFwIHJhbmdlIGlzIG1hZGUgdmlzaWJsZSB0byB0aGUgcGh5c2ljYWwKKyAgICAgICBwYWdlLiAgVGhlIGRlc2lnbiBpcyB0byBtYWtlIHRoaXMgYXJlYSBzYWZlIHRvIHBlcmZvcm0gSS9PIG9uLgorICAgICAgIE5vdGUgdGhhdCB0aGlzIEFQSSBkb2VzICpub3QqIGFsc28gZmx1c2ggdGhlIG9mZnNldCBtYXAgYWxpYXMKKyAgICAgICBvZiB0aGUgYXJlYS4KKworICB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKSBpbnZhbGlkYXRlcworICAgICAgIHRoZSBjYWNoZSBmb3IgYSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIHZtYXAgYXJlYQorICAgICAgIHdoaWNoIHByZXZlbnRzIHRoZSBwcm9jZXNzb3IgZnJvbSBtYWtpbmcgdGhlIGNhY2hlIHN0YWxlIGJ5CisgICAgICAgc3BlY3VsYXRpdmVseSByZWFkaW5nIGRhdGEgd2hpbGUgdGhlIEkvTyB3YXMgb2NjdXJyaW5nIHRvIHRoZQorICAgICAgIHBoeXNpY2FsIHBhZ2VzLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZGF0YSByZWFkcyBpbnRvIHRoZQorICAgICAgIHZtYXAgYXJlYS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IDNhZDZhY2UuLmQ5YmNmZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNjksNyArNjksNiBAQAogYmJvb3RzZWN0CiBiaW4yYwogYmlua2VybmVsLnNwZWMKLWJpbm9mZnNldAogYm9vdHNlY3QKIGJvdW5kcy5oCiBic2V0dXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCmluZGV4IDE0YjdiNWEuLjIzOWNiZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMjYsNyArMjYsNyBAQAogCQkiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIsCiAJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiLAotCQkiYWY5MDE1Iik7CisJCSJhZjkwMTUiLCAibmdlbmUiKTsKIAogIyBDaGVjayBhcmdzCiBzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKQEAgLTM5LDcgKzM5LDcgQEAKIAlkaWUgJEAgaWYgJEA7CiAJcHJpbnQgU1RERVJSIDw8RU9GOwogRmlybXdhcmUocykgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4KLU5vdyBjb3B5IGl0KHRoZXkpIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKK05vdyBjb3B5IGl0KHRoZW0pIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KIEVPRgogCWV4aXQoMCk7CkBAIC01NDksNiArNTQ5LDI0IEBACiAJY2xvc2UgSU5GSUxFOwogfQogCitzdWIgbmdlbmUgeworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5kaWdpdGFsZGV2aWNlcy5kZS9kb3dubG9hZC8iOworICAgIG15ICRmaWxlMSA9ICJuZ2VuZV8xNS5mdyI7CisgICAgbXkgJGhhc2gxID0gImQ3OThkNWE3NTcxMjExNzRmMGRiYzVmMjgzM2MwYzg1IjsKKyAgICBteSAkZmlsZTIgPSAibmdlbmVfMTcuZnciOworICAgIG15ICRoYXNoMiA9ICIyNmI2ODcxMzZlMTI3YjhhYzI0YjgxZTBlZWFmYzIwYiI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZmlsZTEsICR1cmwgLiAkZmlsZTEpOworICAgIHZlcmlmeSgkZmlsZTEsICRoYXNoMSk7CisKKyAgICB3Z2V0ZmlsZSgkZmlsZTIsICR1cmwgLiAkZmlsZTIpOworICAgIHZlcmlmeSgkZmlsZTIsICRoYXNoMik7CisKKyAgICAiJGZpbGUxLCAkZmlsZTIiOworfQorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBVdGlsaXRpZXMKIApAQCAtNjY3LDYgKzY4NSw3IEBACiBzdWIgc3ludGF4KCkgewogICAgIHByaW50IFNUREVSUiAic3ludGF4OiBnZXRfZHZiX2Zpcm13YXJlIDxjb21wb25lbnQ+XG4iOwogICAgIHByaW50IFNUREVSUiAiU3VwcG9ydGVkIGNvbXBvbmVudHM6XG4iOworICAgIEBjb21wb25lbnRzID0gc29ydCBAY29tcG9uZW50czsKICAgICBmb3IoJGk9MDsgJGkgPCBzY2FsYXIoQGNvbXBvbmVudHMpOyAkaSsrKSB7CiAJcHJpbnQgU1RERVJSICJcdCIgLiAkY29tcG9uZW50c1skaV0gLiAiXG4iOwogICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAwYTQ2ODMzLi4wMzQ5NzkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02LDIxICs2LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVVTRVJfU0NIRUQKLVdoZW46CTIuNi4zNAotCi1XaHk6CVVTRVJfU0NIRUQgd2FzIGltcGxlbWVudGVkIGFzIGEgcHJvb2Ygb2YgY29uY2VwdCBmb3IgZ3JvdXAgc2NoZWR1bGluZy4KLQlUaGUgZWZmZWN0IG9mIFVTRVJfU0NIRUQgY2FuIGFscmVhZHkgYmUgYWNoaWV2ZWQgZnJvbSB1c2Vyc3BhY2Ugd2l0aAotCXRoZSBoZWxwIG9mIGxpYmNncm91cC4gVGhlIHJlbW92YWwgb2YgVVNFUl9TQ0hFRCB3aWxsIGFsc28gc2ltcGxpZnkKLQl0aGUgc2NoZWR1bGVyIGNvZGUgd2l0aCB0aGUgcmVtb3ZhbCBvZiBvbmUgbWFqb3IgaWZkZWYuIFRoZXJlIGFyZSBhbHNvCi0JaXNzdWVzIFVTRVJfU0NIRUQgaGFzIHdpdGggVVNFUl9OUy4gQSBkZWNpc2lvbiB3YXMgdGFrZW4gbm90IHRvIGZpeAotCXRob3NlIGFuZCBpbnN0ZWFkIHJlbW92ZSBVU0VSX1NDSEVELiBBbHNvIG5ldyBncm91cCBzY2hlZHVsaW5nCi0JZmVhdHVyZXMgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgZm9yIFVTRVJfU0NIRUQuCi0KLVdobzoJRGhhdmFsIEdpYW5pIDxkaGF2YWxAbGludXgudm5ldC5pYm0uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJUFJJU001NAogV2hlbjoJMi42LjM0CiAKQEAgLTY0LDYgKzQ5LDE3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglEZXByZWNhdGVkIHNuYXBzaG90IGlvY3RscworV2hlbjoJMi42LjM2CisKK1doeToJVGhlIGlvY3RscyBpbiBrZXJuZWwvcG93ZXIvdXNlci5jIHdlcmUgbWFya2VkIGFzIGRlcHJlY2F0ZWQgbG9uZyB0aW1lCisJYWdvLiBOb3cgdGhleSBub3RpZnkgdXNlcnMgYWJvdXQgdGhhdCBzbyB0aGF0IHRoZXkgbmVlZCB0byByZXBsYWNlCisJdGhlaXIgdXNlcnNwYWNlLiBBZnRlciBzb21lIG1vcmUgdGltZSwgcmVtb3ZlIHRoZW0gY29tcGxldGVseS4KKworV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJVGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgogV2hlbjoJTWFyY2ggMjAxMCAvIGRlc2t0b3AgY2F0Y2h1cAogCkBAIC04OCwyNyArODQsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIC0gb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCi1XaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCi0KLVdoeToJVGhlIG9sZCByZWd1bGF0b3J5IGluZnJhc3RydWN0dXJlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgb25lCi0Jd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBzdGF0aWNhbGx5IGRlZmluZWQgcmVndWxhdG9yeSBkb21haW5zLiBXZSBkbwotCW5vdCB3YW50IHRvIGtlZXAgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiB0aGUga2VybmVsIGR1ZSB0byB0aGUKLQl0aGUgZHluYW1pYyBuYXR1cmUgb2YgcmVndWxhdG9yeSBsYXcgYW5kIGxvY2FsaXphdGlvbi4gV2Uga2VwdCBhcm91bmQKLQl0aGUgb2xkIHN0YXRpYyBkZWZpbml0aW9ucyBmb3IgdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBvZjoKLQotCQkqIFVTCi0JCSogSlAKLQkJKiBFVQotCi0JYW5kIHVzZWQgYnkgZGVmYXVsdCB0aGUgVVMgd2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgd2FzCi0Jc2V0LiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbiBvbmNlIHRoZSBzdGFuZGFyZCBMaW51eCBkZXNrdG9wIGNhdGNoZXMKLQl1cCB3aXRoIHRoZSBuZXcgdXNlcnNwYWNlIEFQSXMgd2UgaGF2ZSBpbXBsZW1lbnRlZC4KLQotV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWRldi0+cG93ZXIucG93ZXJfc3RhdGUKIFdoZW46CUp1bHkgMjAwNwogV2h5OglCcm9rZW4gZGVzaWduIGZvciBydW50aW1lIGNvbnRyb2wgb3ZlciBkcml2ZXIgcG93ZXIgc3RhdGVzLCBjb25mdXNpbmcKQEAgLTE0MiwxOSArMTE3LDI1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hhdDoJUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG5lZWRlZCBmb3IgcGNtY2lhLWNzIFtjYXJkbWdyLCBjYXJkY3RsXSkKLVdoZW46CU5vdmVtYmVyIDIwMDUKK1doZW46CTIuNi4zNS8yLjYuMzYKIEZpbGVzOglkcml2ZXJzL3BjbWNpYS86IHBjbWNpYV9pb2N0bC5jCiBXaHk6CVdpdGggdGhlIDE2LWJpdCBQQ01DSUEgc3Vic3lzdGVtIG5vdyBiZWhhdmluZyAoYWxtb3N0KSBsaWtlIGEKIAlub3JtYWwgaG90cGx1Z2dhYmxlIGJ1cywgYW5kIHdpdGggaXQgdXNpbmcgdGhlIGRlZmF1bHQga2VybmVsCiAJaW5mcmFzdHJ1Y3R1cmUgKGhvdHBsdWcsIGRyaXZlciBjb3JlLCBzeXNmcykga2VlcGluZyB0aGUgUENNQ0lBCiAJY29udHJvbCBpb2N0bCBuZWVkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBmcm9tIHBjbWNpYS1jcyBpcwotCXVubmVjZXNzYXJ5LCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCisJdW5uZWNlc3NhcnkgYW5kIHBvdGVudGlhbGx5IGhhcm1mdWwgKGl0IGRvZXMgbm90IHByb3ZpZGUgZm9yCisJcHJvcGVyIGxvY2tpbmcpLCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCiAJUENNQ0lBIHN1YnN5c3RlbSBpbnRvIHRoZSBMaW51eCBrZXJuZWwgZGV2aWNlIGRyaXZlciBtb2RlbCBtb3JlCiAJZGlmZmljdWx0LiBUaGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBhcmUgZWl0aGVyCiAJaGFuZGxlZCBieSB0aGUga2VybmVsIGl0c2VsZiBub3cgb3IgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3CiAJcGNtY2lhdXRpbHMgcGFja2FnZSBhdmFpbGFibGUgYXQKIAlodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8KLVdobzoJRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorCisJRm9yIGFsbCBhcmNoaXRlY3R1cmVzIGV4Y2VwdCBBUk0sIHRoZSBhc3NvY2lhdGVkIGNvbmZpZyBzeW1ib2wKKwloYXMgYmVlbiByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNDsgZm9yIEFSTSwgaXQgd2lsbCBiZSBsaWtlbHkKKwliZSByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNS4gVGhlIGFjdHVhbCBjb2RlIHdpbGwgdGhlbiBsaWtlbHkKKwliZSByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNi4KK1dobzoJRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTQyLDMgKzUyMywzNiBAQAogCXNlbnNvcnMpIHdpY2ggYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoZSBnc3BjYV96YzN4eCBkcml2ZXIKIAkod2hpY2ggc3VwcG9ydHMgNTMgVVNCLUlEJ3MgaW4gdG90YWwpCiBXaG86CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJY29yZ2lrYmQsIHNwaXR6a2JkLCB0b3Nha2JkIGRyaXZlcgorV2hlbjoJMi42LjM1CitGaWxlczoJZHJpdmVycy9pbnB1dC9rZXlib2FyZC97Y29yZ2ksc3BpdHosdG9zYX1rYmQuYworV2h5OglXZSBub3cgaGF2ZSBhIGdlbmVyaWMgR1BJTyBiYXNlZCBtYXRyaXgga2V5Ym9hcmQgZHJpdmVyIHRoYXQKKwlhcmUgZnVsbHkgY2FwYWJsZSBvZiBoYW5kbGluZyBhbGwgdGhlIGtleXMgb24gdGhlc2UgZGV2aWNlcy4KKwlUaGUgb3JpZ2luYWwgZHJpdmVycyBtYW5pcHVsYXRlIHRoZSBHUElPIHJlZ2lzdGVycyBkaXJlY3RseQorCWFuZCBzbyBhcmUgZGlmZmljdWx0IHRvIG1haW50YWluLgorV2hvOglFcmljIE1pYW8gPGVyaWMueS5taWFvQGdtYWlsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Ogljb3JnaV9zc3AgYW5kIGNvcmdpX3RzIGRyaXZlcgorV2hlbjoJMi42LjM1CitGaWxlczoJYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMsIGRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworV2h5OglUaGUgY29yZ2kgdG91Y2hzY3JlZW4gaXMgbm93IGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBnZW5lcmljCisJYWRzNzg0Ni5jIGRyaXZlci4gVGhlIG5vaXNlIHJlZHVjdGlvbiB0ZWNobmlxdWUgdXNlZCBpbiBjb3JnaV90cy5jLAorCXRoYXQncyB0byB3YWl0IHRpbGwgdnN5bmMgYmVmb3JlIEFEQyBzYW1wbGluZywgaXMgYWxzbyBpbnRlZ3JhdGVkIGludG8KKwlhZHM3ODQ2IGRyaXZlciBub3cuIFByb3ZpZGVkIHRoYXQgdGhlIG9yaWdpbmFsIGRyaXZlciBpcyBub3QgZ2VuZXJpYworCWFuZCBpcyBkaWZmaWN1bHQgdG8gbWFpbnRhaW4sIGl0IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KK1dobzoJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJY2FwaWZzCitXaGVuOglGZWJydWFyeSAyMDExCitGaWxlczoJZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLioKK1doeToJdWRldiBmdWxseSByZXBsYWNlcyB0aGlzIHNwZWNpYWwgZmlsZSBzeXN0ZW0gdGhhdCBvbmx5IGNvbnRhaW5zIENBUEkKKwlOQ0NJIFRUWSBkZXZpY2Ugbm9kZXMuIFVzZXIgc3BhY2UgKHBwcGRjYXBpcGx1Z2luKSB3b3JrcyB3aXRob3V0CisJbm90aWNpbmcgdGhlIGRpZmZlcmVuY2UuCitXaG86CUphbiBLaXN6a2EgPGphbi5raXN6a2FAd2ViLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlbnRyeS1sb2NraW5nLnR4dAppbmRleCA0YzBjNTc1Li43OTMzNGVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlbnRyeS1sb2NraW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlbnRyeS1sb2NraW5nLnR4dApAQCAtNjIsNyArNjIsOCBAQAogMi4gSW5zZXJ0aW9uIG9mIGEgZGVudHJ5IGludG8gdGhlIGhhc2ggdGFibGUgaXMgZG9uZSB1c2luZwogICAgaGxpc3RfYWRkX2hlYWRfcmN1KCkgd2hpY2ggdGFrZSBjYXJlIG9mIG9yZGVyaW5nIHRoZSB3cml0ZXMgLSB0aGUKICAgIHdyaXRlcyB0byB0aGUgZGVudHJ5IG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGRlbnRyeSBpcwotICAgaW5zZXJ0ZWQuIFRoaXMgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBobGlzdF9mb3JfZWFjaF9yY3UoKSB3aGlsZQorICAgaW5zZXJ0ZWQuIFRoaXMgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBobGlzdF9mb3JfZWFjaF9yY3UoKSwKKyAgIHdoaWNoIGhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkIGJ5IGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLCB3aGlsZQogICAgd2Fsa2luZyB0aGUgaGFzaCBjaGFpbi4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCBhbGwKICAgIGluaXRpYWxpemF0aW9uIHRvIHRoZSBkZW50cnkgbXVzdCBiZSBkb25lIGJlZm9yZQogICAgaGxpc3RfYWRkX2hlYWRfcmN1KCkgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBkY2FjaGVfbG9jayBwcm90ZWN0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKaW5kZXggODM5ZWZkOC4uY2Y2ZDBkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uaWxmczIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dApAQCAtNzQsNiArNzQsOSBAQAogCQkJVGhpcyBkaXNhYmxlcyBldmVyeSB3cml0ZSBhY2Nlc3Mgb24gdGhlIGRldmljZSBmb3IKIAkJCXJlYWQtb25seSBtb3VudHMgb3Igc25hcHNob3RzLiAgVGhpcyBvcHRpb24gd2lsbCBmYWlsCiAJCQlmb3Igci93IG1vdW50cyBvbiBhbiB1bmNsZWFuIHZvbHVtZS4KK2Rpc2NhcmQJCQlJc3N1ZSBkaXNjYXJkL1RSSU0gY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcgYmxvY2sKKwkJCWRldmljZSB3aGVuIGJsb2NrcyBhcmUgZnJlZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgU1NECisJCQlkZXZpY2VzIGFuZCBzcGFyc2UvdGhpbmx5LXByb3Zpc2lvbmVkIExVTnMuCiAKIE5JTEZTMiB1c2FnZQogPT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKaW5kZXggODFjMGM1OS4uZTFiYjViMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQpAQCAtMTUsNyArMTUsOCBAQAogICAqIEludGVsIDgyODAxSSAoSUNIOSkKICAgKiBJbnRlbCBFUDgwNTc5IChUb2xhcGFpKQogICAqIEludGVsIDgyODAxSkkgKElDSDEwKQotICAqIEludGVsIFBDSAorICAqIEludGVsIDM0MDAvNSBTZXJpZXMgKFBDSCkKKyAgKiBJbnRlbCBDb3VnYXIgUG9pbnQgKFBDSCkKICAgIERhdGFzaGVldHM6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQogCiBBdXRob3JzOiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydAppbmRleCBkY2VhYmExYS4uMjQ2MWM3YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydApAQCAtMjksNiArMjksOSBAQAogRWFybGllciBrZXJuZWxzIGRlZmF1bHRlZCB0byB0eXBlPTAgKFBoaWxpcHMpLiAgQnV0IG5vdywgaWYgdGhlIHR5cGUKIHBhcmFtZXRlciBpcyBtaXNzaW5nLCB0aGUgZHJpdmVyIHdpbGwgc2ltcGx5IGZhaWwgdG8gaW5pdGlhbGl6ZS4KIAorU01CdXMgYWxlcnQgc3VwcG9ydCBpcyBhdmFpbGFibGUgb24gYWRhcHRlcnMgd2hpY2ggaGF2ZSB0aGlzIGxpbmUgcHJvcGVybHkKK2Nvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydCdzIGludGVycnVwdCBwaW4uCisKIAogQnVpbGRpbmcgeW91ciBvd24gYWRhcHRlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0CmluZGV4IDI4NzQzNjQuLmJkYzljYmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKQEAgLTksMyArOSwxNCBAQAogYW5kIHRoZSBpbXBvc3NpYmlsaXR5IHRvIGRhaXN5LWNoYWluIG90aGVyIHBhcmFsbGVsIHBvcnQgZGV2aWNlcy4gICAgICAgICAgICAgICAgIAogICAKIFBsZWFzZSBzZWUgaTJjLXBhcnBvcnQgZm9yIGRvY3VtZW50YXRpb24uCisKK01vZHVsZSBwYXJhbWV0ZXJzOgorCisqIHR5cGU6IHR5cGUgb2YgYWRhcHRlciAoc2VlIGkyYy1wYXJwb3J0IG9yIG1vZGluZm8pCisKKyogYmFzZTogYmFzZSBJL08gYWRkcmVzcworICBEZWZhdWx0IGlzIDB4Mzc4IHdoaWNoIGlzIGZhaXJseSBjb21tb24gZm9yIHBhcmFsbGVsIHBvcnRzLCBhdCBsZWFzdCBvbiBQQy4KKworKiBpcnE6IG9wdGlvbmFsIElSUQorICBUaGlzIG11c3QgYmUgcGFzc2VkIGlmIHlvdSB3YW50IFNNQnVzIGFsZXJ0IHN1cHBvcnQsIGFzc3VtaW5nIHlvdXIgYWRhcHRlcgorICBhY3R1YWxseSBzdXBwb3J0cyB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvc21idXMtcHJvdG9jb2wgYi9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbAppbmRleCA5ZGY0NzQ0Li43YzE5ZDFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbApAQCAtMTg1LDYgKzE4NSwyMiBAQAogcmVxdWlyZSBQRUMgY2hlY2tzdW1zLgogCiAKK1NNQnVzIEFsZXJ0Cis9PT09PT09PT09PQorCitTTUJ1cyBBbGVydCB3YXMgaW50cm9kdWNlZCBpbiBSZXZpc2lvbiAxLjAgb2YgdGhlIHNwZWNpZmljYXRpb24uCisKK1RoZSBTTUJ1cyBhbGVydCBwcm90b2NvbCBhbGxvd3Mgc2V2ZXJhbCBTTUJ1cyBzbGF2ZSBkZXZpY2VzIHRvIHNoYXJlIGEKK3NpbmdsZSBpbnRlcnJ1cHQgcGluIG9uIHRoZSBTTUJ1cyBtYXN0ZXIsIHdoaWxlIHN0aWxsIGFsbG93aW5nIHRoZSBtYXN0ZXIKK3RvIGtub3cgd2hpY2ggc2xhdmUgdHJpZ2dlcmVkIHRoZSBpbnRlcnJ1cHQuCisKK1RoaXMgaXMgaW1wbGVtZW50ZWQgdGhlIGZvbGxvd2luZyB3YXkgaW4gdGhlIExpbnV4IGtlcm5lbDoKKyogSTJDIGJ1cyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgU01CdXMgYWxlcnQgc2hvdWxkIGNhbGwKKyAgaTJjX3NldHVwX3NtYnVzX2FsZXJ0KCkgdG8gc2V0dXAgU01CdXMgYWxlcnQgc3VwcG9ydC4KKyogSTJDIGRyaXZlcnMgZm9yIGRldmljZXMgd2hpY2ggY2FuIHRyaWdnZXIgU01CdXMgYWxlcnRzIHNob3VsZCBpbXBsZW1lbnQKKyAgdGhlIG9wdGlvbmFsIGFsZXJ0KCkgY2FsbGJhY2suCisKKwogSTJDIEJsb2NrIFRyYW5zYWN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKaW5kZXggMGE3NDYwMy4uMzIxOWVlMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwpAQCAtMzE4LDggKzMxOCw5IEBACiBUaGVzZSByb3V0aW5lcyByZWFkIGFuZCB3cml0ZSBzb21lIGJ5dGVzIGZyb20vdG8gYSBjbGllbnQuIFRoZSBjbGllbnQKIGNvbnRhaW5zIHRoZSBpMmMgYWRkcmVzcywgc28geW91IGRvIG5vdCBoYXZlIHRvIGluY2x1ZGUgaXQuIFRoZSBzZWNvbmQKIHBhcmFtZXRlciBjb250YWlucyB0aGUgYnl0ZXMgdG8gcmVhZC93cml0ZSwgdGhlIHRoaXJkIHRoZSBudW1iZXIgb2YgYnl0ZXMKLXRvIHJlYWQvd3JpdGUgKG11c3QgYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4pIFJldHVybmVkIGlzCi10aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWFkL3dyaXR0ZW4uCit0byByZWFkL3dyaXRlIChtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIGFsc28gc2hvdWxkIGJlCitsZXNzIHRoYW4gNjRrIHNpbmNlIG1zZy5sZW4gaXMgdTE2LikgUmV0dXJuZWQgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMKK3JlYWQvd3JpdHRlbi4KIAogCWludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAogCQkJIGludCBudW0pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dAppbmRleCBmNzE2MGEyLi5iMzVhZmZkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQKQEAgLTEsNSArMSw1IEBACi1Db3B5cmlnaHQgKEMpIDIwMDItMjAwOCBTZW50ZWxpYyBDb3Jwb3JhdGlvbi4KLUxhc3QgdXBkYXRlOiBPY3QtMzEtMjAwOAorQ29weXJpZ2h0IChDKSAyMDAyLTIwMTAgU2VudGVsaWMgQ29ycG9yYXRpb24uCitMYXN0IHVwZGF0ZTogSmFuLTEzLTIwMTAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZpbmdlciBTZW5zaW5nIFBhZCBJbnRlbGxpbW91c2UgTW9kZShzY3JvbGxpbmcgd2hlZWwsIDR0aCBhbmQgNXRoIGJ1dHRvbnMpCkBAIC00NCw3ICs0NCw3IEBACiBQYWNrZXQgMQogICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKIEJZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAotICAxICAgfFl8WHx5fHh8MXxNfFJ8THwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHwgfCB8QnxGfGx8cnx1fGR8CisgIDEgICB8WXxYfHl8eHwxfE18UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfCB8IHxCfEZ8cnxsfHV8ZHwKICAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAogCiBCeXRlIDE6IEJpdDcgPT4gWSBvdmVyZmxvdwpAQCAtNTksMTUgKzU5LDE1IEBACiBCeXRlIDM6IFkgTW92ZW1lbnQoOS1iaXQgMidzIGNvbXBsZW1lbnQgaW50ZWdlcnMpCiBCeXRlIDQ6IEJpdDAgPT4gdGhlIFZlcnRpY2FsIHNjcm9sbGluZyBtb3ZlbWVudCBkb3dud2FyZC4KIAlCaXQxID0+IHRoZSBWZXJ0aWNhbCBzY3JvbGxpbmcgbW92ZW1lbnQgdXB3YXJkLgotCUJpdDIgPT4gdGhlIFZlcnRpY2FsIHNjcm9sbGluZyBtb3ZlbWVudCByaWdodHdhcmQuCi0JQml0MyA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IGxlZnR3YXJkLgorCUJpdDIgPT4gdGhlIEhvcml6b250YWwgc2Nyb2xsaW5nIG1vdmVtZW50IGxlZnR3YXJkLgorCUJpdDMgPT4gdGhlIEhvcml6b250YWwgc2Nyb2xsaW5nIG1vdmVtZW50IHJpZ2h0d2FyZC4KICAgICAgICAgQml0NCA9PiAxID0gNHRoIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkLCBGb3J3YXJkIG9uZSBwYWdlLgogICAgICAgICAgICAgICAgIDAgPSA0dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgogICAgICAgICBCaXQ1ID0+IDEgPSA1dGggbW91c2UgYnV0dG9uIGlzIHByZXNzZWQsIEJhY2t3YXJkIG9uZSBwYWdlLgogICAgICAgICAgICAgICAgIDAgPSA1dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgogCiBDKSBNU0lEIDc6Ci0jIEZTUCB1c2VzIDIgcGFja2V0cyg4IEJ5dGVzKSBkYXRhIHRvIHJlcHJlc2VudCBBYnNvbHV0ZSBQb3NpdGlvbgorIyBGU1AgdXNlcyAyIHBhY2tldHMgKDggQnl0ZXMpIHRvIHJlcHJlc2VudCBBYnNvbHV0ZSBQb3NpdGlvbi4KICAgc28gd2UgaGF2ZSBQQUNLRVQgTlVNQkVSIHRvIGlkZW50aWZ5IHBhY2tldHMuCiAgIElmIFBBQ0tFVCBOVU1CRVIgaXMgMCwgdGhlIHBhY2tldCBpcyBQYWNrZXQgMS4KICAgSWYgUEFDS0VUIE5VTUJFUiBpcyAxLCB0aGUgcGFja2V0IGlzIFBhY2tldCAyLgpAQCAtMTI5LDcgKzEyOSw3IEBACiBCeXRlIDQ6IEJpdDd+Qml0MCA9PiBEb24ndCBDYXJlCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBBYnNvbHV0ZSBwb3NpdGlvbiBmb3IgU1RMMzg4OC1BMC4KKyogQWJzb2x1dGUgcG9zaXRpb24gZm9yIFNUTDM4ODgtQXguCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFBhY2tldCAxIChBQlNPTFVURSBQT1NJVElPTikKICAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCkBAIC0xNzksMTQgKzE3OSwxNCBAQAogICAgICAgICBCaXQ1fkJpdDQgPT4geTJfZwogICAgICAgICBCaXQ3fkJpdDYgPT4geDJfZwogCi1Ob3RpZnkgUGFja2V0IGZvciBTVEwzODg4LUEwCitOb3RpZnkgUGFja2V0IGZvciBTVEwzODg4LUF4CiAgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAogQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CiAgIDEgICB8MXwwfDF8UHwxfE18UnxMfCAgMiAgfEN8Q3xDfEN8Q3xDfEN8Q3wgIDMgfDB8MHxGfEZ8MHwwfDB8aXwgIDQgfHJ8bHxkfHV8MHwwfDB8MHwKICAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAogCiBCeXRlIDE6IEJpdDd+Qml0NiA9PiAwMCwgTm9ybWFsIGRhdGEgcGFja2V0Ci0gICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0aW9uIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGVzIHBhY2tldAogICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKICAgICAgICAgQml0NSA9PiAxCiAgICAgICAgIEJpdDQgPT4gd2hlbiBpbiBhYnNvbHV0ZSBjb29yZGluYXRlcyBtb2RlICh2YWxpZCB3aGVuIEVOX1BLVF9HTyBpcyAxKToKQEAgLTIwNSwxNSArMjA1LDEwNiBAQAogICAgICAgICBCaXQ2ID0+IHNjcm9sbCBsZWZ0IGJ1dHRvbgogICAgICAgICBCaXQ1ID0+IHNjcm9sbCBkb3duIGJ1dHRvbgogICAgICAgICBCaXQ0ID0+IHNjcm9sbCB1cCBidXR0b24KLSAgICAgICAgICAgICogTm90ZSB0aGF0IGlmIGdlc3R1cmUgYW5kIGFkZGl0aW9uYWwgYnV0dG9uIChCaXQ0fkJpdDcpCi0JICAgICAgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBidXR0b24gaW5mb3JtYXRpb24gd2lsbCBub3QKLQkgICAgICBiZSBzZW50LgorICAgICAgICAgICAgKiBOb3RlIHRoYXQgaWYgZ2VzdHVyZSBhbmQgYWRkaXRpb25hbCBidXR0b25pIChCaXQ0fkJpdDcpCisgICAgICAgICAgICAgIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgYnV0dG9uIGluZm9ybWF0aW9uIHdpbGwgbm90CisgICAgICAgICAgICAgIGJlIHNlbnQuCiAgICAgICAgIEJpdDN+Qml0MCA9PiBSZXNlcnZlZAogCiBTYW1wbGUgc2VxdWVuY2Ugb2YgTXVsdGktZmluZ2VyLCBNdWx0aS1jb29yZGluYXRlIG1vZGU6CiAKIAlub3RpZnkgcGFja2V0ICh2YWxpZCBiaXQgPT0gMSksIGFicyBwa3QgMSwgYWJzIHBrdCAyLCBhYnMgcGt0IDEsCi0JYWJzIHBrdCAyLCAuLi4sIG5vdGlmeSBwYWNrZXQodmFsaWQgYml0ID09IDApCisJYWJzIHBrdCAyLCAuLi4sIG5vdGlmeSBwYWNrZXQgKHZhbGlkIGJpdCA9PSAwKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogQWJzb2x1dGUgcG9zaXRpb24gZm9yIFNUTDM4ODgtQjAuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BhY2tldCAxKEFCU09MVVRFIFBPU0lUSU9OKQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDB8MXxWfEZ8MXwwfFJ8THwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHxyfGx8dXxkfFh8WHxZfFl8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGVzIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKKyAgICAgICAgQml0NSA9PiBWYWxpZCBiaXQsIDAgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZSBpcyBpbnZhbGlkIG9yIGZpbmdlciB1cC4KKyAgICAgICAgICAgICAgICBXaGVuIGJvdGggZmluZ2VycyBhcmUgdXAsIHRoZSBsYXN0IHR3byByZXBvcnRzIGhhdmUgemVybyB2YWxpZAorICAgICAgICAgICAgICAgIGJpdC4KKyAgICAgICAgQml0NCA9PiBmaW5nZXIgdXAvZG93biBpbmZvcm1hdGlvbi4gMTogZmluZ2VyIGRvd24sIDA6IGZpbmdlciB1cC4KKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gZmluZ2VyIGluZGV4LCAwIGlzIHRoZSBmaXJzdCBmaW5nZXIsIDEgaXMgdGhlIHNlY29uZCBmaW5nZXIuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogWCBjb29yZGluYXRlICh4cG9zWzk6Ml0pCitCeXRlIDM6IFkgY29vcmRpbmF0ZSAoeXBvc1s5OjJdKQorQnl0ZSA0OiBCaXQxfkJpdDAgPT4gWSBjb29yZGluYXRlICh4cG9zWzE6MF0pCisgICAgICAgIEJpdDN+Qml0MiA9PiBYIGNvb3JkaW5hdGUgKHlwb3NbMTowXSkKKyAgICAgICAgQml0NCA9PiBzY3JvbGwgZG93biBidXR0b24KKyAgICAgICAgQml0NSA9PiBzY3JvbGwgdXAgYnV0dG9uCisgICAgICAgIEJpdDYgPT4gc2Nyb2xsIGxlZnQgYnV0dG9uCisgICAgICAgIEJpdDcgPT4gc2Nyb2xsIHJpZ2h0IGJ1dHRvbgorCitQYWNrZXQgMiAoQUJTT0xVVEUgUE9TSVRJT04pCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8MHwxfFZ8RnwxfDF8UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfHJ8bHx1fGR8WHxYfFl8WXwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDd+Qml0NiA9PiAwMCwgTm9ybWFsIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0aW9uIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKKyAgICAgICAgQml0NSA9PiBWYWxpZCBiaXQsIDAgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZSBpcyBpbnZhbGlkIG9yIGZpbmdlciB1cC4KKyAgICAgICAgICAgICAgICBXaGVuIGJvdGggZmluZ2VycyBhcmUgdXAsIHRoZSBsYXN0IHR3byByZXBvcnRzIGhhdmUgemVybyB2YWxpZAorICAgICAgICAgICAgICAgIGJpdC4KKyAgICAgICAgQml0NCA9PiBmaW5nZXIgdXAvZG93biBpbmZvcm1hdGlvbi4gMTogZmluZ2VyIGRvd24sIDA6IGZpbmdlciB1cC4KKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gZmluZ2VyIGluZGV4LCAwIGlzIHRoZSBmaXJzdCBmaW5nZXIsIDEgaXMgdGhlIHNlY29uZCBmaW5nZXIuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogWCBjb29yZGluYXRlICh4cG9zWzk6Ml0pCitCeXRlIDM6IFkgY29vcmRpbmF0ZSAoeXBvc1s5OjJdKQorQnl0ZSA0OiBCaXQxfkJpdDAgPT4gWSBjb29yZGluYXRlICh4cG9zWzE6MF0pCisgICAgICAgIEJpdDN+Qml0MiA9PiBYIGNvb3JkaW5hdGUgKHlwb3NbMTowXSkKKyAgICAgICAgQml0NCA9PiBzY3JvbGwgZG93biBidXR0b24KKyAgICAgICAgQml0NSA9PiBzY3JvbGwgdXAgYnV0dG9uCisgICAgICAgIEJpdDYgPT4gc2Nyb2xsIGxlZnQgYnV0dG9uCisgICAgICAgIEJpdDcgPT4gc2Nyb2xsIHJpZ2h0IGJ1dHRvbgorCitOb3RpZnkgUGFja2V0IGZvciBTVEwzODg4LUIwCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8MXwwfDF8UHwxfE18UnxMfCAgMiAgfEN8Q3xDfEN8Q3xDfEN8Q3wgIDMgfDB8MHxGfEZ8MHwwfDB8aXwgIDQgfHJ8bHx1fGR8MHwwfDB8MHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDd+Qml0NiA9PiAwMCwgTm9ybWFsIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0aW9uIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKKyAgICAgICAgQml0NSA9PiAxCisgICAgICAgIEJpdDQgPT4gd2hlbiBpbiBhYnNvbHV0ZSBjb29yZGluYXRlIG1vZGUgKHZhbGlkIHdoZW4gRU5fUEtUX0dPIGlzIDEpOgorICAgICAgICAgICAgICAgIDA6IGxlZnQgYnV0dG9uIGlzIGdlbmVyYXRlZCBieSB0aGUgb24tcGFkIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAxOiBsZWZ0IGJ1dHRvbiBpcyBnZW5lcmF0ZWQgYnkgdGhlIGV4dGVybmFsIGJ1dHRvbgorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogTWVzc2FnZSBUeXBlID0+IDB4QjcgKE11bHRpIEZpbmdlciwgTXVsdGkgQ29vcmRpbmF0ZSBtb2RlKQorQnl0ZSAzOiBCaXQ3fkJpdDYgPT4gRG9uJ3QgY2FyZQorICAgICAgICBCaXQ1fkJpdDQgPT4gTnVtYmVyIG9mIGZpbmdlcnMKKyAgICAgICAgQml0M35CaXQxID0+IFJlc2VydmVkCisgICAgICAgIEJpdDAgPT4gMTogZW50ZXIgZ2VzdHVyZSBtb2RlOyAwOiBsZWF2aW5nIGdlc3R1cmUgbW9kZQorQnl0ZSA0OiBCaXQ3ID0+IHNjcm9sbCByaWdodCBidXR0b24KKyAgICAgICAgQml0NiA9PiBzY3JvbGwgbGVmdCBidXR0b24KKyAgICAgICAgQml0NSA9PiBzY3JvbGwgdXAgYnV0dG9uCisgICAgICAgIEJpdDQgPT4gc2Nyb2xsIGRvd24gYnV0dG9uCisgICAgICAgICAgICAqIE5vdGUgdGhhdCBpZiBnZXN0dXJlIGFuZCBhZGRpdGlvbmFsIGJ1dHRvbihCaXQ0fkJpdDcpCisgICAgICAgICAgICAgIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgYnV0dG9uIGluZm9ybWF0aW9uIHdpbGwgbm90CisgICAgICAgICAgICAgIGJlIHNlbnQuCisgICAgICAgIEJpdDN+Qml0MCA9PiBSZXNlcnZlZAorCitTYW1wbGUgc2VxdWVuY2Ugb2YgTXVsdGktZmluZ2VyLCBNdWx0aS1jb29yZGluYXRlIG1vZGU6CisKKwlub3RpZnkgcGFja2V0ICh2YWxpZCBiaXQgPT0gMSksIGFicyBwa3QgMSwgYWJzIHBrdCAyLCBhYnMgcGt0IDEsCisJYWJzIHBrdCAyLCAuLi4sIG5vdGlmeSBwYWNrZXQgKHZhbGlkIGJpdCA9PSAwKQogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRlNQIEVuYWJsZS9EaXNhYmxlIHBhY2tldApAQCAtNDA5LDcgKzUwMCw4IEBACiAJCQkJCTA6IHJlYWQgb25seSwgMTogcmVhZC93cml0ZSBlbmFibGUKIAkoTm90ZSB0aGF0IGZvbGxvd2luZyByZWdpc3RlcnMgZG9lcyBub3QgcmVxdWlyZSBjbG9jayBnYXRpbmcgYmVpbmcKIAllbmFibGVkIHByaW9yIHRvIHdyaXRlOiAwNSAwNiAwNyAwOCAwOSAwYyAwZiAxMCAxMSAxMiAxNiAxNyAxOCAyMyAyZQotCTQwIDQxIDQyIDQzLikKKwk0MCA0MSA0MiA0My4gIEluIGFkZGl0aW9uIHRvIHRoYXQsIHRoaXMgYml0IG11c3QgYmUgMSB3aGVuIGdlc3R1cmUKKwltb2RlIGlzIGVuYWJsZWQpCiAKIDB4MzEJCQkJUlcJb24tcGFkIGNvbW1hbmQgZGV0ZWN0aW9uCiAJYml0NwkJMAlSVwlvbi1wYWQgY29tbWFuZCBsZWZ0IGJ1dHRvbiBkb3duIHRhZwpAQCAtNDYzLDYgKzU1NSwxMCBAQAogCWFic29sdXRlIGNvb3JkaW5hdGVzOyBvdGhlcndpc2UsIGhvc3Qgb25seSByZWNlaXZlcyBwYWNrZXRzIHdpdGgKIAlyZWxhdGl2ZSBjb29yZGluYXRlLikKIAorCWJpdDcJCTAJUlcJRU5fUFMyX0YyOiBQUy8yIGdlc3R1cmUgbW9kZSAybmQKKwkJCQkJZmluZ2VyIHBhY2tldCBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKIDB4NDMJCQkJUlcJb24tcGFkIGNvbnRyb2wKIAliaXQwCQkwCVJXCW9uLXBhZCBjb250cm9sIGVuYWJsZQogCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCAzNWNmNjRkLi4zNWM5YjUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xMzksNyArMTM5LDYgQEAKICdLJwlhbGwJbGludXgva2QuaAogJ0wnCTAwLTFGCWxpbnV4L2xvb3AuaAkJY29uZmxpY3QhCiAnTCcJMTAtMUYJZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAljb25mbGljdCEKLSdMJwkyMC0yRglsaW51eC91c2IvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSSBiL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSQppbmRleCA1ZmU4ZGU1Li5mMTcyMDkxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJCkBAIC0xNDksMTAgKzE0OSwxMSBAQAogCXBvaW50ZXIgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGVudHJ5IGZvciB0aGUgZGV2aWNlIGluCiAJdGhlIENBUEkgY29udHJvbGxlciBpbmZvIHRhYmxlLCAvcHJvYy9jYXBpL2NvbnRyb2xsZXIKIAotcmVhZF9wcm9jX3QgKmN0cl9yZWFkX3Byb2MKLQlwb2ludGVyIHRvIHRoZSByZWFkX3Byb2MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBkZXZpY2UncyBwcm9jIGZpbGUKLQlzeXN0ZW0gZW50cnksIC9wcm9jL2NhcGkvY29udHJvbGxlcnMvPG4+OyB3aWxsIGJlIGNhbGxlZCB3aXRoIGEKLQlwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBjYXBpX2N0ciBzdHJ1Y3R1cmUgYXMgdGhlIGxhc3QgKGRhdGEpIGFyZ3VtZW50Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpwcm9jX2ZvcHMKKwlwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBkZXZpY2UncyBwcm9jIGZpbGUKKwlzeXN0ZW0gZW50cnksIC9wcm9jL2NhcGkvY29udHJvbGxlcnMvPG4+OyBwb2ludGVyIHRvIHRoZSBkZXZpY2UncworCWNhcGlfY3RyIHN0cnVjdHVyZSBpcyBhdmFpbGFibGUgZnJvbSBzdHJ1Y3QgcHJvY19kaXJfZW50cnk6OmRhdGEKKwl3aGljaCBpcyBhdmFpbGFibGUgZnJvbSBzdHJ1Y3QgaW5vZGUuCiAKIE5vdGU6IENhbGxiYWNrIGZ1bmN0aW9ucyBleGNlcHQgc2VuZF9tZXNzYWdlKCkgYXJlIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQKIGNvbnRleHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQKaW5kZXggNzk0OTQxZi4uZTQ3MmRmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldApAQCAtMjkyLDEwICsyOTIsMTAgQEAKICAgICAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5kL2dpZ2FzZXQsIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCBvciBhIHNpbWlsYXIgZmlsZS4KIAogICAgICBQcm9ibGVtOgotICAgICAgICBZb3VyIGlzZG4gc2NyaXB0IGFib3J0cyB3aXRoIGEgbWVzc2FnZSBhYm91dCBpc2RubG9nLgorICAgICAgICBUaGUgaXNkbmxvZyBwcm9ncmFtIGVtaXRzIGVycm9yIG1lc3NhZ2VzIG9yIGp1c3QgZG9lc24ndCB3b3JrLgogICAgICBTb2x1dGlvbjoKLSAgICAgICAgVHJ5IGRlYWN0aXZhdGluZyAob3IgY29tbWVudGluZyBvdXQpIGlzZG5sb2cuIFRoaXMgZHJpdmVyIGRvZXMgbm90Ci0gICAgICAgIHN1cHBvcnQgaXQuCisgICAgICAgIElzZG5sb2cgc3VwcG9ydHMgb25seSB0aGUgSGlTYXggZHJpdmVyLiBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgd2l0aAorCW90aGVyIGRyaXZlcnMgc3VjaCBhcyBHaWdhc2V0LgogCiAgICAgIFByb2JsZW06CiAgICAgICAgIFlvdSBoYXZlIHR3byBvciBtb3JlIERFQ1QgZGF0YSBhZGFwdGVycyAoTTEwMS9NMTA1KSBhbmQgb25seSB0aGUKQEAgLTMyMSw4ICszMjEsOCBAQAogICAgICB3cml0aW5nIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHRvIC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZywgZS5nLgogICAgICAgICBlY2hvIDAgPiAvc3lzL21vZHVsZS9naWdhc2V0L3BhcmFtZXRlcnMvZGVidWcKICAgICAgc3dpdGNoZXMgb2ZmIGRlYnVnZ2luZyBvdXRwdXQgY29tcGxldGVseSwKLSAgICAgICAgZWNobyAweDEwYTAyMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZwotICAgICBlbmFibGVzIHRoZSBzdGFuZGFyZCBzZXQgb2YgZGVidWdnaW5nIG91dHB1dCBtZXNzYWdlcy4gVGhlc2UgdmFsdWVzIGFyZQorICAgICAgICBlY2hvIDB4MzAyMDIwID4gL3N5cy9tb2R1bGUvZ2lnYXNldC9wYXJhbWV0ZXJzL2RlYnVnCisgICAgIGVuYWJsZXMgYSByZWFzb25hYmxlIHNldCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IG1lc3NhZ2VzLiBUaGVzZSB2YWx1ZXMgYXJlCiAgICAgIGJpdCBwYXR0ZXJucyB3aGVyZSBldmVyeSBiaXQgY29udHJvbHMgYSBjZXJ0YWluIHR5cGUgb2YgZGVidWdnaW5nIG91dHB1dC4KICAgICAgU2VlIHRoZSBjb25zdGFudHMgREVCVUdfKiBpbiB0aGUgc291cmNlIGZpbGUgZ2lnYXNldC5oIGZvciBkZXRhaWxzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGU3ODQ4YTAuLmQ4MDkzMGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC01NCw2ICs1NCw3IEBACiAJSU1BICAgICBJbnRlZ3JpdHkgbWVhc3VyZW1lbnQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJSU9TQ0hFRAlNb3JlIHRoYW4gb25lIEkvTyBzY2hlZHVsZXIgaXMgZW5hYmxlZC4KIAlJUF9QTlAJSVAgREhDUCwgQk9PVFAsIG9yIFJBUlAgaXMgZW5hYmxlZC4KKwlJUFY2CUlQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KIAlJU0ROCUFwcHJvcHJpYXRlIElTRE4gc3VwcG9ydCBpcyBlbmFibGVkLgogCUpPWQlBcHByb3ByaWF0ZSBqb3lzdGljayBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0zNTYsNiArMzU3LDkgQEAKIAkJCUNoYW5nZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBvdXRwdXQKIAkJCXdoZW4gaW5pdGlhbGlzaW5nIHRoZSBBUElDIGFuZCBJTy1BUElDIGNvbXBvbmVudHMuCiAKKwlhdXRvY29uZj0JW0lQVjZdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0LgorCiAJc2hvd19sYXBpYz0JW0FQSUMsWDg2XSBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIKIAkJCUxpbWl0IGFwaWMgZHVtcGluZy4gVGhlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSBtYXhpbWFsCiAJCQludW1iZXIgb2YgbG9jYWwgYXBpY3MgYmVpbmcgZHVtcGVkLiBBbHNvIGl0IGlzIHBvc3NpYmxlCkBAIC02MzgsNiArNjQyLDEyIEBACiAJCQlTZWUgZHJpdmVycy9jaGFyL1JFQURNRS5lcGNhIGFuZAogCQkJRG9jdW1lbnRhdGlvbi9zZXJpYWwvZGlnaWVwY2EudHh0LgogCisJZGlzYWJsZT0JW0lQVjZdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0LgorCisJZGlzYWJsZV9pcHY2PQlbSVBWNl0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXB2Ni50eHQuCisKIAlkaXNhYmxlX210cnJfY2xlYW51cCBbWDg2XQogCQkJVGhlIGtlcm5lbCB0cmllcyB0byBhZGp1c3QgTVRSUiBsYXlvdXQgZnJvbSBjb250aW51b3VzCiAJCQl0byBkaXNjcmV0ZSwgdG8gbWFrZSBYIHNlcnZlciBkcml2ZXIgYWJsZSB0byBhZGQgV0IKQEAgLTE3MzgsNiArMTc0OCw5IEBACiAJbm9tZmdwdAkJW1g4Ni0zMl0gRGlzYWJsZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UKIAkJCVRpbWVyIHVzYWdlIChmb3IgQU1EIEdlb2RlIG1hY2hpbmVzKS4KIAorCW5vcGF0CQlbWDg2XSBEaXNhYmxlIFBBVCAocGFnZSBhdHRyaWJ1dGUgdGFibGUgZXh0ZW5zaW9uIG9mCisJCQlwYWdldGFibGVzKSBzdXBwb3J0LgorCiAJbm9yYW5kbWFwcwlEb24ndCB1c2UgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uLiAgRXF1aXZhbGVudCB0bwogCQkJZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UKIApAQCAtMTc4MSw2ICsxNzk0LDEyIEBACiAJCQlwdXJnZXMgd2hpY2ggaXMgcmVwb3J0ZWQgZnJvbSBlaXRoZXIgUEFMX1ZNX1NVTU1BUlkgb3IKIAkJCVNBTCBQQUxPLgogCisJbnJfY3B1cz0JW1NNUF0gTWF4aW11bSBudW1iZXIgb2YgcHJvY2Vzc29ycyB0aGF0CWFuIFNNUCBrZXJuZWwKKwkJCWNvdWxkIHN1cHBvcnQuICBucl9jcHVzPW4gOiBuID49IDEgbGltaXRzIHRoZSBrZXJuZWwgdG8KKwkJCXN1cHBvcnRpbmcgJ24nIHByb2Nlc3NvcnMuIExhdGVyIGluIHJ1bnRpbWUgeW91IGNhbiBub3QKKwkJCXVzZSBob3RwbHVnIGNwdSBmZWF0dXJlIHRvIHB1dCBtb3JlIGNwdSBiYWNrIHRvIG9ubGluZS4KKwkJCWp1c3QgbGlrZSB5b3UgY29tcGlsZSB0aGUga2VybmVsIE5SX0NQVVM9bgorCiAJbnJfdWFydHM9CVtTRVJJQUxdIG1heGltdW0gbnVtYmVyIG9mIFVBUlRzIHRvIGJlIHJlZ2lzdGVyZWQuCiAKIAludW1hX3pvbmVsaXN0X29yZGVyPSBbS05MLCBCT09UXSBTZWxlY3Qgem9uZWxpc3Qgb3JkZXIgZm9yIE5VTUEuCkBAIC0xOTQ4LDggKzE5NjcsMTIgQEAKIAkJCQlJUlEgcm91dGluZyBpcyBlbmFibGVkLgogCQlub2FjcGkJCVtYODZdIERvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKIAkJCQlvciBmb3IgUENJIHNjYW5uaW5nLgotCQl1c2VfY3JzCQlbWDg2XSBVc2UgX0NSUyBmb3IgUENJIHJlc291cmNlCi0JCQkJYWxsb2NhdGlvbi4KKwkJdXNlX2NycwkJW1g4Nl0gVXNlIFBDSSBob3N0IGJyaWRnZSB3aW5kb3cgaW5mb3JtYXRpb24KKwkJCQlmcm9tIEFDUEkuICBPbiBCSU9TZXMgZnJvbSAyMDA4IG9yIGxhdGVyLCB0aGlzCisJCQkJaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMsCisJCQkJcGxlYXNlIHJlcG9ydCBhIGJ1Zy4KKwkJbm9jcnMJCVtYODZdIElnbm9yZSBQQ0kgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEkuCisJCQkgICAgICAgIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzLCBwbGVhc2UgcmVwb3J0IGEgYnVnLgogCQlyb3V0ZWlycQlEbyBJUlEgcm91dGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzLgogCQkJCVRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiBwY2lfZW5hYmxlX2RldmljZSgpLAogCQkJCXNvIHRoaXMgb3B0aW9uIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQKQEAgLTE5OTgsNiArMjAyMSwxNCBAQAogCQlmb3JjZQlFbmFibGUgQVNQTSBldmVuIG9uIGRldmljZXMgdGhhdCBjbGFpbSBub3QgdG8gc3VwcG9ydCBpdC4KIAkJCVdBUk5JTkc6IEZvcmNpbmcgQVNQTSBvbiBtYXkgY2F1c2Ugc3lzdGVtIGxvY2t1cHMuCiAKKwlwY2llX3BtZT0JW1BDSUUsUE1dIE5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcgb3B0aW9uczoKKwkJb2ZmCURvIG5vdCB1c2UgbmF0aXZlIFBDSWUgUE1FIHNpZ25hbGluZy4KKwkJZm9yY2UJVXNlIG5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcgZXZlbiBpZiB0aGUgQklPUyByZWZ1c2VzCisJCQl0byBhbGxvdyB0aGUga2VybmVsIHRvIGNvbnRyb2wgdGhlIHJlbGV2YW50IFBDSWUgY29uZmlnCisJCQlyZWdpc3RlcnMuCisJCW5vbXNpCURvIG5vdCB1c2UgTVNJIGZvciBuYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nICh0aGlzIG1ha2VzCisJCQlhbGwgUENJZSByb290IHBvcnRzIHVzZSBJTlR4IGZvciBldmVyeXRoaW5nKS4KKwogCXBjbXY9CQlbSFcsUENNQ0lBXSBCYWRnZVBBRCA0CiAKIAlwZC4JCVtQQVJJREVdCkBAIC0yNzAzLDYgKzI3MzQsMTMgQEAKIAkJCQkJbWVkaXVtIGlzIHdyaXRlLXByb3RlY3RlZCkuCiAJCQlFeGFtcGxlOiBxdWlya3M9MDQxOTphYWY1OnJsLDA0MjE6MDQzMzpyYwogCisJdXNlcnB0ZT0KKwkJCVtYODZdIEZsYWdzIGNvbnRyb2xsaW5nIHVzZXIgUFRFIGFsbG9jYXRpb25zLgorCisJCQkJbm9oaWdoID0gZG8gbm90IGFsbG9jYXRlIFBURSBwYWdlcyBpbgorCQkJCQlISUdITUVNIHJlZ2FyZGxlc3Mgb2Ygc2V0dGluZworCQkJCQlvZiBDT05GSUdfSElHSFBURS4KKwogCXZkc289CQlbWDg2LFNIXQogCQkJdmRzbz0yOiBlbmFibGUgY29tcGF0IFZEU08gKGRlZmF1bHQgd2l0aCBDT01QQVRfVkRTTykKIAkJCXZkc289MTogZW5hYmxlIFZEU08gKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNzVhZmExMi4uMzljMGEwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtNjUwLDYgKzY1MCwxMCBAQAogCWVjaG8gZXhwYW5kX3RvZ2dsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCiAJZWNobyB2aWRlb19zd2l0Y2ggPiAvcHJvYy9hY3BpL2libS92aWRlbwogCitOT1RFOiBBY2Nlc3MgdG8gdGhpcyBmZWF0dXJlIGlzIHJlc3RyaWN0ZWQgdG8gcHJvY2Vzc2VzIG93bmluZyB0aGUKK0NBUF9TWVNfQURNSU4gY2FwYWJpbGl0eSBmb3Igc2FmZXR5IHJlYXNvbnMsIGFzIGl0IGNhbiBpbnRlcmFjdCBiYWRseQorZW5vdWdoIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBYLm9yZyB0byBjcmFzaCBpdC4KKwogRWFjaCB2aWRlbyBvdXRwdXQgZGV2aWNlIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGluZGl2aWR1YWxseS4KIFJlYWRpbmcgL3Byb2MvYWNwaS9pYm0vdmlkZW8gc2hvd3MgdGhlIHN0YXR1cyBvZiBlYWNoIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCA0MjIwODUxLi4zMTE5ZjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKaW5kZXggNTAxODliZi4uZmU1YzA5OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtMzIsNiArMzIsOCBAQAogCS0gdGhlIENyeXN0YWwgTEFOIChDUzg5MDAvMjAtYmFzZWQpIEV0aGVybmV0IElTQSBhZGFwdGVyIGRyaXZlcgogY3hhY3J1LnR4dAogCS0gQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBBRFNMIE1vZGVtCitjeGFjcnUtY2YucHkKKwktIENvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0IgQURTTCBNb2RlbSBjb25maWd1cmF0aW9uIGZpbGUgcGFyc2VyCiBkZTR4NS50eHQKIAktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgREU0Pz8gYW5kIERFNT8/IFBDSSBFdGhlcm5ldCBkcml2ZXIKIGRlY25ldC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGFjcnUtY2YucHkgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3hhY3J1LWNmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3hhY3J1LWNmLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgMjAwOSBTaW1vbiBBcmxvdHQKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisjCisjIFVzYWdlOiBjeGFjcnUtY2YucHkgPCBjeGFjcnUtY2YuYmluCisjIE91dHB1dDogdmFsdWVzIHN0cmluZyBzdWl0YWJsZSBmb3IgdGhlIHN5c2ZzIGFkc2xfY29uZmlnIGF0dHJpYnV0ZQorIworIyBXYXJuaW5nOiBjeGFjcnUtY2YuYmluIHdpdGggTUQ1IGhhc2ggY2RiYWMyNjg5OTY5ZDVlZDVkNDg1MGYxMTc3MDIxMTAKKyMgY29udGFpbnMgbWlzLWFsaWduZWQgdmFsdWVzIHdoaWNoIHdpbGwgc3RvcCB0aGUgbW9kZW0gZnJvbSBiZWluZyBhYmxlCisjIHRvIG1ha2UgYSBjb25uZWN0aW9uLiBJZiB0aGUgZmlyc3QgYW5kIGxhc3QgdHdvIGJ5dGVzIGFyZSByZW1vdmVkIHRoZW4KKyMgdGhlIHZhbHVlcyBiZWNvbWUgdmFsaWQsIGJ1dCB0aGUgbW9kdWxhdGlvbiB3aWxsIGJlIGZvcmNlZCB0byBBTlNJCisjIFQxLjQxMyBvbmx5IHdoaWNoIG1heSBub3QgYmUgYXBwcm9wcmlhdGUuCisjCisjIFRoZSBvcmlnaW5hbCBiaW5hcnkgZm9ybWF0IGlzIGEgcGFja2VkIGxpc3Qgb2YgbGUzMiB2YWx1ZXMuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKKworaSA9IDAKK3doaWxlIFRydWU6CisJYnVmID0gc3lzLnN0ZGluLnJlYWQoNCkKKworCWlmIGxlbihidWYpID09IDA6CisJCWJyZWFrCisJZWxpZiBsZW4oYnVmKSAhPSA0OgorCQlzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisJCXN5cy5zdGRlcnIud3JpdGUoIkVycm9yOiByZWFkIHswfSBub3QgNCBieXRlc1xuIi5mb3JtYXQobGVuKGJ1ZikpKQorCQlzeXMuZXhpdCgxKQorCisJaWYgaSA+IDA6CisJCXN5cy5zdGRvdXQud3JpdGUoIiAiKQorCXN5cy5zdGRvdXQud3JpdGUoInswOnh9PXsxfSIuZm9ybWF0KGksIHN0cnVjdC51bnBhY2soIjxJIiwgYnVmKVswXSkpCisJaSArPSAxCisKK3N5cy5zdGRvdXQud3JpdGUoIlxuIikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGFjcnUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4YWNydS50eHQKaW5kZXggYjA3NDY4MS4uMmNjZTA0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4YWNydS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4YWNydS50eHQKQEAgLTQsNiArNCwxMiBAQAogbW9kdWxlIGxvYWRlZCwgdGhlIGRldmljZSB3aWxsIHNvbWV0aW1lcyBzdG9wIHJlc3BvbmRpbmcgYWZ0ZXIgdW5sb2FkaW5nIHRoZQogZHJpdmVyIGFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gdW5wbHVnL3JlbW92ZSBwb3dlciB0byB0aGUgZGV2aWNlIHRvIGZpeCB0aGlzLgogCitOb3RlOiBzdXBwb3J0IGZvciBjeGFjcnUtY2YuYmluIGhhcyBiZWVuIHJlbW92ZWQuIEl0IHdhcyBub3QgbG9hZGVkIGNvcnJlY3RseQorc28gaXQgaGFkIG5vIGVmZmVjdCBvbiB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEZpeGluZyBpdCBjb3VsZCBoYXZlIHN0b3BwZWQKK2V4aXN0aW5nIGRldmljZXMgd29ya2luZyB3aGVuIGFuIGludmFsaWQgY29uZmlndXJhdGlvbiBpcyBzdXBwbGllZC4KKworVGhlcmUgaXMgYSBzY3JpcHQgY3hhY3J1LWNmLnB5IHRvIGNvbnZlcnQgYW4gZXhpc3RpbmcgZmlsZSB0byB0aGUgc3lzZnMgZm9ybS4KKwogRGV0ZWN0ZWQgZGV2aWNlcyB3aWxsIGFwcGVhciBhcyBBVE0gZGV2aWNlcyBuYW1lZCAiY3hhY3J1Ii4gSW4gL3N5cy9jbGFzcy9hdG0vCiB0aGVzZSBhcmUgZGlyZWN0b3JpZXMgbmFtZWQgY3hhY3J1TiB3aGVyZSBOIGlzIHRoZSBkZXZpY2UgbnVtYmVyLiBBIHN5bWxpbmsKIG5hbWVkIGRldmljZSBwb2ludHMgdG8gdGhlIFVTQiBpbnRlcmZhY2UgZGV2aWNlJ3MgZGlyZWN0b3J5IHdoaWNoIGNvbnRhaW5zCkBAIC0xNSw2ICsyMSwxNSBAQAogKiBhZHNsX2hlYWRlbmRfZW52aXJvbm1lbnQKIAlJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVtb3RlIGhlYWRlbmQuCiAKKyogYWRzbF9jb25maWcKKwlDb25maWd1cmF0aW9uIHdyaXRpbmcgaW50ZXJmYWNlLgorCVdyaXRlIHBhcmFtZXRlcnMgaW4gaGV4YWRlY2ltYWwgZm9ybWF0IDxpbmRleD49PHZhbHVlPiwKKwlzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwgZS5nLjoKKwkJIjE9MCBhPTUiCisJVXAgdG8gNyBwYXJhbWV0ZXJzIGF0IGEgdGltZSB3aWxsIGJlIHNlbnQgYW5kIHRoZSBtb2RlbSB3aWxsIHJlc3RhcnQKKwl0aGUgQURTTCBjb25uZWN0aW9uIHdoZW4gYW55IHZhbHVlIGlzIHNldC4gVGhlc2UgYXJlIGxvZ2dlZCBmb3IgZnV0dXJlCisJcmVmZXJlbmNlLgorCiAqIGRvd25zdHJlYW1fYXR0ZW51YXRpb24gKGRCKQogKiBkb3duc3RyZWFtX2JpdHNfcGVyX2ZyYW1lCiAqIGRvd25zdHJlYW1fcmF0ZSAoa2JwcykKQEAgLTYxLDYgKzc2LDcgQEAKICogbWFjX2FkZHJlc3MKIAogKiBtb2R1bGF0aW9uCisJIiIgKHdoZW4gbm90IGNvbm5lY3RlZCkKIAkiQU5TSSBUMS40MTMiCiAJIklUVS1UIEcuOTkyLjEgKEcuRE1UKSIKIAkiSVRVLVQgRy45OTIuMiAoRy5MSVRFKSIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAppbmRleCBiMTMyZTRhMy4uYTYyZmRmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApAQCAtNTgsOCArNTgsMTAgQEAKIHNpemUgKGFwcGxpY2F0aW9uIHBheWxvYWQgc2l6ZSkgaW4gYnl0ZXMsIHNlZSBSRkMgNDM0MCwgc2VjdGlvbiAxNC4KIAogRENDUF9TT0NLT1BUX0FWQUlMQUJMRV9DQ0lEUyBpcyBhbHNvIHJlYWQtb25seSBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZiBDQ0lEcwotc3VwcG9ydGVkIGJ5IHRoZSBlbmRwb2ludCAoc2VlIGluY2x1ZGUvbGludXgvZGNjcC5oIGZvciBzeW1ib2xpYyBjb25zdGFudHMpLgotVGhlIGNhbGxlciBuZWVkcyB0byBwcm92aWRlIGEgc3VmZmljaWVudGx5IGxhcmdlICg+IDIpIGFycmF5IG9mIHR5cGUgdWludDhfdC4KK3N1cHBvcnRlZCBieSB0aGUgZW5kcG9pbnQuIFRoZSBvcHRpb24gdmFsdWUgaXMgYW4gYXJyYXkgb2YgdHlwZSB1aW50OF90IHdob3NlCitzaXplIGlzIHBhc3NlZCBhcyBvcHRpb24gbGVuZ3RoLiBUaGUgbWluaW11bSBhcnJheSBzaXplIGlzIDQgZWxlbWVudHMsIHRoZQordmFsdWUgcmV0dXJuZWQgaW4gdGhlIG9wdGxlbiBhcmd1bWVudCBhbHdheXMgcmVmbGVjdHMgdGhlIHRydWUgbnVtYmVyIG9mCitidWlsdC1pbiBDQ0lEcy4KIAogRENDUF9TT0NLT1BUX0NDSUQgaXMgd3JpdGUtb25seSBhbmQgc2V0cyBib3RoIHRoZSBUWCBhbmQgUlggQ0NJRHMgYXQgdGhlIHNhbWUKIHRpbWUsIGNvbWJpbmluZyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXh0IHR3byBzb2NrZXQgb3B0aW9ucy4gVGhpcyBvcHRpb24gaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZTg3ZjNjZGMuLjhiNzJjODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC00ODcsNiArNDg3LDMwIEBACiAJYW5kIENPTkZJR19ORVRfRE1BIGlzIGVuYWJsZWQuCiAJRGVmYXVsdDogNDA5NgogCit0Y3BfdGhpbl9saW5lYXJfdGltZW91dHMgLSBCT09MRUFOCisJRW5hYmxlIGR5bmFtaWMgdHJpZ2dlcmluZyBvZiBsaW5lYXIgdGltZW91dHMgZm9yIHRoaW4gc3RyZWFtcy4KKwlJZiBzZXQsIGEgY2hlY2sgaXMgcGVyZm9ybWVkIHVwb24gcmV0cmFuc21pc3Npb24gYnkgdGltZW91dCB0bworCWRldGVybWluZSBpZiB0aGUgc3RyZWFtIGlzIHRoaW4gKGxlc3MgdGhhbiA0IHBhY2tldHMgaW4gZmxpZ2h0KS4KKwlBcyBsb25nIGFzIHRoZSBzdHJlYW0gaXMgZm91bmQgdG8gYmUgdGhpbiwgdXAgdG8gNiBsaW5lYXIKKwl0aW1lb3V0cyBtYXkgYmUgcGVyZm9ybWVkIGJlZm9yZSBleHBvbmVudGlhbCBiYWNrb2ZmIG1vZGUgaXMKKwlpbml0aWF0ZWQuIFRoaXMgaW1wcm92ZXMgcmV0cmFuc21pc3Npb24gbGF0ZW5jeSBmb3IKKwlub24tYWdncmVzc2l2ZSB0aGluIHN0cmVhbXMsIG9mdGVuIGZvdW5kIHRvIGJlIHRpbWUtZGVwZW5kZW50LgorCUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaW4gc3RyZWFtcywgc2VlCisJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC10aGluLnR4dAorCURlZmF1bHQ6IDAKKwordGNwX3RoaW5fZHVwYWNrIC0gQk9PTEVBTgorCUVuYWJsZSBkeW5hbWljIHRyaWdnZXJpbmcgb2YgcmV0cmFuc21pc3Npb25zIGFmdGVyIG9uZSBkdXBBQ0sKKwlmb3IgdGhpbiBzdHJlYW1zLiBJZiBzZXQsIGEgY2hlY2sgaXMgcGVyZm9ybWVkIHVwb24gcmVjZXB0aW9uCisJb2YgYSBkdXBBQ0sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzdHJlYW0gaXMgdGhpbiAobGVzcyB0aGFuIDQKKwlwYWNrZXRzIGluIGZsaWdodCkuIEFzIGxvbmcgYXMgdGhlIHN0cmVhbSBpcyBmb3VuZCB0byBiZSB0aGluLAorCWRhdGEgaXMgcmV0cmFuc21pdHRlZCBvbiB0aGUgZmlyc3QgcmVjZWl2ZWQgZHVwQUNLLiBUaGlzCisJaW1wcm92ZXMgcmV0cmFuc21pc3Npb24gbGF0ZW5jeSBmb3Igbm9uLWFnZ3Jlc3NpdmUgdGhpbgorCXN0cmVhbXMsIG9mdGVuIGZvdW5kIHRvIGJlIHRpbWUtZGVwZW5kZW50LgorCUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaW4gc3RyZWFtcywgc2VlCisJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC10aGluLnR4dAorCURlZmF1bHQ6IDAKKwogVURQIHZhcmlhYmxlczoKIAogdWRwX21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIHByZXNzdXJlLCBtYXgKQEAgLTY5Miw2ICs3MTYsMjUgQEAKIAljb25mL3thbGwsaW50ZXJmYWNlfS9wcm94eV9hcnAgaXMgc2V0IHRvIFRSVUUsCiAJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKIAorcHJveHlfYXJwX3B2bGFuIC0gQk9PTEVBTgorCVByaXZhdGUgVkxBTiBwcm94eSBhcnAuCisJQmFzaWNhbGx5IGFsbG93IHByb3h5IGFycCByZXBsaWVzIGJhY2sgdG8gdGhlIHNhbWUgaW50ZXJmYWNlCisJKGZyb20gd2hpY2ggdGhlIEFSUCByZXF1ZXN0L3NvbGljaXRhdGlvbiB3YXMgcmVjZWl2ZWQpLgorCisJVGhpcyBpcyBkb25lIHRvIHN1cHBvcnQgKGV0aGVybmV0KSBzd2l0Y2ggZmVhdHVyZXMsIGxpa2UgUkZDCisJMzA2OSwgd2hlcmUgdGhlIGluZGl2aWR1YWwgcG9ydHMgYXJlIE5PVCBhbGxvd2VkIHRvCisJY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyLCBidXQgdGhleSBhcmUgYWxsb3dlZCB0byB0YWxrIHRvCisJdGhlIHVwc3RyZWFtIHJvdXRlci4gIEFzIGRlc2NyaWJlZCBpbiBSRkMgMzA2OSwgaXQgaXMgcG9zc2libGUKKwl0byBhbGxvdyB0aGVzZSBob3N0cyB0byBjb21tdW5pY2F0ZSB0aHJvdWdoIHRoZSB1cHN0cmVhbQorCXJvdXRlciBieSBwcm94eV9hcnAnaW5nLiBEb24ndCBuZWVkIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAorCXByb3h5X2FycC4KKworCVRoaXMgdGVjaG5vbG9neSBpcyBrbm93biBieSBkaWZmZXJlbnQgbmFtZXM6CisJICBJbiBSRkMgMzA2OSBpdCBpcyBjYWxsZWQgVkxBTiBBZ2dyZWdhdGlvbi4KKwkgIENpc2NvIGFuZCBBbGxpZWQgVGVsZXN5biBjYWxsIGl0IFByaXZhdGUgVkxBTi4KKwkgIEhld2xldHQtUGFja2FyZCBjYWxsIGl0IFNvdXJjZS1Qb3J0IGZpbHRlcmluZyBvciBwb3J0LWlzb2xhdGlvbi4KKwkgIEVyaWNzc29uIGNhbGwgaXQgTUFDLUZvcmNlZCBGb3J3YXJkaW5nIChSRkMgRHJhZnQpLgorCiBzaGFyZWRfbWVkaWEgLSBCT09MRUFOCiAJU2VuZChyb3V0ZXIpIG9yIGFjY2VwdChob3N0KSBSRkMxNjIwIHNoYXJlZCBtZWRpYSByZWRpcmVjdHMuCiAJT3ZlcnJpZGVzIGlwX3NlY3VyZV9yZWRpcmVjdHMuCkBAIC04MzMsOSArODc2LDE4IEBACiAJICAgIG9yIGhhcmR3YXJlIGFkZHJlc3MgY2hhbmdlcy4KIAogYXJwX2FjY2VwdCAtIEJPT0xFQU4KLQlEZWZpbmUgYmVoYXZpb3Igd2hlbiBncmF0dWl0b3VzIGFycCByZXBsaWVzIGFyZSByZWNlaXZlZDoKLQkwIC0gZHJvcCBncmF0dWl0b3VzIGFycCBmcmFtZXMKLQkxIC0gYWNjZXB0IGdyYXR1aXRvdXMgYXJwIGZyYW1lcworCURlZmluZSBiZWhhdmlvciBmb3IgZ3JhdHVpdG91cyBBUlAgZnJhbWVzIHdobydzIElQIGlzIG5vdAorCWFscmVhZHkgcHJlc2VudCBpbiB0aGUgQVJQIHRhYmxlOgorCTAgLSBkb24ndCBjcmVhdGUgbmV3IGVudHJpZXMgaW4gdGhlIEFSUCB0YWJsZQorCTEgLSBjcmVhdGUgbmV3IGVudHJpZXMgaW4gdGhlIEFSUCB0YWJsZQorCisJQm90aCByZXBsaWVzIGFuZCByZXF1ZXN0cyB0eXBlIGdyYXR1aXRvdXMgYXJwIHdpbGwgdHJpZ2dlciB0aGUKKwlBUlAgdGFibGUgdG8gYmUgdXBkYXRlZCwgaWYgdGhpcyBzZXR0aW5nIGlzIG9uLgorCisJSWYgdGhlIEFSUCB0YWJsZSBhbHJlYWR5IGNvbnRhaW5zIHRoZSBJUCBhZGRyZXNzIG9mIHRoZQorCWdyYXR1aXRvdXMgYXJwIGZyYW1lLCB0aGUgYXJwIHRhYmxlIHdpbGwgYmUgdXBkYXRlZCByZWdhcmRsZXNzCisJaWYgdGhpcyBzZXR0aW5nIGlzIG9uIG9yIG9mZi4KKwogCiBhcHBfc29saWNpdCAtIElOVEVHRVIKIAlUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvYmVzIHRvIHNlbmQgdG8gdGhlIHVzZXIgc3BhY2UgQVJQIGRhZW1vbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5MDE1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQKQEAgLTAsMCArMSw5MCBAQAorTGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDI0LCAyMDA5CisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gS25vd24gSXNzdWVzL1Ryb3VibGVzaG9vdGluZworLSBTdXBwb3J0CisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGl4Z2JldmYgTGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbCBOZXR3b3JrCitDb25uZWN0aW9uLgorCitUaGUgaXhnYmV2ZiBkcml2ZXIgc3VwcG9ydHMgODI1OTktYmFzZWQgdmlydHVhbCBmdW5jdGlvbiBkZXZpY2VzIHRoYXQgY2FuIG9ubHkKK2JlIGFjdGl2YXRlZCBvbiBrZXJuZWxzIHdpdGggQ09ORklHX1BDSV9JT1YgZW5hYmxlZC4KKworVGhlIGl4Z2JldmYgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSB0aGUgaXhnYmUgZHJpdmVyCit3aXRoIGEgbWF4X3ZmcyB2YWx1ZSBvZiAxIG9yIGdyZWF0ZXIuCisKK1RoZSBndWVzdCBPUyBsb2FkaW5nIHRoZSBpeGdiZXZmIGRyaXZlciBtdXN0IHN1cHBvcnQgTVNJLVggaW50ZXJydXB0cy4KKworVkxBTnM6IFRoZXJlIGlzIGEgbGltaXQgb2YgYSB0b3RhbCBvZiAzMiBzaGFyZWQgVkxBTnMgdG8gMSBvciBtb3JlIFZGcy4KKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgorRHJpdmVyIElEIEd1aWRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9zYi9DUy0wMDg0NDEuaHRtCisKK0tub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBVbmxvYWRpbmcgUGh5c2ljYWwgRnVuY3Rpb24gKFBGKSBEcml2ZXIgQ2F1c2VzIFN5c3RlbSBSZWJvb3RzIFdoZW4gVk0gaXMKKyAgUnVubmluZyBhbmQgVkYgaXMgTG9hZGVkIG9uIHRoZSBWTQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRG8gbm90IHVubG9hZCB0aGUgUEYgZHJpdmVyIChpeGdiZSkgd2hpbGUgVkZzIGFyZSBhc3NpZ25lZCB0byBndWVzdHMuCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKKworTGljZW5zZQorPT09PT09PQorCitJbnRlbCAxMCBHaWdhYml0IExpbnV4IGRyaXZlci4KK0NvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCitBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKK21vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgordGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworVHJhZGVtYXJrcworPT09PT09PT09PQorCitJbnRlbCwgSXRhbml1bSwgYW5kIFBlbnRpdW0gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mCitJbnRlbCBDb3Jwb3JhdGlvbiBvciBpdHMgc3Vic2lkaWFyaWVzIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlcgorY291bnRyaWVzLgorCisqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CmluZGV4IGEyMmZkODUuLjA5YWIwZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtMiw3ICsyLDcgQEAKICsgQUJTVFJBQ1QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIENPTkZJR19QQUNLRVRfTU1BUCBvcHRpb24gYXZhaWxhYmxlIHdpdGggdGhlIFBBQ0tFVAorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgbW1hcCgpIGZhY2lsaXR5IGF2YWlsYWJsZSB3aXRoIHRoZSBQQUNLRVQKIHNvY2tldCBpbnRlcmZhY2Ugb24gMi40IGFuZCAyLjYga2VybmVscy4gVGhpcyB0eXBlIG9mIHNvY2tldHMgaXMgdXNlZCBmb3IgCiBjYXB0dXJlIG5ldHdvcmsgdHJhZmZpYyB3aXRoIHV0aWxpdGllcyBsaWtlIHRjcGR1bXAgb3IgYW55IG90aGVyIHRoYXQgbmVlZHMKIHJhdyBhY2Nlc3MgdG8gbmV0d29yayBpbnRlcmZhY2UuCkBAIC00NCw3ICs0NCw3IEBACiBzdXBwb3J0ZWQgYnkgZGV2aWNlcyBvZiB5b3VyIG5ldHdvcmsuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rIEhvdyB0byB1c2UgQ09ORklHX1BBQ0tFVF9NTUFQIHRvIGltcHJvdmUgY2FwdHVyZSBwcm9jZXNzCisrIEhvdyB0byB1c2UgbW1hcCgpIHRvIGltcHJvdmUgY2FwdHVyZSBwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBGcm9tIHRoZSB1c2VyIHN0YW5kcG9pbnQsIHlvdSBzaG91bGQgdXNlIHRoZSBoaWdoZXIgbGV2ZWwgbGlicGNhcCBsaWJyYXJ5LCB3aGljaApAQCAtNjQsNyArNjQsNyBAQAogc3VwcG9ydC4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgSG93IHRvIHVzZSBDT05GSUdfUEFDS0VUX01NQVAgZGlyZWN0bHkgdG8gaW1wcm92ZSBjYXB0dXJlIHByb2Nlc3MKKysgSG93IHRvIHVzZSBtbWFwKCkgZGlyZWN0bHkgdG8gaW1wcm92ZSBjYXB0dXJlIHByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEZyb20gdGhlIHN5c3RlbSBjYWxscyBzdGFuZCBwb2ludCwgdGhlIHVzZSBvZiBQQUNLRVRfTU1BUCBpbnZvbHZlcwpAQCAtMTA1LDcgKzEwNSw3IEBACiB0aGUgdXNlIG9mIHRoaXMgYnVmZmVyLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUCBkaXJlY3RseSB0byBpbXByb3ZlIHRyYW5zbWlzc2lvbiBwcm9jZXNzCisrIEhvdyB0byB1c2UgbW1hcCgpIGRpcmVjdGx5IHRvIGltcHJvdmUgdHJhbnNtaXNzaW9uIHByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUcmFuc21pc3Npb24gcHJvY2VzcyBpcyBzaW1pbGFyIHRvIGNhcHR1cmUgYXMgc2hvd24gYmVsb3cuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dAppbmRleCBlZTMxMzY5Li45NTUxNjIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0CkBAIC0xODgsMyArMTg4LDI3IEBACiAJCSAgICAgICAmbXlkcml2ZXJfanBfcmVnZG9tLnJlZ19ydWxlc1tpXSwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CiAJcmVndWxhdG9yeV9zdHJ1Y3RfaGludChyZCk7CisKK1N0YXRpY2FsbHkgY29tcGlsZWQgcmVndWxhdG9yeSBkYXRhYmFzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG1vc3Qgc2l0dWF0aW9ucyB0aGUgdXNlcmxhbmQgc29sdXRpb24gdXNpbmcgQ1JEQSBhcyBkZXNjcmliZWQKK2Fib3ZlIGlzIHRoZSBwcmVmZXJyZWQgc29sdXRpb24uICBIb3dldmVyIGluIHNvbWUgY2FzZXMgYSBzZXQgb2YKK3J1bGVzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBpdHNlbGYgbWF5IGJlIGRlc2lyYWJsZS4gIFRvIGFjY291bnQKK2ZvciB0aGlzIHNpdHVhdGlvbiwgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBoYXMgYmVlbiBwcm92aWRlZAorKGkuZS4gQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCKS4gIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwKK3RoZSB3aXJlbGVzcyBkYXRhYmFzZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gbmV0L3dpcmVsZXNzL2RiLnR4dCBpcwordXNlZCB0byBnZW5lcmF0ZSBhIGRhdGEgc3RydWN0dXJlIGVuY29kZWQgaW4gbmV0L3dpcmVsZXNzL3JlZ2RiLmMuCitUaGF0IG9wdGlvbiBhbHNvIGVuYWJsZXMgY29kZSBpbiBuZXQvd2lyZWxlc3MvcmVnLmMgd2hpY2ggcXVlcmllcwordGhlIGRhdGEgaW4gcmVnZGIuYyBhcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBDUkRBLgorCitUaGUgZmlsZSBuZXQvd2lyZWxlc3MvZGIudHh0IHNob3VsZCBiZSBrZXB0IHVwLXRvLWRhdGUgd2l0aCB0aGUgZGIudHh0CitmaWxlIGF2YWlsYWJsZSBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkgaGVyZToKKworICAgIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy1yZWdkYi5naXQKKworQWdhaW4sIG1vc3QgdXNlcnMgaW4gbW9zdCBzaXR1YXRpb25zIHNob3VsZCBiZSB1c2luZyB0aGUgQ1JEQSBwYWNrYWdlCitwcm92aWRlZCB3aXRoIHRoZWlyIGRpc3RyaWJ1dGlvbiwgYW5kIGluIG1vc3Qgb3RoZXIgc2l0dWF0aW9ucyB1c2Vycworc2hvdWxkIGJlIGJ1aWxkaW5nIGFuZCB1c2luZyBDUkRBIG9uIHRoZWlyIG93biByYXRoZXIgdGhhbiB1c2luZwordGhpcyBvcHRpb24uICBJZiB5b3UgYXJlIG5vdCBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB5b3Ugc2hvdWxkIGJlIHVzaW5nCitDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgdGhlbiBfRE9fTk9UX1VTRV9JVF8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLXRoaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC10aGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFlMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC10aGluLnR4dApAQCAtMCwwICsxLDQ3IEBACitUaGluLXN0cmVhbXMgYW5kIFRDUAorPT09PT09PT09PT09PT09PT09PT0KK0Egd2lkZSByYW5nZSBvZiBJbnRlcm5ldC1iYXNlZCBzZXJ2aWNlcyB0aGF0IHVzZSByZWxpYWJsZSB0cmFuc3BvcnQKK3Byb3RvY29scyBkaXNwbGF5IHdoYXQgd2UgY2FsbCB0aGluLXN0cmVhbSBwcm9wZXJ0aWVzLiBUaGlzIG1lYW5zCit0aGF0IHRoZSBhcHBsaWNhdGlvbiBzZW5kcyBkYXRhIHdpdGggc3VjaCBhIGxvdyByYXRlIHRoYXQgdGhlCityZXRyYW5zbWlzc2lvbiBtZWNoYW5pc21zIG9mIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgYXJlIG5vdCBmdWxseQorZWZmZWN0aXZlLiBJbiB0aW1lLWRlcGVuZGVudCBzY2VuYXJpb3MgKGxpa2Ugb25saW5lIGdhbWVzLCBjb250cm9sCitzeXN0ZW1zLCBzdG9jayB0cmFkaW5nIGV0Yy4pIHdoZXJlIHRoZSB1c2VyIGV4cGVyaWVuY2UgZGVwZW5kcworb24gdGhlIGRhdGEgZGVsaXZlcnkgbGF0ZW5jeSwgcGFja2V0IGxvc3MgY2FuIGJlIGRldmFzdGF0aW5nIGZvcgordGhlIHNlcnZpY2UgcXVhbGl0eS4gRXh0cmVtZSBsYXRlbmNpZXMgYXJlIGNhdXNlZCBieSBUQ1AncworZGVwZW5kZW5jeSBvbiB0aGUgYXJyaXZhbCBvZiBuZXcgZGF0YSBmcm9tIHRoZSBhcHBsaWNhdGlvbiB0byB0cmlnZ2VyCityZXRyYW5zbWlzc2lvbnMgZWZmZWN0aXZlbHkgdGhyb3VnaCBmYXN0IHJldHJhbnNtaXQgaW5zdGVhZCBvZgord2FpdGluZyBmb3IgbG9uZyB0aW1lb3V0cy4KKworQWZ0ZXIgYW5hbHlzaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIHRpbWUtZGVwZW5kZW50IGludGVyYWN0aXZlCithcHBsaWNhdGlvbnMsIHdlIGhhdmUgc2VlbiB0aGF0IHRoZXkgb2Z0ZW4gcHJvZHVjZSB0aGluIHN0cmVhbXMKK2FuZCBhbHNvIHN0YXkgd2l0aCB0aGlzIHRyYWZmaWMgcGF0dGVybiB0aHJvdWdob3V0IGl0cyBlbnRpcmUKK2xpZmVzcGFuLiBUaGUgY29tYmluYXRpb24gb2YgdGltZS1kZXBlbmRlbmN5IGFuZCB0aGUgZmFjdCB0aGF0IHRoZQorc3RyZWFtcyBwcm92b2tlIGhpZ2ggbGF0ZW5jaWVzIHdoZW4gdXNpbmcgVENQIGlzIHVuZm9ydHVuYXRlLgorCitJbiBvcmRlciB0byByZWR1Y2UgYXBwbGljYXRpb24tbGF5ZXIgbGF0ZW5jeSB3aGVuIHBhY2tldHMgYXJlIGxvc3QsCithIHNldCBvZiBtZWNoYW5pc21zIGhhcyBiZWVuIG1hZGUsIHdoaWNoIGFkZHJlc3MgdGhlc2UgbGF0ZW5jeSBpc3N1ZXMKK2ZvciB0aGluIHN0cmVhbXMuIEluIHNob3J0LCBpZiB0aGUga2VybmVsIGRldGVjdHMgYSB0aGluIHN0cmVhbSwKK3RoZSByZXRyYW5zbWlzc2lvbiBtZWNoYW5pc21zIGFyZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjoKKworMSkgSWYgdGhlIHN0cmVhbSBpcyB0aGluLCBmYXN0IHJldHJhbnNtaXQgb24gdGhlIGZpcnN0IGR1cEFDSy4KKzIpIElmIHRoZSBzdHJlYW0gaXMgdGhpbiwgZG8gbm90IGFwcGx5IGV4cG9uZW50aWFsIGJhY2tvZmYuCisKK1RoZXNlIGVuaGFuY2VtZW50cyBhcmUgYXBwbGllZCBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgZGV0ZWN0ZWQgYXMKK3RoaW4uIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nIGEgdGhyZXNob2xkIGZvciB0aGUgbnVtYmVyCitvZiBwYWNrZXRzIGluIGZsaWdodC4gSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiA0IHBhY2tldHMgaW4gZmxpZ2h0LAorZmFzdCByZXRyYW5zbWlzc2lvbnMgY2FuIG5vdCBiZSB0cmlnZ2VyZWQsIGFuZCB0aGUgc3RyZWFtIGlzIHByb25lCit0byBleHBlcmllbmNlIGhpZ2ggcmV0cmFuc21pc3Npb24gbGF0ZW5jaWVzLgorCitTaW5jZSB0aGVzZSBtZWNoYW5pc21zIGFyZSB0YXJnZXRlZCBhdCB0aW1lLWRlcGVuZGVudCBhcHBsaWNhdGlvbnMsCit0aGV5IG11c3QgYmUgc3BlY2lmaWNhbGx5IGFjdGl2YXRlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlCitUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMgYW5kIFRDUF9USElOX0RVUEFDSyBJT0NUTFMgb3IgdGhlCit0Y3BfdGhpbl9saW5lYXJfdGltZW91dHMgYW5kIHRjcF90aGluX2R1cGFjayBzeXNjdGxzLiBCb3RoCittb2RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuCisKK1JlZmVyZW5jZXMKKz09PT09PT09PT0KK01vcmUgaW5mb3JtYXRpb24gb24gdGhlIG1vZGlmaWNhdGlvbnMsIGFzIHdlbGwgYXMgYSB3aWRlIHJhbmdlIG9mCitleHBlcmltZW50YWwgZGF0YSBjYW4gYmUgZm91bmQgaGVyZToKKyJJbXByb3ZpbmcgbGF0ZW5jeSBmb3IgaW50ZXJhY3RpdmUsIHRoaW4tc3RyZWFtIGFwcGxpY2F0aW9ucyBvdmVyCityZWxpYWJsZSB0cmFuc3BvcnQiCitodHRwOi8vc2ltdWxhLm5vL3Jlc2VhcmNoL25kL3B1YmxpY2F0aW9ucy9TaW11bGEubmQuNDc3L3NpbXVsYV9wZGZfZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9sb2NraW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGY2MjJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQKQEAgLTAsMCArMSwxMTggQEAKK1RoaXMgZmlsZSBleHBsYWlucyB0aGUgbG9ja2luZyBhbmQgZXhjbHVzaW9uIHNjaGVtZSB1c2VkIGluIHRoZSBQQ0NBUkQKK2FuZCBQQ01DSUEgc3Vic3lzdGVtcy4KKworCitBKSBPdmVydmlldywgTG9ja2luZyBIaWVyYXJjaHk6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbQktIHByb3RlY3RzIG9ubHkgdGhlIGxpc3Qgb2Ygc29ja2V0cworLSBza3RfbXV0ZXgJCQktIHNlcmlhbGl6ZXMgY2FyZCBpbnNlcnQgLyBlamVjdGlvbgorICAtIG9wc19tdXRleAkJCS0gc2VyaWFsaXplcyBzb2NrZXQgb3BlcmF0aW9uCisKKworQikgRXhjbHVzaW9uCis9PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNhbGxiYWNrcyB0byBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBtdXN0CitiZSBjYWxsZWQgd2l0aCAic2t0X211dGV4IiBoZWxkOgorCisJc29ja2V0X2RldGVjdF9jaGFuZ2UoKQorCXNlbmRfZXZlbnQoKQorCXNvY2tldF9yZXNldCgpCisJc29ja2V0X3NodXRkb3duKCkKKwlzb2NrZXRfc2V0dXAoKQorCXNvY2tldF9yZW1vdmUoKQorCXNvY2tldF9pbnNlcnQoKQorCXNvY2tldF9lYXJseV9yZXN1bWUoKQorCXNvY2tldF9sYXRlX3Jlc3VtZSgpCisJc29ja2V0X3Jlc3VtZSgpCisJc29ja2V0X3N1c3BlbmQoKQorCisJc3RydWN0IHBjbWNpYV9jYWxsYmFjawkqY2FsbGJhY2sKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNhbGxiYWNrcyB0byBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBtdXN0CitiZSBjYWxsZWQgd2l0aCAib3BzX211dGV4IiBoZWxkOgorCisJc29ja2V0X3Jlc2V0KCkKKwlzb2NrZXRfc2V0dXAoKQorCisJc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zCSpvcHMKKwlzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcwkqcmVzb3VyY2Vfb3BzOworCitOb3RlIHRoYXQgc2VuZF9ldmVudCgpIGFuZCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjYWxsYmFjayBtdXN0IG5vdCBiZQorY2FsbGVkIHdpdGggIm9wc19tdXRleCIgaGVsZC4KKworCitDKSBQcm90ZWN0aW9uCis9PT09PT09PT09PT09CisKKzEuIEdsb2JhbCBEYXRhOgorLS0tLS0tLS0tLS0tLS0tCitzdHJ1Y3QgbGlzdF9oZWFkCXBjbWNpYV9zb2NrZXRfbGlzdDsKKworcHJvdGVjdGVkIGJ5IHBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbTsKKworCisyLiBQZXItU29ja2V0IERhdGE6CistLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcmVzb3VyY2Vfb3BzIGFuZCB0aGVpciBkYXRhIGFyZSBwcm90ZWN0ZWQgYnkgb3BzX211dGV4LgorCitUaGUgIm1haW4iIHN0cnVjdCBwY21jaWFfc29ja2V0IGlzIHByb3RlY3RlZCBhcyBmb2xsb3dzIChyZWFkLW9ubHkgZmllbGRzCitvciBzaW5nbGUtdXNlIGZpZWxkcyBub3QgbWVudGlvbmVkKToKKworLSBieSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW06CisJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfbGlzdDsKKworLSBieSB0aHJlYWRfbG9jazoKKwl1bnNpZ25lZCBpbnQJCXRocmVhZF9ldmVudHM7CisKKy0gYnkgc2t0X211dGV4OgorCXVfaW50CQkJc3VzcGVuZGVkX3N0YXRlOworCXZvaWQJCQkoKnR1bmVfYnJpZGdlKTsKKwlzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrCSpjYWxsYmFjazsKKwlpbnQJCQlyZXN1bWVfc3RhdHVzOworCistIGJ5IG9wc19tdXRleDoKKwlzb2NrZXRfc3RhdGVfdAkJc29ja2V0OworCXVfaW50CQkJc3RhdGU7CisJdV9zaG9ydAkJCWxvY2tfY291bnQ7CisJcGNjYXJkX21lbV9tYXAJCWNpc19tZW07CisJdm9pZCBfX2lvbWVtIAkJKmNpc192aXJ0OworCXN0cnVjdCB7IH0JCWlycTsKKwlpb193aW5kb3dfdAkJaW9bXTsKKwlwY2NhcmRfbWVtX21hcAkJd2luW107CisJc3RydWN0IGxpc3RfaGVhZAljaXNfY2FjaGU7CisJc2l6ZV90CQkJZmFrZV9jaXNfbGVuOworCXU4CQkJKmZha2VfY2lzOworCXVfaW50CQkJaXJxX21hc2s7CisJdm9pZCAJCQkoKnpvb21fdmlkZW8pOworCWludCAJCQkoKnBvd2VyX2hvb2spOworCXU4CQkJcmVzb3VyY2UuLi47CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VzX2xpc3Q7CisJdTgJCQlkZXZpY2VfY291bnQ7CisJc3RydWN0IAkJCXBjbWNpYV9zdGF0ZTsKKworCiszLiBQZXIgUENNQ0lBLWRldmljZSBEYXRhOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJtYWluIiBzdHJ1Y3QgcGNtY2lhX2RldmllIGlzIHByb3RlY3RlZCBhcyBmb2xsb3dzIChyZWFkLW9ubHkgZmllbGRzCitvciBzaW5nbGUtdXNlIGZpZWxkcyBub3QgbWVudGlvbmVkKToKKworCistIGJ5IHBjbWNpYV9zb2NrZXQtPm9wc19tdXRleDoKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNvY2tldF9kZXZpY2VfbGlzdDsKKwlzdHJ1Y3QgY29uZmlnX3QJCSpmdW5jdGlvbl9jb25maWc7CisJdTE2CQkJX2lycToxOworCXUxNgkJCV9pbzoxOworCXUxNgkJCV93aW46NDsKKwl1MTYJCQlfbG9ja2VkOjE7CisJdTE2CQkJYWxsb3dfZnVuY19pZF9tYXRjaDoxOworCXUxNgkJCXN1c3BlbmRlZDoxOworCXUxNgkJCV9yZW1vdmVkOjE7CisKKy0gYnkgdGhlIFBDTUNJQSBkcml2ZXI6CisJaW9fcmVxX3QJCWlvOworCWlycV9yZXFfdAkJaXJxOworCWNvbmZpZ19yZXFfdAkJY29uZjsKKwl3aW5kb3dfaGFuZGxlX3QJCXdpbjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTRmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0CkBAIC0wLDAgKzEsNTMgQEAKK0NBTiBEZXZpY2UgVHJlZSBCaW5kaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhjKSAyMDA2LTIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkCitHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisKK2ZzbCxtcGM1MjAwLW1zY2FuIG5vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVkIGNvbXBhdGlibGUtLCByZWctIGFuZCBpbnRlcnJ1cHQtcHJvcGVydGllcywgeW91IGNhbgorYWxzbyBzcGVjaWZ5IHdoaWNoIGNsb2NrIHNvdXJjZSBzaGFsbCBiZSB1c2VkIGZvciB0aGUgY29udHJvbGxlcjoKKworLSBmc2wsbXNjYW4tY2xvY2stc291cmNlIDogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2xvY2sgc291cmNlLiBWYWxpZCB2YWx1ZXMKKwkJCSAgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCisJCQkJICJyZWYiIGZvciByZWZlcmVuY2UgY2xvY2sgKFhUQUwpCisJCQkgICAicmVmIiBpcyBkZWZhdWx0IGluIGNhc2UgdGhpcyBwcm9wZXJ0eSBpcyBub3QKKwkJCSAgIHByZXNlbnQuCisKK2ZzbCxtcGM1MTIxLW1zY2FuIG5vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVkIGNvbXBhdGlibGUtLCByZWctIGFuZCBpbnRlcnJ1cHQtcHJvcGVydGllcywgeW91IGNhbgorYWxzbyBzcGVjaWZ5IHdoaWNoIGNsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciBzaGFsbCBiZSB1c2VkIGZvciB0aGUgY29udHJvbGxlcjoKKworLSBmc2wsbXNjYW4tY2xvY2stc291cmNlIDogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2xvY2sgc291cmNlLiBWYWxpZCB2YWx1ZXMKKwkJCSAgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCisJCQkJInJlZiIgZm9yIHJlZmVyZW5jZSBjbG9jaworCQkJCSJzeXMiIGZvciBzeXN0ZW0gY2xvY2sKKwkJCSAgIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGFuIG9wdGltYWwgQ0FOCisJCQkgICBjbG9jayBzb3VyY2UgYW5kIGZyZXF1ZW5jeSBiYXNlZCBvbiB0aGUgc3lzdGVtCisJCQkgICBjbG9jayB3aWxsIGJlIHNlbGVjdGVkLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKwkJCSAgIHRoZSByZWZlcmVuY2UgY2xvY2sgd2lsbCBiZSB1c2VkLgorCistIGZzbCxtc2Nhbi1jbG9jay1kaXZpZGVyOiBmb3IgdGhlIHJlZmVyZW5jZSBhbmQgc3lzdGVtIGNsb2NrLCBhbiBhZGRpdGlvbmFsCisJCQkgICBjbG9jayBkaXZpZGVyIGNhbiBiZSBzcGVjaWZpZWQuIEJ5IGRlZmF1bHQsIGEKKwkJCSAgIHZhbHVlIG9mIDEgaXMgdXNlZC4KKworTm90ZSB0aGF0IHRoZSBNUEM1MTIxIFJldi4gMSBwcm9jZXNzb3IgaXMgbm90IHN1cHBvcnRlZC4KKworRXhhbXBsZXM6CisJY2FuQDEzMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJaW50ZXJydXB0cyA9IDwxMiAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJcmVnID0gPDB4MTMwMCAweDgwPjsKKwl9OworCisJY2FuQDEzODAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJaW50ZXJydXB0cyA9IDwxMyAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJcmVnID0gPDB4MTM4MCAweDgwPjsKKwkJZnNsLG1zY2FuLWNsb2NrLXNvdXJjZSA9ICJyZWYiOworCQlmc2wsbXNjYW4tY2xvY2stZGl2aWRlciA9IDwzPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzJlODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQKQEAgLTAsMCArMSw3MCBAQAorTVBDNTEyMSBQU0MgRGV2aWNlIFRyZWUgQmluZGluZ3MKKworUFNDIGluIFVBUlQgbW9kZQorLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgUFNDIGluIFVBUlQgbW9kZSB0aGUgbmVlZGVkIFBTQyBzZXJpYWwgZGV2aWNlcworYXJlIHNwZWNpZmllZCBieSBmc2wsbXBjNTEyMS1wc2MtdWFydCBub2RlcyBpbiB0aGUKK2ZzbCxtcGM1MTIxLWltbXIgU29DIG5vZGUuIEFkZGl0aW9uYWxseSB0aGUgUFNDIEZJRk8KK0NvbnRyb2xsZXIgbm9kZSBmc2wsbXBjNTEyMS1wc2MtZmlmbyBpcyByZXF1ZXJlZCB0aGVyZToKKworZnNsLG1wYzUxMjEtcHNjLXVhcnQgbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgOgorIC0gY29tcGF0aWJsZSA6IFNob3VsZCBjb250YWluICJmc2wsbXBjNTEyMS1wc2MtdWFydCIgYW5kICJmc2wsbXBjNTEyMS1wc2MiCisgLSBjZWxsLWluZGV4IDogSW5kZXggb2YgdGhlIFBTQyBpbiBoYXJkd2FyZQorIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFBTQyBkZXZpY2UKKyAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZQorICAgUFNDIEZJRk8gQ29udHJvbGxlciBhbmQgYiBpcyBhIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbgorICAgZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZCBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4KKyAtIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKKyAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCitSZWNvbW1lbmRlZCBwcm9wZXJ0aWVzIDoKKyAtIGZzbCxyeC1maWZvLXNpemUgOiB0aGUgc2l6ZSBvZiB0aGUgUlggZmlmbyBzbGljZSAoYSBtdWx0aXBsZSBvZiA0KQorIC0gZnNsLHR4LWZpZm8tc2l6ZSA6IHRoZSBzaXplIG9mIHRoZSBUWCBmaWZvIHNsaWNlIChhIG11bHRpcGxlIG9mIDQpCisKKworZnNsLG1wYzUxMjEtcHNjLWZpZm8gbm9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIDoKKyAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgImZzbCxtcGM1MTIxLXBzYy1maWZvIgorIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFBTQworICAgICAgICAgRklGTyBDb250cm9sbGVyCisgLSBpbnRlcnJ1cHRzIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUKKyAgIFBTQyBGSUZPIENvbnRyb2xsZXIgYW5kIGIgaXMgYSBmaWVsZCB0aGF0IHJlcHJlc2VudHMgYW4KKyAgIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuCisgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKworCitFeGFtcGxlIGZvciBhIGJvYXJkIHVzaW5nIFBTQzAgYW5kIFBTQzEgZGV2aWNlcyBpbiBzZXJpYWwgbW9kZToKKworc2VyaWFsQDExMDAwIHsKKwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJY2VsbC1pbmRleCA9IDwwPjsKKwlyZWcgPSA8MHgxMTAwMCAweDEwMD47CisJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJZnNsLHJ4LWZpZm8tc2l6ZSA9IDwxNj47CisJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47Cit9OworCitzZXJpYWxAMTExMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwljZWxsLWluZGV4ID0gPDE+OworCXJlZyA9IDwweDExMTAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKK307CisKK3BzY2ZpZm9AMTFmMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iOworCXJlZyA9IDwweDExZjAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MjAwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CmluZGV4IDVjNjYwMmQuLjRjY2IyY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CkBAIC0xOTUsMTEgKzE5NSw0IEBACiAKIGZzbCxtcGM1MjAwLW1zY2FuIG5vZGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVkIGNvbXBhdGlibGUtLCByZWctIGFuZCBpbnRlcnJ1cHQtcHJvcGVyaXRlcywgeW91IGNhbgotYWxzbyBzcGVjaWZ5IHdoaWNoIGNsb2NrIHNvdXJjZSBzaGFsbCBiZSB1c2VkIGZvciB0aGUgY29udHJvbGxlcjoKLQotLSBmc2wsbXNjYW4tY2xvY2stc291cmNlLSBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjbG9jayBzb3VyY2UuIFZhbGlkIHZhbHVlcwotCQkJICBhcmU6CSJpcCIgZm9yIGlwIGJ1cyBjbG9jawotCQkJCSJyZWYiIGZvciByZWZlcmVuY2UgY2xvY2sgKFhUQUwpCi0JCQkgICJyZWYiIGlzIGRlZmF1bHQgaW4gY2FzZSB0aGlzIHByb3BlcnR5IGlzIG5vdAotCQkJICBwcmVzZW50LgorU2VlIGZpbGUgY2FuLnR4dCBpbiB0aGlzIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CmluZGV4IGU3ZDlhMzQuLjgwNTEwYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dApAQCAtMTMsNiArMTMsMTEgQEAKIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAogICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZ3Bpb3MgOiBzcGVjaWZpZXMgdGhlIGdwaW8gcGlucyB0byBiZSB1c2VkIGZvciBjaGlwc2VsZWN0cy4KKyAgVGhlIGdwaW9zIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgcmVnID0gPGluZGV4PiBpbiB0aGUgU1BJIGNoaWxkIG5vZGVzLgorICBJZiB1bnNwZWNpZmllZCwgYSBzaW5nbGUgU1BJIGRldmljZSB3aXRob3V0IGEgY2hpcCBzZWxlY3QgY2FuIGJlIHVzZWQuCisKIEV4YW1wbGU6CiAJc3BpQDRjMCB7CiAJCWNlbGwtaW5kZXggPSA8MD47CkBAIC0yMSw0ICsyNiw2IEBACiAJCWludGVycnVwdHMgPSA8ODIgMD47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKIAkJbW9kZSA9ICJjcHUiOworCQlncGlvcyA9IDwmZ3BpbyAxOCAxCS8vIGRldmljZSByZWc9PDA+CisJCQkgJmdwaW8gMTkgMT47CS8vIGRldmljZSByZWc9PDE+CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3B0cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0CkBAIC0wLDAgKzEsMTM0IEBACitHREIgaW50ZW5kcyB0byBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgZGVidWcgZmVhdHVyZXMgb2YgQm9va0UKK3Byb2Nlc3NvcnM6CisKKzQgaGFyZHdhcmUgYnJlYWtwb2ludHMgKElBQykKKzIgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKHJlYWQsIHdyaXRlIGFuZCByZWFkLXdyaXRlKSAoREFDKQorMiB2YWx1ZSBjb25kaXRpb25zIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKERWQykKKworRm9yIHRoYXQsIHdlIG5lZWQgdG8gZXh0ZW5kIHB0cmFjZSBzbyB0aGF0IEdEQiBjYW4gcXVlcnkgYW5kIHNldCB0aGVzZQorcmVzb3VyY2VzLiBTaW5jZSB3ZSdyZSBleHRlbmRpbmcsIHdlJ3JlIHRyeWluZyB0byBjcmVhdGUgYW4gaW50ZXJmYWNlCit0aGF0J3MgZXh0ZW5kYWJsZSBhbmQgdGhhdCBjb3ZlcnMgYm90aCBCb29rRSBhbmQgc2VydmVyIHByb2Nlc3NvcnMsIHNvCit0aGF0IEdEQiBkb2Vzbid0IG5lZWQgdG8gc3BlY2lhbC1jYXNlIGVhY2ggb2YgdGhlbS4gV2UgYWRkZWQgdGhlCitmb2xsb3dpbmcgMyBuZXcgcHRyYWNlIHJlcXVlc3RzLgorCisxLiBQVFJBQ0VfUFBDX0dFVEhXREVCVUdJTkZPCisKK1F1ZXJ5IGZvciBHREIgdG8gZGlzY292ZXIgdGhlIGhhcmR3YXJlIGRlYnVnIGZlYXR1cmVzLiBUaGUgbWFpbiBpbmZvIHRvCitiZSByZXR1cm5lZCBoZXJlIGlzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgdGhlIGhhcmR3YXJlIHdhdGNocG9pbnRzLgorQm9va0UgcHJvY2Vzc29ycyBkb24ndCBoYXZlIHJlc3RyaWN0aW9ucyBoZXJlLCBidXQgc2VydmVyIHByb2Nlc3NvcnMgaGF2ZQorYW4gOC1ieXRlIGFsaWdubWVudCByZXN0cmljdGlvbiBmb3IgaGFyZHdhcmUgd2F0Y2hwb2ludHMuIFdlJ2QgbGlrZSB0byBhdm9pZAorYWRkaW5nIHNwZWNpYWwgY2FzZXMgdG8gR0RCIGJhc2VkIG9uIHdoYXQgaXQgc2VlcyBpbiBBVVhWLgorCitTaW5jZSB3ZSdyZSBhdCBpdCwgd2UgYWRkZWQgb3RoZXIgdXNlZnVsIGluZm8gdGhhdCB0aGUga2VybmVsIGNhbiByZXR1cm4gdG8KK0dEQjogdGhpcyBxdWVyeSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzLCBoYXJkd2FyZQord2F0Y2hwb2ludHMgYW5kIHdoZXRoZXIgaXQgc3VwcG9ydHMgYSByYW5nZSBvZiBhZGRyZXNzZXMgYW5kIGEgY29uZGl0aW9uLgorVGhlIHF1ZXJ5IHdpbGwgZmlsbCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGUgcmVxdWVzdGluZyBwcm9jZXNzOgorCitzdHJ1Y3QgcHBjX2RlYnVnX2luZm8geworICAgICAgIHVuaXQzMl90IHZlcnNpb247CisgICAgICAgdW5pdDMyX3QgbnVtX2luc3RydWN0aW9uX2JwczsKKyAgICAgICB1bml0MzJfdCBudW1fZGF0YV9icHM7CisgICAgICAgdW5pdDMyX3QgbnVtX2NvbmRpdGlvbl9yZWdzOworICAgICAgIHVuaXQzMl90IGRhdGFfYnBfYWxpZ25tZW50OworICAgICAgIHVuaXQzMl90IHNpemVvZl9jb25kaXRpb247IC8qIHNpemUgb2YgdGhlIERWQyByZWdpc3RlciAqLworICAgICAgIHVpbnQ2NF90IGZlYXR1cmVzOyAvKiBiaXRtYXNrIG9mIHRoZSBpbmRpdmlkdWFsIGZsYWdzICovCit9OworCitmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4NAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4OAorCisyLiBQVFJBQ0VfU0VUSFdERUJVRworCitTZXRzIGEgaGFyZHdhcmUgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50LCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHN0cnVjdHVyZToKKworc3RydWN0IHBwY19od19icmVha3BvaW50IHsKKyAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFICAweDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSAgICAweDQKKyAgICAgICAgdWludDMyX3QgdHJpZ2dlcl90eXBlOyAgICAgICAvKiBvbmx5IHNvbWUgY29tYmluYXRpb25zIGFsbG93ZWQgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRSAgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MworICAgICAgICB1aW50MzJfdCBhZGRyX21vZGU7ICAgICAgICAgIC8qIGFkZHJlc3MgbWF0Y2ggbW9kZSAqLworCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFICAgMHgzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FICAgMHgwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9FWEFDVCAgMHgxCS8qIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgc2FtZSB0aGluZyBhcyBhYm92ZSAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fT1IgICAgIDB4MgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EX09SIDB4MworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMIDB4MDBmZjAwMDAJLyogYnl0ZSBlbmFibGUgYml0cyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkUobikgICgxPDwoKG4pKzE2KSkKKyAgICAgICAgdWludDMyX3QgY29uZGl0aW9uX21vZGU7ICAgICAvKiBicmVhay93YXRjaHBvaW50IGNvbmRpdGlvbiBmbGFncyAqLworCisgICAgICAgIHVpbnQ2NF90IGFkZHI7CisgICAgICAgIHVpbnQ2NF90IGFkZHIyOworICAgICAgICB1aW50NjRfdCBjb25kaXRpb25fdmFsdWU7Cit9OworCitBIHJlcXVlc3Qgc3BlY2lmaWVzIG9uZSBldmVudCwgbm90IG5lY2Vzc2FyaWx5IGp1c3Qgb25lIHJlZ2lzdGVyIHRvIGJlIHNldC4KK0ZvciBpbnN0YW5jZSwgaWYgdGhlIHJlcXVlc3QgaXMgZm9yIGEgd2F0Y2hwb2ludCB3aXRoIGEgY29uZGl0aW9uLCBib3RoIHRoZQorREFDIGFuZCBEVkMgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IGluIHRoZSBzYW1lIHJlcXVlc3QuCisKK1dpdGggdGhpcyBHREIgY2FuIGFzayBmb3IgYWxsIGtpbmRzIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzIGFuZCB3YXRjaHBvaW50cwordGhhdCB0aGUgQm9va0Ugc3VwcG9ydHMuIENPTUVGUk9NIGJyZWFrcG9pbnRzIGF2YWlsYWJsZSBpbiBzZXJ2ZXIgcHJvY2Vzc29ycworYXJlIG5vdCBjb250ZW1wbGF0ZWQsIGJ1dCB0aGF0IGlzIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLgorCitwdHJhY2Ugd2lsbCByZXR1cm4gYW4gaW50ZWdlciAoaGFuZGxlKSB1bmlxdWVseSBpZGVudGlmeWluZyB0aGUgYnJlYWtwb2ludCBvcgord2F0Y2hwb2ludCBqdXN0IGNyZWF0ZWQuIFRoaXMgaW50ZWdlciB3aWxsIGJlIHVzZWQgaW4gdGhlIFBUUkFDRV9ERUxIV0RFQlVHCityZXF1ZXN0IHRvIGFzayBmb3IgaXRzIHJlbW92YWwuIFJldHVybiAtRU5PU1BDIGlmIHRoZSByZXF1ZXN0ZWQgYnJlYWtwb2ludAorY2FuJ3QgYmUgYWxsb2NhdGVkIG9uIHRoZSByZWdpc3RlcnMuCisKK1NvbWUgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIHN0cnVjdHVyZSB0bzoKKworLSBzZXQgYSBicmVha3BvaW50IGluIHRoZSBmaXJzdCBicmVha3BvaW50IHJlZ2lzdGVyCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKy0gc2V0IGEgd2F0Y2hwb2ludCB3aGljaCB0cmlnZ2VycyBvbiByZWFkcyBpbiB0aGUgc2Vjb25kIHdhdGNocG9pbnQgcmVnaXN0ZXIKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1Q7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkU7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBhZGRyZXNzOworICBwLmFkZHIyICAgICAgICAgICA9IDA7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gMDsKKworLSBzZXQgYSB3YXRjaHBvaW50IHdoaWNoIHRyaWdnZXJzIG9ubHkgd2l0aCBhIHNwZWNpZmljIHZhbHVlCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRDsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgfCBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9ICh1aW50NjRfdCkgY29uZGl0aW9uOworCistIHNldCBhIHJhbmdlZCBoYXJkd2FyZSBicmVha3BvaW50CisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRTsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORTsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGJlZ2luX3JhbmdlOworICBwLmFkZHIyICAgICAgICAgICA9ICh1aW50NjRfdCkgZW5kX3JhbmdlOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKzMuIFBUUkFDRV9ERUxIV0RFQlVHCisKK1Rha2VzIGFuIGludGVnZXIgd2hpY2ggaWRlbnRpZmllcyBhbiBleGlzdGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQKKyhpLmUuLCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBQVFJBQ0VfU0VUSFdERUJVRyksIGFuZCBkZWxldGVzIHRoZQorY29ycmVzcG9uZGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCmluZGV4IDMzOTIwN2QuLmQzNzhjYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTworKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KQEAgLTg3LDYgKzg3LDEyIEBACiAgIGNvbXBhdGliaWxpdHksIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGluIGhleGFkZWNpbWFsICgweGFiY2Qgb3IgYWJjZCkuIERldmljZQogICBudW1iZXJzIGdpdmVuIGFzIDB4YWJjZCB3aWxsIGJlIGludGVycHJldGVkIGFzIDAuMC5hYmNkLgogCisqIC9wcm9jL2Npb19zZXR0bGUKKworICBBIHdyaXRlIHJlcXVlc3QgdG8gdGhpcyBmaWxlIGlzIGJsb2NrZWQgdW50aWwgYWxsIHF1ZXVlZCBjaW8gYWN0aW9ucyBhcmUKKyAgaGFuZGxlZC4gVGhpcyB3aWxsIGFsbG93IHVzZXJzcGFjZSB0byB3YWl0IGZvciBwZW5kaW5nIHdvcmsgYWZmZWN0aW5nCisgIGRldmljZSBhdmFpbGFiaWxpdHkgYWZ0ZXIgY2hhbmdpbmcgY2lvX2lnbm9yZSBvciB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKwogKiBGb3Igc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpbiAyLjQgKG5hbWVseSwKICAgL3Byb2Mvc3ViY2hhbm5lbHMgYW5kIC9wcm9jL2NocGlkcyksIHNlZSBkcml2ZXItbW9kZWwudHh0LgogICBJbmZvcm1hdGlvbiBmb3JtZXJseSBpbiAvcHJvYy9pcnFfY291bnQgaXMgbm93IGluIC9wcm9jL2ludGVycnVwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CmluZGV4IGJkZTQ3M2QuLmVkMjY1Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0yMjMsOCArMjIzLDggQEAKIHByaXZhdGUgZGF0YS4KIAogVG8gaW1wbGVtZW50IGEgY2N3Z3JvdXAgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gaW5jbHVkZS9hc20vY2N3Z3JvdXAuaC4gS2VlcCBpbgotbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cgZHJpdmVyCi0odW5sZXNzIHlvdSBoYXZlIGEgbWV0YSBjY3cgZHJpdmVyLCBsaWtlIGN1MzA4OCBmb3IgbGNzIGFuZCBjdGMpLgorbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cKK2RyaXZlci4KIAogCiAyLiBDaGFubmVsIHBhdGhzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCmluZGV4IDE3ZmZhMDYuLjMwMDIzNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCkBAIC0xLDMgKzEsMTkgQEAKKzEgUmVsZWFzZSBEYXRlICAgIDogVGh1ci4gIE9jdCAyOSwgMjAwOSAwOToxMjo0NSBQU1QgMjAwOSAtCisJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKKwkJCUJvIFlhbmcKKworMiBDdXJyZW50IFZlcnNpb24gOiAwMC4wMC4wNC4xNy4xLXJjMQorMyBPbGRlciBWZXJzaW9uICAgOiAwMC4wMC4wNC4xMgorCisxLglBZGQgdGhlIHBhZF8wIGluIG1maSBmcmFtZSBzdHJ1Y3R1cmUgdG8gMCB0byBmaXggdGhlCisJY29udGV4dCB2YWx1ZSBsYXJnZXIgdGhhbiAzMmJpdCB2YWx1ZSBpc3N1ZS4KKworMi4JQWRkIHRoZSBsb2dpYyBkcml2ZSBsaXN0IHRvIHRoZSBkcml2ZXIuICBEcml2ZXIgd2lsbAorCWtlZXAgdGhlIGxvZ2ljIGRyaXZlIGxpc3QgaW50ZXJuYWwgYWZ0ZXIgZHJpdmVyIGxvYWQuCisKKzMuCWRyaXZlciBmaXhlZCB0aGUgZGV2aWNlIHVwZGF0ZSBpc3N1ZSBhZnRlciBnZXQgdGhlIEFFTgorCVBEIGRlbGV0ZS9BREQsIExEIGFkZC9kZWxldGUgZnJvbSBGVy4KKwogMSBSZWxlYXNlIERhdGUgICAgOiBUdWVzLiAgSnVseSAyOCwgMjAwOSAxMDoxMjo0NSBQU1QgMjAwOSAtCiAJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKIAkJCUJvIFlhbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODkyMzU5Ny4uMzNkZjgyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTQ4Miw2ICs0ODIsOSBAQAogCiAgICAgcmVmZXJlbmNlX3JhdGUJLSByZWZlcmVuY2Ugc2FtcGxlIHJhdGUsIDQ0MTAwIG9yIDQ4MDAwIChkZWZhdWx0KQogICAgIG11bHRpcGxlCQktIG11bHRpcGxlIHRvIHJlZi4gc2FtcGxlIHJhdGUsIDEgb3IgMiAoZGVmYXVsdCkKKyAgICBzdWJzeXN0ZW0JCS0gb3ZlcnJpZGUgdGhlIFBDSSBTU0lEIGZvciBwcm9iaW5nOyB0aGUgdmFsdWUKKwkJCSAgY29uc2lzdHMgb2YgU1NWSUQgPDwgMTYgfCBTU0RJRC4gIFRoZSBkZWZhdWx0IGlzCisJCQkgIHplcm8sIHdoaWNoIG1lYW5zIG5vIG92ZXJyaWRlLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCiAKQEAgLTExMjMsNiArMTEyNiwyMSBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KIAorICBNb2R1bGUgc25kLWphenoxNgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgY2hpcHNldC4gVGhlIGNoaXBzZXQgY29uc2lzdHMgb2YgMyBjaGlwczoKKyAgICBNVkQxMjE2ICsgTVZBNDE2ICsgTVZBNTE0LgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgU0IgRFNQIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgU0IgRFNQIGNoaXAgKDMsNSw3LDksMTAsMTUpCisgICAgZG1hOAktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoMSwzKQorICAgIGRtYTE2CS0gRE1BICMgZm9yIFNCIERTUCBjaGlwICg1LDcpCisgICAgbXB1X3BvcnQJLSBNUFUtNDAxIHBvcnQgIyAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgbXB1X2lycQktIE1QVS00MDEgaXJxICMgKDIsMyw1LDcpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKwogICBNb2R1bGUgc25kLWtvcmcxMjEyCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTc5MSw2ICsxODA5LDEzIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC11YTEwMQorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkgaW50ZXJmYWNlLgorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KKwogICBNb2R1bGUgc25kLXVzYi1hdWRpbwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xOTIzLDcgKzE5NDgsNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgRXNzZW5jZSBTVAorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgRFMsIEhEQVYxLjMgKERlbHV4ZSksIEVzc2VuY2UgU1QKICAgICAoRGVsdXhlKSBhbmQgRXNzZW5jZSBTVFguCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNhcmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCBlNzJjZWU5Li4xZDM4YjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMTI0LDYgKzEyNCw4IEBACiAgIGFzdXMtYTdtCUFTVVMgQTdNCiAgIG1hY3BybwlNYWNQcm8gc3VwcG9ydAogICBtYjUJCU1hY2Jvb2sgNSwxCisgIG1hY21pbmkzCU1hY21pbmkgMywxCisgIG1iYTIxCQlNYWNib29rIEFpciAyLDEKICAgbWJwMwkJTWFjYm9vayBQcm8gcmV2MwogICBpbWFjMjQJaU1hYyAyNCcnIHdpdGggamFjayBkZXRlY3Rpb24KICAgaW1hYzkxCWlNYWMgOSwxCkBAIC0yNzksMTMgKzI4MSwxNiBAQAogICBsYXB0b3AJQmFzaWMgTGFwdG9wIGNvbmZpZyAoZGVmYXVsdCkKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCiAgIGhwLWR2NjczNglIUCBkdjY3MzYKKyAgaHAtZjcwMAlIUCBDb21wYXEgUHJlc2FyaW8gRjcwMAogICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKKyAgdG9zaGliYQlUb3NoaWJhIFNhdGVsbGl0ZSBNMzAwCiAKIENvbmV4YW50IDUwNjYKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQorICBpZGVhcGFkICAgICAgIExlbm92byBJZGVhUGFkIFUxNTAKIAogU1RBQzkyMDAKID09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCA2MzI1YmVjMC4uZjRkZDNiZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CkBAIC00NTIsNiArNDUyLDMzIEBACiBzeXNmcyBlbnRyaWVzLCBhbmQgdGhlIGxpbmVzIGFmdGVyIGBbaGludF1gIGFyZSBwYXJzZWQgYXMgYGhpbnRzYAogc3lzZnMgZW50cmllcywgcmVzcGVjdGl2ZWx5LgogCitBbm90aGVyIGV4YW1wbGUgdG8gb3ZlcnJpZGUgdGhlIGNvZGVjIHZlbmRvciBpZCBmcm9tIDB4MTIzNDU2NzggdG8KKzB4ZGVhZGJlZWYgaXMgbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBbY29kZWNdCisgIDB4MTIzNDU2NzggMHhhYmNkMTIzNCAyCisKKyAgW3ZlbmRvcl9pZF0KKyAgMHhkZWFkYmVlZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBzaW1pbGFyIHdheSwgeW91IGNhbiBvdmVycmlkZSB0aGUgY29kZWMgc3Vic3lzdGVtX2lkIHZpYQorYFtzdWJzeXN0ZW1faWRdYCwgdGhlIHJldmlzaW9uIGlkIHZpYSBgW3JldmlzaW9uX2lkXWAgbGluZS4KK0Fsc28sIHRoZSBjb2RlYyBjaGlwIG5hbWUgY2FuIGJlIHJld3JpdHRlbiB2aWEgYFtjaGlwX25hbWVdYCBsaW5lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFtjb2RlY10KKyAgMHgxMjM0NTY3OCAweGFiY2QxMjM0IDIKKworICBbc3Vic3lzdGVtX2lkXQorICAweGZmZmYxMTExCisKKyAgW3JldmlzaW9uX2lkXQorICAweDEwCisKKyAgW2NoaXBfbmFtZV0KKyAgTXktb3duIE5FV1MtMDAwMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBoZC1hdWRpbyBkcml2ZXIgcmVhZHMgdGhlIGZpbGUgdmlhIHJlcXVlc3RfZmlybXdhcmUoKS4gIFRodXMsCiBhIHBhdGNoIGZpbGUgaGFzIHRvIGJlIGxvY2F0ZWQgb24gdGhlIGFwcHJvcHJpYXRlIGZpcm13YXJlIHBhdGgsCiB0eXBpY2FsbHksIC9saWIvZmlybXdhcmUuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgcGFzcyB0aGUgb3B0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAppbmRleCA2YTVhNTc5Li5mMWY4MWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKQEAgLTIzOCwxMSArMjM4LDEwIEBACiAKIFlvdSBuZWVkIHZlcnkgZmV3IHRoaW5ncyB0byBnZXQgdGhlIHN5c2NhbGxzIHRyYWNpbmcgaW4gYW4gYXJjaC4KIAorLSBTdXBwb3J0IEhBVkVfQVJDSF9UUkFDRUhPT0sgKHNlZSBhcmNoL0tjb25maWcpLgogLSBIYXZlIGEgTlJfc3lzY2FsbHMgdmFyaWFibGUgaW4gPGFzbS91bmlzdGQuaD4gdGhhdCBwcm92aWRlcyB0aGUgbnVtYmVyCiAgIG9mIHN5c2NhbGxzIHN1cHBvcnRlZCBieSB0aGUgYXJjaC4KLS0gSW1wbGVtZW50IGFyY2hfc3lzY2FsbF9hZGRyKCkgdGhhdCByZXNvbHZlcyBhIHN5c2NhbGwgYWRkcmVzcyBmcm9tIGEKLSAgc3lzY2FsbCBudW1iZXIuCi0tIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzCistIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzLgogLSBQdXQgdGhlIHRyYWNlX3N5c19lbnRlcigpIGFuZCB0cmFjZV9zeXNfZXhpdCgpIHRyYWNlcG9pbnRzIGNhbGxzIGZyb20gcHRyYWNlCiAgIGluIHRoZSBwdHJhY2Ugc3lzY2FsbHMgdHJhY2luZyBwYXRoLgogLSBUYWcgdGhpcyBhcmNoIGFzIEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKaW5kZXggNDdhYWJlZS4uYTkxMDBiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgcFs6W0dSUC9dRVZFTlRdIFNZTUJPTFsrb2Zmc118TUVNQUREUiBbRkVUQ0hBUkdTXQk6IFNldCBhIHByb2JlCiAgIHJbOltHUlAvXUVWRU5UXSBTWU1CT0xbKzBdIFtGRVRDSEFSR1NdCQk6IFNldCBhIHJldHVybiBwcm9iZQorICAtOltHUlAvXUVWRU5UCQkJCQkJOiBDbGVhciBhIHByb2JlCiAKICBHUlAJCTogR3JvdXAgbmFtZS4gSWYgb21pdHRlZCwgdXNlICJrcHJvYmVzIiBmb3IgaXQuCiAgRVZFTlQJCTogRXZlbnQgbmFtZS4gSWYgb21pdHRlZCwgdGhlIGV2ZW50IG5hbWUgaXMgZ2VuZXJhdGVkCkBAIC0zNywxNSArMzgsMTIgQEAKICAgQFNZTVsrfC1vZmZzXQk6IEZldGNoIG1lbW9yeSBhdCBTWU0gK3wtIG9mZnMgKFNZTSBzaG91bGQgYmUgYSBkYXRhIHN5bWJvbCkKICAgJHN0YWNrTgk6IEZldGNoIE50aCBlbnRyeSBvZiBzdGFjayAoTiA+PSAwKQogICAkc3RhY2sJOiBGZXRjaCBzdGFjayBhZGRyZXNzLgotICAkYXJnTgkJOiBGZXRjaCBmdW5jdGlvbiBhcmd1bWVudC4gKE4gPj0gMCkoKikKLSAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKiopCi0gICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKikKKyAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKikKKyAgK3wtb2ZmcyhGRVRDSEFSRykgOiBGZXRjaCBtZW1vcnkgYXQgRkVUQ0hBUkcgK3wtIG9mZnMgYWRkcmVzcy4oKiopCiAgIE5BTUU9RkVUQ0hBUkc6IFNldCBOQU1FIGFzIHRoZSBhcmd1bWVudCBuYW1lIG9mIEZFVENIQVJHLgogCi0gICgqKSBhTiBtYXkgbm90IGNvcnJlY3Qgb24gYXNtbGlua2FnZWQgZnVuY3Rpb25zIGFuZCBhdCB0aGUgbWlkZGxlIG9mCi0gICAgICBmdW5jdGlvbiBib2R5LgotICAoKiopIG9ubHkgZm9yIHJldHVybiBwcm9iZS4KLSAgKCoqKikgdGhpcyBpcyB1c2VmdWwgZm9yIGZldGNoaW5nIGEgZmllbGQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgorICAoKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgorICAoKiopIHRoaXMgaXMgdXNlZnVsIGZvciBmZXRjaGluZyBhIGZpZWxkIG9mIGRhdGEgc3RydWN0dXJlcy4KIAogCiBQZXItUHJvYmUgRXZlbnQgRmlsdGVyaW5nCkBAIC04MiwxMyArODAsMTYgQEAKIFRvIGFkZCBhIHByb2JlIGFzIGEgbmV3IGV2ZW50LCB3cml0ZSBhIG5ldyBkZWZpbml0aW9uIHRvIGtwcm9iZV9ldmVudHMKIGFzIGJlbG93LgogCi0gIGVjaG8gcDpteXByb2JlIGRvX3N5c19vcGVuIGRmZD0kYXJnMCBmaWxlbmFtZT0kYXJnMSBmbGFncz0kYXJnMiBtb2RlPSRhcmczID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3A6bXlwcm9iZSBkb19zeXNfb3BlbiBkZmQ9JWF4IGZpbGVuYW1lPSVkeCBmbGFncz0lY3ggbW9kZT0rNCgkc3RhY2spJyA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogCiAgVGhpcyBzZXRzIGEga3Byb2JlIG9uIHRoZSB0b3Agb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoIHJlY29yZGluZwotMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBBcyB0aGlzIGV4YW1wbGUgc2hvd3MsIHVzZXJzIGNhbgotY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgorMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBOb3RlLCB3aGljaCByZWdpc3Rlci9zdGFjayBlbnRyeSBpcworYXNzaWduZWQgdG8gZWFjaCBmdW5jdGlvbiBhcmd1bWVudCBkZXBlbmRzIG9uIGFyY2gtc3BlY2lmaWMgQUJJLiBJZiB5b3UgdW5zdXJlCit0aGUgQUJJLCBwbGVhc2UgdHJ5IHRvIHVzZSBwcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYtdG9vbHMgKHlvdSBjYW4gZmluZCBpdAordW5kZXIgdG9vbHMvcGVyZi8pLgorQXMgdGhpcyBleGFtcGxlIHNob3dzLCB1c2VycyBjYW4gY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgogCi0gIGVjaG8gcjpteXJldHByb2JlIGRvX3N5c19vcGVuICRyZXR2YWwgPj4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3I6bXlyZXRwcm9iZSBkb19zeXNfb3BlbiAkcmV0dmFsJyA+PiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKIAogIFRoaXMgc2V0cyBhIGtyZXRwcm9iZSBvbiB0aGUgcmV0dXJuIHBvaW50IG9mIGRvX3N5c19vcGVuKCkgZnVuY3Rpb24gd2l0aAogcmVjb3JkaW5nIHJldHVybiB2YWx1ZSBhcyAibXlyZXRwcm9iZSIgZXZlbnQuCkBAIC05NywyMyArOTgsMjQgQEAKIAogICBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva3Byb2Jlcy9teXByb2JlL2Zvcm1hdAogbmFtZTogbXlwcm9iZQotSUQ6IDc1CitJRDogNzgwCiBmb3JtYXQ6Ci0JZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsKLQlmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsKLQlmaWVsZDppbnQgY29tbW9uX3RnaWQ7CW9mZnNldDo4OwlzaXplOjQ7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOyAgICAgICBvZmZzZXQ6MDsgICAgICAgc2l6ZToyOyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7ICAgICAgIG9mZnNldDoyOyAgICAgICBzaXplOjE7IHNpZ25lZDowOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OyAgICAgICBvZmZzZXQ6Mzsgc2l6ZToxO3NpZ25lZDowOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsgICBvZmZzZXQ6NDsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOyAgICBvZmZzZXQ6ODsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKIAotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGlwOwlvZmZzZXQ6MTY7dHNpemU6ODsKLQlmaWVsZDogaW50IG5hcmdzOwlvZmZzZXQ6MjQ7dHNpemU6NDsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBkZmQ7CW9mZnNldDozMjt0c2l6ZTo4OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZpbGVuYW1lOwlvZmZzZXQ6NDA7dHNpemU6ODsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBmbGFnczsJb2Zmc2V0OjQ4O3RzaXplOjg7Ci0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgbW9kZTsJb2Zmc2V0OjU2O3RzaXplOjg7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgX19wcm9iZV9pcDsgb2Zmc2V0OjEyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOmludCBfX3Byb2JlX25hcmdzOyAgICAgICAgb2Zmc2V0OjE2OyAgICAgIHNpemU6NDsgc2lnbmVkOjE7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZGZkOyAgICAgICAgb2Zmc2V0OjIwOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7ICAgb2Zmc2V0OjI0OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgb2Zmc2V0OjI4OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgbW9kZTsgICAgICAgb2Zmc2V0OjMyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CiAKLXByaW50IGZtdDogIiglbHgpIGRmZD0lbHggZmlsZW5hbWU9JWx4IGZsYWdzPSVseCBtb2RlPSVseCIsIFJFQy0+aXAsIFJFQy0+ZGZkLCBSRUMtPmZpbGVuYW1lLCBSRUMtPmZsYWdzLCBSRUMtPm1vZGUKIAorcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5fX3Byb2JlX2lwLAorUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQogCiAgWW91IGNhbiBzZWUgdGhhdCB0aGUgZXZlbnQgaGFzIDQgYXJndW1lbnRzIGFzIGluIHRoZSBleHByZXNzaW9ucyB5b3Ugc3BlY2lmaWVkLgogCkBAIC0xMjEsNiArMTIzLDEyIEBACiAKICBUaGlzIGNsZWFycyBhbGwgcHJvYmUgcG9pbnRzLgogCisgT3IsCisKKyAgZWNobyAtOm15cHJvYmUgPj4ga3Byb2JlX2V2ZW50cworCisgVGhpcyBjbGVhcnMgcHJvYmUgcG9pbnRzIHNlbGVjdGl2ZWx5LgorCiAgUmlnaHQgYWZ0ZXIgZGVmaW5pdGlvbiwgZWFjaCBldmVudCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBGb3IgdHJhY2luZyB0aGVzZQogZXZlbnRzLCB5b3UgbmVlZCB0byBlbmFibGUgaXQuCiAKQEAgLTE0Niw0ICsxNTQsMyBAQAogcmV0dXJucyBmcm9tIFNZTUJPTChlLmcuICJzeXNfb3BlbisweDFiLzB4MWQgPC0gZG9fc3lzX29wZW4iIG1lYW5zIGtlcm5lbAogcmV0dXJucyBmcm9tIGRvX3N5c19vcGVuIHRvIHN5c19vcGVuKzB4MWIpLgogCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dAppbmRleCA5Y2Y4M2U4Li5kODM3MDNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZXJyb3ItY29kZXMudHh0CkBAIC00MSw4ICs0MSw4IEBACiAKIC1FRkJJRwkJSG9zdCBjb250cm9sbGVyIGRyaXZlciBjYW4ndCBzY2hlZHVsZSB0aGF0IG1hbnkgSVNPIGZyYW1lcy4KIAotLUVQSVBFCQlTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZC4gIEZvciBub24tY29udHJvbCBlbmRwb2ludHMsCi0JCXJlc2V0IHRoaXMgc3RhdHVzIHdpdGggdXNiX2NsZWFyX2hhbHQoKS4KKy1FUElQRQkJVGhlIHBpcGUgdHlwZSBzcGVjaWZpZWQgaW4gdGhlIFVSQiBkb2Vzbid0IG1hdGNoIHRoZQorCQllbmRwb2ludCdzIGFjdHVhbCB0eXBlLgogCiAtRU1TR1NJWkUJKGEpIGVuZHBvaW50IG1heHBhY2tldCBzaXplIGlzIHplcm87IGl0IGlzIG5vdCB1c2FibGUKIAkJICAgIGluIHRoZSBjdXJyZW50IGludGVyZmFjZSBhbHRzZXR0aW5nLgpAQCAtNjAsNiArNjAsOCBAQAogCiAtRUhPU1RVTlJFQUNICVVSQiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZC4KIAorLUVOT0VYRUMJQSBjb250cm9sIFVSQiBkb2Vzbid0IGNvbnRhaW4gYSBTZXR1cCBwYWNrZXQuCisKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgaW4gdXJiLT5zdGF0dXMgICAgICAgICAgICAgICAqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CmluZGV4IDNiZjY4MTguLjI3OTBhZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CkBAIC0yLDcgKzIsNyBAQAogCiAJCSBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgogCi0JCQkgICAgTm92ZW1iZXIgMTAsIDIwMDkKKwkJCSAgICBEZWNlbWJlciAxMSwgMjAwOQogCiAKIApAQCAtMjksOSArMjksOSBAQAogaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIFBNKS4KIAogTm90ZTogRHluYW1pYyBQTSBzdXBwb3J0IGZvciBVU0IgaXMgcHJlc2VudCBvbmx5IGlmIHRoZSBrZXJuZWwgd2FzCi1idWlsdCB3aXRoIENPTkZJR19VU0JfU1VTUEVORCBlbmFibGVkLiAgU3lzdGVtIFBNIHN1cHBvcnQgaXMgcHJlc2VudAotb25seSBpZiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRoIENPTkZJR19TVVNQRU5EIG9yIENPTkZJR19ISUJFUk5BVElPTgotZW5hYmxlZC4KK2J1aWx0IHdpdGggQ09ORklHX1VTQl9TVVNQRU5EIGVuYWJsZWQgKHdoaWNoIGRlcGVuZHMgb24KK0NPTkZJR19QTV9SVU5USU1FKS4gIFN5c3RlbSBQTSBzdXBwb3J0IGlzIHByZXNlbnQgb25seSBpZiB0aGUga2VybmVsCit3YXMgYnVpbHQgd2l0aCBDT05GSUdfU1VTUEVORCBvciBDT05GSUdfSElCRVJOQVRJT04gZW5hYmxlZC4KIAogCiAJV2hhdCBpcyBSZW1vdGUgV2FrZXVwPwpAQCAtMjI5LDYgKzIyOSwxMSBAQAogYWxzbyBjaGFuZ2UgdGhlIGlkbGUtZGVsYXkgdGltZTsgMiBzZWNvbmRzIGlzIG5vdCB0aGUgYmVzdCBjaG9pY2UgZm9yCiBldmVyeSBkZXZpY2UuCiAKK0lmIGEgZHJpdmVyIGtub3dzIHRoYXQgaXRzIGRldmljZSBoYXMgcHJvcGVyIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQsCitpdCBjYW4gZW5hYmxlIGF1dG9zdXNwZW5kIGFsbCBieSBpdHNlbGYuICBGb3IgZXhhbXBsZSwgdGhlIHZpZGVvCitkcml2ZXIgZm9yIGEgbGFwdG9wJ3Mgd2ViY2FtIG1pZ2h0IGRvIHRoaXMsIHNpbmNlIHRoZXNlIGRldmljZXMgYXJlCityYXJlbHkgdXNlZCBhbmQgc28gc2hvdWxkIG5vcm1hbGx5IGJlIGF1dG9zdXNwZW5kZWQuCisKIFNvbWV0aW1lcyBpdCB0dXJucyBvdXQgdGhhdCBldmVuIHdoZW4gYSBkZXZpY2UgZG9lcyB3b3JrIG9rYXkgd2l0aAogYXV0b3N1c3BlbmQgdGhlcmUgYXJlIHN0aWxsIHByb2JsZW1zLiAgRm9yIGV4YW1wbGUsIHRoZXJlIGFyZQogZXhwZXJpbWVudGFsIHBhdGNoZXMgYWRkaW5nIGF1dG9zdXNwZW5kIHN1cHBvcnQgdG8gdGhlIHVzYmhpZCBkcml2ZXIsCkBAIC0zMjEsNjkgKzMyNiw4MSBAQAogCXZvaWQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAJdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKLVRoZSBmdW5jdGlvbnMgd29yayBieSBtYWludGFpbmluZyBhIGNvdW50ZXIgaW4gdGhlIHVzYl9pbnRlcmZhY2UKLXN0cnVjdHVyZS4gIFdoZW4gaW50Zi0+cG1fdXNhZ2VfY291bnQgaXMgPiAwIHRoZW4gdGhlIGludGVyZmFjZSBpcwotZGVlbWVkIHRvIGJlIGJ1c3ksIGFuZCB0aGUga2VybmVsIHdpbGwgbm90IGF1dG9zdXNwZW5kIHRoZSBpbnRlcmZhY2UncwotZGV2aWNlLiAgV2hlbiBpbnRmLT5wbV91c2FnZV9jb3VudCBpcyA8PSAwIHRoZW4gdGhlIGludGVyZmFjZSBpcwotY29uc2lkZXJlZCB0byBiZSBpZGxlLCBhbmQgdGhlIGtlcm5lbCBtYXkgYXV0b3N1c3BlbmQgdGhlIGRldmljZS4KK1RoZSBmdW5jdGlvbnMgd29yayBieSBtYWludGFpbmluZyBhIHVzYWdlIGNvdW50ZXIgaW4gdGhlCit1c2JfaW50ZXJmYWNlJ3MgZW1iZWRkZWQgZGV2aWNlIHN0cnVjdHVyZS4gIFdoZW4gdGhlIGNvdW50ZXIgaXMgPiAwCit0aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGVlbWVkIHRvIGJlIGJ1c3ksIGFuZCB0aGUga2VybmVsIHdpbGwgbm90CithdXRvc3VzcGVuZCB0aGUgaW50ZXJmYWNlJ3MgZGV2aWNlLiAgV2hlbiB0aGUgdXNhZ2UgY291bnRlciBpcyA9IDAKK3RoZW4gdGhlIGludGVyZmFjZSBpcyBjb25zaWRlcmVkIHRvIGJlIGlkbGUsIGFuZCB0aGUga2VybmVsIG1heQorYXV0b3N1c3BlbmQgdGhlIGRldmljZS4KIAotKFRoZXJlIGlzIGEgc2ltaWxhciBwbV91c2FnZV9jb3VudCBmaWVsZCBpbiBzdHJ1Y3QgdXNiX2RldmljZSwKKyhUaGVyZSBpcyBhIHNpbWlsYXIgdXNhZ2UgY291bnRlciBmaWVsZCBpbiBzdHJ1Y3QgdXNiX2RldmljZSwKIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIGl0c2VsZiByYXRoZXIgdGhhbiBhbnkgb2YgaXRzIGludGVyZmFjZXMuCi1UaGlzIGZpZWxkIGlzIHVzZWQgb25seSBieSB0aGUgVVNCIGNvcmUuKQorVGhpcyBjb3VudGVyIGlzIHVzZWQgb25seSBieSB0aGUgVVNCIGNvcmUuKQogCi1Ecml2ZXJzIG11c3Qgbm90IG1vZGlmeSBpbnRmLT5wbV91c2FnZV9jb3VudCBkaXJlY3RseTsgaXRzIHZhbHVlCi1zaG91bGQgYmUgY2hhbmdlZCBvbmx5IGJlIHVzaW5nIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLiAgRHJpdmVycwotYXJlIHJlc3BvbnNpYmxlIGZvciBpbnN1cmluZyB0aGF0IHRoZSBvdmVyYWxsIGNoYW5nZSB0byBwbV91c2FnZV9jb3VudAotZHVyaW5nIHRoZWlyIGxpZmV0aW1lIGJhbGFuY2VzIG91dCB0byAwIChpdCBtYXkgYmUgbmVjZXNzYXJ5IGZvciB0aGUKLWRpc2Nvbm5lY3QgbWV0aG9kIHRvIGNhbGwgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgb25lIG9yIG1vcmUgdGltZXMKLXRvIGZ1bGZpbGwgdGhpcyByZXF1aXJlbWVudCkuICBUaGUgZmlyc3QgdHdvIHJvdXRpbmVzIHVzZSB0aGUgUE0gbXV0ZXgKLWluIHN0cnVjdCB1c2JfZGV2aWNlIGZvciBtdXR1YWwgZXhjbHVzaW9uOyBkcml2ZXJzIHVzaW5nIHRoZSBhc3luYwotcm91dGluZXMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGVpciBvd24gc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwKLWV4Y2x1c2lvbi4KK0RyaXZlcnMgbmVlZCBub3QgYmUgY29uY2VybmVkIGFib3V0IGJhbGFuY2luZyBjaGFuZ2VzIHRvIHRoZSB1c2FnZQorY291bnRlcjsgdGhlIFVTQiBjb3JlIHdpbGwgdW5kbyBhbnkgcmVtYWluaW5nICJnZXQicyB3aGVuIGEgZHJpdmVyCitpcyB1bmJvdW5kIGZyb20gaXRzIGludGVyZmFjZS4gIEFzIGEgY29yb2xsYXJ5LCBkcml2ZXJzIG11c3Qgbm90IGNhbGwKK2FueSBvZiB0aGUgdXNiX2F1dG9wbV8qIGZ1bmN0aW9ucyBhZnRlciB0aGVpciBkaWNvbm5lY3QoKSByb3V0aW5lIGhhcworcmV0dXJuZWQuCiAKLQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSBpbmNyZW1lbnRzIHBtX3VzYWdlX2NvdW50IGFuZAotCWF0dGVtcHRzIGFuIGF1dG9yZXN1bWUgaWYgdGhlIG5ldyB2YWx1ZSBpcyA+IDAgYW5kIHRoZQotCWRldmljZSBpcyBzdXNwZW5kZWQuCitEcml2ZXJzIHVzaW5nIHRoZSBhc3luYyByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIHRoZWlyIG93bgorc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwgZXhjbHVzaW9uLgogCi0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZGVjcmVtZW50cyBwbV91c2FnZV9jb3VudCBhbmQKLQlhdHRlbXB0cyBhbiBhdXRvc3VzcGVuZCBpZiB0aGUgbmV3IHZhbHVlIGlzIDw9IDAgYW5kIHRoZQotCWRldmljZSBpc24ndCBzdXNwZW5kZWQuCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgaW5jcmVtZW50cyB0aGUgdXNhZ2UgY291bnRlciBhbmQKKwlkb2VzIGFuIGF1dG9yZXN1bWUgaWYgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQuICBJZiB0aGUKKwlhdXRvcmVzdW1lIGZhaWxzLCB0aGUgY291bnRlciBpcyBkZWNyZW1lbnRlZCBiYWNrLgorCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZGVjcmVtZW50cyB0aGUgdXNhZ2UgY291bnRlciBhbmQKKwlhdHRlbXB0cyBhbiBhdXRvc3VzcGVuZCBpZiB0aGUgbmV3IHZhbHVlIGlzID0gMC4KIAogCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYygpIGFuZAogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYygpIGRvIGFsbW9zdCB0aGUgc2FtZSB0aGluZ3MgYXMKLQl0aGVpciBub24tYXN5bmMgY291bnRlcnBhcnRzLiAgVGhlIGRpZmZlcmVuY2VzIGFyZTogdGhleSBkbwotCW5vdCBhY3F1aXJlIHRoZSBQTSBtdXRleCwgYW5kIHRoZXkgdXNlIGEgd29ya3F1ZXVlIHRvIGRvIHRoZWlyCisJdGhlaXIgbm9uLWFzeW5jIGNvdW50ZXJwYXJ0cy4gIFRoZSBiaWcgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZXkKKwl1c2UgYSB3b3JrcXVldWUgdG8gZG8gdGhlIHJlc3VtZSBvciBzdXNwZW5kIHBhcnQgb2YgdGhlaXIKIAlqb2JzLiAgQXMgYSByZXN1bHQgdGhleSBjYW4gYmUgY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LAogCXN1Y2ggYXMgYW4gVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyLCBidXQgd2hlbiB0aGV5IHJldHVybiB0aGUKLQlkZXZpY2Ugd2lsbCBub3QgZ2VuZXJhbGx5IG5vdCB5ZXQgYmUgaW4gdGhlIGRlc2lyZWQgc3RhdGUuCisJZGV2aWNlIHdpbGwgZ2VuZXJhbGx5IG5vdCB5ZXQgYmUgaW4gdGhlIGRlc2lyZWQgc3RhdGUuCiAKIAl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKCkgYW5kCiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQoKSBtZXJlbHkgaW5jcmVtZW50IG9yCi0JZGVjcmVtZW50IHRoZSBwbV91c2FnZV9jb3VudCB2YWx1ZTsgdGhleSBkbyBub3QgYXR0ZW1wdCB0bwotCWNhcnJ5IG91dCBhbiBhdXRvcmVzdW1lIG9yIGFuIGF1dG9zdXNwZW5kLiAgSGVuY2UgdGhleSBjYW4gYmUKLQljYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQuCisJZGVjcmVtZW50IHRoZSB1c2FnZSBjb3VudGVyOyB0aGV5IGRvIG5vdCBhdHRlbXB0IHRvIGNhcnJ5IG91dAorCWFuIGF1dG9yZXN1bWUgb3IgYW4gYXV0b3N1c3BlbmQuICBIZW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgaW4KKwlhbiBhdG9taWMgY29udGV4dC4KIAotVGhlIGNvbnZlbnRpb25hbCB1c2FnZSBwYXR0ZXJuIGlzIHRoYXQgYSBkcml2ZXIgY2FsbHMKK1RoZSBzaW1wbGVzdCB1c2FnZSBwYXR0ZXJuIGlzIHRoYXQgYSBkcml2ZXIgY2FsbHMKIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpIGluIGl0cyBvcGVuIHJvdXRpbmUgYW5kCi11c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpbiBpdHMgY2xvc2Ugb3IgcmVsZWFzZSByb3V0aW5lLiAgQnV0Ci1vdGhlciBwYXR0ZXJucyBhcmUgcG9zc2libGUuCit1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpbiBpdHMgY2xvc2Ugb3IgcmVsZWFzZSByb3V0aW5lLiAgQnV0IG90aGVyCitwYXR0ZXJucyBhcmUgcG9zc2libGUuCiAKIFRoZSBhdXRvc3VzcGVuZCBhdHRlbXB0cyBtZW50aW9uZWQgYWJvdmUgd2lsbCBvZnRlbiBmYWlsIGZvciBvbmUKIHJlYXNvbiBvciBhbm90aGVyLiAgRm9yIGV4YW1wbGUsIHRoZSBwb3dlci9sZXZlbCBhdHRyaWJ1dGUgbWlnaHQgYmUKIHNldCB0byAib24iLCBvciBhbm90aGVyIGludGVyZmFjZSBpbiB0aGUgc2FtZSBkZXZpY2UgbWlnaHQgbm90IGJlCiBpZGxlLiAgVGhpcyBpcyBwZXJmZWN0bHkgbm9ybWFsLiAgSWYgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZSB3YXMgdGhhdAotdGhlIGRldmljZSBoYXNuJ3QgYmVlbiBpZGxlIGZvciBsb25nIGVub3VnaCwgYSBkZWxheWVkIHdvcmtxdWV1ZQotcm91dGluZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cCB0byBjYXJyeSBvdXQgdGhlIG9wZXJhdGlvbiB3aGVuIHRoZQotYXV0b3N1c3BlbmQgaWRsZS1kZWxheSBoYXMgZXhwaXJlZC4KK3RoZSBkZXZpY2UgaGFzbid0IGJlZW4gaWRsZSBmb3IgbG9uZyBlbm91Z2gsIGEgdGltZXIgaXMgc2NoZWR1bGVkIHRvCitjYXJyeSBvdXQgdGhlIG9wZXJhdGlvbiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkKK2hhcyBleHBpcmVkLgogCiBBdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwsIGFsdGhvdWdoIGZhaWx1cmUgd291bGQgbWVhbiB0aGF0CiB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50IG9yIG9wZXJhdGluZyBwcm9wZXJseS4gIFVubGlrZQotYXV0b3N1c3BlbmQsIHRoZXJlJ3Mgbm8gZGVsYXkgZm9yIGFuIGF1dG9yZXN1bWUuCithdXRvc3VzcGVuZCwgdGhlcmUncyBubyBpZGxlLWRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgogCiAKIAlPdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIGludGVyZmFjZQogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RyaXZlcnMgY2FuIGVuYWJsZSBhdXRvc3VzcGVuZCBmb3IgdGhlaXIgZGV2aWNlcyBieSBjYWxsaW5nCisKKwl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKworaW4gdGhlaXIgcHJvYmUoKSByb3V0aW5lLCBpZiB0aGV5IGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YKK3N1c3BlbmRpbmcgYW5kIHJlc3VtaW5nIGNvcnJlY3RseS4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCit3cml0aW5nICJhdXRvIiB0byB0aGUgZGV2aWNlJ3MgcG93ZXIvbGV2ZWwgYXR0cmlidXRlLiAgTGlrZXdpc2UsCitkcml2ZXJzIGNhbiBkaXNhYmxlIGF1dG9zdXNwZW5kIGJ5IGNhbGxpbmcKKworCXVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKworVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdyaXRpbmcgIm9uIiB0byB0aGUgcG93ZXIvbGV2ZWwgYXR0cmlidXRlLgorCiBTb21ldGltZXMgYSBkcml2ZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3RlIHdha2V1cCBpcyBlbmFibGVkCiBkdXJpbmcgYXV0b3N1c3BlbmQuICBGb3IgZXhhbXBsZSwgdGhlcmUncyBub3QgbXVjaCBwb2ludAogYXV0b3N1c3BlbmRpbmcgYSBrZXlib2FyZCBpZiB0aGUgdXNlciBjYW4ndCBjYXVzZSB0aGUga2V5Ym9hcmQgdG8gZG8gYQpAQCAtMzk1LDI2ICs0MTIsMjcgQEAKIE5vcm1hbGx5IGEgZHJpdmVyIHdvdWxkIHNldCB0aGlzIGZsYWcgaW4gaXRzIHByb2JlIG1ldGhvZCwgYXQgd2hpY2gKIHRpbWUgdGhlIGRldmljZSBpcyBndWFyYW50ZWVkIG5vdCB0byBiZSBhdXRvc3VzcGVuZGVkLikKIAotVGhlIHN5bmNocm9ub3VzIHVzYl9hdXRvcG1fKiByb3V0aW5lcyBoYXZlIHRvIHJ1biBpbiBhIHNsZWVwYWJsZQotcHJvY2VzcyBjb250ZXh0OyB0aGV5IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBoYW5kbGVyIG9yCi13aGlsZSBob2xkaW5nIGEgc3BpbmxvY2suICBJbiBmYWN0LCB0aGUgZW50aXJlIGF1dG9zdXNwZW5kIG1lY2hhbmlzbQotaXMgbm90IHdlbGwgZ2VhcmVkIHRvd2FyZCBpbnRlcnJ1cHQtZHJpdmVuIG9wZXJhdGlvbi4gIEhvd2V2ZXIgdGhlcmUKLWlzIG9uZSB0aGluZyBhIGRyaXZlciBjYW4gZG8gaW4gYW4gaW50ZXJydXB0IGhhbmRsZXI6CitJZiBhIGRyaXZlciBkb2VzIGl0cyBJL08gYXN5bmNocm9ub3VzbHkgaW4gaW50ZXJydXB0IGNvbnRleHQsIGl0CitzaG91bGQgY2FsbCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoKSBiZWZvcmUgc3RhcnRpbmcgb3V0cHV0IGFuZAordXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKCkgd2hlbiB0aGUgb3V0cHV0IHF1ZXVlIGRyYWlucy4gIFdoZW4KK2l0IHJlY2VpdmVzIGFuIGlucHV0IGV2ZW50LCBpdCBzaG91bGQgY2FsbAogCiAJdXNiX21hcmtfbGFzdF9idXN5KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIAotVGhpcyBzZXRzIHVkZXYtPmxhc3RfYnVzeSB0byB0aGUgY3VycmVudCB0aW1lLiAgdWRldi0+bGFzdF9idXN5IGlzIHRoZQotZmllbGQgdXNlZCBmb3IgaWRsZS1kZWxheSBjYWxjdWxhdGlvbnM7IHVwZGF0aW5nIGl0IHdpbGwgY2F1c2UgYW55Ci1wZW5kaW5nIGF1dG9zdXNwZW5kIHRvIGJlIG1vdmVkIGJhY2suICBUaGUgdXNiX2F1dG9wbV8qIHJvdXRpbmVzIHdpbGwKLWFsc28gc2V0IHRoZSBsYXN0X2J1c3kgZmllbGQgdG8gdGhlIGN1cnJlbnQgdGltZS4KK2luIHRoZSBldmVudCBoYW5kbGVyLiAgVGhpcyBzZXRzIHVkZXYtPmxhc3RfYnVzeSB0byB0aGUgY3VycmVudCB0aW1lLgordWRldi0+bGFzdF9idXN5IGlzIHRoZSBmaWVsZCB1c2VkIGZvciBpZGxlLWRlbGF5IGNhbGN1bGF0aW9uczsKK3VwZGF0aW5nIGl0IHdpbGwgY2F1c2UgYW55IHBlbmRpbmcgYXV0b3N1c3BlbmQgdG8gYmUgbW92ZWQgYmFjay4gIE1vc3QKK29mIHRoZSB1c2JfYXV0b3BtXyogcm91dGluZXMgd2lsbCBhbHNvIHNldCB0aGUgbGFzdF9idXN5IGZpZWxkIHRvIHRoZQorY3VycmVudCB0aW1lLgogCi1DYWxsaW5nIHVyYl9tYXJrX2xhc3RfYnVzeSgpIGZyb20gd2l0aGluIGFuIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgaXMKLXN1YmplY3QgdG8gcmFjZXM6IFRoZSBrZXJuZWwgbWF5IGhhdmUganVzdCBmaW5pc2hlZCBkZWNpZGluZyB0aGUKLWRldmljZSBoYXMgYmVlbiBpZGxlIGZvciBsb25nIGVub3VnaCBidXQgbm90IHlldCBnb3R0ZW4gYXJvdW5kIHRvCi1jYWxsaW5nIHRoZSBkcml2ZXIncyBzdXNwZW5kIG1ldGhvZC4gIFRoZSBkcml2ZXIgd291bGQgaGF2ZSB0byBiZQotcmVzcG9uc2libGUgZm9yIHN5bmNocm9uaXppbmcgaXRzIHN1c3BlbmQgbWV0aG9kIHdpdGggaXRzIFVSQgotY29tcGxldGlvbiBoYW5kbGVyIGFuZCBjYXVzaW5nIHRoZSBhdXRvc3VzcGVuZCB0byBmYWlsIHdpdGggLUVCVVNZIGlmCi1hbiBVUkIgaGFkIGNvbXBsZXRlZCB0b28gcmVjZW50bHkuCitBc3luY2hyb25vdXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBzdWJqZWN0IHRvIHJhY2VzLiAgRm9yIGV4YW1wbGUsIGEKK2RyaXZlciBtYXkgY2FsbCBvbmUgb2YgdGhlIHVzYl9hdXRvcG1fKl9pbnRlcmZhY2VfYXN5bmMoKSByb3V0aW5lcyBhdAorYSB0aW1lIHdoZW4gdGhlIGNvcmUgaGFzIGp1c3QgZmluaXNoZWQgZGVjaWRpbmcgdGhlIGRldmljZSBoYXMgYmVlbgoraWRsZSBmb3IgbG9uZyBlbm91Z2ggYnV0IG5vdCB5ZXQgZ290dGVuIGFyb3VuZCB0byBjYWxsaW5nIHRoZSBkcml2ZXIncworc3VzcGVuZCBtZXRob2QuICBUaGUgc3VzcGVuZCBtZXRob2QgbXVzdCBiZSByZXNwb25zaWJsZSBmb3IKK3N5bmNocm9uaXppbmcgd2l0aCB0aGUgb3V0cHV0IHJlcXVlc3Qgcm91dGluZSBhbmQgdGhlIFVSQiBjb21wbGV0aW9uCitoYW5kbGVyOyBpdCBzaG91bGQgY2F1c2UgYXV0b3N1c3BlbmRzIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlCitkcml2ZXIgbmVlZHMgdG8gdXNlIHRoZSBkZXZpY2UuCiAKIEV4dGVybmFsIHN1c3BlbmQgY2FsbHMgc2hvdWxkIG5ldmVyIGJlIGFsbG93ZWQgdG8gZmFpbCBpbiB0aGlzIHdheSwKIG9ubHkgYXV0b3N1c3BlbmQgY2FsbHMuICBUaGUgZHJpdmVyIGNhbiB0ZWxsIHRoZW0gYXBhcnQgYnkgY2hlY2tpbmcKQEAgLTQyMiw3NSArNDQwLDIzIEBACiBtZXRob2Q7IHRoaXMgYml0IHdpbGwgYmUgc2V0IGZvciBpbnRlcm5hbCBQTSBldmVudHMgKGF1dG9zdXNwZW5kKSBhbmQKIGNsZWFyIGZvciBleHRlcm5hbCBQTSBldmVudHMuCiAKLU1hbnkgb2YgdGhlIGluZ3JlZGllbnRzIGluIHRoZSBhdXRvc3VzcGVuZCBmcmFtZXdvcmsgYXJlIG9yaWVudGVkCi10b3dhcmRzIGludGVyZmFjZXM6IFRoZSB1c2JfaW50ZXJmYWNlIHN0cnVjdHVyZSBjb250YWlucyB0aGUKLXBtX3VzYWdlX2NudCBmaWVsZCwgYW5kIHRoZSB1c2JfYXV0b3BtXyogcm91dGluZXMgdGFrZSBhbiBpbnRlcmZhY2UKLXBvaW50ZXIgYXMgdGhlaXIgYXJndW1lbnQuICBCdXQgc29tZXdoYXQgY29uZnVzaW5nbHksIGEgZmV3IG9mIHRoZQotcGllY2VzIChpLmUuLCB1c2JfbWFya19sYXN0X2J1c3koKSkgdXNlIHRoZSB1c2JfZGV2aWNlIHN0cnVjdHVyZQotaW5zdGVhZC4gIERyaXZlcnMgbmVlZCB0byBrZWVwIHRoaXMgc3RyYWlnaHQ7IHRoZXkgY2FuIGNhbGwKLWludGVyZmFjZV90b191c2JkZXYoKSB0byBmaW5kIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciBhIGdpdmVuCi1pbnRlcmZhY2UuCiAKKwlNdXR1YWwgZXhjbHVzaW9uCisJLS0tLS0tLS0tLS0tLS0tLQogCi0JTG9ja2luZyByZXF1aXJlbWVudHMKLQktLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BbGwgdGhyZWUgc3VzcGVuZC9yZXN1bWUgbWV0aG9kcyBhcmUgYWx3YXlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHRoZQotdXNiX2RldmljZSdzIFBNIG11dGV4LiAgRm9yIGV4dGVybmFsIGV2ZW50cyAtLSBidXQgbm90IG5lY2Vzc2FyaWx5IGZvcgotYXV0b3N1c3BlbmQgb3IgYXV0b3Jlc3VtZSAtLSB0aGUgZGV2aWNlIHNlbWFwaG9yZSAodWRldi0+ZGV2LnNlbSkgd2lsbAotYWxzbyBiZSBoZWxkLiAgVGhpcyBpbXBsaWVzIHRoYXQgZXh0ZXJuYWwgc3VzcGVuZC9yZXN1bWUgZXZlbnRzIGFyZQotbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY2FsbHMgdG8gcHJvYmUsIGRpc2Nvbm5lY3QsIHByZV9yZXNldCwgYW5kCi1wb3N0X3Jlc2V0OyB0aGUgVVNCIGNvcmUgZ3VhcmFudGVlcyB0aGF0IHRoaXMgaXMgdHJ1ZSBvZiBpbnRlcm5hbAotc3VzcGVuZC9yZXN1bWUgZXZlbnRzIGFzIHdlbGwuCitGb3IgZXh0ZXJuYWwgZXZlbnRzIC0tIGJ1dCBub3QgbmVjZXNzYXJpbHkgZm9yIGF1dG9zdXNwZW5kIG9yCithdXRvcmVzdW1lIC0tIHRoZSBkZXZpY2Ugc2VtYXBob3JlICh1ZGV2LT5kZXYuc2VtKSB3aWxsIGJlIGhlbGQgd2hlbiBhCitzdXNwZW5kIG9yIHJlc3VtZSBtZXRob2QgaXMgY2FsbGVkLiAgVGhpcyBpbXBsaWVzIHRoYXQgZXh0ZXJuYWwKK3N1c3BlbmQvcmVzdW1lIGV2ZW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY2FsbHMgdG8gcHJvYmUsCitkaXNjb25uZWN0LCBwcmVfcmVzZXQsIGFuZCBwb3N0X3Jlc2V0OyB0aGUgVVNCIGNvcmUgZ3VhcmFudGVlcyB0aGF0Cit0aGlzIGlzIHRydWUgb2YgYXV0b3N1c3BlbmQvYXV0b3Jlc3VtZSBldmVudHMgYXMgd2VsbC4KIAogSWYgYSBkcml2ZXIgd2FudHMgdG8gYmxvY2sgYWxsIHN1c3BlbmQvcmVzdW1lIGNhbGxzIGR1cmluZyBzb21lCi1jcml0aWNhbCBzZWN0aW9uLCBpdCBjYW4gc2ltcGx5IGFjcXVpcmUgdWRldi0+cG1fbXV0ZXguIE5vdGUgdGhhdAotY2FsbHMgdG8gcmVzdW1lIG1heSBiZSB0cmlnZ2VyZWQgaW5kaXJlY3RseS4gQmxvY2sgSU8gZHVlIHRvIG1lbW9yeQotYWxsb2NhdGlvbnMgY2FuIG1ha2UgdGhlIHZtIHN1YnN5c3RlbSByZXN1bWUgYSBkZXZpY2UuIFRodXMgd2hpbGUKLWhvbGRpbmcgdGhpcyBsb2NrIHlvdSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aCBHRlBfS0VSTkVMIG9yCi1HRlBfTk9GUy4KLQotQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbWlnaHQgY2FsbCBzb21lIG9mIHRoZQotdXNiX2F1dG9wbV8qIHJvdXRpbmVzLCB0aGUgZHJpdmVyIGNhbiBhdm9pZCBkZWFkbG9jayBieSBkb2luZzoKLQotCWRvd24oJnVkZXYtPmRldi5zZW0pOwotCXJjID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGYpOwotCi1hbmQgYXQgdGhlIGVuZCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbjoKLQotCWlmICghcmMpCi0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTsKLQl1cCgmdWRldi0+ZGV2LnNlbSk7Ci0KLUhvbGRpbmcgdGhlIGRldmljZSBzZW1hcGhvcmUgd2lsbCBibG9jayBhbGwgZXh0ZXJuYWwgUE0gY2FsbHMsIGFuZCB0aGUKLXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpIHdpbGwgcHJldmVudCBhbnkgaW50ZXJuYWwgUE0gY2FsbHMsIGV2ZW4gaWYKLWl0IGZhaWxzLiAgKEV4ZXJjaXNlOiBXaHk/KQotCi1UaGUgcnVsZXMgZm9yIGxvY2tpbmcgb3JkZXIgYXJlOgotCi0JTmV2ZXIgYWNxdWlyZSBhbnkgZGV2aWNlIHNlbWFwaG9yZSB3aGlsZSBob2xkaW5nIGFueSBQTSBtdXRleC4KLQotCU5ldmVyIGFjcXVpcmUgdWRldi0+cG1fbXV0ZXggd2hpbGUgaG9sZGluZyB0aGUgUE0gbXV0ZXggZm9yCi0JYSBkZXZpY2UgdGhhdCBpc24ndCBhIGRlc2NlbmRhbnQgb2YgdWRldi4KLQotSW4gb3RoZXIgd29yZHMsIFBNIG11dGV4ZXMgc2hvdWxkIG9ubHkgYmUgYWNxdWlyZWQgZ29pbmcgdXAgdGhlIGRldmljZQotdHJlZSwgYW5kIHRoZXkgc2hvdWxkIGJlIGFjcXVpcmVkIG9ubHkgYWZ0ZXIgbG9ja2luZyBhbGwgdGhlIGRldmljZQotc2VtYXBob3JlcyB5b3UgbmVlZCB0byBob2xkLiAgVGhlc2UgcnVsZXMgZG9uJ3QgbWF0dGVyIHRvIGRyaXZlcnMgdmVyeQotbXVjaDsgdGhleSB1c3VhbGx5IGFmZmVjdCBqdXN0IHRoZSBVU0IgY29yZS4KLQotU3RpbGwsIGRyaXZlcnMgZG8gbmVlZCB0byBiZSBjYXJlZnVsLiAgRm9yIGV4YW1wbGUsIG1hbnkgZHJpdmVycyB1c2UgYQotcHJpdmF0ZSBtdXRleCB0byBzeW5jaHJvbml6ZSB0aGVpciBub3JtYWwgSS9PIGFjdGl2aXRpZXMgd2l0aCB0aGVpcgotZGlzY29ubmVjdCBtZXRob2QuICBOb3cgaWYgdGhlIGRyaXZlciBzdXBwb3J0cyBhdXRvc3VzcGVuZCB0aGVuIGl0Ci1tdXN0IGNhbGwgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZnJvbSBzb21ld2hlcmUgLS0gbWF5YmUgZnJvbSBpdHMKLWNsb3NlIG1ldGhvZC4gIEl0IHNob3VsZCBtYWtlIHRoZSBjYWxsIHdoaWxlIGhvbGRpbmcgdGhlIHByaXZhdGUgbXV0ZXgsCi1zaW5jZSBhIGRyaXZlciBzaG91bGRuJ3QgY2FsbCBhbnkgb2YgdGhlIHVzYl9hdXRvcG1fKiBmdW5jdGlvbnMgZm9yIGFuCi1pbnRlcmZhY2UgZnJvbSB3aGljaCBpdCBoYXMgYmVlbiB1bmJvdW5kLgotCi1CdXQgdGhlIHVzYl9hdXRwbV8qIHJvdXRpbmVzIGFsd2F5cyBhY3F1aXJlIHRoZSBkZXZpY2UncyBQTSBtdXRleCwgYW5kCi1jb25zZXF1ZW50bHkgdGhlIGxvY2tpbmcgb3JkZXIgaGFzIHRvIGJlOiBwcml2YXRlIG11dGV4IGZpcnN0LCBQTQotbXV0ZXggc2Vjb25kLiAgU2luY2UgdGhlIHN1c3BlbmQgbWV0aG9kIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgUE0KLW11dGV4IGhlbGQsIGl0IG11c3RuJ3QgdHJ5IHRvIGFjcXVpcmUgdGhlIHByaXZhdGUgbXV0ZXguICBJdCBoYXMgdG8KLXN5bmNocm9uaXplIHdpdGggdGhlIGRyaXZlcidzIEkvTyBhY3Rpdml0aWVzIGluIHNvbWUgb3RoZXIgd2F5LgorY3JpdGljYWwgc2VjdGlvbiwgdGhlIGJlc3Qgd2F5IGlzIHRvIGxvY2sgdGhlIGRldmljZSBhbmQgY2FsbAordXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgKGFuZCBkbyB0aGUgcmV2ZXJzZSBhdCB0aGUgZW5kIG9mIHRoZQorY3JpdGljYWwgc2VjdGlvbikuICBIb2xkaW5nIHRoZSBkZXZpY2Ugc2VtYXBob3JlIHdpbGwgYmxvY2sgYWxsCitleHRlcm5hbCBQTSBjYWxscywgYW5kIHRoZSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSB3aWxsIHByZXZlbnQgYW55CitpbnRlcm5hbCBQTSBjYWxscywgZXZlbiBpZiBpdCBmYWlscy4gIChFeGVyY2lzZTogV2h5PykKIAogCiAJSW50ZXJhY3Rpb24gYmV0d2VlbiBkeW5hbWljIFBNIGFuZCBzeXN0ZW0gUE0KQEAgLTQ5OSwyMiArNDY1LDExIEBACiBEeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGNhbiBpbnRlcmFjdCBpbgogYSBjb3VwbGUgb2Ygd2F5cy4KIAotRmlyc3RseSwgYSBkZXZpY2UgbWF5IGFscmVhZHkgYmUgbWFudWFsbHkgc3VzcGVuZGVkIG9yIGF1dG9zdXNwZW5kZWQKLXdoZW4gYSBzeXN0ZW0gc3VzcGVuZCBvY2N1cnMuICBTaW5jZSBzeXN0ZW0gc3VzcGVuZHMgYXJlIHN1cHBvc2VkIHRvCi1iZSBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZSwgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIHN1c3BlbmRlZAotZm9sbG93aW5nIHRoZSBzeXN0ZW0gcmVzdW1lLiAgVGhlIDIuNi4yMyBrZXJuZWwgb2JleXMgdGhpcyBwcmluY2lwbGUKLWZvciBtYW51YWxseSBzdXNwZW5kZWQgZGV2aWNlcyBidXQgbm90IGZvciBhdXRvc3VzcGVuZGVkIGRldmljZXM7IHRoZXkKLWRvIGdldCByZXN1bWVkIHdoZW4gdGhlIHN5c3RlbSB3YWtlcyB1cC4gIChQcmVzdW1hYmx5IHRoZXkgd2lsbCBiZQotYXV0b3N1c3BlbmRlZCBhZ2FpbiBhZnRlciB0aGVpciBpZGxlLWRlbGF5IHRpbWUgZXhwaXJlcy4pICBJbiBsYXRlcgota2VybmVscyB0aGlzIGJlaGF2aW9yIHdpbGwgYmUgZml4ZWQuCi0KLShUaGVyZSBpcyBhbiBleGNlcHRpb24uICBJZiBhIGRldmljZSB3b3VsZCB1bmRlcmdvIGEgcmVzZXQtcmVzdW1lCi1pbnN0ZWFkIG9mIGEgbm9ybWFsIHJlc3VtZSwgYW5kIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCBmb3IgcmVtb3RlCi13YWtldXAsIHRoZW4gdGhlIHJlc2V0LXJlc3VtZSB0YWtlcyBwbGFjZSBldmVuIGlmIHRoZSBkZXZpY2Ugd2FzCi1hbHJlYWR5IHN1c3BlbmRlZCB3aGVuIHRoZSBzeXN0ZW0gc3VzcGVuZCBiZWdhbi4gIFRoZSBqdXN0aWZpY2F0aW9uIGlzCi10aGF0IGEgcmVzZXQtcmVzdW1lIGlzIGEga2luZCBvZiByZW1vdGUtd2FrZXVwIGV2ZW50LiAgT3IgdG8gcHV0IGl0Ci1hbm90aGVyIHdheSwgYSBkZXZpY2Ugd2hpY2ggbmVlZHMgYSByZXNldCB3b24ndCBiZSBhYmxlIHRvIGdlbmVyYXRlCi1ub3JtYWwgcmVtb3RlLXdha2V1cCBzaWduYWxzLCBzbyBpdCBvdWdodCB0byBiZSByZXN1bWVkIGltbWVkaWF0ZWx5LikKK0ZpcnN0bHksIGEgZGV2aWNlIG1heSBhbHJlYWR5IGJlIGF1dG9zdXNwZW5kZWQgd2hlbiBhIHN5c3RlbSBzdXNwZW5kCitvY2N1cnMuICBTaW5jZSBzeXN0ZW0gc3VzcGVuZHMgYXJlIHN1cHBvc2VkIHRvIGJlIGFzIHRyYW5zcGFyZW50IGFzCitwb3NzaWJsZSwgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIHN1c3BlbmRlZCBmb2xsb3dpbmcgdGhlIHN5c3RlbQorcmVzdW1lLiAgQnV0IHRoaXMgdGhlb3J5IG1heSBub3Qgd29yayBvdXQgd2VsbCBpbiBwcmFjdGljZTsgb3ZlciB0aW1lCit0aGUga2VybmVsJ3MgYmVoYXZpb3IgaW4gdGhpcyByZWdhcmQgaGFzIGNoYW5nZWQuCiAKIFNlY29uZGx5LCBhIGR5bmFtaWMgcG93ZXItbWFuYWdlbWVudCBldmVudCBtYXkgb2NjdXIgYXMgYSBzeXN0ZW0KIHN1c3BlbmQgaXMgdW5kZXJ3YXkuICBUaGUgd2luZG93IGZvciB0aGlzIGlzIHNob3J0LCBzaW5jZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCA3NTM5ZThmLi4xNmNhMDMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC0yNiwzICsyNiw0IEBACiAgMjUgLT4gQ29tcHJvIFZpZGVvTWF0ZSBFODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODU4OmU4MDBdCiAgMjYgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjEyOTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg1NTFdCiAgMjcgLT4gTXlnaWNhIFg4NTU4IFBSTyBETUItVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjg1NzhdCisgMjggLT4gTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjZmMjJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZmNlMWU3ZS4uYjRhNzY3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTc0LDMgKzE3NCw0IEBACiAxNzMgLT4gWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSAgICAgICAgICAgICAgICBbMTEzMToyMDA0XQogMTc0IC0+IEFzdXMgRXVyb3BhIEh5YnJpZCBPRU0gICAgICAgICAgICAgICAgICAgWzEwNDM6NDg0N10KIDE3NSAtPiBMZWFkdGVrIFdpbmZhc3QgRFRWMTAwMFMgICAgICAgICAgICAgICAgIFsxMDdkOjY2NTVdCisxNzYgLT4gQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyAgICAgICAgICAgICAgICBbMDAwMDo1MDUxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggZTBkMjk4Zi4uOWIyZTBkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC04MSwzICs4MSw0IEBACiB0dW5lcj04MSAtIFBhcnRzbmljIChEYWV3b28pIFBUSS01TkYwNQogdHVuZXI9ODIgLSBQaGlsaXBzIENVMTIxNkwKIHR1bmVyPTgzIC0gTlhQIFREQTE4MjcxCit0dW5lcj04NCAtIFNvbnkgQlRGLVB4bjAxWgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2Y2NiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKQEAgLTAsMCArMSw0NyBAQAordGxnMjMwMCByZWxlYXNlIG5vdGVzCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgdjRsMi9kdmIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIHRsZzIzMDAgY2hpcC4KKworCitjdXJyZW50IHN0YXR1cworPT09PT09PT09PT09PT0KKwordmlkZW8KKwktIHN1cHBvcnQgbW1hcCBhbmQgcmVhZCgpLihubyBvdmVybGF5KQorCithdWRpbworCS0gVGhlIGRyaXZlciB3aWxsIHJlZ2lzdGVyIGEgQUxTQSBjYXJkIGZvciB0aGUgYXVkaW8gaW5wdXQuCisKK3ZiaQorCS0gV29ya3MgZm9yIGFsbW9zdCBUViBub3Jtcy4KKworZHZiLXQKKwktIHdvcmtzIGZvciBEVkItVAorCitGTQorCS0gV29ya3MgZm9yIHJhZGlvLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RFU1RFRCBBUFBMSUNBVElPTlM6CisKKy1WTEMxLjAuNCB0ZXN0IHRoZSB2aWRlbyBhbmQgZHZiLiBUaGUgR1VJIGlzIGZyaWVuZGx5IHRvIHVzZS4KKworLU1wbGF5ZXIgdGVzdCB0aGUgdmlkZW8uCisKKy1NcGxheWVyIHRlc3QgdGhlIEZNLiBUaGUgbXBsYXllciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1yYWRpbyBhbmQKKwkgLS1lbmFibGUtcmFkaW8tY2FwdHVyZS4KKwlUaGUgY29tbWFuZCBydW5zIGFzIHRoaXMoVGhlIGFsc2EgYXVkaW8gcmVnaXN0ZXJzIHRvIGNhcmQgMSk6CisJI21wbGF5ZXIgcmFkaW86Ly8xMDMuNy9jYXB0dXJlLyAtcmFkaW8gYWRldmljZT1odz0xLDA6YXJhdGU9NDgwMDAgXAorCQktcmF3YXVkaW8gcmF0ZT00ODAwMDpjaGFubmVscz0yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS05PV04gUFJPQkxFTVM6CithYm91dCBwcmVlbXBoYXNpczoKKwlZb3UgY2FuIHNldCB0aGUgcHJlZW1waGFzaXMgZm9yIHJhZGlvIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKwkjdjRsMi1jdGwgLWQgL2Rldi9yYWRpbzAgLS1zZXQtY3RybD1wcmVfZW1waGFzaXNfc2V0dGluZ3M9MQorCisJInByZV9lbXBoYXNpc19zZXR0aW5ncz0xIiBtZWFucyB0aGF0IHlvdSBzZWxlY3QgdGhlIDUwdXMuIElmIHlvdSB3YW50CisJdG8gc2VsZWN0IHRoZSA3NXVzLCBwbGVhc2UgdXNlICJwcmVfZW1waGFzaXNfc2V0dGluZ3M9MiIKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDE4MDBhNjIuLjE4MWI5ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC00Miw2ICs0Miw3IEBACiBvdjUxOQkJMDQxZTo0MDY3CUNyZWF0aXZlIExpdmUhIENhbSBWaWRlbyBJTSAoVkYwMzUwKQogb3Y1MTkJCTA0MWU6NDA2OAlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjA0NzAKIHNwY2E1NjEJCTA0NTg6NzAwNAlHZW5pdXMgVmlkZW9DQU0gRXhwcmVzcyBWMgorc245YzIwMjgJMDQ1ODo3MDA1CUdlbml1cyBTbWFydCAzMDAsIHZlcnNpb24gMgogc3VucGx1cwkJMDQ1ODo3MDA2CUdlbml1cyBEc2MgMS4zIFNtYXJ0CiB6YzN4eAkJMDQ1ODo3MDA3CUdlbml1cyBWaWRlb0NhbSBWMgogemMzeHgJCTA0NTg6NzAwYwlHZW5pdXMgVmlkZW9DYW0gVjMKQEAgLTEwOSw2ICsxMTAsNyBAQAogc3VucGx1cwkJMDRhNTozMDA4CUJlbnEgREMgMTUwMAogc3VucGx1cwkJMDRhNTozMDBhCUJlbnEgREMgMzQxMAogc3BjYTUwMAkJMDRhNTozMDBjCUJlbnEgREMgMTAxNgorYmVucQkJMDRhNTozMDM1CUJlbnEgREMgRTMwMAogZmluZXBpeAkJMDRjYjowMTA0CUZ1amlmaWxtIEZpbmVQaXggNDgwMAogZmluZXBpeAkJMDRjYjowMTA5CUZ1amlmaWxtIEZpbmVQaXggQTIwMgogZmluZXBpeAkJMDRjYjowMTBiCUZ1amlmaWxtIEZpbmVQaXggQTIwMwpAQCAtMTQyLDYgKzE0NCw3IEBACiBzcGNhNTAwCQkwNGZjOjczMzMJUGFsbVBpeERDODUKIHN1bnBsdXMJCTA0ZmM6ZmZmZglQdXJlIERpZ2l0YWxEYWtvdGEKIHNwY2E1MDEJCTA1MDY6MDBkZgkzQ29tIEhvbWVDb25uZWN0IExpdGUKK3N1bnBsdXMJCTA1MmI6MTUwNwlNZWdhcGl4ZWwgNSBQcmV0ZWMgREMtMTAwNwogc3VucGx1cwkJMDUyYjoxNTEzCU1lZ2FwaXggVjQKIHN1bnBsdXMJCTA1MmI6MTgwMwlNZWdhSW1hZ2UgVkkKIHR2ODUzMgkJMDU0NTo4MDhiCVZlbyBTdGluZ3JheQpAQCAtMTUxLDYgKzE1NCw3IEBACiBzdW5wbHVzCQkwNTQ2OjMyNzMJUG9sYXJvaWQgUERDMjAzMAogb3Y1MTkJCTA1NGM6MDE1NAlTb25ueSB0b3k0CiBvdjUxOQkJMDU0YzowMTU1CVNvbm55IHRveTUKK2NwaWExCQkwNTUzOjAwMDIJQ1BJQSBDUGlBICh2ZXJzaW9uMSkgYmFzZWQgY2FtZXJhcwogemMzeHgJCTA1NWY6YzAwNQlNdXN0ZWsgV2NhbTMwMEEKIHNwY2E1MDAJCTA1NWY6YzIwMAlNdXN0ZWsgR3NtYXJ0IDMwMAogc3VucGx1cwkJMDU1ZjpjMjExCUtvd2EgQnM4ODhlIE1pY3JvY2FtZXJhCkBAIC0xODgsOCArMTkyLDcgQEAKIHNwY2E1MDAJCTA2YmU6MDgwMAlPcHRpbWVkaWEKIHN1bnBsdXMJCTA2ZDY6MDAzMQlUcnVzdCA2MTAgTENEIFBvd2VyQ0BtIFpvb20KIHNwY2E1MDYJCTA2ZTE6YTE5MAlBRFMgSW5zdGFudCBWQ0QKLW92NTM0CQkwNmY4OjMwMDIJSGVyY3VsZXMgQmxvZyBXZWJjYW0KLW92NTM0CQkwNmY4OjMwMDMJSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cKK292NTM0XzkJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZwogc29uaXhqCQkwNmY4OjMwMDQJSGVyY3VsZXMgQ2xhc3NpYyBTaWx2ZXIKIHNvbml4agkJMDZmODozMDA4CUhlcmN1bGVzIERlbHV4ZSBPcHRpY2FsIEdsYXNzCiBwYWM3MzAyCQkwNmY4OjMwMDkJSGVyY3VsZXMgQ2xhc3NpYyBMaW5rCkBAIC0yMDQsNiArMjA3LDcgQEAKIHN1bnBsdXMJCTA3MzM6MzI2MQlDb25jb3JkIDMwNDUgc3BjYTUzNmEKIHN1bnBsdXMJCTA3MzM6MzI4MQlDeWJlcnBpeCBTNTUwVgogc3BjYTUwNgkJMDczNDowNDNiCTNEZU1vbiBVU0IgQ2FwdHVyZSBha2EKK2NwaWExCQkwODEzOjAwMDEJUVgzIGNhbWVyYQogb3Y1MTkJCTA4MTM6MDAwMglEdWFsIE1vZGUgVVNCIENhbWVyYSBQbHVzCiBzcGNhNTAwCQkwODRkOjAwMDMJRC1MaW5rIERTQy0zNTAKIHNwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKQEAgLTIyNSw3ICsyMjksOCBAQAogc3VucGx1cwkJMDhjYToyMDYwCUFpcHRlayBQb2NrZXREVjUzMDAKIHR2ODUzMgkJMDkyMzowMTBmCUlDTTUzMiBjYW1zCiBtYXJzCQkwOTNhOjA1MGYJTWFycy1TZW1pIFBjLUNhbWVyYQotbXI5NzMxMGEJMDkzYTowMTBmCVNha2FyIERpZ2l0YWwgbm8uIDc3Mzc5Cittcjk3MzEwYQkwOTNhOjAxMGUJQWxsIGtub3duIENJRiBjYW1zIHdpdGggdGhpcyBJRAorbXI5NzMxMGEJMDkzYTowMTBmCUFsbCBrbm93biBWR0EgY2FtcyB3aXRoIHRoaXMgSUQKIHBhYzIwNwkJMDkzYToyNDYwCVF0ZWMgV2ViY2FtIDEwMAogcGFjMjA3CQkwOTNhOjI0NjEJSFAgV2ViY2FtCiBwYWMyMDcJCTA5M2E6MjQ2MwlQaGlsaXBzIFNQQyAyMjAgTkMKQEAgLTMwMiw2ICszMDcsNyBAQAogc29uaXhqCQkwYzQ1OjYxM2MJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQzCVNvbml4IFBjY2FtMTY4CiBzb25peGoJCTBjNDU6NjE0OAlEaWdpdHVzIERBLTcwODExL1pTTUMgVVNCIFBDIENhbWVyYSBaUzIxMS9NaWNyb2RpYQorc29uaXhqCQkwYzQ1OjYxNGEJRnJvbnRlY2ggRS1DY2FtIChKSUwtMjIyNSkKIHNuOWMyMHgJCTBjNDU6NjI0MAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBNVDlNMDAxKQogc245YzIweAkJMGM0NTo2MjQyCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0xMTEpCiBzbjljMjB4CQkwYzQ1OjYyNDgJUEMgQ2FtZXJhIChTTjlDMjAxICsgT1Y5NjU1KQpAQCAtMzI0LDYgKzMzMCwxMCBAQAogc245YzIweAkJMGM0NTo2MmIzCVBDIENhbWVyYSAoU045QzIwMiArIE9WOTY1NSkKIHNuOWMyMHgJCTBjNDU6NjJiYglQQyBDYW1lcmEgKFNOOUMyMDIgKyBPVjc2NjApCiBzbjljMjB4CQkwYzQ1OjYyYmMJUEMgQ2FtZXJhIChTTjlDMjAyICsgSFY3MTMxUikKK3NuOWMyMDI4CTBjNDU6ODAwMQlXaWxkIFBsYW5ldCBEaWdpdGFsIFNweSBDYW1lcmEKK3NuOWMyMDI4CTBjNDU6ODAwMwlTYWthciAjMTExOTksICM2NjM3eCwgIzY3NDgwIGtleWNoYWluIGNhbXMKK3NuOWMyMDI4CTBjNDU6ODAwOAlNaW5pLVNob3R6IG1zLTM1MAorc245YzIwMjgJMGM0NTo4MDBhCVZpdml0YXIgVml2aWNhbSAzMzUwQgogc3VucGx1cwkJMGQ2NDowMzAzCVN1bnBsdXMgRmFzaGlvbkNhbSBEWEcKIG92NTE5CQkwZTk2OmMwMDEJVFJVU1QgMzgwIFVTQjIgU1BBQ0VDQE0KIGV0b21zCQkxMDJjOjYxNTEJUWNhbSBTYW5naGEgQ0lGCkBAIC0zNDEsMTAgKzM1MSwxMSBAQAogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCiB2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKIHBhYzIwNwkJMjAwMTpmMTE1CUQtTGluayBEU0ItQzEyMAotc3E5MDVjCQkyNzcwOjkwNTAJc3E5MDVjCi1zcTkwNWMJCTI3NzA6OTA1YwlEdWFsQ2FtZXJhCi1zcTkwNQkJMjc3MDo5MTIwCUFyZ3VzIERpZ2l0YWwgQ2FtZXJhIERDMTUxMgotc3E5MDVjCQkyNzcwOjkxM2QJc3E5MDVjCitzcTkwNWMJCTI3NzA6OTA1MAlEaXNuZXkgcGl4IG1pY3JvIChDSUYpCitzcTkwNWMJCTI3NzA6OTA1MglEaXNuZXkgcGl4IG1pY3JvIDIgKFZHQSkKK3NxOTA1YwkJMjc3MDo5MDVjCUFsbCAxMSBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAorc3E5MDUJCTI3NzA6OTEyMAlBbGwgMjQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKK3NxOTA1YwkJMjc3MDo5MTNkCUFsbCA0IGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECiBzcGNhNTAwCQkyODk5OjAxMmMJVG9wdHJvIEluZHVzdHJpYWwKIG92NTE5CQk4MDIwOmVmMDQJb3Y1MTkKIHNwY2E1MDgJCTgwODY6MDExMAlJbnRlbCBFYXN5IFBDIENhbWVyYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCA3NGQ2NzdjLi41MTU1NzAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtNTk5LDk5ICs1OTksMTMgQEAKIHZpZGVvIGJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGVhbGluZyB3aXRoIHZpZGVvCi1idWZmZXJzLiBUaG9zZSBtZXRob2RzIGFsbG93IGEgZHJpdmVyIHRvIGltcGxlbWVudCByZWFkKCksIG1tYXAoKSBhbmQKLW92ZXJsYXkoKSBvbiBhIGNvbnNpc3RlbnQgd2F5LgorVGhlIHY0bDIgY29yZSBBUEkgcHJvdmlkZXMgYSBzZXQgb2Ygc3RhbmRhcmQgbWV0aG9kcyAoY2FsbGVkICJ2aWRlb2J1ZiIpCitmb3IgZGVhbGluZyB3aXRoIHZpZGVvIGJ1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50CityZWFkKCksIG1tYXAoKSBhbmQgb3ZlcmxheSgpIGluIGEgY29uc2lzdGVudCB3YXkuICBUaGVyZSBhcmUgY3VycmVudGx5CittZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdCBzdXBwb3J0cyBETUEgd2l0aAorc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aCBsaW5lYXIgYWNjZXNzCisodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5IHVzZWQgb24gVVNCIGRyaXZlcnMKKyh2aWRlb2J1Zi12bWFsbG9jKS4KIAotVGhlcmUgYXJlIGN1cnJlbnRseSBtZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdAotc3VwcG9ydHMgRE1BIHdpdGggc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aAotbGluZWFyIGFjY2VzcyAodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5Ci11c2VkIG9uIFVTQiBkcml2ZXJzICh2aWRlb2J1Zi12bWFsbG9jKS4KLQotQW55IGRyaXZlciB1c2luZyB2aWRlb2J1ZiBzaG91bGQgcHJvdmlkZSBvcGVyYXRpb25zIChjYWxsYmFja3MpIGZvcgotZm91ciBoYW5kbGVyczoKLQotb3BzLT5idWZfc2V0dXAgICAtIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHZpZGVvIGJ1ZmZlcnMgYW5kIGF2b2lkIHRoZXkKLQkJICAgdG8gd2FzdGUgbW9yZSB0aGFuIHNvbWUgbWF4aW11bSBsaW1pdCBvZiBSQU07Ci1vcHMtPmJ1Zl9wcmVwYXJlIC0gZmlsbHMgdGhlIHZpZGVvIGJ1ZmZlciBzdHJ1Y3RzIGFuZCBjYWxscwotCQkgICB2aWRlb2J1Zl9pb2xvY2soKSB0byBhbGxvYyBhbmQgcHJlcGFyZSBtbWFwZWQgbWVtb3J5Owotb3BzLT5idWZfcXVldWUgICAtIGFkdmljZXMgdGhlIGRyaXZlciB0aGF0IGFub3RoZXIgYnVmZmVyIHdlcmUKLQkJICAgcmVxdWVzdGVkIChieSByZWFkKCkgb3IgYnkgUUJVRik7Ci1vcHMtPmJ1Zl9yZWxlYXNlIC0gZnJlZXMgYW55IGJ1ZmZlciB0aGF0IHdlcmUgYWxsb2NhdGVkLgotCi1JbiBvcmRlciB0byB1c2UgaXQsIHRoZSBkcml2ZXIgbmVlZCB0byBoYXZlIGEgY29kZSAoZ2VuZXJhbGx5IGNhbGxlZCBhdAotaW50ZXJydXB0IGNvbnRleHQpIHRoYXQgd2lsbCBwcm9wZXJseSBoYW5kbGUgdGhlIGJ1ZmZlciByZXF1ZXN0IGxpc3RzLAotYW5ub3VuY2luZyB0aGF0IGEgbmV3IGJ1ZmZlciB3ZXJlIGZpbGxlZC4KLQotVGhlIGlycSBoYW5kbGluZyBjb2RlIHNob3VsZCBoYW5kbGUgdGhlIHZpZGVvYnVmIHRhc2sgbGlzdHMsIGluIG9yZGVyCi10byBhZHZpY2UgdmlkZW9idWYgdGhhdCBhIG5ldyBmcmFtZSB3ZXJlIGZpbGxlZCwgaW4gb3JkZXIgdG8gaG9ub3IgdG8gYQotcmVxdWVzdC4gVGhlIGNvZGUgaXMgZ2VuZXJhbGx5IGxpa2UgdGhpcyBvbmU6Ci0JaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKQotCQlyZXR1cm47Ci0KLQlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IHZidWZmZXIsIHZiLnF1ZXVlKTsKLQotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkKLQkJcmV0dXJuOwotCi0JLyogU29tZSBsb2dpYyB0byBoYW5kbGUgdGhlIGJ1ZiBtYXkgYmUgbmVlZGVkIGhlcmUgKi8KLQotCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKLQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwotCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Ci0KLVRob3NlIGFyZSB0aGUgdmlkZW9idWZmZXIgZnVuY3Rpb25zIHVzZWQgb24gZHJpdmVycywgaW1wbGVtZW50ZWQgb24KLXZpZGVvYnVmLWNvcmU6Ci0KLS0gVmlkZW9idWYgaW5pdCBmdW5jdGlvbnMKLSAgdmlkZW9idWZfcXVldWVfc2dfaW5pdCgpCi0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgdXNlcyBETUEKLSAgICAgIFNjYXR0ZXIvR2F0aGVyIGJ1ZmZlcnMuCi0KLSAgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0Ci0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgbmVlZCBETUEKLSAgICAgIGNvbnRpZ3VvdXMgYnVmZmVycy4KLQotICB2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoKQotICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQotICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gVVNCIChhbmQgb3RoZXIgZHJpdmVycykKLSAgICAgIHRoYXQgbmVlZCBhIHZtYWxsb2NlZCB0eXBlIG9mIHZpZGVvYnVmLgotCi0tIHZpZGVvYnVmX2lvbG9jaygpCi0gIFByZXBhcmVzIHRoZSB2aWRlb2J1ZiBtZW1vcnkgZm9yIHRoZSBwcm9wZXIgbWV0aG9kIChyZWFkLCBtbWFwLCBvdmVybGF5KS4KLQotLSB2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCkKLSAgQ2hlY2tzIGlmIGEgdmlkZW9idWYgaXMgc3RyZWFtaW5nLgotCi0tIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgpCi0gIFN0b3BzIHZpZGVvIGhhbmRsaW5nLgotCi0tIHZpZGVvYnVmX21tYXBfZnJlZSgpCi0gIGZyZWVzIG1tYXAgYnVmZmVycy4KLQotLSB2aWRlb2J1Zl9zdG9wKCkKLSAgU3RvcHMgdmlkZW8gaGFuZGxpbmcsIGVuZHMgbW1hcCBhbmQgZnJlZXMgbW1hcCBhbmQgb3RoZXIgYnVmZmVycy4KLQotLSBWNEwyIGFwaSBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBjb3JyZXNwb25kIHRvIFZJRElPQ19mb28gaW9jdGxzOgotICAgdmlkZW9idWZfcmVxYnVmcygpLCB2aWRlb2J1Zl9xdWVyeWJ1ZigpLCB2aWRlb2J1Zl9xYnVmKCksCi0gICB2aWRlb2J1Zl9kcWJ1ZigpLCB2aWRlb2J1Zl9zdHJlYW1vbigpLCB2aWRlb2J1Zl9zdHJlYW1vZmYoKS4KLQotLSBWNEwxIGFwaSBmdW5jdGlvbiAoY29ycmVzcG9uZHMgdG8gVklESU9DTUJVRiBpb2N0bCk6Ci0gICB2aWRlb2J1Zl9jZ21idWYoKQotICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFY0TDEKLSAgICAgIEFQSS4KLQotLSBTb21lIGhlbHAgZnVuY3Rpb25zIGZvciByZWFkKCkvcG9sbCgpIG9wZXJhdGlvbnM6Ci0gICB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpCi0gICAgICBGb3IgY29udGludW91cyBzdHJlYW0gcmVhZCgpCi0gICB2aWRlb2J1Zl9yZWFkX29uZSgpCi0gICAgICBGb3Igc25hcHNob3QgcmVhZCgpCi0gICB2aWRlb2J1Zl9wb2xsX3N0cmVhbSgpCi0gICAgICBwb2xsaW5nIGhlbHAgZnVuY3Rpb24KLQotVGhlIGJldHRlciB3YXkgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0YWtlIGEgbG9vayBhdCB2aXZpIGRyaXZlci4gT25lCi1vZiB0aGUgbWFpbiByZWFzb25zIGZvciB2aXZpIGlzIHRvIGJlIGEgdmlkZW9idWYgdXNhZ2UgZXhhbXBsZS4gdGhlCi12aXZpX3RocmVhZF90aWNrKCkgZG9lcyB0aGUgdGFzayB0aGF0IHRoZSBJUlEgY2FsbGJhY2sgd291bGQgZG8gb24gUENJCi1kcml2ZXJzIChvciB0aGUgaXJxIGNhbGxiYWNrIG9uIFVTQikuCitQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93Cit0byB1c2UgdGhlIHZpZGVvYnVmIGxheWVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhMWY5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKQEAgLTAsMCArMSwzNjAgQEAKK0FuIGludHJvZHVjdGlvbiB0byB0aGUgdmlkZW9idWYgbGF5ZXIKK0pvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CitDdXJyZW50IGFzIG9mIDIuNi4zMworCitUaGUgdmlkZW9idWYgbGF5ZXIgZnVuY3Rpb25zIGFzIGEgc29ydCBvZiBnbHVlIGxheWVyIGJldHdlZW4gYSBWNEwyIGRyaXZlcgorYW5kIHVzZXIgc3BhY2UuICBJdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGJ1ZmZlcnMgZm9yCit0aGUgc3RvcmFnZSBvZiB2aWRlbyBmcmFtZXMuICBUaGVyZSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQKK3RvIGltcGxlbWVudCBtYW55IG9mIHRoZSBzdGFuZGFyZCBQT1NJWCBJL08gc3lzdGVtIGNhbGxzLCBpbmNsdWRpbmcgcmVhZCgpLAorcG9sbCgpLCBhbmQsIGhhcHBpbHksIG1tYXAoKS4gIEFub3RoZXIgc2V0IG9mIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0bworaW1wbGVtZW50IHRoZSBidWxrIG9mIHRoZSBWNEwyIGlvY3RsKCkgY2FsbHMgcmVsYXRlZCB0byBzdHJlYW1pbmcgSS9PLAoraW5jbHVkaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLCBxdWV1ZWluZyBhbmQgZGVxdWV1ZWluZywgYW5kIHN0cmVhbWluZworY29udHJvbC4gIFVzaW5nIHZpZGVvYnVmIGltcG9zZXMgYSBmZXcgZGVzaWduIGRlY2lzaW9ucyBvbiB0aGUgZHJpdmVyCithdXRob3IsIGJ1dCB0aGUgcGF5YmFjayBjb21lcyBpbiB0aGUgZm9ybSBvZiByZWR1Y2VkIGNvZGUgaW4gdGhlIGRyaXZlciBhbmQKK2EgY29uc2lzdGVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVjRMMiB1c2VyLXNwYWNlIEFQSS4KKworQnVmZmVyIHR5cGVzCisKK05vdCBhbGwgdmlkZW8gZGV2aWNlcyB1c2UgdGhlIHNhbWUga2luZCBvZiBidWZmZXJzLiAgSW4gZmFjdCwgdGhlcmUgYXJlIChhdAorbGVhc3QpIHRocmVlIGNvbW1vbiB2YXJpYXRpb25zOgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBzY2F0dGVyZWQgaW4gYm90aCB0aGUgcGh5c2ljYWwgYW5kIChrZXJuZWwpIHZpcnR1YWwKKyAgIGFkZHJlc3Mgc3BhY2VzLiAgKEFsbW9zdCkgYWxsIHVzZXItc3BhY2UgYnVmZmVycyBhcmUgbGlrZSB0aGlzLCBidXQgaXQKKyAgIG1ha2VzIGdyZWF0IHNlbnNlIHRvIGFsbG9jYXRlIGtlcm5lbC1zcGFjZSBidWZmZXJzIHRoaXMgd2F5IGFzIHdlbGwgd2hlbgorICAgaXQgaXMgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlOyB3b3JraW5nIHdpdGgKKyAgIHRoaXMga2luZCBvZiBidWZmZXIgbm9ybWFsbHkgcmVxdWlyZXMgaGFyZHdhcmUgd2hpY2ggY2FuIGRvCisgICBzY2F0dGVyL2dhdGhlciBETUEgb3BlcmF0aW9ucy4KKworIC0gQnVmZmVycyB3aGljaCBhcmUgcGh5c2ljYWxseSBzY2F0dGVyZWQsIGJ1dCB3aGljaCBhcmUgdmlydHVhbGx5CisgICBjb250aWd1b3VzOyBidWZmZXJzIGFsbG9jYXRlZCB3aXRoIHZtYWxsb2MoKSwgaW4gb3RoZXIgd29yZHMuICBUaGVzZQorICAgYnVmZmVycyBhcmUganVzdCBhcyBoYXJkIHRvIHVzZSBmb3IgRE1BIG9wZXJhdGlvbnMsIGJ1dCB0aGV5IGNhbiBiZQorICAgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgRE1BIGlzIG5vdCBhdmFpbGFibGUgYnV0IHZpcnR1YWxseS1jb250aWd1b3VzCisgICBidWZmZXJzIGFyZSBjb252ZW5pZW50LgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuICBBbGxvY2F0aW9uIG9mIHRoaXMga2luZCBvZgorICAgYnVmZmVyIGNhbiBiZSB1bnJlbGlhYmxlIG9uIGZyYWdtZW50ZWQgc3lzdGVtcywgYnV0IHNpbXBsZXIgRE1BCisgICBjb250cm9sbGVycyBjYW5ub3QgZGVhbCB3aXRoIGFueXRoaW5nIGVsc2UuCisKK1ZpZGVvYnVmIGNhbiB3b3JrIHdpdGggYWxsIHRocmVlIHR5cGVzIG9mIGJ1ZmZlcnMsIGJ1dCB0aGUgZHJpdmVyIGF1dGhvcgorbXVzdCBwaWNrIG9uZSBhdCB0aGUgb3V0c2V0IGFuZCBkZXNpZ24gdGhlIGRyaXZlciBhcm91bmQgdGhhdCBkZWNpc2lvbi4KKworW0l0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlcmUncyBhIGZvdXJ0aCBraW5kIG9mIGJ1ZmZlcjogIm92ZXJsYXkiIGJ1ZmZlcnMKK3doaWNoIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgc3lzdGVtJ3MgdmlkZW8gbWVtb3J5LiAgVGhlIG92ZXJsYXkKK2Z1bmN0aW9uYWxpdHkgaXMgY29uc2lkZXJlZCB0byBiZSBkZXByZWNhdGVkIGZvciBtb3N0IHVzZSwgYnV0IGl0IHN0aWxsCitzaG93cyB1cCBvY2Nhc2lvbmFsbHkgaW4gc3lzdGVtLW9uLWNoaXAgZHJpdmVycyB3aGVyZSB0aGUgcGVyZm9ybWFuY2UKK2JlbmVmaXRzIG1lcml0IHRoZSB1c2Ugb2YgdGhpcyB0ZWNobmlxdWUuICBPdmVybGF5IGJ1ZmZlcnMgY2FuIGJlIGhhbmRsZWQKK2FzIGEgZm9ybSBvZiBzY2F0dGVyZWQgYnVmZmVyLCBidXQgdGhlcmUgYXJlIHZlcnkgZmV3IGltcGxlbWVudGF0aW9ucyBpbgordGhlIGtlcm5lbCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIHRlY2huaXF1ZSBpcyBjdXJyZW50bHkgYmV5b25kIHRoZQorc2NvcGUgb2YgdGhpcyBkb2N1bWVudC5dCisKK0RhdGEgc3RydWN0dXJlcywgY2FsbGJhY2tzLCBhbmQgaW5pdGlhbGl6YXRpb24KKworRGVwZW5kaW5nIG9uIHdoaWNoIHR5cGUgb2YgYnVmZmVycyBhcmUgYmVpbmcgdXNlZCwgdGhlIGRyaXZlciBzaG91bGQKK2luY2x1ZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKyAgICA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CQkvKiBQaHlzaWNhbGx5IHNjYXR0ZXJlZCAqLworICAgIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CQkvKiB2bWFsbG9jKCkgYnVmZmVycwkqLworICAgIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CS8qIFBoeXNpY2FsbHkgY29udGlndW91cyAqLworCitUaGUgZHJpdmVyJ3MgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIFY0TDIgZGV2aWNlIHNob3VsZCBpbmNsdWRlIGEKK3N0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBpbnN0YW5jZSBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGJ1ZmZlciBxdWV1ZSwKK2Fsb25nIHdpdGggYSBsaXN0X2hlYWQgZm9yIHRoZSBxdWV1ZSBvZiBhdmFpbGFibGUgYnVmZmVycy4gIFRoZXJlIHdpbGwgYWxzbworbmVlZCB0byBiZSBhbiBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayB3aGljaCBpcyB1c2VkIHRvIHByb3RlY3QgKGF0IGxlYXN0KQordGhlIHF1ZXVlLgorCitUaGUgbmV4dCBzdGVwIGlzIHRvIHdyaXRlIGZvdXIgc2ltcGxlIGNhbGxiYWNrcyB0byBoZWxwIHZpZGVvYnVmIGRlYWwgd2l0aAordGhlIG1hbmFnZW1lbnQgb2YgYnVmZmVyczoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgeworCWludCAoKmJ1Zl9zZXR1cCkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSk7CisJaW50ICgqYnVmX3ByZXBhcmUpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKKwl2b2lkICgqYnVmX3F1ZXVlKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKKwl2b2lkICgqYnVmX3JlbGVhc2UpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CisgICAgfTsKKworYnVmX3NldHVwKCkgaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBJL08gcHJvY2Vzcywgd2hlbiBzdHJlYW1pbmcgaXMgYmVpbmcKK2luaXRpYXRlZDsgaXRzIHB1cnBvc2UgaXMgdG8gdGVsbCB2aWRlb2J1ZiBhYm91dCB0aGUgSS9PIHN0cmVhbS4gIFRoZSBjb3VudAorcGFyYW1ldGVyIHdpbGwgYmUgYSBzdWdnZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gdXNlOyB0aGUgZHJpdmVyIHNob3VsZAorY2hlY2sgaXQgZm9yIHJhdGlvbmFsaXR5IGFuZCBhZGp1c3QgaXQgaWYgbmVlZCBiZS4gIEFzIGEgcHJhY3RpY2FsIHJ1bGUsIGEKK21pbmltdW0gb2YgdHdvIGJ1ZmZlcnMgYXJlIG5lZWRlZCBmb3IgcHJvcGVyIHN0cmVhbWluZywgYW5kIHRoZXJlIGlzCit1c3VhbGx5IGEgbWF4aW11bSAod2hpY2ggY2Fubm90IGV4Y2VlZCAzMikgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVhY2gKK2RldmljZS4gIFRoZSBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IHRvIHRoZSBleHBlY3RlZCAobWF4aW11bSkgc2l6ZQorZm9yIGVhY2ggZnJhbWUgb2YgZGF0YS4KKworRWFjaCBidWZmZXIgKGluIHRoZSBmb3JtIG9mIGEgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciBwb2ludGVyKSB3aWxsIGJlCitwYXNzZWQgdG8gYnVmX3ByZXBhcmUoKSwgd2hpY2ggc2hvdWxkIHNldCB0aGUgYnVmZmVyJ3Mgc2l6ZSwgd2lkdGgsIGhlaWdodCwKK2FuZCBmaWVsZCBmaWVsZHMgcHJvcGVybHkuICBJZiB0aGUgYnVmZmVyJ3Mgc3RhdGUgZmllbGQgaXMKK1ZJREVPQlVGX05FRURTX0lOSVQsIHRoZSBkcml2ZXIgc2hvdWxkIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfaW9sb2NrKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Zik7CisKK0Ftb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYWxsIHdpbGwgdXN1YWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCitGaW5hbGx5LCB0aGUgYnVmX3ByZXBhcmUoKSBmdW5jdGlvbiBzaG91bGQgc2V0IHRoZSBidWZmZXIncyBzdGF0ZSB0bworVklERU9CVUZfUFJFUEFSRUQuCisKK1doZW4gYSBidWZmZXIgaXMgcXVldWVkIGZvciBJL08sIGl0IGlzIHBhc3NlZCB0byBidWZfcXVldWUoKSwgd2hpY2ggc2hvdWxkCitwdXQgaXQgb250byB0aGUgZHJpdmVyJ3MgbGlzdCBvZiBhdmFpbGFibGUgYnVmZmVycyBhbmQgc2V0IGl0cyBzdGF0ZSB0bworVklERU9CVUZfUVVFVUVELiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIHNwaW5sb2NrCitoZWxkOyBpZiBpdCB0cmllcyB0byBhY3F1aXJlIGl0IGFzIHdlbGwgdGhpbmdzIHdpbGwgY29tZSB0byBhIHNjcmVlY2hpbmcKK2hhbHQuICBZZXMsIHRoaXMgaXMgdGhlIHZvaWNlIG9mIGV4cGVyaWVuY2UuICBOb3RlIGFsc28gdGhhdCB2aWRlb2J1ZiBtYXkKK3dhaXQgb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcXVldWU7IHBsYWNpbmcgb3RoZXIgYnVmZmVycyBpbiBmcm9udCBvZiBpdAorY291bGQgYWdhaW4gZ3VtIHVwIHRoZSB3b3Jrcy4gIFNvIHVzZSBsaXN0X2FkZF90YWlsKCkgdG8gZW5xdWV1ZSBidWZmZXJzLgorCitGaW5hbGx5LCBidWZfcmVsZWFzZSgpIGlzIGNhbGxlZCB3aGVuIGEgYnVmZmVyIGlzIG5vIGxvbmdlciBpbnRlbmRlZCB0byBiZQordXNlZC4gIFRoZSBkcml2ZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIEkvTyBhY3RpdmUgb24gdGhlIGJ1ZmZlciwKK3RoZW4gcGFzcyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgZnJlZSByb3V0aW5lKHMpOgorCisgICAgLyogU2NhdHRlci9nYXRoZXIgZHJpdmVycyAqLworICAgIGludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKyAgICBpbnQgdmlkZW9idWZfZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKworICAgIC8qIHZtYWxsb2MgZHJpdmVycyAqLworICAgIHZvaWQgdmlkZW9idWZfdm1hbGxvY19mcmVlIChzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCisgICAgLyogQ29udGlndW91cyBkcml2ZXJzICovCisgICAgdm9pZCB2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworT25lIHdheSB0byBlbnN1cmUgdGhhdCBhIGJ1ZmZlciBpcyBubyBsb25nZXIgdW5kZXIgSS9PIGlzIHRvIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfd2FpdG9uKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBpbnQgbm9uX2Jsb2NraW5nLCBpbnQgaW50cik7CisKK0hlcmUsIHZiIGlzIHRoZSBidWZmZXIsIG5vbl9ibG9ja2luZyBpbmRpY2F0ZXMgd2hldGhlciBub24tYmxvY2tpbmcgSS9PCitzaG91bGQgYmUgdXNlZCAoaXQgc2hvdWxkIGJlIHplcm8gaW4gdGhlIGJ1Zl9yZWxlYXNlKCkgY2FzZSksIGFuZCBpbnRyCitjb250cm9scyB3aGV0aGVyIGFuIGludGVycnVwdGlibGUgd2FpdCBpcyB1c2VkLgorCitGaWxlIG9wZXJhdGlvbnMKKworQXQgdGhpcyBwb2ludCwgbXVjaCBvZiB0aGUgd29yayBpcyBkb25lOyBtdWNoIG9mIHRoZSByZXN0IGlzIHNsaXBwaW5nCit2aWRlb2J1ZiBjYWxscyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3RoZXIgZHJpdmVyIGNhbGxiYWNrcy4gIFRoZQorZmlyc3Qgc3RlcCBpcyBpbiB0aGUgb3BlbigpIGZ1bmN0aW9uLCB3aGljaCBtdXN0IGluaXRpYWxpemUgdGhlCit2aWRlb2J1ZiBxdWV1ZS4gIFRoZSBmdW5jdGlvbiB0byB1c2UgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBidWZmZXIgdXNlZDoKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfc2dfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgKm9wcywKKwkJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzcGlubG9ja190ICppcnFsb2NrLAorCQkJCSAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSwKKwkJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJICAgICAgIHZvaWQgKnByaXYpOworCitJbiBlYWNoIGNhc2UsIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZTogcSBpcyB0aGUgcXVldWUgc3RydWN0dXJlIGZvciB0aGUKK2RldmljZSwgb3BzIGlzIHRoZSBzZXQgb2YgY2FsbGJhY2tzIGFzIGRlc2NyaWJlZCBhYm92ZSwgZGV2IGlzIHRoZSBkZXZpY2UKK3N0cnVjdHVyZSBmb3IgdGhpcyB2aWRlbyBkZXZpY2UsIGlycWxvY2sgaXMgYW4gaW50ZXJydXB0LXNhZmUgc3BpbmxvY2sgdG8KK3Byb3RlY3QgYWNjZXNzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHR5cGUgaXMgdGhlIGJ1ZmZlciB0eXBlIHVzZWQgYnkgdGhlCitkZXZpY2UgKGNhbWVyYXMgd2lsbCB1c2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBmb3IgZXhhbXBsZSksIGZpZWxkCitkZXNjcmliZXMgd2hpY2ggZmllbGQgaXMgYmVpbmcgY2FwdHVyZWQgKG9mdGVuIFY0TDJfRklFTERfTk9ORSBmb3IKK3Byb2dyZXNzaXZlIGRldmljZXMpLCBtc2l6ZSBpcyB0aGUgc2l6ZSBvZiBhbnkgY29udGFpbmluZyBzdHJ1Y3R1cmUgdXNlZAorYXJvdW5kIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIGFuZCBwcml2IGlzIGEgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgd2hpY2gKK3Nob3dzIHVwIGluIHRoZSBwcml2X2RhdGEgZmllbGQgb2Ygc3RydWN0IHZpZGVvYnVmX3F1ZXVlLiAgTm90ZSB0aGF0IHRoZXNlCithcmUgdm9pZCBmdW5jdGlvbnMgd2hpY2gsIGV2aWRlbnRseSwgYXJlIGltbXVuZSB0byBmYWlsdXJlLgorCitWNEwyIGNhcHR1cmUgZHJpdmVycyBjYW4gYmUgd3JpdHRlbiB0byBzdXBwb3J0IGVpdGhlciBvZiB0d28gQVBJczogdGhlCityZWFkKCkgc3lzdGVtIGNhbGwgYW5kIHRoZSByYXRoZXIgbW9yZSBjb21wbGljYXRlZCBzdHJlYW1pbmcgbWVjaGFuaXNtLiAgQXMKK2EgZ2VuZXJhbCBydWxlLCBpdCBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBib3RoIHRvIGVuc3VyZSB0aGF0IGFsbAorYXBwbGljYXRpb25zIGhhdmUgYSBjaGFuY2Ugb2Ygd29ya2luZyB3aXRoIHRoZSBkZXZpY2UuICBWaWRlb2J1ZiBtYWtlcyBpdAorZWFzeSB0byBkbyB0aGF0IHdpdGggdGhlIHNhbWUgY29kZS4gIFRvIGltcGxlbWVudCByZWFkKCksIHRoZSBkcml2ZXIgbmVlZAorb25seSBtYWtlIGEgY2FsbCB0byBvbmUgb2Y6CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfb25lKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsCisJCQkgICAgICBsb2ZmX3QgKnBwb3MsIGludCBub25ibG9ja2luZyk7CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfc3RyZWFtKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCQkgbG9mZl90ICpwcG9zLCBpbnQgdmJpaGFjaywgaW50IG5vbmJsb2NraW5nKTsKKworRWl0aGVyIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCByZWFkIGZyYW1lIGRhdGEgaW50byBkYXRhLCByZXR1cm5pbmcgdGhlCithbW91bnQgYWN0dWFsbHkgcmVhZDsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB2aWRlb2J1Zl9yZWFkX29uZSgpIHdpbGwgb25seQorcmVhZCBhIHNpbmdsZSBmcmFtZSwgd2hpbGUgdmlkZW9idWZfcmVhZF9zdHJlYW0oKSB3aWxsIHJlYWQgbXVsdGlwbGUgZnJhbWVzCitpZiB0aGV5IGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIEEKK3R5cGljYWwgZHJpdmVyIHJlYWQoKSBpbXBsZW1lbnRhdGlvbiB3aWxsIHN0YXJ0IHRoZSBjYXB0dXJlIGVuZ2luZSwgY2FsbAorb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMsIHRoZW4gc3RvcCB0aGUgZW5naW5lIGJlZm9yZSByZXR1cm5pbmcgKHRob3VnaCBhCitzbWFydGVyIGltcGxlbWVudGF0aW9uIG1pZ2h0IGxlYXZlIHRoZSBlbmdpbmUgcnVubmluZyBmb3IgYSBsaXR0bGUgd2hpbGUgaW4KK2FudGljaXBhdGlvbiBvZiBhbm90aGVyIHJlYWQoKSBjYWxsIGhhcHBlbmluZyBpbiB0aGUgbmVhciBmdXR1cmUpLgorCitUaGUgcG9sbCgpIGZ1bmN0aW9uIGNhbiB1c3VhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggYSBkaXJlY3QgY2FsbCB0bzoKKworICAgIHVuc2lnbmVkIGludCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgcG9sbF90YWJsZSAqd2FpdCk7CisKK05vdGUgdGhhdCB0aGUgYWN0dWFsIHdhaXQgcXVldWUgZXZlbnR1YWxseSB1c2VkIHdpbGwgYmUgdGhlIG9uZSBhc3NvY2lhdGVkCit3aXRoIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVmZmVyLgorCitXaGVuIHN0cmVhbWluZyBJL08gaXMgZG9uZSB0byBrZXJuZWwtc3BhY2UgYnVmZmVycywgdGhlIGRyaXZlciBtdXN0IHN1cHBvcnQKK3RoZSBtbWFwKCkgc3lzdGVtIGNhbGwgdG8gZW5hYmxlIHVzZXIgc3BhY2UgdG8gYWNjZXNzIHRoZSBkYXRhLiAgSW4gbWFueQorVjRMMiBkcml2ZXJzLCB0aGUgb2Z0ZW4tY29tcGxleCBtbWFwKCkgaW1wbGVtZW50YXRpb24gc2ltcGxpZmllcyB0byBhCitzaW5nbGUgY2FsbCB0bzoKKworICAgIGludCB2aWRlb2J1Zl9tbWFwX21hcHBlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworRXZlcnl0aGluZyBlbHNlIGlzIGhhbmRsZWQgYnkgdGhlIHZpZGVvYnVmIGNvZGUuCisKK1RoZSByZWxlYXNlKCkgZnVuY3Rpb24gcmVxdWlyZXMgdHdvIHNlcGFyYXRlIHZpZGVvYnVmIGNhbGxzOgorCisgICAgdm9pZCB2aWRlb2J1Zl9zdG9wKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworCitUaGUgY2FsbCB0byB2aWRlb2J1Zl9zdG9wKCkgdGVybWluYXRlcyBhbnkgSS9PIGluIHByb2dyZXNzIC0gdGhvdWdoIGl0IGlzCitzdGlsbCB1cCB0byB0aGUgZHJpdmVyIHRvIHN0b3AgdGhlIGNhcHR1cmUgZW5naW5lLiAgVGhlIGNhbGwgdG8KK3ZpZGVvYnVmX21tYXBfZnJlZSgpIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHVubWFwcGVkOyBpZgorc28sIHRoZXkgd2lsbCBhbGwgYmUgcGFzc2VkIHRvIHRoZSBidWZfcmVsZWFzZSgpIGNhbGxiYWNrLiAgSWYgYnVmZmVycworcmVtYWluIG1hcHBlZCwgdmlkZW9idWZfbW1hcF9mcmVlKCkgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluc3RlYWQuICBUaGUKK3B1cnBvc2UgaXMgY2xlYXJseSB0byBjYXVzZSB0aGUgY2xvc2luZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGZhaWwgaWYKK2J1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZCwgYnV0IGV2ZXJ5IGRyaXZlciBpbiB0aGUgMi42LjMyIGtlcm5lbCBjaGVlcmZ1bGx5CitpZ25vcmVzIGl0cyByZXR1cm4gdmFsdWUuCisKK2lvY3RsKCkgb3BlcmF0aW9ucworCitUaGUgVjRMMiBBUEkgaW5jbHVkZXMgYSB2ZXJ5IGxvbmcgbGlzdCBvZiBkcml2ZXIgY2FsbGJhY2tzIHRvIHJlc3BvbmQgdG8KK3RoZSBtYW55IGlvY3RsKCkgY29tbWFuZHMgbWFkZSBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS4gIEEgbnVtYmVyIG9mIHRoZXNlCistIHRob3NlIGFzc29jaWF0ZWQgd2l0aCBzdHJlYW1pbmcgSS9PIC0gdHVybiBhbG1vc3QgZGlyZWN0bHkgaW50byB2aWRlb2J1ZgorY2FsbHMuICBUaGUgcmVsZXZhbnQgaGVscGVyIGZ1bmN0aW9ucyBhcmU6CisKKyAgICBpbnQgdmlkZW9idWZfcmVxYnVmcyhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSk7CisgICAgaW50IHZpZGVvYnVmX3F1ZXJ5YnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKKyAgICBpbnQgdmlkZW9idWZfcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7CisgICAgaW50IHZpZGVvYnVmX2RxYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiLAorCQkgICAgICAgaW50IG5vbmJsb2NraW5nKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb24oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb2ZmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX2NnbWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmLAorCQkJaW50IGNvdW50KTsKKworU28sIGZvciBleGFtcGxlLCBhIFZJRElPQ19SRVFCVUZTIGNhbGwgdHVybnMgaW50byBhIGNhbGwgdG8gdGhlIGRyaXZlcidzCit2aWRpb2NfcmVxYnVmcygpIGNhbGxiYWNrIHdoaWNoLCBpbiB0dXJuLCB1c3VhbGx5IG9ubHkgbmVlZHMgdG8gbG9jYXRlIHRoZQorcHJvcGVyIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBwb2ludGVyIGFuZCBwYXNzIGl0IHRvIHZpZGVvYnVmX3JlcWJ1ZnMoKS4KK1RoZXNlIHN1cHBvcnQgZnVuY3Rpb25zIGNhbiByZXBsYWNlIGEgZ3JlYXQgZGVhbCBvZiBidWZmZXIgbWFuYWdlbWVudAorYm9pbGVycGxhdGUgaW4gYSBsb3Qgb2YgVjRMMiBkcml2ZXJzLgorCitUaGUgdmlkaW9jX3N0cmVhbW9uKCkgYW5kIHZpZGlvY19zdHJlYW1vZmYoKSBmdW5jdGlvbnMgd2lsbCBiZSBhIGJpdCBtb3JlCitjb21wbGV4LCBvZiBjb3Vyc2UsIHNpbmNlIHRoZXkgd2lsbCBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIHN0YXJ0aW5nIGFuZAorc3RvcHBpbmcgdGhlIGNhcHR1cmUgZW5naW5lLiAgdmlkZW9idWZfY2dtYnVmKCksIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIncwordmlkaW9jZ21idWYoKSBmdW5jdGlvbiwgb25seSBleGlzdHMgaWYgdGhlIFY0TDEgY29tcGF0aWJpbGl0eSBtb2R1bGUgaGFzCitiZWVuIHNlbGVjdGVkIHdpdGggQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFULCBzbyBpdHMgdXNlIG11c3QgYmUgc3Vycm91bmRlZAord2l0aCAjaWZkZWYgZGlyZWN0aXZlcy4KKworQnVmZmVyIGFsbG9jYXRpb24KKworVGh1cyBmYXIsIHdlIGhhdmUgdGFsa2VkIGFib3V0IGJ1ZmZlcnMsIGJ1dCBoYXZlIG5vdCBsb29rZWQgYXQgaG93IHRoZXkgYXJlCithbGxvY2F0ZWQuICBUaGUgc2NhdHRlci9nYXRoZXIgY2FzZSBpcyB0aGUgbW9zdCBjb21wbGV4IG9uIHRoaXMgZnJvbnQuICBGb3IKK2FsbG9jYXRpb24sIHRoZSBkcml2ZXIgY2FuIGxlYXZlIGJ1ZmZlciBhbGxvY2F0aW9uIGVudGlyZWx5IHVwIHRvIHRoZQordmlkZW9idWYgbGF5ZXI7IGluIHRoaXMgY2FzZSwgYnVmZmVycyB3aWxsIGJlIGFsbG9jYXRlZCBhcyBhbm9ueW1vdXMKK3VzZXItc3BhY2UgcGFnZXMgYW5kIHdpbGwgYmUgdmVyeSBzY2F0dGVyZWQgaW5kZWVkLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGlzCit1c2luZyB1c2VyLXNwYWNlIGJ1ZmZlcnMsIG5vIGFsbG9jYXRpb24gaXMgbmVlZGVkOyB0aGUgdmlkZW9idWYgbGF5ZXIgd2lsbAordGFrZSBjYXJlIG9mIGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMoKSBhbmQgZmlsbGluZyBpbiB0aGUgc2NhdHRlcmxpc3QgYXJyYXkuCisKK0lmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gaXRzIG93biBtZW1vcnkgYWxsb2NhdGlvbiwgaXQgc2hvdWxkIGJlIGRvbmUgaW4KK3RoZSB2aWRpb2NfcmVxYnVmcygpIGZ1bmN0aW9uLCAqYWZ0ZXIqIGNhbGxpbmcgdmlkZW9idWZfcmVxYnVmcygpLiAgVGhlCitmaXJzdCBzdGVwIGlzIGEgY2FsbCB0bzoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKnZpZGVvYnVmX3RvX2RtYShzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCitUaGUgcmV0dXJuZWQgdmlkZW9idWZfZG1hYnVmIHN0cnVjdHVyZSAoZGVmaW5lZCBpbgorPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPikgaW5jbHVkZXMgYSBjb3VwbGUgb2YgcmVsZXZhbnQgZmllbGRzOgorCisgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAqc2dsaXN0OworICAgIGludCAgICAgICAgICAgICAgICAgc2dsZW47CisKK1RoZSBkcml2ZXIgbXVzdCBhbGxvY2F0ZSBhbiBhcHByb3ByaWF0ZWx5LXNpemVkIHNjYXR0ZXJsaXN0IGFycmF5IGFuZAorcG9wdWxhdGUgaXQgd2l0aCBwb2ludGVycyB0byB0aGUgcGllY2VzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyOyBzZ2xlbgorc2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKworRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZCBuZWVkIG5vdCAoYW5kIGNhbm5vdCkgY29uY2VybiB0aGVtc2VsdmVzCit3aXRoIGJ1ZmZlciBhbGxvY2F0aW9uIGF0IGFsbDsgdmlkZW9idWYgd2lsbCBoYW5kbGUgdGhvc2UgZGV0YWlscy4gIFRoZQorc2FtZSBpcyBub3JtYWxseSB0cnVlIG9mIGNvbnRpZ3VvdXMtRE1BIGRyaXZlcnMgYXMgd2VsbDsgdmlkZW9idWYgd2lsbAorYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgKHdpdGggZG1hX2FsbG9jX2NvaGVyZW50KCkpIHdoZW4gaXQgc2VlcyBmaXQuICBUaGF0CittZWFucyB0aGF0IHRoZXNlIGRyaXZlcnMgbWF5IGJlIHRyeWluZyB0byBkbyBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIGF0IGFueQordGltZSwgYW4gb3BlcmF0aW9uIHdoaWNoIGlzIG5vdCBhbHdheXMgZ3VhcmFudGVlZCB0byB3b3JrLiAgU29tZSBkcml2ZXJzCitwbGF5IHRyaWNrcyBieSBhbGxvY2F0aW5nIERNQSBzcGFjZSBhdCBzeXN0ZW0gYm9vdCB0aW1lOyB2aWRlb2J1ZiBkb2VzIG5vdAorY3VycmVudGx5IHBsYXkgd2VsbCB3aXRoIHRob3NlIGRyaXZlcnMuCisKK0FzIG9mIDIuNi4zMSwgY29udGlndW91cy1ETUEgZHJpdmVycyBjYW4gd29yayB3aXRoIGEgdXNlci1zdXBwbGllZCBidWZmZXIsCithcyBsb25nIGFzIHRoYXQgYnVmZmVyIGlzIHBoeXNpY2FsbHkgY29udGlndW91cy4gIE5vcm1hbCB1c2VyLXNwYWNlCithbGxvY2F0aW9ucyB3aWxsIG5vdCBtZWV0IHRoYXQgY3JpdGVyaW9uLCBidXQgYnVmZmVycyBvYnRhaW5lZCBmcm9tIG90aGVyCitrZXJuZWwgZHJpdmVycywgb3IgdGhvc2UgY29udGFpbmVkIHdpdGhpbiBodWdlIHBhZ2VzLCB3aWxsIHdvcmsgd2l0aCB0aGVzZQorZHJpdmVycy4KKworRmlsbGluZyB0aGUgYnVmZmVycworCitUaGUgZmluYWwgcGFydCBvZiBhIHZpZGVvYnVmIGltcGxlbWVudGF0aW9uIGhhcyBubyBkaXJlY3QgY2FsbGJhY2sgLSBpdCdzCit0aGUgcG9ydGlvbiBvZiB0aGUgY29kZSB3aGljaCBhY3R1YWxseSBwdXRzIGZyYW1lIGRhdGEgaW50byB0aGUgYnVmZmVycywKK3VzdWFsbHkgaW4gcmVzcG9uc2UgdG8gaW50ZXJydXB0cyBmcm9tIHRoZSBkZXZpY2UuICBGb3IgYWxsIHR5cGVzIG9mCitkcml2ZXJzLCB0aGlzIHByb2Nlc3Mgd29ya3MgYXBwcm94aW1hdGVseSBhcyBmb2xsb3dzOgorCisgLSBPYnRhaW4gdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlciBhbmQgbWFrZSBzdXJlIHRoYXQgc29tZWJvZHkgaXMgYWN0dWFsbHkKKyAgIHdhaXRpbmcgZm9yIGl0LgorCisgLSBHZXQgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYW5kIHB1dCB2aWRlbyBkYXRhIHRoZXJlLgorCisgLSBNYXJrIHRoZSBidWZmZXIgYXMgZG9uZSBhbmQgd2FrZSB1cCB0aGUgcHJvY2VzcyB3YWl0aW5nIGZvciBpdC4KKworU3RlcCAoMSkgYWJvdmUgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBkcml2ZXItbWFuYWdlZCBsaXN0X2hlYWQgc3RydWN0dXJlCistIHRoZSBvbmUgd2hpY2ggaXMgZmlsbGVkIGluIHRoZSBidWZfcXVldWUoKSBjYWxsYmFjay4gIEJlY2F1c2Ugc3RhcnRpbmcKK3RoZSBlbmdpbmUgYW5kIGVucXVldWVpbmcgYnVmZmVycyBhcmUgZG9uZSBpbiBzZXBhcmF0ZSBzdGVwcywgaXQncyBwb3NzaWJsZQorZm9yIHRoZSBlbmdpbmUgdG8gYmUgcnVubmluZyB3aXRob3V0IGFueSBidWZmZXJzIGF2YWlsYWJsZSAtIGluIHRoZQordm1hbGxvYygpIGNhc2UgZXNwZWNpYWxseS4gIFNvIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGUgbGlzdAordG8gYmUgZW1wdHkuICBJdCBpcyBlcXVhbGx5IHBvc3NpYmxlIHRoYXQgbm9ib2R5IGlzIHlldCBpbnRlcmVzdGVkIGluIHRoZQorYnVmZmVyOyB0aGUgZHJpdmVyIHNob3VsZCBub3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb3IgZmlsbCBpdCB1bnRpbCBhCitwcm9jZXNzIGlzIHdhaXRpbmcgb24gaXQuICBUaGF0IHRlc3QgY2FuIGJlIGRvbmUgYnkgZXhhbWluaW5nIHRoZSBidWZmZXIncworZG9uZSBmaWVsZCAoYSB3YWl0X3F1ZXVlX2hlYWRfdCBzdHJ1Y3R1cmUpIHdpdGggd2FpdHF1ZXVlX2FjdGl2ZSgpLgorCitBIGJ1ZmZlcidzIHN0YXRlIHNob3VsZCBiZSBzZXQgdG8gVklERU9CVUZfQUNUSVZFIGJlZm9yZSBiZWluZyBtYXBwZWQgZm9yCitETUE7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZSB2aWRlb2J1ZiBsYXllciB3aWxsIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgd2l0aAoraXQgd2hpbGUgdGhlIGRldmljZSBpcyB0cmFuc2ZlcnJpbmcgZGF0YS4KKworRm9yIHNjYXR0ZXIvZ2F0aGVyIGRyaXZlcnMsIHRoZSBuZWVkZWQgbWVtb3J5IHBvaW50ZXJzIHdpbGwgYmUgZm91bmQgaW4gdGhlCitzY2F0dGVybGlzdCBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGFib3ZlLiAgRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZAorY2FuIGdldCBhIG1lbW9yeSBwb2ludGVyIHdpdGg6CisKKyAgICB2b2lkICp2aWRlb2J1Zl90b192bWFsbG9jKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK0ZvciBjb250aWd1b3VzIERNQSBkcml2ZXJzLCB0aGUgZnVuY3Rpb24gdG8gdXNlIGlzOgorCisgICAgZG1hX2FkZHJfdCB2aWRlb2J1Zl90b19kbWFfY29udGlnKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK1RoZSBjb250aWd1b3VzIERNQSBBUEkgZ29lcyBvdXQgb2YgaXRzIHdheSB0byBoaWRlIHRoZSBrZXJuZWwtc3BhY2UgYWRkcmVzcworb2YgdGhlIERNQSBidWZmZXIgZnJvbSBkcml2ZXJzLgorCitUaGUgZmluYWwgc3RlcCBpcyB0byBzZXQgdGhlIHNpemUgZmllbGQgb2YgdGhlIHJlbGV2YW50IHZpZGVvYnVmX2J1ZmZlcgorc3RydWN0dXJlIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FwdHVyZWQgaW1hZ2UsIHNldCBzdGF0ZSB0bworVklERU9CVUZfRE9ORSwgdGhlbiBjYWxsIHdha2VfdXAoKSBvbiB0aGUgZG9uZSBxdWV1ZS4gIEF0IHRoaXMgcG9pbnQsIHRoZQorYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB2aWRlb2J1ZiBsYXllciBhbmQgdGhlIGRyaXZlciBzaG91bGQgbm90IHRvdWNoIGl0CithZ2Fpbi4KKworRGV2ZWxvcGVycyB3aG8gYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBpbmZvcm1hdGlvbiBjYW4gZ28gaW50byB0aGUgcmVsZXZhbnQKK2hlYWRlciBmaWxlczsgdGhlcmUgYXJlIGEgZmV3IGxvdy1sZXZlbCBmdW5jdGlvbnMgZGVjbGFyZWQgdGhlcmUgd2hpY2ggaGF2ZQorbm90IGJlZW4gdGFsa2VkIGFib3V0IGhlcmUuICBBbHNvIHdvcnRod2hpbGUgaXMgdGhlIHZpdmkgZHJpdmVyCisoZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMpLCB3aGljaCBpcyBtYWludGFpbmVkIGFzIGFuIGV4YW1wbGUgb2YgaG93IFY0TDIKK2RyaXZlcnMgc2hvdWxkIGJlIHdyaXR0ZW4uICBWaXZpIG9ubHkgdXNlcyB0aGUgdm1hbGxvYygpIEFQSSwgYnV0IGl0J3MgZ29vZAorZW5vdWdoIHRvIGdldCBzdGFydGVkIHdpdGguICBOb3RlIGFsc28gdGhhdCBhbGwgb2YgdGhlc2UgY2FsbHMgYXJlIGV4cG9ydGVkCitHUEwtb25seSwgc28gdGhleSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gbm9uLUdQTCBrZXJuZWwgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMjlhNmZmOC4uN2ZiYmFmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTE2NiwxOSArMTY2LDEzIEBACiAKICAgbnVtYT1ub2FjcGkgICBEb24ndCBwYXJzZSB0aGUgU1JBVCB0YWJsZSBmb3IgTlVNQSBzZXR1cAogCi0gIG51bWE9ZmFrZT1DTURMSU5FCi0JCUlmIGEgbnVtYmVyLCBmYWtlcyBDTURMSU5FIG5vZGVzIGFuZCBpZ25vcmVzIE5VTUEgc2V0dXAgb2YgdGhlCi0JCWFjdHVhbCBtYWNoaW5lLiAgT3RoZXJ3aXNlLCBzeXN0ZW0gbWVtb3J5IGlzIGNvbmZpZ3VyZWQKLQkJZGVwZW5kaW5nIG9uIHRoZSBzaXplcyBhbmQgY29lZmZpY2llbnRzIGxpc3RlZC4gIEZvciBleGFtcGxlOgotCQkJbnVtYT1mYWtlPTIqNTEyLDEwMjQsNCoyNTYsKjEyOAotCQlnaXZlcyB0d28gNTEyTSBub2RlcywgYSAxMDI0TSBub2RlLCBmb3VyIDI1Nk0gbm9kZXMsIGFuZCB0aGUKLQkJcmVzdCBzcGxpdCBpbnRvIDEyOE0gY2h1bmtzLiAgSWYgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIENNRExJTkUKLQkJaXMgYSAqLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyBkaXZpZGVkIHVwIGVxdWFsbHkgYW1vbmcgaXRzCi0JCWNvZWZmaWNpZW50OgotCQkJbnVtYT1mYWtlPTIqNTEyLDIqCi0JCWdpdmVzIHR3byA1MTJNIG5vZGVzIGFuZCB0aGUgcmVzdCBzcGxpdCBpbnRvIHR3byBub2Rlcy4KLQkJT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gaXMgYWxsb2NhdGVkIHRvIGFuCi0JCWFkZGl0aW9uYWwgbm9kZS4KKyAgbnVtYT1mYWtlPTxzaXplPltNR10KKwkJSWYgZ2l2ZW4gYXMgYSBtZW1vcnkgdW5pdCwgZmlsbHMgYWxsIHN5c3RlbSBSQU0gd2l0aCBub2RlcyBvZgorCQlzaXplIGludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMuCisKKyAgbnVtYT1mYWtlPTxOPgorCQlJZiBnaXZlbiBhcyBhbiBpbnRlZ2VyLCBmaWxscyBhbGwgc3lzdGVtIFJBTSB3aXRoIE4gZmFrZSBub2RlcworCQlpbnRlcmxlYXZlZCBvdmVyIHBoeXNpY2FsIG5vZGVzLgogCiBBQ1BJCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjUzM2ZjNC4uYzY1OTFiYyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIyMSw2ICsyMjEsNyBAQAogCiBBQ0VSIEFTUElSRSBPTkUgVEVNUEVSQVRVUkUgQU5EIEZBTiBEUklWRVIKIE06CVBldGVyIEZldWVyZXIgPHBldGVyQHBpaWUubmV0PgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9waWllLm5ldC8/c2VjdGlvbj1hY2VyaGRmCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKQEAgLTIyOCw2ICsyMjksNyBAQAogQUNFUiBXTUkgTEFQVE9QIEVYVFJBUwogTToJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KIEw6CWFjZXJhY3BpQGdvb2dsZWdyb3Vwcy5jb20gKHN1YnNjcmliZXJzLW9ubHkpCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FjZXJhY3BpCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC0yODgsNyArMjkwLDcgQEAKIAogQUNQSSBXTUkgRFJJVkVSCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC05NjgsNiArOTcwLDcgQEAKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBNOglLYXJvbCBLb3ppbW9yIDxzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC05ODEsNiArOTg0LDcgQEAKIEFTVVMgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwpAQCAtMTQ3Myw2ICsxNDc3LDcgQEAKIENNUEMgQUNQSSBEUklWRVIKIE06CVRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KIE06CURhbmllbCBPbGl2ZWlyYSBOYXNjaW1lbnRvIDxkb25Ac3lzdC5jb20uYnI+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKIApAQCAtMTUxNiw2ICsxNTIxLDcgQEAKIAogQ09NUEFMIExBUFRPUCBTVVBQT1JUCiBNOglDZXphcnkgSmFja2lld2ljeiA8Y2V6YXJ5LmphY2tpZXdpY3pAZ21haWwuY29tPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwogCkBAIC0xNzQ2LDYgKzE3NTIsNyBAQAogCiBERUxMIExBUFRPUCBEUklWRVIKIE06CU1hdHRoZXcgR2FycmV0dCA8bWpnNTlAc3JjZi51Y2FtLm9yZz4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCiAKQEAgLTIwMjgsNiArMjAzNSw3IEBACiBFRUVQQyBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIEw6CWFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9hY3BpNGFzdXMuc2YubmV0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMjE0MSw2ICsyMTQ5LDE3IEBACiBGOglEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8KIEY6CWxpYi9mYXVsdC1pbmplY3QuYwogCitGQ09FIFNVQlNZU1RFTSAobGliZmMsIGxpYmZjb2UsIGZjb2UpCitNOglSb2JlcnQgTG92ZSA8cm9iZXJ0LncubG92ZUBpbnRlbC5jb20+CitMOglkZXZlbEBvcGVuLWZjb2Uub3JnCitXOgl3d3cuT3Blbi1GQ29FLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvbGliZmMvCitGOglkcml2ZXJzL3Njc2kvZmNvZS8KK0Y6CWluY2x1ZGUvc2NzaS9mYy8KK0Y6CWluY2x1ZGUvc2NzaS9saWJmYy5oCitGOglpbmNsdWRlL3Njc2kvbGliZmNvZS5oCisKIEZJTEUgTE9DS0lORyAoZmxvY2soKSBhbmQgZmNudGwoKS9sb2NrZigpKQogTToJTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgogTDoJbGludXgtZnNkZXZlbEB2Z2VyLmtlcm5lbC5vcmcKQEAgLTIyOTUsNyArMjMxNCw3IEBACiAKIEZVSklUU1UgTEFQVE9QIEVYVFJBUwogTToJSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCiAKQEAgLTIzNzIsNiArMjM5MSwxMiBAQAogRjoJZHJpdmVycy9pc2RuL2dpZ2FzZXQvCiBGOglpbmNsdWRlL2xpbnV4L2dpZ2FzZXRfZGV2LmgKIAorR1JFVEggMTAvMTAwLzFHIEV0aGVybmV0IE1BQyBkZXZpY2UgZHJpdmVyCitNOglLcmlzdG9mZmVyIEdsZW1ibyA8a3Jpc3RvZmZlckBnYWlzbGVyLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L2dyZXRoKgorCiBIQVJEIERSSVZFIEFDVElWRSBQUk9URUNUSU9OIFNZU1RFTSAoSERBUFMpIERSSVZFUgogTToJRnJhbmsgU2VpZGVsIDxmcmFua0BmLXNlaWRlbC5kZT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTIzOTMsNiArMjQxOCwxOCBAQAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL2NoYXIvaHZjXyoKIAorVklSVElPIENPTlNPTEUgRFJJVkVSCitNOglBbWl0IFNoYWggPGFtaXQuc2hhaEByZWRoYXQuY29tPgorTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisKK2lTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgorTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKKwogR1NQQ0EgRklORVBJWCBTVUJEUklWRVIKIE06CUZyYW5rIFphZ28gPGZyYW5rQHphZ28ubmV0PgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0yNTYxLDYgKzI1OTgsNyBAQAogCiBIUCBDT01QQVEgVEMxMTAwIFRBQkxFVCBXTUkgRVhUUkFTIERSSVZFUgogTToJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYwogCkBAIC0yNzcxLDcgKzI4MDksNyBAQAogCiBJTlRFTCBNRU5MT1cgVEhFUk1BTCBEUklWRVIKIE06CVN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWVubG93LmMKQEAgLTM0OTYsOSArMzUzNCw5IEBACiBGOglpbmNsdWRlL2xpbnV4L212NjQzeHguaAogCiBNQVJWRUxMIE1XTDhLIFdJUkVMRVNTIERSSVZFUgotTToJTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+CitNOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCiAKIE1BUlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSCkBAIC0zNjM3LDYgKzM2NzUsNyBAQAogCiBNU0kgTEFQVE9QIFNVUFBPUlQKIE06CUxlbm5hcnQgUG9ldHRlcmluZyA8bXp4cmVhcnlAMHBvaW50ZXIuZGU+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cHM6Ly90YW5nby4wcG9pbnRlci5kZS9tYWlsbWFuL2xpc3RpbmZvL3MyNzAtbGludXgKIFc6CWh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3RjaGliby5odG1sCiBTOglNYWludGFpbmVkCkBAIC0zNjQ0LDYgKzM2ODMsNyBAQAogCiBNU0kgV01JIFNVUFBPUlQKIE06CUFuaXNzZSBBc3RpZXIgPGFuaXNzZUBhc3RpZXIuZXU+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKIApAQCAtNDA5Niw2ICs0MTM2LDcgQEAKIAogUEFOQVNPTklDIExBUFRPUCBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCiAKQEAgLTQ0NDUsNiArNDQ4NiwxMyBAQAogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0xJQ0VOU0UucWxhM3h4eAogRjoJZHJpdmVycy9uZXQvcWxhM3h4eC4qCiAKK1FMT0dJQyBRTENOSUMgKDEvMTApR2IgRVRIRVJORVQgRFJJVkVSCitNOglBbWl0IEt1bWFyIFNhbGVjaGEgPGFtaXQuc2FsZWNoYUBxbG9naWMuY29tPgorTToJbGludXgtZHJpdmVyQHFsb2dpYy5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQvcWxjbmljLworCiBRTE9HSUMgUUxHRSAxMEdiIEVUSEVSTkVUIERSSVZFUgogTToJUm9uIE1lcmNlciA8cm9uLm1lcmNlckBxbG9naWMuY29tPgogTToJbGludXgtZHJpdmVyQHFsb2dpYy5jb20KQEAgLTQ1MDksNyArNDU1Nyw3IEBACiBSQ1VUT1JUVVJFIE1PRFVMRQogTToJSm9zaCBUcmlwbGV0dCA8am9zaEBmcmVlZGVza3RvcC5vcmc+CiBNOgkiUGF1bCBFLiBNY0tlbm5leSIgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAogRjoJa2VybmVsL3JjdXRvcnR1cmUuYwogCkBAIC00NTM0LDExICs0NTgyLDEyIEBACiBNOgkiUGF1bCBFLiBNY0tlbm5leSIgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogVzoJaHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9yY2xvY2svCiBTOglTdXBwb3J0ZWQKLUY6CURvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKLUY6CURvY3VtZW50YXRpb24vUkNVL3JjdXJlZi50eHQKLUY6CWluY2x1ZGUvbGludXgvcmN1cGRhdGUuaAotRjoJaW5jbHVkZS9saW51eC9zcmN1LmgKLUY6CWtlcm5lbC9yY3VwZGF0ZS5jCitGOglEb2N1bWVudGF0aW9uL1JDVS8KK0Y6CWluY2x1ZGUvbGludXgvcmN1KgorRjoJaW5jbHVkZS9saW51eC9zcmN1KgorRjoJa2VybmVsL3JjdSoKK0Y6CWtlcm5lbC9zcmN1KgorWDoJa2VybmVsL3JjdXRvcnR1cmUuYwogCiBSRUFMIFRJTUUgQ0xPQ0sgRFJJVkVSCiBNOglQYXVsIEdvcnRtYWtlciA8cF9nb3J0bWFrZXJAeWFob28uY29tPgpAQCAtNDY3Niw2ICs0NzI1LDEzIEBACiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvLyo3MTQ2KgogRjoJaW5jbHVkZS9tZWRpYS8qNzE0NioKIAorVExHMjMwMCBWSURFTzRMSU5VWC0yIERSSVZFUgorTToJSHVhbmcgU2hpamllIDxzaGlqaWU4QGdtYWlsLmNvbT4KK006CUthbmcgWW9uZyA8a2FuZ3lvbmdAdGVsZWdlbnQuY29tPgorTToJWmhhbmcgWGlhb2JpbmcgPHhiemhhbmdAdGVsZWdlbnQuY29tPgorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAKKwogU0MxMjAwIFdEVCBEUklWRVIKIE06CVp3YW5lIE13YWlrYW1ibyA8endhbmVAYXJtLmxpbnV4Lm9yZy51az4KIFM6CU1haW50YWluZWQKQEAgLTQ4MzEsNiArNDg4Nyw4IEBACiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKIE06CVNhdGh5YSBQZXJsYSA8c2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbT4KIE06CVN1YmJ1IFNlZXRoYXJhbWFuIDxzdWJidXNAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXJ2ZXNod2FyIEJhbmRpIDxzYXJ2ZXNod2FyYkBzZXJ2ZXJlbmdpbmVzLmNvbT4KK006CUFqaXQgS2hhcGFyZGUgPGFqaXRrQHNlcnZlcmVuZ2luZXMuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQogUzoJU3VwcG9ydGVkCkBAIC01MDM0LDcgKzUwOTIsNyBAQAogCiBTT05ZIFZBSU8gQ09OVFJPTCBERVZJQ0UgRFJJVkVSCiBNOglNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAbGludXguaXQ+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXguaXQvfm1hbGF0dGlhL3dpa2kvaW5kZXgucGhwL1NvbnlfZHJpdmVycwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3NvbnktbGFwdG9wLnR4dApAQCAtNTI0MCw2ICs1Mjk4LDcgQEAKIFRISU5LUEFEIEFDUEkgRVhUUkFTIERSSVZFUgogTToJSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoIDxpYm0tYWNwaUBobWguZW5nLmJyPgogTDoJaWJtLWFjcGktZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2libS1hY3BpLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL3RoaW5rd2lraS5vcmcvd2lraS9JYm0tYWNwaQogVDoJZ2l0IGdpdDovL3JlcG8ub3IuY3ovbGludXgtMi42L2xpbnV4LWFjcGktMi42L2libS1hY3BpLTIuNi5naXQKQEAgLTUyOTMsMTAgKzUzNTIsMTIgQEAKIAogVE9QU1RBUiBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jCiAKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJT3JwaGFuCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwogCkBAIC01Nzk2LDYgKzU4NTcsMTUgQEAKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKIEY6CWZzL2ZhdC8KIAorVklSVElPIEhPU1QgKFZIT1NUKQorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgorTDoJa3ZtQHZnZXIua2VybmVsLm9yZworTDoJdmlydHVhbGl6YXRpb25AbGlzdHMub3NkbC5vcmcKK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdmhvc3QvCitGOglpbmNsdWRlL2xpbnV4L3Zob3N0LmgKKwogVklBIFJISU5FIE5FVFdPUksgRFJJVkVSCiBNOglSb2dlciBMdWV0aGkgPHJsQGhlbGxnYXRlLmNoPgogUzoJTWFpbnRhaW5lZApAQCAtNTk1NCw3ICs2MDI0LDcgQEAKIEY6CWRyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwogCiBXTDEyNTEgV0lSRUxFU1MgRFJJVkVSCi1NOglLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KK006CUthbGxlIFZhbG8gPGthbGxlLnZhbG9AaWtpLmZpPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy10ZXN0aW5nLmdpdApAQCAtNjAyNCw2ICs2MDk0LDEzIEBACiBGOglEb2N1bWVudGF0aW9uL3g4Ni8KIEY6CWFyY2gveDg2LwogCitYODYgUExBVEZPUk0gRFJJVkVSUworTToJTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCitUOiAgICAgIGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWpnNTkvcGxhdGZvcm0tZHJpdmVycy14ODYuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgorCiBYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKIE06CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB4ZW5zb3VyY2UuY29tPgogTToJQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDlkMDU1YjQuLjIxNWU0NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTMsMTEgKzMsOSBAQAogIwogCiBjb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyIKIAlkZXBlbmRzIG9uIFBST0ZJTElORwogCWRlcGVuZHMgb24gSEFWRV9PUFJPRklMRQotCWRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUCi0Jc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgUklOR19CVUZGRVIKIAlzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUAogCWhlbHAKQEAgLTE3LDIwICsxNSw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBPUFJPRklMRV9JQlMKLQlib29sICJPUHJvZmlsZSBBTUQgSUJTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBPUFJPRklMRSAmJiBTTVAgJiYgWDg2Ci0JaGVscAotICAgICAgICAgIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHByb2ZpbGluZwotICAgICAgICAgIHRlY2huaXF1ZSB0aGF0IHByb3ZpZGVzIHJpY2gsIHByZWNpc2UgcHJvZ3JhbSBwZXJmb3JtYW5jZQotICAgICAgICAgIGluZm9ybWF0aW9uLiBJQlMgaXMgaW50cm9kdWNlZCBieSBBTUQgRmFtaWx5MTBoIHByb2Nlc3NvcnMKLSAgICAgICAgICAoQU1EIE9wdGVyb24gUXVhZC1Db3JlIHByb2Nlc3NvciAiQmFyY2Vsb25hIikgdG8gb3ZlcmNvbWUKLSAgICAgICAgICB0aGUgbGltaXRhdGlvbnMgb2YgY29udmVudGlvbmFsIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAgICAgICAgICBzYW1wbGluZy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIE9QUk9GSUxFX0VWRU5UX01VTFRJUExFWAogCWJvb2wgIk9Qcm9maWxlIG11bHRpcGxleGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlZmF1bHQgbgpAQCAtMTIxLDYgKzEwNSwxNCBAQAogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJYm9vbAogCitjb25maWcgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgc3ltYm9sIHNob3VsZCBiZSBzZWxlY3RlZCBieSBhbiBhcmNoaXRlY3VyZSBpZiBpdCBzdXBwb3J0cworCSAgdGhlIEFQSSBuZWVkZWQgdG8gYWNjZXNzIHJlZ2lzdGVycyBhbmQgc3RhY2sgZW50cmllcyBmcm9tIHB0X3JlZ3MsCisJICBkZWNsYXJlZCBpbiBhc20vcHRyYWNlLmgKKwkgIEZvciBleGFtcGxlIHRoZSBrcHJvYmVzLWJhc2VkIGV2ZW50IHRyYWNlciBuZWVkcyB0aGlzIEFQSS4KKwogY29uZmlnIEhBVkVfQ0xLCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCA2YWQzZWE2Li5iOWUzZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9sb2NhbC5oCkBAIC05OCwyMSArOTgsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCSgobCktPmEuY291bnRlcis9KGkpKQogI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPmEuY291bnRlci09KGkpKQogCi0vKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKLSAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQotICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkKLQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0KLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKLQogI2VuZGlmIC8qIF9BTFBIQV9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDNmMGM1OWY2Li43MWEyNDMyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzI5LDcgKzMyOSw3IEBACiAgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KICAqLwogZXh0ZXJuIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKaW5kZXggYTkxYmEyOC4uYzlhYjk0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogI2RlZmluZSBNQgkJCSgxMDI0KktCKQogI2RlZmluZSBHQgkJCSgxMDI0Kk1CKQogCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKQEAgLTE4NCw3ICsxODQsNyBAQAogCQl9CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KICN1bmRlZiBLQgogI3VuZGVmIE1CCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAxODRhNmJkLi4zYjE4MTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTEyLDYgKzEyLDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgUlRDX0xJQgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgorCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICghQ1BVXzMydjZLKQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfS1BST0JFUyBpZiAoIVhJUF9LRVJORUwpCkBAIC0yMCw2ICsyMSw4IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAJaGVscAogCSAgVGhlIEFSTSBzZXJpZXMgaXMgYSBsaW5lIG9mIGxvdy1wb3dlci1jb25zdW1wdGlvbiBSSVNDIGNoaXAgZGVzaWducwogCSAgbGljZW5zZWQgYnkgQVJNIEx0ZCBhbmQgdGFyZ2V0ZWQgYXQgZW1iZWRkZWQgYXBwbGljYXRpb25zIGFuZApAQCAtNTIsNiArNTUsOSBAQAogCWJvb2wKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKIAorY29uZmlnIEhBVkVfUFJPQ19DUFUKKwlib29sCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTE2MSw2ICsxNjcsMTEgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBBUk1fTDFfQ0FDSEVfU0hJRlRfNgorCWJvb2wKKwloZWxwCisJICBTZXR0aW5nIEFSTSBMMSBjYWNoZSBsaW5lIHNpemUgdG8gNjQgQnl0ZXMuCisKIGlmIE9QUk9GSUxFCiAKIGNvbmZpZyBPUFJPRklMRV9BUk1WNgpAQCAtNTUwLDEwICs1NjEsMjAgQEAKIAkgIDxodHRwOi8vd3d3Lm51dm90b24uY29tL2hxL2VudS9Qcm9kdWN0QW5kU2FsZXMvUHJvZHVjdExpbmVzLwogCQlDb25zdW1lckVsZWN0cm9uaWNzSUMvQVJNTWljcm9jb250cm9sbGVyL0FSTU1pY3JvY29udHJvbGxlcj4KIAorY29uZmlnIEFSQ0hfTlVDOTNYCisJYm9vbCAiTnV2b3RvbiBOVUM5M1ggQ1BVIgorCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJaGVscAorCSAgU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgTlVDOTNYIE1DVSxUaGUgTlVDOTNYIGlzIGEKKwkgIGxvdy1wb3dlciBhbmQgaGlnaCBwZXJmb3JtYW5jZSBNUEVHLTQvSlBFRyBtdWx0aW1lZGlhIGNvbnRyb2xsZXIgY2hpcC4KKwogY29uZmlnIEFSQ0hfUE5YNDAwOAogCWJvb2wgIlBoaWxpcHMgTmV4cGVyaWEgUE5YNDAwOCBNb2JpbGUiCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUGhpbGlwcyBQTlg0MDA4IG1vYmlsZSBwbGF0Zm9ybS4KIApAQCAtNjM4LDYgKzY1OSw3IEBACiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBIQVZFX0NMSwogCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAloZWxwCiAJICBTYW1zdW5nIFM1UEMxWFggc2VyaWVzIGJhc2VkIHN5c3RlbXMKIApAQCAtNzg1LDYgKzgwNyw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1uczl4eHgvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyIKQEAgLTg2Nyw2ICs4OTEsMTEgQEAKIAlkZXBlbmRzIG9uIENQVV9YU0NBTEUgJiYgIVhTQ0FMRV9QTVVfVElNRVIKIAlkZWZhdWx0IHkKIAorY29uZmlnIENQVV9IQVNfUE1VCisJZGVwZW5kcyBvbiBDUFVfVjYgfHwgQ1BVX1Y3IHx8IFhTQ0FMRV9QTVUKKwlkZWZhdWx0IHkKKwlib29sCisKIGlmICFNTVUKIHNvdXJjZSAiYXJjaC9hcm0vS2NvbmZpZy1ub21tdSIKIGVuZGlmCkBAIC05MjEsNiArOTUwLDE5IEBACiAJICBBQ1RMUiByZWdpc3Rlci4gTm90ZSB0aGF0IHNldHRpbmcgc3BlY2lmaWMgYml0cyBpbiB0aGUgQUNUTFIgcmVnaXN0ZXIKIAkgIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIG5vbi1zZWN1cmUgbW9kZS4KIAorY29uZmlnIFBMMzEwX0VSUkFUQV81ODgzNjkKKwlib29sICJDbGVhbiAmIEludmFsaWRhdGUgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucyBkbyBub3QgaW52YWxpZGF0ZSBjbGVhbiBsaW5lcyIKKwlkZXBlbmRzIG9uIENBQ0hFX0wyWDAgJiYgQVJDSF9PTUFQNAorCWhlbHAKKwkgICBUaGUgUEwzMTAgTDIgY2FjaGUgY29udHJvbGxlciBpbXBsZW1lbnRzIHRocmVlIHR5cGVzIG9mIENsZWFuICYKKwkgICBJbnZhbGlkYXRlIG1haW50ZW5hbmNlIG9wZXJhdGlvbnM6IGJ5IFBoeXNpY2FsIEFkZHJlc3MKKwkgICAob2Zmc2V0IDB4N0YwKSwgYnkgSW5kZXgvV2F5ICgweDdGOCkgYW5kIGJ5IFdheSAoMHg3RkMpLgorCSAgIFRoZXkgYXJlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIHRvIGJlaGF2ZSBhcyB0aGUgZXhlY3V0aW9uIG9mIGEKKwkgICBjbGVhbiBvcGVyYXRpb24gZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYW4gaW52YWxpZGF0ZSBvcGVyYXRpb24sCisJICAgYm90aCBwZXJmb3JtaW5nIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbi4gVGhpcyBmdW5jdGlvbmFsaXR5CisJICAgaXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnRlZCBpbiBQTDMxMCBhcyBjbGVhbiBsaW5lcyBhcmUgbm90CisJICAgaW52YWxpZGF0ZWQgYXMgYSByZXN1bHQgb2YgdGhlc2Ugb3BlcmF0aW9ucy4gTm90ZSB0aGF0IHRoaXMgZXJyYXRhCisJICAgdXNlcyBUZXhhcyBJbnN0cnVtZW50J3Mgc2VjdXJlIG1vbml0b3IgYXBpLgogZW5kbWVudQogCiBzb3VyY2UgImFyY2gvYXJtL2NvbW1vbi9LY29uZmlnIgpAQCAtMTE3MSw2ICsxMjEzLDE0IEBACiAJZGVwZW5kcyBvbiBISUdITUVNCiAJZGVwZW5kcyBvbiAhT1VURVJfQ0FDSEUKIAorY29uZmlnIEhXX1BFUkZfRVZFTlRTCisJYm9vbCAiRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHMiCisJZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBDUFVfSEFTX1BNVSAmJiAoQ1BVX1Y2IHx8IENQVV9WNykKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50cy4gSWYKKwkgIGRpc2FibGVkLCBwZXJmIGV2ZW50cyB3aWxsIHVzZSBzb2Z0d2FyZSBldmVudHMgb25seS4KKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgTEVEUwpAQCAtMTIzMCw2ICsxMjgwLDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBDUFVfQ1AxNV9NTVUKIAlkZWZhdWx0IHkgaWYgIUFSQ0hfRUJTQTExMAorCXNlbGVjdCBIQVZFX1BST0NfQ1BVIGlmIFBST0NfRlMKIAloZWxwCiAJICBBUk0gcHJvY2Vzc29ycyBjYW5ub3QgZmV0Y2gvc3RvcmUgaW5mb3JtYXRpb24gd2hpY2ggaXMgbm90CiAJICBuYXR1cmFsbHkgYWxpZ25lZCBvbiB0aGUgYnVzLCBpLmUuLCBhIDQgYnl0ZSBmZXRjaCBtdXN0IHN0YXJ0IGF0IGFuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDM1NmQ3MDIuLjgxZjU0Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xNzEsNiArMTcxLDcgQEAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9VODUwMCkJCTo9IHV4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQk6PSB2ZXJzYXRpbGUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9XOTBYOTAwKQkJOj0gdzkweDkwMAorbWFjaGluZS0kKENPTkZJR19BUkNIX05VQzkzWCkJCTo9IG51YzkzeAogbWFjaGluZS0kKENPTkZJR19GT09UQlJJREdFKQkJOj0gZm9vdGJyaWRnZQogCiAjIFBsYXRmb3JtIGRpcmVjdG9yeSBuYW1lLiAgVGhpcyBsaXN0IGlzIHNvcnRlZCBhbHBoYW51bWVyaWNhbGx5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggMmQ0ZDg4Yi4uOTdjODllNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKICMKIAogSEVBRAk9IGhlYWQubwotT0JKUwk9IG1pc2MubworT0JKUwk9IG1pc2MubyBkZWNvbXByZXNzLm8KIEZPTlRDCT0gJChzcmN0cmVlKS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9hY29ybl84eDguYwogCiAjCkBAIC0xMDYsMTAgKzEwNiw2IEBACiAkKG9iaikvbGliMWZ1bmNzLlM6ICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL2xpYi9saWIxZnVuY3MuUyBGT1JDRQogCSQoY2FsbCBjbWQsc2hpcHBlZCkKIAotIyBEb24ndCBhbGxvdyBhbnkgc3RhdGljIGRhdGEgaW4gbWlzYy5vLCB3aGljaAotIyB3b3VsZCBvdGhlcndpc2UgbWVzcyB1cCBvdXIgR09UIHRhYmxlCi1DRkxBR1NfbWlzYy5vIDo9IC1Ec3RhdGljPQotCiAkKG9iaikvdm1saW51eDogJChvYmopL3ZtbGludXgubGRzICQob2JqKS8kKEhFQUQpICQob2JqKS9waWdneS4kKHN1ZmZpeF95KS5vIFwKIAkgCSQoYWRkcHJlZml4ICQob2JqKS8sICQoT0JKUykpICQobGliMWZ1bmNzKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhMzgyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKQEAgLTAsMCArMSw0NSBAQAorI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBmb3IgaW5saW5lICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIHNpemVfdCAqLworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBmb3IgTlVMTCAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CitleHRlcm4gdm9pZCBlcnJvcihjaGFyICopOworCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKworI2RlZmluZSBBUkNIX0hBU19ERUNPTVBfV0RPRworCisvKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLworI2lmZGVmIERFQlVHCisjICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9CisjICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4CisjICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9CisjICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9CisjICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9CisjICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9CisjZWxzZQorIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKKyMgIGRlZmluZSBUcmFjZSh4KQorIyAgZGVmaW5lIFRyYWNldih4KQorIyAgZGVmaW5lIFRyYWNldnYoeCkKKyMgIGRlZmluZSBUcmFjZWMoYyx4KQorIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKKyNlbmRpZgorCit2b2lkIGRvX2RlY29tcHJlc3ModTggKmlucHV0LCBpbnQgbGVuLCB1OCAqb3V0cHV0LCB2b2lkICgqZXJyb3IpKGNoYXIgKngpKQoreworCWRlY29tcHJlc3MoaW5wdXQsIGxlbiwgTlVMTCwgTlVMTCwgb3V0cHV0LCBOVUxMLCBlcnJvcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA0ZmRkYzUwLi45OWI3NWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTIyLDEzICsyMiwxMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0lDRURDQykKIAogI2lmZGVmIENPTkZJR19DUFVfVjYKLQkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLm1hY3JvCWxvYWRzcCwgcmIsIHRtcAogCQkuZW5kbQogCQkubWFjcm8Jd3JpdGViLCBjaCwgcmIKIAkJbWNyCXAxNCwgMCwgXGNoLCBjMCwgYzUsIDAKIAkJLmVuZG0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKLQkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLm1hY3JvCWxvYWRzcCwgcmIsIHRtcAogCQkuZW5kbQogCQkubWFjcm8Jd3JpdGViLCBjaCwgcmIKIHdhaXQ6CQltcmMJcDE0LCAwLCBwYywgYzAsIGMxLCAwCkBAIC0zNiwxMyArMzYsMTMgQEAKIAkJbWNyCXAxNCwgMCwgXGNoLCBjMCwgYzUsIDAKIAkJLmVuZG0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCi0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiAJCW1jcglwMTQsIDAsIFxjaCwgYzgsIGMwLCAwCiAJCS5lbmRtCiAjZWxzZQotCQkubWFjcm8JbG9hZHNwLCByYgorCQkubWFjcm8JbG9hZHNwLCByYiwgdG1wCiAJCS5lbmRtCiAJCS5tYWNybwl3cml0ZWIsIGNoLCByYgogCQltY3IJcDE0LCAwLCBcY2gsIGMxLCBjMCwgMApAQCAtNTgsNyArNTgsNyBAQAogCQkuZW5kbQogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TQTExMDApCi0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJbW92CVxyYiwgIzB4ODAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKICNpZmRlZiBDT05GSUdfREVCVUdfTExfU0VSMwogCQlhZGQJXHJiLCBccmIsICMweDAwMDUwMDAwCUAgU2VyMwpAQCAtNjcsMTMgKzY3LDEzIEBACiAjZW5kaWYKIAkJLmVuZG0KICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDMjQxMCkKLQkJLm1hY3JvIGxvYWRzcCwgcmIKKwkJLm1hY3JvIGxvYWRzcCwgcmIsIHRtcAogCQltb3YJXHJiLCAjMHg1MDAwMDAwMAogCQlhZGQJXHJiLCBccmIsICMweDQwMDAgKiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVAogCQkuZW5kbQogI2Vsc2UKLQkJLm1hY3JvCWxvYWRzcCwJcmIKLQkJYWRkcnVhcnQgXHJiCisJCS5tYWNybwlsb2Fkc3AsCXJiLCB0bXAKKwkJYWRkcnVhcnQgXHJiLCBcdG1wCiAJCS5lbmRtCiAjZW5kaWYKICNlbmRpZgpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAkJc3RyYglyMiwgW3IzLCByMV0KIAkJYgkxYgogCi1wdXRzOgkJbG9hZHNwCXIzCitwdXRzOgkJbG9hZHNwCXIzLCByMQogMToJCWxkcmIJcjIsIFtyMF0sICMxCiAJCXRlcQlyMiwgIzAKIAkJbW92ZXEJcGMsIGxyCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogcHV0YzoKIAkJbW92CXIyLCByMAogCQltb3YJcjAsICMwCi0JCWxvYWRzcAlyMworCQlsb2Fkc3AJcjMsIHIxCiAJCWIJMmIKIAogbWVtZHVtcDoJbW92CXIxMiwgcjAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDU2YTBkMTEuLmQzMmJjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIGZvciBpbmxpbmUgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkvKiBmb3Igc2l6ZV90ICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIGZvciBOVUxMICovCi0jaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKQEAgLTExNyw1NyArMTE3LDcgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgX19wdHJfdCB2b2lkICoKLQotI2RlZmluZSBtZW16ZXJvKHMsbikgX19tZW16ZXJvKHMsbikKLQotLyoKLSAqIE9wdGltaXNlZCBDIHZlcnNpb24gb2YgbWVtemVybyBmb3IgdGhlIEFSTS4KLSAqLwotdm9pZCBfX21lbXplcm8gKF9fcHRyX3Qgcywgc2l6ZV90IG4pCi17Ci0JdW5pb24geyB2b2lkICp2cDsgdW5zaWduZWQgbG9uZyAqdWxwOyB1bnNpZ25lZCBjaGFyICp1Y3A7IH0gdTsKLQlpbnQgaTsKLQotCXUudnAgPSBzOwotCi0JZm9yIChpID0gbiA+PiA1OyBpID4gMDsgaS0tKSB7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCX0KLQotCWlmIChuICYgMSA8PCA0KSB7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQl9Ci0KLQlpZiAobiAmIDEgPDwgMykgewotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQl9Ci0KLQlpZiAobiAmIDEgPDwgMikKLQkJKnUudWxwKysgPSAwOwotCi0JaWYgKG4gJiAxIDw8IDEpIHsKLQkJKnUudWNwKysgPSAwOwotCQkqdS51Y3ArKyA9IDA7Ci0JfQotCi0JaWYgKG4gJiAxKQotCQkqdS51Y3ArKyA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19wdHJfdCBtZW1jcHkoX19wdHJfdCBfX2Rlc3QsIF9fY29uc3QgX19wdHJfdCBfX3NyYywKLQkJCSAgICBzaXplX3QgX19uKQordm9pZCAqbWVtY3B5KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKIHsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgY2hhciAqZCA9ICh1bnNpZ25lZCBjaGFyICopX19kZXN0LCAqcyA9ICh1bnNpZ25lZCBjaGFyICopX19zcmM7CkBAIC0yMDQsNTkgKzE1NCwyMCBAQAogLyoKICAqIGd6aXAgZGVsYXJhdGlvbnMKICAqLwotI2RlZmluZSBTVEFUSUMgc3RhdGljCi0KLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKLSMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpIHtpZighKGNvbmQpKSBlcnJvcihtc2cpO30KLSMgIGRlZmluZSBUcmFjZSh4KSBmcHJpbnRmIHgKLSMgIGRlZmluZSBUcmFjZXYoeCkge2lmICh2ZXJib3NlKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZXZ2KHgpIHtpZiAodmVyYm9zZT4xKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZWMoYyx4KSB7aWYgKHZlcmJvc2UgJiYgKGMpKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZWN2KGMseCkge2lmICh2ZXJib3NlPjEgJiYgKGMpKSBmcHJpbnRmIHggO30KLSNlbHNlCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQotIyAgZGVmaW5lIFRyYWNlKHgpCi0jICBkZWZpbmUgVHJhY2V2KHgpCi0jICBkZWZpbmUgVHJhY2V2dih4KQotIyAgZGVmaW5lIFRyYWNlYyhjLHgpCi0jICBkZWZpbmUgVHJhY2VjdihjLHgpCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7Ci0KIGV4dGVybiBjaGFyIGlucHV0X2RhdGFbXTsKIGV4dGVybiBjaGFyIGlucHV0X2RhdGFfZW5kW107CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpvdXRwdXRfZGF0YTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG91dHB1dF9wdHI7Cit1bnNpZ25lZCBjaGFyICpvdXRwdXRfZGF0YTsKK3Vuc2lnbmVkIGxvbmcgb3V0cHV0X3B0cjsKIAotc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7Ci0KLXN0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICopOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwotCi0jaWZkZWYgU1RBTkRBTE9ORV9ERUJVRwotI2RlZmluZSBOT19JTkZMQVRFX01BTExPQwotI2VuZGlmCi0KLSNkZWZpbmUgQVJDSF9IQVNfREVDT01QX1dET0cKLQotI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYyIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgotI2VuZGlmCit1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK3Vuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKIAogI2lmbmRlZiBhcmNoX2Vycm9yCiAjZGVmaW5lIGFyY2hfZXJyb3IoeCkKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQordm9pZCBlcnJvcihjaGFyICp4KQogewogCWFyY2hfZXJyb3IoeCk7CiAKQEAgLTI3Miw2ICsxODMsOCBAQAogCWVycm9yKCJBdHRlbXB0aW5nIGRpdmlzaW9uIGJ5IDAhIik7CiB9CiAKK2V4dGVybiB2b2lkIGRvX2RlY29tcHJlc3ModTggKmlucHV0LCBpbnQgbGVuLCB1OCAqb3V0cHV0LCB2b2lkICgqZXJyb3IpKGNoYXIgKngpKTsKKwogI2lmbmRlZiBTVEFOREFMT05FX0RFQlVHCiAKIHVuc2lnbmVkIGxvbmcKQEAgLTI5Miw4ICsyMDUsOCBAQAogCW91dHB1dF9wdHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIodG1wKTsKIAogCXB1dHN0cigiVW5jb21wcmVzc2luZyBMaW51eC4uLiIpOwotCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfZGF0YV9lbmQgLSBpbnB1dF9kYXRhLAotCQkJTlVMTCwgTlVMTCwgb3V0cHV0X2RhdGEsIE5VTEwsIGVycm9yKTsKKwlkb19kZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2RhdGFfZW5kIC0gaW5wdXRfZGF0YSwKKwkJCW91dHB1dF9kYXRhLCBlcnJvcik7CiAJcHV0c3RyKCIgZG9uZSwgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CiAJcmV0dXJuIG91dHB1dF9wdHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4gYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KaW5kZXggYTU5MjRiOS4uN2NhOWVjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgpAQCAtMTQsNiArMTQsMTMgQEAKICAgL0RJU0NBUkQvIDogewogICAgICooLkFSTS5leGlkeCopCiAgICAgKiguQVJNLmV4dGFiKikKKyAgICAvKgorICAgICAqIERpc2NhcmQgYW55IHIvdyBkYXRhIC0gdGhpcyBwcm9kdWNlcyBhIGxpbmsgZXJyb3IgaWYgd2UgaGF2ZSBhbnksCisgICAgICogd2hpY2ggaXMgcmVxdWlyZWQgZm9yIFBJQyBkZWNvbXByZXNzaW9uLiAgTG9jYWwgZGF0YSBnZW5lcmF0ZXMKKyAgICAgKiBHT1RPRkYgcmVsb2NhdGlvbnMsIHdoaWNoIHByZXZlbnRzIGl0IGJlaW5nIHJlbG9jYXRlZCBpbmRlcGVuZGVudGx5CisgICAgICogb2YgdGhlIHRleHQvZ290IHNlZ21lbnRzLgorICAgICAqLworICAgICooLmRhdGEpCiAgIH0KIAogICAuID0gVEVYVF9TVEFSVDsKQEAgLTQwLDcgKzQ3LDYgQEAKICAgLmdvdAkJCTogeyAqKC5nb3QpIH0KICAgX2dvdF9lbmQgPSAuOwogICAuZ290LnBsdAkJOiB7ICooLmdvdC5wbHQpIH0KLSAgLmRhdGEJCQk6IHsgKiguZGF0YSkgfQogICBfZWRhdGEgPSAuOwogCiAgIC4gPSBCU1NfU1RBUlQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKaW5kZXggYWFlNWJjMC4uNDQ2YjY5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwpAQCAtOTksNiArOTksMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrZGV2X2FkZCk7CiAKK3ZvaWQgX19pbml0IGNsa2Rldl9hZGRfdGFibGUoc3RydWN0IGNsa19sb29rdXAgKmNsLCBzaXplX3QgbnVtKQoreworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJd2hpbGUgKG51bS0tKSB7CisJCWxpc3RfYWRkX3RhaWwoJmNsLT5ub2RlLCAmY2xvY2tzKTsKKwkJY2wrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworfQorCiAjZGVmaW5lIE1BWF9ERVZfSUQJMjAKICNkZWZpbmUgTUFYX0NPTl9JRAkxNgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggY2MzMmMxZS4uY2MwYTkzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCSAqIFdlIGRvbid0IG5lZWQgdG8gc3luYyB0aGUgRE1BIGJ1ZmZlciBzaW5jZQogCQkgKiBpdCB3YXMgYWxsb2NhdGVkIHZpYSB0aGUgY29oZXJlbnQgYWxsb2NhdG9ycy4KIAkJICovCi0JCWRtYV9jYWNoZV9tYWludChwdHIsIHNpemUsIGRpcik7CisJCV9fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KHB0ciwgc2l6ZSwgZGlyKTsKIAl9CiAKIAlyZXR1cm4gZG1hX2FkZHI7CkBAIC0zMTUsNiArMzE1LDggQEAKIAkJCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShwdHIsIHNpemUpOwogCQl9CiAJCWZyZWVfc2FmZV9idWZmZXIoZGV2LT5hcmNoZGF0YS5kbWFib3VuY2UsIGJ1Zik7CisJfSBlbHNlIHsKKwkJX19kbWFfc2luZ2xlX2Rldl90b19jcHUoZG1hX3RvX3ZpcnQoZGV2LCBkbWFfYWRkciksIHNpemUsIGRpcik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vdmljLmMgYi9hcmNoL2FybS9jb21tb24vdmljLmMKaW5kZXggZjIzMjk0MS4uMWNmOTk5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwpAQCAtMTgsNiArMTgsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLworCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjgsNDggKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKLXN0YXRpYyB2b2lkIHZpY19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpcnEgJj0gMzE7Ci0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwotCS8qIG1vcmVvdmVyLCBjbGVhciB0aGUgc29mdC10cmlnZ2VyZWQsIGluIGNhc2UgaXQgd2FzIHRoZSByZWFzb24gKi8KLQl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX1NPRlRfQ0xFQVIpOwotfQotCi1zdGF0aWMgdm9pZCB2aWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWlycSAmPSAzMTsKLQl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpcnEgJj0gMzE7Ci0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEUpOwotfQotCi0vKioKLSAqIHZpY19pbml0MiAtIGNvbW1vbiBpbml0aWFsaXNhdGlvbiBjb2RlCi0gKiBAYmFzZTogQmFzZSBvZiB0aGUgVklDLgotICoKLSAqIENvbW1vbiBpbml0aWFsaXNhdGlvbiBjb2RlIGZvciByZWdpc3RlcmF0aW9uCi0gKiBhbmQgcmVzdW1lLgotKi8KLXN0YXRpYyB2b2lkIHZpY19pbml0Mih2b2lkIF9faW9tZW0gKmJhc2UpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhc2UgKyBWSUNfVkVDVF9DTlRMMCArIChpICogNCk7Ci0JCXdyaXRlbChWSUNfVkVDVF9DTlRMX0VOQUJMRSB8IGksIHJlZyk7Ci0JfQotCi0Jd3JpdGVsKDMyLCBiYXNlICsgVklDX1BMMTkwX0RFRl9WRUNUX0FERFIpOwotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCiAvKioKICAqIHN0cnVjdCB2aWNfZGV2aWNlIC0gVklDIFBNIGRldmljZQpAQCAtOTksMTMgKzU4LDM0IEBACiAvKiB3ZSBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IHdoZW4gVklDcyBhcmUgaW5pdGlhbGx5IHJlZ2lzdGVyZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgdmljX2RldmljZSB2aWNfZGV2aWNlc1tDT05GSUdfQVJNX1ZJQ19OUl07CiAKK3N0YXRpYyBpbnQgdmljX2lkOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2aWNfZGV2aWNlICp0b192aWMoc3RydWN0IHN5c19kZXZpY2UgKnN5cykKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKHN5cywgc3RydWN0IHZpY19kZXZpY2UsIHN5c2Rldik7CiB9CisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBpbnQgdmljX2lkOworLyoqCisgKiB2aWNfaW5pdDIgLSBjb21tb24gaW5pdGlhbGlzYXRpb24gY29kZQorICogQGJhc2U6IEJhc2Ugb2YgdGhlIFZJQy4KKyAqCisgKiBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgcmVnaXN0ZXJhdGlvbgorICogYW5kIHJlc3VtZS4KKyovCitzdGF0aWMgdm9pZCB2aWNfaW5pdDIodm9pZCBfX2lvbWVtICpiYXNlKQoreworCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOworCQl3cml0ZWwoVklDX1ZFQ1RfQ05UTF9FTkFCTEUgfCBpLCByZWcpOworCX0KKworCXdyaXRlbCgzMiwgYmFzZSArIFZJQ19QTDE5MF9ERUZfVkVDVF9BRERSKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BNKQogc3RhdGljIGludCB2aWNfY2xhc3NfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpY19kZXZpY2UgKnZpYyA9IHRvX3ZpYyhkZXYpOwpAQCAtMTU5LDMxICsxMzksNiBAQAogfTsKIAogLyoqCi0gKiB2aWNfcG1fcmVnaXN0ZXIgLSBSZWdpc3RlciBhIFZJQyBmb3IgbGF0ZXIgcG93ZXIgbWFuYWdlbWVudCBjb250cm9sCi0gKiBAYmFzZTogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklDLgotICogQGlycTogVGhlIGJhc2UgSVJRIGZvciB0aGUgVklDLgotICogQHJlc3VtZV9zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdHMgYWxsb3dlZCBmb3IgcmVzdW1lIHNvdXJjZXMuCi0gKgotICogUmVnaXN0ZXIgdGhlIFZJQyB3aXRoIHRoZSBzeXN0ZW0gZGV2aWNlIHRyZWUgc28gdGhhdCBpdCBjYW4gYmUgbm90aWZpZWQKLSAqIG9mIHN1c3BlbmQgYW5kIHJlc3VtZSByZXF1ZXN0cyBhbmQgZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYWN0aW9ucyBhcmUKLSAqIHRha2VuIHRvIHJlLWluc3RhdGUgdGhlIHNldHRpbmdzIG9uIHJlc3VtZS4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiByZXN1bWVfc291cmNlcykKLXsKLQlzdHJ1Y3QgdmljX2RldmljZSAqdjsKLQotCWlmICh2aWNfaWQgPj0gQVJSQVlfU0laRSh2aWNfZGV2aWNlcykpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHRvbyBmZXcgVklDcywgaW5jcmVhc2UgQ09ORklHX0FSTV9WSUNfTlJcbiIsIF9fZnVuY19fKTsKLQllbHNlIHsKLQkJdiA9ICZ2aWNfZGV2aWNlc1t2aWNfaWRdOwotCQl2LT5iYXNlID0gYmFzZTsKLQkJdi0+cmVzdW1lX3NvdXJjZXMgPSByZXN1bWVfc291cmNlczsKLQkJdi0+aXJxID0gaXJxOwotCQl2aWNfaWQrKzsKLQl9Ci19Ci0KLS8qKgogICogdmljX3BtX2luaXQgLSBpbml0aWNhbGwgdG8gcmVnaXN0ZXIgVklDIHBtCiAgKgogICogVGhpcyBpcyBjYWxsZWQgdmlhIGxhdGVfaW5pdGNhbGwoKSB0byByZWdpc3RlcgpAQCAtMjE5LDkgKzE3NCw2MCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIGxhdGVfaW5pdGNhbGwodmljX3BtX2luaXQpOwogCisvKioKKyAqIHZpY19wbV9yZWdpc3RlciAtIFJlZ2lzdGVyIGEgVklDIGZvciBsYXRlciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wKKyAqIEBiYXNlOiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBWSUMuCisgKiBAaXJxOiBUaGUgYmFzZSBJUlEgZm9yIHRoZSBWSUMuCisgKiBAcmVzdW1lX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0cyBhbGxvd2VkIGZvciByZXN1bWUgc291cmNlcy4KKyAqCisgKiBSZWdpc3RlciB0aGUgVklDIHdpdGggdGhlIHN5c3RlbSBkZXZpY2UgdHJlZSBzbyB0aGF0IGl0IGNhbiBiZSBub3RpZmllZAorICogb2Ygc3VzcGVuZCBhbmQgcmVzdW1lIHJlcXVlc3RzIGFuZCBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBhY3Rpb25zIGFyZQorICogdGFrZW4gdG8gcmUtaW5zdGF0ZSB0aGUgc2V0dGluZ3Mgb24gcmVzdW1lLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdmljX3BtX3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycSwgdTMyIHJlc3VtZV9zb3VyY2VzKQoreworCXN0cnVjdCB2aWNfZGV2aWNlICp2OworCisJaWYgKHZpY19pZCA+PSBBUlJBWV9TSVpFKHZpY19kZXZpY2VzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdG9vIGZldyBWSUNzLCBpbmNyZWFzZSBDT05GSUdfQVJNX1ZJQ19OUlxuIiwgX19mdW5jX18pOworCWVsc2UgeworCQl2ID0gJnZpY19kZXZpY2VzW3ZpY19pZF07CisJCXYtPmJhc2UgPSBiYXNlOworCQl2LT5yZXN1bWVfc291cmNlcyA9IHJlc3VtZV9zb3VyY2VzOworCQl2LT5pcnEgPSBpcnE7CisJCXZpY19pZCsrOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdmljX3BtX3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycSwgdTMyIGFyZzEpIHsgfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgdm9pZCB2aWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaXJxICY9IDMxOworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKKwkvKiBtb3Jlb3ZlciwgY2xlYXIgdGhlIHNvZnQtdHJpZ2dlcmVkLCBpbiBjYXNlIGl0IHdhcyB0aGUgcmVhc29uICovCisJd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgdmljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlpcnEgJj0gMzE7CisJd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOworfQorCitzdGF0aWMgdm9pZCB2aWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaXJxICY9IDMxOworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BNKQogc3RhdGljIHN0cnVjdCB2aWNfZGV2aWNlICp2aWNfZnJvbV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKICAgICAgICAgc3RydWN0IHZpY19kZXZpY2UgKnYgPSB2aWNfZGV2aWNlczsKQEAgLTI1NSwxMCArMjYxLDcgQEAKIAogCXJldHVybiAwOwogfQotCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiBhcmcxKSB7IH0KLQogI2RlZmluZSB2aWNfc2V0X3dha2UgTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCkBAIC0yNzAsODAgKzI3Myw2IEBACiAJLnNldF93YWtlID0gdmljX3NldF93YWtlLAogfTsKIAotLyogVGhlIFBMMTkwIGNlbGwgZnJvbSBBUk0gaGFzIGJlZW4gbW9kaWZpZWQgYnkgU1QsIHNvIGhhbmRsZSBib3RoIGhlcmUgKi8KLXN0YXRpYyB2b2lkIHZpa19pbml0X3N0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKLQkJCSB1MzIgdmljX3NvdXJjZXMpOwotCi0vKioKLSAqIHZpY19pbml0IC0gaW5pdGlhbGlzZSBhIHZlY3RvcmVkIGludGVycnVwdCBjb250cm9sbGVyCi0gKiBAYmFzZTogaW9tZW0gYmFzZSBhZGRyZXNzCi0gKiBAaXJxX3N0YXJ0OiBzdGFydGluZyBpbnRlcnJ1cHQgbnVtYmVyLCBtdXN0IGJlIG11bGlwbGUgb2YgMzIKLSAqIEB2aWNfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHQgc291cmNlcyB0byBhbGxvdwotICogQHJlc3VtZV9zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdCBzb3VyY2VzIHRvIGFsbG93IGZvciByZXN1bWUKLSAqLwotdm9pZCBfX2luaXQgdmljX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAotCQkgICAgIHUzMiB2aWNfc291cmNlcywgdTMyIHJlc3VtZV9zb3VyY2VzKQotewotCXVuc2lnbmVkIGludCBpOwotCXUzMiBjZWxsaWQgPSAwOwotCWVudW0gYW1iYV92ZW5kb3IgdmVuZG9yOwotCi0JLyogSWRlbnRpZnkgd2hpY2ggVklDIGNlbGwgdGhpcyBvbmUgaXMsIGJ5IHJlYWRpbmcgdGhlIElEICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQl1MzIgYWRkciA9ICgodTMyKWJhc2UgJiBQQUdFX01BU0spICsgMHhmZTAgKyAoaSAqIDQpOwotCQljZWxsaWQgfD0gKHJlYWRsKGFkZHIpICYgMHhmZikgPDwgKDggKiBpKTsKLQl9Ci0JdmVuZG9yID0gKGNlbGxpZCA+PiAxMikgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gIlZJQyBAJXA6IGlkIDB4JTA4eCwgdmVuZG9yIDB4JTAyeFxuIiwKLQkgICAgICAgYmFzZSwgY2VsbGlkLCB2ZW5kb3IpOwotCi0Jc3dpdGNoKHZlbmRvcikgewotCWNhc2UgQU1CQV9WRU5ET1JfU1Q6Ci0JCXZpa19pbml0X3N0KGJhc2UsIGlycV9zdGFydCwgdmljX3NvdXJjZXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVklDOiB1bmtub3duIHZlbmRvciwgY29udGludWluZyBhbnl3YXlzXG4iKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBBTUJBX1ZFTkRPUl9BUk06Ci0JCWJyZWFrOwotCX0KLQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLwotCi0Jd3JpdGVsKDAsIGJhc2UgKyBWSUNfSU5UX1NFTEVDVCk7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7Ci0Jd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lSUV9TVEFUVVMpOwotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lUQ1IpOwotCXdyaXRlbCh+MCwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBjbGVhciBhbGwgZXhpc3RpbmcgaW50ZXJydXB0cwotCSAqLwotCXdyaXRlbCgwLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7Ci0JZm9yIChpID0gMDsgaSA8IDE5OyBpKyspIHsKLQkJdW5zaWduZWQgaW50IHZhbHVlOwotCi0JCXZhbHVlID0gcmVhZGwoYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOwotCQl3cml0ZWwodmFsdWUsIGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKLQl9Ci0KLQl2aWNfaW5pdDIoYmFzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQlpZiAodmljX3NvdXJjZXMgJiAoMSA8PCBpKSkgewotCQkJdW5zaWduZWQgaW50IGlycSA9IGlycV9zdGFydCArIGk7Ci0KLQkJCXNldF9pcnFfY2hpcChpcnEsICZ2aWNfY2hpcCk7Ci0JCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGJhc2UpOwotCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCQl9Ci0JfQotCi0JdmljX3BtX3JlZ2lzdGVyKGJhc2UsIGlycV9zdGFydCwgcmVzdW1lX3NvdXJjZXMpOwotfQotCiAvKgogICogVGhlIFBMMTkwIGNlbGwgZnJvbSBBUk0gaGFzIGJlZW4gbW9kaWZpZWQgYnkgU1QgdG8gaGFuZGxlIDY0IGludGVycnVwdHMuCiAgKiBUaGUgb3JpZ2luYWwgY2VsbCBoYXMgMzIgaW50ZXJydXB0cywgd2hpbGUgdGhlIG1vZGlmaWVkIG9uZSBoYXMgNjQsCkBAIC0zNTEsNyArMjgwLDcgQEAKICAqIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBjYWxsZWQgdHdpY2UsIHdpdGggYmFzZSBzZXQgdG8gb2Zmc2V0IDAwMAogICogIGFuZCAwMjAgd2l0aGluIHRoZSBwYWdlLiBXZSBjYWxsIHRoaXMgInNlY29uZCBibG9jayIuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCitzdGF0aWMgdm9pZCBfX2luaXQgdmljX2luaXRfc3Qodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAogCQkJCXUzMiB2aWNfc291cmNlcykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTQwMCwzICszMjksNzMgQEAKIAkJfQogCX0KIH0KKworLyoqCisgKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcworICogQGlycV9zdGFydDogc3RhcnRpbmcgaW50ZXJydXB0IG51bWJlciwgbXVzdCBiZSBtdWxpcGxlIG9mIDMyCisgKiBAdmljX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cKKyAqIEByZXN1bWVfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHQgc291cmNlcyB0byBhbGxvdyBmb3IgcmVzdW1lCisgKi8KK3ZvaWQgX19pbml0IHZpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKKwkJICAgICB1MzIgdmljX3NvdXJjZXMsIHUzMiByZXN1bWVfc291cmNlcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgY2VsbGlkID0gMDsKKwllbnVtIGFtYmFfdmVuZG9yIHZlbmRvcjsKKworCS8qIElkZW50aWZ5IHdoaWNoIFZJQyBjZWxsIHRoaXMgb25lIGlzLCBieSByZWFkaW5nIHRoZSBJRCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdTMyIGFkZHIgPSAoKHUzMiliYXNlICYgUEFHRV9NQVNLKSArIDB4ZmUwICsgKGkgKiA0KTsKKwkJY2VsbGlkIHw9IChyZWFkbChhZGRyKSAmIDB4ZmYpIDw8ICg4ICogaSk7CisJfQorCXZlbmRvciA9IChjZWxsaWQgPj4gMTIpICYgMHhmZjsKKwlwcmludGsoS0VSTl9JTkZPICJWSUMgQCVwOiBpZCAweCUwOHgsIHZlbmRvciAweCUwMnhcbiIsCisJICAgICAgIGJhc2UsIGNlbGxpZCwgdmVuZG9yKTsKKworCXN3aXRjaCh2ZW5kb3IpIHsKKwljYXNlIEFNQkFfVkVORE9SX1NUOgorCQl2aWNfaW5pdF9zdChiYXNlLCBpcnFfc3RhcnQsIHZpY19zb3VyY2VzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZJQzogdW5rbm93biB2ZW5kb3IsIGNvbnRpbnVpbmcgYW55d2F5c1xuIik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQU1CQV9WRU5ET1JfQVJNOgorCQlicmVhazsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseS4gKi8KKworCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9TRUxFQ1QpOworCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9FTkFCTEUpOworCXdyaXRlbCh+MCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JUlFfU1RBVFVTKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JVENSKTsKKwl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX1NPRlRfQ0xFQVIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgY2xlYXIgYWxsIGV4aXN0aW5nIGludGVycnVwdHMKKwkgKi8KKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOworCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCQl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKKwkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJfQorCisJdmljX2luaXQyKGJhc2UpOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKKwkJCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfc3RhcnQgKyBpOworCisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOworCQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBiYXNlKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCX0KKworCXZpY19wbV9yZWdpc3RlcihiYXNlLCBpcnFfc3RhcnQsIHJlc3VtZV9zb3VyY2VzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCmluZGV4IGFiZTk5NjYuLjY2YTEwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw3IEBACiAjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLSMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWD15CiAjIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldApAQCAtNTkwLDcgKzU5MCw0NiBAQAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0NTcyZDk0MGhmZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ3MjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NDAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzcKKyMgRnJpIERlYyAgNSAxMDo1ODo0NyAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1BVDU3MkQ5NDBIRiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19UQVNLU1RBVFM9eQorIyBDT05GSUdfVEFTS19ERUxBWV9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfU0NIRUQ9eQorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUNTcyRDk0MEhGPXkKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDU3MkQ5NDBIRiBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9BVDU3MkQ5NDBIRkVCPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKK0NPTkZJR19OVU1fU0VSSUFMPTMKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKK0NPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibWVtPTQ4TSBjb25zb2xlPXR0eVMwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcncgaXA9MTcyLjE2LjEuMTgxIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19GUEVfTldGUEVfWFA9eQorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPW0KK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCitDT05GSUdfTkVUX1RDUFBST0JFPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49bQorQ09ORklHX0NBTl9SQVc9bQorQ09ORklHX0NBTl9CQ009bQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0NBTl9WQ0FOPW0KK0NPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KK0NPTkZJR19NVEQ9bQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MQorQ09ORklHX01URF9DT05DQVQ9bQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0JMT0NLX1JPPW0KK0NPTkZJR19GVEw9bQorQ09ORklHX05GVEw9bQorQ09ORklHX05GVExfUlc9eQorQ09ORklHX0lORlRMPW0KK0NPTkZJR19SRkRfRlRMPW0KK0NPTkZJR19TU0ZEQz1tCitDT05GSUdfTVREX09PUFM9bQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST1tCitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCitDT05GSUdfTVREX0NGSV9BTURTVEQ9bQorQ09ORklHX01URF9DRklfU1RBQT1tCitDT05GSUdfTVREX0NGSV9VVElMPW0KK0NPTkZJR19NVERfUkFNPW0KK0NPTkZJR19NVERfUk9NPW0KK0NPTkZJR19NVERfQUJTRU5UPW0KKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPW0KKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPW0KKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTTI1UDgwPW0KK0NPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRD15CitDT05GSUdfTVREX1NMUkFNPW0KK0NPTkZJR19NVERfUEhSQU09bQorQ09ORklHX01URF9NVERSQU09bQorQ09ORklHX01URFJBTV9UT1RBTF9TSVpFPTQwOTYKK0NPTkZJR19NVERSQU1fRVJBU0VfU0laRT0xMjgKK0NPTkZJR19NVERfQkxPQ0syTVREPW0KKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQPW0KKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OQU5EU0lNPW0KK0NPTkZJR19NVERfTkFORF9QTEFURk9STT1tCitDT05GSUdfTVREX0FMQVVEQT1tCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST1tCitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorQ09ORklHX01URF9VQklfR0xVRUJJPXkKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19BVE1FTF9UQ0xJQj15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPW0KKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorQ09ORklHX0NIUl9ERVZfU0NIPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX0VRVUFMSVpFUj1tCitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT1tCitDT05GSUdfREFWSUNPTV9QSFk9bQorQ09ORklHX1FTRU1JX1BIWT1tCitDT05GSUdfTFhUX1BIWT1tCitDT05GSUdfQ0lDQURBX1BIWT1tCitDT05GSUdfVklURVNTRV9QSFk9bQorQ09ORklHX1NNU0NfUEhZPW0KK0NPTkZJR19CUk9BRENPTV9QSFk9bQorQ09ORklHX0lDUExVU19QSFk9bQorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9bQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCitDT05GSUdfV0xBTl9QUkU4MDIxMT15CitDT05GSUdfU1RSSVA9bQorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPW0KK0NPTkZJR19MSUJFUlRBU19VU0I9bQorQ09ORklHX0xJQkVSVEFTX1NESU89bQorIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRDEyMDE9bQorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKK0NPTkZJR19VU0JfQ0FUQz1tCitDT05GSUdfVVNCX0tBV0VUSD1tCitDT05GSUdfVVNCX1BFR0FTVVM9bQorQ09ORklHX1VTQl9SVEw4MTUwPW0KK0NPTkZJR19VU0JfVVNCTkVUPW0KK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9bQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CisjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KK0NPTkZJR19JTlBVVF9FVkJVRz1tCisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCitDT05GSUdfS0VZQk9BUkRfTEtLQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9ORVdUT049bQorQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZPW0KK0NPTkZJR19LRVlCT0FSRF9HUElPPW0KK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfVlNYWFhBQT1tCitDT05GSUdfTU9VU0VfR1BJTz1tCisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorQ09ORklHX1NQRUNJQUxJWD1tCitDT05GSUdfUklPPW0KKyMgQ09ORklHX1JJT19PTERQQ0kgaXMgbm90IHNldAorQ09ORklHX1NUQUxEUlY9eQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0lQTUlfSEFORExFUj1tCisjIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQorQ09ORklHX0lQTUlfU0k9bQorQ09ORklHX0lQTUlfV0FUQ0hET0c9bQorQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfTlZSQU09bQorQ09ORklHX1IzOTY0PW0KK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CitDT05GSUdfVENHX1RQTT1tCitDT05GSUdfVENHX05TQz1tCitDT05GSUdfVENHX0FUTUVMPW0KK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj1tCisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQorQ09ORklHX1NFTlNPUlNfTUFYNjg3NT1tCitDT05GSUdfU0VOU09SU19UU0wyNTUwPW0KKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorQ09ORklHX1NQSV9CSVRCQU5HPW0KKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9BVDI1PW0KK0NPTkZJR19TUElfU1BJREVWPW0KKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCisjIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CisjIENPTkZJR19TTkRfQVQ3M0MyMTMgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89bQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQlJJR0hUPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9ERUxMPW0KK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX0xPR0lURUNIPW0KKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CitDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15CitDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9ERUJVRz1tCisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9FTUk2Mj1tCitDT05GSUdfVVNCX0VNSTI2PW0KK0NPTkZJR19VU0JfQURVVFVYPW0KKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUz15CitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUz15CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9bQorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorQ09ORklHX1VTQl9NSURJX0dBREdFVD1tCisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD1tCisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CitDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9bQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9EUzEzMDU9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUOTFTQU05IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfSkJEX0RFQlVHPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCitDT05GSUdfUkVJU0VSRlNfQ0hFQ0s9eQorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTz15CisjIENPTkZJR19VQklGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CitDT05GSUdfTERNX0RFQlVHPXkKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NVTl9QQVJUSVRJT049eQorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1JFRURfU09MT01PTj1tCitDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGV2a2l0ODAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RldmtpdDgwMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTgxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2RldmtpdDgwMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTg4OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBUaHUgRmViICA0IDE1OjQyOjU2IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAyUExVUz15CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKyMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAorQ09ORklHX09NQVBfUE1fTk9PUD15CitDT05GSUdfQVJDSF9PTUFQMzQzMD15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9ERVZLSVQ4MDAwPXkKKyMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDM1MTdFVk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX1pPT00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSUdFUDAwMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDNfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEyOAorIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzIsMTE1MjAwbjggcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMS4xOmhvbWUvbmZzcm9vdC9jdXJyZW50LGhvbWUvbmZzcm9vdC9jdXJyZW50IGlwPWRoY3Agcncgbm9pbml0cmQgcm9vdCAgZGVsYXk9MyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CitDT05GSUdfTkVPTj15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT15CisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKKyMgQ09ORklHX0lSTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCisjCisKKyMKKyMgU0lSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19JUlRUWV9TSVIgaXMgbm90IHNldAorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCisjIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CisjIENPTkZJR19CVF9MMkNBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9TQ08gaXMgbm90IHNldAorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX09NQVAyPXkKK0NPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIPXkKKyMgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworQ09ORklHX01URF9VQkk9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKK0NPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKKyMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NjAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKK0NPTkZJR19ETTkwMDA9eQorQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKK0NPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMPXkKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9NQVRSSVg9eQorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9eQorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CitDT05GSUdfUkFXX0RSSVZFUj15CitDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfT01BUDI0WFg9eQorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19UV0w0MDMwPXkKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUZEX0NPUkU9eQorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT1JFPXkKK0NPTkZJR19UV0w0MDMwX1BPV0VSPXkKK0NPTkZJR19UV0w0MDMwX0NPREVDPXkKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CitDT05GSUdfRkJfQk9USF9FTkRJQU49eQorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQ9eQorQ09ORklHX09NQVAyX1ZSQU09eQorQ09ORklHX09NQVAyX1ZSRkI9eQorQ09ORklHX09NQVAyX0RTUz15CitDT05GSUdfT01BUDJfVlJBTV9TSVpFPTAKK0NPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15CisjIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19WRU5DPXkKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX0RTSSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQorIyBDT05GSUdfRkJfT01BUDJfRk9SQ0VfQVVUT19VUERBVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MworCisjCisjIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycworIworQ09ORklHX1BBTkVMX0dFTkVSSUM9eQorIyBDT05GSUdfUEFORUxfU0hBUlBfTFMwMzdWN0RXMDEgaXMgbm90IHNldAorQ09ORklHX1BBTkVMX0lOTk9MVVhfQVQwNzBUTjgzPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfTUNCU1A9eQorQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEU9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX1RXTDQwMzA9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CisjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfT01BUD15CitDT05GSUdfVVNCX09NQVA9eQorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9BVURJTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0VUSF9FRU09eQorQ09ORklHX1VTQl9HQURHRVRGUz1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfVVNCPXkKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09bQorIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorQ09ORklHX01NQ19PTUFQX0hTPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1NQST1tCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBDQlVTIHN1cHBvcnQKKyMKKyMgQ09ORklHX0NCVVMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorQ09ORklHX1FVT1RBX1RSRUU9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMj15CitDT05GSUdfUVVPVEFDVEw9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQz15CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0xCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPW0KK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PW0KK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZwppbmRleCBhMTkyMjQ4Li5lNzk0MGE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKLSMgRnJpIE5vdiAxMyAxMjowMToxNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMzCisjIFRodSBKYW4gIDcgMTY6MTQ6NTUgMjAxMAogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQpAQCAtNDYsNiArNDYsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEyNiwxNCArMTI3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2Miw2ICsxOTAsNyBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CkBAIC0xODQsNiArMjEzLDcgQEAKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKICMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwpAQCAtMTk3LDEyICsyMjcsOCBAQAogIwogIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci1DT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKK0NPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15CisjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9NQ0JTUD15CiAjIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKQEAgLTIxNyw2ICsyNDMsNyBAQAogQ09ORklHX09NQVBfUE1fTk9PUD15CiBDT05GSUdfQVJDSF9PTUFQMzRYWD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCQj15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCkBAIC0yMjcsMTMgKzI1NCwxNiBAQAogIyBDT05GSUdfTUFDSF9PTUFQM0VWTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09NQVAzNTE3RVZNIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9JR0VQMDAyMD15CisjIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQM19FTVUgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC0zMDUsOCArMzM1LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldApAQCAtNDQwLDM1ICs0NjgsMzUgQEAKICMKICMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfQlRfSENJQlRVU0I9bQorIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPW0KIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQogQ09ORklHX0JUX0hDSVVBUlRfTEw9eQotQ09ORklHX0JUX0hDSUJDTTIwM1g9bQotQ09ORklHX0JUX0hDSUJQQTEwWD1tCi1DT05GSUdfQlRfSENJQkZVU0I9bQorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVZIQ0k9bQogQ09ORklHX0JUX01SVkw9bQogQ09ORklHX0JUX01SVkxfU0RJTz1tCiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQotQ09ORklHX0NGRzgwMjExPW0KK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dFWFRfQ09SRT15CitDT05GSUdfV0VYVF9QUk9DPXkKK0NPTkZJR19XRVhUX1NQWT15CitDT05GSUdfQ0ZHODAyMTE9eQogIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci1DT05GSUdfTElCODAyMTE9bQotQ09ORklHX0xJQjgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfTElCODAyMTE9eQogIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExPW0KK0NPTkZJR19NQUM4MDIxMT15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19QSUQgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKICMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKQEAgLTUwMCwxMiArNTI4LDk1IEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19QUk9DX0VWRU5UUz15Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX09NQVAyPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTT15CisjIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTE2LDcgKzYyNyw2IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV85M0NYNj1tCiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjEzLDU2ICs3MjMsMjYgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLUNPTkZJR19MSUJFUlRBUz1tCi1DT05GSUdfTElCRVJUQVNfVVNCPW0KLUNPTkZJR19MSUJFUlRBU19TRElPPW0KKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBUz15CisjIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTX1NESU89eQogIyBDT05GSUdfTElCRVJUQVNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLUNPTkZJR19BVDc2QzUwWF9VU0I9bQotQ09ORklHX1VTQl9aRDEyMDE9bQotQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTj1tCi1DT05GSUdfUlRMODE4Nz1tCi0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci1DT05GSUdfUDU0X0NPTU1PTj1tCi1DT05GSUdfUDU0X1VTQj1tCi1DT05GSUdfUDU0X1NQST1tCi1DT05GSUdfQVRIX0NPTU1PTj1tCi1DT05GSUdfQVI5MTcwX1VTQj1tCi1DT05GSUdfSE9TVEFQPW0KLUNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQotQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci1DT05GSUdfQjQzPW0KLSMgQ09ORklHX0I0M19TRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M19QSFlfTFAgaXMgbm90IHNldAotQ09ORklHX0I0M19IV1JORz15Ci0jIENPTkZJR19CNDNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0I0M0xFR0FDWT1tCi1DT05GSUdfQjQzTEVHQUNZX0hXUk5HPXkKLSMgQ09ORklHX0I0M0xFR0FDWV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQjQzTEVHQUNZX0RNQT15Ci1DT05GSUdfQjQzTEVHQUNZX1BJTz15Ci1DT05GSUdfQjQzTEVHQUNZX0RNQV9BTkRfUElPX01PREU9eQotIyBDT05GSUdfQjQzTEVHQUNZX0RNQV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWV9QSU9fTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfWkQxMjExUlc9bQotIyBDT05GSUdfWkQxMjExUldfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1JUMlgwMD1tCi1DT05GSUdfUlQyNTAwVVNCPW0KLUNPTkZJR19SVDczVVNCPW0KLUNPTkZJR19SVDI4MDBVU0I9bQotQ09ORklHX1JUMlgwMF9MSUJfVVNCPW0KLUNPTkZJR19SVDJYMDBfTElCPW0KLUNPTkZJR19SVDJYMDBfTElCX0hUPXkKLUNPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFPXkKLUNPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15Ci0jIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dMMTJYWD1tCi0jIENPTkZJR19XTDEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfV0wxMjcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3MiwyOSArNzUyLDEwIEBACiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0tBV0VUSD1tCi1DT05GSUdfVVNCX1BFR0FTVVM9bQorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1VTQk5FVD1tCi1DT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KLUNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQotQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KLUNPTkZJR19VU0JfTkVUX1NNU0M5NVhYPW0KLUNPTkZJR19VU0JfTkVUX0dMNjIwQT1tCi1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KLUNPTkZJR19VU0JfTkVUX1BMVVNCPW0KLUNPTkZJR19VU0JfTkVUX01DUzc4MzA9bQotQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCi1DT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KLSMgQ09ORklHX1VTQl9BTElfTTU2MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOMjcyMCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0JFTEtJTj15Ci1DT05GSUdfVVNCX0FSTUxJTlVYPXkKLSMgQ09ORklHX1VTQl9FUFNPTjI4ODggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tDMjE5MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9bQotIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTcxMCw2ICs3NzEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MDksNyArODcxLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgyNSw2ICs4ODYsOCBAQAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtODkyLDcgKzk1NSw3IEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfQ09SRT15CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CkBAIC05MDAsMTEgKzk2MywxMyBAQAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15CiAjIENPTkZJR19UV0w0MDMwX1BPV0VSIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX0NPREVDPXkKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CkBAIC05MTIsNiArOTc3LDggQEAKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKICMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CkBAIC05MTksNiArOTg2LDcgQEAKICMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKICMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKQEAgLTkzMCw2NSArOTk4LDEyOSBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9WUkFNPXkKK0NPTkZJR19PTUFQMl9WUkZCPXkKK0NPTkZJR19PTUFQMl9EU1M9eQorQ09ORklHX09NQVAyX1ZSQU1fU0laRT0xNAorIyBDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1ZFTkMgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX0RTST15CitDT05GSUdfT01BUDJfRFNTX1VTRV9EU0lfUExMPXkKKyMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTAKK0NPTkZJR19GQl9PTUFQMj15CisjIENPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTMKKworIworIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19QQU5FTF9HRU5FUklDPXkKKyMgQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkVMX1RBQUwgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DX01DQlNQPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfSUdFUDAwMjA9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX1RXTDQwMzA9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0hJRD1tCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKQEAgLTk5NywxMiArMTEyOSwxMiBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049bQorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTAxMCwyOSArMTE0MiwyMSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX1NPQz15Ci0KLSMKLSMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfTVVTQl9IT1NUPXkKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEwNDksMTkgKzExNzMsNyBAQAogIwogIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDk5LDQxICsxMjExLDcgQEAKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfWkVSTz1tCi0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCkBAIC0xMTQxLDEwICsxMjE5LDExIEBACiBDT05GSUdfVVNCX09UR19VVElMUz15CiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFdMNDAzMF9VU0I9eQorIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0RFQlVHPXkKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OCw3ICsxMjM3LDggQEAKICMKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1NESENJPXkKKyMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX09NQVBfSFM9eQogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxMjU5LDExIEBACiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIworIyBDQlVTIHN1cHBvcnQKKyMKKyMgQ09ORklHX0NCVVMgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTI1Myw2ICsxMzM4LDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xNDAxLDYgKzE0ODcsNyBAQAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQEAgLTE0MjUsNyArMTUxMiw5IEBACiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDMzLDcgKzE1MjIsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCmluZGV4IDM2N2JlOTguLjcxNDgzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjOAotIyBUdWUgRGVjICAxIDE0OjA0OjAyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKKyMgVHVlIEphbiAyNiAxMTowNTozMSAyMDEwCiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC0yMCw2ICsyMCw4IEBACiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19PUFJPRklMRV9BUk1WNj15CitDT05GSUdfT1BST0ZJTEVfQVJNMTFfQ09SRT15CiBDT05GSUdfT1BST0ZJTEVfQVJNVjc9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMzMsNiArMzUsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsNiArNTYsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTY5LDYgKzc4LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMzMsMTQgKzE0Myw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0xNjksNiArMjA2LDcgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldApAQCAtMTkxLDIxICsyMjksMjMgQEAKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKICMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAyUExVUz15CitDT05GSUdfQVJDSF9PTUFQMj15CiBDT05GSUdfQVJDSF9PTUFQMz15Ci0jIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA0PXkKIAogIwogIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0RFQlVHX0RFVklDRVM9eQorQ09ORklHX09NQVBfREVCVUdfTEVEUz15CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQogQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15CkBAIC0yMTYsNDMgKzI1Niw2NiBAQAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX05PTkU9eQogIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1BNX05PT1A9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX01BQ0hfT01BUF9HRU5FUklDPXkKKworIworIyBPTUFQIENvcmUgVHlwZQorIworQ09ORklHX0FSQ0hfT01BUDI0MjA9eQorIyBDT05GSUdfQVJDSF9PTUFQMjQzMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCQj15CitDT05GSUdfT01BUF9QQUNLQUdFX0NVUz15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCUD15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCiAjCitDT05GSUdfTUFDSF9PTUFQMl9UVVNCNjAxMD15CitDT05GSUdfTUFDSF9PTUFQX0g0PXkKK0NPTkZJR19NQUNIX09NQVBfQVBPTExPTj15CisjIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQogQ09ORklHX01BQ0hfT01BUF9MRFA9eQogQ09ORklHX01BQ0hfT1ZFUk89eQogQ09ORklHX01BQ0hfT01BUDNFVk09eQogQ09ORklHX01BQ0hfT01BUDM1MTdFVk09eQogQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQT15CitDT05GSUdfTUFDSF9PTUFQM19UT1VDSEJPT0s9eQogQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQPXkKK0NPTkZJR19NQUNIX05PS0lBX044MDA9eQorQ09ORklHX01BQ0hfTk9LSUFfTjgxMD15CitDT05GSUdfTUFDSF9OT0tJQV9OODEwX1dJTUFYPXkKK0NPTkZJR19NQUNIX05PS0lBX044WDA9eQogQ09ORklHX01BQ0hfTk9LSUFfUlg1MT15CiBDT05GSUdfTUFDSF9PTUFQX1pPT00yPXkKIENPTkZJR19NQUNIX09NQVBfWk9PTTM9eQogQ09ORklHX01BQ0hfQ01fVDM1PXkKIENPTkZJR19NQUNIX0lHRVAwMDIwPXkKIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUD15CitDT05GSUdfTUFDSF9PTUFQXzQ0MzBTRFA9eQorIyBDT05GSUdfT01BUDNfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y2PXkKKyMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nj15CiBDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNj15CiBDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjY9eQogQ09ORklHX0NQVV9QQUJSVF9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKIENPTkZJR19DUFVfQ0FDSEVfVjc9eQogQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKIENPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CiBDT05GSUdfQ1BVX1RMQl9WNz15CiBDT05GSUdfQ1BVX0hBU19BU0lEPXkKIENPTkZJR19DUFVfQ1AxNT15CkBAIC0yNjgsOSArMzMxLDExIEBACiAjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1RMU19SRUc9eQogQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD02CisjIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0dJQz15CiBDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKQEAgLTI4Nyw2ICszNTIsNyBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19WTVNQTElUXzNHPXkKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CkBAIC0yOTgsNiArMzY0LDcgQEAKICMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUw9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0zMDgsMTIgKzM3NSwxMCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKQEAgLTUwOSwxNSArNTc0LDE4IEBACiAjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQogQ09ORklHX0NGRzgwMjExPXkKICMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCiAjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs3MzksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC02ODEsOSArNzUwLDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY5NCw2ICs3NjYsNyBAQAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC03OTIsMjggKzg2NSwyNiBAQAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci1DT05GSUdfTElCRVJUQVM9eQotQ09ORklHX0xJQkVSVEFTX1VTQj15Ci1DT05GSUdfTElCRVJUQVNfU0RJTz15Ci0jIENPTkZJR19MSUJFUlRBU19TUEkgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKICMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBUz15CitDT05GSUdfTElCRVJUQVNfVVNCPXkKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKKyMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfREVCVUc9eQorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODYxLDYgKzkzMiw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4OSw2ICs5NjEsNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CkBAIC05MTQsNiArOTg3LDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldApAQCAtOTQ4LDYgKzEwMjIsNyBAQAogQ09ORklHX1NFUklPX1NFUlBPUlQ9eQogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTk4Niw2ICsxMDYxLDcgQEAKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET01fT01BUD15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtMTAyNCw3ICsxMTAwLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDAsNiArMTExNSw4IEBACiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC0xMDY3LDYgKzExNDQsNyBAQAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CiAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgpAQCAtMTE0MSw2ICsxMjE5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC0xMTY2LDYgKzEyNDUsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTI1OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQpAQCAtMTIwNCwyMCArMTI4NSwyMiBAQAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX0NPUkU9eQogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRU5FTEFVUyBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKICMgQ09ORklHX1RXTDQwMzBfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT0RFQyBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT0RFQz15CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldApAQCAtMTIyNSw2ICsxMzA4LDggQEAKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKICMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQpAQCAtMTIzMiw2ICsxMzE3LDcgQEAKICMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKICMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKQEAgLTEyNjcsNiArMTM1Myw3IEBACiAjCiAjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldApAQCAtMTI4MSw2ICsxMzY4LDcgQEAKICMgQ09ORklHX0ZCX09NQVBfTENEX01JUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgorIyBDT05GSUdfT01BUDJfRFNTIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldApAQCAtMTM2NCwxMiArMTQ1MiwxNSBAQAogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQz15CiBDT05GSUdfU05EX09NQVBfU09DX01DQlNQPXkKKyMgQ09ORklHX1NORF9PTUFQX1NPQ19OODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PTUFQX1NPQ19PVkVSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNFVk0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX09NQVBfU09DX0FNMzUxN0VWTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQogIyBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfWk9PTTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09NQVBfU09DX0lHRVAwMDIwIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKICMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKQEAgLTE0MTgsNyArMTUwOSw3IEBACiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CkBAIC0xNDQxLDYgKzE1MzIsNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldApAQCAtMTU1NiwxNiArMTY0OCwxOCBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotQ09ORklHX1VTQl9aRVJPPXkKK0NPTkZJR19VU0JfWkVSTz1tCiAjIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTE1NzMsNiArMTY2Nyw3IEBACiBDT05GSUdfVVNCX09UR19VVElMUz15CiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQogQ09ORklHX05PUF9VU0JfWENFSVY9eQogQ09ORklHX01NQz15CkBAIC0xNjA5LDcgKzE3MDQsOSBAQAogIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCkBAIC0xNjUzLDYgKzE3NTAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKQEAgLTE2ODMsNyArMTc4MSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE5NTEsNiArMjA1MSw3IEBACiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpAQCAtMTk4Myw3ICsyMDg0LDkgQEAKICMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE5OTMsOSArMjA5NiwxMiBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZwppbmRleCA4NmNjNGJlLi5lMmFkODU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCkBAIC0xODcsNiArMTg3LDggQEAKICMKICMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKICMKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYPXkKKyMgQ09ORklHX09NQVBfU01BUlRSRUZMRVhfVEVTVElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKQEAgLTMzMyw3ICszMzUsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fREVCVUc9eQogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQpAQCAtMTMzOSw3ICsxMzQxLDcgQEAKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCmluZGV4IGY3NGViOWEuLjVkMDhlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNwotIyBGcmkgRGVjICA1IDExOjU0OjA5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgU2F0IEZlYiAgNiAyMDoyNTo0MSAyMDEwCiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfUFJPQ19DUFU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE3LDEzIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzIsOCArMzEsMTUgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NST1NTX0NPTVBJTEU9IiIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDIsMjQgKzQ4LDMzIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkgaXMgbm90IHNldAotCisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC03MCwzMSArODUsNDEgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19TTE9XX1dPUks9eQogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTAyLDExICsxMjcsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTExNCwzMyArMTM2LDYyIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNDgsNDkgKzE5OSw1OCBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMlBMVVM9eQogIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMz15CisjIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKIAogIwogIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CisjIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAorQ09ORklHX09NQVBfUE1fTk9PUD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCQj15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCkBAIC0xOTgsMTUgKzI1OCwxOSBAQAogIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCisjIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lHRVAwMDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQM19TRFJDX0FDX1RJTUlORyBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTIxNSw3ICsyNzksNyBAQAogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQogQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9WNz15CiBDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKIENPTkZJR19DUFVfQ0FDSEVfVklQVD15CiBDT05GSUdfQ1BVX0NPUFlfVjY9eQpAQCAtMjMzLDcgKzI5NywxMiBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfVExTX1JFRz15Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKK0NPTkZJR19DUFVfSEFTX1BNVT15CisjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTI1MywxMyArMzIyLDE2IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MTI4CisjIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yNjgsMTMgKzM0MCwxNCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM2Niw2ICs0MzksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw3ICs0NTMsMTAgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTAsOCArNDY3LDE0IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAzLDYgKzQ4Niw4IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDk3LDcgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldApAQCAtNDYyLDYgKzU0OCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDc4LDYgKzU2NSw5IEBACiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfT01BUDI9eQorQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0g9eQorIyBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSF9ETUEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldApAQCAtNDg2LDYgKzU3NiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTg5LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUwMiw3ICs2MDEsMjUgQEAKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUyNSwxMCArNjQyLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTQ1LDggKzY1OCwxMSBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNTU5LDEzICs2NzUsMTMgQEAKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTgorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTgyLDYgKzY5OCw3IEBACiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTU4OSw2ICs3MDYsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MDUsMTMgKzcyMywyMCBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYxOSwxMyArNzQ0LDIyIEBACiAjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CkBAIC02MzQsOCArNzY4LDE4IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTY3MCwxOCArODE0LDIxIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5MiwxMCArODM5LDEyIEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIAogIwogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCkBAIC03MDksMjEgKzg1OCw2IEBACiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03MzYsMTQgKzg3MCwyMSBAQAogIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC03NjAsNiArOTAxLDcgQEAKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAogQ09ORklHX0dQSU9fVFdMNDAzMD15CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKQEAgLTc3MCwxMSArOTEyLDE2IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzg2LDQ0ICs5MzMsMTExIEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfQ09SRT15CisjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQorQ09ORklHX1RXTDQwMzBfUE9XRVI9eQorQ09ORklHX1RXTDQwMzBfQ09ERUM9eQogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX09NQVAyX1ZSQU09eQorQ09ORklHX09NQVAyX1ZSRkI9eQorQ09ORklHX09NQVAyX0RTUz15CitDT05GSUdfT01BUDJfVlJBTV9TSVpFPTAKK0NPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15CisjIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19WRU5DPXkKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX0RTSSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQorIyBDT05GSUdfRkJfT01BUDJfRk9SQ0VfQVVUT19VUERBVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MworCisjCisjIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfUEFORUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UyBpcyBub3Qgc2V0CitDT05GSUdfUEFORUxfVFBPX1REMDQzTVRFQTE9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtODM1LDYgKzEwNDksMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQpAQCAtODQyLDI1ICsxMDY2LDQzIEBACiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKIENPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKIENPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CiBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQogQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DX1RXTDQwMzA9eQotCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtODczLDMxICsxMTE1LDQwIEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX0hJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfREVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTkxMSw3ICsxMTYyLDcgQEAKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTkxOSw3ICsxMTcwLDEzIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldApAQCAtOTMwLDExICsxMTg3LDEwIEBACiAjCiAjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CiAjCi1DT05GSUdfVVNCX01VU0JfSE9TVD15Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUw9eQogIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQogIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CiAjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldApAQCAtOTQ5LDExICsxMjA1LDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CkBAIC05NzksMTQgKzEyMzUsMTMgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKQEAgLTEwMDIsMjcgKzEyNTcsNDYgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9PTUFQPXkKLUNPTkZJR19VU0JfT01BUD15CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKICMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9VU0I9eQorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CkBAIC0xMDQwLDE2ICsxMzE0LDQxIEBACiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorQ09ORklHX01NQ19PTUFQX0hTPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAorIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwNzgsMTAgKzEzNzcsMTIgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDkzLDYgKzEzOTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTEwNiwxOCArMTQwOCwyMiBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTExMjYsMjEgKzE0MzIsMjcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1FVT1RBPXkKICMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQogQ09ORklHX1FVT1RBQ1RMPXkKQEAgLTExNDksNiArMTQ2MSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTExNzUsMTAgKzE0OTIsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTg3LDcgKzE1MDEsOSBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExOTYsNyArMTUxMiwyMCBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz15CisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTEyNjksNiArMTU5OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI3NywxMSArMTYwNywxNSBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjk5LDMzICsxNjMzLDQyIEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKICMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTMzMywxOSArMTY3NiwyMiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMTM2MiwxMiArMTcwOCwxMiBAQAogIwogIyBCbG9jayBtb2RlcwogIwotQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3NSwxMyArMTcyMSwxNSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldApAQCAtMTQwMyw3ICsxNzUxLDcgQEAKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKQEAgLTE0MTYsMzMgKzE3NjQsMzMgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCiAjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci0KLSMgYWRkZWQgYnkgaGFuZCBmb3Igbm93Ci1DT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci1DT05GSUdfVVNCX09UR19VVElMUz15Ci1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQ19PTUFQX0hTPXkKLQorQ09ORklHX05MQVRUUj15CisjIENPTkZJR19TSE1fU0lHTkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPUSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKaW5kZXggM2RlNjQwYS4uYTk2YmNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwpAQCAtMTk5LDcgKzE5OSw3IEBACiAjCiAjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01DQlNQPXkKICMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKQEAgLTI0MiwxMCArMjQyLDEzIEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAogQ09ORklHX0hBU19UTFNfUkVHPXkKK0NPTkZJR19PVVRFUl9DQUNIRT15CitDT05GSUdfQ0FDSEVfTDJYMD15CiBDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKICMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5PXkKIENPTkZJR19BUk1fR0lDPXkKIAogIwpAQCAtMzA0LDcgKzMwNyw3IEBACiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyBtZW09MTI4TSBjb25zb2xlPXR0eVMwLDExNTIwMG44IGluaXRyZD0weDgxNjAwMDAwLDIwTSByYW1kaXNrX3NpemU9MjA0ODAiCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgbWVtPTEyOE0gY29uc29sZT10dHlTMiwxMTUyMDBuOCBpbml0cmQ9MHg4MTYwMDAwMCwyME0gcmFtZGlza19zaXplPTIwNDgwIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKQEAgLTQ4OCw3ICs0OTEsOCBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19PTUFQX1dBVENIRE9HPXkKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZwppbmRleCBhM2UzYzgyLi5mZjhhYzNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKQEAgLTExMzYsNyArMTEzNiw3IEBACiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CiAKICMKICMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCkBAIC0xMTg2LDcgKzExODYsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RXTDQwMzAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTQxNiw3ICsxNDE2LDcgQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCmluZGV4IGI2ZWVlYmIuLjE5M2JkMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwpAQCAtNDQ1LDYgKzQ0NSw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QSE9ORVQ9eQorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMTMyNSwyNyArMTMyNywzNCBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKIENPTkZJR19VU0JfWkVSTz1tCiAjIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX05PS0lBPW0KKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTEzNTQsNyArMTM2Myw3IEBACiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQz15CitDT05GSUdfTU1DPW0KICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKQEAgLTEzNjIsNyArMTM3MSw3IEBACiAjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz1tCi1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZDBkYWVhYi4uZThkZGVjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTIzNSw2ICsyMzUsMjM0IEBACiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0FUT01JQzY0Cit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkgeyAoaSkgfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3JlYWRcbiIKKyIJbGRyZXhkCSUwLCAlSDAsIFslMV0iCisJOiAiPSZyIiAocmVzdWx0KQorCTogInIiICgmdi0+Y291bnRlcikKKwkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCB1NjQgaSkKK3sKKwl1NjQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfc2V0XG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMV1cbiIKKyIJc3RyZXhkCSUwLCAlMiwgJUgyLCBbJTFdXG4iCisiCXRlcQklMCwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZCh1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJYWRkcwklMCwgJTAsICUzXG4iCisiCWFkYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBpLCBhdG9taWM2NF90ICp2KQoreworCXU2NCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF9yZXR1cm5cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUyXVxuIgorIglhZGRzCSUwLCAlMCwgJTNcbiIKKyIJYWRjCSVIMCwgJUgwLCAlSDNcbiIKKyIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTJdXG4iCisiCXRlcQklMSwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIodTY0IGksIGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3N1YlxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN1YnMJJTAsICUwLCAlM1xuIgorIglzYmMJJUgwLCAlSDAsICVIM1xuIgorIglzdHJleGQJJTEsICUwLCAlSDAsIFslMl1cbiIKKyIJdGVxCSUxLCAjMFxuIgorIglibmUJMWIiCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJc21wX21iKCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF9zdWJfcmV0dXJuXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICUzXG4iCisiCXNiYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworCisJc21wX21iKCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKK3sKKwl1NjQgb2xkdmFsOworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJc21wX21iKCk7CisKKwlkbyB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2NtcHhjaGdcbiIKKwkJImxkcmV4ZAkJJTEsICVIMSwgWyUyXVxuIgorCQkibW92CQklMCwgIzBcbiIKKwkJInRlcQkJJTEsICUzXG4iCisJCSJ0ZXFlcQkJJUgxLCAlSDNcbiIKKwkJInN0cmV4ZGVxCSUwLCAlNCwgJUg0LCBbJTJdIgorCQk6ICI9JnIiIChyZXMpLCAiPSZyIiAob2xkdmFsKQorCQk6ICJyIiAoJnB0ci0+Y291bnRlciksICJyIiAob2xkKSwgInIiIChuZXcpCisJCTogImNjIik7CisJfSB3aGlsZSAocmVzKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIG9sZHZhbDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXcpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfeGNoZ1xuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN0cmV4ZAklMSwgJTMsICVIMywgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmcHRyLT5jb3VudGVyKSwgInIiIChuZXcpCisJOiAiY2MiKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICMxXG4iCisiCXNiYwklSDAsICVIMCwgIzBcbiIKKyIJdGVxCSVIMCwgIzBcbiIKKyIJYm1pCTJmXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgdTY0IGEsIHU2NCB1KQoreworCXU2NCB2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IHJldCA9IDE7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF91bmxlc3NcbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTAsICU0XG4iCisiCXRlcWVxCSVIMCwgJUg0XG4iCisiCW1vdmVxCSUxLCAjMFxuIgorIgliZXEJMmZcbiIKKyIJYWRkcwklMCwgJTAsICU1XG4iCisiCWFkYwklSDAsICVIMCwgJUg1XG4iCisiCXN0cmV4ZAklMiwgJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTIsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHZhbCksICI9JnIiIChyZXQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAodSksICJyIiAoYSkKKwk6ICJjYyIpOworCisJaWYgKHJldCkKKwkJc21wX21iKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorI2RlZmluZSBhdG9taWM2NF9pbmModikJCQlhdG9taWM2NF9hZGQoMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoYSwgdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlYyh2KQkJCWF0b21pYzY0X3N1YigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KQkJYXRvbWljNjRfc3ViX3JldHVybigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpCShhdG9taWM2NF9kZWNfcmV0dXJuKCh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxTEwsIDBMTCkKKworI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0FUT01JQzY0ICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljNjQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDgxMTNiYjUuLjcyZGE3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE5NywyMSArMTk3LDYgQEAKICAqCURNQSBDYWNoZSBDb2hlcmVuY3kKICAqCT09PT09PT09PT09PT09PT09PT0KICAqCi0gKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCQlhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCi0gKgkJYmFjay4KLSAqCQktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJCS0gZW5kICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCQlDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgkJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCQktIGVuZCAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKgkJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0yMjgsOCArMjEzLDkgQEAKIAl2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAJdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpKHZvaWQgKiwgc2l6ZV90KTsKIAotCXZvaWQgKCpkbWFfaW52X3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0Jdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpkbWFfbWFwX2FyZWEpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworCXZvaWQgKCpkbWFfdW5tYXBfYXJlYSkoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CisKIAl2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB9OwogCkBAIC0yNTksOCArMjQ1LDggQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCWNwdV9jYWNoZS5kbWFfaW52X3JhbmdlCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCWNwdV9jYWNoZS5kbWFfY2xlYW5fcmFuZ2UKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJY3B1X2NhY2hlLmRtYV9mbHVzaF9yYW5nZQogCiAjZWxzZQpAQCAtMjg1LDEyICsyNzEsMTIgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9pbnZfcmFuZ2UpCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9jbGVhbl9yYW5nZSkKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQlfX2dsdWUoX0NBQ0hFLF9kbWFfdW5tYXBfYXJlYSkKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZG1hX2ZsdXNoX3JhbmdlKQogCi1leHRlcm4gdm9pZCBkbWFjX2ludl9yYW5nZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci1leHRlcm4gdm9pZCBkbWFjX2NsZWFuX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIAogI2VuZGlmCkBAIC0zMzEsMTIgKzMxNyw4IEBACiAgKiBwcm9jZXNzZXMgYWRkcmVzcyBzcGFjZS4gIFJlYWxseSwgd2Ugd2FudCB0byBhbGxvdyBvdXIgInVzZXIKICAqIHNwYWNlIiBtb2RlbCB0byBoYW5kbGUgdGhpcy4KICAqLwotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JZG8gewkJCQkJCQlcCi0JCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAotCQlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTtcCi0JfSB3aGlsZSAoMCkKLQorZXh0ZXJuIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICosCisJdW5zaWduZWQgbG9uZywgdm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKIAlkbyB7CQkJCQkJCVwKIAkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCkBAIC0zNzAsMTcgKzM1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXZpdnRfZmx1c2hfcHRyYWNlX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKLXsKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthZGRyOwotCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKLQl9Ci19Ci0KICNpZm5kZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfbW0obW0pCkBAIC0zODgsMTUgKzM1OSwxMCBAQAogCQl2aXZ0X2ZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLGFkZHIscGZuKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pCi0jZGVmaW5lIGZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLHBhZ2UsdWEsa2EsbGVuLHdyaXRlKSBcCi0JCXZpdnRfZmx1c2hfcHRyYWNlX2FjY2Vzcyh2bWEscGFnZSx1YSxrYSxsZW4sd3JpdGUpCiAjZWxzZQogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBsb25nIHBmbik7Ci1leHRlcm4gdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwKLQkJCQl1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKTsKICNlbmRpZgogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgZmx1c2hfY2FjaGVfbW0obW0pCkBAIC00NDcsNiArNDEzLDE2IEBACiAJICAgIDogInIiICgwKSk7CiAjZW5kaWYKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CiAKICNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAppbmRleCBiNmVjN2M2Li43YTA2OTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaApAQCAtMjcsNCArMjcsNyBAQAogdm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiB2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiAKK3ZvaWQgY2xrZGV2X2FkZF90YWJsZShzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOworaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc3RydWN0IGRldmljZSAqKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBhOTYzMDBiLi4yNTZlZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTU3LDE4ICs1Nyw1OCBAQAogI2VuZGlmCiAKIC8qCi0gKiBETUEtY29uc2lzdGVudCBtYXBwaW5nIGZ1bmN0aW9ucy4gIFRoZXNlIGFsbG9jYXRlL2ZyZWUgYSByZWdpb24gb2YKLSAqIHVuY2FjaGVkLCB1bndyaXRlLWJ1ZmZlcmVkIG1hcHBlZCBtZW1vcnkgc3BhY2UgZm9yIHVzZSB3aXRoIERNQQotICogZGV2aWNlcy4gIFRoaXMgaXMgdGhlICJnZW5lcmljIiB2ZXJzaW9uLiAgVGhlIFBDSSBzcGVjaWZpYyB2ZXJzaW9uCi0gKiBpcyBpbiBwY2kuaAorICogVGhlIERNQSBBUEkgaXMgYnVpbHQgdXBvbiB0aGUgbm90aW9uIG9mICJidWZmZXIgb3duZXJzaGlwIi4gIEEgYnVmZmVyCisgKiBpcyBlaXRoZXIgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIENQVSAoYW5kIHRoZXJlZm9yZSBtYXkgYmUgYWNjZXNzZWQKKyAqIGJ5IGl0KSBvciBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgRE1BIGRldmljZS4gIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMKKyAqIHJlcHJlc2VudCB0aGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gb3duZXJzaGlwIHN0YXRlcy4KICAqCi0gKiBOb3RlOiBEcml2ZXJzIHNob3VsZCBOT1QgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIGFzIGl0IHdpbGwgYnJlYWsKLSAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCi0gKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQorICogTm90ZSwgaG93ZXZlciwgdGhhdCBvbiBsYXRlciBBUk1zLCB0aGlzIG5vdGlvbiBkb2VzIG5vdCB3b3JrIGR1ZSB0bworICogc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcy4gIFdlIG1vZGVsIG91ciBhcHByb2FjaCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0CisgKiB0aGUgQ1BVIGRvZXMgZG8gc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcywgd2hpY2ggbWVhbnMgd2UgY2xlYW4gY2FjaGVzCisgKiBiZWZvcmUgdHJhbnNmZXJzIGFuZCBkZWxheSBjYWNoZSBpbnZhbGlkYXRpb24gdW50aWwgdHJhbnNmZXIgY29tcGxldGlvbi4KKyAqCisgKiBQcml2YXRlIHN1cHBvcnQgZnVuY3Rpb25zOiB0aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSBhbmQgYXJlCisgKiBsaWFibGUgdG8gY2hhbmdlLiAgRHJpdmVycyBtdXN0IG5vdCB1c2UgdGhlc2UuCiAgKi8KLWV4dGVybiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7Ci1leHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJIHNpemVfdCBzaXplLCBpbnQgcncpOworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKmthZGRyLCBzaXplX3Qgc2l6ZSwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CisKKwlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGthZGRyLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqLCBzaXplX3QsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoa2FkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9wYWdlX2NwdV90b19kZXYoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3BhZ2VfY3B1X3RvX2RldihzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLAorCQlzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfcGFnZV9jcHVfdG9fZGV2KHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3BhZ2VfZGV2X3RvX2NwdShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmYsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfcGFnZV9kZXZfdG9fY3B1KHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsCisJCXNpemVfdCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworCisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCV9fX2RtYV9wYWdlX2Rldl90b19jcHUocGFnZSwgb2ZmLCBzaXplLCBkaXIpOworfQogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZSBzdXBwb3J0ZWQKQEAgLTMwNCw4ICszNDQsNyBAQAogewogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAotCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQlkbWFfY2FjaGVfbWFpbnQoY3B1X2FkZHIsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY3B1X2FkZHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gdmlydF90b19kbWEoZGV2LCBjcHVfYWRkcik7CiB9CkBAIC0zMjksOCArMzY4LDcgQEAKIHsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKLQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCV9fZG1hX3BhZ2VfY3B1X3RvX2RldihwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gcGFnZV90b19kbWEoZGV2LCBwYWdlKSArIG9mZnNldDsKIH0KQEAgLTM1Miw3ICszOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQkvKiBub3RoaW5nIHRvIGRvICovCisJX19kbWFfc2luZ2xlX2Rldl90b19jcHUoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOwogfQogCiAvKioKQEAgLTM3Miw3ICs0MTAsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JLyogbm90aGluZyB0byBkbyAqLworCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShkbWFfdG9fcGFnZShkZXYsIGhhbmRsZSksIGhhbmRsZSAmIH5QQUdFX01BU0ssCisJCXNpemUsIGRpcik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQUJPVU5DRSAqLwogCkBAIC00MDAsNyArNDM5LDEwIEBACiB7CiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCi0JZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCWlmICghZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpKQorCQlyZXR1cm47CisKKwlfX2RtYV9zaW5nbGVfZGV2X3RvX2NwdShkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC00MTIsOCArNDU0LDcgQEAKIAlpZiAoIWRtYWJvdW5jZV9zeW5jX2Zvcl9kZXZpY2UoZGV2LCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgZGlyKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCi0JCWRtYV9jYWNoZV9tYWludChkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpICsgb2Zmc2V0LCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDJhNTljZi4uYzk4MDE1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSw5ICs2OSwxNiBAQAogLyoKICAqIF9fYXJtX2lvcmVtYXAgdGFrZXMgQ1BVIHBoeXNpY2FsIGFkZHJlc3MuCiAgKiBfX2FybV9pb3JlbWFwX3BmbiB0YWtlcyBhIFBhZ2UgRnJhbWUgTnVtYmVyIGFuZCBhbiBvZmZzZXQgaW50byB0aGF0IHBhZ2UKKyAqIFRoZSBfY2FsbGVyIHZhcmlldHkgdGFrZXMgYSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkgdmFsdWUgZm9yCisgKiAvcHJvYy92bWFsbG9jIHRvIHVzZSAtIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGluIG5vbi1pbmxpbmUgZnVuY3Rpb25zLgogICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICogX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcF9wZm5fY2FsbGVyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCwKKwl2b2lkICopOworCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaAppbmRleCBiMmNjMWZjZC4uOGJmZmMzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmgKQEAgLTQ2LDEyICs0Niw0IEBACiBleHRlcm4gc3RydWN0IHN5c190aW1lciAqc3lzdGVtX3RpbWVyOwogZXh0ZXJuIHZvaWQgdGltZXJfdGljayh2b2lkKTsKIAotLyoKLSAqIEtlcm5lbCB0aW1lIGtlZXBpbmcgc3VwcG9ydC4KLSAqLwotc3RydWN0IHRpbWVzcGVjOwotZXh0ZXJuIGludCAoKnNldF9ydGMpKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2F2ZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKTsKLWV4dGVybiB2b2lkIHJlc3RvcmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0Yyk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCA1NDIxZDgyLi40MzEyZWU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtNzYsNiArNzYsMTcgQEAKICAqLwogI2RlZmluZSBJT1JFTUFQX01BWF9PUkRFUgkyNAogCisvKgorICogU2l6ZSBvZiBETUEtY29uc2lzdGVudCBtZW1vcnkgcmVnaW9uLiAgTXVzdCBiZSBtdWx0aXBsZSBvZiAyTSwKKyAqIGJldHdlZW4gMk1CIGFuZCAxNE1CIGluY2x1c2l2ZS4KKyAqLworI2lmbmRlZiBDT05TSVNURU5UX0RNQV9TSVpFCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgCVNaXzJNCisjZW5kaWYKKworI2RlZmluZSBDT05TSVNURU5UX0VORAkJKDB4ZmZlMDAwMDBVTCkKKyNkZWZpbmUgQ09OU0lTVEVOVF9CQVNFCQkoQ09OU0lTVEVOVF9FTkQgLSBDT05TSVNURU5UX0RNQV9TSVpFKQorCiAjZWxzZSAvKiBDT05GSUdfTU1VICovCiAKIC8qCkBAIC05MywxMSArMTA0LDExIEBACiAjZW5kaWYKIAogI2lmbmRlZiBQSFlTX09GRlNFVAotI2RlZmluZSBQSFlTX09GRlNFVCAJCShDT05GSUdfRFJBTV9CQVNFKQorI2RlZmluZSBQSFlTX09GRlNFVCAJCVVMKENPTkZJR19EUkFNX0JBU0UpCiAjZW5kaWYKIAogI2lmbmRlZiBFTkRfTUVNCi0jZGVmaW5lIEVORF9NRU0gICAgIAkJKENPTkZJR19EUkFNX0JBU0UgKyBDT05GSUdfRFJBTV9TSVpFKQorI2RlZmluZSBFTkRfTUVNICAgICAJCShVTChDT05GSUdfRFJBTV9CQVNFKSArIENPTkZJR19EUkFNX1NJWkUpCiAjZW5kaWYKIAogI2lmbmRlZiBQQUdFX09GRlNFVApAQCAtMTEzLDE0ICsxMjQsNiBAQAogI2VuZGlmIC8qICFDT05GSUdfTU1VICovCiAKIC8qCi0gKiBTaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24uICBNdXN0IGJlIG11bHRpcGxlIG9mIDJNLAotICogYmV0d2VlbiAyTUIgYW5kIDE0TUIgaW5jbHVzaXZlLgotICovCi0jaWZuZGVmIENPTlNJU1RFTlRfRE1BX1NJWkUKLSNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl8yTQotI2VuZGlmCi0KLS8qCiAgKiBQaHlzaWNhbCB2cyB2aXJ0dWFsIFJBTSBhZGRyZXNzIHNwYWNlIGNvbnZlcnNpb24uICBUaGVzZSBhcmUKICAqIHByaXZhdGUgZGVmaW5pdGlvbnMgd2hpY2ggc2hvdWxkIE5PVCBiZSB1c2VkIG91dHNpZGUgbWVtb3J5LmgKICAqIGZpbGVzLiAgVXNlIHZpcnRfdG9fcGh5cy9waHlzX3RvX3ZpcnQvX19wYS9fX3ZhIGluc3RlYWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGI1NjE1ODQuLjY4ODcwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdS5oCkBAIC02LDYgKzYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogI2lmZGVmIENPTkZJR19DUFVfSEFTX0FTSUQKIAl1bnNpZ25lZCBpbnQgaWQ7CisJc3BpbmxvY2tfdCBpZF9sb2NrOwogI2VuZGlmCiAJdW5zaWduZWQgaW50IGt2bV9zZXE7CiB9IG1tX2NvbnRleHRfdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGRlNmNlZmIuLmEwYjNjYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNDMsMTIgKzQzLDIzIEBACiAjZGVmaW5lIEFTSURfRklSU1RfVkVSU0lPTgkoMSA8PCBBU0lEX0JJVFMpCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgY3B1X2xhc3RfYXNpZDsKKyNpZmRlZiBDT05GSUdfU01QCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tX3N0cnVjdCAqLCBjdXJyZW50X21tKTsKKyNlbmRpZgogCiB2b2lkIF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogdm9pZCBfX25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CisJLyoKKwkgKiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIFRoZXJlZm9yZSwKKwkgKiBtbS0+Y29udGV4dC5pZCBjYW5ub3QgYmUgdXBkYXRlZCB0byB0aGUgbGF0ZXN0IEFTSUQgdmVyc2lvbgorCSAqIG9uIGEgZGlmZmVyZW50IENQVSAoYW5kIGNvbmRpdGlvbiBiZWxvdyBub3QgdHJpZ2dlcmVkKQorCSAqIHdpdGhvdXQgZmlyc3QgZ2V0dGluZyBhbiBJUEkgdG8gcmVzZXQgdGhlIGNvbnRleHQuIFRoZQorCSAqIGFsdGVybmF0aXZlIGlzIHRvIHRha2UgYSByZWFkX2xvY2sgb24gbW0tPmNvbnRleHQuaWRfbG9jaworCSAqIChhZnRlciBjaGFuZ2luZyBpdHMgdHlwZSB0byByd2xvY2tfdCkuCisJICovCiAJaWYgKHVubGlrZWx5KChtbS0+Y29udGV4dC5pZCBeIGNwdV9sYXN0X2FzaWQpID4+IEFTSURfQklUUykpCiAJCV9fbmV3X2NvbnRleHQobW0pOwogCkBAIC0xMDgsNiArMTE5LDEwIEBACiAJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogI2VuZGlmCiAJaWYgKCFjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1LCBtbV9jcHVtYXNrKG5leHQpKSB8fCBwcmV2ICE9IG5leHQpIHsKKyNpZmRlZiBDT05GSUdfU01QCisJCXN0cnVjdCBtbV9zdHJ1Y3QgKipjcnRfbW0gPSAmcGVyX2NwdShjdXJyZW50X21tLCBjcHUpOworCQkqY3J0X21tID0gbmV4dDsKKyNlbmRpZgogCQljaGVja19jb250ZXh0KG5leHQpOwogCQljcHVfc3dpdGNoX21tKG5leHQtPnBnZCwgbmV4dCk7CiAJCWlmIChjYWNoZV9pc192aXZ0KCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggM2EzMmFmNC4uYTQ4NWFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTE3LDExICsxMTcsMTIgQEAKICNlbmRpZgogCiBzdHJ1Y3QgcGFnZTsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIAogc3RydWN0IGNwdV91c2VyX2ZucyB7CiAJdm9pZCAoKmNwdV9jbGVhcl91c2VyX2hpZ2hwYWdlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcik7CiAJdm9pZCAoKmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UpKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JCQl1bnNpZ25lZCBsb25nIHZhZGRyKTsKKwkJCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIH07CiAKICNpZmRlZiBNVUxUSV9VU0VSCkBAIC0xMzcsNyArMTM4LDcgQEAKIAogZXh0ZXJuIHZvaWQgX19jcHVfY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcik7CiBleHRlcm4gdm9pZCBfX2NwdV9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIpOworCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogI2VuZGlmCiAKICNkZWZpbmUgY2xlYXJfdXNlcl9oaWdocGFnZShwYWdlLHZhZGRyKQkJXApAQCAtMTQ1LDcgKzE0Niw3IEBACiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfQ09QWV9VU0VSX0hJR0hQQUdFCiAjZGVmaW5lIGNvcHlfdXNlcl9oaWdocGFnZSh0byxmcm9tLHZhZGRyLHZtYSkJXAotCV9fY3B1X2NvcHlfdXNlcl9oaWdocGFnZSh0bywgZnJvbSwgdmFkZHIpCisJX19jcHVfY29weV91c2VyX2hpZ2hwYWdlKHRvLCBmcm9tLCB2YWRkciwgdm1hKQogCiAjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KCh2b2lkICopKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZTMwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IHBpY29DaGlwIERlc2lnbnMgTHRkLCBKYW1pZSBJbGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FSTV9QRVJGX0VWRU5UX0hfXworI2RlZmluZSBfX0FSTV9QRVJGX0VWRU5UX0hfXworCisvKgorICogTk9QOiBvbiAqbW9zdCogKHJlYWQ6IGFsbCBzdXBwb3J0ZWQpIEFSTSBwbGF0Zm9ybXMsIHRoZSBwZXJmb3JtYW5jZQorICogY291bnRlciBpbnRlcnJ1cHRzIGFyZSByZWd1bGFyIGludGVycnVwdHMgYW5kIG5vdCBhbiBOTUkuIFRoaXMKKyAqIG1lYW5zIHRoYXQgd2hlbiB3ZSByZWNlaXZlIHRoZSBpbnRlcnJ1cHQgd2UgY2FuIGNhbGwKKyAqIHBlcmZfZXZlbnRfZG9fcGVuZGluZygpIHRoYXQgaGFuZGxlcyBhbGwgb2YgdGhlIHdvcmsgd2l0aAorICogaW50ZXJydXB0cyBlbmFibGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKK3sKK30KKworLyogQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHN0YXJ0IGZyb20gMSAoaW4gdGhlIGNwMTUgYWNjZXNzZXMpIHNvIHVzZSB0aGUKKyAqIHNhbWUgaW5kZXhlcyBoZXJlIGZvciBjb25zaXN0ZW5jeS4gKi8KKyNkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQgMQorCisjZW5kaWYgLyogX19BUk1fUEVSRl9FVkVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtbm9tbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtbm9tbXUuaAppbmRleCBiMDExZjJlLi4wMTNjZmNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLW5vbW11LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oCkBAIC04Niw4ICs4Niw4IEBACiAgKiBBbGwgMzJiaXQgYWRkcmVzc2VzIGFyZSBlZmZlY3RpdmVseSB2YWxpZCBmb3Igdm1hbGxvYy4uLgogICogU29ydCBvZiBtZWFuaW5nbGVzcyBmb3Igbm9uLVZNIHRhcmdldHMuCiAgKi8KLSNkZWZpbmUJVk1BTExPQ19TVEFSVAkwCi0jZGVmaW5lCVZNQUxMT0NfRU5ECTB4ZmZmZmZmZmYKKyNkZWZpbmUJVk1BTExPQ19TVEFSVAkwVUwKKyNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZlVMCiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAgICAgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyOWI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IHBpY29DaGlwIERlc2lnbnMgTHRkLCBKYW1pZSBJbGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FSTV9QTVVfSF9fCisjZGVmaW5lIF9fQVJNX1BNVV9IX18KKworI2lmZGVmIENPTkZJR19DUFVfSEFTX1BNVQorCitzdHJ1Y3QgcG11X2lycXMgeworCWNvbnN0IGludCAgICppcnFzOworCWludAkgICAgbnVtX2lycXM7Cit9OworCisvKioKKyAqIHJlc2VydmVfcG11KCkgLSByZXNlcnZlIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycworICoKKyAqIFJlc2VydmUgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGluIHRoZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCisgKiBUaGUgJ3N0cnVjdCBwbXVfaXJxcycgZm9yIHRoZSBzeXN0ZW0gaXMgcmV0dXJuZWQgb24gc3VjY2VzcywgRVJSX1BUUigpCisgKiBlbmNvZGVkIGVycm9yIG9uIGZhaWx1cmUuCisgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCk7CisKKy8qKgorICogcmVsZWFzZV9wbXUoKSAtIFJlbGlucXVpc2ggY29udHJvbCBvZiB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnMKKyAqCisgKiBSZWxlYXNlIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYWxsb3cgc29tZW9uZSBlbHNlIHRvIHVzZSB0aGVtLgorICogQ2FsbGVycyBtdXN0IGhhdmUgZGlzYWJsZWQgdGhlIGNvdW50ZXJzIGFuZCByZWxlYXNlZCBJUlFzIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzLiBUaGUgJ3N0cnVjdCBwbXVfaXJxcycgcmV0dXJuZWQgZnJvbSByZXNlcnZlX3BtdSgpIG11c3QgYmUgcGFzc2VkIGFzCisgKiBhIGNvb2tpZS4KKyAqLworZXh0ZXJuIGludAorcmVsZWFzZV9wbXUoY29uc3Qgc3RydWN0IHBtdV9pcnFzICppcnFzKTsKKworLyoqCisgKiBpbml0X3BtdSgpIC0gSW5pdGlhbGlzZSB0aGUgUE1VLgorICoKKyAqIEluaXRpYWxpc2UgdGhlIHN5c3RlbSByZWFkeSBmb3IgUE1VIGVuYWJsaW5nLiBUaGlzIHNob3VsZCB0eXBpY2FsbHkgc2V0IHRoZQorICogSVJRIGFmZmluaXR5IGFuZCBub3RoaW5nIGVsc2UuIFRoZSB1c2VycyAob3Byb2ZpbGUvcGVyZiBldmVudHMgZXRjKSB3aWxsIGRvCisgKiB0aGUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uLgorICovCitleHRlcm4gaW50Citpbml0X3BtdSh2b2lkKTsKKworI2Vsc2UgLyogQ09ORklHX0NQVV9IQVNfUE1VICovCisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBtdV9pcnFzICoKK3Jlc2VydmVfcG11KHZvaWQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWxlYXNlX3BtdShjb25zdCBzdHJ1Y3QgcG11X2lycXMgKmlycXMpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpbml0X3BtdSh2b2lkKQoreworCXJldHVybiAtRU5PREVWOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9IQVNfUE1VICovCisKKyNlbmRpZiAvKiBfX0FSTV9QTVVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCA1Y2NjZTBhLi5mMzkyZmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTIyMywxOCArMjIzLDYgQEAKICNkZWZpbmUgYmFua19waHlzX2VuZChiYW5rKQkoKGJhbmspLT5zdGFydCArIChiYW5rKS0+c2l6ZSkKICNkZWZpbmUgYmFua19waHlzX3NpemUoYmFuaykJKGJhbmspLT5zaXplCiAKLS8qCi0gKiBFYXJseSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4KLSAqLwotc3RydWN0IGVhcmx5X3BhcmFtcyB7Ci0JY29uc3QgY2hhciAqYXJnOwotCXZvaWQgKCpmbikoY2hhciAqKnApOwotfTsKLQotI2RlZmluZSBfX2Vhcmx5X3BhcmFtKG5hbWUsZm4pCQkJCQlcCi1zdGF0aWMgc3RydWN0IGVhcmx5X3BhcmFtcyBfX2Vhcmx5XyMjZm4gX191c2VkCQkJXAotX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5lYXJseV9wYXJhbS5pbml0IikpKSA9IHsgbmFtZSwgZm4gfQotCiAjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCmluZGV4IDU5MzAzZTIuLmU2MjE1MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaApAQCAtMTMsNCArMTMsOSBAQAogCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNhY2hlX29wc19uZWVkX2Jyb2FkY2FzdCh2b2lkKQoreworCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDE7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggYzkxYzY0Yy4uMTdlYjM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC01LDYgKzUsMjIgQEAKICNlcnJvciBTTVAgbm90IHN1cHBvcnRlZCBvbiBwcmUtQVJNdjYgQ1BVcwogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2Jfc2V2KHZvaWQpCit7CisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDcKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJkc2JcbiIKKwkJInNldiIKKwkpOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCisJCSJzZXYiCisJCTogOiAiciIgKDApCisJKTsKKyNlbmRpZgorfQorCiAvKgogICogQVJNdjYgU3Bpbi1sb2NraW5nLgogICoKQEAgLTY5LDEzICs4NSwxMSBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAiCXN0cgklMSwgWyUwXVxuIgotI2lmZGVmIENPTkZJR19DUFVfMzJ2NksKLSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjMTAsIDRcbiIgLyogRFNCICovCi0iCXNldiIKLSNlbmRpZgogCToKIAk6ICJyIiAoJmxvY2stPmxvY2spLCAiciIgKDApCiAJOiAiY2MiKTsKKworCWRzYl9zZXYoKTsKIH0KIAogLyoKQEAgLTEzMiwxMyArMTQ2LDExIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkic3RyCSUxLCBbJTBdXG4iCi0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotIgltY3IJcDE1LCAwLCAlMSwgYzcsIGMxMCwgNFxuIiAvKiBEU0IgKi8KLSIJc2V2XG4iCi0jZW5kaWYKIAk6CiAJOiAiciIgKCZydy0+bG9jayksICJyIiAoMCkKIAk6ICJjYyIpOworCisJZHNiX3NldigpOwogfQogCiAvKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPyAqLwpAQCAtMTg4LDE0ICsyMDAsMTIgQEAKICIJc3RyZXgJJTEsICUwLCBbJTJdXG4iCiAiCXRlcQklMSwgIzBcbiIKICIJYm5lCTFiIgotI2lmZGVmIENPTkZJR19DUFVfMzJ2NksKLSJcbgljbXAJJTAsICMwXG4iCi0iCW1jcmVxICAgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotIglzZXZlcSIKLSNlbmRpZgogCTogIj0mciIgKHRtcCksICI9JnIiICh0bXAyKQogCTogInIiICgmcnctPmxvY2spCiAJOiAiY2MiKTsKKworCWlmICh0bXAgPT0gMCkKKwkJZHNiX3NldigpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMDU4ZTdlOS4uY2E4OGU2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTczLDggKzczLDcgQEAKIAogc3RydWN0IHB0X3JlZ3M7CiAKLXZvaWQgZGllKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpCi0JCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Cit2b2lkIGRpZShjb25zdCBjaGFyICptc2csIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyKTsKIAogc3RydWN0IHNpZ2luZm87CiB2b2lkIGFybV9ub3RpZnlfZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdpbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMmRmYjdkNy4uYjc0OTcwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMTUsNyArMTE1LDggQEAKIGV4dGVybiB2b2lkIGl3bW14dF90YXNrX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICopOwogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfc3dpdGNoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKIAotZXh0ZXJuIHZvaWQgdmZwX3N5bmNfc3RhdGUoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpOworZXh0ZXJuIHZvaWQgdmZwX3N5bmNfaHdzdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCB2ZnBfZmx1c2hfaHdzdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBjMmYxNjA1Li5lMDg1ZTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTUyOSw3ICs1MjksOCBAQAogICogY2FjaGUgZW50cmllcyBmb3IgdGhlIGtlcm5lbHMgdmlydHVhbCBtZW1vcnkgcmFuZ2UgYXJlIHdyaXR0ZW4KICAqIGJhY2sgdG8gdGhlIHBhZ2UuCiAgKi8KLWV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwlwdGVfdCAqcHRlcCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZGQwMGY3NC4uMjZkMzAyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogCQkgICBwcm9jZXNzLm8gcHRyYWNlLm8gcmV0dXJuX2FkZHJlc3MubyBzZXR1cC5vIHNpZ25hbC5vIFwKIAkJICAgc3lzX2FybS5vIHN0YWNrdHJhY2UubyB0aW1lLm8gdHJhcHMubwogCitvYmotJChDT05GSUdfTEVEUykJCSs9IGxlZHMubwogb2JqLSQoQ09ORklHX09DX0VUTSkJCSs9IGV0bS5vCiAKIG9iai0kKENPTkZJR19JU0FfRE1BX0FQSSkJKz0gZG1hLm8KQEAgLTQ2LDYgKzQ3LDggQEAKIG9iai0kKENPTkZJR19DUFVfWFNDMykJCSs9IHhzY2FsZS1jcDAubwogb2JqLSQoQ09ORklHX0NQVV9NT0hBV0spCSs9IHhzY2FsZS1jcDAubwogb2JqLSQoQ09ORklHX0lXTU1YVCkJCSs9IGl3bW14dC5vCitvYmotJChDT05GSUdfQ1BVX0hBU19QTVUpCSs9IHBtdS5vCitvYmotJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfZXZlbnQubwogQUZMQUdTX2l3bW14dC5vCQkJOj0gLVdhLC1tY3B1PWl3bW14dAogCiBpZm5lcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA0YTg4MTI1Li44ODM1MTE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KQEAgLTExMiw1ICsxMTMsOSBAQAogI2lmZGVmIE1VTFRJX1BBQk9SVAogICBERUZJTkUoUFJPQ0VTU09SX1BBQlRfRlVOQywJb2Zmc2V0b2Yoc3RydWN0IHByb2Nlc3NvciwgX3ByZWZldGNoX2Fib3J0KSk7CiAjZW5kaWYKKyAgQkxBTksoKTsKKyAgREVGSU5FKERNQV9CSURJUkVDVElPTkFMLAlETUFfQklESVJFQ1RJT05BTCk7CisgIERFRklORShETUFfVE9fREVWSUNFLAkJRE1BX1RPX0RFVklDRSk7CisgIERFRklORShETUFfRlJPTV9ERVZJQ0UsCURNQV9GUk9NX0RFVklDRSk7CiAgIHJldHVybiAwOyAKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwppbmRleCA4MDk2ODE5MC4uYmQzOTdlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwpAQCAtNjE2LDE1ICs2MTYsMTcgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyAmJiBzdGFydCAmIDB4MzAwKQogCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKIAotCXJlcy0+c3RhcnQgPSAoc3RhcnQgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpOworCXN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKTsKKworCXJldHVybiBzdGFydDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCmluZGV4IDVjOTFhZGQuLmEzOGI0ODc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y2KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTUxLDcgKzUxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y3KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTcxLDcgKzcxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CkBAIC05OCw3ICs5OCw3IEBACiAKICNlbHNlCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJLmVuZG0KIAogCQkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeApAQCAtMTY0LDcgKzE2NCw3IEBACiAJCS5sdG9yZwogCiBFTlRSWShwcmludGFzY2lpKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJYgkyZgogMToJCXdhaXR1YXJ0IHIyLCByMwogCQlzZW5kdWFydCByMSwgcjMKQEAgLTE4MCw3ICsxODAsNyBAQAogRU5EUFJPQyhwcmludGFzY2lpKQogCiBFTlRSWShwcmludGNoKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJbW92CXIxLCByMAogCQltb3YJcjAsICMwCiAJCWIJMWIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9sZWRzLmMgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTMxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogTEVEIHN1cHBvcnQgY29kZSwgcmlwcGVkIG91dCBvZiBhcmNoL2FybS9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorCitzdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKK30KKwordm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7CisKK3N0cnVjdCBsZWRzX2V2dF9uYW1lIHsKKwljb25zdCBjaGFyCW5hbWVbOF07CisJaW50CQlvbjsKKwlpbnQJCW9mZjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKKwl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAorCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCisJeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKKwl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAorfTsKKworc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKKworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCisJCWxlbi0tOworCisJaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKKwkJbGVkc19ldmVudChsZWRfY2xhaW0pOworCQlyZXQgPSBzaXplOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7CisJCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOworCQlyZXQgPSBzaXplOworCX0gZWxzZSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgeworCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8CisJCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKKwkJCQlyZXQgPSBzaXplOworCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7CisJCQkJcmV0ID0gc2l6ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7CisKK3N0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJbGVkc19ldmVudChsZWRfaGFsdGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAibGVkcyIsCisJLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKKwkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKKworRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGNlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0wLDAgKzEsMjI3NiBAQAorI3VuZGVmIERFQlVHCisKKy8qCisgKiBBUk0gcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBwaWNvQ2hpcCBEZXNpZ25zLCBMdGQuLCBKYW1pZSBJbGVzCisgKgorICogQVJNdjcgc3VwcG9ydDogSmVhbiBQaWhldCA8anBpaGV0QG12aXN0YS5jb20+CisgKiAyMDEwIChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBMTEMuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBzcGFyYzY0IHBlcmYgZXZlbnQgY29kZSwgd2hpY2ggaXMgaW4gdHVybiBiYXNlZAorICogb24gdGhlIHg4NiBjb2RlLiBDYWxsY2hhaW4gY29kZSBpcyBiYXNlZCBvbiB0aGUgQVJNIE9Qcm9maWxlIGJhY2t0cmFjZQorICogY29kZS4KKyAqLworI2RlZmluZSBwcl9mbXQoZm10KSAiaHcgcGVyZmV2ZW50czogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKKworLyoKKyAqIEhhcmR3YXJlIGxvY2sgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIFBNVSByZWdpc3RlcnMuIE5lZWRlZCBmb3IgdGhlCisgKiByZWFkL21vZGlmeS93cml0ZSBzZXF1ZW5jZXMuCisgKi8KK0RFRklORV9TUElOTE9DSyhwbXVfbG9jayk7CisKKy8qCisgKiBBUk12NiBzdXBwb3J0cyBhIG1heGltdW0gb2YgMyBldmVudHMsIHN0YXJ0aW5nIGZyb20gaW5kZXggMS4gSWYgd2UgYWRkCisgKiBhbm90aGVyIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgbW9yZSwgd2UgbmVlZCB0byBpbmNyZWFzZSB0aGlzIHRvIGJlIHRoZQorICogbGFyZ2VzdCBvZiBhbGwgcGxhdGZvcm1zLgorICoKKyAqIEFSTXY3IHN1cHBvcnRzIHVwIHRvIDMyIGV2ZW50czoKKyAqICBjeWNsZSBjb3VudGVyIENDTlQgKyAzMSBldmVudHMgY291bnRlcnMgQ05UMC4uMzAuCisgKiAgQ29ydGV4LUE4IGhhcyAxKzQgY291bnRlcnMsIENvcnRleC1BOSBoYXMgMSs2IGNvdW50ZXJzLgorICovCisjZGVmaW5lIEFSTVBNVV9NQVhfSFdFVkVOVFMJCTMzCisKKy8qIFRoZSBldmVudHMgZm9yIGEgZ2l2ZW4gQ1BVLiAqLworc3RydWN0IGNwdV9od19ldmVudHMgeworCS8qCisJICogVGhlIGV2ZW50cyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIENQVSBmb3IgdGhlIGdpdmVuIGluZGV4LiBJbmRleCAwCisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tBUk1QTVVfTUFYX0hXRVZFTlRTXTsKKworCS8qCisJICogQSAxIGJpdCBmb3IgYW4gaW5kZXggaW5kaWNhdGVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgYmVpbmcgdXNlZCBmb3IKKwkgKiBhbiBldmVudC4gQSAwIG1lYW5zIHRoYXQgdGhlIGNvdW50ZXIgY2FuIGJlIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoQVJNUE1VX01BWF9IV0VWRU5UUyldOworCisJLyoKKwkgKiBBIDEgYml0IGZvciBhbiBpbmRleCBpbmRpY2F0ZXMgdGhhdCB0aGUgY291bnRlciBpcyBhY3RpdmVseSBiZWluZworCSAqIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhBUk1QTVVfTUFYX0hXRVZFTlRTKV07Cit9OworREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOworCitzdHJ1Y3QgYXJtX3BtdSB7CisJY2hhcgkJKm5hbWU7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShpbnQgaXJxX251bSwgdm9pZCAqZGV2KTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2dCwgaW50IGlkeCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZ0LCBpbnQgaWR4KTsKKwlpbnQJCSgqZXZlbnRfbWFwKShpbnQgZXZ0KTsKKwl1NjQJCSgqcmF3X2V2ZW50KSh1NjQpOworCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOworCXUzMgkJKCpyZWFkX2NvdW50ZXIpKGludCBpZHgpOworCXZvaWQJCSgqd3JpdGVfY291bnRlcikoaW50IGlkeCwgdTMyIHZhbCk7CisJdm9pZAkJKCpzdGFydCkodm9pZCk7CisJdm9pZAkJKCpzdG9wKSh2b2lkKTsKKwlpbnQJCW51bV9ldmVudHM7CisJdTY0CQltYXhfcGVyaW9kOworfTsKKworLyogU2V0IGF0IHJ1bnRpbWUgd2hlbiB3ZSBrbm93IHdoYXQgQ1BVIHR5cGUgd2UgYXJlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICphcm1wbXU7CisKKyNkZWZpbmUgSFdfT1BfVU5TVVBQT1JURUQJCTB4RkZGRgorCisjZGVmaW5lIEMoX3gpIFwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjX3gKKworI2RlZmluZSBDQUNIRV9PUF9VTlNVUFBPUlRFRAkJMHhGRkZGCisKK3N0YXRpYyB1bnNpZ25lZCBhcm1wbXVfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKKworc3RhdGljIGludAorYXJtcG11X21hcF9jYWNoZV9ldmVudCh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGludCBjYWNoZV90eXBlLCBjYWNoZV9vcCwgY2FjaGVfcmVzdWx0LCByZXQ7CisKKwljYWNoZV90eXBlID0gKGNvbmZpZyA+PiAgMCkgJiAweGZmOworCWlmIChjYWNoZV90eXBlID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhY2hlX29wID0gKGNvbmZpZyA+PiAgOCkgJiAweGZmOworCWlmIChjYWNoZV9vcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYWNoZV9yZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisJaWYgKGNhY2hlX3Jlc3VsdCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gKGludClhcm1wbXVfcGVyZl9jYWNoZV9tYXBbY2FjaGVfdHlwZV1bY2FjaGVfb3BdW2NhY2hlX3Jlc3VsdF07CisKKwlpZiAocmV0ID09IENBQ0hFX09QX1VOU1VQUE9SVEVEKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCQlpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKGxlZnQgPiAoczY0KWFybXBtdS0+bWF4X3BlcmlvZCkKKwkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZDsKKworCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKKworCWFybXBtdS0+d3JpdGVfY291bnRlcihpZHgsICh1NjQpKC1sZWZ0KSAmIDB4ZmZmZmZmZmYpOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU2NAorYXJtcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCSAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgaW50IGlkeCkKK3sKKwlpbnQgc2hpZnQgPSA2NCAtIDMyOworCXM2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKwlzNjQgZGVsdGE7CisKK2FnYWluOgorCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwluZXdfcmF3X2NvdW50ID0gYXJtcG11LT5yZWFkX2NvdW50ZXIoaWR4KTsKKworCWlmIChhdG9taWM2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCQkJICAgICBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCkKKwkJZ290byBhZ2FpbjsKKworCWRlbHRhID0gKG5ld19yYXdfY291bnQgPDwgc2hpZnQpIC0gKHByZXZfcmF3X2NvdW50IDw8IHNoaWZ0KTsKKwlkZWx0YSA+Pj0gc2hpZnQ7CisKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOworCisJcmV0dXJuIG5ld19yYXdfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwlXQVJOX09OKGlkeCA8IDApOworCisJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCWFybXBtdS0+ZGlzYWJsZShod2MsIGlkeCk7CisKKwliYXJyaWVyKCk7CisKKwlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOworCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7CisKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwkvKiBEb24ndCByZWFkIGRpc2FibGVkIGNvdW50ZXJzISAqLworCWlmIChod2MtPmlkeCA8IDApCisJCXJldHVybjsKKworCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJLyoKKwkgKiBTZXQgdGhlIHBlcmlvZCBhZ2Fpbi4gU29tZSBjb3VudGVycyBjYW4ndCBiZSBzdG9wcGVkLCBzbyB3aGVuIHdlCisJICogd2VyZSB0aHJvdHRsZWQgd2Ugc2ltcGx5IGRpc2FibGVkIHRoZSBJUlEgc291cmNlIGFuZCB0aGUgY291bnRlcgorCSAqIG1heSBoYXZlIGJlZW4gbGVmdCBjb3VudGluZy4gSWYgd2UgZG9uJ3QgZG8gdGhpcyBzdGVwIHRoZW4gd2UgbWF5CisJICogZ2V0IGFuIGludGVycnVwdCB0b28gc29vbiBvciAqd2F5KiB0b28gbGF0ZSBpZiB0aGUgb3ZlcmZsb3cgaGFzCisJICogaGFwcGVuZWQgc2luY2UgZGlzYWJsaW5nLgorCSAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwlhcm1wbXUtPmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIGludAorYXJtcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4OworCWludCBlcnIgPSAwOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNwYWNlIGZvciB0aGUgY291bnRlciB0aGVuIGZpbmlzaCBlYXJseS4gKi8KKwlpZHggPSBhcm1wbXUtPmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKKwlpZiAoaWR4IDwgMCkgeworCQllcnIgPSBpZHg7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYW4gZXZlbnQgaW4gdGhlIGNvdW50ZXIgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGVuIG1ha2UKKwkgKiBzdXJlIGl0IGlzIGRpc2FibGVkLgorCSAqLworCWV2ZW50LT5ody5pZHggPSBpZHg7CisJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisKKwkvKiBTZXQgdGhlIHBlcmlvZCBmb3IgdGhlIGV2ZW50LiAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisKKwkvKiBFbmFibGUgdGhlIGV2ZW50LiAqLworCWFybXBtdS0+ZW5hYmxlKGh3YywgaWR4KTsKKworCS8qIFByb3BhZ2F0ZSBvdXIgY2hhbmdlcyB0byB0aGUgdXNlcnNwYWNlIG1hcHBpbmcuICovCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJICAgID0gYXJtcG11X2VuYWJsZSwKKwkuZGlzYWJsZSAgICA9IGFybXBtdV9kaXNhYmxlLAorCS51bnRocm90dGxlID0gYXJtcG11X3VudGhyb3R0bGUsCisJLnJlYWQJICAgID0gYXJtcG11X3JlYWQsCit9OworCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50IGZha2VfZXZlbnQgPSBldmVudC0+aHc7CisKKwlpZiAoZXZlbnQtPnBtdSAmJiBldmVudC0+cG11ICE9ICZwbXUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGFybXBtdS0+Z2V0X2V2ZW50X2lkeChjcHVjLCAmZmFrZV9ldmVudCkgPj0gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKworCW1lbXNldCgmZmFrZV9wbXUsIDAsIHNpemVvZihmYWtlX3BtdSkpOworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRU5PU1BDOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9yZXNlcnZlX2hhcmR3YXJlKHZvaWQpCit7CisJaW50IGk7CisJaW50IGVycjsKKworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkgeworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVzZXJ2ZSBwbXVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwbXVfaXJxcyk7CisJfQorCisJaW5pdF9wbXUoKTsKKworCWlmIChwbXVfaXJxcy0+bnVtX2lycXMgPCAxKSB7CisJCXByX2Vycigibm8gaXJxcyBmb3IgUE1VcyBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBtdV9pcnFzLT5udW1faXJxczsgKytpKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKHBtdV9pcnFzLT5pcnFzW2ldLCBhcm1wbXUtPmhhbmRsZV9pcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAiYXJtcG11IiwgTlVMTCk7CisJCWlmIChlcnIpIHsKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBBUk0gIgorCQkJCSAgICJwZXJmIGNvdW50ZXJzXG4iLCBwbXVfaXJxcy0+aXJxc1tpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgLS1pKQorCQkJZnJlZV9pcnEocG11X2lycXMtPmlycXNbaV0sIE5VTEwpOworCQlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJCXBtdV9pcnFzID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3JlbGVhc2VfaGFyZHdhcmUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IHBtdV9pcnFzLT5udW1faXJxcyAtIDE7IGkgPj0gMDsgLS1pKQorCQlmcmVlX2lycShwbXVfaXJxcy0+aXJxc1tpXSwgTlVMTCk7CisJYXJtcG11LT5zdG9wKCk7CisKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJcG11X2lycXMgPSBOVUxMOworfQorCitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50cyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFRklORV9NVVRFWChwbXVfcmVzZXJ2ZV9tdXRleCk7CisKK3N0YXRpYyB2b2lkCitod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfZXZlbnRzLCAmcG11X3Jlc2VydmVfbXV0ZXgpKSB7CisJCWFybXBtdV9yZWxlYXNlX2hhcmR3YXJlKCk7CisJCW11dGV4X3VubG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCX0KK30KKworc3RhdGljIGludAorX19od19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBtYXBwaW5nLCBlcnI7CisKKwkvKiBEZWNvZGUgdGhlIGdlbmVyaWMgdHlwZSBpbnRvIGFuIEFSTSBldmVudCBpZGVudGlmaWVyLiAqLworCWlmIChQRVJGX1RZUEVfSEFSRFdBUkUgPT0gZXZlbnQtPmF0dHIudHlwZSkgeworCQltYXBwaW5nID0gYXJtcG11LT5ldmVudF9tYXAoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwl9IGVsc2UgaWYgKFBFUkZfVFlQRV9IV19DQUNIRSA9PSBldmVudC0+YXR0ci50eXBlKSB7CisJCW1hcHBpbmcgPSBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIGlmIChQRVJGX1RZUEVfUkFXID09IGV2ZW50LT5hdHRyLnR5cGUpIHsKKwkJbWFwcGluZyA9IGFybXBtdS0+cmF3X2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImV2ZW50IHR5cGUgJXggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAobWFwcGluZyA8IDApIHsKKwkJcHJfZGVidWcoImV2ZW50ICV4OiVsbHggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSwKKwkJCSBldmVudC0+YXR0ci5jb25maWcpOworCQlyZXR1cm4gbWFwcGluZzsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBjb3VudGVyIGZyb20gY2VydGFpbiBtb2Rlcy4KKwkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBvbiBhbGwgb2YgdGhlIHRpbWUgc28gaWYgc29tZW9uZQorCSAqIGhhcyBhc2tlZCB1cyBmb3Igc29tZSBleGNsdWRlcyB0aGVuIHdlIGhhdmUgdG8gZmFpbC4KKwkgKi8KKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyIHx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV9pZGxlKSB7CisJCXByX2RlYnVnKCJBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgZG8gbm90IHN1cHBvcnQgIgorCQkJICJtb2RlIGV4Y2x1c2lvblxuIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBhc3NpZ24gYW4gaW5kZXggdW50aWwgd2UgYWN0dWFsbHkgcGxhY2UgdGhlIGV2ZW50IG9udG8KKwkgKiBoYXJkd2FyZS4gVXNlIC0xIHRvIHNpZ25pZnkgdGhhdCB3ZSBoYXZlbid0IGRlY2lkZWQgd2hlcmUgdG8gcHV0IGl0CisJICogeWV0LiBGb3IgU01QIHN5c3RlbXMsIGVhY2ggY29yZSBoYXMgaXQncyBvd24gUE1VIHNvIHdlIGNhbid0IGRvIGFueQorCSAqIGNsZXZlciBhbGxvY2F0aW9uIG9yIGNvbnN0cmFpbnRzIGNoZWNraW5nIGF0IHRoaXMgcG9pbnQuCisJICovCisJaHdjLT5pZHggPSAtMTsKKworCS8qCisJICogU3RvcmUgdGhlIGV2ZW50IGVuY29kaW5nIGludG8gdGhlIGNvbmZpZ19iYXNlIGZpZWxkLiBjb25maWcgYW5kCisJICogZXZlbnRfYmFzZSBhcmUgdW51c2VkIGFzIHRoZSBvbmx5IDIgdGhpbmdzIHdlIG5lZWQgdG8ga25vdyBhcmUKKwkgKiB0aGUgZXZlbnQgbWFwcGluZyBhbmQgdGhlIGNvdW50ZXIgdG8gdXNlLiBUaGUgY291bnRlciB0byB1c2UgaXMKKwkgKiBhbHNvIHRoZSBpbmR4IGFuZCB0aGUgY29uZmlnX2Jhc2UgaXMgdGhlIGV2ZW50IHR5cGUuCisJICovCisJaHdjLT5jb25maWdfYmFzZQkgICAgPSAodW5zaWduZWQgbG9uZyltYXBwaW5nOworCWh3Yy0+Y29uZmlnCQkgICAgPSAwOworCWh3Yy0+ZXZlbnRfYmFzZQkJICAgID0gMDsKKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCWh3Yy0+c2FtcGxlX3BlcmlvZCAgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJCWh3Yy0+bGFzdF9wZXJpb2QgICAgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwl9CisKKwllcnIgPSAwOworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCWVyciA9IHZhbGlkYXRlX2dyb3VwKGV2ZW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN0cnVjdCBwbXUgKgoraHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghYXJtcG11KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfZXZlbnRzKSkgeworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID4gcGVyZl9tYXhfZXZlbnRzKSB7CisJCQlhdG9taWNfZGVjKCZhY3RpdmVfZXZlbnRzKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQl9CisKKwkJbXV0ZXhfbG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID09IDApIHsKKwkJCWVyciA9IGFybXBtdV9yZXNlcnZlX2hhcmR3YXJlKCk7CisJCX0KKworCQlpZiAoIWVycikKKwkJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOworCQltdXRleF91bmxvY2soJnBtdV9yZXNlcnZlX211dGV4KTsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJZXJyID0gX19od19wZXJmX2V2ZW50X2luaXQoZXZlbnQpOworCWlmIChlcnIpCisJCWh3X3BlcmZfZXZlbnRfZGVzdHJveShldmVudCk7CisKKwlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogJnBtdTsKK30KKwordm9pZAoraHdfcGVyZl9lbmFibGUodm9pZCkKK3sKKwkvKiBFbmFibGUgYWxsIG9mIHRoZSBwZXJmIGV2ZW50cyBvbiBoYXJkd2FyZS4gKi8KKwlpbnQgaWR4OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlpZiAoIWFybXBtdSkKKwkJcmV0dXJuOworCisJZm9yIChpZHggPSAwOyBpZHggPD0gYXJtcG11LT5udW1fZXZlbnRzOyArK2lkeCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKworCQlpZiAoIWV2ZW50KQorCQkJY29udGludWU7CisKKwkJYXJtcG11LT5lbmFibGUoJmV2ZW50LT5odywgaWR4KTsKKwl9CisKKwlhcm1wbXUtPnN0YXJ0KCk7Cit9CisKK3ZvaWQKK2h3X3BlcmZfZGlzYWJsZSh2b2lkKQoreworCWlmIChhcm1wbXUpCisJCWFybXBtdS0+c3RvcCgpOworfQorCisvKgorICogQVJNdjYgUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgorICoKKyAqIEFSTXY2IGhhcyAyIGNvbmZpZ3VyYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIFRoZXkgYWxsIHNoYXJlIGEgc2luZ2xlIHJlc2V0IGJpdCBidXQgY2FuIGJlIHdyaXR0ZW4gdG8gemVybyBzbyB3ZSBjYW4gdXNlCisgKiB0aGF0IGZvciBhIHJlc2V0LgorICoKKyAqIFRoZSBjb3VudGVycyBjYW4ndCBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCBzbyB3aGVuIHdlIHJlbW92ZQorICogb25lIGV2ZW50IGFuZCByZXBsYWNlIGl0IHdpdGggYW5vdGhlciB3ZSBjb3VsZCBnZXQgc3B1cmlvdXMgY291bnRzIGZyb20gdGhlCisgKiB3cm9uZyBldmVudC4gSG93ZXZlciwgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlCisgKiBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gZXhwb3J0IGV2ZW50cyB0byB0aGUgZXZlbnQgYnVzLCBhbmQgdGhlIGV2ZW50IGJ1cworICogaXRzZWxmIGNhbiBiZSBtb25pdG9yZWQuIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSAqZG9uJ3QqIGV4cG9ydCB0aGUgZXZlbnRzIHRvCisgKiB0aGUgZXZlbnQgYnVzLiBUaGUgcHJvY2VkdXJlIGZvciBkaXNhYmxpbmcgYSBjb25maWd1cmFibGUgY291bnRlciBpczoKKyAqCS0gY2hhbmdlIHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBFVE1FWFRPVVRbMF0gc2lnbmFsICgweDIwKS4gVGhpcworICoJICBlZmZlY3RpdmVseSBzdG9wcyB0aGUgY291bnRlciBmcm9tIGNvdW50aW5nLgorICoJLSBkaXNhYmxlIHRoZSBjb3VudGVyJ3MgaW50ZXJydXB0IGdlbmVyYXRpb24gKGVhY2ggY291bnRlciBoYXMgaXQncworICoJICBvd24gaW50ZXJydXB0IGVuYWJsZSBiaXQpLgorICogT25jZSBzdG9wcGVkLCB0aGUgY291bnRlciB2YWx1ZSBjYW4gYmUgd3JpdHRlbiBhcyAwIHRvIHJlc2V0LgorICoKKyAqIFRvIGVuYWJsZSBhIGNvdW50ZXI6CisgKgktIGVuYWJsZSB0aGUgY291bnRlcidzIGludGVycnVwdCBnZW5lcmF0aW9uLgorICoJLSBzZXQgdGhlIG5ldyBldmVudCB0eXBlLgorICoKKyAqIE5vdGU6IHRoZSBkZWRpY2F0ZWQgY3ljbGUgY291bnRlciBvbmx5IGNvdW50cyBjeWNsZXMgYW5kIGNhbid0IGJlCisgKiBlbmFibGVkL2Rpc2FibGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVycy4gV2hlbiB3ZSB3YW50IHRvIGRpc2FibGUgdGhlCisgKiBjeWNsZSBjb3VudGVyLCB3ZSBoYXZlIHRvIGp1c3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZyBhbmQgc3RhcnQKKyAqIGlnbm9yaW5nIHRoYXQgY291bnRlci4gV2hlbiByZS1lbmFibGluZywgd2UgaGF2ZSB0byByZXNldCB0aGUgdmFsdWUgYW5kCisgKiBlbmFibGUgdGhlIGludGVycnVwdC4KKyAqLworCitlbnVtIGFybXY2X3BlcmZfdHlwZXMgeworCUFSTVY2X1BFUkZDVFJfSUNBQ0hFX01JU1MJICAgID0gMHgwLAorCUFSTVY2X1BFUkZDVFJfSUJVRl9TVEFMTAkgICAgPSAweDEsCisJQVJNVjZfUEVSRkNUUl9EREVQX1NUQUxMCSAgICA9IDB4MiwKKwlBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUwkJICAgID0gMHgzLAorCUFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTCQkgICAgPSAweDQsCisJQVJNVjZfUEVSRkNUUl9CUl9FWEVDCQkgICAgPSAweDUsCisJQVJNVjZfUEVSRkNUUl9CUl9NSVNQUkVESUNUCSAgICA9IDB4NiwKKwlBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMJICAgID0gMHg3LAorCUFSTVY2X1BFUkZDVFJfRENBQ0hFX0hJVAkgICAgPSAweDksCisJQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCSAgICA9IDB4QSwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTCSAgICA9IDB4QiwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9XQkFDSwkgICAgPSAweEMsCisJQVJNVjZfUEVSRkNUUl9TV19QQ19DSEFOR0UJICAgID0gMHhELAorCUFSTVY2X1BFUkZDVFJfTUFJTl9UTEJfTUlTUwkgICAgPSAweEYsCisJQVJNVjZfUEVSRkNUUl9FWFBMX0RfQUNDRVNTCSAgICA9IDB4MTAsCisJQVJNVjZfUEVSRkNUUl9MU1VfRlVMTF9TVEFMTAkgICAgPSAweDExLAorCUFSTVY2X1BFUkZDVFJfV0JVRl9EUkFJTkVECSAgICA9IDB4MTIsCisJQVJNVjZfUEVSRkNUUl9DUFVfQ1lDTEVTCSAgICA9IDB4RkYsCisJQVJNVjZfUEVSRkNUUl9OT1AJCSAgICA9IDB4MjAsCit9OworCitlbnVtIGFybXY2X2NvdW50ZXJzIHsKKwlBUk1WNl9DWUNMRV9DT1VOVEVSID0gMSwKKwlBUk1WNl9DT1VOVEVSMCwKKwlBUk1WNl9DT1VOVEVSMSwKK307CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZXZlbnRzIHRoYXQgd2Ugc3VwcG9ydC4gV2UgZG8gc3VwcG9ydCBjYWNoZSBvcGVyYXRpb25zIGJ1dAorICogd2UgaGF2ZSBoYXJ2YXJkIGNhY2hlcyBhbmQgbm8gd2F5IHRvIGNvbWJpbmUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEKKyAqIGFjY2Vzc2VzL21pc3NlcyBpbiBoYXJkd2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMsCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjZfUEVSRkNUUl9CUl9FWEVDLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY2X1BFUkZDVFJfQlJfTUlTUFJFRElDVCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12Nl9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTEwpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoRFRMQildID0geworCQkvKgorCQkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGNhbiBjb3VudCBtaWNybyBEVExCIG1pc3NlcywKKwkJICogbWljcm8gSVRMQiBtaXNzZXMgYW5kIG1haW4gVExCIG1pc3Nlcy4gVGhlcmUgaXNuJ3QgYW4gZXZlbnQKKwkJICogZm9yIFRMQiBtaXNzZXMsIHNvIHVzZSB0aGUgbWljcm8gbWlzc2VzIGhlcmUgYW5kIGlmIHVzZXJzCisJCSAqIHdhbnQgdGhlIG1haW4gVExCIG1pc3NlcyB0aGV5IGNhbiB1c2UgYSByYXcgY291bnRlci4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKElUTEIpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworZW51bSBhcm12Nm1wY29yZV9wZXJmX3R5cGVzIHsKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTCSAgICA9IDB4MCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lCVUZfU1RBTEwJICAgID0gMHgxLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRERFUF9TVEFMTAkgICAgPSAweDIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MJICAgID0gMHgzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTCSAgICA9IDB4NCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMJICAgID0gMHg1LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTk9UUFJFRElDVCAgID0gMHg2LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTUlTUFJFRElDVCAgID0gMHg3LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQwkgICAgPSAweDgsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRBQ0NFU1MgPSAweEEsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRNSVNTICAgPSAweEIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JBQ0NFU1MgPSAweEMsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTICAgPSAweEQsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfRVZJQ1RJT04gPSAweEUsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9TV19QQ19DSEFOR0UgICAgPSAweEYsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9NQUlOX1RMQl9NSVNTICAgPSAweDEwLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRVhQTF9NRU1fQUNDRVNTID0gMHgxMSwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0xTVV9GVUxMX1NUQUxMICA9IDB4MTIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9XQlVGX0RSQUlORUQgICAgPSAweDEzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUwkgICAgPSAweEZGLAorfTsKKworLyoKKyAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0CisgKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQorICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZtcGNvcmVfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQywKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9NSVNQUkVESUNULAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0geworCVtDKEwxRCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0KKwkJCQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SREFDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1JETUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1dSQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9CisJCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTDFJKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIFRoZSBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGNvdW50IG1pY3JvIERUTEIgbWlzc2VzLAorCQkgKiBtaWNybyBJVExCIG1pc3NlcyBhbmQgbWFpbiBUTEIgbWlzc2VzLiBUaGVyZSBpc24ndCBhbiBldmVudAorCQkgKiBmb3IgVExCIG1pc3Nlcywgc28gdXNlIHRoZSBtaWNybyBtaXNzZXMgaGVyZSBhbmQgaWYgdXNlcnMKKwkJICogd2FudCB0aGUgbWFpbiBUTEIgbWlzc2VzIHRoZXkgY2FuIHVzZSBhIHJhdyBjb3VudGVyLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FybXY2X3BtY3JfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXJtdjZfcG1jcl93cml0ZSh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAwIiA6IDogInIiKHZhbCkpOworfQorCisjZGVmaW5lIEFSTVY2X1BNQ1JfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBBUk1WNl9QTUNSX0NUUjAxX1JFU0VUCQkoMSA8PCAxKQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9SRVNFVAkJKDEgPDwgMikKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfRElWCQkoMSA8PCAzKQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4JCSgxIDw8IDQpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTgkJKDEgPDwgNSkKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfSUVOCQkoMSA8PCA2KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9PVkVSRkxPVwkoMSA8PCA4KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMV9PVkVSRkxPVwkoMSA8PCA5KQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVwkoMSA8PCAxMCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUCTIwCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9TSElGVCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUCTEyCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9TSElGVCkKKworI2RlZmluZSBBUk1WNl9QTUNSX09WRVJGTE9XRURfTUFTSyBcCisJKEFSTVY2X1BNQ1JfQ09VTlQwX09WRVJGTE9XIHwgQVJNVjZfUE1DUl9DT1VOVDFfT1ZFUkZMT1cgfCBcCisJIEFSTVY2X1BNQ1JfQ0NPVU5UX09WRVJGTE9XKQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtY3IpCit7CisJcmV0dXJuIChwbWNyICYgQVJNVjZfUE1DUl9PVkVSRkxPV0VEX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jciwKKwkJCQkgIGVudW0gYXJtdjZfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCXJldCA9IHBtY3IgJiBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVzsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBjb3VudGVyKQorCQlyZXQgPSBwbWNyICYgQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1c7CisJZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gY291bnRlcikKKwkJcmV0ID0gcG1jciAmIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2FybXY2cG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDEiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDMiIDogIj1yIih2YWx1ZSkpOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FybXY2cG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsCisJCSAgICAgICB1MzIgdmFsdWUpCit7CisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gY291bnRlcikKKwkJYXNtIHZvbGF0aWxlKCJtY3IgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogOiAiciIodmFsdWUpKTsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBjb3VudGVyKQorCQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAzIiA6IDogInIiKHZhbHVlKSk7CisJZWxzZQorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7Cit9CisKK3ZvaWQKK2FybXY2cG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOworCisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CisJCW1hc2sJPSAwOworCQlldnQJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOworCQlldnQJPSAoaHdjLT5jb25maWdfYmFzZSA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQpIHwKKwkJCSAgQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gKGh3Yy0+Y29uZmlnX2Jhc2UgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUKSB8CisJCQkgIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTjsKKwl9IGVsc2UgeworCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogTWFzayBvdXQgdGhlIGN1cnJlbnQgZXZlbnQgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudCB0aGUgZXZlbnQKKwkgKiB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYXJtdjZwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwKKwkJICAgIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWFybXY2X3BtY3JfaGFzX292ZXJmbG93ZWQocG1jcikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCS8qCisJICogVGhlIGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgb3ZlcmZsb3cgZmxhZ3MgYmFjayB0bworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyLiBBbGwgb2YgdGhlIG90aGVyIGJpdHMgZG9uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgdGhleSBhcmUgcmV3cml0dGVuLCBzbyB3cml0ZSB0aGUgd2hvbGUgdmFsdWUgYmFjay4KKwkgKi8KKwlhcm12Nl9wbWNyX3dyaXRlKHBtY3IpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtY3IsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2FybXY2cG11X3N0YXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsIHw9IEFSTVY2X1BNQ1JfRU5BQkxFOworCWFybXY2X3BtY3Jfd3JpdGUodmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCit2b2lkCithcm12NnBtdV9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5BUk1WNl9QTUNSX0VOQUJMRTsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FybXY2cG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZtcGNvcmVfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZtcGNvcmVfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgdTY0Cithcm12NnBtdV9yYXdfZXZlbnQodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYgMHhmZjsKK30KKworc3RhdGljIGludAorYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJICAgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwkvKiBBbHdheXMgcGxhY2UgYSBjeWNsZSBjb3VudGVyIGludG8gdGhlIGN5Y2xlIGNvdW50ZXIuICovCisJaWYgKEFSTVY2X1BFUkZDVFJfQ1BVX0NZQ0xFUyA9PSBldmVudC0+Y29uZmlnX2Jhc2UpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ1lDTEVfQ09VTlRFUiwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXJldHVybiBBUk1WNl9DWUNMRV9DT1VOVEVSOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIGEgY3ljbGUgY291bnRlciwgdHJ5IGFuZCB1c2UKKwkJICogY291bnRlcjAgYW5kIGNvdW50ZXIxLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFSTVY2X0NPVU5URVIxLCBjcHVjLT51c2VkX21hc2spKSB7CisJCQlyZXR1cm4gQVJNVjZfQ09VTlRFUjE7CisJCX0KKworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ09VTlRFUjAsIGNwdWMtPnVzZWRfbWFzaykpIHsKKwkJCXJldHVybiBBUk1WNl9DT1VOVEVSMDsKKwkJfQorCisJCS8qIFRoZSBjb3VudGVycyBhcmUgYWxsIGluIHVzZS4gKi8KKwkJcmV0dXJuIC1FQUdBSU47CisJfQorfQorCitzdGF0aWMgdm9pZAorYXJtdjZwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DQ09VTlRfSUVOOworCQlldnQJPSAwOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjAgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUOworCX0gZWxzZSB7CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBNYXNrIG91dCB0aGUgY3VycmVudCBldmVudCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBudW1iZXIKKwkgKiBvZiBFVE0gYnVzIHNpZ25hbCBhc3NlcnRpb24gY3ljbGVzLiBUaGUgZXh0ZXJuYWwgcmVwb3J0aW5nIHNob3VsZAorCSAqIGJlIGRpc2FibGVkIGFuZCBzbyB0aGlzIHNob3VsZCBuZXZlciBpbmNyZW1lbnQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCithcm12Nm1wY29yZV9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZmxhZ3MsIGV2dCA9IDA7CisKKwlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ0NPVU5UX0lFTjsKKwl9IGVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU47CisJfSBlbHNlIHsKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFVubGlrZSBVUCBBUk12Niwgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBzdG9wcGluZyB0aGUgY291bnRlcnMuIFdlCisJICogc2ltcGx5IGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12NnBtdSA9IHsKKwkubmFtZQkJCT0gInY2IiwKKwkuaGFuZGxlX2lycQkJPSBhcm12NnBtdV9oYW5kbGVfaXJxLAorCS5lbmFibGUJCQk9IGFybXY2cG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhcm12NnBtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudF9tYXAJCT0gYXJtdjZwbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12Nm1wY29yZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHNpbmdsZSBjb3JlIEFSTXY2IHdpdGggdGhlIGV4Y2VwdGlvbgorICogdGhhdCBzb21lIG9mIHRoZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgZW51bWVyYXRpb25zIGFuZCB0aGF0IHRoZXJlIGlzIG5vCisgKiAqaGFjayogdG8gc3RvcCB0aGUgcHJvZ3JhbW1hYmxlIGNvdW50ZXJzLiBUbyBzdG9wIHRoZSBjb3VudGVycyB3ZSBzaW1wbHkKKyAqIGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcgYW5kIHVwZGF0ZSB0aGUgZXZlbnQuIFdoZW4gdW50aHJvdHRsaW5nIHdlCisgKiByZXNldCB0aGUgcGVyaW9kIGFuZCBlbmFibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12Nm1wY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJ2Nm1wY29yZSIsCisJLmhhbmRsZV9pcnEJCT0gYXJtdjZwbXVfaGFuZGxlX2lycSwKKwkuZW5hYmxlCQkJPSBhcm12NnBtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0gYXJtdjZtcGNvcmVfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50X21hcAkJPSBhcm12Nm1wY29yZV9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12NyBDb3J0ZXgtQTggYW5kIENvcnRleC1BOSBQZXJmb3JtYW5jZSBFdmVudHMgaGFuZGxpbmcgY29kZS4KKyAqCisgKiBDb3BpZWQgZnJvbSBBUk12NiBjb2RlLCB3aXRoIHRoZSBsb3cgbGV2ZWwgY29kZSBpbnNwaXJlZAorICogIGJ5IHRoZSBBUk12NyBPcHJvZmlsZSBjb2RlLgorICoKKyAqIENvcnRleC1BOCBoYXMgdXAgdG8gNCBjb25maWd1cmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kCisgKiAgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIENvcnRleC1BOSBoYXMgdXAgdG8gMzEgY29uZmlndXJhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZAorICogIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCisgKgorICogQWxsIGNvdW50ZXJzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFuZCBJUlEgbWFza2VkIHNlcGFyYXRlbHkuIFRoZSBjeWNsZQorICogIGNvdW50ZXIgYW5kIGFsbCA0IHBlcmZvcm1hbmNlIGNvdW50ZXJzIHRvZ2V0aGVyIGNhbiBiZSByZXNldCBzZXBhcmF0ZWx5LgorICovCisKKyNkZWZpbmUgQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FCQkiQVJNdjcgQ29ydGV4LUE4IgorCisjZGVmaW5lIEFSTVY3X1BNVV9DT1JURVhfQTlfTkFNRQkJIkFSTXY3IENvcnRleC1BOSIKKworLyogQ29tbW9uIEFSTXY3IGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfUE1OQ19TV19JTkNSCQk9IDB4MDAsCisJQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUwkJPSAweDAxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTCQkJPSAweDAyLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTAkJPSAweDAzLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUwkJPSAweDA0LAorCUFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwJCT0gMHgwNSwKKwlBUk1WN19QRVJGQ1RSX0RSRUFECQkJPSAweDA2LAorCUFSTVY3X1BFUkZDVFJfRFdSSVRFCQkJPSAweDA3LAorCisJQVJNVjdfUEVSRkNUUl9FWENfVEFLRU4JCQk9IDB4MDksCisJQVJNVjdfUEVSRkNUUl9FWENfRVhFQ1VURUQJCT0gMHgwQSwKKwlBUk1WN19QRVJGQ1RSX0NJRF9XUklURQkJCT0gMHgwQiwKKwkvKiBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFIGlzIGVxdWl2YWxlbnQgdG8gSFdfQlJBTkNIX0lOU1RSVUNUSU9OUy4KKwkgKiBJdCBjb3VudHM6CisJICogIC0gYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMsCisJICogIC0gaW5zdHJ1Y3Rpb25zIHRoYXQgZXhwbGljaXRseSB3cml0ZSB0aGUgUEMsCisJICogIC0gZXhjZXB0aW9uIGdlbmVyYXRpbmcgaW5zdHJ1Y3Rpb25zLgorCSAqLworCUFSTVY3X1BFUkZDVFJfUENfV1JJVEUJCQk9IDB4MEMsCisJQVJNVjdfUEVSRkNUUl9QQ19JTU1fQlJBTkNICQk9IDB4MEQsCisJQVJNVjdfUEVSRkNUUl9VTkFMSUdORURfQUNDRVNTCQk9IDB4MEYsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQJPSAweDEwLAorCUFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTCQk9IDB4MTEsCisKKwlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfVVNFRAk9IDB4MTIsCisKKwlBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMJCT0gMHhGRgorfTsKKworLyogQVJNdjcgQ29ydGV4LUE4IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E4X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSU5TVFJfRVhFQ1VURUQJCT0gMHgwOCwKKworCUFSTVY3X1BFUkZDVFJfUENfUFJPQ19SRVRVUk4JCT0gMHgwRSwKKworCUFSTVY3X1BFUkZDVFJfV1JJVEVfQlVGRkVSX0ZVTEwJCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0wyX1NUT1JFX01FUkdFRAkJPSAweDQxLAorCUFSTVY3X1BFUkZDVFJfTDJfU1RPUkVfQlVGRgkJPSAweDQyLAorCUFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTCQkJPSAweDQzLAorCUFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTCQk9IDB4NDQsCisJQVJNVjdfUEVSRkNUUl9BWElfUkVBRF9DWUNMRVMJCT0gMHg0NSwKKwlBUk1WN19QRVJGQ1RSX0FYSV9XUklURV9DWUNMRVMJCT0gMHg0NiwKKwlBUk1WN19QRVJGQ1RSX01FTU9SWV9SRVBMQVkJCT0gMHg0NywKKwlBUk1WN19QRVJGQ1RSX1VOQUxJR05FRF9BQ0NFU1NfUkVQTEFZCT0gMHg0OCwKKwlBUk1WN19QRVJGQ1RSX0wxX0RBVEFfTUlTUwkJPSAweDQ5LAorCUFSTVY3X1BFUkZDVFJfTDFfSU5TVF9NSVNTCQk9IDB4NEEsCisJQVJNVjdfUEVSRkNUUl9MMV9EQVRBX0NPTE9SSU5HCQk9IDB4NEIsCisJQVJNVjdfUEVSRkNUUl9MMV9ORU9OX0RBVEEJCT0gMHg0QywKKwlBUk1WN19QRVJGQ1RSX0wxX05FT05fQ0FDSF9EQVRBCQk9IDB4NEQsCisJQVJNVjdfUEVSRkNUUl9MMl9ORU9OCQkJPSAweDRFLAorCUFSTVY3X1BFUkZDVFJfTDJfTkVPTl9ISVQJCT0gMHg0RiwKKwlBUk1WN19QRVJGQ1RSX0wxX0lOU1QJCQk9IDB4NTAsCisJQVJNVjdfUEVSRkNUUl9QQ19SRVRVUk5fTUlTX1BSRUQJPSAweDUxLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX0ZBSUxFRAkJPSAweDUyLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX1RBS0VOCQk9IDB4NTMsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfRVhFQ1VURUQJPSAweDU0LAorCUFSTVY3X1BFUkZDVFJfT1BfRVhFQ1VURUQJCT0gMHg1NSwKKwlBUk1WN19QRVJGQ1RSX0NZQ0xFU19JTlNUX1NUQUxMCQk9IDB4NTYsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfSU5TVAkJPSAweDU3LAorCUFSTVY3X1BFUkZDVFJfQ1lDTEVTX05FT05fREFUQV9TVEFMTAk9IDB4NTgsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfTkVPTl9JTlNUX1NUQUxMCT0gMHg1OSwKKwlBUk1WN19QRVJGQ1RSX05FT05fQ1lDTEVTCQk9IDB4NUEsCisKKwlBUk1WN19QRVJGQ1RSX1BNVTBfRVZFTlRTCQk9IDB4NzAsCisJQVJNVjdfUEVSRkNUUl9QTVUxX0VWRU5UUwkJPSAweDcxLAorCUFSTVY3X1BFUkZDVFJfUE1VX0VWRU5UUwkJPSAweDcyLAorfTsKKworLyogQVJNdjcgQ29ydGV4LUE5IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E5X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSkFWQV9IV19CWVRFQ09ERV9FWEVDCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0pBVkFfU1dfQllURUNPREVfRVhFQwk9IDB4NDEsCisJQVJNVjdfUEVSRkNUUl9KQVpFTExFX0JSQU5DSF9FWEVDCT0gMHg0MiwKKworCUFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTCT0gMHg1MCwKKwlBUk1WN19QRVJGQ1RSX0NPSEVSRU5UX0xJTkVfSElUCQk9IDB4NTEsCisKKwlBUk1WN19QRVJGQ1RSX0lDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MCwKKwlBUk1WN19QRVJGQ1RSX0RDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MSwKKwlBUk1WN19QRVJGQ1RSX1RMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYyLAorCUFSTVY3X1BFUkZDVFJfU1RSRVhfRVhFQ1VURURfUEFTU0VECT0gMHg2MywKKwlBUk1WN19QRVJGQ1RSX1NUUkVYX0VYRUNVVEVEX0ZBSUxFRAk9IDB4NjQsCisJQVJNVjdfUEVSRkNUUl9EQVRBX0VWSUNUSU9OCQk9IDB4NjUsCisJQVJNVjdfUEVSRkNUUl9JU1NVRV9TVEFHRV9OT19JTlNUCT0gMHg2NiwKKwlBUk1WN19QRVJGQ1RSX0lTU1VFX1NUQUdFX0VNUFRZCQk9IDB4NjcsCisJQVJNVjdfUEVSRkNUUl9JTlNUX09VVF9PRl9SRU5BTUVfU1RBR0UJPSAweDY4LAorCisJQVJNVjdfUEVSRkNUUl9QUkVESUNUQUJMRV9GVU5DVF9SRVRVUk5TCT0gMHg2RSwKKworCUFSTVY3X1BFUkZDVFJfTUFJTl9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcwLAorCUFSTVY3X1BFUkZDVFJfU0VDT05EX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzEsCisJQVJNVjdfUEVSRkNUUl9MRF9TVF9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcyLAorCUFSTVY3X1BFUkZDVFJfRlBfRVhFQ1VURURfSU5TVAkJPSAweDczLAorCUFSTVY3X1BFUkZDVFJfTkVPTl9FWEVDVVRFRF9JTlNUCT0gMHg3NCwKKworCUFSTVY3X1BFUkZDVFJfUExEX0ZVTExfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODAsCisJQVJNVjdfUEVSRkNUUl9EQVRBX1dSX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgyLAorCUFSTVY3X1BFUkZDVFJfRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgzLAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDg0LAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMgCT0gMHg4NSwKKwlBUk1WN19QRVJGQ1RSX0RNQl9ERVBfU1RBTExfQ1lDTEVTCT0gMHg4NiwKKworCUFSTVY3X1BFUkZDVFJfSU5UR1JfQ0xLX0VOQUJMRURfQ1lDTEVTCT0gMHg4QSwKKwlBUk1WN19QRVJGQ1RSX0RBVEFfRU5HSU5FX0NMS19FTl9DWUNMRVMJPSAweDhCLAorCisJQVJNVjdfUEVSRkNUUl9JU0JfSU5TVAkJCT0gMHg5MCwKKwlBUk1WN19QRVJGQ1RSX0RTQl9JTlNUCQkJPSAweDkxLAorCUFSTVY3X1BFUkZDVFJfRE1CX0lOU1QJCQk9IDB4OTIsCisJQVJNVjdfUEVSRkNUUl9FWFRfSU5URVJSVVBUUwkJPSAweDkzLAorCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX0NPTVBMRVRFRAk9IDB4QTAsCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX1NLSVBQRUQJPSAweEExLAorCUFSTVY3X1BFUkZDVFJfUExFX0ZJRk9fRkxVU0gJCT0gMHhBMiwKKwlBUk1WN19QRVJGQ1RSX1BMRV9SUVNUX0NPTVBMRVRFRAk9IDB4QTMsCisJQVJNVjdfUEVSRkNUUl9QTEVfRklGT19PVkVSRkxPVwkJPSAweEE0LAorCUFSTVY3X1BFUkZDVFJfUExFX1JRU1RfUFJPRwkJPSAweEE1Cit9OworCisvKgorICogQ29ydGV4LUE4IEhXIGV2ZW50cyBtYXBwaW5nCisgKgorICogVGhlIGhhcmR3YXJlIGV2ZW50cyB0aGF0IHdlIHN1cHBvcnQuIFdlIGRvIHN1cHBvcnQgY2FjaGUgb3BlcmF0aW9ucyBidXQKKyAqIHdlIGhhdmUgaGFydmFyZCBjYWNoZXMgYW5kIG5vIHdheSB0byBjb21iaW5lIGluc3RydWN0aW9uIGFuZCBkYXRhCisgKiBhY2Nlc3Nlcy9taXNzZXMgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOF9wZXJmX21hcFtQRVJGX0NPVU5UX0hXX01BWF0gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gQVJNVjdfUEVSRkNUUl9JTlNUUl9FWEVDVVRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKKwlbQyhMMUQpXSA9IHsKKwkJLyoKKwkJICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiByZWFkCisJCSAqIGFuZCB3cml0ZSBhY2Nlc3Nlcy9taXNzZXMgc28gdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LAorCQkgKiBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uIFdyaXRlcyBhbmQgcmVhZHMgZ2V0CisJCSAqIGNvbWJpbmVkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIENvcnRleC1BOSBIVyBldmVudHMgbWFwcGluZworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYTlfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9CisJCQkJCUFSTVY3X1BFUkZDVFJfSU5TVF9PVVRfT0ZfUkVOQU1FX1NUQUdFLAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdICAgID0gQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX0hJVCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkgICAgPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NMT0NLX0NZQ0xFUywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSUZFVENIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIFBlcmYgRXZlbnRzIGNvdW50ZXJzCisgKi8KK2VudW0gYXJtdjdfY291bnRlcnMgeworCUFSTVY3X0NZQ0xFX0NPVU5URVIgCQk9IDEsCS8qIEN5Y2xlIGNvdW50ZXIgKi8KKwlBUk1WN19DT1VOVEVSMAkJCT0gMiwJLyogRmlyc3QgZXZlbnQgY291bnRlciAqLworfTsKKworLyoKKyAqIFRoZSBjeWNsZSBjb3VudGVyIGlzIEFSTVY3X0NZQ0xFX0NPVU5URVIuCisgKiBUaGUgZmlyc3QgZXZlbnQgY291bnRlciBpcyBBUk1WN19DT1VOVEVSMC4KKyAqIFRoZSBsYXN0IGV2ZW50IGNvdW50ZXIgaXMgKEFSTVY3X0NPVU5URVIwICsgYXJtcG11LT5udW1fZXZlbnRzIC0gMSkuCisgKi8KKyNkZWZpbmUJQVJNVjdfQ09VTlRFUl9MQVNUCShBUk1WN19DT1VOVEVSMCArIGFybXBtdS0+bnVtX2V2ZW50cyAtIDEpCisKKy8qCisgKiBBUk12NyBsb3cgbGV2ZWwgUE1OQyBhY2Nlc3MKKyAqLworCisvKgorICogUGVyLUNQVSBQTU5DOiBjb25maWcgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfUE1OQ19FCQkoMSA8PCAwKSAvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfUAkJKDEgPDwgMSkgLyogUmVzZXQgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfQwkJKDEgPDwgMikgLyogQ3ljbGUgY291bnRlciByZXNldCAqLworI2RlZmluZSBBUk1WN19QTU5DX0QJCSgxIDw8IDMpIC8qIENDTlQgY291bnRzIGV2ZXJ5IDY0dGggY3B1IGN5Y2xlICovCisjZGVmaW5lIEFSTVY3X1BNTkNfWAkJKDEgPDwgNCkgLyogRXhwb3J0IHRvIEVUTSAqLworI2RlZmluZSBBUk1WN19QTU5DX0RQCQkoMSA8PCA1KSAvKiBEaXNhYmxlIENDTlQgaWYgbm9uLWludmFzaXZlIGRlYnVnKi8KKyNkZWZpbmUJQVJNVjdfUE1OQ19OX1NISUZUCTExCSAvKiBOdW1iZXIgb2YgY291bnRlcnMgc3VwcG9ydGVkICovCisjZGVmaW5lCUFSTVY3X1BNTkNfTl9NQVNLCTB4MWYKKyNkZWZpbmUJQVJNVjdfUE1OQ19NQVNLCQkweDNmCSAvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBBdmFpbGFibGUgY291bnRlcnMKKyAqLworI2RlZmluZSBBUk1WN19DTlQwIAkJMAkvKiBGaXJzdCBldmVudCBjb3VudGVyICovCisjZGVmaW5lIEFSTVY3X0NDTlQgCQkzMQkvKiBDeWNsZSBjb3VudGVyICovCisKKy8qIFBlcmYgRXZlbnQgdG8gbG93IGxldmVsIGNvdW50ZXJzIG1hcHBpbmcgKi8KKyNkZWZpbmUgQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgJKEFSTVY3X0NPVU5URVIwIC0gQVJNVjdfQ05UMCkKKworLyoKKyAqIENOVEVOUzogY291bnRlcnMgZW5hYmxlIHJlZworICovCisjZGVmaW5lIEFSTVY3X0NOVEVOU19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKKyNkZWZpbmUgQVJNVjdfQ05URU5TX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisKKy8qCisgKiBDTlRFTkM6IGNvdW50ZXJzIGRpc2FibGUgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfQ05URU5DX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19DTlRFTkNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKKworLyoKKyAqIElOVEVOUzogY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0IGVuYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTlNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOU19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogSU5URU5DOiBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHQgZGlzYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTkNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOQ19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogRVZUU0VMOiBFdmVudCBzZWxlY3Rpb24gcmVnCisgKi8KKyNkZWZpbmUJQVJNVjdfRVZUU0VMX01BU0sJMHg3ZgkJLyogTWFzayBmb3Igd3JpdGFibGUgYml0cyAqLworCisvKgorICogU0VMRUNUOiBDb3VudGVyIHNlbGVjdGlvbiByZWcKKyAqLworI2RlZmluZQlBUk1WN19TRUxFQ1RfTUFTSwkweDFmCQkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBGTEFHOiBjb3VudGVycyBvdmVyZmxvdyBmbGFnIHN0YXR1cyByZWcKKyAqLworI2RlZmluZSBBUk1WN19GTEFHX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19GTEFHX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisjZGVmaW5lCUFSTVY3X0ZMQUdfTUFTSwkJMHhmZmZmZmZmZgkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisjZGVmaW5lCUFSTVY3X09WRVJGTE9XRURfTUFTSwlBUk1WN19GTEFHX01BU0sKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFybXY3X3BtbmNfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX3dyaXRlKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZhbCAmPSBBUk1WN19QTU5DX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiA6ICJyIih2YWwpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMpCit7CisJcmV0dXJuIHBtbmMgJiBBUk1WN19PVkVSRkxPV0VEX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfY291bnRlcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMsCisJCQkJCWVudW0gYXJtdjdfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ZXIgPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfQzsKKwllbHNlIGlmICgoY291bnRlciA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGNvdW50ZXIgPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfUChjb3VudGVyKTsKKwllbHNlCisJCXByX2VycigiQ1BVJXUgY2hlY2tpbmcgd3JvbmcgY291bnRlciAlZCBvdmVyZmxvdyBzdGF0dXNcbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcih1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlwcl9lcnIoIkNQVSV1IHNlbGVjdGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl2YWwgPSAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpICYgQVJNVjdfU0VMRUNUX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N3BtdV9yZWFkX2NvdW50ZXIoaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6ICI9ciIgKHZhbHVlKSk7CisJfSBlbHNlCisJCXByX2VycigiQ1BVJXUgcmVhZGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdwbXVfd3JpdGVfY291bnRlcihpbnQgaWR4LCB1MzIgdmFsdWUpCit7CisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6IDogInIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6IDogInIiICh2YWx1ZSkpOworCX0gZWxzZQorCQlwcl9lcnIoIkNQVSV1IHdyaXRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKKwkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKHVuc2lnbmVkIGludCBpZHgsIHUzMiB2YWwpCit7CisJaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpIHsKKwkJdmFsICY9IEFSTVY3X0VWVFNFTF9NQVNLOworCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIodW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiAlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQl2YWwgPSBBUk1WN19DTlRFTlNfQzsKKwllbHNlCisJCXZhbCA9IEFSTVY3X0NOVEVOU19QKGlkeCk7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKHVuc2lnbmVkIGludCBpZHgpCit7CisJdTMyIHZhbDsKKworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZGlzYWJsaW5nIHdyb25nIFBNTkMgY291bnRlciIKKwkJCSIgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJdmFsID0gQVJNVjdfQ05URU5DX0M7CisJZWxzZQorCQl2YWwgPSBBUk1WN19DTlRFTkNfUChpZHgpOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMiIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnModW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOU19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5TX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyh1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBkaXNhYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOQ19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5DX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncyh2b2lkKQoreworCXUzMiB2YWw7CisKKwkvKiBSZWFkICovCisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiAiPXIiICh2YWwpKTsKKworCS8qIFdyaXRlIHRvIGNsZWFyIGZsYWdzICovCisJdmFsICY9IEFSTVY3X0ZMQUdfTUFTSzsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgYXJtdjdfcG1uY19kdW1wX3JlZ3Modm9pZCkKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBjbnQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7CisKKwlmb3IgKGNudCA9IEFSTVY3X0NPVU5URVIwOyBjbnQgPCBBUk1WN19DT1VOVEVSX0xBU1Q7IGNudCsrKSB7CisJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoY250KTsKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWwpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAorCQkJY250LUFSTVY3X0VWRU5UX0NOVF9UT19DTlR4LCB2YWwpOworCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6ICI9ciIgKHZhbCkpOworCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCisJCQljbnQtQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgsIHZhbCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQgYXJtdjdwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudAorCSAqIHRoZSBldmVudCB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIFNldCBldmVudCAoaWYgZGVzdGluZWQgZm9yIFBNTnggY291bnRlcnMpCisJICogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGV2ZW50IGlmIGl0J3MgYSBjeWNsZSBjb3VudAorCSAqLworCWlmIChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXJtdjdfcG1uY193cml0ZV9ldnRzZWwoaWR4LCBod2MtPmNvbmZpZ19iYXNlKTsKKworCS8qCisJICogRW5hYmxlIGludGVycnVwdCBmb3IgdGhpcyBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGlkeCk7CisKKwkvKgorCSAqIEVuYWJsZSBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpZHgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlciBhbmQgaW50ZXJydXB0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0IGZvciB0aGlzIGNvdW50ZXIKKwkgKi8KKwlhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGlkeCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXJtdjdwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgcG1uYzsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwkvKgorCSAqIEdldCBhbmQgcmVzZXQgdGhlIElSUSBmbGFncworCSAqLworCXBtbmMgPSBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKCk7CisKKwkvKgorCSAqIERpZCBhbiBvdmVyZmxvdyBvY2N1cj8KKwkgKi8KKwlpZiAoIWFybXY3X3BtbmNfaGFzX292ZXJmbG93ZWQocG1uYykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qCisJICogSGFuZGxlIHRoZSBjb3VudGVyKHMpIG92ZXJmbG93KHMpCisJICovCisJcmVncyA9IGdldF9pcnFfcmVncygpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjdfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtbmMsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRW5hYmxlIGFsbCBjb3VudGVycyAqLworCWFybXY3X3BtbmNfd3JpdGUoYXJtdjdfcG1uY19yZWFkKCkgfCBBUk1WN19QTU5DX0UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFybXY3cG11X3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KKwlhcm12N19wbW5jX3dyaXRlKGFybXY3X3BtbmNfcmVhZCgpICYgfkFSTVY3X1BNTkNfRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfYThfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjdfYThfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcm12N19hOV9wbXVfZXZlbnRfbWFwKGludCBjb25maWcpCit7CisJaW50IG1hcHBpbmcgPSBhcm12N19hOV9wZXJmX21hcFtjb25maWddOworCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQorCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7CisJcmV0dXJuIG1hcHBpbmc7Cit9CisKK3N0YXRpYyB1NjQgYXJtdjdwbXVfcmF3X2V2ZW50KHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYXJtdjdwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgaWR4OworCisJLyogQWx3YXlzIHBsYWNlIGEgY3ljbGUgY291bnRlciBpbnRvIHRoZSBjeWNsZSBjb3VudGVyLiAqLworCWlmIChldmVudC0+Y29uZmlnX2Jhc2UgPT0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEFSTVY3X0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gQVJNVjdfQ1lDTEVfQ09VTlRFUjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGN5Y2xlIGNvdW50ZXIsIHRyeSBhbmQgdXNlCisJCSAqIHRoZSBldmVudHMgY291bnRlcnMKKwkJICovCisJCWZvciAoaWR4ID0gQVJNVjdfQ09VTlRFUjA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJCXJldHVybiBpZHg7CisJCX0KKworCQkvKiBUaGUgY291bnRlcnMgYXJlIGFsbCBpbiB1c2UuICovCisJCXJldHVybiAtRUFHQUlOOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhcm1fcG11IGFybXY3cG11ID0geworCS5oYW5kbGVfaXJxCQk9IGFybXY3cG11X2hhbmRsZV9pcnEsCisJLmVuYWJsZQkJCT0gYXJtdjdwbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGFybXY3cG11X2Rpc2FibGVfZXZlbnQsCisJLnJhd19ldmVudAkJPSBhcm12N3BtdV9yYXdfZXZlbnQsCisJLnJlYWRfY291bnRlcgkJPSBhcm12N3BtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJCT0gYXJtdjdwbXVfd3JpdGVfY291bnRlciwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12N3BtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJCT0gYXJtdjdwbXVfc3RhcnQsCisJLnN0b3AJCQk9IGFybXY3cG11X3N0b3AsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyB1MzIgX19pbml0IGFybXY3X3Jlc2V0X3JlYWRfcG1uYyh2b2lkKQoreworCXUzMiBuYl9jbnQ7CisKKwkvKiBJbml0aWFsaXplICYgUmVzZXQgUE1OQzogQyBhbmQgUCBiaXRzICovCisJYXJtdjdfcG1uY193cml0ZShBUk1WN19QTU5DX1AgfCBBUk1WN19QTU5DX0MpOworCisJLyogUmVhZCB0aGUgbmIgb2YgQ05UeCBjb3VudGVycyBzdXBwb3J0ZWQgZnJvbSBQTU5DICovCisJbmJfY250ID0gKGFybXY3X3BtbmNfcmVhZCgpID4+IEFSTVY3X1BNTkNfTl9TSElGVCkgJiBBUk1WN19QTU5DX05fTUFTSzsKKworCS8qIEFkZCB0aGUgQ1BVIGN5Y2xlcyBjb3VudGVyIGFuZCByZXR1cm4gKi8KKwlyZXR1cm4gbmJfY250ICsgMTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2luaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNwdWlkID0gcmVhZF9jcHVpZF9pZCgpOworCXVuc2lnbmVkIGxvbmcgaW1wbGVtZW50b3IgPSAoY3B1aWQgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwl1bnNpZ25lZCBsb25nIHBhcnRfbnVtYmVyID0gKGNwdWlkICYgMHhGRkYwKTsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBBUk0gQ1BVcyBpbXBsZW1lbnRlZCBieSBBUk0gYXQgdGhlIG1vbWVudC4gKi8KKwlpZiAoMHg0MSA9PSBpbXBsZW1lbnRvcikgeworCQlzd2l0Y2ggKHBhcnRfbnVtYmVyKSB7CisJCWNhc2UgMHhCMzYwOgkvKiBBUk0xMTM2ICovCisJCWNhc2UgMHhCNTYwOgkvKiBBUk0xMTU2ICovCisJCWNhc2UgMHhCNzYwOgkvKiBBUk0xMTc2ICovCisJCQlhcm1wbXUgPSAmYXJtdjZwbXU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12Nl9wZXJmX2NhY2hlX21hcCwKKwkJCQkJc2l6ZW9mKGFybXY2X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMJPSBhcm12NnBtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhCMDIwOgkvKiBBUk0xMW1wY29yZSAqLworCQkJYXJtcG11ID0gJmFybXY2bXBjb3JlX3BtdTsKKwkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgc2l6ZW9mKGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12Nm1wY29yZV9wbXUubnVtX2V2ZW50czsKKwkJCWJyZWFrOworCQljYXNlIDB4QzA4MDoJLyogQ29ydGV4LUE4ICovCisJCQlhcm12N3BtdS5uYW1lID0gQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FOworCQkJbWVtY3B5KGFybXBtdV9wZXJmX2NhY2hlX21hcCwgYXJtdjdfYThfcGVyZl9jYWNoZV9tYXAsCisJCQkJc2l6ZW9mKGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlhcm12N3BtdS5ldmVudF9tYXAgPSBhcm12N19hOF9wbXVfZXZlbnRfbWFwOworCQkJYXJtcG11ID0gJmFybXY3cG11OworCisJCQkvKiBSZXNldCBQTU5DIGFuZCByZWFkIHRoZSBuYiBvZiBDTlR4IGNvdW50ZXJzCisJCQkgICAgc3VwcG9ydGVkICovCisJCQlhcm12N3BtdS5udW1fZXZlbnRzID0gYXJtdjdfcmVzZXRfcmVhZF9wbW5jKCk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12N3BtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhDMDkwOgkvKiBDb3J0ZXgtQTkgKi8KKwkJCWFybXY3cG11Lm5hbWUgPSBBUk1WN19QTVVfQ09SVEVYX0E5X05BTUU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12N19hOV9wZXJmX2NhY2hlX21hcCwKKwkJCQlzaXplb2YoYXJtdjdfYTlfcGVyZl9jYWNoZV9tYXApKTsKKwkJCWFybXY3cG11LmV2ZW50X21hcCA9IGFybXY3X2E5X3BtdV9ldmVudF9tYXA7CisJCQlhcm1wbXUgPSAmYXJtdjdwbXU7CisKKwkJCS8qIFJlc2V0IFBNTkMgYW5kIHJlYWQgdGhlIG5iIG9mIENOVHggY291bnRlcnMKKwkJCSAgICBzdXBwb3J0ZWQgKi8KKwkJCWFybXY3cG11Lm51bV9ldmVudHMgPSBhcm12N19yZXNldF9yZWFkX3BtbmMoKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IGFybXY3cG11Lm51bV9ldmVudHM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIm5vIGhhcmR3YXJlIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IC0xOworCQl9CisJfQorCisJaWYgKGFybXBtdSkKKwkJcHJfaW5mbygiZW5hYmxlZCB3aXRoICVzIFBNVSBkcml2ZXIsICVkIGNvdW50ZXJzIGF2YWlsYWJsZVxuIiwKKwkJCWFybXBtdS0+bmFtZSwgYXJtcG11LT5udW1fZXZlbnRzKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChpbml0X2h3X3BlcmZfZXZlbnRzKTsKKworLyoKKyAqIENhbGxjaGFpbiBoYW5kbGluZyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LAorCQl1NjQgaXApCit7CisJaWYgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQllbnRyeS0+aXBbZW50cnktPm5yKytdID0gaXA7Cit9CisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgKiBsZW5ndGggc2F2ZWQgcmVnaXN0ZXIgc3RydWN0dXJlLiBUaGUgZnAgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhpcworICogc3RydWN0dXJlIHNvIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RydWN0IGlzOgorICogKHN0cnVjdCBmcmFtZV90YWlsICopKHh4eC0+ZnApLTEKKyAqCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KKyAqLworc3RydWN0IGZyYW1lX3RhaWwgeworCXN0cnVjdCBmcmFtZV90YWlsICAgKmZwOworCXVuc2lnbmVkIGxvbmcJICAgIHNwOworCXVuc2lnbmVkIGxvbmcJICAgIGxyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiBuZXh0IGZyYW1lIHRhaWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCAqCit1c2VyX2JhY2t0cmFjZShzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCwKKwkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOworCisJLyogQWxzbyBjaGVjayBhY2Nlc3NpYmlsaXR5IG9mIG9uZSBzdHJ1Y3QgZnJhbWVfdGFpbCBiZXlvbmQgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJmJ1ZnRhaWwsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCisJCXJldHVybiBOVUxMOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBidWZ0YWlsLmxyKTsKKworCS8qCisJICogRnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCisJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykuCisJICovCisJaWYgKHRhaWwgPj0gYnVmdGFpbC5mcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbDsKKworCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX1VTRVIpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsICopcmVncy0+QVJNX2ZwIC0gMTsKKworCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCisgKiB0aGUgUEMuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBmci0+cGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBzdGFja2ZyYW1lIGZyOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfS0VSTkVMKTsKKwlmci5mcCA9IHJlZ3MtPkFSTV9mcDsKKwlmci5zcCA9IHJlZ3MtPkFSTV9zcDsKKwlmci5sciA9IHJlZ3MtPkFSTV9scjsKKwlmci5wYyA9IHJlZ3MtPkFSTV9wYzsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyLCBjYWxsY2hhaW5fdHJhY2UsIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQKK3BlcmZfZG9fY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCit7CisJaW50IGlzX3VzZXI7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CisKKwlpZiAoIWN1cnJlbnQgfHwgIWN1cnJlbnQtPnBpZCkKKwkJcmV0dXJuOworCisJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3VzZXIpCisJCXBlcmZfY2FsbGNoYWluX2tlcm5lbChyZWdzLCBlbnRyeSk7CisKKwlpZiAoY3VycmVudC0+bW0pCisJCXBlcmZfY2FsbGNoYWluX3VzZXIocmVncywgZW50cnkpOworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKKworc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICoKK3BlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSAmX19nZXRfY3B1X3ZhcihwbWNfaXJxX2VudHJ5KTsKKworCWVudHJ5LT5uciA9IDA7CisJcGVyZl9kb19jYWxsY2hhaW4ocmVncywgZW50cnkpOworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYyBiL2FyY2gvYXJtL2tlcm5lbC9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0MzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9wbXUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3BtdS5oPgorCisvKgorICogRGVmaW5lIHRoZSBJUlFzIGZvciB0aGUgc3lzdGVtLiBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgYSBwbGF0Zm9ybQorICogZGV2aWNlIGJ1dCB0aGF0IHNlZW1zIGZhaXJseSBoZWF2eXdlaWdodCBmb3IgdGhpcy4gQWxzbywgdGhlIHBlcmZvcm1hbmNlCisgKiBjb3VudGVycyBjYW4ndCBiZSByZW1vdmVkIG9yIGhvdHBsdWdnZWQuCisgKgorICogT3JkZXJpbmcgaXMgaW1wb3J0YW50OiBpbml0X3BtdSgpIHdpbGwgdXNlIHRoZSBvcmRlcmluZyB0byBzZXQgdGhlIGFmZmluaXR5CisgKiB0byB0aGUgY29ycmVzcG9uZGluZyBjb3JlLiBlLmcuIHRoZSBmaXJzdCBpbnRlcnJ1cHQgd2lsbCBnbyB0byBjcHUgMCwgdGhlCisgKiBzZWNvbmQgZ29lcyB0byBjcHUgMSBldGMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgaXJxc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisJMywKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQkNNUklORykKKwlJUlFfUE1VSVJRLAorI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19FQikKKwlJUlFfRUIxMU1QX1BNVV9DUFUwLAorCUlSUV9FQjExTVBfUE1VX0NQVTEsCisJSVJRX0VCMTFNUF9QTVVfQ1BVMiwKKwlJUlFfRUIxMU1QX1BNVV9DUFUzLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTCwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU9QMzJYKQorCUlSUV9JT1AzMlhfQ09SRV9QTVUsCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzWCkKKwlJUlFfSU9QMzNYX0NPUkVfUE1VLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisJSVJRX1BNVSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyBwbXVfaXJxcyA9IHsKKwkuaXJxcwkgICAgPSBpcnFzLAorCS5udW1faXJxcyAgID0gQVJSQVlfU0laRShpcnFzKSwKK307CisKK3N0YXRpYyB2b2xhdGlsZSBsb25nIHBtdV9sb2NrOworCitjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKDAsICZwbXVfbG9jaykgPyBFUlJfUFRSKC1FQlVTWSkgOgorCQkmcG11X2lycXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX3BtdSk7CisKK2ludAorcmVsZWFzZV9wbXUoY29uc3Qgc3RydWN0IHBtdV9pcnFzICppcnFzKQoreworCWlmIChXQVJOX09OKGlycXMgIT0gJnBtdV9pcnFzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2xlYXJfYml0X3VubG9jaygwLCAmcG11X2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVsZWFzZV9wbXUpOworCitzdGF0aWMgaW50CitzZXRfaXJxX2FmZmluaXR5KGludCBpcnEsCisJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgZXJyID0gaXJxX3NldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJaWYgKGVycikKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHNldCBpcnEgYWZmaW5pdHkgKGlycT0lZCwgY3B1PSV1KVxuIiwKKwkJCSAgIGlycSwgY3B1KTsKKwlyZXR1cm4gZXJyOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitpbnQKK2luaXRfcG11KHZvaWQpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG11X2lycXMubnVtX2lycXM7ICsraSkgeworCQllcnIgPSBzZXRfaXJxX2FmZmluaXR5KHBtdV9pcnFzLmlycXNbaV0sIGkpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGluaXRfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCBhMmVhMzg1Li4wOGY4OTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC00OTksMTAgKzQ5OSw0MSBAQAogCS5mbgkJPSBicmVha190cmFwLAogfTsKIAorc3RhdGljIGludCB0aHVtYjJfYnJlYWtfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoreworCXVuc2lnbmVkIGludCBpbnN0cjI7CisJdm9pZCBfX3VzZXIgKnBjOworCisJLyogQ2hlY2sgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBpbnN0cnVjdGlvbi4gICovCisJcGMgPSAodm9pZCBfX3VzZXIgKikoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSArIDIpOworCisJaWYgKHByb2Nlc3Nvcl9tb2RlKHJlZ3MpID09IFNWQ19NT0RFKSB7CisJCWluc3RyMiA9ICoodTE2ICopIHBjOworCX0gZWxzZSB7CisJCWdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKilwYyk7CisJfQorCisJaWYgKGluc3RyMiA9PSAweGEwMDApIHsKKwkJcHRyYWNlX2JyZWFrKGN1cnJlbnQsIHJlZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayB0aHVtYjJfYnJlYWtfaG9vayA9IHsKKwkuaW5zdHJfbWFzawk9IDB4ZmZmZiwKKwkuaW5zdHJfdmFsCT0gMHhmN2YwLAorCS5jcHNyX21hc2sJPSBQU1JfVF9CSVQsCisJLmNwc3JfdmFsCT0gUFNSX1RfQklULAorCS5mbgkJPSB0aHVtYjJfYnJlYWtfdHJhcCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB0cmFjZV9icmVha19pbml0KHZvaWQpCiB7CiAJcmVnaXN0ZXJfdW5kZWZfaG9vaygmYXJtX2JyZWFrX2hvb2spOwogCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iX2JyZWFrX2hvb2spOworCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iMl9icmVha19ob29rKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY5LDcgKzcwMCw3IEBACiAJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKIAlzdHJ1Y3QgdXNlcl92ZnAgX191c2VyICp1ZnAgPSBkYXRhOwogCi0JdmZwX3N5bmNfc3RhdGUodGhyZWFkKTsKKwl2ZnBfc3luY19od3N0YXRlKHRocmVhZCk7CiAKIAkvKiBjb3B5IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KIAlpZiAoY29weV90b191c2VyKCZ1ZnAtPmZwcmVncywgJnZmcC0+aGFyZC5mcHJlZ3MsCkBAIC02OTIsNyArNzIzLDcgQEAKIAl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOwogCXN0cnVjdCB1c2VyX3ZmcCBfX3VzZXIgKnVmcCA9IGRhdGE7CiAKLQl2ZnBfc3luY19zdGF0ZSh0aHJlYWQpOworCXZmcF9zeW5jX2h3c3RhdGUodGhyZWFkKTsKIAogCS8qIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwogCWlmIChjb3B5X2Zyb21fdXNlcigmdmZwLT5oYXJkLmZwcmVncywgJnVmcC0+ZnByZWdzLApAQCAtNzAzLDYgKzczNCw4IEBACiAJaWYgKGdldF91c2VyKHZmcC0+aGFyZC5mcHNjciwgJnVmcC0+ZnBzY3IpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCXZmcF9mbHVzaF9od3N0YXRlKHRocmVhZCk7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNzEyLDI2ICs3NDUsMTAgQEAKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7Ci0JCS8qCi0JCSAqIHJlYWQgd29yZCBhdCBsb2NhdGlvbiAiYWRkciIgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCi0JCSAqLwotCQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQkJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6Ci0JCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCQlicmVhazsKLQogCQljYXNlIFBUUkFDRV9QRUVLVVNSOgogCQkJcmV0ID0gcHRyYWNlX3JlYWRfdXNlcihjaGlsZCwgYWRkciwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CiAJCQlicmVhazsKIAotCQkvKgotCQkgKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLgotCQkgKi8KLQkJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6Ci0JCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKIAkJCXJldCA9IHB0cmFjZV93cml0ZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCA2MjFhY2FkLi5jOTFjNzdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VuaWZpZWQuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMTgsNyArMTE5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwogc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgY21kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwogCiBzdGF0aWMgY2hhciBkZWZhdWx0X2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YSA9IENPTkZJR19DTURMSU5FOwogc3RhdGljIHVuaW9uIHsgY2hhciBjWzRdOyB1bnNpZ25lZCBsb25nIGw7IH0gZW5kaWFuX3Rlc3QgX19pbml0ZGF0YSA9IHsgeyAnbCcsICc/JywgJz8nLCAnYicgfSB9OwpAQCAtNDE4LDEwICs0MTksMTEgQEAKICAqIFBpY2sgb3V0IHRoZSBtZW1vcnkgc2l6ZS4gIFdlIGxvb2sgZm9yIG1lbT1zaXplQHN0YXJ0LAogICogd2hlcmUgc3RhcnQgYW5kIHNpemUgYXJlICJzaXplW0trTW1dIgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKipwKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKnApCiB7CiAJc3RhdGljIGludCB1c2VybWVtIF9faW5pdGRhdGEgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RhcnQ7CisJY2hhciAqZW5kcDsKIAogCS8qCiAJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVzIG1lbW9yeSBzaXplLCB3ZQpAQCAtNDM0LDUyICs0MzYsMTUgQEAKIAl9CiAKIAlzdGFydCA9IFBIWVNfT0ZGU0VUOwotCXNpemUgID0gbWVtcGFyc2UoKnAsIHApOwotCWlmICgqKnAgPT0gJ0AnKQotCQlzdGFydCA9IG1lbXBhcnNlKCpwICsgMSwgcCk7CisJc2l6ZSAgPSBtZW1wYXJzZShwLCAmZW5kcCk7CisJaWYgKCplbmRwID09ICdAJykKKwkJc3RhcnQgPSBtZW1wYXJzZShlbmRwICsgMSwgTlVMTCk7CiAKIAlhcm1fYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm1lbT0iLCBlYXJseV9tZW0pOwotCi0vKgotICogSW5pdGlhbCBwYXJzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9jbWRsaW5lKGNoYXIgKipjbWRsaW5lX3AsIGNoYXIgKmZyb20pCi17Ci0JY2hhciBjID0gJyAnLCAqdG8gPSBjb21tYW5kX2xpbmU7Ci0JaW50IGxlbiA9IDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChjID09ICcgJykgewotCQkJZXh0ZXJuIHN0cnVjdCBlYXJseV9wYXJhbXMgX19lYXJseV9iZWdpbiwgX19lYXJseV9lbmQ7Ci0JCQlzdHJ1Y3QgZWFybHlfcGFyYW1zICpwOwotCi0JCQlmb3IgKHAgPSAmX19lYXJseV9iZWdpbjsgcCA8ICZfX2Vhcmx5X2VuZDsgcCsrKSB7Ci0JCQkJaW50IGFyZ2xlbiA9IHN0cmxlbihwLT5hcmcpOwotCi0JCQkJaWYgKG1lbWNtcChmcm9tLCBwLT5hcmcsIGFyZ2xlbikgPT0gMCkgewotCQkJCQlpZiAodG8gIT0gY29tbWFuZF9saW5lKQotCQkJCQkJdG8gLT0gMTsKLQkJCQkJZnJvbSArPSBhcmdsZW47Ci0JCQkJCXAtPmZuKCZmcm9tKTsKLQotCQkJCQl3aGlsZSAoKmZyb20gIT0gJyAnICYmICpmcm9tICE9ICdcMCcpCi0JCQkJCQlmcm9tKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQljID0gKmZyb20rKzsKLQkJaWYgKCFjKQotCQkJYnJlYWs7Ci0JCWlmIChDT01NQU5EX0xJTkVfU0laRSA8PSArK2xlbikKLQkJCWJyZWFrOwotCQkqdG8rKyA9IGM7Ci0JfQotCSp0byA9ICdcMCc7Ci0JKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKLX0KK2Vhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9tZW0pOwogCiBzdGF0aWMgdm9pZCBfX2luaXQKIHNldHVwX3JhbWRpc2soaW50IGRvbG9hZCwgaW50IHByb21wdCwgaW50IGltYWdlX3N0YXJ0LCB1bnNpZ25lZCBpbnQgcmRfc3opCkBAIC03NDAsOSArNzA1LDE1IEBACiAJaW5pdF9tbS5lbmRfZGF0YSAgID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyawkgICA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOwogCi0JbWVtY3B5KGJvb3RfY29tbWFuZF9saW5lLCBmcm9tLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0JYm9vdF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOwotCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBmcm9tKTsKKwkvKiBwYXJzZV9lYXJseV9wYXJhbSBuZWVkcyBhIGJvb3RfY29tbWFuZF9saW5lICovCisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgZnJvbSwgQ09NTUFORF9MSU5FX1NJWkUpOworCisJLyogcG9wdWxhdGUgY21kX2xpbmUgdG9vIGZvciBsYXRlciB1c2UsIHByZXNlcnZpbmcgYm9vdF9jb21tYW5kX2xpbmUgKi8KKwlzdHJsY3B5KGNtZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworCSpjbWRsaW5lX3AgPSBjbWRfbGluZTsKKworCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CisKIAlwYWdpbmdfaW5pdChtZGVzYyk7CiAJcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXMoJm1lbWluZm8sIG1kZXNjKTsKIApAQCAtNzgzLDkgKzc1NCwyMSBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1BST0NfQ1BVCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2NwdV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CisKKwlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChwcm9jX2NwdV9pbml0KTsKKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyW10gPSB7CiAJInN3cCIsCiAJImhhbGYiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggZDM4Y2RmMi4uMjg3NTM4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0xMCwxMSArMTAsNiBAQAogICoKICAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEFSTS1zcGVjaWZpYyB0aW1lIGhhbmRsaW5nIGRldGFpbHM6CiAgKiAgcmVhZGluZyB0aGUgUlRDIGF0IGJvb3R1cCwgZXRjLi4uCi0gKgotICogIDE5OTQtMDctMDIgIEFsYW4gTW9kcmEKLSAqICAgICAgICAgICAgICBmaXhlZCBzZXRfcnRjX21tc3MsIGZpeGVkIHRpbWUueWVhciBmb3IgPj0gMjAwMCwgbmV3IG1rdGltZQotICogIDE5OTgtMTItMjAgIFVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAnOTYKLSAqICAgICAgICAgICAgICAiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscwogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NywxMSArNzIsNiBAQAogRVhQT1JUX1NZTUJPTChwcm9maWxlX3BjKTsKICNlbmRpZgogCi0vKgotICogaG9vayBmb3Igc2V0dGluZyB0aGUgUlRDJ3MgaWRlYSBvZiB0aGUgY3VycmVudCB0aW1lLgotICovCi1pbnQgKCpzZXRfcnRjKSh2b2lkKTsKLQogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkdW1teV9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CkBAIC04OSwxNDAgKzc5LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X3J0Y191cGRhdGU7Ci0KLS8qCi0gKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsbHkgc3luY2hyb25pemVkIGxpbnV4IGNsb2NrLCB0aGVuIHVwZGF0ZQotICogQ01PUyBjbG9jayBhY2NvcmRpbmdseSBldmVyeSB+MTEgbWludXRlcy4gIHNldF9ydGMoKSBoYXMgdG8gYmUKLSAqIGNhbGxlZCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byA1MDAgbXMgYmVmb3JlIHRoZSBuZXcgc2Vjb25kCi0gKiBzdGFydHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19zZXRfcnRjKHZvaWQpCi17Ci0JaWYgKCFudHBfc3luY2VkKCkgfHwgc2V0X3J0YyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAobmV4dF9ydGNfdXBkYXRlICYmCi0JICAgIHRpbWVfYmVmb3JlKCh1bnNpZ25lZCBsb25nKXh0aW1lLnR2X3NlYywgbmV4dF9ydGNfdXBkYXRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHh0aW1lLnR2X25zZWMgPCA1MDAwMDAwMDAgLSAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkgJiYKLQkgICAgeHRpbWUudHZfbnNlYyA+PSA1MDAwMDAwMDAgKyAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkpCi0JCXJldHVybjsKLQotCWlmIChzZXRfcnRjKCkpCi0JCS8qCi0JCSAqIHJ0YyB1cGRhdGUgZmFpbGVkLiAgVHJ5IGFnYWluIGluIDYwcwotCQkgKi8KLQkJbmV4dF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjICsgNjA7Ci0JZWxzZQotCQluZXh0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgKyA2NjA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTEVEUwotCi1zdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKLXsKLX0KLQotdm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7Ci0KLXN0cnVjdCBsZWRzX2V2dF9uYW1lIHsKLQljb25zdCBjaGFyCW5hbWVbOF07Ci0JaW50CQlvbjsKLQlpbnQJCW9mZjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKLQl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAotCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCi0JeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKLQl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAotfTsKLQotc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAotCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKLQotCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCi0JCWxlbi0tOwotCi0JaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKLQkJbGVkc19ldmVudChsZWRfY2xhaW0pOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7Ci0JCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgewotCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8Ci0JCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKLQkJCQlyZXQgPSBzaXplOwotCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7Ci0JCQkJcmV0ID0gc2l6ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7Ci0KLXN0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JbGVkc19ldmVudChsZWRfaGFsdGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGVkcyIsCi0JLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKLQkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1kZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKLQotRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19sZWRzKHZvaWQpCiB7CkBAIC0yOTUsMzkgKzE1MSw2IEBACiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KIAotLyoqCi0gKiBzYXZlX3RpbWVfZGVsdGEgLSBTYXZlIHRoZSBvZmZzZXQgYmV0d2VlbiBzeXN0ZW0gdGltZSBhbmQgUlRDIHRpbWUKLSAqIEBkZWx0YTogcG9pbnRlciB0byB0aW1lc3BlYyB0byBzdG9yZSBkZWx0YQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICoKLSAqIFJldHVybiBhIGRlbHRhIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgUlRDIHRpbWUsIHN1Y2gKLSAqIHRoYXQgc3lzdGVtIHRpbWUgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggcmVzdG9yZV90aW1lX2RlbHRhKCkKLSAqLwotdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpCi17Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoZGVsdGEsCi0JCQkJeHRpbWUudHZfc2VjIC0gcnRjLT50dl9zZWMsCi0JCQkJeHRpbWUudHZfbnNlYyAtIHJ0Yy0+dHZfbnNlYyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNhdmVfdGltZV9kZWx0YSk7Ci0KLS8qKgotICogcmVzdG9yZV90aW1lX2RlbHRhIC0gUmVzdG9yZSB0aGUgY3VycmVudCBzeXN0ZW0gdGltZQotICogQGRlbHRhOiBkZWx0YSByZXR1cm5lZCBieSBzYXZlX3RpbWVfZGVsdGEoKQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICovCi12b2lkIHJlc3RvcmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0YykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHMsCi0JCQkJZGVsdGEtPnR2X3NlYyArIHJ0Yy0+dHZfc2VjLAotCQkJCWRlbHRhLT50dl9uc2VjICsgcnRjLT50dl9uc2VjKTsKLQotCWRvX3NldHRpbWVvZmRheSgmdHMpOwotfQotRVhQT1JUX1NZTUJPTChyZXN0b3JlX3RpbWVfZGVsdGEpOwotCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKgogICogS2VybmVsIHN5c3RlbSB0aW1lciBzdXBwb3J0LgpAQCAtMzM2LDcgKzE1OSw2IEBACiB7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCWRvX2xlZHMoKTsKLQlkb19zZXRfcnRjKCk7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAJZG9fdGltZXIoMSk7CiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggM2YzNjFhNy4uMTYyMWU1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEyLDE1ICsxMiwxNyBAQAogICogICdsaW51eC9hcmNoL2FybS9saWIvdHJhcHMuUycuICBNb3N0bHkgYSBkZWJ1Z2dpbmcgYWlkLCBidXQgd2lsbCBwcm9iYWJseQogICogIGtpbGwgdGhlIG9mZmVuZGluZyBwcm9jZXNzLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC0yMjQsMTQgKzIyNiwyMSBAQAogI2RlZmluZSBTX1NNUCAiIgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgaW50IGVyciwgc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2RpZShjb25zdCBjaGFyICpzdHIsIGludCBlcnIsIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOworCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKIAlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CisKKwkvKiB0cmFwIGFuZCBlcnJvciBudW1iZXJzIGFyZSBtb3N0bHkgbWVhbmluZ2xlc3Mgb24gQVJNICovCisJcmV0ID0gbm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIHRzay0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpOworCWlmIChyZXQgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybiByZXQ7CisKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlByb2Nlc3MgJS4qcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKQEAgLTI0Myw2ICsyNTIsOCBAQAogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwogCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CkBAIC0yNTAsMTYgKzI2MSwyMSBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkIGFnYWluc3QgcmUtZW50cmFuY3kuCiAgKi8KLU5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycikKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJaW50IHJldDsKIAogCW9vcHNfZW50ZXIoKTsKIAogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKLQlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKwlyZXQgPSBfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKworCWlmIChyZWdzICYmIGtleGVjX3Nob3VsZF9jcmFzaCh0aHJlYWQtPnRhc2spKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKKwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMjY3LDExICsyODMsMTAgQEAKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKLQogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7Ci0KLQlkb19leGl0KFNJR1NFR1YpOworCWlmIChyZXQgIT0gTk9USUZZX1NUT1ApCisJCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKIHZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDk1N2UxM2UuLmIxNmMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00MywxMCArNDMsNiBAQAogCiAJCUlOSVRfU0VUVVAoMTYpCiAKLQkJX19lYXJseV9iZWdpbiA9IC47Ci0JCQkqKC5lYXJseV9wYXJhbS5pbml0KQotCQlfX2Vhcmx5X2VuZCA9IC47Ci0KIAkJSU5JVF9DQUxMUwogCQlDT05fSU5JVENBTEwKIAkJU0VDVVJJVFlfSU5JVENBTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDBiNjM1MWQuLmE5Y2FjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlICJoYXJkd2FyZS5oIgotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAwYjJlZTk1Li4yZGI0M2E1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtODksNiArODksMTIgQEAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCiAKK2NvbmZpZyBBUkNIX0FUNTcyRDk0MEhGCisJYm9vbCAiQVQ1NzJEOTQwSEYiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBBUkNIX0FUOTFYNDAKIAlib29sICJBVDkxeDQwIgogCkBAIC0zOTAsNiArMzk2LDIzIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitpZiBBUkNIX0FUNTcyRDk0MEhGCisKK2NvbW1lbnQgIkFUNTcyRDk0MEhGIEJvYXJkIFR5cGUiCisKK2NvbmZpZyBNQUNIX0FUNTcyRDk0MEhGRUIKKwlib29sICJBVDU3MkQ5NDBIRi1FSyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ1NzJEOTQwSEYKKwlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECisJc2VsZWN0IEhBVkVfTkFORF9BVE1FTF9CVVNXSURUSF8xNgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDU3MkQ5NDBIRi1FSyBldmFsdWF0aW9uIGtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9wcm9kdWN0cy9kaW9wc2lzL2RlZmF1bHQuYXNwPgorCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogaWYgQVJDSF9BVDkxWDQwCiAKIGNvbW1lbnQgIkFUOTFYNDAgQm9hcmQgVHlwZSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCA3MDlmYmFkLi4wMjdkZDU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vICBzYW05X3NtYy5vCiAgb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCSs9IGF0OTFzYW05ZzQ1Lm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05ZzQ1X2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxQ0FQOSkJKz0gYXQ5MWNhcDkubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MWNhcDlfZGV2aWNlcy5vIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKSAgKz0gYXQ1NzJkOTQwaGYubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ1NzJkOTQwaGZfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFYNDApCSs9IGF0OTF4NDAubyBhdDkxeDQwX3RpbWUubwogCiAjIEFUOTFSTTkyMDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydApAQCAtNjksNiArNzAsOSBAQAogIyBBVDkxQ0FQOSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxQ0FQOUFESykJKz0gYm9hcmQtY2FwOWFkay5vCiAKKyMgQVQ1NzJEOTQwSEYgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfQVQ1NzJEOTQwSEZFQikgKz0gYm9hcmQtYXQ1NzJkOTQwaGZfZWsubworCiAjIEFUOTFYNDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUVCMDEpCSs9IGJvYXJkLWViMDEubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjljNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCisgKgorICogQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDU3MmQ5NDBoZl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NZUywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TWVMpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIEFUNTcyRDk0MEhGX1NSQU1fU0laRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUNTcyRDk0MEhGX1NSQU1fQkFTRSksCisJCS5sZW5ndGgJCT0gQVQ1NzJEOTQwSEZfU1JBTV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKKwkubmFtZQkJPSAibWFjYl9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1VTMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7CisJLm5hbWUJCT0gIm1jaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfTUNJLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKKwkubmFtZQkJPSAidWRjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VRFAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0geworCS5uYW1lCQk9ICJzcGkwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TUEkwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKKwkubmFtZQkJPSAic3NjMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfU1NDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0geworCS5uYW1lCQk9ICJzc2MxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TU0MxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjMl9jbGsgPSB7CisJLm5hbWUJCT0gInNzYzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0geworCS5uYW1lCQk9ICJ0YzBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1RDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7CisJLm5hbWUJCT0gInRjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVEMxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKKwkubmFtZQkJPSAidGMyX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKKwkubmFtZQkJPSAib2hjaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVUhQLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjM19jbGsgPSB7CisJLm5hbWUJCT0gInNzYzNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbjBfY2xrID0geworCS5uYW1lCQk9ICJjYW4wX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9DQU4wLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2FuMV9jbGsgPSB7CisJLm5hbWUJCT0gImNhbjFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX0NBTjEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtQWdpY1ZfY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX01TSVJRMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CisJJnBpb0FfY2xrLAorCSZwaW9CX2NsaywKKwkmcGlvQ19jbGssCisJJm1hY2JfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZtbWNfY2xrLAorCSZ1ZGNfY2xrLAorCSZ0d2kwX2NsaywKKwkmc3BpMF9jbGssCisJJnNwaTFfY2xrLAorCSZzc2MwX2NsaywKKwkmc3NjMV9jbGssCisJJnNzYzJfY2xrLAorCSZ0YzBfY2xrLAorCSZ0YzFfY2xrLAorCSZ0YzJfY2xrLAorCSZvaGNpX2NsaywKKwkmc3NjM19jbGssCisJJnR3aTFfY2xrLAorCSZjYW4wX2NsaywKKwkmY2FuMV9jbGssCisJJm1BZ2ljVl9jbGssCisJLyogaXJxMCAuLiBpcnEyICovCit9OworCisvKgorICogVGhlIGZpdmUgcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KKyAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBwY2swID0geworCS5uYW1lCQk9ICJwY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2sxID0geworCS5uYW1lCQk9ICJwY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2syID0geworCS5uYW1lCQk9ICJwY2syIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0syLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMiwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2szID0geworCS5uYW1lCQk9ICJwY2szIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0szLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1BZ2ljVl9tZW1fY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfbWVtX2NsayIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLNCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDQsCit9OworCisvKiBIQ2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBoY2swID0geworCS5uYW1lCQk9ICJoY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBoY2sxID0geworCS5uYW1lCQk9ICJoY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCisJCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKKworCWNsa19yZWdpc3RlcigmcGNrMCk7CisJY2xrX3JlZ2lzdGVyKCZwY2sxKTsKKwljbGtfcmVnaXN0ZXIoJnBjazIpOworCWNsa19yZWdpc3RlcigmcGNrMyk7CisJY2xrX3JlZ2lzdGVyKCZtQWdpY1ZfbWVtX2Nsayk7CisKKwljbGtfcmVnaXN0ZXIoJmhjazApOworCWNsa19yZWdpc3RlcigmaGNrMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgR1BJTworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDU3MmQ5NDBoZl9ncGlvW10gPSB7CisJeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0EsCisJCS5jbG9jawkJPSAmcGlvQV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQiwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0IsCisJCS5jbG9jawkJPSAmcGlvQl9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQywKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0MsCisJCS5jbG9jawkJPSAmcGlvQ19jbGssCisJfQorfTsKKworc3RhdGljIHZvaWQgYXQ1NzJkOTQwaGZfcmVzZXQodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ1NzJEOTQwSEYgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ1NzJkOTQwaGZfaW9fZGVzYywgQVJSQVlfU0laRShhdDU3MmQ5NDBoZl9pb19kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDU3MmQ5NDBoZl9yZXNldDsKKwlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDU3MkQ5NDBIRl9JRF9JUlEwKSB8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTEpCisJCQl8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTIpOworCisJLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KKwlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7CisKKwkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLworCWF0NTcyZDk0MGhmX3JlZ2lzdGVyX2Nsb2NrcygpOworCisJLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KKwlhdDkxX2dwaW9faW5pdChhdDU3MmQ5NDBoZl9ncGlvLCAzKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ1NzJkOTQwaGZfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7CisJNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKwkzLAkvKiBFdGhlcm5ldCAqLworCTYsCS8qIFVTQVJUIDAgKi8KKwk2LAkvKiBVU0FSVCAxICovCisJNiwJLyogVVNBUlQgMiAqLworCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKwk0LAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KKwkwLAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMCAqLworCTYsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNiwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KKwkzLAkvKiBVU0IgSG9zdCBwb3J0ICovCisJMywJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMyAqLworCTAsCS8qIFR3by1XaXJlIEludGVyZmFjZSAxICovCisJMCwJLyogQ0FOIENvbnRyb2xsZXIgMCAqLworCTAsCS8qIENBTiBDb250cm9sbGVyIDEgKi8KKwkwLAkvKiBtQWdpY1YgSEFMVCBsaW5lICovCisJMCwJLyogbUFnaWNWIFNJUlEwIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZXhjZXB0aW9uIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZW5kIG9mIERNQSBsaW5lICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCit9OworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKK3sKKwlpZiAoIXByaW9yaXR5KQorCQlwcmlvcml0eSA9IGF0NTcyZDk0MGhmX2RlZmF1bHRfaXJxX3ByaW9yaXR5OworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyICovCisJYXQ5MV9haWNfaW5pdChwcmlvcml0eSk7CisKKwkvKiBFbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCisJYXQ5MV9ncGlvX2lycV9zZXR1cCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGZfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmMyMGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpAQCAtMCwwICsxLDk3MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZl9kZXZpY2VzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXRtZWwgQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ1NzJkOTQwaGYuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVTQiBIb3N0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91c2JoX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXVzYmhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfdXNiaF9kZXZpY2UpOworCit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgRGV2aWNlIChHYWRnZXQpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV91ZGMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoZGF0YS0+dmJ1c19waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKKwl9CisKKwkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSAqLworCisJdWRjX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3VkY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEV0aGVybmV0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCitzdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBldGhfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0VNQUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9ldGhfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYWNiIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT5waHlfaXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOworCX0KKworCS8qIE9ubHkgUk1JSSBpcyBzdXBwb3J0ZWQgKi8KKwlkYXRhLT5pc19ybWlpID0gMTsKKworCS8qIFBpbnMgdXNlZCBmb3IgUk1JSSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFVFhDS19FUkVGQ0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVJYRFYgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRVJYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTksIDApOwkvKiBFUlgxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIEVSWEVSICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIEVUWEVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMCk7CS8qIEVUWDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJLyogRVRYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBFTURJTyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFTURDICovCisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfZXRoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTFfTU9EVUxFKQorc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX01DSSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9tbWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIGlucHV0L2lycSAqLworCWlmIChkYXRhLT5kZXRfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOworCX0KKwlpZiAoZGF0YS0+d3BfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPndwX3BpbiwgMSk7CisJaWYgKGRhdGEtPnZjY19waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZjY19waW4sIDApOworCisJLyogQ0xLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMiwgMCk7CisKKwkvKiBDTUQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAxKTsKKworCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAxKTsKKwlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMSk7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDEpOworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAxKTsKKwl9CisKKwltbWNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfbW1jX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKKyNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE5BTkRfQkFTRSwKKwkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCWlmIChkYXRhLT5yZHlfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOworCisJLyogY2FyZCBkZXRlY3QgcGluICovCisJaWYgKGRhdGEtPmRldF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJCS8qIEFbMjJdICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CQkvKiBOQU5ET0UgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJCS8qIE5BTkRXRSAqLworCisJbmFuZF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSk7Cit9CisKKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0CisgKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQorICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQzcsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKKwkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQzgsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3R3aV9kZXZpY2UgeworCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BDNywgMSk7CQkvKiBUV0QgKFNEQSkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzcsIDEpOworCisJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzgsIDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl90d2lfZGV2aWNlKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMCBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM3LCAxKTsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM4LCAxKTsKKworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMSBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJCS8qIFRXRCAqLworCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDMjAsIDEpOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEMyMSwgMSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTFfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNQSQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMCwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBMywgQVQ5MV9QSU5fUEE0LCBBVDkxX1BJTl9QQTUsIEFUOTFfUElOX1BBNiB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BDMywgQVQ5MV9QSU5fUEM0LCBBVDkxX1BJTl9QQzUsIEFUOTFfUElOX1BDNiB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMF9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0NTcyZDk0MGhmX3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzAsIDApOwkvKiBTUEkxX01JU08gKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogU1BJMV9NT1NJICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMiwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDU3MmQ5NDBoZl9zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UQ0IsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1RDQiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHRjYl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYl9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQoreworCS8qIHRoaXMgY2hpcCBoYXMgYSBzZXBhcmF0ZSBjbG9jayBhbmQgaXJxIGZvciBlYWNoIFRDIGNoYW5uZWwgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMwX2NsayIsICZhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlLmRldiwgInQwX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzFfY2xrIiwgJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UuZGV2LCAidDFfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMl9jbGsiLCAmYXQ1NzJkOTQwaGZfdGNiX2RldmljZS5kZXYsICJ0Ml9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJUVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQsCisJCS5lbmQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQgKyBTWl8xNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3J0dF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfcnR0IiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydHRfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9ydHRfZGV2aWNlKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFdhdGNoZG9nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV93ZHQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl93ZHRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVBUlQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVLAorCQkuZW5kCT0gQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxX0lEX1NZUywKKwkJLmVuZAk9IEFUOTFfSURfU1lTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMCwKKwkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCisJLnJlZ3MJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVKSwKK307CisKK3N0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfZGJndV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRYRDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkJLyogUlhEMCAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIFJUUzAgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBDVFMwICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7CisJLnVzZV9kbWFfdHgJPSAxLAorCS51c2VfZG1hX3J4CT0gMSwKK307CisKK3N0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3VhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDEpOwkJLyogVFhEMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSAsIDApOwkJLyogUlhEMSAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIFJUUzEgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMSAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91YXJ0Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAxKTsJCS8qIFRYRDIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsJCS8qIFJYRDIgKi8KKworCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTcsIDApOwkvKiBSVFMyICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNiwgMCk7CS8qIENUUzIgKi8KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CS8qIHRoZSBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KKwordm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSAwOgkJLyogREJHVSAqLworCQkJcGRldiA9ICZhdDU3MmQ5NDBoZl9kYmd1X2RldmljZTsKKwkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKKwkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMDoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MF9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMToKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDFfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MV9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMjoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDJfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCX0KKwlwZGV2LT5pZCA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KKworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKQoreworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbcG9ydG5yXTsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKKwkJaWYgKGF0OTFfdWFydHNbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7CisJfQorCisJaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKK30KKworI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBtQWdpYworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19NQUdJQ1YKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbUFnaWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1BNX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfUE1fQkFTRSArIEFUOTFfTUFHSUNfUE1fU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0lfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9JX0JBU0UgKyBBVDkxX01BR0lDX0RNX0lfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0ZfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9GX0JBU0UgKyBBVDkxX01BR0lDX0RNX0ZfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0RCX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfRE1fREJfQkFTRSArIEFUOTFfTUFHSUNfRE1fREJfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1JFR1NfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19SRUdTX0JBU0UgKyBBVDkxX01BR0lDX1JFR1NfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0VYVFBBR0VfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19FWFRQQUdFX0JBU0UgKyBBVDkxX01BR0lDX0VYVFBBR0VfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NSEFMVCwKKwkJLmVuZCAgICA9IEFUNTcyRDk0MEhGX0lEX01IQUxULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NRVhDLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTUVYQywKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTUVETUEsCisJCS5lbmQgICAgPSBBVDU3MkQ5NDBIRl9JRF9NRURNQSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtQWdpY19kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm1BZ2ljIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1BZ2ljX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbUFnaWNfcmVzb3VyY2VzLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21BZ2ljKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtQWdpY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tQWdpYyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYworICogc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CisJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CisJYXQ5MV9hZGRfZGV2aWNlX3RjKCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYWZmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHMxMzA1Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IGViX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxMi41MDAgTUh6IGNyeXN0YWwgKi8KKwlhdDU3MmQ5NDBoZl9pbml0aWFsaXplKDEyMDAwMDAwKTsKKworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzAsIDEsIDApOworCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzEsIDIsIDApOworCisJLyogVVNBUlQyIG9uIHR0eVMzLiAoVHggJiBSeCBvbmx5ICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUNTcyRDk0MEhGX0lEX1VTMiwgMywgMCk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWJfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKworLyoKKyAqIFVTQiBIb3N0IFBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGViX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKKworLyoKKyAqIFVTQiBEZXZpY2UgUG9ydAorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBlYl91ZGNfZGF0YSA9IHsKKwkudmJ1c19waW4JPSAwLAkJLyogbm8gVkJVUyBkZXRlY3Rpb24sVURDIGFsd2F5cyBvbiAqLworCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLworfTsKKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGViX21tY19kYXRhID0geworCS53aXJlNAkJPSAxLAorLyoJLmRldF9waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLndwX3BpbgkJPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLnZjY19waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworfTsKKworCisvKgorICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgZWJfZXRoX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEIyNSwKKwkuaXNfcm1paQk9IDEsCit9OworCisvKgorICogTk9SIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGViX25vcl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiUmF3IEVudmlyb25tZW50IiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl80TSwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJeworCQkubmFtZQkJPSAiT1MgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMyAqIFNaXzFNLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJBUFAgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBub3JfZmxhc2hfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8qIG1pLCBpbnQgaSkgeworfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IGViX25vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWJfbm9yX3BhcnRpdGlvbnMpLAorCS5zZXRfdnBwCT0gbm9yX2ZsYXNoX3NldF92cHAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8wLAorCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzAgKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YSA9ICZub3JfZmxhc2hfZGF0YSwKKwkJCX0sCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGViX25vcl9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMSwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNywKKwkubnJkX3B1bHNlCQk9IDcsCisJLm5jc193cml0ZV9wdWxzZQk9IDcsCisJLm53ZV9wdWxzZQkJPSA3LAorCisJLnJlYWRfY3ljbGUJCT0gOSwKKwkud3JpdGVfY3ljbGUJCT0gOSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUgfCBBVDkxX1NNQ19EQldfMzIsCisJLnRkZl9jeWNsZXMJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25vcih2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAwIChOT1IpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDAsICZlYl9ub3Jfc21jX2NvbmZpZyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZub3JfZmxhc2gpOworfQorCisvKgorICogTkFORCBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBlYl9uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBTWl8xNk0sCisJfSwKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShlYl9uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGViX25hbmRfcGFydGl0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGViX25hbmRfZGF0YSA9IHsKKwkuYWxlCQk9IDIyLAorCS5jbGUJCT0gMjEsCisvKgkuZGV0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkICovCisvKgkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTYsICovCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQTE1LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2KQorCS5idXNfd2lkdGhfMTYJPSAxLAorI2Vsc2UKKwkuYnVzX3dpZHRoXzE2CT0gMCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBlYl9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAxLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKKwkudGRmX2N5Y2xlcwkJPSAxMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGViX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZlYl9uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmViX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIFNQSSBkZXZpY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfSVJRMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRzMTMwNV9wbGF0Zm9ybV9kYXRhIGRzMTMwNl9kYXRhID0geworCS5pc19kczEzMDYJPSB0cnVlLAorCS5lbl8xaHoJCT0gZmFsc2UsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGViX3NwaV9kZXZpY2VzW10gPSB7CisJewkvKiBSVEMgRGFsbGFzIERTMTMwNiAqLworCQkubW9kYWxpYXMJPSAicnRjLWRzMTMwNSIsCisJCS5jaGlwX3NlbGVjdAk9IDMsCisJCS5tb2RlCQk9IFNQSV9DU19ISUdIIHwgU1BJX0NQT0wgfCBTUElfQ1BIQSwKKwkJLm1heF9zcGVlZF9oegk9IDUwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuaXJxCQk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gKHZvaWQgKikgJmRzMTMwNl9kYXRhLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhZmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGViX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWJfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWJfdWRjX2RhdGEpOworCS8qIEkyQyAqLworCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CisJLyogTk9SICovCisJZWJfYWRkX2RldmljZV9ub3IoKTsKKwkvKiBOQU5EICovCisJZWJfYWRkX2RldmljZV9uYW5kKCk7CisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShlYl9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShlYl9zcGlfZGV2aWNlcykpOworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmViX21tY19kYXRhKTsKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJmViX2V0aF9kYXRhKTsKKwkvKiBtQWdpYyAqLworCWF0OTFfYWRkX2RldmljZV9tQWdpYygpOworfQorCitNQUNISU5FX1NUQVJUKEFUNTcyRDk0MEhGRUIsICJBdG1lbCBBVDkxRDk0MEhGLUVCIikKKwkvKiBNYWludGFpbmVyOiBBdG1lbCA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPiAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGViX21hcF9pbywKKwkuaW5pdF9pcnEJPSBlYl9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWJfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmluZGV4IGMwNDJkY2YuLjdmN2RhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qCkBAIC02MjgsNyArNjI5LDcgQEAKIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8CiAJCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CisJCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpIHx8IGNwdV9pc19hdDU3MmQ5NDBoZigpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKIAkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFjYXA5KCkpIHsKQEAgLTcxMSwxMiArNzEyLDEzIEBACiAJLyoKIAkgKiBVU0IgSFMgY2xvY2sgaW5pdAogCSAqLwotCWlmIChjcHVfaGFzX3V0bWkoKSkKKwlpZiAoY3B1X2hhc191dG1pKCkpIHsKIAkJLyoKIAkJICogbXVsdGlwbGllciBpcyBoYXJkLXdpcmVkIHRvIDQwCiAJCSAqIChvYnRhaW4gdGhlIFVTQiBIaWdoIFNwZWVkIDQ4MCBNSHogd2hlbiBpbnB1dCBpcyAxMiBNSHopCiAJCSAqLwogCQl1dG1pX2Nsay5yYXRlX2h6ID0gNDAgKiB1dG1pX2Nsay5wYXJlbnQtPnJhdGVfaHo7CisJfQogCiAJLyoKIAkgKiBVU0IgRlMgY2xvY2sgaW5pdApAQCAtNzQ2LDcgKzc0OCw3IEBACiAJCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KIAkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwogCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsgICAgICAvKiBtZGl2ICovCisJCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgUE1DJ3Mgc3RhbmRhcmQgY2xvY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmluZGV4IDFiYTNiOTUuLjZjZjRiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGNsawkqcGFyZW50OwogCXUzMgkJcG1jX21hc2s7CiAJdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7Ci0JdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLworCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KIAl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwogCXUxNgkJdXNlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggODhlNDEzYi4uNjVjM2RjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTcsNiArMTcsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxY2FwOV9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ1NzJkOTQwaGZfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogCiAgLyogSW50ZXJydXB0cyAqLwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKQEAgLTI3LDYgKzI4LDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTF4NDBfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxY2FwOV9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOworZXh0ZXJuIHZvaWQgX19pbml0IGF0NTcyZDk0MGhmX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9haWNfaW5pdCh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiAKICAvKiBUaW1lciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZi5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWIwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBpbmNsdWRlL21hY2gvYXQ1NzJkOTQwaGYuaAorICoKKyAqIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBVDU3MkQ5NDBIRl9ICisjZGVmaW5lIEFUNTcyRDk0MEhGX0gKKworLyoKKyAqIFBlcmlwaGVyYWwgaWRlbnRpZmllcnMvaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBBVDkxX0lEX0ZJUQkJMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLworI2RlZmluZSBBVDkxX0lEX1NZUwkJMQkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfUElPQQkyCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9QSU9CCTMJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfRU1BQwk1CS8qIE1BQ0IgZXRoZXJuZXQgY29udHJvbGxlciAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9VUzAJNgkvKiBVU0FSVCAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1VTMQk3CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVVMyCTgJLyogVVNBUlQgMiAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9NQ0kJOQkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1VEUAkxMAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVFdJMAkxMQkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TUEkwCTEyCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NQSTEJMTMJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1NDMAkxNAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NTQzEJMTUJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TU0MyCTE2CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVEMwCTE3CS8qIFRpbWVyIENvdW50ZXIgMCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9UQzEJMTgJLyogVGltZXIgQ291bnRlciAxICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1RDMgkxOQkvKiBUaW1lciBDb3VudGVyIDIgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVUhQCTIwCS8qIFVTQiBIb3N0IHBvcnQgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1NDMwkyMQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAzICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1RXSTEJMjIJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfQ0FOMAkyMwkvKiBDQU4gQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX0NBTjEJMjQJLyogQ0FOIENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9NSEFMVAkyNQkvKiBtQWdpY1YgSEFMVCBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01TSVJRMAkyNgkvKiBtQWdpY1YgU0lSUTAgbGluZSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9NRVhDCTI3CS8qIG1BZ2ljViBleGNlcHRpb24gbGluZSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9NRURNQQkyOAkvKiBtQWdpY1YgZW5kIG9mIERNQSBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX0lSUTAJMjkJLyogRXh0ZXJuYWwgSW50ZXJydXB0IFNvdXJjZSAoSVJRMCkgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfSVJRMQkzMAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgU291cmNlIChJUlExKSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9JUlEyCTMxCS8qIEV4dGVybmFsIEludGVycnVwdCBTb3VyY2UgKElSUTIpICovCisKKworLyoKKyAqIFVzZXIgUGVyaXBoZXJhbCBwaHlzaWNhbCBiYXNlIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RDQgkweGZmZmEwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVEMwCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9UQzEJMHhmZmZhMDA0MAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RDMgkweGZmZmEwMDgwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVURQCTB4ZmZmYTQwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9NQ0kJMHhmZmZhODAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RXSTAJMHhmZmZhYzAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1VTMAkweGZmZmIwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVVMxCTB4ZmZmYjQwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9VUzIJMHhmZmZiODAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NTQzAJMHhmZmZiYzAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NTQzEJMHhmZmZjMDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NTQzIJMHhmZmZjNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAJMHhmZmZjODAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEJMHhmZmZjYzAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1NTQzMJMHhmZmZkMDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RXSTEJMHhmZmZkNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMJMHhmZmZkODAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX0NBTjAJMHhmZmZkYzAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX0NBTjEJMHhmZmZlMDAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1lTCQkweGZmZmZlYTAwCisKKworLyoKKyAqIFN5c3RlbSBQZXJpcGhlcmFscyAob2Zmc2V0IGZyb20gQVQ5MV9CQVNFX1NZUykKKyAqLworI2RlZmluZSBBVDkxX1NEUkFNQwkoMHhmZmZmZWEwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU01DCSgweGZmZmZlYzAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9NQVRSSVgJKDB4ZmZmZmVlMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0FJQwkoMHhmZmZmZjAwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfREJHVQkoMHhmZmZmZjIwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElPQQkoMHhmZmZmZjQwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElPQgkoMHhmZmZmZjYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElPQwkoMHhmZmZmZjgwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUE1DCSgweGZmZmZmYzAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SU1RDCSgweGZmZmZmZDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVFQJKDB4ZmZmZmZkMjAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJVAkoMHhmZmZmZmQzMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfV0RUCSgweGZmZmZmZDQwIC0gQVQ5MV9CQVNFX1NZUykKKworI2RlZmluZSBBVDkxX1VTQVJUMAlBVDU3MkQ5NDBIRl9JRF9VUzAKKyNkZWZpbmUgQVQ5MV9VU0FSVDEJQVQ1NzJEOTQwSEZfSURfVVMxCisjZGVmaW5lIEFUOTFfVVNBUlQyCUFUNTcyRDk0MEhGX0lEX1VTMgorCisKKy8qCisgKiBJbnRlcm5hbCBNZW1vcnkuCisgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfU1JBTV9TSVpFCSg0OCAqIFNaXzFLKQkvKiBJbnRlcm5hbCBTUkFNIHNpemUgKDQ4S2IpICovCisKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfUk9NX0JBU0UJMHgwMDQwMDAwMAkvKiBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX1JPTV9TSVpFCVNaXzMySwkJLyogSW50ZXJuYWwgUk9NIHNpemUgKDMyS2IpICovCisKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfVUhQX0JBU0UJMHgwMDUwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZl9tYXRyaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc1MWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZl9tYXRyaXguaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGluY2x1ZGUvbWFjaC8vYXQ1NzJkOTQwaGZfbWF0cml4LmgKKyAqCisgKiBBbnRvbmlvIFIuIENvc3RhIDxjb3N0YS5hbnRvbmlvckBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXRtZWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIEFUNTcyRDk0MEhGX01BVFJJWF9ICisjZGVmaW5lIEFUNTcyRDk0MEhGX01BVFJJWF9ICisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzAJKEFUOTFfTUFUUklYICsgMHgwMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDA0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcyCShBVDkxX01BVFJJWCArIDB4MDgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzMJKEFUOTFfTUFUUklYICsgMHgwQykJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDEwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc1CShBVDkxX01BVFJJWCArIDB4MTQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDUgKi8KKworI2RlZmluZQkJQVQ5MV9NQVRSSVhfVUxCVAkoNyA8PCAwKQkvKiBVbmRlZmluZWQgTGVuZ3RoIEJ1cnN0IFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0lORklOSVRFCSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSU5HTEUJCSgxIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9GT1VSCQkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfRUlHSFQJCSgzIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSVhURUVOCSg0IDw8IDApCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzAJKEFUOTFfTUFUUklYICsgMHg0MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcxCShBVDkxX01BVFJJWCArIDB4NDQpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDQ4KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzMJKEFUOTFfTUFUUklYICsgMHg0QykJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc0CShBVDkxX01BVFJJWCArIDB4NTApCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfU0xPVF9DWUNMRQkJKDB4ZmYgPDwgMCkJLyogTWF4aW11bSBOdW1iZXIgb2YgQWxsb3dlZCBDeWNsZXMgZm9yIGEgQnVyc3QgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRQkoMyAgICA8PCAxNikJLyogRGVmYXVsdCBNYXN0ZXIgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9OT05FCSgwIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9MQVNUCSgxIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9GSVhFRAkoMiA8PCAxNikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0ZJWEVEX0RFRk1TVFIJKDB4NyAgPDwgMTgpCS8qIEZpeGVkIEluZGV4IG9mIERlZmF1bHQgTWFzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9BUkJUCQkoMyAgICA8PCAyNCkJLyogQXJiaXRyYXRpb24gVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0FSQlRfUk9VTkRfUk9CSU4JKDAgPDwgMjQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQVJCVF9GSVhFRF9QUklPUklUWQkoMSA8PCAyNCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMAkoQVQ5MV9NQVRSSVggKyAweDgwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMxCShBVDkxX01BVFJJWCArIDB4ODgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzIJKEFUOTFfTUFUUklYICsgMHg5MCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMwkoQVQ5MV9NQVRSSVggKyAweDk4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM0CShBVDkxX01BVFJJWCArIDB4QTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDQgKi8KKworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTBQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDAgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00xUFIJCSgzIDw8IDQpCS8qIE1hc3RlciAxIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMlBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMiBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTNQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAzIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNFBSCQkoMyA8PCAxNikJLyogTWFzdGVyIDQgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX001UFIJCSgzIDw8IDIwKQkvKiBNYXN0ZXIgNSBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTZQUgkJKDMgPDwgMjQpCS8qIE1hc3RlciA2IFByaW9yaXR5ICovCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTVJDUgkoQVQ5MV9NQVRSSVggKyAweDEwMCkJLyogTWFzdGVyIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjAJCSgxIDw8IDApCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMCAoQVJNOTI2RUotUyBJbnN0cnVjdGlvbiBNYXN0ZXIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IxCQkoMSA8PCAxKQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDEgKEFSTTkyNkVKLVMgRGF0YSBNYXN0ZXIpICovCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMAkoQVQ5MV9NQVRSSVggKyAweDExMCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjEJKEFUOTFfTUFUUklYICsgMHgxMTQpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlIyCShBVDkxX01BVFJJWCArIDB4MTE4KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMwkoQVQ5MV9NQVRSSVggKyAweDExQykJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjQJKEFUOTFfTUFUUklYICsgMHgxMjApCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI1CShBVDkxX01BVFJJWCArIDB4MTI0KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSNgkoQVQ5MV9NQVRSSVggKyAweDEyOCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA2ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjcJKEFUOTFfTUFUUklYICsgMHgxMkMpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgNyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI4CShBVDkxX01BVFJJWCArIDB4MTMwKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDggKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSOQkoQVQ5MV9NQVRSSVggKyAweDEzNCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA5ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjEwCShBVDkxX01BVFJJWCArIDB4MTM4KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDEwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjExCShBVDkxX01BVFJJWCArIDB4MTNDKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDExICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjEyCShBVDkxX01BVFJJWCArIDB4MTQwKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDEyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjEzCShBVDkxX01BVFJJWCArIDB4MTQ0KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDEzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjE0CShBVDkxX01BVFJJWCArIDB4MTQ4KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDE0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjE1CShBVDkxX01BVFJJWCArIDB4MTRDKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDE1ICovCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIC8gYml0cyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIERhdGFzaGVldCAoUmV2aXNpb24gQSkKKyAqLworCisjZGVmaW5lIEFUOTFfTUFUUklYX1RDUgkJKEFUOTFfTUFUUklYICsgMHgxMDApCS8qIFRDTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9JVENNX1NJWkUJCSgweGYgPDwgMCkJLyogU2l6ZSBvZiBJVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8wCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMTYJCSg1IDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8zMgkJKDYgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzY0CQkoNyA8PCAwKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRFRDTV9TSVpFCQkoMHhmIDw8IDQpCS8qIFNpemUgb2YgRFRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMAkJKDAgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9EVENNXzE2CQkoNSA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMzIJCSg2IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV82NAkJKDcgPDwgNCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9FQklDU0EJKEFUOTFfTUFUUklYICsgMHgxMUMpCS8qIEVCSSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzFBCQkoMSA8PCAxKQkvKiBDaGlwIFNlbGVjdCAxIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzFBX1NNQwkJKDAgPDwgMSkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0NTM0EJCSgxIDw8IDMpCS8qIENoaXAgU2VsZWN0IDMgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTM0FfU01DCQkoMCA8PCAzKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0NTNEEJCSgxIDw8IDQpCS8qIENoaXAgU2VsZWN0IDQgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNEFfU01DCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNEFfU01DX0NGMQkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1M1QQkJKDEgPDwgNSkJLyogQ2hpcCBTZWxlY3QgNSBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M1QV9TTUMJCSgwIDw8IDUpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M1QV9TTUNfQ0YyCSgxIDw8IDUpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3BtYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3BtYy5oCmluZGV4IDY0NTg5ZWEuLmU0NmY5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9wbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUJCUFUOTFfUE1DX1BDSzEJCSgxIDw8ICA5KQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDEgKi8KICNkZWZpbmUJCUFUOTFfUE1DX1BDSzIJCSgxIDw8IDEwKQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDIgKi8KICNkZWZpbmUJCUFUOTFfUE1DX1BDSzMJCSgxIDw8IDExKQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDMgKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BDSzQJCSgxIDw8IDEyKQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDQgW0FUNTcyRDk0MEhGIG9ubHldICovCiAjZGVmaW5lCQlBVDkxX1BNQ19IQ0swCQkoMSA8PCAxNikJCS8qIEFIQiBDbG9jayAoVVNCIGhvc3QpIFtBVDkxU0FNOTI2MSBvbmx5XSAqLwogI2RlZmluZQkJQVQ5MV9QTUNfSENLMQkJKDEgPDwgMTcpCQkvKiBBSEIgQ2xvY2sgKExDRCkgW0FUOTFTQU05MjYxIG9ubHldICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCBiYjZmNmE3Li5jZWFlYzZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC04Nyw3ICs4Nyw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzIwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFDQVA5KSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKKwl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKQogI2RlZmluZSBldGhfcGxhdGZvcm1fZGF0YQlhdDkxX2V0aF9kYXRhCiAjZW5kaWYKIApAQCAtMjA1LDYgKzIwNSw5IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2xlZHMoc3RydWN0IGdwaW9fbGVkICpsZWRzLCBpbnQgbnIpOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfcHdtX2xlZHMoc3RydWN0IGdwaW9fbGVkICpsZWRzLCBpbnQgbnIpOwogCisgLyogQVQ1NzJEOTQwSEYgRFNQICovCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21BZ2ljKHZvaWQpOworCiAvKiBGSVhNRTogdGhpcyBuZWVkcyBhIGJldHRlciBsb2NhdGlvbiwgYnV0IGdldHMgc3R1ZmYgYnVpbGRpbmcgYWdhaW4gKi8KIGV4dGVybiBpbnQgYXQ5MV9zdXNwZW5kX2VudGVyaW5nX3Nsb3dfY2xvY2sodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGMyMmRmMzAuLjVhMDY1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzMsNiArMzMsOCBAQAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUyNTYJMHgzMjlhOTNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEU1MTIJMHgzMjlhYTNhMAogCisjZGVmaW5lIEFSQ0hfSURfQVQ1NzJEOTQwSEYJMHgwZTAzMDNlMAorCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MU00MDgwMAkweDE0MDgwMDQ0CiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVI0MDgwNwkweDQ0MDgwNzQ2CiAjZGVmaW5lIEFSQ0hfSURfQVQ5MU00MDgwNwkweDE0MDgwNzQ1CkBAIC0xNDEsNiArMTQzLDEyIEBACiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZDKCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUNTcyRDk0MEhGCisjZGVmaW5lIGNwdV9pc19hdDU3MmQ5NDBoZigpIChhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ1NzJEOTQwSEYpCisjZWxzZQorI2RlZmluZSBjcHVfaXNfYXQ1NzJkOTQwaGYoKSAoMCkKKyNlbmRpZgorCiAvKgogICogU2luY2UgdGhpcyBpcyBBUk0sIHdlIHdpbGwgbmV2ZXIgcnVuIG9uIGFueSBBVlIzMiBDUFUuIEJ1dCB0aGVzZQogICogZGVmaW5pdGlvbnMgbWF5IHJlZHVjZSBjbHV0dGVyIGluIGNvbW1vbiBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDI5MDUyYmEuLjllNzUwYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX2RiZ3UuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPShBVDkxX0JBU0VfU1lTICsgQVQ5MV9EQkdVKQkJQCBTeXN0ZW0gcGVyaXBoZXJhbHMgKHBoeXMgYWRkcmVzcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBhMGRmOGIwLi4zZDY0YTc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxY2FwOS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDU3MkQ5NDBIRikKKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmLmg+CiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBBVDkxIHByb2Nlc3NvciIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDMxYWMyZDkuLjA1YTZlOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTgyLDYgKzgyLDExIEBACiAjZGVmaW5lIEFUOTFYNDBfTUFTVEVSX0NMT0NLCTQwMDAwMDAwCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFYNDBfTUFTVEVSX0NMT0NLKQogCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKQorCisjZGVmaW5lIEFUNTcyRDk0MEhGX01BU1RFUl9DTE9DSwk4MDAwMDAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDU3MkQ5NDBIRl9NQVNURVJfQ0xPQ0svMTYpCisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCmluZGV4IGU1OTBiYmUuLjcyZTQwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYwpAQCAtMTQyLDggKzE0Miw3IEBACiAKIAljaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRW5hYmxlKGJ1c19jbG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDY0YmFmOWYuLmZlZGQ4MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgI0NMUFM3MTExX1BIWVNfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZwppbmRleCAwMzNiZmVkLi4wZWJlMTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZwpAQCAtOTEsMTAgKzkxLDE0IEBACiAJYm9vbCAiVEkgRE02NDY3IEVWTSIKIAlkZWZhdWx0IEFSQ0hfREFWSU5DSV9ETTY0NngKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NngKKwlzZWxlY3QgTUFDSF9EQVZJTkNJX0RNNjQ2N1RFVk0KIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE02NDY3IEVWTQogCitjb25maWcgTUFDSF9EQVZJTkNJX0RNNjQ2N1RFVk0KKwlib29sCisKIGNvbmZpZyBNQUNIX0RBVklOQ0lfRE0zNjVfRVZNCiAJYm9vbCAiVEkgRE0zNjUgRVZNIgogCWRlZmF1bHQgQVJDSF9EQVZJTkNJX0RNMzY1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUKaW5kZXggZWViOTIzMC4uNmFhYzg4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfTkVVUk9TX09TRDIpCQkrPSBib2FyZC1uZXVyb3Mtb3NkMi5vCiBvYmotJChDT05GSUdfTUFDSF9EQVZJTkNJX0RNMzU1X0VWTSkJKz0gYm9hcmQtZG0zNTUtZXZtLm8KIG9iai0kKENPTkZJR19NQUNIX0RNMzU1X0xFT1BBUkQpCSs9IGJvYXJkLWRtMzU1LWxlb3BhcmQubwotb2JqLSQoQ09ORklHX01BQ0hfREFWSU5DSV9ETTY0NjdfRVZNKQkrPSBib2FyZC1kbTY0NngtZXZtLm8KK29iai0kKENPTkZJR19NQUNIX0RBVklOQ0lfRE02NDY3X0VWTSkJKz0gYm9hcmQtZG02NDZ4LWV2bS5vIGNkY2U5NDkubwogb2JqLSQoQ09ORklHX01BQ0hfREFWSU5DSV9ETTM2NV9FVk0pCSs9IGJvYXJkLWRtMzY1LWV2bS5vCiBvYmotJChDT05GSUdfTUFDSF9EQVZJTkNJX0RBODMwX0VWTSkJKz0gYm9hcmQtZGE4MzAtZXZtLm8KIG9iai0kKENPTkZJR19NQUNIX0RBVklOQ0lfREE4NTBfRVZNKQkrPSBib2FyZC1kYTg1MC1ldm0ubwpAQCAtMzQsMyArMzQsNCBAQAogIyBQb3dlciBNYW5hZ2VtZW50CiBvYmotJChDT05GSUdfQ1BVX0ZSRVEpCQkJKz0gY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfQ1BVX0lETEUpCQkJKz0gY3B1aWRsZS5vCitvYmotJChDT05GSUdfU1VTUEVORCkJCQkrPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCAzMWRjOTkwLi5kYzE5ODcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkgKiBTZXQgdXAgVVNCIGNsb2NrL21vZGUgaW4gdGhlIENGR0NISVAyIHJlZ2lzdGVyLgogCSAqIEZZSTogIENGR0NISVAyIGlzIDB4MDAwMGVmMDAgaW5pdGlhbGx5LgogCSAqLwotCWNmZ2NoaXAyID0gX19yYXdfcmVhZGwoREE4WFhfU1lTQ0ZHX1ZJUlQoREE4WFhfQ0ZHQ0hJUDJfUkVHKSk7CisJY2ZnY2hpcDIgPSBfX3Jhd19yZWFkbChEQThYWF9TWVNDRkcwX1ZJUlQoREE4WFhfQ0ZHQ0hJUDJfUkVHKSk7CiAKIAkvKiBVU0IyLjAgUEhZIHJlZmVyZW5jZSBjbG9jayBpcyAyNCBNSHogKi8KIAljZmdjaGlwMiAmPSB+Q0ZHQ0hJUDJfUkVGRlJFUTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCWNmZ2NoaXAyIHw9ICBDRkdDSElQMl9TRVNFTkRFTiB8IENGR0NISVAyX1ZCRFRDVEVOOwogI2VuZGlmCiAKLQlfX3Jhd193cml0ZWwoY2ZnY2hpcDIsIERBOFhYX1NZU0NGR19WSVJUKERBOFhYX0NGR0NISVAyX1JFRykpOworCV9fcmF3X3dyaXRlbChjZmdjaGlwMiwgREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0NGR0NISVAyX1JFRykpOwogCiAJLyogVVNCX1JFRkNMS0lOIGlzIG5vdCB1c2VkLiAqLwogCXJldCA9IGRhdmluY2lfY2ZnX3JlZyhEQTgzMF9VU0IwX0RSVlZCVVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCmluZGV4IDA3ZGU4ZGIuLjQxMTI4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKQEAgLTQ2LDggKzQ2LDIwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYTg1MF9ldm1fbm9yZmxhc2hfcGFydGl0aW9uW10gPSB7CiAJewotCQkubmFtZSAgICAgICAgICAgPSAiTk9SIGZpbGVzeXN0ZW0iLAorCQkubmFtZSAgICAgICAgICAgPSAiYm9vdGxvYWRlcnMgKyBlbnYiLAogCQkub2Zmc2V0ICAgICAgICAgPSAwLAorCQkuc2l6ZSAgICAgICAgICAgPSBTWl81MTJLLAorCQkubWFza19mbGFncyAgICAgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJeworCQkubmFtZSAgICAgICAgICAgPSAia2VybmVsIiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgICAgPSBTWl8yTSwKKwkJLm1hc2tfZmxhZ3MgICAgID0gMCwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gImZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCiAJCS5tYXNrX2ZsYWdzICAgICA9IDAsCiAJfSwKQEAgLTc3LDYgKzg5LDE4IEBACiAJLnJlc291cmNlCT0gZGE4NTBfZXZtX25vcmZsYXNoX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyBkYTg1MF9wbV9wZGF0YSA9IHsKKwkuc2xlZXBjb3VudCA9IDEyOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhODUwX3BtX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAicG0tZGF2aW5jaSIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZGE4NTBfcG1fcGRhdGEsCisJfSwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKK307CisKIC8qIERBODUwL09NQVAtTDEzOCBFVk0gaW5jbHVkZXMgYSA1MTIgTUJ5dGUgbGFyZ2UtcGFnZSBOQU5EIGZsYXNoCiAgKiAoMTI4SyBibG9ja3MpLiBJdCBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSAoZGVmYXVsdCkgU1BJIGZsYXNoCiAgKiB0byBib290LCB1c2luZyBUSSdzIHRvb2xzIHRvIGluc3RhbGwgdGhlIHNlY29uZGFyeSBib290IGxvYWRlcgpAQCAtMTE5LDYgKzE0Myw3IEBACiAJLnBhcnRzCQk9IGRhODUwX2V2bV9uYW5kZmxhc2hfcGFydGl0aW9uLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGE4NTBfZXZtX25hbmRmbGFzaF9wYXJ0aXRpb24pLAogCS5lY2NfbW9kZQk9IE5BTkRfRUNDX0hXLAorCS5lY2NfYml0cwk9IDQsCiAJLm9wdGlvbnMJPSBOQU5EX1VTRV9GTEFTSF9CQlQsCiB9OwogCkBAIC01MzcsNyArNTYyLDcgQEAKIAlpZiAoIW1hY2hpbmVfaXNfZGF2aW5jaV9kYTg1MF9ldm0oKSkKIAkJcmV0dXJuIDA7CiAKLQljZmdfY2hpcDNfYmFzZSA9IERBOFhYX1NZU0NGR19WSVJUKERBOFhYX0NGR0NISVAzX1JFRyk7CisJY2ZnX2NoaXAzX2Jhc2UgPSBEQThYWF9TWVNDRkcwX1ZJUlQoREE4WFhfQ0ZHQ0hJUDNfUkVHKTsKIAogCXZhbCA9IF9fcmF3X3JlYWRsKGNmZ19jaGlwM19iYXNlKTsKIApAQCAtNjk2LDYgKzcyMSwxMSBAQAogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBjcHVpZGxlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CisKKwlyZXQgPSBkYTg1MF9yZWdpc3Rlcl9wbSgmZGE4NTBfcG1fZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogc3VzcGVuZCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOwogfQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYwppbmRleCAwNzdlY2Y0Li5hYTQ4ZTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5jCkBAIC0xMTEsNiArMTExLDggQEAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9pMmNfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CiAJLmJ1c19mcmVxCT0gNDAwCS8qIGtIeiAqLywKIAkuYnVzX2RlbGF5CT0gMAkvKiB1c2VjICovLAorCS5zZGFfcGluICAgICAgICA9IDE1LAorCS5zY2xfcGluICAgICAgICA9IDE0LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSBkbTM1NV9ldm1fc25kX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKaW5kZXggYjQ3NjM5NS4uZDE1YmVjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM3LDYgKzM5LDggQEAKICNpbmNsdWRlIDxtYWNoL25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL2tleXNjYW4uaD4KIAorI2luY2x1ZGUgPG1lZGlhL3R2cDUxNHguaD4KKwogc3RhdGljIGlubGluZSBpbnQgaGF2ZV9pbWFnZXIodm9pZCkKIHsKIAkvKiBSRVZJU0lUIHdoZW4gaXQncyBzdXBwb3J0ZWQsIHRyaWdnZXIgdmlhIEtjb25maWcgKi8KQEAgLTMwNiw2ICszMTAsNzMgQEAKIAlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfU0QxX0RBVEEwKTsKIH0KIAorc3RhdGljIHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgdHZwNTE0Nl9wZGF0YSA9IHsKKwkuY2xrX3BvbGFyaXR5ID0gMCwKKwkuaHNfcG9sYXJpdHkgPSAxLAorCS52c19wb2xhcml0eSA9IDEKK307CisKKyNkZWZpbmUgVFZQNTE0WF9TVERfQUxMICAgICAgICAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCkKKy8qIElucHV0cyBhdmFpbGFibGUgYXQgdGhlIFRWUDUxNDYgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCB0dnA1MTQ2X2lucHV0c1tdID0geworCXsKKwkJLmluZGV4ID0gMCwKKwkJLm5hbWUgPSAiQ29tcG9zaXRlIiwKKwkJLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAorCQkuc3RkID0gVFZQNTE0WF9TVERfQUxMLAorCX0sCisJeworCQkuaW5kZXggPSAxLAorCQkubmFtZSA9ICJTLVZpZGVvIiwKKwkJLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAorCQkuc3RkID0gVFZQNTE0WF9TVERfQUxMLAorCX0sCit9OworCisvKgorICogdGhpcyBpcyB0aGUgcm91dGUgaW5mbyBmb3IgY29ubmVjdGluZyBlYWNoIGlucHV0IHRvIGRlY29kZXIKKyAqIG91cHV0IHRoYXQgZ29lcyB0byB2cGZlLiBUaGVyZSBpcyBhIG9uZSB0byBvbmUgY29ycmVzcG9uZGVuY2UKKyAqIHdpdGggdHZwNTE0Nl9pbnB1dHMKKyAqLworc3RhdGljIHN0cnVjdCB2cGZlX3JvdXRlIHR2cDUxNDZfcm91dGVzW10gPSB7CisJeworCQkuaW5wdXQgPSBJTlBVVF9DVkJTX1ZJMkIsCisJCS5vdXRwdXQgPSBPVVRQVVRfMTBCSVRfNDIyX0VNQkVEREVEX1NZTkMsCisJfSwKK3sKKwkJLmlucHV0ID0gSU5QVVRfU1ZJREVPX1ZJMkNfVkkxQywKKwkJLm91dHB1dCA9IE9VVFBVVF8xMEJJVF80MjJfRU1CRURERURfU1lOQywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2cGZlX3N1YmRldl9pbmZvIHZwZmVfc3ViX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gInR2cDUxNDYiLAorCQkuZ3JwX2lkID0gMCwKKwkJLm51bV9pbnB1dHMgPSBBUlJBWV9TSVpFKHR2cDUxNDZfaW5wdXRzKSwKKwkJLmlucHV0cyA9IHR2cDUxNDZfaW5wdXRzLAorCQkucm91dGVzID0gdHZwNTE0Nl9yb3V0ZXMsCisJCS5jYW5fcm91dGUgPSAxLAorCQkuY2NkY19pZl9wYXJhbXMgPSB7CisJCQkuaWZfdHlwZSA9IFZQRkVfQlQ2NTYsCisJCQkuaGRwb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJCS52ZHBvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQl9LAorCQkuYm9hcmRfaW5mbyA9IHsKKwkJCUkyQ19CT0FSRF9JTkZPKCJ0dnA1MTQ2IiwgMHg1ZCksCisJCQkucGxhdGZvcm1fZGF0YSA9ICZ0dnA1MTQ2X3BkYXRhLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnIHZwZmVfY2ZnID0geworCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUodnBmZV9zdWJfZGV2cyksCisJLnN1Yl9kZXZzID0gdnBmZV9zdWJfZGV2cywKKwkuaTJjX2FkYXB0ZXJfaWQgPSAxLAorCS5jYXJkX25hbWUgPSAiRE0zNjUgRVZNIiwKKwkuY2NkYyA9ICJJU0lGIiwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBldm1faW5pdF9pMmModm9pZCkKIHsKIAlkYXZpbmNpX2luaXRfaTJjKCZpMmNfcGRhdGEpOwpAQCAtNDk3LDkgKzU2OCwyOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG0zNjVfZXZtX21hcF9pbyh2b2lkKQogeworCS8qIHNldHVwIGlucHV0IGNvbmZpZ3VyYXRpb24gZm9yIFZQRkUgaW5wdXQgZGV2aWNlcyAqLworCWRtMzY1X3NldF92cGZlX2NvbmZpZygmdnBmZV9jZmcpOwogCWRtMzY1X2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzcGlfZWVwcm9tIGF0MjU2NDAgPSB7CisJLmJ5dGVfbGVuCT0gU1pfNjRLIC8gOCwKKwkubmFtZQkJPSAiYXQyNTY0MCIsCisJLnBhZ2Vfc2l6ZQk9IDMyLAorCS5mbGFncwkJPSBFRV9BRERSMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZG0zNjVfZXZtX3NwaV9pbmZvW10gX19pbml0Y29uc3QgPSB7CisJeworCQkubW9kYWxpYXMJPSAiYXQyNSIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmF0MjU2NDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxMCAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tb2RlCQk9IFNQSV9NT0RFXzAsCisJfSwKK307CisKIHN0YXRpYyBfX2luaXQgdm9pZCBkbTM2NV9ldm1faW5pdCh2b2lkKQogewogCWV2bV9pbml0X2kyYygpOwpAQCAtNTE2LDYgKzYwNyw5IEBACiAJZG0zNjVfaW5pdF9hc3AoJmRtMzY1X2V2bV9zbmRfZGF0YSk7CiAJZG0zNjVfaW5pdF9ydGMoKTsKIAlkbTM2NV9pbml0X2tzKCZkbTM2NWV2bV9rc19kYXRhKTsKKworCWRtMzY1X2luaXRfc3BpMChCSVQoMCksIGRtMzY1X2V2bV9zcGlfaW5mbywKKwkJCUFSUkFZX1NJWkUoZG0zNjVfZXZtX3NwaV9pbmZvKSk7CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBkbTM2NV9ldm1faXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCmluZGV4IGU5NjEyY2YuLjk3NmUxMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwpAQCAtNjI5LDYgKzYyOSw4IEBACiBzdGF0aWMgc3RydWN0IGRhdmluY2lfaTJjX3BsYXRmb3JtX2RhdGEgaTJjX3BkYXRhID0gewogCS5idXNfZnJlcQk9IDIwIC8qIGtIeiAqLywKIAkuYnVzX2RlbGF5CT0gMTAwIC8qIHVzZWMgKi8sCisJLnNkYV9waW4gICAgICAgID0gNDQsCisJLnNjbF9waW4gICAgICAgID0gNDMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZXZtX2luaXRfaTJjKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDZ4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ2eC1ldm0uYwppbmRleCA4ZDBiMGUwLi41YmEzY2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDZ4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NngtZXZtLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zOSw1NCArNDAsMTMgQEAKICNpbmNsdWRlIDxtYWNoL3NlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvY2RjZTk0OS5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9QQUxNQ0hJUF9CSzM3MTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19CTEtfREVWX1BBTE1DSElQX0JLMzcxMF9NT0RVTEUpCi0jZGVmaW5lIEhBU19BVEEgMQotI2Vsc2UKLSNkZWZpbmUgSEFTX0FUQSAwCi0jZW5kaWYKLQotI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfQ09OVFJPTF9CQVNFCQkweDIwMDA4MDAwCi0jZGVmaW5lIERBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFMF9CQVNFCTB4NDIwMDAwMDAKKyNpbmNsdWRlICJjbG9jay5oIgogCiAjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SwogCi0vKiBDUExEIFJlZ2lzdGVyIDAgYml0cyB0byBjb250cm9sIEFUQSAqLwotI2RlZmluZSBETTY0NlhfRVZNX0FUQV9SU1QJCUJJVCgwKQotI2RlZmluZSBETTY0NlhfRVZNX0FUQV9QV0QJCUJJVCgxKQotCi0jZGVmaW5lIERNNjQ2WF9FVk1fUEhZX01BU0sJCSgweDIpCi0jZGVmaW5lIERNNjQ2WF9FVk1fTURJT19GUkVRVUVOQ1kJKDIyMDAwMDApIC8qIFBIWSBidXMgZnJlcXVlbmN5ICovCi0KLSNkZWZpbmUgVklEQ0xLQ1RMX09GRlNFVAkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM4KQotI2RlZmluZSBWU0NMS0RJU19PRkZTRVQJCShEQVZJTkNJX1NZU1RFTV9NT0RVTEVfQkFTRSArIDB4NmMpCi0jZGVmaW5lIFZDSDJDTEtfTUFTSwkJKEJJVF9NQVNLKDEwKSB8IEJJVF9NQVNLKDkpIHwgQklUX01BU0soOCkpCi0jZGVmaW5lIFZDSDJDTEtfU1lTQ0xLOAkJKEJJVCg5KSkKLSNkZWZpbmUgVkNIMkNMS19BVVhDTEsJCShCSVQoOSkgfCBCSVQoOCkpCi0jZGVmaW5lIFZDSDNDTEtfTUFTSwkJKEJJVF9NQVNLKDE0KSB8IEJJVF9NQVNLKDEzKSB8IEJJVF9NQVNLKDEyKSkKLSNkZWZpbmUgVkNIM0NMS19TWVNDTEs4CQkoQklUKDEzKSkKLSNkZWZpbmUgVkNIM0NMS19BVVhDTEsJCShCSVQoMTQpIHwgQklUKDEzKSkKLQotI2RlZmluZSBWSURDSDJDTEsJCShCSVQoMTApKQotI2RlZmluZSBWSURDSDNDTEsJCShCSVQoMTEpKQotI2RlZmluZSBWSURDSDFDTEsJCShCSVQoNCkpCi0jZGVmaW5lIFRWUDcwMDJfSU5QVVQJCShCSVQoNCkpCi0jZGVmaW5lIFRWUDUxNDdfSU5QVVQJCSh+QklUKDQpKQotI2RlZmluZSBWUElGX0lOUFVUX09ORV9DSEFOTkVMCShCSVQoNSkpCi0jZGVmaW5lIFZQSUZfSU5QVVRfVFdPX0NIQU5ORUwJKH5CSVQoNSkpCi0jZGVmaW5lIFRWUDUxNDdfQ0gwCQkidHZwNTE0eC0wIgotI2RlZmluZSBUVlA1MTQ3X0NIMQkJInR2cDUxNHgtMSIKLQotc3RhdGljIHZvaWQgX19pb21lbSAqdnBpZl92aWRjbGtjdGxfcmVnOwotc3RhdGljIHZvaWQgX19pb21lbSAqdnBpZl92c2Nsa2Rpc19yZWc7Ci0vKiBzcGluIGxvY2sgZm9yIHVwZGF0aW5nIGFib3ZlIHJlZ2lzdGVycyAqLwotc3RhdGljIHNwaW5sb2NrX3QgdnBpZl9yZWdfbG9jazsKLQotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3VhcnRfY29uZmlnIHVhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLmVuYWJsZWRfdWFydHMgPSAoMSA8PCAwKSwKLX07Ci0KIC8qIE5vdGU6IFdlIGFyZSBzZXR0aW5nIGZpcnN0IHBhcnRpdGlvbiBhcyAnYm9vdGxvYWRlcicgY29uc3RpdHV0aW5nIFVCTCwgVS1Cb290CiAgKiBhbmQgVS1Cb290IGVudmlyb25tZW50IHRoaXMgYXZvaWRzIGRlcGVuZGVuY3kgb24gYW55IHBhcnRpY3VsYXIgY29tYmluYXRpb24KICAqIG9mIFVCTCwgVS1Cb290IG9yIGZsYXNoaW5nIHRvb2xzIGV0Yy4KQEAgLTEyMCw2ICs4MCw5IEBACiAJLm9wdGlvbnMJCT0gMCwKIH07CiAKKyNkZWZpbmUgREFWSU5DSV9BU1lOQ19FTUlGX0NPTlRST0xfQkFTRQkJMHgyMDAwODAwMAorI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfREFUQV9DRTBfQkFTRQkweDQyMDAwMDAwCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGF2aW5jaV9uYW5kX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CQk9IERBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFMF9CQVNFLApAQCAtMTQ0LDYgKzEwNywxNyBAQAogCX0sCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9QQUxNQ0hJUF9CSzM3MTApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19CTEtfREVWX1BBTE1DSElQX0JLMzcxMF9NT0RVTEUpCisjZGVmaW5lIEhBU19BVEEgMQorI2Vsc2UKKyNkZWZpbmUgSEFTX0FUQSAwCisjZW5kaWYKKworLyogQ1BMRCBSZWdpc3RlciAwIGJpdHMgdG8gY29udHJvbCBBVEEgKi8KKyNkZWZpbmUgRE02NDZYX0VWTV9BVEFfUlNUCQlCSVQoMCkKKyNkZWZpbmUgRE02NDZYX0VWTV9BVEFfUFdECQlCSVQoMSkKKwogLyogQ1BMRCBSZWdpc3RlciAwIENsaWVudDogdXNlZCBmb3IgSS9PIENvbnRyb2wgKi8KIHN0YXRpYyBpbnQgY3BsZF9yZWcwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCkBAIC00MTcsNiArMzkxLDkgQEAKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJjcGxkX3ZpZGVvIiwgMHgzYiksCiAJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJjZGNlOTQ5IiwgMHg2YyksCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9pMmNfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CkBAIC00MjQsNiArNDAxLDMwIEBACiAJLmJ1c19kZWxheSAgICAgID0gMCAvKiB1c2VjICovLAogfTsKIAorI2RlZmluZSBWSURDTEtDVExfT0ZGU0VUCShEQVZJTkNJX1NZU1RFTV9NT0RVTEVfQkFTRSArIDB4MzgpCisjZGVmaW5lIFZTQ0xLRElTX09GRlNFVAkJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHg2YykKKyNkZWZpbmUgVkNIMkNMS19NQVNLCQkoQklUX01BU0soMTApIHwgQklUX01BU0soOSkgfCBCSVRfTUFTSyg4KSkKKyNkZWZpbmUgVkNIMkNMS19TWVNDTEs4CQkoQklUKDkpKQorI2RlZmluZSBWQ0gyQ0xLX0FVWENMSwkJKEJJVCg5KSB8IEJJVCg4KSkKKyNkZWZpbmUgVkNIM0NMS19NQVNLCQkoQklUX01BU0soMTQpIHwgQklUX01BU0soMTMpIHwgQklUX01BU0soMTIpKQorI2RlZmluZSBWQ0gzQ0xLX1NZU0NMSzgJCShCSVQoMTMpKQorI2RlZmluZSBWQ0gzQ0xLX0FVWENMSwkJKEJJVCgxNCkgfCBCSVQoMTMpKQorCisjZGVmaW5lIFZJRENIMkNMSwkJKEJJVCgxMCkpCisjZGVmaW5lIFZJRENIM0NMSwkJKEJJVCgxMSkpCisjZGVmaW5lIFZJRENIMUNMSwkJKEJJVCg0KSkKKyNkZWZpbmUgVFZQNzAwMl9JTlBVVAkJKEJJVCg0KSkKKyNkZWZpbmUgVFZQNTE0N19JTlBVVAkJKH5CSVQoNCkpCisjZGVmaW5lIFZQSUZfSU5QVVRfT05FX0NIQU5ORUwJKEJJVCg1KSkKKyNkZWZpbmUgVlBJRl9JTlBVVF9UV09fQ0hBTk5FTAkofkJJVCg1KSkKKyNkZWZpbmUgVFZQNTE0N19DSDAJCSJ0dnA1MTR4LTAiCisjZGVmaW5lIFRWUDUxNDdfQ0gxCQkidHZwNTE0eC0xIgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICp2cGlmX3ZpZGNsa2N0bF9yZWc7CitzdGF0aWMgdm9pZCBfX2lvbWVtICp2cGlmX3ZzY2xrZGlzX3JlZzsKKy8qIHNwaW4gbG9jayBmb3IgdXBkYXRpbmcgYWJvdmUgcmVnaXN0ZXJzICovCitzdGF0aWMgc3BpbmxvY2tfdCB2cGlmX3JlZ19sb2NrOworCiBzdGF0aWMgaW50IHNldF92cGlmX2Nsb2NrKGludCBtdXhfbW9kZSwgaW50IGhkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02ODUsMTEgKzY4Niw0NCBAQAogCWV2bV9pbml0X3ZpZGVvKCk7CiB9CiAKKyNkZWZpbmUgQ0RDRTk0OV9YSU5fUkFURQkyNzAwMDAwMAorCisvKiBDRENFOTQ5IHN1cHBvcnQgLSAibHBzYyIgZmllbGQgaXMgb3ZlcnJpZGRlbiB0byB3b3JrIGFzIGNsb2NrIG51bWJlciAqLworc3RhdGljIHN0cnVjdCBjbGsgY2RjZV9jbGtfaW4gPSB7CisJLm5hbWUJPSAiY2RjZV94aW4iLAorCS5yYXRlCT0gQ0RDRTk0OV9YSU5fUkFURSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjZGNlX2Nsa3NbXSA9IHsKKwlDTEsoTlVMTCwgInhpbiIsICZjZGNlX2Nsa19pbiksCisJQ0xLKE5VTEwsIE5VTEwsIE5VTEwpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNkY2VfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqYzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwlmb3IgKGMgPSBjZGNlX2Nsa3M7IGMtPmNsazsgYysrKSB7CisJCWNsayA9IGMtPmNsazsKKwkJY2xrZGV2X2FkZChjKTsKKwkJY2xrX3JlZ2lzdGVyKGNsayk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgZGF2aW5jaV9tYXBfaW8odm9pZCkKIHsKIAlkbTY0NnhfaW5pdCgpOworCWNkY2VfY2xrX2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCBkYXZpbmNpX3VhcnRfY29uZmlnIHVhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoMSA8PCAwKSwKK307CisKKyNkZWZpbmUgRE02NDZYX0VWTV9QSFlfTUFTSwkJKDB4MikKKyNkZWZpbmUgRE02NDZYX0VWTV9NRElPX0ZSRVFVRU5DWQkoMjIwMDAwMCkgLyogUEhZIGJ1cyBmcmVxdWVuY3kgKi8KKwogc3RhdGljIF9faW5pdCB2b2lkIGV2bV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRhdmluY2lfc29jX2luZm8gKnNvY19pbmZvID0gJmRhdmluY2lfc29jX2luZm87CkBAIC03MTMsNiArNzQ3LDE3IEBACiAJZGF2aW5jaV9pcnFfaW5pdCgpOwogfQogCisjZGVmaW5lIERNNjQ2WF9FVk1fUkVGX0ZSRVEJCTI3MDAwMDAwCisjZGVmaW5lIERNNjQ2N1RfRVZNX1JFRl9GUkVRCQkzMzAwMDAwMAorCit2b2lkIF9faW5pdCBkbTY0NnhfYm9hcmRfc2V0dXBfcmVmY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtNjQ2N3Rldm0oKSkKKwkJY2xrLT5yYXRlID0gRE02NDY3VF9FVk1fUkVGX0ZSRVE7CisJZWxzZQorCQljbGstPnJhdGUgPSBETTY0NlhfRVZNX1JFRl9GUkVROworfQorCiBNQUNISU5FX1NUQVJUKERBVklOQ0lfRE02NDY3X0VWTSwgIkRhVmluY2kgRE02NDZ4IEVWTSIpCiAJLnBoeXNfaW8gICAgICA9IElPX1BIWVMsCiAJLmlvX3BnX29mZnN0ICA9IChfX0lPX0FERFJFU1MoSU9fUEhZUykgPj4gMTgpICYgMHhmZmZjLApAQCAtNzIzLDMgKzc2OCwxMyBAQAogCS5pbml0X21hY2hpbmUgPSBldm1faW5pdCwKIE1BQ0hJTkVfRU5ECiAKK01BQ0hJTkVfU1RBUlQoREFWSU5DSV9ETTY0NjdURVZNLCAiRGFWaW5jaSBETTY0NjdUIEVWTSIpCisJLnBoeXNfaW8gICAgICA9IElPX1BIWVMsCisJLmlvX3BnX29mZnN0ICA9IChfX0lPX0FERFJFU1MoSU9fUEhZUykgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgPSAoMHg4MDAwMDEwMCksCisJLm1hcF9pbyAgICAgICA9IGRhdmluY2lfbWFwX2lvLAorCS5pbml0X2lycSAgICAgPSBkYXZpbmNpX2RtNjQ2eF9ldm1faXJxX2luaXQsCisJLnRpbWVyICAgICAgICA9ICZkYXZpbmNpX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBldm1faW5pdCwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jZGNlOTQ5LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2RjZTk0OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzM3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2RjZTk0OS5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogVEkgQ0RDRTk0OSBjbG9jayBzeW50aGVzaXplciBkcml2ZXIKKyAqCisgKiBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgYW4gaW5wdXQgb2YgMjdNSHogdG8gdGhlIENEQ0UuCisgKiBUaGlzIGlzIGJ5IG5vIG1lYW5zIGNvbnN0cmFpbmVkIGJ5IENEQ0UgaGFyZHdhcmUgYWx0aG91Z2ggdGhlIGRhdGFzaGVldAorICogZG9lcyB1c2UgdGhpcyBhcyBhbiBleGFtcGxlIGZvciBhbGwgaWxsdXN0cmF0aW9ucyBhbmQgbW9yZSBpbXBvcnRhbnRseToKKyAqIHRoYXQgaXMgdGhlIGNyeXN0YWwgaW5wdXQgb24gYm9hcmRzIGl0IGlzIGN1cnJlbnRseSB1c2VkIG9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQuIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmNkY2VfaTJjX2NsaWVudDsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2RjZV9tdXRleCk7CisKKy8qIENEQ0UgcmVnaXN0ZXIgZGVzY3JpcHRvciAqLworc3RydWN0IGNkY2VfcmVnIHsKKwl1OAlhZGRyOworCXU4CXZhbDsKK307CisKKy8qIFBlci1PdXRwdXQgKFkxLCBZMiBldGMuKSBmcmVxdWVuY3kgZGVzY3JpcHRvciAqLworc3RydWN0IGNkY2VfZnJlcSB7CisJLyogRnJlcXVlbmN5IGluIEtIeiAqLworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCS8qCisJICogTGlzdCBvZiByZWdpc3RlcnMgdG8gcHJvZ3JhbSB0byBvYnRhaW4gYSBwYXJ0aWN1bGFyIGZyZXF1ZW5jeS4KKwkgKiAweDAgaW4gcmVnaXN0ZXIgYWRkcmVzcyBhbmQgdmFsdWUgaXMgdGhlIGVuZCBvZiBsaXN0IG1hcmtlci4KKwkgKi8KKwlzdHJ1Y3QgY2RjZV9yZWcgKnJlZ2xpc3Q7Cit9OworCisjZGVmaW5lIENEQ0VfRlJFUV9UQUJMRV9FTlRSWShsaW5lLCBvdXQpCQlcCit7CQkJCQkJCVwKKwkucmVnbGlzdAk9IGNkY2VfeSAjI2xpbmUjIyBfICMjb3V0LAkJXAorCS5mcmVxdWVuY3kJPSBvdXQsCQkJCVwKK30KKworLyogTGlzdCBvZiBDRENFIG91dHB1dHMgICovCitzdHJ1Y3QgY2RjZV9vdXRwdXQgeworCS8qIExpc3Qgb2YgZnJlcXVlbmNpZXMgb24gdGhpcyBvdXRwdXQgKi8KKwlzdHJ1Y3QgY2RjZV9mcmVxICpmcmVxX3RhYmxlOworCS8qIE51bWJlciBvZiBwb3NzaWJsZSBmcmVxdWVuY2llcyAqLworCWludCBzaXplOworfTsKKworLyoKKyAqIEZpbmRpbmcgb3V0IHRoZSB2YWx1ZXMgdG8gcHJvZ3JhbSBpbnRvIENEQ0U5NDkgcmVnaXN0ZXJzIGZvciBhIHBhcnRpY3VsYXIKKyAqIGZyZXF1ZW5jeSBvdXRwdXQgaXMgbm90IGEgc2ltcGxlIGNhbGN1bGF0aW9uLiBIYXZlIGEgbG9vayBhdCB0aGUgZGF0YXNoZWV0CisgKiBmb3IgdGhlIGRldGFpbHMuIFRoZXJlIGlzIGRlc2t0b3Agc29mdHdhcmUgYXZhaWxhYmxlIHRvIGhlbHAgdXNlcnMgd2l0aAorICogdGhlIGNhbGN1bGF0aW9ucy4gSGVyZSwgd2UganVzdCBkZXBlbmQgb24gdGhlIG91dHB1dCBvZiB0aGF0IHNvZnR3YXJlCisgKiAob3IgaGFuZCBjYWxjdWxhdGlvbnMpIGluc3RlYWQgdHJ5aW5nIHRvIHJ1bnRpbWUgY2FsY3VsYXRlIHRoZSByZWdpc3RlcgorICogdmFsdWVzIGFuZCBpbmZsaWN0aW5nIG1pc2VyeSBvbiBvdXJzZWx2ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2RjZV9yZWcgY2RjZV95MV8xNDg1MDBbXSA9IHsKKwl7IDB4MTMsIDB4MDAgfSwKKwkvKiBwcm9ncmFtIFBMTDFfMCBtdWx0aXBsaWVyICovCisJeyAweDE4LCAweGFmIH0sCisJeyAweDE5LCAweDUwIH0sCisJeyAweDFhLCAweDAyIH0sCisJeyAweDFiLCAweGM5IH0sCisJLyogcHJvZ3JhbSBQTEwxXzExIG11bHRpcGxpZXIgKi8KKwl7IDB4MWMsIDB4MDAgfSwKKwl7IDB4MWQsIDB4NDAgfSwKKwl7IDB4MWUsIDB4MDIgfSwKKwl7IDB4MWYsIDB4YzkgfSwKKwkvKiBvdXRwdXQgc3RhdGUgc2VsZWN0aW9uICovCisJeyAweDE1LCAweDAwIH0sCisJeyAweDE0LCAweGVmIH0sCisJLyogc3dpdGNoIE1VWCB0byBQTEwxIG91dHB1dCAqLworCXsgMHgxNCwgMHg2ZiB9LAorCXsgMHgxNiwgMHgwNiB9LAorCS8qIHNldCBQMkRJViBkaXZpZGVyLCBQM0RJViBhbmQgaW5wdXQgY3J5c3RhbCAqLworCXsgMHgxNywgMHgwNiB9LAorCXsgMHgwMSwgMHgwMCB9LAorCXsgMHgwNSwgMHg0OCB9LAorCXsgMHgwMiwgMHg4MCB9LAorCS8qIGVuYWJsZSBhbmQgZGlzYWJsZSBQTEwgKi8KKwl7IDB4MDIsIDB4YmMgfSwKKwl7IDB4MDMsIDB4MDEgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IGNkY2VfcmVnIGNkY2VfeTFfNzQyNTBbXSA9IHsKKwl7IDB4MTMsIDB4MDAgfSwKKwl7IDB4MTgsIDB4YWYgfSwKKwl7IDB4MTksIDB4NTAgfSwKKwl7IDB4MWEsIDB4MDIgfSwKKwl7IDB4MWIsIDB4YzkgfSwKKwl7IDB4MWMsIDB4MDAgfSwKKwl7IDB4MWQsIDB4NDAgfSwKKwl7IDB4MWUsIDB4MDIgfSwKKwl7IDB4MWYsIDB4YzkgfSwKKwkvKiBvdXRwdXQgc3RhdGUgc2VsZWN0aW9uICovCisJeyAweDE1LCAweDAwIH0sCisJeyAweDE0LCAweGVmIH0sCisJLyogc3dpdGNoIE1VWCB0byBQTEwxIG91dHB1dCAqLworCXsgMHgxNCwgMHg2ZiB9LAorCXsgMHgxNiwgMHgwNiB9LAorCS8qIHNldCBQMkRJViBkaXZpZGVyLCBQM0RJViBhbmQgaW5wdXQgY3J5c3RhbCAqLworCXsgMHgxNywgMHgwNiB9LAorCXsgMHgwMSwgMHgwMCB9LAorCXsgMHgwNSwgMHg0OCB9LAorCXsgMHgwMiwgMHg4MCB9LAorCS8qIGVuYWJsZSBhbmQgZGlzYWJsZSBQTEwgKi8KKwl7IDB4MDIsIDB4YmMgfSwKKwl7IDB4MDMsIDB4MDIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IGNkY2VfcmVnIGNkY2VfeTFfMjcwMDBbXSA9IHsKKwl7IDB4MTMsIDB4MDAgfSwKKwl7IDB4MTgsIDB4MDAgfSwKKwl7IDB4MTksIDB4NDAgfSwKKwl7IDB4MWEsIDB4MDIgfSwKKwl7IDB4MWIsIDB4MDggfSwKKwl7IDB4MWMsIDB4MDAgfSwKKwl7IDB4MWQsIDB4NDAgfSwKKwl7IDB4MWUsIDB4MDIgfSwKKwl7IDB4MWYsIDB4MDggfSwKKwl7IDB4MTUsIDB4MDIgfSwKKwl7IDB4MTQsIDB4ZWQgfSwKKwl7IDB4MTYsIDB4MDEgfSwKKwl7IDB4MTcsIDB4MDEgfSwKKwl7IDB4MDEsIDB4MDAgfSwKKwl7IDB4MDUsIDB4NTAgfSwKKwl7IDB4MDIsIDB4YjQgfSwKKwl7IDB4MDMsIDB4MDEgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IGNkY2VfZnJlcSBjZGNlX3kxX2ZyZXFzW10gPSB7CisJQ0RDRV9GUkVRX1RBQkxFX0VOVFJZKDEsIDE0ODUwMCksCisJQ0RDRV9GUkVRX1RBQkxFX0VOVFJZKDEsIDc0MjUwKSwKKwlDRENFX0ZSRVFfVEFCTEVfRU5UUlkoMSwgMjcwMDApLAorfTsKKworc3RhdGljIHN0cnVjdCBjZGNlX3JlZyBjZGNlX3k1XzEzNTAwW10gPSB7CisJeyAweDI3LCAweDA4IH0sCisJeyAweDI4LCAweDAwIH0sCisJeyAweDI5LCAweDQwIH0sCisJeyAweDJhLCAweDAyIH0sCisJeyAweDJiLCAweDA4IH0sCisJeyAweDI0LCAweDZmIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjZGNlX3JlZyBjZGNlX3k1XzE2ODc1W10gPSB7CisJeyAweDI3LCAweDA4IH0sCisJeyAweDI4LCAweDlmIH0sCisJeyAweDI5LCAweGIwIH0sCisJeyAweDJhLCAweDAyIH0sCisJeyAweDJiLCAweDg5IH0sCisJeyAweDI0LCAweDZmIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjZGNlX3JlZyBjZGNlX3k1XzI3MDAwW10gPSB7CisJeyAweDI3LCAweDA0IH0sCisJeyAweDI4LCAweDAwIH0sCisJeyAweDI5LCAweDQwIH0sCisJeyAweDJhLCAweDAyIH0sCisJeyAweDJiLCAweDA4IH0sCisJeyAweDI0LCAweDZmIH0sCisJeyB9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2RjZV9yZWcgY2RjZV95NV81NDAwMFtdID0geworCXsgMHgyNywgMHgwNCB9LAorCXsgMHgyOCwgMHhmZiB9LAorCXsgMHgyOSwgMHg4MCB9LAorCXsgMHgyYSwgMHgwMiB9LAorCXsgMHgyYiwgMHgwNyB9LAorCXsgMHgyNCwgMHg2ZiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2RjZV9yZWcgY2RjZV95NV84MTAwMFtdID0geworCXsgMHgyNywgMHgwMiB9LAorCXsgMHgyOCwgMHhiZiB9LAorCXsgMHgyOSwgMHhhMCB9LAorCXsgMHgyYSwgMHgwMyB9LAorCXsgMHgyYiwgMHgwYSB9LAorCXsgMHgyNCwgMHg2ZiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2RjZV9mcmVxIGNkY2VfeTVfZnJlcXNbXSA9IHsKKwlDRENFX0ZSRVFfVEFCTEVfRU5UUlkoNSwgMTM1MDApLAorCUNEQ0VfRlJFUV9UQUJMRV9FTlRSWSg1LCAxNjg3NSksCisJQ0RDRV9GUkVRX1RBQkxFX0VOVFJZKDUsIDI3MDAwKSwKKwlDRENFX0ZSRVFfVEFCTEVfRU5UUlkoNSwgNTQwMDApLAorCUNEQ0VfRlJFUV9UQUJMRV9FTlRSWSg1LCA4MTAwMCksCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY2RjZV9vdXRwdXQgb3V0cHV0X2xpc3RbXSA9IHsKKwlbMV0JPSB7IGNkY2VfeTFfZnJlcXMsIEFSUkFZX1NJWkUoY2RjZV95MV9mcmVxcykgfSwKKwlbNV0JPSB7IGNkY2VfeTVfZnJlcXMsIEFSUkFZX1NJWkUoY2RjZV95NV9mcmVxcykgfSwKK307CisKK2ludCBjZGNlX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBpLCByZXQgPSAwOworCXN0cnVjdCBjZGNlX2ZyZXEgKmZyZXFfdGFibGUgPSBvdXRwdXRfbGlzdFtjbGstPmxwc2NdLmZyZXFfdGFibGU7CisJc3RydWN0IGNkY2VfcmVnICAqcmVncyA9IE5VTEw7CisKKwlpZiAoIWNkY2VfaTJjX2NsaWVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWZyZXFfdGFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IG91dHB1dF9saXN0W2Nsay0+bHBzY10uc2l6ZTsgaSsrKSB7CisJCWlmIChmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9PSByYXRlIC8gMTAwMCkgeworCQkJcmVncyA9IGZyZXFfdGFibGVbaV0ucmVnbGlzdDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFyZWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNkY2VfbXV0ZXgpOworCWZvciAoaSA9IDA7IHJlZ3NbaV0uYWRkcjsgaSsrKSB7CisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2RjZV9pMmNfY2xpZW50LAorCQkJCQlyZWdzW2ldLmFkZHIgfCAweDgwLCByZWdzW2ldLnZhbCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZGNlX211dGV4KTsKKworCWlmICghcmV0KQorCQljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZGNlX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwljZGNlX2kyY19jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNkY2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJY2RjZV9pMmNfY2xpZW50ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNkY2VfaWRbXSA9IHsKKwl7ImNkY2U5NDkiLCAwfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY2RjZV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjZGNlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiY2RjZTk0OSIsCisJfSwKKwkucHJvYmUJCT0gY2RjZV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGNkY2VfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBjZGNlX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2RjZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjZGNlX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwoY2RjZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNkY2VfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZjZGNlX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChjZGNlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDRENFOTQ5IGNsb2NrIHN5bnRoZXNpemVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwppbmRleCBiYWVjZTY1Li5iZjYyMThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwpAQCAtNDksNyArNDksOCBAQAogewogCWlmIChXQVJOX09OKGNsay0+dXNlY291bnQgPT0gMCkpCiAJCXJldHVybjsKLQlpZiAoLS1jbGstPnVzZWNvdW50ID09IDAgJiYgIShjbGstPmZsYWdzICYgQ0xLX1BMTCkpCisJaWYgKC0tY2xrLT51c2Vjb3VudCA9PSAwICYmICEoY2xrLT5mbGFncyAmIENMS19QTEwpICYmCisJICAgIChjbGstPmZsYWdzICYgQ0xLX1BTQykpCiAJCWRhdmluY2lfcHNjX2NvbmZpZyhwc2NfZG9tYWluKGNsayksIGNsay0+Z3BzYywgY2xrLT5scHNjLCAwKTsKIAlpZiAoY2xrLT5wYXJlbnQpCiAJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwpAQCAtMTI0LDkgKzEyNSwxMCBAQAogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKIAkJcmV0dXJuIHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoY2xrLT5zZXRfcmF0ZSkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQgPT0gMCkgewogCQlpZiAoY2xrLT5yZWNhbGMpCiAJCQljbGstPnJhdGUgPSBjbGstPnJlY2FsYyhjbGspOwpAQCAtMzYzLDYgKzM2NSw3IEBACiB7CiAJdTMyIGN0cmw7CiAJdW5zaWduZWQgaW50IGxvY2t0aW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocGxsLT5iYXNlID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzc2LDI1ICszNzksMjMgQEAKIAkJbG9ja3RpbWUgPSAoKDIwMDAgKiBwcmVkaXYpIC8gMTAwKTsKIAkJcHJlZGl2ID0gKHByZWRpdiAtIDEpIHwgUExMRElWX0VOOwogCX0gZWxzZSB7Ci0JCWxvY2t0aW1lID0gMjA7CisJCWxvY2t0aW1lID0gUExMX0xPQ0tfVElNRTsKIAl9CiAJaWYgKHBvc3RkaXYpCiAJCXBvc3RkaXYgPSAocG9zdGRpdiAtIDEpIHwgUExMRElWX0VOOwogCWlmIChtdWx0KQogCQltdWx0ID0gbXVsdCAtIDE7CiAKKwkvKiBQcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5lb3VzIGNhbGxzIHRvIFBMTCBzZXR0aW5nIHNlcWV1bmNlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCiAJY3RybCA9IF9fcmF3X3JlYWRsKHBsbC0+YmFzZSArIFBMTENUTCk7CiAKIAkvKiBTd2l0Y2ggdGhlIFBMTCB0byBieXBhc3MgbW9kZSAqLwogCWN0cmwgJj0gfihQTExDVExfUExMRU5TUkMgfCBQTExDVExfUExMRU4pOwogCV9fcmF3X3dyaXRlbChjdHJsLCBwbGwtPmJhc2UgKyBQTExDVEwpOwogCi0JLyoKLQkgKiBXYWl0IGZvciA0IE9TQ0lOL0NMS0lOIGN5Y2xlcyB0byBlbnN1cmUgdGhhdCB0aGUgUExMQyBoYXMgc3dpdGNoZWQKLQkgKiB0byBieXBhc3MgbW9kZS4gRGVsYXkgb2YgMXVzIGVuc3VyZXMgd2UgYXJlIGdvb2QgZm9yIGFsbCA+IDRNSHoKLQkgKiBPU0NJTi9DTEtJTiBpbnB1dHMuIFR5cGljYWxseSB0aGUgaW5wdXQgaXMgfjI1TUh6LgotCSAqLwotCXVkZWxheSgxKTsKKwl1ZGVsYXkoUExMX0JZUEFTU19USU1FKTsKIAogCS8qIFJlc2V0IGFuZCBlbmFibGUgUExMICovCiAJY3RybCAmPSB+KFBMTENUTF9QTExSU1QgfCBQTExDVExfUExMRElTKTsKQEAgLTQwOCwxMSArNDA5LDcgQEAKIAlpZiAocGxsLT5mbGFncyAmIFBMTF9IQVNfUE9TVERJVikKIAkJX19yYXdfd3JpdGVsKHBvc3RkaXYsIHBsbC0+YmFzZSArIFBPU1RESVYpOwogCi0JLyoKLQkgKiBXYWl0IGZvciBQTEwgdG8gcmVzZXQgcHJvcGVybHksIE9NQVAtTDEzOCBkYXRhc2hlZXQgc2F5cwotCSAqICdtaW4nIHRpbWUgPSAxMjVucwotCSAqLwotCXVkZWxheSgxKTsKKwl1ZGVsYXkoUExMX1JFU0VUX1RJTUUpOwogCiAJLyogQnJpbmcgUExMIG91dCBvZiByZXNldCAqLwogCWN0cmwgfD0gUExMQ1RMX1BMTFJTVDsKQEAgLTQyNCwxNyArNDIxLDIwIEBACiAJY3RybCB8PSBQTExDVExfUExMRU47CiAJX19yYXdfd3JpdGVsKGN0cmwsIHBsbC0+YmFzZSArIFBMTENUTCk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkYXZpbmNpX3NldF9wbGxyYXRlKTsKIAotaW50IF9faW5pdCBkYXZpbmNpX2Nsa19pbml0KHN0cnVjdCBkYXZpbmNpX2NsayAqY2xvY2tzKQoraW50IF9faW5pdCBkYXZpbmNpX2Nsa19pbml0KHN0cnVjdCBjbGtfbG9va3VwICpjbG9ja3MpCiAgIHsKLQlzdHJ1Y3QgZGF2aW5jaV9jbGsgKmM7CisJc3RydWN0IGNsa19sb29rdXAgKmM7CiAJc3RydWN0IGNsayAqY2xrOworCXNpemVfdCBudW1fY2xvY2tzID0gMDsKIAotCWZvciAoYyA9IGNsb2NrczsgYy0+bGsuY2xrOyBjKyspIHsKLQkJY2xrID0gYy0+bGsuY2xrOworCWZvciAoYyA9IGNsb2NrczsgYy0+Y2xrOyBjKyspIHsKKwkJY2xrID0gYy0+Y2xrOwogCiAJCWlmICghY2xrLT5yZWNhbGMpIHsKIApAQCAtNDU3LDM2ICs0NTcsMjQgQEAKIAkJaWYgKGNsay0+bHBzYykKIAkJCWNsay0+ZmxhZ3MgfD0gQ0xLX1BTQzsKIAotCQljbGtkZXZfYWRkKCZjLT5sayk7CiAJCWNsa19yZWdpc3RlcihjbGspOworCQludW1fY2xvY2tzKys7CiAKIAkJLyogVHVybiBvbiBjbG9ja3MgdGhhdCBMaW51eCBkb2Vzbid0IG90aGVyd2lzZSBtYW5hZ2UgKi8KIAkJaWYgKGNsay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkKIAkJCWNsa19lbmFibGUoY2xrKTsKIAl9CiAKKwljbGtkZXZfYWRkX3RhYmxlKGNsb2NrcywgbnVtX2Nsb2Nrcyk7CisKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2lmZGVmIENPTkZJR19ERUJVR19GUworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKLXN0YXRpYyB2b2lkICpkYXZpbmNpX2NrX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICpwb3MgPCAxID8gKHZvaWQgKikxIDogTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKmRhdmluY2lfY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSsrKnBvczsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZGF2aW5jaV9ja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLX0KLQogI2RlZmluZSBDTEtOQU1FX01BWAkxMAkJLyogbG9uZ2VzdCBjbG9jayBuYW1lICovCiAjZGVmaW5lIE5FU1RfREVMVEEJMgogI2RlZmluZSBORVNUX01BWAk0CkBAIC01MjUsNDEgKzUxMywzOCBAQAogCiBzdGF0aWMgaW50IGRhdmluY2lfY2tfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JLyogU2hvdyBjbG9jayB0cmVlOyB3ZSBrbm93IHRoZSBtYWluIG9zY2lsbGF0b3IgaXMgZmlyc3QuCi0JICogV2UgdHJ1c3Qgbm9uemVybyB1c2Vjb3VudHMgZXF1YXRlIHRvIFBTQyBlbmFibGVzLi4uCisJc3RydWN0IGNsayAqY2xrOworCisJLyoKKwkgKiBTaG93IGNsb2NrIHRyZWU7IFdlIHRydXN0IG5vbnplcm8gdXNlY291bnRzIGVxdWF0ZSB0byBQU0MgZW5hYmxlcy4uLgogCSAqLwogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZjbG9ja3MpKQotCQlkdW1wX2Nsb2NrKG0sIDAsIGxpc3RfZmlyc3RfZW50cnkoJmNsb2Nrcywgc3RydWN0IGNsaywgbm9kZSkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKQorCQlpZiAoIWNsay0+cGFyZW50KQorCQkJZHVtcF9jbG9jayhtLCAwLCBjbGspOwogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRhdmluY2lfY2tfb3AgPSB7Ci0JLnN0YXJ0CT0gZGF2aW5jaV9ja19zdGFydCwKLQkubmV4dAk9IGRhdmluY2lfY2tfbmV4dCwKLQkuc3RvcAk9IGRhdmluY2lfY2tfc3RvcCwKLQkuc2hvdwk9IGRhdmluY2lfY2tfc2hvdwotfTsKLQogc3RhdGljIGludCBkYXZpbmNpX2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZkYXZpbmNpX2NrX29wKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGF2aW5jaV9ja19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19kYXZpbmNpX2NrX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYXZpbmNpX2NrX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gZGF2aW5jaV9ja19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfY2tfcHJvY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX2Nsa19kZWJ1Z2ZzX2luaXQodm9pZCkKIHsKLQlwcm9jX2NyZWF0ZSgiZGF2aW5jaV9jbG9ja3MiLCAwLCBOVUxMLCAmcHJvY19kYXZpbmNpX2NrX29wZXJhdGlvbnMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRhdmluY2lfY2xvY2tzIiwgU19JRlJFRyB8IFNfSVJVR08sIE5VTEwsIE5VTEwsCisJCQkJCQkmZGF2aW5jaV9ja19vcGVyYXRpb25zKTsKIAlyZXR1cm4gMDsKIAogfQotX19pbml0Y2FsbChkYXZpbmNpX2NrX3Byb2NfaW5pdCk7Ci0jZW5kaWYgLyogQ09ORklHX0RFQlVHX1BST0NfRlMgKi8KK2RldmljZV9pbml0Y2FsbChkYXZpbmNpX2Nsa19kZWJ1Z2ZzX2luaXQpOworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaAppbmRleCBjOTJkNzdhLi5hYTBhNjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaApAQCAtMTIsOSArMTIsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX0RBVklOQ0lfQ0xPQ0tfSAogI2RlZmluZSBfX0FSQ0hfQVJNX0RBVklOQ0lfQ0xPQ0tfSAogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLQogI2RlZmluZSBEQVZJTkNJX1BMTDFfQkFTRSAweDAxYzQwODAwCiAjZGVmaW5lIERBVklOQ0lfUExMMl9CQVNFIDB4MDFjNDBjMDAKICNkZWZpbmUgTUFYX1BMTCAyCkBAIC01Myw2ICs1MCwyNiBAQAogI2RlZmluZSBQTExESVZfRU4gICAgICAgQklUKDE1KQogI2RlZmluZSBQTExESVZfUkFUSU9fTUFTSyAweDFmCiAKKy8qCisgKiBPTUFQLUwxMzggc3lzdGVtIHJlZmVyZW5jZSBndWlkZSByZWNvbW1lbmRzIGEgd2FpdCBmb3IgNCBPU0NJTi9DTEtJTgorICogY3ljbGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBQTExDIGhhcyBzd2l0Y2hlZCB0byBieXBhc3MgbW9kZS4gRGVsYXkgb2YgMXVzCisgKiBlbnN1cmVzIHdlIGFyZSBnb29kIGZvciBhbGwgPiA0TUh6IE9TQ0lOL0NMS0lOIGlucHV0cy4gVHlwaWNhbGx5IHRoZSBpbnB1dAorICogaXMgfjI1TUh6LiBVbml0cyBhcmUgbWljcm8gc2Vjb25kcy4KKyAqLworI2RlZmluZSBQTExfQllQQVNTX1RJTUUJCTEKKy8qIEZyb20gT01BUC1MMTM4IGRhdGFzaGVldCB0YWJsZSA2LTQuIFVuaXRzIGFyZSBtaWNybyBzZWNvbmRzICovCisjZGVmaW5lIFBMTF9SRVNFVF9USU1FCQkxCisvKgorICogRnJvbSBPTUFQLUwxMzggZGF0YXNoZWV0IHRhYmxlIDYtNDsgYXNzdW1pbmcgcHJlZGl2ID0gMSwgc3FydChwbGxtKSA9IDQKKyAqIFVuaXRzIGFyZSBtaWNybyBzZWNvbmRzLgorICovCisjZGVmaW5lIFBMTF9MT0NLX1RJTUUJCTIwCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKwogc3RydWN0IHBsbF9kYXRhIHsKIAl1MzIgcGh5c19iYXNlOwogCXZvaWQgX19pb21lbSAqYmFzZTsKQEAgLTg5LDIzICsxMDYsMTkgQEAKICNkZWZpbmUgQ0xLX1BMTAkJCUJJVCg0KSAvKiBQTEwtZGVyaXZlZCBjbG9jayAqLwogI2RlZmluZSBQUkVfUExMICAgICAgICAgICAgICAgICBCSVQoNSkgLyogc291cmNlIGlzIGJlZm9yZSBQTEwgbXVsdC9kaXYgKi8KIAotc3RydWN0IGRhdmluY2lfY2xrIHsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCBsazsKLX07CisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2spIAlcCisJewkJCVwKKwkJLmRldl9pZCA9IGRldiwJXAorCQkuY29uX2lkID0gY29uLAlcCisJCS5jbGsgPSBjaywJXAorCX0JCQlcCiAKLSNkZWZpbmUgQ0xLKGRldiwgY29uLCBjaykgCQlcCi0JewkJCQlcCi0JCS5sayA9IHsJCQlcCi0JCQkuZGV2X2lkID0gZGV2LAlcCi0JCQkuY29uX2lkID0gY29uLAlcCi0JCQkuY2xrID0gY2ssCVwKLQkJfSwJCQlcCi0JfQotCi1pbnQgZGF2aW5jaV9jbGtfaW5pdChzdHJ1Y3QgZGF2aW5jaV9jbGsgKmNsb2Nrcyk7CitpbnQgZGF2aW5jaV9jbGtfaW5pdChzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xvY2tzKTsKIGludCBkYXZpbmNpX3NldF9wbGxyYXRlKHN0cnVjdCBwbGxfZGF0YSAqcGxsLCB1bnNpZ25lZCBpbnQgcHJlZGl2LAogCQkJCXVuc2lnbmVkIGludCBtdWx0LCB1bnNpZ25lZCBpbnQgcG9zdGRpdik7CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhdmluY2lfd2R0X2RldmljZTsKIAogI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NvbW1vbi5jCmluZGV4IGMyZGU5NGMuLjk0ZjI3Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY29tbW9uLmMKQEAgLTExLDEzICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kYXZpbmNpX2VtYWMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+Ci0jaW5jbHVkZSA8bWFjaC9lbWFjLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1aWRsZS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWlkbGUuYwppbmRleCA5N2E5MGYzLi5iZDU5ZjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1aWRsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVpZGxlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KIAogI2luY2x1ZGUgPG1hY2gvY3B1aWRsZS5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CiAKICNkZWZpbmUgREFWSU5DSV9DUFVJRExFX01BWF9TVEFURVMJMgogCkBAIC0zOSwxMCArNDAsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpZGxlX2RldmljZSwgZGF2aW5jaV9jcHVpZGxlX2RldmljZSk7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpkZHIyX3JlZ19iYXNlOwogCi0jZGVmaW5lIEREUjJfU0RSQ1JfT0ZGU0VUCTB4YwotI2RlZmluZSBERFIyX1NSUERfQklUCQlCSVQoMjMpCi0jZGVmaW5lIEREUjJfTFBNT0RFTl9CSVQJQklUKDMxKQotCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NhdmVfZGRyX3Bvd2VyKGludCBlbnRlciwgYm9vbCBwZG93bikKIHsKIAl1MzIgdmFsOwpAQCAtMTA5LDggKzEwNiw2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgZGF2aW5jaV9jcHVpZGxlX2NvbmZpZyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRkcjJfcmVnczsKLQlyZXNvdXJjZV9zaXplX3QgbGVuOwogCiAJZGV2aWNlID0gJnBlcl9jcHUoZGF2aW5jaV9jcHVpZGxlX2RldmljZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtMTE5LDI4ICsxMTQsMTIgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JZGRyMl9yZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIWRkcjJfcmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IEREUjIgY29udHJvbGxlciByZWdpc3RlciBiYXNlIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWxlbiA9IHJlc291cmNlX3NpemUoZGRyMl9yZWdzKTsKLQotCWRkcjJfcmVncyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZHIyX3JlZ3MtPnN0YXJ0LCBsZW4sIGRkcjJfcmVncy0+bmFtZSk7Ci0JaWYgKCFkZHIyX3JlZ3MpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlkZHIyX3JlZ19iYXNlID0gaW9yZW1hcChkZHIyX3JlZ3MtPnN0YXJ0LCBsZW4pOwotCWlmICghZGRyMl9yZWdfYmFzZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGlvcmVtYXBfZmFpbDsKLQl9CisJZGRyMl9yZWdfYmFzZSA9IHBkYXRhLT5kZHIyX2N0bHJfYmFzZTsKIAogCXJldCA9IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKCZkYXZpbmNpX2lkbGVfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBkcml2ZXJcbiIpOwotCQlnb3RvIGRyaXZlcl9yZWdpc3Rlcl9mYWlsOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIFdhaXQgZm9yIGludGVycnVwdCBzdGF0ZSAqLwpAQCAtMTY3LDE4ICsxNDYsMTEgQEAKIAlyZXQgPSBjcHVpZGxlX3JlZ2lzdGVyX2RldmljZShkZXZpY2UpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZVxuIik7Ci0JCWdvdG8gZGV2aWNlX3JlZ2lzdGVyX2ZhaWw7CisJCWNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhdmluY2lfaWRsZV9kcml2ZXIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwotCi1kZXZpY2VfcmVnaXN0ZXJfZmFpbDoKLQljcHVpZGxlX3VucmVnaXN0ZXJfZHJpdmVyKCZkYXZpbmNpX2lkbGVfZHJpdmVyKTsKLWRyaXZlcl9yZWdpc3Rlcl9mYWlsOgotCWlvdW5tYXAoZGRyMl9yZWdfYmFzZSk7Ci1pb3JlbWFwX2ZhaWw6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGRkcjJfcmVncy0+c3RhcnQsIGxlbik7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGF2aW5jaV9jcHVpZGxlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTgzMC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODMwLmMKaW5kZXggYjIyYjVjZi4uMTIyZTYxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODMwLmMKQEAgLTM3MSw3ICszNzEsNyBAQAogCS5wYXJlbnQJCT0gJnBsbDBfc3lzY2xrNywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9jbGsgZGE4MzBfY2xrc1tdID0geworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGRhODMwX2Nsa3NbXSA9IHsKIAlDTEsoTlVMTCwJCSJyZWYiLAkJJnJlZl9jbGspLAogCUNMSyhOVUxMLAkJInBsbDAiLAkJJnBsbDBfY2xrKSwKIAlDTEsoTlVMTCwJCSJwbGwwX2F1eCIsCSZwbGwwX2F1eF9jbGspLApAQCAtMTIwOCwxMyArMTIwOCwxMyBAQAogCiB2b2lkIF9faW5pdCBkYTgzMF9pbml0KHZvaWQpCiB7Ci0JZGE4eHhfc3lzY2ZnX2Jhc2UgPSBpb3JlbWFwKERBOFhYX1NZU0NGR19CQVNFLCBTWl80Syk7Ci0JaWYgKFdBUk4oIWRhOHh4X3N5c2NmZ19iYXNlLCAiVW5hYmxlIHRvIG1hcCBzeXNjZmcgbW9kdWxlIikpCisJZGE4eHhfc3lzY2ZnMF9iYXNlID0gaW9yZW1hcChEQThYWF9TWVNDRkcwX0JBU0UsIFNaXzRLKTsKKwlpZiAoV0FSTighZGE4eHhfc3lzY2ZnMF9iYXNlLCAiVW5hYmxlIHRvIG1hcCBzeXNjZmcwIG1vZHVsZSIpKQogCQlyZXR1cm47CiAKIAlkYXZpbmNpX3NvY19pbmZvX2RhODMwLmp0YWdfaWRfYmFzZSA9Ci0JCQkJCURBOFhYX1NZU0NGR19WSVJUKERBOFhYX0pUQUdfSURfUkVHKTsKLQlkYXZpbmNpX3NvY19pbmZvX2RhODMwLnBpbm11eF9iYXNlID0gREE4WFhfU1lTQ0ZHX1ZJUlQoMHgxMjApOworCQkJCQlEQThYWF9TWVNDRkcwX1ZJUlQoREE4WFhfSlRBR19JRF9SRUcpOworCWRhdmluY2lfc29jX2luZm9fZGE4MzAucGlubXV4X2Jhc2UgPSBEQThYWF9TWVNDRkcwX1ZJUlQoMHgxMjApOwogCiAJZGF2aW5jaV9jb21tb25faW5pdCgmZGF2aW5jaV9zb2NfaW5mb19kYTgzMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCmluZGV4IDcxNzgwNmMuLmQwZmQ3NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9kYTh4eC5oPgogI2luY2x1ZGUgPG1hY2gvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAibXV4LmgiCkBAIC00MCw2ICs0MSw3IEBACiAjZGVmaW5lIERBODUwX1JFRl9GUkVRCQkyNDAwMDAwMAogCiAjZGVmaW5lIENGR0NISVAzX0FTWU5DM19DTEtTUkMJQklUKDQpCisjZGVmaW5lIENGR0NISVAzX1BMTDFfTUFTVEVSX0xPQ0sJQklUKDUpCiAjZGVmaW5lIENGR0NISVAwX1BMTF9NQVNURVJfTE9DSwlCSVQoNCkKIAogc3RhdGljIGludCBkYTg1MF9zZXRfYXJtcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CkBAIC0zMzMsNyArMzM1LDcgQEAKIAkuZmxhZ3MJCT0gQUxXQVlTX0VOQUJMRUQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRhdmluY2lfY2xrIGRhODUwX2Nsa3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBkYTg1MF9jbGtzW10gPSB7CiAJQ0xLKE5VTEwsCQkicmVmIiwJCSZyZWZfY2xrKSwKIAlDTEsoTlVMTCwJCSJwbGwwIiwJCSZwbGwwX2NsayksCiAJQ0xLKE5VTEwsCQkicGxsMF9hdXgiLAkmcGxsMF9hdXhfY2xrKSwKQEAgLTUzNSw2ICs1MzcsNyBAQAogCU1VWF9DRkcoREE4NTAsIEdQSU8yXzE1LAk1LAkwLAkxNSwJOCwJZmFsc2UpCiAJTVVYX0NGRyhEQTg1MCwgR1BJTzRfMCwJCTEwLAkyOCwJMTUsCTgsCWZhbHNlKQogCU1VWF9DRkcoREE4NTAsIEdQSU80XzEsCQkxMCwJMjQsCTE1LAk4LAlmYWxzZSkKKwlNVVhfQ0ZHKERBODUwLCBSVENfQUxBUk0sCTAsCTI4LAkxNSwJMiwJZmFsc2UpCiAjZW5kaWYKIH07CiAKQEAgLTc3MCw2ICs3NzMsMTIgQEAKIAkJLmxlbmd0aAkJPSBEQThYWF9DUF9JTlRDX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCisJeworCQkudmlydHVhbAk9IFNSQU1fVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERBOFhYX0FSTV9SQU1fQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfOEssCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpkYTg1MF9wc2NfYmFzZXNbXSA9IHsKQEAgLTgyNSwxMiArODM0LDEyIEBACiBzdGF0aWMgdm9pZCBkYTg1MF9zZXRfYXN5bmMzX3NyYyhpbnQgcGxsbnVtKQogewogCXN0cnVjdCBjbGsgKmNsaywgKm5ld3BhcmVudCA9IHBsbG51bSA/ICZwbGwxX3N5c2NsazIgOiAmcGxsMF9zeXNjbGsyOwotCXN0cnVjdCBkYXZpbmNpX2NsayAqYzsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqYzsKIAl1bnNpZ25lZCBpbnQgdjsKIAlpbnQgcmV0OwogCi0JZm9yIChjID0gZGE4NTBfY2xrczsgYy0+bGsuY2xrOyBjKyspIHsKLQkJY2xrID0gYy0+bGsuY2xrOworCWZvciAoYyA9IGRhODUwX2Nsa3M7IGMtPmNsazsgYysrKSB7CisJCWNsayA9IGMtPmNsazsKIAkJaWYgKGNsay0+ZmxhZ3MgJiBEQTg1MF9DTEtfQVNZTkMzKSB7CiAJCQlyZXQgPSBjbGtfc2V0X3BhcmVudChjbGssIG5ld3BhcmVudCk7CiAJCQlXQVJOKHJldCwgIkRBODUwOiB1bmFibGUgdG8gcmUtcGFyZW50IGNsb2NrICVzIiwKQEAgLTgzOCwxMiArODQ3LDEyIEBACiAJCX0KICAgICAgICB9CiAKLQl2ID0gX19yYXdfcmVhZGwoREE4WFhfU1lTQ0ZHX1ZJUlQoREE4WFhfQ0ZHQ0hJUDNfUkVHKSk7CisJdiA9IF9fcmF3X3JlYWRsKERBOFhYX1NZU0NGRzBfVklSVChEQThYWF9DRkdDSElQM19SRUcpKTsKIAlpZiAocGxsbnVtKQogCQl2IHw9IENGR0NISVAzX0FTWU5DM19DTEtTUkM7CiAJZWxzZQogCQl2ICY9IH5DRkdDSElQM19BU1lOQzNfQ0xLU1JDOwotCV9fcmF3X3dyaXRlbCh2LCBEQThYWF9TWVNDRkdfVklSVChEQThYWF9DRkdDSElQM19SRUcpKTsKKwlfX3Jhd193cml0ZWwodiwgREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0NGR0NISVAzX1JFRykpOwogfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCkBAIC05ODcsNyArOTk2LDYgQEAKIAl1bnNpZ25lZCBpbnQgcHJlZGl2LCBtdWx0LCBwb3N0ZGl2OwogCXN0cnVjdCBkYTg1MF9vcHAgKm9wcDsKIAlzdHJ1Y3QgcGxsX2RhdGEgKnBsbCA9IGNsay0+cGxsX2RhdGE7Ci0JdW5zaWduZWQgaW50IHY7CiAJaW50IHJldDsKIAogCW9wcCA9IChzdHJ1Y3QgZGE4NTBfb3BwICopIGRhODUwX2ZyZXFfdGFibGVbaW5kZXhdLmluZGV4OwpAQCAtOTk1LDExICsxMDAzLDYgQEAKIAltdWx0ID0gb3BwLT5tdWx0OwogCXBvc3RkaXYgPSBvcHAtPnBvc3RkaXY7CiAKLQkvKiBVbmxvY2sgd3JpdGluZyB0byBQTEwgcmVnaXN0ZXJzICovCi0JdiA9IF9fcmF3X3JlYWRsKERBOFhYX1NZU0NGR19WSVJUKERBOFhYX0NGR0NISVAwX1JFRykpOwotCXYgJj0gfkNGR0NISVAwX1BMTF9NQVNURVJfTE9DSzsKLQlfX3Jhd193cml0ZWwodiwgREE4WFhfU1lTQ0ZHX1ZJUlQoREE4WFhfQ0ZHQ0hJUDBfUkVHKSk7Ci0KIAlyZXQgPSBkYXZpbmNpX3NldF9wbGxyYXRlKHBsbCwgcHJlZGl2LCBtdWx0LCBwb3N0ZGl2KTsKIAlpZiAoV0FSTl9PTihyZXQpKQogCQlyZXR1cm4gcmV0OwpAQCAtMTAyOCw2ICsxMDMxLDQzIEBACiB9CiAjZW5kaWYKIAoraW50IGRhODUwX3JlZ2lzdGVyX3BtKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZGF2aW5jaV9wbV9jb25maWcgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyZXQgPSBkYXZpbmNpX2NmZ19yZWcoREE4NTBfUlRDX0FMQVJNKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGRhdGEtPmRkcjJfY3Rscl9iYXNlID0gZGE4eHhfZ2V0X21lbV9jdGxyKCk7CisJcGRhdGEtPmRlZXBzbGVlcF9yZWcgPSBEQThYWF9TWVNDRkcxX1ZJUlQoREE4WFhfREVFUFNMRUVQX1JFRyk7CisJcGRhdGEtPmRkcnBzY19udW0gPSBEQThYWF9MUFNDMV9FTUlGM0M7CisKKwlwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlID0gaW9yZW1hcChEQThYWF9QTEwwX0JBU0UsIFNaXzRLKTsKKwlpZiAoIXBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEtPmRkcnBsbF9yZWdfYmFzZSA9IGlvcmVtYXAoREE4WFhfUExMMV9CQVNFLCBTWl80Syk7CisJaWYgKCFwZGF0YS0+ZGRycGxsX3JlZ19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRycGxsX21lbTsKKwl9CisKKwlwZGF0YS0+ZGRycHNjX3JlZ19iYXNlID0gaW9yZW1hcChEQThYWF9QU0MxX0JBU0UsIFNaXzRLKTsKKwlpZiAoIXBkYXRhLT5kZHJwc2NfcmVnX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBub19kZHJwc2NfbWVtOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisKK25vX2RkcnBzY19tZW06CisJaW91bm1hcChwZGF0YS0+ZGRycGxsX3JlZ19iYXNlKTsKK25vX2RkcnBsbF9tZW06CisJaW91bm1hcChwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlKTsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgc3RydWN0IGRhdmluY2lfc29jX2luZm8gZGF2aW5jaV9zb2NfaW5mb19kYTg1MCA9IHsKIAkuaW9fZGVzYwkJPSBkYTg1MF9pb19kZXNjLApAQCAtMTA0OSwxNyArMTA4OSwyNSBAQAogCS5ncGlvX2lycQkJPSBJUlFfREE4WFhfR1BJTzAsCiAJLnNlcmlhbF9kZXYJCT0gJmRhOHh4X3NlcmlhbF9kZXZpY2UsCiAJLmVtYWNfcGRhdGEJCT0gJmRhOHh4X2VtYWNfcGRhdGEsCisJLnNyYW1fZG1hCQk9IERBOFhYX0FSTV9SQU1fQkFTRSwKKwkuc3JhbV9sZW4JCT0gU1pfOEssCiB9OwogCiB2b2lkIF9faW5pdCBkYTg1MF9pbml0KHZvaWQpCiB7Ci0JZGE4eHhfc3lzY2ZnX2Jhc2UgPSBpb3JlbWFwKERBOFhYX1NZU0NGR19CQVNFLCBTWl80Syk7Ci0JaWYgKFdBUk4oIWRhOHh4X3N5c2NmZ19iYXNlLCAiVW5hYmxlIHRvIG1hcCBzeXNjZmcgbW9kdWxlIikpCisJdW5zaWduZWQgaW50IHY7CisKKwlkYTh4eF9zeXNjZmcwX2Jhc2UgPSBpb3JlbWFwKERBOFhYX1NZU0NGRzBfQkFTRSwgU1pfNEspOworCWlmIChXQVJOKCFkYTh4eF9zeXNjZmcwX2Jhc2UsICJVbmFibGUgdG8gbWFwIHN5c2NmZzAgbW9kdWxlIikpCisJCXJldHVybjsKKworCWRhOHh4X3N5c2NmZzFfYmFzZSA9IGlvcmVtYXAoREE4WFhfU1lTQ0ZHMV9CQVNFLCBTWl80Syk7CisJaWYgKFdBUk4oIWRhOHh4X3N5c2NmZzFfYmFzZSwgIlVuYWJsZSB0byBtYXAgc3lzY2ZnMSBtb2R1bGUiKSkKIAkJcmV0dXJuOwogCiAJZGF2aW5jaV9zb2NfaW5mb19kYTg1MC5qdGFnX2lkX2Jhc2UgPQotCQkJCQlEQThYWF9TWVNDRkdfVklSVChEQThYWF9KVEFHX0lEX1JFRyk7Ci0JZGF2aW5jaV9zb2NfaW5mb19kYTg1MC5waW5tdXhfYmFzZSA9IERBOFhYX1NZU0NGR19WSVJUKDB4MTIwKTsKKwkJCQkJREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0pUQUdfSURfUkVHKTsKKwlkYXZpbmNpX3NvY19pbmZvX2RhODUwLnBpbm11eF9iYXNlID0gREE4WFhfU1lTQ0ZHMF9WSVJUKDB4MTIwKTsKIAogCWRhdmluY2lfY29tbW9uX2luaXQoJmRhdmluY2lfc29jX2luZm9fZGE4NTApOwogCkBAIC0xMDcxLDQgKzExMTksMTQgQEAKIAkgKiBiZSBhbnkgbm90aWNpYmxlIGNoYW5nZSBldmVuIGluIG5vbi1EVkZTIHVzZSBjYXNlcy4KIAkgKi8KIAlkYTg1MF9zZXRfYXN5bmMzX3NyYygxKTsKKworCS8qIFVubG9jayB3cml0aW5nIHRvIFBMTDAgcmVnaXN0ZXJzICovCisJdiA9IF9fcmF3X3JlYWRsKERBOFhYX1NZU0NGRzBfVklSVChEQThYWF9DRkdDSElQMF9SRUcpKTsKKwl2ICY9IH5DRkdDSElQMF9QTExfTUFTVEVSX0xPQ0s7CisJX19yYXdfd3JpdGVsKHYsIERBOFhYX1NZU0NGRzBfVklSVChEQThYWF9DRkdDSElQMF9SRUcpKTsKKworCS8qIFVubG9jayB3cml0aW5nIHRvIFBMTDEgcmVnaXN0ZXJzICovCisJdiA9IF9fcmF3X3JlYWRsKERBOFhYX1NZU0NGRzBfVklSVChEQThYWF9DRkdDSElQM19SRUcpKTsKKwl2ICY9IH5DRkdDSElQM19QTEwxX01BU1RFUl9MT0NLOworCV9fcmF3X3dyaXRlbCh2LCBEQThYWF9TWVNDRkcwX1ZJUlQoREE4WFhfQ0ZHQ0hJUDNfUkVHKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCBhNTEwNWYwLi4wYTk2NzkxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNsb2NrLmgiCiAKICNkZWZpbmUgREE4WFhfVFBDQ19CQVNFCQkJMHgwMWMwMDAwMAorI2RlZmluZSBEQTg1MF9UUENDMV9CQVNFCQkweDAxZTMwMDAwCiAjZGVmaW5lIERBOFhYX1RQVEMwX0JBU0UJCTB4MDFjMDgwMDAKICNkZWZpbmUgREE4WFhfVFBUQzFfQkFTRQkJMHgwMWMwODQwMAorI2RlZmluZSBEQTg1MF9UUFRDMl9CQVNFCQkweDAxZTM4MDAwCiAjZGVmaW5lIERBOFhYX1dET0dfQkFTRQkJCTB4MDFjMjEwMDAgLyogREE4WFhfVElNRVI2NFAxX0JBU0UgKi8KICNkZWZpbmUgREE4WFhfSTJDMF9CQVNFCQkJMHgwMWMyMjAwMAogI2RlZmluZSBEQThYWF9SVENfQkFTRQkJCTB4MDFDMjMwMDAKQEAgLTQyLDcgKzQ0LDggQEAKICNkZWZpbmUgREE4WFhfTURJT19SRUdfT0ZGU0VUCQkweDQwMDAKICNkZWZpbmUgREE4WFhfRU1BQ19DVFJMX1JBTV9TSVpFCVNaXzhLCiAKLXZvaWQgX19pb21lbSAqZGE4eHhfc3lzY2ZnX2Jhc2U7Cit2b2lkIF9faW9tZW0gKmRhOHh4X3N5c2NmZzBfYmFzZTsKK3ZvaWQgX19pb21lbSAqZGE4eHhfc3lzY2ZnMV9iYXNlOwogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGRhOHh4X3NlcmlhbF9wZGF0YVtdID0gewogCXsKQEAgLTgyLDExICs4NSw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzOCBkYTh4eF9kbWFfY2hhbl9ub19ldmVudFtdID0gewotCTIwLCAyMSwKLQktMQotfTsKLQogc3RhdGljIGNvbnN0IHM4IGRhOHh4X3F1ZXVlX3RjX21hcHBpbmdbXVsyXSA9IHsKIAkvKiB7ZXZlbnQgcXVldWUgbm8sIFRDIG5vfSAqLwogCXswLCAwfSwKQEAgLTEwMSwyMCArOTksNTIgQEAKIAl7LTEsIC0xfQogfTsKIAotc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRhOHh4X2VkbWFfaW5mb1tdID0geworc3RhdGljIGNvbnN0IHM4IGRhODUwX3F1ZXVlX3RjX21hcHBpbmdbXVsyXSA9IHsKKwkvKiB7ZXZlbnQgcXVldWUgbm8sIFRDIG5vfSAqLworCXswLCAwfSwKKwl7LTEsIC0xfQorfTsKKworc3RhdGljIGNvbnN0IHM4IGRhODUwX3F1ZXVlX3ByaW9yaXR5X21hcHBpbmdbXVsyXSA9IHsKKwkvKiB7ZXZlbnQgcXVldWUgbm8sIFByaW9yaXR5fSAqLworCXswLCAzfSwKKwl7LTEsIC0xfQorfTsKKworc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRhODMwX2VkbWFfaW5mb1tdID0gewogCXsKIAkJLm5fY2hhbm5lbAkJPSAzMiwKIAkJLm5fcmVnaW9uCQk9IDQsCiAJCS5uX3Nsb3QJCQk9IDEyOCwKIAkJLm5fdGMJCQk9IDIsCiAJCS5uX2NjCQkJPSAxLAotCQkubm9ldmVudAkJPSBkYTh4eF9kbWFfY2hhbl9ub19ldmVudCwKIAkJLnF1ZXVlX3RjX21hcHBpbmcJPSBkYTh4eF9xdWV1ZV90Y19tYXBwaW5nLAogCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRhOHh4X3F1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGE4eHhfZWRtYV9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBkYTg1MF9lZG1hX2luZm9bXSA9IHsKKwl7CisJCS5uX2NoYW5uZWwJCT0gMzIsCisJCS5uX3JlZ2lvbgkJPSA0LAorCQkubl9zbG90CQkJPSAxMjgsCisJCS5uX3RjCQkJPSAyLAorCQkubl9jYwkJCT0gMSwKKwkJLnF1ZXVlX3RjX21hcHBpbmcJPSBkYTh4eF9xdWV1ZV90Y19tYXBwaW5nLAorCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRhOHh4X3F1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCisJfSwKKwl7CisJCS5uX2NoYW5uZWwJCT0gMzIsCisJCS5uX3JlZ2lvbgkJPSA0LAorCQkubl9zbG90CQkJPSAxMjgsCisJCS5uX3RjCQkJPSAxLAorCQkubl9jYwkJCT0gMSwKKwkJLnF1ZXVlX3RjX21hcHBpbmcJPSBkYTg1MF9xdWV1ZV90Y19tYXBwaW5nLAorCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRhODUwX3F1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGE4MzBfZWRtYV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5uYW1lCT0gImVkbWFfY2MwIiwKIAkJLnN0YXJ0CT0gREE4WFhfVFBDQ19CQVNFLApAQCAtMTQ1LDE5ICsxNzUsOTEgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGE4eHhfZWRtYV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRhODUwX2VkbWFfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJlZG1hX2NjMCIsCisJCS5zdGFydAk9IERBOFhYX1RQQ0NfQkFTRSwKKwkJLmVuZAk9IERBOFhYX1RQQ0NfQkFTRSArIFNaXzMySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZQk9ICJlZG1hX3RjMCIsCisJCS5zdGFydAk9IERBOFhYX1RQVEMwX0JBU0UsCisJCS5lbmQJPSBEQThYWF9UUFRDMF9CQVNFICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiZWRtYV90YzEiLAorCQkuc3RhcnQJPSBEQThYWF9UUFRDMV9CQVNFLAorCQkuZW5kCT0gREE4WFhfVFBUQzFfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWFfY2MxIiwKKwkJLnN0YXJ0CT0gREE4NTBfVFBDQzFfQkFTRSwKKwkJLmVuZAk9IERBODUwX1RQQ0MxX0JBU0UgKyBTWl8zMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiZWRtYV90YzIiLAorCQkuc3RhcnQJPSBEQTg1MF9UUFRDMl9CQVNFLAorCQkuZW5kCT0gREE4NTBfVFBUQzJfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWEwIiwKKwkJLnN0YXJ0CT0gSVJRX0RBOFhYX0NDSU5UMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWEwX2VyciIsCisJCS5zdGFydAk9IElSUV9EQThYWF9DQ0VSUklOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWExIiwKKwkJLnN0YXJ0CT0gSVJRX0RBODUwX0NDSU5UMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWExX2VyciIsCisJCS5zdGFydAk9IElSUV9EQTg1MF9DQ0VSUklOVDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYTgzMF9lZG1hX2RldmljZSA9IHsKIAkubmFtZQkJPSAiZWRtYSIsCiAJLmlkCQk9IC0xLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gZGE4eHhfZWRtYV9pbmZvLAorCQkucGxhdGZvcm1fZGF0YSA9IGRhODMwX2VkbWFfaW5mbywKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYTh4eF9lZG1hX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gZGE4eHhfZWRtYV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRhODMwX2VkbWFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBkYTgzMF9lZG1hX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhODUwX2VkbWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJlZG1hIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBkYTg1MF9lZG1hX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGE4NTBfZWRtYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGRhODUwX2VkbWFfcmVzb3VyY2VzLAogfTsKIAogaW50IF9faW5pdCBkYTh4eF9yZWdpc3Rlcl9lZG1hKHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4eHhfZWRtYV9kZXZpY2UpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlpZiAoY3B1X2lzX2RhdmluY2lfZGE4MzAoKSkKKwkJcGRldiA9ICZkYTgzMF9lZG1hX2RldmljZTsKKwllbHNlIGlmIChjcHVfaXNfZGF2aW5jaV9kYTg1MCgpKQorCQlwZGV2ID0gJmRhODUwX2VkbWFfZGV2aWNlOworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRhOHh4X2kyY19yZXNvdXJjZXMwW10gPSB7CkBAIC00OTUsNiArNTk3LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX19pb21lbSAqZGE4eHhfZGRyMl9jdGxyX2Jhc2U7Cit2b2lkIF9faW9tZW0gKiBfX2luaXQgZGE4eHhfZ2V0X21lbV9jdGxyKHZvaWQpCit7CisJaWYgKGRhOHh4X2RkcjJfY3Rscl9iYXNlKQorCQlyZXR1cm4gZGE4eHhfZGRyMl9jdGxyX2Jhc2U7CisKKwlkYTh4eF9kZHIyX2N0bHJfYmFzZSA9IGlvcmVtYXAoREE4WFhfRERSMl9DVExfQkFTRSwgU1pfMzJLKTsKKwlpZiAoIWRhOHh4X2RkcjJfY3Rscl9iYXNlKQorCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIG1hcCBERFIyIGNvbnRyb2xsZXIiLAlfX2Z1bmNfXyk7CisKKwlyZXR1cm4gZGE4eHhfZGRyMl9jdGxyX2Jhc2U7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGE4eHhfY3B1aWRsZV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAkJPSBEQThYWF9ERFIyX0NUTF9CQVNFLApAQCAtNTIwLDYgKzYzNSw3IEBACiAKIGludCBfX2luaXQgZGE4eHhfcmVnaXN0ZXJfY3B1aWRsZSh2b2lkKQogeworCWRhOHh4X2NwdWlkbGVfcGRhdGEuZGRyMl9jdGxyX2Jhc2UgPSBkYTh4eF9nZXRfbWVtX2N0bHIoKTsKKwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhOHh4X2NwdWlkbGVfZGV2aWNlKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwppbmRleCBkZWRmNGQ0Li4zZGMwYTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2FzcC5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm11eC5oIgpAQCAtMTI1LDcgKzEyNiw2IEBACiAJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVlBTU1NMViwKIH07CiAKLQogc3RhdGljIHN0cnVjdCBjbGsgY2xrb3V0MV9jbGsgPSB7CiAJLm5hbWUgPSAiY2xrb3V0MSIsCiAJLnBhcmVudCA9ICZwbGwxX2F1eF9jbGssCkBAIC0zMzUsNyArMzM1LDcgQEAKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19VU0IsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRhdmluY2lfY2xrIGRtMzU1X2Nsa3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBkbTM1NV9jbGtzW10gPSB7CiAJQ0xLKE5VTEwsICJyZWYiLCAmcmVmX2NsayksCiAJQ0xLKE5VTEwsICJwbGwxIiwgJnBsbDFfY2xrKSwKIAlDTEsoTlVMTCwgInBsbDFfc3lzY2xrMSIsICZwbGwxX3N5c2NsazEpLApAQCAtMzYzLDkgKzM2Myw5IEBACiAJQ0xLKCJkYXZpbmNpLWFzcC4xIiwgTlVMTCwgJmFzcDFfY2xrKSwKIAlDTEsoImRhdmluY2lfbW1jLjAiLCBOVUxMLCAmbW1jc2QwX2NsayksCiAJQ0xLKCJkYXZpbmNpX21tYy4xIiwgTlVMTCwgJm1tY3NkMV9jbGspLAotCUNMSyhOVUxMLCAic3BpMCIsICZzcGkwX2NsayksCi0JQ0xLKE5VTEwsICJzcGkxIiwgJnNwaTFfY2xrKSwKLQlDTEsoTlVMTCwgInNwaTIiLCAmc3BpMl9jbGspLAorCUNMSygic3BpX2RhdmluY2kuMCIsIE5VTEwsICZzcGkwX2NsayksCisJQ0xLKCJzcGlfZGF2aW5jaS4xIiwgTlVMTCwgJnNwaTFfY2xrKSwKKwlDTEsoInNwaV9kYXZpbmNpLjIiLCBOVUxMLCAmc3BpMl9jbGspLAogCUNMSyhOVUxMLCAiZ3BpbyIsICZncGlvX2NsayksCiAJQ0xLKE5VTEwsICJhZW1pZiIsICZhZW1pZl9jbGspLAogCUNMSyhOVUxMLCAicHdtMCIsICZwd20wX2NsayksCkBAIC0zOTIsMjQgKzM5Miw0MCBAQAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKLQkJLnN0YXJ0ID0gSVJRX0RNMzU1X1NQSU5UMF8xLAorCQkuc3RhcnQgPSBJUlFfRE0zNTVfU1BJTlQwXzAsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JLyogTm90IHlldCB1c2VkLCBzbyBub3QgaW5jbHVkZWQ6Ci0JICogSU9SRVNPVVJDRV9JUlE6Ci0JICogIC0gSVJRX0RNMzU1X1NQSU5UMF8wCi0JICogSU9SRVNPVVJDRV9ETUE6Ci0JICogIC0gREFWSU5DSV9ETUFfU1BJX1NQSVgKLQkgKiAgLSBEQVZJTkNJX0RNQV9TUElfU1BJUgotCSAqLworCXsKKwkJLnN0YXJ0ID0gMTcsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJeworCQkuc3RhcnQgPSAxNiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwl7CisJCS5zdGFydCA9IEVWRU5UUV8xLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhIGRtMzU1X3NwaTBfcGRhdGEgPSB7CisJLnZlcnNpb24gCT0gU1BJX1ZFUlNJT05fMSwKKwkubnVtX2NoaXBzZWxlY3QgPSAyLAorCS5jbGtfaW50ZXJuYWwJPSAxLAorCS5jc19ob2xkCT0gMSwKKwkuaW50cl9sZXZlbAk9IDAsCisJLnBvbGxfbW9kZQk9IDEsCS8qIDAgLT4gaW50ZXJydXB0IG1vZGUgMS0+IHBvbGxpbmcgbW9kZSAqLworCS5jMnRkZWxheQk9IDAsCisJLnQyY2RlbGF5CT0gMCwKK307CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM1NV9zcGkwX2RldmljZSA9IHsKIAkubmFtZSA9ICJzcGlfZGF2aW5jaSIsCiAJLmlkID0gMCwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sgPSAmZG0zNTVfc3BpMF9kbWFfbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZG0zNTVfc3BpMF9wZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShkbTM1NV9zcGkwX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gZG0zNTVfc3BpMF9yZXNvdXJjZXMsCkBAIC01NjQsMTMgKzU4MCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBjb25zdCBzOCBkbWFfY2hhbl9kbTM1NV9ub19ldmVudFtdID0gewotCTEyLCAxMywgMjQsIDU2LCA1NywKLQk1OCwgNTksIDYwLCA2MSwgNjIsCi0JNjMsCi0JLTEKLX07Ci0KIHN0YXRpYyBjb25zdCBzOAogcXVldWVfdGNfbWFwcGluZ1tdWzJdID0gewogCS8qIHtldmVudCBxdWV1ZSBubywgVEMgbm99ICovCkBAIC01OTQsNyArNjAzLDYgQEAKIAkJLm5fc2xvdAkJCT0gMTI4LAogCQkubl90YwkJCT0gMiwKIAkJLm5fY2MJCQk9IDEsCi0JCS5ub2V2ZW50CQk9IGRtYV9jaGFuX2RtMzU1X25vX2V2ZW50LAogCQkucXVldWVfdGNfbWFwcGluZwk9IHF1ZXVlX3RjX21hcHBpbmcsCiAJCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIAl9LApAQCAtNjY1LDYgKzY3MywxNyBAQAogCS5yZXNvdXJjZQk9IGRtMzU1X2FzcDFfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHZvaWQgZG0zNTVfY2NkY19zZXR1cF9waW5tdXgodm9pZCkKK3sKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1BDTEspOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1dFTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fVkQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX0hEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1lJTl9FTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5MX0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkhfRU4pOworfQorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzU1X3Zwc3NfcmVzb3VyY2VzW10gPSB7CiAJewogCQkvKiBWUFNTIEJMIEJhc2UgYWRkcmVzcyAqLwpAQCAtNzAxLDYgKzcyMCwxMCBAQAogCQkuZW5kICAgICAgICAgICAgPSBJUlFfVkRJTlQxLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAorfTsKKworc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM1NV9jY2RjX3Jlc291cmNlW10gPSB7CiAJLyogQ0NEQyBCYXNlIGFkZHJlc3MgKi8KIAl7CiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLApAQCAtNzA4LDggKzczMSwxOCBAQAogCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwNjAwICsgMHgxZmYsCiAJfSwKIH07CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM1NV9jY2RjX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiZG0zNTVfY2NkYyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShkbTM1NV9jY2RjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICAgPSBkbTM1NV9jY2RjX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCQkucGxhdGZvcm1fZGF0YQkJPSBkbTM1NV9jY2RjX3NldHVwX3Bpbm11eCwKKwl9LAorfTsKIAotc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnBmZV9jYXB0dXJlX2RldiA9IHsKIAkubmFtZQkJPSBDQVBUVVJFX0RSVl9OQU1FLAogCS5pZAkJPSAtMSwKQEAgLTg1NywyMCArODkwLDEzIEBACiAJaWYgKCFjcHVfaXNfZGF2aW5jaV9kbTM1NSgpKQogCQlyZXR1cm4gMDsKIAorCS8qIEFkZCBjY2RjIGNsb2NrIGFsaWFzZXMgKi8KKwljbGtfYWRkX2FsaWFzKCJtYXN0ZXIiLCBkbTM1NV9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJzbGF2ZSIsIGRtMzU1X2NjZGNfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOwogCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9JTlRfRURNQV9DQyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV9lZG1hX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV92cHNzX2RldmljZSk7Ci0JLyoKLQkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgdnBmZSBpbnB1dCBhbmQgcmVnaXN0ZXIKLQkgKiB2cGZlIGNhcHR1cmUgcGxhdGZvcm0gZGV2aWNlCi0JICovCi0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9QQ0xLKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9XRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1ZEKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9IRCk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9ZSU5fRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOTF9FTik7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5IX0VOKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzU1X2NjZGNfZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCmluZGV4IGY1MzczNWNiLi4yNzc3MmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCkBAIC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2FzcC5oPgogI2luY2x1ZGUgPG1hY2gva2V5c2Nhbi5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAibXV4LmgiCkBAIC00MDMsNyArNDA2LDcgQEAKIAkubHBzYwkJPSBETTM2NV9MUFNDX01KQ1AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRhdmluY2lfY2xrIGRtMzY1X2Nsa3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBkbTM2NV9jbGtzW10gPSB7CiAJQ0xLKE5VTEwsICJyZWYiLCAmcmVmX2NsayksCiAJQ0xLKE5VTEwsICJwbGwxIiwgJnBsbDFfY2xrKSwKIAlDTEsoTlVMTCwgInBsbDFfYXV4IiwgJnBsbDFfYXV4X2NsayksCkBAIC00NTUsNyArNDU4LDcgQEAKIAlDTEsoTlVMTCwgInRpbWVyMyIsICZ0aW1lcjNfY2xrKSwKIAlDTEsoTlVMTCwgInVzYiIsICZ1c2JfY2xrKSwKIAlDTEsoImRhdmluY2lfZW1hYy4xIiwgTlVMTCwgJmVtYWNfY2xrKSwKLQlDTEsoInZvaWNlX2NvZGVjIiwgTlVMTCwgJnZvaWNlY29kZWNfY2xrKSwKKwlDTEsoImRhdmluY2lfdm9pY2Vjb2RlYyIsIE5VTEwsICZ2b2ljZWNvZGVjX2NsayksCiAJQ0xLKCJkYXZpbmNpLWFzcC4wIiwgTlVMTCwgJmFzcDBfY2xrKSwKIAlDTEsoTlVMTCwgInJ0byIsICZydG9fY2xrKSwKIAlDTEsoTlVMTCwgIm1qY3AiLCAmbWpjcF9jbGspLApAQCAtNjA2LDkgKzYwOSw3OCBAQAogCiBFVlRfQ0ZHKERNMzY1LAlFVlQyX0FTUF9UWCwgICAgICAgICAwLCAgICAgMSwgICAgMCwgICAgIGZhbHNlKQogRVZUX0NGRyhETTM2NSwJRVZUM19BU1BfUlgsICAgICAgICAgMSwgICAgIDEsICAgIDAsICAgICBmYWxzZSkKK0VWVF9DRkcoRE0zNjUsCUVWVDJfVkNfVFgsICAgICAgICAgIDAsICAgICAxLCAgICAxLCAgICAgZmFsc2UpCitFVlRfQ0ZHKERNMzY1LAlFVlQzX1ZDX1JYLCAgICAgICAgICAxLCAgICAgMSwgICAgMSwgICAgIGZhbHNlKQogI2VuZGlmCiB9OwogCitzdGF0aWMgdTY0IGRtMzY1X3NwaTBfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgZG0zNjVfc3BpMF9wZGF0YSA9IHsKKwkudmVyc2lvbiAJPSBTUElfVkVSU0lPTl8xLAorCS5udW1fY2hpcHNlbGVjdCA9IDIsCisJLmNsa19pbnRlcm5hbAk9IDEsCisJLmNzX2hvbGQJPSAxLAorCS5pbnRyX2xldmVsCT0gMCwKKwkucG9sbF9tb2RlCT0gMSwJLyogMCAtPiBpbnRlcnJ1cHQgbW9kZSAxLT4gcG9sbGluZyBtb2RlICovCisJLmMydGRlbGF5CT0gMCwKKwkudDJjZGVsYXkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM2NV9zcGkwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHgwMWM2NjAwMCwKKwkJLmVuZCAgID0gMHgwMWM2NjdmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9ETTM2NV9TUElJTlQwXzAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSAxNywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwl7CisJCS5zdGFydCA9IDE2LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gRVZFTlRRXzMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM2NV9zcGkwX2RldmljZSA9IHsKKwkubmFtZSA9ICJzcGlfZGF2aW5jaSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgPSAmZG0zNjVfc3BpMF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZG0zNjVfc3BpMF9wZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShkbTM2NV9zcGkwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gZG0zNjVfc3BpMF9yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBkbTM2NV9pbml0X3NwaTAodW5zaWduZWQgY2hpcHNlbGVjdF9tYXNrLAorCQlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmluZm8sIHVuc2lnbmVkIGxlbikKK3sKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfU1BJMF9TQ0xLKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfU1BJMF9TREkpOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9TUEkwX1NETyk7CisKKwkvKiBub3QgYWxsIHNsYXZlcyB3aWxsIGJlIHdpcmVkIHVwICovCisJaWYgKGNoaXBzZWxlY3RfbWFzayAmIEJJVCgwKSkKKwkJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1NQSTBfU0RFTkEwKTsKKwlpZiAoY2hpcHNlbGVjdF9tYXNrICYgQklUKDEpKQorCQlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfU1BJMF9TREVOQTEpOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5mbywgbGVuKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfc3BpMF9kZXZpY2UpOworfQorCiBzdGF0aWMgc3RydWN0IGVtYWNfcGxhdGZvcm1fZGF0YSBkbTM2NV9lbWFjX3BkYXRhID0gewogCS5jdHJsX3JlZ19vZmZzZXQJPSBETTM2NV9FTUFDX0NOVFJMX09GRlNFVCwKIAkuY3RybF9tb2RfcmVnX29mZnNldAk9IERNMzY1X0VNQUNfQ05UUkxfTU9EX09GRlNFVCwKQEAgLTc1NCw3ICs4MjYsNyBAQAogCQkubl9jYwkJCT0gMSwKIAkJLnF1ZXVlX3RjX21hcHBpbmcJPSBkbTM2NV9xdWV1ZV90Y19tYXBwaW5nLAogCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRtMzY1X3F1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCi0JCS5kZWZhdWx0X3F1ZXVlCQk9IEVWRU5UUV8yLAorCQkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMywKIAl9LAogfTsKIApAQCAtODM1LDYgKzkwNywzMSBAQAogCS5yZXNvdXJjZQk9IGRtMzY1X2FzcF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzY1X3ZjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gREFWSU5DSV9ETTM2NV9WQ19CQVNFLAorCQkuZW5kCT0gREFWSU5DSV9ETTM2NV9WQ19CQVNFICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gREFWSU5DSV9ETUFfVkNfVFgsCisJCS5lbmQJPSBEQVZJTkNJX0RNQV9WQ19UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwl7CisJCS5zdGFydAk9IERBVklOQ0lfRE1BX1ZDX1JYLAorCQkuZW5kCT0gREFWSU5DSV9ETUFfVkNfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM2NV92Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImRhdmluY2lfdm9pY2Vjb2RlYyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTM2NV92Y19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGRtMzY1X3ZjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zNjVfcnRjX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gRE0zNjVfUlRDX0JBU0UsCkBAIC05OTEsNiArMTA4OCwxNCBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfYXNwX2RldmljZSk7CiB9CiAKK3ZvaWQgX19pbml0IGRtMzY1X2luaXRfdmMoc3RydWN0IHNuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfRVZUMl9WQ19UWCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X0VWVDNfVkNfUlgpOworCWRtMzY1X3ZjX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfdmNfZGV2aWNlKTsKK30KKwogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9rcyhzdHJ1Y3QgZGF2aW5jaV9rc19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKIAlkbTM2NV9rc19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKQEAgLTEwMDgsNiArMTExMyw5NyBAQAogCWRhdmluY2lfY29tbW9uX2luaXQoJmRhdmluY2lfc29jX2luZm9fZG0zNjUpOwogfQogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzY1X3Zwc3NfcmVzb3VyY2VzW10gPSB7CisJeworCQkvKiBWUFNTIElTUDUgQmFzZSBhZGRyZXNzICovCisJCS5uYW1lICAgICAgICAgICA9ICJpc3A1IiwKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDAwMCArIDB4ZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBWUFNTIENMSyBCYXNlIGFkZHJlc3MgKi8KKwkJLm5hbWUgICAgICAgICAgID0gInZwc3MiLAorCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcwMjAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwMjAwICsgMHhmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtMzY1X3Zwc3NfZGV2aWNlID0geworICAgICAgIC5uYW1lICAgICAgICAgICAgICAgICAgID0gInZwc3MiLAorICAgICAgIC5pZCAgICAgICAgICAgICAgICAgICAgID0gLTEsCisgICAgICAgLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAiZG0zNjVfdnBzcyIsCisgICAgICAgLm51bV9yZXNvdXJjZXMgICAgICAgICAgPSBBUlJBWV9TSVpFKGRtMzY1X3Zwc3NfcmVzb3VyY2VzKSwKKyAgICAgICAucmVzb3VyY2UgICAgICAgICAgICAgICA9IGRtMzY1X3Zwc3NfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2cGZlX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gSVJRX1ZESU5UMCwKKwkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMCwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgICAgICAgICA9IElSUV9WRElOVDEsCisJCS5lbmQgICAgICAgICAgICA9IElSUV9WRElOVDEsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0geworCS5uYW1lICAgICAgICAgICA9IENBUFRVUkVfRFJWX05BTUUsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRSh2cGZlX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gdnBmZV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmdnBmZV9jYXB0dXJlX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGRtMzY1X2lzaWZfc2V0dXBfcGlubXV4KHZvaWQpCit7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9DQU1fV0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX0NBTV9WRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9DQU1fSEQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fWUlONF83X0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX1lJTjBfM19FTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXNpZl9yZXNvdXJjZVtdID0geworCS8qIElTSUYgQmFzZSBhZGRyZXNzICovCisJeworCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcxMDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcxMDAwICsgMHgxZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyogSVNJRiBMaW5lYXJpemF0aW9uIHRhYmxlIDAgKi8KKwl7CisJCS5zdGFydCAgICAgICAgICA9IDB4MUM3QzAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgxQzdDMDAwICsgMHgyZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyogSVNJRiBMaW5lYXJpemF0aW9uIHRhYmxlIDEgKi8KKwl7CisJCS5zdGFydCAgICAgICAgICA9IDB4MUM3QzQwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgxQzdDNDAwICsgMHgyZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNjVfaXNpZl9kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gImlzaWYiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaXNpZl9yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgID0gaXNpZl9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gZG0zNjVfaXNpZl9zZXR1cF9waW5tdXgsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtMzY1X2luaXRfZGV2aWNlcyh2b2lkKQogewogCWlmICghY3B1X2lzX2RhdmluY2lfZG0zNjUoKSkKQEAgLTEwMTYsNyArMTIxMiwxNiBAQAogCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9JTlRfRURNQV9DQyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9lZG1hX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9lbWFjX2RldmljZSk7Ci0KKwkvKiBBZGQgaXNpZiBjbG9jayBhbGlhcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtMzY1X2lzaWZfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfdnBzc19kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfaXNpZl9kZXYpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdnBmZV9jYXB0dXJlX2Rldik7CiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChkbTM2NV9pbml0X2RldmljZXMpOworCit2b2lkIGRtMzY1X3NldF92cGZlX2NvbmZpZyhzdHJ1Y3QgdnBmZV9jb25maWcgKmNmZykKK3sKKyAgICAgICB2cGZlX2NhcHR1cmVfZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCmluZGV4IDJjZDAwODEuLjJmMmFlOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FudCcgdGhpcyBiZSBkaXNhYmxlZD8gKi8KIH07CiAKLXN0cnVjdCBkYXZpbmNpX2NsayBkbTY0NHhfY2xrc1tdID0geworc3RydWN0IGNsa19sb29rdXAgZG02NDR4X2Nsa3NbXSA9IHsKIAlDTEsoTlVMTCwgInJlZiIsICZyZWZfY2xrKSwKIAlDTEsoTlVMTCwgInBsbDEiLCAmcGxsMV9jbGspLAogCUNMSyhOVUxMLCAicGxsMV9zeXNjbGsxIiwgJnBsbDFfc3lzY2xrMSksCkBAIC00NzksMTUgKzQ3OSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBjb25zdCBzOCBkbWFfY2hhbl9kbTY0NHhfbm9fZXZlbnRbXSA9IHsKLQkgMCwgIDEsIDEyLCAxMywgMTQsCi0JMTUsIDI1LCAzMCwgMzEsIDQ1LAotCTQ2LCA0NywgNTUsIDU2LCA1NywKLQk1OCwgNTksIDYwLCA2MSwgNjIsCi0JNjMsCi0JLTEKLX07Ci0KIHN0YXRpYyBjb25zdCBzOAogcXVldWVfdGNfbWFwcGluZ1tdWzJdID0gewogCS8qIHtldmVudCBxdWV1ZSBubywgVEMgbm99ICovCkBAIC01MTEsNyArNTAyLDYgQEAKIAkJLm5fc2xvdAkJCT0gMTI4LAogCQkubl90YwkJCT0gMiwKIAkJLm5fY2MJCQk9IDEsCi0JCS5ub2V2ZW50CQk9IGRtYV9jaGFuX2RtNjQ0eF9ub19ldmVudCwKIAkJLnF1ZXVlX3RjX21hcHBpbmcJPSBxdWV1ZV90Y19tYXBwaW5nLAogCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IHF1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCiAJfSwKQEAgLTYxMiw2ICs2MDIsMTEgQEAKIAkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG02NDR4X2NjZGNfcmVzb3VyY2VbXSA9IHsKKwkvKiBDQ0RDIEJhc2UgYWRkcmVzcyAqLwogCXsKIAkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDQwMCwKIAkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDQwMCArIDB4ZmYsCkBAIC02MTksNyArNjE0LDE3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtNjQ0eF9jY2RjX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiZG02NDR4X2NjZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG02NDR4X2NjZGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSAgICAgICA9IGRtNjQ0eF9jY2RjX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0gewogCS5uYW1lCQk9IENBUFRVUkVfRFJWX05BTUUsCiAJLmlkCQk9IC0xLApAQCAtNzY5LDkgKzc3NCwxMyBAQAogCWlmICghY3B1X2lzX2RhdmluY2lfZG02NDR4KCkpCiAJCXJldHVybiAwOwogCisJLyogQWRkIGNjZGMgY2xvY2sgYWxpYXNlcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJzbGF2ZSIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19zbGF2ZSIsIE5VTEwpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF9lbWFjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfdnBzc19kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2NjZGNfZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDZ4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDZ4LmMKaW5kZXggODI5YTQ0Yi4uODkzYmFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ2eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NnguYwpAQCAtNDIsNyArNDIsNiBAQAogLyoKICAqIERldmljZSBzcGVjaWZpYyBjbG9ja3MKICAqLwotI2RlZmluZSBETTY0NlhfUkVGX0ZSRVEJCTI3MDAwMDAwCiAjZGVmaW5lIERNNjQ2WF9BVVhfRlJFUQkJMjQwMDAwMDAKIAogc3RhdGljIHN0cnVjdCBwbGxfZGF0YSBwbGwxX2RhdGEgPSB7CkBAIC01Nyw3ICs1Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJlZl9jbGsgPSB7CiAJLm5hbWUgPSAicmVmX2NsayIsCi0JLnJhdGUgPSBETTY0NlhfUkVGX0ZSRVEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhdXhfY2xraW4gPSB7CkBAIC0zMTMsNyArMzExLDcgQEAKIAkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKIH07CiAKLXN0cnVjdCBkYXZpbmNpX2NsayBkbTY0NnhfY2xrc1tdID0geworc3RydWN0IGNsa19sb29rdXAgZG02NDZ4X2Nsa3NbXSA9IHsKIAlDTEsoTlVMTCwgInJlZiIsICZyZWZfY2xrKSwKIAlDTEsoTlVMTCwgImF1eCIsICZhdXhfY2xraW4pLAogCUNMSyhOVUxMLCAicGxsMSIsICZwbGwxX2NsayksCkBAIC01MTMsMTQgKzUxMSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBjb25zdCBzOCBkbWFfY2hhbl9kbTY0Nnhfbm9fZXZlbnRbXSA9IHsKLQkgMCwgIDEsICAyLCAgMywgMTMsCi0JMTQsIDE1LCAyNCwgMjUsIDI2LAotCTI3LCAzMCwgMzEsIDU0LCA1NSwKLQk1NiwKLQktMQotfTsKLQogLyogRm91ciBUcmFuc2ZlciBDb250cm9sbGVycyBvbiBETTY0NnggKi8KIHN0YXRpYyBjb25zdCBzOAogZG02NDZ4X3F1ZXVlX3RjX21hcHBpbmdbXVsyXSA9IHsKQEAgLTU0OSw3ICs1MzksNiBAQAogCQkubl9zbG90CQkJPSA1MTIsCiAJCS5uX3RjCQkJPSA0LAogCQkubl9jYwkJCT0gMSwKLQkJLm5vZXZlbnQJCT0gZG1hX2NoYW5fZG02NDZ4X25vX2V2ZW50LAogCQkucXVldWVfdGNfbWFwcGluZwk9IGRtNjQ2eF9xdWV1ZV90Y19tYXBwaW5nLAogCQkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRtNjQ2eF9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAogCX0sCkBAIC05MjUsNiArOTE0LDcgQEAKIAogdm9pZCBfX2luaXQgZG02NDZ4X2luaXQodm9pZCkKIHsKKwlkbTY0NnhfYm9hcmRfc2V0dXBfcmVmY2xrKCZyZWZfY2xrKTsKIAlkYXZpbmNpX2NvbW1vbl9pbml0KCZkYXZpbmNpX3NvY19pbmZvX2RtNjQ2eCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbWEuYwppbmRleCA2NDhmYmI3Li4xNWRkODg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtYS5jCkBAIC0yMjYsMTEgKzIyNiwxMSBAQAogCSAqLwogCURFQ0xBUkVfQklUTUFQKGVkbWFfaW51c2UsIEVETUFfTUFYX1BBUkFNRU5UUlkpOwogCi0JLyogVGhlIGVkbWFfbm9ldmVudCBiaXQgZm9yIGVhY2ggY2hhbm5lbCBpcyBjbGVhciB1bmxlc3MKLQkgKiBpdCBkb2Vzbid0IHRyaWdnZXIgRE1BIGV2ZW50cyBvbiB0aGlzIHBsYXRmb3JtLiAgSXQgdXNlcyBhCi0JICogYml0IG9mIFNPQy1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlLgorCS8qIFRoZSBlZG1hX3VudXNlZCBiaXQgZm9yIGVhY2ggY2hhbm5lbCBpcyBjbGVhciB1bmxlc3MKKwkgKiBpdCBpcyBub3QgYmVpbmcgdXNlZCBvbiB0aGlzIHBsYXRmb3JtLiBJdCB1c2VzIGEgYml0CisJICogb2YgU09DLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUuCiAJICovCi0JREVDTEFSRV9CSVRNQVAoZWRtYV9ub2V2ZW50LCBFRE1BX01BWF9ETUFDSCk7CisJREVDTEFSRV9CSVRNQVAoZWRtYV91bnVzZWQsIEVETUFfTUFYX0RNQUNIKTsKIAogCXVuc2lnbmVkCWlycV9yZXNfc3RhcnQ7CiAJdW5zaWduZWQJaXJxX3Jlc19lbmQ7CkBAIC0yNDMsNiArMjQzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWRtYSAqZWRtYV9pbmZvW0VETUFfTUFYX0NDXTsKK3N0YXRpYyBpbnQgYXJjaF9udW1fY2M7CiAKIC8qIGR1bW15IHBhcmFtIHNldCB1c2VkIHRvIChyZSlpbml0aWFsaXplIHBhcmFtZXRlciBSQU0gc2xvdHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWRtYWNjX3BhcmFtIGR1bW15X3BhcmFtc2V0ID0gewpAQCAtNTU1LDggKzU1NiwyNyBAQAogCXJldHVybiBFRE1BX0NUTFJfQ0hBTihjdGxyLCBpIC0gbnVtX3Nsb3RzICsgMSk7CiB9CiAKK3N0YXRpYyBpbnQgcHJlcGFyZV91bnVzZWRfY2hhbm5lbF9saXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IGksIGN0bHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CisJCWlmICgocGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX0RNQSkgJiYKKwkJCQkoaW50KXBkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID49IDApIHsKKwkJCWN0bHIgPSBFRE1BX0NUTFIocGRldi0+cmVzb3VyY2VbaV0uc3RhcnQpOworCQkJY2xlYXJfYml0KEVETUFfQ0hBTl9TTE9UKHBkZXYtPnJlc291cmNlW2ldLnN0YXJ0KSwKKwkJCQkJZWRtYV9pbmZvW2N0bHJdLT5lZG1hX3VudXNlZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBib29sIHVudXNlZF9jaGFuX2xpc3RfZG9uZTsKKwogLyogUmVzb3VyY2UgYWxsb2MvZnJlZTogIGRtYSBjaGFubmVscywgcGFyYW1ldGVyIFJBTSBzbG90cyAqLwogCiAvKioKQEAgLTU5NCw3ICs2MTQsMjIgQEAKIAkJdm9pZCAqZGF0YSwKIAkJZW51bSBkbWFfZXZlbnRfcSBldmVudHFfbm8pCiB7Ci0JdW5zaWduZWQgaSwgZG9uZSwgY3RsciA9IDA7CisJdW5zaWduZWQgaSwgZG9uZSA9IDAsIGN0bHIgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKCF1bnVzZWRfY2hhbl9saXN0X2RvbmUpIHsKKwkJLyoKKwkJICogU2NhbiBhbGwgdGhlIHBsYXRmb3JtIGRldmljZXMgdG8gZmluZCBvdXQgdGhlIEVETUEgY2hhbm5lbHMKKwkJICogdXNlZCBhbmQgY2xlYXIgdGhlbSBpbiB0aGUgdW51c2VkIGxpc3QsIG1ha2luZyB0aGUgcmVzdAorCQkgKiBhdmFpbGFibGUgZm9yIEFSTSB1c2FnZS4KKwkJICovCisJCXJldCA9IGJ1c19mb3JfZWFjaF9kZXYoJnBsYXRmb3JtX2J1c190eXBlLCBOVUxMLCBOVUxMLAorCQkJCXByZXBhcmVfdW51c2VkX2NoYW5uZWxfbGlzdCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQl1bnVzZWRfY2hhbl9saXN0X2RvbmUgPSB0cnVlOworCX0KIAogCWlmIChjaGFubmVsID49IDApIHsKIAkJY3RsciA9IEVETUFfQ1RMUihjaGFubmVsKTsKQEAgLTYwMiwxNSArNjM3LDE1IEBACiAJfQogCiAJaWYgKGNoYW5uZWwgPCAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBFRE1BX01BWF9DQzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhcmNoX251bV9jYzsgaSsrKSB7CiAJCQljaGFubmVsID0gMDsKIAkJCWZvciAoOzspIHsKIAkJCQljaGFubmVsID0gZmluZF9uZXh0X2JpdChlZG1hX2luZm9baV0tPgotCQkJCQkJZWRtYV9ub2V2ZW50LAorCQkJCQkJZWRtYV91bnVzZWQsCiAJCQkJCQllZG1hX2luZm9baV0tPm51bV9jaGFubmVscywKIAkJCQkJCWNoYW5uZWwpOwogCQkJCWlmIChjaGFubmVsID09IGVkbWFfaW5mb1tpXS0+bnVtX2NoYW5uZWxzKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJYnJlYWs7CiAJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsCiAJCQkJCQllZG1hX2luZm9baV0tPmVkbWFfaW51c2UpKSB7CiAJCQkJCWRvbmUgPSAxOwpAQCAtNjIyLDYgKzY1Nyw4IEBACiAJCQlpZiAoZG9uZSkKIAkJCQlicmVhazsKIAkJfQorCQlpZiAoIWRvbmUpCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UgaWYgKGNoYW5uZWwgPj0gZWRtYV9pbmZvW2N0bHJdLT5udW1fY2hhbm5lbHMpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIGVkbWFfaW5mb1tjdGxyXS0+ZWRtYV9pbnVzZSkpIHsKQEAgLTY0Miw3ICs2NzksNyBAQAogCiAJbWFwX2RtYWNoX3F1ZXVlKGN0bHIsIGNoYW5uZWwsIGV2ZW50cV9ubyk7CiAKLQlyZXR1cm4gY2hhbm5lbDsKKwlyZXR1cm4gRURNQV9DVExSX0NIQU4oY3RsciwgY2hhbm5lbCk7CiB9CiBFWFBPUlRfU1lNQk9MKGVkbWFfYWxsb2NfY2hhbm5lbCk7CiAKQEAgLTEyMTksNyArMTI1Niw3IEBACiAJCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgKGNoYW5uZWwgJiAweDFmKSk7CiAKIAkJLyogRURNQSBjaGFubmVscyB3aXRob3V0IGV2ZW50IGFzc29jaWF0aW9uICovCi0JCWlmICh0ZXN0X2JpdChjaGFubmVsLCBlZG1hX2luZm9bY3Rscl0tPmVkbWFfbm9ldmVudCkpIHsKKwkJaWYgKHRlc3RfYml0KGNoYW5uZWwsIGVkbWFfaW5mb1tjdGxyXS0+ZWRtYV91bnVzZWQpKSB7CiAJCQlwcl9kZWJ1ZygiRURNQTogRVNSJWQgJTA4eFxuIiwgaiwKIAkJCQllZG1hX3NoYWRvdzBfcmVhZF9hcnJheShjdGxyLCBTSF9FU1IsIGopKTsKIAkJCWVkbWFfc2hhZG93MF93cml0ZV9hcnJheShjdGxyLCBTSF9FU1IsIGosIG1hc2spOwpAQCAtMTM0NCw3ICsxMzgxLDYgQEAKIAljb25zdCBzOAkJKCpxdWV1ZV90Y19tYXBwaW5nKVsyXTsKIAlpbnQJCQlpLCBqLCBmb3VuZCA9IDA7CiAJaW50CQkJc3RhdHVzID0gLTE7Ci0JY29uc3QgczgJCSpub2V2ZW50OwogCWludAkJCWlycVtFRE1BX01BWF9DQ10gPSB7MCwgMH07CiAJaW50CQkJZXJyX2lycVtFRE1BX01BWF9DQ10gPSB7MCwgMH07CiAJc3RydWN0IHJlc291cmNlCQkqcltFRE1BX01BWF9DQ10gPSB7TlVMTH07CkBAIC0xNDA3LDExICsxNDQzLDkgQEAKIAkJCW1lbWNweV90b2lvKGVkbWFjY19yZWdzX2Jhc2Vbal0gKyBQQVJNX09GRlNFVChpKSwKIAkJCQkJJmR1bW15X3BhcmFtc2V0LCBQQVJNX1NJWkUpOwogCi0JCW5vZXZlbnQgPSBpbmZvW2pdLm5vZXZlbnQ7Ci0JCWlmIChub2V2ZW50KSB7Ci0JCQl3aGlsZSAoKm5vZXZlbnQgIT0gLTEpCi0JCQkJc2V0X2JpdCgqbm9ldmVudCsrLCBlZG1hX2luZm9bal0tPmVkbWFfbm9ldmVudCk7Ci0JCX0KKwkJLyogTWFyayBhbGwgY2hhbm5lbHMgYXMgdW51c2VkICovCisJCW1lbXNldChlZG1hX2luZm9bal0tPmVkbWFfdW51c2VkLCAweGZmLAorCQkJc2l6ZW9mKGVkbWFfaW5mb1tqXS0+ZWRtYV91bnVzZWQpKTsKIAogCQlzcHJpbnRmKGlycV9uYW1lLCAiZWRtYSVkIiwgaik7CiAJCWlycVtqXSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIGlycV9uYW1lKTsKQEAgLTE0NjcsNiArMTUwMSw3IEBACiAJCQllZG1hX3dyaXRlX2FycmF5MihqLCBFRE1BX0RSQUUsIGksIDEsIDB4MCk7CiAJCQllZG1hX3dyaXRlX2FycmF5KGosIEVETUFfUVJBRSwgaSwgMHgwKTsKIAkJfQorCQlhcmNoX251bV9jYysrOwogCX0KIAogCWlmICh0Y19lcnJzX2hhbmRsZWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY2RjZTk0OS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jZGNlOTQ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczMzMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NkY2U5NDkuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogVEkgQ0RDRTk0OSBvZmYtY2hpcCBjbG9jayBzeW50aGVzaXplciBzdXBwb3J0CisgKgorICogMjAwOSAoQykgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfTUFDSF9EQVZJTkNJX0NEQ0U5NDlfSAorI2RlZmluZSBfTUFDSF9EQVZJTkNJX0NEQ0U5NDlfSAorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisKK2ludCBjZGNlX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jb21tb24uaAppbmRleCA2Y2EyYzlhLi41MGE5NTVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTQzLDcgKzQzLDcgQEAKIAl2b2lkIF9faW9tZW0JCQkqanRhZ19pZF9iYXNlOwogCXN0cnVjdCBkYXZpbmNpX2lkCQkqaWRzOwogCXVuc2lnbmVkIGxvbmcJCQlpZHNfbnVtOwotCXN0cnVjdCBkYXZpbmNpX2NsawkJKmNwdV9jbGtzOworCXN0cnVjdCBjbGtfbG9va3VwCQkqY3B1X2Nsa3M7CiAJdm9pZCBfX2lvbWVtCQkJKipwc2NfYmFzZXM7CiAJdW5zaWduZWQgbG9uZwkJCXBzY19iYXNlc19udW07CiAJdm9pZCBfX2lvbWVtCQkJKnBpbm11eF9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHVpZGxlLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NwdWlkbGUuaAppbmRleCBjYmZjNmE5Li43NGYwODhiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHVpZGxlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHVpZGxlLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogc3RydWN0IGRhdmluY2lfY3B1aWRsZV9jb25maWcgewogCXUzMiBkZHIyX3Bkb3duOworCXZvaWQgX19pb21lbSAqZGRyMl9jdGxyX2Jhc2U7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaAppbmRleCA5MDcwNDkxLi5jYzliZTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RhOHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kYTh4eC5oCkBAIC0xMywxNSArMTMsMTcgQEAKIAogI2luY2x1ZGUgPHZpZGVvL2RhOHh4LWZiLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9kYXZpbmNpX2VtYWMuaD4KICNpbmNsdWRlIDxtYWNoL3NlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9lbWFjLmg+CiAjaW5jbHVkZSA8bWFjaC9hc3AuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgogCi1leHRlcm4gdm9pZCBfX2lvbWVtICpkYTh4eF9zeXNjZmdfYmFzZTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmRhOHh4X3N5c2NmZzBfYmFzZTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmRhOHh4X3N5c2NmZzFfYmFzZTsKIAogLyoKICAqIFRoZSBjcF9pbnRjIGludGVycnVwdCBjb250cm9sbGVyIGZvciB0aGUgZGE4eHggaXNuJ3QgaW4gdGhlIHNhbWUKQEAgLTM0LDEzICszNiwxNyBAQAogI2RlZmluZSBEQThYWF9DUF9JTlRDX1NJWkUJU1pfOEsKICNkZWZpbmUgREE4WFhfQ1BfSU5UQ19WSVJUCShJT19WSVJUIC0gREE4WFhfQ1BfSU5UQ19TSVpFIC0gU1pfNEspCiAKLSNkZWZpbmUgREE4WFhfU1lTQ0ZHX0JBU0UJKElPX1BIWVMgKyAweDE0MDAwKQotI2RlZmluZSBEQThYWF9TWVNDRkdfVklSVCh4KQkoZGE4eHhfc3lzY2ZnX2Jhc2UgKyAoeCkpCisjZGVmaW5lIERBOFhYX1NZU0NGRzBfQkFTRQkoSU9fUEhZUyArIDB4MTQwMDApCisjZGVmaW5lIERBOFhYX1NZU0NGRzBfVklSVCh4KQkoZGE4eHhfc3lzY2ZnMF9iYXNlICsgKHgpKQogI2RlZmluZSBEQThYWF9KVEFHX0lEX1JFRwkweDE4CiAjZGVmaW5lIERBOFhYX0NGR0NISVAwX1JFRwkweDE3YwogI2RlZmluZSBEQThYWF9DRkdDSElQMl9SRUcJMHgxODQKICNkZWZpbmUgREE4WFhfQ0ZHQ0hJUDNfUkVHCTB4MTg4CiAKKyNkZWZpbmUgREE4WFhfU1lTQ0ZHMV9CQVNFCShJT19QSFlTICsgMHgyMkMwMDApCisjZGVmaW5lIERBOFhYX1NZU0NGRzFfVklSVCh4KQkoZGE4eHhfc3lzY2ZnMV9iYXNlICsgKHgpKQorI2RlZmluZSBEQThYWF9ERUVQU0xFRVBfUkVHCTB4OAorCiAjZGVmaW5lIERBOFhYX1BTQzBfQkFTRQkJMHgwMWMxMDAwMAogI2RlZmluZSBEQThYWF9QTEwwX0JBU0UJCTB4MDFjMTEwMDAKICNkZWZpbmUgREE4WFhfVElNRVI2NFAwX0JBU0UJMHgwMWMyMDAwMApAQCAtNDgsMTEgKzU0LDEzIEBACiAjZGVmaW5lIERBOFhYX0dQSU9fQkFTRQkJMHgwMWUyNjAwMAogI2RlZmluZSBEQThYWF9QU0MxX0JBU0UJCTB4MDFlMjcwMDAKICNkZWZpbmUgREE4WFhfTENEX0NOVFJMX0JBU0UJMHgwMWUxMzAwMAorI2RlZmluZSBEQThYWF9QTEwxX0JBU0UJCTB4MDFlMWEwMDAKICNkZWZpbmUgREE4WFhfTU1DU0QwX0JBU0UJMHgwMWM0MDAwMAogI2RlZmluZSBEQThYWF9BRU1JRl9DUzJfQkFTRQkweDYwMDAwMDAwCiAjZGVmaW5lIERBOFhYX0FFTUlGX0NTM19CQVNFCTB4NjIwMDAwMDAKICNkZWZpbmUgREE4WFhfQUVNSUZfQ1RMX0JBU0UJMHg2ODAwMDAwMAogI2RlZmluZSBEQThYWF9ERFIyX0NUTF9CQVNFCTB4YjAwMDAwMDAKKyNkZWZpbmUgREE4WFhfQVJNX1JBTV9CQVNFCTB4ZmZmZjAwMDAKIAogI2RlZmluZSBQSU5NVVgwCQkJMHgwMAogI2RlZmluZSBQSU5NVVgxCQkJMHgwNApAQCAtOTAsNiArOTgsOCBAQAogaW50IGRhOHh4X3JlZ2lzdGVyX3J0Yyh2b2lkKTsKIGludCBkYTg1MF9yZWdpc3Rlcl9jcHVmcmVxKHZvaWQpOwogaW50IGRhOHh4X3JlZ2lzdGVyX2NwdWlkbGUodm9pZCk7Cit2b2lkIF9faW9tZW0gKiBfX2luaXQgZGE4eHhfZ2V0X21lbV9jdGxyKHZvaWQpOworaW50IGRhODUwX3JlZ2lzdGVyX3BtKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYTh4eF9zZXJpYWxfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBlbWFjX3BsYXRmb3JtX2RhdGEgZGE4eHhfZW1hY19wZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxN2FiNTIzLi4zY2Q5M2E4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2RlZmluZSBVQVJUX1NISUZUCTIKIAotCQkubWFjcm8gYWRkcnVhcnQsIHJ4CisJCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4MDEwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaAppbmRleCBmMTcxMGEzLi4zYTM3YjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtMzY1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTM2NS5oCkBAIC0xNCwxMCArMTQsMTEgQEAKICNkZWZpbmUgX19BU01fQVJDSF9ETTY2NV9ICiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kYXZpbmNpX2VtYWMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9lbWFjLmg+CiAjaW5jbHVkZSA8bWFjaC9hc3AuaD4KICNpbmNsdWRlIDxtYWNoL2tleXNjYW4uaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oPgogCiAjZGVmaW5lIERNMzY1X0VNQUNfQkFTRQkJCSgweDAxRDA3MDAwKQogI2RlZmluZSBETTM2NV9FTUFDX0NOVFJMX09GRlNFVAkJKDB4MDAwMCkKQEAgLTMxLDkgKzMyLDE3IEBACiAKICNkZWZpbmUgRE0zNjVfUlRDX0JBU0UJCQkoMHgwMUM2OTAwMCkKIAorI2RlZmluZSBEQVZJTkNJX0RNMzY1X1ZDX0JBU0UJCSgweDAxRDBDMDAwKQorI2RlZmluZSBEQVZJTkNJX0RNQV9WQ19UWAkJMgorI2RlZmluZSBEQVZJTkNJX0RNQV9WQ19SWAkJMworCiB2b2lkIF9faW5pdCBkbTM2NV9pbml0KHZvaWQpOwogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9hc3Aoc3RydWN0IHNuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7Cit2b2lkIF9faW5pdCBkbTM2NV9pbml0X3ZjKHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9rcyhzdHJ1Y3QgZGF2aW5jaV9rc19wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiB2b2lkIF9faW5pdCBkbTM2NV9pbml0X3J0Yyh2b2lkKTsKK3ZvaWQgZG0zNjVfaW5pdF9zcGkwKHVuc2lnbmVkIGNoaXBzZWxlY3RfbWFzaywKKwkJCXN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqaW5mbywgdW5zaWduZWQgbGVuKTsKIAordm9pZCBkbTM2NV9zZXRfdnBmZV9jb25maWcoc3RydWN0IHZwZmVfY29uZmlnICpjZmcpOwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE0zNjVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTY0NHguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG02NDR4LmgKaW5kZXggNDRlOGYwZi4uMWE4YjA5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTY0NHguaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtNjQ0eC5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE02NDRYX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETTY0NFhfSAogCisjaW5jbHVkZSA8bGludXgvZGF2aW5jaV9lbWFjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZW1hYy5oPgogI2luY2x1ZGUgPG1hY2gvYXNwLmg+CiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTY0NnguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG02NDZ4LmgKaW5kZXggOGNlYzc0Ni4uODQ2ZGE5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTY0NnguaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtNjQ2eC5oCkBAIC0xMiwxMCArMTIsMTEgQEAKICNkZWZpbmUgX19BU01fQVJDSF9ETTY0NlhfSAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZW1hYy5oPgogI2luY2x1ZGUgPG1hY2gvYXNwLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGF2aW5jaV9lbWFjLmg+CiAKICNkZWZpbmUgRE02NDZYX0VNQUNfQkFTRQkJKDB4MDFDODAwMDApCiAjZGVmaW5lIERNNjQ2WF9FTUFDX0NOVFJMX09GRlNFVAkoMHgwMDAwKQpAQCAtMzAsNiArMzEsNyBAQAogdm9pZCBfX2luaXQgZG02NDZ4X2luaXRfaWRlKHZvaWQpOwogdm9pZCBfX2luaXQgZG02NDZ4X2luaXRfbWNhc3AwKHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogdm9pZCBfX2luaXQgZG02NDZ4X2luaXRfbWNhc3AxKHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwordm9pZCBfX2luaXQgZG02NDZ4X2JvYXJkX3NldHVwX3JlZmNsayhzdHJ1Y3QgY2xrICpjbGspOwogCiB2b2lkIGRtNjQ2eF92aWRlb19pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VkbWEuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCmluZGV4IGViOGJmZDcuLmNlZDMwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCkBAIC0yODAsOCArMjgwLDYgQEAKIAl1bnNpZ25lZAluX2NjOwogCWVudW0gZG1hX2V2ZW50X3EJZGVmYXVsdF9xdWV1ZTsKIAotCS8qIGxpc3Qgb2YgY2hhbm5lbHMgd2l0aCBubyBldmVuIHRyaWdnZXI7IHRlcm1pbmF0ZWQgYnkgIi0xIiAqLwotCWNvbnN0IHM4CSpub2V2ZW50OwogCWNvbnN0IHM4CSgqcXVldWVfdGNfbWFwcGluZylbMl07CiAJY29uc3QgczgJKCpxdWV1ZV9wcmlvcml0eV9tYXBwaW5nKVsyXTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VtYWMuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZW1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWZmNGZiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZW1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIFRJIERhVmluY2kgRU1BQyBwbGF0Zm9ybSBzdXBwb3J0Ci0gKgotICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIERlZXAgUm9vdCBTeXN0ZW1zLCBMTEMKLSAqCi0gKiAyMDA3IChjKSBEZWVwIFJvb3QgU3lzdGVtcywgTExDLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KLSAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KLSAqLwotI2lmbmRlZiBfTUFDSF9EQVZJTkNJX0VNQUNfSAotI2RlZmluZSBfTUFDSF9EQVZJTkNJX0VNQUNfSAotCi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KLQotc3RydWN0IGVtYWNfcGxhdGZvcm1fZGF0YSB7Ci0JY2hhciBtYWNfYWRkcltFVEhfQUxFTl07Ci0JdTMyIGN0cmxfcmVnX29mZnNldDsKLQl1MzIgY3RybF9tb2RfcmVnX29mZnNldDsKLQl1MzIgY3RybF9yYW1fb2Zmc2V0OwotCXUzMiBtZGlvX3JlZ19vZmZzZXQ7Ci0JdTMyIGN0cmxfcmFtX3NpemU7Ci0JdTMyIHBoeV9tYXNrOwotCXUzMiBtZGlvX21heF9mcmVxOwotCXU4IHJtaWlfZW47Ci0JdTggdmVyc2lvbjsKLX07Ci0KLWVudW0gewotCUVNQUNfVkVSU0lPTl8xLAkvKiBETTY0NHggKi8KLQlFTUFDX1ZFUlNJT05fMiwJLyogRE02NDZ4ICovCi19OwotCi12b2lkIGRhdmluY2lfZ2V0X21hY19hZGRyKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKm1lbV9hY2MsIHZvaWQgKmNvbnRleHQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNDFjODkzOC4uYzQ1YmExZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjcsNyArMjcsNyBAQAogLyoKICAqIEkvTyBtYXBwaW5nCiAgKi8KLSNkZWZpbmUgSU9fUEhZUwkJCQkweDAxYzAwMDAwCisjZGVmaW5lIElPX1BIWVMJCQkJMHgwMWMwMDAwMFVMCiAjZGVmaW5lIElPX09GRlNFVAkJCTB4ZmQwMDAwMDAgLyogVmlydHVhbCBJTyA9IDB4ZmVjMDAwMDAgKi8KICNkZWZpbmUgSU9fU0laRQkJCQkweDAwNDAwMDAwCiAjZGVmaW5lIElPX1ZJUlQJCQkJKElPX1BIWVMgKyBJT19PRkZTRVQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2kyYy5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pMmMuaAppbmRleCBjMjQ4ZTliLi4zOWZkY2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2kyYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaTJjLmgKQEAgLTE2LDYgKzE2LDggQEAKIHN0cnVjdCBkYXZpbmNpX2kyY19wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJYnVzX2ZyZXE7CS8qIHN0YW5kYXJkIGJ1cyBmcmVxdWVuY3kgKGtIeikgKi8KIAl1bnNpZ25lZCBpbnQJYnVzX2RlbGF5OwkvKiBwb3N0LXRyYW5zYWN0aW9uIGRlbGF5ICh1c2VjKSAqLworCXVuc2lnbmVkIGludCAgICBzZGFfcGluOyAgICAgICAgLyogR1BJTyBwaW4gSUQgdG8gdXNlIGZvciBTREEgKi8KKwl1bnNpZ25lZCBpbnQgICAgc2NsX3BpbjsgICAgICAgIC8qIEdQSU8gcGluIElEIHRvIHVzZSBmb3IgU0NMICovCiB9OwogCiAvKiBmb3IgYm9hcmQgc2V0dXAgY29kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggODAzMDlhZS4uYTkxZWRmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0zMSw2ICszMSwxMSBAQAogI2RlZmluZSBQSFlTX09GRlNFVCBEQVZJTkNJX0REUl9CQVNFCiAjZW5kaWYKIAorI2RlZmluZSBERFIyX1NEUkNSX09GRlNFVAkweGMKKyNkZWZpbmUgRERSMl9TUlBEX0JJVAkJQklUKDIzKQorI2RlZmluZSBERFIyX01DTEtTVE9QRU5fQklUCUJJVCgzMCkKKyNkZWZpbmUgRERSMl9MUE1PREVOX0JJVAlCSVQoMzEpCisKIC8qCiAgKiBJbmNyZWFzZSBzaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggYjYwYzY5My4uMmE2OGMxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL211eC5oCkBAIC0zMjcsNiArMzI3LDggQEAKIAkvKiBFRE1BIGV2ZW50IG11eGluZyAqLwogCURNMzY1X0VWVDJfQVNQX1RYLAogCURNMzY1X0VWVDNfQVNQX1JYLAorCURNMzY1X0VWVDJfVkNfVFgsCisJRE0zNjVfRVZUM19WQ19SWCwKIAlETTM2NV9FVlQyNl9NTUMwX1JYLAogfTsKIApAQCAtODk5LDYgKzkwMSw3IEBACiAJREE4NTBfR1BJTzJfMTUsCiAJREE4NTBfR1BJTzRfMCwKIAlEQTg1MF9HUElPNF8xLAorCURBODUwX1JUQ19BTEFSTSwKIH07CiAKICNpZmRlZiBDT05GSUdfREFWSU5DSV9NVVgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcG0uaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2IxOWJmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcG0uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogVEkgRGFWaW5jaSBwbGF0Zm9ybSBzdXBwb3J0IGZvciBwb3dlciBtYW5hZ2VtZW50LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLiBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTUFDSF9EQVZJTkNJX1BNX0gKKyNkZWZpbmUgX01BQ0hfREFWSU5DSV9QTV9ICisKKy8qCisgKiBDYXV0aW9uOiBBc3NlbWJseSBjb2RlIGluIHNsZWVwLlMgbWFrZXMgYXNzdW10aW9uIG9uIHRoZSBvcmRlcgorICogb2YgdGhlIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyB7CisJdm9pZCBfX2lvbWVtICpkZHIyX2N0bHJfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmRkcnBzY19yZWdfYmFzZTsKKwlpbnQgZGRycHNjX251bTsKKwl2b2lkIF9faW9tZW0gKmRkcnBsbF9yZWdfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmRlZXBzbGVlcF9yZWc7CisJdm9pZCBfX2lvbWVtICpjcHVwbGxfcmVnX2Jhc2U7CisJLyoKKwkgKiBOb3RlIG9uIFNMRUVQQ09VTlQ6CisJICogVGhlIFNMRUVQQ09VTlQgZmVhdHVyZSBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIGNhc2VzIGluIHdoaWNoCisJICogdGhlIGludGVybmFsIG9zY2lsbGF0b3IgaXMgdXNlZC4gVGhlIGludGVybmFsIG9zY2lsbGF0b3IgaXMKKwkgKiBmdWxseSBkaXNhYmxlZCBpbiBkZWVwIHNsZWVwIG1vZGUuICBXaGVuIHlvdSBleGlzdCBkZWVwIHNsZWVwCisJICogbW9kZSwgdGhlIG9zY2lsbGF0b3Igd2lsbCBiZSB0dXJuZWQgb24gYW5kIHdpbGwgZ2VuZXJhdGUgdmVyeQorCSAqIHNtYWxsIG9zY2lsbGF0aW9ucyB3aGljaCB3aWxsIG5vdCBiZSBkZXRlY3RlZCBieSB0aGUgZGVlcCBzbGVlcAorCSAqIGNvdW50ZXIuICBFdmVudHVhbGx5IHRob3NlIG9zY2lsbGF0aW9ucyB3aWxsIGdyb3cgdG8gYW4gYW1wbGl0dWRlCisJICogbGFyZ2UgZW5vdWdoIHRvIHN0YXJ0IGluY3JlbWVudGluZyB0aGUgZGVlcCBzbGVlcCBjb3VudGVyLgorCSAqIEluIHRoaXMgY2FzZSByZWNvbW1lbmRhdGlvbiBmcm9tIGhhcmR3YXJlIGVuZ2luZWVycyBpcyB0aGF0IHRoZQorCSAqIFNMRUVQQ09VTlQgYmUgc2V0IHRvIDQwOTYuICBUaGlzIG1lYW5zIHRoYXQgNDA5NiB2YWxpZCBjbG9jayBjeWNsZXMKKwkgKiBtdXN0IGJlIGRldGVjdGVkIGJlZm9yZSB0aGUgY2xvY2sgaXMgcGFzc2VkIHRvIHRoZSByZXN0IG9mIHRoZQorCSAqIHN5c3RlbS4KKwkgKiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBpbnRlcm5hbCBvc2NpbGxhdG9yIGlzIG5vdCB1c2VkIGFuZCB0aGUKKwkgKiBjbG9jayBpcyBnZW5lcmF0ZWQgZXh0ZXJuYWxseSwgdGhlIFNMRUVQQ09VTlQgdmFsdWUgY2FuIGJlIHZlcnkKKwkgKiBzbWFsbCBzaW5jZSB0aGUgY2xvY2sgaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBzdGFibGUgYmVmb3JlIFNvQworCSAqIGlzIHRha2VuIG91dCBvZiBkZWVwc2xlZXAgbW9kZS4gIEEgdmFsdWUgb2YgMTI4IHdvdWxkIGJlIG1vcmUgdGhhbgorCSAqIGFkZXF1YXRlLgorCSAqLworCWludCBzbGVlcGNvdW50OworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBkYXZpbmNpX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHZvaWQgZGF2aW5jaV9jcHVfc3VzcGVuZChzdHJ1Y3QgZGF2aW5jaV9wbV9jb25maWcgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9wc2MuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcHNjLmgKaW5kZXggMTcxMTczYzEuLjY1MWY2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcHNjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9wc2MuaApAQCAtMTgwLDggKzE4MCwyMyBAQAogI2RlZmluZSBEQThYWF9MUFNDMV9DUl9QM19TUwkJMjYKICNkZWZpbmUgREE4WFhfTFBTQzFfTDNfQ0JBX1JBTQkJMzEKIAorLyogUFNDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgRVBDUFIJCTB4MDcwCisjZGVmaW5lIFBUQ01ECQkweDEyMAorI2RlZmluZSBQVFNUQVQJCTB4MTI4CisjZGVmaW5lIFBEU1RBVAkJMHgyMDAKKyNkZWZpbmUgUERDVEwxCQkweDMwNAorI2RlZmluZSBNRFNUQVQJCTB4ODAwCisjZGVmaW5lIE1EQ1RMCQkweEEwMAorCisjZGVmaW5lIE1EU1RBVF9TVEFURV9NQVNLIDB4MWYKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKIGV4dGVybiBpbnQgZGF2aW5jaV9wc2NfaXNfY2xrX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY3RsciwgdW5zaWduZWQgaW50IGlkKTsKIGV4dGVybiB2b2lkIGRhdmluY2lfcHNjX2NvbmZpZyh1bnNpZ25lZCBpbnQgZG9tYWluLCB1bnNpZ25lZCBpbnQgY3RsciwKIAkJdW5zaWduZWQgaW50IGlkLCBjaGFyIGVuYWJsZSk7CiAKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU01fQVJDSF9QU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZWZiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3BpLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9EQVZJTkNJX1NQSV9ICisjZGVmaW5lIF9fQVJDSF9BUk1fREFWSU5DSV9TUElfSAorCitlbnVtIHsKKwlTUElfVkVSU0lPTl8xLCAvKiBGb3IgRE0zNTUvRE0zNjUvRE02NDY3ICovCisJU1BJX1ZFUlNJT05fMiwgLyogRm9yIERBOHh4ICovCit9OworCitzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSB7CisJdTgJdmVyc2lvbjsKKwl1OAludW1fY2hpcHNlbGVjdDsKKwl1OAl3ZGVsYXk7CisJdTgJb2RkX3Bhcml0eTsKKwl1OAlwYXJpdHlfZW5hYmxlOworCXU4CXdhaXRfZW5hYmxlOworCXU4CXRpbWVyX2Rpc2FibGU7CisJdTgJY2xrX2ludGVybmFsOworCXU4CWNzX2hvbGQ7CisJdTgJaW50cl9sZXZlbDsKKwl1OAlwb2xsX21vZGU7CisJdTgJdXNlX2RtYTsKKwl1OAljMnRkZWxheTsKKwl1OAl0MmNkZWxheTsKK307CisKKyNlbmRpZgkvKiBfX0FSQ0hfQVJNX0RBVklOQ0lfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCA1MjgyNzU2Li45Yjg4NTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMSw3ICsxMSwxMiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKICNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICiAKLS8qIFRoZSBzb3VyY2UgZnJlcXVlbmN5IGZvciB0aGUgdGltZXJzIGlzIHRoZSAyN01IeiBjbG9jayAqLworLyoKKyAqIEFsZXJ0OiBOb3QgYWxsIHRpbWVycyBvZiB0aGUgRGFWaW5jaSBmYW1pbHkgcnVuIGF0IGEgZnJlcXVlbmN5IG9mIDI3TUh6LAorICogYnV0IHdlIHNob3VsZCBiZSBmaW5lIGFzIGxvbmcgYXMgQ0xPQ0tfVElDS19SQVRFIG9yIExBVENIIChzZWUgaW5jbHVkZS8KKyAqIGxpbnV4L2ppZmZpZXMuaCkgYXJlIG5vdCB1c2VkIGRpcmVjdGx5IGluIGNvZGUuIEN1cnJlbnRseSBub25lIG9mIHRoZQorICogY29kZSByZWxldmFudCB0byBEYVZpbmNpIHBsYXRmb3JtIGRlcGVuZHMgb24gdGhlc2UgdmFsdWVzIGRpcmVjdGx5LgorICovCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAyNzAwMDAwMAogCiAjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lvLmMKaW5kZXggNDk5MTJiNC4uYTFjMGI2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lvLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAlpZiAoQkVUV0VFTihwLCBJT19QSFlTLCBJT19TSVpFKSkKIAkJcmV0dXJuIFhMQVRFKHAsIElPX1BIWVMsIElPX1ZJUlQpOwogCi0JcmV0dXJuIF9fYXJtX2lvcmVtYXAocCwgc2l6ZSwgdHlwZSk7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHAsIHNpemUsIHR5cGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRhdmluY2lfaW9yZW1hcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiOTUzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogRGFWaW5jaSBQb3dlciBNYW5hZ2VtZW50IFJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjaW5jbHVkZSA8bWFjaC9kYTh4eC5oPgorI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgREVFUFNMRUVQX1NMRUVQQ09VTlRfTUFTSwkweEZGRkYKKworc3RhdGljIHZvaWQgKCpkYXZpbmNpX3NyYW1fc3VzcGVuZCkgKHN0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyAqKTsKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9wbV9jb25maWcgKnBkYXRhOworCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NyYW1fcHVzaCh2b2lkICpkZXN0LCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKQoreworCW1lbWNweShkZXN0LCBzcmMsIHNpemUpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylkZXN0LCAodW5zaWduZWQgbG9uZykoZGVzdCArIHNpemUpKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9wbV9zdXNwZW5kKHZvaWQpCit7CisJdW5zaWduZWQgdmFsOworCisJaWYgKHBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UgIT0gcGRhdGEtPmRkcnBsbF9yZWdfYmFzZSkgeworCisJCS8qIFN3aXRjaCBDUFUgUExMIHRvIGJ5cGFzcyBtb2RlICovCisJCXZhbCA9IF9fcmF3X3JlYWRsKHBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UgKyBQTExDVEwpOworCQl2YWwgJj0gfihQTExDVExfUExMRU5TUkMgfCBQTExDVExfUExMRU4pOworCQlfX3Jhd193cml0ZWwodmFsLCBwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlICsgUExMQ1RMKTsKKworCQl1ZGVsYXkoUExMX0JZUEFTU19USU1FKTsKKworCQkvKiBQb3dlcmRvd24gQ1BVIFBMTCAqLworCQl2YWwgPSBfX3Jhd19yZWFkbChwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlICsgUExMQ1RMKTsKKwkJdmFsIHw9IFBMTENUTF9QTExQV1JETjsKKwkJX19yYXdfd3JpdGVsKHZhbCwgcGRhdGEtPmNwdXBsbF9yZWdfYmFzZSArIFBMTENUTCk7CisJfQorCisJLyogQ29uZmlndXJlIHNsZWVwIGNvdW50IGluIGRlZXAgc2xlZXAgcmVnaXN0ZXIgKi8KKwl2YWwgPSBfX3Jhd19yZWFkbChwZGF0YS0+ZGVlcHNsZWVwX3JlZyk7CisJdmFsICY9IH5ERUVQU0xFRVBfU0xFRVBDT1VOVF9NQVNLLAorCXZhbCB8PSBwZGF0YS0+c2xlZXBjb3VudDsKKwlfX3Jhd193cml0ZWwodmFsLCBwZGF0YS0+ZGVlcHNsZWVwX3JlZyk7CisKKwkvKiBTeXN0ZW0gZ29lcyB0byBzbGVlcCBpbiB0aGlzIGNhbGwgKi8KKwlkYXZpbmNpX3NyYW1fc3VzcGVuZChwZGF0YSk7CisKKwlpZiAocGRhdGEtPmNwdXBsbF9yZWdfYmFzZSAhPSBwZGF0YS0+ZGRycGxsX3JlZ19iYXNlKSB7CisKKwkJLyogcHV0IENQVSBQTEwgaW4gcmVzZXQgKi8KKwkJdmFsID0gX19yYXdfcmVhZGwocGRhdGEtPmNwdXBsbF9yZWdfYmFzZSArIFBMTENUTCk7CisJCXZhbCAmPSB+UExMQ1RMX1BMTFJTVDsKKwkJX19yYXdfd3JpdGVsKHZhbCwgcGRhdGEtPmNwdXBsbF9yZWdfYmFzZSArIFBMTENUTCk7CisKKwkJLyogcHV0IENQVSBQTEwgaW4gcG93ZXIgZG93biAqLworCQl2YWwgPSBfX3Jhd19yZWFkbChwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlICsgUExMQ1RMKTsKKwkJdmFsICY9IH5QTExDVExfUExMUFdSRE47CisJCV9fcmF3X3dyaXRlbCh2YWwsIHBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UgKyBQTExDVEwpOworCisJCS8qIHdhaXQgZm9yIENQVSBQTEwgcmVzZXQgKi8KKwkJdWRlbGF5KFBMTF9SRVNFVF9USU1FKTsKKworCQkvKiBicmluZyBDUFUgUExMIG91dCBvZiByZXNldCAqLworCQl2YWwgPSBfX3Jhd19yZWFkbChwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlICsgUExMQ1RMKTsKKwkJdmFsIHw9IFBMTENUTF9QTExSU1Q7CisJCV9fcmF3X3dyaXRlbCh2YWwsIHBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UgKyBQTExDVEwpOworCisJCS8qIFdhaXQgZm9yIENQVSBQTEwgdG8gbG9jayAqLworCQl1ZGVsYXkoUExMX0xPQ0tfVElNRSk7CisKKwkJLyogUmVtb3ZlIENQVSBQTEwgZnJvbSBieXBhc3MgbW9kZSAqLworCQl2YWwgPSBfX3Jhd19yZWFkbChwZGF0YS0+Y3B1cGxsX3JlZ19iYXNlICsgUExMQ1RMKTsKKwkJdmFsICY9IH5QTExDVExfUExMRU5TUkM7CisJCXZhbCB8PSBQTExDVExfUExMRU47CisJCV9fcmF3X3dyaXRlbCh2YWwsIHBkYXRhLT5jcHVwbGxfcmVnX2Jhc2UgKyBQTExDVEwpOworCX0KK30KKworc3RhdGljIGludCBkYXZpbmNpX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwljYXNlIFBNX1NVU1BFTkRfTUVNOgorCQlkYXZpbmNpX3BtX3N1c3BlbmQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGRhdmluY2lfcG1fb3BzID0geworCS5lbnRlcgkJPSBkYXZpbmNpX3BtX2VudGVyLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF2aW5jaV9wbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlkYXZpbmNpX3NyYW1fc3VzcGVuZCA9IHNyYW1fYWxsb2MoZGF2aW5jaV9jcHVfc3VzcGVuZF9zeiwgTlVMTCk7CisJaWYgKCFkYXZpbmNpX3NyYW1fc3VzcGVuZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgU1JBTSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXZpbmNpX3NyYW1fcHVzaChkYXZpbmNpX3NyYW1fc3VzcGVuZCwgZGF2aW5jaV9jcHVfc3VzcGVuZCwKKwkJCQkJCWRhdmluY2lfY3B1X3N1c3BlbmRfc3opOworCisJc3VzcGVuZF9zZXRfb3BzKCZkYXZpbmNpX3BtX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgZGF2aW5jaV9wbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzcmFtX2ZyZWUoZGF2aW5jaV9zcmFtX3N1c3BlbmQsIGRhdmluY2lfY3B1X3N1c3BlbmRfc3opOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYXZpbmNpX3BtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkgPSAicG0tZGF2aW5jaSIsCisJCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChkYXZpbmNpX3BtX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkYXZpbmNpX3BtX2RyaXZlciwgZGF2aW5jaV9wbV9wcm9iZSk7Cit9CitsYXRlX2luaXRjYWxsKGRhdmluY2lfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvcHNjLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvcHNjLmMKaW5kZXggMDRhM2NiNzIuLmFkZjZiNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wc2MuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvcHNjLmMKQEAgLTI1LDE3ICsyNSw2IEBACiAjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8bWFjaC9wc2MuaD4KIAotLyogUFNDIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgRVBDUFIJCTB4MDcwCi0jZGVmaW5lIFBUQ01ECQkweDEyMAotI2RlZmluZSBQVFNUQVQJCTB4MTI4Ci0jZGVmaW5lIFBEU1RBVAkJMHgyMDAKLSNkZWZpbmUgUERDVEwxCQkweDMwNAotI2RlZmluZSBNRFNUQVQJCTB4ODAwCi0jZGVmaW5lIE1EQ1RMCQkweEEwMAotCi0jZGVmaW5lIE1EU1RBVF9TVEFURV9NQVNLIDB4MWYKLQogLyogUmV0dXJuIG5vbnplcm8gaWZmIHRoZSBkb21haW4ncyBjbG9jayBpcyBhY3RpdmUgKi8KIGludCBfX2luaXQgZGF2aW5jaV9wc2NfaXNfY2xrX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY3RsciwgdW5zaWduZWQgaW50IGlkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjVlNzJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3NsZWVwLlMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDksIFRleGFzIEluc3RydW1lbnRzLCBJbmMuIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiByZXBsaWNhdGVkIGRlZmluZSBiZWNhdXNlIGxpbnV4L2JpdG9wcy5oIGNhbm5vdCBiZSBpbmNsdWRlZCBpbiBhc3NlbWJseSAqLworI2RlZmluZSBCSVQobnIpCQkJKDEgPDwgKG5yKSkKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8bWFjaC9wc2MuaD4KKyNpbmNsdWRlIDxtYWNoL21lbW9yeS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyogQXJiaXRyYXJ5LCBoYXJkd2FyZSBjdXJyZW50bHkgZG9lcyBub3QgdXBkYXRlIFBIWVJEWSBjb3JyZWN0bHkgKi8KKyNkZWZpbmUgUEhZUkRZX0NZQ0xFUwkJMHgxMDAwCisKKy8qIEFzc3VtZSAyNSBNSHogc3BlZWQgZm9yIHRoZSBjeWNsZSBjb252ZXJzaW9ucyBzaW5jZSBQTExzIGFyZSBieXBhc3NlZCAqLworI2RlZmluZSBQTExfQllQQVNTX0NZQ0xFUwkoUExMX0JZUEFTU19USU1FICogMjUpCisjZGVmaW5lIFBMTF9SRVNFVF9DWUNMRVMJKFBMTF9SRVNFVF9USU1FCSogMjUpCisjZGVmaW5lIFBMTF9MT0NLX0NZQ0xFUwkJKFBMTF9MT0NLX1RJTUUgKiAyNSkKKworI2RlZmluZSBERUVQU0xFRVBfU0xFRVBFTkFCTEVfQklUCUJJVCgzMSkKKworCS50ZXh0CisvKgorICogTW92ZSBEYVZpbmNpIGludG8gZGVlcCBzbGVlcCBzdGF0ZQorICoKKyAqIE5vdGU6IFRoaXMgY29kZSBpcyBjb3BpZWQgdG8gaW50ZXJuYWwgU1JBTSBieSBQTSBjb2RlLiBXaGVuIHRoZSBEYVZpbmNpCisgKgkgd2FrZXMgdXAgaXQgY29udGludWVzIGV4ZWN1dGlvbiBhdCB0aGUgcG9pbnQgaXQgd2VudCB0byBzbGVlcC4KKyAqIFJlZ2lzdGVyIFVzYWdlOgorICogCXIwOiBjb250YWlucyB2aXJ0dWFsIGJhc2UgZm9yIEREUjIgY29udHJvbGxlcgorICogCXIxOiBjb250YWlucyB2aXJ0dWFsIGJhc2UgZm9yIEREUjIgUG93ZXIgYW5kIFNsZWVwIGNvbnRyb2xsZXIgKFBTQykKKyAqIAlyMjogY29udGFpbnMgUFNDIG51bWJlciBmb3IgRERSMgorICogCXIzOiBjb250YWlucyB2aXJ0dWFsIGJhc2UgRERSMiBQTEwgY29udHJvbGxlcgorICogCXI0OiBjb250YWlucyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIERFRVBTTEVFUCByZWdpc3RlcgorICovCitFTlRSWShkYXZpbmNpX2NwdV9zdXNwZW5kKQorCXN0bWZkCXNwISwge3IwLXIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisKKwlsZHIgCWlwLCBDQUNIRV9GTFVTSAorCWJseAlpcAorCisJbGRtaWEJcjAsIHtyMC1yNH0KKworCS8qCisJICogU3dpdGNoIEREUiB0byBzZWxmLXJlZnJlc2ggbW9kZS4KKwkgKi8KKworCS8qIGNhbGN1bGF0ZSBTRFJDUiBhZGRyZXNzICovCisJbGRyCWlwLCBbcjAsICNERFIyX1NEUkNSX09GRlNFVF0KKwliaWMJaXAsIGlwLCAjRERSMl9TUlBEX0JJVAorCW9ycglpcCwgaXAsICNERFIyX0xQTU9ERU5fQklUCisJc3RyCWlwLCBbcjAsICNERFIyX1NEUkNSX09GRlNFVF0KKworCWxkcglpcCwgW3IwLCAjRERSMl9TRFJDUl9PRkZTRVRdCisJb3JyCWlwLCBpcCwgI0REUjJfTUNMS1NUT1BFTl9CSVQKKwlzdHIJaXAsIFtyMCwgI0REUjJfU0RSQ1JfT0ZGU0VUXQorCisgICAgICAgbW92CWlwLCAjUEhZUkRZX0NZQ0xFUworMTogICAgIHN1YnMJaXAsIGlwLCAjMHgxCisgICAgICAgYm5lCTFiCisKKyAgICAgICAvKiBEaXNhYmxlIEREUjIgTFBTQyAqLworCW1vdglyNywgcjAKKwltb3YJcjAsICMweDIKKwlibCBkYXZpbmNpX2Rkcl9wc2NfY29uZmlnCisJbW92CXIwLCByNworCisJLyogRGlzYWJsZSBjbG9jayB0byBERFIgUEhZICovCisJbGRyCWlwLCBbcjMsICNQTExESVYxXQorCWJpYwlpcCwgaXAsICNQTExESVZfRU4KKwlzdHIJaXAsIFtyMywgI1BMTERJVjFdCisKKwkvKiBQdXQgdGhlIEREUiBQTEwgaW4gYnlwYXNzIGFuZCBwb3dlciBkb3duICovCisJbGRyCWlwLCBbcjMsICNQTExDVExdCisJYmljCWlwLCBpcCwgI1BMTENUTF9QTExFTlNSQworCWJpYwlpcCwgaXAsICNQTExDVExfUExMRU4KKwlzdHIJaXAsIFtyMywgI1BMTENUTF0KKworCS8qIFdhaXQgZm9yIFBMTCB0byBzd2l0Y2ggdG8gYnlwYXNzICovCisgICAgICAgbW92CWlwLCAjUExMX0JZUEFTU19DWUNMRVMKKzI6ICAgICBzdWJzCWlwLCBpcCwgIzB4MQorICAgICAgIGJuZQkyYgorCisgICAgICAgLyogUG93ZXIgZG93biB0aGUgUExMICovCisJbGRyCWlwLCBbcjMsICNQTExDVExdCisJb3JyCWlwLCBpcCwgI1BMTENUTF9QTExQV1JETgorCXN0cglpcCwgW3IzLCAjUExMQ1RMXQorCisJLyogR28gdG8gZGVlcCBzbGVlcCAqLworCWxkcglpcCwgW3I0XQorCW9ycglpcCwgaXAsICNERUVQU0xFRVBfU0xFRVBFTkFCTEVfQklUCisJLyogU3lzdGVtIGdvZXMgdG8gc2xlZXAgYmV5b25kIGFmdGVyIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KKwlzdHIJaXAsIFtyNF0KKworCS8qIFdha2UgdXAgZnJvbSBzbGVlcCAqLworCisJLyogQ2xlYXIgc2xlZXAgZW5hYmxlICovCisJbGRyCWlwLCBbcjRdCisJYmljCWlwLCBpcCwgI0RFRVBTTEVFUF9TTEVFUEVOQUJMRV9CSVQKKwlzdHIJaXAsIFtyNF0KKworCS8qIGluaXRpYWxpemUgdGhlIEREUiBQTEwgY29udHJvbGxlciAqLworCisJLyogUHV0IFBMTCBpbiByZXNldCAqLworCWxkcglpcCwgW3IzLCAjUExMQ1RMXQorCWJpYwlpcCwgaXAsICNQTExDVExfUExMUlNUCisJc3RyCWlwLCBbcjMsICNQTExDVExdCisKKwkvKiBDbGVhciBQTEwgcG93ZXIgZG93biAqLworCWxkcglpcCwgW3IzLCAjUExMQ1RMXQorCWJpYwlpcCwgaXAsICNQTExDVExfUExMUFdSRE4KKwlzdHIJaXAsIFtyMywgI1BMTENUTF0KKworICAgICAgIG1vdglpcCwgI1BMTF9SRVNFVF9DWUNMRVMKKzM6ICAgICBzdWJzCWlwLCBpcCwgIzB4MQorICAgICAgIGJuZQkzYgorCisgICAgICAgLyogQnJpbmcgUExMIG91dCBvZiByZXNldCAqLworCWxkcglpcCwgW3IzLCAjUExMQ1RMXQorCW9ycglpcCwgaXAsICNQTExDVExfUExMUlNUCisJc3RyCWlwLCBbcjMsICNQTExDVExdCisKKwkvKiBXYWl0IGZvciBQTEwgdG8gbG9jayAoYXNzdW1lIHByZWRpdiA9IDEsIDI1TUh6IE9TQ0lOKSAqLworICAgICAgIG1vdglpcCwgI1BMTF9MT0NLX0NZQ0xFUworNDogICAgIHN1YnMJaXAsIGlwLCAjMHgxCisgICAgICAgYm5lCTRiCisKKyAgICAgICAvKiBSZW1vdmUgUExMIGZyb20gYnlwYXNzIG1vZGUgKi8KKwlsZHIJaXAsIFtyMywgI1BMTENUTF0KKwliaWMJaXAsIGlwLCAjUExMQ1RMX1BMTEVOU1JDCisJb3JyCWlwLCBpcCwgI1BMTENUTF9QTExFTgorCXN0cglpcCwgW3IzLCAjUExMQ1RMXQorCisJLyogU3RhcnQgMnggY2xvY2sgdG8gRERSMiAqLworCisJbGRyCWlwLCBbcjMsICNQTExESVYxXQorCW9ycglpcCwgaXAsICNQTExESVZfRU4KKwlzdHIJaXAsIFtyMywgI1BMTERJVjFdCisKKwkvKiBFbmFibGUgVkNMSyAqLworCisgICAgICAgLyogRW5hYmxlIEREUjIgTFBTQyAqLworCW1vdglyNywgcjAKKwltb3YJcjAsICMweDMKKwlibCBkYXZpbmNpX2Rkcl9wc2NfY29uZmlnCisJbW92CXIwLCByNworCisJLyogY2xlYXIgIE1DTEtTVE9QRU4gKi8KKworCWxkcglpcCwgW3IwLCAjRERSMl9TRFJDUl9PRkZTRVRdCisJYmljCWlwLCBpcCwgI0REUjJfTUNMS1NUT1BFTl9CSVQKKwlzdHIJaXAsIFtyMCwgI0REUjJfU0RSQ1JfT0ZGU0VUXQorCisJbGRyCWlwLCBbcjAsICNERFIyX1NEUkNSX09GRlNFVF0KKwliaWMJaXAsIGlwLCAjRERSMl9MUE1PREVOX0JJVAorCXN0cglpcCwgW3IwLCAjRERSMl9TRFJDUl9PRkZTRVRdCisKKwkvKiBSZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisJbGRtZmQgICBzcCEsIHtyMC1yMTIsIHBjfQorCitFTkRQUk9DKGRhdmluY2lfY3B1X3N1c3BlbmQpCisKKy8qCisgKiBEaXNhYmxlcyBvciBFbmFibGVzIEREUjIgTFBTQworICogUmVnaXN0ZXIgVXNhZ2U6CisgKiAJcjA6IEVuYWJsZSBvciBEaXNhYmxlIExQU0MgcjAgPSAweDMgPT4gRW5hYmxlLCByMCA9IDB4MiA9PiBEaXNhYmxlIExQU0MKKyAqIAlyMTogY29udGFpbnMgdmlydHVhbCBiYXNlIGZvciBERFIyIFBvd2VyIGFuZCBTbGVlcCBjb250cm9sbGVyIChQU0MpCisgKiAJcjI6IGNvbnRhaW5zIFBTQyBudW1iZXIgZm9yIEREUjIKKyAqLworRU5UUlkoZGF2aW5jaV9kZHJfcHNjX2NvbmZpZykKKwkvKiBTZXQgbmV4dCBzdGF0ZSBpbiBtZGN0bCBmb3IgRERSMiAqLworCW1vdglyNiwgI01EQ1RMCisJYWRkCXI2LCByNiwgcjIsIGxzbCAjMgorCWxkcglpcCwgW3IxLCByNl0KKwliaWMJaXAsIGlwLCAjTURTVEFUX1NUQVRFX01BU0sKKwlvcnIJaXAsIGlwLCByMAorCXN0cglpcCwgW3IxLCByNl0KKworCS8qIEVuYWJsZSB0aGUgUG93ZXIgRG9tYWluIFRyYW5zaXRpb24gQ29tbWFuZCAqLworCWxkcglpcCwgW3IxLCAjUFRDTURdCisJb3JyCWlwLCBpcCwgIzB4MQorCXN0cglpcCwgW3IxLCAjUFRDTURdCisKKwkvKiBDaGVjayBmb3IgVHJhbnNpdGlvbiBDb21wbGV0ZSAoUFRTVEFUKSAqLworcHRzdGF0X2RvbmU6CisJbGRyCWlwLCBbcjEsICNQVFNUQVRdCisJYW5kCWlwLCBpcCwgIzB4MQorCWNtcCAJaXAsICMweDAKKwlibmUJcHRzdGF0X2RvbmUKKworCS8qIENoZWNrIGZvciBERFIyIGNsb2NrIGRpc2FibGUgY29tcGxldGlvbjsgKi8KKwltb3YJcjYsICNNRFNUQVQKKwlhZGQJcjYsIHI2LCByMiwgbHNsICMyCitkZHIyY2xrX3N0b3BfZG9uZToKKwlsZHIJaXAsIFtyMSwgcjZdCisJYW5kCWlwLCBpcCwgI01EU1RBVF9TVEFURV9NQVNLCisJY21wCWlwLCByMAorCWJuZQlkZHIyY2xrX3N0b3BfZG9uZQorCisJbW92CXBjLCBscgorRU5EUFJPQyhkYXZpbmNpX2Rkcl9wc2NfY29uZmlnKQorCitDQUNIRV9GTFVTSDoKKwkud29yZAlhcm05MjZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKworRU5UUlkoZGF2aW5jaV9jcHVfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gZGF2aW5jaV9jcHVfc3VzcGVuZAorRU5EUFJPQyhkYXZpbmNpX2NwdV9zdXNwZW5kX3N6KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDliODllYzcuLjE1MjFkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsNyArOCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPURPVkVfU0JfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggOGIyYzk3NC4uYTI4NzkyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZDgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZkODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxZGRlODIyLi5lYmJkODlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKiovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltb3YJXHJ4LCAjMHhmMDAwMDAwMAogCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwppbmRleCA5MTY3YzNkMmEuLjNhMDhiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTYxLDYgKzE2MSwyMCBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBDb250ZWMgTWljcm85LVNsaW0gYm9hcmQuCiAKK2NvbmZpZyBNQUNIX1NJTV9PTkUKKyAgICAgICAgYm9vbCAiU3VwcG9ydCBTaW1wbGVtYWNoaW5lcyBTaW0uT25lIGJvYXJkIgorICAgICAgICBkZXBlbmRzIG9uIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAorICAgICAgICBoZWxwCisgICAgICAgICAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICAgU2ltcGxlbWFjaGluZXMgU2ltLk9uZSBib2FyZC4KKworY29uZmlnIE1BQ0hfU05BUFBFUl9DTDE1CisJYm9vbCAiU3VwcG9ydCBCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIENMMTUgTW9kdWxlIgorCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UwX1BIWVNfT0ZGU0VUCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEJsdWV3YXRlcgorCSAgU3lzdGVtcyBTbmFwcGVyIENMMTUgTW9kdWxlLgorCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQppbmRleCBlYWU2MTk5Li4zM2VlMmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQpAQCAtMTAsNCArMTAsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfRURCOTNYWCkJKz0gZWRiOTN4eC5vCiBvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCiBvYmotJChDT05GSUdfTUFDSF9NSUNSTzkpCSs9IG1pY3JvOS5vCitvYmotJChDT05GSUdfTUFDSF9TSU1fT05FKQkrPSBzaW1vbmUubworb2JqLSQoQ09ORklHX01BQ0hfU05BUFBFUl9DTDE1KQkrPSBzbmFwcGVyY2wxNS5vCiBvYmotJChDT05GSUdfTUFDSF9UUzcyWFgpCSs9IHRzNzJ4eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwppbmRleCAxZDBmOWQ4Li41ZjgwMDkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpICJlcDkzeHggIiBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00NDUsMzcgKzQ0NywzOSBAQAogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCkKIHsKIAl1MzIgdmFsdWU7Ci0JaW50IGk7CiAKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMSk7Ci0JaWYgKCEodmFsdWUgJiAweDAwODAwMDAwKSkgewkJCS8qIFBMTDEgYnlwYXNzZWQ/ICAqLworCS8qIERldGVybWluZSB0aGUgYm9vdGxvYWRlciBjb25maWd1cmVkIHBsbDEgcmF0ZSAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTEtTRVQxKTsKKwlpZiAoISh2YWx1ZSAmIEVQOTNYWF9TWVNDT05fQ0xLU0VUMV9OQllQMSkpCiAJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKLQl9IGVsc2UgeworCWVsc2UKIAkJY2xrX3BsbDEucmF0ZSA9IGNhbGNfcGxsX3JhdGUodmFsdWUpOwotCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHBsbDEgZGVyaXZlZCBjbG9ja3MgKi8KIAljbGtfZi5yYXRlID0gY2xrX3BsbDEucmF0ZSAvIGZjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDI1KSAmIDB4N107CiAJY2xrX2gucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBoY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyMCkgJiAweDddOwogCWNsa19wLnJhdGUgPSBjbGtfaC5yYXRlIC8gcGNsa19kaXZpc29yc1sodmFsdWUgPj4gMTgpICYgMHgzXTsKIAllcDkzeHhfZG1hX2Nsb2NrX2luaXQoKTsKIAotCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyKTsKLQlpZiAoISh2YWx1ZSAmIDB4MDAwODAwMDApKSB7CQkJLyogUExMMiBieXBhc3NlZD8gICovCisJLyogRGV0ZXJtaW5lIHRoZSBib290bG9hZGVyIGNvbmZpZ3VyZWQgcGxsMiByYXRlICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMS1NFVDIpOworCWlmICghKHZhbHVlICYgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX05CWVAyKSkKIAkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwotCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLworCWVsc2UgaWYgKHZhbHVlICYgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX1BMTDJfRU4pCiAJCWNsa19wbGwyLnJhdGUgPSBjYWxjX3BsbF9yYXRlKHZhbHVlKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJY2xrX3BsbDIucmF0ZSA9IDA7Ci0JfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgcGxsMiBkZXJpdmVkIGNsb2NrcyAqLwogCWNsa191c2JfaG9zdC5yYXRlID0gY2xrX3BsbDIucmF0ZSAvICgoKHZhbHVlID4+IDI4KSAmIDB4ZikgKyAxKTsKIAotCXByaW50ayhLRVJOX0lORk8gImVwOTN4eDogUExMMSBydW5uaW5nIGF0ICVsZCBNSHosIFBMTDIgYXQgJWxkIE1IelxuIiwKKwlwcl9pbmZvKCJQTEwxIHJ1bm5pbmcgYXQgJWxkIE1IeiwgUExMMiBhdCAlbGQgTUh6XG4iLAogCQljbGtfcGxsMS5yYXRlIC8gMTAwMDAwMCwgY2xrX3BsbDIucmF0ZSAvIDEwMDAwMDApOwotCXByaW50ayhLRVJOX0lORk8gImVwOTN4eDogRkNMSyAlbGQgTUh6LCBIQ0xLICVsZCBNSHosIFBDTEsgJWxkIE1IelxuIiwKKwlwcl9pbmZvKCJGQ0xLICVsZCBNSHosIEhDTEsgJWxkIE1IeiwgUENMSyAlbGQgTUh6XG4iLAogCQljbGtfZi5yYXRlIC8gMTAwMDAwMCwgY2xrX2gucmF0ZSAvIDEwMDAwMDAsCiAJCWNsa19wLnJhdGUgLyAxMDAwMDAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsb2Nrcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmY2xvY2tzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGNsb2NrcywgQVJSQVlfU0laRShjbG9ja3MpKTsKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoZXA5M3h4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDFmMGQ2NjUuLjkwZmI1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTE0LDEyICsxNCwxNSBAQAogICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KQEAgLTM1LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KIApAQCAtODIsMTMgKzg0LDQwIEBACiAgKiB0byB1c2UgdGhpcyB0aW1lciBmb3Igc29tZXRoaW5nIGVsc2UuICBXZSBhbHNvIHVzZSB0aW1lciA0IGZvciBrZWVwaW5nCiAgKiB0cmFjayBvZiBsb3N0IGppZmZpZXMuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9qaWZmeV90aW1lOworI2RlZmluZSBFUDkzWFhfVElNRVJfUkVHKHgpCQkoRVA5M1hYX1RJTUVSX0JBU0UgKyAoeCkpCisjZGVmaW5lIEVQOTNYWF9USU1FUjFfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDAwKQorI2RlZmluZSBFUDkzWFhfVElNRVIxX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4MDQpCisjZGVmaW5lIEVQOTNYWF9USU1FUjFfQ09OVFJPTAkJRVA5M1hYX1RJTUVSX1JFRygweDA4KQorI2RlZmluZSBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9FTkFCTEUJKDEgPDwgNykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfTU9ERQkoMSA8PCA2KQorI2RlZmluZSBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9DTEtTRUwJKDEgPDwgMykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDBjKQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgyMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgyOCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDJjKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVwkJRVA5M1hYX1RJTUVSX1JFRygweDYwKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gJRVA5M1hYX1RJTUVSX1JFRygweDY0KQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0hfRU5BQkxFCSgxIDw8IDgpCisjZGVmaW5lIEVQOTNYWF9USU1FUjNfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDgwKQorI2RlZmluZSBFUDkzWFhfVElNRVIzX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4ODQpCisjZGVmaW5lIEVQOTNYWF9USU1FUjNfQ09OVFJPTAkJRVA5M1hYX1RJTUVSX1JFRygweDg4KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0NMRUFSCQlFUDkzWFhfVElNRVJfUkVHKDB4OGMpCiAKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NMT0NLCQk1MDg0NjkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSNF9DTE9DSwkJOTgzMDQwCisKKyNkZWZpbmUgVElNRVIxX1JFTE9BRAkJCSgoRVA5M1hYX1RJTUVSMTIzX0NMT0NLIC8gSFopIC0gMSkKICNkZWZpbmUgVElNRVI0X1RJQ0tTX1BFUl9KSUZGWQkJRElWX1JPVU5EX0NMT1NFU1QoQ0xPQ0tfVElDS19SQVRFLCBIWikKIAorc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X2ppZmZ5X3RpbWU7CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwkvKiBXcml0aW5nIGFueSB2YWx1ZSBjbGVhcnMgdGhlIHRpbWVyIGludGVycnVwdCAqLwogCV9fcmF3X3dyaXRlbCgxLCBFUDkzWFhfVElNRVIxX0NMRUFSKTsKKworCS8qIFJlY292ZXIgbG9zdCBqaWZmaWVzICovCiAJd2hpbGUgKChzaWduZWQgbG9uZykKIAkJKF9fcmF3X3JlYWRsKEVQOTNYWF9USU1FUjRfVkFMVUVfTE9XKSAtIGxhc3RfamlmZnlfdGltZSkKIAkJCQkJCT49IFRJTUVSNF9USUNLU19QRVJfSklGRlkpIHsKQEAgLTEwNywxMyArMTM2LDE4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlcDkzeHhfdGltZXJfaW5pdCh2b2lkKQogeworCXUzMiB0bW9kZSA9IEVQOTNYWF9USU1FUjEyM19DT05UUk9MX01PREUgfAorCQkgICAgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfQ0xLU0VMOworCiAJLyogRW5hYmxlIHBlcmlvZGljIEhaIHRpbWVyLiAgKi8KLQlfX3Jhd193cml0ZWwoMHg0OCwgRVA5M1hYX1RJTUVSMV9DT05UUk9MKTsKLQlfX3Jhd193cml0ZWwoKDUwODQ2OSAvIEhaKSAtIDEsIEVQOTNYWF9USU1FUjFfTE9BRCk7Ci0JX19yYXdfd3JpdGVsKDB4YzgsIEVQOTNYWF9USU1FUjFfQ09OVFJPTCk7CisJX19yYXdfd3JpdGVsKHRtb2RlLCBFUDkzWFhfVElNRVIxX0NPTlRST0wpOworCV9fcmF3X3dyaXRlbChUSU1FUjFfUkVMT0FELCBFUDkzWFhfVElNRVIxX0xPQUQpOworCV9fcmF3X3dyaXRlbCh0bW9kZSB8IEVQOTNYWF9USU1FUjEyM19DT05UUk9MX0VOQUJMRSwKKwkJCUVQOTNYWF9USU1FUjFfQ09OVFJPTCk7CiAKIAkvKiBFbmFibGUgbG9zdCBqaWZmeSB0aW1lci4gICovCi0JX19yYXdfd3JpdGVsKDB4MTAwLCBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gpOworCV9fcmF3X3dyaXRlbChFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0hfRU5BQkxFLAorCQkJRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIKTsKIAogCXNldHVwX2lycShJUlFfRVA5M1hYX1RJTUVSMSwgJmVwOTN4eF90aW1lcl9pcnEpOwogfQpAQCAtMTM1LDIzNyArMTY5LDE2IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdQSU8gaGFuZGxpbmcgZm9yIEVQOTN4eAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF91bm1hc2tlZFszXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X2VuYWJsZWRbM107Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMVszXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3R5cGUyWzNdOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZGVib3VuY2VbM107Ci0KLS8qIFBvcnQgb3JkZXJpbmcgaXM6IEEgQiBGICovCi1zdGF0aWMgY29uc3QgdTggaW50X3R5cGUxX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5MCwgMHhhYywgMHg0YyB9Owotc3RhdGljIGNvbnN0IHU4IGludF90eXBlMl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OTQsIDB4YjAsIDB4NTAgfTsKLXN0YXRpYyBjb25zdCB1OCBlb2lfcmVnaXN0ZXJfb2Zmc2V0WzNdCQk9IHsgMHg5OCwgMHhiNCwgMHg1NCB9Owotc3RhdGljIGNvbnN0IHU4IGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OWMsIDB4YjgsIDB4NTggfTsKLXN0YXRpYyBjb25zdCB1OCBpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweGE4LCAweGM0LCAweDY0IH07Ci0KLXZvaWQgZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXModW5zaWduZWQgcG9ydCkKLXsKLQlCVUdfT04ocG9ydCA+IDIpOwotCi0JX19yYXdfd3JpdGViKDAsIEVQOTNYWF9HUElPX1JFRyhpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTJbcG9ydF0sCi0JCUVQOTNYWF9HUElPX1JFRyhpbnRfdHlwZTJfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTFbcG9ydF0sCi0JCUVQOTNYWF9HUElPX1JFRyhpbnRfdHlwZTFfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJiBncGlvX2ludF9lbmFibGVkW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X2VuX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotCi12b2lkIGVwOTN4eF9ncGlvX2ludF9tYXNrKHVuc2lnbmVkIGxpbmUpCi17Ci0JZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7Ci19Ci0KLXZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpCi17Ci0JaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwotCWludCBwb3J0ID0gbGluZSA+PiAzOwotCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7Ci0KLQlpZiAoZW5hYmxlKQotCQlncGlvX2ludF9kZWJvdW5jZVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JZWxzZQotCQlncGlvX2ludF9kZWJvdW5jZVtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCi0JX19yYXdfd3JpdGViKGdwaW9faW50X2RlYm91bmNlW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X2RlYm91bmNlX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotRVhQT1JUX1NZTUJPTChlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRVA5M3h4IElSUSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IGk7Ci0KLQlzdGF0dXMgPSBfX3Jhd19yZWFkYihFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7Ci0JCQlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0EoMCkpICsgaTsKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBfX3Jhd19yZWFkYihFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7Ci0JCQlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0IoMCkpICsgaTsKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCS8qCi0JICogbWFwIGRpc2NvbnRpZ3VvdXMgaHcgaXJxIHJhbmdlIHRvIGNvbnRpbm91cyBzdyBpcnEgcmFuZ2U6Ci0JICoKLQkgKiAgSVJRX0VQOTNYWF9HUElPezAuLjd9TVVYIC0+IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfRih7MC4uN30pCi0JICovCi0JaW50IHBvcnRfZl9pZHggPSAoKGlycSArIDEpICYgNykgXiA0OyAvKiB7MTkuLjIyLDQ3Li41MH0gLT4gezAuLjd9ICovCi0JaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9GKDApKSArIHBvcnRfZl9pZHg7Ci0KLQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwotCWludCBwb3J0ID0gbGluZSA+PiAzOwotCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7Ci0KLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdIF49IHBvcnRfbWFzazsgLyogc3dpdGNoIGVkZ2UgZGlyZWN0aW9uICovCi0JCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOwotCX0KLQotCV9fcmF3X3dyaXRlYihwb3J0X21hc2ssIEVQOTNYWF9HUElPX1JFRyhlb2lfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOwotCi0JaWYgKChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUV9UWVBFX0VER0VfQk9USCkKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gXj0gcG9ydF9tYXNrOyAvKiBzd2l0Y2ggZWRnZSBkaXJlY3Rpb24gKi8KLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH5wb3J0X21hc2s7Ci0JZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Ci0KLQlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdIHw9IDEgPDwgKGxpbmUgJiA3KTsKLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLX0KLQotCi0vKgotICogZ3Bpb19pbnRfdHlwZTEgY29udHJvbHMgd2hldGhlciB0aGUgaW50ZXJydXB0IGlzIGxldmVsICgwKSBvcgotICogZWRnZSAoMSkgdHJpZ2dlcmVkLCB3aGlsZSBncGlvX2ludF90eXBlMiBjb250cm9scyB3aGV0aGVyIGl0Ci0gKiB0cmlnZ2VycyBvbiBsb3cvZmFsbGluZyAoMCkgb3IgaGlnaC9yaXNpbmcgKDEpLgotICovCi1zdGF0aWMgaW50IGVwOTN4eF9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCWNvbnN0IGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKLQljb25zdCBpbnQgcG9ydCA9IGdwaW8gPj4gMzsKLQljb25zdCBpbnQgcG9ydF9tYXNrID0gMSA8PCAoZ3BpbyAmIDcpOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCS8qIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwgKi8KLQkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGdwaW8pKQotCQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsgLyogZmFsbGluZyAqLwotCQllbHNlCi0JCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7IC8qIHJpc2luZyAqLwotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9lcnIoImVwOTN4eDogZmFpbGVkIHRvIHNldCBpcnEgdHlwZSAlZCBmb3IgZ3BpbyAlZFxuIiwKLQkJICAgICAgIHR5cGUsIGdwaW8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlncGlvX2ludF9lbmFibGVkW3BvcnRdIHw9IHBvcnRfbWFzazsKLQotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKLQlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0KLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGVwOTN4eF9ncGlvX2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJHUElPIiwKLQkuYWNrCQk9IGVwOTN4eF9ncGlvX2lycV9hY2ssCi0JLm1hc2tfYWNrCT0gZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrLAotCS5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV9tYXNrLAotCS51bm1hc2sJCT0gZXA5M3h4X2dwaW9faXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBlcDkzeHhfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KK2V4dGVybiB2b2lkIGVwOTN4eF9ncGlvX2luaXRfaXJxKHZvaWQpOwogCiB2b2lkIF9faW5pdCBlcDkzeHhfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgZ3Bpb19pcnE7Ci0KIAl2aWNfaW5pdChFUDkzWFhfVklDMV9CQVNFLCAwLCBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSywgMCk7CiAJdmljX2luaXQoRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKIAotCWZvciAoZ3Bpb19pcnEgPSBncGlvX3RvX2lycSgwKTsKLQkgICAgIGdwaW9faXJxIDw9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSk7ICsrZ3Bpb19pcnEpIHsKLQkJc2V0X2lycV9jaGlwKGdwaW9faXJxLCAmZXA5M3h4X2dwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoZ3Bpb19pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGdwaW9faXJxLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU9fQUIsIGVwOTN4eF9ncGlvX2FiX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8wTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8xTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8yTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8zTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU80TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU81TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU82TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU83TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKKwllcDkzeHhfZ3Bpb19pbml0X2lycSgpOwogfQogCiAKQEAgLTU3Miw5ICszODUsOSBAQAogCSAqIENNT1MgZHJpdmVyLgogCSAqLwogCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCi0JCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCQlwcl93YXJuaW5nKCJzZGEgIT0gRUVEQVQsIG9wZW4gZHJhaW4gaGFzIG5vIGVmZmVjdFxuIik7CiAJaWYgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluICYmIGRhdGEtPnNjbF9waW4gIT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSykKLQkJcHJfd2FybmluZygiZXA5M3h4OiBzY2wgIT0gRUVDTEssIG9wZW4gZHJhaW4gaGFzIG5vIGVmZmVjdFxuIik7CisJCXByX3dhcm5pbmcoInNjbCAhPSBFRUNMSywgb3BlbiBkcmFpbiBoYXMgbm8gZWZmZWN0XG4iKTsKIAogCV9fcmF3X3dyaXRlbCgoZGF0YS0+c2RhX2lzX29wZW5fZHJhaW4gPDwgMSkgfAogCQkgICAgIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiA8PCAwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwppbmRleCBkYmNhYzljNC4uODkwNGNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLW0ycC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwpAQCAtMjgsNiArMjgsOCBAQAogICogd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE3Myw3ICsxNzUsNyBAQAogCiAJc3dpdGNoIChtMnBfY2hhbm5lbF9zdGF0ZShjaCkpIHsKIAljYXNlIFNUQVRFX0lETEU6Ci0JCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2l0aG91dCBhIGRtYSBidWZmZXJcbiIpOworCQlwcl9jcml0KCJkbWEgaW50ZXJydXB0IHdpdGhvdXQgYSBkbWEgYnVmZmVyXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCkBAIC0xOTcsNyArMTk5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNUQVRFX05FWFQ6Ci0JCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CisJCXByX2NyaXQoImRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CiAJCUJVRygpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggYTRhN2JlMy4uZDIyZDY3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMTE4LDEyICsxMTgsMzMgQEAKIAl9CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggcHdtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X3JlZ2lzdGVyX3B3bSh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2VkYjkzMDEoKSB8fAorCSAgICBtYWNoaW5lX2lzX2VkYjkzMDIoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDJhKCkpIHsKKwkJLyogRVA5MzAxIGFuZCBFUDkzMDIgb25seSBoYXZlIHB3bS4xIChFR1BJTzE0KSAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDAsIDEpOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzA3KCkgfHwgbWFjaGluZV9pc19lZGI5MzA3YSgpKSB7CisJCS8qIEVQOTMwNyBvbmx5IGhhcyBwd20uMCAoUFdNT1VUKSAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDEsIDApOworCX0gZWxzZSB7CisJCS8qIEVQOTMxMiBhbmQgRVA5MzE1IGhhdmUgYm90aCAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDEsIDEpOworCX0KK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CiAJZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCgpOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmVkYjkzeHhfZXRoX2RhdGEsIDEpOwogCWVkYjkzeHhfcmVnaXN0ZXJfaTJjKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9wd20oKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggMWVhODg3MS4uY2MzNzdhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMTMsNiArMTMsOCBAQAogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTIyLDYgKzI0LDIzNSBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBoYW5kbGluZyBmb3IgRVA5M3h4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3VubWFza2VkWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZW5hYmxlZFszXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3R5cGUxWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTJbM107CitzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF9kZWJvdW5jZVszXTsKKworLyogUG9ydCBvcmRlcmluZyBpczogQSBCIEYgKi8KK3N0YXRpYyBjb25zdCB1OCBpbnRfdHlwZTFfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDkwLCAweGFjLCAweDRjIH07CitzdGF0aWMgY29uc3QgdTggaW50X3R5cGUyX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5NCwgMHhiMCwgMHg1MCB9Oworc3RhdGljIGNvbnN0IHU4IGVvaV9yZWdpc3Rlcl9vZmZzZXRbM10JCT0geyAweDk4LCAweGI0LCAweDU0IH07CitzdGF0aWMgY29uc3QgdTggaW50X2VuX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5YywgMHhiOCwgMHg1OCB9Oworc3RhdGljIGNvbnN0IHU4IGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4YTgsIDB4YzQsIDB4NjQgfTsKKwordm9pZCBlcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyh1bnNpZ25lZCBwb3J0KQoreworCUJVR19PTihwb3J0ID4gMik7CisKKwlfX3Jhd193cml0ZWIoMCwgRVA5M1hYX0dQSU9fUkVHKGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMltwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF90eXBlMl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMVtwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF90eXBlMV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmIGdwaW9faW50X2VuYWJsZWRbcG9ydF0sCisJCUVQOTNYWF9HUElPX1JFRyhpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CisKK3ZvaWQgZXA5M3h4X2dwaW9faW50X21hc2sodW5zaWduZWQgbGluZSkKK3sKKwlncGlvX2ludF91bm1hc2tlZFtsaW5lID4+IDNdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKK30KKwordm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmIChlbmFibGUpCisJCWdwaW9faW50X2RlYm91bmNlW3BvcnRdIHw9IHBvcnRfbWFzazsKKwllbHNlCisJCWdwaW9faW50X2RlYm91bmNlW3BvcnRdICY9IH5wb3J0X21hc2s7CisKKwlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0sCisJCUVQOTNYWF9HUElPX1JFRyhpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSk7CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9IF9fcmF3X3JlYWRiKEVQOTNYWF9HUElPX0FfSU5UX1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfQSgwKSkgKyBpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKKwkJfQorCX0KKworCXN0YXR1cyA9IF9fcmF3X3JlYWRiKEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfQigwKSkgKyBpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJLyoKKwkgKiBtYXAgZGlzY29udGlndW91cyBodyBpcnEgcmFuZ2UgdG8gY29udGlub3VzIHN3IGlycSByYW5nZToKKwkgKgorCSAqICBJUlFfRVA5M1hYX0dQSU97MC4uN31NVVggLT4gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9GKHswLi43fSkKKwkgKi8KKwlpbnQgcG9ydF9mX2lkeCA9ICgoaXJxICsgMSkgJiA3KSBeIDQ7IC8qIHsxOS4uMjIsNDcuLjUwfSAtPiB7MC4uN30gKi8KKwlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0YoMCkpICsgcG9ydF9mX2lkeDsKKworCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmICgoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gXj0gcG9ydF9tYXNrOyAvKiBzd2l0Y2ggZWRnZSBkaXJlY3Rpb24gKi8KKwkJZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7CisJfQorCisJX19yYXdfd3JpdGViKHBvcnRfbWFzaywgRVA5M1hYX0dQSU9fUkVHKGVvaV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7CisKKwlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKQorCQlncGlvX2ludF90eXBlMltwb3J0XSBePSBwb3J0X21hc2s7IC8qIHN3aXRjaCBlZGdlIGRpcmVjdGlvbiAqLworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKKworCV9fcmF3X3dyaXRlYihwb3J0X21hc2ssIEVQOTNYWF9HUElPX1JFRyhlb2lfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJj0gfigxIDw8IChsaW5lICYgNykpOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gfD0gMSA8PCAobGluZSAmIDcpOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworfQorCisvKgorICogZ3Bpb19pbnRfdHlwZTEgY29udHJvbHMgd2hldGhlciB0aGUgaW50ZXJydXB0IGlzIGxldmVsICgwKSBvcgorICogZWRnZSAoMSkgdHJpZ2dlcmVkLCB3aGlsZSBncGlvX2ludF90eXBlMiBjb250cm9scyB3aGV0aGVyIGl0CisgKiB0cmlnZ2VycyBvbiBsb3cvZmFsbGluZyAoMCkgb3IgaGlnaC9yaXNpbmcgKDEpLgorICovCitzdGF0aWMgaW50IGVwOTN4eF9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWNvbnN0IGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwljb25zdCBpbnQgcG9ydCA9IGdwaW8gPj4gMzsKKwljb25zdCBpbnQgcG9ydF9tYXNrID0gMSA8PCAoZ3BpbyAmIDcpOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7CisJCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSAmPSB+cG9ydF9tYXNrOworCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7CisJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7CisJCS8qIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwgKi8KKwkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGdwaW8pKQorCQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsgLyogZmFsbGluZyAqLworCQllbHNlCisJCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7IC8qIHJpc2luZyAqLworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgaXJxIHR5cGUgJWQgZm9yIGdwaW8gJWRcbiIsIHR5cGUsIGdwaW8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncGlvX2ludF9lbmFibGVkW3BvcnRdIHw9IHBvcnRfbWFzazsKKworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKKwlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CisKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGVwOTN4eF9ncGlvX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IGVwOTN4eF9ncGlvX2lycV9hY2ssCisJLm1hc2tfYWNrCT0gZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrLAorCS5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCT0gZXA5M3h4X2dwaW9faXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBlcDkzeHhfZ3Bpb19pcnFfdHlwZSwKK307CisKK3ZvaWQgX19pbml0IGVwOTN4eF9ncGlvX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGdwaW9faXJxOworCisJZm9yIChncGlvX2lycSA9IGdwaW9fdG9faXJxKDApOworCSAgICAgZ3Bpb19pcnEgPD0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKTsgKytncGlvX2lycSkgeworCQlzZXRfaXJxX2NoaXAoZ3Bpb19pcnEsICZlcDkzeHhfZ3Bpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihncGlvX2lycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoZ3Bpb19pcnEsIElSUUZfVkFMSUQpOworCX0KKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJT19BQiwgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzBNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzFNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzJNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzNNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzRNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzVNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzZNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzdNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBncGlvbGliIGludGVyZmFjZSBmb3IgRVA5M3h4IG9uLWNoaXAgR1BJT3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIApAQCAtMzEsMTAgKzI2Miw2IEBACiAKICNkZWZpbmUgdG9fZXA5M3h4X2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAsIGNoaXApCiAKLS8qIEZyb20gY29yZS5jICovCi1leHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbnRfbWFzayh1bnNpZ25lZCBsaW5lKTsKLWV4dGVybiB2b2lkIGVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHVuc2lnbmVkIHBvcnQpOwotCiBzdGF0aWMgaW50IGVwOTN4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgKmVwOTN4eF9jaGlwID0gdG9fZXA5M3h4X2dwaW9fY2hpcChjaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggODAyODU4Yi4uNWNkMjI0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUVQOTNYWF9BUEJfUEhZU19CQVNFCUAgUGh5c2ljYWwgYmFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCBkNTUxOTRhLi45M2UyZWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtOTIsMjEgKzkyLDYgQEAKIAogLyogQVBCIHBlcmlwaGVyYWxzICovCiAjZGVmaW5lIEVQOTNYWF9USU1FUl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwMTAwMDApCi0jZGVmaW5lIEVQOTNYWF9USU1FUl9SRUcoeCkJCShFUDkzWFhfVElNRVJfQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4MDApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjFfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHgwNCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4MDgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjFfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgwYykKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4MjApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjJfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHgyNCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4MjgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjJfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgyYykKLSNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9MT1cJCUVQOTNYWF9USU1FUl9SRUcoMHg2MCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdICUVQOTNYWF9USU1FUl9SRUcoMHg2NCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4ODApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjNfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHg4NCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4ODgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjNfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHg4YykKIAogI2RlZmluZSBFUDkzWFhfSTJTX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwMjAwMDApCiAKQEAgLTE2Nyw4ICsxNTIsMTEgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDEJKDE8PDE2KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0hBTFQJCUVQOTNYWF9TWVNDT05fUkVHKDB4MDgpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1RBTkRCWQkJRVA5M1hYX1NZU0NPTl9SRUcoMHgwYykKLSNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQxCUVQOTNYWF9TWVNDT05fUkVHKDB4MjApCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMglFUDkzWFhfU1lTQ09OX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS1NFVDEJCUVQOTNYWF9TWVNDT05fUkVHKDB4MjApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMV9OQllQMQkoMTw8MjMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMgkJRVA5M1hYX1NZU0NPTl9SRUcoMHgyNCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX05CWVAyCSgxPDwxOSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX1BMTDJfRU4JKDE8PDE4KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGRwkJRVA5M1hYX1NZU0NPTl9SRUcoMHg4MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfU1dSU1QJKDE8PDMxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19EMU9ORwkoMTw8MzApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4X2tleXBhZC5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eF9rZXlwYWQuaAppbmRleCA2MmQxNzQyLi4xZTJmNGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4X2tleXBhZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHhfa2V5cGFkLmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRVA5M1hYX0tFWVBBRF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRVA5M1hYX0tFWVBBRF9ICiAKK3N0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGE7CisKIC8qIGZsYWdzIGZvciB0aGUgZXA5M3h4X2tleXBhZCBkcml2ZXIgKi8KICNkZWZpbmUgRVA5M1hYX0tFWVBBRF9ESVNBQkxFXzNfS0VZCSgxPDwwKQkvKiBkaXNhYmxlIDMta2V5IHJlc2V0ICovCiAjZGVmaW5lIEVQOTNYWF9LRVlQQURfRElBR19NT0RFCQkoMTw8MSkJLyogZGlhZ25vc3RpYyBtb2RlICovCkBAIC0xNSwxNSArMTcsMTMgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZXA5M3h4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIHN0cnVjdHVyZQotICogQG1hdHJpeF9rZXlfbWFwOgkJYXJyYXkgb2Yga2V5Y29kZXMgZGVmaW5pbmcgdGhlIGtleXBhZCBtYXRyaXgKLSAqIEBtYXRyaXhfa2V5X21hcF9zaXplOglBUlJBWV9TSVpFKG1hdHJpeF9rZXlfbWFwKQotICogQGRlYm91bmNlOgkJCWRlYm91bmNlIHN0YXJ0IGNvdW50OyB0ZXJtaW5hbCBjb3VudCBpcyAweGZmCi0gKiBAcHJlc2NhbGU6CQkJcm93L2NvbHVtbiBjb3VudGVyIHByZS1zY2FsZXIgbG9hZCB2YWx1ZQotICogQGZsYWdzOgkJCXNlZSBhYm92ZQorICogQGtleW1hcF9kYXRhOglwb2ludGVyIHRvICZtYXRyaXhfa2V5bWFwX2RhdGEKKyAqIEBkZWJvdW5jZToJCWRlYm91bmNlIHN0YXJ0IGNvdW50OyB0ZXJtaW5hbCBjb3VudCBpcyAweGZmCisgKiBAcHJlc2NhbGU6CQlyb3cvY29sdW1uIGNvdW50ZXIgcHJlLXNjYWxlciBsb2FkIHZhbHVlCisgKiBAZmxhZ3M6CQlzZWUgYWJvdmUKICAqLwogc3RydWN0IGVwOTN4eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSB7Ci0JdW5zaWduZWQgaW50CSptYXRyaXhfa2V5X21hcDsKLQlpbnQJCW1hdHJpeF9rZXlfbWFwX3NpemU7CisJc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CiAJdW5zaWduZWQgaW50CWRlYm91bmNlOwogCXVuc2lnbmVkIGludAlwcmVzY2FsZTsKIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBhZWQyMWNkLi4xYjNmMjVkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NpbW9uZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5Mzk5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NpbW9uZS5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9zaW1vbmUuYworICogU2ltcGxlbWFjaGluZXMgU2ltLk9uZSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPgorICoKKyAqIEJhc2VkIG9uIHRoZSAyLjYuMjQuNyBzdXBwb3J0OgorICogICBDb3B5cmlnaHQgKEMpIDIwMDkgU2ltcGxlbWFjaGluZXMKKyAqICAgTU1DIHN1cHBvcnQgYnkgUGV0ZXIgSXZhbm92IDxpdmFub3ZwQGdtYWlsLmNvbT4sIDIwMDcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNpbW9uZV9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaW1vbmVfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFLAorCS5lbmQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UgKyBTWl84TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ltb25lX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNpbW9uZV9mbGFzaF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaW1vbmVfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgc2ltb25lX2V0aF9kYXRhID0geworCS5waHlfaWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvIHNpbW9uZV9mYl9pbmZvID0geworCS5udW1fbW9kZXMJPSBFUDkzWFhGQl9VU0VfTU9ERURCLAorCS5icHAJCT0gMTYsCisJLmZsYWdzCQk9IEVQOTNYWEZCX1VTRV9TRENTTjAgfCBFUDkzWFhGQl9QQ0xLX0ZBTExJTkcsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgc2ltb25lX2kyY19ncGlvX2RhdGEgPSB7CisJLnNkYV9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRURBVCwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAwLAorCS5zY2xfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEssCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMCwKKwkudWRlbGF5CQkJPSAwLAorCS50aW1lb3V0CQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2ltb25lX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZHMxMzM3IiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaW1vbmVfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaW1vbmVfZmxhc2gpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJnNpbW9uZV9ldGhfZGF0YSwgMSk7CisJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZzaW1vbmVfZmJfaW5mbyk7CisJZXA5M3h4X3JlZ2lzdGVyX2kyYygmc2ltb25lX2kyY19ncGlvX2RhdGEsIHNpbW9uZV9pMmNfYm9hcmRfaW5mbywKKwkJCSAgICBBUlJBWV9TSVpFKHNpbW9uZV9pMmNfYm9hcmRfaW5mbykpOworfQorCitNQUNISU5FX1NUQVJUKFNJTV9PTkUsICJTaW1wbGVtYWNoaW5lcyBTaW0uT25lIEJvYXJkIikKKy8qIE1haW50YWluZXI6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UwX1BIWVNfQkFTRSArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHNpbW9uZV9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NuYXBwZXJjbDE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExMzRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zbmFwcGVyY2wxNS5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYworICogQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IHN5c3RlbSBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQmx1ZXdhdGVyIFN5c3RlbXMgTHRkCisgKiBBdXRob3I6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogTkFORCBjb2RlIGFkYXB0ZWQgZnJvbSBkcml2ZXIgYnk6CisgKiAgIEFuZHJlIFJlbmF1ZCA8YW5kcmVAYmx1ZXdhdGVyc3lzLmNvbT4KKyAqICAgSmFtZXMgUi4gTWNLYXNraWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9CQVNFCShFUDkzWFhfQ1M3X1BIWVNfQkFTRSArIFNaXzE2TSkKKworI2RlZmluZSBTTkFQUEVSQ0wxNV9OQU5EX1dQTgkoMSA8PCA4KSAgLyogV3JpdGUgcHJvdGVjdCAoYWN0aXZlIGxvdykgKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9BTEUJKDEgPDwgOSkgIC8qIEFkZHJlc3MgbGF0Y2ggKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9DTEUJKDEgPDwgMTApIC8qIENvbW1hbmQgbGF0Y2ggKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9DRU4JKDEgPDwgMTEpIC8qIENoaXAgZW5hYmxlIChhY3RpdmUgbG93KSAqLworI2RlZmluZSBTTkFQUEVSQ0wxNV9OQU5EX1JEWQkoMSA8PCAxNCkgLyogRGV2aWNlIHJlYWR5ICovCisKKyNkZWZpbmUgTkFORF9DVFJMX0FERFIoY2hpcCkgCShjaGlwLT5JT19BRERSX1cgKyAweDQwKQorCitzdGF0aWMgdm9pZCBzbmFwcGVyY2wxNV9uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RhdGljIHUxNiBuYW5kX3N0YXRlID0gU05BUFBFUkNMMTVfTkFORF9XUE47CisJdTE2IHNldDsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlzZXQgPSBTTkFQUEVSQ0wxNV9OQU5EX0NFTiB8IFNOQVBQRVJDTDE1X05BTkRfV1BOOworCisJCWlmIChjdHJsICYgTkFORF9OQ0UpCisJCQlzZXQgJj0gflNOQVBQRVJDTDE1X05BTkRfQ0VOOworCQlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQkJc2V0IHw9IFNOQVBQRVJDTDE1X05BTkRfQ0xFOworCQlpZiAoY3RybCAmIE5BTkRfQUxFKQorCQkJc2V0IHw9IFNOQVBQRVJDTDE1X05BTkRfQUxFOworCisJCW5hbmRfc3RhdGUgJj0gfihTTkFQUEVSQ0wxNV9OQU5EX0NFTiB8CisJCQkJU05BUFBFUkNMMTVfTkFORF9DTEUgfAorCQkJCVNOQVBQRVJDTDE1X05BTkRfQUxFKTsKKwkJbmFuZF9zdGF0ZSB8PSBzZXQ7CisJCV9fcmF3X3dyaXRldyhuYW5kX3N0YXRlLCBOQU5EX0NUUkxfQUREUihjaGlwKSk7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQlfX3Jhd193cml0ZXcoKGNtZCAmIDB4ZmYpIHwgbmFuZF9zdGF0ZSwgY2hpcC0+SU9fQUREUl9XKTsKK30KKworc3RhdGljIGludCBzbmFwcGVyY2wxNV9uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJcmV0dXJuICEhKF9fcmF3X3JlYWR3KE5BTkRfQ1RSTF9BRERSKGNoaXApKSAmIFNOQVBQRVJDTDE1X05BTkRfUkRZKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNuYXBwZXJjbDE1X25hbmRfcGFydF9wcm9iZXNbXSA9IHsiY21kbGluZXBhcnQiLCBOVUxMfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNuYXBwZXJjbDE1X25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzJNLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBzbmFwcGVyY2wxNV9uYW5kX2RhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5ucl9jaGlwcwkJPSAxLAorCQkucGFydF9wcm9iZV90eXBlcwk9IHNuYXBwZXJjbDE1X25hbmRfcGFydF9wcm9iZXMsCisJCS5wYXJ0aXRpb25zCQk9IHNuYXBwZXJjbDE1X25hbmRfcGFydHMsCisJCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUoc25hcHBlcmNsMTVfbmFuZF9wYXJ0cyksCisJCS5vcHRpb25zCQk9IE5BTkRfTk9fQVVUT0lOQ1IsCisJCS5jaGlwX2RlbGF5CQk9IDI1LAorCX0sCisJLmN0cmwgPSB7CisJCS5kZXZfcmVhZHkJCT0gc25hcHBlcmNsMTVfbmFuZF9kZXZfcmVhZHksCisJCS5jbWRfY3RybAkJPSBzbmFwcGVyY2wxNV9uYW5kX2NtZF9jdHJsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuYXBwZXJjbDE1X25hbmRfcmVzb3VyY2VbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBTTkFQUEVSQ0wxNV9OQU5EX0JBU0UsCisJCS5lbmQJCT0gU05BUFBFUkNMMTVfTkFORF9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNuYXBwZXJjbDE1X25hbmRfZGV2aWNlID0geworCS5uYW1lCQkJPSAiZ2VuX25hbmQiLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnNuYXBwZXJjbDE1X25hbmRfZGF0YSwKKwkucmVzb3VyY2UJCT0gc25hcHBlcmNsMTVfbmFuZF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X25hbmRfcmVzb3VyY2UpLAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgc25hcHBlcmNsMTVfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBzbmFwcGVyY2wxNV9pMmNfZ3Bpb19kYXRhID0geworCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKKwkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnVkZWxheQkJCT0gMCwKKwkudGltZW91dAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXJjbDE1X2kyY19kYXRhW10gPSB7CisJeworCQkvKiBBdWRpbyBjb2RlYyAqLworCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8gc25hcHBlcmNsMTVfZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzCQk9IEVQOTNYWEZCX1VTRV9NT0RFREIsCisJLmJwcAkJCT0gMTYsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc25hcHBlcmNsMTVfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJnNuYXBwZXJjbDE1X2V0aF9kYXRhLCAxKTsKKwllcDkzeHhfcmVnaXN0ZXJfaTJjKCZzbmFwcGVyY2wxNV9pMmNfZ3Bpb19kYXRhLCBzbmFwcGVyY2wxNV9pMmNfZGF0YSwKKwkJCSAgICBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X2kyY19kYXRhKSk7CisJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZzbmFwcGVyY2wxNV9mYl9pbmZvKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNuYXBwZXJjbDE1X25hbmRfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChTTkFQUEVSX0NMMTUsICJCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIENMMTUiKQorCS8qIE1haW50YWluZXI6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UwX1BIWVNfQkFTRSArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyIAkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBzbmFwcGVyY2wxNV9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCmluZGV4IDQxZmViYzc5Li5lM2JjM2Y2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCkBAIC0zMiwxMiArMzIsMTMgQEAKIAogRVhQT1JUX1NZTUJPTChtZW1fZmNsa18yMTI4NSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9mY2xrKGNoYXIgKiphcmcpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9mY2xrKGNoYXIgKmFyZykKIHsKLQltZW1fZmNsa18yMTI4NSA9IHNpbXBsZV9zdHJ0b3VsKCphcmcsIGFyZywgMCk7CisJbWVtX2ZjbGtfMjEyODUgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOworCXJldHVybiAwOwogfQogCi1fX2Vhcmx5X3BhcmFtKCJtZW1fZmNsa18yMTI4NT0iLCBlYXJseV9mY2xrKTsKK2Vhcmx5X3BhcmFtKCJtZW1fZmNsa18yMTI4NSIsIGVhcmx5X2ZjbGspOwogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfbWVtY2xrKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA0MzI5YjgxLi42MGRkYTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNSw3ICsxNSw3IEBACiAKICNpZm5kZWYgQ09ORklHX0RFQlVHX0RDMjEyODVfUE9SVAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKQEAgLTMyLDcgKzMyLDcgQEAKIAkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAogCQkuZXF1CWRjMjEyODVfbG93LCAgQVJNQ1NSX0JBU0UgJiAweDAwZmZmZmZmCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4NDIwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZDA0YTZlYS4uYWQ0NzcwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9R0VNSU5JX1VBUlRfQkFTRQkJCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDgzZTUzNmQuLjQ1MzcxZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtNyw0ICs3LDQgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweEYwMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZjAwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjI5NGExMy4uYTllZThmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw3ICsxNCw3IEBACiAJCS5lcXUgICAgaW9fdmlydCwgSU9fQkFTRQogCQkuZXF1ICAgIGlvX3BoeXMsIElPX1NUQVJUCiAKLQkJLm1hY3JvICBhZGRydWFydCxyeAorCQkubWFjcm8gIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QgICAgIFxyeCwgIzEgIAkgICAgICAgQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEgICBccngsICNpb19waHlzCSAgICAgICBAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggYTBmNjBlNS4uOGIzOTBlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC0xNDQsOCArMTQ0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGQzNDdkNjUuLjg3YTY4ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDE2MDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCAzZjM1MjkzLi42NmVmODZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTU1OCw5ICs1NTgsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BfbG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmY3BfbG9va3Vwc1tpXSk7Ci0KKwljbGtkZXZfYWRkX3RhYmxlKGNwX2xvb2t1cHMsIEFSUkFZX1NJWkUoY3BfbG9va3VwcykpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGludGNwX2RldnMsIEFSUkFZX1NJWkUoaW50Y3BfZGV2cykpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOTAzN2QyZS4uYzlkNmJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCS5tYWNybwlhZGRydWFydCwgcngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJQCBtbXUgZW5hYmxlZD8KIAltb3ZlcQlccngsICMweGZmMDAwMDAwCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pby5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKaW5kZXggNTI5NTgwOS4uNDg2NDJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKQEAgLTYxLDkgKzYxLDkgQEAKIAkJCSAgICAgICAgIChjb29raWUgLSBJT1AxM1hYX1BDSUVfTE9XRVJfTUVNX1JBKSk7CiAJCWJyZWFrOwogCWNhc2UgSU9QMTNYWF9QQklfTE9XRVJfTUVNX1JBIC4uLiBJT1AxM1hYX1BCSV9VUFBFUl9NRU1fUkE6Ci0JCXJldHZhbCA9IF9fYXJtX2lvcmVtYXAoSU9QMTNYWF9QQklfTE9XRVJfTUVNX1BBICsKKwkJcmV0dmFsID0gX19hcm1faW9yZW1hcF9jYWxsZXIoSU9QMTNYWF9QQklfTE9XRVJfTUVNX1BBICsKIAkJCQkgICAgICAgKGNvb2tpZSAtIElPUDEzWFhfUEJJX0xPV0VSX01FTV9SQSksCi0JCQkJICAgICAgIHNpemUsIG10eXBlKTsKKwkJCQkgICAgICAgc2l6ZSwgbXR5cGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCWJyZWFrOwogCWNhc2UgSU9QMTNYWF9QQ0lFX0xPV0VSX0lPX1BBIC4uLiBJT1AxM1hYX1BDSUVfVVBQRVJfSU9fUEE6CiAJCXJldHZhbCA9ICh2b2lkICopIElPUDEzWFhfUENJRV9JT19QSFlTX1RPX1ZJUlQoY29va2llKTsKQEAgLTc1LDcgKzc1LDggQEAKIAkJcmV0dmFsID0gKHZvaWQgKikgSU9QMTNYWF9QTU1SX1BIWVNfVE9fVklSVChjb29raWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwKGNvb2tpZSwgc2l6ZSwgbXR5cGUpOworCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwX2NhbGxlcihjb29raWUsIHNpemUsIG10eXBlLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJfQogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNThiMDE2Ni4uNzM2YWZlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbW92CVxyeCwgIzB4ZmUwMDAwMDAJQCBwaHlzaWNhbCBhcyB3ZWxsIGFzIHZpcnR1YWwKIAkJb3JyCVxyeCwgXHJ4LCAjMHgwMDgwMDAwMAlAIGxvY2F0aW9uIG9mIHRoZSBVQVJUCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4NWNlYjA5Li5jNDg2MmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhNjBjOWVmLi5hZGRiMmRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgbW11IGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZjlmOTlkZS4uNDgzMzFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5MDRmZjU2Li42YTgyNzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweGMwMDAwMDAwCUAgUGh5c2ljYWwgYmFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBkMTk1ZTM1Li42MWM4ZGFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTcsNCArMTcsNCBAQAogICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCiAgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQJICAgIDB4ZmIwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAgIDB4ZmIwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDkwNWRiMzEuLmE4MmUzNzU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KICNpbmNsdWRlIDxtYWNoL2l4cDIzeHguaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgbW11IGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUlYUDIzWFhfUEVSSVBIRVJBTF9QSFlTIAlAIHBoeXNpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGRkNTE5ZjYuLjg5NmM1NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC03LDQgKzcsNCBAQAogICogc3BlY2lmaWMgc3RhdGljIEkvTy4KICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECSgweGVjMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORAkoMHhlYzAwMDAwMFVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCAzYmJmNDBmLi43MTcyOGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtNDI3LDYgKzQyNywxNyBAQAogfQogCiAvKgorICogc2NoZWRfY2xvY2soKQorICovCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwljeWNsZV90IGN5YyA9IGl4cDR4eF9nZXRfY3ljbGVzKE5VTEwpOworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmY2xvY2tzb3VyY2VfaXhwNHh4OworCisJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjeWMsIGNzLT5tdWx0LCBjcy0+c2hpZnQpOworfQorCisvKgogICogY2xvY2tldmVudHMKICAqLwogc3RhdGljIGludCBpeHA0eHhfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDdjNmE2OTEuLjg5Mzg3M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKLSAgICAgICAgICAgICAgICAubWFjcm8gIGFkZHJ1YXJ0LHJ4CisgICAgICAgICAgICAgICAgLm1hY3JvICBhZGRydWFydCwgcngsIHRtcAogICAgICAgICAgICAgICAgIG1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAogICAgICAgICAgICAgICAgIHRzdCAgICAgXHJ4LCAjMSAgICAgICAgICAgICAgICAgQCBNTVUgZW5hYmxlZD8KICAgICAgICAgICAgICAgICBtb3ZlcSAgIFxyeCwgIzB4YzgwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDdiMzU4MGIuLjliY2Q2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSw1ICsxLDUgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4RkYwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGZmMDAwMDAwVUwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGE0YTU1YzEuLmQwNjA2Nzc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsNyArOCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPUtJUktXT09EX1JFR1NfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggOGY0ODI2MC4uYmYxNjJjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMzc4MmMzNS4uY2YyMDk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KIAotCS5tYWNybwlhZGRydWFydCwgcngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9S1M4Njk1X1VBUlRfUEEJCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAzNGVlZDJhNi4uYjY5ZWQzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw3ICsxNCw3IEBACiAJCS5lcXUJaW9fdmlydCwgSU9fQkFTRQogCQkuZXF1CWlvX3BoeXMsIElPX1NUQVJUCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgI2lvX3BoeXMJCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggODUxNDFlZC4uYzBkY2JiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogCUAgSXQgaXMgbm90IGtub3duIGlmIHRoaXMgd2lsbCBiZSBhcHByb3ByaWF0ZSBmb3IgZXZlcnkgNDB4CiAJQCBib2FyZC4KIAotCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjICAgICBwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdCAgICAgXHJ4LCAjMSAgICAgICAgICAgICAgICAgQCBNTVUgZW5hYmxlZD8KIAkJbW92ICAgICBccngsICMweDAwMDAwNzAwICAgICAgICBAIG9mZnNldCBmcm9tIGJhc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggM2ZiZDQ5NC4uZDYyZGE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTcsNCArNyw0IEBACiAgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhOGMyMGJkLi4zMTM2YzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9sb2tpLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPUxPS0lfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggOGRjM2JmYy4uNWRjYmQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jCmluZGV4IDJhNDZlZDUuLjg4NmUwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpAQCAtODgsMTEgKzg4LDMgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLQotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oCmluZGV4IGVlZmZmYmUuLjAxNmFlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApAQCAtNjgsNSArNjgsMyBAQAogCiBleHRlcm4gc3RydWN0IGNsayBjbGtfcHhhMTY4X2dwaW87CiBleHRlcm4gc3RydWN0IGNsayBjbGtfcHhhMTY4X3RpbWVyczsKLQotZXh0ZXJuIHZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhODUwZjg3Li43NmRlZmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9QVBCX1BIWVNfQkFTRQkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYjYwY2NhZi4uMWQwYmFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKaW5kZXggMzdkYmRkZS4uMTg3M2M4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJbWZwX2luaXRfYmFzZShNRlBSX1ZJUlRfQkFTRSk7CiAJCW1mcF9pbml0X2FkZHIocHhhMTY4X21mcF9hZGRyX21hcCk7CiAJCXB4YV9pbml0X2RtYShJUlFfUFhBMTY4X0RNQV9JTlQwLCAzMik7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMTY4X2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShBUlJBWV9BTkRfU0laRShweGExNjhfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYwppbmRleCBkNDA0OTUwLi40NmYyZDY5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQltZnBfaW5pdF9iYXNlKE1GUFJfVklSVF9CQVNFKTsKIAkJbWZwX2luaXRfYWRkcihweGE5MTBfbWZwX2FkZHJfbWFwKTsKIAkJcHhhX2luaXRfZG1hKElSUV9QWEE5MTBfRE1BX0lOVDAsIDMyKTsKLQkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGE5MTBfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKEFSUkFZX0FORF9TSVpFKHB4YTkxMF9jbGtyZWdzKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGQ0ODc0N2UuLjUyODc1MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KIAogI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCUAgc2VlIGlmIHRoZSBNTVUgaXMgZW5hYmxlZCBhbmQgc2VsZWN0IGFwcHJvcHJpYXRlIGJhc2UgYWRkcmVzcwogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEKQEAgLTQwLDcgKzQwLDcgQEAKIAliZXEJMTAwMWIKIAkuZW5kbQogI2Vsc2UKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkuZW5kbQogCiAJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwppbmRleCAxYzVlN2RhYy4uMDVmOTZiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCkBAIC03Niw1ICs3Niw2IEBACiAJCQltdHlwZSA9IE1UX0RFVklDRV9OT05TSEFSRUQ7CiAJfQogCi0JcmV0dXJuIF9fYXJtX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBtdHlwZSk7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUsCisJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYTA2NDQyZi4uY2Q4MTY4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCw3ICs4LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KIAlsZHJlcQlccngsID1NVjc4WFgwX1JFR1NfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDFjNDk1NDMuLmJhMjZmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwppbmRleCBkMWI1ODg1Li42Y2YyZDRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKQEAgLTU3MCw3ICs1NzAsNiBAQAogaW50IF9faW5pdCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXVuc2lnbmVkIGludCByZWc7Ci0JaW50IGk7CiAKIAkvKiBkaXNhYmxlIGNsb2NrcyB3ZSBhcmUgYWJsZSB0byAqLwogCV9fcmF3X3dyaXRlbCgwLCBTQ01fR0NDUik7CkBAIC01OTIsOCArNTkxLDcgQEAKIAlyZWcgPSAocmVnICYgQ0NNX0NTQ1JfQ0xLT19NQVNLKSA+PiBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKIAljbGtvX2Nsay5wYXJlbnQgPSAoc3RydWN0IGNsayAqKWNsa29fY2xvY2tzW3JlZ107CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJY2xrX2VuYWJsZSgmaGNsayk7CiAJY2xrX2VuYWJsZSgmZmNsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwppbmRleCA5MTkwMWI1Li5lODJiNDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKQEAgLTk2OCw3ICs5NjgsNiBAQAogICovCiBpbnQgX19pbml0IG14MjFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBscmVmLCB1bnNpZ25lZCBsb25nIGhyZWYpCiB7Ci0JaW50IGk7CiAJdTMyIGNzY3I7CiAKIAlleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gbHJlZjsKQEAgLTk4Niw4ICs5ODUsNyBAQAogCWVsc2UKIAkJc3BsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJLyogVHVybiBvZmYgYWxsIGNsb2NrIGdhdGVzICovCiAJX19yYXdfd3JpdGVsKDAsIENDTV9QQ0NSMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwppbmRleCBiMDEwYmY5Li4xOGM1M2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKQEAgLTcxOSw3ICs3MTksNiBAQAogaW50IF9faW5pdCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAl1MzIgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKLQlpbnQgaTsKIAogCWV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gZnJlZjsKIApAQCAtNzM2LDggKzczNSw3IEBACiAKIAl0bzJfYWRqdXN0X2Nsb2NrcygpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCS8qIFR1cm4gb2ZmIGFsbCBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgKi8KIAlfX3Jhd193cml0ZWwoMCwgQ0NNX1BDQ1IwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYwppbmRleCAzZDM5OGNlLi4zOTU2ZDgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMjkyLDcgKzI5Myw3IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCiAJLnJlc291cmNlID0gbXhjX2ZiLAogCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCiAJfSwKIH07CiAKQEAgLTM5NSwxNyArMzk2LDE3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgbXhjX3NkaGMxX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgdTY0IG14Y19zZGhjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwID0gewotICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKLSAgICAgICAuaWQgICAgICAgICAgICAgPSAwLAotICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKLSAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzFfZG1hbWFzaywKLSAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0gICAgICAgfSwKLSAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMV9yZXNvdXJjZXMpLAotICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMV9yZXNvdXJjZXMsCisJLm5hbWUgICAgICAgICAgID0gIm14Yy1tbWMiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmbXhjX3NkaGMxX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMV9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMl9yZXNvdXJjZXNbXSA9IHsKQEAgLTQyNCwxNyArNDI1LDE3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgbXhjX3NkaGMyX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgdTY0IG14Y19zZGhjMl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxID0gewotICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKLSAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAotICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKLSAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzJfZG1hbWFzaywKLSAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0gICAgICAgfSwKLSAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMl9yZXNvdXJjZXMpLAotICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCisJLm5hbWUgICAgICAgICAgID0gIm14Yy1tbWMiLAorCS5pZCAgICAgICAgICAgICA9IDEsCisJLmRldiAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmbXhjX3NkaGMyX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCiB9OwogCiAjaWZkZWYgQ09ORklHX01BQ0hfTVgyNwpAQCAtNDUwLDcgKzQ1MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgb3RnX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgdTY0IG90Z19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogLyogT1RHIGdhZGdldCBkZXZpY2UgKi8KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290Z191ZGNfZGV2aWNlID0gewpAQCAtNDU4LDcgKzQ1OSw3IEBACiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJm90Z19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmVUwsCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCiAJfSwKIAkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKQEAgLTQ2OSw3ICs0NzAsNyBAQAogCS5uYW1lID0gIm14Yy1laGNpIiwKIAkuaWQgPSAwLAogCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCiAJCS5kbWFfbWFzayA9ICZvdGdfZG1hbWFzaywKIAl9LAogCS5yZXNvdXJjZSA9IG90Z19yZXNvdXJjZXMsCkBAIC00NzgsNyArNDc5LDcgQEAKIAogLyogVVNCIGhvc3QgMSAqLwogCi1zdGF0aWMgdTY0IHVzYmgxX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgdTY0IHVzYmgxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y191c2JoMV9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC00OTYsNyArNDk3LDcgQEAKIAkubmFtZSA9ICJteGMtZWhjaSIsCiAJLmlkID0gMSwKIAkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAogCQkuZG1hX21hc2sgPSAmdXNiaDFfZG1hbWFzaywKIAl9LAogCS5yZXNvdXJjZSA9IG14Y191c2JoMV9yZXNvdXJjZXMsCkBAIC01MDQsNyArNTA1LDcgQEAKIH07CiAKIC8qIFVTQiBob3N0IDIgKi8KLXN0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTUyMiw3ICs1MjMsNyBAQAogCS5uYW1lID0gIm14Yy1laGNpIiwKIAkuaWQgPSAyLAogCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCiAJCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAogCX0sCiAJLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKQEAgLTY0MiwzICs2NDMsMzAgQEAKIHsKIAlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXhfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShpbXhfZ3Bpb19wb3J0cykpOwogfQorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDIxX3VzYmhjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVVNCT1RHX0JBU0VfQUREUiwKKwkJLmVuZAk9IFVTQk9UR19CQVNFX0FERFIgKyAweDFGRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gTVhDX0lOVF9VU0JIT1NULAorCQkuZW5kCQk9IE1YQ19JTlRfVVNCSE9TVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFfdXNiaGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXgyMS1oY2QiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmbXgyMV91c2JoY19kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjFfdXNiaGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBteDIxX3VzYmhjX3Jlc291cmNlcywKK307CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCmluZGV4IDk3MzA2YWEuLmYxMjY5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKQEAgLTI2LDUgKzI2LDYgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFfdXNiaGNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwppbmRleCA2YWNjODhiLi4zN2UxMzU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpAQCAtMjE4LDEwICsyMTgsNyBAQAogCiBpbnQgX19pbml0IG14MjVfY2xvY2tzX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIGV4Y2VwdCB0aGUgb25lcyB3ZSBuZWVkIHRvIHN1cnZpdmUsIG5hbWVseToKIAkgKiBFTUksIEdQSU8xLTMgKENDTV9DR0NSMVsxODoxNl0pLCBHUFQxLCBJT01VWEMgKENDTV9DR0NSMVsyN10pLCBJSU0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCA3NTg0YjRjLi5mM2Y0MWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ4NSwxNSArNDg1LDEzIEBACiAKIGludCBfX2luaXQgbXgzNV9jbG9ja3NfaW5pdCgpCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgaW50IGxsID0gMDsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQogCWxsID0gKDMgPDwgMTYpOwogI2VuZGlmCiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJLyogVHVybiBvZmYgYWxsIGNsb2NrcyBleGNlcHQgdGhlIG9uZXMgd2UgbmVlZCB0byBzdXJ2aXZlLCBuYW1lbHk6CiAJICogRU1JLCBHUElPMS8yLzMsIEdQVCwgSU9NVVgsIE1BWCBhbmQgZXZlbnR1YWxseSB1YXJ0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwppbmRleCAyN2EzMThhLi5iNWMzOWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKQEAgLTU3OCwxMiArNTc4LDEwIEBACiBpbnQgX19pbml0IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXUzMiByZWc7Ci0JaW50IGk7CiAKIAlja2loX3JhdGUgPSBmcmVmOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCS8qIGNoYW5nZSB0aGUgY3NpX2NsayBwYXJlbnQgaWYgbmVjZXNzYXJ5ICovCiAJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYwppbmRleCBlY2ZhMzdmLi41Yzg1MDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCkBAIC02MjQsNyArNjI0LDYgQEAKIGludCBfX2luaXQgbXhjOTEyMzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXZvaWQgX19pb21lbSAqZ3B0X2Jhc2U7Ci0JaW50IGk7CiAKIAlja2loX3JhdGUgPSBmcmVmOwogCkBAIC02MzIsOCArNjMxLDcgQEAKIAlzZGhjX2Nsa1swXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzBdKTsKIAlzZGhjX2Nsa1sxXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzFdKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlncHRfYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BUMV9CQVNFX0FERFIpOwogCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBncHRfYmFzZSwgTVhDOTEyMzFfSU5UX0dQVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMTFiOWQ1Yi4uZTk2MzM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgwMDEwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwppbmRleCBmOTNjNTk2Li45YmYzM2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwpAQCAtODYsMTEgKzg2LDE5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgY3B1ODgxNV9hbWJhX3JuZyA9IHsKKwkuZGV2ID0geworCQkuaW5pdF9uYW1lID0gInJuZyIsCisJfSwKKwlfX01FTV80S19SRVNPVVJDRShOT01BRElLX1JOR19CQVNFKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAwLAogCWNwdTg4MTVfYW1iYV9ncGlvICsgMSwKIAljcHU4ODE1X2FtYmFfZ3BpbyArIDIsCiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAzLAorCSZjcHU4ODE1X2FtYmFfcm5nCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjcHU4ODE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBlODc2OTkwLi40ZjkyYWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgxMDAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBiZTEyZTMxLi5mODNkNTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSwyICsxLDIgQEAKIAotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGU4MDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZTgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBjOTUzMGZiLi4wODU5MzM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCiAJCWxkcmVxCVxyeCwgPU5TOVhYWF9DU3hTVEFUX1BIWVMoMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGZlOTY0ZDMuLmM4NjUxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTEsNiArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICgweGYwMDAwMDAwVUwpCiAKICNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYzQwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK2lmIEFSQ0hfTlVDOTNYCisKK2NvbmZpZyBDUFVfTlVDOTMyCisJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5VQzkzMiBvZiBOdXZvdG9uIE5VQzkzWCBDUFVzLgorCittZW51ICJOVUM5MzIgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX05VQzkzMkVWQgorCWJvb2wgIk51dm90b24gTlVDOTMyIEV2YWx1YXRpb24gQm9hcmQiCisJZGVmYXVsdCB5CisJc2VsZWN0IENQVV9OVUM5MzIKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOdXZvdG9uIE5VQzkzMkVWQgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MGUyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCQk6PSBpcnEubyB0aW1lLm8gZGV2Lm8gY3B1Lm8gY2xvY2subworIyBOVUM5MzIgQ1BVIHN1cHBvcnQgZmlsZXMKKworb2JqLSQoQ09ORklHX0NQVV9OVUM5MzIpCSs9IG51YzkzMi5vCisKKyMgbWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX05VQzkzMkVWQikJKz0gbWFjaC1udWM5MzJldmIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1N2I1NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACit6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIxZWZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5lbmFibGVkKysgPT0gMCkKKwkJKGNsay0+ZW5hYmxlKShjbGssIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQkoY2xrLT5lbmFibGUpKGNsaywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDI3MDAwMDAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCit2b2lkIG51YzkzeF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5ja2VuOworCXVuc2lnbmVkIGxvbmcgY2xrZW47CisKKwljbGtlbiA9IF9fcmF3X3JlYWRsKE5VQzkzWF9WQV9DTEtQV1IpOworCisJaWYgKGVuYWJsZSkKKwkJY2xrZW4gfD0gY2xvY2tzOworCWVsc2UKKwkJY2xrZW4gJj0gfmNsb2NrczsKKworCV9fcmF3X3dyaXRlbChjbGtlbiwgTlVDOTNYX1ZBX0NMS1BXUik7Cit9CisKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU1MWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKK3ZvaWQgbnVjOTN4X2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7CisKK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGxvbmcJCWNrZW47CisJdW5zaWduZWQgaW50CQllbmFibGVkOworCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqLCBpbnQgZW5hYmxlKTsKK307CisKKyNkZWZpbmUgREVGSU5FX0NMSyhfbmFtZSwgX2N0cmxiaXQpCQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAorCQkuZW5hYmxlCT0gbnVjOTN4X2Nsa19lbmFibGUsCQlcCisJCS5ja2VuCT0gKDEgPDwgX2N0cmxiaXQpLAkJXAorCX0KKworI2RlZmluZSBERUZfQ0xLTE9PSyhfY2xrLCBfZGV2bmFtZSwgX2Nvbm5hbWUpCQlcCisJewkJCQkJCVwKKwkJLmNsawkJPSBfY2xrLAkJCVwKKwkJLmRldl9pZAkJPSBfZGV2bmFtZSwJCVwKKwkJLmNvbl9pZAkJPSBfY29ubmFtZSwJCVwKKwl9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmZjVkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTN4IHNlcmllcyBjcHUgY29tbW9uIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZWJpLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbnVjOTN4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChJUlEpLAorCUlPREVTQ19FTlQoR0NSKSwKKwlJT0RFU0NfRU5UKFVBUlQpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoRUJJKSwKK307CisKKy8qIEluaXRpYWwgbnVjOTMyIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KK3N0YXRpYyBERUZJTkVfQ0xLKGF1ZGlvLCAyKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHNkLCAzKTsKK3N0YXRpYyBERUZJTkVfQ0xLKGpwZywgNCk7CitzdGF0aWMgREVGSU5FX0NMSyh2aWRlbywgNSk7CitzdGF0aWMgREVGSU5FX0NMSyh2cG9zdCwgNik7CitzdGF0aWMgREVGSU5FX0NMSygyZCwgNyk7CitzdGF0aWMgREVGSU5FX0NMSyhncHUsIDgpOworc3RhdGljIERFRklORV9DTEsoZ2RtYSwgOSk7CitzdGF0aWMgREVGSU5FX0NMSyhhZGMsIDEwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVhcnQsIDExKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHNwaSwgMTIpOworc3RhdGljIERFRklORV9DTEsocHdtLCAxMyk7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lciwgMTQpOworc3RhdGljIERFRklORV9DTEsod2R0LCAxNSk7CitzdGF0aWMgREVGSU5FX0NMSyhhYzk3LCAxNik7CitzdGF0aWMgREVGSU5FX0NMSyhpMnMsIDE2KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzYmNrLCAxNyk7CitzdGF0aWMgREVGSU5FX0NMSyh1c2I0OCwgMTgpOworc3RhdGljIERFRklORV9DTEsodXNiaCwgMTkpOworc3RhdGljIERFRklORV9DTEsoaTJjLCAyMCk7CitzdGF0aWMgREVGSU5FX0NMSyhleHQsIDApOworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbnVjOTMyX2Nsa3JlZ3NbXSA9IHsKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2F1ZGlvLCAibnVjOTMyLWF1ZGlvIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19zZCwgIm51YzkzMi1zZCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfanBnLCAibnVjOTMyLWpwZyIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa192aWRlbywgIm51YzkzMi12aWRlbyIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa192cG9zdCwgIm51YzkzMi12cG9zdCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfMmQsICJudWM5MzItMmQiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2dwdSwgIm51YzkzMi1ncHUiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2dkbWEsICJudWM5MzItZ2RtYSIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19hZGMsICJudWM5MzItYWRjIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa191YXJ0LCBOVUxMLCAidWFydCIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfc3BpLCAibnVjOTMyLXNwaSIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfcHdtLCAibnVjOTMyLXB3bSIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdGltZXIsIE5VTEwsICJ0aW1lciIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfd2R0LCAibnVjOTMyLXdkdCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfYWM5NywgIm51YzkzMi1hYzk3IiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19pMnMsICJudWM5MzItaTJzIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa191c2JjaywgIm51YzkzMi11c2JjayIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdXNiNDgsICJudWM5MzItdXNiNDgiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3VzYmgsICJudWM5MzItdXNiaCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfaTJjLCAibnVjOTMyLWkyYyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfZXh0LCBOVUxMLCAiZXh0IiksCit9OworCisvKiBJbml0aWFsIHNlcmlhbCBwbGF0Zm9ybSBkYXRhICovCisKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBudWM5M3hfdWFydF9kYXRhW10gPSB7CisJTlVDOTNYXzgyNTBQT1JUKFVBUlQwKSwKKwl7fSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTN4X3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gbnVjOTN4X3VhcnRfZGF0YSwKKwl9LAorfTsKKworLypJbml0IE5VQzkzeCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5M3hfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgaWRjb2RlID0gMHgwOworCisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgbWFjaF9zaXplKTsKKwlpb3RhYmxlX2luaXQobnVjOTN4X2lvZGVzYywgQVJSQVlfU0laRShudWM5M3hfaW9kZXNjKSk7CisKKwlpZGNvZGUgPSBfX3Jhd19yZWFkbChOVUM5M1hQRElEKTsKKwlpZiAoaWRjb2RlID09IE5VQzkzMl9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5MTBcbiIsIGlkY29kZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIkNQVSB0eXBlIGRldGVjdCBlcnJvciFcbiIpOworCit9CisKKy8qSW5pdCBOVUM5M3ggY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5M3hfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwljbGtzX3JlZ2lzdGVyKG51YzkzMl9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkzMl9jbGtyZWdzKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlZjI4MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgTlVDOTNYIENQVSBzdXBwb3J0CisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgSU9ERVNDX0VOVCh5KQkJCQkJXAorewkJCQkJCQlcCisJLnZpcnR1YWwgPSAodW5zaWduZWQgbG9uZylOVUM5M1hfVkFfIyN5LAlcCisJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKE5VQzkzWF9QQV8jI3kpLAlcCisJLmxlbmd0aCAgPSBOVUM5M1hfU1pfIyN5LAkJCVwKKwkudHlwZSAgICA9IE1UX0RFVklDRSwJCQkJXAorfQorCisjZGVmaW5lIE5VQzkzWF84MjUwUE9SVChuYW1lKQkJCQkJXAorewkJCQkJCQkJXAorCS5tZW1iYXNlCT0gbmFtZSMjX0JBLAkJCQlcCisJLm1hcGJhc2UJPSBuYW1lIyNfUEEsCQkJCVwKKwkuaXJxCQk9IElSUV8jI25hbWUsCQkJCVwKKwkudWFydGNsawk9IDU3MTM5MjAwLAkJCQlcCisJLnJlZ3NoaWZ0CT0gMiwJCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorfQorCisvKkNwdSBpZGVudGlmaWVyIHJlZ2lzdGVyKi8KKworI2RlZmluZSBOVUM5M1hQRElECU5VQzkzWF9WQV9HQ1IKKyNkZWZpbmUgTlVDOTMyX0NQVUlECTB4Mjk1NTAwOTEKKworLyogZXh0ZXJuIGZpbGUgZnJvbSBjcHUuYyAqLworCitleHRlcm4gdm9pZCBudWM5M3hfY2xvY2tfc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIG51YzkzeF9pbml0X2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzeF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBtYWNoX3NpemUpOworZXh0ZXJuIHZvaWQgbnVjOTN4X2JvYXJkX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmRldmljZSwgaW50IHNpemUpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTN4X3NlcmlhbF9kZXZpY2U7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Rldi5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MmFlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9kZXYuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvZGV2LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKworLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5M3hfcHVibGljX2RldltdIF9faW5pdGRhdGEgPSB7CisJJm51YzkzeF9zZXJpYWxfZGV2aWNlLAorfTsKKworLyogUHJvdmlkZSBhZGRpbmcgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGRldmljZXMgQVBJICovCisKK3ZvaWQgX19pbml0IG51YzkzeF9ib2FyZF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipkZXZpY2UsIGludCBzaXplKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZSwgc2l6ZSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMobnVjOTN4X3B1YmxpY19kZXYsIEFSUkFZX1NJWkUobnVjOTN4X3B1YmxpY19kZXYpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTJjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwkJbW92CVxiYXNlLCAjQUlDX0JBCisKKwkJbGRyCVxpcnFuciwgWyBcYmFzZSwgI0FJQ19JUEVSXQorCQlsZHIJXGlycW5yLCBbIFxiYXNlLCAjQUlDX0lTTlJdCisJCWNtcAlcaXJxbnIsICMwCisKKwkuZW5kbQorCisJLyogY3VycmVudGx5IGRvbid0IG5lZWQgYW4gZGlzYWJsZV9maXEgbWFjcm8gKi8KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNWM2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlNTA1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJMHhmZmZmZmZmZgorCisvKgorICogMToxIG1hcHBpbmcgZm9yIGlvcmVtYXBwZWQgcmVnaW9ucy4KKyAqLworCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNGFhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisjZGVmaW5lIE5VQzkzWF9JUlEoeCkJKHgpCisKKy8qIE1haW4gY3B1IGludGVycnVwdHMgKi8KKworI2RlZmluZSBJUlFfV0RUCQlOVUM5M1hfSVJRKDEpCisjZGVmaW5lIElSUV9JUlEwCU5VQzkzWF9JUlEoMikKKyNkZWZpbmUgSVJRX0lSUTEJTlVDOTNYX0lSUSgzKQorI2RlZmluZSBJUlFfSVJRMglOVUM5M1hfSVJRKDQpCisjZGVmaW5lIElSUV9JUlEzCU5VQzkzWF9JUlEoNSkKKyNkZWZpbmUgSVJRX1VTQkgJTlVDOTNYX0lSUSg2KQorI2RlZmluZSBJUlFfQVBVCQlOVUM5M1hfSVJRKDcpCisjZGVmaW5lIElSUV9WUE9TVAlOVUM5M1hfSVJRKDgpCisjZGVmaW5lIElSUV9BREMJCU5VQzkzWF9JUlEoOSkKKyNkZWZpbmUgSVJRX1VBUlQwCU5VQzkzWF9JUlEoMTApCisjZGVmaW5lIElSUV9USU1FUjAJTlVDOTNYX0lSUSgxMSkKKyNkZWZpbmUgSVJRX0dQVTAJTlVDOTNYX0lSUSgxMikKKyNkZWZpbmUgSVJRX0dQVTEJTlVDOTNYX0lSUSgxMykKKyNkZWZpbmUgSVJRX0dQVTIJTlVDOTNYX0lSUSgxNCkKKyNkZWZpbmUgSVJRX0dQVTMJTlVDOTNYX0lSUSgxNSkKKyNkZWZpbmUgSVJRX0dQVTQJTlVDOTNYX0lSUSgxNikKKyNkZWZpbmUgSVJRX1ZJTgkJTlVDOTNYX0lSUSgxNykKKyNkZWZpbmUgSVJRX1VTQkQJTlVDOTNYX0lSUSgxOCkKKyNkZWZpbmUgSVJRX1ZSQU1MRAlOVUM5M1hfSVJRKDE5KQorI2RlZmluZSBJUlFfR0RNQTAJTlVDOTNYX0lSUSgyMCkKKyNkZWZpbmUgSVJRX0dETUExCU5VQzkzWF9JUlEoMjEpCisjZGVmaW5lIElSUV9TRElPCU5VQzkzWF9JUlEoMjIpCisjZGVmaW5lIElSUV9GTUkJCU5VQzkzWF9JUlEoMjIpCisjZGVmaW5lIElSUV9KUEVHCU5VQzkzWF9JUlEoMjMpCisjZGVmaW5lIElSUV9TUEkwCU5VQzkzWF9JUlEoMjQpCisjZGVmaW5lIElSUV9TUEkxCU5VQzkzWF9JUlEoMjUpCisjZGVmaW5lIElSUV9SVEMJCU5VQzkzWF9JUlEoMjYpCisjZGVmaW5lIElSUV9QV00wCU5VQzkzWF9JUlEoMjcpCisjZGVmaW5lIElSUV9QV00xCU5VQzkzWF9JUlEoMjgpCisjZGVmaW5lIElSUV9QV00yCU5VQzkzWF9JUlEoMjkpCisjZGVmaW5lIElSUV9QV00zCU5VQzkzWF9JUlEoMzApCisjZGVmaW5lIElSUV9JMlNBQzk3CU5VQzkzWF9JUlEoMzEpCisjZGVmaW5lIElSUV9DQVAwCUlSUV9QV00wCisjZGVmaW5lIElSUV9DQVAxCUlSUV9QV00xCisjZGVmaW5lIElSUV9DQVAyCUlSUV9QV00yCisjZGVmaW5lIElSUV9DQVAzCUlSUV9QV00zCisjZGVmaW5lIE5SX0lSUVMJCShJUlFfSTJTQUM5NyArIDEpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwYjVlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01BUF9ICisKKyNkZWZpbmUgTUFQX09GRlNFVAkoMHhmZmYwMDAwMCkKKyNkZWZpbmUgQ0xLX09GRlNFVAkoMHgxMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgTlVDOTNYX0FERFIoeCkJKCh2b2lkIF9faW9tZW0gKikoMHhGMDAwMDAwMCArICgoeCkmKH5NQVBfT0ZGU0VUKSkpKQorI2Vsc2UKKyNkZWZpbmUgTlVDOTNYX0FERFIoeCkJKDB4RjAwMDAwMDAgKyAoKHgpJih+TUFQX09GRlNFVCkpKQorI2VuZGlmCisKKyAvKgorICAqIG51YzkzMiBoYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uCisgICovCisKKyNkZWZpbmUgTlVDOTNYX1BBX0lSUQkJKDB4RkZGODMwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9HQ1IJCSgweEZGRjAwMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfRUJJCQkoMHhGRkYwMTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1VBUlQJCSgweEZGRjgwMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVElNRVIJCSgweEZGRjgxMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfR1BJTwkJKDB4RkZGODQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9HRE1BCQkoMHhGRkYwMzAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1VTQkhPU1QJKDB4RkZGMGQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9JMkMJCSgweEZGRjg5MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfTENECQkoMHhGRkYwNjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dFCQkoMHhGRkYwNTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0FEQwkJKDB4RkZGODUwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9SVEMJCSgweEZGRjg3MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfUFdNCQkoMHhGRkY4MjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0FDVEwJCSgweEZGRjBhMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVVNCREVWCSgweEZGRjBDMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfSkVQRUcJCSgweEZGRjBlMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfQ0FDSEVfVAkoMHhGRkY2MDAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1ZSQU0JCSgweEZGRjBiMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfRE1BQwkJKDB4RkZGMDkwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9JMlNNCQkoMHhGRkYwODAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0NBQ0hFCQkoMHhGRkYwMjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dQVQkJKDB4RkZGMDQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9WSURFT0lOCSgweEZGRjA3MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfU1BJMAkJKDB4RkZGODYwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9TUEkxCQkoMHhGRkY4ODAwMCkKKworIC8qCisgICogbnVjOTMyIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nLgorICAqIGludGVycnVwdCBjb250cm9sbGVyIGlzIHRoZSBmaXJzdCB0aGluZyB3ZSBwdXQgaW4sIHRvIG1ha2UKKyAgKiB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGlycSBkZXRlY3Rpb24gZWFzaWVyCisgICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0lSUQkJTlVDOTNYX0FERFIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTlVDOTNYX1NaX0lSUQkJU1pfNEsKKworI2RlZmluZSBOVUM5M1hfVkFfR0NSCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfSVJRKQorI2RlZmluZSBOVUM5M1hfVkFfQ0xLUFdSCShOVUM5M1hfVkFfR0NSK0NMS19PRkZTRVQpCisjZGVmaW5lIE5VQzkzWF9TWl9HQ1IJCVNaXzRLCisKKy8qIEVCSSBtYW5hZ2VtZW50ICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0VCSQkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0VCSSkKKyNkZWZpbmUgTlVDOTNYX1NaX0VCSQkJU1pfNEsKKworLyogVUFSVHMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVUFSVAkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1VBUlQpCisjZGVmaW5lIE5VQzkzWF9TWl9VQVJUCQlTWl80SworCisvKiBUaW1lcnMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVElNRVIJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1RJTUVSKQorI2RlZmluZSBOVUM5M1hfU1pfVElNRVIJU1pfNEsKKworLyogR1BJTyBwb3J0cyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HUElPCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfR1BJTykKKyNkZWZpbmUgTlVDOTNYX1NaX0dQSU8JCVNaXzRLCisKKy8qIEdETUEgY29udHJvbCAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HRE1BCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfR0RNQSkKKyNkZWZpbmUgTlVDOTNYX1NaX0dETUEJCVNaXzRLCisKKy8qIEkyQyBoYXJkd2FyZSBjb250cm9sbGVyICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0kyQwkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0kyQykKKyNkZWZpbmUgTlVDOTNYX1NaX0kyQwkJU1pfNEsKKworLyogTENEIGNvbnRyb2xsZXIqLworCisjZGVmaW5lIE5VQzkzWF9WQV9MQ0QJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9MQ0QpCisjZGVmaW5lIE5VQzkzWF9TWl9MQ0QJCVNaXzRLCisKKy8qIDJEIGNvbnRyb2xsZXIqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HRQkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0dFKQorI2RlZmluZSBOVUM5M1hfU1pfR0UJCVNaXzRLCisKKy8qIEFEQyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9BREMJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9BREMpCisjZGVmaW5lIE5VQzkzWF9TWl9BREMJCVNaXzRLCisKKy8qIFJUQyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9SVEMJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9SVEMpCisjZGVmaW5lIE5VQzkzWF9TWl9SVEMJCVNaXzRLCisKKy8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24oUFdNKSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfUFdNCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfUFdNKQorI2RlZmluZSBOVUM5M1hfU1pfUFdNCQlTWl80SworCisvKiBBdWRpbyBDb250cm9sbGVyIGNvbnRyb2xsZXIgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfQUNUTAkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0FDVEwpCisjZGVmaW5lIE5VQzkzWF9TWl9BQ1RMCQlTWl80SworCisvKiBVU0IgRGV2aWNlIHBvcnQgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVVNCREVWCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9VU0JERVYpCisjZGVmaW5lIE5VQzkzWF9TWl9VU0JERVYJU1pfNEsKKworLyogVVNCIGhvc3QgY29udHJvbGxlciovCisjZGVmaW5lIE5VQzkzWF9WQV9VU0JIT1NUCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9VU0JIT1NUKQorI2RlZmluZSBOVUM5M1hfU1pfVVNCSE9TVAlTWl80SworCisjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2FiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IyOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDUzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKworLyogQ2xvY2sgQ29udHJvbCBSZWdpc3RlcnMgICovCisjZGVmaW5lIENMS19CQQkJTlVDOTNYX1ZBX0NMS1BXUgorI2RlZmluZSBSRUdfQ0xLRU4JKENMS19CQSArIDB4MDApCisjZGVmaW5lIFJFR19DTEtTRUwJKENMS19CQSArIDB4MDQpCisjZGVmaW5lIFJFR19DTEtESVYJKENMS19CQSArIDB4MDgpCisjZGVmaW5lIFJFR19QTExDT04wCShDTEtfQkEgKyAweDBDKQorI2RlZmluZSBSRUdfUExMQ09OMQkoQ0xLX0JBICsgMHgxMCkKKyNkZWZpbmUgUkVHX1BNQ09OCShDTEtfQkEgKyAweDE0KQorI2RlZmluZSBSRUdfSVJRV0FLRUNPTgkoQ0xLX0JBICsgMHgxOCkKKyNkZWZpbmUgUkVHX0lSUVdBS0VGTEFHCShDTEtfQkEgKyAweDFDKQorI2RlZmluZSBSRUdfSVBTUlNUCShDTEtfQkEgKyAweDIwKQorI2RlZmluZSBSRUdfQ0xLRU4xCShDTEtfQkEgKyAweDI0KQorI2RlZmluZSBSRUdfQ0xLRElWMQkoQ0xLX0JBICsgMHgyOCkKKworLyogRGVmaW5lIFBMTCBmcmVxIHNldHRpbmcgKi8KKyNkZWZpbmUgUExMX0RJU0FCTEUJCTB4MTJCNjMKKyNkZWZpbmUJUExMXzY2TUhaCQkweDJCNjMKKyNkZWZpbmUJUExMXzEwME1IWgkJMHg0RjY0CisjZGVmaW5lIFBMTF8xMjBNSFoJCTB4NEY2MworI2RlZmluZQlQTExfMTY2TUhaCQkweDQxMjQKKyNkZWZpbmUJUExMXzIwME1IWgkJMHg0RjI0CisKKy8qIERlZmluZSBBSEI6Q1BVRlJFUSByYXRpbyAqLworI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMQkJMHgwMAorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMgkJMHgwMQorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfNAkJMHgwMgorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfOAkJMHgwMworCisvKiBEZWZpbmUgQVBCOkFIQiByYXRpbyAqLworI2RlZmluZSBBUEJfQUhCXzFfMgkJMHgwMQorI2RlZmluZSBBUEJfQUhCXzFfNAkJMHgwMgorI2RlZmluZSBBUEJfQUhCXzFfOAkJMHgwMworCisvKiBEZWZpbmUgY2xvY2sgc2tldyAqLworI2RlZmluZSBERUZBVUxUU0tFVwkJMHg0OAorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzI1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19FQklfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfRUJJX0gKKworLyogRUJJIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgRUJJX0JBCQlOVUM5M1hfVkFfRUJJCisjZGVmaW5lIFJFR19FQklDT04JKEVCSV9CQSArIDB4MDApCisjZGVmaW5lIFJFR19ST01DT04JKEVCSV9CQSArIDB4MDQpCisjZGVmaW5lIFJFR19TRENPTkYwCShFQklfQkEgKyAweDA4KQorI2RlZmluZSBSRUdfU0RDT05GMQkoRUJJX0JBICsgMHgwQykKKyNkZWZpbmUgUkVHX1NEVElNRTAJKEVCSV9CQSArIDB4MTApCisjZGVmaW5lIFJFR19TRFRJTUUxCShFQklfQkEgKyAweDE0KQorI2RlZmluZSBSRUdfRVhUMENPTgkoRUJJX0JBICsgMHgxOCkKKyNkZWZpbmUgUkVHX0VYVDFDT04JKEVCSV9CQSArIDB4MUMpCisjZGVmaW5lIFJFR19FWFQyQ09OCShFQklfQkEgKyAweDIwKQorI2RlZmluZSBSRUdfRVhUM0NPTgkoRUJJX0JBICsgMHgyNCkKKyNkZWZpbmUgUkVHX0VYVDRDT04JKEVCSV9CQSArIDB4MjgpCisjZGVmaW5lIFJFR19DS1NLRVcJKEVCSV9CQSArIDB4MkMpCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX0VCSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDIxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19fQVNNX0FSQ0hfUkVHU19JUlFfSAorCisvKiBBZHZhbmNlIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEFJQ19CQSAgICAJCU5VQzkzWF9WQV9JUlEKKworI2RlZmluZSBSRUdfQUlDX0lSUVNDCQkoQUlDX0JBKzB4ODApCisjZGVmaW5lIFJFR19BSUNfR0VOCQkoQUlDX0JBKzB4ODQpCisjZGVmaW5lIFJFR19BSUNfR0FTUgkJKEFJQ19CQSsweDg4KQorI2RlZmluZSBSRUdfQUlDX0dTQ1IJCShBSUNfQkErMHg4QykKKyNkZWZpbmUgUkVHX0FJQ19JUlNSCQkoQUlDX0JBKzB4MTAwKQorI2RlZmluZSBSRUdfQUlDX0lBU1IJCShBSUNfQkErMHgxMDQpCisjZGVmaW5lIFJFR19BSUNfSVNSCQkoQUlDX0JBKzB4MTA4KQorI2RlZmluZSBSRUdfQUlDX0lQRVIJCShBSUNfQkErMHgxMEMpCisjZGVmaW5lIFJFR19BSUNfSVNOUgkJKEFJQ19CQSsweDExMCkKKyNkZWZpbmUgUkVHX0FJQ19JTVIJCShBSUNfQkErMHgxMTQpCisjZGVmaW5lIFJFR19BSUNfT0lTUgkJKEFJQ19CQSsweDExOCkKKyNkZWZpbmUgUkVHX0FJQ19NRUNSCQkoQUlDX0JBKzB4MTIwKQorI2RlZmluZSBSRUdfQUlDX01EQ1IJCShBSUNfQkErMHgxMjQpCisjZGVmaW5lIFJFR19BSUNfU1NDUgkJKEFJQ19CQSsweDEyOCkKKyNkZWZpbmUgUkVHX0FJQ19TQ0NSCQkoQUlDX0JBKzB4MTJDKQorI2RlZmluZSBSRUdfQUlDX0VPU0NSCQkoQUlDX0JBKzB4MTMwKQorI2RlZmluZSBBSUNfSVBFUgkJKDB4MTBDKQorI2RlZmluZSBBSUNfSVNOUgkJKDB4MTEwKQorCisjZW5kaWYgLyogX19fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdhMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXNlcmlhbC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorCisjZGVmaW5lIFVBUlQwX0JBCU5VQzkzWF9WQV9VQVJUCisjZGVmaW5lIFVBUlQxX0JBCShOVUM5M1hfVkFfVUFSVCsweDEwMCkKKworI2RlZmluZSBVQVJUMF9QQQlOVUM5M1hfUEFfVUFSVAorI2RlZmluZSBVQVJUMV9QQQkoTlVDOTNYX1BBX1VBUlQrMHgxMDApCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IG51YzkzeF91YXJ0X2Nsa3NyYyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJZGl2aXNvcjsKKwl1bnNpZ25lZCBpbnQJbWluX2JhdWQ7CisJdW5zaWduZWQgaW50CW1heF9iYXVkOworfTsKKworc3RydWN0IG51YzkzeF91YXJ0Y2ZnIHsKKwl1bnNpZ25lZCBjaGFyCWh3cG9ydDsKKwl1bnNpZ25lZCBjaGFyCXVudXNlZDsKKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXVhcnRfZmxhZ3M7CisKKwl1bnNpZ25lZCBsb25nCXVjb247CisJdW5zaWduZWQgbG9uZwl1bGNvbjsKKwl1bnNpZ25lZCBsb25nCXVmY29uOworCisJc3RydWN0IG51YzkzeF91YXJ0X2Nsa3NyYyAqY2xvY2tzOworCXVuc2lnbmVkIGludAljbG9ja3Nfc2l6ZTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGJlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSAorCisvKiBUaW1lciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBUTVJfQkEJCQlOVUM5M1hfVkFfVElNRVIKKyNkZWZpbmUgUkVHX1RDU1IwCQkoVE1SX0JBKzB4MDApCisjZGVmaW5lIFJFR19USUNSMAkJKFRNUl9CQSsweDA4KQorI2RlZmluZSBSRUdfVERSMAkJKFRNUl9CQSsweDEwKQorI2RlZmluZSBSRUdfVElTUgkJKFRNUl9CQSsweDE4KQorI2RlZmluZSBSRUdfV1RDUgkJKFRNUl9CQSsweDFDKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2YmQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogYXJjaC9hcm0vbWFjaG51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MTljYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisvKiBDTE9DS19USUNLX1JBVEUgTm93LCBJIGRvbid0IHVzZSBpdC4gKi8KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgMjcwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwODJjZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworLyogRGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKKworI2RlZmluZSBUWF9ET05FCShVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKK3N0YXRpYyB1MzIgKiB1YXJ0X2Jhc2UgPSAodTMyICopVUFSVDBfUEE7CisKK3N0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQoreworCS8qIENoZWNrIFRIUkUgYW5kIFRFTVQgYml0cyBiZWZvcmUgd2UgdHJhbnNtaXQgdGhlIGNoYXJhY3Rlci4KKwkgKi8KKwl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQorCQliYXJyaWVyKCk7CisKKwkqdWFydF9iYXNlID0gY2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQoreworfQorCisjZW5kaWYvKiBfX0FTTV9OVUM5M1hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGEyMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E4OGVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaXJxLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L2lycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKworc3RhdGljIHZvaWQgbnVjOTN4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01EQ1IpOworfQorCisvKgorICogQnkgdGhlIHc5MHA5MTAgc3BlYyxhbnkgaXJxLG9ubHkgd3JpdGUgMQorICogdG8gUkVHX0FJQ19FT1NDUiBmb3IgQUNLCisgKi8KKworc3RhdGljIHZvaWQgbnVjOTN4X2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoMHgwMSwgUkVHX0FJQ19FT1NDUik7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkzeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01FQ1IpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbnVjOTN4X2lycV9jaGlwID0geworCS5hY2sJICAgPSBudWM5M3hfaXJxX2FjaywKKwkubWFzawkgICA9IG51YzkzeF9pcnFfbWFzaywKKwkudW5tYXNrCSAgID0gbnVjOTN4X2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCBudWM5M3hfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaXJxbm87CisKKwlfX3Jhd193cml0ZWwoMHhGRkZGRkZGRSwgUkVHX0FJQ19NRENSKTsKKworCWZvciAoaXJxbm8gPSBJUlFfV0RUOyBpcnFubyA8PSBOUl9JUlFTOyBpcnFubysrKSB7CisJCXNldF9pcnFfY2hpcChpcnFubywgJm51YzkzeF9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L21hY2gtbnVjOTMyZXZiLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9tYWNoLW51YzkzMmV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzkyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9tYWNoLW51YzkzMmV2Yi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5MTBldmIuYworICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgIm51YzkzMi5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTMyZXZiX21hcF9pbyh2b2lkKQoreworCW51YzkzMl9tYXBfaW8oKTsKKwludWM5MzJfaW5pdF9jbG9ja3MoKTsKKwludWM5MzJfaW5pdF91YXJ0Y2xrKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MzJldmJfaW5pdCh2b2lkKQoreworCW51YzkzMl9ib2FyZF9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTlVDOTMyRVZCLCAiTlVDOTMyRVZCIikKKwkvKiBNYWludGFpbmVyOiBXYW4gWm9uZ1NodW4gKi8KKwkucGh5c19pbwk9IE5VQzkzWF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilOVUM5M1hfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDAsCisJLm1hcF9pbwkJPSBudWM5MzJldmJfbWFwX2lvLAorCS5pbml0X2lycQk9IG51YzkzeF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbnVjOTMyZXZiX2luaXQsCisJLnRpbWVyCQk9ICZudWM5M3hfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTY2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzkzMiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5MzJfZGV2W10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gaW8gbWFwICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbnVjOTMyZXZiX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Cit9OworCisvKkluaXQgTlVDOTMyIGV2YiBpbyovCisKK3ZvaWQgX19pbml0IG51YzkzMl9tYXBfaW8odm9pZCkKK3sKKwludWM5M3hfbWFwX2lvKG51YzkzMmV2Yl9pb2Rlc2MsIEFSUkFZX1NJWkUobnVjOTMyZXZiX2lvZGVzYykpOworfQorCisvKkluaXQgTlVDOTMyIGNsb2NrKi8KKwordm9pZCBfX2luaXQgbnVjOTMyX2luaXRfY2xvY2tzKHZvaWQpCit7CisJbnVjOTN4X2luaXRfY2xvY2tzKCk7Cit9CisKKy8qZW5hYmxlIE5VQzkzMiB1YXJ0IGNsb2NrKi8KKwordm9pZCBfX2luaXQgbnVjOTMyX2luaXRfdWFydGNsayh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrX3VhcnQgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Iik7CisJQlVHX09OKElTX0VSUihja191YXJ0KSk7CisKKwljbGtfZW5hYmxlKGNrX3VhcnQpOworfQorCisvKkluaXQgTlVDOTMyIGJvYXJkIGluZm8qLworCit2b2lkIF9faW5pdCBudWM5MzJfYm9hcmRfaW5pdCh2b2lkKQoreworCW51YzkzeF9ib2FyZF9pbml0KG51YzkzMl9kZXYsIEFSUkFZX1NJWkUobnVjOTMyX2RldikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY2ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gY29ycG9yYXRpb24KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgTlVDOTN4IENQVSBzdXBwb3J0CisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKK3N0cnVjdCBtYXBfZGVzYzsKK3N0cnVjdCBzeXNfdGltZXI7CisKKy8qIGNvcmUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCisKK2V4dGVybiB2b2lkIG51YzkzeF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG51YzkzeF90aW1lcjsKKworLyogZXh0ZXJuIGZpbGUgZnJvbSBudWM5MzIuYyAqLworCitleHRlcm4gdm9pZCBudWM5MzJfYm9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzMl9pbml0X2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzMl9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBudWM5MzJfaW5pdF91YXJ0Y2xrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTBmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXIuaD4KKworI2RlZmluZSBSRVNFVElOVAkweDAxCisjZGVmaW5lIFBFUklPRAkJKDB4MDEgPDwgMjcpCisjZGVmaW5lIE9ORVNIT1QJCSgweDAwIDw8IDI3KQorI2RlZmluZSBDT1VOVEVOCQkoMHgwMSA8PCAzMCkKKyNkZWZpbmUgSU5URU4JCSgweDAxIDw8IDI5KQorCisjZGVmaW5lIFRJQ0tTX1BFUl9TRUMJMTAwCisjZGVmaW5lIFBSRVNDQUxFCTB4NjMgLyogRGl2aWRlciA9IHByZXNjYWxlICsgMSAqLworCit1bnNpZ25lZCBpbnQgdGltZXIwX2xvYWQ7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51YzkzeF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lciovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBudWM5M3hfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl0aW1lcl90aWNrKCk7CisJX19yYXdfd3JpdGVsKDB4MDEsIFJFR19USVNSKTsgLyogY2xlYXIgVElGMCAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbnVjOTN4X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAibnVjOTN4IFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IG51YzkzeF90aW1lcl9pbnRlcnJ1cHQsCit9OworCisvKlNldCB1cCB0aW1lciByZWcuKi8KKworc3RhdGljIHZvaWQgbnVjOTN4X3RpbWVyX3NldHVwKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2tfZXh0ID0gY2xrX2dldChOVUxMLCAiZXh0Iik7CisJc3RydWN0IGNsayAqY2tfdGltZXIgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lciIpOworCXVuc2lnbmVkIGludCByYXRlLCB2YWwgPSAwOworCisJQlVHX09OKElTX0VSUihja19leHQpIHx8IElTX0VSUihja190aW1lcikpOworCisJY2xrX2VuYWJsZShja190aW1lcik7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShja19leHQpOworCWNsa19wdXQoY2tfZXh0KTsKKwlyYXRlID0gcmF0ZSAvIChQUkVTQ0FMRSArIDB4MDEpOworCisJIC8qIHNldCBhIGtub3duIHN0YXRlICovCisJX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMCk7CisJX19yYXdfd3JpdGVsKFJFU0VUSU5ULCBSRUdfVElTUik7CisKKwl0aW1lcjBfbG9hZCA9IChyYXRlIC8gVElDS1NfUEVSX1NFQyk7CisJX19yYXdfd3JpdGVsKHRpbWVyMF9sb2FkLCBSRUdfVElDUjApOworCisJdmFsIHw9IChQRVJJT0QgfCBDT1VOVEVOIHwgSU5URU4gfCBQUkVTQ0FMRSk7OworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMCk7CisKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51YzkzeF90aW1lcl9pbml0KHZvaWQpCit7CisJbnVjOTN4X3RpbWVyX3NldHVwKCk7CisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZudWM5M3hfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBudWM5M3hfdGltZXIgPSB7CisJLmluaXQJCT0gbnVjOTN4X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBudWM5M3hfZ2V0dGltZW9mZnNldCwKKwkucmVzdW1lCQk9IG51YzkzeF90aW1lcl9zZXR1cAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IDljZTE3ZjEuLmI2YTUzN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gaW8ubyBpZC5vIHNyYW0ubyBpcnEubyBtdXgubyBzZXJpYWwubyBkZXZpY2VzLm8KK29iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8KIG9iai15ICs9IGNsb2NrLm8gY2xvY2tfZGF0YS5vIG9wcF9kYXRhLm8KIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKaW5kZXggN2U3MGMzYy4uMDk2ZjJlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKQEAgLTE4LDE4ICsxOCwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxwbGF0L3RjLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9mcGdhLmg+CiAjaW5jbHVkZSA8cGxhdC9rZXlwYWQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgpAQCAtMTUwLDkgKzE1MSw5IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gbm9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTY0LDcgKzE2NSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggZmE3Y2VjZS4uZDExMDBlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgpAQCAtMzUsNyArMzYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogCiAjaW5jbHVkZSAiYm9hcmQtaDIuaCIKIApAQCAtMTIxLDkgKzEyMiw5IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGgyX25vcl9kYXRhID0gewotCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgaDJfbm9yX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogCS5wYXJ0cwkJPSBoMl9ub3JfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGgyX25vcl9wYXJ0aXRpb25zKSwKIH07CkBAIC0xMzQsNyArMTM1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX25vcl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoMl9ub3JfZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCA2YTdmOWMzLi5hNTNhYjgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgpAQCAtMzcsNyArMzgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvZmxhc2guaD4KIAogI2luY2x1ZGUgImJvYXJkLWgzLmgiCiAKQEAgLTEyNiw5ICsxMjcsOSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gbm9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTM5LDcgKzE0MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCAyMTMzYjAwNi4uNWQxMmZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0yMiwxNiArMjIsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9mcGdhLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC90Yy5oPgpAQCAtOTQsOSArOTUsOSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBpbm5vdmF0b3JfZmxhc2hfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGlubm92YXRvcl9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gaW5ub3ZhdG9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShpbm5vdmF0b3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTA4LDcgKzEwOSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3JfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaW5ub3ZhdG9yX2ZsYXNoX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCBjY2VhNGY0Li44MGQ4NjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KIApAQCAtNDYsOCArNDcsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KQEAgLTk0LDkgKzk1LDkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgb3NrX2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBvc2tfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IG9za19wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUob3NrX3BhcnRpdGlvbnMpLAogfTsKQEAgLTEwNyw3ICsxMDgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZvc2tfZmxhc2hfZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDlmZTg4NzIuLjU2OWI0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KQEAgLTMxLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L3RjLmg+CkBAIC0xMjYsOSArMTI3LDkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHBhbG10ZV9yb21fZGF0YSA9IHsKLQkubWFwX25hbWUJPSAibWFwX3JvbSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdGVfcm9tX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogCS5wYXJ0cwkJPSBwYWxtdGVfcm9tX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdGVfcm9tX3BhcnRpdGlvbnMpLAogfTsKQEAgLTE0MCw3ICsxNDEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRlX3JvbV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXRlX3JvbV9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggYWYwNjhlMy4uNmFkNDlhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yMSwxNiArMjEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8cGxhdC9sZWQuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CkBAIC0xMDQsOSArMTA1LDkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcGFsbXR0X2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdHRfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IHBhbG10dF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbXR0X3BhcnRpdGlvbnMpLAogfTsKQEAgLTExOCw3ICsxMTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR0X2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10dF9mbGFzaF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCBjN2EzYjZmLi42NjQxZGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMjUsMTQgKzI1LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgpAQCAtMTI2LDEwICsxMjcsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcGFsbXo3MV9yb21fZGF0YSA9IHsKLQkubWFwX25hbWUJPSAibWFwX3JvbSIsCi0JLm5hbWUJCT0gIm9uYm9hcmRyb20iLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbXo3MV9yb21fZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IHBhbG16NzFfcm9tX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtejcxX3JvbV9wYXJ0aXRpb25zKSwKIH07CkBAIC0xNDEsNyArMTQxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG16NzFfcm9tX2RldmljZSA9IHsKLQkubmFtZQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAk9IC0xLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG16NzFfcm9tX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKaW5kZXggMTM4N2E0Zi4uZTg1NGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpAQCAtMTgsMTkgKzE4LDIwIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvdGMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvZnBnYS5oPgorI2luY2x1ZGUgPHBsYXQvZmxhc2guaD4KICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpAQCAtMTE3LDkgKzExOCw5IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gbm9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTMxLDcgKzEzMiw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCA3YTk3ZmFjLi4yZmIxZTVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjksMTAgKzMwLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvaXJkYS5oPgpAQCAtMjg3LDkgKzI4OCw5IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHN4MV9mbGFzaF9kYXRhID0gewotCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc3gxX2ZsYXNoX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogCS5wYXJ0cwkJPSBzeDFfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHN4MV9wYXJ0aXRpb25zKSwKIH07CkBAIC0zMTAsNyArMzExLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN4MV9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZzeDFfZmxhc2hfZGF0YSwKQEAgLTMyNyw3ICszMjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3gxX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnN4MV9mbGFzaF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggMTY5MTgzNS4uODdiOTQzNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KQEAgLTI3LDExICsyOCwxMSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3RjLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KQEAgLTg2LDkgKzg3LDkgQEAKIH0KIGFyY2hfaW5pdGNhbGwoZXh0X3VhcnRfaW5pdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSB2b2ljZWJsdWVfZmxhc2hfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHZvaWNlYmx1ZV9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugdm9pY2VibHVlX2ZsYXNoX3Jlc291cmNlID0gewpAQCAtOTgsNyArOTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdm9pY2VibHVlX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnZvaWNlYmx1ZV9mbGFzaF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCmluZGV4IDA0ZjFkMjkuLmUwYWVjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1LCAyMDA5IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSwgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KICAqCiAgKiAgTW9kaWZpZWQgdG8gdXNlIG9tYXAgc2hhcmVkIGNsb2NrIGZyYW1ld29yayBieQpAQCAtMzgsMjYgKzM4LDYgQEAKICAqIE9tYXAxIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBjbGtfb21hcDFfZHVtbXlfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2xrX29tYXAxX2R1bW15X2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotfQotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kdW1teSA9IHsKLQkuZW5hYmxlCQk9IGNsa19vbWFwMV9kdW1teV9lbmFibGUsCi0JLmRpc2FibGUJPSBjbGtfb21hcDFfZHVtbXlfZGlzYWJsZSwKLX07Ci0KLS8qIFhYWCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIGZpeGVkX2Rpdmlzb3JfcmVjYWxjICovCi11bnNpZ25lZCBsb25nIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGludCB2YWwgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwpAQCAtNTc3LDkgKzU1Nyw2IEBACiAKIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQotCQlyZXR1cm4gY2xrLT5yYXRlOwotCiAJaWYgKGNsay0+cm91bmRfcmF0ZSAhPSBOVUxMKQogCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMKaW5kZXggNjVlN2I1Yi4uYWE4NTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUsIDIwMDkgTm9raWEgY29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1LCAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgogICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKICAqCkBAIC0yNywxMyArMjcsNiBAQAogICogT21hcDEgY2xvY2tzCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBYWFggaXMgdGhpcyBuZWNlc3Nhcnk/ICovCi1zdGF0aWMgc3RydWN0IGNsayBkdW1teV9jayA9IHsKLQkubmFtZQk9ICJkdW1teSIsCi0JLm9wcwk9ICZjbGtvcHNfZHVtbXksCi0JLmZsYWdzCT0gUkFURV9GSVhFRCwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNrX3JlZiA9IHsKIAkubmFtZQkJPSAiY2tfcmVmIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTE0OSw3ICsxNDIsOCBAQAogCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX1dEVENLLAotCQkucmVjYWxjCQk9ICZvbWFwMV93YXRjaGRvZ19yZWNhbGMsCisJCS5maXhlZF9kaXYJPSAxNCwKKwkJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAwLAogfTsKQEAgLTM4OCw4ICszODIsNyBAQAogCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAorCQkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkJLmVuYWJsZV9iaXQJPSAyOSwKIAl9LApAQCAtNDI5LDggKzQyMiw3IEBACiAJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJCS5yYXRlCQk9IDQ4MDAwMDAwLAotCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAotCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCQkuZW5hYmxlX2JpdAk9IDMxLAogCX0sCkBAIC00NDIsNyArNDM0LDcgQEAKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA2MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoVUxQRF9DTE9DS19DVFJMKSwKIAkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKIH07CkBAIC00NTIsNyArNDQ0LDcgQEAKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IFVTQl9IT1NUX0hIQ19VSE9TVF9FTiwKIH07CkBAIC00NjMsNyArNDU1LDcgQEAKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwKIAkvKiBPVEdfU1lTQ09OXzIuT1RHX1BBREVOID09IDAgKG5vdCAxNTEwLWNvbXBhdGlibGUpICovCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhPVEdfQkFTRSArIDB4MDgpLCAvKiBPVEdfU1lTQ09OXzIgKi8KIAkuZW5hYmxlX2JpdAk9IDggLyogVUhPU1RfRU4gKi8sCiB9OwpAQCAtNDczLDcgKzQ2NSw2IEBACiAJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCiAJLmVuYWJsZV9iaXQJPSA0LAogfTsKQEAgLTQ4Myw3ICs0NzQsNiBAQAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAogCS5lbmFibGVfYml0CT0gOCwKIH07CkBAIC00OTMsNyArNDgzLDYgQEAKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKIAkuZW5hYmxlX2JpdAk9IDYsCiB9OwpAQCAtNTE0LDcgKzUwMyw2IEBACiAJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBiY2xrXzE2eHggPSB7CkBAIC01MjksMzYgKzUxNywzNCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jX2NrIiwKKwkubmFtZQkJPSAibW1jMV9jayIsCiAJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMjMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewotCS5uYW1lCQk9ICJtbWNfY2siLAotCS5pZAkJPSAxLAorCS5uYW1lCQk9ICJtbWMyX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAyMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzNfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19jayIsCi0JLmlkCQk9IDIsCisJLm5hbWUJCT0gIm1tYzNfY2siLAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKIAkuZW5hYmxlX2JpdAk9IDEyLAogfTsKQEAgLTU3Niw3ICs1NjIsNiBAQAogcmVtYWlucyBhY3RpdmUgZHVyaW5nIE1QVSBpZGxlIHdoZW5ldmVyIHRoaXMgaXMgZW5hYmxlZCAqLwogc3RhdGljIHN0cnVjdCBjbGsgaTJjX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLmlkCQk9IDEsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5wYXJlbnQJCT0gJmFybXhvcl9jay5jbGssCkBAIC01ODUsNyArNTcwLDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCi0JLmlkCQk9IDEsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCmluZGV4IGEyZDA3YWEuLjM3OTEwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCkBAIC03Myw3ICs3Myw3IEBACiAjICBkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMQlJTlRfMTYxMF9EU1BfTUFJTEJPWDEKICNlbmRpZgogCi0jZGVmaW5lIE9NQVAxX01CT1hfQkFTRQkJT01BUDFfSU9fQUREUkVTUyhPTUFQMTZYWF9NQUlMQk9YX0JBU0UpCisjZGVmaW5lIE9NQVAxX01CT1hfQkFTRQkJT01BUDE2WFhfTUFJTEJPWF9CQVNFCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveF9yZXNvdXJjZXNbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2ZsYXNoLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwN2E3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZmxhc2guYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogRmxhc2ggc3VwcG9ydCBmb3IgT01BUDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9pby5oPgorI2luY2x1ZGUgPHBsYXQvdGMuaD4KKwordm9pZCBvbWFwMV9zZXRfdnBwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgZW5hYmxlKQoreworCXN0YXRpYyBpbnQgY291bnQ7CisJdTMyIGw7CisKKwlpZiAoZW5hYmxlKSB7CisJCWlmIChjb3VudCsrID09IDApIHsKKwkJCWwgPSBvbWFwX3JlYWRsKEVNSUZTX0NPTkZJRyk7CisJCQlsIHw9IE9NQVBfRU1JRlNfQ09ORklHX1dQOworCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjb3VudCAmJiAoLS1jb3VudCA9PSAwKSkgeworCQkJbCA9IG9tYXBfcmVhZGwoRU1JRlNfQ09ORklHKTsKKwkJCWwgJj0gfk9NQVBfRU1JRlNfQ09ORklHX1dQOworCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaTJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2kyYy5jCmluZGV4IDFiZjQ3MzUuLjU0NDZjOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaTJjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pMmMuYwpAQCAtMjMsOSArMjMsNyBAQAogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotaW50IF9faW5pdCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCSAgdW5zaWduZWQgbGVuKQordm9pZCBfX2luaXQgb21hcDFfaTJjX211eF9waW5zKGludCBidXNfaWQpCiB7CiAJaWYgKGNwdV9pc19vbWFwN3h4KCkpIHsKIAkJb21hcF9jZmdfcmVnKEkyQ183WFhfU0RBKTsKQEAgLTM0LDYgKzMyLDQgQEAKIAkJb21hcF9jZmdfcmVnKEkyQ19TREEpOwogCQlvbWFwX2NmZ19yZWcoSTJDX1NDTCk7CiAJfQotCi0JcmV0dXJuIG9tYXBfcGxhdF9yZWdpc3Rlcl9pMmNfYnVzKGJ1c19pZCwgY2xrcmF0ZSwgaW5mbywgbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGFlZGI3NDYuLmI2ZDk1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsMTggKzExLDgwIEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKyNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgorCisJCS5wdXNoc2VjdGlvbiAuZGF0YQorb21hcF91YXJ0X3BoeXM6CS53b3JkCTB4MAorb21hcF91YXJ0X3ZpcnQ6CS53b3JkCTB4MAorCQkucG9wc2VjdGlvbgorCisJCS8qCisJCSAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgd29uJ3Qgd29yayBpZiB0aGUgYm9vdGxvYWRlciBwYXNzZXMKKwkJICogYSB3cm9uZyBtYWNoaW5lIElEIG51bWJlciBpbiByMS4gVG8gZGVidWcsIGp1c3QgaGFyZGNvZGUKKwkJICogdGhlIGRlc2lyZWQgVUFSVCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3NlcyB0ZW1wb3JhcmlseSBpbnRvCisJCSAqIHRoZSBvbWFwX3VhcnRfcGh5cyBhbmQgb21hcF91YXJ0X3ZpcnQgYWJvdmUuCisJCSAqLworCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKKworCQkvKiBVc2Ugb21hcF91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KKzk6CQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCWxkcmVxCVxyeCwgPW9tYXBfdWFydF9waHlzCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCWxkcm5lCVxyeCwgPW9tYXBfdWFydF92aXJ0CUAgdmlydHVhbCBiYXNlCisJCWxkcglccngsIFtccngsICMwXQorCQljbXAJXHJ4LCAjMAkJCUAgaXMgcG9ydCBjb25maWd1cmVkPworCQlibmUJOTlmCQkJQCBhbHJlYWR5IGNvbmZpZ3VyZWQKKworCQkvKiBDaGVjayA3WFggVUFSVDEgc2NyYXRjaHBhZCByZWdpc3RlciBmb3IgdWFydCB0byB1c2UgKi8KIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweGZmMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAJCW1vdm5lCVxyeCwgIzB4ZmUwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCi0JCW9ycglccngsIFxyeCwgIzB4MDAwMDkwMDAJQCBVQVJUIDMKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMpCi0JCW9ycglccngsIFxyeCwgIzB4MDAwMDA4MDAJQCBVQVJUIDIgJiAzCi0jZW5kaWYKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAlAIE9NQVAxVUFSVDEKKwkJbGRyYglccngsIFtccngsICMoVUFSVF9TQ1IgPDwgT01BUDdYWF9QT1JUX1NISUZUKV0KKwkJY21wCVxyeCwgIzAJCQlAIGFueXRoaW5nIGluIDdYWCBzY3JhdGNocGFkPworCQlibmUJMTBmCQkJQCBmb3VuZCA3WFggdWFydAorCisJCS8qIENoZWNrIDE1eHgvMTZ4eCBVQVJUMSBzY3JhdGNocGFkIHJlZ2lzdGVyIGZvciB1YXJ0IHRvIHVzZSAqLworCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbW92bmUJXHJ4LCAjMHhmZTAwMDAwMAlAIHZpcnR1YWwgYmFzZQorCQlvcnIJXHJ4LCBccngsICMweDAwZmIwMDAwCUAgT01BUDFVQVJUMQorCQlsZHJiCVxyeCwgW1xyeCwgIyhVQVJUX1NDUiA8PCBPTUFQX1BPUlRfU0hJRlQpXQorCisJCS8qIFNlbGVjdCB0aGUgVUFSVCB0byB1c2UgYmFzZWQgb24gdGhlIFVBUlQxIHNjcmF0Y2hwYWQgdmFsdWUgKi8KKzEwOgkJY21wCVxyeCwgIzAJCQlAIG5vIHBvcnQgY29uZmlndXJlZD8KKwkJYmVxCTExZgkJCUAgaWYgbm9uZSwgdHJ5IHRvIHVzZSBVQVJUMQorCQljbXAJXHJ4LCAjT01BUDFVQVJUMQorCQliZXEJMTFmCQkJQCBjb25maWd1cmUgT01BUDFVQVJUMQorCQljbXAJXHJ4LCAjT01BUDFVQVJUMgorCQliZXEJMTJmCQkJQCBjb25maWd1cmUgT01BUDFVQVJUMgorCQljbXAJXHJ4LCAjT01BUDFVQVJUMworCQliZXEJMTNmCQkJQCBjb25maWd1cmUgT01BUDJVQVJUMworCisJCS8qIENvbmZpZ3VyZSB0aGUgVUFSVCBvZmZzZXQgZnJvbSB0aGUgcGh5cy92aXJ0IGJhc2UgKi8KKzExOgkJbW92CVxyeCwgIzB4MDBmYjAwMDAJQCBPTUFQMVVBUlQxCisJCWIJOThmCisxMjoJCW1vdglccngsICMweDAwZmIwMDAwCUAgT01BUDFVQVJUMQorCQlvcnIJXHJ4LCBccngsICMweDAwMDAwODAwCUAgT01BUDFVQVJUMgorCQliCTk4ZgorMTM6CQltb3YJXHJ4LCAjMHgwMGZiMDAwMAlAIE9NQVAxVUFSVDEKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDgwMAlAIE9NQVAxVUFSVDIKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwOTAwMAlAIE9NQVAxVUFSVDMKKworCQkvKiBTdG9yZSBib3RoIHBoeXMgYW5kIHZpcnQgYWRkcmVzcyBmb3IgdGhlIHVhcnQgKi8KKzk4OgkJYWRkCVxyeCwgXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXMgYmFzZQorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF9waHlzCisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJc3ViCVxyeCwgXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXMgYmFzZQorCQlhZGQJXHJ4LCBccngsICMweGZlMDAwMDAwCUAgdmlydCBiYXNlCisJCWxkcglcdG1wLCA9b21hcF91YXJ0X3ZpcnQKKwkJc3RyCVxyeCwgW1x0bXAsICMwXQorCQliCTliCis5OToKIAkJLmVuZG0KIAogCQkubWFjcm8Jc2VuZHVhcnQscmQscngKQEAgLTMwLDEzICs5MiwxMyBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjKDB4NSA8PCAyKV0JQCBPTUFQLTE1MTAgYW5kIGZyaWVuZHMKLQkJYW5kCVxyZCwgXHJkLCAjMHg2MAotCQl0ZXEJXHJkLCAjMHg2MAorMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjKFVBUlRfTFNSIDw8IE9NQVBfUE9SVF9TSElGVCldCisJCWFuZAlccmQsIFxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKKwkJdGVxCVxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKIAkJYmVxCTEwMDJmCi0JCWxkcmIJXHJkLCBbXHJ4LCAjKDB4NSA8PCAwKV0JQCBPTUFQLTczMCBvbmx5Ci0JCWFuZAlccmQsIFxyZCwgIzB4NjAKLQkJdGVxCVxyZCwgIzB4NjAKKwkJbGRyYglccmQsIFtccngsICMoVUFSVF9MU1IgPDwgT01BUDdYWF9QT1JUX1NISUZUKV0KKwkJYW5kCVxyZCwgXHJkLCAjKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQorCQl0ZXEJXHJkLCAjKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQogCQlibmUJMTAwMWIKIDEwMDI6CiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCmluZGV4IGNhZjg4OWEuLjRmNWIzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAxX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgcmV0ID0gMDsKIAogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgcmVzb3VyY2VzOiAlZFxuIiwKQEAgLTE2MCwxMiArMTU5LDE4IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IHJlcy0+c3RhcnQ7CisKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFtYm94X2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBEU1AgSVJRICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAodW5saWtlbHkoIXJlcykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOworCQlpb3VubWFwKG1ib3hfYmFzZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAltYm94X2RzcF9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKaW5kZXggNmJkZGNlMS4uZjlhNWNmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwpAQCAtOTksOSArOTksMTEgQEAKIAl9LAogfTsKICNkZWZpbmUgT01BUDdYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwN3h4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQN1hYX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19YQ0VSSCAvIHNpemVvZih1MTYpICsgMSkKICNlbHNlCiAjZGVmaW5lIG9tYXA3eHhfbWNic3BfcGRhdGEJCU5VTEwKICNkZWZpbmUgT01BUDdYWF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQN1hYX01DQlNQX1JFR19OVU0JCTAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKQEAgLTEzMiw5ICsxMzQsMTEgQEAKIAl9LAogfTsKICNkZWZpbmUgT01BUDE1WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDE1eHhfbWNic3BfcGRhdGEpCisjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19YQ0VSSCAvIHNpemVvZih1MTYpICsgMSkKICNlbHNlCiAjZGVmaW5lIG9tYXAxNXh4X21jYnNwX3BkYXRhCQlOVUxMCiAjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaCQkwCisjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1JFR19OVU0JCTAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKQEAgLTE2NSwxOSArMTY5LDI1IEBACiAJfSwKIH07CiAjZGVmaW5lIE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNnh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfWENFUkggLyBzaXplb2YodTE2KSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwMTZ4eF9tY2JzcF9wZGF0YQkJTlVMTAogI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAogaW50IF9faW5pdCBvbWFwMV9tY2JzcF9pbml0KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19vbWFwN3h4KCkpCisJaWYgKGNwdV9pc19vbWFwN3h4KCkpIHsKIAkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVA3WFhfTUNCU1BfUERBVEFfU1o7Ci0JaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQN1hYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTE2KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMTVYWF9NQ0JTUF9QREFUQV9TWjsKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAxNVhYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTE2KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMTZYWF9NQ0JTUF9QREFUQV9TWjsKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDE2WFhfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MTYpOworCX0KIAogCW1jYnNwX3B0ciA9IGt6YWxsb2Mob21hcF9tY2JzcF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCAqKSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCA2ZTUyMDdjLi4zNDlkZTkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQxX0JBU0UsCisJCS5tYXBiYXNlCT0gT01BUDFfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDEsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTcyLDcgKzcyLDcgQEAKIAkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LAogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQyX0JBU0UsCisJCS5tYXBiYXNlCT0gT01BUDFfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDIsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTgwLDcgKzgwLDcgQEAKIAkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LAogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQzX0JBU0UsCisJCS5tYXBiYXNlCT0gT01BUDFfVUFSVDNfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDMsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA2MDZiZjA0Li5hOGEzZDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC0xLDI4ICsxLDE5IEBACiBjb21tZW50ICJPTUFQIENvcmUgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAotY29uZmlnIEFSQ0hfT01BUDI0WFgKLQlib29sICJPTUFQMjR4eCBCYXNlZCBTeXN0ZW0iCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyCi0KIGNvbmZpZyBBUkNIX09NQVAyNDIwCiAJYm9vbCAiT01BUDI0MjAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAlzZWxlY3QgT01BUF9ETV9USU1FUgogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKIGNvbmZpZyBBUkNIX09NQVAyNDMwCiAJYm9vbCAiT01BUDI0MzAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKLQotY29uZmlnIEFSQ0hfT01BUDM0WFgKLQlib29sICJPTUFQMzR4eCBCYXNlZCBTeXN0ZW0iCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzCi0Jc2VsZWN0IFVTQl9BUkNIX0hBU19FSENJCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCiAKIGNvbmZpZyBBUkNIX09NQVAzNDMwCiAJYm9vbCAiT01BUDM0MzAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKIGNvbmZpZyBPTUFQX1BBQ0tBR0VfQ0JDCkBAIC0zOCwxMSArMjksMTEgQEAKICAgICAgICBib29sCiAKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CisJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwogCiBjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKIAlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAogY29uZmlnIE1BQ0hfT01BUDJfVFVTQjYwMTAKIAlib29sCkBAIC01MSw1NSArNDIsNTkgQEAKIAogY29uZmlnIE1BQ0hfT01BUF9INAogCWJvb2wgIk9NQVAgMjQyMCBINCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCXNlbGVjdCBPTUFQX0RFQlVHX0RFVklDRVMKIAogY29uZmlnIE1BQ0hfT01BUF9BUE9MTE9OCiAJYm9vbCAiT01BUCAyNDIwIEFwb2xsb24gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAogY29uZmlnIE1BQ0hfT01BUF8yNDMwU0RQCiAJYm9vbCAiT01BUCAyNDMwIFNEUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCiBjb25maWcgTUFDSF9PTUFQM19CRUFHTEUKIAlib29sICJPTUFQMyBCRUFHTEUgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCitjb25maWcgTUFDSF9ERVZLSVQ4MDAwCisgICAgICAgIGJvb2wgIkRFVktJVDgwMDAgYm9hcmQiCisgICAgICAgIGRlcGVuZHMgb24gQVJDSF9PTUFQMworCiBjb25maWcgTUFDSF9PTUFQX0xEUAogCWJvb2wgIk9NQVAzIExEUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09WRVJPCiAJYm9vbCAiR3Vtc3RpeCBPdmVybyBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVAzRVZNCiAJYm9vbCAiT01BUCAzNTMwIEVWTSBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVAzNTE3RVZNCiAJYm9vbCAiT01BUDM1MTcvIEFNMzUxNyBFVk0gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQM19QQU5ET1JBCiAJYm9vbCAiT01BUDMgUGFuZG9yYSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVAzX1RPVUNIQk9PSwogCWJvb2wgIk9NQVAzIFRvdWNoIEJvb2siCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCiBjb25maWcgTUFDSF9PTUFQXzM0MzBTRFAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfTk9LSUFfTjgwMApAQCAtMTIwLDMzICsxMTUsMzMgQEAKIAogY29uZmlnIE1BQ0hfTk9LSUFfUlg1MQogCWJvb2wgIk5va2lhIFJYLTUxIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUF9aT09NMgogCWJvb2wgIk9NQVAzIFpvb20yIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUF9aT09NMwogCWJvb2wgIk9NQVAzNjMwIFpvb20zIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlAKIAogY29uZmlnIE1BQ0hfQ01fVDM1CiAJYm9vbCAiQ29tcHVMYWIgQ00tVDM1IG1vZHVsZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ1VTCiAJc2VsZWN0IE9NQVBfTVVYCiAKIGNvbmZpZyBNQUNIX0lHRVAwMDIwCi0JYm9vbCAiSUdFUDAwMjAiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlib29sICJJR0VQIHYyIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVBfMzYzMFNEUAogCWJvb2wgIk9NQVAzNjMwIFNEUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JQCiAKIGNvbmZpZyBNQUNIX09NQVBfNDQzMFNEUApAQCAtMTYyLDcgKzE1Nyw3IEBACiAKIGNvbmZpZyBPTUFQM19TRFJDX0FDX1RJTUlORwogCWJvb2wgIkVuYWJsZSBTRFJDIEFDIHRpbWluZyByZWdpc3RlciBjaGFuZ2VzIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSWYgeW91IGtub3cgdGhhdCBub25lIG9mIHlvdXIgc3lzdGVtIGluaXRpYXRvcnMgd2lsbCBhdHRlbXB0IHRvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCBiMzI2NzhiLi4yMDY5ZmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTUsMTUgKzUsMTcgQEAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlkLm8gaW8ubyBjb250cm9sLm8gbXV4Lm8gZGV2aWNlcy5vIHNlcmlhbC5vIGdwbWMubyB0aW1lci1ncC5vCiAKLW9tYXAtMi0zLWNvbW1vbgkJCQk9IGlycS5vIHNkcmMubyBvbWFwX2h3bW9kLm8KLW9tYXAtMy00LWNvbW1vbgkJCQk9IGRwbGwubworb21hcC0yLTMtY29tbW9uCQkJCT0gaXJxLm8gc2RyYy5vCitod21vZC1jb21tb24JCQkJPSBvbWFwX2h3bW9kLm8gXAorCQkJCQkgIG9tYXBfaHdtb2RfY29tbW9uX2RhdGEubwogcHJjbS1jb21tb24JCQkJPSBwcmNtLm8gcG93ZXJkb21haW4ubwotY2xvY2stY29tbW9uCQkJCT0gY2xvY2subyBjbG9ja19jb21tb25fZGF0YS5vIGNsb2NrZG9tYWluLm8KK2Nsb2NrLWNvbW1vbgkJCQk9IGNsb2NrLm8gY2xvY2tfY29tbW9uX2RhdGEubyBcCisJCQkJCSAgY2xvY2tkb21haW4ubyBjbGt0X2RwbGwubyBcCisJCQkJCSAgY2xrdF9jbGtzZWwubwogCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikgKz0gJChvbWFwLTItMy1jb21tb24pICQocHJjbS1jb21tb24pICQoY2xvY2stY29tbW9uKQotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGNsb2NrLWNvbW1vbikgXAotCQkJICAgICQob21hcC0zLTQtY29tbW9uKQotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpICs9ICQob21hcC0zLTQtY29tbW9uKSBwcmNtLm8gY2xvY2subworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGh3bW9kLWNvbW1vbikKK29iai0kKENPTkZJR19BUkNIX09NQVAzKSArPSAkKG9tYXAtMi0zLWNvbW1vbikgJChwcmNtLWNvbW1vbikgJChod21vZC1jb21tb24pCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkgKz0gJChwcmNtLWNvbW1vbikKIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KIApAQCAtMjYsNiArMjgsMTAgQEAKIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gc3JhbTI0M3gubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzcmFtMzR4eC5vCiAKK0FGTEFHU19zcmFtMjQyeC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2CitBRkxBR1Nfc3JhbTI0M3gubwkJCTo9LVdhLC1tYXJjaD1hcm12NgorQUZMQUdTX3NyYW0zNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQorCiAjIFBpbiBtdWx0aXBsZXhpbmcKIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gbXV4MzR4eC5vCiAKQEAgLTM2LDkgKzQyLDEzIEBACiAjIFBvd2VyIE1hbmFnZW1lbnQKIGlmZXEgKCQoQ09ORklHX1BNKSx5KQogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwbTI0eHgubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCQkrPSBzbGVlcDI0eHgubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzbGVlcDI0eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwbTM0eHgubyBzbGVlcDM0eHgubyBjcHVpZGxlMzR4eC5vCiBvYmotJChDT05GSUdfUE1fREVCVUcpCQkJKz0gcG0tZGVidWcubworCitBRkxBR1Nfc2xlZXAyNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjYKK0FGTEFHU19zbGVlcDM0eHgubwkJCTo9LVdhLC1tYXJjaD1hcm12Ny1hCisKIGVuZGlmCiAKICMgUFJDTQpAQCAtNDcsMTQgKzU3LDMxIEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IGNtNHh4eC5vCiAKICMgQ2xvY2sgZnJhbWV3b3JrCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrMnh4eC5vIGNsb2NrMnh4eF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gJChjbG9jay1jb21tb24pIGNsb2NrMnh4eC5vIFwKKwkJCQkJICAgY2xrdDJ4eHhfc3lzLm8gXAorCQkJCQkgICBjbGt0Mnh4eF9kcGxsY29yZS5vIFwKKwkJCQkJICAgY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5vIFwKKwkJCQkJICAgY2xrdDJ4eHhfYXBsbC5vIGNsa3QyeHh4X29zYy5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IGNsb2NrMjQyMF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gY2xvY2syNDMwLm8gY2xvY2syNDMwX2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSAkKGNsb2NrLWNvbW1vbikgY2xvY2szeHh4Lm8gXAorCQkJCQkgICBjbG9jazM0eHgubyBjbGt0MzR4eF9kcGxsM20yLm8gXAorCQkJCQkgICBjbG9jazM1MTcubyBjbG9jazM2eHgubyBcCisJCQkJCSAgIGRwbGwzeHh4Lm8gY2xvY2szeHh4X2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSAkKGNsb2NrLWNvbW1vbikgY2xvY2s0NHh4X2RhdGEubyBcCisJCQkJCSAgIGRwbGwzeHh4Lm8KKworIyBPTUFQMiBjbG9jayByYXRlIHNldCBkYXRhIChvbGQgIk9QUCIgZGF0YSkKIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gb3BwMjQyMF9kYXRhLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gY2xvY2szNHh4Lm8gY2xvY2szNHh4X2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBvcHAyNDMwX2RhdGEubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBjbG9jazQ0eHgubyBjbG9jazQ0eHhfZGF0YS5vCisKKyMgaHdtb2QgZGF0YQorb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MjApCQkrPSBvbWFwX2h3bW9kXzI0MjBfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IG9tYXBfaHdtb2RfMjQzMF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gb21hcF9od21vZF8zeHh4X2RhdGEubwogCiAjIEVNVSBwZXJpcGhlcmFscwotb2JqLSQoQ09ORklHX09NQVAzX0VNVSkJCSs9IGVtdS5vCitvYmotJChDT05GSUdfT01BUDNfRU1VKQkJCSs9IGVtdS5vCiAKIG9iai0kKENPTkZJR19PTUFQX01CT1hfRldLKQkJKz0gbWFpbGJveF9tYWNoLm8KIG1haWxib3hfbWFjaC1vYmpzCQkJOj0gbWFpbGJveC5vCkBAIC03MSw0NSArOTgsNDggQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9INCkJCSs9IGJvYXJkLWg0Lm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCkJCSs9IGJvYXJkLTI0MzBzZHAubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OKQkJKz0gYm9hcmQtYXBvbGxvbi5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUpCQkrPSBib2FyZC1vbWFwM2JlYWdsZS5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCitvYmotJChDT05GSUdfTUFDSF9ERVZLSVQ4MDAwKSAgICAgCSs9IGJvYXJkLWRldmtpdDgwMDAubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9MRFApCQkrPSBib2FyZC1sZHAubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT1ZFUk8pCQkrPSBib2FyZC1vdmVyby5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQM0VWTSkJCSs9IGJvYXJkLW9tYXAzZXZtLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEpCSs9IGJvYXJkLW9tYXAzcGFuZG9yYS5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFApCQkrPSBib2FyZC0zNDMwc2RwLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8gXAorCQkJCQkgICBib2FyZC1zZHAtZmxhc2gubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfTjhYMCkJCSs9IGJvYXJkLW44eDAubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUlg1MSkJCSs9IGJvYXJkLXJ4NTEubyBcCiAJCQkJCSAgIGJvYXJkLXJ4NTEtc2RyYW0ubyBcCiAJCQkJCSAgIGJvYXJkLXJ4NTEtcGVyaXBoZXJhbHMubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9aT09NMikJCSs9IGJvYXJkLXpvb20yLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vIFwKKwkJCQkJICAgaHNtbWMubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tZGVidWdib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX1pPT00zKQkJKz0gYm9hcmQtem9vbTMubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tcGVyaXBoZXJhbHMubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8gXAorCQkJCQkgICBoc21tYy5vIFwKIAkJCQkJICAgYm9hcmQtem9vbS1kZWJ1Z2JvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCkJCSs9IGJvYXJkLTM2MzBzZHAubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tcGVyaXBoZXJhbHMubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfQ01fVDM1KQkJKz0gYm9hcmQtY20tdDM1Lm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX0lHRVAwMDIwKQkJKz0gYm9hcmQtaWdlcDAwMjAubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LKQkrPSBib2FyZC1vbWFwM3RvdWNoYm9vay5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzQ0MzBTRFApCQkrPSBib2FyZC00NDMwc2RwLm8KIAotb2JqLSQoQ09ORklHX01BQ0hfT01BUDM1MTdFVk0pICAgICArPSBib2FyZC1hbTM1MTdldm0ubworb2JqLSQoQ09ORklHX01BQ0hfT01BUDM1MTdFVk0pCQkrPSBib2FyZC1hbTM1MTdldm0ubwogCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKIG9iai15CQkJCQkrPSB1c2ItbXVzYi5vCkBAIC0xMTksNSArMTQ5LDggQEAKIG9uZW5hbmQtJChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpCTo9IGdwbWMtb25lbmFuZC5vCiBvYmoteQkJCQkJKz0gJChvbmVuYW5kLW0pICQob25lbmFuZC15KQogCituYW5kLSQoQ09ORklHX01URF9OQU5EX09NQVAyKQkJOj0gZ3BtYy1uYW5kLm8KK29iai15CQkJCQkrPSAkKG5hbmQtbSkgJChuYW5kLXkpCisKIHNtYzkxeC0kKENPTkZJR19TTUM5MVgpCQkJOj0gZ3BtYy1zbWM5MXgubwogb2JqLXkJCQkJCSs9ICQoc21jOTF4LW0pICQoc21jOTF4LXkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGU1MDg5MDQuLjAxZDExM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTI4LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBTRFAyNDMwX0NTMF9CQVNFCTB4MDQwMDAwMDAKICNkZWZpbmUgU0VDT05EQVJZX0xDRF9HUElPCQkxNDcKQEAgLTc0LDggKzc0LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgc2RwMjQzMF9mbGFzaF9kYXRhID0gewotCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2RwMjQzMF9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAogCS5wYXJ0cwkJPSBzZHAyNDMwX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzZHAyNDMwX3BhcnRpdGlvbnMpLApAQCAtODgsNyArODcsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMjQzMF9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnNkcDI0MzBfZmxhc2hfZGF0YSwKQEAgLTE4Myw3ICsxODIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdIF9faW5pdGRhdGEgPSB7CiAJewogCQkubW1jCQk9IDEsCiAJCS53aXJlcwkJPSA0LApAQCAtMTk0LDYgKzE5MywxMiBAQAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0yMDIsOCArMjA3LDggQEAKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDI0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAyNDMwX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdHdsNDAzMF9tbWNfaW5pdChtbWMpOwotCXVzYl9tdXNiX2luaXQoKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAlib2FyZF9zbWM5MXhfaW5pdCgpOwogCiAJLyogVHVybiBvZmYgc2Vjb25kYXJ5IExDRCBiYWNrbGlnaHQgKi8KQEAgLTIxNSw3ICsyMjAsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMjQzMHNkcF9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18yNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAyNDN4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQXzI0MzBTRFAsICJPTUFQMjQzMCBzZHAyNDMwIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggYzkwYjBkMC4uYTEwMTAyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTQxLDkgKzQxLDEyIEBACiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtYzkxeC5oPgogCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1zZHAuaD4KKwogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKKyNpbmNsdWRlICJwbS5oIgogCiAjZGVmaW5lIENPTkZJR19ESVNBQkxFX0hGQ0xLIDEKIApAQCAtNTUsNiArNTgsMjQgQEAKIAogI2RlZmluZSBUV0w0MDMwX01TRUNVUkVfR1BJTyAyMgogCisvKiBGSVhNRTogVGhlc2UgdmFsdWVzIG5lZWQgdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBtb3JlIHByb2ZpbGluZyBvbiAzNDMwc2RwKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9wYXJhbXMgb21hcDNfY3B1aWRsZV9wYXJhbXNfdGFibGVbXSA9IHsKKwkvKiBDMSAqLworCXsxLCAyLCAyLCA1fSwKKwkvKiBDMiAqLworCXsxLCAxMCwgMTAsIDMwfSwKKwkvKiBDMyAqLworCXsxLCA1MCwgNTAsIDMwMH0sCisJLyogQzQgKi8KKwl7MSwgMTUwMCwgMTgwMCwgNDAwMH0sCisJLyogQzUgKi8KKwl7MSwgMjUwMCwgNzUwMCwgMTIwMDB9LAorCS8qIEM2ICovCisJezEsIDMwMDAsIDg1MDAsIDE1MDAwfSwKKwkvKiBDNyAqLworCXsxLCAxMDAwMCwgMzAwMDAsIDMwMDAwMH0sCit9OworCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCkBAIC0zMDUsNiArMzI2LDcgQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDM0MzBfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDM0MzBfY29uZmlnKTsKKwlvbWFwM19wbV9pbml0X2NwdWlkbGUob21hcDNfY3B1aWRsZV9wYXJhbXNfdGFibGUpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KGh5YjE4bTUxMjE2MGFmNl9zZHJjX3BhcmFtcywgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CkBAIC0zMjYsNyArMzQ4LDcgQEAKIAkudGJsc2l6ZQkJPSBBUlJBWV9TSVpFKHNkcDM0MzBfYmF0dF90YWJsZSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKIAkJLyogOCBiaXRzIChkZWZhdWx0KSByZXF1aXJlcyBTNi4zID09IE9OLApAQCAtMzYzLDcgKzM4NSw3IEBACiAJICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKIAltbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzIC4uLiB3ZSAia25vdyIgdGhlCiAJICogcmVndWxhdG9ycyB3aWxsIGJlIHNldCB1cCBvbmx5ICphZnRlciogd2UgcmV0dXJuLgpAQCAtNTIwLDEwICs1NDIsNiBAQAogLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdnBsbDJfc3VwcGxpZXNbXSA9IHsKIAl7Ci0JCS5zdXBwbHkJCT0gInZkdmkiLAotCQkuZGV2CQk9ICZzZHAzNDMwX2xjZF9kZXZpY2UuZGV2LAotCX0sCi0JewogCQkuc3VwcGx5CQk9ICJ2ZGRzX2RzaSIsCiAJCS5kZXYJCT0gJnNkcDM0MzBfZHNzX2RldmljZS5kZXYsCiAJfQpAQCAtNjUwLDYgKzY2OCwxMjAgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX25vcl9wYXJ0aXRpb25zW10gPSB7CisJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLworCXsKKwkJLm5hbWUJCT0gIkJvb3Rsb2FkZXItTk9SIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl8yNTZLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCisJeworCQkubmFtZQkJPSAiUGFyYW1zLU5PUiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8yNTZLLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBrZXJuZWwgKi8KKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwtTk9SIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNLAorCQkubWFza19mbGFncwk9IDAKKwl9LAorCS8qIGZpbGUgc3lzdGVtICovCisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbS1OT1IiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9vbmVuYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJYLUxvYWRlci1PbmVOQU5EIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QtT25lTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAyICogKDY0ICogMjA0OCksCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QgRW52aXJvbm1lbnQtT25lTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAxICogKDY0ICogMjA0OCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwtT25lTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAxNiAqICg2NCAqIDIwNDgpLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0tT25lTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX25hbmRfcGFydGl0aW9uc1tdID0geworCS8qIEFsbCB0aGUgcGFydGl0aW9uIHNpemVzIGFyZSBsaXN0ZWQgaW4gdGVybXMgb2YgTkFORCBibG9jayBzaXplICovCisJeworCQkubmFtZQkJPSAiWC1Mb2FkZXItTkFORCIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gNCAqICg2NCAqIDIwNDgpLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290LU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg4MDAwMCAqLworCQkuc2l6ZQkJPSAxMCAqICg2NCAqIDIwNDgpLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiQm9vdCBFbnYtTkFORCIsCisKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MWMwMDAwICovCisJCS5zaXplCQk9IDYgKiAoNjQgKiAyMDQ4KSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIktlcm5lbC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjgwMDAwICovCisJCS5zaXplCQk9IDQwICogKDY0ICogMjA0OCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSAtIE5BTkQiLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg3ODAwMDAgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkucGFydHMgPSBzZHBfbm9yX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX25vcl9wYXJ0aXRpb25zKSwKKwl9LAorCXsKKwkJLnBhcnRzID0gc2RwX29uZW5hbmRfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfb25lbmFuZF9wYXJ0aXRpb25zKSwKKwl9LAorCXsKKwkJLnBhcnRzID0gc2RwX25hbmRfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfbmFuZF9wYXJ0aXRpb25zKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9pbml0KHZvaWQpCiB7CiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKQEAgLTY2NCw4ICs3OTYsOSBAQAogCQkJCUFSUkFZX1NJWkUoc2RwMzQzMF9zcGlfYm9hcmRfaW5mbykpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJYm9hcmRfc21jOTF4X2luaXQoKTsKKwlzZHBfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucyk7CiAJc2RwMzQzMF9kaXNwbGF5X2luaXQoKTsKIAllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwpAQCAtNjc0LDcgKzgwNyw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfMzQzMFNEUCwgIk9NQVAzNDMwIDM0MzBTRFAgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYwppbmRleCA3MzkwNTk2Li40Mzg2ZDJiIDEwMDc1NQotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYwpAQCAtNjgsOCArNjgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zZHBfbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNnh4KCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBzZHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggMGM2YmU2Yi4uMTgwYWMxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI3LDcgKzI4LDkgQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZXItZ3AuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHA0NDMwX2xjZF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNkcDQ0MzBfbGNkIiwKQEAgLTM4LDEwICs0MSw2IEBACiAJJnNkcDQ0MzBfbGNkX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBzZHA0NDMwX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLmVuYWJsZWRfdWFydHMJPSAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHNkcDQ0MzBfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKQEAgLTUwLDYgKzQ5LDU5IEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmc2RwNDQzMF9sY2RfY29uZmlnIH0sCiB9OwogCisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKK25vaW5saW5lIHZvaWQgb21hcF9zbWMxKHUzMiBmbiwgdTMyIGFyZykKK3sKKwlyZWdpc3RlciB1MzIgcjEyIGFzbSgicjEyIikgPSBmbjsKKwlyZWdpc3RlciB1MzIgcjAgYXNtKCJyMCIpID0gYXJnOworCisJLyogVGhpcyBpcyBjb21tb24gcm91dGluZSBjYWNoZSBzZWN1cmUgbW9uaXRvciBBUEkgdXNlZCB0bworCSAqIG1vZGlmeSB0aGUgUEwzMTAgc2VjdXJlIHJlZ2lzdGVycy4KKwkgKiByMCBjb250YWlucyB0aGUgdmFsdWUgdG8gYmUgbW9kaWZpZWQgYW5kICJyMTIiIGNvbnRhaW5zCisJICogdGhlIG1vbml0b3IgQVBJIG51bWJlci4gSXQgdXNlcyBmZXcgQ1BVIHJlZ2lzdGVycworCSAqIGludGVybmFsbHkgYW5kIGhlbmNlIHRoZXkgbmVlZCBiZSBiYWNrZWQgdXAgaW5jbHVkaW5nCisJICogbGluayByZWdpc3RlciAibHIiLgorCSAqIEV4cGxpY2l0bHkgc2F2ZSByMTEgYW5kIHIxMiB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUKKwkgKiB3b24ndCBzYXZlIGl0LgorCSAqLworCWFzbSB2b2xhdGlsZSgKKwkJInN0bWZkIHIxMyEsIHtyMTEscjEyfVxuIgorCQkiZHNiXG4iCisJCSJzbWNcbiIKKwkJImxkbWZkIHIxMyEsIHtyMTEscjEyfVxuIgorCQk6ICIrciIgKHIwKSwgIityIiAocjEyKQorCQk6CisJCTogInI0IiwgInI1IiwgInIxMCIsICJsciIsICJjYyIpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3NtYzEpOworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2wyX2NhY2hlX2luaXQodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmwyY2FjaGVfYmFzZTsKKworCS8qIFRvIGF2b2lkIGNvZGUgcnVubmluZyBvbiBvdGhlciBPTUFQcyBpbgorCSAqIG11bHRpLW9tYXAgYnVpbGRzCisJICovCisJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KKwlsMmNhY2hlX2Jhc2UgPSBpb3JlbWFwKE9NQVA0NFhYX0wyQ0FDSEVfQkFTRSwgU1pfNEspOworCUJVR19PTighbDJjYWNoZV9iYXNlKTsKKworCS8qIEVuYWJsZSBQTDMxMCBMMiBDYWNoZSBjb250cm9sbGVyICovCisJb21hcF9zbWMxKDB4MTAyLCAweDEpOworCisJLyogMzJLQiB3YXkgc2l6ZSwgMTYtd2F5IGFzc29jaWF0aXZpdHksCisJKiBwYXJpdHkgZGlzYWJsZWQKKwkqLworCWwyeDBfaW5pdChsMmNhY2hlX2Jhc2UsIDB4MGUwNTAwMDAsIDB4YzAwMDBmZmYpOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9pbml0Y2FsbChvbWFwX2wyX2NhY2hlX2luaXQpOworI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC03NywxNyArMTI5LDI3IEBACiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VUTUksCisJLm1vZGUJCQk9IE1VU0JfUEVSSVBIRVJBTCwKKwkucG93ZXIJCQk9IDEwMCwKK307CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJLyogT01BUDQgU0RQIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCisJdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOworCS8qIEZJWE1FOiBhbGxvdyBtdWx0aS1vbWFwIHRvIGJvb3QgdW50aWwgbXVzYiBpcyB1cGRhdGVkIGZvciBvbWFwNCAqLworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfNDQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwNDR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF80NDMwU0RQLCAiT01BUDQ0MzAgNDQzMFNEUCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwppbmRleCBiNGU2ZWNhLi43MGMxODYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKQEAgLTIwLDggKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvYW0zNXh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yOSw5ICszMSwyMjggQEAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAKKyNkZWZpbmUgTENEX1BBTkVMX1BXUgkJMTc2CisjZGVmaW5lIExDRF9QQU5FTF9CS0xJR0hUX1BXUgkxODIKKyNkZWZpbmUgTENEX1BBTkVMX1BXTQkJMTgxCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhbTM1MTdldm1faTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInMzNTM5MGEiLCAweDMwKSwKKwkJLnR5cGUJCT0gInMzNTM5MGEiLAorCX0sCit9OworCisvKgorICogUlRDIC0gUzM1MzkwQQorICovCisjZGVmaW5lIEdQSU9fUlRDUzM1MzkwQV9JUlEJNTUKKworc3RhdGljIHZvaWQgX19pbml0IGFtMzUxN19ldm1fcnRjX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCW9tYXBfbXV4X2luaXRfZ3BpbyhHUElPX1JUQ1MzNTM5MEFfSVJRLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCXIgPSBncGlvX3JlcXVlc3QoR1BJT19SVENTMzUzOTBBX0lSUSwgInJ0Y3MzNTM5MGEtaXJxIik7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZhaWxlZCB0byByZXF1ZXN0IEdQSU8jJWRcbiIsCisJCQkJR1BJT19SVENTMzUzOTBBX0lSUSk7CisJCXJldHVybjsKKwl9CisJciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUlRDUzM1MzkwQV9JUlEpOworCWlmIChyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJHUElPIyVkIGNhbm5vdCBiZSBjb25maWd1cmVkIGFzIGlucHV0XG4iLAorCQkJCUdQSU9fUlRDUzM1MzkwQV9JUlEpOworCQlncGlvX2ZyZWUoR1BJT19SVENTMzUzOTBBX0lSUSk7CisJCXJldHVybjsKKwl9CisJYW0zNTE3ZXZtX2kyY19ib2FyZGluZm9bMF0uaXJxID0gZ3Bpb190b19pcnEoR1BJT19SVENTMzUzOTBBX0lSUSk7Cit9CisKKy8qCisgKiBJMkMgR1BJTyBFeHBhbmRlciAtIFRDQTY0MTYKKyAqLworCisvKiBNb3VudGVkIG9uIEJhc2UtQm9hcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFtMzUxN2V2bV9ncGlvX2V4cGFuZGVyX2luZm9fMCA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKK307CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYW0zNTE3ZXZtX3RjYTY0MTZfaW5mb18wW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidGNhNjQxNiIsIDB4MjEpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhbTM1MTdldm1fZ3Bpb19leHBhbmRlcl9pbmZvXzAsCisJfSwKK307CisKKy8qIE1vdW50ZWQgb24gVUkgQ2FyZCAqLworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18xID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTICsgMTYsCit9Oworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18yID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTICsgMzIsCit9Oworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFtMzUxN2V2bV91aV90Y2E2NDE2X2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0Y2E2NDE2IiwgMHgyMCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFtMzUxN2V2bV91aV9ncGlvX2V4cGFuZGVyX2luZm9fMSwKKwl9LAorCXsKKwkJSTJDX0JPQVJEX0lORk8oInRjYTY0MTYiLCAweDIxKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18yLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbTM1MTdfZXZtX2kyY19pbml0KHZvaWQpCit7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgYW0zNTE3ZXZtX3RjYTY0MTZfaW5mb18wLAorCQkJQVJSQVlfU0laRShhbTM1MTdldm1fdGNhNjQxNl9pbmZvXzApKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBhbTM1MTdldm1fdWlfdGNhNjQxNl9pbmZvLAorCQkJQVJSQVlfU0laRShhbTM1MTdldm1fdWlfdGNhNjQxNl9pbmZvKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsY2RfZW5hYmxlZDsKK3N0YXRpYyBpbnQgZHZpX2VuYWJsZWQ7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWludCByOworCisJb21hcF9tdXhfaW5pdF9ncGlvKExDRF9QQU5FTF9QV1IsIE9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJb21hcF9tdXhfaW5pdF9ncGlvKExDRF9QQU5FTF9CS0xJR0hUX1BXUiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCW9tYXBfbXV4X2luaXRfZ3BpbyhMQ0RfUEFORUxfUFdNLCBPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJLyoKKwkgKiBFbmFibGUgR1BJTyAxODIgPSBMQ0QgQmFja2xpZ2h0IFBvd2VyCisJICovCisJciA9IGdwaW9fcmVxdWVzdChMQ0RfUEFORUxfQktMSUdIVF9QV1IsICJsY2RfYmFja2xpZ2h0X3B3ciIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfYmFja2xpZ2h0X3B3clxuIik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9CS0xJR0hUX1BXUiwgMSk7CisJLyoKKwkgKiBFbmFibGUgR1BJTyAxODEgPSBMQ0QgUGFuZWwgUFdNCisJICovCisJciA9IGdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUFdNLCAibGNkX3B3bSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcHdtXG4iKTsKKwkJZ290byBlcnJfMTsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9QV00sIDEpOworCS8qCisJICogRW5hYmxlIEdQSU8gMTc2ID0gTENEIFBhbmVsIFBvd2VyIGVuYWJsZSBwaW4KKwkgKi8KKwlyID0gZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9QV1IsICJsY2RfcGFuZWxfcHdyIik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGxjZF9wYW5lbF9wd3JcbiIpOworCQlnb3RvIGVycl8yOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1BXUiwgMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJEaXNwbGF5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuOworCitlcnJfMjoKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1BXTSk7CitlcnJfMToKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0JLTElHSFRfUFdSKTsKK30KKworc3RhdGljIGludCBhbTM1MTdfZXZtX3BhbmVsX2VuYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkdmlfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgTENELCBEVkkgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfUFdSLCAxKTsKKwlsY2RfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX1BXUiwgMCk7CisJbGNkX2VuYWJsZWQgPSAwOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBhbTM1MTdfZXZtX2xjZF9kZXZpY2UgPSB7CisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJzaGFycF9scV9wYW5lbCIsCisJLnBoeS5kcGkuZGF0YV9saW5lcyAJPSAxNiwKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2xjZCwKK307CisKK3N0YXRpYyBpbnQgYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBhbTM1MTdfZXZtX3R2X2RldmljZSA9IHsKKwkudHlwZSAJCQk9IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMsCisJLm5hbWUgCQkJPSAidHYiLAorCS5kcml2ZXJfbmFtZQkJPSAidmVuYyIsCisJLnBoeS52ZW5jLnR5cGUJCT0gT01BUF9EU1NfVkVOQ19UWVBFX1NWSURFTywKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfdHYsCit9OworCitzdGF0aWMgaW50IGFtMzUxN19ldm1fcGFuZWxfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaWYgKGxjZF9lbmFibGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGVuYWJsZSBEVkksIExDRCBpcyBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWR2aV9lbmFibGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlkdmlfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGFtMzUxN19ldm1fZHZpX2RldmljZSA9IHsKKwkudHlwZQkJCT0gT01BUF9ESVNQTEFZX1RZUEVfRFBJLAorCS5uYW1lCQkJPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUJCT0gImdlbmVyaWNfcGFuZWwiLAorCS5waHkuZHBpLmRhdGFfbGluZXMJPSAyNCwKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICphbTM1MTdfZXZtX2Rzc19kZXZpY2VzW10gPSB7CisJJmFtMzUxN19ldm1fbGNkX2RldmljZSwKKwkmYW0zNTE3X2V2bV90dl9kZXZpY2UsCisJJmFtMzUxN19ldm1fZHZpX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBhbTM1MTdfZXZtX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUoYW0zNTE3X2V2bV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBhbTM1MTdfZXZtX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZQk9ICZhbTM1MTdfZXZtX2xjZF9kZXZpY2UsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtMzUxN19ldm1fZHNzX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGRzcyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhbTM1MTdfZXZtX2Rzc19kYXRhLAorCX0sCit9OworCiAvKgogICogQm9hcmQgaW5pdGlhbGl6YXRpb24KICAqLwpAQCAtMzksNiArMjYwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphbTM1MTdfZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZhbTM1MTdfZXZtX2Rzc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW0zNTE3X2V2bV9pbml0X2lycSh2b2lkKQpAQCAtNzIsMTggKzI5NCwzMSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW0zNTE3X2V2bV9pbml0KHZvaWQpCiB7CisJYW0zNTE3X2V2bV9pMmNfaW5pdCgpOworCiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhbTM1MTdfZXZtX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShhbTM1MTdfZXZtX2RldmljZXMpKTsKIAogCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCS8qIENvbmZpZ3VyZSBHUElPIGZvciBFSENJIHBvcnQgKi8KKwlvbWFwX211eF9pbml0X2dwaW8oNTcsIE9NQVBfUElOX09VVFBVVCk7CiAJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CisJLyogRFNTICovCisJYW0zNTE3X2V2bV9kaXNwbGF5X2luaXQoKTsKKworCS8qIFJUQyAtIFMzNTM5MEEgKi8KKwlhbTM1MTdfZXZtX3J0Y19pbml0KCk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBhbTM1MTdldm1faTJjX2JvYXJkaW5mbywKKwkJCQlBUlJBWV9TSVpFKGFtMzUxN2V2bV9pMmNfYm9hcmRpbmZvKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVAzNTE3RVZNLCAiT01BUDM1MTcvQU0zNTE3IEVWTSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IGZiYmQ2OGQuLmFhNjlmYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25fbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMjQyeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMjQyeF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9BUE9MTE9OLCAiT01BUDI0eHggQXBvbGxvbiIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCAyNjI2YTlmLi5hZmE3N2NhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvdGRvMjRtLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTQxLDEyICs0NCwxMyBAQAogI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgQ01fVDM1X0dQSU9fUEVORE9XTgk1NwogCkBAIC0yNDgsNyArMjUyLDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KQEAgLTMwNCw2ICszMDcsMTkzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY21fdDM1X2luaXRfYWRzNzg0Nih2b2lkKSB7fQogI2VuZGlmCiAKKyNkZWZpbmUgQ01fVDM1X0xDRF9FTl9HUElPIDE1NworI2RlZmluZSBDTV9UMzVfTENEX0JMX0dQSU8gNTgKKyNkZWZpbmUgQ01fVDM1X0RWSV9FTl9HUElPIDU0CisKK3N0YXRpYyBpbnQgbGNkX2JsX2dwaW87CitzdGF0aWMgaW50IGxjZF9lbl9ncGlvOworc3RhdGljIGludCBkdmlfZW5fZ3BpbzsKKworc3RhdGljIGludCBsY2RfZW5hYmxlZDsKK3N0YXRpYyBpbnQgZHZpX2VuYWJsZWQ7CisKK3N0YXRpYyBpbnQgY21fdDM1X3BhbmVsX2VuYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkdmlfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgTENELCBEVkkgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWdwaW9fc2V0X3ZhbHVlKGxjZF9lbl9ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfZ3BpbywgMSk7CisKKwlsY2RfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21fdDM1X3BhbmVsX2Rpc2FibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlsY2RfZW5hYmxlZCA9IDA7CisKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfZ3BpbywgMCk7CisJZ3Bpb19zZXRfdmFsdWUobGNkX2VuX2dwaW8sIDApOworfQorCitzdGF0aWMgaW50IGNtX3QzNV9wYW5lbF9lbmFibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAobGNkX2VuYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZW5hYmxlIERWSSwgTENEIGlzIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncGlvX3NldF92YWx1ZShkdmlfZW5fZ3BpbywgMCk7CisJZHZpX2VuYWJsZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtX3QzNV9wYW5lbF9kaXNhYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoZHZpX2VuX2dwaW8sIDEpOworCWR2aV9lbmFibGVkID0gMDsKK30KKworc3RhdGljIGludCBjbV90MzVfcGFuZWxfZW5hYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21fdDM1X3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBjbV90MzVfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJ0b3Bwb2x5X3RkbzM1c19wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMTgsCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gY21fdDM1X3BhbmVsX2Rpc2FibGVfbGNkLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgY21fdDM1X2R2aV9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJkdmkiLAorCS5kcml2ZXJfbmFtZQkJPSAiZ2VuZXJpY19wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMjQsCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gY21fdDM1X3BhbmVsX2Rpc2FibGVfZHZpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgY21fdDM1X3R2X2RldmljZSA9IHsKKwkubmFtZQkJCT0gInR2IiwKKwkuZHJpdmVyX25hbWUJCT0gInZlbmMiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DLAorCS5waHkudmVuYy50eXBlCQk9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBjbV90MzVfcGFuZWxfZGlzYWJsZV90diwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpjbV90MzVfZHNzX2RldmljZXNbXSA9IHsKKwkmY21fdDM1X2xjZF9kZXZpY2UsCisJJmNtX3QzNV9kdmlfZGV2aWNlLAorCSZjbV90MzVfdHZfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIGNtX3QzNV9kc3NfZGF0YSA9IHsKKwkubnVtX2RldmljZXMJPSBBUlJBWV9TSVpFKGNtX3QzNV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBjbV90MzVfZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJmNtX3QzNV9kdmlfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY21fdDM1X2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY21fdDM1X2Rzc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgdGRvMjRtX21jc3BpX2NvbmZpZyA9IHsKKwkudHVyYm9fbW9kZQk9IDAsCisJLnNpbmdsZV9jaGFubmVsCT0gMSwJLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLworfTsKKworc3RhdGljIHN0cnVjdCB0ZG8yNG1fcGxhdGZvcm1fZGF0YSB0ZG8yNG1fY29uZmlnID0geworCS5tb2RlbCA9IFRETzM1UywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY21fdDM1X2xjZF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJCT0gInRkbzI0bSIsCisJCS5idXNfbnVtCQk9IDQsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDEwMDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmdGRvMjRtX21jc3BpX2NvbmZpZywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnRkbzI0bV9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdF9kaXNwbGF5KHZvaWQpCit7CisJaW50IGVycjsKKworCWxjZF9lbl9ncGlvID0gQ01fVDM1X0xDRF9FTl9HUElPOworCWxjZF9ibF9ncGlvID0gQ01fVDM1X0xDRF9CTF9HUElPOworCWR2aV9lbl9ncGlvID0gQ01fVDM1X0RWSV9FTl9HUElPOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oY21fdDM1X2xjZF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGNtX3QzNV9sY2Rfc3BpX2JvYXJkX2luZm8pKTsKKworCWVyciA9IGdwaW9fcmVxdWVzdChsY2RfZW5fZ3BpbywgIkxDRCBSU1QiKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gZ2V0IExDRCByZXNldCBHUElPXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGxjZF9ibF9ncGlvLCAiTENEIEJMIik7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkNNLVQzNTogZmFpbGVkIHRvIGdldCBMQ0QgYmFja2xpZ2h0IGNvbnRyb2wgR1BJT1xuIik7CisJCWdvdG8gZXJyX2xjZF9ibDsKKwl9CisKKwllcnIgPSBncGlvX3JlcXVlc3QoZHZpX2VuX2dwaW8sICJEVkkgRU4iKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gZ2V0IERWSSByZXNldCBHUElPXG4iKTsKKwkJZ290byBlcnJfZHZpX2VuOworCX0KKworCWdwaW9fZXhwb3J0KGxjZF9lbl9ncGlvLCAwKTsKKwlncGlvX2V4cG9ydChsY2RfYmxfZ3BpbywgMCk7CisJZ3Bpb19leHBvcnQoZHZpX2VuX2dwaW8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChsY2RfZW5fZ3BpbywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGxjZF9ibF9ncGlvLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZHZpX2VuX2dwaW8sIDEpOworCisJbXNsZWVwKDUwKTsKKwlncGlvX3NldF92YWx1ZShsY2RfZW5fZ3BpbywgMSk7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNtX3QzNV9kc3NfZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgRFNTIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2Rldl9yZWc7CisJfQorCisJcmV0dXJuOworCitlcnJfZGV2X3JlZzoKKwlncGlvX2ZyZWUoZHZpX2VuX2dwaW8pOworZXJyX2R2aV9lbjoKKwlncGlvX2ZyZWUobGNkX2JsX2dwaW8pOworZXJyX2xjZF9ibDoKKwlncGlvX2ZyZWUobGNkX2VuX2dwaW8pOworb3V0OgorCisJcmV0dXJuOworfQorCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3ZtbWMxX3N1cHBseSA9IHsKIAkuc3VwcGx5CQkJPSAidm1tYyIsCiB9OwpAQCAtMzEyLDYgKzUwMiwxNiBAQAogCS5zdXBwbHkJCQk9ICJ2bW1jX2F1eCIsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3ZkYWNfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkZGFfZGFjIiwKKwkuZGV2CQk9ICZjbV90MzVfZHNzX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3Zkdmlfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkdmkiLAorCS5kZXYJCT0gJmNtX3QzNV9kc3NfZGV2aWNlLmRldiwKK307CisKIC8qIFZNTUMxIGZvciBNTUMxIHBpbnMgQ01ELCBDTEssIERBVDAuLkRBVDMgKDIwIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDIyMCBtQSkgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjbV90MzVfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMzQyLDYgKzU0MiwzNSBAQAogCS5jb25zdW1lcl9zdXBwbGllcwk9ICZjbV90MzVfdnNpbV9zdXBwbHksCiB9OwogCisvKiBWREFDIGZvciBEU1MgZHJpdmluZyBTLVZpZGVvICg4IG1BIHVubG9hZGVkLCBtYXggNjUgbUEpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY21fdDM1X3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZjbV90MzVfdmRhY19zdXBwbHksCit9OworCisvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY21fdDM1X3ZwbGwyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWRFZJIiwKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmY21fdDM1X3Zkdmlfc3VwcGx5LAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIGNtX3QzNV91c2JfZGF0YSA9IHsKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKQEAgLTM2NCw3ICs1OTMsNyBAQAogCS5yZXAJCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTQxMyw3ICs2NDIsNyBAQAogCiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLwogCWNtX3QzNV92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKQEAgLTQ0NSw2ICs2NzQsOCBAQAogCS5ncGlvCQk9ICZjbV90MzVfZ3Bpb19kYXRhLAogCS52bW1jMQkJPSAmY21fdDM1X3ZtbWMxLAogCS52c2ltCQk9ICZjbV90MzVfdnNpbSwKKwkudmRhYwkJPSAmY21fdDM1X3ZkYWMsCisJLnZwbGwyCQk9ICZjbV90MzVfdnBsbDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY21fdDM1X2kyY19ib2FyZGluZm9bXSA9IHsKQEAgLTQ3OSw3ICs3MTAsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewpAQCAtNTY4LDYgKzc5OSwxMSBAQAogCU9NQVAzX01VWChEU1NfREFUQTIyLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCiAJT01BUDNfTVVYKERTU19EQVRBMjMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKIAorCS8qIGRpc3BsYXkgY29udHJvbHMgKi8KKwlPTUFQM19NVVgoTUNCU1AxX0ZTUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChHUE1DX05DUzcsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoR1BNQ19OQ1MzLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCisKIAkvKiBUUFMgSVJRICovCiAJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfV0FLRVVQX0VOIHwgXAogCQkgIE9NQVBfUElOX0lOUFVUX1BVTExVUCksCkBAIC01NzUsNiArODExLDEyIEBACiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NVUyk7CkBAIC01ODQsOCArODI2LDkgQEAKIAljbV90MzVfaW5pdF9hZHM3ODQ2KCk7CiAJY21fdDM1X2luaXRfZXRoZXJuZXQoKTsKIAljbV90MzVfaW5pdF9sZWQoKTsKKwljbV90MzVfaW5pdF9kaXNwbGF5KCk7CiAKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChDTV9UMzUsICJDb21wdWxhYiBDTS1UMzUiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEwMTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8qCisgKiBib2FyZC1kZXZraXQ4MDAwLmMgLSBUaW1MTCBEZXZraXQ4MDAwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtpbSBCb3RoZXJ3YXkKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgV2ViZXIKKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworICoKKyAqIEluaXRpYWwgY29kZTogU3llZCBNb2hhbW1lZCBLaGFzaW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L3RpbWVyLWdwLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgorCisjaW5jbHVkZSAibXV4LmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKKworI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCisjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKKworI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKKworI2RlZmluZSBPTUFQX0RNOTAwMF9HUElPX0lSUQkyNQorI2RlZmluZSBPTUFQM19ERVZLSVRfVFNfR1BJTwkyNworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGV2a2l0ODAwMF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTUgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QgRW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjYwMDAwICovCisJCS5zaXplCQk9IDEgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUJCT0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIGRldmtpdDgwMDBfbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9CVVNXSURUSF8xNiwKKwkucGFydHMJCT0gZGV2a2l0ODAwMF9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkZXZraXQ4MDAwX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsCT0gLTEsCQkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE5BTkQgZHJpdmVyICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRldmtpdDgwMDBfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkZXZraXQ4MDAwX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRldmtpdDgwMDBfbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZkZXZraXQ4MDAwX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CisJeworCQkubW1jCQk9IDEsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb193cAk9IDI5LAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGRldmtpdDgwMDBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyBpbnQgZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0dQSU8sIDB4ODAsIFJFR19HUElPREFUQURJUjEpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDAsIDB4MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7Cit9CitzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBkZXZraXQ4MDAwX3ZtbWMxX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92c2ltX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tY19hdXgiLAorfTsKKworCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBkZXZraXQ4MDAwX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGNkIiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJpbm5vbHV4X2F0X3BhbmVsIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzICAgICA9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2xjZCwKK307CitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBkZXZraXQ4MDAwX2R2aV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJnZW5lcmljX3BhbmVsIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzICAgICA9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGRldmtpdDgwMDBfdHZfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInR2IiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJ2ZW5jIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMsCisJLnBoeS52ZW5jLnR5cGUgICAgICAgICAgPSBPTUFQX0RTU19WRU5DX1RZUEVfU1ZJREVPLAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfdHYsCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkZXZraXQ4MDAwX2Rzc19kZXZpY2VzW10gPSB7CisJJmRldmtpdDgwMDBfbGNkX2RldmljZSwKKwkmZGV2a2l0ODAwMF9kdmlfZGV2aWNlLAorCSZkZXZraXQ4MDAwX3R2X2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBkZXZraXQ4MDAwX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcyA9IEFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kc3NfZGV2aWNlcyksCisJLmRldmljZXMgPSBkZXZraXQ4MDAwX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZSA9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkZXZraXQ4MDAwX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGV2a2l0ODAwMF9kc3NfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGRldmtpdDgwMDBfdmRkYV9kYWNfc3VwcGx5ID0geworCS5zdXBwbHkgPSAidmRkYV9kYWMiLAorCS5kZXYJPSAmZGV2a2l0ODAwMF9kc3NfZGV2aWNlLmRldiwKK307CisKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV8xKSwKKwlLRVkoMSwgMCwgS0VZXzIpLAorCUtFWSgyLCAwLCBLRVlfMyksCisJS0VZKDAsIDEsIEtFWV80KSwKKwlLRVkoMSwgMSwgS0VZXzUpLAorCUtFWSgyLCAxLCBLRVlfNiksCisJS0VZKDMsIDEsIEtFWV9GNSksCisJS0VZKDAsIDIsIEtFWV83KSwKKwlLRVkoMSwgMiwgS0VZXzgpLAorCUtFWSgyLCAyLCBLRVlfOSksCisJS0VZKDMsIDIsIEtFWV9GNiksCisJS0VZKDAsIDMsIEtFWV9GNyksCisJS0VZKDEsIDMsIEtFWV8wKSwKKwlLRVkoMiwgMywgS0VZX0Y4KSwKKwlQRVJTSVNURU5UX0tFWSg0LCA1KSwKKwlLRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNSwgNSwgS0VZX1ZPTFVNRURPV04pLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIGRldmtpdDgwMDBfa3BfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCisJLnJvd3MJCT0gNiwKKwkuY29scwkJPSA2LAorCS5yZXAJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW107CisKK3N0YXRpYyBpbnQgZGV2a2l0ODAwMF90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQoreworCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOworCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLworCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOworCisJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLworCWRldmtpdDgwMDBfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisJZGV2a2l0ODAwMF92c2ltX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCisJLyogUkVWSVNJVDogbmVlZCBlaGNpLW9tYXAgaG9va3MgZm9yIGV4dGVybmFsIFZCVVMKKwkgKiBwb3dlciBzd2l0Y2ggYW5kIG92ZXJjdXJyZW50IGRldGVjdAorCSAqLworCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyAxLCAiRUhDSV9uT0MiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvICsgMSk7CisKKwkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMCA9PSBsZWRBLCBFSENJIG5FTl9VU0JfUFdSIChvdXQsIGFjdGl2ZSBsb3cpICovCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAibkVOX1VTQl9QV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDEpOworCisJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCisJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBkZXZraXQ4MDAwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkudXNlX2xlZHMJPSB0cnVlLAorCS5wdWxsdXBzCT0gQklUKDEpLAorCS5wdWxsZG93bnMJPSBCSVQoMikgfCBCSVQoNikgfCBCSVQoNykgfCBCSVQoOCkgfCBCSVQoMTMpCisJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCisJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92cGxsMl9zdXBwbGllc1tdID0geworCXsKKwkuc3VwcGx5CQk9ICJ2ZHZpIiwKKwkuZGV2CQk9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UuZGV2LAorCX0sCisJeworCS5zdXBwbHkJCT0gInZkc3NfZHNpIiwKKwkuZGV2CQk9ICZkZXZraXQ4MDAwX2Rzc19kZXZpY2UuZGV2LAorCX0KK307CisKKy8qIFZNTUMxIGZvciBNTUMxIHBpbnMgQ01ELCBDTEssIERBVDAuLkRBVDMgKDIwIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDIyMCBtQSkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZtbWMxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmZGV2a2l0ODAwMF92bW1jMV9zdXBwbHksCit9OworCisvKiBWU0lNIGZvciBNTUMxIHBpbnMgREFUNC4uREFUNyAoMiBtQSwgcGx1cyBjYXJkID09IG1heCA1MCBtQSkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZzaW0gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZkZXZraXQ4MDAwX3ZzaW1fc3VwcGx5LAorfTsKKworLyogVkRBQyBmb3IgRFNTIGRyaXZpbmcgUy1WaWRlbyAoOCBtQSB1bmxvYWRlZCwgbWF4IDY1IG1BKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmRldmtpdDgwMDBfdmRkYV9kYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdnBsbDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZEVkkiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGRldmtpdDgwMDBfdnBsbDJfc3VwcGxpZXMpLAorCS5jb25zdW1lcl9zdXBwbGllcwk9IGRldmtpdDgwMDBfdnBsbDJfc3VwcGxpZXMsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgZGV2a2l0ODAwMF91c2JfZGF0YSA9IHsKKwkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgZGV2a2l0ODAwMF9hdWRpb19kYXRhID0geworCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfZGF0YSBkZXZraXQ4MDAwX2NvZGVjX2RhdGEgPSB7CisJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKKwkuYXVkaW8gPSAmZGV2a2l0ODAwMF9hdWRpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgZGV2a2l0ODAwMF90d2xkYXRhID0geworCS5pcnFfYmFzZQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0lSUV9FTkQsCisKKwkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KKwkudXNiCQk9ICZkZXZraXQ4MDAwX3VzYl9kYXRhLAorCS5ncGlvCQk9ICZkZXZraXQ4MDAwX2dwaW9fZGF0YSwKKwkuY29kZWMJCT0gJmRldmtpdDgwMDBfY29kZWNfZGF0YSwKKwkudm1tYzEJCT0gJmRldmtpdDgwMDBfdm1tYzEsCisJLnZzaW0JCT0gJmRldmtpdDgwMDBfdnNpbSwKKwkudmRhYwkJPSAmZGV2a2l0ODAwMF92ZGFjLAorCS52cGxsMgkJPSAmZGV2a2l0ODAwMF92cGxsMiwKKwkua2V5cGFkCQk9ICZkZXZraXQ4MDAwX2twX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGV2a2l0ODAwMF9pMmNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGV2a2l0ODAwMF90d2xkYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZXZraXQ4MDAwX2kyY19pbml0KHZvaWQpCit7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIGRldmtpdDgwMDBfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9pMmNfYm9hcmRpbmZvKSk7CisJLyogQnVzIDMgaXMgYXR0YWNoZWQgdG8gdGhlIERWSSBwb3J0IHdoZXJlIGRldmljZXMgbGlrZSB0aGUgcGljbyBETFAKKwkgKiBwcm9qZWN0b3IgZG9uJ3Qgd29yayByZWxpYWJseSB3aXRoIDQwMGtIeiAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuZ3BpbwkJCT0gMTg2LAorCQkuYWN0aXZlX2xvdwkJPSB0cnVlLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAorCQkuZ3BpbwkJCT0gMTYzLAorCQkuYWN0aXZlX2xvdwkJPSB0cnVlLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZEIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuZ3BpbwkJCT0gMTUzLAorCQkuYWN0aXZlX2xvdyAgICAgICAgICAgICA9IHRydWUsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAibGVkMyIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5ncGlvCQkJPSAxNjQsCisJCS5hY3RpdmVfbG93ICAgICAgICAgICAgID0gdHJ1ZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxlZHNfZ3BpbyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fbGVkX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5jb2RlCQkJPSBCVE5fRVhUUkEsCisJCS5ncGlvCQkJPSAyNiwKKwkJLmRlc2MJCQk9ICJ1c2VyIiwKKwkJLndha2V1cAkJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleV9pbmZvID0geworCS5idXR0b25zCT0gZ3Bpb19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ3Bpb19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtleXNfZ3BpbyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fa2V5X2luZm8sCisJfSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IGRldmtpdDgwMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGRldmtpdDgwMDBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGRldmtpdDgwMDBfY29uZmlnKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKKwlvbWFwX2luaXRfaXJxKCk7CisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxMik7CisjZW5kaWYKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9hZHM3ODQ2X2luaXQodm9pZCkKK3sKKwlpbnQgZ3BpbyA9IE9NQVAzX0RFVktJVF9UU19HUElPOworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgImFkczc4NDZfcGVuX2Rvd24iKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQgZm9yICIKKwkJCQkiYWRzNzg0NiBwZW4gZG93biBJUlFcbiIsIGdwaW8pOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoT01BUDNfREVWS0lUX1RTX0dQSU8pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHM3ODQ2X2NvbmZpZyA9IHsKKwkueF9tYXggICAgICAgICAgICAgICAgICA9IDB4MGZmZiwKKwkueV9tYXggICAgICAgICAgICAgICAgICA9IDB4MGZmZiwKKwkueF9wbGF0ZV9vaG1zICAgICAgICAgICA9IDE4MCwKKwkucHJlc3N1cmVfbWF4ICAgICAgICAgICA9IDI1NSwKKwkuZGVib3VuY2VfbWF4ICAgICAgICAgICA9IDEwLAorCS5kZWJvdW5jZV90b2wgICAgICAgICAgID0gNSwKKwkuZGVib3VuY2VfcmVwICAgICAgICAgICA9IDEsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSwKKwkua2VlcF92cmVmX29uCQk9IDEsCisJLnNldHRsZV9kZWxheV91c2VjcyAgICAgPSAxNTAsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgYWRzNzg0Nl9tY3NwaV9jb25maWcgPSB7CisJLnR1cmJvX21vZGUJPSAwLAorCS5zaW5nbGVfY2hhbm5lbAk9IDEsCS8qIDA6IHNsYXZlLCAxOiBtYXN0ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJCT0gImFkczc4NDYiLAorCQkuYnVzX251bQkJPSAyLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwkJLm1heF9zcGVlZF9oegkJPSAxNTAwMDAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmFkczc4NDZfbWNzcGlfY29uZmlnLAorCQkuaXJxCQkJPSBPTUFQX0dQSU9fSVJRKE9NQVAzX0RFVktJVF9UU19HUElPKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmFkczc4NDZfY29uZmlnLAorCX0KK307CisKKyNkZWZpbmUgT01BUF9ETTkwMDBfQkFTRQkweDJjMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9kbTkwMDBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gT01BUF9ETTkwMDBfQkFTRSwKKwkJLmVuZAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NCAtIDEpLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NDAwKSwKKwkJLmVuZAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NDAwICsgMHg0IC0gMSksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CQk9IE9NQVBfR1BJT19JUlEoT01BUF9ETTkwMDBfR1BJT19JUlEpLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfTE9XLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgb21hcF9kbTkwMDBfcGxhdGRhdGEgPSB7CisJLmZsYWdzID0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfZG05MDAwX2RldiA9IHsKKwkubmFtZSA9ICJkbTkwMDAiLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwX2RtOTAwMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG9tYXBfZG05MDAwX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwX2RtOTAwMF9wbGF0ZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZG05MDAwX2luaXQodm9pZCkKK3sKKwlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVBfRE05MDAwX0dQSU9fSVJRLCAiZG05MDAwIGlycSIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3IgZG05MDAwIElSUVxuIiwKKwkJCU9NQVBfRE05MDAwX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCQl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChPTUFQX0RNOTAwMF9HUElPX0lSUSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZraXQ4MDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZkZXZraXQ4MDAwX2Rzc19kZXZpY2UsCisJJmxlZHNfZ3BpbywKKwkma2V5c19ncGlvLAorCSZvbWFwX2RtOTAwMF9kZXYsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9mbGFzaF9pbml0KHZvaWQpCit7CisJdTggY3MgPSAwOworCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOworCisJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJdTMyIHJldCA9IDA7CisJCXJldCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisKKwkJaWYgKChyZXQgJiAweEMwMCkgPT0gMHg4MDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE5BTkQgb24gQ1MlZFxuIiwgY3MpOworCQkJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQkJCW5hbmRjcyA9IGNzOworCQl9CisJCWNzKys7CisJfQorCisJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSAiaW4gR1BNQ1xuICIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCWRldmtpdDgwMDBfbmFuZF9kYXRhLmNzID0gbmFuZGNzOworCQlkZXZraXQ4MDAwX25hbmRfZGF0YS5ncG1jX2NzX2Jhc2VhZGRyID0gKHZvaWQgKikKKwkJCShncG1jX2Jhc2VfYWRkICsgR1BNQ19DUzBfQkFTRSArIG5hbmRjcyAqIEdQTUNfQ1NfU0laRSk7CisJCWRldmtpdDgwMDBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKQorCQkJKGdwbWNfYmFzZV9hZGQpOworCisJCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nIE5BTkQgb24gQ1MlZFxuIiwgbmFuZGNzKTsKKwkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGV2a2l0ODAwMF9uYW5kX2RldmljZSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKworc3RhdGljIHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgZWhjaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKKworCS5wb3J0X21vZGVbMF0gPSBFSENJX0hDRF9PTUFQX01PREVfUEhZLAorCS5wb3J0X21vZGVbMV0gPSBFSENJX0hDRF9PTUFQX01PREVfUEhZLAorCS5wb3J0X21vZGVbMl0gPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKworCS5waHlfcmVzZXQgID0gdHJ1ZSwKKwkucmVzZXRfZ3Bpb19wb3J0WzBdICA9IC1FSU5WQUwsCisJLnJlc2V0X2dwaW9fcG9ydFsxXSAgPSAxNDcsCisJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9pbml0KHZvaWQpCit7CisJZGV2a2l0ODAwMF9pMmNfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmtpdDgwMDBfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBkZXZraXQ4MDAwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShkZXZraXQ4MDAwX2NvbmZpZyk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZraXQ4MDAwX3NwaV9ib2FyZF9pbmZvLAorCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mbykpOworCisJb21hcF9zZXJpYWxfaW5pdCgpOworCisJb21hcF9kbTkwMDBfaW5pdCgpOworCisJZGV2a2l0ODAwMF9hZHM3ODQ2X2luaXQoKTsKKworCW9tYXBfbXV4X2luaXRfZ3BpbygxNzAsIE9NQVBfUElOX0lOUFVUKTsKKworCWdwaW9fcmVxdWVzdCgxNzAsICJEVklfblBEIik7CisJLyogUkVWSVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNzAsIHRydWUpOworCisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKKwlkZXZraXQ4MDAwX2ZsYXNoX2luaXQoKTsKKworCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJfY2tlMSIsIE9NQVBfUElOX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXZraXQ4MDAwX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoREVWS0lUODAwMCwgIk9NQVAzIERldmtpdDgwMDAiKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gZGV2a2l0ODAwMF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZGV2a2l0ODAwMF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZGV2a2l0ODAwMF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDdlNmU2Y2EuLjE2Y2MwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC01MCw3ICs1MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzI0MngoKTsgLyogc2hvdWxkIGJlIDI0MngsIDI0M3gsIG9yIDM0M3ggKi8KLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDI0MnhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfR0VORVJJQywgIkdlbmVyaWMgT01BUDI0eHgiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IGNmYjdmMTIuLjA2NjVmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CkBAIC0yOSw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgpAQCAtMTE1LDggKzExNSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGg0X2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBoNF9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAogCS5wYXJ0cwkJPSBoNF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDRfcGFydGl0aW9ucyksCkBAIC0xMjcsNyArMTI2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmg0X2ZsYXNoX2RhdGEsCkBAIC0zNzAsNyArMzY5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzI0MngoKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDI0MnhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDQsICJPTUFQMjQyMCBINCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKaW5kZXggMTE3YjhmZC4uOTk1ODk4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yOCw5ICsyOSwxMiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDxwbGF0L29uZW5hbmQuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKKyNpbmNsdWRlICJzZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaCIKIAogI2RlZmluZSBJR0VQMl9TTVNDOTExWF9DUyAgICAgICA1CiAjZGVmaW5lIElHRVAyX1NNU0M5MTFYX0dQSU8gICAgIDE3NgpAQCAtMzgsNiArNDIsMTA4IEBACiAjZGVmaW5lIElHRVAyX0dQSU9fTEVEMF9SRUQgCTI2CiAjZGVmaW5lIElHRVAyX0dQSU9fTEVEMF9HUkVFTiAJMjcKICNkZWZpbmUgSUdFUDJfR1BJT19MRUQxX1JFRCAgIAkyOAorI2RlZmluZSBJR0VQMl9HUElPX0RWSV9QVVAJMTcwCisjZGVmaW5lIElHRVAyX0dQSU9fV0lGSV9OUEQgCTk0CisjZGVmaW5lIElHRVAyX0dQSU9fV0lGSV9OUkVTRVQgCTk1CisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PTUFQMikgfHwgXAorCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKKworI2RlZmluZSBPTkVOQU5EX01BUCAgICAgICAgICAgICAweDIwMDAwMDAwCisKKy8qIE5BTkQwNEdSNEUxQSAoIHgyIEZsYXNoIGJ1aWx0LWluIENPTUJPIFBPUCBNRU1PUlkgKQorICogU2luY2UgdGhlIGRldmljZSBpcyBlcXVpcHBlZCB3aXRoIHR3byBEYXRhUkFNcywgYW5kIHR3by1wbGFuZSBOQU5ECisgKiBGbGFzaCBtZW1vcnkgYXJyYXksIHRoZXNlIHR3byBjb21wb25lbnQgZW5hYmxlcyBzaW11bHRhbmVvdXMgcHJvZ3JhbQorICogb2YgNEtpQi4gUGxhbmUxIGhhcyBvbmx5IGV2ZW4gYmxvY2tzIHN1Y2ggYXMgYmxvY2swLCBibG9jazIsIGJsb2NrNAorICogd2hpbGUgUGxhbmUyIGhhcyBvbmx5IG9kZCBibG9ja3Mgc3VjaCBhcyBibG9jazEsIGJsb2NrMywgYmxvY2s1LgorICogU28gTVREIHJlZ2FyZHMgaXQgYXMgNEtpQiBwYWdlIHNpemUgYW5kIDI1NktpQiBibG9jayBzaXplIDY0KigyKjIwNDgpCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlnZXAyX29uZW5hbmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgICAgID0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldCAgICAgICAgID0gMCwKKwkJLnNpemUgICAgICAgICAgID0gMiAqICg2NCooMioyMDQ4KSkKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gIlUtQm9vdCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgICAgID0gNiAqICg2NCooMioyMDQ4KSksCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJFbnZpcm9ubWVudCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgICAgID0gMiAqICg2NCooMioyMDQ4KSksCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJLZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICAgICA9IDEyICogKDY0KigyKjIwNDgpKSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gIkZpbGUgU3lzdGVtIiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgICAgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgaW50IGlnZXAyX29uZW5hbmRfc2V0dXAodm9pZCBfX2lvbWVtICpvbmVuYW5kX2Jhc2UsIGludCBmcmVxKQoreworICAgICAgIC8qIG5vdGhpbmcgaXMgcmVxdWlyZWQgdG8gYmUgc2V0dXAgZm9yIG9uZW5hbmQgYXMgb2Ygbm93ICovCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgaWdlcDJfb25lbmFuZF9kYXRhID0geworCS5wYXJ0cyA9IGlnZXAyX29uZW5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGlnZXAyX29uZW5hbmRfcGFydGl0aW9ucyksCisJLm9uZW5hbmRfc2V0dXAgPSBpZ2VwMl9vbmVuYW5kX3NldHVwLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE9uZU5BTkQgZHJpdmVyICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpZ2VwMl9vbmVuYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItb25lbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmlnZXAyX29uZW5hbmRfZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgaWdlcDJfZmxhc2hfaW5pdCh2b2lkKQoreworCXU4CQljcyA9IDA7CisJdTgJCW9uZW5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCXUzMiByZXQgPSAwOworCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCisJCS8qIENoZWNrIGlmIE5BTkQvb25lTkFORCBpcyBjb25maWd1cmVkICovCisJCWlmICgocmV0ICYgMHhDMDApID09IDB4ODAwKQorCQkJLyogTkFORCBmb3VuZCAqLworCQkJcHJfZXJyKCJJR0VQIHYyOiBVbnN1cHBvcnRlZCBOQU5EIGZvdW5kXG4iKTsKKwkJZWxzZSB7CisJCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzcpOworCQkJaWYgKChyZXQgJiAweDNGKSA9PSAoT05FTkFORF9NQVAgPj4gMjQpKQorCQkJCS8qIE9ORU5BTkQgZm91bmQgKi8KKwkJCQlvbmVuYW5kY3MgPSBjczsKKwkJfQorCQljcysrOworCX0KKwlpZiAob25lbmFuZGNzID4gR1BNQ19DU19OVU0pIHsKKwkJcHJfZXJyKCJJR0VQIHYyOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uIGluIEdQTUNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9uZW5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCWlnZXAyX29uZW5hbmRfZGF0YS5jcyA9IG9uZW5hbmRjczsKKwkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaWdlcDJfb25lbmFuZF9kZXZpY2UpIDwgMCkKKwkJCXByX2VycigiSUdFUCB2MjogVW5hYmxlIHRvIHJlZ2lzdGVyIE9uZU5BTkQgZGV2aWNlXG4iKTsKKwl9Cit9CisKKyNlbHNlCit2b2lkIF9faW5pdCBpZ2VwMl9mbGFzaF9pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNU0M5MTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTVNDOTExWF9NT0RVTEUpCiAKQEAgLTEwNiw2ICsyMTIsMTAgQEAKIAkuc3VwcGx5CQk9ICJ2bW1jIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwMl92bW1jMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidm1tYyIsCit9OworCiAvKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMTIxLDcgKzIzMSwyMiBAQAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gJmlnZXAyX3ZtbWMxX3N1cHBseSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworLyogVk1NQzIgZm9yIE9NQVAgVkREX01NQzIgKGkvbykgYW5kIE1NQzIgV0lGSSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlnZXAyX3ZtbWMyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzICAgICAgPSAmaWdlcDJfdm1tYzJfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTE0MiwxMiArMjY3LDEzIEBACiB7CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAuLi4gd2UgImtub3ciIHRoZQogCSAqIHJlZ3VsYXRvcnMgd2lsbCBiZSBzZXQgdXAgb25seSAqYWZ0ZXIqIHdlIHJldHVybi4KIAkqLwogCWlnZXAyX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCWlnZXAyX3ZtbWMyX3N1cHBseS5kZXYgPSBtbWNbMV0uZGV2OwogCiAJcmV0dXJuIDA7CiB9OwpAQCAtMTY0LDIzICsyOTAsMTMwIEBACiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CiAKK3N0YXRpYyBpbnQgaWdlcDJfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fRFZJX1BVUCwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdlcDJfZGlzYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX0RWSV9QVVAsIDApOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBpZ2VwMl9kdmlfZGV2aWNlID0geworCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLm5hbWUJCQk9ICJkdmkiLAorCS5kcml2ZXJfbmFtZQkJPSAiZ2VuZXJpY19wYW5lbCIsCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBpZ2VwMl9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gaWdlcDJfZGlzYWJsZV9kdmksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaWdlcDJfZHNzX2RldmljZXNbXSA9IHsKKwkmaWdlcDJfZHZpX2RldmljZQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIGlnZXAyX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUoaWdlcDJfZHNzX2RldmljZXMpLAorCS5kZXZpY2VzCT0gaWdlcDJfZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJmlnZXAyX2R2aV9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpZ2VwMl9kc3NfZGV2aWNlID0geworCS5uYW1lCT0gIm9tYXBkc3MiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmlnZXAyX2Rzc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdnBsbDJfc3VwcGx5ID0geworCS5zdXBwbHkJPSAidmRkc19kc2kiLAorCS5kZXYJPSAmaWdlcDJfZHNzX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdnBsbDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZEVkkiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmaWdlcDJfdnBsbDJfc3VwcGx5LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWlmIChncGlvX3JlcXVlc3QoSUdFUDJfR1BJT19EVklfUFVQLCAiR1BJT19EVklfUFVQIikgJiYKKwkgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fRFZJX1BVUCwgMSkpCisJCXByX2VycigiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fRFZJX1BVUFxuIik7Cit9CisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJHUElPX0xFRDFfUkVEIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLAorCQkuZ3BpbyA9IElHRVAyX0dQSU9fTEVEMV9SRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZHNfaW5mbyA9IHsKKwkubGVkcyAgICAgICAgICAgPSBncGlvX2xlZHMsCisJLm51bV9sZWRzICAgICAgID0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCSAubmFtZSAgID0gImxlZHMtZ3BpbyIsCisJIC5pZCAgICAgPSAtMSwKKwkgLmRldiAgICA9IHsKKwkJIC5wbGF0Zm9ybV9kYXRhICA9ICAmZ3Bpb19sZWRzX2luZm8sCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlnZXAyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpZ2VwMl9kc3NfZGV2aWNlLAorI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJJmxlZHNfZ3BpbywKKyNlbmRpZgorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBpZ2VwMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaWdlcDJfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtNjVreHh4eGFtX3NkcmNfcGFyYW1zLCBtNjVreHh4eGFtX3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgaWdlcDJfYXVkaW9fZGF0YSA9IHsKKwkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgaWdlcDJfY29kZWNfZGF0YSA9IHsKKwkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAorCS5hdWRpbyA9ICZpZ2VwMl9hdWRpb19kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgaWdlcDJfdHdsZGF0YSA9IHsKIAkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELAogCiAJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCiAJLnVzYgkJPSAmaWdlcDJfdXNiX2RhdGEsCisJLmNvZGVjCQk9ICZpZ2VwMl9jb2RlY19kYXRhLAogCS5ncGlvCQk9ICZpZ2VwMl9ncGlvX2RhdGEsCiAJLnZtbWMxICAgICAgICAgID0gJmlnZXAyX3ZtbWMxLAorCS52bW1jMgkJPSAmaWdlcDJfdm1tYzIsCisJLnZwbGwyCQk9ICZpZ2VwMl92cGxsMiwKIAogfTsKIApAQCAtMjAzLDYgKzQzNiwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCitzdGF0aWMgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSBlaGNpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5wb3J0X21vZGVbMF0gPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucG9ydF9tb2RlWzFdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSwKKwkucG9ydF9tb2RlWzJdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCisKKwkucGh5X3Jlc2V0ID0gdHJ1ZSwKKwkucmVzZXRfZ3Bpb19wb3J0WzBdID0gLUVJTlZBTCwKKwkucmVzZXRfZ3Bpb19wb3J0WzFdID0gSUdFUDJfR1BJT19VU0JIX05SRVNFVCwKKwkucmVzZXRfZ3Bpb19wb3J0WzJdID0gLUVJTlZBTCwKK307CisKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LApAQCAtMjE1LDkgKzQ2NSwxMyBAQAogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJaWdlcDJfaTJjX2luaXQoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpZ2VwMl9kZXZpY2VzLCBBUlJBWV9TSVpFKGlnZXAyX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CisJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CiAKKwlpZ2VwMl9mbGFzaF9pbml0KCk7CisJaWdlcDJfZGlzcGxheV9pbml0KCk7CiAJaWdlcDJfaW5pdF9zbXNjOTExeCgpOwogCiAJLyogR1BJTyB1c2Vyc3BhY2UgbGVkcyAqLwpAQCAtMjM0LDE5ICs0ODgsMzYgQEAKIAkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19MRUQwX0dSRUVOLCAwKTsKIAl9IGVsc2UKIAkJcHJfd2FybmluZygiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fTEVEMF9HUkVFTlxuIik7Ci0KKyNpZm5kZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKIAlpZiAoKGdwaW9fcmVxdWVzdChJR0VQMl9HUElPX0xFRDFfUkVELCAiR1BJT19MRUQxX1JFRCIpID09IDApICYmCiAJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoSUdFUDJfR1BJT19MRUQxX1JFRCwgMSkgPT0gMCkpIHsKIAkJZ3Bpb19leHBvcnQoSUdFUDJfR1BJT19MRUQxX1JFRCwgMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKElHRVAyX0dQSU9fTEVEMV9SRUQsIDApOwogCX0gZWxzZQogCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19MRUQxX1JFRFxuIik7CisjZW5kaWYKKwkvKiBHUElPIFctTEFOICsgQmx1ZXRvb3RoIGNvbWJvIG1vZHVsZSAqLworCWlmICgoZ3Bpb19yZXF1ZXN0KElHRVAyX0dQSU9fV0lGSV9OUEQsICJHUElPX1dJRklfTlBEIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX1dJRklfTlBELCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX1dJRklfTlBELCAwKTsKKy8qIAkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19XSUZJX05QRCwgMCk7ICovCisJfSBlbHNlCisJCXByX3dhcm5pbmcoIklHRVAgdjI6IENvdWxkIG5vdCBvYnRhaW4gZ3BpbyBHUElPX1dJRklfTlBEXG4iKTsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KElHRVAyX0dQSU9fV0lGSV9OUkVTRVQsICJHUElPX1dJRklfTlJFU0VUIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX1dJRklfTlJFU0VULCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX1dJRklfTlJFU0VULCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19XSUZJX05SRVNFVCwgMCk7CisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKElHRVAyX0dQSU9fV0lGSV9OUkVTRVQsIDEpOworCX0gZWxzZQorCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19XSUZJX05SRVNFVFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpZ2VwMl9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChJR0VQMDAyMCwgIklHRVAgdjIgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggOTk1ZDRhMi4uNWZjYjUyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBMRFBfU01TQzkxMVhfQ1MJCTEKICNkZWZpbmUgTERQX1NNU0M5MTFYX0dQSU8JMTUyCkBAIC0zNTksNyArMzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTM4Myw2ICszODMsMTIgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC0zOTQsOSArNDAwLDkgQEAKIAkJCQlBUlJBWV9TSVpFKGxkcF9zcGlfYm9hcmRfaW5mbykpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCS8qIGxpbmsgcmVndWxhdG9ycyB0byBNTUMgYWRhcHRlcnMgKi8KIAlsZHBfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CiB9CkBAIC00MDQsNyArNDEwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQX0xEUCwgIk9NQVAgTERQIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggNzY0YWIxZS4uNGNhYjA1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL211c2IuaD4KIApAQCAtMjUsMTEgKzI2LDE3IEBACiAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L21lbmVsYXVzLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8cGxhdC9tY3NwaS5oPgogI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvbW1jLmg+CiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAorc3RhdGljIGludCBzbG90MV9jb3Zlcl9vcGVuOworc3RhdGljIGludCBzbG90Ml9jb3Zlcl9vcGVuOworc3RhdGljIHN0cnVjdCBkZXZpY2UgKm1tY19kZXZpY2U7CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyBwNTRzcGlfbWNzcGlfY29uZmlnID0gewogCS50dXJib19tb2RlCT0gMCwKIAkuc2luZ2xlX2NoYW5uZWwgPSAxLApAQCAtOTYsMTAgKzEwMyw0NDYgQEAKIAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykgJiYJCQkJCQlcCisJKGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpKQorCisvKgorICogT24gYm90aCBOODAwIGFuZCBOODEwLCBvbmx5IHRoZSBmaXJzdCBvZiB0aGUgdHdvIE1NQyBjb250cm9sbGVycyBpcyBpbiB1c2UuCisgKiBUaGUgdHdvIE1NQyBzbG90cyBhcmUgbXVsdGlwbGV4ZWQgdmlhIE1lbmVsYXVzIGNvbXBhbmlvbiBjaGlwIG92ZXIgSTJDLgorICogT24gTjgwMCwgYm90aCBzbG90cyBhcmUgcG93ZXJlZCB2aWEgTWVuZWxhdXMuIE9uIE44MTAsIG9ubHkgb25lIG9mIHRoZQorICogc2xvdHMgaXMgcG93ZXJlZCB2aWEgTWVuZWxhdXMuIFRoZSBOODEwIEVNTUMgaXMgcG93ZXJlZCB2aWEgR1BJTy4KKyAqCisgKiBWTU1DCQkJCXNsb3QgMSBvbiBib3RoIE44MDAgYW5kIE44MTAKKyAqIFZEQ0RDM19BUEUgYW5kIFZNQ1MyX0FQRQlzbG90IDIgb24gTjgwMAorICogR1BJTzIzIGFuZCBHUElPOQkJc2xvdCAyIEVNTUMgb24gTjgxMAorICoKKyAqLworI2RlZmluZSBOOFgwX1NMT1RfU1dJVENIX0dQSU8JOTYKKyNkZWZpbmUgTjgxMF9FTU1DX1ZTRF9HUElPCTIzCisjZGVmaW5lIE5OODEwX0VNTUNfVklPX0dQSU8JOQorCitzdGF0aWMgaW50IG44eDBfbW1jX3N3aXRjaF9zbG90KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisjaWZkZWYgQ09ORklHX01NQ19ERUJVRworCWRldl9kYmcoZGV2LCAiQ2hvb3NlIHNsb3QgJWRcbiIsIHNsb3QgKyAxKTsKKyNlbmRpZgorCWdwaW9fc2V0X3ZhbHVlKE44WDBfU0xPVF9TV0lUQ0hfR1BJTywgc2xvdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbjh4MF9tbWNfc2V0X3Bvd2VyX21lbmVsYXVzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJCWludCBwb3dlcl9vbiwgaW50IHZkZCkKK3sKKwlpbnQgbVY7CisKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisJZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBwb3dlcjogJXMgKHZkZCAlZClcbiIsIHNsb3QgKyAxLAorCQlwb3dlcl9vbiA/ICJvbiIgOiAib2ZmIiwgdmRkKTsKKyNlbmRpZgorCWlmIChzbG90ID09IDApIHsKKwkJaWYgKCFwb3dlcl9vbikKKwkJCXJldHVybiBtZW5lbGF1c19zZXRfdm1tYygwKTsKKwkJc3dpdGNoICgxIDw8IHZkZCkgeworCQljYXNlIE1NQ19WRERfMzNfMzQ6CisJCWNhc2UgTU1DX1ZERF8zMl8zMzoKKwkJY2FzZSBNTUNfVkREXzMxXzMyOgorCQkJbVYgPSAzMTAwOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8zMF8zMToKKwkJCW1WID0gMzAwMDsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjhfMjk6CisJCQltViA9IDI4MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzE2NV8xOTU6CisJCQltViA9IDE4NTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCXJldHVybiBtZW5lbGF1c19zZXRfdm1tYyhtVik7CisJfSBlbHNlIHsKKwkJaWYgKCFwb3dlcl9vbikKKwkJCXJldHVybiBtZW5lbGF1c19zZXRfdmRjZGMoMywgMCk7CisJCXN3aXRjaCAoMSA8PCB2ZGQpIHsKKwkJY2FzZSBNTUNfVkREXzMzXzM0OgorCQljYXNlIE1NQ19WRERfMzJfMzM6CisJCQltViA9IDMzMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzMwXzMxOgorCQljYXNlIE1NQ19WRERfMjlfMzA6CisJCQltViA9IDMwMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI4XzI5OgorCQljYXNlIE1NQ19WRERfMjdfMjg6CisJCQltViA9IDI4MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI0XzI1OgorCQljYXNlIE1NQ19WRERfMjNfMjQ6CisJCQltViA9IDI0MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzIyXzIzOgorCQljYXNlIE1NQ19WRERfMjFfMjI6CisJCQltViA9IDIyMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzIwXzIxOgorCQkJbVYgPSAyMDAwOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgorCQkJbVYgPSAxODAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlyZXR1cm4gbWVuZWxhdXNfc2V0X3ZkY2RjKDMsIG1WKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG44MTBfc2V0X3Bvd2VyX2VtbWMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgaW50IHBvd2VyX29uKQoreworCWRldl9kYmcoZGV2LCAiU2V0IEVNTUMgcG93ZXIgJXNcbiIsIHBvd2VyX29uID8gIm9uIiA6ICJvZmYiKTsKKworCWlmIChwb3dlcl9vbikgeworCQlncGlvX3NldF92YWx1ZShOODEwX0VNTUNfVlNEX0dQSU8sIDEpOworCQltc2xlZXAoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKE5OODEwX0VNTUNfVklPX0dQSU8sIDEpOworCQltc2xlZXAoMSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19zZXRfdmFsdWUoTk44MTBfRU1NQ19WSU9fR1BJTywgMCk7CisJCW1zbGVlcCg1MCk7CisJCWdwaW9fc2V0X3ZhbHVlKE44MTBfRU1NQ19WU0RfR1BJTywgMCk7CisJCW1zbGVlcCg1MCk7CisJfQorfQorCitzdGF0aWMgaW50IG44eDBfbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCisJCQkgICAgICBpbnQgdmRkKQoreworCWlmIChtYWNoaW5lX2lzX25va2lhX244MDAoKSB8fCBzbG90ID09IDApCisJCXJldHVybiBuOHgwX21tY19zZXRfcG93ZXJfbWVuZWxhdXMoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKworCW44MTBfc2V0X3Bvd2VyX2VtbWMoZGV2LCBwb3dlcl9vbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuOHgwX21tY19zZXRfYnVzX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGJ1c19tb2RlKQoreworCWludCByOworCisJZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBidXMgbW9kZSAlc1xuIiwgc2xvdCArIDEsCisJCWJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTiA/ICJvcGVuLWRyYWluIiA6ICJwdXNoLXB1bGwiKTsKKwlCVUdfT04oc2xvdCAhPSAwICYmIHNsb3QgIT0gMSk7CisJc2xvdCsrOworCXN3aXRjaCAoYnVzX21vZGUpIHsKKwljYXNlIE1NQ19CVVNNT0RFX09QRU5EUkFJTjoKKwkJciA9IG1lbmVsYXVzX3NldF9tbWNfb3BlbmRyYWluKHNsb3QsIDEpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNNT0RFX1BVU0hQVUxMOgorCQlyID0gbWVuZWxhdXNfc2V0X21tY19vcGVuZHJhaW4oc2xvdCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlpZiAociAhPSAwICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJZGV2X2VycihkZXYsICJNTUM6IHVuYWJsZSB0byBzZXQgYnVzIG1vZGUgZm9yIHNsb3QgJWRcbiIsCisJCQlzbG90KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBuOHgwX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzbG90Kys7CisJQlVHX09OKHNsb3QgIT0gMSAmJiBzbG90ICE9IDIpOworCWlmIChzbG90ID09IDEpCisJCXJldHVybiBzbG90MV9jb3Zlcl9vcGVuOworCWVsc2UKKwkJcmV0dXJuIHNsb3QyX2NvdmVyX29wZW47Cit9CisKK3N0YXRpYyB2b2lkIG44eDBfbW1jX2NhbGxiYWNrKHZvaWQgKmRhdGEsIHU4IGNhcmRfbWFzaykKK3sKKwlpbnQgYml0LCAqb3BlbnAsIGluZGV4OworCisJaWYgKG1hY2hpbmVfaXNfbm9raWFfbjgwMCgpKSB7CisJCWJpdCA9IDEgPDwgMTsKKwkJb3BlbnAgPSAmc2xvdDJfY292ZXJfb3BlbjsKKwkJaW5kZXggPSAxOworCX0gZWxzZSB7CisJCWJpdCA9IDE7CisJCW9wZW5wID0gJnNsb3QxX2NvdmVyX29wZW47CisJCWluZGV4ID0gMDsKKwl9CisKKwlpZiAoY2FyZF9tYXNrICYgYml0KQorCQkqb3BlbnAgPSAxOworCWVsc2UKKwkJKm9wZW5wID0gMDsKKworCW9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChtbWNfZGV2aWNlLCBpbmRleCwgKm9wZW5wKTsKK30KKwordm9pZCBuOHgwX21tY19zbG90MV9jb3Zlcl9oYW5kbGVyKHZvaWQgKmFyZywgaW50IGNsb3NlZF9zdGF0ZSkKK3sKKwlpZiAobW1jX2RldmljZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzbG90MV9jb3Zlcl9vcGVuID0gIWNsb3NlZF9zdGF0ZTsKKwlvbWFwX21tY19ub3RpZnlfY292ZXJfZXZlbnQobW1jX2RldmljZSwgMCwgY2xvc2VkX3N0YXRlKTsKK30KKworc3RhdGljIGludCBuOHgwX21tY19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByLCBiaXQsICpvcGVucDsKKwlpbnQgdnMyc2VsOworCisJbW1jX2RldmljZSA9IGRldjsKKworCXIgPSBtZW5lbGF1c19zZXRfc2xvdF9zZWwoMSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MDAoKSkKKwkJdnMyc2VsID0gMDsKKwllbHNlCisJCXZzMnNlbCA9IDI7CisKKwlyID0gbWVuZWxhdXNfc2V0X21tY19zbG90KDIsIDAsIHZzMnNlbCwgMSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCW44eDBfbW1jX3NldF9wb3dlcihkZXYsIDAsIE1NQ19QT1dFUl9PTiwgMTYpOyAvKiBNTUNfVkREXzI4XzI5ICovCisJbjh4MF9tbWNfc2V0X3Bvd2VyKGRldiwgMSwgTU1DX1BPV0VSX09OLCAxNik7CisKKwlyID0gbWVuZWxhdXNfc2V0X21tY19zbG90KDEsIDEsIDAsIDEpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJciA9IG1lbmVsYXVzX3NldF9tbWNfc2xvdCgyLCAxLCB2czJzZWwsIDEpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlyID0gbWVuZWxhdXNfZ2V0X3Nsb3RfcGluX3N0YXRlcygpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODAwKCkpIHsKKwkJYml0ID0gMSA8PCAxOworCQlvcGVucCA9ICZzbG90Ml9jb3Zlcl9vcGVuOworCX0gZWxzZSB7CisJCWJpdCA9IDE7CisJCW9wZW5wID0gJnNsb3QxX2NvdmVyX29wZW47CisJCXNsb3QyX2NvdmVyX29wZW4gPSAwOworCX0KKworCS8qIEFsbCBzbG90IHBpbiBiaXRzIHNlZW0gdG8gYmUgaW52ZXJzZWQgdW50aWwgZmlyc3Qgc3dpdGNoIGNoYW5nZSAqLworCWlmIChyID09IDB4ZiB8fCByID09ICgweGYgJiB+Yml0KSkKKwkJciA9IH5yOworCisJaWYgKHIgJiBiaXQpCisJCSpvcGVucCA9IDE7CisJZWxzZQorCQkqb3BlbnAgPSAwOworCisJciA9IG1lbmVsYXVzX3JlZ2lzdGVyX21tY19jYWxsYmFjayhuOHgwX21tY19jYWxsYmFjaywgTlVMTCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgbjh4MF9tbWNfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCB2czJzZWw7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODAwKCkpCisJCXZzMnNlbCA9IDA7CisJZWxzZQorCQl2czJzZWwgPSAyOworCisJbWVuZWxhdXNfc2V0X21tY19zbG90KDEsIDAsIDAsIDApOworCW1lbmVsYXVzX3NldF9tbWNfc2xvdCgyLCAwLCB2czJzZWwsIDApOworfQorCitzdGF0aWMgdm9pZCBuOHgwX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwltZW5lbGF1c191bnJlZ2lzdGVyX21tY19jYWxsYmFjaygpOworCisJZ3Bpb19mcmVlKE44WDBfU0xPVF9TV0lUQ0hfR1BJTyk7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODEwKCkpIHsKKwkJZ3Bpb19mcmVlKE44MTBfRU1NQ19WU0RfR1BJTyk7CisJCWdwaW9fZnJlZShOTjgxMF9FTU1DX1ZJT19HUElPKTsKKwl9Cit9CisKKy8qCisgKiBNTUMgY29udHJvbGxlcjEgaGFzIHR3byBzbG90cyB0aGF0IGFyZSBtdWx0aXBsZXhlZCB2aWEgSTJDLgorICogTU1DIGNvbnRyb2xsZXIyIGlzIG5vdCBpbiB1c2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGEgPSB7CisJLm5yX3Nsb3RzCQkJPSAyLAorCS5zd2l0Y2hfc2xvdAkJCT0gbjh4MF9tbWNfc3dpdGNoX3Nsb3QsCisJLmluaXQJCQkJPSBuOHgwX21tY19sYXRlX2luaXQsCisJLmNsZWFudXAJCQk9IG44eDBfbW1jX2NsZWFudXAsCisJLnNodXRkb3duCQkJPSBuOHgwX21tY19zaHV0ZG93biwKKwkubWF4X2ZyZXEJCQk9IDI0MDAwMDAwLAorCS5kbWFfbWFzawkJCT0gMHhmZmZmZmZmZiwKKwkuc2xvdHNbMF0gPSB7CisJCS53aXJlcwkJCT0gNCwKKwkJLnNldF9wb3dlcgkJPSBuOHgwX21tY19zZXRfcG93ZXIsCisJCS5zZXRfYnVzX21vZGUJCT0gbjh4MF9tbWNfc2V0X2J1c19tb2RlLAorCQkuZ2V0X2NvdmVyX3N0YXRlCT0gbjh4MF9tbWNfZ2V0X2NvdmVyX3N0YXRlLAorCQkub2NyX21hc2sJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8zMF8zMSB8CisJCQkJCQlNTUNfVkREXzMyXzMzICAgfCBNTUNfVkREXzMzXzM0LAorCQkubmFtZQkJCT0gImludGVybmFsIiwKKwl9LAorCS5zbG90c1sxXSA9IHsKKwkJLnNldF9wb3dlcgkJPSBuOHgwX21tY19zZXRfcG93ZXIsCisJCS5zZXRfYnVzX21vZGUJCT0gbjh4MF9tbWNfc2V0X2J1c19tb2RlLAorCQkuZ2V0X2NvdmVyX3N0YXRlCT0gbjh4MF9tbWNfZ2V0X2NvdmVyX3N0YXRlLAorCQkub2NyX21hc2sJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8yMF8yMSB8CisJCQkJCQlNTUNfVkREXzIxXzIyIHwgTU1DX1ZERF8yMl8yMyB8CisJCQkJCQlNTUNfVkREXzIzXzI0IHwgTU1DX1ZERF8yNF8yNSB8CisJCQkJCQlNTUNfVkREXzI3XzI4IHwgTU1DX1ZERF8yOF8yOSB8CisJCQkJCQlNTUNfVkREXzI5XzMwIHwgTU1DX1ZERF8zMF8zMSB8CisJCQkJCQlNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkJLm5hbWUJCQk9ICJleHRlcm5hbCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX2RhdGFbT01BUDI0WFhfTlJfTU1DXTsKKwordm9pZCBfX2luaXQgbjh4MF9tbWNfaW5pdCh2b2lkKQorCit7CisJaW50IGVycjsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MTAoKSkgeworCQltbWMxX2RhdGEuc2xvdHNbMF0ubmFtZSA9ICJleHRlcm5hbCI7CisKKwkJLyoKKwkJICogU29tZSBTYW1zdW5nIE1vdmluYW5kIGNoaXBzIGRvIG5vdCBsaWtlIG9wZW4tZW5kZWQKKwkJICogbXVsdGktYmxvY2sgcmVhZHMgYW5kIGZhbGwgdG8gYnJhaW5kLWRlYWQgc3RhdGUKKwkJICogd2hpbGUgZG9pbmcgc28uIFJlZHVjaW5nIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluCisJCSAqIHRoZSB0cmFuc2ZlciBvciBkZWxheXMgaW4gY2xvY2sgZGlzYWJsZSBkbyBub3QgaGVscAorCQkgKi8KKwkJbW1jMV9kYXRhLnNsb3RzWzFdLm5hbWUgPSAiaW50ZXJuYWwiOworCQltbWMxX2RhdGEuc2xvdHNbMV0uYmFuX29wZW5lbmRlZCA9IDE7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE44WDBfU0xPVF9TV0lUQ0hfR1BJTywgIk1NQyBzbG90IHN3aXRjaCIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTjhYMF9TTE9UX1NXSVRDSF9HUElPLCAwKTsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MTAoKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3QoTjgxMF9FTU1DX1ZTRF9HUElPLCAiTU1DIHNsb3QgMiBWZGRmIik7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShOOFgwX1NMT1RfU1dJVENIX0dQSU8pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTjgxMF9FTU1DX1ZTRF9HUElPLCAwKTsKKworCQllcnIgPSBncGlvX3JlcXVlc3QoTk44MTBfRU1NQ19WSU9fR1BJTywgIk1NQyBzbG90IDIgVmRkIik7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShOOFgwX1NMT1RfU1dJVENIX0dQSU8pOworCQkJZ3Bpb19mcmVlKE44MTBfRU1NQ19WU0RfR1BJTyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChOTjgxMF9FTU1DX1ZJT19HUElPLCAwKTsKKwl9CisKKwltbWNfZGF0YVswXSA9ICZtbWMxX2RhdGE7CisJb21hcDJfaW5pdF9tbWMobW1jX2RhdGEsIE9NQVAyNFhYX05SX01NQyk7Cit9CisjZWxzZQorCit2b2lkIF9faW5pdCBuOHgwX21tY19pbml0KHZvaWQpCit7Cit9CisKK3ZvaWQgbjh4MF9tbWNfc2xvdDFfY292ZXJfaGFuZGxlcih2b2lkICphcmcsIGludCBzdGF0ZSkKK3sKK30KKworI2VuZGlmCS8qIENPTkZJR19NTUNfT01BUCAqLworCisjaWZkZWYgQ09ORklHX01FTkVMQVVTCisKK3N0YXRpYyBpbnQgbjh4MF9hdXRvX3NsZWVwX3JlZ3VsYXRvcnModm9pZCkKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwl2YWwgPSBFTl9WUExMX1NMRUVQIHwgRU5fVk1NQ19TTEVFUCAgICBcCisJCXwgRU5fVkFVWF9TTEVFUCB8IEVOX1ZJT19TTEVFUCBcCisJCXwgRU5fVk1FTV9TTEVFUCB8IEVOX0RDM19TTEVFUCBcCisJCXwgRU5fVkNfU0xFRVAgfCBFTl9EQzJfU0xFRVA7CisKKwlyZXQgPSBtZW5lbGF1c19zZXRfcmVndWxhdG9yX3NsZWVwKDEsIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3Qgc2V0IHJlZ3VsYXRvcnMgdG8gc2xlZXAgb24gIgorCQkJIm1lbmVsYXVzOiAldVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbjh4MF9hdXRvX3ZvbHRhZ2Vfc2NhbGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWVuZWxhdXNfc2V0X3Zjb3JlX2h3KDE0MDAsIDEwNTApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHNldCBWQ09SRSB2b2x0YWdlIG9uICIKKwkJCSJtZW5lbGF1czogJXVcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG44eDBfbWVuZWxhdXNfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbjh4MF9hdXRvX3ZvbHRhZ2Vfc2NhbGUoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBuOHgwX2F1dG9fc2xlZXBfcmVndWxhdG9ycygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbjh4MF9pMmNfYm9hcmRfaW5mb18xW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibWVuZWxhdXMiLCAweDcyKSwKKwkJLmlycSA9IElOVF8yNFhYX1NZU19OSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1lbmVsYXVzX3BsYXRmb3JtX2RhdGEgbjh4MF9tZW5lbGF1c19wbGF0Zm9ybV9kYXRhID0geworCS5sYXRlX2luaXQgPSBuOHgwX21lbmVsYXVzX2xhdGVfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuOHgwX21lbmVsYXVzX2luaXQodm9pZCkKK3sKKwluOHgwX2kyY19ib2FyZF9pbmZvXzFbMF0ucGxhdGZvcm1fZGF0YSA9ICZuOHgwX21lbmVsYXVzX3BsYXRmb3JtX2RhdGE7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDQwMCwgbjh4MF9pMmNfYm9hcmRfaW5mb18xLAorCQkJICAgICAgQVJSQVlfU0laRShuOHgwX2kyY19ib2FyZF9pbmZvXzEpKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbjh4MF9tZW5lbGF1c19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG44eDBfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMjQyeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMjQyeF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuOHgwX2luaXRfaXJxKHZvaWQpCkBAIC0xMTYsNyArNTU5LDkgQEAKIAkJCQlBUlJBWV9TSVpFKG44MDBfc3BpX2JvYXJkX2luZm8pKTsKIAogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwluOHgwX21lbmVsYXVzX2luaXQoKTsKIAluOHgwX29uZW5hbmRfaW5pdCgpOworCW44eDBfbW1jX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChOT0tJQV9OODAwLCAiTm9raWEgTjgwMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggMjMxY2I0ZS4uNmViNzdlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPHBsYXQvdGltZXItZ3AuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gOCwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCX0KIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJYmVhZ2xlX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwpAQCAtNDMwLDYgKzQzMCwxMiBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC00NDMsNyArNDQ5LDcgQEAKIAkvKiBSRVZJU0lUIGxlYXZlIERWSSBwb3dlcmVkIGRvd24gdW50aWwgaXQncyBuZWVkZWQgLi4uICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE3MCwgdHJ1ZSk7CiAKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIAlvbWFwM2JlYWdsZV9mbGFzaF9pbml0KCk7CiAKQEAgLTQ1NSw3ICs0NjEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQM19CRUFHTEUsICJPTUFQMyBCZWFnbGUgQm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IDM0ZGUxNzguLmQ2YmM4OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTQxLDEwICs0MSwxMSBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgT01BUDNfRVZNX1RTX0dQSU8JMTc1CiAjZGVmaW5lIE9NQVAzX0VWTV9FSENJX1ZCVVMJMjIKQEAgLTE0Nyw2ICsxNDgsMTg3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXAzZXZtX2luaXRfc21zYzkxMXgodm9pZCkgeyByZXR1cm47IH0KICNlbmRpZgogCisvKgorICogT01BUDNFVk0gTENEIFBhbmVsIGNvbnRyb2wgc2lnbmFscworICovCisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9MUgkJMgorI2RlZmluZSBPTUFQM0VWTV9MQ0RfUEFORUxfVUQJCTMKKyNkZWZpbmUgT01BUDNFVk1fTENEX1BBTkVMX0lOSQkJMTUyCisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERAkxNTMKKyNkZWZpbmUgT01BUDNFVk1fTENEX1BBTkVMX1FWR0EJCTE1NAorI2RlZmluZSBPTUFQM0VWTV9MQ0RfUEFORUxfUkVTQgkJMTU1CisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8JMjEwCisjZGVmaW5lIE9NQVAzRVZNX0RWSV9QQU5FTF9FTl9HUElPCTE5OQorCitzdGF0aWMgaW50IGxjZF9lbmFibGVkOworc3RhdGljIGludCBkdmlfZW5hYmxlZDsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9kaXNwbGF5X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1JFU0IsICJsY2RfcGFuZWxfcmVzYiIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfcmVzYlxuIik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVAzRVZNX0xDRF9QQU5FTF9SRVNCLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX0lOSSwgImxjZF9wYW5lbF9pbmkiKTsKKwlpZiAocikgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgbGNkX3BhbmVsX2luaVxuIik7CisJCWdvdG8gZXJyXzE7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfSU5JLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1FWR0EsICJsY2RfcGFuZWxfcXZnYSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfcXZnYVxuIik7CisJCWdvdG8gZXJyXzI7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfUVZHQSwgMCk7CisKKwlyID0gZ3Bpb19yZXF1ZXN0KE9NQVAzRVZNX0xDRF9QQU5FTF9MUiwgImxjZF9wYW5lbF9sciIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfbHJcbiIpOworCQlnb3RvIGVycl8zOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT01BUDNFVk1fTENEX1BBTkVMX0xSLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1VELCAibGNkX3BhbmVsX3VkIik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGxjZF9wYW5lbF91ZFxuIik7CisJCWdvdG8gZXJyXzQ7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfVUQsIDEpOworCisJciA9IGdwaW9fcmVxdWVzdChPTUFQM0VWTV9MQ0RfUEFORUxfRU5WREQsICJsY2RfcGFuZWxfZW52ZGQiKTsKKwlpZiAocikgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgbGNkX3BhbmVsX2VudmRkXG4iKTsKKwkJZ290byBlcnJfNTsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERCwgMCk7CisKKwlyZXR1cm47CisKK2Vycl81OgorCWdwaW9fZnJlZShPTUFQM0VWTV9MQ0RfUEFORUxfVUQpOworZXJyXzQ6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9MUik7CitlcnJfMzoKKwlncGlvX2ZyZWUoT01BUDNFVk1fTENEX1BBTkVMX1FWR0EpOworZXJyXzI6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9JTkkpOworZXJyXzE6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9SRVNCKTsKKworfQorCitzdGF0aWMgaW50IG9tYXAzX2V2bV9lbmFibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHZpX2VuYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZW5hYmxlIExDRCwgRFZJIGlzIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fTENEX1BBTkVMX0VOVkRELCAwKTsKKworCWlmIChnZXRfb21hcDNfZXZtX3JldigpID49IE9NQVAzRVZNX0JPQVJEX0dFTl8yKQorCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8sIDEpOworCisJbGNkX2VuYWJsZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM19ldm1fZGlzYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERCwgMSk7CisKKwlpZiAoZ2V0X29tYXAzX2V2bV9yZXYoKSA+PSBPTUFQM0VWTV9CT0FSRF9HRU5fMikKKwkJZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fTENEX1BBTkVMX0JLTElHSFRfR1BJTywgMSk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKKworCWxjZF9lbmFibGVkID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ugb21hcDNfZXZtX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJsY2QiLAorCS5kcml2ZXJfbmFtZQkJPSAic2hhcnBfbHNfcGFuZWwiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDE4LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBvbWFwM19ldm1fZW5hYmxlX2xjZCwKKwkucGxhdGZvcm1fZGlzYWJsZQk9IG9tYXAzX2V2bV9kaXNhYmxlX2xjZCwKK307CisKK3N0YXRpYyBpbnQgb21hcDNfZXZtX2VuYWJsZV90dihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzX2V2bV9kaXNhYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ugb21hcDNfZXZtX3R2X2RldmljZSA9IHsKKwkubmFtZQkJCT0gInR2IiwKKwkuZHJpdmVyX25hbWUJCT0gInZlbmMiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DLAorCS5waHkudmVuYy50eXBlCQk9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCisJLnBsYXRmb3JtX2VuYWJsZQk9IG9tYXAzX2V2bV9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBvbWFwM19ldm1fZGlzYWJsZV90diwKK307CisKK3N0YXRpYyBpbnQgb21hcDNfZXZtX2VuYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChsY2RfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgRFZJLCBMQ0QgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0RWSV9QQU5FTF9FTl9HUElPLCAxKTsKKworCWR2aV9lbmFibGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDNfZXZtX2Rpc2FibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9EVklfUEFORUxfRU5fR1BJTywgMCk7CisKKwlkdmlfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIG9tYXAzX2V2bV9kdmlfZGV2aWNlID0geworCS5uYW1lCQkJPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUJCT0gImdlbmVyaWNfcGFuZWwiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBvbWFwM19ldm1fZW5hYmxlX2R2aSwKKwkucGxhdGZvcm1fZGlzYWJsZQk9IG9tYXAzX2V2bV9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpvbWFwM19ldm1fZHNzX2RldmljZXNbXSA9IHsKKwkmb21hcDNfZXZtX2xjZF9kZXZpY2UsCisJJm9tYXAzX2V2bV90dl9kZXZpY2UsCisJJm9tYXAzX2V2bV9kdmlfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIG9tYXAzX2V2bV9kc3NfZGF0YSA9IHsKKwkubnVtX2RldmljZXMJPSBBUlJBWV9TSVpFKG9tYXAzX2V2bV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBvbWFwM19ldm1fZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJm9tYXAzX2V2bV9sY2RfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNfZXZtX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDNfZXZtX2Rzc19kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgb21hcDNldm1fdm1tYzFfc3VwcGx5ID0gewogCS5zdXBwbHkJCQk9ICJ2bW1jIiwKIH07CkBAIC0xODUsNyArMzY3LDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMJPSAmb21hcDNldm1fdnNpbV9zdXBwbHksCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKIAkJLndpcmVzCQk9IDQsCkBAIC0yMjUsNyArNDA3LDcgQEAKIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAlvbWFwX211eF9pbml0X2dwaW8oNjMsIE9NQVBfUElOX0lOUFVUKTsKIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJb21hcDNldm1fdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CkBAIC0yMzYsNiArNDE4LDE0IEBACiAJICogdGhlIFAyIGNvbm5lY3Rvcjsgbm90YWJseSBMRURBIGZvciB0aGUgTENEIGJhY2tsaWdodC4KIAkgKi8KIAorCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwID09IGxlZEEsIExDRCBCYWNrbGlnaHQgY29udHJvbCAqLworCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIkVOX0xDRF9CS0wiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOworCisJLyogZ3BpbyArIDcgPT0gRFZJIEVuYWJsZSAqLworCWdwaW9fcmVxdWVzdChncGlvICsgNywgIkVOX0RWSSIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgNywgMCk7CisKIAkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMSA9PSBsZWRCIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCkBAIC0yNTgsMjAgKzQ0OCwyMyBAQAogCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCi0JS0VZKDAsIDEsIEtFWV9SSUdIVCksCi0JS0VZKDAsIDIsIEtFWV9BKSwKLQlLRVkoMCwgMywgS0VZX0IpLAotCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMCwgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMCwgMywgS0VZX00pLAorCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCiAJS0VZKDEsIDEsIEtFWV9VUCksCi0JS0VZKDEsIDIsIEtFWV9FKSwKLQlLRVkoMSwgMywgS0VZX0YpLAotCUtFWSgyLCAwLCBLRVlfRU5URVIpLAotCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDEsIDIsIEtFWV9JKSwKKwlLRVkoMSwgMywgS0VZX04pLAorCisJS0VZKDIsIDAsIEtFWV9BKSwKKwlLRVkoMiwgMSwgS0VZX0UpLAogCUtFWSgyLCAyLCBLRVlfSiksCi0JS0VZKDIsIDMsIEtFWV9LKSwKLQlLRVkoMywgMCwgS0VZX00pLAotCUtFWSgzLCAxLCBLRVlfTiksCi0JS0VZKDMsIDIsIEtFWV9PKSwKKwlLRVkoMiwgMywgS0VZX08pLAorCisJS0VZKDMsIDAsIEtFWV9CKSwKKwlLRVkoMywgMSwgS0VZX0YpLAorCUtFWSgzLCAyLCBLRVlfSyksCiAJS0VZKDMsIDMsIEtFWV9QKQogfTsKIApAQCAtMzAwLDYgKzQ5Myw0NyBAQAogCS5hdWRpbyA9ICZvbWFwM2V2bV9hdWRpb19kYXRhLAogfTsKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92ZGRhX2RhY19zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmRkYV9kYWMiLAorCS5kZXYJCT0gJm9tYXAzX2V2bV9kc3NfZGV2aWNlLmRldiwKK307CisKKy8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBvbWFwM19ldm1fdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZvbWFwM19ldm1fdmRkYV9kYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92cGxsMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmR2aSIsCisJLmRldgkJPSAmb21hcDNfZXZtX2xjZF9kZXZpY2UuZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXAzX2V2bV92cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVkRWSSIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZvbWFwM19ldm1fdnBsbDJfc3VwcGx5LAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgb21hcDNldm1fdHdsZGF0YSA9IHsKIAkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELApAQCAtMzEwLDYgKzU0NCw4IEBACiAJLnVzYgkJPSAmb21hcDNldm1fdXNiX2RhdGEsCiAJLmdwaW8JCT0gJm9tYXAzZXZtX2dwaW9fZGF0YSwKIAkuY29kZWMJCT0gJm9tYXAzZXZtX2NvZGVjX2RhdGEsCisJLnZkYWMJCT0gJm9tYXAzX2V2bV92ZGFjLAorCS52cGxsMgkJPSAmb21hcDNfZXZtX3ZwbGwyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG9tYXAzZXZtX2kyY19ib2FyZGluZm9bXSA9IHsKQEAgLTMzNywxNSArNTczLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNfZXZtX2xjZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAzZXZtX2xjZCIsCi0JLmlkCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcDNfZXZtX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkuY3RybF9uYW1lCT0gImludGVybmFsIiwKLX07Ci0KIHN0YXRpYyB2b2lkIGFkczc4NDZfZGV2X2luaXQodm9pZCkKIHsKIAlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVAzX0VWTV9UU19HUElPLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKQpAQCAtMzkzLDcgKzYyMCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvbWFwM19ldm1fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX0xDRCwJCSZvbWFwM19ldm1fbGNkX2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0X2lycSh2b2lkKQpAQCAtNDA2LDcgKzYzMiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM19ldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm9tYXAzX2V2bV9sY2RfZGV2aWNlLAorCSZvbWFwM19ldm1fZHNzX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC00MjQsMTIgKzY1MCwyNCBAQAogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX1dBS0VVUEVOQUJMRSksCisJT01BUDNfTVVYKE1DU1BJMV9DUzEsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQIHwKKwkJCQlPTUFQX1BJTl9PRkZfSU5QVVRfUFVMTFVQIHwKKwkJCQlPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKICNlbHNlCiAjZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0KHZvaWQpCiB7CiAJb21hcDNfZXZtX2dldF9yZXZpc2lvbigpOwpAQCAtNDQzLDEwICs2ODEsMTAgQEAKIAkJCQlBUlJBWV9TSVpFKG9tYXAzZXZtX3NwaV9ib2FyZF9pbmZvKSk7CiAKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0jaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKKwogCS8qIE9NQVAzRVZNIHVzZXMgSVNQMTUwNCBwaHkgYW5kIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLwogCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKLSNlbmRpZgorCiAJaWYgKGdldF9vbWFwM19ldm1fcmV2KCkgPj0gT01BUDNFVk1fQk9BUkRfR0VOXzIpIHsKIAkJLyogZW5hYmxlIEVIQ0kgVkJVUyB1c2luZyBHUElPMjIgKi8KIAkJb21hcF9tdXhfaW5pdF9ncGlvKDIyLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtNDY5LDE2ICs3MDcsMTcgQEAKIAkJb21hcF9tdXhfaW5pdF9ncGlvKDEzNSwgT01BUF9QSU5fT1VUUFVUKTsKIAkJZWhjaV9wZGF0YS5yZXNldF9ncGlvX3BvcnRbMV0gPSAxMzU7CiAJfQotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwM2V2bV9pbml0X3Ntc2M5MTF4KCk7CisJb21hcDNfZXZtX2Rpc3BsYXlfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfZXZtX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVAzRVZNLCAiT01BUDMgRVZNIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGVmMTdjZjEuLjQ4MjdmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtNDAsMTAgKzQwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJoc21tYy5oIgogCiAjZGVmaW5lIE9NQVAzX1BBTkRPUkFfVFNfR1BJTwkJOTQKIApAQCAtMTkyLDcgKzE5Myw0MSBAQAogCS5yZXAJCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG9tYXAzcGFuZG9yYV9tbWNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIHBhbmRvcmFfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJ0cG9fdGQwNDNtdGVhMV9wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMjQsCisJLnJlc2V0X2dwaW8JCT0gMTU3LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgcGFuZG9yYV90dl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJ0diIsCisJLmRyaXZlcl9uYW1lCQk9ICJ2ZW5jIiwKKwkudHlwZQkJCT0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQywKKwkucGh5LnZlbmMudHlwZQkJPSBPTUFQX0RTU19WRU5DX1RZUEVfU1ZJREVPLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnBhbmRvcmFfZHNzX2RldmljZXNbXSA9IHsKKwkmcGFuZG9yYV9sY2RfZGV2aWNlLAorCSZwYW5kb3JhX3R2X2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBwYW5kb3JhX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUocGFuZG9yYV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBwYW5kb3JhX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZQk9ICZwYW5kb3JhX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYW5kb3JhX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFuZG9yYV9kc3NfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG9tYXAzcGFuZG9yYV9tbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKIAkJLndpcmVzCQk9IDQsCkBAIC0yMTcsMjUgKzI1MiwxMyBAQAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZtbWMxX3N1cHBseSA9IHsKLQkuc3VwcGx5CQkJPSAidm1tYyIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92bW1jMl9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAotfTsKLQogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKIAkvKiBncGlvICsgezAsMX0gaXMgIm1tY3swLDF9X2NkIiAoaW5wdXQvSVJRKSAqLwogCW9tYXAzcGFuZG9yYV9tbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwogCW9tYXAzcGFuZG9yYV9tbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOwotCXR3bDQwMzBfbW1jX2luaXQob21hcDNwYW5kb3JhX21tYyk7Ci0KLQkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCi0JcGFuZG9yYV92bW1jMV9zdXBwbHkuZGV2ID0gb21hcDNwYW5kb3JhX21tY1swXS5kZXY7Ci0JcGFuZG9yYV92bW1jMl9zdXBwbHkuZGV2ID0gb21hcDNwYW5kb3JhX21tY1sxXS5kZXY7CisJb21hcDJfaHNtbWNfaW5pdChvbWFwM3BhbmRvcmFfbW1jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ3LDYgKzI3MCwzNiBAQAogCS5zZXR1cAkJPSBvbWFwM3BhbmRvcmFfdHdsX2dwaW9fc2V0dXAsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92bW1jMV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjAiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfdm1tYzJfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4xIik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92ZGRzX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkc19zZGkiLCAib21hcGRzcyIpLAorCVJFR1VMQVRPUl9TVVBQTFkoInZkZHNfZHNpIiwgIm9tYXBkc3MiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZjY19sY2Rfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAiZGlzcGxheTAiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfdXNiX3BoeV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoImhzdXNiMCIsICJlaGNpLW9tYXAuMCIpOworCisvKiBhZHM3ODQ2IG9uIFNQSSBhbmQgMiBudWIgY29udHJvbGxlcnMgb24gSTJDICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92YXV4NF9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzcGkxLjAiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAiMy0wMDY2IiksCisJUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgIjMtMDA2NyIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfYWRhY19zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzb2MtYXVkaW8iKTsKKwogLyogVk1NQzEgZm9yIE1NQzEgcGlucyBDTUQsIENMSywgREFUMC4uREFUMyAoMjAgbUEsIHBsdXMgY2FyZCA9PSBtYXggMjIwIG1BKSAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMjc3LDYgKzMzMCw5NiBAQAogCS5jb25zdW1lcl9zdXBwbGllcwk9ICZwYW5kb3JhX3ZtbWMyX3N1cHBseSwKIH07CiAKKy8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwYW5kb3JhX3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcGFuZG9yYV92ZGRhX2RhY19zdXBwbHksCit9OworCisvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcGFuZG9yYV92cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHBhbmRvcmFfdmRkc19zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gcGFuZG9yYV92ZGRzX3N1cHBsaWVzLAorfTsKKworLyogVkFVWDEgZm9yIExDRCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdmF1eDEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAzMDAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcGFuZG9yYV92Y2NfbGNkX3N1cHBseSwKK307CisKKy8qIFZBVVgyIGZvciBVU0IgaG9zdCBQSFkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwYW5kb3JhX3ZhdXgyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnBhbmRvcmFfdXNiX3BoeV9zdXBwbHksCit9OworCisvKiBWQVVYNCBmb3IgYWRzNzg0NiBhbmQgbnVicyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdmF1eDQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShwYW5kb3JhX3ZhdXg0X3N1cHBsaWVzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBwYW5kb3JhX3ZhdXg0X3N1cHBsaWVzLAorfTsKKworLyogVlNJTSBmb3IgYXVkaW8gREFDICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcGFuZG9yYV92c2ltID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnBhbmRvcmFfYWRhY19zdXBwbHksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgb21hcDNwYW5kb3JhX3VzYl9kYXRhID0gewogCS51c2JfbW9kZQk9IFQyX1VTQl9NT0RFX1VMUEksCiB9OwpAQCAtMjk4LDYgKzQ0MSwxMiBAQAogCS5jb2RlYwkJPSAmb21hcDNwYW5kb3JhX2NvZGVjX2RhdGEsCiAJLnZtbWMxCQk9ICZwYW5kb3JhX3ZtbWMxLAogCS52bW1jMgkJPSAmcGFuZG9yYV92bW1jMiwKKwkudmRhYwkJPSAmcGFuZG9yYV92ZGFjLAorCS52cGxsMgkJPSAmcGFuZG9yYV92cGxsMiwKKwkudmF1eDEJCT0gJnBhbmRvcmFfdmF1eDEsCisJLnZhdXgyCQk9ICZwYW5kb3JhX3ZhdXgyLAorCS52YXV4NAkJPSAmcGFuZG9yYV92YXV4NCwKKwkudnNpbQkJPSAmcGFuZG9yYV92c2ltLAogCS5rZXlwYWQJCT0gJnBhbmRvcmFfa3BfZGF0YSwKIH07CiAKQEAgLTM2NSw2ICs1MTQsMTIgQEAKIAkJLmNvbnRyb2xsZXJfZGF0YQk9ICZhZHM3ODQ2X21jc3BpX2NvbmZpZywKIAkJLmlycQkJCT0gT01BUF9HUElPX0lSUShPTUFQM19QQU5ET1JBX1RTX0dQSU8pLAogCQkucGxhdGZvcm1fZGF0YQkJPSAmYWRzNzg0Nl9jb25maWcsCisJfSwgeworCQkubW9kYWxpYXMJCT0gInRwb190ZDA0M210ZWExX3BhbmVsX3NwaSIsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAxLAorCQkubWF4X3NwZWVkX2h6CQk9IDM3NTAwMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnBhbmRvcmFfbGNkX2RldmljZSwKIAl9CiB9OwogCkBAIC0zNzksNiArNTM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM3BhbmRvcmFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnBhbmRvcmFfbGVkc19ncGlvLAogCSZwYW5kb3JhX2tleXNfZ3BpbywKKwkmcGFuZG9yYV9kc3NfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgZWhjaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTQwMSw2ICs1NTcsMTIgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNwYW5kb3JhX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwpAQCAtNDEzLDcgKzU3NSw3IEBACiAJb21hcDNwYW5kb3JhX2Fkczc4NDZfaW5pdCgpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogCXBhbmRvcmFfa2V5c19ncGlvX2luaXQoKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKQEAgLTQyMyw3ICs1ODUsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQM19QQU5ET1JBLCAiUGFuZG9yYSBIYW5kaGVsZCBDb25zb2xlIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCBmZTNkMjJjLi4zOTQzZDBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8cGxhdC90aW1lci1ncC5oPgogCiAjaW5jbHVkZSAibXV4LmgiCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJoc21tYy5oIgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gOCwKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJdG91Y2hib29rX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwpAQCAtNTI3LDYgKzUyNywxMiBAQAogfQogX19lYXJseV9wYXJhbSgidGJyPSIsIGVhcmx5X3RvdWNoYm9va19yZXZpc2lvbik7CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdCh2b2lkKQogewogCXBtX3Bvd2VyX29mZiA9IG9tYXAzX3RvdWNoYm9va19wb3dlcm9mZjsKQEAgLTU0NSw3ICs1NTEsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG9tYXAzX2Fkczc4NDZfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShvbWFwM19hZHM3ODQ2X3NwaV9ib2FyZF9pbmZvKSk7CiAJb21hcDNfYWRzNzg0Nl9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CiAJb21hcDN0b3VjaGJvb2tfZmxhc2hfaW5pdCgpOwogCkBAIC01NTcsNyArNTYzLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVE9VQ0hCT09LLCAiT01BUDMgdG91Y2hib29rIEJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCBkMTkyZGQ5Li41MDg3MmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC00OCw3ICs0OCw3IEBACiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgT1ZFUk9fR1BJT19CVF9YR0FURQkxNQogI2RlZmluZSBPVkVST19HUElPX1cyV19OUkVTRVQJMTYKQEAgLTI3Miw3ICsyNzIsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gPSB7CitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubW1jCQk9IDEsCiAJCS53aXJlcwkJPSA0LApAQCAtMjk3LDcgKzI5Nyw3IEBACiBzdGF0aWMgaW50IG92ZXJvX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7Ci0JdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCW9tYXAyX2hzbW1jX2luaXQobW1jKTsKIAogCW92ZXJvX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwogCkBAIC00MTMsNiArNDEzLDEyIEBACiAjZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwpAQCAtNDIwLDcgKzQyNiw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMob3Zlcm9fZGV2aWNlcywgQVJSQVlfU0laRShvdmVyb19kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW92ZXJvX2ZsYXNoX2luaXQoKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIAlvdmVyb19hZHM3ODQ2X2luaXQoKTsKIAlvdmVyb19pbml0X3Ntc2M5MTF4KCk7CkBAIC00NjksNyArNDc1LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPVkVSTywgIkd1bXN0aXggT3Zlcm8iKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBhY2FmZGJjLi40Mzc3YTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBTWVNURU1fUkVWX0JfVVNFU19WQVVYMwkweDE2OTkKICNkZWZpbmUgU1lTVEVNX1JFVl9TX1VTRVNfVkFVWDMgMHg4CkBAIC0yMDksNyArMjA5LDQ3IEBACiAJLmlycV9saW5lCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKy8qIEVuYWJsZSBpbnB1dCBsb2dpYyBhbmQgcHVsbCBhbGwgbGluZXMgdXAgd2hlbiBlTU1DIGlzIG9uLiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCByeDUxX21tYzJfb25fbXV4W10gPSB7CisJT01BUDNfTVVYKFNETU1DMl9DTUQsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDAsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDEsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDIsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDMsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDQsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDUsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDYsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDcsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKworLyogRGlzYWJsZSBpbnB1dCBsb2dpYyBhbmQgcHVsbCBhbGwgbGluZXMgZG93biB3aGVuIGVNTUMgaXMgb2ZmLiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCByeDUxX21tYzJfb2ZmX211eFtdID0geworCU9NQVAzX01VWChTRE1NQzJfQ01ELCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUMCwgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDEsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQyLCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUMywgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDQsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQ1LCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUNiwgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDcsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisKKy8qCisgKiBDdXJyZW50IGZsb3dzIHRvIGVNTUMgd2hlbiBlTU1DIGlzIG9mZiBhbmQgdGhlIGRhdGEgbGluZXMgYXJlIHB1bGxlZCB1cCwKKyAqIHNvIHB1bGwgdGhlbSBkb3duLiBOLkIuIHdlIHB1bGwgOCBsaW5lcyBiZWNhdXNlIHdlIGFyZSB1c2luZyA4IGxpbmVzLgorICovCitzdGF0aWMgdm9pZCByeDUxX21tYzJfcmVtdXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKQoreworCWlmIChwb3dlcl9vbikKKwkJb21hcF9tdXhfd3JpdGVfYXJyYXkocng1MV9tbWMyX29uX211eCk7CisJZWxzZQorCQlvbWFwX211eF93cml0ZV9hcnJheShyeDUxX21tYzJfb2ZmX211eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm5hbWUJCT0gImV4dGVybmFsIiwKIAkJLm1tYwkJPSAxLApAQCAtMjIyLDI1ICsyNjIsMjkgQEAKIAl7CiAJCS5uYW1lCQk9ICJpbnRlcm5hbCIsCiAJCS5tbWMJCT0gMiwKLQkJLndpcmVzCQk9IDgsCisJCS53aXJlcwkJPSA4LCAvKiBTZWUgYWxzbyByeDUxX21tYzJfcmVtdXggKi8KIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUJPSB0cnVlLAogCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKKwkJLnJlbXV4CQk9IHJ4NTFfbW1jMl9yZW11eCwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZtbWMxX3N1cHBseSA9IHsKLQkuc3VwcGx5CQkJPSAidm1tYyIsCisJLnN1cHBseSAgID0gInZtbWMiLAorCS5kZXZfbmFtZSA9ICJtbWNpLW9tYXAtaHMuMCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAorCS5zdXBwbHkgICA9ICJ2bW1jIiwKKwkuZGV2X25hbWUgPSAibW1jaS1vbWFwLWhzLjEiLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdnNpbV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKKwkuc3VwcGx5ICAgPSAidm1tY19hdXgiLAorCS5kZXZfbmFtZSA9ICJtbWNpLW9tYXAtaHMuMSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92YXV4MSA9IHsKQEAgLTM3NSwxMiArNDE5LDYgQEAKIAlncGlvX3JlcXVlc3QoZ3BpbyArIDcsICJzcGVha2VyX2VuIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAxKTsKIAotCS8qIHNldCB1cCBNTUMgYWRhcHRlcnMsIGxpbmtpbmcgdGhlaXIgcmVndWxhdG9ycyB0byB0aGVtICovCi0JdHdsNDAzMF9tbWNfaW5pdChtbWMpOwotCXJ4NTFfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7Ci0Jcng1MV92bW1jMl9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKLQlyeDUxX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1sxXS5kZXY7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUxLDUgKzc4OSw2IEBACiAJcng1MV9pbml0X3dsMTI1MSgpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJ4NTFfcGVyaXBoZXJhbHNfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX3NwaV9ib2FyZF9pbmZvKSk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IDY3YmIzNDcuLmIxNTVjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zMCw5ICszMSw0OSBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlICJtdXguaCIKKyNpbmNsdWRlICJwbS5oIgorCisjZGVmaW5lIFJYNTFfR1BJT19TTEVFUF9JTkQgMTYyCiAKIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpyeDUxX2dldF9zZHJhbV90aW1pbmdzKHZvaWQpOwogCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJPSAic2xlZXBfaW5kIiwKKwkJLmdwaW8JPSBSWDUxX0dQSU9fU0xFRVBfSU5ELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX3BhcmFtcyByeDUxX2NwdWlkbGVfcGFyYW1zW10gPSB7CisJLyogQzEgKi8KKwl7MSwgMTEwLCAxNjIsIDV9LAorCS8qIEMyICovCisJezEsIDEwNiwgMTgwLCAzMDl9LAorCS8qIEMzICovCisJezAsIDEwNywgNDEwLCA0NjA1N30sCisJLyogQzQgKi8KKwl7MCwgMTIxLCAzMzc0LCA0NjA1N30sCisJLyogQzUgKi8KKwl7MSwgODU1LCAxMTQ2LCA0NjA1N30sCisJLyogQzYgKi8KKwl7MCwgNzU4MCwgNDEzNCwgNDg0MzI5fSwKKwkvKiBDNyAqLworCXsxLCA3NTA1LCAxNTI3NCwgNDg0MzI5fSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHJ4NTFfbGNkX2NvbmZpZyA9IHsKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CkBAIC02Miw2ICsxMDMsNyBAQAogCiAJb21hcF9ib2FyZF9jb25maWcgPSByeDUxX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShyeDUxX2NvbmZpZyk7CisJb21hcDNfcG1faW5pdF9jcHVpZGxlKHJ4NTFfY3B1aWRsZV9wYXJhbXMpOwogCXNkcmNfcGFyYW1zID0gcng1MV9nZXRfc2RyYW1fdGltaW5ncygpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KHNkcmNfcGFyYW1zLCBzZHJjX3BhcmFtcyk7CiAJb21hcF9pbml0X2lycSgpOwpAQCAtNzgsMjIgKzEyMCwzMCBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX1BFUklQSEVSQUwsCisJLnBvd2VyCQkJPSAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogCXJ4NTFfcGVyaXBoZXJhbHNfaW5pdCgpOwogCiAJLyogRW5zdXJlIFNEUkMgcGlucyBhcmUgbXV4J2QgZm9yIHNlbGYtcmVmcmVzaCAqLwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTEiLCBPTUFQX1BJTl9PVVRQVVQpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZsZWRzX2dwaW8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1zZHAtZmxhc2guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtc2RwLWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiODhkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtc2RwLWZsYXNoLmMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBib2FyZC1zZHAtZmxhc2guYworICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAtZmxhc2guYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVmltYWwgU2luZ2ggPHZpbWFsc2luZ2hAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvdGMuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXNkcC5oPgorCisjZGVmaW5lIFJFR19GUEdBX1JFVgkJCTB4MTAKKyNkZWZpbmUgUkVHX0ZQR0FfRElQX1NXSVRDSF9JTlBVVDIJMHg2MAorI2RlZmluZSBNQVhfU1VQUE9SVEVEX0dQTUNfQ09ORklHCTMKKworI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwIC8qIGRlYnVnIGJvYXJkICovCisKKyNkZWZpbmUgUERDX05PUgkJMQorI2RlZmluZSBQRENfTkFORAkyCisjZGVmaW5lIFBEQ19PTkVOQU5ECTMKKyNkZWZpbmUgREJHX01QREIJNAorCisvKiB2YXJpb3VzIG1lbW9yeSBzaXplcyAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYxCVNaXzY0TQkvKiBOT1IgZmxhc2ggKDY0IE1lZyBhbGlnbmVkKSAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYyCVNaXzEyOE0JLyogTk9SIGZsYXNoICgyNTYgTWVnIGFsaWduZWQpICovCisKKy8qCisgKiBTRFAzNDMwIFYyIEJvYXJkIENTIG9yZ2FuaXphdGlvbgorICogRGlmZmVyZW50IGZyb20gU0RQMzQzMCBWMS4gTm93IDQgc3dpdGNoZXMgdXNlZCB0byBzcGVjaWZ5IENTCisgKgorICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCisgKgorICogUkVWSVNJVDogQWRkIHN1cHBvcnQgZm9yIDI0MzAgU0RQCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoaXBfc2VsX3NkcFtdW0dQTUNfQ1NfTlVNXSA9IHsKKwl7UERDX05PUiwgUERDX05BTkQsIFBEQ19PTkVOQU5ELCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTEgKi8KKwl7UERDX09ORU5BTkQsIFBEQ19OQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTAgKi8KKwl7UERDX05BTkQsIFBEQ19PTkVOQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNkcF9ub3JfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RwX25vcl9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHBfbm9yX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZzZHBfbm9yX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNkcF9ub3JfcmVzb3VyY2UsCit9OworCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX25vcl9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9ub3JfcGFydHMsIHU4IGNzKQoreworCWludCBlcnI7CisKKwlzZHBfbm9yX2RhdGEucGFydHMJPSBzZHBfbm9yX3BhcnRzLnBhcnRzOworCXNkcF9ub3JfZGF0YS5ucl9wYXJ0cwk9IHNkcF9ub3JfcGFydHMubnJfcGFydHM7CisKKwkvKiBDb25maWd1cmUgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBvZiBOT1IgZGV2aWNlICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMiAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7CisJCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjIgLSAxOworCX0gZWxzZSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMSAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7CisJCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjEgLSAxOworCX0KKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5PUjogQ2FuJ3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHBfbm9yX2RldmljZSkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIJIlVuYWJsZSB0byByZWdpc3RlciBOT1IgZGV2aWNlXG4iKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhID0geworCS5kbWFfY2hhbm5lbAk9IC0xLCAgIC8qIGRpc2FibGUgRE1BIGluIE9NQVAgT25lTkFORCBkcml2ZXIgKi8KK307CisKK3N0YXRpYyB2b2lkCitfX2luaXQgYm9hcmRfb25lbmFuZF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9vbmVuYW5kX3BhcnRzLCB1OCBjcykKK3sKKwlib2FyZF9vbmVuYW5kX2RhdGEuY3MJCT0gY3M7CisJYm9hcmRfb25lbmFuZF9kYXRhLnBhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMucGFydHM7CisJYm9hcmRfb25lbmFuZF9kYXRhLm5yX3BhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMubnJfcGFydHM7CisKKwlncG1jX29uZW5hbmRfaW5pdCgmYm9hcmRfb25lbmFuZF9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX29uZW5hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfb25lbmFuZF9wYXJ0cywgdTggY3MpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX01URF9PTkVOQU5EX09NQVAyIHx8IENPTkZJR19NVERfT05FTkFORF9PTUFQMl9NT0RVTEUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKKworLyogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzICovCitzdGF0aWMgc3RydWN0IGdwbWNfdGltaW5ncyBuYW5kX3RpbWluZ3MgPSB7CisKKwkuc3luY19jbGsgPSAwLAorCisJLmNzX29uID0gMCwKKwkuY3NfcmRfb2ZmID0gMzYsCisJLmNzX3dyX29mZiA9IDM2LAorCisJLmFkdl9vbiA9IDYsCisJLmFkdl9yZF9vZmYgPSAyNCwKKwkuYWR2X3dyX29mZiA9IDM2LAorCisJLndlX29mZiA9IDMwLAorCS5vZV9vZmYgPSA0OCwKKworCS5hY2Nlc3MgPSA1NCwKKwkucmRfY3ljbGUgPSA3MiwKKwkud3JfY3ljbGUgPSA3MiwKKworCS53cl9hY2Nlc3MgPSAzMCwKKwkud3JfZGF0YV9tdXhfYnVzID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgc2RwX25hbmRfZGF0YSA9IHsKKwkubmFuZF9zZXR1cAk9IE5VTEwsCisJLmdwbWNfdAkJPSAmbmFuZF90aW1pbmdzLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworCS5kZXZfcmVhZHkJPSBOVUxMLAorCS5kZXZzaXplCT0gMCwJLyogJzAnIGZvciA4LWJpdCwgJzEnIGZvciAxNi1iaXQgZGV2aWNlICovCit9OworCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfbmFuZF9wYXJ0cywgdTggY3MpCit7CisJc2RwX25hbmRfZGF0YS5jcwkJPSBjczsKKwlzZHBfbmFuZF9kYXRhLnBhcnRzCQk9IHNkcF9uYW5kX3BhcnRzLnBhcnRzOworCXNkcF9uYW5kX2RhdGEubnJfcGFydHMJCT0gc2RwX25hbmRfcGFydHMubnJfcGFydHM7CisKKwlzZHBfbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIJPSAodm9pZCAqKShPTUFQMzRYWF9HUE1DX1ZJUlQgKworCQkJCQkJCUdQTUNfQ1MwX0JBU0UgKworCQkJCQkJCWNzICogR1BNQ19DU19TSVpFKTsKKwlzZHBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIJID0gKHZvaWQgKikgKE9NQVAzNFhYX0dQTUNfVklSVCk7CisKKwlncG1jX25hbmRfaW5pdCgmc2RwX25hbmRfZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK19faW5pdCBib2FyZF9uYW5kX2luaXQoc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgc2RwX25hbmRfcGFydHMsIHU4IGNzKQoreworfQorI2VuZGlmIC8qIENPTkZJR19NVERfTkFORF9PTUFQMiB8fCBDT05GSUdfTVREX05BTkRfT01BUDJfTU9EVUxFICovCisKKy8qKgorICogZ2V0X2dwbWMwX3R5cGUgLSBSZWFkcyB0aGUgRlBHQSBESVBfU1dJVENIX0lOUFVUX1JFR0lTVEVSMiB0byBnZXQKKyAqIHRoZSB2YXJpb3VzIGNzIHZhbHVlcy4KKyAqLworc3RhdGljIHU4IGdldF9ncG1jMF90eXBlKHZvaWQpCit7CisJdTggY3MgPSAwOworCXZvaWQgX19pb21lbSAqZnBnYV9tYXBfYWRkcjsKKworCWZwZ2FfbWFwX2FkZHIgPSBpb3JlbWFwKERFQlVHX0JBU0UsIDQwOTYpOworCWlmICghZnBnYV9tYXBfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIShfX3Jhd19yZWFkdyhmcGdhX21hcF9hZGRyICsgUkVHX0ZQR0FfUkVWKSkpCisJCS8qIHdlIGRvbnQgaGF2ZSBhbiBERUJVRyBGUEdBPz8/ICovCisJCS8qIERlcGVuZCBvbiAjZGVmaW5lcyEhIGRlZmF1bHQgdG8gc3RyYXRhIGJvb3QgcmV0dXJuIHBhcmFtICovCisJCWdvdG8gdW5tYXA7CisKKwkvKiBTOC1ESVAtT0ZGID0gMSwgUzgtRElQLU9OID0gMCAqLworCWNzID0gX19yYXdfcmVhZHcoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX0RJUF9TV0lUQ0hfSU5QVVQyKSAmIDB4ZjsKKworCS8qIEVTMi4wIFNEUCdzIG9ud2FyZHMgNCBkaXAgc3dpdGNoZXMgYXJlIHByb3ZpZGVkIGZvciBDUyAqLworCWlmIChvbWFwX3JldigpID49IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJLyogY2hhbmdlIChTOC0xOjQ9RFMtMjowKSB0byAoUzgtNDoxPURTLTI6MCkgKi8KKwkJY3MgPSAoKGNzICYgOCkgPj4gMykgfCAoKGNzICYgNCkgPj4gMSkgfAorCQkJKChjcyAmIDIpIDw8IDEpIHwgKChjcyAmIDEpIDw8IDMpOworCWVsc2UKKwkJLyogY2hhbmdlIChTOC0xOjM9RFMtMjowKSB0byAoUzgtMzoxPURTLTI6MCkgKi8KKwkJY3MgPSAoKGNzICYgNCkgPj4gMikgfCAoY3MgJiAyKSB8ICgoY3MgJiAxKSA8PCAyKTsKK3VubWFwOgorCWlvdW5tYXAoZnBnYV9tYXBfYWRkcik7CisJcmV0dXJuIGNzOworfQorCisvKioKKyAqIHNkcDM0MzBfZmxhc2hfaW5pdCAtIElkZW50aWZ5IGRldmljZXMgY29ubmVjdGVkIHRvIEdQTUMgYW5kIHJlZ2lzdGVyLgorICoKKyAqIEByZXR1cm4gLSB2b2lkLgorICovCit2b2lkIF9faW5pdCBzZHBfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfcGFydGl0aW9uX2luZm9bXSkKK3sKKwl1OAkJY3MgPSAwOworCXU4CQlub3JjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKwl1OAkJbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCXU4CQlvbmVuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CisJdTgJCWlkeDsKKwl1bnNpZ25lZCBjaGFyCSpjb25maWdfc2VsID0gTlVMTDsKKworCS8qIFJFVklTSVQ6IElzIHRoaXMgcmV0dXJuIGNvcnJlY3QgaWR4IGZvciAyNDMwIFNEUD8KKwkgKiBmb3Igd2hpY2ggY3MgY29uZmlndXJhdGlvbiBtYXRjaGVzIGZvciAyNDMwIFNEUD8KKwkgKi8KKwlpZHggPSBnZXRfZ3BtYzBfdHlwZSgpOworCWlmIChpZHggPj0gTUFYX1NVUFBPUlRFRF9HUE1DX0NPTkZJRykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGNoaXAgc2VsZWN0OiAlZFxuIiwgX19mdW5jX18sIGNzKTsKKwkJcmV0dXJuOworCX0KKwljb25maWdfc2VsID0gKHVuc2lnbmVkIGNoYXIgKikoY2hpcF9zZWxfc2RwW2lkeF0pOworCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJc3dpdGNoIChjb25maWdfc2VsW2NzXSkgeworCQljYXNlIFBEQ19OT1I6CisJCQlpZiAobm9yY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlub3JjcyA9IGNzOworCQkJYnJlYWs7CisJCWNhc2UgUERDX05BTkQ6CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCQlicmVhazsKKwkJY2FzZSBQRENfT05FTkFORDoKKwkJCWlmIChvbmVuYW5kY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlvbmVuYW5kY3MgPSBjczsKKwkJCWJyZWFrOworCQl9OworCQljcysrOworCX0KKworCWlmIChub3JjcyA+IEdQTUNfQ1NfTlVNKQorCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkiIGluIEdQTUNcbiAiKTsKKwllbHNlCisJCWJvYXJkX25vcl9pbml0KHNkcF9wYXJ0aXRpb25faW5mb1swXSwgbm9yY3MpOworCisJaWYgKG9uZW5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkiIGluIEdQTUNcbiAiKTsKKwllbHNlCisJCWJvYXJkX29uZW5hbmRfaW5pdChzZHBfcGFydGl0aW9uX2luZm9bMV0sIG9uZW5hbmRjcyk7CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSIgaW4gR1BNQ1xuICIpOworCWVsc2UKKwkJYm9hcmRfbmFuZF9pbml0KHNkcF9wYXJ0aXRpb25faW5mb1syXSwgbmFuZGNzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKaW5kZXggMWUzZGZiNi4uY2E5NWQ4ZCAxMDA3NTUKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKQEAgLTI0LDcgKzI0LDggQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgIm11eC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKIC8qIFpvb20yIGhhcyBRd2VydHkga2V5Ym9hcmQqLwogc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKQEAgLTE1MCw3ICsxNTEsNyBAQAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gJnpvb21fdnNpbV9zdXBwbHksCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdIF9faW5pdGRhdGEgPSB7CiAJewogCQkubmFtZQkJPSAiZXh0ZXJuYWwiLAogCQkubW1jCQk9IDEsCkBAIC0xNzUsNyArMTc2LDcgQEAKIHsKIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzIC4uLiB3ZSAia25vdyIgdGhlCiAJICogcmVndWxhdG9ycyB3aWxsIGJlIHNldCB1cCBvbmx5ICphZnRlciogd2UgcmV0dXJuLgpAQCAtMjYzLDkgKzI2NCwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCitzdGF0aWMgdm9pZCBlbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSh2b2lkKQoreworCS8qIFQyIGludGVycnVwdCBsaW5lIChrZXlwYWQpICovCisJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uaXJxIiwKKwkJT01BUF9XQUtFVVBfRU4gfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworfQorCiB2b2lkIF9faW5pdCB6b29tX3BlcmlwaGVyYWxzX2luaXQodm9pZCkKIHsKIAlvbWFwX2kyY19pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOworCWVuYWJsZV9ib2FyZF93YWtldXBfc291cmNlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKaW5kZXggYmI4N2NmNy4uOWEyNmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwpAQCAtODcsNyArODcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbTJfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9aT09NMiwgIk9NQVAgWm9vbTIgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCmluZGV4IGE5ZmU5MTguLmQzZTNjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKQEAgLTIwLDE0ICsyMCwxNSBAQAogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInNkcmFtLWh5bml4LWg4bWJ4MDB1MG1lci0wZW0uaCIKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9tYXBfaW8odm9pZCkKIHsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAyX3NldF9nbG9iYWxzXzM2eHgoKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHpvb21fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKQEAgLTUxLDExICs1MiwyNCBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBvcnRfbW9kZVswXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucG9ydF9tb2RlWzFdCQk9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCisJLnBvcnRfbW9kZVsyXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucGh5X3Jlc2V0CQk9IHRydWUsCisJLnJlc2V0X2dwaW9fcG9ydFswXQk9IC1FSU5WQUwsCisJLnJlc2V0X2dwaW9fcG9ydFsxXQk9IDY0LAorCS5yZXNldF9ncGlvX3BvcnRbMl0JPSAtRUlOVkFMLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9pbml0KHZvaWQpCiB7CiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JQKTsKIAl6b29tX3BlcmlwaGVyYWxzX2luaXQoKTsKIAl6b29tX2RlYnVnYm9hcmRfaW5pdCgpOworCisJb21hcF9tdXhfaW5pdF9ncGlvKDY0LCBPTUFQX1BJTl9PVVRQVVQpOworCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfWk9PTTMsICJPTUFQIFpvb20zIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9hcGxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkNzI0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogT01BUDJ4eHggQVBMTCBjbG9jayBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3RzOgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIEJhc2VkIG9uIGVhcmxpZXIgd29yayBieSBUdXVra2EgVGlra2FuZW4sIFRvbnkgTGluZGdyZW4sCisgKiBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKworLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCisjZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMworCisvKiBDTV9DTEtTRUwxX1BMTC5BUExMU19DTEtJTiBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBBUExMU19DTEtJTl8xOV8yTUhaCQkwCisjZGVmaW5lIEFQTExTX0NMS0lOXzEzTUhaCQkyCisjZGVmaW5lIEFQTExTX0NMS0lOXzEyTUhaCQkzCisKK3ZvaWQgX19pb21lbSAqY21faWRsZXN0X3BsbDsKKworLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KKworLyogRW5hYmxlIGFuIEFQTEwgaWYgb2ZmICovCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIHUzMiBzdGF0dXNfbWFzaykKK3sKKwl1MzIgY3ZhbCwgYXBsbF9tYXNrOworCisJYXBsbF9tYXNrID0gRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0OworCisJY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisKKwlpZiAoKGN2YWwgJiBhcGxsX21hc2spID09IGFwbGxfbWFzaykKKwkJcmV0dXJuIDA7ICAgLyogYXBsbCBhbHJlYWR5IGVuYWJsZWQgKi8KKworCWN2YWwgJj0gfmFwbGxfbWFzazsKKwljdmFsIHw9IGFwbGxfbWFzazsKKwljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKKworCW9tYXAyX2NtX3dhaXRfaWRsZXN0KGNtX2lkbGVzdF9wbGwsIHN0YXR1c19tYXNrLAorCQkJICAgICBPTUFQMjRYWF9DTV9JRExFU1RfVkFMLCBjbGstPm5hbWUpOworCisJLyoKKwkgKiBSRVZJU0lUOiBTaG91bGQgd2UgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgb21hcDJfd2FpdF9jbG9ja19yZWFkeSgpCisJICogZmFpbHM/CisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrX2FwbGw5Nl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMl9jbGtfYXBsbF9lbmFibGUoY2xrLCBPTUFQMjRYWF9TVF85Nk1fQVBMTCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrX2FwbGw1NF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMl9jbGtfYXBsbF9lbmFibGUoY2xrLCBPTUFQMjRYWF9TVF81NE1fQVBMTCk7Cit9CisKKy8qIFN0b3AgQVBMTCAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrX2FwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGN2YWw7CisKKwljdmFsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKKwljdmFsICY9IH4oRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0KTsKKwljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKK30KKworLyogUHVibGljIGRhdGEgKi8KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfYXBsbDk2ID0geworCS5lbmFibGUJCT0gb21hcDJfY2xrX2FwbGw5Nl9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwMl9jbGtfYXBsbF9kaXNhYmxlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfYXBsbDU0ID0geworCS5lbmFibGUJCT0gb21hcDJfY2xrX2FwbGw1NF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwMl9jbGtfYXBsbF9kaXNhYmxlLAorfTsKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCit1MzIgb21hcDJ4eHhfZ2V0X2FwbGxfY2xraW4odm9pZCkKK3sKKwl1MzIgYXBsbHMsIHNyYXRlID0gMDsKKworCWFwbGxzID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDEpOworCWFwbGxzICY9IE9NQVAyNFhYX0FQTExTX0NMS0lOX01BU0s7CisJYXBsbHMgPj49IE9NQVAyNFhYX0FQTExTX0NMS0lOX1NISUZUOworCisJaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzE5XzJNSFopCisJCXNyYXRlID0gMTkyMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTNNSFopCisJCXNyYXRlID0gMTMwMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTJNSFopCisJCXNyYXRlID0gMTIwMDAwMDA7CisKKwlyZXR1cm4gc3JhdGU7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkwNDg0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIERQTEwgKyBDT1JFX0NMSyBjb21wb3NpdGUgY2xvY2sgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBYWFggVGhlIERQTEwgYW5kIENPUkUgY2xvY2tzIHNob3VsZCBiZSBzcGxpdCBpbnRvIHR3byBzZXBhcmF0ZSBjbG9jaworICogdHlwZXMuCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgorI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJvcHAyeHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKworLyogI2RlZmluZSBET1dOX1ZBUklBQkxFX0RQTEwgMSAqLwkJLyogRXhwZXJpbWVudGFsICovCisKKy8qKgorICogb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUgLSByZXR1cm4gdGhlIENPUkVfQ0xLIHJhdGUKKyAqIEBjbGs6IHBvaW50ZXIgdG8gdGhlIGNvbWJpbmVkIGRwbGxfY2sgKyBjb3JlX2NrIChjdXJyZW50bHkgImRwbGxfY2siKQorICoKKyAqIFJldHVybnMgdGhlIENPUkVfQ0xLIHJhdGUuICBDT1JFX0NMSyBjYW4gaGF2ZSBvbmUgb2YgdGhyZWUgcmF0ZQorICogc291cmNlcyBvbiBPTUFQMnh4eDogdGhlIERQTEwgQ0xLT1VUIHJhdGUsIERQTEwgQ0xLT1VUWDIsIG9yIDMyS0h6CisgKiAodGhlIGxhdHRlciBpcyB1bnVzdWFsKS4gIFRoaXMgY3VycmVudGx5IHNob3VsZCBiZSBjYWxsZWQgd2l0aAorICogc3RydWN0IGNsayAqZHBsbF9jaywgd2hpY2ggaXMgYSBjb21wb3NpdGUgY2xvY2sgb2YgZHBsbF9jayBhbmQKKyAqIGNvcmVfY2suCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWxvbmcgbG9uZyBjb3JlX2NsazsKKwl1MzIgdjsKKworCWNvcmVfY2xrID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOworCisJdiA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwl2ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCisJaWYgKHYgPT0gQ09SRV9DTEtfU1JDXzMySykKKwkJY29yZV9jbGsgPSAzMjc2ODsKKwllbHNlCisJCWNvcmVfY2xrICo9IHY7CisKKwlyZXR1cm4gY29yZV9jbGs7Cit9CisKKy8qCisgKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgorICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgorICovCitzdGF0aWMgbG9uZyBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCit7CisJdTMyIGhpZ2gsIGxvdywgY29yZV9jbGtfc3JjOworCisJY29yZV9jbGtfc3JjID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCWNvcmVfY2xrX3NyYyAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKworCWlmIChjb3JlX2Nsa19zcmMgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsJLyogRFBMTCBjbG9ja291dCAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCX0KKworI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAorCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIHRhcmdldF9yYXRlOworI2Vsc2UKKwlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIGxvdzsKKyNlbmRpZgorCit9CisKK3Vuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoY2xrKTsKK30KKworaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgY3VyX3JhdGUsIGxvdywgbXVsdCwgZGl2LCB2YWxpZF9yYXRlLCBkb25lX3JhdGU7CisJdTMyIGJ5cGFzcyA9IDA7CisJc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKworCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoZGNsayk7CisJbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwltdWx0ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCisJaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7CisJfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbGNvcmVfcm91bmRfcmF0ZShyYXRlKTsKKwkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChtdWx0ID09IDEpCisJCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCQllbHNlCisJCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKKworCQlkZCA9IGNsay0+ZHBsbF9kYXRhOworCQlpZiAoIWRkKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfihkZC0+bXVsdF9tYXNrIHwKKwkJCQkJICAgZGQtPmRpdjFfbWFzayk7CisJCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEwMDAwMDApIC0gMSk7CisJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH5PTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKwkJaWYgKHJhdGUgPiBsb3cpIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKKwkJCW11bHQgPSAoKHJhdGUgLyAyKSAvIDEwMDAwMDApOworCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CisJCX0gZWxzZSB7CisJCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTEw7CisJCQltdWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMOworCQl9CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAoZGl2IDw8IF9fZmZzKGRkLT5tdWx0X21hc2spKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChtdWx0IDw8IF9fZmZzKGRkLT5kaXYxX21hc2spKTsKKworCQkvKiBXb3JzdCBjYXNlICovCisJCXRtcHNldC5iYXNlX3NkcmNfcmZyID0gU0RSQ19SRlJfQ1RSTF9CWVBBU1M7CisKKwkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KKwkJCWJ5cGFzcyA9IDE7CisKKwkJLyogRm9yIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisKKwkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLworCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAorCQkJICAgICAgIGJ5cGFzcyk7CisKKwkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCisJCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfb3NjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjdiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBPTUFQMnh4eCBvc2NfY2xrLXNwZWNpZmljIGNsb2NrIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAorICogR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorCitzdGF0aWMgaW50IG9tYXAyX2VuYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBwY2M7CisKKwlwY2MgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKKworCV9fcmF3X3dyaXRlbChwY2MgJiB+T01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLLCBwcmNtX2Nsa3NyY19jdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9kaXNhYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHBjYzsKKworCXBjYyA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCisJX19yYXdfd3JpdGVsKHBjYyB8IE9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrID0geworCS5lbmFibGUJCT0gb21hcDJfZW5hYmxlX29zY19jaywKKwkuZGlzYWJsZQk9IG9tYXAyX2Rpc2FibGVfb3NjX2NrLAorfTsKKwordW5zaWduZWQgbG9uZyBvbWFwMl9vc2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG9tYXAyeHh4X2dldF9hcGxsX2Nsa2luKCkgKiBvbWFwMnh4eF9nZXRfc3lzY2xrZGl2KCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfc3lzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmI1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3N5cy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBPTUFQMnh4eCBzeXNfY2xrLXNwZWNpZmljIGNsb2NrIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAorICogR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorCit2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmw7CisKK3UzMiBvbWFwMnh4eF9nZXRfc3lzY2xrZGl2KHZvaWQpCit7CisJdTMyIGRpdjsKKworCWRpdiA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCWRpdiAmPSBPTUFQX1NZU0NMS0RJVl9NQVNLOworCWRpdiA+Pj0gT01BUF9TWVNDTEtESVZfU0hJRlQ7CisKKwlyZXR1cm4gZGl2OworfQorCit1bnNpZ25lZCBsb25nIG9tYXAyeHh4X3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBvbWFwMnh4eF9nZXRfc3lzY2xrZGl2KCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFlYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBPTUFQMnh4eCBEVkZTIHZpcnR1YWwgY2xvY2sgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBYWFggU29tZSBvZiB0aGlzIGNvZGUgc2hvdWxkIGJlIHJlcGxhY2VhYmxlIGJ5IHRoZSB1cGNvbWluZyBPUFAgbGF5ZXIKKyAqIGNvZGUuICBIb3dldmVyLCBzb21lIG5vdGlvbiBvZiAicmF0ZSBzZXQiIGlzIHByb2JhYmx5IHN0aWxsIG5lY2Vzc2FyeQorICogZm9yIE9NQVAyeHh4IGF0IGxlYXN0LiAgUmF0ZSBzZXRzIHNob3VsZCBiZSBnZW5lcmFsaXplZCBzbyB0aGV5IGNhbiBiZQorICogdXNlZCBmb3IgYW55IE9NQVAgY2hpcCwgbm90IGp1c3QgT01BUDJ4eHguICBJbiBwYXJ0aWN1bGFyLCBSaWNoYXJkIFdvb2RydWZmCisgKiBoYXMgaW4gdGhlIHBhc3QgZXhwcmVzc2VkIGEgcHJlZmVyZW5jZSB0byB1c2UgcmF0ZSBzZXRzIGZvciBPUFAgY2hhbmdlcywKKyAqIHJhdGhlciB0aGFuIGR5bmFtaWNhbGx5IHJlY2FsY3VsYXRpbmcgdGhlIGNsb2NrIHRyZWUsIHNvIGlmIHNvbWVvbmUgd2FudHMKKyAqIHRoaXMgYmFkbHkgZW5vdWdoIHRvIHdyaXRlIHRoZSBjb2RlIHRvIGhhbmRsZSBpdCwgd2Ugc2hvdWxkIHN1cHBvcnQgaXQKKyAqIGFzIGFuIG9wdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgorI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJvcHAyeHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKworY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0OworY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpyYXRlX3RhYmxlOworCisvKioKKyAqIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMgLSBqdXN0IHJldHVybiB0aGUgTVBVIHNwZWVkCisgKiBAY2xrOiB2aXJ0X3ByY21fc2V0IHN0cnVjdCBjbGsKKyAqCisgKiBTZXQgdmlydF9wcmNtX3NldCdzIHJhdGUgdG8gdGhlIG1wdV9zcGVlZCBmaWVsZCBvZiB0aGUgY3VycmVudCBQUkNNIHNldC4KKyAqLwordW5zaWduZWQgbG9uZyBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY3Vycl9wcmNtX3NldC0+bXB1X3NwZWVkOworfQorCisvKgorICogTG9vayBmb3IgYSByYXRlIGVxdWFsIG9yIGxlc3MgdGhhbiB0aGUgdGFyZ2V0IHJhdGUgZ2l2ZW4gYSBjb25maWd1cmF0aW9uIHNldC4KKyAqCisgKiBXaGF0J3Mgbm90IGVudGlyZWx5IGNsZWFyIGlzICJ3aGljaCIgZmllbGQgcmVwcmVzZW50cyB0aGUga2V5IGZpZWxkLgorICogU29tZSBtaWdodCBhcmd1ZSBMMy1ERFIsIG90aGVycyBBUk0sIG90aGVycyBJVkEuIFRoaXMgY29kZSBpcyBzaW1wbGUgYW5kCisgKiBqdXN0IHVzZXMgdGhlIEFSTSByYXRlcy4KKyAqLworbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHRyOworCWxvbmcgaGlnaGVzdF9yYXRlOworCWxvbmcgc3lzX2NrX3JhdGU7CisKKwlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKworCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7CisKKwlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+bXB1X3NwZWVkOyBwdHIrKykgeworCQlpZiAoIShwdHItPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwdHItPnh0YWxfc3BlZWQgIT0gc3lzX2NrX3JhdGUpCisJCQljb250aW51ZTsKKworCQloaWdoZXN0X3JhdGUgPSBwdHItPm1wdV9zcGVlZDsKKworCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLworCQlpZiAocHRyLT5tcHVfc3BlZWQgPD0gcmF0ZSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaGlnaGVzdF9yYXRlOworfQorCisvKiBTZXRzIGJhc2ljIGNsb2NrcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJhdGUgKi8KK2ludCBvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgY3VyX3JhdGUsIGRvbmVfcmF0ZSwgYnlwYXNzID0gMCwgdG1wOworCWNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwl1bnNpZ25lZCBsb25nIGZvdW5kX3NwZWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgc3lzX2NrX3JhdGU7CisKKwlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrX3JhdGUpCisJCQljb250aW51ZTsKKworCQlpZiAocHJjbS0+bXB1X3NwZWVkIDw9IHJhdGUpIHsKKwkJCWZvdW5kX3NwZWVkID0gcHJjbS0+bXB1X3NwZWVkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kX3NwZWVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBzZXQgTVBVIHJhdGUgdG8gJWx1TUh6XG4iLAorCQkgICAgICAgcmF0ZSAvIDEwMDAwMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdXJyX3ByY21fc2V0ID0gcHJjbTsKKwljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGRjbGspOworCisJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgLyAyKSB7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKKwl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgKiAyKSB7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKwl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgIT0gY3VyX3JhdGUpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQlieXBhc3MgPSAxOworCisJCWlmICgocHJjbS0+Y21fY2xrc2VsMl9wbGwgJiBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSykgPT0KKwkJICAgIENPUkVfQ0xLX1NSQ19EUExMX1gyKQorCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CisJCWVsc2UKKwkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMOworCisJCS8qIE1QVSBkaXZpZGVyICovCisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21wdSwgTVBVX01PRCwgQ01fQ0xLU0VMKTsKKworCQkvKiBkc3AgKyBpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX2RzcCwKKwkJCQkgT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKTsKKworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9nZngsIEdGWF9NT0QsIENNX0NMS1NFTCk7CisKKwkJLyogTWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCisJCXRtcCA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJiBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLOworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbDFfY29yZSB8IHRtcCwgQ09SRV9NT0QsCisJCQkJIENNX0NMS1NFTDEpOworCisJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21kbSwKKwkJCQkJIE9NQVAyNDMwX01ETV9NT0QsIENNX0NMS1NFTCk7CisKKwkJLyogeDIgdG8gZW50ZXIgb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKworCQlvbWFwMl9zZXRfcHJjbShwcmNtLT5jbV9jbGtzZWwxX3BsbCwgcHJjbS0+YmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisvKgorICogV2FsayBQUkNNIHJhdGUgdGFibGUgYW5kIGZpbGxvdXQgY3B1ZnJlcSBmcmVxX3RhYmxlCisgKiBYWFggVGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYW4gT1BQIGxheWVyIGluIHRoZSBuZWFyIGZ1dHVyZQorICovCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOworCit2b2lkIG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCit7CisJY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCWxvbmcgc3lzX2NrX3JhdGU7CisJaW50IGkgPSAwOworCWludCB0Ymxfc3ogPSAwOworCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRvbid0IHB1dCBieXBhc3MgcmF0ZXMgaW4gdGFibGUgKi8KKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWNvbnRpbnVlOworCisJCXRibF9zeisrOworCX0KKworCS8qCisJICogWFhYIEVuc3VyZSB0aGF0IHdlJ3JlIGRvaW5nIHdoYXQgQ1BVRnJlcSBleHBlY3RzIGZvciB0aGlzIGVycm9yCisJICogY2FzZSBhbmQgdGhlIGZvbGxvd2luZyBvbmUKKwkgKi8KKwlpZiAodGJsX3N6ID09IDApIHsKKwkJcHJfd2FybmluZygiJXM6IG5vIG1hdGNoaW5nIGVudHJpZXMgaW4gcmF0ZV90YWJsZVxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEluY2x1ZGUgdGhlIENQVUZSRVFfVEFCTEVfRU5EIHRlcm1pbmF0b3IgZW50cnkgKi8KKwl0Ymxfc3orKzsKKworCWZyZXFfdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICogdGJsX3N6LAorCQkJICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWZyZXFfdGFibGUpIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IGt6YWxsb2MgZnJlcXVlbmN5IHRhYmxlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRvbid0IHB1dCBieXBhc3MgcmF0ZXMgaW4gdGFibGUgKi8KKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWNvbnRpbnVlOworCisJCWZyZXFfdGFibGVbaV0uaW5kZXggPSBpOworCQlmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IHByY20tPm1wdV9zcGVlZCAvIDEwMDA7CisJCWkrKzsKKwl9CisKKwlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwlmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCisJKnRhYmxlID0gJmZyZXFfdGFibGVbMF07Cit9CisKK3ZvaWQgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKK3sKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlyZXR1cm47CisKKwlrZnJlZShmcmVxX3RhYmxlKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDM0eHhfZHBsbDNtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjFlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIE9NQVAzNHh4IE0yIGRpdmlkZXIgY2xvY2sgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkKKyAqIEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIFdvb2RydWZmLCBUb255IExpbmRncmVuLCBUdXVra2EgVGlra2FuZW4sIEthcnRoaWsgRGFzdQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgorI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazN4eHguaCIKKyNpbmNsdWRlICJjbG9jazM0eHguaCIKKyNpbmNsdWRlICJzZHJjLmgiCisKKyNkZWZpbmUgQ1lDTEVTX1BFUl9NSFoJCQkxMDAwMDAwCisKKy8qCisgKiBDT1JFIERQTEwgKERQTEwzKSBNMiBkaXZpZGVyIHJhdGUgcHJvZ3JhbW1pbmcgZnVuY3Rpb25zCisgKgorICogVGhlc2UgY2FsbCBpbnRvIFNSQU0gY29kZSB0byBkbyB0aGUgYWN0dWFsIENNIHdyaXRlcywgc2luY2UgdGhlIFNEUkFNCisgKiBpcyBjbG9ja2VkIGZyb20gRFBMTDMuCisgKi8KKworLyoqCisgKiBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUgLSBzZXQgQ09SRSBEUExMIE0yIGRpdmlkZXIKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQHJhdGU6IHJvdW5kZWQgdGFyZ2V0IHJhdGUKKyAqCisgKiBQcm9ncmFtIHRoZSBEUExMIE0yIGRpdmlkZXIgd2l0aCB0aGUgcm91bmRlZCB0YXJnZXQgcmF0ZS4gIFJldHVybnMKKyAqIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIG5ld19kaXYgPSAwOworCXUzMiB1bmxvY2tfZGxsID0gMDsKKwl1MzIgYzsKKwl1bnNpZ25lZCBsb25nIHZhbGlkcmF0ZSwgc2RyY3JhdGUsIF9tcHVyYXRlOworCXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMDsKKwlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczE7CisJaW50IHJldDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbGlkcmF0ZSA9IG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihjbGssIHJhdGUsICZuZXdfZGl2KTsKKwlpZiAodmFsaWRyYXRlICE9IHJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJc2RyY3JhdGUgPSBzZHJjX2lja19wLT5yYXRlOworCWlmIChyYXRlID4gY2xrLT5yYXRlKQorCQlzZHJjcmF0ZSA8PD0gKChyYXRlIC8gY2xrLT5yYXRlKSA+PiAxKTsKKwllbHNlCisJCXNkcmNyYXRlID4+PSAoKGNsay0+cmF0ZSAvIHJhdGUpID4+IDEpOworCisJcmV0ID0gb21hcDJfc2RyY19nZXRfcGFyYW1zKHNkcmNyYXRlLCAmc2RyY19jczAsICZzZHJjX2NzMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc2RyY3JhdGUgPCBNSU5fU0RSQ19ETExfTE9DS19GUkVRKSB7CisJCXByX2RlYnVnKCJjbG9jazogd2lsbCB1bmxvY2sgU0RSQyBETExcbiIpOworCQl1bmxvY2tfZGxsID0gMTsKKwl9CisKKwkvKgorCSAqIFhYWCBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgZG9uZSB3aGVuIHRoZSBDUFUgZnJlcXVlbmN5IGNoYW5nZXMKKwkgKi8KKwlfbXB1cmF0ZSA9IGFybV9mY2tfcC0+cmF0ZSAvIENZQ0xFU19QRVJfTUhaOworCWMgPSAoX21wdXJhdGUgPDwgU0RSQ19NUFVSQVRFX1NDQUxFKSA+PiBTRFJDX01QVVJBVEVfQkFTRV9TSElGVDsKKwljICs9IDE7ICAvKiBmb3Igc2FmZXR5ICovCisJYyAqPSBTRFJDX01QVVJBVEVfTE9PUFM7CisJYyA+Pj0gU0RSQ19NUFVSQVRFX1NDQUxFOworCWlmIChjID09IDApCisJCWMgPSAxOworCisJcHJfZGVidWcoImNsb2NrOiBjaGFuZ2luZyBDT1JFIERQTEwgcmF0ZSBmcm9tICVsdSB0byAlbHVcbiIsIGNsay0+cmF0ZSwKKwkJIHZhbGlkcmF0ZSk7CisJcHJfZGVidWcoImNsb2NrOiBTRFJDIENTMCB0aW1pbmcgcGFyYW1zIHVzZWQ6IgorCQkgIiBSRlIgJTA4eCBDVFJMQSAlMDh4IENUUkxCICUwOHggTVIgJTA4eFxuIiwKKwkJIHNkcmNfY3MwLT5yZnJfY3RybCwgc2RyY19jczAtPmFjdGltX2N0cmxhLAorCQkgc2RyY19jczAtPmFjdGltX2N0cmxiLCBzZHJjX2NzMC0+bXIpOworCWlmIChzZHJjX2NzMSkKKwkJcHJfZGVidWcoImNsb2NrOiBTRFJDIENTMSB0aW1pbmcgcGFyYW1zIHVzZWQ6ICIKKwkJICIgUkZSICUwOHggQ1RSTEEgJTA4eCBDVFJMQiAlMDh4IE1SICUwOHhcbiIsCisJCSBzZHJjX2NzMS0+cmZyX2N0cmwsIHNkcmNfY3MxLT5hY3RpbV9jdHJsYSwKKwkJIHNkcmNfY3MxLT5hY3RpbV9jdHJsYiwgc2RyY19jczEtPm1yKTsKKworCWlmIChzZHJjX2NzMSkKKwkJb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCgKKwkJCQkgIG5ld19kaXYsIHVubG9ja19kbGwsIGMsIHJhdGUgPiBjbGstPnJhdGUsCisJCQkJICBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKKwkJCQkgIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yLAorCQkJCSAgc2RyY19jczEtPnJmcl9jdHJsLCBzZHJjX2NzMS0+YWN0aW1fY3RybGEsCisJCQkJICBzZHJjX2NzMS0+YWN0aW1fY3RybGIsIHNkcmNfY3MxLT5tcik7CisJZWxzZQorCQlvbWFwM19jb25maWd1cmVfY29yZV9kcGxsKAorCQkJCSAgbmV3X2RpdiwgdW5sb2NrX2RsbCwgYywgcmF0ZSA+IGNsay0+cmF0ZSwKKwkJCQkgIHNkcmNfY3MwLT5yZnJfY3RybCwgc2RyY19jczAtPmFjdGltX2N0cmxhLAorCQkJCSAgc2RyY19jczAtPmFjdGltX2N0cmxiLCBzZHJjX2NzMC0+bXIsCisJCQkJICAwLCAwLCAwLCAwKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfY2xrc2VsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfY2xrc2VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwODEyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9jbGtzZWwuYwpAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIGNsa3RfY2xrc2VsLmMgLSBPTUFQMi8zLzQgY2xrc2VsIGNsb2NrIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3RzOgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWFhYIEF0IHNvbWUgcG9pbnQgdGhlc2UgY2xrc2VsIGNsb2NrcyBzaG91bGQgYmUgc3BsaXQgaW50bworICogImRpdmlkZXIiIGNsb2NrcyBhbmQgIm11eCIgY2xvY2tzIHRvIGJldHRlciBtYXRjaCB0aGUgaGFyZHdhcmUuCisgKgorICogWFhYIEN1cnJlbnRseSB0aGVzZSBjbG9ja3MgYXJlIG9ubHkgdXNlZCBpbiB0aGUgT01BUDIvMy80IGNvZGUsIGJ1dAorICogbWFueSBvZiB0aGUgT01BUDEgY2xvY2tzIHNob3VsZCBiZSBjb252ZXJ0aWJsZSB0byB1c2UgdGhpcworICogbWVjaGFuaXNtLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBfb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQgLSByZXR1cm4gY2xrc2VsIHN0cnVjdCBmb3IgYSBnaXZlbiBjbGsgJiBwYXJlbnQKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayBwdHIgdG8gaW5zcGVjdAorICogQHNyY19jbGs6IE9NQVAgc3RydWN0IGNsayBwdHIgb2YgdGhlIHBhcmVudCBjbGsgdG8gc2VhcmNoIGZvcgorICoKKyAqIFNjYW4gdGhlIHN0cnVjdCBjbGtzZWwgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbG9jayB0byBmaW5kCisgKiB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIHBhcmVudCBjbG9jayBhZGRyZXNzLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbGtzZWwgb24gc3VjY2VzcyBvciBOVUxMIG9uIGVycm9yLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCAqX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJCQlzdHJ1Y3QgY2xrICpzcmNfY2xrKQoreworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisKKwlpZiAoIWNsay0+Y2xrc2VsKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoY2xrcyA9IGNsay0+Y2xrc2VsOyBjbGtzLT5wYXJlbnQ7IGNsa3MrKykgeworCQlpZiAoY2xrcy0+cGFyZW50ID09IHNyY19jbGspCisJCQlicmVhazsgLyogRm91bmQgdGhlIHJlcXVlc3RlZCBwYXJlbnQgKi8KKwl9CisKKwlpZiAoIWNsa3MtPnBhcmVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBwYXJlbnQgY2xvY2sgJXMgaW4gIgorCQkgICAgICAgImNsa3NlbCBhcnJheSBvZiBjbG9jayAlc1xuIiwgc3JjX2Nsay0+bmFtZSwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBjbGtzOworfQorCisvKgorICogQ29udmVydHMgZW5jb2RlZCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgaW50byBhIGZ1bGwgYWRkcmVzcworICogT24gZXJyb3IsIHRoZSByZXR1cm4gdmFsdWUgKHBhcmVudF9kaXYpIHdpbGwgYmUgMC4KKyAqLworc3RhdGljIHUzMiBfb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQoc3RydWN0IGNsayAqc3JjX2Nsaywgc3RydWN0IGNsayAqY2xrLAorCQkJCSAgICAgICB1MzIgKmZpZWxkX3ZhbCkKK3sKKwljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOworCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKKworCWNsa3MgPSBfb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBzcmNfY2xrKTsKKwlpZiAoIWNsa3MpCisJCXJldHVybiAwOworCisJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CisJCWlmIChjbGtyLT5mbGFncyAmIGNwdV9tYXNrICYmIGNsa3ItPmZsYWdzICYgREVGQVVMVF9SQVRFKQorCQkJYnJlYWs7IC8qIEZvdW5kIHRoZSBkZWZhdWx0IHJhdGUgZm9yIHRoaXMgcGxhdGZvcm0gKi8KKwl9CisKKwlpZiAoIWNsa3ItPmRpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBkZWZhdWx0IHJhdGUgZm9yICIKKwkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGNsay0+bmFtZSwKKwkJICAgICAgIHNyY19jbGstPnBhcmVudC0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICBBZGQgYSBjbGtzZWwgbWFzayB0byB0aGUgc3RydWN0IGNsay4gKi8KKwlXQVJOX09OKGNsay0+Y2xrc2VsX21hc2sgPT0gMCk7CisKKwkqZmllbGRfdmFsID0gY2xrci0+dmFsOworCisJcmV0dXJuIGNsa3ItPmRpdjsKK30KKworCisvKiBQdWJsaWMgZnVuY3Rpb25zICovCisKKy8qKgorICogb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50IC0gc2V0IGEgY2xrc2VsIGNsaydzIHBhcmVudCBmaWVsZCBmcm9tIHRoZSBoYXJkd2FyZQorICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQorICoKKyAqIEdpdmVuIGEgcG9pbnRlciB0byBhIHNvdXJjZS1zZWxlY3RhYmxlIHN0cnVjdCBjbGssIHJlYWQgdGhlIGhhcmR3YXJlCisgKiByZWdpc3RlciBhbmQgZGV0ZXJtaW5lIHdoYXQgaXRzIHBhcmVudCBpcyBjdXJyZW50bHkgc2V0IHRvLiAgVXBkYXRlIHRoZQorICogY2xrLT5wYXJlbnQgZmllbGQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2xrIHB0ci4KKyAqLwordm9pZCBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOworCXUzMiByLCBmb3VuZCA9IDA7CisKKwlpZiAoIWNsay0+Y2xrc2VsKQorCQlyZXR1cm47CisKKwlyID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKSAmIGNsay0+Y2xrc2VsX21hc2s7CisJciA+Pj0gX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7CisKKwlmb3IgKGNsa3MgPSBjbGstPmNsa3NlbDsgY2xrcy0+cGFyZW50ICYmICFmb3VuZDsgY2xrcysrKSB7CisJCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXYgJiYgIWZvdW5kOyBjbGtyKyspIHsKKwkJCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPnZhbCA9PSByKSkgeworCQkJCWlmIChjbGstPnBhcmVudCAhPSBjbGtzLT5wYXJlbnQpIHsKKwkJCQkJcHJfZGVidWcoImNsb2NrOiBpbml0ZWQgJXMgcGFyZW50ICIKKwkJCQkJCSAidG8gJXMgKHdhcyAlcylcbiIsCisJCQkJCQkgY2xrLT5uYW1lLCBjbGtzLT5wYXJlbnQtPm5hbWUsCisJCQkJCQkgKChjbGstPnBhcmVudCkgPworCQkJCQkJICBjbGstPnBhcmVudC0+bmFtZSA6ICJOVUxMIikpOworCQkJCQljbGtfcmVwYXJlbnQoY2xrLCBjbGtzLT5wYXJlbnQpOworCQkJCX07CisJCQkJZm91bmQgPSAxOworCQkJfQorCQl9CisJfQorCisJaWYgKCFmb3VuZCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogaW5pdCBwYXJlbnQ6IGNvdWxkIG5vdCBmaW5kICIKKwkJICAgICAgICJyZWd2YWwgJTB4IGZvciBjbG9jayAlc1xuIiwgciwgIGNsay0+bmFtZSk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhcmUgcGFydCBvZiBDTEtTRUxfeHl6IGdvdmVybmVkIGNsb2Nrcy4KKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0byB1c2UgY2xrLT5lbmFibGUoKSBmdW5jdGlvbnMgbGlrZSBvbiBvbWFwMT8KKyAqLwordW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdTMyIGRpdiA9IDA7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IHJlY2FsYydpbmcgY2xrc2VsIGNsayAlc1xuIiwgY2xrLT5uYW1lKTsKKworCWRpdiA9IG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihjbGspOworCWlmIChkaXYgPT0gMCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCXJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKKworCXByX2RlYnVnKCJjbG9jazogbmV3IGNsb2NrIHJhdGUgaXMgJWxkIChkaXYgJWQpXG4iLCByYXRlLCBkaXYpOworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qKgorICogb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2IC0gZmluZCBkaXZpc29yIGZvciB0aGUgZ2l2ZW4gY2xvY2sgYW5kIHJhdGUKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKKyAqIEB0YXJnZXRfcmF0ZTogZGVzaXJlZCBjbG9jayByYXRlCisgKiBAbmV3X2RpdjogcHRyIHRvIHdoZXJlIHdlIHNob3VsZCBzdG9yZSB0aGUgZGl2aXNvcgorICoKKyAqIEZpbmRzICdiZXN0JyBkaXZpZGVyIHZhbHVlIGluIGFuIGFycmF5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kIHRhcmdldAorICogcmF0ZXMuICBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBjbG9ja3Mgd2hpY2ggYXJlIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULAorICogdGhleSBhcmUgb25seSBzZXR0YWJsZSBhcyBwYXJ0IG9mIHZpcnR1YWxfcHJjbSBzZXQuCisgKgorICogUmV0dXJucyB0aGUgcm91bmRlZCBjbG9jayByYXRlIG9yIHJldHVybnMgMHhmZmZmZmZmZiBvbiBlcnJvci4KKyAqLwordTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCisJCQkJdTMyICpuZXdfZGl2KQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9yYXRlOworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOworCXUzMiBsYXN0X2RpdiA9IDA7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IGNsa3NlbF9yb3VuZF9yYXRlX2RpdjogJXMgdGFyZ2V0X3JhdGUgJWxkXG4iLAorCQkgY2xrLT5uYW1lLCB0YXJnZXRfcmF0ZSk7CisKKwkqbmV3X2RpdiA9IDE7CisKKwljbGtzID0gX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOworCWlmICghY2xrcykKKwkJcmV0dXJuIH4wOworCisJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CisJCWlmICghKGNsa3ItPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChjbGtyLT5kaXYgPD0gbGFzdF9kaXYpCisJCQlwcl9lcnIoImNsb2NrOiBjbGtzZWxfcmF0ZSB0YWJsZSBub3Qgc29ydGVkICIKKwkJCSAgICAgICAiZm9yIGNsb2NrICVzIiwgY2xrLT5uYW1lKTsKKworCQlsYXN0X2RpdiA9IGNsa3ItPmRpdjsKKworCQl0ZXN0X3JhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGNsa3ItPmRpdjsKKworCQlpZiAodGVzdF9yYXRlIDw9IHRhcmdldF9yYXRlKQorCQkJYnJlYWs7IC8qIGZvdW5kIGl0ICovCisJfQorCisJaWYgKCFjbGtyLT5kaXYpIHsKKwkJcHJfZXJyKCJjbG9jazogQ291bGQgbm90IGZpbmQgZGl2aXNvciBmb3IgdGFyZ2V0ICIKKwkJICAgICAgICJyYXRlICVsZCBmb3IgY2xvY2sgJXMgcGFyZW50ICVzXG4iLCB0YXJnZXRfcmF0ZSwKKwkJICAgICAgIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gfjA7CisJfQorCisJKm5ld19kaXYgPSBjbGtyLT5kaXY7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IG5ld19kaXYgPSAlZCwgbmV3X3JhdGUgPSAlbGRcbiIsICpuZXdfZGl2LAorCQkgKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2KSk7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGtyLT5kaXY7Cit9CisKKy8qKgorICogb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUgLSBmaW5kIHJvdW5kZWQgcmF0ZSBmb3IgdGhlIGdpdmVuIGNsb2NrIGFuZCByYXRlCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZQorICoKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciBmb3IgT01BUCBjbG9jayBmcmFtZXdvcmsKKyAqIEZpbmRzIGJlc3QgdGFyZ2V0IHJhdGUgYmFzZWQgb24gdGhlIHNvdXJjZSBjbG9jayBhbmQgcG9zc2libGUgZGl2aWRlcnMuCisgKiByYXRlcy4gVGhlIGRpdmlkZXIgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgd2l0aCBzbWFsbGVzdCBkaXZpZGVyIGZpcnN0LgorICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKKyAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgorICoKKyAqIFJldHVybnMgdGhlIHJvdW5kZWQgY2xvY2sgcmF0ZSBvciByZXR1cm5zIDB4ZmZmZmZmZmYgb24gZXJyb3IuCisgKi8KK2xvbmcgb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKQoreworCXUzMiBuZXdfZGl2OworCisJcmV0dXJuIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihjbGssIHRhcmdldF9yYXRlLCAmbmV3X2Rpdik7Cit9CisKKworLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KK2xvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaWYgKGNsay0+cm91bmRfcmF0ZSkKKwkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJcmV0dXJuIGNsay0+cmF0ZTsKK30KKworLyoqCisgKiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcigpIC0gdHVybiBjbGtzZWwgZmllbGQgdmFsdWUgaW50byBpbnRlZ2VyIGRpdmlkZXIKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKKyAqIEBmaWVsZF92YWw6IHJlZ2lzdGVyIGZpZWxkIHZhbHVlIHRvIGZpbmQKKyAqCisgKiBHaXZlbiBhIHN0cnVjdCBjbGsgb2YgYSByYXRlLXNlbGVjdGFibGUgY2xrc2VsIGNsb2NrLCBhbmQgYSByZWdpc3RlciBmaWVsZAorICogdmFsdWUgdG8gc2VhcmNoIGZvciwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBjbG9jayBkaXZpc29yLiAgVGhlIHJlZ2lzdGVyCisgKiBmaWVsZCB2YWx1ZSBzaG91bGQgYmUgcHJlLW1hc2tlZCBhbmQgc2hpZnRlZCBkb3duIHNvIHRoZSBMU0IgaXMgYXQgYml0IDAKKyAqIGJlZm9yZSBjYWxsaW5nLiAgUmV0dXJucyAwIG9uIGVycm9yCisgKi8KK3UzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpCit7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CisKKwljbGtzID0gX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOworCWlmICghY2xrcykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKKwkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+dmFsID09IGZpZWxkX3ZhbCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWNsa3ItPmRpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBmaWVsZHZhbCAlZCBmb3IgIgorCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgZmllbGRfdmFsLCBjbGstPm5hbWUsCisJCSAgICAgICBjbGstPnBhcmVudC0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBjbGtyLT5kaXY7Cit9CisKKy8qKgorICogb21hcDJfZGl2aXNvcl90b19jbGtzZWwoKSAtIHR1cm4gY2xrc2VsIGludGVnZXIgZGl2aXNvciBpbnRvIGEgZmllbGQgdmFsdWUKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKKyAqIEBkaXY6IGludGVnZXIgZGl2aXNvciB0byBzZWFyY2ggZm9yCisgKgorICogR2l2ZW4gYSBzdHJ1Y3QgY2xrIG9mIGEgcmF0ZS1zZWxlY3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgY2xvY2sgZGl2aXNvciwKKyAqIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmllbGQgdmFsdWUuICBUaGUgcmV0dXJuIHJlZ2lzdGVyIHZhbHVlIGlzCisgKiB0aGUgdmFsdWUgYmVmb3JlIGxlZnQtc2hpZnRpbmcuICBSZXR1cm5zIH4wIG9uIGVycm9yCisgKi8KK3UzMiBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiBkaXYpCit7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CisKKwkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJV0FSTl9PTihkaXYgPT0gMCk7CisKKwljbGtzID0gX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOworCWlmICghY2xrcykKKwkJcmV0dXJuIH4wOworCisJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CisJCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPmRpdiA9PSBkaXYpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFjbGtyLT5kaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZGl2aXNvciAlZCBmb3IgIgorCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgZGl2LCBjbGstPm5hbWUsCisJCSAgICAgICBjbGstPnBhcmVudC0+bmFtZSk7CisJCXJldHVybiB+MDsKKwl9CisKKwlyZXR1cm4gY2xrci0+dmFsOworfQorCisvKioKKyAqIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvciAtIGdldCBjdXJyZW50IGRpdmlkZXIgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgorICoKKyAqIFJldHVybnMgdGhlIGludGVnZXIgZGl2aXNvciB1cG9uIHN1Y2Nlc3Mgb3IgMCBvbiBlcnJvci4KKyAqLwordTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHY7CisKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCisJCXJldHVybiAwOworCisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZykgJiBjbGstPmNsa3NlbF9tYXNrOworCXYgPj49IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOworCisJcmV0dXJuIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKGNsaywgdik7Cit9CisKK2ludCBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHYsIGZpZWxkX3ZhbCwgdmFsaWRyYXRlLCBuZXdfZGl2ID0gMDsKKworCWlmICghY2xrLT5jbGtzZWxfbWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpZWxkX3ZhbCA9IG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKGNsaywgbmV3X2Rpdik7CisJaWYgKGZpZWxkX3ZhbCA9PSB+MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKKwl2ICY9IH5jbGstPmNsa3NlbF9tYXNrOworCXYgfD0gZmllbGRfdmFsIDw8IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmNsa3NlbF9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOyAvKiBPQ1AgYmFycmllciAqLworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBuZXdfZGl2OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwMl9jbGtzZWxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpCit7CisJdTMyIGZpZWxkX3ZhbCwgdiwgcGFyZW50X2RpdjsKKworCWlmICghY2xrLT5jbGtzZWwpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyZW50X2RpdiA9IF9vbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZChuZXdfcGFyZW50LCBjbGssICZmaWVsZF92YWwpOworCWlmICghcGFyZW50X2RpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKKwl2ICY9IH5jbGstPmNsa3NlbF9tYXNrOworCXYgfD0gZmllbGRfdmFsIDw8IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmNsa3NlbF9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOyAgICAvKiBPQ1AgYmFycmllciAqLworCisJY2xrX3JlcGFyZW50KGNsaywgbmV3X3BhcmVudCk7CisKKwkvKiBDTEtTRUwgY2xvY2tzIGZvbGxvdyB0aGVpciBwYXJlbnRzJyByYXRlcywgZGl2aWRlZCBieSBhIGRpdmlzb3IgKi8KKwljbGstPnJhdGUgPSBuZXdfcGFyZW50LT5yYXRlOworCisJaWYgKHBhcmVudF9kaXYgPiAwKQorCQljbGstPnJhdGUgLz0gcGFyZW50X2RpdjsKKworCXByX2RlYnVnKCJjbG9jazogc2V0IHBhcmVudCBvZiAlcyB0byAlcyAobmV3IHJhdGUgJWxkKVxuIiwKKwkJIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUsIGNsay0+cmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTUxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICogT01BUDIvMy80IERQTEwgY2xvY2sgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyogRFBMTCByYXRlIHJvdW5kaW5nOiBtaW5pbXVtIERQTEwgbXVsdGlwbGllciwgZGl2aWRlciB2YWx1ZXMgKi8KKyNkZWZpbmUgRFBMTF9NSU5fTVVMVElQTElFUgkJMgorI2RlZmluZSBEUExMX01JTl9ESVZJREVSCQkxCisKKy8qIFBvc3NpYmxlIGVycm9yIHJlc3VsdHMgZnJvbSBfZHBsbF90ZXN0X211bHQgKi8KKyNkZWZpbmUgRFBMTF9NVUxUX1VOREVSRkxPVwkJLTEKKworLyoKKyAqIFNjYWxlIGZhY3RvciB0byBtaXRpZ2F0ZSByb3VuZG9mZiBlcnJvcnMgaW4gRFBMTCByYXRlIHJvdW5kaW5nLgorICogVGhlIGhpZ2hlciB0aGUgc2NhbGUgZmFjdG9yLCB0aGUgZ3JlYXRlciB0aGUgcmlzayBvZiBhcml0aG1ldGljIG92ZXJmbG93LAorICogYnV0IHRoZSBjbG9zZXIgdGhlIHJvdW5kZWQgcmF0ZSB0byB0aGUgdGFyZ2V0IHJhdGUuICBEUExMX1NDQUxFX0ZBQ1RPUgorICogbXVzdCBiZSBhIHBvd2VyIG9mIERQTExfU0NBTEVfQkFTRS4KKyAqLworI2RlZmluZSBEUExMX1NDQUxFX0ZBQ1RPUgkJNjQKKyNkZWZpbmUgRFBMTF9TQ0FMRV9CQVNFCQkJMgorI2RlZmluZSBEUExMX1JPVU5ESU5HX1ZBTAkJKChEUExMX1NDQUxFX0JBU0UgLyAyKSAqIFwKKwkJCQkJIChEUExMX1NDQUxFX0ZBQ1RPUiAvIERQTExfU0NBTEVfQkFTRSkpCisKKy8qIERQTEwgdmFsaWQgRmludCBmcmVxdWVuY3kgYmFuZCBsaW1pdHMgLSBmcm9tIDM0eHggVFJNIFNlY3Rpb24gNC43LjYuMiAqLworI2RlZmluZSBEUExMX0ZJTlRfQkFORDFfTUlOCQk3NTAwMDAKKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQxX01BWAkJMjEwMDAwMAorI2RlZmluZSBEUExMX0ZJTlRfQkFORDJfTUlOCQk3NTAwMDAwCisjZGVmaW5lIERQTExfRklOVF9CQU5EMl9NQVgJCTIxMDAwMDAwCisKKy8qIF9kcGxsX3Rlc3RfZmludCgpIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBEUExMX0ZJTlRfVU5ERVJGTE9XCQktMQorI2RlZmluZSBEUExMX0ZJTlRfSU5WQUxJRAkJLTIKKworLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KKworLyoKKyAqIF9kcGxsX3Rlc3RfZmludCAtIHRlc3Qgd2hldGhlciBhbiBGaW50IHZhbHVlIGlzIHZhbGlkIGZvciB0aGUgRFBMTAorICogQGNsazogRFBMTCBzdHJ1Y3QgY2xrIHRvIHRlc3QKKyAqIEBuOiBkaXZpZGVyIHZhbHVlIChOKSB0byB0ZXN0CisgKgorICogVGVzdHMgd2hldGhlciBhIHBhcnRpY3VsYXIgZGl2aWRlciBAbiB3aWxsIHJlc3VsdCBpbiBhIHZhbGlkIERQTEwKKyAqIGludGVybmFsIGNsb2NrIGZyZXF1ZW5jeSBGaW50LiBTZWUgdGhlIDM0eHggVFJNIDQuNy42LjIgIkRQTEwgSml0dGVyCisgKiBDb3JyZWN0aW9uIi4gIFJldHVybnMgMCBpZiBPSywgLTEgaWYgdGhlIGVuY2xvc2luZyBsb29wIGNhbiB0ZXJtaW5hdGUKKyAqIChhc3N1bWluZyB0aGF0IGl0IGlzIGNvdW50aW5nIE4gdXB3YXJkcyksIG9yIC0yIGlmIHRoZSBlbmNsb3NpbmcgbG9vcAorICogc2hvdWxkIHNraXAgdG8gdGhlIG5leHQgaXRlcmF0aW9uIChhZ2FpbiBhc3N1bWluZyBOIGlzIGluY3JlYXNpbmcpLgorICovCitzdGF0aWMgaW50IF9kcGxsX3Rlc3RfZmludChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCit7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJbG9uZyBmaW50OworCWludCByZXQgPSAwOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKworCS8qIERQTEwgZGl2aWRlciBtdXN0IHJlc3VsdCBpbiBhIHZhbGlkIGppdHRlciBjb3JyZWN0aW9uIHZhbCAqLworCWZpbnQgPSBjbGstPnBhcmVudC0+cmF0ZSAvIChuICsgMSk7CisJaWYgKGZpbnQgPCBEUExMX0ZJTlRfQkFORDFfTUlOKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmUsICIKKwkJCSAibG93ZXJpbmcgbWF4X2RpdmlkZXJcbiIsIG4pOworCQlkZC0+bWF4X2RpdmlkZXIgPSBuOworCQlyZXQgPSBEUExMX0ZJTlRfVU5ERVJGTE9XOworCisJfSBlbHNlIGlmIChmaW50ID4gRFBMTF9GSU5UX0JBTkQxX01BWCAmJgorCQkgICBmaW50IDwgRFBMTF9GSU5UX0JBTkQyX01JTikgeworCisJCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlXG4iLCBuKTsKKwkJcmV0ID0gRFBMTF9GSU5UX0lOVkFMSUQ7CisKKwl9IGVsc2UgaWYgKGZpbnQgPiBEUExMX0ZJTlRfQkFORDJfTUFYKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmUsICIKKwkJCSAiYm9vc3RpbmcgbWluX2RpdmlkZXJcbiIsIG4pOworCQlkZC0+bWluX2RpdmlkZXIgPSBuOworCQlyZXQgPSBEUExMX0ZJTlRfSU5WQUxJRDsKKworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUodW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnVtOworCisJbnVtID0gKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJlbnRfcmF0ZSAqIG07CisJZG9fZGl2KG51bSwgbik7CisJcmV0dXJuIG51bTsKK30KKworLyoKKyAqIF9kcGxsX3Rlc3RfbXVsdCAtIHRlc3QgYSBEUExMIG11bHRpcGxpZXIgdmFsdWUKKyAqIEBtOiBwb2ludGVyIHRvIHRoZSBEUExMIG0gKG11bHRpcGxpZXIpIHZhbHVlIHVuZGVyIHRlc3QKKyAqIEBuOiBjdXJyZW50IERQTEwgbiAoZGl2aWRlcikgdmFsdWUgdW5kZXIgdGVzdAorICogQG5ld19yYXRlOiBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXN1bHRpbmcgcm91bmRlZCByYXRlCisgKiBAdGFyZ2V0X3JhdGU6IHRoZSBkZXNpcmVkIERQTEwgcmF0ZQorICogQHBhcmVudF9yYXRlOiB0aGUgRFBMTCdzIHBhcmVudCBjbG9jayByYXRlCisgKgorICogVGhpcyBjb2RlIHRlc3RzIGEgRFBMTCBtdWx0aXBsaWVyIHZhbHVlLCBlbnN1cmluZyB0aGF0IHRoZQorICogcmVzdWx0aW5nIHJhdGUgd2lsbCBub3QgYmUgaGlnaGVyIHRoYW4gdGhlIHRhcmdldF9yYXRlLCBhbmQgdGhhdAorICogdGhlIG11bHRpcGxpZXIgdmFsdWUgaXRzZWxmIGlzIHZhbGlkIGZvciB0aGUgRFBMTC4gIEluaXRpYWxseSwgdGhlCisgKiBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgdGhlIG0gYXJndW1lbnQgc2hvdWxkIGJlIHByZXNjYWxlZCBieQorICogbXVsdGlwbHlpbmcgYnkgRFBMTF9TQ0FMRV9GQUNUT1IuICBUaGUgY29kZSB3aWxsIHJlcGxhY2UgdGhpcyB3aXRoCisgKiBhIG5vbi1zY2FsZWQgbSB1cG9uIHJldHVybi4gIFRoaXMgbm9uLXNjYWxlZCBtIHdpbGwgcmVzdWx0IGluIGEKKyAqIG5ld19yYXRlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRhcmdldF9yYXRlIChidXQgbm90IGdyZWF0ZXIgdGhhbgorICogdGFyZ2V0X3JhdGUpIGdpdmVuIHRoZSBjdXJyZW50IChwYXJlbnRfcmF0ZSwgbiwgcHJlc2NhbGVkIG0pCisgKiB0cmlwbGUuIFJldHVybnMgRFBMTF9NVUxUX1VOREVSRkxPVyBpbiB0aGUgZXZlbnQgdGhhdCB0aGUKKyAqIG5vbi1zY2FsZWQgbSBhdHRlbXB0ZWQgdG8gdW5kZXJmbG93LCB3aGljaCBjYW4gYWxsb3cgdGhlIGNhbGxpbmcKKyAqIGZ1bmN0aW9uIHRvIGJhaWwgb3V0IGVhcmx5OyBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBfZHBsbF90ZXN0X211bHQoaW50ICptLCBpbnQgbiwgdW5zaWduZWQgbG9uZyAqbmV3X3JhdGUsCisJCQkgICB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLAorCQkJICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlpbnQgciA9IDAsIGNhcnJ5ID0gMDsKKworCS8qIFVuc2NhbGUgbSBhbmQgcm91bmQgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCptICUgRFBMTF9TQ0FMRV9GQUNUT1IgPj0gRFBMTF9ST1VORElOR19WQUwpCisJCWNhcnJ5ID0gMTsKKwkqbSA9ICgqbSAvIERQTExfU0NBTEVfRkFDVE9SKSArIGNhcnJ5OworCisJLyoKKwkgKiBUaGUgbmV3IHJhdGUgbXVzdCBiZSA8PSB0aGUgdGFyZ2V0IHJhdGUgdG8gYXZvaWQgcHJvZ3JhbW1pbmcKKwkgKiBhIHJhdGUgdGhhdCBpcyBpbXBvc3NpYmxlIGZvciB0aGUgaGFyZHdhcmUgdG8gaGFuZGxlCisJICovCisJKm5ld19yYXRlID0gX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZShwYXJlbnRfcmF0ZSwgKm0sIG4pOworCWlmICgqbmV3X3JhdGUgPiB0YXJnZXRfcmF0ZSkgeworCQkoKm0pLS07CisJCSpuZXdfcmF0ZSA9IDA7CisJfQorCisJLyogR3VhcmQgYWdhaW5zdCBtIHVuZGVyZmxvdyAqLworCWlmICgqbSA8IERQTExfTUlOX01VTFRJUExJRVIpIHsKKwkJKm0gPSBEUExMX01JTl9NVUxUSVBMSUVSOworCQkqbmV3X3JhdGUgPSAwOworCQlyID0gRFBMTF9NVUxUX1VOREVSRkxPVzsKKwl9CisKKwlpZiAoKm5ld19yYXRlID09IDApCisJCSpuZXdfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUocGFyZW50X3JhdGUsICptLCBuKTsKKworCXJldHVybiByOworfQorCisvKiBQdWJsaWMgZnVuY3Rpb25zICovCisKK3ZvaWQgb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHY7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybjsKKworCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKworCS8qIFJlcGFyZW50IGluIGNhc2UgdGhlIGRwbGwgaXMgaW4gYnlwYXNzICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmICh2ID09IE9NQVAyWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDJYWFhfRU5fRFBMTF9GUkJZUEFTUykKKwkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWlmICh2ID09IE9NQVAzWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDNYWFhfRU5fRFBMTF9GUkJZUEFTUykKKwkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWlmICh2ID09IE9NQVA0WFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9GUkJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQNFhYWF9FTl9EUExMX01OQllQQVNTKQorCQkJY2xrX3JlcGFyZW50KGNsaywgZGQtPmNsa19ieXBhc3MpOworCX0KKwlyZXR1cm47Cit9CisKKy8qKgorICogb21hcDJfZ2V0X2RwbGxfcmF0ZSAtIHJldHVybnMgdGhlIGN1cnJlbnQgRFBMTCBDTEtPVVQgcmF0ZQorICogQGNsazogc3RydWN0IGNsayAqIG9mIGEgRFBMTAorICoKKyAqIERQTExzIGNhbiBiZSBsb2NrZWQgb3IgYnlwYXNzZWQgLSBiYXNpY2FsbHksIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgKiBXaGVuIGxvY2tlZCwgdGhlIERQTEwgb3V0cHV0IGRlcGVuZHMgb24gdGhlIE0gYW5kIE4gdmFsdWVzLiAgV2hlbgorICogYnlwYXNzZWQsIG9uIE9NQVAyeHh4LCB0aGUgb3V0cHV0IHJhdGUgaXMgZWl0aGVyIHRoZSAzMktpSHogY2xvY2sKKyAqIG9yIHN5c19jbGsuICBCeXBhc3MgcmF0ZXMgb24gT01BUDMgZGVwZW5kIG9uIHRoZSBEUExMOiBEUExMcyAxIGFuZAorICogMiBhcmUgYnlwYXNzZWQgd2l0aCBkcGxsMV9mY2xrIGFuZCBkcGxsMl9mY2xrIHJlc3BlY3RpdmVseQorICogKGdlbmVyYXRlZCBieSBEUExMMyksIHdoaWxlIERQTEwgMywgNCwgYW5kIDUgYnlwYXNzIHJhdGVzIGFyZSBzeXNfY2xrLgorICogUmV0dXJucyB0aGUgY3VycmVudCBEUExMIENMS09VVCByYXRlICgqbm90KiBDTEtPVVRYMikgaWYgdGhlIERQTEwgaXMKKyAqIGxvY2tlZCwgb3IgdGhlIGFwcHJvcHJpYXRlIGJ5cGFzcyByYXRlIGlmIHRoZSBEUExMIGlzIGJ5cGFzc2VkLCBvciAwCisgKiBpZiB0aGUgY2xvY2sgQGNsayBpcyBub3QgYSBEUExMLgorICovCit1MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJbG9uZyBsb25nIGRwbGxfY2xrOworCXUzMiBkcGxsX211bHQsIGRwbGxfZGl2LCB2OworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gMDsKKworCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKKwkJCXJldHVybiBkZC0+Y2xrX2J5cGFzcy0+cmF0ZTsKKwl9CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCWRwbGxfbXVsdCA9IHYgJiBkZC0+bXVsdF9tYXNrOworCWRwbGxfbXVsdCA+Pj0gX19mZnMoZGQtPm11bHRfbWFzayk7CisJZHBsbF9kaXYgPSB2ICYgZGQtPmRpdjFfbWFzazsKKwlkcGxsX2RpdiA+Pj0gX19mZnMoZGQtPmRpdjFfbWFzayk7CisKKwlkcGxsX2NsayA9IChsb25nIGxvbmcpZGQtPmNsa19yZWYtPnJhdGUgKiBkcGxsX211bHQ7CisJZG9fZGl2KGRwbGxfY2xrLCBkcGxsX2RpdiArIDEpOworCisJcmV0dXJuIGRwbGxfY2xrOworfQorCisvKiBEUExMIHJhdGUgcm91bmRpbmcgY29kZSAqLworCisvKioKKyAqIG9tYXAyX2RwbGxfc2V0X3JhdGVfdG9sZXJhbmNlOiBzZXQgdGhlIGVycm9yIHRvbGVyYW5jZSBkdXJpbmcgcmF0ZSByb3VuZGluZworICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMCisgKiBAdG9sZXJhbmNlOiBtYXhpbXVtIHJhdGUgZXJyb3IgdG9sZXJhbmNlCisgKgorICogU2V0IHRoZSBtYXhpbXVtIERQTEwgcmF0ZSBlcnJvciB0b2xlcmFuY2UgZm9yIHRoZSByYXRlIHJvdW5kaW5nCisgKiBhbGdvcml0aG0uICBUaGUgcmF0ZSB0b2xlcmFuY2UgaXMgYW4gYXR0ZW1wdCB0byBiYWxhbmNlIERQTEwgcG93ZXIKKyAqIHNhdmluZyAodGhlIGxlYXN0IGRpdmlkZXIgdmFsdWUgIm4iKSB2cy4gcmF0ZSBmaWRlbGl0eSAodGhlIGxlYXN0CisgKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRlc2lyZWQgRFBMTCB0YXJnZXQgcmF0ZSBhbmQgdGhlIHJvdW5kZWQKKyAqIHJhdGUgb3V0IG9mIHRoZSBhbGdvcml0aG0pLiAgU28sIGluY3JlYXNpbmcgdGhlIHRvbGVyYW5jZSBpcyBsaWtlbHkKKyAqIHRvIGRlY3JlYXNlIERQTEwgcG93ZXIgY29uc3VtcHRpb24gYW5kIGluY3JlYXNlIERQTEwgcmF0ZSBlcnJvci4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiBwcm92aWRlZCBhIG51bGwgY2xvY2sgcHRyIG9yIGEgY2xrIHRoYXQgaXMgbm90IGEKKyAqIERQTEw7IG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgb21hcDJfZHBsbF9zZXRfcmF0ZV90b2xlcmFuY2Uoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgdG9sZXJhbmNlKQoreworCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGstPmRwbGxfZGF0YS0+cmF0ZV90b2xlcmFuY2UgPSB0b2xlcmFuY2U7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUgLSByb3VuZCBhIHRhcmdldCByYXRlIGZvciBhbiBPTUFQIERQTEwKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBmb3IgYSBEUExMCisgKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgRFBMTCBjbG9jayByYXRlCisgKgorICogR2l2ZW4gYSBEUExMLCBhIGRlc2lyZWQgdGFyZ2V0IHJhdGUsIGFuZCBhIHJhdGUgdG9sZXJhbmNlLCByb3VuZAorICogdGhlIHRhcmdldCByYXRlIHRvIGEgcG9zc2libGUsIHByb2dyYW1tYWJsZSByYXRlIGZvciB0aGlzIERQTEwuCisgKiBSYXRlIHRvbGVyYW5jZSBpcyBhc3N1bWVkIHRvIGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSB0aGlzCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQuICBBdHRlbXB0cyB0byBzZWxlY3QgdGhlIG1pbmltdW0gcG9zc2libGUgbgorICogd2l0aGluIHRoZSB0b2xlcmFuY2UgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiAgU3RvcmVzIHRoZQorICogY29tcHV0ZWQgKG0sIG4pIGluIHRoZSBEUExMJ3MgZHBsbF9kYXRhIHN0cnVjdHVyZSBzbyBzZXRfcmF0ZSgpCisgKiB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyAoZXhwZW5zaXZlKSBmdW5jdGlvbiBhZ2Fpbi4gIFJldHVybnMgfjAKKyAqIGlmIHRoZSB0YXJnZXQgcmF0ZSBjYW5ub3QgYmUgcm91bmRlZCwgZWl0aGVyIGJlY2F1c2UgdGhlIHJhdGUgaXMKKyAqIHRvbyBsb3cgb3IgYmVjYXVzZSB0aGUgcmF0ZSB0b2xlcmFuY2UgaXMgc2V0IHRvbyB0aWdodGx5OyBvciB0aGUKKyAqIHJvdW5kZWQgcmF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2xvbmcgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3sKKwlpbnQgbSwgbiwgciwgZSwgc2NhbGVkX21heF9tOworCXVuc2lnbmVkIGxvbmcgc2NhbGVkX3J0X3JwLCBuZXdfcmF0ZTsKKwlpbnQgbWluX2UgPSAtMSwgbWluX2VfbSA9IC0xLCBtaW5fZV9uID0gLTE7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCisJCXJldHVybiB+MDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSBmb3IgY2xvY2sgJXMsIHRhcmdldCByYXRlICIKKwkJICIlbGRcbiIsIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOworCisJc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoZGQtPmNsa19yZWYtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7CisJc2NhbGVkX21heF9tID0gZGQtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7CisKKwlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSAwOworCisJZm9yIChuID0gZGQtPm1pbl9kaXZpZGVyOyBuIDw9IGRkLT5tYXhfZGl2aWRlcjsgbisrKSB7CisKKwkJLyogSXMgdGhlIChpbnB1dCBjbGssIGRpdmlkZXIpIHBhaXIgdmFsaWQgZm9yIHRoZSBEUExMPyAqLworCQlyID0gX2RwbGxfdGVzdF9maW50KGNsaywgbik7CisJCWlmIChyID09IERQTExfRklOVF9VTkRFUkZMT1cpCisJCQlicmVhazsKKwkJZWxzZSBpZiAociA9PSBEUExMX0ZJTlRfSU5WQUxJRCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbXB1dGUgdGhlIHNjYWxlZCBEUExMIG11bHRpcGxpZXIsIGJhc2VkIG9uIHRoZSBkaXZpZGVyICovCisJCW0gPSBzY2FsZWRfcnRfcnAgKiBuOworCisJCS8qCisJCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gdXAsIGEgbSBvdmVyZmxvdyBtZWFucyB3ZQorCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBpbmNyZWFzZXMgaW4KKwkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCisJCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQorCQkgKi8KKwkJaWYgKG0gPiBzY2FsZWRfbWF4X20pCisJCQlicmVhazsKKworCQlyID0gX2RwbGxfdGVzdF9tdWx0KCZtLCBuLCAmbmV3X3JhdGUsIHRhcmdldF9yYXRlLAorCQkJCSAgICBkZC0+Y2xrX3JlZi0+cmF0ZSk7CisKKwkJLyogbSBjYW4ndCBiZSBzZXQgbG93IGVub3VnaCBmb3IgdGhpcyBuIC0gdHJ5IHdpdGggYSBsYXJnZXIgbiAqLworCQlpZiAociA9PSBEUExMX01VTFRfVU5ERVJGTE9XKQorCQkJY29udGludWU7CisKKwkJZSA9IHRhcmdldF9yYXRlIC0gbmV3X3JhdGU7CisJCXByX2RlYnVnKCJjbG9jazogbiA9ICVkOiBtID0gJWQ6IHJhdGUgZXJyb3IgaXMgJWQgIgorCQkJICIobmV3X3JhdGUgPSAlbGQpXG4iLCBuLCBtLCBlLCBuZXdfcmF0ZSk7CisKKwkJaWYgKG1pbl9lID09IC0xIHx8CisJCSAgICBtaW5fZSA+PSAoaW50KShhYnMoZSkgLSBkZC0+cmF0ZV90b2xlcmFuY2UpKSB7CisJCQltaW5fZSA9IGU7CisJCQltaW5fZV9tID0gbTsKKwkJCW1pbl9lX24gPSBuOworCisJCQlwcl9kZWJ1ZygiY2xvY2s6IGZvdW5kIG5ldyBsZWFzdCBlcnJvciAlZFxuIiwgbWluX2UpOworCisJCQkvKiBXZSBmb3VuZCBnb29kIHNldHRpbmdzIC0tIGJhaWwgb3V0IG5vdyAqLworCQkJaWYgKG1pbl9lIDw9IGRkLT5yYXRlX3RvbGVyYW5jZSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChtaW5fZSA8IDApIHsKKwkJcHJfZGVidWcoImNsb2NrOiBlcnJvcjogdGFyZ2V0IHJhdGUgb3IgdG9sZXJhbmNlIHRvbyBsb3dcbiIpOworCQlyZXR1cm4gfjA7CisJfQorCisJZGQtPmxhc3Rfcm91bmRlZF9tID0gbWluX2VfbTsKKwlkZC0+bGFzdF9yb3VuZGVkX24gPSBtaW5fZV9uOworCWRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUoZGQtPmNsa19yZWYtPnJhdGUsCisJCQkJCQkgICAgICAgbWluX2VfbSwgIG1pbl9lX24pOworCisJcHJfZGVidWcoImNsb2NrOiBmaW5hbCBsZWFzdCBlcnJvcjogZSA9ICVkLCBtID0gJWQsIG4gPSAlZFxuIiwKKwkJIG1pbl9lLCBtaW5fZV9tLCBtaW5fZV9uKTsKKwlwcl9kZWJ1ZygiY2xvY2s6IGZpbmFsIHJhdGU6ICVsZCAgKHRhcmdldCByYXRlOiAlbGQpXG4iLAorCQkgZGQtPmxhc3Rfcm91bmRlZF9yYXRlLCB0YXJnZXRfcmF0ZSk7CisKKwlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggNzU5YzcyYS4uYTZkMGIzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMiw3ICsyLDcgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogIENvbnRhY3RzOgogICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KQEAgLTE0LDExICsxNCwxMCBAQAogICovCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTI4LDEwICsyNyw3IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9ja2RvbWFpbi5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KLSNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCkBAIC0zOSwxNDAgKzM1LDQ0IEBACiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKLS8qIERQTEwgcmF0ZSByb3VuZGluZzogbWluaW11bSBEUExMIG11bHRpcGxpZXIsIGRpdmlkZXIgdmFsdWVzICovCi0jZGVmaW5lIERQTExfTUlOX01VTFRJUExJRVIJCTEKLSNkZWZpbmUgRFBMTF9NSU5fRElWSURFUgkJMQotCi0vKiBQb3NzaWJsZSBlcnJvciByZXN1bHRzIGZyb20gX2RwbGxfdGVzdF9tdWx0ICovCi0jZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCS0xCi0KLS8qCi0gKiBTY2FsZSBmYWN0b3IgdG8gbWl0aWdhdGUgcm91bmRvZmYgZXJyb3JzIGluIERQTEwgcmF0ZSByb3VuZGluZy4KLSAqIFRoZSBoaWdoZXIgdGhlIHNjYWxlIGZhY3RvciwgdGhlIGdyZWF0ZXIgdGhlIHJpc2sgb2YgYXJpdGhtZXRpYyBvdmVyZmxvdywKLSAqIGJ1dCB0aGUgY2xvc2VyIHRoZSByb3VuZGVkIHJhdGUgdG8gdGhlIHRhcmdldCByYXRlLiAgRFBMTF9TQ0FMRV9GQUNUT1IKLSAqIG11c3QgYmUgYSBwb3dlciBvZiBEUExMX1NDQUxFX0JBU0UuCi0gKi8KLSNkZWZpbmUgRFBMTF9TQ0FMRV9GQUNUT1IJCTY0Ci0jZGVmaW5lIERQTExfU0NBTEVfQkFTRQkJCTIKLSNkZWZpbmUgRFBMTF9ST1VORElOR19WQUwJCSgoRFBMTF9TQ0FMRV9CQVNFIC8gMikgKiBcCi0JCQkJCSAoRFBMTF9TQ0FMRV9GQUNUT1IgLyBEUExMX1NDQUxFX0JBU0UpKQotCi0vKiBEUExMIHZhbGlkIEZpbnQgZnJlcXVlbmN5IGJhbmQgbGltaXRzIC0gZnJvbSAzNHh4IFRSTSBTZWN0aW9uIDQuNy42LjIgKi8KLSNkZWZpbmUgRFBMTF9GSU5UX0JBTkQxX01JTgkJNzUwMDAwCi0jZGVmaW5lIERQTExfRklOVF9CQU5EMV9NQVgJCTIxMDAwMDAKLSNkZWZpbmUgRFBMTF9GSU5UX0JBTkQyX01JTgkJNzUwMDAwMAotI2RlZmluZSBEUExMX0ZJTlRfQkFORDJfTUFYCQkyMTAwMDAwMAotCi0vKiBfZHBsbF90ZXN0X2ZpbnQoKSByZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUgRFBMTF9GSU5UX1VOREVSRkxPVwkJLTEKLSNkZWZpbmUgRFBMTF9GSU5UX0lOVkFMSUQJCS0yCi0KIHU4IGNwdV9tYXNrOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9NQVAyLzMvNCBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogT01BUDIrIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucworICovCiAKLXZvaWQgb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHY7Ci0Jc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCWlmICghZGQpCi0JCXJldHVybjsKLQotCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7Ci0JdiAmPSBkZC0+ZW5hYmxlX21hc2s7Ci0JdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKLQotCS8qIFJlcGFyZW50IGluIGNhc2UgdGhlIGRwbGwgaXMgaW4gYnlwYXNzICovCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVAyWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDJYWFhfRU5fRFBMTF9GUkJZUEFTUykKLQkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVAzWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDNYWFhfRU5fRFBMTF9GUkJZUEFTUykKLQkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVA0WFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9GUkJZUEFTUyB8fAotCQkgICAgdiA9PSBPTUFQNFhYWF9FTl9EUExMX01OQllQQVNTKQotCQkJY2xrX3JlcGFyZW50KGNsaywgZGQtPmNsa19ieXBhc3MpOwotCX0KLQlyZXR1cm47Ci19CisvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogCiAvKioKLSAqIF9vbWFwMnh4eF9jbGtfY29tbWl0IC0gY29tbWl0IGNsb2NrIHBhcmVudC9yYXRlIGNoYW5nZXMgaW4gaGFyZHdhcmUKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKgorICogX29tYXAyX21vZHVsZV93YWl0X3JlYWR5IC0gd2FpdCBmb3IgYW4gT01BUCBtb2R1bGUgdG8gbGVhdmUgSURMRQorICogQGNsazogc3RydWN0IGNsayAqIGJlbG9uZ2luZyB0byB0aGUgbW9kdWxlCiAgKgotICogSWYgQGNsayBoYXMgdGhlIERFTEFZRURfQVBQIGZsYWcgc2V0LCBtZWFuaW5nIHRoYXQgcGFyZW50L3JhdGUgY2hhbmdlcwotICogZG9uJ3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIFZBTElEX0NPTkZJRyBiaXQgaXMgd3JpdHRlbiwgd3JpdGUgdGhlCi0gKiBWQUxJRF9DT05GSUcgYml0IGFuZCB3YWl0IGZvciB0aGUgd3JpdGUgdG8gY29tcGxldGUuICBObyByZXR1cm4gdmFsdWUuCisgKiBJZiB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBmb3IgdGhlIE9NQVAgaGFyZHdhcmUgSVAgYmxvY2sgdGhhdAorICogY29ycmVzcG9uZHMgdG8gY2xvY2sgQGNsayBhcmUgZW5hYmxlZCwgdGhlbiB3YWl0IGZvciB0aGUgbW9kdWxlIHRvCisgKiBpbmRpY2F0ZSByZWFkaW5lc3MgKGkuZS4sIHRvIGxlYXZlIElETEUpLiAgVGhpcyBjb2RlIGRvZXMgbm90CisgKiBiZWxvbmcgaW4gdGhlIGNsb2NrIGNvZGUgYW5kIHdpbGwgYmUgbW92ZWQgaW4gdGhlIG1lZGl1bSB0ZXJtIHRvCisgKiBtb2R1bGUtZGVwZW5kZW50IGNvZGUuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXN0YXRpYyB2b2lkIF9vbWFwMnh4eF9jbGtfY29tbWl0KHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIF9vbWFwMl9tb2R1bGVfd2FpdF9yZWFkeShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJcmV0dXJuOworCXZvaWQgX19pb21lbSAqY29tcGFuaW9uX3JlZywgKmlkbGVzdF9yZWc7CisJdTggb3RoZXJfYml0LCBpZGxlc3RfYml0LCBpZGxlc3RfdmFsOwogCi0JaWYgKCEoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKSkKLQkJcmV0dXJuOwotCi0JcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfVkFMSURfQ09ORklHLCBPTUFQMjRYWF9HUl9NT0QsCi0JCU9NQVAyX1BSQ01fQ0xLQ0ZHX0NUUkxfT0ZGU0VUKTsKLQkvKiBPQ1AgYmFycmllciAqLwotCXBybV9yZWFkX21vZF9yZWcoT01BUDI0WFhfR1JfTU9ELCBPTUFQMl9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7Ci19Ci0KLS8qCi0gKiBfZHBsbF90ZXN0X2ZpbnQgLSB0ZXN0IHdoZXRoZXIgYW4gRmludCB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIERQTEwKLSAqIEBjbGs6IERQTEwgc3RydWN0IGNsayB0byB0ZXN0Ci0gKiBAbjogZGl2aWRlciB2YWx1ZSAoTikgdG8gdGVzdAotICoKLSAqIFRlc3RzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGRpdmlkZXIgQG4gd2lsbCByZXN1bHQgaW4gYSB2YWxpZCBEUExMCi0gKiBpbnRlcm5hbCBjbG9jayBmcmVxdWVuY3kgRmludC4gU2VlIHRoZSAzNHh4IFRSTSA0LjcuNi4yICJEUExMIEppdHRlcgotICogQ29ycmVjdGlvbiIuICBSZXR1cm5zIDAgaWYgT0ssIC0xIGlmIHRoZSBlbmNsb3NpbmcgbG9vcCBjYW4gdGVybWluYXRlCi0gKiAoYXNzdW1pbmcgdGhhdCBpdCBpcyBjb3VudGluZyBOIHVwd2FyZHMpLCBvciAtMiBpZiB0aGUgZW5jbG9zaW5nIGxvb3AKLSAqIHNob3VsZCBza2lwIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiAoYWdhaW4gYXNzdW1pbmcgTiBpcyBpbmNyZWFzaW5nKS4KLSAqLwotc3RhdGljIGludCBfZHBsbF90ZXN0X2ZpbnQoc3RydWN0IGNsayAqY2xrLCB1OCBuKQotewotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCWxvbmcgZmludDsKLQlpbnQgcmV0ID0gMDsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0KLQkvKiBEUExMIGRpdmlkZXIgbXVzdCByZXN1bHQgaW4gYSB2YWxpZCBqaXR0ZXIgY29ycmVjdGlvbiB2YWwgKi8KLQlmaW50ID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAobiArIDEpOwotCWlmIChmaW50IDwgRFBMTF9GSU5UX0JBTkQxX01JTikgewotCi0JCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlLCAiCi0JCQkgImxvd2VyaW5nIG1heF9kaXZpZGVyXG4iLCBuKTsKLQkJZGQtPm1heF9kaXZpZGVyID0gbjsKLQkJcmV0ID0gRFBMTF9GSU5UX1VOREVSRkxPVzsKLQotCX0gZWxzZSBpZiAoZmludCA+IERQTExfRklOVF9CQU5EMV9NQVggJiYKLQkJICAgZmludCA8IERQTExfRklOVF9CQU5EMl9NSU4pIHsKLQotCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZVxuIiwgbik7Ci0JCXJldCA9IERQTExfRklOVF9JTlZBTElEOwotCi0JfSBlbHNlIGlmIChmaW50ID4gRFBMTF9GSU5UX0JBTkQyX01BWCkgewotCi0JCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlLCAiCi0JCQkgImJvb3N0aW5nIG1pbl9kaXZpZGVyXG4iLCBuKTsKLQkJZGQtPm1pbl9kaXZpZGVyID0gbjsKLQkJcmV0ID0gRFBMTF9GSU5UX0lOVkFMSUQ7Ci0KKwkvKiBOb3QgYWxsIG1vZHVsZXMgaGF2ZSBtdWx0aXBsZSBjbG9ja3MgdGhhdCB0aGVpciBJRExFU1QgZGVwZW5kcyBvbiAqLworCWlmIChjbGstPm9wcy0+ZmluZF9jb21wYW5pb24pIHsKKwkJY2xrLT5vcHMtPmZpbmRfY29tcGFuaW9uKGNsaywgJmNvbXBhbmlvbl9yZWcsICZvdGhlcl9iaXQpOworCQlpZiAoIShfX3Jhd19yZWFkbChjb21wYW5pb25fcmVnKSAmICgxIDw8IG90aGVyX2JpdCkpKQorCQkJcmV0dXJuOwogCX0KIAotCXJldHVybiByZXQ7CisJY2xrLT5vcHMtPmZpbmRfaWRsZXN0KGNsaywgJmlkbGVzdF9yZWcsICZpZGxlc3RfYml0LCAmaWRsZXN0X3ZhbCk7CisKKwlvbWFwMl9jbV93YWl0X2lkbGVzdChpZGxlc3RfcmVnLCAoMSA8PCBpZGxlc3RfYml0KSwgaWRsZXN0X3ZhbCwKKwkJCSAgICAgY2xrLT5uYW1lKTsKIH0KIAorLyogUHVibGljIGZ1bmN0aW9ucyAqLworCiAvKioKICAqIG9tYXAyX2luaXRfY2xrX2Nsa2RtIC0gbG9vayB1cCBhIGNsb2NrZG9tYWluIG5hbWUsIHN0b3JlIHBvaW50ZXIgaW4gY2xrCiAgKiBAY2xrOiBPTUFQIGNsb2NrIHN0cnVjdCBwdHIgdG8gdXNlCkBAIC0xODEsNyArODEsNiBAQAogICogY2xvY2tkb21haW4gcG9pbnRlciwgYW5kIHNhdmUgaXQgaW50byB0aGUgc3RydWN0IGNsay4gIEludGVuZGVkIHRvIGJlCiAgKiBjYWxsZWQgZHVyaW5nIGNsa19yZWdpc3RlcigpLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGNsa2RtIGYvdyBpcyBpbiBwbGFjZSAqLwogdm9pZCBvbWFwMl9pbml0X2Nsa19jbGtkbShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKQEAgLTE5OSwxMTcgKzk4LDYgQEAKIAkJCSAiY2xrZG0gJXNcbiIsIGNsay0+bmFtZSwgY2xrLT5jbGtkbV9uYW1lKTsKIAl9CiB9Ci0jZW5kaWYKLQotLyoqCi0gKiBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQgLSBzZXQgYSBjbGtzZWwgY2xrJ3MgcGFyZW50IGZpZWxkIGZyb20gdGhlIGhhcmR3YXJlCi0gKiBAY2xrOiBPTUFQIGNsb2NrIHN0cnVjdCBwdHIgdG8gdXNlCi0gKgotICogR2l2ZW4gYSBwb2ludGVyIHRvIGEgc291cmNlLXNlbGVjdGFibGUgc3RydWN0IGNsaywgcmVhZCB0aGUgaGFyZHdhcmUKLSAqIHJlZ2lzdGVyIGFuZCBkZXRlcm1pbmUgd2hhdCBpdHMgcGFyZW50IGlzIGN1cnJlbnRseSBzZXQgdG8uICBVcGRhdGUgdGhlCi0gKiBjbGstPnBhcmVudCBmaWVsZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjbGsgcHRyLgotICovCi12b2lkIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7Ci0JdTMyIHIsIGZvdW5kID0gMDsKLQotCWlmICghY2xrLT5jbGtzZWwpCi0JCXJldHVybjsKLQotCXIgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKLQlyID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKLQotCWZvciAoY2xrcyA9IGNsay0+Y2xrc2VsOyBjbGtzLT5wYXJlbnQgJiYgIWZvdW5kOyBjbGtzKyspIHsKLQkJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdiAmJiAhZm91bmQ7IGNsa3IrKykgewotCQkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+dmFsID09IHIpKSB7Ci0JCQkJaWYgKGNsay0+cGFyZW50ICE9IGNsa3MtPnBhcmVudCkgewotCQkJCQlwcl9kZWJ1ZygiY2xvY2s6IGluaXRlZCAlcyBwYXJlbnQgIgotCQkJCQkJICJ0byAlcyAod2FzICVzKVxuIiwKLQkJCQkJCSBjbGstPm5hbWUsIGNsa3MtPnBhcmVudC0+bmFtZSwKLQkJCQkJCSAoKGNsay0+cGFyZW50KSA/Ci0JCQkJCQkgIGNsay0+cGFyZW50LT5uYW1lIDogIk5VTEwiKSk7Ci0JCQkJCWNsa19yZXBhcmVudChjbGssIGNsa3MtPnBhcmVudCk7Ci0JCQkJfTsKLQkJCQlmb3VuZCA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKQotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBpbml0IHBhcmVudDogY291bGQgbm90IGZpbmQgIgotCQkgICAgICAgInJlZ3ZhbCAlMHggZm9yIGNsb2NrICVzXG4iLCByLCAgY2xrLT5uYW1lKTsKLQotCXJldHVybjsKLX0KLQotLyoqCi0gKiBvbWFwMl9nZXRfZHBsbF9yYXRlIC0gcmV0dXJucyB0aGUgY3VycmVudCBEUExMIENMS09VVCByYXRlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgYSBEUExMCi0gKgotICogRFBMTHMgY2FuIGJlIGxvY2tlZCBvciBieXBhc3NlZCAtIGJhc2ljYWxseSwgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAqIFdoZW4gbG9ja2VkLCB0aGUgRFBMTCBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgTSBhbmQgTiB2YWx1ZXMuICBXaGVuCi0gKiBieXBhc3NlZCwgb24gT01BUDJ4eHgsIHRoZSBvdXRwdXQgcmF0ZSBpcyBlaXRoZXIgdGhlIDMyS2lIeiBjbG9jawotICogb3Igc3lzX2Nsay4gIEJ5cGFzcyByYXRlcyBvbiBPTUFQMyBkZXBlbmQgb24gdGhlIERQTEw6IERQTExzIDEgYW5kCi0gKiAyIGFyZSBieXBhc3NlZCB3aXRoIGRwbGwxX2ZjbGsgYW5kIGRwbGwyX2ZjbGsgcmVzcGVjdGl2ZWx5Ci0gKiAoZ2VuZXJhdGVkIGJ5IERQTEwzKSwgd2hpbGUgRFBMTCAzLCA0LCBhbmQgNSBieXBhc3MgcmF0ZXMgYXJlIHN5c19jbGsuCi0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUgKCpub3QqIENMS09VVFgyKSBpZiB0aGUgRFBMTCBpcwotICogbG9ja2VkLCBvciB0aGUgYXBwcm9wcmlhdGUgYnlwYXNzIHJhdGUgaWYgdGhlIERQTEwgaXMgYnlwYXNzZWQsIG9yIDAKLSAqIGlmIHRoZSBjbG9jayBAY2xrIGlzIG5vdCBhIERQTEwuCi0gKi8KLXUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlsb25nIGxvbmcgZHBsbF9jbGs7Ci0JdTMyIGRwbGxfbXVsdCwgZHBsbF9kaXYsIHY7Ci0Jc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCWlmICghZGQpCi0JCXJldHVybiAwOwotCi0JLyogUmV0dXJuIGJ5cGFzcyByYXRlIGlmIERQTEwgaXMgYnlwYXNzZWQgKi8KLQl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKLQl2ICY9IGRkLT5lbmFibGVfbWFzazsKLQl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVAyWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDJYWFhfRU5fRFBMTF9GUkJZUEFTUykKLQkJCXJldHVybiBkZC0+Y2xrX2J5cGFzcy0+cmF0ZTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVAzWFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDNYWFhfRU5fRFBMTF9GUkJZUEFTUykKLQkJCXJldHVybiBkZC0+Y2xrX2J5cGFzcy0+cmF0ZTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCWlmICh2ID09IE9NQVA0WFhYX0VOX0RQTExfTFBCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9GUkJZUEFTUyB8fAotCQkgICAgdiA9PSBPTUFQNFhYWF9FTl9EUExMX01OQllQQVNTKQotCQkJcmV0dXJuIGRkLT5jbGtfYnlwYXNzLT5yYXRlOwotCX0KLQotCXYgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7Ci0JZHBsbF9tdWx0ID0gdiAmIGRkLT5tdWx0X21hc2s7Ci0JZHBsbF9tdWx0ID4+PSBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKLQlkcGxsX2RpdiA9IHYgJiBkZC0+ZGl2MV9tYXNrOwotCWRwbGxfZGl2ID4+PSBfX2ZmcyhkZC0+ZGl2MV9tYXNrKTsKLQotCWRwbGxfY2xrID0gKGxvbmcgbG9uZylkZC0+Y2xrX3JlZi0+cmF0ZSAqIGRwbGxfbXVsdDsKLQlkb19kaXYoZHBsbF9jbGssIGRwbGxfZGl2ICsgMSk7Ci0KLQlyZXR1cm4gZHBsbF9jbGs7Ci19Ci0KLS8qCi0gKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2ssCi0gKiBkaXZpZGVkIGJ5IHNvbWUgZmFjdG9yCi0gKi8KLXVuc2lnbmVkIGxvbmcgb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCVdBUk5fT04oIWNsay0+Zml4ZWRfZGl2KTsKLQotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNsay0+Zml4ZWRfZGl2OwotfQogCiAvKioKICAqIG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uIC0gZmluZCBjb21wYW5pb24gY2xvY2sgdG8gQGNsawpAQCAtMzUxLDcgKzEzOSw4IEBACiAgKiBvbWFwMl9jbGtfZGZsdF9maW5kX2lkbGVzdCAtIGZpbmQgQ01fSURMRVNUIHJlZyB2YSwgYml0IHNoaWZ0IGZvciBAY2xrCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogdG8gZmluZCBJRExFU1QgaW5mbyBmb3IKICAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gcmV0dXJuIHRoZSBDTV9JRExFU1QgdmEgaW4KLSAqIEBpZGxlc3RfYml0OiB1OCAqKiB0byByZXR1cm4gdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW4KKyAqIEBpZGxlc3RfYml0OiB1OCAqIHRvIHJldHVybiB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbgorICogQGlkbGVzdF92YWw6IHU4ICogdG8gcmV0dXJuIHRoZSBpZGxlIHN0YXR1cyBpbmRpY2F0b3IKICAqCiAgKiBSZXR1cm4gdGhlIENNX0lETEVTVCByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXQgc2hpZnQgY29ycmVzcG9uZGluZwogICogdG8gdGhlIG1vZHVsZSB0aGF0ICJvd25zIiB0aGlzIGNsb2NrLiAgVGhpcyBkZWZhdWx0IGNvZGUgYXNzdW1lcwpAQCAtMzYxLDQwICsxNTAsMjYgQEAKICAqIENNX0lETEVTVDIpLiAgVGhpcyBpcyBub3QgdHJ1ZSBmb3IgYWxsIG1vZHVsZXMuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KIHZvaWQgb21hcDJfY2xrX2RmbHRfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLCB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCXU4ICppZGxlc3RfYml0KQorCQkJCXU4ICppZGxlc3RfYml0LCB1OCAqaWRsZXN0X3ZhbCkKIHsKIAl1MzIgcjsKIAogCXIgPSAoKChfX2ZvcmNlIHUzMiljbGstPmVuYWJsZV9yZWcgJiB+MHhmMCkgfCAweDIwKTsKIAkqaWRsZXN0X3JlZyA9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKXI7CiAJKmlkbGVzdF9iaXQgPSBjbGstPmVuYWJsZV9iaXQ7Ci19CiAKLS8qKgotICogb21hcDJfbW9kdWxlX3dhaXRfcmVhZHkgLSB3YWl0IGZvciBhbiBPTUFQIG1vZHVsZSB0byBsZWF2ZSBJRExFCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVsb25naW5nIHRvIHRoZSBtb2R1bGUKLSAqCi0gKiBJZiB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBmb3IgdGhlIE9NQVAgaGFyZHdhcmUgSVAgYmxvY2sgdGhhdAotICogY29ycmVzcG9uZHMgdG8gY2xvY2sgQGNsayBhcmUgZW5hYmxlZCwgdGhlbiB3YWl0IGZvciB0aGUgbW9kdWxlIHRvCi0gKiBpbmRpY2F0ZSByZWFkaW5lc3MgKGkuZS4sIHRvIGxlYXZlIElETEUpLiAgVGhpcyBjb2RlIGRvZXMgbm90Ci0gKiBiZWxvbmcgaW4gdGhlIGNsb2NrIGNvZGUgYW5kIHdpbGwgYmUgbW92ZWQgaW4gdGhlIG1lZGl1bSB0ZXJtIHRvCi0gKiBtb2R1bGUtZGVwZW5kZW50IGNvZGUuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIG9tYXAyX21vZHVsZV93YWl0X3JlYWR5KHN0cnVjdCBjbGsgKmNsaykKLXsKLQl2b2lkIF9faW9tZW0gKmNvbXBhbmlvbl9yZWcsICppZGxlc3RfcmVnOwotCXU4IG90aGVyX2JpdCwgaWRsZXN0X2JpdDsKKwkvKgorCSAqIDI0eHggdXNlcyAwIHRvIGluZGljYXRlIG5vdCByZWFkeSwgYW5kIDEgdG8gaW5kaWNhdGUgcmVhZHkuCisJICogMzR4eCByZXZlcnNlcyB0aGlzLCBqdXN0IHRvIGtlZXAgdXMgb24gb3VyIHRvZXMKKwkgKiBBTTM1eHggdXNlcyBib3RoLCBkZXBlbmRpbmcgb24gdGhlIG1vZHVsZS4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCSppZGxlc3RfdmFsID0gT01BUDI0WFhfQ01fSURMRVNUX1ZBTDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJKmlkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOworCWVsc2UKKwkJQlVHKCk7CiAKLQkvKiBOb3QgYWxsIG1vZHVsZXMgaGF2ZSBtdWx0aXBsZSBjbG9ja3MgdGhhdCB0aGVpciBJRExFU1QgZGVwZW5kcyBvbiAqLwotCWlmIChjbGstPm9wcy0+ZmluZF9jb21wYW5pb24pIHsKLQkJY2xrLT5vcHMtPmZpbmRfY29tcGFuaW9uKGNsaywgJmNvbXBhbmlvbl9yZWcsICZvdGhlcl9iaXQpOwotCQlpZiAoIShfX3Jhd19yZWFkbChjb21wYW5pb25fcmVnKSAmICgxIDw8IG90aGVyX2JpdCkpKQotCQkJcmV0dXJuOwotCX0KLQotCWNsay0+b3BzLT5maW5kX2lkbGVzdChjbGssICZpZGxlc3RfcmVnLCAmaWRsZXN0X2JpdCk7Ci0KLQlvbWFwMl9jbV93YWl0X2lkbGVzdChpZGxlc3RfcmVnLCAoMSA8PCBpZGxlc3RfYml0KSwgY2xrLT5uYW1lKTsKIH0KIAogaW50IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCkBAIC00MTYsNyArMTkxLDcgQEAKIAl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsgLyogT0NQIGJhcnJpZXIgKi8KIAogCWlmIChjbGstPm9wcy0+ZmluZF9pZGxlc3QpCi0JCW9tYXAyX21vZHVsZV93YWl0X3JlYWR5KGNsayk7CisJCV9vbWFwMl9tb2R1bGVfd2FpdF9yZWFkeShjbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYsMzM2ICsyMzEsMTA4IEBACiAJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAogfTsKIAotLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50Ci0gKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KKy8qKgorICogb21hcDJfY2xrX2Rpc2FibGUgLSBkaXNhYmxlIGEgY2xvY2ssIGlmIHRoZSBzeXN0ZW0gaXMgbm90IHVzaW5nIGl0CisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogdG8gZGlzYWJsZQorICoKKyAqIERlY3JlbWVudHMgdGhlIHVzZWNvdW50IG9uIHN0cnVjdCBjbGsgQGNsay4gIElmIHRoZXJlIGFyZSBubyB1c2VycworICogbGVmdCwgY2FsbCB0aGUgY2xrb3BzLXNwZWNpZmljIGNsb2NrIGRpc2FibGUgZnVuY3Rpb24gdG8gZGlzYWJsZSBpdAorICogaW4gaGFyZHdhcmUuICBJZiB0aGUgY2xvY2sgaXMgcGFydCBvZiBhIGNsb2NrZG9tYWluICh3aGljaCB0aGV5IGFsbAorICogc2hvdWxkIGJlKSwgcmVxdWVzdCB0aGF0IHRoZSBjbG9ja2RvbWFpbiBiZSBkaXNhYmxlZC4gIChJdCB0b28gaGFzCisgKiBhIHVzZWNvdW50LCBhbmQgc28gd2lsbCBub3QgYmUgZGlzYWJsZWQgaW4gdGhlIGhhcmR3YXJlIHVudGlsIGl0IG5vCisgKiBsb25nZXIgaGFzIGFueSB1c2Vycy4pICBJZiB0aGUgY2xvY2sgaGFzIGEgcGFyZW50IGNsb2NrIChtb3N0IG9mCisgKiB0aGVtIGRvKSwgdGhlbiBjYWxsIG91cnNlbHZlcywgcmVjdXJzaW5nIG9uIHRoZSBwYXJlbnQgY2xvY2suICBUaGlzCisgKiBjYW4gY2F1c2UgYW4gZW50aXJlIGJyYW5jaCBvZiB0aGUgY2xvY2sgdHJlZSB0byBiZSBwb3dlcmVkIG9mZiBieQorICogc2ltcGx5IGRpc2FibGluZyBvbmUgY2xvY2suICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgd2l0aCB0aGUgY2xvY2tmd19sb2NrCisgKiBzcGlubG9jayBoZWxkLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1zdGF0aWMgaW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5vcHMtPmVuYWJsZShjbGspOwotfQotCi0vKiBEaXNhYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50ICovCi1zdGF0aWMgdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7Ci19Ci0KIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewotCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKLQkJX29tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChjbGstPnBhcmVudCkKLQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xrZG0gZi93IGlzIGluIHBsYWNlICovCi0JCWlmIChjbGstPmNsa2RtKQotCQkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKLSNlbmRpZgotCisJaWYgKGNsay0+dXNlY291bnQgPT0gMCkgeworCQlXQVJOKDEsICJjbG9jazogJXM6IG9tYXAyX2Nsa19kaXNhYmxlKCkgY2FsbGVkLCBidXQgdXNlY291bnQgIgorCQkgICAgICJhbHJlYWR5IDA/IiwgY2xrLT5uYW1lKTsKKwkJcmV0dXJuOwogCX0KLX0KIAotaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWludCByZXQgPSAwOworCXByX2RlYnVnKCJjbG9jazogJXM6IGRlY3JlbWVudGluZyB1c2Vjb3VudFxuIiwgY2xrLT5uYW1lKTsKIAotCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgewotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGtkbSBmL3cgaXMgaW4gcGxhY2UgKi8KLQkJaWYgKGNsay0+Y2xrZG0pCi0JCQlvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKGNsay0+Y2xrZG0sIGNsayk7Ci0jZW5kaWYKKwljbGstPnVzZWNvdW50LS07CiAKLQkJaWYgKGNsay0+cGFyZW50KSB7Ci0JCQlyZXQgPSBvbWFwMl9jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnI7Ci0JCX0KKwlpZiAoY2xrLT51c2Vjb3VudCA+IDApCisJCXJldHVybjsKIAotCQlyZXQgPSBfb21hcDJfY2xrX2VuYWJsZShjbGspOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAoY2xrLT5wYXJlbnQpCi0JCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCXByX2RlYnVnKCJjbG9jazogJXM6IGRpc2FibGluZyBpbiBoYXJkd2FyZVxuIiwgY2xrLT5uYW1lKTsKIAotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKKwljbGstPm9wcy0+ZGlzYWJsZShjbGspOwogCi1lcnI6Ci0jaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGNsa2RtIGYvdyBpcyBpbiBwbGFjZSAqLwogCWlmIChjbGstPmNsa2RtKQogCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwotI2VuZGlmCi0JY2xrLT51c2Vjb3VudC0tOwotCXJldHVybiByZXQ7Ci19CiAKLS8qCi0gKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhcmUgcGFydCBvZiBDTEtTRUxfeHl6IGdvdmVybmVkIGNsb2Nrcy4KLSAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0byB1c2UgY2xrLT5lbmFibGUoKSBmdW5jdGlvbnMgbGlrZSBvbiBvbWFwMT8KLSAqLwotdW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdTMyIGRpdiA9IDA7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IHJlY2FsYydpbmcgY2xrc2VsIGNsayAlc1xuIiwgY2xrLT5uYW1lKTsKLQotCWRpdiA9IG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihjbGspOwotCWlmIChkaXYgPT0gMCkKLQkJcmV0dXJuIGNsay0+cmF0ZTsKLQotCXJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKLQotCXByX2RlYnVnKCJjbG9jazogbmV3IGNsb2NrIHJhdGUgaXMgJWxkIChkaXYgJWQpXG4iLCByYXRlLCBkaXYpOwotCi0JcmV0dXJuIHJhdGU7CisJaWYgKGNsay0+cGFyZW50KQorCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CiB9CiAKIC8qKgotICogb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQgLSByZXR1cm4gY2xrc2VsIHN0cnVjdCBmb3IgYSBnaXZlbiBjbGsgJiBwYXJlbnQKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayBwdHIgdG8gaW5zcGVjdAotICogQHNyY19jbGs6IE9NQVAgc3RydWN0IGNsayBwdHIgb2YgdGhlIHBhcmVudCBjbGsgdG8gc2VhcmNoIGZvcgorICogb21hcDJfY2xrX2VuYWJsZSAtIHJlcXVlc3QgdGhhdCB0aGUgc3lzdGVtIGVuYWJsZSBhIGNsb2NrCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogdG8gZW5hYmxlCiAgKgotICogU2NhbiB0aGUgc3RydWN0IGNsa3NlbCBhcnJheSBhc3NvY2lhdGVkIHdpdGggdGhlIGNsb2NrIHRvIGZpbmQKLSAqIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQgcGFyZW50IGNsb2NrIGFkZHJlc3MuCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IGNsa3NlbCBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZXJyb3IuCisgKiBJbmNyZW1lbnRzIHRoZSB1c2Vjb3VudCBvbiBzdHJ1Y3QgY2xrIEBjbGsuICBJZiB0aGVyZSB3ZXJlIG5vIHVzZXJzCisgKiBwcmV2aW91c2x5LCB0aGVuIHJlY3Vyc2UgdXAgdGhlIGNsb2NrIHRyZWUsIGVuYWJsaW5nIGFsbCBvZiB0aGUKKyAqIGNsb2NrJ3MgcGFyZW50cyBhbmQgYWxsIG9mIHRoZSBwYXJlbnQgY2xvY2tkb21haW5zLCBhbmQgZmluYWxseSwKKyAqIGVuYWJsaW5nIEBjbGsncyBjbG9ja2RvbWFpbiwgYW5kIEBjbGsgaXRzZWxmLiAgSW50ZW5kZWQgdG8gYmUKKyAqIGNhbGxlZCB3aXRoIHRoZSBjbG9ja2Z3X2xvY2sgc3BpbmxvY2sgaGVsZC4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3MKKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsICpvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCQkgICAgICAgc3RydWN0IGNsayAqc3JjX2NsaykKK2ludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOworCWludCByZXQ7CiAKLQlpZiAoIWNsay0+Y2xrc2VsKQotCQlyZXR1cm4gTlVMTDsKKwlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBpbmNyZW1lbnRpbmcgdXNlY291bnRcbiIsIGNsay0+bmFtZSk7CiAKLQlmb3IgKGNsa3MgPSBjbGstPmNsa3NlbDsgY2xrcy0+cGFyZW50OyBjbGtzKyspIHsKLQkJaWYgKGNsa3MtPnBhcmVudCA9PSBzcmNfY2xrKQotCQkJYnJlYWs7IC8qIEZvdW5kIHRoZSByZXF1ZXN0ZWQgcGFyZW50ICovCi0JfQorCWNsay0+dXNlY291bnQrKzsKIAotCWlmICghY2xrcy0+cGFyZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIHBhcmVudCBjbG9jayAlcyBpbiAiCi0JCSAgICAgICAiY2xrc2VsIGFycmF5IG9mIGNsb2NrICVzXG4iLCBzcmNfY2xrLT5uYW1lLAotCQkgICAgICAgY2xrLT5uYW1lKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGNsa3M7Ci19Ci0KLS8qKgotICogb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2IC0gZmluZCBkaXZpc29yIGZvciB0aGUgZ2l2ZW4gY2xvY2sgYW5kIHJhdGUKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKLSAqIEB0YXJnZXRfcmF0ZTogZGVzaXJlZCBjbG9jayByYXRlCi0gKiBAbmV3X2RpdjogcHRyIHRvIHdoZXJlIHdlIHNob3VsZCBzdG9yZSB0aGUgZGl2aXNvcgotICoKLSAqIEZpbmRzICdiZXN0JyBkaXZpZGVyIHZhbHVlIGluIGFuIGFycmF5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kIHRhcmdldAotICogcmF0ZXMuICBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCi0gKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBjbG9ja3Mgd2hpY2ggYXJlIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULAotICogdGhleSBhcmUgb25seSBzZXR0YWJsZSBhcyBwYXJ0IG9mIHZpcnR1YWxfcHJjbSBzZXQuCi0gKgotICogUmV0dXJucyB0aGUgcm91bmRlZCBjbG9jayByYXRlIG9yIHJldHVybnMgMHhmZmZmZmZmZiBvbiBlcnJvci4KLSAqLwotdTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCi0JCQkJdTMyICpuZXdfZGl2KQotewotCXVuc2lnbmVkIGxvbmcgdGVzdF9yYXRlOwotCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7Ci0JY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwotCXUzMiBsYXN0X2RpdiA9IDA7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGNsa3NlbF9yb3VuZF9yYXRlX2RpdjogJXMgdGFyZ2V0X3JhdGUgJWxkXG4iLAotCQkgY2xrLT5uYW1lLCB0YXJnZXRfcmF0ZSk7Ci0KLQkqbmV3X2RpdiA9IDE7Ci0KLQljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKCFjbGtzKQotCQlyZXR1cm4gfjA7Ci0KLQlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKLQkJaWYgKCEoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCSAgICBjb250aW51ZTsKLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKGNsa3ItPmRpdiA8PSBsYXN0X2RpdikKLQkJCXByX2VycigiY2xvY2s6IGNsa3NlbF9yYXRlIHRhYmxlIG5vdCBzb3J0ZWQgIgotCQkJICAgICAgICJmb3IgY2xvY2sgJXMiLCBjbGstPm5hbWUpOwotCi0JCWxhc3RfZGl2ID0gY2xrci0+ZGl2OwotCi0JCXRlc3RfcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2OwotCi0JCWlmICh0ZXN0X3JhdGUgPD0gdGFyZ2V0X3JhdGUpCi0JCQlicmVhazsgLyogZm91bmQgaXQgKi8KLQl9Ci0KLQlpZiAoIWNsa3ItPmRpdikgewotCQlwcl9lcnIoImNsb2NrOiBDb3VsZCBub3QgZmluZCBkaXZpc29yIGZvciB0YXJnZXQgIgotCQkgICAgICAgInJhdGUgJWxkIGZvciBjbG9jayAlcyBwYXJlbnQgJXNcbiIsIHRhcmdldF9yYXRlLAotCQkgICAgICAgY2xrLT5uYW1lLCBjbGstPnBhcmVudC0+bmFtZSk7Ci0JCXJldHVybiB+MDsKLQl9Ci0KLQkqbmV3X2RpdiA9IGNsa3ItPmRpdjsKLQotCXByX2RlYnVnKCJjbG9jazogbmV3X2RpdiA9ICVkLCBuZXdfcmF0ZSA9ICVsZFxuIiwgKm5ld19kaXYsCi0JCSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGtyLT5kaXYpKTsKLQotCXJldHVybiAoY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGtyLT5kaXYpOwotfQotCi0vKioKLSAqIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlIC0gZmluZCByb3VuZGVkIHJhdGUgZm9yIHRoZSBnaXZlbiBjbG9jayBhbmQgcmF0ZQotICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZQotICogQHRhcmdldF9yYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUKLSAqCi0gKiBDb21wYXRpYmlsaXR5IHdyYXBwZXIgZm9yIE9NQVAgY2xvY2sgZnJhbWV3b3JrCi0gKiBGaW5kcyBiZXN0IHRhcmdldCByYXRlIGJhc2VkIG9uIHRoZSBzb3VyY2UgY2xvY2sgYW5kIHBvc3NpYmxlIGRpdmlkZXJzLgotICogcmF0ZXMuIFRoZSBkaXZpZGVyIGFycmF5IG11c3QgYmUgc29ydGVkIHdpdGggc21hbGxlc3QgZGl2aWRlciBmaXJzdC4KLSAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGNsb2NrcyB3aGljaCBhcmUgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsCi0gKiB0aGV5IGFyZSBvbmx5IHNldHRhYmxlIGFzIHBhcnQgb2YgdmlydHVhbF9wcmNtIHNldC4KLSAqCi0gKiBSZXR1cm5zIHRoZSByb3VuZGVkIGNsb2NrIHJhdGUgb3IgcmV0dXJucyAweGZmZmZmZmZmIG9uIGVycm9yLgotICovCi1sb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKLXsKLQl1MzIgbmV3X2RpdjsKLQotCXJldHVybiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCB0YXJnZXRfcmF0ZSwgJm5ld19kaXYpOwotfQotCi0KLS8qIEdpdmVuIGEgY2xvY2sgYW5kIGEgcmF0ZSBhcHBseSBhIGNsb2NrIHNwZWNpZmljIHJvdW5kaW5nIGZ1bmN0aW9uICovCi1sb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCWlmIChjbGstPnJvdW5kX3JhdGUpCi0JCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQotCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogZ2VuZXJpYyBvbWFwMl9jbGtfcm91bmRfcmF0ZSBjYWxsZWQgIgotCQkgICAgICAgIm9uIGZpeGVkLXJhdGUgY2xvY2sgJXNcbiIsIGNsay0+bmFtZSk7Ci0KLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotCi0vKioKLSAqIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKCkgLSB0dXJuIGNsa3NlbCBmaWVsZCB2YWx1ZSBpbnRvIGludGVnZXIgZGl2aWRlcgotICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZQotICogQGZpZWxkX3ZhbDogcmVnaXN0ZXIgZmllbGQgdmFsdWUgdG8gZmluZAotICoKLSAqIEdpdmVuIGEgc3RydWN0IGNsayBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xvY2ssIGFuZCBhIHJlZ2lzdGVyIGZpZWxkCi0gKiB2YWx1ZSB0byBzZWFyY2ggZm9yLCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsb2NrIGRpdmlzb3IuICBUaGUgcmVnaXN0ZXIKLSAqIGZpZWxkIHZhbHVlIHNob3VsZCBiZSBwcmUtbWFza2VkIGFuZCBzaGlmdGVkIGRvd24gc28gdGhlIExTQiBpcyBhdCBiaXQgMAotICogYmVmb3JlIGNhbGxpbmcuICBSZXR1cm5zIDAgb24gZXJyb3IKLSAqLwotdTMyIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKHN0cnVjdCBjbGsgKmNsaywgdTMyIGZpZWxkX3ZhbCkKLXsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwotCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKLQotCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKLQlpZiAoIWNsa3MpCisJaWYgKGNsay0+dXNlY291bnQgPiAxKQogCQlyZXR1cm4gMDsKIAotCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewotCQlpZiAoKGNsa3ItPmZsYWdzICYgY3B1X21hc2spICYmIChjbGtyLT52YWwgPT0gZmllbGRfdmFsKSkKLQkJCWJyZWFrOworCXByX2RlYnVnKCJjbG9jazogJXM6IGVuYWJsaW5nIGluIGhhcmR3YXJlXG4iLCBjbGstPm5hbWUpOworCisJaWYgKGNsay0+cGFyZW50KSB7CisJCXJldCA9IG9tYXAyX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCQlpZiAocmV0KSB7CisJCQlXQVJOKDEsICJjbG9jazogJXM6IGNvdWxkIG5vdCBlbmFibGUgcGFyZW50ICVzOiAlZFxuIiwKKwkJCSAgICAgY2xrLT5uYW1lLCBjbGstPnBhcmVudC0+bmFtZSwgcmV0KTsKKwkJCWdvdG8gb2NlX2VycjE7CisJCX0KIAl9CiAKLQlpZiAoIWNsa3ItPmRpdikgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBmaWVsZHZhbCAlZCBmb3IgIgotCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgZmllbGRfdmFsLCBjbGstPm5hbWUsCi0JCSAgICAgICBjbGstPnBhcmVudC0+bmFtZSk7Ci0JCXJldHVybiAwOworCWlmIChjbGstPmNsa2RtKSB7CisJCXJldCA9IG9tYXAyX2Nsa2RtX2Nsa19lbmFibGUoY2xrLT5jbGtkbSwgY2xrKTsKKwkJaWYgKHJldCkgeworCQkJV0FSTigxLCAiY2xvY2s6ICVzOiBjb3VsZCBub3QgZW5hYmxlIGNsb2NrZG9tYWluICVzOiAiCisJCQkgICAgICIlZFxuIiwgY2xrLT5uYW1lLCBjbGstPmNsa2RtLT5uYW1lLCByZXQpOworCQkJZ290byBvY2VfZXJyMjsKKwkJfQogCX0KIAotCXJldHVybiBjbGtyLT5kaXY7Ci19Ci0KLS8qKgotICogb21hcDJfZGl2aXNvcl90b19jbGtzZWwoKSAtIHR1cm4gY2xrc2VsIGludGVnZXIgZGl2aXNvciBpbnRvIGEgZmllbGQgdmFsdWUKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKLSAqIEBkaXY6IGludGVnZXIgZGl2aXNvciB0byBzZWFyY2ggZm9yCi0gKgotICogR2l2ZW4gYSBzdHJ1Y3QgY2xrIG9mIGEgcmF0ZS1zZWxlY3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgY2xvY2sgZGl2aXNvciwKLSAqIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmllbGQgdmFsdWUuICBUaGUgcmV0dXJuIHJlZ2lzdGVyIHZhbHVlIGlzCi0gKiB0aGUgdmFsdWUgYmVmb3JlIGxlZnQtc2hpZnRpbmcuICBSZXR1cm5zIH4wIG9uIGVycm9yCi0gKi8KLXUzMiBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiBkaXYpCi17Ci0JY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7Ci0KLQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JV0FSTl9PTihkaXYgPT0gMCk7Ci0KLQljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKCFjbGtzKQotCQlyZXR1cm4gfjA7Ci0KLQlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKLQkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+ZGl2ID09IGRpdikpCi0JCQlicmVhazsKKwlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7CisJaWYgKHJldCkgeworCQlXQVJOKDEsICJjbG9jazogJXM6IGNvdWxkIG5vdCBlbmFibGU6ICVkXG4iLCBjbGstPm5hbWUsIHJldCk7CisJCWdvdG8gb2NlX2VycjM7CiAJfQogCi0JaWYgKCFjbGtyLT5kaXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZGl2aXNvciAlZCBmb3IgIgotCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgZGl2LCBjbGstPm5hbWUsCi0JCSAgICAgICBjbGstPnBhcmVudC0+bmFtZSk7Ci0JCXJldHVybiB+MDsKLQl9Ci0KLQlyZXR1cm4gY2xrci0+dmFsOwotfQotCi0vKioKLSAqIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvciAtIGdldCBjdXJyZW50IGRpdmlkZXIgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCi0gKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgotICoKLSAqIFJldHVybnMgdGhlIGludGVnZXIgZGl2aXNvciB1cG9uIHN1Y2Nlc3Mgb3IgMCBvbiBlcnJvci4KLSAqLwotdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHY7Ci0KLQlpZiAoIWNsay0+Y2xrc2VsX21hc2spCi0JCXJldHVybiAwOwotCi0JdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZykgJiBjbGstPmNsa3NlbF9tYXNrOwotCXYgPj49IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOwotCi0JcmV0dXJuIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKGNsaywgdik7Ci19Ci0KLWludCBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHYsIGZpZWxkX3ZhbCwgdmFsaWRyYXRlLCBuZXdfZGl2ID0gMDsKLQotCWlmICghY2xrLT5jbGtzZWxfbWFzaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7Ci0JaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZpZWxkX3ZhbCA9IG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKGNsaywgbmV3X2Rpdik7Ci0JaWYgKGZpZWxkX3ZhbCA9PSB+MCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKLQl2ICY9IH5jbGstPmNsa3NlbF9tYXNrOwotCXYgfD0gZmllbGRfdmFsIDw8IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBjbGstPmNsa3NlbF9yZWcpOwotCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOyAvKiBPQ1AgYmFycmllciAqLwotCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBuZXdfZGl2OwotCi0JX29tYXAyeHh4X2Nsa19jb21taXQoY2xrKTsKLQogCXJldHVybiAwOwotfQogCitvY2VfZXJyMzoKKwlpZiAoY2xrLT5jbGtkbSkKKwkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKK29jZV9lcnIyOgorCWlmIChjbGstPnBhcmVudCkKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworb2NlX2VycjE6CisJY2xrLT51c2Vjb3VudC0tOworCisJcmV0dXJuIHJldDsKK30KIAogLyogU2V0IHRoZSBjbG9jayByYXRlIGZvciBhIGNsb2NrIHNvdXJjZSAqLwogaW50IG9tYXAyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKQEAgLTc5NCwxMSArMzQxLDYgQEAKIAogCXByX2RlYnVnKCJjbG9jazogc2V0X3JhdGUgZm9yIGNsb2NrICVzIHRvIHJhdGUgJWxkXG4iLCBjbGstPm5hbWUsIHJhdGUpOwogCi0JLyogQ09ORklHX1BBUlRJQ0lQQU5UIGNsb2NrcyBhcmUgY2hhbmdlZCBvbmx5IGluIHNldHMgdmlhIHRoZQotCSAgIHJhdGUgdGFibGUgbWVjaGFuaXNtLCBkcml2ZW4gYnkgbXB1X3NwZWVkICAqLwotCWlmIChjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIGRwbGxfY2ssIGNvcmVfY2ssIHZpcnRfcHJjbV9zZXQ7IHBsdXMgYWxsIGNsa3NlbCBjbG9ja3MgKi8KIAlpZiAoY2xrLT5zZXRfcmF0ZSkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwpAQCAtODA2LDI3MCArMzQ4LDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENvbnZlcnRzIGVuY29kZWQgY29udHJvbCByZWdpc3RlciBhZGRyZXNzIGludG8gYSBmdWxsIGFkZHJlc3MKLSAqIE9uIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIChwYXJlbnRfZGl2KSB3aWxsIGJlIDAuCi0gKi8KLXN0YXRpYyB1MzIgX29tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKHN0cnVjdCBjbGsgKnNyY19jbGssIHN0cnVjdCBjbGsgKmNsaywKLQkJCQkgICAgICAgdTMyICpmaWVsZF92YWwpCi17Ci0JY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7Ci0KLQljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBzcmNfY2xrKTsKLQlpZiAoIWNsa3MpCi0JCXJldHVybiAwOwotCi0JZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7Ci0JCWlmIChjbGtyLT5mbGFncyAmIGNwdV9tYXNrICYmIGNsa3ItPmZsYWdzICYgREVGQVVMVF9SQVRFKQotCQkJYnJlYWs7IC8qIEZvdW5kIHRoZSBkZWZhdWx0IHJhdGUgZm9yIHRoaXMgcGxhdGZvcm0gKi8KLQl9Ci0KLQlpZiAoIWNsa3ItPmRpdikgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBkZWZhdWx0IHJhdGUgZm9yICIKLQkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGNsay0+bmFtZSwKLQkJICAgICAgIHNyY19jbGstPnBhcmVudC0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICBBZGQgYSBjbGtzZWwgbWFzayB0byB0aGUgc3RydWN0IGNsay4gKi8KLQlXQVJOX09OKGNsay0+Y2xrc2VsX21hc2sgPT0gMCk7Ci0KLQkqZmllbGRfdmFsID0gY2xrci0+dmFsOwotCi0JcmV0dXJuIGNsa3ItPmRpdjsKLX0KLQogaW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCkKIHsKLQl1MzIgZmllbGRfdmFsLCB2LCBwYXJlbnRfZGl2OwotCi0JaWYgKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKCFjbGstPmNsa3NlbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwYXJlbnRfZGl2ID0gX29tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKG5ld19wYXJlbnQsIGNsaywgJmZpZWxkX3ZhbCk7Ci0JaWYgKCFwYXJlbnRfZGl2KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2xrLT5wYXJlbnQgPT0gbmV3X3BhcmVudCkKKwkJcmV0dXJuIDA7CiAKLQkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KLQl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKLQl2ICY9IH5jbGstPmNsa3NlbF9tYXNrOwotCXYgfD0gZmllbGRfdmFsIDw8IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBjbGstPmNsa3NlbF9yZWcpOwotCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOyAgICAvKiBPQ1AgYmFycmllciAqLwotCi0JX29tYXAyeHh4X2Nsa19jb21taXQoY2xrKTsKLQotCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOwotCi0JLyogQ0xLU0VMIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cycgcmF0ZXMsIGRpdmlkZWQgYnkgYSBkaXZpc29yICovCi0JY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKLQotCWlmIChwYXJlbnRfZGl2ID4gMCkKLQkJY2xrLT5yYXRlIC89IHBhcmVudF9kaXY7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IHNldCBwYXJlbnQgb2YgJXMgdG8gJXMgKG5ldyByYXRlICVsZClcbiIsCi0JCSBjbGstPm5hbWUsIGNsay0+cGFyZW50LT5uYW1lLCBjbGstPnJhdGUpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9tYXAyX2Nsa3NlbF9zZXRfcGFyZW50KGNsaywgbmV3X3BhcmVudCk7CiB9CiAKLS8qIERQTEwgcmF0ZSByb3VuZGluZyBjb2RlICovCisvKiBPTUFQMy80IG5vbi1DT1JFIERQTEwgY2xrb3BzICovCiAKLS8qKgotICogb21hcDJfZHBsbF9zZXRfcmF0ZV90b2xlcmFuY2U6IHNldCB0aGUgZXJyb3IgdG9sZXJhbmNlIGR1cmluZyByYXRlIHJvdW5kaW5nCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwKLSAqIEB0b2xlcmFuY2U6IG1heGltdW0gcmF0ZSBlcnJvciB0b2xlcmFuY2UKLSAqCi0gKiBTZXQgdGhlIG1heGltdW0gRFBMTCByYXRlIGVycm9yIHRvbGVyYW5jZSBmb3IgdGhlIHJhdGUgcm91bmRpbmcKLSAqIGFsZ29yaXRobS4gIFRoZSByYXRlIHRvbGVyYW5jZSBpcyBhbiBhdHRlbXB0IHRvIGJhbGFuY2UgRFBMTCBwb3dlcgotICogc2F2aW5nICh0aGUgbGVhc3QgZGl2aWRlciB2YWx1ZSAibiIpIHZzLiByYXRlIGZpZGVsaXR5ICh0aGUgbGVhc3QKLSAqIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGVzaXJlZCBEUExMIHRhcmdldCByYXRlIGFuZCB0aGUgcm91bmRlZAotICogcmF0ZSBvdXQgb2YgdGhlIGFsZ29yaXRobSkuICBTbywgaW5jcmVhc2luZyB0aGUgdG9sZXJhbmNlIGlzIGxpa2VseQotICogdG8gZGVjcmVhc2UgRFBMTCBwb3dlciBjb25zdW1wdGlvbiBhbmQgaW5jcmVhc2UgRFBMTCByYXRlIGVycm9yLgotICogUmV0dXJucyAtRUlOVkFMIGlmIHByb3ZpZGVkIGEgbnVsbCBjbG9jayBwdHIgb3IgYSBjbGsgdGhhdCBpcyBub3QgYQotICogRFBMTDsgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCB0b2xlcmFuY2UpCi17Ci0JaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCi0JY2xrLT5kcGxsX2RhdGEtPnJhdGVfdG9sZXJhbmNlID0gdG9sZXJhbmNlOworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcyA9IHsKKwkuZW5hYmxlCQk9IG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKK307CiAKLQlyZXR1cm4gMDsKLX0KKyNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfZHBsbF9jb21wdXRlX25ld19yYXRlKHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsCi0JCQkJCSAgICB1bnNpZ25lZCBpbnQgbSwgdW5zaWduZWQgaW50IG4pCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIG51bTsKLQotCW51bSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcGFyZW50X3JhdGUgKiBtOwotCWRvX2RpdihudW0sIG4pOwotCXJldHVybiBudW07Ci19CiAKIC8qCi0gKiBfZHBsbF90ZXN0X211bHQgLSB0ZXN0IGEgRFBMTCBtdWx0aXBsaWVyIHZhbHVlCi0gKiBAbTogcG9pbnRlciB0byB0aGUgRFBMTCBtIChtdWx0aXBsaWVyKSB2YWx1ZSB1bmRlciB0ZXN0Ci0gKiBAbjogY3VycmVudCBEUExMIG4gKGRpdmlkZXIpIHZhbHVlIHVuZGVyIHRlc3QKLSAqIEBuZXdfcmF0ZTogcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmVzdWx0aW5nIHJvdW5kZWQgcmF0ZQotICogQHRhcmdldF9yYXRlOiB0aGUgZGVzaXJlZCBEUExMIHJhdGUKLSAqIEBwYXJlbnRfcmF0ZTogdGhlIERQTEwncyBwYXJlbnQgY2xvY2sgcmF0ZQotICoKLSAqIFRoaXMgY29kZSB0ZXN0cyBhIERQTEwgbXVsdGlwbGllciB2YWx1ZSwgZW5zdXJpbmcgdGhhdCB0aGUKLSAqIHJlc3VsdGluZyByYXRlIHdpbGwgbm90IGJlIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXRfcmF0ZSwgYW5kIHRoYXQKLSAqIHRoZSBtdWx0aXBsaWVyIHZhbHVlIGl0c2VsZiBpcyB2YWxpZCBmb3IgdGhlIERQTEwuICBJbml0aWFsbHksIHRoZQotICogaW50ZWdlciBwb2ludGVkIHRvIGJ5IHRoZSBtIGFyZ3VtZW50IHNob3VsZCBiZSBwcmVzY2FsZWQgYnkKLSAqIG11bHRpcGx5aW5nIGJ5IERQTExfU0NBTEVfRkFDVE9SLiAgVGhlIGNvZGUgd2lsbCByZXBsYWNlIHRoaXMgd2l0aAotICogYSBub24tc2NhbGVkIG0gdXBvbiByZXR1cm4uICBUaGlzIG5vbi1zY2FsZWQgbSB3aWxsIHJlc3VsdCBpbiBhCi0gKiBuZXdfcmF0ZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0YXJnZXRfcmF0ZSAoYnV0IG5vdCBncmVhdGVyIHRoYW4KLSAqIHRhcmdldF9yYXRlKSBnaXZlbiB0aGUgY3VycmVudCAocGFyZW50X3JhdGUsIG4sIHByZXNjYWxlZCBtKQotICogdHJpcGxlLiBSZXR1cm5zIERQTExfTVVMVF9VTkRFUkZMT1cgaW4gdGhlIGV2ZW50IHRoYXQgdGhlCi0gKiBub24tc2NhbGVkIG0gYXR0ZW1wdGVkIHRvIHVuZGVyZmxvdywgd2hpY2ggY2FuIGFsbG93IHRoZSBjYWxsaW5nCi0gKiBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseTsgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKiBPTUFQMisgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQgX2RwbGxfdGVzdF9tdWx0KGludCAqbSwgaW50IG4sIHVuc2lnbmVkIGxvbmcgKm5ld19yYXRlLAotCQkJICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCi17Ci0JaW50IHIgPSAwLCBjYXJyeSA9IDA7Ci0KLQkvKiBVbnNjYWxlIG0gYW5kIHJvdW5kIGlmIG5lY2Vzc2FyeSAqLwotCWlmICgqbSAlIERQTExfU0NBTEVfRkFDVE9SID49IERQTExfUk9VTkRJTkdfVkFMKQotCQljYXJyeSA9IDE7Ci0JKm0gPSAoKm0gLyBEUExMX1NDQUxFX0ZBQ1RPUikgKyBjYXJyeTsKLQotCS8qCi0JICogVGhlIG5ldyByYXRlIG11c3QgYmUgPD0gdGhlIHRhcmdldCByYXRlIHRvIGF2b2lkIHByb2dyYW1taW5nCi0JICogYSByYXRlIHRoYXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGhhcmR3YXJlIHRvIGhhbmRsZQotCSAqLwotCSpuZXdfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUocGFyZW50X3JhdGUsICptLCBuKTsKLQlpZiAoKm5ld19yYXRlID4gdGFyZ2V0X3JhdGUpIHsKLQkJKCptKS0tOwotCQkqbmV3X3JhdGUgPSAwOwotCX0KLQotCS8qIEd1YXJkIGFnYWluc3QgbSB1bmRlcmZsb3cgKi8KLQlpZiAoKm0gPCBEUExMX01JTl9NVUxUSVBMSUVSKSB7Ci0JCSptID0gRFBMTF9NSU5fTVVMVElQTElFUjsKLQkJKm5ld19yYXRlID0gMDsKLQkJciA9IERQTExfTVVMVF9VTkRFUkZMT1c7Ci0JfQotCi0JaWYgKCpuZXdfcmF0ZSA9PSAwKQotCQkqbmV3X3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKHBhcmVudF9yYXRlLCAqbSwgbik7Ci0KLQlyZXR1cm4gcjsKLX0KLQotLyoqCi0gKiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUgLSByb3VuZCBhIHRhcmdldCByYXRlIGZvciBhbiBPTUFQIERQTEwKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBmb3IgYSBEUExMCi0gKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgRFBMTCBjbG9jayByYXRlCi0gKgotICogR2l2ZW4gYSBEUExMLCBhIGRlc2lyZWQgdGFyZ2V0IHJhdGUsIGFuZCBhIHJhdGUgdG9sZXJhbmNlLCByb3VuZAotICogdGhlIHRhcmdldCByYXRlIHRvIGEgcG9zc2libGUsIHByb2dyYW1tYWJsZSByYXRlIGZvciB0aGlzIERQTEwuCi0gKiBSYXRlIHRvbGVyYW5jZSBpcyBhc3N1bWVkIHRvIGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSB0aGlzCi0gKiBmdW5jdGlvbiBpcyBjYWxsZWQuICBBdHRlbXB0cyB0byBzZWxlY3QgdGhlIG1pbmltdW0gcG9zc2libGUgbgotICogd2l0aGluIHRoZSB0b2xlcmFuY2UgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiAgU3RvcmVzIHRoZQotICogY29tcHV0ZWQgKG0sIG4pIGluIHRoZSBEUExMJ3MgZHBsbF9kYXRhIHN0cnVjdHVyZSBzbyBzZXRfcmF0ZSgpCi0gKiB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyAoZXhwZW5zaXZlKSBmdW5jdGlvbiBhZ2Fpbi4gIFJldHVybnMgfjAKLSAqIGlmIHRoZSB0YXJnZXQgcmF0ZSBjYW5ub3QgYmUgcm91bmRlZCwgZWl0aGVyIGJlY2F1c2UgdGhlIHJhdGUgaXMKLSAqIHRvbyBsb3cgb3IgYmVjYXVzZSB0aGUgcmF0ZSB0b2xlcmFuY2UgaXMgc2V0IHRvbyB0aWdodGx5OyBvciB0aGUKLSAqIHJvdW5kZWQgcmF0ZSB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWxvbmcgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKLXsKLQlpbnQgbSwgbiwgciwgZSwgc2NhbGVkX21heF9tOwotCXVuc2lnbmVkIGxvbmcgc2NhbGVkX3J0X3JwLCBuZXdfcmF0ZTsKLQlpbnQgbWluX2UgPSAtMSwgbWluX2VfbSA9IC0xLCBtaW5fZV9uID0gLTE7Ci0Jc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0KLQlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCi0JCXJldHVybiB+MDsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSBmb3IgY2xvY2sgJXMsIHRhcmdldCByYXRlICIKLQkJICIlbGRcbiIsIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOwotCi0Jc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoZGQtPmNsa19yZWYtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7Ci0Jc2NhbGVkX21heF9tID0gZGQtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7Ci0KLQlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSAwOwotCi0JZm9yIChuID0gZGQtPm1pbl9kaXZpZGVyOyBuIDw9IGRkLT5tYXhfZGl2aWRlcjsgbisrKSB7Ci0KLQkJLyogSXMgdGhlIChpbnB1dCBjbGssIGRpdmlkZXIpIHBhaXIgdmFsaWQgZm9yIHRoZSBEUExMPyAqLwotCQlyID0gX2RwbGxfdGVzdF9maW50KGNsaywgbik7Ci0JCWlmIChyID09IERQTExfRklOVF9VTkRFUkZMT1cpCi0JCQlicmVhazsKLQkJZWxzZSBpZiAociA9PSBEUExMX0ZJTlRfSU5WQUxJRCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIENvbXB1dGUgdGhlIHNjYWxlZCBEUExMIG11bHRpcGxpZXIsIGJhc2VkIG9uIHRoZSBkaXZpZGVyICovCi0JCW0gPSBzY2FsZWRfcnRfcnAgKiBuOwotCi0JCS8qCi0JCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gdXAsIGEgbSBvdmVyZmxvdyBtZWFucyB3ZQotCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBpbmNyZWFzZXMgaW4KLQkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCi0JCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQotCQkgKi8KLQkJaWYgKG0gPiBzY2FsZWRfbWF4X20pCi0JCQlicmVhazsKLQotCQlyID0gX2RwbGxfdGVzdF9tdWx0KCZtLCBuLCAmbmV3X3JhdGUsIHRhcmdldF9yYXRlLAotCQkJCSAgICBkZC0+Y2xrX3JlZi0+cmF0ZSk7Ci0KLQkJLyogbSBjYW4ndCBiZSBzZXQgbG93IGVub3VnaCBmb3IgdGhpcyBuIC0gdHJ5IHdpdGggYSBsYXJnZXIgbiAqLwotCQlpZiAociA9PSBEUExMX01VTFRfVU5ERVJGTE9XKQotCQkJY29udGludWU7Ci0KLQkJZSA9IHRhcmdldF9yYXRlIC0gbmV3X3JhdGU7Ci0JCXByX2RlYnVnKCJjbG9jazogbiA9ICVkOiBtID0gJWQ6IHJhdGUgZXJyb3IgaXMgJWQgIgotCQkJICIobmV3X3JhdGUgPSAlbGQpXG4iLCBuLCBtLCBlLCBuZXdfcmF0ZSk7Ci0KLQkJaWYgKG1pbl9lID09IC0xIHx8Ci0JCSAgICBtaW5fZSA+PSAoaW50KShhYnMoZSkgLSBkZC0+cmF0ZV90b2xlcmFuY2UpKSB7Ci0JCQltaW5fZSA9IGU7Ci0JCQltaW5fZV9tID0gbTsKLQkJCW1pbl9lX24gPSBuOwotCi0JCQlwcl9kZWJ1ZygiY2xvY2s6IGZvdW5kIG5ldyBsZWFzdCBlcnJvciAlZFxuIiwgbWluX2UpOwotCi0JCQkvKiBXZSBmb3VuZCBnb29kIHNldHRpbmdzIC0tIGJhaWwgb3V0IG5vdyAqLwotCQkJaWYgKG1pbl9lIDw9IGRkLT5yYXRlX3RvbGVyYW5jZSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChtaW5fZSA8IDApIHsKLQkJcHJfZGVidWcoImNsb2NrOiBlcnJvcjogdGFyZ2V0IHJhdGUgb3IgdG9sZXJhbmNlIHRvbyBsb3dcbiIpOwotCQlyZXR1cm4gfjA7Ci0JfQotCi0JZGQtPmxhc3Rfcm91bmRlZF9tID0gbWluX2VfbTsKLQlkZC0+bGFzdF9yb3VuZGVkX24gPSBtaW5fZV9uOwotCWRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUoZGQtPmNsa19yZWYtPnJhdGUsCi0JCQkJCQkgICAgICAgbWluX2VfbSwgIG1pbl9lX24pOwotCi0JcHJfZGVidWcoImNsb2NrOiBmaW5hbCBsZWFzdCBlcnJvcjogZSA9ICVkLCBtID0gJWQsIG4gPSAlZFxuIiwKLQkJIG1pbl9lLCBtaW5fZV9tLCBtaW5fZV9uKTsKLQlwcl9kZWJ1ZygiY2xvY2s6IGZpbmFsIHJhdGU6ICVsZCAgKHRhcmdldCByYXRlOiAlbGQpXG4iLAotCQkgZGQtPmxhc3Rfcm91bmRlZF9yYXRlLCB0YXJnZXRfcmF0ZSk7Ci0KLQlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9tYXAyIGNsb2NrIHJlc2V0IGFuZCBpbml0IGZ1bmN0aW9ucwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwogdm9pZCBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQoc3RydWN0IGNsayAqY2xrKQpAQCAtMTA4Niw5ICszOTAsMTEwIEBACiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXAyX2Nsa19lbmFibGUoY2xrKTsKIAkJb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKLQl9IGVsc2UKLQkJX29tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJfSBlbHNlIHsKKwkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKKwl9CiAJaWYgKGNsay0+Y2xrZG0gIT0gTlVMTCkKIAkJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsay0+Y2xrZG0pOwogfQogI2VuZGlmCisKKy8qKgorICogb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QgLSBzd2l0Y2ggQVJNIE1QVSByYXRlIGJ5IGJvb3QtdGltZSBhcmd1bWVudAorICogQG1wdXJhdGVfY2tfbmFtZTogY2xrIG5hbWUgb2YgdGhlIGNsb2NrIHRvIGNoYW5nZSByYXRlCisgKgorICogQ2hhbmdlIHRoZSBBUk0gTVBVIGNsb2NrIHJhdGUgdG8gdGhlIHJhdGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCisgKiBsaW5lLCBpZiBvbmUgd2FzIHNwZWNpZmllZC4gIEBtcHVyYXRlX2NrX25hbWUgc2hvdWxkIGJlCisgKiAidmlydF9wcmNtX3NldCIgb24gT01BUDJ4eHggYW5kICJkcGxsMV9jayIgb24gT01BUDM0eHgvT01BUDM2eHguCisgKiBYWFggRG9lcyBub3QgaGFuZGxlIHZvbHRhZ2Ugc2NhbGluZyAtIG9uIE9NQVAyeHh4IHRoaXMgaXMgY3VycmVudGx5CisgKiBoYW5kbGVkIGJ5IHRoZSB2aXJ0X3ByY21fc2V0IGNsb2NrLCBidXQgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieQorICogdGhlIE9QUCBsYXllci4gIFhYWCBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGhhbmRsZWQgYnkgdGhlIE9QUCBsYXllcgorICogY29kZSBpbiB0aGUgbmVhciBmdXR1cmUgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGNsb2NrIGNvZGUuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgJ21wdXJhdGUnIGlzIHplcm8gb3IgaWYgY2xrX3NldF9yYXRlKCkgcmVqZWN0cworICogdGhlIHJhdGUsIC1FTk9FTlQgaWYgdGhlIHN0cnVjdCBjbGsgcmVmZXJyZWQgdG8gYnkgQG1wdXJhdGVfY2tfbmFtZQorICogY2Fubm90IGJlIGZvdW5kLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IF9faW5pdCBvbWFwMl9jbGtfc3dpdGNoX21wdXJhdGVfYXRfYm9vdChjb25zdCBjaGFyICptcHVyYXRlX2NrX25hbWUpCit7CisJc3RydWN0IGNsayAqbXB1cmF0ZV9jazsKKwlpbnQgcjsKKworCWlmICghbXB1cmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltcHVyYXRlX2NrID0gY2xrX2dldChOVUxMLCBtcHVyYXRlX2NrX25hbWUpOworCWlmIChXQVJOKElTX0VSUihtcHVyYXRlX2NrKSwgIkZhaWxlZCB0byBnZXQgJXMuXG4iLCBtcHVyYXRlX2NrX25hbWUpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXIgPSBjbGtfc2V0X3JhdGUobXB1cmF0ZV9jaywgbXB1cmF0ZSk7CisJaWYgKElTX0VSUl9WQUxVRShyKSkgeworCQlXQVJOKDEsICJjbG9jazogJXM6IHVuYWJsZSB0byBzZXQgTVBVIHJhdGUgdG8gJWQ6ICVkXG4iLAorCQkgICAgIG1wdXJhdGVfY2stPm5hbWUsIG1wdXJhdGUsIHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYWxpYnJhdGVfZGVsYXkoKTsKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJY2xrX3B1dChtcHVyYXRlX2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMgLSBwcmludCBzdW1tYXJ5IG9mIGN1cnJlbnQgY2xvY2sgdHJlZSByYXRlcworICogQGhmY2xraW5fY2tfbmFtZTogY2xrIG5hbWUgZm9yIHRoZSBvZmYtY2hpcCBIRiBvc2NpbGxhdG9yCisgKiBAY29yZV9ja19uYW1lOiBjbGsgbmFtZSBmb3IgdGhlIG9uLWNoaXAgQ09SRV9DTEsKKyAqIEBtcHVfY2tfbmFtZTogY2xrIG5hbWUgZm9yIHRoZSBBUk0gTVBVIGNsb2NrCisgKgorICogUHJpbnRzIGEgc2hvcnQgbWVzc2FnZSB0byB0aGUgY29uc29sZSB3aXRoIHRoZSBIRkNMS0lOIG9zY2lsbGF0b3IKKyAqIHJhdGUsIHRoZSByYXRlIG9mIHRoZSBDT1JFIGNsb2NrLCBhbmQgdGhlIHJhdGUgb2YgdGhlIEFSTSBNUFUgY2xvY2suCisgKiBDYWxsZWQgYnkgdGhlIGJvb3QtdGltZSBNUFUgcmF0ZSBzd2l0Y2hpbmcgY29kZS4gICBYWFggVGhpcyBpcyBpbnRlbmRlZAorICogdG8gYmUgaGFuZGxlZCBieSB0aGUgT1BQIGxheWVyIGNvZGUgaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzaG91bGQgYmUKKyAqIHJlbW92ZWQgZnJvbSB0aGUgY2xvY2sgY29kZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBfX2luaXQgb21hcDJfY2xrX3ByaW50X25ld19yYXRlcyhjb25zdCBjaGFyICpoZmNsa2luX2NrX25hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqY29yZV9ja19uYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm1wdV9ja19uYW1lKQoreworCXN0cnVjdCBjbGsgKmhmY2xraW5fY2ssICpjb3JlX2NrLCAqbXB1X2NrOworCXVuc2lnbmVkIGxvbmcgaGZjbGtpbl9yYXRlOworCisJbXB1X2NrID0gY2xrX2dldChOVUxMLCBtcHVfY2tfbmFtZSk7CisJaWYgKFdBUk4oSVNfRVJSKG1wdV9jayksICJjbG9jazogZmFpbGVkIHRvIGdldCAlcy5cbiIsIG1wdV9ja19uYW1lKSkKKwkJcmV0dXJuOworCisJY29yZV9jayA9IGNsa19nZXQoTlVMTCwgY29yZV9ja19uYW1lKTsKKwlpZiAoV0FSTihJU19FUlIoY29yZV9jayksICJjbG9jazogZmFpbGVkIHRvIGdldCAlcy5cbiIsIGNvcmVfY2tfbmFtZSkpCisJCXJldHVybjsKKworCWhmY2xraW5fY2sgPSBjbGtfZ2V0KE5VTEwsIGhmY2xraW5fY2tfbmFtZSk7CisJaWYgKFdBUk4oSVNfRVJSKGhmY2xraW5fY2spLCAiRmFpbGVkIHRvIGdldCAlcy5cbiIsIGhmY2xraW5fY2tfbmFtZSkpCisJCXJldHVybjsKKworCWhmY2xraW5fcmF0ZSA9IGNsa19nZXRfcmF0ZShoZmNsa2luX2NrKTsKKworCXByX2luZm8oIlN3aXRjaGVkIHRvIG5ldyBjbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCQkoaGZjbGtpbl9yYXRlIC8gMTAwMDAwMCksCisJCSgoaGZjbGtpbl9yYXRlIC8gMTAwMDAwKSAlIDEwKSwKKwkJKGNsa19nZXRfcmF0ZShjb3JlX2NrKSAvIDEwMDAwMDApLAorCQkoY2xrX2dldF9yYXRlKG1wdV9jaykgLyAxMDAwMDAwKSk7Cit9CisKKy8qIENvbW1vbiBkYXRhICovCisKK3N0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CisJLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKKwkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCisJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAorCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAorCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKKwkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQorCS8qIFRoZXNlIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHRoZSBPUFAgY29kZSBpcyBpbnRlZ3JhdGVkICovCisJLmNsa19pbml0X2NwdWZyZXFfdGFibGUJPSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlLAorCS5jbGtfZXhpdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZSwKKyNlbmRpZgorfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCmluZGV4IDkzYzQ4ZGYzLi5hZDhhMWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC00Nyw3ICs0NywxMCBAQAogI2RlZmluZSBEUExMX0xPV19QT1dFUl9CWVBBU1MJMHg1CiAjZGVmaW5lIERQTExfTE9DS0VECQkweDcKIAotaW50IG9tYXAyX2Nsa19pbml0KHZvaWQpOworLyogRFBMTCBUeXBlIGFuZCBEQ08gU2VsZWN0aW9uIEZsYWdzICovCisjZGVmaW5lIERQTExfSl9UWVBFCQkweDEKKyNkZWZpbmUgRFBMTF9OT19EQ09fU0VMCQkweDIKKwogaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwpAQCAtNzgsMjMgKzgxLDUzIEBACiAJCQkJdTMyICpuZXdfZGl2KTsKIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpOwogdTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdik7Ci11bnNpZ25lZCBsb25nIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2ludCBvbWFwMl9jbGtzZWxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpOwogdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3dhaXRfY2xvY2tfcmVhZHkodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBjdmFsLCBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKKworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwordm9pZCBvbWFwM19jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwM19jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Cit2b2lkIG9tYXA0X2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3sKK30KKyNlbmRpZgorCiBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24oc3RydWN0IGNsayAqY2xrLCB2b2lkIF9faW9tZW0gKipvdGhlcl9yZWcsCiAJCQkJICAgdTggKm90aGVyX2JpdCk7CiB2b2lkIG9tYXAyX2Nsa19kZmx0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQl1OCAqaWRsZXN0X2JpdCk7CisJCQkJdTggKmlkbGVzdF9iaXQsIHU4ICppZGxlc3RfdmFsKTsKK2ludCBvbWFwMl9jbGtfc3dpdGNoX21wdXJhdGVfYXRfYm9vdChjb25zdCBjaGFyICptcHVyYXRlX2NrX25hbWUpOwordm9pZCBvbWFwMl9jbGtfcHJpbnRfbmV3X3JhdGVzKGNvbnN0IGNoYXIgKmhmY2xraW5fY2tfbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpjb3JlX2NrX25hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqbXB1X2NrX25hbWUpOwogCiBleHRlcm4gdTggY3B1X21hc2s7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMl9kZmx0X3dhaXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdDsKIAogZXh0ZXJuIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnM7CkBAIC0xMDQsNSArMTM3LDE0IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9zeXNfcmF0ZXNbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ2Z4X2wzX3JhdGVzW107CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKK2V4dGVybiB2b2lkIG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOworZXh0ZXJuIHZvaWQgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSk7CisjZWxzZQorI2RlZmluZSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlCTAKKyNkZWZpbmUgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZQkwCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHM7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmFmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQyMF9kYXRhLmMKQEAgLTAsMCArMSwxOTEwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDIwX2RhdGEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIENvbnRhY3RzOgorICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJvcHAyeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAic2RyYy5oIgorCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUiAgICAgICAgICAgICAgICAgT01BUDI0MjBfQ01fUkVHQUREUgorCisvKgorICogMjQyMCBjbG9jayB0cmVlLgorICoKKyAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55CisgKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KKyAqCXN3aXRjaCBzb3VyY2VzLgorICoKKyAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKKyAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KKyAqCisgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKKyAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCisgKgorICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKKyAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCisgKgljbG9ja3MuCisgKi8KKworLyogQmFzZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMzJrX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzMya19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMzIwMDAsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2NrID0geworCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjc2OCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKKy8qIFR5cGljYWwgMTIvMTNNSHogaW4gc3RhbmRhbG9uZSBtb2RlLCB3aWxsIGJlIDI2TWh6IGluIGNoYXNzaXMgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAqMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gIm9zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29zY2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAorfTsKKworLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLworCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJ4eHhfc3lzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KKwkubmFtZQkJPSAiYWx0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKKy8qCisgKiBBbmFsb2cgZG9tYWluIHJvb3Qgc291cmNlIGNsb2NrcworICovCisKKy8qIGRwbGxfY2ssIGlzIGJyb2tlbiBvdXQgaW4gdG8gc3BlY2lhbCBjYXNlcyB0aHJvdWdoIGNsa3NlbCAqLworLyogUkVWSVNJVDogUmF0ZSBjaGFuZ2VzIG9uIGRwbGxfY2sgdHJpZ2dlciBhIGZ1bGwgc2V0IGNoYW5nZS4JLi4uCisgKiBkZWFsIHdpdGggdGhpcworICovCisKK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5tdWx0X21hc2sJCT0gT01BUDI0WFhfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawkJPSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCQk9ICZzeXNfY2ssCisJLmNsa19yZWYJCT0gJnN5c19jaywKKwkuY29udHJvbF9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJCT0gT01BUDI0WFhfRU5fRFBMTF9NQVNLLAorCS5tYXhfbXVsdGlwbGllcgkJPSAxMDIzLAorCS5taW5fZGl2aWRlcgkJPSAxLAorCS5tYXhfZGl2aWRlcgkJPSAxNiwKKwkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCisvKgorICogWFhYIENhbm5vdCBhZGQgcm91bmRfcmF0ZSBoZXJlIHlldCwgYXMgdGhpcyBpcyBzdGlsbCBhIGNvbXBvc2l0ZSBjbG9jaywKKyAqIG5vdCBqdXN0IGEgRFBMTAorICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLworCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDk2X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYXBsbDk2LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fOTZNX1BMTF9TSElGVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw1NF9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDU0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYXBsbDU0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVCwKK307CisKKy8qCisgKiBQUkNNIGRpZ2l0YWwgYmFzZSBzb3VyY2VzCisgKi8KKworLyogZnVuY181NG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzU0bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY181NG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw1NF9jaywgLnJhdGVzID0gZnVuY181NG1fYXBsbDU0X3JhdGVzLCB9LAorCXsgLnBhcmVudCA9ICZhbHRfY2ssCS5yYXRlcyA9IGZ1bmNfNTRtX2FsdF9yYXRlcywgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLworCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfNTRNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfNTRtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLworCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogZnVuY180OG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5maXhlZF9kaXYJPSA0LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIGNvbW1vbl9jbGtvdXQqIGNsa3NlbF9yYXRlIHN0cnVjdHMgYXJlIGNvbW1vbiB0bworICogc3lzX2Nsa291dCwgc3lzX2Nsa291dF9zcmMsIHN5c19jbGtvdXQyLCBhbmQgc3lzX2Nsa291dDJfc3JjLgorICogc3lzX2Nsa291dDJfKiBhcmUgMjQyMC1vbmx5LCBzbyB0aGUKKyAqIGNsa3NlbF9yYXRlIGZsYWdzIGZpZWxkcyBhcmUgaW5hY2N1cmF0ZSBmb3IgdGhvc2UgY2xvY2tzLiBUaGlzIGlzCisgKiBoYXJtbGVzcyBzaW5jZSBhY2Nlc3MgdG8gdGhvc2UgY2xvY2tzIGFyZSBnYXRlZCBieSB0aGUgc3RydWN0IGNsaworICogZmxhZ3MgZmllbGRzLCB3aGljaCBtYXJrIHRoZW0gYXMgMjQyMC1vbmx5LgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY181NG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb21tb25fY2xrb3V0X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzU0bV9jaywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0Ml9zcmMgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfQ0xLT1VUMl9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX1NPVVJDRV9NQVNLLAorCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtvdXQyX3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuY2xrc2VsX3JlZwk9IE9NQVAyNDIwX1BSQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CisJLm5hbWUJCT0gImVtdWxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTVVMQVRJT05fRU5fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKworfTsKKworLyoKKyAqIE1QVSBjbG9jayBkb21haW4KKyAqCUNsb2NrczoKKyAqCQlNUFVfRkNMSywgTVBVX0lDTEsKKyAqCQlJTlRfTV9GQ0xLLCBJTlRfTV9JX0NMSworICoKKyAqIC0gSW5kaXZpZHVhbCBjbG9ja3MgYXJlIGhhcmR3YXJlIG1hbmFnZWQuCisgKiAtIEJhc2UgZGl2aWRlciBjb21lcyBmcm9tOiBDTV9DTEtTRUxfTVBVCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1wdV9jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1wdV9jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CS8qIENvbnRyb2wgY3B1ICovCisJLm5hbWUJCT0gIm1wdV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTVBVX01BU0ssCisJLmNsa3NlbAkJPSBtcHVfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogRFNQICgyNDIwLVVNQStJVkExKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAorICoKKyAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKKyAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCisgKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKKyAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7CisJLm5hbWUJCT0gImRzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEU1AgaW50ZXJmYWNlIGNsb2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9pcmF0ZV9pY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKKwkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHNwX2ZjaywKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiAyNDIwIG9ubHkgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pY2siLAkgLyogYXBwYXJlbnRseSBpcGkgYW5kIGlzcCAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHNwX2lyYXRlX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLworfTsKKworLyoKKyAqIFRoZSBJVkExIGlzIGFuIEFSTTcgY29yZSBvbiB0aGUgMjQyMCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGgKKyAqIHRoZSBDNTR4LCBidXQgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSBEU1AgcG93ZXJkb21haW4uICBEb2VzIG5vdAorICogZXhpc3Qgb24gbGF0ZXIgT01BUHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9pZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogSVZBMSBtcHUvaW50L2kvZiBjbG9ja3MgYXJlIC8yIG9mIHBhcmVudCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9tcHVfaW50X2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJml2YTFfaWZjaywKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworLyoKKyAqIEwzIGNsb2NrIGRvbWFpbgorICogTDMgY2xvY2tzIGFyZSB1c2VkIGZvciBib3RoIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbCBjbG9ja3MgdG8KKyAqIG11bHRpcGxlIGVudGl0aWVzLiBTb21lIG9mIHRoZXNlIGNsb2NrcyBhcmUgY29tcGxldGVseSBtYW5hZ2VkCisgKiBieSBoYXJkd2FyZSwgYW5kIHNvbWUgb3RoZXJzIGFsbG93IHNvZnR3YXJlIGNvbnRyb2wuIEhhcmR3YXJlCisgKiBtYW5hZ2VkIG9uZXMgZ2VuZXJhbCBhcmUgYmFzZWQgb24gZGlyZWN0bHkgQ0xLX1JFUSBzaWduYWxzIGFuZAorICogdmFyaW91cyBhdXRvIGlkbGUgc2V0dGluZ3MuIFRoZSBmdW5jdGlvbmFsIHNwZWMgc2V0cyBtYW55IG9mIHRoZXNlCisgKiBhcyAndGllLWhpZ2gnIGZvciB0aGVpciBlbmFibGVzLgorICoKKyAqIEktQ0xPQ0tTOgorICoJTDMtSW50ZXJjb25uZWN0LCBTTVMsIEdQTUMsIFNEUkMsIE9DTV9SQU0sIE9DTV9ST00sIFNETUEKKyAqCUNBTSwgSFMtVVNCLgorICogRi1DTE9DSworICoJU1NJLgorICoKKyAqIEdQTUMgbWVtb3JpZXMgYW5kIFNEUkMgaGF2ZSB0aW1pbmcgYW5kIGNsb2NrIHNlbnNpdGl2ZSByZWdpc3RlcnMgd2hpY2gKKyAqIG1heSB2ZXJ5IHdlbGwgbmVlZCBub3RpZmljYXRpb24gd2hlbiB0aGUgY2xvY2sgY2hhbmdlcy4gQ3VycmVudGx5IGZvciBsb3cKKyAqIG9wZXJhdGluZyBwb2ludHMsIHRoZXNlIGFyZSB0YWtlbiBjYXJlIG9mIGluIHNsZWVwLlMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29yZV9sM19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGNvcmVfbDNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19jayA9IHsJLyogVXNlZCBmb3IgaWNrIGFuZCBmY2ssIGludGVyY29ubmVjdCAqLworCS5uYW1lCQk9ICJjb3JlX2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKKwkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiB1c2JfbDRfaWNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHVzYl9sNF9pY2tfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNiX2w0X2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gdXNiX2w0X2lja19jb3JlX2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogSXQgaXMgdW5jbGVhciBmcm9tIFRSTSB3aGV0aGVyIHVzYl9sNF9pY2sgaXMgcmVhbGx5IGluIEwzIG9yIEw0IGNsa2RtICovCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCisJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9VU0JfTUFTSywKKwkuY2xrc2VsCQk9IHVzYl9sNF9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KKyAqCisgKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCisgKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KKyAqIHRoaXMgZG9tYWluLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gImw0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDRfTUFTSywKKwkuY2xrc2VsCQk9IGw0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCisgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCisgKiBkb21haW4uCisgKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0lDTEsKKyAqCisgKiBzc3IgPSBjb3JlLzEvMi8zLzQvNSwgc3N0ID0gMS8yIHNzci4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0geworCS5uYW1lCQk9ICJzc2lfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfU1NJX01BU0ssCisJLmNsa3NlbAkJPSBzc2lfc3NyX3NzdF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogUHJlc3VtYWJseSB0aGlzIGlzIHRoZSBzYW1lIGFzIFNTSV9JQ0xLLgorICogVFJNIGNvbnRyYWRpY3RzIGl0c2VsZiBvbiB3aGF0IGNsb2NrZG9tYWluIFNTSV9JQ0xLIGlzIGluCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisKKy8qCisgKiBHRlggY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKiBHRlhfRkNMSywgR0ZYX0lDTEsKKyAqIEdGWF9DRzEoMmQpLCBHRlhfQ0cyKDNkKQorICoKKyAqIEdGWF9GQ0xLIHJ1bnMgZnJvbSBMMywgYW5kIGlzIGRpdmlkZWQgYnkgKDEsMiwzLDQpCisgKiBUaGUgMmQgYW5kIDNkIGNsb2NrcyBydW4gYXQgYSBoYXJkd2FyZSBkZXRlcm1pbmVkCisgKiBkaXZpZGVkIHZhbHVlIG9mIGZjbGsuCisgKgorICovCisKKy8qIFRoaXMgY2xrc2VsIHN0cnVjdCBpcyBzaGFyZWQgYmV0d2VlbiBnZnhfM2RfZmNrIGFuZCBnZnhfMmRfZmNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSBnZnhfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0geworCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fM0RfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKKwkuY2xrc2VsCQk9IGdmeF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzJkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzJkX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzJEX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KKy8qIFhYWCBBZGQgUkFURV9OT1RfVkFMSURBVEVEICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MxX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAucmF0ZXMgPSBkc3MxX2Zja19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNzMV9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MxX01BU0ssCisJLmNsa3NlbAkJPSBkc3MxX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSywKKwkuY2xrc2VsCQk9IGRzczJfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDExX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfaWNrID0geworCS5uYW1lCQk9ICJncGlvc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfZmNrID0geworCS5uYW1lCQk9ICJncGlvc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9mY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0geworCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fT01BUENUUkxfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLm5hbWUJCT0gImNhbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIGNhbV9mY2sgY29udHJvbHMgYm90aCBDQU1fTUNMSyBhbmQgQ0FNX0ZDTEsuICBJdCBzaG91bGQgcHJvYmFibHkgYmUKKyAqIHNwbGl0IGludG8gdHdvIHNlcGFyYXRlIGNsb2Nrcywgc2luY2UgdGhlIHBhcmVudCBjbG9ja3MgYXJlIGRpZmZlcmVudAorICogYW5kIHRoZSBjbG9ja2RvbWFpbnMgYXJlIGFsc28gZGlmZmVyZW50LgorICovCitzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0geworCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CisJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ljayA9IHsKKwkubmFtZQkJPSAid2R0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKKwkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0geworCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX01NQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CisJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfZmNrID0geworCS5uYW1lCQk9ICJmYWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKKwkubmFtZQkJPSAiZWFjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9FQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19mY2sgPSB7CisJLm5hbWUJCT0gImVhY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0geworCS5uYW1lCQk9ICJoZHFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKKwkubmFtZQkJPSAiaGRxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0geworCS5uYW1lCQk9ICJpMmMxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfZmNrID0geworCS5uYW1lCQk9ICJzZG1hX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZG1hX2ljayA9IHsKKwkubmFtZQkJPSAic2RtYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ljayA9IHsKKwkubmFtZQkJPSAidmx5bnFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB2bHlucV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSB2bHlucV9mY2tfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gdmx5bnFfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ZjayA9IHsKKwkubmFtZQkJPSAidmx5bnFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9WTFlOUV9NQVNLLAorCS5jbGtzZWwJCT0gdmx5bnFfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CisJLm5hbWUJCT0gInNoYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgorICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKKyAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KKyAqCisgKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAorICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAorICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycworICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAorICogdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAorICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKKwkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAkvKiBJbmRleGVkIGJ5IG1wdSBzcGVlZCwgbm8gcGFyZW50ICovCisJLnJlY2FsYwkJPSAmb21hcDJfdGFibGVfbXB1X3JlY2FsYywJLyogc2V0cyBhcmUga2V5ZWQgb24gbXB1IHJhdGUgKi8KKwkuc2V0X3JhdGUJPSAmb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZSwKK307CisKKworLyoKKyAqIGNsa2RldiBpbnRlZ3JhdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDI0MjBfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY18zMmtfY2siLAkmZnVuY18zMmtfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19jayIsICZzZWN1cmVfMzJrX2NrLCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhbHRfY2siLAkmYWx0X2NrLAlDS18yNDJYKSwKKwkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFwbGw5Nl9jayIsCSZhcGxsOTZfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiYXBsbDU0X2NrIiwJJmFwbGw1NF9jaywJQ0tfMjQyWCksCisJLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzk2bV9jayIsCSZmdW5jXzk2bV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzEybV9jayIsCSZmdW5jXzEybV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJja193ZHQxX29zYyIsCSZ3ZHQxX29zY19jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0IiwJJnN5c19jbGtvdXQsCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dDJfc3JjIiwgJnN5c19jbGtvdXQyX3NyYywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlbXVsX2NrIiwJJmVtdWxfY2ssCUNLXzI0MlgpLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDJYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3BfaWNrIiwJJmRzcF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCisJLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJnZnhfMmRfZmNrIiwJJmdmeF8yZF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ2Z4X2ljayIsCSZnZnhfaWNrLAlDS18yNDJYKSwKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwZHNzIiwJImRzczJfZmNrIiwJJmRzczJfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDJYKSwKKwkvKiBMMyBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJjb3JlX2wzX2NrIiwJJmNvcmVfbDNfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2ZjayIsCSZzc2lfc3NyX3NzdF9mY2ssIENLXzI0MlgpLAorCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDJYKSwKKwkvKiBMNCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJsNF9jayIsCSZsNF9jaywJCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18yNDJYKSwKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQyWCksCisJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLworCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkmZ3B0MTBfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19pY2siLAkmdWFydDNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3Bpb3NfaWNrIiwJJmdwaW9zX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncGlvc19mY2siLAkmZ3Bpb3NfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZtcHVfd2R0X2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeW5jXzMya19pY2siLAkmc3luY18zMmtfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDI0eHhjYW0iLCAiaWNrIiwJJmNhbV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfZmNrIiwJJndkdDRfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJpY2siLAkmbW1jX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJmY2siLAkmbW1jX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZmFjX2ZjayIsCSZmYWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2hkcS4xIiwgImZjayIsCSZoZHFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwbWNfZmNrIiwJJmdwbWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfaWNrIiwJJnNkbWFfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInZseW5xX2ljayIsCSZ2bHlucV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidmx5bnFfZmNrIiwJJnZseW5xX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkZXNfaWNrIiwJJmRlc19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhZXNfaWNrIiwJJmFlc19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYl9mY2siLAkmdXNiX2ZjaywJQ0tfMjQyWCksCit9OworCisvKgorICogaW5pdCBjb2RlCisgKi8KKworaW50IF9faW5pdCBvbWFwMjQyMF9jbGtfaW5pdCh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CisJdTMyIGNsa3JhdGU7CisKKwlwcmNtX2Nsa3NyY19jdHJsID0gT01BUDI0MjBfUFJDTV9DTEtTUkNfQ1RSTDsKKwljbV9pZGxlc3RfcGxsID0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCk7CisJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7CisJcmF0ZV90YWJsZSA9IG9tYXAyNDIwX3JhdGVfdGFibGU7CisKKwljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CisKKwlmb3IgKGMgPSBvbWFwMjQyMF9jbGtzOyBjIDwgb21hcDI0MjBfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0MjBfY2xrcyk7CisJICAgICBjKyspCisJCWNsa19wcmVpbml0KGMtPmxrLmNsayk7CisKKwlvc2NfY2sucmF0ZSA9IG9tYXAyX29zY19jbGtfcmVjYWxjKCZvc2NfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZvc2NfY2spOworCXN5c19jay5yYXRlID0gb21hcDJ4eHhfc3lzX2Nsa19yZWNhbGMoJnN5c19jayk7CisJcHJvcGFnYXRlX3JhdGUoJnN5c19jayk7CisKKwlmb3IgKGMgPSBvbWFwMjQyMF9jbGtzOyBjIDwgb21hcDI0MjBfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0MjBfY2xrcyk7CisJICAgICBjKyspIHsKKwkJY2xrZGV2X2FkZCgmYy0+bGspOworCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJb21hcDJfaW5pdF9jbGtfY2xrZG0oYy0+bGsuY2xrKTsKKwl9CisKKwkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwljbGtyYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCisJCQlicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJfaW5mbygiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkJKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkJKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa19lbmFibGVfaW5pdF9jbG9ja3MoKTsKKworCS8qIEF2b2lkIHNsZWVwaW5nIHNsZWVwaW5nIGR1cmluZyBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KCkgKi8KKwl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOworCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlkY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbF9jayIpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDBjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBjbG9jazI0MzAuYyAtIE9NQVAyNDMwLXNwZWNpZmljIGNsb2NrIGludGVncmF0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAorICogR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKKy8qKgorICogb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciAyNDMwIEkyQ0hTCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAorICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bworICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCisgKiBAaWRsZXN0X3ZhbDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgaW5kaWNhdG9yCisgKgorICogT01BUDI0MzAgSTJDSFMgQ01fSURMRVNUIGJpdHMgYXJlIGluIENNX0lETEVTVDFfQ09SRSwgYnV0IHRoZQorICogQ01fKkNMS0VOIGJpdHMgYXJlIGluIENNX3tJLEZ9Q0xLRU4yX0NPUkUuICBUaGlzIGN1c3RvbSBmdW5jdGlvbgorICogcGFzc2VzIGJhY2sgdGhlIGNvcnJlY3QgQ01fSURMRVNUIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIEkyQ0hTCisgKiBtb2R1bGVzLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAorCQkJCQkgICB1OCAqaWRsZXN0X2JpdCwKKwkJCQkJICAgdTggKmlkbGVzdF92YWwpCit7CisJKmlkbGVzdF9yZWcgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QpOworCSppZGxlc3RfYml0ID0gY2xrLT5lbmFibGVfYml0OworCSppZGxlc3RfdmFsID0gT01BUDI0WFhfQ01fSURMRVNUX1ZBTDsKK30KKworLyogMjQzMCBJMkNIUyBoYXMgbm9uLXN0YW5kYXJkIElETEVTVCByZWdpc3RlciAqLworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfaWRsZXN0CT0gb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM4YjZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzBfZGF0YS5jCkBAIC0wLDAgKzEsMjAwOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqICBDb250YWN0czoKKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xrZGV2X29tYXAuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAib3BwMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgInNkcmMuaCIKKworI2RlZmluZSBPTUFQX0NNX1JFR0FERFIJCQlPTUFQMjQzMF9DTV9SRUdBRERSCisKKy8qCisgKiAyNDMwIGNsb2NrIHRyZWUuCisgKgorICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuCUluIG1hbnkKKyAqCWNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4JVGhlIGdldC9zZXQgcGFyZW50IGNhbGxzIHdpbGwgYWxzbworICoJc3dpdGNoIHNvdXJjZXMuCisgKgorICoJTWFueSBzb21lIGNsb2NrcyBzYXkgYWx3YXlzX2VuYWJsZWQsIGJ1dCB0aGV5IGNhbiBiZSBhdXRvIGlkbGVkIGZvcgorICoJcG93ZXIgc2F2aW5ncy4gVGhleSB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUgdXBvbiBjbG9jayByZXF1ZXN0LgorICoKKyAqCVNldmVyYWwgc291cmNlcyBhcmUgZ2l2ZW4gaW5pdGlhbCByYXRlcyB3aGljaCBtYXkgYmUgd3JvbmcsIHRoaXMgd2lsbAorICoJYmUgZml4ZWQgdXAgaW4gdGhlIGluaXQgZnVuYy4KKyAqCisgKglUaGluZ3MgYXJlIGJyb2FkbHkgc2VwYXJhdGVkIGJlbG93IGJ5IGNsb2NrIGRvbWFpbnMuIEl0IGlzCisgKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpZmVyYWxzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG11bHRpcGxlIGNsb2NrCisgKglkb21haW5zLiBNYW55IGdldCB0aGVpciBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGRvbWFpbiwgYnV0IGdldAorICoJZnVuY3Rpb25hbCBjbG9ja3MgZnJvbSBmaXhlZCBzb3VyY2VzIG9yIG90aGVyIGNvcmUgZG9tYWluIGRlcml2ZWQKKyAqCWNsb2Nrcy4KKyAqLworCisvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjAwMCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDMyNzY4LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAib3NjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb3NjY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCit9OworCisvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMnh4eF9zeXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLworCS5uYW1lCQk9ICJhbHRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyoKKyAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCisgKi8KKworLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCisvKiBSRVZJU0lUOiBSYXRlIGNoYW5nZXMgb24gZHBsbF9jayB0cmlnZ2VyIGEgZnVsbCBzZXQgY2hhbmdlLgkuLi4KKyAqIGRlYWwgd2l0aCB0aGlzCisgKi8KKworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbF9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJCT0gJnN5c19jaywKKwkuY2xrX3JlZgkJPSAmc3lzX2NrLAorCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjMsCisJLm1pbl9kaXZpZGVyCQk9IDEsCisJLm1heF9kaXZpZGVyCQk9IDE2LAorCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKKy8qCisgKiBYWFggQ2Fubm90IGFkZCByb3VuZF9yYXRlIGhlcmUgeWV0LCBhcyB0aGlzIGlzIHN0aWxsIGEgY29tcG9zaXRlIGNsb2NrLAorICogbm90IGp1c3QgYSBEUExMCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCisJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2RwbGxjb3JlX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5vcHMJCT0gJmNsa29wc19hcGxsOTYsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDk2MDAwMDAwLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDU0X2NrID0geworCS5uYW1lCQk9ICJhcGxsNTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19hcGxsNTQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAorfTsKKworLyoKKyAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKKyAqLworCisvKiBmdW5jXzU0bV9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FwbGw1NF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzU0bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXBsbDU0X2NrLCAucmF0ZXMgPSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXMsIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJLnJhdGVzID0gZnVuY181NG1fYWx0X3JhdGVzLCB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLAorCS5jbGtzZWwJCT0gZnVuY181NG1fY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0geworCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIGZ1bmNfOTZtX2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FwbGw5Nl9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hcGxsOTZfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfOTZtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzk2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MzBfOTZNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfOTZtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogZnVuY180OG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5maXhlZF9kaXYJPSA0LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIGNvbW1vbl9jbGtvdXQqIGNsa3NlbF9yYXRlIHN0cnVjdHMgYXJlIGNvbW1vbiB0bworICogc3lzX2Nsa291dCwgc3lzX2Nsa291dF9zcmMsIHN5c19jbGtvdXQyLCBhbmQgc3lzX2Nsa291dDJfc3JjLgorICogc3lzX2Nsa291dDJfKiBhcmUgMjQyMC1vbmx5LCBzbyB0aGUKKyAqIGNsa3NlbF9yYXRlIGZsYWdzIGZpZWxkcyBhcmUgaW5hY2N1cmF0ZSBmb3IgdGhvc2UgY2xvY2tzLiBUaGlzIGlzCisgKiBoYXJtbGVzcyBzaW5jZSBhY2Nlc3MgdG8gdGhvc2UgY2xvY2tzIGFyZSBnYXRlZCBieSB0aGUgc3RydWN0IGNsaworICogZmxhZ3MgZmllbGRzLCB3aGljaCBtYXJrIHRoZW0gYXMgMjQyMC1vbmx5LgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY181NG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb21tb25fY2xrb3V0X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzU0bV9jaywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MzBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MzBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW11bF9jayA9IHsKKwkubmFtZQkJPSAiZW11bF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjQzMF9QUkNNX0NMS0VNVUxfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCit9OworCisvKgorICogTVBVIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICoJCU1QVV9GQ0xLLCBNUFVfSUNMSworICoJCUlOVF9NX0ZDTEssIElOVF9NX0lfQ0xLCisgKgorICogLSBJbmRpdmlkdWFsIGNsb2NrcyBhcmUgaGFyZHdhcmUgbWFuYWdlZC4KKyAqIC0gQmFzZSBkaXZpZGVyIGNvbWVzIGZyb206IENNX0NMS1NFTF9NUFUKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbXB1X2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gbXB1X2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KKwkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKKwkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBEU1AgKDI0MzAtSVZBMi4xKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MzA6IElWQTIuMV9GQ0xLIChyZWFsbHkganVzdCBEU1BfRkNMSyksIElWQTIuMV9JQ0xLCisgKgorICogV29uJ3QgYmUgdG9vIHNwZWNpZmljIGhlcmUuIFRoZSBjb3JlIGNsb2NrIGNvbWVzIGludG8gdGhpcyBibG9jaworICogaXQgaXMgZGl2aWRlZCB0aGVuIHRlZSdlZC4gT25lIGJyYW5jaCBnb2VzIGRpcmVjdGx5IHRvIHh5eiBlbmFibGUKKyAqIGNvbnRyb2xzLiBUaGUgb3RoZXIgYnJhbmNoIGdldHMgZnVydGhlciBkaXZpZGVkIGJ5IDIgdGhlbiBwb3NzaWJseQorICogcm91dGVkIGludG8gYSBzeW5jaHJvbml6ZXIgYW5kIG91dCBvZiBjbG9ja3MgYWJjLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7CisJLm5hbWUJCT0gImRzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEU1AgaW50ZXJmYWNlIGNsb2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9pcmF0ZV9pY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfaXJhdGVfaWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkc3BfZmNrLCAucmF0ZXMgPSBkc3BfaXJhdGVfaWNrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRzcF9mY2ssCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKKwkubmFtZQkJPSAiaXZhMl8xX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKK307CisKKy8qCisgKiBMMyBjbG9jayBkb21haW4KKyAqIEwzIGNsb2NrcyBhcmUgdXNlZCBmb3IgYm90aCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWwgY2xvY2tzIHRvCisgKiBtdWx0aXBsZSBlbnRpdGllcy4gU29tZSBvZiB0aGVzZSBjbG9ja3MgYXJlIGNvbXBsZXRlbHkgbWFuYWdlZAorICogYnkgaGFyZHdhcmUsIGFuZCBzb21lIG90aGVycyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sLiBIYXJkd2FyZQorICogbWFuYWdlZCBvbmVzIGdlbmVyYWwgYXJlIGJhc2VkIG9uIGRpcmVjdGx5IENMS19SRVEgc2lnbmFscyBhbmQKKyAqIHZhcmlvdXMgYXV0byBpZGxlIHNldHRpbmdzLiBUaGUgZnVuY3Rpb25hbCBzcGVjIHNldHMgbWFueSBvZiB0aGVzZQorICogYXMgJ3RpZS1oaWdoJyBmb3IgdGhlaXIgZW5hYmxlcy4KKyAqCisgKiBJLUNMT0NLUzoKKyAqCUwzLUludGVyY29ubmVjdCwgU01TLCBHUE1DLCBTRFJDLCBPQ01fUkFNLCBPQ01fUk9NLCBTRE1BCisgKglDQU0sIEhTLVVTQi4KKyAqIEYtQ0xPQ0sKKyAqCVNTSS4KKyAqCisgKiBHUE1DIG1lbW9yaWVzIGFuZCBTRFJDIGhhdmUgdGltaW5nIGFuZCBjbG9jayBzZW5zaXRpdmUgcmVnaXN0ZXJzIHdoaWNoCisgKiBtYXkgdmVyeSB3ZWxsIG5lZWQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMuIEN1cnJlbnRseSBmb3IgbG93CisgKiBvcGVyYXRpbmcgcG9pbnRzLCB0aGVzZSBhcmUgdGFrZW4gY2FyZSBvZiBpbiBzbGVlcC5TLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvcmVfbDNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9sM19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gY29yZV9sM19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCisJLm5hbWUJCT0gImNvcmVfbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MM19NQVNLLAorCS5jbGtzZWwJCT0gY29yZV9sM19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIHVzYl9sNF9pY2sgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNiX2w0X2lja19jb3JlX2wzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2JfbDRfaWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBJdCBpcyB1bmNsZWFyIGZyb20gVFJNIHdoZXRoZXIgdXNiX2w0X2ljayBpcyByZWFsbHkgaW4gTDMgb3IgTDQgY2xrZG0gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1VTQl9NQVNLLAorCS5jbGtzZWwJCT0gdXNiX2w0X2lja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAorCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKKyAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKKyAqIGRvbWFpbi4KKyAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSworICoKKyAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3Jfc3N0X2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gc3NpX3Nzcl9zc3RfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3Jfc3N0X2ZjayA9IHsKKwkubmFtZQkJPSAic3NpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAorCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFByZXN1bWFibHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBTU0lfSUNMSy4KKyAqIFRSTSBjb250cmFkaWN0cyBpdHNlbGYgb24gd2hhdCBjbG9ja2RvbWFpbiBTU0lfSUNMSyBpcyBpbgorICovCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisvKgorICogR0ZYIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICogR0ZYX0ZDTEssIEdGWF9JQ0xLCisgKiBHRlhfQ0cxKDJkKSwgR0ZYX0NHMigzZCkKKyAqCisgKiBHRlhfRkNMSyBydW5zIGZyb20gTDMsIGFuZCBpcyBkaXZpZGVkIGJ5ICgxLDIsMyw0KQorICogVGhlIDJkIGFuZCAzZCBjbG9ja3MgcnVuIGF0IGEgaGFyZHdhcmUgZGV0ZXJtaW5lZAorICogZGl2aWRlZCB2YWx1ZSBvZiBmY2xrLgorICoKKyAqLworCisvKiBUaGlzIGNsa3NlbCBzdHJ1Y3QgaXMgc2hhcmVkIGJldHdlZW4gZ2Z4XzNkX2ZjayBhbmQgZ2Z4XzJkX2ZjayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZ2Z4X2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzNkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzNEX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CisJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CisJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1vZGVtIGNsb2NrIGRvbWFpbiAoMjQzMCkKKyAqCUNMT0NLUzoKKyAqCQlNRE1fT1NDX0NMSworICoJCU1ETV9JQ0xLCisgKiBUaGVzZSBjbG9ja3MgYXJlIHVzYWJsZSBpbiBjaGFzc2lzIG1vZGUgb25seS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtZG1faWNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtZG1faWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtZG1faWNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0ssCisJLmNsa3NlbAkJPSBtZG1faWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKKwkubmFtZQkJPSAibWRtX29zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fT1NDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KKy8qIFhYWCBBZGQgUkFURV9OT1RfVkFMSURBVEVEICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MxX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAucmF0ZXMgPSBkc3MxX2Zja19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNzMV9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MxX01BU0ssCisJLmNsa3NlbAkJPSBkc3MxX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSywKKwkuY2xrc2VsCQk9IGRzczJfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDExX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKKwkubmFtZQkJPSAibWNic3A1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CisJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKKwkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKKwkubmFtZQkJPSAiaWNyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQorICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50CisgKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CisJLm5hbWUJCT0gImNhbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKKwkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAid2R0NF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKKwkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZmFjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CisJLm5hbWUJCT0gImhkcV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0geworCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFhYWCBUaGlzIGlzIG1hcmtlZCBhcyBhIDI0MjAtb25seSBkZWZpbmUsIGJ1dCBpdCBjbGFpbXMgdG8gYmUgcHJlc2VudAorICogb24gMjQzMCBhbHNvLiAgRG91YmxlLWNoZWNrLgorICovCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHMyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyNDMwX2kyY2hzX3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogWFhYIFRoaXMgaXMgbWFya2VkIGFzIGEgMjQyMC1vbmx5IGRlZmluZSwgYnV0IGl0IGNsYWltcyB0byBiZSBwcmVzZW50CisgKiBvbiAyNDMwIGFsc28uICBEb3VibGUtY2hlY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0geworCS5uYW1lCQk9ICJpMmNoczFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0geworCS5uYW1lCQk9ICJncG1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7CisJLm5hbWUJCT0gInNkbWFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLworCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0geworCS5uYW1lCQk9ICJzZG1hX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9TRFJDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0geworCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKKwkubmFtZQkJPSAic2hhX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TSEFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUk5HX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0geworCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9QS0FfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9mY2sgPSB7CisJLm5hbWUJCT0gInVzYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CisJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1VTQkhTX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHMxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0geworCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CisJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc2RiMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNkYjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyBjbG9jayBpcyBhIGNvbXBvc2l0ZSBjbG9jayB3aGljaCBkb2VzIGVudGlyZSBzZXQgY2hhbmdlcyB0aGVuCisgKiBmb3JjZXMgYSByZWJhbGFuY2UuIEl0IGtleXMgb24gdGhlIE1QVSBzcGVlZCwgYnV0IGl0IHJlYWxseSBjb3VsZAorICogYmUgYW55IGtleSBzcGVlZCBwYXJ0IG9mIGEgc2V0IGluIHRoZSByYXRlIHRhYmxlLgorICoKKyAqIHRvIHJlYWxseSBjaGFuZ2UgYSBzZXQsIHlvdSBuZWVkIG1lbW9yeSB0YWJsZSBzZXRzIHdoaWNoIGdldCBjaGFuZ2VkCisgKiBpbiBzcmFtLCBwcmUtbm90aWZpZXJzICYgcG9zdCBub3RpZmllcnMsIGNoYW5naW5nIHRoZSB0b3Agc2V0LCB3aXRob3V0CisgKiBoYXZpbmcgbG93IGxldmVsIGRpc3BsYXkgcmVjYWxjJ3Mgd29uJ3Qgd29yay4uLiB0aGlzIGlzIHdoeSBkcG0gbm90aWZpZXJzCisgKiB3b3JrLCBpc3IncyBvZmYsIHdhbGsgYSBsaXN0IG9mIGNsb2NrcyBhbHJlYWR5IF9vZmZfIGFuZCBub3QgbWVzc2luZyB3aXRoCisgKiB0aGUgYnVzLgorICoKKyAqIFRoaXMgY2xvY2sgc2hvdWxkIGhhdmUgbm8gcGFyZW50LiBJdCBlbWJvZGllcyB0aGUgZW50aXJlIHVwcGVyIGxldmVsCisgKiBhY3RpdmUgc2V0LiBBIHBhcmVudCB3aWxsIG1lc3MgdXAgc29tZSBvZiB0aGUgaW5pdCBhbHNvLgorICovCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0X3ByY21fc2V0ID0geworCS5uYW1lCQk9ICJ2aXJ0X3ByY21fc2V0IiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl90YWJsZV9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAorfTsKKworCisvKgorICogY2xrZGV2IGludGVncmF0aW9uCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwMjQzMF9jbGtzW10gPSB7CisJLyogZXh0ZXJuYWwgcm9vdCBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJmdW5jXzMya19jayIsCSZmdW5jXzMya19jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2NrIiwgJnNlY3VyZV8zMmtfY2ssIENLXzI0M1gpLAorCUNMSyhOVUxMLAkib3NjX2NrIiwJJm9zY19jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1gpLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJkcGxsX2NrIiwJJmRwbGxfY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiYXBsbDk2X2NrIiwJJmFwbGw5Nl9jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYKSwKKwkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY181NG1fY2siLAkmZnVuY181NG1fY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9jayIsCSZjb3JlX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfNDhtX2NrIiwJJmZ1bmNfNDhtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfMTJtX2NrIiwJJmZ1bmNfMTJtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXRfc3JjIiwgJnN5c19jbGtvdXRfc3JjLCBDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQiLAkmc3lzX2Nsa291dCwJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJlbXVsX2NrIiwJJmVtdWxfY2ssCUNLXzI0M1gpLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDNYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAorCS8qIEdGWCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJnZnhfM2RfZmNrIiwJJmdmeF8zZF9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdmeF9pY2siLAkmZ2Z4X2ljaywJQ0tfMjQzWCksCisJLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibWRtX2ljayIsCSZtZG1faWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9vc2NfY2siLAkmbWRtX29zY19jaywJQ0tfMjQzWCksCisJLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwZHNzIiwJInR2X2ZjayIsCSZkc3NfNTRtX2ZjaywJQ0tfMjQzWCksCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9mY2siLAkmc3NpX3Nzcl9zc3RfZmNrLCBDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMjQzWCksCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9sNF9pY2siLAkmc3NpX2w0X2ljaywJQ0tfMjQzWCksCisJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCisJQ0xLKE5VTEwsCSJ2aXJ0X3ByY21fc2V0IiwgJnZpcnRfcHJjbV9zZXQsIENLXzI0M1gpLAorCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJJmdwdDJfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfaWNrIiwJJmdwdDNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfZmNrIiwJJmdwdDNfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfZmNrIiwJJmdwdDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJJmdwdDVfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfaWNrIiwJJmdwdDZfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfZmNrIiwJJmdwdDZfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfZmNrIiwJJmdwdDdfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJJmdwdDhfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfaWNrIiwJJmdwdDlfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfZmNrIiwJJmdwdDlfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfaWNrIiwJJmdwdDEyX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiZmNrIiwJJm1jYnNwMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJm1jYnNwM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJmY2siLAkmbWNic3A1X2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvc19pY2siLAkmZ3Bpb3NfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZtcHVfd2R0X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJm1wdV93ZHRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkid2R0MV9pY2siLAkmd2R0MV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiaWNrIiwJJmNhbV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIndkdDRfZmNrIiwJJndkdDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZmFjX2ZjayIsCSZmYWNfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiaWNrIiwJJmhkcV9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RtYV9mY2siLAkmc2RtYV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RtYV9pY2siLAkmc2RtYV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZGVzX2ljayIsCSZkZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNoYV9pY2siLAkmc2hhX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiYWVzX2ljayIsCSZhZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1gpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorfTsKKworLyoKKyAqIGluaXQgY29kZQorICovCisKK2ludCBfX2luaXQgb21hcDI0MzBfY2xrX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJc3RydWN0IG9tYXBfY2xrICpjOworCXUzMiBjbGtyYXRlOworCisJcHJjbV9jbGtzcmNfY3RybCA9IE9NQVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkw7CisJY21faWRsZXN0X3BsbCA9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpOworCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOworCXJhdGVfdGFibGUgPSBvbWFwMjQzMF9yYXRlX3RhYmxlOworCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCisJZm9yIChjID0gb21hcDI0MzBfY2xrczsgYyA8IG9tYXAyNDMwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNDMwX2Nsa3MpOworCSAgICAgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKKwlzeXNfY2sucmF0ZSA9IG9tYXAyeHh4X3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOworCisJZm9yIChjID0gb21hcDI0MzBfY2xrczsgYyA8IG9tYXAyNDMwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNDMwX2Nsa3MpOworCSAgICAgYysrKSB7CisJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CisJfQorCisJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCisJY2xrcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA8PSBjbGtyYXRlKQorCQkJYnJlYWs7CisJfQorCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworCisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCXByX2luZm8oIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJCShzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJCShkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CisKKwkvKiBBdm9pZCBzbGVlcGluZyBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJZGNsayA9IGNsa19nZXQoTlVMTCwgImRwbGxfY2siKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguYwppbmRleCA1NDIwMzU2Li44MGJiMGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmMKQEAgLTEsMTUgKzEsMTUgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisgKiBjbG9jazJ4eHguYyAtIE9NQVAyeHh4LXNwZWNpZmljIGNsb2NrIGludGVncmF0aW9uIGNvZGUKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogIENvbnRhY3RzOgotICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBQYXVsIFdhbG1zbGV5CisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKICAqCi0gKiAgQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKLSAqICBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNyw1NjggKzE3LDI4IEBACiAgKi8KICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLSNpbmNsdWRlIDxwbGF0L3ByY20uaD4KLSNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCi0jaW5jbHVkZSA8cGxhdC9zZHJjLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjbG9jazJ4eHguaCIKLSNpbmNsdWRlICJvcHAyeHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAKLQotLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLwotI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCi0jZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMwotCi0vKiBDTV9DTEtTRUwxX1BMTC5BUExMU19DTEtJTiBvcHRpb25zICgyNFhYKSAqLwotI2RlZmluZSBBUExMU19DTEtJTl8xOV8yTUhaCQkwCi0jZGVmaW5lIEFQTExTX0NMS0lOXzEzTUhaCQkyCi0jZGVmaW5lIEFQTExTX0NMS0lOXzEyTUhaCQkzCi0KLS8qICNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLwotCi1jb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7Ci1jb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnJhdGVfdGFibGU7Ci0KIHN0cnVjdCBjbGsgKnZjbGssICpzY2xrLCAqZGNsazsKIAotdm9pZCBfX2lvbWVtICpwcmNtX2Nsa3NyY19jdHJsOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCiAgKiBPbWFwMjR4eCBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qKgotICogb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciAyNDMwIEkyQ0hTCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAotICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bwotICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCi0gKgotICogT01BUDI0MzAgSTJDSFMgQ01fSURMRVNUIGJpdHMgYXJlIGluIENNX0lETEVTVDFfQ09SRSwgYnV0IHRoZQotICogQ01fKkNMS0VOIGJpdHMgYXJlIGluIENNX3tJLEZ9Q0xLRU4yX0NPUkUuICBUaGlzIGN1c3RvbSBmdW5jdGlvbgotICogcGFzc2VzIGJhY2sgdGhlIGNvcnJlY3QgQ01fSURMRVNUIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIEkyQ0hTCi0gKiBtb2R1bGVzLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1zdGF0aWMgdm9pZCBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkgICB1OCAqaWRsZXN0X2JpdCkKLXsKLQkqaWRsZXN0X3JlZyA9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSURMRVNUKTsKLQkqaWRsZXN0X2JpdCA9IGNsay0+ZW5hYmxlX2JpdDsKLX0KLQotLyogMjQzMCBJMkNIUyBoYXMgbm9uLXN0YW5kYXJkIElETEVTVCByZWdpc3RlciAqLwotY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCA9IHsKLQkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCi0JLmZpbmRfaWRsZXN0CT0gb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0LAotCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAotfTsKLQotLyoqCi0gKiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSAtIHJldHVybiB0aGUgQ09SRV9DTEsgcmF0ZQotICogQGNsazogcG9pbnRlciB0byB0aGUgY29tYmluZWQgZHBsbF9jayArIGNvcmVfY2sgKGN1cnJlbnRseSAiZHBsbF9jayIpCi0gKgotICogUmV0dXJucyB0aGUgQ09SRV9DTEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCi0gKiBzb3VyY2VzIG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJLSHoKLSAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoCi0gKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAotICogY29yZV9jay4KLSAqLwotdW5zaWduZWQgbG9uZyBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbG9uZyBsb25nIGNvcmVfY2xrOwotCXUzMiB2OwotCi0JY29yZV9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Ci0KLQl2ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCXYgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7Ci0KLQlpZiAodiA9PSBDT1JFX0NMS19TUkNfMzJLKQotCQljb3JlX2NsayA9IDMyNzY4OwotCWVsc2UKLQkJY29yZV9jbGsgKj0gdjsKLQotCXJldHVybiBjb3JlX2NsazsKLX0KLQotc3RhdGljIGludCBvbWFwMl9lbmFibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcGNjOwotCi0JcGNjID0gX19yYXdfcmVhZGwocHJjbV9jbGtzcmNfY3RybCk7Ci0KLQlfX3Jhd193cml0ZWwocGNjICYgfk9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBwY2M7Ci0KLQlwY2MgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKLQotCV9fcmF3X3dyaXRlbChwY2MgfCBPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssIHByY21fY2xrc3JjX2N0cmwpOwotfQotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjayA9IHsKLQkuZW5hYmxlCQk9IG9tYXAyX2VuYWJsZV9vc2NfY2ssCi0JLmRpc2FibGUJPSBvbWFwMl9kaXNhYmxlX29zY19jaywKLX07Ci0KLSNpZmRlZiBPTERfQ0sKLS8qIFJlY2FsY3VsYXRlIFNZU1RfQ0xLICovCi1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIGRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7Ci0JZGl2ICY9ICgxIDw8IDcpIHwgKDEgPDwgNik7CS8qIFRlc3QgaWYgZXh0IGNsayBkaXZpZGVkIGJ5IDEgb3IgMiAqLwotCWRpdiA+Pj0gY2xrLT5yYXRlX29mZnNldDsKLQljbGstPnJhdGUgPSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpOwotCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0jZW5kaWYJLyogT0xEX0NLICovCi0KLS8qIEVuYWJsZSBhbiBBUExMIGlmIG9mZiAqLwotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCB1MzIgc3RhdHVzX21hc2spCi17Ci0JdTMyIGN2YWwsIGFwbGxfbWFzazsKLQotCWFwbGxfbWFzayA9IEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdDsKLQotCWN2YWwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOwotCi0JaWYgKChjdmFsICYgYXBsbF9tYXNrKSA9PSBhcGxsX21hc2spCi0JCXJldHVybiAwOyAgIC8qIGFwbGwgYWxyZWFkeSBlbmFibGVkICovCi0KLQljdmFsICY9IH5hcGxsX21hc2s7Ci0JY3ZhbCB8PSBhcGxsX21hc2s7Ci0JY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7Ci0KLQlvbWFwMl9jbV93YWl0X2lkbGVzdChPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwgc3RhdHVzX21hc2ssCi0JCQkgICAgIGNsay0+bmFtZSk7Ci0KLQkvKgotCSAqIFJFVklTSVQ6IFNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KCkKLQkgKiBmYWlscz8KLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbDk2X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG9tYXAyX2Nsa19hcGxsX2VuYWJsZShjbGssIE9NQVAyNFhYX1NUXzk2TV9BUExMKTsKLX0KLQotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbDU0X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG9tYXAyX2Nsa19hcGxsX2VuYWJsZShjbGssIE9NQVAyNFhYX1NUXzU0TV9BUExMKTsKLX0KLQotLyogU3RvcCBBUExMICovCi1zdGF0aWMgdm9pZCBvbWFwMl9jbGtfYXBsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgY3ZhbDsKLQotCWN2YWwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOwotCWN2YWwgJj0gfihFTl9BUExMX0xPQ0tFRCA8PCBjbGstPmVuYWJsZV9iaXQpOwotCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwotfQotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hcGxsOTYgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMl9jbGtfYXBsbDk2X2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUsCi19OwotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hcGxsNTQgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMl9jbGtfYXBsbDU0X2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUsCi19OwotCi0vKgotICogVXNlcyB0aGUgY3VycmVudCBwcmNtIHNldCB0byB0ZWxsIGlmIGEgcmF0ZSBpcyB2YWxpZC4KLSAqIFlvdSBjYW4gZ28gc2xvd2VyLCBidXQgbm90IGZhc3RlciB3aXRoaW4gYSBnaXZlbiByYXRlIHNldC4KLSAqLwotbG9uZyBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCi17Ci0JdTMyIGhpZ2gsIGxvdywgY29yZV9jbGtfc3JjOwotCi0JY29yZV9jbGtfc3JjID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCWNvcmVfY2xrX3NyYyAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQotCWlmIChjb3JlX2Nsa19zcmMgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsJLyogRFBMTCBjbG9ja291dCAqLwotCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7Ci0JCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KLQkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOwotCX0KLQotI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAotCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCi0JCXJldHVybiBoaWdoOwotCWVsc2UKLQkJcmV0dXJuIHRhcmdldF9yYXRlOwotI2Vsc2UKLQlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCi0JCXJldHVybiBoaWdoOwotCWVsc2UKLQkJcmV0dXJuIGxvdzsKLSNlbmRpZgotCi19Ci0KLXVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoY2xrKTsKLX0KLQotaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgY3VyX3JhdGUsIGxvdywgbXVsdCwgZGl2LCB2YWxpZF9yYXRlLCBkb25lX3JhdGU7Ci0JdTMyIGJ5cGFzcyA9IDA7Ci0Jc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQotCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoZGNsayk7Ci0JbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQltdWx0ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwotCi0JaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7Ci0JfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgewotCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbGNvcmVfcm91bmRfcmF0ZShyYXRlKTsKLQkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChtdWx0ID09IDEpCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCQllbHNlCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKLQotCQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCQlpZiAoIWRkKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfihkZC0+bXVsdF9tYXNrIHwKLQkJCQkJICAgZGQtPmRpdjFfbWFzayk7Ci0JCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEwMDAwMDApIC0gMSk7Ci0JCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH5PTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQkJaWYgKHJhdGUgPiBsb3cpIHsKLQkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJCW11bHQgPSAoKHJhdGUgLyAyKSAvIDEwMDAwMDApOwotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7Ci0JCX0gZWxzZSB7Ci0JCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0JCQltdWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKLQkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMOwotCQl9Ci0JCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAoZGl2IDw8IF9fZmZzKGRkLT5tdWx0X21hc2spKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChtdWx0IDw8IF9fZmZzKGRkLT5kaXYxX21hc2spKTsKLQotCQkvKiBXb3JzdCBjYXNlICovCi0JCXRtcHNldC5iYXNlX3NkcmNfcmZyID0gU0RSQ19SRlJfQ1RSTF9CWVBBU1M7Ci0KLQkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJLyogRm9yIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLwotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0KLQkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLwotCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCi0JCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7Ci0JCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDJfdGFibGVfbXB1X3JlY2FsYyAtIGp1c3QgcmV0dXJuIHRoZSBNUFUgc3BlZWQKLSAqIEBjbGs6IHZpcnRfcHJjbV9zZXQgc3RydWN0IGNsawotICoKLSAqIFNldCB2aXJ0X3ByY21fc2V0J3MgcmF0ZSB0byB0aGUgbXB1X3NwZWVkIGZpZWxkIG9mIHRoZSBjdXJyZW50IFBSQ00gc2V0LgotICovCi11bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Ci19Ci0KLS8qCi0gKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgotICoKLSAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCi0gKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKLSAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgotICovCi1sb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwdHI7Ci0JbG9uZyBoaWdoZXN0X3JhdGU7Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQotCXN5c19ja19yYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCi0JaGlnaGVzdF9yYXRlID0gLUVJTlZBTDsKLQotCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5tcHVfc3BlZWQ7IHB0cisrKSB7Ci0JCWlmICghKHB0ci0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHB0ci0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+bXB1X3NwZWVkOwotCi0JCS8qIENhbiBjaGVjayBvbmx5IGFmdGVyIHh0YWwgZnJlcXVlbmN5IGNoZWNrICovCi0JCWlmIChwdHItPm1wdV9zcGVlZCA8PSByYXRlKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBoaWdoZXN0X3JhdGU7Ci19Ci0KLS8qIFNldHMgYmFzaWMgY2xvY2tzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmF0ZSAqLwotaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwLCB0bXA7Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQotCXN5c19ja19yYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCi0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwcmNtLT5tcHVfc3BlZWQgPD0gcmF0ZSkgewotCQkJZm91bmRfc3BlZWQgPSBwcmNtLT5tcHVfc3BlZWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmRfc3BlZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IHNldCBNUFUgcmF0ZSB0byAlbHVNSHpcbiIsCi0JCSAgICAgICByYXRlIC8gMTAwMDAwMCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWN1cnJfcHJjbV9zZXQgPSBwcmNtOwotCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoZGNsayk7Ci0KLQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAvIDIpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOwotCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJaWYgKChwcmNtLT5jbV9jbGtzZWwyX3BsbCAmIE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLKSA9PQotCQkgICAgQ09SRV9DTEtfU1JDX0RQTExfWDIpCi0JCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJZWxzZQotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0KLQkJLyogTVBVIGRpdmlkZXIgKi8KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbXB1LCBNUFVfTU9ELCBDTV9DTEtTRUwpOwotCi0JCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZHNwLAotCQkJCSBPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpOwotCi0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX2dmeCwgR0ZYX01PRCwgQ01fQ0xLU0VMKTsKLQotCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KLQkJdG1wID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9DTEtTRUwxKSAmIE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0s7Ci0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwKLQkJCQkgQ01fQ0xLU0VMMSk7Ci0KLQkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbWRtLAotCQkJCQkgT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKTsKLQotCQkvKiB4MiB0byBlbnRlciBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKCkgKi8KLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCi0JCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFfcGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLS8qCi0gKiBXYWxrIFBSQ00gcmF0ZSB0YWJsZSBhbmQgZmlsbG91dCBjcHVmcmVxIGZyZXFfdGFibGUKLSAqIFhYWCBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhbiBPUFAgbGF5ZXIgaW4gdGhlIG5lYXIgZnV0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGU7Ci0KLXZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKLXsKLQljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQlpbnQgaSA9IDA7Ci0JaW50IHRibF9zeiA9IDA7Ci0KLQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKLQotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogZG9uJ3QgcHV0IGJ5cGFzcyByYXRlcyBpbiB0YWJsZSAqLwotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJY29udGludWU7Ci0KLQkJdGJsX3N6Kys7Ci0JfQotCi0JLyoKLQkgKiBYWFggRW5zdXJlIHRoYXQgd2UncmUgZG9pbmcgd2hhdCBDUFVGcmVxIGV4cGVjdHMgZm9yIHRoaXMgZXJyb3IKLQkgKiBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIG9uZQotCSAqLwotCWlmICh0Ymxfc3ogPT0gMCkgewotCQlwcl93YXJuaW5nKCIlczogbm8gbWF0Y2hpbmcgZW50cmllcyBpbiByYXRlX3RhYmxlXG4iLAotCQkJICAgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogSW5jbHVkZSB0aGUgQ1BVRlJFUV9UQUJMRV9FTkQgdGVybWluYXRvciBlbnRyeSAqLwotCXRibF9zeisrOwotCi0JZnJlcV90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiB0Ymxfc3osCi0JCQkgICAgIEdGUF9BVE9NSUMpOwotCWlmICghZnJlcV90YWJsZSkgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3Qga3phbGxvYyBmcmVxdWVuY3kgdGFibGVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogZG9uJ3QgcHV0IGJ5cGFzcyByYXRlcyBpbiB0YWJsZSAqLwotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJY29udGludWU7Ci0KLQkJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7Ci0JCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gcHJjbS0+bXB1X3NwZWVkIC8gMTAwMDsKLQkJaSsrOwotCX0KLQotCWZyZXFfdGFibGVbaV0uaW5kZXggPSBpOwotCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7Ci0KLQkqdGFibGUgPSAmZnJlcV90YWJsZVswXTsKLX0KLQotdm9pZCBvbWFwMl9jbGtfZXhpdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQotewotCWtmcmVlKGZyZXFfdGFibGUpOwotfQotCi0jZW5kaWYKLQotc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKLQkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAotCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKLQkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCi0JLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCi0JLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAotCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCi0jaWZkZWYJQ09ORklHX0NQVV9GUkVRCi0JLmNsa19pbml0X2NwdWZyZXFfdGFibGUJPSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlLAotCS5jbGtfZXhpdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHUzMiBvbWFwMl9nZXRfYXBsbF9jbGtpbih2b2lkKQotewotCXUzMiBhcGxscywgc3JhdGUgPSAwOwotCi0JYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7Ci0JYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKLQlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7Ci0KLQlpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTlfMk1IWikKLQkJc3JhdGUgPSAxOTIwMDAwMDsKLQllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xM01IWikKLQkJc3JhdGUgPSAxMzAwMDAwMDsKLQllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xMk1IWikKLQkJc3JhdGUgPSAxMjAwMDAwMDsKLQotCXJldHVybiBzcmF0ZTsKLX0KLQotc3RhdGljIHUzMiBvbWFwMl9nZXRfc3lzY2xrZGl2KHZvaWQpCi17Ci0JdTMyIGRpdjsKLQotCWRpdiA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOwotCWRpdiAmPSBPTUFQX1NZU0NMS0RJVl9NQVNLOwotCWRpdiA+Pj0gT01BUF9TWVNDTEtESVZfU0hJRlQ7Ci0KLQlyZXR1cm4gZGl2OwotfQotCi11bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJfZ2V0X2FwbGxfY2xraW4oKSAqIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotfQogCiAvKgogICogU2V0IGNsb2NrcyBmb3IgYnlwYXNzIG1vZGUgZm9yIHJlYm9vdCB0byB3b3JrLgogICovCi12b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQogewogCXUzMiByYXRlOwogCkBAIC01OTAsMzcgKzUwLDI0IEBACiB9CiAKIC8qCi0gKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLgotICogV2UgY2Fubm90IGRvIHRoaXMgZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuCisgKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLiAgV2UgY2Fubm90IGRvIHRoaXMKKyAqIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLiAgWFhYIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAqIGNsb2NrIGNvZGUgYW5kIGhhbmRsZWQgYnkgdGhlIE9QUCBsYXllciBjb2RlIGluIHRoZSBuZWFyIGZ1dHVyZS4KICAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDJ4eHhfY2xrX2FyY2hfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKnZpcnRfcHJjbV9zZXQsICpzeXNfY2ssICpkcGxsX2NrLCAqbXB1X2NrOwotCXVuc2lnbmVkIGxvbmcgc3lzX2NrX3JhdGU7CisJaW50IHJldDsKIAotCWlmICghbXB1cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIDA7CiAKLQl2aXJ0X3ByY21fc2V0ID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOwotCXN5c19jayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCWRwbGxfY2sgPSBjbGtfZ2V0KE5VTEwsICJkcGxsX2NrIik7Ci0JbXB1X2NrID0gY2xrX2dldChOVUxMLCAibXB1X2NrIik7CisJcmV0ID0gb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoInZpcnRfcHJjbV9zZXQiKTsKKwlpZiAoIXJldCkKKwkJb21hcDJfY2xrX3ByaW50X25ld19yYXRlcygic3lzX2NrIiwgImRwbGxfY2siLCAibXB1X2NrIik7CiAKLQlpZiAoY2xrX3NldF9yYXRlKHZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzeXNfY2spOwotCi0JcHJfaW5mbygiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JCShzeXNfY2tfcmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrX3JhdGUgLyAxMDAwMDApICUgMTAsCi0JCShjbGtfZ2V0X3JhdGUoZHBsbF9jaykgLyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZShtcHVfY2spIC8gMTAwMDAwMCkpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KLWFyY2hfaW5pdGNhbGwob21hcDJfY2xrX2FyY2hfaW5pdCk7CisKK2FyY2hfaW5pdGNhbGwob21hcDJ4eHhfY2xrX2FyY2hfaW5pdCk7CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmgKaW5kZXggZTM1ZWZkZS4uNmE2NThiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oCkBAIC0xLDM1ICsxLDM4IEBACiAvKgogICogT01BUDIgY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqLwogCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18yNFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLXzI0WFhfSAorI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0syWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMlhYWF9ICiAKIHVuc2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci11bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Cit1bnNpZ25lZCBsb25nIG9tYXAyeHh4X3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB1bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci11bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiB1bnNpZ25lZCBsb25nIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKHN0cnVjdCBjbGsgKmNsayk7Cit1MzIgb21hcDJ4eHhfZ2V0X2FwbGxfY2xraW4odm9pZCk7Cit1MzIgb21hcDJ4eHhfZ2V0X3N5c2Nsa2Rpdih2b2lkKTsKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKIAotLyogUkVWSVNJVDogVGhlc2Ugc2hvdWxkIGJlIHNldCBkeW5hbWljYWxseSBmb3IgQ09ORklHX01VTFRJX09NQVAyICovCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLSNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQkJT01BUDI0MjBfQ01fUkVHQUREUgotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDIwX1BSQ01fQ0xLT1VUX0NUUkwKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwJT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwKK2ludCBvbWFwMjQyMF9jbGtfaW5pdCh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJCU9NQVAyNDMwX0NNX1JFR0FERFIKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTAlPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMCU9NQVAyNDMwX1BSQ01fQ0xLRU1VTF9DVFJMCisjZGVmaW5lIG9tYXAyNDIwX2Nsa19pbml0KCkJMAogI2VuZGlmCiAKLWV4dGVybiB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmw7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKK2ludCBvbWFwMjQzMF9jbGtfaW5pdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIG9tYXAyNDMwX2Nsa19pbml0KCkJMAorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmwsICpjbV9pZGxlc3RfcGxsOwogCiBleHRlcm4gc3RydWN0IGNsayAqZGNsazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2RjN2NmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4X2RhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMDkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eF9kYXRhLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqICBDb250YWN0czoKLSAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKiAgUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazJ4eHguaCIKLSNpbmNsdWRlICJvcHAyeHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDI0eHggY2xvY2sgdHJlZS4KLSAqCi0gKiBOT1RFOkluIG1hbnkgY2FzZXMgaGVyZSB3ZSBhcmUgYXNzaWduaW5nIGEgJ2RlZmF1bHQnIHBhcmVudC4JSW4gbWFueQotICoJY2FzZXMgdGhlIHBhcmVudCBpcyBzZWxlY3RhYmxlLglUaGUgZ2V0L3NldCBwYXJlbnQgY2FsbHMgd2lsbCBhbHNvCi0gKglzd2l0Y2ggc291cmNlcy4KLSAqCi0gKglNYW55IHNvbWUgY2xvY2tzIHNheSBhbHdheXNfZW5hYmxlZCwgYnV0IHRoZXkgY2FuIGJlIGF1dG8gaWRsZWQgZm9yCi0gKglwb3dlciBzYXZpbmdzLiBUaGV5IHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSB1cG9uIGNsb2NrIHJlcXVlc3QuCi0gKgotICoJU2V2ZXJhbCBzb3VyY2VzIGFyZSBnaXZlbiBpbml0aWFsIHJhdGVzIHdoaWNoIG1heSBiZSB3cm9uZywgdGhpcyB3aWxsCi0gKgliZSBmaXhlZCB1cCBpbiB0aGUgaW5pdCBmdW5jLgotICoKLSAqCVRoaW5ncyBhcmUgYnJvYWRseSBzZXBhcmF0ZWQgYmVsb3cgYnkgY2xvY2sgZG9tYWlucy4gSXQgaXMKLSAqCW5vdGV3b3J0aHkgdGhhdCBtb3N0IHBlcmlmZXJhbHMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gbXVsdGlwbGUgY2xvY2sKLSAqCWRvbWFpbnMuIE1hbnkgZ2V0IHRoZWlyIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgZG9tYWluLCBidXQgZ2V0Ci0gKglmdW5jdGlvbmFsIGNsb2NrcyBmcm9tIGZpeGVkIHNvdXJjZXMgb3Igb3RoZXIgY29yZSBkb21haW4gZGVyaXZlZAotICoJY2xvY2tzLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogQmFzZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMzJrX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzMya19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMzIwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2NrID0gewotCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLX07Ci0KLS8qIFR5cGljYWwgMTIvMTNNSHogaW4gc3RhbmRhbG9uZSBtb2RlLCB3aWxsIGJlIDI2TWh6IGluIGNoYXNzaXMgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAqMjYsIDM4LjQpTUh6ICovCi0JLm5hbWUJCT0gIm9zY19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29zY2NrLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAotfTsKLQotLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCi1zdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLwotCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KLQkubmFtZQkJPSAiYWx0X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLX07Ci0KLS8qCi0gKiBBbmFsb2cgZG9tYWluIHJvb3Qgc291cmNlIGNsb2NrcwotICovCi0KLS8qIGRwbGxfY2ssIGlzIGJyb2tlbiBvdXQgaW4gdG8gc3BlY2lhbCBjYXNlcyB0aHJvdWdoIGNsa3NlbCAqLwotLyogUkVWSVNJVDogUmF0ZSBjaGFuZ2VzIG9uIGRwbGxfY2sgdHJpZ2dlciBhIGZ1bGwgc2V0IGNoYW5nZS4JLi4uCi0gKiBkZWFsIHdpdGggdGhpcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfZGQgPSB7Ci0JLm11bHRfZGl2MV9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5tdWx0X21hc2sJCT0gT01BUDI0WFhfRFBMTF9NVUxUX01BU0ssCi0JLmRpdjFfbWFzawkJPSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLLAotCS5jbGtfYnlwYXNzCQk9ICZzeXNfY2ssCi0JLmNsa19yZWYJCT0gJnN5c19jaywKLQkuY29udHJvbF9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX21hc2sJCT0gT01BUDI0WFhfRU5fRFBMTF9NQVNLLAotCS5tYXhfbXVsdGlwbGllcgkJPSAxMDI0LAotCS5taW5fZGl2aWRlcgkJPSAxLAotCS5tYXhfZGl2aWRlcgkJPSAxNiwKLQkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi0vKgotICogWFhYIENhbm5vdCBhZGQgcm91bmRfcmF0ZSBoZXJlIHlldCwgYXMgdGhpcyBpcyBzdGlsbCBhIGNvbXBvc2l0ZSBjbG9jaywKLSAqIG5vdCBqdXN0IGEgRFBMTAotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLwotCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKLQkubmFtZQkJPSAiYXBsbDk2X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfYXBsbDk2LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkucmF0ZQkJPSA5NjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9PTl9JTklULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzk2TV9QTExfU0hJRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7Ci0JLm5hbWUJCT0gImFwbGw1NF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2FwbGw1NCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAotfTsKLQotLyoKLSAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKLSAqLwotCi0vKiBmdW5jXzU0bV9jayAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FwbGw1NF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzU0bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDU0X2NrLCAucmF0ZXMgPSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXMsIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywJLnJhdGVzID0gZnVuY181NG1fYWx0X3JhdGVzLCB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY181NG1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIGZ1bmNfOTZtX2NrICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FwbGw5Nl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hcGxsOTZfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoZSBwYXJlbnQgb2YgdGhpcyBjbG9jayBpcyBub3Qgc2VsZWN0YWJsZSBvbiAyNDIwLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZhcGxsOTZfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF85Nk1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY185Nm1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogZnVuY180OG1fY2sgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY180OG1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCi0JLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY18xMm1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5maXhlZF9kaXYJPSA0LAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotLyogU2VjdXJlIHRpbWVyLCBvbmx5IGF2YWlsYWJsZSBpbiBzZWN1cmUgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gImNrX3dkdDFfb3NjIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJm9zY19jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoZSBjb21tb25fY2xrb3V0KiBjbGtzZWxfcmF0ZSBzdHJ1Y3RzIGFyZSBjb21tb24gdG8KLSAqIHN5c19jbGtvdXQsIHN5c19jbGtvdXRfc3JjLCBzeXNfY2xrb3V0MiwgYW5kIHN5c19jbGtvdXQyX3NyYy4KLSAqIHN5c19jbGtvdXQyXyogYXJlIDI0MjAtb25seSwgc28gdGhlCi0gKiBjbGtzZWxfcmF0ZSBmbGFncyBmaWVsZHMgYXJlIGluYWNjdXJhdGUgZm9yIHRob3NlIGNsb2Nrcy4gVGhpcyBpcwotICogaGFybWxlc3Mgc2luY2UgYWNjZXNzIHRvIHRob3NlIGNsb2NrcyBhcmUgZ2F0ZWQgYnkgdGhlIHN0cnVjdCBjbGsKLSAqIGZsYWdzIGZpZWxkcywgd2hpY2ggbWFyayB0aGVtIGFzIDI0MjAtb25seS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZnVuY181NG1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzU0bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dF9zcmMgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXRfc3JjIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTEtPVVRfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLT1VUX1NPVVJDRV9NQVNLLAotCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2Nsa291dF9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDJfc3JjID0gewotCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9TT1VSQ0VfTUFTSywKLQkuY2xrc2VsCQk9IGNvbW1vbl9jbGtvdXRfc3JjX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtvdXQyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0Ml9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzeXNfY2xrb3V0Ml9zcmMsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0gewotCS5uYW1lCQk9ICJlbXVsX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0KLX07Ci0KLS8qCi0gKiBNUFUgY2xvY2sgZG9tYWluCi0gKglDbG9ja3M6Ci0gKgkJTVBVX0ZDTEssIE1QVV9JQ0xLCi0gKgkJSU5UX01fRkNMSywgSU5UX01fSV9DTEsKLSAqCi0gKiAtIEluZGl2aWR1YWwgY2xvY2tzIGFyZSBoYXJkd2FyZSBtYW5hZ2VkLgotICogLSBCYXNlIGRpdmlkZXIgY29tZXMgZnJvbTogQ01fQ0xLU0VMX01QVQotICoKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtcHVfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbXB1X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtcHVfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLwotCS5uYW1lCQk9ICJtcHVfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKLQkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogRFNQICgyNDMwLUlWQTIuMSkgKDI0MjAtVU1BK0lWQTEpIGNsb2NrIGRvbWFpbgotICogQ2xvY2tzOgotICoJMjQzMDogSVZBMi4xX0ZDTEsgKHJlYWxseSBqdXN0IERTUF9GQ0xLKSwgSVZBMi4xX0lDTEsKLSAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAotICoKLSAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKLSAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCi0gKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKLSAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAiZHNwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIERTUCBpbnRlcmZhY2UgY2xvY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2lyYXRlX2lja19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHNwX2ZjaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQkgICAgICA9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIDI0MjAgb25seSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLwotfTsKLQotLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKLQkubmFtZQkJPSAiaXZhMl8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi19OwotCi0vKgotICogVGhlIElWQTEgaXMgYW4gQVJNNyBjb3JlIG9uIHRoZSAyNDIwIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aAotICogdGhlIEM1NHgsIGJ1dCB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlIERTUCBwb3dlcmRvbWFpbi4gIERvZXMgbm90Ci0gKiBleGlzdCBvbiBsYXRlciBPTUFQcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX2lmY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ09ORklHX1BBUlRJQ0lQQU5UIHwgREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9NUFVfU0hJRlQsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0vKgotICogTDMgY2xvY2sgZG9tYWluCi0gKiBMMyBjbG9ja3MgYXJlIHVzZWQgZm9yIGJvdGggaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsIGNsb2NrcyB0bwotICogbXVsdGlwbGUgZW50aXRpZXMuIFNvbWUgb2YgdGhlc2UgY2xvY2tzIGFyZSBjb21wbGV0ZWx5IG1hbmFnZWQKLSAqIGJ5IGhhcmR3YXJlLCBhbmQgc29tZSBvdGhlcnMgYWxsb3cgc29mdHdhcmUgY29udHJvbC4gSGFyZHdhcmUKLSAqIG1hbmFnZWQgb25lcyBnZW5lcmFsIGFyZSBiYXNlZCBvbiBkaXJlY3RseSBDTEtfUkVRIHNpZ25hbHMgYW5kCi0gKiB2YXJpb3VzIGF1dG8gaWRsZSBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uYWwgc3BlYyBzZXRzIG1hbnkgb2YgdGhlc2UKLSAqIGFzICd0aWUtaGlnaCcgZm9yIHRoZWlyIGVuYWJsZXMuCi0gKgotICogSS1DTE9DS1M6Ci0gKglMMy1JbnRlcmNvbm5lY3QsIFNNUywgR1BNQywgU0RSQywgT0NNX1JBTSwgT0NNX1JPTSwgU0RNQQotICoJQ0FNLCBIUy1VU0IuCi0gKiBGLUNMT0NLCi0gKglTU0kuCi0gKgotICogR1BNQyBtZW1vcmllcyBhbmQgU0RSQyBoYXZlIHRpbWluZyBhbmQgY2xvY2sgc2Vuc2l0aXZlIHJlZ2lzdGVycyB3aGljaAotICogbWF5IHZlcnkgd2VsbCBuZWVkIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjbG9jayBjaGFuZ2VzLiBDdXJyZW50bHkgZm9yIGxvdwotICogb3BlcmF0aW5nIHBvaW50cywgdGhlc2UgYXJlIHRha2VuIGNhcmUgb2YgaW4gc2xlZXAuUy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb3JlX2wzX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9sM19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gY29yZV9sM19jb3JlX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCi0JLm5hbWUJCT0gImNvcmVfbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKLQkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogdXNiX2w0X2ljayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IHVzYl9sNF9pY2tfY29yZV9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLS8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwotCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1VTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2lja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KLSAqCi0gKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCi0gKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KLSAqIHRoaXMgZG9tYWluLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gImw0X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCi0JLmNsa3NlbAkJPSBsNF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKLSAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKLSAqIGRvbWFpbi4KLSAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSwotICoKLSAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0gewotCS5uYW1lCQk9ICJzc2lfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qCi0gKiBQcmVzdW1hYmx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgU1NJX0lDTEsuCi0gKiBUUk0gY29udHJhZGljdHMgaXRzZWxmIG9uIHdoYXQgY2xvY2tkb21haW4gU1NJX0lDTEsgaXMgaW4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLQotLyoKLSAqIEdGWCBjbG9jayBkb21haW4KLSAqCUNsb2NrczoKLSAqIEdGWF9GQ0xLLCBHRlhfSUNMSwotICogR0ZYX0NHMSgyZCksIEdGWF9DRzIoM2QpCi0gKgotICogR0ZYX0ZDTEsgcnVucyBmcm9tIEwzLCBhbmQgaXMgZGl2aWRlZCBieSAoMSwyLDMsNCkKLSAqIFRoZSAyZCBhbmQgM2QgY2xvY2tzIHJ1biBhdCBhIGhhcmR3YXJlIGRldGVybWluZWQKLSAqIGRpdmlkZWQgdmFsdWUgb2YgZmNsay4KLSAqCi0gKi8KLS8qIFhYWCBSRVZJU0lUOiBHRlggY2xvY2sgaXMgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsIG5vPyBkb3VibGVjaGVjay4gKi8KLQotLyogVGhpcyBjbGtzZWwgc3RydWN0IGlzIHNoYXJlZCBiZXR3ZWVuIGdmeF8zZF9mY2sgYW5kIGdmeF8yZF9mY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGdmeF9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGdmeF9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF8zZF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKLQkuY2xrc2VsCQk9IGdmeF9mY2tfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogTW9kZW0gY2xvY2sgZG9tYWluICgyNDMwKQotICoJQ0xPQ0tTOgotICoJCU1ETV9PU0NfQ0xLCi0gKgkJTURNX0lDTEsKLSAqIFRoZXNlIGNsb2NrcyBhcmUgdXNhYmxlIGluIGNoYXNzaXMgbW9kZSBvbmx5LgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1kbV9pY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1kbV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1kbV9pY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ljayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gIm1kbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0ssCi0JLmNsa3NlbAkJPSBtZG1faWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9vc2NfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmb3NjX2NrLAotCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIERTUyBjbG9jayBkb21haW4KLSAqIENMT0NLczoKLSAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKLSAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSwotICoKLSAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgotICovCi0vKiBYWFggQWRkIFJBVEVfTk9UX1ZBTElEQVRFRCAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczFfZmNrX3N5c19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgLnJhdGVzID0gZHNzMV9mY2tfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRzczFfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKLQkubmFtZQkJPSAiZHNzMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzFfTUFTSywKLQkuY2xrc2VsCQk9IGRzczFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCi0JLm5hbWUJCT0gImRzczJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MyX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0ssCi0JLmNsa3NlbAkJPSBkc3MyX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwotCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVFZfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qCi0gKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgotICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKLSAqIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhbiBMNCBpbnRlcmZhY2UgcGFyZW50LCBhbmQgbWF5IGhhdmUgbXVsdGlwbGUKLSAqIGZ1bmN0aW9uYWwgY2xvY2sgcGFyZW50cy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfYWx0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcDI0eHhfZ3B0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZmdW5jXzMya19jaywgLnJhdGVzID0gZ3B0XzMya19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZhbHRfY2ssCSAgLnJhdGVzID0gZ3B0X2FsdF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDFfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewotCS5uYW1lCQk9ICJncHQzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0gewotCS5uYW1lCQk9ICJncHQ0X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0NV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0gewotCS5uYW1lCQk9ICJncHQ2X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0Nl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0gewotCS5uYW1lCQk9ICJncHQ3X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0OF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0gewotCS5uYW1lCQk9ICJncHQ5X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0OV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEwX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMF9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEyX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7Ci0JLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKLQkubmFtZQkJPSAiaWNyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQotICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50Ci0gKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewotCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAid2R0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0gewotCS5uYW1lCQk9ICJtc3Byb19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0gewotCS5uYW1lCQk9ICJtbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX01NQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKLQkubmFtZQkJPSAiZmFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7Ci0JLm5hbWUJCT0gImZhY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlYWNfaWNrID0gewotCS5uYW1lCQk9ICJlYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKLQkubmFtZQkJPSAiZWFjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9FQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7Ci0JLm5hbWUJCT0gImhkcV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewotCS5uYW1lCQk9ICJoZHFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyNDMwX2kyY2hzX3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewotCS5uYW1lCQk9ICJncG1jX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNkbWFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewotCS5uYW1lCQk9ICJzZG1hX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAxOCwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHZseW5xX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IHZseW5xX2Zja185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSB2bHlucV9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfZmNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9WTFlOUV9NQVNLLAotCS5jbGtzZWwJCT0gdmx5bnFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fU0RSQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInBrYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0gewotCS5uYW1lCQk9ICJ1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Joc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgotICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKLSAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KLSAqCi0gKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAotICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAotICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycwotICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAotICogdGhlIGJ1cy4KLSAqCi0gKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAotICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKLQkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLwotCS5yZWNhbGMJCT0gJm9tYXAyX3RhYmxlX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCi0JLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0KLS8qCi0gKiBjbGtkZXYgaW50ZWdyYXRpb24KLSAqLwotCi1zdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXAyNHh4X2Nsa3NbXSA9IHsKLQkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfMzJrX2NrIiwJJmZ1bmNfMzJrX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2NrIiwgJnNlY3VyZV8zMmtfY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsOTZfY2siLAkmYXBsbDk2X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZnVuY18xMm1fY2siLAkmZnVuY18xMm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dCIsCSZzeXNfY2xrb3V0LAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0Ml9zcmMiLCAmc3lzX2Nsa291dDJfc3JjLCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVtdWxfY2siLAkmZW11bF9jaywJQ0tfMjQyWCksCi0JLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImRzcF9pY2siLAkmZHNwX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCi0JLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJnZnhfaWNrIiwJJmdmeF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJtZG1faWNrIiwJJm1kbV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkibWRtX29zY19jayIsCSZtZG1fb3NjX2NrLAlDS18yNDNYKSwKLQkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLwotCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDMgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfZmNrIiwJJnNzaV9zc3Jfc3N0X2ZjaywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDQgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KLQlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQzWCB8IENLXzI0MlgpLAotCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KLQlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJpY2siLAkmbWNzcGkxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ljayIsCSZ1YXJ0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ljayIsCSZncGlvc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmbXB1X3dkdF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJvbWFwY3RybF9pY2siLAkmb21hcGN0cmxfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAyNHh4Y2FtIiwgImljayIsCSZjYW1faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ3ZHQ0X2ZjayIsCSZ3ZHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJm1tY19pY2ssCUNLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tY19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkcmNfaWNrIiwJJnNkcmNfaWNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFlc19pY2siLAkmYWVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmdXNiaHNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImljayIsCSZtbWNoczFfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImljayIsCSZtbWNoczJfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImZjayIsCSZtbWNoczJfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzVfZmNrIiwJJmdwaW81X2ZjaywJQ0tfMjQzWCksCi0JQ0xLKE5VTEwsCSJtZG1faW50Y19pY2siLAkmbWRtX2ludGNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgIm1tY2hzZGJfZmNrIiwJJm1tY2hzZGIxX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJtbWNoc2RiX2ZjayIsIAkmbW1jaHNkYjJfZmNrLAlDS18yNDNYKSwKLX07Ci0KLS8qCi0gKiBpbml0IGNvZGUKLSAqLwotCi1pbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCi17Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXN0cnVjdCBvbWFwX2NsayAqYzsKLQl1MzIgY2xrcmF0ZTsKLQl1MTYgY3B1X2Nsa2ZsZzsKLQotCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewotCQlwcmNtX2Nsa3NyY19jdHJsID0gT01BUDI0MjBfUFJDTV9DTEtTUkNfQ1RSTDsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7Ci0JCWNwdV9jbGtmbGcgPSBDS18yNDJYOwotCQlyYXRlX3RhYmxlID0gb21hcDI0MjBfcmF0ZV90YWJsZTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCXByY21fY2xrc3JjX2N0cmwgPSBPTUFQMjQzMF9QUkNNX0NMS1NSQ19DVFJMOwotCQljcHVfbWFzayA9IFJBVEVfSU5fMjQzWDsKLQkJY3B1X2Nsa2ZsZyA9IENLXzI0M1g7Ci0JCXJhdGVfdGFibGUgPSBvbWFwMjQzMF9yYXRlX3RhYmxlOwotCX0KLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQotCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQotCQljbGtfcHJlaW5pdChjLT5say5jbGspOwotCi0Jb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKLQlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKLQlzeXNfY2sucmF0ZSA9IG9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOwotCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOwotCi0JZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCi0JCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7Ci0JCQljbGtkZXZfYWRkKCZjLT5sayk7Ci0JCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKLQkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7Ci0JCX0KLQotCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwotCWNsa3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSgmZHBsbF9jayk7Ci0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKLQkJCWJyZWFrOwotCX0KLQljdXJyX3ByY21fc2V0ID0gcHJjbTsKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgotCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAotCSAgICAgICAoc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKHN5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAotCSAgICAgICAoZHBsbF9jay5yYXRlIC8gMTAwMDAwMCksIChtcHVfY2sucmF0ZSAvIDEwMDAwMDApKSA7Ci0KLQkvKgotCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycwotCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5Ci0JICovCi0JY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOwotCi0JLyogQXZvaWQgc2xlZXBpbmcgc2xlZXBpbmcgZHVyaW5nIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKSAqLwotCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7Ci0Jc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCWRjbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsX2NrIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZDQyMTdiOS4uNmZlYmQ1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0yLDEzICsyLDE0IEBACiAgKiBPTUFQMy1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICogVGVzdGluZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKiBQYXVsIFdhbG1zbGV5CisgKiBKb3VuaSBIw7ZnYW5kZXIKICAqCiAgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQotICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1LAorICogUnVzc2VsbCBLaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNiw0OSArMTcsMjMgQEAKICAqLwogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLSNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMzR4eC5oIgotI2luY2x1ZGUgInNkcmMuaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAotI2RlZmluZSBDWUNMRVNfUEVSX01IWgkJCTEwMDAwMDAKLQotLyoKLSAqIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1Q6IFVTQkhPU1QgYW5kIFVTQlRMTCBhcmUgdGhlIG9ubHkgY2xvY2tzCi0gKiB0aGF0IGFyZSBzb3VyY2VkIGJ5IERQTEw1LCBhbmQgYm90aCBvZiB0aGVzZSByZXF1aXJlIHRoaXMgY2xvY2sKLSAqIHRvIGJlIGF0IDEyMCBNSHogZm9yIHByb3BlciBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVAkJMTIwMDAwMDAwCi0KLS8qIG5lZWRlZCBieSBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoKSAqLwotc3RydWN0IGNsayAqc2RyY19pY2tfcCwgKmFybV9mY2tfcDsKLQogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciBTU0kKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCiAgKiBAaWRsZXN0X3JlZzogdm9pZCBfX2lvbWVtICoqIHRvIHN0b3JlIENNX0lETEVTVCByZWcgYWRkcmVzcyBpbnRvCiAgKiBAaWRsZXN0X2JpdDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgYml0IHNoaWZ0IGludG8KKyAqIEBpZGxlc3RfdmFsOiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBpbmRpY2F0b3IKICAqCiAgKiBUaGUgT01BUDM0MzBFUzIgU1NJIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50IHNoaWZ0CiAgKiBmcm9tIHRoZSBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYQpAQCAtNjYsMTMgKzQxLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIG9tYXAzNDMwZXMyX2Nsa19zc2lfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAogCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQkJICAgIHU4ICppZGxlc3RfYml0KQorCQkJCQkgICAgdTggKmlkbGVzdF9iaXQsCisJCQkJCSAgICB1OCAqaWRsZXN0X3ZhbCkKIHsKIAl1MzIgcjsKIAogCXIgPSAoKChfX2ZvcmNlIHUzMiljbGstPmVuYWJsZV9yZWcgJiB+MHhmMCkgfCAweDIwKTsKIAkqaWRsZXN0X3JlZyA9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKXI7CiAJKmlkbGVzdF9iaXQgPSBPTUFQMzQzMEVTMl9TVF9TU0lfSURMRV9TSElGVDsKKwkqaWRsZXN0X3ZhbCA9IE9NQVAzNFhYX0NNX0lETEVTVF9WQUw7CiB9CiAKIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0ID0gewpAQCAtODcsNiArNjQsNyBAQAogICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKICAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KICAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgogICoKICAqIFNvbWUgT01BUCBtb2R1bGVzIG9uIE9NQVAzIEVTMisgY2hpcHMgaGF2ZSBib3RoIGluaXRpYXRvciBhbmQKICAqIHRhcmdldCBJRExFU1QgYml0cy4gIEZvciBvdXIgcHVycG9zZXMsIHdlIGFyZSBjb25jZXJuZWQgd2l0aCB0aGUKQEAgLTk3LDcgKzc1LDggQEAKICAqLwogc3RhdGljIHZvaWQgb21hcDM0MzBlczJfY2xrX2Rzc191c2Job3N0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKIAkJCQkJCSAgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkJICAgIHU4ICppZGxlc3RfYml0KQorCQkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkJICAgIHU4ICppZGxlc3RfdmFsKQogewogCXUzMiByOwogCkBAIC0xMDUsNiArODQsNyBAQAogCSppZGxlc3RfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcjsKIAkvKiBVU0JIT1NUX0lETEUgaGFzIHNhbWUgc2hpZnQgKi8KIAkqaWRsZXN0X2JpdCA9IE9NQVAzNDMwRVMyX1NUX0RTU19JRExFX1NISUZUOworCSppZGxlc3RfdmFsID0gT01BUDM0WFhfQ01fSURMRVNUX1ZBTDsKIH0KIAogY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCA9IHsKQEAgLTExOSw2ICs5OSw3IEBACiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAogICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bwogICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCisgKiBAaWRsZXN0X3ZhbDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgaW5kaWNhdG9yCiAgKgogICogVGhlIE9NQVAzNDMwRVMyIEhTT1RHVVNCIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50CiAgKiBzaGlmdCBmcm9tIHRoZSBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYQpAQCAtMTI2LDEzICsxMDcsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgb21hcDM0MzBlczJfY2xrX2hzb3RndXNiX2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKIAkJCQkJCSB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkJIHU4ICppZGxlc3RfYml0KQorCQkJCQkJIHU4ICppZGxlc3RfYml0LAorCQkJCQkJIHU4ICppZGxlc3RfdmFsKQogewogCXUzMiByOwogCiAJciA9ICgoKF9fZm9yY2UgdTMyKWNsay0+ZW5hYmxlX3JlZyAmIH4weGYwKSB8IDB4MjApOwogCSppZGxlc3RfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcjsKIAkqaWRsZXN0X2JpdCA9IE9NQVAzNDMwRVMyX1NUX0hTT1RHVVNCX0lETEVfU0hJRlQ7CisJKmlkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOwogfQogCiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9oc290Z3VzYl93YWl0ID0gewpAQCAtMTQxLDIxMyArMTI0LDMgQEAKIAkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfaHNvdGd1c2JfZmluZF9pZGxlc3QsCiAJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCiB9OwotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzID0gewotCS5lbmFibGUJCT0gb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAotfTsKLQotaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qCi0JICogQWNjb3JkaW5nIHRvIHRoZSAxMi01IENEUCBjb2RlIGZyb20gVEksICJMaW1pdGF0aW9uIDIuNSIKLQkgKiBvbiAzNDMwRVMxIHByZXZlbnRzIHVzIGZyb20gY2hhbmdpbmcgRFBMTCBtdWx0aXBsaWVycyBvciBkaXZpZGVycwotCSAqIG9uIERQTEw0LgotCSAqLwotCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvICIKLQkJICAgICAgICJzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOwotfQotCi0KLS8qCi0gKiBDT1JFIERQTEwgKERQTEwzKSByYXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucwotICoKLSAqIFRoZXNlIGNhbGwgaW50byBTUkFNIGNvZGUgdG8gZG8gdGhlIGFjdHVhbCBDTSB3cml0ZXMsIHNpbmNlIHRoZSBTRFJBTQotICogaXMgY2xvY2tlZCBmcm9tIERQTEwzLgotICovCi0KLS8qKgotICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0IENPUkUgRFBMTCBNMiBkaXZpZGVyCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCi0gKgotICogUHJvZ3JhbSB0aGUgRFBMTCBNMiBkaXZpZGVyIHdpdGggdGhlIHJvdW5kZWQgdGFyZ2V0IHJhdGUuICBSZXR1cm5zCi0gKiAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgotICovCi1pbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBuZXdfZGl2ID0gMDsKLQl1MzIgdW5sb2NrX2RsbCA9IDA7Ci0JdTMyIGM7Ci0JdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlLCBfbXB1cmF0ZTsKLQlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczA7Ci0Jc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxOwotCWludCByZXQ7Ci0KLQlpZiAoIWNsayB8fCAhcmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7Ci0JaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNkcmNyYXRlID0gc2RyY19pY2tfcC0+cmF0ZTsKLQlpZiAocmF0ZSA+IGNsay0+cmF0ZSkKLQkJc2RyY3JhdGUgPDw9ICgocmF0ZSAvIGNsay0+cmF0ZSkgPj4gMSk7Ci0JZWxzZQotCQlzZHJjcmF0ZSA+Pj0gKChjbGstPnJhdGUgLyByYXRlKSA+PiAxKTsKLQotCXJldCA9IG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyhzZHJjcmF0ZSwgJnNkcmNfY3MwLCAmc2RyY19jczEpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNkcmNyYXRlIDwgTUlOX1NEUkNfRExMX0xPQ0tfRlJFUSkgewotCQlwcl9kZWJ1ZygiY2xvY2s6IHdpbGwgdW5sb2NrIFNEUkMgRExMXG4iKTsKLQkJdW5sb2NrX2RsbCA9IDE7Ci0JfQotCi0JLyoKLQkgKiBYWFggVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiB0aGUgQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzCi0JICovCi0JX21wdXJhdGUgPSBhcm1fZmNrX3AtPnJhdGUgLyBDWUNMRVNfUEVSX01IWjsKLQljID0gKF9tcHVyYXRlIDw8IFNEUkNfTVBVUkFURV9TQ0FMRSkgPj4gU0RSQ19NUFVSQVRFX0JBU0VfU0hJRlQ7Ci0JYyArPSAxOyAgLyogZm9yIHNhZmV0eSAqLwotCWMgKj0gU0RSQ19NUFVSQVRFX0xPT1BTOwotCWMgPj49IFNEUkNfTVBVUkFURV9TQ0FMRTsKLQlpZiAoYyA9PSAwKQotCQljID0gMTsKLQotCXByX2RlYnVnKCJjbG9jazogY2hhbmdpbmcgQ09SRSBEUExMIHJhdGUgZnJvbSAlbHUgdG8gJWx1XG4iLCBjbGstPnJhdGUsCi0JCSB2YWxpZHJhdGUpOwotCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzAgdGltaW5nIHBhcmFtcyB1c2VkOiIKLQkJICIgUkZSICUwOHggQ1RSTEEgJTA4eCBDVFJMQiAlMDh4IE1SICUwOHhcbiIsCi0JCSBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKLQkJIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yKTsKLQlpZiAoc2RyY19jczEpCi0JCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzEgdGltaW5nIHBhcmFtcyB1c2VkOiAiCi0JCSAiIFJGUiAlMDh4IENUUkxBICUwOHggQ1RSTEIgJTA4eCBNUiAlMDh4XG4iLAotCQkgc2RyY19jczEtPnJmcl9jdHJsLCBzZHJjX2NzMS0+YWN0aW1fY3RybGEsCi0JCSBzZHJjX2NzMS0+YWN0aW1fY3RybGIsIHNkcmNfY3MxLT5tcik7Ci0KLQlpZiAoc2RyY19jczEpCi0JCW9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwoCi0JCQkJICBuZXdfZGl2LCB1bmxvY2tfZGxsLCBjLCByYXRlID4gY2xrLT5yYXRlLAotCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCi0JCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKLQkJCQkgIHNkcmNfY3MxLT5yZnJfY3RybCwgc2RyY19jczEtPmFjdGltX2N0cmxhLAotCQkJCSAgc2RyY19jczEtPmFjdGltX2N0cmxiLCBzZHJjX2NzMS0+bXIpOwotCWVsc2UKLQkJb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCgKLQkJCQkgIG5ld19kaXYsIHVubG9ja19kbGwsIGMsIHJhdGUgPiBjbGstPnJhdGUsCi0JCQkJICBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKLQkJCQkgIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yLAotCQkJCSAgMCwgMCwgMCwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KLQotLyoKLSAqIEFzIGl0IGlzIHN0cnVjdHVyZWQgbm93LCB0aGlzIHdpbGwgcHJldmVudCBhbiBPTUFQMi8zIG11bHRpYm9vdAotICoga2VybmVsIGZyb20gY29tcGlsaW5nLiAgVGhpcyB3aWxsIG5lZWQgZnVydGhlciBhdHRlbnRpb24uCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCi1zdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewotCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCi0JLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAotCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKLQkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKLQkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCi0JLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKLX07Ci0KLS8qCi0gKiBTZXQgY2xvY2tzIGZvciBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsuCi0gKi8KLXZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQotewotCS8qIFJFVklTSVQ6IE5vdCByZWFkeSBmb3IgMzQzeCAqLwotI2lmIDAKLQl1MzIgcmF0ZTsKLQotCWlmICh2Y2xrID09IE5VTEwgfHwgc2NsayA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsKLSNlbmRpZgotfQotCi12b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCi17Ci0Jc3RydWN0IGNsayAqZHBsbDVfY2xrOwotCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKLQotCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7Ci0JY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7Ci0JY2xrX2VuYWJsZShkcGxsNV9jbGspOwotCi0JLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KLQlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKLQotCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCi0JZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKLQljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7Ci0JY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7Ci0KLQljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOwotCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7Ci0JcmV0dXJuOwotfQotCi0vKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCi0KLS8qCi0gKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLgotICogV2UgY2Fubm90IGRvIHRoaXMgZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2Nsa19hcmNoX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgY2xrICpvc2Nfc3lzX2NrLCAqZHBsbDFfY2ssICphcm1fZmNrLCAqY29yZV9jazsKLQl1bnNpZ25lZCBsb25nIG9zY19zeXNfcmF0ZTsKLQotCWlmICghbXB1cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBYWFggdGVzdCB0aGVzZSBmb3Igc3VjY2VzcyAqLwotCWRwbGwxX2NrID0gY2xrX2dldChOVUxMLCAiZHBsbDFfY2siKTsKLQlhcm1fZmNrID0gY2xrX2dldChOVUxMLCAiYXJtX2ZjayIpOwotCWNvcmVfY2sgPSBjbGtfZ2V0KE5VTEwsICJjb3JlX2NrIik7Ci0Jb3NjX3N5c19jayA9IGNsa19nZXQoTlVMTCwgIm9zY19zeXNfY2siKTsKLQotCS8qIFJFVklTSVQ6IG5vdCB5ZXQgcmVhZHkgZm9yIDM0M3ggKi8KLQlpZiAoY2xrX3NldF9yYXRlKGRwbGwxX2NrLCBtcHVyYXRlKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIqKiogVW5hYmxlIHRvIHNldCBNUFUgcmF0ZVxuIik7Ci0KLQlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwotCi0Jb3NjX3N5c19yYXRlID0gY2xrX2dldF9yYXRlKG9zY19zeXNfY2spOwotCi0JcHJfaW5mbygiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvQ29yZS9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JCShvc2Nfc3lzX3JhdGUgLyAxMDAwMDAwKSwKLQkJKChvc2Nfc3lzX3JhdGUgLyAxMDAwMDApICUgMTApLAotCQkoY2xrX2dldF9yYXRlKGNvcmVfY2spIC8gMTAwMDAwMCksCi0JCShjbGtfZ2V0X3JhdGUoYXJtX2ZjaykgLyAxMDAwMDAwKSk7Ci0KLQljYWxpYnJhdGVfZGVsYXkoKTsKLQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChvbWFwMl9jbGtfYXJjaF9pbml0KTsKLQotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCA5YTJjMDdlLi42MjhlOGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTEsMjQgKzEsMTUgQEAKIC8qCi0gKiBPTUFQMyBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKKyAqIE9NQVAzNHh4IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKi8KIAotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfMzRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18zNFhYX0gKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzM0WFhfSAogCi1pbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci12b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpOwotCi1leHRlcm4gc3RydWN0IGNsayAqc2RyY19pY2tfcDsKLWV4dGVybiBzdHJ1Y3QgY2xrICphcm1fZmNrX3A7Ci0KLS8qIE9NQVAzNHh4LXNwZWNpZmljIGNsa29wcyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0OwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQ7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5MzBlMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eF9kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjg5ICswLDAgQEAKLS8qCi0gKiBPTUFQMyBjbG9jayBkYXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKiBXaXRoIG1hbnkgZGV2aWNlIGNsb2NrIGZpeGVzIGJ5IEtldmluIEhpbG1hbiBhbmQgSm91bmkgSMO2Z2FuZGVyCi0gKiBEUExMIGJ5cGFzcyBjbG9jayBzdXBwb3J0IGFkZGVkIGJ5IFJvbWFuIFRlcmVzaG9ua292Ci0gKgotICovCi0KLS8qCi0gKiBWaXJ0dWFsIGNsb2NrcyBhcmUgaW50cm9kdWNlZCBhcyBjb252ZW5pZW50IHRvb2xzLgotICogVGhleSBhcmUgc291cmNlcyBmb3Igb3RoZXIgY2xvY2tzIGFuZCBub3Qgc3VwcG9zZWQKLSAqIHRvIGJlIHJlcXVlc3RlZCBmcm9tIGRyaXZlcnMgZGlyZWN0bHkuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazM0eHguaCIKLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKLQotLyoKLSAqIGNsb2NrcwotICovCi0KLSNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQlPTUFQMzRYWF9DTV9SRUdBRERSCi0KLS8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KLSNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OAotI2RlZmluZSBPTUFQM19NQVhfRFBMTF9ESVYJCTEyOAotCi0vKgotICogRFBMTDEgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIE1QVS4KLSAqIERQTEwyIHN1cHBsaWVzIGNsb2NrIHRvIHRoZSBJVkEyLgotICogRFBMTDMgc3VwcGxpZXMgQ09SRSBkb21haW4gY2xvY2tzLgotICogRFBMTDQgc3VwcGxpZXMgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCi0gKi8KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIERQTEwgYnlwYXNzIGNsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrOwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrOwotCi0vKiBQUk0gQ0xPQ0tTICovCi0KLS8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi0vKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xM21fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTY4MDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAxOTIwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMjYwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzODQwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTNtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE2XzhtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE5XzJtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzI2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18zOF80bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9zY19zeXNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnZpcnRfMTJtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTJtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTNtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTNtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTZfOG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMTZfOG1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmdmlydF8xOV8ybV9jaywgLnJhdGVzID0gb3NjX3N5c18xOV8ybV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzI2bV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzI2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzM4XzRtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzM4XzRtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotLyogT3NjaWxsYXRvciBjbG9jayAqLwotLyogMTIsIDEzLCAxNi44LCAxOS4yLCAyNiwgb3IgMzguNCBNSHogKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19zeXNfY2sgPSB7Ci0JLm5hbWUJCT0gIm9zY19zeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU0VMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NZU19DTEtJTl9TRUxfTUFTSywKLQkuY2xrc2VsCQk9IG9zY19zeXNfY2xrc2VsLAotCS8qIFJFVklTSVQ6IGRlYWwgd2l0aCBhdXRvZXh0Y2xrbW9kZT8gKi8KLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb3NjX3N5c19jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogTGF0ZW5jeTogdGhpcyBjbG9jayBpcyBvbmx5IGVuYWJsZWQgYWZ0ZXIgUFJNX0NMS1NFVFVQLlNFVFVQX1RJTUUgKi8KLS8qIEZlZWRzIERQTExzIC0gZGl2aWRlZCBmaXJzdCBieSBQUk1fQ0xLU1JDX0NUUkwuU1lTQ0xLRElWPyAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewotCS5uYW1lCQk9ICJzeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX1NZU0NMS0RJVl9NQVNLLAotCS5jbGtzZWwJCT0gc3lzX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2FsdGNsayA9IHsKLQkubmFtZQkJPSAic3lzX2FsdGNsayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi19OwotCi0vKiBPcHRpb25hbCBleHRlcm5hbCBjbG9jayBpbnB1dCBmb3Igc29tZSBNY0JTUHMgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwX2Nsa3MgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2Nsa3MiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotfTsKLQotLyogUFJNIEVYVEVSTkFMIENMT0NLIE9VVFBVVCAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MSA9IHsKLQkubmFtZQkJPSAic3lzX2Nsa291dDEiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVRfRU5fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIERQTExTICovCi0KLS8qIENNIENMT0NLUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjE2X2RwbGxfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLS8qIERQTEwxICovCi0vKiBNUFUgY2xvY2sgc291cmNlICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMV9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCi0JLm11bHRfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSywKLQkuZGl2MV9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDFfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLLAotCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCi0JLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fTVBVX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKLQkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZULAotCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCi0gKiBEUExMIGlzbid0IGJ5cGFzc2VkLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDFfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwxX2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi0vKiBPbiBEUExMMSwgdW5saWtlIG90aGVyIERQTExzLCB0aGUgZGl2aWRlciBpcyBkb3duc3RyZWFtIGZyb20gQ0xLT1VUWDIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX3gyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKgotICogRG9lcyBub3QgZXhpc3QgaW4gdGhlIFRSTSAtIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgTTIgZGl2aWRlciBmcm9tCi0gKiBieXBhc3Mgc2VsZWN0aW9uIGluIG1wdV9jawotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIERQTEwyICovCi0vKiBJVkEyIGNsb2NrIHNvdXJjZSAqLwotLyogVHlwZTogRFBMTCAqLwotCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMl9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDJfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCi0JLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpIHwKLQkJCQkoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVV9JVkEyX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVX0lWQTJfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAotCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19JVkEyX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKLQkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAotCS5taW5fZGl2aWRlcgk9IDEsCi0JLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmRwbGxfZGF0YQk9ICZkcGxsMl9kZCwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsMl9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyoKLSAqIFRoZSBUUk0gaXMgY29uZmxpY3RlZCBvbiB3aGV0aGVyIElWQTIgY2xvY2sgY29tZXMgZnJvbSBEUExMMiBDTEtPVVQKLSAqIG9yIENMS09VVFgyLiBDTEtPVVQgc2VlbXMgbW9zdCBwbGF1c2libGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX20yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMl9tMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJICBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEwzCi0gKiBTb3VyY2UgY2xvY2sgZm9yIGFsbCBpbnRlcmZhY2VzIGFuZCBmb3Igc29tZSBkZXZpY2UgZmNsa3MKLSAqIFJFVklTSVQ6IEFsc28gc3VwcG9ydHMgZmFzdCByZWxvY2sgYnlwYXNzIC0gbm90IGluY2x1ZGVkIGJlbG93Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwzX2RkID0gewotCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmc3lzX2NrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9NQVNLLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCi0JLm1pbl9kaXZpZGVyCT0gMSwKLQkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV9kcGxsM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMxX2RwbGwzbTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYzMV9kcGxsM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogRFBMTDMgb3V0cHV0IE0yIC0gcHJpbWFyeSBjb250cm9sIHBvaW50IGZvciBDT1JFIHNwZWVkICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjMxX2RwbGwzbTJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDNfbTN4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTNfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX20zX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMM19NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM3gyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsM19tM3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGwzX20zX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9DT1JFX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfY29yZV9hbHdvbl9jayA9IHsKLQkubmFtZQkJPSAiZW11X2NvcmVfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX20zeDJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMNCAqLwotLyogU3VwcGxpZXMgOTZNSHosIDU0TWh6IFRWIERBQywgRFNTIGZjbGssIENBTSBzZW5zb3IgY2xvY2ssIGVtdWwgdHJhY2UgY2xrICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwyKSwKLQkubXVsdF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSywKLQkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCi0JLmNsa19yZWYJPSAmc3lzX2NrLAotCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9GUkVRU0VMX01BU0ssCi0JLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9NQVNLLAotCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKLQkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKLQkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfU1RfU0hJRlQsCi0JLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCi0JLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KLSAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPwotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMngyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEw0IGdlbmVyYXRlcyBEUExMNF9NMlgyX0NMSyB3aGljaCBpcyB0aGVuIHJvdXRlZCBpbnRvIHRoZSBQUk0gYXMKLSAqIFBSTV85Nk1fQUxXT05fKEYpQ0xLLiAgVHdvIGNsb2NrcyB0aGVuIGVtZXJnZSBmcm9tIHRoZSBQUk06Ci0gKiA5Nk1fQUxXT05fRkNMSyAoY2FsbGVkICJvbWFwXzk2bV9hbHdvbl9mY2siIGJlbG93KSBhbmQKLSAqIENNXzk2S18oRilDTEsuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF85Nm1fYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fZHBsbF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzk2bV9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJIC5yYXRlcyA9IG9tYXBfOTZtX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzk2bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfOTZtX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tM3gyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTN4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTN4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tM19jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfNTRtX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgICAgLnJhdGVzID0gb21hcF81NG1fYWx0X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzU0bV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBfNTRtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNTRNX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwXzU0bV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fY205Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNDhtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfNDhtX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzQ4bV9jbTk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAucmF0ZXMgPSBvbWFwXzQ4bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNDhtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF80OG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfNDhtX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMm1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzEybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKLQkuZml4ZWRfZGl2CT0gNCwKLQkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKLX07Ci0KLS8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw0X200X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X202eDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTZ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfUEVSSVBIX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfcGVyX2Fsd29uX2NrID0gewotCS5uYW1lCQk9ICJlbXVfcGVyX2Fsd29uX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNngyX2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogRFBMTDUgKi8KLS8qIFN1cHBsaWVzIDEyME1IeiBjbG9jaywgVVNJTSBzb3VyY2UgY2xvY2sgKi8KLS8qIFR5cGU6IERQTEwgKi8KLS8qIDM0MzBFUzIgb25seSAqLwotc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDVfZGQgPSB7Ci0JLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNCksCi0JLm11bHRfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9NVUxUX01BU0ssCi0JLmRpdjFfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9ESVZfTUFTSywKLQkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCi0JLmNsa19yZWYJPSAmc3lzX2NrLAotCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRlJFUVNFTF9NQVNLLAotCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9NQVNLLAotCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKLQkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMEVTMl9FTl9QRVJJUEgyX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKLQkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBFUzJfU05EX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZULAotCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfU1RfU0hJRlQsCi0JLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9BVVRPSURMRTJfUExMKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwRVMyX0FVVE9fUEVSSVBIMl9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKLQkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAotCS5taW5fZGl2aWRlcgk9IDEsCi0JLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw1X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmRwbGxfZGF0YQk9ICZkcGxsNV9kZCwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDVfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw1X20yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNV9tMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9ESVZfMTIwTV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogQ00gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjX3N5c19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY181NG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbGtvdXQyX3NyY19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJCS5yYXRlcyA9IGNsa291dDJfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZvbWFwXzU0bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzU0bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrb3V0Ml9zcmNfY2sgPSB7Ci0JLm5hbWUJCT0gImNsa291dDJfc3JjX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVQyX0VOX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMlNPVVJDRV9NQVNLLAotCS5jbGtzZWwJCT0gY2xrb3V0Ml9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHN5c19jbGtvdXQyX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNsa291dDJfc3JjX2NrLCAucmF0ZXMgPSBzeXNfY2xrb3V0Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyID0gewotCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX0NNX0NMS09VVF9DVFJMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS09VVDJfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIENNIE9VVFBVVCBDTE9DS1MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZXgyX2ZjayA9IHsKLQkubmFtZQkJPSAiY29yZXgyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfbTJ4Ml9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogRFBMTCBwb3dlciBkb21haW4gY2xvY2sgY29udHJvbHMgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXY0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXY0X2NvcmVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qCi0gKiBSRVZJU0lUOiBBcmUgdGhlc2UgaW4gRFBMTCBwb3dlciBkb21haW4gb3IgQ00gcG93ZXIgZG9tYWluPyBkb2NzCi0gKiBtYXkgYmUgaW5jb25zaXN0ZW50IGhlcmU/Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2ZjayA9IHsKLQkubmFtZQkJPSAiZHBsbDFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9DTEtfU1JDX01BU0ssCi0JLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7Ci0JLm5hbWUJCT0gIm1wdV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDFfeDJtMl9jaywKLQkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBhcm1fZmNrIGlzIGRpdmlkZWQgYnkgdHdvIHdoZW4gRFBMTDEgbG9ja2VkOyBvdGhlcndpc2UsIHBhc3N0aHJvdWdoIG1wdV9jayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBhcm1fZmNrX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhcm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZtcHVfY2ssIC5yYXRlcyA9IGFybV9mY2tfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9mY2sgPSB7Ci0JLm5hbWUJCT0gImFybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGFybV9mY2tfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFhYWCBXaGF0IGFib3V0IG5lb25fY2xrZG0gPyAqLwotCi0vKgotICogUkVWSVNJVDogVGhpcyBjbG9jayBpcyBuZXZlciBzcGVjaWZpY2FsbHkgZGVmaW5lZCBpbiB0aGUgMzQzMCBUUk0sCi0gKiBhbHRob3VnaCBpdCBpcyByZWZlcmVuY2VkIC0gc28gdGhpcyBpcyBhIGd1ZXNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9tcHVfYWx3b25fY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9tcHVfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrID0gewotCS5uYW1lCQk9ICJkcGxsMl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19NQVNLLAotCS5jbGtzZWwJCT0gZGl2NF9jb3JlX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl9jayA9IHsKLQkubmFtZQkJPSAiaXZhMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsMl9tMl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiaXZhMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENvbW1vbiBpbnRlcmZhY2UgY2xvY2tzICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfY29yZV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDNfaWNrID0gewotCS5uYW1lCQk9ICJsM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfTDNfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDRfaWNrID0gewotCS5uYW1lCQk9ICJsNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9sNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybV9pY2sgPSB7Ci0JLm5hbWUJCT0gInJtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1JNX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYyX2w0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogR0ZYIHBvd2VyIGRvbWFpbiAqLwotCi0vKiBHRlggY2xvY2tzIGFyZSBpbiAzNDMwRVMxIG9ubHkuIDM0MzBFUzIgYW5kIGxhdGVyIHVzZXMgdGhlIFNHWCBpbnN0ZWFkICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGdmeF9sM19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDNfaWNrLCAucmF0ZXMgPSBnZnhfbDNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFZpcnR1YWwgcGFyZW50IGNsb2NrIGZvciBnZnhfbDNfaWNrIGFuZCBnZnhfbDNfZmNrICovCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZnZnhfbDNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9jZzFfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0gewotCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0dYIHBvd2VyIGRvbWFpbiAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF9jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzZ3hfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAucmF0ZXMgPSBzZ3hfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBzZ3hfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKLQkubmFtZQkJPSAic2d4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKLQkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKLQkubmFtZQkJPSAic2d4X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInNneF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkUgcG93ZXIgZG9tYWluICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0gewotCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1vZGVtX2ZjayA9IHsKLQkubmFtZQkJPSAibW9kZW1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NT0RFTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzYWQyZF9pY2sgPSB7Ci0JLm5hbWUJCT0gInNhZDJkX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0FEMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFkMmRfaWNrID0gewotCS5uYW1lCQk9ICJtYWQyZF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXAzNDN4X2dwdF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF8zMmtfZmNrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJICAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEx9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDEwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTBfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3BlZnVzZV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNwZWZ1c2VfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdHNfZmNrID0gewotCS5uYW1lCQk9ICJ0c19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBDT1JFIDk2TSBGQ0xLLWRlcml2ZWQgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjM19mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIE1DQlNQIDEgJiA1IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIGNvcmVfOTZtX2ZjazsKLSAqIE1DQlNQIDIsIDMsIDQgZ2V0IHRoZWlyIDk2TUh6IGNsb2NrIGZyb20gcGVyXzk2bV9mY2suCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwX21jYnNwX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMTVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA1LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNV9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmc2hvc3R1c2JfZmNrID0gewotCS5uYW1lCQk9ICJmc2hvc3R1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfMTJNX0ZDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV8xMm1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzEybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKLQkubmFtZQkJPSAiaGRxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMMy1kZXJpdmVkIGNsb2NrICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9jb3JleDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3JfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmV4Ml9mY2ssIC5yYXRlcyA9IHNzaV9zc3JfY29yZXgyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMxID0gewotCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfc3NpX3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3RfZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3RfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzc2lfc3NyX2Zja18zNDMwZXMxLAotCS5maXhlZF9kaXYJPSAyLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKLQkubmFtZQkJPSAic3NpX3NzdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0KLQotLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCi0KLS8qCi0gKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAotICogaGFuZGxlIGl0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewotCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMSA9IHsKLQkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsIC8qIGh1aD8gKi8KLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDNfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewotCS5uYW1lCQk9ICJwa2FfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKLQkubmFtZQkJPSAiY29yZV9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCi1zdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewotCS5uYW1lCQk9ICJpY3JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImFlczJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKLQkubmFtZQkJPSAic2hhMTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKLQkubmFtZQkJPSAiaGRxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewotCS5uYW1lCQk9ICJmYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKLQkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX09NQVBDVFJMX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU1NJX0w0X0lDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9zc2lfd2FpdCwKLQkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogUkVWSVNJVDogVGVjaG5pY2FsbHkgdGhlIFRSTSBjbGFpbXMgdGhhdCB0aGlzIGlzIENPUkVfQ0xLIGJhc2VkLAotICogYnV0IGw0X2ljayBtYWtlcyBtb3JlIHNlbnNlIHRvIG1lICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKLQkubmFtZQkJPSAidXNiX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDRfSUNLMiBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKLQkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUk5HX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYTExX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTExX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEU1MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc190dl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0gewotCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMSA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMiA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENBTSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKLQkubmFtZQkJPSAiY2FtX21jbGsiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gImNhbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzaTJfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY3NpMl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogVVNCSE9TVCAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2Rzc191c2Job3N0X3dhaXQsCi0JLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfaWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gInVzYmhvc3RfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBXS1VQICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV85Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV8xMjBtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gNCwgIC52YWwgPSA3LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA4LCAgLnZhbCA9IDgsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gOSwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMjAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKiAzNDMwRVMyIG9ubHkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2ltX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfVVNJTU9DUF9NQVNLLAotCS5jbGtzZWwJCT0gdXNpbV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzFfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3a3VwX2w0X2ljayA9IHsKLQkubmFtZQkJPSAid2t1cF9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogMzQzMEVTMiBvbmx5ICovCi0vKiBOZXZlciBzcGVjaWZpY2FsbHkgbmFtZWQgaW4gdGhlIFRSTSwgc28gd2UgaGF2ZSB0byBpbmZlciBhIGxpa2VseSBuYW1lICovCi1zdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljayA9IHsKLQkubmFtZQkJPSAidXNpbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKLQkubmFtZQkJPSAid2R0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0gewotCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotCi0KLS8qIFBFUiBjbG9jayBkb21haW4gKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewotCS5uYW1lCQk9ICJncHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewotCS5uYW1lCQk9ICJncHQ1X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0N19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0gewotCS5uYW1lCQk9ICJncHQ4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfMzJrX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAicGVyXzMya19hbHdvbl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNl9kYmNrID0gewotCS5uYW1lCQk9ICJncGlvNl9kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW80X2RiY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvM19kYmNrID0gewotCS5uYW1lCQk9ICJncGlvM19kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzJfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfbDRfaWNrID0gewotCS5uYW1lCQk9ICJwZXJfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0gewotCS5uYW1lCQk9ICJncGlvM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewotCS5uYW1lCQk9ICJncGlvMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKLQkubmFtZQkJPSAibWNic3BfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMjM0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZwZXJfOTZtX2ZjaywgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKLQkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNF9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIEVNVSBjbG9ja3MgKi8KLQotLyogTW9yZSBpbmZvcm1hdGlvbjogQVJNIENvcnRleC1BOCBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbCwgc2VjdCAxMC4xICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3Blcl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfbXB1X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGVtdV9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmVtdV9jb3JlX2Fsd29uX2NrLCAucmF0ZXMgPSBlbXVfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X3Blcl9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19wZXJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X21wdV9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19tcHVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKgotICogTGlrZSB0aGUgY2xrb3V0X3NyYyBjbG9ja3MsIGVtdV9zcmNfY2xrIGlzIGEgdmlydHVhbCBjbG9jaywgZXhpc3Rpbmcgb25seQotICogdG8gc3dpdGNoIHRoZSBzb3VyY2Ugb2Ygc29tZSBvZiB0aGUgRU1VIGNsb2Nrcy4KLSAqIFhYWCBBcmUgdGhlcmUgQ0xLRU4gYml0cyBmb3IgdGhlc2UgRU1VIGNsa3M/Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNfY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9zcmNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgcGNsa19lbXVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa19lbXVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IHBjbGtfZW11X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xreDJfZW11X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa3gyX2VtdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa3gyX2VtdV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGt4Ml9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAotCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYXRjbGtfZW11X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRjbGtfZmNrID0gewotCS5uYW1lCQk9ICJhdGNsa19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX3NyY19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX3NyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdHJhY2VjbGtfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZWNsa19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmdHJhY2VjbGtfc3JjX2ZjaywgLnJhdGVzID0gdHJhY2VjbGtfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0cmFjZWNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKLQkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBTUiBjbG9ja3MgKi8KLQotLyogU21hcnRSZWZsZXggZmNsayAoVkREMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyMV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNyMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1IxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKLQkubmFtZQkJPSAic3IyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJFXzMyS19GQ0sgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9mY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotCi0vKgotICogY2xrZGV2Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwMzR4eF9jbGtzW10gPSB7Ci0JQ0xLKE5VTEwsCSJvbWFwXzMya19mY2siLAkmb21hcF8zMmtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTJtX2NrIiwJJnZpcnRfMTJtX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTNtX2NrIiwJJnZpcnRfMTNtX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTZfOG1fY2siLCAmdmlydF8xNl84bV9jaywgQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJ2aXJ0XzE5XzJtX2NrIiwgJnZpcnRfMTlfMm1fY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkidmlydF8yNm1fY2siLAkmdmlydF8yNm1fY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidmlydF8zOF80bV9jayIsICZ2aXJ0XzM4XzRtX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9zY19zeXNfY2siLAkmb3NjX3N5c19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInN5c19hbHRjbGsiLAkmc3lzX2FsdGNsaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJtY2JzcF9jbGtzIiwJJm1jYnNwX2Nsa3MsCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dDEiLAkmc3lzX2Nsa291dDEsCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfY2siLAkmZHBsbDFfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfeDJfY2siLAkmZHBsbDFfeDJfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfeDJtMl9jayIsICZkcGxsMV94Mm0yX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2NrIiwJJmRwbGwyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX20yX2NrIiwJJmRwbGwyX20yX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwzX2NrIiwJJmRwbGwzX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM194Ml9jayIsCSZkcGxsM194Ml9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM19tMl9jayIsCSZkcGxsM19tMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM19tMngyX2NrIiwgJmRwbGwzX20yeDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTNfY2siLAkmZHBsbDNfbTNfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTN4Ml9jayIsICZkcGxsM19tM3gyX2NrLCBDS18zNDNYKSwKLQlDTEsoImV0YiIsCSJlbXVfY29yZV9hbHdvbl9jayIsICZlbXVfY29yZV9hbHdvbl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9jayIsCSZkcGxsNF9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF94Ml9jayIsCSZkcGxsNF94Ml9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzk2bV9hbHdvbl9mY2siLCAmb21hcF85Nm1fYWx3b25fZmNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfOTZtX2ZjayIsCSZvbWFwXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY21fOTZtX2ZjayIsCSZjbV85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfNTRtX2ZjayIsCSZvbWFwXzU0bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF80OG1fZmNrIiwJJm9tYXBfNDhtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzEybV9mY2siLAkmb21hcF8xMm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X20yX2NrIiwJJmRwbGw0X20yX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X20yeDJfY2siLCAmZHBsbDRfbTJ4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tM19jayIsCSZkcGxsNF9tM19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tM3gyX2NrIiwgJmRwbGw0X20zeDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTRfY2siLAkmZHBsbDRfbTRfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTR4Ml9jayIsICZkcGxsNF9tNHgyX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X201X2NrIiwJJmRwbGw0X201X2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X201eDJfY2siLCAmZHBsbDRfbTV4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzM0M1gpLAotCUNMSygiZXRiIiwJImVtdV9wZXJfYWx3b25fY2siLCAmZW11X3Blcl9hbHdvbl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJkcGxsNV9tMl9jayIsCSZkcGxsNV9tMl9jaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJjbGtvdXQyX3NyY19jayIsICZjbGtvdXQyX3NyY19jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JleDJfZmNrIiwJJmNvcmV4Ml9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfZmNrIiwJJmRwbGwxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImFybV9mY2siLAkmYXJtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJldGIiLAkiZW11X21wdV9hbHdvbl9jayIsICZlbXVfbXB1X2Fsd29uX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2ZjayIsCSZkcGxsMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiaXZhMl9jayIsCSZpdmEyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImwzX2ljayIsCSZsM19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibDRfaWNrIiwJJmw0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJybV9pY2siLAkmcm1faWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdmeF9sM19jayIsCSZnZnhfbDNfY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkiZ2Z4X2wzX2ZjayIsCSZnZnhfbDNfZmNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImdmeF9sM19pY2siLAkmZ2Z4X2wzX2ljaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJnZnhfY2cxX2NrIiwJJmdmeF9jZzFfY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkiZ2Z4X2NnMl9jayIsCSZnZnhfY2cyX2NrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNneF9mY2siLAkmc2d4X2ZjaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiZDJkXzI2bV9mY2siLAkmZDJkXzI2bV9mY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkibW9kZW1fZmNrIiwJJm1vZGVtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzYWQyZF9pY2siLAkmc2FkMmRfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm1hZDJkX2ljayIsCSZtYWQyZF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMV9mY2siLAkmZ3B0MTFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNwZWZ1c2VfZmNrIiwJJmNwZWZ1c2VfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInRzX2ZjayIsCSZ0c19mY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNidGxsX2ZjayIsCSZ1c2J0bGxfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImNvcmVfOTZtX2ZjayIsCSZjb3JlXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiZmNrIiwJJm1tY2hzM19mY2ssCUNLXzM0MzBFUzIpLAotCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkmbW1jaHMxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4zIiwgImZjayIsCSZpMmMzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNvcmVfNDhtX2ZjayIsCSZjb3JlXzQ4bV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuNCIsICJmY2siLAkmbWNzcGk0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZnNob3N0dXNiX2ZjayIsICZmc2hvc3R1c2JfZmNrLCBDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImNvcmVfMTJtX2ZjayIsCSZjb3JlXzEybV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF9oZHEuMCIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNzaV9zc3JfZmNrIiwJJnNzaV9zc3JfZmNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJzc2lfc3N0X2ZjayIsCSZzc2lfc3N0X2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImNvcmVfbDNfaWNrIiwJJmNvcmVfbDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZoc290Z3VzYl9pY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzZWN1cml0eV9sM19pY2siLCAmc2VjdXJpdHlfbDNfaWNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImFlczJfaWNrIiwJJmFlczJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNoYTEyX2ljayIsCSZzaGExMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMyIsICJpY2siLAkmaTJjM19pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNlY3VyaXR5X2w0X2ljazIiLCAmc2VjdXJpdHlfbDRfaWNrMiwgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhZXMxX2ljayIsCSZhZXMxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic2hhMTFfaWNrIiwJJnNoYTExX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkZXMxX2ljayIsCSZkZXMxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwZHNzIiwJImRzczFfZmNrIiwJJmRzczFfYWx3b25fZmNrXzM0MzBlczEsIENLXzM0MzBFUzEpLAotCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMyLCBDS18zNDMwRVMyKSwKLQlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc190dl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJ2aWRlb19mY2siLAkmZHNzXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2Fsd29uX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiY2FtX21jbGsiLAkmY2FtX21jbGssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY2FtX2ljayIsCSZjYW1faWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNzaTJfOTZtX2ZjayIsCSZjc2kyXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidXNiaG9zdF8xMjBtX2ZjayIsICZ1c2Job3N0XzEyMG1fZmNrLCBDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzYmhvc3RfNDhtX2ZjayIsICZ1c2Job3N0XzQ4bV9mY2ssIENLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNiaG9zdF9pY2siLAkmdXNiaG9zdF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNpbV9mY2siLAkmdXNpbV9mY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkid2t1cF8zMmtfZmNrIiwJJndrdXBfMzJrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMV9kYmNrIiwJJmdwaW8xX2RiY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZ3ZHQyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ3a3VwX2w0X2ljayIsCSZ3a3VwX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1c2ltX2ljayIsCSZ1c2ltX2ljaywJQ0tfMzQzMEVTMiksCi0JQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJndkdDJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW8xX2ljayIsCSZncGlvMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF8zMmtzeW5jX2ljayIsICZvbWFwXzMya3N5bmNfaWNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicGVyXzk2bV9mY2siLAkmcGVyXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicGVyXzQ4bV9mY2siLAkmcGVyXzQ4bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQyX2ZjayIsCSZncHQyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ZjayIsCSZncHQzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ1X2ZjayIsCSZncHQ1X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ZjayIsCSZncHQ2X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ4X2ZjayIsCSZncHQ4X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ZjayIsCSZncHQ5X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwZXJfMzJrX2Fsd29uX2ZjayIsICZwZXJfMzJrX2Fsd29uX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNl9kYmNrIiwJJmdwaW82X2RiY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzVfZGJjayIsCSZncGlvNV9kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkmZ3BpbzRfZGJjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvM19kYmNrIiwJJmdwaW8zX2RiY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzJfZGJjayIsCSZncGlvMl9kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBlcl9sNF9pY2siLAkmcGVyX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNl9pY2siLAkmZ3BpbzZfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzRfaWNrIiwJJmdwaW80X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvM19pY2siLAkmZ3BpbzNfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2ljayIsCSZncGlvMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJJnVhcnQzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ4X2ljayIsCSZncHQ4X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ljayIsCSZncHQ3X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ1X2ljayIsCSZncHQ1X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ljayIsCSZncHQ0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQyX2ljayIsCSZncHQyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJm1jYnNwMl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsICJmY2siLAkmbWNic3A0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJldGIiLAkiZW11X3NyY19jayIsCSZlbXVfc3JjX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBjbGtfZmNrIiwJJnBjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBjbGt4Ml9mY2siLAkmcGNsa3gyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhdGNsa19mY2siLAkmYXRjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInRyYWNlY2xrX3NyY19mY2siLCAmdHJhY2VjbGtfc3JjX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ0cmFjZWNsa19mY2siLAkmdHJhY2VjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNyMV9mY2siLAkmc3IxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzcjJfZmNrIiwJJnNyMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3JfbDRfaWNrIiwJJnNyX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2ZjayIsICZzZWN1cmVfMzJrX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDFfZmNrIiwJJndkdDFfZmNrLAlDS18zNDNYKSwKLX07Ci0KLQotaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQotewotCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KLQlzdHJ1Y3Qgb21hcF9jbGsgKmM7Ci0JLyogdTMyIGNsa3JhdGU7ICovCi0JdTMyIGNwdV9jbGtmbGc7Ci0KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzM0M1g7Ci0JCWNwdV9jbGtmbGcgPSBDS18zNDNYOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKLQkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKLQkJICovCi0JCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KLQkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKLQkJfSBlbHNlIHsKLQkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKLQkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMjsKLQkJfQotCX0KLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQotCWZvciAoYyA9IG9tYXAzNHh4X2Nsa3M7IGMgPCBvbWFwMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMzR4eF9jbGtzKTsgYysrKQotCQljbGtfcHJlaW5pdChjLT5say5jbGspOwotCi0JZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCi0JCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7Ci0JCQljbGtkZXZfYWRkKCZjLT5sayk7Ci0JCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKLQkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7Ci0JCX0KLQotCS8qIFJFVklTSVQ6IE5vdCB5ZXQgcmVhZHkgZm9yIE9NQVAzICovCi0jaWYgMAotCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwotCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOwotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCi0JCQlicmVhazsKLQl9Ci0JY3Vycl9wcmNtX3NldCA9IHByY207Ci0jZW5kaWYKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgotCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAotCSAgICAgICAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwMCksIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChjb3JlX2NrLnJhdGUgLyAxMDAwMDAwKSwgKGFybV9mY2sucmF0ZSAvIDEwMDAwMDApKTsKLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7Ci0KLQkvKgotCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KLQkgKi8KLQlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCi0JCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7Ci0KLQkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KLQlzZHJjX2lja19wID0gY2xrX2dldChOVUxMLCAic2RyY19pY2siKTsKLQlhcm1fZmNrX3AgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZmNrIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTZhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogT01BUDM1MTcvMzUwNS1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBSYW5qaXRoIExvaGl0aGFrc2hhbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIFdvb2RydWZmLCBUb255IExpbmRncmVuLCBUdXVra2EgVGlra2FuZW4sIEthcnRoaWsgRGFzdSwKKyAqIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2szNTE3LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyoKKyAqIEluIEFNMzV4eCBJUFNTLCB0aGUge0lDSyxGQ0t9IGVuYWJsZSBiaXRzIGZvciBtb2R1bGVzIGFyZSBleHBvcnRlZAorICogaW4gdGhlIHNhbWUgcmVnaXN0ZXIgYXQgYSBiaXQgb2Zmc2V0IG9mIDB4OC4gVGhlIEVOX0FDSyBmb3IgSUNLIGlzCisgKiBhdCBhbiBvZmZzZXQgb2YgNCBmcm9tIElDSyBlbmFibGUgYml0LgorICovCisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19NQVNLCQkJMHhGCisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19FTl9BQ0tfT0ZGU0VUIAkJMHg0CisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19GQ0tfT0ZGU0VUCQkweDgKKyNkZWZpbmUgQU0zNVhYX0lQU1NfQ0xLX0lETEVTVF9WQUwJCTAKKworLyoqCisgKiBhbTM1eHhfY2xrX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIGNsb2NrIEFDSyBpbmZvIGZvciBBTTM1WFggSVBTUworICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKKyAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KKyAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgorICoKKyAqIFRoZSBpbnRlcmZhY2UgY2xvY2tzIG9uIEFNMzV4eCBJUFNTIHJlZmxlY3RzIHRoZSBjbG9jayBpZGxlIHN0YXR1cworICogaW4gdGhlIGVuYWJsZSByZWdpc3RlciBpdHNlbCBhdCBhIGJpdCBvZmZzZXQgb2YgNCBmcm9tIHRoZSBlbmFibGUKKyAqIGJpdC4gQSB2YWx1ZSBvZiAxIGluZGljYXRlcyB0aGF0IGNsb2NrIGlzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFtMzV4eF9jbGtfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKKwkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkgICAgdTggKmlkbGVzdF92YWwpCit7CisJKmlkbGVzdF9yZWcgPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKikoY2xrLT5lbmFibGVfcmVnKTsKKwkqaWRsZXN0X2JpdCA9IGNsay0+ZW5hYmxlX2JpdCArIEFNMzVYWF9JUFNTX0lDS19FTl9BQ0tfT0ZGU0VUOworCSppZGxlc3RfdmFsID0gQU0zNVhYX0lQU1NfQ0xLX0lETEVTVF9WQUw7Cit9CisKKy8qKgorICogYW0zNXh4X2Nsa19maW5kX2NvbXBhbmlvbiAtIGZpbmQgY29tcGFuaW9uIGNsb2NrIHRvIEBjbGsKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiB0byBmaW5kIHRoZSBjb21wYW5pb24gY2xvY2sgb2YKKyAqIEBvdGhlcl9yZWc6IHZvaWQgX19pb21lbSAqKiB0byByZXR1cm4gdGhlIGNvbXBhbmlvbiBjbG9jayBDTV8qQ0xLRU4gdmEgaW4KKyAqIEBvdGhlcl9iaXQ6IHU4ICoqIHRvIHJldHVybiB0aGUgY29tcGFuaW9uIGNsb2NrIGJpdCBzaGlmdCBpbgorICoKKyAqIFNvbWUgY2xvY2tzIGRvbid0IGhhdmUgY29tcGFuaW9uIGNsb2Nrcy4gIEZvciBleGFtcGxlLCBtb2R1bGVzIHdpdGgKKyAqIG9ubHkgYW4gaW50ZXJmYWNlIGNsb2NrIChzdWNoIGFzIEhFQ0MpIGRvbid0IGhhdmUgYSBjb21wYW5pb24KKyAqIGNsb2NrLiAgUmlnaHQgbm93LCB0aGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBleHBvcnRpbmcgYSBiaXQKKyAqIGluIHRoZSBjb3JyZWN0IGNvbXBhbmlvbiByZWdpc3RlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZQorICogbm9uZXhpc3RlbnQgJ2NvbXBhbmlvbiBjbG9jaycgaXMgYWN0aXZlLiAgRnV0dXJlIHBhdGNoZXMgd2lsbAorICogYXNzb2NpYXRlIHRoaXMgdHlwZSBvZiBjb2RlIHdpdGggcGVyLW1vZHVsZSBkYXRhIHN0cnVjdHVyZXMgdG8KKyAqIGF2b2lkIHRoaXMgaXNzdWUsIGFuZCByZW1vdmUgdGhlIGNhc3RzLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBhbTM1eHhfY2xrX2ZpbmRfY29tcGFuaW9uKHN0cnVjdCBjbGsgKmNsaywgdm9pZCBfX2lvbWVtICoqb3RoZXJfcmVnLAorCQkJCQkgICAgdTggKm90aGVyX2JpdCkKK3sKKwkqb3RoZXJfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopKGNsay0+ZW5hYmxlX3JlZyk7CisJaWYgKGNsay0+ZW5hYmxlX2JpdCAmIEFNMzVYWF9JUFNTX0lDS19NQVNLKQorCQkqb3RoZXJfYml0ID0gY2xrLT5lbmFibGVfYml0ICsgQU0zNVhYX0lQU1NfSUNLX0ZDS19PRkZTRVQ7CisJZWxzZQorCQkqb3RoZXJfYml0ID0gY2xrLT5lbmFibGVfYml0IC0gQU0zNVhYX0lQU1NfSUNLX0ZDS19PRkZTRVQ7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FtMzV4eF9pcHNzX21vZHVsZV93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBhbTM1eHhfY2xrX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbgk9IGFtMzV4eF9jbGtfZmluZF9jb21wYW5pb24sCit9OworCisvKioKKyAqIGFtMzV4eF9jbGtfaXBzc19maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgSVBTUworICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKKyAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KKyAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgorICoKKyAqIFRoZSBJUFNTIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50IHNoaWZ0IGZyb20gdGhlCisgKiBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYSBAaWRsZXN0X3JlZworICogYW5kIEBpZGxlc3RfYml0LiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBhbTM1eHhfY2xrX2lwc3NfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKKwkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkgICAgdTggKmlkbGVzdF92YWwpCit7CisJdTMyIHI7CisKKwlyID0gKCgoX19mb3JjZSB1MzIpY2xrLT5lbmFibGVfcmVnICYgfjB4ZjApIHwgMHgyMCk7CisJKmlkbGVzdF9yZWcgPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilyOworCSppZGxlc3RfYml0ID0gQU0zNVhYX1NUX0lQU1NfU0hJRlQ7CisJKmlkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOworfQorCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc193YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBhbTM1eHhfY2xrX2lwc3NfZmluZF9pZGxlc3QsCisJLmZpbmRfY29tcGFuaW9uCT0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCit9OworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWU1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBPTUFQMzUxNy8zNTA1IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNTE3X0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzUxN19ICisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc19tb2R1bGVfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc193YWl0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWUyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzZ4eC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBPTUFQMzZ4eC1zcGVjaWZpYyBjbGtvcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIE1pa2UgVHVycXVldHRlCisgKiBWaWpheWt1bWFyIEdOCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogUGFydHMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1LAorICogUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazM2eHguaCIKKworCisvKioKKyAqIG9tYXAzNnh4X3B3cmRuX2Nsa19lbmFibGVfd2l0aF9oc2Rpdl9yZXN0b3JlIC0gZW5hYmxlIGNsb2NrcyBzdWZmZXJpbmcKKyAqICAgICAgICAgZnJvbSBIU0RpdmlkZXIgUFdSRE4gcHJvYmxlbSBJbXBsZW1lbnRzIEVycmF0YSBJRDogaTU1Ni4KKyAqIEBjbGs6IERQTEwgb3V0cHV0IHN0cnVjdCBjbGsKKyAqCisgKiAzNjMwIG9ubHk6IGRwbGwzX20zX2NrLCBkcGxsNF9tMl9jaywgZHBsbDRfbTNfY2ssIGRwbGw0X200X2NrLAorICogZHBsbDRfbTVfY2sgJiBkcGxsNF9tNl9jayBkaXZpZGVycyBnZXRzIGxvYWRlZCB3aXRoIHJlc2V0CisgKiB2YWx1ZWFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgUFdSRE4gYml0cyBhcmUgc2V0LiAgQW55IGR1bW15IHdyaXRlCisgKiAoQW55IG90aGVyIHZhbHVlIGRpZmZlcmVudCBmcm9tIHRoZSBSZWFkIHZhbHVlKSB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgQ01fQ0xLU0VMIHJlZ2lzdGVyIHdpbGwgcmVmcmVzaCB0aGUgZGl2aWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgb21hcDM2eHhfcHdyZG5fY2xrX2VuYWJsZV93aXRoX2hzZGl2X3Jlc3RvcmUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkdW1teV92LCBvcmlnX3YsIGNsa3NlbF9zaGlmdDsKKwlpbnQgcmV0OworCisJLyogQ2xlYXIgUFdSRE4gYml0IG9mIEhTRElWSURFUiAqLworCXJldCA9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShjbGspOworCisJLyogUmVzdG9yZSB0aGUgZGl2aWRlcnMgKi8KKwlpZiAoIXJldCkgeworCQljbGtzZWxfc2hpZnQgPSBfX2ZmcyhjbGstPnBhcmVudC0+Y2xrc2VsX21hc2spOworCQlvcmlnX3YgPSBfX3Jhd19yZWFkbChjbGstPnBhcmVudC0+Y2xrc2VsX3JlZyk7CisJCWR1bW15X3YgPSBvcmlnX3Y7CisKKwkJLyogV3JpdGUgYW55IG90aGVyIHZhbHVlIGRpZmZlcmVudCBmcm9tIHRoZSBSZWFkIHZhbHVlICovCisJCWR1bW15X3YgXj0gKDEgPDwgY2xrc2VsX3NoaWZ0KTsKKwkJX19yYXdfd3JpdGVsKGR1bW15X3YsIGNsay0+cGFyZW50LT5jbGtzZWxfcmVnKTsKKworCQkvKiBXcml0ZSB0aGUgb3JpZ2luYWwgZGl2aWRlciAqLworCQlfX3Jhd193cml0ZWwob3JpZ192LCBjbGstPnBhcmVudC0+Y2xrc2VsX3JlZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmUgPSB7CisJLmVuYWJsZQkJPSBvbWFwMzZ4eF9wd3Jkbl9jbGtfZW5hYmxlX3dpdGhfaHNkaXZfcmVzdG9yZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfY29tcGFuaW9uCT0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCisJLmZpbmRfaWRsZXN0CT0gb21hcDJfY2xrX2RmbHRfZmluZF9pZGxlc3QsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM2eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkZWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIE9NQVAzNnh4IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNlhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzZYWF9ICisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ3YzRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIE9NQVAzLXNwZWNpZmljIGNsb2NrIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKiBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQorICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2szeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUOiBVU0JIT1NUIGFuZCBVU0JUTEwgYXJlIHRoZSBvbmx5IGNsb2NrcworICogdGhhdCBhcmUgc291cmNlZCBieSBEUExMNSwgYW5kIGJvdGggb2YgdGhlc2UgcmVxdWlyZSB0aGlzIGNsb2NrCisgKiB0byBiZSBhdCAxMjAgTUh6IGZvciBwcm9wZXIgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QJCTEyMDAwMDAwMAorCisvKiBuZWVkZWQgYnkgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KK3N0cnVjdCBjbGsgKnNkcmNfaWNrX3AsICphcm1fZmNrX3A7CisKK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgMTItNSBDRFAgY29kZSBmcm9tIFRJLCAiTGltaXRhdGlvbiAyLjUiCisJICogb24gMzQzMEVTMSBwcmV2ZW50cyB1cyBmcm9tIGNoYW5naW5nIERQTEwgbXVsdGlwbGllcnMgb3IgZGl2aWRlcnMKKwkgKiBvbiBEUExMNC4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwkJcHJfZXJyKCJjbG9jazogRFBMTDQgY2Fubm90IGNoYW5nZSByYXRlIGR1ZSB0byAiCisJCSAgICAgICAic2lsaWNvbiAnTGltaXRhdGlvbiAyLjUnIG9uIDM0MzBFUzEuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOworfQorCit2b2lkIF9faW5pdCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQoreworCXN0cnVjdCBjbGsgKmRwbGw1X2NsazsKKwlzdHJ1Y3QgY2xrICpkcGxsNV9tMl9jbGs7CisKKwlkcGxsNV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsNV9jayIpOworCWNsa19zZXRfcmF0ZShkcGxsNV9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCWNsa19lbmFibGUoZHBsbDVfY2xrKTsKKworCS8qIEVuYWJsZSBhdXRvaWRsZSB0byBhbGxvdyBpdCB0byBlbnRlciBsb3cgcG93ZXIgYnlwYXNzICovCisJb21hcDNfZHBsbF9hbGxvd19pZGxlKGRwbGw1X2Nsayk7CisKKwkvKiBQcm9ncmFtIGRwbGw1X20yX2NsayBkaXZpZGVyIGZvciBubyBkaXZpc2lvbiAqLworCWRwbGw1X20yX2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X20yX2NrIik7CisJY2xrX2VuYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19zZXRfcmF0ZShkcGxsNV9tMl9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCisJY2xrX2Rpc2FibGUoZHBsbDVfbTJfY2xrKTsKKwljbGtfZGlzYWJsZShkcGxsNV9jbGspOworCXJldHVybjsKK30KKworLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KKworLyoKKyAqIFN3aXRjaCB0aGUgTVBVIHJhdGUgaWYgc3BlY2lmaWVkIG9uIGNtZGxpbmUuICBXZSBjYW5ub3QgZG8gdGhpcworICogZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuICBYWFggVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICogY2xvY2sgY29kZSBhbmQgaGFuZGxlZCBieSB0aGUgT1BQIGxheWVyIGNvZGUgaW4gdGhlIG5lYXIgZnV0dXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAwOworCisJcmV0ID0gb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoImRwbGwxX2NrIik7CisJaWYgKCFyZXQpCisJCW9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMoIm9zY19zeXNfY2siLCAiYXJtX2ZjayIsICJjb3JlX2NrIik7CisKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKG9tYXAzeHh4X2Nsa19hcmNoX2luaXQpOworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmVlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBPTUFQMy1jb21tb24gY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLM1hYWF9ICisKK2ludCBvbWFwM3h4eF9jbGtfaW5pdCh2b2lkKTsKK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitpbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3ZvaWQgb21hcDNfY2xrX2xvY2tfZHBsbDUodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgY2xrICpzZHJjX2lja19wOworZXh0ZXJuIHN0cnVjdCBjbGsgKmFybV9mY2tfcDsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTUzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKQEAgLTAsMCArMSwzNjAxIEBACisvKgorICogT01BUDMgY2xvY2sgZGF0YQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogV2l0aCBtYW55IGRldmljZSBjbG9jayBmaXhlcyBieSBLZXZpbiBIaWxtYW4gYW5kIEpvdW5pIEjDtmdhbmRlcgorICogRFBMTCBieXBhc3MgY2xvY2sgc3VwcG9ydCBhZGRlZCBieSBSb21hbiBUZXJlc2hvbmtvdgorICoKKyAqLworCisvKgorICogVmlydHVhbCBjbG9ja3MgYXJlIGludHJvZHVjZWQgYXMgY29udmVuaWVudCB0b29scy4KKyAqIFRoZXkgYXJlIHNvdXJjZXMgZm9yIG90aGVyIGNsb2NrcyBhbmQgbm90IHN1cHBvc2VkCisgKiB0byBiZSByZXF1ZXN0ZWQgZnJvbSBkcml2ZXJzIGRpcmVjdGx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrM3h4eC5oIgorI2luY2x1ZGUgImNsb2NrMzR4eC5oIgorI2luY2x1ZGUgImNsb2NrMzZ4eC5oIgorI2luY2x1ZGUgImNsb2NrMzUxNy5oIgorCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBjbG9ja3MKKyAqLworCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJT01BUDM0WFhfQ01fUkVHQUREUgorCisvKiBNYXhpbXVtIERQTEwgbXVsdGlwbGllciwgZGl2aWRlciB2YWx1ZXMgZm9yIE9NQVAzICovCisjZGVmaW5lIE9NQVAzX01BWF9EUExMX01VTFQJCTIwNDcKKyNkZWZpbmUgT01BUDM2MzBfTUFYX0pUWVBFX0RQTExfTVVMVAk0MDk1CisjZGVmaW5lIE9NQVAzX01BWF9EUExMX0RJVgkJMTI4CisKKy8qCisgKiBEUExMMSBzdXBwbGllcyBjbG9jayB0byB0aGUgTVBVLgorICogRFBMTDIgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIElWQTIuCisgKiBEUExMMyBzdXBwbGllcyBDT1JFIGRvbWFpbiBjbG9ja3MuCisgKiBEUExMNCBzdXBwbGllcyBwZXJpcGhlcmFsIGNsb2Nrcy4KKyAqIERQTEw1IHN1cHBsaWVzIG90aGVyIHBlcmlwaGVyYWwgY2xvY2tzIChVU0JIT1NULCBVU0lNKS4KKyAqLworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgRFBMTCBieXBhc3MgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2s7CisKKy8qIFBSTSBDTE9DS1MgKi8KKworLyogQWNjb3JkaW5nIHRvIHRpbWVyMzJrLmMsIHRoaXMgaXMgYSAzMjc2OEh6IGNsb2NrLCBub3QgYSAzMjAwMEh6IGNsb2NrLiAqLworc3RhdGljIHN0cnVjdCBjbGsgb21hcF8zMmtfZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDMyNzY4LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJlXzMya19mY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjc2OCwKK307CisKKy8qIFZpcnR1YWwgc291cmNlIGNsb2NrcyBmb3Igb3NjX3N5c19jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xMm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxMjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTNtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzEzbV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTMwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE2XzhtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzE2XzhtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxNjgwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTlfMm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTlfMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDE5MjAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8yNm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMjZtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAyNjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMzhfNG1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMzhfNG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDM4NDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzEybV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xM21fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTZfOG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTlfMm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMjZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzM4XzRtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb3NjX3N5c19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmdmlydF8xMm1fY2ssICAgLnJhdGVzID0gb3NjX3N5c18xMm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xM21fY2ssICAgLnJhdGVzID0gb3NjX3N5c18xM21fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xNl84bV9jaywgLnJhdGVzID0gb3NjX3N5c18xNl84bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzE5XzJtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzE5XzJtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMjZtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMjZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMzhfNG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMzhfNG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBPc2NpbGxhdG9yIGNsb2NrICovCisvKiAxMiwgMTMsIDE2LjgsIDE5LjIsIDI2LCBvciAzOC40IE1IeiAqLworc3RhdGljIHN0cnVjdCBjbGsgb3NjX3N5c19jayA9IHsKKwkubmFtZQkJPSAib3NjX3N5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTRUwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1lTX0NMS0lOX1NFTF9NQVNLLAorCS5jbGtzZWwJCT0gb3NjX3N5c19jbGtzZWwsCisJLyogUkVWSVNJVDogZGVhbCB3aXRoIGF1dG9leHRjbGttb2RlPyAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZvc2Nfc3lzX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBMYXRlbmN5OiB0aGlzIGNsb2NrIGlzIG9ubHkgZW5hYmxlZCBhZnRlciBQUk1fQ0xLU0VUVVAuU0VUVVBfVElNRSAqLworLyogRmVlZHMgRFBMTHMgLSBkaXZpZGVkIGZpcnN0IGJ5IFBSTV9DTEtTUkNfQ1RSTC5TWVNDTEtESVY/ICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CisJLm5hbWUJCT0gInN5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfUFJNX0NMS1NSQ19DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfU1lTQ0xLRElWX01BU0ssCisJLmNsa3NlbAkJPSBzeXNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfYWx0Y2xrID0geworCS5uYW1lCQk9ICJzeXNfYWx0Y2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKK307CisKKy8qIE9wdGlvbmFsIGV4dGVybmFsIGNsb2NrIGlucHV0IGZvciBzb21lIE1jQlNQcyAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNic3BfY2xrcyA9IHsKKwkubmFtZQkJPSAibWNic3BfY2xrcyIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCit9OworCisvKiBQUk0gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQxID0geworCS5uYW1lCQk9ICJzeXNfY2xrb3V0MSIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVF9FTl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTFMgKi8KKworLyogQ00gQ0xPQ0tTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MTZfZHBsbF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMl9kcGxsNF9yYXRlc18zNjMwW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDcsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTEsIC52YWwgPSAxMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTMsIC52YWwgPSAxMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTQsIC52YWwgPSAxNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTcsIC52YWwgPSAxNywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTksIC52YWwgPSAxOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAyMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjEsIC52YWwgPSAyMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjIsIC52YWwgPSAyMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjMsIC52YWwgPSAyMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjQsIC52YWwgPSAyNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjUsIC52YWwgPSAyNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjYsIC52YWwgPSAyNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjcsIC52YWwgPSAyNywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjgsIC52YWwgPSAyOCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjksIC52YWwgPSAyOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzAsIC52YWwgPSAzMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzEsIC52YWwgPSAzMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzIsIC52YWwgPSAzMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCisvKiBEUExMMSAqLworLyogTVBVIGNsb2NrIHNvdXJjZSAqLworLyogVHlwZTogRFBMTCAqLworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDFfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwxX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0ZSRVFTRUxfTUFTSywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLRU5fUExMKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9NUFVfRFBMTF9NQVNLLAorCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX01QVV9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9NUFVfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCksCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX01QVV9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGwxX2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKKy8qCisgKiBUaGlzIHZpcnR1YWwgY2xvY2sgcHJvdmlkZXMgdGhlIENMS09VVFgyIG91dHB1dCBmcm9tIHRoZSBEUExMIGlmIHRoZQorICogRFBMTCBpc24ndCBieXBhc3NlZC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwxX3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogT24gRFBMTDEsIHVubGlrZSBvdGhlciBEUExMcywgdGhlIGRpdmlkZXIgaXMgZG93bnN0cmVhbSBmcm9tIENMS09VVFgyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsMV94Ml9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIERvZXMgbm90IGV4aXN0IGluIHRoZSBUUk0gLSBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlIE0yIGRpdmlkZXIgZnJvbQorICogYnlwYXNzIHNlbGVjdGlvbiBpbiBtcHVfY2sKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfeDJtMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDFfeDJtMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDFfeDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDFfeDJtMl9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEUExMMiAqLworLyogSVZBMiBjbG9jayBzb3VyY2UgKi8KKy8qIFR5cGU6IERQTEwgKi8KKworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDJfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwyX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9NQVNLLAorCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSB8CisJCQkJKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSwKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9JVkEyX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9NUFVfSVZBMl9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX01QVV9JVkEyX0RQTExfU1RfU0hJRlQsCisJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAorCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKKwkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX2NrID0geworCS5uYW1lCQk9ICJkcGxsMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDJfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDJfbTJ4Ml9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDJfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qCisgKiBUaGUgVFJNIGlzIGNvbmZsaWN0ZWQgb24gd2hldGhlciBJVkEyIGNsb2NrIGNvbWVzIGZyb20gRFBMTDIgQ0xLT1VUCisgKiBvciBDTEtPVVRYMi4gQ0xLT1VUIHNlZW1zIG1vc3QgcGxhdXNpYmxlLgorICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDJfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwyX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCisJCQkJCSAgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBEUExMMworICogU291cmNlIGNsb2NrIGZvciBhbGwgaW50ZXJmYWNlcyBhbmQgZm9yIHNvbWUgZGV2aWNlIGZjbGtzCisgKiBSRVZJU0lUOiBBbHNvIHN1cHBvcnRzIGZhc3QgcmVsb2NrIGJ5cGFzcyAtIG5vdCBpbmNsdWRlZCBiZWxvdworICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsM19kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfTUFTSywKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfQ09SRV9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfU1RfU0hJRlQsCisJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX0NPUkVfRFBMTF9NQVNLLAorCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCisJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAorCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsM19kZCwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCisgKiBEUExMIGlzbid0IGJ5cGFzc2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsM194Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MzFfZHBsbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNywgLnZhbCA9IDE3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxOCwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxOSwgLnZhbCA9IDE5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMCwgLnZhbCA9IDIwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMSwgLnZhbCA9IDIxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMiwgLnZhbCA9IDIyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMywgLnZhbCA9IDIzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNCwgLnZhbCA9IDI0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNSwgLnZhbCA9IDI1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNiwgLnZhbCA9IDI2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNywgLnZhbCA9IDI3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyOCwgLnZhbCA9IDI4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyOSwgLnZhbCA9IDI5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAzMCwgLnZhbCA9IDMwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAzMSwgLnZhbCA9IDMxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYzMV9kcGxsM20yX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsM19jaywgLnJhdGVzID0gZGl2MzFfZHBsbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIERQTEwzIG91dHB1dCBNMiAtIHByaW1hcnkgY29udHJvbCBwb2ludCBmb3IgQ09SRSBzcGVlZCAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYzMV9kcGxsM20yX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX20yeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX20yX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsM19jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGwzX20zeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zX2NrID0geworCS5uYW1lCQk9ICJkcGxsM19tM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGwzX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTN4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsM19tM19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfQ09SRV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW11X2NvcmVfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9jb3JlX2Fsd29uX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tM3gyX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTDQgKi8KKy8qIFN1cHBsaWVzIDk2TUh6LCA1NE1oeiBUViBEQUMsIERTUyBmY2xrLCBDQU0gc2Vuc29yIGNsb2NrLCBlbXVsIHRyYWNlIGNsayAqLworLyogVHlwZTogRFBMTCAqLworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDRfZGQ7CitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZF8zNHh4IF9faW5pdGRhdGEgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMiksCisJLm11bHRfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRlJFUVNFTF9NQVNLLAorCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfTUFTSywKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BFUklQSF9EUExMX1NUX1NISUZULAorCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQVVUT0lETEUpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19QRVJJUEhfRFBMTF9NQVNLLAorCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZF8zNjMwIF9faW5pdGRhdGEgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMiksCisJLm11bHRfbWFzawk9IE9NQVAzNjMwX1BFUklQSF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIgPSBPTUFQMzYzMF9NQVhfSlRZUEVfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCisJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAorCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRSwKKwkuZmxhZ3MJCT0gRFBMTF9KX1RZUEUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKKyAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KKyAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPworICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMyX2RwbGw0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsNF9jaywgLnJhdGVzID0gZGl2MzJfZHBsbDRfcmF0ZXNfMzYzMCB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20yeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDMpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl85Nk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrXzM2MzAgX19pbml0ZGF0YSAgPSB7CisJLm5hbWUJCT0gImRwbGw0X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDMpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNjMwX0RJVl85Nk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjMyX2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTJ4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tMl9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl85Nk1fU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKKy8qCisgKiBEUExMNCBnZW5lcmF0ZXMgRFBMTDRfTTJYMl9DTEsgd2hpY2ggaXMgdGhlbiByb3V0ZWQgaW50byB0aGUgUFJNIGFzCisgKiBQUk1fOTZNX0FMV09OXyhGKUNMSy4gIFR3byBjbG9ja3MgdGhlbiBlbWVyZ2UgZnJvbSB0aGUgUFJNOgorICogOTZNX0FMV09OX0ZDTEsgKGNhbGxlZCAib21hcF85Nm1fYWx3b25fZmNrIiBiZWxvdykgYW5kCisgKiBDTV85NktfKEYpQ0xLLgorICovCisKKy8qIEFkZGluZyAxOTJNSHogQ2xvY2sgbm9kZSBuZWVkZWQgYnkgU0dYICovCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzE5Mm1fYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzE5Mm1fYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfOTZtX2Fsd29uX2Zja19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm9tYXBfMTkybV9hbHdvbl9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2Fsd29uX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9kcGxsX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9hbHdvbl9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDRfbTJ4Ml9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fYWx3b25fZmNrXzM2MzAgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8xOTJtX2Fsd29uX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY21fOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY21fOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF85Nm1fYWx3b25fZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgLnJhdGVzID0gb21hcF85Nm1fc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20zeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zX2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX1RWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYzMl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fVFZfU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF81NG1fZDRtM3gyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzU0bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfbTN4Ml9jaywgLnJhdGVzID0gb21hcF81NG1fZDRtM3gyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19hbHRjbGssICAgIC5yYXRlcyA9IG9tYXBfNTRtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF81NG1fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzU0bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzU0TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF81NG1fY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNDhtX2NtOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMiwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzQ4bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fY205Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgLnJhdGVzID0gb21hcF80OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzQ4bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNDhNX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTJtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF8xMm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmZpeGVkX2Rpdgk9IDQsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKy8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2s7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200X2NrXzM0eHggX19pbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNF9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X200X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX0RTUzFfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjMyX2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNV9ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNV9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX0NBTV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MzJfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X201eDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTVfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fQ0FNX1NISUZULAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTZ4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZfY2s7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrXzM0eHggX19pbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTZfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWX0RQTEw0X01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNl9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X202X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNjMwX0RJVl9EUExMNF9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MzJfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X202X2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9wZXJfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9wZXJfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X202eDJfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMNSAqLworLyogU3VwcGxpZXMgMTIwTUh6IGNsb2NrLCBVU0lNIHNvdXJjZSBjbG9jayAqLworLyogVHlwZTogRFBMTCAqLworLyogMzQzMEVTMiBvbmx5ICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw0KSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0FVVE9JRExFMl9QTEwpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBFUzJfQVVUT19QRVJJUEgyX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGw1X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsNV9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw1X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0RJVl8xMjBNX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY185Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjXzU0bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNsa291dDJfc3JjX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKKwkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3lzX2Nsa291dDJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0Ml9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY2xrb3V0Ml9zcmNfY2ssIC5yYXRlcyA9IHN5c19jbGtvdXQyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogQ00gT1VUUFVUIENMT0NLUyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JleDJfZmNrID0geworCS5uYW1lCQk9ICJjb3JleDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMIHBvd2VyIGRvbWFpbiBjbG9jayBjb250cm9scyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIFJFVklTSVQ6IEFyZSB0aGVzZSBpbiBEUExMIHBvd2VyIGRvbWFpbiBvciBDTSBwb3dlciBkb21haW4/IGRvY3MKKyAqIG1heSBiZSBpbmNvbnNpc3RlbnQgaGVyZT8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrID0geworCS5uYW1lCQk9ICJkcGxsMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKKwkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAorCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGFybV9mY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFybV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1wdV9jaywgLnJhdGVzID0gYXJtX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2ZjayA9IHsKKwkubmFtZQkJPSAiYXJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5jbGtzZWwJCT0gYXJtX2Zja19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCisKKy8qCisgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKKyAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X21wdV9hbHdvbl9jayA9IHsKKwkubmFtZQkJPSAiZW11X21wdV9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9DTEtfU1JDX01BU0ssCisJLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0geworCS5uYW1lCQk9ICJpdmEyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGwyX20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJpdmEyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ29tbW9uIGludGVyZmFjZSBjbG9ja3MgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9jb3JlX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBsM19pY2sgPSB7CisJLm5hbWUJCT0gImwzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MM19NQVNLLAorCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9sM19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDNfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBsNF9pY2sgPSB7CisJLm5hbWUJCT0gImw0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0w0X01BU0ssCisJLmNsa3NlbAkJPSBkaXYyX2wzX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2w0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsNF9pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJtX2ljayA9IHsKKwkubmFtZQkJPSAicm1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjJfbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBHRlggcG93ZXIgZG9tYWluICovCisKKy8qIEdGWCBjbG9ja3MgYXJlIGluIDM0MzBFUzEgb25seS4gMzQzMEVTMiBhbmQgbGF0ZXIgdXNlcyB0aGUgU0dYIGluc3RlYWQgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZ2Z4X2wzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsM19pY2ssIC5yYXRlcyA9IGdmeF9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7CisJLm5hbWUJCT0gImdmeF9sM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfbDNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2ljayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMV9jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2NnMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZnZnhfbDNfZmNrLCAvKiBSRVZJU0lUOiBjb3JyZWN0PyAqLworCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8yRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CisJLm5hbWUJCT0gImdmeF9jZzJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fM0RfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTR1ggcG93ZXIgZG9tYWluIC0gMzQzMEVTMiBvbmx5ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc2d4X2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfMTkybV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfY29yZXgyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMywgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNneF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJIC5yYXRlcyA9IHNneF9jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IHNneF85Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmb21hcF8xOTJtX2Fsd29uX2ZjaywgLnJhdGVzID0gc2d4XzE5Mm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZXgyX2ZjaywgLnJhdGVzID0gc2d4X2NvcmV4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKKwkubmFtZQkJPSAic2d4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKKwkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNneF9pY2sgPSB7CisJLm5hbWUJCT0gInNneF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFIHBvd2VyIGRvbWFpbiAqLworCitzdGF0aWMgc3RydWN0IGNsayBkMmRfMjZtX2ZjayA9IHsKKwkubmFtZQkJPSAiZDJkXzI2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0QyRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtb2RlbV9mY2sgPSB7CisJLm5hbWUJCT0gIm1vZGVtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU9ERU1fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2FkMmRfaWNrID0geworCS5uYW1lCQk9ICJzYWQyZF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NBRDJEX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1hZDJkX2ljayA9IHsKKwkubmFtZQkJPSAibWFkMmRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUQyRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMzQzeF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm9tYXBfMzJrX2ZjaywgLnJhdGVzID0gZ3B0XzMya19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgIC5yYXRlcyA9IGdwdF9zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwZWZ1c2VfZmNrID0geworCS5uYW1lCQk9ICJjcGVmdXNlX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRzX2ZjayA9IHsKKwkubmFtZQkJPSAidHNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVFNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9mY2sgPSB7CisJLm5hbWUJCT0gInVzYnRsbF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ09SRSA5Nk0gRkNMSy1kZXJpdmVkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0geworCS5uYW1lCQk9ICJpMmMzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBNQ0JTUCAxICYgNSBnZXQgdGhlaXIgOTZNSHogY2xvY2sgZnJvbSBjb3JlXzk2bV9mY2s7CisgKiBNQ0JTUCAyLCAzLCA0IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIHBlcl85Nm1fZmNrLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYnNwXzE1X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlXzk2bV9mY2ssIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAorCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0geworCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGk0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnNob3N0dXNiX2ZjayA9IHsKKwkubmFtZQkJPSAiZnNob3N0dXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFXzEyTV9GQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfMTJtX2ZjayA9IHsKKwkubmFtZQkJPSAiY29yZV8xMm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzEybV9mY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9mY2sgPSB7CisJLm5hbWUJCT0gImhkcV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV8xMm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTDMtZGVyaXZlZCBjbG9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3JfY29yZXgyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzc2lfc3NyX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JleDJfZmNrLCAucmF0ZXMgPSBzc2lfc3NyX2NvcmV4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9mY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAic3NpX3Nzcl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKKwkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMyID0geworCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKKwkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3N0X2Zja18zNDMwZXMxID0geworCS5uYW1lCQk9ICJzc2lfc3N0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3NpX3Nzcl9mY2tfMzQzMGVzMSwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAic3NpX3NzdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCisJLmZpeGVkX2Rpdgk9IDIsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKworCisvKiBDT1JFX0wzX0lDSyBiYXNlZCBjbG9ja3MgKi8KKworLyoKKyAqIFhYWCBtdXN0IGFkZCBjbGtfZW5hYmxlL2Nsa19kaXNhYmxlIGZvciB0aGVzZSBpZiBzdGFuZGFyZCBjb2RlIHdvbid0CisgKiBoYW5kbGUgaXQKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja18zNDMwZXMxID0geworCS5uYW1lCQk9ICJoc290Z3VzYl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfaHNvdGd1c2Jfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NEUkNfU0hJRlQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwgLyogaHVoPyAqLworCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTRUNVUklUWV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyaXR5X2wzX2ljayA9IHsKKwkubmFtZQkJPSAic2VjdXJpdHlfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1BLQV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ09SRV9MNF9JQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2J0bGxfaWNrID0geworCS5uYW1lCQk9ICJ1c2J0bGxfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMzX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CisJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKKwkubmFtZQkJPSAic2hhMTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKKwkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0geworCS5uYW1lCQk9ICJoZHFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hEUV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGk0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0geworCS5uYW1lCQk9ICJpMmMzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0geworCS5uYW1lCQk9ICJncHQxMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CisJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRkFDX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0geworCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BSUxCT1hFU19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTU0lfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAic3NpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3NpX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAic3NpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0LAorCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBSRVZJU0lUOiBUZWNobmljYWxseSB0aGUgVFJNIGNsYWltcyB0aGF0IHRoaXMgaXMgQ09SRV9DTEsgYmFzZWQsCisgKiBidXQgbDRfaWNrIG1ha2VzIG1vcmUgc2Vuc2UgdG8gbWUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNiX2w0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsNF9pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0geworCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZTSE9TVFVTQl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMV9DTEtTRUxfRlNIT1NUVVNCX01BU0ssCisJLmNsa3NlbAkJPSB1c2JfbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBTRUNVUklUWV9MNF9JQ0syIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sNF9pY2syID0geworCS5uYW1lCQk9ICJzZWN1cml0eV9sNF9pY2syIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfaWNrID0geworCS5uYW1lCQk9ICJhZXMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9STkdfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYTExX2ljayA9IHsKKwkubmFtZQkJPSAic2hhMTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlczFfaWNrID0geworCS5uYW1lCQk9ICJkZXMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RFUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERTUyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX3R2X2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzX3R2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmb21hcF81NG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9hbHdvbl9mY2sgPSB7CisJLm5hbWUJCT0gImRzczJfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2lja18zNDMwZXMxID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2lja18zNDMwZXMyID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ0FNICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9tY2xrID0geworCS5uYW1lCQk9ICJjYW1fbWNsayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTV4Ml9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NpMl85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjc2kyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ1NJMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBVU0JIT1NUIC0gMzQzMEVTMiBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfMTIwbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzYmhvc3RfMTIwbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAidXNiaG9zdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFdLVVAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2ltXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsICAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNCwgIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2ltXzEyMG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSA0LCAgLnZhbCA9IDcsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDgsICAudmFsID0gOCwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA5LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAyMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2ltX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9mY2ssCS5yYXRlcyA9IHVzaW1fOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw1X20yX2NrLAkucmF0ZXMgPSB1c2ltXzEyMG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIDM0MzBFUzIgb25seSAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9VU0lNT0NQX01BU0ssCisJLmNsa3NlbAkJPSB1c2ltX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogWFhYIHNob3VsZCBncHQxJ3MgY2xrc2VsIGhhdmUgd2t1cF8zMmtfZmNrIGFzIHRoZSAzMmsgb3B0PyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3a3VwXzMya19mY2sgPSB7CisJLm5hbWUJCT0gIndrdXBfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMV9kYmNrID0geworCS5uYW1lCQk9ICJncGlvMV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0Ml9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfMzJrX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfbDRfaWNrID0geworCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiAzNDMwRVMyIG9ubHkgKi8KKy8qIE5ldmVyIHNwZWNpZmljYWxseSBuYW1lZCBpbiB0aGUgVFJNLCBzbyB3ZSBoYXZlIHRvIGluZmVyIGEgbGlrZWx5IG5hbWUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1faWNrID0geworCS5uYW1lCQk9ICJ1c2ltX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrc3luY19pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfMzJrc3luY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisKKworLyogUEVSIGNsb2NrIGRvbWFpbiAqLworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAicGVyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAicGVyXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ0X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0geworCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl8zMmtfYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJwZXJfMzJrX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9kYmNrID0geworCS5uYW1lCQk9ICJncGlvNV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfZGJjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzRfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9kYmNrID0geworCS5uYW1lCQk9ICJncGlvMl9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19mY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInBlcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNF9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8yX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AzX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogRU1VIGNsb2NrcyAqLworCisvKiBNb3JlIGluZm9ybWF0aW9uOiBBUk0gQ29ydGV4LUE4IFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsLCBzZWN0IDEwLjEgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfcGVyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19tcHVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZW11X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gZW11X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZW11X2NvcmVfYWx3b25fY2ssIC5yYXRlcyA9IGVtdV9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZlbXVfcGVyX2Fsd29uX2NrLAkucmF0ZXMgPSBlbXVfc3JjX3Blcl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZlbXVfbXB1X2Fsd29uX2NrLAkucmF0ZXMgPSBlbXVfc3JjX21wdV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qCisgKiBMaWtlIHRoZSBjbGtvdXRfc3JjIGNsb2NrcywgZW11X3NyY19jbGsgaXMgYSB2aXJ0dWFsIGNsb2NrLCBleGlzdGluZyBvbmx5CisgKiB0byBzd2l0Y2ggdGhlIHNvdXJjZSBvZiBzb21lIG9mIHRoZSBFTVUgY2xvY2tzLgorICogWFhYIEFyZSB0aGVyZSBDTEtFTiBiaXRzIGZvciB0aGVzZSBFTVUgY2xrcz8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X3NyY19jayA9IHsKKwkubmFtZQkJPSAiZW11X3NyY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLLAorCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xrX2VtdV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwY2xrX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa19lbXVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwY2xrX2ZjayA9IHsKKwkubmFtZQkJPSAicGNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSywKKwkuY2xrc2VsCQk9IHBjbGtfZW11X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHBjbGt4Ml9lbXVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwY2xreDJfZW11X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBwY2xreDJfZW11X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGNsa3gyX2ZjayA9IHsKKwkubmFtZQkJPSAicGNsa3gyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS1gyX01BU0ssCisJLmNsa3NlbAkJPSBwY2xreDJfZW11X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhdGNsa19lbXVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdGNsa19mY2sgPSB7CisJLm5hbWUJCT0gImF0Y2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfTUFTSywKKwkuY2xrc2VsCQk9IGF0Y2xrX2VtdV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfc3JjX2ZjayA9IHsKKwkubmFtZQkJPSAidHJhY2VjbGtfc3JjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAorCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB0cmFjZWNsa19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHRyYWNlY2xrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZ0cmFjZWNsa19zcmNfZmNrLCAucmF0ZXMgPSB0cmFjZWNsa19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX2ZjayA9IHsKKwkubmFtZQkJPSAidHJhY2VjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9UUkFDRUNMS19NQVNLLAorCS5jbGtzZWwJCT0gdHJhY2VjbGtfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFNSIGNsb2NrcyAqLworCisvKiBTbWFydFJlZmxleCBmY2xrIChWREQxKSAqLworc3RhdGljIHN0cnVjdCBjbGsgc3IxX2ZjayA9IHsKKwkubmFtZQkJPSAic3IxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDIpICovCitzdGF0aWMgc3RydWN0IGNsayBzcjJfZmNrID0geworCS5uYW1lCQk9ICJzcjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3JfbDRfaWNrID0geworCS5uYW1lCQk9ICJzcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTRUNVUkVfMzJLX0ZDSyBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDbG9ja3MgZm9yIEFNMzVYWCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXBzc19pY2sgPSB7CisJLm5hbWUJCT0gImlwc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3Nfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfRU5fSVBTU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW1hY19pY2sgPSB7CisJLm5hbWUJCT0gImVtYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3NfbW9kdWxlX3dhaXQsCisJLnBhcmVudAkJPSAmaXBzc19pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfQ1BHTUFDX1ZCVVNQX0NMS19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcm1paV9jayA9IHsKKwkubmFtZQkJPSAicm1paV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gNTAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlbWFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZW1hY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnJtaWlfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfQ1BHTUFDX0ZDTEtfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja19hbTM1eHggPSB7CisJLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX2FtMzV4eF9pcHNzX21vZHVsZV93YWl0LAorCS5wYXJlbnQJCT0gJmlwc3NfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX1VTQk9UR19WQlVTUF9DTEtfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2Zja19hbTM1eHggPSB7CisJLm5hbWUJCT0gImhzb3RndXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX1VTQk9UR19GQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZWNjX2NrID0geworCS5uYW1lCQk9ICJoZWNjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3NfbW9kdWxlX3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX0hFQ0NfVkJVU1BfQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2cGZlX2ljayA9IHsKKwkubmFtZQkJPSAidnBmZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19hbTM1eHhfaXBzc19tb2R1bGVfd2FpdCwKKwkucGFyZW50CQk9ICZpcHNzX2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihBTTM1WFhfQ09OVFJPTF9JUFNTX0NMS19DVFJMKSwKKwkuZW5hYmxlX2JpdAk9IEFNMzVYWF9WUEZFX1ZCVVNQX0NMS19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGNsa19jayA9IHsKKwkubmFtZQkJPSAicGNsa19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMjcwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2cGZlX2ZjayA9IHsKKwkubmFtZQkJPSAidnBmZV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBjbGtfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfVlBGRV9GQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIFVBUlQxLzIgZnVuY3Rpb25hbCBjbG9jayBhY3RzIGFzIHRoZSBmdW5jdGlvbmFsCisgKiBjbG9jayBmb3IgVUFSVDQuIE5vIHNlcGFyYXRlIGZjbGsgY29udHJvbCBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2lja19hbTM1eHggPSB7CisJLm5hbWUJCT0gInVhcnQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfRU5fVUFSVDRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKworLyoKKyAqIGNsa2RldgorICovCisKKy8qIFhYWCBBdCBzb21lIHBvaW50IHdlIHNob3VsZCByZW5hbWUgdGhpcyBmaWxlIHRvIGNsb2NrM3h4eF9kYXRhLmMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDN4eHhfY2xrc1tdID0geworCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAorCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJvc2Nfc3lzX2NrIiwJJm9zY19zeXNfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJzeXNfYWx0Y2xrIiwJJnN5c19hbHRjbGssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkibWNic3BfY2xrcyIsCSZtY2JzcF9jbGtzLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQxIiwJJnN5c19jbGtvdXQxLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX2NrIiwJJmRwbGwxX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gyX2NrIiwJJmRwbGwxX3gyX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gybTJfY2siLCAmZHBsbDFfeDJtMl9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9jayIsCSZkcGxsMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19jayIsCSZkcGxsM19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfeDJfY2siLAkmZHBsbDNfeDJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJfY2siLAkmZHBsbDNfbTJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJ4Ml9jayIsICZkcGxsM19tMngyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zX2NrIiwJJmRwbGwzX20zX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zeDJfY2siLCAmZHBsbDNfbTN4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKCJldGIiLAkiZW11X2NvcmVfYWx3b25fY2siLCAmZW11X2NvcmVfYWx3b25fY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfY2siLAkmZHBsbDRfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfeDJfY2siLAkmZHBsbDRfeDJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF8xOTJtX2Fsd29uX2ZjayIsICZvbWFwXzE5Mm1fYWx3b25fZmNrLCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfOTZtX2Fsd29uX2ZjayIsICZvbWFwXzk2bV9hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF85Nm1fZmNrIiwJJm9tYXBfOTZtX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjbV85Nm1fZmNrIiwJJmNtXzk2bV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF81NG1fZmNrIiwJJm9tYXBfNTRtX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJvbWFwXzQ4bV9mY2siLAkmb21hcF80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfMTJtX2ZjayIsCSZvbWFwXzEybV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTJfY2siLAkmZHBsbDRfbTJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTJ4Ml9jayIsICZkcGxsNF9tMngyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20zX2NrIiwJJmRwbGw0X20zX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20zeDJfY2siLCAmZHBsbDRfbTN4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNF9jayIsCSZkcGxsNF9tNF9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNHgyX2NrIiwgJmRwbGw0X200eDJfY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTVfY2siLAkmZHBsbDRfbTVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTV4Ml9jayIsICZkcGxsNF9tNXgyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X202X2NrIiwJJmRwbGw0X202X2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X202eDJfY2siLCAmZHBsbDRfbTZ4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKCJldGIiLAkiZW11X3Blcl9hbHdvbl9jayIsICZlbXVfcGVyX2Fsd29uX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw1X2NrIiwJJmRwbGw1X2NrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImRwbGw1X20yX2NrIiwJJmRwbGw1X20yX2NrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImNsa291dDJfc3JjX2NrIiwgJmNsa291dDJfc3JjX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImNvcmV4Ml9mY2siLAkmY29yZXgyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsMV9mY2siLAkmZHBsbDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiYXJtX2ZjayIsCSZhcm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoImV0YiIsCSJlbXVfbXB1X2Fsd29uX2NrIiwgJmVtdV9tcHVfYWx3b25fY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDJfZmNrIiwJJmRwbGwyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJpdmEyX2NrIiwJJml2YTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibDNfaWNrIiwJJmwzX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJsNF9pY2siLAkmbDRfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInJtX2ljayIsCSZybV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2NrIiwJJmdmeF9sM19jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfbDNfZmNrIiwJJmdmeF9sM19mY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2ljayIsCSZnZnhfbDNfaWNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9jZzFfY2siLAkmZ2Z4X2NnMV9jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfY2cyX2NrIiwJJmdmeF9jZzJfY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic2d4X2ZjayIsCSZzZ3hfZmNrLAlDS18zNDMwRVMyIHwgQ0tfMzUxNyksCisJQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIgfCBDS18zNTE3KSwKKwlDTEsoTlVMTCwJImQyZF8yNm1fZmNrIiwJJmQyZF8yNm1fZmNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJIm1vZGVtX2ZjayIsCSZtb2RlbV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2FkMmRfaWNrIiwJJnNhZDJkX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtYWQyZF9pY2siLAkmbWFkMmRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjcGVmdXNlX2ZjayIsCSZjcGVmdXNlX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ0c19mY2siLAkmdHNfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJjb3JlXzk2bV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCSZtbWNoczNfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiZmNrIiwJJm1jc3BpNF9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImZzaG9zdHVzYl9mY2siLCAmZnNob3N0dXNiX2ZjaywgQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJjb3JlXzEybV9mY2siLAkmY29yZV8xMm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInNzaV9zc3RfZmNrIiwJJnNzaV9zc3RfZmNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjb3JlX2wzX2ljayIsCSZjb3JlX2wzX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9sNF9pY2siLAkmY29yZV9sNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidXNidGxsX2ljayIsCSZ1c2J0bGxfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJhZXMyX2ljayIsCSZhZXMyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzaGExMl9pY2siLAkmc2hhMTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRlczJfaWNrIiwJJmRlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCSZtbWNoczFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS40IiwgImljayIsCSZtY3NwaTRfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sNF9pY2syIiwgJnNlY3VyaXR5X2w0X2ljazIsIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTExX2ljayIsCSZzaGExMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMxLCBDS18zNDMwRVMxKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9hbHdvbl9mY2tfMzQzMGVzMiwgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKCJvbWFwZHNzIiwJInR2X2ZjayIsCSZkc3NfdHZfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBkc3MiLAkidmlkZW9fZmNrIiwJJmRzc185Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCisJQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMyLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImNhbV9tY2xrIiwJJmNhbV9tY2xrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNhbV9pY2siLAkmY2FtX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjc2kyXzk2bV9mY2siLAkmY3NpMl85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfMTIwbV9mY2siLCAmdXNiaG9zdF8xMjBtX2ZjaywgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ1c2Job3N0XzQ4bV9mY2siLCAmdXNiaG9zdF80OG1fZmNrLCBDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfaWNrIiwJJnVzYmhvc3RfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzaW1fZmNrIiwJJnVzaW1fZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIndrdXBfMzJrX2ZjayIsCSZ3a3VwXzMya19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzFfZGJjayIsCSZncGlvMV9kYmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmd2R0Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkid2t1cF9sNF9pY2siLAkmd2t1cF9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidXNpbV9pY2siLAkmdXNpbV9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZ3ZHQyX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ljayIsCSZ3ZHQxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvMV9pY2siLAkmZ3BpbzFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfMzJrc3luY19pY2siLCAmb21hcF8zMmtzeW5jX2ljaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInBlcl85Nm1fZmNrIiwJJnBlcl85Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInBlcl80OG1fZmNrIiwJJnBlcl80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkicGVyXzMya19hbHdvbl9mY2siLCAmcGVyXzMya19hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzZfZGJjayIsCSZncGlvNl9kYmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW81X2RiY2siLAkmZ3BpbzVfZGJjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvNF9kYmNrIiwJJmdwaW80X2RiY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzNfZGJjayIsCSZncGlvM19kYmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW8yX2RiY2siLAkmZ3BpbzJfZGJjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ZjayIsCSZ3ZHQzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwZXJfbDRfaWNrIiwJJnBlcl9sNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzZfaWNrIiwJJmdwaW82X2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvNV9pY2siLAkmZ3BpbzVfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW80X2ljayIsCSZncGlvNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzNfaWNrIiwJJmdwaW8zX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvMl9pY2siLAkmZ3BpbzJfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmbWNic3AzX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzNYWFgpLAorCUNMSygiZXRiIiwJImVtdV9zcmNfY2siLAkmZW11X3NyY19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwY2xrX2ZjayIsCSZwY2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwY2xreDJfZmNrIiwJJnBjbGt4Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiYXRjbGtfZmNrIiwJJmF0Y2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ0cmFjZWNsa19zcmNfZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkidHJhY2VjbGtfZmNrIiwJJnRyYWNlY2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3IyX2ZjayIsCSZzcjJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyX2w0X2ljayIsCSZzcl9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJpcHNzX2ljayIsCSZpcHNzX2ljaywJQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInJtaWlfY2siLAkmcm1paV9jaywJQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInBjbGtfY2siLAkmcGNsa19jaywJQ0tfQU0zNVhYKSwKKwlDTEsoImRhdmluY2lfZW1hYyIsCSJpY2siLAkJJmVtYWNfaWNrLAlDS19BTTM1WFgpLAorCUNMSygiZGF2aW5jaV9lbWFjIiwJImZjayIsCQkmZW1hY19mY2ssCUNLX0FNMzVYWCksCisJQ0xLKCJ2cGZlLWNhcHR1cmUiLAkibWFzdGVyIiwJJnZwZmVfaWNrLAlDS19BTTM1WFgpLAorCUNMSygidnBmZS1jYXB0dXJlIiwJInNsYXZlIiwJJnZwZmVfZmNrLAlDS19BTTM1WFgpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCQkmaHNvdGd1c2JfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKKwlDTEsoIm11c2JfaGRyYyIsCSJmY2siLAkJJmhzb3RndXNiX2Zja19hbTM1eHgsCUNLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJoZWNjX2NrIiwJJmhlY2NfY2ssCUNLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0NF9pY2siLAkmdWFydDRfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKK307CisKKworaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX2NsayAqYzsKKwl1MzIgY3B1X2Nsa2ZsZyA9IENLXzNYWFg7CisKKwlpZiAoY3B1X2lzX29tYXAzNTE3KCkpIHsKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzM0M1ggfCBSQVRFX0lOXzM0MzBFUzI7CisJCWNwdV9jbGtmbGcgfD0gQ0tfMzUxNzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzUwNSgpKSB7CisJCWNwdV9tYXNrID0gUkFURV9JTl8zNDNYIHwgUkFURV9JTl8zNDMwRVMyOworCQljcHVfY2xrZmxnIHw9IENLXzM1MDU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQljcHVfbWFzayA9IFJBVEVfSU5fMzQzWDsKKwkJY3B1X2Nsa2ZsZyB8PSBDS18zNDNYOworCisJCS8qCisJCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKKwkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKKwkJICovCisJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKKwkJfSBlbHNlIHsKKwkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMjsKKwkJfQorCX0KKwlpZiAob21hcDNfaGFzXzE5Mm1oel9jbGsoKSkKKwkJb21hcF85Nm1fYWx3b25fZmNrID0gb21hcF85Nm1fYWx3b25fZmNrXzM2MzA7CisKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkpIHsKKwkJY3B1X21hc2sgfD0gUkFURV9JTl8zNlhYOworCQljcHVfY2xrZmxnIHw9IENLXzM2WFg7CisKKwkJLyoKKwkJICogWFhYIFRoaXMgdHlwZSBvZiBkeW5hbWljIHJld3JpdGluZyBvZiB0aGUgY2xvY2sgdHJlZSBpcworCQkgKiBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmV2aXNlZCBzb29uLgorCQkgKi8KKwkJZHBsbDRfbTJfY2sgPSBkcGxsNF9tMl9ja18zNjMwOworCQlkcGxsNF9tM19jayA9IGRwbGw0X20zX2NrXzM2MzA7CisJCWRwbGw0X200X2NrID0gZHBsbDRfbTRfY2tfMzYzMDsKKwkJZHBsbDRfbTVfY2sgPSBkcGxsNF9tNV9ja18zNjMwOworCQlkcGxsNF9tNl9jayA9IGRwbGw0X202X2NrXzM2MzA7CisKKwkJLyoKKwkJICogRm9yIDM2MzA6IG92ZXJyaWRlIGNsa29wc19vbWFwMl9kZmx0X3dhaXQgZm9yIHRoZQorCQkgKiBjbG9ja3MgYWZmZWN0ZWQgZnJvbSBQV1JETiByZXNldCBMaW1pdGF0aW9uCisJCSAqLworCQlkcGxsM19tM3gyX2NrLm9wcyA9CisJCQkJJmNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKwkJZHBsbDRfbTJ4Ml9jay5vcHMgPQorCQkJCSZjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmU7CisJCWRwbGw0X20zeDJfY2sub3BzID0KKwkJCQkmY2xrb3BzX29tYXAzNnh4X3B3cmRuX3dpdGhfaHNkaXZfd2FpdF9yZXN0b3JlOworCQlkcGxsNF9tNHgyX2NrLm9wcyA9CisJCQkJJmNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKwkJZHBsbDRfbTV4Ml9jay5vcHMgPQorCQkJCSZjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmU7CisJCWRwbGw0X202eDJfY2sub3BzID0KKwkJCQkmY2xrb3BzX29tYXAzNnh4X3B3cmRuX3dpdGhfaHNkaXZfd2FpdF9yZXN0b3JlOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFhYWCBUaGlzIHR5cGUgb2YgZHluYW1pYyByZXdyaXRpbmcgb2YgdGhlIGNsb2NrIHRyZWUgaXMKKwkJICogZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJldmlzZWQgc29vbi4KKwkJICovCisJCWRwbGw0X20yX2NrID0gZHBsbDRfbTJfY2tfMzR4eDsKKwkJZHBsbDRfbTNfY2sgPSBkcGxsNF9tM19ja18zNHh4OworCQlkcGxsNF9tNF9jayA9IGRwbGw0X200X2NrXzM0eHg7CisJCWRwbGw0X201X2NrID0gZHBsbDRfbTVfY2tfMzR4eDsKKwkJZHBsbDRfbTZfY2sgPSBkcGxsNF9tNl9ja18zNHh4OworCX0KKworCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKKwkJZHBsbDRfZGQgPSBkcGxsNF9kZF8zNjMwOworCWVsc2UKKwkJZHBsbDRfZGQgPSBkcGxsNF9kZF8zNHh4OworCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCisJZm9yIChjID0gb21hcDN4eHhfY2xrczsgYyA8IG9tYXAzeHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzeHh4X2Nsa3MpOworCSAgICAgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDN4eHhfY2xrczsgYyA8IG9tYXAzeHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzeHh4X2Nsa3MpOworCSAgICAgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X2Nsa2ZsZykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOworCQl9CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9Db3JlL01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKG9zY19zeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICAoY29yZV9jay5yYXRlIC8gMTAwMDAwMCksIChhcm1fZmNrLnJhdGUgLyAxMDAwMDAwKSk7CisKKwkvKgorCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycworCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5CisJICovCisJY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOworCisJLyoKKwkgKiBMb2NrIERQTEw1IGFuZCBwdXQgaXQgaW4gYXV0b2lkbGUuCisJICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMl8wKQorCQlvbWFwM19jbGtfbG9ja19kcGxsNSgpOworCisJLyogQXZvaWQgc2xlZXBpbmcgZHVyaW5nIG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSgpICovCisJc2RyY19pY2tfcCA9IGNsa19nZXQoTlVMTCwgInNkcmNfaWNrIik7CisJYXJtX2Zja19wID0gY2xrX2dldChOVUxMLCAiYXJtX2ZjayIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3MDg2OC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIE9NQVA0LXNwZWNpZmljIGNsb2NrIGZyYW1ld29yayBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBSYWplbmRyYSBOYXlhayAocm5heWFrQHRpLmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgImNsb2NrLmgiCi0KLXN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7Ci0JLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKLQkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCi0JLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAotCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAotCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKLQkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAotfTsKLQotY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wcyA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAotfTsKLQotdm9pZCBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpCi17Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4LmgKaW5kZXggNTliOWNlZC4uNmJlMTA5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5oCkBAIC0yLDE0ICsyLDE5IEBACiAgKiBPTUFQNCBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICovCiAKLSNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLXzQ0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfNDRYWF9ICisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0s0NFhYX0gKIAotI2RlZmluZSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxUCTIwNDgKKy8qCisgKiBYWFggTWlzc2luZyB2YWx1ZXMgZm9yIHRoZSBPTUFQNCBEUExMX1VTQgorICogWFhYIE1pc3NpbmcgbWluX211bHRpcGxpZXIgdmFsdWVzIGZvciBhbGwgT01BUDQgRFBMTHMKKyAqLworI2RlZmluZSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxUCTIwNDcKICNkZWZpbmUgT01BUDQ0MzBfTUFYX0RQTExfRElWCTEyOAogCi1leHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wczsKK2ludCBvbWFwNHh4eF9jbGtfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKaW5kZXggOWQ4ODJiYy4uMjhiMTA3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPTUFQNCBDbG9jayBkYXRhCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQogICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgpAQCAtMzksNDIgKzM5LDM2IEBACiAJLm5hbWUJCT0gImV4dGFsdF9jbGtpbl9jayIsCiAJLnJhdGUJCT0gNTkwMDAwMDAsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwYWRfY2xrc19jayA9IHsKIAkubmFtZQkJPSAicGFkX2Nsa3NfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGFkX3NsaW1idXNfY29yZV9jbGtzX2NrID0gewogCS5uYW1lCQk9ICJwYWRfc2xpbWJ1c19jb3JlX2Nsa3NfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJlXzMya19jbGtfc3JjX2NrID0gewogCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2Nsa19zcmNfY2siLAogCS5yYXRlCQk9IDMyNzY4LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2xpbWJ1c19jbGsgPSB7CiAJLm5hbWUJCT0gInNsaW1idXNfY2xrIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c18zMmtfY2sgPSB7CiAJLm5hbWUJCT0gInN5c18zMmtfY2siLAogCS5yYXRlCQk9IDMyNzY4LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xMjAwMDAwMF9jayA9IHsKQEAgLTE3OSwzNSArMTczLDMwIEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfU1lTX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1dG1pX3BoeV9jbGtvdXRfY2sgPSB7CiAJLm5hbWUJCT0gInV0bWlfcGh5X2Nsa291dF9jayIsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB4Y2xrNjBtaHNwMV9jayA9IHsKIAkubmFtZQkJPSAieGNsazYwbWhzcDFfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgeGNsazYwbWhzcDJfY2sgPSB7CiAJLm5hbWUJCT0gInhjbGs2MG1oc3AyX2NrIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHhjbGs2MG1vdGdfY2sgPSB7CiAJLm5hbWUJCT0gInhjbGs2MG1vdGdfY2siLAogCS5yYXRlCQk9IDYwMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogLyogTW9kdWxlIGNsb2NrcyBhbmQgRFBMTCBvdXRwdXRzICovCkBAIC0yMzMsNyArMjIyLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYWJlX2RwbGxfcmVmY2xrX211eF9zZWxbXSA9IHsKQEAgLTI1MSw3ICsyMzksNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIC8qIERQTExfQUJFICovCkBAIC0yNzksMTEgKzI2NiwxMCBAQAogCS5wYXJlbnQJCT0gJmFiZV9kcGxsX3JlZmNsa19tdXhfY2ssCiAJLmRwbGxfZGF0YQk9ICZkcGxsX2FiZV9kZCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcywKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2FiZV9tMngyX2NrID0gewpAQCAtMjkxLDcgKzI3Nyw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhYmVfMjRtX2ZjbGsgPSB7CkBAIC0yOTksNyArMjg0LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX2FiZV9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzXzF0bzRfcmF0ZXNbXSA9IHsKQEAgLTMyNCw3ICszMDgsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhZXNzX2ZjbGtfZGl2W10gPSB7CkBAIC0zNDIsNyArMzI1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV8xdG8zMV9yYXRlc1tdID0gewpAQCAtMzk1LDcgKzM3Nyw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfaHNkX2J5cF9jbGtfbXV4X3NlbFtdID0gewpAQCAtNDEzLDcgKzM5NCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX0NPUkUgKi8KQEAgLTQ0Myw3ICs0MjMsNiBAQAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfY29yZV9tNl9kaXZbXSA9IHsKQEAgLTQ2MSw3ICs0NDAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkYmdjbGtfbXV4X3NlbFtdID0gewpAQCAtNDc1LDcgKzQ1Myw2IEBACiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX20yX2NrID0gewpAQCAtNDg4LDcgKzQ2NSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRkcnBoeV9jayA9IHsKQEAgLTQ5Niw3ICs0NzIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tMl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNV9jayA9IHsKQEAgLTUwOSw3ICs0ODQsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXZfY29yZV9kaXZbXSA9IHsKQEAgLTUyNyw3ICs1MDEsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfMXRvOF9yYXRlc1tdID0gewpAQCAtNTUzLDcgKzUyNiw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdl9tcHVfaHNfY2xrID0gewpAQCAtNTY2LDcgKzUzOCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNF9jayA9IHsKQEAgLTU3OSw3ICs1NTAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbGxfY2xrX2Rpdl9jayA9IHsKQEAgLTU4Nyw3ICs1NTcsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNF9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfYWJlX20yX2NrID0gewpAQCAtNjAwLDcgKzU2OSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tM19jayA9IHsKQEAgLTYxMyw3ICs1ODEsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTdfY2sgPSB7CkBAIC02MjYsNyArNTkzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgaXZhX2hzZF9ieXBfY2xrX211eF9zZWxbXSA9IHsKQEAgLTY0MCw3ICs2MDYsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX0lWQSAqLwpAQCAtNjY4LDExICs2MzMsMTAgQEAKIAkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAogCS5kcGxsX2RhdGEJPSAmZHBsbF9pdmFfZGQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9pdmFfbTRfZGl2W10gPSB7CkBAIC02OTAsNyArNjU0LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfbTVfY2sgPSB7CkBAIC03MDMsNyArNjY2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogRFBMTF9NUFUgKi8KQEAgLTczMSwxMSArNjkzLDEwIEBACiAJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKIAkuZHBsbF9kYXRhCT0gJmRwbGxfbXB1X2RkLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAotCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfbXB1X20yX2RpdltdID0gewpAQCAtNzUzLDcgKzcxNCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9oc19jbGtfZGl2X2NrID0gewpAQCAtNzYxLDcgKzcyMSw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTNfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwZXJfaHNkX2J5cF9jbGtfbXV4X3NlbFtdID0gewpAQCAtNzc5LDcgKzczOCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX1BFUiAqLwpAQCAtODA3LDExICs3NjUsMTAgQEAKIAkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAogCS5kcGxsX2RhdGEJPSAmZHBsbF9wZXJfZGQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9wZXJfbTJfZGl2W10gPSB7CkBAIC04MjksNyArNzg2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTJ4Ml9jayA9IHsKQEAgLTgzNyw3ICs3OTMsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTNfY2sgPSB7CkBAIC04NTAsNyArODA1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTRfY2sgPSB7CkBAIC04NjMsNyArODE3LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTVfY2sgPSB7CkBAIC04NzYsNyArODI5LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTZfY2sgPSB7CkBAIC04ODksNyArODQxLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTdfY2sgPSB7CkBAIC05MDIsNyArODUzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogRFBMTF9VTklQUk8gKi8KQEAgLTkzMCwxMSArODgwLDEwIEBACiAJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKIAkuZHBsbF9kYXRhCT0gJmRwbGxfdW5pcHJvX2RkLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAotCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfdW5pcHJvX20yeDJfZGl2W10gPSB7CkBAIC05NTIsNyArOTAxLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hzX2Nsa19kaXZfY2sgPSB7CkBAIC05NjAsNyArOTA4LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX2FiZV9tM19jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIC8qIERQTExfVVNCICovCkBAIC05ODAsNiArOTI3LDcgQEAKIAkubWF4X211bHRpcGxpZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxULAogCS5tYXhfZGl2aWRlcgk9IE9NQVA0NDMwX01BWF9EUExMX0RJViwKIAkubWluX2RpdmlkZXIJPSAxLAorCS5mbGFncwkJPSBEUExMX0pfVFlQRSB8IERQTExfTk9fRENPX1NFTAogfTsKIAogCkBAIC05ODgsMTEgKzkzNiwxMCBAQAogCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCiAJLmRwbGxfZGF0YQk9ICZkcGxsX3VzYl9kZCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcywKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX3VzYl9jbGtkY29sZG9fY2sgPSB7CkBAIC0xMDAwLDcgKzk0Nyw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF91c2JfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX3VzYl9tMl9kaXZbXSA9IHsKQEAgLTEwMTgsNyArOTY0LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHVjYXRpX2Nsa19tdXhfc2VsW10gPSB7CkBAIC0xMDM2LDcgKzk4MSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzBfMF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18xMm1fZmNsayA9IHsKQEAgLTEwNDQsNyArOTg4LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18yNG1fY2xrID0gewpAQCAtMTA1Miw3ICs5OTUsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18yNG1jX2ZjbGsgPSB7CkBAIC0xMDYwLDcgKzEwMDIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfNHRvOF9yYXRlc1tdID0gewpAQCAtMTA4NCw3ICsxMDI1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1jX2ZjbGsgPSB7CkBAIC0xMDkyLDcgKzEwMzIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfMnRvNF9yYXRlc1tdID0gewpAQCAtMTExNiw3ICsxMDU1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY185Nm1fZmNsa19kaXZbXSA9IHsKQEAgLTExMzQsNyArMTA3Miw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGhzbW1jNl9mY2xrX3NlbFtdID0gewpAQCAtMTE0OCw3ICsxMDg1LDYgQEAKIAkucGFyZW50CQk9ICZmdW5jXzY0bV9mY2xrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyXzF0bzhfcmF0ZXNbXSA9IHsKQEAgLTExNzIsNyArMTEwOCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGwzX2Rpdl9kaXZbXSA9IHsKQEAgLTExOTAsNyArMTEyNSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X2Rpdl9kaXZbXSA9IHsKQEAgLTEyMDgsNyArMTE0Miw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGxwX2Nsa19kaXZfY2sgPSB7CkBAIC0xMjE2LDcgKzExNDksNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF93a3VwX2Nsa19tdXhfc2VsW10gPSB7CkBAIC0xMjM0LDcgKzExNjYsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBlcl9hYmVfbmNfZmNsa19kaXZbXSA9IHsKQEAgLTEyNTIsNyArMTE4Myw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYXNwMl9mY2xrX3NlbFtdID0gewpAQCAtMTI2Niw3ICsxMTk2LDYgQEAKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9mY2xrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNhc3AzX2ZjbGsgPSB7CkBAIC0xMjc0LDcgKzEyMDMsNiBAQAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2ZjbGssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvY3BfYWJlX2ljbGsgPSB7CkBAIC0xMjgyLDcgKzEyMTAsNiBAQAogCS5wYXJlbnQJCT0gJmFlc3NfZmNsaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9hYmVfMjRtX2ZjbGsgPSB7CkBAIC0xMjkwLDcgKzEyMTcsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20yX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcG1kX3N0bV9jbG9ja19tdXhfc2VsW10gPSB7CkBAIC0xMzA1LDcgKzEyMzEsNiBAQAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBtZF90cmFjZV9jbGtfbXV4X2NrID0gewpAQCAtMTMxMyw3ICsxMjM4LDYgQEAKIAkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzeWNfY2xrX2Rpdl9jayA9IHsKQEAgLTEzMjYsMTMgKzEyNTAsMTIgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogTGVhZiBjbG9ja3MgY29udHJvbGxlZCBieSBtb2R1bGVzICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfY2sgPSB7Ci0JLm5hbWUJCT0gImFlczFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgYWVzMV9mY2sgPSB7CisJLm5hbWUJCT0gImFlczFfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX0FFUzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTM0MSw4ICsxMjY0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9jayA9IHsKLQkubmFtZQkJPSAiYWVzMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBhZXMyX2ZjayA9IHsKKwkubmFtZQkJPSAiYWVzMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRTRUNfQUVTMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xMzUxLDggKzEyNzQsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBhZXNzX2NrID0gewotCS5uYW1lCQk9ICJhZXNzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlc3NfZmNrID0geworCS5uYW1lCQk9ICJhZXNzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX0FFU1NfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTM2MSw4ICsxMjg0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY3VzdF9lZnVzZV9jayA9IHsKLQkubmFtZQkJPSAiY3VzdF9lZnVzZV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBjdXN0X2VmdXNlX2ZjayA9IHsKKwkubmFtZQkJPSAiY3VzdF9lZnVzZV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQ0VGVVNFX0NFRlVTRV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xMzcxLDggKzEyOTQsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkZXMzZGVzX2NrID0gewotCS5uYW1lCQk9ICJkZXMzZGVzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlczNkZXNfZmNrID0geworCS5uYW1lCQk9ICJkZXMzZGVzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19ERVMzREVTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTEzOTcsNyArMTMyMCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19kbWljX2FiZV9nZmNsa19zZWxbXSA9IHsKQEAgLTE0MDcsOSArMTMyOSw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGZ1bmNfZG1pY19hYmVfZ2ZjbGsgaW50byBkbWljX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkbWljX2NrID0gewotCS5uYW1lCQk9ICJkbWljX2NrIiwKKy8qIE1lcmdlZCBmdW5jX2RtaWNfYWJlX2dmY2xrIGludG8gZG1pYyAqLworc3RhdGljIHN0cnVjdCBjbGsgZG1pY19mY2sgPSB7CisJLm5hbWUJCT0gImRtaWNfZmNrIiwKIAkucGFyZW50CQk9ICZkbWljX3N5bmNfbXV4X2NrLAogCS5jbGtzZWwJCT0gZnVuY19kbWljX2FiZV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE0MTcsMTQgKzEzMzksMTMgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX0RNSUNfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfY2sgPSB7Ci0JLm5hbWUJCT0gImRzc19jayIsCitzdGF0aWMgc3RydWN0IGNsayBkc3NfZmNrID0geworCS5uYW1lCQk9ICJkc3NfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0RTU19EU1NfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTQzMyw4ICsxMzU0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHVjYXRpX2NrID0gewotCS5uYW1lCQk9ICJkdWNhdGlfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgZHVjYXRpX2ljayA9IHsKKwkubmFtZQkJPSAiZHVjYXRpX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE0NDMsOCArMTM2NCw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtaWYxX2NrID0gewotCS5uYW1lCQk9ICJlbWlmMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBlbWlmMV9pY2sgPSB7CisJLm5hbWUJCT0gImVtaWYxX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGXzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTQ1Myw4ICsxMzc0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZW1pZjJfY2sgPSB7Ci0JLm5hbWUJCT0gImVtaWYyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtaWYyX2ljayA9IHsKKwkubmFtZQkJPSAiZW1pZjJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNDY4LDkgKzEzODksOSBAQAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKLS8qIE1lcmdlZCBmZGlmX2ZjbGsgaW50byBmZGlmX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBmZGlmX2NrID0gewotCS5uYW1lCQk9ICJmZGlmX2NrIiwKKy8qIE1lcmdlZCBmZGlmX2ZjbGsgaW50byBmZGlmICovCitzdGF0aWMgc3RydWN0IGNsayBmZGlmX2ZjayA9IHsKKwkubmFtZQkJPSAiZmRpZl9mY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX200X2NrLAogCS5jbGtzZWwJCT0gZmRpZl9mY2xrX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NBTV9GRElGX0NMS0NUUkwsCkBAIC0xNDc5LDcgKzE0MDAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9DQU1fRkRJRl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiaXNzX2Nsa2RtIiwKQEAgLTE1MDAsNyArMTQyMCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNneF9jbGtfbXV4X3NlbFtdID0gewpAQCAtMTUwOSw5ICsxNDI4LDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgc2d4X2Nsa19tdXggaW50byBnZnhfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2NrIiwKKy8qIE1lcmdlZCBzZ3hfY2xrX211eCBpbnRvIGdmeCAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2ZjayIsCiAJLnBhcmVudAkJPSAmZHBsbF9jb3JlX203X2NrLAogCS5jbGtzZWwJCT0gc2d4X2Nsa19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNTE5LDE0ICsxNDM4LDEzIEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NHWF9GQ0xLX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9HRlhfR0ZYX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsM19nZnhfY2xrZG0iLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzFfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfR1BJTzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTUzNSw4ICsxNDUzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8yX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE1NDUsOCArMTQ2Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2NrID0gewotCS5uYW1lCQk9ICJncGlvM19jayIsCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNTU1LDggKzE0NzMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNF9jayA9IHsKLQkubmFtZQkJPSAiZ3BpbzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0geworCS5uYW1lCQk9ICJncGlvNF9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTU2NSw4ICsxNDgzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW81X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE1NzUsOCArMTQ5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2NrID0gewotCS5uYW1lCQk9ICJncGlvNl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNTg1LDggKzE1MDMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncG1jX2NrID0gewotCS5uYW1lCQk9ICJncG1jX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfaWNrID0geworCS5uYW1lCQk9ICJncG1jX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM18yX0dQTUNfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTYwMSw5ICsxNTE5LDEyIEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGRtdDFfY2xrX211eCBpbnRvIGdwdGltZXIxX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyMV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjFfY2siLAorLyoKKyAqIE1lcmdlZCBkbXQxX2Nsa19tdXggaW50byBncHRpbWVyMQorICogZ3B0aW1lcjEgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDEgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2MTEsMTUgKzE1MzIsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsNF93a3VwX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0xMF9tdXggaW50byBncHRpbWVyMTBfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMF9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjEwX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtMTBfbXV4IGludG8gZ3B0aW1lcjEwCisgKiBncHRpbWVyMTAgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDEwIHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2MjcsMTUgKzE1NTAsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0xMV9tdXggaW50byBncHRpbWVyMTFfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjExX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtMTFfbXV4IGludG8gZ3B0aW1lcjExCisgKiBncHRpbWVyMTEgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDExIHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2NDMsMTUgKzE1NjgsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0yX211eCBpbnRvIGdwdGltZXIyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyMl9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjJfY2siLAorLyoKKyAqIE1lcmdlZCBjbTJfZG0yX211eCBpbnRvIGdwdGltZXIyCisgKiBncHRpbWVyMiByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0MiB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0geworCS5uYW1lCQk9ICJncHQyX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5jbGtzZWwJCT0gZG10MV9jbGtfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTY1OSwxNSArMTU4NiwxNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgY20yX2RtM19tdXggaW50byBncHRpbWVyM19jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjNfY2sgPSB7Ci0JLm5hbWUJCT0gImdwdGltZXIzX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtM19tdXggaW50byBncHRpbWVyMworICogZ3B0aW1lcjMgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDMgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2NzUsMTUgKzE2MDQsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAogfTsKIAotLyogTWVyZ2VkIGNtMl9kbTRfbXV4IGludG8gZ3B0aW1lcjRfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI0X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyNF9jayIsCisvKgorICogTWVyZ2VkIGNtMl9kbTRfbXV4IGludG8gZ3B0aW1lcjQKKyAqIGdwdGltZXI0IHJlbmFtZWQgdGVtcG9yYXJpbHkgaW50byBncHQ0IHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKIAkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCiAJLmNsa3NlbAkJPSBkbXQxX2Nsa19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjkxLDcgKzE2MjIsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCkBAIC0xNzAzLDkgKzE2MzMsMTIgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgdGltZXI1X3N5bmNfbXV4IGludG8gZ3B0aW1lcjVfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI1X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyNV9jayIsCisvKgorICogTWVyZ2VkIHRpbWVyNV9zeW5jX211eCBpbnRvIGdwdGltZXI1CisgKiBncHRpbWVyNSByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0NSB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0geworCS5uYW1lCQk9ICJncHQ1X2ZjayIsCiAJLnBhcmVudAkJPSAmc3ljX2Nsa19kaXZfY2ssCiAJLmNsa3NlbAkJPSB0aW1lcjVfc3luY19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNzEzLDE1ICsxNjQ2LDE3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCB0aW1lcjZfc3luY19tdXggaW50byBncHRpbWVyNl9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjZfY2sgPSB7Ci0JLm5hbWUJCT0gImdwdGltZXI2X2NrIiwKKy8qCisgKiBNZXJnZWQgdGltZXI2X3N5bmNfbXV4IGludG8gZ3B0aW1lcjYKKyAqIGdwdGltZXI2IHJlbmFtZWQgdGVtcG9yYXJpbHkgaW50byBncHQ2IHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfZmNrIiwKIAkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKIAkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MjksMTUgKzE2NjQsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI2X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAogfTsKIAotLyogTWVyZ2VkIHRpbWVyN19zeW5jX211eCBpbnRvIGdwdGltZXI3X2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyN19jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjdfY2siLAorLyoKKyAqIE1lcmdlZCB0aW1lcjdfc3luY19tdXggaW50byBncHRpbWVyNworICogZ3B0aW1lcjcgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDcgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0N19mY2siLAogCS5wYXJlbnQJCT0gJnN5Y19jbGtfZGl2X2NrLAogCS5jbGtzZWwJCT0gdGltZXI1X3N5bmNfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTc0NSwxNSArMTY4MiwxNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgdGltZXI4X3N5bmNfbXV4IGludG8gZ3B0aW1lcjhfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI4X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyOF9jayIsCisvKgorICogTWVyZ2VkIHRpbWVyOF9zeW5jX211eCBpbnRvIGdwdGltZXI4CisgKiBncHRpbWVyOCByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0OCB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0geworCS5uYW1lCQk9ICJncHQ4X2ZjayIsCiAJLnBhcmVudAkJPSAmc3ljX2Nsa19kaXZfY2ssCiAJLmNsa3NlbAkJPSB0aW1lcjVfc3luY19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNzYxLDE1ICsxNzAwLDE3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSOF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG05X211eCBpbnRvIGdwdGltZXI5X2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyOV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjlfY2siLAorLyoKKyAqIE1lcmdlZCBjbTJfZG05X211eCBpbnRvIGdwdGltZXI5CisgKiBncHRpbWVyOSByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0OSB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5jbGtzZWwJCT0gZG10MV9jbGtfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTc3NywxNCArMTcxOCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBoZHExd19jayA9IHsKLQkubmFtZQkJPSAiaGRxMXdfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaGRxMXdfZmNrID0geworCS5uYW1lCQk9ICJoZHExd19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTc5Myw5ICsxNzMzLDkgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotLyogTWVyZ2VkIGhzaV9mY2xrIGludG8gaHNpX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBoc2lfY2sgPSB7Ci0JLm5hbWUJCT0gImhzaV9jayIsCisvKiBNZXJnZWQgaHNpX2ZjbGsgaW50byBoc2kgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzaV9pY2sgPSB7CisJLm5hbWUJCT0gImhzaV9pY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLmNsa3NlbAkJPSBwZXJfc2d4X2ZjbGtfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX0hTSV9DTEtDVFJMLApAQCAtMTgwNCwxNCArMTc0NCwxMyBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfSFNJX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsM19pbml0X2Nsa2RtIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTgyMCw4ICsxNzU5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9jayA9IHsKLQkubmFtZQkJPSAiaTJjMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfSTJDMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xODMwLDggKzE3NjksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBpMmMzX2NrID0gewotCS5uYW1lCQk9ICJpMmMzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0geworCS5uYW1lCQk9ICJpMmMzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTE4NDAsOCArMTc3OSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzRfY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaTJjNF9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzRfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTg1MCw4ICsxNzg5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaXNzX2NrID0gewotCS5uYW1lCQk9ICJpc3NfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaXNzX2ZjayA9IHsKKwkubmFtZQkJPSAiaXNzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9DQU1fSVNTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTE4NjAsOCArMTc5OSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YWhkX2NrID0gewotCS5uYW1lCQk9ICJpdmFoZF9jayIsCitzdGF0aWMgc3RydWN0IGNsayBpdmFoZF9pY2sgPSB7CisJLm5hbWUJCT0gIml2YWhkX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9JVkFIRF9JVkFIRF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xODcwLDggKzE4MDksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBrZXlib2FyZF9jayA9IHsKLQkubmFtZQkJPSAia2V5Ym9hcmRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsga2V5Ym9hcmRfZmNrID0geworCS5uYW1lCQk9ICJrZXlib2FyZF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fV0tVUF9LRVlCT0FSRF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xODgwLDggKzE4MTksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCitzdGF0aWMgc3RydWN0IGNsayBsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrID0geworCS5uYW1lCQk9ICJsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTg5MCw4ICsxODI5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbDNfaW50ZXJjb25uZWN0XzNfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX2ludGVyY29ubmVjdF8zX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ludGVyY29ubmVjdF8zX2ljayA9IHsKKwkubmFtZQkJPSAibDNfaW50ZXJjb25uZWN0XzNfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xOTA5LDcgKzE4NDgsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfbWNhc3BfYWJlX2dmY2xrX3NlbFtdID0gewpAQCAtMTkxOSw5ICsxODU3LDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgZnVuY19tY2FzcF9hYmVfZ2ZjbGsgaW50byBtY2FzcF9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgbWNhc3BfY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYXNwX2NrIiwKKy8qIE1lcmdlZCBmdW5jX21jYXNwX2FiZV9nZmNsayBpbnRvIG1jYXNwICovCitzdGF0aWMgc3RydWN0IGNsayBtY2FzcF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYXNwX2ZjayIsCiAJLnBhcmVudAkJPSAmbWNhc3Bfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBmdW5jX21jYXNwX2FiZV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE5MjksNyArMTg2Nyw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKQEAgLTE5NDQsNyArMTg4MSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19tY2JzcDFfZ2ZjbGtfc2VsW10gPSB7CkBAIC0xOTU0LDkgKzE4OTAsOSBAQAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKLS8qIE1lcmdlZCBmdW5jX21jYnNwMV9nZmNsayBpbnRvIG1jYnNwMV9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2NrID0gewotCS5uYW1lCQk9ICJtY2JzcDFfY2siLAorLyogTWVyZ2VkIGZ1bmNfbWNic3AxX2dmY2xrIGludG8gbWNic3AxICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKIAkucGFyZW50CQk9ICZtY2JzcDFfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBmdW5jX21jYnNwMV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE5NjQsNyArMTkwMCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCkBAIC0xOTc5LDcgKzE5MTQsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfbWNic3AyX2dmY2xrX3NlbFtdID0gewpAQCAtMTk4OSw5ICsxOTIzLDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgZnVuY19tY2JzcDJfZ2ZjbGsgaW50byBtY2JzcDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9jayA9IHsKLQkubmFtZQkJPSAibWNic3AyX2NrIiwKKy8qIE1lcmdlZCBmdW5jX21jYnNwMl9nZmNsayBpbnRvIG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ZjayIsCiAJLnBhcmVudAkJPSAmbWNic3AyX3N5bmNfbXV4X2NrLAogCS5jbGtzZWwJCT0gZnVuY19tY2JzcDJfZ2ZjbGtfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xOTk5LDcgKzE5MzMsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLApAQCAtMjAxNCw3ICsxOTQ3LDYgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jX21jYnNwM19nZmNsa19zZWxbXSA9IHsKQEAgLTIwMjQsOSArMTk1Niw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGZ1bmNfbWNic3AzX2dmY2xrIGludG8gbWNic3AzX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwM19jayIsCisvKiBNZXJnZWQgZnVuY19tY2JzcDNfZ2ZjbGsgaW50byBtY2JzcDMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19mY2siLAogCS5wYXJlbnQJCT0gJm1jYnNwM19zeW5jX211eF9jaywKIAkuY2xrc2VsCQk9IGZ1bmNfbWNic3AzX2dmY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjAzNCw3ICsxOTY2LDYgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKQEAgLTIwNDksNyArMTk4MCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGVyX21jYnNwNF9nZmNsa19zZWxbXSA9IHsKQEAgLTIwNTgsOSArMTk4OCw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIHBlcl9tY2JzcDRfZ2ZjbGsgaW50byBtY2JzcDRfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9jayA9IHsKLQkubmFtZQkJPSAibWNic3A0X2NrIiwKKy8qIE1lcmdlZCBwZXJfbWNic3A0X2dmY2xrIGludG8gbWNic3A0ICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKIAkucGFyZW50CQk9ICZtY2JzcDRfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBwZXJfbWNic3A0X2dmY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjA2OCwxNCArMTk5OCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9jayA9IHsKLQkubmFtZQkJPSAibWNzcGkxX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIwODQsOCArMjAxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9jayA9IHsKLQkubmFtZQkJPSAibWNzcGkyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIwOTQsOCArMjAyMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19jayA9IHsKLQkubmFtZQkJPSAibWNzcGkzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxMDQsOCArMjAzMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9jayA9IHsKLQkubmFtZQkJPSAibWNzcGk0X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpNF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEk0X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxMTQsOSArMjA0Myw5IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLS8qIE1lcmdlZCBoc21tYzFfZmNsayBpbnRvIG1tYzFfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzFfY2siLAorLyogTWVyZ2VkIGhzbW1jMV9mY2xrIGludG8gbW1jMSAqLworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tYzFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzY0bV9mY2xrLAogCS5jbGtzZWwJCT0gaHNtbWM2X2ZjbGtfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0yMTI0LDE1ICsyMDUzLDE0IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfTU1DMV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgaHNtbWMyX2ZjbGsgaW50byBtbWMyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewotCS5uYW1lCQk9ICJtbWMyX2NrIiwKKy8qIE1lcmdlZCBoc21tYzJfZmNsayBpbnRvIG1tYzIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfZmNrID0geworCS5uYW1lCQk9ICJtbWMyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY182NG1fZmNsaywKIAkuY2xrc2VsCQk9IGhzbW1jNl9mY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjE0MCwxNCArMjA2OCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX01NQzJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbW1jM19jayA9IHsKLQkubmFtZQkJPSAibW1jM19jayIsCitzdGF0aWMgc3RydWN0IGNsayBtbWMzX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jM19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxNTYsOCArMjA4Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzRfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgbW1jNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1tYzRfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMTY2LDggKzIwOTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBtbWM1X2NrID0gewotCS5uYW1lCQk9ICJtbWM1X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzVfZmNrID0geworCS5uYW1lCQk9ICJtbWM1X2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9NTUNTRDVfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjE3Niw4ICsyMTAzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgb2NwX3dwMV9jayA9IHsKLQkubmFtZQkJPSAib2NwX3dwMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBvY3Bfd3AxX2ljayA9IHsKKwkubmFtZQkJPSAib2NwX3dwMV9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIxODYsOCArMjExMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBkbV9jayA9IHsKLQkubmFtZQkJPSAicGRtX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBkbV9mY2sgPSB7CisJLm5hbWUJCT0gInBkbV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjE5Niw4ICsyMTIzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGthZWlwMjlfY2sgPSB7Ci0JLm5hbWUJCT0gInBrYWVpcDI5X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYWVpcDI5X2ZjayA9IHsKKwkubmFtZQkJPSAicGthZWlwMjlfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX1BLQUVJUDI5X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyMDYsOCArMjEzMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19jayA9IHsKLQkubmFtZQkJPSAicm5nX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRTRUNfUk5HX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIyMTYsOCArMjE0Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTJtZDUxX2NrID0gewotCS5uYW1lCQk9ICJzaGEybWQ1MV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzaGEybWQ1MV9mY2sgPSB7CisJLm5hbWUJCT0gInNoYTJtZDUxX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMjI2LDggKzIxNTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzbDJfY2sgPSB7Ci0JLm5hbWUJCT0gInNsMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzbDJfaWNrID0geworCS5uYW1lCQk9ICJzbDJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0lWQUhEX1NMMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0yMjM2LDggKzIxNjMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzbGltYnVzMV9jayA9IHsKLQkubmFtZQkJPSAic2xpbWJ1czFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgc2xpbWJ1czFfZmNrID0geworCS5uYW1lCQk9ICJzbGltYnVzMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9TTElNQlVTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNDYsOCArMjE3Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNsaW1idXMyX2NrID0gewotCS5uYW1lCQk9ICJzbGltYnVzMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzbGltYnVzMl9mY2sgPSB7CisJLm5hbWUJCT0gInNsaW1idXMyX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMjU2LDggKzIxODMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzcl9jb3JlX2NrID0gewotCS5uYW1lCQk9ICJzcl9jb3JlX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2NvcmVfZmNrID0geworCS5uYW1lCQk9ICJzcl9jb3JlX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9DT1JFX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNjYsOCArMjE5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2l2YV9jayA9IHsKLQkubmFtZQkJPSAic3JfaXZhX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2l2YV9mY2sgPSB7CisJLm5hbWUJCT0gInNyX2l2YV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQUxXT05fU1JfSVZBX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNzYsOCArMjIwMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX21wdV9jayA9IHsKLQkubmFtZQkJPSAic3JfbXB1X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX21wdV9mY2sgPSB7CisJLm5hbWUJCT0gInNyX21wdV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyODYsOCArMjIxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRlc2xhX2NrID0gewotCS5uYW1lCQk9ICJ0ZXNsYV9jayIsCitzdGF0aWMgc3RydWN0IGNsayB0ZXNsYV9pY2sgPSB7CisJLm5hbWUJCT0gInRlc2xhX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9URVNMQV9URVNMQV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0yMjk2LDggKzIyMjMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9jayA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjMwNiw4ICsyMjMzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDJfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX1VBUlQyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIzMTYsOCArMjI0Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2NrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9VQVJUM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMzI2LDggKzIyNTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0NF9jayA9IHsKLQkubmFtZQkJPSAidWFydDRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0NF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjMzNiw4ICsyMjYzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdW5pcHJvMV9jayA9IHsKLQkubmFtZQkJPSAidW5pcHJvMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayB1bmlwcm8xX2ZjayA9IHsKKwkubmFtZQkJPSAidW5pcHJvMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjM0Niw4ICsyMjczLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl9ob3N0X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2ZjayA9IHsKKwkubmFtZQkJPSAidXNiX2hvc3RfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMzU2LDggKzIyODMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaG9zdF9mc19jayA9IHsKLQkubmFtZQkJPSAidXNiX2hvc3RfZnNfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfZnNfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfaG9zdF9mc19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIzNjYsOCArMjI5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9vdGdfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl9vdGdfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX290Z19pY2sgPSB7CisJLm5hbWUJCT0gInVzYl9vdGdfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzNzYsOCArMjMwMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl90bGxfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl90bGxfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX3RsbF9pY2sgPSB7CisJLm5hbWUJCT0gInVzYl90bGxfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzODYsOCArMjMxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnBoeW9jcDJzY3BfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYnBoeW9jcDJzY3BfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNicGh5b2NwMnNjcF9pY2sgPSB7CisJLm5hbWUJCT0gInVzYnBoeW9jcDJzY3BfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzOTYsOCArMjMyMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fY2sgPSB7Ci0JLm5hbWUJCT0gInVzaW1fY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVVNJTV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yNDA2LDggKzIzMzMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQyX2NrID0gewotCS5uYW1lCQk9ICJ3ZHQyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX1dEVDJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjQxNiw4ICsyMzQzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19jayA9IHsKLQkubmFtZQkJPSAid2R0M19jayIsCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9XRFQzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTI0NDIsNyArMjM2OSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzYwTV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3RtX2Nsa19kaXZfZGl2W10gPSB7CkBAIC0yNDYwLDcgKzIzODYsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZV9jbGtfZGl2X2RpdltdID0gewpAQCAtMjQ3OCw3ICsyNDAzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyXzE0dG8xOF9yYXRlc1tdID0gewpAQCAtMjUwMiw3ICsyNDI2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXRtaV9wMV9nZmNsa19zZWxbXSA9IHsKQEAgLTI1MjAsNyArMjQ0Myw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHV0bWlfcDJfZ2ZjbGtfc2VsW10gPSB7CkBAIC0yNTM4LDcgKzI0NjAsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKgpAQCAtMjYzMSwxMDYgKzI1NTIsMTM5IEBACiAJQ0xLKE5VTEwsCSJwbWRfc3RtX2Nsb2NrX211eF9jayIsCQkmcG1kX3N0bV9jbG9ja19tdXhfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkicG1kX3RyYWNlX2Nsa19tdXhfY2siLAkJJnBtZF90cmFjZV9jbGtfbXV4X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInN5Y19jbGtfZGl2X2NrIiwJCSZzeWNfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXMxX2NrIiwJCQkmYWVzMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXMyX2NrIiwJCQkmYWVzMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXNzX2NrIiwJCQkmYWVzc19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJjdXN0X2VmdXNlX2NrIiwJCSZjdXN0X2VmdXNlX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRlczNkZXNfY2siLAkJCSZkZXMzZGVzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImFlczFfZmNrIiwJCQkmYWVzMV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYWVzMl9mY2siLAkJCSZhZXMyX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhZXNzX2ZjayIsCQkJJmFlc3NfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImN1c3RfZWZ1c2VfZmNrIiwJCSZjdXN0X2VmdXNlX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkZXMzZGVzX2ZjayIsCQkJJmRlczNkZXNfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRtaWNfc3luY19tdXhfY2siLAkJJmRtaWNfc3luY19tdXhfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZG1pY19jayIsCQkJJmRtaWNfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHNzX2NrIiwJCQkmZHNzX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImR1Y2F0aV9jayIsCQkJJmR1Y2F0aV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJlbWlmMV9jayIsCQkJJmVtaWYxX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImVtaWYyX2NrIiwJCQkmZW1pZjJfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZmRpZl9jayIsCQkJJmZkaWZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZG1pY19mY2siLAkJCSZkbWljX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkc3NfZmNrIiwJCQkmZHNzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkdWNhdGlfaWNrIiwJCQkmZHVjYXRpX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJlbWlmMV9pY2siLAkJCSZlbWlmMV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZW1pZjJfaWNrIiwJCQkmZW1pZjJfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImZkaWZfZmNrIiwJCQkmZmRpZl9mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkicGVyX3NneF9mY2xrIiwJCQkmcGVyX3NneF9mY2xrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdmeF9jayIsCQkJJmdmeF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMV9jayIsCQkJJmdwaW8xX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2NrIiwJCQkmZ3BpbzJfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzNfY2siLAkJCSZncGlvM19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNF9jayIsCQkJJmdwaW80X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2NrIiwJCQkmZ3BpbzVfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzZfY2siLAkJCSZncGlvNl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncG1jX2NrIiwJCQkmZ3BtY19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyMV9jayIsCQkJJmdwdGltZXIxX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXIxMF9jayIsCQkJJmdwdGltZXIxMF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyMTFfY2siLAkJCSZncHRpbWVyMTFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjJfY2siLAkJCSZncHRpbWVyMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyM19jayIsCQkJJmdwdGltZXIzX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXI0X2NrIiwJCQkmZ3B0aW1lcjRfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjVfY2siLAkJCSZncHRpbWVyNV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyNl9jayIsCQkJJmdwdGltZXI2X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXI3X2NrIiwJCQkmZ3B0aW1lcjdfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjhfY2siLAkJCSZncHRpbWVyOF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyOV9jayIsCQkJJmdwdGltZXI5X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX2hkcS4wIiwJImljayIsCQkJCSZoZHExd19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJoc2lfY2siLAkJCSZoc2lfY2ssCUNLXzQ0M1gpLAotCUNMSygiaTJjX29tYXAuMSIsCSJpY2siLAkJCQkmaTJjMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZpMmMyX2NrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjMiLAkiaWNrIiwJCQkJJmkyYzNfY2ssCUNLXzQ0M1gpLAotCUNMSygiaTJjX29tYXAuNCIsCSJpY2siLAkJCQkmaTJjNF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJpc3NfY2siLAkJCSZpc3NfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiaXZhaGRfY2siLAkJCSZpdmFoZF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJrZXlib2FyZF9jayIsCQkJJmtleWJvYXJkX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCSZsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkibDNfaW50ZXJjb25uZWN0XzNfY2siLAkJJmwzX2ludGVyY29ubmVjdF8zX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdmeF9mY2siLAkJCSZnZnhfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2ljayIsCQkJJmdwaW8xX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9pY2siLAkJCSZncGlvMl9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfaWNrIiwJCQkmZ3BpbzNfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2ljayIsCQkJJmdwaW80X2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9pY2siLAkJCSZncGlvNV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfaWNrIiwJCQkmZ3BpbzZfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwbWNfaWNrIiwJCQkmZ3BtY19pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkJCSZncHQxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkJCSZncHQxMF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJCQkmZ3B0MTFfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJCQkmZ3B0Ml9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkJCSZncHQzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCQkJJmdwdDRfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJCQkmZ3B0NV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkJCSZncHQ2X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCQkJJmdwdDdfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJCQkmZ3B0OF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkJCSZncHQ5X2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwMl9oZHEuMCIsCSJmY2siLAkJCQkmaGRxMXdfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImhzaV9pY2siLAkJCSZoc2lfaWNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjEiLAkiZmNrIiwJCQkJJmkyYzFfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLAkiZmNrIiwJCQkJJmkyYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjMiLAkiZmNrIiwJCQkJJmkyYzNfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjQiLAkiZmNrIiwJCQkJJmkyYzRfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImlzc19mY2siLAkJCSZpc3NfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIml2YWhkX2ljayIsCQkJJml2YWhkX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJrZXlib2FyZF9mY2siLAkJCSZrZXlib2FyZF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibDNfaW5zdHJfaW50ZXJjb25uZWN0X2ljayIsCSZsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImwzX2ludGVyY29ubmVjdF8zX2ljayIsCSZsM19pbnRlcmNvbm5lY3RfM19pY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkibWNhc3Bfc3luY19tdXhfY2siLAkJJm1jYXNwX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJIm1jYXNwX2NrIiwJCQkmbWNhc3BfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibWNhc3BfZmNrIiwJCQkmbWNhc3BfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm1jYnNwMV9zeW5jX211eF9jayIsCQkmbWNic3AxX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsCSJmY2siLAkJCQkmbWNic3AxX2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsCSJmY2siLAkJCQkmbWNic3AxX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJtY2JzcDJfc3luY19tdXhfY2siLAkJJm1jYnNwMl9zeW5jX211eF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLAkiZmNrIiwJCQkJJm1jYnNwMl9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLAkiZmNrIiwJCQkJJm1jYnNwMl9mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkibWNic3AzX3N5bmNfbXV4X2NrIiwJCSZtY2JzcDNfc3luY19tdXhfY2ssCUNLXzQ0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwJImZjayIsCQkJCSZtY2JzcDNfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwJImZjayIsCQkJCSZtY2JzcDNfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm1jYnNwNF9zeW5jX211eF9jayIsCQkmbWNic3A0X3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsCSJmY2siLAkJCQkmbWNic3A0X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjEiLAkiZmNrIiwJCQkJJm1jc3BpMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4yIiwJImZjayIsCQkJCSZtY3NwaTJfY2ssCUNLXzQ0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMyIsCSJmY2siLAkJCQkmbWNzcGkzX2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjQiLAkiZmNrIiwJCQkJJm1jc3BpNF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkJCQkmbW1jMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJmY2siLAkJCQkmbW1jMl9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkJCQkmbW1jM19jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMyIsCSJmY2siLAkJCQkmbW1jNF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuNCIsCSJmY2siLAkJCQkmbW1jNV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJvY3Bfd3AxX2NrIiwJCQkmb2NwX3dwMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJwZG1fY2siLAkJCSZwZG1fY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkicGthZWlwMjlfY2siLAkJCSZwa2FlaXAyOV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJCQkmcm5nX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInNoYTJtZDUxX2NrIiwJCQkmc2hhMm1kNTFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic2wyX2NrIiwJCQkmc2wyX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInNsaW1idXMxX2NrIiwJCQkmc2xpbWJ1czFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic2xpbWJ1czJfY2siLAkJCSZzbGltYnVzMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJzcl9jb3JlX2NrIiwJCQkmc3JfY29yZV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJzcl9pdmFfY2siLAkJCSZzcl9pdmFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic3JfbXB1X2NrIiwJCQkmc3JfbXB1X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInRlc2xhX2NrIiwJCQkmdGVzbGFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidWFydDFfY2siLAkJCSZ1YXJ0MV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0Ml9jayIsCQkJJnVhcnQyX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2NrIiwJCQkmdWFydDNfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidWFydDRfY2siLAkJCSZ1YXJ0NF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1bmlwcm8xX2NrIiwJCQkmdW5pcHJvMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2JfaG9zdF9jayIsCQkJJnVzYl9ob3N0X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInVzYl9ob3N0X2ZzX2NrIiwJCSZ1c2JfaG9zdF9mc19jaywJQ0tfNDQzWCksCi0JQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJCQkJJnVzYl9vdGdfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidXNiX3RsbF9jayIsCQkJJnVzYl90bGxfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidXNicGh5b2NwMnNjcF9jayIsCQkmdXNicGh5b2NwMnNjcF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2ltX2NrIiwJCQkmdXNpbV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJCQkmd2R0Ml9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ3ZHQzX2NrIiwJCQkmd2R0M19jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLAkiZmNrIiwJCQkJJm1jYnNwNF9mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMSIsCSJmY2siLAkJCQkmbWNzcGkxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwJImZjayIsCQkJCSZtY3NwaTJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLAkiZmNrIiwJCQkJJm1jc3BpM19mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcDJfbWNzcGkuNCIsCSJmY2siLAkJCQkmbWNzcGk0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkJCQkmbW1jMV9mY2ssCUNLXzQ0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiZmNrIiwJCQkJJm1tYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCQkJCSZtbWMzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMyIsCSJmY2siLAkJCQkmbW1jNF9mY2ssCUNLXzQ0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjQiLAkiZmNrIiwJCQkJJm1tYzVfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm9jcF93cDFfaWNrIiwJCQkmb2NwX3dwMV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGRtX2ZjayIsCQkJJnBkbV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGthZWlwMjlfZmNrIiwJCQkmcGthZWlwMjlfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkJCSZybmdfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNoYTJtZDUxX2ZjayIsCQkJJnNoYTJtZDUxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzbDJfaWNrIiwJCQkmc2wyX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzbGltYnVzMV9mY2siLAkJCSZzbGltYnVzMV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic2xpbWJ1czJfZmNrIiwJCQkmc2xpbWJ1czJfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNyX2NvcmVfZmNrIiwJCQkmc3JfY29yZV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3JfaXZhX2ZjayIsCQkJJnNyX2l2YV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3JfbXB1X2ZjayIsCQkJJnNyX21wdV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidGVzbGFfaWNrIiwJCQkmdGVzbGFfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCQkJJnVhcnQxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkJCSZ1YXJ0Ml9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJCQkmdWFydDNfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVhcnQ0X2ZjayIsCQkJJnVhcnQ0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1bmlwcm8xX2ZjayIsCQkJJnVuaXBybzFfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzYl9ob3N0X2ZjayIsCQkJJnVzYl9ob3N0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9mc19mY2siLAkJJnVzYl9ob3N0X2ZzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJCQkJJnVzYl9vdGdfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzYl90bGxfaWNrIiwJCQkmdXNiX3RsbF9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXNicGh5b2NwMnNjcF9pY2siLAkJJnVzYnBoeW9jcDJzY3BfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzaW1fZmNrIiwJCQkmdXNpbV9mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCQkJJndkdDJfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJCQkmd2R0M19mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkib3RnXzYwbV9nZmNsa19jayIsCQkmb3RnXzYwbV9nZmNsa19jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJzdG1fY2xrX2Rpdl9jayIsCQkmc3RtX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidHJhY2VfY2xrX2Rpdl9jayIsCQkmdHJhY2VfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2ltX2ZjbGsiLAkJCSZ1c2ltX2ZjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXRtaV9wMV9nZmNsa19jayIsCQkmdXRtaV9wMV9nZmNsa19jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1dG1pX3AyX2dmY2xrX2NrIiwJCSZ1dG1pX3AyX2dmY2xrX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2RiY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9kYmNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfZGJjayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9kYmNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfZGJjayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwbWNfY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxX2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMF9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC40IiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNzcGkuMSIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY3NwaS4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jc3BpLjMiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNzcGkuNCIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDRfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIH07CiAKLWludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKK2ludCBfX2luaXQgb21hcDR4eHhfY2xrX2luaXQodm9pZCkKIHsKLQkvKiBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207ICovCiAJc3RydWN0IG9tYXBfY2xrICpjOwotCS8qIHUzMiBjbGtyYXRlOyAqLwogCXUzMiBjcHVfY2xrZmxnOwogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CkBAIC0yNzQ5LDkgKzI3MDMsNyBAQAogCQlpZiAoYy0+Y3B1ICYgY3B1X2Nsa2ZsZykgewogCQkJY2xrZGV2X2FkZCgmYy0+bGspOwogCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7Ci0JCQkvKiBUT0RPCiAJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwotCQkJKi8KIAkJfQogCiAJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCBkZDI4NWYwLi5iODdhZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xLDEwICsxLDExIEBACiAvKgotICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKiBPTUFQMi8zLzQgY2xvY2tkb21haW4gZnJhbWV3b3JrIGZ1bmN0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleSBhbmQgSm91bmkgSMO2Z2FuZGVyCisgKiBBZGRlZCBPTUFQNCBzcGVjaWZpYyBzdXBwb3J0IGJ5IEFiaGlqaXQgUGFnYXJlIDxhYmhpaml0cGFnYXJlQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI2LDE0NiArMjcsMjQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogLyogY2xrZG1fbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3QgY2xvY2tkb21haW5zICovCiBzdGF0aWMgTElTVF9IRUFEKGNsa2RtX2xpc3QpOwogCi0vKiBjbGtkbV9tdXRleCBwcm90ZWN0cyBjbGtkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAqLwotc3RhdGljIERFRklORV9NVVRFWChjbGtkbV9tdXRleCk7Ci0KLS8qIGFycmF5IG9mIHBvd2VyZG9tYWluIGRlcHMgdG8gYmUgYWRkZWQvcmVtb3ZlZCB3aGVuIGNsa2RtIGluIGh3c3VwIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcHM7CisvKiBhcnJheSBvZiBjbG9ja2RvbWFpbiBkZXBzIHRvIGJlIGFkZGVkL3JlbW92ZWQgd2hlbiBjbGtkbSBpbiBod3N1cCBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXBzOwogCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKLS8qCi0gKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgcHdyZG0gbmFtZXMgdG8gcHdyZG0gcG9pbnRlcnM7IHN0b3JlCi0gKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKiB0byByZXNvbHZlCi0gKgotICogUmVzb2x2ZSBhdXRvZGVwIHBvd2VyZG9tYWluIG5hbWVzIHRvIHBvd2VyZG9tYWluIHBvaW50ZXJzIHZpYQotICogcHdyZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgotICogImF1dG9kZXAiIGlzIGEgcG93ZXJkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcwotICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKLSAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCi0gKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAotICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgotICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCkKLXsKLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwotCi0JaWYgKCFhdXRvZGVwKQotCQlyZXR1cm47Ci0KLQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQotCQlyZXR1cm47Ci0KLQlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbS5uYW1lKTsKLQlpZiAoIXB3cmRtKSB7Ci0JCXByX2VycigiY2xvY2tkb21haW46IGF1dG9kZXBzOiBwb3dlcmRvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKLQkJCSBhdXRvZGVwLT5wd3JkbS5uYW1lKTsKLQkJcHdyZG0gPSBFUlJfUFRSKC1FTk9FTlQpOwotCX0KLQlhdXRvZGVwLT5wd3JkbS5wdHIgPSBwd3JkbTsKLX0KLQotLyoKLSAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSBhZGQgYXV0byBzbGVlcGRlcHMvd2tkZXBzIHRvIGNsa2RtIHVwb24gY2xvY2sgZW5hYmxlCi0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKgotICogQWRkIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIHRvIGNsb2NrZG9tYWluICdjbGtkbScKLSAqIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4gIE1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGNsb2NrIGZyYW1ld29yawotICogd2hlbiBhIGNsb2NrIGluc2lkZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGlzIGVuYWJsZWQuCU5vIHJldHVybiB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgX2Nsa2RtX2FkZF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQotewotCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOwotCi0JZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtLnB0cjsgYXV0b2RlcCsrKSB7Ci0JCWlmIChJU19FUlIoYXV0b2RlcC0+cHdyZG0ucHRyKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCi0JCQljb250aW51ZTsKLQotCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgotCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG0ucHRyLT5uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS5wdHItPm5hbWUpOwotCi0JCXB3cmRtX2FkZF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwotCQlwd3JkbV9hZGRfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKLQl9Ci19Ci0KLS8qCi0gKiBfY2xrZG1fYWRkX2F1dG9kZXBzIC0gcmVtb3ZlIGF1dG8gc2xlZXBkZXBzL3drZGVwcyBmcm9tIGNsa2RtCi0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKgotICogUmVtb3ZlIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20gY2xvY2tkb21haW4gJ2Nsa2RtJwotICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCi0gKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZGlzYWJsZWQuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKLXsKLQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKLQotCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbS5wdHI7IGF1dG9kZXArKykgewotCQlpZiAoSVNfRVJSKGF1dG9kZXAtPnB3cmRtLnB0cikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQotCQkJY29udGludWU7Ci0KLQkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgotCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG0ucHRyLT5uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS5wdHItPm5hbWUpOwotCi0JCXB3cmRtX2RlbF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwotCQlwd3JkbV9kZWxfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKLQl9Ci19Ci0KLS8qCi0gKiBfb21hcDJfY2xrZG1fc2V0X2h3c3VwIC0gc2V0IHRoZSBod3N1cCBpZGxlIHRyYW5zaXRpb24gYml0Ci0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKiBAZW5hYmxlOiBpbnQgMCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZQotICoKLSAqIEludGVybmFsIGhlbHBlciBmb3IgYWN0dWFsbHkgc3dpdGNoaW5nIHRoZSBiaXQgdGhhdCBjb250cm9scyBod3N1cAotICogaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0uCi0gKi8KLXN0YXRpYyB2b2lkIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgaW50IGVuYWJsZSkKLXsKLQl1MzIgdjsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlpZiAoZW5hYmxlKQotCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQkJZWxzZQotCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlpZiAoZW5hYmxlKQotCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQkJZWxzZQotCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfQotCi0JY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCi0JCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKLX0KLQogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqX2Nsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sICp0ZW1wX2Nsa2RtOwpAQCAtMTg1LDQ3ICs2NCwxNiBAQAogCXJldHVybiBjbGtkbTsKIH0KIAotCi0vKiBQdWJsaWMgZnVuY3Rpb25zICovCi0KIC8qKgotICogY2xrZG1faW5pdCAtIHNldCB1cCB0aGUgY2xvY2tkb21haW4gbGF5ZXIKLSAqIEBjbGtkbXM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zIHRvIHJlZ2lzdGVyCi0gKiBAaW5pdF9hdXRvZGVwczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvZGVwcyB0byByZWdpc3RlcgotICoKLSAqIFNldCB1cCBpbnRlcm5hbCBzdGF0ZS4gIElmIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMKLSAqIHdhcyBzdXBwbGllZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIGNsb2NrZG9tYWlucywgcmVnaXN0ZXIgYWxsCi0gKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uCVNpbWlsYXJseSwgaWYgYQotICogcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbi1wb3dlcmRvbWFpbiBhdXRvZGVwZW5kZW5jaWVzIHdhcwotICogcHJvdmlkZWQsIHJlZ2lzdGVyIHRob3NlLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi12b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLAotCQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqaW5pdF9hdXRvZGVwcykKLXsKLQlzdHJ1Y3QgY2xvY2tkb21haW4gKipjID0gTlVMTDsKLQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCA9IE5VTEw7Ci0KLQlpZiAoY2xrZG1zKQotCQlmb3IgKGMgPSBjbGtkbXM7ICpjOyBjKyspCi0JCQljbGtkbV9yZWdpc3RlcigqYyk7Ci0KLQlhdXRvZGVwcyA9IGluaXRfYXV0b2RlcHM7Ci0JaWYgKGF1dG9kZXBzKQotCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspCi0JCQlfYXV0b2RlcF9sb29rdXAoYXV0b2RlcCk7Ci19Ci0KLS8qKgotICogY2xrZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIGNsb2NrZG9tYWluCisgKiBfY2xrZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIGNsb2NrZG9tYWluCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIHJlZ2lzdGVyCiAgKgogICogQWRkcyBhIGNsb2NrZG9tYWluIHRvIHRoZSBpbnRlcm5hbCBjbG9ja2RvbWFpbiBsaXN0LgogICogUmV0dXJucyAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgY2xvY2tkb21haW4gaXMKICAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KLWludCBjbGtkbV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQorc3RhdGljIGludCBfY2xrZG1fcmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwogCiAJaWYgKCFjbGtkbSB8fCAhY2xrZG0tPm5hbWUpCkBAIC0yNDIsNTUgKzkwLDMxMCBAQAogCX0KIAljbGtkbS0+cHdyZG0ucHRyID0gcHdyZG07CiAKLQltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CiAJLyogVmVyaWZ5IHRoYXQgdGhlIGNsb2NrZG9tYWluIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KLQlpZiAoX2Nsa2RtX2xvb2t1cChjbGtkbS0+bmFtZSkpIHsKLQkJcmV0ID0gLUVFWElTVDsKLQkJZ290byBjcl91bmxvY2s7Ci0JfQorCWlmIChfY2xrZG1fbG9va3VwKGNsa2RtLT5uYW1lKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CiAKIAlsaXN0X2FkZCgmY2xrZG0tPm5vZGUsICZjbGtkbV9saXN0KTsKIAogCXB3cmRtX2FkZF9jbGtkbShwd3JkbSwgY2xrZG0pOwogCiAJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBjbGtkbS0+bmFtZSk7Ci0JcmV0ID0gMDsKIAotY3JfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2xrZG1fbXV0ZXgpOworCXJldHVybiAwOworfQogCi0JcmV0dXJuIHJldDsKKy8qIF9jbGtkbV9kZXBzX2xvb2t1cCAtIGxvb2sgdXAgdGhlIHNwZWNpZmllZCBjbG9ja2RvbWFpbiBpbiBhIGNsa2RtIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwICpfY2xrZG1fZGVwc19sb29rdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwKKwkJCQkJICAgIHN0cnVjdCBjbGtkbV9kZXAgKmRlcHMpCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisKKwlpZiAoIWNsa2RtIHx8ICFkZXBzIHx8ICFvbWFwX2NoaXBfaXMoY2xrZG0tPm9tYXBfY2hpcCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZm9yIChjZCA9IGRlcHM7IGNkLT5jbGtkbV9uYW1lOyBjZCsrKSB7CisJCWlmICghb21hcF9jaGlwX2lzKGNkLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJaWYgKCFjZC0+Y2xrZG0gJiYgY2QtPmNsa2RtX25hbWUpCisJCQljZC0+Y2xrZG0gPSBfY2xrZG1fbG9va3VwKGNkLT5jbGtkbV9uYW1lKTsKKworCQlpZiAoY2QtPmNsa2RtID09IGNsa2RtKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFjZC0+Y2xrZG1fbmFtZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlyZXR1cm4gY2Q7Cit9CisKKy8qCisgKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgY2xrZG0gbmFtZXMgdG8gY2xrZG0gcG9pbnRlcnM7IHN0b3JlCisgKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX2F1dG9kZXAgKiB0byByZXNvbHZlCisgKgorICogUmVzb2x2ZSBhdXRvZGVwIGNsb2NrZG9tYWluIG5hbWVzIHRvIGNsb2NrZG9tYWluIHBvaW50ZXJzIHZpYQorICogY2xrZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgorICogImF1dG9kZXAiIGlzIGEgY2xvY2tkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcworICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKKyAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAorICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgorICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcCkKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtOworCisJaWYgKCFhdXRvZGVwKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQlyZXR1cm47CisKKwljbGtkbSA9IGNsa2RtX2xvb2t1cChhdXRvZGVwLT5jbGtkbS5uYW1lKTsKKwlpZiAoIWNsa2RtKSB7CisJCXByX2VycigiY2xvY2tkb21haW46IGF1dG9kZXBzOiBjbG9ja2RvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKwkJCSBhdXRvZGVwLT5jbGtkbS5uYW1lKTsKKwkJY2xrZG0gPSBFUlJfUFRSKC1FTk9FTlQpOworCX0KKwlhdXRvZGVwLT5jbGtkbS5wdHIgPSBjbGtkbTsKK30KKworLyoKKyAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSBhZGQgYXV0byBzbGVlcGRlcHMvd2tkZXBzIHRvIGNsa2RtIHVwb24gY2xvY2sgZW5hYmxlCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogQWRkIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIHRvIGNsb2NrZG9tYWluICdjbGtkbScKKyAqIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4gIE1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGNsb2NrIGZyYW1ld29yaworICogd2hlbiBhIGNsb2NrIGluc2lkZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGlzIGVuYWJsZWQuCU5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2Nsa2RtX2FkZF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXN0cnVjdCBjbGtkbV9hdXRvZGVwICphdXRvZGVwOworCisJaWYgKCFhdXRvZGVwcykKKwkJcmV0dXJuOworCisJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPmNsa2RtLnB0cjsgYXV0b2RlcCsrKSB7CisJCWlmIChJU19FUlIoYXV0b2RlcC0+Y2xrZG0ucHRyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJjbGtkbSAlc1xuIiwgYXV0b2RlcC0+Y2xrZG0ucHRyLT5uYW1lLAorCQkJIGNsa2RtLT5uYW1lKTsKKworCQljbGtkbV9hZGRfc2xlZXBkZXAoY2xrZG0sIGF1dG9kZXAtPmNsa2RtLnB0cik7CisJCWNsa2RtX2FkZF93a2RlcChjbGtkbSwgYXV0b2RlcC0+Y2xrZG0ucHRyKTsKKwl9Cit9CisKKy8qCisgKiBfY2xrZG1fYWRkX2F1dG9kZXBzIC0gcmVtb3ZlIGF1dG8gc2xlZXBkZXBzL3drZGVwcyBmcm9tIGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogUmVtb3ZlIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20gY2xvY2tkb21haW4gJ2Nsa2RtJworICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCisgKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZGlzYWJsZWQuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcDsKKworCWlmICghYXV0b2RlcHMpCisJCXJldHVybjsKKworCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5jbGtkbS5wdHI7IGF1dG9kZXArKykgeworCQlpZiAoSVNfRVJSKGF1dG9kZXAtPmNsa2RtLnB0cikpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJjbGtkbSAlc1xuIiwgYXV0b2RlcC0+Y2xrZG0ucHRyLT5uYW1lLAorCQkJIGNsa2RtLT5uYW1lKTsKKworCQljbGtkbV9kZWxfc2xlZXBkZXAoY2xrZG0sIGF1dG9kZXAtPmNsa2RtLnB0cik7CisJCWNsa2RtX2RlbF93a2RlcChjbGtkbSwgYXV0b2RlcC0+Y2xrZG0ucHRyKTsKKwl9Cit9CisKKy8qCisgKiBfb21hcDJfY2xrZG1fc2V0X2h3c3VwIC0gc2V0IHRoZSBod3N1cCBpZGxlIHRyYW5zaXRpb24gYml0CisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKiBAZW5hYmxlOiBpbnQgMCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZQorICoKKyAqIEludGVybmFsIGhlbHBlciBmb3IgYWN0dWFsbHkgc3dpdGNoaW5nIHRoZSBiaXQgdGhhdCBjb250cm9scyBod3N1cAorICogaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0uCisgKi8KK3N0YXRpYyB2b2lkIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgaW50IGVuYWJsZSkKK3sKKwl1MzIgYml0cywgdjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAoZW5hYmxlKQorCQkJYml0cyA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKKwkJZWxzZQorCQkJYml0cyA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSB8IGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQliaXRzID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQliaXRzID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CisKKwliaXRzID0gYml0cyA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOworCisJdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwl2IHw9IGJpdHM7CisJX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwogfQogCiAvKioKLSAqIGNsa2RtX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgY2xvY2tkb21haW4KLSAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gdW5yZWdpc3RlcgorICogX2luaXRfd2tkZXBfdXNlY291bnQgLSBpbml0aWFsaXplIHdrZGVwIHVzZWNvdW50cyB0byBtYXRjaCBoYXJkd2FyZQorICogQGNsa2RtOiBjbG9ja2RvbWFpbiB0byBpbml0aWFsaXplIHdrZGVwIHVzZWNvdW50cwogICoKLSAqIFJlbW92ZXMgYSBjbG9ja2RvbWFpbiBmcm9tIHRoZSBpbnRlcm5hbCBjbG9ja2RvbWFpbiBsaXN0LiAgUmV0dXJucwotICogLUVJTlZBTCBpZiBjbGtkbSBhcmd1bWVudCBpcyBOVUxMLgorICogSW5pdGlhbGl6ZSB0aGUgd2FrZXVwIGRlcGVuZGVuY3kgdXNlY291bnQgdmFyaWFibGVzIGZvciBjbG9ja2RvbWFpbiBAY2xrZG0uCisgKiBJZiBhIHdha2V1cCBkZXBlbmRlbmN5IGlzIHByZXNlbnQgaW4gdGhlIGhhcmR3YXJlLCB0aGUgdXNlY291bnQgd2lsbCBiZQorICogc2V0IHRvIDE7IG90aGVyd2lzZSwgaXQgd2lsbCBiZSBzZXQgdG8gMC4gIFNvZnR3YXJlIHNob3VsZCBjbGVhciBhbGwKKyAqIHNvZnR3YXJlIHdha2V1cCBkZXBlbmRlbmNpZXMgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHdpc2hlcworICogdG8gZW5zdXJlIHRoYXQgYWxsIHVzZWNvdW50cyBzdGFydCBhdCAwLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1pbnQgY2xrZG1fdW5yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQorc3RhdGljIHZvaWQgX2luaXRfd2tkZXBfdXNlY291bnQoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlpZiAoIWNsa2RtKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl1MzIgdjsKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAotCXB3cmRtX2RlbF9jbGtkbShjbGtkbS0+cHdyZG0ucHRyLCBjbGtkbSk7CisJaWYgKCFjbGtkbS0+d2tkZXBfc3JjcykKKwkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmY2xrZG1fbXV0ZXgpOwotCWxpc3RfZGVsKCZjbGtkbS0+bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisJZm9yIChjZCA9IGNsa2RtLT53a2RlcF9zcmNzOyBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOwogCi0JcHJfZGVidWcoImNsb2NrZG9tYWluOiB1bnJlZ2lzdGVyZWQgJXNcbiIsIGNsa2RtLT5uYW1lKTsKKwkJaWYgKCFjZC0+Y2xrZG0gJiYgY2QtPmNsa2RtX25hbWUpCisJCQljZC0+Y2xrZG0gPSBfY2xrZG1fbG9va3VwKGNkLT5jbGtkbV9uYW1lKTsKIAotCXJldHVybiAwOworCQlpZiAoIWNkLT5jbGtkbSkgeworCQkJV0FSTighY2QtPmNsa2RtLCAiY2xvY2tkb21haW46ICVzOiB3a2RlcCBjbGtkbSAlcyBub3QgIgorCQkJICAgICAiZm91bmRcbiIsIGNsa2RtLT5uYW1lLCBjZC0+Y2xrZG1fbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXYgPSBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgICBQTV9XS0RFUCwKKwkJCQkJICAgICgxIDw8IGNkLT5jbGtkbS0+ZGVwX2JpdCkpOworCisJCWlmICh2KQorCQkJcHJfZGVidWcoImNsb2NrZG9tYWluOiAlczogd2FrZXVwIGRlcGVuZGVuY3kgYWxyZWFkeSAiCisJCQkJICJzZXQgdG8gd2FrZSB1cCB3aGVuICVzIHdha2VzXG4iLAorCQkJCSBjbGtkbS0+bmFtZSwgY2QtPmNsa2RtLT5uYW1lKTsKKworCQlhdG9taWNfc2V0KCZjZC0+d2tkZXBfdXNlY291bnQsICh2KSA/IDEgOiAwKTsKKwl9Cit9CisKKy8qKgorICogX2luaXRfc2xlZXBkZXBfdXNlY291bnQgLSBpbml0aWFsaXplIHNsZWVwZGVwIHVzZWNvdW50cyB0byBtYXRjaCBoYXJkd2FyZQorICogQGNsa2RtOiBjbG9ja2RvbWFpbiB0byBpbml0aWFsaXplIHNsZWVwZGVwIHVzZWNvdW50cworICoKKyAqIEluaXRpYWxpemUgdGhlIHNsZWVwIGRlcGVuZGVuY3kgdXNlY291bnQgdmFyaWFibGVzIGZvciBjbG9ja2RvbWFpbiBAY2xrZG0uCisgKiBJZiBhIHNsZWVwIGRlcGVuZGVuY3kgaXMgcHJlc2VudCBpbiB0aGUgaGFyZHdhcmUsIHRoZSB1c2Vjb3VudCB3aWxsIGJlCisgKiBzZXQgdG8gMTsgb3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHNldCB0byAwLiAgU29mdHdhcmUgc2hvdWxkIGNsZWFyIGFsbAorICogc29mdHdhcmUgc2xlZXAgZGVwZW5kZW5jaWVzIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiBpdCB3aXNoZXMKKyAqIHRvIGVuc3VyZSB0aGF0IGFsbCB1c2Vjb3VudHMgc3RhcnQgYXQgMC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2luaXRfc2xlZXBkZXBfdXNlY291bnQoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwl1MzIgdjsKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybjsKKworCWlmICghY2xrZG0tPnNsZWVwZGVwX3NyY3MpCisJCXJldHVybjsKKworCWZvciAoY2QgPSBjbGtkbS0+c2xlZXBkZXBfc3JjczsgY2QtPmNsa2RtX25hbWU7IGNkKyspIHsKKwkJaWYgKCFvbWFwX2NoaXBfaXMoY2QtPm9tYXBfY2hpcCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNkLT5jbGtkbSAmJiBjZC0+Y2xrZG1fbmFtZSkKKwkJCWNkLT5jbGtkbSA9IF9jbGtkbV9sb29rdXAoY2QtPmNsa2RtX25hbWUpOworCisJCWlmICghY2QtPmNsa2RtKSB7CisJCQlXQVJOKCFjZC0+Y2xrZG0sICJjbG9ja2RvbWFpbjogJXM6IHNsZWVwZGVwIGNsa2RtICVzICIKKwkJCSAgICAgIm5vdCBmb3VuZFxuIiwgY2xrZG0tPm5hbWUsIGNkLT5jbGtkbV9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdiA9IHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQLAorCQkJCQkgICAgKDEgPDwgY2QtPmNsa2RtLT5kZXBfYml0KSk7CisKKwkJaWYgKHYpCisJCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46ICVzOiBzbGVlcCBkZXBlbmRlbmN5IGFscmVhZHkgIgorCQkJCSAic2V0IHRvIHByZXZlbnQgZnJvbSBpZGxpbmcgdW50aWwgJXMgIgorCQkJCSAiaWRsZXNcbiIsIGNsa2RtLT5uYW1lLCBjZC0+Y2xrZG0tPm5hbWUpOworCisJCWF0b21pY19zZXQoJmNkLT5zbGVlcGRlcF91c2Vjb3VudCwgKHYpID8gMSA6IDApOworCX0KK307CisKKy8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBjbGtkbV9pbml0IC0gc2V0IHVwIHRoZSBjbG9ja2RvbWFpbiBsYXllcgorICogQGNsa2Rtczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMgdG8gcmVnaXN0ZXIKKyAqIEBpbml0X2F1dG9kZXBzOiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGF1dG9kZXBzIHRvIHJlZ2lzdGVyCisgKgorICogU2V0IHVwIGludGVybmFsIHN0YXRlLiAgSWYgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNsb2NrZG9tYWlucworICogQGNsa2RtcyB3YXMgc3VwcGxpZWQsIGxvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbG9ja2RvbWFpbnMsCisgKiByZWdpc3RlciBhbGwgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBTaW1pbGFybHksCisgKiBpZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW4gYXV0b2RlcGVuZGVuY2llcworICogQGluaXRfYXV0b2RlcHMgd2FzIHByb3ZpZGVkLCByZWdpc3RlciB0aG9zZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2RtcywKKwkJc3RydWN0IGNsa2RtX2F1dG9kZXAgKmluaXRfYXV0b2RlcHMpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICoqYyA9IE5VTEw7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKwlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcCA9IE5VTEw7CisKKwlpZiAoY2xrZG1zKQorCQlmb3IgKGMgPSBjbGtkbXM7ICpjOyBjKyspCisJCQlfY2xrZG1fcmVnaXN0ZXIoKmMpOworCisJYXV0b2RlcHMgPSBpbml0X2F1dG9kZXBzOworCWlmIChhdXRvZGVwcykKKwkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPmNsa2RtLnB0cjsgYXV0b2RlcCsrKQorCQkJX2F1dG9kZXBfbG9va3VwKGF1dG9kZXApOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgKmRlcF91c2Vjb3VudCByZWdpc3RlcnMgcmVmbGVjdCB0aGUgY3VycmVudAorCSAqIHN0YXRlIG9mIHRoZSBQUkNNLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CisJCV9pbml0X3drZGVwX3VzZWNvdW50KGNsa2RtKTsKKwkJX2luaXRfc2xlZXBkZXBfdXNlY291bnQoY2xrZG0pOworCX0KIH0KIAogLyoqCiAgKiBjbGtkbV9sb29rdXAgLSBsb29rIHVwIGEgY2xvY2tkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgogICogQG5hbWU6IG5hbWUgb2YgY2xvY2tkb21haW4KICAqCi0gKiBGaW5kIGEgcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICogc3RydWN0IGNsb2NrZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqIEZpbmQgYSByZWdpc3RlcmVkIGNsb2NrZG9tYWluIGJ5IGl0cyBuYW1lIEBuYW1lLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzdHJ1Y3QgY2xvY2tkb21haW4gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzAxLDE0ICs0MDQsMTIgQEAKIAogCWNsa2RtID0gTlVMTDsKIAotCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CiAJCWlmICghc3RyY21wKG5hbWUsIHRlbXBfY2xrZG0tPm5hbWUpKSB7CiAJCQljbGtkbSA9IHRlbXBfY2xrZG07CiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKIAogCXJldHVybiBjbGtkbTsKIH0KQEAgLTMxNyw4ICs0MTgsOCBAQAogICogY2xrZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgogICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCiAgKgotICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbi4KLSAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKKyAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIEBmbiBmb3IgZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluLgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEBmbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKICAqIG91dCBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAogICogdGhlIGNsa2RtX211dGV4IGhlbGQsIHNvIG5vIGNsb2NrZG9tYWluIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24KICAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaCBoYXJkd2FyZQpAQCAtMzM2LDEzICs0MzcsMTEgQEAKIAlpZiAoIWZuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKShjbGtkbSwgdXNlcik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzUzLDcgKzQ1Miw3IEBACiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHBvd2VyZG9tYWluIHRoYXQgdGhlIHNwZWNpZmllZCBjbG9ja2RvbWFpbgotICogJ2Nsa2RtJyBleGlzdHMgaW4sIG9yIHJldHVybnMgTlVMTCBpZiBjbGtkbSBhcmd1bWVudCBpcyBOVUxMLgorICogQGNsa2RtIGV4aXN0cyBpbiwgb3IgcmV0dXJucyBOVUxMIGlmIEBjbGtkbSBpcyBOVUxMLgogICovCiBzdHJ1Y3QgcG93ZXJkb21haW4gKmNsa2RtX2dldF9wd3JkbShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewpAQCAtMzY3LDExICs0NjYsMzA5IEBACiAvKiBIYXJkd2FyZSBjbG9ja2RvbWFpbiBjb250cm9sICovCiAKIC8qKgotICogb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQgLSByZWFkIHRoZSBjbGtkbSdzIGN1cnJlbnQgc3RhdGUgdHJhbnNpdGlvbiBtb2RlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgYSBjbG9ja2RvbWFpbgorICogY2xrZG1fYWRkX3drZGVwIC0gYWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiB3YWtlIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogdXAgKGRlcGVuZGVudCkKKyAqIEBjbGtkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgY2xvY2tkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQogICoKLSAqIFJldHVybiB0aGUgY2xvY2tkb21haW4ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZSBmcm9tIHRoZQotICogY29ycmVzcG9uZGluZyBkb21haW4gQ01fQ0xLU1RDVFJMIHJlZ2lzdGVyLglSZXR1cm5zIC1FSU5WQUwgaWYgY2xrCisgKiBXaGVuIHRoZSBjbG9ja2RvbWFpbiByZXByZXNlbnRlZCBieSBAY2xrZG0yIHdha2VzIHVwLCB3YWtlIHVwCisgKiBAY2xrZG0xLiBJbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgT01BUCwgdGhpcyBmZWF0dXJlIGlzCisgKiBkZXNpZ25lZCB0byByZWR1Y2Ugd2FrZXVwIGxhdGVuY3kgb2YgdGhlIGRlcGVuZGVudCBjbG9ja2RvbWFpbiBAY2xrZG0xLgorICogUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgY2xvY2tkb21haW4gcG9pbnRlcnMsCisgKiAtRU5PRU5UIGlmIEBjbGtkbTIgY2Fubm90IHdha2UgdXAgY2xrZG0xIGluIGhhcmR3YXJlLCBvciAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9hZGRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNkLT53a2RlcF91c2Vjb3VudCkgPT0gMSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIHdpbGwgd2FrZSB1cCAlcyB3aGVuICVzIHdha2VzICIKKwkJCSAidXBcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKKworCQlwcm1fc2V0X21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAorCQkJCSAgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2RlbF93a2RlcCAtIHJlbW92ZSBhIHdha2V1cCBkZXBlbmRlbmN5IGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogd2FrZSB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIHVwIChkZXBlbmRlbnQpCisgKiBAY2xrZG0yOiB3aGVuIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogd2FrZXMgdXAgKHNvdXJjZSkKKyAqCisgKiBSZW1vdmUgYSB3YWtldXAgZGVwZW5kZW5jeSBjYXVzaW5nIEBjbGtkbTEgdG8gd2FrZSB1cCB3aGVuIEBjbGtkbTIKKyAqIHdha2VzIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgY2xvY2tkb21haW4KKyAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIEBjbGtkbTIgY2Fubm90IHdha2UgdXAgY2xrZG0xIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9kZWxfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNkLT53a2RlcF91c2Vjb3VudCkgPT0gMCkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIHdpbGwgbm8gbG9uZ2VyIHdha2UgdXAgJXMgIgorCQkJICJhZnRlciAlcyB3YWtlcyB1cFxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOworCisJCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX3JlYWRfd2tkZXAgLSByZWFkIHdha2V1cCBkZXBlbmRlbmN5IHN0YXRlIGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogd2FrZSB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIHVwIChkZXBlbmRlbnQpCisgKiBAY2xrZG0yOiB3aGVuIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogd2FrZXMgdXAgKHNvdXJjZSkKKyAqCisgKiBSZXR1cm4gMSBpZiBhIGhhcmR3YXJlIHdha2V1cCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIEBjbGtkbTEgd2lsbCBiZQorICogYXdva2VuIHdoZW4gQGNsa2RtMiB3YWtlcyB1cDsgMCBpZiBkZXBlbmRlbmN5IGlzIG5vdCBzZXQ7IC1FSU5WQUwKKyAqIGlmIGVpdGhlciBjbG9ja2RvbWFpbiBwb2ludGVyIGlzIGludmFsaWQ7IG9yIC1FTk9FTlQgaWYgdGhlIGhhcmR3YXJlCisgKiBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogd2FrZXVwIGRlcGVuZGVuY2llcy4gIFdha2V1cCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IGNsa2RtX3JlYWRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwkvKiBYWFggSXQncyBmYXN0ZXIgdG8gcmV0dXJuIHRoZSBhdG9taWMgd2tkZXBfdXNlY291bnQgKi8KKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVAsCisJCQkJICAgICAgICgxIDw8IGNsa2RtMi0+ZGVwX2JpdCkpOworfQorCisvKioKKyAqIGNsa2RtX2NsZWFyX2FsbF93a2RlcHMgLSByZW1vdmUgYWxsIHdha2V1cCBkZXBlbmRlbmNpZXMgZnJvbSB0YXJnZXQgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gcmVtb3ZlIGFsbCB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20KKyAqCisgKiBSZW1vdmUgYWxsIGludGVyLWNsb2NrZG9tYWluIHdha2V1cCBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBjYXVzZQorICogQGNsa2RtIHRvIHdha2UuICBJbnRlbmRlZCB0byBiZSB1c2VkIGR1cmluZyBib290IHRvIGluaXRpYWxpemUgdGhlCisgKiBQUkNNIHRvIGEga25vd24gc3RhdGUsIGFmdGVyIGFsbCBjbG9ja2RvbWFpbnMgYXJlIHB1dCBpbnRvIHN3c3VwIGlkbGUKKyAqIGFuZCB3b2tlbiB1cC4gIFJldHVybnMgLUVJTlZBTCBpZiBAY2xrZG0gcG9pbnRlciBpcyBpbnZhbGlkLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9jbGVhcl9hbGxfd2tkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisJdTMyIG1hc2sgPSAwOworCisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGNkID0gY2xrZG0tPndrZGVwX3NyY3M7IGNkICYmIGNkLT5jbGtkbV9uYW1lOyBjZCsrKSB7CisJCWlmICghb21hcF9jaGlwX2lzKGNkLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJLyogUFJNIGFjY2Vzc2VzIGFyZSBzbG93LCBzbyBtaW5pbWl6ZSB0aGVtICovCisJCW1hc2sgfD0gMSA8PCBjZC0+Y2xrZG0tPmRlcF9iaXQ7CisJCWF0b21pY19zZXQoJmNkLT53a2RlcF91c2Vjb3VudCwgMCk7CisJfQorCisJcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2FkZF9zbGVlcGRlcCAtIGFkZCBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQGNsa2RtMjogd2hlbiB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIFByZXZlbnQgQGNsa2RtMSBmcm9tIGF1dG9tYXRpY2FsbHkgZ29pbmcgaW5hY3RpdmUgKGFuZCB0aGVuIHRvCisgKiByZXRlbnRpb24gb3Igb2ZmKSBpZiBAY2xrZG0yIGlzIGFjdGl2ZS4gIFJldHVybnMgLUVJTlZBTCBpZgorICogcHJlc2VudGVkIHdpdGggaW52YWxpZCBjbG9ja2RvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCisgKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwCisgKiBkZXBlbmRlbmNpZXMsIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBzZXQgaW4KKyAqIGhhcmR3YXJlLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCisJCXJldHVybiAtRUlOVkFMOworCisJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIoY2QpKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCisJCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIGNsa2RtMS0+bmFtZSwKKwkJCSBjbGtkbTItPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihjZCk7CisJfQorCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjZC0+c2xlZXBkZXBfdXNlY291bnQpID09IDEpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyAiCisJCQkgImlzIGFjdGl2ZVxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOworCisJCWNtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2RlbF9zbGVlcGRlcCAtIHJlbW92ZSBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQGNsa2RtMjogd2hlbiB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIEFsbG93IEBjbGtkbTEgdG8gYXV0b21hdGljYWxseSBnbyBpbmFjdGl2ZSAoYW5kIHRoZW4gdG8gcmV0ZW50aW9uIG9yCisgKiBvZmYpLCBpbmRlcGVuZGVudCBvZiB0aGUgYWN0aXZpdHkgc3RhdGUgb2YgQGNsa2RtMi4gIFJldHVybnMgLUVJTlZBTAorICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBjbG9ja2RvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCisgKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKKyAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBjbGVhcmVkIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9kZWxfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT5zbGVlcGRlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKGNkKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2QpOworCX0KKworCWlmIChhdG9taWNfZGVjX3JldHVybigmY2QtPnNsZWVwZGVwX3VzZWNvdW50KSA9PSAwKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogd2lsbCBubyBsb25nZXIgcHJldmVudCAlcyBmcm9tICIKKwkJCSAic2xlZXBpbmcgaWYgJXMgaXMgYWN0aXZlXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKworCQljbV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCSAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbGtkbV9yZWFkX3NsZWVwZGVwIC0gcmVhZCBzbGVlcCBkZXBlbmRlbmN5IHN0YXRlIGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogcHJldmVudCB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGZyb20gc2xlZXBpbmcgKGRlcGVuZGVudCkKKyAqIEBjbGtkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgY2xvY2tkb21haW4gKiBpcyBhY3RpdmUgKHNvdXJjZSkKKyAqCisgKiBSZXR1cm4gMSBpZiBhIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY3kgZXhpc3RzIHdoZXJlaW4gQGNsa2RtMSB3aWxsCisgKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIEBjbGtkbTIgaXMgYWN0aXZlOworICogMCBpZiBAY2xrZG0xJ3MgYXV0b21hdGljIHBvd2VyIHN0YXRlIGluYWN0aXZpdHkgdHJhbnNpdGlvbiBpcyBpbmRlcGVuZGVudAorICogb2YgQGNsa2RtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBjbG9ja2RvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCisgKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAorICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IGNsa2RtX3JlYWRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT5zbGVlcGRlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKGNkKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2QpOworCX0KKworCS8qIFhYWCBJdCdzIGZhc3RlciB0byByZXR1cm4gdGhlIGF0b21pYyBzbGVlcGRlcF91c2Vjb3VudCAqLworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCSAgICAgICBPTUFQMzQzMF9DTV9TTEVFUERFUCwKKwkJCQkgICAgICAgKDEgPDwgY2xrZG0yLT5kZXBfYml0KSk7Cit9CisKKy8qKgorICogY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyAtIHJlbW92ZSBhbGwgc2xlZXAgZGVwZW5kZW5jaWVzIGZyb20gdGFyZ2V0IGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIHJlbW92ZSBhbGwgc2xlZXAgZGVwZW5kZW5jaWVzIGZyb20KKyAqCisgKiBSZW1vdmUgYWxsIGludGVyLWNsb2NrZG9tYWluIHNsZWVwIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIHByZXZlbnQKKyAqIEBjbGtkbSBmcm9tIGlkbGluZy4gIEludGVuZGVkIHRvIGJlIHVzZWQgZHVyaW5nIGJvb3QgdG8gaW5pdGlhbGl6ZSB0aGUKKyAqIFBSQ00gdG8gYSBrbm93biBzdGF0ZSwgYWZ0ZXIgYWxsIGNsb2NrZG9tYWlucyBhcmUgcHV0IGludG8gc3dzdXAgaWRsZQorICogYW5kIHdva2VuIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbSBwb2ludGVyIGlzIGludmFsaWQsIG9yCisgKiAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKKwl1MzIgbWFzayA9IDA7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChjZCA9IGNsa2RtLT5zbGVlcGRlcF9zcmNzOyBjZCAmJiBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFBSTSBhY2Nlc3NlcyBhcmUgc2xvdywgc28gbWluaW1pemUgdGhlbSAqLworCQltYXNrIHw9IDEgPDwgY2QtPmNsa2RtLT5kZXBfYml0OworCQlhdG9taWNfc2V0KCZjZC0+c2xlZXBkZXBfdXNlY291bnQsIDApOworCX0KKworCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMobWFzaywgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkIC0gcmVhZCB0aGUgY2xrZG0ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZQorICogQGNsa2RtOiBzdHJ1Y3QgY2xrZG0gKiBvZiBhIGNsb2NrZG9tYWluCisgKgorICogUmV0dXJuIHRoZSBjbG9ja2RvbWFpbiBAY2xrZG0gY3VycmVudCBzdGF0ZSB0cmFuc2l0aW9uIG1vZGUgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgZG9tYWluIENNX0NMS1NUQ1RSTCByZWdpc3Rlci4JUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbQogICogaXMgTlVMTCBvciB0aGUgY3VycmVudCBtb2RlIHVwb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQpAQCAtMzgxLDcgKzc3OCw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrZG0tPmNsa3N0Y3RybF9yZWcpOwogCXYgJj0gY2xrZG0tPmNsa3RyY3RybF9tYXNrOwogCXYgPj49IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CiAKQEAgLTM5Myw3ICs3OTAsNyBAQAogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgogICoKICAqIEluc3RydWN0IHRoZSBDTSB0byBmb3JjZSBhIHNsZWVwIHRyYW5zaXRpb24gb24gdGhlIHNwZWNpZmllZAotICogY2xvY2tkb21haW4gJ2Nsa2RtJy4gIFJldHVybnMgLUVJTlZBTCBpZiBjbGsgaXMgTlVMTCBvciBpZgorICogY2xvY2tkb21haW4gQGNsa2RtLiAgUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbSBpcyBOVUxMIG9yIGlmCiAgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWluaXRpYXRlZCBzbGVlcDsgMCB1cG9uCiAgKiBzdWNjZXNzLgogICovCkBAIC00MTMsMTUgKzgxMCwxNyBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCiAJCWNtX3NldF9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBPTUFQMl9QTV9QV1NUQ1RSTCk7CiAKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSB8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAKLQkJdTMyIHYgPSAoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQIDw8CisJCXUzMiBiaXRzID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCA8PAogCQkJIF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaykpOwogCi0JCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLCB2LAotCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJCXUzMiB2ID0gX19yYXdfcmVhZGwoY2xrZG0tPmNsa3N0Y3RybF9yZWcpOworCQl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwkJdiB8PSBiaXRzOworCQlfX3Jhd193cml0ZWwodiwgY2xrZG0tPmNsa3N0Y3RybF9yZWcpOwogCiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC00MzUsNyArODM0LDcgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqCiAgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSB3YWtldXAgdHJhbnNpdGlvbiBvbiB0aGUgc3BlY2lmaWVkCi0gKiBjbG9ja2RvbWFpbiAnY2xrZG0nLiAgUmV0dXJucyAtRUlOVkFMIGlmIGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCisgKiBjbG9ja2RvbWFpbiBAY2xrZG0uICBSZXR1cm5zIC1FSU5WQUwgaWYgQGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCiAgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbnRyb2xsZWQgd2FrZXVwOyAwIHVwb24KICAqIHN1Y2Nlc3MuCiAgKi8KQEAgLTQ1NSwxNSArODU0LDE3IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKIAkJY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKIAotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpIHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKIAotCQl1MzIgdiA9IChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQIDw8CisJCXUzMiBiaXRzID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAgPDwKIAkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKIAotCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCQl1MzIgdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwkJdiAmPSB+KGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJCXYgfD0gYml0czsKKwkJX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKIAogCX0gZWxzZSB7CiAJCUJVRygpOwpAQCAtNDc2LDcgKzg3Nyw3IEBACiAgKiBvbWFwMl9jbGtkbV9hbGxvd19pZGxlIC0gZW5hYmxlIGh3c3VwIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgotICogQWxsb3cgdGhlIGhhcmR3YXJlIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRoZSBjbG9ja2RvbWFpbiBpbnRvCisgKiBBbGxvdyB0aGUgaGFyZHdhcmUgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBpbnRvCiAgKiBhY3RpdmUgb3IgaWRsZSBzdGF0ZXMsIGFzIG5lZWRlZCBieSBkb3duc3RyZWFtIGNsb2Nrcy4gIElmIHRoZQogICogY2xvY2tkb21haW4gaGFzIGFueSBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jawogICogZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcCBhdXRvZGVwZW5kZW5jaWVzIGFyZSBhZGRlZDsgdGhpcyBpcyBzbwpAQCAtNDk2LDggKzg5NywxNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZW5hYmxpbmcgYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgZm9yICVzXG4iLAogCQkgY2xrZG0tPm5hbWUpOwogCi0JaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKLQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisJLyoKKwkgKiBYWFggVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIFRJIGFkZHMgd2FrZXVwL3NsZWVwCisJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgorCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisJfQogCiAJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CiAKQEAgLTUwOSw4ICs5MTksOCBAQAogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgogICoKICAqIFByZXZlbnQgdGhlIGhhcmR3YXJlIGZyb20gYXV0b21hdGljYWxseSBzd2l0Y2hpbmcgdGhlIGNsb2NrZG9tYWluCi0gKiBpbnRvIGluYWN0aXZlIG9yIGlkbGUgc3RhdGVzLiAgSWYgdGhlIGNsb2NrZG9tYWluIGhhcyBkb3duc3RyZWFtCi0gKiBjbG9ja3MgZW5hYmxlZCBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcAorICogQGNsa2RtIGludG8gaW5hY3RpdmUgb3IgaWRsZSBzdGF0ZXMuICBJZiB0aGUgY2xvY2tkb21haW4gaGFzCisgKiBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jayBmcmFtZXdvcmssIHdrZGVwL3NsZWVwZGVwCiAgKiBhdXRvZGVwZW5kZW5jaWVzIGFyZSByZW1vdmVkLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQpAQCAtNTI5LDggKzkzOSwxNyBAQAogCiAJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQotCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwkvKgorCSAqIFhYWCBUaGlzIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgVEkgYWRkcyB3YWtldXAvc2xlZXAKKwkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgorCSAqLworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCisJCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCX0gZWxzZSB7CisJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwl9CiB9CiAKIApAQCAtNTQxLDE0ICs5NjAsMTQgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrCiAgKgotICogSW5jcmVtZW50IHRoZSB1c2Vjb3VudCBvZiB0aGlzIGNsb2NrZG9tYWluICdjbGtkbScgYW5kIGVuc3VyZSB0aGF0Ci0gKiBpdCBpcyBhd2FrZS4gIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjbGtfZW5hYmxlKCkgY29kZS4gIElmIHRoZQotICogY2xvY2tkb21haW4gaXMgaW4gc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIGZvcmNlIHRoZQotICogY2xvY2tkb21haW4gdG8gd2FrZS4gIElmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkCi0gKiBpZGxlIG1vZGUsIGFkZCBjbGtkbS1wd3JkbSBhdXRvZGVwZW5kZW5jaWVzLCB0byBlbnN1cmUgdGhhdCBkZXZpY2VzCi0gKiBpbiB0aGUgY2xvY2tkb21haW4gY2FuIGJlIHJlYWQgZnJvbS93cml0dGVuIHRvIGJ5IG9uLWNoaXAgcHJvY2Vzc29ycy4KLSAqIFJldHVybnMgLUVJTlZBTCBpZiBwYXNzZWQgbnVsbCBwb2ludGVyczsgcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvcgotICogaWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGh3c3VwIGlkbGUgbW9kZS4KKyAqIEluY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBhbmQgZW5zdXJlIHRoYXQgaXQKKyAqIGlzIGF3YWtlIGJlZm9yZSBAY2xrIGlzIGVuYWJsZWQuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkKKyAqIGNsa19lbmFibGUoKSBjb2RlLiAgSWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIHNvZnR3YXJlLXN1cGVydmlzZWQKKyAqIGlkbGUgbW9kZSwgZm9yY2UgdGhlIGNsb2NrZG9tYWluIHRvIHdha2UuICBJZiB0aGUgY2xvY2tkb21haW4gaXMgaW4KKyAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBhZGQgY2xrZG0tcHdyZG0gYXV0b2RlcGVuZGVuY2llcywgdG8KKyAqIGVuc3VyZSB0aGF0IGRldmljZXMgaW4gdGhlIGNsb2NrZG9tYWluIGNhbiBiZSByZWFkIGZyb20vd3JpdHRlbiB0bworICogYnkgb24tY2hpcCBwcm9jZXNzb3JzLiAgUmV0dXJucyAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOworICogcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaHdzdXAgaWRsZSBtb2RlLgogICovCiBpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCiB7CkBAIC01NTksNyArOTc4LDcgQEAKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwogCSAqLwogCi0JaWYgKCFjbGtkbSB8fCAhY2xrIHx8ICFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCisJaWYgKCFjbGtkbSB8fCAhY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmY2xrZG0tPnVzZWNvdW50KSA+IDEpCkBAIC01NzAsNiArOTg5LDkgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGVuYWJsZWRcbiIsIGNsa2RtLT5uYW1lLAogCQkgY2xrLT5uYW1lKTsKIAorCWlmICghY2xrZG0tPmNsa3N0Y3RybF9yZWcpCisJCXJldHVybiAwOworCiAJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8CkBAIC01OTMsMTMgKzEwMTUsMTQgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZGlzYWJsZWQgZG93bnN0cmVhbSBjbG9jawogICoKLSAqIERlY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiAnY2xrZG0nLiBJbnRlbmRlZCB0byBiZQotICogY2FsbGVkIGJ5IGNsa19kaXNhYmxlKCkgY29kZS4gIElmIHRoZSB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUKLSAqIGNsb2NrZG9tYWluIHRvIHNsZWVwIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUKLSAqIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMgKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBjbGtkbSB1c2Vjb3VudAotICogdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nIGlzIGVuYWJsZWQ7IG9yIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IKLSAqIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBod3N1cCBpZGxlIG1vZGUuCisgKiBEZWNyZW1lbnQgdGhlIHVzZWNvdW50IG9mIHRoaXMgY2xvY2tkb21haW4gQGNsa2RtIHdoZW4gQGNsayBpcworICogZGlzYWJsZWQuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgY2xrX2Rpc2FibGUoKSBjb2RlLiAgSWYgdGhlCisgKiBjbG9ja2RvbWFpbiB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUgY2xvY2tkb21haW4gdG8gc2xlZXAKKyAqIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUgY2xrZG0gYXV0b2RlcGVuZGVuY2llcworICogKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zIC1FSU5WQUwgaWYgcGFzc2VkIG51bGwKKyAqIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBAY2xrZG0gdXNlY291bnQgdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nCisgKiBpcyBlbmFibGVkOyBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbgorICogaHdzdXAgaWRsZSBtb2RlLgogICovCiBpbnQgb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKQogewpAQCAtNjEwLDcgKzEwMzMsNyBAQAogCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CiAJICovCiAKLQlpZiAoIWNsa2RtIHx8ICFjbGsgfHwgIWNsa2RtLT5jbGt0cmN0cmxfbWFzaykKKwlpZiAoIWNsa2RtIHx8ICFjbGspCiAJCXJldHVybiAtRUlOVkFMOwogCiAjaWZkZWYgREVCVUcKQEAgLTYyOCw2ICsxMDUxLDkgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGRpc2FibGVkXG4iLCBjbGtkbS0+bmFtZSwKIAkJIGNsay0+bmFtZSk7CiAKKwlpZiAoIWNsa2RtLT5jbGtzdGN0cmxfcmVnKQorCQlyZXR1cm4gMDsKKwogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmgKaW5kZXggYzRlZTA3Ni4uOGZjMTlmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCkBAIC0xLDE2ICsxLDQyMCBAQAogLyoKICAqIE9NQVAyLzMgY2xvY2tkb21haW5zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5IGFuZCBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY2xvY2tkb21haW5zIGFuZCBjbG9ja2RvbWFpbiB3YWtldXAvc2xlZXAKKyAqIGRlcGVuZGVuY2llcyBmb3IgdGhlIE9NQVAyLzMgY2hpcHMuICBTb21lIG5vdGVzOgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IGNsb2NrZG9tYWluOiBBbnkgY2xvY2tkb21haW4KKyAqIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkgbXVzdCBoYXZlIGEKKyAqIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseSBqdXN0CisgKiBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqIFRoZSBvdmVybHktc3BlY2lmaWMgZGVwX2JpdCBuYW1lcyBhcmUgZHVlIHRvIGEgYml0IG5hbWUgY29sbGlzaW9uCisgKiB3aXRoIENNX0ZDTEtFTl97RFNQLElWQTJ9LiAgVGhlIERTUC9JVkEyIFBNX1dLREVQIGFuZCBDTV9TTEVFUERFUCBzaGlmdAorICogdmFsdWUgYXJlIHRoZSBzYW1lIGZvciBhbGwgcG93ZXJkb21haW5zOiAyCisgKgorICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2UgY2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQorICogc2FuaXR5IGNoZWNrPworICogWFhYIGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0MzAgQ09SRQorICovCisKKy8qCisgKiBUby1EbyBMaXN0CisgKiAtPiBQb3J0IHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICogICAgZnJvbSB0aGUgUG93ZXIgZG9tYWluIGZyYW1ld29yawogICovCiAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOU19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAogCiAjaW5jbHVkZSA8cGxhdC9jbG9ja2RvbWFpbi5oPgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAicHJtLmgiCisKKy8qCisgKiBDbG9ja2RvbWFpbiBkZXBlbmRlbmNpZXMgZm9yIHdrZGVwcy9zbGVlcGRlcHMKKyAqCisgKiBYWFggSGFyZHdhcmUgZGVwZW5kZW5jaWVzIChlLmcuLCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUKKyAqIGNoYW5nZWQgaW4gc29mdHdhcmUpIGFyZSBub3QgaW5jbHVkZWQgaGVyZSB5ZXQsIGJ1dCBzaG91bGQgYmUuCisgKi8KKworLyogT01BUDIvMy1jb21tb24gd2FrZXVwIGRlcGVuZGVuY2llcyAqLworCisvKgorICogMjQyMC8yNDMwIFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQCisgKiAzNDMwRVMxIFBNX1dLREVQX0dGWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKKyAqIDM0MzBFUzIgUE1fV0tERVBfU0dYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogVGhlc2UgY2FuIHNoYXJlIGRhdGEgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgc2ltdWx0YW5lb3VzbHkKKyAqIG9uIHRoZSBzYW1lIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZ2Z4X3NneF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8CisJCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDI0WFgtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCisvKiBXYWtldXAgZGVwZW5kZW5jeSBzb3VyY2UgYXJyYXlzICovCisKKy8qIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNwXzI0eHhfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDI0MjAgUE1fV0tERVBfTVBVOiBDT1JFLCBEU1AsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbXB1XzI0eHhfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibWRtX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImdmeF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtZG1fY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworI2VuZGlmCisKKworLyogMjQzMC1zcGVjaWZpYyBwb3NzaWJsZSB3YWtldXAgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorCisvKiAyNDMwIFBNX1dLREVQX01ETTogQ09SRSwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtZG1fMjQzMF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisvKiBPTUFQMy1zcGVjaWZpYyBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisKKy8qIDM0MzA6IFBNX1dLREVQX1BFUjogQ09SRSwgSVZBMiwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBwZXJfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwRVMyOiBQTV9XS0RFUF9VU0JIT1NUOiBDT1JFLCBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIHVzYmhvc3Rfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwIFBNX1dLREVQX01QVTogQ09SRSwgSVZBMiwgRFNTLCBQRVIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG1wdV8zeHh4X3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gInBlcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGl2YTJfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gInBlcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDM0MzAgUE1fV0tERVBfQ0FNOiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGNhbV93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMCBQTV9XS0RFUF9EU1M6IElWQTIsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNzX3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwOiBQTV9XS0RFUF9ORU9OOiBNUFUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG5lb25fd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiBTbGVlcCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgZm9yIE9NQVAzLXNwZWNpZmljIGNsa2RtcyAqLworCisvKiAzNDMwOiBDTV9TTEVFUERFUF9EU1M6IE1QVSwgSVZBICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBkc3Nfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwOiBDTV9TTEVFUERFUF9QRVI6IE1QVSwgSVZBICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBwZXJfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9VU0JIT1NUOiBNUFUsIElWQSAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzA6IENNX1NMRUVQREVQX0NBTTogTVBVICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjYW1fc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDM0MzBFUzE6IENNX1NMRUVQREVQX0dGWDogTVBVCisgKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9TR1g6IE1QVQorICogVGhlc2UgY2FuIHNoYXJlIGRhdGEgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgc2ltdWx0YW5lb3VzbHkKKyAqIG9uIHRoZSBzYW1lIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZ2Z4X3NneF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KKwogCiAvKgogICogT01BUDIvMy1jb21tb24gY2xvY2tkb21haW5zCkBAIC0yMSwxMCArNDI1LDEzIEBACiAgKiBzeXNfY2xrb3V0L3N5c19jbGtvdXQyLgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCiAvKiBUaGlzIGlzIGFuIGltcGxpY2l0IGNsb2NrZG9tYWluIC0gaXQgaXMgbmV2ZXIgZGVmaW5lZCBhcyBzdWNoIGluIFRSTSAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB3a3VwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJ3a3VwX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAorCS5kZXBfYml0CT0gT01BUF9FTl9XS1VQX1NISUZULAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCkBAIC00MCw2ICs0NDcsOCBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCisjZW5kaWYKKwogLyoKICAqIDI0MjAtb25seSBjbG9ja2RvbWFpbnMKICAqLwpAQCAtNTAsNiArNDU5LDggQEAKIAkubmFtZQkJPSAibXB1X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBtcHVfMjR4eF93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKIH07CkBAIC01OCwxMSArNDY5LDY0IEBACiAJLm5hbWUJCT0gIml2YTFfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGRzcF8yNHh4X3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAogfTsKIAotI2VuZGlmICAvKiBDT05GSUdfQVJDSF9PTUFQMjQyMCAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkc3BfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS53a2RlcF9zcmNzCT0gY29yZV8yNHh4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY29yZV9sNF9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKKyNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAyNDIwICovCiAKIAogLyoKQEAgLTc1LDgwICs1MzksMTA1IEBACiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihNUFVfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBtcHVfMjR4eF93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKIH07CiAKKy8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX01ETSAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtZG1fY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1kbV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAibWRtX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmRlcF9iaXQJPSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX1NISUZULAorCS53a2RlcF9zcmNzCT0gbWRtXzI0MzBfd2tkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDMwX0FVVE9TVEFURV9NRE1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF8yNDMwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDMwX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGRzcF8yNHh4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQorICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18yNHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzI0eHhfY2xrZG0KKyAqIGNvdWxkIGNhdXNlIHRyb3VibGUKKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQorICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18yNHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzI0eHhfY2xrZG0KKyAqIGNvdWxkIGNhdXNlIHRyb3VibGUKKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKwogI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAyNDMwICovCiAKIAogLyoKLSAqIDI0WFgtb25seSBjbG9ja2RvbWFpbnMKKyAqIE9NQVAzIGNsb2NrZG9tYWlucwogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNHh4X2Nsa2RtID0gewotCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMjR4eF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNHh4X2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjR4eF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLX07Ci0KLSNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAyNFhYICovCi0KLQotLyoKLSAqIDM0eHggY2xvY2tkb21haW5zCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzM0eHhfY2xrZG0gPSB7CitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQIHwgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuZGVwX2JpdAk9IE9NQVAzNDMwX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IG1wdV8zeHh4X3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogfTsKQEAgLTE1Nyw2ICs2NDYsOSBAQAogCS5uYW1lCQk9ICJuZW9uX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJuZW9uX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX05FT05fTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBuZW9uX3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTkVPTl9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0xNjUsNiArNjU3LDEwIEBACiAJLm5hbWUJCT0gIml2YTJfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuZGVwX2JpdAk9IE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9JVkEyX1NISUZULAorCS53a2RlcF9zcmNzCT0gaXZhMl93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMTczLDYgKzY2OSw5IEBACiAJLm5hbWUJCT0gImdmeF9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZ2Z4X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGdmeF9zZ3hfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCiB9OwpAQCAtMTgxLDYgKzY4MCwxMCBAQAogCS5uYW1lCQk9ICJzZ3hfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gInNneF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGdmeF9zZ3hfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwpAQCAtMTk2LDMwICs2OTksNTEgQEAKIAkubmFtZQkJPSAiZDJkX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMzR4eF9jbGtkbSA9IHsKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDNfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMzR4eF9jbGtkbSA9IHsKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zNHh4X2Nsa2RtID0geworLyogQW5vdGhlciBjYXNlIG9mIGJpdCBuYW1lIGNvbGxpc2lvbnMgYmV0d2VlbiBzZXZlcmFsIHJlZ2lzdGVyczogRU5fRFNTICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3NfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzc19wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fRFNTX1NISUZULAorCS53a2RlcF9zcmNzCT0gZHNzX3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGRzc19zbGVlcGRlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0yMjgsNiArNzUyLDEwIEBACiAJLm5hbWUJCT0gImNhbV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkud2tkZXBfc3Jjcwk9IGNhbV93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJPSBjYW1fc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMjM2LDYgKzc2NCwxMCBAQAogCS5uYW1lCQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJ1c2Job3N0X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSB1c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IHVzYmhvc3Rfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogfTsKQEAgLTI0NCw2ICs3NzYsMTEgQEAKIAkubmFtZQkJPSAicGVyX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJwZXJfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fUEVSX1NISUZULAorCS53a2RlcF9zcmNzCT0gcGVyX3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IHBlcl9zbGVlcGRlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX1BFUl9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0yNTYsNiArNzkzLDggQEAKIAkubmFtZQkJPSAiZW11X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJlbXVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IC8qIENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8ICAqL0NMS0RNX0NBTl9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMjkwLDY0ICs4MjksNzAgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwogCi0jZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworI2VuZGlmICAgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KKworI2luY2x1ZGUgImNsb2NrZG9tYWluczQ0eHguaCIKIAogLyoKLSAqIENsb2NrZG9tYWluLXBvd2VyZG9tYWluIGh3c3VwIGRlcGVuZGVuY2llcyAoMzRYWCBvbmx5KQorICogQ2xvY2tkb21haW4gaHdzdXAgZGVwZW5kZW5jaWVzIChPTUFQMyBvbmx5KQogICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCBjbGtkbV9wd3JkbV9hdXRvZGVwc1tdID0geworc3RhdGljIHN0cnVjdCBjbGtkbV9hdXRvZGVwIGNsa2RtX2F1dG9kZXBzW10gPSB7CiAJewotCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKKwkJLmNsa2RtCSAgID0geyAubmFtZSA9ICJtcHVfY2xrZG0iIH0sCiAJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQogCX0sCiAJewotCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9jbGtkbSIgfSwKIAkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiAJfSwKIAl7Ci0JCS5wd3JkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCiAJfQogfTsKIAogLyoKLSAqCisgKiBMaXN0IG9mIGNsb2NrZG9tYWluIHBvaW50ZXJzIHBlciBwbGF0Zm9ybQogICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsb2NrZG9tYWluc19vbWFwW10gPSB7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCSZ3a3VwX2Nsa2RtLAogCSZjbV9jbGtkbSwKIAkmcHJtX2Nsa2RtLAorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAogCSZtcHVfMjQyMF9jbGtkbSwKIAkmaXZhMV8yNDIwX2Nsa2RtLAorCSZkc3BfMjQyMF9jbGtkbSwKKwkmZ2Z4XzI0MjBfY2xrZG0sCisJJmNvcmVfbDNfMjQyMF9jbGtkbSwKKwkmY29yZV9sNF8yNDIwX2Nsa2RtLAorCSZkc3NfMjQyMF9jbGtkbSwKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKIAkmbXB1XzI0MzBfY2xrZG0sCiAJJm1kbV9jbGtkbSwKKwkmZHNwXzI0MzBfY2xrZG0sCisJJmdmeF8yNDMwX2Nsa2RtLAorCSZjb3JlX2wzXzI0MzBfY2xrZG0sCisJJmNvcmVfbDRfMjQzMF9jbGtkbSwKKwkmZHNzXzI0MzBfY2xrZG0sCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCi0JJmRzcF9jbGtkbSwKLQkmZ2Z4XzI0eHhfY2xrZG0sCi0JJmNvcmVfbDNfMjR4eF9jbGtkbSwKLQkmY29yZV9sNF8yNHh4X2Nsa2RtLAotCSZkc3NfMjR4eF9jbGtkbSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKLQkmbXB1XzM0eHhfY2xrZG0sCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwkmbXB1XzN4eHhfY2xrZG0sCiAJJm5lb25fY2xrZG0sCiAJJml2YTJfY2xrZG0sCiAJJmdmeF8zNDMwZXMxX2Nsa2RtLAogCSZzZ3hfY2xrZG0sCiAJJmQyZF9jbGtkbSwKLQkmY29yZV9sM18zNHh4X2Nsa2RtLAotCSZjb3JlX2w0XzM0eHhfY2xrZG0sCi0JJmRzc18zNHh4X2Nsa2RtLAorCSZjb3JlX2wzXzN4eHhfY2xrZG0sCisJJmNvcmVfbDRfM3h4eF9jbGtkbSwKKwkmZHNzXzN4eHhfY2xrZG0sCiAJJmNhbV9jbGtkbSwKIAkmdXNiaG9zdF9jbGtkbSwKIAkmcGVyX2Nsa2RtLApAQCAtMzU5LDYgKzkwNCwzMyBAQAogCSZkcGxsNV9jbGtkbSwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkmbDRfY2VmdXNlXzQ0eHhfY2xrZG0sCisJJmw0X2NmZ180NHh4X2Nsa2RtLAorCSZ0ZXNsYV80NHh4X2Nsa2RtLAorCSZsM19nZnhfNDR4eF9jbGtkbSwKKwkmaXZhaGRfNDR4eF9jbGtkbSwKKwkmbDRfc2VjdXJlXzQ0eHhfY2xrZG0sCisJJmw0X3Blcl80NHh4X2Nsa2RtLAorCSZhYmVfNDR4eF9jbGtkbSwKKwkmbDNfaW5zdHJfNDR4eF9jbGtkbSwKKwkmbDNfaW5pdF80NHh4X2Nsa2RtLAorCSZtcHVzc180NHh4X2Nsa2RtLAorCSZtcHUwXzQ0eHhfY2xrZG0sCisJJm1wdTFfNDR4eF9jbGtkbSwKKwkmbDNfZW1pZl80NHh4X2Nsa2RtLAorCSZsNF9hb180NHh4X2Nsa2RtLAorCSZkdWNhdGlfNDR4eF9jbGtkbSwKKwkmbDNfMl80NHh4X2Nsa2RtLAorCSZsM18xXzQ0eHhfY2xrZG0sCisJJmwzX2QyZF80NHh4X2Nsa2RtLAorCSZpc3NfNDR4eF9jbGtkbSwKKwkmbDNfZHNzXzQ0eHhfY2xrZG0sCisJJmw0X3drdXBfNDR4eF9jbGtkbSwKKwkmZW11X3N5c180NHh4X2Nsa2RtLAorCSZsM19kbWFfNDR4eF9jbGtkbSwKKyNlbmRpZgorCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4YWFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eC5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogT01BUDQgQ2xvY2sgZG9tYWlucyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRvLURvIExpc3QKKyAqIC0+IFBvcHVsYXRlIHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOUzQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TNDRYWF9ICisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X2NlZnVzZV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImw0X2NlZnVzZV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjZWZ1c2VfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0NFRlVTRV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF9jZmdfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9jZmdfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRDRkdfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB0ZXNsYV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gInRlc2xhX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gInRlc2xhX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9URVNMQV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2dmeF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2dmeF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0dGWF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YWhkXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiaXZhaGRfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiaXZhaGRfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0lWQUhEX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfc2VjdXJlXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfc2VjdXJlX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImw0cGVyX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X3Blcl80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImw0X3Blcl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJsNHBlcl9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRQRVJfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBhYmVfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJhYmVfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiYWJlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfaW5zdHJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19pbnN0cl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19pbml0XzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfaW5pdF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJsM2luaXRfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0wzSU5JVF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdXNzXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1c3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9NUFVfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1MF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gIm1wdTBfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MF9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fUERBX0NQVTBfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1MV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gIm1wdTFfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fUERBX0NQVTFfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZW1pZl80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2VtaWZfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTUVNSUZfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfYW9fNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9hb19jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJhbHdheXNfb25fY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fQUxXT05fQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHVjYXRpXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiZHVjYXRpX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0RVQ0FUSV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzXzJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM18yX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0wzXzJfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM18xXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfMV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM18xX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZDJkXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfZDJkX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0QyRF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJpc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9DQU1fQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19kc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19kc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9EU1NfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF93a3VwXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfd2t1cF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9XS1VQX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZW11X3N5c180NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImVtdV9zeXNfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZW11X3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9FTVVfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19kbWFfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19kbWFfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fU0RNQV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKaW5kZXggNjkyM2RlYjkuLmEzYTNjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaApAQCAtNTUsNyArNTUsNyBAQAogLyogQml0cyBzcGVjaWZpYyB0byBlYWNoIHJlZ2lzdGVyICovCiAKIC8qIENNX0ZDTEtFTl9JVkEyICovCi0jZGVmaW5lIE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTIJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX01BU0sJCSgxIDw8IDApCiAjZGVmaW5lIE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfU0hJRlQJCTAKIAogLyogQ01fQ0xLRU5fUExMX0lWQTIgKi8KQEAgLTE2OCw2ICsxNjgsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fU0RSQwkJCQkoMSA8PCAxKQogI2RlZmluZSBPTUFQMzQzMF9FTl9TRFJDX1NISUZUCQkJCTEKIAorLyogQU0zNVhYIHNwZWNpZmljIENNX0lDTEtFTjFfQ09SRSBiaXRzICovCisjZGVmaW5lIEFNMzVYWF9FTl9JUFNTX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgQU0zNVhYX0VOX0lQU1NfU0hJRlQJCQkJNAorI2RlZmluZSBBTTM1WFhfRU5fVUFSVDRfTUFTSwkJCSgxIDw8IDIzKQorI2RlZmluZSBBTTM1WFhfRU5fVUFSVDRfU0hJRlQJCQkJMjMKKwogLyogQ01fSUNMS0VOMl9DT1JFICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX1BLQQkJCQkJKDEgPDwgNCkKICNkZWZpbmUgT01BUDM0MzBfRU5fUEtBX1NISUZUCQkJCTQKQEAgLTIyMCw2ICsyMjYsMTAgQEAKICNkZWZpbmUgT01BUDM0MzBfU1RfU1NJX1NUREJZX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMzQzMF9TVF9TU0lfU1REQllfTUFTSwkJCSgxIDw8IDApCiAKKy8qIEFNMzV4eCBzcGVjaWZpYyBDTV9JRExFU1QxX0NPUkUgYml0cyAqLworI2RlZmluZSBBTTM1WFhfU1RfSVBTU19TSElGVAkJCQk1CisjZGVmaW5lIEFNMzVYWF9TVF9JUFNTX01BU0sgCQkJCSgxIDw8IDUpCisKIC8qIENNX0lETEVTVDJfQ09SRSAqLwogI2RlZmluZSBPTUFQMzQzMF9TVF9QS0FfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQMzQzMF9TVF9QS0FfTUFTSwkJCQkoMSA8PCA0KQpAQCAtMzM2LDYgKzM0Niw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLCQkJCSgweDMgPDwgMikKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0wzX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfTDNfTUFTSwkJCQkoMHgzIDw8IDApCisjZGVmaW5lIE9NQVAzNjMwX0NMS1NFTF85Nk1fU0hJRlQJCQkxMgorI2RlZmluZSBPTUFQMzYzMF9DTEtTRUxfOTZNX01BU0sJCQkoMHgzIDw8IDEyKQogCiAvKiBDTV9DTEtTVENUUkxfQ09SRSAqLwogI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfRDJEX1NISUZUCQkJNApAQCAtMzc5LDYgKzM5MSwxMCBAQAogI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVAkJMQogI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9NQVNLCQkoMSA8PCAxKQogCisvKiBDTV9JRExFU1RfU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1NHWF9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfU0dYX01BU0sJCQkJKDEgPDwgMSkKKwogLyogQ01fSUNMS0VOX1NHWCAqLwogI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVAkJMAogI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9NQVNLCQkoMSA8PCAwKQpAQCAtNTE3LDEyICs1MzMsMTggQEAKIC8qIENNX0NMS1NFTDJfUExMICovCiAjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfTUFTSwkJCSgweDdmZiA8PCA4KQorI2RlZmluZSBPTUFQMzYzMF9QRVJJUEhfRFBMTF9NVUxUX01BU0sJCQkoMHhmZmYgPDwgOCkKICNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSwkJCSgweDdmIDw8IDApCisjZGVmaW5lIE9NQVAzNjMwX1BFUklQSF9EUExMX0RDT19TRUxfU0hJRlQJCTIxCisjZGVmaW5lIE9NQVAzNjMwX1BFUklQSF9EUExMX0RDT19TRUxfTUFTSwkJKDB4NyA8PCAyMSkKKyNkZWZpbmUgT01BUDM2MzBfUEVSSVBIX0RQTExfU0RfRElWX1NISUZUCQkyNAorI2RlZmluZSBPTUFQMzYzMF9QRVJJUEhfRFBMTF9TRF9ESVZfTUFTSwkJKDB4ZmYgPDwgMjQpCiAKIC8qIENNX0NMS1NFTDNfUExMICovCiAjZGVmaW5lIE9NQVAzNDMwX0RJVl85Nk1fU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQMzQzMF9ESVZfOTZNX01BU0sJCQkJKDB4MWYgPDwgMCkKKyNkZWZpbmUgT01BUDM2MzBfRElWXzk2TV9NQVNLCQkJCSgweDNmIDw8IDApCiAKIC8qIENNX0NMS1NFTDRfUExMICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9NVUxUX1NISUZUCQk4CkBAIC01NjksOCArNTkxLDEwIEBACiAvKiBDTV9DTEtTRUxfRFNTICovCiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9UVl9TSElGVAkJCTgKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RWX01BU0sJCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgT01BUDM2MzBfQ0xLU0VMX1RWX01BU0sJCQkJKDB4M2YgPDwgOCkKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0RTUzFfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9EU1MxX01BU0sJCQkoMHgxZiA8PCAwKQorI2RlZmluZSBPTUFQMzYzMF9DTEtTRUxfRFNTMV9NQVNLCQkJKDB4M2YgPDwgMCkKIAogLyogQ01fU0xFRVBERVBfRFNTIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtNTk4LDYgKzYyMiw3IEBACiAvKiBDTV9DTEtTRUxfQ0FNICovCiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9DQU1fU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSwkJCSgweDFmIDw8IDApCisjZGVmaW5lIE9NQVAzNjMwX0NMS1NFTF9DQU1fTUFTSwkJCSgweDNmIDw8IDApCiAKIC8qIENNX1NMRUVQREVQX0NBTSBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTY5Myw2ICs3MTgsNyBAQAogLyogQ01fQ0xLU0VMMV9FTVUgKi8KICNkZWZpbmUgT01BUDM0MzBfRElWX0RQTEw0X1NISUZUCQkJMjQKICNkZWZpbmUgT01BUDM0MzBfRElWX0RQTEw0X01BU0sJCQkJKDB4MWYgPDwgMjQpCisjZGVmaW5lIE9NQVAzNjMwX0RJVl9EUExMNF9NQVNLCQkJCSgweDNmIDw8IDI0KQogI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDNfU0hJRlQJCQkxNgogI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSwkJCQkoMHgxZiA8PCAxNikKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX1NISUZUCQkJMTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy00NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtNDR4eC5oCmluZGV4IDBlNjdmNzUuLmFjODQ1OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy00NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaApAQCAtMjYsNyArMjYsNyBAQAogCiAKIC8qIFVzZWQgYnkgQ01fTDNfMV9EWU5BTUlDREVQLCBDTV9NUFVfRFlOQU1JQ0RFUCwgQ01fVEVTTEFfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9BQkVfRFlOREVQX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0FCRV9EWU5ERVBfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9BQkVfRFlOREVQX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyoKQEAgLTM0LDE1ICszNCwxNSBAQAogICogQ01fTDNJTklUX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCwKICAqIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCRV9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0FCRV9TVEFUREVQX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfQUJFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX0RZTkRFUF9TSElGVAkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9BTFdPTkNPUkVfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9BTFdPTkNPUkVfU1RBVERFUF9TSElGVAkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9BTFdPTkNPUkVfU1RBVERFUF9TSElGVAkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0FMV09OQ09SRV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKgpAQCAtNTAsMzcxICs1MCwzNzEgQEAKICAqIENNX0FVVE9JRExFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9BVVRPSURMRV9EUExMX0FCRSwgQ01fQVVUT0lETEVfRFBMTF9DT1JFLAogICogQ01fQVVUT0lETEVfRFBMTF9ERFJQSFksIENNX0FVVE9JRExFX0RQTExfSVZBLCBDTV9BVVRPSURMRV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0FVVE9fRFBMTF9NT0RFX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fRFBMTF9NT0RFX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQVVUT19EUExMX01PREVfTUFTSwkJCQlCSVRGSUVMRCgwLCAyKQogCiAvKiBVc2VkIGJ5IENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0VGVVNFX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDQ0MzBfQ0VGVVNFX0RZTkRFUF9TSElGVAkJCQkxNwogI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTcsIDE3KQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDQ0MzBfQ0VGVVNFX1NUQVRERVBfU0hJRlQJCQkJMTcKICNkZWZpbmUgT01BUDQ0MzBfQ0VGVVNFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNywgMTcpCiAKIC8qIFVzZWQgYnkgQ00xX0FCRV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFXzI0TV9HRkNMS19TSElGVAkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV8yNE1fR0ZDTEtfU0hJRlQJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV8yNE1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfQUxXT05fMzJLX0NMS19TSElGVAkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9BTFdPTl8zMktfQ0xLX1NISUZUCQkxMgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfQUxXT05fMzJLX0NMS19NQVNLCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX0xQX0NMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9MUF9DTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9MUF9DTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ00xX0FCRV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX1NZU0NMS19TSElGVAkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfU1lTQ0xLX1NISUZUCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX1NZU0NMS19NQVNLCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9YMl9DTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfWDJfQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfWDJfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX01FTUlGX0NMS1NUQ1RSTCwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfRExMX0NMS19TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX0RMTF9DTEtfU0hJRlQJCTExCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX0RMTF9DTEtfTUFTSwkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTFfQ0xLX1NISUZUCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMV9DTEtfU0hJRlQJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTFfQ0xLX01BU0sJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTJfQ0xLX1NISUZUCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMl9DTEtfU0hJRlQJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTJfQ0xLX01BU0sJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTV9DQU1fQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NBTV9QSFlfQ1RSTF9HQ0xLX1NISUZUCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DQU1fUEhZX0NUUkxfR0NMS19TSElGVAkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DQU1fUEhZX0NUUkxfR0NMS19NQVNLCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ09SRV9EUExMX0VNVV9DTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NPUkVfRFBMTF9FTVVfQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NPUkVfRFBMTF9FTVVfQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fQ0VGVVNFX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DVVNUX0VGVVNFX1NZU19DTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NVU1RfRUZVU0VfU1lTX0NMS19TSElGVAkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DVVNUX0VGVVNFX1NZU19DTEtfTUFTSwkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RMTF9DTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETExfQ0xLX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETExfQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMTBfR0ZDTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMF9HRkNMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMTBfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMV9HRkNMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMV9HRkNMS19TSElGVAkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDExX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQyX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDJfR0ZDTEtfU0hJRlQJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQyX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQzX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDNfR0ZDTEtfU0hJRlQJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQzX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQ0X0dGQ0xLX1NISUZUCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDRfR0ZDTEtfU0hJRlQJCQkxMwogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQ0X0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQ5X0dGQ0xLX1NISUZUCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDlfR0ZDTEtfU0hJRlQJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQ5X0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxNCwgMTQpCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EU1NfQUxXT05fU1lTX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19BTFdPTl9TWVNfQ0xLX1NISUZUCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EU1NfQUxXT05fU1lTX0NMS19NQVNLCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EU1NfRkNMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19GQ0xLX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EU1NfRkNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9EVUNBVElfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RVQ0FUSV9HQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFVDQVRJX0dDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RVQ0FUSV9HQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9FTUFDXzUwTUhaX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNQUNfNTBNSFpfQ0xLX1NISUZUCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9FTUFDXzUwTUhaX0NMS19NQVNLCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fRU1VX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9FTVVfU1lTX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNVV9TWVNfQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9FTVVfU1lTX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9DQU1fQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZESUZfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRkRJRl9HRkNMS19TSElGVAkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZESUZfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMTJNX0dGQ0xLX1NISUZUCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18xMk1fR0ZDTEtfU0hJRlQJCTE1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMTJNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE1LCAxNSkKIAogLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9GVU5DXzI0TV9HRkNMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMjRNX0dGQ0xLX1NISUZUCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9GVU5DXzI0TV9HRkNMS19NQVNLCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IRE1JX1BIWV80OE1IWl9HRkNMS19TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hETUlfUEhZXzQ4TUhaX0dGQ0xLX1NISUZUCQkxMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IRE1JX1BIWV80OE1IWl9HRkNMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfNDgwTV9HRkNMS19TSElGVAkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfNDgwTV9HRkNMS19TSElGVAkJMjAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV80ODBNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV9HRkNMS19TSElGVAkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfR0ZDTEtfU0hJRlQJCTI2CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDI2LCAyNikKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMl80ODBNX0dGQ0xLX1NISUZUCQkoMSA8PCAyMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMl80ODBNX0dGQ0xLX1NISUZUCQkyMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyXzQ4ME1fR0ZDTEtfTUFTSwkJQklURklFTEQoMjEsIDIxKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyX0dGQ0xLX1NISUZUCQkoMSA8PCAyNykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMl9HRkNMS19TSElGVAkJMjcKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMl9HRkNMS19NQVNLCQkJQklURklFTEQoMjcsIDI3KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF8zMktfR0ZDTEtfU0hJRlQJCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzMyS19HRkNMS19TSElGVAkJMzEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF8zMktfR0ZDTEtfTUFTSwkJQklURklFTEQoMzEsIDMxKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzQ4TUNfR0ZDTEtfU0hJRlQJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzQ4TUNfR0ZDTEtfU0hJRlQJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNDhNQ19HRkNMS19NQVNLCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNDhNX0dGQ0xLX1NISUZUCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1fR0ZDTEtfU0hJRlQJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNDhNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF82ME1fUDFfR0ZDTEtfU0hJRlQJCSgxIDw8IDI4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMV9HRkNMS19TSElGVAkJMjgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF82ME1fUDFfR0ZDTEtfTUFTSwkJQklURklFTEQoMjgsIDI4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMl9HRkNMS19TSElGVAkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AyX0dGQ0xLX1NISUZUCQkyOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMl9HRkNMS19NQVNLCQlCSVRGSUVMRCgyOSwgMjkpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfOTZNX0dGQ0xLX1NISUZUCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF85Nk1fR0ZDTEtfU0hJRlQJCTExCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfOTZNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU0lfR0ZDTEtfU0hJRlQJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTSV9HRkNMS19TSElGVAkJMTYKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU0lfR0ZDTEtfTUFTSwkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DMV9HRkNMS19TSElGVAkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMxX0dGQ0xLX1NISUZUCQkxNwogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DMV9HRkNMS19NQVNLCQlCSVRGSUVMRCgxNywgMTcpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMyX0dGQ0xLX1NISUZUCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzJfR0ZDTEtfU0hJRlQJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMyX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzZfR0ZDTEtfU0hJRlQJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DNl9HRkNMS19TSElGVAkJMTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzZfR0ZDTEtfTUFTSwkJQklURklFTEQoMTksIDE5KQogCiAvKiBVc2VkIGJ5IENNX0NBTV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSVNTX0dDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JU1NfR0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSVNTX0dDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fSVZBSERfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lWQUhEX1JPT1RfQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JVkFIRF9ST09UX0NMS19TSElGVAkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JVkFIRF9ST09UX0NMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM0lOSVRfRFBMTF9BTFdPTl9DTEtfU0hJRlQJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzSU5JVF9EUExMX0FMV09OX0NMS19TSElGVAkxNAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM0lOSVRfRFBMTF9BTFdPTl9DTEtfTUFTSwkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IENNX0wzXzFfQ0xLU1RDVFJMLCBDTV9MM18xX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzFfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18xX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18xX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzXzJfQ0xLU1RDVFJMLCBDTV9MM18yX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzJfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18yX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18yX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0QyRF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRDJEX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRDJEX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EMkRfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fU0RNQV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRE1BX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRE1BX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19ETUFfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EU1NfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EU1NfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0RTU19HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0VNSUZfR0lDTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0VNSUZfR0lDTEtfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRU1JRl9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9HRlhfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0dGWF9HSUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0dGWF9HSUNMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfR0ZYX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTklUX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTklUX0dJQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOSVRfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTlNUUl9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfSU5TVFJfR0lDTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOU1RSX0dJQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOU1RSX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDRTRUNfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX1NFQ1VSRV9HSUNMS19TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfU0VDVVJFX0dJQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX1NFQ1VSRV9HSUNMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0FMV09OX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9BT19JQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQU9fSUNMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQU9fSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9DRUZVU0VfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0NFRlVTRV9HSUNMS19TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0VGVVNFX0dJQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0NFRlVTRV9HSUNMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0w0Q0ZHX0NMS1NUQ1RSTCwgQ01fTDRDRkdfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0ZHX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0ZHX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRkdfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fRDJEX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9EMkRfR0lDTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9EMkRfR0lDTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0QyRF9HSUNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfSU5JVF9HSUNMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfSU5JVF9HSUNMS19TSElGVAkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9JTklUX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfUEVSX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfUEVSX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9QRVJfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDRTRUNfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1NFQ1VSRV9HSUNMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfU0VDVVJFX0dJQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1NFQ1VSRV9HSUNMS19NQVNLCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX1dLVVBfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1dLVVBfR0lDTEtfU0hJRlQJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9XS1VQX0dJQ0xLX1NISUZUCQkxMgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9XS1VQX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgQ01fTVBVX0NMS1NUQ1RSTCwgQ01fTVBVX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX01QVV9EUExMX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX01QVV9EUExMX0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTVBVX0RQTExfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX09DUF9BQkVfR0lDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX09DUF9BQkVfR0lDTEtfU0hJRlQJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfT0NQX0FCRV9HSUNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8yNE1DX0dGQ0xLX1NISUZUCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzI0TUNfR0ZDTEtfU0hJRlQJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8yNE1DX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE2LCAxNikKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8zMktfR0ZDTEtfU0hJRlQJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfMzJLX0dGQ0xLX1NISUZUCQkxNwogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfMzJLX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxNywgMTcpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfNDhNX0dGQ0xLX1NISUZUCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzQ4TV9HRkNMS19TSElGVAkJMTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzQ4TV9HRkNMS19NQVNLCQkJQklURklFTEQoMTgsIDE4KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzk2TV9HRkNMS19TSElGVAkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl85Nk1fR0ZDTEtfU0hJRlQJCTE5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl85Nk1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDE5LCAxOSkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9BQkVfMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0FCRV8yNE1fR0ZDTEtfU0hJRlQJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9BQkVfMjRNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyogVXNlZCBieSBDTV9FTVVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9EUExMX0VNVV9DTEtfU0hJRlQJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfRFBMTF9FTVVfQ0xLX1NISUZUCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfRFBMTF9FTVVfQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDJfR0ZDTEtfU0hJRlQJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNBU1AyX0dGQ0xLX1NISUZUCQkyMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNBU1AyX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDNfR0ZDTEtfU0hJRlQJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNBU1AzX0dGQ0xLX1NISUZUCQkyMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNBU1AzX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDIxLCAyMSkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0JTUDRfR0ZDTEtfU0hJRlQJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNCU1A0X0dGQ0xLX1NISUZUCQkyMgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfTUNCU1A0X0dGQ0xLX01BU0sJCUJJVEZJRUxEKDIyLCAyMikKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9TWVNfR0ZDTEtfU0hJRlQJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfU1lTX0dGQ0xLX1NISUZUCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfU1lTX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fTUVNSUZfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QSFlfUk9PVF9DTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEhZX1JPT1RfQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEhZX1JPT1RfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fR0ZYX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TR1hfR0ZDTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TR1hfR0ZDTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NHWF9HRkNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9BTFdPTl9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfQ09SRV9TWVNDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9DT1JFX1NZU0NMS19TSElGVAkJMTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfQ09SRV9TWVNDTEtfTUFTSwkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0FMV09OX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9JVkFfU1lTQ0xLX1NISUZUCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfSVZBX1NZU0NMS19TSElGVAkJMTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfSVZBX1NZU0NMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0FMV09OX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9NUFVfU1lTQ0xLX1NISUZUCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9NUFVfU1lTQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX01QVV9TWVNDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1lTX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NZU19DTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NZU19DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fVEVTTEFfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RFU0xBX1JPT1RfQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9URVNMQV9ST09UX0NMS19TSElGVAkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9URVNMQV9ST09UX0NMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gwX0dGQ0xLX1NISUZUCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMF9HRkNMS19TSElGVAkJMjIKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMF9HRkNMS19NQVNLCQkJQklURklFTEQoMjIsIDIyKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gxX0dGQ0xLX1NISUZUCQkoMSA8PCAyMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMV9HRkNMS19TSElGVAkJMjMKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMV9HRkNMS19NQVNLCQkJQklURklFTEQoMjMsIDIzKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gyX0dGQ0xLX1NISUZUCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMl9HRkNMS19TSElGVAkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMl9HRkNMS19NQVNLCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0JfRFBMTF9IU19DTEtfU0hJRlQJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0JfRFBMTF9IU19DTEtfU0hJRlQJCTE1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VTQl9EUExMX0hTX0NMS19NQVNLCQlCSVRGSUVMRCgxNSwgMTUpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVNJTV9HRkNMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0lNX0dGQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVNJTV9HRkNMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1AzX0dGQ0xLX1NISUZUCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVRNSV9QM19HRkNMS19TSElGVAkJMzAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVRNSV9QM19HRkNMS19NQVNLCQkJQklURklFTEQoMzAsIDMwKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1JPT1RfR0ZDTEtfU0hJRlQJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1JPT1RfR0ZDTEtfU0hJRlQJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VUTUlfUk9PVF9HRkNMS19NQVNLCQlCSVRGSUVMRCgyNSwgMjUpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfV0tVUF8zMktfR0ZDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9XS1VQXzMyS19HRkNMS19TSElGVAkJMTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfV0tVUF8zMktfR0ZDTEtfTUFTSwkJQklURklFTEQoMTEsIDExKQogCiAvKgpAQCAtNDI2LDcgKzQyNiw3IEBACiAgKiBDTTFfQUJFX1RJTUVSNV9DTEtDVFJMLCBDTTFfQUJFX1RJTUVSNl9DTEtDVFJMLCBDTTFfQUJFX1RJTUVSN19DTEtDVFJMLAogICogQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TSElGVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TSElGVAkJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX01BU0sJCQkJCUJJVEZJRUxEKDI0LCAyNCkKIAogLyoKQEAgLTQzNCw0MyArNDM0LDQzIEBACiAgKiBDTV9EUExMX1NZU19SRUZfQ0xLU0VMLCBDTV9MNF9XS1VQX0NMS1NFTCwgQ01fQ0xLU0VMX0RVQ0FUSV9JU1NfUk9PVCwKICAqIENNX0NMS1NFTF9VU0JfNjBNSFoKICAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMF8wX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzBfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMF8wX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogUmVuYW1lZCBmcm9tIENMS1NFTCBVc2VkIGJ5IENNX0JZUENMS19EUExMX0lWQSwgQ01fQllQQ0xLX0RQTExfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzFfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzBfMV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzFfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKiBSZW5hbWVkIGZyb20gQ0xLU0VMIFVzZWQgYnkgQ01fTDNJTklUX0hTSV9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8yNF8yNV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzI0XzI1X1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8yNF8yNV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX09UR19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF82ME1fU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF82ME1fU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzYwTV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNCkKIAogLyogVXNlZCBieSBDTTFfQUJFX0FFU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQUVTU19GQ0xLX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQUVTU19GQ0xLX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9BRVNTX0ZDTEtfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0NPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFJlbmFtZWQgZnJvbSBDTEtTRUxfQ09SRSBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfMV8xX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9DT1JFXzFfMV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9DT1JFXzFfMV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9VU0lNX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0RJVl9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0RJVl9TSElGVAkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfRElWX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IENNX0NBTV9GRElGX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0ZDTEtfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9GQ0xLX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9GQ0xLX01BU0sJCQkJQklURklFTEQoMjQsIDI1KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX01DQlNQNF9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfU0hJRlQJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9TSElGVAkJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSwkJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyoKQEAgLTQ3OCw1OCArNDc4LDU4IEBACiAgKiBDTTFfQUJFX01DQVNQX0NMS0NUUkwsIENNMV9BQkVfTUNCU1AxX0NMS0NUUkwsIENNMV9BQkVfTUNCU1AyX0NMS0NUUkwsCiAgKiBDTTFfQUJFX01DQlNQM19DTEtDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9DTTFfQUJFX0RNSUNfU0hJRlQJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfQ00xX0FCRV9ETUlDX1NISUZUCTI2CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfQ00xX0FCRV9ETUlDX01BU0sJQklURklFTEQoMjYsIDI3KQogCiAvKiBVc2VkIGJ5IENNX0NMS1NFTF9DT1JFX1JFU1RPUkUsIENNX0NMS1NFTF9DT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MM19TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogUmVuYW1lZCBmcm9tIENMS1NFTF9MMyBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0wzX1NIQURPV19TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfU0hBRE9XX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0wzX1NIQURPV19NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0NPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0w0X1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MNF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MNF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0NMS1NFTF9BQkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX09QUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfT1BQX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX09QUF9NQVNLCQkJCUJJVEZJRUxEKDAsIDEpCiAKIC8qIFVzZWQgYnkgQ01fR0ZYX0dGWF9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QRVJfMTkyTV9TSElGVAkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BFUl8xOTJNX1NISUZUCQkJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QRVJfMTkyTV9NQVNLCQkJCUJJVEZJRUxEKDI1LCAyNikKIAogLyogVXNlZCBieSBDTV9FTVVfREVCVUdTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfU1RNX0NMS19TSElGVAkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUE1EX1NUTV9DTEtfU0hJRlQJCQkyNwogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUE1EX1NUTV9DTEtfTUFTSwkJCUJJVEZJRUxEKDI3LCAyOSkKIAogLyogVXNlZCBieSBDTV9FTVVfREVCVUdTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfVFJBQ0VfQ0xLX1NISUZUCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfVFJBQ0VfQ0xLX1NISUZUCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BNRF9UUkFDRV9DTEtfTUFTSwkJCUJJVEZJRUxEKDI0LCAyNikKIAogLyogVXNlZCBieSBDTV9HRlhfR0ZYX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NHWF9GQ0xLX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU0dYX0ZDTEtfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NHWF9GQ0xLX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKgogICogVXNlZCBieSBDTTFfQUJFX0RNSUNfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLCBDTTFfQUJFX01DQlNQMV9DTEtDVFJMLAogICogQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKIAogLyogUmVuYW1lZCBmcm9tIENMS1NFTF9TT1VSQ0UgVXNlZCBieSBDTV9MNFBFUl9NQ0JTUDRfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFXzI0XzI0X1NISUZUCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfU0hJRlQJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFXzI0XzI0X01BU0sJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AxX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AxX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX1NISUZUCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfVVRNSV9QMl9TSElGVAkJCQkyNQogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfVVRNSV9QMl9NQVNLCQkJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyoKQEAgLTU0NCwyMyArNTQ0LDIzIEBACiAgKiBDTV9JVkFIRF9DTEtTVENUUkwsIENNX0RTU19DTEtTVENUUkwsIENNX01QVV9DTEtTVENUUkwsIENNX1RFU0xBX0NMS1NUQ1RSTCwKICAqIENNMV9BQkVfQ0xLU1RDVFJMLCBDTV9NUFVfQ0xLU1RDVFJMX1JFU1RPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtUUkNUUkxfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLVFJDVFJMX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0sJCQkJCUJJVEZJRUxEKDAsIDEpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX0RQTExfRU1VX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9DT1JFX0RQTExfRU1VX0RJVl9NQVNLCQkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX0RQTExfRU1VX01VTFRfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX0RQTExfRU1VX01VTFRfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9NQVNLCQkJQklURklFTEQoOCwgMTgpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0QyRF9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX0QyRF9EWU5ERVBfU0hJRlQJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfRDJEX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBDTV9NUFVfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0QyRF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9EMkRfU1RBVERFUF9TSElGVAkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9EMkRfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyoKQEAgLTU3MCwxOSArNTcwLDE5IEBACiAgKiBDTV9TU0NfREVMVEFNU1RFUF9EUExMX0REUlBIWSwgQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9JVkEsCiAgKiBDTV9TU0NfREVMVEFNU1RFUF9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RFTFRBTVNURVBfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfREVMVEFNU1RFUF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RFTFRBTVNURVBfTUFTSwkJCQlCSVRGSUVMRCgwLCAxOSkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRExMX09WRVJSSURFX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFJlbmFtZWQgZnJvbSBETExfT1ZFUlJJREUgVXNlZCBieSBDTV9ETExfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9ETExfT1ZFUlJJREVfMF8wX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV8wXzBfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9ETExfT1ZFUlJJREVfMF8wX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRExMX1JFU0VUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RMTF9SRVNFVF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0RMTF9SRVNFVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKgpAQCAtNTkwLDQwICs1OTAsNDAgQEAKICAqIENNX0NMS1NFTF9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0RQTExfQUJFLCBDTV9DTEtTRUxfRFBMTF9DT1JFLAogICogQ01fQ0xLU0VMX0RQTExfRERSUEhZLCBDTV9DTEtTRUxfRFBMTF9JVkEsIENNX0NMS1NFTF9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQllQX0NMS1NFTF9TSElGVAkJCQkoMSA8PCAyMykKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX1NISUZUCQkJCTIzCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQllQX0NMS1NFTF9NQVNLCQkJCUJJVEZJRUxEKDIzLCAyMykKIAogLyogVXNlZCBieSBDTV9DTEtEQ09MRE9fRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtEQ09MRE9fR0FURV9DVFJMX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtEQ09MRE9fR0FURV9DVFJMX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS0RDT0xET19HQVRFX0NUUkxfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9DT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0NMS1NFTF9TSElGVAkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9DTEtTRUxfU0hJRlQJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9DTEtTRUxfTUFTSwkJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX00zX0RQTExfUEVSLCBDTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NM19EUExMX0FCRSwKICAqIENNX0RJVl9NM19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX00zX0RQTExfUEVSLCBDTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NM19EUExMX0FCRSwKICAqIENNX0RJVl9NM19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZDSEFDS19TSElGVAkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVkNIQUNLX1NISUZUCQkJNQogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZDSEFDS19NQVNLCQkJQklURklFTEQoNSwgNSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX00zX0RQTExfUEVSLCBDTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NM19EUExMX0FCRSwKICAqIENNX0RJVl9NM19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9HQVRFX0NUUkxfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9HQVRFX0NUUkxfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9QRVIsIENNX0RJVl9NMl9EUExMX1VOSVBSTywgQ01fRElWX00yX0RQTExfQUJFICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUWDJfR0FURV9DVFJMX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUWDJfR0FURV9DVFJMX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRYMl9HQVRFX0NUUkxfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyoKQEAgLTYzMSwxMSArNjMxLDExIEBACiAgKiBDTV9ESVZfTTJfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NMl9EUExMX0FCRSwgQ01fRElWX00yX0RQTExfQ09SRSwKICAqIENNX0RJVl9NMl9EUExMX0REUlBIWSwgQ01fRElWX00yX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLCQkJCUJJVEZJRUxEKDAsIDQpCiAKIC8qIFJlbmFtZWQgZnJvbSBEUExMX0NMS09VVF9ESVYgVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWXzBfNl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl8wXzZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl8wXzZfTUFTSwkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qCkBAIC02NDMsMTEgKzY0MywxMSBAQAogICogQ01fRElWX00yX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9ESVZfTTJfRFBMTF9BQkUsIENNX0RJVl9NMl9EUExMX0NPUkUsCiAgKiBDTV9ESVZfTTJfRFBMTF9ERFJQSFksIENNX0RJVl9NMl9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVkNIQUNLX1NISUZUCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfU0hJRlQJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVkNIQUNLX01BU0sJCQlCSVRGSUVMRCg1LCA1KQogCiAvKiBSZW5hbWVkIGZyb20gRFBMTF9DTEtPVVRfRElWQ0hBQ0sgVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfTTJfVVNCX1NISUZUCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19NMl9VU0JfU0hJRlQJCTcKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfTTJfVVNCX01BU0sJCUJJVEZJRUxEKDcsIDcpCiAKIC8qCkBAIC02NTUsMjMgKzY1NSwyMyBAQAogICogQ01fRElWX00yX0RQTExfQUJFLCBDTV9ESVZfTTJfRFBMTF9DT1JFLCBDTV9ESVZfTTJfRFBMTF9ERFJQSFksCiAgKiBDTV9ESVZfTTJfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9HQVRFX0NUUkxfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9HQVRFX0NUUkxfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX0RQTExfRU5fU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfRFBMTF9FTl9TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX0RQTExfRU5fTUFTSwkJCQlCSVRGSUVMRCg4LCAxMCkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX00yX0RJVl9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX00yX0RJVl9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTJfRElWX01BU0sJCQkJQklURklFTEQoMTEsIDE1KQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX001X0RJVl9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTVfRElWX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX001X0RJVl9NQVNLCQkJCUJJVEZJRUxEKDMsIDcpCiAKIC8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFLCBDTV9TSEFET1dfRlJFUV9DT05GSUcxICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9TWVNfUkVGX0NMS1NFTF9TSElGVAkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9TWVNfUkVGX0NMS1NFTF9TSElGVAkJCTEKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1NZU19SRUZfQ0xLU0VMX01BU0sJCQlCSVRGSUVMRCgxLCAxKQogCiAvKgpAQCAtNjc5LDExICs2NzksMTEgQEAKICAqIENNX0NMS1NFTF9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0RQTExfQUJFLCBDTV9DTEtTRUxfRFBMTF9DT1JFLAogICogQ01fQ0xLU0VMX0RQTExfRERSUEhZLCBDTV9DTEtTRUxfRFBMTF9JVkEsIENNX0NMS1NFTF9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0RJVl9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0RJVl9NQVNLCQkJCQlCSVRGSUVMRCgwLCA2KQogCiAvKiBSZW5hbWVkIGZyb20gRFBMTF9ESVYgVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfMF83X1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWXzBfN19TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWXzBfN19NQVNLCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qCkBAIC02OTEsMTEgKzY5MSwxMSBAQAogICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCiAgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9EUklGVEdVQVJEX0VOX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9EUklGVEdVQVJEX0VOX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0RSSUZUR1VBUkRfRU5fTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFJlbmFtZWQgZnJvbSBEUExMX0RSSUZUR1VBUkRfRU4gVXNlZCBieSBDTV9DTEtNT0RFX0RQTExfVU5JUFJPICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl8zXzNfU0hJRlQJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0RSSUZUR1VBUkRfRU5fM18zX1NISUZUCQkJMwogI2RlZmluZSBPTUFQNDQzMF9EUExMX0RSSUZUR1VBUkRfRU5fM18zX01BU0sJCQlCSVRGSUVMRCgzLCAzKQogCiAvKgpAQCAtNzAzLDcgKzcwMyw3IEBACiAgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKICAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0VOX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0VOX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfRU5fTUFTSwkJCQkJQklURklFTEQoMCwgMikKIAogLyoKQEAgLTcxMSw3ICs3MTEsNyBAQAogICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCiAgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9MUE1PREVfRU5fU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfTFBNT0RFX0VOX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfTFBNT0RFX0VOX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKgpAQCAtNzE5LDExICs3MTksMTEgQEAKICAqIENNX0NMS1NFTF9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0RQTExfQUJFLCBDTV9DTEtTRUxfRFBMTF9DT1JFLAogICogQ01fQ0xLU0VMX0RQTExfRERSUEhZLCBDTV9DTEtTRUxfRFBMTF9JVkEsIENNX0NMS1NFTF9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfTUFTSwkJCQkJQklURklFTEQoOCwgMTgpCiAKIC8qIFJlbmFtZWQgZnJvbSBEUExMX01VTFQgVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NVUxUX1VTQl9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfVVNCX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NVUxUX1VTQl9NQVNLCQkJCUJJVEZJRUxEKDgsIDE5KQogCiAvKgpAQCAtNzMxLDExICs3MzEsMTEgQEAKICAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAogICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfUkVHTTRYRU5fU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfUkVHTTRYRU5fU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9SRUdNNFhFTl9NQVNLCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9VU0IgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TRF9ESVZfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfU0RfRElWX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfU0RfRElWX01BU0sJCQkJQklURklFTEQoMjQsIDMxKQogCiAvKgpAQCAtNzQzLDcgKzc0Myw3IEBACiAgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKICAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19BQ0tfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0FDS19TSElGVAkJCQkxMwogI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19BQ0tfTUFTSwkJCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qCkBAIC03NTEsNyArNzUxLDcgQEAKICAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAogICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0RPV05TUFJFQURfU0hJRlQJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRE9XTlNQUkVBRF9TSElGVAkJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0RPV05TUFJFQURfTUFTSwkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyoKQEAgLTc1OSwxNTQgKzc1OSwxNTQgQEAKICAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAogICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0VOX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19FTl9TSElGVAkJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19FTl9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsIENNX0w0UEVSX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFNTX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfRFlOREVQX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFNTX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLAogICogQ01fTVBVX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RTU19TVEFUREVQX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RTU19TVEFUREVQX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFNTX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfRFlOREVQX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9EWU5ERVBfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfRFlOREVQX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBDTV9TRE1BX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfU1RBVERFUF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRlJFUV9VUERBVEVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRlJFUV9VUERBVEVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9GUkVRX1VQREFURV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0dGWF9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9EWU5ERVBfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfR0ZYX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0dGWF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9HRlhfU1RBVERFUF9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9HRlhfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcyICovCi0jZGVmaW5lIE9NQVA0NDMwX0dQTUNfRlJFUV9VUERBVEVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfR1BNQ19GUkVRX1VQREFURV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0dQTUNfRlJFUV9VUERBVEVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTRfRFBMTF9QRVIsIENNX0RJVl9NNF9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNF9EUExMX0NPUkUsIENNX0RJVl9NNF9EUExMX0REUlBIWSwgQ01fRElWX000X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZDSEFDS19TSElGVAkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWQ0hBQ0tfU0hJRlQJCTUKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWQ0hBQ0tfTUFTSwkJQklURklFTEQoNSwgNSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX000X0RQTExfUEVSLCBDTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTRfRFBMTF9DT1JFLCBDTV9ESVZfTTRfRFBMTF9ERFJQSFksIENNX0RJVl9NNF9EUExMX0lWQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0dBVEVfQ1RSTF9TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfR0FURV9DVFJMX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTRfRFBMTF9QRVIsIENNX0RJVl9NNF9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNF9EUExMX0NPUkUsIENNX0RJVl9NNF9EUExMX0REUlBIWSwgQ01fRElWX000X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfUFdETl9TSElGVAkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9QV0ROX1NISUZUCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNV9EUExMX1BFUiwgQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX001X0RQTExfQ09SRSwgQ01fRElWX001X0RQTExfRERSUEhZLCBDTV9ESVZfTTVfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZDSEFDS19TSElGVAkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWQ0hBQ0tfU0hJRlQJCTUKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWQ0hBQ0tfTUFTSwkJQklURklFTEQoNSwgNSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX001X0RQTExfUEVSLCBDTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTVfRFBMTF9DT1JFLCBDTV9ESVZfTTVfRFBMTF9ERFJQSFksIENNX0RJVl9NNV9EUExMX0lWQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0dBVEVfQ1RSTF9TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfR0FURV9DVFJMX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfUFdETl9TSElGVAkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9QV0ROX1NISUZUCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9TSElGVAkJCTAKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX01BU0sJCQlCSVRGSUVMRCgwLCA0KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19ESVZDSEFDS19TSElGVAkJNQogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0dBVEVfQ1RSTF9TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfR0FURV9DVFJMX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX1BXRE5fU0hJRlQJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfUFdETl9TSElGVAkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX1BXRE5fTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX003X0RQTExfUEVSLCBDTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTdfRFBMTF9DT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NN19EUExMX1BFUiwgQ01fRElWX003X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX003X0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZDSEFDS19TSElGVAkJNQogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NN19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9HQVRFX0NUUkxfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0dBVEVfQ1RSTF9TSElGVAkJOAogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9HQVRFX0NUUkxfTUFTSwkJQklURklFTEQoOCwgOCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX003X0RQTExfUEVSLCBDTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTdfRFBMTF9DT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfUFdETl9TSElGVAkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9QV0ROX1NISUZUCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQogCiAvKgpAQCAtOTYyLDIyICs5NjIsMjIgQEAKICAqIENNMV9BQkVfVElNRVI2X0NMS0NUUkwsIENNMV9BQkVfVElNRVI3X0NMS0NUUkwsIENNMV9BQkVfVElNRVI4X0NMS0NUUkwsCiAgKiBDTTFfQUJFX1dEVDNfQ0xLQ1RSTCwgQ01fQ00xX1BST0ZJTElOR19DTEtDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSURMRVNUX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfSURMRVNUX1NISUZUCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9EWU5BTUlDREVQLCBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSVNTX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JU1NfRFlOREVQX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSVNTX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLAogICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSVNTX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfSVNTX1NUQVRERVBfU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9JU1NfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9URVNMQV9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0lWQUhEX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9EWU5ERVBfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKgpAQCAtOTg2LDI1ICs5ODYsMjUgQEAKICAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX0RTU19TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAsCiAgKiBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0lWQUhEX1NUQVRERVBfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsIENNX0w0UEVSX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfRFlOREVQX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0QyRF9TVEFUSUNERVAsIENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLAogICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX1NUQVRERVBfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCwgQ01fTDNJTklUX0RZTkFNSUNERVAsCiAgKiBDTV9EU1NfRFlOQU1JQ0RFUCwgQ01fTVBVX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MM18xX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9MM18xX0RZTkRFUF9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0wzXzFfRFlOREVQX01BU0sJCQkJQklURklFTEQoNSwgNSkKIAogLyoKQEAgLTEwMTMsNyArMTAxMyw3IEBACiAgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9JVkFIRF9TVEFUSUNERVAsIENNX0RTU19TVEFUSUNERVAsCiAgKiBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MM18xX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfTDNfMV9TVEFUREVQX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfTDNfMV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoNSwgNSkKIAogLyoKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAgKiBDTV9HRlhfRFlOQU1JQ0RFUCwgQ01fTDRTRUNfRFlOQU1JQ0RFUCwgQ01fTDNJTklUX0RZTkFNSUNERVAsCiAgKiBDTV9DQU1fRFlOQU1JQ0RFUCwgQ01fSVZBSERfRFlOQU1JQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0wzXzJfRFlOREVQX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0wzXzJfRFlOREVQX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfTDNfMl9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKgpAQCAtMTAzMSwxMSArMTAzMSwxMSBAQAogICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fSVZBSERfU1RBVElDREVQLCBDTV9EU1NfU1RBVElDREVQLAogICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNfMl9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0wzXzJfU1RBVERFUF9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX0wzXzJfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMV9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfRFlOREVQX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyoKQEAgLTEwNDMsMTEgKzEwNDMsMTEgQEAKICAqIENNX0wzSU5JVF9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX01QVV9TVEFUSUNERVAsCiAgKiBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MNENGR19TVEFUREVQX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9MNENGR19TVEFUREVQX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0UEVSX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfRFlOREVQX1NISUZUCQkJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0w0UEVSX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyoKQEAgLTEwNTUsMzYgKzEwNTUsMzYgQEAKICAqIENNX0w0U0VDX1NUQVRJQ0RFUCwgQ01fTDNJTklUX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwKICAqIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0UEVSX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0w0UEVSX1NUQVRERVBfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0UEVSX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDRTRUNfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19EWU5ERVBfU0hJRlQJCQkJMTQKICNkZWZpbmUgT01BUDQ0MzBfTDRTRUNfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTQsIDE0KQogCiAvKgogICogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUCwgQ01fTDNJTklUX1NUQVRJQ0RFUCwKICAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX01QVV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19TVEFUREVQX1NISUZUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19TVEFUREVQX1NISUZUCQkJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX0w0U0VDX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNCwgMTQpCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfRFlOREVQX1NISUZUCQkJCTE1CiAjZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxNSwgMTUpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLAogICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDRXS1VQX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9TVEFUREVQX1NISUZUCQkJCTE1CiAjZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTUsIDE1KQogCiAvKgogICogVXNlZCBieSBDTV9EMkRfRFlOQU1JQ0RFUCwgQ01fTDNfMV9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQLAogICogQ01fTVBVX0RZTkFNSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfTUVNSUZfRFlOREVQX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfTUVNSUZfRFlOREVQX01BU0sJCQkJQklURklFTEQoNCwgNCkKIAogLyoKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9JVkFIRF9TVEFUSUNERVAsIENNX0RTU19TVEFUSUNERVAsCiAgKiBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX01FTUlGX1NUQVRERVBfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9TVEFUREVQX01BU0sJCQkJQklURklFTEQoNCwgNCkKIAogLyoKQEAgLTExMDMsNyArMTEwMyw3IEBACiAgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0REUlBIWSwgQ01fU1NDX01PREZSRVFESVZfRFBMTF9JVkEsCiAgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfRVhQT05FTlRfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NT0RGUkVRRElWX0VYUE9ORU5UX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9NT0RGUkVRRElWX0VYUE9ORU5UX01BU0sJCQlCSVRGSUVMRCg4LCAxMCkKIAogLyoKQEAgLTExMTMsNyArMTExMyw3IEBACiAgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0REUlBIWSwgQ01fU1NDX01PREZSRVFESVZfRFBMTF9JVkEsCiAgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfTUFOVElTU0FfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9NT0RGUkVRRElWX01BTlRJU1NBX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9NT0RGUkVRRElWX01BTlRJU1NBX01BU0sJCQlCSVRGSUVMRCgwLCA2KQogCiAvKgpAQCAtMTE2OSwyMyArMTE2OSwyMyBAQAogICogQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTCwKICAqIENNMV9BQkVfV0RUM19DTEtDVFJMLCBDTV9DTTFfUFJPRklMSU5HX0NMS0NUUkwKICAqLwotI2RlZmluZSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9NT0RVTEVNT0RFX01BU0sJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBDTV9EU1NfRFNTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOXzQ4TUhaX0NMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl80OE1IWl9DTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl80OE1IWl9DTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9CQU5ER0FQX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0JHQVBfMzJLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0JHQVBfMzJLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQkdBUF8zMktfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ0xLMzJLX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DTEszMktfU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ0xLMzJLX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9DQU1fSVNTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0NUUkxDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ1RSTENMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0NUUkxDTEtfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKgpAQCAtMTE5NSwxMTkgKzExOTUsMTE5IEBACiAgKiBDTV9MNFBFUl9HUElPM19DTEtDVFJMX1JFU1RPUkUsIENNX0w0UEVSX0dQSU80X0NMS0NUUkxfUkVTVE9SRSwKICAqIENNX0w0UEVSX0dQSU81X0NMS0NUUkxfUkVTVE9SRSwgQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTF9SRVNUT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RCQ0xLX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9EQkNMS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9EQkNMS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTUVNSUZfRExMX0NMS0NUUkwsIENNX01FTUlGX0RMTF9IX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RMTF9DTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRExMX0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RMTF9DTEtfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0RTU19EU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRFNTQ0xLX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9EU1NDTEtfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRFNTQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzBfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEswX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEswX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzFfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEsxX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEsxX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzJfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMl9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzJfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZVTkM0OE1DTEtfU0hJRlQJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZVTkM0OE1DTEtfU0hJRlQJCQkxNQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRlVOQzQ4TUNMS19NQVNLCQkJQklURklFTEQoMTUsIDE1KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMV9DTEtfU0hJRlQJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzQ4ME1fUDFfQ0xLX1NISUZUCQkxMwogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzQ4ME1fUDFfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM0ODBNX1AyX0NMS19TSElGVAkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMl9DTEtfU0hJRlQJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMl9DTEtfTUFTSwkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMV9DTEtfU0hJRlQJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDFfQ0xLX1NISUZUCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDFfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDJfQ0xLX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNjBNX1AyX0NMS19TSElGVAkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNjBNX1AyX0NMS19NQVNLCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX1NMSU1CVVMyX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1BFUjI0TUNfR0ZDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSMjRNQ19HRkNMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1BFUjI0TUNfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfU0xJTUJVUzJfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSQUJFMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSQUJFMjRNX0dGQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVJBQkUyNE1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEhZXzQ4TV9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QSFlfNDhNX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEhZXzQ4TV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfU0xJTUJVUzJfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NMSU1CVVNfQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NMSU1CVVNfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFJlbmFtZWQgZnJvbSBPUFRGQ0xLRU5fU0xJTUJVU19DTEsgVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfMTFfMTFfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfMTFfMTFfU0hJRlQJCTExCiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS18xMV8xMV9NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0RTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TWVNfQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TWVNfQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NZU19DTEtfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0RTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9UVl9DTEtfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9UVl9DTEtfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RWX0NMS19NQVNLCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVU5JUFJPMV9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9UWFBIWUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9UWFBIWUNMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RYUEhZQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMF9DTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMF9DTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gwX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VTQl9DSDFfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VTQl9DSDFfQ0xLX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMV9DTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gyX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMl9DTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMl9DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMV9DTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMV9DTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AxX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMl9DTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMl9DTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AyX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QM19DTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDNfQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDNfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9PVEdfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fWENMS19TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fWENMS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9YQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9FTVVfT1ZFUlJJREVfRFBMTF9QRVIsIENNX0VNVV9PVkVSUklERV9EUExMX0NPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1ZFUlJJREVfRU5BQkxFX1NISUZUCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9PVkVSUklERV9FTkFCTEVfU0hJRlQJCQkJMTkKICNkZWZpbmUgT01BUDQ0MzBfT1ZFUlJJREVfRU5BQkxFX01BU0sJCQkJQklURklFTEQoMTksIDE5KQogCiAvKiBVc2VkIGJ5IENNX0NMS1NFTF9BQkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEFEX0NMS1NfR0FURV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9QQURfQ0xLU19HQVRFX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfUEFEX0NMS1NfR0FURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fQ09SRV9EVkZTX0NVUlJFTlQsIENNX0lWQV9EVkZTX0NVUlJFTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEVSRl9DVVJSRU5UX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BFUkZfQ1VSUkVOVF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUkZfQ1VSUkVOVF9NQVNLCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qCkBAIC0xMzE1LDY2ICsxMzE1LDY2IEBACiAgKiBDTV9DT1JFX0RWRlNfUEVSRjQsIENNX0lWQV9EVkZTX1BFUkZfQUJFLCBDTV9JVkFfRFZGU19QRVJGX0lWQUhELAogICogQ01fSVZBX0RWRlNfUEVSRl9URVNMQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1BFUkZfUkVRX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QRVJGX1JFUV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QRVJGX1JFUV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiAqLwotI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfRElWX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9ESVZfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfRElWX01BU0sJCQkJQklURklFTEQoMCwgNikKIAogLyogVXNlZCBieSBDTV9FTVVfT1ZFUlJJREVfRFBMTF9QRVIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEVSX0RQTExfRU1VX01VTFRfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfTVVMVF9TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfUEVSX0RQTExfRU1VX01VTFRfTUFTSwkJCQlCSVRGSUVMRCg4LCAxOCkKIAogLyogVXNlZCBieSBDTV9SRVNUT1JFX1NUICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DT01QTEVURURfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UxX0NPTVBMRVRFRF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DT01QTEVURURfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX1JFU1RPUkVfU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DT01QTEVURURfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJBX0NPTVBMRVRFRF9TSElGVAkJCTEKICNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DT01QTEVURURfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IENNX1JFU1RPUkVfU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQl9DT01QTEVURURfU0hJRlQJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJCX0NPTVBMRVRFRF9TSElGVAkJCTIKICNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQl9DT01QTEVURURfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IENNX0VNVV9ERUJVR1NTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUE1EX1NUTV9NVVhfQ1RSTF9TSElGVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1EX1NUTV9NVVhfQ1RSTF9TSElGVAkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9QTURfU1RNX01VWF9DVFJMX01BU0sJCQkJQklURklFTEQoMjAsIDIxKQogCiAvKiBVc2VkIGJ5IENNX0VNVV9ERUJVR1NTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUE1EX1RSQUNFX01VWF9DVFJMX1NISUZUCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVA0NDMwX1BNRF9UUkFDRV9NVVhfQ1RSTF9TSElGVAkJCTIyCiAjZGVmaW5lIE9NQVA0NDMwX1BNRF9UUkFDRV9NVVhfQ1RSTF9NQVNLCQkJQklURklFTEQoMjIsIDIzKQogCiAvKiBVc2VkIGJ5IENNX0RZTl9ERVBfUFJFU0NBTCAqLwotI2RlZmluZSBPTUFQNDQzMF9QUkVTQ0FMX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QUkVTQ0FMX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoMCwgNSkKIAogLyogVXNlZCBieSBSRVZJU0lPTl9DTTIsIFJFVklTSU9OX0NNMSAqLwotI2RlZmluZSBPTUFQNDQzMF9SRVZfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SRVZfTUFTSwkJCQkJQklURklFTEQoMCwgNykKIAogLyoKICAqIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsCiAgKiBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9TQVJfTU9ERV9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FSX01PREVfU0hJRlQJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfU0FSX01PREVfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogVXNlZCBieSBDTV9TQ0FMRV9GQ0xLICovCi0jZGVmaW5lIE9NQVA0NDMwX1NDQUxFX0ZDTEtfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfU0NBTEVfRkNMS19TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NDQUxFX0ZDTEtfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0RNQV9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1NETUFfRFlOREVQX1NISUZUCQkJCTExCiAjZGVmaW5lIE9NQVA0NDMwX1NETUFfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0RNQV9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9TRE1BX1NUQVRERVBfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfU0RNQV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0NMS1NFTF9BQkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0xJTUJVU19DTEtfR0FURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfU0xJTUJVU19DTEtfR0FURV9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9TTElNQlVTX0NMS19HQVRFX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKgpAQCAtMTM5MCw3ICsxMzkwLDcgQEAKICAqIENNX0lWQUhEX0lWQUhEX0NMS0NUUkwsIENNX0RTU19ERUlTU19DTEtDVFJMLCBDTV9EU1NfRFNTX0NMS0NUUkwsCiAgKiBDTV9NUFVfTVBVX0NMS0NUUkwsIENNX1RFU0xBX1RFU0xBX0NMS0NUUkwsIENNMV9BQkVfQUVTU19DTEtDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RCWVNUX1NISUZUCQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfU1RCWVNUX1NISUZUCQkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9TVEJZU1RfTUFTSwkJCQkJQklURklFTEQoMTgsIDE4KQogCiAvKgpAQCAtMTM5OCwxMSArMTM5OCwxMSBAQAogICogQ01fSURMRVNUX0RQTExfQUJFLCBDTV9JRExFU1RfRFBMTF9DT1JFLCBDTV9JRExFU1RfRFBMTF9ERFJQSFksCiAgKiBDTV9JRExFU1RfRFBMTF9JVkEsIENNX0lETEVTVF9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX0NMS0RDT0xET19EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS0RDT0xET19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLRENPTERPX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS0RDT0xET19NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCkBAIC0xNDEwLDU4ICsxNDEwLDU4IEBACiAgKiBDTV9ESVZfTTJfRFBMTF9BQkUsIENNX0RJVl9NMl9EUExMX0NPUkUsIENNX0RJVl9NMl9EUExMX0REUlBIWSwKICAqIENNX0RJVl9NMl9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAogICogQ01fRElWX00zX0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUSElGX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRISUZfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUSElGX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9QRVIsIENNX0RJVl9NMl9EUExMX1VOSVBSTywgQ01fRElWX00yX0RQTExfQUJFICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUWDJfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUWDJfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRYMl9NQVNLCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX000X0RQTExfUEVSLCBDTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTRfRFBMTF9DT1JFLCBDTV9ESVZfTTRfRFBMTF9ERFJQSFksIENNX0RJVl9NNF9EUExMX0lWQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQxX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDFfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQxX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDJfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMl9TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDJfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNl9EUExMX1BFUiwgQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX002X0RQTExfQ09SRSwgQ01fRElWX002X0RQTExfRERSUEhZCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDNfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUM19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDNfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NN19EUExMX1BFUiwgQ01fRElWX003X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX003X0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQ0X1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDRfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQ0X01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX1NZU19DTEtTRUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1lTX0NMS1NFTF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TWVNfQ0xLU0VMX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU1lTX0NMS1NFTF9NQVNLCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFlOREVQX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFlOREVQX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfU1RBVERFUF9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKgpAQCAtMTQ2OSw2ICsxNDY5LDYgQEAKICAqIENNX0wzXzFfRFlOQU1JQ0RFUCwgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQLAogICogQ01fTDRQRVJfRFlOQU1JQ0RFUCwgQ01fTVBVX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9XSU5ET1dTSVpFX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9XSU5ET1dTSVpFX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1dJTkRPV1NJWkVfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjcpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAppbmRleCA5MGE0MDg2Li45NDcyOGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCkBAIC02Nyw3ICs2Nyw4IEBACiAjZGVmaW5lIENNX0NMS1NFTAkJCQkJMHgwMDQwCiAjZGVmaW5lIENNX0NMS1NFTDEJCQkJCUNNX0NMS1NFTAogI2RlZmluZSBDTV9DTEtTRUwyCQkJCQkweDAwNDQKLSNkZWZpbmUgQ01fQ0xLU1RDVFJMCQkJCQkweDAwNDgKKyNkZWZpbmUgT01BUDJfQ01fQ0xLU1RDVFJMCQkJCTB4MDA0OAorI2RlZmluZSBPTUFQNF9DTV9DTEtTVENUUkwJCQkJMHgwMDAwCiAKIAogLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlZ2lzdGVycyAqLwpAQCAtODgsNyArODksNyBAQAogI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTAkJCQlDTV9DTEtTRUwKICNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwJCQkJQ01fQ0xLU0VMMgogI2RlZmluZSBPTUFQMzQzMF9DTV9TTEVFUERFUAkJCQlDTV9DTEtTRUwyCi0jZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDMJCQkJQ01fQ0xLU1RDVFJMCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDMJCQkJT01BUDJfQ01fQ0xLU1RDVFJMCiAjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NUU1QJCQkJMHgwMDRjCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQJCQkJMHgwMDRjCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUJCQkJMHgwMDUwCkBAIC0xMzgsNSArMTM5LDggQEAKIC8qIENNX0lETEVTVF9HRlggKi8KICNkZWZpbmUgT01BUF9TVF9HRlgJCQkJCSgxIDw8IDApCiAKKy8qIENNX0lETEVTVCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgT01BUDI0WFhfQ01fSURMRVNUX1ZBTAkJMAorI2RlZmluZSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMCQkxCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwppbmRleCBjZGQxZjM1Li40M2Y4YTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwpAQCAtMTQwLDcgKzE0MCwxMSBAQAogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCiB7Ci0Jb21hcDJfY3RybF9iYXNlID0gb21hcDJfZ2xvYmFscy0+Y3RybDsKKwkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KKwlpZiAob21hcDJfZ2xvYmFscy0+Y3RybCkgeworCQlvbWFwMl9jdHJsX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPmN0cmwsIFNaXzRLKTsKKwkJV0FSTl9PTighb21hcDJfY3RybF9iYXNlKTsKKwl9CiB9CiAKIHZvaWQgX19pb21lbSAqb21hcF9jdHJsX2Jhc2VfZ2V0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKaW5kZXggMTJmMGNiZi4uM2QzZDAzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwpAQCAtNDUsNiArNDUsOCBAQAogI2RlZmluZSBPTUFQM19TVEFURV9DNiA1IC8qIEM2IC0gTVBVIE9GRiArIENvcmUgUkVUICovCiAjZGVmaW5lIE9NQVAzX1NUQVRFX0M3IDYgLyogQzcgLSBNUFUgT0ZGICsgQ29yZSBPRkYgKi8KIAorI2RlZmluZSBPTUFQM19TVEFURV9NQVggT01BUDNfU1RBVEVfQzcKKwogc3RydWN0IG9tYXAzX3Byb2Nlc3Nvcl9jeCB7CiAJdTggdmFsaWQ7CiAJdTggdHlwZTsKQEAgLTYwLDYgKzYyLDMwIEBACiBzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4IGN1cnJlbnRfY3hfc3RhdGU7CiBzdHJ1Y3QgcG93ZXJkb21haW4gKm1wdV9wZCwgKmNvcmVfcGQ7CiAKKy8qCisgKiBUaGUgbGF0ZW5jaWVzL3RocmVzaG9sZHMgZm9yIHZhcmlvdXMgQyBzdGF0ZXMgaGF2ZQorICogdG8gYmUgY29uZmlndXJlZCBmcm9tIHRoZSByZXNwZWN0aXZlIGJvYXJkIGZpbGVzLgorICogVGhlc2UgYXJlIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKHdoaWNoIG1pZ2h0IG5vdCBwcm92aWRlCisgKiB0aGUgYmVzdCBwb3dlciBzYXZpbmdzKSB1c2VkIG9uIGJvYXJkcyB3aGljaCBkbyBub3QKKyAqIHBhc3MgdGhlc2UgZGV0YWlscyBmcm9tIHRoZSBib2FyZCBmaWxlLgorICovCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfcGFyYW1zIGNwdWlkbGVfcGFyYW1zX3RhYmxlW10gPSB7CisJLyogQzEgKi8KKwl7MSwgMiwgMiwgNX0sCisJLyogQzIgKi8KKwl7MSwgMTAsIDEwLCAzMH0sCisJLyogQzMgKi8KKwl7MSwgNTAsIDUwLCAzMDB9LAorCS8qIEM0ICovCisJezEsIDE1MDAsIDE4MDAsIDQwMDB9LAorCS8qIEM1ICovCisJezEsIDI1MDAsIDc1MDAsIDEyMDAwfSwKKwkvKiBDNiAqLworCXsxLCAzMDAwLCA4NTAwLCAxNTAwMH0sCisJLyogQzcgKi8KKwl7MSwgMTAwMDAsIDMwMDAwLCAzMDAwMDB9LAorfTsKKwogc3RhdGljIGludCBvbWFwM19pZGxlX2JtX2NoZWNrKHZvaWQpCiB7CiAJaWYgKCFvbWFwM19jYW5fc2xlZXAoKSkKQEAgLTEwNCwxMyArMTMwLDYgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CiAKLQlpZiAoIWVuYWJsZV9vZmZfbW9kZSkgewotCQlpZiAobXB1X3N0YXRlIDwgUFdSRE1fUE9XRVJfUkVUKQotCQkJbXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwotCQlpZiAoY29yZV9zdGF0ZSA8IFBXUkRNX1BPV0VSX1JFVCkKLQkJCWNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7Ci0JfQotCiAJcHdyZG1fc2V0X25leHRfcHdyc3QobXB1X3BkLCBtcHVfc3RhdGUpOwogCXB3cmRtX3NldF9uZXh0X3B3cnN0KGNvcmVfcGQsIGNvcmVfc3RhdGUpOwogCkBAIC0xNDEsNiArMTYwLDY3IEBACiB9CiAKIC8qKgorICogbmV4dF92YWxpZF9zdGF0ZSAtIEZpbmQgbmV4dCB2YWxpZCBjLXN0YXRlCisgKiBAZGV2OiBjcHVpZGxlIGRldmljZQorICogQHN0YXRlOiBDdXJyZW50bHkgc2VsZWN0ZWQgYy1zdGF0ZQorICoKKyAqIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIHZhbGlkLCBpdCBpcyByZXR1cm5lZCBiYWNrIHRvIHRoZSBjYWxsZXIuCisgKiBFbHNlLCB0aGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhIGxvd2VyIGMtc3RhdGUgd2hpY2ggaXMgc3RpbGwKKyAqIHZhbGlkIChhcyBkZWZpbmVkIGluIG9tYXAzX3Bvd2VyX3N0YXRlc1tdKS4KKyAqLworc3RhdGljIHN0cnVjdCBjcHVpZGxlX3N0YXRlICpuZXh0X3ZhbGlkX3N0YXRlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGNwdWlkbGVfc3RhdGUgKmN1cnIpCit7CisJc3RydWN0IGNwdWlkbGVfc3RhdGUgKm5leHQgPSBOVUxMOworCXN0cnVjdCBvbWFwM19wcm9jZXNzb3JfY3ggKmN4OworCisJY3ggPSAoc3RydWN0IG9tYXAzX3Byb2Nlc3Nvcl9jeCAqKWNwdWlkbGVfZ2V0X3N0YXRlZGF0YShjdXJyKTsKKworCS8qIENoZWNrIGlmIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgKi8KKwlpZiAoY3gtPnZhbGlkKSB7CisJCXJldHVybiBjdXJyOworCX0gZWxzZSB7CisJCXU4IGlkeCA9IE9NQVAzX1NUQVRFX01BWDsKKworCQkvKgorCQkgKiBSZWFjaCB0aGUgY3VycmVudCBzdGF0ZSBzdGFydGluZyBhdCBoaWdoZXN0IEMtc3RhdGUKKwkJICovCisJCWZvciAoOyBpZHggPj0gT01BUDNfU1RBVEVfQzE7IGlkeC0tKSB7CisJCQlpZiAoJmRldi0+c3RhdGVzW2lkeF0gPT0gY3VycikgeworCQkJCW5leHQgPSAmZGV2LT5zdGF0ZXNbaWR4XTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFNob3VsZCBuZXZlciBoaXQgdGhpcyBjb25kaXRpb24uCisJCSAqLworCQlXQVJOX09OKG5leHQgPT0gTlVMTCk7CisKKwkJLyoKKwkJICogRHJvcCB0byBuZXh0IHZhbGlkIHN0YXRlLgorCQkgKiBTdGFydCBzZWFyY2ggZnJvbSB0aGUgbmV4dCAobG93ZXIpIHN0YXRlLgorCQkgKi8KKwkJaWR4LS07CisJCWZvciAoOyBpZHggPj0gT01BUDNfU1RBVEVfQzE7IGlkeC0tKSB7CisJCQlzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4ICpjeDsKKworCQkJY3ggPSBjcHVpZGxlX2dldF9zdGF0ZWRhdGEoJmRldi0+c3RhdGVzW2lkeF0pOworCQkJaWYgKGN4LT52YWxpZCkgeworCQkJCW5leHQgPSAmZGV2LT5zdGF0ZXNbaWR4XTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBDMSBhbmQgQzIgYXJlIGFsd2F5cyB2YWxpZC4KKwkJICogU28sIG5vIG5lZWQgdG8gY2hlY2sgZm9yICduZXh0PT1OVUxMJyBvdXRzaWRlIHRoaXMgbG9vcC4KKwkJICovCisJfQorCisJcmV0dXJuIG5leHQ7Cit9CisKKy8qKgogICogb21hcDNfZW50ZXJfaWRsZV9ibSAtIENoZWNrcyBmb3IgYW55IGJ1cyBhY3Rpdml0eQogICogQGRldjogY3B1aWRsZSBkZXZpY2UKICAqIEBzdGF0ZTogVGhlIHRhcmdldCBzdGF0ZSB0byBiZSBwcm9ncmFtbWVkCkBAIC0xNTIsNyArMjMyLDcgQEAKIHN0YXRpYyBpbnQgb21hcDNfZW50ZXJfaWRsZV9ibShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGNwdWlkbGVfc3RhdGUgKm5ld19zdGF0ZSA9IHN0YXRlOworCXN0cnVjdCBjcHVpZGxlX3N0YXRlICpuZXdfc3RhdGUgPSBuZXh0X3ZhbGlkX3N0YXRlKGRldiwgc3RhdGUpOwogCiAJaWYgKChzdGF0ZS0+ZmxhZ3MgJiBDUFVJRExFX0ZMQUdfQ0hFQ0tfQk0pICYmIG9tYXAzX2lkbGVfYm1fY2hlY2soKSkgewogCQlCVUdfT04oIWRldi0+c2FmZV9zdGF0ZSk7CkBAIC0xNjUsNiArMjQ1LDUwIEBACiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpZGxlX2RldmljZSwgb21hcDNfaWRsZV9kZXYpOwogCisvKioKKyAqIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcyAtIFVwZGF0ZSB0aGUgY3B1aWRsZSBzdGF0ZXMuCisgKgorICogQ3VycmVudGx5LCB0aGlzIGZ1bmN0aW9uIHRvZ2dsZXMgdGhlIHZhbGlkaXR5IG9mIGlkbGUgc3RhdGVzIGJhc2VkIHVwb24KKyAqIHRoZSBmbGFnICdlbmFibGVfb2ZmX21vZGUnLiBXaGVuIHRoZSBmbGFnIGlzIHNldCBhbGwgc3RhdGVzIGFyZSB2YWxpZC4KKyAqIEVsc2UsIHN0YXRlcyBsZWFkaW5nIHRvIE9GRiBzdGF0ZSBzZXQgdG8gYmUgaW52YWxpZC4KKyAqLwordm9pZCBvbWFwM19jcHVpZGxlX3VwZGF0ZV9zdGF0ZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IE9NQVAzX1NUQVRFX0MxOyBpIDwgT01BUDNfTUFYX1NUQVRFUzsgaSsrKSB7CisJCXN0cnVjdCBvbWFwM19wcm9jZXNzb3JfY3ggKmN4ID0gJm9tYXAzX3Bvd2VyX3N0YXRlc1tpXTsKKworCQlpZiAoZW5hYmxlX29mZl9tb2RlKSB7CisJCQljeC0+dmFsaWQgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKChjeC0+bXB1X3N0YXRlID09IFBXUkRNX1BPV0VSX09GRikgfHwKKwkJCQkoY3gtPmNvcmVfc3RhdGUJPT0gUFdSRE1fUE9XRVJfT0ZGKSkKKwkJCQljeC0+dmFsaWQgPSAwOworCQl9CisJfQorfQorCit2b2lkIG9tYXAzX3BtX2luaXRfY3B1aWRsZShzdHJ1Y3QgY3B1aWRsZV9wYXJhbXMgKmNwdWlkbGVfYm9hcmRfcGFyYW1zKQoreworCWludCBpOworCisJaWYgKCFjcHVpZGxlX2JvYXJkX3BhcmFtcykKKwkJcmV0dXJuOworCisJZm9yIChpID0gT01BUDNfU1RBVEVfQzE7IGkgPCBPTUFQM19NQVhfU1RBVEVTOyBpKyspIHsKKwkJY3B1aWRsZV9wYXJhbXNfdGFibGVbaV0udmFsaWQgPQorCQkJY3B1aWRsZV9ib2FyZF9wYXJhbXNbaV0udmFsaWQ7CisJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW2ldLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9ib2FyZF9wYXJhbXNbaV0uc2xlZXBfbGF0ZW5jeTsKKwkJY3B1aWRsZV9wYXJhbXNfdGFibGVbaV0ud2FrZV9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfYm9hcmRfcGFyYW1zW2ldLndha2VfbGF0ZW5jeTsKKwkJY3B1aWRsZV9wYXJhbXNfdGFibGVbaV0udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfYm9hcmRfcGFyYW1zW2ldLnRocmVzaG9sZDsKKwl9CisJcmV0dXJuOworfQorCiAvKiBvbWFwM19pbml0X3Bvd2VyX3N0YXRlcyAtIEluaXRpYWxpc2VzIHRoZSBPTUFQMyBzcGVjaWZpYyBDIHN0YXRlcy4KICAqCiAgKiBCZWxvdyBpcyB0aGUgZGVzY2lwdGlvbiBvZiBlYWNoIEMgc3RhdGUuCkBAIC0xNzksNzUgKzMwMywxMDMgQEAKIHZvaWQgb21hcF9pbml0X3Bvd2VyX3N0YXRlcyh2b2lkKQogewogCS8qIEMxIC4gTVBVIFdGSSArIENvcmUgYWN0aXZlICovCi0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS52YWxpZCA9IDE7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS52YWxpZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMV0udmFsaWQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS50eXBlID0gT01BUDNfU1RBVEVfQzE7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5zbGVlcF9sYXRlbmN5ID0gMjsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLndha2V1cF9sYXRlbmN5ID0gMjsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnRocmVzaG9sZCA9IDU7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5zbGVlcF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MxXS5zbGVlcF9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0ud2FrZXVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzFdLndha2VfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnRocmVzaG9sZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMV0udGhyZXNob2xkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOwogCiAJLyogQzIgLiBNUFUgV0ZJICsgQ29yZSBpbmFjdGl2ZSAqLwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0udmFsaWQgPSAxOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0udmFsaWQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzJdLnZhbGlkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0udHlwZSA9IE9NQVAzX1NUQVRFX0MyOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uc2xlZXBfbGF0ZW5jeSA9IDEwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0ud2FrZXVwX2xhdGVuY3kgPSAxMDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzJdLnRocmVzaG9sZCA9IDMwOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uc2xlZXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMl0uc2xlZXBfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzJdLndha2V1cF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MyXS53YWtlX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS50aHJlc2hvbGQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzJdLnRocmVzaG9sZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzJdLm1wdV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09OOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09OOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRDsKIAogCS8qIEMzIC4gTVBVIENTV1IgKyBDb3JlIGluYWN0aXZlICovCi0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS52YWxpZCA9IDE7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS52YWxpZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DM10udmFsaWQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS50eXBlID0gT01BUDNfU1RBVEVfQzM7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS5zbGVlcF9sYXRlbmN5ID0gNTA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS53YWtldXBfbGF0ZW5jeSA9IDUwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10udGhyZXNob2xkID0gMzAwOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10uc2xlZXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DM10uc2xlZXBfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLndha2V1cF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MzXS53YWtlX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS50aHJlc2hvbGQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzNdLnRocmVzaG9sZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLm1wdV9zdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAogCQkJCUNQVUlETEVfRkxBR19DSEVDS19CTTsKIAogCS8qIEM0IC4gTVBVIE9GRiArIENvcmUgaW5hY3RpdmUgKi8KLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLnZhbGlkID0gMTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLnZhbGlkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M0XS52YWxpZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLnR5cGUgPSBPTUFQM19TVEFURV9DNDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLnNsZWVwX2xhdGVuY3kgPSAxNTAwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0ud2FrZXVwX2xhdGVuY3kgPSAxODAwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udGhyZXNob2xkID0gNDAwMDsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzRdLnNsZWVwX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS53YWtldXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNF0ud2FrZV9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M0XS50aHJlc2hvbGQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5tcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKIAkJCQlDUFVJRExFX0ZMQUdfQ0hFQ0tfQk07CiAKIAkvKiBDNSAuIE1QVSBDU1dSICsgQ29yZSBDU1dSKi8KLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnZhbGlkID0gMTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnZhbGlkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M1XS52YWxpZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnR5cGUgPSBPTUFQM19TVEFURV9DNTsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnNsZWVwX2xhdGVuY3kgPSAyNTAwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0ud2FrZXVwX2xhdGVuY3kgPSA3NTAwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udGhyZXNob2xkID0gMTIwMDA7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS5zbGVlcF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M1XS5zbGVlcF9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0ud2FrZXVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzVdLndha2VfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnRocmVzaG9sZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNV0udGhyZXNob2xkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0uY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAogCQkJCUNQVUlETEVfRkxBR19DSEVDS19CTTsKIAogCS8qIEM2IC4gTVBVIE9GRiArIENvcmUgQ1NXUiAqLwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0udmFsaWQgPSAxOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0udmFsaWQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzZdLnZhbGlkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0udHlwZSA9IE9NQVAzX1NUQVRFX0M2OwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0uc2xlZXBfbGF0ZW5jeSA9IDMwMDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS53YWtldXBfbGF0ZW5jeSA9IDg1MDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS50aHJlc2hvbGQgPSAxNTAwMDsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzZdLnNsZWVwX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS53YWtldXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNl0ud2FrZV9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M2XS50aHJlc2hvbGQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5tcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOwogCiAJLyogQzcgLiBNUFUgT0ZGICsgQ29yZSBPRkYgKi8KLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnZhbGlkID0gMTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnZhbGlkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M3XS52YWxpZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnR5cGUgPSBPTUFQM19TVEFURV9DNzsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnNsZWVwX2xhdGVuY3kgPSAxMDAwMDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLndha2V1cF9sYXRlbmN5ID0gMzAwMDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS50aHJlc2hvbGQgPSAzMDAwMDA7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS5zbGVlcF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M3XS5zbGVlcF9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10ud2FrZXVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzddLndha2VfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnRocmVzaG9sZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DN10udGhyZXNob2xkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09GRjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfApAQCAtMzAyLDYgKzQ1NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldi0+c3RhdGVfY291bnQgPSBjb3VudDsKIAorCW9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcygpOworCiAJaWYgKGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ1BVaWRsZSByZWdpc3RlciBkZXZpY2UgZmFpbGVkXG4iLAogCQkgICAgICAgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCAxOGFkOTMxNi4uMjNlNGQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogI2RlZmluZSBNQk9YX1JFR19TSVpFICAgMHgxMjAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXBfbWJveF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWJveF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAkJPSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UsCiAJCS5lbmQJCT0gT01BUDI0WFhfTUFJTEJPWF9CQVNFICsgTUJPWF9SRUdfU0laRSAtIDEsCkBAIC0xNTYsMTAgKzE1NiwxNCBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CitzdGF0aWMgaW50IG9tYXAyX21ib3hfcmVzb3VyY2VzX3N6ID0gQVJSQVlfU0laRShvbWFwMl9tYm94X3Jlc291cmNlcyk7CisjZWxzZQorI2RlZmluZSBvbWFwMl9tYm94X3Jlc291cmNlcwkJTlVMTAorI2RlZmluZSBvbWFwMl9tYm94X3Jlc291cmNlc19zegkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwX21ib3hfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAzX21ib3hfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJCT0gT01BUDM0WFhfTUFJTEJPWF9CQVNFLAogCQkuZW5kCQk9IE9NQVAzNFhYX01BSUxCT1hfQkFTRSArIE1CT1hfUkVHX1NJWkUgLSAxLApAQCAtMTcwLDEyICsxNzQsMTYgQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9Oworc3RhdGljIGludCBvbWFwM19tYm94X3Jlc291cmNlc19zeiA9IEFSUkFZX1NJWkUob21hcDNfbWJveF9yZXNvdXJjZXMpOworI2Vsc2UKKyNkZWZpbmUgb21hcDNfbWJveF9yZXNvdXJjZXMJCU5VTEwKKyNkZWZpbmUgb21hcDNfbWJveF9yZXNvdXJjZXNfc3oJCTAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIAogI2RlZmluZSBPTUFQNF9NQk9YX1JFR19TSVpFCTB4MTMwCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXBfbWJveF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDRfbWJveF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCAgICAgICAgICA9IE9NQVA0NFhYX01BSUxCT1hfQkFTRSwKIAkJLmVuZCAgICAgICAgICAgID0gT01BUDQ0WFhfTUFJTEJPWF9CQVNFICsKQEAgLTE4MywxMCArMTkxLDE0IEBACiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJewotCQkuc3RhcnQgICAgICAgICAgPSBJTlRfNDRYWF9NQUlMX1UwX01QVSwKKwkJLnN0YXJ0ICAgICAgICAgID0gT01BUDQ0WFhfSVJRX01BSUxfVTAsCiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9Oworc3RhdGljIGludCBvbWFwNF9tYm94X3Jlc291cmNlc19zeiA9IEFSUkFZX1NJWkUob21hcDRfbWJveF9yZXNvdXJjZXMpOworI2Vsc2UKKyNkZWZpbmUgb21hcDRfbWJveF9yZXNvdXJjZXMJCU5VTEwKKyNkZWZpbmUgb21hcDRfbWJveF9yZXNvdXJjZXNfc3oJCTAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYm94X2RldmljZSA9IHsKQEAgLTE5Niw5ICsyMDgsMTUgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tYm94KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMCgpIHx8IGNwdV9pc19vbWFwMzQzMCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCW1ib3hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG9tYXBfbWJveF9yZXNvdXJjZXMpOwotCQltYm94X2RldmljZS5yZXNvdXJjZSA9IG9tYXBfbWJveF9yZXNvdXJjZXM7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDJfbWJveF9yZXNvdXJjZXM7CisJCW1ib3hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSBvbWFwMl9tYm94X3Jlc291cmNlc19zejsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDNfbWJveF9yZXNvdXJjZXM7CisJCW1ib3hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSBvbWFwM19tYm94X3Jlc291cmNlc19zejsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDRfbWJveF9yZXNvdXJjZXM7CisJCW1ib3hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSBvbWFwNF9tYm94X3Jlc291cmNlc19zejsKIAl9IGVsc2UgewogCQlwcl9lcnIoIiVzOiBwbGF0Zm9ybSBub3Qgc3VwcG9ydGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKQEAgLTQ5Miw3ICs1MTAsMTIgQEAKICAqKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2hzbW1jX3Jlc2V0KHZvaWQpCiB7Ci0JdTMyIGksIG5yX2NvbnRyb2xsZXJzID0gY3B1X2lzX29tYXA0NHh4KCkgPyBPTUFQNDRYWF9OUl9NTUMgOgorCXUzMiBpLCBucl9jb250cm9sbGVyczsKKworCWlmIChjcHVfaXNfb21hcDI0MngoKSkKKwkJcmV0dXJuOworCisJbnJfY29udHJvbGxlcnMgPSBjcHVfaXNfb21hcDQ0eHgoKSA/IE9NQVA0NFhYX05SX01NQyA6CiAJCShjcHVfaXNfb21hcDM0eHgoKSA/IE9NQVAzNFhYX05SX01NQyA6IE9NQVAyNFhYX05SX01NQyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfY29udHJvbGxlcnM7IGkrKykgewpAQCAtNjk3LDEzICs3MjAsMTMgQEAKIAkJCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCiAJCQkJcmV0dXJuOwogCQkJYmFzZSA9IE9NQVA0X01NQzRfQkFTRSArIE9NQVA0X01NQ19SRUdfT0ZGU0VUOwotCQkJaXJxID0gSU5UXzQ0WFhfTU1DNF9JUlE7CisJCQlpcnEgPSBPTUFQNDRYWF9JUlFfTU1DNDsKIAkJCWJyZWFrOwogCQljYXNlIDQ6CiAJCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQogCQkJCXJldHVybjsKIAkJCWJhc2UgPSBPTUFQNF9NTUM1X0JBU0UgKyBPTUFQNF9NTUNfUkVHX09GRlNFVDsKLQkJCWlycSA9IElOVF80NFhYX01NQzVfSVJROworCQkJaXJxID0gT01BUDQ0WFhfSVJRX01NQzQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWNvbnRpbnVlOwpAQCAtNzE1LDcgKzczOCw3IEBACiAJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJCWlmIChpIDwgMykgewogCQkJCWJhc2UgKz0gT01BUDRfTU1DX1JFR19PRkZTRVQ7Ci0JCQkJaXJxICs9IElSUV9HSUNfU1RBUlQ7CisJCQkJaXJxICs9IE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQ7CiAJCQl9CiAJCQlzaXplID0gT01BUDRfSFNNTUNfU0laRTsKIAkJCW5hbWUgPSAibW1jaS1vbWFwLWhzIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDU1YjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBAQAotLyoKLSAqIE9NQVAzLzQgLSBzcGVjaWZpYyBEUExMIGNvbnRyb2wgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKLSAqIFRlc3RpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDg8K2Z2FuZGVyCi0gKgotICogUGFydHMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKLSAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9zcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKLQotLyogQ01fQVVUT0lETEVfUExMKi5BVVRPXyogYml0IHZhbHVlcyAqLwotI2RlZmluZSBEUExMX0FVVE9JRExFX0RJU0FCTEUJCQkweDAKLSNkZWZpbmUgRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUAkJMHgxCi0KLSNkZWZpbmUgTUFYX0RQTExfV0FJVF9UUklFUwkJMTAwMDAwMAotCi0KLS8qKgotICogb21hcDNfZHBsbF9yZWNhbGMgLSByZWNhbGN1bGF0ZSBEUExMIHJhdGUKLSAqIEBjbGs6IERQTEwgc3RydWN0IGNsawotICoKLSAqIFJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgdGhlIERQTEwgcmF0ZS4KLSAqLwotdW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKLX0KLQotLyogX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4gLSB3cml0ZSBjbGtlbl9iaXRzIGFyZyB0byBhIERQTEwncyBlbmFibGUgYml0cyAqLwotc3RhdGljIHZvaWQgX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oc3RydWN0IGNsayAqY2xrLCB1OCBjbGtlbl9iaXRzKQotewotCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXUzMiB2OwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOwotCXYgJj0gfmRkLT5lbmFibGVfbWFzazsKLQl2IHw9IGNsa2VuX2JpdHMgPDwgX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKLQlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKLX0KLQotLyogX29tYXAzX3dhaXRfZHBsbF9zdGF0dXM6IHdhaXQgZm9yIGEgRFBMTCB0byBlbnRlciBhIHNwZWNpZmljIHN0YXRlICovCi1zdGF0aWMgaW50IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKHN0cnVjdCBjbGsgKmNsaywgdTggc3RhdGUpCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JaW50IGkgPSAwOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCXN0YXRlIDw8PSBfX2ZmcyhkZC0+aWRsZXN0X21hc2spOwotCi0Jd2hpbGUgKCgoX19yYXdfcmVhZGwoZGQtPmlkbGVzdF9yZWcpICYgZGQtPmlkbGVzdF9tYXNrKSAhPSBzdGF0ZSkgJiYKLQkgICAgICAgaSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpIHsKLQkJaSsrOwotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiAlcyBmYWlsZWQgdHJhbnNpdGlvbiB0byAnJXMnXG4iLAotCQkgICAgICAgY2xrLT5uYW1lLCAoc3RhdGUpID8gImxvY2tlZCIgOiAiYnlwYXNzZWQiKTsKLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygiY2xvY2s6ICVzIHRyYW5zaXRpb24gdG8gJyVzJyBpbiAlZCBsb29wc1xuIiwKLQkJCSBjbGstPm5hbWUsIChzdGF0ZSkgPyAibG9ja2VkIiA6ICJieXBhc3NlZCIsIGkpOwotCi0JCXJldCA9IDA7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogRnJvbSAzNDMwIFRSTSBFUzIgNC43LjYuMiAqLwotc3RhdGljIHUxNiBfb21hcDNfZHBsbF9jb21wdXRlX2ZyZXFzZWwoc3RydWN0IGNsayAqY2xrLCB1OCBuKQotewotCXVuc2lnbmVkIGxvbmcgZmludDsKLQl1MTYgZiA9IDA7Ci0KLQlmaW50ID0gY2xrLT5kcGxsX2RhdGEtPmNsa19yZWYtPnJhdGUgLyBuOwotCi0JcHJfZGVidWcoImNsb2NrOiBmaW50IGlzICVsdVxuIiwgZmludCk7Ci0KLQlpZiAoZmludCA+PSA3NTAwMDAgJiYgZmludCA8PSAxMDAwMDAwKQotCQlmID0gMHgzOwotCWVsc2UgaWYgKGZpbnQgPiAxMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMCkKLQkJZiA9IDB4NDsKLQllbHNlIGlmIChmaW50ID4gMTI1MDAwMCAmJiBmaW50IDw9IDE1MDAwMDApCi0JCWYgPSAweDU7Ci0JZWxzZSBpZiAoZmludCA+IDE1MDAwMDAgJiYgZmludCA8PSAxNzUwMDAwKQotCQlmID0gMHg2OwotCWVsc2UgaWYgKGZpbnQgPiAxNzUwMDAwICYmIGZpbnQgPD0gMjEwMDAwMCkKLQkJZiA9IDB4NzsKLQllbHNlIGlmIChmaW50ID4gNzUwMDAwMCAmJiBmaW50IDw9IDEwMDAwMDAwKQotCQlmID0gMHhCOwotCWVsc2UgaWYgKGZpbnQgPiAxMDAwMDAwMCAmJiBmaW50IDw9IDEyNTAwMDAwKQotCQlmID0gMHhDOwotCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwMCAmJiBmaW50IDw9IDE1MDAwMDAwKQotCQlmID0gMHhEOwotCWVsc2UgaWYgKGZpbnQgPiAxNTAwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDAwKQotCQlmID0gMHhFOwotCWVsc2UgaWYgKGZpbnQgPiAxNzUwMDAwMCAmJiBmaW50IDw9IDIxMDAwMDAwKQotCQlmID0gMHhGOwotCWVsc2UKLQkJcHJfZGVidWcoImNsb2NrOiB1bmtub3duIGZyZXFzZWwgc2V0dGluZyBmb3IgJWRcbiIsIG4pOwotCi0JcmV0dXJuIGY7Ci19Ci0KLS8qIE5vbi1DT1JFIERQTEwgKGUuZy4sIERQTExzIHRoYXQgZG8gbm90IGNvbnRyb2wgU0RSQykgY2xvY2sgZnVuY3Rpb25zICovCi0KLS8qCi0gKiBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2sgLSBpbnN0cnVjdCBhIERQTEwgdG8gbG9jayBhbmQgd2FpdCBmb3IgcmVhZGluZXNzCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBsb2NrLiAgV2FpdHMgZm9yIHRoZSBEUExMIHRvIHJlcG9ydAotICogcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcuICBXaWxsIHNhdmUgYW5kIHJlc3RvcmUgdGhlIERQTEwncwotICogYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBlbmFibGUsIHBlciB0aGUgQ0RQIGNvZGUuICBJZiB0aGUgRFBMTAotICogbG9ja2VkIHN1Y2Nlc3NmdWxseSwgcmV0dXJuIDA7IGlmIHRoZSBEUExMIGRpZCBub3QgbG9jayBpbiB0aGUgdGltZQotICogYWxsb3R0ZWQsIG9yIERQTEwzIHdhcyBwYXNzZWQgaW4sIHJldHVybiAtRUlOVkFMLgotICovCi1zdGF0aWMgaW50IF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTggYWk7Ci0JaW50IHI7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGxvY2tpbmcgRFBMTCAlc1xuIiwgY2xrLT5uYW1lKTsKLQotCWFpID0gb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKGNsayk7Ci0KLQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOwotCi0JX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPQ0tFRCk7Ci0KLQlyID0gX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoY2xrLCAxKTsKLQotCWlmIChhaSkKLQkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotLyoKLSAqIF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGJ5cGFzcyBhbmQgd2FpdCBmb3IgcmVhZGluZXNzCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgYnlwYXNzIG1vZGUuICBJbgotICogYnlwYXNzIG1vZGUsIHRoZSBEUExMJ3MgcmF0ZSBpcyBzZXQgZXF1YWwgdG8gaXRzIHBhcmVudCBjbG9jaydzCi0gKiByYXRlLiAgV2FpdHMgZm9yIHRoZSBEUExMIHRvIHJlcG9ydCByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZy4KLSAqIFdpbGwgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgRFBMTCdzIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgZW5hYmxlLAotICogcGVyIHRoZSBDRFAgY29kZS4gIElmIHRoZSBEUExMIGVudGVyZWQgYnlwYXNzIG1vZGUgc3VjY2Vzc2Z1bGx5LAotICogcmV0dXJuIDA7IGlmIHRoZSBEUExMIGRpZCBub3QgZW50ZXIgYnlwYXNzIGluIHRoZSB0aW1lIGFsbG90dGVkLCBvcgotICogRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3Qgc3VwcG9ydCBsb3ctcG93ZXIgYnlwYXNzLAotICogcmV0dXJuIC1FSU5WQUwuCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3Moc3RydWN0IGNsayAqY2xrKQotewotCWludCByOwotCXU4IGFpOwotCi0JaWYgKCEoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImNsb2NrOiBjb25maWd1cmluZyBEUExMICVzIGZvciBsb3ctcG93ZXIgYnlwYXNzXG4iLAotCQkgY2xrLT5uYW1lKTsKLQotCWFpID0gb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKGNsayk7Ci0KLQlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9XX1BPV0VSX0JZUEFTUyk7Ci0KLQlyID0gX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoY2xrLCAwKTsKLQotCWlmIChhaSkKLQkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0JZWxzZQotCQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOwotCi0JcmV0dXJuIHI7Ci19Ci0KLS8qCi0gKiBfb21hcDNfbm9uY29yZV9kcGxsX3N0b3AgLSBpbnN0cnVjdCBhIERQTEwgdG8gc3RvcAotICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsawotICoKLSAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIHN0b3AuIFdpbGwgc2F2ZSBhbmQKLSAqIHJlc3RvcmUgdGhlIERQTEwncyBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIHN0b3AsIHBlciB0aGUgQ0RQCi0gKiBjb2RlLiAgSWYgRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3Qgc3VwcG9ydAotICogbG93LXBvd2VyIHN0b3AsIHJldHVybiAtRUlOVkFMOyBvdGhlcndpc2UsIHJldHVybiAwLgotICovCi1zdGF0aWMgaW50IF9vbWFwM19ub25jb3JlX2RwbGxfc3RvcChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTggYWk7Ci0KLQlpZiAoIShjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImNsb2NrOiBzdG9wcGluZyBEUExMICVzXG4iLCBjbGstPm5hbWUpOwotCi0JYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKLQotCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT1dfUE9XRVJfU1RPUCk7Ci0KLQlpZiAoYWkpCi0JCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOwotCWVsc2UKLQkJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUgLSBpbnN0cnVjdCBhIERQTEwgdG8gZW50ZXIgYnlwYXNzIG9yIGxvY2sgbW9kZQotICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsawotICoKLSAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW5hYmxlLCBlLmcuLCB0byBlbnRlciBieXBhc3Mgb3IgbG9jay4KLSAqIFRoZSBjaG9pY2Ugb2YgbW9kZXMgZGVwZW5kcyBvbiB0aGUgRFBMTCdzIHByb2dyYW1tZWQgcmF0ZTogaWYgaXQgaXMKLSAqIHRoZSBzYW1lIGFzIHRoZSBEUExMJ3MgcGFyZW50IGNsb2NrLCBpdCB3aWxsIGVudGVyIGJ5cGFzczsKLSAqIG90aGVyd2lzZSwgaXQgd2lsbCBlbnRlciBsb2NrLiAgVGhpcyBjb2RlIHdpbGwgd2FpdCBmb3IgdGhlIERQTEwgdG8KLSAqIGluZGljYXRlIHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLCB1bmxlc3MgdGhlIERQTEwgdGFrZXMgdG9vIGxvbmcKLSAqIHRvIGVudGVyIHRoZSB0YXJnZXQgc3RhdGUuICBJbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBzdHJ1Y3QgY2xrJ3MKLSAqIGVuYWJsZSBmdW5jdGlvbi4gIElmIERQTEwzIHdhcyBwYXNzZWQgaW4sIG9yIHRoZSBEUExMIGRvZXMgbm90Ci0gKiBzdXBwb3J0IGxvdy1wb3dlciBzdG9wLCBvciBpZiB0aGUgRFBMTCB0b29rIHRvbyBsb25nIHRvIGVudGVyCi0gKiBieXBhc3Mgb3IgbG9jaywgcmV0dXJuIC1FSU5WQUw7IG90aGVyd2lzZSwgcmV0dXJuIDAuCi0gKi8KLWludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcjsKLQlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JaWYgKCFkZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2xrLT5yYXRlID09IGRkLT5jbGtfYnlwYXNzLT5yYXRlKSB7Ci0JCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19ieXBhc3MpOwotCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKLQl9IGVsc2UgewotCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfcmVmKTsKLQkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhjbGspOwotCX0KLQkvKgotCSAqRklYTUU6IHRoaXMgaXMgZHViaW91cyAtIGlmIGNsay0+cmF0ZSBoYXMgY2hhbmdlZCwgd2hhdCBhYm91dAotCSAqIHByb3BhZ2F0aW5nPwotCSAqLwotCWlmICghcikKLQkJY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotCi0JcmV0dXJuIHI7Ci19Ci0KLS8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUgLSBpbnN0cnVjdCBhIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIHN0b3AKLSAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBzdG9wLiAgVGhpcyBmdW5jdGlvbiBpcwotICogaW50ZW5kZWQgZm9yIHVzZSBpbiBzdHJ1Y3QgY2xrb3BzLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi12b2lkIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfb21hcDNfbm9uY29yZV9kcGxsX3N0b3AoY2xrKTsKLX0KLQotCi0vKiBOb24tQ09SRSBEUExMIHJhdGUgc2V0IGNvZGUgKi8KLQotLyoKLSAqIG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtIC0gc2V0IG5vbi1jb3JlIERQTEwgTSxOIHZhbHVlcyBkaXJlY3RseQotICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0Ci0gKiBAbTogRFBMTCBtdWx0aXBsaWVyIHRvIHNldAotICogQG46IERQTEwgZGl2aWRlciB0byBzZXQKLSAqIEBmcmVxc2VsOiBGUkVRU0VMIHZhbHVlIHRvIHNldAotICoKLSAqIFByb2dyYW0gdGhlIERQTEwgd2l0aCB0aGUgc3VwcGxpZWQgTSwgTiB2YWx1ZXMsIGFuZCB3YWl0IGZvciB0aGUgRFBMTCB0bwotICogbG9jay4uICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShzdHJ1Y3QgY2xrICpjbGssIHUxNiBtLCB1OCBuLCB1MTYgZnJlcXNlbCkKLXsKLQlzdHJ1Y3QgZHBsbF9kYXRhICpkZCA9IGNsay0+ZHBsbF9kYXRhOwotCXUzMiB2OwotCi0JLyogMzQzMCBFUzIgVFJNOiA0LjcuNi45IERQTEwgUHJvZ3JhbW1pbmcgU2VxdWVuY2UgKi8KLQlfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOwotCi0JLyogU2V0IGppdHRlciBjb3JyZWN0aW9uICovCi0JaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkgewotCQl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKLQkJdiAmPSB+ZGQtPmZyZXFzZWxfbWFzazsKLQkJdiB8PSBmcmVxc2VsIDw8IF9fZmZzKGRkLT5mcmVxc2VsX21hc2spOwotCQlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKLQl9Ci0KLQkvKiBTZXQgRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyICovCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKLQl2ICY9IH4oZGQtPm11bHRfbWFzayB8IGRkLT5kaXYxX21hc2spOwotCXYgfD0gbSA8PCBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKLQl2IHw9IChuIC0gMSkgPDwgX19mZnMoZGQtPmRpdjFfbWFzayk7Ci0JX19yYXdfd3JpdGVsKHYsIGRkLT5tdWx0X2RpdjFfcmVnKTsKLQotCS8qIFdlIGxldCB0aGUgY2xvY2sgZnJhbWV3b3JrIHNldCB0aGUgb3RoZXIgb3V0cHV0IGRpdmlkZXJzIGxhdGVyICovCi0KLQkvKiBSRVZJU0lUOiBTZXQgcmFtcC11cCBkZWxheT8gKi8KLQotCV9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhjbGspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IG5vbi1jb3JlIERQTEwgcmF0ZQotICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0Ci0gKiBAcmF0ZTogcm91bmRlZCB0YXJnZXQgcmF0ZQotICoKLSAqIFNldCB0aGUgRFBMTCBDTEtPVVQgdG8gdGhlIHRhcmdldCByYXRlLiAgSWYgdGhlIERQTEwgY2FuIGVudGVyCi0gKiBsb3ctcG93ZXIgYnlwYXNzLCBhbmQgdGhlIHRhcmdldCByYXRlIGlzIHRoZSBieXBhc3Mgc291cmNlIGNsb2NrCi0gKiByYXRlLCB0aGVuIGNvbmZpZ3VyZSB0aGUgRFBMTCBmb3IgYnlwYXNzLiAgT3RoZXJ3aXNlLCByb3VuZCB0aGUKLSAqIHRhcmdldCByYXRlIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgdGhlbiBwcm9ncmFtIGFuZCBsb2NrCi0gKiB0aGUgRFBMTC4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKLQl1MTYgZnJlcXNlbCA9IDA7Ci0Jc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JaW50IHJldDsKLQotCWlmICghY2xrIHx8ICFyYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JaWYgKCFkZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmF0ZSA9PSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsaykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBFbnN1cmUgYm90aCB0aGUgYnlwYXNzIGFuZCByZWYgY2xvY2tzIGFyZSBlbmFibGVkIHByaW9yIHRvCi0JICogZG9pbmcgYW55dGhpbmc7IHdlIG5lZWQgdGhlIGJ5cGFzcyBjbG9jayBydW5uaW5nIHRvIHJlcHJvZ3JhbQotCSAqIHRoZSBEUExMLgotCSAqLwotCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19ieXBhc3MpOwotCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19yZWYpOwotCi0JaWYgKGRkLT5jbGtfYnlwYXNzLT5yYXRlID09IHJhdGUgJiYKLQkgICAgKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKSB7Ci0JCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBlbnRlcmluZyBieXBhc3MuXG4iLCBjbGstPm5hbWUpOwotCi0JCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfYnlwYXNzOwotCX0gZWxzZSB7Ci0JCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgIT0gcmF0ZSkKLQkJCW9tYXAyX2RwbGxfcm91bmRfcmF0ZShjbGssIHJhdGUpOwotCi0JCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIE5vIGZyZXFzZWwgb24gT01BUDQgKi8KLQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkgewotCQkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssCi0JCQkJCQlkZC0+bGFzdF9yb3VuZGVkX24pOwotCQkJaWYgKCFmcmVxc2VsKQotCQkJCVdBUk5fT04oMSk7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogbG9ja2luZyByYXRlIHRvICVsdS5cbiIsCi0JCQkgY2xrLT5uYW1lLCByYXRlKTsKLQotCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShjbGssIGRkLT5sYXN0X3JvdW5kZWRfbSwKLQkJCQkJCSBkZC0+bGFzdF9yb3VuZGVkX24sIGZyZXFzZWwpOwotCQlpZiAoIXJldCkKLQkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX3JlZjsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJLyoKLQkJICogU3dpdGNoIHRoZSBwYXJlbnQgY2xvY2sgaW4gdGhlIGhlaXJhcmNoeSwgYW5kIG1ha2Ugc3VyZQotCQkgKiB0aGF0IHRoZSBuZXcgcGFyZW50J3MgdXNlY291bnQgaXMgY29ycmVjdC4gIE5vdGU6IHdlCi0JCSAqIGVuYWJsZSB0aGUgbmV3IHBhcmVudCBiZWZvcmUgZGlzYWJsaW5nIHRoZSBvbGQgdG8gYXZvaWQKLQkJICogYW55IHVubmVjZXNzYXJ5IGhhcmR3YXJlIGRpc2FibGUtPmVuYWJsZSB0cmFuc2l0aW9ucy4KLQkJICovCi0JCWlmIChjbGstPnVzZWNvdW50KSB7Ci0JCQlvbWFwMl9jbGtfZW5hYmxlKG5ld19wYXJlbnQpOwotCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotCQl9Ci0JCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOwotCQljbGstPnJhdGUgPSByYXRlOwotCX0KLQlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX3JlZik7Ci0Jb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19ieXBhc3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIERQTEwgYXV0b2lkbGUgcmVhZC9zZXQgY29kZSAqLwotCi0vKioKLSAqIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZCAtIHJlYWQgYSBEUExMJ3MgYXV0b2lkbGUgYml0cwotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIHJlYWQKLSAqCi0gKiBSZXR1cm4gdGhlIERQTEwncyBhdXRvaWRsZSBiaXRzLCBzaGlmdGVkIGRvd24gdG8gYml0IDAuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHBhc3NlZCBhIG51bGwgcG9pbnRlciBvciBpZiB0aGUgc3RydWN0IGNsayBkb2VzIG5vdAotICogYXBwZWFyIHRvIHJlZmVyIHRvIGEgRFBMTC4KLSAqLwotdTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JdTMyIHY7Ci0KLQlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKLQl2ICY9IGRkLT5hdXRvaWRsZV9tYXNrOwotCXYgPj49IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKLQotCXJldHVybiB2OwotfQotCi0vKioKLSAqIG9tYXAzX2RwbGxfYWxsb3dfaWRsZSAtIGVuYWJsZSBEUExMIGF1dG9pZGxlIGJpdHMKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byBvcGVyYXRlIG9uCi0gKgotICogRW5hYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIFRoaXMgYXV0b21hdGljIGlkbGUgbW9kZQotICogc3dpdGNoaW5nIHRha2VzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIERQTEwgaXMgbG9ja2VkLCBhdCBsZWFzdCBvbgotICogT01BUDM0MzAuICBUaGUgRFBMTCB3aWxsIGVudGVyIGxvdy1wb3dlciBzdG9wIHdoZW4gaXRzIGRvd25zdHJlYW0KLSAqIGNsb2NrcyBhcmUgZ2F0ZWQuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1MzIgdjsKLQotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCS8qCi0JICogUkVWSVNJVDogQ09SRSBEUExMIGNhbiBvcHRpb25hbGx5IGVudGVyIGxvdy1wb3dlciBieXBhc3MKLQkgKiBieSB3cml0aW5nIDB4NSBpbnN0ZWFkIG9mIDB4MS4gIEFkZCBzb21lIG1lY2hhbmlzbSB0bwotCSAqIG9wdGlvbmFsbHkgZW50ZXIgdGhpcyBtb2RlLgotCSAqLwotCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKLQl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKLQl2IHw9IERQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKLX0KLQotLyoqCi0gKiBvbWFwM19kcGxsX2RlbnlfaWRsZSAtIHByZXZlbnQgRFBMTCBmcm9tIGF1dG9tYXRpY2FsbHkgaWRsaW5nCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgotICoKLSAqIERpc2FibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi12b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1MzIgdjsKLQotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKLQl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKLQl2IHw9IERQTExfQVVUT0lETEVfRElTQUJMRSA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7Ci0JX19yYXdfd3JpdGVsKHYsIGRkLT5hdXRvaWRsZV9yZWcpOwotCi19Ci0KLS8qIENsb2NrIGNvbnRyb2wgZm9yIERQTEwgb3V0cHV0cyAqLwotCi0vKioKLSAqIG9tYXAzX2Nsa291dHgyX3JlY2FsYyAtIHJlY2FsY3VsYXRlIERQTEwgWDIgb3V0cHV0IHZpcnR1YWwgY2xvY2sgcmF0ZQotICogQGNsazogRFBMTCBvdXRwdXQgc3RydWN0IGNsawotICoKLSAqIFVzaW5nIHBhcmVudCBjbG9jayBEUExMIGRhdGEsIGxvb2sgdXAgRFBMTCBzdGF0ZS4gIElmIGxvY2tlZCwgc2V0IG91cgotICogcmF0ZSB0byB0aGUgZHBsbF9jbGsgKiAyOyBvdGhlcndpc2UsIGp1c3QgdXNlIGRwbGxfY2xrLgotICovCi11bnNpZ25lZCBsb25nIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCXUzMiB2OwotCXN0cnVjdCBjbGsgKnBjbGs7Ci0KLQkvKiBXYWxrIHVwIHRoZSBwYXJlbnRzIG9mIGNsaywgbG9va2luZyBmb3IgYSBEUExMICovCi0JcGNsayA9IGNsay0+cGFyZW50OwotCXdoaWxlIChwY2xrICYmICFwY2xrLT5kcGxsX2RhdGEpCi0JCXBjbGsgPSBwY2xrLT5wYXJlbnQ7Ci0KLQkvKiBjbGsgZG9lcyBub3QgaGF2ZSBhIERQTEwgYXMgYSBwYXJlbnQ/ICovCi0JV0FSTl9PTighcGNsayk7Ci0KLQlkZCA9IHBjbGstPmRwbGxfZGF0YTsKLQotCVdBUk5fT04oIWRkLT5lbmFibGVfbWFzayk7Ci0KLQl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKSAmIGRkLT5lbmFibGVfbWFzazsKLQl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCWlmICh2ICE9IE9NQVAzWFhYX0VOX0RQTExfTE9DS0VEKQotCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Ci0JZWxzZQotCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiAyOwotCXJldHVybiByYXRlOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMmNjZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCkBAIC0wLDAgKzEsNTk5IEBACisvKgorICogT01BUDMvNCAtIHNwZWNpZmljIERQTEwgY29udHJvbCBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIFRlc3RpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIDM2eHggc3VwcG9ydCBhZGRlZCBieSBWaXNod2FuYXRoIEJTLCBSaWNoYXJkIFdvb2RydWZmLCBhbmQgTmlzaGFudGgKKyAqIE1lbm9uCisgKgorICogUGFydHMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyogQ01fQVVUT0lETEVfUExMKi5BVVRPXyogYml0IHZhbHVlcyAqLworI2RlZmluZSBEUExMX0FVVE9JRExFX0RJU0FCTEUJCQkweDAKKyNkZWZpbmUgRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUAkJMHgxCisKKyNkZWZpbmUgTUFYX0RQTExfV0FJVF9UUklFUwkJMTAwMDAwMAorCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLworCisvKiBfb21hcDNfZHBsbF93cml0ZV9jbGtlbiAtIHdyaXRlIGNsa2VuX2JpdHMgYXJnIHRvIGEgRFBMTCdzIGVuYWJsZSBiaXRzICovCitzdGF0aWMgdm9pZCBfb21hcDNfZHBsbF93cml0ZV9jbGtlbihzdHJ1Y3QgY2xrICpjbGssIHU4IGNsa2VuX2JpdHMpCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSB+ZGQtPmVuYWJsZV9tYXNrOworCXYgfD0gY2xrZW5fYml0cyA8PCBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+Y29udHJvbF9yZWcpOworfQorCisvKiBfb21hcDNfd2FpdF9kcGxsX3N0YXR1czogd2FpdCBmb3IgYSBEUExMIHRvIGVudGVyIGEgc3BlY2lmaWMgc3RhdGUgKi8KK3N0YXRpYyBpbnQgX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoc3RydWN0IGNsayAqY2xrLCB1OCBzdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwlpbnQgaSA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJc3RhdGUgPDw9IF9fZmZzKGRkLT5pZGxlc3RfbWFzayk7CisKKwl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBkZC0+aWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgorCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgeworCQlpKys7CisJCXVkZWxheSgxKTsKKwl9CisKKwlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6ICVzIGZhaWxlZCB0cmFuc2l0aW9uIHRvICclcydcbiIsCisJCSAgICAgICBjbGstPm5hbWUsIChzdGF0ZSkgPyAibG9ja2VkIiA6ICJieXBhc3NlZCIpOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJjbG9jazogJXMgdHJhbnNpdGlvbiB0byAnJXMnIGluICVkIGxvb3BzXG4iLAorCQkJIGNsay0+bmFtZSwgKHN0YXRlKSA/ICJsb2NrZWQiIDogImJ5cGFzc2VkIiwgaSk7CisKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBGcm9tIDM0MzAgVFJNIEVTMiA0LjcuNi4yICovCitzdGF0aWMgdTE2IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCit7CisJdW5zaWduZWQgbG9uZyBmaW50OworCXUxNiBmID0gMDsKKworCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIG47CisKKwlwcl9kZWJ1ZygiY2xvY2s6IGZpbnQgaXMgJWx1XG4iLCBmaW50KTsKKworCWlmIChmaW50ID49IDc1MDAwMCAmJiBmaW50IDw9IDEwMDAwMDApCisJCWYgPSAweDM7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwKQorCQlmID0gMHg0OworCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwICYmIGZpbnQgPD0gMTUwMDAwMCkKKwkJZiA9IDB4NTsKKwllbHNlIGlmIChmaW50ID4gMTUwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDApCisJCWYgPSAweDY7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAgJiYgZmludCA8PSAyMTAwMDAwKQorCQlmID0gMHg3OworCWVsc2UgaWYgKGZpbnQgPiA3NTAwMDAwICYmIGZpbnQgPD0gMTAwMDAwMDApCisJCWYgPSAweEI7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMDApCisJCWYgPSAweEM7CisJZWxzZSBpZiAoZmludCA+IDEyNTAwMDAwICYmIGZpbnQgPD0gMTUwMDAwMDApCisJCWYgPSAweEQ7CisJZWxzZSBpZiAoZmludCA+IDE1MDAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMDApCisJCWYgPSAweEU7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAwICYmIGZpbnQgPD0gMjEwMDAwMDApCisJCWYgPSAweEY7CisJZWxzZQorCQlwcl9kZWJ1ZygiY2xvY2s6IHVua25vd24gZnJlcXNlbCBzZXR0aW5nIGZvciAlZFxuIiwgbik7CisKKwlyZXR1cm4gZjsKK30KKworLyoKKyAqIF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayAtIGluc3RydWN0IGEgRFBMTCB0byBsb2NrIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGxvY2suICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0CisgKiByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZy4gIFdpbGwgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgRFBMTCdzCisgKiBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIGVuYWJsZSwgcGVyIHRoZSBDRFAgY29kZS4gIElmIHRoZSBEUExMCisgKiBsb2NrZWQgc3VjY2Vzc2Z1bGx5LCByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBsb2NrIGluIHRoZSB0aW1lCisgKiBhbGxvdHRlZCwgb3IgRFBMTDMgd2FzIHBhc3NlZCBpbiwgcmV0dXJuIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1OCBhaTsKKwlpbnQgcjsKKworCXByX2RlYnVnKCJjbG9jazogbG9ja2luZyBEUExMICVzXG4iLCBjbGstPm5hbWUpOworCisJYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKKworCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7CisKKwlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9DS0VEKTsKKworCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDEpOworCisJaWYgKGFpKQorCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKKworCXJldHVybiByOworfQorCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBieXBhc3MgbW9kZS4gIEluCisgKiBieXBhc3MgbW9kZSwgdGhlIERQTEwncyByYXRlIGlzIHNldCBlcXVhbCB0byBpdHMgcGFyZW50IGNsb2NrJ3MKKyAqIHJhdGUuICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0IHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLgorICogV2lsbCBzYXZlIGFuZCByZXN0b3JlIHRoZSBEUExMJ3MgYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBlbmFibGUsCisgKiBwZXIgdGhlIENEUCBjb2RlLiAgSWYgdGhlIERQTEwgZW50ZXJlZCBieXBhc3MgbW9kZSBzdWNjZXNzZnVsbHksCisgKiByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBlbnRlciBieXBhc3MgaW4gdGhlIHRpbWUgYWxsb3R0ZWQsIG9yCisgKiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0IGxvdy1wb3dlciBieXBhc3MsCisgKiByZXR1cm4gLUVJTlZBTC4KKyAqLworc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHI7CisJdTggYWk7CisKKwlpZiAoIShjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IGNvbmZpZ3VyaW5nIERQTEwgJXMgZm9yIGxvdy1wb3dlciBieXBhc3NcbiIsCisJCSBjbGstPm5hbWUpOworCisJYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKKworCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT1dfUE9XRVJfQllQQVNTKTsKKworCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDApOworCisJaWYgKGFpKQorCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKKwllbHNlCisJCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7CisKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIF9vbWFwM19ub25jb3JlX2RwbGxfc3RvcCAtIGluc3RydWN0IGEgRFBMTCB0byBzdG9wCisgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCisgKgorICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcC4gV2lsbCBzYXZlIGFuZAorICogcmVzdG9yZSB0aGUgRFBMTCdzIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgc3RvcCwgcGVyIHRoZSBDRFAKKyAqIGNvZGUuICBJZiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0CisgKiBsb3ctcG93ZXIgc3RvcCwgcmV0dXJuIC1FSU5WQUw7IG90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1OCBhaTsKKworCWlmICghKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IHN0b3BwaW5nIERQTEwgJXNcbiIsIGNsay0+bmFtZSk7CisKKwlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOworCisJX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPV19QT1dFUl9TVE9QKTsKKworCWlmIChhaSkKKwkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7CisJZWxzZQorCQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbG9va3VwX2Rjb19zZGRpdiAtICBTZXQgai10eXBlIERQTEw0IGNvbXBlbnNhdGlvbiB2YXJpYWJsZXMKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqIEBkY286IGRpZ2l0YWwgY29udHJvbCBvc2NpbGxhdG9yIHNlbGVjdG9yCisgKiBAc2RfZGl2OiB0YXJnZXQgc2lnbWEtZGVsdGEgZGl2aWRlcgorICogQG06IERQTEwgbXVsdGlwbGllciB0byBzZXQKKyAqIEBuOiBEUExMIGRpdmlkZXIgdG8gc2V0CisgKgorICogU2VlIDM2eHggVFJNIHNlY3Rpb24gMy41LjMuMy4zLjIgIlR5cGUgQiBEUExMIChMb3ctSml0dGVyKSIKKyAqCisgKiBYWFggVGhpcyBjb2RlIGlzIG5vdCBuZWVkZWQgZm9yIDM0MzAvQU0zNXh4OyBjYW4gaXQgYmUgb3B0aW1pemVkCisgKiBvdXQgaW4gbm9uLW11bHRpLU9NQVAgYnVpbGRzIGZvciB0aG9zZSBjaGlwcz8KKyAqLworc3RhdGljIHZvaWQgbG9va3VwX2Rjb19zZGRpdihzdHJ1Y3QgY2xrICpjbGssIHU4ICpkY28sIHU4ICpzZF9kaXYsIHUxNiBtLAorCQkJICAgICB1OCBuKQoreworCXVuc2lnbmVkIGxvbmcgZmludCwgY2xraW5wLCBzZDsgLyogd2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLworCWludCBtb2QxLCBtb2QyOworCisJY2xraW5wID0gY2xrLT5wYXJlbnQtPnJhdGU7CisJZmludCA9IChjbGtpbnAgLyBuKSAqIG07CisKKwlpZiAoZmludCA8IDEwMDAwMDAwMDApCisJCSpkY28gPSAyOworCWVsc2UKKwkJKmRjbyA9IDQ7CisJLyoKKwkgKiB0YXJnZXQgc2lnbWEtZGVsdGEgdG8gbmVhciAyNTBNSHoKKwkgKiBzZCA9IGNlaWxbKG0vKG4rMSkpICogKGNsa2lucF9NSHogLyAyNTApXQorCSAqLworCWNsa2lucCAvPSAxMDAwMDA7IC8qIHNoaWZ0IGZyb20gTUh6IHRvIDEwKkh6IGZvciAzOC40IGFuZCAxOS4yICovCisJbW9kMSA9IChjbGtpbnAgKiBtKSAlICgyNTAgKiBuKTsKKwlzZCA9IChjbGtpbnAgKiBtKSAvICgyNTAgKiBuKTsKKwltb2QyID0gc2QgJSAxMDsKKwlzZCAvPSAxMDsKKworCWlmIChtb2QxIHx8IG1vZDIpCisJCXNkKys7CisJKnNkX2RpdiA9IHNkOworfQorCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtIC0gc2V0IG5vbi1jb3JlIERQTEwgTSxOIHZhbHVlcyBkaXJlY3RseQorICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0CisgKiBAbTogRFBMTCBtdWx0aXBsaWVyIHRvIHNldAorICogQG46IERQTEwgZGl2aWRlciB0byBzZXQKKyAqIEBmcmVxc2VsOiBGUkVRU0VMIHZhbHVlIHRvIHNldAorICoKKyAqIFByb2dyYW0gdGhlIERQTEwgd2l0aCB0aGUgc3VwcGxpZWQgTSwgTiB2YWx1ZXMsIGFuZCB3YWl0IGZvciB0aGUgRFBMTCB0bworICogbG9jay4uICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oc3RydWN0IGNsayAqY2xrLCB1MTYgbSwgdTggbiwgdTE2IGZyZXFzZWwpCit7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQgPSBjbGstPmRwbGxfZGF0YTsKKwl1MzIgdjsKKworCS8qIDM0MzAgRVMyIFRSTTogNC43LjYuOSBEUExMIFByb2dyYW1taW5nIFNlcXVlbmNlICovCisJX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKKworCS8qCisJICogU2V0IGppdHRlciBjb3JyZWN0aW9uLiBObyBqaXR0ZXIgY29ycmVjdGlvbiBmb3IgT01BUDQgYW5kIDM2MzAKKwkgKiBzaW5jZSBmcmVxc2VsIGZpZWxkIGlzIG5vIGxvbmdlciBwcmVzZW50CisJICovCisJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSAmJiAhY3B1X2lzX29tYXAzNjMwKCkpIHsKKwkJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJCXYgJj0gfmRkLT5mcmVxc2VsX21hc2s7CisJCXYgfD0gZnJlcXNlbCA8PCBfX2ZmcyhkZC0+ZnJlcXNlbF9tYXNrKTsKKwkJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7CisJfQorCisJLyogU2V0IERQTEwgbXVsdGlwbGllciwgZGl2aWRlciAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CisJdiAmPSB+KGRkLT5tdWx0X21hc2sgfCBkZC0+ZGl2MV9tYXNrKTsKKwl2IHw9IG0gPDwgX19mZnMoZGQtPm11bHRfbWFzayk7CisJdiB8PSAobiAtIDEpIDw8IF9fZmZzKGRkLT5kaXYxX21hc2spOworCisJLyoKKwkgKiBYWFggVGhpcyBjb2RlIGlzIG5vdCBuZWVkZWQgZm9yIDM0MzAvQU0zNVhYOyBjYW4gaXQgYmUgb3B0aW1pemVkCisJICogb3V0IGluIG5vbi1tdWx0aS1PTUFQIGJ1aWxkcyBmb3IgdGhvc2UgY2hpcHM/CisJICovCisJaWYgKChkZC0+ZmxhZ3MgJiBEUExMX0pfVFlQRSkgJiYgIShkZC0+ZmxhZ3MgJiBEUExMX05PX0RDT19TRUwpKSB7CisJCXU4IGRjbywgc2RfZGl2OworCQlsb29rdXBfZGNvX3NkZGl2KGNsaywgJmRjbywgJnNkX2RpdiwgbSwgbik7CisJCS8qIFhYWCBUaGlzIHByb2JhYmx5IHdpbGwgbmVlZCByZXZpc2lvbiBmb3IgT01BUDQgKi8KKwkJdiAmPSB+KE9NQVAzNjMwX1BFUklQSF9EUExMX0RDT19TRUxfTUFTSworCQkJfCBPTUFQMzYzMF9QRVJJUEhfRFBMTF9TRF9ESVZfTUFTSyk7CisJCXYgfD0gZGNvIDw8IF9fZmZzKE9NQVAzNjMwX1BFUklQSF9EUExMX0RDT19TRUxfTUFTSyk7CisJCXYgfD0gc2RfZGl2IDw8IF9fZmZzKE9NQVAzNjMwX1BFUklQSF9EUExMX1NEX0RJVl9NQVNLKTsKKwl9CisKKwlfX3Jhd193cml0ZWwodiwgZGQtPm11bHRfZGl2MV9yZWcpOworCisJLyogV2UgbGV0IHRoZSBjbG9jayBmcmFtZXdvcmsgc2V0IHRoZSBvdGhlciBvdXRwdXQgZGl2aWRlcnMgbGF0ZXIgKi8KKworCS8qIFJFVklTSVQ6IFNldCByYW1wLXVwIGRlbGF5PyAqLworCisJX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIG9tYXAzX2RwbGxfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCByYXRlCisgKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBSZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIHRoZSBEUExMIHJhdGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Cit9CisKKy8qIE5vbi1DT1JFIERQTEwgKGUuZy4sIERQTExzIHRoYXQgZG8gbm90IGNvbnRyb2wgU0RSQykgY2xvY2sgZnVuY3Rpb25zICovCisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBieXBhc3Mgb3IgbG9jayBtb2RlCisgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCisgKgorICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbmFibGUsIGUuZy4sIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrLgorICogVGhlIGNob2ljZSBvZiBtb2RlcyBkZXBlbmRzIG9uIHRoZSBEUExMJ3MgcHJvZ3JhbW1lZCByYXRlOiBpZiBpdCBpcworICogdGhlIHNhbWUgYXMgdGhlIERQTEwncyBwYXJlbnQgY2xvY2ssIGl0IHdpbGwgZW50ZXIgYnlwYXNzOworICogb3RoZXJ3aXNlLCBpdCB3aWxsIGVudGVyIGxvY2suICBUaGlzIGNvZGUgd2lsbCB3YWl0IGZvciB0aGUgRFBMTCB0bworICogaW5kaWNhdGUgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcsIHVubGVzcyB0aGUgRFBMTCB0YWtlcyB0b28gbG9uZworICogdG8gZW50ZXIgdGhlIHRhcmdldCBzdGF0ZS4gIEludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIHN0cnVjdCBjbGsncworICogZW5hYmxlIGZ1bmN0aW9uLiAgSWYgRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3QKKyAqIHN1cHBvcnQgbG93LXBvd2VyIHN0b3AsIG9yIGlmIHRoZSBEUExMIHRvb2sgdG9vIGxvbmcgdG8gZW50ZXIKKyAqIGJ5cGFzcyBvciBsb2NrLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqLworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGstPnJhdGUgPT0gZGQtPmNsa19ieXBhc3MtPnJhdGUpIHsKKwkJV0FSTl9PTihjbGstPnBhcmVudCAhPSBkZC0+Y2xrX2J5cGFzcyk7CisJCXIgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCX0gZWxzZSB7CisJCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19yZWYpOworCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisJfQorCS8qCisJICpGSVhNRTogdGhpcyBpcyBkdWJpb3VzIC0gaWYgY2xrLT5yYXRlIGhhcyBjaGFuZ2VkLCB3aGF0IGFib3V0CisJICogcHJvcGFnYXRpbmc/CisJICovCisJaWYgKCFyKQorCQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcAorICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICoKKyAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIHN0b3AuICBUaGlzIGZ1bmN0aW9uIGlzCisgKiBpbnRlbmRlZCBmb3IgdXNlIGluIHN0cnVjdCBjbGtvcHMuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9vbWFwM19ub25jb3JlX2RwbGxfc3RvcChjbGspOworfQorCisKKy8qIE5vbi1DT1JFIERQTEwgcmF0ZSBzZXQgY29kZSAqLworCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSAtIHNldCBub24tY29yZSBEUExMIHJhdGUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQHJhdGU6IHJvdW5kZWQgdGFyZ2V0IHJhdGUKKyAqCisgKiBTZXQgdGhlIERQTEwgQ0xLT1VUIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIElmIHRoZSBEUExMIGNhbiBlbnRlcgorICogbG93LXBvd2VyIGJ5cGFzcywgYW5kIHRoZSB0YXJnZXQgcmF0ZSBpcyB0aGUgYnlwYXNzIHNvdXJjZSBjbG9jaworICogcmF0ZSwgdGhlbiBjb25maWd1cmUgdGhlIERQTEwgZm9yIGJ5cGFzcy4gIE90aGVyd2lzZSwgcm91bmQgdGhlCisgKiB0YXJnZXQgcmF0ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIHRoZW4gcHJvZ3JhbSBhbmQgbG9jaworICogdGhlIERQTEwuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsayAqbmV3X3BhcmVudCA9IE5VTEw7CisJdTE2IGZyZXFzZWwgPSAwOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCWludCByZXQ7CisKKwlpZiAoIWNsayB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJhdGUgPT0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRW5zdXJlIGJvdGggdGhlIGJ5cGFzcyBhbmQgcmVmIGNsb2NrcyBhcmUgZW5hYmxlZCBwcmlvciB0bworCSAqIGRvaW5nIGFueXRoaW5nOyB3ZSBuZWVkIHRoZSBieXBhc3MgY2xvY2sgcnVubmluZyB0byByZXByb2dyYW0KKwkgKiB0aGUgRFBMTC4KKwkgKi8KKwlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfYnlwYXNzKTsKKwlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfcmVmKTsKKworCWlmIChkZC0+Y2xrX2J5cGFzcy0+cmF0ZSA9PSByYXRlICYmCisJICAgIChjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkgeworCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogZW50ZXJpbmcgYnlwYXNzLlxuIiwgY2xrLT5uYW1lKTsKKworCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCQlpZiAoIXJldCkKKwkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX2J5cGFzczsKKwl9IGVsc2UgeworCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlICE9IHJhdGUpCisJCQlvbWFwMl9kcGxsX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKworCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBObyBmcmVxc2VsIG9uIE9NQVA0IGFuZCBPTUFQMzYzMCAqLworCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFjcHVfaXNfb21hcDM2MzAoKSkgeworCQkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssCisJCQkJCQlkZC0+bGFzdF9yb3VuZGVkX24pOworCQkJaWYgKCFmcmVxc2VsKQorCQkJCVdBUk5fT04oMSk7CisJCX0KKworCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogbG9ja2luZyByYXRlIHRvICVsdS5cbiIsCisJCQkgY2xrLT5uYW1lLCByYXRlKTsKKworCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShjbGssIGRkLT5sYXN0X3JvdW5kZWRfbSwKKwkJCQkJCSBkZC0+bGFzdF9yb3VuZGVkX24sIGZyZXFzZWwpOworCQlpZiAoIXJldCkKKwkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX3JlZjsKKwl9CisJaWYgKCFyZXQpIHsKKwkJLyoKKwkJICogU3dpdGNoIHRoZSBwYXJlbnQgY2xvY2sgaW4gdGhlIGhlaXJhcmNoeSwgYW5kIG1ha2Ugc3VyZQorCQkgKiB0aGF0IHRoZSBuZXcgcGFyZW50J3MgdXNlY291bnQgaXMgY29ycmVjdC4gIE5vdGU6IHdlCisJCSAqIGVuYWJsZSB0aGUgbmV3IHBhcmVudCBiZWZvcmUgZGlzYWJsaW5nIHRoZSBvbGQgdG8gYXZvaWQKKwkJICogYW55IHVubmVjZXNzYXJ5IGhhcmR3YXJlIGRpc2FibGUtPmVuYWJsZSB0cmFuc2l0aW9ucy4KKwkJICovCisJCWlmIChjbGstPnVzZWNvdW50KSB7CisJCQlvbWFwMl9jbGtfZW5hYmxlKG5ld19wYXJlbnQpOworCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCQl9CisJCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOworCQljbGstPnJhdGUgPSByYXRlOworCX0KKwlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX3JlZik7CisJb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19ieXBhc3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERQTEwgYXV0b2lkbGUgcmVhZC9zZXQgY29kZSAqLworCisvKioKKyAqIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZCAtIHJlYWQgYSBEUExMJ3MgYXV0b2lkbGUgYml0cworICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIHJlYWQKKyAqCisgKiBSZXR1cm4gdGhlIERQTEwncyBhdXRvaWRsZSBiaXRzLCBzaGlmdGVkIGRvd24gdG8gYml0IDAuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHBhc3NlZCBhIG51bGwgcG9pbnRlciBvciBpZiB0aGUgc3RydWN0IGNsayBkb2VzIG5vdAorICogYXBwZWFyIHRvIHJlZmVyIHRvIGEgRFBMTC4KKyAqLwordTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xrICpjbGspCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CisKKwlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ICY9IGRkLT5hdXRvaWRsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKKworCXJldHVybiB2OworfQorCisvKioKKyAqIG9tYXAzX2RwbGxfYWxsb3dfaWRsZSAtIGVuYWJsZSBEUExMIGF1dG9pZGxlIGJpdHMKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byBvcGVyYXRlIG9uCisgKgorICogRW5hYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIFRoaXMgYXV0b21hdGljIGlkbGUgbW9kZQorICogc3dpdGNoaW5nIHRha2VzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIERQTEwgaXMgbG9ja2VkLCBhdCBsZWFzdCBvbgorICogT01BUDM0MzAuICBUaGUgRFBMTCB3aWxsIGVudGVyIGxvdy1wb3dlciBzdG9wIHdoZW4gaXRzIGRvd25zdHJlYW0KKyAqIGNsb2NrcyBhcmUgZ2F0ZWQuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKKworCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKKwkJcmV0dXJuOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKworCS8qCisJICogUkVWSVNJVDogQ09SRSBEUExMIGNhbiBvcHRpb25hbGx5IGVudGVyIGxvdy1wb3dlciBieXBhc3MKKwkgKiBieSB3cml0aW5nIDB4NSBpbnN0ZWFkIG9mIDB4MS4gIEFkZCBzb21lIG1lY2hhbmlzbSB0bworCSAqIG9wdGlvbmFsbHkgZW50ZXIgdGhpcyBtb2RlLgorCSAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKKwl2IHw9IERQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKK30KKworLyoqCisgKiBvbWFwM19kcGxsX2RlbnlfaWRsZSAtIHByZXZlbnQgRFBMTCBmcm9tIGF1dG9tYXRpY2FsbHkgaWRsaW5nCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgorICoKKyAqIERpc2FibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKKworCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKKwkJcmV0dXJuOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKKwl2IHw9IERQTExfQVVUT0lETEVfRElTQUJMRSA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5hdXRvaWRsZV9yZWcpOworCit9CisKKy8qIENsb2NrIGNvbnRyb2wgZm9yIERQTEwgb3V0cHV0cyAqLworCisvKioKKyAqIG9tYXAzX2Nsa291dHgyX3JlY2FsYyAtIHJlY2FsY3VsYXRlIERQTEwgWDIgb3V0cHV0IHZpcnR1YWwgY2xvY2sgcmF0ZQorICogQGNsazogRFBMTCBvdXRwdXQgc3RydWN0IGNsaworICoKKyAqIFVzaW5nIHBhcmVudCBjbG9jayBEUExMIGRhdGEsIGxvb2sgdXAgRFBMTCBzdGF0ZS4gIElmIGxvY2tlZCwgc2V0IG91cgorICogcmF0ZSB0byB0aGUgZHBsbF9jbGsgKiAyOyBvdGhlcndpc2UsIGp1c3QgdXNlIGRwbGxfY2xrLgorICovCit1bnNpZ25lZCBsb25nIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXUzMiB2OworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwkvKiBXYWxrIHVwIHRoZSBwYXJlbnRzIG9mIGNsaywgbG9va2luZyBmb3IgYSBEUExMICovCisJcGNsayA9IGNsay0+cGFyZW50OworCXdoaWxlIChwY2xrICYmICFwY2xrLT5kcGxsX2RhdGEpCisJCXBjbGsgPSBwY2xrLT5wYXJlbnQ7CisKKwkvKiBjbGsgZG9lcyBub3QgaGF2ZSBhIERQTEwgYXMgYSBwYXJlbnQ/ICovCisJV0FSTl9PTighcGNsayk7CisKKwlkZCA9IHBjbGstPmRwbGxfZGF0YTsKKworCVdBUk5fT04oIWRkLT5lbmFibGVfbWFzayk7CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKSAmIGRkLT5lbmFibGVfbWFzazsKKwl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOworCWlmICgodiAhPSBPTUFQM1hYWF9FTl9EUExMX0xPQ0tFRCkgfHwgKGRkLT5mbGFncyAmIERQTExfSl9UWVBFKSkKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCWVsc2UKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlICogMjsKKwlyZXR1cm4gcmF0ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZW11LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2VtdS5jCmluZGV4IGVjMGQ5ODQuLjljNDQyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZW11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9lbXUuYwpAQCAtNTYsNiArNTYsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbXVfaW5pdCh2b2lkKQogeworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRU5PREVWOworCiAJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzX2V0Yl9kZXZpY2UsICZpb21lbV9yZXNvdXJjZSk7CiAJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzX2V0bV9kZXZpY2UsICZpb21lbV9yZXNvdXJjZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDc0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogZ3BtYy1uYW5kLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIFZpbWFsIFNpbmdoIDx2aW1hbHNpbmdoQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KKyNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KKworI2RlZmluZSBXUl9SRF9QSU5fTU9OSVRPUklORwkweDAwNjAwMDAwCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmdwbWNfbmFuZF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdwbWNfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBncG1jX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmdwbWNfbmFuZF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBpbnQgb21hcDJfbmFuZF9ncG1jX3JldGltZSh2b2lkKQoreworCXN0cnVjdCBncG1jX3RpbWluZ3MgdDsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCXQuc3luY19jbGsgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPnN5bmNfY2xrKTsKKwl0LmNzX29uID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5jc19vbik7CisJdC5hZHZfb24gPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmFkdl9vbik7CisKKwkvKiBSZWFkICovCisJdC5hZHZfcmRfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcygKKwkJCQlncG1jX25hbmRfZGF0YS0+Z3BtY190LT5hZHZfcmRfb2ZmKTsKKwl0Lm9lX29uICA9IHQuYWR2X29uOworCXQuYWNjZXNzID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5hY2Nlc3MpOworCXQub2Vfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5vZV9vZmYpOworCXQuY3NfcmRfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5jc19yZF9vZmYpOworCXQucmRfY3ljbGUgID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5yZF9jeWNsZSk7CisKKwkvKiBXcml0ZSAqLworCXQuYWR2X3dyX29mZiA9IGdwbWNfcm91bmRfbnNfdG9fdGlja3MoCisJCQkJZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+YWR2X3dyX29mZik7CisJdC53ZV9vbiAgPSB0Lm9lX29uOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCSAgICB0LndyX2RhdGFfbXV4X2J1cyA9CWdwbWNfcm91bmRfbnNfdG9fdGlja3MoCisJCQkJZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+d3JfZGF0YV9tdXhfYnVzKTsKKwkgICAgdC53cl9hY2Nlc3MgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKAorCQkJCWdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPndyX2FjY2Vzcyk7CisJfQorCXQud2Vfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT53ZV9vZmYpOworCXQuY3Nfd3Jfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5jc193cl9vZmYpOworCXQud3JfY3ljbGUgID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT53cl9jeWNsZSk7CisKKwkvKiBDb25maWd1cmUgR1BNQyAqLworCWdwbWNfY3Nfd3JpdGVfcmVnKGdwbWNfbmFuZF9kYXRhLT5jcywgR1BNQ19DU19DT05GSUcxLAorCQkJR1BNQ19DT05GSUcxX0RFVklDRVNJWkUoZ3BtY19uYW5kX2RhdGEtPmRldnNpemUpIHwKKwkJCUdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFX05BTkQpOworCisJZXJyID0gZ3BtY19jc19zZXRfdGltaW5ncyhncG1jX25hbmRfZGF0YS0+Y3MsICZ0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3BtY19uYW5kX3NldHVwKHZvaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmdwbWNfbmFuZF9kZXZpY2UuZGV2OworCisJLyogU2V0IHRpbWluZ3MgaW4gR1BNQyAqLworCWlmIChvbWFwMl9uYW5kX2dwbWNfcmV0aW1lKCkgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHNldCBncG1jIHRpbWluZ3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKl9uYW5kX2RhdGEpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgZXJyCT0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZ3BtY19uYW5kX2RldmljZS5kZXY7CisKKwlncG1jX25hbmRfZGF0YSA9IF9uYW5kX2RhdGE7CisJZ3BtY19uYW5kX2RhdGEtPm5hbmRfc2V0dXAgPSBncG1jX25hbmRfc2V0dXA7CisJZ3BtY19uYW5kX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGdwbWNfbmFuZF9kYXRhOworCisJZXJyID0gZ3BtY19jc19yZXF1ZXN0KGdwbWNfbmFuZF9kYXRhLT5jcywgTkFORF9JT19TSVpFLAorCQkJCSZncG1jX25hbmRfZGF0YS0+cGh5c19iYXNlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCByZXF1ZXN0IEdQTUMgQ1NcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGdwbWNfbmFuZF9zZXR1cCgpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiTkFORCBwbGF0Zm9ybSBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEVuYWJsZSBSRCBQSU4gTW9uaXRvcmluZyBSZWcgKi8KKwlpZiAoZ3BtY19uYW5kX2RhdGEtPmRldl9yZWFkeSkgeworCQl2YWwgID0gZ3BtY19jc19yZWFkX3JlZyhncG1jX25hbmRfZGF0YS0+Y3MsCisJCQkJCQkgR1BNQ19DU19DT05GSUcxKTsKKwkJdmFsIHw9IFdSX1JEX1BJTl9NT05JVE9SSU5HOworCQlncG1jX2NzX3dyaXRlX3JlZyhncG1jX25hbmRfZGF0YS0+Y3MsCisJCQkJCQlHUE1DX0NTX0NPTkZJRzEsIHZhbCk7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZncG1jX25hbmRfZGV2aWNlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfY3M7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2NzOgorCWdwbWNfY3NfZnJlZShncG1jX25hbmRfZGF0YS0+Y3MpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggNzAyN2NkYy4uNWJjM2NhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTU1Miw5ICs1NTIsMTAgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIHN0cnVjdCBvbWFwM19ncG1jX3JlZ3MgZ3BtY19jb250ZXh0OwogCi12b2lkIG9tYXAzX2dwbWNfc2F2ZV9jb250ZXh0KCkKK3ZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQodm9pZCkKIHsKIAlpbnQgaTsKKwogCWdwbWNfY29udGV4dC5zeXNjb25maWcgPSBncG1jX3JlYWRfcmVnKEdQTUNfU1lTQ09ORklHKTsKIAlncG1jX2NvbnRleHQuaXJxZW5hYmxlID0gZ3BtY19yZWFkX3JlZyhHUE1DX0lSUUVOQUJMRSk7CiAJZ3BtY19jb250ZXh0LnRpbWVvdXRfY3RybCA9IGdwbWNfcmVhZF9yZWcoR1BNQ19USU1FT1VUX0NPTlRST0wpOwpAQCAtNTgzLDkgKzU4NCwxMCBAQAogCX0KIH0KIAotdm9pZCBvbWFwM19ncG1jX3Jlc3RvcmVfY29udGV4dCgpCit2b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KHZvaWQpCiB7CiAJaW50IGk7CisKIAlncG1jX3dyaXRlX3JlZyhHUE1DX1NZU0NPTkZJRywgZ3BtY19jb250ZXh0LnN5c2NvbmZpZyk7CiAJZ3BtY193cml0ZV9yZWcoR1BNQ19JUlFFTkFCTEUsIGdwbWNfY29udGV4dC5pcnFlbmFibGUpOwogCWdwbWNfd3JpdGVfcmVnKEdQTUNfVElNRU9VVF9DT05UUk9MLCBncG1jX2NvbnRleHQudGltZW91dF9jdHJsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWQyMjk1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvbW1jLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+CisKKyNpbmNsdWRlICJoc21tYy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkKKworc3RhdGljIHUxNiBjb250cm9sX3BiaWFzX29mZnNldDsKK3N0YXRpYyB1MTYgY29udHJvbF9kZXZjb25mMV9vZmZzZXQ7CisKKyNkZWZpbmUgSFNNTUNfTkFNRV9MRU4JOQorCitzdGF0aWMgc3RydWN0IGhzbW1jX2NvbnRyb2xsZXIgeworCWNoYXIJCQkJbmFtZVtIU01NQ19OQU1FX0xFTiArIDFdOworfSBoc21tY1tPTUFQMzRYWF9OUl9NTUNdOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgJiYgZGVmaW5lZChDT05GSUdfUE0pCisKK3N0YXRpYyBpbnQgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG9tYXBfcG1fZ2V0X2Rldl9jb250ZXh0X2xvc3NfY291bnQoZGV2KTsKK30KKworI2Vsc2UKKyNkZWZpbmUgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgaHNtbWMxX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJICBpbnQgcG93ZXJfb24sIGludCB2ZGQpCit7CisJdTMyIHJlZywgcHJvZ19pbzsKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKG1tYy0+c2xvdHNbMF0ucmVtdXgpCisJCW1tYy0+c2xvdHNbMF0ucmVtdXgoZGV2LCBzbG90LCBwb3dlcl9vbik7CisKKwkvKgorCSAqIEFzc3VtZSB3ZSBwb3dlciBib3RoIE9NQVAgVk1NQzEgKGZvciBDTUQsIENMSywgREFUMC4uMykgYW5kIHRoZQorCSAqIGNhcmQgd2l0aCBWY2MgcmVndWxhdG9yIChmcm9tIHR3bDQwMzAgb3Igd2hhdGV2ZXIpLiAgT01BUCBoYXMgYm90aAorCSAqIDEuOFYgYW5kIDMuMFYgbW9kZXMsIGNvbnRyb2xsZWQgYnkgdGhlIFBCSUFTIHJlZ2lzdGVyLgorCSAqCisJICogSW4gOC1iaXQgbW9kZXMsIE9NQVAgVk1NQzFBIChmb3IgREFUNC4uNykgbmVlZHMgYSBzdXBwbHksIHdoaWNoCisJICogaXMgbW9zdCBuYXR1cmFsbHkgVFdMIFZTSU07IHRob3NlIHBpbnMgYWxzbyB1c2UgUEJJQVMuCisJICoKKwkgKiBGSVhNRSBoYW5kbGUgVk1NQzFBIGFzIG5lZWRlZCAuLi4KKwkgKi8KKwlpZiAocG93ZXJfb24pIHsKKwkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CisJCQlpZiAoKDEgPDwgdmRkKSA+PSBNTUNfVkREXzMwXzMxKQorCQkJCXJlZyB8PSBPTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7CisJCQllbHNlCisJCQkJcmVnICY9IH5PTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7CisJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CisJCX0KKworCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTDsKKwkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKKwkJfQorCisJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7CisJCWlmIChjcHVfaXNfb21hcDM2MzAoKSkgeworCQkJLyogU2V0IE1NQyBJL08gdG8gNTJNaHogKi8KKwkJCXByb2dfaW8gPSBvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9QUk9HX0lPMSk7CisJCQlwcm9nX2lvIHw9IE9NQVAzNjMwX1BSR19TRE1NQzFfU1BFRURDVFJMOworCQkJb21hcF9jdHJsX3dyaXRlbChwcm9nX2lvLCBPTUFQMzQzWF9DT05UUk9MX1BST0dfSU8xKTsKKwkJfSBlbHNlIHsKKwkJCXJlZyB8PSBPTUFQMl9QQklBU1NQRUVEQ1RSTDA7CisJCX0KKwkJcmVnICY9IH5PTUFQMl9QQklBU0xJVEVQV1JETlowOworCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9wYmlhc19vZmZzZXQpOworCX0gZWxzZSB7CisJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7CisJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFUFdSRE5aMDsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhzbW1jMV9hZnRlcl9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3sKKwl1MzIgcmVnOworCisJLyogMTAwbXMgZGVsYXkgcmVxdWlyZWQgZm9yIFBCSUFTIGNvbmZpZ3VyYXRpb24gKi8KKwltc2xlZXAoMTAwKTsKKworCWlmIChwb3dlcl9vbikgeworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQlyZWcgfD0gKE9NQVAyX1BCSUFTTElURVBXUkROWjAgfCBPTUFQMl9QQklBU1NQRUVEQ1RSTDApOworCQlpZiAoKDEgPDwgdmRkKSA8PSBNTUNfVkREXzE2NV8xOTUpCisJCQlyZWcgJj0gfk9NQVAyX1BCSUFTTElURVZNT0RFMDsKKwkJZWxzZQorCQkJcmVnIHw9IE9NQVAyX1BCSUFTTElURVZNT0RFMDsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwl9IGVsc2UgeworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQlyZWcgfD0gKE9NQVAyX1BCSUFTU1BFRURDVFJMMCB8IE9NQVAyX1BCSUFTTElURVBXUkROWjAgfAorCQkJT01BUDJfUEJJQVNMSVRFVk1PREUwKTsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhzbW1jMjNfYmVmb3JlX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKKwkJCQkgICBpbnQgcG93ZXJfb24sIGludCB2ZGQpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmIChtbWMtPnNsb3RzWzBdLnJlbXV4KQorCQltbWMtPnNsb3RzWzBdLnJlbXV4KGRldiwgc2xvdCwgcG93ZXJfb24pOworCisJaWYgKHBvd2VyX29uKSB7CisJCS8qIE9ubHkgTU1DMiBzdXBwb3J0cyBhIENMS0lOICovCisJCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKSB7CisJCQl1MzIgcmVnOworCisJCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOworCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8yQURQQ0xLSVNFTDsKKwkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX2RldmNvbmYxX29mZnNldCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqaHNtbWNfZGF0YVtPTUFQMzRYWF9OUl9NTUNdIF9faW5pdGRhdGE7CisKK3ZvaWQgX19pbml0IG9tYXAyX2hzbW1jX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmNvbnRyb2xsZXJzKQoreworCXN0cnVjdCBvbWFwMl9oc21tY19pbmZvICpjOworCWludCBucl9oc21tYyA9IEFSUkFZX1NJWkUoaHNtbWNfZGF0YSk7CisJaW50IGk7CisKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJY29udHJvbF9wYmlhc19vZmZzZXQgPSBPTUFQMjQzWF9DT05UUk9MX1BCSUFTX0xJVEU7CisJCWNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0ID0gT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMTsKKwl9IGVsc2UgeworCQljb250cm9sX3BiaWFzX29mZnNldCA9IE9NQVAzNDNYX0NPTlRST0xfUEJJQVNfTElURTsKKwkJY29udHJvbF9kZXZjb25mMV9vZmZzZXQgPSBPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxOworCX0KKworCWZvciAoYyA9IGNvbnRyb2xsZXJzOyBjLT5tbWM7IGMrKykgeworCQlzdHJ1Y3QgaHNtbWNfY29udHJvbGxlciAqaGMgPSBoc21tYyArIGMtPm1tYyAtIDE7CisJCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBoc21tY19kYXRhW2MtPm1tYyAtIDFdOworCisJCWlmICghYy0+bW1jIHx8IGMtPm1tYyA+IG5yX2hzbW1jKSB7CisJCQlwcl9kZWJ1ZygiTU1DJWQ6IG5vIHN1Y2ggY29udHJvbGxlclxuIiwgYy0+bW1jKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChtbWMpIHsKKwkJCXByX2RlYnVnKCJNTUMlZDogYWxyZWFkeSBjb25maWd1cmVkXG4iLCBjLT5tbWMpOworCQkJY29udGludWU7CisJCX0KKworCQltbWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtbWMpIHsKKwkJCXByX2VycigiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW1jIGRldmljZSFcbiIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGMtPm5hbWUpCisJCQlzdHJuY3B5KGhjLT5uYW1lLCBjLT5uYW1lLCBIU01NQ19OQU1FX0xFTik7CisJCWVsc2UKKwkJCXNucHJpbnRmKGhjLT5uYW1lLCBBUlJBWV9TSVpFKGhjLT5uYW1lKSwKKwkJCQkibW1jJWlzbG90JWkiLCBjLT5tbWMsIDEpOworCQltbWMtPnNsb3RzWzBdLm5hbWUgPSBoYy0+bmFtZTsKKwkJbW1jLT5ucl9zbG90cyA9IDE7CisJCW1tYy0+c2xvdHNbMF0ud2lyZXMgPSBjLT53aXJlczsKKwkJbW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jayA9ICFjLT5leHRfY2xvY2s7CisJCW1tYy0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOworCisJCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9IGhzbW1jX2dldF9jb250ZXh0X2xvc3M7CisKKwkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKKwkJbW1jLT5zbG90c1swXS5ncGlvX3dwID0gYy0+Z3Bpb193cDsKKworCQltbWMtPnNsb3RzWzBdLnJlbXV4ID0gYy0+cmVtdXg7CisKKwkJaWYgKGMtPmNvdmVyX29ubHkpCisJCQltbWMtPnNsb3RzWzBdLmNvdmVyID0gMTsKKworCQlpZiAoYy0+bm9ucmVtb3ZhYmxlKQorCQkJbW1jLT5zbG90c1swXS5ub25yZW1vdmFibGUgPSAxOworCisJCWlmIChjLT5wb3dlcl9zYXZpbmcpCisJCQltbWMtPnNsb3RzWzBdLnBvd2VyX3NhdmluZyA9IDE7CisKKwkJaWYgKGMtPm5vX29mZikKKwkJCW1tYy0+c2xvdHNbMF0ubm9fb2ZmID0gMTsKKworCQlpZiAoYy0+dmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwKQorCQkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOworCisJCS8qIE5PVEU6ICBNTUMgc2xvdHMgc2hvdWxkIGhhdmUgYSBWY2MgcmVndWxhdG9yIHNldCB1cC4KKwkJICogVGhpcyBtYXkgYmUgZnJvbSBhIFRXTDQwMzAtZmFtaWx5IGNoaXAsIGFub3RoZXIKKwkJICogY29udHJvbGxhYmxlIHJlZ3VsYXRvciwgb3IgYSBmaXhlZCBzdXBwbHkuCisJCSAqCisJCSAqIHRlbXBvcmFyeSBIQUNLOiBvY3JfbWFzayBpbnN0ZWFkIG9mIGZpeGVkIHN1cHBseQorCQkgKi8KKwkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IGMtPm9jcl9tYXNrOworCisJCXN3aXRjaCAoYy0+bW1jKSB7CisJCWNhc2UgMToKKwkJCS8qIG9uLWNoaXAgbGV2ZWwgc2hpZnRpbmcgdmlhIFBCSUFTMC9QQklBUzEgKi8KKwkJCW1tYy0+c2xvdHNbMF0uYmVmb3JlX3NldF9yZWcgPSBoc21tYzFfYmVmb3JlX3NldF9yZWc7CisJCQltbWMtPnNsb3RzWzBdLmFmdGVyX3NldF9yZWcgPSBoc21tYzFfYWZ0ZXJfc2V0X3JlZzsKKworCQkJLyogT21hcDM2MzAgSFNNTUMxIHN1cHBvcnRzIG9ubHkgNC1iaXQgKi8KKwkJCWlmIChjcHVfaXNfb21hcDM2MzAoKSAmJiBjLT53aXJlcyA+IDQpIHsKKwkJCQljLT53aXJlcyA9IDQ7CisJCQkJbW1jLT5zbG90c1swXS53aXJlcyA9IGMtPndpcmVzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChjLT5leHRfY2xvY2spCisJCQkJYy0+dHJhbnNjZWl2ZXIgPSAxOworCQkJaWYgKGMtPnRyYW5zY2VpdmVyICYmIGMtPndpcmVzID4gNCkKKwkJCQljLT53aXJlcyA9IDQ7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIDM6CisJCQkvKiBvZmYtY2hpcCBsZXZlbCBzaGlmdGluZywgb3Igbm9uZSAqLworCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9IGhzbW1jMjNfYmVmb3JlX3NldF9yZWc7CisJCQltbWMtPnNsb3RzWzBdLmFmdGVyX3NldF9yZWcgPSBOVUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcl9lcnIoIk1NQyVkIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCFcbiIsIGMtPm1tYyk7CisJCQlrZnJlZShtbWMpOworCQkJY29udGludWU7CisJCX0KKwkJaHNtbWNfZGF0YVtjLT5tbWMgLSAxXSA9IG1tYzsKKwl9CisKKwlvbWFwMl9pbml0X21tYyhoc21tY19kYXRhLCBPTUFQMzRYWF9OUl9NTUMpOworCisJLyogcGFzcyB0aGUgZGV2aWNlIG5vZGVzIGJhY2sgdG8gYm9hcmQgc2V0dXAgY29kZSAqLworCWZvciAoYyA9IGNvbnRyb2xsZXJzOyBjLT5tbWM7IGMrKykgeworCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKworCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykKKwkJCWNvbnRpbnVlOworCQljLT5kZXYgPSBtbWMtPmRldjsKKwl9CisKK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IG5yX2hzbW1jOyBpKyspCisJCWtmcmVlKGhzbW1jX2RhdGFbaV0pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYwYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBNTUMgZGVmaW5pdGlvbnMgZm9yIE9NQVAyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyB7CisJdTgJbW1jOwkJLyogY29udHJvbGxlciAxLzIvMyAqLworCXU4CXdpcmVzOwkJLyogMS80Lzggd2lyZXMgKi8KKwlib29sCXRyYW5zY2VpdmVyOwkvKiBNTUMtMiBvcHRpb24gKi8KKwlib29sCWV4dF9jbG9jazsJLyogdXNlIGV4dGVybmFsIHBpbiBmb3IgaW5wdXQgY2xvY2sgKi8KKwlib29sCWNvdmVyX29ubHk7CS8qIE5vIGNhcmQgZGV0ZWN0IC0ganVzdCBjb3ZlciBzd2l0Y2ggKi8KKwlib29sCW5vbnJlbW92YWJsZTsJLyogTm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLworCWJvb2wJcG93ZXJfc2F2aW5nOwkvKiBUcnkgdG8gc2xlZXAgb3IgcG93ZXIgb2ZmIHdoZW4gcG9zc2libGUgKi8KKwlib29sCW5vX29mZjsJCS8qIHBvd2VyX3NhdmluZyBhbmQgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLworCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCisJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KKwlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLworCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCisJc3RydWN0IGRldmljZSAqZGV2OwkvKiByZXR1cm5lZDogcG9pbnRlciB0byBtbWMgYWRhcHRlciAqLworCWludAlvY3JfbWFzazsJLyogdGVtcG9yYXJ5IEhBQ0sgKi8KKwkvKiBSZW11eCAocGFkIGNvbmZpZ3VhdGlvbikgd2hlbiBwb3dlcmluZyBvbi9vZmYgKi8KKwl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbik7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkKKwordm9pZCBvbWFwMl9oc21tY19pbml0KHN0cnVjdCBvbWFwMl9oc21tY19pbmZvICopOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfaHNtbWNfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqaW5mbykKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pMmMuYwppbmRleCA3ODljYThjLi43OTUxYWUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKQEAgLTI1LDkgKzI1LDcgQEAKIAogI2luY2x1ZGUgIm11eC5oIgogCi1pbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAotCQkJICB1bnNpZ25lZCBsZW4pCit2b2lkIF9faW5pdCBvbWFwMl9pMmNfbXV4X3BpbnMoaW50IGJ1c19pZCkKIHsKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJY29uc3QgaW50IG9tYXAyNHh4X3BpbnNbXVsyXSA9IHsKQEAgLTUxLDYgKzQ5LDQgQEAKIAkJc3ByaW50ZihtdXhfbmFtZSwgImkyYyVpX3NkYS5pMmMlaV9zZGEiLCBidXNfaWQsIGJ1c19pZCk7CiAJCW9tYXBfbXV4X2luaXRfc2lnbmFsKG11eF9uYW1lLCBPTUFQX1BJTl9JTlBVVCk7CiAJfQotCi0JcmV0dXJuIG9tYXBfcGxhdF9yZWdpc3Rlcl9pMmNfYnVzKGJ1c19pZCwgY2xrcmF0ZSwgaW5mbywgbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwppbmRleCAzZDY1YzUwLi4zN2I4YTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCkBAIC01Nyw2ICs1Nyw4IEBACiAJCXZhbCA9IG9tYXBfY3RybF9yZWFkbChPTUFQMjRYWF9DT05UUk9MX1NUQVRVUyk7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQl2YWwgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9TVEFUVVMpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJdmFsID0gb21hcF9jdHJsX3JlYWRsKE9NQVA0NFhYX0NPTlRST0xfU1RBVFVTKTsKIAl9IGVsc2UgewogCQlwcl9lcnIoIkNhbm5vdCBkZXRlY3Qgb21hcCB0eXBlIVxuIik7CiAJCWdvdG8gb3V0OwpAQCAtMTc1LDYgKzE3Nyw4IEBACiAJT01BUDNfQ0hFQ0tfRkVBVFVSRShzdGF0dXMsIFNHWCk7CiAJT01BUDNfQ0hFQ0tfRkVBVFVSRShzdGF0dXMsIE5FT04pOwogCU9NQVAzX0NIRUNLX0ZFQVRVUkUoc3RhdHVzLCBJU1ApOworCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKKwkJb21hcDNfZmVhdHVyZXMgfD0gT01BUDNfSEFTXzE5Mk1IWl9DTEs7CiAKIAkvKgogCSAqIFRPRE86IEdldCBhZGRpdGlvbmFsIGluZm8gKHdoZXJlIGFwcGxpY2FibGUpCkBAIC0yODEsNiArMjg1LDcgQEAKIAogCWlmICgoaGF3a2V5ZSA9PSAweGI4NTIpICYmIChyZXYgPT0gMHgwKSkgewogCQlvbWFwX3JldmlzaW9uID0gT01BUDQ0MzBfUkVWX0VTMV8wOworCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQNDQzMEVTMTsKIAkJcHJfaW5mbygiT01BUCUwNHggJXNcbiIsIG9tYXBfcmV2KCkgPj4gMTYsIHJldl9uYW1lKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM1OCw2ICszNjMsNyBAQAogCU9NQVAzX1NIT1dfRkVBVFVSRShzZ3gpOwogCU9NQVAzX1NIT1dfRkVBVFVSRShuZW9uKTsKIAlPTUFQM19TSE9XX0ZFQVRVUkUoaXNwKTsKKwlPTUFQM19TSE9XX0ZFQVRVUkUoMTkybWh6X2Nsayk7CiAKIAlwcmludGsoIilcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYW0zNXh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9hbTM1eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA1Zjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYW0zNXh4LmgKQEAgLTAsMCArMSwyNiBAQAorLyo6CisgKiBBZGRyZXNzIG1hcHBpbmdzIGFuZCBiYXNlIGFkZHJlc3MgZm9yIEFNMzVYWCBzcGVjaWZpYyBpbnRlcmNvbm5lY3RzCisgKiBhbmQgcGVyaXBoZXJhbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQXV0aG9yOiBTcmlyYW1ha3Jpc2huYW4gPHNya0B0aS5jb20+CisgKgkgICBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0FNMzVYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQU0zNVhYX0gKKworLyoKKyAqIEJhc2UgYWRkcmVzc2VzCisgKglOb3RlOiBPTUFQMzQzMCBJVkEyIG1lbW9yeSBzcGFjZSBpcyBiZWluZyB1c2VkIGZvciBBTTM1eHggSVBTUyBtb2R1bGVzCisgKi8KKyNkZWZpbmUgQU0zNVhYX0lQU1NfRU1BQ19CQVNFCQkweDVDMDAwMDAwCisjZGVmaW5lIEFNMzVYWF9JUFNTX1VTQk9UR1NTX0JBU0UJMHg1QzA0MDAwMAorI2RlZmluZSBBTTM1WFhfSVBTU19IRUNDX0JBU0UJCTB4NUMwNTAwMDAKKyNkZWZpbmUgQU0zNVhYX0lQU1NfVlBGRV9CQVNFCQkweDVDMDYwMDAwCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9BTTM1WFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtc2RwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9ib2FyZC1zZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUxNjljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtc2RwLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqICBib2FyZC1zZHAuaAorICoKKyAqICBJbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzIGZvciBTRFAtc3BlY2lmaWMgYm9hcmQgY29uZmlnIGRhdGEKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCitzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyB7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCWludCBucl9wYXJ0czsKK307CisKK2V4dGVybiB2b2lkIHNkcF9mbGFzaF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIFtdKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGU5ZjI1NWRmLi40YTYzYTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDMyICsxMSwxMDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CisKKyNkZWZpbmUgVUFSVF9PRkZTRVQoYWRkcikJKChhZGRyKSAmIDB4MDBmZmZmZmYpCisKKwkJLnB1c2hzZWN0aW9uIC5kYXRhCitvbWFwX3VhcnRfcGh5czoJLndvcmQJMAorb21hcF91YXJ0X3ZpcnQ6CS53b3JkCTAKK29tYXBfdWFydF9sc3I6CS53b3JkCTAKKwkJLnBvcHNlY3Rpb24KKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhpcyBjb2RlIHdvbid0IHdvcmsgaWYgdGhlIGJvb3Rsb2FkZXIgcGFzc2VzCisJCSAqIGEgd3JvbmcgbWFjaGluZSBJRCBudW1iZXIgaW4gcjEuIFRvIGRlYnVnLCBqdXN0IGhhcmRjb2RlCisJCSAqIHRoZSBkZXNpcmVkIFVBUlQgcGh5cyBhbmQgdmlydCBhZGRyZXNzZXMgdGVtcG9yYXJpbHkgaW50bworCQkgKiB0aGUgb21hcF91YXJ0X3BoeXMgYW5kIG9tYXBfdWFydF92aXJ0IGFib3ZlLgorCQkgKi8KKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCisKKwkJLyogVXNlIG9tYXBfdWFydF9waHlzL3ZpcnQgaWYgYWxyZWFkeSBjb25maWd1cmVkICovCisxMDoJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbGRyZXEJXHJ4LCA9b21hcF91YXJ0X3BoeXMJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbGRybmUJXHJ4LCA9b21hcF91YXJ0X3ZpcnQJQCB2aXJ0dWFsIGJhc2UgYWRkcmVzcworCQlsZHIJXHJ4LCBbXHJ4LCAjMF0KKwkJY21wCVxyeCwgIzAJCQlAIGlzIHBvcnQgY29uZmlndXJlZD8KKwkJYm5lCTk5ZgkJCUAgYWxyZWFkeSBjb25maWd1cmVkCisKKwkJLyogQ2hlY2sgVUFSVDEgc2NyYXRjaHBhZCByZWdpc3RlciBmb3IgdWFydCB0byB1c2UgKi8KIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwotI2lmZGVmICBDT05GSUdfQVJDSF9PTUFQMgogCQltb3ZlcQlccngsICMweDQ4MDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAJCW1vdm5lCVxyeCwgIzB4ZmEwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMDA2YTAwMAotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCi0JCWFkZAlccngsIFxyeCwgIzB4MDAwMDIwMDAJQCBVQVJUIDIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCi0JCWFkZAlccngsIFxyeCwgIzB4MDAwMDQwMDAJQCBVQVJUIDMKLSNlbmRpZgorCQlvcnIJXHJ4LCBccngsICMweDAwMDZhMDAwCUAgdWFydDEgb24gb21hcDIvMy80CisJCWxkcmIJXHJ4LCBbXHJ4LCAjKFVBUlRfU0NSIDw8IE9NQVBfUE9SVF9TSElGVCldIEAgc2NyYXRjaHBhZAogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCQltb3ZlcQlccngsICMweDQ4MDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCi0JCW1vdm5lCVxyeCwgIzB4ZmEwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMDA2YTAwMAotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCi0JCWFkZAlccngsIFxyeCwgIzB4MDAwMDIwMDAJQCBVQVJUIDIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCi0JCWFkZAlccngsIFxyeCwgIzB4MDBmYjAwMDAJQCBVQVJUIDMKLQkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwNjAwMAotI2VuZGlmCi0jZW5kaWYKKwkJLyogU2VsZWN0IHRoZSBVQVJUIHRvIHVzZSBiYXNlZCBvbiB0aGUgVUFSVDEgc2NyYXRjaHBhZCB2YWx1ZSAqLworCQljbXAJXHJ4LCAjMAkJCUAgbm8gcG9ydCBjb25maWd1cmVkPworCQliZXEJMjFmCQkJQCBpZiBub25lLCB0cnkgdG8gdXNlIFVBUlQxCisJCWNtcAlccngsICNPTUFQMlVBUlQxCUAgT01BUDIvMy80VUFSVDEKKwkJYmVxCTIxZgkJCUAgY29uZmlndXJlIE9NQVAyLzMvNFVBUlQxCisJCWNtcAlccngsICNPTUFQMlVBUlQyCUAgT01BUDIvMy80VUFSVDIKKwkJYmVxCTIyZgkJCUAgY29uZmlndXJlIE9NQVAyLzMvNFVBUlQyCisJCWNtcAlccngsICNPTUFQMlVBUlQzCUAgb25seSBvbiAyNHh4CisJCWJlcQkyM2YJCQlAIGNvbmZpZ3VyZSBPTUFQMlVBUlQzCisJCWNtcAlccngsICNPTUFQM1VBUlQzCUAgb25seSBvbiAzNHh4CisJCWJlcQkzM2YJCQlAIGNvbmZpZ3VyZSBPTUFQM1VBUlQzCisJCWNtcAlccngsICNPTUFQNFVBUlQzCUAgb25seSBvbiA0NHh4CisJCWJlcQk0M2YJCQlAIGNvbmZpZ3VyZSBPTUFQNFVBUlQzCisJCWNtcAlccngsICNPTUFQM1VBUlQ0CUAgb25seSBvbiAzNnh4CisJCWJlcQkzNGYJCQlAIGNvbmZpZ3VyZSBPTUFQM1VBUlQ0CisJCWNtcAlccngsICNPTUFQNFVBUlQ0CUAgb25seSBvbiA0NHh4CisJCWJlcQk0NGYJCQlAIGNvbmZpZ3VyZSBPTUFQNFVBUlQ0CisJCWNtcAlccngsICNaT09NX1VBUlQJCUAgb25seSBvbiB6b29tMi8zCisJCWJlcQk5NWYJCQlAIGNvbmZpZ3VyZSBaT09NX1VBUlQKKworCQkvKiBDb25maWd1cmUgdGhlIFVBUlQgb2Zmc2V0IGZyb20gdGhlIHBoeXMvdmlydCBiYXNlICovCisyMToJCW1vdglccngsICNVQVJUX09GRlNFVChPTUFQMl9VQVJUMV9CQVNFKQlAIG9tYXAyLzMvNAorCQliCTk4ZgorMjI6CQltb3YJXHJ4LCAjVUFSVF9PRkZTRVQoT01BUDJfVUFSVDJfQkFTRSkJQCBvbWFwMi8zLzQKKwkJYgk5OGYKKzIzOgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVAyX1VBUlQzX0JBU0UpCisJCWIJOThmCiszMzoJCW1vdglccngsICNVQVJUX09GRlNFVChPTUFQM19VQVJUMV9CQVNFKQorCQlhZGQJXHJ4LCBccngsICMweDAwZmIwMDAwCisJCWFkZAlccngsIFxyeCwgIzB4MDAwMDYwMDAJCUAgT01BUDNfVUFSVDNfQkFTRQorCQliCTk4ZgorMzQ6CQltb3YJXHJ4LCAjVUFSVF9PRkZTRVQoT01BUDNfVUFSVDFfQkFTRSkKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAorCQlhZGQJXHJ4LCBccngsICMweDAwMDI4MDAwCQlAIE9NQVAzX1VBUlQ0X0JBU0UKKwkJYgk5OGYKKzQzOgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVA0X1VBUlQzX0JBU0UpCisJCWIJOThmCis0NDoJCW1vdglccngsICNVQVJUX09GRlNFVChPTUFQNF9VQVJUNF9CQVNFKQorCQliCTk4ZgorOTU6CQltb3YJXHJ4LCAjWk9PTV9VQVJUX0JBU0UKKwkJbGRyCVx0bXAsID1vbWFwX3VhcnRfcGh5cworCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCisJCW1vdglccngsICNaT09NX1VBUlRfVklSVAorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF92aXJ0CisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJbW92CVxyeCwgIyhVQVJUX0xTUiA8PCBaT09NX1BPUlRfU0hJRlQpCisJCWxkcglcdG1wLCA9b21hcF91YXJ0X2xzcgorCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCisJCWIJMTBiCisKKwkJLyogU3RvcmUgYm90aCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3MgZm9yIHRoZSB1YXJ0ICovCis5ODoJCWFkZAlccngsIFxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzIGJhc2UKKwkJbGRyCVx0bXAsID1vbWFwX3VhcnRfcGh5cworCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCisJCXN1YglccngsIFxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzIGJhc2UKKwkJYWRkCVxyeCwgXHJ4LCAjMHhmYTAwMDAwMAlAIHZpcnQgYmFzZQorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF92aXJ0CisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJbW92CVxyeCwgIyhVQVJUX0xTUiA8PCBPTUFQX1BPUlRfU0hJRlQpCisJCWxkcglcdG1wLCA9b21hcF91YXJ0X2xzcgorCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCisKKwkJYgkxMGIKKzk5OgogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCxyZCxyeApAQCAtNDQsMTUgKzExOSwxMiBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjKDB4NSA8PCAyKV0JQCBPTUFQLTE1MTAgYW5kIGZyaWVuZHMKLQkJYW5kCVxyZCwgXHJkLCAjMHg2MAotCQl0ZXEJXHJkLCAjMHg2MAotCQliZXEJMTAwMmYKLQkJbGRyYglccmQsIFtccngsICMoMHg1IDw8IDApXQlAIE9NQVAtNzMwIG9ubHkKLQkJYW5kCVxyZCwgXHJkLCAjMHg2MAotCQl0ZXEJXHJkLCAjMHg2MAorMTAwMToJCWxkcglccmQsID1vbWFwX3VhcnRfbHNyCisJCWxkcglccmQsIFtccmQsICMwXQorCQlsZHJiCVxyZCwgW1xyeCwgXHJkXQorCQlhbmQJXHJkLCBccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCisJCXRlcQlccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCiAJCWJuZQkxMDAxYgotMTAwMjoKIAkJLmVuZG0KIAogCQkubWFjcm8Jd2FpdHVhcnQscmQscngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGM3ZjE3MjAuLmZmMjVjN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMTcsNDYgKzE3LDEzNCBAQAogCiAjaW5jbHVkZSA8cGxhdC9vbWFwMjR4eC5oPgogI2luY2x1ZGUgPHBsYXQvb21hcDM0eHguaD4KLQotLyogUkVWSVNJVDogVGhpcyBzaG91bGQgYmUgc2V0IGR5bmFtaWNhbGx5IGlmIENPTkZJR19NVUxUSV9PTUFQMiBpcyBzZWxlY3RlZCAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCi0jZGVmaW5lIE9NQVAyX1ZBX0lDX0JBU0UJCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0jZGVmaW5lIE9NQVAyX1ZBX0lDX0JBU0UJCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0WFhfSUNfQkFTRSkKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAjaW5jbHVkZSA8cGxhdC9vbWFwNDR4eC5oPgotI2VuZGlmCi0jZGVmaW5lIElOVENQU19TSVJfSVJRX09GRlNFVAkweDAwNDAJCS8qIEFjdGl2ZSBpbnRlcnJ1cHQgb2Zmc2V0ICovCi0jZGVmaW5lCUFDVElWRUlSUV9NQVNLCQkweDdmCQkvKiBBY3RpdmUgaW50ZXJydXB0IGJpdHMgKi8KKworI2luY2x1ZGUgPHBsYXQvbXVsdGkuaD4KKworI2RlZmluZSBPTUFQMl9JUlFfQkFTRQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKQorI2RlZmluZSBPTUFQM19JUlFfQkFTRQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzRYWF9JQ19CQVNFKQorI2RlZmluZSBPTUFQNF9JUlFfQkFTRQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpCisjZGVmaW5lIElOVENQU19TSVJfSVJRX09GRlNFVAkweDAwNDAJLyogb21hcDIvMyBhY3RpdmUgaW50ZXJydXB0IG9mZnNldCAqLworI2RlZmluZQlBQ1RJVkVJUlFfTUFTSwkJMHg3ZgkvKiBvbWFwMi8zIGFjdGl2ZSBpbnRlcnJ1cHQgYml0cyAqLwogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCi0JCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQkJLmVuZG0KLQogCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKIAkJLmVuZG0KIAotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAorLyoKKyAqIFVub3B0aW1pemVkIGlycSBmdW5jdGlvbnMgZm9yIG11bHRpLW9tYXAyLCAzIGFuZCA0CisgKi8KKworI2lmZGVmIE1VTFRJX09NQVAyCisJCS5wdXNoc2VjdGlvbiAuZGF0YQorb21hcF9pcnFfYmFzZToJLndvcmQJMAorCQkucG9wc2VjdGlvbgorCisJCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0IGJhc2Ugb24gdGhlIGZpcnN0IGludGVycnVwdCAqLworCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCis5OgorCQlsZHIJXGJhc2UsID1vbWFwX2lycV9iYXNlCUAgaXJxIGJhc2UgYWRkcmVzcworCQlsZHIJXGJhc2UsIFtcYmFzZSwgIzBdCUAgaXJxIGJhc2UgdmFsdWUKKwkJY21wCVxiYXNlLCAjMAkJQCBhbHJlYWR5IGNvbmZpZ3VyZWQ/CisJCWJuZQk5OTk3ZgkJCUAgbm90aGluZyB0byBkbworCisJCW1yYwlwMTUsIDAsIFx0bXAsIGMwLCBjMCwgMAlAIGdldCBwcm9jZXNzb3IgcmV2aXNpb24KKwkJYW5kCVx0bXAsIFx0bXAsICMweDAwMGYwMDAwCUAgb25seSBjaGVjayBhcmNoaXRlY3R1cmUKKwkJY21wCVx0bXAsICMweDAwMDYwMDAwCUAgaXMgdjY/CisJCWJlcQkyNDAwZgkJCUAgZm91bmQgdjYgc28gaXQncyBvbWFwMjR4eAorCQltcmMJcDE1LCAwLCBcdG1wLCBjMCwgYzAsIDAJQCBnZXQgcHJvY2Vzc29yIHJldmlzaW9uCisJCWFuZAlcdG1wLCBcdG1wLCAjMHgwMDAwMDBmMAlAIGNoZWNrIGNvcnRleCA4IG9yIDkKKwkJY21wCVx0bXAsICMweDAwMDAwMDgwCUAgY29ydGV4IEEtOD8KKwkJYmVxCTM0MDBmCQkJQCBmb3VuZCBBLTggc28gaXQncyBvbWFwMzR4eAorCQljbXAJXHRtcCwgIzB4MDAwMDAwOTAJQCBjb3J0ZXggQS05PworCQliZXEJNDQwMGYJCQlAIGZvdW5kIEEtOSBzbyBpdCdzIG9tYXA0NHh4CisyNDAwOgkJbGRyCVxiYXNlLCA9T01BUDJfSVJRX0JBU0UKKwkJbGRyCVx0bXAsID1vbWFwX2lycV9iYXNlCisJCXN0cglcYmFzZSwgW1x0bXAsICMwXQorCQliCTliCiszNDAwOgkJbGRyCVxiYXNlLCA9T01BUDNfSVJRX0JBU0UKKwkJbGRyCVx0bXAsID1vbWFwX2lycV9iYXNlCisJCXN0cglcYmFzZSwgW1x0bXAsICMwXQorCQliCTliCis0NDAwOgkJbGRyCVxiYXNlLCA9T01BUDRfSVJRX0JBU0UKKwkJbGRyCVx0bXAsID1vbWFwX2lycV9iYXNlCisJCXN0cglcYmFzZSwgW1x0bXAsICMwXQorCQliCTliCis5OTk3OgorCQkuZW5kbQorCisJCS8qIENoZWNrIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIE5vdGUgdGhhdCBiYXNlIGFscmVhZHkgc2V0ICovCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9T01BUDJfVkFfSUNfQkFTRQorCQl0c3QJXGJhc2UsICMweDEwMAkJQCBnaWMgYWRkcmVzcz8KKwkJYm5lCTQ0MDFmCQkJQCBmb3VuZCBnaWMKKworCQkvKiBIYW5kbGUgb21hcDIgYW5kIG9tYXAzICovCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4OThdIC8qIElSUSBwZW5kaW5nIHJlZyAxICovCiAJCWNtcAlcaXJxbnIsICMweDAKLQkJYm5lCTIyMjJmCisJCWJuZQk5OTk4ZgogCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGI4XSAvKiBJUlEgcGVuZGluZyByZWcgMiAqLwogCQljbXAJXGlycW5yLCAjMHgwCi0JCWJuZQkyMjIyZgorCQlibmUJOTk5OGYKIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHhkOF0gLyogSVJRIHBlbmRpbmcgcmVnIDMgKi8KIAkJY21wCVxpcnFuciwgIzB4MAotMjIyMjoKKzk5OTg6CisJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUXQorCQlhbmQJXGlycW5yLCBcaXJxbnIsICNBQ1RJVkVJUlFfTUFTSyAvKiBDbGVhciBzcHVyaW91cyBiaXRzICovCisJCWIJOTk5OWYKKworCQkvKiBIYW5kbGUgb21hcDQgKi8KKzQ0MDE6CQlsZHIgICAgIFxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0lOVEFDS10KKwkJbGRyICAgICBcdG1wLCA9MTAyMQorCQliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkJY21wICAgICBcaXJxbnIsICMyOQorCQljbXBjYyAgIFxpcnFuciwgXGlycW5yCisJCWNtcG5lICAgXGlycW5yLCBcdG1wCisJCWNtcGNzICAgXGlycW5yLCBcaXJxbnIKKzk5OTk6CisJCS5lbmRtCisKKworI2Vsc2UJLyogTVVMVElfT01BUDIgKi8KKworCisvKgorICogT3B0aW1pemVkIGlycSBmdW5jdGlvbnMgZm9yIG9tYXAyLCAzIGFuZCA0CisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCQlsZHIJXGJhc2UsID1PTUFQMl9JUlFfQkFTRQorI2Vsc2UKKwkJbGRyCVxiYXNlLCA9T01BUDNfSVJRX0JBU0UKKyNlbmRpZgorCQkuZW5kbQorCisJCS8qIENoZWNrIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIE5vdGUgdGhhdCBiYXNlIGFscmVhZHkgc2V0ICovCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHg5OF0gLyogSVJRIHBlbmRpbmcgcmVnIDEgKi8KKwkJY21wCVxpcnFuciwgIzB4MAorCQlibmUJOTk5OWYKKwkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHhiOF0gLyogSVJRIHBlbmRpbmcgcmVnIDIgKi8KKwkJY21wCVxpcnFuciwgIzB4MAorCQlibmUJOTk5OWYKKwkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHhkOF0gLyogSVJRIHBlbmRpbmcgcmVnIDMgKi8KKwkJY21wCVxpcnFuciwgIzB4MAorOTk5OToKIAkJbGRybmUJXGlycW5yLCBbXGJhc2UsICNJTlRDUFNfU0lSX0lSUV9PRkZTRVRdCiAJCWFuZAlcaXJxbnIsIFxpcnFuciwgI0FDVElWRUlSUV9NQVNLIC8qIENsZWFyIHNwdXJpb3VzIGJpdHMgKi8KIAogCQkuZW5kbQotI2Vsc2UKLSNkZWZpbmUgT01BUDQ0WFhfVkFfR0lDX0NQVV9CQVNFCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0WFhfR0lDX0NQVV9CQVNFKQorI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQlsZHIgICAgIFxiYXNlLCA9T01BUDRfSVJRX0JBU0UKKwkJLmVuZG0KIAogCQkvKgogCQkgKiBUaGUgaW50ZXJydXB0IG51bWJlcmluZyBzY2hlbWUgaXMgZGVmaW5lZCBpbiB0aGUKQEAgLTc4LDcgKzE2Niw2IEBACiAJCSAqIHZhbGlkIHJhbmdlIGZvciBhbiBJUlEgKDMwLTEwMjAgaW5jbHVzaXZlKS4KIAkJICovCiAJCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCWxkciAgICAgXGJhc2UsID1PTUFQNDRYWF9WQV9HSUNfQ1BVX0JBU0UKIAkJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdCiAKIAkJbGRyICAgICBcdG1wLCA9MTAyMQpAQCAtMTE5LDYgKzIwNiw3IEBACiAJCWNtcAlcdG1wLCAjMAogCQkuZW5kbQogI2VuZGlmCisjZW5kaWYJLyogTVVMVElfT01BUDIgKi8KIAogCQkubWFjcm8JaXJxX3ByaW9fdGFibGUKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA1YTc5OTY0Li40MDJlOGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L3ZyYW0uaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAiY2xvY2szeHh4LmgiCisjaW5jbHVkZSAiY2xvY2s0NHh4LmgiCiAKICNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KICNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CkBAIC00NCwxNiArNDYsMTMgQEAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSAiY2xvY2tkb21haW5zLmgiCiAjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+Ci0jaW5jbHVkZSAib21hcF9od21vZF8yNDIwLmgiCi0jaW5jbHVkZSAib21hcF9od21vZF8yNDMwLmgiCi0jaW5jbHVkZSAib21hcF9od21vZF8zNHh4LmgiCiAKIC8qCiAgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCiAgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMjR4eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gTDNfMjRYWF9WSVJULApAQCAtMTIzLDcgKzEyMiw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMzR4eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gTDNfMzRYWF9WSVJULApAQCAtMTM4LDEyICsxMzcsNiBAQAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAogCXsKLQkJLnZpcnR1YWwJPSBMNF9XS18zNFhYX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9XS18zNFhYX1BIWVMpLAotCQkubGVuZ3RoCQk9IEw0X1dLXzM0WFhfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLQl7CiAJCS52aXJ0dWFsCT0gT01BUDM0WFhfR1BNQ19WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDM0WFhfR1BNQ19QSFlTKSwKIAkJLmxlbmd0aAkJPSBPTUFQMzRYWF9HUE1DX1NJWkUsCkBAIC0xOTAsMTIgKzE4Myw2IEBACiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogCXsKLQkJLnZpcnR1YWwJPSBMNF9XS180NFhYX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9XS180NFhYX1BIWVMpLAotCQkubGVuZ3RoCQk9IEw0X1dLXzQ0WFhfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi0JewogCQkudmlydHVhbAk9IE9NQVA0NFhYX0dQTUNfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVA0NFhYX0dQTUNfUEhZUyksCiAJCS5sZW5ndGgJCT0gT01BUDQ0WFhfR1BNQ19TSVpFLApAQCAtMjM0LDI1ICsyMjEsOCBAQAogfTsKICNlbmRpZgogCi12b2lkIF9faW5pdCBvbWFwMl9tYXBfY29tbW9uX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgX29tYXAyX21hcF9jb21tb25faW8odm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQotCWlvdGFibGVfaW5pdChvbWFwMjR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNHh4X2lvX2Rlc2MpKTsKLQlpb3RhYmxlX2luaXQob21hcDI0MnhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjQyeF9pb19kZXNjKSk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCi0JaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOwotCWlvdGFibGVfaW5pdChvbWFwMjQzeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDN4X2lvX2Rlc2MpKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQlpb3RhYmxlX2luaXQob21hcDM0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMzR4eF9pb19kZXNjKSk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JaW90YWJsZV9pbml0KG9tYXA0NHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDQ0eHhfaW9fZGVzYykpOwotI2VuZGlmCiAJLyogTm9ybWFsbHkgZGV2aWNlbWFwc19pbml0KCkgd291bGQgZmx1c2ggY2FjaGVzIGFuZCB0bGIgYWZ0ZXIKIAkgKiBtZGVzYy0+bWFwX2lvKCksIGJ1dCB3ZSBtdXN0IGFsc28gZG8gaXQgaGVyZSBiZWNhdXNlIG9mIHRoZSBDUFUKIAkgKiByZXZpc2lvbiBjaGVjayBiZWxvdy4KQEAgLTI2Niw2ICsyMzYsNDAgQEAKIAlvbWFwX3ZyYW1fcmVzZXJ2ZV9zZHJhbSgpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKK3ZvaWQgX19pbml0IG9tYXAyNDJ4X21hcF9jb21tb25faW8oKQoreworCWlvdGFibGVfaW5pdChvbWFwMjR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNHh4X2lvX2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQob21hcDI0MnhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjQyeF9pb19kZXNjKSk7CisJX29tYXAyX21hcF9jb21tb25faW8oKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKK3ZvaWQgX19pbml0IG9tYXAyNDN4X21hcF9jb21tb25faW8oKQoreworCWlvdGFibGVfaW5pdChvbWFwMjR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNHh4X2lvX2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQob21hcDI0M3hfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjQzeF9pb19kZXNjKSk7CisJX29tYXAyX21hcF9jb21tb25faW8oKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKK3ZvaWQgX19pbml0IG9tYXAzNHh4X21hcF9jb21tb25faW8oKQoreworCWlvdGFibGVfaW5pdChvbWFwMzR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAzNHh4X2lvX2Rlc2MpKTsKKwlfb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAordm9pZCBfX2luaXQgb21hcDQ0eHhfbWFwX2NvbW1vbl9pbygpCit7CisJaW90YWJsZV9pbml0KG9tYXA0NHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDQ0eHhfaW9fZGVzYykpOworCV9vbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisjZW5kaWYKKwogLyoKICAqIG9tYXAyX2luaXRfcmVwcm9ncmFtX3NkcmMgLSByZXByb2dyYW0gU0RSQyB0aW1pbmcgcGFyYW1ldGVycwogICoKQEAgLTMwMywyNCArMzA3LDMxIEBACiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyhzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCiAJCQkJIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMSkKIHsKLQlzdHJ1Y3Qgb21hcF9od21vZCAqKmh3bW9kcyA9IE5VTEw7CisJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fYXV0b2RlcHMpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB0aGUgY2xrZGV2IGlzIHJlYWR5ICovCisJaWYgKGNwdV9pc19vbWFwMjQyeCgpKQorCQlvbWFwMjQyMF9od21vZF9pbml0KCk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJCW9tYXAyNDMwX2h3bW9kX2luaXQoKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcDN4eHhfaHdtb2RfaW5pdCgpOworCW9tYXAyX211eF9pbml0KCk7CisJLyogVGhlIE9QUCB0YWJsZXMgaGF2ZSB0byBiZSByZWdpc3RlcmVkIGJlZm9yZSBhIGNsayBpbml0ICovCisJb21hcF9wbV9pZl9lYXJseV9pbml0KG1wdV9vcHBzLCBkc3Bfb3BwcywgbDNfb3Bwcyk7CisjZW5kaWYKIAogCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKLQkJaHdtb2RzID0gb21hcDI0MjBfaHdtb2RzOworCQlvbWFwMjQyMF9jbGtfaW5pdCgpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQlod21vZHMgPSBvbWFwMjQzMF9od21vZHM7CisJCW9tYXAyNDMwX2Nsa19pbml0KCk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCWh3bW9kcyA9IG9tYXAzNHh4X2h3bW9kczsKKwkJb21hcDN4eHhfY2xrX2luaXQoKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDR4eHhfY2xrX2luaXQoKTsKKwllbHNlCisJCXByX2VycigiQ291bGQgbm90IGluaXQgY2xvY2sgZnJhbWV3b3JrIC0gdW5rbm93biBDUFVcbiIpOwogCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBjbGtkZXYgaXMgcmVhZHkgKi8KLQkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KLQlvbWFwX2h3bW9kX2luaXQoaHdtb2RzKTsKLQlvbWFwMl9tdXhfaW5pdCgpOwotCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwotCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwotCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKLSNlbmRpZgotCW9tYXAyX2Nsa19pbml0KCk7CiAJb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOwogI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IDI4MWFiNjM0Li41MmE5ODFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtNDAsNiArNDAsOSBAQAogI2RlZmluZSBBVVRPSURMRQkoMSA8PCAwKQogI2RlZmluZSBTT0ZUUkVTRVQJKDEgPDwgMSkKICNkZWZpbmUgU01BUlRJRExFCSgyIDw8IDMpCisjZGVmaW5lIE9NQVA0X1NPRlRSRVNFVAkoMSA8PCAwKQorI2RlZmluZSBPTUFQNF9OT0lETEUJKDEgPDwgMikKKyNkZWZpbmUgT01BUDRfU01BUlRJRExFCSgyIDw8IDIpCiAKIC8qIFNZU1NUQVRVUzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KICNkZWZpbmUgUkVTRVRET05FCSgxIDw8IDApCkBAIC05MywyOSArOTYsNDcgQEAKIAogCW1ib3hfaWNrX2hhbmRsZSA9IGNsa19nZXQoTlVMTCwgIm1haWxib3hlc19pY2siKTsKIAlpZiAoSVNfRVJSKG1ib3hfaWNrX2hhbmRsZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IG1haWxib3hlc19pY2s6ICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgbWFpbGJveGVzX2ljazogJWxkXG4iLAogCQkJUFRSX0VSUihtYm94X2lja19oYW5kbGUpKTsKIAkJcmV0dXJuIFBUUl9FUlIobWJveF9pY2tfaGFuZGxlKTsKIAl9CiAJY2xrX2VuYWJsZShtYm94X2lja19oYW5kbGUpOwogCi0JbWJveF93cml0ZV9yZWcoU09GVFJFU0VULCBNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKLQlkbyB7Ci0JCWwgPSBtYm94X3JlYWRfcmVnKE1BSUxCT1hfU1lTU1RBVFVTKTsKLQkJaWYgKGwgJiBSRVNFVERPTkUpCi0JCQlicmVhazsKLQl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCW1ib3hfd3JpdGVfcmVnKE9NQVA0X1NPRlRSRVNFVCwgTUFJTEJPWF9TWVNDT05GSUcpOworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQlkbyB7CisJCQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7CisJCQlpZiAoIShsICYgT01BUDRfU09GVFJFU0VUKSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOwogCi0JaWYgKCEobCAmIFJFU0VURE9ORSkpIHsKLQkJcHJfZXJyKCJDYW4ndCB0YWtlIG1tdSBvdXQgb2YgcmVzZXRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGwgJiBPTUFQNF9TT0ZUUkVTRVQpIHsKKwkJCXByX2VycigiQ2FuJ3QgdGFrZSBtYWlsYm94IG91dCBvZiByZXNldFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSB7CisJCW1ib3hfd3JpdGVfcmVnKFNPRlRSRVNFVCwgTUFJTEJPWF9TWVNDT05GSUcpOworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQlkbyB7CisJCQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU1NUQVRVUyk7CisJCQlpZiAobCAmIFJFU0VURE9ORSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCisJCWlmICghKGwgJiBSRVNFVERPTkUpKSB7CisJCQlwcl9lcnIoIkNhbid0IHRha2UgbWFpbGJveCBvdXQgb2YgcmVzZXRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1JFVklTSU9OKTsKIAlwcl9pbmZvKCJvbWFwIG1haWxib3ggcmV2ICVkLiVkXG4iLCAobCAmIDB4ZjApID4+IDQsIChsICYgMHgwZikpOwogCi0JbCA9IFNNQVJUSURMRSB8IEFVVE9JRExFOworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJbCA9IE9NQVA0X1NNQVJUSURMRTsKKwllbHNlCisJCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKIAltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7CiAKIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwppbmRleCBiYWE0NTE3Li5iZThmY2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCkBAIC02NSw5ICs2NSwxMSBAQAogCX0sCiB9OwogI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwMjQyMF9tY2JzcF9wZGF0YQkJTlVMTAogI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCkBAIC0xMTQsMTIgKzExNiwxNCBAQAogCX0sCiB9OwogI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwMjQzMF9tY2JzcF9wZGF0YQkJTlVMTAogI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXAzNHh4X21jYnNwX3BkYXRhW10gPSB7CiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AxX0JBU0UsCkBAIC0xMzIsNiArMTM2LDcgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLAorCQkucGh5c19iYXNlX3N0CT0gT01BUDM0WFhfTUNCU1AyX1NUX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKQEAgLTE0MSw2ICsxNDYsNyBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AzX0JBU0UsCisJCS5waHlzX2Jhc2Vfc3QJPSBPTUFQMzRYWF9NQ0JTUDNfU1RfQkFTRSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQM19UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1JYLApAQCAtMTY4LDkgKzE3NCwxMSBAQAogCX0sCiB9OwogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMzR4eF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwMzR4eF9tY2JzcF9wZGF0YQkJTlVMTAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDQ0eHhfbWNic3BfcGRhdGFbXSA9IHsKQEAgLTIwOCwxNyArMjE2LDIzIEBACiAJfSwKIH07CiAjZGVmaW5lIE9NQVA0NFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQNDRYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfUkNDUiAvIHNpemVvZih1MzIpICsgMSkKIAogc3RhdGljIGludCBfX2luaXQgb21hcDJfbWNic3BfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKIAkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaOwotCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDI0MjBfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MTYpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKIAkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAyNDMwX01DQlNQX1BEQVRBX1NaOwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDI0MzBfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MzIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaOwotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDM0WFhfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MzIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVA0NFhYX01DQlNQX1BEQVRBX1NaOworCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQNDRYWF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUzMik7CisJfQogCiAJbWNic3BfcHRyID0ga3phbGxvYyhvbWFwX21jYnNwX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBvbWFwX21jYnNwICopLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmZTlkZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgotI2luY2x1ZGUgPHBsYXQvbW1jLmg+Ci0jaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgotCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SKSAmJiBcCi0JKGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpKQotCi1zdGF0aWMgdTE2IGNvbnRyb2xfcGJpYXNfb2Zmc2V0Owotc3RhdGljIHUxNiBjb250cm9sX2RldmNvbmYxX29mZnNldDsKLQotI2RlZmluZSBIU01NQ19OQU1FX0xFTgk5Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqbW1jOwotCS8qIFZjYyA9PSBjb25maWd1cmVkIHN1cHBseQotCSAqIFZjY19hbHQgPT0gb3B0aW9uYWwKLQkgKiAgIC0JTU1DMSwgc3VwcGx5IGZvciBEQVQ0Li5EQVQ3Ci0JICogICAtCU1NQzIvTU1DMiwgZXh0ZXJuYWwgbGV2ZWwgc2hpZnRlciB2b2x0YWdlIHN1cHBseSwgZm9yCi0JICoJY2hpcCAoU0RJTywgZU1NQywgZXRjKSBvciB0cmFuc2NlaXZlciAoTU1DMiBvbmx5KQotCSAqLwotCXN0cnVjdCByZWd1bGF0b3IJCSp2Y2M7Ci0Jc3RydWN0IHJlZ3VsYXRvcgkJKnZjY19hdXg7Ci0JY2hhcgkJCQluYW1lW0hTTU1DX05BTUVfTEVOICsgMV07Ci19IGhzbW1jW09NQVAzNFhYX05SX01NQ107Ci0KLXN0YXRpYyBpbnQgdHdsX21tY19jYXJkX2RldGVjdChpbnQgaXJxKQotewotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgewotCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jOwotCi0JCW1tYyA9IGhzbW1jW2ldLm1tYzsKLQkJaWYgKCFtbWMpCi0JCQljb250aW51ZTsKLQkJaWYgKGlycSAhPSBtbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KLQkJcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOwotCX0KLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotc3RhdGljIGludCB0d2xfbW1jX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQotewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQkvKiBOT1RFOiBhc3N1bWVzIHdyaXRlIHByb3RlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCi0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uZ3Bpb193cCk7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKLXsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLwotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKLX0KLQotLyoKLSAqIE1NQyBTbG90IEluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgaW50IHR3bF9tbWNfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWludCByZXQgPSAwOwotCWludCBpOwotCi0JLyogTU1DL1NEL1NESU8gZG9lc24ndCByZXF1aXJlIGEgY2FyZCBkZXRlY3Qgc3dpdGNoICovCi0JaWYgKGdwaW9faXNfdmFsaWQobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKSkgewotCQlyZXQgPSBncGlvX3JlcXVlc3QobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluLCAibW1jX2NkIik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGRvbmU7Ci0JCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQl9Ci0KLQkvKiByZXF1aXJlIGF0IGxlYXN0IG1haW4gcmVndWxhdG9yICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHNtbWMpOyBpKyspIHsKLQkJaWYgKGhzbW1jW2ldLm5hbWUgPT0gbW1jLT5zbG90c1swXS5uYW1lKSB7Ci0JCQlzdHJ1Y3QgcmVndWxhdG9yICpyZWc7Ci0KLQkJCWhzbW1jW2ldLm1tYyA9IG1tYzsKLQotCQkJcmVnID0gcmVndWxhdG9yX2dldChkZXYsICJ2bW1jIik7Ci0JCQlpZiAoSVNfRVJSKHJlZykpIHsKLQkJCQlkZXZfZGJnKGRldiwgInZtbWMgcmVndWxhdG9yIG1pc3NpbmdcbiIpOwotCQkJCS8qIEhBQ0s6IHVudGlsIGZpeGVkLmMgcmVndWxhdG9yIGlzIHVzYWJsZSwKLQkJCQkgKiB3ZSBkb24ndCByZXF1aXJlIGEgbWFpbiByZWd1bGF0b3IKLQkJCQkgKiBmb3IgTU1DMiBvciBNTUMzCi0JCQkJICovCi0JCQkJaWYgKGkgIT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQkJcmV0ID0gUFRSX0VSUihyZWcpOwotCQkJCWhzbW1jW2ldLnZjYyA9IE5VTEw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCQloc21tY1tpXS52Y2MgPSByZWc7Ci0JCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhyZWcpOwotCi0JCQkvKiBhbGxvdyBhbiBhdXggcmVndWxhdG9yICovCi0JCQlyZWcgPSByZWd1bGF0b3JfZ2V0KGRldiwgInZtbWNfYXV4Iik7Ci0JCQloc21tY1tpXS52Y2NfYXV4ID0gSVNfRVJSKHJlZykgPyBOVUxMIDogcmVnOwotCi0JCQkvKiBVR0xZIEhBQ0s6ICB3b3JrYXJvdW5kIHJlZ3VsYXRvciBmcmFtZXdvcmsgYnVncy4KLQkJCSAqIFdoZW4gdGhlIGJvb3Rsb2FkZXIgbGVhdmVzIGEgc3VwcGx5IGFjdGl2ZSwgaXQncwotCQkJICogaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvIHVzZWNvdW50IC4uLiBhbmQgd2UgY2FuJ3QKLQkJCSAqIGRpc2FibGUgaXQgd2l0aG91dCBmaXJzdCBlbmFibGluZyBpdC4gIFVudGlsIHRoZQotCQkJICogZnJhbWV3b3JrIGlzIGZpeGVkLCB3ZSBuZWVkIGEgd29ya2Fyb3VuZCBsaWtlIHRoaXMKLQkJCSAqICh3aGljaCBpcyBzYWZlIGZvciBNTUMsIGJ1dCBub3QgaW4gZ2VuZXJhbCkuCi0JCQkgKi8KLQkJCWlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChoc21tY1tpXS52Y2MpID4gMCkgewotCQkJCXJlZ3VsYXRvcl9lbmFibGUoaHNtbWNbaV0udmNjKTsKLQkJCQlyZWd1bGF0b3JfZGlzYWJsZShoc21tY1tpXS52Y2MpOwotCQkJfQotCQkJaWYgKGhzbW1jW2ldLnZjY19hdXgpIHsKLQkJCQlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQocmVnKSA+IDApIHsKLQkJCQkJcmVndWxhdG9yX2VuYWJsZShyZWcpOwotCQkJCQlyZWd1bGF0b3JfZGlzYWJsZShyZWcpOwotCQkJCX0KLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyOgotCWdwaW9fZnJlZShtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOwotZG9uZToKLQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSA9IDA7Ci0JbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IE5VTEw7Ci0KLQlkZXZfZXJyKGRldiwgImVyciAlZCBjb25maWd1cmluZyBjYXJkIGRldGVjdFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB0d2xfbW1jX2NsZWFudXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaW50IGk7Ci0KLQlncGlvX2ZyZWUobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKLQlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhzbW1jKTsgaSsrKSB7Ci0JCXJlZ3VsYXRvcl9wdXQoaHNtbWNbaV0udmNjKTsKLQkJcmVndWxhdG9yX3B1dChoc21tY1tpXS52Y2NfYXV4KTsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCB0d2xfbW1jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKLXsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JZGlzYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR3bF9tbWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCi17Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWVuYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSB0d2xfbW1jX3N1c3BlbmQJTlVMTAotI2RlZmluZSB0d2xfbW1jX3Jlc3VtZQlOVUxMCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQotCi1zdGF0aWMgaW50IHR3bDQwMzBfbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIEZJWE1FOiBQTSBEUFMgbm90IGltcGxlbWVudGVkIHlldCAqLwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSB0d2w0MDMwX21tY19nZXRfY29udGV4dF9sb3NzIE5VTEwKLSNlbmRpZgotCi1zdGF0aWMgaW50IHR3bF9tbWMxX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCi0JCQkJaW50IHZkZCkKLXsKLQl1MzIgcmVnLCBwcm9nX2lvOwotCWludCByZXQgPSAwOwotCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSAmaHNtbWNbMF07Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCS8qCi0JICogQXNzdW1lIHdlIHBvd2VyIGJvdGggT01BUCBWTU1DMSAoZm9yIENNRCwgQ0xLLCBEQVQwLi4zKSBhbmQgdGhlCi0JICogY2FyZCB3aXRoIFZjYyByZWd1bGF0b3IgKGZyb20gdHdsNDAzMCBvciB3aGF0ZXZlcikuICBPTUFQIGhhcyBib3RoCi0JICogMS44ViBhbmQgMy4wViBtb2RlcywgY29udHJvbGxlZCBieSB0aGUgUEJJQVMgcmVnaXN0ZXIuCi0JICoKLQkgKiBJbiA4LWJpdCBtb2RlcywgT01BUCBWTU1DMUEgKGZvciBEQVQ0Li43KSBuZWVkcyBhIHN1cHBseSwgd2hpY2gKLQkgKiBpcyBtb3N0IG5hdHVyYWxseSBUV0wgVlNJTTsgdGhvc2UgcGlucyBhbHNvIHVzZSBQQklBUy4KLQkgKgotCSAqIEZJWE1FIGhhbmRsZSBWTU1DMUEgYXMgbmVlZGVkIC4uLgotCSAqLwotCWlmIChwb3dlcl9vbikgewotCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxKTsKLQkJCWlmICgoMSA8PCB2ZGQpID49IE1NQ19WRERfMzBfMzEpCi0JCQkJcmVnIHw9IE9NQVAyNDNYX01NQzFfQUNUSVZFX09WRVJXUklURTsKLQkJCWVsc2UKLQkJCQlyZWcgJj0gfk9NQVAyNDNYX01NQzFfQUNUSVZFX09WRVJXUklURTsKLQkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxKTsKLQkJfQotCi0JCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKSB7Ci0JCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7Ci0JCQlyZWcgfD0gT01BUDJfTU1DU0RJTzFBRFBDTEtJU0VMOwotCQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotCQl9Ci0KLQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQkJaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7Ci0JCQkvKiBTZXQgTU1DIEkvTyB0byA1Mk1oeiAqLwotCQkJcHJvZ19pbyA9IG9tYXBfY3RybF9yZWFkbChPTUFQMzQzWF9DT05UUk9MX1BST0dfSU8xKTsKLQkJCXByb2dfaW8gfD0gT01BUDM2MzBfUFJHX1NETU1DMV9TUEVFRENUUkw7Ci0JCQlvbWFwX2N0cmxfd3JpdGVsKHByb2dfaW8sIE9NQVAzNDNYX0NPTlRST0xfUFJPR19JTzEpOwotCQl9IGVsc2UgewotCQkJcmVnIHw9IE9NQVAyX1BCSUFTU1BFRURDVFJMMDsKLQkJfQotCQlyZWcgJj0gfk9NQVAyX1BCSUFTTElURVBXUkROWjA7Ci0JCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0KLQkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGMtPnZjYywgdmRkKTsKLQotCQkvKiAxMDBtcyBkZWxheSByZXF1aXJlZCBmb3IgUEJJQVMgY29uZmlndXJhdGlvbiAqLwotCQltc2xlZXAoMTAwKTsKLQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQkJcmVnIHw9IChPTUFQMl9QQklBU0xJVEVQV1JETlowIHwgT01BUDJfUEJJQVNTUEVFRENUUkwwKTsKLQkJaWYgKCgxIDw8IHZkZCkgPD0gTU1DX1ZERF8xNjVfMTk1KQotCQkJcmVnICY9IH5PTUFQMl9QQklBU0xJVEVWTU9ERTA7Ci0JCWVsc2UKLQkJCXJlZyB8PSBPTUFQMl9QQklBU0xJVEVWTU9ERTA7Ci0JCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JfSBlbHNlIHsKLQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQkJcmVnICY9IH5PTUFQMl9QQklBU0xJVEVQV1JETlowOwotCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9wYmlhc19vZmZzZXQpOwotCi0JCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihjLT52Y2MsIDApOwotCi0JCS8qIDEwMG1zIGRlbGF5IHJlcXVpcmVkIGZvciBQQklBUyBjb25maWd1cmF0aW9uICovCi0JCW1zbGVlcCgxMDApOwotCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOwotCQlyZWcgfD0gKE9NQVAyX1BCSUFTU1BFRURDVFJMMCB8IE9NQVAyX1BCSUFTTElURVBXUkROWjAgfAotCQkJT01BUDJfUEJJQVNMSVRFVk1PREUwKTsKLQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHR3bF9tbWMyM19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLCBpbnQgdmRkKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSBOVUxMOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgewotCQlpZiAobW1jID09IGhzbW1jW2ldLm1tYykgewotCQkJYyA9ICZoc21tY1tpXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBJZiB3ZSBkb24ndCBzZWUgYSBWY2MgcmVndWxhdG9yLCBhc3N1bWUgaXQncyBhIGZpeGVkCi0JICogdm9sdGFnZSBhbHdheXMtb24gcmVndWxhdG9yLgotCSAqLwotCWlmICghYy0+dmNjKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQXNzdW1lIFZjYyByZWd1bGF0b3IgaXMgdXNlZCBvbmx5IHRvIHBvd2VyIHRoZSBjYXJkIC4uLiBPTUFQCi0JICogVkREUyBpcyB1c2VkIHRvIHBvd2VyIHRoZSBwaW5zLCBvcHRpb25hbGx5IHdpdGggYSB0cmFuc2NlaXZlciB0bwotCSAqIHN1cHBvcnQgY2FyZHMgdXNpbmcgdm9sdGFnZXMgb3RoZXIgdGhhbiBWRERTICgxLjhWIG5vbWluYWwpLiAgV2hlbiBhCi0JICogdHJhbnNjZWl2ZXIgaXMgdXNlZCwgREFUMy4uNyBhcmUgbXV4ZWQgYXMgdHJhbnNjZWl2ZXIgY29udHJvbCBwaW5zLgotCSAqCi0JICogSW4gc29tZSBjYXNlcyB0aGlzIHJlZ3VsYXRvciB3b24ndCBzdXBwb3J0IGVuYWJsZS9kaXNhYmxlOwotCSAqIGUuZy4gaXQncyBhIGZpeGVkIHJhaWwgZm9yIGEgV0xBTiBjaGlwLgotCSAqCi0JICogSW4gb3RoZXIgY2FzZXMgdmNjX2F1eCBzd2l0Y2hlcyBpbnRlcmZhY2UgcG93ZXIuICBFeGFtcGxlLCBmb3IKLQkgKiBlTU1DIGNhcmRzIGl0IHJlcHJlc2VudHMgVmNjUS4gIFNvbWV0aW1lcyB0cmFuc2NlaXZlcnMgb3IgU0RJTwotCSAqIGNoaXBzL2NhcmRzIG5lZWQgYW4gaW50ZXJmYWNlIHZvbHRhZ2UgcmFpbCB0b28uCi0JICovCi0JaWYgKHBvd2VyX29uKSB7Ci0JCS8qIG9ubHkgTU1DMiBzdXBwb3J0cyBhIENMS0lOICovCi0JCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKSB7Ci0JCQl1MzIgcmVnOwotCi0JCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOwotCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8yQURQQ0xLSVNFTDsKLQkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX2RldmNvbmYxX29mZnNldCk7Ci0JCX0KLQkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGMtPnZjYywgdmRkKTsKLQkJLyogZW5hYmxlIGludGVyZmFjZSB2b2x0YWdlIHJhaWwsIGlmIG5lZWRlZCAqLwotCQlpZiAocmV0ID09IDAgJiYgYy0+dmNjX2F1eCkgewotCQkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShjLT52Y2NfYXV4KTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihjLT52Y2MsIDApOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGMtPnZjY19hdXggJiYgKHJldCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKGMtPnZjY19hdXgpKSA+IDApCi0JCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShjLT52Y2NfYXV4KTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGMtPnZjYywgMCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0d2xfbW1jMV9zZXRfc2xlZXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHNsZWVwLCBpbnQgdmRkLAotCQkJICAgICAgaW50IGNhcmRzbGVlcCkKLXsKLQlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzBdOwotCWludCBtb2RlID0gc2xlZXAgPyBSRUdVTEFUT1JfTU9ERV9TVEFOREJZIDogUkVHVUxBVE9SX01PREVfTk9STUFMOwotCi0JcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShjLT52Y2MsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IHR3bF9tbWMyM19zZXRfc2xlZXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHNsZWVwLCBpbnQgdmRkLAotCQkJICAgICAgIGludCBjYXJkc2xlZXApCi17Ci0Jc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqYyA9IE5VTEw7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgaSwgZXJyLCBtb2RlOwotCi0JZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoaHNtbWMpOyBpKyspIHsKLQkJaWYgKG1tYyA9PSBoc21tY1tpXS5tbWMpIHsKLQkJCWMgPSAmaHNtbWNbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChjID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkgKiBJZiB3ZSBkb24ndCBzZWUgYSBWY2MgcmVndWxhdG9yLCBhc3N1bWUgaXQncyBhIGZpeGVkCi0JICogdm9sdGFnZSBhbHdheXMtb24gcmVndWxhdG9yLgotCSAqLwotCWlmICghYy0+dmNjKQotCQlyZXR1cm4gMDsKLQotCW1vZGUgPSBzbGVlcCA/IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkgOiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Ci0KLQlpZiAoIWMtPnZjY19hdXgpCi0JCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjLCBtb2RlKTsKLQotCWlmIChjYXJkc2xlZXApIHsKLQkJLyogVkNDIGNhbiBiZSB0dXJuZWQgb2ZmIGlmIGNhcmQgaXMgYXNsZWVwICovCi0JCXN0cnVjdCByZWd1bGF0b3IgKnZjY19hdXggPSBjLT52Y2NfYXV4OwotCi0JCWMtPnZjY19hdXggPSBOVUxMOwotCQlpZiAoc2xlZXApCi0JCQllcnIgPSB0d2xfbW1jMjNfc2V0X3Bvd2VyKGRldiwgc2xvdCwgMCwgMCk7Ci0JCWVsc2UKLQkJCWVyciA9IHR3bF9tbWMyM19zZXRfcG93ZXIoZGV2LCBzbG90LCAxLCB2ZGQpOwotCQljLT52Y2NfYXV4ID0gdmNjX2F1eDsKLQl9IGVsc2UKLQkJZXJyID0gcmVndWxhdG9yX3NldF9tb2RlKGMtPnZjYywgbW9kZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gcmVndWxhdG9yX3NldF9tb2RlKGMtPnZjY19hdXgsIG1vZGUpOwotfQotCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmhzbW1jX2RhdGFbT01BUDM0WFhfTlJfTU1DXSBfX2luaXRkYXRhOwotCi12b2lkIF9faW5pdCB0d2w0MDMwX21tY19pbml0KHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmNvbnRyb2xsZXJzKQotewotCXN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmM7Ci0JaW50IG5yX2hzbW1jID0gQVJSQVlfU0laRShoc21tY19kYXRhKTsKLQlpbnQgaTsKLQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgewotCQljb250cm9sX3BiaWFzX29mZnNldCA9IE9NQVAyNDNYX0NPTlRST0xfUEJJQVNfTElURTsKLQkJY29udHJvbF9kZXZjb25mMV9vZmZzZXQgPSBPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxOwotCQlucl9oc21tYyA9IDI7Ci0JfSBlbHNlIHsKLQkJY29udHJvbF9wYmlhc19vZmZzZXQgPSBPTUFQMzQzWF9DT05UUk9MX1BCSUFTX0xJVEU7Ci0JCWNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0ID0gT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMTsKLQl9Ci0KLQlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKLQkJc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqdHdsID0gaHNtbWMgKyBjLT5tbWMgLSAxOwotCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKLQotCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykgewotCQkJcHJfZGVidWcoIk1NQyVkOiBubyBzdWNoIGNvbnRyb2xsZXJcbiIsIGMtPm1tYyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobW1jKSB7Ci0JCQlwcl9kZWJ1ZygiTU1DJWQ6IGFscmVhZHkgY29uZmlndXJlZFxuIiwgYy0+bW1jKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbW1jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFtbWMpIHsKLQkJCXByX2VycigiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW1jIGRldmljZSFcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJaWYgKGMtPm5hbWUpCi0JCQlzdHJuY3B5KHR3bC0+bmFtZSwgYy0+bmFtZSwgSFNNTUNfTkFNRV9MRU4pOwotCQllbHNlCi0JCQlzbnByaW50Zih0d2wtPm5hbWUsIEFSUkFZX1NJWkUodHdsLT5uYW1lKSwKLQkJCQkibW1jJWlzbG90JWkiLCBjLT5tbWMsIDEpOwotCQltbWMtPnNsb3RzWzBdLm5hbWUgPSB0d2wtPm5hbWU7Ci0JCW1tYy0+bnJfc2xvdHMgPSAxOwotCQltbWMtPnNsb3RzWzBdLndpcmVzID0gYy0+d2lyZXM7Ci0JCW1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2sgPSAhYy0+ZXh0X2Nsb2NrOwotCQltbWMtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKLQkJbW1jLT5pbml0ID0gdHdsX21tY19sYXRlX2luaXQ7Ci0KLQkJLyogbm90ZTogdHdsNDAzMCBjYXJkIGRldGVjdCBHUElPcyBjYW4gZGlzYWJsZSBWTU1DeCAuLi4gKi8KLQkJaWYgKGdwaW9faXNfdmFsaWQoYy0+Z3Bpb19jZCkpIHsKLQkJCW1tYy0+Y2xlYW51cCA9IHR3bF9tbWNfY2xlYW51cDsKLQkJCW1tYy0+c3VzcGVuZCA9IHR3bF9tbWNfc3VzcGVuZDsKLQkJCW1tYy0+cmVzdW1lID0gdHdsX21tY19yZXN1bWU7Ci0KLQkJCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7Ci0JCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSA9IGdwaW9fdG9faXJxKGMtPmdwaW9fY2QpOwotCQkJaWYgKGMtPmNvdmVyX29ubHkpCi0JCQkJbW1jLT5zbG90c1swXS5nZXRfY292ZXJfc3RhdGUgPSB0d2xfbW1jX2dldF9jb3Zlcl9zdGF0ZTsKLQkJCWVsc2UKLQkJCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0ID0gdHdsX21tY19jYXJkX2RldGVjdDsKLQkJfSBlbHNlCi0JCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOwotCi0JCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9Ci0JCQkJdHdsNDAzMF9tbWNfZ2V0X2NvbnRleHRfbG9zczsKLQotCQkvKiB3cml0ZSBwcm90ZWN0IG5vcm1hbGx5IHVzZXMgYW4gT01BUCBncGlvICovCi0JCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fd3ApKSB7Ci0JCQlncGlvX3JlcXVlc3QoYy0+Z3Bpb193cCwgIm1tY193cCIpOwotCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoYy0+Z3Bpb193cCk7Ci0KLQkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IGMtPmdwaW9fd3A7Ci0JCQltbWMtPnNsb3RzWzBdLmdldF9ybyA9IHR3bF9tbWNfZ2V0X3JvOwotCQl9IGVsc2UKLQkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7Ci0KLQkJaWYgKGMtPm5vbnJlbW92YWJsZSkKLQkJCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKLQotCQlpZiAoYy0+cG93ZXJfc2F2aW5nKQotCQkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOwotCi0JCS8qIE5PVEU6ICBNTUMgc2xvdHMgc2hvdWxkIGhhdmUgYSBWY2MgcmVndWxhdG9yIHNldCB1cC4KLQkJICogVGhpcyBtYXkgYmUgZnJvbSBhIFRXTDQwMzAtZmFtaWx5IGNoaXAsIGFub3RoZXIKLQkJICogY29udHJvbGxhYmxlIHJlZ3VsYXRvciwgb3IgYSBmaXhlZCBzdXBwbHkuCi0JCSAqCi0JCSAqIHRlbXBvcmFyeSBIQUNLOiBvY3JfbWFzayBpbnN0ZWFkIG9mIGZpeGVkIHN1cHBseQotCQkgKi8KLQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IGMtPm9jcl9tYXNrOwotCi0JCXN3aXRjaCAoYy0+bW1jKSB7Ci0JCWNhc2UgMToKLQkJCS8qIG9uLWNoaXAgbGV2ZWwgc2hpZnRpbmcgdmlhIFBCSUFTMC9QQklBUzEgKi8KLQkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gdHdsX21tYzFfc2V0X3Bvd2VyOwotCQkJbW1jLT5zbG90c1swXS5zZXRfc2xlZXAgPSB0d2xfbW1jMV9zZXRfc2xlZXA7Ci0KLQkJCS8qIE9tYXAzNjMwIEhTTU1DMSBzdXBwb3J0cyBvbmx5IDQtYml0ICovCi0JCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkgJiYgYy0+d2lyZXMgPiA0KSB7Ci0JCQkJYy0+d2lyZXMgPSA0OwotCQkJCW1tYy0+c2xvdHNbMF0ud2lyZXMgPSBjLT53aXJlczsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpZiAoYy0+ZXh0X2Nsb2NrKQotCQkJCWMtPnRyYW5zY2VpdmVyID0gMTsKLQkJCWlmIChjLT50cmFuc2NlaXZlciAmJiBjLT53aXJlcyA+IDQpCi0JCQkJYy0+d2lyZXMgPSA0OwotCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJY2FzZSAzOgotCQkJLyogb2ZmLWNoaXAgbGV2ZWwgc2hpZnRpbmcsIG9yIG5vbmUgKi8KLQkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gdHdsX21tYzIzX3NldF9wb3dlcjsKLQkJCW1tYy0+c2xvdHNbMF0uc2V0X3NsZWVwID0gdHdsX21tYzIzX3NldF9zbGVlcDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJfZXJyKCJNTUMlZCBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQhXG4iLCBjLT5tbWMpOwotCQkJa2ZyZWUobW1jKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWhzbW1jX2RhdGFbYy0+bW1jIC0gMV0gPSBtbWM7Ci0JfQotCi0Jb21hcDJfaW5pdF9tbWMoaHNtbWNfZGF0YSwgT01BUDM0WFhfTlJfTU1DKTsKLQotCS8qIHBhc3MgdGhlIGRldmljZSBub2RlcyBiYWNrIHRvIGJvYXJkIHNldHVwIGNvZGUgKi8KLQlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKLQkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhzbW1jX2RhdGFbYy0+bW1jIC0gMV07Ci0KLQkJaWYgKCFjLT5tbWMgfHwgYy0+bW1jID4gbnJfaHNtbWMpCi0JCQljb250aW51ZTsKLQkJYy0+ZGV2ID0gbW1jLT5kZXY7Ci0JfQotCi1kb25lOgotCWZvciAoaSA9IDA7IGkgPCBucl9oc21tYzsgaSsrKQotCQlrZnJlZShoc21tY19kYXRhW2ldKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0N2U2ODUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIE1NQyBkZWZpbml0aW9ucyBmb3IgT01BUDIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLXN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gewotCXU4CW1tYzsJCS8qIGNvbnRyb2xsZXIgMS8yLzMgKi8KLQl1OAl3aXJlczsJCS8qIDEvNC84IHdpcmVzICovCi0JYm9vbAl0cmFuc2NlaXZlcjsJLyogTU1DLTIgb3B0aW9uICovCi0JYm9vbAlleHRfY2xvY2s7CS8qIHVzZSBleHRlcm5hbCBwaW4gZm9yIGlucHV0IGNsb2NrICovCi0JYm9vbAljb3Zlcl9vbmx5OwkvKiBObyBjYXJkIGRldGVjdCAtIGp1c3QgY292ZXIgc3dpdGNoICovCi0JYm9vbAlub25yZW1vdmFibGU7CS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KLQlib29sCXBvd2VyX3NhdmluZzsJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCi0JaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KLQlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwotCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCi0Jc3RydWN0IGRldmljZSAqZGV2OwkvKiByZXR1cm5lZDogcG9pbnRlciB0byBtbWMgYWRhcHRlciAqLwotCWludAlvY3JfbWFzazsJLyogdGVtcG9yYXJ5IEhBQ0sgKi8KLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1IpICYmIFwKLQkoZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkgfHwgXAotCSBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKSkKLQotdm9pZCB0d2w0MDMwX21tY19pbml0KHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKik7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0d2w0MDMwX21tY19pbml0KHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmluZm8pCi17Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggNWZlZjczZi4uYjRjYTg0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC03NSw3ICs3NSw3IEBACiAJfQogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIGFyY2hfbXV4X2NmZzsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgTElTVF9IRUFEKG11eG1vZGVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobXV4bW9kZV9tdXRleCk7CiAKQEAgLTk4Myw2ICs5ODMsMzggQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworc3RhdGljIHZvaWQgb21hcF9tdXhfaW5pdF9wYWNrYWdlKHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCisJCQkJICBzdHJ1Y3Qgb21hcF9tdXggKnBhY2thZ2Vfc3Vic2V0LAorCQkJCSAgc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxscykKK3sKKwlpZiAocGFja2FnZV9zdWJzZXQpCisJCW9tYXBfbXV4X3BhY2thZ2VfZml4dXAocGFja2FnZV9zdWJzZXQsIHN1cGVyc2V0KTsKKwlpZiAocGFja2FnZV9iYWxscykKKwkJb21hcF9tdXhfcGFja2FnZV9pbml0X2JhbGxzKHBhY2thZ2VfYmFsbHMsIHN1cGVyc2V0KTsKK30KKworc3RhdGljIHZvaWQgb21hcF9tdXhfaW5pdF9zaWduYWxzKHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4KQoreworCW9tYXBfbXV4X3NldF9jbWRsaW5lX3NpZ25hbHMoKTsKKwlvbWFwX211eF93cml0ZV9hcnJheShib2FyZF9tdXgpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBvbWFwX211eF9pbml0X3BhY2thZ2Uoc3RydWN0IG9tYXBfbXV4ICpzdXBlcnNldCwKKwkJCQkgIHN0cnVjdCBvbWFwX211eCAqcGFja2FnZV9zdWJzZXQsCisJCQkJICBzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzKQoreworfQorCitzdGF0aWMgdm9pZCBvbWFwX211eF9pbml0X3NpZ25hbHMoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCit7Cit9CisKKyNlbmRpZgorCiBpbnQgX19pbml0IG9tYXBfbXV4X2luaXQodTMyIG11eF9wYmFzZSwgdTMyIG11eF9zaXplLAogCQkJCXN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCiAJCQkJc3RydWN0IG9tYXBfbXV4ICpwYWNrYWdlX3N1YnNldCwKQEAgLTk5OSwyMiArMTAzMSwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfT01BUF9NVVgKLQlpZiAocGFja2FnZV9zdWJzZXQpCi0JCW9tYXBfbXV4X3BhY2thZ2VfZml4dXAocGFja2FnZV9zdWJzZXQsIHN1cGVyc2V0KTsKLQlpZiAocGFja2FnZV9iYWxscykKLQkJb21hcF9tdXhfcGFja2FnZV9pbml0X2JhbGxzKHBhY2thZ2VfYmFsbHMsIHN1cGVyc2V0KTsKLSNlbmRpZgotCisJb21hcF9tdXhfaW5pdF9wYWNrYWdlKHN1cGVyc2V0LCBwYWNrYWdlX3N1YnNldCwgcGFja2FnZV9iYWxscyk7CiAJb21hcF9tdXhfaW5pdF9saXN0KHN1cGVyc2V0KTsKLQotI2lmZGVmIENPTkZJR19PTUFQX01VWAotCW9tYXBfbXV4X3NldF9jbWRsaW5lX3NpZ25hbHMoKTsKLQlvbWFwX211eF93cml0ZV9hcnJheShib2FyZF9tdXgpOwotI2VuZGlmCisJb21hcF9tdXhfaW5pdF9zaWduYWxzKGJvYXJkX211eCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKaW5kZXggZjhjMmU3YS4uNDgwYWJjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1MTYJdmFsdWU7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKIC8qKgogICogb21hcF9tdXhfaW5pdF9ncGlvIC0gaW5pdGlhbGl6ZSBhIHNpZ25hbCBiYXNlZCBvbiB0aGUgR1BJTyBudW1iZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKaW5kZXggNDc4YWU1ODVjLi5jNjY0OTQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtODQsMTcgKzg0LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgX3VwZGF0ZV9zeXNjX2NhY2hlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcpIHsKLQkJV0FSTighb2gtPnN5c2NvbmZpZywgIm9tYXBfaHdtb2Q6ICVzOiBjYW5ub3QgcmVhZCAiCi0JCSAgICAgIk9DUF9TWVNDT05GSUc6IG5vdCBkZWZpbmVkIG9uIGh3bW9kXG4iLCBvaC0+bmFtZSk7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IGNhbm5vdCByZWFkIE9DUF9TWVNDT05GSUc6IG5vdCBkZWZpbmVkIG9uIGh3bW9kJ3MgY2xhc3NcbiIsIG9oLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogWFhYIGVuc3VyZSBtb2R1bGUgaW50ZXJmYWNlIGNsb2NrIGlzIHVwICovCiAKLQlvaC0+X3N5c2NfY2FjaGUgPSBvbWFwX2h3bW9kX3JlYWRsKG9oLCBvaC0+c3lzY29uZmlnLT5zeXNjX29mZnMpOworCW9oLT5fc3lzY19jYWNoZSA9IG9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5jbGFzcy0+c3lzYy0+c3lzY19vZmZzKTsKIAotCWlmICghKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX05PX0NBQ0hFKSkKKwlpZiAoIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX05PX0NBQ0hFKSkKIAkJb2gtPl9pbnRfZmxhZ3MgfD0gX0hXTU9EX1NZU0NPTkZJR19MT0FERUQ7CiAKIAlyZXR1cm4gMDsKQEAgLTEwNSwxNCArMTA0LDEzIEBACiAgKiBAdjogT0NQX1NZU0NPTkZJRyB2YWx1ZSB0byB3cml0ZQogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgotICogV3JpdGUgQHYgaW50byB0aGUgbW9kdWxlIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIsIGlmIGl0IGhhcyBvbmUuICBObwotICogcmV0dXJuIHZhbHVlLgorICogV3JpdGUgQHYgaW50byB0aGUgbW9kdWxlIGNsYXNzJyBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyLCBpZiBpdCBoYXMKKyAqIG9uZS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwogc3RhdGljIHZvaWQgX3dyaXRlX3N5c2NvbmZpZyh1MzIgdiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCWlmICghb2gtPnN5c2NvbmZpZykgewotCQlXQVJOKCFvaC0+c3lzY29uZmlnLCAib21hcF9od21vZDogJXM6IGNhbm5vdCB3cml0ZSAiCi0JCSAgICAgIk9DUF9TWVNDT05GSUc6IG5vdCBkZWZpbmVkIG9uIGh3bW9kXG4iLCBvaC0+bmFtZSk7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IGNhbm5vdCB3cml0ZSBPQ1BfU1lTQ09ORklHOiBub3QgZGVmaW5lZCBvbiBod21vZCdzIGNsYXNzXG4iLCBvaC0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyMCw3ICsxMTgsNyBAQAogCiAJaWYgKG9oLT5fc3lzY19jYWNoZSAhPSB2KSB7CiAJCW9oLT5fc3lzY19jYWNoZSA9IHY7Ci0JCW9tYXBfaHdtb2Rfd3JpdGVsKHYsIG9oLCBvaC0+c3lzY29uZmlnLT5zeXNjX29mZnMpOworCQlvbWFwX2h3bW9kX3dyaXRlbCh2LCBvaCwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX29mZnMpOwogCX0KIH0KIApAQCAtMTM3LDEyICsxMzUsMjMgQEAKIHN0YXRpYyBpbnQgX3NldF9tYXN0ZXJfc3RhbmRieW1vZGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBzdGFuZGJ5bW9kZSwKIAkJCQkgICB1MzIgKnYpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX01JRExFTU9ERSkpCisJdTMyIG1zdGFuZGJ5X21hc2s7CisJdTggbXN0YW5kYnlfc2hpZnQ7CisKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX01JRExFTU9ERSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKnYgJj0gflNZU0NfTUlETEVNT0RFX01BU0s7Ci0JKnYgfD0gX19mZnMoc3RhbmRieW1vZGUpIDw8IFNZU0NfTUlETEVNT0RFX1NISUZUOworCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltc3RhbmRieV9zaGlmdCA9IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMtPm1pZGxlX3NoaWZ0OworCW1zdGFuZGJ5X21hc2sgPSAoMHgzIDw8IG1zdGFuZGJ5X3NoaWZ0KTsKKworCSp2ICY9IH5tc3RhbmRieV9tYXNrOworCSp2IHw9IF9fZmZzKHN0YW5kYnltb2RlKSA8PCBtc3RhbmRieV9zaGlmdDsKIAogCXJldHVybiAwOwogfQpAQCAtMTU5LDEyICsxNjgsMjMgQEAKICAqLwogc3RhdGljIGludCBfc2V0X3NsYXZlX2lkbGVtb2RlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggaWRsZW1vZGUsIHUzMiAqdikKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU0lETEVNT0RFKSkKKwl1MzIgc2lkbGVfbWFzazsKKwl1OCBzaWRsZV9zaGlmdDsKKworCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU0lETEVNT0RFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqdiAmPSB+U1lTQ19TSURMRU1PREVfTUFTSzsKLQkqdiB8PSBfX2ZmcyhpZGxlbW9kZSkgPDwgU1lTQ19TSURMRU1PREVfU0hJRlQ7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzKSB7CisJCVdBUk4oMSwgIm9tYXBfaHdtb2Q6ICVzOiBvZmZzZXQgc3RydWN0IGZvciBzeXNjb25maWcgbm90IHByb3ZpZGVkIGluIGNsYXNzXG4iLCBvaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpZGxlX3NoaWZ0ID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+c2lkbGVfc2hpZnQ7CisJc2lkbGVfbWFzayA9ICgweDMgPDwgc2lkbGVfc2hpZnQpOworCisJKnYgJj0gfnNpZGxlX21hc2s7CisJKnYgfD0gX19mZnMoaWRsZW1vZGUpIDw8IHNpZGxlX3NoaWZ0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODIsMTIgKzIwMiwyMyBAQAogICovCiBzdGF0aWMgaW50IF9zZXRfY2xvY2thY3Rpdml0eShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IGNsb2NrYWN0LCB1MzIgKnYpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkpKQorCXUzMiBjbGthY3RfbWFzazsKKwl1OCAgY2xrYWN0X3NoaWZ0OworCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19DTE9DS0FDVElWSVRZKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqdiAmPSB+U1lTQ19DTE9DS0FDVElWSVRZX01BU0s7Ci0JKnYgfD0gY2xvY2thY3QgPDwgU1lTQ19DTE9DS0FDVElWSVRZX1NISUZUOworCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbGthY3Rfc2hpZnQgPSBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5jbGthY3Rfc2hpZnQ7CisJY2xrYWN0X21hc2sgPSAoMHgzIDw8IGNsa2FjdF9zaGlmdCk7CisKKwkqdiAmPSB+Y2xrYWN0X21hc2s7CisJKnYgfD0gY2xvY2thY3QgPDwgY2xrYWN0X3NoaWZ0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDIsMTEgKzIzMywyMCBAQAogICovCiBzdGF0aWMgaW50IF9zZXRfc29mdHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTMyICp2KQogewotCWlmICghb2gtPnN5c2NvbmZpZyB8fAotCSAgICAhKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TT0ZUUkVTRVQpKQorCXUzMiBzb2Z0cnN0X21hc2s7CisKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX1NPRlRSRVNFVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKnYgfD0gU1lTQ19TT0ZUUkVTRVRfTUFTSzsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IG9mZnNldCBzdHJ1Y3QgZm9yIHN5c2NvbmZpZyBub3QgcHJvdmlkZWQgaW4gY2xhc3NcbiIsIG9oLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc29mdHJzdF9tYXNrID0gKDB4MSA8PCBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5zcnN0X3NoaWZ0KTsKKworCSp2IHw9IHNvZnRyc3RfbWFzazsKIAogCXJldHVybiAwOwogfQpAQCAtMjI3LDEyICsyNjcsMjMgQEAKIHN0YXRpYyBpbnQgX3NldF9tb2R1bGVfYXV0b2lkbGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBhdXRvaWRsZSwKIAkJCQl1MzIgKnYpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0FVVE9JRExFKSkKKwl1MzIgYXV0b2lkbGVfbWFzazsKKwl1OCBhdXRvaWRsZV9zaGlmdDsKKworCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQVVUT0lETEUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSp2ICY9IH5TWVNDX0FVVE9JRExFX01BU0s7Ci0JKnYgfD0gYXV0b2lkbGUgPDwgU1lTQ19BVVRPSURMRV9TSElGVDsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IG9mZnNldCBzdHJ1Y3QgZm9yIHN5c2NvbmZpZyBub3QgcHJvdmlkZWQgaW4gY2xhc3NcbiIsIG9oLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXV0b2lkbGVfc2hpZnQgPSBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5hdXRvaWRsZV9zaGlmdDsKKwlhdXRvaWRsZV9tYXNrID0gKDB4MyA8PCBhdXRvaWRsZV9zaGlmdCk7CisKKwkqdiAmPSB+YXV0b2lkbGVfbWFzazsKKwkqdiB8PSBhdXRvaWRsZSA8PCBhdXRvaWRsZV9zaGlmdDsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ2LDE0ICsyOTcsMjEgQEAKICAqLwogc3RhdGljIGludCBfZW5hYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JdTMyIHY7CisJdTMyIHYsIHdha2V1cF9tYXNrOwogCi0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3YWtldXBfbWFzayA9ICgweDEgPDwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+ZW53a3VwX3NoaWZ0KTsKKwogCXYgPSBvaC0+X3N5c2NfY2FjaGU7Ci0JdiB8PSBTWVNDX0VOQVdBS0VVUF9NQVNLOworCXYgfD0gd2FrZXVwX21hc2s7CiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiAKIAkvKiBYWFggdGVzdCBwd3JkbV9nZXRfd2tlbiBmb3IgdGhpcyBod21vZCdzIHN1YnN5c3RlbSAqLwpAQCAtMjcyLDE0ICszMzAsMjEgQEAKICAqLwogc3RhdGljIGludCBfZGlzYWJsZV93YWtldXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCXUzMiB2OworCXUzMiB2LCB3YWtldXBfbWFzazsKIAotCWlmICghb2gtPnN5c2NvbmZpZyB8fAotCSAgICAhKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQorCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IG9mZnNldCBzdHJ1Y3QgZm9yIHN5c2NvbmZpZyBub3QgcHJvdmlkZWQgaW4gY2xhc3NcbiIsIG9oLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2FrZXVwX21hc2sgPSAoMHgxIDw8IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMtPmVud2t1cF9zaGlmdCk7CisKIAl2ID0gb2gtPl9zeXNjX2NhY2hlOwotCXYgJj0gflNZU0NfRU5BV0FLRVVQX01BU0s7CisJdiAmPSB+d2FrZXVwX21hc2s7CiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiAKIAkvKiBYWFggdGVzdCBwd3JkbV9nZXRfd2tlbiBmb3IgdGhpcyBod21vZCdzIHN1YnN5c3RlbSAqLwpAQCAtMjk5LDE1ICszNjQsMTQgQEAKICAqIGJlIGFjY2Vzc2VkIGJ5IHRoZSBJVkEsIHRoZXJlIHNob3VsZCBiZSBhIHNsZWVwZGVwIGJldHdlZW4gdGhlIElWQQogICogaW5pdGlhdG9yIGFuZCB0aGUgbW9kdWxlKS4gIE9ubHkgYXBwbGllcyB0byBtb2R1bGVzIGluIHNtYXJ0LWlkbGUKICAqIG1vZGUuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciBvciBwYXNzZXMgYWxvbmcKLSAqIHB3cmRtX2FkZF9zbGVlcGRlcCgpIHZhbHVlIHVwb24gc3VjY2Vzcy4KKyAqIGNsa2RtX2FkZF9zbGVlcGRlcCgpIHZhbHVlIHVwb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBfYWRkX2luaXRpYXRvcl9kZXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCBzdHJ1Y3Qgb21hcF9od21vZCAqaW5pdF9vaCkKIHsKIAlpZiAoIW9oLT5fY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwd3JkbV9hZGRfc2xlZXBkZXAob2gtPl9jbGstPmNsa2RtLT5wd3JkbS5wdHIsCi0JCQkJICBpbml0X29oLT5fY2xrLT5jbGtkbS0+cHdyZG0ucHRyKTsKKwlyZXR1cm4gY2xrZG1fYWRkX3NsZWVwZGVwKG9oLT5fY2xrLT5jbGtkbSwgaW5pdF9vaC0+X2Nsay0+Y2xrZG0pOwogfQogCiAvKioKQEAgLTMyMCwxNSArMzg0LDE0IEBACiAgKiBiZSBhY2Nlc3NlZCBieSB0aGUgSVZBLCB0aGVyZSBzaG91bGQgYmUgbm8gc2xlZXBkZXAgYmV0d2VlbiB0aGUgSVZBCiAgKiBpbml0aWF0b3IgYW5kIHRoZSBtb2R1bGUpLiAgT25seSBhcHBsaWVzIHRvIG1vZHVsZXMgaW4gc21hcnQtaWRsZQogICogbW9kZS4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yIG9yIHBhc3NlcyBhbG9uZwotICogcHdyZG1fYWRkX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgorICogY2xrZG1fZGVsX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50IF9kZWxfaW5pdGlhdG9yX2RlcChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHN0cnVjdCBvbWFwX2h3bW9kICppbml0X29oKQogewogCWlmICghb2gtPl9jbGspCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHB3cmRtX2RlbF9zbGVlcGRlcChvaC0+X2Nsay0+Y2xrZG0tPnB3cmRtLnB0ciwKLQkJCQkgIGluaXRfb2gtPl9jbGstPmNsa2RtLT5wd3JkbS5wdHIpOworCXJldHVybiBjbGtkbV9kZWxfc2xlZXBkZXAob2gtPl9jbGstPmNsa2RtLCBpbml0X29oLT5fY2xrLT5jbGtkbSk7CiB9CiAKIC8qKgpAQCAtMzQ0LDE4ICs0MDcsMTggQEAKIAlzdHJ1Y3QgY2xrICpjOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFvaC0+Y2xrZGV2X2Nvbl9pZCkKKwlpZiAoIW9oLT5tYWluX2NsaykKIAkJcmV0dXJuIDA7CiAKLQljID0gY2xrX2dldF9zeXMob2gtPmNsa2Rldl9kZXZfaWQsIG9oLT5jbGtkZXZfY29uX2lkKTsKLQlXQVJOKElTX0VSUihjKSwgIm9tYXBfaHdtb2Q6ICVzOiBjYW5ub3QgY2xrX2dldCBtYWluX2NsayAlcy4lc1xuIiwKLQkgICAgIG9oLT5uYW1lLCBvaC0+Y2xrZGV2X2Rldl9pZCwgb2gtPmNsa2Rldl9jb25faWQpOworCWMgPSBvbWFwX2Nsa19nZXRfYnlfbmFtZShvaC0+bWFpbl9jbGspOworCVdBUk4oSVNfRVJSKGMpLCAib21hcF9od21vZDogJXM6IGNhbm5vdCBjbGtfZ2V0IG1haW5fY2xrICVzXG4iLAorCSAgICAgb2gtPm5hbWUsIG9oLT5tYWluX2Nsayk7CiAJaWYgKElTX0VSUihjKSkKIAkJcmV0ID0gLUVJTlZBTDsKIAlvaC0+X2NsayA9IGM7CiAKIAlXQVJOKCFjLT5jbGtkbSwgIm9tYXBfaHdtb2Q6ICVzOiBtaXNzaW5nIGNsb2NrZG9tYWluIGZvciAlcy5cbiIsCi0JICAgICBvaC0+Y2xrZGV2X2Nvbl9pZCwgYy0+bmFtZSk7CisJICAgICBvaC0+bWFpbl9jbGssIGMtPm5hbWUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3OCwxMyArNDQxLDEyIEBACiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMCwgb3MgPSAqb2gtPnNsYXZlczsgaSA8IG9oLT5zbGF2ZXNfY250OyBpKyssIG9zKyspIHsKLQkJaWYgKCFvcy0+Y2xrZGV2X2Nvbl9pZCkKKwkJaWYgKCFvcy0+Y2xrKQogCQkJY29udGludWU7CiAKLQkJYyA9IGNsa19nZXRfc3lzKG9zLT5jbGtkZXZfZGV2X2lkLCBvcy0+Y2xrZGV2X2Nvbl9pZCk7CisJCWMgPSBvbWFwX2Nsa19nZXRfYnlfbmFtZShvcy0+Y2xrKTsKIAkJV0FSTihJU19FUlIoYyksICJvbWFwX2h3bW9kOiAlczogY2Fubm90IGNsa19nZXQgIgotCQkgICAgICJpbnRlcmZhY2VfY2xrICVzLiVzXG4iLCBvaC0+bmFtZSwKLQkJICAgICBvcy0+Y2xrZGV2X2Rldl9pZCwgb3MtPmNsa2Rldl9jb25faWQpOworCQkgICAgICJpbnRlcmZhY2VfY2xrICVzXG4iLCBvaC0+bmFtZSwgb3MtPmNsayk7CiAJCWlmIChJU19FUlIoYykpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQlvcy0+X2NsayA9IGM7CkBAIC00MDgsMTAgKzQ3MCw5IEBACiAJaW50IHJldCA9IDA7CiAKIAlmb3IgKGkgPSBvaC0+b3B0X2Nsa3NfY250LCBvYyA9IG9oLT5vcHRfY2xrczsgaSA+IDA7IGktLSwgb2MrKykgewotCQljID0gY2xrX2dldF9zeXMob2MtPmNsa2Rldl9kZXZfaWQsIG9jLT5jbGtkZXZfY29uX2lkKTsKKwkJYyA9IG9tYXBfY2xrX2dldF9ieV9uYW1lKG9jLT5jbGspOwogCQlXQVJOKElTX0VSUihjKSwgIm9tYXBfaHdtb2Q6ICVzOiBjYW5ub3QgY2xrX2dldCBvcHRfY2xrICIKLQkJICAgICAiJXMuJXNcbiIsIG9oLT5uYW1lLCBvYy0+Y2xrZGV2X2Rldl9pZCwKLQkJICAgICBvYy0+Y2xrZGV2X2Nvbl9pZCk7CisJCSAgICAgIiVzXG4iLCBvaC0+bmFtZSwgb2MtPmNsayk7CiAJCWlmIChJU19FUlIoYykpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQlvYy0+X2NsayA9IGM7CkBAIC01NjgsMjcgKzYyOSwyOCBAQAogICovCiBzdGF0aWMgdm9pZCBfc3lzY19lbmFibGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCXU4IGlkbGVtb2RlOworCXU4IGlkbGVtb2RlLCBzZjsKIAl1MzIgdjsKIAotCWlmICghb2gtPnN5c2NvbmZpZykKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYykKIAkJcmV0dXJuOwogCiAJdiA9IG9oLT5fc3lzY19jYWNoZTsKKwlzZiA9IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFnczsKIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU0lETEVNT0RFKSB7CisJaWYgKHNmICYgU1lTQ19IQVNfU0lETEVNT0RFKSB7CiAJCWlkbGVtb2RlID0gKG9oLT5mbGFncyAmIEhXTU9EX1NXU1VQX1NJRExFKSA/CiAJCQlIV01PRF9JRExFTU9ERV9OTyA6IEhXTU9EX0lETEVNT0RFX1NNQVJUOwogCQlfc2V0X3NsYXZlX2lkbGVtb2RlKG9oLCBpZGxlbW9kZSwgJnYpOwogCX0KIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfTUlETEVNT0RFKSB7CisJaWYgKHNmICYgU1lTQ19IQVNfTUlETEVNT0RFKSB7CiAJCWlkbGVtb2RlID0gKG9oLT5mbGFncyAmIEhXTU9EX1NXU1VQX01TVEFOREJZKSA/CiAJCQlIV01PRF9JRExFTU9ERV9OTyA6IEhXTU9EX0lETEVNT0RFX1NNQVJUOwogCQlfc2V0X21hc3Rlcl9zdGFuZGJ5bW9kZShvaCwgaWRsZW1vZGUsICZ2KTsKIAl9CiAKLQlpZiAob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0FVVE9JRExFKSB7CisJaWYgKHNmICYgU1lTQ19IQVNfQVVUT0lETEUpIHsKIAkJaWRsZW1vZGUgPSAob2gtPmZsYWdzICYgSFdNT0RfTk9fT0NQX0FVVE9JRExFKSA/CiAJCQkwIDogMTsKIAkJX3NldF9tb2R1bGVfYXV0b2lkbGUob2gsIGlkbGVtb2RlLCAmdik7CkBAIC02MDEsOSArNjYzLDkgQEAKIAkgKiBjYWxsaW5nIGludG8gdGhpcyBjb2RlLiAgQnV0IHRoaXMgbXVzdCB3YWl0IHVudGlsIHRoZQogCSAqIGNsb2NrIHN0cnVjdHVyZXMgYXJlIHRhZ2dlZCB3aXRoIG9tYXBfaHdtb2QgZW50cmllcwogCSAqLwotCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCAmJgotCSAgICBvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSkKLQkJX3NldF9jbG9ja2FjdGl2aXR5KG9oLCBvaC0+c3lzY29uZmlnLT5jbG9ja2FjdCwgJnYpOworCWlmICgob2gtPmZsYWdzICYgSFdNT0RfU0VUX0RFRkFVTFRfQ0xPQ0tBQ1QpICYmCisJICAgIChzZiAmIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkpKQorCQlfc2V0X2Nsb2NrYWN0aXZpdHkob2gsIG9oLT5jbGFzcy0+c3lzYy0+Y2xvY2thY3QsICZ2KTsKIAogCV93cml0ZV9zeXNjb25maWcodiwgb2gpOwogfQpAQCAtNjE5LDIxICs2ODEsMjIgQEAKICAqLwogc3RhdGljIHZvaWQgX3N5c2NfaWRsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JdTggaWRsZW1vZGU7CisJdTggaWRsZW1vZGUsIHNmOwogCXUzMiB2OwogCi0JaWYgKCFvaC0+c3lzY29uZmlnKQorCWlmICghb2gtPmNsYXNzLT5zeXNjKQogCQlyZXR1cm47CiAKIAl2ID0gb2gtPl9zeXNjX2NhY2hlOworCXNmID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzOwogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TSURMRU1PREUpIHsKKwlpZiAoc2YgJiBTWVNDX0hBU19TSURMRU1PREUpIHsKIAkJaWRsZW1vZGUgPSAob2gtPmZsYWdzICYgSFdNT0RfU1dTVVBfU0lETEUpID8KIAkJCUhXTU9EX0lETEVNT0RFX0ZPUkNFIDogSFdNT0RfSURMRU1PREVfU01BUlQ7CiAJCV9zZXRfc2xhdmVfaWRsZW1vZGUob2gsIGlkbGVtb2RlLCAmdik7CiAJfQogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19NSURMRU1PREUpIHsKKwlpZiAoc2YgJiBTWVNDX0hBU19NSURMRU1PREUpIHsKIAkJaWRsZW1vZGUgPSAob2gtPmZsYWdzICYgSFdNT0RfU1dTVVBfTVNUQU5EQlkpID8KIAkJCUhXTU9EX0lETEVNT0RFX0ZPUkNFIDogSFdNT0RfSURMRU1PREVfU01BUlQ7CiAJCV9zZXRfbWFzdGVyX3N0YW5kYnltb2RlKG9oLCBpZGxlbW9kZSwgJnYpOwpAQCAtNjUyLDE5ICs3MTUsMjEgQEAKIHN0YXRpYyB2b2lkIF9zeXNjX3NodXRkb3duKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAl1MzIgdjsKKwl1OCBzZjsKIAotCWlmICghb2gtPnN5c2NvbmZpZykKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYykKIAkJcmV0dXJuOwogCiAJdiA9IG9oLT5fc3lzY19jYWNoZTsKKwlzZiA9IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFnczsKIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU0lETEVNT0RFKQorCWlmIChzZiAmIFNZU0NfSEFTX1NJRExFTU9ERSkKIAkJX3NldF9zbGF2ZV9pZGxlbW9kZShvaCwgSFdNT0RfSURMRU1PREVfRk9SQ0UsICZ2KTsKIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfTUlETEVNT0RFKQorCWlmIChzZiAmIFNZU0NfSEFTX01JRExFTU9ERSkKIAkJX3NldF9tYXN0ZXJfc3RhbmRieW1vZGUob2gsIEhXTU9EX0lETEVNT0RFX0ZPUkNFLCAmdik7CiAKLQlpZiAob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0FVVE9JRExFKQorCWlmIChzZiAmIFNZU0NfSEFTX0FVVE9JRExFKQogCQlfc2V0X21vZHVsZV9hdXRvaWRsZShvaCwgMSwgJnYpOwogCiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CkBAIC03ODEsOSArODQ2LDkgQEAKIAl1MzIgciwgdjsKIAlpbnQgYyA9IDA7CiAKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU09GVFJFU0VUKSB8fAotCSAgICAob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU1NfTUlTU0lORykpCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TT0ZUUkVTRVQpIHx8CisJICAgIChvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNTX01JU1NJTkcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGNsb2NrcyBtdXN0IGJlIG9uIGZvciB0aGlzIG9wZXJhdGlvbiAqLwpAQCAtODAxLDcgKzg2Niw3IEBACiAJCXJldHVybiByOwogCV93cml0ZV9zeXNjb25maWcodiwgb2gpOwogCi0Jb21hcF90ZXN0X3RpbWVvdXQoKG9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5zeXNjb25maWctPnN5c3Nfb2ZmcykgJgorCW9tYXBfdGVzdF90aW1lb3V0KChvbWFwX2h3bW9kX3JlYWRsKG9oLCBvaC0+Y2xhc3MtPnN5c2MtPnN5c3Nfb2ZmcykgJgogCQkJICAgU1lTU19SRVNFVERPTkVfTUFTSyksCiAJCQkgIE1BWF9NT0RVTEVfUkVTRVRfV0FJVCwgYyk7CiAKQEAgLTg0Nyw3ICs5MTIsNyBAQAogCV9hZGRfaW5pdGlhdG9yX2RlcChvaCwgbXB1X29oKTsKIAlfZW5hYmxlX2Nsb2NrcyhvaCk7CiAKLQlpZiAob2gtPnN5c2NvbmZpZykgeworCWlmIChvaC0+Y2xhc3MtPnN5c2MpIHsKIAkJaWYgKCEob2gtPl9pbnRfZmxhZ3MgJiBfSFdNT0RfU1lTQ09ORklHX0xPQURFRCkpCiAJCQlfdXBkYXRlX3N5c2NfY2FjaGUob2gpOwogCQlfc3lzY19lbmFibGUob2gpOwpAQCAtODc4LDcgKzk0Myw3IEBACiAKIAlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IGlkbGluZ1xuIiwgb2gtPm5hbWUpOwogCi0JaWYgKG9oLT5zeXNjb25maWcpCisJaWYgKG9oLT5jbGFzcy0+c3lzYykKIAkJX3N5c2NfaWRsZShvaCk7CiAJX2RlbF9pbml0aWF0b3JfZGVwKG9oLCBtcHVfb2gpOwogCV9kaXNhYmxlX2Nsb2NrcyhvaCk7CkBAIC05MDgsNyArOTczLDcgQEAKIAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogZGlzYWJsaW5nXG4iLCBvaC0+bmFtZSk7CiAKLQlpZiAob2gtPnN5c2NvbmZpZykKKwlpZiAob2gtPmNsYXNzLT5zeXNjKQogCQlfc3lzY19zaHV0ZG93bihvaCk7CiAJX2RlbF9pbml0aWF0b3JfZGVwKG9oLCBtcHVfb2gpOwogCS8qIFhYWCB3aGF0IGFib3V0IHRoZSBvdGhlciBzeXN0ZW0gaW5pdGlhdG9ycyBoZXJlPyBETUEsIHRlc2xhLCBkMmQgKi8KQEAgLTk2OCw3ICsxMDMzLDcgQEAKIAkJICogX2VuYWJsZSgpIGZ1bmN0aW9uIHNob3VsZCBiZSBzcGxpdCB0byBhdm9pZCB0aGUKIAkJICogcmV3cml0ZSBvZiB0aGUgT0NQX1NZU0NPTkZJRyByZWdpc3Rlci4KIAkJICovCi0JCWlmIChvaC0+c3lzY29uZmlnKSB7CisJCWlmIChvaC0+Y2xhc3MtPnN5c2MpIHsKIAkJCV91cGRhdGVfc3lzY19jYWNoZShvaCk7CiAJCQlfc3lzY19lbmFibGUob2gpOwogCQl9CkBAIC05OTQsMTMgKzEwNTksMzMgQEAKIAlfX3Jhd193cml0ZWwodiwgb2gtPl9ydF92YSArIHJlZ19vZmZzKTsKIH0KIAoraW50IG9tYXBfaHdtb2Rfc2V0X3NsYXZlX2lkbGVtb2RlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggaWRsZW1vZGUpCit7CisJdTMyIHY7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIW9oKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXYgPSBvaC0+X3N5c2NfY2FjaGU7CisKKwlyZXR2YWwgPSBfc2V0X3NsYXZlX2lkbGVtb2RlKG9oLCBpZGxlbW9kZSwgJnYpOworCWlmICghcmV0dmFsKQorCQlfd3JpdGVfc3lzY29uZmlnKHYsIG9oKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKIC8qKgogICogb21hcF9od21vZF9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgc3RydWN0IG9tYXBfaHdtb2QKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKLSAqIFJlZ2lzdGVycyB0aGUgb21hcF9od21vZCBAb2guICBSZXR1cm5zIC1FRVhJU1QgaWYgYW4gb21hcF9od21vZCBhbHJlYWR5Ci0gKiBoYXMgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZSBzYW1lIG5hbWU7IC1FSU5WQUwgaWYgdGhlIG9tYXBfaHdtb2QgaXMgaW4gdGhlCi0gKiB3cm9uZyBzdGF0ZSwgb3IgMCBvbiBzdWNjZXNzLgorICogUmVnaXN0ZXJzIHRoZSBvbWFwX2h3bW9kIEBvaC4gIFJldHVybnMgLUVFWElTVCBpZiBhbiBvbWFwX2h3bW9kCisgKiBhbHJlYWR5IGhhcyBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlIHNhbWUgbmFtZTsgLUVJTlZBTCBpZiB0aGUKKyAqIG9tYXBfaHdtb2QgaXMgaW4gdGhlIHdyb25nIHN0YXRlLCBpZiBAb2ggaXMgTlVMTCwgaWYgdGhlCisgKiBvbWFwX2h3bW9kJ3MgY2xhc3MgZmllbGQgaXMgTlVMTDsgaWYgdGhlIG9tYXBfaHdtb2QgaXMgbWlzc2luZyBhCisgKiBuYW1lLCBvciBpZiB0aGUgb21hcF9od21vZCdzIGNsYXNzIGlzIG1pc3NpbmcgYSBuYW1lOyBvciAwIHVwb24KKyAqIHN1Y2Nlc3MuCiAgKgogICogWFhYIFRoZSBkYXRhIHNob3VsZCBiZSBjb3BpZWQgaW50byBib290bWVtLCBzbyB0aGUgb3JpZ2luYWwgZGF0YQogICogc2hvdWxkIGJlIG1hcmtlZCBfX2luaXRkYXRhIGFuZCBmcmVlZCBhZnRlciBpbml0LiAgVGhpcyB3b3VsZCBhbGxvdwpAQCAtMTAxMiw3ICsxMDk3LDggQEAKIHsKIAlpbnQgcmV0LCBtc19pZDsKIAotCWlmICghb2ggfHwgKG9oLT5fc3RhdGUgIT0gX0hXTU9EX1NUQVRFX1VOS05PV04pKQorCWlmICghb2ggfHwgIW9oLT5uYW1lIHx8ICFvaC0+Y2xhc3MgfHwgIW9oLT5jbGFzcy0+bmFtZSB8fAorCSAgICAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfVU5LTk9XTikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CkBAIC0xMjg1LDcgKzEzNzEsNyBAQAogewogCUJVR19PTighb2gpOwogCi0JaWYgKCFvaC0+c3lzY29uZmlnIHx8ICFvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzKSB7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwgIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncykgewogCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXM6IE9DUCBiYXJyaWVyIGltcG9zc2libGUgZHVlIHRvICIKIAkJICAgICAgImRldmljZSBjb25maWd1cmF0aW9uXG4iLCBvaC0+bmFtZSk7CiAJCXJldHVybjsKQEAgLTEyOTUsNyArMTM4MSw3IEBACiAJICogRm9yY2VzIHBvc3RlZCB3cml0ZXMgdG8gY29tcGxldGUgb24gdGhlIE9DUCB0aHJlYWQgaGFuZGxpbmcKIAkgKiByZWdpc3RlciB3cml0ZXMKIAkgKi8KLQlvbWFwX2h3bW9kX3JlYWRsKG9oLCBvaC0+c3lzY29uZmlnLT5zeXNjX29mZnMpOworCW9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5jbGFzcy0+c3lzYy0+c3lzY19vZmZzKTsKIH0KIAogLyoqCkBAIC0xNDg4LDggKzE1NzQsOCBAQAogICovCiBpbnQgb21hcF9od21vZF9lbmFibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CkBAIC0xNTEzLDggKzE1OTksOCBAQAogICovCiBpbnQgb21hcF9od21vZF9kaXNhYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJm9tYXBfaHdtb2RfbXV0ZXgpOwpAQCAtMTUyMywzICsxNjA5LDUyIEBACiAKIAlyZXR1cm4gMDsKIH0KKworLyoqCisgKiBvbWFwX2h3bW9kX2Zvcl9lYWNoX2J5X2NsYXNzIC0gY2FsbCBAZm4gZm9yIGVhY2ggaHdtb2Qgb2YgY2xhc3MgQGNsYXNzbmFtZQorICogQGNsYXNzbmFtZTogc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgbmFtZSB0byBzZWFyY2ggZm9yCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdG8gY2FsbCBmb3IgZWFjaCBod21vZCBpbiBjbGFzcyBAY2xhc3NuYW1lCisgKiBAdXNlcjogYXJiaXRyYXJ5IGNvbnRleHQgZGF0YSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEZvciBlYWNoIG9tYXBfaHdtb2Qgb2YgY2xhc3MgQGNsYXNzbmFtZSwgY2FsbCBAZm4uICBUYWtlcworICogb21hcF9od21vZF9tdXRleCB0byBwcmV2ZW50IHRoZSBod21vZCBsaXN0IGZyb20gY2hhbmdpbmcgZHVyaW5nIHRoZQorICogaXRlcmF0aW9uLiAgSWYgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAqIHplcm8sIHRoZSBpdGVyYXRvciBpcyB0ZXJtaW5hdGVkLCBhbmQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgcmV0dXJuCisgKiB2YWx1ZSBpcyBwYXNzZWQgYmFjayB0byB0aGUgY2FsbGVyLiAgUmV0dXJucyAwIHVwb24gc3VjY2VzcywgLUVJTlZBTAorICogaWYgQGNsYXNzbmFtZSBvciBAZm4gYXJlIE5VTEwsIG9yIHBhc3NlcyBiYWNrIHRoZSBlcnJvciBjb2RlIGZyb20gQGZuLgorICovCitpbnQgb21hcF9od21vZF9mb3JfZWFjaF9ieV9jbGFzcyhjb25zdCBjaGFyICpjbGFzc25hbWUsCisJCQkJIGludCAoKmZuKShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCisJCQkJCSAgIHZvaWQgKnVzZXIpLAorCQkJCSB2b2lkICp1c2VyKQoreworCXN0cnVjdCBvbWFwX2h3bW9kICp0ZW1wX29oOworCWludCByZXQgPSAwOworCisJaWYgKCFjbGFzc25hbWUgfHwgIWZuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogbG9va2luZyBmb3IgbW9kdWxlcyBvZiBjbGFzcyAlc1xuIiwKKwkJIF9fZnVuY19fLCBjbGFzc25hbWUpOworCisJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfb2gsICZvbWFwX2h3bW9kX2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAodGVtcF9vaC0+Y2xhc3MtPm5hbWUsIGNsYXNzbmFtZSkpIHsKKwkJCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogJXM6IGNhbGxpbmcgY2FsbGJhY2sgZm5cbiIsCisJCQkJIF9fZnVuY19fLCB0ZW1wX29oLT5uYW1lKTsKKwkJCXJldCA9ICgqZm4pKHRlbXBfb2gsIHVzZXIpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7CisKKwlpZiAocmV0KQorCQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IGl0ZXJhdG9yIHRlcm1pbmF0ZWQgZWFybHk6ICVkXG4iLAorCQkJIF9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Y2ExYjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogb21hcF9od21vZF8yNDIwLmggLSBoYXJkd2FyZSBtb2R1bGVzIHByZXNlbnQgb24gdGhlIE9NQVAyNDIwIGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBYWFggaGFuZGxlIGNyb3NzYmFyL3NoYXJlZCBsaW5rIGRpZmZlcmVuY2UgZm9yIEwzPwotICoKLSAqLwotI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRDI0MjBfSAotI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRDI0MjBfSAotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLQotI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kbWEuaD4KLQotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21wdV9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF9jb3JlX2h3bW9kOwotCi0vKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sM19fbDRfY29yZSA9IHsKLQkubWFzdGVyCT0gJm9tYXAyNDIwX2wzX2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbXB1X19sMyA9IHsKLQkubWFzdGVyID0gJm9tYXAyNDIwX21wdV9od21vZCwKLQkuc2xhdmUJPSAmb21hcDI0MjBfbDNfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2wzX3NsYXZlc1tdID0gewotCSZvbWFwMjQyMF9tcHVfX2wzLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfbWFzdGVyc1tdID0gewotCSZvbWFwMjQyMF9sM19fbDRfY29yZSwKLX07Ci0KLS8qIEwzICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDNfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImwzX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAyNDIwX2wzX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sM19tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDIwX2wzX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDNfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF93a3VwX2h3bW9kOwotCi0vKiBMNF9DT1JFIC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAgPSB7Ci0JLm1hc3Rlcgk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMjQyMF9sNF93a3VwX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF9jb3JlX3NsYXZlc1tdID0gewotCSZvbWFwMjQyMF9sM19fbDRfY29yZSwKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDRfY29yZV9tYXN0ZXJzW10gPSB7Ci0JJm9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAsCi19OwotCi0vKiBMNCBDT1JFICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfY29yZV9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfY29yZV9od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDRfY29yZV9zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X2NvcmVfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKLX07Ci0KLS8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF93a3VwX3NsYXZlc1tdID0gewotCSZvbWFwMjQyMF9sNF9jb3JlX19sNF93a3VwLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF93a3VwX21hc3RlcnNbXSA9IHsKLX07Ci0KLS8qIEw0IFdLVVAgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF93a3VwX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF93a3VwX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAyNDIwX2w0X3drdXBfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X3drdXBfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMjQyMF9sNF93a3VwX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDRfd2t1cF9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIE1QVSBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX21wdV9tYXN0ZXJzW10gPSB7Ci0JJm9tYXAyNDIwX21wdV9fbDMsCi19OwotCi0vKiBNUFUgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tcHVfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gIm1wdV9od21vZCIsCi0JLmNsa2Rldl9kZXZfaWQJPSBOVUxMLAotCS5jbGtkZXZfY29uX2lkCT0gIm1wdV9jayIsCi0JLm1hc3RlcnMJPSBvbWFwMjQyMF9tcHVfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX21wdV9tYXN0ZXJzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCi19OwotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcDI0MjBfaHdtb2RzW10gPSB7Ci0JJm9tYXAyNDIwX2wzX2h3bW9kLAotCSZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAotCSZvbWFwMjQyMF9sNF93a3VwX2h3bW9kLAotCSZvbWFwMjQyMF9tcHVfaHdtb2QsCi0JTlVMTCwKLX07Ci0KLSNlbHNlCi0jIGRlZmluZSBvbWFwMjQyMF9od21vZHMJCTAKLSNlbmRpZgotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3ZWUyNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIG9tYXBfaHdtb2RfMjQyMF9kYXRhLmMgLSBoYXJkd2FyZSBtb2R1bGVzIHByZXNlbnQgb24gdGhlIE9NQVAyNDIwIGNoaXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFhYWCBoYW5kbGUgY3Jvc3NiYXIvc2hhcmVkIGxpbmsgZGlmZmVyZW5jZSBmb3IgTDM/CisgKiBYWFggdGhlc2Ugc2hvdWxkIGJlIG1hcmtlZCBpbml0ZGF0YSBmb3IgbXVsdGktT01BUCBrZXJuZWxzCisgKi8KKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisKKyNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCisKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisKKy8qCisgKiBPTUFQMjQyMCBoYXJkd2FyZSBtb2R1bGUgaW50ZWdyYXRpb24gZGF0YQorICoKKyAqIEFMbCBvZiB0aGUgZGF0YSBpbiB0aGlzIHNlY3Rpb24gc2hvdWxkIGJlIGF1dG9nZW5lcmF0YWJsZSBmcm9tIHRoZQorICogVEkgaGFyZHdhcmUgZGF0YWJhc2Ugb3Igb3RoZXIgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24uICBEYXRhIHRoYXQKKyAqIGlzIGRyaXZlci1zcGVjaWZpYyBvciBkcml2ZXIta2VybmVsIGludGVncmF0aW9uLXNwZWNpZmljIGJlbG9uZ3MKKyAqIGVsc2V3aGVyZS4KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbXB1X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2wzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X2NvcmVfaHdtb2Q7CisKKy8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2wzX19sNF9jb3JlID0geworCS5tYXN0ZXIJPSAmb21hcDI0MjBfbDNfaHdtb2QsCisJLnNsYXZlCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogTVBVIC0+IEwzIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9tcHVfX2wzID0geworCS5tYXN0ZXIgPSAmb21hcDI0MjBfbXB1X2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwMjQyMF9sM19od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX21wdV9fbDMsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sM19tYXN0ZXJzW10gPSB7CisJJm9tYXAyNDIwX2wzX19sNF9jb3JlLAorfTsKKworLyogTDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19od21vZCA9IHsKKwkubmFtZQkJPSAibDNfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDNfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwMjQyMF9sM19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDNfbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9sM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2wzX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfd2t1cF9od21vZDsKKworLyogTDRfQ09SRSAtPiBMNF9XS1VQIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX19sNF93a3VwID0geworCS5tYXN0ZXIJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDRfY29yZV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDNfX2w0X2NvcmUsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X2NvcmVfbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTDQgQ09SRSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X2NvcmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X2NvcmVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDRfY29yZV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X2NvcmVfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF93a3VwX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF93a3VwX21hc3RlcnNbXSA9IHsKK307CisKKy8qIEw0IFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF93a3VwX2h3bW9kID0geworCS5uYW1lCQk9ICJsNF93a3VwX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDI0MjBfbDRfd2t1cF9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDRfd2t1cF9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2w0X3drdXBfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF93a3VwX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbXB1X21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MjBfbXB1X19sMywKK307CisKKy8qIE1QVSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21wdV9od21vZCA9IHsKKwkubmFtZQkJPSAibXB1X2h3bW9kIiwKKwkuY2xhc3MJCT0gJm1wdV9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAibXB1X2NrIiwKKwkubWFzdGVycwk9IG9tYXAyNDIwX21wdV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbXB1X21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQyMF9od21vZHNbXSA9IHsKKwkmb21hcDI0MjBfbDNfaHdtb2QsCisJJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJJm9tYXAyNDIwX2w0X3drdXBfaHdtb2QsCisJJm9tYXAyNDIwX21wdV9od21vZCwKKwlOVUxMLAorfTsKKworaW50IF9faW5pdCBvbWFwMjQyMF9od21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfaHdtb2RfaW5pdChvbWFwMjQyMF9od21vZHMpOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWEyMDhiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIG9tYXBfaHdtb2RfMjQzMC5oIC0gaGFyZHdhcmUgbW9kdWxlcyBwcmVzZW50IG9uIHRoZSBPTUFQMjQzMCBjaGlwcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogWFhYIGhhbmRsZSBjcm9zc2Jhci9zaGFyZWQgbGluayBkaWZmZXJlbmNlIGZvciBMMz8KLSAqCi0gKi8KLSNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9NQUNIX09NQVBfSFdNT0QyNDMwX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9NQUNIX09NQVBfSFdNT0QyNDMwX0gKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCi0KLSNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvZG1hLmg+Ci0KLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tcHVfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfY29yZV9od21vZDsKLQotLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDNfX2w0X2NvcmUgPSB7Ci0JLm1hc3Rlcgk9ICZvbWFwMjQzMF9sM19od21vZCwKLQkuc2xhdmUJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX21wdV9fbDMgPSB7Ci0JLm1hc3RlciA9ICZvbWFwMjQzMF9tcHVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAyNDMwX2wzX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sM19zbGF2ZXNbXSA9IHsKLQkmb21hcDI0MzBfbXB1X19sMywKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2wzX21hc3RlcnNbXSA9IHsKLQkmb21hcDI0MzBfbDNfX2w0X2NvcmUsCi19OwotCi0vKiBMMyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2wzX2h3bW9kID0gewotCS5uYW1lCQk9ICJsM19od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMjQzMF9sM19tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDNfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMjQzMF9sM19zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2wzX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfd2t1cF9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tbWMxX2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21tYzJfaHdtb2Q7Ci0KLS8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbDRfd2t1cCA9IHsKLQkubWFzdGVyCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAyNDMwX2w0X3drdXBfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X2NvcmVfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDMwX2wzX19sNF9jb3JlLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF9jb3JlX21hc3RlcnNbXSA9IHsKLQkmb21hcDI0MzBfbDRfY29yZV9fbDRfd2t1cCwKLX07Ci0KLS8qIEw0IENPUkUgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF9jb3JlX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF9jb3JlX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMjQzMF9sNF9jb3JlX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfY29yZV9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X3drdXBfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDMwX2w0X2NvcmVfX2w0X3drdXAsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X3drdXBfbWFzdGVyc1tdID0gewotfTsKLQotLyogTDQgV0tVUCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X3drdXBfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDMwX2w0X3drdXBfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF93a3VwX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbXB1X21hc3RlcnNbXSA9IHsKLQkmb21hcDI0MzBfbXB1X19sMywKLX07Ci0KLS8qIE1QVSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21wdV9od21vZCA9IHsKLQkubmFtZQkJPSAibXB1X2h3bW9kIiwKLQkuY2xrZGV2X2Rldl9pZAk9IE5VTEwsCi0JLmNsa2Rldl9jb25faWQJPSAibXB1X2NrIiwKLQkubWFzdGVycwk9IG9tYXAyNDMwX21wdV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbXB1X21hc3RlcnMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQzMF9od21vZHNbXSA9IHsKLQkmb21hcDI0MzBfbDNfaHdtb2QsCi0JJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCi0JJm9tYXAyNDMwX2w0X3drdXBfaHdtb2QsCi0JJm9tYXAyNDMwX21wdV9od21vZCwKLQlOVUxMLAotfTsKLQotI2Vsc2UKLSMgZGVmaW5lIG9tYXAyNDMwX2h3bW9kcwkJMAotI2VuZGlmCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDFiZDgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogb21hcF9od21vZF8yNDMwX2RhdGEuYyAtIGhhcmR3YXJlIG1vZHVsZXMgcHJlc2VudCBvbiB0aGUgT01BUDI0MzAgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWFhYIGhhbmRsZSBjcm9zc2Jhci9zaGFyZWQgbGluayBkaWZmZXJlbmNlIGZvciBMMz8KKyAqIFhYWCB0aGVzZSBzaG91bGQgYmUgbWFya2VkIGluaXRkYXRhIGZvciBtdWx0aS1PTUFQIGtlcm5lbHMKKyAqLworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKworI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKKworI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKworLyoKKyAqIE9NQVAyNDMwIGhhcmR3YXJlIG1vZHVsZSBpbnRlZ3JhdGlvbiBkYXRhCisgKgorICogQUxsIG9mIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbiBzaG91bGQgYmUgYXV0b2dlbmVyYXRhYmxlIGZyb20gdGhlCisgKiBUSSBoYXJkd2FyZSBkYXRhYmFzZSBvciBvdGhlciB0ZWNobmljYWwgZG9jdW1lbnRhdGlvbi4gIERhdGEgdGhhdAorICogaXMgZHJpdmVyLXNwZWNpZmljIG9yIGRyaXZlci1rZXJuZWwgaW50ZWdyYXRpb24tc3BlY2lmaWMgYmVsb25ncworICogZWxzZXdoZXJlLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tcHVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfY29yZV9od21vZDsKKworLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDNfX2w0X2NvcmUgPSB7CisJLm1hc3Rlcgk9ICZvbWFwMjQzMF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX21wdV9fbDMgPSB7CisJLm1hc3RlciA9ICZvbWFwMjQzMF9tcHVfaHdtb2QsCisJLnNsYXZlCT0gJm9tYXAyNDMwX2wzX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVLAorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sM19zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbXB1X19sMywKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2wzX21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MzBfbDNfX2w0X2NvcmUsCit9OworCisvKiBMMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2wzX2h3bW9kID0geworCS5uYW1lCQk9ICJsM19od21vZCIsCisJLmNsYXNzCQk9ICZsM19od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDMwX2wzX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sM19tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX2wzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF93a3VwX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21tYzFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMl9od21vZDsKKworLyogTDRfQ09SRSAtPiBMNF9XS1VQIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwID0geworCS5tYXN0ZXIJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfY29yZV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDNfX2w0X2NvcmUsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X2NvcmVfbWFzdGVyc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTDQgQ09SRSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X2NvcmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X2NvcmVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwMjQzMF9sNF9jb3JlX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF9jb3JlX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbDRfY29yZV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X2NvcmVfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF93a3VwX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF93a3VwX21hc3RlcnNbXSA9IHsKK307CisKKy8qIEw0IFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF93a3VwX2h3bW9kID0geworCS5uYW1lCQk9ICJsNF93a3VwX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX2w0X3drdXBfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF93a3VwX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbXB1X21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MzBfbXB1X19sMywKK307CisKKy8qIE1QVSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21wdV9od21vZCA9IHsKKwkubmFtZQkJPSAibXB1X2h3bW9kIiwKKwkuY2xhc3MJCT0gJm1wdV9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAibXB1X2NrIiwKKwkubWFzdGVycwk9IG9tYXAyNDMwX21wdV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbXB1X21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQzMF9od21vZHNbXSA9IHsKKwkmb21hcDI0MzBfbDNfaHdtb2QsCisJJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJJm9tYXAyNDMwX2w0X3drdXBfaHdtb2QsCisJJm9tYXAyNDMwX21wdV9od21vZCwKKwlOVUxMLAorfTsKKworaW50IF9faW5pdCBvbWFwMjQzMF9od21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfaHdtb2RfaW5pdChvbWFwMjQzMF9od21vZHMpOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzR4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjA3NmI5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zNHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIG9tYXBfaHdtb2RfMzR4eC5oIC0gaGFyZHdhcmUgbW9kdWxlcyBwcmVzZW50IG9uIHRoZSBPTUFQMzR4eCBjaGlwcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0jaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9PTUFQX0hXTU9EMzRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9PTUFQX0hXTU9EMzRYWF9ICi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAotCi0jaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L2RtYS5oPgotCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbXB1X2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2wzX2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2w0X2NvcmVfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbDRfcGVyX2h3bW9kOwotCi0vKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMzR4eF9sM19fbDRfY29yZSA9IHsKLQkubWFzdGVyCT0gJm9tYXAzNHh4X2wzX2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMzR4eF9sNF9jb3JlX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIEwzIC0+IEw0X1BFUiBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDM0eHhfbDNfX2w0X3BlciA9IHsKLQkubWFzdGVyID0gJm9tYXAzNHh4X2wzX2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMzR4eF9sNF9wZXJfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTVBVIC0+IEwzIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMzR4eF9tcHVfX2wzID0gewotCS5tYXN0ZXIgPSAmb21hcDM0eHhfbXB1X2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMzR4eF9sM19od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSwKLX07Ci0KLS8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDNfc2xhdmVzW10gPSB7Ci0JJm9tYXAzNHh4X21wdV9fbDMsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzR4eF9sM19tYXN0ZXJzW10gPSB7Ci0JJm9tYXAzNHh4X2wzX19sNF9jb3JlLAotCSZvbWFwMzR4eF9sM19fbDRfcGVyLAotfTsKLQotLyogTDMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9sM19od21vZCA9IHsKLQkubmFtZQkJPSAibDNfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDM0eHhfbDNfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2wzX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDM0eHhfbDNfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9sM19zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2w0X3drdXBfaHdtb2Q7Ci0KLS8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDM0eHhfbDRfY29yZV9fbDRfd2t1cCA9IHsKLQkubWFzdGVyCT0gJm9tYXAzNHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAzNHh4X2w0X3drdXBfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2w0X2NvcmVfc2xhdmVzW10gPSB7Ci0JJm9tYXAzNHh4X2wzX19sNF9jb3JlLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzR4eF9sNF9jb3JlX21hc3RlcnNbXSA9IHsKLQkmb21hcDM0eHhfbDRfY29yZV9fbDRfd2t1cCwKLX07Ci0KLS8qIEw0IENPUkUgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9sNF9jb3JlX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF9jb3JlX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAzNHh4X2w0X2NvcmVfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2w0X2NvcmVfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMzR4eF9sNF9jb3JlX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDRfY29yZV9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfUEVSIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDRfcGVyX3NsYXZlc1tdID0gewotCSZvbWFwMzR4eF9sM19fbDRfcGVyLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1BFUiBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2w0X3Blcl9tYXN0ZXJzW10gPSB7Ci19OwotCi0vKiBMNCBQRVIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9sNF9wZXJfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X3Blcl9od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMzR4eF9sNF9wZXJfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2w0X3Blcl9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAzNHh4X2w0X3Blcl9zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2w0X3Blcl9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2w0X3drdXBfc2xhdmVzW10gPSB7Ci0JJm9tYXAzNHh4X2w0X2NvcmVfX2w0X3drdXAsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2w0X3drdXBfbWFzdGVyc1tdID0gewotfTsKLQotLyogTDQgV0tVUCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2w0X3drdXBfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDM0eHhfbDRfd2t1cF9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDRfd2t1cF9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAzNHh4X2w0X3drdXBfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9sNF93a3VwX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbXB1X21hc3RlcnNbXSA9IHsKLQkmb21hcDM0eHhfbXB1X19sMywKLX07Ci0KLS8qIE1QVSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X21wdV9od21vZCA9IHsKLQkubmFtZQkJPSAibXB1X2h3bW9kIiwKLQkuY2xrZGV2X2Rldl9pZAk9IE5VTEwsCi0JLmNsa2Rldl9jb25faWQJPSAiYXJtX2ZjayIsCi0JLm1hc3RlcnMJPSBvbWFwMzR4eF9tcHVfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21wdV9tYXN0ZXJzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcDM0eHhfaHdtb2RzW10gPSB7Ci0JJm9tYXAzNHh4X2wzX2h3bW9kLAotCSZvbWFwMzR4eF9sNF9jb3JlX2h3bW9kLAotCSZvbWFwMzR4eF9sNF9wZXJfaHdtb2QsCi0JJm9tYXAzNHh4X2w0X3drdXBfaHdtb2QsCi0JJm9tYXAzNHh4X21wdV9od21vZCwKLQlOVUxMLAotfTsKLQotI2Vsc2UKLSMgZGVmaW5lIG9tYXAzNHh4X2h3bW9kcwkJMAotI2VuZGlmCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDYwODQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogb21hcF9od21vZF8zeHh4X2RhdGEuYyAtIGhhcmR3YXJlIG1vZHVsZXMgcHJlc2VudCBvbiB0aGUgT01BUDN4eHggY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGRhdGEgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBjb21wbGV0ZWx5IGF1dG9nZW5lcmF0YWJsZSBmcm9tCisgKiB0aGUgVEkgaGFyZHdhcmUgZGF0YWJhc2Ugb3Igb3RoZXIgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24uCisgKgorICogWFhYIHRoZXNlIHNob3VsZCBiZSBtYXJrZWQgaW5pdGRhdGEgZm9yIG11bHRpLU9NQVAga2VybmVscworICovCisjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCisjaW5jbHVkZSAib21hcF9od21vZF9jb21tb25fZGF0YS5oIgorCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorCisvKgorICogT01BUDN4eHggaGFyZHdhcmUgbW9kdWxlIGludGVncmF0aW9uIGRhdGEKKyAqCisgKiBBTGwgb2YgdGhlIGRhdGEgaW4gdGhpcyBzZWN0aW9uIHNob3VsZCBiZSBhdXRvZ2VuZXJhdGFibGUgZnJvbSB0aGUKKyAqIFRJIGhhcmR3YXJlIGRhdGFiYXNlIG9yIG90aGVyIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLiAgRGF0YSB0aGF0CisgKiBpcyBkcml2ZXItc3BlY2lmaWMgb3IgZHJpdmVyLWtlcm5lbCBpbnRlZ3JhdGlvbi1zcGVjaWZpYyBiZWxvbmdzCisgKiBlbHNld2hlcmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21wdV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF9jb3JlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X3Blcl9od21vZDsKKworLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDNfX2w0X2NvcmUgPSB7CisJLm1hc3Rlcgk9ICZvbWFwM3h4eF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBMMyAtPiBMNF9QRVIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2wzX19sNF9wZXIgPSB7CisJLm1hc3RlciA9ICZvbWFwM3h4eF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbXB1X19sMyA9IHsKKwkubWFzdGVyID0gJm9tYXAzeHh4X21wdV9od21vZCwKKwkuc2xhdmUJPSAmb21hcDN4eHhfbDNfaHdtb2QsCisJLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2wzX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9tcHVfX2wzLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDNfbWFzdGVyc1tdID0geworCSZvbWFwM3h4eF9sM19fbDRfY29yZSwKKwkmb21hcDN4eHhfbDNfX2w0X3BlciwKK307CisKKy8qIEwzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImwzX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmwzX2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDNfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2wzX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X3drdXBfaHdtb2Q7CisKKy8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fbDRfd2t1cCA9IHsKKwkubWFzdGVyCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCT0gJm9tYXAzeHh4X2w0X3drdXBfaHdtb2QsCisJLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2wzX19sNF9jb3JlLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF9jb3JlX21hc3RlcnNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fbDRfd2t1cCwKK307CisKKy8qIEw0IENPUkUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF9jb3JlX2h3bW9kID0geworCS5uYW1lCQk9ICJsNF9jb3JlX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDRfY29yZV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfY29yZV9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9jb3JlX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9QRVIgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF9wZXJfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2wzX19sNF9wZXIsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfUEVSIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDRfcGVyX21hc3RlcnNbXSA9IHsKK307CisKKy8qIEw0IFBFUiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X3Blcl9od21vZCA9IHsKKwkubmFtZQkJPSAibDRfcGVyX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDRfcGVyX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9wZXJfbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9sNF9wZXJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9wZXJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF93a3VwX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF93a3VwX21hc3RlcnNbXSA9IHsKK307CisKKy8qIEw0IFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF93a3VwX2h3bW9kID0geworCS5uYW1lCQk9ICJsNF93a3VwX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDRfd2t1cF9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfd2t1cF9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2w0X3drdXBfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF93a3VwX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbXB1X21hc3RlcnNbXSA9IHsKKwkmb21hcDN4eHhfbXB1X19sMywKK307CisKKy8qIE1QVSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21wdV9od21vZCA9IHsKKwkubmFtZQkJPSAibXB1X2h3bW9kIiwKKwkuY2xhc3MJCT0gJm1wdV9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAiYXJtX2ZjayIsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9tcHVfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21wdV9tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcDN4eHhfaHdtb2RzW10gPSB7CisJJm9tYXAzeHh4X2wzX2h3bW9kLAorCSZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCSZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJJm9tYXAzeHh4X2w0X3drdXBfaHdtb2QsCisJJm9tYXAzeHh4X21wdV9od21vZCwKKwlOVUxMLAorfTsKKworaW50IF9faW5pdCBvbWFwM3h4eF9od21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfaHdtb2RfaW5pdChvbWFwM3h4eF9od21vZHMpOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MGI5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBvbWFwX2h3bW9kIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKiBCZW5vw650IENvdXNzb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZGF0YS9zdHJ1Y3R1cmVzIGFyZSB0byBiZSB1c2VkIHdoaWxlIGRlZmluaW5nIE9NQVAgb24tY2hpcCBtb2R1bGUKKyAqIGRhdGEgYW5kIHRoZWlyIGludGVncmF0aW9uIHdpdGggb3RoZXIgT01BUCBtb2R1bGVzIGFuZCBMaW51eC4KKyAqLworCisjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CisKKyNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCisKKy8qKgorICogc3RydWN0IG9tYXBfaHdtb2Rfc3lzY190eXBlMSAtIFRZUEUxIHN5c2NvbmZpZyBzY2hlbWUuCisgKgorICogVG8gYmUgdXNlZCBieSBod21vZCBzdHJ1Y3R1cmUgdG8gc3BlY2lmeSB0aGUgc3lzY29uZmlnIG9mZnNldHMKKyAqIGlmIHRoZSBkZXZpY2UgaXAgaXMgY29tcGxpYW50IHdpdGggdGhlIG9yaWdpbmFsIFBSQ00gcHJvdG9jb2wKKyAqIGRlZmluZWQgZm9yIE9NQVAyNDIwLgorICovCitzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyBvbWFwX2h3bW9kX3N5c2NfdHlwZTEgPSB7CisJLm1pZGxlX3NoaWZ0CT0gU1lTQ19UWVBFMV9NSURMRU1PREVfU0hJRlQsCisJLmNsa2FjdF9zaGlmdAk9IFNZU0NfVFlQRTFfQ0xPQ0tBQ1RJVklUWV9TSElGVCwKKwkuc2lkbGVfc2hpZnQJPSBTWVNDX1RZUEUxX1NJRExFTU9ERV9TSElGVCwKKwkuZW53a3VwX3NoaWZ0CT0gU1lTQ19UWVBFMV9FTkFXQUtFVVBfU0hJRlQsCisJLnNyc3Rfc2hpZnQJPSBTWVNDX1RZUEUxX1NPRlRSRVNFVF9TSElGVCwKKwkuYXV0b2lkbGVfc2hpZnQJPSBTWVNDX1RZUEUxX0FVVE9JRExFX1NISUZULAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX3R5cGUyIC0gVFlQRTIgc3lzY29uZmlnIHNjaGVtZS4KKyAqCisgKiBUbyBiZSB1c2VkIGJ5IGh3bW9kIHN0cnVjdHVyZSB0byBzcGVjaWZ5IHRoZSBzeXNjb25maWcgb2Zmc2V0cyBpZiB0aGUKKyAqIGRldmljZSBpcCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgbmV3IFBSQ00gcHJvdG9jb2wgZGVmaW5lZCBmb3IgbmV3CisgKiBPTUFQNCBJUHMuCisgKi8KK3N0cnVjdCBvbWFwX2h3bW9kX3N5c2NfZmllbGRzIG9tYXBfaHdtb2Rfc3lzY190eXBlMiA9IHsKKwkubWlkbGVfc2hpZnQJPSBTWVNDX1RZUEUyX01JRExFTU9ERV9TSElGVCwKKwkuc2lkbGVfc2hpZnQJPSBTWVNDX1RZUEUyX1NJRExFTU9ERV9TSElGVCwKKwkuc3JzdF9zaGlmdAk9IFNZU0NfVFlQRTJfU09GVFJFU0VUX1NISUZULAorfTsKKworCisvKgorICogb21hcF9od21vZCBjbGFzcyBkYXRhCisgKi8KKworc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgbDNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAibDMiCit9OworCitzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsNF9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJsNCIKK307CisKK3N0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG1wdV9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJtcHUiCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDVhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfY29tbW9uX2RhdGEuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogb21hcF9od21vZF9jb21tb25fZGF0YS5oIC0gT01BUCBod21vZCBjb21tb24gbWFjcm9zIGFuZCBkZWNsYXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIEJlbm/DrnQgQ291c3NvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX09NQVBfSFdNT0RfQ09NTU9OX0RBVEFfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUF9IV01PRF9DT01NT05fREFUQV9ICisKKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKworLyogT01BUCBod21vZCBjbGFzc2VzIC0gZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsM19od21vZF9jbGFzczsKK2V4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsNF9od21vZF9jbGFzczsKK2V4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBtcHVfaHdtb2RfY2xhc3M7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaAppbmRleCBlZDZkZjA0Li4zOGI3MzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaApAQCAtNDE3LDcgKzQxNywxMiBAQAogCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgb21hcDI0MjBfcmF0ZV90YWJsZVtdOworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgb21hcDI0MzBfcmF0ZV90YWJsZVtdOworI2Vsc2UKKyNkZWZpbmUgb21hcDI0MzBfcmF0ZV90YWJsZQlOVUxMCisjZW5kaWYKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnJhdGVfdGFibGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKaW5kZXggYTA4NjYyNi4uYzE4ZjdmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwpAQCAtNjcsOSArNjcsOSBAQAogI2lmIDAKIAkJLyogTVBVICovCiAJCURVTVBfUFJNX01PRF9SRUcoT0NQX01PRCwgT01BUDJfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKLQkJRFVNUF9DTV9NT0RfUkVHKE1QVV9NT0QsIENNX0NMS1NUQ1RSTCk7Ci0JCURVTVBfUFJNX01PRF9SRUcoTVBVX01PRCwgUE1fUFdTVENUUkwpOwotCQlEVU1QX1BSTV9NT0RfUkVHKE1QVV9NT0QsIFBNX1BXU1RTVCk7CisJCURVTVBfQ01fTU9EX1JFRyhNUFVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCQlEVU1QX1BSTV9NT0RfUkVHKE1QVV9NT0QsIE9NQVAyX1BNX1BXU1RDVFJMKTsKKwkJRFVNUF9QUk1fTU9EX1JFRyhNUFVfTU9ELCBPTUFQMl9QTV9QV1NUU1QpOwogCQlEVU1QX1BSTV9NT0RfUkVHKE1QVV9NT0QsIFBNX1dLREVQKTsKICNlbmRpZgogI2lmIDAKQEAgLTkzLDcgKzkzLDcgQEAKIAkJRFVNUF9DTV9NT0RfUkVHKFdLVVBfTU9ELCBDTV9JQ0xLRU4pOwogCQlEVU1QX0NNX01PRF9SRUcoUExMX01PRCwgQ01fQ0xLRU4pOwogCQlEVU1QX0NNX01PRF9SRUcoUExMX01PRCwgQ01fQVVUT0lETEUpOwotCQlEVU1QX1BSTV9NT0RfUkVHKENPUkVfTU9ELCBQTV9QV1NUU1QpOworCQlEVU1QX1BSTV9NT0RfUkVHKENPUkVfTU9ELCBPTUFQMl9QTV9QV1NUU1QpOwogI2VuZGlmCiAjaWYgMAogCQkvKiBEU1AgKi8KQEAgLTEwMywxMSArMTAzLDExIEBACiAJCQlEVU1QX0NNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgQ01fSURMRVNUKTsKIAkJCURVTVBfQ01fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBDTV9BVVRPSURMRSk7CiAJCQlEVU1QX0NNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKTsKLQkJCURVTVBfQ01fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTVENUUkwpOwotCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBSTV9SU1RDVFJMKTsKLQkJCURVTVBfUFJNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgUk1fUlNUU1QpOwotCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBQTV9QV1NUQ1RSTCk7Ci0JCQlEVU1QX1BSTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIFBNX1BXU1RTVCk7CisJCQlEVU1QX0NNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwkJCURVTVBfUFJNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJCQlEVU1QX1BSTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwkJCURVTVBfUFJNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgT01BUDJfUE1fUFdTVENUUkwpOworCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBPTUFQMl9QTV9QV1NUU1QpOwogCQl9CiAjZW5kaWYKIAl9IGVsc2UgewpAQCAtMzg1LDYgKzM4NSwxMSBAQAogCQlzZXFfcHJpbnRmKHMsICIsJXM6JWQiLCBwd3JkbV9zdGF0ZV9uYW1lc1tpXSwKIAkJCXB3cmRtLT5zdGF0ZV9jb3VudGVyW2ldKTsKIAorCXNlcV9wcmludGYocywgIixSRVQtTE9HSUMtT0ZGOiVkIiwgcHdyZG0tPnJldF9sb2dpY19vZmZfY291bnRlcik7CisJZm9yIChpID0gMDsgaSA8IHB3cmRtLT5iYW5rczsgaSsrKQorCQlzZXFfcHJpbnRmKHMsICIsUkVULU1FTUJBTkslZC1PRkY6JWQiLCBpICsgMSwKKwkJCQlwd3JkbS0+cmV0X21lbV9vZmZfY291bnRlcltpXSk7CisKIAlzZXFfcHJpbnRmKHMsICJcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC01NzcsNyArNTgyLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoX25vbG9jayhwd3JkbXNfc2V0dXAsICh2b2lkICopZCk7CisJcHdyZG1fZm9yX2VhY2gocHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaAppbmRleCA3YTljMmQwLi5iZDY0NjZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCkBAIC0yMyw2ICsyMywyMiBAQAogZXh0ZXJuIGludCBzZXRfcHdyZG1fc3RhdGUoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTMyIHN0YXRlKTsKIGV4dGVybiBpbnQgb21hcDNfaWRsZV9pbml0KHZvaWQpOwogCitzdHJ1Y3QgY3B1aWRsZV9wYXJhbXMgeworCXU4ICB2YWxpZDsKKwl1MzIgc2xlZXBfbGF0ZW5jeTsKKwl1MzIgd2FrZV9sYXRlbmN5OworCXUzMiB0aHJlc2hvbGQ7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX0NQVV9JRExFKQorZXh0ZXJuIHZvaWQgb21hcDNfcG1faW5pdF9jcHVpZGxlKHN0cnVjdCBjcHVpZGxlX3BhcmFtcyAqY3B1aWRsZV9ib2FyZF9wYXJhbXMpOworI2Vsc2UKK3N0YXRpYworaW5saW5lIHZvaWQgb21hcDNfcG1faW5pdF9jcHVpZGxlKHN0cnVjdCBjcHVpZGxlX3BhcmFtcyAqY3B1aWRsZV9ib2FyZF9wYXJhbXMpCit7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGludCBvbWFwM19wbV9nZXRfc3VzcGVuZF9zdGF0ZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIGV4dGVybiBpbnQgb21hcDNfcG1fc2V0X3N1c3BlbmRfc3RhdGUoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgaW50IHN0YXRlKTsKIApAQCAtMzcsNiArNTMsMTAgQEAKICNkZWZpbmUgb21hcDJfcG1fZGVidWcJCQkJMAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSURMRSkKK2V4dGVybiB2b2lkIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcyh2b2lkKTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfUE1fREVCVUcpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogZXh0ZXJuIHZvaWQgcG1fZGJnX3VwZGF0ZV90aW1lKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIGludCBwcmV2KTsKIGV4dGVybiBpbnQgcG1fZGJnX3JlZ3NldF9zYXZlKGludCByZWdfc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCmluZGV4IGNiYTA1YjlmLi4zNzQyOTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTU3LDExICs1Nyw4IEBACiBzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1fc3VzcGVuZCkodTMyIGRsbGN0cmwsIHZvaWQgX19pb21lbSAqc2RyY19kbGxhX2N0cmwsCiAJCQkJICB2b2lkIF9faW9tZW0gKnNkcmNfcG93ZXIpOwogCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07Ci1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpjb3JlX3B3cmRtOwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpkc3BfY2xrZG07Ci1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpnZnhfY2xrZG07CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG0sICpjb3JlX3B3cmRtOworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqZHNwX2Nsa2RtLCAqbXB1X2Nsa2RtLCAqd2t1cF9jbGtkbSwgKmdmeF9jbGtkbTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKm9zY19jaywgKmVtdWxfY2s7CiAKQEAgLTIxOSwxMSArMjE2LDEyIEBACiAJCS8qIFRyeSB0byBlbnRlciBNUFUgcmV0ZW50aW9uICovCiAJCXBybV93cml0ZV9tb2RfcmVnKCgweDAxIDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCkgfAogCQkJCSAgT01BUF9MT0dJQ1JFVFNUQVRFLAotCQkJCSAgTVBVX01PRCwgUE1fUFdTVENUUkwpOworCQkJCSAgTVBVX01PRCwgT01BUDJfUE1fUFdTVENUUkwpOwogCX0gZWxzZSB7CiAJCS8qIEJsb2NrIE1QVSByZXRlbnRpb24gKi8KIAotCQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQX0xPR0lDUkVUU1RBVEUsIE1QVV9NT0QsIFBNX1BXU1RDVFJMKTsKKwkJcHJtX3dyaXRlX21vZF9yZWcoT01BUF9MT0dJQ1JFVFNUQVRFLCBNUFVfTU9ELAorCQkJCQkJIE9NQVAyX1BNX1BXU1RDVFJMKTsKIAkJb25seV9pZGxlID0gMTsKIAl9CiAKQEAgLTMzMyw5ICszMzEsMTcgQEAKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CiAKLXN0YXRpYyBpbnQgX3BtX2Nsa2RtX2VuYWJsZV9od3N1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1bnVzZWQpCisvKiBYWFggVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgc2hhcmVhYmxlIGJldHdlZW4gT01BUDJ4eHggYW5kIE9NQVAzICovCitzdGF0aWMgaW50IF9faW5pdCBjbGtkbXNfc2V0dXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgdm9pZCAqdW51c2VkKQogewotCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoY2xrZG0pOworCWNsa2RtX2NsZWFyX2FsbF93a2RlcHMoY2xrZG0pOworCWNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoY2xrZG0pOworCisJaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykKKwkJb21hcDJfY2xrZG1fYWxsb3dfaWRsZShjbGtkbSk7CisJZWxzZSBpZiAoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQICYmCisJCSBhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA9PSAwKQorCQlvbWFwMl9jbGtkbV9zbGVlcChjbGtkbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0OCwxNCArMzU0LDYgQEAKIAlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPSURMRSwgT0NQX01PRCwKIAkJCSAgT01BUDJfUFJDTV9TWVNDT05GSUdfT0ZGU0VUKTsKIAotCS8qIFNldCBhbGwgZG9tYWluIHdha2V1cCBkZXBlbmRlbmNpZXMgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQX0VOX1dLVVBfTUFTSywgTVBVX01PRCwgUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAyNFhYX0RTUF9NT0QsIFBNX1dLREVQKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBHRlhfTU9ELCBQTV9XS0RFUCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgQ09SRV9NT0QsIFBNX1dLREVQKTsKLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCi0JCXBybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAyNDMwX01ETV9NT0QsIFBNX1dLREVQKTsKLQogCS8qCiAJICogU2V0IENPUkUgcG93ZXJkb21haW4gbWVtb3J5IGJhbmtzIHRvIHJldGFpbiB0aGVpciBjb250ZW50cwogCSAqIGR1cmluZyBSRVRFTlRJT04KQEAgLTM4NCw4ICszODIsMTIgQEAKIAlwd3JkbV9zZXRfbmV4dF9wd3JzdChwd3JkbSwgUFdSRE1fUE9XRVJfT0ZGKTsKIAlvbWFwMl9jbGtkbV9zbGVlcChnZnhfY2xrZG0pOwogCi0JLyogRW5hYmxlIGNsb2NrZG9tYWluIGhhcmR3YXJlLXN1cGVydmlzZWQgY29udHJvbCBmb3IgYWxsIGNsa2RtcyAqLwotCWNsa2RtX2Zvcl9lYWNoKF9wbV9jbGtkbV9lbmFibGVfaHdzdXAsIE5VTEwpOworCS8qCisJICogQ2xlYXIgY2xvY2tkb21haW4gd2FrZXVwIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlCisJICogaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIGZvciBhbGwgY2xrZG1zCisJICovCisJY2xrZG1fZm9yX2VhY2goY2xrZG1zX3NldHVwLCBOVUxMKTsKKwljbGtkbV9hZGRfd2tkZXAobXB1X2Nsa2RtLCB3a3VwX2Nsa2RtKTsKIAogCS8qIEVuYWJsZSBjbG9jayBhdXRvaWRsZSBmb3IgYWxsIGRvbWFpbnMgKi8KIAljbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fQ0FNIHwKQEAgLTQ4MSw3ICs0ODMsNyBAQAogCWwgPSBwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAyX1BSQ01fUkVWSVNJT05fT0ZGU0VUKTsKIAlwcmludGsoS0VSTl9JTkZPICJQUkNNIHJldmlzaW9uICVkLiVkXG4iLCAobCA+PiA0KSAmIDB4MGYsIGwgJiAweDBmKTsKIAotCS8qIExvb2sgdXAgaW1wb3J0YW50IHBvd2VyZG9tYWlucywgY2xvY2tkb21haW5zICovCisJLyogTG9vayB1cCBpbXBvcnRhbnQgcG93ZXJkb21haW5zICovCiAKIAltcHVfcHdyZG0gPSBwd3JkbV9sb29rdXAoIm1wdV9wd3JkbSIpOwogCWlmICghbXB1X3B3cmRtKQpAQCAtNDkxLDkgKzQ5MywxOSBAQAogCWlmICghY29yZV9wd3JkbSkKIAkJcHJfZXJyKCJQTTogY29yZV9wd3JkbSBub3QgZm91bmRcbiIpOwogCisJLyogTG9vayB1cCBpbXBvcnRhbnQgY2xvY2tkb21haW5zICovCisKKwltcHVfY2xrZG0gPSBjbGtkbV9sb29rdXAoIm1wdV9jbGtkbSIpOworCWlmICghbXB1X2Nsa2RtKQorCQlwcl9lcnIoIlBNOiBtcHVfY2xrZG0gbm90IGZvdW5kXG4iKTsKKworCXdrdXBfY2xrZG0gPSBjbGtkbV9sb29rdXAoIndrdXBfY2xrZG0iKTsKKwlpZiAoIXdrdXBfY2xrZG0pCisJCXByX2VycigiUE06IHdrdXBfY2xrZG0gbm90IGZvdW5kXG4iKTsKKwogCWRzcF9jbGtkbSA9IGNsa2RtX2xvb2t1cCgiZHNwX2Nsa2RtIik7CiAJaWYgKCFkc3BfY2xrZG0pCi0JCXByX2VycigiUE06IG1wdV9jbGtkbSBub3QgZm91bmRcbiIpOworCQlwcl9lcnIoIlBNOiBkc3BfY2xrZG0gbm90IGZvdW5kXG4iKTsKIAogCWdmeF9jbGtkbSA9IGNsa2RtX2xvb2t1cCgiZ2Z4X2Nsa2RtIik7CiAJaWYgKCFnZnhfY2xrZG0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwppbmRleCA5MTBhN2FjLi5mZWUyZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKQEAgLTY4NSwxMCArNjg1LDEwIEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfUlNUMV9JVkEyIHwKIAkJCSAgT01BUDM0MzBfUlNUMl9JVkEyIHwKIAkJCSAgT01BUDM0MzBfUlNUM19JVkEyLAotCQkJICBPTUFQMzQzMF9JVkEyX01PRCwgUk1fUlNUQ1RSTCk7CisJCQkgIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKIAogCS8qIEVuYWJsZSBJVkEyIGNsb2NrICovCi0JY21fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyLAorCWNtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMl9NQVNLLAogCQkJIE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pOwogCiAJLyogU2V0IElWQTIgYm9vdCBtb2RlIHRvICdpZGxlJyAqLwpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCQkgT01BUDM0M1hfQ09OVFJPTF9JVkEyX0JPT1RNT0QpOwogCiAJLyogVW4tcmVzZXQgSVZBMiAqLwotCXBybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBSTV9SU1RDVFJMKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CiAKIAkvKiBEaXNhYmxlIElWQTIgY2xvY2sgKi8KIAljbV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pOwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfUlNUMV9JVkEyIHwKIAkJCSAgT01BUDM0MzBfUlNUMl9JVkEyIHwKIAkJCSAgT01BUDM0MzBfUlNUM19JVkEyLAotCQkJICBPTUFQMzQzMF9JVkEyX01PRCwgUk1fUlNUQ1RSTCk7CisJCQkgIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2QyZF9pZGxlKHZvaWQpCkBAIC03MjgsOCArNzI4LDggQEAKIAkvKiByZXNldCBtb2RlbSAqLwogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX1JNX1JTVENUUkxfQ09SRV9NT0RFTV9TV19SU1RQV1JPTiB8CiAJCQkgIE9NQVAzNDMwX1JNX1JTVENUUkxfQ09SRV9NT0RFTV9TV19SU1QsCi0JCQkgIENPUkVfTU9ELCBSTV9SU1RDVFJMKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBDT1JFX01PRCwgUk1fUlNUQ1RSTCk7CisJCQkgIENPUkVfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygwLCBDT1JFX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmNtX3NldHVwX3JlZ3Modm9pZCkKQEAgLTkxNiwxMyArOTE2LDEzIEBACiAJcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fSVZBR1JQU0VMKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nICdyZXNldCcgZmxhZ3MgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBNUFVfTU9ELCBSTV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIFJNX1JTVFNUKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9QRVJfTU9ELCBSTV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfRU1VX01PRCwgUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX05FT05fTU9ELCBSTV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfRFNTX01PRCwgUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBSTV9SU1RTVCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgTVBVX01PRCwgT01BUDJfUk1fUlNUU1QpOworCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBPTUFQMl9STV9SU1RTVCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfUEVSX01PRCwgT01BUDJfUk1fUlNUU1QpOworCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0VNVV9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9ORU9OX01PRCwgT01BUDJfUk1fUlNUU1QpOworCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0RTU19NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgT01BUDJfUk1fUlNUU1QpOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgUFJDTSBpbnRlcnJ1cHRzICovCiAJcHJtX3dyaXRlX21vZF9yZWcoMCwgT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKQEAgLTk0MSw2ICs5NDEsMTAgQEAKIAllbHNlCiAJCXN0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCisjaWZkZWYgQ09ORklHX0NQVV9JRExFCisJb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKCk7CisjZW5kaWYKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkocHdyc3QsICZwd3JzdF9saXN0LCBub2RlKSB7CiAJCXB3cnN0LT5uZXh0X3N0YXRlID0gc3RhdGU7CiAJCXNldF9wd3JkbV9zdGF0ZShwd3JzdC0+cHdyZG0sIHN0YXRlKTsKQEAgLTk5OCw2ICsxMDAyLDkgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgY2xrZG1zX3NldHVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHZvaWQgKnVudXNlZCkKIHsKKwljbGtkbV9jbGVhcl9hbGxfd2tkZXBzKGNsa2RtKTsKKwljbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKGNsa2RtKTsKKwogCWlmIChjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRU5BQkxFX0FVVE8pCiAJCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoY2xrZG0pOwogCWVsc2UgaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9TTEVFUCAmJgpAQCAtMTAxOCw2ICsxMDI1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAzX3BtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcG93ZXJfc3RhdGUgKnB3cnN0LCAqdG1wOworCXN0cnVjdCBjbG9ja2RvbWFpbiAqbmVvbl9jbGtkbSwgKnBlcl9jbGtkbSwgKm1wdV9jbGtkbSwgKmNvcmVfY2xrZG07CiAJaW50IHJldDsKIAogCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCkBAIC0xMDU3LDYgKzEwNjUsMTEgQEAKIAljb3JlX3B3cmRtID0gcHdyZG1fbG9va3VwKCJjb3JlX3B3cmRtIik7CiAJY2FtX3B3cmRtID0gcHdyZG1fbG9va3VwKCJjYW1fcHdyZG0iKTsKIAorCW5lb25fY2xrZG0gPSBjbGtkbV9sb29rdXAoIm5lb25fY2xrZG0iKTsKKwltcHVfY2xrZG0gPSBjbGtkbV9sb29rdXAoIm1wdV9jbGtkbSIpOworCXBlcl9jbGtkbSA9IGNsa2RtX2xvb2t1cCgicGVyX2Nsa2RtIik7CisJY29yZV9jbGtkbSA9IGNsa2RtX2xvb2t1cCgiY29yZV9jbGtkbSIpOworCiAJb21hcF9wdXNoX3NyYW1faWRsZSgpOwogI2lmZGVmIENPTkZJR19TVVNQRU5ECiAJc3VzcGVuZF9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CkBAIC0xMDY1LDE0ICsxMDc4LDE0IEBACiAJcG1faWRsZSA9IG9tYXAzX3BtX2lkbGU7CiAJb21hcDNfaWRsZV9pbml0KCk7CiAKLQlwd3JkbV9hZGRfd2tkZXAobmVvbl9wd3JkbSwgbXB1X3B3cmRtKTsKKwljbGtkbV9hZGRfd2tkZXAobmVvbl9jbGtkbSwgbXB1X2Nsa2RtKTsKIAkvKgogCSAqIFJFVklTSVQ6IFRoaXMgd2tkZXAgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBHUElPMi02IGFyZSBlbmFibGVkIGZvcgogCSAqIElPLXBhZCB3YWtldXAuICBPdGhlcndpc2UgaXQgd2lsbCB1bm5lY2Vzc2FyaWx5IHdhc3RlIHBvd2VyCiAJICogd2FraW5nIHVwIFBFUiB3aXRoIGV2ZXJ5IENPUkUgd2FrZXVwIC0gc2VlCiAJICogaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1vbWFwJm09MTIxODUyMTUwNzEwMDYyJnc9MgogCSovCi0JcHdyZG1fYWRkX3drZGVwKHBlcl9wd3JkbSwgY29yZV9wd3JkbSk7CisJY2xrZG1fYWRkX3drZGVwKHBlcl9jbGtkbSwgY29yZV9jbGtkbSk7CiAKIAlpZiAob21hcF90eXBlKCkgIT0gT01BUDJfREVWSUNFX1RZUEVfR1ApIHsKIAkJb21hcDNfc2VjdXJlX3JhbV9zdG9yYWdlID0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCAyNmIzZjNlLi45YTBmYjM4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwpAQCAtMiwxMCArMiwxMiBAQAogICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKKyAqIEFkZGVkIE9NQVA0IHNwZWNpZmljIHN1cHBvcnQgYnkgQWJoaWppdCBQYWdhcmUgPGFiaGlqaXRwYWdhcmVAdGkuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC0yNiwxMiArMjgsMTUgQEAKIAogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogI2luY2x1ZGUgInBtLmgiCiAKQEAgLTQwLDI5ICs0NSw0MyBAQAogCVBXUkRNX1NUQVRFX1BSRVYsCiB9OwogCisvKiBWYXJpYWJsZSBob2xkaW5nIHZhbHVlIG9mIHRoZSBDUFUgZGVwZW5kZW50IFBXUlNUQ1RSTCBSZWdpc3RlciBPZmZzZXQgKi8KK3N0YXRpYyB1MTYgcHdyc3RjdHJsX3JlZ19vZmZzOworCisvKiBWYXJpYWJsZSBob2xkaW5nIHZhbHVlIG9mIHRoZSBDUFUgZGVwZW5kZW50IFBXUlNUU1QgUmVnaXN0ZXIgT2Zmc2V0ICovCitzdGF0aWMgdTE2IHB3cnN0c3RfcmVnX29mZnM7CisKKy8qIE9NQVAzIGFuZCBPTUFQNCBzcGVjaWZpYyByZWdpc3RlciBiaXQgaW5pdGlhbGlzYXRpb25zCisgKiBOb3RpY2UgdGhhdCB0aGUgbmFtZXMgaGVyZSBhcmUgbm90IGFjY29yZGluZyB0byBlYWNoIHBvd2VyCisgKiBkb21haW4gYnV0IHRoZSBiaXQgbWFwcGluZyB1c2VkIGFwcGxpZXMgdG8gYWxsIG9mIHRoZW0KKyAqLworCisvKiBPTUFQMyBhbmQgT01BUDQgTWVtb3J5IE9uc3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9PTlNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRPTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0xX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0yX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVE9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTNfT05TVEFURV9NQVNLIE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTRfT05TVEFURV9NQVNLIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCisKKy8qIE9NQVAzIGFuZCBPTUFQNCBNZW1vcnkgUmV0c3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9SRVRTVEFURV9NQVNLIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEUKKyNkZWZpbmUgT01BUF9NRU0xX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfTDFGTEFUTUVNUkVUU1RBVEUKKyNkZWZpbmUgT01BUF9NRU0yX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRSRVRTVEFURQorI2RlZmluZSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSyBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURQorI2RlZmluZSBPTUFQX01FTTRfUkVUU1RBVEVfTUFTSyBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX01BU0sKKworLyogT01BUDMgYW5kIE9NQVA0IE1lbW9yeSBTdGF0dXMgYml0cyAqLworI2RlZmluZSBPTUFQX01FTTBfU1RBVEVTVF9NQVNLIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUU1RBVEVTVF9NQVNLCisjZGVmaW5lIE9NQVBfTUVNMV9TVEFURVNUX01BU0sgT01BUDM0MzBfTDFGTEFUTUVNU1RBVEVTVF9NQVNLCisjZGVmaW5lIE9NQVBfTUVNMl9TVEFURVNUX01BU0sgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRTVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU0zX1NUQVRFU1RfTUFTSyBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU00X1NUQVRFU1RfTUFTSyBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1NUQVRFU1RfTUFTSworCiAvKiBwd3JkbV9saXN0IGNvbnRhaW5zIGFsbCByZWdpc3RlcmVkIHN0cnVjdCBwb3dlcmRvbWFpbnMgKi8KIHN0YXRpYyBMSVNUX0hFQUQocHdyZG1fbGlzdCk7CiAKLS8qCi0gKiBwd3JkbV9yd2xvY2sgcHJvdGVjdHMgcHdyZG1fbGlzdCBhZGQgYW5kIGRlbCBvcHMgLSBhbHNvIHJldXNlZCB0bwotICogcHJvdGVjdCBwd3JkbV9jbGtkbXNbXSBkdXJpbmcgY2xrZG0gYWRkL2RlbCBvcHMKLSAqLwotc3RhdGljIERFRklORV9SV0xPQ0socHdyZG1fcndsb2NrKTsKLQotCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdTMyIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHMxNiBkb21haW4sIHMxNiBpZHgsIHUzMiBtYXNrKQotewotCXUzMiB2OwotCi0JdiA9IHBybV9yZWFkX21vZF9yZWcoZG9tYWluLCBpZHgpOwotCXYgJj0gbWFzazsKLQl2ID4+PSBfX2ZmcyhtYXNrKTsKLQotCXJldHVybiB2OwotfQotCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfcHdyZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgKnRlbXBfcHdyZG07CkBAIC03OSwzMiArOTgsNjMgQEAKIAlyZXR1cm4gcHdyZG07CiB9CiAKLS8qIF9wd3JkbV9kZXBzX2xvb2t1cCAtIGxvb2sgdXAgdGhlIHNwZWNpZmllZCBwb3dlcmRvbWFpbiBpbiBhIHB3cmRtIGxpc3QgKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9wd3JkbV9kZXBzX2xvb2t1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAotCQkJCQkgICAgICBzdHJ1Y3QgcHdyZG1fZGVwICpkZXBzKQorLyoqCisgKiBfcHdyZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIHBvd2VyZG9tYWluCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHJlZ2lzdGVyCisgKgorICogQWRkcyBhIHBvd2VyZG9tYWluIHRvIHRoZSBpbnRlcm5hbCBwb3dlcmRvbWFpbiBsaXN0LiAgUmV0dXJucworICogLUVJTlZBTCBpZiBnaXZlbiBhIG51bGwgcG9pbnRlciwgLUVFWElTVCBpZiBhIHBvd2VyZG9tYWluIGlzCisgKiBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdGhlIHByb3ZpZGVkIG5hbWUsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IF9wd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQogewotCXN0cnVjdCBwd3JkbV9kZXAgKnBkOworCWludCBpOwogCi0JaWYgKCFwd3JkbSB8fCAhZGVwcyB8fCAhb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAocGQgPSBkZXBzOyBwZC0+cHdyZG1fbmFtZTsgcGQrKykgeworCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIW9tYXBfY2hpcF9pcyhwZC0+b21hcF9jaGlwKSkKLQkJCWNvbnRpbnVlOworCWlmIChfcHdyZG1fbG9va3VwKHB3cmRtLT5uYW1lKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CiAKLQkJaWYgKCFwZC0+cHdyZG0gJiYgcGQtPnB3cmRtX25hbWUpCi0JCQlwZC0+cHdyZG0gPSBwd3JkbV9sb29rdXAocGQtPnB3cmRtX25hbWUpOworCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOwogCi0JCWlmIChwZC0+cHdyZG0gPT0gcHdyZG0pCi0JCQlicmVhazsKKwkvKiBJbml0aWFsaXplIHRoZSBwb3dlcmRvbWFpbidzIHN0YXRlIGNvdW50ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFdSRE1fTUFYX1BXUlNUUzsgaSsrKQorCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSA9IDA7CiAKKwlwd3JkbS0+cmV0X2xvZ2ljX29mZl9jb3VudGVyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcHdyZG0tPmJhbmtzOyBpKyspCisJCXB3cmRtLT5yZXRfbWVtX29mZl9jb3VudGVyW2ldID0gMDsKKworCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CisJcHdyZG0tPnN0YXRlID0gcHdyZG1fcmVhZF9wd3JzdChwd3JkbSk7CisJcHdyZG0tPnN0YXRlX2NvdW50ZXJbcHdyZG0tPnN0YXRlXSA9IDE7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHJlZ2lzdGVyZWQgJXNcbiIsIHB3cmRtLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfdXBkYXRlX2xvZ2ljX21lbWJhbmtfY291bnRlcnMoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpbnQgaTsKKwl1OCBwcmV2X2xvZ2ljX3B3cnN0LCBwcmV2X21lbV9wd3JzdDsKKworCXByZXZfbG9naWNfcHdyc3QgPSBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QocHdyZG0pOworCWlmICgocHdyZG0tPnB3cnN0c19sb2dpY19yZXQgPT0gUFdSU1RTX09GRl9SRVQpICYmCisJICAgIChwcmV2X2xvZ2ljX3B3cnN0ID09IFBXUkRNX1BPV0VSX09GRikpCisJCXB3cmRtLT5yZXRfbG9naWNfb2ZmX2NvdW50ZXIrKzsKKworCWZvciAoaSA9IDA7IGkgPCBwd3JkbS0+YmFua3M7IGkrKykgeworCQlwcmV2X21lbV9wd3JzdCA9IHB3cmRtX3JlYWRfcHJldl9tZW1fcHdyc3QocHdyZG0sIGkpOworCisJCWlmICgocHdyZG0tPnB3cnN0c19tZW1fcmV0W2ldID09IFBXUlNUU19PRkZfUkVUKSAmJgorCQkgICAgKHByZXZfbWVtX3B3cnN0ID09IFBXUkRNX1BPV0VSX09GRikpCisJCQlwd3JkbS0+cmV0X21lbV9vZmZfY291bnRlcltpXSsrOwogCX0KLQotCWlmICghcGQtPnB3cmRtX25hbWUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotCi0JcmV0dXJuIHBkLT5wd3JkbTsKIH0KIAogc3RhdGljIGludCBfcHdyZG1fc3RhdGVfc3dpdGNoKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIGludCBmbGFnKQpAQCAtMTI2LDYgKzE3Niw4IEBACiAJCXByZXYgPSBwd3JkbV9yZWFkX3ByZXZfcHdyc3QocHdyZG0pOwogCQlpZiAocHdyZG0tPnN0YXRlICE9IHByZXYpCiAJCQlwd3JkbS0+c3RhdGVfY291bnRlcltwcmV2XSsrOworCQlpZiAocHJldiA9PSBQV1JETV9QT1dFUl9SRVQpCisJCQlfdXBkYXRlX2xvZ2ljX21lbWJhbmtfY291bnRlcnMocHdyZG0pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1NCwxMzQgKzIwNiw3MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgX3B3cmRtX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUFdSRE1fTUFYX1BXUlNUUzsgaSsrKQotCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSA9IDA7Ci0KLQlwd3JkbV93YWl0X3RyYW5zaXRpb24ocHdyZG0pOwotCXB3cmRtLT5zdGF0ZSA9IHB3cmRtX3JlYWRfcHdyc3QocHdyZG0pOwotCXB3cmRtLT5zdGF0ZV9jb3VudGVyW3B3cmRtLT5zdGF0ZV0gPSAxOwotCi19Ci0KIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KIAogLyoqCiAgKiBwd3JkbV9pbml0IC0gc2V0IHVwIHRoZSBwb3dlcmRvbWFpbiBsYXllcgorICogQHB3cmRtX2xpc3Q6IGFycmF5IG9mIHN0cnVjdCBwb3dlcmRvbWFpbiBwb2ludGVycyB0byByZWdpc3RlcgogICoKLSAqIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBwb3dlcmRvbWFpbnMsIHJlZ2lzdGVyaW5nIGFsbCB0aGF0IGFyZQotICogYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IENQVS4gSWYgcHdyZG1fbGlzdCBpcyBzdXBwbGllZCBhbmQgbm90Ci0gKiBudWxsLCBhbGwgb2YgdGhlIHJlZmVyZW5jZWQgcG93ZXJkb21haW5zIHdpbGwgYmUgcmVnaXN0ZXJlZC4gIE5vCi0gKiByZXR1cm4gdmFsdWUuCisgKiBMb29wIHRocm91Z2ggdGhlIGFycmF5IG9mIHBvd2VyZG9tYWlucyBAcHdyZG1fbGlzdCwgcmVnaXN0ZXJpbmcgYWxsCisgKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkCisgKiBhbmQgbm90IG51bGwsIGFsbCBvZiB0aGUgcmVmZXJlbmNlZCBwb3dlcmRvbWFpbnMgd2lsbCBiZQorICogcmVnaXN0ZXJlZC4gIE5vIHJldHVybiB2YWx1ZS4gIFhYWCBwd3JkbV9saXN0IGlzIG5vdCByZWFsbHkgYQorICogImxpc3QiOyBpdCBpcyBhbiBhcnJheS4gIFJlbmFtZSBhcHByb3ByaWF0ZWx5LgogICovCiB2b2lkIHB3cmRtX2luaXQoc3RydWN0IHBvd2VyZG9tYWluICoqcHdyZG1fbGlzdCkKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKipwID0gTlVMTDsKIAorCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXB3cnN0Y3RybF9yZWdfb2ZmcyA9IE9NQVAyX1BNX1BXU1RDVFJMOworCQlwd3JzdHN0X3JlZ19vZmZzID0gT01BUDJfUE1fUFdTVFNUOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJcHdyc3RjdHJsX3JlZ19vZmZzID0gT01BUDRfUE1fUFdTVENUUkw7CisJCXB3cnN0c3RfcmVnX29mZnMgPSBPTUFQNF9QTV9QV1NUU1Q7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQb3dlciBEb21haW4gc3RydWN0IG5vdCBzdXBwb3J0ZWQgZm9yICIgXAorCQkJCQkJCSJ0aGlzIENQVVxuIik7CisJCXJldHVybjsKKwl9CisKIAlpZiAocHdyZG1fbGlzdCkgewotCQlmb3IgKHAgPSBwd3JkbV9saXN0OyAqcDsgcCsrKSB7Ci0JCQlwd3JkbV9yZWdpc3RlcigqcCk7Ci0JCQlfcHdyZG1fc2V0dXAoKnApOwotCQl9CisJCWZvciAocCA9IHB3cmRtX2xpc3Q7ICpwOyBwKyspCisJCQlfcHdyZG1fcmVnaXN0ZXIoKnApOwogCX0KIH0KIAogLyoqCi0gKiBwd3JkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcG93ZXJkb21haW4KLSAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gcmVnaXN0ZXIKLSAqCi0gKiBBZGRzIGEgcG93ZXJkb21haW4gdG8gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgcG93ZXJkb21haW4gaXMKLSAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIXB3cmRtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0JaWYgKF9wd3JkbV9sb29rdXAocHdyZG0tPm5hbWUpKSB7Ci0JCXJldCA9IC1FRVhJU1Q7Ci0JCWdvdG8gcHJfdW5sb2NrOwotCX0KLQotCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOwotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7Ci0JcmV0ID0gMDsKLQotcHJfdW5sb2NrOgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcHdyZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwb3dlcmRvbWFpbgotICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB1bnJlZ2lzdGVyCi0gKgotICogUmVtb3ZlcyBhIHBvd2VyZG9tYWluIGZyb20gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHB3cmRtIGFyZ3VtZW50IGlzIE5VTEwuCi0gKi8KLWludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHdyZG0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcHdyZG0tPm5vZGUpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBwd3JkbV9sb29rdXAgLSBsb29rIHVwIGEgcG93ZXJkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgogICogQG5hbWU6IG5hbWUgb2YgcG93ZXJkb21haW4KICAqCi0gKiBGaW5kIGEgcmVnaXN0ZXJlZCBwb3dlcmRvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICogc3RydWN0IHBvd2VyZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqIEZpbmQgYSByZWdpc3RlcmVkIHBvd2VyZG9tYWluIGJ5IGl0cyBuYW1lIEBuYW1lLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzdHJ1Y3QgcG93ZXJkb21haW4gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghbmFtZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJcHdyZG0gPSBfcHdyZG1fbG9va3VwKG5hbWUpOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHB3cmRtOwogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCi0gKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCi0gKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKLSAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgotICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KKyAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIEBmbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEBmbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0CisgKiBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UKKyAqIHRvIGluZGljYXRlIGZhaWx1cmU7IG9yIC1FSU5WQUwgaWYgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCi0JCQkJdm9pZCAqdXNlcikKK2ludCBwd3JkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCSAgIHZvaWQgKnVzZXIpCiB7CiAJc3RydWN0IHBvd2VyZG9tYWluICp0ZW1wX3B3cmRtOwogCWludCByZXQgPSAwOwpAQCAtMjk5LDQwICsyODgsMTcgQEAKIH0KIAogLyoqCi0gKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCi0gKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzICdwd3JkbV9mb3JfZWFjaF9ub2xvY2soKScsIGJ1dCBrZWVwcyB0aGUKLSAqICZwd3JkbV9yd2xvY2sgbG9ja2VkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUgcG93ZXJkb21haW4KLSAqIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLgotICovCi1pbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVzZXIpLAotCQkJdm9pZCAqdXNlcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0JcmV0ID0gcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGZuLCB1c2VyKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgogICogcHdyZG1fYWRkX2Nsa2RtIC0gYWRkIGEgY2xvY2tkb21haW4gdG8gYSBwb3dlcmRvbWFpbgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBhZGQgdGhlIGNsb2NrZG9tYWluIHRvCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgcG93ZXJkb21haW4KICAqCi0gKiBBc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluICdjbGtkbScgd2l0aCBhIHBvd2VyZG9tYWluICdwd3JkbScuICBUaGlzCisgKiBBc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluIEBjbGtkbSB3aXRoIGEgcG93ZXJkb21haW4gQHB3cmRtLiAgVGhpcwogICogZW5hYmxlcyB0aGUgdXNlIG9mIHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKCkuICBSZXR1cm5zIC1FSU5WQUwgaWYKICAqIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ7CiAgKiBvciAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTM0Miw4ICszMDgsNiBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogYXNzb2NpYXRpbmcgY2xvY2tkb21haW4gJXMgd2l0aCBwb3dlcmRvbWFpbiAiCiAJCSAiJXNcbiIsIGNsa2RtLT5uYW1lLCBwd3JkbS0+bmFtZSk7CiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOwotCiAJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9DTEtETVM7IGkrKykgewogCQlpZiAoIXB3cmRtLT5wd3JkbV9jbGtkbXNbaV0pCiAJCQlicmVhazsKQEAgLTM2OCw4ICszMzIsNiBAQAogCXJldCA9IDA7CiAKIHBhY19leGl0OgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3OCwxNCArMzQwLDEzIEBACiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGFkZCB0aGUgY2xvY2tkb21haW4gdG8KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gYXNzb2NpYXRlIHdpdGggYSBwb3dlcmRvbWFpbgogICoKLSAqIERpc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluICdjbGtkbScgZnJvbSB0aGUgcG93ZXJkb21haW4KLSAqICdwd3JkbScuIFJldHVybnMgLUVJTlZBTCBpZiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvaW50ZXJzOwotICogLUVOT0VOVCBpZiB0aGUgY2xrZG0gd2FzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHBvd2VyZG9tYWluLCBvciAwCi0gKiB1cG9uIHN1Y2Nlc3MuCisgKiBEaXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiBAY2xrZG0gZnJvbSB0aGUgcG93ZXJkb21haW4KKyAqIEBwd3JkbS4gUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9FTlQKKyAqIGlmIEBjbGtkbSB3YXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG93ZXJkb21haW4sIG9yIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2RlbF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJaW50IGk7CiAKQEAgLTM5NSw4ICszNTYsNiBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogZGlzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIGZyb20gcG93ZXJkb21haW4gIgogCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspCiAJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID09IGNsa2RtKQogCQkJYnJlYWs7CkBAIC00MTMsOCArMzcyLDYgQEAKIAlyZXQgPSAwOwogCiBwZGNfZXhpdDoKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjMsMjU5ICszODAsMzQgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gaXRlcmF0ZSBvdmVyCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCi0gKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCBjbG9ja2RvbWFpbiBpbiB0aGUgcG93ZXJkb21haW4KLSAqICdwd3JkbScuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHJldHVybiBhbnl0aGluZyBidXQgMCB0byBiYWlsCi0gKiBvdXQgZWFybHkgZnJvbSB0aGUgaXRlcmF0b3IuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKLSAqIHRoZSBwd3JkbV9yd2xvY2sgaGVsZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlCi0gKiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoCi0gKiBoYXJkd2FyZSBwb3dlcmRvbWFpbiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4gIFJldHVybnMgLUVJTlZBTAotICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb2ludGVyczsgb3IgcGFzc2VzIGFsb25nIHRoZSBsYXN0IHJldHVybgotICogdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgMCBmb3Igc3VjY2VzcyBvcgotICogYW55dGhpbmcgZWxzZSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gQGZuIGZvciBlYWNoIGNsb2NrZG9tYWluIGluIHRoZSBwb3dlcmRvbWFpbgorICogQHB3cmRtLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoCisgKiBpbnZhbGlkIHBvaW50ZXJzOyBvciBwYXNzZXMgYWxvbmcgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UKKyAqIHRvIGluZGljYXRlIGZhaWx1cmUuCiAgKi8KIGludCBwd3JkbV9mb3JfZWFjaF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJIGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJCSAgIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAoIWZuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TICYmICFyZXQ7IGkrKykKIAkJcmV0ID0gKCpmbikocHdyZG0sIHB3cmRtLT5wd3JkbV9jbGtkbXNbaV0pOwogCi0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi0KLS8qKgotICogcHdyZG1fYWRkX3drZGVwIC0gYWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCi0gKiBAcHdyZG0xOiB3YWtlIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogdXAgKGRlcGVuZGVudCkKLSAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQotICoKLSAqIFdoZW4gdGhlIHBvd2VyZG9tYWluIHJlcHJlc2VudGVkIGJ5IHB3cmRtMiB3YWtlcyB1cCAoZHVlIHRvIGFuCi0gKiBpbnRlcnJ1cHQpLCB3YWtlIHVwIHB3cmRtMS4JSW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUgb24gdGhlIE9NQVAsCi0gKiB0aGlzIGZlYXR1cmUgaXMgZGVzaWduZWQgdG8gcmVkdWNlIHdha2V1cCBsYXRlbmN5IG9mIHRoZSBkZXBlbmRlbnQKLSAqIHBvd2VyZG9tYWluLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4KLSAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIHB3cmRtMiBjYW5ub3Qgd2FrZSB1cCBwd3JkbTEgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2FkZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIHdha2UgdXAgJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwKLQkJIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQotCXBybV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCi0JCQkgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBwd3JkbV9kZWxfd2tkZXAgLSByZW1vdmUgYSB3YWtldXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQotICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCi0gKgotICogUmVtb3ZlIGEgd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBjYXVzZXMgcHdyZG0xIHRvIHdha2UgdXAgd2hlbiBwd3JkbTIKLSAqIHdha2VzIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4KLSAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIHB3cmRtMiBjYW5ub3Qgd2FrZSB1cCBwd3JkbTEgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2RlbF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzIGFmdGVyICVzICIKLQkJICJ3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOwotCi0JcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAotCQkJICAgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBwd3JkbV9yZWFkX3drZGVwIC0gcmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQotICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCi0gKgotICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSB3YWtldXAgZGVwZW5kZW5jeSBleGlzdHMgd2hlcmVpbiBwd3JkbTEgd2lsbCBiZQotICogYXdva2VuIHdoZW4gcHdyZG0yIHdha2VzIHVwOyAwIGlmIGRlcGVuZGVuY3kgaXMgbm90IHNldDsgLUVJTlZBTAotICogaWYgZWl0aGVyIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgaW52YWxpZDsgb3IgLUVOT0VOVCBpZiB0aGUgaGFyZHdhcmUKLSAqIGlzIGluY2FwYWJsZS4KLSAqCi0gKiBSRVZJU0lUOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHJlcHJlc2VudHMgc29mdHdhcmUtY29udHJvbGxhYmxlCi0gKiB3YWtldXAgZGVwZW5kZW5jaWVzLiAgV2FrZXVwIGRlcGVuZGVuY2llcyBmaXhlZCBpbiBoYXJkd2FyZSBhcmUgbm90Ci0gKiB5ZXQgaGFuZGxlZCBoZXJlLgotICovCi1pbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCwKLQkJCQkJKDEgPDwgcHdyZG0yLT5kZXBfYml0KSk7Ci19Ci0KLS8qKgotICogcHdyZG1fYWRkX3NsZWVwZGVwIC0gYWRkIGEgc2xlZXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogUHJldmVudCBwd3JkbTEgZnJvbSBhdXRvbWF0aWNhbGx5IGdvaW5nIGluYWN0aXZlIChhbmQgdGhlbiB0bwotICogcmV0ZW50aW9uIG9yIG9mZikgaWYgcHdyZG0yIGlzIHN0aWxsIGFjdGl2ZS4JIFJldHVybnMgLUVJTlZBTCBpZgotICogcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCi0gKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKLSAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBzZXQgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXB3cmRtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwID0gX3B3cmRtX2RlcHNfbG9va3VwKHB3cmRtMiwgcHdyZG0xLT5zbGVlcGRlcF9zcmNzKTsKLQlpZiAoSVNfRVJSKHApKSB7Ci0JCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCi0JCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIHB3cmRtMS0+bmFtZSwKLQkJCSBwd3JkbTItPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihwKTsKLQl9Ci0KLQlwcl9kZWJ1ZygicG93ZXJkb21haW46IHdpbGwgcHJldmVudCAlcyBmcm9tIHNsZWVwaW5nIGlmICVzIGlzIGFjdGl2ZVxuIiwKLQkJIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQotCWNtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgcHdyZG0yLT5kZXBfYml0KSwKLQkJCSAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcHdyZG1fZGVsX3NsZWVwZGVwIC0gcmVtb3ZlIGEgc2xlZXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogQWxsb3cgcHdyZG0xIHRvIGF1dG9tYXRpY2FsbHkgZ28gaW5hY3RpdmUgKGFuZCB0aGVuIHRvIHJldGVudGlvbiBvcgotICogb2ZmKSwgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdGl2aXR5IHN0YXRlIG9mIHB3cmRtMi4gIFJldHVybnMgLUVJTlZBTAotICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCi0gKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKLSAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBjbGVhcmVkIGluIGhhcmR3YXJlLCBvcgotICogMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBwd3JkbV9kZWxfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQotewotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKLQotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgotCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCi0JCQkgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIG5vIGxvbmdlciBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgIgotCQkgIiVzIGlzIGFjdGl2ZVxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOwotCi0JY21fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCi0JCQkgICAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcHdyZG1fcmVhZF9zbGVlcGRlcCAtIHJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIHB3cmRtMSB3aWxsCi0gKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIHB3cmRtMiBpcyBhY3RpdmU7Ci0gKiAwIGlmIHB3cmRtMSdzIGF1dG9tYXRpYyBwb3dlciBzdGF0ZSBpbmFjdGl2aXR5IHRyYW5zaXRpb24gaXMgaW5kZXBlbmRlbnQKLSAqIG9mIHB3cmRtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCi0gKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAotICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCi0gKgotICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQotICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAotICogeWV0IGhhbmRsZWQgaGVyZS4KLSAqLwotaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQotewotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKLQotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgotCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCi0JCQkgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtMS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9DTV9TTEVFUERFUCwKLQkJCQkJKDEgPDwgcHdyZG0yLT5kZXBfYml0KSk7Ci19Ci0KIC8qKgogICogcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50IC0gZ2V0IG51bWJlciBvZiBtZW1vcnkgYmFua3MgaW4gdGhpcyBwb3dlcmRvbWFpbgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnRyb2xsYWJsZSBtZW1vcnkgYmFua3MgaW4gcG93ZXJkb21haW4gcHdyZG0sCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb250cm9sbGFibGUgbWVtb3J5IGJhbmtzIGluIHBvd2VyZG9tYWluIEBwd3JkbSwKICAqIHN0YXJ0aW5nIHdpdGggMS4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLgogICovCiBpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCkBAIC02OTEsNyArNDIzLDcgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgorICogU2V0IHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBuZXh0IHBvd2VyIHN0YXRlIHRvIEBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgogICogbWF5IG5vdCBlbnRlciB0aGlzIHN0YXRlIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIHN0YXRlCiAgKiBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcwogICogbnVsbCBvciBpZiB0aGUgcG93ZXIgc3RhdGUgaXMgaW52YWxpZCBmb3IgdGhlIHBvd2VyZG9taW4sIG9yIHJldHVybnMgMApAQCAtNzEwLDcgKzQ0Miw3IEBACiAKIAlwcm1fcm13X21vZF9yZWdfYml0cyhPTUFQX1BPV0VSU1RBVEVfTUFTSywKIAkJCSAgICAgKHB3cnN0IDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE5LDcgKzQ1MSw3IEBACiAgKiBwd3JkbV9yZWFkX25leHRfcHdyc3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBuZXh0IHBvd2VyIHN0YXRlLiAgUmV0dXJucyAtRUlOVkFMCiAgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIG5leHQgcG93ZXIgc3RhdGUKICAqIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtNzI4LDE1ICs0NjAsMTUgQEAKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCwKLQkJCQkJT01BUF9QT1dFUlNUQVRFX01BU0spOworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCSBwd3JzdGN0cmxfcmVnX29mZnMsIE9NQVBfUE9XRVJTVEFURV9NQVNLKTsKIH0KIAogLyoqCiAgKiBwd3JkbV9yZWFkX3B3cnN0IC0gZ2V0IGN1cnJlbnQgcG93ZXJkb21haW4gcG93ZXIgc3RhdGUKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IHBvd2VyIHN0YXRlCiAgKgotICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGN1cnJlbnQgcG93ZXIgc3RhdGUuCVJldHVybnMgLUVJTlZBTAorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBjdXJyZW50IHBvd2VyIHN0YXRlLglSZXR1cm5zIC1FSU5WQUwKICAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZQogICogdXBvbiBzdWNjZXNzLgogICovCkBAIC03NDUsMTUgKzQ3NywxNSBAQAogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwKLQkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSyk7CisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJIHB3cnN0c3RfcmVnX29mZnMsIE9NQVBfUE9XRVJTVEFURVNUX01BU0spOwogfQogCiAvKioKICAqIHB3cmRtX3JlYWRfcHJldl9wd3JzdCAtIGdldCBwcmV2aW91cyBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gQHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKICAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgcG93ZXIgc3RhdGUKICAqIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtNzcxLDExICs1MDMsMTEgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIG5leHQgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiB0aGUgcG93ZXJkb21haW4KLSAqIHB3cmRtIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHJldGVudGlvbi4gIFRoaXMgd2lsbAotICogYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKLSAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKLSAqIHN1cHBvcnRlZCwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSBAcHdyc3QgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiB0aGUKKyAqIHBvd2VyZG9tYWluIEBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyByZXRlbnRpb24uCisgKiBUaGlzIHdpbGwgYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyCisgKiBzdGF0ZSBpcyBub3Qgbm90IHN1cHBvcnRlZCwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCkKIHsKQEAgLTc5Niw3ICs1MjgsNyBAQAogCSAqLwogCXBybV9ybXdfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0xPR0lDTDFDQUNIRVJFVFNUQVRFLAogCQkJICAgICAocHdyc3QgPDwgX19mZnMoT01BUDM0MzBfTE9HSUNMMUNBQ0hFUkVUU1RBVEUpKSwKLQkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCQkJCSBwd3JkbS0+cHJjbV9vZmZzLCBwd3JzdGN0cmxfcmVnX29mZnMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MDcsMTMgKzUzOSwxNCBAQAogICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKICAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcwogICoKLSAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCi0gKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgT04gc3RhdGUuICBCYW5rCi0gKiB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMgb2YKLSAqIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKLSAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKLSAqIHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rCi0gKiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICogU2V0IHRoZSBuZXh0IHBvd2VyIHN0YXRlIEBwd3JzdCB0aGF0IG1lbW9yeSBiYW5rIEBiYW5rIG9mIHRoZQorICogcG93ZXJkb21haW4gQHB3cmRtIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHRoZSBPTgorICogc3RhdGUuICBAYmFuayB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZgorICogdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdAorICogbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeQorICogYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9tZW1fb25zdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCkKIHsKQEAgLTgzOSwxNiArNTcyLDE5IEBACiAJICovCiAJc3dpdGNoIChiYW5rKSB7CiAJY2FzZSAwOgotCQltID0gT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRPTlNUQVRFX01BU0s7CisJCW0gPSBPTUFQX01FTTBfT05TVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0s7CisJCW0gPSBPTUFQX01FTTFfT05TVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCW0gPSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVE9OU1RBVEVfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMl9PTlNUQVRFX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJbSA9IE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSzsKKwkJbSA9IE9NQVBfTUVNM19PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJbSA9IE9NQVBfTUVNNF9PTlNUQVRFX01BU0s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTg1Niw3ICs1OTIsNyBAQAogCX0KIAogCXBybV9ybXdfbW9kX3JlZ19iaXRzKG0sIChwd3JzdCA8PCBfX2ZmcyhtKSksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtODY3LDE0ICs2MDMsMTUgQEAKICAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgdG8gc2V0ICgwLTMpCiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIG5leHQgcG93ZXIgc3RhdGUgdGhhdCBtZW1vcnkgYmFuayB4IG9mIHRoZSBwb3dlcmRvbWFpbgotICogcHdyZG0gd2lsbCBlbnRlciB3aGVuIHRoZSBwb3dlcmRvbWFpbiBlbnRlcnMgdGhlIFJFVEVOVElPTiBzdGF0ZS4KLSAqIEJhbmsgd2lsbCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMywgYW5kIHJlcHJlc2VudHMgZGlmZmVyZW50IHR5cGVzCi0gKiBvZiBtZW1vcnksIGRlcGVuZGluZyBvbiB0aGUgcG93ZXJkb21haW4uICBwd3JzdCB3aWxsIGJlIGVpdGhlcgotICogUkVURU5USU9OIG9yIE9GRiwgaWYgc3VwcG9ydGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCi0gKiBwb2ludGVyIGlzIG51bGwgb3IgdGhlIHRhcmdldCBwb3dlciBzdGF0ZSBpcyBub3Qgbm90IHN1cHBvcnRlZCBmb3IKLSAqIHRoaXMgbWVtb3J5IGJhbmssIC1FRVhJU1QgaWYgdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdAotICogb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSBAcHdyc3QgdGhhdCBtZW1vcnkgYmFuayBAYmFuayBvZiB0aGUKKyAqIHBvd2VyZG9tYWluIEBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUKKyAqIFJFVEVOVElPTiBzdGF0ZS4gIEJhbmsgd2lsbCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMywgYW5kIHJlcHJlc2VudHMKKyAqIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGRlcGVuZGluZyBvbiB0aGUgcG93ZXJkb21haW4uICBAcHdyc3QKKyAqIHdpbGwgYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMgLUVJTlZBTCBpZgorICogdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdAorICogbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeQorICogYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpCiB7CkBAIC05MDAsMTYgKzYzNywxOSBAQAogCSAqLwogCXN3aXRjaCAoYmFuaykgewogCWNhc2UgMDoKLQkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEU7CisJCW0gPSBPTUFQX01FTTBfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQltID0gT01BUDM0MzBfTDFGTEFUTUVNUkVUU1RBVEU7CisJCW0gPSBPTUFQX01FTTFfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQltID0gT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRSRVRTVEFURTsKKwkJbSA9IE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURTsKKwkJbSA9IE9NQVBfTUVNM19SRVRTVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDQ6CisJCW0gPSBPTUFQX01FTTRfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwpAQCAtOTE3LDcgKzY1Nyw3IEBACiAJfQogCiAJcHJtX3Jtd19tb2RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwgcHdyZG0tPnByY21fb2ZmcywKLQkJCSAgICAgUE1fUFdTVENUUkwpOworCQkJICAgICBwd3JzdGN0cmxfcmVnX29mZnMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMjcgKzY2NiwyNyBAQAogICogcHdyZG1fcmVhZF9sb2dpY19wd3JzdCAtIGdldCBjdXJyZW50IHBvd2VyZG9tYWluIGxvZ2ljIHJldGVudGlvbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgY3VycmVudCBsb2dpYyByZXRlbnRpb24gcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZgotICogcG93ZXJkb21haW4gcHdyZG0gd2lsbCBlbnRlcgotICogUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUKLSAqIGN1cnJlbnQgbG9naWMgcmV0ZW50aW9uIHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KKyAqIFJldHVybiB0aGUgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiBwb3dlcmRvbWFpbiBAcHdyZG0KKyAqIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHJldGVudGlvbi4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBsb2dpYyByZXRlbnRpb24KKyAqIHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3JlYWRfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QsCi0JCQkJCU9NQVAzNDMwX0xPR0lDU1RBVEVTVCk7CisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJIHB3cnN0c3RfcmVnX29mZnMsIE9NQVAzNDMwX0xPR0lDU1RBVEVTVCk7CiB9CiAKIC8qKgogICogcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0IC0gZ2V0IHByZXZpb3VzIHBvd2VyZG9tYWluIGxvZ2ljIHBvd2VyIHN0YXRlCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBwcmV2aW91cyBsb2dpYyBwb3dlciBzdGF0ZQogICoKLSAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gcHdyZG0ncyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAotICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBwcmV2aW91cyBsb2dpYwotICogcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBwcmV2aW91cyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBwcmV2aW91cworICogbG9naWMgcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CkBAIC05NjQsMTIgKzcwNCwzNSBAQAogfQogCiAvKioKKyAqIHB3cmRtX3JlYWRfbG9naWNfcmV0c3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBsb2dpYyBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgbmV4dCBsb2dpYyBwb3dlciBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gcHdyZG0ncyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBuZXh0IGxvZ2ljCisgKiBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQorCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCisJICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCisJICogcG93ZXJkb21haW4uCisJICovCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2ZmcywKKwkJCQkJT01BUDM0MzBfTE9HSUNTVEFURVNUKTsKK30KKworLyoqCiAgKiBwd3JkbV9yZWFkX21lbV9wd3JzdCAtIGdldCBjdXJyZW50IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBjdXJyZW50IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCiAgKiBAYmFuazogbWVtb3J5IGJhbmsgbnVtYmVyICgwLTMpCiAgKgotICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGN1cnJlbnQgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCi0gKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gQHB3cmRtJ3MgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgZm9yIGJhbmsKKyAqIEBiYW5rLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKICAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKICAqIHJldHVybnMgdGhlIGN1cnJlbnQgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtOTk0LDIzICs3NTcsMjcgQEAKIAkgKi8KIAlzd2l0Y2ggKGJhbmspIHsKIAljYXNlIDA6Ci0JCW0gPSBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVFNUQVRFU1RfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMF9TVEFURVNUX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJbSA9IE9NQVAzNDMwX0wxRkxBVE1FTVNUQVRFU1RfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMV9TVEFURVNUX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQltID0gT01BUF9NRU0yX1NUQVRFU1RfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQltID0gT01BUDM0MzBfTDJGTEFUTUVNU1RBVEVTVF9NQVNLOworCQltID0gT01BUF9NRU0zX1NUQVRFU1RfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQltID0gT01BUF9NRU00X1NUQVRFU1RfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKLQlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVFNULCBtKTsKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKKwkJCQkJIHB3cnN0c3RfcmVnX29mZnMsIG0pOwogfQogCiAvKioKQEAgLTEwMTgsMTAgKzc4NSwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKICAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCi0gKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKLSAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKLSAqIHJldHVybnMgdGhlIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIEBwd3JkbSdzIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSBmb3IKKyAqIGJhbmsgQGJhbmsuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwKKyAqIC1FRVhJU1QgaWYgdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QKKyAqIGNvbnRyb2xsYWJsZSwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24KKyAqIHN1Y2Nlc3MuCiAgKi8KIGludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCiB7CkBAIC0xMDY1LDEzICs4MzMsNjMgQEAKIH0KIAogLyoqCisgKiBwd3JkbV9yZWFkX21lbV9yZXRzdCAtIGdldCBuZXh0IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBtZXh0IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCisgKiBAYmFuazogbWVtb3J5IGJhbmsgbnVtYmVyICgwLTMpCisgKgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIG5leHQgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCisgKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKKyAqIHJldHVybnMgdGhlIG5leHQgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwd3JkbS0+YmFua3MgPCAoYmFuayArIDEpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlzd2l0Y2ggKGJhbmspIHsKKwljYXNlIDA6CisJCW0gPSBPTUFQX01FTTBfUkVUU1RBVEVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltID0gT01BUF9NRU0xX1JFVFNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQltID0gT01BUF9NRU00X1JFVFNUQVRFX01BU0s7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKKwkJCQkJcHdyc3RjdHJsX3JlZ19vZmZzLCBtKTsKK30KKworLyoqCiAgKiBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdCAtIGNsZWFyIHByZXZpb3VzIHBvd2Vyc3RhdGUgcmVnaXN0ZXIgZm9yIGEgcHdyZG0KICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gY2xlYXIKICAqCi0gKiBDbGVhciB0aGUgcG93ZXJkb21haW4ncyBwcmV2aW91cyBwb3dlciBzdGF0ZSByZWdpc3Rlci4gIENsZWFycyB0aGUKLSAqIGVudGlyZSByZWdpc3RlciwgaW5jbHVkaW5nIGxvZ2ljIGFuZCBtZW1vcnkgYmFuayBwcmV2aW91cyBwb3dlciBzdGF0ZXMuCi0gKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwgb3IgcmV0dXJucyAwIHVwb24KLSAqIHN1Y2Nlc3MuCisgKiBDbGVhciB0aGUgcG93ZXJkb21haW4ncyBwcmV2aW91cyBwb3dlciBzdGF0ZSByZWdpc3RlciBAcHdyZG0uCisgKiBDbGVhcnMgdGhlIGVudGlyZSByZWdpc3RlciwgaW5jbHVkaW5nIGxvZ2ljIGFuZCBtZW1vcnkgYmFuaworICogcHJldmlvdXMgcG93ZXIgc3RhdGVzLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyCisgKiBpcyBudWxsLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fY2xlYXJfYWxsX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKQEAgLTEwOTYsMTEgKzkxNCwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKICAqIEVuYWJsZSBhdXRvbWF0aWMgY29udGV4dCBzYXZlLWFuZC1yZXN0b3JlIHVwb24gcG93ZXIgc3RhdGUgY2hhbmdlCi0gKiBmb3Igc29tZSBkZXZpY2VzIGluIGEgcG93ZXJkb21haW4uICBXYXJuaW5nOiB0aGlzIG9ubHkgYWZmZWN0cyBhCi0gKiBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNIGNsb3NlbHkuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYgdGhlIHBvd2VyZG9tYWluCi0gKiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvciByZXR1cm5zIDAgdXBvbgotICogc3VjY2Vzcy4KKyAqIGZvciBzb21lIGRldmljZXMgaW4gdGhlIHBvd2VyZG9tYWluIEBwd3JkbS4gIFdhcm5pbmc6IHRoaXMgb25seQorICogYWZmZWN0cyBhIHN1YnNldCBvZiBkZXZpY2VzIGluIGEgcG93ZXJkb21haW47IGNoZWNrIHRoZSBUUk0KKyAqIGNsb3NlbHkuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciBpZgorICogdGhlIHBvd2VyZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgYXV0b21hdGljIHNhdmUtYW5kLXJlc3RvcmUsIG9yCisgKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CkBAIC0xMTE0LDcgKzkzMiw3IEBACiAJCSBwd3JkbS0+bmFtZSk7CiAKIAlwcm1fcm13X21vZF9yZWdfYml0cygwLCAxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAotCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjQsMTEgKzk0MiwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKICAqIERpc2FibGUgYXV0b21hdGljIGNvbnRleHQgc2F2ZS1hbmQtcmVzdG9yZSB1cG9uIHBvd2VyIHN0YXRlIGNoYW5nZQotICogZm9yIHNvbWUgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluLiAgV2FybmluZzogdGhpcyBvbmx5IGFmZmVjdHMgYQotICogc3Vic2V0IG9mIGRldmljZXMgaW4gYSBwb3dlcmRvbWFpbjsgY2hlY2sgdGhlIFRSTSBjbG9zZWx5LiAgUmV0dXJucwotICogLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIGlmIHRoZSBwb3dlcmRvbWFpbgotICogZG9lcyBub3Qgc3VwcG9ydCBhdXRvbWF0aWMgc2F2ZS1hbmQtcmVzdG9yZSwgb3IgcmV0dXJucyAwIHVwb24KLSAqIHN1Y2Nlc3MuCisgKiBmb3Igc29tZSBkZXZpY2VzIGluIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0uICBXYXJuaW5nOiB0aGlzIG9ubHkKKyAqIGFmZmVjdHMgYSBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNCisgKiBjbG9zZWx5LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYKKyAqIHRoZSBwb3dlcmRvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvcgorICogcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKQEAgLTExNDIsNyArOTYwLDcgQEAKIAkJIHB3cmRtLT5uYW1lKTsKIAogCXBybV9ybXdfbW9kX3JlZ19iaXRzKDEgPDwgT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsIDAsCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE1MSw3ICs5NjksNyBAQAogICogcHdyZG1faGFzX2hkd3Jfc2FyIC0gdGVzdCB3aGV0aGVyIHBvd2VyZG9tYWluIHN1cHBvcnRzIGhhcmR3YXJlIFNBUgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKLSAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiAncHdyZG0nIHN1cHBvcnRzIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUKKyAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiBAcHdyZG0gc3VwcG9ydHMgaGFyZHdhcmUgc2F2ZS1hbmQtcmVzdG9yZQogICogZm9yIHNvbWUgZGV2aWNlcywgb3IgMCBpZiBpdCBkb2VzIG5vdC4KICAqLwogYm9vbCBwd3JkbV9oYXNfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKQEAgLTExNjMsNyArOTgxLDcgQEAKICAqIHB3cmRtX3dhaXRfdHJhbnNpdGlvbiAtIHdhaXQgZm9yIHBvd2VyZG9tYWluIHBvd2VyIHRyYW5zaXRpb24gdG8gZmluaXNoCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHdhaXQgZm9yCiAgKgotICogSWYgdGhlIHBvd2VyZG9tYWluIHB3cmRtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGEgc3RhdGUgdHJhbnNpdGlvbiwKKyAqIElmIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYSBzdGF0ZSB0cmFuc2l0aW9uLAogICogc3BpbiB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIHBvd2VyIHRyYW5zaXRpb24sIG9yIHVudGlsIGFuIGl0ZXJhdGlvbgogICogYmFpbG91dCB2YWx1ZSBpcyByZWFjaGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCiAgKiBwb2ludGVyIGlzIG51bGwsIC1FQUdBSU4gaWYgdGhlIGJhaWxvdXQgdmFsdWUgd2FzIHJlYWNoZWQsIG9yCkBAIC0xMTgzLDEwICsxMDAxLDEwIEBACiAJICovCiAKIAkvKiBYWFggSXMgdGhpcyB1ZGVsYXkoKSB2YWx1ZSBtZWFuaW5nZnVsPyAqLwotCXdoaWxlICgocHJtX3JlYWRfbW9kX3JlZyhwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QpICYKKwl3aGlsZSAoKHBybV9yZWFkX21vZF9yZWcocHdyZG0tPnByY21fb2ZmcywgcHdyc3RzdF9yZWdfb2ZmcykgJgogCQlPTUFQX0lOVFJBTlNJVElPTikgJiYKIAkgICAgICAgKGMrKyA8IFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCkpCi0JCXVkZWxheSgxKTsKKwkJCXVkZWxheSgxKTsKIAogCWlmIChjID4gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgpAQCAtMTIxMywxMiArMTAzMSw2IEBACiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLWludCBwd3JkbV9jbGtfc3RhdGVfc3dpdGNoKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoY2xrICE9IE5VTEwgJiYgY2xrLT5jbGtkbSAhPSBOVUxMKQotCQlyZXR1cm4gcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsay0+Y2xrZG0pOwotCXJldHVybiAtRUlOVkFMOwotfQogCiBpbnQgcHdyZG1fcHJlX3RyYW5zaXRpb24odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCmluZGV4IDA1N2IyZTMuLjEwNWNiY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPTUFQMi8zIGNvbW1vbiBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy04IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CiAgKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgpAQCAtMTIsMjYgKzEyLDIxIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisvKgorICogVG8gRG8gTGlzdAorICogLT4gTW92ZSB0aGUgU2xlZXAvV2FrZXVwIGRlcGVuZGVuY2llcyBmcm9tIFBvd2VyIERvbWFpbiBmcmFtZXdvcmsgdG8KKyAqICAgIENsb2NrIERvbWFpbiBGcmFtZXdvcmsKKyAqLworCiAjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TCiAjZGVmaW5lIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TCiAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBwb3dlcmRvbWFpbnMgdGhhdCBoYXZlIHNvbWUgZWxlbWVudAotICogb2Ygc29mdHdhcmUgY29udHJvbCBmb3IgdGhlIE9NQVAyNHh4IGFuZCBPTUFQMzRYWCBjaGlwcy4KLSAqCi0gKiBBIGZldyBub3RlczoKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0eHggY2hpcHMuCiAgKgogICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKICAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgotICoKLSAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IHBvd2VyZG9tYWluOgotICogQW55IHBvd2VyZG9tYWluIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkKLSAqIG11c3QgaGF2ZSBhIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseQotICoganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQotICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCi0gKgotICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQotICoKICAqLwogCiAvKgpAQCAtNDEsMjYgKzM2LDE3IEBACiAgKgogICogT24gdGhlIDI0MjAsIHRoaXMgaXMgYSAnQzU1IERTUCBjYWxsZWQsIHNpbXBseSwgdGhlIERTUC4gIEl0cwogICogcG93ZXJkb21haW4gaXMgY2FsbGVkIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iICBPbiB0aGUgMjQzMCwgdGhlCi0gKiBvbi1ib2FyZCBEU1AgaXMgYSAnQzY0IERTUCwgbm93IGNhbGxlZCB0aGUgSVZBMiBvciBJVkEyLjEuICBJdHMKLSAqIHBvd2VyZG9tYWluIGlzIHN0aWxsIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIglPbiB0aGUgMzQzMCwKLSAqIHRoZSBEU1AgaXMgYSAnQzY0IERTUCBsaWtlIHRoZSAyNDMwLCBhbHNvIGtub3duIGFzIHRoZSBJVkEyOyBidXQKLSAqIGl0cyBwb3dlcmRvbWFpbiBpcyBub3cgY2FsbGVkIHRoZSAiSVZBMiBwb3dlciBkb21haW4uIgorICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgKGFsb25nIHdpdGggaXRzIGhhcmR3YXJlCisgKiBhY2NlbGVyYXRvcnMpIHRoZSBJVkEyIG9yIElWQTIuMS4gIEl0cyBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQKKyAqIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iIE9uIHRoZSAzNDMwLCB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUKKyAqIDI0MzAsIGFsc28ga25vd24gYXMgdGhlIElWQTI7IGJ1dCBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUKKyAqICJJVkEyIHBvd2VyIGRvbWFpbi4iCiAgKgogICogVGhlIDI0MjAgYWxzbyBoYXMgc29tZXRoaW5nIGNhbGxlZCB0aGUgSVZBLCB3aGljaCBpcyBhIHNlcGFyYXRlIEFSTQogICogY29yZSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIERTUC9JVkEyLgogICoKICAqIElkZWFsbHkgdGhlIERTUC9JVkEyIGNvdWxkIGp1c3QgYmUgdGhlIHNhbWUgcG93ZXJkb21haW4sIGJ1dCB0aGUgUFJDTQogICogYWRkcmVzcyBvZmZzZXQgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIEM1NSBhbmQgQzY0IERTUHMuCi0gKgotICogVGhlIG92ZXJseS1zcGVjaWZpYyBkZXBfYml0IG5hbWVzIGFyZSBkdWUgdG8gYSBiaXQgbmFtZSBjb2xsaXNpb24KLSAqIHdpdGggQ01fRkNMS0VOX3tEU1AsSVZBMn0uICBUaGUgRFNQL0lWQTIgUE1fV0tERVAgYW5kIENNX1NMRUVQREVQIHNoaWZ0Ci0gKiB2YWx1ZSBhcmUgdGhlIHNhbWUgZm9yIGFsbCBwb3dlcmRvbWFpbnM6IDIKLSAqLwotCi0vKgotICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2UgY2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQotICogc2FuaXR5IGNoZWNrPwotICogWFhYIGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0MzAgQ09SRQogICovCiAKICNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CkBAIC02OCw2OSArNTQsMjMgQEAKICNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgImNtLmgiCi0KLS8qIE9NQVAyLzMtY29tbW9uIHBvd2VyZG9tYWlucyBhbmQgd2FrZXVwIGRlcGVuZGVuY2llcyAqLwotCi0vKgotICogMjQyMC8yNDMwIFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQCi0gKiAzNDMwRVMxIFBNX1dLREVQX0dGWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKLSAqIDM0MzBFUzIgUE1fV0tERVBfU0dYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBnZnhfc2d4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKLQkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8Ci0JCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMzQzMDogQ01fU0xFRVBERVBfQ0FNOiBNUFUKLSAqIDM0MzBFUzE6IENNX1NMRUVQREVQX0dGWDogTVBVCi0gKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9TR1g6IE1QVQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBjYW1fZ2Z4X3NsZWVwZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLQogI2luY2x1ZGUgInBvd2VyZG9tYWluczI0eHguaCIKICNpbmNsdWRlICJwb3dlcmRvbWFpbnMzNHh4LmgiCisjaW5jbHVkZSAicG93ZXJkb21haW5zNDR4eC5oIgogCisvKiBPTUFQMi8zLWNvbW1vbiBwb3dlcmRvbWFpbnMgKi8KIAotLyoKLSAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWlucwotICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAogLyoKICAqIFRoZSBHRlggcG93ZXJkb21haW4gaXMgbm90IHByZXNlbnQgb24gMzQzMEVTMiwgYnV0IGN1cnJlbnRseSB3ZSBkbyBub3QKICAqIGhhdmUgYSBtYWNybyB0byBmaWx0ZXIgaXQgb3V0IGF0IGNvbXBpbGUtdGltZS4KICAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfcHdyZG0gPSB7CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGdmeF9vbWFwMl9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJnZnhfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IEdGWF9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8CiAJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzEpLAotCS53a2RlcF9zcmNzCSAgPSBnZnhfc2d4X3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gY2FtX2dmeF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0xNDIsMjIgKzgyLDI0IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gd2t1cF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gd2t1cF9vbWFwMl9wd3JkbSA9IHsKIAkubmFtZQkJPSAid2t1cF9wd3JkbSIsCiAJLnByY21fb2Zmcwk9IFdLVVBfTU9ELAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCi0JLmRlcF9iaXQJPSBPTUFQX0VOX1dLVVBfU0hJRlQsCiB9OwogCisjZW5kaWYKIAogCiAvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXBbXSBfX2luaXRkYXRhID0gewogCi0JJmdmeF9wd3JkbSwKLQkmd2t1cF9wd3JkbSwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCSZ3a3VwX29tYXAyX3B3cmRtLAorCSZnZnhfb21hcDJfcHdyZG0sCisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkmZHNwX3B3cmRtLAogCSZtcHVfMjR4eF9wd3JkbSwKIAkmY29yZV8yNHh4X3B3cmRtLApAQCAtMTY3LDEyICsxMDksMTIgQEAKIAkmbWRtX3B3cmRtLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAJJml2YTJfcHdyZG0sCi0JJm1wdV8zNHh4X3B3cmRtLAorCSZtcHVfM3h4eF9wd3JkbSwKIAkmbmVvbl9wd3JkbSwKLQkmY29yZV8zNHh4X3ByZV9lczNfMV9wd3JkbSwKLQkmY29yZV8zNHh4X2VzM18xX3B3cmRtLAorCSZjb3JlXzN4eHhfcHJlX2VzM18xX3B3cmRtLAorCSZjb3JlXzN4eHhfZXMzXzFfcHdyZG0sCiAJJmNhbV9wd3JkbSwKIAkmZHNzX3B3cmRtLAogCSZwZXJfcHdyZG0sCkBAIC0xODYsNiArMTI4LDI0IEBACiAJJmRwbGw1X3B3cmRtLAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCSZjb3JlXzQ0eHhfcHdyZG0sCisJJmdmeF80NHh4X3B3cmRtLAorCSZhYmVfNDR4eF9wd3JkbSwKKwkmZHNzXzQ0eHhfcHdyZG0sCisJJnRlc2xhXzQ0eHhfcHdyZG0sCisJJndrdXBfNDR4eF9wd3JkbSwKKwkmY3B1MF80NHh4X3B3cmRtLAorCSZjcHUxXzQ0eHhfcHdyZG0sCisJJmVtdV80NHh4X3B3cmRtLAorCSZtcHVfNDR4eF9wd3JkbSwKKwkmaXZhaGRfNDR4eF9wd3JkbSwKKwkmY2FtXzQ0eHhfcHdyZG0sCisJJmwzaW5pdF80NHh4X3B3cmRtLAorCSZsNHBlcl80NHh4X3B3cmRtLAorCSZhbHdheXNfb25fY29yZV80NHh4X3B3cmRtLAorCSZjZWZ1c2VfNDR4eF9wd3JkbSwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKaW5kZXggYmQyNDlhNC4uNzc1MDkzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMjRYWCBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKICAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCkBAIC0zMCw4MyArMzAsNyBAQAogCiAvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAotCi0KLS8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KLQotLyoKLSAqIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUAotICogMjQzMCBQTV9XS0RFUF9NRE06IHNhbWUgYXMgYWJvdmUKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgZHNwX21kbV8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAotICogMjQzMCBhZGRzIE1ETQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibWRtX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKLSAqIDI0MzAgYWRkcyBNRE0KLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImdmeF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtZG1fcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAKIC8qIFBvd2VyZG9tYWlucyAqLwogCkBAIC0xMTQsOCArMzgsNiBAQAogCS5uYW1lCQkgID0gImRzcF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDI0WFhfRFNQX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLQkuZGVwX2JpdAkgID0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKQEAgLTEzMSw4ICs1Myw2IEBACiAJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAotCS5kZXBfYml0CSAgPSBPTUFQMjRYWF9FTl9NUFVfU0hJRlQsCi0JLndrZGVwX3NyY3MJICA9IG1wdV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuYmFua3MJCSAgPSAxLApAQCAtMTQ4LDkgKzY4LDcgQEAKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLQkud2tkZXBfc3JjcwkgID0gY29yZV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCiAJLmJhbmtzCQkgID0gMywKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKIAkJWzBdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0xUkVUU1RBVEUgKi8KQEAgLTE2NCw3ICs4Miw3IEBACiAJfSwKIH07CiAKLSNlbmRpZgkgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworI2VuZGlmCSAgIC8qIENPTkZJR19BUkNIX09NQVAyICovCiAKIAogCkBAIC0xNzYsMTMgKzk0LDEwIEBACiAKIC8qIFhYWCAyNDMwIEtJTExET01BSU5XS1VQIGJpdD8gIE5vIGN1cnJlbnQgdXNlcnMgYXBwYXJlbnRseSAqLwogCi0vKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0gewogCS5uYW1lCQkgID0gIm1kbV9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLQkuZGVwX2JpdAkgID0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKaW5kZXggNTg4ZjdlMC4uYmQ4NzExMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKQEAgLTEsOCArMSw4IEBACiAvKgotICogT01BUDM0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqIE9NQVAzIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICogRGVidWdnaW5nIGFuZCBpbnRlZ3JhdGlvbiBmaXhlcyBieSBKb3VuaSBIw7ZnYW5kZXIKQEAgLTMyLDEyOCArMzIsNyBAQAogICogMzRYWC1zcGVjaWZpYyBwb3dlcmRvbWFpbnMsIGRlcGVuZGVuY2llcwogICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAotCi0vKgotICogMzQzMDogUE1fV0tERVBfe1BFUixVU0JIT1NUfTogQ09SRSwgSVZBMiwgTVBVLCBXS1VQCi0gKiAoVVNCSE9TVCBpcyBFUzIgb25seSkKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgcGVyX3VzYmhvc3Rfd2tkZXBzW10gPSB7Ci0JewotCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyoKLSAqIDM0MzAgUE1fV0tERVBfTVBVOiBDT1JFLCBJVkEyLCBEU1MsIFBFUgotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMzR4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJkc3NfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAicGVyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgaXZhMl93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNzX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gInBlcl9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0KLS8qIDM0MzAgUE1fV0tERVBfe0NBTSxEU1N9OiBJVkEyLCBNUFUsIFdLVVAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9kc3Nfd2tkZXBzW10gPSB7Ci0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJ3a3VwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qIDM0MzA6IFBNX1dLREVQX05FT046IE1QVSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgbmVvbl93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0KLS8qIFNsZWVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyBmb3IgMzR4eC1zcGVjaWZpYyBwd3JkbXMgLSAzNFhYIG9ubHkgKi8KLQotLyoKLSAqIDM0MzA6IENNX1NMRUVQREVQX3tEU1MsUEVSfTogTVBVLCBJVkEKLSAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1VTQkhPU1Q6IE1QVSwgSVZBCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogCiAvKgogICogUG93ZXJkb21haW5zCkBAIC0xNjMsOCArNDIsNiBAQAogCS5uYW1lCQkgID0gIml2YTJfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX0lWQTJfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gaXZhMl93a2RlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmJhbmtzCQkgID0gNCwKQEAgLTE4MiwxMiArNTksMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMzR4eF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzN4eHhfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9NUFVfU0hJRlQsCi0JLndrZGVwX3NyY3MJICA9IG1wdV8zNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfTVBVX1FVSVJLLApAQCAtMjAwLDE1ICs3NSwxNCBAQAogCX0sCiB9OwogCi0vKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfcHJlX2VzM18xX3B3cmRtID0geworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzN4eHhfcHJlX2VzM18xX3B3cmRtID0gewogCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEgfAogCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMyIHwKIAkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTM18wKSwKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX0NPUkVfU0hJRlQsCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuYmFua3MJCSAgPSAyLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewogCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLwpAQCAtMjIwLDEzICs5NCwxMiBAQAogCX0sCiB9OwogCi0vKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfZXMzXzFfcHdyZG0gPSB7CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfM3h4eF9lczNfMV9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMzXzEpLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5mbGFncwkJICA9IFBXUkRNX0hBU19IRFdSX1NBUiwgLyogZm9yIFVTQlRMTCBvbmx5ICovCiAJLmJhbmtzCQkgID0gMiwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKQEAgLTIzOSwxNCArMTEyLDEwIEBACiAJfSwKIH07CiAKLS8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX0RTUyAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiZHNzX3B3cmRtIiwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9EU1NfTU9ELAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fRFNTX1NISUZULAotCS53a2RlcF9zcmNzCSAgPSBjYW1fZHNzX3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKQEAgLTI2Nyw4ICsxMzYsNiBAQAogCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLQkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAogCS8qIFhYWCBUaGlzIGlzIGFjY3VyYXRlIGZvciAzNDMwIFNHWCwgYnV0IHdoYXQgYWJvdXQgR0ZYPyAqLwogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULApAQCAtMjg1LDggKzE1Miw2IEBACiAJLm5hbWUJCSAgPSAiY2FtX3B3cmRtIiwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9DQU1fTU9ELAotCS53a2RlcF9zcmNzCSAgPSBjYW1fZHNzX3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gY2FtX2dmeF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0zMDIsOSArMTY3LDYgQEAKIAkubmFtZQkJICA9ICJwZXJfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX1BFUl9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi0JLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX1BFUl9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gcGVyX3VzYmhvc3Rfd2tkZXBzLAotCS5zbGVlcGRlcF9zcmNzCSAgPSBkc3NfcGVyX3VzYmhvc3Rfc2xlZXBkZXBzLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0zMjYsNyArMTg4LDYgQEAKIAkubmFtZQkJICA9ICJuZW9uX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9ORU9OX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLQkud2tkZXBfc3JjcwkgID0gbmVvbl93a2RlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogfTsKQEAgLTMzNSw4ICsxOTYsNiBAQAogCS5uYW1lCQkgID0gInVzYmhvc3RfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAotCS53a2RlcF9zcmNzCSAgPSBwZXJfdXNiaG9zdF93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJICA9IGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS8qCkBAIC0zODYsNyArMjQ1LDcgQEAKIH07CiAKIAotI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisjZW5kaWYgICAgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMTUxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zNDR4eC5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogT01BUDQgUG93ZXIgZG9tYWlucyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlM0NFhYX0gKKworI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCisvKiBjb3JlXzQ0eHhfcHdyZG06IENPUkUgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQ09SRV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSA1LAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBjb3JlX25yZXRfYmFuayAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY29yZV9vY21yYW0gKi8KKwkJWzJdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBjb3JlX290aGVyX2JhbmsgKi8KKwkJWzNdID0gUFdSU1RTX09GRl9SRVQsCS8qIGR1Y2F0aV9sMnJhbSAqLworCQlbNF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogZHVjYXRpX3VuaWNhY2hlICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNvcmVfbnJldF9iYW5rICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjb3JlX29jbXJhbSAqLworCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogY29yZV9vdGhlcl9iYW5rICovCisJCVszXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBkdWNhdGlfbDJyYW0gKi8KKwkJWzRdID0gUFdSRE1fUE9XRVJfT04sCS8qIGR1Y2F0aV91bmljYWNoZSAqLworCX0sCit9OworCisvKiBnZnhfNDR4eF9wd3JkbTogM0QgYWNjZWxlcmF0b3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGdmeF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImdmeF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0dGWF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZ2Z4X21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBnZnhfbWVtICovCisJfSwKK307CisKKy8qIGFiZV80NHh4X3B3cmRtOiBBdWRpbyBiYWNrIGVuZCBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gYWJlXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiYWJlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQUJFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9PRkYsCisJLmJhbmtzCQkgID0gMiwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogYWVzc21lbSAqLworCQlbMV0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHBlcmlwaG1lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBhZXNzbWVtICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBwZXJpcGhtZW0gKi8KKwl9LAorfTsKKworLyogZHNzXzQ0eHhfcHdyZG06IERpc3BsYXkgc3Vic3lzdGVtIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJkc3NfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9EU1NfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGRzc19tZW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZHNzX21lbSAqLworCX0sCit9OworCisvKiB0ZXNsYV80NHh4X3B3cmRtOiBUZXNsYSBwcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHRlc2xhXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAidGVzbGFfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogdGVzbGFfZWRtYSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGVzbGFfbDEgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRlc2xhX2wyICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2VkbWEgKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2wxICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0ZXNsYV9sMiAqLworCX0sCit9OworCisvKiB3a3VwXzQ0eHhfcHdyZG06IFdha2UtdXAgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHdrdXBfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJ3a3VwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fV0tVUF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUkRNX1BPV0VSX09OLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHdrdXBfYmFuayAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB3a3VwX2JhbmsgKi8KKwl9LAorfTsKKworLyogY3B1MF80NHh4X3B3cmRtOiBNUFUwIHByb2Nlc3NvciBhbmQgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY3B1MF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNwdTBfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY3B1MF9sMSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjcHUwX2wxICovCisJfSwKK307CisKKy8qIGNwdTFfNDR4eF9wd3JkbTogTVBVMSBwcm9jZXNzb3IgYW5kIE5lb24gY29wcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNwdTFfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjcHUxX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9DSElST05TU19DSElST05TU19DUFUxX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNwdTFfbDEgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogY3B1MV9sMSAqLworCX0sCit9OworCisvKiBlbXVfNDR4eF9wd3JkbTogRW11bGF0aW9uIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJlbXVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9FTVVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGVtdV9iYW5rICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGVtdV9iYW5rICovCisJfSwKK307CisKKy8qIG1wdV80NHh4X3B3cmRtOiBNb2RlbmEgcHJvY2Vzc29yIGFuZCB0aGUgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fTVBVX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAzLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIG1wdV9sMSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogbXB1X2wyICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogbXB1X3JhbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBtcHVfbDEgKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIG1wdV9sMiAqLworCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogbXB1X3JhbSAqLworCX0sCit9OworCisvKiBpdmFoZF80NHh4X3B3cmRtOiBJVkEtSEQgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGl2YWhkXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiaXZhaGRfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9JVkFIRF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfT0ZGLAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGh3YV9tZW0gKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIHNsMl9tZW0gKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRjbTFfbWVtICovCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAkvKiB0Y20yX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBod2FfbWVtICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBzbDJfbWVtICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0Y20xX21lbSAqLworCQlbM10gPSBQV1JETV9QT1dFUl9PTiwJLyogdGNtMl9tZW0gKi8KKwl9LAorfTsKKworLyogY2FtXzQ0eHhfcHdyZG06IENhbWVyYSBzdWJzeXN0ZW0gcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNhbV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0NBTV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogY2FtX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjYW1fbWVtICovCisJfSwKK307CisKKy8qIGwzaW5pdF80NHh4X3B3cmRtOiBMMyBpbml0YXRvcnMgcGhlcmlwaGVyYWxzIHBvd2VyIGRvbWFpbiAgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbDNpbml0XzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibDNpbml0X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBsM2luaXRfYmFuazEgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogbDNpbml0X2JhbmsxICovCisJfSwKK307CisKKy8qIGw0cGVyXzQ0eHhfcHdyZG06IFRhcmdldCBwZXJpcGhlcmFscyBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbDRwZXJfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJsNHBlcl9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBub25yZXRhaW5lZF9iYW5rICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogcmV0YWluZWRfYmFuayAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBub25yZXRhaW5lZF9iYW5rICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiByZXRhaW5lZF9iYW5rICovCisJfSwKK307CisKKy8qCisgKiBhbHdheXNfb25fY29yZV80NHh4X3B3cmRtOiBBbHdheXMgT04gbG9naWMgdGhhdCBzaXRzIGluIFZERF9DT1JFIHZvbHRhZ2UKKyAqIGRvbWFpbgorICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGFsd2F5c19vbl9jb3JlXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiYWx3YXlzX29uX2NvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JETV9QT1dFUl9PTiwKK307CisKKy8qIGNlZnVzZV80NHh4X3B3cmRtOiBDdXN0b21lciBlZnVzZSBjb250cm9sbGVyIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjZWZ1c2VfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjZWZ1c2VfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcG93ZXIgZG9tYWlucyBhcmUgbm90IHVuZGVyIFNXIGNvbnRyb2wKKyAqCisgKiBhbHdheXNfb25faXZhCisgKiBhbHdheXNfb25fbXB1CisgKiBzdGRlZnVzZQorICovCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCA2MWFjMmE0Li45MGY2MDNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC0xMTksNiArMTE5LDE1IEBACiAjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ECQkweDA0MDAKICNkZWZpbmUgT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMV9NT0QJCTB4MDgwMAogCisvKiBCYXNlIEFkZHJlc3NlcyBmb3IgdGhlIE9NQVA0ICovCisKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0JBU0UJCTB4NGEwMDQwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0JBU0UJCTB4NGEwMDgwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0JBU0UJCTB4NGEzMDYwMDAKKyNkZWZpbmUgT01BUDQ0MzBfU0NSTV9CQVNFCQkweDRhMzBhMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0JBU0UJCTB4NDgyNDMwMDAKKworCiAvKiAyNFhYIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gQ00gJiBQUk0gcmVnaXN0ZXJzICovCiAKIC8qIENNX0ZDTEtFTjFfQ09SRSwgQ01fSUNMS0VOMV9DT1JFLCBQTV9XS0VOMV9DT1JFIHNoYXJlZCBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCmluZGV4IGNmNDY2ZWEuLjgxODcyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KICAqCiAgKiBTb21lIHBpZWNlcyBvZiBjb2RlIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogVXBncmFkZWQgd2l0aCBPTUFQNCBzdXBwb3J0IGJ5IEFiaGlqaXQgUGFnYXJlIDxhYmhpaml0cGFnYXJlQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCkBAIC0xMjEsMTkgKzEyMywyNSBAQAogdTMyIG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKQogewogCS8qIFhYWCBUaGlzIHByZXN1bWFibHkgbmVlZHMgbW9kaWZpY2F0aW9uIGZvciAzNFhYICovCi0JcmV0dXJuIHBybV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIFJNX1JTVFNUKSAmIDB4N2Y7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBPTUFQMl9STV9SU1RTVCkgJiAweDdmOworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIHBybV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIE9NQVA0X1JNX1JTVFNUKSAmIDB4N2Y7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKTsKIAogLyogUmVzZXRzIGNsb2NrIHJhdGVzIGFuZCByZWJvb3RzIHRoZSBzeXN0ZW0uIE9ubHkgY2FsbGVkIGZyb20gc3lzdGVtLmggKi8KIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCXMxNiBwcmNtX29mZnM7Ci0Jb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpOworCXMxNiBwcmNtX29mZnMgPSAwOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwMnh4eF9jbGtfcHJlcGFyZV9mb3JfcmVib290KCk7CisKIAkJcHJjbV9vZmZzID0gV0tVUF9NT0Q7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXUzMiBsOwogCiAJCXByY21fb2ZmcyA9IE9NQVAzNDMwX0dSX01PRDsKQEAgLTE0NCwxMCArMTUyLDE3IEBACiAJCSAqIGNmLiBPTUFQMzR4eCBUUk0sIEluaXRpYWxpemF0aW9uIC8gU29mdHdhcmUgQm9vdGluZwogCQkgKiBDb25maWd1cmF0aW9uLiAqLwogCQlvbWFwX3dyaXRlbChsLCBPTUFQMzQzWF9TQ1JBVENIUEFEICsgNCk7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcHJjbV9vZmZzID0gT01BUDQ0MzBfUFJNX0RFVklDRV9NT0Q7CisJZWxzZQogCQlXQVJOX09OKDEpOwogCi0JcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUF9SU1RfRFBMTDMsIHByY21fb2ZmcywgUk1fUlNUQ1RSTCk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzLCBwcmNtX29mZnMsCisJCQkJCQkgT01BUDJfUk1fUlNUQ1RSTCk7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlwcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQX1JTVF9EUExMMywgcHJjbV9vZmZzLAorCQkJCQkJIE9NQVA0X1JNX1JTVENUUkwpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBfX29tYXBfcHJjbV9yZWFkKHZvaWQgX19pb21lbSAqYmFzZSwgczE2IG1vZHVsZSwgdTE2IHJlZykKQEAgLTE4OCw2ICsyMDMsMTggQEAKIAlyZXR1cm4gdjsKIH0KIAorLyogUmVhZCBhIFBSTSByZWdpc3RlciwgQU5EIGl0LCBhbmQgc2hpZnQgdGhlIHJlc3VsdCBkb3duIHRvIGJpdCAwICovCit1MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNIG1vZHVsZSAqLwogdTMyIGNtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQogewpAQCAtMjE3LDI2ICsyNDQsMjIgQEAKICAqIG9tYXAyX2NtX3dhaXRfaWRsZXN0IC0gd2FpdCBmb3IgSURMRVNUIGJpdCB0byBpbmRpY2F0ZSBtb2R1bGUgcmVhZGluZXNzCiAgKiBAcmVnOiBwaHlzaWNhbCBhZGRyZXNzIG9mIG1vZHVsZSBJRExFU1QgcmVnaXN0ZXIKICAqIEBtYXNrOiB2YWx1ZSB0byBtYXNrIGFnYWluc3QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2R1bGUgaXMgYWN0aXZlCisgKiBAaWRsZXN0OiBpZGxlIHN0YXRlIGluZGljYXRvciAoMCBvciAxKSBmb3IgdGhlIGNsb2NrCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgY2xvY2sgKGZvciBwcmludGspCiAgKgogICogUmV0dXJucyAxIGlmIHRoZSBtb2R1bGUgaW5kaWNhdGVkIHJlYWRpbmVzcyBpbiB0aW1lLCBvciAwIGlmIGl0CiAgKiBmYWlsZWQgdG8gZW5hYmxlIGluIHJvdWdobHkgTUFYX01PRFVMRV9FTkFCTEVfV0FJVCBtaWNyb3NlY29uZHMuCiAgKi8KLWludCBvbWFwMl9jbV93YWl0X2lkbGVzdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIGNvbnN0IGNoYXIgKm5hbWUpCitpbnQgb21hcDJfY21fd2FpdF9pZGxlc3Qodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1OCBpZGxlc3QsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgaSA9IDA7CiAJaW50IGVuYSA9IDA7CiAKLQkvKgotCSAqIDI0eHggdXNlcyAwIHRvIGluZGljYXRlIG5vdCByZWFkeSwgYW5kIDEgdG8gaW5kaWNhdGUgcmVhZHkuCi0JICogMzR4eCByZXZlcnNlcyB0aGlzLCBqdXN0IHRvIGtlZXAgdXMgb24gb3VyIHRvZXMKLQkgKi8KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCWVuYSA9IG1hc2s7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKGlkbGVzdCkKIAkJZW5hID0gMDsKIAllbHNlCi0JCUJVRygpOworCQllbmEgPSBtYXNrOwogCiAJLyogV2FpdCBmb3IgbG9jayAqLwogCW9tYXBfdGVzdF90aW1lb3V0KCgoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spID09IGVuYSksCkBAIC0yNTQsOSArMjc3LDE5IEBACiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKIHsKLQlwcm1fYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnBybTsKLQljbV9iYXNlID0gb21hcDJfZ2xvYmFscy0+Y207Ci0JY20yX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5jbTI7CisJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCisJaWYgKG9tYXAyX2dsb2JhbHMtPnBybSkgeworCQlwcm1fYmFzZSA9IGlvcmVtYXAob21hcDJfZ2xvYmFscy0+cHJtLCBTWl84Syk7CisJCVdBUk5fT04oIXBybV9iYXNlKTsKKwl9CisJaWYgKG9tYXAyX2dsb2JhbHMtPmNtKSB7CisJCWNtX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPmNtLCBTWl84Syk7CisJCVdBUk5fT04oIWNtX2Jhc2UpOworCX0KKwlpZiAob21hcDJfZ2xvYmFscy0+Y20yKSB7CisJCWNtMl9iYXNlID0gaW9yZW1hcChvbWFwMl9nbG9iYWxzLT5jbTIsIFNaXzhLKTsKKwkJV0FSTl9PTighY20yX2Jhc2UpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCkBAIC0yODAsNyArMzEzLDcgQEAKIAlwcmNtX2NvbnRleHQuZW11X2NtX2Nsa3NlbCA9CiAJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOwogCXByY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CiAJCQkgY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0FVVE9JRExFMik7CiAJcHJjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw0ID0KQEAgLTMzMywyMyArMzY2LDI1IEBACiAJcHJjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIgPQogCQkJIGNtX3JlYWRfbW9kX3JlZyhNUFVfTU9ELCBDTV9BVVRPSURMRTIpOwogCXByY21fY29udGV4dC5pdmEyX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQubXB1X2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC5zZ3hfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwKKwkJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmRzc19jbV9jbGtzdGN0cmwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC5jYW1fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0Lm5lb25fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfTkVPTl9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX05FT05fTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC51c2Job3N0X2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKKwkJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUxID0KIAkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0FVVE9JRExFMSk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUyID0KQEAgLTQzMiw3ICs0NjcsNyBAQAogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmVtdV9jbV9jbGtzZWwsIE9NQVAzNDMwX0VNVV9NT0QsCiAJCQkJCSBDTV9DTEtTRUwxKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9FTVVfTU9ELAotCQkJCQkgQ01fQ0xLU1RDVFJMKTsKKwkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiwgUExMX01PRCwKIAkJCQkJIENNX0FVVE9JRExFMik7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQsIFBMTF9NT0QsCkBAIC00NzgsMjIgKzUxMywyMyBAQAogCQkJCQlDTV9BVVRPSURMRTIpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIsIE1QVV9NT0QsIENNX0FVVE9JRExFMik7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQlDTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwsIE1QVV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQubXB1X2NtX2Nsa3N0Y3RybCwgTVBVX01PRCwKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2Nsa3N0Y3RybCwgQ09SRV9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuc2d4X2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBFUzJfU0dYX01PRCwKLQkJCQkJQ01fQ0xLU1RDVFJMKTsKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9EU1NfTU9ELAotCQkJCQlDTV9DTEtTVENUUkwpOworCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNhbV9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0NBTV9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJQ01fQ0xLU1RDVFJMKTsKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5uZW9uX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfTkVPTl9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9jbGtzdGN0cmwsCi0JCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUxLCBDT1JFX01PRCwKIAkJCQkJQ01fQVVUT0lETEUxKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMiwgQ09SRV9NT0QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCmluZGV4IDMwMWM4MTAuLjU5N2JlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCkBAIC0yOSw0MTIgKzI5LDQxMiBAQAogICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9BQkJPRkZfQUNUX0VYUE9SVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9BQkJPRkZfQUNUX0VYUE9SVF9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9BQ1RfRVhQT1JUX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9TTEVFUF9FWFBPUlRfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfQUJCT0ZGX1NMRUVQX0VYUE9SVF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9TTEVFUF9FWFBPUlRfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9BQkJfSVZBX0RPTkVfRU5fU0hJRlQJCQkJCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQNDQzMF9BQkJfSVZBX0RPTkVfRU5fU0hJRlQJCQkJCTMxCiAjZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9FTl9NQVNLCQkJCQlCSVRGSUVMRCgzMSwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9TVF9TSElGVAkJCQkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9TVF9TSElGVAkJCQkJMzEKICNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX1NUX01BU0sJCQkJCUJJVEZJRUxEKDMxLCAzMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9FTl9TSElGVAkJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX0VOX1NISUZUCQkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9FTl9NQVNLCQkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX1NUX1NISUZUCQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9BQkJfTVBVX0RPTkVfU1RfU0hJRlQJCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX1NUX01BU0sJCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUNUSVZFX0ZCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9GQkJfU0VMX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9GQkJfU0VMX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUNUSVZFX1JCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9SQkJfU0VMX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9SQkJfU0VMX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1JFVFNUQVRFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUlQT0ZGX1NISUZUCQkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQUlQT0ZGX1NISUZUCQkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9BSVBPRkZfTUFTSwkJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9DT1JFX0xfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX0lWQV9MX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfSVZBX0xfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX0lWQV9MX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9NUFVfTF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX01QVV9MX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9NUFVfTF9NQVNLCQkJCUJJVEZJRUxEKDIsIDMpCiAKIC8qIFVzZWQgYnkgUE1fQ0FNX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0NBTV9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fQ0FNX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0FNX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfQ0FNX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX0NMS1JFUUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLUkVRX0NPTkRfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1JFUV9DT05EX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1JFUV9DT05EX01BU0sJCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX0NNRCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTURSQV9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTURSQV9WRERfQ09SRV9MX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgNykKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX0lWQV9MX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9NUFVfTF9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTURfVkREX0lWQV9MX1NISUZUCQkJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9DTURfVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfTVBVX0xfU0hJRlQJCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfTVBVX0xfTUFTSwkJCQkJQklURklFTEQoMTcsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfU0hJRlQJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9SRVRTVEFURV9TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9TVEFURVNUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDYsIDcpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PVEhFUl9CQU5LX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfUkVUU1RBVEVfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfU1RBVEVTVF9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19TVEFURVNUX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX0JZUEFTUyAqLwotI2RlZmluZSBPTUFQNDQzMF9EQVRBX1NISUZUCQkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0RBVEFfU0hJRlQJCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9EQVRBX01BU0sJCQkJCQlCSVRGSUVMRCgxNiwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX0RFVklDRV9PRkZfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9ERVZJQ0VfT0ZGX0VOQUJMRV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9ERVZJQ0VfT0ZGX0VOQUJMRV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RFVklDRV9PRkZfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLwotI2RlZmluZSBPTUFQNDQzMF9ERklMVEVSRU5fU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RGSUxURVJFTl9TSElGVAkJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9ERklMVEVSRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFUsIFBSTV9JUlFFTkFCTEVfVEVTTEEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfRU5fU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfRU5fU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0FCRV9SRUNBTF9FTl9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX1NUX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9FTl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfUkVDQUxfU1RfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ERFJQSFlfUkVDQUxfRU5fTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX1NUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ERFJQSFlfUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSwgUFJNX0lSUUVOQUJMRV9URVNMQSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0lWQV9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0lWQV9SRUNBTF9FTl9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9JVkFfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9FTl9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVBVX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfU1RfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfU1RfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX1NUX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9QRVJfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfRU5fU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfRU5fU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9EUExMX1VOSVBST19SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX0VOX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VU0JfUkVDQUxfRU5fTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9TVF9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX1NUX01BU0sJCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1JFVFNUQVRFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9EU1NfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fT05TVEFURV9TSElGVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX09OU1RBVEVfU0hJRlQJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fUkVUU1RBVEVfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9MMlJBTV9TVEFURVNUX01BU0sJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfT05TVEFURV9TSElGVAkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX09OU1RBVEVfU0hJRlQJCQkJMjIKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMiwgMjMpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfUkVUU1RBVEVfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1NUQVRFU1RfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTEpCiAKIC8qIFVzZWQgYnkgUk1fTVBVX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMVNUX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMVNUX1NISUZUCQkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1QxU1RfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDJTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDJTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMlNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTFfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVExX1JTVDFTVF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVExX1JTVDFTVF9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTJfUlNUMlNUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVEyX1JTVDJTVF9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVEyX1JTVDJTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9FTVVfQkFOS19PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9FTVVfQkFOS19TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUCwgUFJNX1NSQU1fV0tVUF9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0VOQUJMRV9SVEFfRVhQT1JUX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0VOQUJMRV9SVEFfRVhQT1JUX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRU5BQkxFX1JUQV9FWFBPUlRfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DMV9TSElGVAkJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzFfU0hJRlQJCQkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzFfTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0VORlVOQzNfU0hJRlQJCQkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9FTkZVTkMzX1NISUZUCQkJCQkJNQogI2RlZmluZSBPTUFQNDQzMF9FTkZVTkMzX01BU0sJCQkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9FTkZVTkM0X1NISUZUCQkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNF9TSElGVAkJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNF9NQVNLCQkJCQkJQklURklFTEQoNiwgNikKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNV9TSElGVAkJCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzVfU0hJRlQJCQkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzVfTUFTSwkJCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRVJST1JHQUlOX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfRVJST1JHQUlOX1NISUZUCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9FUlJPUkdBSU5fTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9TSElGVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0VSUk9ST0ZGU0VUX1NISUZUCQkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9NQVNLCQkJCQlCSVRGSUVMRCgyNCwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0VYVEVSTkFMX1dBUk1fUlNUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0VYVEVSTkFMX1dBUk1fUlNUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfRVhURVJOQUxfV0FSTV9SU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURV9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VVUERBVEVfU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VVUERBVEVfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WT0xUQUdFLCBQUk1fVlBfSVZBX1ZPTFRBR0UsIFBSTV9WUF9NUFVfVk9MVEFHRSAqLwotI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURVdBSVRfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFVVBEQVRFV0FJVF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURVdBSVRfTUFTSwkJCQkJQklURklFTEQoOCwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfVEVTTEEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX0VOX1NISUZUCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX0VOX1NISUZUCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9GT1JDRVdLVVBfRU5fTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9HRlhfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfR0ZYX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9HRlhfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX0NPTERfUlNUX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfQ09MRF9SU1RfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX0NPTERfUlNUX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0dMT0JBTF9XQVJNX1NXX1JTVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV0FSTV9TV19SU1RfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV0FSTV9TV19SU1RfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX1dVRU5fU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV1VFTl9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX1dVRU5fTUFTSwkJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX01PREUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNNQ09ERV9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0hTTUNPREVfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0hTTUNPREVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLwotI2RlZmluZSBPTUFQNDQzMF9IU01PREVFTl9TSElGVAkJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0hTTU9ERUVOX1NISUZUCQkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9IU01PREVFTl9NQVNLCQkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xIX1NISUZUCQkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0hTU0NMSF9TSElGVAkJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0hTU0NMSF9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX0NMSyAqLwotI2RlZmluZSBPTUFQNDQzMF9IU1NDTExfU0hJRlQJCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xMX1NISUZUCQkJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xMX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMzEpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9SRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9SRVRTVEFURV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBSTV9NUFVfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9NUFVfUlNUX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfTVBVX1JTVF9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfTVBVX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUk1fRFVDQVRJX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfUlNUMVNUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QxU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9JQ0VDUlVTSEVSX1JTVDJTVF9NQVNLCQkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMV9SU1QxU1RfU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9TRVExX1JTVDFTVF9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMV9SU1QxU1RfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKiBVc2VkIGJ5IFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9TRVEyX1JTVDJTVF9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMl9SU1QyU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9JQ0VQSUNLX1JTVF9TSElGVAkJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFUElDS19SU1RfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSUNFUElDS19SU1RfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9JTklUVkREX1NISUZUCQkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfSU5JVFZERF9TSElGVAkJCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfSU5JVFZERF9NQVNLCQkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9JTklUVk9MVEFHRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSU5JVFZPTFRBR0VfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfSU5JVFZPTFRBR0VfTUFTSwkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qCkBAIC00NDIsNDcgKzQ0Miw0NyBAQAogICogUE1fQUJFX1BXUlNUU1QsIFBNX0dGWF9QV1JTVFNULCBQTV9NUFVfUFdSU1RTVCwgUE1fQ0VGVVNFX1BXUlNUU1QsCiAgKiBQTV9EU1NfUFdSU1RTVCwgUE1fTDRQRVJfUFdSU1RTVCwgUE1fVEVTTEFfUFdSU1RTVCwgUE1fSVZBSERfUFdSU1RTVAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9TSElGVAkJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfSU5UUkFOU0lUSU9OX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSU9fRU5fU0hJRlQJCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JT19FTl9TSElGVAkJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSU9fRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9JT19PTl9TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lPX09OX1NUQVRVU19TSElGVAkJCQkJNQogI2RlZmluZSBPTUFQNDQzMF9JT19PTl9TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSU9fU1RfU0hJRlQJCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JT19TVF9TSElGVAkJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSU9fU1RfTUFTSwkJCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9JU09DTEtfT1ZFUlJJREVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19PVkVSUklERV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9JU09DTEtfT1ZFUlJJREVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfSVNPQ0xLX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSVNPT1ZSX0VYVEVORF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfSVNPT1ZSX0VYVEVORF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9JU09PVlJfRVhURU5EX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX0lTT18yX09OX1RJTUVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0lTT18yX09OX1RJTUVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfSVNPXzJfT05fVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9SRVRTVEFURV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfQkFOSzFfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qCkBAIC00OTAsNyArNDkwLDcgQEAKICAqIFBNX01QVV9QV1JTVENUUkwsIFBNX0RTU19QV1JTVENUUkwsIFBNX0w0UEVSX1BXUlNUQ1RSTCwgUE1fVEVTTEFfUFdSU1RDVFJMLAogICogUE1fSVZBSERfUFdSU1RDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qCkBAIC00OTgsNyArNDk4LDcgQEAKICAqIFBNX0FCRV9QV1JTVFNULCBQTV9HRlhfUFdSU1RTVCwgUE1fTVBVX1BXUlNUU1QsIFBNX0NFRlVTRV9QV1JTVFNULAogICogUE1fRFNTX1BXUlNUU1QsIFBNX0w0UEVSX1BXUlNUU1QsIFBNX1RFU0xBX1BXUlNUU1QsIFBNX0lWQUhEX1BXUlNUU1QKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0xPR0lDU1RBVEVTVF9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyoKQEAgLTUzNyw3ICs1MzcsNyBAQAogICogUk1fTDRQRVJfU0xJTUJVUzJfQ09OVEVYVCwgUk1fTDRTRUNfUEtBRUlQMjlfQ09OVEVYVCwKICAqIFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQsIFJNX0lWQUhEX0lWQUhEX0NPTlRFWFQsIFJNX0lWQUhEX1NMMl9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfREZGX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9ERkZfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfREZGX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qCkBAIC01NTgsNTggKzU1OCw1OCBAQAogICogUk1fTDRTRUNfQUVTMl9DT05URVhULCBSTV9MNFNFQ19DUllQVE9ETUFfQ09OVEVYVCwgUk1fTDRTRUNfREVTM0RFU19DT05URVhULAogICogUk1fTDRTRUNfUk5HX0NPTlRFWFQsIFJNX0w0U0VDX1NIQTJNRDUxX0NPTlRFWFQsIFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9SRkZfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RDT05URVhUX1JGRl9TSElGVAkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9SRkZfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBSTV9BQkVfQUVTU19DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQUVTU01FTV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9BRVNTTUVNX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQUVTU01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0NBTV9GRElGX0NPTlRFWFQsIFJNX0NBTV9JU1NfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NBTV9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ0FNX01FTV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NBTV9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9MM0lOU1RSX09DUF9XUDFfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9OUkVUX0JBTktfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogUmVuYW1lZCBmcm9tIExPU1RNRU1fQ09SRV9OUkVUX0JBTksgVXNlZCBieSBSTV9NRU1JRl9ETU1fQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LXzlfOV9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9OUkVUX0JBTktfOV85X1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LXzlfOV9NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBSTV9MM18yX09DTUNfUkFNX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09DTVJBTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfT0NNUkFNX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09DTVJBTV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFJNX0QyRF9NT0RFTV9JQ1JfQ09OVEVYVCwgUk1fTUVNSUZfRE1NX0NPTlRFWFQsCiAgKiBSTV9TRE1BX1NETUFfQ09OVEVYVAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9PVEhFUl9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9PVEhFUl9CQU5LX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09USEVSX0JBTktfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0RTU19ERUlTU19DT05URVhULCBSTV9EU1NfRFNTX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EU1NfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RTU19NRU1fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EU1NfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fRFVDQVRJX0RVQ0FUSV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX0wyUkFNX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX0wyUkFNX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EVUNBVElfTDJSQU1fTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX1VOSUNBQ0hFX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9FTVVfREVCVUdTU19DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRU1VX0JBTktfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRU1VX0JBTktfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9FTVVfQkFOS19NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0dGWF9HRlhfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0dGWF9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fR0ZYX01FTV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0dGWF9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9JVkFIRF9JVkFIRF9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fSFdBX01FTV9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fSFdBX01FTV9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9IV0FfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyoKQEAgLTYxOSwxOSArNjE5LDE5IEBACiAgKiBSTV9MM0lOSVRfVFBQU1NfQ09OVEVYVCwgUk1fTDNJTklUX1VOSVBSTzFfQ09OVEVYVCwKICAqIFJNX0wzSU5JVF9VU0JfT1RHX0NPTlRFWFQsIFJNX0wzSU5JVF9YSFBJX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0wzSU5JVF9CQU5LMV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0wzSU5JVF9CQU5LMV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTDNJTklUX0JBTksxX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9NUFVfTVBVX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9NUFVfTDFfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wxX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fTVBVX01QVV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9MMl9TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9MMl9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX01QVV9NUFVfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fU0hJRlQJCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX1JBTV9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qCkBAIC02MzksMTQgKzYzOSwxNCBAQAogICogUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQsIFJNX0w0UEVSX01NQ1NEM19DT05URVhULCBSTV9MNFBFUl9NTUNTRDRfQ09OVEVYVCwKICAqIFJNX0w0UEVSX01NQ1NENV9DT05URVhULCBSTV9MNFBFUl9TTElNQlVTMl9DT05URVhULCBSTV9MNFNFQ19QS0FFSVAyOV9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9OT05SRVRBSU5FRF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTk9OUkVUQUlORURfQkFOS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTk9OUkVUQUlORURfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFJNX0FCRV9ETUlDX0NPTlRFWFQsIFJNX0FCRV9NQ0JTUDFfQ09OVEVYVCwgUk1fQUJFX01DQlNQMl9DT05URVhULAogICogUk1fQUJFX01DQlNQM19DT05URVhULCBSTV9BQkVfUERNX0NPTlRFWFQsIFJNX0FCRV9TTElNQlVTX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUEVSSUhQTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCkBAIC02NTQsMzUgKzY1NCwzNSBAQAogICogUk1fTDRQRVJfVUFSVDJfQ09OVEVYVCwgUk1fTDRQRVJfVUFSVDNfQ09OVEVYVCwgUk1fTDRQRVJfVUFSVDRfQ09OVEVYVCwKICAqIFJNX0w0U0VDX0NSWVBUT0RNQV9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9SRVRBSU5FRF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUkVUQUlORURfQkFOS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUkVUQUlORURfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfU0wyX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9TTDJfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1NMMl9NRU1fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9TTDJfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfSVZBSERfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RDTTFfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RDTTFfTUVNX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMV9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9JVkFIRF9JVkFIRF9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMl9NRU1fU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMl9NRU1fU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00yX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9FRE1BX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0VETUFfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9FRE1BX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9MMV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9MMV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fVEVTTEFfVEVTTEFfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX1NISUZUCQkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVEVTTEFfTDJfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBSTV9XS1VQX1NBUlJBTV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fV0tVUF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fV0tVUF9CQU5LX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9XS1VQX0JBTktfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyoKQEAgLTY5MCwxNjQgKzY5MCwxNjQgQEAKICAqIFBNX0FCRV9QV1JTVENUUkwsIFBNX0dGWF9QV1JTVENUUkwsIFBNX01QVV9QV1JTVENUUkwsIFBNX0NFRlVTRV9QV1JTVENUUkwsCiAgKiBQTV9EU1NfUFdSU1RDVFJMLCBQTV9MNFBFUl9QV1JTVENUUkwsIFBNX1RFU0xBX1BXUlNUQ1RSTCwgUE1fSVZBSERfUFdSU1RDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9MT1dQT1dFUlNUQVRFQ0hBTkdFX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTUVNT1JZQ0hBTkdFX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9NRU1PUllDSEFOR0VfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfTUVNT1JZQ0hBTkdFX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fUkVBRFlfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1JFQURZX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX01PREVNX1JFQURZX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0hVVERPV05fSVJRX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NIVVRET1dOX0lSUV9TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NIVVRET1dOX0lSUV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0xFRVBfU1RfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9TTEVFUF9TVF9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0xFRVBfU1RfTUFTSwkJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01PREVNX1dBS0VfSVJRX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9XQUtFX0lSUV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9XQUtFX0lSUV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfUkVUU1RBVEVfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9TVEFURVNUX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9PTlNUQVRFX1NISUZUCQkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9SRVRTVEFURV9TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTVBVX0wyX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wyX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNiwgNykKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fT05TVEFURV9TSElGVAkJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfTVBVX1JBTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1JFVFNUQVRFX1NISUZUCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fU1RBVEVTVF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX1NFQ1VSSVRZX1ZJT0xfUlNUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9TRUNVUklUWV9WSU9MX1JTVF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX01QVV9TRUNVUklUWV9WSU9MX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9XRFRfUlNUX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9NUFVfV0RUX1JTVF9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9NUFVfV0RUX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfUkVUU1RBVEVfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19PTlNUQVRFX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19TVEFURVNUX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMykKIAogLyoKICAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAogICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT0ZGX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9PRkZfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19CQU5ER0FQX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT0ZGX0VOQUJMRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX0VOQUJMRV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9PRkZfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9WQ19WQUxfQ01EX1ZERF9DT1JFX0wsIFBSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTCwKICAqIFBSTV9WQ19WQUxfQ01EX1ZERF9NUFVfTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX09OX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX09OX1NISUZUCQkJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfT05fTUFTSwkJCQkJCUJJVEZJRUxEKDI0LCAzMSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAogICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT05MUF9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9PTkxQX1NISUZUCQkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfT05MUF9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9DVFJMLCBQUk1fTERPX0FCQl9NUFVfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFBfQ0hBTkdFX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9PUFBfQ0hBTkdFX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX09QUF9DSEFOR0VfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fTERPX0FCQl9JVkFfQ1RSTCwgUFJNX0xET19BQkJfTVBVX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BQX1NFTF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX09QUF9TRUxfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX09QUF9TRUxfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX1NSQU1fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QQ0hBUkdFQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1BTQ09OX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX1BDSEFSR0VfVElNRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRV9USU1FX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BDSEFSR0VfVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9PTlNUQVRFX1NISUZUCQkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX1JFVFNUQVRFX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9QRVJJUEhNRU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9QRVJJUEhNRU1fU1RBVEVTVF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCiAKIC8qIFVzZWQgYnkgUFJNX1BIQVNFMV9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DTkRQX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ05EUF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUEhBU0UyQV9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ05EUF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DTkRQX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUEhBU0UyQl9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ05EUF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQl9DTkRQX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUFNDT05fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUE9OT1VUXzJfUEdPT0RJTl9USU1FX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BPTk9VVF8yX1BHT09ESU5fVElNRV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1BPTk9VVF8yX1BHT09ESU5fVElNRV9NQVNLCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKgpAQCAtODU2LDcgKzg1Niw3IEBACiAgKiBQTV9DRUZVU0VfUFdSU1RDVFJMLCBQTV9EU1NfUFdSU1RDVFJMLCBQTV9MNFBFUl9QV1JTVENUUkwsCiAgKiBQTV9URVNMQV9QV1JTVENUUkwsIFBNX0lWQUhEX1BXUlNUQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUE9XRVJTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKgpAQCAtODY0LDM1ICs4NjQsMzUgQEAKICAqIFBNX0FCRV9QV1JTVFNULCBQTV9HRlhfUFdSU1RTVCwgUE1fTVBVX1BXUlNUU1QsIFBNX0NFRlVTRV9QV1JTVFNULAogICogUE1fRFNTX1BXUlNUU1QsIFBNX0w0UEVSX1BXUlNUU1QsIFBNX1RFU0xBX1BXUlNUU1QsIFBNX0lWQUhEX1BXUlNUU1QKICAqLwotI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVTVF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBQUk1fUFdSUkVRQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9QV1JSRVFfQ09ORF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFdSUkVRX0NPTkRfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUFdSUkVRX0NPTkRfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0NPUkVfTF9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9TSElGVAkJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX01QVV9MX1NISUZUCQkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfTVBVX0xfTUFTSwkJCQkJQklURklFTEQoMjAsIDIwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9DT1JFX0xfU0hJRlQJCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfSVZBX0xfU0hJRlQJCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfSVZBX0xfTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9NUFVfTF9TSElGVAkJCQkJMTkKICNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qCkBAIC05MDAsNyArOTAwLDcgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1JBTVBfRE9XTl9DT1VOVF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjEpCiAKIC8qCkBAIC05MDgsNyArOTA4LDcgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fUFJFU0NBTF9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9ET1dOX1BSRVNDQUxfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfUkFNUF9ET1dOX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoMjQsIDI1KQogCiAvKgpAQCAtOTE2LDcgKzkxNiw3IEBACiAgKiBQUk1fVk9MVFNFVFVQX0lWQV9PRkYsIFBSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUCwgUFJNX1ZPTFRTRVRVUF9NUFVfT0ZGLAogICogUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX0NPVU5UX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qCkBAIC05MjQsMTI4MiArOTI0LDEyODIgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JBTVBfVVBfUFJFU0NBTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfQ09SRV9MX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfSVZBX0xfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9TSElGVAkJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTgpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVHQUREUl9TSElGVAkJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JFR0FERFJfU0hJRlQJCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1JFR0FERFJfTUFTSwkJCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKgogICogVXNlZCBieSBQUk1fVkNfVkFMX0NNRF9WRERfQ09SRV9MLCBQUk1fVkNfVkFMX0NNRF9WRERfSVZBX0wsCiAgKiBQUk1fVkNfVkFMX0NNRF9WRERfTVBVX0wKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SRVRfU0hJRlQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9SRVRfU0hJRlQJCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1JFVF9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9SRVRBSU5FRF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19TVEFURVNUX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19TVEFURVNUX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfQ1RSTCwgUFJNX0xET19TUkFNX0lWQV9DVFJMLAogICogUFJNX0xET19TUkFNX01QVV9DVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVUTU9ERV9FTkFCTEVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVE1PREVfRU5BQkxFX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1JFVE1PREVfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUkVWSVNJT05fUFJNICovCi0jZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUkVWX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9URVNMQV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDFfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1QxX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SU1QxX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fVEVTTEFfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDFTVF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JTVDFTVF9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUlNUMVNUX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9URVNMQV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDJfU0hJRlQJCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SU1QyX1NISUZUCQkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9SU1QyX01BU0sJCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fVEVTTEFfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9TSElGVAkJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9TSElGVAkJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfUlNUMlNUX01BU0sJCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDNfU0hJRlQJCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9SU1QzX1NISUZUCQkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9SU1QzX01BU0sJCQkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUM1NUX1NISUZUCQkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfUlNUM1NUX1NISUZUCQkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9SU1QzU1RfTUFTSwkJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFRJTUUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTFfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1RUSU1FMV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTFfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDkpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFRJTUUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTJfU0hJRlQJCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTJfU0hJRlQJCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9SU1RUSU1FMl9NQVNLCQkJCQkJQklURklFTEQoMTAsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfQ09MRF9TV19TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX0NPTERfU1dfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX0NPTERfU1dfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfV0FSTV9TV19TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX1dBUk1fU1dfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogUmVuYW1lZCBmcm9tIFNBX1ZERF9DT1JFX0wgVXNlZCBieSBQUk1fVkNfU01QU19TQSAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfMF82X01BU0sJCQkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBSZW5hbWVkIGZyb20gU0FfVkREX0lWQV9MIFVzZWQgYnkgUFJNX1ZDX1NNUFNfU0EgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfSVZBX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSwkJCUJJVEZJRUxEKDgsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTYpCiAKIC8qIFJlbmFtZWQgZnJvbSBTQV9WRERfTVBVX0wgVXNlZCBieSBQUk1fVkNfU01QU19TQSAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfU0hJRlQJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX01BU0sJCQlCSVRGSUVMRCgxNiwgMjIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfQ0xLICovCi0jZGVmaW5lIE9NQVA0NDMwX1NDTEhfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQ0xIX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9TQ0xIX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX0NMSyAqLwotI2RlZmluZSBPTUFQNDQzMF9TQ0xMX1NISUZUCQkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0NMTF9TSElGVAkJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfU0NMTF9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1NFQ1VSRV9XRFRfUlNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TRUNVUkVfV0RUX1JTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9TRUNVUkVfV0RUX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDYsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0xBVkVBRERSX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TTEFWRUFERFJfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU0xBVkVBRERSX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMRUVQX1JCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1NMRUVQX1JCQl9TRUxfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfU0xFRVBfUkJCX1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBSTV9TUkFNX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfU0xQQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WU1RFUE1BWCwgUFJNX1ZQX0lWQV9WU1RFUE1BWCwgUFJNX1ZQX01QVV9WU1RFUE1BWCAqLwotI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfTUFTSwkJCQkJQklURklFTEQoOCwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVlNURVBNSU4sIFBSTV9WUF9JVkFfVlNURVBNSU4sIFBSTV9WUF9NUFVfVlNURVBNSU4gKi8KLSNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX01BU0sJCQkJCUJJVEZJRUxEKDgsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMkVOX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfU1IyRU5fU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NSMkVOX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9DVFJMLCBQUk1fTERPX0FCQl9NUFVfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TUjJfSU5fVFJBTlNJVElPTl9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9TUjJfSU5fVFJBTlNJVElPTl9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1NSMl9JTl9UUkFOU0lUSU9OX01BU0sJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX0NUUkwsIFBSTV9MRE9fQUJCX01QVV9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMl9TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1NSMl9TVEFUVVNfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfU1IyX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCgzLCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMl9XVENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU1IyX1dUQ05UX1ZBTFVFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NSMl9XVENOVF9WQUxVRV9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfQ1RSTCwgUFJNX0xET19TUkFNX0lWQV9DVFJMLAogICogUFJNX0xET19TUkFNX01QVV9DVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1JBTUxET19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NSQU1MRE9fU1RBVFVTX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NSQU1MRE9fU1RBVFVTX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX0NUUkwsIFBSTV9MRE9fU1JBTV9JVkFfQ1RSTCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSQU1fSU5fVFJBTlNJVElPTl9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TUkFNX0lOX1RSQU5TSVRJT05fU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TUkFNX0lOX1RSQU5TSVRJT05fTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX01PREUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1JNT0RFRU5fU0hJRlQJCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TUk1PREVFTl9TSElGVAkJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfU1JNT0RFRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9XQVJNUkVTRVQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX0NPVU5UX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TVEFCTEVfQ09VTlRfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX0NPVU5UX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9XQVJNUkVTRVQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9QUkVTQ0FMX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9QUkVTQ0FMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9UQ00xX01FTV9PTlNUQVRFX1NISUZUCQkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9UQ00xX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVENNMV9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1JFVFNUQVRFX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVENNMV9NRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA5KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fT05TVEFURV9TSElGVAkJCQkJMjIKICNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgyMiwgMjMpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTJfTUVNX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9SRVRTVEFURV9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fU1RBVEVTVF9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTEpCiAKIC8qIFVzZWQgYnkgUk1fVEVTTEFfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVEVTTEFTU19FTVVfUlNUU1RfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFTU19FTVVfUlNUU1RfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9URVNMQVNTX0VNVV9SU1RTVF9NQVNLCQkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RTUF9FTVVfUkVRX1JTVFNUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RTUF9FTVVfUkVRX1JTVFNUX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFNQX0VNVV9SRVFfUlNUU1RfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfT05TVEFURV9TSElGVAkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfUkVUU1RBVEVfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRURNQV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX1NUQVRFU1RfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg4LCA5KQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1NUQVRFU1RfU0hJRlQJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMl9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfT05TVEFURV9TSElGVAkJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1JFVFNUQVRFX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg2LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZMSU1JVFRPLCBQUk1fVlBfSVZBX1ZMSU1JVFRPLCBQUk1fVlBfTVBVX1ZMSU1JVFRPICovCi0jZGVmaW5lIE9NQVA0NDMwX1RJTUVPVVRfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9USU1FT1VUX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9USU1FT1VUX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAxNSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9USU1FT1VURU5fU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1RJTUVPVVRFTl9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9USU1FT1VURU5fTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVFJBTlNJVElPTl9FTl9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9UUkFOU0lUSU9OX1NUX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9UUkFOU0lUSU9OX1NUX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fU1RfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX0JZUEFTUyAqLwotI2RlZmluZSBPTUFQNDQzMF9WQUxJRF9TSElGVAkJCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9WQUxJRF9TSElGVAkJCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZBTElEX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9TSElGVAkJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9TSElGVAkJCQkJMTQKICNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX1NUX1NISUZUCQkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX1NUX1NISUZUCQkJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9WQ19CWVBBU1NBQ0tfU1RfTUFTSwkJCQkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19JVkFfVlBBQ0tfRU5fU0hJRlQJCQkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQNDQzMF9WQ19JVkFfVlBBQ0tfRU5fU0hJRlQJCQkJCTMwCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCgzMCwgMzApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9TSElGVAkJCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9TSElGVAkJCQkJMzAKICNkZWZpbmUgT01BUDQ0MzBfVkNfSVZBX1ZQQUNLX1NUX01BU0sJCQkJCUJJVEZJRUxEKDMwLCAzMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX01QVV9WUEFDS19FTl9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX0VOX1NISUZUCQkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1ZDX01QVV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX1NUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9WQ19NUFVfVlBBQ0tfU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX1NUX01BU0sJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX1JBRVJSX0VOX1NISUZUCQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfRU5fU0hJRlQJCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX1JBRVJSX0VOX01BU0sJCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfU1RfU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9WQ19SQUVSUl9TVF9TSElGVAkJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfU1RfTUFTSwkJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9FTl9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX0VOX1NISUZUCQkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX1NUX1NISUZUCQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfVkNfU0FFUlJfU1RfU0hJRlQJCQkJCTExCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX1NUX01BU0sJCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfVE9FUlJfRU5fU0hJRlQJCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9FTl9TSElGVAkJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfVkNfVE9FUlJfRU5fTUFTSwkJCQkJQklURklFTEQoMTMsIDEzKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9TVF9TSElGVAkJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1RPRVJSX1NUX1NISUZUCQkJCQkxMwogI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVkxJTUlUVE8sIFBSTV9WUF9JVkFfVkxJTUlUVE8sIFBSTV9WUF9NUFVfVkxJTUlUVE8gKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkRETUFYX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZERE1BWF9TSElGVAkJCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZERE1BWF9NQVNLCQkJCQkJQklURklFTEQoMjQsIDMxKQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZMSU1JVFRPLCBQUk1fVlBfSVZBX1ZMSU1JVFRPLCBQUk1fVlBfTVBVX1ZMSU1JVFRPICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERE1JTl9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WRERNSU5fU0hJRlQJCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9WRERNSU5fTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX0kyQ19ESVNBQkxFX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX0kyQ19ESVNBQkxFX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9WRERfQ09SRV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfVk9MVF9NR1JfUlNUX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9JMkNfRElTQUJMRV9TSElGVAkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9JMkNfRElTQUJMRV9TSElGVAkJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX0kyQ19ESVNBQkxFX01BU0sJCQkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX1NISUZUCQkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfUFJFU0VOQ0VfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1ZPTFRfTUdSX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9JMkNfRElTQUJMRV9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX1BSRVNFTkNFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9WT0xUX01HUl9SU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19WQUxfU01QU19SQV9WT0wgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVk9MUkFfVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVk9MUkFfVkREX0NPUkVfTF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfSVZBX0xfTUFTSwkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBFTkFCTEVfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUEVOQUJMRV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBFTkFCTEVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfU1RBVFVTLCBQUk1fVlBfSVZBX1NUQVRVUywgUFJNX1ZQX01QVV9TVEFUVVMgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBJTklETEVfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUElOSURMRV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBJTklETEVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVk9MVEFHRSwgUFJNX1ZQX0lWQV9WT0xUQUdFLCBQUk1fVlBfTVBVX1ZPTFRBR0UgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBWT0xUQUdFX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUFZPTFRBR0VfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBWT0xUQUdFX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9FTl9TSElGVAkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfRU5fTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9TVF9TSElGVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9FUVZBTFVFX1NUX1NISUZUCQkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9TVF9NQVNLCQkJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NQVhWRERfRU5fU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX0VOX1NISUZUCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NQVhWRERfU1RfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX1NUX1NISUZUCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NSU5WRERfRU5fU0hJRlQJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX0VOX1NISUZUCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NSU5WRERfU1RfU0hJRlQJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX1NUX1NISUZUCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfRU5fU0hJRlQJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCTE5CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX0VOX01BU0sJCQkJQklURklFTEQoMTksIDE5KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX05PU01QU0FDS19TVF9TSElGVAkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJMTkKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfU1RfTUFTSwkJCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfT1BQQ0hBTkdFRE9ORV9FTl9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNikKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX1NUX1NISUZUCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX09QUENIQU5HRURPTkVfU1RfU0hJRlQJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9FTl9TSElGVAkJCQkoMSA8PCAyMSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJMjEKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfRU5fTUFTSwkJCQlCSVRGSUVMRCgyMSwgMjEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfVFJBTlhET05FX1NUX1NISUZUCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkyMQogI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9TVF9NQVNLCQkJCUJJVEZJRUxEKDIxLCAyMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX0VOX1NISUZUCQkJCTI4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX0VOX01BU0sJCQkJCUJJVEZJRUxEKDI4LCAyOCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfU1RfU0hJRlQJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX1NUX1NISUZUCQkJCTI4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX1NUX01BU0sJCQkJCUJJVEZJRUxEKDI4LCAyOCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9FTl9TSElGVAkJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NQVhWRERfRU5fU0hJRlQJCQkJCTI2CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NQVhWRERfRU5fTUFTSwkJCQkJQklURklFTEQoMjYsIDI2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUFYVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9TVF9TSElGVAkJCQkJMjYKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgyNiwgMjYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfRU5fU0hJRlQJCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUlOVkREX0VOX1NISUZUCQkJCQkyNQogI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUlOVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01JTlZERF9TVF9TSElGVAkJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfU1RfU0hJRlQJCQkJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfU1RfTUFTSwkJCQkJQklURklFTEQoMjUsIDI1KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTk9TTVBTQUNLX0VOX1NISUZUCQkJCTI3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfRU5fTUFTSwkJCQlCSVRGSUVMRCgyNywgMjcpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJMjcKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX05PU01QU0FDS19TVF9NQVNLCQkJCUJJVEZJRUxEKDI3LCAyNykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX0VOX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfU1RfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfU1RfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJMjkKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDI5LCAyOSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkyOQogI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX1NUX01BU0sJCQkJQklURklFTEQoMjksIDI5KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfRVFWQUxVRV9FTl9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfU1RfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfRVFWQUxVRV9TVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01BWFZERF9FTl9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01BWFZERF9FTl9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NQVhWRERfU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NSU5WRERfRU5fU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NSU5WRERfRU5fU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9TVF9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9TVF9TSElGVAkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfRU5fU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX0VOX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX05PU01QU0FDS19TVF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfU1RfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9FTl9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfRU5fTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfVFJBTlhET05FX1NUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9TVF9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1NSQU1fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlNFVFVQQ05UX1ZBTFVFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9WU0VUVVBDTlRfVkFMVUVfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVlNFVFVQQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZTVEVQTUFYLCBQUk1fVlBfSVZBX1ZTVEVQTUFYLCBQUk1fVlBfTVBVX1ZTVEVQTUFYICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUFYX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNQVhfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUFYX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZTVEVQTUlOLCBQUk1fVlBfSVZBX1ZTVEVQTUlOLCBQUk1fVlBfTVBVX1ZTVEVQTUlOICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUlOX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNSU5fU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUlOX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1dBS0VfTU9ERU1fU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dBS0VfTU9ERU1fU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0FLRV9NT0RFTV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNSUNfRE1BX1NETUFfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNSUNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0RNQV9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIxMF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTBfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTBfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9ETVRJTUVSMTFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjExX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjJfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSM19EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSM19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI5X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI5X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfRFVDQVRJX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfTVBVX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfTVBVX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9NUFVfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX1NETUFfTUFTSwkJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfRFVDQVRJX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9NUFVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9TRE1BX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfU0RNQV9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9URVNMQV9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfRFVDQVRJX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlExX0RVQ0FUSV9TSElGVAkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlExX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX0dQSU8xX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMl9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTJfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0dQSU8yX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9EVUNBVElfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfRFVDQVRJX1NISUZUCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzNfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzRfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNF9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNF9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzVfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzZfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSURNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlETUFfU0RNQV9TSElGVAkJCQkxOQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDE5LCAxOSkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9NUFVfU0hJRlQJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX1RFU0xBX1NISUZUCQkJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9IRUNDMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MxX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSEVDQzFfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSEVDQzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMl9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMl9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9IU0lfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfRFNQX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX0RTUF9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX0RTUF9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX0hTSV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfSFNJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfTUNVX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzFfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzFfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMyX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMyX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMzX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzNfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzNfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMzX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzRfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzRfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkM0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM1X0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX0tFWUJPQVJEX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfS0VZQk9BUkRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfS0VZQk9BUkRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9LRVlCT0FSRF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0FTUF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNBU1BfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfRE1BX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQVNQX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0FTUF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfRE1BX1NETUFfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfRE1BX1NETUFfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfSVJRX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0RNQV9TRE1BX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0lSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQlNQNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0JTUDRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNCU1A0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTJfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTNfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX01QVV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9NUFVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1NETUFfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DNl9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DNl9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0QzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NEM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDRfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDVfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q1X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfUENJRVNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUENJRVNTX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QQ0lFU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QQ0lFU1NfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QQ0lFU1NfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BETV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9BQkVfUERNX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9QRE1fV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BETV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9XS1VQX1JUQ19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1JUQ19NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUlRDX01QVV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1JUQ19NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfU0FUQV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0FUQV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfU0FUQV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9BQkVfU0xJTUJVU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9TRE1BX1NISUZUCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfU0RNQV9TSElGVAkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfVEVTTEFfU0hJRlQJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9URVNMQV9TSElGVAkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfVEVTTEFfU0hJRlQJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0lSUV9URVNMQV9TSElGVAkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfU0xJTUJVUzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfU0RNQV9TSElGVAkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1NETUFfU0hJRlQJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1RFU0xBX1NISUZUCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfVEVTTEFfU0hJRlQJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1RFU0xBX01BU0sJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMyX0lSUV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMyX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX1RFU0xBX1NISUZUCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9JUlFfVEVTTEFfU0hJRlQJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX1RFU0xBX01BU0sJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FMV09OX1NSX0NPUkVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9DT1JFX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9DT1JFX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUxXT05fU1JfQ09SRV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfQ09SRV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BTFdPTl9TUl9JVkFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9JVkFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUxXT05fU1JfSVZBX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0lWQV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0lWQV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FMV09OX1NSX01QVV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX01QVV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9NUFVfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9NUFVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX1RJTUVSMTJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjEyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSMTJfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjEyX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9USU1FUjFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI1X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI1X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI1X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjZfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjZfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNl9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNl9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI3X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI3X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSOF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSOF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI4X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI4X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI4X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQ0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQ0X1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVU5JUFJPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVU5JUFJPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9IT1NUX0ZTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfRFVDQVRJX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9GU19EVUNBVElfU0hJRlQJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfRFVDQVRJX01BU0sJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9VU0JfSE9TVF9GU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0ZTX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0ZTX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9PVEdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9PVEdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9UTExfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9UTExfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9UTExfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9UTExfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9VU0lNX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9NUFVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0lNX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX1dLVVBfVVNJTV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9TRE1BX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9XRFQyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9XRFQyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX1dLVVBfV0RUMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfV0RUM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDNfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDNfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUM19NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfSFNJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0dNX0hTSV9XQUtFX01QVV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dHTV9IU0lfV0FLRV9NUFVfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dHTV9IU0lfV0FLRV9NUFVfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9YSFBJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfWEhQSV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9YSFBJX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfWEhQSV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV1VDTEtfQ1RSTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfV1VDTEtfQ1RSTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9XVUNMS19DVFJMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9XVUNMS19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1dVQ0xLX1NUQVRVU19TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9XVUNMS19TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggNDBmMDA2Mi4uNWZiYTJhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xNzksOSArMTc5LDExIEBACiAKIC8qIFJlZ2lzdGVycyBhcHBlYXJpbmcgb24gYm90aCAyNHh4IGFuZCAzNHh4ICovCiAKLSNkZWZpbmUgUk1fUlNUQ1RSTAkJCQkJMHgwMDUwCi0jZGVmaW5lIFJNX1JTVFRJTUUJCQkJCTB4MDA1NAotI2RlZmluZSBSTV9SU1RTVAkJCQkJMHgwMDU4CisjZGVmaW5lIE9NQVAyX1JNX1JTVENUUkwJCQkJMHgwMDUwCisjZGVmaW5lIE9NQVAyX1JNX1JTVFRJTUUJCQkJMHgwMDU0CisjZGVmaW5lIE9NQVAyX1JNX1JTVFNUCQkJCQkweDAwNTgKKyNkZWZpbmUgT01BUDJfUE1fUFdTVENUUkwJCQkJMHgwMGUwCisjZGVmaW5lIE9NQVAyX1BNX1BXU1RTVAkJCQkJMHgwMGU0CiAKICNkZWZpbmUgUE1fV0tFTgkJCQkJCTB4MDBhMAogI2RlZmluZSBQTV9XS0VOMQkJCQkJUE1fV0tFTgpAQCAtMTkxLDggKzE5Myw2IEBACiAjZGVmaW5lIFBNX0VWR0VOQ1RSTAkJCQkJMHgwMGQ0CiAjZGVmaW5lIFBNX0VWR0VOT05USU0JCQkJCTB4MDBkOAogI2RlZmluZSBQTV9FVkdFTk9GRlRJTQkJCQkJMHgwMGRjCi0jZGVmaW5lIFBNX1BXU1RDVFJMCQkJCQkweDAwZTAKLSNkZWZpbmUgUE1fUFdTVFNUCQkJCQkweDAwZTQKIAogLyogT21hcDIgc3BlY2lmaWMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE9NQVAyNFhYX1BNX1dLRU4yCQkJCTB4MDBhNApAQCAtMjIwLDYgKzIyMCwxMyBAQAogI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX0lWQTIJCQkweDAwZjgKICNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9JVkEyCQkJMHgwMGZjCiAKKy8qIE9tYXA0IHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUFQNF9STV9SU1RDVFJMCQkJCTB4MDAwMAorI2RlZmluZSBPTUFQNF9STV9SU1RUSU1FCQkJCTB4MDAwNAorI2RlZmluZSBPTUFQNF9STV9SU1RTVAkJCQkJMHgwMDA4CisjZGVmaW5lIE9NQVA0X1BNX1BXU1RDVFJMCQkJCTB4MDAwMAorI2RlZmluZSBPTUFQNF9QTV9QV1NUU1QJCQkJCTB4MDAwNAorCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmFtLW51bW9ueXgtbTY1a3h4eHhhbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQzNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIHRoZSBOdW1vbnl4IE02NUtYWFhYQU0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWdyYXRpb24gU29mdHdhcmUgYW5kIEVsZWN0cm9uaWMgRW5naW5lZXJpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9TRFJBTV9OVU1PTllYX002NUtYWFhYQU0KKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1NEUkFNX05VTU9OWVhfTTY1S1hYWFhBTQorCisjaW5jbHVkZSA8cGxhdC9zZHJjLmg+CisKKy8qIE51bW9ueXggIE02NUtYWFhYQU0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyBtNjVreHh4eGFtX3NkcmNfcGFyYW1zW10gPSB7CisJWzBdID0geworCQkucmF0ZQkJPSAyMDAwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4ZTMyMWQ0YzYsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMjgsCisJCS5yZnJfY3RybAk9IDB4MDAwNWU2MDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzFdID0geworCQkucmF0ZQkJPSAxNjYwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4YmE5ZGM0ODUsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMjEsCisJCS5yZnJfY3RybAk9IDB4MDAwNGRjMDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzJdID0geworCQkucmF0ZQkJPSAxMzMwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4OWExOWI0ODUsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMWIsCisJCS5yZnJfY3RybAk9IDB4MDAwM2RlMDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzNdID0geworCQkucmF0ZQkJPSA4MzAwMDAwMCwKKwkJLmFjdGltX2N0cmxhCT0gMHg1OTRjYTI0MiwKKwkJLmFjdGltX2N0cmxiCT0gMHgwMDAyMjMxMCwKKwkJLnJmcl9jdHJsCT0gMHgwMDAyNTUwMSwKKwkJLm1yCQk9IDB4MDAwMDAwMzIsCisJfSwKKwlbNF0gPSB7CisJCS5yYXRlCQkJPSAwCisJfSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwppbmRleCBjYmZiZDE0Li40YzY1ZjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwpAQCAtMTE5LDggKzExOSwxNSBAQAogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc19zZHJjKHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCiB7Ci0Jb21hcDJfc2RyY19iYXNlID0gb21hcDJfZ2xvYmFscy0+c2RyYzsKLQlvbWFwMl9zbXNfYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnNtczsKKwkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KKwlpZiAob21hcDJfZ2xvYmFscy0+c2RyYykgeworCQlvbWFwMl9zZHJjX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPnNkcmMsIFNaXzY0Syk7CisJCVdBUk5fT04oIW9tYXAyX3NkcmNfYmFzZSk7CisJfQorCWlmIChvbWFwMl9nbG9iYWxzLT5zbXMpIHsKKwkJb21hcDJfc21zX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPnNtcywgU1pfNjRLKTsKKwkJV0FSTl9PTighb21hcDJfc21zX2Jhc2UpOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCBlMTBhMDJkLi5iNzliYzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CkBAIC04MCw3ICs4MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGEwW10gPSB7CiAJewotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSA3MiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLApAQCAtOTMsNyArOTMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhMVtdID0gewogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQyX0JBU0UsCiAJCS5pcnEJCT0gNzMsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTEwNiw3ICsxMDUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhMltdID0gewogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQzX0JBU0UsCiAJCS5pcnEJCT0gNzQsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTExNywxMCArMTE1LDkgQEAKIAl9CiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tYXBiYXNlCT0gT01BUF9VQVJUNF9CQVNFLAogCQkuaXJxCQk9IDcwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC0xMzAsNyArMTI3LDI2IEBACiAJCS5mbGFncwkJPSAwCiAJfQogfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3VhcnQ0KHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCit7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGEzWzBdLm1hcGJhc2UgPSBvbWFwMl9nbG9iYWxzLT51YXJ0NF9waHlzOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc191YXJ0NChzdHJ1Y3Qgb21hcF9nbG9iYWxzICpvbWFwMl9nbG9iYWxzKQoreworfQogI2VuZGlmCisKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3VhcnQoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwlzZXJpYWxfcGxhdGZvcm1fZGF0YTBbMF0ubWFwYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnVhcnQxX3BoeXM7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGExWzBdLm1hcGJhc2UgPSBvbWFwMl9nbG9iYWxzLT51YXJ0Ml9waHlzOworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhMlswXS5tYXBiYXNlID0gb21hcDJfZ2xvYmFscy0+dWFydDNfcGh5czsKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX3NldF9nbG9iYWxzX3VhcnQ0KG9tYXAyX2dsb2JhbHMpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3NlcmlhbF9yZWFkX3JlZyhzdHJ1Y3QgdWFydF9wb3J0ICp1cCwKIAkJCQkJICAgaW50IG9mZnNldCkKIHsKQEAgLTE0NSw2ICsxNjEsMTMgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludClfX3Jhd19yZWFkYih1cC0+bWVtYmFzZSArIG9mZnNldCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlcmlhbF93cml0ZV9yZWcoc3RydWN0IHVhcnRfcG9ydCAqdXAsIGludCBvZmZzZXQsCisJCWludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHVwLT5yZWdzaGlmdDsKKwlfX3Jhd193cml0ZWIodmFsdWUsIHVwLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF93cml0ZV9yZWcoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwLCBpbnQgb2Zmc2V0LAogCQkJCSAgICBpbnQgdmFsdWUpCiB7CkBAIC01NzQsNyArNTk3LDcgQEAKIAkJCX0sCiAJCX0sCiAJfSwKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAJewogCQkucGRldiA9IHsKIAkJCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCkBAIC02MDUsNiArNjI4LDIwIEBACiAJcmV0dXJuIF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBvZmZzZXQpOwogfQogCitzdGF0aWMgdm9pZCBzZXJpYWxfb3V0X292ZXJyaWRlKHN0cnVjdCB1YXJ0X3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cywgdG1vdXQgPSAxMDAwMDsKKworCXN0YXR1cyA9IF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBVQVJUX0xTUik7CisJd2hpbGUgKCEoc3RhdHVzICYgVUFSVF9MU1JfVEhSRSkpIHsKKwkJLyogV2FpdCB1cCB0byAxMG1zIGZvciB0aGUgY2hhcmFjdGVyKHMpIHRvIGJlIHNlbnQuICovCisJCWlmICgtLXRtb3V0ID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCQlzdGF0dXMgPSBfX3NlcmlhbF9yZWFkX3JlZyh1cCwgVUFSVF9MU1IpOworCX0KKwlfX3NlcmlhbF93cml0ZV9yZWcodXAsIG9mZnNldCwgdmFsdWUpOworfQogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfZWFybHlfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtNzAxLDE1ICs3MzgsMTkgQEAKIAkJREVWX0NSRUFURV9GSUxFKGRldiwgJmRldl9hdHRyX3NsZWVwX3RpbWVvdXQpOwogCX0KIAotCQkvKiBvbWFwNDR4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8KLQkJICogb21hcDN4eHg6IE5ldmVyIHJlYWQgZW1wdHkgVUFSVCBmaWZvIG9uIFVBUlRzCi0JCSAqIHdpdGggSVAgcmV2ID49MHg1MgotCQkgKi8KLQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQkJdWFydC0+cC0+c2VyaWFsX2luID0gc2VyaWFsX2luX292ZXJyaWRlOwotCQllbHNlIGlmICgoc2VyaWFsX3JlYWRfcmVnKHVhcnQtPnAsIFVBUlRfT01BUF9NVkVSKSAmIDB4RkYpCi0JCQkJPj0gVUFSVF9PTUFQX05PX0VNUFRZX0ZJRk9fUkVBRF9JUF9SRVYpCi0JCQl1YXJ0LT5wLT5zZXJpYWxfaW4gPSBzZXJpYWxfaW5fb3ZlcnJpZGU7CisJLyoKKwkgKiBvbWFwNDR4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8KKwkgKiBvbWFwM3h4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8gb24gVUFSVHMKKwkgKiB3aXRoIElQIHJldiA+PTB4NTIKKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJdWFydC0+cC0+c2VyaWFsX2luID0gc2VyaWFsX2luX292ZXJyaWRlOworCQl1YXJ0LT5wLT5zZXJpYWxfb3V0ID0gc2VyaWFsX291dF9vdmVycmlkZTsKKwl9IGVsc2UgaWYgKChzZXJpYWxfcmVhZF9yZWcodWFydC0+cCwgVUFSVF9PTUFQX01WRVIpICYgMHhGRikKKwkJCT49IFVBUlRfT01BUF9OT19FTVBUWV9GSUZPX1JFQURfSVBfUkVWKSB7CisJCXVhcnQtPnAtPnNlcmlhbF9pbiA9IHNlcmlhbF9pbl9vdmVycmlkZTsKKwkJdWFydC0+cC0+c2VyaWFsX291dCA9IHNlcmlhbF9vdXRfb3ZlcnJpZGU7CisJfQogfQogCiAvKioKQEAgLTcyMSw4ICs3NjIsMTMgQEAKICAqLwogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewotCWludCBpOworCWludCBpLCBucl9wb3J0czsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfdWFydCk7IGkrKykKKwlpZiAoIShjcHVfaXNfb21hcDM2MzAoKSB8fCBjcHVfaXNfb21hcDQ0MzAoKSkpCisJCW5yX3BvcnRzID0gMzsKKwllbHNlCisJCW5yX3BvcnRzID0gQVJSQVlfU0laRShvbWFwX3VhcnQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3BvcnRzOyBpKyspCiAJCW9tYXBfc2VyaWFsX2luaXRfcG9ydChpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCmluZGV4IGMzNjI2ZWEuLmQ1MjJjZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUwpAQCAtMzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAic2RyYy5oIgogCisjZGVmaW5lIFNEUkNfU0NSQVRDSFBBRF9TRU1fVgkweGZhMDAyOTFjCisKICNkZWZpbmUgUE1fUFJFUFdTVFNUX0NPUkVfVglPTUFQMzRYWF9QUk1fUkVHQUREUihDT1JFX01PRCwgXAogCQkJCU9NQVAzNDMwX1BNX1BSRVBXU1RTVCkKICNkZWZpbmUgUE1fUFJFUFdTVFNUX0NPUkVfUAkweDQ4MzA2QUU4CiAjZGVmaW5lIFBNX1BSRVBXU1RTVF9NUFVfVglPTUFQMzRYWF9QUk1fUkVHQUREUihNUFVfTU9ELCBcCiAJCQkJT01BUDM0MzBfUE1fUFJFUFdTVFNUKQotI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIE1QVV9NT0QgKyBQTV9QV1NUQ1RSTAorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIE1QVV9NT0QgKyBPTUFQMl9QTV9QV1NUQ1RSTAogI2RlZmluZSBDTV9JRExFU1QxX0NPUkVfVglPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QxKQogI2RlZmluZSBTUkFNX0JBU0VfUAkJMHg0MDIwMDAwMAogI2RlZmluZSBDT05UUk9MX1NUQVQJCTB4NDgwMDIyRjAKQEAgLTU3LDYgKzU5LDM3IEBACiAjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVNfVglPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX1NUQVRVUykKICNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCiAKKyAgICAgICAgLnRleHQKKy8qIEZ1bmN0aW9uIHRvIGFxdWlyZSB0aGUgc2VtYXBob3JlIGluIHNjcmF0Y2hwYWQgKi8KK0VOVFJZKGxvY2tfc2NyYXRjaHBhZF9zZW0pCisJc3RtZmQJc3AhLCB7bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKK3dhaXRfc2VtOgorCW1vdglyMCwjMQorCWxkcglyMSwgc2RyY19zY3JhdGNocGFkX3NlbQord2FpdF9sb29wOgorCWxkcglyMiwgW3IxXQlAIGxvYWQgdGhlIGxvY2sgdmFsdWUKKwljbXAJcjIsIHIwCQlAIGlzIHRoZSBsb2NrIGZyZWUgPworCWJlcQl3YWl0X2xvb3AJQCBub3QgZnJlZS4uLgorCXN3cAlyMiwgcjAsIFtyMV0JQCBzZW1hcGhvcmUgZnJlZSBzbyBsb2NrIGl0IGFuZCBwcm9jZWVkCisJY21wCXIyLCByMAkJQCBkaWQgd2Ugc3VjY2VlZCA/CisJYmVxCXdhaXRfc2VtCUAgbm8gLSB0cnkgYWdhaW4KKwlsZG1mZAlzcCEsIHtwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorc2RyY19zY3JhdGNocGFkX3NlbToKKyAgICAgICAgLndvcmQgU0RSQ19TQ1JBVENIUEFEX1NFTV9WCitFTlRSWShsb2NrX3NjcmF0Y2hwYWRfc2VtX3N6KQorICAgICAgICAud29yZCAgIC4gLSBsb2NrX3NjcmF0Y2hwYWRfc2VtCisKKyAgICAgICAgLnRleHQKKy8qIEZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIHNjcmF0Y2hwYWQgc2VtYXBob3JlICovCitFTlRSWSh1bmxvY2tfc2NyYXRjaHBhZF9zZW0pCisJc3RtZmQJc3AhLCB7bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwlsZHIJcjMsIHNkcmNfc2NyYXRjaHBhZF9zZW0KKwltb3YJcjIsIzAKKwlzdHIJcjIsW3IzXQorCWxkbWZkCXNwISwge3BjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCitFTlRSWSh1bmxvY2tfc2NyYXRjaHBhZF9zZW1fc3opCisgICAgICAgIC53b3JkICAgLiAtIHVubG9ja19zY3JhdGNocGFkX3NlbQorCiAJLnRleHQKIC8qIEZ1bmN0aW9uIGNhbGwgdG8gZ2V0IHRoZSByZXN0b3JlIHBvaW50ZXIgZm9yIHJlc3VtZSBmcm9tIE9GRiAqLwogRU5UUlkoZ2V0X3Jlc3RvcmVfcG9pbnRlcikKQEAgLTI1MSw2ICsyODQsMjEgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKIAkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKIAorI2lmZGVmIENPTkZJR19PTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQorCS8qIFJlc3RvcmUgTDIgYXV4IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlAIHNldCBzZXJ2aWNlIElEIGZvciBQUEEKKwltb3YJcjAsICNDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TRVJWSUNFX1NFVF9JRAorCW1vdglyMTIsIHIwCQlAIGNvcHkgc2VydmljZSBJRCBpbiByMTIKKwltb3YJcjEsICMwCQlAIHNldCB0YXNrIElEIGZvciBST00gY29kZSBpbiByMQorCW1vdglyMiwgIzQJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CisJbW92CXI2LCAjMHhmZgorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsICMweEJDXQorCWFkZHMJcjMsIHIzLCAjOAlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKKwkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKKyNlbmRpZgogCWIJbG9naWNfbDFfcmVzdG9yZQogbDJfaW52X2FwaV9wYXJhbXM6CiAJLndvcmQgICAweDEsIDB4MDAKQEAgLTI2NCw2ICszMTIsMTEgQEAKIAlsZHIJcjAsIFtyMywjNF0KIAltb3YJcjEyLCAjMHgzCiAJLndvcmQgMHhFMTYwMDA3MAlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsIzB4QkNdCisJbGRyCXIwLCBbcjMsIzEyXQorCW1vdglyMTIsICMweDIKKwkud29yZCAweEUxNjAwMDcwCUAgQ2FsbCBTTUkgbW9uaXRvciAoc21pZXEpCiBsb2dpY19sMV9yZXN0b3JlOgogCW1vdglyMSwgIzAKIAkvKiBJbnZhbGlkYXRlIGFsbCBpbnN0cnVjdGlvbiBjYWNoZXMgdG8gUG9VCkBAIC0yNzIsNyArMzI1LDcgQEAKIAogCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCiAJbGRyCXIzLCBbcjQsIzB4QkNdCi0JYWRkcwlyMywgcjMsICM4CisJYWRkcwlyMywgcjMsICMxNgogCWxkbWlhCXIzISwge3I0LXI2fQogCW1vdglzcCwgcjQKIAltc3IJc3Bzcl9jeHNmLCByNQpAQCAtMzkxLDcgKzQ0NCw5IEBACiAJbW92CXI4LCByMCAvKiBTdG9yZSBTRFJBTSBhZGRyZXNzIGluIHI4ICovCiAJbXJjCXAxNSwgMCwgcjUsIGMxLCBjMCwgMQlAIFJlYWQgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIKIAltb3YJcjQsICMweDEJCUAgTnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIHJlc3RvcmUgY2FsbAotCXN0bWlhCXI4ISwge3I0LXI1fQorCXN0bWlhCXI4ISwge3I0LXI1fQkJQCBQdXNoIHBhcmFtZXRlcnMgZm9yIHJlc3RvcmUgY2FsbAorCW1yYwlwMTUsIDEsIHI1LCBjOSwgYzAsIDIJQCBSZWFkIEwyIEFVWCBjdHJsIHJlZ2lzdGVyCisJc3RtaWEJcjghLCB7cjQtcjV9CQlAIFB1c2ggcGFyYW1ldGVycyBmb3IgcmVzdG9yZSBjYWxsCiAgICAgICAgIC8qIENoZWNrIHdoYXQgdGhhdCB0YXJnZXQgc2xlZXAgc3RhdGUgaXM6c3RvcmVkIGluIHIxKi8KICAgICAgICAgLyogMSAtIE9ubHkgTDEgYW5kIGxvZ2ljIGxvc3QgKi8KICAgICAgICAgLyogMiAtIE9ubHkgTDIgbG9zdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCmluZGV4IGNkMDRkZWEuLjc0ZmJlZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTg1LDggKzg1LDYgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgogCQlwZXJpb2QgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSkgLyBIWjsKIAkJcGVyaW9kIC09IDE7Ci0JCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCXBlcmlvZCA9IDB4ZmY7CS8qIEZJWE1FOiAqLwogCQlvbWFwX2RtX3RpbWVyX3NldF9sb2FkX3N0YXJ0KGdwdGltZXIsIDEsIDB4ZmZmZmZmZmYgLSBwZXJpb2QpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CkBAIC0xNTAsOSArMTQ4LDYgQEAKIAkJICAgICAidGltZXItZ3A6IG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSgpIGZhaWxlZFxuIik7CiAKIAl0aWNrX3JhdGUgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSk7Ci0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQkvKiBBc3N1bWluZyAzMmtIeiBjbGsgaXMgZHJpdmluZyBHUFQxICovCi0JCXRpY2tfcmF0ZSA9IDMyNzY4OwkvKiBGSVhNRTogKi8KIAogCXByX2luZm8oIk9NQVAgY2xvY2tldmVudCBzb3VyY2U6IEdQVElNRVIlZCBhdCAldSBIelxuIiwKIAkJZ3B0aW1lcl9pZCwgdGlja19yYXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItbXB1LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLW1wdS5jCmluZGV4IGMxYTY1MGEuLjk1NDY4MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItbXB1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1tcHUuYwpAQCAtMjgsNyArMjgsNyBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JZXZ0LT5pcnEgPSBJTlRfNDRYWF9MT0NBTFRJTUVSX0lSUTsKKwlldnQtPmlycSA9IE9NQVA0NFhYX0lSUV9MT0NBTFRJTUVSOwogCXR3ZF90aW1lcl9zZXR1cChldnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKaW5kZXggYTgwNDQxZC4uNmQ0MWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpAQCAtNDcsNzAgKzQ3LDExIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgY2xrX29uOwotCi1zdGF0aWMgaW50IG11c2Jfc2V0X2Nsb2NrKHN0cnVjdCBjbGsgKmNsaywgaW50IHN0YXRlKQotewotCWlmIChzdGF0ZSkgewotCQlpZiAoY2xrX29uID4gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCWNsa19lbmFibGUoY2xrKTsKLQkJY2xrX29uID0gMTsKLQl9IGVsc2UgewotCQlpZiAoY2xrX29uID09IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQljbGtfZGlzYWJsZShjbGspOwotCQljbGtfb24gPSAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyBtdXNiX2Vwc1tdID0gewotCXsJImVwMV90eCIsIDEwLAl9LAotCXsJImVwMV9yeCIsIDEwLAl9LAotCXsJImVwMl90eCIsIDksCX0sCi0JewkiZXAyX3J4IiwgOSwJfSwKLQl7CSJlcDNfdHgiLCAzLAl9LAotCXsJImVwM19yeCIsIDMsCX0sCi0JewkiZXA0X3R4IiwgMywJfSwKLQl7CSJlcDRfcngiLCAzLAl9LAotCXsJImVwNV90eCIsIDMsCX0sCi0JewkiZXA1X3J4IiwgMywJfSwKLQl7CSJlcDZfdHgiLCAzLAl9LAotCXsJImVwNl9yeCIsIDMsCX0sCi0JewkiZXA3X3R4IiwgMywJfSwKLQl7CSJlcDdfcngiLCAzLAl9LAotCXsJImVwOF90eCIsIDIsCX0sCi0JewkiZXA4X3J4IiwgMiwJfSwKLQl7CSJlcDlfdHgiLCAyLAl9LAotCXsJImVwOV9yeCIsIDIsCX0sCi0JewkiZXAxMF90eCIsIDIsCX0sCi0JewkiZXAxMF9yeCIsIDIsCX0sCi0JewkiZXAxMV90eCIsIDIsCX0sCi0JewkiZXAxMV9yeCIsIDIsCX0sCi0JewkiZXAxMl90eCIsIDIsCX0sCi0JewkiZXAxMl9yeCIsIDIsCX0sCi0JewkiZXAxM190eCIsIDIsCX0sCi0JewkiZXAxM19yeCIsIDIsCX0sCi0JewkiZXAxNF90eCIsIDIsCX0sCi0JewkiZXAxNF9yeCIsIDIsCX0sCi0JewkiZXAxNV90eCIsIDIsCX0sCi0JewkiZXAxNV9yeCIsIDIsCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CiAJLm11bHRpcG9pbnQJPSAxLAogCS5keW5fZmlmbwk9IDEsCi0JLnNvZnRfY29uCT0gMSwKLQkuZG1hCQk9IDEsCiAJLm51bV9lcHMJPSAxNiwKLQkuZG1hX2NoYW5uZWxzCT0gNywKLQkuZG1hX3JlcV9jaGFuCT0gKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksCiAJLnJhbV9iaXRzCT0gMTIsCi0JLmVwc19iaXRzCT0gbXVzYl9lcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKQEAgLTEyMiw3ICs2Myw2IEBACiAJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAogI2VuZGlmCiAJLyogLmNsb2NrIGlzIHNldCBkeW5hbWljYWxseSAqLwotCS5zZXRfY2xvY2sJPSBtdXNiX3NldF9jbG9jaywKIAkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKIAogCS8qIFJFVklTSVQgY2hhcmdlIHB1bXAgb24gVFdMNDAzMCBjYW4gc3VwcGx5IHVwIHRvCkBAIC0xNDYsMjggKzg2LDM0IEBACiAJLnJlc291cmNlCT0gbXVzYl9yZXNvdXJjZXMsCiB9OwogCi12b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHZvaWQpCit2b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSAqYm9hcmRfZGF0YSkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJaWYgKGNwdV9pc19vbWFwMjQzeCgpKSB7CiAJCW11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gT01BUDI0M1hfSFNfQkFTRTsKLQllbHNlCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAzNFhYX0hTVVNCX09UR19CQVNFOwotCW11c2JfcmVzb3VyY2VzWzBdLmVuZCA9IG11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgU1pfOEsgLSAxOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgPSBPTUFQNDRYWF9IU1VTQl9PVEdfQkFTRTsKKwkJbXVzYl9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQNDRYWF9JUlFfSFNfVVNCX01DX047CisJCW11c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gT01BUDQ0WFhfSVJRX0hTX1VTQl9ETUFfTjsKKwl9CisJbXVzYl9yZXNvdXJjZXNbMF0uZW5kID0gbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgKyBTWl80SyAtIDE7CiAKIAkvKgogCSAqIFJFVklTSVQ6IFRoaXMgbGluZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGUgcGxhdGZvcm1zIHVzaW5nCiAJICogbXVzYl9jb3JlLmMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UgdXNlIGNsa2Rldi4KIAkgKi8KIAltdXNiX3BsYXQuY2xvY2sgPSAiaWNrIjsKKwltdXNiX3BsYXQuYm9hcmRfZGF0YSA9IGJvYXJkX2RhdGE7CisJbXVzYl9wbGF0LnBvd2VyID0gYm9hcmRfZGF0YS0+cG93ZXIgPj4gMTsKKwltdXNiX3BsYXQubW9kZSA9IGJvYXJkX2RhdGEtPm1vZGU7CiAKLQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdXNiX2RldmljZSkgPCAwKSB7CisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXVzYl9kZXZpY2UpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgSFMtVVNCIChNVVNCKSBkZXZpY2VcbiIpOwotCQlyZXR1cm47Ci0JfQogfQogCiAjZWxzZQotdm9pZCBfX2luaXQgdXNiX211c2JfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgdXNiX211c2JfaW5pdChzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmJvYXJkX2RhdGEpCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX1VTQl9NVVNCX1NPQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGM3ZjgwOGJmLi45MWUwZTM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KIAotCS5tYWNybyAgYWRkcnVhcnQscngKKwkubWFjcm8gIGFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KIAlsZHJlcQlccngsID1PUklPTjVYX1JFR1NfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDcxNDdhMjkuLjA2YjUwYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZmQ4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhmZDgwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCmluZGV4IDg5OGMwZTguLjlkMTk3NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCkBAIC0yMiw4ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKIApAQCAtNTYsMTggKzU3LDE5IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIGNsa19yZWdfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaWYgKGNsay0+ZW5hYmxlX3JlZykKIAkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJgogCQkJICAgICB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpLCBjbGstPmVuYWJsZV9yZWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19lbmFibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIGludCBjbGtfcmVnX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaWYgKGNsay0+ZW5hYmxlX3JlZykKIAkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfAogCQkJICAgICAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCksIGNsay0+ZW5hYmxlX3JlZyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2Rpc2FibGUxKHN0cnVjdCBjbGsgKmNsaykKQEAgLTYzNiwzMSArNjM4LDM0IEBACiBzdGF0aWMgc3RydWN0IGNsayBpMmMwX2NrID0gewogCS5uYW1lID0gImkyYzBfY2siLAogCS5wYXJlbnQgPSAmcGVyX2NrLAotCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAotCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04gfCBGSVhFRF9SQVRFLAogCS5lbmFibGVfc2hpZnQgPSAwLAogCS5lbmFibGVfcmVnID0gSTJDQ0xLQ1RSTF9SRUcsCisJLnJhdGUgPSAxMzAwMDAwMCwKKwkuZW5hYmxlID0gY2xrX3JlZ19lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcmVnX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2NrID0gewogCS5uYW1lID0gImkyYzFfY2siLAogCS5wYXJlbnQgPSAmcGVyX2NrLAotCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAotCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04gfCBGSVhFRF9SQVRFLAogCS5lbmFibGVfc2hpZnQgPSAxLAogCS5lbmFibGVfcmVnID0gSTJDQ0xLQ1RSTF9SRUcsCisJLnJhdGUgPSAxMzAwMDAwMCwKKwkuZW5hYmxlID0gY2xrX3JlZ19lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcmVnX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2NrID0gewogCS5uYW1lID0gImkyYzJfY2siLAogCS5wYXJlbnQgPSAmcGVyX2NrLAotCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAotCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04gfCBGSVhFRF9SQVRFLAogCS5lbmFibGVfc2hpZnQgPSAyLAogCS5lbmFibGVfcmVnID0gVVNCX09UR19DTEtDVFJMX1JFRywKKwkucmF0ZSA9IDEzMDAwMDAwLAorCS5lbmFibGUgPSBjbGtfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19yZWdfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2sgPSB7CkBAIC03MzgsMTYgKzc0MywxNiBAQAogCS5uYW1lID0gIndkdF9jayIsCiAJLnBhcmVudCA9ICZwZXJfY2ssCiAJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCi0JLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKIAkuZW5hYmxlX3NoaWZ0ID0gMCwKIAkuZW5hYmxlX3JlZyA9IFRJTUNMS0NUUkxfUkVHLAorCS5lbmFibGUgPSBjbGtfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19yZWdfZGlzYWJsZSwKIH07CiAKIC8qIFRoZXNlIGNsb2NrcyBhcmUgdmlzaWJsZSBvdXRzaWRlIHRoaXMgbW9kdWxlCiAgKiBhbmQgY2FuIGJlIGluaXRpYWxpemVkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfY2xrc1tdID0geworc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbGtzW10gX19pbml0ZGF0YSA9IHsKIAkmY2tfMTNNSHosCiAJJmNrX3BsbDEsCiAJJmNrX3BsbDQsCkBAIC03NzcsNDkgKzc4Miw3NCBAQAogCSZ3ZHRfY2ssCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgb25jaGlwX2Nsa3JlZ1tdID0geworCXsgLmNsayA9ICZja18xM01IeiwJLmNvbl9pZCA9ICJja18xM01IeiIJfSwKKwl7IC5jbGsgPSAmY2tfcGxsMSwJLmNvbl9pZCA9ICJja19wbGwxIgl9LAorCXsgLmNsayA9ICZja19wbGw0LAkuY29uX2lkID0gImNrX3BsbDQiCX0sCisJeyAuY2xrID0gJmNrX3BsbDUsCS5jb25faWQgPSAiY2tfcGxsNSIJfSwKKwl7IC5jbGsgPSAmY2tfcGxsMywJLmNvbl9pZCA9ICJja19wbGwzIgl9LAorCXsgLmNsayA9ICZ2ZnA5X2NrLAkuY29uX2lkID0gInZmcDlfY2siCX0sCisJeyAuY2xrID0gJm0yaGNsa19jaywJLmNvbl9pZCA9ICJtMmhjbGtfY2siCX0sCisJeyAuY2xrID0gJmhjbGtfY2ssCS5jb25faWQgPSAiaGNsa19jayIJfSwKKwl7IC5jbGsgPSAmZG1hX2NrLAkuY29uX2lkID0gImRtYV9jayIJfSwKKwl7IC5jbGsgPSAmZmxhc2hfY2ssCS5jb25faWQgPSAiZmxhc2hfY2siCX0sCisJeyAuY2xrID0gJmR1bV9jaywJLmNvbl9pZCA9ICJkdW1fY2siCX0sCisJeyAuY2xrID0gJmtleXNjYW5fY2ssCS5jb25faWQgPSAia2V5c2Nhbl9jayIJfSwKKwl7IC5jbGsgPSAmcHdtMV9jaywJLmNvbl9pZCA9ICJwd20xX2NrIgl9LAorCXsgLmNsayA9ICZwd20yX2NrLAkuY29uX2lkID0gInB3bTJfY2siCX0sCisJeyAuY2xrID0gJmpwZWdfY2ssCS5jb25faWQgPSAianBlZ19jayIJfSwKKwl7IC5jbGsgPSAmbXNfY2ssCS5jb25faWQgPSAibXNfY2siCX0sCisJeyAuY2xrID0gJnRvdWNoX2NrLAkuY29uX2lkID0gInRvdWNoX2NrIgl9LAorCXsgLmNsayA9ICZpMmMwX2NrLAkuZGV2X2lkID0gInBueC1pMmMuMCIJfSwKKwl7IC5jbGsgPSAmaTJjMV9jaywJLmRldl9pZCA9ICJwbngtaTJjLjEiCX0sCisJeyAuY2xrID0gJmkyYzJfY2ssCS5kZXZfaWQgPSAicG54LWkyYy4yIgl9LAorCXsgLmNsayA9ICZzcGkwX2NrLAkuY29uX2lkID0gInNwaTBfY2siCX0sCisJeyAuY2xrID0gJnNwaTFfY2ssCS5jb25faWQgPSAic3BpMV9jayIJfSwKKwl7IC5jbGsgPSAmdWFydDNfY2ssCS5jb25faWQgPSAidWFydDNfY2siCX0sCisJeyAuY2xrID0gJnVhcnQ0X2NrLAkuY29uX2lkID0gInVhcnQ0X2NrIgl9LAorCXsgLmNsayA9ICZ1YXJ0NV9jaywJLmNvbl9pZCA9ICJ1YXJ0NV9jayIJfSwKKwl7IC5jbGsgPSAmdWFydDZfY2ssCS5jb25faWQgPSAidWFydDZfY2siCX0sCisJeyAuY2xrID0gJndkdF9jaywJLmRldl9pZCA9ICJwbng0MDA4LXdhdGNoZG9nIiB9LAorfTsKKworc3RhdGljIHZvaWQgbG9jYWxfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChXQVJOX09OKGNsay0+dXNlY291bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICghKC0tY2xrLT51c2Vjb3VudCkpIHsKKwkJaWYgKGNsay0+ZGlzYWJsZSkKKwkJCWNsay0+ZGlzYWJsZShjbGspOworCQllbHNlIGlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiBjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZSkKKwkJCWNsay0+c2V0X3JhdGUoY2xrLCAwKTsKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJbG9jYWxfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCX0KK30KKwogc3RhdGljIGludCBsb2NhbF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiAhY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUKLQkgICAgJiYgY2xrLT51c2VyX3JhdGUpCi0JCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCBjbGstPnVzZXJfcmF0ZSk7Ci0JcmV0dXJuIHJldDsKLX0KKwlpZiAoY2xrLT51c2Vjb3VudCA9PSAwKSB7CisJCWlmIChjbGstPnBhcmVudCkgeworCQkJcmV0ID0gbG9jYWxfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZ290byBvdXQ7CisJCX0KIAotc3RhdGljIHZvaWQgbG9jYWxfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiBjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZSkKLQkJY2xrLT5zZXRfcmF0ZShjbGssIDApOwotfQorCQlpZiAoY2xrLT5lbmFibGUpCisJCQlyZXQgPSBjbGstPmVuYWJsZShjbGspOworCQllbHNlIGlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiAhY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUKKwkJCSAgICAmJiBjbGstPnVzZXJfcmF0ZSkKKwkJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCBjbGstPnVzZXJfcmF0ZSk7CiAKLXN0YXRpYyB2b2lkIGxvY2FsX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQlsb2NhbF9jbGtfZGlzYWJsZShjbGspOwotCQlpZiAoY2xrLT5wYXJlbnQpCi0JCQlsb2NhbF9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCX0KLX0KLQotc3RhdGljIGludCBsb2NhbF9jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLQkJaWYgKGNsay0+cGFyZW50KQotCQkJcmV0ID0gbG9jYWxfY2xrX3VzZShjbGstPnBhcmVudCk7Ci0KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQljbGstPnVzZWNvdW50LS07CisJCWlmIChyZXQgIT0gMCAmJiBjbGstPnBhcmVudCkgeworCQkJbG9jYWxfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsayk7Ci0KLQkJaWYgKHJldCAhPSAwICYmIGNsay0+cGFyZW50KSB7Ci0JCQlsb2NhbF9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCQkJY2xrLT51c2Vjb3VudC0tOwotCQl9CisJCWNsay0+dXNlY291bnQrKzsKIAl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTg2NiwzNSArODk2LDYgQEAKIAogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOwogCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKLQlzdHJ1Y3QgY2xrICoqY2xrcDsKLQotCWNsb2NrX2xvY2soKTsKLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7Ci0JICAgICBjbGtwKyspIHsKLQkJaWYgKHN0cmNtcChpZCwgKCpjbGtwKS0+bmFtZSkgPT0gMAotCQkgICAgJiYgdHJ5X21vZHVsZV9nZXQoKCpjbGtwKS0+b3duZXIpKSB7Ci0JCQljbGsgPSAoKmNsa3ApOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JY2xvY2tfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQljbG9ja19sb2NrKCk7Ci0JaWYgKGNsayAmJiAhSVNfRVJSKGNsaykpCi0JCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Ci0JY2xvY2tfdW5sb2NrKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotCiB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyByZXQ7CkBAIC05MDcsMTAgKzkwOCwxMCBAQAogCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCWNsb2NrX2xvY2soKTsKLQlyZXQgPSBsb2NhbF9jbGtfdXNlKGNsayk7CisJcmV0ID0gbG9jYWxfY2xrX2VuYWJsZShjbGspOwogCWNsb2NrX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CkBAIC05MjAsNyArOTIxLDcgQEAKIHZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWNsb2NrX2xvY2soKTsKLQlsb2NhbF9jbGtfdW51c2UoY2xrKTsKKwlsb2NhbF9jbGtfZGlzYWJsZShjbGspOwogCWNsb2NrX3VubG9jaygpOwogfQogCkBAIC05NjcsMTggKzk2OCwyNCBAQAogCiAJZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOwogCSAgICAgY2xrcCsrKSB7Ci0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJiBORUVEU19JTklUSUFMSVpBVElPTikKLQkJICAgICYmICgoKmNsa3ApLT5zZXRfcmF0ZSkpIHsKLQkJCSgqY2xrcCktPnVzZXJfcmF0ZSA9ICgqY2xrcCktPnJhdGU7Ci0JCQlsb2NhbF9zZXRfcmF0ZSgoKmNsa3ApLCAoKmNsa3ApLT51c2VyX3JhdGUpOwotCQkJaWYgKCgqY2xrcCktPnNldF9wYXJlbnQpCi0JCQkJKCpjbGtwKS0+c2V0X3BhcmVudCgoKmNsa3ApLCAoKmNsa3ApLT5wYXJlbnQpOworCQlzdHJ1Y3QgY2xrICpjbGsgPSAqY2xrcDsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBORUVEU19JTklUSUFMSVpBVElPTikgeworCQkJaWYgKGNsay0+c2V0X3JhdGUpIHsKKwkJCQljbGstPnVzZXJfcmF0ZSA9IGNsay0+cmF0ZTsKKwkJCQlsb2NhbF9zZXRfcmF0ZShjbGssIGNsay0+dXNlcl9yYXRlKTsKKwkJCQlpZiAoY2xrLT5zZXRfcGFyZW50KQorCQkJCQljbGstPnNldF9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7CisJCQl9CisJCQlpZiAoY2xrLT5lbmFibGUgJiYgY2xrLT51c2Vjb3VudCkKKwkJCQljbGstPmVuYWJsZShjbGspOworCQkJaWYgKGNsay0+ZGlzYWJsZSAmJiAhY2xrLT51c2Vjb3VudCkKKwkJCQljbGstPmRpc2FibGUoY2xrKTsKIAkJfQogCQlwcl9kZWJ1ZygiJXM6IGNsb2NrICVzLCByYXRlICVsZFxuIiwKLQkJCV9fZnVuY19fLCAoKmNsa3ApLT5uYW1lLCAoKmNsa3ApLT5yYXRlKTsKKwkJCV9fZnVuY19fLCBjbGstPm5hbWUsIGNsay0+cmF0ZSk7CiAJfQogCi0JbG9jYWxfY2xrX3VzZSgmY2tfcGxsNCk7CisJbG9jYWxfY2xrX2VuYWJsZSgmY2tfcGxsNCk7CiAKIAkvKiBpZiBja18xM01IeiBpcyBub3QgdXNlZCwgZGlzYWJsZSBpdC4gKi8KIAlpZiAoY2tfMTNNSHoudXNlY291bnQgPT0gMCkKQEAgLTk4Nyw2ICs5OTQsOCBAQAogCS8qIERpc2FibGUgYXV0b2Nsb2NraW5nICovCiAJX19yYXdfd3JpdGViKDB4ZmYsIEFVVE9DTEtfQ1RSTCk7CiAKKwljbGtkZXZfYWRkX3RhYmxlKG9uY2hpcF9jbGtyZWcsIEFSUkFZX1NJWkUob25jaGlwX2Nsa3JlZykpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKaW5kZXggY2Q1OGYzNy4uMzk3MjBkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKQEAgLTE0LDggKzE0LDYgQEAKICNkZWZpbmUgX19BUkNIX0FSTV9QTlg0MDA4X0NMT0NLX0hfXwogCiBzdHJ1Y3QgY2xrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgY2xrICpwYXJlbnQ7CiAJc3RydWN0IGNsayAqcHJvcGFnYXRlX25leHQ7CkBAIC0yOSw5ICsyNywxMSBAQAogCXU4IGVuYWJsZV9zaGlmdDE7CiAJdTMyIGVuYWJsZV9yZWcxOwogCXUzMiBwYXJlbnRfc3dpdGNoX3JlZzsKLQkgdTMyKCpyb3VuZF9yYXRlKSAoc3RydWN0IGNsayAqLCB1MzIpOworCXUzMigqcm91bmRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdTMyKTsKIAlpbnQgKCpzZXRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdTMyKTsKIAlpbnQgKCpzZXRfcGFyZW50KSAoc3RydWN0IGNsayAqIGNsaywgc3RydWN0IGNsayAqIHBhcmVudCk7CisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgY2xrICopOworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOwogfTsKIAogLyogRmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pMmMuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pMmMuYwppbmRleCBmM2ZlYTI5Li44MTAzZjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2kyYy5jCkBAIC0xOCwxMjAgKzE4LDI0IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KIAotc3RhdGljIGludCBzZXRfY2xvY2tfcnVuKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGNsayAqY2xrOwotCWNoYXIgbmFtZVsxMF07Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlzbnByaW50ZihuYW1lLCAxMCwgImkyYyVkX2NrIiwgcGRldi0+aWQpOwotCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgbmFtZSk7Ci0JaWYgKCFJU19FUlIoY2xrKSkgewotCQljbGtfc2V0X3JhdGUoY2xrLCAxKTsKLQkJY2xrX3B1dChjbGspOwotCX0gZWxzZQotCQlyZXR2YWwgPSAtRU5PRU5UOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBzZXRfY2xvY2tfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBjbGsgKmNsazsKLQljaGFyIG5hbWVbMTBdOwotCWludCByZXR2YWwgPSAwOwotCi0Jc25wcmludGYobmFtZSwgMTAsICJpMmMlZF9jayIsIHBkZXYtPmlkKTsKLQljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIG5hbWUpOwotCWlmICghSVNfRVJSKGNsaykpIHsKLQkJY2xrX3NldF9yYXRlKGNsaywgMCk7Ci0JCWNsa19wdXQoY2xrKTsKLQl9IGVsc2UKLQkJcmV0dmFsID0gLUVOT0VOVDsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX3BueF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLSNpZmRlZiBDT05GSUdfUE0KLQlyZXR2YWwgPSBzZXRfY2xvY2tfcnVuKHBkZXYpOwotI2VuZGlmCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBpMmNfcG54X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCByZXR2YWwgPSAwOwotI2lmZGVmIENPTkZJR19QTQotCXJldHZhbCA9IHNldF9jbG9ja19ydW4ocGRldik7Ci0jZW5kaWYKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdTMyIGNhbGN1bGF0ZV9pbnB1dF9mcmVxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIEhDTEtfTUhaOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgcG54X2FsZ29fZGF0YTAgPSB7CitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMwX2RhdGEgPSB7CisJLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIwIiwKIAkuYmFzZSA9IFBOWDQwMDhfSTJDMV9CQVNFLAogCS5pcnEgPSBJMkNfMV9JTlQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHBueF9hbGdvX2RhdGExID0geworc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMV9kYXRhID0geworCS5uYW1lID0gSTJDX0NISVBfTkFNRSAiMSIsCiAJLmJhc2UgPSBQTlg0MDA4X0kyQzJfQkFTRSwKIAkuaXJxID0gSTJDXzJfSU5ULAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSBwbnhfYWxnb19kYXRhMiA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzJfZGF0YSA9IHsKKwkubmFtZSA9ICJVU0ItSTJDIiwKIAkuYmFzZSA9IChQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4MzAwKSwKIAkuaXJxID0gVVNCX0kyQ19JTlQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBueF9hZGFwdGVyMCA9IHsKLQkubmFtZSA9IEkyQ19DSElQX05BTUUgIjAiLAotCS5hbGdvX2RhdGEgPSAmcG54X2FsZ29fZGF0YTAsCi19Owotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwbnhfYWRhcHRlcjEgPSB7Ci0JLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIxIiwKLQkuYWxnb19kYXRhID0gJnBueF9hbGdvX2RhdGExLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwbnhfYWRhcHRlcjIgPSB7Ci0JLm5hbWUgPSAiVVNCLUkyQyIsCi0JLmFsZ29fZGF0YSA9ICZwbnhfYWxnb19kYXRhMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzBfZGF0YSA9IHsKLQkuc3VzcGVuZCA9IGkyY19wbnhfc3VzcGVuZCwKLQkucmVzdW1lID0gaTJjX3BueF9yZXN1bWUsCi0JLmNhbGN1bGF0ZV9pbnB1dF9mcmVxID0gY2FsY3VsYXRlX2lucHV0X2ZyZXEsCi0JLnNldF9jbG9ja19ydW4gPSBzZXRfY2xvY2tfcnVuLAotCS5zZXRfY2xvY2tfc3RvcCA9IHNldF9jbG9ja19zdG9wLAotCS5hZGFwdGVyID0gJnBueF9hZGFwdGVyMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzFfZGF0YSA9IHsKLQkuc3VzcGVuZCA9IGkyY19wbnhfc3VzcGVuZCwKLQkucmVzdW1lID0gaTJjX3BueF9yZXN1bWUsCi0JLmNhbGN1bGF0ZV9pbnB1dF9mcmVxID0gY2FsY3VsYXRlX2lucHV0X2ZyZXEsCi0JLnNldF9jbG9ja19ydW4gPSBzZXRfY2xvY2tfcnVuLAotCS5zZXRfY2xvY2tfc3RvcCA9IHNldF9jbG9ja19zdG9wLAotCS5hZGFwdGVyID0gJnBueF9hZGFwdGVyMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzJfZGF0YSA9IHsKLQkuc3VzcGVuZCA9IGkyY19wbnhfc3VzcGVuZCwKLQkucmVzdW1lID0gaTJjX3BueF9yZXN1bWUsCi0JLmNhbGN1bGF0ZV9pbnB1dF9mcmVxID0gY2FsY3VsYXRlX2lucHV0X2ZyZXEsCi0JLnNldF9jbG9ja19ydW4gPSBzZXRfY2xvY2tfcnVuLAotCS5zZXRfY2xvY2tfc3RvcCA9IHNldF9jbG9ja19zdG9wLAotCS5hZGFwdGVyID0gJnBueF9hZGFwdGVyMiwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzBfZGV2aWNlID0gewogCS5uYW1lID0gInBueC1pMmMiLAogCS5pZCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIzN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA2ZDE0MDdmLi42Y2E4YmQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92CVxyeCwgIzB4MDAwOTAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCA1ZmYwMTk2Li5iMzgzYzdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xNCw2MCArMTQsNiBAQAogI2lmbmRlZiBfX1BOWDQwMDhfVElNRVhfSAogI2RlZmluZSBfX1BOWDQwMDhfVElNRVhfSAogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMDAwMDAwCiAKLSNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKHgpCi0KLS8qIE1pbGxpU2Vjb25kIFRpbWVyIC0gQ2hhcHRlciAyMSBQYWdlIDIwMiAqLwotCi0jZGVmaW5lIE1TVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDApKQotI2RlZmluZSBNU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg0KSkKLSNkZWZpbmUgTVNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4OCkpCi0jZGVmaW5lIE1TVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE0KSkKLSNkZWZpbmUgTVNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTgpKQotI2RlZmluZSBNU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxYykpCi0KLS8qIEhpZ2ggU3BlZWQgVGltZXIgLSBDaHBhdGVyIDIyLCBQYWdlIDIwNSAqLwotCi0jZGVmaW5lIEhTVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDApKQotI2RlZmluZSBIU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg0KSkKLSNkZWZpbmUgSFNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4OCkpCi0jZGVmaW5lIEhTVElNX1BNQVRDSCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweEMpKQotI2RlZmluZSBIU1RJTV9QQ09VTlQgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxMCkpCi0jZGVmaW5lIEhTVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE0KSkKLSNkZWZpbmUgSFNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTgpKQotI2RlZmluZSBIU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxYykpCi0jZGVmaW5lIEhTVElNX01BVENIMiAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDIwKSkKLSNkZWZpbmUgSFNUSU1fQ0NSICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjgpKQotI2RlZmluZSBIU1RJTV9DUjAgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyQykpCi0jZGVmaW5lIEhTVElNX0NSMSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDMwKSkKLQotLyogSU1QT1JUQU5UOiBib3RoIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLwotCi0vKiB4U1RJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQotI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MSkKLSNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCi0jZGVmaW5lIE1SMV9JTlQgICAgICAgICgxPDwzKQotI2RlZmluZSBSRVNFVF9DT1VOVDEgICAoMTw8NCkKLSNkZWZpbmUgU1RPUF9DT1VOVDEgICAgKDE8PDUpCi0jZGVmaW5lIE1SMl9JTlQgICAgICAgICgxPDw2KQotI2RlZmluZSBSRVNFVF9DT1VOVDIgICAoMTw8NykKLSNkZWZpbmUgU1RPUF9DT1VOVDIgICAgKDE8PDgpCi0KLS8qIHhTVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKLSNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCi0jZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQotCi0vKiB4U1RJTV9JTlQgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIE1BVENIMF9JTlQgICAgIDEKLSNkZWZpbmUgTUFUQ0gxX0lOVCAgICAgKDE8PDEpCi0jZGVmaW5lIE1BVENIMl9JTlQgICAgICgxPDwyKQotI2RlZmluZSBSVENfVElDSzAgICAgICAoMTw8NCkKLSNkZWZpbmUgUlRDX1RJQ0sxICAgICAgKDE8PDUpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwppbmRleCBiM2Q4ZDUzLi4xZjA1ODUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCmluZGV4IGZjMGJhMTguLjBjOGFhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAorI2luY2x1ZGUgInRpbWUuaCIKKwogLyohIE5vdGU6IGFsbCB0aW1lcnMgYXJlIFVQQ09VTlRJTkcgKi8KIAogLyohCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWU4OGM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogUE5YNDAwOCB0aW1lcnMgaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3I6IERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBQTlhfVElNRV9ICisjZGVmaW5lIFBOWF9USU1FX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSh4KQorCisvKiBNaWxsaVNlY29uZCBUaW1lciAtIENoYXB0ZXIgMjEgUGFnZSAyMDIgKi8KKworI2RlZmluZSBNU1RJTV9JTlQgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgwKSkKKyNkZWZpbmUgTVNUSU1fQ1RSTCAgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4NCkpCisjZGVmaW5lIE1TVElNX0NPVU5URVIgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDgpKQorI2RlZmluZSBNU1RJTV9NQ1RSTCAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxNCkpCisjZGVmaW5lIE1TVElNX01BVENIMCAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE4KSkKKyNkZWZpbmUgTVNUSU1fTUFUQ0gxICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MWMpKQorCisvKiBIaWdoIFNwZWVkIFRpbWVyIC0gQ2hwYXRlciAyMiwgUGFnZSAyMDUgKi8KKworI2RlZmluZSBIU1RJTV9JTlQgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgwKSkKKyNkZWZpbmUgSFNUSU1fQ1RSTCAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4NCkpCisjZGVmaW5lIEhTVElNX0NPVU5URVIgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDgpKQorI2RlZmluZSBIU1RJTV9QTUFUQ0ggIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHhDKSkKKyNkZWZpbmUgSFNUSU1fUENPVU5UICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTApKQorI2RlZmluZSBIU1RJTV9NQ1RSTCAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxNCkpCisjZGVmaW5lIEhTVElNX01BVENIMCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE4KSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gxICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MWMpKQorI2RlZmluZSBIU1RJTV9NQVRDSDIgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyMCkpCisjZGVmaW5lIEhTVElNX0NDUiAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDI4KSkKKyNkZWZpbmUgSFNUSU1fQ1IwICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MkMpKQorI2RlZmluZSBIU1RJTV9DUjEgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgzMCkpCisKKy8qIElNUE9SVEFOVDogYm90aCB0aW1lcnMgYXJlIFVQQ09VTlRJTkcgKi8KKworLyogeFNUSU1fTUNUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1SMF9JTlQgICAgICAgIDEKKyNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDE8PDEpCisjZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxPDwyKQorI2RlZmluZSBNUjFfSU5UICAgICAgICAoMTw8MykKKyNkZWZpbmUgUkVTRVRfQ09VTlQxICAgKDE8PDQpCisjZGVmaW5lIFNUT1BfQ09VTlQxICAgICgxPDw1KQorI2RlZmluZSBNUjJfSU5UICAgICAgICAoMTw8NikKKyNkZWZpbmUgUkVTRVRfQ09VTlQyICAgKDE8PDcpCisjZGVmaW5lIFNUT1BfQ09VTlQyICAgICgxPDw4KQorCisvKiB4U1RJTV9DVFJMIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDT1VOVF9FTkFCICAgICAxCisjZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxPDwxKQorI2RlZmluZSBERUJVR19FTiAgICAgICAoMTw8MikKKworLyogeFNUSU1fSU5UIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNQVRDSDBfSU5UICAgICAxCisjZGVmaW5lIE1BVENIMV9JTlQgICAgICgxPDwxKQorI2RlZmluZSBNQVRDSDJfSU5UICAgICAoMTw8MikKKyNkZWZpbmUgUlRDX1RJQ0swICAgICAgKDE8PDQpCisjZGVmaW5lIFJUQ19USUNLMSAgICAgICgxPDw1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCmluZGV4IDQ5YWUzODIuLmFiYmEwMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYwpAQCAtNzgsMTEgKzc4LDMgQEAKIAkuZW5hYmxlCQk9IGNsa19ja2VuX2VuYWJsZSwKIAkuZGlzYWJsZQk9IGNsa19ja2VuX2Rpc2FibGUsCiB9OwotCi12b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWNsa2Rldl9hZGQoJmNsa3NbaV0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKaW5kZXggOTc4YTM2Ni4uZDg0ODg3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCkBAIC02Nyw3ICs2NywzIEBACiBleHRlcm4gdm9pZCBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICopOwogI2VuZGlmCiAKLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7Ci1pbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqYWxpYXNfbmFtZSwgY2hhciAqaWQsCi0Jc3RydWN0IGRldmljZSAqZGV2KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCmluZGV4IDkxNDE3ZjAuLjk2ZWQxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKQEAgLTEyOCw2ICsxMjgsNiBAQAogCiB2b2lkIGVzZXJpZXNfcmVnaXN0ZXJfY2xrcyh2b2lkKQogewotCWNsa3NfcmVnaXN0ZXIoZXNlcmllc19jbGtyZWdzLCBBUlJBWV9TSVpFKGVzZXJpZXNfY2xrcmVncykpOworCWNsa2Rldl9hZGRfdGFibGUoZXNlcmllc19jbGtyZWdzLCBBUlJBWV9TSVpFKGVzZXJpZXNfY2xrcmVncykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKaW5kZXggMzFhYmU2ZC4uNjcwOWIxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApAQCAtMzUsOCArMzUsNiBAQAogI2RlZmluZSBQWEFfQ0FNRVJBX1ZTUAkJMHg0MDAKIAogc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICopOwotCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1jbGtfMTBraHo7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA1NWQ2YTE3Li4wMWNmODEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg0MDAwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZTkwYzVlZS4uYmZlY2ZiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC04LDQgKzgsNCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMFVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCAyYzFiMGI3Li4wYjlhZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAkJcmVzZXRfc3RhdHVzID0gUkNTUjsKIAotCQljbGtzX3JlZ2lzdGVyKHB4YTI1eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTI1eF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUocHhhMjV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjV4X2Nsa3JlZ3MpKTsKIAogCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAxNikpKQogCQkJcmV0dXJuIHJldDsKQEAgLTM3MCw3ICszNzAsNyBAQAogCiAJLyogT25seSBhZGQgSFdVQVJUIGZvciBQWEEyNTUvMjZ4OyBQWEEyMTAvMjUwIGRvIG5vdCBoYXZlIGl0LiAqLwogCWlmIChjcHVfaXNfcHhhMjU1KCkpCi0JCWNsa3NfcmVnaXN0ZXIoJnB4YTI1eF9od3VhcnRfY2xrcmVnLCAxKTsKKwkJY2xrZGV2X2FkZCgmcHhhMjV4X2h3dWFydF9jbGtyZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggNmEwYjczMS4uZDc4MzEyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCiAJCXJlc2V0X3N0YXR1cyA9IFJDU1I7CiAKLQkJY2xrc19yZWdpc3RlcihweGEyN3hfY2xrcmVncywgQVJSQVlfU0laRShweGEyN3hfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKHB4YTI3eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTI3eF9jbGtyZWdzKSk7CiAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCmluZGV4IGY0YWY2ZTJiLi40MGJiMTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKIAlpZiAoY3B1X2lzX3B4YTMwMCgpIHx8IGNwdV9pc19weGEzMTAoKSkgewogCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKIAkJbWZwX2luaXRfYWRkcihweGEzMDBfbWZwX2FkZHJfbWFwKTsKLQkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShjb21tb25fY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKEFSUkFZX0FORF9TSVpFKGNvbW1vbl9jbGtyZWdzKSk7CiAJfQogCiAJaWYgKGNwdV9pc19weGEzMTAoKSkgewogCQltZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOwotCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTMxMF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUoQVJSQVlfQU5EX1NJWkUocHhhMzEwX2Nsa3JlZ3MpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKaW5kZXggYzczNzNlNy4uOGQ2MTRlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlpZiAoY3B1X2lzX3B4YTMyMCgpKSB7CiAJCW1mcF9pbml0X2Jhc2UoaW9fcDJ2KE1GUFJfQkFTRSkpOwogCQltZnBfaW5pdF9hZGRyKHB4YTMyMF9tZnBfYWRkcl9tYXApOwotCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTMyMF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUoQVJSQVlfQU5EX1NJWkUocHhhMzIwX2Nsa3JlZ3MpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggZmNiMDcyMS4uNGQ3YzAzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTYzNCw3ICs2MzQsNyBAQAogCQkgKi8KIAkJQVNDUiAmPSB+KEFTQ1JfUkRIIHwgQVNDUl9EMVMgfCBBU0NSX0QyUyB8IEFTQ1JfRDNTKTsKIAotCQljbGtzX3JlZ2lzdGVyKHB4YTN4eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTN4eF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUocHhhM3h4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhM3h4X2Nsa3JlZ3MpKTsKIAogCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAzMikpKQogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggOWYyOTM0My4uOTBiZDRlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTM0NiwxMCArMzQ2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDkzMmQ4YWYuLjg2NjIyMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMzMsNyArMzMsNyBAQAogI2Vycm9yICJVbmtub3duIFJlYWxWaWV3IHBsYXRmb3JtIgogI2VuZGlmCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgICAgICAjMHgxMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGZlMGRlMWIuLmEyYTRjNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTE4LDQgKzE4LDQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQJCTB4ZjgwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJCTB4ZjgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBiMmE5MzlmZi4uNmZjOGQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDAzMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNGMyOWE4OWEuLjBlZWY3OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKICNkZWZpbmUgU0hJRlRfMjQ0MFRYRiAoMTQtOSkKIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQzI0WFhfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGYwZWYwYWIuLjIzOTQ3NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQzI0WFhfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA0ZDRmZTQ4Li45MTQ2NTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTIsNiArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4ZTAwMDAwMDBVTCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYjE4YWM1MjYuLjVjODg4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTIxLDcgKzIxLDcgQEAKIAkgKiBhbGlnbmVkIGFuZCBhZGQgaW4gdGhlIG9mZnNldCB3aGVuIHdlIGxvYWQgdGhlIHZhbHVlIGhlcmUuCiAJICovCiAKLQkubWFjcm8gYWRkcnVhcnQsIHJ4CisJLm1hY3JvIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCiAJCWxkcmVxCVxyeCwgPSBTM0NfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDlkMTQyY2MuLmUxODFmNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTIyLDcgKzIyLDcgQEAKIAkgKiBhbGlnbmVkIGFuZCBhZGQgaW4gdGhlIG9mZnNldCB3aGVuIHdlIGxvYWQgdGhlIHZhbHVlIGhlcmUuCiAJICovCiAKLQkubWFjcm8gYWRkcnVhcnQsIHJ4CisJLm1hY3JvIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCiAJCWxkcmVxCVxyeCwgPSBTM0NfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxZjA2MzRkLi4zMzZhZGNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTIsNyArMTIsNyBAQAogKi8KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ODAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGVjOGZkYzUuLmIzZDAwMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSw0ICsxLDQgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwVUwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBmOTdhNzYyLi41MGYwNzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbW92CVxyeCwgIzB4ZTAwMDAwMDAKIAkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDNmOAogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYwppbmRleCAxMTFmN2VhLi41YWY3MWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYwpAQCAtNjEwLDM0ICs2MTAsMzQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3JvdW5kX3JhdGVfbWNsayhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpZiAocmF0ZSA+PSAxODkwMDAwMCkKKwlpZiAocmF0ZSA8PSAxODkwMDAwMCkKIAkJcmV0dXJuIDE4OTAwMDAwOwotCWlmIChyYXRlID49IDIwODAwMDAwKQorCWlmIChyYXRlIDw9IDIwODAwMDAwKQogCQlyZXR1cm4gMjA4MDAwMDA7Ci0JaWYgKHJhdGUgPj0gMjMxMDAwMDApCisJaWYgKHJhdGUgPD0gMjMxMDAwMDApCiAJCXJldHVybiAyMzEwMDAwMDsKLQlpZiAocmF0ZSA+PSAyNjAwMDAwMCkKKwlpZiAocmF0ZSA8PSAyNjAwMDAwMCkKIAkJcmV0dXJuIDI2MDAwMDAwOwotCWlmIChyYXRlID49IDI5NzAwMDAwKQorCWlmIChyYXRlIDw9IDI5NzAwMDAwKQogCQlyZXR1cm4gMjk3MDAwMDA7Ci0JaWYgKHJhdGUgPj0gMzQ3MDAwMDApCisJaWYgKHJhdGUgPD0gMzQ3MDAwMDApCiAJCXJldHVybiAzNDcwMDAwMDsKLQlpZiAocmF0ZSA+PSA0MTYwMDAwMCkKKwlpZiAocmF0ZSA8PSA0MTYwMDAwMCkKIAkJcmV0dXJuIDQxNjAwMDAwOwotCWlmIChyYXRlID49IDUyMDAwMDAwKQorCWlmIChyYXRlIDw9IDUyMDAwMDAwKQogCQlyZXR1cm4gNTIwMDAwMDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19yb3VuZF9yYXRlX2NwdWNsayhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpZiAocmF0ZSA+PSAxMzAwMDAwMCkKKwlpZiAocmF0ZSA8PSAxMzAwMDAwMCkKIAkJcmV0dXJuIDEzMDAwMDAwOwotCWlmIChyYXRlID49IDUyMDAwMDAwKQorCWlmIChyYXRlIDw9IDUyMDAwMDAwKQogCQlyZXR1cm4gNTIwMDAwMDA7Ci0JaWYgKHJhdGUgPj0gMTA0MDAwMDAwKQorCWlmIChyYXRlIDw9IDEwNDAwMDAwMCkKIAkJcmV0dXJuIDEwNDAwMDAwMDsKLQlpZiAocmF0ZSA+PSAyMDgwMDAwMDApCisJaWYgKHJhdGUgPD0gMjA4MDAwMDAwKQogCQlyZXR1cm4gMjA4MDAwMDAwOwogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTI3NiwxMSArMTI3Niw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbGtfcmVnaXN0ZXIodm9pZCkKIHsKLQlpbnQgaTsKLQogCS8qIFJlZ2lzdGVyIHRoZSBsb29rdXBzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCmluZGV4IDY1M2UyNWIuLjAxYjUwMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwpAQCAtMyw3ICszLDcgQEAKICAqIGFyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKICAqCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNULUVyaWNzc29uIEFCCiAgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAqIENvcmUgcGxhdGZvcm0gc3VwcG9ydCwgSVJRIGhhbmRsaW5nIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMuCiAgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9jb2g5MDEzMTguaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMjksNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc3lzY29uLmg+CisjaW5jbHVkZSA8bWFjaC9kbWFfY2hhbm5lbHMuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAibW1jLmgiCkBAIC0zNzIsOCArMzc0LDEwMTkgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbWFfcmVzb3VyY2VbXSA9IHsKKwl7CisJCS5zdGFydCA9IFUzMDBfRE1BQ19CQVNFLAorCQkuZW5kID0gVTMwMF9ETUFDX0JBU0UgKyBQQUdFX1NJWkUgLSAxLAorCQkuZmxhZ3MgPSAgSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9VMzAwX0RNQSwKKwkJLmVuZCA9IElSUV9VMzAwX0RNQSwKKwkJLmZsYWdzID0gIElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisvKiBwb2ludHMgb3V0IGFsbCBkbWEgc2xhdmUgY2hhbm5lbHMuCisgKiBTeW50YXggaXMgW0ExLCBCMSwgQTIsIEIyLCAuLi4uICwtMSwtMV0KKyAqIFNlbGVjdCBhbGwgY2hhbm5lbHMgZnJvbSBBIHRvIEIsIGVuZCBvZiBsaXN0IGlzIG1hcmtlZCB3aXRoIC0xLC0xCisgKi8KK3N0YXRpYyBpbnQgZG1hX3NsYXZlX2NoYW5uZWxzW10gPSB7CisJVTMwMF9ETUFfTVNMX1RYXzAsIFUzMDBfRE1BX1NQSV9SWCwKKwlVMzAwX0RNQV9VQVJUMV9UWCwgVTMwMF9ETUFfVUFSVDFfUlgsIC0xLCAtMX07CisKKy8qIHBvaW50cyBvdXQgYWxsIGRtYSBtZW1jcHkgY2hhbm5lbHMuICovCitzdGF0aWMgaW50IGRtYV9tZW1jcHlfY2hhbm5lbHNbXSA9IHsKKwlVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMCwgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzgsIC0xLCAtMX07CisKKyNlbHNlIC8qIENPTkZJR19NQUNIX1UzMDBfQlMzMzUgKi8KKworc3RhdGljIGludCBkbWFfc2xhdmVfY2hhbm5lbHNbXSA9IHtVMzAwX0RNQV9NU0xfVFhfMCwgVTMwMF9ETUFfU1BJX1JYLCAtMSwgLTF9Oworc3RhdGljIGludCBkbWFfbWVtY3B5X2NoYW5uZWxzW10gPSB7CisJVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzAsIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8xMCwgLTEsIC0xfTsKKworI2VuZGlmCisKKy8qKiByZWdpc3RlciBkbWEgZm9yIG1lbW9yeSBhY2Nlc3MKKyAqCisgKiBhY3RpdmUgIDEgbWVhbnMgZG1hIGludGVuZHMgdG8gYWNjZXNzIG1lbW9yeQorICogICAgICAgICAwIG1lYW5zIGRtYSB3b250IGFjY2VzcyBtZW1vcnkKKyAqLworc3RhdGljIHZvaWQgY29oOTAxMzE4X2FjY2Vzc19tZW1vcnlfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGFjdGl2ZSkKK3sKK30KKworI2RlZmluZSBmbGFnc19tZW1jcHlfY29uZmlnIChDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ0ZHX1JNX01FTU9SWV9UT19NRU1PUlkgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFKQorI2RlZmluZSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQgKENPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSkKKyNkZWZpbmUgZmxhZ3NfbWVtY3B5X2xsaSAoQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFKQorI2RlZmluZSBmbGFnc19tZW1jcHlfbGxpX2xhc3QgKENPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFKQorCitjb25zdCBzdHJ1Y3QgY29oX2RtYV9jaGFubmVsIGNoYW5fY29uZmlnW1UzMDBfRE1BX0NIQU5ORUxTXSA9IHsKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfMCwKKwkJLm5hbWUgPSAiTVNMIFRYIDAiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAwICogMHg0MCArIDB4MjAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfMSwKKwkJLm5hbWUgPSAiTVNMIFRYIDEiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAxICogMHg0MCArIDB4MjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF8yLAorCQkubmFtZSA9ICJNU0wgVFggMiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDIgKiAweDQwICsgMHgyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkuZGVzY19uYnJfbWF4ID0gMTAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfMywKKwkJLm5hbWUgPSAiTVNMIFRYIDMiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAzICogMHg0MCArIDB4MjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF80LAorCQkubmFtZSA9ICJNU0wgVFggNCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDQgKiAweDQwICsgMHgyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzUsCisJCS5uYW1lID0gIk1TTCBUWCA1IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNSAqIDB4NDAgKyAweDIwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzYsCisJCS5uYW1lID0gIk1TTCBUWCA2IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNiAqIDB4NDAgKyAweDIwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzAsCisJCS5uYW1lID0gIk1TTCBSWCAwIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMCAqIDB4NDAgKyAweDIyMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF8xLAorCQkubmFtZSA9ICJNU0wgUlggMSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDEgKiAweDQwICsgMHgyMjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF8yLAorCQkubmFtZSA9ICJNU0wgUlggMiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDIgKiAweDQwICsgMHgyMjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfMywKKwkJLm5hbWUgPSAiTVNMIFJYIDMiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAzICogMHg0MCArIDB4MjIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzQsCisJCS5uYW1lID0gIk1TTCBSWCA0IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNCAqIDB4NDAgKyAweDIyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF81LAorCQkubmFtZSA9ICJNU0wgUlggNSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDUgKiAweDQwICsgMHgyMjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfNiwKKwkJLm5hbWUgPSAiTVNMIFJYIDYiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA2ICogMHg0MCArIDB4MjIwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTU1DU0RfUlhfVFgsCisJCS5uYW1lID0gIk1NQ1NEIFJYIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSAgVTMwMF9NTUNTRF9CQVNFICsgMHgwODAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCisKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TUFJPX1RYLAorCQkubmFtZSA9ICJNU1BSTyBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TUFJPX1JYLAorCQkubmFtZSA9ICJNU1BSTyBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQwX1RYLAorCQkubmFtZSA9ICJVQVJUMCBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQwX1JYLAorCQkubmFtZSA9ICJVQVJUMCBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0FQRVhfVFgsCisJCS5uYW1lID0gIkFQRVggVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9BUEVYX1JYLAorCQkubmFtZSA9ICJBUEVYIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfUENNX0kyUzBfVFgsCisJCS5uYW1lID0gIlBDTSBJMlMwIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAxLAorCQkuZGV2X2FkZHIgPSBVMzAwX1BDTV9JMlMwX0JBU0UgKyAweDE0LAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9QQ01fSTJTMF9SWCwKKwkJLm5hbWUgPSAiUENNIEkyUzAgUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDEsCisJCS5kZXZfYWRkciA9IFUzMDBfUENNX0kyUzBfQkFTRSArIDB4MTAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1BDTV9JMlMxX1RYLAorCQkubmFtZSA9ICJQQ00gSTJTMSBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMSwKKwkJLmRldl9hZGRyID0gIFUzMDBfUENNX0kyUzFfQkFTRSArIDB4MTQsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1BDTV9JMlMxX1JYLAorCQkubmFtZSA9ICJQQ00gSTJTMSBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMSwKKwkJLmRldl9hZGRyID0gVTMwMF9QQ01fSTJTMV9CQVNFICsgMHgxMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfWEdBTV9DREksCisJCS5uYW1lID0gIlhHQU0gQ0RJIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfWEdBTV9QREksCisJCS5uYW1lID0gIlhHQU0gUERJIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfU1BJX1RYLAorCQkubmFtZSA9ICJTUEkgVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9TUElfUlgsCisJCS5uYW1lID0gIlNQSSBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8wLAorCQkubmFtZSA9ICJHRU5FUkFMIDAwIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMSwKKwkJLm5hbWUgPSAiR0VORVJBTCAwMSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzIsCisJCS5uYW1lID0gIkdFTkVSQUwgMDIiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8zLAorCQkubmFtZSA9ICJHRU5FUkFMIDAzIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNCwKKwkJLm5hbWUgPSAiR0VORVJBTCAwNCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzUsCisJCS5uYW1lID0gIkdFTkVSQUwgMDUiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV82LAorCQkubmFtZSA9ICJHRU5FUkFMIDA2IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNywKKwkJLm5hbWUgPSAiR0VORVJBTCAwNyIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzgsCisJCS5uYW1lID0gIkdFTkVSQUwgMDgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9VQVJUMV9UWCwKKwkJLm5hbWUgPSAiVUFSVDEgVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9VQVJUMV9SWCwKKwkJLm5hbWUgPSAiVUFSVDEgUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfQorI2Vsc2UKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfOSwKKwkJLm5hbWUgPSAiR0VORVJBTCAwOSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzEwLAorCQkubmFtZSA9ICJHRU5FUkFMIDEwIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfQorI2VuZGlmCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY29oOTAxMzE4X3BsYXRmb3JtIGNvaDkwMTMxOF9wbGF0Zm9ybSA9IHsKKwkuY2hhbnNfc2xhdmUgPSBkbWFfc2xhdmVfY2hhbm5lbHMsCisJLmNoYW5zX21lbWNweSA9IGRtYV9tZW1jcHlfY2hhbm5lbHMsCisJLmFjY2Vzc19tZW1vcnlfc3RhdGUgPSBjb2g5MDEzMThfYWNjZXNzX21lbW9yeV9zdGF0ZSwKKwkuY2hhbl9jb25mID0gY2hhbl9jb25maWcsCisJLm1heF9jaGFubmVscyA9IFUzMDBfRE1BX0NIQU5ORUxTLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2RvZ19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAid2RvZyIsCisJLm5hbWUgPSAiY29oOTAxMzI3X3dkb2ciLAogCS5pZCA9IC0xLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3ZG9nX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gd2RvZ19yZXNvdXJjZXMsCkBAIC00MjgsMTEgKzE0NDEsMjMgQEAKIAkucmVzb3VyY2UgPSBhdmVfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQkJPSAiY29oOTAxMzE4IiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gZG1hX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG1hX3Jlc291cmNlKSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb2g5MDEzMThfcGxhdGZvcm0sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCiAvKgogICogTm90aWNlIHRoYXQgQU1CQSBkZXZpY2VzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcGxhdGZvcm0gZGV2aWNlcy4KICAqCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmZG1hX2RldmljZSwKIAkmaTJjMF9kZXZpY2UsCiAJJmkyYzFfZGV2aWNlLAogCSZrZXlwYWRfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKaW5kZXggMGIzNTgyNi4uNWY2MWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgVTMwMF9HUElPX01BWDsgaSsrKSB7CiAJCXZhbCA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQl2YWwgfD0gKHUzMikoKHUzMDBfZ3Bpb19jb25maWdbaV1bal0ucHVsbF91cCA9PSBESVNBQkxFX1BVTExfVVApKSA8PCBqOworCQkJdmFsIHw9ICh1MzIpKCh1MzAwX2dwaW9fY29uZmlnW2ldW2pdLnB1bGxfdXAgPT0gRElTQUJMRV9QVUxMX1VQKSA8PCBqKTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3cml0ZWwodmFsLCB2aXJ0YmFzZSArIFUzMDBfR1BJT19QWFBFUiArIGkgKiBVMzAwX0dQSU9fUE9SVFhfU1BBQ0lORyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBmM2ExY2JiLi5jYTRhMDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkvKiBJZiB3ZSBtb3ZlIHRoZSBhZHJlc3MgdXNpbmcgTU1VLCB1c2UgdGhpcy4gKi8KIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZG1hX2NoYW5uZWxzLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RtYV9jaGFubmVscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzkxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RtYV9jaGFubmVscy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kbWFfY2hhbm5lbHMuaAorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBNYXAgZmlsZSBmb3IgdGhlIFUzMDAgZG1hIGRyaXZlci4KKyAqIEF1dGhvcjogUGVyIEZyaWRlbiA8cGVyLmZyaWRlbkBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaWZuZGVmIERNQV9DSEFOTkVMU19ICisjZGVmaW5lIERNQV9DSEFOTkVMU19ICisKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzAgICAgICAgICAgICAgMAorI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfMSAgICAgICAgICAgICAxCisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF8yICAgICAgICAgICAgIDIKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzMgICAgICAgICAgICAgMworI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfNCAgICAgICAgICAgICA0CisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF81ICAgICAgICAgICAgIDUKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzYgICAgICAgICAgICAgNgorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfMCAgICAgICAgICAgICA3CisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF8xICAgICAgICAgICAgIDgKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzIgICAgICAgICAgICAgOQorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfMyAgICAgICAgICAgICAxMAorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfNCAgICAgICAgICAgICAxMQorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfNSAgICAgICAgICAgICAxMgorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfNiAgICAgICAgICAgICAxMworI2RlZmluZSBVMzAwX0RNQV9NTUNTRF9SWF9UWCAgICAgICAgICAxNAorI2RlZmluZSBVMzAwX0RNQV9NU1BST19UWCAgICAgICAgICAgICAxNQorI2RlZmluZSBVMzAwX0RNQV9NU1BST19SWCAgICAgICAgICAgICAxNgorI2RlZmluZSBVMzAwX0RNQV9VQVJUMF9UWCAgICAgICAgICAgICAxNworI2RlZmluZSBVMzAwX0RNQV9VQVJUMF9SWCAgICAgICAgICAgICAxOAorI2RlZmluZSBVMzAwX0RNQV9BUEVYX1RYICAgICAgICAgICAgICAxOQorI2RlZmluZSBVMzAwX0RNQV9BUEVYX1JYICAgICAgICAgICAgICAyMAorI2RlZmluZSBVMzAwX0RNQV9QQ01fSTJTMF9UWCAgICAgICAgICAyMQorI2RlZmluZSBVMzAwX0RNQV9QQ01fSTJTMF9SWCAgICAgICAgICAyMgorI2RlZmluZSBVMzAwX0RNQV9QQ01fSTJTMV9UWCAgICAgICAgICAyMworI2RlZmluZSBVMzAwX0RNQV9QQ01fSTJTMV9SWCAgICAgICAgICAyNAorI2RlZmluZSBVMzAwX0RNQV9YR0FNX0NESSAgICAgICAgICAgICAyNQorI2RlZmluZSBVMzAwX0RNQV9YR0FNX1BESSAgICAgICAgICAgICAyNgorI2RlZmluZSBVMzAwX0RNQV9TUElfVFggICAgICAgICAgICAgICAyNworI2RlZmluZSBVMzAwX0RNQV9TUElfUlggICAgICAgICAgICAgICAyOAorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMCAgICAyOQorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMSAgICAzMAorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMiAgICAzMQorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMyAgICAzMgorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNCAgICAzMworI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNSAgICAzNAorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNiAgICAzNQorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNyAgICAzNgorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfOCAgICAzNworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKyNkZWZpbmUgVTMwMF9ETUFfVUFSVDFfVFggICAgICAgICAgICAgMzgKKyNkZWZpbmUgVTMwMF9ETUFfVUFSVDFfUlggICAgICAgICAgICAgMzkKKyNlbHNlCisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV85ICAgIDM4CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8xMCAgIDM5CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKyNkZWZpbmUgVTMwMF9ETUFfREVWSUNFX0NIQU5ORUxTICAgICAgMzIKKyNlbHNlCisjZGVmaW5lIFUzMDBfRE1BX0RFVklDRV9DSEFOTkVMUyAgICAgIDMwCisjZW5kaWYKKyNkZWZpbmUgVTMwMF9ETUFfQ0hBTk5FTFMgICAgICAgICAgICAgNDAKKworCisjZW5kaWYgLyogRE1BX0NIQU5ORUxTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYjAwYzUxYS4uZWM0MjNiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTksNCArOSw0IEBACiAgKiBFbmQgbXVzdCBiZSBhYm92ZSB0aGUgSS9PIHJlZ2lzdGVycyBhbmQgb24gYW4gZXZlbiAyTWlCIGJvdW5kYXJ5LgogICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwppbmRleCBhYTVhZmJjYy4uODAzYWVjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdHUuaD4KKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KQEAgLTEwOCwxMSArMTA5LDk2IEBACiAJLnBlcmlwaGlkID0gU1NQX1BFUl9JRCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgcGwwMzFfZGV2aWNlID0geworCS5kZXYgPSB7CisJCS5pbml0X25hbWUgPSAicGwwMzEiLAorCX0sCisJLnJlcyA9IHsKKwkJLnN0YXJ0ID0gVTg1MDBfUlRDX0JBU0UsCisJCS5lbmQgPSBVODUwMF9SVENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuaXJxID0ge0lSUV9SVENfUlRULCBOT19JUlF9LAorfTsKKworI2RlZmluZSBVODUwMF9JMkNfUkVTT1VSQ0VTKGlkLCBzaXplKQkJXAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ODUwMF9pMmNfcmVzb3VyY2VzXyMjaWRbXSA9IHsJXAorCVswXSA9IHsJCQkJCVwKKwkJLnN0YXJ0CT0gVTg1MDBfSTJDIyNpZCMjX0JBU0UsCVwKKwkJLmVuZAk9IFU4NTAwX0kyQyMjaWQjI19CQVNFICsgc2l6ZSAtIDEsIFwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCVwKKwl9LAkJCQkJXAorCVsxXSA9IHsJCQkJCVwKKwkJLnN0YXJ0CT0gSVJRX0kyQyMjaWQsCQlcCisJCS5lbmQJPSBJUlFfSTJDIyNpZCwJCVwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEJXAorCX0JCQkJCVwKK30KKworVTg1MDBfSTJDX1JFU09VUkNFUygwLCBTWl80Syk7CitVODUwMF9JMkNfUkVTT1VSQ0VTKDEsIFNaXzRLKTsKK1U4NTAwX0kyQ19SRVNPVVJDRVMoMiwgU1pfNEspOworVTg1MDBfSTJDX1JFU09VUkNFUygzLCBTWl80Syk7CisKKyNkZWZpbmUgVTg1MDBfSTJDX0NPTlRST0xMRVIoaWQsIF9zbHN1LCBfdGZ0LCBfcmZ0LCBjbGssIF9zbSkgXAorc3RhdGljIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgdTg1MDBfaTJjXyMjaWQgPSB7IFwKKwkvKgkJCQlcCisJICogc2xhdmUgZGF0YSBzZXR1cCB0aW1lLCB3aGljaCBpcwlcCisJICogMjUwIG5zLDEwMG5zLDEwbnMgd2hpY2ggaXMgMTQsNiwyCVwKKwkgKiByZXNwZWN0aXZlbHkgZm9yIGEgNDggTWh6CVwKKwkgKiBpMmMgY2xvY2sJCQlcCisJICovCQkJCVwKKwkuc2xzdQkJPSBfc2xzdSwJXAorCS8qIFR4IEZJRk8gdGhyZXNob2xkICovCQlcCisJLnRmdAkJPSBfdGZ0LAkJXAorCS8qIFJ4IEZJRk8gdGhyZXNob2xkICovCQlcCisJLnJmdAkJPSBfcmZ0LAkJXAorCS8qIHN0ZC4gbW9kZSBvcGVyYXRpb24gKi8JXAorCS5jbGtfZnJlcQk9IGNsaywJCVwKKwkuc20JCT0gX3NtLAkJXAorfQorCisvKgorICogVGhlIGJvYXJkIHVzZXMgNCBpMmMgY29udHJvbGxlcnMsIGluaXRpYWxpemUgYWxsIG9mCisgKiB0aGVtIHdpdGggc2xhdmUgZGF0YSBzZXR1cCB0aW1lIG9mIDI1MCBucywKKyAqIFR4ICYgUnggRklGTyB0aHJlc2hvbGQgdmFsdWVzIGFzIDEgYW5kIHN0YW5kYXJkCisgKiBtb2RlIG9mIG9wZXJhdGlvbgorICovCitVODUwMF9JMkNfQ09OVFJPTExFUigwLCAweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigxLCAweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigyLAkweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigzLAkweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CisKKyNkZWZpbmUgVTg1MDBfSTJDX1BERVZJQ0UoY2lkKQkJXAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2NvbnRyb2xsZXIjI2NpZCA9IHsgXAorCS5uYW1lID0gIm5tay1pMmMiLAkJXAorCS5pZAkgPSBjaWQsCQkJXAorCS5udW1fcmVzb3VyY2VzID0gMiwJCVwKKwkucmVzb3VyY2UgPSB1ODUwMF9pMmNfcmVzb3VyY2VzXyMjY2lkLAlcCisJLmRldiA9IHsJCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gJnU4NTAwX2kyY18jI2NpZCBcCisJfQkJCQlcCit9CisKK1U4NTAwX0kyQ19QREVWSUNFKDApOworVTg1MDBfSTJDX1BERVZJQ0UoMSk7CitVODUwMF9JMkNfUERFVklDRSgyKTsKK1U4NTAwX0kyQ19QREVWSUNFKDMpOworCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZ1YXJ0MF9kZXZpY2UsCiAJJnVhcnQxX2RldmljZSwKIAkmdWFydDJfZGV2aWNlLAogCSZwbDAyMl9kZXZpY2UsCisJJnBsMDMxX2RldmljZSwKK307CisKKy8qIGFkZCBhbnkgcGxhdGZvcm0gZGV2aWNlcyBoZXJlIC0gVE9ETyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0geworCSZpMmNfY29udHJvbGxlcjAsCisJJmkyY19jb250cm9sbGVyMSwKKwkmaTJjX2NvbnRyb2xsZXIyLAorCSZpMmNfY29udHJvbGxlcjMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdTg1MDBfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTM5LDYgKzIyNSw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKQogCQlhbWJhX2RldmljZV9yZWdpc3RlcihhbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7CiAKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKKwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHU4NTAwX3NwaV9kZXZpY2VzLAogCQkJQVJSQVlfU0laRSh1ODUwMF9zcGlfZGV2aWNlcykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMKaW5kZXggMjBiNmViYi4uODM1OWE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYwpAQCAtODUsMTEgKzg1LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKLQogCS8qIHJlZ2lzdGVyIHRoZSBjbG9jayBsb29rdXBzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtdTg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LXU4NTAwLmMKaW5kZXggNWYwNWU1OC4uMzk3YmMxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtdTg1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS11ODUwMC5jCkBAIC0zMyw2ICszMyw3IEBACiAKIC8qIG1pbmltdW0gc3RhdGljIGkvbyBtYXBwaW5nIHJlcXVpcmVkIHRvIGJvb3QgVTg1MDAgcGxhdGZvcm1zICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHU4NTAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCV9fSU9fREVWX0RFU0MoVTg1MDBfVUFSVDJfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR0lDX0NQVV9CQVNFLCBTWl80SyksCiAJX19JT19ERVZfREVTQyhVODUwMF9HSUNfRElTVF9CQVNFLCBTWl80SyksCiAJX19JT19ERVZfREVTQyhVODUwMF9NVFUwX0JBU0UsIFNaXzRLKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDhmMjFiNmEuLjA5Y2JmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCwxMiArOCwxMyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQl0c3QJXHJ4LCAjMQkJCUBNTVUgZW5hYmxlZD8KLQltb3ZlcQlccngsICMweDgwMDAwMDAwCUBNTVUgb2ZmLCBQaHlzaWNhbCBhZGRyZXNzCi0JbW92bmUJXHJ4LCAjMHhGMDAwMDAwMAlATU1VIG9uLCBWaXJ0dWFsIGFkZHJlc3MKLQlvcnIJXHJ4LCBccngsICMweDcwMDAKKwl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KKwlsZHJlcQlccngsID1VODUwMF9VQVJUMl9CQVNFCQkJQCBubywgcGh5c2ljYWwgYWRkcmVzcworCWxkcm5lCVxyeCwgPUlPX0FERFJFU1MoVTg1MDBfVUFSVDJfQkFTRSkJQCB5ZXMsIHZpcnR1YWwgYWRkcmVzcwogCS5lbmRtCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4NmNkYmJjLi5hNDk0NWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xNSw0ICsxNSw0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZjAwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggZTEzYmU3Yy4uOWRkYjQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtODUxLDggKzg1MSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfZmxhc2hfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9pMmNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYjRhYzAwZS4uNmZlYTcxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICAgICAgIzB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMKaW5kZXggYjc4NTk5NGIuLjJjMzcxZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCkBAIC05MCwxMiArOTAsMyBAQAogCiAJX19yYXdfd3JpdGVsKGNsa2VuLCBXOTBYOTAwX1ZBX0NMS1BXUiArIFNVQkNMSyk7CiB9Ci0KLQotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKaW5kZXggZjU4MTZhMC4uYzU2ZGRhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oCkBAIC0xNCw3ICsxNCw2IEBACiAKIHZvaWQgbnVjOTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKIHZvaWQgbnVjOTAwX3N1YmNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7CiAKIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGxvbmcJCWNrZW47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKaW5kZXggMjBkYzBjOS4uNjQyMjA3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpAQCAtNDUsNiArNDUsNyBAQAogCUlPREVTQ19FTlQoVUFSVCksCiAJSU9ERVNDX0VOVChUSU1FUiksCiAJSU9ERVNDX0VOVChFQkkpLAorCUlPREVTQ19FTlQoR1BJTyksCiB9OwogCiAvKiBJbml0aWFsIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KQEAgLTY4LDYgKzY5LDExIEBACiBzdGF0aWMgREVGSU5FX0NMSyhhZGMsIDI4KTsKIHN0YXRpYyBERUZJTkVfQ0xLKHVzaSwgMjkpOwogc3RhdGljIERFRklORV9DTEsoZXh0LCAwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHRpbWVyMCwgMTkpOworc3RhdGljIERFRklORV9DTEsodGltZXIxLCAyMCk7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lcjIsIDIxKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHRpbWVyMywgMjIpOworc3RhdGljIERFRklORV9DTEsodGltZXI0LCAyMyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBudWM5MDBfY2xrcmVnc1tdID0gewogCURFRl9DTEtMT09LKCZjbGtfbGNkLCAibnVjOTAwLWxjZCIsIE5VTEwpLApAQCAtOTAsNiArOTYsMTEgQEAKIAlERUZfQ0xLTE9PSygmY2xrX2FkYywgIm51YzkwMC1hZGMiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX3VzaSwgIm51YzkwMC1zcGkiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX2V4dCwgTlVMTCwgImV4dCIpLAorCURFRl9DTEtMT09LKCZjbGtfdGltZXIwLCBOVUxMLCAidGltZXIwIiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjEsIE5VTEwsICJ0aW1lcjEiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3RpbWVyMiwgTlVMTCwgInRpbWVyMiIpLAorCURFRl9DTEtMT09LKCZjbGtfdGltZXIzLCBOVUxMLCAidGltZXIzIiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjQsIE5VTEwsICJ0aW1lcjQiKSwKIH07CiAKIC8qIEluaXRpYWwgc2VyaWFsIHBsYXRmb3JtIGRhdGEgKi8KQEAgLTIwOCw2ICsyMTksNiBAQAogCiB2b2lkIF9faW5pdCBudWM5MDBfaW5pdF9jbG9ja3Modm9pZCkKIHsKLQljbGtzX3JlZ2lzdGVyKG51YzkwMF9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkwMF9jbGtyZWdzKSk7CisJY2xrZGV2X2FkZF90YWJsZShudWM5MDBfY2xrcmVncywgQVJSQVlfU0laRShudWM5MDBfY2xrcmVncykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDJmOWRmYjkuLmIwNjdlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xOCw2ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGJhZjYzODQuLmM0ZWQ5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMzk5LDcgKzM5OSw3IEBACiBjb25maWcgQ1BVXzMydjZLCiAJYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciBleHRlbnNpb25zIiBpZiAhU01QCiAJZGVwZW5kcyBvbiBDUFVfVjYKLQlkZWZhdWx0IHkgaWYgU01QICYmICFBUkNIX01YMworCWRlZmF1bHQgeSBpZiBTTVAgJiYgIShBUkNIX01YMyB8fCBBUkNIX09NQVAyKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBBUk12NiBwcm9jZXNzb3Igc3VwcG9ydHMgdGhlICdLJyBleHRlbnNpb24uCiAJICBUaGlzIGVuYWJsZXMgdGhlIGtlcm5lbCB0byB1c2Ugc29tZSBpbnN0cnVjdGlvbnMgbm90IHByZXNlbnQKQEAgLTQxMCw3ICs0MTAsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKLQlzZWxlY3QgQ1BVXzMydjZLCisJc2VsZWN0IENQVV8zMnY2SyBpZiAhQVJDSF9PTUFQMgogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKIAlzZWxlY3QgQ1BVX1BBQlJUX1Y3CkBAIC03NTQsNyArNzU0LDcgQEAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFwKLQkJICAgUkVBTFZJRVdfRUJfQTlNUCB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDMxIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfTk9NQURJSworCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgQVJDSF9OT01BRElLIHx8IEFSQ0hfT01BUDQKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCkBAIC03NzksNSArNzc5LDUgQEAKIAogY29uZmlnIEFSTV9MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgNiBpZiBBUkNIX09NQVAzIHx8IEFSQ0hfUzVQQzFYWAorCWRlZmF1bHQgNiBpZiBBUk1fTDFfQ0FDSEVfU0hJRlRfNgogCWRlZmF1bHQgNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwppbmRleCA2MjgyMGVkLi5lZGRkZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYworKysgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpAQCAtOTAxLDExICs5MDEsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CiAKLQlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKLQlpZiAoIXJlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBjcmVhdGVfcHJvY19lbnRyeSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIHJlcyk7CisJcmVzID0gY3JlYXRlX3Byb2NfZW50cnkoImNwdS9hbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwppbmRleCBhODk0NDRhLi43MTQ4ZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoZmFfZG1hX2ludl9yYW5nZSkKK2ZhX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShmYV9kbWFfY2xlYW5fcmFuZ2UpCitmYV9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yMDUsNiArMjA1LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShmYV9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWZhX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlmYV9kbWFfaW52X3JhbmdlCisJYglmYV9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoZmFfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZhX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoZmFfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQlmYV9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTIxNSw3ICsyMzksNyBAQAogCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZhX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmYV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmYV9kbWFfbWFwX2FyZWEKKwkubG9uZwlmYV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZhX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCWZhX2NhY2hlX2ZucywgLiAtIGZhX2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCmluZGV4IGNiOGZjNjUuLjA3MzM0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTQyLDYgKzQyLDU3IEBACiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DQUNIRV9TWU5DLCAxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGwyeDBfY2xlYW5fbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUEwzMTBfRVJSQVRBXzU4ODM2OQorc3RhdGljIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWV4dGVybiB2b2lkIG9tYXBfc21jMSh1MzIgZm4sIHUzMiBhcmcpOworCisJLyoKKwkgKiBUZXhhcyBJbnN0cnVtZW50IHNlY3VyZSBtb25pdG9yIGFwaSB0byBtb2RpZnkgdGhlCisJICogUEwzMTAgRGVidWcgQ29udHJvbCBSZWdpc3Rlci4KKwkgKi8KKwlvbWFwX3NtYzEoMHgxMDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMngwX2ZsdXNoX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKworCS8qIENsZWFuIGJ5IFBBIGZvbGxvd2VkIGJ5IEludmFsaWRhdGUgYnkgUEEgKi8KKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBKTsKKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBLCAxKTsKKwl3cml0ZWwoYWRkciwgYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEpOworfQorI2Vsc2UKKworLyogT3B0aW1pc2VkIG91dCBmb3Igbm9uLWVycmF0YSBjYXNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9mbHVzaF9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYyLDIzICsxMTMsMjQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiAJaWYgKHN0YXJ0ICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOwotCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJZGVidWdfd3JpdGVsKDB4MDMpOworCQlsMngwX2ZsdXNoX2xpbmUoc3RhcnQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKIAlpZiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKLQkJd3JpdGVsKGVuZCwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOworCQlkZWJ1Z193cml0ZWwoMHgwMyk7CisJCWwyeDBfZmx1c2hfbGluZShlbmQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJfQogCiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCiAJCXdoaWxlIChzdGFydCA8IGJsa19lbmQpIHsKLQkJCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOwotCQkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CisJCQlsMngwX2ludl9saW5lKHN0YXJ0KTsKIAkJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAkJfQogCkBAIC0xMDMsOCArMTU1LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CiAKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKLQkJCXdyaXRlbChzdGFydCwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJCQlsMngwX2NsZWFuX2xpbmUoc3RhcnQpOwogCQkJc3RhcnQgKz0gQ0FDSEVfTElORV9TSVpFOwogCQl9CiAKQEAgLTEyOCwxMSArMTc5LDEyIEBACiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCisJCWRlYnVnX3dyaXRlbCgweDAzKTsKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7Ci0JCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJCWwyeDBfZmx1c2hfbGluZShzdGFydCk7CiAJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJCX0KKwkJZGVidWdfd3JpdGVsKDB4MDApOwogCiAJCWlmIChibGtfZW5kIDwgZW5kKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCmluZGV4IDJhNDgyNzMuLmMyZmYzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpAQCAtODQsMjAgKzg0LDYgQEAKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJwotICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgotICoJYmFjay4KLSAqCi0gKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICovCi1FTlRSWSh2M19kbWFfaW52X3JhbmdlKQotCS8qIEZBTExUSFJPVUdIICovCi0KLS8qCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KQEAgLTEwOCwxOCArOTQsMjkgQEAKIEVOVFJZKHYzX2RtYV9mbHVzaF9yYW5nZSkKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAkJQCBmbHVzaCBJRCBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2M19kbWFfdW5tYXBfYXJlYSkKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYm5lCXYzX2RtYV9mbHVzaF9yYW5nZQogCS8qIEZBTExUSFJPVUdIICovCiAKIC8qCi0gKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KICAqLwotRU5UUlkodjNfZG1hX2NsZWFuX3JhbmdlKQorRU5UUlkodjNfZG1hX21hcF9hcmVhKQogCW1vdglwYywgbHIKK0VORFBST0ModjNfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHYzX2RtYV9tYXBfYXJlYSkKIAogCV9fSU5JVERBVEEKIApAQCAtMTMxLDcgKzEyOCw3IEBACiAJLmxvbmcJdjNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXYzX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2M19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjNfZG1hX2ludl9yYW5nZQotCS5sb25nCXYzX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXYzX2RtYV9tYXBfYXJlYQorCS5sb25nCXYzX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjNfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjNfY2FjaGVfZm5zLCAuIC0gdjNfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUwppbmRleCA1YzdkYTNlLi40ODEwZjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKQEAgLTk0LDIwICs5NCw2IEBACiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKLSAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KLSAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KLSAqCWJhY2suCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqLwotRU5UUlkodjRfZG1hX2ludl9yYW5nZSkKLQkvKiBGQUxMVEhST1VHSCAqLwotCi0vKgogICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCiAgKgogICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0xMjAsMTggKzEwNiwyOSBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCiAjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjRfZG1hX3VubWFwX2FyZWEpCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NF9kbWFfZmx1c2hfcmFuZ2UKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCiAgKi8KLUVOVFJZKHY0X2RtYV9jbGVhbl9yYW5nZSkKK0VOVFJZKHY0X2RtYV9tYXBfYXJlYSkKIAltb3YJcGMsIGxyCitFTkRQUk9DKHY0X2RtYV91bm1hcF9hcmVhKQorRU5EUFJPQyh2NF9kbWFfbWFwX2FyZWEpCiAKIAlfX0lOSVREQVRBCiAKQEAgLTE0Myw3ICsxNDAsNyBAQAogCS5sb25nCXY0X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2NF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjRfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwl2NF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NF9kbWFfdW5tYXBfYXJlYQogCS5sb25nCXY0X2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0X2NhY2hlX2ZucywgLiAtIHY0X2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDNkYmVkZjFlLi5kZjgzNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xNzMsNyArMTczLDcgQEAKICAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCiAgKi8KLUVOVFJZKHY0d2JfZG1hX2ludl9yYW5nZSkKK3Y0d2JfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3Yl9kbWFfY2xlYW5fcmFuZ2UpCit2NHdiX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKQEAgLTIxNiw2ICsyMTYsMzAgQEAKIAkuZ2xvYmwJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKIAkuc2V0CXY0d2JfZG1hX2ZsdXNoX3JhbmdlLCB2NHdiX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCXY0d2JfZG1hX2NsZWFuX3JhbmdlCisJYmNzCXY0d2JfZG1hX2ludl9yYW5nZQorCWIJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0ModjR3Yl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d2JfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQl2NHdiX2NhY2hlX2ZucywgI29iamVjdApAQCAtMjI2LDcgKzI1MCw3IEBACiAJLmxvbmcJdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjR3Yl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJdjR3Yl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NHdiX2RtYV9tYXBfYXJlYQorCS5sb25nCXY0d2JfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl2NHdiX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0d2JfY2FjaGVfZm5zLCAuIC0gdjR3Yl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUwppbmRleCBiM2I3NDEwLi40NWM3MDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCkBAIC0xNDIsMjMgKzE0MiwxMiBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3dF9kbWFfaW52X3JhbmdlKQordjR3dF9kbWFfaW52X3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCi0JLyogRkFMTFRIUk9VR0ggKi8KLQotLyoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCi0gKi8KLUVOVFJZKHY0d3RfZG1hX2NsZWFuX3JhbmdlKQogCW1vdglwYywgbHIKIAogLyoKQEAgLTE3Miw2ICsxNjEsMjkgQEAKIAkuZ2xvYmwJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuZXF1CXY0d3RfZG1hX2ZsdXNoX3JhbmdlLCB2NHd0X2RtYV9pbnZfcmFuZ2UKIAorLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NHd0X2RtYV9pbnZfcmFuZ2UKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV9tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d3RfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHY0d3RfZG1hX21hcF9hcmVhKQorCiAJX19JTklUREFUQQogCiAJLnR5cGUJdjR3dF9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTE4Miw3ICsxOTQsNyBAQAogCS5sb25nCXY0d3RfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0d3RfZG1hX2ludl9yYW5nZQotCS5sb25nCXY0d3RfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjR3dF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NHd0X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuc2l6ZQl2NHd0X2NhY2hlX2ZucywgLiAtIHY0d3RfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwppbmRleCA0YmEwYTI0Yy4uOWQ4OWM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCkBAIC0xOTUsNyArMTk1LDcgQEAKICAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KICAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCiAgKi8KLUVOVFJZKHY2X2RtYV9pbnZfcmFuZ2UpCit2Nl9kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQogCWJpYwlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCkBAIC0yMjgsNyArMjI4LDcgQEAKICAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KICAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCiAgKi8KLUVOVFJZKHY2X2RtYV9jbGVhbl9yYW5nZSkKK3Y2X2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjRF9DQUNIRV9MSU5FX1NJWkUgLSAxCiAxOgogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKQEAgLTI2Myw2ICsyNjMsMzIgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY2X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCXRlcQlyMiwgI0RNQV9GUk9NX0RFVklDRQorCWJlcQl2Nl9kbWFfaW52X3JhbmdlCisJYgl2Nl9kbWFfY2xlYW5fcmFuZ2UKK0VORFBST0ModjZfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY2X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2Nl9kbWFfaW52X3JhbmdlCisJbW92CXBjLCBscgorRU5EUFJPQyh2Nl9kbWFfdW5tYXBfYXJlYSkKKwogCV9fSU5JVERBVEEKIAogCS50eXBlCXY2X2NhY2hlX2ZucywgI29iamVjdApAQCAtMjczLDcgKzI5OSw3IEBACiAJLmxvbmcJdjZfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY2X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2Nl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjZfZG1hX2ludl9yYW5nZQotCS5sb25nCXY2X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXY2X2RtYV9tYXBfYXJlYQorCS5sb25nCXY2X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjZfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjZfY2FjaGVfZm5zLCAuIC0gdjZfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCA5MDczZGI4Li5iY2Q2NGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTIxNiw3ICsyMTYsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjdfZG1hX2ludl9yYW5nZSkKK3Y3X2RtYV9pbnZfcmFuZ2U6CiAJZGNhY2hlX2xpbmVfc2l6ZSByMiwgcjMKIAlzdWIJcjMsIHIyLCAjMQogCXRzdAlyMCwgcjMKQEAgLTI0MCw3ICsyNDAsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjdfZG1hX2NsZWFuX3JhbmdlKQordjdfZG1hX2NsZWFuX3JhbmdlOgogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCiAJc3ViCXIzLCByMiwgIzEKIAliaWMJcjAsIHIwLCByMwpAQCAtMjcxLDYgKzI3MSwzMiBAQAogCW1vdglwYywgbHIKIEVORFBST0ModjdfZG1hX2ZsdXNoX3JhbmdlKQogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2N19kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwl0ZXEJcjIsICNETUFfRlJPTV9ERVZJQ0UKKwliZXEJdjdfZG1hX2ludl9yYW5nZQorCWIJdjdfZG1hX2NsZWFuX3JhbmdlCitFTkRQUk9DKHY3X2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2N19kbWFfdW5tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCXRlcQlyMiwgI0RNQV9UT19ERVZJQ0UKKwlibmUJdjdfZG1hX2ludl9yYW5nZQorCW1vdglwYywgbHIKK0VORFBST0ModjdfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQl2N19jYWNoZV9mbnMsICNvYmplY3QKQEAgLTI4MSw3ICszMDcsNyBAQAogCS5sb25nCXY3X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2N19jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjdfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY3X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwl2N19kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2N19kbWFfbWFwX2FyZWEKKwkubG9uZwl2N19kbWFfdW5tYXBfYXJlYQogCS5sb25nCXY3X2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY3X2NhY2hlX2ZucywgLiAtIHY3X2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29udGV4dC5jIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCmluZGV4IGE5ZTIyZTMuLmIwZWU5YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnRleHQuYworKysgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKQEAgLTEwLDEyICsxMCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjcHVfYXNpZF9sb2NrKTsKIHVuc2lnbmVkIGludCBjcHVfbGFzdF9hc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OOworI2lmZGVmIENPTkZJR19TTVAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgY3VycmVudF9tbSk7CisjZW5kaWYKIAogLyoKICAqIFdlIGZvcmsoKWVkIGEgcHJvY2VzcywgYW5kIHdlIG5lZWQgYSBuZXcgY29udGV4dCBmb3IgdGhlIGNoaWxkCkBAIC0yNiwxMyArMzEsMTA5IEBACiB2b2lkIF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJbW0tPmNvbnRleHQuaWQgPSAwOworCXNwaW5fbG9ja19pbml0KCZtbS0+Y29udGV4dC5pZF9sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgZmx1c2hfY29udGV4dCh2b2lkKQoreworCS8qIHNldCB0aGUgcmVzZXJ2ZWQgQVNJRCBiZWZvcmUgZmx1c2hpbmcgdGhlIFRMQiAqLworCWFzbSgibWNyCXAxNSwgMCwgJTAsIGMxMywgYzAsIDFcbiIgOiA6ICJyIiAoMCkpOworCWlzYigpOworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKwlpZiAoaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkgeworCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKKwkJZHNiKCk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NNUAorCitzdGF0aWMgdm9pZCBzZXRfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGFzaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogTG9ja2luZyBuZWVkZWQgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucyB3aGVyZSB0aGUKKwkgKiBzYW1lIG1tLT5jb250ZXh0LmlkIGNvdWxkIGJlIHNldCBmcm9tIGRpZmZlcmVudCBDUFVzIGR1cmluZworCSAqIHRoZSBicm9hZGNhc3QuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgdmlhIElQSSBzbyB0aGUKKwkgKiBtbS0+Y29udGV4dC5pZF9sb2NrIGhhcyB0byBiZSBJUlEtc2FmZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPmNvbnRleHQuaWRfbG9jaywgZmxhZ3MpOworCWlmIChsaWtlbHkoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSkgeworCQkvKgorCQkgKiBPbGQgdmVyc2lvbiBvZiBBU0lEIGZvdW5kLiBTZXQgdGhlIG5ldyBvbmUgYW5kCisJCSAqIHJlc2V0IG1tX2NwdW1hc2sobW0pLgorCQkgKi8KKwkJbW0tPmNvbnRleHQuaWQgPSBhc2lkOworCQljcHVtYXNrX2NsZWFyKG1tX2NwdW1hc2sobW0pKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQuaWRfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTZXQgdGhlIG1tX2NwdW1hc2sobW0pIGJpdCBmb3IgdGhlIGN1cnJlbnQgQ1BVLgorCSAqLworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKK30KKworLyoKKyAqIFJlc2V0IHRoZSBBU0lEIG9uIHRoZSBjdXJyZW50IENQVS4gVGhpcyBmdW5jdGlvbiBjYWxsIGlzIGJyb2FkY2FzdAorICogZnJvbSB0aGUgQ1BVIGhhbmRsaW5nIHRoZSBBU0lEIHJvbGxvdmVyIGFuZCBob2xkaW5nIGNwdV9hc2lkX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2NvbnRleHQodm9pZCAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgYXNpZDsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcGVyX2NwdShjdXJyZW50X21tLCBjcHUpOworCisJLyoKKwkgKiBDaGVjayBpZiBhIGN1cnJlbnRfbW0gd2FzIHNldCBvbiB0aGlzIENQVSBhcyBpdCBtaWdodCBzdGlsbAorCSAqIGJlIGluIHRoZSBlYXJseSBib290aW5nIHN0YWdlcyBhbmQgdXNpbmcgdGhlIHJlc2VydmVkIEFTSUQuCisJICovCisJaWYgKCFtbSkKKwkJcmV0dXJuOworCisJc21wX3JtYigpOworCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgY3B1ICsgMTsKKworCWZsdXNoX2NvbnRleHQoKTsKKwlzZXRfbW1fY29udGV4dChtbSwgYXNpZCk7CisKKwkvKiBzZXQgdGhlIG5ldyBBU0lEICovCisJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzEzLCBjMCwgMVxuIiA6IDogInIiIChtbS0+Y29udGV4dC5pZCkpOworCWlzYigpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21tX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBhc2lkKQoreworCW1tLT5jb250ZXh0LmlkID0gYXNpZDsKKwljcHVtYXNrX2NvcHkobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7Cit9CisKKyNlbmRpZgorCiB2b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJdW5zaWduZWQgaW50IGFzaWQ7CiAKIAlzcGluX2xvY2soJmNwdV9hc2lkX2xvY2spOworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIENoZWNrIHRoZSBBU0lEIGFnYWluLCBpbiBjYXNlIHRoZSBjaGFuZ2Ugd2FzIGJyb2FkY2FzdCBmcm9tCisJICogYW5vdGhlciBDUFUgYmVmb3JlIHdlIGFjcXVpcmVkIHRoZSBsb2NrLgorCSAqLworCWlmICh1bmxpa2VseSgoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSA9PSAwKSkgeworCQljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG1tKSk7CisJCXNwaW5fdW5sb2NrKCZjcHVfYXNpZF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCS8qCisJICogQXQgdGhpcyBwb2ludCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBjdXJyZW50IG1tICh3aXRoCisJICogYW4gb2xkIEFTSUQpIGlzbid0IGFjdGl2ZSBvbiBhbnkgb3RoZXIgQ1BVIHNpbmNlIHRoZSBBU0lEcworCSAqIGFyZSBjaGFuZ2VkIHNpbXVsdGFuZW91c2x5IHZpYSBJUEkuCisJICovCiAJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKIAlpZiAoYXNpZCA9PSAwKQogCQlhc2lkID0gY3B1X2xhc3RfYXNpZCA9IEFTSURfRklSU1RfVkVSU0lPTjsKQEAgLTQyLDIwICsxNDMsMTUgQEAKIAkgKiB0byBzdGFydCBhIG5ldyB2ZXJzaW9uIGFuZCBmbHVzaCB0aGUgVExCLgogCSAqLwogCWlmICh1bmxpa2VseSgoYXNpZCAmIH5BU0lEX01BU0spID09IDApKSB7Ci0JCWFzaWQgPSArK2NwdV9sYXN0X2FzaWQ7Ci0JCS8qIHNldCB0aGUgcmVzZXJ2ZWQgQVNJRCBiZWZvcmUgZmx1c2hpbmcgdGhlIFRMQiAqLwotCQlhc20oIm1jcglwMTUsIDAsICUwLCBjMTMsIGMwLCAxCUAgc2V0IHJlc2VydmVkIGNvbnRleHQgSURcbiIKLQkJICAgIDoKLQkJICAgIDogInIiICgwKSk7Ci0JCWlzYigpOwotCQlmbHVzaF90bGJfYWxsKCk7Ci0JCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7Ci0JCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKLQkJCWRzYigpOwotCQl9CisJCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgc21wX3Byb2Nlc3Nvcl9pZCgpICsgMTsKKwkJZmx1c2hfY29udGV4dCgpOworI2lmZGVmIENPTkZJR19TTVAKKwkJc21wX3dtYigpOworCQlzbXBfY2FsbF9mdW5jdGlvbihyZXNldF9jb250ZXh0LCBOVUxMLCAxKTsKKyNlbmRpZgorCQljcHVfbGFzdF9hc2lkICs9IE5SX0NQVVM7CiAJfQotCXNwaW5fdW5sb2NrKCZjcHVfYXNpZF9sb2NrKTsKIAotCWNwdW1hc2tfY29weShtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKLQltbS0+Y29udGV4dC5pZCA9IGFzaWQ7CisJc2V0X21tX2NvbnRleHQobW0sIGFzaWQpOworCXNwaW5fdW5sb2NrKCZjcHVfYXNpZF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jCmluZGV4IDcwOTk3ZDUuLjVlYjRmZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYwpAQCAtNjgsMTIgKzY4LDEzIEBACiB9CiAKIHZvaWQgZmVyb2Nlb25fY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIAogCWt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMCk7CiAJa2Zyb20gPSBrbWFwX2F0b21pYyhmcm9tLCBLTV9VU0VSMSk7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3Bmbihmcm9tKSk7CiAJZmVyb2Nlb25fY29weV91c2VyX3BhZ2Uoa3RvLCBrZnJvbSk7CiAJa3VubWFwX2F0b21pYyhrZnJvbSwgS01fVVNFUjEpOwogCWt1bm1hcF9hdG9taWMoa3RvLCBLTV9VU0VSMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYwppbmRleCBkZTljMDY4Li5mNzIzMDNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKQEAgLTM4LDcgKzM4LDcgQEAKIH0KIAogdm9pZCB2M19jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKaW5kZXggNzM3MGE3MS4uNTk4YzUxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwpAQCAtNjksNyArNjksNyBAQAogfQogCiB2b2lkIHY0X21jX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCmluZGV4IDlhYjA5ODQxLi43YzJlYjU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCkBAIC00OCwxMiArNDgsMTMgQEAKIH0KIAogdm9pZCB2NHdiX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvLCAqa2Zyb207CiAKIAlrdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjApOwogCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjEpOworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4oZnJvbSkpOwogCXY0d2JfY29weV91c2VyX3BhZ2Uoa3RvLCBrZnJvbSk7CiAJa3VubWFwX2F0b21pYyhrZnJvbSwgS01fVVNFUjEpOwogCWt1bm1hcF9hdG9taWMoa3RvLCBLTV9VU0VSMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKaW5kZXggMzAwZWZhZi4uMTcyZTZhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYwpAQCAtNDQsNyArNDQsNyBAQAogfQogCiB2b2lkIHY0d3RfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggMGZhMTMxOS4uOGJjYTRkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC0zNCw3ICszNCw3IEBACiAgKiBhdHRhY2sgdGhlIGtlcm5lbCdzIGV4aXN0aW5nIG1hcHBpbmcgb2YgdGhlc2UgcGFnZXMuCiAgKi8KIHN0YXRpYyB2b2lkIHY2X2NvcHlfdXNlcl9oaWdocGFnZV9ub25hbGlhc2luZyhzdHJ1Y3QgcGFnZSAqdG8sCi0Jc3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCisJc3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCkBAIC04MSw3ICs4MSw3IEBACiAgKiBDb3B5IHRoZSBwYWdlLCB0YWtpbmcgYWNjb3VudCBvZiB0aGUgY2FjaGUgY29sb3VyLgogICovCiBzdGF0aWMgdm9pZCB2Nl9jb3B5X3VzZXJfaGlnaHBhZ2VfYWxpYXNpbmcoc3RydWN0IHBhZ2UgKnRvLAotCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQorCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gQ0FDSEVfQ09MT1VSKHZhZGRyKTsKIAl1bnNpZ25lZCBsb25nIGtmcm9tLCBrdG87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKaW5kZXggYmM0NTI1Zi4uNzQ3YWQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYwpAQCAtNzEsMTIgKzcxLDEzIEBACiB9CiAKIHZvaWQgeHNjM19tY19jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCiAJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKIAlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKGZyb20pKTsKIAl4c2MzX21jX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOwogCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKIAlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYwppbmRleCA3NjgyNGQzLi45OTIwYzBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYwpAQCAtOTEsNyArOTEsNyBAQAogfQogCiB2b2lkIHhzY2FsZV9tY19jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IDI2MzI1Y2IuLjBkYTdlY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMjksOSArMjksNiBAQAogI2Vycm9yICJDT05TSVNURU5UX0RNQV9TSVpFIG11c3QgYmUgbXVsdGlwbGUgb2YgMk1pQiIKICNlbmRpZgogCi0jZGVmaW5lIENPTlNJU1RFTlRfRU5ECSgweGZmZTAwMDAwKQotI2RlZmluZSBDT05TSVNURU5UX0JBU0UJKENPTlNJU1RFTlRfRU5EIC0gQ09OU0lTVEVOVF9ETUFfU0laRSkKLQogI2RlZmluZSBDT05TSVNURU5UX09GRlNFVCh4KQkoKCh1bnNpZ25lZCBsb25nKSh4KSAtIENPTlNJU1RFTlRfQkFTRSkgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgQ09OU0lTVEVOVF9QVEVfSU5ERVgoeCkgKCgodW5zaWduZWQgbG9uZykoeCkgLSBDT05TSVNURU5UX0JBU0UpID4+IFBHRElSX1NISUZUKQogI2RlZmluZSBOVU1fQ09OU0lTVEVOVF9QVEVTIChDT05TSVNURU5UX0RNQV9TSVpFID4+IFBHRElSX1NISUZUKQpAQCAtNDA0LDc4ICs0MDEsNDQgQEAKICAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCiAgKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQogICovCi12b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit2b2lkIF9fX2RtYV9zaW5nbGVfY3B1X3RvX2Rldihjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXZvaWQgKCppbm5lcl9vcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCXZvaWQgKCpvdXRlcl9vcCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLQlCVUdfT04oIXZpcnRfYWRkcl92YWxpZChzdGFydCkgfHwgIXZpcnRfYWRkcl92YWxpZChzdGFydCArIHNpemUgLSAxKSk7Ci0KLQlzd2l0Y2ggKGRpcmVjdGlvbikgewotCWNhc2UgRE1BX0ZST01fREVWSUNFOgkJLyogaW52YWxpZGF0ZSBvbmx5ICovCi0JCWlubmVyX29wID0gZG1hY19pbnZfcmFuZ2U7Ci0JCW91dGVyX29wID0gb3V0ZXJfaW52X3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9UT19ERVZJQ0U6CQkvKiB3cml0ZWJhY2sgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfY2xlYW5fcmFuZ2U7Ci0JCW91dGVyX29wID0gb3V0ZXJfY2xlYW5fcmFuZ2U7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CQkvKiB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2ZsdXNoX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ZsdXNoX3JhbmdlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlpbm5lcl9vcChzdGFydCwgc3RhcnQgKyBzaXplKTsKLQlvdXRlcl9vcChfX3BhKHN0YXJ0KSwgX19wYShzdGFydCkgKyBzaXplKTsKLX0KLUVYUE9SVF9TWU1CT0woZG1hX2NhY2hlX21haW50KTsKLQotc3RhdGljIHZvaWQgZG1hX2NhY2hlX21haW50X2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQl2b2lkICp2YWRkcjsKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwotCXZvaWQgKCppbm5lcl9vcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCXZvaWQgKCpvdXRlcl9vcCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKLQlzd2l0Y2ggKGRpcmVjdGlvbikgewotCWNhc2UgRE1BX0ZST01fREVWSUNFOgkJLyogaW52YWxpZGF0ZSBvbmx5ICovCi0JCWlubmVyX29wID0gZG1hY19pbnZfcmFuZ2U7Ci0JCW91dGVyX29wID0gb3V0ZXJfaW52X3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9UT19ERVZJQ0U6CQkvKiB3cml0ZWJhY2sgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfY2xlYW5fcmFuZ2U7Ci0JCW91dGVyX29wID0gb3V0ZXJfY2xlYW5fcmFuZ2U7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CQkvKiB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2ZsdXNoX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ZsdXNoX3JhbmdlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9CisJQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoa2FkZHIgKyBzaXplIC0gMSkpOwogCi0JaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgewotCQl2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKLQkJaW5uZXJfb3AodmFkZHIsIHZhZGRyICsgc2l6ZSk7CisJZG1hY19tYXBfYXJlYShrYWRkciwgc2l6ZSwgZGlyKTsKKworCXBhZGRyID0gX19wYShrYWRkcik7CisJaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemUpOwogCX0gZWxzZSB7Ci0JCXZhZGRyID0ga21hcF9oaWdoX2dldChwYWdlKTsKLQkJaWYgKHZhZGRyKSB7Ci0JCQl2YWRkciArPSBvZmZzZXQ7Ci0JCQlpbm5lcl9vcCh2YWRkciwgdmFkZHIgKyBzaXplKTsKLQkJCWt1bm1hcF9oaWdoKHBhZ2UpOwotCQl9CisJCW91dGVyX2NsZWFuX3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemUpOworCX0KKwkvKiBGSVhNRTogbm9uLXNwZWN1bGF0aW5nOiBmbHVzaCBvbiBiaWRpcmVjdGlvbmFsIG1hcHBpbmdzPyAqLworfQorRVhQT1JUX1NZTUJPTChfX19kbWFfc2luZ2xlX2NwdV90b19kZXYpOworCit2b2lkIF9fX2RtYV9zaW5nbGVfZGV2X3RvX2NwdShjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCUJVR19PTighdmlydF9hZGRyX3ZhbGlkKGthZGRyKSB8fCAhdmlydF9hZGRyX3ZhbGlkKGthZGRyICsgc2l6ZSAtIDEpKTsKKworCS8qIEZJWE1FOiBub24tc3BlY3VsYXRpbmc6IG5vdCByZXF1aXJlZCAqLworCS8qIGRvbid0IGJvdGhlciBpbnZhbGlkYXRpbmcgaWYgRE1BIHRvIGRldmljZSAqLworCWlmIChkaXIgIT0gRE1BX1RPX0RFVklDRSkgeworCQl1bnNpZ25lZCBsb25nIHBhZGRyID0gX19wYShrYWRkcik7CisJCW91dGVyX2ludl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAl9CiAKLQlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKLQlvdXRlcl9vcChwYWRkciwgcGFkZHIgKyBzaXplKTsKKwlkbWFjX3VubWFwX2FyZWEoa2FkZHIsIHNpemUsIGRpcik7CiB9CitFWFBPUlRfU1lNQk9MKF9fX2RtYV9zaW5nbGVfZGV2X3RvX2NwdSk7CiAKLXZvaWQgZG1hX2NhY2hlX21haW50X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3N0YXRpYyB2b2lkIGRtYV9jYWNoZV9tYWludF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCXZvaWQgKCpvcCkoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkpCiB7CiAJLyoKIAkgKiBBIHNpbmdsZSBzZyBlbnRyeSBtYXkgcmVmZXIgdG8gbXVsdGlwbGUgcGh5c2ljYWxseSBjb250aWd1b3VzCkBAIC00ODYsMjAgKzQ0OSw2MiBAQAogCXNpemVfdCBsZWZ0ID0gc2l6ZTsKIAlkbyB7CiAJCXNpemVfdCBsZW4gPSBsZWZ0OwotCQlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkgJiYgbGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFKSB7Ci0JCQlpZiAob2Zmc2V0ID49IFBBR0VfU0laRSkgewotCQkJCXBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOwotCQkJCW9mZnNldCAlPSBQQUdFX1NJWkU7CisJCXZvaWQgKnZhZGRyOworCisJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgeworCQkJaWYgKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSkgeworCQkJCWlmIChvZmZzZXQgPj0gUEFHRV9TSVpFKSB7CisJCQkJCXBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQkJCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCQkJCX0KKwkJCQlsZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CiAJCQl9Ci0JCQlsZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisJCQl2YWRkciA9IGttYXBfaGlnaF9nZXQocGFnZSk7CisJCQlpZiAodmFkZHIpIHsKKwkJCQl2YWRkciArPSBvZmZzZXQ7CisJCQkJb3AodmFkZHIsIGxlbiwgZGlyKTsKKwkJCQlrdW5tYXBfaGlnaChwYWdlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCQkJb3AodmFkZHIsIGxlbiwgZGlyKTsKIAkJfQotCQlkbWFfY2FjaGVfbWFpbnRfY29udGlndW91cyhwYWdlLCBvZmZzZXQsIGxlbiwgZGlyKTsKIAkJb2Zmc2V0ID0gMDsKIAkJcGFnZSsrOwogCQlsZWZ0IC09IGxlbjsKIAl9IHdoaWxlIChsZWZ0KTsKIH0KLUVYUE9SVF9TWU1CT0woZG1hX2NhY2hlX21haW50X3BhZ2UpOworCit2b2lkIF9fX2RtYV9wYWdlX2NwdV90b19kZXYoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKworCWRtYV9jYWNoZV9tYWludF9wYWdlKHBhZ2UsIG9mZiwgc2l6ZSwgZGlyLCBkbWFjX21hcF9hcmVhKTsKKworCXBhZGRyID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2ZmOworCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCW91dGVyX2ludl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKKwl9IGVsc2UgeworCQlvdXRlcl9jbGVhbl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKKwl9CisJLyogRklYTUU6IG5vbi1zcGVjdWxhdGluZzogZmx1c2ggb24gYmlkaXJlY3Rpb25hbCBtYXBwaW5ncz8gKi8KK30KK0VYUE9SVF9TWU1CT0woX19fZG1hX3BhZ2VfY3B1X3RvX2Rldik7CisKK3ZvaWQgX19fZG1hX3BhZ2VfZGV2X3RvX2NwdShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmYsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2ZmOworCisJLyogRklYTUU6IG5vbi1zcGVjdWxhdGluZzogbm90IHJlcXVpcmVkICovCisJLyogZG9uJ3QgYm90aGVyIGludmFsaWRhdGluZyBpZiBETUEgdG8gZGV2aWNlICovCisJaWYgKGRpciAhPSBETUFfVE9fREVWSUNFKQorCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisKKwlkbWFfY2FjaGVfbWFpbnRfcGFnZShwYWdlLCBvZmYsIHNpemUsIGRpciwgZG1hY191bm1hcF9hcmVhKTsKK30KK0VYUE9SVF9TWU1CT0woX19fZG1hX3BhZ2VfZGV2X3RvX2NwdSk7CiAKIC8qKgogICogZG1hX21hcF9zZyAtIG1hcCBhIHNldCBvZiBTRyBidWZmZXJzIGZvciBzdHJlYW1pbmcgbW9kZSBETUEKQEAgLTU3Myw4ICs1NzgsMTIgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewotCQlkbWFib3VuY2Vfc3luY19mb3JfY3B1KGRldiwgc2dfZG1hX2FkZHJlc3MocyksIDAsCi0JCQkJCXNnX2RtYV9sZW4ocyksIGRpcik7CisJCWlmICghZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIHNnX2RtYV9hZGRyZXNzKHMpLCAwLAorCQkJCQkgICAgc2dfZG1hX2xlbihzKSwgZGlyKSkKKwkJCWNvbnRpbnVlOworCisJCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJICAgICAgcy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2NwdSk7CkBAIC01OTcsOSArNjA2LDggQEAKIAkJCQkJc2dfZG1hX2xlbihzKSwgZGlyKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQkJZG1hX2NhY2hlX21haW50X3BhZ2Uoc2dfcGFnZShzKSwgcy0+b2Zmc2V0LAotCQkJCQkgICAgIHMtPmxlbmd0aCwgZGlyKTsKKwkJX19kbWFfcGFnZV9jcHVfdG9fZGV2KHNnX3BhZ2UocyksIHMtPm9mZnNldCwKKwkJCQkgICAgICBzLT5sZW5ndGgsIGRpcik7CiAJfQogfQogRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCA1NmVlMTUzLi5jOWI5N2U5ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTM2LDI4ICszNiwxMiBAQAogICogVGhlcmVmb3JlIHRob3NlIGNvbmZpZ3VyYXRpb25zIHdoaWNoIG1pZ2h0IGNhbGwgYWRqdXN0X3B0ZSAodGhvc2UKICAqIHdpdGhvdXQgQ09ORklHX0NQVV9DQUNIRV9WSVBUKSBjYW5ub3Qgc3VwcG9ydCBzcGxpdCBwYWdlX3RhYmxlX2xvY2suCiAgKi8KLXN0YXRpYyBpbnQgYWRqdXN0X3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGludCBkb19hZGp1c3RfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJdW5zaWduZWQgbG9uZyBwZm4sIHB0ZV90ICpwdGVwKQogewotCXBnZF90ICpwZ2Q7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlLCBlbnRyeTsKKwlwdGVfdCBlbnRyeSA9ICpwdGVwOwogCWludCByZXQ7CiAKLQlwZ2QgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOwotCWlmIChwZ2Rfbm9uZSgqcGdkKSkKLQkJZ290byBub19wZ2Q7Ci0JaWYgKHBnZF9iYWQoKnBnZCkpCi0JCWdvdG8gYmFkX3BnZDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKLQlpZiAocG1kX25vbmUoKnBtZCkpCi0JCWdvdG8gbm9fcG1kOwotCWlmIChwbWRfYmFkKCpwbWQpKQotCQlnb3RvIGJhZF9wbWQ7Ci0KLQlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpOwotCWVudHJ5ID0gKnB0ZTsKLQogCS8qCiAJICogSWYgdGhpcyBwYWdlIGlzIHByZXNlbnQsIGl0J3MgYWN0dWFsbHkgYmVpbmcgc2hhcmVkLgogCSAqLwpAQCAtNjgsMzMgKzUyLDU1IEBACiAJICogZmF1bHQgKGllLCBpcyBvbGQpLCB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBhbnkgaXNzdWVzLgogCSAqLwogCWlmIChyZXQgJiYgKHB0ZV92YWwoZW50cnkpICYgTF9QVEVfTVRfTUFTSykgIT0gc2hhcmVkX3B0ZV9tYXNrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihlbnRyeSk7CiAJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwZm4pOwogCQlvdXRlcl9mbHVzaF9yYW5nZSgocGZuIDw8IFBBR0VfU0hJRlQpLAogCQkJCSAgKHBmbiA8PCBQQUdFX1NISUZUKSArIFBBR0VfU0laRSk7CiAJCXB0ZV92YWwoZW50cnkpICY9IH5MX1BURV9NVF9NQVNLOwogCQlwdGVfdmFsKGVudHJ5KSB8PSBzaGFyZWRfcHRlX21hc2s7Ci0JCXNldF9wdGVfYXQodm1hLT52bV9tbSwgYWRkcmVzcywgcHRlLCBlbnRyeSk7CisJCXNldF9wdGVfYXQodm1hLT52bV9tbSwgYWRkcmVzcywgcHRlcCwgZW50cnkpOwogCQlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwogCX0KLQlwdGVfdW5tYXAocHRlKTsKKwogCXJldHVybiByZXQ7Cit9CiAKLWJhZF9wZ2Q6Ci0JcGdkX0VSUk9SKCpwZ2QpOwotCXBnZF9jbGVhcihwZ2QpOwotbm9fcGdkOgotCXJldHVybiAwOworc3RhdGljIGludCBhZGp1c3RfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJdW5zaWduZWQgbG9uZyBwZm4pCit7CisJc3BpbmxvY2tfdCAqcHRsOworCXBnZF90ICpwZ2Q7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCWludCByZXQ7CiAKLWJhZF9wbWQ6Ci0JcG1kX0VSUk9SKCpwbWQpOwotCXBtZF9jbGVhcihwbWQpOwotbm9fcG1kOgotCXJldHVybiAwOworCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcmVzcyk7CisJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQorCQlyZXR1cm4gMDsKKworCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGlzIGlzIGNhbGxlZCB3aGlsZSBhbm90aGVyIHBhZ2UgdGFibGUgaXMgbWFwcGVkLCBzbyB3ZQorCSAqIG11c3QgdXNlIHRoZSBuZXN0ZWQgdmVyc2lvbi4gIFRoaXMgYWxzbyBtZWFucyB3ZSBuZWVkIHRvCisJICogb3Blbi1jb2RlIHRoZSBzcGluLWxvY2tpbmcuCisJICovCisJcHRsID0gcHRlX2xvY2twdHIodm1hLT52bV9tbSwgcG1kKTsKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQocG1kLCBhZGRyZXNzKTsKKwlzcGluX2xvY2socHRsKTsKKworCXJldCA9IGRvX2FkanVzdF9wdGUodm1hLCBhZGRyZXNzLCBwZm4sIHB0ZSk7CisKKwlzcGluX3VubG9jayhwdGwpOworCXB0ZV91bm1hcF9uZXN0ZWQocHRlKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCi1tYWtlX2NvaGVyZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKK21ha2VfY29oZXJlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQ7CkBAIC0xMjIsMTEgKzEyOCwxMSBAQAogCQlpZiAoIShtcG50LT52bV9mbGFncyAmIFZNX01BWVNIQVJFKSkKIAkJCWNvbnRpbnVlOwogCQlvZmZzZXQgPSAocGdvZmYgLSBtcG50LT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKLQkJYWxpYXNlcyArPSBhZGp1c3RfcHRlKG1wbnQsIG1wbnQtPnZtX3N0YXJ0ICsgb2Zmc2V0KTsKKwkJYWxpYXNlcyArPSBhZGp1c3RfcHRlKG1wbnQsIG1wbnQtPnZtX3N0YXJ0ICsgb2Zmc2V0LCBwZm4pOwogCX0KIAlmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZyk7CiAJaWYgKGFsaWFzZXMpCi0JCWFkanVzdF9wdGUodm1hLCBhZGRyKTsKKwkJZG9fYWRqdXN0X3B0ZSh2bWEsIGFkZHIsIHBmbiwgcHRlcCk7CiAJZWxzZQogCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcGZuKTsKIH0KQEAgLTE0NCw5ICsxNTAsMTAgQEAKICAqCiAgKiBOb3RlIHRoYXQgdGhlIHB0ZSBsb2NrIHdpbGwgYmUgaGVsZC4KICAqLwotdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXB0ZV90ICpwdGVwKQogewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbigqcHRlcCk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKQEAgLTE2OCw3ICsxNzUsNyBAQAogI2VuZGlmCiAJaWYgKG1hcHBpbmcpIHsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKLQkJCW1ha2VfY29oZXJlbnQobWFwcGluZywgdm1hLCBhZGRyLCBwZm4pOworCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHB0ZXAsIHBmbik7CiAJCWVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQogCQkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggMTBlMDY4MC4uOWQ0MGMzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMzAyLDYgKzMwMywxMiBAQAogCWZhdWx0ID0gX19kb19wYWdlX2ZhdWx0KG1tLCBhZGRyLCBmc3IsIHRzayk7CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAorCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcik7CisJaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUFKT1IpCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsIHJlZ3MsIGFkZHIpOworCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUlOT1IpCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsIHJlZ3MsIGFkZHIpOworCiAJLyoKIAkgKiBIYW5kbGUgdGhlICJub3JtYWwiIGNhc2UgZmlyc3QgLSBWTV9GQVVMVF9NQUpPUiAvIFZNX0ZBVUxUX01JTk9SCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCA2ZjNhNGI3Li5lMzRmMDk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hldHlwZS5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtODcsMTMgKzg4LDI2IEBACiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDICYmIGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpCiAJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogfQorI2Vsc2UKKyNkZWZpbmUgZmx1c2hfcGZuX2FsaWFzKHBmbix2YWRkcikJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzX290aGVyKHZvaWQgKmFyZ3MpCit7CisJX19mbHVzaF9pY2FjaGVfYWxsKCk7Cit9CisjZW5kaWYKKworc3RhdGljCiB2b2lkIGZsdXNoX3B0cmFjZV9hY2Nlc3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJIHVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmthZGRyLAotCQkJIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpCisJCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQogewogCWlmIChjYWNoZV9pc192aXZ0KCkpIHsKLQkJdml2dF9mbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdWFkZHIsIGthZGRyLCBsZW4sIHdyaXRlKTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pKSkgeworCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FkZHI7CisJCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMDQsMTYgKzExOCwzNyBAQAogCX0KIAogCS8qIFZJUFQgbm9uLWFsaWFzaW5nIGNhY2hlICovCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pKSAmJgotCSAgICB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgeworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgewogCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYWRkcjsKLQkJLyogb25seSBmbHVzaGluZyB0aGUga2VybmVsIG1hcHBpbmcgb24gbm9uLWFsaWFzaW5nIFZJUFQgKi8KIAkJX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UoYWRkciwgYWRkciArIGxlbik7CisjaWZkZWYgQ09ORklHX1NNUAorCQlpZiAoY2FjaGVfb3BzX25lZWRfYnJvYWRjYXN0KCkpCisJCQlzbXBfY2FsbF9mdW5jdGlvbihmbHVzaF9wdHJhY2VfYWNjZXNzX290aGVyLAorCQkJCQkgIE5VTEwsIDEpOworI2VuZGlmCiAJfQogfQotI2Vsc2UKLSNkZWZpbmUgZmx1c2hfcGZuX2FsaWFzKHBmbix2YWRkcikJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogQ29weSB1c2VyIGRhdGEgZnJvbS90byBhIHBhZ2Ugd2hpY2ggaXMgbWFwcGVkIGludG8gYSBkaWZmZXJlbnQKKyAqIHByb2Nlc3NlcyBhZGRyZXNzIHNwYWNlLiAgUmVhbGx5LCB3ZSB3YW50IHRvIGFsbG93IG91ciAidXNlcgorICogc3BhY2UiIG1vZGVsIHRvIGhhbmRsZSB0aGlzLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gcnVuIG9uIHRoZSBjdXJyZW50IENQVS4KKyAqLwordm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKICNlbmRpZgorCW1lbWNweShkc3QsIHNyYywgbGVuKTsKKwlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdWFkZHIsIGRzdCwgbGVuKTsKKyNpZmRlZiBDT05GSUdfU01QCisJcHJlZW1wdF9lbmFibGUoKTsKKyNlbmRpZgorfQogCiB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGEwNGZmYmJiLi43ODI5Y2I1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTMyLDE5ICszMywyMSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c19pbml0cmRfc3RhcnQgX19pbml0ZGF0YSA9IDA7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaHlzX2luaXRyZF9zaXplIF9faW5pdGRhdGEgPSAwOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdHJkKGNoYXIgKipwKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdHJkKGNoYXIgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKKwljaGFyICplbmRwOwogCi0Jc3RhcnQgPSBtZW1wYXJzZSgqcCwgcCk7Ci0JaWYgKCoqcCA9PSAnLCcpIHsKLQkJc2l6ZSA9IG1lbXBhcnNlKCgqcCkgKyAxLCBwKTsKKwlzdGFydCA9IG1lbXBhcnNlKHAsICZlbmRwKTsKKwlpZiAoKmVuZHAgPT0gJywnKSB7CisJCXNpemUgPSBtZW1wYXJzZShlbmRwICsgMSwgTlVMTCk7CiAKIAkJcGh5c19pbml0cmRfc3RhcnQgPSBzdGFydDsKIAkJcGh5c19pbml0cmRfc2l6ZSA9IHNpemU7CiAJfQorCXJldHVybiAwOwogfQotX19lYXJseV9wYXJhbSgiaW5pdHJkPSIsIGVhcmx5X2luaXRyZCk7CitlYXJseV9wYXJhbSgiaW5pdHJkIiwgZWFybHlfaW5pdHJkKTsKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX2luaXRyZChjb25zdCBzdHJ1Y3QgdGFnICp0YWcpCiB7CkBAIC01NjAsNyArNTYzLDcgQEAKICAqLwogdm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX3BhZ2VzLCBmcmVlX3BhZ2VzOwogCWludCBpLCBub2RlOwogCiAjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KQEAgLTU5Niw2ICs1OTksMzMgQEAKIAl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7CiAjZW5kaWYKIAorCXJlc2VydmVkX3BhZ2VzID0gZnJlZV9wYWdlcyA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCXBnX2RhdGFfdCAqbiA9IE5PREVfREFUQShub2RlKTsKKwkJc3RydWN0IHBhZ2UgKm1hcCA9IHBnZGF0X3BhZ2VfbnIobiwgMCkgLSBuLT5ub2RlX3N0YXJ0X3BmbjsKKworCQlmb3JfZWFjaF9ub2RlYmFuayhpLCAmbWVtaW5mbywgbm9kZSkgeworCQkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWVtaW5mby5iYW5rW2ldOworCQkJdW5zaWduZWQgaW50IHBmbjEsIHBmbjI7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKmVuZDsKKworCQkJcGZuMSA9IGJhbmtfcGZuX3N0YXJ0KGJhbmspOworCQkJcGZuMiA9IGJhbmtfcGZuX2VuZChiYW5rKTsKKworCQkJcGFnZSA9IG1hcCArIHBmbjE7CisJCQllbmQgID0gbWFwICsgcGZuMjsKKworCQkJZG8geworCQkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJCXJlc2VydmVkX3BhZ2VzKys7CisJCQkJZWxzZSBpZiAoIXBhZ2VfY291bnQocGFnZSkpCisJCQkJCWZyZWVfcGFnZXMrKzsKKwkJCQlwYWdlKys7CisJCQl9IHdoaWxlIChwYWdlIDwgZW5kKTsKKwkJfQorCX0KKwogCS8qCiAJICogU2luY2Ugb3VyIG1lbW9yeSBtYXkgbm90IGJlIGNvbnRpZ3VvdXMsIGNhbGN1bGF0ZSB0aGUKIAkgKiByZWFsIG51bWJlciBvZiBwYWdlcyB3ZSBoYXZlIGluIHRoaXMgc3lzdGVtCkBAIC02MDgsMTYgKzYzOCw3MSBAQAogCX0KIAlwcmludGsoIiA9ICVsdU1CIHRvdGFsXG4iLCBudW1fcGh5c3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKIAotCWNvZGVzaXplID0gX2V0ZXh0IC0gX3RleHQ7Ci0JZGF0YXNpemUgPSBfZW5kIC0gX2RhdGE7Ci0JaW5pdHNpemUgPSBfX2luaXRfZW5kIC0gX19pbml0X2JlZ2luOwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJNZW1vcnk6ICVsdUtCIGF2YWlsYWJsZSAoJWRLIGNvZGUsICIKLQkJIiVkSyBkYXRhLCAlZEsgaW5pdCwgJWx1SyBoaWdobWVtKVxuIiwKLQkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwgY29kZXNpemUgPj4gMTAsCi0JCWRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKKwlwcmludGsoS0VSTl9OT1RJQ0UgIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSwgJWx1ayByZXNlcnZlZCwgJWx1SyBoaWdobWVtXG4iLAorCQlucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQlmcmVlX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKKwkJcmVzZXJ2ZWRfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCQl0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKTsKIAorI2RlZmluZSBNTEsoYiwgdCkgYiwgdCwgKCh0KSAtIChiKSkgPj4gMTAKKyNkZWZpbmUgTUxNKGIsIHQpIGIsIHQsICgodCkgLSAoYikpID4+IDIwCisjZGVmaW5lIE1MS19ST1VORFVQKGIsIHQpIGIsIHQsIERJVl9ST1VORF9VUCgoKHQpIC0gKGIpKSwgU1pfMUspCisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlZpcnR1YWwga2VybmVsIG1lbW9yeSBsYXlvdXQ6XG4iCisJCQkiICAgIHZlY3RvciAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorCQkJIiAgICBmaXhtYXAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKyNpZmRlZiBDT05GSUdfTU1VCisJCQkiICAgIERNQSAgICAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKVxuIgorI2VuZGlmCisJCQkiICAgIHZtYWxsb2MgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKVxuIgorCQkJIiAgICBsb3dtZW0gIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQkJIiAgICBwa21hcCAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKyNlbmRpZgorCQkJIiAgICBtb2R1bGVzIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKwkJCSIgICAgICAuaW5pdCA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIKKwkJCSIgICAgICAudGV4dCA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIKKwkJCSIgICAgICAuZGF0YSA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIsCisKKwkJCU1MSyhVTChDT05GSUdfVkVDVE9SU19CQVNFKSwgVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSkgKworCQkJCShQQUdFX1NJWkUpKSwKKwkJCU1MSyhGSVhBRERSX1NUQVJULCBGSVhBRERSX1RPUCksCisjaWZkZWYgQ09ORklHX01NVQorCQkJTUxNKENPTlNJU1RFTlRfQkFTRSwgQ09OU0lTVEVOVF9FTkQpLAorI2VuZGlmCisJCQlNTE0oVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQpLAorCQkJTUxNKFBBR0VfT0ZGU0VULCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSksCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJCU1MTShQS01BUF9CQVNFLCAoUEtNQVBfQkFTRSkgKyAoTEFTVF9QS01BUCkgKgorCQkJCShQQUdFX1NJWkUpKSwKKyNlbmRpZgorCQkJTUxNKE1PRFVMRVNfVkFERFIsIE1PRFVMRVNfRU5EKSwKKworCQkJTUxLX1JPVU5EVVAoX19pbml0X2JlZ2luLCBfX2luaXRfZW5kKSwKKwkJCU1MS19ST1VORFVQKF90ZXh0LCBfZXRleHQpLAorCQkJTUxLX1JPVU5EVVAoX2RhdGEsIF9lZGF0YSkpOworCisjdW5kZWYgTUxLCisjdW5kZWYgTUxNCisjdW5kZWYgTUxLX1JPVU5EVVAKKworCS8qCisJICogQ2hlY2sgYm91bmRhcmllcyB0d2ljZTogU29tZSBmdW5kYW1lbnRhbCBpbmNvbnNpc3RlbmNpZXMgY2FuCisJICogYmUgZGV0ZWN0ZWQgYXQgYnVpbGQgdGltZSBhbHJlYWR5LgorCSAqLworI2lmZGVmIENPTkZJR19NTVUKKwlCVUlMRF9CVUdfT04oVk1BTExPQ19FTkQJCQk+IENPTlNJU1RFTlRfQkFTRSk7CisJQlVHX09OKFZNQUxMT0NfRU5ECQkJCT4gQ09OU0lTVEVOVF9CQVNFKTsKKworCUJVSUxEX0JVR19PTihUQVNLX1NJWkUJCQkJPiBNT0RVTEVTX1ZBRERSKTsKKwlCVUdfT04oVEFTS19TSVpFIAkJCQk+IE1PRFVMRVNfVkFERFIpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCUJVSUxEX0JVR19PTihQS01BUF9CQVNFICsgTEFTVF9QS01BUCAqIFBBR0VfU0laRSA+IFBBR0VfT0ZGU0VUKTsKKwlCVUdfT04oUEtNQVBfQkFTRSArIExBU1RfUEtNQVAgKiBQQUdFX1NJWkUJPiBQQUdFX09GRlNFVCk7CisjZW5kaWYKKwogCWlmIChQQUdFX1NJWkUgPj0gMTYzODQgJiYgbnVtX3BoeXNwYWdlcyA8PSAxMjgpIHsKIAkJZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKaW5kZXggMGFiNzVjNi4uMjhjOGI5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtMTM5LDggKzEzOSw4IEBACiAgKiB3aGljaCByZXF1aXJlcyB0aGUgbmV3IGlvcmVtYXAnZCByZWdpb24gdG8gYmUgcmVmZXJlbmNlZCwgdGhlIENQVSB3aWxsCiAgKiByZWZlcmVuY2UgdGhlIF9vbGRfIHJlZ2lvbi4KICAqCi0gKiBOb3RlIHRoYXQgZ2V0X3ZtX2FyZWEoKSBhbGxvY2F0ZXMgYSBndWFyZCA0SyBwYWdlLCBzbyB3ZSBuZWVkIHRvIG1hc2sKLSAqIHRoZSBzaXplIGJhY2sgdG8gMU1CIGFsaWduZWQgb3Igd2Ugd2lsbCBvdmVyZmxvdyBpbiB0aGUgbG9vcCBiZWxvdy4KKyAqIE5vdGUgdGhhdCBnZXRfdm1fYXJlYV9jYWxsZXIoKSBhbGxvY2F0ZXMgYSBndWFyZCA0SyBwYWdlLCBzbyB3ZSBuZWVkIHRvCisgKiBtYXNrIHRoZSBzaXplIGJhY2sgdG8gMU1CIGFsaWduZWQgb3Igd2Ugd2lsbCBvdmVyZmxvdyBpbiB0aGUgbG9vcCBiZWxvdy4KICAqLwogc3RhdGljIHZvaWQgdW5tYXBfYXJlYV9zZWN0aW9ucyh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTI1NCwyMiArMjU0LDggQEAKIH0KICNlbmRpZgogCi0KLS8qCi0gKiBSZW1hcCBhbiBhcmJpdHJhcnkgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAotICogYWRkcmVzcyBzcGFjZS4gTmVlZGVkIHdoZW4gdGhlIGtlcm5lbCB3YW50cyB0byBhY2Nlc3MgaGlnaCBhZGRyZXNzZXMKLSAqIGRpcmVjdGx5LgotICoKLSAqIE5PVEUhIFdlIG5lZWQgdG8gYWxsb3cgbm9uLXBhZ2UtYWxpZ25lZCBtYXBwaW5ncyB0b286IHdlIHdpbGwgb2J2aW91c2x5Ci0gKiBoYXZlIHRvIGNvbnZlcnQgdGhlbSBpbnRvIGFuIG9mZnNldCBpbiBhIHBhZ2UtYWxpZ25lZCBtYXBwaW5nLCBidXQgdGhlCi0gKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KLSAqCi0gKiAnZmxhZ3MnIGFyZSB0aGUgZXh0cmEgTF9QVEVfIGZsYWdzIHRoYXQgeW91IHdhbnQgdG8gc3BlY2lmeSBmb3IgdGhpcwotICogbWFwcGluZy4gIFNlZSA8YXNtL3BndGFibGUuaD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKi8KLXZvaWQgX19pb21lbSAqCi1fX2FybV9pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkgIHVuc2lnbmVkIGludCBtdHlwZSkKK3ZvaWQgX19pb21lbSAqIF9fYXJtX2lvcmVtYXBfcGZuX2NhbGxlcih1bnNpZ25lZCBsb25nIHBmbiwKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQogewogCWNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqdHlwZTsKIAlpbnQgZXJyOwpAQCAtMjkxLDcgKzI3Nyw3IEBACiAJICovCiAJc2l6ZSA9IFBBR0VfQUxJR04ob2Zmc2V0ICsgc2l6ZSk7CiAKLSAJYXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVApOworCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKICAJaWYgKCFhcmVhKQogIAkJcmV0dXJuIE5VTEw7CiAgCWFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwpAQCAtMzE4LDEwICszMDQsOSBAQAogCWZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgYWRkciArIHNpemUpOwogCXJldHVybiAodm9pZCBfX2lvbWVtICopIChvZmZzZXQgKyBhZGRyKTsKIH0KLUVYUE9SVF9TWU1CT0woX19hcm1faW9yZW1hcF9wZm4pOwogCi12b2lkIF9faW9tZW0gKgotX19hcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBtdHlwZSkKK3ZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAorCXVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQogewogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOwogIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7CkBAIC0zMzQsNyArMzE5LDMzIEBACiAJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKIAkJcmV0dXJuIE5VTEw7CiAKLSAJcmV0dXJuIF9fYXJtX2lvcmVtYXBfcGZuKHBmbiwgb2Zmc2V0LCBzaXplLCBtdHlwZSk7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfcGZuX2NhbGxlcihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUsCisJCQljYWxsZXIpOworfQorCisvKgorICogUmVtYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKKyAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIGhpZ2ggYWRkcmVzc2VzCisgKiBkaXJlY3RseS4KKyAqCisgKiBOT1RFISBXZSBuZWVkIHRvIGFsbG93IG5vbi1wYWdlLWFsaWduZWQgbWFwcGluZ3MgdG9vOiB3ZSB3aWxsIG9idmlvdXNseQorICogaGF2ZSB0byBjb252ZXJ0IHRoZW0gaW50byBhbiBvZmZzZXQgaW4gYSBwYWdlLWFsaWduZWQgbWFwcGluZywgYnV0IHRoZQorICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCisgKi8KK3ZvaWQgX19pb21lbSAqCitfX2FybV9pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkgIHVuc2lnbmVkIGludCBtdHlwZSkKK3sKKwlyZXR1cm4gX19hcm1faW9yZW1hcF9wZm5fY2FsbGVyKHBmbiwgb2Zmc2V0LCBzaXplLCBtdHlwZSwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXBfcGZuKTsKKwordm9pZCBfX2lvbWVtICoKK19fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUpCit7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChfX2FybV9pb3JlbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCA3NjFmZmVkLi45ZDRkYTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTAwLDE4ICsxMDAsMTcgQEAKICAqIHdyaXRlYnVmZmVyIHRvIGJlIHR1cm5lZCBvZmYuICAoTm90ZTogdGhlIHdyaXRlCiAgKiBidWZmZXIgc2hvdWxkIG5vdCBiZSBvbiBhbmQgdGhlIGNhY2hlIG9mZikuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9jYWNoZXBvbGljeShjaGFyICoqcCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2NhY2hlcG9saWN5KGNoYXIgKnApCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZV9wb2xpY2llcyk7IGkrKykgewogCQlpbnQgbGVuID0gc3RybGVuKGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSk7CiAKLQkJaWYgKG1lbWNtcCgqcCwgY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5LCBsZW4pID09IDApIHsKKwkJaWYgKG1lbWNtcChwLCBjYWNoZV9wb2xpY2llc1tpXS5wb2xpY3ksIGxlbikgPT0gMCkgewogCQkJY2FjaGVwb2xpY3kgPSBpOwogCQkJY3JfYWxpZ25tZW50ICY9IH5jYWNoZV9wb2xpY2llc1tpXS5jcl9tYXNrOwogCQkJY3Jfbm9fYWxpZ25tZW50ICY9IH5jYWNoZV9wb2xpY2llc1tpXS5jcl9tYXNrOwotCQkJKnAgKz0gbGVuOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xMzAsMzYgKzEyOSwzNyBAQAogCX0KIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAlzZXRfY3IoY3JfYWxpZ25tZW50KTsKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oImNhY2hlcG9saWN5PSIsIGVhcmx5X2NhY2hlcG9saWN5KTsKK2Vhcmx5X3BhcmFtKCJjYWNoZXBvbGljeSIsIGVhcmx5X2NhY2hlcG9saWN5KTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X25vY2FjaGUoY2hhciAqKl9fdW51c2VkKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfbm9jYWNoZShjaGFyICpfX3VudXNlZCkKIHsKIAljaGFyICpwID0gImJ1ZmZlcmVkIjsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJub2NhY2hlIGlzIGRlcHJlY2F0ZWQ7IHVzZSBjYWNoZXBvbGljeT0lc1xuIiwgcCk7Ci0JZWFybHlfY2FjaGVwb2xpY3koJnApOworCWVhcmx5X2NhY2hlcG9saWN5KHApOworCXJldHVybiAwOwogfQotX19lYXJseV9wYXJhbSgibm9jYWNoZSIsIGVhcmx5X25vY2FjaGUpOworZWFybHlfcGFyYW0oIm5vY2FjaGUiLCBlYXJseV9ub2NhY2hlKTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X25vd3JpdGUoY2hhciAqKl9fdW51c2VkKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfbm93cml0ZShjaGFyICpfX3VudXNlZCkKIHsKIAljaGFyICpwID0gInVuY2FjaGVkIjsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJub3diIGlzIGRlcHJlY2F0ZWQ7IHVzZSBjYWNoZXBvbGljeT0lc1xuIiwgcCk7Ci0JZWFybHlfY2FjaGVwb2xpY3koJnApOworCWVhcmx5X2NhY2hlcG9saWN5KHApOworCXJldHVybiAwOwogfQotX19lYXJseV9wYXJhbSgibm93YiIsIGVhcmx5X25vd3JpdGUpOworZWFybHlfcGFyYW0oIm5vd2IiLCBlYXJseV9ub3dyaXRlKTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2VjYyhjaGFyICoqcCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2VjYyhjaGFyICpwKQogewotCWlmIChtZW1jbXAoKnAsICJvbiIsIDIpID09IDApIHsKKwlpZiAobWVtY21wKHAsICJvbiIsIDIpID09IDApCiAJCWVjY19tYXNrID0gUE1EX1BST1RFQ1RJT047Ci0JCSpwICs9IDI7Ci0JfSBlbHNlIGlmIChtZW1jbXAoKnAsICJvZmYiLCAzKSA9PSAwKSB7CisJZWxzZSBpZiAobWVtY21wKHAsICJvZmYiLCAzKSA9PSAwKQogCQllY2NfbWFzayA9IDA7Ci0JCSpwICs9IDM7Ci0JfQorCXJldHVybiAwOwogfQotX19lYXJseV9wYXJhbSgiZWNjPSIsIGVhcmx5X2VjYyk7CitlYXJseV9wYXJhbSgiZWNjIiwgZWFybHlfZWNjKTsKIAogc3RhdGljIGludCBfX2luaXQgbm9hbGlnbl9zZXR1cChjaGFyICpfX3VudXNlZCkKIHsKQEAgLTY3MCw5ICs2NzAsOSBAQAogICogYnl0ZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgKG9yIGRlY3JlYXNlKSB0aGUgdm1hbGxvYwogICogYXJlYSAtIHRoZSBkZWZhdWx0IGlzIDEyOG0uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV92bWFsbG9jKGNoYXIgKiphcmcpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV92bWFsbG9jKGNoYXIgKmFyZykKIHsKLQl2bWFsbG9jX3Jlc2VydmUgPSBtZW1wYXJzZSgqYXJnLCBhcmcpOworCXZtYWxsb2NfcmVzZXJ2ZSA9IG1lbXBhcnNlKGFyZywgTlVMTCk7CiAKIAlpZiAodm1hbGxvY19yZXNlcnZlIDwgU1pfMTZNKSB7CiAJCXZtYWxsb2NfcmVzZXJ2ZSA9IFNaXzE2TTsKQEAgLTY4Nyw4ICs2ODcsOSBAQAogCQkJInZtYWxsb2MgYXJlYSBpcyB0b28gYmlnLCBsaW1pdGluZyB0byAlbHVNQlxuIiwKIAkJCXZtYWxsb2NfcmVzZXJ2ZSA+PiAyMCk7CiAJfQorCXJldHVybiAwOwogfQotX19lYXJseV9wYXJhbSgidm1hbGxvYz0iLCBlYXJseV92bWFsbG9jKTsKK2Vhcmx5X3BhcmFtKCJ2bWFsbG9jIiwgZWFybHlfdm1hbGxvYyk7CiAKICNkZWZpbmUgVk1BTExPQ19NSU4JKHZvaWQgKikoVk1BTExPQ19FTkQgLSB2bWFsbG9jX3Jlc2VydmUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL25vbW11LmMgYi9hcmNoL2FybS9tbS9ub21tdS5jCmluZGV4IDM3NGE4MzEuLjliZmViNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL25vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpAQCAtNzQsNiArNzQsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19hcm1faW9yZW1hcF9wZm4pOwogCit2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXBfcGZuX2NhbGxlcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG10eXBlLCB2b2lkICpjYWxsZXIpCit7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfcGZuKHBmbiwgb2Zmc2V0LCBzaXplLCBtdHlwZSk7Cit9CisKIHZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgc2l6ZV90IHNpemUsCiAJCQkgICAgdW5zaWduZWQgaW50IG10eXBlKQogewpAQCAtODEsNiArODcsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19hcm1faW9yZW1hcCk7CiAKK3ZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgdW5zaWduZWQgaW50IG10eXBlLCB2b2lkICpjYWxsZXIpCit7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBtdHlwZSk7Cit9CisKIHZvaWQgX19pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggODAxMmUyNC4uNzI1MDdjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTI2NSw3ICsyNjUsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjBfZG1hX2ludl9yYW5nZSkKK2FybTEwMjBfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yOTUsNyArMjk1LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIwX2RtYV9jbGVhbl9yYW5nZSkKK2FybTEwMjBfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0zMzAsNiArMzMwLDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjBfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDIwX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm0xMDIwX2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjBfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjBfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjBfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDIwX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDIwX2NhY2hlX2ZucykKIAkubG9uZwlhcm0xMDIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyMF9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzM3LDggKzM2MSw4IEBACiAJLmxvbmcJYXJtMTAyMF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyMF9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjBfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm0xMDIwX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA0MWZlMjVkLi5kMjc4Mjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC0yNTgsNyArMjU4LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIwZV9kbWFfaW52X3JhbmdlKQorYXJtMTAyMGVfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yODQsNyArMjg0LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UpCithcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTMxNiw2ICszMTYsMzAgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyMGVfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtMTAyMGVfZG1hX2ludl9yYW5nZQorCWIJYXJtMTAyMGVfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjBlX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm0xMDIwZV9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTEwMjBlX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDIwZV9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm0xMDIwZV9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzIzLDggKzM0Nyw4IEBACiAJLmxvbmcJYXJtMTAyMGVfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyMGVfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTEwMjBlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTEwMjBlX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjBlX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtMTAyMGVfZG1hX2ZsdXNoX3JhbmdlCiAKIAkuYWxpZ24JNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCAyMGE1YjFiLi5jZTEzZTRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMl9kbWFfaW52X3JhbmdlKQorYXJtMTAyMl9kbWFfaW52X3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTI3Myw3ICsyNzMsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjJfZG1hX2NsZWFuX3JhbmdlKQorYXJtMTAyMl9kbWFfY2xlYW5fcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTMwNSw2ICszMDUsMzAgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyMl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWFybTEwMjJfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTEwMjJfZG1hX2ludl9yYW5nZQorCWIJYXJtMTAyMl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoYXJtMTAyMl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyMl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTEwMjJfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKGFybTEwMjJfY2FjaGVfZm5zKQogCS5sb25nCWFybTEwMjJfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm0xMDIyX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0zMTIsOCArMzM2LDggQEAKIAkubG9uZwlhcm0xMDIyX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDIyX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm0xMDIyX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlhcm0xMDIyX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm0xMDIyX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTEwMjJfZG1hX21hcF9hcmVhCisJLmxvbmcJYXJtMTAyMl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTEwMjJfZG1hX2ZsdXNoX3JhbmdlCiAKIAkuYWxpZ24JNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCA5NmFlZGIxLi42MzY2NzJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtMjQxLDcgKzI0MSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyNl9kbWFfaW52X3JhbmdlKQorYXJtMTAyNl9kbWFfaW52X3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjZfZG1hX2NsZWFuX3JhbmdlKQorYXJtMTAyNl9kbWFfY2xlYW5fcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTI5OSw2ICsyOTksMzAgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyNl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWFybTEwMjZfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTEwMjZfZG1hX2ludl9yYW5nZQorCWIJYXJtMTAyNl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoYXJtMTAyNl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyNl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTEwMjZfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKGFybTEwMjZfY2FjaGVfZm5zKQogCS5sb25nCWFybTEwMjZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm0xMDI2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0zMDYsOCArMzMwLDggQEAKIAkubG9uZwlhcm0xMDI2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlhcm0xMDI2X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTEwMjZfZG1hX21hcF9hcmVhCisJLmxvbmcJYXJtMTAyNl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTEwMjZfZG1hX2ZsdXNoX3JhbmdlCiAKIAkuYWxpZ24JNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggNDcxNjY5ZS4uOGJlODE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0yMzksNyArMjM5LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjBfZG1hX2ludl9yYW5nZSkKK2FybTkyMF9kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjYyLDcgKzI2Miw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTIwX2RtYV9jbGVhbl9yYW5nZSkKK2FybTkyMF9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yODgsNiArMjg4LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyMF9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWFybTkyMF9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtOTIwX2RtYV9pbnZfcmFuZ2UKKwliCWFybTkyMF9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoYXJtOTIwX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjBfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm05MjBfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKGFybTkyMF9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0yOTUsOCArMzE5LDggQEAKIAkubG9uZwlhcm05MjBfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTkyMF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlhcm05MjBfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTkyMF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05MjBfZG1hX21hcF9hcmVhCisJLmxvbmcJYXJtOTIwX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtOTIwX2RtYV9mbHVzaF9yYW5nZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IGVlMTExYjAuLmMwZmY4ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtMjQxLDcgKzI0MSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTIyX2RtYV9pbnZfcmFuZ2UpCithcm05MjJfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI2NCw3ICsyNjQsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyMl9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjJfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMjkwLDYgKzI5MCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjJfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyMl9kbWFfaW52X3JhbmdlCisJYglhcm05MjJfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyMl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTIyX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTIyX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjJfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyMl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjk3LDggKzMyMSw4IEBACiAJLmxvbmcJYXJtOTIyX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjJfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTIyX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTIyX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyMl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyMl9kbWFfZmx1c2hfcmFuZ2UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCA4ZGViNWJkZS4uM2M2Y2ZmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC0yODMsNyArMjgzLDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjVfZG1hX2ludl9yYW5nZSkKK2FybTkyNV9kbWFfaW52X3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMDgsNyArMzA4LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjVfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTI1X2RtYV9jbGVhbl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTM0MSw2ICszNDEsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTI1X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTI1X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05MjVfZG1hX2ludl9yYW5nZQorCWIJYXJtOTI1X2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05MjVfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyNV9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTkyNV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTI1X2NhY2hlX2ZucykKIAkubG9uZwlhcm05MjVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05MjVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM0OCw4ICszNzIsOCBAQAogCS5sb25nCWFybTkyNV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTI1X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTkyNV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTI1X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTkyNV9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05MjVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05MjVfZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGNwdV9hcm05MjVfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA2NGRiNmUyLi43NWI3MDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTI0Niw3ICsyNDYsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNl9kbWFfaW52X3JhbmdlKQorYXJtOTI2X2RtYV9pbnZfcmFuZ2U6CiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI3MSw3ICsyNzEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNl9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjZfZG1hX2NsZWFuX3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMzA0LDYgKzMwNCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjZfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyNl9kbWFfaW52X3JhbmdlCisJYglhcm05MjZfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyNl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTI2X2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTI2X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjZfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyNl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzExLDggKzMzNSw4IEBACiAJLmxvbmcJYXJtOTI2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjZfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTI2X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTI2X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyNl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyNl9kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X2FybTkyNl9kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCmluZGV4IDgxOTZiOWYuLjFhZjE2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoYXJtOTQwX2RtYV9pbnZfcmFuZ2UpCithcm05NDBfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDQJQCA0IHNlZ21lbnRzCiAxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCkBAIC0xOTIsNyArMTkyLDcgQEAKICAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShhcm05NDBfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTQwX2RtYV9jbGVhbl9yYW5nZToKIEVOVFJZKGNwdV9hcm05NDBfZGNhY2hlX2NsZWFuX2FyZWEpCiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKQEAgLTIzMyw2ICsyMzMsMzAgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQwX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTQwX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05NDBfZG1hX2ludl9yYW5nZQorCWIJYXJtOTQwX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05NDBfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTk0MF9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTk0MF9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTQwX2NhY2hlX2ZucykKIAkubG9uZwlhcm05NDBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05NDBfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTI0MCw4ICsyNjQsOCBAQAogCS5sb25nCWFybTk0MF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQwX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05NDBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTk0MF9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTQwX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTk0MF9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05NDBfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05NDBfZG1hX2ZsdXNoX3JhbmdlCiAKIAlfX0lOSVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IDlhOTUxMjMuLjE2NjRiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpAQCAtMjE1LDcgKzIxNSw3IEBACiAgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqIChzYW1lIGFzIGFybTkyNikKICAqLwotRU5UUlkoYXJtOTQ2X2RtYV9pbnZfcmFuZ2UpCithcm05NDZfZG1hX2ludl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKgogICogKHNhbWUgYXMgYXJtOTI2KQogICovCi1FTlRSWShhcm05NDZfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI3NSw2ICsyNzUsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQ2X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05NDZfZG1hX2ludl9yYW5nZQorCWIJYXJtOTQ2X2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05NDZfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTk0Nl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTk0Nl9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTQ2X2NhY2hlX2ZucykKIAkubG9uZwlhcm05NDZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05NDZfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTI4Miw4ICszMDYsOCBAQAogCS5sb25nCWFybTk0Nl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQ2X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05NDZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTk0Nl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTk0Nl9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05NDZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05NDZfZG1hX2ZsdXNoX3JhbmdlCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCmluZGV4IGRiYzM5MzguLjUzZTYzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKQEAgLTI3NCw3ICsyNzQsNyBAQAogICogKHNhbWUgYXMgdjR3YikKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9kbWFfaW52X3JhbmdlKQorZmVyb2Nlb25fZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI4OCw3ICsyODgsNyBAQAogCW1vdglwYywgbHIKIAogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlKQorZmVyb2Nlb25fcmFuZ2VfZG1hX2ludl9yYW5nZToKIAltcnMJcjIsIGNwc3IKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMTQsNyArMzE0LDcgQEAKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlKQorZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMzI0LDcgKzMyNCw3IEBACiAJbW92CXBjLCBscgogCiAJLmFsaWduCTUKLUVOVFJZKGZlcm9jZW9uX3JhbmdlX2RtYV9jbGVhbl9yYW5nZSkKK2Zlcm9jZW9uX3JhbmdlX2RtYV9jbGVhbl9yYW5nZToKIAltcnMJcjIsIGNwc3IKIAljbXAJcjEsIHIwCiAJc3VibmUJcjEsIHIxLCAjMQkJCUAgdG9wIGFkZHJlc3MgaXMgaW5jbHVzaXZlCkBAIC0zNjcsNiArMzY3LDQ0IEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZlcm9jZW9uX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlCisJYmNzCWZlcm9jZW9uX2RtYV9pbnZfcmFuZ2UKKwliCWZlcm9jZW9uX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhmZXJvY2Vvbl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZlcm9jZW9uX3JhbmdlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWZlcm9jZW9uX3JhbmdlX2RtYV9pbnZfcmFuZ2UKKwliCWZlcm9jZW9uX3JhbmdlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhmZXJvY2Vvbl9yYW5nZV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoZmVyb2Nlb25fZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoZmVyb2Nlb25fY2FjaGVfZm5zKQogCS5sb25nCWZlcm9jZW9uX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM3NCw4ICs0MTIsOCBAQAogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZlcm9jZW9uX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmZXJvY2Vvbl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmZXJvY2Vvbl9kbWFfbWFwX2FyZWEKKwkubG9uZwlmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZlcm9jZW9uX2RtYV9mbHVzaF9yYW5nZQogCiBFTlRSWShmZXJvY2Vvbl9yYW5nZV9jYWNoZV9mbnMpCkBAIC0zODUsOCArNDIzLDggQEAKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX3JhbmdlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX21hcF9hcmVhCisJLmxvbmcJZmVyb2Nlb25fZG1hX3VubWFwX2FyZWEKIAkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfZmx1c2hfcmFuZ2UKIAogCS5hbGlnbgk1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwppbmRleCA5Njc0ZDM2Li5jYWEzMTE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTIxOCw3ICsyMTgsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKG1vaGF3a19kbWFfaW52X3JhbmdlKQorbW9oYXdrX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCXRzdAlyMSwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTI0MSw3ICsyNDEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKG1vaGF3a19kbWFfY2xlYW5fcmFuZ2UpCittb2hhd2tfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMjY4LDYgKzI2OCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShtb2hhd2tfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQltb2hhd2tfZG1hX2NsZWFuX3JhbmdlCisJYmNzCW1vaGF3a19kbWFfaW52X3JhbmdlCisJYgltb2hhd2tfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKG1vaGF3a19kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkobW9oYXdrX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MobW9oYXdrX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShtb2hhd2tfY2FjaGVfZm5zKQogCS5sb25nCW1vaGF3a19mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCW1vaGF3a19mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjc1LDggKzI5OSw4IEBACiAJLmxvbmcJbW9oYXdrX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwltb2hhd2tfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCW1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJbW9oYXdrX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwltb2hhd2tfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJbW9oYXdrX2RtYV9tYXBfYXJlYQorCS5sb25nCW1vaGF3a19kbWFfdW5tYXBfYXJlYQogCS5sb25nCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggOGU0ZjZkYy4uZTU3OTdmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjM19kbWFfaW52X3JhbmdlKQoreHNjM19kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBMMSBEIGxpbmUKQEAgLTI3OCw3ICsyNzgsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjM19kbWFfY2xlYW5fcmFuZ2UpCit4c2MzX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCkBAIC0zMDQsNiArMzA0LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2MzX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJeHNjM19kbWFfY2xlYW5fcmFuZ2UKKwliY3MJeHNjM19kbWFfaW52X3JhbmdlCisJYgl4c2MzX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyh4c2MzX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2MzX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoeHNjM19kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoeHNjM19jYWNoZV9mbnMpCiAJLmxvbmcJeHNjM19mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCXhzYzNfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMxMSw4ICszMzUsOCBAQAogCS5sb25nCXhzYzNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzYzNfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXhzYzNfZG1hX2ludl9yYW5nZQotCS5sb25nCXhzYzNfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJeHNjM19kbWFfbWFwX2FyZWEKKwkubG9uZwl4c2MzX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJeHNjM19kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X3hzYzNfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCA5M2RmNDcyLi42MzAzN2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTMxNSw3ICszMTUsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjYWxlX2RtYV9pbnZfcmFuZ2UpCit4c2NhbGVfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMzM2LDcgKzMzNiw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWSh4c2NhbGVfZG1hX2NsZWFuX3JhbmdlKQoreHNjYWxlX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQpAQCAtMzYzLDYgKzM2Myw0MyBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlICgmIEZpbGwpIEJ1ZmZlcgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoeHNjYWxlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCWJjcwl4c2NhbGVfZG1hX2ludl9yYW5nZQorCWIJeHNjYWxlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyh4c2NhbGVfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHhzY2FsZV9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHhzY2FsZV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoeHNjYWxlX2NhY2hlX2ZucykKIAkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwl4c2NhbGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM3MCw4ICs0MDcsOCBAQAogCS5sb25nCXhzY2FsZV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXhzY2FsZV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXhzY2FsZV9kbWFfbWFwX2FyZWEKKwkubG9uZwl4c2NhbGVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCiAKIC8qCkBAIC0zOTQsOCArNDMxLDggQEAKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzY2FsZV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi0JLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXhzY2FsZV9kbWFfYTBfbWFwX2FyZWEKKwkubG9uZwl4c2NhbGVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGNwdV94c2NhbGVfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMKaW5kZXggYWQ4MDc1Mi4uZWYzZTI2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQoraW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0ID0gMDsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQordm9pZCBhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICppcnFzLCBpbnQgbnIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaCBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaAppbmRleCA2Zjg1MzhlLi4xOTAyYjk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmgKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5oCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgYXJtMTFfc2V0dXBfcG11KHZvaWQpOwogaW50IGFybTExX3N0YXJ0X3BtdSh2b2lkKTsKIGludCBhcm0xMV9zdG9wX3BtdSh2b2lkKTsKLWludCBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoaW50ICosIGludCk7Ci12b2lkIGFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhpbnQgKiwgaW50KTsKK2ludCBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoY29uc3QgaW50ICosIGludCk7Cit2b2lkIGFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhjb25zdCBpbnQgKiwgaW50KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCmluZGV4IDRjZTBmOTguLmY3M2NlODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCkBAIC0zMiw2ICszMiw3IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcG11Lmg+CiAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCkBAIC01OCw2ICs2MCw3IEBACiAgKiBCaXRtYXNrIG9mIHVzZWQgU0NVIGNvdW50ZXJzCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2N1X2VtX3VzZWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogLyoKICAqIDIgaGVscGVyIGZucyB0YWtlIGEgY291bnRlciBudW1iZXIgZnJvbSAwLTcgKG5vdCB0aGUgdXNlcnNwYWNlLXZpc2libGUgY291bnRlciBudW1iZXIpCkBAIC0yMjUsMzMgKzIyOCw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFybTExX2lycXNbXSA9IHsKLQlbMF0JPSBJUlFfRUIxMU1QX1BNVV9DUFUwLAotCVsxXQk9IElSUV9FQjExTVBfUE1VX0NQVTEsCi0JWzJdCT0gSVJRX0VCMTFNUF9QTVVfQ1BVMiwKLQlbM10JPSBJUlFfRUIxMU1QX1BNVV9DUFUzCi19OwotCiBzdGF0aWMgaW50IGVtX3N0YXJ0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhhcm0xMV9pcnFzLCBBUlJBWV9TSVpFKGFybTExX2lycXMpKTsKKwlwbXVfaXJxcyA9IHJlc2VydmVfcG11KCk7CisJaWYgKElTX0VSUihwbXVfaXJxcykpIHsKKwkJcmV0ID0gUFRSX0VSUihwbXVfaXJxcyk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhwbXVfaXJxcy0+aXJxcywgcG11X2lycXMtPm51bV9pcnFzKTsKIAlpZiAocmV0ID09IDApIHsKIAkJZW1fY2FsbF9mdW5jdGlvbihhcm0xMV9zdGFydF9wbXUpOwogCiAJCXJldCA9IHNjdV9zdGFydCgpOwotCQlpZiAocmV0KQotCQkJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGFybTExX2lycXMsIEFSUkFZX1NJWkUoYXJtMTFfaXJxcykpOworCQlpZiAocmV0KSB7CisJCQlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsCisJCQkJCQkgcG11X2lycXMtPm51bV9pcnFzKTsKKwkJfSBlbHNlIHsKKwkJCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwkJCXBtdV9pcnFzID0gTlVMTDsKKwkJfQogCX0KKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGVtX3N0b3Aodm9pZCkKIHsKIAllbV9jYWxsX2Z1bmN0aW9uKGFybTExX3N0b3BfcG11KTsKLQlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoYXJtMTFfaXJxcywgQVJSQVlfU0laRShhcm0xMV9pcnFzKSk7CisJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOwogCXNjdV9zdG9wKCk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOwogfQogCiAvKgpAQCAtMjgzLDE1ICsyOTMsNyBAQAogCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9TQ1U2LCAzKTsKIAllbV9yb3V0ZV9pcnEoSVJRX0VCMTFNUF9QTVVfU0NVNywgMyk7CiAKLQkvKgotCSAqIFNlbmQgQ1AxNSBQTVUgaW50ZXJydXB0cyB0byB0aGUgb3duZXIgQ1BVLgotCSAqLwotCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9DUFUwLCAwKTsKLQllbV9yb3V0ZV9pcnEoSVJRX0VCMTFNUF9QTVVfQ1BVMSwgMSk7Ci0JZW1fcm91dGVfaXJxKElSUV9FQjExTVBfUE1VX0NQVTIsIDIpOwotCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9DUFUzLCAzKTsKLQotCXJldHVybiAwOworCXJldHVybiBpbml0X3BtdSgpOwogfQogCiBzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgb3BfbXBjb3JlX3NwZWMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwppbmRleCBmN2QyZWM1Li5hMjIzNTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTE5LDM5ICsxOSw0NyBAQAogLyogI2RlZmluZSBERUJVRyAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcG11Lmg+CiAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCiAjaW5jbHVkZSAib3BfbW9kZWxfYXJtMTFfY29yZS5oIgogCi1zdGF0aWMgaW50IGlycXNbXSA9IHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgotCTMsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9CQ01SSU5HCi0JSVJRX1BNVUlSUSwgLyogZm9yIEJDTVJJTkcsIEFSTSBQTVUgaW50ZXJydXB0IGlzIDQzICovCi0jZW5kaWYKLX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogc3RhdGljIHZvaWQgYXJtdjZfcG11X3N0b3Aodm9pZCkKIHsKIAlhcm0xMV9zdG9wX3BtdSgpOwotCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKKwlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOworCXBtdV9pcnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBhcm12Nl9wbXVfc3RhcnQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gYXJtMTFfc3RhcnRfcG11KCk7CisJcG11X2lycXMgPSByZXNlcnZlX3BtdSgpOworCWlmIChJU19FUlIocG11X2lycXMpKSB7CisJCXJldCA9IFBUUl9FUlIocG11X2lycXMpOworCQlnb3RvIG91dDsKKwl9CiAKKwlyZXQgPSBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJaWYgKHJldCA+PSAwKSB7CisJCXJldCA9IGFybTExX3N0YXJ0X3BtdSgpOworCX0gZWxzZSB7CisJCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwkJcG11X2lycXMgPSBOVUxMOworCX0KKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCmluZGV4IDIwODhhNmMuLjg2NDJkMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYwpAQCAtMTEsMTEgKzExLDE0IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKwogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKICNpbmNsdWRlICJvcF9tb2RlbF92Ny5oIgpAQCAtMjk1LDcgKzI5OCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQoraW50IGFybXY3X3JlcXVlc3RfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0ID0gMDsKQEAgLTMxOCw3ICszMjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXJtdjdfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQordm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICppcnFzLCBpbnQgbnIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTM2MiwxMiArMzY1LDcgQEAKIH0KICNlbmRpZgogCi0KLXN0YXRpYyBpbnQgaXJxc1tdID0gewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi0JSU5UXzM0WFhfQkVOQ0hfTVBVX0VNVUwsCi0jZW5kaWYKLX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogc3RhdGljIHZvaWQgYXJtdjdfcG1uY19zdG9wKHZvaWQpCiB7CkBAIC0zNzUsMTkgKzM3MywyOSBAQAogCWFybXY3X3BtbmNfZHVtcF9yZWdzKCk7CiAjZW5kaWYKIAlhcm12N19zdG9wX3BtbmMoKTsKLQlhcm12N19yZWxlYXNlX2ludGVycnVwdHMoaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CisJYXJtdjdfcmVsZWFzZV9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOworCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwlwbXVfaXJxcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgYXJtdjdfcG1uY19zdGFydCh2b2lkKQogewogCWludCByZXQ7CiAKKwlwbXVfaXJxcyA9IHJlc2VydmVfcG11KCk7CisJaWYgKElTX0VSUihwbXVfaXJxcykpCisJCXJldHVybiBQVFJfRVJSKHBtdV9pcnFzKTsKKwogI2lmZGVmIERFQlVHCiAJYXJtdjdfcG1uY19kdW1wX3JlZ3MoKTsKICNlbmRpZgotCXJldCA9IGFybXY3X3JlcXVlc3RfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKLQlpZiAocmV0ID49IDApCisJcmV0ID0gYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOworCWlmIChyZXQgPj0gMCkgewogCQlhcm12N19zdGFydF9wbW5jKCk7CisJfSBlbHNlIHsKKwkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQlwbXVfaXJxcyA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmggYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5oCmluZGV4IDBlMTliY2MuLjljYTMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmgKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuaApAQCAtOTcsNyArOTcsNyBAQAogaW50IGFybXY3X3NldHVwX3BtdSh2b2lkKTsKIGludCBhcm12N19zdGFydF9wbXUodm9pZCk7CiBpbnQgYXJtdjdfc3RvcF9wbXUodm9pZCk7Ci1pbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqLCBpbnQpOwotdm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoaW50ICosIGludCk7CitpbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGNvbnN0IGludCAqLCBpbnQpOwordm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICosIGludCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwppbmRleCA3MjRhYjljLi4xZDM0YTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwpAQCAtMTcsMTIgKzE3LDE0IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3BtdS5oPgogCiAjaW5jbHVkZSAib3BfY291bnRlci5oIgogI2luY2x1ZGUgIm9wX2FybV9tb2RlbC5oIgpAQCAtMzMsMTcgKzM1LDYgQEAKICNkZWZpbmUJUE1VX1JFU0VUCShDQ05UX1JFU0VUIHwgUE1OX1JFU0VUKQogI2RlZmluZSBQTVVfQ05UNjQJMHgwMDgJLyogTWFrZSBDQ05UIGNvdW50IGV2ZXJ5IDY0dGggY3ljbGUgKi8KIAotLyogVE9ETyBkbyBydW50aW1lIGRldGVjdGlvbiAqLwotI2lmZGVmIENPTkZJR19BUkNIX0lPUDMyWAotI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX0lPUDMyWF9DT1JFX1BNVQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzNYCi0jZGVmaW5lIFhTQ0FMRV9QTVVfSVJRICBJUlFfSU9QMzNYX0NPUkVfUE1VCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9QWEEKLSNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9QTVUKLSNlbmRpZgotCiAvKgogICogRGlmZmVyZW50IHR5cGVzIG9mIGV2ZW50cyB0aGF0IGNhbiBiZSBjb3VudGVkIGJ5IHRoZSBYU2NhbGUgUE1VCiAgKiBhcyB1c2VkIGJ5IE9wcm9maWxlIHVzZXJzcGFjZS4gSGVyZSBwcmltYXJpbHkgZm9yIGRvY3VtZW50YXRpb24KQEAgLTM2Nyw2ICszNTgsOCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqcG11X2lycXM7CisKIHN0YXRpYyB2b2lkIHhzY2FsZV9wbXVfc3RvcCh2b2lkKQogewogCXUzMiBwbW5jID0gcmVhZF9wbW5jKCk7CkBAIC0zNzQsMjAgKzM2NywzMCBAQAogCXBtbmMgJj0gflBNVV9FTkFCTEU7CiAJd3JpdGVfcG1uYyhwbW5jKTsKIAotCWZyZWVfaXJxKFhTQ0FMRV9QTVVfSVJRLCByZXN1bHRzKTsKKwlmcmVlX2lycShwbXVfaXJxcy0+aXJxc1swXSwgcmVzdWx0cyk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOworCXBtdV9pcnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCB4c2NhbGVfcG11X3N0YXJ0KHZvaWQpCiB7CiAJaW50IHJldDsKLQl1MzIgcG1uYyA9IHJlYWRfcG1uYygpOworCXUzMiBwbW5jOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoWFNDQUxFX1BNVV9JUlEsIHhzY2FsZV9wbXVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJIlhTY2FsZSBQTVUiLCAodm9pZCAqKXJlc3VsdHMpOworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkKKwkJcmV0dXJuIFBUUl9FUlIocG11X2lycXMpOworCisJcG1uYyA9IHJlYWRfcG1uYygpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocG11X2lycXMtPmlycXNbMF0sIHhzY2FsZV9wbXVfaW50ZXJydXB0LAorCQkJICBJUlFGX0RJU0FCTEVELCAiWFNjYWxlIFBNVSIsICh2b2lkICopcmVzdWx0cyk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiB1bmFibGUgdG8gcmVxdWVzdCBJUlElZCBmb3IgWFNjYWxlIFBNVVxuIiwKLQkJCVhTQ0FMRV9QTVVfSVJRKTsKKwkJICAgICAgIHBtdV9pcnFzLT5pcnFzWzBdKTsKKwkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQlwbXVfaXJxcyA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9pby5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvaW8uYwppbmRleCBlZDBiYmVjLi5lMTViYzE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC9pby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMKQEAgLTM0LDcgKzM0LDggQEAKIAkJcmV0dmFsID0gKHZvaWQgKikgSU9QM1hYX1BNTVJfUEhZU19UT19WSVJUKGNvb2tpZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IF9fYXJtX2lvcmVtYXAoY29va2llLCBzaXplLCBtdHlwZSk7CisJCXJldHZhbCA9IF9fYXJtX2lvcmVtYXBfY2FsbGVyKGNvb2tpZSwgc2l6ZSwgbXR5cGUsCisJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQppbmRleCA5OTZjYmFjLi42Y2VlMzhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQpAQCAtMTMsMyArMTMsNyBAQAogb2JqLSQoQ09ORklHX01YQ19VTFBJKSArPSB1bHBpLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19BVURNVVhfVjEpICs9IGF1ZG11eC12MS5vCiBvYmotJChDT05GSUdfQVJDSF9NWENfQVVETVVYX1YyKSArPSBhdWRtdXgtdjIubworaWZkZWYgQ09ORklHX1NORF9JTVhfU09DCitvYmoteSArPSBzc2ktZmlxLm8KK29iai15ICs9IHNzaS1maXEta3N5bS5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxNWIyYjE0Li41YTZhZTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBVQVJUX1BBRERSCU1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUgogI2RlZmluZSBVQVJUX1ZBRERSCU1YQzkxMjMxX0FJUFMxX0lPX0FERFJFU1MoTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSKQogI2VuZGlmCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQlsZHJlcQlccngsID1VQVJUX1BBRERSCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLXVzYmhvc3QuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLXVzYmhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQwYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEtdXNiaG9zdC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKglDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIEZ1enpleSA8bWZ1enpleUBnbWFpbC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWDIxX1VTQkgKKyNkZWZpbmUgX19BU01fQVJDSF9NWDIxX1VTQkgKKworZW51bSBteDIxX3VzYmhfeGN2ciB7CisJLyogVmFsdWVzIGJlbG93IGFzIHVzZWQgYnkgaGFyZHdhcmUgKEhXTU9ERSByZWdpc3RlcikgKi8KKwlNWDIxX1VTQlhDVlJfVFhESUZfUlhESUYgPSAwLAorCU1YMjFfVVNCWENWUl9UWERJRl9SWFNFID0gMSwKKwlNWDIxX1VTQlhDVlJfVFhTRV9SWERJRiA9IDIsCisJTVgyMV9VU0JYQ1ZSX1RYU0VfUlhTRSA9IDMsCit9OworCitzdHJ1Y3QgbXgyMV91c2JoX3BsYXRmb3JtX2RhdGEgeworCWVudW0gbXgyMV91c2JoX3hjdnIgaG9zdF94Y3ZyOyAvKiB0cmFuY2VpdmVyIG1vZGUgaG9zdCAxLDIgcG9ydHMgKi8KKwllbnVtIG14MjFfdXNiaF94Y3ZyIG90Z194Y3ZyOyAvKiB0cmFuY2VpdmVyIG1vZGUgb3RnIChhcyBob3N0KSBwb3J0ICovCisJdTE2IAllbmFibGVfaG9zdDE6MSwKKwkJZW5hYmxlX2hvc3QyOjEsCisJCWVuYWJsZV9vdGdfaG9zdDoxLCAvKiBlbmFibGUgIk9URyIgcG9ydCAoYXMgaG9zdCkgKi8KKwkJaG9zdDFfeGN2ZXJsZXNzOjEsIC8qIHRyYWNlaXZlcmxlc3MgaG9zdDEgcG9ydCAqLworCQlob3N0MV90eGVub2U6MSwgLyogb3V0cHV0IGVuYWJsZSBob3N0MSB0cmFuc21pdCBlbmFibGUgKi8KKwkJb3RnX2V4dF94Y3ZyOjEsIC8qIGV4dGVybmFsIHRyYW5jZWl2ZXIgZm9yIE9URyBwb3J0ICovCisJCXVudXNlZDoxMDsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YMjFfVVNCSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggNjJkOTc2Mi4uNDQyNDNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yMSw2ICsyMSw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fCiAKIC8qIHZtYWxsb2MgZW5kaW5nIGFkZHJlc3MgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhGNDAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGY0MDAwMDAwVUwKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEta3N5bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmFkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYwpAQCAtMCwwICsxLDIwIEBACisvKgorICogRXhwb3J0ZWQga3N5bXMgZm9yIHRoZSBTU0kgRklRIGhhbmRsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3NpLmg+CisKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfdHhfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfcnhfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfc3RhcnQpOworRVhQT1JUX1NZTUJPTChpbXhfc3NpX2ZpcV9lbmQpOworRVhQT1JUX1NZTUJPTChpbXhfc3NpX2ZpcV9iYXNlKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGNlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogcjggID0gYml0IDAtMTU6IHR4IG9mZnNldCwgYml0IDE2LTMxOiB0eCBidWZmZXIgc2l6ZQorICogcjkgID0gYml0IDAtMTU6IHJ4IG9mZnNldCwgYml0IDE2LTMxOiByeCBidWZmZXIgc2l6ZQorICovCisKKyNkZWZpbmUgU1NJX1NUWDAJMHgwMAorI2RlZmluZSBTU0lfU1JYMAkweDA4CisjZGVmaW5lIFNTSV9TSVNSCTB4MTQKKyNkZWZpbmUgU1NJX1NJRVIJMHgxOAorI2RlZmluZSBTU0lfU0FDTlQJMHgzOAorCisjZGVmaW5lIFNTSV9TQUNOVF9BQzk3RU4JKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0lFUl9URkUwX0VOCSgxIDw8IDApCisjZGVmaW5lIFNTSV9TSVNSX1RGRTAJCSgxIDw8IDApCisjZGVmaW5lIFNTSV9TSVNSX1JGRjAJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSUVSX1JGRjBfRU4JKDEgPDwgMikKKworCQkudGV4dAorCQkuZ2xvYmFsCWlteF9zc2lfZmlxX3N0YXJ0CisJCS5nbG9iYWwJaW14X3NzaV9maXFfZW5kCisJCS5nbG9iYWwgaW14X3NzaV9maXFfYmFzZQorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX3J4X2J1ZmZlcgorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX3R4X2J1ZmZlcgorCitpbXhfc3NpX2ZpcV9zdGFydDoKKwkJbGRyIHIxMiwgaW14X3NzaV9maXFfYmFzZQorCisJCS8qIFRYICovCisJCWxkciByMTEsIGlteF9zc2lfZmlxX3R4X2J1ZmZlcgorCisJCS8qIHNoYWxsIHdlIHNlbmQ/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lFUl0KKwkJdHN0IHIxMywgI1NTSV9TSUVSX1RGRTBfRU4KKwkJYmVxIDFmCisKKwkJLyogVFggRklGTyBlbXB0eT8gKi8KKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TSVNSXQorCQl0c3QgcjEzLCAjU1NJX1NJU1JfVEZFMAorCQliZXEgMWYKKworCQltb3YgcjEwLCAjMHgxMDAwMAorCQlzdWIgcjEwLCAjMQorCQlhbmQgcjEwLCByMTAsIHI4CS8qIHIxMDogY3VycmVudCBidWZmZXIgb2Zmc2V0ICovCisKKwkJYWRkIHIxMSwgcjExLCByMTAKKworCQlsZHJoIHIxMywgW3IxMV0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlsZHJoIHIxMywgW3IxMSwgIzJdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJbGRyaCByMTMsIFtyMTEsICM0XQorCQlzdHJoIHIxMywgW3IxMiwgI1NTSV9TVFgwXQorCisJCWxkcmggcjEzLCBbcjExLCAjNl0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlhZGQgcjEwLCAjOAorCQlsc3IgcjEzLCByOCwgIzE2CS8qIHIxMzogYnVmZmVyIHNpemUgKi8KKwkJY21wIHIxMCwgcjEzCisJCWxzbGd0IHI4LCByMTMsICMxNgorCQlhZGRsZSByOCwgIzgKKzE6CisJCS8qIFJYICovCisKKwkJLyogc2hhbGwgd2UgcmVjZWl2ZT8gKi8KKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TSUVSXQorCQl0c3QgcjEzLCAjU1NJX1NJRVJfUkZGMF9FTgorCQliZXEgMWYKKworCQkvKiBSWCBGSUZPIGZ1bGw/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lTUl0KKwkJdHN0IHIxMywgI1NTSV9TSVNSX1JGRjAKKwkJYmVxIDFmCisKKwkJbGRyIHIxMSwgaW14X3NzaV9maXFfcnhfYnVmZmVyCisKKwkJbW92IHIxMCwgIzB4MTAwMDAKKwkJc3ViIHIxMCwgIzEKKwkJYW5kIHIxMCwgcjEwLCByOQkvKiByMTA6IGN1cnJlbnQgYnVmZmVyIG9mZnNldCAqLworCisJCWFkZCByMTEsIHIxMSwgcjEwCisKKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TQUNOVF0KKwkJdHN0IHIxMywgI1NTSV9TQUNOVF9BQzk3RU4KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExXQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICMyXQorCisJCS8qIGR1bW15IHJlYWQgdG8gc2tpcCBzbG90IDEyICovCisJCWxkcm5lIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICM0XQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICM2XQorCisJCS8qIGR1bW15IHJlYWQgdG8gc2tpcCBzbG90IDEyICovCisJCWxkcm5lIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCisJCWFkZCByMTAsICM4CisJCWxzciByMTMsIHI5LCAjMTYJLyogcjEzOiBidWZmZXIgc2l6ZSAqLworCQljbXAgcjEwLCByMTMKKwkJbHNsZ3QgcjksIHIxMywgIzE2CisJCWFkZGxlIHI5LCAjOAorCisxOgorCQlAIHJldHVybiBmcm9tIEZJUQorCQlzdWJzCXBjLCBsciwgIzQKK2lteF9zc2lfZmlxX2Jhc2U6CisJCS53b3JkIDB4MAoraW14X3NzaV9maXFfcnhfYnVmZmVyOgorCQkud29yZCAweDAKK2lteF9zc2lfZmlxX3R4X2J1ZmZlcjoKKwkJLndvcmQgMHgwCitpbXhfc3NpX2ZpcV9lbmQ6CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvaTJjLmggYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2kyYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX1BMQVRfSTJDX0gKKyNkZWZpbmUgX19QTEFUX0kyQ19ICisKK2VudW0gaTJjX2ZyZXFfbW9kZSB7CisJSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCwJCS8qIHVwIHRvIDEwMCBLYi9zICovCisJSTJDX0ZSRVFfTU9ERV9GQVNULAkJLyogdXAgdG8gNDAwIEtiL3MgKi8KKwlJMkNfRlJFUV9NT0RFX0ZBU1RfUExVUywJLyogdXAgdG8gMSBNYi9zICovCisJSTJDX0ZSRVFfTU9ERV9ISUdIX1NQRUVECS8qIHVwIHRvIDMuNCBNYi9zICovCit9OworCisvKioKKyAqIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgLSBjbGllbnQgc3BlY2lmaWMgY29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKiBAY2xrX2ZyZXE6CWNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIG9wZXJhdGlvbiBtb2RlCisgKiBAc2xzdToJU2xhdmUgZGF0YSBzZXR1cCB0aW1lIGluIG5zLgorICoJCVRoZSBuZWVkZWQgc2V0dXAgdGltZSBmb3IgdGhyZWUgbW9kZXMgb2Ygb3BlcmF0aW9uCisgKgkJYXJlIDI1MG5zLCAxMDBucyBhbmQgMTBucyByZXNwZWN0aXZlbHkgdGh1cyBsZWFkaW5nCisgKgkJdG8gdGhlIHZhbHVlcyBvZiAxNCwgNiwgMiBmb3IgYSA0OCBNSHogaTJjIGNsaworICogQHRmdDoJVHggRklGTyBUaHJlc2hvbGQgaW4gYnl0ZXMKKyAqIEByZnQ6CVJ4IEZJRk8gVGhyZXNob2xkIGluIGJ5dGVzCisgKiBAc206CQlzcGVlZCBtb2RlCisgKi8KK3N0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgeworCXVuc2lnbmVkIGxvbmcJY2xrX2ZyZXE7CisJdW5zaWduZWQgc2hvcnQJc2xzdTsKKwl1bnNpZ25lZCBjaGFyIAl0ZnQ7CisJdW5zaWduZWQgY2hhciAJcmZ0OworCWVudW0gaTJjX2ZyZXFfbW9kZQlzbTsKK307CisKKyNlbmRpZgkvKiBfX1BMQVRfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggZTJlYTA0YS4uNmRhNzk2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTcsMjcgKzcsMzcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJPTUFQIFN5c3RlbSBUeXBlIgotCWRlZmF1bHQgQVJDSF9PTUFQMQorCWRlZmF1bHQgQVJDSF9PTUFQMlBMVVMKIAogY29uZmlnIEFSQ0hfT01BUDEKIAlib29sICJUSSBPTUFQMSIKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCWhlbHAKKwkgICJTeXN0ZW1zIGJhc2VkIG9uIG9tYXA3eHgsIG9tYXAxNXh4IG9yIG9tYXAxNnh4IgorCitjb25maWcgQVJDSF9PTUFQMlBMVVMKKwlib29sICJUSSBPTUFQMi8zLzQiCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwloZWxwCisJICAiU3lzdGVtcyBiYXNlZCBvbiBvbWFwMjR4eCwgb21hcDM0eHggb3Igb21hcDQ0eHgiCiAKIGNvbmZpZyBBUkNIX09NQVAyCiAJYm9vbCAiVEkgT01BUDIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwogCXNlbGVjdCBDUFVfVjYKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBjb25maWcgQVJDSF9PTUFQMwogCWJvb2wgIlRJIE9NQVAzIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKIAlzZWxlY3QgQ1BVX1Y3Ci0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKKwlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAogY29uZmlnIEFSQ0hfT01BUDQKIAlib29sICJUSSBPTUFQNCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKIAogZW5kY2hvaWNlCiAKQEAgLTExNiw3ICsxMjYsNyBAQAogCiBjb25maWcgT01BUF8zMktfVElNRVIKIAlib29sICJVc2UgMzJLSHogdGltZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWCB8fCBBUkNIX09NQVA0CisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgT01BUCAzMktIeiB0aW1lci4KIAkgIFRoaXMgdGltZXIgc2F2ZXMgcG93ZXIgY29tcGFyZWQgdG8gdGhlIE9NQVBfTVBVX1RJTUVSLCBhbmQgaGFzCkBAIC0xMjYsNiArMTM2LDIzIEBACiAKIGVuZGNob2ljZQogCitjb25maWcgT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUKKwlib29sICJPTUFQMyBIUy9FTVUgc2F2ZSBhbmQgcmVzdG9yZSBmb3IgTDIgQVVYIGNvbnRyb2wgcmVnaXN0ZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIFBNCisJZGVmYXVsdCBuCisJaGVscAorCSAgV2l0aG91dCB0aGlzIG9wdGlvbiwgTDIgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgYXJlCisJICBsb3N0IGR1cmluZyBvZmYtbW9kZSBlbnRyeSBvbiBIUy9FTVUgZGV2aWNlcy4gVGhpcyBmZWF0dXJlCisJICByZXF1aXJlcyBzdXBwb3J0IGZyb20gUFBBIC8gYm9vdC1sb2FkZXIgaW4gSFMvRU1VIGRldmljZXMsIHdoaWNoCisJICBjdXJyZW50bHkgZG9lcyBub3QgZXhpc3QgYnkgZGVmYXVsdC4KKworY29uZmlnIE9NQVAzX0wyX0FVWF9TRUNVUkVfU0VSVklDRV9TRVRfSUQKKwlpbnQgIlNlcnZpY2UgSUQgZm9yIHRoZSBzdXBwb3J0IHJvdXRpbmUgdG8gc2V0IEwyIEFVWCBjb250cm9sIgorCWRlcGVuZHMgb24gT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUKKwlkZWZhdWx0IDQzCisJaGVscAorCSAgUFBBIHJvdXRpbmUgc2VydmljZSBJRCBmb3Igc2V0dGluZyBMMiBhdXhpbGlhcnkgY29udHJvbCByZWdpc3Rlci4KKwogY29uZmlnIE9NQVBfMzJLX1RJTUVSX0haCiAJaW50ICJLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IGZvciAzMktIeiB0aW1lciIKIAlyYW5nZSAzMiAxMDI0CkBAIC0xMzcsMjkgKzE2NCwxMCBAQAogCiBjb25maWcgT01BUF9ETV9USU1FUgogCWJvb2wgIlVzZSBkdWFsLW1vZGUgdGltZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWCB8fCBBUkNIX09NQVA0CisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTCiAJaGVscAogCSBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIE9NQVAgRHVhbC1Nb2RlIHRpbWVycy4KIAotY2hvaWNlCi0JcHJvbXB0ICJMb3ctbGV2ZWwgZGVidWcgY29uc29sZSBVQVJUIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0JZGVmYXVsdCBPTUFQX0xMX0RFQlVHX05PTkUKLQotY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDEKLQlib29sICJVQVJUMSIKLQotY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDIKLQlib29sICJVQVJUMiIKLQotY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDMKLQlib29sICJVQVJUMyIKLQotY29uZmlnIE9NQVBfTExfREVCVUdfTk9ORQotCWJvb2wgIk5vbmUiCi0KLWVuZGNob2ljZQotCiBjb25maWcgT01BUF9TRVJJQUxfV0FLRQogCWJvb2wgIkVuYWJsZSB3YWtlLXVwIGV2ZW50cyBmb3Igc2VyaWFsIHBvcnRzIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBPTUFQX01VWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCA0YmVjYmRkLi41MjYxYTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMTczLDcgKzE3Myw3IEBACiAgKiBPTUFQIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBvbWFwMSBhbmQgb21hcDIKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXVuc2lnbmVkIGludCBfX2luaXRkYXRhIG1wdXJhdGU7CitpbnQgX19pbml0ZGF0YSBtcHVyYXRlOwogCiAvKgogICogQnkgZGVmYXVsdCB3ZSB1c2UgdGhlIHJhdGUgc2V0IGJ5IHRoZSBib290bG9hZGVyLgpAQCAtMTk5LDYgKzE5OSwxNyBAQAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZTsKIH0KIAorLyoKKyAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHBhcmVudCBjbG9jaywKKyAqIGRpdmlkZWQgYnkgc29tZSBmYWN0b3IKKyAqLwordW5zaWduZWQgbG9uZyBvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlXQVJOX09OKCFjbGstPmZpeGVkX2Rpdik7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPmZpeGVkX2RpdjsKK30KKwogdm9pZCBjbGtfcmVwYXJlbnQoc3RydWN0IGNsayAqY2hpbGQsIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKIAlsaXN0X2RlbF9pbml0KCZjaGlsZC0+c2libGluZyk7CkBAIC0zMDIsNiArMzEzLDMzIEBACiAJfQogfQogCisvKioKKyAqIG9tYXBfY2xrX2dldF9ieV9uYW1lIC0gbG9jYXRlIE9NQVAgc3RydWN0IGNsayBieSBpdHMgbmFtZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHN0cnVjdCBjbGsgdG8gbG9jYXRlCisgKgorICogTG9jYXRlIGFuIE9NQVAgc3RydWN0IGNsayBieSBpdHMgbmFtZS4gIEFzc3VtZXMgdGhhdCBzdHJ1Y3QgY2xrCisgKiBuYW1lcyBhcmUgdW5pcXVlLiAgUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlCisgKiBzdHJ1Y3QgY2xrIGlmIGZvdW5kLgorICovCitzdHJ1Y3QgY2xrICpvbWFwX2Nsa19nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGNsayAqcmV0ID0gTlVMTDsKKworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAoYy0+bmFtZSwgbmFtZSkpIHsKKwkJCXJldCA9IGM7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBMb3cgbGV2ZWwgaGVscGVycwogICovCkBAIC0zMTksNiArMzU3LDE2IEBACiAJLmRpc2FibGUJPSBjbGtsbF9kaXNhYmxlX251bGwsCiB9OwogCisvKgorICogRHVtbXkgY2xvY2sKKyAqCisgKiBVc2VkIGZvciBjbG9jayBhbGlhc2VzIHRoYXQgYXJlIG5lZWRlZCBvbiBzb21lIE9NQVBzLCBidXQgbm90IG90aGVycworICovCitzdHJ1Y3QgY2xrIGR1bW15X2NrID0geworCS5uYW1lCT0gImR1bW15IiwKKwkub3BzCT0gJmNsa29wc19udWxsLAorfTsKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogdm9pZCBjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQogewpAQCAtMzk3LDggKzQ0NSw2IEBACiAJY2hhciAqcCA9IHM7CiAKIAlwICs9IHNwcmludGYocCwgIiVzIiwgYy0+bmFtZSk7Ci0JaWYgKGMtPmlkICE9IDApCi0JCXNwcmludGYocCwgIjolZCIsIGMtPmlkKTsKIAlkID0gZGVidWdmc19jcmVhdGVfZGlyKHMsIHBhID8gcGEtPmRlbnQgOiBjbGtfZGVidWdmc19yb290KTsKIAlpZiAoIWQpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCmluZGV4IGRkZGMwMjcuLjA4OGMxYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvZnBnYS5oPgorI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAKQEAgLTEyNiw3ICsxMjcsNyBAQAogI2RlZmluZSBvbWFwMjQzMF8zMmtfcmVhZAlOVUxMCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIHN0YXRpYyBjeWNsZV90IG9tYXAzNHh4XzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDM0MzBfMzJLU1lOQ1RfQkFTRSArIDB4MTApOwpAQCAtMjQ1LDYgKzI0Niw3IEBACiAJb21hcDJfc2V0X2dsb2JhbHNfc2RyYyhvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20ob21hcDJfZ2xvYmFscyk7CisJb21hcDJfc2V0X2dsb2JhbHNfdWFydChvbWFwMl9nbG9iYWxzKTsKIH0KIAogI2VuZGlmCkBAIC0yNTQsMTEgKzI1NiwxNCBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0MnhfZ2xvYmFscyA9IHsKIAkuY2xhc3MJPSBPTUFQMjQyWF9DTEFTUywKIAkudGFwCT0gT01BUDJfTDRfSU9fQUREUkVTUygweDQ4MDE0MDAwKSwKLQkuc2RyYwk9IE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDI0MjBfU0RSQ19CQVNFKSwKLQkuc21zCT0gT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSksCi0JLmN0cmwJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDIwX0NUUkxfQkFTRSksCi0JLnBybQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MjBfUFJNX0JBU0UpLAotCS5jbQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MjBfQ01fQkFTRSksCisJLnNkcmMJPSBPTUFQMjQyMF9TRFJDX0JBU0UsCisJLnNtcwk9IE9NQVAyNDIwX1NNU19CQVNFLAorCS5jdHJsCT0gT01BUDI0MjBfQ1RSTF9CQVNFLAorCS5wcm0JPSBPTUFQMjQyMF9QUk1fQkFTRSwKKwkuY20JPSBPTUFQMjQyMF9DTV9CQVNFLAorCS51YXJ0MV9waHlzCT0gT01BUDJfVUFSVDFfQkFTRSwKKwkudWFydDJfcGh5cwk9IE9NQVAyX1VBUlQyX0JBU0UsCisJLnVhcnQzX3BoeXMJPSBPTUFQMl9VQVJUM19CQVNFLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQyeCh2b2lkKQpAQCAtMjcyLDExICsyNzcsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXAyNDN4X2dsb2JhbHMgPSB7CiAJLmNsYXNzCT0gT01BUDI0M1hfQ0xBU1MsCiAJLnRhcAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoMHg0OTAwYTAwMCksCi0JLnNkcmMJPSBPTUFQMl9MM19JT19BRERSRVNTKE9NQVAyNDNYX1NEUkNfQkFTRSksCi0JLnNtcwk9IE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UpLAotCS5jdHJsCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UpLAotCS5wcm0JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDMwX1BSTV9CQVNFKSwKLQkuY20JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDMwX0NNX0JBU0UpLAorCS5zZHJjCT0gT01BUDI0M1hfU0RSQ19CQVNFLAorCS5zbXMJPSBPTUFQMjQzWF9TTVNfQkFTRSwKKwkuY3RybAk9IE9NQVAyNDNYX0NUUkxfQkFTRSwKKwkucHJtCT0gT01BUDI0MzBfUFJNX0JBU0UsCisJLmNtCT0gT01BUDI0MzBfQ01fQkFTRSwKKwkudWFydDFfcGh5cwk9IE9NQVAyX1VBUlQxX0JBU0UsCisJLnVhcnQyX3BoeXMJPSBPTUFQMl9VQVJUMl9CQVNFLAorCS51YXJ0M19waHlzCT0gT01BUDJfVUFSVDNfQkFTRSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzI0M3godm9pZCkKQEAgLTI4NSwyMSArMjkzLDMxIEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAotc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDM0M3hfZ2xvYmFscyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXAzX2dsb2JhbHMgPSB7CiAJLmNsYXNzCT0gT01BUDM0M1hfQ0xBU1MsCiAJLnRhcAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoMHg0ODMwQTAwMCksCi0JLnNkcmMJPSBPTUFQMl9MM19JT19BRERSRVNTKE9NQVAzNDNYX1NEUkNfQkFTRSksCi0JLnNtcwk9IE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDM0M1hfU01TX0JBU0UpLAotCS5jdHJsCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzQzWF9DVFJMX0JBU0UpLAotCS5wcm0JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDMwX1BSTV9CQVNFKSwKLQkuY20JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDMwX0NNX0JBU0UpLAorCS5zZHJjCT0gT01BUDM0M1hfU0RSQ19CQVNFLAorCS5zbXMJPSBPTUFQMzQzWF9TTVNfQkFTRSwKKwkuY3RybAk9IE9NQVAzNDNYX0NUUkxfQkFTRSwKKwkucHJtCT0gT01BUDM0MzBfUFJNX0JBU0UsCisJLmNtCT0gT01BUDM0MzBfQ01fQkFTRSwKKwkudWFydDFfcGh5cwk9IE9NQVAzX1VBUlQxX0JBU0UsCisJLnVhcnQyX3BoeXMJPSBPTUFQM19VQVJUMl9CQVNFLAorCS51YXJ0M19waHlzCT0gT01BUDNfVUFSVDNfQkFTRSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzM0M3godm9pZCkKIHsKLQlfX29tYXAyX3NldF9nbG9iYWxzKCZvbWFwMzQzeF9nbG9iYWxzKTsKKwlfX29tYXAyX3NldF9nbG9iYWxzKCZvbWFwM19nbG9iYWxzKTsKK30KKwordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMzZ4eCh2b2lkKQoreworCW9tYXAzX2dsb2JhbHMudWFydDRfcGh5cyA9IE9NQVAzX1VBUlQ0X0JBU0U7CisKKwlfX29tYXAyX3NldF9nbG9iYWxzKCZvbWFwM19nbG9iYWxzKTsKIH0KICNlbmRpZgogCkBAIC0zMDcsMTAgKzMyNSwxNCBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDRfZ2xvYmFscyA9IHsKIAkuY2xhc3MJPSBPTUFQNDQzWF9DTEFTUywKIAkudGFwCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzWF9TQ01fQkFTRSksCi0JLmN0cmwJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfUFJNX0JBU0UpLAotCS5jbQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfQ01fQkFTRSksCi0JLmNtMgk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfQ00yX0JBU0UpLAorCS5jdHJsCT0gT01BUDQ0M1hfQ1RSTF9CQVNFLAorCS5wcm0JPSBPTUFQNDQzMF9QUk1fQkFTRSwKKwkuY20JPSBPTUFQNDQzMF9DTV9CQVNFLAorCS5jbTIJPSBPTUFQNDQzMF9DTTJfQkFTRSwKKwkudWFydDFfcGh5cwk9IE9NQVA0X1VBUlQxX0JBU0UsCisJLnVhcnQyX3BoeXMJPSBPTUFQNF9VQVJUMl9CQVNFLAorCS51YXJ0M19waHlzCT0gT01BUDRfVUFSVDNfQkFTRSwKKwkudWFydDRfcGh5cwk9IE9NQVA0X1VBUlQ0X0JBU0UsCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc180NDN4KHZvaWQpCkBAIC0zMTgsNiArMzQwLDcgQEAKIAlvbWFwMl9zZXRfZ2xvYmFsc190YXAoJm9tYXA0X2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2woJm9tYXA0X2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20oJm9tYXA0X2dsb2JhbHMpOworCW9tYXAyX3NldF9nbG9iYWxzX3VhcnQoJm9tYXA0X2dsb2JhbHMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IDMwYjVkYjcuLjRhNGNkODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHBsYXQvbWVuZWxhdXMuaD4KICNpbmNsdWRlIDxwbGF0L21jYnNwLmg+CiAjaW5jbHVkZSA8cGxhdC9kc3BfY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwNDR4eC5oPgogCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9EU1ApIHx8IGRlZmluZWQoQ09ORklHX09NQVBfRFNQX01PRFVMRSkKIApAQCAtMTkyLDYgKzE5Myw0MSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWYgZGVmaW5lZChDT05GSUdfU05EX09NQVBfU09DX01DUERNKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1NORF9PTUFQX1NPQ19NQ1BETV9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWNwZG1fcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQkJPSAibWNwZG1fbWVtIiwKKwkJLnN0YXJ0CQk9IE9NQVA0NFhYX01DUERNX0JBU0UsCisJCS5lbmQJCT0gT01BUDQ0WFhfTUNQRE1fQkFTRSArIFNaXzRLLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJtY3BkbV9pcnEiLAorCQkuc3RhcnQJCT0gT01BUDQ0WFhfSVJRX01DUERNLAorCQkuZW5kCQk9IE9NQVA0NFhYX0lSUV9NQ1BETSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX21jcGRtX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcC1tY3BkbSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtY3BkbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG1jcGRtX3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3BkbSh2b2lkKQoreworCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfbWNwZG1fZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21jcGRtKHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKQogCkBAIC0yNDQsNyArMjgwLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fT01BUF9NT0RVTEUpCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAjZGVmaW5lCU9NQVBfUk5HX0JBU0UJCTB4NDgwQTAwMDAKICNlbHNlCiAjZGVmaW5lCU9NQVBfUk5HX0JBU0UJCTB4ZmZmZTUwMDAKQEAgLTM4NSw2ICs0MjEsNyBAQAogCW9tYXBfaW5pdF9kc3AoKTsKIAlvbWFwX2luaXRfa3AoKTsKIAlvbWFwX2luaXRfcm5nKCk7CisJb21hcF9pbml0X21jcGRtKCk7CiAJb21hcF9pbml0X3V3aXJlKCk7CiAJb21hcF9pbml0X3dkdCgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IDcyOGM2NDIuLjJhYjIyNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTE4NzAsOCArMTg3MCw3IEBACiAjZGVmaW5lIG9tYXAxX2RtYV9pcnFfaGFuZGxlcglOVUxMCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAKIHN0YXRpYyBpbnQgb21hcDJfZG1hX2hhbmRsZV9jaChpbnQgY2gpCiB7CkBAIC0yMTMzLDEzICsyMTMyLDEzIEBACiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CiAJCWludCBpcnE7CiAJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCWlycSA9IElOVF80NFhYX1NETUFfSVJRMDsKKwkJCWlycSA9IE9NQVA0NFhYX0lSUV9TRE1BXzA7CiAJCWVsc2UKIAkJCWlycSA9IElOVF8yNFhYX1NETUFfSVJRMDsKIAkJc2V0dXBfaXJxKGlycSwgJm9tYXAyNHh4X2RtYV9pcnEpOwogCX0KIAotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgewogCQkvKiBFbmFibGUgc21hcnRpZGxlIGlkbGVtb2RlcyBhbmQgYXV0b2lkbGUgKi8KIAkJdTMyIHYgPSBkbWFfcmVhZChPQ1BfU1lTQ09ORklHKTsKIAkJdiAmPSB+KERNQV9TWVNDT05GSUdfTUlETEVNT0RFX01BU0sgfApAQCAtMjE1MCw3ICsyMTQ5LDggQEAKIAkJCURNQV9TWVNDT05GSUdfQVVUT0lETEUpOwogCQlkbWFfd3JpdGUodiAsIE9DUF9TWVNDT05GSUcpOwogCQkvKiByZXNlcnZlIGRtYSBjaGFubmVscyAwIGFuZCAxIGluIGhpZ2ggc2VjdXJpdHkgZGV2aWNlcyAqLwotCQlpZiAob21hcF90eXBlKCkgIT0gT01BUDJfREVWSUNFX1RZUEVfR1ApIHsKKwkJaWYgKGNwdV9pc19vbWFwMzR4eCgpICYmCisJCQkob21hcF90eXBlKCkgIT0gT01BUDJfREVWSUNFX1RZUEVfR1ApKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgRE1BIGNoYW5uZWxzIDAgYW5kIDEgZm9yICIKIAkJCQkJIkhTIFJPTSBjb2RlXG4iKTsKIAkJCWRtYV9jaGFuWzBdLmRldl9pZCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCAwOGNjZjg5Li40ZDk5ZGZiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCkBAIC0xNTMsOCArMTUzLDcgQEAKIHN0cnVjdCBvbWFwX2RtX3RpbWVyIHsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKIAlpbnQgaXJxOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJc3RydWN0IGNsayAqaWNsaywgKmZjbGs7CiAjZW5kaWYKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CkBAIC0xNjMsMjAgKzE2Miw5IEBACiAJdW5zaWduZWQgcG9zdGVkOjE7CiB9OwogCitzdGF0aWMgaW50IGRtX3RpbWVyX2NvdW50OworCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKLQotI2RlZmluZSBvbWFwX2RtX2Nsa19lbmFibGUoeCkKLSNkZWZpbmUgb21hcF9kbV9jbGtfZGlzYWJsZSh4KQotI2RlZmluZSBvbWFwMl9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXAyX2RtX3NvdXJjZV9uYW1lcwkJTlVMTAotI2RlZmluZSBvbWFwMl9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCi0jZGVmaW5lIG9tYXAzX2RtX3RpbWVycwkJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fc291cmNlX25hbWVzCQlOVUxMCi0jZGVmaW5lIG9tYXAzX2RtX3NvdXJjZV9jbG9ja3MJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAotCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgb21hcDFfZG1fdGltZXJzW10gPSB7CiAJeyAucGh5c19iYXNlID0gMHhmZmZiMTQwMCwgLmlycSA9IElOVF8xNjEwX0dQVElNRVIxIH0sCiAJeyAucGh5c19iYXNlID0gMHhmZmZiMWMwMCwgLmlycSA9IElOVF8xNjEwX0dQVElNRVIyIH0sCkBAIC0xODgsMjAgKzE3NiwxNCBAQAogCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYmQ0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IGludCBkbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDFfZG1fdGltZXJzKTsKK3N0YXRpYyBjb25zdCBpbnQgb21hcDFfZG1fdGltZXJfY291bnQgPSBBUlJBWV9TSVpFKG9tYXAxX2RtX3RpbWVycyk7CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi0KLSNkZWZpbmUgb21hcF9kbV9jbGtfZW5hYmxlKHgpCQljbGtfZW5hYmxlKHgpCi0jZGVmaW5lIG9tYXBfZG1fY2xrX2Rpc2FibGUoeCkJCWNsa19kaXNhYmxlKHgpCisjZWxzZQogI2RlZmluZSBvbWFwMV9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXAzX2RtX3RpbWVycwkJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fc291cmNlX25hbWVzCQlOVUxMCi0jZGVmaW5lIG9tYXAzX2RtX3NvdXJjZV9jbG9ja3MJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAorI2RlZmluZSBvbWFwMV9kbV90aW1lcl9jb3VudAkJMAorI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxICovCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIG9tYXAyX2RtX3RpbWVyc1tdID0gewogCXsgLnBoeXNfYmFzZSA9IDB4NDgwMjgwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMSB9LAogCXsgLnBoeXNfYmFzZSA9IDB4NDgwMmEwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMiB9LApAQCAtMjI1LDIwICsyMDcsMTYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpvbWFwMl9kbV9zb3VyY2VfY2xvY2tzWzNdOwotc3RhdGljIGNvbnN0IGludCBkbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDJfZG1fdGltZXJzKTsKK3N0YXRpYyBjb25zdCBpbnQgb21hcDJfZG1fdGltZXJfY291bnQgPSBBUlJBWV9TSVpFKG9tYXAyX2RtX3RpbWVycyk7CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0KLSNkZWZpbmUgb21hcF9kbV9jbGtfZW5hYmxlKHgpCQljbGtfZW5hYmxlKHgpCi0jZGVmaW5lIG9tYXBfZG1fY2xrX2Rpc2FibGUoeCkJCWNsa19kaXNhYmxlKHgpCi0jZGVmaW5lIG9tYXAxX2RtX3RpbWVycwkJCU5VTEwKKyNlbHNlCiAjZGVmaW5lIG9tYXAyX2RtX3RpbWVycwkJCU5VTEwKKyNkZWZpbmUgb21hcDJfZG1fdGltZXJfY291bnQJCTAKICNkZWZpbmUgb21hcDJfZG1fc291cmNlX25hbWVzCQlOVUxMCiAjZGVmaW5lIG9tYXAyX2RtX3NvdXJjZV9jbG9ja3MJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDRfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAorI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAyICovCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIG9tYXAzX2RtX3RpbWVyc1tdID0gewogCXsgLnBoeXNfYmFzZSA9IDB4NDgzMTgwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMSB9LAogCXsgLnBoeXNfYmFzZSA9IDB4NDkwMzIwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMiB9LApAQCAtMjYxLDMzICsyMzksMjkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpvbWFwM19kbV9zb3VyY2VfY2xvY2tzWzJdOwotc3RhdGljIGNvbnN0IGludCBkbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDNfZG1fdGltZXJzKTsKK3N0YXRpYyBjb25zdCBpbnQgb21hcDNfZG1fdGltZXJfY291bnQgPSBBUlJBWV9TSVpFKG9tYXAzX2RtX3RpbWVycyk7CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0KLSNkZWZpbmUgb21hcF9kbV9jbGtfZW5hYmxlKHgpCQljbGtfZW5hYmxlKHgpCi0jZGVmaW5lIG9tYXBfZG1fY2xrX2Rpc2FibGUoeCkJCWNsa19kaXNhYmxlKHgpCi0jZGVmaW5lIG9tYXAxX2RtX3RpbWVycwkJCU5VTEwKLSNkZWZpbmUgb21hcDJfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwMl9kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDJfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAorI2Vsc2UKICNkZWZpbmUgb21hcDNfZG1fdGltZXJzCQkJTlVMTAorI2RlZmluZSBvbWFwM19kbV90aW1lcl9jb3VudAkJMAogI2RlZmluZSBvbWFwM19kbV9zb3VyY2VfbmFtZXMJCU5VTEwKICNkZWZpbmUgb21hcDNfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAorI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAzICovCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIG9tYXA0X2RtX3RpbWVyc1tdID0gewotCXsgLnBoeXNfYmFzZSA9IDB4NGEzMTgwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSMSB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzIwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSMiB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzQwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSMyB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzYwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSNCB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDAxMzgwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSNSB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2EwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSNiB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2EwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSNyB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2UwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSOCB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwM2UwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSOSB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwODYwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSMTAgfSwKLQl7IC5waHlzX2Jhc2UgPSAweDQ4MDg4MDAwLCAuaXJxID0gSU5UXzQ0WFhfR1BUSU1FUjExIH0sCi0JeyAucGh5c19iYXNlID0gMHg0YTMyMDAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVIxMiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NGEzMTgwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUMSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzIwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUMiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzQwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUMyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwMzYwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUNCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDAxMzgwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUNSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2EwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUNiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2EwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUNyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDAxM2UwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUOCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwM2UwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUOSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODYwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUMTAgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDg4MDAwLCAuaXJxID0gT01BUDQ0WFhfSVJRX0dQVDExIH0sCisJeyAucGh5c19iYXNlID0gMHg0YTMyMDAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQxMiB9LAogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpvbWFwNF9kbV9zb3VyY2VfbmFtZXNbXSBfX2luaXRkYXRhID0gewogCSJzeXNfY2siLApAQCAtMjk1LDEzICsyNjksMTQgQEAKIAlOVUxMCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgKm9tYXA0X2RtX3NvdXJjZV9jbG9ja3NbMl07Ci1zdGF0aWMgY29uc3QgaW50IGRtX3RpbWVyX2NvdW50ID0gQVJSQVlfU0laRShvbWFwNF9kbV90aW1lcnMpOworc3RhdGljIGNvbnN0IGludCBvbWFwNF9kbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDRfZG1fdGltZXJzKTsKIAogI2Vsc2UKLQotI2Vycm9yIE9NQVAgYXJjaGl0ZWN0dXJlIG5vdCBzdXBwb3J0ZWQhCi0KLSNlbmRpZgorI2RlZmluZSBvbWFwNF9kbV90aW1lcnMJCQlOVUxMCisjZGVmaW5lIG9tYXA0X2RtX3RpbWVyX2NvdW50CQkwCisjZGVmaW5lIG9tYXA0X2RtX3NvdXJjZV9uYW1lcwkJTlVMTAorI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDQgKi8KIAogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpkbV90aW1lcnM7CiBzdGF0aWMgY29uc3QgY2hhciAqKmRtX3NvdXJjZV9uYW1lczsKQEAgLTQ1MCw4ICs0MjUsMTIgQEAKIAlpZiAodGltZXItPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCW9tYXBfZG1fY2xrX2VuYWJsZSh0aW1lci0+ZmNsayk7Ci0Jb21hcF9kbV9jbGtfZW5hYmxlKHRpbWVyLT5pY2xrKTsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKKwkJY2xrX2VuYWJsZSh0aW1lci0+ZmNsayk7CisJCWNsa19lbmFibGUodGltZXItPmljbGspOworCX0KKyNlbmRpZgogCiAJdGltZXItPmVuYWJsZWQgPSAxOwogfQpAQCAtNDYyLDggKzQ0MSwxMiBAQAogCWlmICghdGltZXItPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCW9tYXBfZG1fY2xrX2Rpc2FibGUodGltZXItPmljbGspOwotCW9tYXBfZG1fY2xrX2Rpc2FibGUodGltZXItPmZjbGspOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUworCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgeworCQljbGtfZGlzYWJsZSh0aW1lci0+aWNsayk7CisJCWNsa19kaXNhYmxlKHRpbWVyLT5mY2xrKTsKKwl9CisjZW5kaWYKIAogCXRpbWVyLT5lbmFibGVkID0gMDsKIH0KQEAgLTUwNiw4ICs0ODksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2spOwogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNlbHNlCiAKIHN0cnVjdCBjbGsgKm9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNTUxLDggKzUzMyw3IEBACiAJaWYgKGwgJiBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKIAkJbCAmPSB+MHgxOwogCQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAkJLyogUmVhZGJhY2sgdG8gbWFrZSBzdXJlIHdyaXRlIGhhcyBjb21wbGV0ZWQgKi8KIAkJb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CiAJCSAvKgpAQCAtNzY0LDE3ICs3NDUsMjEgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQlkbV90aW1lcnMgPSBvbWFwMV9kbV90aW1lcnM7CisJCWRtX3RpbWVyX2NvdW50ID0gb21hcDFfZG1fdGltZXJfY291bnQ7CiAJCW1hcF9zaXplID0gU1pfMks7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlkbV90aW1lcnMgPSBvbWFwMl9kbV90aW1lcnM7CisJCWRtX3RpbWVyX2NvdW50ID0gb21hcDJfZG1fdGltZXJfY291bnQ7CiAJCWRtX3NvdXJjZV9uYW1lcyA9IG9tYXAyX2RtX3NvdXJjZV9uYW1lczsKIAkJZG1fc291cmNlX2Nsb2NrcyA9IG9tYXAyX2RtX3NvdXJjZV9jbG9ja3M7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlkbV90aW1lcnMgPSBvbWFwM19kbV90aW1lcnM7CisJCWRtX3RpbWVyX2NvdW50ID0gb21hcDNfZG1fdGltZXJfY291bnQ7CiAJCWRtX3NvdXJjZV9uYW1lcyA9IG9tYXAzX2RtX3NvdXJjZV9uYW1lczsKIAkJZG1fc291cmNlX2Nsb2NrcyA9IG9tYXAzX2RtX3NvdXJjZV9jbG9ja3M7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlkbV90aW1lcnMgPSBvbWFwNF9kbV90aW1lcnM7CisJCWRtX3RpbWVyX2NvdW50ID0gb21hcDRfZG1fdGltZXJfY291bnQ7CiAJCWRtX3NvdXJjZV9uYW1lcyA9IG9tYXA0X2RtX3NvdXJjZV9uYW1lczsKIAkJZG1fc291cmNlX2Nsb2NrcyA9IG9tYXA0X2RtX3NvdXJjZV9jbG9ja3M7CiAJfQpAQCAtNzkzLDggKzc3OCw3IEBACiAJCXRpbWVyLT5pb19iYXNlID0gaW9yZW1hcCh0aW1lci0+cGh5c19iYXNlLCBtYXBfc2l6ZSk7CiAJCUJVR19PTighdGltZXItPmlvX2Jhc2UpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotCQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJCWNoYXIgY2xrX25hbWVbMTZdOwogCQkJc3ByaW50ZihjbGtfbmFtZSwgImdwdCVkX2ljayIsIGkgKyAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IGQyNDIyYzc2Li4zMzcxOTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE3NywxMyArMTc3LDExIEBACiAJdTE2IGlycTsKIAl1MTYgdmlydHVhbF9pcnFfc3RhcnQ7CiAJaW50IG1ldGhvZDsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCAgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKQogCXUzMiBzdXNwZW5kX3dha2V1cDsKIAl1MzIgc2F2ZWRfd2FrZXVwOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAl1MzIgbm9uX3dha2V1cF9ncGlvczsKIAl1MzIgZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zOwogCkBAIC0yMDQsNiArMjAyLDcgQEAKICNkZWZpbmUgTUVUSE9EX0dQSU9fMTYxMAkyCiAjZGVmaW5lIE1FVEhPRF9HUElPXzdYWAkJMwogI2RlZmluZSBNRVRIT0RfR1BJT18yNFhYCTUKKyNkZWZpbmUgTUVUSE9EX0dQSU9fNDRYWAk2CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE2MTBbNV0gPSB7CkBAIC0yNDgsNyArMjQ3LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzI0MnhbNF0gPSB7CiAJeyBPTUFQMjQyWF9HUElPMV9CQVNFLCBOVUxMLCBJTlRfMjRYWF9HUElPX0JBTksxLCBJSF9HUElPX0JBU0UsCkBAIC0yNzYsNyArMjc1LDcgQEAKIAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMzR4eFs2XSA9IHsKIAl7IE9NQVAzNFhYX0dQSU8xX0JBU0UsIE5VTEwsIElOVF8zNFhYX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwKIAkJTUVUSE9EX0dQSU9fMjRYWCB9LApAQCAtMzEzLDE4ICszMTIsMTggQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfNDR4eFs2XSA9IHsKLQl7IE9NQVA0NFhYX0dQSU8xX0JBU0UsIE5VTEwsIElOVF80NFhYX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDQ0WFhfR1BJTzJfQkFTRSwgTlVMTCwgSU5UXzQ0WFhfR1BJT19CQU5LMiwgSUhfR1BJT19CQVNFICsgMzIsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU8zX0JBU0UsIE5VTEwsIElOVF80NFhYX0dQSU9fQkFOSzMsIElIX0dQSU9fQkFTRSArIDY0LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQNDRYWF9HUElPNF9CQVNFLCBOVUxMLCBJTlRfNDRYWF9HUElPX0JBTks0LCBJSF9HUElPX0JBU0UgKyA5NiwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDQ0WFhfR1BJTzVfQkFTRSwgTlVMTCwgSU5UXzQ0WFhfR1BJT19CQU5LNSwgSUhfR1BJT19CQVNFICsgMTI4LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQNDRYWF9HUElPNl9CQVNFLCBOVUxMLCBJTlRfNDRYWF9HUElPX0JBTks2LCBJSF9HUElPX0JBU0UgKyAxNjAsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKKwl7IE9NQVA0NFhYX0dQSU8xX0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPMSwgSUhfR1BJT19CQVNFLAorCQlNRVRIT0RfR1BJT180NFhYIH0sCisJeyBPTUFQNDRYWF9HUElPMl9CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzIsIElIX0dQSU9fQkFTRSArIDMyLAorCQlNRVRIT0RfR1BJT180NFhYIH0sCisJeyBPTUFQNDRYWF9HUElPM19CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzMsIElIX0dQSU9fQkFTRSArIDY0LAorCQlNRVRIT0RfR1BJT180NFhYIH0sCisJeyBPTUFQNDRYWF9HUElPNF9CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzQsIElIX0dQSU9fQkFTRSArIDk2LAorCQlNRVRIT0RfR1BJT180NFhYIH0sCisJeyBPTUFQNDRYWF9HUElPNV9CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzUsIElIX0dQSU9fQkFTRSArIDEyOCwKKwkJTUVUSE9EX0dQSU9fNDRYWCB9LAorCXsgT01BUDQ0WFhfR1BJTzZfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU82LCBJSF9HUElPX0JBU0UgKyAxNjAsCisJCU1FVEhPRF9HUElPXzQ0WFggfSwKIH07CiAKICNlbmRpZgpAQCAtNDI2LDEzICs0MjUsMTMgQEAKIAkJcmVnICs9IE9NQVA3WFhfR1BJT19ESVJfQ09OVFJPTDsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19PRTsKIAkJYnJlYWs7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXJlZyArPSBPTUFQNF9HUElPX09FOwogCQlicmVhazsKICNlbmRpZgpAQCAtNDkzLDcgKzQ5Miw3IEBACiAJCQlsICY9IH4oMSA8PCBncGlvKTsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlpZiAoZW5hYmxlKQogCQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fU0VUREFUQU9VVDsKQEAgLTUwMyw3ICs1MDIsNyBAQAogCQlicmVhazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJaWYgKGVuYWJsZSkKIAkJCXJlZyArPSBPTUFQNF9HUElPX1NFVERBVEFPVVQ7CiAJCWVsc2UKQEAgLTU0NiwxMyArNTQ1LDEzIEBACiAJCXJlZyArPSBPTUFQN1hYX0dQSU9fREFUQV9JTlBVVDsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19EQVRBSU47CiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlyZWcgKz0gT01BUDRfR1BJT19EQVRBSU47CiAJCWJyZWFrOwogI2VuZGlmCkBAIC01OTIsOSArNTkxLDkgQEAKIAkJcmVnICs9IE9NQVA3WFhfR1BJT19EQVRBX09VVFBVVDsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fREFUQU9VVDsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTYyNSwxMSArNjI0LDEyIEBACiAKIAliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKIAlyZWcgPSBiYW5rLT5iYXNlOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0VOQUJMRTsKLSNlbHNlCi0JcmVnICs9IE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfRU47Ci0jZW5kaWYKKworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0VOQUJMRTsKKwllbHNlCisJCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOOworCiAJaWYgKCEoYmFuay0+bW9kX3VzYWdlICYgbCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJHUElPICVkIG5vdCByZXF1ZXN0ZWRcbiIsIGdwaW8pOwogCQlyZXR1cm47CkBAIC02NzUsMTcgKzY3NSwxNyBAQAogCX0KIAogCWVuY190aW1lICY9IDB4ZmY7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQlyZWcgKz0gT01BUDRfR1BJT19ERUJPVU5DSU5HVElNRTsKLSNlbHNlCi0JcmVnICs9IE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfVkFMOwotI2VuZGlmCisKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCXJlZyArPSBPTUFQNF9HUElPX0RFQk9VTkNJTkdUSU1FOworCWVsc2UKKwkJcmVnICs9IE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfVkFMOworCiAJX19yYXdfd3JpdGVsKGVuY190aW1lLCByZWcpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9ncGlvX2RlYm91bmNlX3RpbWUpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0XzI0eHhfZ3Bpb190cmlnZ2VyaW5nKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLAogCQkJCQkJaW50IHRyaWdnZXIpCiB7CkBAIC04NTYsOSArODU2LDkgQEAKIAkJCWdvdG8gYmFkOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXNldF8yNHh4X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBncGlvLCB0cmlnZ2VyKTsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTkzNywxMyArOTM3LDEzIEBACiAJCXJlZyArPSBPTUFQN1hYX0dQSU9fSU5UX1NUQVRVUzsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwogCQlicmVhazsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJcmVnICs9IE9NQVA0X0dQSU9fSVJRU1RBVFVTMDsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTk1NCwxMiArOTU0LDExIEBACiAJX19yYXdfd3JpdGVsKGdwaW9fbWFzaywgcmVnKTsKIAogCS8qIFdvcmthcm91bmQgZm9yIGNsZWFyaW5nIERTUCBHUElPIGludGVycnVwdHMgdG8gYWxsb3cgcmV0ZW50aW9uICovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMyOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMxOwotI2VuZGlmCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQorCQlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMyOworCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMxOworCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCV9fcmF3X3dyaXRlbChncGlvX21hc2ssIHJlZyk7CiAKQEAgLTEwMDgsMTQgKzEwMDcsMTQgQEAKIAkJaW52ID0gMTsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxOwogCQltYXNrID0gMHhmZmZmZmZmZjsKIAkJYnJlYWs7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVU1NFVDA7CiAJCW1hc2sgPSAweGZmZmZmZmZmOwogCQlicmVhazsKQEAgLTEwNzcsNyArMTA3Niw3IEBACiAJCQlsIHw9IGdwaW9fbWFzazsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlpZiAoZW5hYmxlKQogCQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fU0VUSVJRRU5BQkxFMTsKQEAgLTEwODcsNyArMTA4Niw3IEBACiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlpZiAoZW5hYmxlKQogCQkJcmVnICs9IE9NQVA0X0dQSU9fSVJRU1RBVFVTU0VUMDsKIAkJZWxzZQpAQCAtMTEzMSw5ICsxMTMwLDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCWlmIChiYW5rLT5ub25fd2FrZXVwX2dwaW9zICYgKDEgPDwgZ3BpbykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1vZGlmeSB3YWtldXAgb24gIgogCQkJCQkibm9uLXdha2V1cCBHUElPJWRcbiIsCkBAIC0xMjI3LDkgKzEyMjYsOSBAQAogCQlfX3Jhd193cml0ZWwoMSA8PCBvZmZzZXQsIHJlZyk7CiAJfQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCisJaWYgKChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgfHwKKwkJCShiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fNDRYWCkpIHsKIAkJLyogRGlzYWJsZSB3YWtlLXVwIGR1cmluZyBpZGxlIGZvciBkeW5hbWljIHRpY2sgKi8KIAkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQTsKIAkJX19yYXdfd3JpdGVsKDEgPDwgb2Zmc2V0LCByZWcpOwpAQCAtMTI4NiwxMiArMTI4NSwxMiBAQAogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fN1hYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA3WFhfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzE7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMwOwogI2VuZGlmCiAJd2hpbGUoMSkgewpAQCAtMTU3MSw2ICsxNTcwLDcgQEAKIAkJcmVnICs9IE9NQVA3WFhfR1BJT19ESVJfQ09OVFJPTDsKIAkJYnJlYWs7CiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CiAJCWJyZWFrOwogCX0KQEAgLTE2MzAsNyArMTYzMCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7Ci0jaWYgIShkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ljazsKICNlbmRpZgogCkBAIC0xNzU2LDcgKzE3NTYsNyBAQAogCQliYW5rX3NpemUgPSBTWl8ySzsKIAl9CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAJaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7CiAJCWdwaW9fYmFua19jb3VudCA9IDQ7CiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua18yNDJ4OwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzI0M3g7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlncGlvX2JhbmtfY291bnQgPSBPTUFQMzRYWF9OUl9HUElPUzsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzM0eHg7CkBAIC0xODA5LDMwICsxODA5LDQyIEBACiAJCQlncGlvX2NvdW50ID0gMzI7IC8qIDd4eCBoYXMgMzItYml0IEdQSU9zICovCiAJCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpIHsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKKwkJaWYgKChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgfHwKKwkJCQkoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpKSB7CiAJCQlzdGF0aWMgY29uc3QgdTMyIG5vbl93YWtldXBfZ3Bpb3NbXSA9IHsKIAkJCQkweGUyMDNmZmMwLCAweDA4NzAwMDQwCiAJCQl9OwotCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fSVJRU1RBVFVTQ0xSMCk7Ci0JCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fU1lTQ09ORklHKTsKLQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKLQkJCQkJCSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEUpOwotCQkJLyogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwgbW9kdWxlIGVuYWJsZWQgKi8KLQkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19DVFJMKTsKLQkJfSBlbHNlIHsKLQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxKTsKLQkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxKTsKLQkJCV9fcmF3X3dyaXRldygweDAwMTUsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NZU0NPTkZJRyk7Ci0JCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfRU4pOwogCi0JCQkvKiBJbml0aWFsaXplIGludGVyZmFjZSBjbG9jayB1bmdhdGVkLCBtb2R1bGUgZW5hYmxlZCAqLwotCQkJX19yYXdfd3JpdGVsKDAsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NUUkwpOwotCQl9CisJCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjApOworCQkJCV9fcmF3X3dyaXRldygweDAwMTUsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19TWVNDT05GSUcpOworCQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKKwkJCQkJCSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEUpOworCQkJCS8qCisJCQkJICogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwKKwkJCQkgKiBtb2R1bGUgZW5hYmxlZAorCQkJCSAqLworCQkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19DVFJMKTsKKwkJCX0gZWxzZSB7CisJCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxKTsKKwkJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzEpOworCQkJCV9fcmF3X3dyaXRldygweDAwMTUsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDI0WFhfR1BJT19TWVNDT05GSUcpOworCQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfRU4pOworCisJCQkJLyoKKwkJCQkgKiBJbml0aWFsaXplIGludGVyZmFjZSBjbG9jayB1bmdhdGVkLAorCQkJCSAqIG1vZHVsZSBlbmFibGVkCisJCQkJICovCisJCQkJX19yYXdfd3JpdGVsKDAsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDI0WFhfR1BJT19DVFJMKTsKKwkJCX0KIAkJCWlmIChpIDwgQVJSQVlfU0laRShub25fd2FrZXVwX2dwaW9zKSkKIAkJCQliYW5rLT5ub25fd2FrZXVwX2dwaW9zID0gbm9uX3dha2V1cF9ncGlvc1tpXTsKIAkJCWdwaW9fY291bnQgPSAzMjsKQEAgLTE5MDMsOCArMTkxNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMlBMVVMpCiBzdGF0aWMgaW50IG9tYXBfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewogCWludCBpOwpAQCAtMTkyNyw3ICsxOTM4LDcgQEAKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCQl3YWtlX3N0YXR1cyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1dBS0VfRU47CiAJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkE7CkBAIC0xOTM1LDcgKzE5NDYsNyBAQAogCQkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJCXdha2Vfc3RhdHVzID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOwogCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOwpAQCAtMTk3NSwxNCArMTk4NiwxNCBAQAogCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQTsKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fU0VUV0tVRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKIAkJCWJyZWFrOwpAQCAtMjAxMyw4ICsyMDI0LDcgQEAKIAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAogc3RhdGljIGludCB3b3JrYXJvdW5kX2VuYWJsZWQ7CiAKQEAgLTIwMzAsMjkgKzIwNDAsNDIgQEAKIAogCQlpZiAoIShiYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3MpKQogCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQkJYmFuay0+c2F2ZWRfZGF0YWluID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fREFUQUlOKTsKLQkJbDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKLQkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJYmFuay0+c2F2ZWRfZGF0YWluID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCi0JCQkJCQkJT01BUDRfR1BJT19EQVRBSU4pOwotCQlsMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOwotCQlsMiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7Ci0jZW5kaWYKKworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJCWJhbmstPnNhdmVkX2RhdGFpbiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0RBVEFJTik7CisJCQlsMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOworCQl9CisKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQliYW5rLT5zYXZlZF9kYXRhaW4gPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fREFUQUlOKTsKKwkJCWwxID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fUklTSU5HREVURUNUKTsKKwkJfQorCiAJCWJhbmstPnNhdmVkX2ZhbGxpbmdkZXRlY3QgPSBsMTsKIAkJYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0ID0gbDI7CiAJCWwxICY9IH5iYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3M7CiAJCWwyICY9IH5iYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3M7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQkJX19yYXdfd3JpdGVsKGwxLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKLQkJX19yYXdfd3JpdGVsKGwyLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJX19yYXdfd3JpdGVsKGwxLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKLQkJX19yYXdfd3JpdGVsKGwyLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOwotI2VuZGlmCisKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwobDEsIGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQkJX19yYXdfd3JpdGVsKGwyLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOworCQl9CisKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwobDEsIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQkJX19yYXdfd3JpdGVsKGwyLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOworCQl9CisKIAkJYysrOwogCX0KIAlpZiAoIWMpIHsKQEAgLTIwNzQsMjAgKzIwOTcsMjMgQEAKIAogCQlpZiAoIShiYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3MpKQogCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX2ZhbGxpbmdkZXRlY3QsCisKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCwKIAkJCQkgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QsCisJCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0LAogCQkJCSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOwotCQlsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fREFUQUlOKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9mYWxsaW5nZGV0ZWN0LAorCQkJbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7CisJCX0KKworCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9mYWxsaW5nZGV0ZWN0LAogCQkJCSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKLQkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3Jpc2luZ2RldGVjdCwKKwkJCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QsCiAJCQkJIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7Ci0JCWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19EQVRBSU4pOwotI2VuZGlmCisJCQlsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fREFUQUlOKTsKKwkJfQorCiAJCS8qIENoZWNrIGlmIGFueSBvZiB0aGUgbm9uLXdha2V1cCBpbnRlcnJ1cHQgR1BJT3MgaGF2ZSBjaGFuZ2VkCiAJCSAqIHN0YXRlLiAgSWYgc28sIGdlbmVyYXRlIGFuIElSUSBieSBzb2Z0d2FyZS4gIFRoaXMgaXMKIAkJICogaG9ycmlibHkgcmFjeSwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvIHRvIHdvcmsgYXJvdW5kCkBAIC0yMTEzLDMwICsyMTM5LDM2IEBACiAKIAkJaWYgKGdlbikgewogCQkJdTMyIG9sZDAsIG9sZDE7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLQkJCW9sZDAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwotCQkJb2xkMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CisKKwkJCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJCW9sZDAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOworCQkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOwogCQkJX19yYXdfd3JpdGVsKG9sZDAgfCBnZW4sIGJhbmstPmJhc2UgKwogCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCk7CiAJCQlfX3Jhd193cml0ZWwob2xkMSB8IGdlbiwgYmFuay0+YmFzZSArCiAJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKLQkJCV9fcmF3X3dyaXRlbChvbGQwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwotCQkJX19yYXdfd3JpdGVsKG9sZDEsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQkJb2xkMCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDApOwotCQkJb2xkMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOwotCQkJX19yYXdfd3JpdGVsKG9sZDAgfCBsLCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKLQkJCV9fcmF3X3dyaXRlbChvbGQxIHwgbCwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMSk7CiAJCQlfX3Jhd193cml0ZWwob2xkMCwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKIAkJCV9fcmF3X3dyaXRlbChvbGQxLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOworCQkJfQorCisJCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCQlvbGQwID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQkJb2xkMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwogCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOwotI2VuZGlmCisJCQkJX19yYXdfd3JpdGVsKG9sZDAgfCBsLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKKwkJCQlfX3Jhd193cml0ZWwob2xkMSB8IGwsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworCQkJCV9fcmF3X3dyaXRlbChvbGQwLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKKwkJCQlfX3Jhd193cml0ZWwob2xkMSwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTIxNDQsNyArMjE3Niw3IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogLyogc2F2ZSB0aGUgcmVnaXN0ZXJzIG9mIGJhbmsgMi02ICovCiB2b2lkIG9tYXBfZ3Bpb19zYXZlX2NvbnRleHQodm9pZCkKIHsKQEAgLTIyNDAsOCArMjI3Miw3IEBACiAKIAltcHVpb19pbml0KCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMlBMVVMpCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9jbGFzc19pc19vbWFwMigpKSB7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvbWFwX2dwaW9fc3lzY2xhc3MpOwpAQCAtMjMwMCw4ICsyMzMxLDcgQEAKIC8qIEZJWE1FIGZvciBhdCBsZWFzdCBvbWFwMiwgc2hvdyBwdWxsdXAvcHVsbGRvd24gc3RhdGUgKi8KIAogCQkJaXJxc3RhdCA9IGlycV9kZXNjW2lycV0uc3RhdHVzOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8CVwKLQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKIAkJCWlmIChpc19pbiAmJiAoKGJhbmstPnN1c3BlbmRfd2FrZXVwICYgbWFzaykKIAkJCQkJfHwgaXJxc3RhdCAmIElSUV9UWVBFX1NFTlNFX01BU0spKSB7CiAJCQkJY2hhcgkqdHJpZ2dlciA9IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKaW5kZXggMzNmZmY0ZS4uNjI0ZTI2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2RlZmluZSBPTUFQX0kyQ19TSVpFCQkweDNmCiAjZGVmaW5lIE9NQVAxX0kyQ19CQVNFCQkweGZmZmIzODAwCkBAIC01MCwxMCArNTEsMTAgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW11bMl0gPSB7CiAJeyBJMkNfUkVTT1VSQ0VfQlVJTERFUigwLCAwKSB9LAotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAl7IEkyQ19SRVNPVVJDRV9CVUlMREVSKE9NQVAyX0kyQ19CQVNFMiwgSU5UXzI0WFhfSTJDMl9JUlEpIH0sCiAjZW5kaWYKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJeyBJMkNfUkVTT1VSQ0VfQlVJTERFUihPTUFQMl9JMkNfQkFTRTMsIElOVF8zNFhYX0kyQzNfSVJRKSB9LAogI2VuZGlmCiB9OwpAQCAtNzIsMTAgKzczLDEwIEBACiBzdGF0aWMgdTMyIGkyY19yYXRlW0FSUkFZX1NJWkUoaTJjX3Jlc291cmNlcyldOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlc1tdID0gewogCUkyQ19ERVZfQlVJTERFUigxLCBpMmNfcmVzb3VyY2VzWzBdLCAmaTJjX3JhdGVbMF0pLAotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAlJMkNfREVWX0JVSUxERVIoMiwgaTJjX3Jlc291cmNlc1sxXSwgJmkyY19yYXRlWzFdKSwKICNlbmRpZgotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAlJMkNfREVWX0JVSUxERVIoMywgaTJjX3Jlc291cmNlc1syXSwgJmkyY19yYXRlWzJdKSwKICNlbmRpZgogfTsKQEAgLTExNyw2ICsxMTgsMTEgQEAKIAkJcmVzWzFdLnN0YXJ0ID0gaXJxOwogCX0KIAorCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJb21hcDFfaTJjX211eF9waW5zKGJ1c19pZCk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQorCQlvbWFwMl9pMmNfbXV4X3BpbnMoYnVzX2lkKTsKKwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CiB9CiAKQEAgLTE2OSw3ICsxNzUsNyBAQAogc3Vic3lzX2luaXRjYWxsKG9tYXBfcmVnaXN0ZXJfaTJjX2J1c19jbWRsaW5lKTsKIAogLyoqCi0gKiBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyAtIHJlZ2lzdGVyIEkyQyBidXMgd2l0aCBkZXZpY2UgZGVzY3JpcHRvcnMKKyAqIG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyAtIHJlZ2lzdGVyIEkyQyBidXMgd2l0aCBkZXZpY2UgZGVzY3JpcHRvcnMKICAqIEBidXNfaWQ6IGJ1cyBpZCBjb3VudGluZyBmcm9tIG51bWJlciAxCiAgKiBAY2xrcmF0ZTogY2xvY2sgcmF0ZSBvZiB0aGUgYnVzIGluIGtIegogICogQGluZm86IHBvaW50ZXIgaW50byBJMkMgZGV2aWNlIGRlc2NyaXB0b3IgdGFibGUgb3IgTlVMTApAQCAtMTc3LDcgKzE4Myw3IEBACiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4KICAqLwotaW50IF9faW5pdCBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKK2ludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCiAJCQkgIHVuc2lnbmVkIGxlbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaAppbmRleCAzNWIzNmNhLi5iYjkzN2YzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbGtkZXZfb21hcC5oCkBAIC0yNSwxNyArMjUsMjUgQEAKIAkJfSwJCQlcCiAJfQogCi0KKy8qIFBsYXRmb3JtIGZsYWdzIGZvciB0aGUgY2xrZGV2LU9NQVAgaW50ZWdyYXRpb24gY29kZSAqLwogI2RlZmluZSBDS18zMTAJCSgxIDw8IDApCi0jZGVmaW5lIENLXzdYWAkJKDEgPDwgMSkKKyNkZWZpbmUgQ0tfN1hYCQkoMSA8PCAxKQkvKiA3eHgsIDg1MCAqLwogI2RlZmluZSBDS18xNTEwCQkoMSA8PCAyKQotI2RlZmluZSBDS18xNlhYCQkoMSA8PCAzKQotI2RlZmluZSBDS18yNDNYCQkoMSA8PCA0KQotI2RlZmluZSBDS18yNDJYCQkoMSA8PCA1KQotI2RlZmluZSBDS18zNDNYCQkoMSA8PCA2KQotI2RlZmluZSBDS18zNDMwRVMxCSgxIDw8IDcpCi0jZGVmaW5lIENLXzM0MzBFUzIJKDEgPDwgOCkKLSNkZWZpbmUgQ0tfNDQzWAkJKDEgPDwgOSkKKyNkZWZpbmUgQ0tfMTZYWAkJKDEgPDwgMykJLyogMTZ4eCwgMTd4eCwgNTkxMiAqLworI2RlZmluZSBDS18yNDJYCQkoMSA8PCA0KQorI2RlZmluZSBDS18yNDNYCQkoMSA8PCA1KQorI2RlZmluZSBDS18zWFhYCQkoMSA8PCA2KQkvKiBPTUFQMyArIEFNMyBjb21tb24gY2xvY2tzKi8KKyNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgNykJLyogT01BUDM0eHggY29tbW9uIGNsb2NrcyAqLworI2RlZmluZSBDS18zNDMwRVMxCSgxIDw8IDgpCS8qIDM0eHhFUzEgb25seSAqLworI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDkpCS8qIDM0eHhFUzIsIEVTMywgbm9uLVNpdGFyYSAzNXh4IG9ubHkgKi8KKyNkZWZpbmUgQ0tfMzUwNQkJKDEgPDwgMTApCisjZGVmaW5lIENLXzM1MTcJCSgxIDw8IDExKQorI2RlZmluZSBDS18zNlhYCQkoMSA8PCAxMikJLyogT01BUDM2eHgvMzd4eC1zcGVjaWZpYyBjbG9ja3MgKi8KKyNkZWZpbmUgQ0tfNDQzWAkJKDEgPDwgMTMpCisKKyNkZWZpbmUgQ0tfQU0zNVhYCShDS18zNTA1IHwgQ0tfMzUxNykJLyogYWxsIFNpdGFyYSBBTTM1eHggKi8KKworCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggOTRmZTJhMC4uMzRmN2ZhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiAgYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCisgKiBPTUFQIGNsb2NrOiBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgZnVuY3Rpb24gcHJvdG90eXBlcywgc2hhcmVkIG1hY3JvcwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCi0gKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KLSAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjIsMTIgKzIyLDEzIEBACiBzdHJ1Y3QgY2xrb3BzIHsKIAlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKIAl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOwotCXZvaWQJCQkoKmZpbmRfaWRsZXN0KShzdHJ1Y3QgY2xrICosIHZvaWQgX19pb21lbSAqKiwgdTggKik7Ci0Jdm9pZAkJCSgqZmluZF9jb21wYW5pb24pKHN0cnVjdCBjbGsgKiwgdm9pZCBfX2lvbWVtICoqLCB1OCAqKTsKKwl2b2lkCQkJKCpmaW5kX2lkbGVzdCkoc3RydWN0IGNsayAqLCB2b2lkIF9faW9tZW0gKiosCisJCQkJCSAgICAgICB1OCAqLCB1OCAqKTsKKwl2b2lkCQkJKCpmaW5kX2NvbXBhbmlvbikoc3RydWN0IGNsayAqLCB2b2lkIF9faW9tZW0gKiosCisJCQkJCQkgIHU4ICopOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAogc3RydWN0IGNsa3NlbF9yYXRlIHsKIAl1MzIJCQl2YWw7CkBAIC00MCw2ICs0MSw1MCBAQAogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqcmF0ZXM7CiB9OwogCisvKioKKyAqIHN0cnVjdCBkcGxsX2RhdGEgLSBEUExMIHJlZ2lzdGVycyBhbmQgaW50ZWdyYXRpb24gZGF0YQorICogQG11bHRfZGl2MV9yZWc6IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIERQTEwgTSBhbmQgTiBiaXRmaWVsZHMKKyAqIEBtdWx0X21hc2s6IG1hc2sgb2YgdGhlIERQTEwgTSBiaXRmaWVsZCBpbiBAbXVsdF9kaXYxX3JlZworICogQGRpdjFfbWFzazogbWFzayBvZiB0aGUgRFBMTCBOIGJpdGZpZWxkIGluIEBtdWx0X2RpdjFfcmVnCisgKiBAY2xrX2J5cGFzczogc3RydWN0IGNsayBwb2ludGVyIHRvIHRoZSBjbG9jaydzIGJ5cGFzcyBjbG9jayBpbnB1dAorICogQGNsa19yZWY6IHN0cnVjdCBjbGsgcG9pbnRlciB0byB0aGUgY2xvY2sncyByZWZlcmVuY2UgY2xvY2sgaW5wdXQKKyAqIEBjb250cm9sX3JlZzogcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgRFBMTCBtb2RlIGJpdGZpZWxkCisgKiBAZW5hYmxlX21hc2s6IG1hc2sgb2YgdGhlIERQTEwgbW9kZSBiaXRmaWVsZCBpbiBAY29udHJvbF9yZWcKKyAqIEByYXRlX3RvbGVyYW5jZTogbWF4aW11bSB2YXJpYW5jZSBhbGxvd2VkIGZyb20gdGFyZ2V0IHJhdGUgKGluIEh6KQorICogQGxhc3Rfcm91bmRlZF9yYXRlOiBjYWNoZSBvZiB0aGUgbGFzdCByYXRlIHJlc3VsdCBvZiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoKQorICogQGxhc3Rfcm91bmRlZF9tOiBjYWNoZSBvZiB0aGUgbGFzdCBNIHJlc3VsdCBvZiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoKQorICogQG1heF9tdWx0aXBsaWVyOiBtYXhpbXVtIHZhbGlkIG5vbi1ieXBhc3MgbXVsdGlwbGllciB2YWx1ZSAoYWN0dWFsKQorICogQGxhc3Rfcm91bmRlZF9uOiBjYWNoZSBvZiB0aGUgbGFzdCBOIHJlc3VsdCBvZiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoKQorICogQG1pbl9kaXZpZGVyOiBtaW5pbXVtIHZhbGlkIG5vbi1ieXBhc3MgZGl2aWRlciB2YWx1ZSAoYWN0dWFsKQorICogQG1heF9kaXZpZGVyOiBtYXhpbXVtIHZhbGlkIG5vbi1ieXBhc3MgZGl2aWRlciB2YWx1ZSAoYWN0dWFsKQorICogQG1vZGVzOiBwb3NzaWJsZSB2YWx1ZXMgb2YgQGVuYWJsZV9tYXNrCisgKiBAYXV0b2lkbGVfcmVnOiByZWdpc3RlciBjb250YWluaW5nIHRoZSBEUExMIGF1dG9pZGxlIG1vZGUgYml0ZmllbGQKKyAqIEBpZGxlc3RfcmVnOiByZWdpc3RlciBjb250YWluaW5nIHRoZSBEUExMIGlkbGUgc3RhdHVzIGJpdGZpZWxkCisgKiBAYXV0b2lkbGVfbWFzazogbWFzayBvZiB0aGUgRFBMTCBhdXRvaWRsZSBtb2RlIGJpdGZpZWxkIGluIEBhdXRvaWRsZV9yZWcKKyAqIEBmcmVxc2VsX21hc2s6IG1hc2sgb2YgdGhlIERQTEwgaml0dGVyIGNvcnJlY3Rpb24gYml0ZmllbGQgaW4gQGNvbnRyb2xfcmVnCisgKiBAaWRsZXN0X21hc2s6IG1hc2sgb2YgdGhlIERQTEwgaWRsZSBzdGF0dXMgYml0ZmllbGQgaW4gQGlkbGVzdF9yZWcKKyAqIEBhdXRvX3JlY2FsX2JpdDogYml0c2hpZnQgb2YgdGhlIGRyaWZ0Z3VhcmQgZW5hYmxlIGJpdCBpbiBAY29udHJvbF9yZWcKKyAqIEByZWNhbF9lbl9iaXQ6IGJpdHNoaWZ0IG9mIHRoZSBQUk1fSVJRRU5BQkxFXyogYml0IGZvciByZWNhbGlicmF0aW9uIElSUXMKKyAqIEByZWNhbF9zdF9iaXQ6IGJpdHNoaWZ0IG9mIHRoZSBQUk1fSVJRU1RBVFVTXyogYml0IGZvciByZWNhbGlicmF0aW9uIElSUXMKKyAqIEBmbGFnczogRFBMTCB0eXBlL2ZlYXR1cmVzIChzZWUgYmVsb3cpCisgKgorICogUG9zc2libGUgdmFsdWVzIGZvciBAZmxhZ3M6CisgKiBEUExMX0pfVFlQRTogIkotdHlwZSBEUExMIiAob25seSBzb21lIDM2eHgsIDR4eHggRFBMTHMpCisgKiBOT19EQ09fU0VMOiBkb24ndCBwcm9ncmFtIERDTyAob25seSBmb3Igc29tZSBKLXR5cGUgRFBMTHMpCisKKyAqIEBmcmVxc2VsX21hc2sgaXMgb25seSB1c2VkIG9uIHRoZSBPTUFQMzR4eCBmYW1pbHkgYW5kIEFNMzV4eC4KKyAqCisgKiBYWFggU29tZSBEUExMcyBoYXZlIG11bHRpcGxlIGJ5cGFzcyBpbnB1dHMsIHNvIGl0J3Mgbm90IHRlY2huaWNhbGx5CisgKiBjb3JyZWN0IHRvIG9ubHkgaGF2ZSBvbmUgQGNsa19ieXBhc3MgcG9pbnRlci4KKyAqCisgKiBYWFggQHJhdGVfdG9sZXJhbmNlIHNob3VsZCBwcm9iYWJseSBiZSBkZXByZWNhdGVkIC0gY3VycmVudGx5IHRoZXJlCisgKiBkb24ndCBzZWVtIHRvIGJlIGFueSB1c2VjYXNlcyBmb3IgRFBMTCByb3VuZGluZyB0aGF0IGlzIG5vdCBleGFjdC4KKyAqCisgKiBYWFggVGhlIHJ1bnRpbWUtdmFyaWFibGUgZmllbGRzIChAbGFzdF9yb3VuZGVkX3JhdGUsIEBsYXN0X3JvdW5kZWRfbSwKKyAqIEBsYXN0X3JvdW5kZWRfbikgc2hvdWxkIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBydW50aW1lLWZpeGVkIGZpZWxkcworICogYW5kIHBsYWNlZCBpbnRvIGEgZGlmZmVyZW5jdCBzdHJ1Y3R1cmUsIHNvIHRoYXQgdGhlIHJ1bnRpbWUtZml4ZWQgZGF0YQorICogY2FuIGJlIHBsYWNlZCBpbnRvIHJlYWQtb25seSBzcGFjZS4KKyAqLwogc3RydWN0IGRwbGxfZGF0YSB7CiAJdm9pZCBfX2lvbWVtCQkqbXVsdF9kaXYxX3JlZzsKIAl1MzIJCQltdWx0X21hc2s7CkBAIC01MSwxMyArOTYsMTIgQEAKIAl1bnNpZ25lZCBpbnQJCXJhdGVfdG9sZXJhbmNlOwogCXVuc2lnbmVkIGxvbmcJCWxhc3Rfcm91bmRlZF9yYXRlOwogCXUxNgkJCWxhc3Rfcm91bmRlZF9tOworCXUxNgkJCW1heF9tdWx0aXBsaWVyOwogCXU4CQkJbGFzdF9yb3VuZGVkX247CiAJdTgJCQltaW5fZGl2aWRlcjsKIAl1OAkJCW1heF9kaXZpZGVyOwotCXUzMgkJCW1heF90b2xlcmFuY2U7Ci0JdTE2CQkJbWF4X211bHRpcGxpZXI7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIAl1OAkJCW1vZGVzOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAJdm9pZCBfX2lvbWVtCQkqYXV0b2lkbGVfcmVnOwogCXZvaWQgX19pb21lbQkJKmlkbGVzdF9yZWc7CiAJdTMyCQkJYXV0b2lkbGVfbWFzazsKQEAgLTY2LDYgKzExMCw3IEBACiAJdTgJCQlhdXRvX3JlY2FsX2JpdDsKIAl1OAkJCXJlY2FsX2VuX2JpdDsKIAl1OAkJCXJlY2FsX3N0X2JpdDsKKwl1OAkJCWZsYWdzOwogIyAgZW5kaWYKIH07CiAKQEAgLTc1LDEyICsxMjAsMTAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiAJY29uc3Qgc3RydWN0IGNsa29wcwkqb3BzOwogCWNvbnN0IGNoYXIJCSpuYW1lOwotCWludAkJCWlkOwogCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZAljaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNpYmxpbmc7CS8qIG5vZGUgZm9yIGNoaWxkcmVuICovCiAJdW5zaWduZWQgbG9uZwkJcmF0ZTsKLQlfX3UzMgkJCWZsYWdzOwogCXZvaWQgX19pb21lbQkJKmVuYWJsZV9yZWc7CiAJdW5zaWduZWQgbG9uZwkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CiAJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKQEAgLTg4LDkgKzEzMSw5IEBACiAJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKIAlfX3U4CQkJZW5hYmxlX2JpdDsKIAlfX3M4CQkJdXNlY291bnQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCXU4CQkJZml4ZWRfZGl2OworCXU4CQkJZmxhZ3M7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJdm9pZCBfX2lvbWVtCQkqY2xrc2VsX3JlZzsKIAl1MzIJCQljbGtzZWxfbWFzazsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsCSpjbGtzZWw7CkBAIC0xMjMsNyArMTY2LDcgQEAKICNlbmRpZgogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBtcHVyYXRlOworZXh0ZXJuIGludCBtcHVyYXRlOwogCiBleHRlcm4gaW50IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICpjdXN0b21fY2xvY2tzKTsKIGV4dGVybiB2b2lkIGNsa19wcmVpbml0KHN0cnVjdCBjbGsgKmNsayk7CkBAIC0xMzQsMjcgKzE3NywyMyBAQAogZXh0ZXJuIHZvaWQgcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3Modm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCBjbGtfZW5hYmxlX2luaXRfY2xvY2tzKHZvaWQpOwordW5zaWduZWQgbG9uZyBvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiBleHRlcm4gdm9pZCBjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKTsKIGV4dGVybiB2b2lkIGNsa19leGl0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOwogI2VuZGlmCitleHRlcm4gc3RydWN0IGNsayAqb21hcF9jbGtfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19udWxsOwogCitleHRlcm4gc3RydWN0IGNsayBkdW1teV9jazsKKwogLyogQ2xvY2sgZmxhZ3MgKi8KLS8qIGJpdCAwIGlzIGZyZWUgKi8KLSNkZWZpbmUgUkFURV9GSVhFRAkJKDEgPDwgMSkJLyogRml4ZWQgY2xvY2sgcmF0ZSAqLwotLyogYml0cyAyLTQgYXJlIGZyZWUgKi8KLSNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkoMSA8PCA1KQkvKiBVc2UgMzItYml0IGFjY2VzcyAqLwotI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgNykKLSNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgOCkKLSNkZWZpbmUgREVMQVlFRF9BUFAJCSgxIDw8IDkpCS8qIERlbGF5IGFwcGxpY2F0aW9uIG9mIGNsb2NrICovCi0jZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KLSNkZWZpbmUgRU5BQkxFX09OX0lOSVQJCSgxIDw8IDExKQkvKiBFbmFibGUgdXBvbiBmcmFtZXdvcmsgaW5pdCAqLwotI2RlZmluZSBJTlZFUlRfRU5BQkxFICAgICAgICAgICAoMSA8PCAxMikgICAgICAgLyogMCBlbmFibGVzLCAxIGRpc2FibGVzICovCi0jZGVmaW5lIENMT0NLX0lOX09NQVA0NDMwCSgxIDw8IDEzKQotI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJKDEgPDwgMTQpCi0vKiBiaXRzIDEzLTMxIGFyZSBjdXJyZW50bHkgZnJlZSAqLworI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCSgxIDw8IDApCS8qIFVzZSAzMi1iaXQgYWNjZXNzICovCisjZGVmaW5lIENMT0NLX0lETEVfQ09OVFJPTAkoMSA8PCAxKQorI2RlZmluZSBDTE9DS19OT19JRExFX1BBUkVOVAkoMSA8PCAyKQorI2RlZmluZSBFTkFCTEVfT05fSU5JVAkJKDEgPDwgMykJLyogRW5hYmxlIHVwb24gZnJhbWV3b3JrIGluaXQgKi8KKyNkZWZpbmUgSU5WRVJUX0VOQUJMRQkJKDEgPDwgNCkJLyogMCBlbmFibGVzLCAxIGRpc2FibGVzICovCiAKIC8qIENsa3NlbF9yYXRlIGZsYWdzICovCiAjZGVmaW5lIERFRkFVTFRfUkFURQkJKDEgPDwgMCkKQEAgLTE2Miw3ICsyMDEsOCBAQAogI2RlZmluZSBSQVRFX0lOXzI0M1gJCSgxIDw8IDIpCiAjZGVmaW5lIFJBVEVfSU5fMzQzWAkJKDEgPDwgMykJLyogcmF0ZXMgY29tbW9uIHRvIGFsbCAzNDNYICovCiAjZGVmaW5lIFJBVEVfSU5fMzQzMEVTMgkJKDEgPDwgNCkJLyogMzQzMEVTMiByYXRlcyBvbmx5ICovCi0jZGVmaW5lIFJBVEVfSU5fNDQzMCAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFJBVEVfSU5fMzZYWAkJKDEgPDwgNSkKKyNkZWZpbmUgUkFURV9JTl80NDMwCQkoMSA8PCA2KQogCiAjZGVmaW5lIFJBVEVfSU5fMjRYWAkJKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9ja2RvbWFpbi5oCmluZGV4IGViNzM0ODIuLmJhMGE2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2tkb21haW4uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrZG9tYWluLmgKQEAgLTQsNyArNCw3IEBACiAgKiBPTUFQMi8zIGNsb2NrZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKICAqCkBAIC00MCw2NSArNDAsOTUgQEAKICNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUAkJMHgyCiAjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTwkJMHgzCiAKLS8qCi0gKiBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAtIGEgcG93ZXJkb21haW4gdGhhdCBzaG91bGQgaGF2ZSB3a2RlcHMKLSAqIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhIHBvd2VyZG9tYWluIHNob3VsZCBzdGF5IGFjdGl2ZSBpbiBod3N1cCBtb2RlOwotICogYW5kIGNvbnZlcnNlbHksIHJlbW92ZWQgd2hlbiB0aGUgcG93ZXJkb21haW4gc2hvdWxkIGJlIGFsbG93ZWQgdG8gZ28KLSAqIGluYWN0aXZlIGluIGh3c3VwIG1vZGUuCisvKioKKyAqIHN0cnVjdCBjbGtkbV9hdXRvZGVwIC0gY2xrZG0gZGVwcyB0byBhZGQgd2hlbiBlbnRlcmluZy9leGl0aW5nIGh3c3VwIG1vZGUKKyAqIEBjbGtkbTogY2xvY2tkb21haW4gdG8gYWRkIHdrZGVwK3NsZWVwZGVwIG9uIC0gc2V0IG5hbWUgbWVtYmVyIG9ubHkKKyAqIEBvbWFwX2NoaXA6IE9NQVAgY2hpcCB0eXBlcyB0aGF0IHRoaXMgYXV0b2RlcCBpcyB2YWxpZCBvbgorICoKKyAqIEEgY2xvY2tkb21haW4gdGhhdCBzaG91bGQgaGF2ZSB3a2RlcHMgYW5kIHNsZWVwZGVwcyBhZGRlZCB3aGVuIGEKKyAqIGNsb2NrZG9tYWluIHNob3VsZCBzdGF5IGFjdGl2ZSBpbiBod3N1cCBtb2RlOyBhbmQgY29udmVyc2VseSwKKyAqIHJlbW92ZWQgd2hlbiB0aGUgY2xvY2tkb21haW4gc2hvdWxkIGJlIGFsbG93ZWQgdG8gZ28gaW5hY3RpdmUgaW4KKyAqIGh3c3VwIG1vZGUuCisgKgorICogQXV0b2RlcHMgYXJlIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyCisgKiBvbWFwX2h3bW9kLWJhc2VkIGZpbmUtZ3JhaW5lZCBtb2R1bGUgaWRsZSBjb250cm9sIGlzIGFkZGVkLgogICovCi1zdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCB7Ci0KK3N0cnVjdCBjbGtkbV9hdXRvZGVwIHsKIAl1bmlvbiB7Ci0JCS8qIE5hbWUgb2YgdGhlIHBvd2VyZG9tYWluIHRvIGFkZCBhIHdrZGVwL3NsZWVwZGVwIG9uICovCiAJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJLyogUG93ZXJkb21haW4gcG9pbnRlciAobG9va2VkIHVwIGF0IGNsa2RtX2luaXQoKSB0aW1lKSAqLwotCQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB0cjsKLQl9IHB3cmRtOwotCi0JLyogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBkZXAgaXMgdmFsaWQgb24gKi8KKwkJc3RydWN0IGNsb2NrZG9tYWluICpwdHI7CisJfSBjbGtkbTsKIAljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKLQogfTsKIAorLyoqCisgKiBzdHJ1Y3QgY2xrZG1fZGVwIC0gZW5jb2RlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNsb2NrZG9tYWlucworICogQGNsa2RtX25hbWU6IGNsb2NrZG9tYWluIG5hbWUKKyAqIEBjbGtkbTogcG9pbnRlciB0byB0aGUgc3RydWN0IGNsb2NrZG9tYWluIG9mIEBjbGtkbV9uYW1lCisgKiBAb21hcF9jaGlwOiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGRlcGVuZGVuY3kgaXMgdmFsaWQgb24KKyAqIEB3a2RlcF91c2Vjb3VudDogTnVtYmVyIG9mIHdha2V1cCBkZXBlbmRlbmNpZXMgY2F1c2luZyB0aGlzIGNsa2RtIHRvIHdha2UKKyAqIEBzbGVlcGRlcF91c2Vjb3VudDogTnVtYmVyIG9mIHNsZWVwIGRlcHMgdGhhdCBjb3VsZCBwcmV2ZW50IGNsa2RtIGZyb20gaWRsZQorICoKKyAqIFN0YXRpY2FsbHkgZGVmaW5lZC4gIEBjbGtkbSBpcyByZXNvbHZlZCBmcm9tIEBjbGtkbV9uYW1lIGF0IHJ1bnRpbWUgYW5kCisgKiBzaG91bGQgbm90IGJlIHByZS1pbml0aWFsaXplZC4KKyAqCisgKiBYWFggU2hvdWxkIGFsc28gaW5jbHVkZSBoYXJkd2FyZSAoZml4ZWQpIGRlcGVuZGVuY2llcy4KKyAqLworc3RydWN0IGNsa2RtX2RlcCB7CisJY29uc3QgY2hhciAqY2xrZG1fbmFtZTsKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtOworCWF0b21pY190IHdrZGVwX3VzZWNvdW50OworCWF0b21pY190IHNsZWVwZGVwX3VzZWNvdW50OworCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2xvY2tkb21haW4gLSBPTUFQIGNsb2NrZG9tYWluCisgKiBAbmFtZTogY2xvY2tkb21haW4gbmFtZQorICogQHB3cmRtOiBwb3dlcmRvbWFpbiBjb250YWluaW5nIHRoaXMgY2xvY2tkb21haW4KKyAqIEBjbGt0cmN0cmxfcmVnOiBDTEtTVENUUkwgcmVnIGZvciB0aGUgZ2l2ZW4gY2xvY2sgZG9tYWluCisgKiBAY2xrdHJjdHJsX21hc2s6IENMS1RSQ1RSTC9BVVRPU1RBVEUgZmllbGQgbWFzayBpbiBDTV9DTEtTVENUUkwgcmVnCisgKiBAZmxhZ3M6IENsb2NrZG9tYWluIGNhcGFiaWxpdHkgZmxhZ3MKKyAqIEBkZXBfYml0OiBCaXQgc2hpZnQgb2YgdGhpcyBjbG9ja2RvbWFpbidzIFBNX1dLREVQL0NNX1NMRUVQREVQIGJpdAorICogQHdrZGVwX3NyY3M6IENsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIHdha2UgdGhpcyBwb3dlcmRvbWFpbiB1cAorICogQHNsZWVwZGVwX3NyY3M6IENsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIGtlZXAgdGhpcyBjbGtkbSBmcm9tIGluYWN0CisgKiBAb21hcF9jaGlwOiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGlzIHZhbGlkIG9uCisgKiBAdXNlY291bnQ6IFVzZWNvdW50IHRyYWNraW5nCisgKiBAbm9kZTogbGlzdF9oZWFkIHRvIGxpbmsgYWxsIGNsb2NrZG9tYWlucyB0b2dldGhlcgorICovCiBzdHJ1Y3QgY2xvY2tkb21haW4gewotCi0JLyogQ2xvY2tkb21haW4gbmFtZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0KIAl1bmlvbiB7Ci0JCS8qIFBvd2VyZG9tYWluIGVuY2xvc2luZyB0aGlzIGNsb2NrZG9tYWluICovCiAJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCiAJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOwogCX0gcHdyZG07Ci0KLQkvKiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZyAqLworCXZvaWQgX19pb21lbSAqY2xrc3RjdHJsX3JlZzsKIAljb25zdCB1MTYgY2xrdHJjdHJsX21hc2s7Ci0KLQkvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCiAJY29uc3QgdTggZmxhZ3M7Ci0KLQkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGlzIHZhbGlkIG9uICovCisJY29uc3QgdTggZGVwX2JpdDsKKwlzdHJ1Y3QgY2xrZG1fZGVwICp3a2RlcF9zcmNzOworCXN0cnVjdCBjbGtkbV9kZXAgKnNsZWVwZGVwX3NyY3M7CiAJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7Ci0KLQkvKiBVc2Vjb3VudCB0cmFja2luZyAqLwogCWF0b21pY190IHVzZWNvdW50OwotCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCiB9OwogCi12b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcHMpOwotaW50IGNsa2RtX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwotaW50IGNsa2RtX3VucmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Cit2b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcHMpOwogc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgdm9pZCAqdXNlciksCiAJCQl2b2lkICp1c2VyKTsKIHN0cnVjdCBwb3dlcmRvbWFpbiAqY2xrZG1fZ2V0X3B3cmRtKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCitpbnQgY2xrZG1fYWRkX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fZGVsX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fcmVhZF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2NsZWFyX2FsbF93a2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgY2xrZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fcmVhZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKIHZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIHZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAppbmRleCAzMmMyMjI3Li43NTU2ZTI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKQEAgLTM3LDIxICszNywzMCBAQAogZXh0ZXJuIHZvaWQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKIAotLyogSU8gYmFzZXMgZm9yIHZhcmlvdXMgT01BUCBwcm9jZXNzb3JzICovCisvKgorICogSU8gYmFzZXMgZm9yIHZhcmlvdXMgT01BUCBwcm9jZXNzb3JzCisgKiBFeGNlcHQgdGhlIHRhcCBiYXNlLCByZXN0IGFsbCB0aGUgaW8gYmFzZXMKKyAqIGxpc3RlZCBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLgorICovCiBzdHJ1Y3Qgb21hcF9nbG9iYWxzIHsKIAl1MzIJCWNsYXNzOwkJLyogT01BUCBjbGFzcyB0byBkZXRlY3QgKi8KIAl2b2lkIF9faW9tZW0JKnRhcDsJCS8qIENvbnRyb2wgbW9kdWxlIElEIGNvZGUgKi8KLQl2b2lkIF9faW9tZW0JKnNkcmM7CQkvKiBTRFJBTSBDb250cm9sbGVyICovCi0Jdm9pZCBfX2lvbWVtCSpzbXM7CQkvKiBTRFJBTSBNZW1vcnkgU2NoZWR1bGVyICovCi0Jdm9pZCBfX2lvbWVtCSpjdHJsOwkJLyogU3lzdGVtIENvbnRyb2wgTW9kdWxlICovCi0Jdm9pZCBfX2lvbWVtCSpwcm07CQkvKiBQb3dlciBhbmQgUmVzZXQgTWFuYWdlbWVudCAqLwotCXZvaWQgX19pb21lbQkqY207CQkvKiBDbG9jayBNYW5hZ2VtZW50ICovCi0Jdm9pZCBfX2lvbWVtCSpjbTI7CisJdW5zaWduZWQgbG9uZyAgIHNkcmM7ICAgICAgICAgICAvKiBTRFJBTSBDb250cm9sbGVyICovCisJdW5zaWduZWQgbG9uZyAgIHNtczsgICAgICAgICAgICAvKiBTRFJBTSBNZW1vcnkgU2NoZWR1bGVyICovCisJdW5zaWduZWQgbG9uZyAgIGN0cmw7ICAgICAgICAgICAvKiBTeXN0ZW0gQ29udHJvbCBNb2R1bGUgKi8KKwl1bnNpZ25lZCBsb25nICAgcHJtOyAgICAgICAgICAgIC8qIFBvd2VyIGFuZCBSZXNldCBNYW5hZ2VtZW50ICovCisJdW5zaWduZWQgbG9uZyAgIGNtOyAgICAgICAgICAgICAvKiBDbG9jayBNYW5hZ2VtZW50ICovCisJdW5zaWduZWQgbG9uZyAgIGNtMjsKKwl1bnNpZ25lZCBsb25nCXVhcnQxX3BoeXM7CisJdW5zaWduZWQgbG9uZwl1YXJ0Ml9waHlzOworCXVuc2lnbmVkIGxvbmcJdWFydDNfcGh5czsKKwl1bnNpZ25lZCBsb25nCXVhcnQ0X3BoeXM7CiB9OwogCiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzI0Mngodm9pZCk7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzI0M3godm9pZCk7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzM0M3godm9pZCk7Cit2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzM2eHgodm9pZCk7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzQ0M3godm9pZCk7CiAKIC8qIFRoZXNlIGdldCBjYWxsZWQgZnJvbSBvbWFwMl9zZXRfZ2xvYmFsc194eHh4KCksIGRvIG5vdCBjYWxsIHRoZXNlICovCkBAIC01OSw2ICs2OCw3IEBACiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3NkcmMoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfY29udHJvbChzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19wcmNtKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7Cit2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3VhcnQoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIAogLyoqCiAgKiBvbWFwX3Rlc3RfdGltZW91dCAtIGJ1c3ktbG9vcCwgdGVzdGluZyBhIGNvbmRpdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaAppbmRleCBhNzQ1ZDYyLi5hNTZkZWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaApAQCAtMTYwLDYgKzE2MCwxNCBAQAogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1NSQU1MRE81CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAyQzApCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfQ1NJCQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMkM0KQogCisvKiBBTTM1WFggb25seSBDT05UUk9MX0dFTkVSQUwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9NU1VTUEVORE1VWF82ICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMzgpCisjZGVmaW5lIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyICAgICAgICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDMxMCkKKyNkZWZpbmUgQU0zNVhYX0NPTlRST0xfREVWQ09ORjMgICAgICAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMzE0KQorI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9DQkFfUFJJT1JJVFkgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAzMjApCisjZGVmaW5lIEFNMzVYWF9DT05UUk9MX0xWTF9JTlRSX0NMRUFSICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDMyNCkKKyNkZWZpbmUgQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQgICAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMzI4KQorI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9JUFNTX0NMS19DVFJMICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAzMkMpCiAKIC8qIDM0eHggUEFEQ09ORiByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVAzNDNYX1BBRENPTkZfRVRLKGkpCQkoT01BUDJfQ09OVFJPTF9QQURDT05GUyArIDB4NWE4ICsgXApAQCAtMTk2LDYgKzIwNCw5IEBACiAjZGVmaW5lIE9NQVAzX1BBRENPTkZfU0FEMkRfTVNUQU5EQlkgICAweDI1MAogI2RlZmluZSBPTUFQM19QQURDT05GX1NBRDJEX0lETEVBQ0sgICAgMHgyNTQKIAorLyogNDR4eCBjb250cm9sIHN0YXR1cyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfQ09OVFJPTF9TVEFUVVMJCTB4MmM0CisKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGxpc3Qgb2YgcmVnaXN0ZXJzIGlzIG5vdCBjb21wcmVoZW5zaXZlIC0gdGhlcmUgYXJlIG1vcmUKICAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkLgpAQCAtMjU3LDYgKzI2OCwzMiBAQAogI2RlZmluZSBPTUFQMzQzWF9TQ1JBVENIUEFECQkoT01BUDM0M1hfQ1RSTF9CQVNFICsgMHg5MTApCiAjZGVmaW5lIE9NQVAzNDNYX1NDUkFUQ0hQQURfUk9NX09GRlNFVAkweDE5QwogCisvKiBBTTM1WFhfQ09OVFJPTF9JUFNTX0NMS19DVFJMIGJpdHMgKi8KKyNkZWZpbmUgQU0zNVhYX1VTQk9UR19WQlVTUF9DTEtfU0hJRlQgICAwCisjZGVmaW5lIEFNMzVYWF9DUEdNQUNfVkJVU1BfQ0xLX1NISUZUICAgMQorI2RlZmluZSBBTTM1WFhfVlBGRV9WQlVTUF9DTEtfU0hJRlQgICAgIDIKKyNkZWZpbmUgQU0zNVhYX0hFQ0NfVkJVU1BfQ0xLX1NISUZUICAgICAzCisjZGVmaW5lIEFNMzVYWF9VU0JPVEdfRkNMS19TSElGVCAgICAgICAgOAorI2RlZmluZSBBTTM1WFhfQ1BHTUFDX0ZDTEtfU0hJRlQgICAgICAgIDkKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfRkNMS19TSElGVCAgICAgICAgICAxMAorCisvKkFNMzVYWCBDT05UUk9MX0xWTF9JTlRSX0NMRUFSIGJpdHMqLworI2RlZmluZSBBTTM1WFhfQ1BHTUFDX0MwX01JU0NfUFVMU0VfQ0xSCUJJVCgwKQorI2RlZmluZSBBTTM1WFhfQ1BHTUFDX0MwX1JYX1BVTFNFX0NMUglCSVQoMSkKKyNkZWZpbmUgQU0zNVhYX0NQR01BQ19DMF9SWF9USFJFU0hfQ0xSCUJJVCgyKQorI2RlZmluZSBBTTM1WFhfQ1BHTUFDX0MwX1RYX1BVTFNFX0NMUglCSVQoMykKKyNkZWZpbmUgQU0zNVhYX1VTQk9UR1NTX0lOVF9DTFIJCUJJVCg0KQorI2RlZmluZSBBTTM1WFhfVlBGRV9DQ0RDX1ZEMF9JTlRfQ0xSCUJJVCg1KQorI2RlZmluZSBBTTM1WFhfVlBGRV9DQ0RDX1ZEMV9JTlRfQ0xSCUJJVCg2KQorI2RlZmluZSBBTTM1WFhfVlBGRV9DQ0RDX1ZEMl9JTlRfQ0xSCUJJVCg3KQorCisvKkFNMzVYWCBDT05UUk9MX0lQX1NXX1JFU0VUIGJpdHMqLworI2RlZmluZSBBTTM1WFhfVVNCT1RHU1NfU1dfUlNUCQlCSVQoMCkKKyNkZWZpbmUgQU0zNVhYX0NQR01BQ1NTX1NXX1JTVAkJQklUKDEpCisjZGVmaW5lIEFNMzVYWF9WUEZFX1ZCVVNQX1NXX1JTVAlCSVQoMikKKyNkZWZpbmUgQU0zNVhYX0hFQ0NfU1dfUlNUCQlCSVQoMykKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfUENMS19TV19SU1QJCUJJVCg0KQorCiAvKgogICogQ09OVFJPTCBPTUFQIFNUQVRVUyByZWdpc3RlciB0byBpZGVudGlmeSBPTUFQMyBmZWF0dXJlcwogICovCkBAIC0yOTIsOCArMzI5LDcgQEAKIAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIGV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXBfY3RybF9iYXNlX2dldCh2b2lkKTsKIGV4dGVybiB1OCBvbWFwX2N0cmxfcmVhZGIodTE2IG9mZnNldCk7CiBleHRlcm4gdTE2IG9tYXBfY3RybF9yZWFkdyh1MTYgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oCmluZGV4IGExNjJmNTguLmVkODc4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaApAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQ1BVX0gKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPHBsYXQvbXVsdGkuaD4KIAogLyoKICAqIE9tYXAgZGV2aWNlIHR5cGUgaS5lLiBFTVUvSFMvVFNUL0dQL0JBRApAQCAtNDQsNyArNDUsNyBAQAogaW50IG9tYXBfdHlwZSh2b2lkKTsKIAogc3RydWN0IG9tYXBfY2hpcF9pZCB7Ci0JdTggb2M7CisJdTE2IG9jOwogCXU4IHR5cGU7CiB9OwogCkBAIC03Niw3NSArNzcsNiBAQAogI2RlZmluZSBHRVRfT01BUF9SRVZJU0lPTigpCSgob21hcF9yZXYoKSA+PiA4KSAmIDB4ZmYpCiAKIC8qCi0gKiBUZXN0IGlmIG11bHRpY29yZSBPTUFQIHN1cHBvcnQgaXMgbmVlZGVkCi0gKi8KLSN1bmRlZiBNVUxUSV9PTUFQMQotI3VuZGVmIE1VTFRJX09NQVAyCi0jdW5kZWYgT01BUF9OQU1FCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAxCi0jICBkZWZpbmUgTVVMVElfT01BUDEKLSMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAxCi0jICBkZWZpbmUgTVVMVElfT01BUDEKLSMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwODUwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMQotIyAgZGVmaW5lIE1VTFRJX09NQVAxCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE1MTAKLSMgZW5kaWYKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAxCi0jICBkZWZpbmUgTVVMVElfT01BUDEKLSMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMTZ4eAotIyBlbmRpZgotI2VuZGlmCi0jaWYgKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpKQotIyBpZiAoZGVmaW5lZChPTUFQX05BTUUpIHx8IGRlZmluZWQoTVVMVElfT01BUDEpKQotIyAgZXJyb3IgIk9NQVAxIGFuZCBPTUFQMiBjYW4ndCBiZSBzZWxlY3RlZCBhdCB0aGUgc2FtZSB0aW1lIgotIyBlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLSMgaWZkZWYgT01BUF9OQU1FCi0jICB1bmRlZiAgTVVMVElfT01BUDIKLSMgIGRlZmluZSBNVUxUSV9PTUFQMgotIyBlbHNlCi0jICBkZWZpbmUgT01BUF9OQU1FIG9tYXAyNDIwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMgotIyAgZGVmaW5lIE1VTFRJX09NQVAyCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDI0MzAKLSMgZW5kaWYKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNDMwCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAyCi0jICBkZWZpbmUgTVVMVElfT01BUDIKLSMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMzQzMAotIyBlbmRpZgotI2VuZGlmCi0KLS8qCiAgKiBNYWNyb3MgdG8gZ3JvdXAgT01BUCBpbnRvIGNwdSBjbGFzc2VzLgogICogVGhlc2UgY2FuIGJlIHVzZWQgaW4gbW9zdCBwbGFjZXMuCiAgKiBjcHVfaXNfb21hcDd4eCgpOglUcnVlIGZvciBPTUFQNzMwLCBPTUFQODUwCkBAIC0xNTQsNiArODYsNyBAQAogICogY3B1X2lzX29tYXAyNDJ4KCk6CVRydWUgZm9yIE9NQVAyNDIwLCBPTUFQMjQyMiwgT01BUDI0MjMKICAqIGNwdV9pc19vbWFwMjQzeCgpOglUcnVlIGZvciBPTUFQMjQzMAogICogY3B1X2lzX29tYXAzNDN4KCk6CVRydWUgZm9yIE9NQVAzNDMwCisgKiBjcHVfaXNfb21hcDQ0M3goKToJVHJ1ZSBmb3IgT01BUDQ0MzAKICAqLwogI2RlZmluZSBHRVRfT01BUF9DTEFTUwkob21hcF9yZXYoKSAmIDB4ZmYpCiAKQEAgLTIzMiw3ICsxNjUsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1VTFRJX09NQVAyKQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjR4eAogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyeAogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQzeApAQCAtMjQwLDE0ICsxNzMsMTQgQEAKICMgIGRlZmluZSBjcHVfaXNfb21hcDI0MngoKQkJaXNfb21hcDI0MngoKQogIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQlpc19vbWFwMjQzeCgpCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAzNHh4CiAjICB1bmRlZiAgY3B1X2lzX29tYXAzNDN4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAzNHh4KCkJCWlzX29tYXAzNHh4KCkKICMgIGRlZmluZSBjcHVfaXNfb21hcDM0M3goKQkJaXNfb21hcDM0M3goKQogIyBlbmRpZgogI2Vsc2UKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKICMgIHVuZGVmICBjcHVfaXNfb21hcDI0eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDI0eHgoKQkJMQogIyBlbmRpZgpAQCAtMjU5LDcgKzE5Miw3IEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNDN4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNDN4KCkJCTEKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICMgIHVuZGVmICBjcHVfaXNfb21hcDM0eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDM0eHgoKQkJMQogIyBlbmRpZgpAQCAtMjg2LDYgKzIxOSw3IEBACiAgKiBjcHVfaXNfb21hcDI0MjMoKToJVHJ1ZSBmb3IgT01BUDI0MjMKICAqIGNwdV9pc19vbWFwMjQzMCgpOglUcnVlIGZvciBPTUFQMjQzMAogICogY3B1X2lzX29tYXAzNDMwKCk6CVRydWUgZm9yIE9NQVAzNDMwCisgKiBjcHVfaXNfb21hcDQ0MzAoKToJVHJ1ZSBmb3IgT01BUDQ0MzAKICAqIGNwdV9pc19vbWFwMzUwNSgpOglUcnVlIGZvciBPTUFQMzUwNQogICogY3B1X2lzX29tYXAzNTE3KCk6CVRydWUgZm9yIE9NQVAzNTE3CiAgKi8KQEAgLTMzNCw2ICsyNjgsNyBAQAogI2RlZmluZSBjcHVfaXNfb21hcDM1MDUoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDM1MTcoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDM0MzAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDQ0MzAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDM2MzAoKQkJMAogCiAvKgpAQCAtMzcxLDcgKzMwNiw3IEBACiAjIGRlZmluZSBjcHVfaXNfb21hcDE3MTAoKQkJaXNfb21hcDE3MTAoKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAjIHVuZGVmICBjcHVfaXNfb21hcDI0MjAKICMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMgogIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIzCkBAIC0zODIsNyArMzE3LDcgQEAKICMgZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQlpc19vbWFwMjQzMCgpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICMgdW5kZWYgY3B1X2lzX29tYXAzNDMwCiAjIHVuZGVmIGNwdV9pc19vbWFwMzUwMwogIyB1bmRlZiBjcHVfaXNfb21hcDM1MTUKQEAgLTQ3MSw5ICs0MDYsMTIgQEAKICNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18wCQkoMSA8PCA1KQogI2RlZmluZSBDSElQX0lTX09NQVAzNDMwRVMzXzEJCSgxIDw8IDYpCiAjZGVmaW5lIENISVBfSVNfT01BUDM2MzBFUzEJCSgxIDw8IDcpCisjZGVmaW5lIENISVBfSVNfT01BUDQ0MzBFUzEJCSgxIDw8IDgpCiAKICNkZWZpbmUgQ0hJUF9JU19PTUFQMjRYWAkJKENISVBfSVNfT01BUDI0MjAgfCBDSElQX0lTX09NQVAyNDMwKQogCisjZGVmaW5lIENISVBfSVNfT01BUDQ0MzAJCShDSElQX0lTX09NQVA0NDMwRVMxKQorCiAvKgogICogIkdFIiBoZXJlIHJlcHJlc2VudHMgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byIgaW4gdGVybXMgb2YgRVMKICAqIGxldmVscy4gIFNvIENISVBfR0VfT01BUDM0MzBFUzIgaXMgaW50ZW5kZWQgdG8gbWF0Y2ggYWxsIE9NQVAzNDMwCkBAIC01MDEsNiArNDM5LDcgQEAKICNkZWZpbmUgT01BUDNfSEFTX1NHWAkJCUJJVCgyKQogI2RlZmluZSBPTUFQM19IQVNfTkVPTgkJCUJJVCgzKQogI2RlZmluZSBPTUFQM19IQVNfSVNQCQkJQklUKDQpCisjZGVmaW5lIE9NQVAzX0hBU18xOTJNSFpfQ0xLCQlCSVQoNSkKIAogI2RlZmluZSBPTUFQM19IQVNfRkVBVFVSRShmZWF0LGZsYWcpCQkJXAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb21hcDNfaGFzXyAjI2ZlYXQodm9pZCkJXApAQCAtNTEzLDUgKzQ1Miw2IEBACiBPTUFQM19IQVNfRkVBVFVSRShpdmEsIElWQSkKIE9NQVAzX0hBU19GRUFUVVJFKG5lb24sIE5FT04pCiBPTUFQM19IQVNfRkVBVFVSRShpc3AsIElTUCkKK09NQVAzX0hBU19GRUFUVVJFKDE5Mm1oel9jbGssIDE5Mk1IWl9DTEspCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kaXNwbGF5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaAppbmRleCBjNjZlNDY0Li4xYzUyOWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaApAQCAtMjMzLDggKzIzMywxMiBAQAogdm9pZCBkc2lfYnVzX2xvY2sodm9pZCk7CiB2b2lkIGRzaV9idXNfdW5sb2NrKHZvaWQpOwogaW50IGRzaV92Y19kY3Nfd3JpdGUoaW50IGNoYW5uZWwsIHU4ICpkYXRhLCBpbnQgbGVuKTsKK2ludCBkc2lfdmNfZGNzX3dyaXRlXzAoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQpOworaW50IGRzaV92Y19kY3Nfd3JpdGVfMShpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggcGFyYW0pOwogaW50IGRzaV92Y19kY3Nfd3JpdGVfbm9zeW5jKGludCBjaGFubmVsLCB1OCAqZGF0YSwgaW50IGxlbik7CiBpbnQgZHNpX3ZjX2Rjc19yZWFkKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1OCAqYnVmLCBpbnQgYnVmbGVuKTsKK2ludCBkc2lfdmNfZGNzX3JlYWRfMShpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmRhdGEpOworaW50IGRzaV92Y19kY3NfcmVhZF8yKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1MTYgKmRhdGEpOwogaW50IGRzaV92Y19zZXRfbWF4X3J4X3BhY2tldF9zaXplKGludCBjaGFubmVsLCB1MTYgbGVuKTsKIGludCBkc2lfdmNfc2VuZF9udWxsKGludCBjaGFubmVsKTsKIGludCBkc2lfdmNfc2VuZF9idGFfc3luYyhpbnQgY2hhbm5lbCk7CkBAIC0zNjcsNiArMzcxLDEwIEBACiAKIAlpbnQgKCphcHBseSkoc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IpOwogCWludCAoKndhaXRfZm9yX2dvKShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1ncik7CisJaW50ICgqd2FpdF9mb3JfdnN5bmMpKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKTsKKworCWludCAoKmVuYWJsZSkoc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IpOworCWludCAoKmRpc2FibGUpKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKTsKIH07CiAKIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgewpAQCAtNDI2LDE2ICs0MzQsMTEgQEAKIAkJaW50IGFjYjsJLyogYWMtYmlhcyBwaW4gZnJlcXVlbmN5ICovCiAKIAkJZW51bSBvbWFwX3BhbmVsX2NvbmZpZyBjb25maWc7Ci0KLQkJdTggcmVjb21tZW5kZWRfYnBwOwotCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmN0cmw7CiAJfSBwYW5lbDsKIAogCXN0cnVjdCB7CiAJCXU4IHBpeGVsX3NpemU7CiAJCXN0cnVjdCByZmJpX3RpbWluZ3MgcmZiaV90aW1pbmdzOwotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpwYW5lbDsKIAl9IGN0cmw7CiAKIAlpbnQgcmVzZXRfZ3BpbzsKQEAgLTQ2MCw0OSArNDYzLDYgQEAKIAogCWVudW0gb21hcF9kc3NfZGlzcGxheV9zdGF0ZSBzdGF0ZTsKIAotCWludCAoKmVuYWJsZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQl2b2lkICgqZGlzYWJsZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0JaW50ICgqcmVzdW1lKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCi0Jdm9pZCAoKmdldF9yZXNvbHV0aW9uKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQl1MTYgKnhyZXMsIHUxNiAqeXJlcyk7Ci0JaW50ICgqZ2V0X3JlY29tbWVuZGVkX2JwcCkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCWludCAoKmNoZWNrX3RpbWluZ3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOwotCXZvaWQgKCpzZXRfdGltaW5ncykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncyk7Ci0Jdm9pZCAoKmdldF90aW1pbmdzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKLQlpbnQgKCp1cGRhdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCSAgICAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCk7Ci0JaW50ICgqc3luYykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQlpbnQgKCp3YWl0X3ZzeW5jKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCi0JaW50ICgqc2V0X3VwZGF0ZV9tb2RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlKTsKLQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKQotCQkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCWludCAoKmVuYWJsZV90ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSk7Ci0JaW50ICgqZ2V0X3RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCi0JdTggKCpnZXRfcm90YXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCWludCAoKnNldF9yb3RhdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgdTggcm90YXRlKTsKLQotCWJvb2wgKCpnZXRfbWlycm9yKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCWludCAoKnNldF9taXJyb3IpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOwotCi0JaW50ICgqcnVuX3Rlc3QpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgaW50IHRlc3QpOwotCWludCAoKm1lbW9yeV9yZWFkKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQl2b2lkICpidWYsIHNpemVfdCBzaXplLAotCQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpOwotCi0JaW50ICgqc2V0X3dzcykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB1MzIgd3NzKTsKLQl1MzIgKCpnZXRfd3NzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCiAJLyogcGxhdGZvcm0gc3BlY2lmaWMgICovCiAJaW50ICgqcGxhdGZvcm1fZW5hYmxlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogCXZvaWQgKCpwbGF0Zm9ybV9kaXNhYmxlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwpAQCAtNTIyLDExICs0ODIsMTcgQEAKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXkpOwogCWludCAoKnJ1bl90ZXN0KShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5LCBpbnQgdGVzdCk7CiAKLQl2b2lkICgqc2V0dXBfdXBkYXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCk7CisJaW50ICgqc2V0X3VwZGF0ZV9tb2RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlKTsKKwllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKSgKKwkJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CisKKwlpbnQgKCp1cGRhdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCSAgICAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCk7CisJaW50ICgqc3luYykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKIAogCWludCAoKmVuYWJsZV90ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSk7Ci0JaW50ICgqd2FpdF9mb3JfdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CisJaW50ICgqZ2V0X3RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogCiAJdTggKCpnZXRfcm90YXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogCWludCAoKnNldF9yb3RhdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgdTggcm90YXRlKTsKQEAgLTUzNyw2ICs1MDMsMjAgQEAKIAlpbnQgKCptZW1vcnlfcmVhZCkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAogCQkJdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwKIAkJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoKTsKKworCXZvaWQgKCpnZXRfcmVzb2x1dGlvbikoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJdTE2ICp4cmVzLCB1MTYgKnlyZXMpOworCWludCAoKmdldF9yZWNvbW1lbmRlZF9icHApKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CisKKwlpbnQgKCpjaGVja190aW1pbmdzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKKwl2b2lkICgqc2V0X3RpbWluZ3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOworCXZvaWQgKCpnZXRfdGltaW5ncykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncyk7CisKKwlpbnQgKCpzZXRfd3NzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIHUzMiB3c3MpOworCXUzMiAoKmdldF93c3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CiB9OwogCiBpbnQgb21hcF9kc3NfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgKik7CkBAIC01NjEsNiArNTQxLDEwIEBACiBpbnQgb21hcF9kc3NfZ2V0X251bV9vdmVybGF5cyh2b2lkKTsKIHN0cnVjdCBvbWFwX292ZXJsYXkgKm9tYXBfZHNzX2dldF9vdmVybGF5KGludCBudW0pOwogCit2b2lkIG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXUxNiAqeHJlcywgdTE2ICp5cmVzKTsKK2ludCBvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCiB0eXBlZGVmIHZvaWQgKCpvbWFwX2Rpc3BjX2lzcl90KSAodm9pZCAqYXJnLCB1MzIgbWFzayk7CiBpbnQgb21hcF9kaXNwY19yZWdpc3Rlcl9pc3Iob21hcF9kaXNwY19pc3JfdCBpc3IsIHZvaWQgKmFyZywgdTMyIG1hc2spOwogaW50IG9tYXBfZGlzcGNfdW5yZWdpc3Rlcl9pc3Iob21hcF9kaXNwY19pc3JfdCBpc3IsIHZvaWQgKmFyZywgdTMyIG1hc2spOwpAQCAtNTcyLDQgKzU1NiwzNSBAQAogI2RlZmluZSB0b19kc3NfZHJpdmVyKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIsIGRyaXZlcikKICNkZWZpbmUgdG9fZHNzX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlLCBkZXYpCiAKK3ZvaWQgb21hcGRzc19kc2lfdmNfZW5hYmxlX2hzKGludCBjaGFubmVsLCBib29sIGVuYWJsZSk7CitpbnQgb21hcGRzc19kc2lfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOworCitpbnQgb21hcF9kc2lfcHJlcGFyZV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJCSAgICB1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgpOworaW50IG9tYXBfZHNpX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCWludCBjaGFubmVsLAorCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCwKKwkJdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiksIHZvaWQgKmRhdGEpOworCitpbnQgb21hcGRzc19kc2lfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK3ZvaWQgb21hcGRzc19kc2lfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CisKK2ludCBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwordm9pZCBvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK3ZvaWQgZHBpX3NldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOworaW50IGRwaV9jaGVja190aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOworCitpbnQgb21hcGRzc19zZGlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK3ZvaWQgb21hcGRzc19zZGlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CisKK2ludCBvbWFwZHNzX3JmYmlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK3ZvaWQgb21hcGRzc19yZmJpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworaW50IG9tYXBfcmZiaV9wcmVwYXJlX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXUxNiAqeCwgdTE2ICp5LCB1MTYgKncsIHUxNiAqaCk7CitpbnQgb21hcF9yZmJpX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoLAorCQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKiksIHZvaWQgKmRhdGEpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLTQ0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc2N2NiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEtNDR4eC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogT01BUDQgU0RNQSBjaGFubmVsIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogU2FudG9zaCBTaGlsaW1rYXIgKHNhbnRvc2guc2hpbGlta2FyQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICogUGF1bCBXYWxtc2xleSAocGF1bEBwd3Nhbi5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9PTUFQNDRYWF9ETUFfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUDQ0WFhfRE1BX0gKKworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1lTX1JFUTAJCQkyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TWVNfUkVRMQkJCTMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0dQTUMJCQk0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRElTUENfUkVRCQk2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TWVNfUkVRMgkJCTcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQVNQMV9BWEVWVAkJOAorI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTEJCQk5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMgkJCTEwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0FTUDFfQVJFVlQJCTExCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMwkJCTEyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRNAkJCTEzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfUkZCSV9SRVEJCTE0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1RYMAkJCTE1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1JYMAkJCTE2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDJfVFgJCQkxNworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1JYCQkJMTgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQM19UWAkJCTE5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDNfUlgJCQkyMAorI2RlZmluZSBPTUFQNDRYWF9ETUFfQzJDX1NTQ01fR1BPMAkJMjEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0MyQ19TU0NNX0dQTzEJCTIyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1RYMQkJCTIzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1JYMQkJCTI0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMzX1RYCQkJMjUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzNfUlgJCQkyNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMV9UWAkJCTI3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMxX1JYCQkJMjgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzJfVFgJCQkyOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMl9SWAkJCTMwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDRfVFgJCQkzMQorI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYCQkJMzIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMV9UWAkJCTMzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDFfUlgJCQkzNAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDAJCQkzNQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDAJCQkzNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDEJCQkzNworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDEJCQkzOAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDIJCQkzOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDIJCQk0MAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDMJCQk0MQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDMJCQk0MgorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9UWDAJCQk0MworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9SWDAJCQk0NAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9UWDEJCQk0NQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9SWDEJCQk0NgorI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMl9UWAkJCTQ3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMyX1JYCQkJNDgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQxX1RYCQkJNDkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQxX1JYCQkJNTAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQyX1RYCQkJNTEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQyX1JYCQkJNTIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQzX1RYCQkJNTMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQzX1JYCQkJNTQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQ0X1RYCQkJNTUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQ0X1JYCQkJNTYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzRfVFgJCQk1NworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNF9SWAkJCTU4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM1X1RYCQkJNTkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzVfUlgJCQk2MAorI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMV9UWAkJCTYxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMxX1JYCQkJNjIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEzCQkJNjQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DUERNX1VQCQkJNjUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DUERNX0RMCQkJNjYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RNSUNfUkVRCQkJNjcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0MyQ19TU0NNX0dQTzIJCTY4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9DMkNfU1NDTV9HUE8zCQk2OQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJNF9UWDAJCQk3MAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJNF9SWDAJCQk3MQorI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMAkJNzIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTEJCTczCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEyCQk3NAorI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMwkJNzUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19IRE1JX1JFUQkJNzYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzNfVFgJCQk3NworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DM19SWAkJCTc4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VU0lNX1RYCQkJNzkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VTSU1fUlgJCQk4MAorI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMAkJODEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTEJCTgyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEyCQk4MworI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMwkJODQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1RYMAkJODUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1RYMQkJODYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1RYMgkJODcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1RYMwkJODgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1JYMAkJODkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1JYMQkJOTAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1JYMgkJOTEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMxX1JYMwkJOTIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1RYMAkJOTMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1RYMQkJOTQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1RYMgkJOTUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1RYMwkJOTYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1JYMAkJOTcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1JYMQkJOTgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1JYMgkJOTkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NMSU1CVVMyX1JYMwkJMTAwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzAJCQkxMDEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVFfMQkJCTEwMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUV8yCQkJMTAzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzMJCQkxMDQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVFfNAkJCTEwNQorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUV81CQkJMTA2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzYJCQkxMDcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVFfNwkJCTEwOAorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMV9QX0NUWF9JTl9SRVEJCTEwOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMV9QX0RBVEFfSU5fUkVRCQkxMTAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FFUzFfUF9EQVRBX09VVF9SRVEJMTExCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BRVMyX1BfQ1RYX0lOX1JFUQkJMTEyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BRVMyX1BfREFUQV9JTl9SRVEJCTExMworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMl9QX0RBVEFfT1VUX1JFUQkxMTQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RFU19QX0NUWF9JTl9SRVEJCTExNQorI2RlZmluZSBPTUFQNDRYWF9ETUFfREVTX1BfREFUQV9JTl9SRVEJCTExNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfREVTX1BfREFUQV9PVVRfUkVRCQkxMTcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NIQTJfQ1RYSU5fUAkJMTE4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TSEEyX0RJTl9QCQkJMTE5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TSEEyX0NUWE9VVF9QCQkxMjAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FFUzFfUF9DT05URVhUX09VVF9SRVEJMTIxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BRVMyX1BfQ09OVEVYVF9PVVRfUkVRCTEyMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDNF9UWAkJCTEyNAorI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDNF9SWAkJCTEyNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCmluZGV4IDRlZGU5ZTEuLjAyMjMyY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaApAQCAtMjEsNiArMjEsOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAorLyogTW92ZSBvbWFwNCBzcGVjaWZpYyBkZWZpbmVzIHRvIGRtYS00NHh4LmggKi8KKyNpbmNsdWRlICJkbWEtNDR4eC5oIgorCiAvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCiAjZGVmaW5lIE9NQVAxX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCiAKQEAgLTMxNiw4OSArMzE5LDYgQEAKICNkZWZpbmUgT01BUDM0WFhfRE1BX1VTSU1fVFgJCTc5CS8qIFNfRE1BXzc4ICovCiAjZGVmaW5lIE9NQVAzNFhYX0RNQV9VU0lNX1JYCQk4MAkvKiBTX0RNQV83OSAqLwogCi0vKiBETUEgcmVxdWVzdCBsaW5lcyBmb3IgNDR4eCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RJU1BDX1JFUQk2CS8qIFNfRE1BXzUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEyCQk3CS8qIFNfRE1BXzYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVExCQk5CS8qIFNfRE1BXzggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVEyCQkxMAkvKiBTX0RNQV85ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMwkJMTIJLyogU19ETUFfMTEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVE0CQkxMwkvKiBTX0RNQV8xMiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX1JGQklfUkVRCTE0CS8qIFNfRE1BXzEzICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1RYMAkJMTUJLyogU19ETUFfMTQgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTNfUlgwCQkxNgkvKiBTX0RNQV8xNSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1RYCQkxNwkvKiBTX0RNQV8xNiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1JYCQkxOAkvKiBTX0RNQV8xNyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AzX1RYCQkxOQkvKiBTX0RNQV8xOCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AzX1JYCQkyMAkvKiBTX0RNQV8xOSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19UWDEJCTIzCS8qIFNfRE1BXzIyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1JYMQkJMjQJLyogU19ETUFfMjMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzNfVFgJCTI1CS8qIFNfRE1BXzI0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMzX1JYCQkyNgkvKiBTX0RNQV8yNSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMV9UWAkJMjcJLyogU19ETUFfMjYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzFfUlgJCTI4CS8qIFNfRE1BXzI3ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMyX1RYCQkyOQkvKiBTX0RNQV8yOCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMl9SWAkJMzAJLyogU19ETUFfMjkgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQNF9UWAkJMzEJLyogU19ETUFfMzAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQNF9SWAkJMzIJLyogU19ETUFfMzEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMV9UWAkJMzMJLyogU19ETUFfMzIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMV9SWAkJMzQJLyogU19ETUFfMzMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgwCQkzNQkvKiBTX0RNQV8zNCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDAJCTM2CS8qIFNfRE1BXzM1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1RYMQkJMzcJLyogU19ETUFfMzYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgxCQkzOAkvKiBTX0RNQV8zNyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDIJCTM5CS8qIFNfRE1BXzM4ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1JYMgkJNDAJLyogU19ETUFfMzkgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgzCQk0MQkvKiBTX0RNQV80MCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDMJCTQyCS8qIFNfRE1BXzQxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1RYMAkJNDMJLyogU19ETUFfNDIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfUlgwCQk0NAkvKiBTX0RNQV80MyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9UWDEJCTQ1CS8qIFNfRE1BXzQ0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1JYMQkJNDYJLyogU19ETUFfNDUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzJfVFgJCTQ3CS8qIFNfRE1BXzQ2ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMyX1JYCQk0OAkvKiBTX0RNQV80NyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDFfVFgJCTQ5CS8qIFNfRE1BXzQ4ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMV9SWAkJNTAJLyogU19ETUFfNDkgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQyX1RYCQk1MQkvKiBTX0RNQV81MCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDJfUlgJCTUyCS8qIFNfRE1BXzUxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUM19UWAkJNTMJLyogU19ETUFfNTIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQzX1JYCQk1NAkvKiBTX0RNQV81MyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDRfVFgJCTU1CS8qIFNfRE1BXzU0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUNF9SWAkJNTYJLyogU19ETUFfNTUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzRfVFgJCTU3CS8qIFNfRE1BXzU2ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM0X1JYCQk1OAkvKiBTX0RNQV81NyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNV9UWAkJNTkJLyogU19ETUFfNTggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzVfUlgJCTYwCS8qIFNfRE1BXzU5ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMxX1RYCQk2MQkvKiBTX0RNQV82MCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMV9SWAkJNjIJLyogU19ETUFfNjEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEzCQk2NAkvKiBTX0RNQV82MyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNQRE1fVVAJCTY1CS8qIFNfRE1BXzY0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ1BETV9ETAkJNjYJLyogU19ETUFfNjUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTRfVFgwCQk3MAkvKiBTX0RNQV82OSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJNF9SWDAJCTcxCS8qIFNfRE1BXzcwICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEwCTcyCS8qIFNfRE1BXzcxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVExCTczCS8qIFNfRE1BXzcyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEyCTc0CS8qIFNfRE1BXzczICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEzCTc1CS8qIFNfRE1BXzc0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfSERNSV9SRVEJNzYJLyogU19ETUFfNzUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzNfVFgJCTc3CS8qIFNfRE1BXzc2ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMzX1JYCQk3OAkvKiBTX0RNQV83NyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVVNJTV9UWAkJNzkJLyogU19ETUFfNzggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VTSU1fUlgJCTgwCS8qIFNfRE1BXzc5ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEwCTgxCS8qIFNfRE1BXzgwICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVExCTgyCS8qIFNfRE1BXzgxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEyCTgzCS8qIFNfRE1BXzgyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEzCTg0CS8qIFNfRE1BXzgzICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMAkJMTAxCS8qIFNfRE1BXzEwMCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTEJCTEwMgkvKiBTX0RNQV8xMDEgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVEyCQkxMDMJLyogU19ETUFfMTAyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMwkJMTA0CS8qIFNfRE1BXzEwMyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTQJCTEwNQkvKiBTX0RNQV8xMDQgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVE1CQkxMDYJLyogU19ETUFfMTA1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRNgkJMTA3CS8qIFNfRE1BXzEwNiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTcJCTEwOAkvKiBTX0RNQV8xMDcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfVFgJCTEyNAkvKiBTX0RNQV8xMjMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfUlgJCTEyNQkvKiBTX0RNQV8xMjQgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBPTUFQMV9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2MzI3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaApAQCAtMCwwICsxLDE2IEBACisvKgorICogRmxhc2ggc3VwcG9ydCBmb3IgT01BUDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19PTUFQX0ZMQVNIX0gKKyNkZWZpbmUgX19PTUFQX0ZMQVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKworZXh0ZXJuIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IGVuYWJsZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaAppbmRleCBlMDgxMzM4Li4xNDU4MzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaApAQCAtMjcsNiArMjcsOCBAQAogCiAjZGVmaW5lIEdQTUNfQ09ORklHCQkweDUwCiAjZGVmaW5lIEdQTUNfU1RBVFVTCQkweDU0CisjZGVmaW5lIEdQTUNfQ1MwX0JBU0UJCTB4NjAKKyNkZWZpbmUgR1BNQ19DU19TSVpFCQkweDMwCiAKICNkZWZpbmUgR1BNQ19DT05GSUcxX1dSQVBCVVJTVF9TVVBQICAgICAoMSA8PCAzMSkKICNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURNVUxUSVBMRV9TVVBQICAoMSA8PCAzMCkKQEAgLTExMCw2ICsxMTIsNiBAQAogZXh0ZXJuIGludCBncG1jX3ByZWZldGNoX3N0YXR1cyh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzX2dwbWNfc2F2ZV9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19yZXN0b3JlX2NvbnRleHQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaTJjLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2kyYy5oCmluZGV4IDU4NWQ5Y2EuLjg3ZjZiZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaTJjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pMmMuaApAQCAtMzQsNiArMzQsNSBAQAogfQogI2VuZGlmCiAKLWludCBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKLQkJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAotCQkJCSB1bnNpZ25lZCBsZW4pOwordm9pZCBfX2luaXQgb21hcDFfaTJjX211eF9waW5zKGludCBidXNfaWQpOwordm9pZCBfX2luaXQgb21hcDJfaTJjX211eF9waW5zKGludCBidXNfaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oCmluZGV4IGEzZTdiNDcuLjEyOGI1NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmgKQEAgLTE1OCwxMCArMTU4LDYgQEAKICAqIFZQT00zNDMwIHdhcyBub3Qgd29ya2luZyBmb3IgSW50IGNvbnRyb2xsZXIKICAqLwogCi0jZGVmaW5lIEw0X1dLXzM0WFhfUEhZUwkJTDRfV0tfMzRYWF9CQVNFCS8qIDB4NDgzMDAwMDAgLS0+IDB4ZmEzMDAwMDAgKi8KLSNkZWZpbmUgTDRfV0tfMzRYWF9WSVJUCQkoTDRfV0tfMzRYWF9QSFlTICsgT01BUDJfTDRfSU9fT0ZGU0VUKQotI2RlZmluZSBMNF9XS18zNFhYX1NJWkUJCVNaXzFNCi0KICNkZWZpbmUgTDRfUEVSXzM0WFhfUEhZUwlMNF9QRVJfMzRYWF9CQVNFCiAJCQkJCQkvKiAweDQ5MDAwMDAwIC0tPiAweGZiMDAwMDAwICovCiAjZGVmaW5lIEw0X1BFUl8zNFhYX1ZJUlQJKEw0X1BFUl8zNFhYX1BIWVMgKyBPTUFQMl9MNF9JT19PRkZTRVQpCkBAIC0yMDQsMTEgKzIwMCw2IEBACiAjZGVmaW5lIEw0XzQ0WFhfVklSVAkJKEw0XzQ0WFhfUEhZUyArIE9NQVAyX0w0X0lPX09GRlNFVCkKICNkZWZpbmUgTDRfNDRYWF9TSVpFCQlTWl80TQogCi0KLSNkZWZpbmUgTDRfV0tfNDRYWF9QSFlTCQlMNF9XS180NFhYX0JBU0UJLyogMHg0YTMwMDAwMCAtLT4gMHhmYzMwMDAwMCAqLwotI2RlZmluZSBMNF9XS180NFhYX1ZJUlQJCShMNF9XS180NFhYX1BIWVMgKyBPTUFQMl9MNF9JT19PRkZTRVQpCi0jZGVmaW5lIEw0X1dLXzQ0WFhfU0laRQkJU1pfMU0KLQogI2RlZmluZSBMNF9QRVJfNDRYWF9QSFlTCUw0X1BFUl80NFhYX0JBU0UKIAkJCQkJCS8qIDB4NDgwMDAwMDAgLS0+IDB4ZmEwMDAwMDAgKi8KICNkZWZpbmUgTDRfUEVSXzQ0WFhfVklSVAkoTDRfUEVSXzQ0WFhfUEhZUyArIE9NQVAyX0w0X0lPX09GRlNFVCkKQEAgLTI2OCw3ICsyNTksMzggQEAKIGV4dGVybiB2b2lkIG9tYXAxX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMV9pbml0X2NvbW1vbl9odyh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAorZXh0ZXJuIHZvaWQgb21hcDI0MnhfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDI0MnhfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorZXh0ZXJuIHZvaWQgb21hcDI0M3hfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDI0M3hfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworZXh0ZXJuIHZvaWQgb21hcDM0eHhfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDM0eHhfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorZXh0ZXJuIHZvaWQgb21hcDQ0eHhfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDQ0eHhfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworfQorI2VuZGlmCisKIGV4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMCwKIAkJCQkgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLTQ0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy00NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4MzIyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy00NHh4LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBPTUFQNCBJbnRlcnJ1cHQgbGluZXMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFNhbnRvc2ggU2hpbGlta2FyIChzYW50b3NoLnNoaWxpbWthckB0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX09NQVA0NFhYX0lSUVNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUDQ0WFhfSVJRU19ICisKKy8qIE9NQVA0NFhYIElSUXMgbnVtYmVycyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBPTUFQNDRYWF9JUlFfTE9DQUxUSU1FUgkJCTI5CisjZGVmaW5lIE9NQVA0NFhYX0lSUV9MT0NBTFdEVAkJCTMwCisKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVAkJCTMyCisKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1BMMzEwCQkJKDAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQ1RJMAkJCSgxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0NUSTEJCQkoMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9FTE0JCQkoNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TWVNfMU4JCQkoNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TRUNVUklUWV9FVkVOVFMJCSg4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0wzX0RCRwkJCSg5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0wzX0FQUAkJCSgxMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9QUkNNCQkJKDExICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NETUFfMAkJCSgxMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TRE1BXzEJCQkoMTMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0RNQV8yCQkJKDE0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NETUFfMwkJCSgxNSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQ0JTUDQJCQkoMTYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTUNCU1AxCQkJKDE3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NSX01DVQkJCSgxOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUl9DT1JFCQkJKDE5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQTUMJCQkoMjAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR0ZYCQkJKDIxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01DQlNQMgkJCSgyMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQ0JTUDMJCQkoMjMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSVNTXzUJCQkoMjQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRFNTX0RJU1BDCQkJKDI1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01BSUxfVTAJCQkoMjYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQzJDX1NTQ01fMAkJCSgyNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9URVNMQV9NTVUJCQkoMjggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzEJCQkoMjkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzIJCQkoMzAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzMJCQkoMzEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzQJCQkoMzIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzUJCQkoMzMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BJTzYJCQkoMzQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfVVNJTQkJCSgzNSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9XRFQzCQkJKDM2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDEJCQkoMzcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUMgkJCSgzOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQzCQkJKDM5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDQJCQkoNDAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUNQkJCSg0MSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQ2CQkJKDQyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDcJCQkoNDMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUOAkJCSg0NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQ5CQkJKDQ1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDEwCQkJKDQ2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDExCQkJKDQ3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NQSTQJCQkoNDggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0hBMV9TCQkJKDQ5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0ZQS0FfU0lOVFJFUVVFU1RfUwkJKDUwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NIQTFfUAkJCSg1MSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9STkcJCQkoNTIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRFNTX0RTSTEJCQkoNTMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSTJDMQkJCSg1NiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9JMkMyCQkJKDU3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0hEUQkJCSg1OCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NTUM1CQkJKDU5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0kyQzMJCQkoNjEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSTJDNAkJCSg2MiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9BRVMyX1MJCQkoNjMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQUVTMl9QCQkJKDY0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NQSTEJCQkoNjUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU1BJMgkJCSg2NiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9IU0lfUDEJCQkoNjcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSFNJX1AyCQkJKDY4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0ZESUZfMwkJCSg2OSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9VQVJUNAkJCSg3MCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9IU0lfRE1BCQkJKDcxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1VBUlQxCQkJKDcyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1VBUlQyCQkJKDczICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1VBUlQzCQkJKDc0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1BCSUFTCQkJKDc1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX09IQ0kJCQkoNzYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRUhDSQkJCSg3NyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9UTEwJCQkoNzggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQUVTMV9TCQkJKDc5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1dEVDIJCQkoODAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfREVTX1MJCQkoODEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfREVTX1AJCQkoODIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTU1DMQkJCSg4MyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9EU1NfRFNJMgkJCSg4NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9BRVMxX1AJCQkoODUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTU1DMgkJCSg4NiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NUFVfSUNSCQkJKDg3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0MyQ19TU0NNXzEJCQkoODggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRlNVU0IJCQkoODkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRlNVU0JfU01JCQkJKDkwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NQSTMJCQkoOTEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSFNfVVNCX01DX04JCSg5MiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9IU19VU0JfRE1BX04JCSg5MyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NTUMzCQkJKDk0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDEyCQkJKDk1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01NQzQJCQkoOTYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0xJTUJVUzEJCQkoOTcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0xJTUJVUzIJCQkoOTggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQUJFCQkJKDk5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RVQ0FUSV9NTVUJCQkoMTAwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RTU19IRE1JCQkJKDEwMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUl9JVkEJCQkoMTAyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0lWQV9IRF9QT1NZTkNJVFJQRU5EXzEJKDEwMyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9JVkFfSERfUE9TWU5DSVRSUEVORF8wCSgxMDQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSVZBX0hEX1BPTUJJTlRSUEVORF8wCSgxMDcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTUNBU1AxX0FSCQkJKDEwOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQ0FTUDFfQVgJCQkoMTA5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0VNSUY0XzEJCQkoMTEwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0VNSUY0XzIJCQkoMTExICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01DUERNCQkJKDExMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9ETU0JCQkoMTEzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RNSUMJCQkoMTE0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0NETUFfMAkJCSgxMTUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQ0RNQV8xCQkJKDExNiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9DRE1BXzIJCQkoMTE3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0NETUFfMwkJCSgxMTggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU1lTXzJOCQkJKDExOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9LQkRfQ1RMCQkJKDEyMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9VTklQUk8xCQkJKDEyNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaAppbmRleCBjMGFiN2M4Li5iNjUwODhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtMjgsNiArMjgsOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAogCisvKiBBbGwgT01BUDQgc3BlY2lmaWMgZGVmaW5lcyBhcmUgbW92ZWQgdG8gaXJxcy00NHh4LmggKi8KKyNpbmNsdWRlICJpcnFzLTQ0eHguaCIKKwogLyoKICAqIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCiAgKgpAQCAtMzQ0LDk1ICszNDcsMTYgQEAKIAogI2RlZmluZQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCiAKLQotI2RlZmluZSBJUlFfR0lDX1NUQVJUCQkzMgotI2RlZmluZSBJTlRfNDRYWF9MT0NBTFRJTUVSX0lSUQkyOQotI2RlZmluZSBJTlRfNDRYWF9MT0NBTFdEVF9JUlEJMzAKLQotI2RlZmluZSBJTlRfNDRYWF9CRU5DSF9NUFVfRU1VTAkoMyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NTTV9BQk9SVF9JUlEJKDYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TWVNfTklSUQkoNyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0QyRF9GV19JUlEJKDggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9QUkNNX01QVV9JUlEJKDExICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU0RNQV9JUlEwCSgxMiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NETUFfSVJRMQkoMTMgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TRE1BX0lSUTIJKDE0ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU0RNQV9JUlEzCSgxNSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0lTU19JUlEJKDI0ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfRFNTX0lSUQkoMjUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQUlMX1UwX01QVQkoMjYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9EU1BfTU1VCSgyOCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVIxCSgzNyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVIyCSgzOCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVIzCSgzOSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI0CSg0MCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI1CSg0MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI2CSg0MiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI3CSg0MyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI4CSg0NCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVI5CSg0NSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVIxMAkoNDYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSMTEJKDQ3ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfR1BUSU1FUjEyCSg5NSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NIQTFNRDUJKDUxICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSTJDMV9JUlEJKDU2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSTJDMl9JUlEJKDU3ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSERRX0lSUQkoNTggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TUEkxX0lSUQkoNjUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TUEkyX0lSUQkoNjYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9IU0lfMV9JUlEwCSg2NyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0hTSV8yX0lSUTEJKDY4ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSFNJXzFfRE1BSVJRCSg3MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VBUlQxX0lSUQkoNzIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VQVJUMl9JUlEJKDczICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVUFSVDNfSVJRCSg3NCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VBUlQ0X0lSUQkoNzAgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VU0JfSVJRX05JU08JKDc2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVVNCX0lSUV9JU08JKDc3ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVVNCX0lSUV9IR0VOCSg3OCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VTQl9JUlFfSFNPRgkoNzkgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VU0JfSVJRX09URwkoODAgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDRfSVJRX1RYCSg4MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01DQlNQNF9JUlFfUlgJKDgyICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTU1DX0lSUQkoODMgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NTUMyX0lSUQkoODYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDJfSVJRX1RYCSg4OSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01DQlNQMl9JUlFfUlgJKDkwICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1BJM19JUlEJKDkxICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1BJNV9JUlEJKDY5ICsgSVJRX0dJQ19TVEFSVCkKLQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDVfSVJRCSgxNiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NHhYX01DQlNQMV9JUlEJKDE3ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTUNCU1AyX0lSUQkoMjIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDNfSVJRCSgyMyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01DQlNQNF9JUlEJKDI3ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSFNfVVNCX01DCSg5MiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0hTX1VTQl9ETUEJKDkzICsgSVJRX0dJQ19TVEFSVCkKLQotI2RlZmluZSBJTlRfNDRYWF9HUElPX0JBTksxCSgyOSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQSU9fQkFOSzIJKDMwICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfR1BJT19CQU5LMwkoMzEgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUElPX0JBTks0CSgzMiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQSU9fQkFOSzUJKDMzICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfR1BJT19CQU5LNgkoMzQgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VU0lNX0lSUQkoMzUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9XRFQzX0lSUQkoMzYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TUEk0X0lSUQkoNDggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TSEExTUQ1Ml9JUlEJKDQ5ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfRlBLQV9SRUFEWV9JUlEJKDUwICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU0hBMU1ENTFfSVJRCSg1MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1JOR19JUlEJKDUyICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTU1DNV9JUlEJKDU5ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSTJDM19JUlEJKDYxICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfRlBLQV9FUlJPUl9JUlEJKDY0ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfUEJJQVNfSVJRCSg3NSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX09IQ0lfSVJRCSg3NiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0VIQ0lfSVJRCSg3NyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1RMTF9JUlEJKDc4ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfUEFSVEhBU0hfSVJRCSg3OSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01NQzNfSVJRCSg5NCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01NQzRfSVJRCSg5NiArIElSUV9HSUNfU1RBUlQpCi0KKyNkZWZpbmUgSU5UXzM1WFhfSEVDQzBfSVJRCQkyNAorI2RlZmluZSBJTlRfMzVYWF9IRUNDMV9JUlEJCTI4CisjZGVmaW5lIElOVF8zNVhYX0VNQUNfQzBfUlhUSFJFU0hfSVJRCTY3CisjZGVmaW5lIElOVF8zNVhYX0VNQUNfQzBfUlhfUFVMU0VfSVJRCTY4CisjZGVmaW5lIElOVF8zNVhYX0VNQUNfQzBfVFhfUFVMU0VfSVJRCTY5CisjZGVmaW5lIElOVF8zNVhYX0VNQUNfQzBfTUlTQ19QVUxTRV9JUlEJNzAKKyNkZWZpbmUgSU5UXzM1WFhfVVNCT1RHX0lSUQkJNzEKKyNkZWZpbmUgSU5UXzM1WFhfQ0NEQ19WRDBfSVJRCQk4OAorI2RlZmluZSBJTlRfMzVYWF9DQ0RDX1ZEMV9JUlEJCTkyCisjZGVmaW5lIElOVF8zNVhYX0NDRENfVkQyX0lSUQkJOTMKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMC84NTApIGFuZAogICogMTYgTVBVSU8gbGluZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaAppbmRleCA0ZjIyZTViLi4zOTc0ODM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY2JzcC5oCkBAIC00OSw2ICs0OSw5IEBACiAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDJfQkFTRQkweDQ5MDIyMDAwCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQMl9TVF9CQVNFCTB4NDkwMjgwMDAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1AzX0JBU0UJMHg0OTAyNDAwMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDNfU1RfQkFTRQkweDQ5MDJBMDAwCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQM19CQVNFCTB4NDkwMjQwMDAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1A0X0JBU0UJMHg0OTAyNjAwMAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCkBAIC0xMDMsOCArMTA2LDcgQEAKICNkZWZpbmUgQVVESU9fRE1BX1RYCQlPTUFQX0RNQV9NQ0JTUDFfVFgKICNkZWZpbmUgQVVESU9fRE1BX1JYCQlPTUFQX0RNQV9NQ0JTUDFfUlgKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjZWxzZQogCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIxCTB4MDQKQEAgLTE0Nyw2ICsxNDksMTUgQEAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfV0FLRVVQRU4JMHhBOAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0NSCTB4QUMKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNDUgkweEIwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NTRUxDUgkweEJDCisKKyNkZWZpbmUgT01BUF9TVF9SRUdfUkVWCQkweDAwCisjZGVmaW5lIE9NQVBfU1RfUkVHX1NZU0NPTkZJRwkweDEwCisjZGVmaW5lIE9NQVBfU1RfUkVHX0lSUVNUQVRVUwkweDE4CisjZGVmaW5lIE9NQVBfU1RfUkVHX0lSUUVOQUJMRQkweDFDCisjZGVmaW5lIE9NQVBfU1RfUkVHX1NHQUlOQ1IJMHgyNAorI2RlZmluZSBPTUFQX1NUX1JFR19TRklSQ1IJMHgyOAorI2RlZmluZSBPTUFQX1NUX1JFR19TU0VMQ1IJMHgyQwogCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQogI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQpAQCAtMjY1LDYgKzI3NiwyNCBAQAogI2RlZmluZSBFTkFXQUtFVVAJCTB4MDAwNAogI2RlZmluZSBTT0ZUUlNUCQkJMHgwMDAyCiAKKy8qKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNTRUxDUiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNJREVUT05FRU4JCTB4MDQwMAorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTaWRldG9uZSBTWVNDT05GSUcgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqLworI2RlZmluZSBTVF9BVVRPSURMRQkJMHgwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNpZGV0b25lIFNHQUlOQ1IgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKiovCisjZGVmaW5lIFNUX0NIMUdBSU4odmFsdWUpCSgodmFsdWU8PDE2KSkJLyogQml0cyAxNjozMSAqLworI2RlZmluZSBTVF9DSDBHQUlOKHZhbHVlKQkodmFsdWUpCQkvKiBCaXRzIDA6MTUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU2lkZXRvbmUgU0ZJUkNSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1RfRklSQ09FRkYodmFsdWUpCSh2YWx1ZSkJCS8qIEJpdHMgMDoxNSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTaWRldG9uZSBTU0VMQ1IgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqLworI2RlZmluZSBTVF9DT0VGRldSRE9ORQkJMHgwMDA0CisjZGVmaW5lIFNUX0NPRUZGV1JFTgkJMHgwMDAyCisjZGVmaW5lIFNUX1NJREVUT05FRU4JCTB4MDAwMQorCiAvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBETUEgb3BlcmF0aW5nIG1vZGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBNQ0JTUF9ETUFfTU9ERV9FTEVNRU5UCQkwCiAjZGVmaW5lIE1DQlNQX0RNQV9NT0RFX1RIUkVTSE9MRAkxCkBAIC0zNzQsMTEgKzQwMywyMyBAQAogCXU4IGRtYV9yeF9zeW5jLCBkbWFfdHhfc3luYzsKIAl1MTYgcnhfaXJxLCB0eF9pcnE7CiAJc3RydWN0IG9tYXBfbWNic3Bfb3BzICpvcHM7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworCS8qIFNpZGV0b25lIGJsb2NrIGZvciBNY0JTUCAyIGFuZCAzICovCisJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2Vfc3Q7CiAJdTE2IGJ1ZmZlcl9zaXplOwogI2VuZGlmCiB9OwogCitzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhIHsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2Vfc3Q7CisJYm9vbCBydW5uaW5nOworCWJvb2wgZW5hYmxlZDsKKwlzMTYgdGFwc1sxMjhdOwkvKiBTaWRldG9uZSBmaWx0ZXIgY29lZmZpY2llbnRzICovCisJaW50IG5yX3RhcHM7CS8qIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHVzZSAqLworCXMxNiBjaDBnYWluOworCXMxNiBjaDFnYWluOworfTsKKwogc3RydWN0IG9tYXBfbWNic3AgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKQEAgLTQxMCwyMCArNDUxLDIyIEBACiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGNsayAqaWNsazsKIAlzdHJ1Y3QgY2xrICpmY2xrOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOwogCWludCBkbWFfb3BfbW9kZTsKIAl1MTYgbWF4X3R4X3RocmVzOwogCXUxNiBtYXhfcnhfdGhyZXM7CiAjZW5kaWYKKwl2b2lkICpyZWdfY2FjaGU7CiB9OwogZXh0ZXJuIHN0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOwotZXh0ZXJuIGludCBvbWFwX21jYnNwX2NvdW50OworZXh0ZXJuIGludCBvbWFwX21jYnNwX2NvdW50LCBvbWFwX21jYnNwX2NhY2hlX3NpemU7CiAKIGludCBvbWFwX21jYnNwX2luaXQodm9pZCk7CiB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKmNvbmZpZywKIAkJCQkJaW50IHNpemUpOwogdm9pZCBvbWFwX21jYnNwX2NvbmZpZyh1bnNpZ25lZCBpbnQgaWQsIGNvbnN0IHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgKiBjb25maWcpOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIHZvaWQgb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCwgdTE2IHRocmVzaG9sZCk7CiB2b2lkIG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpOwogdTE2IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkKTsKQEAgLTQ1OSw0ICs1MDIsMjEgQEAKIGludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpOwogaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKTsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisvKiBTaWRldG9uZSBzcGVjaWZpYyBBUEkgKi8KK2ludCBvbWFwX3N0X3NldF9jaGdhaW4odW5zaWduZWQgaW50IGlkLCBpbnQgY2hhbm5lbCwgczE2IGNoZ2Fpbik7CitpbnQgb21hcF9zdF9nZXRfY2hnYWluKHVuc2lnbmVkIGludCBpZCwgaW50IGNoYW5uZWwsIHMxNiAqY2hnYWluKTsKK2ludCBvbWFwX3N0X2VuYWJsZSh1bnNpZ25lZCBpbnQgaWQpOworaW50IG9tYXBfc3RfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaWQpOworaW50IG9tYXBfc3RfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfc3Rfc2V0X2NoZ2Fpbih1bnNpZ25lZCBpbnQgaWQsIGludCBjaGFubmVsLAorCQkJCSAgICAgczE2IGNoZ2FpbikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9zdF9nZXRfY2hnYWluKHVuc2lnbmVkIGludCBpZCwgaW50IGNoYW5uZWwsCisJCQkJICAgICBzMTYgKmNoZ2FpbikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9zdF9lbmFibGUodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBvbWFwX3N0X2Rpc2FibGUodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBvbWFwX3N0X2lzX2VuYWJsZWQodW5zaWduZWQgaW50IGlkKSB7ICByZXR1cm4gMDsgfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW1vcnkuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVtb3J5LmgKaW5kZXggMzMyNWY3Yi4uZDUzMDZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbW9yeS5oCkBAIC0zOCw4ICszOCw3IEBACiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgxMDAwMDAwMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjZWxzZQogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHg4MDAwMDAwMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbmVsYXVzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbmVsYXVzLmgKaW5kZXggMzEyMmJmNi4uNGE5NzBlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW5lbGF1cy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVuZWxhdXMuaApAQCAtNDAsNyArNDAsNyBAQAogCiBleHRlcm4gaW50IG1lbmVsYXVzX3NldF9yZWd1bGF0b3Jfc2xlZXAoaW50IGVuYWJsZSwgdTMyIHZhbCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSAmJiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSAmJiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykKICNkZWZpbmUgb21hcF9oYXNfbWVuZWxhdXMoKQkxCiAjZWxzZQogI2RlZmluZSBvbWFwX2hhc19tZW5lbGF1cygpCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCmluZGV4IDI5OTM3MTMuLmExYmFjMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaApAQCAtNTUsMTIgKzU1LDEyIEBACiAJdW5zaWduZWQgaW50IG1heF9mcmVxOwogCiAJLyogc3dpdGNoIHRoZSBidXMgdG8gYSBuZXcgc2xvdCAqLwotCWludCAoKiBzd2l0Y2hfc2xvdCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CisJaW50ICgqc3dpdGNoX3Nsb3QpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCS8qIGluaXRpYWxpemUgYm9hcmQtc3BlY2lmaWMgTU1DIGZ1bmN0aW9uYWxpdHksIGNhbiBiZSBOVUxMIGlmCiAJICogbm90IHN1cHBvcnRlZCAqLwotCWludCAoKiBpbml0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCXZvaWQgKCogY2xlYW51cCkoc3RydWN0IGRldmljZSAqZGV2KTsKLQl2b2lkICgqIHNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJdm9pZCAoKmNsZWFudXApKHN0cnVjdCBkZXZpY2UgKmRldik7CisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAJLyogVG8gaGFuZGxlIGJvYXJkIHJlbGF0ZWQgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25hbGl0eSBmb3IgTU1DICovCiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CkBAIC05NiwxNCArOTYsMjggQEAKIAkJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCiAJCXVuc2lnbmVkIHBvd2VyX3NhdmluZzoxOwogCisJCS8qIElmIHVzaW5nIHBvd2VyX3NhdmluZyBhbmQgdGhlIE1NQyBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCisJCXVuc2lnbmVkIG5vX29mZjoxOworCisJCS8qIFJlZ3VsYXRvciBvZmYgcmVtYXBwZWQgdG8gc2xlZXAgKi8KKwkJdW5zaWduZWQgdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOjE7CisKIAkJaW50IHN3aXRjaF9waW47CQkJLyogZ3BpbyAoY2FyZCBkZXRlY3QpICovCiAJCWludCBncGlvX3dwOwkJCS8qIGdwaW8gKHdyaXRlIHByb3RlY3QpICovCiAKLQkJaW50ICgqIHNldF9idXNfbW9kZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGJ1c19tb2RlKTsKLQkJaW50ICgqIHNldF9wb3dlcikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLCBpbnQgdmRkKTsKLQkJaW50ICgqIGdldF9ybykoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CisJCWludCAoKnNldF9idXNfbW9kZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGJ1c19tb2RlKTsKKwkJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAorCQkJCSBpbnQgcG93ZXJfb24sIGludCB2ZGQpOworCQlpbnQgKCpnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCQlpbnQgKCpzZXRfc2xlZXApKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKIAkJCQkgaW50IHZkZCwgaW50IGNhcmRzbGVlcCk7CisJCXZvaWQgKCpyZW11eCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKTsKKwkJLyogQ2FsbCBiYWNrIGJlZm9yZSBlbmFibGluZyAvIGRpc2FibGluZyByZWd1bGF0b3JzICovCisJCXZvaWQgKCpiZWZvcmVfc2V0X3JlZykoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKKwkJCQkgICAgICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKTsKKwkJLyogQ2FsbCBiYWNrIGFmdGVyIGVuYWJsaW5nIC8gZGlzYWJsaW5nIHJlZ3VsYXRvcnMgKi8KKwkJdm9pZCAoKmFmdGVyX3NldF9yZWcpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJICAgICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKTsKIAogCQkvKiByZXR1cm4gTU1DIGNvdmVyIHN3aXRjaCBzdGF0ZSwgY2FuIGJlIE5VTEwgaWYgbm90IHN1cHBvcnRlZC4KIAkJICoKQEAgLTExMSwxNCArMTI1LDE0IEBACiAJCSAqICAgMCAtIGNsb3NlZAogCQkgKiAgIDEgLSBvcGVuCiAJCSAqLwotCQlpbnQgKCogZ2V0X2NvdmVyX3N0YXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKKwkJaW50ICgqZ2V0X2NvdmVyX3N0YXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKIAogCQljb25zdCBjaGFyICpuYW1lOwogCQl1MzIgb2NyX21hc2s7CiAKIAkJLyogQ2FyZCBkZXRlY3Rpb24gSVJRcyAqLwogCQlpbnQgY2FyZF9kZXRlY3RfaXJxOwotCQlpbnQgKCogY2FyZF9kZXRlY3QpKGludCBpcnEpOworCQlpbnQgKCpjYXJkX2RldGVjdCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CiAKIAkJdW5zaWduZWQgaW50IGJhbl9vcGVuZW5kZWQ6MTsKIApAQCAtMTI2LDcgKzE0MCw4IEBACiB9OwogCiAvKiBjYWxsZWQgZnJvbSBib2FyZC1zcGVjaWZpYyBjYXJkIGRldGVjdGlvbiBzZXJ2aWNlIHJvdXRpbmUgKi8KLWV4dGVybiB2b2lkIG9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgaXNfY2xvc2VkKTsKK2V4dGVybiB2b2lkIG9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAorCQkJCQlpbnQgaXNfY2xvc2VkKTsKIAogI2lmCWRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdWx0aS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdWx0aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzVkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211bHRpLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIGNvbXBpbGluZyBpbiBtdWx0aXBsZSBPTUFQIHByb2Nlc3NvcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19QTEFUX09NQVBfTVVMVElfSAorI2RlZmluZSBfX1BMQVRfT01BUF9NVUxUSV9ICisKKy8qCisgKiBUZXN0IGlmIG11bHRpY29yZSBPTUFQIHN1cHBvcnQgaXMgbmVlZGVkCisgKi8KKyN1bmRlZiBNVUxUSV9PTUFQMQorI3VuZGVmIE1VTFRJX09NQVAyCisjdW5kZWYgT01BUF9OQU1FCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwODUwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE1MTAKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMTZ4eAorIyBlbmRpZgorI2VuZGlmCisjaWYgKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpKQorIyBpZiAoZGVmaW5lZChPTUFQX05BTUUpIHx8IGRlZmluZWQoTVVMVElfT01BUDEpKQorIyAgZXJyb3IgIk9NQVAxIGFuZCBPTUFQMiBjYW4ndCBiZSBzZWxlY3RlZCBhdCB0aGUgc2FtZSB0aW1lIgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKyMgaWZkZWYgT01BUF9OQU1FCisjICB1bmRlZiAgTVVMVElfT01BUDIKKyMgIGRlZmluZSBNVUxUSV9PTUFQMgorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAyNDIwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMgorIyAgZGVmaW5lIE1VTFRJX09NQVAyCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDI0MzAKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNDMwCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAyCisjICBkZWZpbmUgTVVMVElfT01BUDIKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMzQzMAorIyBlbmRpZgorI2VuZGlmCisKKyNlbmRpZgkvKiBfX1BMQVRfT01BUF9NVUxUSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaAppbmRleCA2OTJjOTBlLi5jNzQ3MmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXV4LmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCAJbXV4X3JlZzsKIAl1bnNpZ25lZCBjaGFyCQlkZWJ1ZzsKIAotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKIAljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L25hbmQuaAppbmRleCA2MzFhN2JlLi42YmE4OGQyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTE1LDEwICsxNSwxOCBAQAogCWludAkJCWNzOwogCWludAkJCWdwaW9faXJxOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKwlzdHJ1Y3QgZ3BtY190aW1pbmdzCSpncG1jX3Q7CiAJaW50CQkJbnJfcGFydHM7Ci0JaW50CQkJKCpuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKik7CisJaW50CQkJKCpuYW5kX3NldHVwKSh2b2lkKTsKIAlpbnQJCQkoKmRldl9yZWFkeSkoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICopOwogCWludAkJCWRtYV9jaGFubmVsOworCXVuc2lnbmVkIGxvbmcJCXBoeXNfYmFzZTsKIAl2b2lkIF9faW9tZW0JCSpncG1jX2NzX2Jhc2VhZGRyOwogCXZvaWQgX19pb21lbQkJKmdwbWNfYmFzZWFkZHI7CisJaW50CQkJZGV2c2l6ZTsKIH07CisKKy8qIHNpemUgKDQgS2lCKSBmb3IgSU8gbWFwcGluZyAqLworI2RlZmluZQlOQU5EX0lPX1NJWkUJU1pfNEsKKworZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMTZ4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMTZ4eC5oCmluZGV4IDc1NjBiNGQuLmU2OWUxZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDE2eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAxNnh4LmgKQEAgLTEyNSw0MyArMTI1LDQzIEBACiAjZGVmaW5lIE9NQVAxNlhYX01NQ1NEMl9TU1dfTVBVX0NPTkYJKFRJUEJfU1dJVENIX0JBU0UgKyAweDE2MCkKIAogLyogVUFSVDMgUmVnaXN0ZXJzIE1hcHBpbmcgdGhyb3VnaCBNUFUgYnVzICovCi0jZGVmaW5lIFVBUlQzX1JIUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAwKQotI2RlZmluZSBVQVJUM19USFIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMCkKLSNkZWZpbmUgVUFSVDNfRExMICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDApCi0jZGVmaW5lIFVBUlQzX0lFUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyA0KQotI2RlZmluZSBVQVJUM19ETEggICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgNCkKLSNkZWZpbmUgVUFSVDNfSUlSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDgpCi0jZGVmaW5lIFVBUlQzX0ZDUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyA4KQotI2RlZmluZSBVQVJUM19FRlIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgOCkKLSNkZWZpbmUgVUFSVDNfTENSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MEMpCi0jZGVmaW5lIFVBUlQzX01DUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDEwKQotI2RlZmluZSBVQVJUM19YT04xX0FERFIxICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxMCkKLSNkZWZpbmUgVUFSVDNfWE9OMl9BRERSMiAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTQpCi0jZGVmaW5lIFVBUlQzX0xTUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE0KQotI2RlZmluZSBVQVJUM19UQ1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxOCkKLSNkZWZpbmUgVUFSVDNfTVNSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTgpCi0jZGVmaW5lIFVBUlQzX1hPRkYxICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE4KQotI2RlZmluZSBVQVJUM19YT0ZGMiAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxQykKLSNkZWZpbmUgVUFSVDNfU1BSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MUMpCi0jZGVmaW5lIFVBUlQzX1RMUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDFDKQotI2RlZmluZSBVQVJUM19NRFIxICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyMCkKLSNkZWZpbmUgVUFSVDNfTURSMiAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MjQpCi0jZGVmaW5lIFVBUlQzX1NGTFNSICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDI4KQotI2RlZmluZSBVQVJUM19UWEZMTCAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyOCkKLSNkZWZpbmUgVUFSVDNfUkVTVU1FICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MkMpCi0jZGVmaW5lIFVBUlQzX1RYRkxIICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDJDKQotI2RlZmluZSBVQVJUM19TRlJFR0wgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzMCkKLSNkZWZpbmUgVUFSVDNfUlhGTEwgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzApCi0jZGVmaW5lIFVBUlQzX1NGUkVHSCAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDM0KQotI2RlZmluZSBVQVJUM19SWEZMSCAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzNCkKLSNkZWZpbmUgVUFSVDNfQkxSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzgpCi0jZGVmaW5lIFVBUlQzX0FDUkVHICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDNDKQotI2RlZmluZSBVQVJUM19ESVYxNiAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzQykKLSNkZWZpbmUgVUFSVDNfU0NSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NDApCi0jZGVmaW5lIFVBUlQzX1NTUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDQ0KQotI2RlZmluZSBVQVJUM19FQkxSICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHg0OCkKLSNkZWZpbmUgVUFSVDNfT1NDXzEyTV9TRUwgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NEMpCi0jZGVmaW5lIFVBUlQzX01WUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDUwKQorI2RlZmluZSBVQVJUM19SSFIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDApCisjZGVmaW5lIFVBUlQzX1RIUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMCkKKyNkZWZpbmUgVUFSVDNfRExMICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAwKQorI2RlZmluZSBVQVJUM19JRVIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDQpCisjZGVmaW5lIFVBUlQzX0RMSCAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgNCkKKyNkZWZpbmUgVUFSVDNfSUlSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyA4KQorI2RlZmluZSBVQVJUM19GQ1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDgpCisjZGVmaW5lIFVBUlQzX0VGUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgOCkKKyNkZWZpbmUgVUFSVDNfTENSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDBDKQorI2RlZmluZSBVQVJUM19NQ1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTApCisjZGVmaW5lIFVBUlQzX1hPTjFfQUREUjEgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxMCkKKyNkZWZpbmUgVUFSVDNfWE9OMl9BRERSMiAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDE0KQorI2RlZmluZSBVQVJUM19MU1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTQpCisjZGVmaW5lIFVBUlQzX1RDUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxOCkKKyNkZWZpbmUgVUFSVDNfTVNSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDE4KQorI2RlZmluZSBVQVJUM19YT0ZGMSAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTgpCisjZGVmaW5lIFVBUlQzX1hPRkYyICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxQykKKyNkZWZpbmUgVUFSVDNfU1BSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDFDKQorI2RlZmluZSBVQVJUM19UTFIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MUMpCisjZGVmaW5lIFVBUlQzX01EUjEgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgyMCkKKyNkZWZpbmUgVUFSVDNfTURSMiAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDI0KQorI2RlZmluZSBVQVJUM19TRkxTUiAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MjgpCisjZGVmaW5lIFVBUlQzX1RYRkxMICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgyOCkKKyNkZWZpbmUgVUFSVDNfUkVTVU1FICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDJDKQorI2RlZmluZSBVQVJUM19UWEZMSCAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MkMpCisjZGVmaW5lIFVBUlQzX1NGUkVHTCAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzMCkKKyNkZWZpbmUgVUFSVDNfUlhGTEwgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDMwKQorI2RlZmluZSBVQVJUM19TRlJFR0ggICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MzQpCisjZGVmaW5lIFVBUlQzX1JYRkxIICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzNCkKKyNkZWZpbmUgVUFSVDNfQkxSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDM4KQorI2RlZmluZSBVQVJUM19BQ1JFRyAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4M0MpCisjZGVmaW5lIFVBUlQzX0RJVjE2ICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzQykKKyNkZWZpbmUgVUFSVDNfU0NSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDQwKQorI2RlZmluZSBVQVJUM19TU1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4NDQpCisjZGVmaW5lIFVBUlQzX0VCTFIgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHg0OCkKKyNkZWZpbmUgVUFSVDNfT1NDXzEyTV9TRUwgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDRDKQorI2RlZmluZSBVQVJUM19NVlIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4NTApCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDI0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDI0eHguaAppbmRleCA2OTZlZGZjLi43MDU1NjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAyNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMjR4eC5oCkBAIC0yMyw4ICsyMyw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQMjRYWF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAorI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMl9ICiAKIC8qCiAgKiBQbGVhc2UgcGxhY2Ugb25seSBiYXNlIGRlZmluZXMgaGVyZSBhbmQgcHV0IHRoZSByZXN0IGluIGRldmljZQpAQCAtODUsNSArODUsNSBAQAogI2RlZmluZSBPTUFQMjRYWF9TRUNfQUVTX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg2MDAwKQogI2RlZmluZSBPTUFQMjRYWF9TRUNfUEtBX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg4MDAwKQogCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMjRYWF9IICovCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMl9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDM0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDM0eHguaAppbmRleCAwNzdmMDU5Li4yODQ1ZmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAzNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMzR4eC5oCkBAIC0yMSw4ICsyMSw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAzNFhYX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQMzRYWF9ICisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDNfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAzX0gKIAogLyoKICAqIFBsZWFzZSBwbGFjZSBvbmx5IGJhc2UgZGVmaW5lcyBoZXJlIGFuZCBwdXQgdGhlIHJlc3QgaW4gZGV2aWNlCkBAIC04Miw1ICs4Miw1IEBACiAKICNkZWZpbmUgT01BUDM0WFhfTUFJTEJPWF9CQVNFCQkoTDRfMzRYWF9CQVNFICsgMHg5NDAwMCkKIAotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDM0WFhfSCAqLworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKaW5kZXggZWY4NzBkZS4uMjMwMjQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaApAQCAtNDAsOSArNDAsMTMgQEAKICNkZWZpbmUgT01BUDQ0WFhfR0lDX0NQVV9CQVNFCQkweDQ4MjQwMTAwCiAjZGVmaW5lIE9NQVA0NFhYX1NDVV9CQVNFCQkweDQ4MjQwMDAwCiAjZGVmaW5lIE9NQVA0NFhYX0xPQ0FMX1RXRF9CQVNFCQkweDQ4MjQwNjAwCisjZGVmaW5lIE9NQVA0NFhYX0wyQ0FDSEVfQkFTRQkJMHg0ODI0MjAwMAogI2RlZmluZSBPTUFQNDRYWF9XS1VQR0VOX0JBU0UJCTB4NDgyODEwMDAKKyNkZWZpbmUgT01BUDQ0WFhfTUNQRE1fQkFTRQkJMHg0MDEzMjAwMAorI2RlZmluZSBPTUFQNDRYWF9NQ1BETV9MM19CQVNFCQkweDQ5MDMyMDAwCiAKICNkZWZpbmUgT01BUDQ0WFhfTUFJTEJPWF9CQVNFCQkoTDRfNDRYWF9CQVNFICsgMHhGNDAwMCkKKyNkZWZpbmUgT01BUDQ0WFhfSFNVU0JfT1RHX0JBU0UJCShMNF80NFhYX0JBU0UgKyAweEFCMDAwKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQNDRYWF9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaAppbmRleCBkYzFmYWMxLi4zNjk0YjYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oCkBAIC02Miw2ICs2Miw3IEBACiAgKgogICovCiBzdHJ1Y3Qgb21hcF9kZXZpY2UgeworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJcGRldjsKIAlzdHJ1Y3Qgb21hcF9od21vZAkJKipod21vZHM7CiAJc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kJKnBtX2xhdHM7CkBAIC04MSw2ICs4Miw3IEBACiAKIC8qIENvcmUgY29kZSBpbnRlcmZhY2UgKi8KIAorYm9vbCBvbWFwX2RldmljZV9pc192YWxpZChzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKTsKIGludCBvbWFwX2RldmljZV9jb3VudF9yZXNvdXJjZXMoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CiBpbnQgb21hcF9kZXZpY2VfZmlsbF9yZXNvdXJjZXMoc3RydWN0IG9tYXBfZGV2aWNlICpvZCwgc3RydWN0IHJlc291cmNlICpyZXMpOwogCkBAIC04OCwxNSArOTAsMTYgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHZvaWQgKnBkYXRhLAogCQkJCSAgICAgIGludCBwZGF0YV9sZW4sCiAJCQkJICAgICAgc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgKnBtX2xhdHMsCi0JCQkJICAgICAgaW50IHBtX2xhdHNfY250KTsKKwkJCQkgICAgICBpbnQgcG1fbGF0c19jbnQsIGludCBpc19lYXJseV9kZXZpY2UpOwogCiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9tYXBfZGV2aWNlX2J1aWxkX3NzKGNvbnN0IGNoYXIgKnBkZXZfbmFtZSwgaW50IHBkZXZfaWQsCiAJCQkJCSBzdHJ1Y3Qgb21hcF9od21vZCAqKm9oLCBpbnQgb2hfY250LAogCQkJCQkgdm9pZCAqcGRhdGEsIGludCBwZGF0YV9sZW4sCiAJCQkJCSBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqcG1fbGF0cywKLQkJCQkJIGludCBwbV9sYXRzX2NudCk7CisJCQkJCSBpbnQgcG1fbGF0c19jbnQsIGludCBpc19lYXJseV9kZXZpY2UpOwogCiBpbnQgb21hcF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CitpbnQgb21hcF9lYXJseV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CiAKIC8qIE9NQVAgUE0gaW50ZXJmYWNlICovCiBpbnQgb21hcF9kZXZpY2VfYWxpZ25fcG1fbGF0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCkBAIC0xMzEsMTEgKzEzNCwxNSBAQAogICovCiBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSB7CiAJdTMyIGRlYWN0aXZhdGVfbGF0OworCXUzMiBkZWFjdGl2YXRlX2xhdF93b3JzdDsKIAlpbnQgKCpkZWFjdGl2YXRlX2Z1bmMpKHN0cnVjdCBvbWFwX2RldmljZSAqb2QpOwogCXUzMiBhY3RpdmF0ZV9sYXQ7CisJdTMyIGFjdGl2YXRlX2xhdF93b3JzdDsKIAlpbnQgKCphY3RpdmF0ZV9mdW5jKShzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKTsKKwl1MzIgZmxhZ3M7CiB9OwogCisjZGVmaW5lIE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QgQklUKDEpCiAKIC8qIEdldCBvbWFwX2RldmljZSBwb2ludGVyIGZyb20gcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgKi8KICNkZWZpbmUgdG9fb21hcF9kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IG9tYXBfZGV2aWNlLCBwZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAppbmRleCAzMzkzMzI1Li40NDBiNDE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICogUGF1bCBXYWxtc2xleQogICoKLSAqIENyZWF0ZWQgaW4gY29sbGFib3JhdGlvbiB3aXRoIChhbHBoYWJldGljYWwgb3JkZXIpOiBCZW5vaXQgQ291c3NvbiwKKyAqIENyZWF0ZWQgaW4gY29sbGFib3JhdGlvbiB3aXRoIChhbHBoYWJldGljYWwgb3JkZXIpOiBCZW5vw650IENvdXNzb24sCiAgKiBLZXZpbiBIaWxtYW4sIFRvbnkgTGluZGdyZW4sIFJhamVuZHJhIE5heWFrLCBWaWtyYW0gUGFuZGl0YSwgU2FrYXJpCiAgKiBQb3Vzc2EsIEFuYW5kIFNhd2FudCwgU2FudG9zaCBTaGlsaW1rYXIsIFJpY2hhcmQgV29vZHJ1ZmYKICAqCkBAIC0zMywyNSArMzMsNDIgQEAKICNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9NQUNIX09NQVBfSFdNT0RfSAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RydWN0IG9tYXBfZGV2aWNlOwogCi0vKiBPQ1AgU1lTQ09ORklHIGJpdCBzaGlmdHMvbWFza3MgKi8KLSNkZWZpbmUgU1lTQ19NSURMRU1PREVfU0hJRlQJCTEyCi0jZGVmaW5lIFNZU0NfTUlETEVNT0RFX01BU0sJCSgweDMgPDwgU1lTQ19NSURMRU1PREVfU0hJRlQpCi0jZGVmaW5lIFNZU0NfQ0xPQ0tBQ1RJVklUWV9TSElGVAk4Ci0jZGVmaW5lIFNZU0NfQ0xPQ0tBQ1RJVklUWV9NQVNLCQkoMHgzIDw8IFNZU0NfQ0xPQ0tBQ1RJVklUWV9TSElGVCkKLSNkZWZpbmUgU1lTQ19TSURMRU1PREVfU0hJRlQJCTMKLSNkZWZpbmUgU1lTQ19TSURMRU1PREVfTUFTSwkJKDB4MyA8PCBTWVNDX1NJRExFTU9ERV9TSElGVCkKLSNkZWZpbmUgU1lTQ19FTkFXQUtFVVBfU0hJRlQJCTIKLSNkZWZpbmUgU1lTQ19FTkFXQUtFVVBfTUFTSwkJKDEgPDwgU1lTQ19FTkFXQUtFVVBfU0hJRlQpCi0jZGVmaW5lIFNZU0NfU09GVFJFU0VUX1NISUZUCQkxCi0jZGVmaW5lIFNZU0NfU09GVFJFU0VUX01BU0sJCSgxIDw8IFNZU0NfU09GVFJFU0VUX1NISUZUKQotI2RlZmluZSBTWVNDX0FVVE9JRExFX1NISUZUCQkwCi0jZGVmaW5lIFNZU0NfQVVUT0lETEVfTUFTSwkJKDEgPDwgU1lTQ19BVVRPSURMRV9TSElGVCkKK2V4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyBvbWFwX2h3bW9kX3N5c2NfdHlwZTE7CitleHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgb21hcF9od21vZF9zeXNjX3R5cGUyOworCisvKgorICogT0NQIFNZU0NPTkZJRyBiaXQgc2hpZnRzL21hc2tzIFRZUEUxLiBUaGVzZSBhcmUgZm9yIElQcyBjb21wbGlhbnQKKyAqIHdpdGggdGhlIG9yaWdpbmFsIFBSQ00gcHJvdG9jb2wgZGVmaW5lZCBmb3IgT01BUDI0MjAKKyAqLworI2RlZmluZSBTWVNDX1RZUEUxX01JRExFTU9ERV9TSElGVAkxMgorI2RlZmluZSBTWVNDX1RZUEUxX01JRExFTU9ERV9NQVNLCSgweDMgPDwgU1lTQ19NSURMRU1PREVfU0hJRlQpCisjZGVmaW5lIFNZU0NfVFlQRTFfQ0xPQ0tBQ1RJVklUWV9TSElGVAk4CisjZGVmaW5lIFNZU0NfVFlQRTFfQ0xPQ0tBQ1RJVklUWV9NQVNLCSgweDMgPDwgU1lTQ19DTE9DS0FDVElWSVRZX1NISUZUKQorI2RlZmluZSBTWVNDX1RZUEUxX1NJRExFTU9ERV9TSElGVAkzCisjZGVmaW5lIFNZU0NfVFlQRTFfU0lETEVNT0RFX01BU0sJKDB4MyA8PCBTWVNDX1NJRExFTU9ERV9TSElGVCkKKyNkZWZpbmUgU1lTQ19UWVBFMV9FTkFXQUtFVVBfU0hJRlQJMgorI2RlZmluZSBTWVNDX1RZUEUxX0VOQVdBS0VVUF9NQVNLCSgxIDw8IFNZU0NfRU5BV0FLRVVQX1NISUZUKQorI2RlZmluZSBTWVNDX1RZUEUxX1NPRlRSRVNFVF9TSElGVAkxCisjZGVmaW5lIFNZU0NfVFlQRTFfU09GVFJFU0VUX01BU0sJKDEgPDwgU1lTQ19TT0ZUUkVTRVRfU0hJRlQpCisjZGVmaW5lIFNZU0NfVFlQRTFfQVVUT0lETEVfU0hJRlQJMAorI2RlZmluZSBTWVNDX1RZUEUxX0FVVE9JRExFX01BU0sJKDEgPDwgU1lTQ19BVVRPSURMRV9TSElGVCkKKworLyoKKyAqIE9DUCBTWVNDT05GSUcgYml0IHNoaWZ0cy9tYXNrcyBUWVBFMi4gVGhlc2UgYXJlIGZvciBJUHMgY29tcGxpYW50CisgKiB3aXRoIHRoZSBuZXcgUFJDTSBwcm90b2NvbCBkZWZpbmVkIGZvciBuZXcgT01BUDQgSVBzLgorICovCisjZGVmaW5lIFNZU0NfVFlQRTJfU09GVFJFU0VUX1NISUZUCTAKKyNkZWZpbmUgU1lTQ19UWVBFMl9TT0ZUUkVTRVRfTUFTSwkoMSA8PCBTWVNDX1RZUEUyX1NPRlRSRVNFVF9TSElGVCkKKyNkZWZpbmUgU1lTQ19UWVBFMl9TSURMRU1PREVfU0hJRlQJMgorI2RlZmluZSBTWVNDX1RZUEUyX1NJRExFTU9ERV9NQVNLCSgweDMgPDwgU1lTQ19UWVBFMl9TSURMRU1PREVfU0hJRlQpCisjZGVmaW5lIFNZU0NfVFlQRTJfTUlETEVNT0RFX1NISUZUCTQKKyNkZWZpbmUgU1lTQ19UWVBFMl9NSURMRU1PREVfTUFTSwkoMHgzIDw8IFNZU0NfVFlQRTJfTUlETEVNT0RFX1NISUZUKQogCiAvKiBPQ1AgU1lTU1RBVFVTIGJpdCBzaGlmdHMvbWFza3MgKi8KICNkZWZpbmUgU1lTU19SRVNFVERPTkVfU0hJRlQJCTAKQEAgLTYyLDcgKzc5LDYgQEAKICNkZWZpbmUgSFdNT0RfSURMRU1PREVfTk8JCSgxIDw8IDEpCiAjZGVmaW5lIEhXTU9EX0lETEVNT0RFX1NNQVJUCQkoMSA8PCAyKQogCi0KIC8qKgogICogc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gLSBNUFUgSVJRcyB1c2VkIGJ5IHRoZSBod21vZAogICogQG5hbWU6IG5hbWUgb2YgdGhlIElSUSBjaGFubmVsIChtb2R1bGUgbG9jYWwgbmFtZSkKQEAgLTk0LDggKzExMCw3IEBACiAvKioKICAqIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgLSBvcHRpb25hbCBjbG9ja3MgdXNlZCBieSB0aGlzIGh3bW9kCiAgKiBAcm9sZTogInN5cyIsICIzMmsiLCAidHYiLCBldGMgLS0gZm9yIHVzZSBpbiBjbGtfZ2V0KCkKLSAqIEBjbGtkZXZfZGV2X2lkOiBvcHQgY2xvY2s6IGNsa2RldiBkZXZfaWQgc3RyaW5nCi0gKiBAY2xrZGV2X2Nvbl9pZDogb3B0IGNsb2NrOiBjbGtkZXYgY29uX2lkIHN0cmluZworICogQGNsazogb3B0IGNsb2NrOiBPTUFQIGNsb2NrIG5hbWUKICAqIEBfY2xrOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrIChmaWxsZWQgaW4gYXQgcnVudGltZSkKICAqCiAgKiBUaGUgbW9kdWxlJ3MgaW50ZXJmYWNlIGNsb2NrIGFuZCBtYWluIGZ1bmN0aW9uYWwgY2xvY2sgc2hvdWxkIG5vdApAQCAtMTAzLDggKzExOCw3IEBACiAgKi8KIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgewogCWNvbnN0IGNoYXIJKnJvbGU7Ci0JY29uc3QgY2hhcgkqY2xrZGV2X2Rldl9pZDsKLQljb25zdCBjaGFyCSpjbGtkZXZfY29uX2lkOworCWNvbnN0IGNoYXIJKmNsazsKIAlzdHJ1Y3QgY2xrCSpfY2xrOwogfTsKIApAQCAtMTcxLDggKzE4NSw3IEBACiAgKiBAbWFzdGVyOiBzdHJ1Y3Qgb21hcF9od21vZCB0aGF0IGluaXRpYXRlcyBPQ1AgdHJhbnNhY3Rpb25zIG9uIHRoaXMgbGluawogICogQHNsYXZlOiBzdHJ1Y3Qgb21hcF9od21vZCB0aGF0IHJlc3BvbmRzIHRvIE9DUCB0cmFuc2FjdGlvbnMgb24gdGhpcyBsaW5rCiAgKiBAYWRkcjogYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsaW5rCi0gKiBAY2xrZGV2X2Rldl9pZDogaW50ZXJmYWNlIGNsb2NrOiBjbGtkZXYgZGV2X2lkIHN0cmluZwotICogQGNsa2Rldl9jb25faWQ6IGludGVyZmFjZSBjbG9jazogY2xrZGV2IGNvbl9pZCBzdHJpbmcKKyAqIEBjbGs6IGludGVyZmFjZSBjbG9jazogT01BUCBjbG9jayBuYW1lCiAgKiBAX2NsazogcG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdCBjbGsgKGZpbGxlZCBpbiBhdCBydW50aW1lKQogICogQGZ3OiBpbnRlcmZhY2UgZmlyZXdhbGwgZGF0YQogICogQGFkZHJfY250OiBBUlJBWV9TSVpFKEBhZGRyKQpAQCAtMTkxLDggKzIwNCw3IEBACiAJc3RydWN0IG9tYXBfaHdtb2QJCSptYXN0ZXI7CiAJc3RydWN0IG9tYXBfaHdtb2QJCSpzbGF2ZTsKIAlzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlCSphZGRyOwotCWNvbnN0IGNoYXIJCQkqY2xrZGV2X2Rldl9pZDsKLQljb25zdCBjaGFyCQkJKmNsa2Rldl9jb25faWQ7CisJY29uc3QgY2hhcgkJCSpjbGs7CiAJc3RydWN0IGNsawkJCSpfY2xrOwogCXVuaW9uIHsKIAkJc3RydWN0IG9tYXBfaHdtb2Rfb21hcDJfZmlyZXdhbGwgb21hcDI7CkBAIC0yMzYsNyArMjQ4LDI1IEBACiAjZGVmaW5lIENMT0NLQUNUX1RFU1RfTk9ORQkweDMKIAogLyoqCi0gKiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjb25maWcgLSBod21vZCBPQ1BfU1lTQ09ORklHL09DUF9TWVNTVEFUVVMgZGF0YQorICogc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgLSBod21vZCBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyIGZpZWxkIG9mZnNldHMuCisgKiBAbWlkbGVfc2hpZnQ6IE9mZnNldCBvZiB0aGUgbWlkbGUgYml0CisgKiBAY2xrYWN0X3NoaWZ0OiBPZmZzZXQgb2YgdGhlIGNsb2NrYWN0aXZpdHkgYml0CisgKiBAc2lkbGVfc2hpZnQ6IE9mZnNldCBvZiB0aGUgc2lkbGUgYml0CisgKiBAZW53a3VwX3NoaWZ0OiBPZmZzZXQgb2YgdGhlIGVuYXdha2V1cCBiaXQKKyAqIEBzcnN0X3NoaWZ0OiBPZmZzZXQgb2YgdGhlIHNvZnRyZXNldCBiaXQKKyAqIEBhdXRvaWRsZV9zaGlmdDogT2Zmc2V0IG9mIHRoZSBhdXRvaWRsZSBiaXQKKyAqLworc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgeworCXU4IG1pZGxlX3NoaWZ0OworCXU4IGNsa2FjdF9zaGlmdDsKKwl1OCBzaWRsZV9zaGlmdDsKKwl1OCBlbndrdXBfc2hpZnQ7CisJdTggc3JzdF9zaGlmdDsKKwl1OCBhdXRvaWRsZV9zaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIC0gaHdtb2QgY2xhc3MgT0NQX1NZUyogZGF0YQogICogQHJldl9vZmZzOiBJUCBibG9jayByZXZpc2lvbiByZWdpc3RlciBvZmZzZXQgKGZyb20gbW9kdWxlIGJhc2UgYWRkcikKICAqIEBzeXNjX29mZnM6IE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIgb2Zmc2V0IChmcm9tIG1vZHVsZSBiYXNlIGFkZHIpCiAgKiBAc3lzc19vZmZzOiBPQ1BfU1lTU1RBVFVTIHJlZ2lzdGVyIG9mZnNldCAoZnJvbSBtb2R1bGUgYmFzZSBhZGRyKQpAQCAtMjUyLDE0ICsyODIsMjIgQEAKICAqIGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbG9ja3MgbWFya2VkIGluIEBjbG9ja2FjdC4gIFRoaXMgZmllbGQgaXMKICAqIG9ubHkgdXNlZCBpZiBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCBpcyBzZXQgKHNlZSBiZWxvdykKICAqCisgKiBAc3lzY19maWVsZHM6IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBvZmZzZXQgcG9zaXRpb25zIG9mIHZhcmlvdXMgYml0cyBpbgorICogU1lTQ09ORklHIHJlZ2lzdGVyLiBUaGlzIGNhbiBiZSBwb3B1bGF0ZWQgdXNpbmcgb21hcF9od21vZF9zeXNjX3R5cGUxIG9yCisgKiBvbWFwX2h3bW9kX3N5c2NfdHlwZTIgZGVmaW5lZCBpbiBvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMgZGVwZW5kaW5nIG9uCisgKiB3aGV0aGVyIHRoZSBkZXZpY2UgaXAgaXMgY29tcGxpYW50IHdpdGggdGhlIG9yaWdpbmFsIFBSQ00gcHJvdG9jb2wKKyAqIGRlZmluZWQgZm9yIE9NQVAyNDIwIG9yIHRoZSBuZXcgUFJDTSBwcm90b2NvbCBmb3IgbmV3IE9NQVA0IElQcy4KKyAqIElmIHRoZSBkZXZpY2UgZm9sbG93cyBhIGRpZmZlcmVudCBzY2hlbWUgZm9yIHRoZSBzeXNjb25maWcgcmVnaXN0ZXIgLAorICogdGhlbiB0aGlzIGZpZWxkIGhhcyB0byBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBvZmZzZXQgc3RydWN0dXJlLgogICovCi1zdHJ1Y3Qgb21hcF9od21vZF9zeXNjb25maWcgeworc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIHsKIAl1MTYgcmV2X29mZnM7CiAJdTE2IHN5c2Nfb2ZmczsKIAl1MTYgc3lzc19vZmZzOwogCXU4IGlkbGVtb2RlczsKIAl1OCBzeXNjX2ZsYWdzOwogCXU4IGNsb2NrYWN0OworCXN0cnVjdCBvbWFwX2h3bW9kX3N5c2NfZmllbGRzICpzeXNjX2ZpZWxkczsKIH07CiAKIC8qKgpAQCAtMzUyLDE5ICszOTAsMzMgQEAKICNkZWZpbmUgX0hXTU9EX1NUQVRFX0RJU0FCTEVECQkJNgogCiAvKioKKyAqIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIC0gdGhlIHR5cGUgb2YgYW4gSVAgYmxvY2sKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBod21vZF9jbGFzcworICogQHN5c2M6IGRldmljZSBTWVNDT05GSUcvU1lTU1RBVFVTIHJlZ2lzdGVyIGRhdGEKKyAqIEByZXY6IHJldmlzaW9uIG9mIHRoZSBJUCBjbGFzcworICoKKyAqIFJlcHJlc2VudCB0aGUgY2xhc3Mgb2YgYSBPTUFQIGhhcmR3YXJlICJtb2R1bGVzIiAoZS5nLiB0aW1lciwKKyAqIHNtYXJ0cmVmbGV4LCBncGlvLCB1YXJ0Li4uKQorICovCitzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyB7CisJY29uc3QgY2hhcgkJCQkqbmFtZTsKKwlzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcJKnN5c2M7CisJdTMyCQkJCQlyZXY7Cit9OworCisvKioKICAqIHN0cnVjdCBvbWFwX2h3bW9kIC0gaW50ZWdyYXRpb24gZGF0YSBmb3IgT01BUCBoYXJkd2FyZSAibW9kdWxlcyIgKElQIGJsb2NrcykKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBod21vZAorICogQGNsYXNzOiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyAqIHRvIHRoZSBjbGFzcyBvZiB0aGlzIGh3bW9kCiAgKiBAb2Q6IHN0cnVjdCBvbWFwX2RldmljZSBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaHdtb2QgKGludGVybmFsIHVzZSkKICAqIEBtcHVfaXJxczogcHRyIHRvIGFuIGFycmF5IG9mIE1QVSBJUlFzIChzZWUgYWxzbyBtcHVfaXJxc19jbnQpCiAgKiBAc2RtYV9jaHM6IHB0ciB0byBhbiBhcnJheSBvZiBTRE1BIGNoYW5uZWwgSURzIChzZWUgYWxzbyBzZG1hX2Noc19jbnQpCiAgKiBAcHJjbTogUFJDTSBkYXRhIHBlcnRhaW5pbmcgdG8gdGhpcyBod21vZAotICogQGNsa2Rldl9kZXZfaWQ6IG1haW4gY2xvY2s6IGNsa2RldiBkZXZfaWQgc3RyaW5nCi0gKiBAY2xrZGV2X2Nvbl9pZDogbWFpbiBjbG9jazogY2xrZGV2IGNvbl9pZCBzdHJpbmcKKyAqIEBtYWluX2NsazogbWFpbiBjbG9jazogT01BUCBjbG9jayBuYW1lCiAgKiBAX2NsazogcG9pbnRlciB0byB0aGUgbWFpbiBzdHJ1Y3QgY2xrIChmaWxsZWQgaW4gYXQgcnVudGltZSkKICAqIEBvcHRfY2xrczogb3RoZXIgZGV2aWNlIGNsb2NrcyB0aGF0IGRyaXZlcnMgY2FuIHJlcXVlc3QgKDAuLiopCiAgKiBAbWFzdGVyczogcHRyIHRvIGFycmF5IG9mIE9DUCBpZnMgdGhhdCB0aGlzIGh3bW9kIGNhbiBpbml0aWF0ZSBvbgogICogQHNsYXZlczogcHRyIHRvIGFycmF5IG9mIE9DUCBpZnMgdGhhdCB0aGlzIGh3bW9kIGNhbiByZXNwb25kIG9uCi0gKiBAc3lzY29uZmlnOiBkZXZpY2UgU1lTQ09ORklHL1NZU1NUQVRVUyByZWdpc3RlciBkYXRhCiAgKiBAZGV2X2F0dHI6IGFyYml0cmFyeSBkZXZpY2UgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGRyaXZlcgogICogQF9zeXNjX2NhY2hlOiBpbnRlcm5hbC11c2UgaHdtb2QgZmxhZ3MKICAqIEBfcnRfdmE6IGNhY2hlZCByZWdpc3RlciB0YXJnZXQgc3RhcnQgYWRkcmVzcyAoaW50ZXJuYWwgdXNlKQpAQCAtMzgzLDE2ICs0MzUsMTcgQEAKICAqIEBvbWFwX2NoaXA6IE9NQVAgY2hpcHMgdGhpcyBod21vZCBpcyBwcmVzZW50IG9uCiAgKiBAbm9kZTogbGlzdCBub2RlIGZvciBod21vZCBsaXN0IChpbnRlcm5hbCB1c2UpCiAgKgotICogQGNsa2Rldl9kZXZfaWQsIEBjbGtkZXZfY29uX2lkLCBhbmQgQGNsayBhbGwgcmVmZXIgdG8gdGhpcyBtb2R1bGUncyAibWFpbgotICogY2xvY2ssIiB3aGljaCBmb3Igb3VyIHB1cnBvc2VzIGlzIGRlZmluZWQgYXMgInRoZSBmdW5jdGlvbmFsIGNsb2NrIG5lZWRlZAotICogZm9yIHJlZ2lzdGVyIGFjY2Vzc2VzIHRvIGNvbXBsZXRlLiIgIE1vZHVsZXMgbWF5IG5vdCBoYXZlIGEgbWFpbiBjbG9jayBpZgotICogdGhlIGludGVyZmFjZSBjbG9jayBhbHNvIHNlcnZlcyBhcyBhIG1haW4gY2xvY2suCisgKiBAbWFpbl9jbGsgcmVmZXJzIHRvIHRoaXMgbW9kdWxlJ3MgIm1haW4gY2xvY2ssIiB3aGljaCBmb3Igb3VyCisgKiBwdXJwb3NlcyBpcyBkZWZpbmVkIGFzICJ0aGUgZnVuY3Rpb25hbCBjbG9jayBuZWVkZWQgZm9yIHJlZ2lzdGVyCisgKiBhY2Nlc3NlcyB0byBjb21wbGV0ZS4iICBNb2R1bGVzIG1heSBub3QgaGF2ZSBhIG1haW4gY2xvY2sgaWYgdGhlCisgKiBpbnRlcmZhY2UgY2xvY2sgYWxzbyBzZXJ2ZXMgYXMgYSBtYWluIGNsb2NrLgogICoKICAqIFBhcmFtZXRlciBuYW1lcyBiZWdpbm5pbmcgd2l0aCBhbiB1bmRlcnNjb3JlIGFyZSBtYW5hZ2VkIGludGVybmFsbHkgYnkKICAqIHRoZSBvbWFwX2h3bW9kIGNvZGUgYW5kIHNob3VsZCBub3QgYmUgc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwogc3RydWN0IG9tYXBfaHdtb2QgewogCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwlzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcwkJKmNsYXNzOwogCXN0cnVjdCBvbWFwX2RldmljZQkJKm9kOwogCXN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvCSptcHVfaXJxczsKIAlzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbwkqc2RtYV9jaHM7CkBAIC00MDAsMTMgKzQ1MywxMSBAQAogCQlzdHJ1Y3Qgb21hcF9od21vZF9vbWFwMl9wcmNtIG9tYXAyOwogCQlzdHJ1Y3Qgb21hcF9od21vZF9vbWFwNF9wcmNtIG9tYXA0OwogCX0JCQkJcHJjbTsKLQljb25zdCBjaGFyCQkJKmNsa2Rldl9kZXZfaWQ7Ci0JY29uc3QgY2hhcgkJCSpjbGtkZXZfY29uX2lkOworCWNvbnN0IGNoYXIJCQkqbWFpbl9jbGs7CiAJc3RydWN0IGNsawkJCSpfY2xrOwogCXN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsJKm9wdF9jbGtzOwogCXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZgkqKm1hc3RlcnM7IC8qIGNvbm5lY3QgdG8gKl9JQSAqLwogCXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZgkqKnNsYXZlczsgIC8qIGNvbm5lY3QgdG8gKl9UQSAqLwotCXN0cnVjdCBvbWFwX2h3bW9kX3N5c2NvbmZpZwkqc3lzY29uZmlnOwogCXZvaWQJCQkJKmRldl9hdHRyOwogCXUzMgkJCQlfc3lzY19jYWNoZTsKIAl2b2lkIF9faW9tZW0JCQkqX3J0X3ZhOwpAQCAtNDQxLDYgKzQ5Miw4IEBACiBpbnQgb21hcF9od21vZF9lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiBpbnQgb21hcF9od21vZF9kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCitpbnQgb21hcF9od21vZF9zZXRfc2xhdmVfaWRsZW1vZGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpZGxlbW9kZSk7CisKIGludCBvbWFwX2h3bW9kX3Jlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiB2b2lkIG9tYXBfaHdtb2Rfb2NwX2JhcnJpZXIoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIApAQCAtNDY1LDQgKzUxOCwxNyBAQAogaW50IG9tYXBfaHdtb2RfZW5hYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogaW50IG9tYXBfaHdtb2RfZGlzYWJsZV93YWtldXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIAoraW50IG9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MoY29uc3QgY2hhciAqY2xhc3NuYW1lLAorCQkJCSBpbnQgKCpmbikoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAorCQkJCQkgICB2b2lkICp1c2VyKSwKKwkJCQkgdm9pZCAqdXNlcik7CisKKy8qCisgKiBDaGlwIHZhcmlhbnQtc3BlY2lmaWMgaHdtb2QgaW5pdCByb3V0aW5lcyAtIFhYWCBzaG91bGQgYmUgY29udmVydGVkCisgKiB0byB1c2UgaW5pdGNhbGxzIG9uY2UgdGhlIGluaXRpYWwgYm9vdCBvcmRlcmluZyBpcyBzdHJhaWdodGVuZWQgb3V0CisgKi8KK2V4dGVybiBpbnQgb21hcDI0MjBfaHdtb2RfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDI0MzBfaHdtb2RfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDN4eHhfaHdtb2RfaW5pdCh2b2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmgKaW5kZXggMGI5NjAwNS4uZDgyYjJjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wb3dlcmRvbWFpbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcG93ZXJkb21haW4uaApAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPTUFQMi8zIHBvd2VyZG9tYWluIGNvbnRyb2wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKQEAgLTM3LDYgKzM3LDkgQEAKICNkZWZpbmUgUFdSU1RTX09GRl9SRVQJCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAogCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9SRVQpKQogCisjZGVmaW5lIFBXUlNUU19SRVRfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9SRVQpIHwgXAorCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCisKICNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQogCiAKQEAgLTQ4LDE2ICs1MSwxNiBAQAogCQkJCQkgICovCiAKIC8qCi0gKiBOdW1iZXIgb2YgbWVtb3J5IGJhbmtzIHRoYXQgYXJlIHBvd2VyLWNvbnRyb2xsYWJsZS4JT24gT01BUDM0MzAsIHRoZQotICogbWF4aW11bSBpcyA0LgorICogTnVtYmVyIG9mIG1lbW9yeSBiYW5rcyB0aGF0IGFyZSBwb3dlci1jb250cm9sbGFibGUuCU9uIE9NQVA0NDMwLCB0aGUKKyAqIG1heGltdW0gaXMgNS4KICAqLwotI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTQKKyNkZWZpbmUgUFdSRE1fTUFYX01FTV9CQU5LUwk1CiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBjbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgcG93ZXJkb21haW4uCi0gKiBDT1JFIHBvd2VyZG9tYWluIG9uIE9NQVAzIGlzIHRoZSB3b3JzdCBjYXNlCisgKiBDT1JFIHBvd2VyZG9tYWluIG9uIE9NQVA0IGlzIHRoZSB3b3JzdCBjYXNlCiAgKi8KLSNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwk0CisjZGVmaW5lIFBXUkRNX01BWF9DTEtETVMJOQogCiAvKiBYWFggQSBjb21wbGV0ZWx5IGFyYml0cmFyeSBudW1iZXIuIFdoYXQgaXMgcmVhc29uYWJsZSBoZXJlPyAqLwogI2RlZmluZSBQV1JETV9UUkFOU0lUSU9OX0JBSUxPVVQgMTAwMDAwCkBAIC02NSw2NSArNjgsNDAgQEAKIHN0cnVjdCBjbG9ja2RvbWFpbjsKIHN0cnVjdCBwb3dlcmRvbWFpbjsKIAotLyogRW5jb2RlcyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBwb3dlcmRvbWFpbnMgLSBzdGF0aWNhbGx5IGRlZmluZWQgKi8KLXN0cnVjdCBwd3JkbV9kZXAgewotCi0JLyogUG93ZXJkb21haW4gbmFtZSAqLwotCWNvbnN0IGNoYXIgKnB3cmRtX25hbWU7Ci0KLQkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIC0gcmVzb2x2ZWQgYnkgdGhlIHBvd2VyZG9tYWluIGNvZGUgKi8KLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwotCi0JLyogRmxhZ3MgdG8gbWFyayBPTUFQIGNoaXAgcmVzdHJpY3Rpb25zLCBldGMuICovCi0JY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7Ci0KLX07Ci0KKy8qKgorICogc3RydWN0IHBvd2VyZG9tYWluIC0gT01BUCBwb3dlcmRvbWFpbgorICogQG5hbWU6IFBvd2VyZG9tYWluIG5hbWUKKyAqIEBvbWFwX2NoaXA6IHJlcHJlc2VudHMgdGhlIE9NQVAgY2hpcCB0eXBlcyBjb250YWluaW5nIHRoaXMgcHdyZG0KKyAqIEBwcmNtX29mZnM6IHRoZSBhZGRyZXNzIG9mZnNldCBmcm9tIENNX0JBU0UvUFJNX0JBU0UKKyAqIEBwd3JzdHM6IFBvc3NpYmxlIHBvd2VyZG9tYWluIHBvd2VyIHN0YXRlcworICogQHB3cnN0c19sb2dpY19yZXQ6IFBvc3NpYmxlIGxvZ2ljIHBvd2VyIHN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgorICogQGZsYWdzOiBQb3dlcmRvbWFpbiBmbGFncworICogQGJhbmtzOiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAcHdyc3RzX21lbV9yZXQ6IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgorICogQHB3cnN0c19tZW1fb246IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIE9OCisgKiBAcHdyZG1fY2xrZG1zOiBDbG9ja2RvbWFpbnMgaW4gdGhpcyBwb3dlcmRvbWFpbgorICogQG5vZGU6IGxpc3RfaGVhZCBsaW5raW5nIGFsbCBwb3dlcmRvbWFpbnMKKyAqIEBzdGF0ZToKKyAqIEBzdGF0ZV9jb3VudGVyOgorICogQHRpbWVyOgorICogQHN0YXRlX3RpbWVyOgorICovCiBzdHJ1Y3QgcG93ZXJkb21haW4gewotCi0JLyogUG93ZXJkb21haW4gbmFtZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkvKiB0aGUgYWRkcmVzcyBvZmZzZXQgZnJvbSBDTV9CQVNFL1BSTV9CQVNFICovCi0JY29uc3QgczE2IHByY21fb2ZmczsKLQotCS8qIFVzZWQgdG8gcmVwcmVzZW50IHRoZSBPTUFQIGNoaXAgdHlwZXMgY29udGFpbmluZyB0aGlzIHB3cmRtICovCiAJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7Ci0KLQkvKiBQb3dlcmRvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byB3YWtlIHRoaXMgcG93ZXJkb21haW4gdXAgKi8KLQlzdHJ1Y3QgcHdyZG1fZGVwICp3a2RlcF9zcmNzOwotCi0JLyogUG93ZXJkb21haW5zIHRoYXQgY2FuIGJlIHRvbGQgdG8ga2VlcCB0aGlzIHB3cmRtIGZyb20gaW5hY3Rpdml0eSAqLwotCXN0cnVjdCBwd3JkbV9kZXAgKnNsZWVwZGVwX3NyY3M7Ci0KLQkvKiBCaXQgc2hpZnQgb2YgdGhpcyBwb3dlcmRvbWFpbidzIFBNX1dLREVQL0NNX1NMRUVQREVQIGJpdCAqLwotCWNvbnN0IHU4IGRlcF9iaXQ7Ci0KLQkvKiBQb3NzaWJsZSBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZXMgKi8KKwljb25zdCBzMTYgcHJjbV9vZmZzOwogCWNvbnN0IHU4IHB3cnN0czsKLQotCS8qIFBvc3NpYmxlIGxvZ2ljIHBvd2VyIHN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTiAqLwogCWNvbnN0IHU4IHB3cnN0c19sb2dpY19yZXQ7Ci0KLQkvKiBQb3dlcmRvbWFpbiBmbGFncyAqLwogCWNvbnN0IHU4IGZsYWdzOwotCi0JLyogTnVtYmVyIG9mIHNvZnR3YXJlLWNvbnRyb2xsYWJsZSBtZW1vcnkgYmFua3MgaW4gdGhpcyBwb3dlcmRvbWFpbiAqLwogCWNvbnN0IHU4IGJhbmtzOwotCi0JLyogUG9zc2libGUgbWVtb3J5IGJhbmsgcHdyc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OICovCiAJY29uc3QgdTggcHdyc3RzX21lbV9yZXRbUFdSRE1fTUFYX01FTV9CQU5LU107Ci0KLQkvKiBQb3NzaWJsZSBtZW1vcnkgYmFuayBwd3JzdGF0ZXMgd2hlbiBwd3JkbSBpcyBPTiAqLwogCWNvbnN0IHU4IHB3cnN0c19tZW1fb25bUFdSRE1fTUFYX01FTV9CQU5LU107Ci0KLQkvKiBDbG9ja2RvbWFpbnMgaW4gdGhpcyBwb3dlcmRvbWFpbiAqLwogCXN0cnVjdCBjbG9ja2RvbWFpbiAqcHdyZG1fY2xrZG1zW1BXUkRNX01BWF9DTEtETVNdOwotCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCiAJaW50IHN0YXRlOwogCXVuc2lnbmVkIHN0YXRlX2NvdW50ZXJbUFdSRE1fTUFYX1BXUlNUU107CisJdW5zaWduZWQgcmV0X2xvZ2ljX29mZl9jb3VudGVyOworCXVuc2lnbmVkIHJldF9tZW1fb2ZmX2NvdW50ZXJbUFdSRE1fTUFYX01FTV9CQU5LU107CiAKICNpZmRlZiBDT05GSUdfUE1fREVCVUcKIAlzNjQgdGltZXI7CkBAIC0xMzQsOCArMTEyLDYgQEAKIAogdm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpOwogCi1pbnQgcHdyZG1fcmVnaXN0ZXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Ci1pbnQgcHdyZG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBpbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVzZXIpLApAQCAtMTQ5LDEzICsxMjUsNiBAQAogCQkJIGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJCSAgIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKTsKIAotaW50IHB3cmRtX2FkZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOwotaW50IHB3cmRtX2RlbF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOwotaW50IHB3cmRtX3JlYWRfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKLWludCBwd3JkbV9hZGRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKLWludCBwd3JkbV9kZWxfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKLWludCBwd3JkbV9yZWFkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7Ci0KIGludCBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiAKIGludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CkBAIC0xNzAsOCArMTM5LDEwIEBACiAKIGludCBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogaW50IHB3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogaW50IHB3cmRtX3JlYWRfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOwogaW50IHB3cmRtX3JlYWRfcHJldl9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CitpbnQgcHdyZG1fcmVhZF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CiAKIGludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiBpbnQgcHdyZG1fZGlzYWJsZV9oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcHJjbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wcmNtLmgKaW5kZXggZTYzZTk0ZS4uZDZhMGUyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wcmNtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wcmNtLmgKQEAgLTI1LDcgKzI1LDggQEAKIAogdTMyIG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKTsKIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKTsKLWludCBvbWFwMl9jbV93YWl0X2lkbGVzdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IG9tYXAyX2NtX3dhaXRfaWRsZXN0KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgdTggaWRsZXN0LAorCQkJIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAjZGVmaW5lIFNUQVJUX1BBRENPTkZfU0FWRSAweDIKICNkZWZpbmUgUEFEQ09ORl9TQVZFX0RPTkUgIDB4MQpAQCAtMzMsNiArMzQsMTQgQEAKIHZvaWQgb21hcDNfcHJjbV9zYXZlX2NvbnRleHQodm9pZCk7CiB2b2lkIG9tYXAzX3ByY21fcmVzdG9yZV9jb250ZXh0KHZvaWQpOwogCit1MzIgcHJtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KTsKK3ZvaWQgcHJtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCk7Cit1MzIgcHJtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKK3UzMiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChzMTYgZG9tYWluLCBzMTYgaWR4LCB1MzIgbWFzayk7Cit1MzIgY21fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHUxNiBpZHgpOwordm9pZCBjbV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHUxNiBpZHgpOwordTMyIGNtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKKwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKaW5kZXggZjVhNGE5Mi4uODNkY2U0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCkBAIC0xNSwzNyArMTUsNjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAvKiBPTUFQMSBzZXJpYWwgcG9ydHMgKi8KLSNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkweGZmZmIwMDAwCi0jZGVmaW5lIE9NQVBfVUFSVDJfQkFTRQkJMHhmZmZiMDgwMAotI2RlZmluZSBPTUFQX1VBUlQzX0JBU0UJCTB4ZmZmYjk4MDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisjZGVmaW5lIE9NQVAxX1VBUlQxX0JBU0UJMHhmZmZiMDAwMAorI2RlZmluZSBPTUFQMV9VQVJUMl9CQVNFCTB4ZmZmYjA4MDAKKyNkZWZpbmUgT01BUDFfVUFSVDNfQkFTRQkweGZmZmI5ODAwCisKIC8qIE9NQVAyIHNlcmlhbCBwb3J0cyAqLwotI2RlZmluZSBPTUFQX1VBUlQxX0JBU0UJCTB4NDgwNmEwMDAKLSNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkweDQ4MDZjMDAwCi0jZGVmaW5lIE9NQVBfVUFSVDNfQkFTRQkJMHg0ODA2ZTAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKyNkZWZpbmUgT01BUDJfVUFSVDFfQkFTRQkweDQ4MDZhMDAwCisjZGVmaW5lIE9NQVAyX1VBUlQyX0JBU0UJMHg0ODA2YzAwMAorI2RlZmluZSBPTUFQMl9VQVJUM19CQVNFCTB4NDgwNmUwMDAKKwogLyogT01BUDMgc2VyaWFsIHBvcnRzICovCi0jZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAotI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKLSNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ5MDIwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2RlZmluZSBPTUFQM19VQVJUMV9CQVNFCU9NQVAyX1VBUlQxX0JBU0UKKyNkZWZpbmUgT01BUDNfVUFSVDJfQkFTRQlPTUFQMl9VQVJUMl9CQVNFCisjZGVmaW5lIE9NQVAzX1VBUlQzX0JBU0UJMHg0OTAyMDAwMAorI2RlZmluZSBPTUFQM19VQVJUNF9CQVNFCTB4NDkwNDIwMDAJLyogT25seSBvbiAzNnh4ICovCisKIC8qIE9NQVA0IHNlcmlhbCBwb3J0cyAqLwotI2RlZmluZSBPTUFQX1VBUlQxX0JBU0UJCTB4NDgwNmEwMDAKLSNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkweDQ4MDZjMDAwCi0jZGVmaW5lIE9NQVBfVUFSVDNfQkFTRQkJMHg0ODAyMDAwMAotI2RlZmluZSBPTUFQX1VBUlQ0X0JBU0UJCTB4NDgwNmUwMDAKLSNlbmRpZgorI2RlZmluZSBPTUFQNF9VQVJUMV9CQVNFCU9NQVAyX1VBUlQxX0JBU0UKKyNkZWZpbmUgT01BUDRfVUFSVDJfQkFTRQlPTUFQMl9VQVJUMl9CQVNFCisjZGVmaW5lIE9NQVA0X1VBUlQzX0JBU0UJMHg0ODAyMDAwMAorI2RlZmluZSBPTUFQNF9VQVJUNF9CQVNFCTB4NDgwNmUwMDAKKworLyogRXh0ZXJuYWwgcG9ydCBvbiBab29tMi8zICovCisjZGVmaW5lIFpPT01fVUFSVF9CQVNFCQkweDEwMDAwMDAwCisjZGVmaW5lIFpPT01fVUFSVF9WSVJUCQkweGZiMDAwMDAwCisKKyNkZWZpbmUgT01BUF9QT1JUX1NISUZUCQkyCisjZGVmaW5lIE9NQVA3WFhfUE9SVF9TSElGVAkwCisjZGVmaW5lIFpPT01fUE9SVF9TSElGVAkJMQogCiAjZGVmaW5lIE9NQVAxNTEwX0JBU0VfQkFVRAkoMTIwMDAwMDAvMTYpCiAjZGVmaW5lIE9NQVAxNlhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCiAjZGVmaW5lIE9NQVAyNFhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCiAKKy8qCisgKiBERUJVR19MTCBwb3J0IGVuY29kaW5nIHN0b3JlZCBpbnRvIHRoZSBVQVJUMSBzY3JhdGNocGFkIHJlZ2lzdGVyIGJ5CisgKiBkZWNvbXBfc2V0dXAgaW4gdW5jb21wcmVzcy5oCisgKi8KKyNkZWZpbmUgT01BUDFVQVJUMQkJMTEKKyNkZWZpbmUgT01BUDFVQVJUMgkJMTIKKyNkZWZpbmUgT01BUDFVQVJUMwkJMTMKKyNkZWZpbmUgT01BUDJVQVJUMQkJMjEKKyNkZWZpbmUgT01BUDJVQVJUMgkJMjIKKyNkZWZpbmUgT01BUDJVQVJUMwkJMjMKKyNkZWZpbmUgT01BUDNVQVJUMQkJT01BUDJVQVJUMQorI2RlZmluZSBPTUFQM1VBUlQyCQlPTUFQMlVBUlQyCisjZGVmaW5lIE9NQVAzVUFSVDMJCTMzCisjZGVmaW5lIE9NQVAzVUFSVDQJCTM0CQkvKiBPbmx5IG9uIDM2eHggKi8KKyNkZWZpbmUgT01BUDRVQVJUMQkJT01BUDJVQVJUMQorI2RlZmluZSBPTUFQNFVBUlQyCQlPTUFQMlVBUlQyCisjZGVmaW5lIE9NQVA0VUFSVDMJCTQzCisjZGVmaW5lIE9NQVA0VUFSVDQJCTQ0CisjZGVmaW5lIFpPT01fVUFSVAkJOTUJCS8qIE9ubHkgb24gem9vbTIvMyAqLworCisvKiBUaGlzIGlzIG9ubHkgdXNlZCBieSA4MjUwLmMgZm9yIG9tYXAxNTEwICovCiAjZGVmaW5lIGlzX29tYXBfcG9ydChwdCkJKHtpbnQgX19yZXQgPSAwOwkJCVwKLQkJCWlmICgocHQpLT5wb3J0Lm1hcGJhc2UgPT0gT01BUF9VQVJUMV9CQVNFIHx8CVwKLQkJCSAgICAocHQpLT5wb3J0Lm1hcGJhc2UgPT0gT01BUF9VQVJUMl9CQVNFIHx8CVwKLQkJCSAgICAocHQpLT5wb3J0Lm1hcGJhc2UgPT0gT01BUF9VQVJUM19CQVNFKQlcCisJCQlpZiAoKHB0KS0+cG9ydC5tYXBiYXNlID09IE9NQVAxX1VBUlQxX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQMV9VQVJUMl9CQVNFIHx8CVwKKwkJCSAgICAocHQpLT5wb3J0Lm1hcGJhc2UgPT0gT01BUDFfVUFSVDNfQkFTRSkJXAogCQkJCV9fcmV0ID0gMTsJCQkJXAogCQkJX19yZXQ7CQkJCQkJXAogCQkJfSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKaW5kZXggMTNjMzA1ZC4uODFkOWVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKQEAgLTE5LDYyICsxOSwzOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAotdW5zaWduZWQgaW50IHN5c3RlbV9yZXY7CitzdGF0aWMgdm9sYXRpbGUgdTggKnVhcnQxX2Jhc2U7CitzdGF0aWMgaW50IHVhcnQxX3NoaWZ0OwogCi0jZGVmaW5lIFVBUlRfT01BUF9NRFIxCQkweDA4CS8qIG1vZGUgZGVmaW5pdGlvbiByZWdpc3RlciAqLwotI2RlZmluZSBPTUFQX0lEXzczMAkJMHgzNTVGCi0jZGVmaW5lIE9NQVBfSURfODUwCQkweDM2MkMKLSNkZWZpbmUgSURfTUFTSwkJCTB4N2ZmZgotI2RlZmluZSBjaGVja19wb3J0KGJhc2UsIHNoaWZ0KSAoKGJhc2VbVUFSVF9PTUFQX01EUjEgPDwgc2hpZnRdICYgNykgPT0gMCkKLSNkZWZpbmUgb21hcF9nZXRfaWQoKSAoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKDB4ZmZmZWQ0MDQpKSA+PiAxMikgJiBJRF9NQVNLCitzdGF0aWMgdm9sYXRpbGUgdTggKnVhcnRfYmFzZTsKK3N0YXRpYyBpbnQgdWFydF9zaGlmdDsKKworLyoKKyAqIFN0b3JlIHRoZSBERUJVR19MTCB1YXJ0IG51bWJlciBpbnRvIFVBUlQxIHNjcmF0Y2hwYWQgcmVnaXN0ZXIuCisgKiBTZWUgYWxzbyBkZWJ1Zy1tYWNyby5TLCBhbmQgc2VyaWFsLmMgZm9yIHJlbGF0ZWQgY29kZS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdDoKKyAqIC0gVUFSVDEgY2xvY2tzIGFyZSBlbmFibGVkIGZvciByZWdpc3RlciBhY2Nlc3MKKyAqIC0gVUFSVDEgc2NyYXRjaHBhZCByZWdpc3RlciBjYW4gYmUgdXNlZAorICovCitzdGF0aWMgdm9pZCBzZXRfdWFydDFfc2NyYXRjaHBhZCh1bnNpZ25lZCBjaGFyIHBvcnQpCit7CisJdWFydDFfYmFzZVtVQVJUX1NDUiA8PCB1YXJ0MV9zaGlmdF0gPSBwb3J0OworfQogCiBzdGF0aWMgdm9pZCBwdXRjKGludCBjKQogewotCXZvbGF0aWxlIHU4ICogdWFydCA9IDA7Ci0JaW50IHNoaWZ0ID0gMjsKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVRFCi0JcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQCi0jaWZkZWYJQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKLQl1YXJ0ID0gKHZvbGF0aWxlIHU4ICopKE9NQVBfVUFSVDNfQkFTRSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyKQotCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMl9CQVNFKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEpCi0JdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQxX0JBU0UpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfT01BUF9MTF9ERUJVR19OT05FKQotCXJldHVybjsKLSNlbHNlCi0JcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQotCS8qIERldGVybWluZSB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KLQlkbyB7Ci0JCS8qIE1NVSBpcyBub3Qgb24sIHNvIGNwdV9pc19vbWFwWFhYWCgpIHdvbid0IHdvcmsgaGVyZSAqLwotCQl1bnNpZ25lZCBpbnQgb21hcF9pZCA9IG9tYXBfZ2V0X2lkKCk7Ci0KLQkJaWYgKG9tYXBfaWQgPT0gT01BUF9JRF83MzAgfHwgb21hcF9pZCA9PSBPTUFQX0lEXzg1MCkKLQkJCXNoaWZ0ID0gMDsKLQotCQlpZiAoY2hlY2tfcG9ydCh1YXJ0LCBzaGlmdCkpCi0JCQlicmVhazsKLQkJLyogU2lsZW50IGJvb3QgaWYgbm8gc2VyaWFsIHBvcnRzIGFyZSBlbmFibGVkLiAqLworCWlmICghdWFydF9iYXNlKQogCQlyZXR1cm47Ci0JfSB3aGlsZSAoMCk7Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDEgKi8KLSNlbmRpZgogCi0JLyoKLQkgKiBOb3csIHhtaXQgZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQl3aGlsZSAoISh1YXJ0W1VBUlRfTFNSIDw8IHNoaWZ0XSAmIFVBUlRfTFNSX1RIUkUpKQorCXdoaWxlICghKHVhcnRfYmFzZVtVQVJUX0xTUiA8PCB1YXJ0X3NoaWZ0XSAmIFVBUlRfTFNSX1RIUkUpKQogCQliYXJyaWVyKCk7Ci0JdWFydFtVQVJUX1RYIDw8IHNoaWZ0XSA9IGM7CisJdWFydF9iYXNlW1VBUlRfVFggPDwgdWFydF9zaGlmdF0gPSBjOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKQEAgLTgyLDcgKzU4LDExNiBAQAogfQogCiAvKgorICogTWFjcm9zIHRvIGNvbmZpZ3VyZSBVQVJUMSBhbmQgZGVidWcgVUFSVAorICovCisjZGVmaW5lIF9ERUJVR19MTF9FTlRSWShtYWNoLCB1YXJ0MV9waHlzLCB1YXJ0MV9zaGZ0LAkJCVwKKwkJCWRiZ191YXJ0LCBkYmdfc2hmdCwgZGJnX2lkKQkJCVwKKwlpZiAobWFjaGluZV9pc18jI21hY2goKSkgewkJCQkJXAorCQl1YXJ0MV9iYXNlID0gKHZvbGF0aWxlIHU4ICopKHVhcnQxX3BoeXMpOwkJXAorCQl1YXJ0MV9zaGlmdCA9ICh1YXJ0MV9zaGZ0KTsJCQkJXAorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTggKikoZGJnX3VhcnQpOwkJCVwKKwkJdWFydF9zaGlmdCA9IChkYmdfc2hmdCk7CQkJCVwKKwkJcG9ydCA9IChkYmdfaWQpOwkJCQkJXAorCQlzZXRfdWFydDFfc2NyYXRjaHBhZChwb3J0KTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0KKworI2RlZmluZSBERUJVR19MTF9PTUFQN1hYKHAsIG1hY2gpCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVAxX1VBUlQxX0JBU0UsIE9NQVA3WFhfUE9SVF9TSElGVCwJXAorCQlPTUFQMV9VQVJUIyNwIyNfQkFTRSwgT01BUDdYWF9QT1JUX1NISUZULCBPTUFQMVVBUlQjI3ApCisKKyNkZWZpbmUgREVCVUdfTExfT01BUDEocCwgbWFjaCkJCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVAxX1VBUlQxX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlPTUFQMV9VQVJUIyNwIyNfQkFTRSwgT01BUF9QT1JUX1NISUZULCBPTUFQMVVBUlQjI3ApCisKKyNkZWZpbmUgREVCVUdfTExfT01BUDIocCwgbWFjaCkJCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVAyX1VBUlQxX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlPTUFQMl9VQVJUIyNwIyNfQkFTRSwgT01BUF9QT1JUX1NISUZULCBPTUFQMlVBUlQjI3ApCisKKyNkZWZpbmUgREVCVUdfTExfT01BUDMocCwgbWFjaCkJCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVAzX1VBUlQxX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlPTUFQM19VQVJUIyNwIyNfQkFTRSwgT01BUF9QT1JUX1NISUZULCBPTUFQM1VBUlQjI3ApCisKKyNkZWZpbmUgREVCVUdfTExfT01BUDQocCwgbWFjaCkJCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVA0X1VBUlQxX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlPTUFQNF9VQVJUIyNwIyNfQkFTRSwgT01BUF9QT1JUX1NISUZULCBPTUFQNFVBUlQjI3ApCisKKy8qIFpvb20yLzMgc2hpZnQgaXMgZGlmZmVyZW50IGZvciBVQVJUMSBhbmQgZXh0ZXJuYWwgcG9ydCAqLworI2RlZmluZSBERUJVR19MTF9aT09NKG1hY2gpCQkJCQkJXAorCV9ERUJVR19MTF9FTlRSWShtYWNoLCBPTUFQMl9VQVJUMV9CQVNFLCBPTUFQX1BPUlRfU0hJRlQsCVwKKwkJWk9PTV9VQVJUX0JBU0UsIFpPT01fUE9SVF9TSElGVCwgWk9PTV9VQVJUKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisJaW50IHBvcnQgPSAwOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBwb3J0IGJhc2VkIG9uIHRoZSBtYWNoaW5lIElEIGZyb20gdGhlIGJvb3Rsb2FkZXIuCisJICogTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIG1hY3JvcyBoZXJlIGluc3RlYWQgb2Ygc3dpdGNoIHN0YXRlbWVudAorCSAqIGFzIG1hY2hpbmVfaXMgZnVuY3Rpb25zIGFyZSBvcHRpbWl6ZWQgb3V0IGZvciB0aGUgYm9hcmRzIHRoYXQKKwkgKiBhcmUgbm90IHNlbGVjdGVkLgorCSAqLworCWRvIHsKKwkJLyogb21hcDd4eC84eHggYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQxIHdpdGggc2hpZnQgMCAqLworCQlERUJVR19MTF9PTUFQN1hYKDEsIGhlcmFsZCk7CisJCURFQlVHX0xMX09NQVA3WFgoMSwgb21hcF9wZXJzZXVzMik7CisKKwkJLyogb21hcDE1eHgvMTZ4eCBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDEgKi8KKwkJREVCVUdfTExfT01BUDEoMSwgYW1zX2RlbHRhKTsKKwkJREVCVUdfTExfT01BUDEoMSwgbm9raWE3NzApOworCQlERUJVR19MTF9PTUFQMSgxLCBvbWFwX2gyKTsKKwkJREVCVUdfTExfT01BUDEoMSwgb21hcF9oMyk7CisJCURFQlVHX0xMX09NQVAxKDEsIG9tYXBfaW5ub3ZhdG9yKTsKKwkJREVCVUdfTExfT01BUDEoMSwgb21hcF9vc2spOworCQlERUJVR19MTF9PTUFQMSgxLCBvbWFwX3BhbG10ZSk7CisJCURFQlVHX0xMX09NQVAxKDEsIG9tYXBfcGFsbXo3MSk7CisKKwkJLyogb21hcDE1eHgvMTZ4eCBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDIgKi8KKwkJREVCVUdfTExfT01BUDEoMiwgb21hcF9wYWxtdHQpOworCisJCS8qIG9tYXAxNXh4LzE2eHggYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQzICovCisJCURFQlVHX0xMX09NQVAxKDMsIHN4MSk7CisKKwkJLyogb21hcDIgYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQxICovCisJCURFQlVHX0xMX09NQVAyKDEsIG9tYXAyZXZtKTsKKwkJREVCVUdfTExfT01BUDIoMSwgb21hcF8yNDMwc2RwKTsKKwkJREVCVUdfTExfT01BUDIoMSwgb21hcF9hcG9sbG9uKTsKKwkJREVCVUdfTExfT01BUDIoMSwgb21hcF9oNCk7CisKKwkJLyogb21hcDIgYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQzICovCisJCURFQlVHX0xMX09NQVAyKDMsIG5va2lhX244MDApOworCQlERUJVR19MTF9PTUFQMigzLCBub2tpYV9uODEwKTsKKwkJREVCVUdfTExfT01BUDIoMywgbm9raWFfbjgxMF93aW1heCk7CisKKwkJLyogb21hcDMgYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQxICovCisJCURFQlVHX0xMX09NQVAyKDEsIG9tYXAzZXZtKTsKKwkJREVCVUdfTExfT01BUDMoMSwgb21hcF8zNDMwc2RwKTsKKwkJREVCVUdfTExfT01BUDMoMSwgb21hcF8zNjMwc2RwKTsKKworCQkvKiBvbWFwMyBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDMgKi8KKwkJREVCVUdfTExfT01BUDMoMywgY21fdDM1KTsKKwkJREVCVUdfTExfT01BUDMoMywgaWdlcDAwMjApOworCQlERUJVR19MTF9PTUFQMygzLCBub2tpYV9yeDUxKTsKKwkJREVCVUdfTExfT01BUDMoMywgb21hcDM1MTdldm0pOworCQlERUJVR19MTF9PTUFQMygzLCBvbWFwM19iZWFnbGUpOworCQlERUJVR19MTF9PTUFQMygzLCBvbWFwM19wYW5kb3JhKTsKKwkJREVCVUdfTExfT01BUDMoMywgb21hcF9sZHApOworCQlERUJVR19MTF9PTUFQMygzLCBvdmVybyk7CisJCURFQlVHX0xMX09NQVAzKDMsIHRvdWNoYm9vayk7CisKKwkJLyogb21hcDQgYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQzICovCisJCURFQlVHX0xMX09NQVA0KDMsIG9tYXBfNDQzMHNkcCk7CisKKwkJLyogem9vbTIvMyBleHRlcm5hbCB1YXJ0ICovCisJCURFQlVHX0xMX1pPT00ob21hcF96b29tMik7CisJCURFQlVHX0xMX1pPT00ob21hcF96b29tMyk7CisKKwl9IHdoaWxlICgwKTsKK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKKworLyoKICAqIG5vdGhpbmcgdG8gZG8KICAqLwotI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmgKaW5kZXggMzNhNTAwZS4uMjg4ZTI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oCkBAIC0zLDYgKzMsNyBAQAogI2lmbmRlZglfX0FTTV9BUkNIX09NQVBfVVNCX0gKICNkZWZpbmUJX19BU01fQVJDSF9PTUFQX1VTQl9ICiAKKyNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KIAogI2RlZmluZSBPTUFQM19IU19VU0JfUE9SVFMJMwpAQCAtNDIsNyArNDMsMTUgQEAKICNkZWZpbmUgVURDX0JBU0UJCQlPTUFQMl9VRENfQkFTRQogI2RlZmluZSBPTUFQX09IQ0lfQkFTRQkJCU9NQVAyX09IQ0lfQkFTRQogCi1leHRlcm4gdm9pZCB1c2JfbXVzYl9pbml0KHZvaWQpOworc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIHsKKwl1OAlpbnRlcmZhY2VfdHlwZTsKKwl1OAltb2RlOworCXU4CXBvd2VyOworfTsKKworZW51bSBtdXNiX2ludGVyZmFjZSAgICB7TVVTQl9JTlRFUkZBQ0VfVUxQSSwgTVVTQl9JTlRFUkZBQ0VfVVRNSX07CisKK2V4dGVybiB2b2lkIHVzYl9tdXNiX2luaXQoc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhICpib2FyZF9kYXRhKTsKIAogZXh0ZXJuIHZvaWQgdXNiX2VoY2lfaW5pdChzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKaW5kZXggMGNmZDU0Zi4uYjAwNzhjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKQEAgLTkwLDggKzkwLDYgQEAKIAkJCXJldHVybiBYTEFURShwLCBMM18zNFhYX1BIWVMsIEwzXzM0WFhfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9TSVpFKSkKIAkJCXJldHVybiBYTEFURShwLCBMNF8zNFhYX1BIWVMsIEw0XzM0WFhfVklSVCk7Ci0JCWlmIChCRVRXRUVOKHAsIEw0X1dLXzM0WFhfUEhZUywgTDRfV0tfMzRYWF9TSVpFKSkKLQkJCXJldHVybiBYTEFURShwLCBMNF9XS18zNFhYX1BIWVMsIEw0X1dLXzM0WFhfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIE9NQVAzNFhYX0dQTUNfUEhZUywgT01BUDM0WFhfR1BNQ19TSVpFKSkKIAkJCXJldHVybiBYTEFURShwLCBPTUFQMzRYWF9HUE1DX1BIWVMsIE9NQVAzNFhYX0dQTUNfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIE9NQVAzNDNYX1NNU19QSFlTLCBPTUFQMzQzWF9TTVNfU0laRSkpCkBAIC0xMTAsOCArMTA4LDYgQEAKIAkJCXJldHVybiBYTEFURShwLCBMM180NFhYX1BIWVMsIEwzXzQ0WFhfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIEw0XzQ0WFhfUEhZUywgTDRfNDRYWF9TSVpFKSkKIAkJCXJldHVybiBYTEFURShwLCBMNF80NFhYX1BIWVMsIEw0XzQ0WFhfVklSVCk7Ci0JCWlmIChCRVRXRUVOKHAsIEw0X1dLXzQ0WFhfUEhZUywgTDRfV0tfNDRYWF9TSVpFKSkKLQkJCXJldHVybiBYTEFURShwLCBMNF9XS180NFhYX1BIWVMsIEw0X1dLXzQ0WFhfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIE9NQVA0NFhYX0dQTUNfUEhZUywgT01BUDQ0WFhfR1BNQ19TSVpFKSkKIAkJCXJldHVybiBYTEFURShwLCBPTUFQNDRYWF9HUE1DX1BIWVMsIE9NQVA0NFhYX0dQTUNfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIE9NQVA0NFhYX0VNSUYxX1BIWVMsIE9NQVA0NFhYX0VNSUYxX1NJWkUpKQpAQCAtMTI4LDcgKzEyNCw3IEBACiAJCQlyZXR1cm4gWExBVEUocCwgTDRfRU1VXzQ0WFhfUEhZUywgTDRfRU1VXzQ0WFhfVklSVCk7CiAJfQogI2VuZGlmCi0JcmV0dXJuIF9fYXJtX2lvcmVtYXAocCwgc2l6ZSwgdHlwZSk7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHAsIHNpemUsIHR5cGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfaW9yZW1hcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNDYzZDYzOC4uOTA1ZWQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogb21hcCBpb21tdTogdGxiIGFuZCBwYWdldGFibGUgcHJpbWl0aXZlcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPiwKICAqCQlQYXVsIE11bmR0IGFuZCBUb3NoaWhpcm8gS29iYXlhc2hpCkBAIC02NDYsNyArNjQ2LDcgQEAKIAkJaWYgKCppb3B0ZSAmIElPUFRFX0xBUkdFKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KLQkJCWlvcHRlID0gKHUzMiAqKSgodTMyKWlvcHRlICYgSU9MQVJHRV9NQVNLKTsKKwkJCWlvcHRlID0gaW9wdGVfb2Zmc2V0KGlvcGdkLCAoZGEgJiBJT0xBUkdFX01BU0spKTsKIAkJfQogCQlieXRlcyAqPSBuZW50OwogCQltZW1zZXQoaW9wdGUsIDAsIG5lbnQgKiBzaXplb2YoKmlvcHRlKSk7CkBAIC02NjcsNyArNjY3LDcgQEAKIAkJaWYgKCgqaW9wZ2QgJiBJT1BHRF9TVVBFUikgPT0gSU9QR0RfU1VQRVIpIHsKIAkJCW5lbnQgKj0gMTY7CiAJCQkvKiByZXdpbmQgdG8gdGhlIDFzdCBlbnRyeSAqLwotCQkJaW9wZ2QgPSAodTMyICopKCh1MzIpaW9wZ2QgJiBJT1NVUEVSX01BU0spOworCQkJaW9wZ2QgPSBpb3BnZF9vZmZzZXQob2JqLCAoZGEgJiBJT1NVUEVSX01BU0spKTsKIAkJfQogCQlieXRlcyAqPSBuZW50OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3BndGFibGUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb3BndGFibGUuaAppbmRleCAzN2RhYzQzLi5hYjIzYjZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvcGd0YWJsZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG9tYXAgaW9tbXU6IHBhZ2V0YWJsZSBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgogICoKQEAgLTEzLDI2ICsxMyw1MiBAQAogI2lmbmRlZiBfX1BMQVRfT01BUF9JT01NVV9ICiAjZGVmaW5lIF9fUExBVF9PTUFQX0lPTU1VX0gKIAorLyoKKyAqICJMMiB0YWJsZSIgYWRkcmVzcyBtYXNrIGFuZCBzaXplIGRlZmluaXRpb25zLgorICovCiAjZGVmaW5lIElPUEdEX1NISUZUCQkyMAotI2RlZmluZSBJT1BHRF9TSVpFCQkoMSA8PCBJT1BHRF9TSElGVCkKKyNkZWZpbmUgSU9QR0RfU0laRQkJKDFVTCA8PCBJT1BHRF9TSElGVCkKICNkZWZpbmUgSU9QR0RfTUFTSwkJKH4oSU9QR0RfU0laRSAtIDEpKQotI2RlZmluZSBJT1NFQ1RJT05fTUFTSwkJSU9QR0RfTUFTSwotI2RlZmluZSBQVFJTX1BFUl9JT1BHRAkJKDEgPDwgKDMyIC0gSU9QR0RfU0hJRlQpKQotI2RlZmluZSBJT1BHRF9UQUJMRV9TSVpFCShQVFJTX1BFUl9JT1BHRCAqIHNpemVvZih1MzIpKQogCi0jZGVmaW5lIElPU1VQRVJfU0laRQkJKElPUEdEX1NJWkUgPDwgNCkKKy8qCisgKiAic2VjdGlvbiIgYWRkcmVzcyBtYXNrIGFuZCBzaXplIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIElPU0VDVElPTl9TSElGVAkJMjAKKyNkZWZpbmUgSU9TRUNUSU9OX1NJWkUJCSgxVUwgPDwgSU9TRUNUSU9OX1NISUZUKQorI2RlZmluZSBJT1NFQ1RJT05fTUFTSwkJKH4oSU9TRUNUSU9OX1NJWkUgLSAxKSkKKworLyoKKyAqICJzdXBlcnNlY3Rpb24iIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBJT1NVUEVSX1NISUZUCQkyNAorI2RlZmluZSBJT1NVUEVSX1NJWkUJCSgxVUwgPDwgSU9TVVBFUl9TSElGVCkKICNkZWZpbmUgSU9TVVBFUl9NQVNLCQkofihJT1NVUEVSX1NJWkUgLSAxKSkKIAotI2RlZmluZSBJT1BURV9TSElGVAkJMTIKLSNkZWZpbmUgSU9QVEVfU0laRQkJKDEgPDwgSU9QVEVfU0hJRlQpCi0jZGVmaW5lIElPUFRFX01BU0sJCSh+KElPUFRFX1NJWkUgLSAxKSkKLSNkZWZpbmUgSU9QQUdFX01BU0sJCUlPUFRFX01BU0sKLSNkZWZpbmUgUFRSU19QRVJfSU9QVEUJCSgxIDw8IChJT1BHRF9TSElGVCAtIElPUFRFX1NISUZUKSkKLSNkZWZpbmUgSU9QVEVfVEFCTEVfU0laRQkoUFRSU19QRVJfSU9QVEUgKiBzaXplb2YodTMyKSkKKyNkZWZpbmUgUFRSU19QRVJfSU9QR0QJCSgxVUwgPDwgKDMyIC0gSU9QR0RfU0hJRlQpKQorI2RlZmluZSBJT1BHRF9UQUJMRV9TSVpFCShQVFJTX1BFUl9JT1BHRCAqIHNpemVvZih1MzIpKQogCi0jZGVmaW5lIElPTEFSR0VfU0laRQkJKElPUFRFX1NJWkUgPDwgNCkKKy8qCisgKiAic21hbGwgcGFnZSIgYWRkcmVzcyBtYXNrIGFuZCBzaXplIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIElPUFRFX1NISUZUCQkxMgorI2RlZmluZSBJT1BURV9TSVpFCQkoMVVMIDw8IElPUFRFX1NISUZUKQorI2RlZmluZSBJT1BURV9NQVNLCQkofihJT1BURV9TSVpFIC0gMSkpCisKKy8qCisgKiAibGFyZ2UgcGFnZSIgYWRkcmVzcyBtYXNrIGFuZCBzaXplIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIElPTEFSR0VfU0hJRlQJCTE2CisjZGVmaW5lIElPTEFSR0VfU0laRQkJKDFVTCA8PCBJT0xBUkdFX1NISUZUKQogI2RlZmluZSBJT0xBUkdFX01BU0sJCSh+KElPTEFSR0VfU0laRSAtIDEpKQogCisjZGVmaW5lIFBUUlNfUEVSX0lPUFRFCQkoMVVMIDw8IChJT1BHRF9TSElGVCAtIElPUFRFX1NISUZUKSkKKyNkZWZpbmUgSU9QVEVfVEFCTEVfU0laRQkoUFRSU19QRVJfSU9QVEUgKiBzaXplb2YodTMyKSkKKworI2RlZmluZSBJT1BBR0VfTUFTSwkJSU9QVEVfTUFTSworCisvKgorICogc29tZSBkZXNjcmlwdG9yIGF0dHJpYnV0ZXMuCisgKi8KICNkZWZpbmUgSU9QR0RfVEFCTEUJCSgxIDw8IDApCiAjZGVmaW5lIElPUEdEX1NFQ1RJT04JCSgyIDw8IDApCiAjZGVmaW5lIElPUEdEX1NVUEVSCQkoMSA8PCAxOCB8IDIgPDwgMCkKQEAgLTQwLDEyICs2NiwxNCBAQAogI2RlZmluZSBJT1BURV9TTUFMTAkJKDIgPDwgMCkKICNkZWZpbmUgSU9QVEVfTEFSR0UJCSgxIDw8IDApCiAKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwogI2RlZmluZSBpb3BnZF9pbmRleChkYSkJCSgoKGRhKSA+PiBJT1BHRF9TSElGVCkgJiAoUFRSU19QRVJfSU9QR0QgLSAxKSkKICNkZWZpbmUgaW9wZ2Rfb2Zmc2V0KG9iaiwgZGEpCSgob2JqKS0+aW9wZ2QgKyBpb3BnZF9pbmRleChkYSkpCiAKICNkZWZpbmUgaW9wdGVfcGFkZHIoaW9wZ2QpCSgqaW9wZ2QgJiB+KCgxIDw8IDEwKSAtIDEpKQogI2RlZmluZSBpb3B0ZV92YWRkcihpb3BnZCkJKCh1MzIgKilwaHlzX3RvX3ZpcnQoaW9wdGVfcGFkZHIoaW9wZ2QpKSkKIAorLyogdG8gZmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuICovCiAjZGVmaW5lIGlvcHRlX2luZGV4KGRhKQkJKCgoZGEpID4+IElPUFRFX1NISUZUKSAmIChQVFJTX1BFUl9JT1BURSAtIDEpKQogI2RlZmluZSBpb3B0ZV9vZmZzZXQoaW9wZ2QsIGRhKQkoaW9wdGVfdmFkZHIoaW9wZ2QpICsgaW9wdGVfaW5kZXgoZGEpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwppbmRleCA4ZTkwNjMzLi40MjI5Y2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHBsYXQvbWFpbGJveC5oPgogCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hkOwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKm1ib3hlczsKIHN0YXRpYyBERUZJTkVfUldMT0NLKG1ib3hlc19sb2NrKTsKIApAQCAtMTg4LDcgKzE4OSw3IEBACiAJLyogbm8gbW9yZSBtZXNzYWdlcyBpbiB0aGUgZmlmby4gY2xlYXIgSVJRIHNvdXJjZS4gKi8KIAlhY2tfbWJveF9pcnEobWJveCwgSVJRX1JYKTsKIG5vbWVtOgotCXNjaGVkdWxlX3dvcmsoJm1ib3gtPnJ4cS0+d29yayk7CisJcXVldWVfd29yayhtYm94ZCwgJm1ib3gtPnJ4cS0+d29yayk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYm94X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwKQpAQCAtNDAxLDEyICs0MDIsMTcgQEAKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9tYm94X2luaXQodm9pZCkKIHsKKwltYm94ZCA9IGNyZWF0ZV93b3JrcXVldWUoIm1ib3hkIik7CisJaWYgKCFtYm94ZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KG9tYXBfbWJveF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfbWJveF9leGl0KHZvaWQpCiB7CisJZGVzdHJveV93b3JrcXVldWUobWJveGQpOwogfQogbW9kdWxlX2V4aXQob21hcF9tYm94X2V4aXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IGY3NTc2NzIuLmU0NzY4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0yNyw2NCArMjcsOTcgQEAKICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KIAorI2luY2x1ZGUgIi4uL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgiCisKIHN0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOwotaW50IG9tYXBfbWNic3BfY291bnQ7CitpbnQgb21hcF9tY2JzcF9jb3VudCwgb21hcF9tY2JzcF9jYWNoZV9zaXplOwogCi12b2lkIG9tYXBfbWNic3Bfd3JpdGUodm9pZCBfX2lvbWVtICppb19iYXNlLCB1MTYgcmVnLCB1MzIgdmFsKQordm9pZCBvbWFwX21jYnNwX3dyaXRlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgdTE2IHJlZywgdTMyIHZhbCkKIHsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgfHwgY3B1X2lzX29tYXAyNDIwKCkpCi0JCV9fcmF3X3dyaXRldygodTE2KXZhbCwgaW9fYmFzZSArIHJlZyk7Ci0JZWxzZQotCQlfX3Jhd193cml0ZWwodmFsLCBpb19iYXNlICsgcmVnKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJKCh1MTYgKiltY2JzcC0+cmVnX2NhY2hlKVtyZWcgLyBzaXplb2YodTE2KV0gPSAodTE2KXZhbDsKKwkJX19yYXdfd3JpdGV3KCh1MTYpdmFsLCBtY2JzcC0+aW9fYmFzZSArIHJlZyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQkoKHUxNiAqKW1jYnNwLT5yZWdfY2FjaGUpW3JlZyAvIHNpemVvZih1MzIpXSA9ICh1MTYpdmFsOworCQlfX3Jhd193cml0ZXcoKHUxNil2YWwsIG1jYnNwLT5pb19iYXNlICsgcmVnKTsKKwl9IGVsc2UgeworCQkoKHUzMiAqKW1jYnNwLT5yZWdfY2FjaGUpW3JlZyAvIHNpemVvZih1MzIpXSA9IHZhbDsKKwkJX19yYXdfd3JpdGVsKHZhbCwgbWNic3AtPmlvX2Jhc2UgKyByZWcpOworCX0KIH0KIAotaW50IG9tYXBfbWNic3BfcmVhZCh2b2lkIF9faW9tZW0gKmlvX2Jhc2UsIHUxNiByZWcpCitpbnQgb21hcF9tY2JzcF9yZWFkKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgdTE2IHJlZywgYm9vbCBmcm9tX2NhY2hlKQogewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSB8fCBjcHVfaXNfb21hcDI0MjAoKSkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KGlvX2Jhc2UgKyByZWcpOwotCWVsc2UKLQkJcmV0dXJuIF9fcmF3X3JlYWRsKGlvX2Jhc2UgKyByZWcpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlyZXR1cm4gIWZyb21fY2FjaGUgPyBfX3Jhd19yZWFkdyhtY2JzcC0+aW9fYmFzZSArIHJlZykgOgorCQkJCSgodTE2ICopbWNic3AtPnJlZ19jYWNoZSlbcmVnIC8gc2l6ZW9mKHUxNildOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJcmV0dXJuICFmcm9tX2NhY2hlID8gX19yYXdfcmVhZHcobWNic3AtPmlvX2Jhc2UgKyByZWcpIDoKKwkJCQkoKHUxNiAqKW1jYnNwLT5yZWdfY2FjaGUpW3JlZyAvIHNpemVvZih1MzIpXTsKKwl9IGVsc2UgeworCQlyZXR1cm4gIWZyb21fY2FjaGUgPyBfX3Jhd19yZWFkbChtY2JzcC0+aW9fYmFzZSArIHJlZykgOgorCQkJCSgodTMyICopbWNic3AtPnJlZ19jYWNoZSlbcmVnIC8gc2l6ZW9mKHUzMildOworCX0KIH0KIAotI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKSBcCi0JCQlvbWFwX21jYnNwX3JlYWQoYmFzZSwgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCi0jZGVmaW5lIE9NQVBfTUNCU1BfV1JJVEUoYmFzZSwgcmVnLCB2YWwpIFwKLQkJCW9tYXBfbWNic3Bfd3JpdGUoYmFzZSwgT01BUF9NQ0JTUF9SRUdfIyNyZWcsIHZhbCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwordm9pZCBvbWFwX21jYnNwX3N0X3dyaXRlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBtY2JzcC0+c3RfZGF0YS0+aW9fYmFzZV9zdCArIHJlZyk7Cit9CisKK2ludCBvbWFwX21jYnNwX3N0X3JlYWQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwLCB1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChtY2JzcC0+c3RfZGF0YS0+aW9fYmFzZV9zdCArIHJlZyk7Cit9CisjZW5kaWYKKworI2RlZmluZSBNQ0JTUF9SRUFEKG1jYnNwLCByZWcpIFwKKwkJb21hcF9tY2JzcF9yZWFkKG1jYnNwLCBPTUFQX01DQlNQX1JFR18jI3JlZywgMCkKKyNkZWZpbmUgTUNCU1BfV1JJVEUobWNic3AsIHJlZywgdmFsKSBcCisJCW9tYXBfbWNic3Bfd3JpdGUobWNic3AsIE9NQVBfTUNCU1BfUkVHXyMjcmVnLCB2YWwpCisjZGVmaW5lIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIHJlZykgXAorCQlvbWFwX21jYnNwX3JlYWQobWNic3AsIE9NQVBfTUNCU1BfUkVHXyMjcmVnLCAxKQogCiAjZGVmaW5lIG9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpCShpZCA8IG9tYXBfbWNic3BfY291bnQpCiAjZGVmaW5lIGlkX3RvX21jYnNwX3B0cihpZCkJCW1jYnNwX3B0cltpZF07CiAKKyNkZWZpbmUgTUNCU1BfU1RfUkVBRChtY2JzcCwgcmVnKSBcCisJCQlvbWFwX21jYnNwX3N0X3JlYWQobWNic3AsIE9NQVBfU1RfUkVHXyMjcmVnKQorI2RlZmluZSBNQ0JTUF9TVF9XUklURShtY2JzcCwgcmVnLCB2YWwpIFwKKwkJCW9tYXBfbWNic3Bfc3Rfd3JpdGUobWNic3AsIE9NQVBfU1RfUkVHXyMjcmVnLCB2YWwpCisKIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfZHVtcF9yZWcodTggaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAogCWRldl9kYmcobWNic3AtPmRldiwgIioqKiogTWNCU1AlZCByZWdzICoqKipcbiIsIG1jYnNwLT5pZCk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFJSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFJSMikpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgRFJSMikpOwogCWRldl9kYmcobWNic3AtPmRldiwgIkRSUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERSUjEpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIERSUjEpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJEWFIyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBEWFIyKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBEWFIyKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFhSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFhSMSkpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgRFhSMSkpOwogCWRldl9kYmcobWNic3AtPmRldiwgIlNQQ1IyOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNQQ1IyKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMikpOwogCWRldl9kYmcobWNic3AtPmRldiwgIlNQQ1IxOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNQQ1IxKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSkpOwogCWRldl9kYmcobWNic3AtPmRldiwgIlJDUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFJDUjIpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIFJDUjIpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJSQ1IxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBSQ1IxKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBSQ1IxKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiWENSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgWENSMikpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgWENSMikpOwogCWRldl9kYmcobWNic3AtPmRldiwgIlhDUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFhDUjEpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIFhDUjEpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUkdSMjogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUkdSMikpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgU1JHUjIpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUkdSMTogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUkdSMSkpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgU1JHUjEpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJQQ1IwOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBQQ1IwKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBQQ1IwKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogfQogCkBAIC05MywxNSArMTI2LDE1IEBACiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwX3R4ID0gZGV2X2lkOwogCXUxNiBpcnFzdF9zcGNyMjsKIAotCWlycXN0X3NwY3IyID0gT01BUF9NQ0JTUF9SRUFEKG1jYnNwX3R4LT5pb19iYXNlLCBTUENSMik7CisJaXJxc3Rfc3BjcjIgPSBNQ0JTUF9SRUFEKG1jYnNwX3R4LCBTUENSMik7CiAJZGV2X2RiZyhtY2JzcF90eC0+ZGV2LCAiVFggSVJRIGNhbGxiYWNrIDogMHgleFxuIiwgaXJxc3Rfc3BjcjIpOwogCiAJaWYgKGlycXN0X3NwY3IyICYgWFNZTkNfRVJSKSB7CiAJCWRldl9lcnIobWNic3BfdHgtPmRldiwgIlRYIEZyYW1lIFN5bmMgRXJyb3IhIDogMHgleFxuIiwKIAkJCWlycXN0X3NwY3IyKTsKIAkJLyogV3JpdGluZyB6ZXJvIHRvIFhTWU5DX0VSUiBjbGVhcnMgdGhlIElSUSAqLwotCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwX3R4LT5pb19iYXNlLCBTUENSMiwKLQkJCWlycXN0X3NwY3IyICYgfihYU1lOQ19FUlIpKTsKKwkJTUNCU1BfV1JJVEUobWNic3BfdHgsIFNQQ1IyLAorCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3BfdHgsIFNQQ1IyKSAmIH4oWFNZTkNfRVJSKSk7CiAJfSBlbHNlIHsKIAkJY29tcGxldGUoJm1jYnNwX3R4LT50eF9pcnFfY29tcGxldGlvbik7CiAJfQpAQCAtMTE0LDE1ICsxNDcsMTUgQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3BfcnggPSBkZXZfaWQ7CiAJdTE2IGlycXN0X3NwY3IxOwogCi0JaXJxc3Rfc3BjcjEgPSBPTUFQX01DQlNQX1JFQUQobWNic3BfcngtPmlvX2Jhc2UsIFNQQ1IxKTsKKwlpcnFzdF9zcGNyMSA9IE1DQlNQX1JFQUQobWNic3BfcngsIFNQQ1IxKTsKIAlkZXZfZGJnKG1jYnNwX3J4LT5kZXYsICJSWCBJUlEgY2FsbGJhY2sgOiAweCV4XG4iLCBpcnFzdF9zcGNyMSk7CiAKIAlpZiAoaXJxc3Rfc3BjcjEgJiBSU1lOQ19FUlIpIHsKIAkJZGV2X2VycihtY2JzcF9yeC0+ZGV2LCAiUlggRnJhbWUgU3luYyBFcnJvciEgOiAweCV4XG4iLAogCQkJaXJxc3Rfc3BjcjEpOwogCQkvKiBXcml0aW5nIHplcm8gdG8gUlNZTkNfRVJSIGNsZWFycyB0aGUgSVJRICovCi0JCU9NQVBfTUNCU1BfV1JJVEUobWNic3BfcngtPmlvX2Jhc2UsIFNQQ1IxLAotCQkJaXJxc3Rfc3BjcjEgJiB+KFJTWU5DX0VSUikpOworCQlNQ0JTUF9XUklURShtY2JzcF9yeCwgU1BDUjEsCisJCQkgICAgTUNCU1BfUkVBRF9DQUNIRShtY2JzcF9yeCwgU1BDUjEpICYgfihSU1lOQ19FUlIpKTsKIAl9IGVsc2UgewogCQljb21wbGV0ZSgmbWNic3BfcngtPnR4X2lycV9jb21wbGV0aW9uKTsKIAl9CkBAIC0xMzUsNyArMTY4LDcgQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3BfZG1hX3R4ID0gZGF0YTsKIAogCWRldl9kYmcobWNic3BfZG1hX3R4LT5kZXYsICJUWCBETUEgY2FsbGJhY2sgOiAweCV4XG4iLAotCQlPTUFQX01DQlNQX1JFQUQobWNic3BfZG1hX3R4LT5pb19iYXNlLCBTUENSMikpOworCQlNQ0JTUF9SRUFEKG1jYnNwX2RtYV90eCwgU1BDUjIpKTsKIAogCS8qIFdlIGNhbiBmcmVlIHRoZSBjaGFubmVscyAqLwogCW9tYXBfZnJlZV9kbWEobWNic3BfZG1hX3R4LT5kbWFfdHhfbGNoKTsKQEAgLTE0OSw3ICsxODIsNyBAQAogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcF9kbWFfcnggPSBkYXRhOwogCiAJZGV2X2RiZyhtY2JzcF9kbWFfcngtPmRldiwgIlJYIERNQSBjYWxsYmFjayA6IDB4JXhcbiIsCi0JCU9NQVBfTUNCU1BfUkVBRChtY2JzcF9kbWFfcngtPmlvX2Jhc2UsIFNQQ1IyKSk7CisJCU1DQlNQX1JFQUQobWNic3BfZG1hX3J4LCBTUENSMikpOwogCiAJLyogV2UgY2FuIGZyZWUgdGhlIGNoYW5uZWxzICovCiAJb21hcF9mcmVlX2RtYShtY2JzcF9kbWFfcngtPmRtYV9yeF9sY2gpOwpAQCAtMTY3LDcgKzIwMCw2IEBACiB2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqY29uZmlnKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CkBAIC0xNzUsMzAgKzIwNywyODAgQEAKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCWRldl9kYmcobWNic3AtPmRldiwgIkNvbmZpZ3VyaW5nIE1jQlNQJWQgIHBoeXNfYmFzZTogMHglMDhseFxuIiwKIAkJCW1jYnNwLT5pZCwgbWNic3AtPnBoeXNfYmFzZSk7CiAKIAkvKiBXZSB3cml0ZSB0aGUgZ2l2ZW4gY29uZmlnICovCi0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgY29uZmlnLT5zcGNyMik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgY29uZmlnLT5zcGNyMSk7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ1IyLCBjb25maWctPnJjcjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNSMSwgY29uZmlnLT5yY3IxKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDUjIsIGNvbmZpZy0+eGNyMik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBYQ1IxLCBjb25maWctPnhjcjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1JHUjIsIGNvbmZpZy0+c3JncjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1JHUjEsIGNvbmZpZy0+c3JncjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgTUNSMiwgY29uZmlnLT5tY3IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIE1DUjEsIGNvbmZpZy0+bWNyMSk7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBQQ1IwLCBjb25maWctPnBjcjApOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwgY29uZmlnLT5zcGNyMik7CisJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLCBjb25maWctPnNwY3IxKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgUkNSMiwgY29uZmlnLT5yY3IyKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgUkNSMSwgY29uZmlnLT5yY3IxKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgWENSMiwgY29uZmlnLT54Y3IyKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgWENSMSwgY29uZmlnLT54Y3IxKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1JHUjIsIGNvbmZpZy0+c3JncjIpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUkdSMSwgY29uZmlnLT5zcmdyMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIE1DUjIsIGNvbmZpZy0+bWNyMik7CisJTUNCU1BfV1JJVEUobWNic3AsIE1DUjEsIGNvbmZpZy0+bWNyMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIFBDUjAsIGNvbmZpZy0+cGNyMCk7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgWENDUiwgY29uZmlnLT54Y2NyKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ0NSLCBjb25maWctPnJjY3IpOworCQlNQ0JTUF9XUklURShtY2JzcCwgWENDUiwgY29uZmlnLT54Y2NyKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFJDQ1IsIGNvbmZpZy0+cmNjcik7CiAJfQogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2NvbmZpZyk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCitzdGF0aWMgdm9pZCBvbWFwX3N0X29uKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwl1bnNpZ25lZCBpbnQgdzsKKworCS8qCisJICogU2lkZXRvbmUgdXNlcyBNY0JTUCBJQ0xLIC0gd2hpY2ggbXVzdCBub3QgaWRsZSB3aGVuIHNpZGV0b25lcworCSAqIGFyZSBlbmFibGVkIG9yIHNpZGV0b25lcyBzdGFydCBzb3VuZGluZyB1Z2x5LgorCSAqLworCXcgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCXcgJj0gfigxIDw8IChtY2JzcC0+aWQgLSAyKSk7CisJY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7CisKKwkvKiBFbmFibGUgTWNCU1AgU2lkZXRvbmUgKi8KKwl3ID0gTUNCU1BfUkVBRChtY2JzcCwgU1NFTENSKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1NFTENSLCB3IHwgU0lERVRPTkVFTik7CisKKwl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1lTQ09ORklHKTsKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1lTQ09ORklHLCB3ICYgfihTVF9BVVRPSURMRSkpOworCisJLyogRW5hYmxlIFNpZGV0b25lIGZyb20gU2lkZXRvbmUgQ29yZSAqLworCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTU0VMQ1IpOworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgfCBTVF9TSURFVE9ORUVOKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9zdF9vZmYoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCXVuc2lnbmVkIGludCB3OworCisJdyA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNTRUxDUik7CisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNTRUxDUiwgdyAmIH4oU1RfU0lERVRPTkVFTikpOworCisJdyA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNZU0NPTkZJRyk7CisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNZU0NPTkZJRywgdyB8IFNUX0FVVE9JRExFKTsKKworCXcgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTU0VMQ1IpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgJiB+KFNJREVUT05FRU4pKTsKKworCXcgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCXcgfD0gMSA8PCAobWNic3AtPmlkIC0gMik7CisJY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc3RfZmlyX3dyaXRlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgczE2ICpmaXIpCit7CisJdTE2IHZhbCwgaTsKKworCXZhbCA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNZU0NPTkZJRyk7CisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNZU0NPTkZJRywgdmFsICYgfihTVF9BVVRPSURMRSkpOworCisJdmFsID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKKworCWlmICh2YWwgJiBTVF9DT0VGRldSRU4pCisJCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHZhbCAmIH4oU1RfQ09FRkZXUkVOKSk7CisKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1NFTENSLCB2YWwgfCBTVF9DT0VGRldSRU4pOworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQlNQ0JTUF9TVF9XUklURShtY2JzcCwgU0ZJUkNSLCBmaXJbaV0pOworCisJaSA9IDA7CisKKwl2YWwgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTU0VMQ1IpOworCXdoaWxlICghKHZhbCAmIFNUX0NPRUZGV1JET05FKSAmJiAoKytpIDwgMTAwMCkpCisJCXZhbCA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNTRUxDUik7CisKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1NFTENSLCB2YWwgJiB+KFNUX0NPRUZGV1JFTikpOworCisJaWYgKGkgPT0gMTAwMCkKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AgRklSIGxvYWQgZXJyb3IhXG4iKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9zdF9jaGdhaW4oc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCXUxNiB3OworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHcgJiB+KFNUX0FVVE9JRExFKSk7CisKKwl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKKworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTR0FJTkNSLCBTVF9DSDBHQUlOKHN0X2RhdGEtPmNoMGdhaW4pIHwgXAorCQkgICAgICBTVF9DSDFHQUlOKHN0X2RhdGEtPmNoMWdhaW4pKTsKK30KKworaW50IG9tYXBfc3Rfc2V0X2NoZ2Fpbih1bnNpZ25lZCBpbnQgaWQsIGludCBjaGFubmVsLCBzMTYgY2hnYWluKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCisJaWYgKCFzdF9kYXRhKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNwaW5fbG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKwlpZiAoY2hhbm5lbCA9PSAwKQorCQlzdF9kYXRhLT5jaDBnYWluID0gY2hnYWluOworCWVsc2UgaWYgKGNoYW5uZWwgPT0gMSkKKwkJc3RfZGF0YS0+Y2gxZ2FpbiA9IGNoZ2FpbjsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAoc3RfZGF0YS0+ZW5hYmxlZCkKKwkJb21hcF9zdF9jaGdhaW4obWNic3ApOworCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zdF9zZXRfY2hnYWluKTsKKworaW50IG9tYXBfc3RfZ2V0X2NoZ2Fpbih1bnNpZ25lZCBpbnQgaWQsIGludCBjaGFubmVsLCBzMTYgKmNoZ2FpbikKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCXN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmICghc3RfZGF0YSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJaWYgKGNoYW5uZWwgPT0gMCkKKwkJKmNoZ2FpbiA9IHN0X2RhdGEtPmNoMGdhaW47CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxKQorCQkqY2hnYWluID0gc3RfZGF0YS0+Y2gxZ2FpbjsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvbWFwX3N0X2dldF9jaGdhaW4pOworCitzdGF0aWMgaW50IG9tYXBfc3Rfc3RhcnQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmIChzdF9kYXRhICYmIHN0X2RhdGEtPmVuYWJsZWQgJiYgIXN0X2RhdGEtPnJ1bm5pbmcpIHsKKwkJb21hcF9zdF9maXJfd3JpdGUobWNic3AsIHN0X2RhdGEtPnRhcHMpOworCQlvbWFwX3N0X2NoZ2FpbihtY2JzcCk7CisKKwkJaWYgKCFtY2JzcC0+ZnJlZSkgeworCQkJb21hcF9zdF9vbihtY2JzcCk7CisJCQlzdF9kYXRhLT5ydW5uaW5nID0gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgb21hcF9zdF9lbmFibGUodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCisJaWYgKCFzdF9kYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKwlzdF9kYXRhLT5lbmFibGVkID0gMTsKKwlvbWFwX3N0X3N0YXJ0KG1jYnNwKTsKKwlzcGluX3VubG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3N0X2VuYWJsZSk7CisKK3N0YXRpYyBpbnQgb21hcF9zdF9zdG9wKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwlpZiAoc3RfZGF0YSAmJiBzdF9kYXRhLT5ydW5uaW5nKSB7CisJCWlmICghbWNic3AtPmZyZWUpIHsKKwkJCW9tYXBfc3Rfb2ZmKG1jYnNwKTsKKwkJCXN0X2RhdGEtPnJ1bm5pbmcgPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwX3N0X2Rpc2FibGUodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCisJaWYgKCFzdF9kYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKwlvbWFwX3N0X3N0b3AobWNic3ApOworCXN0X2RhdGEtPmVuYWJsZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zdF9kaXNhYmxlKTsKKworaW50IG9tYXBfc3RfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGE7CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwlzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwlpZiAoIXN0X2RhdGEpCisJCXJldHVybiAtRU5PREVWOworCisKKwlyZXR1cm4gc3RfZGF0YS0+ZW5hYmxlZDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zdF9pc19lbmFibGVkKTsKKwogLyoKICAqIG9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZCBjb25maWd1cmVzIGhvdyB0byBkZWFsCiAgKiB3aXRoIHRyYW5zbWl0IHRocmVzaG9sZC4gdGhlIHRocmVzaG9sZCB2YWx1ZSBhbmQgaGFuZGxlciBjYW4gYmUKQEAgLTIwNyw3ICs0ODksNiBAQAogdm9pZCBvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAKIAlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm47CkBAIC0yMTcsOSArNDk4LDggQEAKIAkJcmV0dXJuOwogCX0KIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCi0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBUSFJTSDIsIHRocmVzaG9sZCk7CisJTUNCU1BfV1JJVEUobWNic3AsIFRIUlNIMiwgdGhyZXNob2xkKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKTsKIApAQCAtMjMxLDcgKzUxMSw2IEBACiB2b2lkIG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAogCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCiAJCXJldHVybjsKQEAgLTI0MSw5ICs1MjAsOCBAQAogCQlyZXR1cm47CiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFRIUlNIMSwgdGhyZXNob2xkKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgVEhSU0gxLCB0aHJlc2hvbGQpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQpOwogCkBAIC0zMTMsMTkgKzU5MSwxOCBAQAogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQl1MTYgc3lzY29uOwogCi0JCXN5c2NvbiA9IE9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1lTQ09OKTsKKwkJc3lzY29uID0gTUNCU1BfUkVBRChtY2JzcCwgU1lTQ09OKTsKIAkJc3lzY29uICY9IH4oRU5BV0FLRVVQIHwgU0lETEVNT0RFKDB4MDMpIHwgQ0xPQ0tBQ1RJVklUWSgweDAzKSk7CiAKIAkJaWYgKG1jYnNwLT5kbWFfb3BfbW9kZSA9PSBNQ0JTUF9ETUFfTU9ERV9USFJFU0hPTEQpIHsKIAkJCXN5c2NvbiB8PSAoRU5BV0FLRVVQIHwgU0lETEVNT0RFKDB4MDIpIHwKIAkJCQkJQ0xPQ0tBQ1RJVklUWSgweDAyKSk7Ci0JCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBXQUtFVVBFTiwKLQkJCQkJWFJEWUVOIHwgUlJEWUVOKTsKKwkJCU1DQlNQX1dSSVRFKG1jYnNwLCBXQUtFVVBFTiwgWFJEWUVOIHwgUlJEWUVOKTsKIAkJfSBlbHNlIHsKIAkJCXN5c2NvbiB8PSBTSURMRU1PREUoMHgwMSk7CiAJCX0KIAotCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTWVNDT04sIHN5c2Nvbik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTWVNDT04sIHN5c2Nvbik7CiAJfQogfQogCkBAIC0zMzcsNyArNjE0LDcgQEAKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdTE2IHN5c2NvbjsKIAotCQlzeXNjb24gPSBPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNZU0NPTik7CisJCXN5c2NvbiA9IE1DQlNQX1JFQUQobWNic3AsIFNZU0NPTik7CiAJCXN5c2NvbiAmPSB+KEVOQVdBS0VVUCB8IFNJRExFTU9ERSgweDAzKSB8IENMT0NLQUNUSVZJVFkoMHgwMykpOwogCQkvKgogCQkgKiBIVyBidWcgd29ya2Fyb3VuZCAtIElmIG5vX2lkbGUgbW9kZSBpcyB0YWtlbiwgd2UgbmVlZCB0bwpAQCAtMzQ1LDE3ICs2MjIsMTkgQEAKIAkJICogZGV2aWNlIHdpbGwgbm90IGhpdCByZXRlbnRpb24gYW55bW9yZS4KIAkJICovCiAJCXN5c2NvbiB8PSBTSURMRU1PREUoMHgwMik7Ci0JCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNZU0NPTiwgc3lzY29uKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFNZU0NPTiwgc3lzY29uKTsKIAogCQlzeXNjb24gJj0gfihTSURMRU1PREUoMHgwMykpOwotCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTWVNDT04sIHN5c2Nvbik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTWVNDT04sIHN5c2Nvbik7CiAKLQkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgV0FLRVVQRU4sIDApOworCQlNQ0JTUF9XUklURShtY2JzcCwgV0FLRVVQRU4sIDApOwogCX0KIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcDM0eHhfbWNic3BfcmVxdWVzdChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcDM0eHhfbWNic3BfZnJlZShzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zdF9zdGFydChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zdF9zdG9wKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KICNlbmRpZgogCiAvKgpAQCAtMzkyLDYgKzY3MSw3IEBACiBpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCAqcmVnX2NhY2hlOwogCWludCBlcnI7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CkBAIC00MDAsMTUgKzY4MCwyMSBAQAogCX0KIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKKwlyZWdfY2FjaGUgPSBremFsbG9jKG9tYXBfbWNic3BfY2FjaGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWdfY2FjaGUpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJc3Bpbl9sb2NrKCZtY2JzcC0+bG9jayk7CiAJaWYgKCFtY2JzcC0+ZnJlZSkgewogCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIGlzIGN1cnJlbnRseSBpbiB1c2VcbiIsCiAJCQltY2JzcC0+aWQpOwotCQlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwotCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAogCW1jYnNwLT5mcmVlID0gMDsKKwltY2JzcC0+cmVnX2NhY2hlID0gcmVnX2NhY2hlOwogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKIAlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KQpAQCAtNDI0LDggKzcxMCw4IEBACiAJICogTWFrZSBzdXJlIHRoYXQgdHJhbnNtaXR0ZXIsIHJlY2VpdmVyIGFuZCBzYW1wbGUtcmF0ZSBnZW5lcmF0b3IgYXJlCiAJICogbm90IHJ1bm5pbmcgYmVmb3JlIGFjdGl2YXRpbmcgSVJRcy4KIAkgKi8KLQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTUENSMSwgMCk7Ci0JT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1BDUjIsIDApOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwgMCk7CisJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCAwKTsKIAogCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgewogCQkvKiBXZSBuZWVkIHRvIGdldCBJUlFzIGhlcmUgKi8KQEAgLTQzNiw3ICs3MjIsNyBAQAogCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkICIKIAkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcC0+dHhfaXJxLAogCQkJCQltY2JzcC0+aWQpOwotCQkJZ290byBlcnJvcjsKKwkJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOwogCQl9CiAKIAkJaW5pdF9jb21wbGV0aW9uKCZtY2JzcC0+cnhfaXJxX2NvbXBsZXRpb24pOwpAQCAtNDQ2LDE2ICs3MzIsMTYgQEAKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFJYIElSUSAlZCAiCiAJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnJ4X2lycSwKIAkJCQkJbWNic3AtPmlkKTsKLQkJCWdvdG8gdHhfaXJxOworCQkJZ290byBlcnJfZnJlZV9pcnE7CiAJCX0KIAl9CiAKIAlyZXR1cm4gMDsKLXR4X2lycToKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKLWVycm9yOgorZXJyX2Nsa19kaXNhYmxlOgogCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUpCi0JCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShpZCk7CisJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKIAogCS8qIERvIHByb2NlZHVyZSBzcGVjaWZpYyB0byBvbWFwMzR4eCBhcmNoLCBpZiBhcHBsaWNhYmxlICovCiAJb21hcDM0eHhfbWNic3BfZnJlZShtY2JzcCk7CkBAIC00NjMsNyArNzQ5LDEyIEBACiAJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOwogCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKIAorCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCW1jYnNwLT5mcmVlID0gMTsKKwltY2JzcC0+cmVnX2NhY2hlID0gTlVMTDsKK2Vycl9rZnJlZToKKwlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOworCWtmcmVlKHJlZ19jYWNoZSk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDcyLDYgKzc2Myw3IEBACiB2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgKnJlZ19jYWNoZTsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKQEAgLTQ5NCwxNiArNzg2LDE4IEBACiAJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwogCX0KIAotCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwotCWlmIChtY2JzcC0+ZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsCi0JCQltY2JzcC0+aWQpOwotCQlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwotCQlyZXR1cm47Ci0JfQorCXJlZ19jYWNoZSA9IG1jYnNwLT5yZWdfY2FjaGU7CiAKLQltY2JzcC0+ZnJlZSA9IDE7CisJc3Bpbl9sb2NrKCZtY2JzcC0+bG9jayk7CisJaWYgKG1jYnNwLT5mcmVlKQorCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsIG1jYnNwLT5pZCk7CisJZWxzZQorCQltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPnJlZ19jYWNoZSA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKKworCWlmIChyZWdfY2FjaGUpCisJCWtmcmVlKHJlZ19jYWNoZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CiAKQEAgLTUxNSw3ICs4MDksNiBAQAogdm9pZCBvbWFwX21jYnNwX3N0YXJ0KHVuc2lnbmVkIGludCBpZCwgaW50IHR4LCBpbnQgcngpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlpbnQgaWRsZTsKIAl1MTYgdzsKIApAQCAtNTI0LDI4ICs4MTcsMzAgQEAKIAkJcmV0dXJuOwogCX0KIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCi0JbWNic3AtPnJ4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ1IxKSA+PiA1KSAmIDB4NzsKLQltY2JzcC0+dHhfd29yZF9sZW5ndGggPSAoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFhDUjEpID4+IDUpICYgMHg3OworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcF9zdF9zdGFydChtY2JzcCk7CiAKLQlpZGxlID0gISgoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKSB8Ci0JCSAgT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKSkgJiAxKTsKKwltY2JzcC0+cnhfd29yZF9sZW5ndGggPSAoTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgUkNSMSkgPj4gNSkgJiAweDc7CisJbWNic3AtPnR4X3dvcmRfbGVuZ3RoID0gKE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFhDUjEpID4+IDUpICYgMHg3OworCisJaWRsZSA9ICEoKE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSB8CisJCQlNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkpICYgMSk7CiAKIAlpZiAoaWRsZSkgewogCQkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLwotCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyB8ICgxIDw8IDYpKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCB3IHwgKDEgPDwgNikpOwogCX0KIAogCS8qIEVuYWJsZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgKi8KIAl0eCAmPSAxOwotCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCB0eCk7CisJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsIHcgfCB0eCk7CiAKIAlyeCAmPSAxOwotCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHcgfCByeCk7CisJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsIHcgfCByeCk7CiAKIAkvKgogCSAqIFdvcnN0IGNhc2U6IENMS1NSRyoyID0gODAwMGtoejogKDEvODAwMCkgKiAyICogMiB1c2VjCkBAIC01NTcsMTggKzg1MiwxOCBAQAogCiAJaWYgKGlkbGUpIHsKIAkJLyogU3RhcnQgZnJhbWUgc3luYyAqLwotCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyB8ICgxIDw8IDcpKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCB3IHwgKDEgPDwgNykpOwogCX0KIAogCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewogCQkvKiBSZWxlYXNlIHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgKi8KLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ0NSKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFhDQ1IpOwogCQl3ICY9IH4odHggPyBYRElTQUJMRSA6IDApOwotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDQ1IsIHcpOwotCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDQ1IpOworCQlNQ0JTUF9XUklURShtY2JzcCwgWENDUiwgdyk7CisJCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBSQ0NSKTsKIAkJdyAmPSB+KHJ4ID8gUkRJU0FCTEUgOiAwKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ0NSLCB3KTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFJDQ1IsIHcpOwogCX0KIAogCS8qIER1bXAgTWNCU1AgUmVncyAqLwpAQCAtNTc5LDcgKzg3NCw2IEBACiB2b2lkIG9tYXBfbWNic3Bfc3RvcCh1bnNpZ25lZCBpbnQgaWQsIGludCB0eCwgaW50IHJ4KQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJaW50IGlkbGU7CiAJdTE2IHc7CiAKQEAgLTU4OSwzNiArODgzLDM4IEBACiAJfQogCiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAogCS8qIFJlc2V0IHRyYW5zbWl0dGVyICovCiAJdHggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ0NSKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFhDQ1IpOwogCQl3IHw9ICh0eCA/IFhESVNBQkxFIDogMCk7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgWENDUiwgdyk7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBYQ0NSLCB3KTsKIAl9Ci0JdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyAmIH50eCk7CisJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsIHcgJiB+dHgpOwogCiAJLyogUmVzZXQgcmVjZWl2ZXIgKi8KIAlyeCAmPSAxOwogCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDQ1IpOworCQl3ID0gTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgUkNDUik7CiAJCXcgfD0gKHJ4ID8gUkRJU0FCTEUgOiAwKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ0NSLCB3KTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFJDQ1IsIHcpOwogCX0KLQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCB3ICYgfnJ4KTsKKwl3ID0gTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwgdyAmIH5yeCk7CiAKLQlpZGxlID0gISgoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKSB8Ci0JCSAgT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKSkgJiAxKTsKKwlpZGxlID0gISgoTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpIHwKKwkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSkgJiAxKTsKIAogCWlmIChpZGxlKSB7CiAJCS8qIFJlc2V0IHRoZSBzYW1wbGUgcmF0ZSBnZW5lcmF0b3IgKi8KLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgJiB+KDEgPDwgNikpOworCQl3ID0gTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpOworCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsIHcgJiB+KDEgPDwgNikpOwogCX0KKworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcF9zdF9zdG9wKG1jYnNwKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zdG9wKTsKIApAQCAtNjI2LDcgKzkyMiw2IEBACiBpbnQgb21hcF9tY2JzcF9wb2xsd3JpdGUodW5zaWduZWQgaW50IGlkLCB1MTYgYnVmKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CkBAIC02MzQsMjggKzkyOSwyNyBAQAogCX0KIAogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQliYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKLQl3cml0ZXcoYnVmLCBiYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIERYUjEsIGJ1Zik7CiAJLyogaWYgZnJhbWUgc3luYyBlcnJvciAtIGNsZWFyIHRoZSBlcnJvciAqLwotCWlmIChyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgWFNZTkNfRVJSKSB7CisJaWYgKE1DQlNQX1JFQUQobWNic3AsIFNQQ1IyKSAmIFhTWU5DX0VSUikgewogCQkvKiBjbGVhciBlcnJvciAqLwotCQl3cml0ZXcocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKSAmICh+WFNZTkNfRVJSKSwKLQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwKKwkJCQlNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMikgJiAoflhTWU5DX0VSUikpOwogCQkvKiByZXNlbmQgKi8KIAkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CiAJCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGNvbmZpcm1hdGlvbiAqLwogCQlpbnQgYXR0ZW1wcyA9IDA7Ci0JCXdoaWxlICghKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgJiBYUkRZKSkgeworCQl3aGlsZSAoIShNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMikgJiBYUkRZKSkgewogCQkJaWYgKGF0dGVtcHMrKyA+IDEwMDApIHsKLQkJCQl3cml0ZXcocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKSAmCi0JCQkJICAgICAgICh+WFJTVCksCi0JCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMik7CisJCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLAorCQkJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpICYKKwkJCQkJCSh+WFJTVCkpOwogCQkJCXVkZWxheSgxMCk7Ci0JCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgfAotCQkJCSAgICAgICAoWFJTVCksCi0JCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMik7CisJCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLAorCQkJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpIHwKKwkJCQkJCShYUlNUKSk7CiAJCQkJdWRlbGF5KDEwKTsKIAkJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJDb3VsZCBub3Qgd3JpdGUgdG8iCiAJCQkJCSIgTWNCU1AlZCBSZWdpc3RlclxuIiwgbWNic3AtPmlkKTsKQEAgLTY3MSw3ICs5NjUsNiBAQAogaW50IG9tYXBfbWNic3BfcG9sbHJlYWQodW5zaWduZWQgaW50IGlkLCB1MTYgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwpAQCAtNjc5LDI2ICs5NzIsMjUgQEAKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCS8qIGlmIGZyYW1lIHN5bmMgZXJyb3IgLSBjbGVhciB0aGUgZXJyb3IgKi8KLQlpZiAocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKSAmIFJTWU5DX0VSUikgeworCWlmIChNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSkgJiBSU1lOQ19FUlIpIHsKIAkJLyogY2xlYXIgZXJyb3IgKi8KLQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiAoflJTWU5DX0VSUiksCi0JCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpOworCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsCisJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpICYgKH5SU1lOQ19FUlIpKTsKIAkJLyogcmVzZW5kICovCiAJCXJldHVybiAtMTsKIAl9IGVsc2UgewogCQkvKiB3YWl0IGZvciByZWNpZXZlIGNvbmZpcm1hdGlvbiAqLwogCQlpbnQgYXR0ZW1wcyA9IDA7Ci0JCXdoaWxlICghKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiBSUkRZKSkgeworCQl3aGlsZSAoIShNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSkgJiBSUkRZKSkgewogCQkJaWYgKGF0dGVtcHMrKyA+IDEwMDApIHsKLQkJCQl3cml0ZXcocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKSAmCi0JCQkJICAgICAgICh+UlJTVCksCi0JCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSk7CisJCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpICYKKwkJCQkJCSh+UlJTVCkpOwogCQkJCXVkZWxheSgxMCk7Ci0JCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgfAotCQkJCSAgICAgICAoUlJTVCksCi0JCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSk7CisJCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpIHwKKwkJCQkJCShSUlNUKSk7CiAJCQkJdWRlbGF5KDEwKTsKIAkJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJDb3VsZCBub3QgcmVhZCBmcm9tIgogCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwLT5pZCk7CkBAIC03MDYsNyArOTk4LDcgQEAKIAkJCX0KIAkJfQogCX0KLQkqYnVmID0gcmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RSUjEpOworCSpidWYgPSBNQ0JTUF9SRUFEKG1jYnNwLCBEUlIxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE4LDcgKzEwMTAsNiBAQAogdm9pZCBvbWFwX21jYnNwX3htaXRfd29yZCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKQEAgLTcyNywyMSArMTAxOCwxOSBAQAogCX0KIAogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAJd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+dHhfaXJxX2NvbXBsZXRpb24pOwogCiAJaWYgKHdvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIHdvcmQgPj4gMTYpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMSwgd29yZCAmIDB4ZmZmZik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBEWFIyLCB3b3JkID4+IDE2KTsKKwlNQ0JTUF9XUklURShtY2JzcCwgRFhSMSwgd29yZCAmIDB4ZmZmZik7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfeG1pdF93b3JkKTsKIAogdTMyIG9tYXBfbWNic3BfcmVjdl93b3JkKHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlOwogCXUxNiB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggd29yZF9sZW5ndGg7CiAKQEAgLTc1MiwxMyArMTA0MSwxMiBAQAogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAogCXdvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOwotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYnNwLT5yeF9pcnFfY29tcGxldGlvbik7CiAKIAlpZiAod29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCi0JCXdvcmRfbXNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjIpOwotCXdvcmRfbHNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjEpOworCQl3b3JkX21zYiA9IE1DQlNQX1JFQUQobWNic3AsIERSUjIpOworCXdvcmRfbHNiID0gTUNCU1BfUkVBRChtY2JzcCwgRFJSMSk7CiAKIAlyZXR1cm4gKHdvcmRfbHNiIHwgKHdvcmRfbXNiIDw8IDE2KSk7CiB9CkBAIC03NjcsNyArMTA1NSw2IEBACiBpbnQgb21hcF9tY2JzcF9zcGlfbWFzdGVyX3htaXRfd29yZF9wb2xsKHVuc2lnbmVkIGludCBpZCwgdTMyIHdvcmQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHR4X3dvcmRfbGVuZ3RoOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CiAJdTE2IHNwY3IyLCBzcGNyMSwgYXR0ZW1wdHMgPSAwLCB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwpAQCAtNzc3LDcgKzEwNjQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAl0eF93b3JkX2xlbmd0aCA9IG1jYnNwLT50eF93b3JkX2xlbmd0aDsKIAlyeF93b3JkX2xlbmd0aCA9IG1jYnNwLT5yeF93b3JkX2xlbmd0aDsKIApAQCAtNzg1LDE0ICsxMDcxLDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRmlyc3Qgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIHJlYWR5ICovCi0Jc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCXNwY3IyID0gTUNCU1BfUkVBRChtY2JzcCwgU1BDUjIpOwogCXdoaWxlICghKHNwY3IyICYgWFJEWSkpIHsKLQkJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCQlzcGNyMiA9IE1DQlNQX1JFQUQobWNic3AsIFNQQ1IyKTsKIAkJaWYgKGF0dGVtcHRzKysgPiAxMDAwKSB7CiAJCQkvKiBXZSBtdXN0IHJlc2V0IHRoZSB0cmFuc21pdHRlciAqLwotCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgc3BjcjIgJiAoflhSU1QpKTsKKwkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwKKwkJCQkgICAgTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpICYgKH5YUlNUKSk7CiAJCQl1ZGVsYXkoMTApOwotCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgc3BjcjIgfCBYUlNUKTsKKwkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwKKwkJCQkgICAgTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpIHwgWFJTVCk7CiAJCQl1ZGVsYXkoMTApOwogCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgogCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKQEAgLTgwMiwxOCArMTA5MCwyMCBAQAogCiAJLyogTm93IHdlIGNhbiBwdXNoIHRoZSBkYXRhICovCiAJaWYgKHR4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIHdvcmQgPj4gMTYpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMSwgd29yZCAmIDB4ZmZmZik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBEWFIyLCB3b3JkID4+IDE2KTsKKwlNQ0JTUF9XUklURShtY2JzcCwgRFhSMSwgd29yZCAmIDB4ZmZmZik7CiAKIAkvKiBXZSB3YWl0IGZvciB0aGUgcmVjZWl2ZXIgdG8gYmUgcmVhZHkgKi8KLQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJc3BjcjEgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSk7CiAJd2hpbGUgKCEoc3BjcjEgJiBSUkRZKSkgewotCQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJCXNwY3IxID0gTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpOwogCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKIAkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHJlY2VpdmVyICovCi0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSAmICh+UlJTVCkpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkgJiAoflJSU1QpKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSB8IFJSU1QpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkgfCBSUlNUKTsKIAkJCXVkZWxheSgxMCk7CiAJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHJlY2VpdmVyIG5vdCAiCiAJCQkJInJlYWR5XG4iLCBtY2JzcC0+aWQpOwpAQCAtODIzLDggKzExMTMsOCBAQAogCiAJLyogUmVjZWl2ZXIgaXMgcmVhZHksIGxldCdzIHJlYWQgdGhlIGR1bW15IGRhdGEgKi8KIAlpZiAocnhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCi0JCXdvcmRfbXNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjIpOwotCXdvcmRfbHNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjEpOworCQl3b3JkX21zYiA9IE1DQlNQX1JFQUQobWNic3AsIERSUjIpOworCXdvcmRfbHNiID0gTUNCU1BfUkVBRChtY2JzcCwgRFJSMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgzNCw3ICsxMTI0LDYgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJdTMyIGNsb2NrX3dvcmQgPSAwOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHR4X3dvcmRfbGVuZ3RoOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CiAJdTE2IHNwY3IyLCBzcGNyMSwgYXR0ZW1wdHMgPSAwLCB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwpAQCAtODQ1LDcgKzExMzQsNiBAQAogCX0KIAogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKIAl0eF93b3JkX2xlbmd0aCA9IG1jYnNwLT50eF93b3JkX2xlbmd0aDsKIAlyeF93b3JkX2xlbmd0aCA9IG1jYnNwLT5yeF93b3JkX2xlbmd0aDsKQEAgLTg1NCwxNCArMTE0MiwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEZpcnN0IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdHRlciB0byBiZSByZWFkeSAqLwotCXNwY3IyID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwlzcGNyMiA9IE1DQlNQX1JFQUQobWNic3AsIFNQQ1IyKTsKIAl3aGlsZSAoIShzcGNyMiAmIFhSRFkpKSB7Ci0JCXNwY3IyID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwkJc3BjcjIgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMik7CiAJCWlmIChhdHRlbXB0cysrID4gMTAwMCkgewogCQkJLyogV2UgbXVzdCByZXNldCB0aGUgdHJhbnNtaXR0ZXIgKi8KLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyICYgKH5YUlNUKSk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSAmICh+WFJTVCkpOwogCQkJdWRlbGF5KDEwKTsKLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSB8IFhSU1QpOwogCQkJdWRlbGF5KDEwKTsKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKIAkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CkBAIC04NzEsMTggKzExNjEsMjAgQEAKIAogCS8qIFdlIGZpcnN0IG5lZWQgdG8gZW5hYmxlIHRoZSBidXMgY2xvY2sgKi8KIAlpZiAodHhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCi0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMiwgY2xvY2tfd29yZCA+PiAxNik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIxLCBjbG9ja193b3JkICYgMHhmZmZmKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIERYUjIsIGNsb2NrX3dvcmQgPj4gMTYpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBEWFIxLCBjbG9ja193b3JkICYgMHhmZmZmKTsKIAogCS8qIFdlIHdhaXQgZm9yIHRoZSByZWNlaXZlciB0byBiZSByZWFkeSAqLwotCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwlzcGNyMSA9IE1DQlNQX1JFQUQobWNic3AsIFNQQ1IxKTsKIAl3aGlsZSAoIShzcGNyMSAmIFJSRFkpKSB7Ci0JCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwkJc3BjcjEgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSk7CiAJCWlmIChhdHRlbXB0cysrID4gMTAwMCkgewogCQkJLyogV2UgbXVzdCByZXNldCB0aGUgcmVjZWl2ZXIgKi8KLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxICYgKH5SUlNUKSk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSAmICh+UlJTVCkpOwogCQkJdWRlbGF5KDEwKTsKLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxIHwgUlJTVCk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSB8IFJSU1QpOwogCQkJdWRlbGF5KDEwKTsKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgcmVjZWl2ZXIgbm90ICIKIAkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CkBAIC04OTIsOCArMTE4NCw4IEBACiAKIAkvKiBSZWNlaXZlciBpcyByZWFkeSwgdGhlcmUgaXMgc29tZXRoaW5nIGZvciB1cyAqLwogCWlmIChyeF93b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKLQkJd29yZF9tc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMik7Ci0Jd29yZF9sc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMSk7CisJCXdvcmRfbXNiID0gTUNCU1BfUkVBRChtY2JzcCwgRFJSMik7CisJd29yZF9sc2IgPSBNQ0JTUF9SRUFEKG1jYnNwLCBEUlIxKTsKIAogCXdvcmRbMF0gPSAod29yZF9sc2IgfCAod29yZF9tc2IgPDwgMTYpKTsKIApAQCAtMTEwNyw3ICsxMzk5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfc3BpX21vZGUpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogI2RlZmluZSBtYXhfdGhyZXMobSkJCQkobWNic3AtPnBkYXRhLT5idWZmZXJfc2l6ZSkKICNkZWZpbmUgdmFsaWRfdGhyZXNob2xkKG0sIHZhbCkJCSgodmFsKSA8PSBtYXhfdGhyZXMobSkpCiAjZGVmaW5lIFRIUkVTSE9MRF9QUk9QX0JVSUxERVIocHJvcCkJCQkJCVwKQEAgLTExOTgsNiArMTQ5MCw2NCBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoZG1hX29wX21vZGUsIDA2NDQsIGRtYV9vcF9tb2RlX3Nob3csIGRtYV9vcF9tb2RlX3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3Qgc3RfdGFwc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKwlzc2l6ZV90IHN0YXR1cyA9IDA7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IHN0X2RhdGEtPm5yX3RhcHM7IGkrKykKKwkJc3RhdHVzICs9IHNwcmludGYoJmJ1ZltzdGF0dXNdLCAoaSA/ICIsICVkIiA6ICIlZCIpLAorCQkJCSAgc3RfZGF0YS0+dGFwc1tpXSk7CisJaWYgKGkpCisJCXN0YXR1cyArPSBzcHJpbnRmKCZidWZbc3RhdHVzXSwgIlxuIik7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCBzdF90YXBzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCWludCB2YWwsIHRtcCwgc3RhdHVzLCBpID0gMDsKKworCXNwaW5fbG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKwltZW1zZXQoc3RfZGF0YS0+dGFwcywgMCwgc2l6ZW9mKHN0X2RhdGEtPnRhcHMpKTsKKwlzdF9kYXRhLT5ucl90YXBzID0gMDsKKworCWRvIHsKKwkJc3RhdHVzID0gc3NjYW5mKGJ1ZiwgIiVkJW4iLCAmdmFsLCAmdG1wKTsKKwkJaWYgKHN0YXR1cyA8IDAgfHwgc3RhdHVzID09IDApIHsKKwkJCXNpemUgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHZhbCA8IC0zMjc2OCB8fCB2YWwgPiAzMjc2NykgeworCQkJc2l6ZSA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdF9kYXRhLT50YXBzW2krK10gPSB2YWw7CisJCWJ1ZiArPSB0bXA7CisJCWlmICgqYnVmICE9ICcsJykKKwkJCWJyZWFrOworCQlidWYrKzsKKwl9IHdoaWxlICgxKTsKKworCXN0X2RhdGEtPm5yX3RhcHMgPSBpOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHN0X3RhcHMsIDA2NDQsIHN0X3RhcHNfc2hvdywgc3RfdGFwc19zdG9yZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphZGRpdGlvbmFsX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX21heF90eF90aHJlcy5hdHRyLAogCSZkZXZfYXR0cl9tYXhfcnhfdGhyZXMuYXR0ciwKQEAgLTEyMTksNiArMTU2OSw2MCBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWRkaXRpb25hbF9hdHRyX2dyb3VwKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKnNpZGV0b25lX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3N0X3RhcHMuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc2lkZXRvbmVfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKilzaWRldG9uZV9hdHRycywKK307CisKK2ludCBfX2RldmluaXQgb21hcF9zdF9hZGQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbWNic3AtPnBkYXRhOworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGE7CisJaW50IGVycjsKKworCXN0X2RhdGEgPSBremFsbG9jKHNpemVvZigqbWNic3AtPnN0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0X2RhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCXN0X2RhdGEtPmlvX2Jhc2Vfc3QgPSBpb3JlbWFwKHBkYXRhLT5waHlzX2Jhc2Vfc3QsIFNaXzRLKTsKKwlpZiAoIXN0X2RhdGEtPmlvX2Jhc2Vfc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbWNic3AtPmRldi0+a29iaiwgJnNpZGV0b25lX2F0dHJfZ3JvdXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyMzsKKworCW1jYnNwLT5zdF9kYXRhID0gc3RfZGF0YTsKKwlyZXR1cm4gMDsKKworZXJyMzoKKwlpb3VubWFwKHN0X2RhdGEtPmlvX2Jhc2Vfc3QpOworZXJyMjoKKwlrZnJlZShzdF9kYXRhKTsKK2VycjE6CisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgb21hcF9zdF9yZW1vdmUoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmIChzdF9kYXRhKSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWNic3AtPmRldi0+a29iaiwgJnNpZGV0b25lX2F0dHJfZ3JvdXApOworCQlpb3VubWFwKHN0X2RhdGEtPmlvX2Jhc2Vfc3QpOworCQlrZnJlZShzdF9kYXRhKTsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmluaXQgb21hcDM0eHhfZGV2aWNlX2luaXQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQogewogCW1jYnNwLT5kbWFfb3BfbW9kZSA9IE1DQlNQX0RNQV9NT0RFX0VMRU1FTlQ7CkBAIC0xMjMyLDYgKzE2MzYsMTIgQEAKIAkJaWYgKG9tYXBfYWRkaXRpb25hbF9hZGQobWNic3AtPmRldikpCiAJCQlkZXZfd2FybihtY2JzcC0+ZGV2LAogCQkJCSJVbmFibGUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgY29udHJvbHNcbiIpOworCisJCWlmIChtY2JzcC0+aWQgPT0gMiB8fCBtY2JzcC0+aWQgPT0gMykKKwkJCWlmIChvbWFwX3N0X2FkZChtY2JzcCkpCisJCQkJZGV2X3dhcm4obWNic3AtPmRldiwKKwkJCQkgIlVuYWJsZSB0byBjcmVhdGUgc2lkZXRvbmUgY29udHJvbHNcbiIpOworCiAJfSBlbHNlIHsKIAkJbWNic3AtPm1heF90eF90aHJlcyA9IC1FSU5WQUw7CiAJCW1jYnNwLT5tYXhfcnhfdGhyZXMgPSAtRUlOVkFMOwpAQCAtMTI0MCwxMyArMTY1MCwxNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZleGl0IG9tYXAzNHh4X2RldmljZV9leGl0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKIHsKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXBfYWRkaXRpb25hbF9yZW1vdmUobWNic3AtPmRldik7CisKKwkJaWYgKG1jYnNwLT5pZCA9PSAyIHx8IG1jYnNwLT5pZCA9PSAzKQorCQkJb21hcF9zdF9yZW1vdmUobWNic3ApOworCX0KIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZpbml0IG9tYXAzNHh4X2RldmljZV9pbml0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmV4aXQgb21hcDM0eHhfZGV2aWNlX2V4aXQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKSB7fQotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIAogLyoKICAqIE1jQlNQMSBhbmQgTWNCU1AzIGFyZSBkaXJlY3RseSBtYXBwZWQgb24gMTYxMCBhbmQgMTUxMC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKaW5kZXggMmVkNzIwMS4uNTkwNDM1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKQEAgLTkwLDYgKzkwLDggQEAKICNkZWZpbmUgSUdOT1JFX1dBS0VVUF9MQVQJCTEKIAogCisjZGVmaW5lIE9NQVBfREVWSUNFX01BR0lDIDB4ZjAwZGNhZmUKKwogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIAogLyoqCkBAIC0xMzgsMTAgKzE0MCwyMiBAQAogCQkJICIlbGx1IG5zZWNcbiIsIG9kLT5wZGV2Lm5hbWUsIG9kLT5wbV9sYXRfbGV2ZWwsCiAJCQkgYWN0X2xhdCk7CiAKLQkJV0FSTihhY3RfbGF0ID4gb2RwbC0+YWN0aXZhdGVfbGF0LCAib21hcF9kZXZpY2U6ICVzLiVkOiAiCi0JCSAgICAgImFjdGl2YXRlIHN0ZXAgJWQgdG9vayBsb25nZXIgdGhhbiBleHBlY3RlZCAoJWxsdSA+ICVkKVxuIiwKLQkJICAgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwgb2QtPnBtX2xhdF9sZXZlbCwKLQkJICAgICBhY3RfbGF0LCBvZHBsLT5hY3RpdmF0ZV9sYXQpOworCQlpZiAoYWN0X2xhdCA+IG9kcGwtPmFjdGl2YXRlX2xhdCkgeworCQkJb2RwbC0+YWN0aXZhdGVfbGF0X3dvcnN0ID0gYWN0X2xhdDsKKwkJCWlmIChvZHBsLT5mbGFncyAmIE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QpIHsKKwkJCQlvZHBsLT5hY3RpdmF0ZV9sYXQgPSBhY3RfbGF0OworCQkJCXByX3dhcm5pbmcoIm9tYXBfZGV2aWNlOiAlcy4lZDogbmV3IHdvcnN0IGNhc2UgIgorCQkJCQkgICAiYWN0aXZhdGUgbGF0ZW5jeSAlZDogJWxsdVxuIiwKKwkJCQkJICAgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQsCisJCQkJCSAgIG9kLT5wbV9sYXRfbGV2ZWwsIGFjdF9sYXQpOworCQkJfSBlbHNlCisJCQkJcHJfd2FybmluZygib21hcF9kZXZpY2U6ICVzLiVkOiBhY3RpdmF0ZSAiCisJCQkJCSAgICJsYXRlbmN5ICVkIGhpZ2hlciB0aGFuIGV4cHRlY3RlZC4gIgorCQkJCQkgICAiKCVsbHUgPiAlZClcbiIsCisJCQkJCSAgIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLAorCQkJCQkgICBvZC0+cG1fbGF0X2xldmVsLCBhY3RfbGF0LAorCQkJCQkgICBvZHBsLT5hY3RpdmF0ZV9sYXQpOworCQl9CiAKIAkJb2QtPmRldl93YWtldXBfbGF0IC09IG9kcGwtPmFjdGl2YXRlX2xhdDsKIAl9CkBAIC0xOTQsMTAgKzIwOCwyMyBAQAogCQkJICIlbGx1IG5zZWNcbiIsIG9kLT5wZGV2Lm5hbWUsIG9kLT5wbV9sYXRfbGV2ZWwsCiAJCQkgZGVhY3RfbGF0KTsKIAotCQlXQVJOKGRlYWN0X2xhdCA+IG9kcGwtPmRlYWN0aXZhdGVfbGF0LCAib21hcF9kZXZpY2U6ICVzLiVkOiAiCi0JCSAgICAgImRlYWN0aXZhdGUgc3RlcCAlZCB0b29rIGxvbmdlciB0aGFuIGV4cGVjdGVkICIKLQkJICAgICAiKCVsbHUgPiAlZClcbiIsIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLAotCQkgICAgIG9kLT5wbV9sYXRfbGV2ZWwsIGRlYWN0X2xhdCwgb2RwbC0+ZGVhY3RpdmF0ZV9sYXQpOworCQlpZiAoZGVhY3RfbGF0ID4gb2RwbC0+ZGVhY3RpdmF0ZV9sYXQpIHsKKwkJCW9kcGwtPmRlYWN0aXZhdGVfbGF0X3dvcnN0ID0gZGVhY3RfbGF0OworCQkJaWYgKG9kcGwtPmZsYWdzICYgT01BUF9ERVZJQ0VfTEFURU5DWV9BVVRPX0FESlVTVCkgeworCQkJCW9kcGwtPmRlYWN0aXZhdGVfbGF0ID0gZGVhY3RfbGF0OworCQkJCXByX3dhcm5pbmcoIm9tYXBfZGV2aWNlOiAlcy4lZDogbmV3IHdvcnN0IGNhc2UgIgorCQkJCQkgICAiZGVhY3RpdmF0ZSBsYXRlbmN5ICVkOiAlbGx1XG4iLAorCQkJCQkgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwKKwkJCQkJICAgb2QtPnBtX2xhdF9sZXZlbCwgZGVhY3RfbGF0KTsKKwkJCX0gZWxzZQorCQkJCXByX3dhcm5pbmcoIm9tYXBfZGV2aWNlOiAlcy4lZDogZGVhY3RpdmF0ZSAiCisJCQkJCSAgICJsYXRlbmN5ICVkIGhpZ2hlciB0aGFuIGV4cHRlY3RlZC4gIgorCQkJCQkgICAiKCVsbHUgPiAlZClcbiIsCisJCQkJCSAgIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLAorCQkJCQkgICBvZC0+cG1fbGF0X2xldmVsLCBkZWFjdF9sYXQsCisJCQkJCSAgIG9kcGwtPmRlYWN0aXZhdGVfbGF0KTsKKwkJfQorCiAKIAkJb2QtPmRldl93YWtldXBfbGF0ICs9IG9kcGwtPmFjdGl2YXRlX2xhdDsKIApAQCAtMjgwLDYgKzMwNyw3IEBACiAgKiBAcGRhdGFfbGVuOiBhbW91bnQgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgQHBkYXRhCiAgKiBAcG1fbGF0czogcG9pbnRlciB0byBhIG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgYXJyYXkgZm9yIHRoaXMgZGV2aWNlCiAgKiBAcG1fbGF0c19jbnQ6IEFSUkFZX1NJWkUoKSBvZiBAcG1fbGF0cworICogQGlzX2Vhcmx5X2RldmljZTogc2hvdWxkIHRoZSBkZXZpY2UgYmUgcmVnaXN0ZXJlZCBhcyBhbiBlYXJseSBkZXZpY2Ugb3Igbm90CiAgKgogICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGJ1aWxkaW5nIGFuZCByZWdpc3RlcmluZyBhIHNpbmdsZQogICogb21hcF9kZXZpY2UgcmVjb3JkLCB3aGljaCBpbiB0dXJuIGJ1aWxkcyBhbmQgcmVnaXN0ZXJzIGEKQEAgLTI5MSw3ICszMTksNyBAQAogCQkJCSAgICAgIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqcGRhdGEsCiAJCQkJICAgICAgaW50IHBkYXRhX2xlbiwKIAkJCQkgICAgICBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqcG1fbGF0cywKLQkJCQkgICAgICBpbnQgcG1fbGF0c19jbnQpCisJCQkJICAgICAgaW50IHBtX2xhdHNfY250LCBpbnQgaXNfZWFybHlfZGV2aWNlKQogewogCXN0cnVjdCBvbWFwX2h3bW9kICpvaHNbXSA9IHsgb2ggfTsKIApAQCAtMjk5LDcgKzMyNyw4IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJcmV0dXJuIG9tYXBfZGV2aWNlX2J1aWxkX3NzKHBkZXZfbmFtZSwgcGRldl9pZCwgb2hzLCAxLCBwZGF0YSwKLQkJCQkgICAgcGRhdGFfbGVuLCBwbV9sYXRzLCBwbV9sYXRzX2NudCk7CisJCQkJICAgIHBkYXRhX2xlbiwgcG1fbGF0cywgcG1fbGF0c19jbnQsCisJCQkJICAgIGlzX2Vhcmx5X2RldmljZSk7CiB9CiAKIC8qKgpAQCAtMzExLDYgKzM0MCw3IEBACiAgKiBAcGRhdGFfbGVuOiBhbW91bnQgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgQHBkYXRhCiAgKiBAcG1fbGF0czogcG9pbnRlciB0byBhIG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgYXJyYXkgZm9yIHRoaXMgZGV2aWNlCiAgKiBAcG1fbGF0c19jbnQ6IEFSUkFZX1NJWkUoKSBvZiBAcG1fbGF0cworICogQGlzX2Vhcmx5X2RldmljZTogc2hvdWxkIHRoZSBkZXZpY2UgYmUgcmVnaXN0ZXJlZCBhcyBhbiBlYXJseSBkZXZpY2Ugb3Igbm90CiAgKgogICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGJ1aWxkaW5nIGFuZCByZWdpc3RlcmluZyBhbiBvbWFwX2RldmljZQogICogc3Vic3lzdGVtIHJlY29yZC4gIFN1YnN5c3RlbSByZWNvcmRzIGNvbnNpc3Qgb2YgbXVsdGlwbGUKQEAgLTMyMiw3ICszNTIsNyBAQAogCQkJCQkgc3RydWN0IG9tYXBfaHdtb2QgKipvaHMsIGludCBvaF9jbnQsCiAJCQkJCSB2b2lkICpwZGF0YSwgaW50IHBkYXRhX2xlbiwKIAkJCQkJIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5ICpwbV9sYXRzLAotCQkJCQkgaW50IHBtX2xhdHNfY250KQorCQkJCQkgaW50IHBtX2xhdHNfY250LCBpbnQgaXNfZWFybHlfZGV2aWNlKQogewogCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CkBAIC0zNzgsNyArNDA4LDEzIEBACiAJb2QtPnBtX2xhdHMgPSBwbV9sYXRzOwogCW9kLT5wbV9sYXRzX2NudCA9IHBtX2xhdHNfY250OwogCi0JcmV0ID0gb21hcF9kZXZpY2VfcmVnaXN0ZXIob2QpOworCW9kLT5tYWdpYyA9IE9NQVBfREVWSUNFX01BR0lDOworCisJaWYgKGlzX2Vhcmx5X2RldmljZSkKKwkJcmV0ID0gb21hcF9lYXJseV9kZXZpY2VfcmVnaXN0ZXIob2QpOworCWVsc2UKKwkJcmV0ID0gb21hcF9kZXZpY2VfcmVnaXN0ZXIob2QpOworCiAJaWYgKHJldCkKIAkJZ290byBvZGJzX2V4aXQ0OwogCkBAIC0zOTksNiArNDM1LDI0IEBACiB9CiAKIC8qKgorICogb21hcF9lYXJseV9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBvbWFwX2RldmljZSBhcyBhbiBlYXJseSBwbGF0Zm9ybQorICogZGV2aWNlLgorICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKiB0byByZWdpc3RlcgorICoKKyAqIFJlZ2lzdGVyIHRoZSBvbWFwX2RldmljZSBzdHJ1Y3R1cmUuICBUaGlzIGN1cnJlbnRseSBqdXN0IGNhbGxzCisgKiBwbGF0Zm9ybV9lYXJseV9hZGRfZGV2aWNlKCkgb24gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm1fZGV2aWNlLgorICogUmV0dXJucyAwIGJ5IGRlZmF1bHQuCisgKi8KK2ludCBvbWFwX2Vhcmx5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbMV07CisKKwlkZXZpY2VzWzBdID0gJihvZC0+cGRldik7CisJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogb21hcF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBvbWFwX2RldmljZSB3aXRoIG9uZSBvbWFwX2h3bW9kCiAgKiBAb2Q6IHN0cnVjdCBvbWFwX2RldmljZSAqIHRvIHJlZ2lzdGVyCiAgKgpAQCAtNDM3LDggKzQ5MSw4IEBACiAJb2QgPSBfZmluZF9ieV9wZGV2KHBkZXYpOwogCiAJaWYgKG9kLT5fc3RhdGUgPT0gT01BUF9ERVZJQ0VfU1RBVEVfRU5BQkxFRCkgewotCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXMuJWQ6IG9tYXBfZGV2aWNlX2VuYWJsZSgpIGNhbGxlZCBmcm9tICIKLQkJICAgICAiaW52YWxpZCBzdGF0ZVxuIiwgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQpOworCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXMuJWQ6ICVzKCkgY2FsbGVkIGZyb20gaW52YWxpZCBzdGF0ZSAlZFxuIiwKKwkJICAgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwgX19mdW5jX18sIG9kLT5fc3RhdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ3Niw4ICs1MzAsOCBAQAogCW9kID0gX2ZpbmRfYnlfcGRldihwZGV2KTsKIAogCWlmIChvZC0+X3N0YXRlICE9IE9NQVBfREVWSUNFX1NUQVRFX0VOQUJMRUQpIHsKLQkJV0FSTigxLCAib21hcF9kZXZpY2U6ICVzLiVkOiBvbWFwX2RldmljZV9pZGxlKCkgY2FsbGVkIGZyb20gIgotCQkgICAgICJpbnZhbGlkIHN0YXRlXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCk7CisJCVdBUk4oMSwgIm9tYXBfZGV2aWNlOiAlcy4lZDogJXMoKSBjYWxsZWQgZnJvbSBpbnZhbGlkIHN0YXRlICVkXG4iLAorCQkgICAgIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLCBfX2Z1bmNfXywgb2QtPl9zdGF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTA5LDggKzU2Myw4IEBACiAKIAlpZiAob2QtPl9zdGF0ZSAhPSBPTUFQX0RFVklDRV9TVEFURV9FTkFCTEVEICYmCiAJICAgIG9kLT5fc3RhdGUgIT0gT01BUF9ERVZJQ0VfU1RBVEVfSURMRSkgewotCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXMuJWQ6IG9tYXBfZGV2aWNlX3NodXRkb3duKCkgY2FsbGVkICIKLQkJICAgICAiZnJvbSBpbnZhbGlkIHN0YXRlXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCk7CisJCVdBUk4oMSwgIm9tYXBfZGV2aWNlOiAlcy4lZDogJXMoKSBjYWxsZWQgZnJvbSBpbnZhbGlkIHN0YXRlICVkXG4iLAorCQkgICAgIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLCBfX2Z1bmNfXywgb2QtPl9zdGF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTY0LDYgKzYxOCwxOCBAQAogfQogCiAvKioKKyAqIG9tYXBfZGV2aWNlX2lzX3ZhbGlkIC0gQ2hlY2sgaWYgcG9pbnRlciBpcyBhIHZhbGlkIG9tYXBfZGV2aWNlCisgKiBAb2Q6IHN0cnVjdCBvbWFwX2RldmljZSAqCisgKgorICogUmV0dXJuIHdoZXRoZXIgc3RydWN0IG9tYXBfZGV2aWNlIHBvaW50ZXIgQG9kIHBvaW50cyB0byBhIHZhbGlkCisgKiBvbWFwX2RldmljZS4KKyAqLworYm9vbCBvbWFwX2RldmljZV9pc192YWxpZChzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKQoreworCXJldHVybiAob2QgJiYgb2QtPm1hZ2ljID09IE9NQVBfREVWSUNFX01BR0lDKTsKK30KKworLyoqCiAgKiBvbWFwX2RldmljZV9nZXRfcHdyZG0gLSByZXR1cm4gdGhlIHBvd2VyZG9tYWluICogYXNzb2NpYXRlZCB3aXRoIEBvZAogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGQ4ZDUwOTQuLjUxZjRkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtNTMsNyArNTMsNyBAQAogI2RlZmluZSBPTUFQNF9TUkFNX1BVQl9QQQkoT01BUDRfU1JBTV9QQSArIDB4NDAwMCkKICNkZWZpbmUgT01BUDRfU1JBTV9QVUJfVkEJKE9NQVA0X1NSQU1fVkEgKyAweDQwMDApCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjZGVmaW5lIFNSQU1fQk9PVExPQURFUl9TWgkweDAwCiAjZWxzZQogI2RlZmluZSBTUkFNX0JPT1RMT0FERVJfU1oJMHg4MApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYmZkMmNhNi4uMjk5ZDk1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xNSw2ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYwppbmRleCA1ZDJmMTlhLi5lNTkzYTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jCkBAIC0xMTI2LDkgKzExMjYsOCBAQAogCQkJaWYgKG9wcyAmJiBvcHMtPnNldF9wYXJlbnQpCiAJCQkJb3BzLT5zZXRfcGFyZW50KGNsLT5jbGssIGNsLT5jbGstPnBhcmVudCk7CiAJCX0KLQotCQljbGtkZXZfYWRkKGNsKTsKIAl9CisJY2xrZGV2X2FkZF90YWJsZShvbmNoaXBfY2xrcywgQVJSQVlfU0laRShvbmNoaXBfY2xrcykpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBmYjNiOTY5Li4xYjkzNDhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAogICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ODAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA1NDFiODgwLi45NDNjMWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC05LDQgKzksNCBAQAogICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhmMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggYTYzYzRiZS4uN2YzZjU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtNDMzLDcgKzQzMywxMSBAQAogICogc2F2ZWQgb25lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHB0cmFjZSBtZWNoYW5pc20uCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCS8qCiAJICogT24gU01QIHN5c3RlbXMsIHRoZSBWRlAgc3RhdGUgaXMgYXV0b21hdGljYWxseSBzYXZlZCBhdCBldmVyeQpAQCAtNDQ0LDM1ICs0NDgsNDggQEAKIAl0aHJlYWQtPnZmcHN0YXRlLmhhcmQuY3B1ID0gTlJfQ1BVUzsKIH0KICNlbHNlCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7Ci0JdTMyIGZwZXhjID0gZm1yeChGUEVYQyk7CiAKIAkvKgotCSAqIElmIFZGUCBpcyBlbmFibGVkLCB0aGUgcHJldmlvdXMgc3RhdGUgd2FzIGFscmVhZHkgc2F2ZWQgYW5kCi0JICogbGFzdF9WRlBfY29udGV4dCB1cGRhdGVkLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlpZiAoZnBleGMgJiBGUEVYQ19FTikKLQkJZ290byBvdXQ7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCWlmICghbGFzdF9WRlBfY29udGV4dFtjcHVdKQotCQlnb3RvIG91dDsKKwkJLyoKKwkJICogU2F2ZSB0aGUgbGFzdCBWRlAgc3RhdGUgb24gdGhpcyBDUFUuCisJCSAqLworCQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKKwkJdmZwX3NhdmVfc3RhdGUoJnRocmVhZC0+dmZwc3RhdGUsIGZwZXhjIHwgRlBFWENfRU4pOworCQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJfQorCisJcHV0X2NwdSgpOworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAkvKgotCSAqIFNhdmUgdGhlIGxhc3QgVkZQIHN0YXRlIG9uIHRoaXMgQ1BVLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKLQl2ZnBfc2F2ZV9zdGF0ZShsYXN0X1ZGUF9jb250ZXh0W2NwdV0sIGZwZXhjKTsKLQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCS8qCi0JICogU2V0IHRoZSBjb250ZXh0IHRvIE5VTEwgdG8gZm9yY2UgYSByZWxvYWQgdGhlIG5leHQgdGltZSB0aGUgdGhyZWFkCi0JICogdXNlcyB0aGUgVkZQLgotCSAqLwotCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7CisJCWZteHIoRlBFWEMsIGZwZXhjICYgfkZQRVhDX0VOKTsKIAotb3V0OgorCQkvKgorCQkgKiBTZXQgdGhlIGNvbnRleHQgdG8gTlVMTCB0byBmb3JjZSBhIHJlbG9hZCB0aGUgbmV4dCB0aW1lCisJCSAqIHRoZSB0aHJlYWQgdXNlcyB0aGUgVkZQLgorCQkgKi8KKwkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKwl9CisKIAlwdXRfY3B1KCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmVjZGRhMS4uYTlhZTMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMyNSw3ICszMjUsNyBAQAogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKIAogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCBiMTNkMTg3Li4zYTRiYzFhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMTc3MCwxMCArMTc3MCwxMyBAQAogCQkJCQkgIEFSUkFZX1NJWkUodXNiYTBfcmVzb3VyY2UpKSkKIAkJZ290byBvdXRfZnJlZV9wZGV2OwogCi0JaWYgKGRhdGEpCisJaWYgKGRhdGEpIHsKIAkJdXNiYV9kYXRhLnBkYXRhLnZidXNfcGluID0gZGF0YS0+dmJ1c19waW47Ci0JZWxzZQorCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW5faW52ZXJ0ZWQgPSBkYXRhLT52YnVzX3Bpbl9pbnZlcnRlZDsKKwl9IGVsc2UgewogCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOworCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW5faW52ZXJ0ZWQgPSAtRUlOVkFMOworCX0KIAogCWRhdGEgPSAmdXNiYV9kYXRhLnBkYXRhOwogCWRhdGEtPm51bV9lcCA9IEFSUkFZX1NJWkUoYXQzMl91c2JhX2VwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbW0vdGxiLmMgYi9hcmNoL2F2cjMyL21tL3RsYi5jCmluZGV4IDA2Njc3YmUuLjBkYTIzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vdGxiLmMKKysrIGIvYXJjaC9hdnIzMi9tbS90bGIuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiB9CiAKIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAJCXJldHVybjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1cGRhdGVfZHRsYihhZGRyZXNzLCBwdGUpOworCXVwZGF0ZV9kdGxiKGFkZHJlc3MsICpwdGVwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCBiMGVkMGI0Li4wMWIyZjU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC04MTYsOCArODE2LDggQEAKIAogRU5UUlkoX3JldF9mcm9tX2V4Y2VwdGlvbikKICNpZmRlZiBDT05GSUdfSVBJUEUKLQlwMi5sID0gX3Blcl9jcHVfX2lwaXBlX3BlcmNwdV9kb21haW47Ci0JcDIuaCA9IF9wZXJfY3B1X19pcGlwZV9wZXJjcHVfZG9tYWluOworCXAyLmwgPSBfaXBpcGVfcGVyY3B1X2RvbWFpbjsKKwlwMi5oID0gX2lwaXBlX3BlcmNwdV9kb21haW47CiAJcjAubCA9IF9pcGlwZV9yb290OwogCXIwLmggPSBfaXBpcGVfcm9vdDsKIAlyMiA9IFtwMl07CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMKaW5kZXggMmMxOGQwOC4uYzUyYmVmMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUwpAQCAtMzU4LDcgKzM1OCw3IEBACiAxOglidHN0cQkxMiwgJHIxCQkgICA7IFJlZmlsbD8KIAlicGwJMmYKIAlsc3JxCTI0LCAkcjEgICAgIDsgR2V0IFBHRCBpbmRleCAoYml0IDI0LTMxKQotCW1vdmUuZCAgW3Blcl9jcHVfX2N1cnJlbnRfcGdkXSwgJHIwIDsgUEdEIGZvciB0aGUgY3VycmVudCBwcm9jZXNzCisJbW92ZS5kICBbY3VycmVudF9wZ2RdLCAkcjAgOyBQR0QgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MKIAltb3ZlLmQJWyRyMCskcjEuZF0sICRyMCAgIDsgR2V0IFBNRAogCWJlcQkyZgogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggNWQ3NWY3Ny4uMWE2MWVmYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjEwX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICAgICJDUklTdjEwIiwKKwkubmFtZSA9ICAgICAgICAiQ1JJU3YxMCIsCiAJLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjEwX2lycSwKIAkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjEwX2lycSwKIAkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YxMF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYwppbmRleCA3N2VlMzE5Li5kNGI5YzM2ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCkBAIC00MSwxOCArNDEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKKworCXJldHVybiBzdGFydAogfQogCiBpbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggNTc2NjhkYi4uYjYyNDExOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjMyX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICAgICJDUklTdjMyIiwKKwkubmFtZSA9ICAgICAgICAiQ1JJU3YzMiIsCiAJLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjMyX2lycSwKIAkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjMyX2lycSwKIAkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YzMl9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9waW5tdXguYwppbmRleCA2ZWI1NGVhLi5mNmYzNjM3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcGlubXV4LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAJY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwogCi0JaWYgKHBvcnQgPiBQT1JUUykKKwlpZiAocG9ydCA+IFBPUlRTIHx8IHBvcnQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvcGlubXV4LmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYwppbmRleCAwYTI4YzliLi4xODY0OGVmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIAljcmlzdjMyX3Bpbm11eF9pbml0KCk7CiAKLQlpZiAocG9ydCA+IFBPUlRTKQorCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9waW5tdXguYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCmluZGV4IGQ3MjJhZDkuLjM4ZjI5ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCkBAIC01NCw3ICs1NCw3IEBACiAKIAljcmlzdjMyX3Bpbm11eF9pbml0KCk7CiAKLQlpZiAocG9ydCA+IFBPUlRTKQorCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9tbXUuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9tbXUuUwppbmRleCAyMjM4ZDE1Li5mMTI1ZDkxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbW0vbW11LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL21tdS5TCkBAIC0xMTUsNyArMTE1LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJbW92ZSAgICAkczcsICRhY3IJOyBQR0QKICNlbHNlCi0JbW92ZS5kICBwZXJfY3B1X19jdXJyZW50X3BnZCwgJGFjciA7IFBHRAorCW1vdmUuZCAgY3VycmVudF9wZ2QsICRhY3IgOyBQR0QKICNlbmRpZgogCTsgTG9vayB1cCBQTUQgaW4gUEdECiAJbHNycQkyNCwgJHIwCTsgR2V0IFBNRCBpbmRleCBpbnRvIFBHRCAoYml0IDI0LTMxKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMWZjY2UwMC4uOTllYTZjZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNzAsNyArMjcwLDcgQEAKICAqIEFjdHVhbGx5IEkgYW0gbm90IHN1cmUgb24gd2hhdCB0aGlzIGNvdWxkIGJlIHVzZWQgZm9yLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggYjVjZTA3Mi4uNmQ3YjllZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDIyYzYwNjkuLmMxOGIwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUwNSw3ICs1MDUsNyBAQAogLyoKICAqIHByZWxvYWQgaW5mb3JtYXRpb24gYWJvdXQgYSBuZXdseSBpbnN0YW50aWF0ZWQgUFRFIGludG8gdGhlIFNDUjAvU0NSMSBQR0UgY2FjaGUKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdW5zaWduZWQgbG9uZyBhbXByOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggNTY2YmRlYi4uMWVkMTVkNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC0zMiwxOCArMzIsMTYgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKLQkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfQorCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pICYmIChzdGFydCAmIDB4MzAwKSkKKwkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CisKKwlyZXR1cm4gc3RhcnQKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jIGIvYXJjaC9oODMwMC9tbS9tZW1vcnkuYwppbmRleCBjY2Q2YWRlLi40MGQ4YWE4IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jCisrKyBiL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKQEAgLTQ0LDggKzQ0LDggQEAKIHsKIH0KIAotLyogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCi0gKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIAogdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggMmQ3ZjU2YS4uOWE1MGQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTQ5OSwyMyArNDk5LDYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBQUk9DX0tDT1JFCiAKLWNvbmZpZyBJQTMyX1NVUFBPUlQKLQlib29sICJTdXBwb3J0IGZvciBMaW51eC94ODYgYmluYXJpZXMiCi0JaGVscAotCSAgSUEtNjQgcHJvY2Vzc29ycyBjYW4gZXhlY3V0ZSBJQS0zMiAoWDg2KSBpbnN0cnVjdGlvbnMuICBCeQotCSAgc2F5aW5nIFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgSUEtMzIgc3lzdGVtIGNhbGwKLQkgIGVtdWxhdGlvbiBzdXBwb3J0IHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHRyYW5zcGFyZW50bHkKLQkgIHJ1biBJQS0zMiBMaW51eCBiaW5hcmllcyBvbiBhbiBJQS02NCBMaW51eCBzeXN0ZW0uCi0JICBJZiBpbiBkb3VidCwgc2F5IFkuCi0KLWNvbmZpZyBDT01QQVQKLQlib29sCi0JZGVwZW5kcyBvbiBJQTMyX1NVUFBPUlQKLQlkZWZhdWx0IHkKLQotY29uZmlnIENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVAotCWRlZl9ib29sIENPTVBBVAotCiBjb25maWcgSUE2NF9NQ0FfUkVDT1ZFUlkKIAl0cmlzdGF0ZSAiTUNBIHJlY292ZXJ5IGZyb20gZXJyb3JzIG90aGVyIHRoYW4gVExCLiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L01ha2VmaWxlIGIvYXJjaC9pYTY0L01ha2VmaWxlCmluZGV4IDQ3NWUyNzIuLjhhZTBkMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQvTWFrZWZpbGUKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogbGlicy15CQkJCSs9IGFyY2gvaWE2NC9saWIvCiBjb3JlLXkJCQkJKz0gYXJjaC9pYTY0L2tlcm5lbC8gYXJjaC9pYTY0L21tLwotY29yZS0kKENPTkZJR19JQTMyX1NVUFBPUlQpCSs9IGFyY2gvaWE2NC9pYTMyLwogY29yZS0kKENPTkZJR19JQTY0X0RJRykgCSs9IGFyY2gvaWE2NC9kaWcvCiBjb3JlLSQoQ09ORklHX0lBNjRfRElHX1ZURCkgCSs9IGFyY2gvaWE2NC9kaWcvCiBjb3JlLSQoQ09ORklHX0lBNjRfR0VORVJJQykgCSs9IGFyY2gvaWE2NC9kaWcvCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCBhY2U0MTA5Li4zMTJiMTIwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTEzMSw4ICsxMzEsNiBAQAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiAjIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAotQ09ORklHX0lBMzJfU1VQUE9SVD15Ci1DT05GSUdfQ09NUEFUPXkKICMgQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZIGlzIG5vdCBzZXQKIENPTkZJR19QRVJGTU9OPXkKIENPTkZJR19JQTY0X1BBTElORk89eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwppbmRleCA3NTY0NTQ5Li42YTRjYzUwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMjA1LDggKzIwNSw2IEBACiBDT05GSUdfSE9MRVNfSU5fWk9ORT15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQogQ09ORklHX0hBVkVfQVJDSF9OT0RFREFUQV9FWFRFTlNJT049eQotQ09ORklHX0lBMzJfU1VQUE9SVD15Ci1DT05GSUdfQ09NUEFUPXkKIENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQ9eQogQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZPXkKIENPTkZJR19QRVJGTU9OPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnCmluZGV4IGU4NmZiZDMuLjJkYzE4NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZwpAQCAtMTM5LDggKzEzOSw2IEBACiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVD15CiBDT05GSUdfTlVNQT15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQotQ09ORklHX0lBMzJfU1VQUE9SVD15Ci1DT05GSUdfQ09NUEFUPXkKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CiBDT05GSUdfUEVSRk1PTj15CiBDT05GSUdfSUE2NF9QQUxJTkZPPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnCmluZGV4IDU0NmE3NzIuLjIxYTIzY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZwpAQCAtMTMwLDggKzEzMCw2IEBACiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKICMgQ09ORklHX1ZJUlRVQUxfTUVNX01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfSUEzMl9TVVBQT1JUPXkKLUNPTkZJR19DT01QQVQ9eQogIyBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRk1PTiBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9QQUxJTkZPPW0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwppbmRleCBjNTIyZWRmLi5jNWE1ZWE5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCkBAIC0xNTQsNyArMTU0LDYgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKIENPTkZJR19IT0xFU19JTl9aT05FPXkKLSMgQ09ORklHX0lBMzJfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQogQ09ORklHX1BFUkZNT049eQogQ09ORklHX0lBNjRfUEFMSU5GTz15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy94ZW5fZG9tdV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy94ZW5fZG9tdV9kZWZjb25maWcKaW5kZXggMGJiMDcxNC4uYzY3ZWFmYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3hlbl9kb211X2RlZmNvbmZpZwpAQCAtMjAwLDggKzIwMCw2IEBACiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CiBDT05GSUdfSE9MRVNfSU5fWk9ORT15Ci0jIENPTkZJR19JQTMyX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CiBDT05GSUdfUEVSRk1PTj15CiBDT05GSUdfSUE2NF9QQUxJTkZPPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnCmluZGV4IDUxNGYwNjMuLjNjZWM2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvengxX2RlZmNvbmZpZwpAQCAtMTUwLDggKzE1MCw2IEBACiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CiBDT05GSUdfSE9MRVNfSU5fWk9ORT15Ci1DT05GSUdfSUEzMl9TVVBQT1JUPXkKLUNPTkZJR19DT01QQVQ9eQogQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZPXkKIENPTkZJR19QRVJGTU9OPXkKIENPTkZJR19JQTY0X1BBTElORk89eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9hbWxfbmZ3LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL2FtbF9uZncuYwppbmRleCA0YWJkMmM3OS4uMjIwNzg0OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9hbWxfbmZ3LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9hbWxfbmZ3LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJICAgICBjLT5hcmdbNF0sIGMtPmFyZ1s1XSwgYy0+YXJnWzZdLCBjLT5hcmdbN10pOwogfQogCi1zdGF0aWMgdm9pZCBhbWxfbmZ3X3JlYWRfYXJnKHU4ICpvZmZzZXQsIHUzMiBiaXRfd2lkdGgsIGFjcGlfaW50ZWdlciAqdmFsdWUpCitzdGF0aWMgdm9pZCBhbWxfbmZ3X3JlYWRfYXJnKHU4ICpvZmZzZXQsIHUzMiBiaXRfd2lkdGgsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChiaXRfd2lkdGgpIHsKIAljYXNlIDg6CkBAIC05NSw3ICs5NSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhbWxfbmZ3X3dyaXRlX2FyZyh1OCAqb2Zmc2V0LCB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKnZhbHVlKQorc3RhdGljIHZvaWQgYW1sX25md193cml0ZV9hcmcodTggKm9mZnNldCwgdTMyIGJpdF93aWR0aCwgdTY0ICp2YWx1ZSkKIHsKIAlzd2l0Y2ggKGJpdF93aWR0aCkgewogCWNhc2UgODoKQEAgLTExNCw3ICsxMTQsNyBAQAogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMgYW1sX25md19oYW5kbGVyKHUzMiBmdW5jdGlvbiwgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCi0JdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICp2YWx1ZSwgdm9pZCAqaGFuZGxlcl9jb250ZXh0LAorCXUzMiBiaXRfd2lkdGgsIHU2NCAqdmFsdWUsIHZvaWQgKmhhbmRsZXJfY29udGV4dCwKIAl2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlzdHJ1Y3QgaWE2NF9uZndfY29udGV4dCAqY29udGV4dCA9IGhhbmRsZXJfY29udGV4dDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL01ha2VmaWxlIGIvYXJjaC9pYTY0L2lhMzIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYWQ4YzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgaWEzMiBrZXJuZWwgZW11bGF0aW9uIHN1YnN5c3RlbS4KLSMKLQotb2JqLXkgOj0gaWEzMl9lbnRyeS5vIHN5c19pYTMyLm8gaWEzMl9zaWduYWwubyBcCi0JIGlhMzJfc3VwcG9ydC5vIGlhMzJfdHJhcHMubyBiaW5mbXRfZWxmMzIubyBpYTMyX2xkdC5vCi1vYmotJChDT05GSUdfQVVESVQpICs9IGF1ZGl0Lm8KLQotIyBEb24ndCBsZXQgR0NDIHVzZXMgZjE2LWYzMSBzbyB0aGF0IHNhdmVfaWEzMl9mcHN0YXRlX2xpdmUoKSBhbmQKLSMgcmVzdG9yZV9pYTMyX2Zwc3RhdGVfbGl2ZSgpIGNhbiBiZSBzdXJlIHRoZSBsaXZlIHJlZ2lzdGVyIGNvbnRhaW4gdXNlci1sZXZlbCBzdGF0ZS4KLUNGTEFHU19pYTMyX3NpZ25hbC5vICs9IC1tZml4ZWQtcmFuZ2U9ZjE2LWYzMQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYyBiL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOTNkZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgiCi0KLXVuc2lnbmVkIGlhMzJfZGlyX2NsYXNzW10gPSB7Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Ci1+MFUKLX07Ci0KLXVuc2lnbmVkIGlhMzJfY2hhdHRyX2NsYXNzW10gPSB7Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD4KLX4wVQotfTsKLQotdW5zaWduZWQgaWEzMl93cml0ZV9jbGFzc1tdID0gewotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3dyaXRlLmg+Ci1+MFUKLX07Ci0KLXVuc2lnbmVkIGlhMzJfcmVhZF9jbGFzc1tdID0gewotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KLX4wVQotfTsKLQotdW5zaWduZWQgaWEzMl9zaWduYWxfY2xhc3NbXSA9IHsKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9zaWduYWwuaD4KLX4wVQotfTsKLQotaW50IGlhMzJfY2xhc3NpZnlfc3lzY2FsbCh1bnNpZ25lZCBzeXNjYWxsKQotewotCXN3aXRjaChzeXNjYWxsKSB7Ci0JY2FzZSBfX05SX29wZW46Ci0JCXJldHVybiAyOwotCWNhc2UgX19OUl9vcGVuYXQ6Ci0JCXJldHVybiAzOwotCWNhc2UgX19OUl9zb2NrZXRjYWxsOgotCQlyZXR1cm4gNDsKLQljYXNlIF9fTlJfZXhlY3ZlOgotCQlyZXR1cm4gNTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYyBiL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjk1NTJiLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0gKiBJQS0zMiBFTEYgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgQXJ1biBTaGFybWEgPGFydW4uc2hhcm1hQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiAwNi8xNi8wMAlBLiBNYWxsaWNrCWluaXRpYWxpemUgY3NkL3NzZC90c3NkL2NmbGcgZm9yIGlhMzJfbG9hZF9zdGF0ZQotICogMDQvMTMvMDEJRC4gTW9zYmVyZ2VyCWRyb3BwZWQgc2F2aW5nIHRzc2QgaW4gYXIuazEtLS1pdCdzIG5vdCBuZWVkZWQKLSAqIDA5LzE0LzAxCUQuIE1vc2JlcmdlcglmaXhlZCBtZW1vcnkgbWFuYWdlbWVudCBmb3IgZ2R0L3RzcyBwYWdlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotCi0jaW5jbHVkZSA8YXNtL3BhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotCi0jaW5jbHVkZSAiaWEzMnByaXYuaCIKLSNpbmNsdWRlICJlbGZjb3JlMzIuaCIKLQotLyogT3ZlcnJpZGUgc29tZSBmdW5jdGlvbiBuYW1lcyAqLwotI3VuZGVmIHN0YXJ0X3RocmVhZAotI2RlZmluZSBzdGFydF90aHJlYWQJCQlpYTMyX3N0YXJ0X3RocmVhZAotI2RlZmluZSBlbGZfZm9ybWF0CQkJZWxmMzJfZm9ybWF0Ci0jZGVmaW5lIGluaXRfZWxmX2JpbmZtdAkJCWluaXRfZWxmMzJfYmluZm10Ci0jZGVmaW5lIGV4aXRfZWxmX2JpbmZtdAkJCWV4aXRfZWxmMzJfYmluZm10Ci0KLSN1bmRlZiBDTE9DS1NfUEVSX1NFQwotI2RlZmluZSBDTE9DS1NfUEVSX1NFQwlJQTMyX0NMT0NLU19QRVJfU0VDCi0KLWV4dGVybiB2b2lkIGlhNjRfZWxmMzJfaW5pdCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1zdGF0aWMgdm9pZCBlbGYzMl9zZXRfcGVyc29uYWxpdHkgKHZvaWQpOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZSAoKHVudXNlZCkpCi1yYW5kb21pemVfc3RhY2tfdG9wKHVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wKTsKLQotI2RlZmluZSBzZXR1cF9hcmdfcGFnZXMoYnBybSx0b3MsZXhlYykJCWlhMzJfc2V0dXBfYXJnX3BhZ2VzKGJwcm0sZXhlYykKLSNkZWZpbmUgZWxmX21hcAkJCQllbGYzMl9tYXAKLQotI3VuZGVmIFNFVF9QRVJTT05BTElUWQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCWVsZjMyX3NldF9wZXJzb25hbGl0eSgpCi0KLSNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykJKCEoaGF2ZV9wdF9nbnVfc3RhY2spKQotCi0vKiBVZ2x5IGJ1dCBhdm9pZHMgZHVwbGljYXRpb24gKi8KLSNpbmNsdWRlICIuLi8uLi8uLi9mcy9iaW5mbXRfZWxmLmMiCi0KLWV4dGVybiBzdHJ1Y3QgcGFnZSAqaWEzMl9zaGFyZWRfcGFnZVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKmlhMzJfZ2R0OwotZXh0ZXJuIHN0cnVjdCBwYWdlICppYTMyX2dhdGVfcGFnZTsKLQotaW50Ci1pYTMyX2luc3RhbGxfc2hhcmVkX3BhZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQl2bWYtPnBhZ2UgPSBpYTMyX3NoYXJlZF9wYWdlW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1pYTMyX2luc3RhbGxfZ2F0ZV9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCi17Ci0Jdm1mLT5wYWdlID0gaWEzMl9nYXRlX3BhZ2U7Ci0JZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzID0gewotCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX2dhdGVfcGFnZV92bV9vcHMgPSB7Ci0JLmZhdWx0ID0gaWEzMl9pbnN0YWxsX2dhdGVfcGFnZQotfTsKLQotdm9pZAotaWE2NF9lbGYzMl9pbml0IChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQotCS8qCi0JICogTWFwIEdEVCBiZWxvdyA0R0IsIHdoZXJlIHRoZSBwcm9jZXNzb3IgY2FuIGZpbmQgaXQuICBXZSBuZWVkIHRvIG1hcAotCSAqIGl0IHdpdGggcHJpdmlsZWdlIGxldmVsIDMgYmVjYXVzZSB0aGUgSVZFIHVzZXMgbm9uLXByaXZpbGVnZWQgYWNjZXNzZXMgdG8gdGhlc2UKLQkgKiB0YWJsZXMuICBJQS0zMiBzZWdtZW50YXRpb24gaXMgdXNlZCB0byBwcm90ZWN0IGFnYWluc3QgSUEtMzIgYWNjZXNzZXMgdG8gdGhlbS4KLQkgKi8KLQl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZtYSkgewotCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07Ci0JCXZtYS0+dm1fc3RhcnQgPSBJQTMyX0dEVF9PRkZTRVQ7Ci0JCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArIFBBR0VfU0laRTsKLQkJdm1hLT52bV9wYWdlX3Byb3QgPSBQQUdFX1NIQVJFRDsKLQkJdm1hLT52bV9mbGFncyA9IFZNX1JFQUR8Vk1fTUFZUkVBRHxWTV9SRVNFUlZFRDsKLQkJdm1hLT52bV9vcHMgPSAmaWEzMl9zaGFyZWRfcGFnZV92bV9vcHM7Ci0JCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCXsKLQkJCWlmIChpbnNlcnRfdm1fc3RydWN0KGN1cnJlbnQtPm1tLCB2bWEpKSB7Ci0JCQkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwotCQkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQkJCUJVRygpOwotCQkJfQotCQl9Ci0JCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCX0KLQotCS8qCi0JICogV2hlbiB1c2VyIHN0YWNrIGlzIG5vdCBleGVjdXRhYmxlLCBwdXNoIHNpZ3JldHVybiBjb2RlIHRvIHN0YWNrIG1ha2VzCi0JICogc2VnbWVudGF0aW9uIGZhdWx0IHJhaXNlZCB3aGVuIHJldHVybmluZyB0byBrZXJuZWwuIFNvIG5vdyBzaWdyZXR1cm4KLQkgKiBjb2RlIGlzIGxvY2tlZCBpbiBzcGVjaWZpYyBnYXRlIHBhZ2UsIHdoaWNoIGlzIHBvaW50ZWQgYnkgcHJldGNvZGUKLQkgKiB3aGVuIHNldHVwX2ZyYW1lX2lhMzIKLQkgKi8KLQl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZtYSkgewotCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07Ci0JCXZtYS0+dm1fc3RhcnQgPSBJQTMyX0dBVEVfT0ZGU0VUOwotCQl2bWEtPnZtX2VuZCA9IHZtYS0+dm1fc3RhcnQgKyBQQUdFX1NJWkU7Ci0JCXZtYS0+dm1fcGFnZV9wcm90ID0gUEFHRV9DT1BZX0VYRUM7Ci0JCXZtYS0+dm1fZmxhZ3MgPSBWTV9SRUFEIHwgVk1fTUFZUkVBRCB8IFZNX0VYRUMKLQkJCQl8IFZNX01BWUVYRUMgfCBWTV9SRVNFUlZFRDsKLQkJdm1hLT52bV9vcHMgPSAmaWEzMl9nYXRlX3BhZ2Vfdm1fb3BzOwotCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQl7Ci0JCQlpZiAoaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgdm1hKSkgewotCQkJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQkJCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJCQlCVUcoKTsKLQkJCX0KLQkJfQotCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl9Ci0KLQkvKgotCSAqIEluc3RhbGwgTERUIGFzIGFub255bW91cyBtZW1vcnkuICBUaGlzIGdpdmVzIHVzIGFsbC16ZXJvIHNlZ21lbnQgZGVzY3JpcHRvcnMKLQkgKiB1bnRpbCBhIHRhc2sgbW9kaWZpZXMgdGhlbSB2aWEgbW9kaWZ5X2xkdCgpLgotCSAqLwotCXZtYSA9IGttZW1fY2FjaGVfemFsbG9jKHZtX2FyZWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKLQlpZiAodm1hKSB7Ci0JCXZtYS0+dm1fbW0gPSBjdXJyZW50LT5tbTsKLQkJdm1hLT52bV9zdGFydCA9IElBMzJfTERUX09GRlNFVDsKLQkJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgUEFHRV9BTElHTihJQTMyX0xEVF9FTlRSSUVTKklBMzJfTERUX0VOVFJZX1NJWkUpOwotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IFBBR0VfU0hBUkVEOwotCQl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRHxWTV9XUklURXxWTV9NQVlSRUFEfFZNX01BWVdSSVRFOwotCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQl7Ci0JCQlpZiAoaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgdm1hKSkgewotCQkJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQkJCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJCQlCVUcoKTsKLQkJCX0KLQkJfQotCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl9Ci0KLQlpYTY0X3BzcihyZWdzKS0+YWMgPSAwOwkJLyogdHVybiBvZmYgYWxpZ25tZW50IGNoZWNraW5nICovCi0JcmVncy0+bG9hZHJzID0gMDsKLQkvKgotCSAqICBBY2NvcmRpbmcgdG8gdGhlIEFCSSAlZWR4IHBvaW50cyB0byBhbiBgYXRleGl0JyBoYW5kbGVyLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZQotCSAqICBvbmUgd2UnbGwgc2V0IGl0IHRvIDAgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBvdGhlciByZWdpc3RlcnMganVzdCB0byBtYWtlCi0JICogIHRoaW5ncyBtb3JlIGRldGVybWluaXN0aWMsIGFsYSB0aGUgaTM4NiBpbXBsZW1lbnRhdGlvbi4KLQkgKi8KLQlyZWdzLT5yOCA9IDA7CS8qICVlYXggKi8KLQlyZWdzLT5yMTEgPSAwOwkvKiAlZWJ4ICovCi0JcmVncy0+cjkgPSAwOwkvKiAlZWN4ICovCi0JcmVncy0+cjEwID0gMDsJLyogJWVkeCAqLwotCXJlZ3MtPnIxMyA9IDA7CS8qICVlYnAgKi8KLQlyZWdzLT5yMTQgPSAwOwkvKiAlZXNpICovCi0JcmVncy0+cjE1ID0gMDsJLyogJWVkaSAqLwotCi0JY3VycmVudC0+dGhyZWFkLmVmbGFnID0gSUEzMl9FRkxBRzsKLQljdXJyZW50LT50aHJlYWQuZnNyID0gSUEzMl9GU1JfREVGQVVMVDsKLQljdXJyZW50LT50aHJlYWQuZmNyID0gSUEzMl9GQ1JfREVGQVVMVDsKLQljdXJyZW50LT50aHJlYWQuZmlyID0gMDsKLQljdXJyZW50LT50aHJlYWQuZmRyID0gMDsKLQotCS8qCi0JICogU2V0dXAgR0RURC4gIE5vdGU6IEdEVEQgaXMgdGhlIGRlc2NyYW1ibGVkIHZlcnNpb24gb2YgdGhlIHBzZXVkby1kZXNjcmlwdG9yCi0JICogZm9ybWF0IGRlZmluZWQgYnkgRmlndXJlIDMtMTEgIlBzZXVkby1EZXNjcmlwdG9yIEZvcm1hdCIgaW4gdGhlIElBLTMyCi0JICogYXJjaGl0ZWN0dXJlIG1hbnVhbC4gQWxzbyBub3RlIHRoYXQgdGhlIG9ubHkgZmllbGRzIHRoYXQgYXJlIG5vdCBpZ25vcmVkIGFyZQotCSAqIGBiYXNlJywgYGxpbWl0JywgJ0cnLCBgUCcgKG11c3QgYmUgMSkgYW5kIGBTJyAobXVzdCBiZSAwKS4KLQkgKi8KLQlyZWdzLT5yMzEgPSBJQTMyX1NFR19VTlNDUkFNQkxFKElBMzJfU0VHX0RFU0NSSVBUT1IoSUEzMl9HRFRfT0ZGU0VULCBJQTMyX1BBR0VfU0laRSAtIDEsCi0JCQkJCQkJICAgIDAsIDAsIDAsIDEsIDAsIDAsIDApKTsKLQkvKiBTZXR1cCB0aGUgc2VnbWVudCBzZWxlY3RvcnMgKi8KLQlyZWdzLT5yMTYgPSAoX19VU0VSX0RTIDw8IDE2KSB8IF9fVVNFUl9EUzsgLyogRVMgPT0gRFMsIEdTLCBGUyBhcmUgemVybyAqLwotCXJlZ3MtPnIxNyA9IChfX1VTRVJfRFMgPDwgMTYpIHwgX19VU0VSX0NTOyAvKiBTUywgQ1M7IGlhMzJfbG9hZF9zdGF0ZSgpIHNldHMgVFNTIGFuZCBMRFQgKi8KLQotCWlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzKGN1cnJlbnQpOwotCWlhMzJfbG9hZF9zdGF0ZShjdXJyZW50KTsKLX0KLQotLyoKLSAqIFVuZG8gdGhlIG92ZXJyaWRlIG9mIHNldHVwX2FyZ19wYWdlcygpIHdpdGhvdXQgdGhpcyBpYTMyX3NldHVwX2FyZ19wYWdlcygpCi0gKiB3aWxsIHN1ZmZlciBpbmZpbml0ZSBzZWxmIHJlY3Vyc2lvbi4KLSAqLwotI3VuZGVmIHNldHVwX2FyZ19wYWdlcwotCi1pbnQKLWlhMzJfc2V0dXBfYXJnX3BhZ2VzIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgZXhlY3V0YWJsZV9zdGFjaykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2V0dXBfYXJnX3BhZ2VzKGJwcm0sIElBMzJfU1RBQ0tfVE9QLCBleGVjdXRhYmxlX3N0YWNrKTsKLQlpZiAoIXJldCkgewotCQkvKgotCQkgKiBDYW4ndCBkbyBpdCBpbiBpYTY0X2VsZjMyX2luaXQoKS4gTmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUKLQkJICogY2FsbHMgdG8gZWxmMzJfbWFwKCkKLQkJICovCi0JCWN1cnJlbnQtPnRocmVhZC5wcGwgPSBpYTMyX2luaXRfcHBfbGlzdCgpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1lbGYzMl9zZXRfcGVyc29uYWxpdHkgKHZvaWQpCi17Ci0Jc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWDMyKTsKLQljdXJyZW50LT50aHJlYWQubWFwX2Jhc2UgID0gSUEzMl9QQUdFX09GRlNFVC8zOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZWxmMzJfbWFwKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZWxmX3BoZHIgKmVwcG50LAotCQlpbnQgcHJvdCwgaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgdW51c2VkKQotewotCXVuc2lnbmVkIGxvbmcgcGdvZmYgPSAoZXBwbnQtPnBfdmFkZHIpICYgfklBMzJfUEFHRV9NQVNLOwotCi0JcmV0dXJuIGlhMzJfZG9fbW1hcChmaWxlcCwgKGFkZHIgJiBJQTMyX1BBR0VfTUFTSyksIGVwcG50LT5wX2ZpbGVzeiArIHBnb2ZmLCBwcm90LCB0eXBlLAotCQkJICAgIGVwcG50LT5wX29mZnNldCAtIHBnb2ZmKTsKLX0KLQotI2RlZmluZSBjcHVfdXNlc19pYTMyZWwoKQkobG9jYWxfY3B1X2RhdGEtPmZhbWlseSA+IDB4MWYpCi0KLXN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2VsZjMyX2JpbmZtdCh2b2lkKQotewotCWlmIChjcHVfdXNlc19pYTMyZWwoKSkgewotCQlwcmludGsoIlBsZWFzZSB1c2UgSUEtMzIgRUwgZm9yIGV4ZWN1dGluZyBJQS0zMiBiaW5hcmllc1xuIik7Ci0JCXVucmVnaXN0ZXJfYmluZm10KCZlbGZfZm9ybWF0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGNoZWNrX2VsZjMyX2JpbmZtdCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oIGIvYXJjaC9pYTY0L2lhMzIvZWxmY29yZTMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NzcyNTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvZWxmY29yZTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIElBLTMyIEVMRiBjb3JlIGR1bXAgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXJ1biBTaGFybWEgPGFydW4uc2hhcm1hQGludGVsLmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gdGhlIHg4Nl82NCB2ZXJzaW9uCi0gKi8KLSNpZm5kZWYgX0VMRkNPUkUzMl9IXwotI2RlZmluZSBfRUxGQ09SRTMyX0hfCi0KLSNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLS8qIE92ZXJyaWRlIGVsZmNvcmUuaCAqLwotI2RlZmluZSBfTElOVVhfRUxGQ09SRV9IIDEKLXR5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9ncmVnX3Q7Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IGVsZl9mcHJlZ3NldF90OwotdHlwZWRlZiBzdHJ1Y3QgaWEzMl91c2VyX2Z4c3Jfc3RydWN0IGVsZl9mcHhyZWdzZXRfdDsKLQotc3RydWN0IGVsZl9zaWdpbmZvCi17Ci0JaW50CXNpX3NpZ25vOwkJCS8qIHNpZ25hbCBudW1iZXIgKi8KLQlpbnQJc2lfY29kZTsJCQkvKiBleHRyYSBjb2RlICovCi0JaW50CXNpX2Vycm5vOwkJCS8qIGVycm5vICovCi19OwotCi0jaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKLS8qCi0gKiBIYWNrcyBhcmUgaGVyZSBzaW5jZSB0eXBlcyBiZXR3ZWVuIGNvbXBhdF90aW1ldmFsICg9IHBhaXIgb2YgczMyKSBhbmQKLSAqIGlhNjQtbmF0aXZlIHRpbWV2YWwgKD0gcGFpciBvZiBzNjQpIGFyZSBub3QgY29tcGF0aWJsZSwgYXQgbGVhc3QgYSBmaWxlCi0gKiBhcmNoL2lhNjQvaWEzMi8uLi8uLi8uLi9mcy9iaW5mbXRfZWxmLmMgd2lsbCBnZXQgd2FybmluZ3MgZnJvbSBjb21waWxlciBvbgotICogdXNlIG9mIGNwdXRpbWVfdG9fdGltZXZhbCgpLCB3aGljaCB1c3VhbGx5IGFuIGFsaWFzIG9mIGppZmZpZXNfdG9fdGltZXZhbCgpLgotICovCi0jZGVmaW5lIGNwdXRpbWVfdG9fdGltZXZhbChhLGIpIFwKLQlkbyB7IChiKS0+dHZfdXNlYyA9IDA7IChiKS0+dHZfc2VjID0gKGEpL05TRUNfUEVSX1NFQzsgfSB3aGlsZSgwKQotI2Vsc2UKLSNkZWZpbmUgamlmZmllc190b190aW1ldmFsKGEsYikgXAotCWRvIHsgKGIpLT50dl91c2VjID0gMDsgKGIpLT50dl9zZWMgPSAoYSkvSFo7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi1zdHJ1Y3QgZWxmX3Byc3RhdHVzCi17Ci0Jc3RydWN0IGVsZl9zaWdpbmZvIHByX2luZm87CS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIHNpZ25hbCAqLwotCXNob3J0CXByX2N1cnNpZzsJCS8qIEN1cnJlbnQgc2lnbmFsICovCi0JdW5zaWduZWQgaW50IHByX3NpZ3BlbmQ7CS8qIFNldCBvZiBwZW5kaW5nIHNpZ25hbHMgKi8KLQl1bnNpZ25lZCBpbnQgcHJfc2lnaG9sZDsJLyogU2V0IG9mIGhlbGQgc2lnbmFscyAqLwotCXBpZF90CXByX3BpZDsKLQlwaWRfdAlwcl9wcGlkOwotCXBpZF90CXByX3BncnA7Ci0JcGlkX3QJcHJfc2lkOwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl91dGltZTsJLyogVXNlciB0aW1lICovCi0Jc3RydWN0IGNvbXBhdF90aW1ldmFsIHByX3N0aW1lOwkvKiBTeXN0ZW0gdGltZSAqLwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl9jdXRpbWU7CS8qIEN1bXVsYXRpdmUgdXNlciB0aW1lICovCi0Jc3RydWN0IGNvbXBhdF90aW1ldmFsIHByX2NzdGltZTsJLyogQ3VtdWxhdGl2ZSBzeXN0ZW0gdGltZSAqLwotCWVsZl9ncmVnc2V0X3QgcHJfcmVnOwkvKiBHUCByZWdpc3RlcnMgKi8KLQlpbnQgcHJfZnB2YWxpZDsJCS8qIFRydWUgaWYgbWF0aCBjby1wcm9jZXNzb3IgYmVpbmcgdXNlZC4gICovCi19OwotCi0jZGVmaW5lIEVMRl9QUkFSR1NaCSg4MCkJLyogTnVtYmVyIG9mIGNoYXJzIGZvciBhcmdzICovCi0KLXN0cnVjdCBlbGZfcHJwc2luZm8KLXsKLQljaGFyCXByX3N0YXRlOwkvKiBudW1lcmljIHByb2Nlc3Mgc3RhdGUgKi8KLQljaGFyCXByX3NuYW1lOwkvKiBjaGFyIGZvciBwcl9zdGF0ZSAqLwotCWNoYXIJcHJfem9tYjsJLyogem9tYmllICovCi0JY2hhcglwcl9uaWNlOwkvKiBuaWNlIHZhbCAqLwotCXVuc2lnbmVkIGludCBwcl9mbGFnOwkvKiBmbGFncyAqLwotCV9fdTE2CXByX3VpZDsKLQlfX3UxNglwcl9naWQ7Ci0JcGlkX3QJcHJfcGlkLCBwcl9wcGlkLCBwcl9wZ3JwLCBwcl9zaWQ7Ci0JLyogTG90cyBtaXNzaW5nICovCi0JY2hhcglwcl9mbmFtZVsxNl07CS8qIGZpbGVuYW1lIG9mIGV4ZWN1dGFibGUgKi8KLQljaGFyCXByX3BzYXJnc1tFTEZfUFJBUkdTWl07CS8qIGluaXRpYWwgcGFydCBvZiBhcmcgbGlzdCAqLwotfTsKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSAgICAgICAJCVwKLQlwcl9yZWdbMF0gPSByZWdzLT5yMTE7CQkJCVwKLQlwcl9yZWdbMV0gPSByZWdzLT5yOTsJCQkJXAotCXByX3JlZ1syXSA9IHJlZ3MtPnIxMDsJCQkJXAotCXByX3JlZ1szXSA9IHJlZ3MtPnIxNDsJCQkJXAotCXByX3JlZ1s0XSA9IHJlZ3MtPnIxNTsJCQkJXAotCXByX3JlZ1s1XSA9IHJlZ3MtPnIxMzsJCQkJXAotCXByX3JlZ1s2XSA9IHJlZ3MtPnI4OwkJCQlcCi0JcHJfcmVnWzddID0gcmVncy0+cjE2ICYgMHhmZmZmOwkJCVwKLQlwcl9yZWdbOF0gPSAocmVncy0+cjE2ID4+IDE2KSAmIDB4ZmZmZjsJCVwKLQlwcl9yZWdbOV0gPSAocmVncy0+cjE2ID4+IDMyKSAmIDB4ZmZmZjsJCVwKLQlwcl9yZWdbMTBdID0gKHJlZ3MtPnIxNiA+PiA0OCkgJiAweGZmZmY7CVwKLQlwcl9yZWdbMTFdID0gcmVncy0+cjE7IAkJCQlcCi0JcHJfcmVnWzEyXSA9IHJlZ3MtPmNyX2lpcDsJCQlcCi0JcHJfcmVnWzEzXSA9IHJlZ3MtPnIxNyAmIDB4ZmZmZjsJCVwKLQlwcl9yZWdbMTRdID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0VGTEFHKTsJXAotCXByX3JlZ1sxNV0gPSByZWdzLT5yMTI7CQkJCVwKLQlwcl9yZWdbMTZdID0gKHJlZ3MtPnIxNyA+PiAxNikgJiAweGZmZmY7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbGZfY29yZV9jb3B5X3JlZ3MoZWxmX2dyZWdzZXRfdCAqZWxmcmVncywKLQkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlFTEZfQ09SRV9DT1BZX1JFR1MoKCplbGZyZWdzKSwgcmVncykKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LAotCQkJCQkgIGVsZl9ncmVnc2V0X3QqIGVsZnJlZ3MpCi17Ci0JRUxGX0NPUkVfQ09QWV9SRUdTKCgqZWxmcmVncyksIHRhc2tfcHRfcmVncyh0KSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1lbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgZWxmX2ZwcmVnc2V0X3QgKmZwdSkKLXsKLQlzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0ICpmcHN0YXRlID0gKHZvaWQqKWZwdTsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCi0JaWYgKCF0c2tfdXNlZF9tYXRoKHRzaykpCi0JCXJldHVybiAwOwotCQotCW9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyhLRVJORUxfRFMpOwotCXNhdmVfaWEzMl9mcHN0YXRlKHRzaywgKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QgX191c2VyICopIGZwc3RhdGUpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9YRlBSRUdTIDEKLSNkZWZpbmUgRUxGX0NPUkVfWEZQUkVHX1RZUEUgTlRfUFJYRlBSRUcKLXN0YXRpYyBpbmxpbmUgaW50Ci1lbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZWxmX2ZweHJlZ3NldF90ICp4ZnB1KQotewotCXN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgKmZweHN0YXRlID0gKHZvaWQqKSB4ZnB1OwotCW1tX3NlZ21lbnRfdCBvbGRfZnM7Ci0KLQlpZiAoIXRza191c2VkX21hdGgodHNrKSkKLQkJcmV0dXJuIDA7Ci0KLQlvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlzYXZlX2lhMzJfZnB4c3RhdGUodHNrLCAoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKikgZnB4c3RhdGUpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLSNlbmRpZiAvKiBfRUxGQ09SRTMyX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZDc0NzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyAvZGV2L251bGwKQEAgLTEsNDY4ICswLDAgQEAKLSNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KLSNpbmNsdWRlIDxhc20vaWEzMi5oPgotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLQotI2luY2x1ZGUgIi4uL2tlcm5lbC9taW5zdGF0ZS5oIgotCi0JLyoKLQkgKiBleGVjdmUoKSBpcyBzcGVjaWFsIGJlY2F1c2UgaW4gY2FzZSBvZiBzdWNjZXNzLCB3ZSBuZWVkIHRvCi0JICogc2V0dXAgYSBudWxsIHJlZ2lzdGVyIHdpbmRvdyBmcmFtZSAoaW4gY2FzZSBhbiBJQS0zMiBwcm9jZXNzCi0JICogaXMgZXhlYydpbmcgYW4gSUEtNjQgcHJvZ3JhbSkuCi0JICovCi1FTlRSWShpYTMyX2V4ZWN2ZSkKLQkucHJvbG9ndWUgQVNNX1VOV19QUkxHX1JQfEFTTV9VTldfUFJMR19QRlMsIEFTTV9VTldfUFJMR19HUlNBVkUoMykKLQlhbGxvYyBsb2MxPWFyLnBmcywzLDIsNCwwCi0JbW92IGxvYzA9cnAKLQkuYm9keQotCXp4dDQgb3V0MD1pbjAJCQkvLyBmaWxlbmFtZQotCTs7CQkJCS8vIHN0b3AgYml0IGJldHdlZW4gYWxsb2MgYW5kIGNhbGwKLQl6eHQ0IG91dDE9aW4xCQkJLy8gYXJndgotCXp4dDQgb3V0Mj1pbjIJCQkvLyBlbnZwCi0JYWRkIG91dDM9MTYsc3AJCQkvLyByZWdzCi0JYnIuY2FsbC5zcHRrLmZldyBycD1zeXMzMl9leGVjdmUKLTE6CWNtcC5nZSBwNixwMD1yOCxyMAotCW1vdiBhci5wZnM9bG9jMQkJCS8vIHJlc3RvcmUgYXIucGZzCi0JOzsKLShwNikJbW92IGFyLnBmcz1yMAkJCS8vIGNsZWFyIGFyLnBmcyBpbiBjYXNlIG9mIHN1Y2Nlc3MKLQlzeHQ0IHI4PXI4CQkJLy8gcmV0dXJuIDY0LWJpdCByZXN1bHQKLQltb3YgcnA9bG9jMAotCWJyLnJldC5zcHRrLmZldyBycAotRU5EKGlhMzJfZXhlY3ZlKQotCi1FTlRSWShpYTMyX2Nsb25lKQotCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSg1KQotCWFsbG9jIHIxNj1hci5wZnMsNSwyLDYsMAotCURPX1NBVkVfU1dJVENIX1NUQUNLCi0JbW92IGxvYzA9cnAKLQltb3YgbG9jMT1yMTYJCQkJLy8gc2F2ZSBhci5wZnMgYWNyb3NzIGRvX2ZvcmsKLQkuYm9keQotCXp4dDQgb3V0MT1pbjEJCQkJLy8gbmV3c3AKLQltb3Ygb3V0Mz0xNgkJCQkvLyBzdGFja3NpemUgKGNvbXBlbnNhdGVzIGZvciAxNi1ieXRlIHNjcmF0Y2ggYXJlYSkKLQlhZGRzIG91dDI9SUE2NF9TV0lUQ0hfU1RBQ0tfU0laRSsxNixzcAkvLyBvdXQyID0gJnJlZ3MKLQltb3Ygb3V0MD1pbjAJCQkJLy8gb3V0MCA9IGNsb25lX2ZsYWdzCi0Jenh0NCBvdXQ0PWluMgkJCQkvLyBvdXQ0ID0gcGFyZW50X3RpZHB0cgotCXp4dDQgb3V0NT1pbjQJCQkJLy8gb3V0NSA9IGNoaWxkX3RpZHB0cgotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWRvX2ZvcmsKLS5yZXQwOgkucmVzdG9yZSBzcAotCWFkZHMgc3A9SUE2NF9TV0lUQ0hfU1RBQ0tfU0laRSxzcAkvLyBwb3AgdGhlIHN3aXRjaCBzdGFjawotCW1vdiBhci5wZnM9bG9jMQotCW1vdiBycD1sb2MwCi0JYnIucmV0LnNwdGsubWFueSBycAotRU5EKGlhMzJfY2xvbmUpCi0KLUdMT0JBTF9FTlRSWShpYTMyX3JldF9mcm9tX2Nsb25lKQotCVBUX1JFR1NfVU5XSU5EX0lORk8oMCkKLXsJLyoKLQkgKiBTb21lIHZlcnNpb25zIG9mIGdhcyBnZW5lcmF0ZSBiYWQgdW53aW5kIGluZm8gaWYgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIGEKLQkgKiBwcm9jZWR1cmUgZG9lc24ndCBnbyBpbnRvIHRoZSBmaXJzdCBzbG90IG9mIGEgYnVuZGxlLiAgVGhpcyBpcyBhIHdvcmthcm91bmQuCi0JICovCi0Jbm9wLm0gMAotCW5vcC5pIDAKLQkvKgotCSAqIFdlIG5lZWQgdG8gY2FsbCBzY2hlZHVsZV90YWlsKCkgdG8gY29tcGxldGUgdGhlIHNjaGVkdWxpbmcgcHJvY2Vzcy4KLQkgKiBDYWxsZWQgYnkgaWE2NF9zd2l0Y2hfdG8gYWZ0ZXIgZG9fZm9yaygpLT5jb3B5X3RocmVhZCgpLiAgcjggY29udGFpbnMgdGhlCi0JICogYWRkcmVzcyBvZiB0aGUgcHJldmlvdXNseSBleGVjdXRpbmcgdGFzay4KLQkgKi8KLQlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X2ludm9rZV9zY2hlZHVsZV90YWlsCi19Ci0ucmV0MToKLQlhZGRzIHIyPVRJX0ZMQUdTK0lBNjRfVEFTS19TSVpFLHIxMwotCTs7Ci0JbGQ0IHIyPVtyMl0KLQk7OwotCW1vdiByOD0wCi0JYW5kIHIyPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIyCi0JOzsKLQljbXAubmUgcDYscDA9cjIscjAKLShwNikJYnIuY29uZC5zcG50IC5pYTMyX3N0cmFjZV9jaGVja19yZXR2YWwKLQk7OwkJCQkJLy8gcHJldmVudCBSQVcgb24gcjgKLUVORChpYTMyX3JldF9mcm9tX2Nsb25lKQotCS8vIGZhbGwgdGhyb3VnaAotR0xPQkFMX0VOVFJZKGlhMzJfcmV0X2Zyb21fc3lzY2FsbCkKLQlQVF9SRUdTX1VOV0lORF9JTkZPKDApCi0KLQljbXAuZ2UgcDYscDc9cjgscjAgICAgICAgICAgICAgICAgICAgICAgLy8gc3lzY2FsbCBleGVjdXRlZCBzdWNjZXNzZnVsbHk/Ci0JYWRkcyByMj1JQTY0X1BUX1JFR1NfUjhfT0ZGU0VUKzE2LHNwICAgIC8vIHIyID0gJnB0X3JlZ3MucjgKLQk7OwotCWFsbG9jIHIzPWFyLnBmcywwLDAsMCwwCQkJLy8gZHJvcCB0aGUgc3lzY2FsbCBhcmd1bWVudCBmcmFtZQotCXN0OCBbcjJdPXI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSByZXR1cm4gdmFsdWUgaW4gc2xvdCBmb3IgcjgKLQlici5jb25kLnNwdGsubWFueSBpYTY0X2xlYXZlX2tlcm5lbAotRU5EKGlhMzJfcmV0X2Zyb21fc3lzY2FsbCkKLQotCS8vCi0JLy8gSW52b2tlIGEgc3lzdGVtIGNhbGwsIGJ1dCBkbyBzb21lIHRyYWNpbmcgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2FsbC4KLQkvLyBXZSBNVVNUIHByZXNlcnZlIHRoZSBjdXJyZW50IHJlZ2lzdGVyIGZyYW1lIHRocm91Z2hvdXQgdGhpcyByb3V0aW5lCi0JLy8gYmVjYXVzZSBzb21lIHN5c3RlbSBjYWxscyAoc3VjaCBhcyBpYTY0X2V4ZWN2ZSkgZGlyZWN0bHkKLQkvLyBtYW5pcHVsYXRlIGFyLnBmcy4KLQkvLwotCS8vIElucHV0OgotCS8vCXI4ID0gc3lzY2FsbCBudW1iZXIKLQkvLwliNiA9IHN5c2NhbGwgZW50cnkgcG9pbnQKLQkvLwotR0xPQkFMX0VOVFJZKGlhMzJfdHJhY2Vfc3lzY2FsbCkKLQlQVF9SRUdTX1VOV0lORF9JTkZPKDApCi0JbW92IHIzPS0zOAotCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCsxNixzcAotCTs7Ci0Jc3Q4IFtyMl09cjMJCQkJLy8gaW5pdGlhbGl6ZSByZXR1cm4gY29kZSB0byAtRU5PU1lTCi0JYnIuY2FsbC5zcHRrLmZldyBycD1zeXNjYWxsX3RyYWNlX2VudGVyCS8vIGdpdmUgcGFyZW50IGEgY2hhbmNlIHRvIGNhdGNoIHN5c2NhbGwgYXJncwotCWNtcC5sdCBwNixwMD1yOCxyMAkJCS8vIGNoZWNrIHRyYWNlaG9vawotCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCsxNixzcAkvLyByMiA9ICZwdF9yZWdzLnI4Ci0JOzsKLShwNikJc3Q4LnNwaWxsIFtyMl09cjgJCQkvLyBzdG9yZSByZXR1cm4gdmFsdWUgaW4gc2xvdCBmb3IgcjgKLShwNikJYnIuc3BudC5mZXcgLnJldDQKLS5yZXQyOgkvLyBOZWVkIHRvIHJlbG9hZCBhcmd1bWVudHMgKHRoZXkgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIHRyYWNpbmcgcHJvY2VzcykKLQlhZGRzIHIyPUlBNjRfUFRfUkVHU19SMV9PRkZTRVQrMTYsc3AJLy8gcjIgPSAmcHRfcmVncy5yMQotCWFkZHMgcjM9SUE2NF9QVF9SRUdTX1IxM19PRkZTRVQrMTYsc3AJLy8gcjMgPSAmcHRfcmVncy5yMTMKLQltb3YgcjE1PUlBMzJfTlJfc3lzY2FsbHMKLQk7OwotCWxkNCByOD1bcjJdLElBNjRfUFRfUkVHU19SOV9PRkZTRVQtSUE2NF9QVF9SRUdTX1IxX09GRlNFVAotCW1vdmwgcjE2PWlhMzJfc3lzY2FsbF90YWJsZQotCTs7Ci0JbGQ0IHIzMz1bcjJdLDgJCQkJLy8gcjkgPT0gZWN4Ci0JbGQ0IHIzNz1bcjNdLDE2CQkJCS8vIHIxMyA9PSBlYnAKLQljbXAubHR1LnVuYyBwNixwNz1yOCxyMTUKLQk7OwotCWxkNCByMzQ9W3IyXSw4CQkJCS8vIHIxMCA9PSBlZHgKLQlsZDQgcjM2PVtyM10sOAkJCQkvLyByMTUgPT0gZWRpCi0ocDYpCXNobGFkZCByMTY9cjgsMyxyMTYJLy8gZm9yY2Ugbmlfc3lzY2FsbCBpZiBub3QgdmFsaWQgc3lzY2FsbCBudW1iZXIKLQk7OwotCWxkOCByMTY9W3IxNl0KLQk7OwotCWxkNCByMzI9W3IyXSw4CQkJCS8vIHIxMSA9PSBlYngKLQltb3YgYjY9cjE2Ci0JbGQ0IHIzNT1bcjNdLDgJCQkJLy8gcjE0ID09IGVzaQotCWJyLmNhbGwuc3B0ay5mZXcgcnA9YjYJCQkvLyBkbyB0aGUgc3lzY2FsbAotLmlhMzJfc3RyYWNlX2NoZWNrX3JldHZhbDoKLQljbXAubHQgcDYscDA9cjgscjAJCQkvLyBzeXNjYWxsIGZhaWxlZD8KLQlhZGRzIHIyPUlBNjRfUFRfUkVHU19SOF9PRkZTRVQrMTYsc3AJLy8gcjIgPSAmcHRfcmVncy5yOAotCTs7Ci0Jc3Q4LnNwaWxsIFtyMl09cjgJCQkvLyBzdG9yZSByZXR1cm4gdmFsdWUgaW4gc2xvdCBmb3IgcjgKLQlici5jYWxsLnNwdGsuZmV3IHJwPXN5c2NhbGxfdHJhY2VfbGVhdmUJLy8gZ2l2ZSBwYXJlbnQgYSBjaGFuY2UgdG8gY2F0Y2ggcmV0dXJuIHZhbHVlCi0ucmV0NDoJYWxsb2MgcjI9YXIucGZzLDAsMCwwLDAJCQkvLyBkcm9wIHRoZSBzeXNjYWxsIGFyZ3VtZW50IGZyYW1lCi0JYnIuY29uZC5zcHRrLm1hbnkgaWE2NF9sZWF2ZV9rZXJuZWwKLUVORChpYTMyX3RyYWNlX3N5c2NhbGwpCi0KLUdMT0JBTF9FTlRSWShzeXMzMl92Zm9yaykKLQlhbGxvYyByMTY9YXIucGZzLDIsMiw0LDA7OwotCW1vdiBvdXQwPUlBNjRfQ0xPTkVfVkZPUkt8SUE2NF9DTE9ORV9WTXxTSUdDSExECS8vIG91dDAgPSBjbG9uZV9mbGFncwotCWJyLmNvbmQuc3B0ay5mZXcgLmZvcmsxCQkJLy8gZG8gdGhlIHdvcmsKLUVORChzeXMzMl92Zm9yaykKLQotR0xPQkFMX0VOVFJZKHN5czMyX2ZvcmspCi0JLnByb2xvZ3VlIEFTTV9VTldfUFJMR19SUHxBU01fVU5XX1BSTEdfUEZTLCBBU01fVU5XX1BSTEdfR1JTQVZFKDIpCi0JYWxsb2MgcjE2PWFyLnBmcywyLDIsNCwwCi0JbW92IG91dDA9U0lHQ0hMRAkJCS8vIG91dDAgPSBjbG9uZV9mbGFncwotCTs7Ci0uZm9yazE6Ci0JbW92IGxvYzA9cnAKLQltb3YgbG9jMT1yMTYJCQkJLy8gc2F2ZSBhci5wZnMgYWNyb3NzIGRvX2ZvcmsKLQlET19TQVZFX1NXSVRDSF9TVEFDSwotCi0JLmJvZHkKLQotCW1vdiBvdXQxPTAKLQltb3Ygb3V0Mz0wCi0JYWRkcyBvdXQyPUlBNjRfU1dJVENIX1NUQUNLX1NJWkUrMTYsc3AJLy8gb3V0MiA9ICZyZWdzCi0JYnIuY2FsbC5zcHRrLmZldyBycD1kb19mb3JrCi0ucmV0NToJLnJlc3RvcmUgc3AKLQlhZGRzIHNwPUlBNjRfU1dJVENIX1NUQUNLX1NJWkUsc3AJLy8gcG9wIHRoZSBzd2l0Y2ggc3RhY2sKLQltb3YgYXIucGZzPWxvYzEKLQltb3YgcnA9bG9jMAotCWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChzeXMzMl9mb3JrKQotCi0JLnJvZGF0YQotCS5hbGlnbiA4Ci0JLmdsb2JsIGlhMzJfc3lzY2FsbF90YWJsZQotaWEzMl9zeXNjYWxsX3RhYmxlOgotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogMAktICBvbGQgInNldHVwKCIgc3lzdGVtIGNhbGwqLwotCWRhdGE4IHN5c19leGl0Ci0JZGF0YTggc3lzMzJfZm9yawotCWRhdGE4IHN5c19yZWFkCi0JZGF0YTggc3lzX3dyaXRlCi0JZGF0YTggY29tcGF0X3N5c19vcGVuCSAgLyogNSAqLwotCWRhdGE4IHN5c19jbG9zZQotCWRhdGE4IHN5czMyX3dhaXRwaWQKLQlkYXRhOCBzeXNfY3JlYXQKLQlkYXRhOCBzeXNfbGluawotCWRhdGE4IHN5c191bmxpbmsJICAvKiAxMCAqLwotCWRhdGE4IGlhMzJfZXhlY3ZlCi0JZGF0YTggc3lzX2NoZGlyCi0JZGF0YTggY29tcGF0X3N5c190aW1lCi0JZGF0YTggc3lzX21rbm9kCi0JZGF0YTggc3lzX2NobW9kCQkgIC8qIDE1ICovCi0JZGF0YTggc3lzX2xjaG93bgkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXMzMl9sc2VlawotCWRhdGE4IHN5c19nZXRwaWQJICAvKiAyMCAqLwotCWRhdGE4IGNvbXBhdF9zeXNfbW91bnQKLQlkYXRhOCBzeXNfb2xkdW1vdW50Ci0JZGF0YTggc3lzX3NldHVpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5c19nZXR1aWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBjb21wYXRfc3lzX3N0aW1lICAgIC8qIDI1ICovCi0JZGF0YTggY29tcGF0X3N5c19wdHJhY2UKLQlkYXRhOCBzeXMzMl9hbGFybQotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzX3BhdXNlCi0JZGF0YTggY29tcGF0X3N5c191dGltZQkgIC8qIDMwICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgc3R0eSBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBzeXNfYWNjZXNzCi0JZGF0YTggc3lzX25pY2UKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIDM1ICovCSAgLyogb2xkIGZ0aW1lIHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggc3lzX3N5bmMKLQlkYXRhOCBzeXNfa2lsbAotCWRhdGE4IHN5c19yZW5hbWUKLQlkYXRhOCBzeXNfbWtkaXIKLQlkYXRhOCBzeXNfcm1kaXIJCSAgLyogNDAgKi8KLQlkYXRhOCBzeXNfZHVwCi0JZGF0YTggc3lzX2lhNjRfcGlwZQotCWRhdGE4IGNvbXBhdF9zeXNfdGltZXMKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggc3lzMzJfYnJrCQkgIC8qIDQ1ICovCi0JZGF0YTggc3lzX3NldGdpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5c19nZXRnaWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXMzMl9zaWduYWwKLQlkYXRhOCBzeXNfZ2V0ZXVpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5c19nZXRlZ2lkCS8qIDE2LWJpdCB2ZXJzaW9uICovCSAgLyogNTAgKi8KLQlkYXRhOCBzeXNfYWNjdAotCWRhdGE4IHN5c191bW91bnQJICAvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgbG9jayBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IGNvbXBhdF9zeXNfaW9jdGwKLQlkYXRhOCBjb21wYXRfc3lzX2ZjbnRsCSAgLyogNTUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBzeXNfc2V0cGdpZAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzX3VtYXNrCQkgIC8qIDYwICovCi0JZGF0YTggc3lzX2Nocm9vdAotCWRhdGE4IGNvbXBhdF9zeXNfdXN0YXQKLQlkYXRhOCBzeXNfZHVwMgotCWRhdGE4IHN5c19nZXRwcGlkCi0JZGF0YTggc3lzX2dldHBncnAJICAvKiA2NSAqLwotCWRhdGE4IHN5c19zZXRzaWQKLQlkYXRhOCBzeXMzMl9zaWdhY3Rpb24KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzX3NldHJldWlkCS8qIDE2LWJpdCB2ZXJzaW9uICovCSAgLyogNzAgKi8KLQlkYXRhOCBzeXNfc2V0cmVnaWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXMzMl9zaWdzdXNwZW5kCi0JZGF0YTggY29tcGF0X3N5c19zaWdwZW5kaW5nCi0JZGF0YTggc3lzX3NldGhvc3RuYW1lCi0JZGF0YTggY29tcGF0X3N5c19zZXRybGltaXQJICAvKiA3NSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdAotCWRhdGE4IGNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JZGF0YTggY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKLQlkYXRhOCBjb21wYXRfc3lzX3NldHRpbWVvZmRheQotCWRhdGE4IHN5czMyX2dldGdyb3VwczE2CSAgLyogODAgKi8KLQlkYXRhOCBzeXMzMl9zZXRncm91cHMxNgotCWRhdGE4IHN5czMyX29sZF9zZWxlY3QKLQlkYXRhOCBzeXNfc3ltbGluawotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzX3JlYWRsaW5rCSAgLyogODUgKi8KLQlkYXRhOCBzeXNfdXNlbGliCi0JZGF0YTggc3lzX3N3YXBvbgotCWRhdGE4IHN5c19yZWJvb3QKLQlkYXRhOCBjb21wYXRfc3lzX29sZF9yZWFkZGlyCi0JZGF0YTggc3lzMzJfbW1hcAkgIC8qIDkwICovCi0JZGF0YTggc3lzMzJfbXVubWFwCi0JZGF0YTggc3lzX3RydW5jYXRlCi0JZGF0YTggc3lzX2Z0cnVuY2F0ZQotCWRhdGE4IHN5c19mY2htb2QKLQlkYXRhOCBzeXNfZmNob3duCS8qIDE2LWJpdCB2ZXJzaW9uICovCSAgLyogOTUgKi8KLQlkYXRhOCBzeXNfZ2V0cHJpb3JpdHkKLQlkYXRhOCBzeXNfc2V0cHJpb3JpdHkKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBjb21wYXRfc3lzX3N0YXRmcwotCWRhdGE4IGNvbXBhdF9zeXNfZnN0YXRmcwkgIC8qIDEwMCAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIGlvcGVybSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfc29ja2V0Y2FsbAotCWRhdGE4IHN5c19zeXNsb2cKLQlkYXRhOCBjb21wYXRfc3lzX3NldGl0aW1lcgotCWRhdGE4IGNvbXBhdF9zeXNfZ2V0aXRpbWVyCSAgLyogMTA1ICovCi0JZGF0YTggY29tcGF0X3N5c19uZXdzdGF0Ci0JZGF0YTggY29tcGF0X3N5c19uZXdsc3RhdAotCWRhdGE4IGNvbXBhdF9zeXNfbmV3ZnN0YXQKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIGlvcGwgKi8JLyogMTEwICovCi0JZGF0YTggc3lzX3ZoYW5ndXAKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJLyogdXNlZCB0byBiZSBzeXNfaWRsZSAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggY29tcGF0X3N5c193YWl0NAotCWRhdGE4IHN5c19zd2Fwb2ZmCSAgLyogMTE1ICovCi0JZGF0YTggY29tcGF0X3N5c19zeXNpbmZvCi0JZGF0YTggc3lzMzJfaXBjCi0JZGF0YTggc3lzX2ZzeW5jCi0JZGF0YTggc3lzMzJfc2lncmV0dXJuCi0JZGF0YTggaWEzMl9jbG9uZQkgIC8qIDEyMCAqLwotCWRhdGE4IHN5c19zZXRkb21haW5uYW1lCi0JZGF0YTggc3lzMzJfbmV3dW5hbWUKLQlkYXRhOCBzeXMzMl9tb2RpZnlfbGR0Ci0JZGF0YTggY29tcGF0X3N5c19hZGp0aW1leAotCWRhdGE4IHN5czMyX21wcm90ZWN0CSAgLyogMTI1ICovCi0JZGF0YTggY29tcGF0X3N5c19zaWdwcm9jbWFzawotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIGNyZWF0ZV9tb2R1bGUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBpbml0X21vZHVsZSAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIGRlbGV0ZV9tb2R1bGUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBnZXRfa2VybmVsX3N5bXMgKi8gIC8qIDEzMCAqLwotCWRhdGE4IHN5czMyX3F1b3RhY3RsCi0JZGF0YTggc3lzX2dldHBnaWQKLQlkYXRhOCBzeXNfZmNoZGlyCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogc3lzX2JkZmx1c2ggKi8KLQlkYXRhOCBzeXNfc3lzZnMJCS8qIDEzNSAqLwotCWRhdGE4IHN5czMyX3BlcnNvbmFsaXR5Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBmb3IgYWZzX3N5c2NhbGwgKi8KLQlkYXRhOCBzeXNfc2V0ZnN1aWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfc2V0ZnNnaWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfbGxzZWVrCSAgLyogMTQwICovCi0JZGF0YTggY29tcGF0X3N5c19nZXRkZW50cwotCWRhdGE4IGNvbXBhdF9zeXNfc2VsZWN0Ci0JZGF0YTggc3lzX2Zsb2NrCi0JZGF0YTggc3lzMzJfbXN5bmMKLQlkYXRhOCBjb21wYXRfc3lzX3JlYWR2CSAgLyogMTQ1ICovCi0JZGF0YTggY29tcGF0X3N5c193cml0ZXYKLQlkYXRhOCBzeXNfZ2V0c2lkCi0JZGF0YTggc3lzX2ZkYXRhc3luYwotCWRhdGE4IGNvbXBhdF9zeXNfc3lzY3RsCi0JZGF0YTggc3lzX21sb2NrCQkgIC8qIDE1MCAqLwotCWRhdGE4IHN5c19tdW5sb2NrCi0JZGF0YTggc3lzX21sb2NrYWxsCi0JZGF0YTggc3lzX211bmxvY2thbGwKLQlkYXRhOCBzeXNfc2NoZWRfc2V0cGFyYW0KLQlkYXRhOCBzeXNfc2NoZWRfZ2V0cGFyYW0gIC8qIDE1NSAqLwotCWRhdGE4IHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKLQlkYXRhOCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCi0JZGF0YTggc3lzX3NjaGVkX3lpZWxkCi0JZGF0YTggc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKLQlkYXRhOCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkgLyogMTYwICovCi0JZGF0YTggc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCi0JZGF0YTggY29tcGF0X3N5c19uYW5vc2xlZXAKLQlkYXRhOCBzeXMzMl9tcmVtYXAKLQlkYXRhOCBzeXNfc2V0cmVzdWlkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggc3lzMzJfZ2V0cmVzdWlkMTYJLyogMTYtYml0IHZlcnNpb24gKi8JICAvKiAxNjUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiB2bTg2ICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogc3lzX3F1ZXJ5X21vZHVsZSAqLwotCWRhdGE4IHN5c19wb2xsCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogbmZzc2VydmN0bCAqLwotCWRhdGE4IHN5c19zZXRyZXNnaWQJICAvKiAxNzAgKi8KLQlkYXRhOCBzeXMzMl9nZXRyZXNnaWQxNgotCWRhdGE4IHN5c19wcmN0bAotCWRhdGE4IHN5czMyX3J0X3NpZ3JldHVybgotCWRhdGE4IHN5czMyX3J0X3NpZ2FjdGlvbgotCWRhdGE4IHN5czMyX3J0X3NpZ3Byb2NtYXNrIC8qIDE3NSAqLwotCWRhdGE4IHN5c19ydF9zaWdwZW5kaW5nCi0JZGF0YTggY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXQKLQlkYXRhOCBzeXMzMl9ydF9zaWdxdWV1ZWluZm8KLQlkYXRhOCBjb21wYXRfc3lzX3J0X3NpZ3N1c3BlbmQKLQlkYXRhOCBzeXMzMl9wcmVhZAkgIC8qIDE4MCAqLwotCWRhdGE4IHN5czMyX3B3cml0ZQotCWRhdGE4IHN5c19jaG93bgkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5c19nZXRjd2QKLQlkYXRhOCBzeXNfY2FwZ2V0Ci0JZGF0YTggc3lzX2NhcHNldAkgIC8qIDE4NSAqLwotCWRhdGE4IHN5czMyX3NpZ2FsdHN0YWNrCi0JZGF0YTggc3lzMzJfc2VuZGZpbGUKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJICAvKiBzdHJlYW1zMSAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkgIC8qIHN0cmVhbXMyICovCi0JZGF0YTggc3lzMzJfdmZvcmsJICAvKiAxOTAgKi8KLQlkYXRhOCBjb21wYXRfc3lzX2dldHJsaW1pdAotCWRhdGE4IHN5czMyX21tYXAyCi0JZGF0YTggc3lzMzJfdHJ1bmNhdGU2NAotCWRhdGE4IHN5czMyX2Z0cnVuY2F0ZTY0Ci0JZGF0YTggc3lzMzJfc3RhdDY0CSAgLyogMTk1ICovCi0JZGF0YTggc3lzMzJfbHN0YXQ2NAotCWRhdGE4IHN5czMyX2ZzdGF0NjQKLQlkYXRhOCBzeXNfbGNob3duCi0JZGF0YTggc3lzX2dldHVpZAotCWRhdGE4IHN5c19nZXRnaWQJICAvKiAyMDAgKi8KLQlkYXRhOCBzeXNfZ2V0ZXVpZAotCWRhdGE4IHN5c19nZXRlZ2lkCi0JZGF0YTggc3lzX3NldHJldWlkCi0JZGF0YTggc3lzX3NldHJlZ2lkCi0JZGF0YTggc3lzX2dldGdyb3VwcwkgIC8qIDIwNSAqLwotCWRhdGE4IHN5c19zZXRncm91cHMKLQlkYXRhOCBzeXNfZmNob3duCi0JZGF0YTggc3lzX3NldHJlc3VpZAotCWRhdGE4IHN5c19nZXRyZXN1aWQKLQlkYXRhOCBzeXNfc2V0cmVzZ2lkCSAgLyogMjEwICovCi0JZGF0YTggc3lzX2dldHJlc2dpZAotCWRhdGE4IHN5c19jaG93bgotCWRhdGE4IHN5c19zZXR1aWQKLQlkYXRhOCBzeXNfc2V0Z2lkCi0JZGF0YTggc3lzX3NldGZzdWlkCSAgLyogMjE1ICovCi0JZGF0YTggc3lzX3NldGZzZ2lkCi0JZGF0YTggc3lzX3Bpdm90X3Jvb3QKLQlkYXRhOCBzeXNfbWluY29yZQotCWRhdGE4IHN5c19tYWR2aXNlCi0JZGF0YTggY29tcGF0X3N5c19nZXRkZW50czY0CSAgLyogMjIwICovCi0JZGF0YTggY29tcGF0X3N5c19mY250bDY0Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJCS8qIHJlc2VydmVkIGZvciBUVVggKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJLyogcmVzZXJ2ZWQgZm9yIFNlY3VyaXR5ICovCi0JZGF0YTggc3lzX2dldHRpZAotCWRhdGE4IHN5c19yZWFkYWhlYWQJICAvKiAyMjUgKi8KLSAJZGF0YTggc3lzX3NldHhhdHRyCi0gCWRhdGE4IHN5c19sc2V0eGF0dHIKLSAJZGF0YTggc3lzX2ZzZXR4YXR0cgotIAlkYXRhOCBzeXNfZ2V0eGF0dHIKLSAJZGF0YTggc3lzX2xnZXR4YXR0cgkvKiAyMzAgKi8KLSAJZGF0YTggc3lzX2ZnZXR4YXR0cgotIAlkYXRhOCBzeXNfbGlzdHhhdHRyCi0gCWRhdGE4IHN5c19sbGlzdHhhdHRyCi0gCWRhdGE4IHN5c19mbGlzdHhhdHRyCi0gCWRhdGE4IHN5c19yZW1vdmV4YXR0cgkvKiAyMzUgKi8KLSAJZGF0YTggc3lzX2xyZW1vdmV4YXR0cgotIAlkYXRhOCBzeXNfZnJlbW92ZXhhdHRyCi0JZGF0YTggc3lzX3RraWxsCi0gCWRhdGE4IHN5c19zZW5kZmlsZTY0Ci0JZGF0YTggY29tcGF0X3N5c19mdXRleAkvKiAyNDAgKi8KLQlkYXRhOCBjb21wYXRfc3lzX3NjaGVkX3NldGFmZmluaXR5Ci0JZGF0YTggY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eQotCWRhdGE4IHN5czMyX3NldF90aHJlYWRfYXJlYQotCWRhdGE4IHN5czMyX2dldF90aHJlYWRfYXJlYQotIAlkYXRhOCBjb21wYXRfc3lzX2lvX3NldHVwCS8qIDI0NSAqLwotIAlkYXRhOCBzeXNfaW9fZGVzdHJveQotIAlkYXRhOCBjb21wYXRfc3lzX2lvX2dldGV2ZW50cwotIAlkYXRhOCBjb21wYXRfc3lzX2lvX3N1Ym1pdAotIAlkYXRhOCBzeXNfaW9fY2FuY2VsCi0gCWRhdGE4IHN5c19mYWR2aXNlNjQJLyogMjUwICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXNfZXhpdF9ncm91cAotIAlkYXRhOCBzeXNfbG9va3VwX2Rjb29raWUKLQlkYXRhOCBzeXNfZXBvbGxfY3JlYXRlCi0JZGF0YTggc3lzMzJfZXBvbGxfY3RsCS8qIDI1NSAqLwotCWRhdGE4IHN5czMyX2Vwb2xsX3dhaXQKLQlkYXRhOCBzeXNfcmVtYXBfZmlsZV9wYWdlcwotCWRhdGE4IHN5c19zZXRfdGlkX2FkZHJlc3MKLSAJZGF0YTggY29tcGF0X3N5c190aW1lcl9jcmVhdGUKLSAJZGF0YTggY29tcGF0X3N5c190aW1lcl9zZXR0aW1lCS8qIDI2MCAqLwotIAlkYXRhOCBjb21wYXRfc3lzX3RpbWVyX2dldHRpbWUKLSAJZGF0YTggc3lzX3RpbWVyX2dldG92ZXJydW4KLSAJZGF0YTggc3lzX3RpbWVyX2RlbGV0ZQotIAlkYXRhOCBjb21wYXRfc3lzX2Nsb2NrX3NldHRpbWUKLSAJZGF0YTggY29tcGF0X3N5c19jbG9ja19nZXR0aW1lIC8qIDI2NSAqLwotIAlkYXRhOCBjb21wYXRfc3lzX2Nsb2NrX2dldHJlcwotIAlkYXRhOCBjb21wYXRfc3lzX2Nsb2NrX25hbm9zbGVlcAotCWRhdGE4IGNvbXBhdF9zeXNfc3RhdGZzNjQKLQlkYXRhOCBjb21wYXRfc3lzX2ZzdGF0ZnM2NAotIAlkYXRhOCBzeXNfdGdraWxsCS8qIDI3MCAqLwotIAlkYXRhOCBjb21wYXRfc3lzX3V0aW1lcwotIAlkYXRhOCBzeXMzMl9mYWR2aXNlNjRfNjQKLSAJZGF0YTggc3lzX25pX3N5c2NhbGwKLSAgCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0gCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIDI3NSAqLwotICAJZGF0YTggc3lzX25pX3N5c2NhbGwKLSAgCWRhdGE4IGNvbXBhdF9zeXNfbXFfb3BlbgotICAJZGF0YTggc3lzX21xX3VubGluawotICAJZGF0YTggY29tcGF0X3N5c19tcV90aW1lZHNlbmQKLSAgCWRhdGE4IGNvbXBhdF9zeXNfbXFfdGltZWRyZWNlaXZlCS8qIDI4MCAqLwotICAJZGF0YTggY29tcGF0X3N5c19tcV9ub3RpZnkKLSAgCWRhdGE4IGNvbXBhdF9zeXNfbXFfZ2V0c2V0YXR0cgotCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkvKiByZXNlcnZlZCBmb3Iga2V4ZWMgKi8KLQlkYXRhOCBjb21wYXRfc3lzX3dhaXRpZAotCi0JLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBJQTMyX05SX3N5c2NhbGxzCi0JLm9yZyBpYTMyX3N5c2NhbGxfdGFibGUgKyA4KklBMzJfTlJfc3lzY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2xkdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmQ1MWMxLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiBBZGFwdGVkIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9sZHQuYwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiaWEzMnByaXYuaCIKLQotLyoKLSAqIHJlYWRfbGR0KCkgaXMgbm90IHJlYWxseSBhdG9taWMgLSB0aGlzIGlzIG5vdCBhIHByb2JsZW0gc2luY2Ugc3luY2hyb25pemF0aW9uIG9mIHJlYWRzCi0gKiBhbmQgd3JpdGVzIGRvbmUgdG8gdGhlIExEVCBoYXMgdG8gYmUgYXNzdXJlZCBieSB1c2VyLXNwYWNlIGFueXdheS4gV3JpdGVzIGFyZSBhdG9taWMsCi0gKiB0byBwcm90ZWN0IHRoZSBzZWN1cml0eSBjaGVja3MgZG9uZSBvbiBuZXcgZGVzY3JpcHRvcnMuCi0gKi8KLXN0YXRpYyBpbnQKLXJlYWRfbGR0ICh2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzX2xlZnQsIG47Ci0JY2hhciBfX3VzZXIgKnNyYywgKmRzdDsKLQljaGFyIGJ1ZlsyNTZdOwkvKiB0ZW1wb3JhcnkgYnVmZmVyIChkb24ndCBvdmVyZmxvdyBrZXJuZWwgc3RhY2shKSAqLwotCi0JaWYgKGJ5dGVjb3VudCA+IElBMzJfTERUX0VOVFJJRVMqSUEzMl9MRFRfRU5UUllfU0laRSkKLQkJYnl0ZWNvdW50ID0gSUEzMl9MRFRfRU5UUklFUypJQTMyX0xEVF9FTlRSWV9TSVpFOwotCi0JYnl0ZXNfbGVmdCA9IGJ5dGVjb3VudDsKLQotCXNyYyA9ICh2b2lkIF9fdXNlciAqKSBJQTMyX0xEVF9PRkZTRVQ7Ci0JZHN0ID0gcHRyOwotCi0Jd2hpbGUgKGJ5dGVzX2xlZnQpIHsKLQkJbiA9IHNpemVvZihidWYpOwotCQlpZiAobiA+IGJ5dGVzX2xlZnQpCi0JCQluID0gYnl0ZXNfbGVmdDsKLQotCQkvKgotCQkgKiBXZSBrbm93IHdlJ3JlIHJlYWRpbmcgdmFsaWQgbWVtb3J5LCBidXQgd2Ugc3RpbGwgbXVzdCBndWFyZCBhZ2FpbnN0Ci0JCSAqIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeS4KLQkJICovCi0JCWlmIChfX2NvcHlfZnJvbV91c2VyKGJ1Ziwgc3JjLCBuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBidWYsIG4pKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJc3JjICs9IG47Ci0JCWRzdCArPSBuOwotCQlieXRlc19sZWZ0IC09IG47Ci0JfQotCXJldHVybiBieXRlY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlYWRfZGVmYXVsdF9sZHQgKHZvaWQgX191c2VyICogcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IGVycjsKLQotCS8qIFhYWCBmaXggbWU6IHNob3VsZCByZXR1cm4gZXF1aXZhbGVudCBvZiBkZWZhdWx0X2xkdFswXSAqLwotCWVyciA9IDA7Ci0Jc2l6ZSA9IDg7Ci0JaWYgKHNpemUgPiBieXRlY291bnQpCi0JCXNpemUgPSBieXRlY291bnQ7Ci0KLQllcnIgPSBzaXplOwotCWlmIChjbGVhcl91c2VyKHB0ciwgc2l6ZSkpCi0JCWVyciA9IC1FRkFVTFQ7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci13cml0ZV9sZHQgKHZvaWQgX191c2VyICogcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVjb3VudCwgaW50IG9sZG1vZGUpCi17Ci0Jc3RydWN0IGlhMzJfdXNlcl9kZXNjIGxkdF9pbmZvOwotCV9fdTY0IGVudHJ5OwotCWludCByZXQ7Ci0KLQlpZiAoYnl0ZWNvdW50ICE9IHNpemVvZihsZHRfaW5mbykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcigmbGR0X2luZm8sIHB0ciwgc2l6ZW9mKGxkdF9pbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGxkdF9pbmZvLmVudHJ5X251bWJlciA+PSBJQTMyX0xEVF9FTlRSSUVTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAobGR0X2luZm8uY29udGVudHMgPT0gMykgewotCQlpZiAob2xkbW9kZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobGR0X2luZm8uc2VnX25vdF9wcmVzZW50ID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAobGR0X2luZm8uYmFzZV9hZGRyID09IDAgJiYgbGR0X2luZm8ubGltaXQgPT0gMAotCSAgICAmJiAob2xkbW9kZSB8fCAobGR0X2luZm8uY29udGVudHMgPT0gMCAmJiBsZHRfaW5mby5yZWFkX2V4ZWNfb25seSA9PSAxCi0JCQkgICAgJiYgbGR0X2luZm8uc2VnXzMyYml0ID09IDAgJiYgbGR0X2luZm8ubGltaXRfaW5fcGFnZXMgPT0gMAotCQkJICAgICYmIGxkdF9pbmZvLnNlZ19ub3RfcHJlc2VudCA9PSAxICYmIGxkdF9pbmZvLnVzZWFibGUgPT0gMCkpKQotCQkvKiBhbGxvdyBMRFRzIHRvIGJlIGNsZWFyZWQgYnkgdGhlIHVzZXIgKi8KLQkJZW50cnkgPSAwOwotCWVsc2UKLQkJLyogd2UgbXVzdCBzZXQgdGhlICJBY2Nlc3NlZCIgYml0IGFzIElWRSBkb2Vzbid0IGVtdWxhdGUgaXQgKi8KLQkJZW50cnkgPSBJQTMyX1NFR19ERVNDUklQVE9SKGxkdF9pbmZvLmJhc2VfYWRkciwgbGR0X2luZm8ubGltaXQsCi0JCQkJCSAgICAoKChsZHRfaW5mby5yZWFkX2V4ZWNfb25seSBeIDEpIDw8IDEpCi0JCQkJCSAgICAgfCAobGR0X2luZm8uY29udGVudHMgPDwgMikpIHwgMSwKLQkJCQkJICAgIDEsIDMsIGxkdF9pbmZvLnNlZ19ub3RfcHJlc2VudCBeIDEsCi0JCQkJCSAgICAob2xkbW9kZSA/IDAgOiBsZHRfaW5mby51c2VhYmxlKSwKLQkJCQkJICAgIGxkdF9pbmZvLnNlZ18zMmJpdCwKLQkJCQkJICAgIGxkdF9pbmZvLmxpbWl0X2luX3BhZ2VzKTsKLQkvKgotCSAqIEluc3RhbGwgdGhlIG5ldyBlbnRyeS4gIFdlIGtub3cgd2UncmUgYWNjZXNzaW5nIHZhbGlkIChtYXBwZWQpIHVzZXItbGV2ZWwKLQkgKiBtZW1vcnksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGd1YXJkIGFnYWluc3Qgb3V0LW9mLW1lbW9yeSwgaGVuY2Ugd2UgbXVzdCB1c2UKLQkgKiBwdXRfdXNlcigpLgotCSAqLwotCXJldCA9IF9fcHV0X3VzZXIoZW50cnksIChfX3U2NCBfX3VzZXIgKikgSUEzMl9MRFRfT0ZGU0VUICsgbGR0X2luZm8uZW50cnlfbnVtYmVyKTsKLQlpYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycyhjdXJyZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludAotc3lzMzJfbW9kaWZ5X2xkdCAoaW50IGZ1bmMsIHVuc2lnbmVkIGludCBwdHIsIHVuc2lnbmVkIGludCBieXRlY291bnQpCi17Ci0JaW50IHJldCA9IC1FTk9TWVM7Ci0KLQlzd2l0Y2ggKGZ1bmMpIHsKLQkgICAgICBjYXNlIDA6Ci0JCXJldCA9IHJlYWRfbGR0KGNvbXBhdF9wdHIocHRyKSwgYnl0ZWNvdW50KTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAxOgotCQlyZXQgPSB3cml0ZV9sZHQoY29tcGF0X3B0cihwdHIpLCBieXRlY291bnQsIDEpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDI6Ci0JCXJldCA9IHJlYWRfZGVmYXVsdF9sZHQoY29tcGF0X3B0cihwdHIpLCBieXRlY291bnQpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDB4MTE6Ci0JCXJldCA9IHdyaXRlX2xkdChjb21wYXRfcHRyKHB0ciksIGJ5dGVjb3VudCwgMCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9zaWduYWwuYyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NjNjYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9zaWduYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMTAgKzAsMCBAQAotLyoKLSAqIElBMzIgQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNpZ25hbCBoYW5kbGluZyBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMS0yMDAyLCAyMDA1IEhld2xldHQtUGFja2FyZCBDbwotICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgVkEgTGludXggQ28KLSAqIENvcHlyaWdodCAoQykgMjAwMCBEb24gRHVnZ2VyIDxuMGFub0B2YWxpbnV4LmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gaTM4NiBhbmQgQWxwaGEgdmVyc2lvbnMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3JzZS5oPgotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0KLSNpbmNsdWRlICJpYTMycHJpdi5oIgotCi0jaW5jbHVkZSAiLi4va2VybmVsL3NpZ2ZyYW1lLmgiCi0KLSNkZWZpbmUgQShfX3gpCQkoKHVuc2lnbmVkIGxvbmcpKF9feCkpCi0KLSNkZWZpbmUgREVCVUdfU0lHCTAKLSNkZWZpbmUgX0JMT0NLQUJMRQkofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCi0KLSNkZWZpbmUgX19JQTMyX05SX3NpZ3JldHVybiAgICAgICAgICAgIDExOQotI2RlZmluZSBfX0lBMzJfTlJfcnRfc2lncmV0dXJuICAgICAgICAgMTczCi0KLXN0cnVjdCBzaWdmcmFtZV9pYTMyCi17Ci0gICAgICAgaW50IHByZXRjb2RlOwotICAgICAgIGludCBzaWc7Ci0gICAgICAgc3RydWN0IHNpZ2NvbnRleHRfaWEzMiBzYzsKLSAgICAgICBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOwotICAgICAgIHVuc2lnbmVkIGludCBleHRyYW1hc2tbX0NPTVBBVF9OU0lHX1dPUkRTLTFdOwotICAgICAgIGNoYXIgcmV0Y29kZVs4XTsKLX07Ci0KLXN0cnVjdCBydF9zaWdmcmFtZV9pYTMyCi17Ci0gICAgICAgaW50IHByZXRjb2RlOwotICAgICAgIGludCBzaWc7Ci0gICAgICAgaW50IHBpbmZvOwotICAgICAgIGludCBwdWM7Ci0gICAgICAgY29tcGF0X3NpZ2luZm9fdCBpbmZvOwotICAgICAgIHN0cnVjdCB1Y29udGV4dF9pYTMyIHVjOwotICAgICAgIHN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7Ci0gICAgICAgY2hhciByZXRjb2RlWzhdOwotfTsKLQotaW50Ci1jb3B5X3NpZ2luZm9fZnJvbV91c2VyMzIgKHNpZ2luZm9fdCAqdG8sIGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICpmcm9tKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCWludCBlcnI7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJvbSwgc2l6ZW9mKGNvbXBhdF9zaWdpbmZvX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnIgPSBfX2dldF91c2VyKHRvLT5zaV9zaWdubywgJmZyb20tPnNpX3NpZ25vKTsKLQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfZXJybm8sICZmcm9tLT5zaV9lcnJubyk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX2NvZGUsICZmcm9tLT5zaV9jb2RlKTsKLQotCWlmICh0by0+c2lfY29kZSA8IDApCi0JCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZ0by0+X3NpZmllbGRzLl9wYWQsICZmcm9tLT5fc2lmaWVsZHMuX3BhZCwgU0lfUEFEX1NJWkUpOwotCWVsc2UgewotCQlzd2l0Y2ggKHRvLT5zaV9jb2RlID4+IDE2KSB7Ci0JCSAgICAgIGNhc2UgX19TSV9DSExEID4+IDE2OgotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3V0aW1lLCAmZnJvbS0+c2lfdXRpbWUpOwotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3N0aW1lLCAmZnJvbS0+c2lfc3RpbWUpOwotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3N0YXR1cywgJmZyb20tPnNpX3N0YXR1cyk7Ci0JCSAgICAgIGRlZmF1bHQ6Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfcGlkLCAmZnJvbS0+c2lfcGlkKTsKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV91aWQsICZmcm9tLT5zaV91aWQpOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgX19TSV9GQVVMVCA+PiAxNjoKLQkJCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJmZyb20tPnNpX2FkZHIpOwotCQkJdG8tPnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgdG1wOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgX19TSV9QT0xMID4+IDE2OgotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX2JhbmQsICZmcm9tLT5zaV9iYW5kKTsKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9mZCwgJmZyb20tPnNpX2ZkKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIF9fU0lfUlQgPj4gMTY6IC8qIFRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSB0aGUga2VybmVsIGFzIG9mIG5vdy4gICovCi0JCSAgICAgIGNhc2UgX19TSV9NRVNHUSA+PiAxNjoKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9waWQsICZmcm9tLT5zaV9waWQpOwotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3VpZCwgJmZyb20tPnNpX3VpZCk7Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfaW50LCAmZnJvbS0+c2lfaW50KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludAotY29weV9zaWdpbmZvX3RvX3VzZXIzMiAoY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnRvLCBzaWdpbmZvX3QgKmZyb20pCi17Ci0JdW5zaWduZWQgaW50IGFkZHI7Ci0JaW50IGVycjsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIHNpemVvZihjb21wYXRfc2lnaW5mb190KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogSWYgeW91IGNoYW5nZSBzaWdpbmZvX3Qgc3RydWN0dXJlLCBwbGVhc2UgYmUgc3VyZQotCSAgIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS4KLQkgICBJdCBzaG91bGQgbmV2ZXIgY29weSBhbnkgcGFkIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlCi0JICAgdG8gYXZvaWQgc2VjdXJpdHkgbGVha3MsIGJ1dCBtdXN0IGNvcHkgdGhlIGdlbmVyaWMKLQkgICAzIGludHMgcGx1cyB0aGUgcmVsZXZhbnQgdW5pb24gbWVtYmVyLgotCSAgIFRoaXMgcm91dGluZSBtdXN0IGNvbnZlcnQgc2lnaW5mbyBmcm9tIDY0Yml0IHRvIDMyYml0IGFzIHdlbGwKLQkgICBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KLQllcnIgPSBfX3B1dF91c2VyKGZyb20tPnNpX3NpZ25vLCAmdG8tPnNpX3NpZ25vKTsKLQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9lcnJubywgJnRvLT5zaV9lcnJubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHNob3J0KWZyb20tPnNpX2NvZGUsICZ0by0+c2lfY29kZSk7Ci0JaWYgKGZyb20tPnNpX2NvZGUgPCAwKQotCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnRvLT5fc2lmaWVsZHMuX3BhZCwgJmZyb20tPl9zaWZpZWxkcy5fcGFkLCBTSV9QQURfU0laRSk7Ci0JZWxzZSB7Ci0JCXN3aXRjaCAoZnJvbS0+c2lfY29kZSA+PiAxNikgewotCQljYXNlIF9fU0lfQ0hMRCA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3V0aW1lLCAmdG8tPnNpX3V0aW1lKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3N0aW1lLCAmdG8tPnNpX3N0aW1lKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3N0YXR1cywgJnRvLT5zaV9zdGF0dXMpOwotCQlkZWZhdWx0OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKLQkJCWJyZWFrOwotCQljYXNlIF9fU0lfRkFVTFQgPj4gMTY6Ci0JCQkvKiBhdm9pZCB0eXBlLWNoZWNraW5nIHdhcm5pbmdzIGJ5IGNvcHlpbmcgX3BhZFswXSBpbiBsaWV1IG9mIHNpX2FkZHIuLi4gKi8KLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPl9zaWZpZWxkcy5fcGFkWzBdLCAmdG8tPnNpX2FkZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX19TSV9QT0xMID4+IDE2OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfYmFuZCwgJnRvLT5zaV9iYW5kKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2ZkLCAmdG8tPnNpX2ZkKTsKLQkJCWJyZWFrOwotCQljYXNlIF9fU0lfVElNRVIgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV90aWQsICZ0by0+c2lfdGlkKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX292ZXJydW4sICZ0by0+c2lfb3ZlcnJ1bik7Ci0JCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGZyb20tPnNpX3B0cjsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGFkZHIsICZ0by0+c2lfcHRyKTsKLQkJCWJyZWFrOwotCQljYXNlIF9fU0lfUlQgPj4gMTY6CS8qIE5vdCBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBhcyBvZiBub3cuICAqLwotCQljYXNlIF9fU0lfTUVTR1EgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3BpZCwgJnRvLT5zaV9waWQpOwotCQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBmcm9tLT5zaV9wdHI7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihhZGRyLCAmdG8tPnNpX3B0cik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qCi0gKiAgU0FWRSBhbmQgUkVTVE9SRSBvZiBpYTMyIGZwc3RhdGUgaW5mbywgZnJvbSBpYTY0IGN1cnJlbnQgc3RhdGUKLSAqICBVc2VkIGluIGV4Y2VwdGlvbiBoYW5kbGVyIHRvIHBhc3MgdGhlIGZwc3RhdGUgdG8gdGhlIHVzZXIsIGFuZCByZXN0b3JlCi0gKiAgdGhlIGZwc3RhdGUgd2hpbGUgcmV0dXJuaW5nIGZyb20gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgotICoKLSAqICAgIGZwc3RhdGUgaW5mbyBhbmQgdGhlaXIgbWFwcGluZyB0byBJQTY0IHJlZ3M6Ci0gKiAgICBmcHN0YXRlICAgIFJFRyhCSVRTKSAgICAgIEF0dHJpYnV0ZSAgICBDb21tZW50cwotICogICAgY3cgICAgICAgICBhci5mY3IoMDoxMikgICAgICAgICAgICAgICAgd2l0aCBiaXRzIDcgYW5kIDYgbm90IHVzZWQKLSAqICAgIHN3ICAgICAgICAgYXIuZnNyKDA6MTUpCi0gKiAgICB0YWcgICAgICAgIGFyLmZzcigxNjozMSkgICAgICAgICAgICAgICB3aXRoIG9kZCBudW1iZXJlZCBiaXRzIG5vdCB1c2VkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZCByZXR1cm5zIDAsIHdyaXRlcyBpZ25vcmVkKQotICogICAgaXBvZmYgICAgICBhci5maXIoMDozMSkKLSAqICAgIGNzc2VsICAgICAgYXIuZmlyKDMyOjQ3KQotICogICAgZGF0YW9mZiAgICBhci5mZHIoMDozMSkKLSAqICAgIGRhdGFzZWwgICAgYXIuZmRyKDMyOjQ3KQotICoKLSAqICAgIF9zdFsoMCtUT1MpJThdICAgZjgKLSAqICAgIF9zdFsoMStUT1MpJThdICAgZjkKLSAqICAgIF9zdFsoMitUT1MpJThdICAgZjEwCi0gKiAgICBfc3RbKDMrVE9TKSU4XSAgIGYxMSAgICAgICAgICAgICAgICAgICAoZjguLmYxMSBmcm9tIHB0cmVncykKLSAqICAgICAgOiA6ICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgIChmMTIuLmYxNSBmcm9tIGxpdmUgcmVnKQotICogICAgICA6IDogICAgICAgICAgICA6Ci0gKiAgICBfc3RbKDcrVE9TKSU4XSAgIGYxNSAgICAgICAgICAgICAgICAgICBUT1M9c3cudG9wKGJpdHMxMToxMykKLSAqCi0gKiAgICBzdGF0dXMgICAgIFNhbWUgYXMgc3cgICAgIFJPCi0gKiAgICBtYWdpYyAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBYODZfRlhTUl9NQUdJQyBpbiBpYTMyCi0gKiAgICBteGNzciAgICAgIEJpdHMoNzoxNSk9YXIuZmNyKDM5OjQ3KQotICogICAgICAgICAgICAgICBCaXRzKDA6NSkgPWFyLmZzcigzMjozNykgICAgd2l0aCBiaXQgNiByZXNlcnZlZAotICogICAgX3htbVswLi43XSBmMTYuLmYzMSAgICAgICAgICAgICAgICAgICAgKGxpdmUgcmVnaXN0ZXJzKQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBfeG1tWzBdCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCg2NDoxMjcpPWYxNygwOjYzKQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQoMDo2Myk9ZjE2KDA6NjMpCi0gKiAgICBBbGwgb3RoZXIgZmllbGRzIHVudXNlZC4uLgotICovCi0KLXN0YXRpYyBpbnQKLXNhdmVfaWEzMl9mcHN0YXRlX2xpdmUgKHN0cnVjdCBfZnBzdGF0ZV9pYTMyIF9fdXNlciAqc2F2ZSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0cDsKLQlzdHJ1Y3QgX2ZwcmVnX2lhMzIgKmZwcmVncDsKLQljaGFyIGJ1ZlszMl07Ci0JdW5zaWduZWQgbG9uZyBmc3IsIGZjciwgZmlyLCBmZHI7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZnNyOwotCXVuc2lnbmVkIGxvbmcgbnVtMTI4WzJdOwotCXVuc2lnbmVkIGxvbmcgbXhjc3I9MDsKLQlpbnQgZnBfdG9zLCBmcjhfc3RfbWFwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzYXZlLCBzaXplb2YoKnNhdmUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBSZWFkIGluIGZzciwgZmNyLCBmaXIsIGZkciBhbmQgY29weSBvbnRvIGZwc3RhdGUgKi8KLQlmc3IgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRlNSKTsKLQlmY3IgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRkNSKTsKLQlmaXIgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRklSKTsKLQlmZHIgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRkRSKTsKLQotCS8qCi0JICogV2UgbmVlZCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIHN0YXRlIGJlZm9yZSBjYWxsaW5nIHRoZSBzaWduYWwgaGFuZGxlci4gQ2xlYXIKLQkgKiB0aGUgYml0cyAxNSwgYml0cyAwLTcgaW4gZnAgc3RhdHVzIHdvcmQuIFNpbWlsYXIgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZm5jbGV4Ci0JICogaW5zdHJ1Y3Rpb24uCi0JICovCi0JbmV3X2ZzciA9IGZzciAmIH4weDgwZmY7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUiwgbmV3X2Zzcik7Ci0KLQlfX3B1dF91c2VyKGZjciAmIDB4ZmZmZiwgJnNhdmUtPmN3KTsKLQlfX3B1dF91c2VyKGZzciAmIDB4ZmZmZiwgJnNhdmUtPnN3KTsKLQlfX3B1dF91c2VyKChmc3I+PjE2KSAmIDB4ZmZmZiwgJnNhdmUtPnRhZyk7Ci0JX19wdXRfdXNlcihmaXIsICZzYXZlLT5pcG9mZik7Ci0JX19wdXRfdXNlcigoZmlyPj4zMikgJiAweGZmZmYsICZzYXZlLT5jc3NlbCk7Ci0JX19wdXRfdXNlcihmZHIsICZzYXZlLT5kYXRhb2ZmKTsKLQlfX3B1dF91c2VyKChmZHI+PjMyKSAmIDB4ZmZmZiwgJnNhdmUtPmRhdGFzZWwpOwotCV9fcHV0X3VzZXIoZnNyICYgMHhmZmZmLCAmc2F2ZS0+c3RhdHVzKTsKLQotCW14Y3NyID0gKChmY3I+PjMyKSAmIDB4ZmY4MCkgfCAoKGZzcj4+MzIpICYgMHgzZik7Ci0JX19wdXRfdXNlcihteGNzciAmIDB4ZmZmZiwgJnNhdmUtPm14Y3NyKTsKLQlfX3B1dF91c2VyKCAwLCAmc2F2ZS0+bWFnaWMpOyAvLyNkZWZpbmUgWDg2X0ZYU1JfTUFHSUMgICAweDAwMDAKLQotCS8qCi0JICogc2F2ZSBmOC4uZjExICBmcm9tIHB0X3JlZ3MKLQkgKiBzYXZlIGYxMi4uZjE1IGZyb20gbGl2ZSByZWdpc3RlciBzZXQKLQkgKi8KLQkvKgotCSAqICBGaW5kIHRoZSBsb2NhdGlvbiB3aGVyZSBmOCBoYXMgdG8gZ28gaW4gZnAgcmVnIHN0YWNrLiAgVGhpcyBkZXBlbmRzIG9uCi0JICogIFRPUCgxMToxMykgZmllbGQgb2Ygc3cuIE90aGVyIGYgcmVnIGNvbnRpbnVlIHNlcXVlbnRpYWxseSBmcm9tIHdoZXJlIGY4IG1hcHMKLQkgKiAgdG8uCi0JICovCi0JZnBfdG9zID0gKGZzcj4+MTEpJjB4NzsKLQlmcjhfc3RfbWFwID0gKDgtZnBfdG9zKSYweDc7Ci0JcHRwID0gdGFza19wdF9yZWdzKHRzayk7Ci0JZnByZWdwID0gKHN0cnVjdCBfZnByZWdfaWEzMiAqKSgoKHVuc2lnbmVkIGxvbmcpYnVmICsgMTUpICYgfjE1KTsKLQlpYTY0ZjJpYTMyZihmcHJlZ3AsICZwdHAtPmY4KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoMCtmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTY0ZjJpYTMyZihmcHJlZ3AsICZwdHAtPmY5KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoMStmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTY0ZjJpYTMyZihmcHJlZ3AsICZwdHAtPmYxMCk7Ci0JY29weV90b191c2VyKCZzYXZlLT5fc3RbKDIrZnI4X3N0X21hcCkmMHg3XSwgZnByZWdwLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NGYyaWEzMmYoZnByZWdwLCAmcHRwLT5mMTEpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3N0WygzK2ZyOF9zdF9tYXApJjB4N10sIGZwcmVncCwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCi0JaWE2NF9zdGZlKGZwcmVncCwgMTIpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3N0Wyg0K2ZyOF9zdF9tYXApJjB4N10sIGZwcmVncCwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfc3RmZShmcHJlZ3AsIDEzKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoNStmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTY0X3N0ZmUoZnByZWdwLCAxNCk7Ci0JY29weV90b191c2VyKCZzYXZlLT5fc3RbKDYrZnI4X3N0X21hcCkmMHg3XSwgZnByZWdwLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9zdGZlKGZwcmVncCwgMTUpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3N0Wyg3K2ZyOF9zdF9tYXApJjB4N10sIGZwcmVncCwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDE2KTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMTcpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVswXSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDE4KTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMTkpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVsxXSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDIwKTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMjEpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVsyXSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDIyKTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMjMpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVszXSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDI0KTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMjUpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVs0XSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDI2KTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMjcpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVs1XSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDI4KTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMjkpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVs2XSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCi0JaWE2NF9zdGY4KCZudW0xMjhbMF0sIDMwKTsKLQlpYTY0X3N0ZjgoJm51bTEyOFsxXSwgMzEpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3htbVs3XSwgbnVtMTI4LCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1yZXN0b3JlX2lhMzJfZnBzdGF0ZV9saXZlIChzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKnNhdmUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBwdF9yZWdzICpwdHA7Ci0JdW5zaWduZWQgaW50IGxvLCBoaTsKLQl1bnNpZ25lZCBsb25nIG51bTEyOFsyXTsKLQl1bnNpZ25lZCBsb25nIG51bTY0LCBteGNzcjsKLQlzdHJ1Y3QgX2ZwcmVnX2lhMzIgKmZwcmVncDsKLQljaGFyIGJ1ZlszMl07Ci0JdW5zaWduZWQgbG9uZyBmc3IsIGZjciwgZmlyLCBmZHI7Ci0JaW50IGZwX3RvcywgZnI4X3N0X21hcDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzYXZlLCBzaXplb2YoKnNhdmUpKSkKLQkJcmV0dXJuKC1FRkFVTFQpOwotCi0JLyoKLQkgKiBVcGRhdGluZyBmc3IsIGZjciwgZmlyLCBmZHIuCi0JICogSnVzdCBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gc2F2ZS4KLQkgKiAtIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgd3JpdGUgYW55IHZhbHVlIG90aGVyIHRoYW4gdGhlCi0JICogICBzcGVjaWZpYyBmcHN0YXRlIGluZm8KLQkgKiAtIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVudG91Y2hlZCBwYXJ0IG9mIGZycywgZmRyLCBmaXIsIGZjcgotCSAqICAgc2hvdWxkIHJlbWFpbiBzYW1lIHdoaWxlIHdyaXRpbmcuCi0JICogU28sIHdlIGRvIGEgcmVhZCwgY2hhbmdlIHNwZWNpZmljIGZpZWxkcyBhbmQgd3JpdGUuCi0JICovCi0JZnNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUik7Ci0JZmNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUik7Ci0JZmlyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZJUik7Ci0JZmRyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZEUik7Ci0KLQlfX2dldF91c2VyKG14Y3NyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5teGNzcik7Ci0JLyogc2V0dGluZyBiaXRzIDAuLjUgOC4uMTIgd2l0aCBjdyBhbmQgMzkuLjQ3IGZyb20gbXhjc3IgKi8KLQlfX2dldF91c2VyKGxvLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5jdyk7Ci0JbnVtNjQgPSBteGNzciAmIDB4ZmYxMDsKLQludW02NCA9IChudW02NCA8PCAzMikgfCAobG8gJiAweDFmM2YpOwotCWZjciA9IChmY3IgJiAofjB4ZmYxMDAwMDAxZjNmVUwpKSB8IG51bTY0OwotCi0JLyogc2V0dGluZyBiaXRzIDAuLjMxIHdpdGggc3cgYW5kIHRhZyBhbmQgMzIuLjM3IGZyb20gbXhjc3IgKi8KLQlfX2dldF91c2VyKGxvLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5zdyk7Ci0JLyogc2V0IGJpdHMgMTUsNyAoZnN3LmIsIGZzdy5lcykgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBlcnJvciBzdGF0dXMgKi8KLQlpZiAoICEobG8gJiAweDdmKSApCi0JCWxvICY9ICh+MHg4MDgwKTsKLQlfX2dldF91c2VyKGhpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT50YWcpOwotCW51bTY0ID0gbXhjc3IgJiAweDNmOwotCW51bTY0ID0gKG51bTY0IDw8IDE2KSB8IChoaSAmIDB4ZmZmZik7Ci0JbnVtNjQgPSAobnVtNjQgPDwgMTYpIHwgKGxvICYgMHhmZmZmKTsKLQlmc3IgPSAoZnNyICYgKH4weDNmZmZmZmZmZmZVTCkpIHwgbnVtNjQ7Ci0KLQkvKiBzZXR0aW5nIGJpdHMgMC4uNDcgd2l0aCBjc3NlbCBhbmQgaXBvZmYgKi8KLQlfX2dldF91c2VyKGxvLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5pcG9mZik7Ci0JX19nZXRfdXNlcihoaSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+Y3NzZWwpOwotCW51bTY0ID0gaGkgJiAweGZmZmY7Ci0JbnVtNjQgPSAobnVtNjQgPDwgMzIpIHwgbG87Ci0JZmlyID0gKGZpciAmICh+MHhmZmZmZmZmZmZmZmZVTCkpIHwgbnVtNjQ7Ci0KLQkvKiBzZXR0aW5nIGJpdHMgMC4uNDcgd2l0aCBkYXRhc2VsIGFuZCBkYXRhb2ZmICovCi0JX19nZXRfdXNlcihsbywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+ZGF0YW9mZik7Ci0JX19nZXRfdXNlcihoaSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+ZGF0YXNlbCk7Ci0JbnVtNjQgPSBoaSAmIDB4ZmZmZjsKLQludW02NCA9IChudW02NCA8PCAzMikgfCBsbzsKLQlmZHIgPSAoZmRyICYgKH4weGZmZmZmZmZmZmZmZlVMKSkgfCBudW02NDsKLQotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GU1IsIGZzcik7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUiwgZmNyKTsKLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRklSLCBmaXIpOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GRFIsIGZkcik7Ci0KLQkvKgotCSAqIHJlc3RvcmUgZjguLmYxMSBvbnRvIHB0X3JlZ3MKLQkgKiByZXN0b3JlIGYxMi4uZjE1IG9udG8gbGl2ZSByZWdpc3RlcnMKLQkgKi8KLQkvKgotCSAqICBGaW5kIHRoZSBsb2NhdGlvbiB3aGVyZSBmOCBoYXMgdG8gZ28gaW4gZnAgcmVnIHN0YWNrLiAgVGhpcyBkZXBlbmRzIG9uCi0JICogIFRPUCgxMToxMykgZmllbGQgb2Ygc3cuIE90aGVyIGYgcmVnIGNvbnRpbnVlIHNlcXVlbnRpYWxseSBmcm9tIHdoZXJlIGY4IG1hcHMKLQkgKiAgdG8uCi0JICovCi0JZnBfdG9zID0gKGZzcj4+MTEpJjB4NzsKLQlmcjhfc3RfbWFwID0gKDgtZnBfdG9zKSYweDc7Ci0JZnByZWdwID0gKHN0cnVjdCBfZnByZWdfaWEzMiAqKSgoKHVuc2lnbmVkIGxvbmcpYnVmICsgMTUpICYgfjE1KTsKLQotCXB0cCA9IHRhc2tfcHRfcmVncyh0c2spOwotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoMCtmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWEzMmYyaWE2NGYoJnB0cC0+ZjgsIGZwcmVncCk7Ci0JY29weV9mcm9tX3VzZXIoZnByZWdwLCAmc2F2ZS0+X3N0WygxK2ZyOF9zdF9tYXApJjB4N10sIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTMyZjJpYTY0ZigmcHRwLT5mOSwgZnByZWdwKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDIrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhMzJmMmlhNjRmKCZwdHAtPmYxMCwgZnByZWdwKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDMrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhMzJmMmlhNjRmKCZwdHAtPmYxMSwgZnByZWdwKTsKLQotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoNCtmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9sZGZlKDEyLCBmcHJlZ3ApOwotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoNStmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9sZGZlKDEzLCBmcHJlZ3ApOwotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoNitmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9sZGZlKDE0LCBmcHJlZ3ApOwotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoNytmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9sZGZlKDE1LCBmcHJlZ3ApOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVswXSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMTYsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgxNywgJm51bTEyOFsxXSk7Ci0KLQljb3B5X2Zyb21fdXNlcihudW0xMjgsICZzYXZlLT5feG1tWzFdLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCWlhNjRfbGRmOCgxOCwgJm51bTEyOFswXSk7Ci0JaWE2NF9sZGY4KDE5LCAmbnVtMTI4WzFdKTsKLQotCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPl94bW1bMl0sIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JaWE2NF9sZGY4KDIwLCAmbnVtMTI4WzBdKTsKLQlpYTY0X2xkZjgoMjEsICZudW0xMjhbMV0pOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVszXSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMjIsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgyMywgJm51bTEyOFsxXSk7Ci0KLQljb3B5X2Zyb21fdXNlcihudW0xMjgsICZzYXZlLT5feG1tWzRdLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCWlhNjRfbGRmOCgyNCwgJm51bTEyOFswXSk7Ci0JaWE2NF9sZGY4KDI1LCAmbnVtMTI4WzFdKTsKLQotCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPl94bW1bNV0sIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JaWE2NF9sZGY4KDI2LCAmbnVtMTI4WzBdKTsKLQlpYTY0X2xkZjgoMjcsICZudW0xMjhbMV0pOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVs2XSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMjgsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgyOSwgJm51bTEyOFsxXSk7Ci0KLQljb3B5X2Zyb21fdXNlcihudW0xMjgsICZzYXZlLT5feG1tWzddLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCWlhNjRfbGRmOCgzMCwgJm51bTEyOFswXSk7Ci0JaWE2NF9sZGY4KDMxLCAmbnVtMTI4WzFdKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1zaWdhY3Rfc2V0X2hhbmRsZXIgKHN0cnVjdCBrX3NpZ2FjdGlvbiAqc2EsIHVuc2lnbmVkIGludCBoYW5kbGVyLCB1bnNpZ25lZCBpbnQgcmVzdG9yZXIpCi17Ci0JaWYgKGhhbmRsZXIgKyAxIDw9IDIpCi0JCS8qIFNJR19ERkwsIFNJR19JR04sIG9yIFNJR19FUlI6IG11c3Qgc2lnbi1leHRlbmQgdG8gNjQtYml0cyAqLwotCQlzYS0+c2Euc2FfaGFuZGxlciA9IChfX3NpZ2hhbmRsZXJfdCkgQSgoaW50KSBoYW5kbGVyKTsKLQllbHNlCi0JCXNhLT5zYS5zYV9oYW5kbGVyID0gKF9fc2lnaGFuZGxlcl90KSAoKCh1bnNpZ25lZCBsb25nKSByZXN0b3JlciA8PCAzMikgfCBoYW5kbGVyKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zaWdzdXNwZW5kIChpbnQgaGlzdG9yeTAsIGludCBoaXN0b3J5MSwgb2xkX3NpZ3NldF90IG1hc2spCi17Ci0JbWFzayAmPSBfQkxPQ0tBQkxFOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPnNhdmVkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOwotCXNpZ2luaXRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIG1hc2spOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCXNjaGVkdWxlKCk7Ci0Jc2V0X3Jlc3RvcmVfc2lnbWFzaygpOwotCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2lnbmFsIChpbnQgc2lnLCB1bnNpZ25lZCBpbnQgaGFuZGxlcikKLXsKLQlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X3NhLCBvbGRfc2E7Ci0JaW50IHJldDsKLQotCXNpZ2FjdF9zZXRfaGFuZGxlcigmbmV3X3NhLCBoYW5kbGVyLCAwKTsKLQluZXdfc2Euc2Euc2FfZmxhZ3MgPSBTQV9PTkVTSE9UIHwgU0FfTk9NQVNLOwotCXNpZ2VtcHR5c2V0KCZuZXdfc2Euc2Euc2FfbWFzayk7Ci0KLQlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCAmbmV3X3NhLCAmb2xkX3NhKTsKLQotCXJldHVybiByZXQgPyByZXQgOiBJQTMyX1NBX0hBTkRMRVIoJm9sZF9zYSk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcnRfc2lnYWN0aW9uIChpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICphY3QsCi0JCSAgICBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICpvYWN0LCB1bnNpZ25lZCBpbnQgc2lnc2V0c2l6ZSkKLXsKLQlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7Ci0JdW5zaWduZWQgaW50IGhhbmRsZXIsIHJlc3RvcmVyOwotCWludCByZXQ7Ci0KLQkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KLQlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2YoY29tcGF0X3NpZ3NldF90KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWN0KSB7Ci0JCXJldCA9IGdldF91c2VyKGhhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpOwotCQlyZXQgfD0gZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7Ci0JCXJldCB8PSBnZXRfdXNlcihyZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpOwotCQlyZXQgfD0gY29weV9mcm9tX3VzZXIoJm5ld19rYS5zYS5zYV9tYXNrLCAmYWN0LT5zYV9tYXNrLCBzaXplb2YoY29tcGF0X3NpZ3NldF90KSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzaWdhY3Rfc2V0X2hhbmRsZXIoJm5ld19rYSwgaGFuZGxlciwgcmVzdG9yZXIpOwotCX0KLQotCXJldCA9IGRvX3NpZ2FjdGlvbihzaWcsIGFjdCA/ICZuZXdfa2EgOiBOVUxMLCBvYWN0ID8gJm9sZF9rYSA6IE5VTEwpOwotCi0JaWYgKCFyZXQgJiYgb2FjdCkgewotCQlyZXQgPSBwdXRfdXNlcihJQTMyX1NBX0hBTkRMRVIoJm9sZF9rYSksICZvYWN0LT5zYV9oYW5kbGVyKTsKLQkJcmV0IHw9IHB1dF91c2VyKG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKLQkJcmV0IHw9IHB1dF91c2VyKElBMzJfU0FfUkVTVE9SRVIoJm9sZF9rYSksICZvYWN0LT5zYV9yZXN0b3Jlcik7Ci0JCXJldCB8PSBjb3B5X3RvX3VzZXIoJm9hY3QtPnNhX21hc2ssICZvbGRfa2Euc2Euc2FfbWFzaywgc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcnRfc2lncHJvY21hc2sgKGludCBob3csIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNldCwgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqb3NldCwKLQkJICAgICAgdW5zaWduZWQgaW50IHNpZ3NldHNpemUpCi17Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCXNpZ3NldF90IHM7Ci0JbG9uZyByZXQ7Ci0KLQlpZiAoc2lnc2V0c2l6ZSA+IHNpemVvZihzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc2V0KSB7Ci0JCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzLnNpZywgc2V0LCBzaWdzZXRzaXplKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfcnRfc2lncHJvY21hc2soaG93LAotCQkJCSBzZXQgPyAoc2lnc2V0X3QgX191c2VyICopICZzIDogTlVMTCwKLQkJCQkgb3NldCA/IChzaWdzZXRfdCBfX3VzZXIgKikgJnMgOiBOVUxMLCBzaXplb2YocykpOwotCXNldF9mcyhvbGRfZnMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JaWYgKG9zZXQpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihvc2V0LCAmcy5zaWcsIHNpZ3NldHNpemUpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3J0X3NpZ3F1ZXVlaW5mbyAoaW50IHBpZCwgaW50IHNpZywgY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnVpbmZvKQotewotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzaWdpbmZvX3QgaW5mbzsKLQlpbnQgcmV0OwotCi0JaWYgKGNvcHlfc2lnaW5mb19mcm9tX3VzZXIzMigmaW5mbywgdWluZm8pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfcnRfc2lncXVldWVpbmZvKHBpZCwgc2lnLCAoc2lnaW5mb190IF9fdXNlciAqKSAmaW5mbyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zaWdhY3Rpb24gKGludCBzaWcsIHN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgX191c2VyICphY3QsIHN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgX191c2VyICpvYWN0KQotewotCXN0cnVjdCBrX3NpZ2FjdGlvbiBuZXdfa2EsIG9sZF9rYTsKLQl1bnNpZ25lZCBpbnQgaGFuZGxlciwgcmVzdG9yZXI7Ci0JaW50IHJldDsKLQotCWlmIChhY3QpIHsKLQkJY29tcGF0X29sZF9zaWdzZXRfdCBtYXNrOwotCi0JCXJldCA9IGdldF91c2VyKGhhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpOwotCQlyZXQgfD0gZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7Ci0JCXJldCB8PSBnZXRfdXNlcihyZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpOwotCQlyZXQgfD0gZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXNpZ2FjdF9zZXRfaGFuZGxlcigmbmV3X2thLCBoYW5kbGVyLCByZXN0b3Jlcik7Ci0JCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKLQl9Ci0KLQlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKLQotCWlmICghcmV0ICYmIG9hY3QpIHsKLQkJcmV0ID0gcHV0X3VzZXIoSUEzMl9TQV9IQU5ETEVSKCZvbGRfa2EpLCAmb2FjdC0+c2FfaGFuZGxlcik7Ci0JCXJldCB8PSBwdXRfdXNlcihvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncyk7Ci0JCXJldCB8PSBwdXRfdXNlcihJQTMyX1NBX1JFU1RPUkVSKCZvbGRfa2EpLCAmb2FjdC0+c2FfcmVzdG9yZXIpOwotCQlyZXQgfD0gcHV0X3VzZXIob2xkX2thLnNhLnNhX21hc2suc2lnWzBdLCAmb2FjdC0+c2FfbWFzayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotc2V0dXBfc2lnY29udGV4dF9pYTMyIChzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIF9fdXNlciAqc2MsIHN0cnVjdCBfZnBzdGF0ZV9pYTMyIF9fdXNlciAqZnBzdGF0ZSwKLQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JaW50ICBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc2MsIHNpemVvZigqc2MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnIgfD0gX19wdXRfdXNlcigocmVncy0+cjE2ID4+IDMyKSAmIDB4ZmZmZiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmZzKTsKLQllcnIgfD0gX19wdXRfdXNlcigocmVncy0+cjE2ID4+IDQ4KSAmIDB4ZmZmZiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKLQllcnIgfD0gX19wdXRfdXNlcigocmVncy0+cjE2ID4+IDE2KSAmIDB4ZmZmZiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmVzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTYgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5kcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE1LCAmc2MtPmVkaSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE0LCAmc2MtPmVzaSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEzLCAmc2MtPmVicCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEyLCAmc2MtPmVzcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjExLCAmc2MtPmVieCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEwLCAmc2MtPmVkeCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjksICZzYy0+ZWN4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yOCwgJnNjLT5lYXgpOwotI2lmIDAKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50c3MudHJhcF9ubywgJnNjLT50cmFwbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRzcy5lcnJvcl9jb2RlLCAmc2MtPmVycik7Ci0jZW5kaWYKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5jcl9paXAsICZzYy0+ZWlwKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTcgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5jcyk7Ci0JLyoKLQkgKiAgYGVmbGFncycgaXMgaW4gYW4gYXIgcmVnaXN0ZXIgZm9yIHRoaXMgY29udGV4dAotCSAqLwotCWZsYWcgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRUZMQUcpOwotCWVyciB8PSBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQpZmxhZywgJnNjLT5lZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMiwgJnNjLT5lc3BfYXRfc2lnbmFsKTsKLQllcnIgfD0gX19wdXRfdXNlcigocmVncy0+cjE3ID4+IDE2KSAmIDB4ZmZmZiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPnNzKTsKLQotCWlmICggc2F2ZV9pYTMyX2Zwc3RhdGVfbGl2ZShmcHN0YXRlKSA8IDAgKQotCQllcnIgPSAtRUZBVUxUOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIoKHUzMikodTY0KWZwc3RhdGUsICZzYy0+ZnBzdGF0ZSk7Ci0KLSNpZiAwCi0JdG1wID0gc2F2ZV9pMzg3KGZwc3RhdGUpOwotCWlmICh0bXAgPCAwKQotCQllcnIgPSAxOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIodG1wID8gZnBzdGF0ZSA6IE5VTEwsICZzYy0+ZnBzdGF0ZSk7Ci0KLQkvKiBub24taUJDUzIgZXh0ZW5zaW9ucy4uICovCi0jZW5kaWYKLQllcnIgfD0gX19wdXRfdXNlcihtYXNrLCAmc2MtPm9sZG1hc2spOwotI2lmIDAKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50c3MuY3IyLCAmc2MtPmNyMik7Ci0jZW5kaWYKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1yZXN0b3JlX3NpZ2NvbnRleHRfaWEzMiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0X2lhMzIgX191c2VyICpzYywgaW50ICpwZWF4KQotewotCXVuc2lnbmVkIGludCBlcnIgPSAwOwotCi0JLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCi0JY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNjLCBzaXplb2YoKnNjKSkpCi0JCXJldHVybigtRUZBVUxUKTsKLQotI2RlZmluZSBDT1BZKGlhNjR4LCBpYTMyeCkJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+aWE2NHgsICZzYy0+aWEzMngpCi0KLSNkZWZpbmUgY29weXNlZ19ncyh0bXApCQkocmVncy0+cjE2IHw9ICh1bnNpZ25lZCBsb25nKSAodG1wKSA8PCA0OCkKLSNkZWZpbmUgY29weXNlZ19mcyh0bXApCQkocmVncy0+cjE2IHw9ICh1bnNpZ25lZCBsb25nKSAodG1wKSA8PCAzMikKLSNkZWZpbmUgY29weXNlZ19jcyh0bXApCQkocmVncy0+cjE3IHw9IHRtcCkKLSNkZWZpbmUgY29weXNlZ19zcyh0bXApCQkocmVncy0+cjE3IHw9ICh1bnNpZ25lZCBsb25nKSAodG1wKSA8PCAxNikKLSNkZWZpbmUgY29weXNlZ19lcyh0bXApCQkocmVncy0+cjE2IHw9ICh1bnNpZ25lZCBsb25nKSAodG1wKSA8PCAxNikKLSNkZWZpbmUgY29weXNlZ19kcyh0bXApCQkocmVncy0+cjE2IHw9IHRtcCkKLQotI2RlZmluZSBDT1BZX1NFRyhzZWcpCQkJCQlcCi0JewkJCQkJCVwKLQkJdW5zaWduZWQgc2hvcnQgdG1wOwkJCVwKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodG1wLCAmc2MtPnNlZyk7CVwKLQkJY29weXNlZ18jI3NlZyh0bXApOwkJCVwKLQl9Ci0jZGVmaW5lIENPUFlfU0VHX1NUUklDVChzZWcpCQkJCVwKLQl7CQkJCQkJXAotCQl1bnNpZ25lZCBzaG9ydCB0bXA7CQkJXAotCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJXAotCQljb3B5c2VnXyMjc2VnKHRtcHwzKTsJCQlcCi0JfQotCi0JLyogVG8gbWFrZSBDT1BZX1NFR3MgZWFzaWVyLCB3ZSB6ZXJvIHIxNiwgcjE3ICovCi0JcmVncy0+cjE2ID0gMDsKLQlyZWdzLT5yMTcgPSAwOwotCi0JQ09QWV9TRUcoZ3MpOwotCUNPUFlfU0VHKGZzKTsKLQlDT1BZX1NFRyhlcyk7Ci0JQ09QWV9TRUcoZHMpOwotCUNPUFkocjE1LCBlZGkpOwotCUNPUFkocjE0LCBlc2kpOwotCUNPUFkocjEzLCBlYnApOwotCUNPUFkocjEyLCBlc3ApOwotCUNPUFkocjExLCBlYngpOwotCUNPUFkocjEwLCBlZHgpOwotCUNPUFkocjksIGVjeCk7Ci0JQ09QWShjcl9paXAsIGVpcCk7Ci0JQ09QWV9TRUdfU1RSSUNUKGNzKTsKLQlDT1BZX1NFR19TVFJJQ1Qoc3MpOwotCWlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzKGN1cnJlbnQpOwotCXsKLQkJdW5zaWduZWQgaW50IHRtcGZsYWdzOwotCQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQkJLyoKLQkJICogIElBMzIgYGVmbGFncycgaXMgbm90IHBhcnQgb2YgYHB0X3JlZ3MnLCBpdCdzIGluIGFuIGFyIHJlZ2lzdGVyIHdoaWNoCi0JCSAqICBpcyBwYXJ0IG9mIHRoZSB0aHJlYWQgY29udGV4dC4gIEZvcnR1bmF0ZWx5LCB3ZSBhcmUgZXhlY3V0aW5nIGluIHRoZQotCQkgKiAgSUEzMiBwcm9jZXNzJ3MgY29udGV4dC4KLQkJICovCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcGZsYWdzLCAmc2MtPmVmbGFncyk7Ci0JCWZsYWcgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRUZMQUcpOwotCQlmbGFnICY9IH4weDQwREQ1OwotCQlmbGFnIHw9ICh0bXBmbGFncyAmIDB4NDBERDUpOwotCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRUZMQUcsIGZsYWcpOwotCi0JCXJlZ3MtPnIxID0gLTE7CS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MsIHIxIGlzIG9yaWdfZWF4ICovCi0JfQotCi0JewotCQlzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKmJ1ZiA9IE5VTEw7Ci0JCXUzMiAgICBmcHN0YXRlX3B0cjsKLQkJZXJyIHw9IGdldF91c2VyKGZwc3RhdGVfcHRyLCAmKHNjLT5mcHN0YXRlKSk7Ci0JCWJ1ZiA9IGNvbXBhdF9wdHIoZnBzdGF0ZV9wdHIpOwotCQlpZiAoYnVmKSB7Ci0JCQllcnIgfD0gcmVzdG9yZV9pYTMyX2Zwc3RhdGVfbGl2ZShidWYpOwotCQl9Ci0JfQotCi0jaWYgMAotCXsKLQkJc3RydWN0IF9mcHN0YXRlICogYnVmOwotCQllcnIgfD0gX19nZXRfdXNlcihidWYsICZzYy0+ZnBzdGF0ZSk7Ci0JCWlmIChidWYpIHsKLQkJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIHNpemVvZigqYnVmKSkpCi0JCQkJZ290byBiYWRmcmFtZTsKLQkJCWVyciB8PSByZXN0b3JlX2kzODcoYnVmKTsKLQkJfQotCX0KLSNlbmRpZgotCi0JZXJyIHw9IF9fZ2V0X3VzZXIoKnBlYXgsICZzYy0+ZWF4KTsKLQlyZXR1cm4gZXJyOwotCi0jaWYgMAotICBiYWRmcmFtZToKLQlyZXR1cm4gMTsKLSNlbmRpZgotfQotCi0vKgotICogRGV0ZXJtaW5lIHdoaWNoIHN0YWNrIHRvIHVzZS4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKgotZ2V0X3NpZ2ZyYW1lIChzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHNpemVfdCBmcmFtZV9zaXplKQotewotCXVuc2lnbmVkIGxvbmcgZXNwOwotCi0JLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKHRydW5jYXRlIG9mZiBzaWduLWV4dGVuc2lvbiBvZiBiaXQgMzE6ICovCi0JZXNwID0gKHVuc2lnbmVkIGludCkgcmVncy0+cjEyOwotCi0JLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKLQkJaW50IG9uc3RhY2sgPSBzYXNfc3NfZmxhZ3MoZXNwKTsKLQotCQlpZiAob25zdGFjayA9PSAwKQotCQkJZXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7Ci0JCWVsc2UgaWYgKG9uc3RhY2sgPT0gU1NfT05TVEFDSykgewotCQkJLyoKLQkJCSAqIElmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBhbmQgd291bGQKLQkJCSAqIG92ZXJmbG93IGl0LCBkb24ndC4gUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzCi0JCQkgKiBpbnN0ZWFkIHNvIHdlIHdpbGwgZGllIHdpdGggU0lHU0VHVi4KLQkJCSAqLwotCQkJaWYgKCFsaWtlbHkob25fc2lnX3N0YWNrKGVzcCAtIGZyYW1lX3NpemUpKSkKLQkJCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xTDsKLQkJfQotCX0KLQkvKiBMZWdhY3kgc3RhY2sgc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWQgKi8KLQotCWVzcCAtPSBmcmFtZV9zaXplOwotCS8qIEFsaWduIHRoZSBzdGFjayBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgaTM4NiBBQkksCi0JICogaS5lLiBzbyB0aGF0IG9uIGZ1bmN0aW9uIGVudHJ5ICgoc3AgKyA0KSAmIDE1KSA9PSAwLiAqLwotCWVzcCA9ICgoZXNwICsgNCkgJiAtMTZ1bCkgLSA0OwotCXJldHVybiAodm9pZCBfX3VzZXIgKikgZXNwOwotfQotCi1zdGF0aWMgaW50Ci1zZXR1cF9mcmFtZV9pYTMyIChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCi17Ci0Jc3RydWN0IGV4ZWNfZG9tYWluICplZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW47Ci0Jc3RydWN0IHNpZ2ZyYW1lX2lhMzIgX191c2VyICpmcmFtZTsKLQlpbnQgZXJyID0gMDsKLQotCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCi0JCWdvdG8gZ2l2ZV9zaWdzZWd2OwotCi0JZXJyIHw9IF9fcHV0X3VzZXIoKGVkICYmIGVkLT5zaWduYWxfaW52bWFwICYmIHNpZyA8IDMyCi0JCQkgICA/IChpbnQpKGVkLT5zaWduYWxfaW52bWFwW3NpZ10pIDogc2lnKSwgJmZyYW1lLT5zaWcpOwotCi0JZXJyIHw9IHNldHVwX3NpZ2NvbnRleHRfaWEzMigmZnJhbWUtPnNjLCAmZnJhbWUtPmZwc3RhdGUsIHJlZ3MsIHNldC0+c2lnWzBdKTsKLQotCWlmIChfQ09NUEFUX05TSUdfV09SRFMgPiAxKQotCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoZnJhbWUtPmV4dHJhbWFzaywgKGNoYXIgKikgJnNldC0+c2lnICsgNCwKLQkJCQkgICAgICBzaXplb2YoZnJhbWUtPmV4dHJhbWFzaykpOwotCi0JLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZS4gIElmIHByb3ZpZGVkLCB1c2UgYSBzdHViCi0JICAgYWxyZWFkeSBpbiB1c2Vyc3BhY2UuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgewotCQl1bnNpZ25lZCBpbnQgcmVzdG9yZXIgPSBJQTMyX1NBX1JFU1RPUkVSKGthKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIocmVzdG9yZXIsICZmcmFtZS0+cHJldGNvZGUpOwotCX0gZWxzZSB7Ci0JCS8qIFBvaW50aW5nIHRvIHJlc3RvcmVyIGluIGlhMzIgZ2F0ZSBwYWdlICovCi0JCWVyciB8PSBfX3B1dF91c2VyKElBMzJfR0FURV9PRkZTRVQsICZmcmFtZS0+cHJldGNvZGUpOwotCX0KLQotCS8qIFRoaXMgaXMgcG9wbCAlZWF4IDsgbW92bCAkLCVlYXggOyBpbnQgJDB4ODAKLQkgKiBhbmQgdGhlcmUgZm9yIGhpc3RvcmljYWwgcmVhc29ucyBvbmx5LgotCSAqIFNlZSBhcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCi0JICovCi0KLQllcnIgfD0gX19wdXRfdXNlcigweGI4NTgsIChzaG9ydCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUrMCkpOwotCWVyciB8PSBfX3B1dF91c2VyKF9fSUEzMl9OUl9zaWdyZXR1cm4sIChpbnQgX191c2VyICopKGZyYW1lLT5yZXRjb2RlKzIpKTsKLQllcnIgfD0gX19wdXRfdXNlcigweDgwY2QsIChzaG9ydCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUrNikpOwotCi0JaWYgKGVycikKLQkJZ290byBnaXZlX3NpZ3NlZ3Y7Ci0KLQkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLwotCXJlZ3MtPnIxMiA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKLQlyZWdzLT5jcl9paXAgPSBJQTMyX1NBX0hBTkRMRVIoa2EpOwotCi0Jc2V0X2ZzKFVTRVJfRFMpOwotCi0jaWYgMAotCXJlZ3MtPmVmbGFncyAmPSB+VEZfTUFTSzsKLSNlbmRpZgotCi0jaWYgMAotCXByaW50aygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc2lnPSVkIHNwPSVwIHBjPSVseCByYT0leFxuIiwKLSAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc2lnLCAodm9pZCAqKSBmcmFtZSwgcmVncy0+Y3JfaWlwLCBmcmFtZS0+cHJldGNvZGUpOwotI2VuZGlmCi0KLQlyZXR1cm4gMTsKLQotICBnaXZlX3NpZ3NlZ3Y6Ci0JZm9yY2Vfc2lnc2VndihzaWcsIGN1cnJlbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zZXR1cF9ydF9mcmFtZV9pYTMyIChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCi0JCSAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQotewotCXN0cnVjdCBleGVjX2RvbWFpbiAqZWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluOwotCWNvbXBhdF91cHRyX3QgcGluZm8sIHB1YzsKLQlzdHJ1Y3QgcnRfc2lnZnJhbWVfaWEzMiBfX3VzZXIgKmZyYW1lOwotCWludCBlcnIgPSAwOwotCi0JZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKLQkJZ290byBnaXZlX3NpZ3NlZ3Y7Ci0KLQllcnIgfD0gX19wdXRfdXNlcigoZWQgJiYgZWQtPnNpZ25hbF9pbnZtYXAKLQkJCSAgICYmIHNpZyA8IDMyID8gZWQtPnNpZ25hbF9pbnZtYXBbc2lnXSA6IHNpZyksICZmcmFtZS0+c2lnKTsKLQotCXBpbmZvID0gKGxvbmcgX191c2VyKSAmZnJhbWUtPmluZm87Ci0JcHVjID0gKGxvbmcgX191c2VyKSAmZnJhbWUtPnVjOwotCWVyciB8PSBfX3B1dF91c2VyKHBpbmZvLCAmZnJhbWUtPnBpbmZvKTsKLQllcnIgfD0gX19wdXRfdXNlcihwdWMsICZmcmFtZS0+cHVjKTsKLQllcnIgfD0gY29weV9zaWdpbmZvX3RvX3VzZXIzMigmZnJhbWUtPmluZm8sIGluZm8pOwotCi0JLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5yMTIpLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKLQllcnIgfD0gc2V0dXBfc2lnY29udGV4dF9pYTMyKCZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZmcmFtZS0+ZnBzdGF0ZSwgcmVncywgc2V0LT5zaWdbMF0pOwotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKLQlpZiAoZXJyKQotCQlnb3RvIGdpdmVfc2lnc2VndjsKLQotCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICBJZiBwcm92aWRlZCwgdXNlIGEgc3R1YgotCSAgIGFscmVhZHkgaW4gdXNlcnNwYWNlLiAgKi8KLQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpIHsKLQkJdW5zaWduZWQgaW50IHJlc3RvcmVyID0gSUEzMl9TQV9SRVNUT1JFUihrYSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKHJlc3RvcmVyLCAmZnJhbWUtPnByZXRjb2RlKTsKLQl9IGVsc2UgewotCQkvKiBQb2ludGluZyB0byBydF9yZXN0b3JlciBpbiBpYTMyIGdhdGUgcGFnZSAqLwotCQllcnIgfD0gX19wdXRfdXNlcihJQTMyX0dBVEVfT0ZGU0VUICsgOCwgJmZyYW1lLT5wcmV0Y29kZSk7Ci0JfQotCi0JLyogVGhpcyBpcyBtb3ZsICQsJWVheCA7IGludCAkMHg4MAotCSAqIGFuZCB0aGVyZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zIG9ubHkuCi0JICogU2VlIGFyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMKLQkgKi8KLQotCWVyciB8PSBfX3B1dF91c2VyKDB4YjgsIChjaGFyIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSswKSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoX19JQTMyX05SX3J0X3NpZ3JldHVybiwgKGludCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUrMSkpOwotCWVyciB8PSBfX3B1dF91c2VyKDB4ODBjZCwgKHNob3J0IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSs1KSk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGdpdmVfc2lnc2VndjsKLQotCS8qIFNldCB1cCByZWdpc3RlcnMgZm9yIHNpZ25hbCBoYW5kbGVyICovCi0JcmVncy0+cjEyID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwotCXJlZ3MtPmNyX2lpcCA9IElBMzJfU0FfSEFORExFUihrYSk7Ci0KLQlzZXRfZnMoVVNFUl9EUyk7Ci0KLSNpZiAwCi0JcmVncy0+ZWZsYWdzICY9IH5URl9NQVNLOwotI2VuZGlmCi0KLSNpZiAwCi0JcHJpbnRrKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lbHggcmE9JXhcbiIsCi0gICAgICAgICAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopIGZyYW1lLCByZWdzLT5jcl9paXAsIGZyYW1lLT5wcmV0Y29kZSk7Ci0jZW5kaWYKLQotCXJldHVybiAxOwotCi1naXZlX3NpZ3NlZ3Y6Ci0JZm9yY2Vfc2lnc2VndihzaWcsIGN1cnJlbnQpOwotCXJldHVybiAwOwotfQotCi1pbnQKLWlhMzJfc2V0dXBfZnJhbWUxIChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCi0JCSAgIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotICAgICAgIC8qIFNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KLSAgICAgICBpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKLSAgICAgICAgICAgICAgIHJldHVybiBzZXR1cF9ydF9mcmFtZV9pYTMyKHNpZywga2EsIGluZm8sIHNldCwgcmVncyk7Ci0gICAgICAgZWxzZQotICAgICAgICAgICAgICAgcmV0dXJuIHNldHVwX2ZyYW1lX2lhMzIoc2lnLCBrYSwgc2V0LCByZWdzKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zaWdyZXR1cm4gKGludCBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczLCBpbnQgYXJnNCwgaW50IGFyZzUsCi0JCSBpbnQgYXJnNiwgaW50IGFyZzcsIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlc3AgPSAodW5zaWduZWQgaW50KSByZWdzLnIxMjsKLQlzdHJ1Y3Qgc2lnZnJhbWVfaWEzMiBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZV9pYTMyIF9fdXNlciAqKShlc3AgLSA4KTsKLQlzaWdzZXRfdCBzZXQ7Ci0JaW50IGVheDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQotCQlnb3RvIGJhZGZyYW1lOwotCi0JaWYgKF9fZ2V0X3VzZXIoc2V0LnNpZ1swXSwgJmZyYW1lLT5zYy5vbGRtYXNrKQotCSAgICB8fCAoX0NPTVBBVF9OU0lHX1dPUkRTID4gMSAmJiBfX2NvcHlfZnJvbV91c2VyKChjaGFyICopICZzZXQuc2lnICsgNCwgJmZyYW1lLT5leHRyYW1hc2ssCi0JCQkJCQkJIHNpemVvZihmcmFtZS0+ZXh0cmFtYXNrKSkpKQotCQlnb3RvIGJhZGZyYW1lOwotCi0Jc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7Ci0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JY3VycmVudC0+YmxvY2tlZCA9IHNldDsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQlpZiAocmVzdG9yZV9zaWdjb250ZXh0X2lhMzIoJnJlZ3MsICZmcmFtZS0+c2MsICZlYXgpKQotCQlnb3RvIGJhZGZyYW1lOwotCXJldHVybiBlYXg7Ci0KLSAgYmFkZnJhbWU6Ci0JZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3J0X3NpZ3JldHVybiAoaW50IGFyZzAsIGludCBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0LAotCQkgICAgaW50IGFyZzUsIGludCBhcmc2LCBpbnQgYXJnNywgc3RydWN0IHB0X3JlZ3MgcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGVzcCA9ICh1bnNpZ25lZCBpbnQpIHJlZ3MucjEyOwotCXN0cnVjdCBydF9zaWdmcmFtZV9pYTMyIF9fdXNlciAqZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lX2lhMzIgX191c2VyICopKGVzcCAtIDQpOwotCXNpZ3NldF90IHNldDsKLQlpbnQgZWF4OwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCi0JCWdvdG8gYmFkZnJhbWU7Ci0JaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCi0JCWdvdG8gYmFkZnJhbWU7Ci0KLQlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQljdXJyZW50LT5ibG9ja2VkID0gIHNldDsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQlpZiAocmVzdG9yZV9zaWdjb250ZXh0X2lhMzIoJnJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZlYXgpKQotCQlnb3RvIGJhZGZyYW1lOwotCi0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlkb19zaWdhbHRzdGFjaygoc3RhY2tfdCBfX3VzZXIgKikgJmZyYW1lLT51Yy51Y19zdGFjaywgTlVMTCwgZXNwKTsKLQotCXJldHVybiBlYXg7Ci0KLSAgYmFkZnJhbWU6Ci0JZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9zdXBwb3J0LmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY5NjVkZC4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogSUEzMiBoZWxwZXIgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgQXNpdCBLLiBNYWxsaWNrIDxhc2l0LmsubWFsbGlja0BpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiAwNi8xNi8wMAlBLiBNYWxsaWNrCWFkZGVkIGNzZC9zc2QvdHNzZCBmb3IgaWEzMiB0aHJlYWQgY29udGV4dAotICogMDIvMTkvMDEJRC4gTW9zYmVyZ2VyCWRyb3BwZWQgdHNzZDsgaXQncyBub3QgbmVlZGVkCi0gKiAwOS8xNC8wMQlELiBNb3NiZXJnZXIJZml4ZWQgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIGdkdC90c3MgcGFnZQotICogMDkvMjkvMDEJRC4gTW9zYmVyZ2VyCWFkZGVkIGlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzKCkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImlhMzJwcml2LmgiCi0KLWV4dGVybiBpbnQgZGllX2lmX2tlcm5lbCAoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpOwotCi1zdHJ1Y3QgcGFnZSAqaWEzMl9zaGFyZWRfcGFnZVtOUl9DUFVTXTsKLXVuc2lnbmVkIGxvbmcgKmlhMzJfYm9vdF9nZHQ7Ci11bnNpZ25lZCBsb25nICpjcHVfZ2R0X3RhYmxlW05SX0NQVVNdOwotc3RydWN0IHBhZ2UgKmlhMzJfZ2F0ZV9wYWdlOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbG9hZF9kZXNjICh1MTYgc2VsZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyAqdGFibGUsIGxpbWl0LCBpbmRleDsKLQotCWlmICghc2VsZWN0b3IpCi0JCXJldHVybiAwOwotCWlmIChzZWxlY3RvciAmIElBMzJfU0VHU0VMX1RJKSB7Ci0JCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgSUEzMl9MRFRfT0ZGU0VUOwotCQlsaW1pdCA9IElBMzJfTERUX0VOVFJJRVM7Ci0JfSBlbHNlIHsKLQkJdGFibGUgPSBjcHVfZ2R0X3RhYmxlW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JCWxpbWl0ID0gSUEzMl9QQUdFX1NJWkUgLyBzaXplb2YoaWEzMl9ib290X2dkdFswXSk7Ci0JfQotCWluZGV4ID0gc2VsZWN0b3IgPj4gSUEzMl9TRUdTRUxfSU5ERVhfU0hJRlQ7Ci0JaWYgKGluZGV4ID49IGxpbWl0KQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gSUEzMl9TRUdfVU5TQ1JBTUJMRSh0YWJsZVtpbmRleF0pOwotfQotCi12b2lkCi1pYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycyAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOwotCi0JLyogU2V0dXAgdGhlIHNlZ21lbnQgZGVzY3JpcHRvcnMgKi8KLQlyZWdzLT5yMjQgPSBsb2FkX2Rlc2MocmVncy0+cjE2ID4+IDE2KTsJCS8qIEVTRCAqLwotCXJlZ3MtPnIyNyA9IGxvYWRfZGVzYyhyZWdzLT5yMTYgPj4gIDApOwkJLyogRFNEICovCi0JcmVncy0+cjI4ID0gbG9hZF9kZXNjKHJlZ3MtPnIxNiA+PiAzMik7CQkvKiBGU0QgKi8KLQlyZWdzLT5yMjkgPSBsb2FkX2Rlc2MocmVncy0+cjE2ID4+IDQ4KTsJCS8qIEdTRCAqLwotCXJlZ3MtPmFyX2NzZCA9IGxvYWRfZGVzYyhyZWdzLT5yMTcgPj4gIDApOwkvKiBDU0QgKi8KLQlyZWdzLT5hcl9zc2QgPSBsb2FkX2Rlc2MocmVncy0+cjE3ID4+IDE2KTsJLyogU1NEICovCi19Ci0KLWludAotaWEzMl9jbG9uZV90bHMgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3MpCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjOwotCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBpbmZvOwotCWludCBpZHg7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sICh2b2lkIF9fdXNlciAqKShjaGlsZHJlZ3MtPnIxNCAmIDB4ZmZmZmZmZmYpLCBzaXplb2YoaW5mbykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoTERUX2VtcHR5KCZpbmZvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZHggPSBpbmZvLmVudHJ5X251bWJlcjsKLQlpZiAoaWR4IDwgR0RUX0VOVFJZX1RMU19NSU4gfHwgaWR4ID4gR0RUX0VOVFJZX1RMU19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGVzYyA9IGNoaWxkLT50aHJlYWQudGxzX2FycmF5ICsgaWR4IC0gR0RUX0VOVFJZX1RMU19NSU47Ci0JZGVzYy0+YSA9IExEVF9lbnRyeV9hKCZpbmZvKTsKLQlkZXNjLT5iID0gTERUX2VudHJ5X2IoJmluZm8pOwotCi0JLyogWFhYOiBjYW4gdGhpcyBiZSBkb25lIGluIGEgY2xlYW5lciB3YXkgPyAqLwotCWxvYWRfVExTKCZjaGlsZC0+dGhyZWFkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzKGNoaWxkKTsKLQlsb2FkX1RMUygmY3VycmVudC0+dGhyZWFkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLWlhMzJfc2F2ZV9zdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICp0KQotewotCXQtPnRocmVhZC5lZmxhZyA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9FRkxBRyk7Ci0JdC0+dGhyZWFkLmZzciAgID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUik7Ci0JdC0+dGhyZWFkLmZjciAgID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUik7Ci0JdC0+dGhyZWFkLmZpciAgID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZJUik7Ci0JdC0+dGhyZWFkLmZkciAgID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZEUik7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCB0LT50aHJlYWQub2xkX2lvYik7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9UU1NELCB0LT50aHJlYWQub2xkX2sxKTsKLX0KLQotdm9pZAotaWEzMl9sb2FkX3N0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCi17Ci0JdW5zaWduZWQgbG9uZyBlZmxhZywgZnNyLCBmY3IsIGZpciwgZmRyLCB0c3NkOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHQpOwotCi0JZWZsYWcgPSB0LT50aHJlYWQuZWZsYWc7Ci0JZnNyID0gdC0+dGhyZWFkLmZzcjsKLQlmY3IgPSB0LT50aHJlYWQuZmNyOwotCWZpciA9IHQtPnRocmVhZC5maXI7Ci0JZmRyID0gdC0+dGhyZWFkLmZkcjsKLQl0c3NkID0gbG9hZF9kZXNjKF9UU1MpOwkJCQkJLyogVFNTRCAqLwotCi0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0VGTEFHLCBlZmxhZyk7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUiwgZnNyKTsKLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRkNSLCBmY3IpOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GSVIsIGZpcik7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZEUiwgZmRyKTsKLQljdXJyZW50LT50aHJlYWQub2xkX2lvYiA9IGlhNjRfZ2V0X2tyKElBNjRfS1JfSU9fQkFTRSk7Ci0JY3VycmVudC0+dGhyZWFkLm9sZF9rMSA9IGlhNjRfZ2V0X2tyKElBNjRfS1JfVFNTRCk7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBJQTMyX0lPQkFTRSk7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9UU1NELCB0c3NkKTsKLQotCXJlZ3MtPnIxNyA9IChfVFNTIDw8IDQ4KSB8IChfTERUIDw8IDMyKSB8IChfX3UzMikgcmVncy0+cjE3OwotCXJlZ3MtPnIzMCA9IGxvYWRfZGVzYyhfTERUKTsJCQkJLyogTERURCAqLwotCWxvYWRfVExTKCZ0LT50aHJlYWQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci19Ci0KLS8qCi0gKiBTZXR1cCBJQTMyIEdEVCBhbmQgVFNTCi0gKi8KLXZvaWQKLWlhMzJfZ2R0X2luaXQgKHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlhMzJfc2hhcmVkX3BhZ2VbY3B1XSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpYTMyX3NoYXJlZF9wYWdlW2NwdV0pCi0JCXBhbmljKCJmYWlsZWQgdG8gYWxsb2NhdGUgaWEzMl9zaGFyZWRfcGFnZVslZF1cbiIsIGNwdSk7Ci0KLQljcHVfZ2R0X3RhYmxlW2NwdV0gPSBwYWdlX2FkZHJlc3MoaWEzMl9zaGFyZWRfcGFnZVtjcHVdKTsKLQotCS8qIENvcHkgZnJvbSB0aGUgYm9vdCBjcHUncyBHRFQgKi8KLQltZW1jcHkoY3B1X2dkdF90YWJsZVtjcHVdLCBpYTMyX2Jvb3RfZ2R0LCBQQUdFX1NJWkUpOwotfQotCi0KLS8qCi0gKiBTZXR1cCBJQTMyIEdEVCBhbmQgVFNTCi0gKi8KLXN0YXRpYyB2b2lkCi1pYTMyX2Jvb3RfZ2R0X2luaXQgKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBsZHRfc2l6ZTsKLQotCWlhMzJfc2hhcmVkX3BhZ2VbMF0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghaWEzMl9zaGFyZWRfcGFnZVswXSkKLQkJcGFuaWMoImZhaWxlZCB0byBhbGxvY2F0ZSBpYTMyX3NoYXJlZF9wYWdlWzBdXG4iKTsKLQotCWlhMzJfYm9vdF9nZHQgPSBwYWdlX2FkZHJlc3MoaWEzMl9zaGFyZWRfcGFnZVswXSk7Ci0JY3B1X2dkdF90YWJsZVswXSA9IGlhMzJfYm9vdF9nZHQ7Ci0KLQkvKiBDUyBkZXNjcmlwdG9yIGluIElBLTMyIChzY3JhbWJsZWQpIGZvcm1hdCAqLwotCWlhMzJfYm9vdF9nZHRbX19VU0VSX0NTID4+IDNdCi0JCT0gSUEzMl9TRUdfREVTQ1JJUFRPUigwLCAoSUEzMl9HQVRFX0VORC0xKSA+PiBJQTMyX1BBR0VfU0hJRlQsCi0JCQkJICAgICAgMHhiLCAxLCAzLCAxLCAxLCAxLCAxKTsKLQotCS8qIERTIGRlc2NyaXB0b3IgaW4gSUEtMzIgKHNjcmFtYmxlZCkgZm9ybWF0ICovCi0JaWEzMl9ib290X2dkdFtfX1VTRVJfRFMgPj4gM10KLQkJPSBJQTMyX1NFR19ERVNDUklQVE9SKDAsIChJQTMyX0dBVEVfRU5ELTEpID4+IElBMzJfUEFHRV9TSElGVCwKLQkJCQkgICAgICAweDMsIDEsIDMsIDEsIDEsIDEsIDEpOwotCi0JbGR0X3NpemUgPSBQQUdFX0FMSUdOKElBMzJfTERUX0VOVFJJRVMqSUEzMl9MRFRfRU5UUllfU0laRSk7Ci0JaWEzMl9ib290X2dkdFtUU1NfRU5UUlldID0gSUEzMl9TRUdfREVTQ1JJUFRPUihJQTMyX1RTU19PRkZTRVQsIDIzNSwKLQkJCQkJCSAgICAgICAweGIsIDAsIDMsIDEsIDEsIDEsIDApOwotCWlhMzJfYm9vdF9nZHRbTERUX0VOVFJZXSA9IElBMzJfU0VHX0RFU0NSSVBUT1IoSUEzMl9MRFRfT0ZGU0VULCBsZHRfc2l6ZSAtIDEsCi0JCQkJCQkgICAgICAgMHgyLCAwLCAzLCAxLCAxLCAxLCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWlhMzJfZ2F0ZV9wYWdlX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nICpzcjsKLQotCWlhMzJfZ2F0ZV9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQlzciA9IHBhZ2VfYWRkcmVzcyhpYTMyX2dhdGVfcGFnZSk7Ci0JLyogVGhpcyBpcyBwb3BsICVlYXggOyBtb3ZsICQsJWVheCA7IGludCAkMHg4MCAqLwotCSpzcisrID0gMHhiODU4IHwgKF9fSUEzMl9OUl9zaWdyZXR1cm4gPDwgMTYpIHwgKDB4ODBjZFVMIDw8IDQ4KTsKLQotCS8qIFRoaXMgaXMgbW92bCAkLCVlYXggOyBpbnQgJDB4ODAgKi8KLQkqc3IgPSAweGI4IHwgKF9fSUEzMl9OUl9ydF9zaWdyZXR1cm4gPDwgOCkgfCAoMHg4MGNkVUwgPDwgNDApOwotfQotCi12b2lkCi1pYTMyX21lbV9pbml0KHZvaWQpCi17Ci0JaWEzMl9ib290X2dkdF9pbml0KCk7Ci0JaWEzMl9nYXRlX3BhZ2VfaW5pdCgpOwotfQotCi0vKgotICogSGFuZGxlIGJhZCBJQTMyIGludGVycnVwdCB2aWEgc3lzY2FsbAotICovCi12b2lkCi1pYTMyX2JhZF9pbnRlcnJ1cHQgKHVuc2lnbmVkIGxvbmcgaW50X251bSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2lnaW5mb190IHNpZ2luZm87Ci0KLQlpZiAoZGllX2lmX2tlcm5lbCgiQmFkIElBLTMyIGludGVycnVwdCIsIHJlZ3MsIGludF9udW0pKQotCQlyZXR1cm47Ci0KLQlzaWdpbmZvLnNpX3NpZ25vID0gU0lHVFJBUDsKLQlzaWdpbmZvLnNpX2Vycm5vID0gaW50X251bTsJLyogWFhYIGlzIGl0IE9LIHRvIGFidXNlIHNpX2Vycm5vIGxpa2UgdGhpcz8gKi8KLQlzaWdpbmZvLnNpX2ZsYWdzID0gMDsKLQlzaWdpbmZvLnNpX2lzciA9IDA7Ci0Jc2lnaW5mby5zaV9hZGRyID0gTlVMTDsKLQlzaWdpbmZvLnNpX2ltbSA9IDA7Ci0Jc2lnaW5mby5zaV9jb2RlID0gVFJBUF9CUktQVDsKLQlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmc2lnaW5mbywgY3VycmVudCk7Ci19Ci0KLXZvaWQKLWlhMzJfY3B1X2luaXQgKHZvaWQpCi17Ci0JLyogaW5pdGlhbGl6ZSBnbG9iYWwgaWEzMiBzdGF0ZSAtIENSMCBhbmQgQ1I0ICovCi0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0NGTEFHLCAoKCh1bG9uZykgSUEzMl9DUjQgPDwgMzIpIHwgSUEzMl9DUjApKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWlhMzJfaW5pdCAodm9pZCkKLXsKLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi0JewotCQlleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcDsKLQotCQlpYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaWE2NF9wYXJ0aWFsX3BhZ2VfY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlKSwKLQkJCQkJMCwgU0xBQl9QQU5JQywgTlVMTCk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoaWEzMl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfdHJhcHMuYyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfdHJhcHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ4NjA0Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3RyYXBzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIElBLTMyIGV4Y2VwdGlvbiBoYW5kbGVycwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBBc2l0IEsuIE1hbGxpY2sgPGFzaXQuay5tYWxsaWNrQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEhld2xldHQtUGFja2FyZCBDbwotICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotICoKLSAqIDA2LzE2LzAwCUEuIE1hbGxpY2sJYWRkZWQgc2lnaW5mbyBmb3IgbW9zdCBjYXNlcyAoY2xvc2UgdG8gSUEzMikKLSAqIDA5LzI5LzAwCUQuIE1vc2JlcmdlcglhZGRlZCBpYTMyX2ludGVyY2VwdCgpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlICJpYTMycHJpdi5oIgotCi0jaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLWludAotaWEzMl9pbnRlcmNlcHQgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlzcikKLXsKLQlzd2l0Y2ggKChpc3IgPj4gMTYpICYgMHhmZikgewotCSAgICAgIGNhc2UgMDoJLyogSW5zdHJ1Y3Rpb24gaW50ZXJjZXB0IGZhdWx0ICovCi0JICAgICAgY2FzZSA0OgkvKiBMb2NrZWQgRGF0YSByZWZlcmVuY2UgZmF1bHQgKi8KLQkgICAgICBjYXNlIDE6CS8qIEdhdGUgaW50ZXJjZXB0IHRyYXAgKi8KLQkJcmV0dXJuIC0xOwotCi0JICAgICAgY2FzZSAyOgkvKiBTeXN0ZW0gZmxhZyB0cmFwICovCi0JCWlmICgoKGlzciA+PiAxNCkgJiAweDMpID49IDIpIHsKLQkJCS8qIE1PViBTUywgUE9QIFNTIGluc3RydWN0aW9ucyAqLwotCQkJaWE2NF9wc3IocmVncyktPmlkID0gMTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UKLQkJCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQKLWlhMzJfZXhjZXB0aW9uIChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBpc3IpCi17Ci0Jc3RydWN0IHNpZ2luZm8gc2lnaW5mbzsKLQotCS8qIGluaXRpYWxpemUgdGhlc2UgZmllbGRzIHRvIGF2b2lkIGxlYWtpbmcga2VybmVsIGJpdHMgdG8gdXNlciBzcGFjZTogKi8KLQlzaWdpbmZvLnNpX2Vycm5vID0gMDsKLQlzaWdpbmZvLnNpX2ZsYWdzID0gMDsKLQlzaWdpbmZvLnNpX2lzciA9IDA7Ci0Jc2lnaW5mby5zaV9pbW0gPSAwOwotCXN3aXRjaCAoKGlzciA+PiAxNikgJiAweGZmKSB7Ci0JICAgICAgY2FzZSAxOgotCSAgICAgIGNhc2UgMjoKLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7Ci0JCWlmIChpc3IgPT0gMCkKLQkJCXNpZ2luZm8uc2lfY29kZSA9IFRSQVBfVFJBQ0U7Ci0JCWVsc2UgaWYgKGlzciAmIDB4NCkKLQkJCXNpZ2luZm8uc2lfY29kZSA9IFRSQVBfQlJBTkNIOwotCQllbHNlCi0JCQlzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSS1BUOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgMzoKLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7Ci0JCXNpZ2luZm8uc2lfY29kZSA9IFRSQVBfQlJLUFQ7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSAwOgkvKiBEaXZpZGUgZmF1bHQgKi8KLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKLQkJc2lnaW5mby5zaV9jb2RlID0gRlBFX0lOVERJVjsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDQ6CS8qIE92ZXJmbG93ICovCi0JICAgICAgY2FzZSA1OgkvKiBCb3VuZHMgZmF1bHQgKi8KLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKLQkJc2lnaW5mby5zaV9jb2RlID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDY6CS8qIEludmFsaWQgT3AtY29kZSAqLwotCQlzaWdpbmZvLnNpX3NpZ25vID0gU0lHSUxMOwotCQlzaWdpbmZvLnNpX2NvZGUgPSBJTExfSUxMT1BOOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgNzoJLyogRlAgRE5BICovCi0JICAgICAgY2FzZSA4OgkvKiBEb3VibGUgRmF1bHQgKi8KLQkgICAgICBjYXNlIDk6CS8qIEludmFsaWQgVFNTICovCi0JICAgICAgY2FzZSAxMToJLyogU2VnbWVudCBub3QgcHJlc2VudCAqLwotCSAgICAgIGNhc2UgMTI6CS8qIFN0YWNrIGZhdWx0ICovCi0JICAgICAgY2FzZSAxMzoJLyogR2VuZXJhbCBQcm90ZWN0aW9uIEZhdWx0ICovCi0JCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdTRUdWOwotCQlzaWdpbmZvLnNpX2NvZGUgPSAwOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgMTY6CS8qIFBlbmRpbmcgRlAgZXJyb3IgKi8KLQkJewotCQkJdW5zaWduZWQgbG9uZyBmc3IsIGZjcjsKLQotCQkJZnNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUik7Ci0JCQlmY3IgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRkNSKTsKLQotCQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKLQkJCS8qCi0JCQkgKiAofmN3ZCAmIHN3ZCkgd2lsbCBtYXNrIG91dCBleGNlcHRpb25zIHRoYXQgYXJlIG5vdCBzZXQgdG8gdW5tYXNrZWQKLQkJCSAqIHN0YXR1cy4gIDB4M2YgaXMgdGhlIGV4Y2VwdGlvbiBiaXRzIGluIHRoZXNlIHJlZ3MsIDB4MjAwIGlzIHRoZQotCQkJICogQzEgcmVnIHlvdSBuZWVkIGluIGNhc2Ugb2YgYSBzdGFjayBmYXVsdCwgMHgwNDAgaXMgdGhlIHN0YWNrCi0JCQkgKiBmYXVsdCBiaXQuICBXZSBzaG91bGQgb25seSBiZSB0YWtpbmcgb25lIGV4Y2VwdGlvbiBhdCBhIHRpbWUsCi0JCQkgKiBzbyBpZiB0aGlzIGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBhbnkgc2luZ2xlIGV4Y2VwdGlvbiwKLQkJCSAqIHRoZW4gd2UgaGF2ZSBhIGJhZCBwcm9ncmFtIHRoYXQgaXNuJ3Qgc3luY2hyb25pemluZyBpdHMgRlBVIHVzYWdlCi0JCQkgKiBhbmQgaXQgd2lsbCBzdWZmZXIgdGhlIGNvbnNlcXVlbmNlcyBzaW5jZSB3ZSB3b24ndCBiZSBhYmxlIHRvCi0JCQkgKiBmdWxseSByZXByb2R1Y2UgdGhlIGNvbnRleHQgb2YgdGhlIGV4Y2VwdGlvbgotCQkJICovCi0JCQlzaWdpbmZvLnNpX2lzciA9IGlzcjsKLQkJCXNpZ2luZm8uc2lfZmxhZ3MgPSBfX0lTUl9WQUxJRDsKLQkJCXN3aXRjaCgoKH5mY3IpICYgKGZzciAmIDB4M2YpKSB8IChmc3IgJiAweDI0MCkpIHsKLQkJCQljYXNlIDB4MDAwOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXNpZ2luZm8uc2lfY29kZSA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMDE6IC8qIEludmFsaWQgT3AgKi8KLQkJCQljYXNlIDB4MDQwOiAvKiBTdGFjayBGYXVsdCAqLwotCQkJCWNhc2UgMHgyNDA6IC8qIFN0YWNrIEZhdWx0IHwgRGlyZWN0aW9uICovCi0JCQkJCXNpZ2luZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCi0JCQkJY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCi0JCQkJCXNpZ2luZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCi0JCQkJCXNpZ2luZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCi0JCQkJCXNpZ2luZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLwotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOwotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQotCSAgICAgIGNhc2UgMTc6CS8qIEFsaWdubWVudCBjaGVjayAqLwotCQlzaWdpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKLQkJc2lnaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDE5OgkvKiBTU0UgTnVtZXJpYyBlcnJvciAqLwotCQlzaWdpbmZvLnNpX3NpZ25vID0gU0lHRlBFOwotCQlzaWdpbmZvLnNpX2NvZGUgPSAwOwotCQlicmVhazsKLQotCSAgICAgIGRlZmF1bHQ6Ci0JCXJldHVybiAtMTsKLQl9Ci0JZm9yY2Vfc2lnX2luZm8oc2lnaW5mby5zaV9zaWdubywgJnNpZ2luZm8sIGN1cnJlbnQpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaCBiL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMTUzNDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzMiArMCwwIEBACi0jaWZuZGVmIF9BU01fSUE2NF9JQTMyX1BSSVZfSAotI2RlZmluZSBfQVNNX0lBNjRfSUEzMl9QUklWX0gKLQotCi0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KLQotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQotI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotLyoKLSAqIDMyIGJpdCBzdHJ1Y3R1cmVzIGZvciBJQTMyIHN1cHBvcnQuCi0gKi8KLQotI2RlZmluZSBJQTMyX1BBR0VfU0laRQkJKDFVTCA8PCBJQTMyX1BBR0VfU0hJRlQpCi0jZGVmaW5lIElBMzJfUEFHRV9NQVNLCQkofihJQTMyX1BBR0VfU0laRSAtIDEpKQotI2RlZmluZSBJQTMyX1BBR0VfQUxJR04oYWRkcikJKCgoYWRkcikgKyBJQTMyX1BBR0VfU0laRSAtIDEpICYgSUEzMl9QQUdFX01BU0spCi0jZGVmaW5lIElBMzJfQ0xPQ0tTX1BFUl9TRUMJMTAwCS8qIENhc3QgaW4gc3RvbmUgZm9yIElBMzIgTGludXggKi8KLQotLyoKLSAqIHBhcnRpYWxseSBtYXBwZWQgcGFnZXMgcHJvdmlkZSBwcmVjaXNlIGFjY291bnRpbmcgb2Ygd2hpY2ggNGsgc3ViIHBhZ2VzCi0gKiBhcmUgbWFwcGVkIGFuZCB3aGljaCBvbmVzIGFyZSBub3QsIHRoZXJlYnkgaW1wcm92aW5nIElBLTMyIGNvbXBhdGliaWxpdHkuCi0gKi8KLXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSB7Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpuZXh0OyAvKiBsaW5rZWQgbGlzdCwgc29ydGVkIGJ5IGFkZHJlc3MgKi8KLQlzdHJ1Y3QgcmJfbm9kZQkJcHBfcmI7Ci0JLyogNjRLIGlzIHRoZSBsYXJnZXN0ICJub3JtYWwiIHBhZ2Ugc3VwcG9ydGVkIGJ5IGlhNjQgQUJJLiBTbyA0Syo2NAotCSAqIHNob3VsZCBzdWZmaWNlLiovCi0JdW5zaWduZWQgbG9uZwkJYml0bWFwOwotCXVuc2lnbmVkIGludAkJYmFzZTsKLX07Ci0KLXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0IHsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwX2hlYWQ7IC8qIGxpc3QgaGVhZCwgcG9pbnRzIHRvIHRoZSBsb3dlc3QKLQkJCQkJICAgKiBhZGRyZXNzZWQgcGFydGlhbCBwYWdlICovCi0Jc3RydWN0IHJiX3Jvb3QJCXBwbF9yYjsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwX2hpbnQ7IC8qIHBwX2hpbnQtPm5leHQgaXMgdGhlIGxhc3QKLQkJCQkJICAgKiBhY2Nlc3NlZCBwYXJ0aWFsIHBhZ2UgKi8KLQlhdG9taWNfdAkJcHBfY291bnQ7IC8qIHJlZmVyZW5jZSBjb3VudCAqLwotfTsKLQotI2lmIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQKLXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0KiBpYTMyX2luaXRfcHBfbGlzdCAodm9pZCk7Ci0jZWxzZQotIyBkZWZpbmUgaWEzMl9pbml0X3BwX2xpc3QoKQkwCi0jZW5kaWYKLQotLyogc2lnY29udGV4dC5oICovCi0vKgotICogQXMgZG9jdW1lbnRlZCBpbiB0aGUgaUJDUzIgc3RhbmRhcmQuLgotICoKLSAqIFRoZSBmaXJzdCBwYXJ0IG9mICJzdHJ1Y3QgX2Zwc3RhdGUiIGlzIGp1c3QgdGhlCi0gKiBub3JtYWwgaTM4NyBoYXJkd2FyZSBzZXR1cCwgdGhlIGV4dHJhICJzdGF0dXMiCi0gKiB3b3JkIGlzIHVzZWQgdG8gc2F2ZSB0aGUgY29wcm9jZXNzb3Igc3RhdHVzIHdvcmQKLSAqIGJlZm9yZSBlbnRlcmluZyB0aGUgaGFuZGxlci4KLSAqLwotc3RydWN0IF9mcHJlZ19pYTMyIHsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKLX07Ci0KLXN0cnVjdCBfZnB4cmVnX2lhMzIgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZGRpbmdbM107Ci19OwotCi1zdHJ1Y3QgX3htbXJlZ19pYTMyIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRbNF07Ci19OwotCi0KLXN0cnVjdCBfZnBzdGF0ZV9pYTMyIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgICAgY3csCi0JCSAgICAgICBzdywKLQkJICAgICAgIHRhZywKLQkJICAgICAgIGlwb2ZmLAotCQkgICAgICAgY3NzZWwsCi0JCSAgICAgICBkYXRhb2ZmLAotCQkgICAgICAgZGF0YXNlbDsKLSAgICAgICBzdHJ1Y3QgX2ZwcmVnX2lhMzIgICAgICBfc3RbOF07Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgIHN0YXR1czsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCAgbWFnaWM7ICAgICAgICAgIC8qIDB4ZmZmZiA9IHJlZ3VsYXIgRlBVIGRhdGEgb25seSAqLwotCi0gICAgICAgLyogRlhTUiBGUFUgZW52aXJvbm1lbnQgKi8KLSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICBfZnhzcl9lbnZbNl07ICAgLyogRlhTUiBGUFUgZW52IGlzIGlnbm9yZWQgKi8KLSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICBteGNzcjsKLSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICByZXNlcnZlZDsKLSAgICAgICBzdHJ1Y3QgX2ZweHJlZ19pYTMyICBfZnhzcl9zdFs4XTsgICAgLyogRlhTUiBGUFUgcmVnIGRhdGEgaXMgaWdub3JlZCAqLwotICAgICAgIHN0cnVjdCBfeG1tcmVnX2lhMzIgIF94bW1bOF07Ci0gICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgcGFkZGluZ1s1Nl07Ci19OwotCi1zdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwotICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7Ci0gICAgICAgdW5zaWduZWQgaW50IGVkaTsKLSAgICAgICB1bnNpZ25lZCBpbnQgZXNpOwotICAgICAgIHVuc2lnbmVkIGludCBlYnA7Ci0gICAgICAgdW5zaWduZWQgaW50IGVzcDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWJ4OwotICAgICAgIHVuc2lnbmVkIGludCBlZHg7Ci0gICAgICAgdW5zaWduZWQgaW50IGVjeDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWF4OwotICAgICAgIHVuc2lnbmVkIGludCB0cmFwbm87Ci0gICAgICAgdW5zaWduZWQgaW50IGVycjsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWlwOwotICAgICAgIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWZsYWdzOwotICAgICAgIHVuc2lnbmVkIGludCBlc3BfYXRfc2lnbmFsOwotICAgICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZnBzdGF0ZTsJCS8qIHJlYWxseSAoc3RydWN0IF9mcHN0YXRlX2lhMzIgKikgKi8KLSAgICAgICB1bnNpZ25lZCBpbnQgb2xkbWFzazsKLSAgICAgICB1bnNpZ25lZCBpbnQgY3IyOwotfTsKLQotLyogdXNlci5oICovCi0vKgotICogSUEzMiAoUGVudGl1bSBJSUkvNCkgRlhTUiwgU1NFIHN1cHBvcnQKLSAqCi0gKiBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHREIgNS4wKyBQVFJBQ0Vfe0dFVHxTRVR9RlBYUkVHUyByZXF1ZXN0cyBmb3IKLSAqIGludGVyYWN0aW5nIHdpdGggdGhlIEZYU1ItZm9ybWF0IGZsb2F0aW5nIHBvaW50IGVudmlyb25tZW50LiAgRmxvYXRpbmcKLSAqIHBvaW50IGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGluIHRoZSByZWd1bGFyIGZvcm1hdCBpbiB0aGUgdXN1YWwgbWFubmVyLAotICogYW5kIGJvdGggdGhlIHN0YW5kYXJkIGFuZCBTSU1EIGZsb2F0aW5nIHBvaW50IGRhdGEgY2FuIGJlIGFjY2Vzc2VkIHZpYQotICogdGhlIG5ldyBwdHJhY2UgcmVxdWVzdHMuICBJbiBlaXRoZXIgY2FzZSwgY2hhbmdlcyB0byB0aGUgRlBVIGVudmlyb25tZW50Ci0gKiB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgdGFzaydzIHN0YXRlIGFzIGV4cGVjdGVkLgotICovCi1zdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IHsKLQlpbnQJY3dkOwotCWludAlzd2Q7Ci0JaW50CXR3ZDsKLQlpbnQJZmlwOwotCWludAlmY3M7Ci0JaW50CWZvbzsKLQlpbnQJZm9zOwotCS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KLQlzdHJ1Y3QgX2ZwcmVnX2lhMzIgCXN0X3NwYWNlWzhdOwotfTsKLQotc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQJY3dkOwotCXVuc2lnbmVkIHNob3J0CXN3ZDsKLQl1bnNpZ25lZCBzaG9ydAl0d2Q7Ci0JdW5zaWduZWQgc2hvcnQJZm9wOwotCWludAlmaXA7Ci0JaW50CWZjczsKLQlpbnQJZm9vOwotCWludAlmb3M7Ci0JaW50CW14Y3NyOwotCWludAlyZXNlcnZlZDsKLQlpbnQJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLwotCWludAl4bW1fc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIFhNTS1yZWcgPSAxMjggYnl0ZXMgKi8KLQlpbnQJcGFkZGluZ1s1Nl07Ci19OwotCi0vKiBzaWduYWwuaCAqLwotI2RlZmluZSBJQTMyX1NFVF9TQV9IQU5ETEVSKGthLGhhbmRsZXIscmVzdG9yZXIpCQkJCVwKLQkJCQkoKGthKS0+c2Euc2FfaGFuZGxlciA9IChfX3NpZ2hhbmRsZXJfdCkJCVwKLQkJCQkJKCgodW5zaWduZWQgbG9uZykocmVzdG9yZXIpIDw8IDMyKQlcCi0JCQkJCSB8ICgoaGFuZGxlcikgJiAweGZmZmZmZmZmKSkpCi0jZGVmaW5lIElBMzJfU0FfSEFORExFUihrYSkJKCh1bnNpZ25lZCBsb25nKSAoa2EpLT5zYS5zYV9oYW5kbGVyICYgMHhmZmZmZmZmZikKLSNkZWZpbmUgSUEzMl9TQV9SRVNUT1JFUihrYSkJKCh1bnNpZ25lZCBsb25nKSAoa2EpLT5zYS5zYV9oYW5kbGVyID4+IDMyKQotCi0jZGVmaW5lIF9fSUEzMl9OUl9zaWdyZXR1cm4gMTE5Ci0jZGVmaW5lIF9fSUEzMl9OUl9ydF9zaWdyZXR1cm4gMTczCi0KLXN0cnVjdCBzaWdhY3Rpb24zMiB7Ci0gICAgICAgdW5zaWduZWQgaW50IHNhX2hhbmRsZXI7CQkvKiBSZWFsbHkgYSBwb2ludGVyLCBidXQgbmVlZCB0byBkZWFsIHdpdGggMzIgYml0cyAqLwotICAgICAgIHVuc2lnbmVkIGludCBzYV9mbGFnczsKLSAgICAgICB1bnNpZ25lZCBpbnQgc2FfcmVzdG9yZXI7CS8qIEFub3RoZXIgMzIgYml0IHBvaW50ZXIgKi8KLSAgICAgICBjb21wYXRfc2lnc2V0X3Qgc2FfbWFzazsJCS8qIEEgMzIgYml0IG1hc2sgKi8KLX07Ci0KLXN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgewotICAgICAgIHVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAotCQkJCQkgICAgIHdpdGggMzIgYml0cyAqLwotICAgICAgIGNvbXBhdF9vbGRfc2lnc2V0X3Qgc2FfbWFzazsJCS8qIEEgMzIgYml0IG1hc2sgKi8KLSAgICAgICB1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7Ci0gICAgICAgdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFja19pYTMyIHsKLQl1bnNpZ25lZCBpbnQJc3Nfc3A7Ci0JaW50CQlzc19mbGFnczsKLQl1bnNpZ25lZCBpbnQJc3Nfc2l6ZTsKLX0gc3RhY2tfaWEzMl90OwotCi1zdHJ1Y3QgdWNvbnRleHRfaWEzMiB7Ci0JdW5zaWduZWQgaW50CSAgdWNfZmxhZ3M7Ci0JdW5zaWduZWQgaW50CSAgdWNfbGluazsKLQlzdGFja19pYTMyX3QJICB1Y19zdGFjazsKLQlzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIHVjX21jb250ZXh0OwotCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi1zdHJ1Y3Qgc3RhdDY0IHsKLQl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OwotCXVuc2lnbmVkIGNoYXIJX19wYWQwWzRdOwotCXVuc2lnbmVkIGludAlfX3N0X2lubzsKLQl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKLQl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7Ci0JdW5zaWduZWQgaW50CXN0X3VpZDsKLQl1bnNpZ25lZCBpbnQJc3RfZ2lkOwotCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9yZGV2OwotCXVuc2lnbmVkIGNoYXIJX19wYWQzWzRdOwotCXVuc2lnbmVkIGludAlzdF9zaXplX2xvOwotCXVuc2lnbmVkIGludAlzdF9zaXplX2hpOwotCXVuc2lnbmVkIGludAlzdF9ibGtzaXplOwotCXVuc2lnbmVkIGludAlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLwotCXVuc2lnbmVkIGludAlfX3BhZDQ7CQkvKiBmdXR1cmUgcG9zc2libGUgc3RfYmxvY2tzIGhpZ2ggYml0cyAqLwotCXVuc2lnbmVkIGludAlzdF9hdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKLQl1bnNpZ25lZCBpbnQJc3RfbXRpbWU7Ci0JdW5zaWduZWQgaW50CXN0X210aW1lX25zZWM7Ci0JdW5zaWduZWQgaW50CXN0X2N0aW1lOwotCXVuc2lnbmVkIGludAlzdF9jdGltZV9uc2VjOwotCXVuc2lnbmVkIGludAlzdF9pbm9fbG87Ci0JdW5zaWduZWQgaW50CXN0X2lub19oaTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGNvbXBhdF9zaWdpbmZvIHsKLQlpbnQgc2lfc2lnbm87Ci0JaW50IHNpX2Vycm5vOwotCWludCBzaV9jb2RlOwotCi0JdW5pb24gewotCQlpbnQgX3BhZFsoKDEyOC9zaXplb2YoaW50KSkgLSAzKV07Ci0KLQkJLyoga2lsbCgpICovCi0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBpbnQgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQl1bnNpZ25lZCBpbnQgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX2tpbGw7Ci0KLQkJLyogUE9TSVguMWIgdGltZXJzICovCi0JCXN0cnVjdCB7Ci0JCQljb21wYXRfdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNoYXIgX3BhZFtzaXplb2YodW5zaWduZWQgaW50KSAtIHNpemVvZihpbnQpXTsKLQkJCWNvbXBhdF9zaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQkJY29tcGF0X3NpZ3ZhbF90IF9zaWd2YWw7Ci0JCX0gX3J0OwotCi0JCS8qIFNJR0NITEQgKi8KLQkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNvbXBhdF9jbG9ja190IF91dGltZTsKLQkJCWNvbXBhdF9jbG9ja190IF9zdGltZTsKLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBpbnQgX2FkZHI7CS8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KLQkJfSBfc2lnZmF1bHQ7Ci0KLQkJLyogU0lHUE9MTCAqLwotCQlzdHJ1Y3QgewotCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KLQkJCWludCBfZmQ7Ci0JCX0gX3NpZ3BvbGw7Ci0JfSBfc2lmaWVsZHM7Ci19IGNvbXBhdF9zaWdpbmZvX3Q7Ci0KLS8qCi0gKiBJQS0zMiBFTEYgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIElBLTY0LgotICovCi0KLSNkZWZpbmUgX0FTTV9JQTY0X0VMRl9ICQkvKiBEb24ndCBpbmNsdWRlIGVsZi5oICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fMzg2KQotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKLSNkZWZpbmUgRUxGX0FSQ0gJRU1fMzg2Ci0KLSNkZWZpbmUgSUEzMl9TVEFDS19UT1AJCUlBMzJfUEFHRV9PRkZTRVQKLSNkZWZpbmUgSUEzMl9HQVRFX09GRlNFVAlJQTMyX1BBR0VfT0ZGU0VUCi0jZGVmaW5lIElBMzJfR0FURV9FTkQJCUlBMzJfUEFHRV9PRkZTRVQgKyBQQUdFX1NJWkUKLQotLyoKLSAqIFRoZSBzeXN0ZW0gc2VnbWVudHMgKEdEVCwgVFNTLCBMRFQpIGhhdmUgdG8gYmUgbWFwcGVkIGJlbG93IDRHQiBzbyB0aGUgSUEtMzIgZW5naW5lIGNhbgotICogYWNjZXNzIHRoZW0uCi0gKi8KLSNkZWZpbmUgSUEzMl9HRFRfT0ZGU0VUCQkoSUEzMl9QQUdFX09GRlNFVCArIFBBR0VfU0laRSkKLSNkZWZpbmUgSUEzMl9UU1NfT0ZGU0VUCQkoSUEzMl9QQUdFX09GRlNFVCArIDIqUEFHRV9TSVpFKQotI2RlZmluZSBJQTMyX0xEVF9PRkZTRVQJCShJQTMyX1BBR0VfT0ZGU0VUICsgMypQQUdFX1NJWkUpCi0KLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJSUEzMl9QQUdFX1NJWkUKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuCi0gKiBUeXBpY2FsIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYQotICogbmV3IHZlcnNpb24gb2YgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mCi0gKiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzCi0gKiBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuCi0gKi8KLSNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoSUEzMl9QQUdFX09GRlNFVC8zICsgMHgxMDAwMDAwKQotCi12b2lkIGlhNjRfZWxmMzJfaW5pdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJaWE2NF9lbGYzMl9pbml0KF9yKQotCi0vKiBUaGlzIG1hY3JvIHlpZWxkcyBhIGJpdG1hc2sgdGhhdCBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQKLSAgIHdoYXQgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAgKi8KLSNkZWZpbmUgRUxGX0hXQ0FQCTAKLQotLyogVGhpcyBtYWNybyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkCi0gICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIE5vdCB0ZXJyaWJseQotICAgcmVsZXZhbnQgdW50aWwgd2UgaGF2ZSByZWFsIGhhcmR3YXJlIHRvIHBsYXkgd2l0aC4uLiAqLwotI2RlZmluZSBFTEZfUExBVEZPUk0JTlVMTAotCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKEVYKQkJCQlcCi0JKGN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYKQotI2VuZGlmCi0KLSNkZWZpbmUgSUEzMl9FRkxBRwkweDIwMAotCi0vKgotICogSUEtMzIgRUxGIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBJQS02NC4KLSAqLwotCi0jZGVmaW5lIF9fVVNFUl9DUyAgICAgIDB4MjMKLSNkZWZpbmUgX19VU0VSX0RTICAgICAgMHgyQgotCi0vKgotICogVGhlIHBlci1jcHUgR0RUIGhhcyAzMiBlbnRyaWVzOiBzZWUgPGFzbS1pMzg2L3NlZ21lbnQuaD4KLSAqLwotI2RlZmluZSBHRFRfRU5UUklFUyAzMgotCi0jZGVmaW5lIEdEVF9TSVpFCShHRFRfRU5UUklFUyAqIDgpCi0KLSNkZWZpbmUgVFNTX0VOVFJZIDE0Ci0jZGVmaW5lIExEVF9FTlRSWQkoVFNTX0VOVFJZICsgMSkKLQotI2RlZmluZSBJQTMyX1NFR1NFTF9SUEwJCSgweDMgPDwgMCkKLSNkZWZpbmUgSUEzMl9TRUdTRUxfVEkJCSgweDEgPDwgMikKLSNkZWZpbmUgSUEzMl9TRUdTRUxfSU5ERVhfU0hJRlQJMwotCi0jZGVmaW5lIF9UU1MJCQkoKHVuc2lnbmVkIGxvbmcpIFRTU19FTlRSWSA8PCBJQTMyX1NFR1NFTF9JTkRFWF9TSElGVCkKLSNkZWZpbmUgX0xEVAkJCSgodW5zaWduZWQgbG9uZykgTERUX0VOVFJZIDw8IElBMzJfU0VHU0VMX0lOREVYX1NISUZUKQotCi0jZGVmaW5lIElBMzJfU0VHX0JBU0UJCTE2Ci0jZGVmaW5lIElBMzJfU0VHX1RZUEUJCTQwCi0jZGVmaW5lIElBMzJfU0VHX1NZUwkJNDQKLSNkZWZpbmUgSUEzMl9TRUdfRFBMCQk0NQotI2RlZmluZSBJQTMyX1NFR19QCQk0NwotI2RlZmluZSBJQTMyX1NFR19ISUdIX0xJTUlUCTQ4Ci0jZGVmaW5lIElBMzJfU0VHX0FWTAkJNTIKLSNkZWZpbmUgSUEzMl9TRUdfREIJCTU0Ci0jZGVmaW5lIElBMzJfU0VHX0cJCTU1Ci0jZGVmaW5lIElBMzJfU0VHX0hJR0hfQkFTRQk1NgotCi0jZGVmaW5lIElBMzJfU0VHX0RFU0NSSVBUT1IoYmFzZSwgbGltaXQsIHNlZ3R5cGUsIG5vbnN5c3NlZywgZHBsLCBzZWdwcmVzZW50LCBhdmwsIHNlZ2RiLCBncmFuKQlcCi0JICAgICAgICgoKGxpbWl0KSAmIDB4ZmZmZikJCQkJCQkJCVwKLQkJfCAoKCh1bnNpZ25lZCBsb25nKSAoYmFzZSkgJiAweGZmZmZmZikgPDwgSUEzMl9TRUdfQkFTRSkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoc2VndHlwZSkgPDwgSUEzMl9TRUdfVFlQRSkJCQkJCVwKLQkJfCAoKHVuc2lnbmVkIGxvbmcpIChub25zeXNzZWcpIDw8IElBMzJfU0VHX1NZUykJCQkJCVwKLQkJfCAoKHVuc2lnbmVkIGxvbmcpIChkcGwpIDw8IElBMzJfU0VHX0RQTCkJCQkJCVwKLQkJfCAoKHVuc2lnbmVkIGxvbmcpIChzZWdwcmVzZW50KSA8PCBJQTMyX1NFR19QKQkJCQkJXAotCQl8ICgoKCh1bnNpZ25lZCBsb25nKSAobGltaXQpID4+IDE2KSAmIDB4ZikgPDwgSUEzMl9TRUdfSElHSF9MSU1JVCkJCVwKLQkJfCAoKHVuc2lnbmVkIGxvbmcpIChhdmwpIDw8IElBMzJfU0VHX0FWTCkJCQkJCVwKLQkJfCAoKHVuc2lnbmVkIGxvbmcpIChzZWdkYikgPDwgSUEzMl9TRUdfREIpCQkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoZ3JhbikgPDwgSUEzMl9TRUdfRykJCQkJCVwKLQkJfCAoKCgodW5zaWduZWQgbG9uZykgKGJhc2UpID4+IDI0KSAmIDB4ZmYpIDw8IElBMzJfU0VHX0hJR0hfQkFTRSkpCi0KLSNkZWZpbmUgU0VHX0xJTQkJMzIKLSNkZWZpbmUgU0VHX1RZUEUJNTIKLSNkZWZpbmUgU0VHX1NZUwkJNTYKLSNkZWZpbmUgU0VHX0RQTAkJNTcKLSNkZWZpbmUgU0VHX1AJCTU5Ci0jZGVmaW5lIFNFR19BVkwJCTYwCi0jZGVmaW5lIFNFR19EQgkJNjIKLSNkZWZpbmUgU0VHX0cJCTYzCi0KLS8qIFVuc2NyYW1ibGUgYW4gSUEtMzIgc2VnbWVudCBkZXNjcmlwdG9yIGludG8gdGhlIElBLTY0IGZvcm1hdC4gICovCi0jZGVmaW5lIElBMzJfU0VHX1VOU0NSQU1CTEUoc2QpCQkJCQkJCQkJIFwKLQkoICAgKCgoc2QpID4+IElBMzJfU0VHX0JBU0UpICYgMHhmZmZmZmYpIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19ISUdIX0JBU0UpICYgMHhmZikgPDwgMjQpIFwKLQkgfCAoKCgoc2QpICYgMHhmZmZmKSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfSElHSF9MSU1JVCkgJiAweGYpIDw8IDE2KSkgPDwgU0VHX0xJTSkJIFwKLQkgfCAoKCgoc2QpID4+IElBMzJfU0VHX1RZUEUpICYgMHhmKSA8PCBTRUdfVFlQRSkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19TWVMpICYgMHgxKSA8PCBTRUdfU1lTKQkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19EUEwpICYgMHgzKSA8PCBTRUdfRFBMKQkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19QKSAmIDB4MSkgPDwgU0VHX1ApCQkJCQkJIFwKLQkgfCAoKCgoc2QpID4+IElBMzJfU0VHX0FWTCkgJiAweDEpIDw8IFNFR19BVkwpCQkJCQkJIFwKLQkgfCAoKCgoc2QpID4+IElBMzJfU0VHX0RCKSAmIDB4MSkgPDwgU0VHX0RCKQkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19HKSAmIDB4MSkgPDwgU0VHX0cpKQotCi0jZGVmaW5lIElBMzJfSU9CQVNFCTB4MjAwMDAwMDAwMDAwMDAwMFVMIC8qIFZpcnR1YWwgYWRkcmVzcyBmb3IgSS9PIHNwYWNlICovCi0KLSNkZWZpbmUgSUEzMl9DUjAJMHg4MDAwMDAwMQkvKiBFbmFibGUgUEcgYW5kIFBFIGJpdHMgKi8KLSNkZWZpbmUgSUEzMl9DUjQJMHg2MDAJCS8qIE1NWEVYIGFuZCBGWFNSIG9uICovCi0KLS8qCi0gKiAgSUEzMiBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVycyBzdGFydGluZyB2YWx1ZXMKLSAqLwotCi0jZGVmaW5lIElBMzJfRlNSX0RFRkFVTFQJMHg1NTU1MDAwMAkJLyogc2V0IGFsbCB0YWcgYml0cyAqLwotI2RlZmluZSBJQTMyX0ZDUl9ERUZBVUxUCTB4MTc4MDAwMDAwMzdmVUwJLyogZXh0ZW5kZWQgcHJlY2lzaW9uLCBhbGwgbWFza3MgKi8KLQotI2RlZmluZSBJQTMyX1BUUkFDRV9HRVRSRUdTCTEyCi0jZGVmaW5lIElBMzJfUFRSQUNFX1NFVFJFR1MJMTMKLSNkZWZpbmUgSUEzMl9QVFJBQ0VfR0VURlBSRUdTCTE0Ci0jZGVmaW5lIElBMzJfUFRSQUNFX1NFVEZQUkVHUwkxNQotI2RlZmluZSBJQTMyX1BUUkFDRV9HRVRGUFhSRUdTCTE4Ci0jZGVmaW5lIElBMzJfUFRSQUNFX1NFVEZQWFJFR1MJMTkKLQotI2RlZmluZSBpYTMyX3N0YXJ0X3RocmVhZChyZWdzLG5ld19pcCxuZXdfc3ApIGRvIHsJCQkJXAotCXNldF9mcyhVU0VSX0RTKTsJCQkJCQkJXAotCWlhNjRfcHNyKHJlZ3MpLT5jcGwgPSAzOwkvKiBzZXQgdXNlciBtb2RlICovCQkJXAotCWlhNjRfcHNyKHJlZ3MpLT5yaSA9IDA7CQkvKiBjbGVhciByZXR1cm4gc2xvdCBudW1iZXIgKi8JCVwKLQlpYTY0X3BzcihyZWdzKS0+aXMgPSAxOwkJLyogSUEtMzIgaW5zdHJ1Y3Rpb24gc2V0ICovCQlcCi0JcmVncy0+Y3JfaWlwID0gbmV3X2lwOwkJCQkJCQlcCi0JcmVncy0+YXJfcnNjID0gMHhjOwkJLyogZW5mb3JjZWQgbGF6eSBtb2RlLCBwcml2LiBsZXZlbCAzICovCVwKLQlyZWdzLT5hcl9ybmF0ID0gMDsJCQkJCQkJXAotCXJlZ3MtPmxvYWRycyA9IDA7CQkJCQkJCVwKLQlyZWdzLT5yMTIgPSBuZXdfc3A7CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBMb2NhbCBEZXNjcmlwdG9yIFRhYmxlIChMRFQpIHJlbGF0ZWQgZGVjbGFyYXRpb25zLgotICovCi0KLSNkZWZpbmUgSUEzMl9MRFRfRU5UUklFUwk4MTkyCQkvKiBNYXhpbXVtIG51bWJlciBvZiBMRFQgZW50cmllcyBzdXBwb3J0ZWQuICovCi0jZGVmaW5lIElBMzJfTERUX0VOVFJZX1NJWkUJOAkJLyogVGhlIHNpemUgb2YgZWFjaCBMRFQgZW50cnkuICovCi0KLSNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgXAotCSgoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKChpbmZvKS0+bGltaXQgJiAweDBmZmZmKSkKLQotI2RlZmluZSBMRFRfZW50cnlfYihpbmZvKQkJCQlcCi0JKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwJCVwKLQkoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTYpIHwJXAotCSgoaW5mbyktPmxpbWl0ICYgMHhmMDAwMCkgfAkJCVwKLQkoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8CQlcCi0JKChpbmZvKS0+Y29udGVudHMgPDwgMTApIHwJCQlcCi0JKCgoaW5mbyktPnNlZ19ub3RfcHJlc2VudCBeIDEpIDw8IDE1KSB8CQlcCi0JKChpbmZvKS0+c2VnXzMyYml0IDw8IDIyKSB8CQkJXAotCSgoaW5mbyktPmxpbWl0X2luX3BhZ2VzIDw8IDIzKSB8CQlcCi0JKChpbmZvKS0+dXNlYWJsZSA8PCAyMCkgfAkJCVwKLQkweDcxMDApCi0KLSNkZWZpbmUgTERUX2VtcHR5KGluZm8pICgJCQlcCi0JKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJglcCi0JKGluZm8pLT5saW1pdAkJPT0gMAkmJglcCi0JKGluZm8pLT5jb250ZW50cwk9PSAwCSYmCVwKLQkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYJXAotCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYJXAotCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJglcCi0JKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJglcCi0JKGluZm8pLT51c2VhYmxlCQk9PSAwCSkKLQotc3RhdGljIGlubGluZSB2b2lkCi1sb2FkX1RMUyAoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBjcHUpCi17Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKmNwdV9nZHRfdGFibGVbTlJfQ1BVU107Ci0KLQltZW1jcHkoY3B1X2dkdF90YWJsZVtjcHVdICsgR0RUX0VOVFJZX1RMU19NSU4gKyAwLCAmdC0+dGxzX2FycmF5WzBdLCBzaXplb2YobG9uZykpOwotCW1lbWNweShjcHVfZ2R0X3RhYmxlW2NwdV0gKyBHRFRfRU5UUllfVExTX01JTiArIDEsICZ0LT50bHNfYXJyYXlbMV0sIHNpemVvZihsb25nKSk7Ci0JbWVtY3B5KGNwdV9nZHRfdGFibGVbY3B1XSArIEdEVF9FTlRSWV9UTFNfTUlOICsgMiwgJnQtPnRsc19hcnJheVsyXSwgc2l6ZW9mKGxvbmcpKTsKLX0KLQotc3RydWN0IGlhMzJfdXNlcl9kZXNjIHsKLQl1bnNpZ25lZCBpbnQgZW50cnlfbnVtYmVyOwotCXVuc2lnbmVkIGludCBiYXNlX2FkZHI7Ci0JdW5zaWduZWQgaW50IGxpbWl0OwotCXVuc2lnbmVkIGludCBzZWdfMzJiaXQ6MTsKLQl1bnNpZ25lZCBpbnQgY29udGVudHM6MjsKLQl1bnNpZ25lZCBpbnQgcmVhZF9leGVjX29ubHk6MTsKLQl1bnNpZ25lZCBpbnQgbGltaXRfaW5fcGFnZXM6MTsKLQl1bnNpZ25lZCBpbnQgc2VnX25vdF9wcmVzZW50OjE7Ci0JdW5zaWduZWQgaW50IHVzZWFibGU6MTsKLX07Ci0KLXN0cnVjdCBsaW51eF9iaW5wcm07Ci0KLWV4dGVybiB2b2lkIGlhMzJfaW5pdF9hZGRyX3NwYWNlIChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGlhMzJfc2V0dXBfYXJnX3BhZ2VzIChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgZXhlY19zdGFjayk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpYTMyX2RvX21tYXAgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCwgaW50LCBsb2ZmX3QpOwotZXh0ZXJuIHZvaWQgaWEzMl9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcnMgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci0KLSNkZWZpbmUgaWEzMmYyaWE2NGYoZHN0LHNyYykJCQlcCi1kbyB7CQkJCQkJXAotCWlhNjRfbGRmZSg2LHNyYyk7CQkJXAotCWlhNjRfc3RvcCgpOwkJCQlcCi0JaWE2NF9zdGZfc3BpbGwoZHN0LCA2KTsJCQlcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgaWE2NGYyaWEzMmYoZHN0LHNyYykJCQlcCi1kbyB7CQkJCQkJXAotCWlhNjRfbGRmX2ZpbGwoNiwgc3JjKTsJCQlcCi0JaWE2NF9zdG9wKCk7CQkJCVwKLQlpYTY0X3N0ZmUoZHN0LCA2KTsJCQlcCi19IHdoaWxlKDApCi0KLXN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgewotCV9fdTMyIGVieCwgZWN4LCBlZHgsIGVzaSwgZWRpLCBlYnAsIGVheDsKLQl1bnNpZ25lZCBzaG9ydCBkcywgX19kcywgZXMsIF9fZXM7Ci0JdW5zaWduZWQgc2hvcnQgZnMsIF9fZnMsIGdzLCBfX2dzOwotCV9fdTMyIG9yaWdfZWF4LCBlaXA7Ci0JdW5zaWduZWQgc2hvcnQgY3MsIF9fY3M7Ci0JX191MzIgZWZsYWdzLCBlc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIF9fc3M7Ci19OwotCi0vKiBQcm90b3R5cGVzIGZvciB1c2UgaW4gZWxmY29yZTMyLmggKi8KLWV4dGVybiBpbnQgc2F2ZV9pYTMyX2Zwc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqKTsKLWV4dGVybiBpbnQgc2F2ZV9pYTMyX2ZweHN0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKik7Ci0KLSNlbmRpZiAvKiAhQ09ORklHX0lBMzJfU1VQUE9SVCAqLwotCi0jZW5kaWYgLyogX0FTTV9JQTY0X0lBMzJfUFJJVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1Yjc0NmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NjUgKzAsMCBAQAotLyoKLSAqIHN5c19pYTMyLmM6IENvbnZlcnNpb24gYmV0d2VlbiAzMmJpdCBhbmQgNjRiaXQgbmF0aXZlIHN5c2NhbGxzLiBEZXJpdmVkIGZyb20gc3lzX3NwYXJjMzIuYy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAJCVZBIExpbnV4IENvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAJCURvbiBEdWdnZXIgPG4wYW5vQHZhbGludXguY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5CQlBcnVuIFNoYXJtYSA8YXJ1bi5zaGFybWFAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgJSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqIENvcHlyaWdodCAoQykgMTk5NwkJRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMsIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQJCUdvcmRvbiBKaW4gPGdvcmRvbi5qaW5AaW50ZWwuY29tPgotICoKLSAqIFRoZXNlIHJvdXRpbmVzIG1haW50YWluIGFyZ3VtZW50IHNpemUgY29udmVyc2lvbiBiZXR3ZWVuIDMyYml0IGFuZCA2NGJpdAotICogZW52aXJvbm1lbnQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaG0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLQotI2luY2x1ZGUgImlhMzJwcml2LmgiCi0KLSNpbmNsdWRlIDxuZXQvc2NtLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2RlZmluZSBERUJVRwkwCi0KLSNpZiBERUJVRwotIyBkZWZpbmUgREJHKGZtdC4uLikJcHJpbnRrKEtFUk5fREVCVUcgZm10KQotI2Vsc2UKLSMgZGVmaW5lIERCRyhmbXQuLi4pCi0jZW5kaWYKLQotI2RlZmluZSBST1VORF9VUCh4LGEpCSgoX190eXBlb2ZfXyh4KSkoKCh1bnNpZ25lZCBsb25nKSh4KSArICgoYSkgLSAxKSkgJiB+KChhKSAtIDEpKSkKLQotI2RlZmluZSBPRkZTRVQ0SyhhKQkJKChhKSAmIDB4ZmZmKQotI2RlZmluZSBQQUdFX1NUQVJUKGFkZHIpCSgoYWRkcikgJiBQQUdFX01BU0spCi0jZGVmaW5lIE1JTlNJR1NUS1NaX0lBMzIJMjA0OAotCi0jZGVmaW5lIGhpZ2gybG93dWlkKHVpZCkgKCh1aWQpID4gNjU1MzUgPyA2NTUzNCA6ICh1aWQpKQotI2RlZmluZSBoaWdoMmxvd2dpZChnaWQpICgoZ2lkKSA+IDY1NTM1ID8gNjU1MzQgOiAoZ2lkKSkKLQotLyoKLSAqIEFueXRoaW5nIHRoYXQgbW9kaWZpZXMgb3IgaW5zcGVjdHMgaWEzMiB1c2VyIHZpcnR1YWwgbWVtb3J5IG11c3QgaG9sZCB0aGlzIHNlbWFwaG9yZQotICogd2hpbGUgZG9pbmcgc28uCi0gKi8KLS8qIFhYWCBtYWtlIHBlci1tbTogKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoaWEzMl9tbWFwX211dGV4KTsKLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9leGVjdmUgKGNoYXIgX191c2VyICpuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmVudnAsCi0JICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JbG9uZyBlcnJvcjsKLQljaGFyICpmaWxlbmFtZTsKLQl1bnNpZ25lZCBsb25nIG9sZF9tYXBfYmFzZSwgb2xkX3Rhc2tfc2l6ZSwgdHNzZDsKLQotCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKLQllcnJvciA9IFBUUl9FUlIoZmlsZW5hbWUpOwotCWlmIChJU19FUlIoZmlsZW5hbWUpKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlvbGRfbWFwX2Jhc2UgID0gY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlOwotCW9sZF90YXNrX3NpemUgPSBjdXJyZW50LT50aHJlYWQudGFza19zaXplOwotCXRzc2QgPSBpYTY0X2dldF9rcihJQTY0X0tSX1RTU0QpOwotCi0JLyogd2UgbWF5IGJlIGV4ZWMnaW5nIGEgNjQtYml0IHByb2Nlc3M6IHJlc2V0IG1hcCBiYXNlLCB0YXNrLXNpemUsIGFuZCBpby1iYXNlOiAqLwotCWN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSAgPSBERUZBVUxUX01BUF9CQVNFOwotCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRTsKLQlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0UsIGN1cnJlbnQtPnRocmVhZC5vbGRfaW9iKTsKLQlpYTY0X3NldF9rcihJQTY0X0tSX1RTU0QsIGN1cnJlbnQtPnRocmVhZC5vbGRfazEpOwotCi0JZXJyb3IgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKLQlwdXRuYW1lKGZpbGVuYW1lKTsKLQotCWlmIChlcnJvciA8IDApIHsKLQkJLyogb29wcywgZXhlY3ZlIGZhaWxlZCwgc3dpdGNoIGJhY2sgdG8gb2xkIHZhbHVlcy4uLiAqLwotCQlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0UsIElBMzJfSU9CQVNFKTsKLQkJaWE2NF9zZXRfa3IoSUE2NF9LUl9UU1NELCB0c3NkKTsKLQkJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlICA9IG9sZF9tYXBfYmFzZTsKLQkJY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZSA9IG9sZF90YXNrX3NpemU7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi0KLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi0KLQotc3RhdGljIGludAotZ2V0X3BhZ2VfcHJvdCAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpbnQgcHJvdCA9IDA7Ci0KLQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpCi0JCXByb3QgfD0gUFJPVF9SRUFEOwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCi0JCXByb3QgfD0gUFJPVF9XUklURTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCi0JCXByb3QgfD0gUFJPVF9FWEVDOwotCXJldHVybiBwcm90OwotfQotCi0vKgotICogTWFwIGEgc3VicGFnZSBieSBjcmVhdGluZyBhbiBhbm9ueW1vdXMgcGFnZSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbiBvZiB0aGUgb2xkIHBhZ2UgYW5kCi0gKiB0aGUgc3VicGFnZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcKLW1tYXBfc3VicGFnZSAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgcHJvdCwgaW50IGZsYWdzLAotCSAgICAgIGxvZmZfdCBvZmYpCi17Ci0Jdm9pZCAqcGFnZSA9IE5VTEw7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQl1bnNpZ25lZCBsb25nIHJldCA9IDA7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgc3RhcnQpOwotCWludCBvbGRfcHJvdCA9IGdldF9wYWdlX3Byb3Qodm1hLCBzdGFydCk7Ci0KLQlEQkcoIm1tYXBfc3VicGFnZShmaWxlPSVwLHN0YXJ0PTB4JWx4LGVuZD0weCVseCxwcm90PSV4LGZsYWdzPSV4LG9mZj0weCVsbHgpXG4iLAotCSAgICBmaWxlLCBzdGFydCwgZW5kLCBwcm90LCBmbGFncywgb2ZmKTsKLQotCi0JLyogT3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgdGhlIG9sZCBtbWFwIGFuZCB0aGUgbmV3IG1tYXAgYXJlIGJvdGggYW5vbnltb3VzICovCi0JaWYgKChvbGRfcHJvdCAmIFBST1RfV1JJVEUpICYmIChmbGFncyAmIE1BUF9BTk9OWU1PVVMpICYmICF2bWEtPnZtX2ZpbGUpIHsKLQkJaWYgKGNsZWFyX3VzZXIoKHZvaWQgX191c2VyICopIHN0YXJ0LCBlbmQgLSBzdGFydCkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlnb3RvIHNraXBfbW1hcDsKLQl9Ci0KLQlwYWdlID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAob2xkX3Byb3QpCi0JCWNvcHlfZnJvbV91c2VyKHBhZ2UsICh2b2lkIF9fdXNlciAqKSBQQUdFX1NUQVJUKHN0YXJ0KSwgUEFHRV9TSVpFKTsKLQotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JewotCQlyZXQgPSBkb19tbWFwKE5VTEwsIFBBR0VfU1RBUlQoc3RhcnQpLCBQQUdFX1NJWkUsIHByb3QgfCBQUk9UX1dSSVRFLAotCQkJICAgICAgZmxhZ3MgfCBNQVBfRklYRUQgfCBNQVBfQU5PTllNT1VTLCAwKTsKLQl9Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0KLQlpZiAoSVNfRVJSKCh2b2lkICopIHJldCkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKG9sZF9wcm90KSB7Ci0JCS8qIGNvcHkgYmFjayB0aGUgb2xkIHBhZ2UgY29udGVudHMuICAqLwotCQlpZiAob2Zmc2V0X2luX3BhZ2Uoc3RhcnQpKQotCQkJY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBQQUdFX1NUQVJUKHN0YXJ0KSwgcGFnZSwKLQkJCQkgICAgIG9mZnNldF9pbl9wYWdlKHN0YXJ0KSk7Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShlbmQpKQotCQkJY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBlbmQsIHBhZ2UgKyBvZmZzZXRfaW5fcGFnZShlbmQpLAotCQkJCSAgICAgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UoZW5kKSk7Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQkvKiByZWFkIHRoZSBmaWxlIGNvbnRlbnRzICovCi0JCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKCFpbm9kZS0+aV9mb3AgfHwgIWZpbGUtPmZfb3AtPnJlYWQKLQkJICAgIHx8ICgoKmZpbGUtPmZfb3AtPnJlYWQpKGZpbGUsIChjaGFyIF9fdXNlciAqKSBzdGFydCwgZW5kIC0gc3RhcnQsICZvZmYpIDwgMCkpCi0JCXsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotIHNraXBfbW1hcDoKLQlpZiAoIShwcm90ICYgUFJPVF9XUklURSkpCi0JCXJldCA9IHN5c19tcHJvdGVjdChQQUdFX1NUQVJUKHN0YXJ0KSwgUEFHRV9TSVpFLCBwcm90IHwgb2xkX3Byb3QpOwotICBvdXQ6Ci0JaWYgKHBhZ2UpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogU0xBQiBjYWNoZSBmb3IgaWE2NF9wYXJ0aWFsX3BhZ2Ugc3RydWN0dXJlcyAqLwotc3RydWN0IGttZW1fY2FjaGUgKmlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcDsKLQotLyoKLSAqIGluaXQgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdC4KLSAqIHJldHVybiAwIG1lYW5zIGttYWxsb2MgZmFpbC4KLSAqLwotc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QqCi1pYTMyX2luaXRfcHBfbGlzdCh2b2lkKQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0ICpwOwotCi0JaWYgKChwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJcmV0dXJuIHA7Ci0JcC0+cHBfaGVhZCA9IE5VTEw7Ci0JcC0+cHBsX3JiID0gUkJfUk9PVDsKLQlwLT5wcF9oaW50ID0gTlVMTDsKLQlhdG9taWNfc2V0KCZwLT5wcF9jb3VudCwgMSk7Ci0JcmV0dXJuIHA7Ci19Ci0KLS8qCi0gKiBTZWFyY2ggZm9yIHRoZSBwYXJ0aWFsIHBhZ2Ugd2l0aCBAc3RhcnQgaW4gcGFydGlhbCBwYWdlIGxpc3QgQHBwbC4KLSAqIElmIGZpbmRzIHRoZSBwYXJ0aWFsIHBhZ2UsIHJldHVybiB0aGUgZm91bmQgcGFydGlhbCBwYWdlLgotICogRWxzZSwgcmV0dXJuIDAgYW5kIHByb3ZpZGUgQHBwcmV2LCBAcmJfbGluaywgQHJiX3BhcmVudCB0bwotICogYmUgdXNlZCBieSBsYXRlciBfX2lhMzJfaW5zZXJ0X3BwKCkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKgotX19pYTMyX2ZpbmRfcHAoc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QgKnBwbCwgdW5zaWduZWQgaW50IHN0YXJ0LAotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqKnBwcmV2LCBzdHJ1Y3QgcmJfbm9kZSAqKipyYl9saW5rLAotCXN0cnVjdCByYl9ub2RlICoqcmJfcGFyZW50KQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHA7Ci0Jc3RydWN0IHJiX25vZGUgKipfX3JiX2xpbmssICpfX3JiX3BhcmVudCwgKnJiX3ByZXY7Ci0KLQlwcCA9IHBwbC0+cHBfaGludDsKLQlpZiAocHAgJiYgcHAtPmJhc2UgPT0gc3RhcnQpCi0JCXJldHVybiBwcDsKLQotCV9fcmJfbGluayA9ICZwcGwtPnBwbF9yYi5yYl9ub2RlOwotCXJiX3ByZXYgPSBfX3JiX3BhcmVudCA9IE5VTEw7Ci0KLQl3aGlsZSAoKl9fcmJfbGluaykgewotCQlfX3JiX3BhcmVudCA9ICpfX3JiX2xpbms7Ci0JCXBwID0gcmJfZW50cnkoX19yYl9wYXJlbnQsIHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSwgcHBfcmIpOwotCi0JCWlmIChwcC0+YmFzZSA9PSBzdGFydCkgewotCQkJcHBsLT5wcF9oaW50ID0gcHA7Ci0JCQlyZXR1cm4gcHA7Ci0JCX0gZWxzZSBpZiAocHAtPmJhc2UgPCBzdGFydCkgewotCQkJcmJfcHJldiA9IF9fcmJfcGFyZW50OwotCQkJX19yYl9saW5rID0gJl9fcmJfcGFyZW50LT5yYl9yaWdodDsKLQkJfSBlbHNlIHsKLQkJCV9fcmJfbGluayA9ICZfX3JiX3BhcmVudC0+cmJfbGVmdDsKLQkJfQotCX0KLQotCSpyYl9saW5rID0gX19yYl9saW5rOwotCSpyYl9wYXJlbnQgPSBfX3JiX3BhcmVudDsKLQkqcHByZXYgPSBOVUxMOwotCWlmIChyYl9wcmV2KQotCQkqcHByZXYgPSByYl9lbnRyeShyYl9wcmV2LCBzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UsIHBwX3JiKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIGluc2VydCBAcHAgaW50byBAcHBsLgotICovCi1zdGF0aWMgdm9pZAotX19pYTMyX2luc2VydF9wcChzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcHBsLAotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAsIHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHJldiwKLQlzdHJ1Y3QgcmJfbm9kZSAqKnJiX2xpbmssIHN0cnVjdCByYl9ub2RlICpyYl9wYXJlbnQpCi17Ci0JLyogbGluayBsaXN0ICovCi0JaWYgKHByZXYpIHsKLQkJcHAtPm5leHQgPSBwcmV2LT5uZXh0OwotCQlwcmV2LT5uZXh0ID0gcHA7Ci0JfSBlbHNlIHsKLQkJcHBsLT5wcF9oZWFkID0gcHA7Ci0JCWlmIChyYl9wYXJlbnQpCi0JCQlwcC0+bmV4dCA9IHJiX2VudHJ5KHJiX3BhcmVudCwKLQkJCQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UsIHBwX3JiKTsKLQkJZWxzZQotCQkJcHAtPm5leHQgPSBOVUxMOwotCX0KLQotCS8qIGxpbmsgcmIgKi8KLQlyYl9saW5rX25vZGUoJnBwLT5wcF9yYiwgcmJfcGFyZW50LCByYl9saW5rKTsKLQlyYl9pbnNlcnRfY29sb3IoJnBwLT5wcF9yYiwgJnBwbC0+cHBsX3JiKTsKLQotCXBwbC0+cHBfaGludCA9IHBwOwotfQotCi0vKgotICogZGVsZXRlIEBwcCBmcm9tIHBhcnRpYWwgcGFnZSBsaXN0IEBwcGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1fX2lhMzJfZGVsZXRlX3BwKHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0ICpwcGwsCi0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcmV2KQotewotCWlmIChwcmV2KSB7Ci0JCXByZXYtPm5leHQgPSBwcC0+bmV4dDsKLQkJaWYgKHBwbC0+cHBfaGludCA9PSBwcCkKLQkJCXBwbC0+cHBfaGludCA9IHByZXY7Ci0JfSBlbHNlIHsKLQkJcHBsLT5wcF9oZWFkID0gcHAtPm5leHQ7Ci0JCWlmIChwcGwtPnBwX2hpbnQgPT0gcHApCi0JCQlwcGwtPnBwX2hpbnQgPSBwcC0+bmV4dDsKLQl9Ci0JcmJfZXJhc2UoJnBwLT5wcF9yYiwgJnBwbC0+cHBsX3JiKTsKLQlrbWVtX2NhY2hlX2ZyZWUoaWE2NF9wYXJ0aWFsX3BhZ2VfY2FjaGVwLCBwcCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKgotX19wcF9wcmV2KHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHApCi17Ci0Jc3RydWN0IHJiX25vZGUgKnByZXYgPSByYl9wcmV2KCZwcC0+cHBfcmIpOwotCWlmIChwcmV2KQotCQlyZXR1cm4gcmJfZW50cnkocHJldiwgc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlLCBwcF9yYik7Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIERlbGV0ZSBwYXJ0aWFsIHBhZ2VzIHdpdGggYWRkcmVzcyBiZXR3ZWVuIEBzdGFydCBhbmQgQGVuZC4KLSAqIEBzdGFydCBhbmQgQGVuZCBhcmUgcGFnZSBhbGlnbmVkLgotICovCi1zdGF0aWMgdm9pZAotX19pYTMyX2RlbGV0ZV9wcF9yYW5nZSh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgKnByZXY7Ci0Jc3RydWN0IHJiX25vZGUgKipyYl9saW5rLCAqcmJfcGFyZW50OwotCi0JaWYgKHN0YXJ0ID49IGVuZCkKLQkJcmV0dXJuOwotCi0JcHAgPSBfX2lhMzJfZmluZF9wcChjdXJyZW50LT50aHJlYWQucHBsLCBzdGFydCwgJnByZXYsCi0JCQkJCSZyYl9saW5rLCAmcmJfcGFyZW50KTsKLQlpZiAocHApCi0JCXByZXYgPSBfX3BwX3ByZXYocHApOwotCWVsc2UgewotCQlpZiAocHJldikKLQkJCXBwID0gcHJldi0+bmV4dDsKLQkJZWxzZQotCQkJcHAgPSBjdXJyZW50LT50aHJlYWQucHBsLT5wcF9oZWFkOwotCX0KLQotCXdoaWxlIChwcCAmJiBwcC0+YmFzZSA8IGVuZCkgewotCQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnRtcCA9IHBwLT5uZXh0OwotCQlfX2lhMzJfZGVsZXRlX3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBwLCBwcmV2KTsKLQkJcHAgPSB0bXA7Ci0JfQotfQotCi0vKgotICogU2V0IHRoZSByYW5nZSBiZXR3ZWVuIEBzdGFydCBhbmQgQGVuZCBpbiBiaXRtYXAuCi0gKiBAc3RhcnQgYW5kIEBlbmQgc2hvdWxkIGJlIElBMzIgcGFnZSBhbGlnbmVkIGFuZCBpbiB0aGUgc2FtZSBJQTY0IHBhZ2UuCi0gKi8KLXN0YXRpYyBpbnQKLV9faWEzMl9zZXRfcHAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgKnByZXY7Ci0Jc3RydWN0IHJiX25vZGUgKiogcmJfbGluaywgKnJiX3BhcmVudDsKLQl1bnNpZ25lZCBpbnQgcHN0YXJ0LCBzdGFydF9iaXQsIGVuZF9iaXQsIGk7Ci0KLQlwc3RhcnQgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQlzdGFydF9iaXQgPSAoc3RhcnQgJSBQQUdFX1NJWkUpIC8gSUEzMl9QQUdFX1NJWkU7Ci0JZW5kX2JpdCA9IChlbmQgJSBQQUdFX1NJWkUpIC8gSUEzMl9QQUdFX1NJWkU7Ci0JaWYgKGVuZF9iaXQgPT0gMCkKLQkJZW5kX2JpdCA9IFBBR0VfU0laRSAvIElBMzJfUEFHRV9TSVpFOwotCXBwID0gX19pYTMyX2ZpbmRfcHAoY3VycmVudC0+dGhyZWFkLnBwbCwgcHN0YXJ0LCAmcHJldiwKLQkJCQkJJnJiX2xpbmssICZyYl9wYXJlbnQpOwotCWlmIChwcCkgewotCQlmb3IgKGkgPSBzdGFydF9iaXQ7IGkgPCBlbmRfYml0OyBpKyspCi0JCQlzZXRfYml0KGksICZwcC0+Yml0bWFwKTsKLQkJLyoKLQkJICogQ2hlY2s6IGlmIHRoaXMgcGFydGlhbCBwYWdlIGhhcyBiZWVuIHNldCB0byBhIGZ1bGwgcGFnZSwKLQkJICogdGhlbiBkZWxldGUgaXQuCi0JCSAqLwotCQlpZiAoZmluZF9maXJzdF96ZXJvX2JpdCgmcHAtPmJpdG1hcCwgc2l6ZW9mKHBwLT5iaXRtYXApKjgpID49Ci0JCQkJUEFHRV9TSVpFL0lBMzJfUEFHRV9TSVpFKSB7Ci0JCQlfX2lhMzJfZGVsZXRlX3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBwLCBfX3BwX3ByZXYocHApKTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIE1BUF9GSVhFRCBtYXkgbGVhZCB0byBvdmVybGFwcGluZyBtbWFwLgotCSAqIEluIHRoaXMgY2FzZSwgdGhlIHJlcXVlc3RlZCBtbWFwIGFyZWEgbWF5IGFscmVhZHkgbW1hcGVkIGFzIGEgZnVsbAotCSAqIHBhZ2UuIFNvIGNoZWNrIHZtYSBiZWZvcmUgYWRkaW5nIGEgbmV3IHBhcnRpYWwgcGFnZS4KLQkgKi8KLQlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpIHsKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgcHN0YXJ0KTsKLQkJaWYgKHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDw9IHBzdGFydCkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIG5ldyBhIGlhNjRfcGFydGlhbF9wYWdlICovCi0JcHAgPSBrbWVtX2NhY2hlX2FsbG9jKGlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcHAtPmJhc2UgPSBwc3RhcnQ7Ci0JcHAtPmJpdG1hcCA9IDA7Ci0JZm9yIChpPXN0YXJ0X2JpdDsgaTxlbmRfYml0OyBpKyspCi0JCXNldF9iaXQoaSwgJihwcC0+Yml0bWFwKSk7Ci0JcHAtPm5leHQgPSBOVUxMOwotCV9faWEzMl9pbnNlcnRfcHAoY3VycmVudC0+dGhyZWFkLnBwbCwgcHAsIHByZXYsIHJiX2xpbmssIHJiX3BhcmVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBAc3RhcnQgYW5kIEBlbmQgc2hvdWxkIGJlIElBMzIgcGFnZSBhbGlnbmVkLCBidXQgZG9uJ3QgbmVlZCB0byBiZSBpbiB0aGUKLSAqIHNhbWUgSUE2NCBwYWdlLiBTcGxpdCBAc3RhcnQgYW5kIEBlbmQgdG8gbWFrZSBzdXJlIHRoZXkncmUgaW4gdGhlIHNhbWUgSUE2NAotICogcGFnZSwgdGhlbiBjYWxsIF9faWEzMl9zZXRfcHAoKS4KLSAqLwotc3RhdGljIHZvaWQKLWlhMzJfc2V0X3BwKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCwgaW50IGZsYWdzKQotewotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCS8qCi0JCSAqIE1BUF9GSVhFRCBtYXkgbGVhZCB0byBvdmVybGFwcGluZyBtbWFwLiBXaGVuIHRoaXMgaGFwcGVucywKLQkJICogYSBzZXJpZXMgb2YgY29tcGxldGUgSUE2NCBwYWdlcyByZXN1bHRzIGluIGRlbGV0aW9uIG9mCi0JCSAqIG9sZCBwYXJ0aWFsIHBhZ2VzIGluIHRoYXQgcmFuZ2UuCi0JCSAqLwotCQlfX2lhMzJfZGVsZXRlX3BwX3JhbmdlKFBBR0VfQUxJR04oc3RhcnQpLCBQQUdFX1NUQVJUKGVuZCkpOwotCX0KLQotCWlmIChlbmQgPCBQQUdFX0FMSUdOKHN0YXJ0KSkgewotCQlfX2lhMzJfc2V0X3BwKHN0YXJ0LCBlbmQsIGZsYWdzKTsKLQl9IGVsc2UgewotCQlpZiAob2Zmc2V0X2luX3BhZ2Uoc3RhcnQpKQotCQkJX19pYTMyX3NldF9wcChzdGFydCwgUEFHRV9BTElHTihzdGFydCksIGZsYWdzKTsKLQkJaWYgKG9mZnNldF9pbl9wYWdlKGVuZCkpCi0JCQlfX2lhMzJfc2V0X3BwKFBBR0VfU1RBUlQoZW5kKSwgZW5kLCBmbGFncyk7Ci0JfQotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotfQotCi0vKgotICogVW5zZXQgdGhlIHJhbmdlIGJldHdlZW4gQHN0YXJ0IGFuZCBAZW5kIGluIGJpdG1hcC4KLSAqIEBzdGFydCBhbmQgQGVuZCBzaG91bGQgYmUgSUEzMiBwYWdlIGFsaWduZWQgYW5kIGluIHRoZSBzYW1lIElBNjQgcGFnZS4KLSAqIEFmdGVyIGRvaW5nIHRoYXQsIGlmIHRoZSBiaXRtYXAgaXMgMCwgdGhlbiBmcmVlIHRoZSBwYWdlIGFuZCByZXR1cm4gMSwKLSAqIAllbHNlIHJldHVybiAwOwotICogSWYgbm90IGZpbmQgdGhlIHBhcnRpYWwgcGFnZSBpbiB0aGUgbGlzdCwgdGhlbgotICogCUlmIHRoZSB2bWEgZXhpc3RzLCB0aGVuIHRoZSBmdWxsIHBhZ2UgaXMgc2V0IHRvIGEgcGFydGlhbCBwYWdlOwotICoJRWxzZSByZXR1cm4gLUVOT01FTS4KLSAqLwotc3RhdGljIGludAotX19pYTMyX3Vuc2V0X3BwKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCkKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwLCAqcHJldjsKLQlzdHJ1Y3QgcmJfbm9kZSAqKiByYl9saW5rLCAqcmJfcGFyZW50OwotCXVuc2lnbmVkIGludCBwc3RhcnQsIHN0YXJ0X2JpdCwgZW5kX2JpdCwgaTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQotCXBzdGFydCA9IFBBR0VfU1RBUlQoc3RhcnQpOwotCXN0YXJ0X2JpdCA9IChzdGFydCAlIFBBR0VfU0laRSkgLyBJQTMyX1BBR0VfU0laRTsKLQllbmRfYml0ID0gKGVuZCAlIFBBR0VfU0laRSkgLyBJQTMyX1BBR0VfU0laRTsKLQlpZiAoZW5kX2JpdCA9PSAwKQotCQllbmRfYml0ID0gUEFHRV9TSVpFIC8gSUEzMl9QQUdFX1NJWkU7Ci0KLQlwcCA9IF9faWEzMl9maW5kX3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBzdGFydCwgJnByZXYsCi0JCQkJCSZyYl9saW5rLCAmcmJfcGFyZW50KTsKLQlpZiAocHApIHsKLQkJZm9yIChpID0gc3RhcnRfYml0OyBpIDwgZW5kX2JpdDsgaSsrKQotCQkJY2xlYXJfYml0KGksICZwcC0+Yml0bWFwKTsKLQkJaWYgKHBwLT5iaXRtYXAgPT0gMCkgewotCQkJX19pYTMyX2RlbGV0ZV9wcChjdXJyZW50LT50aHJlYWQucHBsLCBwcCwgX19wcF9wcmV2KHBwKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgcHN0YXJ0KTsKLQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gcHN0YXJ0KSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIG5ldyBhIGlhNjRfcGFydGlhbF9wYWdlICovCi0JcHAgPSBrbWVtX2NhY2hlX2FsbG9jKGlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcHAtPmJhc2UgPSBwc3RhcnQ7Ci0JcHAtPmJpdG1hcCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHN0YXJ0X2JpdDsgaSsrKQotCQlzZXRfYml0KGksICYocHAtPmJpdG1hcCkpOwotCWZvciAoaSA9IGVuZF9iaXQ7IGkgPCBQQUdFX1NJWkUgLyBJQTMyX1BBR0VfU0laRTsgaSsrKQotCQlzZXRfYml0KGksICYocHAtPmJpdG1hcCkpOwotCXBwLT5uZXh0ID0gTlVMTDsKLQlfX2lhMzJfaW5zZXJ0X3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBwLCBwcmV2LCByYl9saW5rLCByYl9wYXJlbnQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRGVsZXRlIHBwIGJldHdlZW4gUEFHRV9BTElHTihzdGFydCkgYW5kIFBBR0VfU1RBUlQoZW5kKSBieSBjYWxsaW5nCi0gKiBfX2lhMzJfZGVsZXRlX3BwX3JhbmdlKCkuIFVuc2V0IHBvc3NpYmxlIHBhcnRpYWwgcGFnZXMgYnkgY2FsbGluZwotICogX19pYTMyX3Vuc2V0X3BwKCkuCi0gKiBUaGUgcmV0dXJuZWQgdmFsdWUgc2VlIF9faWEzMl91bnNldF9wcCgpLgotICovCi1zdGF0aWMgaW50Ci1pYTMyX3Vuc2V0X3BwKHVuc2lnbmVkIGludCAqc3RhcnRwLCB1bnNpZ25lZCBpbnQgKmVuZHApCi17Ci0JdW5zaWduZWQgaW50IHN0YXJ0ID0gKnN0YXJ0cCwgZW5kID0gKmVuZHA7Ci0JaW50IHJldCA9IDA7Ci0KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCi0JX19pYTMyX2RlbGV0ZV9wcF9yYW5nZShQQUdFX0FMSUdOKHN0YXJ0KSwgUEFHRV9TVEFSVChlbmQpKTsKLQotCWlmIChlbmQgPCBQQUdFX0FMSUdOKHN0YXJ0KSkgewotCQlyZXQgPSBfX2lhMzJfdW5zZXRfcHAoc3RhcnQsIGVuZCk7Ci0JCWlmIChyZXQgPT0gMSkgewotCQkJKnN0YXJ0cCA9IFBBR0VfU1RBUlQoc3RhcnQpOwotCQkJKmVuZHAgPSBQQUdFX0FMSUdOKGVuZCk7Ci0JCX0KLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQkvKiB0byBzaG9ydGN1dCBzeXNfbXVubWFwKCkgaW4gc3lzMzJfbXVubWFwKCkgKi8KLQkJCSpzdGFydHAgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQkJCSplbmRwID0gUEFHRV9TVEFSVChlbmQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG9mZnNldF9pbl9wYWdlKHN0YXJ0KSkgewotCQkJcmV0ID0gX19pYTMyX3Vuc2V0X3BwKHN0YXJ0LCBQQUdFX0FMSUdOKHN0YXJ0KSk7Ci0JCQlpZiAocmV0ID09IDEpCi0JCQkJKnN0YXJ0cCA9IFBBR0VfU1RBUlQoc3RhcnQpOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCSpzdGFydHAgPSBQQUdFX0FMSUdOKHN0YXJ0KTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShlbmQpKSB7Ci0JCQlyZXQgPSBfX2lhMzJfdW5zZXRfcHAoUEFHRV9TVEFSVChlbmQpLCBlbmQpOwotCQkJaWYgKHJldCA9PSAxKQotCQkJCSplbmRwID0gUEFHRV9BTElHTihlbmQpOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCSplbmRwID0gUEFHRV9TVEFSVChlbmQpOwotCQl9Ci0JfQotCi0gb3V0OgotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBDb21wYXJlIHRoZSByYW5nZSBiZXR3ZWVuIEBzdGFydCBhbmQgQGVuZCB3aXRoIGJpdG1hcCBpbiBwYXJ0aWFsIHBhZ2UuCi0gKiBAc3RhcnQgYW5kIEBlbmQgc2hvdWxkIGJlIElBMzIgcGFnZSBhbGlnbmVkIGFuZCBpbiB0aGUgc2FtZSBJQTY0IHBhZ2UuCi0gKi8KLXN0YXRpYyBpbnQKLV9faWEzMl9jb21wYXJlX3BwKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCkKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwLCAqcHJldjsKLQlzdHJ1Y3QgcmJfbm9kZSAqKiByYl9saW5rLCAqcmJfcGFyZW50OwotCXVuc2lnbmVkIGludCBwc3RhcnQsIHN0YXJ0X2JpdCwgZW5kX2JpdCwgc2l6ZTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYml0LCBuZXh0X3plcm9fYml0OwkvKiB0aGUgZmlyc3QgcmFuZ2UgaW4gYml0bWFwICovCi0KLQlwc3RhcnQgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQotCXBwID0gX19pYTMyX2ZpbmRfcHAoY3VycmVudC0+dGhyZWFkLnBwbCwgcHN0YXJ0LCAmcHJldiwKLQkJCQkJJnJiX2xpbmssICZyYl9wYXJlbnQpOwotCWlmICghcHApCi0JCXJldHVybiAxOwotCi0Jc3RhcnRfYml0ID0gKHN0YXJ0ICUgUEFHRV9TSVpFKSAvIElBMzJfUEFHRV9TSVpFOwotCWVuZF9iaXQgPSAoZW5kICUgUEFHRV9TSVpFKSAvIElBMzJfUEFHRV9TSVpFOwotCXNpemUgPSBzaXplb2YocHAtPmJpdG1hcCkgKiA4OwotCWZpcnN0X2JpdCA9IGZpbmRfZmlyc3RfYml0KCZwcC0+Yml0bWFwLCBzaXplKTsKLQluZXh0X3plcm9fYml0ID0gZmluZF9uZXh0X3plcm9fYml0KCZwcC0+Yml0bWFwLCBzaXplLCBmaXJzdF9iaXQpOwotCWlmICgoc3RhcnRfYml0IDwgZmlyc3RfYml0KSB8fCAoZW5kX2JpdCA+IG5leHRfemVyb19iaXQpKSB7Ci0JCS8qIGV4Y2VlZHMgdGhlIGZpcnN0IHJhbmdlIGluIGJpdG1hcCAqLwotCQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgaWYgKChzdGFydF9iaXQgPT0gZmlyc3RfYml0KSAmJiAoZW5kX2JpdCA9PSBuZXh0X3plcm9fYml0KSkgewotCQlmaXJzdF9iaXQgPSBmaW5kX25leHRfYml0KCZwcC0+Yml0bWFwLCBzaXplLCBuZXh0X3plcm9fYml0KTsKLQkJaWYgKChuZXh0X3plcm9fYml0IDwgZmlyc3RfYml0KSAmJiAoZmlyc3RfYml0IDwgc2l6ZSkpCi0JCQlyZXR1cm4gMTsJLyogaGFzIG5leHQgcmFuZ2UgKi8KLQkJZWxzZQotCQkJcmV0dXJuIDA7IAkvKiBubyBuZXh0IHJhbmdlICovCi0JfSBlbHNlCi0JCXJldHVybiAxOwotfQotCi0vKgotICogQHN0YXJ0IGFuZCBAZW5kIHNob3VsZCBiZSBJQTMyIHBhZ2UgYWxpZ25lZCwgYnV0IGRvbid0IG5lZWQgdG8gYmUgaW4gdGhlCi0gKiBzYW1lIElBNjQgcGFnZS4gU3BsaXQgQHN0YXJ0IGFuZCBAZW5kIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGluIHRoZSBzYW1lIElBNjQKLSAqIHBhZ2UsIHRoZW4gY2FsbCBfX2lhMzJfY29tcGFyZV9wcCgpLgotICoKLSAqIFRha2UgdGhpcyBhcyBleGFtcGxlOiB0aGUgcmFuZ2UgaXMgdGhlIDFzdCBhbmQgMm5kIDRLIHBhZ2UuCi0gKiBSZXR1cm4gMCBpZiB0aGV5IGZpdCBiaXRtYXAgZXhhY3RseSwgaS5lLiBiaXRtYXAgPSAwMDAwMDAxMTsKLSAqIFJldHVybiAxIGlmIHRoZSByYW5nZSBkb2Vzbid0IGNvdmVyIHdob2xlIGJpdG1hcCwgZS5nLiBiaXRtYXAgPSAwMDAwMTExMTsKLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZSByYW5nZSBleGNlZWRzIHRoZSBiaXRtYXAsIGUuZy4gYml0bWFwID0gMDAwMDAwMDEgb3IKLSAqIAliaXRtYXAgPSAwMDAwMDEwMS4KLSAqLwotc3RhdGljIGludAotaWEzMl9jb21wYXJlX3BwKHVuc2lnbmVkIGludCAqc3RhcnRwLCB1bnNpZ25lZCBpbnQgKmVuZHApCi17Ci0JdW5zaWduZWQgaW50IHN0YXJ0ID0gKnN0YXJ0cCwgZW5kID0gKmVuZHA7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCi0JaWYgKGVuZCA8IFBBR0VfQUxJR04oc3RhcnQpKSB7Ci0JCXJldHZhbCA9IF9faWEzMl9jb21wYXJlX3BwKHN0YXJ0LCBlbmQpOwotCQlpZiAocmV0dmFsID09IDApIHsKLQkJCSpzdGFydHAgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQkJCSplbmRwID0gUEFHRV9BTElHTihlbmQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG9mZnNldF9pbl9wYWdlKHN0YXJ0KSkgewotCQkJcmV0dmFsID0gX19pYTMyX2NvbXBhcmVfcHAoc3RhcnQsCi0JCQkJCQkgICBQQUdFX0FMSUdOKHN0YXJ0KSk7Ci0JCQlpZiAocmV0dmFsID09IDApCi0JCQkJKnN0YXJ0cCA9IFBBR0VfU1RBUlQoc3RhcnQpOwotCQkJaWYgKHJldHZhbCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKG9mZnNldF9pbl9wYWdlKGVuZCkpIHsKLQkJCXJldHZhbCA9IF9faWEzMl9jb21wYXJlX3BwKFBBR0VfU1RBUlQoZW5kKSwgZW5kKTsKLQkJCWlmIChyZXR2YWwgPT0gMCkKLQkJCQkqZW5kcCA9IFBBR0VfQUxJR04oZW5kKTsKLQkJfQotCX0KLQotIG91dDoKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZAotX19pYTMyX2Ryb3BfcHBfbGlzdChzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcHBsKQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAgPSBwcGwtPnBwX2hlYWQ7Ci0KLQl3aGlsZSAocHApIHsKLQkJc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpuZXh0ID0gcHAtPm5leHQ7Ci0JCWttZW1fY2FjaGVfZnJlZShpYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXAsIHBwKTsKLQkJcHAgPSBuZXh0OwotCX0KLQotCWtmcmVlKHBwbCk7Ci19Ci0KLXZvaWQKLWlhMzJfZHJvcF9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCogcHBsID0gdGFzay0+dGhyZWFkLnBwbDsKLQotCWlmIChwcGwgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmcHBsLT5wcF9jb3VudCkpCi0JCV9faWEzMl9kcm9wX3BwX2xpc3QocHBsKTsKLX0KLQotLyoKLSAqIENvcHkgY3VycmVudC0+dGhyZWFkLnBwbCB0byBwcGwgKGFscmVhZHkgaW5pdGlhbGl6ZWQpLgotICovCi1zdGF0aWMgaW50Ci1fX2lhMzJfY29weV9wcF9saXN0KHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0ICpwcGwpCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgKnRtcCwgKnByZXY7Ci0Jc3RydWN0IHJiX25vZGUgKipyYl9saW5rLCAqcmJfcGFyZW50OwotCi0JcHBsLT5wcF9oZWFkID0gTlVMTDsKLQlwcGwtPnBwX2hpbnQgPSBOVUxMOwotCXBwbC0+cHBsX3JiID0gUkJfUk9PVDsKLQlyYl9saW5rID0gJnBwbC0+cHBsX3JiLnJiX25vZGU7Ci0JcmJfcGFyZW50ID0gTlVMTDsKLQlwcmV2ID0gTlVMTDsKLQotCWZvciAocHAgPSBjdXJyZW50LT50aHJlYWQucHBsLT5wcF9oZWFkOyBwcDsgcHAgPSBwcC0+bmV4dCkgewotCQl0bXAgPSBrbWVtX2NhY2hlX2FsbG9jKGlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSp0bXAgPSAqcHA7Ci0JCV9faWEzMl9pbnNlcnRfcHAocHBsLCB0bXAsIHByZXYsIHJiX2xpbmssIHJiX3BhcmVudCk7Ci0JCXByZXYgPSB0bXA7Ci0JCXJiX2xpbmsgPSAmdG1wLT5wcF9yYi5yYl9yaWdodDsKLQkJcmJfcGFyZW50ID0gJnRtcC0+cHBfcmI7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQKLWlhMzJfY29weV9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzKQotewotCWludCByZXR2YWwgPSAwOwotCi0JaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVk0pIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+dGhyZWFkLnBwbC0+cHBfY291bnQpOwotCQlwLT50aHJlYWQucHBsID0gY3VycmVudC0+dGhyZWFkLnBwbDsKLQl9IGVsc2UgewotCQlwLT50aHJlYWQucHBsID0gaWEzMl9pbml0X3BwX2xpc3QoKTsKLQkJaWYgKCFwLT50aHJlYWQucHBsKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCXsKLQkJCXJldHZhbCA9IF9faWEzMl9jb3B5X3BwX2xpc3QocC0+dGhyZWFkLnBwbCk7Ci0JCX0KLQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWVtdWxhdGVfbW1hcCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgcHJvdCwgaW50IGZsYWdzLAotCSAgICAgIGxvZmZfdCBvZmYpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXAsIGVuZCwgcGVuZCwgcHN0YXJ0LCByZXQsIGlzX2NvbmdydWVudCwgZnVkZ2UgPSAwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JbG9mZl90IHBvZmY7Ci0KLQllbmQgPSBzdGFydCArIGxlbjsKLQlwc3RhcnQgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQlwZW5kID0gUEFHRV9BTElHTihlbmQpOwotCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCWlhMzJfc2V0X3BwKCh1bnNpZ25lZCBpbnQpc3RhcnQsICh1bnNpZ25lZCBpbnQpZW5kLCBmbGFncyk7Ci0JCWlmIChzdGFydCA+IHBzdGFydCkgewotCQkJaWYgKGZsYWdzICYgTUFQX1NIQVJFRCkKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICIlcyglZCk6IGVtdWxhdGVfbW1hcCgpIGNhbid0IHNoYXJlIGhlYWQgKGFkZHI9MHglbHgpXG4iLAotCQkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RhcnQpOwotCQkJcmV0ID0gbW1hcF9zdWJwYWdlKGZpbGUsIHN0YXJ0LCBtaW4oUEFHRV9BTElHTihzdGFydCksIGVuZCksIHByb3QsIGZsYWdzLAotCQkJCQkgICBvZmYpOwotCQkJaWYgKElTX0VSUigodm9pZCAqKSByZXQpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlwc3RhcnQgKz0gUEFHRV9TSVpFOwotCQkJaWYgKHBzdGFydCA+PSBwZW5kKQotCQkJCWdvdG8gb3V0OwkvKiBkb25lICovCi0JCX0KLQkJaWYgKGVuZCA8IHBlbmQpIHsKLQkJCWlmIChmbGFncyAmIE1BUF9TSEFSRUQpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICAgICAiJXMoJWQpOiBlbXVsYXRlX21tYXAoKSBjYW4ndCBzaGFyZSB0YWlsIChlbmQ9MHglbHgpXG4iLAotCQkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZW5kKTsKLQkJCXJldCA9IG1tYXBfc3VicGFnZShmaWxlLCBtYXgoc3RhcnQsIFBBR0VfU1RBUlQoZW5kKSksIGVuZCwgcHJvdCwgZmxhZ3MsCi0JCQkJCSAgIChvZmYgKyBsZW4pIC0gb2Zmc2V0X2luX3BhZ2UoZW5kKSk7Ci0JCQlpZiAoSVNfRVJSKCh2b2lkICopIHJldCkpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXBlbmQgLT0gUEFHRV9TSVpFOwotCQkJaWYgKHBzdGFydCA+PSBwZW5kKQotCQkJCWdvdG8gb3V0OwkvKiBkb25lICovCi0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiBhIHN0YXJ0IGFkZHJlc3Mgd2FzIHNwZWNpZmllZCwgdXNlIGl0IGlmIHRoZSBlbnRpcmUgcm91bmRlZCBvdXQgYXJlYQotCQkgKiBpcyBhdmFpbGFibGUuCi0JCSAqLwotCQlpZiAoc3RhcnQgJiYgIXBzdGFydCkKLQkJCWZ1ZGdlID0gMTsJLyogaGFuZGxlIGNhc2Ugb2YgbWFwcGluZyB0byByYW5nZSAoMCxQQUdFX1NJWkUpICovCi0JCXRtcCA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgcHN0YXJ0IC0gZnVkZ2UsIHBlbmQgLSBwc3RhcnQsIDAsIGZsYWdzKTsKLQkJaWYgKHRtcCAhPSBwc3RhcnQpIHsKLQkJCXBzdGFydCA9IHRtcDsKLQkJCXN0YXJ0ID0gcHN0YXJ0ICsgb2Zmc2V0X2luX3BhZ2Uob2ZmKTsJLyogbWFrZSBzdGFydCBjb25ncnVlbnQgd2l0aCBvZmYgKi8KLQkJCWVuZCA9IHN0YXJ0ICsgbGVuOwotCQkJcGVuZCA9IFBBR0VfQUxJR04oZW5kKTsKLQkJfQotCX0KLQotCXBvZmYgPSBvZmYgKyAocHN0YXJ0IC0gc3RhcnQpOwkvKiBub3RlOiAocHN0YXJ0IC0gc3RhcnQpIG1heSBiZSBuZWdhdGl2ZSAqLwotCWlzX2NvbmdydWVudCA9IChmbGFncyAmIE1BUF9BTk9OWU1PVVMpIHx8IChvZmZzZXRfaW5fcGFnZShwb2ZmKSA9PSAwKTsKLQotCWlmICgoZmxhZ3MgJiBNQVBfU0hBUkVEKSAmJiAhaXNfY29uZ3J1ZW50KQotCQlwcmludGsoS0VSTl9JTkZPICIlcyglZCk6IGVtdWxhdGVfbW1hcCgpIGNhbid0IHNoYXJlIGNvbnRlbnRzIG9mIGluY29uZ3J1ZW50IG1tYXAgIgotCQkgICAgICAgIihhZGRyPTB4JWx4LG9mZj0weCVsbHgpXG4iLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RhcnQsIG9mZik7Ci0KLQlEQkcoIm1tYXBfYm9keTogbWFwcGluZyBbMHglbHgtMHglbHgpICVzIHdpdGggcG9mZiAweCVsbHhcbiIsIHBzdGFydCwgcGVuZCwKLQkgICAgaXNfY29uZ3J1ZW50ID8gImNvbmdydWVudCIgOiAibm90IGNvbmdydWVudCIsIHBvZmYpOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl7Ci0JCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykgJiYgaXNfY29uZ3J1ZW50KQotCQkJcmV0ID0gZG9fbW1hcChmaWxlLCBwc3RhcnQsIHBlbmQgLSBwc3RhcnQsIHByb3QsIGZsYWdzIHwgTUFQX0ZJWEVELCBwb2ZmKTsKLQkJZWxzZQotCQkJcmV0ID0gZG9fbW1hcChOVUxMLCBwc3RhcnQsIHBlbmQgLSBwc3RhcnQsCi0JCQkJICAgICAgcHJvdCB8ICgoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSA/IDAgOiBQUk9UX1dSSVRFKSwKLQkJCQkgICAgICBmbGFncyB8IE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMsIDApOwotCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQotCWlmIChJU19FUlIoKHZvaWQgKikgcmV0KSkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghaXNfY29uZ3J1ZW50KSB7Ci0JCS8qIHJlYWQgdGhlIGZpbGUgY29udGVudHMgKi8KLQkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCQlpZiAoIWlub2RlLT5pX2ZvcCB8fCAhZmlsZS0+Zl9vcC0+cmVhZAotCQkgICAgfHwgKCgqZmlsZS0+Zl9vcC0+cmVhZCkoZmlsZSwgKGNoYXIgX191c2VyICopIHBzdGFydCwgcGVuZCAtIHBzdGFydCwgJnBvZmYpCi0JCQk8IDApKQotCQl7Ci0JCQlzeXNfbXVubWFwKHBzdGFydCwgcGVuZCAtIHBzdGFydCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoIShwcm90ICYgUFJPVF9XUklURSkgJiYgc3lzX21wcm90ZWN0KHBzdGFydCwgcGVuZCAtIHBzdGFydCwgcHJvdCkgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJiBNQVBfRklYRUQpKQotCQlpYTMyX3NldF9wcCgodW5zaWduZWQgaW50KXN0YXJ0LCAodW5zaWduZWQgaW50KWVuZCwgZmxhZ3MpOwotb3V0OgotCXJldHVybiBzdGFydDsKLX0KLQotI2VuZGlmIC8qIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQgKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWdldF9wcm90MzIgKHVuc2lnbmVkIGludCBwcm90KQotewotCWlmIChwcm90ICYgUFJPVF9XUklURSkKLQkJLyogb24geDg2LCBQUk9UX1dSSVRFIGltcGxpZXMgUFJPVF9SRUFEIHdoaWNoIGltcGxpZXMgUFJPVF9FRUMgKi8KLQkJcHJvdCB8PSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDOwotCWVsc2UgaWYgKHByb3QgJiAoUFJPVF9SRUFEIHwgUFJPVF9FWEVDKSkKLQkJLyogb24geDg2LCB0aGVyZSBpcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIFBST1RfUkVBRCBhbmQgUFJPVF9FWEVDICovCi0JCXByb3QgfD0gKFBST1RfUkVBRCB8IFBST1RfRVhFQyk7Ci0KLQlyZXR1cm4gcHJvdDsKLX0KLQotdW5zaWduZWQgbG9uZwotaWEzMl9kb19tbWFwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHByb3QsIGludCBmbGFncywKLQkgICAgICBsb2ZmX3Qgb2Zmc2V0KQotewotCURCRygiaWEzMl9kb19tbWFwKGZpbGU9JXAsYWRkcj0weCVseCxsZW49MHglbHgscHJvdD0leCxmbGFncz0leCxvZmZzZXQ9MHglbGx4KVxuIiwKLQkgICAgZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgb2Zmc2V0KTsKLQotCWlmIChmaWxlICYmICghZmlsZS0+Zl9vcCB8fCAhZmlsZS0+Zl9vcC0+bW1hcCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbGVuID0gSUEzMl9QQUdFX0FMSUdOKGxlbik7Ci0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm4gYWRkcjsKLQotCWlmIChsZW4gPiBJQTMyX1BBR0VfT0ZGU0VUIHx8IGFkZHIgPiBJQTMyX1BBR0VfT0ZGU0VUIC0gbGVuKQotCXsKLQkJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKE9GRlNFVDRLKG9mZnNldCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJvdCA9IGdldF9wcm90MzIocHJvdCk7Ci0KLQlpZiAoZmxhZ3MgJiBNQVBfSFVHRVRMQikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi0JbXV0ZXhfbG9jaygmaWEzMl9tbWFwX211dGV4KTsKLQl7Ci0JCWFkZHIgPSBlbXVsYXRlX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgb2Zmc2V0KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpYTMyX21tYXBfbXV0ZXgpOwotI2Vsc2UKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXsKLQkJYWRkciA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgb2Zmc2V0KTsKLQl9Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0jZW5kaWYKLQlEQkcoImlhMzJfZG9fbW1hcDogcmV0dXJuaW5nIDB4JWx4XG4iLCBhZGRyKTsKLQlyZXR1cm4gYWRkcjsKLX0KLQotLyoKLSAqIExpbnV4L2kzODYgZGlkbid0IHVzZSB0byBiZSBhYmxlIHRvIGhhbmRsZSBtb3JlIHRoYW4gNCBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzLCBzbyB0aGVzZQotICogc3lzdGVtIGNhbGxzIHVzZWQgYSBtZW1vcnkgYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KLSAqLwotCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgYWRkcjsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBwcm90OwotCXVuc2lnbmVkIGludCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZmQ7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLX07Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfbW1hcCAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IGE7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgZmxhZ3M7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoT0ZGU0VUNEsoYS5vZmZzZXQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZsYWdzID0gYS5mbGFnczsKLQotCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKLQlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7Ci0JCWZpbGUgPSBmZ2V0KGEuZmQpOwotCQlpZiAoIWZpbGUpCi0JCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCWFkZHIgPSBpYTMyX2RvX21tYXAoZmlsZSwgYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBmbGFncywgYS5vZmZzZXQpOwotCi0JaWYgKGZpbGUpCi0JCWZwdXQoZmlsZSk7Ci0JcmV0dXJuIGFkZHI7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfbW1hcDIgKHVuc2lnbmVkIGludCBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcHJvdCwgdW5zaWduZWQgaW50IGZsYWdzLAotCSAgICAgdW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgcGdvZmYpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgcmV0dmFsOwotCi0JZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOwotCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKLQkJZmlsZSA9IGZnZXQoZmQpOwotCQlpZiAoIWZpbGUpCi0JCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCXJldHZhbCA9IGlhMzJfZG9fbW1hcChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHBnb2ZmIDw8IElBMzJfUEFHRV9TSElGVCk7Ci0KLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX211bm1hcCAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIGludCBlbmQgPSBzdGFydCArIGxlbjsKLQlsb25nIHJldDsKLQotI2lmIFBBR0VfU0hJRlQgPD0gSUEzMl9QQUdFX1NISUZUCi0JcmV0ID0gc3lzX211bm1hcChzdGFydCwgZW5kIC0gc3RhcnQpOwotI2Vsc2UKLQlpZiAoT0ZGU0VUNEsoc3RhcnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVuZCA9IElBMzJfUEFHRV9BTElHTihlbmQpOwotCWlmIChzdGFydCA+PSBlbmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gaWEzMl91bnNldF9wcCgmc3RhcnQsICZlbmQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHN0YXJ0ID49IGVuZCkKLQkJcmV0dXJuIDA7Ci0KLQltdXRleF9sb2NrKCZpYTMyX21tYXBfbXV0ZXgpOwotCXJldCA9IHN5c19tdW5tYXAoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQltdXRleF91bmxvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi0jaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAotCi0vKgotICogV2hlbiBtcHJvdGVjdCgpaW5nIGEgcGFydGlhbCBwYWdlLCB3ZSBzZXQgdGhlIHBlcm1pc3Npb24gdG8gdGhlIHVuaW9uIG9mIHRoZSBvbGQKLSAqIHNldHRpbmdzIGFuZCB0aGUgbmV3IHNldHRpbmdzLiAgSW4gb3RoZXIgd29yZHMsIGl0J3Mgb25seSBwb3NzaWJsZSB0byBtYWtlIGFjY2VzcyB0byBhCi0gKiBwYXJ0aWFsIHBhZ2UgbGVzcyByZXN0cmljdGl2ZS4KLSAqLwotc3RhdGljIGxvbmcKLW1wcm90ZWN0X3N1YnBhZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG5ld19wcm90KQotewotCWludCBvbGRfcHJvdDsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQotCWlmIChuZXdfcHJvdCA9PSBQUk9UX05PTkUpCi0JCXJldHVybiAwOwkJLyogb3B0aW1pemUgY2FzZSB3aGVyZSBub3RoaW5nIGNoYW5nZXMuLi4gKi8KLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcmVzcyk7Ci0Jb2xkX3Byb3QgPSBnZXRfcGFnZV9wcm90KHZtYSwgYWRkcmVzcyk7Ci0JcmV0dXJuIHN5c19tcHJvdGVjdChhZGRyZXNzLCBQQUdFX1NJWkUsIG5ld19wcm90IHwgb2xkX3Byb3QpOwotfQotCi0jZW5kaWYgLyogUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVCAqLwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX21wcm90ZWN0ICh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4sIGludCBwcm90KQotewotCXVuc2lnbmVkIGludCBlbmQgPSBzdGFydCArIGxlbjsKLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi0JbG9uZyByZXR2YWwgPSAwOwotI2VuZGlmCi0KLQlwcm90ID0gZ2V0X3Byb3QzMihwcm90KTsKLQotI2lmIFBBR0VfU0hJRlQgPD0gSUEzMl9QQUdFX1NISUZUCi0JcmV0dXJuIHN5c19tcHJvdGVjdChzdGFydCwgZW5kIC0gc3RhcnQsIHByb3QpOwotI2Vsc2UKLQlpZiAoT0ZGU0VUNEsoc3RhcnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVuZCA9IElBMzJfUEFHRV9BTElHTihlbmQpOwotCWlmIChlbmQgPCBzdGFydCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR2YWwgPSBpYTMyX2NvbXBhcmVfcHAoJnN0YXJ0LCAmZW5kKTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JbXV0ZXhfbG9jaygmaWEzMl9tbWFwX211dGV4KTsKLQl7Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShzdGFydCkpIHsKLQkJCS8qIHN0YXJ0IGFkZHJlc3MgaXMgNEtCIGFsaWduZWQgYnV0IG5vdCBwYWdlIGFsaWduZWQuICovCi0JCQlyZXR2YWwgPSBtcHJvdGVjdF9zdWJwYWdlKFBBR0VfU1RBUlQoc3RhcnQpLCBwcm90KTsKLQkJCWlmIChyZXR2YWwgPCAwKQotCQkJCWdvdG8gb3V0OwotCi0JCQlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOwotCQkJaWYgKHN0YXJ0ID49IGVuZCkKLQkJCQlnb3RvIG91dDsJLyogcmV0dmFsIGlzIGFscmVhZHkgemVyby4uLiAqLwotCQl9Ci0KLQkJaWYgKG9mZnNldF9pbl9wYWdlKGVuZCkpIHsKLQkJCS8qIGVuZCBhZGRyZXNzIGlzIDRLQiBhbGlnbmVkIGJ1dCBub3QgcGFnZSBhbGlnbmVkLiAqLwotCQkJcmV0dmFsID0gbXByb3RlY3Rfc3VicGFnZShQQUdFX1NUQVJUKGVuZCksIHByb3QpOwotCQkJaWYgKHJldHZhbCA8IDApCi0JCQkJZ290byBvdXQ7Ci0KLQkJCWVuZCA9IFBBR0VfU1RBUlQoZW5kKTsKLQkJfQotCQlyZXR2YWwgPSBzeXNfbXByb3RlY3Qoc3RhcnQsIGVuZCAtIHN0YXJ0LCBwcm90KTsKLQl9Ci0gIG91dDoKLQltdXRleF91bmxvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0JcmV0dXJuIHJldHZhbDsKLSNlbmRpZgotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX21yZW1hcCAodW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBvbGRfbGVuLCB1bnNpZ25lZCBpbnQgbmV3X2xlbiwKLQkJdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbmV3X2FkZHIpCi17Ci0JbG9uZyByZXQ7Ci0KLSNpZiBQQUdFX1NISUZUIDw9IElBMzJfUEFHRV9TSElGVAotCXJldCA9IHN5c19tcmVtYXAoYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIG5ld19hZGRyKTsKLSNlbHNlCi0JdW5zaWduZWQgaW50IG9sZF9lbmQsIG5ld19lbmQ7Ci0KLQlpZiAoT0ZGU0VUNEsoYWRkcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jb2xkX2xlbiA9IElBMzJfUEFHRV9BTElHTihvbGRfbGVuKTsKLQluZXdfbGVuID0gSUEzMl9QQUdFX0FMSUdOKG5ld19sZW4pOwotCW9sZF9lbmQgPSBhZGRyICsgb2xkX2xlbjsKLQluZXdfZW5kID0gYWRkciArIG5ld19sZW47Ci0KLQlpZiAoIW5ld19sZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChmbGFncyAmIE1SRU1BUF9GSVhFRCkgJiYgKE9GRlNFVDRLKG5ld19hZGRyKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9sZF9sZW4gPj0gbmV3X2xlbikgewotCQlyZXQgPSBzeXMzMl9tdW5tYXAoYWRkciArIG5ld19sZW4sIG9sZF9sZW4gLSBuZXdfbGVuKTsKLQkJaWYgKHJldCAmJiBvbGRfbGVuICE9IG5ld19sZW4pCi0JCQlyZXR1cm4gcmV0OwotCQlyZXQgPSBhZGRyOwotCQlpZiAoIShmbGFncyAmIE1SRU1BUF9GSVhFRCkgfHwgKG5ld19hZGRyID09IGFkZHIpKQotCQkJcmV0dXJuIHJldDsKLQkJb2xkX2xlbiA9IG5ld19sZW47Ci0JfQotCi0JYWRkciA9IFBBR0VfU1RBUlQoYWRkcik7Ci0Jb2xkX2xlbiA9IFBBR0VfQUxJR04ob2xkX2VuZCkgLSBhZGRyOwotCW5ld19sZW4gPSBQQUdFX0FMSUdOKG5ld19lbmQpIC0gYWRkcjsKLQotCW11dGV4X2xvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0JcmV0ID0gc3lzX21yZW1hcChhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgbmV3X2FkZHIpOwotCW11dGV4X3VubG9jaygmaWEzMl9tbWFwX211dGV4KTsKLQotCWlmICgocmV0ID49IDApICYmIChvbGRfbGVuIDwgbmV3X2xlbikpIHsKLQkJLyogbXJlbWFwIGV4cGFuZGVkIHN1Y2Nlc3NmdWxseSAqLwotCQlpYTMyX3NldF9wcChvbGRfZW5kLCBuZXdfZW5kLCBmbGFncyk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCi1zeXMzMl9hbGFybSAodW5zaWduZWQgaW50IHNlY29uZHMpCi17Ci0JcmV0dXJuIGFsYXJtX3NldGl0aW1lcihzZWNvbmRzKTsKLX0KLQotc3RydWN0IHNlbF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBpbnQgaW5wOwotCXVuc2lnbmVkIGludCBvdXRwOwotCXVuc2lnbmVkIGludCBleHA7Ci0JdW5zaWduZWQgaW50IHR2cDsKLX07Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfb2xkX3NlbGVjdCAoc3RydWN0IHNlbF9hcmdfc3RydWN0IF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBzZWxfYXJnX3N0cnVjdCBhOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBjb21wYXRfc3lzX3NlbGVjdChhLm4sIGNvbXBhdF9wdHIoYS5pbnApLCBjb21wYXRfcHRyKGEub3V0cCksCi0JCQkJIGNvbXBhdF9wdHIoYS5leHApLCBjb21wYXRfcHRyKGEudHZwKSk7Ci19Ci0KLSNkZWZpbmUgU0VNT1AJCSAxCi0jZGVmaW5lIFNFTUdFVAkJIDIKLSNkZWZpbmUgU0VNQ1RMCQkgMwotI2RlZmluZSBTRU1USU1FRE9QCSA0Ci0jZGVmaW5lIE1TR1NORAkJMTEKLSNkZWZpbmUgTVNHUkNWCQkxMgotI2RlZmluZSBNU0dHRVQJCTEzCi0jZGVmaW5lIE1TR0NUTAkJMTQKLSNkZWZpbmUgU0hNQVQJCTIxCi0jZGVmaW5lIFNITURUCQkyMgotI2RlZmluZSBTSE1HRVQJCTIzCi0jZGVmaW5lIFNITUNUTAkJMjQKLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9pcGModTMyIGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCB1MzIgcHRyLCB1MzIgZmlmdGgpCi17Ci0JaW50IHZlcnNpb247Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0Jc3dpdGNoIChjYWxsKSB7Ci0JICAgICAgY2FzZSBTRU1USU1FRE9QOgotCQlpZiAoZmlmdGgpCi0JCQlyZXR1cm4gY29tcGF0X3N5c19zZW10aW1lZG9wKGZpcnN0LCBjb21wYXRfcHRyKHB0ciksCi0JCQkJc2Vjb25kLCBjb21wYXRfcHRyKGZpZnRoKSk7Ci0JCS8qIGVsc2UgZmFsbCB0aHJvdWdoIGZvciBub3JtYWwgc2Vtb3AoKSAqLwotCSAgICAgIGNhc2UgU0VNT1A6Ci0JCS8qIHN0cnVjdCBzZW1idWYgaXMgdGhlIHNhbWUgb24gMzIgYW5kIDY0Yml0IDopKSAqLwotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIGNvbXBhdF9wdHIocHRyKSwgc2Vjb25kLAotCQkJCSAgICAgIE5VTEwpOwotCSAgICAgIGNhc2UgU0VNR0VUOgotCQlyZXR1cm4gc3lzX3NlbWdldChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JICAgICAgY2FzZSBTRU1DVEw6Ci0JCXJldHVybiBjb21wYXRfc3lzX3NlbWN0bChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgY29tcGF0X3B0cihwdHIpKTsKLQotCSAgICAgIGNhc2UgTVNHU05EOgotCQlyZXR1cm4gY29tcGF0X3N5c19tc2dzbmQoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGNvbXBhdF9wdHIocHRyKSk7Ci0JICAgICAgY2FzZSBNU0dSQ1Y6Ci0JCXJldHVybiBjb21wYXRfc3lzX21zZ3JjdihmaXJzdCwgc2Vjb25kLCBmaWZ0aCwgdGhpcmQsIHZlcnNpb24sIGNvbXBhdF9wdHIocHRyKSk7Ci0JICAgICAgY2FzZSBNU0dHRVQ6Ci0JCXJldHVybiBzeXNfbXNnZ2V0KChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JICAgICAgY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBjb21wYXRfc3lzX21zZ2N0bChmaXJzdCwgc2Vjb25kLCBjb21wYXRfcHRyKHB0cikpOwotCi0JICAgICAgY2FzZSBTSE1BVDoKLQkJcmV0dXJuIGNvbXBhdF9zeXNfc2htYXQoZmlyc3QsIHNlY29uZCwgdGhpcmQsIHZlcnNpb24sIGNvbXBhdF9wdHIocHRyKSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgU0hNRFQ6Ci0JCXJldHVybiBzeXNfc2htZHQoY29tcGF0X3B0cihwdHIpKTsKLQkgICAgICBjYXNlIFNITUdFVDoKLQkJcmV0dXJuIHN5c19zaG1nZXQoZmlyc3QsICh1bnNpZ25lZClzZWNvbmQsIHRoaXJkKTsKLQkgICAgICBjYXNlIFNITUNUTDoKLQkJcmV0dXJuIGNvbXBhdF9zeXNfc2htY3RsKGZpcnN0LCBzZWNvbmQsIGNvbXBhdF9wdHIocHRyKSk7Ci0KLQkgICAgICBkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1NZUzsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotY29tcGF0X3N5c193YWl0NCAoY29tcGF0X3BpZF90IHBpZCwgY29tcGF0X3VpbnRfdCAqIHN0YXRfYWRkciwgaW50IG9wdGlvbnMsCi0JCSBzdHJ1Y3QgY29tcGF0X3J1c2FnZSAqcnUpOwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3dhaXRwaWQgKGludCBwaWQsIHVuc2lnbmVkIGludCAqc3RhdF9hZGRyLCBpbnQgb3B0aW9ucykKLXsKLQlyZXR1cm4gY29tcGF0X3N5c193YWl0NChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgTlVMTCk7Ci19Ci0KLS8qCi0gKiAgVGhlIG9yZGVyIGluIHdoaWNoIHJlZ2lzdGVycyBhcmUgc3RvcmVkIGluIHRoZSBwdHJhY2UgcmVncyBzdHJ1Y3R1cmUKLSAqLwotI2RlZmluZSBQVF9FQlgJMAotI2RlZmluZSBQVF9FQ1gJMQotI2RlZmluZSBQVF9FRFgJMgotI2RlZmluZSBQVF9FU0kJMwotI2RlZmluZSBQVF9FREkJNAotI2RlZmluZSBQVF9FQlAJNQotI2RlZmluZSBQVF9FQVgJNgotI2RlZmluZSBQVF9EUwk3Ci0jZGVmaW5lIFBUX0VTCTgKLSNkZWZpbmUgUFRfRlMJOQotI2RlZmluZSBQVF9HUwkxMAotI2RlZmluZSBQVF9PUklHX0VBWCAxMQotI2RlZmluZSBQVF9FSVAJMTIKLSNkZWZpbmUgUFRfQ1MJMTMKLSNkZWZpbmUgUFRfRUZMCTE0Ci0jZGVmaW5lIFBUX1VFU1AJMTUKLSNkZWZpbmUgUFRfU1MJMTYKLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0cmVnIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8pCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKmNoaWxkX3JlZ3M7Ci0KLQljaGlsZF9yZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQlzd2l0Y2ggKHJlZ25vIC8gc2l6ZW9mKGludCkpIHsKLQkgICAgICBjYXNlIFBUX0VCWDogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxMTsKLQkgICAgICBjYXNlIFBUX0VDWDogcmV0dXJuIGNoaWxkX3JlZ3MtPnI5OwotCSAgICAgIGNhc2UgUFRfRURYOiByZXR1cm4gY2hpbGRfcmVncy0+cjEwOwotCSAgICAgIGNhc2UgUFRfRVNJOiByZXR1cm4gY2hpbGRfcmVncy0+cjE0OwotCSAgICAgIGNhc2UgUFRfRURJOiByZXR1cm4gY2hpbGRfcmVncy0+cjE1OwotCSAgICAgIGNhc2UgUFRfRUJQOiByZXR1cm4gY2hpbGRfcmVncy0+cjEzOwotCSAgICAgIGNhc2UgUFRfRUFYOiByZXR1cm4gY2hpbGRfcmVncy0+cjg7Ci0JICAgICAgY2FzZSBQVF9PUklHX0VBWDogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxOyAvKiBzZWUgZGlzcGF0Y2hfdG9faWEzMl9oYW5kbGVyKCkgKi8KLQkgICAgICBjYXNlIFBUX0VJUDogcmV0dXJuIGNoaWxkX3JlZ3MtPmNyX2lpcDsKLQkgICAgICBjYXNlIFBUX1VFU1A6IHJldHVybiBjaGlsZF9yZWdzLT5yMTI7Ci0JICAgICAgY2FzZSBQVF9FRkw6IHJldHVybiBjaGlsZC0+dGhyZWFkLmVmbGFnOwotCSAgICAgIGNhc2UgUFRfRFM6IGNhc2UgUFRfRVM6IGNhc2UgUFRfRlM6IGNhc2UgUFRfR1M6IGNhc2UgUFRfU1M6Ci0JCXJldHVybiBfX1VTRVJfRFM7Ci0JICAgICAgY2FzZSBQVF9DUzogcmV0dXJuIF9fVVNFUl9DUzsKLQkgICAgICBkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImlhMzIuZ2V0cmVnKCk6IHVua25vd24gcmVnaXN0ZXIgJWRcbiIsIHJlZ25vKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotcHV0cmVnIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRfcmVnczsKLQotCWNoaWxkX3JlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCXN3aXRjaCAocmVnbm8gLyBzaXplb2YoaW50KSkgewotCSAgICAgIGNhc2UgUFRfRUJYOiBjaGlsZF9yZWdzLT5yMTEgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9FQ1g6IGNoaWxkX3JlZ3MtPnI5ID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRURYOiBjaGlsZF9yZWdzLT5yMTAgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9FU0k6IGNoaWxkX3JlZ3MtPnIxNCA9IHZhbHVlOyBicmVhazsKLQkgICAgICBjYXNlIFBUX0VESTogY2hpbGRfcmVncy0+cjE1ID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRUJQOiBjaGlsZF9yZWdzLT5yMTMgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9FQVg6IGNoaWxkX3JlZ3MtPnI4ID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfT1JJR19FQVg6IGNoaWxkX3JlZ3MtPnIxID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRUlQOiBjaGlsZF9yZWdzLT5jcl9paXAgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9VRVNQOiBjaGlsZF9yZWdzLT5yMTIgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9FRkw6IGNoaWxkLT50aHJlYWQuZWZsYWcgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9EUzogY2FzZSBQVF9FUzogY2FzZSBQVF9GUzogY2FzZSBQVF9HUzogY2FzZSBQVF9TUzoKLQkJaWYgKHZhbHVlICE9IF9fVVNFUl9EUykKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJpYTMyLnB1dHJlZzogYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBzZWdtZW50IHJlZ2lzdGVyICVkID0gJXhcbiIsCi0JCQkgICAgICAgcmVnbm8sIHZhbHVlKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9DUzoKLQkJaWYgKHZhbHVlICE9IF9fVVNFUl9DUykKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJpYTMyLnB1dHJlZzogYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBzZWdtZW50IHJlZ2lzdGVyICVkID0gJXhcbiIsCi0JCQkgICAgICAgcmVnbm8sIHZhbHVlKTsKLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJpYTMyLnB1dHJlZzogdW5rbm93biByZWdpc3RlciAlZFxuIiwgcmVnbm8pOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wdXRfZnByZWcgKGludCByZWdubywgc3RydWN0IF9mcHJlZ19pYTMyIF9fdXNlciAqcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcHRwLAotCSAgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3cCwgaW50IHRvcykKLXsKLQlzdHJ1Y3QgX2ZwcmVnX2lhMzIgKmY7Ci0JY2hhciBidWZbMzJdOwotCi0JZiA9IChzdHJ1Y3QgX2ZwcmVnX2lhMzIgKikoKCh1bnNpZ25lZCBsb25nKWJ1ZiArIDE1KSAmIH4xNSk7Ci0JaWYgKChyZWdubyArPSB0b3MpID49IDgpCi0JCXJlZ25vIC09IDg7Ci0Jc3dpdGNoIChyZWdubykgewotCSAgICAgIGNhc2UgMDoKLQkJaWE2NGYyaWEzMmYoZiwgJnB0cC0+ZjgpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDE6Ci0JCWlhNjRmMmlhMzJmKGYsICZwdHAtPmY5KTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAyOgotCQlpYTY0ZjJpYTMyZihmLCAmcHRwLT5mMTApOwotCQlicmVhazsKLQkgICAgICBjYXNlIDM6Ci0JCWlhNjRmMmlhMzJmKGYsICZwdHAtPmYxMSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgNDoKLQkgICAgICBjYXNlIDU6Ci0JICAgICAgY2FzZSA2OgotCSAgICAgIGNhc2UgNzoKLQkJaWE2NGYyaWEzMmYoZiwgJnN3cC0+ZjEyICsgKHJlZ25vIC0gNCkpOwotCQlicmVhazsKLQl9Ci0JY29weV90b191c2VyKHJlZywgZiwgc2l6ZW9mKCpyZWcpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9mcHJlZyAoaW50IHJlZ25vLCBzdHJ1Y3QgX2ZwcmVnX2lhMzIgX191c2VyICpyZWcsIHN0cnVjdCBwdF9yZWdzICpwdHAsCi0JICAgc3RydWN0IHN3aXRjaF9zdGFjayAqc3dwLCBpbnQgdG9zKQotewotCi0JaWYgKChyZWdubyArPSB0b3MpID49IDgpCi0JCXJlZ25vIC09IDg7Ci0Jc3dpdGNoIChyZWdubykgewotCSAgICAgIGNhc2UgMDoKLQkJY29weV9mcm9tX3VzZXIoJnB0cC0+ZjgsIHJlZywgc2l6ZW9mKCpyZWcpKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAxOgotCQljb3B5X2Zyb21fdXNlcigmcHRwLT5mOSwgcmVnLCBzaXplb2YoKnJlZykpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDI6Ci0JCWNvcHlfZnJvbV91c2VyKCZwdHAtPmYxMCwgcmVnLCBzaXplb2YoKnJlZykpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDM6Ci0JCWNvcHlfZnJvbV91c2VyKCZwdHAtPmYxMSwgcmVnLCBzaXplb2YoKnJlZykpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDQ6Ci0JICAgICAgY2FzZSA1OgotCSAgICAgIGNhc2UgNjoKLQkgICAgICBjYXNlIDc6Ci0JCWNvcHlfZnJvbV91c2VyKCZzd3AtPmYxMiArIChyZWdubyAtIDQpLCByZWcsIHNpemVvZigqcmVnKSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm47Ci19Ci0KLWludAotc2F2ZV9pYTMyX2Zwc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqc2F2ZSkKLXsKLQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzd3A7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0cDsKLQlpbnQgaSwgdG9zOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzYXZlLCBzaXplb2YoKnNhdmUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZjciAmIDB4ZmZmZiwgJnNhdmUtPmN3ZCk7Ci0JX19wdXRfdXNlcih0c2stPnRocmVhZC5mc3IgJiAweGZmZmYsICZzYXZlLT5zd2QpOwotCV9fcHV0X3VzZXIoKHRzay0+dGhyZWFkLmZzcj4+MTYpICYgMHhmZmZmLCAmc2F2ZS0+dHdkKTsKLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZpciwgJnNhdmUtPmZpcCk7Ci0JX19wdXRfdXNlcigodHNrLT50aHJlYWQuZmlyPj4zMikgJiAweGZmZmYsICZzYXZlLT5mY3MpOwotCV9fcHV0X3VzZXIodHNrLT50aHJlYWQuZmRyLCAmc2F2ZS0+Zm9vKTsKLQlfX3B1dF91c2VyKCh0c2stPnRocmVhZC5mZHI+PjMyKSAmIDB4ZmZmZiwgJnNhdmUtPmZvcyk7Ci0KLQkvKgotCSAqICBTdGFjayBmcmFtZXMgc3RhcnQgd2l0aCAxNi1ieXRlcyBvZiB0ZW1wIHNwYWNlCi0JICovCi0Jc3dwID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikodHNrLT50aHJlYWQua3NwICsgMTYpOwotCXB0cCA9IHRhc2tfcHRfcmVncyh0c2spOwotCXRvcyA9ICh0c2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlwdXRfZnByZWcoaSwgJnNhdmUtPnN0X3NwYWNlW2ldLCBwdHAsIHN3cCwgdG9zKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcmVzdG9yZV9pYTMyX2Zwc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqc2F2ZSkKLXsKLQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzd3A7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0cDsKLQlpbnQgaSwgdG9zOwotCXVuc2lnbmVkIGludCBmc3JsbywgZnNyaGksIG51bTMyOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNhdmUsIHNpemVvZigqc2F2ZSkpKQotCQlyZXR1cm4oLUVGQVVMVCk7Ci0KLQlfX2dldF91c2VyKG51bTMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5jd2QpOwotCXRzay0+dGhyZWFkLmZjciA9ICh0c2stPnRocmVhZC5mY3IgJiAofjB4MWYzZikpIHwgKG51bTMyICYgMHgxZjNmKTsKLQlfX2dldF91c2VyKGZzcmxvLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5zd2QpOwotCV9fZ2V0X3VzZXIoZnNyaGksICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPnR3ZCk7Ci0JbnVtMzIgPSAoZnNyaGkgPDwgMTYpIHwgZnNybG87Ci0JdHNrLT50aHJlYWQuZnNyID0gKHRzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmZmZmZikpIHwgbnVtMzI7Ci0JX19nZXRfdXNlcihudW0zMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+ZmlwKTsKLQl0c2stPnRocmVhZC5maXIgPSAodHNrLT50aHJlYWQuZmlyICYgKH4weGZmZmZmZmZmKSkgfCBudW0zMjsKLQlfX2dldF91c2VyKG51bTMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5mb28pOwotCXRzay0+dGhyZWFkLmZkciA9ICh0c2stPnRocmVhZC5mZHIgJiAofjB4ZmZmZmZmZmYpKSB8IG51bTMyOwotCi0JLyoKLQkgKiAgU3RhY2sgZnJhbWVzIHN0YXJ0IHdpdGggMTYtYnl0ZXMgb2YgdGVtcCBzcGFjZQotCSAqLwotCXN3cCA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopKHRzay0+dGhyZWFkLmtzcCArIDE2KTsKLQlwdHAgPSB0YXNrX3B0X3JlZ3ModHNrKTsKLQl0b3MgPSAodHNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZ2V0X2ZwcmVnKGksICZzYXZlLT5zdF9zcGFjZVtpXSwgcHRwLCBzd3AsIHRvcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotc2F2ZV9pYTMyX2ZweHN0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKnNhdmUpCi17Ci0Jc3RydWN0IHN3aXRjaF9zdGFjayAqc3dwOwotCXN0cnVjdCBwdF9yZWdzICpwdHA7Ci0JaW50IGksIHRvczsKLQl1bnNpZ25lZCBsb25nIG14Y3NyPTA7Ci0JdW5zaWduZWQgbG9uZyBudW0xMjhbMl07Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHNhdmUsIHNpemVvZigqc2F2ZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCV9fcHV0X3VzZXIodHNrLT50aHJlYWQuZmNyICYgMHhmZmZmLCAmc2F2ZS0+Y3dkKTsKLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZzciAmIDB4ZmZmZiwgJnNhdmUtPnN3ZCk7Ci0JX19wdXRfdXNlcigodHNrLT50aHJlYWQuZnNyPj4xNikgJiAweGZmZmYsICZzYXZlLT50d2QpOwotCV9fcHV0X3VzZXIodHNrLT50aHJlYWQuZmlyLCAmc2F2ZS0+ZmlwKTsKLQlfX3B1dF91c2VyKCh0c2stPnRocmVhZC5maXI+PjMyKSAmIDB4ZmZmZiwgJnNhdmUtPmZjcyk7Ci0JX19wdXRfdXNlcih0c2stPnRocmVhZC5mZHIsICZzYXZlLT5mb28pOwotCV9fcHV0X3VzZXIoKHRzay0+dGhyZWFkLmZkcj4+MzIpICYgMHhmZmZmLCAmc2F2ZS0+Zm9zKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiAgU3RhY2sgZnJhbWVzIHN0YXJ0IHdpdGggMTYtYnl0ZXMgb2YgdGVtcCBzcGFjZQotICAgICAgICAgKi8KLSAgICAgICAgc3dwID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikodHNrLT50aHJlYWQua3NwICsgMTYpOwotICAgICAgICBwdHAgPSB0YXNrX3B0X3JlZ3ModHNrKTsKLQl0b3MgPSAodHNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCXB1dF9mcHJlZyhpLCAoc3RydWN0IF9mcHJlZ19pYTMyIF9fdXNlciAqKSZzYXZlLT5zdF9zcGFjZVs0KmldLCBwdHAsIHN3cCwgdG9zKTsKLQotCW14Y3NyID0gKCh0c2stPnRocmVhZC5mY3I+PjMyKSAmIDB4ZmY4MCkgfCAoKHRzay0+dGhyZWFkLmZzcj4+MzIpICYgMHgzZik7Ci0JX19wdXRfdXNlcihteGNzciAmIDB4ZmZmZiwgJnNhdmUtPm14Y3NyKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCW1lbWNweSgmKG51bTEyOFswXSksICYoc3dwLT5mMTYpICsgaSoyLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQltZW1jcHkoJihudW0xMjhbMV0pLCAmKHN3cC0+ZjE3KSArIGkqMiwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJY29weV90b191c2VyKCZzYXZlLT54bW1fc3BhY2VbMF0gKyA0KmksIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlc3RvcmVfaWEzMl9mcHhzdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpzYXZlKQotewotCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3cDsKLQlzdHJ1Y3QgcHRfcmVncyAqcHRwOwotCWludCBpLCB0b3M7Ci0JdW5zaWduZWQgaW50IGZzcmxvLCBmc3JoaSwgbnVtMzI7Ci0JaW50IG14Y3NyOwotCXVuc2lnbmVkIGxvbmcgbnVtNjQ7Ci0JdW5zaWduZWQgbG9uZyBudW0xMjhbMl07Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc2F2ZSwgc2l6ZW9mKCpzYXZlKSkpCi0JCXJldHVybigtRUZBVUxUKTsKLQotCV9fZ2V0X3VzZXIobnVtMzIsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmN3ZCk7Ci0JdHNrLT50aHJlYWQuZmNyID0gKHRzay0+dGhyZWFkLmZjciAmICh+MHgxZjNmKSkgfCAobnVtMzIgJiAweDFmM2YpOwotCV9fZ2V0X3VzZXIoZnNybG8sICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPnN3ZCk7Ci0JX19nZXRfdXNlcihmc3JoaSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+dHdkKTsKLQludW0zMiA9IChmc3JoaSA8PCAxNikgfCBmc3JsbzsKLQl0c2stPnRocmVhZC5mc3IgPSAodHNrLT50aHJlYWQuZnNyICYgKH4weGZmZmZmZmZmKSkgfCBudW0zMjsKLQlfX2dldF91c2VyKG51bTMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5maXApOwotCXRzay0+dGhyZWFkLmZpciA9ICh0c2stPnRocmVhZC5maXIgJiAofjB4ZmZmZmZmZmYpKSB8IG51bTMyOwotCV9fZ2V0X3VzZXIobnVtMzIsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmZvbyk7Ci0JdHNrLT50aHJlYWQuZmRyID0gKHRzay0+dGhyZWFkLmZkciAmICh+MHhmZmZmZmZmZikpIHwgbnVtMzI7Ci0KLQkvKgotCSAqICBTdGFjayBmcmFtZXMgc3RhcnQgd2l0aCAxNi1ieXRlcyBvZiB0ZW1wIHNwYWNlCi0JICovCi0Jc3dwID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikodHNrLT50aHJlYWQua3NwICsgMTYpOwotCXB0cCA9IHRhc2tfcHRfcmVncyh0c2spOwotCXRvcyA9ICh0c2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCWdldF9mcHJlZyhpLCAoc3RydWN0IF9mcHJlZ19pYTMyIF9fdXNlciAqKSZzYXZlLT5zdF9zcGFjZVs0KmldLCBwdHAsIHN3cCwgdG9zKTsKLQotCV9fZ2V0X3VzZXIobXhjc3IsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPm14Y3NyKTsKLQludW02NCA9IG14Y3NyICYgMHhmZjEwOwotCXRzay0+dGhyZWFkLmZjciA9ICh0c2stPnRocmVhZC5mY3IgJiAofjB4ZmYxMDAwMDAwMDAwVUwpKSB8IChudW02NDw8MzIpOwotCW51bTY0ID0gbXhjc3IgJiAweDNmOwotCXRzay0+dGhyZWFkLmZzciA9ICh0c2stPnRocmVhZC5mc3IgJiAofjB4M2YwMDAwMDAwMFVMKSkgfCAobnVtNjQ8PDMyKTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+eG1tX3NwYWNlWzBdICsgNCppLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCQltZW1jcHkoJihzd3AtPmYxNikgKyBpKjIsICYobnVtMTI4WzBdKSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJbWVtY3B5KCYoc3dwLT5mMTcpICsgaSoyLCAmKG51bTEyOFsxXSksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1sb25nIGNvbXBhdF9hcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBjb21wYXRfbG9uZ190IHJlcXVlc3QsCi0JY29tcGF0X3Vsb25nX3QgY2FkZHIsIGNvbXBhdF91bG9uZ190IGNkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNhZGRyOwotCXVuc2lnbmVkIGxvbmcgZGF0YSA9IGNkYXRhOwotCXVuc2lnbmVkIGludCB0bXA7Ci0JbG9uZyBpLCByZXQ7Ci0KLQlzd2l0Y2ggKHJlcXVlc3QpIHsKLQkgICAgICBjYXNlIFBUUkFDRV9QRUVLVVNSOgkvKiByZWFkIHdvcmQgYXQgYWRkciBpbiBVU0VSIGFyZWEgKi8KLQkJcmV0ID0gLUVJTzsKLQkJaWYgKChhZGRyICYgMykgfHwgYWRkciA+IDE3KnNpemVvZihpbnQpKQotCQkJYnJlYWs7Ci0KLQkJdG1wID0gZ2V0cmVnKGNoaWxkLCBhZGRyKTsKLQkJaWYgKCFwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGNvbXBhdF9wdHIoZGF0YSkpKQotCQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIFBUUkFDRV9QT0tFVVNSOgkvKiB3cml0ZSB3b3JkIGF0IGFkZHIgaW4gVVNFUiBhcmVhICovCi0JCXJldCA9IC1FSU87Ci0JCWlmICgoYWRkciAmIDMpIHx8IGFkZHIgPiAxNypzaXplb2YoaW50KSkKLQkJCWJyZWFrOwotCi0JCXB1dHJlZyhjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBJQTMyX1BUUkFDRV9HRVRSRUdTOgotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGNvbXBhdF9wdHIoZGF0YSksIDE3KnNpemVvZihpbnQpKSkgewotCQkJcmV0ID0gLUVJTzsKLQkJCWJyZWFrOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCAoaW50KSAoMTcqc2l6ZW9mKGludCkpOyBpICs9IHNpemVvZihpbnQpICkgewotCQkJcHV0X3VzZXIoZ2V0cmVnKGNoaWxkLCBpKSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgY29tcGF0X3B0cihkYXRhKSk7Ci0JCQlkYXRhICs9IHNpemVvZihpbnQpOwotCQl9Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBJQTMyX1BUUkFDRV9TRVRSRUdTOgotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgY29tcGF0X3B0cihkYXRhKSwgMTcqc2l6ZW9mKGludCkpKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IChpbnQpICgxNypzaXplb2YoaW50KSk7IGkgKz0gc2l6ZW9mKGludCkgKSB7Ci0JCQlnZXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGNvbXBhdF9wdHIoZGF0YSkpOwotCQkJcHV0cmVnKGNoaWxkLCBpLCB0bXApOwotCQkJZGF0YSArPSBzaXplb2YoaW50KTsKLQkJfQotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfR0VURlBSRUdTOgotCQlyZXQgPSBzYXZlX2lhMzJfZnBzdGF0ZShjaGlsZCwgKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QgX191c2VyICopCi0JCQkJCWNvbXBhdF9wdHIoZGF0YSkpOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfR0VURlBYUkVHUzoKLQkJcmV0ID0gc2F2ZV9pYTMyX2ZweHN0YXRlKGNoaWxkLCAoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKikKLQkJCQkJIGNvbXBhdF9wdHIoZGF0YSkpOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfU0VURlBSRUdTOgotCQlyZXQgPSByZXN0b3JlX2lhMzJfZnBzdGF0ZShjaGlsZCwgKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QgX191c2VyICopCi0JCQkJCSAgIGNvbXBhdF9wdHIoZGF0YSkpOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfU0VURlBYUkVHUzoKLQkJcmV0ID0gcmVzdG9yZV9pYTMyX2ZweHN0YXRlKGNoaWxkLCAoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKikKLQkJCQkJICAgIGNvbXBhdF9wdHIoZGF0YSkpOwotCQlicmVhazsKLQotCSAgICAgIGRlZmF1bHQ6Ci0JCXJldHVybiBjb21wYXRfcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGNhZGRyLCBjZGF0YSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQJc3Nfc3A7Ci0JdW5zaWduZWQgaW50CXNzX2ZsYWdzOwotCXVuc2lnbmVkIGludAlzc19zaXplOwotfSBpYTMyX3N0YWNrX3Q7Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2lnYWx0c3RhY2sgKGlhMzJfc3RhY2tfdCBfX3VzZXIgKnVzczMyLCBpYTMyX3N0YWNrX3QgX191c2VyICp1b3NzMzIsCi0JCSAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQsIGxvbmcgYXJnNSwgbG9uZyBhcmc2LAotCQkgICBsb25nIGFyZzcsIHN0cnVjdCBwdF9yZWdzIHB0KQotewotCXN0YWNrX3QgdXNzLCB1b3NzOwotCWlhMzJfc3RhY2tfdCBidWYzMjsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCWlmICh1c3MzMikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZjMyLCB1c3MzMiwgc2l6ZW9mKGlhMzJfc3RhY2tfdCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXVzcy5zc19zcCA9ICh2b2lkIF9fdXNlciAqKSAobG9uZykgYnVmMzIuc3Nfc3A7Ci0JCXVzcy5zc19mbGFncyA9IGJ1ZjMyLnNzX2ZsYWdzOwotCQkvKiBNSU5TSUdTVEtTWiBpcyBkaWZmZXJlbnQgZm9yIGlhMzIgdnMgaWE2NC4gV2UgbGllIGhlcmUgdG8gcGFzcyB0aGUKLQkgICAgICAgICAgIGNoZWNrIGFuZCBzZXQgaXQgdG8gdGhlIHVzZXIgcmVxdWVzdGVkIHZhbHVlIGxhdGVyICovCi0JCWlmICgoYnVmMzIuc3NfZmxhZ3MgIT0gU1NfRElTQUJMRSkgJiYgKGJ1ZjMyLnNzX3NpemUgPCBNSU5TSUdTVEtTWl9JQTMyKSkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXVzcy5zc19zaXplID0gTUlOU0lHU1RLU1o7Ci0JfQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IGRvX3NpZ2FsdHN0YWNrKHVzczMyID8gKHN0YWNrX3QgX191c2VyICopICZ1c3MgOiBOVUxMLAotCQkJICAgICAoc3RhY2tfdCBfX3VzZXIgKikgJnVvc3MsIHB0LnIxMik7Ci0gCWN1cnJlbnQtPnNhc19zc19zaXplID0gYnVmMzIuc3Nfc2l6ZTsKLQlzZXRfZnMob2xkX2ZzKTsKLW91dDoKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuKHJldCk7Ci0JaWYgKHVvc3MzMikgewotCQlidWYzMi5zc19zcCA9IChsb25nIF9fdXNlcikgdW9zcy5zc19zcDsKLQkJYnVmMzIuc3NfZmxhZ3MgPSB1b3NzLnNzX2ZsYWdzOwotCQlidWYzMi5zc19zaXplID0gdW9zcy5zc19zaXplOwotCQlpZiAoY29weV90b191c2VyKHVvc3MzMiwgJmJ1ZjMyLCBzaXplb2YoaWEzMl9zdGFja190KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX21zeW5jICh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4sIGludCBmbGFncykKLXsKLQl1bnNpZ25lZCBpbnQgYWRkcjsKLQotCWlmIChPRkZTRVQ0SyhzdGFydCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWFkZHIgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQlyZXR1cm4gc3lzX21zeW5jKGFkZHIsIGxlbiArIChzdGFydCAtIGFkZHIpLCBmbGFncyk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfbmV3dW5hbWUgKHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCi17Ci0JaW50IHJldCA9IHN5c19uZXd1bmFtZShuYW1lKTsKLQotCWlmICghcmV0KQotCQlpZiAoY29weV90b191c2VyKG5hbWUtPm1hY2hpbmUsICJpNjg2XDBcMFwwIiwgOCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZ2V0cmVzdWlkMTYgKHUxNiBfX3VzZXIgKnJ1aWQsIHUxNiBfX3VzZXIgKmV1aWQsIHUxNiBfX3VzZXIgKnN1aWQpCi17Ci0JdWlkX3QgYSwgYiwgYzsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19nZXRyZXN1aWQoKHVpZF90IF9fdXNlciAqKSAmYSwgKHVpZF90IF9fdXNlciAqKSAmYiwgKHVpZF90IF9fdXNlciAqKSAmYyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocHV0X3VzZXIoYSwgcnVpZCkgfHwgcHV0X3VzZXIoYiwgZXVpZCkgfHwgcHV0X3VzZXIoYywgc3VpZCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZ2V0cmVzZ2lkMTYgKHUxNiBfX3VzZXIgKnJnaWQsIHUxNiBfX3VzZXIgKmVnaWQsIHUxNiBfX3VzZXIgKnNnaWQpCi17Ci0JZ2lkX3QgYSwgYiwgYzsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19nZXRyZXNnaWQoKGdpZF90IF9fdXNlciAqKSAmYSwgKGdpZF90IF9fdXNlciAqKSAmYiwgKGdpZF90IF9fdXNlciAqKSAmYyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHB1dF91c2VyKGEsIHJnaWQpIHwgcHV0X3VzZXIoYiwgZWdpZCkgfCBwdXRfdXNlcihjLCBzZ2lkKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9sc2VlayAodW5zaWduZWQgaW50IGZkLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgd2hlbmNlKQotewotCS8qIFNpZ24tZXh0ZW5zaW9uIG9mICJvZmZzZXQiIGlzIGltcG9ydGFudCBoZXJlLi4uICovCi0JcmV0dXJuIHN5c19sc2VlayhmZCwgb2Zmc2V0LCB3aGVuY2UpOwotfQotCi1zdGF0aWMgaW50Ci1ncm91cHMxNl90b191c2VyKHNob3J0IF9fdXNlciAqZ3JvdXBsaXN0LCBzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKLXsKLQlpbnQgaTsKLQlzaG9ydCBncm91cDsKLQotCWZvciAoaSA9IDA7IGkgPCBncm91cF9pbmZvLT5uZ3JvdXBzOyBpKyspIHsKLQkJZ3JvdXAgPSAoc2hvcnQpR1JPVVBfQVQoZ3JvdXBfaW5mbywgaSk7Ci0JCWlmIChwdXRfdXNlcihncm91cCwgZ3JvdXBsaXN0K2kpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWdyb3VwczE2X2Zyb21fdXNlcihzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbywgc2hvcnQgX191c2VyICpncm91cGxpc3QpCi17Ci0JaW50IGk7Ci0Jc2hvcnQgZ3JvdXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3JvdXBfaW5mby0+bmdyb3VwczsgaSsrKSB7Ci0JCWlmIChnZXRfdXNlcihncm91cCwgZ3JvdXBsaXN0K2kpKQotCQkJcmV0dXJuICAtRUZBVUxUOwotCQlHUk9VUF9BVChncm91cF9pbmZvLCBpKSA9IChnaWRfdClncm91cDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9nZXRncm91cHMxNiAoaW50IGdpZHNldHNpemUsIHNob3J0IF9fdXNlciAqZ3JvdXBsaXN0KQotewotCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IGk7Ci0KLQlpZiAoZ2lkc2V0c2l6ZSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaSA9IGNyZWQtPmdyb3VwX2luZm8tPm5ncm91cHM7Ci0JaWYgKGdpZHNldHNpemUpIHsKLQkJaWYgKGkgPiBnaWRzZXRzaXplKSB7Ci0JCQlpID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChncm91cHMxNl90b191c2VyKGdyb3VwbGlzdCwgY3JlZC0+Z3JvdXBfaW5mbykpIHsKLQkJCWkgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIGk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2V0Z3JvdXBzMTYgKGludCBnaWRzZXRzaXplLCBzaG9ydCBfX3VzZXIgKmdyb3VwbGlzdCkKLXsKLQlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbzsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TRVRHSUQpKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmICgodW5zaWduZWQpZ2lkc2V0c2l6ZSA+IE5HUk9VUFNfTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdyb3VwX2luZm8gPSBncm91cHNfYWxsb2MoZ2lkc2V0c2l6ZSk7Ci0JaWYgKCFncm91cF9pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXR2YWwgPSBncm91cHMxNl9mcm9tX3VzZXIoZ3JvdXBfaW5mbywgZ3JvdXBsaXN0KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXB1dF9ncm91cF9pbmZvKGdyb3VwX2luZm8pOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXJldHZhbCA9IHNldF9jdXJyZW50X2dyb3Vwcyhncm91cF9pbmZvKTsKLQlwdXRfZ3JvdXBfaW5mbyhncm91cF9pbmZvKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfdHJ1bmNhdGU2NCAodW5zaWduZWQgaW50IHBhdGgsIHVuc2lnbmVkIGludCBsZW5fbG8sIHVuc2lnbmVkIGludCBsZW5faGkpCi17Ci0JcmV0dXJuIHN5c190cnVuY2F0ZShjb21wYXRfcHRyKHBhdGgpLCAoKHVuc2lnbmVkIGxvbmcpIGxlbl9oaSA8PCAzMikgfCBsZW5fbG8pOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2Z0cnVuY2F0ZTY0IChpbnQgZmQsIHVuc2lnbmVkIGludCBsZW5fbG8sIHVuc2lnbmVkIGludCBsZW5faGkpCi17Ci0JcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsICgodW5zaWduZWQgbG9uZykgbGVuX2hpIDw8IDMyKSB8IGxlbl9sbyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXB1dHN0YXQ2NCAoc3RydWN0IHN0YXQ2NCBfX3VzZXIgKnVidWYsIHN0cnVjdCBrc3RhdCAqa2J1ZikKLXsKLQlpbnQgZXJyOwotCXU2NCBoZGV2OwotCi0JaWYgKGNsZWFyX3VzZXIodWJ1Ziwgc2l6ZW9mKCp1YnVmKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaGRldiA9IGh1Z2VfZW5jb2RlX2RldihrYnVmLT5kZXYpOwotCWVyciAgPSBfX3B1dF91c2VyKGhkZXYsICh1MzIgX191c2VyKikmdWJ1Zi0+c3RfZGV2KTsKLQllcnIgfD0gX19wdXRfdXNlcihoZGV2ID4+IDMyLCAoKHUzMiBfX3VzZXIqKSZ1YnVmLT5zdF9kZXYpICsgMSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+aW5vLCAmdWJ1Zi0+X19zdF9pbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmlubywgJnVidWYtPnN0X2lub19sbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+aW5vID4+IDMyLCAmdWJ1Zi0+c3RfaW5vX2hpKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5tb2RlLCAmdWJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+bmxpbmssICZ1YnVmLT5zdF9ubGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+dWlkLCAmdWJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5naWQsICZ1YnVmLT5zdF9naWQpOwotCWhkZXYgPSBodWdlX2VuY29kZV9kZXYoa2J1Zi0+cmRldik7Ci0JZXJyICA9IF9fcHV0X3VzZXIoaGRldiwgKHUzMiBfX3VzZXIqKSZ1YnVmLT5zdF9yZGV2KTsKLQllcnIgfD0gX19wdXRfdXNlcihoZGV2ID4+IDMyLCAoKHUzMiBfX3VzZXIqKSZ1YnVmLT5zdF9yZGV2KSArIDEpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPnNpemUsICZ1YnVmLT5zdF9zaXplX2xvKTsKLQllcnIgfD0gX19wdXRfdXNlcigoa2J1Zi0+c2l6ZSA+PiAzMiksICZ1YnVmLT5zdF9zaXplX2hpKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5hdGltZS50dl9zZWMsICZ1YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPm10aW1lLnR2X3NlYywgJnVidWYtPnN0X210aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5tdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+Y3RpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfY3RpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmN0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5ibGtzaXplLCAmdWJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3N0YXQ2NCAoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQlzdHJ1Y3Qga3N0YXQgczsKLQlsb25nIHJldCA9IHZmc19zdGF0KGZpbGVuYW1lLCAmcyk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHB1dHN0YXQ2NChzdGF0YnVmLCAmcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9sc3RhdDY0IChjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKQotewotCXN0cnVjdCBrc3RhdCBzOwotCWxvbmcgcmV0ID0gdmZzX2xzdGF0KGZpbGVuYW1lLCAmcyk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHB1dHN0YXQ2NChzdGF0YnVmLCAmcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9mc3RhdDY0ICh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKQotewotCXN0cnVjdCBrc3RhdCBzOwotCWxvbmcgcmV0ID0gdmZzX2ZzdGF0KGZkLCAmcyk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHB1dHN0YXQ2NChzdGF0YnVmLCAmcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKHBpZF90IHBpZCwgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKQotewotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzdHJ1Y3QgdGltZXNwZWMgdDsKLQlsb25nIHJldDsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkLCAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmdCk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JaWYgKHB1dF9jb21wYXRfdGltZXNwZWMoJnQsIGludGVydmFsKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9wcmVhZCAodW5zaWduZWQgaW50IGZkLCB2b2lkIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQsIHUzMiBwb3NfbG8sIHUzMiBwb3NfaGkpCi17Ci0JcmV0dXJuIHN5c19wcmVhZDY0KGZkLCBidWYsIGNvdW50LCAoKHVuc2lnbmVkIGxvbmcpIHBvc19oaSA8PCAzMikgfCBwb3NfbG8pOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3B3cml0ZSAodW5zaWduZWQgaW50IGZkLCB2b2lkIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQsIHUzMiBwb3NfbG8sIHUzMiBwb3NfaGkpCi17Ci0JcmV0dXJuIHN5c19wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgKCh1bnNpZ25lZCBsb25nKSBwb3NfaGkgPDwgMzIpIHwgcG9zX2xvKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zZW5kZmlsZSAoaW50IG91dF9mZCwgaW50IGluX2ZkLCBpbnQgX191c2VyICpvZmZzZXQsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JbG9uZyByZXQ7Ci0Jb2ZmX3Qgb2Y7Ci0KLQlpZiAob2Zmc2V0ICYmIGdldF91c2VyKG9mLCBvZmZzZXQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19zZW5kZmlsZShvdXRfZmQsIGluX2ZkLCBvZmZzZXQgPyAob2ZmX3QgX191c2VyICopICZvZiA6IE5VTEwsIGNvdW50KTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChvZmZzZXQgJiYgcHV0X3VzZXIob2YsIG9mZnNldCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9wZXJzb25hbGl0eSAodW5zaWduZWQgaW50IHBlcnNvbmFsaXR5KQotewotCWxvbmcgcmV0OwotCi0JaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ID09IFBFUl9MSU5VWDMyICYmIHBlcnNvbmFsaXR5ID09IFBFUl9MSU5VWCkKLQkJcGVyc29uYWxpdHkgPSBQRVJfTElOVVgzMjsKLQlyZXQgPSBzeXNfcGVyc29uYWxpdHkocGVyc29uYWxpdHkpOwotCWlmIChyZXQgPT0gUEVSX0xJTlVYMzIpCi0JCXJldCA9IFBFUl9MSU5VWDsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIHVuc2lnbmVkIGxvbmcKLXN5czMyX2JyayAodW5zaWduZWQgaW50IGJyaykKLXsKLQl1bnNpZ25lZCBsb25nIHJldCwgb2JyazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCi0Jb2JyayA9IG1tLT5icms7Ci0JcmV0ID0gc3lzX2JyayhicmspOwotCWlmIChyZXQgPCBvYnJrKQotCQljbGVhcl91c2VyKGNvbXBhdF9wdHIocmV0KSwgUEFHRV9BTElHTihyZXQpIC0gcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBTdHJ1Y3R1cmUgZm9yIGlhMzIgZW11bGF0aW9uIG9uIGlhNjQgKi8KLXN0cnVjdCBlcG9sbF9ldmVudDMyCi17Ci0JdTMyIGV2ZW50czsKLQl1MzIgZGF0YVsyXTsKLX07Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50MzIgX191c2VyICpldmVudCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50NjQ7Ci0JaW50IGVycm9yOwotCXUzMiBkYXRhX2hhbGZ3b3JkOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGV2ZW50LCBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50MzIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlfX2dldF91c2VyKGV2ZW50NjQuZXZlbnRzLCAmZXZlbnQtPmV2ZW50cyk7Ci0JX19nZXRfdXNlcihkYXRhX2hhbGZ3b3JkLCAmZXZlbnQtPmRhdGFbMF0pOwotCWV2ZW50NjQuZGF0YSA9IGRhdGFfaGFsZndvcmQ7Ci0JX19nZXRfdXNlcihkYXRhX2hhbGZ3b3JkLCAmZXZlbnQtPmRhdGFbMV0pOwotIAlldmVudDY0LmRhdGEgfD0gKHU2NClkYXRhX2hhbGZ3b3JkIDw8IDMyOwotCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyb3IgPSBzeXNfZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgKHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKikgJmV2ZW50NjQpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudDMyIF9fdXNlciAqIGV2ZW50cywgaW50IG1heGV2ZW50cywKLQkJIGludCB0aW1lb3V0KQotewotCXN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnRzNjQgPSBOVUxMOwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQlpbnQgbnVtZXZlbnRzLCBzaXplOwotCWludCBldnRfaWR4OwotCWludCBkb19mcmVlX3BhZ2VzID0gMDsKLQotCWlmIChtYXhldmVudHMgPD0gMCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJlYSBwYXNzZWQgYnkgdGhlIHVzZXIgaXMgd3JpdGVhYmxlICovCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBldmVudHMsIG1heGV2ZW50cyAqIHNpemVvZihzdHJ1Y3QgZXBvbGxfZXZlbnQzMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0gCSAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgaW50ZXJtZWRpYXRlIGNvcHkuICBJZiB0aGUgc3BhY2UgbmVlZGVkCi0JICogaXMgbGFyZ2UgZW5vdWdoIHRvIGNhdXNlIGttYWxsb2MgdG8gZmFpbCwgdGhlbiB0cnkgYWdhaW4gd2l0aAotCSAqIF9fZ2V0X2ZyZWVfcGFnZXMuCi0JICovCi0Jc2l6ZSA9IG1heGV2ZW50cyAqIHNpemVvZihzdHJ1Y3QgZXBvbGxfZXZlbnQpOwotCWV2ZW50czY0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXZlbnRzNjQgPT0gTlVMTCkgewotCQlldmVudHM2NCA9IChzdHJ1Y3QgZXBvbGxfZXZlbnQgKikKLQkJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7Ci0JCWlmIChldmVudHM2NCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRvX2ZyZWVfcGFnZXMgPSAxOwotCX0KLQotCS8qIERvIHRoZSBzeXN0ZW0gY2FsbCAqLwotCXNldF9mcyhLRVJORUxfRFMpOyAvKiBjb3B5X3RvL2Zyb21fdXNlciBzaG91bGQgd29yayBvbiBrZXJuZWwgbWVtKi8KLQludW1ldmVudHMgPSBzeXNfZXBvbGxfd2FpdChlcGZkLCAoc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqKSBldmVudHM2NCwKLQkJCQkgICBtYXhldmVudHMsIHRpbWVvdXQpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JLyogRG9uJ3QgbW9kaWZ5IHVzZXJzcGFjZSBtZW1vcnkgaWYgd2UncmUgcmV0dXJuaW5nIGFuIGVycm9yICovCi0JaWYgKG51bWV2ZW50cyA+IDApIHsKLQkJLyogVHJhbnNsYXRlIHRoZSA2NC1iaXQgc3RydWN0dXJlcyBiYWNrIGludG8gdGhlIDMyLWJpdAotCQkgICBzdHJ1Y3R1cmVzICovCi0JCWZvciAoZXZ0X2lkeCA9IDA7IGV2dF9pZHggPCBudW1ldmVudHM7IGV2dF9pZHgrKykgewotCQkJX19wdXRfdXNlcihldmVudHM2NFtldnRfaWR4XS5ldmVudHMsCi0JCQkJICAgJmV2ZW50c1tldnRfaWR4XS5ldmVudHMpOwotCQkJX19wdXRfdXNlcigodTMyKWV2ZW50czY0W2V2dF9pZHhdLmRhdGEsCi0JCQkJICAgJmV2ZW50c1tldnRfaWR4XS5kYXRhWzBdKTsKLQkJCV9fcHV0X3VzZXIoKHUzMikoZXZlbnRzNjRbZXZ0X2lkeF0uZGF0YSA+PiAzMiksCi0JCQkJICAgJmV2ZW50c1tldnRfaWR4XS5kYXRhWzFdKTsKLQkJfQotCX0KLQotCWlmIChkb19mcmVlX3BhZ2VzKQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBldmVudHM2NCwgZ2V0X29yZGVyKHNpemUpKTsKLQllbHNlCi0JCWtmcmVlKGV2ZW50czY0KTsKLQlyZXR1cm4gbnVtZXZlbnRzOwotfQotCi0vKgotICogR2V0IGEgeWV0IHVudXNlZCBUTFMgZGVzY3JpcHRvciBpbmRleC4KLSAqLwotc3RhdGljIGludAotZ2V0X2ZyZWVfaWR4ICh2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJmN1cnJlbnQtPnRocmVhZDsKLQlpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBHRFRfRU5UUllfVExTX0VOVFJJRVM7IGlkeCsrKQotCQlpZiAoZGVzY19lbXB0eSh0LT50bHNfYXJyYXkgKyBpZHgpKQotCQkJcmV0dXJuIGlkeCArIEdEVF9FTlRSWV9UTFNfTUlOOwotCXJldHVybiAtRVNSQ0g7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF90bHNfZGVzYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpZHgsCi0JCWNvbnN0IHN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqaW5mbywgaW50IG4pCi17Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmcC0+dGhyZWFkOwotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYyA9ICZ0LT50bHNfYXJyYXlbaWR4IC0gR0RUX0VOVFJZX1RMU19NSU5dOwotCWludCBjcHU7Ci0KLQkvKgotCSAqIFdlIG11c3Qgbm90IGdldCBwcmVlbXB0ZWQgd2hpbGUgbW9kaWZ5aW5nIHRoZSBUTFMuCi0JICovCi0JY3B1ID0gZ2V0X2NwdSgpOwotCi0Jd2hpbGUgKG4tLSA+IDApIHsKLQkJaWYgKExEVF9lbXB0eShpbmZvKSkgewotCQkJZGVzYy0+YSA9IDA7Ci0JCQlkZXNjLT5iID0gMDsKLQkJfSBlbHNlIHsKLQkJCWRlc2MtPmEgPSBMRFRfZW50cnlfYShpbmZvKTsKLQkJCWRlc2MtPmIgPSBMRFRfZW50cnlfYihpbmZvKTsKLQkJfQotCi0JCSsraW5mbzsKLQkJKytkZXNjOwotCX0KLQotCWlmICh0ID09ICZjdXJyZW50LT50aHJlYWQpCi0JCWxvYWRfVExTKHQsIGNwdSk7Ci0KLQlwdXRfY3B1KCk7Ci19Ci0KLS8qCi0gKiBTZXQgYSBnaXZlbiBUTFMgZGVzY3JpcHRvcjoKLSAqLwotYXNtbGlua2FnZSBpbnQKLXN5czMyX3NldF90aHJlYWRfYXJlYSAoc3RydWN0IGlhMzJfdXNlcl9kZXNjIF9fdXNlciAqdV9pbmZvKQotewotCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBpbmZvOwotCWludCBpZHg7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIHVfaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWR4ID0gaW5mby5lbnRyeV9udW1iZXI7Ci0KLQkvKgotCSAqIGluZGV4IC0xIG1lYW5zIHRoZSBrZXJuZWwgc2hvdWxkIHRyeSB0byBmaW5kIGFuZCBhbGxvY2F0ZSBhbiBlbXB0eSBkZXNjcmlwdG9yOgotCSAqLwotCWlmIChpZHggPT0gLTEpIHsKLQkJaWR4ID0gZ2V0X2ZyZWVfaWR4KCk7Ci0JCWlmIChpZHggPCAwKQotCQkJcmV0dXJuIGlkeDsKLQkJaWYgKHB1dF91c2VyKGlkeCwgJnVfaW5mby0+ZW50cnlfbnVtYmVyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWlmIChpZHggPCBHRFRfRU5UUllfVExTX01JTiB8fCBpZHggPiBHRFRfRU5UUllfVExTX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzZXRfdGxzX2Rlc2MoY3VycmVudCwgaWR4LCAmaW5mbywgMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgVGhyZWFkLUxvY2FsIFN0b3JhZ2UgYXJlYToKLSAqLwotCi0jZGVmaW5lIEdFVF9CQVNFKGRlc2MpICgJCQlcCi0JKCgoZGVzYyktPmEgPj4gMTYpICYgMHgwMDAwZmZmZikgfAlcCi0JKCgoZGVzYyktPmIgPDwgMTYpICYgMHgwMGZmMDAwMCkgfAlcCi0JKCAoZGVzYyktPmIgICAgICAgICYgMHhmZjAwMDAwMCkgICApCi0KLSNkZWZpbmUgR0VUX0xJTUlUKGRlc2MpICgJCQlcCi0JKChkZXNjKS0+YSAmIDB4MGZmZmYpIHwJCQlcCi0JICgoZGVzYyktPmIgJiAweGYwMDAwKSApCi0KLSNkZWZpbmUgR0VUXzMyQklUKGRlc2MpCQkoKChkZXNjKS0+YiA+PiAyMikgJiAxKQotI2RlZmluZSBHRVRfQ09OVEVOVFMoZGVzYykJKCgoZGVzYyktPmIgPj4gMTApICYgMykKLSNkZWZpbmUgR0VUX1dSSVRBQkxFKGRlc2MpCSgoKGRlc2MpLT5iID4+ICA5KSAmIDEpCi0jZGVmaW5lIEdFVF9MSU1JVF9QQUdFUyhkZXNjKQkoKChkZXNjKS0+YiA+PiAyMykgJiAxKQotI2RlZmluZSBHRVRfUFJFU0VOVChkZXNjKQkoKChkZXNjKS0+YiA+PiAxNSkgJiAxKQotI2RlZmluZSBHRVRfVVNFQUJMRShkZXNjKQkoKChkZXNjKS0+YiA+PiAyMCkgJiAxKQotCi1zdGF0aWMgdm9pZCBmaWxsX3VzZXJfZGVzYyhzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgKmluZm8sIGludCBpZHgsCi0JCWNvbnN0IHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYykKLXsKLQlpbmZvLT5lbnRyeV9udW1iZXIgPSBpZHg7Ci0JaW5mby0+YmFzZV9hZGRyID0gR0VUX0JBU0UoZGVzYyk7Ci0JaW5mby0+bGltaXQgPSBHRVRfTElNSVQoZGVzYyk7Ci0JaW5mby0+c2VnXzMyYml0ID0gR0VUXzMyQklUKGRlc2MpOwotCWluZm8tPmNvbnRlbnRzID0gR0VUX0NPTlRFTlRTKGRlc2MpOwotCWluZm8tPnJlYWRfZXhlY19vbmx5ID0gIUdFVF9XUklUQUJMRShkZXNjKTsKLQlpbmZvLT5saW1pdF9pbl9wYWdlcyA9IEdFVF9MSU1JVF9QQUdFUyhkZXNjKTsKLQlpbmZvLT5zZWdfbm90X3ByZXNlbnQgPSAhR0VUX1BSRVNFTlQoZGVzYyk7Ci0JaW5mby0+dXNlYWJsZSA9IEdFVF9VU0VBQkxFKGRlc2MpOwotfQotCi1hc21saW5rYWdlIGludAotc3lzMzJfZ2V0X3RocmVhZF9hcmVhIChzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgX191c2VyICp1X2luZm8pCi17Ci0Jc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm87Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjOwotCWludCBpZHg7Ci0KLQlpZiAoZ2V0X3VzZXIoaWR4LCAmdV9pbmZvLT5lbnRyeV9udW1iZXIpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoaWR4IDwgR0RUX0VOVFJZX1RMU19NSU4gfHwgaWR4ID4gR0RUX0VOVFJZX1RMU19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGVzYyA9IGN1cnJlbnQtPnRocmVhZC50bHNfYXJyYXkgKyBpZHggLSBHRFRfRU5UUllfVExTX01JTjsKLQlmaWxsX3VzZXJfZGVzYygmaW5mbywgaWR4LCBkZXNjKTsKLQotCWlmIChjb3B5X3RvX3VzZXIodV9pbmZvLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCByZWdzZXRfZ2V0IHsKLQl2b2lkICprYnVmOwotCXZvaWQgX191c2VyICp1YnVmOwotfTsKLQotc3RydWN0IHJlZ3NldF9zZXQgewotCWNvbnN0IHZvaWQgKmtidWY7Ci0JY29uc3Qgdm9pZCBfX3VzZXIgKnVidWY7Ci19OwotCi1zdHJ1Y3QgcmVnc2V0X2dldHNldCB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7Ci0JY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgcmVnc2V0X2dldCBnZXQ7Ci0JCXN0cnVjdCByZWdzZXRfc2V0IHNldDsKLQl9IHU7Ci0JdW5zaWduZWQgaW50IHBvczsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0JaW50IHJldDsKLX07Ci0KLXN0YXRpYyB2b2lkIGdldGZwcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vLCBpbnQgKnZhbCkKLXsKLQlzd2l0Y2ggKHJlZ25vIC8gc2l6ZW9mKGludCkpIHsKLQljYXNlIDA6Ci0JCSp2YWwgPSB0YXNrLT50aHJlYWQuZmNyICYgMHhmZmZmOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCSp2YWwgPSB0YXNrLT50aHJlYWQuZnNyICYgMHhmZmZmOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWwgPSAodGFzay0+dGhyZWFkLmZzcj4+MTYpICYgMHhmZmZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCSp2YWwgPSB0YXNrLT50aHJlYWQuZmlyOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSp2YWwgPSAodGFzay0+dGhyZWFkLmZpcj4+MzIpICYgMHhmZmZmOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCSp2YWwgPSB0YXNrLT50aHJlYWQuZmRyOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCSp2YWwgPSAodGFzay0+dGhyZWFkLmZkciA+PiAzMikgJiAweGZmZmY7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2V0ZnByZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgcmVnbm8sIGludCB2YWwpCi17Ci0Jc3dpdGNoIChyZWdubyAvIHNpemVvZihpbnQpKSB7Ci0JY2FzZSAwOgotCQl0YXNrLT50aHJlYWQuZmNyID0gKHRhc2stPnRocmVhZC5mY3IgJiAofjB4MWYzZikpCi0JCQl8ICh2YWwgJiAweDFmM2YpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmKSkgfCB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJdGFzay0+dGhyZWFkLmZzciA9ICh0YXNrLT50aHJlYWQuZnNyICYgKH4weGZmZmYwMDAwKSkKLQkJCXwgKHZhbCA8PCAxNik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJdGFzay0+dGhyZWFkLmZpciA9ICh0YXNrLT50aHJlYWQuZmlyICYgKH4weGZmZmZmZmZmKSkgfCB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJdGFzay0+dGhyZWFkLmZkciA9ICh0YXNrLT50aHJlYWQuZmRyICYgKH4weGZmZmZmZmZmKSkgfCB2YWw7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWNjZXNzX2ZwcmVnX2lhMzIoaW50IHJlZ25vLCB2b2lkICpyZWcsCi0JCXN0cnVjdCBwdF9yZWdzICpwdCwgc3RydWN0IHN3aXRjaF9zdGFjayAqc3csCi0JCWludCB0b3MsIGludCB3cml0ZSkKLXsKLQl2b2lkICpmOwotCi0JaWYgKChyZWdubyArPSB0b3MpID49IDgpCi0JCXJlZ25vIC09IDg7Ci0JaWYgKHJlZ25vIDwgNCkKLQkJZiA9ICZwdC0+ZjggKyByZWdubzsKLQllbHNlIGlmIChyZWdubyA8PSA3KQotCQlmID0gJnN3LT5mMTIgKyAocmVnbm8gLSA0KTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyZWdubyBtdXN0IGJlIGxlc3MgdGhhbiA3IFxuIik7Ci0JCSByZXR1cm47Ci0JfQotCi0JaWYgKHdyaXRlKQotCQltZW1jcHkoZiwgcmVnLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JZWxzZQotCQltZW1jcHkocmVnLCBmLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ZwcmVnc19nZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHJlZ3NldF9nZXRzZXQgKmRzdCA9IGFyZzsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBkc3QtPnRhcmdldDsKLQlzdHJ1Y3QgcHRfcmVncyAqcHQ7Ci0JaW50IHN0YXJ0LCBlbmQsIHRvczsKLQljaGFyIGJ1Zls4MF07Ci0KLQlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCi0JCXJldHVybjsKLQlpZiAoZHN0LT5wb3MgPCA3ICogc2l6ZW9mKGludCkpIHsKLQkJZW5kID0gbWluKChkc3QtPnBvcyArIGRzdC0+Y291bnQpLAotCQkJKHVuc2lnbmVkIGludCkoNyAqIHNpemVvZihpbnQpKSk7Ci0JCWZvciAoc3RhcnQgPSBkc3QtPnBvczsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IHNpemVvZihpbnQpKQotCQkJZ2V0ZnByZWcodGFzaywgc3RhcnQsIChpbnQgKikoYnVmICsgc3RhcnQpKTsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgYnVmLAotCQkJCTAsIDcgKiBzaXplb2YoaW50KSk7Ci0JCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotCWlmIChkc3QtPnBvcyA8IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSkgewotCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKLQkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQkJZW5kID0gbWluKGRzdC0+cG9zICsgZHN0LT5jb3VudCwKLQkJCSh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSkpOwotCQlzdGFydCA9IChkc3QtPnBvcyAtIDcgKiBzaXplb2YoaW50KSkgLwotCQkJc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMik7Ci0JCWVuZCA9IChlbmQgLSA3ICogc2l6ZW9mKGludCkpIC8gc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMik7Ci0JCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKLQkJCWFjY2Vzc19mcHJlZ19pYTMyKHN0YXJ0LAotCQkJCShzdHJ1Y3QgX2ZwcmVnX2lhMzIgKilidWYgKyBzdGFydCwKLQkJCQlwdCwgaW5mby0+c3csIHRvcywgMCk7Ci0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsCi0JCQkJYnVmLCA3ICogc2l6ZW9mKGludCksCi0JCQkJc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QpKTsKLQkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKLQkJCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ZwcmVnc19zZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHJlZ3NldF9nZXRzZXQgKmRzdCA9IGFyZzsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBkc3QtPnRhcmdldDsKLQlzdHJ1Y3QgcHRfcmVncyAqcHQ7Ci0JY2hhciBidWZbODBdOwotCWludCBlbmQsIHN0YXJ0LCB0b3M7Ci0KLQlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCi0JCXJldHVybjsKLQotCWlmIChkc3QtPnBvcyA8IDcgKiBzaXplb2YoaW50KSkgewotCQlzdGFydCA9IGRzdC0+cG9zOwotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsIGJ1ZiwKLQkJCQkwLCA3ICogc2l6ZW9mKGludCkpOwotCQlpZiAoZHN0LT5yZXQpCi0JCQlyZXR1cm47Ci0JCWZvciAoOyBzdGFydCA8IGRzdC0+cG9zOyBzdGFydCArPSBzaXplb2YoaW50KSkKLQkJCXNldGZwcmVnKHRhc2ssIHN0YXJ0LCAqKChpbnQgKikoYnVmICsgc3RhcnQpKSk7Ci0JCWlmIChkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotCWlmIChkc3QtPnBvcyA8IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSkgewotCQlzdGFydCA9IChkc3QtPnBvcyAtIDcgKiBzaXplb2YoaW50KSkgLwotCQkJc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMik7Ci0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwKLQkJCQlidWYsIDcgKiBzaXplb2YoaW50KSwKLQkJCQlzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpOwotCQlpZiAoZHN0LT5yZXQpCi0JCQlyZXR1cm47Ci0JCXB0ID0gdGFza19wdF9yZWdzKHRhc2spOwotCQl0b3MgPSAodGFzay0+dGhyZWFkLmZzciA+PiAxMSkgJiA3OwotCQllbmQgPSAoZHN0LT5wb3MgLSA3ICogc2l6ZW9mKGludCkpIC8gc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMik7Ci0JCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKLQkJCWFjY2Vzc19mcHJlZ19pYTMyKHN0YXJ0LAotCQkJCShzdHJ1Y3QgX2ZwcmVnX2lhMzIgKilidWYgKyBzdGFydCwKLQkJCQlwdCwgaW5mby0+c3csIHRvcywgMSk7Ci0JCWlmIChkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotfQotCi0jZGVmaW5lIE9GRlNFVChtZW1iZXIpICgoaW50KShvZmZzZXRvZihzdHJ1Y3QgaWEzMl91c2VyX2Z4c3Jfc3RydWN0LCBtZW1iZXIpKSkKLXN0YXRpYyB2b2lkIGdldGZweHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzdGFydCwgaW50IGVuZCwgY2hhciAqYnVmKQotewotCWludCBtaW5fdmFsOwotCi0JbWluX3ZhbCA9IG1pbihlbmQsIE9GRlNFVChmb3ApKTsKLQl3aGlsZSAoc3RhcnQgPCBtaW5fdmFsKSB7Ci0JCWlmIChzdGFydCA9PSBPRkZTRVQoY3dkKSkKLQkJCSooKHNob3J0ICopYnVmKSA9IHRhc2stPnRocmVhZC5mY3IgJiAweGZmZmY7Ci0JCWVsc2UgaWYgKHN0YXJ0ID09IE9GRlNFVChzd2QpKQotCQkJKigoc2hvcnQgKilidWYpID0gdGFzay0+dGhyZWFkLmZzciAmIDB4ZmZmZjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKHR3ZCkpCi0JCQkqKChzaG9ydCAqKWJ1ZikgPSAodGFzay0+dGhyZWFkLmZzcj4+MTYpICYgMHhmZmZmOwotCQlidWYgKz0gMjsKLQkJc3RhcnQgKz0gMjsKLQl9Ci0JLyogc2tpcCBmb3AgZWxlbWVudCAqLwotCWlmIChzdGFydCA9PSBPRkZTRVQoZm9wKSkgewotCQlzdGFydCArPSAyOwotCQlidWYgKz0gMjsKLQl9Ci0Jd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCWlmIChzdGFydCA9PSBPRkZTRVQoZmlwKSkKLQkJCSooKGludCAqKWJ1ZikgPSB0YXNrLT50aHJlYWQuZmlyOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoZmNzKSkKLQkJCSooKGludCAqKWJ1ZikgPSAodGFzay0+dGhyZWFkLmZpcj4+MzIpICYgMHhmZmZmOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoZm9vKSkKLQkJCSooKGludCAqKWJ1ZikgPSB0YXNrLT50aHJlYWQuZmRyOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoZm9zKSkKLQkJCSooKGludCAqKWJ1ZikgPSAodGFzay0+dGhyZWFkLmZkcj4+MzIpICYgMHhmZmZmOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQobXhjc3IpKQotCQkJKigoaW50ICopYnVmKSA9ICgodGFzay0+dGhyZWFkLmZjcj4+MzIpICYgMHhmZjgwKQotCQkJCQkgfCAoKHRhc2stPnRocmVhZC5mc3I+PjMyKSAmIDB4M2YpOwotCQlidWYgKz0gNDsKLQkJc3RhcnQgKz0gNDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGZweHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzdGFydCwgaW50IGVuZCwgY2hhciAqYnVmKQotewotCWludCBtaW5fdmFsLCBudW0zMjsKLQlzaG9ydCBudW07Ci0JdW5zaWduZWQgbG9uZyBudW02NDsKLQotCW1pbl92YWwgPSBtaW4oZW5kLCBPRkZTRVQoZm9wKSk7Ci0Jd2hpbGUgKHN0YXJ0IDwgbWluX3ZhbCkgewotCQludW0gPSAqKChzaG9ydCAqKWJ1Zik7Ci0JCWlmIChzdGFydCA9PSBPRkZTRVQoY3dkKSkgewotCQkJdGFzay0+dGhyZWFkLmZjciA9ICh0YXNrLT50aHJlYWQuZmNyICYgKH4weDFmM2YpKQotCQkJCQkJfCAobnVtICYgMHgxZjNmKTsKLQkJfSBlbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoc3dkKSkgewotCQkJdGFzay0+dGhyZWFkLmZzciA9ICh0YXNrLT50aHJlYWQuZnNyICYgKH4weGZmZmYpKSB8IG51bTsKLQkJfSBlbHNlIGlmIChzdGFydCA9PSBPRkZTRVQodHdkKSkgewotCQkJdGFzay0+dGhyZWFkLmZzciA9ICh0YXNrLT50aHJlYWQuZnNyICYgKH4weGZmZmYwMDAwKSkKLQkJCQl8ICgoKGludCludW0pIDw8IDE2KTsKLQkJfQotCQlidWYgKz0gMjsKLQkJc3RhcnQgKz0gMjsKLQl9Ci0JLyogc2tpcCBmb3AgZWxlbWVudCAqLwotCWlmIChzdGFydCA9PSBPRkZTRVQoZm9wKSkgewotCQlzdGFydCArPSAyOwotCQlidWYgKz0gMjsKLQl9Ci0Jd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCW51bTMyID0gKigoaW50ICopYnVmKTsKLQkJaWYgKHN0YXJ0ID09IE9GRlNFVChmaXApKQotCQkJdGFzay0+dGhyZWFkLmZpciA9ICh0YXNrLT50aHJlYWQuZmlyICYgKH4weGZmZmZmZmZmKSkKLQkJCQkJCSB8IG51bTMyOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoZm9vKSkKLQkJCXRhc2stPnRocmVhZC5mZHIgPSAodGFzay0+dGhyZWFkLmZkciAmICh+MHhmZmZmZmZmZikpCi0JCQkJCQkgfCBudW0zMjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKG14Y3NyKSkgewotCQkJbnVtNjQgPSBudW0zMiAmIDB4ZmYxMDsKLQkJCXRhc2stPnRocmVhZC5mY3IgPSAodGFzay0+dGhyZWFkLmZjciAmCi0JCQkJKH4weGZmMTAwMDAwMDAwMFVMKSkgfCAobnVtNjQ8PDMyKTsKLQkJCW51bTY0ID0gbnVtMzIgJiAweDNmOwotCQkJdGFzay0+dGhyZWFkLmZzciA9ICh0YXNrLT50aHJlYWQuZnNyICYKLQkJCQkofjB4M2YwMDAwMDAwMFVMKSkgfCAobnVtNjQ8PDMyKTsKLQkJfQotCQlidWYgKz0gNDsKLQkJc3RhcnQgKz0gNDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ZweHJlZ3NfZ2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQotewotCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZHN0LT50YXJnZXQ7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0OwotCWNoYXIgYnVmWzEyOF07Ci0JaW50IHN0YXJ0LCBlbmQsIHRvczsKLQotCWlmIChkc3QtPmNvdW50ID09IDAgfHwgdW53X3Vud2luZF90b191c2VyKGluZm8pIDwgMCkKLQkJcmV0dXJuOwotCWlmIChkc3QtPnBvcyA8IE9GRlNFVChzdF9zcGFjZVswXSkpIHsKLQkJZW5kID0gbWluKGRzdC0+cG9zICsgZHN0LT5jb3VudCwgKHVuc2lnbmVkIGludCkzMik7Ci0JCWdldGZweHJlZyh0YXNrLCBkc3QtPnBvcywgZW5kLCBidWYpOwotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLCBidWYsCi0JCQkJMCwgT0ZGU0VUKHN0X3NwYWNlWzBdKSk7Ci0JCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotCWlmIChkc3QtPnBvcyA8IE9GRlNFVCh4bW1fc3BhY2VbMF0pKSB7Ci0JCXB0ID0gdGFza19wdF9yZWdzKHRhc2spOwotCQl0b3MgPSAodGFzay0+dGhyZWFkLmZzciA+PiAxMSkgJiA3OwotCQllbmQgPSBtaW4oZHN0LT5wb3MgKyBkc3QtPmNvdW50LAotCQkJCSh1bnNpZ25lZCBpbnQpT0ZGU0VUKHhtbV9zcGFjZVswXSkpOwotCQlzdGFydCA9IChkc3QtPnBvcyAtIE9GRlNFVChzdF9zcGFjZVswXSkpIC8gMTY7Ci0JCWVuZCA9IChlbmQgLSBPRkZTRVQoc3Rfc3BhY2VbMF0pKSAvIDE2OwotCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0JCQlhY2Nlc3NfZnByZWdfaWEzMihzdGFydCwgYnVmICsgMTYgKiBzdGFydCwgcHQsCi0JCQkJCQlpbmZvLT5zdywgdG9zLCAwKTsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwKLQkJCQlidWYsIE9GRlNFVChzdF9zcGFjZVswXSksIE9GRlNFVCh4bW1fc3BhY2VbMF0pKTsKLQkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKLQkJCXJldHVybjsKLQl9Ci0JaWYgKGRzdC0+cG9zIDwgT0ZGU0VUKHBhZGRpbmdbMF0pKQotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLAotCQkJCSZpbmZvLT5zdy0+ZjE2LCBPRkZTRVQoeG1tX3NwYWNlWzBdKSwKLQkJCQlPRkZTRVQocGFkZGluZ1swXSkpOwotfQotCi1zdGF0aWMgdm9pZCBkb19mcHhyZWdzX3NldChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgcmVnc2V0X2dldHNldCAqZHN0ID0gYXJnOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGRzdC0+dGFyZ2V0OwotCWNoYXIgYnVmWzEyOF07Ci0JaW50IHN0YXJ0LCBlbmQ7Ci0KLQlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCi0JCXJldHVybjsKLQotCWlmIChkc3QtPnBvcyA8IE9GRlNFVChzdF9zcGFjZVswXSkpIHsKLQkJc3RhcnQgPSBkc3QtPnBvczsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLAotCQkJCWJ1ZiwgMCwgT0ZGU0VUKHN0X3NwYWNlWzBdKSk7Ci0JCWlmIChkc3QtPnJldCkKLQkJCXJldHVybjsKLQkJc2V0ZnB4cmVnKHRhc2ssIHN0YXJ0LCBkc3QtPnBvcywgYnVmKTsKLQkJaWYgKGRzdC0+Y291bnQgPT0gMCkKLQkJCXJldHVybjsKLQl9Ci0JaWYgKGRzdC0+cG9zIDwgT0ZGU0VUKHhtbV9zcGFjZVswXSkpIHsKLQkJc3RydWN0IHB0X3JlZ3MgKnB0OwotCQlpbnQgdG9zOwotCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKLQkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQkJc3RhcnQgPSAoZHN0LT5wb3MgLSBPRkZTRVQoc3Rfc3BhY2VbMF0pKSAvIDE2OwotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsCi0JCQkJYnVmLCBPRkZTRVQoc3Rfc3BhY2VbMF0pLCBPRkZTRVQoeG1tX3NwYWNlWzBdKSk7Ci0JCWlmIChkc3QtPnJldCkKLQkJCXJldHVybjsKLQkJZW5kID0gKGRzdC0+cG9zIC0gT0ZGU0VUKHN0X3NwYWNlWzBdKSkgLyAxNjsKLQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotCQkJYWNjZXNzX2ZwcmVnX2lhMzIoc3RhcnQsIGJ1ZiArIDE2ICogc3RhcnQsIHB0LCBpbmZvLT5zdywKLQkJCQkJCSB0b3MsIDEpOwotCQlpZiAoZHN0LT5jb3VudCA9PSAwKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoZHN0LT5wb3MgPCBPRkZTRVQocGFkZGluZ1swXSkpCi0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwKLQkJCQkmaW5mby0+c3ctPmYxNiwgT0ZGU0VUKHhtbV9zcGFjZVswXSksCi0JCQkJIE9GRlNFVChwYWRkaW5nWzBdKSk7Ci19Ci0jdW5kZWYgT0ZGU0VUCi0KLXN0YXRpYyBpbnQgZG9fcmVnc2V0X2NhbGwodm9pZCAoKmNhbGwpKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqLCB2b2lkICopLAotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKLQkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCi0JCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKLQkJY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCi17Ci0Jc3RydWN0IHJlZ3NldF9nZXRzZXQgaW5mbyA9IHsgLnRhcmdldCA9IHRhcmdldCwgLnJlZ3NldCA9IHJlZ3NldCwKLQkJLnBvcyA9IHBvcywgLmNvdW50ID0gY291bnQsCi0JCS51LnNldCA9IHsgLmtidWYgPSBrYnVmLCAudWJ1ZiA9IHVidWYgfSwKLQkJLnJldCA9IDAgfTsKLQotCWlmICh0YXJnZXQgPT0gY3VycmVudCkKLQkJdW53X2luaXRfcnVubmluZyhjYWxsLCAmaW5mbyk7Ci0JZWxzZSB7Ci0JCXN0cnVjdCB1bndfZnJhbWVfaW5mbyB1Zmk7Ci0JCW1lbXNldCgmdWZpLCAwLCBzaXplb2YodWZpKSk7Ci0JCXVud19pbml0X2Zyb21fYmxvY2tlZF90YXNrKCZ1ZmksIHRhcmdldCk7Ci0JCSgqY2FsbCkoJnVmaSwgJmluZm8pOwotCX0KLQotCXJldHVybiBpbmZvLnJldDsKLX0KLQotc3RhdGljIGludCBpYTMyX2ZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQotewotCXJldHVybiBkb19yZWdzZXRfY2FsbChkb19mcHJlZ3NfZ2V0LCB0YXJnZXQsIHJlZ3NldCwgcG9zLCBjb3VudCwKLQkJa2J1ZiwgdWJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgaWEzMl9mcHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQljb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnByZWdzX3NldCwgdGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsCi0JCWtidWYsIHVidWYpOwotfQotCi1zdGF0aWMgaW50IGlhMzJfZnB4cmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQotewotCXJldHVybiBkb19yZWdzZXRfY2FsbChkb19mcHhyZWdzX2dldCwgdGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsCi0JCWtidWYsIHVidWYpOwotfQotCi1zdGF0aWMgaW50IGlhMzJfZnB4cmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCWNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQotewotCXJldHVybiBkb19yZWdzZXRfY2FsbChkb19mcHhyZWdzX3NldCwgdGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsCi0JCWtidWYsIHVidWYpOwotfQotCi1zdGF0aWMgaW50IGlhMzJfZ2VucmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQotewotCWlmIChrYnVmKSB7Ci0JCXUzMiAqa3AgPSBrYnVmOwotCQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCQkqa3ArKyA9IGdldHJlZyh0YXJnZXQsIHBvcyk7Ci0JCQlwb3MgKz0gNDsKLQkJCWNvdW50IC09IDQ7Ci0JCX0KLQl9IGVsc2UgewotCQl1MzIgX191c2VyICp1cCA9IHVidWY7Ci0JCXdoaWxlIChjb3VudCA+IDApIHsKLQkJCWlmIChfX3B1dF91c2VyKGdldHJlZyh0YXJnZXQsIHBvcyksIHVwKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcG9zICs9IDQ7Ci0JCQljb3VudCAtPSA0OwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlhMzJfZ2VucmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCWNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKGtidWYpIHsKLQkJY29uc3QgdTMyICprcCA9IGtidWY7Ci0JCXdoaWxlICghcmV0ICYmIGNvdW50ID4gMCkgewotCQkJcHV0cmVnKHRhcmdldCwgcG9zLCAqa3ArKyk7Ci0JCQlwb3MgKz0gNDsKLQkJCWNvdW50IC09IDQ7Ci0JCX0KLQl9IGVsc2UgewotCQljb25zdCB1MzIgX191c2VyICp1cCA9IHVidWY7Ci0JCXUzMiB2YWw7Ci0JCXdoaWxlICghcmV0ICYmIGNvdW50ID4gMCkgewotCQkJcmV0ID0gX19nZXRfdXNlcih2YWwsIHVwKyspOwotCQkJaWYgKCFyZXQpCi0JCQkJcHV0cmVnKHRhcmdldCwgcG9zLCB2YWwpOwotCQkJcG9zICs9IDQ7Ci0JCQljb3VudCAtPSA0OwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWEzMl90bHNfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0YXJnZXQtPnRocmVhZDsKLQlpbnQgbiA9IEdEVF9FTlRSWV9UTFNfRU5UUklFUzsKLQl3aGlsZSAobiA+IDAgJiYgZGVzY19lbXB0eSgmdC0+dGxzX2FycmF5W24gLTFdKSkKLQkJLS1uOwotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50IGlhMzJfdGxzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKLQkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsIHVuc2lnbmVkIGludCBwb3MsCi0JCXVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCi17Ci0JY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICp0bHM7Ci0KLQlpZiAocG9zID4gR0RUX0VOVFJZX1RMU19FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykgfHwKLQkJCShwb3MgJSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSkgIT0gMCB8fAotCQkJKGNvdW50ICUgc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcG9zIC89IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpOwotCWNvdW50IC89IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpOwotCi0JdGxzID0gJnRhcmdldC0+dGhyZWFkLnRsc19hcnJheVtwb3NdOwotCi0JaWYgKGtidWYpIHsKLQkJc3RydWN0IGlhMzJfdXNlcl9kZXNjICppbmZvID0ga2J1ZjsKLQkJd2hpbGUgKGNvdW50LS0gPiAwKQotCQkJZmlsbF91c2VyX2Rlc2MoaW5mbysrLCBHRFRfRU5UUllfVExTX01JTiArIHBvcysrLAotCQkJCQl0bHMrKyk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGlhMzJfdXNlcl9kZXNjIF9fdXNlciAqdV9pbmZvID0gdWJ1ZjsKLQkJd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0JCQlzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgaW5mbzsKLQkJCWZpbGxfdXNlcl9kZXNjKCZpbmZvLCBHRFRfRU5UUllfVExTX01JTiArIHBvcysrLCB0bHMrKyk7Ci0JCQlpZiAoX19jb3B5X3RvX3VzZXIodV9pbmZvKyssICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWEzMl90bHNfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwgdW5zaWduZWQgaW50IHBvcywKLQkJdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgaW5mb2J1ZltHRFRfRU5UUllfVExTX0VOVFJJRVNdOwotCWNvbnN0IHN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqaW5mbzsKLQotCWlmIChwb3MgPiBHRFRfRU5UUllfVExTX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSB8fAotCQkJKHBvcyAlIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpKSAhPSAwIHx8Ci0JCQkoY291bnQgJSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoa2J1ZikKLQkJaW5mbyA9IGtidWY7Ci0JZWxzZSBpZiAoX19jb3B5X2Zyb21fdXNlcihpbmZvYnVmLCB1YnVmLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCWVsc2UKLQkJaW5mbyA9IGluZm9idWY7Ci0KLQlzZXRfdGxzX2Rlc2ModGFyZ2V0LAotCQlHRFRfRU5UUllfVExTX01JTiArIChwb3MgLyBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSksCi0JCWluZm8sIGNvdW50IC8gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHNob3VsZCBtYXRjaCBhcmNoL2kzODYva2VybmVsL3B0cmFjZS5jOm5hdGl2ZV9yZWdzZXRzLgotICogWFhYIGlvcGVybT8gdm04Nj8KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBpYTMyX3JlZ3NldHNbXSA9IHsKLQl7Ci0JCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLAotCQkubiA9IHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyKS80LAotCQkuc2l6ZSA9IDQsIC5hbGlnbiA9IDQsCi0JCS5nZXQgPSBpYTMyX2dlbnJlZ3NfZ2V0LCAuc2V0ID0gaWEzMl9nZW5yZWdzX3NldAotCX0sCi0JewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUkZQUkVHLAotCQkubiA9IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSAvIDQsCi0JCS5zaXplID0gNCwgLmFsaWduID0gNCwKLQkJLmdldCA9IGlhMzJfZnByZWdzX2dldCwgLnNldCA9IGlhMzJfZnByZWdzX3NldAotCX0sCi0JewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlhGUFJFRywKLQkJLm4gPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCkgLyA0LAotCQkuc2l6ZSA9IDQsIC5hbGlnbiA9IDQsCi0JCS5nZXQgPSBpYTMyX2ZweHJlZ3NfZ2V0LCAuc2V0ID0gaWEzMl9mcHhyZWdzX3NldAotCX0sCi0JewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfVExTLAotCQkubiA9IEdEVF9FTlRSWV9UTFNfRU5UUklFUywKLQkJLmJpYXMgPSBHRFRfRU5UUllfVExTX01JTiwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSwKLQkJLmFsaWduID0gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyksCi0JCS5hY3RpdmUgPSBpYTMyX3Rsc19hY3RpdmUsCi0JCS5nZXQgPSBpYTMyX3Rsc19nZXQsIC5zZXQgPSBpYTMyX3Rsc19zZXQsCi0JfSwKLX07Ci0KLWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfaWEzMl92aWV3ID0gewotCS5uYW1lID0gImkzODYiLCAuZV9tYWNoaW5lID0gRU1fMzg2LAotCS5yZWdzZXRzID0gaWEzMl9yZWdzZXRzLCAubiA9IEFSUkFZX1NJWkUoaWEzMl9yZWdzZXRzKQotfTsKLQotbG9uZyBzeXMzMl9mYWR2aXNlNjRfNjQoaW50IGZkLCBfX3UzMiBvZmZzZXRfbG93LCBfX3UzMiBvZmZzZXRfaGlnaCwgCi0JCQlfX3UzMiBsZW5fbG93LCBfX3UzMiBsZW5faGlnaCwgaW50IGFkdmljZSkKLXsgCi0JcmV0dXJuIHN5c19mYWR2aXNlNjRfNjQoZmQsCi0JCQkgICAgICAgKCgodTY0KW9mZnNldF9oaWdoKTw8MzIpIHwgb2Zmc2V0X2xvdywKLQkJCSAgICAgICAoKCh1NjQpbGVuX2hpZ2gpPDwzMikgfCBsZW5fbG93LAotCQkJICAgICAgIGFkdmljZSk7IAotfSAKLQotI2lmZGVmCU5PVFlFVCAgLyogVU5URVNURUQgRk9SIElBNjQgRlJPTSBIRVJFIERPV04gKi8KLQotYXNtbGlua2FnZSBsb25nIHN5czMyX3NldHJldWlkKGNvbXBhdF91aWRfdCBydWlkLCBjb21wYXRfdWlkX3QgZXVpZCkKLXsKLQl1aWRfdCBzcnVpZCwgc2V1aWQ7Ci0KLQlzcnVpZCA9IChydWlkID09IChjb21wYXRfdWlkX3QpLTEpID8gKCh1aWRfdCktMSkgOiAoKHVpZF90KXJ1aWQpOwotCXNldWlkID0gKGV1aWQgPT0gKGNvbXBhdF91aWRfdCktMSkgPyAoKHVpZF90KS0xKSA6ICgodWlkX3QpZXVpZCk7Ci0JcmV0dXJuIHN5c19zZXRyZXVpZChzcnVpZCwgc2V1aWQpOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3NldHJlc3VpZChjb21wYXRfdWlkX3QgcnVpZCwgY29tcGF0X3VpZF90IGV1aWQsCi0JCWNvbXBhdF91aWRfdCBzdWlkKQotewotCXVpZF90IHNydWlkLCBzZXVpZCwgc3N1aWQ7Ci0KLQlzcnVpZCA9IChydWlkID09IChjb21wYXRfdWlkX3QpLTEpID8gKCh1aWRfdCktMSkgOiAoKHVpZF90KXJ1aWQpOwotCXNldWlkID0gKGV1aWQgPT0gKGNvbXBhdF91aWRfdCktMSkgPyAoKHVpZF90KS0xKSA6ICgodWlkX3QpZXVpZCk7Ci0Jc3N1aWQgPSAoc3VpZCA9PSAoY29tcGF0X3VpZF90KS0xKSA/ICgodWlkX3QpLTEpIDogKCh1aWRfdClzdWlkKTsKLQlyZXR1cm4gc3lzX3NldHJlc3VpZChzcnVpZCwgc2V1aWQsIHNzdWlkKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zZXRyZWdpZChjb21wYXRfZ2lkX3QgcmdpZCwgY29tcGF0X2dpZF90IGVnaWQpCi17Ci0JZ2lkX3Qgc3JnaWQsIHNlZ2lkOwotCi0Jc3JnaWQgPSAocmdpZCA9PSAoY29tcGF0X2dpZF90KS0xKSA/ICgoZ2lkX3QpLTEpIDogKChnaWRfdClyZ2lkKTsKLQlzZWdpZCA9IChlZ2lkID09IChjb21wYXRfZ2lkX3QpLTEpID8gKChnaWRfdCktMSkgOiAoKGdpZF90KWVnaWQpOwotCXJldHVybiBzeXNfc2V0cmVnaWQoc3JnaWQsIHNlZ2lkKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zZXRyZXNnaWQoY29tcGF0X2dpZF90IHJnaWQsIGNvbXBhdF9naWRfdCBlZ2lkLAotCQljb21wYXRfZ2lkX3Qgc2dpZCkKLXsKLQlnaWRfdCBzcmdpZCwgc2VnaWQsIHNzZ2lkOwotCi0Jc3JnaWQgPSAocmdpZCA9PSAoY29tcGF0X2dpZF90KS0xKSA/ICgoZ2lkX3QpLTEpIDogKChnaWRfdClyZ2lkKTsKLQlzZWdpZCA9IChlZ2lkID09IChjb21wYXRfZ2lkX3QpLTEpID8gKChnaWRfdCktMSkgOiAoKGdpZF90KWVnaWQpOwotCXNzZ2lkID0gKHNnaWQgPT0gKGNvbXBhdF9naWRfdCktMSkgPyAoKGdpZF90KS0xKSA6ICgoZ2lkX3Qpc2dpZCk7Ci0JcmV0dXJuIHN5c19zZXRyZXNnaWQoc3JnaWQsIHNlZ2lkLCBzc2dpZCk7Ci19Ci0jZW5kaWYgLyogTk9UWUVUICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCBlOTdiMjU1Li4yMWFkYmQ3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTk4LDggKzk4LDM0IEBACiAjZW5kaWYKICNkZWZpbmUgYWNwaV9wcm9jZXNzb3JfY3N0YXRlX2NoZWNrKHgpICh4KSAvKiBubyBpZGxlIGxpbWl0cyBvbiBJQTY0IDopICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9hY3BpKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCkgeyB9CiAKKyNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCiBjb25zdCBjaGFyICphY3BpX2dldF9zeXNuYW1lICh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmFjcGlfZ2V0X3N5c25hbWUgKHZvaWQpCit7CisjIGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1NJTSkKKwlyZXR1cm4gImhwc2ltIjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDEpCisJcmV0dXJuICJocHp4MSI7CisjIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpCisJcmV0dXJuICJocHp4MV9zd2lvdGxiIjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9TR0lfU04yKQorCXJldHVybiAic24yIjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9TR0lfVVYpCisJcmV0dXJuICJ1diI7CisjIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfRElHKQorCXJldHVybiAiZGlnIjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9YRU5fR1VFU1QpCisJcmV0dXJuICJ4ZW4iOworIyBlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfRElHX1ZURCkKKwlyZXR1cm4gImRpZ192dGQiOworIyBlbHNlCisjCWVycm9yIFVua25vd24gcGxhdGZvcm0uICBGaXggYWNwaS5jLgorIyBlbmRpZgorfQorI2VuZGlmCiBpbnQgYWNwaV9yZXF1ZXN0X3ZlY3RvciAodTMyIGludF90eXBlKTsKIGludCBhY3BpX2dzaV90b19pcnEgKHUzMiBnc2ksIHVuc2lnbmVkIGludCAqaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lhMzIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pYTMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOTBlZTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lhMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9JQTY0X0lBMzJfSAotI2RlZmluZSBfQVNNX0lBNjRfSUEzMl9ICi0KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0KLSNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscwkJMjg1CS8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCi0jZGVmaW5lIElBMzJfUEFHRV9TSElGVAkJCTEyCS8qIDRLQiBwYWdlcyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jIGlmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQotI2RlZmluZSBJQTMyX1BBR0VfT0ZGU0VUCTB4YzAwMDAwMDAKLQotZXh0ZXJuIHZvaWQgaWEzMl9jcHVfaW5pdCAodm9pZCk7Ci1leHRlcm4gdm9pZCBpYTMyX21lbV9pbml0ICh2b2lkKTsKLWV4dGVybiB2b2lkIGlhMzJfZ2R0X2luaXQgKHZvaWQpOwotZXh0ZXJuIGludCBpYTMyX2V4Y2VwdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXNyKTsKLWV4dGVybiBpbnQgaWEzMl9pbnRlcmNlcHQgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlzcik7Ci1leHRlcm4gaW50IGlhMzJfY2xvbmVfdGxzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzKTsKLQotIyBlbmRpZiAvKiAhQ09ORklHX0lBMzJfU1VQUE9SVCAqLwotCi0vKiBEZWNsYXJlIHRoaXMgdW5jb25kaXRpb25hbGx5LCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZ3MgZm9yIHVucmVhY2hhYmxlIGNvZGUuICAqLwotZXh0ZXJuIGludCBpYTMyX3NldHVwX2ZyYW1lMSAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAotCQkJICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2lmIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQKLWV4dGVybiBpbnQgaWEzMl9jb3B5X2lhNjRfcGFydGlhbF9wYWdlX2xpc3Qoc3RydWN0IHRhc2tfc3RydWN0ICosCi0JCQkJCXVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgaWEzMl9kcm9wX2lhNjRfcGFydGlhbF9wYWdlX2xpc3Qoc3RydWN0IHRhc2tfc3RydWN0ICopOwotI2Vsc2UKLSMgZGVmaW5lIGlhMzJfY29weV9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KGExLCBhMikJMAotIyBkZWZpbmUgaWEzMl9kcm9wX2lhNjRfcGFydGlhbF9wYWdlX2xpc3QoYTEpCWRvIHsgOyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBfQVNNX0lBNjRfSUEzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggMzBjZjQ2NS4uZjdjMDBhNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIFBFUkNQVV9QQUdFX1NJWkUKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwotIyBkZWZpbmUgVEhJU19DUFUodmFyKQkocGVyX2NwdV9fIyN2YXIpICAvKiB1c2UgdGhpcyB0byBtYXJrIGFjY2Vzc2VzIHRvIHBlci1DUFUgdmFyaWFibGVzLi4uICovCisjIGRlZmluZSBUSElTX0NQVSh2YXIpCSh2YXIpICAvKiB1c2UgdGhpcyB0byBtYXJrIGFjY2Vzc2VzIHRvIHBlci1DUFUgdmFyaWFibGVzLi4uICovCiAjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiAKIApAQCAtMzksNyArMzksNyBAQAogICogT24gdGhlIHBvc2l0aXZlIHNpZGUsIHVzaW5nIF9faWE2NF9wZXJfY3B1X3ZhcigpIGluc3RlYWQgb2YgX19nZXRfY3B1X3ZhcigpIGlzIHNsaWdodGx5CiAgKiBtb3JlIGVmZmljaWVudC4KICAqLwotI2RlZmluZSBfX2lhNjRfcGVyX2NwdV92YXIodmFyKQlwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBfX2lhNjRfcGVyX2NwdV92YXIodmFyKQl2YXIKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA2OWJmMTM4Li5jMzI4NmY0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXJldHVybiBwdGVfdmFsKGEpID09IHB0ZV92YWwoYik7CiB9CiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCkgZG8geyB9IHdoaWxlICgwKQogCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0ICh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA3ZmE5MGY3Li4zNDhlNDRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0yNzAsMjMgKzI3MCw2IEBACiAJCSAoaW50IF9fdXNlciAqKSAoYWRkcikpOwkJCQkJCQlcCiB9KQogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotc3RydWN0IGRlc2Nfc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgYSwgYjsKLX07Ci0KLSNkZWZpbmUgZGVzY19lbXB0eShkZXNjKQkJKCEoKGRlc2MpLT5hIHwgKGRlc2MpLT5iKSkKLSNkZWZpbmUgZGVzY19lcXVhbChkZXNjMSwgZGVzYzIpCSgoKGRlc2MxKS0+YSA9PSAoZGVzYzIpLT5hKSAmJiAoKGRlc2MxKS0+YiA9PSAoZGVzYzIpLT5iKSkKLQotI2RlZmluZSBHRFRfRU5UUllfVExTX0VOVFJJRVMJMwotI2RlZmluZSBHRFRfRU5UUllfVExTX01JTgk2Ci0jZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUFYIAkoR0RUX0VOVFJZX1RMU19NSU4gKyBHRFRfRU5UUllfVExTX0VOVFJJRVMgLSAxKQotCi0jZGVmaW5lIFRMU19TSVpFIChHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KQotCi1zdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdDsKLSNlbmRpZgotCiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CiAJX191MzIgZmxhZ3M7CQkJLyogdmFyaW91cyB0aHJlYWQgZmxhZ3MgKHNlZSBJQTY0X1RIUkVBRF8qKSAqLwogCS8qIHdyaXRpbmcgb25fdXN0YWNrIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzbyBpdCdzIHdvcnRoIHNwZW5kaW5nIDggYml0cyBvbiBpdC4uLiAqLwpAQCAtMjk4LDI5ICsyODEsNiBAQAogCV9fdTY0IHJic19ib3Q7CQkJLyogdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIFJCUyAqLwogCWludCBsYXN0X2ZwaF9jcHU7CQkvKiBDUFUgdGhhdCBtYXkgaG9sZCB0aGUgY29udGVudHMgb2YgZjMyLWYxMjcgKi8KIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlfX3U2NCBlZmxhZzsJCQkvKiBJQTMyIEVGTEFHUyByZWcgKi8KLQlfX3U2NCBmc3I7CQkJLyogSUEzMiBmbG9hdGluZyBwdCBzdGF0dXMgcmVnICovCi0JX191NjQgZmNyOwkJCS8qIElBMzIgZmxvYXRpbmcgcHQgY29udHJvbCByZWcgKi8KLQlfX3U2NCBmaXI7CQkJLyogSUEzMiBmcCBleGNlcHQuIGluc3RyLiByZWcgKi8KLQlfX3U2NCBmZHI7CQkJLyogSUEzMiBmcCBleGNlcHQuIGRhdGEgcmVnICovCi0JX191NjQgb2xkX2sxOwkJCS8qIG9sZCB2YWx1ZSBvZiBhci5rMSAqLwotCV9fdTY0IG9sZF9pb2I7CQkJLyogb2xkIElPQmFzZSB2YWx1ZSAqLwotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0ICpwcGw7IC8qIHBhcnRpYWwgcGFnZSBsaXN0IGZvciA0SyBwYWdlIHNpemUgaXNzdWUgKi8KLSAgICAgICAgLyogY2FjaGVkIFRMUyBkZXNjcmlwdG9ycy4gKi8KLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgdGxzX2FycmF5W0dEVF9FTlRSWV9UTFNfRU5UUklFU107Ci0KLSMgZGVmaW5lIElOSVRfVEhSRUFEX0lBMzIJLmVmbGFnID0JMCwJCQlcCi0JCQkJLmZzciA9CQkwLAkJCVwKLQkJCQkuZmNyID0JCTB4MTc4MDAwMDAwMzdmVUxMLAlcCi0JCQkJLmZpciA9CQkwLAkJCVwKLQkJCQkuZmRyID0JCTAsCQkJXAotCQkJCS5vbGRfazEgPQkwLAkJCVwKLQkJCQkub2xkX2lvYiA9CTAsCQkJXAotCQkJCS5wcGwgPQkJTlVMTCwKLSNlbHNlCi0jIGRlZmluZSBJTklUX1RIUkVBRF9JQTMyCi0jZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLwogI2lmZGVmIENPTkZJR19QRVJGTU9OCiAJdm9pZCAqcGZtX2NvbnRleHQ7CQkgICAgIC8qIHBvaW50ZXIgdG8gZGV0YWlsZWQgUE1VIGNvbnRleHQgKi8KIAl1bnNpZ25lZCBsb25nIHBmbV9uZWVkc19jaGVja2luZzsgICAgLyogd2hlbiA+MCwgcGVuZGluZyBwZXJmbW9uIHdvcmsgb24ga2VybmVsIGV4aXQgKi8KQEAgLTM0Miw3ICszMDIsNiBAQAogCS5yYnNfYm90ID0JU1RBQ0tfVE9QIC0gREVGQVVMVF9VU0VSX1NUQUNLX1NJWkUsCVwKIAkudGFza19zaXplID0JREVGQVVMVF9UQVNLX1NJWkUsCQkJXAogCS5sYXN0X2ZwaF9jcHUgPSAgLTEsCQkJCQlcCi0JSU5JVF9USFJFQURfSUEzMgkJCQkJXAogCUlOSVRfVEhSRUFEX1BNCQkJCQkJXAogCS5kYnIgPQkJezAsIH0sCQkJCQlcCiAJLmliciA9CQl7MCwgfSwJCQkJCVwKQEAgLTQ4NSwxMSArNDQ0LDYgQEAKIGV4dGVybiB2b2lkIGlhNjRfc2F2ZV9kZWJ1Z19yZWdzICh1bnNpZ25lZCBsb25nICpzYXZlX2FyZWEpOwogZXh0ZXJuIHZvaWQgaWE2NF9sb2FkX2RlYnVnX3JlZ3MgKHVuc2lnbmVkIGxvbmcgKnNhdmVfYXJlYSk7CiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi1leHRlcm4gdm9pZCBpYTMyX3NhdmVfc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci1leHRlcm4gdm9pZCBpYTMyX2xvYWRfc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci0jZW5kaWYKLQogI2RlZmluZSBpYTY0X2ZwaF9lbmFibGUoKQlkbyB7IGlhNjRfcnNtKElBNjRfUFNSX0RGSCk7IGlhNjRfc3Jsel9kKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGlhNjRfZnBoX2Rpc2FibGUoKQlkbyB7IGlhNjRfc3NtKElBNjRfUFNSX0RGSCk7IGlhNjRfc3Jsel9kKCk7IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggZDZmNTc4Ny4uZDhlOTg5NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTIsMjUgKzIsNiBAQAogI2RlZmluZSBfQVNNX0lBNjRfU0NBVFRFUkxJU1RfSAogCiAvKgotICogTW9kaWZpZWQgMTk5OC0xOTk5LCAyMDAxLTIwMDIsIDIwMDQKLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbwotICovCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLQl1bnNpZ25lZCBsb25nIHNnX21hZ2ljOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZyBwYWdlX2xpbms7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwkvKiBidWZmZXIgbGVuZ3RoICovCi0KLQlkbWFfYWRkcl90IGRtYV9hZGRyZXNzOwotCXVuc2lnbmVkIGludCBkbWFfbGVuZ3RoOwotfTsKLQotLyoKICAqIEl0IHVzZWQgdG8gYmUgdGhhdCBJU0FfRE1BX1RIUkVTSE9MRCBoYWQgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlCiAgKiBETUEtbGltaXRzIG9mIElTQS1kZXZpY2VzLiAgTm93YWRheXMsIGl0cyBvbmx5IHJlbWFpbmluZyB1c2UgKGFwYXJ0CiAgKiBmcm9tIHRoZSBhaGExNTQyLmMgZHJpdmVyLCB3aGljaCBpc24ndCA2NC1iaXQgY2xlYW4gYW55aG93KSBpcyB0bwpAQCAtMzAsOSArMTEsNiBAQAogICovCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECTB4ZmZmZmZmZmYKIAotI2RlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmRtYV9sZW5ndGgpCi0jZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCi0KLSNkZWZpbmUJQVJDSF9IQVNfU0dfQ0hBSU4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDJmNzU4YTQuLmE3ZmYxYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMjIsMzMgKzIyLDE4IEBACiAJaWYgKChsb25nKXJlZ3MtPmNyX2lmcyA8IDApIC8qIE5vdCBhIHN5c2NhbGwgKi8KIAkJcmV0dXJuIC0xOwogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpCi0JCXJldHVybiByZWdzLT5yMTsKLSNlbmRpZgotCiAJcmV0dXJuIHJlZ3MtPnIxNTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfcm9sbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkKLQkJcmVncy0+cjggPSByZWdzLT5yMTsKLSNlbmRpZgotCiAJLyogZG8gbm90aGluZyAqLwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfZXJyb3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpCi0JCXJldHVybiByZWdzLT5yODsKLSNlbmRpZgotCiAJcmV0dXJuIHJlZ3MtPnIxMCA9PSAtMSA/IHJlZ3MtPnI4OjA7CiB9CiAKQEAgLTYyLDEzICs0Nyw2IEBACiAJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJICAgIGludCBlcnJvciwgbG9uZyB2YWwpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpIHsKLQkJcmVncy0+cjggPSAobG9uZykgZXJyb3IgPyBlcnJvciA6IHZhbDsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCiAJaWYgKGVycm9yKSB7CiAJCS8qIGVycm9yIDwgMCwgYnV0IGlhNjQgdXNlcyA+IDAgcmV0dXJuIHZhbHVlICovCiAJCXJlZ3MtPnI4ID0gLWVycm9yOwpAQCAtODksMzcgKzY3LDYgQEAKIHsKIAlCVUdfT04oaSArIG4gPiA2KTsKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKSB7Ci0JCXN3aXRjaCAoaSArIG4pIHsKLQkJY2FzZSA2OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxMzsKLQkJY2FzZSA1OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxNTsKLQkJY2FzZSA0OgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxNDsKLQkJY2FzZSAzOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxMDsKLQkJY2FzZSAyOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnI5OwotCQljYXNlIDE6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQkqYXJncysrID0gcmVncy0+cjExOwotCQljYXNlIDA6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuOwotCX0KLSNlbmRpZgogCWlhNjRfc3lzY2FsbF9nZXRfc2V0X2FyZ3VtZW50cyh0YXNrLCByZWdzLCBpLCBuLCBhcmdzLCAwKTsKIH0KIApAQCAtMTMwLDM0ICs3Nyw2IEBACiB7CiAJQlVHX09OKGkgKyBuID4gNik7CiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkgewotCQlzd2l0Y2ggKGkgKyBuKSB7Ci0JCWNhc2UgNjoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnIxMyA9ICphcmdzKys7Ci0JCWNhc2UgNToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnIxNSA9ICphcmdzKys7Ci0JCWNhc2UgNDoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnIxNCA9ICphcmdzKys7Ci0JCWNhc2UgMzoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnIxMCA9ICphcmdzKys7Ci0JCWNhc2UgMjoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnI5ID0gKmFyZ3MrKzsKLQkJY2FzZSAxOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJcmVncy0+cjExID0gKmFyZ3MrKzsKLQkJY2FzZSAwOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuOwotCX0KLSNlbmRpZgogCWlhNjRfc3lzY2FsbF9nZXRfc2V0X2FyZ3VtZW50cyh0YXNrLCByZWdzLCBpLCBuLCBhcmdzLCAxKTsKIH0KICNlbmRpZgkvKiBfQVNNX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDkyN2EzODEuLjlmMzQyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTE5MSwxNSArMTkxLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLSMgZGVmaW5lIElTX0lBMzJfUFJPQ0VTUyhyZWdzKQkoaWE2NF9wc3IocmVncyktPmlzICE9IDApCi0jZWxzZQotIyBkZWZpbmUgSVNfSUEzMl9QUk9DRVNTKHJlZ3MpCQkwCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWEzMl9zYXZlX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSl7fQotc3RhdGljIGlubGluZSB2b2lkIGlhMzJfbG9hZF9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpe30KLSNlbmRpZgotCiAvKgogICogQ29udGV4dCBzd2l0Y2ggZnJvbSBvbmUgdGhyZWFkIHRvIGFub3RoZXIuICBJZiB0aGUgdHdvIHRocmVhZHMgaGF2ZQogICogZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzLCBzY2hlZHVsZSgpIGhhcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YKQEAgLTIzMyw3ICsyMjQsNyBAQAogCiAjZGVmaW5lIElBNjRfSEFTX0VYVFJBX1NUQVRFKHQpCQkJCQkJCVwKIAkoKHQpLT50aHJlYWQuZmxhZ3MgJiAoSUE2NF9USFJFQURfREJHX1ZBTElEfElBNjRfVEhSRUFEX1BNX1ZBTElEKQlcCi0JIHx8IElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3ModCkpIHx8IFBFUkZNT05fSVNfU1lTV0lERSgpKQorCSB8fCBQRVJGTU9OX0lTX1NZU1dJREUoKSkKIAogI2RlZmluZSBfX3N3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgZG8gewkJCQkJCQkgXAogCUlBNjRfQUNDT1VOVF9PTl9TV0lUQ0gocHJldiwgbmV4dCk7CQkJCQkJCSBcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMTBhOGYyMS4uYmI4YjBmZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzM1LDIwICszMzUsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSwotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAotIyBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCi0jZW5kaWYKLQogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoQVNTRU1CTEVSKQogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oCmluZGV4IGI4MzcwYzguLmJhYTc0YzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaApAQCAtMzYsMTAgKzM2LDYgQEAKIAlyZXR1cm4gIShpYTY0X3BzcihyZWdzKS0+aSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfaXJxKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCV9fZG9fSVJRKGlycSk7Ci19CiAjZGVmaW5lIGlycV9jdHhfaW5pdChjcHUpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9YRU5fRVZFTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGUxMjM2MzQuLjQxMzgyODIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtOCwxNSArOCwxMyBAQAogCiBleHRyYS15CTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCi1vYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCitvYmoteSA6PSBlbnRyeS5vIGVmaS5vIGVmaV9zdHViLm8gZ2F0ZS1kYXRhLm8gZnN5cy5vIGlhNjRfa3N5bXMubyBpcnEubyBpcnFfaWE2NC5vCVwKIAkgaXJxX2xzYXBpYy5vIGl2dC5vIG1hY2h2ZWMubyBwYWwubyBwYXJhdmlydF9wYXRjaGxpc3QubyBwYXRjaC5vIHByb2Nlc3MubyBwZXJmbW9uLm8gcHRyYWNlLm8gc2FsLm8JCVwKIAkgc2FsaW5mby5vIHNldHVwLm8gc2lnbmFsLm8gc3lzX2lhNjQubyB0aW1lLm8gdHJhcHMubyB1bmFsaWduZWQubyBcCiAJIHVud2luZC5vIG1jYS5vIG1jYV9hc20ubyB0b3BvbG9neS5vIGRtYS1tYXBwaW5nLm8KIAorb2JqLSQoQ09ORklHX0FDUEkpCQkrPSBhY3BpLm8gYWNwaS1leHQubwogb2JqLSQoQ09ORklHX0lBNjRfQlJMX0VNVSkJKz0gYnJsX2VtdS5vCi1vYmotJChDT05GSUdfSUE2NF9HRU5FUklDKQkrPSBhY3BpLWV4dC5vCi1vYmotJChDT05GSUdfSUE2NF9IUF9aWDEpCSs9IGFjcGktZXh0Lm8KLW9iai0kKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKSArPSBhY3BpLWV4dC5vCiAKIG9iai0kKENPTkZJR19JQTY0X1BBTElORk8pCSs9IHBhbGluZm8ubwogb2JqLSQoQ09ORklHX0lPU0FQSUMpCQkrPSBpb3NhcGljLm8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggNDA1NzRhZS4uYTdjYTA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTYwLDExICs2MCw2IEBACiAKICNkZWZpbmUgUFJFRklYCQkJIkFDUEk6ICIKIAotdm9pZCAoKnBtX2lkbGUpICh2b2lkKTsKLUVYUE9SVF9TWU1CT0wocG1faWRsZSk7Ci12b2lkICgqcG1fcG93ZXJfb2ZmKSAodm9pZCk7Ci1FWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7Ci0KIHUzMiBhY3BpX3JzZHRfZm9yY2VkOwogdW5zaWduZWQgaW50IGFjcGlfY3BlaV9vdmVycmlkZTsKIHVuc2lnbmVkIGludCBhY3BpX2NwZWlfcGh5c19jcHVpZDsKQEAgLTgzLDEyICs3OCwxMCBAQAogCQkgICAgICAgInYxLjAvcjAuNzEgdGFibGVzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpOwogCXJldHVybiByc2RwX3BoeXM7CiB9Ci0jZW5kaWYKIAogY29uc3QgY2hhciBfX2luaXQgKgogYWNwaV9nZXRfc3lzbmFtZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKIAl1bnNpZ25lZCBsb25nIHJzZHBfcGh5czsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwOwogCXN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKnhzZHQ7CkBAIC0xNDMsMzAgKzEzNiw4IEBACiAjZW5kaWYKIAogCXJldHVybiAiZGlnIjsKLSNlbHNlCi0jIGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1NJTSkKLQlyZXR1cm4gImhwc2ltIjsKLSMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDEpCi0JcmV0dXJuICJocHp4MSI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpCi0JcmV0dXJuICJocHp4MV9zd2lvdGxiIjsKLSMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9TR0lfU04yKQotCXJldHVybiAic24yIjsKLSMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9TR0lfVVYpCi0JcmV0dXJuICJ1diI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfRElHKQotCXJldHVybiAiZGlnIjsKLSMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9YRU5fR1VFU1QpCi0JcmV0dXJuICJ4ZW4iOwotIyBlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfRElHX1ZURCkKLQlyZXR1cm4gImRpZ192dGQiOwotIyBlbHNlCi0jCWVycm9yIFVua25vd24gcGxhdGZvcm0uICBGaXggYWNwaS5jLgotIyBlbmRpZgotI2VuZGlmCiB9Ci0KLSNpZmRlZiBDT05GSUdfQUNQSQorI2VuZGlmIC8qIENPTkZJR19JQTY0X0dFTkVSSUMgKi8KIAogI2RlZmluZSBBQ1BJX01BWF9QTEFURk9STV9JTlRFUlJVUFRTCTI1NgogCkBAIC04ODEsOCArODUyLDggQEAKIAogCXBvc3NpYmxlID0gYXZhaWxhYmxlX2NwdXMgKyBhZGRpdGlvbmFsX2NwdXM7CiAKLQlpZiAocG9zc2libGUgPiBOUl9DUFVTKQotCQlwb3NzaWJsZSA9IE5SX0NQVVM7CisJaWYgKHBvc3NpYmxlID4gbnJfY3B1X2lkcykKKwkJcG9zc2libGUgPSBucl9jcHVfaWRzOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBBbGxvd2luZyAlZCBDUFVzLCAlZCBob3RwbHVnIENQVXNcbiIsCiAJCXBvc3NpYmxlLCBtYXgoKHBvc3NpYmxlIC0gYXZhaWxhYmxlX2NwdXMpLCAwKSk7CkBAIC0xMDYwLDUgKzEwMzEsMyBAQAogICogZG9fc3VzcGVuZF9sb3dsZXZlbCgpCiAgKi8KIHZvaWQgZG9fc3VzcGVuZF9sb3dsZXZlbCh2b2lkKSB7fQotCi0jZW5kaWYJCQkJLyogQ09ORklHX0FDUEkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYwppbmRleCBmMzgwMmFlLi45NmE5ZDE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jCkBAIC0zMCwyMCArMzAsMTEgQEAKIAogaW50IGF1ZGl0X2NsYXNzaWZ5X2FyY2goaW50IGFyY2gpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChhcmNoID09IEFVRElUX0FSQ0hfSTM4NikKLQkJcmV0dXJuIDE7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogaW50IGF1ZGl0X2NsYXNzaWZ5X3N5c2NhbGwoaW50IGFiaSwgdW5zaWduZWQgc3lzY2FsbCkKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JZXh0ZXJuIGludCBpYTMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQpOwotCWlmIChhYmkgPT0gQVVESVRfQVJDSF9JMzg2KQotCQlyZXR1cm4gaWEzMl9jbGFzc2lmeV9zeXNjYWxsKHN5c2NhbGwpOwotI2VuZGlmCiAJc3dpdGNoKHN5c2NhbGwpIHsKIAljYXNlIF9fTlJfb3BlbjoKIAkJcmV0dXJuIDI7CkBAIC01OCwxOCArNDksNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9jbGFzc2VzX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JZXh0ZXJuIF9fdTMyIGlhMzJfZGlyX2NsYXNzW107Ci0JZXh0ZXJuIF9fdTMyIGlhMzJfd3JpdGVfY2xhc3NbXTsKLQlleHRlcm4gX191MzIgaWEzMl9yZWFkX2NsYXNzW107Ci0JZXh0ZXJuIF9fdTMyIGlhMzJfY2hhdHRyX2NsYXNzW107Ci0JZXh0ZXJuIF9fdTMyIGlhMzJfc2lnbmFsX2NsYXNzW107Ci0JYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEVfMzIsIGlhMzJfd3JpdGVfY2xhc3MpOwotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQURfMzIsIGlhMzJfcmVhZF9jbGFzcyk7Ci0JYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyLCBpYTMyX2Rpcl9jbGFzcyk7Ci0JYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSXzMyLCBpYTMyX2NoYXR0cl9jbGFzcyk7Ci0JYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfU0lHTkFMXzMyLCBpYTMyX3NpZ25hbF9jbGFzcyk7Ci0jZW5kaWYKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURSwgd3JpdGVfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQUQsIHJlYWRfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCBkNzViODcyLi45YTI2MGIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC03MSwxNSArNzEsNiBAQAogCWFkZCBvdXQzPTE2LHNwCQkJLy8gcmVncwogCWJyLmNhbGwuc3B0ay5tYW55IHJwPXN5c19leGVjdmUKIC5yZXQwOgotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQkvKgotCSAqIENoZWNrIGlmIHdlJ3JlIHJldHVybmluZyB0byBpYTMyIG1vZGUuIElmIHNvLCB3ZSBuZWVkIHRvIHJlc3RvcmUgaWEzMiByZWdpc3RlcnMKLQkgKiBmcm9tIHB0X3JlZ3MuCi0JICovCi0JYWRkcyByMTY9UFQoQ1JfSVBTUikrMTYsc3AKLQk7OwotCWxkOCByMTY9W3IxNl0KLSNlbmRpZgogCWNtcDQuZ2UgcDYscDc9cjgscjAKIAltb3YgYXIucGZzPWxvYzEJCQkvLyByZXN0b3JlIGFyLnBmcwogCXN4dDQgcjg9cjgJCQkvLyByZXR1cm4gNjQtYml0IHJlc3VsdApAQCAtMTA4LDEyICs5OSw2IEBACiAJbGRmLmZpbGwgZjIzPVtzcF07CWxkZi5maWxsIGYyND1bc3BdOwltb3YgZjI1PWYwCiAJbGRmLmZpbGwgZjI2PVtzcF07CWxkZi5maWxsIGYyNz1bc3BdOwltb3YgZjI4PWYwCiAJbGRmLmZpbGwgZjI5PVtzcF07CWxkZi5maWxsIGYzMD1bc3BdOwltb3YgZjMxPWYwCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCXRiaXQubnogcDYscDA9cjE2LCBJQTY0X1BTUl9JU19CSVQKLQltb3ZsIGxvYzA9aWE2NF9yZXRfZnJvbV9pYTMyX2V4ZWN2ZQotCTs7Ci0ocDYpCW1vdiBycD1sb2MwCi0jZW5kaWYKIAlici5yZXQuc3B0ay5tYW55IHJwCiBFTkQoaWE2NF9leGVjdmUpCiAKQEAgLTg0OCwzMCArODMzLDYgQEAKIAlici5jb25kLnNwdGsubWFueSByYnNfc3dpdGNoCS8vIEIKIEVORChfX3BhcmF2aXJ0X2xlYXZlX3N5c2NhbGwpCiAKLSNpZmRlZiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi1HTE9CQUxfRU5UUlkoaWE2NF9yZXRfZnJvbV9pYTMyX2V4ZWN2ZSkKLQlQVF9SRUdTX1VOV0lORF9JTkZPKDApCi0JYWRkcyByMj1QVChSOCkrMTYsc3AJCQkvLyByMiA9ICZwdF9yZWdzLnI4Ci0JYWRkcyByMz1QVChSMTApKzE2LHNwCQkJLy8gcjMgPSAmcHRfcmVncy5yMTAKLQk7OwotCS5tZW0ub2Zmc2V0IDAsMAotCXN0OC5zcGlsbCBbcjJdPXI4CS8vIHN0b3JlIHJldHVybiB2YWx1ZSBpbiBzbG90IGZvciByOCBhbmQgc2V0IHVuYXQgYml0Ci0JLm1lbS5vZmZzZXQgOCwwCi0Jc3Q4LnNwaWxsIFtyM109cjAJLy8gY2xlYXIgZXJyb3IgaW5kaWNhdGlvbiBpbiBzbG90IGZvciByMTAgYW5kIHNldCB1bmF0IGJpdAotI2lmZGVmIENPTkZJR19QQVJBVklSVAotCTs7Ci0JLy8gZG9uJ3QgZmFsbCB0aHJvdWdoLCBpYTY0X2xlYXZlX2tlcm5lbCBtYXkgYmUgI2RlZmluZSdkCi0JYnIuY29uZC5zcHRrLmZldyBpYTY0X2xlYXZlX2tlcm5lbAotCTs7Ci0jZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCi1FTkQoaWE2NF9yZXRfZnJvbV9pYTMyX2V4ZWN2ZSkKLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0JLy8gZmFsbCB0aHJvdWdoCi0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfSUEzMl9TVVBQT1JUICovCi0jZW5kaWYgLyogX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfTkFUSVZFICovCi0KIEdMT0JBTF9FTlRSWShfX3BhcmF2aXJ0X2xlYXZlX2tlcm5lbCkKIAlQVF9SRUdTX1VOV0lORF9JTkZPKDApCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKaW5kZXggNDYxYjk5OS4uN2Y0YTBlZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKQEAgLTMwLDkgKzMwLDkgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotRVhQT1JUX1NZTUJPTChwZXJfY3B1X19pYTY0X2NwdV9pbmZvKTsKK0VYUE9SVF9TWU1CT0woaWE2NF9jcHVfaW5mbyk7CiAjaWZkZWYgQ09ORklHX1NNUAotRVhQT1JUX1NZTUJPTChwZXJfY3B1X19sb2NhbF9wZXJfY3B1X29mZnNldCk7CitFWFBPUlRfU1lNQk9MKGxvY2FsX3Blcl9jcHVfb2Zmc2V0KTsKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMgYi9hcmNoL2lhNjQva2VybmVsL2l2dC5TCmluZGV4IGVjOWE1ZmRmLi4xNzlmZDEyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9icmVhay5oPgotI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEzODYsMjggKzEzODUsNiBAQAogLy8gMHg2YTAwIEVudHJ5IDQ2IChzaXplIDE2IGJ1bmRsZXMpIElBLTMyIEludGVyY2VwdCAgKDMwLDMxLDU5LDcwLDcxKQogRU5UUlkoaWEzMl9pbnRlcmNlcHQpCiAJREJHX0ZBVUxUKDQ2KQotI2lmZGVmCUNPTkZJR19JQTMyX1NVUFBPUlQKLQltb3YgcjMxPXByCi0JTU9WX0ZST01fSVNSKHIxNikKLQk7OwotCWV4dHIudSByMTc9cjE2LDE2LDgJLy8gZ2V0IElTUi5jb2RlCi0JbW92IHIxOD1hci5lZmxhZwotCU1PVl9GUk9NX0lJTShyMTkpCS8vIG9sZCBlZmxhZyB2YWx1ZQotCTs7Ci0JY21wLm5lIHA2LHAwPTIscjE3Ci0ocDYpCWJyLmNvbmQuc3BudCAxZgkJLy8gbm90IGEgc3lzdGVtIGZsYWcgZmF1bHQKLQl4b3IgcjE2PXIxOCxyMTkKLQk7OwotCWV4dHIudSByMTc9cjE2LDE4LDEJLy8gZ2V0IHRoZSBlZmxhZ3MuYWMgYml0Ci0JOzsKLQljbXAuZXEgcDYscDA9MCxyMTcKLShwNikJYnIuY29uZC5zcG50IDFmCQkvLyBlZmxhZ3MuYWMgYml0IGRpZG4ndCBjaGFuZ2UKLQk7OwotCW1vdiBwcj1yMzEsLTEJCS8vIHJlc3RvcmUgcHJlZGljYXRlIHJlZ2lzdGVycwotCVJGSQotCi0xOgotI2VuZGlmCS8vIENPTkZJR19JQTMyX1NVUFBPUlQKIAlGQVVMVCg0NikKIEVORChpYTMyX2ludGVyY2VwdCkKIApAQCAtMTQxNiwxMiArMTM5Myw3IEBACiAvLyAweDZiMDAgRW50cnkgNDcgKHNpemUgMTYgYnVuZGxlcykgSUEtMzIgSW50ZXJydXB0ICAoNzQpCiBFTlRSWShpYTMyX2ludGVycnVwdCkKIAlEQkdfRkFVTFQoNDcpCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCW1vdiByMzE9cHIKLQlici5zcHRrLm1hbnkgZGlzcGF0Y2hfdG9faWEzMl9oYW5kbGVyCi0jZWxzZQogCUZBVUxUKDQ3KQotI2VuZGlmCiBFTkQoaWEzMl9pbnRlcnJ1cHQpCiAKIAkub3JnIGlhNjRfaXZ0KzB4NmMwMApAQCAtMTcxNSw4OSArMTY4NywzIEBACiAocDYpCWJyLmNhbGwuZHBudC5tYW55IGI2PWI2CQkvLyBjYWxsIHJldHVybnMgdG8gaWE2NF9sZWF2ZV9rZXJuZWwKIAlici5zcHRrLm1hbnkgaWE2NF9sZWF2ZV9rZXJuZWwKIEVORChkaXNwYXRjaF9pbGxlZ2FsX29wX2ZhdWx0KQotCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCi0JLyoKLQkgKiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAotCSAqIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCi0JICogZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKLQkgKiBzdWl0YWJsZSBzcG90Li4uCi0JICovCi0KLQkvLyBJQTMyIGludGVycnVwdCBlbnRyeSBwb2ludAotCi1FTlRSWShkaXNwYXRjaF90b19pYTMyX2hhbmRsZXIpCi0JU0FWRV9NSU4KLQk7OwotCU1PVl9GUk9NX0lTUihyMTQpCi0JU1NNX1BTUl9JQ19BTkRfREVGQVVMVF9CSVRTX0FORF9TUkxaX0kocjMsIHIyNCkKLQkJCQkvLyBndWFyYW50ZWUgdGhhdCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgotCTs7Ci0JU1NNX1BTUl9JKHAxNSwgcDE1LCByMykKLQlhZGRzIHIzPTgscjIJCS8vIEJhc2UgcG9pbnRlciBmb3IgU0FWRV9SRVNUCi0JOzsKLQlTQVZFX1JFU1QKLQk7OwotCW1vdiByMTU9MHg4MAotCXNociByMTQ9cjE0LDE2CQkvLyBHZXQgaW50ZXJydXB0IG51bWJlcgotCTs7Ci0JY21wLm5lIHA2LHAwPXIxNCxyMTUKLShwNikJYnIuY2FsbC5kcG50Lm1hbnkgYjY9bm9uX2lhMzJfc3lzY2FsbAotCi0JYWRkcyByMTQ9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCArIDE2LHNwCS8vIDE2IGJ5dGUgaG9sZSBwZXIgU1cgY29udmVudGlvbnMKLQlhZGRzIHIxNT1JQTY0X1BUX1JFR1NfUjFfT0ZGU0VUICsgMTYsc3AKLQk7OwotCWNtcC5lcSBwU3lzLHBOb25TeXM9cjAscjAgLy8gc2V0IHBTeXM9MSwgcE5vblN5cz0wCi0JbGQ4IHI4PVtyMTRdCQkvLyBnZXQgcjgKLQk7OwotCXN0OCBbcjE1XT1yOAkJLy8gc2F2ZSBvcmlnaW5hbCBFQVggaW4gcjEgKElBMzIgcHJvY3MgZG9uJ3QgdXNlIHRoZSBHUCkKLQk7OwotCWFsbG9jIHIxNT1hci5wZnMsMCwwLDYsMAkvLyBtdXN0IGZpcnN0IGluIGFuIGluc24gZ3JvdXAKLQk7OwotCWxkNCByOD1bcjE0XSw4CQkvLyByOCA9PSBlYXggKHN5c2NhbGwgbnVtYmVyKQotCW1vdiByMTU9SUEzMl9OUl9zeXNjYWxscwotCTs7Ci0JY21wLmx0dS51bmMgcDYscDc9cjgscjE1Ci0JbGQ0IG91dDE9W3IxNF0sOAkvLyByOSA9PSBlY3gKLQk7OwotCWxkNCBvdXQyPVtyMTRdLDgJLy8gcjEwID09IGVkeAotCTs7Ci0JbGQ0IG91dDA9W3IxNF0JCS8vIHIxMSA9PSBlYngKLQlhZGRzIHIxND0oSUE2NF9QVF9SRUdTX1IxM19PRkZTRVQpICsgMTYsc3AKLQk7OwotCWxkNCBvdXQ1PVtyMTRdLFBUKFIxNCktUFQoUjEzKQkvLyByMTMgPT0gZWJwCi0JOzsKLQlsZDQgb3V0Mz1bcjE0XSxQVChSMTUpLVBUKFIxNCkJLy8gcjE0ID09IGVzaQotCWFkZHMgcjI9VElfRkxBR1MrSUE2NF9UQVNLX1NJWkUscjEzCi0JOzsKLQlsZDQgb3V0ND1bcjE0XQkJLy8gcjE1ID09IGVkaQotCW1vdmwgcjE2PWlhMzJfc3lzY2FsbF90YWJsZQotCTs7Ci0ocDYpCXNobGFkZCByMTY9cjgsMyxyMTYJLy8gZm9yY2Ugbmlfc3lzY2FsbCBpZiBub3QgdmFsaWQgc3lzY2FsbCBudW1iZXIKLQlsZDQgcjI9W3IyXQkJLy8gcjIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzCi0JOzsKLQlsZDggcjE2PVtyMTZdCi0JYW5kIHIyPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIyCS8vIG1hc2sgdHJhY2Ugb3IgYXVkaXQKLQk7OwotCW1vdiBiNj1yMTYKLQltb3ZsIHIxNT1pYTMyX3JldF9mcm9tX3N5c2NhbGwKLQljbXAuZXEgcDgscDA9cjIscjAKLQk7OwotCW1vdiBycD1yMTUKLShwOCkJYnIuY2FsbC5zcHRrLm1hbnkgYjY9YjYKLQlici5jb25kLnNwdGsgaWEzMl90cmFjZV9zeXNjYWxsCi0KLW5vbl9pYTMyX3N5c2NhbGw6Ci0JYWxsb2MgcjE1PWFyLnBmcywwLDAsMiwwCi0JbW92IG91dDA9cjE0CQkJCS8vIGludGVycnVwdCAjCi0JYWRkIG91dDE9MTYsc3AJCQkJLy8gcG9pbnRlciB0byBwdF9yZWdzCi0JOzsJCQkvLyBhdm9pZCBXQVcgb24gQ0ZNCi0JYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWEzMl9iYWRfaW50ZXJydXB0Ci0ucmV0MToJbW92bCByMTU9aWE2NF9sZWF2ZV9rZXJuZWwKLQk7OwotCW1vdiBycD1yMTUKLQlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoZGlzcGF0Y2hfdG9faWEzMl9oYW5kbGVyKQotCi0jZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA5YWRhYzQ0Li43MDI2YjI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwpAQCAtODcwLDcgKzg3MCw3IEBACiAJCXJldHVybiAxOwogCiBzc19wcm9iZToKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uaW5zdF9mbGFnID09IElOU1RfRkxBR19CT09TVEFCTEUgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCWlhNjRfcHNyKHJlZ3MpLT5yaSA9IHAtPmFpbnNuLnNsb3Q7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDZiY2JlMjEuLmI4MWU0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yNzEzLDcgKzI3MTMsNyBAQAogCQkJZ290byBidWZmZXJfZXJyb3I7CiAJfQogCi0JRFBSSU5UKCgiY3R4PSVwIGZsYWdzPTB4JXggc3lzdGVtPSVkIG5vdGlmeV9ibG9jaz0lZCBleGNsX2lkbGU9JWQgbm9fbXNnPSVkIGN0eF9mZD0lZCBcbiIsCisJRFBSSU5UKCgiY3R4PSVwIGZsYWdzPTB4JXggc3lzdGVtPSVkIG5vdGlmeV9ibG9jaz0lZCBleGNsX2lkbGU9JWQgbm9fbXNnPSVkIGN0eF9mZD0lZFxuIiwKIAkJY3R4LAogCQljdHhfZmxhZ3MsCiAJCWN0eC0+Y3R4X2ZsX3N5c3RlbSwKQEAgLTM2NzcsNyArMzY3Nyw3IEBACiAJICogInNlbGYtbW9uaXRvcmluZyIuCiAJICovCiAJaWYgKENUWF9PVkZMX05PQkxPQ0soY3R4KSA9PSAwICYmIHN0YXRlID09IFBGTV9DVFhfTUFTS0VEKSB7Ci0JCURQUklOVCgoInVuYmxvY2tpbmcgWyVkXSBcbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CisJCURQUklOVCgoInVuYmxvY2tpbmcgWyVkXVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJY29tcGxldGUoJmN0eC0+Y3R4X3Jlc3RhcnRfZG9uZSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5UKCgiWyVkXSBhcm1lZCBleGl0IHRyYXBcbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDliY2VjOTkuLmQ5Mjc2NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KLSNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtNjAsNiArNTksMTAgQEAKIEVYUE9SVF9TWU1CT0woaWRsZV9oYWx0KTsKIHVuc2lnbmVkIGxvbmcgaWRsZV9ub213YWl0OwogRVhQT1JUX1NZTUJPTChpZGxlX25vbXdhaXQpOwordm9pZCAoKnBtX2lkbGUpICh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1faWRsZSk7Cit2b2lkICgqcG1fcG93ZXJfb2ZmKSAodm9pZCk7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CiAKIHZvaWQKIGlhNjRfZG9fc2hvd19zdGFjayAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCkBAIC0zNTgsMTEgKzM2MSw2IEBACiAJaWYgKGluZm8gJiBQRk1fQ1BVSU5GT19TWVNUX1dJREUpCiAJCXBmbV9zeXN0X3dpZGVfdXBkYXRlX3Rhc2sodGFzaywgaW5mbywgMCk7CiAjZW5kaWYKLQotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyh0YXNrKSkpCi0JCWlhMzJfc2F2ZV9zdGF0ZSh0YXNrKTsKLSNlbmRpZgogfQogCiB2b2lkCkBAIC0zODMsMTEgKzM4MSw2IEBACiAJaWYgKGluZm8gJiBQRk1fQ1BVSU5GT19TWVNUX1dJREUpIAogCQlwZm1fc3lzdF93aWRlX3VwZGF0ZV90YXNrKHRhc2ssIGluZm8sIDEpOwogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3ModGFzaykpKQotCQlpYTMyX2xvYWRfc3RhdGUodGFzayk7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTQyNiw3ICs0MTksNyBAQAogCSAgICAgdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrX2Jhc2UsIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFja19zaXplLAogCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlleHRlcm4gY2hhciBpYTY0X3JldF9mcm9tX2Nsb25lLCBpYTMyX3JldF9mcm9tX2Nsb25lOworCWV4dGVybiBjaGFyIGlhNjRfcmV0X2Zyb21fY2xvbmU7CiAJc3RydWN0IHN3aXRjaF9zdGFjayAqY2hpbGRfc3RhY2ssICpzdGFjazsKIAl1bnNpZ25lZCBsb25nIHJicywgY2hpbGRfcmJzLCByYnNfc2l6ZTsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRfcHRyZWdzOwpAQCAtNDU3LDcgKzQ1MCw3IEBACiAJbWVtY3B5KCh2b2lkICopIGNoaWxkX3JicywgKHZvaWQgKikgcmJzLCByYnNfc2l6ZSk7CiAKIAlpZiAobGlrZWx5KHVzZXJfbW9kZShjaGlsZF9wdHJlZ3MpKSkgewotCQlpZiAoKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKSAmJiAhSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKQorCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCiAJCQljaGlsZF9wdHJlZ3MtPnIxMyA9IHJlZ3MtPnIxNjsJLyogc2VlIHN5c19jbG9uZTIoKSBpbiBlbnRyeS5TICovCiAJCWlmICh1c2VyX3N0YWNrX2Jhc2UpIHsKIAkJCWNoaWxkX3B0cmVncy0+cjEyID0gdXNlcl9zdGFja19iYXNlICsgdXNlcl9zdGFja19zaXplIC0gMTY7CkBAIC00NzcsMTAgKzQ3MCw3IEBACiAJCWNoaWxkX3B0cmVncy0+cjEzID0gKHVuc2lnbmVkIGxvbmcpIHA7CQkvKiBzZXQgYGN1cnJlbnQnIHBvaW50ZXIgKi8KIAl9CiAJY2hpbGRfc3RhY2stPmFyX2JzcHN0b3JlID0gY2hpbGRfcmJzICsgcmJzX3NpemU7Ci0JaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkKLQkJY2hpbGRfc3RhY2stPmIwID0gKHVuc2lnbmVkIGxvbmcpICZpYTMyX3JldF9mcm9tX2Nsb25lOwotCWVsc2UKLQkJY2hpbGRfc3RhY2stPmIwID0gKHVuc2lnbmVkIGxvbmcpICZpYTY0X3JldF9mcm9tX2Nsb25lOworCWNoaWxkX3N0YWNrLT5iMCA9ICh1bnNpZ25lZCBsb25nKSAmaWE2NF9yZXRfZnJvbV9jbG9uZTsKIAogCS8qIGNvcHkgcGFydHMgb2YgdGhyZWFkX3N0cnVjdDogKi8KIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkX3N0YWNrIC0gMTY7CkBAIC01MTUsMjIgKzUwNSw2IEBACiAJcC0+dGhyZWFkLmZsYWdzID0gKChjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiB+VEhSRUFEX0ZMQUdTX1RPX0NMRUFSKQogCQkJICAgfCBUSFJFQURfRkxBR1NfVE9fU0VUKTsKIAlpYTY0X2Ryb3BfZnB1KHApOwkvKiBkb24ndCBwaWNrIHVwIHN0YWxlIHN0YXRlIGZyb20gYSBDUFUncyBmcGggKi8KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JLyoKLQkgKiBJZiB3ZSdyZSBjbG9uaW5nIGFuIElBMzIgdGFzayB0aGVuIHNhdmUgdGhlIElBMzIgZXh0cmEKLQkgKiBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IHRhc2sgdG8gdGhlIG5ldyB0YXNrCi0JICovCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKSB7Ci0JCWlhMzJfc2F2ZV9zdGF0ZShwKTsKLQkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQotCQkJcmV0dmFsID0gaWEzMl9jbG9uZV90bHMocCwgY2hpbGRfcHRyZWdzKTsKLQotCQkvKiBDb3B5IHBhcnRpYWxseSBtYXBwZWQgcGFnZSBsaXN0ICovCi0JCWlmICghcmV0dmFsKQotCQkJcmV0dmFsID0gaWEzMl9jb3B5X2lhNjRfcGFydGlhbF9wYWdlX2xpc3QocCwKLQkJCQkJCQkJY2xvbmVfZmxhZ3MpOwotCX0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KIAlpZiAoY3VycmVudC0+dGhyZWFkLnBmbV9jb250ZXh0KQpAQCAtNzA0LDE1ICs2NzgsNiBAQAogaW50CiBrZXJuZWxfdGhyZWFkX2hlbHBlciAoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKSB7Ci0JCS8qIEEga2VybmVsIHRocmVhZCBpcyBhbHdheXMgYSA2NC1iaXQgcHJvY2Vzcy4gKi8KLQkJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlICA9IERFRkFVTFRfTUFQX0JBU0U7Ci0JCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRTsKLQkJaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBjdXJyZW50LT50aHJlYWQub2xkX2lvYik7Ci0JCWlhNjRfc2V0X2tyKElBNjRfS1JfVFNTRCwgY3VycmVudC0+dGhyZWFkLm9sZF9rMSk7Ci0JfQotI2VuZGlmCiAJcmV0dXJuICgqZm4pKGFyZyk7CiB9CiAKQEAgLTcyNSwxNCArNjkwLDYgQEAKIAkvKiBkcm9wIGZsb2F0aW5nLXBvaW50IGFuZCBkZWJ1Zy1yZWdpc3RlciBzdGF0ZSBpZiBpdCBleGlzdHM6ICovCiAJY3VycmVudC0+dGhyZWFkLmZsYWdzICY9IH4oSUE2NF9USFJFQURfRlBIX1ZBTElEIHwgSUE2NF9USFJFQURfREJHX1ZBTElEKTsKIAlpYTY0X2Ryb3BfZnB1KGN1cnJlbnQpOwotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyhjdXJyZW50KSkpIHsKLQkJaWEzMl9kcm9wX2lhNjRfcGFydGlhbF9wYWdlX2xpc3QoY3VycmVudCk7Ci0JCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBJQTMyX1BBR0VfT0ZGU0VUOwotCQlzZXRfZnMoVVNFUl9EUyk7Ci0JCW1lbXNldChjdXJyZW50LT50aHJlYWQudGxzX2FycmF5LCAwLCBzaXplb2YoY3VycmVudC0+dGhyZWFkLnRsc19hcnJheSkpOwotCX0KLSNlbmRpZgogfQogCiAvKgpAQCAtNzUzLDggKzcxMCw2IEBACiAJaWYgKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0RCR19WQUxJRCkKIAkJcGZtX3JlbGVhc2VfZGVidWdfcmVnaXN0ZXJzKGN1cnJlbnQpOwogI2VuZGlmCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKQotCQlpYTMyX2Ryb3BfaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdChjdXJyZW50KTsKIH0KIAogdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOWRhYTg3Zi4uYjYxYWZiYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCkBAIC0xMjUwLDEzICsxMjUwLDggQEAKIAkJbG9uZyBzeXNjYWxsOwogCQlpbnQgYXJjaDsKIAotCQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZyZWdzKSkgewotCQkJc3lzY2FsbCA9IHJlZ3MucjE7Ci0JCQlhcmNoID0gQVVESVRfQVJDSF9JMzg2OwotCQl9IGVsc2UgewotCQkJc3lzY2FsbCA9IHJlZ3MucjE1OwotCQkJYXJjaCA9IEFVRElUX0FSQ0hfSUE2NDsKLQkJfQorCQlzeXNjYWxsID0gcmVncy5yMTU7CisJCWFyY2ggPSBBVURJVF9BUkNIX0lBNjQ7CiAKIAkJYXVkaXRfc3lzY2FsbF9lbnRyeShhcmNoLCBzeXNjYWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKIAl9CkBAIC0yMTcyLDExICsyMTY3LDYgQEAKIAogY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnRhc2tfdXNlcl9yZWdzZXRfdmlldyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JZXh0ZXJuIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfaWEzMl92aWV3OwotCWlmIChJU19JQTMyX1BST0NFU1ModGFza19wdF9yZWdzKHRzaykpKQotCQlyZXR1cm4gJnVzZXJfaWEzMl92aWV3OwotI2VuZGlmCiAJcmV0dXJuICZ1c2VyX2lhNjRfdmlldzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGExZWE4NzkuLjQxYWU2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KIAotI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWNhLmg+CiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KQEAgLTEwMTYsMTAgKzEwMTUsNiBAQAogCWlhNjRfbW11X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAJaWE2NF9tY2FfY3B1X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWEzMl9jcHVfaW5pdCgpOwotI2VuZGlmCi0KIAkvKiBDbGVhciBJVEMgdG8gZWxpbWluYXRlIHNjaGVkX2Nsb2NrKCkgb3ZlcmZsb3dzIGluIGh1bWFuIHRpbWUuICAqLwogCWlhNjRfc2V0X2l0YygwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTE4MjFjYS4uN2JkYWZjOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3JzZS5oPgpAQCAtNDI1LDE0ICs0MjQsOCBAQAogaGFuZGxlX3NpZ25hbCAodW5zaWduZWQgbG9uZyBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwKIAkgICAgICAgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjcikKIHsKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZzY3ItPnB0KSkgewotCQkvKiBzZW5kIHNpZ25hbCB0byBJQS0zMiBwcm9jZXNzICovCi0JCWlmICghaWEzMl9zZXR1cF9mcmFtZTEoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCAmc2NyLT5wdCkpCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJLyogc2VuZCBzaWduYWwgdG8gSUEtNjQgcHJvY2VzcyAqLwotCQlpZiAoIXNldHVwX2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgc2NyKSkKLQkJCXJldHVybiAwOworCWlmICghc2V0dXBfZnJhbWUoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCBzY3IpKQorCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsICZrYS0+c2Euc2FfbWFzayk7CkBAIC00NjIsNyArNDU1LDYgQEAKIAlzaWdpbmZvX3QgaW5mbzsKIAlsb25nIHJlc3RhcnQgPSBpbl9zeXNjYWxsOwogCWxvbmcgZXJybm8gPSBzY3ItPnB0LnI4OwotIwlkZWZpbmUgRVJSX0NPREUoYykJKElTX0lBMzJfUFJPQ0VTUygmc2NyLT5wdCkgPyAtKGMpIDogKGMpKQogCiAJLyoKIAkgKiBJbiB0aGUgaWE2NF9sZWF2ZV9rZXJuZWwgY29kZSBwYXRoLCB3ZSB3YW50IHRoZSBjb21tb24gY2FzZSB0byBnbyBmYXN0LCB3aGljaApAQCAtNDkwLDE0ICs0ODIsNyBAQAogCQkgKiBpbmZlcmlvciBjYWxsKSwgdGh1cyBpdCdzIGltcG9ydGFudCB0byBjaGVjayBmb3IgcmVzdGFydGluZyBfYWZ0ZXJfCiAJCSAqIGdldF9zaWduYWxfdG9fZGVsaXZlcigpLgogCQkgKi8KLQkJaWYgKElTX0lBMzJfUFJPQ0VTUygmc2NyLT5wdCkpIHsKLQkJCWlmIChpbl9zeXNjYWxsKSB7Ci0JCQkJaWYgKGVycm5vID49IDApCi0JCQkJCXJlc3RhcnQgPSAwOwotCQkJCWVsc2UKLQkJCQkJZXJybm8gPSAtZXJybm87Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoKGxvbmcpIHNjci0+cHQucjEwICE9IC0xKQorCQlpZiAoKGxvbmcpIHNjci0+cHQucjEwICE9IC0xKQogCQkJLyoKIAkJCSAqIEEgc3lzdGVtIGNhbGxzIGhhcyB0byBiZSByZXN0YXJ0ZWQgb25seSBpZiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzCiAJCQkgKiBFUkVTVEFSVE5PSEFORCwgRVJFU1RBUlRTWVMsIG9yIEVSRVNUQVJUTk9JTlRSIGlzIHJldHVybmVkLiAgSWYgcjEwCkBAIC01MTMsMjIgKzQ5OCwxOCBAQAogCQkJc3dpdGNoIChlcnJubykgewogCQkJICAgICAgY2FzZSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CiAJCQkgICAgICBjYXNlIEVSRVNUQVJUTk9IQU5EOgotCQkJCXNjci0+cHQucjggPSBFUlJfQ09ERShFSU5UUik7CisJCQkJc2NyLT5wdC5yOCA9IEVJTlRSOwogCQkJCS8qIG5vdGU6IHNjci0+cHQucjEwIGlzIGFscmVhZHkgLTEgKi8KIAkJCQlicmVhazsKIAogCQkJICAgICAgY2FzZSBFUkVTVEFSVFNZUzoKIAkJCQlpZiAoKGthLnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkgPT0gMCkgewotCQkJCQlzY3ItPnB0LnI4ID0gRVJSX0NPREUoRUlOVFIpOworCQkJCQlzY3ItPnB0LnI4ID0gRUlOVFI7CiAJCQkJCS8qIG5vdGU6IHNjci0+cHQucjEwIGlzIGFscmVhZHkgLTEgKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJICAgICAgY2FzZSBFUkVTVEFSVE5PSU5UUjoKLQkJCQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZzY3ItPnB0KSkgewotCQkJCQlzY3ItPnB0LnI4ID0gc2NyLT5wdC5yMTsKLQkJCQkJc2NyLT5wdC5jcl9paXAgLT0gMjsKLQkJCQl9IGVsc2UKLQkJCQkJaWE2NF9kZWNyZW1lbnRfaXAoJnNjci0+cHQpOworCQkJCWlhNjRfZGVjcmVtZW50X2lwKCZzY3ItPnB0KTsKIAkJCQlyZXN0YXJ0ID0gMDsgLyogZG9uJ3QgcmVzdGFydCB0d2ljZSBpZiBoYW5kbGVfc2lnbmFsKCkgZmFpbHMuLi4gKi8KIAkJCX0KIAkJfQpAQCAtNTU1LDIxICs1MzYsMTQgQEAKIAkJaWYgKGVycm5vID09IEVSRVNUQVJUTk9IQU5EIHx8IGVycm5vID09IEVSRVNUQVJUU1lTIHx8IGVycm5vID09IEVSRVNUQVJUTk9JTlRSCiAJCSAgICB8fCBlcnJubyA9PSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0spCiAJCXsKLQkJCWlmIChJU19JQTMyX1BST0NFU1MoJnNjci0+cHQpKSB7Ci0JCQkJc2NyLT5wdC5yOCA9IHNjci0+cHQucjE7Ci0JCQkJc2NyLT5wdC5jcl9paXAgLT0gMjsKLQkJCQlpZiAoZXJybm8gPT0gRVJFU1RBUlRfUkVTVEFSVEJMT0NLKQotCQkJCQlzY3ItPnB0LnI4ID0gMDsJLyogeDg2IHZlcnNpb24gb2YgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBOb3RlOiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgaW4gcjE1IHdoaWNoIGlzIHNhdmVkIGluCi0JCQkJICogcHRfcmVncyBzbyBhbGwgd2UgbmVlZCB0byBkbyBoZXJlIGlzIGFkanVzdCBpcCBzbyB0aGF0Ci0JCQkJICogdGhlICJicmVhayIgaW5zdHJ1Y3Rpb24gZ2V0cyByZS1leGVjdXRlZC4KLQkJCQkgKi8KLQkJCQlpYTY0X2RlY3JlbWVudF9pcCgmc2NyLT5wdCk7Ci0JCQkJaWYgKGVycm5vID09IEVSRVNUQVJUX1JFU1RBUlRCTE9DSykKLQkJCQkJc2NyLT5wdC5yMTUgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKLQkJCX0KKwkJCS8qCisJCQkgKiBOb3RlOiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgaW4gcjE1IHdoaWNoIGlzIHNhdmVkIGluCisJCQkgKiBwdF9yZWdzIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgYWRqdXN0IGlwIHNvIHRoYXQKKwkJCSAqIHRoZSAiYnJlYWsiIGluc3RydWN0aW9uIGdldHMgcmUtZXhlY3V0ZWQuCisJCQkgKi8KKwkJCWlhNjRfZGVjcmVtZW50X2lwKCZzY3ItPnB0KTsKKwkJCWlmIChlcnJubyA9PSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0spCisJCQkJc2NyLT5wdC5yMTUgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCBkZTEwMGFhLi5lNTIzMGIyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KQEAgLTQ0MywxMCArNDQyLDYgQEAKIAkJY2FsaWJyYXRlX2RlbGF5KCk7CiAJbG9jYWxfY3B1X2RhdGEtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpYTMyX2dkdF9pbml0KCk7Ci0jZW5kaWYKLQogCS8qCiAJICogQWxsb3cgdGhlIG1hc3RlciB0byBjb250aW51ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKaW5kZXggYTM1YzY2MS4uNDdhMTkyNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogc3RhdGljIHZvaWQKLXBhcmF2aXJ0X2Nsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKQorcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJaWYgKHB2X3RpbWVfb3BzLmNsb2Nrc291cmNlX3Jlc3VtZSkKIAkJcHZfdGltZV9vcHMuY2xvY2tzb3VyY2VfcmVzdW1lKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZjBjZGE3Ni4uZmQ4MGU3MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2Zwc3dhLmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNjI2LDEwICs2MjUsNiBAQAogCQlicmVhazsKIAogCSAgICAgIGNhc2UgNDU6Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCQlpZiAoaWEzMl9leGNlcHRpb24oJnJlZ3MsIGlzcikgPT0gMCkKLQkJCXJldHVybjsKLSNlbmRpZgogCQlwcmludGsoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgSUEtMzIgZXhjZXB0aW9uIChUcmFwIDQ1KVxuIik7CiAJCXByaW50ayhLRVJOX0VSUiAiICBpaXAgLSAweCVseCwgaWZhIC0gMHglbHgsIGlzciAtIDB4JWx4XG4iLAogCQkgICAgICAgaWlwLCBpZmEsIGlzcik7CkBAIC02MzcsMTAgKzYzMiw2IEBACiAJCWJyZWFrOwogCiAJICAgICAgY2FzZSA0NjoKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JCWlmIChpYTMyX2ludGVyY2VwdCgmcmVncywgaXNyKSA9PSAwKQotCQkJcmV0dXJuOwotI2VuZGlmCiAJCXByaW50ayhLRVJOX0VSUiAiVW5leHBlY3RlZCBJQS0zMiBpbnRlcmNlcHQgdHJhcCAoVHJhcCA0NilcbiIpOwogCQlwcmludGsoS0VSTl9FUlIgIiAgaWlwIC0gMHglbHgsIGlmYSAtIDB4JWx4LCBpc3IgLSAweCVseCwgaWltIC0gMHglbHhcbiIsCiAJCSAgICAgICBpaXAsIGlmYSwgaXNyLCBpaW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCmluZGV4IGVmM2U3YmUuLjAxYzc1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZworKysgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBJdGFuaXVtIDIgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBWVAogCSAgZXh0ZW5zaW9ucy4KIAorc291cmNlIGRyaXZlcnMvdmhvc3QvS2NvbmZpZwogc291cmNlIGRyaXZlcnMvdmlydGlvL0tjb25maWcKIAogZW5kaWYgIyBWSVJUVUFMSVpBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IDE5YzRiMjEuLjhkNTg2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQljcHUgPSAwOwogCQlub2RlID0gbm9kZV9jcHVpZFtjcHVdLm5pZDsKIAkJY3B1MF9jcHVfaW5mbyA9IChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopKF9fcGh5c19wZXJfY3B1X3N0YXJ0ICsKLQkJCSgoY2hhciAqKSZwZXJfY3B1X19pYTY0X2NwdV9pbmZvIC0gX19wZXJfY3B1X3N0YXJ0KSk7CisJCQkoKGNoYXIgKikmaWE2NF9jcHVfaW5mbyAtIF9fcGVyX2NwdV9zdGFydCkpOwogCQljcHUwX2NwdV9pbmZvLT5ub2RlX2RhdGEgPSBtZW1fZGF0YVtub2RlXS5ub2RlX2RhdGE7CiAJfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDdjMGQ0ODEuLmNhMzMzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CkBAIC02NjgsMTAgKzY2Nyw2IEBACiAJCQlmc3lzY2FsbF90YWJsZVtpXSA9IHN5c19jYWxsX3RhYmxlW2ldIHwgMTsKIAl9CiAJc2V0dXBfZ2F0ZSgpOwotCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlhMzJfbWVtX2luaXQoKTsKLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCBkZjYzOWRiNy4uNjRhZmY1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC0zMjAsOSArMzIwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogcGNpYmlvc19zZXR1cF9yb290X3dpbmRvd3Moc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9jb250cm9sbGVyICpjdHJsKQogewotCWludCBpLCBqOworCWludCBpOwogCi0JaiA9IDA7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGJ1cyk7CiAJZm9yIChpID0gMDsgaSA8IGN0cmwtPndpbmRvd3M7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZjdHJsLT53aW5kb3dbaV0ucmVzb3VyY2U7CiAJCS8qIEhQJ3MgZmlybXdhcmUgaGFzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIFdpbmRvd3MgYnVnLgpAQCAtMzMwLDEzICszMzAsNyBAQAogCQlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJICAgIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgPCAxNikpCiAJCQljb250aW51ZTsKLQkJaWYgKGogPj0gUENJX0JVU19OVU1fUkVTT1VSQ0VTKSB7Ci0JCQlkZXZfd2FybigmYnVzLT5kZXYsCi0JCQkJICJpZ25vcmluZyBob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChubyBzcGFjZSlcbiIsCi0JCQkJIHJlcyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlidXMtPnJlc291cmNlW2orK10gPSByZXM7CisJCXBjaV9idXNfYWRkX3Jlc291cmNlKGJ1cywgcmVzLCAwKTsKIAl9CiB9CiAKQEAgLTQ1MiwxMyArNDQ2LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQogewogCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKIAogCWlmICghZGV2LT5idXMpCiAJCXJldHVybiAwOwotCWZvciAoaT0wOyBpPFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqYnVzciA9IGRldi0+YnVzLT5yZXNvdXJjZVtpXTsKIAorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoZGV2LT5idXMsIGJ1c3IsIGkpIHsKIAkJaWYgKCFidXNyIHx8ICgoYnVzci0+ZmxhZ3MgXiBkZXZyLT5mbGFncykgJiB0eXBlX21hc2spKQogCQkJY29udGludWU7CiAJCWlmICgoZGV2ci0+c3RhcnQpICYmIChkZXZyLT5zdGFydCA+PSBidXNyLT5zdGFydCkgJiYKQEAgLTU0NywxMCArNTQwLDExIEBACiAJCWFjcGlfcGNpX2lycV9kaXNhYmxlKGRldik7CiB9CiAKLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2UgKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlICh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJldHVybiByZXMtPnN0YXJ0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3V2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3V2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDdhNWFlNjMuLmYxNDkwNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC91di9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvdXYva2VybmVsL3NldHVwLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX3RvcCA9CiAJCQlsb3dtZW1fcmVkaXJfYmFzZSArIGxvd21lbV9yZWRpcl9zaXplOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bV92YWwgPSBtX3ZhbDsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbV92YWw7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG5fdmFsOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGVfbWFzayA9ICgxIDw8IG5fdmFsKSAtMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDEgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV91cHBlciA9IGdub2RlX3VwcGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKaW5kZXggZTMyZGFlNC4uMDg4NDdhYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUworKysgYi9hcmNoL2lhNjQveGVuL2h5cGVyY2FsbC5TCkBAIC01OCwxMSArNTgsNiBAQAogX19IQ0FMTDIoeGVuX3NldF9yciwgSFlQRVJQUklWT1BfU0VUX1JSKQogX19IQ0FMTDIoeGVuX3NldF9rciwgSFlQRVJQUklWT1BfU0VUX0tSKQogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotX19IQ0FMTDAoeGVuX2dldF9lZmxhZywgSFlQRVJQUklWT1BfR0VUX0VGTEFHKQotX19IQ0FMTDEoeGVuX3NldF9lZmxhZywgSFlQRVJQUklWT1BfU0VUX0VGTEFHKQkvLyByZWZlciBTRE0gdm9sMSAzLjEuOAotI2VuZGlmIC8qIENPTkZJR19JQTMyX1NVUFBPUlQgKi8KLQogR0xPQkFMX0VOVFJZKHhlbl9zZXRfcnIwX3RvX3JyNCkKIAltb3Ygcjg9cjMyCiAJbW92IHI5PXIzMwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwppbmRleCA1ZTIyNzBhLi44YWRjNmExIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYworKysgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwpAQCAtMzAxLDExICszMDEsNiBAQAogCWNhc2UgX0lBNjRfUkVHX0FSX0tSMCAuLi4gX0lBNjRfUkVHX0FSX0tSNzoKIAkJeGVuX3NldF9rcihyZWdudW0gLSBfSUE2NF9SRUdfQVJfS1IwLCB2YWwpOwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JY2FzZSBfSUE2NF9SRUdfQVJfRUZMQUc6Ci0JCXhlbl9zZXRfZWZsYWcodmFsKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAljYXNlIF9JQTY0X1JFR19BUl9JVEM6CiAJCXhlbl9zZXRfaXRjKHZhbCk7CiAJCWJyZWFrOwpAQCAtMzMyLDExICszMjcsNiBAQAogCWNhc2UgX0lBNjRfUkVHX1BTUjoKIAkJcmVzID0geGVuX2dldF9wc3IoKTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWNhc2UgX0lBNjRfUkVHX0FSX0VGTEFHOgotCQlyZXMgPSB4ZW5fZ2V0X2VmbGFnKCk7Ci0JCWJyZWFrOwotI2VuZGlmCiAJY2FzZSBfSUE2NF9SRUdfQVJfSVRDOgogCQlyZXMgPSB4ZW5fZ2V0X2l0YygpOwogCQlicmVhazsKQEAgLTcxMCw5ICs3MDAsNiBAQAogCiBfX0RFRklORV9GVU5DKGdldHJlZywKIAkgICAgICBfX0RFRklORV9HRVRfUkVHKFBTUiwgUFNSKQotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0VGTEFHLCBFRkxBRykKLSNlbmRpZgogCiAJICAgICAgLyogZ2V0X2l0YyAqLwogCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9JVEMpICJcbiIKQEAgLTc4OSw5ICs3NzYsNiBAQAogCSAgICAgICI7O1xuIgogCSAgICAgICIocDYpIGJyLmNvbmQuc3BudCB4ZW5fc2V0X2l0Y1xuIgogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfRUZMQUcsIFNFVF9FRkxBRykKLSNlbmRpZgogCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQ1JfVFBSLCBTRVRfVFBSKQogCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQ1JfRU9JLCBFT0kpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKaW5kZXggMjIyNTZkMS4uNzM0YmNhOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTMzOCwyOSArMzM4LDQgQEAKICAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgogICovCiAKLS8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAotICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gbG9jYWwgd2F5LiAqLwotI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAotCSh7IGxvY2FsX3QgcmVzX187CQlcCi0JICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAotCSAgIHJlc19fID0gKGwpOwkJCVwKLQkgICBwcmVlbXB0X2VuYWJsZSgpOwkJXAotCSAgIHJlc19fOyB9KQotI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKQkJXAotCSh7IHByZWVtcHRfZGlzYWJsZSgpOwkJXAotCSAgIGw7CQkJCVwKLQkgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQkJXAotCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcihsKSwgKGkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0KLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMobCkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCWNwdV9sb2NhbF9kZWMobCkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQotCiAjZW5kaWYgLyogX19NMzJSX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggMGVmOTUzMC4uOTI2MTRiMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTkyLDYgKzkyLDYgQEAKIAkpOwogfQogCi1leHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKIAogI2VuZGlmCS8qIF9BU01fTTMyUl9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCmluZGV4IDg4NDY5MTcuLjg4OGFhYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCkBAIC05NSw3ICs5NSw3IEBACiAgKiB1cGRhdGVfbW11X2NhY2hlKCkKICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQlwdGVfdCBwdGUpCisJcHRlX3QgKnB0ZXApCiB7CiAJQlVHKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCmluZGV4IDcyNzRiNDcuLjI4ZWUzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogCQlhZGRyID0gKGFkZHJlc3MgJiBQQUdFX01BU0spOwogCQlzZXRfdGhyZWFkX2ZhdWx0X2NvZGUoZXJyb3JfY29kZSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUoTlVMTCwgYWRkciwgKnB0ZV9rKTsKKwkJdXBkYXRlX21tdV9jYWNoZShOVUxMLCBhZGRyLCBwdGVfayk7CiAJCXNldF90aHJlYWRfZmF1bHRfY29kZSgwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM0OSw3ICszNDksNyBAQAogI2RlZmluZSBJVExCX0VORAkodW5zaWduZWQgbG9uZyAqKShJVExCX0JBU0UgKyAoTlJfVExCX0VOVFJJRVMgKiA4KSkKICNkZWZpbmUgRFRMQl9FTkQJKHVuc2lnbmVkIGxvbmcgKikoRFRMQl9CQVNFICsgKE5SX1RMQl9FTlRSSUVTICogOCkpCiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JcHRlX3QgcHRlKQorCXB0ZV90ICpwdGVwKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmVudHJ5MSwgKmVudHJ5MjsKIAl1bnNpZ25lZCBsb25nIHB0ZV9kYXRhLCBmbGFnczsKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAJdmFkZHIgPSAodmFkZHIgJiBQQUdFX01BU0spIHwgZ2V0X2FzaWQoKTsKIAotCXB0ZV9kYXRhID0gcHRlX3ZhbChwdGUpOworCXB0ZV9kYXRhID0gcHRlX3ZhbCgqcHRlcCk7CiAKICNpZmRlZiBDT05GSUdfQ0hJUF9PUFNQCiAJZW50cnkxID0gKHVuc2lnbmVkIGxvbmcgKilJVExCX0JBU0U7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IGVjZGMxOWEuLmI1ZGEyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC01MzYsMTAgKzUzNiw2IEBACiAJICBTYXkgWSB0byBlbmFibGUgZG9pbmcgSVAgb3ZlciB0aGUgcGFyYWxsZWwgcG9ydCBvbiB5b3VyIEdWUAogCSAgSU8tRXh0ZW5kZXIgY2FyZCwgTiBvdGhlcndpc2UuCiAKLWNvbmZpZyBNQUNfU0NDCi0JdHJpc3RhdGUgIk1hY2ludG9zaCBzZXJpYWwgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQwotCiBjb25maWcgTUFDX0hJRAogCWJvb2wKIAlkZXBlbmRzIG9uIElOUFVUX0FEQkhJRApAQCAtNTk1LDcgKzU5MSw3IEBACiAKIGNvbmZpZyBTRVJJQUxfQ09OU09MRQogCWJvb2wgIlN1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGUiCi0JZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgTUFDIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBNQUNfU0NDPXkgfHwgQU1JR0FfQlVJTFRJTl9TRVJJQUw9eSB8fCBHVlBJT0VYVD15IHx8IE1VTFRJRkFDRV9JSUlfVFRZPXkgfHwgU0VSSUFMPXkgfHwgTVZNRTE0N19TQ0MgfHwgU0VSSUFMMTY3IHx8IE1WTUUxNjJfU0NDIHx8IEJWTUU2MDAwX1NDQyB8fCBETl9TRVJJQUwpCisJZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgU1VOMyB8fCBTVU4zWCB8fCBWTUUgfHwgQVBPTExPKSAmJiAoQVRBUklfTUZQU0VSPXkgfHwgQVRBUklfTUlEST15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHVzZSBhIHNlcmlhbCBwb3J0IGFzIHRoZQogCSAgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IDZjNzQ3NTEuLmQyY2MzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NoZWRfcmVzID0gewogCQkubmFtZSA9ICJ0aW1lciIsIC5zdGFydCA9IDB4MDBiZmQ0MDAsIC5lbmQgPSAweDAwYmZkNWZmLAogCX07Ci0JamlmZnlfdGlja3MgPSAoYW1pZ2FfZWNsb2NrK0haLzIpL0haOworCWppZmZ5X3RpY2tzID0gRElWX1JPVU5EX0NMT1NFU1QoYW1pZ2FfZWNsb2NrLCBIWik7CiAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmbWJfcmVzb3VyY2VzLl9jaWFiLCAmc2NoZWRfcmVzKSkKIAkJcHJpbnRrKCJDYW5ub3QgYWxsb2NhdGUgY2lhYi50YXtsbyxoaX1cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKaW5kZXggOTk5MWI2NC4uYzVmMzIzMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZwpAQCAtNzAxLDYgKzcwMSwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC04MzQsOSArODM5LDcgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19NQUNfU0NDPXkKIENPTkZJR19NQUNfSElEPXkKLUNPTkZJR19TRVJJQUxfQ09OU09MRT15CiAKICMKICMgRmlsZSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKaW5kZXggNjljNDNlMi4uYThiZmEzZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwpAQCAtODIyLDYgKzgyMiwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC05ODIsNyArOTg3LDYgQEAKIENPTkZJR19BVEFSSV9EU1A1Nks9bQogQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKIENPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWT1tCi1DT05GSUdfTUFDX1NDQz15CiBDT05GSUdfTUFDX0hJRD15CiBDT05GSUdfTVZNRTE0N19TQ0M9eQogQ09ORklHX1NFUklBTDE2Nz15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCmluZGV4IDJiNGRlMGMuLmEyMjA5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCkBAIC0yMSwyOSArMjEsNCBAQAogI2RlZmluZSBWSURFT01FTVNJWkUJKDQwOTYqMTAyNCkKICNkZWZpbmUgVklERU9NRU1NQVNLCSgtNDA5NioxMDI0KQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIDAKLS8qCi0qKiBTQ0MgWjg1MzAKLSovCi0KLSNkZWZpbmUgTUFDX1NDQ19CQVMgKDB4NTBGMDQwMDApCi1zdHJ1Y3QgTUFDX1NDQwotIHsKLSAgdV9jaGFyIGNoYV9hX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MTsKLSAgdV9jaGFyIGNoYV9hX2RhdGE7Ci0gIHVfY2hhciBjaGFyX2R1bW15MjsKLSAgdV9jaGFyIGNoYV9iX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MzsKLSAgdV9jaGFyIGNoYV9iX2RhdGE7Ci0gfTsKLSMgZGVmaW5lIG1hY19zY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKU1BQ19TQ0NfQkFTKSkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBsaW51eC9tYWNody5oICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludHMuaAppbmRleCA2NzljNDhhLi5lYmUxYjcwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2RlZmluZSBWSUExX1NPVVJDRV9CQVNFCTgKICNkZWZpbmUgVklBMl9TT1VSQ0VfQkFTRQkxNgotI2RlZmluZSBNQUNfU0NDX1NPVVJDRV9CQVNFCTI0CiAjZGVmaW5lIFBTQzNfU09VUkNFX0JBU0UJMjQKICNkZWZpbmUgUFNDNF9TT1VSQ0VfQkFTRQkzMgogI2RlZmluZSBQU0M1X1NPVVJDRV9CQVNFCTQwCkBAIC05NiwyNiArOTUsMTIgQEAKICNkZWZpbmUgSVJRX1BTQzNfMgkgICgyNikKICNkZWZpbmUgSVJRX1BTQzNfMwkgICgyNykKIAotLyogTGV2ZWwgNCAoU0NDKSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0MJCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQQkgICAgICgzMykKLSNkZWZpbmUgSVJRX1NDQ0IJICAgICAoMzQpCi0jaWYgMCAvKiBGSVhNRTogYXJlIHRoZXJlIG11bHRpcGxlIGludGVycnVwdCBjb25kaXRpb25zIG9uIHRoZSBTQ0MgPz8gKi8KLS8qIFNDQyBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0NCX1RYCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQl9TVEFUCSAgICAgKDMzKQotI2RlZmluZSBJUlFfU0NDQl9SWAkgICAgICgzNCkKLSNkZWZpbmUgSVJRX1NDQ0JfU1BDT05ECSAgICAgKDM1KQotI2RlZmluZSBJUlFfU0NDQV9UWAkgICAgICgzNikKLSNkZWZpbmUgSVJRX1NDQ0FfU1RBVAkgICAgICgzNykKLSNkZWZpbmUgSVJRX1NDQ0FfUlgJICAgICAoMzgpCi0jZGVmaW5lIElSUV9TQ0NBX1NQQ09ORAkgICAgICgzOSkKLSNlbmRpZgotCiAvKiBMZXZlbCA0IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLwogI2RlZmluZSBJUlFfUFNDNF8wCSAgKDMyKQogI2RlZmluZSBJUlFfUFNDNF8xCSAgKDMzKQorI2RlZmluZSBJUlFfTUFDX1NDQ19BCSAgSVJRX1BTQzRfMQogI2RlZmluZSBJUlFfUFNDNF8yCSAgKDM0KQorI2RlZmluZSBJUlFfTUFDX1NDQ19CCSAgSVJRX1BTQzRfMgogI2RlZmluZSBJUlFfUFNDNF8zCSAgKDM1KQogI2RlZmluZSBJUlFfTUFDX01BQ0VfRE1BICBJUlFfUFNDNF8zCiAKQEAgLTE0Niw2ICsxMzEsOSBAQAogI2RlZmluZSBJUlFfQkFCT09OXzIJICAoNjYpCiAjZGVmaW5lIElSUV9CQUJPT05fMwkgICg2NykKIAorLyogT24gbm9uLVBTQyBtYWNoaW5lcywgdGhlIHNlcmlhbCBwb3J0cyBzaGFyZSBhbiBJUlEgKi8KKyNkZWZpbmUgSVJRX01BQ19TQ0MJICBJUlFfQVVUT180CisKICNkZWZpbmUgU0xPVDJJUlEoeCkJICAoeCArIDQ3KQogI2RlZmluZSBJUlEyU0xPVCh4KQkgICh4IC0gNDcpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9tbS5oCmluZGV4IGFjYTBlMjguLjg3MTc0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaApAQCAtMTE1LDcgKzExNSw3IEBACiAgKiB0aGV5IGFyZSB1cGRhdGVkIG9uIGRlbWFuZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZWU0MDExYy4uMjE2MDVjNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CiAjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKIAorI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBICAgIDI1CisKICNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTMzCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDUyM2RiMmEuLjEzMjBlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMTUsOSArMTUsMTUgQEAKIAl1bnNpZ25lZCBsb25nICBzY19wYzsKIAl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7CiAjaWZuZGVmIF9fdUNsaW51eF9fCisjIGlmZGVmIF9fbWNvbGRmaXJlX18KKwl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMl1bMl07CS8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107CisJdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsxNis2KjhdOworIyBlbHNlCiAJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCiAJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOwogCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKKyMgZW5kaWYKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggY2E3ZGRlOC4uODUxZDNkNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xLDk3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfU0lHSU5GT19ICiAjZGVmaW5lIF9NNjhLX1NJR0lORk9fSAogCi0jaWZuZGVmIF9fdUNsaW51eF9fCi0jZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKLSNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKLSNpZm5kZWYgX191Q2xpbnV4X18KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7Ci0JaW50IHNpX3NpZ25vOwotCWludCBzaV9lcnJubzsKLQlpbnQgc2lfY29kZTsKLQotCXVuaW9uIHsKLQkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Ci0JCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfcnQ7Ci0KLQkJLyogU0lHQ0hMRCAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLwotCQkJY2xvY2tfdCBfdXRpbWU7Ci0JCQljbG9ja190IF9zdGltZTsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLwotCQl9IF9zaWdmYXVsdDsKLQotCQkvKiBTSUdQT0xMICovCi0JCXN0cnVjdCB7Ci0JCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLwotCQkJaW50IF9mZDsKLQkJfSBfc2lncG9sbDsKLQl9IF9zaWZpZWxkczsKLX0gc2lnaW5mb190OwotCi0jZGVmaW5lIFVJRDE2X1NJR0lORk9fQ09NUEFUX05FRURFRAotCi0vKgotICogSG93IHRoZXNlIGZpZWxkcyBhcmUgdG8gYmUgYWNjZXNzZWQuCi0gKi8KLSN1bmRlZiBzaV91aWQKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQzMgotI2RlZmluZSBzaV91aWQxNglfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2Vsc2UKLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQotewotCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLQkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7Ci0JZWxzZQotCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KLQkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qICFfX3VDbGludXhfXyAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDViNzU0YWEuLmI3YjM3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTQsNyArMTQsNyBAQAogfQogCiAjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotI2VsaWYgIWRlZmluZWQoX191Q2xpbnV4X18pCisjZWxpZiAhZGVmaW5lZChfX21jb2xkZmlyZV9fKQogCiBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCmluZGV4IDE2N2U1MTguLjY3MjY2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCkBAIC0xNiw2ICsxNiw3IEBACiAJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLwogCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLwogCV9fdTMyIGNwdTsgLyogc2hvdWxkIGFsd2F5cyBiZSAwIG9uIG02OGsgKi8KKwl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOwogfTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKaW5kZXggYTY1MTJiZi4uODg0Nzc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nCSAgIGZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCiAJaW50CQkgICBjcHU7CQkJLyogY3B1IHdlJ3JlIG9uICovCiAJaW50CQkgICBwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KKwl1bnNpZ25lZCBsb25nCSAgIHRwX3ZhbHVlOwkJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBlNGUyMjY2Li4wMGRjYzUxNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTcsNyArNywxMSBAQAogCiB0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CiAJaW50IGZfZnBjbnRsWzNdOworI2lmZGVmIF9fbWNvbGRmaXJlX18KKwlpbnQgZl9mcHJlZ3NbOF1bMl07CisjZWxzZQogCWludCBmX2ZwcmVnc1s4KjNdOworI2VuZGlmCiB9IGZwcmVnc2V0X3Q7CiAKIHN0cnVjdCBtY29udGV4dCB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggNDhiODdmNS4uZDcyYTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzM2LDEwICszMzYsMTQgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMzAKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMzEKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzMyCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCTMzMworI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkzMzQKKyNkZWZpbmUgX19OUl9hdG9taWNfY21weGNoZ18zMgkzMzUKKyNkZWZpbmUgX19OUl9hdG9taWNfYmFycmllcgkzMzYKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzMzCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzcKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAppbmRleCAzZjgzNGIzLi5mMzUyMjliIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaApAQCAtMzEsMTIgKzMxLDcgQEAKICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpIFwKIAlfX3BhKFBBR0VfT0ZGU0VUICsgKCgocGFnZSkgLSBwZ19kYXRhX21hcFswXS5ub2RlX21lbV9tYXApIDw8IFBBR0VfU0hJRlQpKQogI2Vsc2UKLSNkZWZpbmUgcGFnZV90b19waHlzKF9wYWdlKSAoewkJCQkJCVwKLQlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gX3BhZ2U7CQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsJCQkJCVwKLQlwZ2RhdCA9IHBnX2RhdGFfdGFibGVbcGFnZV90b19uaWQoX19wYWdlKV07CQkJXAotCXBhZ2VfdG9fcGZuKF9fcGFnZSkgPDwgUEFHRV9TSElGVDsJCQkJXAotfSkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQogI2VuZGlmCiAjZWxzZQogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCmluZGV4IDc3ZmM3YzEuLmUxMzZiOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKQEAgLTc2MSw0ICs3NjEsOCBAQAogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KIAkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCisJLmxvbmcgc3lzX2dldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfYXRvbWljX2NtcHhjaGdfMzIJLyogMzM1ICovCisJLmxvbmcgc3lzX2F0b21pY19iYXJyaWVyCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMDUyOTY1OS4uMTdjM2YzMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI1MSw2ICsyNTEsMTAgQEAKIAogCXAtPnRocmVhZC51c3AgPSB1c3A7CiAJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKWNoaWxkc3RhY2s7CisKKwlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCisJCXRhc2tfdGhyZWFkX2luZm8ocCktPnRwX3ZhbHVlID0gcmVncy0+ZDU7CisKIAkvKgogCSAqIE11c3Qgc2F2ZSB0aGUgY3VycmVudCBTRkMvREZDIHZhbHVlLCBOT1QgdGhlIHZhbHVlIHdoZW4KIAkgKiB0aGUgcGFyZW50IHdhcyBsYXN0IGRlc2NoZWR1bGVkIC0gUkdIICAxMC0wOC05NgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMWZjMjE3ZS4uNjE2ZTU5NyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCkBAIC0yNDUsNiArMjQ1LDExIEBACiAJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKKwkJcmV0ID0gcHV0X3VzZXIodGFza190aHJlYWRfaW5mbyhjaGlsZCktPnRwX3ZhbHVlLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYwppbmRleCBkZTJkMDVkLi40YjM4NzUzIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKQEAgLTg5NywxMCArODk3LDE3IEBACiAKIAkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcihmcmFtZS0+cmV0Y29kZSwgJmZyYW1lLT5wcmV0Y29kZSk7CisjaWZkZWYgX19tY29sZGZpcmVfXworCS8qIG1vdmVsICNfX05SX3J0X3NpZ3JldHVybixkMDsgdHJhcCAjMCAqLworCWVyciB8PSBfX3B1dF91c2VyKDB4MjAzYzAwMDAsIChsb25nIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDApKTsKKwllcnIgfD0gX19wdXRfdXNlcigweDAwMDA0ZTQwICsgKF9fTlJfcnRfc2lncmV0dXJuIDw8IDE2KSwKKwkJCSAgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgNCkpOworI2Vsc2UKIAkvKiBtb3ZlcSAjLGQwOyBub3RiIGQwOyB0cmFwICMwICovCiAJZXJyIHw9IF9fcHV0X3VzZXIoMHg3MDAwNDYwMCArICgoX19OUl9ydF9zaWdyZXR1cm4gXiAweGZmKSA8PCAxNiksCiAJCQkgIChsb25nIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDApKTsKIAllcnIgfD0gX19wdXRfdXNlcigweDRlNDAsIChzaG9ydCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CisjZW5kaWYKIAogCWlmIChlcnIpCiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCmluZGV4IDIxOGY0NDEuLmUzYWQyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYworKysgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKQEAgLTI4LDYgKzI4LDExIEBACiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorCithc21saW5rYWdlIGludCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCkBAIC01OTUsMyArNjAwLDc5IEBACiAJCQk6ICJkIiAoX19hKSwgImQiIChfX2IpLCAiZCIgKF9fYykpOwogCXJldHVybiBfX3JlczsKIH0KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19nZXRfdGhyZWFkX2FyZWEodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX3NldF90aHJlYWRfYXJlYSh1bnNpZ25lZCBsb25nIHRwKQoreworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWUgPSB0cDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzeXNjYWxsIGdldHMgaXRzIGFyZ3VtZW50cyBpbiBBMCAobWVtKSwgRDIgKG9sZHZhbCkgYW5kCisgICBEMSAobmV3dmFsKS4gICovCithc21saW5rYWdlIGludAorc3lzX2F0b21pY19jbXB4Y2hnXzMyKHVuc2lnbmVkIGxvbmcgbmV3dmFsLCBpbnQgb2xkdmFsLCBpbnQgZDMsIGludCBkNCwgaW50IGQ1LAorCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqIG1lbSkKK3sKKwkvKiBUaGlzIHdhcyBib3Jyb3dlZCBmcm9tIEFSTSdzIGltcGxlbWVudGF0aW9uLiAgKi8KKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJCXBnZF90ICpwZ2Q7CisJCXBtZF90ICpwbWQ7CisJCXB0ZV90ICpwdGU7CisJCXNwaW5sb2NrX3QgKnB0bDsKKwkJdW5zaWduZWQgbG9uZyBtZW1fdmFsdWU7CisKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCAodW5zaWduZWQgbG9uZyltZW0pOworCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQorCQkJZ290byBiYWRfYWNjZXNzOworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgKHVuc2lnbmVkIGxvbmcpbWVtKTsKKwkJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJCWdvdG8gYmFkX2FjY2VzczsKKwkJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCAodW5zaWduZWQgbG9uZyltZW0sICZwdGwpOworCQlpZiAoIXB0ZV9wcmVzZW50KCpwdGUpIHx8ICFwdGVfZGlydHkoKnB0ZSkKKwkJICAgIHx8ICFwdGVfd3JpdGUoKnB0ZSkpIHsKKwkJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCQkJZ290byBiYWRfYWNjZXNzOworCQl9CisKKwkJbWVtX3ZhbHVlID0gKm1lbTsKKwkJaWYgKG1lbV92YWx1ZSA9PSBvbGR2YWwpCisJCQkqbWVtID0gbmV3dmFsOworCisJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlyZXR1cm4gbWVtX3ZhbHVlOworCisJICAgICAgYmFkX2FjY2VzczoKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJLyogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYSBiYWQgYWNjZXNzLCB3ZSBjYW4gZ2V0IGhlcmUgaWYKKwkJICAgYSBtZW1vcnkgd2UncmUgdHJ5aW5nIHRvIHdyaXRlIHRvIHNob3VsZCBiZSBjb3BpZWQtb24td3JpdGUuCisJCSAgIE1ha2UgdGhlIGtlcm5lbCBkbyB0aGUgbmVjZXNzYXJ5IHBhZ2Ugc3R1ZmYsIHRoZW4gcmUtaXRlcmF0ZS4KKwkJICAgU2ltdWxhdGUgYSB3cml0ZSBhY2Nlc3MgZmF1bHQgdG8gZG8gdGhhdC4gICovCisJCXsKKwkJCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgZnVuY3Rpb24gY29ycmVzcG9uZHMgdG8KKwkJCSAgIEQxLCB3aGljaCBpcyB0aGUgZmlyc3QgZmllbGQgb2Ygc3RydWN0IHB0X3JlZ3MuICAqLworCQkJc3RydWN0IHB0X3JlZ3MgKmZwID0gKHN0cnVjdCBwdF9yZWdzICopJm5ld3ZhbDsKKworCQkJLyogJzMnIGlzIGFuIFJNVyBmbGFnLiAgKi8KKwkJCWlmIChkb19wYWdlX2ZhdWx0KGZwLCAodW5zaWduZWQgbG9uZyltZW0sIDMpKQorCQkJCS8qIElmIHRoZSBkb19wYWdlX2ZhdWx0KCkgZmFpbGVkLCB3ZSBkb24ndAorCQkJCSAgIGhhdmUgYW55dGhpbmcgbWVhbmluZ2Z1bCB0byByZXR1cm4uCisJCQkJICAgVGhlcmUgc2hvdWxkIGJlIGEgU0lHU0VHViBwZW5kaW5nIGZvcgorCQkJCSAgIHRoZSBwcm9jZXNzLiAgKi8KKwkJCQlyZXR1cm4gMHhkZWFkYmVlZjsKKwkJfQorCX0KK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2F0b21pY19iYXJyaWVyKHZvaWQpCit7CisJLyogbm8gY29kZSBuZWVkZWQgZm9yIHVuaXByb2NzICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL01ha2VmaWxlIGIvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQppbmRleCBkYWViZDgwLi5iOGQ0YzgzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAjCiAKIG9iai15CQk6PSBjb25maWcubyBtYWNpbnRzLm8gaW9wLm8gdmlhLm8gb3NzLm8gcHNjLm8gXAotCQkJYmFib29uLm8gbWFjYm9pbmcubyBkZWJ1Zy5vIG1pc2MubworCQkJYmFib29uLm8gbWFjYm9pbmcubyBtaXNjLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IGJlMDE3OTguLjAzNTZkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYWRiLmg+CisjaW5jbHVkZSA8bGludXgvY3VkYS5oPgogCiAjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQ0LDEyICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgogCi0vKiBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLwotCi0jZGVmaW5lIFNXSU1fSU9fU0laRSAweDIwMDAJLyogU1dJTSBJTyByZXNvdXJjZSBzaXplICovCi0KIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KLQogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKIAogLyogVGhlIHBoeXMuIHZpZGVvIGFkZHIuIC0gbWlnaHQgYmUgYm9ndXMgb24gc29tZSBtYWNoaW5lcyAqLwpAQCAtNzAsOCArNjcsNiBAQAogCiBleHRlcm4gdm9pZCBtYWNfbWtzb3VuZCh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiAKLWV4dGVybiB2b2lkIG51YnVzX3N3ZWVwX3ZpZGVvKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBtYWNfZ2V0X21vZGVsKGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCBtYWNfaWRlbnRpZnkodm9pZCk7CiBzdGF0aWMgdm9pZCBtYWNfcmVwb3J0X2hhcmR3YXJlKHZvaWQpOwpAQCAtMTY4LDEyICsxNjMsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKIAltYWNoX2JlZXAgPSBtYWNfbWtzb3VuZDsKICNlbmRpZgotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLSNpZiAwCi0JbWFjaF9oZWFydGJlYXQgPSBtYWNfaGVhcnRiZWF0OwotCW1hY2hfaGVhcnRiZWF0X2lycSA9IElSUV9NQUNfVElNRVI7Ci0jZW5kaWYKLSNlbmRpZgogCiAJLyoKIAkgKiBEZXRlcm1pbmUgaGFyZHdhcmUgcHJlc2VudApAQCAtMTkxLDI3ICsxODAsMTkgQEAKIAlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJQ0kKIAkgICAgfHwgbWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpCiAJCW1hY2hfbDJfZmx1c2ggPSBtYWNfY2FjaGVfY2FyZF9mbHVzaDsKLQotCS8qCi0JICogQ2hlY2sgZm9yIG1hY2hpbmUgc3BlY2lmaWMgZml4dXBzLgotCSAqLwotCi0jaWZkZWYgT0xEX05VQlVTX0NPREUKLQludWJ1c19zd2VlcF92aWRlbygpOwotI2VuZGlmCiB9CiAKIAogLyoKLSAqCU1hY2ludG9zaCBUYWJsZTogaGFyZGNvZGVkIG1vZGVsIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIE1hY2ludG9zaCBUYWJsZTogaGFyZGNvZGVkIG1vZGVsIGNvbmZpZ3VyYXRpb24gZGF0YS4KICAqCi0gKglNdWNoIG9mIHRoaXMgd2FzIGRlZmluZWQgYnkgQWxhbiwgYmFzZWQgb24gd2hvIGtub3dzIHdoYXQgZG9jcy4KLSAqCUkndmUgYWRkZWQgYSBsb3QgbW9yZSwgYW5kIHNvbWUgb2YgdGhhdCB3YXMgcHVyZSBndWVzc3dvcmsgYmFzZWQKLSAqCW9uIGhhcmR3YXJlIHBhZ2VzIHByZXNlbnQgb24gdGhlIE1hYyB3ZWIgc2l0ZS4gUG9zc2libHkgd2lsZGx5Ci0gKglpbmFjY3VyYXRlLCBzbyBsb29rIGhlcmUgaWYgYSBuZXcgTWFjIG1vZGVsIHdvbid0IHJ1bi4gRXhhbXBsZTogaWYKLSAqCWEgTWFjIGNyYXNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFZJQTEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBkdW1wZWQKLSAqCXRvIHRoZSBzY3JlZW4sIGl0IHByb2JhYmx5IGRpZWQgYXR0ZW1wdGluZyB0byByZWFkIERpckIgb24gYSBSQlYuCi0gKglNZWFuaW5nIGl0IHNob3VsZCBoYXZlIE1BQ19WSUFfSUljaSBoZXJlIDotKQorICogTXVjaCBvZiB0aGlzIHdhcyBkZWZpbmVkIGJ5IEFsYW4sIGJhc2VkIG9uIHdobyBrbm93cyB3aGF0IGRvY3MuCisgKiBJJ3ZlIGFkZGVkIGEgbG90IG1vcmUsIGFuZCBzb21lIG9mIHRoYXQgd2FzIHB1cmUgZ3Vlc3N3b3JrIGJhc2VkCisgKiBvbiBoYXJkd2FyZSBwYWdlcyBwcmVzZW50IG9uIHRoZSBNYWMgd2ViIHNpdGUuIFBvc3NpYmx5IHdpbGRseQorICogaW5hY2N1cmF0ZSwgc28gbG9vayBoZXJlIGlmIGEgbmV3IE1hYyBtb2RlbCB3b24ndCBydW4uIEV4YW1wbGU6IGlmCisgKiBhIE1hYyBjcmFzaGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBWSUExIHJlZ2lzdGVycyBoYXZlIGJlZW4gZHVtcGVkCisgKiB0byB0aGUgc2NyZWVuLCBpdCBwcm9iYWJseSBkaWVkIGF0dGVtcHRpbmcgdG8gcmVhZCBEaXJCIG9uIGEgUkJWLgorICogTWVhbmluZyBpdCBzaG91bGQgaGF2ZSBNQUNfVklBX0lJY2kgaGVyZSA6LSkKICAqLwogCiBzdHJ1Y3QgbWFjX21vZGVsICptYWNpbnRvc2hfY29uZmlnOwpAQCAtMjE5LDcgKzIwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWFjX21vZGVsIG1hY19kYXRhX3RhYmxlW10gPSB7CiAJLyoKLQkgKglXZSdsbCBwcmV0ZW5kIHRvIGJlIGEgTWFjaW50b3NoIElJLCB0aGF0J3MgcHJldHR5IHNhZmUuCisJICogV2UnbGwgcHJldGVuZCB0byBiZSBhIE1hY2ludG9zaCBJSSwgdGhhdCdzIHByZXR0eSBzYWZlLgogCSAqLwogCiAJewpAQCAtMjMwLDEyICsyMTEsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNLAogCX0sCiAKIAkvKgotCSAqCU9yaWdpbmFsIE1hY0lJIGhhcmR3YXJlCi0JICoKKwkgKiBPcmlnaW5hbCBNYWMgSUkgaGFyZHdhcmUKIAkgKi8KIAogCXsKQEAgLTI0Niw3ICsyMjYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00sCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJWCwKIAkJLm5hbWUJCT0gIklJeCIsCkBAIC0yNTUsNyArMjM1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ1gsCiAJCS5uYW1lCQk9ICJJSWN4IiwKQEAgLTI2NCw3ICsyNDQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfU0UzMCwKIAkJLm5hbWUJCT0gIlNFLzMwIiwKQEAgLTI3MywxMyArMjUzLDEzIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCVdlaXJkaWZpZWQgTWFjSUkgaGFyZHdhcmUgLSBhbGwgc3VidGx5IGRpZmZlcmVudC4gR2VlIHRoYW5rcwotCSAqCUFwcGxlLiBBbGwgdGhlc2UgYm94ZXMgc2VlbSB0byBoYXZlIFZJQTIgaW4gYSBkaWZmZXJlbnQgcGxhY2UgdG8KLQkgKgl0aGUgTWFjSUkgKCsxQTAwMCByYXRoZXIgdGhhbiArNDAwMCkKKwkgKiBXZWlyZGlmaWVkIE1hYyBJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bHkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCisJICogQXBwbGUuIEFsbCB0aGVzZSBib3hlcyBzZWVtIHRvIGhhdmUgVklBMiBpbiBhIGRpZmZlcmVudCBwbGFjZSB0bworCSAqIHRoZSBNYWMgSUkgKCsxQTAwMCByYXRoZXIgdGhhbiArNDAwMCkKIAkgKiBDU0E6IHNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvaHcvaHdfMDkuaHRtbAogCSAqLwogCkBAIC0yOTEsNyArMjcxLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJRlgsCiAJCS5uYW1lCQk9ICJJSWZ4IiwKQEAgLTMwMCw3ICsyODAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKIAkJLm5hbWUJCT0gIklJc2kiLApAQCAtMzA5LDcgKzI4OSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAogCQkubmFtZQkJPSAiSUl2aSIsCkBAIC0zMTgsNyArMjk4LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVlgsCiAJCS5uYW1lCQk9ICJJSXZ4IiwKQEAgLTMyNywxMSArMzA3LDExIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCUNsYXNzaWMgbW9kZWxzIChndWVzc2luZzogc2ltaWxhciB0byBTRS8zMCA/PyBOb3BlLCBzaW1pbGFyIHRvIExDIC4uLikKKwkgKiBDbGFzc2ljIG1vZGVscyAoZ3Vlc3Npbmc6IHNpbWlsYXIgdG8gU0UvMzA/IE5vcGUsIHNpbWlsYXIgdG8gTEMuLi4pCiAJICovCiAKIAl7CkBAIC0zNDIsNyArMzIyLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0NDTCwKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMiLApAQCAtMzUxLDExICszMzEsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQorCSAqIFNvbWUgTWFjIExDIG1hY2hpbmVzLiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIElJY2ksIEFEQiBsaWtlIElJc2kKIAkgKi8KIAogCXsKQEAgLTM2Niw3ICszNDYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSSwKIAkJLm5hbWUJCT0gIkxDIElJIiwKQEAgLTM3NSw3ICszNTUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSUksCiAJCS5uYW1lCQk9ICJMQyBJSUkiLApAQCAtMzg0LDE3ICszNjQsMTcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJUXVhZHJhLiBWaWRlbyBpcyBhdCAweEY5MDAwMDAwLCB2aWEgaXMgbGlrZSBhIE1hY0lJLiBXZSBsYWJlbCBpdCBkaWZmZXJlbnRseQotCSAqCWFzIHNvbWUgb2YgdGhlIHN0dWZmIGNvbm5lY3RlZCB0byBWSUEyIHNlZW1zIGRpZmZlcmVudC4gQmV0dGVyIFNDU0kgY2hpcCBhbmQKLQkgKglvbmJvYXJkIGV0aGVybmV0IHVzaW5nIGEgTmF0U2VtaSBTT05JQyBleGNlcHQgdGhlIDY2MEFWIGFuZCA4NDBBViB3aGljaCB1c2UgYW4KLQkgKglBTUQgNzlDOTQwIChNQUNFKS4KLQkgKglUaGUgNzAwLCA5MDAgYW5kIDk1MCBoYXZlIHNvbWUgSS9PIGNoaXBzIGluIHRoZSB3cm9uZyBwbGFjZSB0bwotCSAqCWNvbmZ1c2UgdXMuIFRoZSA4NDBBViBoYXMgYSBTQ1NJIGxvY2F0aW9uIG9mIGl0cyBvd24gKHNhbWUgYXMKLQkgKgl0aGUgNjYwQVYpLgorCSAqIFF1YWRyYS4gVmlkZW8gaXMgYXQgMHhGOTAwMDAwMCwgdmlhIGlzIGxpa2UgYSBNYWNJSS4gV2UgbGFiZWwgaXQKKwkgKiBkaWZmZXJlbnRseSBhcyBzb21lIG9mIHRoZSBzdHVmZiBjb25uZWN0ZWQgdG8gVklBMiBzZWVtcyBkaWZmZXJlbnQuCisJICogQmV0dGVyIFNDU0kgY2hpcCBhbmQgb25ib2FyZCBldGhlcm5ldCB1c2luZyBhIE5hdFNlbWkgU09OSUMgZXhjZXB0CisJICogdGhlIDY2MEFWIGFuZCA4NDBBViB3aGljaCB1c2UgYW4gQU1EIDc5Qzk0MCAoTUFDRSkuCisJICogVGhlIDcwMCwgOTAwIGFuZCA5NTAgaGF2ZSBzb21lIEkvTyBjaGlwcyBpbiB0aGUgd3JvbmcgcGxhY2UgdG8KKwkgKiBjb25mdXNlIHVzLiBUaGUgODQwQVYgaGFzIGEgU0NTSSBsb2NhdGlvbiBvZiBpdHMgb3duIChzYW1lIGFzCisJICogdGhlIDY2MEFWKS4KIAkgKi8KIAogCXsKQEAgLTQwNSw3ICszODUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDVfQUNDLAogCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCkBAIC00MTQsNyArMzk0LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjEwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYxMCIsCkBAIC00MjQsNyArNDA0LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYzMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MzAiLApAQCAtNDM1LDcgKzQxNSw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjUwIiwKQEAgLTQ0NSw5ICs0MjUsOSBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sCi0JLyoJVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KKwkvKiBUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLwogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNzAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDcwMCIsCkBAIC00NTcsNyArNDM3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTgwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4MDAiLApAQCAtNDY3LDcgKzQ0Nyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4NDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODQwQVYiLApAQCAtNDc3LDcgKzQ1Nyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0FWLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCkBAIC00ODcsNyArNDY3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDk1MCIsCkBAIC00OTcsNjAgKzQ3Nyw2MCBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCiAJfSwKIAogCS8qCi0JICoJUGVyZm9ybWEgLSBtb3JlIExDIHR5cGUgbWFjaGluZXMKKwkgKiBQZXJmb3JtYSAtIG1vcmUgTEMgdHlwZSBtYWNoaW5lcwogCSAqLwogCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NjAsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDYwIiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDQ2MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NSwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNDc1IiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzVGLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NzUiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDUyMCwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA1MjAiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNTIwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTUwLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDU1MCIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKLQkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIFNPTklDIGV0aGVybmV0ICovCisJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHBvc3NpYmx5IFNPTklDIGV0aGVybmV0ICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NzUsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NzUiLApAQCAtNTYwLDcgKzU0MCw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU4OCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU4OCIsCkBAIC01NzEsNyArNTUxLDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9UViwKIAkJLm5hbWUJCT0gIlRWIiwKQEAgLTU4MCw3ICs1NjAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDYwMCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCkBAIC01ODksMTQgKzU2OSwxNCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglDZW50cmlzIC0ganVzdCBndWVzc2luZyBhZ2FpbjsgbWF5YmUgbGlrZSBRdWFkcmEKKwkgKiBDZW50cmlzIC0ganVzdCBndWVzc2luZyBhZ2FpbjsgbWF5YmUgbGlrZSBRdWFkcmEuCisJICogVGhlIEM2MTAgbWF5IG9yIG1heSBub3QgaGF2ZSBTT05JQy4gV2UgcHJvYmUgdG8gbWFrZSBzdXJlLgogCSAqLwogCi0JLyogVGhlIEM2MTAgbWF5IG9yIG1heSBub3QgaGF2ZSBTT05JQy4gIFdlIHByb2JlIHRvIG1ha2Ugc3VyZSAqLwogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjEwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2MTAiLApAQCAtNjA2LDcgKzU4Niw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCkBAIC02MTYsNyArNTk2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY2MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjYwQVYiLApAQCAtNjI2LDcgKzYwNiw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0FWLAogCX0sCiAKIAkvKgpAQCAtNjQzLDcgKzYyMyw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNDUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTQ1IiwKQEAgLTY1Miw3ICs2MzIsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCkBAIC02NjIsNyArNjQyLDcgQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9QQiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjAiLApAQCAtNjcxLDcgKzY1MSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKQEAgLTY4MCw3ICs2NjAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1QywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjVjIiwKQEAgLTY4OSw3ICs2NjksNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTcwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE3MCIsCkBAIC02OTgsNyArNjc4LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLApAQCAtNzA3LDcgKzY4Nyw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MGMiLApAQCAtNzE2LDcgKzY5Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxOTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTkwIiwKQEAgLTcyNiw3ICs3MDYsNyBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX0JBQk9PTiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjUyMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLApAQCAtNzM2LDcgKzcxNiw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCkBAIC03NTcsNyArNzM3LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIzMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKQEAgLTc2Niw3ICs3NDYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLApAQCAtNzc1LDcgKzc1NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNzBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKQEAgLTc4NCw3ICs3NjQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLApAQCAtNzkzLDcgKzc3Myw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKQEAgLTgwMiwxNyArNzgyLDQ0IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglPdGhlciBzdHVmZiA/PworCSAqIE90aGVyIHN0dWZmPwogCSAqLworCiAJewogCQkuaWRlbnQJCT0gLTEKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjY19hX3JzcmNzW10gPSB7CisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB9LAorCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NjX2JfcnNyY3NbXSA9IHsKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIH0sCisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2NfYV9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzY2MiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzY2NfYV9yc3JjcyksCisJLnJlc291cmNlICAgICAgID0gc2NjX2FfcnNyY3MsCit9OworRVhQT1JUX1NZTUJPTChzY2NfYV9wZGV2KTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2NfYl9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzY2MiLAorCS5pZCAgICAgICAgICAgICA9IDEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzY2NfYl9yc3JjcyksCisJLnJlc291cmNlICAgICAgID0gc2NjX2JfcnNyY3MsCit9OworRVhQT1JUX1NZTUJPTChzY2NfYl9wZGV2KTsKKwogc3RhdGljIHZvaWQgX19pbml0IG1hY19pZGVudGlmeSh2b2lkKQogewogCXN0cnVjdCBtYWNfbW9kZWwgKm07CkBAIC04MjMsNyArODMwLDggQEAKIAkJLyogbm8gYm9vdGluZm8gbW9kZWwgaWQgLT4gTmV0QlNEIGJvb3RlciB3YXMgdXNlZCEgKi8KIAkJLyogWFhYIEZJWE1FOiBicmVha3MgZm9yIG1vZGVsID4gMzEgKi8KIAkJbW9kZWwgPSAobWFjX2JpX2RhdGEuY3B1aWQgPj4gMikgJiA2MzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gYm9vdGluZm8gbW9kZWwgSUQsIHVzaW5nIGNwdWlkIGluc3RlYWQgKGhleSwgdXNlIFBlbmd1aW4hKVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGJvb3RpbmZvIG1vZGVsIElELCB1c2luZyBjcHVpZCBpbnN0ZWFkICIKKwkJICAgICAgICIob2Jzb2xldGUgYm9vdGxvYWRlcj8pXG4iKTsKIAl9CiAKIAltYWNpbnRvc2hfY29uZmlnID0gbWFjX2RhdGFfdGFibGU7CkBAIC04MzQsMTAgKzg0MiwyOSBAQAogCQl9CiAJfQogCi0JLyogV2UgbmVlZCB0byBwcmUtaW5pdCB0aGUgSU9QcywgaWYgYW55LiBPdGhlcndpc2UgKi8KLQkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgd29uJ3Qgd29yayBpZiB0aGUgdXNlciBoYWQgICAqLwotCS8qIHRoZSBzZXJpYWwgcG9ydHMgc2V0IHRvICJGYXN0ZXIiIG1vZGUgaW4gTWFjT1MuICovCisJLyogU2V0IHVwIHNlcmlhbCBwb3J0IHJlc291cmNlcyBmb3IgdGhlIGNvbnNvbGUgaW5pdGNhbGwuICovCiAKKwlzY2NfYV9yc3Jjc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIG1hY19iaV9kYXRhLnNjY2Jhc2UgKyAyOworCXNjY19hX3JzcmNzWzBdLmVuZCAgID0gc2NjX2FfcnNyY3NbMF0uc3RhcnQ7CisJc2NjX2JfcnNyY3NbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KSBtYWNfYmlfZGF0YS5zY2NiYXNlOworCXNjY19iX3JzcmNzWzBdLmVuZCAgID0gc2NjX2JfcnNyY3NbMF0uc3RhcnQ7CisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjY190eXBlKSB7CisJY2FzZSBNQUNfU0NDX1BTQzoKKwkJc2NjX2FfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYV9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQ19BOworCQlzY2NfYl9yc3Jjc1sxXS5zdGFydCA9IHNjY19iX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDX0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNjY19hX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2FfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0M7CisJCXNjY19iX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2JfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0M7CisJCWJyZWFrOworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBwcmUtaW5pdCB0aGUgSU9QcywgaWYgYW55LiBPdGhlcndpc2UKKwkgKiB0aGUgc2VyaWFsIGNvbnNvbGUgd29uJ3Qgd29yayBpZiB0aGUgdXNlciBoYWQKKwkgKiB0aGUgc2VyaWFsIHBvcnRzIHNldCB0byAiRmFzdGVyIiBtb2RlIGluIE1hY09TLgorCSAqLwogCWlvcF9wcmVpbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCBNYWNpbnRvc2ggbW9kZWw6ICVkIFxuIiwgbW9kZWwpOwpAQCAtODQ2LDcgKzg3Myw4IEBACiAJICogUmVwb3J0IGJvb3RlciBkYXRhOgogCSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIgUGVuZ3VpbiBib290aW5mbyBkYXRhOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiBWaWRlbzogYWRkciAweCVseCByb3cgMHglbHggZGVwdGggJWx4IGRpbWVuc2lvbnMgJWxkIHggJWxkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIgVmlkZW86IGFkZHIgMHglbHggIgorCQkicm93IDB4JWx4IGRlcHRoICVseCBkaW1lbnNpb25zICVsZCB4ICVsZFxuIiwKIAkJbWFjX2JpX2RhdGEudmlkZW9hZGRyLCBtYWNfYmlfZGF0YS52aWRlb3JvdywKIAkJbWFjX2JpX2RhdGEudmlkZW9kZXB0aCwgbWFjX2JpX2RhdGEuZGltZW5zaW9ucyAmIDB4RkZGRiwKIAkJbWFjX2JpX2RhdGEuZGltZW5zaW9ucyA+PiAxNik7CkBAIC04NjMsNiArODkxLDEwIEBACiAJb3NzX2luaXQoKTsKIAlwc2NfaW5pdCgpOwogCWJhYm9vbl9pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfQURCX0NVREEKKwlmaW5kX3ZpYV9jdWRhKCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCkKQEAgLTg3NiwyMyArOTA4LDUwIEBACiAJc3RyY2F0KHN0ciwgbWFjaW50b3NoX2NvbmZpZy0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yZXNvdXJjZXNbMV07CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHN3aW1fcnNyYyA9IHsgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzd2ltX3BkZXYgPSB7CiAJLm5hbWUJCT0gInN3aW0iLAogCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3dpbV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHN3aW1fcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc3dpbV9yc3JjLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc3dpbV9kZXZpY2UKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcF8wX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY19lc3AiLAorCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwXzFfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjX2VzcCIsCisJLmlkCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzb25pY19wZGV2ID0geworCS5uYW1lCQk9ICJtYWNzb25pYyIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWFjZV9wZGV2ID0geworCS5uYW1lCQk9ICJtYWNtYWNlIiwKKwkuaWQJCT0gLTEsCiB9OwogCiBpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpCiB7CiAJdTggKnN3aW1fYmFzZTsKIAorCS8qCisJICogU2VyaWFsIGRldmljZXMKKwkgKi8KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NjX2FfcGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2NfYl9wZGV2KTsKKworCS8qCisJICogRmxvcHB5IGRldmljZQorCSAqLworCiAJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5mbG9wcHlfdHlwZSkgewogCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIxOgogCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxRTAwMCk7CkBAIC05MDEsMTYgKzk2MCw0NyBAQAogCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxNjAwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAwOworCQlzd2ltX2Jhc2UgPSBOVUxMOworCQlicmVhazsKIAl9CiAKLQlzd2ltX3Jlc291cmNlc1swXS5uYW1lID0gInN3aW0tcmVncyI7Ci0Jc3dpbV9yZXNvdXJjZXNbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KXN3aW1fYmFzZTsKLQlzd2ltX3Jlc291cmNlc1swXS5lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KShzd2ltX2Jhc2UgKyBTV0lNX0lPX1NJWkUpOwotCXN3aW1fcmVzb3VyY2VzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJaWYgKHN3aW1fYmFzZSkgeworCQlzd2ltX3JzcmMuc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KSBzd2ltX2Jhc2UsCisJCXN3aW1fcnNyYy5lbmQgICA9IChyZXNvdXJjZV9zaXplX3QpIHN3aW1fYmFzZSArIDB4MjAwMCwKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzd2ltX3BkZXYpOworCX0KIAotCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtYWNfcGxhdGZvcm1fZGV2aWNlcywKLQkJCQkgICAgQVJSQVlfU0laRShtYWNfcGxhdGZvcm1fZGV2aWNlcykpOworCS8qCisJICogU0NTSSBkZXZpY2UocykKKwkgKi8KKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlKSB7CisJY2FzZSBNQUNfU0NTSV9RVUFEUkE6CisJY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8wX3BkZXYpOworCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTI6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzBfcGRldik7CisJCWlmICgobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5MDApIHx8CisJCSAgICAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5NTApKQorCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMV9wZGV2KTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBFdGhlcm5ldCBkZXZpY2UKKwkgKi8KKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+ZXRoZXJfdHlwZSkgeworCWNhc2UgTUFDX0VUSEVSX1NPTklDOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNvbmljX3BkZXYpOworCQlicmVhazsKKwljYXNlIE1BQ19FVEhFUl9NQUNFOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1hY2VfcGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG1hY19wbGF0Zm9ybV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYyBiL2FyY2gvbTY4ay9tYWMvZGVidWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMDc0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvbWFjL2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbTY4ay9tYWMvZGVidWcuYwotICoKLSAqIFNoYW1lbGVzc2x5IHN0b2xlbiAoU0NDIGNvZGUgYW5kIGdlbmVyYWwgZnJhbWV3b3JrKSBmcm9tOgotICoKLSAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCi0gKgotICogQXRhcmkgZGVidWdnaW5nIGFuZCBzZXJpYWwgY29uc29sZSBzdHVmZgotICoKLSAqIEFzc2VtYmxlZCBvZiBwYXJ0cyBvZiBmb3JtZXIgYXRhcmkvY29uZmlnLmMgOTctMTItMTggYnkgUm9tYW4gSG9kZWsKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIG1hY192aWRlb2Jhc2U7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfcm93Ynl0ZXM7Ci0KLWV4dGVybiB2b2lkIG1hY19zZXJpYWxfcHJpbnQoY29uc3QgY2hhciAqKTsKLQotI2RlZmluZSBERUJVR19IRUFEUwotI3VuZGVmIERFQlVHX1NDUkVFTgotI2RlZmluZSBERUJVR19TRVJJQUwKLQotLyoKLSAqIFRoZXNlIHR3byBhdXhpbGlhcnkgZGVidWcgZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IEFTQVAuIE9ubHkgdXNhZ2U6Ci0gKiBiZWZvcmUgdGhlIGNvbnNvbGUgb3V0cHV0IGlzIHVwIChhZnRlciBoZWFkLlMgY29tZSBzb21lIG90aGVyIGNydWNpYWwKLSAqIHNldHVwIHJvdXRpbmVzIDotKSBpdCBwZXJtaXRzIHdyaXRpbmcgJ2RhdGEnIHRvIHRoZSBzY3JlZW4gYXMgYml0IHBhdHRlcm5zCi0gKiAoZ29vZCBsdWNrIHJlYWRpbmcgdGhvc2UpLiBIZWxwZWQgdG8gZmlndXJlIHRoYXQgdGhlIGJvb3RpbmZvIGNvbnRhaW5lZAotICogZ2FyYmFnZSBkYXRhIG9uIHRoZSBhbW91bnQgYW5kIHNpemUgb2YgbWVtb3J5IGNodW5rcyAuLi4KLSAqCi0gKiBUaGUgJ3BvcycgYXJndW1lbnQgbm93IHNpbXBseSBtZWFucyAnbGluZWZlZWQgYWZ0ZXIgcHJpbnQnIC4uLgotICovCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLXN0YXRpYyBpbnQgcGVuZywgbGluZTsKLSNlbmRpZgotCi0jaWYgMAotCi12b2lkIG1hY19kZWJ1Z2dpbmdfc2hvcnQoaW50IHBvcywgc2hvcnQgbnVtKQotewotI2lmZGVmIERFQlVHX1NDUkVFTgotCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciAqcHB0cjsKLQlpbnQgaTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JcHJpbnRrKCJkZWJ1ZzogJWQgIVxuIiwgbnVtKTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0NSRUVOCi0JaWYgKCFNQUNIX0lTX01BQykgewotCQkvKiBwcmludGsoImRlYnVnOiAlZCAhXG4iLCBudW0pOyAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2FsY3VsYXRlIGN1cnJlbnQgb2Zmc2V0ICovCi0JcGVuZ29mZnNldCA9ICh1bnNpZ25lZCBjaGFyICopbWFjX3ZpZGVvYmFzZSArCi0JCSgxNTArbGluZSoyKSAqIG1hY19yb3dieXRlcyArIDgwICogcGVuZzsKLQotCXBwdHIgPSBwZW5nb2Zmc2V0OwotCi0JZm9yIChpID0gMDsgaSA8IDggKiBzaXplb2Yoc2hvcnQpOyBpKyspIHsgLyogIyBvZiBiaXRzICovCi0JCS8qICAgICAgICB2YWx1ZSAgICAgICAgbWFzayBmb3IgYml0IGksIHJldmVyc2Ugb3JkZXIgKi8KLQkJKnBwdHIrKyA9IChudW0gJiAoMSA8PCAoOCpzaXplb2Yoc2hvcnQpLWktMSkpID8gMHhGRiA6IDB4MDApOwotCX0KLQotCXBlbmcrKzsKLQotCWlmIChwb3MpIHsKLQkJbGluZSsrOwotCQlwZW5nID0gMDsKLQl9Ci0jZW5kaWYKLX0KLQotdm9pZCBtYWNfZGVidWdnaW5nX2xvbmcoaW50IHBvcywgbG9uZyBhZGRyKQotewotI2lmZGVmIERFQlVHX1NDUkVFTgotCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciAqcHB0cjsKLQlpbnQgaTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JcHJpbnRrKCJkZWJ1ZzogIyVsZCAhXG4iLCBhZGRyKTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0NSRUVOCi0JaWYgKCFNQUNIX0lTX01BQykgewotCQkvKiBwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOyAqLwotCQlyZXR1cm47Ci0JfQotCi0JcGVuZ29mZnNldD0odW5zaWduZWQgY2hhciAqKShtYWNfdmlkZW9iYXNlKygxNTArbGluZSoyKSptYWNfcm93Ynl0ZXMpCi0JCSAgICArODAqcGVuZzsKLQotCXBwdHIgPSBwZW5nb2Zmc2V0OwotCi0JZm9yIChpID0gMDsgaSA8IDggKiBzaXplb2YobG9uZyk7IGkrKykgeyAvKiAjIG9mIGJpdHMgKi8KLQkJKnBwdHIrKyA9IChhZGRyICYgKDEgPDwgKDgqc2l6ZW9mKGxvbmcpLWktMSkpID8gMHhGRiA6IDB4MDApOwotCX0KLQotCXBlbmcrKzsKLQotCWlmIChwb3MpIHsKLQkJbGluZSsrOwotCQlwZW5nID0gMDsKLQl9Ci0jZW5kaWYKLX0KLQotI2VuZGlmICAvKiAgMCAgKi8KLQotI2lmZGVmIERFQlVHX1NFUklBTAotLyoKLSAqIFRPRE86IHNlcmlhbCBkZWJ1ZyBjb2RlCi0gKi8KLQotc3RydWN0IG1hY19TQ0MgewotCXVfY2hhciBjaGFfYl9jdHJsOwotCXVfY2hhciBjaGFyX2R1bW15MTsKLQl1X2NoYXIgY2hhX2FfY3RybDsKLQl1X2NoYXIgY2hhcl9kdW1teTI7Ci0JdV9jaGFyIGNoYV9iX2RhdGE7Ci0JdV9jaGFyIGNoYXJfZHVtbXkzOwotCXVfY2hhciBjaGFfYV9kYXRhOwotfTsKLQotIyBkZWZpbmUgc2NjICgqKCh2b2xhdGlsZSBzdHJ1Y3QgbWFjX1NDQyopbWFjX2JpX2RhdGEuc2NjYmFzZSkpCi0KLXN0YXRpYyBpbnQgc2NjX3BvcnQgPSAtMTsKLQotc3RhdGljIHN0cnVjdCBjb25zb2xlIG1hY19jb25zb2xlX2RyaXZlciA9IHsKLQkubmFtZQk9ICJkZWJ1ZyIsCi0JLmZsYWdzCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAk9IC0xLAotfTsKLQotLyoKLSAqIENydWRlIGhhY2sgdG8gZ2V0IGNvbnNvbGUgb3V0cHV0IHRvIHRoZSBzY3JlZW4gYmVmb3JlIHRoZSBmcmFtZWJ1ZmZlcgotICogaXMgaW5pdGlhbGl6ZWQgKGhhcHBlbnMgYSBsb3QgbGF0ZXIgaW4gMi4xISkuCi0gKiBXZSBqdXN0IHVzZSB0aGUgY29uc29sZSByb3V0aW5lcyBkZWNsYXJlZCBpbiBoZWFkLlMsIHRoaXMgd2lsbCBpbnRlcmZlcmUKLSAqIHdpdGggcmVndWxhciBmcmFtZWJ1ZmZlciBjb25zb2xlIG91dHB1dCBhbmQgc2hvdWxkIGJlIHVzZWQgZXhjbHVzaXZlbHkKLSAqIHRvIGRlYnVnIGtlcm5lbCBwcm9ibGVtcyBtYW5pZmVzdGluZyBiZWZvcmUgZnJhbWVidWZmZXIgaW5pdCAoYWthIFdTT0QpCi0gKgotICogVG8ga2VlcCB0aGlzIGhhY2sgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSByZWd1bGFyIGNvbnNvbGUgZHJpdmVyLCBlaXRoZXIKLSAqIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgYmVmb3JlL29uIGZyYW1lYnVmZmVyIGNvbnNvbGUgaW5pdCwgb3Igc2lsZW5jZSB0aGlzCi0gKiBmdW5jdGlvbiBhZnRlciB0aGUgZmJjb24gZHJpdmVyIGlzIHJ1bm5pbmcgKHdpbGwgbG9zZSBjb25zb2xlIG1lc3NhZ2VzIT8pLgotICogVG8gZGVidWcgcmVhbCBlYXJseSBidWdzLCBuZWVkIHRvIHdyaXRlIGEgJ21hY19yZWdpc3Rlcl9jb25zb2xlX2hhY2soKScKLSAqIHRoYXQgaXMgY2FsbGVkIGZyb20gc3RhcnRfa2VybmVsKCkgYmVmb3JlIHNldHVwX2FyY2goKSBhbmQganVzdCByZWdpc3RlcnMKLSAqIHRoaXMgZHJpdmVyIGlmIE1hYy4KLSAqLwotCi1zdGF0aWMgdm9pZCBtYWNfZGVidWdfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCW1hY19zZXJpYWxfcHJpbnQoc3RyKTsKLX0KLQotCi0KLS8qIE1hYzogbG9vcHNfcGVyX2ppZmZ5IG1pbi4gMTkwMDAgXj0gLjUgdXM7IE1GUERFTEFZIHdhcyAwLjYgdXMqLwotCi0jZGVmaW5lIHVTRUMgMQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjX3NjY2Jfb3V0KGNoYXIgYykKLXsKLQlpbnQgaTsKLQotCWRvIHsKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICghKHNjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KLQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQliYXJyaWVyKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjX3NjY2Ffb3V0KGNoYXIgYykKLXsKLQlpbnQgaTsKLQotCWRvIHsKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICghKHNjYy5jaGFfYV9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KLQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQliYXJyaWVyKCk7Ci0Jc2NjLmNoYV9hX2RhdGEgPSBjOwotfQotCi1zdGF0aWMgdm9pZCBtYWNfc2NjYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQl3aGlsZSAoY291bnQtLSkgewotCQlpZiAoKnN0ciA9PSAnXG4nKQotCQkJbWFjX3NjY2Jfb3V0KCdccicpOwotCQltYWNfc2NjYl9vdXQoKnN0cisrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19zY2NhX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlmICgqc3RyID09ICdcbicpCi0JCQltYWNfc2NjYV9vdXQoJ1xyJyk7Ci0JCW1hY19zY2NhX291dCgqc3RyKyspOwotCX0KLX0KLQotCi0vKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgZG8gYSBxdWljayduJ2RpcnR5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRlAgb3IKLSAqIFNDQyBzZXJpYWwgcG9ydHMuIFRoZXkncmUgdXNlZCBieSB0aGUgZGVidWdnaW5nIGludGVyZmFjZSwga2dkYiwgYW5kIHRoZQotICogc2VyaWFsIGNvbnNvbGUgY29kZS4gKi8KLSNkZWZpbmUgU0NDQl9XUklURShyZWcsdmFsKQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaW50IGk7CQkJCQlcCi0JCXNjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBTQ0NBX1dSSVRFKHJlZyx2YWwpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJc2NjLmNoYV9hX2N0cmwgPSAocmVnKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCQlzY2MuY2hhX2FfY3RybCA9ICh2YWwpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JfSB3aGlsZSgwKQotCi0vKiBsb29wc19wZXJfamlmZnkgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBzbyB3ZSBjYW4ndCB1c2UgdWRlbGF5KCkuIFRoaXMgZG9lcyBhCi0gKiBkZWxheSBvZiB+IDYwdXMuICovCi0vKiBNYWM6IGxvb3BzX3Blcl9qaWZmeSBtaW4uIDE5MDAwIF49IC41IHVzOyBNRlBERUxBWSB3YXMgMC42IHVzKi8KLSNkZWZpbmUgTE9OR19ERUxBWSgpCQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaW50IGk7CQkJCQlcCi0JCWZvciAoaSA9IDYwKnVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCSAgICBiYXJyaWVyKCk7CQkJCVwKLQl9IHdoaWxlKDApCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBtYWNfaW5pdF9zY2NfcG9ydChpbnQgY2ZsYWcsIGludCBwb3J0KQotewotCS8qCi0JICogYmF1ZCByYXRlczogMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkuMmssIDM4LjRrLCA1Ny42aywgMTE1LjJrCi0JICovCi0KLQlzdGF0aWMgaW50IGNsa3NyY190YWJsZVs5XSA9Ci0JCS8qIHJlZyAxMTogMHg1MCA9IEJSRywgMHgwMCA9IFJUeEMsIDB4MjggPSBUUnhDICovCi0JCXsgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBpbnQgY2xrbW9kZV90YWJsZVs5XSA9Ci0JCS8qIHJlZyA0OiAweDQwID0geDE2LCAweDgwID0geDMyLCAweGMwID0geDY0ICovCi0JCXsgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHhjMCwgMHg4MCB9OwotCXN0YXRpYyBpbnQgZGl2X3RhYmxlWzldID0KLQkJLyogcmVnMTIgKEJSRyBsb3cpICovCi0JCXsgOTQsIDYyLCA0NiwgMjIsIDEwLCA0LCAxLCAwLCAwIH07Ci0KLQlpbnQgYmF1ZCA9IGNmbGFnICYgQ0JBVUQ7Ci0JaW50IGNsa3NyYywgY2xrbW9kZSwgZGl2LCByZWczLCByZWc1OwotCi0JaWYgKGNmbGFnICYgQ0JBVURFWCkKLQkJYmF1ZCArPSBCMzg0MDA7Ci0JaWYgKGJhdWQgPCBCMTIwMCB8fCBiYXVkID4gQjM4NDAwKzIpCi0JCWJhdWQgPSBCOTYwMDsgLyogdXNlIGRlZmF1bHQgOTYwMGJwcyBmb3Igbm9uLWltcGxlbWVudGVkIHJhdGVzICovCi0JYmF1ZCAtPSBCMTIwMDsgLyogdGFibGVzIHN0YXJ0cyBhdCAxMjAwYnBzICovCi0KLQljbGtzcmMgID0gY2xrc3JjX3RhYmxlW2JhdWRdOwotCWNsa21vZGUgPSBjbGttb2RlX3RhYmxlW2JhdWRdOwotCWRpdiAgICAgPSBkaXZfdGFibGVbYmF1ZF07Ci0KLQlyZWczID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4YzAgOiAweDQwKTsKLQlyZWc1ID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4NjAgOiAweDIwKSB8IDB4ODIgLyogYXNzZXJ0IERUUi9SVFMgKi87Ci0KLQlpZiAocG9ydCA9PSAxKSB7Ci0JCSh2b2lkKXNjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwotCQlTQ0NCX1dSSVRFKDksIDB4YzApOwkvKiByZXNldCAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0JfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8Ci0JCQkgICAweDA0IC8qIDEgc3RvcGJpdCAqLyB8Ci0JCQkgICBjbGttb2RlKTsKLQkJU0NDQl9XUklURSgzLCByZWczKTsKLQkJU0NDQl9XUklURSg1LCByZWc1KTsKLQkJU0NDQl9XUklURSg5LCAwKTsJLyogbm8gaW50ZXJydXB0cyAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0JfV1JJVEUoMTAsIDApOwkvKiBOUlogbW9kZSAqLwotCQlTQ0NCX1dSSVRFKDExLCBjbGtzcmMpOwkvKiBtYWluIGNsb2NrIHNvdXJjZSAqLwotCQlTQ0NCX1dSSVRFKDEyLCBkaXYpOwkvKiBCUkcgdmFsdWUgKi8KLQkJU0NDQl9XUklURSgxMywgMCk7CS8qIEJSRyBoaWdoIGJ5dGUgKi8KLQkJU0NDQl9XUklURSgxNCwgMSk7Ci0JCVNDQ0JfV1JJVEUoMywgcmVnMyB8IDEpOwotCQlTQ0NCX1dSSVRFKDUsIHJlZzUgfCA4KTsKLQl9IGVsc2UgaWYgKHBvcnQgPT0gMCkgewotCQkodm9pZClzY2MuY2hhX2FfY3RybDsJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KLQkJU0NDQV9XUklURSg5LCAweGMwKTsJLyogcmVzZXQgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NBX1dSSVRFKDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKSA6IDAgfAotCQkJICAweDA0IC8qIDEgc3RvcGJpdCAqLyB8Ci0JCQkgIGNsa21vZGUpOwotCQlTQ0NBX1dSSVRFKDMsIHJlZzMpOwotCQlTQ0NBX1dSSVRFKDUsIHJlZzUpOwotCQlTQ0NBX1dSSVRFKDksIDApOwkvKiBubyBpbnRlcnJ1cHRzICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQV9XUklURSgxMCwgMCk7CS8qIE5SWiBtb2RlICovCi0JCVNDQ0FfV1JJVEUoMTEsIGNsa3NyYyk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCi0JCVNDQ0FfV1JJVEUoMTIsIGRpdik7CS8qIEJSRyB2YWx1ZSAqLwotCQlTQ0NBX1dSSVRFKDEzLCAwKTsJLyogQlJHIGhpZ2ggYnl0ZSAqLwotCQlTQ0NBX1dSSVRFKDE0LCAxKTsKLQkJU0NDQV9XUklURSgzLCByZWczIHwgMSk7Ci0JCVNDQ0FfV1JJVEUoNSwgcmVnNSB8IDgpOwotCX0KLX0KLSNlbmRpZiAvKiBERUJVR19TRVJJQUwgKi8KLQotc3RhdGljIGludCBfX2luaXQgbWFjX2RlYnVnX3NldHVwKGNoYXIgKmFyZykKLXsKLQlpZiAoIU1BQ0hfSVNfTUFDKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIERFQlVHX1NFUklBTAotCWlmICghc3RyY21wKGFyZywgInNlciIpIHx8ICFzdHJjbXAoYXJnLCAic2VyMSIpKSB7Ci0JCS8qIE1hYyBtb2RlbSBwb3J0ICovCi0JCW1hY19pbml0X3NjY19wb3J0KEI5NjAwfENTOCwgMCk7Ci0JCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19zY2NhX2NvbnNvbGVfd3JpdGU7Ci0JCXNjY19wb3J0ID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic2VyMiIpKSB7Ci0JCS8qIE1hYyBwcmludGVyIHBvcnQgKi8KLQkJbWFjX2luaXRfc2NjX3BvcnQoQjk2MDB8Q1M4LCAxKTsKLQkJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2JfY29uc29sZV93cml0ZTsKLQkJc2NjX3BvcnQgPSAxOwotCX0KLSNlbmRpZgotI2lmZGVmIERFQlVHX0hFQURTCi0JaWYgKCFzdHJjbXAoYXJnLCAic2NuIikgfHwgIXN0cmNtcChhcmcsICJjb24iKSkgewotCQkvKiBkaXNwbGF5LCB1c2luZyBoZWFkLlMgY29uc29sZSByb3V0aW5lcyAqLwotCQltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfZGVidWdfY29uc29sZV93cml0ZTsKLQl9Ci0jZW5kaWYKLQlpZiAobWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlKQotCQlyZWdpc3Rlcl9jb25zb2xlKCZtYWNfY29uc29sZV9kcml2ZXIpOwotCXJldHVybiAwOwotfQotCi1lYXJseV9wYXJhbSgiZGVidWciLCBtYWNfZGVidWdfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMgYi9hcmNoL202OGsvbWFjL21hY2ludHMuYwppbmRleCAyMzcxMTA3NC4uOTAwZDg5OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKKysrIGIvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKQEAgLTM0LDkgKzM0LDcgQEAKICAqCiAgKgkzCS0gdW51c2VkICg/KQogICoKLSAqCTQJLSBTQ0MgKHNsb3QgbnVtYmVyIGRldGVybWluZWQgYnkgcmVhZGluZyBSUjMgb24gdGhlIFNTQyBpdHNlbGYpCi0gKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQQotICoJCSAgLSBzbG90IDI6IFNDQyBjaGFubmVsIEIKKyAqCTQJLSBTQ0MKICAqCiAgKgk1CS0gdW51c2VkICg/KQogICoJCSAgW3NlcmlhbCBlcnJvcnMgb3Igc3BlY2lhbCBjb25kaXRpb25zIHNlZW0gdG8gcmFpc2UgbGV2ZWwgNgpAQCAtNTUsOCArNTMsNiBAQAogICoJCSAgLSBzbG90IDU6IFNsb3QgJEUKICAqCiAgKgk0CS0gU0NDIElPUAotICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKLSAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCiAgKgogICoJNQktIElTTSBJT1AgKEFEQj8pCiAgKgpAQCAtMTM2LDEzICsxMzIsOCBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CiAKLSNkZWZpbmUgREVCVUdfU1BVUklPVVMKICNkZWZpbmUgU0hVVFVQX1NPTklDCiAKLS8qIFNDQyBpbnRlcnJ1cHQgbWFzayAqLwotCi1zdGF0aWMgaW50IHNjY19tYXNrOwotCiAvKgogICogVklBL1JCViBob29rcwogICovCkBAIC0xOTEsMTMgKzE4Miw2IEBACiBleHRlcm4gdm9pZCBiYWJvb25faXJxX2NsZWFyKGludCk7CiAKIC8qCi0gKiBTQ0MgaW50ZXJydXB0IHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHZvaWQgc2NjX2lycV9lbmFibGUodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIHNjY19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQpOwotCi0vKgogICogY29uc29sZV9sb2dsZXZlbCBkZXRlcm1pbmVzIE5NSSBoYW5kbGVyIGZ1bmN0aW9uCiAgKi8KIApAQCAtMjIxLDggKzIwNSw2IEBACiAjaWZkZWYgREVCVUdfTUFDSU5UUwogCXByaW50aygibWFjX2luaXRfSVJRKCk6IFNldHRpbmcgdGhpbmdzIHVwLi4uXG4iKTsKICNlbmRpZgotCXNjY19tYXNrID0gMDsKLQogCW02OGtfc2V0dXBfaXJxX2NvbnRyb2xsZXIoJm1hY19pcnFfY29udHJvbGxlciwgSVJRX1VTRVIsCiAJCQkJICBOVU1fTUFDX1NPVVJDRVMgLSBJUlFfVVNFUik7CiAJLyogTWFrZSBzdXJlIHRoZSBTT05JQyBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBvciB0aGluZ3MgZ2V0IHVnbHkgKi8KQEAgLTI4MywxNSArMjY1LDE2IEBACiAJCQl2aWFfaXJxX2VuYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKIAkJCXBzY19pcnFfZW5hYmxlKGlycSk7CiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJb3NzX2lycV9lbmFibGUoaXJxKTsKLQkJZWxzZSBpZiAoaXJxX3NyYyA9PSA0KQotCQkJc2NjX2lycV9lbmFibGUoaXJxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX2VuYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKQEAgLTMxNiwxNSArMjk5LDE2IEBACiAJCQl2aWFfaXJxX2Rpc2FibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCiAJCQlwc2NfaXJxX2Rpc2FibGUoaXJxKTsKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlvc3NfaXJxX2Rpc2FibGUoaXJxKTsKLQkJZWxzZSBpZiAoaXJxX3NyYyA9PSA0KQotCQkJc2NjX2lycV9kaXNhYmxlKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9kaXNhYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKGJhYm9vbl9wcmVzZW50KQpAQCAtMzQ3LDcgKzMzMSw2IEBACiAJCQl2aWFfaXJxX2NsZWFyKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQpAQCAtMzU1LDYgKzMzOCwxMCBAQAogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCW9zc19pcnFfY2xlYXIoaXJxKTsKIAkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX2NsZWFyKGlycSk7CisJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKGJhYm9vbl9wcmVzZW50KQogCQkJYmFib29uX2lycV9jbGVhcihpcnEpOwpAQCAtMzc0LDEzICszNjEsMTcgQEAKIAkJZWxzZQogCQkJcmV0dXJuIHZpYV9pcnFfcGVuZGluZyhpcnEpOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQogCQkJcmV0dXJuIHBzY19pcnFfcGVuZGluZyhpcnEpOwogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCXJldHVybiBvc3NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDQ4LDU5ICs0MzksMyBAQAogCWluX25taS0tOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KLQotLyoKLSAqIFNpbXBsZSByb3V0aW5lcyBmb3IgbWFza2luZyBhbmQgdW5tYXNraW5nCi0gKiBTQ0MgaW50ZXJydXB0cyBpbiBjYXNlcyB3aGVyZSB0aGlzIGNhbid0IGJlCi0gKiBkb25lIGluIGhhcmR3YXJlIChvbmx5IHRoZSBQU0MgY2FuIGRvIHRoYXQuKQotICovCi0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGlycV9pZHggPSBJUlFfSURYKGlycSk7Ci0KLQlzY2NfbWFzayB8PSAoMSA8PCBpcnFfaWR4KTsKLX0KLQotc3RhdGljIHZvaWQgc2NjX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGlycV9pZHggPSBJUlFfSURYKGlycSk7Ci0KLQlzY2NfbWFzayAmPSB+KDEgPDwgaXJxX2lkeCk7Ci19Ci0KLS8qCi0gKiBTQ0MgbWFzdGVyIGludGVycnVwdCBoYW5kbGVyLiBXZSBoYXZlIHRvIGRvIGEgYml0IG9mIG1hZ2ljIGhlcmUKLSAqIHRvIGZpZ3VyZSBvdXQgd2hhdCBjaGFubmVsIGdhdmUgdXMgdGhlIGludGVycnVwdDsgcHV0dGluZyB0aGlzCi0gKiBoZXJlIGlzIGNsZWFuZXIgdGhhbiBoYWNraW5nIGl0IGludG8gZHJpdmVycy9jaGFyL21hY3NlcmlhbC5jLgotICovCi0KLXZvaWQgbWFjX3NjY19kaXNwYXRjaChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc2NjID0gKHVuc2lnbmVkIGNoYXIgKikgbWFjX2JpX2RhdGEuc2NjYmFzZSArIDI7Ci0JdW5zaWduZWQgY2hhciByZWc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFJlYWQgUlIzIGZyb20gdGhlIGNoaXAuIEFsd2F5cyBkbyB0aGlzIG9uIGNoYW5uZWwgQSAqLwotCS8qIFRoaXMgbXVzdCBiZSBhbiBhdG9taWMgb3BlcmF0aW9uIHNvIGRpc2FibGUgaXJxcy4gICAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSpzY2MgPSAzOwotCXJlZyA9ICpzY2M7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogTm93IGRpc3BhdGNoLiBCaXRzIDAtMiBhcmUgZm9yIGNoYW5uZWwgQiBhbmQgKi8KLQkvKiBiaXRzIDMtNSBhcmUgZm9yIGNoYW5uZWwgQS4gV2UgY2FuIHNhZmVseSAgICAqLwotCS8qIGlnbm9yZSB0aGUgcmVtYWluaW5nIGJpdHMgaGVyZS4gICAgICAgICAgICAgICovCi0JLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiBOb3RlIHRoYXQgd2UncmUgaWdub3Jpbmcgc2NjX21hc2sgZm9yIG5vdy4gICAqLwotCS8qIElmIHdlIGFjdHVhbGx5IG1hc2sgdGhlIGludHMgdGhlbiB3ZSB0ZW5kIHRvICovCi0JLyogZ2V0IGhhbW1lcmVkIGJ5IHZlcnkgcGVyc2lzdGVudCBTQ0MgaXJxcywgICAgKi8KLQkvKiBhbmQgc2luY2UgdGhleSdyZSBhdXRvdmVjdG9yIGludGVycnVwdHMgdGhleSAqLwotCS8qIHByZXR0eSBtdWNoIGtpbGwgdGhlIHN5c3RlbS4gICAgICAgICAgICAgICAgICovCi0KLQlpZiAocmVnICYgMHgzOCkKLQkJbTY4a19oYW5kbGVfaW50KElSUV9TQ0NBKTsKLQlpZiAocmVnICYgMHgwNykKLQkJbTY4a19oYW5kbGVfaW50KElSUV9TQ0NCKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvb3NzLmMgYi9hcmNoL202OGsvbWFjL29zcy5jCmluZGV4IGYzZDIzZDYuLmE5YzBmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvb3NzLmMKKysrIGIvYXJjaC9tNjhrL21hYy9vc3MuYwpAQCAtMzMsNyArMzMsNiBAQAogc3RhdGljIGlycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50LCB2b2lkICopOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhMV9pcnEoaW50LCB2b2lkICopOwotZXh0ZXJuIGlycXJldHVybl90IG1hY19zY2NfZGlzcGF0Y2goaW50LCB2b2lkICopOwogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgT1NTCkBAIC02OSw5ICs2OCw2IEBACiAJaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfU0NTSSwgb3NzX2lycSwgSVJRX0ZMR19MT0NLLAogCQkJInNjc2kiLCAodm9pZCAqKSBvc3MpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInNjc2kiKTsKLQlpZiAocmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9JT1BTQ0MsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKLQkJCSJzY2MiLCBtYWNfc2NjX2Rpc3BhdGNoKSkKLQkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY2MiKTsKIAlpZiAocmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9OVUJVUywgb3NzX251YnVzX2lycSwgSVJRX0ZMR19MT0NLLAogCQkJIm51YnVzIiwgKHZvaWQgKikgb3NzKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJudWJ1cyIpOwpAQCAtMTcyLDkgKzE2OCw3IEBACiAJcHJpbnRrKCJvc3NfaXJxX2VuYWJsZSglZClcbiIsIGlycSk7CiAjZW5kaWYKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BTQ0NdID0gT1NTX0lSUUxFVl9JT1BTQ0M7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKQEAgLTIxMiw5ICsyMDYsNyBAQAogCXByaW50aygib3NzX2lycV9kaXNhYmxlKCVkKVxuIiwgaXJxKTsKICNlbmRpZgogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJb3NzLT5pcnFfbGV2ZWxbT1NTX0lPUFNDQ10gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yNTAsOSArMjQyLDcgQEAKIHZvaWQgb3NzX2lycV9jbGVhcihpbnQgaXJxKSB7CiAJLyogRklYTUU6IGhvdyB0byBkbyB0aGlzIG9uIE9TUz8gKi8KIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfk9TU19JUF9JT1BTQ0M7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKQEAgLTI4MCw5ICsyNzAsNyBAQAogaW50IG9zc19pcnFfcGVuZGluZyhpbnQgaXJxKQogewogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJcmV0dXJuIG9zcy0+aXJxX3BlbmRpbmcgJiBPU1NfSVBfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwppbmRleCAxMWJjZTNjLi5lNzExNjZkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3ZpYS5jCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTg0LDggKzg0LDYgQEAKIHZvaWQgdmlhX2lycV9kaXNhYmxlKGludCBpcnEpOwogdm9pZCB2aWFfaXJxX2NsZWFyKGludCBpcnEpOwogCi1leHRlcm4gaXJxcmV0dXJuX3QgbWFjX3NjY19kaXNwYXRjaChpbnQsIHZvaWQgKik7Ci0KIC8qCiAgKiBJbml0aWFsaXplIHRoZSBWSUFzCiAgKgpAQCAtMzExLDExICszMDksNiBAQAogCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT18yLCB2aWEyX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKIAkJCSJ2aWEyIiwgKHZvaWQgKikgdmlhMikpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAidmlhMiIpOwotCWlmICghcHNjX3ByZXNlbnQpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKElSUV9BVVRPXzQsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKLQkJCQkic2NjIiwgbWFjX3NjY19kaXNwYXRjaCkpCi0JCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInNjYyIpOwotCX0KIAlpZiAocmVxdWVzdF9pcnEoSVJRX01BQ19OVUJVUywgdmlhX251YnVzX2lycSwKIAkJCUlSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsICJudWJ1cyIsICh2b2lkICopIHZpYTIpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgIm51YnVzIik7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0va21hcC5jIGIvYXJjaC9tNjhrL21tL2ttYXAuYwppbmRleCBkZjYyMGFjLi42OTM0NTg0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0va21hcC5jCisrKyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKQEAgLTk5LDggKzk5LDcgQEAKICNlbmRpZgogCiAvKgotICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCi0gKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KICAqLwogLyogUmV3cml0dGVuIGJ5IEFuZHJlYXMgU2Nod2FiIHRvIHJlbW92ZSBhbGwgcmFjZXMuICovCiAKQEAgLTExNiw3ICsxMTUsNyBAQAogCS8qCiAJICogRG9uJ3QgYWxsb3cgbWFwcGluZ3MgdGhhdCB3cmFwLi4KIAkgKi8KLQlpZiAoIXNpemUgfHwgc2l6ZSA+IHBoeXNhZGRyICsgc2l6ZSkKKwlpZiAoIXNpemUgfHwgcGh5c2FkZHIgPiAodW5zaWduZWQgbG9uZykoLXNpemUpKQogCQlyZXR1cm4gTlVMTDsKIAogI2lmZGVmIENPTkZJR19BTUlHQQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWM5ZWNkNC4uOTU5Y2IyNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMjEsNiArMjIxLDEwIEBACiAKIAlwLT50aHJlYWQudXNwID0gdXNwOwogCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHN0YWNrOworCisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQorCQl0YXNrX3RocmVhZF9pbmZvKHApLT50cF92YWx1ZSA9IHJlZ3MtPmQ1OworCiAJLyoKIAkgKiBNdXN0IHNhdmUgdGhlIGN1cnJlbnQgU0ZDL0RGQyB2YWx1ZSwgTk9UIHRoZSB2YWx1ZSB3aGVuCiAJICogdGhlIHBhcmVudCB3YXMgbGFzdCBkZXNjaGVkdWxlZCAtIFJHSCAgMTAtMDgtOTYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ZDM4Mjg5Li44NWVkMmY5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCkBAIC0zMTksNiArMzE5LDExIEBACiAJCX0KICNlbmRpZgogCisJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorCQlyZXQgPSBwdXRfdXNlcih0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+dHBfdmFsdWUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRUlPOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCmluZGV4IGI2N2NiYzcuLjkyM2RkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCkBAIC0xOTAsMyArMTkwLDM5IEBACiAJCQk6ICJkIiAoX19hKSwgImQiIChfX2IpLCAiZCIgKF9fYykpOwogCXJldHVybiBfX3JlczsKIH0KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19nZXRfdGhyZWFkX2FyZWEodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX3NldF90aHJlYWRfYXJlYSh1bnNpZ25lZCBsb25nIHRwKQoreworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWUgPSB0cDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzeXNjYWxsIGdldHMgaXRzIGFyZ3VtZW50cyBpbiBBMCAobWVtKSwgRDIgKG9sZHZhbCkgYW5kCisgICBEMSAobmV3dmFsKS4gICovCithc21saW5rYWdlIGludAorc3lzX2F0b21pY19jbXB4Y2hnXzMyKHVuc2lnbmVkIGxvbmcgbmV3dmFsLCBpbnQgb2xkdmFsLCBpbnQgZDMsIGludCBkNCwgaW50IGQ1LAorCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqIG1lbSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXVuc2lnbmVkIGxvbmcgbWVtX3ZhbHVlOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJbWVtX3ZhbHVlID0gKm1lbTsKKwlpZiAobWVtX3ZhbHVlID09IG9sZHZhbCkKKwkJKm1lbSA9IG5ld3ZhbDsKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIG1lbV92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2F0b21pY19iYXJyaWVyKHZvaWQpCit7CisJLyogbm8gY29kZSBuZWVkZWQgZm9yIHVuaXByb2NzICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggNDg2ODM3ZS4uNTZkZDAxZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMzUxLDYgKzM1MSwxMCBAQAogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KIAkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCisJLmxvbmcgc3lzX2dldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfYXRvbWljX2NtcHhjaGdfMzIJLyogMzM1ICovCisJLmxvbmcgc3lzX2F0b21pY19iYXJyaWVyCiAKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1zeXNfY2FsbF90YWJsZSkvNAogCQkubG9uZyBzeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMgYi9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYwppbmRleCBmOTNiODhiLi5kNWI5ZTEzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYworKysgYi9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYwpAQCAtMjQsNyArMjQsNiBAQAogCiAvKgogICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KLSAqIFRoZSBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgogICovCiAKIHVuc2lnbmVkIGxvbmcga2VybmVsX21hcCh1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IGNkNTgzN2UuLmIwMDgxNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC0xMzAsNiArMTMwLDcgQEAKIAogY29uZmlnIE9GCiAJZGVmX2Jvb2wgeQorCXNlbGVjdCBPRl9GTEFUVFJFRQogCiBjb25maWcgUFJPQ19ERVZJQ0VUUkVFCiAJYm9vbCAiU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgaW4gL3Byb2MiCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZW50cnkuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbnRyeS5oCmluZGV4IDYxYWJiZDIuLmVjODlmMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbnRyeS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbnRyeS5oCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBwbGFjZXMKICAqLwogCi0jZGVmaW5lIFBFUl9DUFUodmFyKSBwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBQRVJfQ1BVKHZhcikgdmFyCiAKICMgaWZuZGVmIF9fQVNTRU1CTFlfXwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgS1NQKTsgLyogU2F2ZWQga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCmluZGV4IGVmM2VjMWQuLjAzZjQ1YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaApAQCAtMjYsMzEgKzI2LDExIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2RlZmluZSBPRl9ST09UX05PREVfQUREUl9DRUxMU19ERUZBVUxUCTEKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVAkxCi0KLSNkZWZpbmUgb2ZfY29tcGF0X2NtcChzMSwgczIsIGwpCXN0cm5jYXNlY21wKChzMSksIChzMiksIChsKSkKLSNkZWZpbmUgb2ZfcHJvcF9jbXAoczEsIHMyKQkJc3RyY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX25vZGVfY21wKHMxLCBzMikJCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwotCiAjZGVmaW5lIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUwogCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLWV4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLS8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLwotZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotCiAvKiBPdGhlciBQcm90b3R5cGVzICovCiBleHRlcm4gaW50IGVhcmx5X3VhcnRsaXRlX2NvbnNvbGUodm9pZCk7CiAKLWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKnJlcXVlc3RfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZV9wb3N0Zml4KTsKLWV4dGVybiBpbnQgcmVsZWFzZV9PRl9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGludCBpbmRleCk7Ci0KIC8qCiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggZWIzMWEwZS4uMTBlYzcwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zOCw3ICszOCw3IEBACiAKICNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCkJZG8geyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGZsdXNoX3RsYl9hbGwgbG9jYWxfZmx1c2hfdGxiX2FsbAogI2RlZmluZSBmbHVzaF90bGJfbW0gbG9jYWxfZmx1c2hfdGxiX21tCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggYWNmNDU3NC4uMWM2ZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiBzdGF0aWMgaW50IG9mX2Rldl9waGFuZGxlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlwaGFuZGxlICpwaCA9IGRhdGE7Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5saW51eF9waGFuZGxlID09ICpwaDsKKwlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPnBoYW5kbGUgPT0gKnBoOwogfQogCiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCmluZGV4IGI4MTdkZjEuLmExNWVmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCkBAIC00Miw2OTggKzQyLDIxIEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3RfYWRkcl9jZWxsczsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X3NpemVfY2VsbHM7Ci0KLXR5cGVkZWYgdTMyIGNlbGxfdDsKLQotc3RhdGljIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKLQotLyogZXhwb3J0IHRoYXQgdG8gb3V0c2lkZSB3b3JsZCAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KQordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKLQlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncyArIG9mZnNldDsKKwkvKiBObyBNaWNyb2JsYXplIHNwZWNpZmljIGNvZGUgaGVyZSAqLwogfQogCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY2FuIHRoZSBmbGF0dGVuZWQgZGV2aWNlLXRyZWUsIGl0IGlzCi0gKiB1c2VkIHRvIGV4dHJhY3QgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbnMgYXQgYm9vdCBiZWZvcmUgd2UgY2FuCi0gKiB1bmZsYXR0ZW4gdGhlIHRyZWUKLSAqLwotaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCi0JCQkJICAgICB2b2lkICpkYXRhKSwKLQkJCSAgIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQlpbnQgcmMgPSAwOwotCWludCBkZXB0aCA9IC0xOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCWNoYXIgKnBhdGhwOwotCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgewotCQkJZGVwdGgtLTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQotCQkJYnJlYWs7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgewotCQkJdTMyIHN6ID0gKigodTMyICopcCk7Ci0JCQlwICs9IDg7Ci0JCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOwotCQkJcCArPSBzejsKLQkJCXAgPSBfQUxJR04ocCwgNCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgdGFnICV4IHNjYW5uaW5nIGZsYXR0ZW5lZCIKLQkJCQkiIGRldmljZSB0cmVlICFcbiIsIHRhZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlkZXB0aCsrOwotCQlwYXRocCA9IChjaGFyICopcDsKLQkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOwotCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7Ci0JCQljaGFyICpscCwgKm5wOwotCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKLQkJCQlpZiAoKCpucCkgPT0gJy8nKQotCQkJCQlscCA9IG5wKzE7Ci0JCQlpZiAobHAgIT0gTlVMTCkKLQkJCQlwYXRocCA9IGxwOwotCQl9Ci0JCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQl9IHdoaWxlICgxKTsKLQotCXJldHVybiByYzsKKwlsbWJfYWRkKGJhc2UsIHNpemUpOwogfQogCi11bnNpZ25lZCBsb25nIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpCit1NjQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKIHsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCi0Jd2hpbGUgKCooKHUzMiAqKXApID09IE9GX0RUX05PUCkKLQkJcCArPSA0OwotCUJVR19PTigqKCh1MzIgKilwKSAhPSBPRl9EVF9CRUdJTl9OT0RFKTsKLQlwICs9IDQ7Ci0JcmV0dXJuIF9BTElHTihwICsgc3RybGVuKChjaGFyICopcCkgKyAxLCA0KTsKKwlyZXR1cm4gbG1iX2FsbG9jKHNpemUsIGFsaWduKTsKIH0KIAotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBzY2FuX2ZsYXR0ZW5lZF9kdCBjYWxsYmFjayB0byBnZXQKLSAqIGFjY2VzcyB0byBwcm9wZXJ0aWVzCi0gKi8KLXZvaWQgKl9faW5pdCBvZl9nZXRfZmxhdF9kdF9wcm9wKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQl1bnNpZ25lZCBsb25nICpzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJdTMyIHN6LCBub2ZmOwotCQljb25zdCBjaGFyICpuc3RyOwotCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyAhPSBPRl9EVF9QUk9QKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJc3ogPSAqKCh1MzIgKilwKTsKLQkJbm9mZiA9ICooKHUzMiAqKShwICsgNCkpOwotCQlwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQluc3RyID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKG5zdHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBpbmRleCIKLQkJCQkiIG5hbWUgIVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoc3RyY21wKG5hbWUsIG5zdHIpID09IDApIHsKLQkJCWlmIChzaXplKQotCQkJCSpzaXplID0gc3o7Ci0JCQlyZXR1cm4gKHZvaWQgKilwOwotCQl9Ci0JCXAgKz0gc3o7Ci0JCXAgPSBfQUxJR04ocCwgNCk7Ci0JfSB3aGlsZSAoMSk7Ci19Ci0KLWludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQotewotCWNvbnN0IGNoYXIgKmNwOwotCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7Ci0KLQljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlsID0gc3RybGVuKGNwKSArIDE7Ci0JCWNwICs9IGw7Ci0JCWNwbGVuIC09IGw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQl1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXZvaWQgKnJlczsKLQotCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOwotCXJlcyA9ICh2b2lkICopKm1lbTsKLQkqbWVtICs9IHNpemU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnAsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAotCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAotCQkJCQl1bnNpZ25lZCBsb25nIGZwc2l6ZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7Ci0JY2hhciAqcGF0aHA7Ci0JdTMyIHRhZzsKLQl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOwotCWludCBoYXNfbmFtZSA9IDA7Ci0JaW50IG5ld19mb3JtYXQgPSAwOwotCi0JdGFnID0gKigodTMyICopKCpwKSk7Ci0JaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IHN0YXJ0IG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXBhdGhwID0gKGNoYXIgKikqcDsKLQlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKLQotCS8qIHZlcnNpb24gMHgxMCBoYXMgYSBtb3JlIGNvbXBhY3QgdW5pdCBuYW1lIGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVsbAotCSAqIHBhdGguIHdlIGFjY3VtdWxhdGUgdGhlIGZ1bGwgcGF0aCBzaXplIHVzaW5nICJmcHNpemUiLCB3ZSdsbCByZWJ1aWxkCi0JICogaXQgbGF0ZXIuIFdlIGRldGVjdCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmFtZSBpcwotCSAqIG5vdCAnLycuCi0JICovCi0JaWYgKCgqcGF0aHApICE9ICcvJykgewotCQluZXdfZm9ybWF0ID0gMTsKLQkJaWYgKGZwc2l6ZSA9PSAwKSB7Ci0JCQkvKiByb290IG5vZGU6IHNwZWNpYWwgY2FzZS4gZnBzaXplIGFjY291bnRzIGZvciBwYXRoCi0JCQkgKiBwbHVzIHRlcm1pbmF0aW5nIHplcm8uIHJvb3Qgbm9kZSBvbmx5IGhhcyAnLycsIHNvCi0JCQkgKiBmcHNpemUgc2hvdWxkIGJlIDIsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBmaXJzdAotCQkJICogbGV2ZWwgbm9kZXMgdG8gaGF2ZSB0d28gJy8nIHNvIHdlIHVzZSBmcHNpemUgMSBoZXJlCi0JCQkgKi8KLQkJCWZwc2l6ZSA9IDE7Ci0JCQlhbGxvY2wgPSAyOwotCQl9IGVsc2UgewotCQkJLyogYWNjb3VudCBmb3IgJy8nIGFuZCBwYXRoIHNpemUgbWludXMgdGVybWluYWwgMAotCQkJICogYWxyZWFkeSBpbiAnbCcKLQkJCSAqLwotCQkJZnBzaXplICs9IGw7Ci0JCQlhbGxvY2wgPSBmcHNpemU7Ci0JCX0KLQl9Ci0KLQlucCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKSArIGFsbG9jbCwKLQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgZGV2aWNlX25vZGUpKTsKLQlpZiAoYWxsbmV4dHBwKSB7Ci0JCW1lbXNldChucCwgMCwgc2l6ZW9mKCpucCkpOwotCQlucC0+ZnVsbF9uYW1lID0gKChjaGFyICopbnApICsgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSk7Ci0JCWlmIChuZXdfZm9ybWF0KSB7Ci0JCQljaGFyICpwMiA9IG5wLT5mdWxsX25hbWU7Ci0JCQkvKiByZWJ1aWxkIGZ1bGwgcGF0aCBmb3IgbmV3IGZvcm1hdCAqLwotCQkJaWYgKGRhZCAmJiBkYWQtPnBhcmVudCkgewotCQkJCXN0cmNweShwMiwgZGFkLT5mdWxsX25hbWUpOwotI2lmZGVmIERFQlVHCi0JCQkJaWYgKChzdHJsZW4ocDIpICsgbCArIDEpICE9IGFsbG9jbCkgewotCQkJCQlwcl9kZWJ1ZygiJXM6IHA6ICVkLCBsOiAlZCwgYTogJWRcbiIsCi0JCQkJCQlwYXRocCwgKGludClzdHJsZW4ocDIpLAotCQkJCQkJbCwgYWxsb2NsKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlwMiArPSBzdHJsZW4ocDIpOwotCQkJfQotCQkJKihwMisrKSA9ICcvJzsKLQkJCW1lbWNweShwMiwgcGF0aHAsIGwpOwotCQl9IGVsc2UKLQkJCW1lbWNweShucC0+ZnVsbF9uYW1lLCBwYXRocCwgbCk7Ci0JCXByZXZfcHAgPSAmbnAtPnByb3BlcnRpZXM7Ci0JCSoqYWxsbmV4dHBwID0gbnA7Ci0JCSphbGxuZXh0cHAgPSAmbnAtPmFsbG5leHQ7Ci0JCWlmIChkYWQgIT0gTlVMTCkgewotCQkJbnAtPnBhcmVudCA9IGRhZDsKLQkJCS8qIHdlIHRlbXBvcmFyaWx5IHVzZSB0aGUgbmV4dCBmaWVsZCBhcyBgbGFzdF9jaGlsZCcqLwotCQkJaWYgKGRhZC0+bmV4dCA9PSBOVUxMKQotCQkJCWRhZC0+Y2hpbGQgPSBucDsKLQkJCWVsc2UKLQkJCQlkYWQtPm5leHQtPnNpYmxpbmcgPSBucDsKLQkJCWRhZC0+bmV4dCA9IG5wOwotCQl9Ci0JCWtyZWZfaW5pdCgmbnAtPmtyZWYpOwotCX0KLQl3aGlsZSAoMSkgewotCQl1MzIgc3osIG5vZmY7Ci0JCWNoYXIgKnBuYW1lOwotCi0JCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCQlpZiAodGFnID09IE9GX0RUX05PUCkgewotCQkJKnAgKz0gNDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCWJyZWFrOwotCQkqcCArPSA0OwotCQlzeiA9ICooKHUzMiAqKSgqcCkpOwotCQlub2ZmID0gKigodTMyICopKCgqcCkgKyA0KSk7Ci0JCSpwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOwotCi0JCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKHBuYW1lID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBuYW1lIGluIGxpc3QgIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyY21wKHBuYW1lLCAibmFtZSIpID09IDApCi0JCQloYXNfbmFtZSA9IDE7Ci0JCWwgPSBzdHJsZW4ocG5hbWUpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApIHsKLQkJCQlucC0+bm9kZSA9ICooKHUzMiAqKSpwKTsKLQkJCQlpZiAobnAtPmxpbnV4X3BoYW5kbGUgPT0gMCkKLQkJCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSBucC0+bm9kZTsKLQkJCX0KLQkJCWlmIChzdHJjbXAocG5hbWUsICJpYm0scGhhbmRsZSIpID09IDApCi0JCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSAqKCh1MzIgKikqcCk7Ci0JCQlwcC0+bmFtZSA9IHBuYW1lOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gKHZvaWQgKikqcDsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQl9Ci0JCSpwID0gX0FMSUdOKCgqcCkgKyBzeiwgNCk7Ci0JfQotCS8qIHdpdGggdmVyc2lvbiAweDEwIHdlIG1heSBub3QgaGF2ZSB0aGUgbmFtZSBwcm9wZXJ0eSwgcmVjcmVhdGUKLQkgKiBpdCBoZXJlIGZyb20gdGhlIHVuaXQgbmFtZSBpZiBhYnNlbnQKLQkgKi8KLQlpZiAoIWhhc19uYW1lKSB7Ci0JCWNoYXIgKnAxID0gcGF0aHAsICpwcyA9IHBhdGhwLCAqcGEgPSBOVUxMOwotCQlpbnQgc3o7Ci0KLQkJd2hpbGUgKCpwMSkgewotCQkJaWYgKCgqcDEpID09ICdAJykKLQkJCQlwYSA9IHAxOwotCQkJaWYgKCgqcDEpID09ICcvJykKLQkJCQlwcyA9IHAxICsgMTsKLQkJCXAxKys7Ci0JCX0KLQkJaWYgKHBhIDwgcHMpCi0JCQlwYSA9IHAxOwotCQlzeiA9IChwYSAtIHBzKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpICsgc3osCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlwcC0+bmFtZSA9ICJuYW1lIjsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9IHBwICsgMTsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQkJbWVtY3B5KHBwLT52YWx1ZSwgcHMsIHN6IC0gMSk7Ci0JCQkoKGNoYXIgKilwcC0+dmFsdWUpW3N6IC0gMV0gPSAwOwotCQkJcHJfZGVidWcoImZpeGVkIHVwIG5hbWUgZm9yICVzIC0+ICVzXG4iLCBwYXRocCwKLQkJCQkoY2hhciAqKXBwLT52YWx1ZSk7Ci0JCX0KLQl9Ci0JaWYgKGFsbG5leHRwcCkgewotCQkqcHJldl9wcCA9IE5VTEw7Ci0JCW5wLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQlucC0+dHlwZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0KLQkJaWYgKCFucC0+bmFtZSkKLQkJCW5wLT5uYW1lID0gIjxOVUxMPiI7Ci0JCWlmICghbnAtPnR5cGUpCi0JCQlucC0+dHlwZSA9ICI8TlVMTD4iOwotCX0KLQl3aGlsZSAodGFnID09IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJbWVtID0gdW5mbGF0dGVuX2R0X25vZGUobWVtLCBwLCBucCwgYWxsbmV4dHBwLCBmcHNpemUpOwotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQl9Ci0JaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgewotCQlwcmludGsoS0VSTl9JTkZPICJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXJldHVybiBtZW07Ci19Ci0KLS8qKgotICogdW5mbGF0dGVucyB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgdGhlCi0gKiB0cmVlIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4gSXQgYWxzbyBmaWxscyB0aGUgIm5hbWUiIGFuZCAidHlwZSIKLSAqIHBvaW50ZXJzIG9mIHRoZSBub2RlcyBzbyB0aGUgbm9ybWFsIGRldmljZS10cmVlIHdhbGtpbmcgZnVuY3Rpb25zCi0gKiBjYW4gYmUgdXNlZCAodGhpcyB1c2VkIHRvIGJlIGRvbmUgYnkgZmluaXNoX2RldmljZV90cmVlKQotICovCi12b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0KLQlwcl9kZWJ1ZygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLQotCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KLQlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0Jc2l6ZSA9IHVuZmxhdHRlbl9kdF9ub2RlKDAsICZzdGFydCwgTlVMTCwgTlVMTCwgMCk7Ci0Jc2l6ZSA9IChzaXplIHwgMykgKyAxOwotCi0JcHJfZGVidWcoIiAgc2l6ZSBpcyAlbHgsIGFsbG9jYXRpbmcuLi5cbiIsIHNpemUpOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZXhwYW5kZWQgZGV2aWNlIHRyZWUgKi8KLQltZW0gPSBsbWJfYWxsb2Moc2l6ZSArIDQsIF9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7Ci0KLQkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gMHhkZWFkYmVlZjsKLQotCXByX2RlYnVnKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7Ci0KLQkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQl1bmZsYXR0ZW5fZHRfbm9kZShtZW0sICZzdGFydCwgTlVMTCwgJmFsbG5leHRwLCAwKTsKLQlpZiAoKigodTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLAotCQkJKigodTMyICopc3RhcnQpKTsKLQlpZiAoKCh1MzIgKiltZW0pW3NpemUgLyA0XSAhPSAweGRlYWRiZWVmKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbmQgb2YgdHJlZSBtYXJrZXIgb3ZlcndyaXR0ZW46ICUwOHhcbiIsCi0JCQkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdKTsKLQkqYWxsbmV4dHAgPSBOVUxMOwotCi0JLyogR2V0IHBvaW50ZXIgdG8gT0YgIi9jaG9zZW4iIG5vZGUgZm9yIHVzZSBldmVyeXdoZXJlICovCi0Jb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKLQlpZiAob2ZfY2hvc2VuID09IE5VTEwpCi0JCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKLQotCXByX2RlYnVnKCIgPC0gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOwotfQotCi0jZGVmaW5lIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpIDAKLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2NwdXModW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCi0JCQkJCSAgdm9pZCAqZGF0YSkKLXsKLQlzdGF0aWMgaW50IGxvZ2ljYWxfY3B1aWQ7Ci0JY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JY29uc3QgdTMyICppbnRzZXJ2OwotCWludCBpLCBudGhyZWFkczsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogV2UgYXJlIHNjYW5uaW5nICJjcHUiIG5vZGVzIG9ubHkgKi8KLQlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAiY3B1IikgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBHZXQgcGh5c2ljYWwgY3B1aWQgKi8KLQlpbnRzZXJ2ID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgTlVMTCk7Ci0JbnRocmVhZHMgPSAxOwotCi0JLyoKLQkgKiBOb3cgc2VlIGlmIGFueSBvZiB0aGVzZSB0aHJlYWRzIG1hdGNoIG91ciBib290IGNwdS4KLQkgKiBOT1RFOiBUaGlzIG11c3QgbWF0Y2ggdGhlIHBhcnNpbmcgZG9uZSBpbiBzbXBfc2V0dXBfY3B1X21hcHMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspIHsKLQkJLyoKLQkJICogdmVyc2lvbiAyIG9mIHRoZSBrZXhlYyBwYXJhbSBmb3JtYXQgYWRkcyB0aGUgcGh5cyBjcHVpZCBvZgotCQkgKiBib290ZWQgcHJvYy4KLQkJICovCi0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zICYmIGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPj0gMikgewotCQkJaWYgKGludHNlcnZbaV0gPT0KLQkJCQkJaW5pdGlhbF9ib290X3BhcmFtcy0+Ym9vdF9jcHVpZF9waHlzKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIENoZWNrIGlmIGl0J3MgdGhlIGJvb3QtY3B1LCBzZXQgaXQncyBodyBpbmRleCBub3csCi0JCQkgKiB1bmZvcnR1bmF0ZWx5IHRoaXMgZm9ybWF0IGRpZCBub3Qgc3VwcG9ydCBib290aW5nCi0JCQkgKiBvZmYgc2Vjb25kYXJ5IHRocmVhZHMuCi0JCQkgKi8KLQkJCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJCSJsaW51eCxib290LWNwdSIsIE5VTEwpICE9IE5VTEwpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotI2lmZGVmIENPTkZJR19TTVAKLQkJLyogbG9naWNhbCBjcHUgaWQgaXMgYWx3YXlzIDAgb24gVVAga2VybmVscyAqLwotCQlsb2dpY2FsX2NwdWlkKys7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoZm91bmQpIHsKLQkJcHJfZGVidWcoImJvb3QgY3B1OiBsb2dpY2FsICVkIHBoeXNpY2FsICVkXG4iLCBsb2dpY2FsX2NwdWlkLAotCQkJaW50c2VydltpXSk7Ci0JCWJvb3RfY3B1aWQgPSBsb2dpY2FsX2NwdWlkOwotCX0KLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JdTMyICpwcm9wOwotCi0JcHJfZGVidWcoIkxvb2tpbmcgZm9yIGluaXRyZCBwcm9wZXJ0aWVzLi4uICIpOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1zdGFydCIsICZsKTsKLQlpZiAocHJvcCkgewotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJX192YSgodTMyKW9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0KLQkJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1lbmQiLCAmbCk7Ci0JCWlmIChwcm9wKSB7Ci0JCQlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCV9fdmEoKHUzMilvZl9yZWFkX3Vsb25nKHByb3AsIDEvNCkpOwotCQkJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKLQkJfSBlbHNlIHsKLQkJCWluaXRyZF9zdGFydCA9IDA7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1ZygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLAotCQkJCQlpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgbDsKLQljaGFyICpwOwotCi0JcHJfZGVidWcoInNlYXJjaCBcImNob3NlblwiLCBkZXB0aDogJWQsIHVuYW1lOiAlc1xuIiwgZGVwdGgsIHVuYW1lKTsKLQotCWlmIChkZXB0aCAhPSAxIHx8Ci0JCShzdHJjbXAodW5hbWUsICJjaG9zZW4iKSAhPSAwICYmCi0JCQkJc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKLQkJcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfS0VYRUMKLQlscHJvcCA9ICh1NjQgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJImxpbnV4LGNyYXNoa2VybmVsLWJhc2UiLCBOVUxMKTsKLQlpZiAobHByb3ApCi0JCWNyYXNoa19yZXMuc3RhcnQgPSAqbHByb3A7Ci0KLQlscHJvcCA9ICh1NjQgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJImxpbnV4LGNyYXNoa2VybmVsLXNpemUiLCBOVUxMKTsKLQlpZiAobHByb3ApCi0JCWNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArICpscHJvcCAtIDE7Ci0jZW5kaWYKLQotCWVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZChub2RlKTsKLQotCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLwotCXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJib290YXJncyIsICZsKTsKLQlpZiAocCAhPSBOVUxMICYmIGwgPiAwKQotCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4oKGludClsLCBDT01NQU5EX0xJTkVfU0laRSkpOwotCi0jaWZkZWYgQ09ORklHX0NNRExJTkUKLSNpZm5kZWYgQ09ORklHX0NNRExJTkVfRk9SQ0UKLQlpZiAocCA9PSBOVUxMIHx8IGwgPT0gMCB8fCAobCA9PSAxICYmICgqcCkgPT0gMCkpCi0jZW5kaWYKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JcHJfZGVidWcoIkNvbW1hbmQgbGluZSBpczogJXNcbiIsIGNtZF9saW5lKTsKLQotCS8qIGJyZWFrIG5vdyAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgKnByb3A7Ci0KLQlpZiAoZGVwdGggIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X3NpemVfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDEgOiAqcHJvcDsKLQlwcl9kZWJ1ZygiZHRfcm9vdF9zaXplX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3Rfc2l6ZV9jZWxscyk7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X2FkZHJfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDIgOiAqcHJvcDsKLQlwcl9kZWJ1ZygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgY2VsbF90ICoqY2VsbHApCi17Ci0JY2VsbF90ICpwID0gKmNlbGxwOwotCi0JKmNlbGxwID0gcCArIHM7Ci0JcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCWNlbGxfdCAqcmVnLCAqZW5kcDsKLQl1bnNpZ25lZCBsb25nIGw7Ci0KLQkvKiBMb29rIGZvciB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlICovCi0vKglpZiAoZGVwdGggPT0gMSAmJgotCQlzdHJjbXAodW5hbWUsICJpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IikgPT0gMCkKLQkJcmV0dXJuIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpOwotKi8KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwpIHsKLQkJLyoKLQkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKLQkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgotCQkgKi8KLQkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVnID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHVzYWJsZS1tZW1vcnkiLCAmbCk7Ci0JaWYgKHJlZyA9PSBOVUxMKQotCQlyZWcgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOwotCWlmIChyZWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoY2VsbF90KSk7Ci0KLQlwcl9kZWJ1ZygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCi0JCXVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOwotCi0Jd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgewotCQl1NjQgYmFzZSwgc2l6ZTsKLQotCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOwotCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOwotCi0JCWlmIChzaXplID09IDApCi0JCQljb250aW51ZTsKLQkJcHJfZGVidWcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKLQotCQlsbWJfYWRkKGJhc2UsIHNpemUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKLS8qKgotICogcGh5cF9kdW1wX2NhbGN1bGF0ZV9yZXNlcnZlX3NpemUoKSAtIHJlc2VydmUgdmFyaWFibGUgYm9vdCBhcmVhIDUlIG9yIGFyZwotICoKLSAqIEZ1bmN0aW9uIHRvIGZpbmQgdGhlIGxhcmdlc3Qgc2l6ZSB3ZSBuZWVkIHRvIHJlc2VydmUKLSAqIGR1cmluZyBlYXJseSBib290IHByb2Nlc3MuCi0gKgotICogSXQgZWl0aGVyIGxvb2tzIGZvciBib290IHBhcmFtIGFuZCByZXR1cm5zIHRoYXQgT1IKLSAqIHJldHVybnMgbGFyZ2VyIG9mIDI1NiBvciA1JSByb3VuZGVkIGRvd24gdG8gbXVsdGlwbGVzIG9mIDI1Nk1CLgotICoKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBoeXBfZHVtcF9jYWxjdWxhdGVfcmVzZXJ2ZV9zaXplKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlpZiAocGh5cF9kdW1wX2luZm8tPnJlc2VydmVfYm9vdHZhcikKLQkJcmV0dXJuIHBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlX2Jvb3R2YXI7Ci0KLQkvKiBkaXZpZGUgYnkgMjAgdG8gZ2V0IDUlIG9mIHZhbHVlICovCi0JdG1wID0gbG1iX2VuZF9vZl9EUkFNKCk7Ci0JZG9fZGl2KHRtcCwgMjApOwotCi0JLyogcm91bmQgaXQgZG93biBpbiBtdWx0aXBsZXMgb2YgMjU2ICovCi0JdG1wID0gdG1wICYgfjB4MEZGRkZGRkZVTDsKLQotCXJldHVybiAodG1wID4gUEhZUF9EVU1QX1JNUl9FTkQgPyB0bXAgOiBQSFlQX0RVTVBfUk1SX0VORCk7Ci19Ci0KLS8qKgotICogcGh5cF9kdW1wX3Jlc2VydmVfbWVtKCkgLSByZXNlcnZlIGFsbCBub3QteWV0LWR1bXBlZCBtbWVtb3J5Ci0gKgotICogVGhpcyByb3V0aW5lIG1heSByZXNlcnZlIG1lbW9yeSByZWdpb25zIGluIHRoZSBrZXJuZWwgb25seQotICogaWYgdGhlIHN5c3RlbSBpcyBzdXBwb3J0ZWQgYW5kIGEgZHVtcCB3YXMgdGFrZW4gaW4gbGFzdAotICogYm9vdCBpbnN0YW5jZSBvciBpZiB0aGUgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIGFuZCB0aGUKLSAqIHNjcmF0Y2ggYXJlYSBuZWVkcyB0byBiZSBzZXR1cC4gSW4gb3RoZXIgaW5zdGFuY2VzIGl0IHJldHVybnMKLSAqIHdpdGhvdXQgcmVzZXJ2aW5nIGFueXRoaW5nLiBUaGUgbWVtb3J5IGluIGNhc2Ugb2YgZHVtcCBiZWluZwotICogYWN0aXZlIGlzIGZyZWVkIHdoZW4gdGhlIGR1bXAgaXMgY29sbGVjdGVkIChieSB1c2VybGFuZCB0b29scykuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7Ci0JdW5zaWduZWQgbG9uZyB2YXJpYWJsZV9yZXNlcnZlX3NpemU7Ci0KLQlpZiAoIXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfY29uZmlndXJlZCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBoeXAtZHVtcCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgaGFyZHdhcmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2F0X2Jvb3QpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGh5cC1kdW1wIGRpc2FibGVkIGF0IGJvb3QgdGltZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQl2YXJpYWJsZV9yZXNlcnZlX3NpemUgPSBwaHlwX2R1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSgpOwotCi0JaWYgKHBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfaXNfYWN0aXZlKSB7Ci0JCS8qIFJlc2VydmUgKmV2ZXJ5dGhpbmcqIGFib3ZlIFJNUi5BcmVhIGZyZWVkIGJ5IHVzZXJsYW5kIHRvb2xzKi8KLQkJYmFzZSA9IHZhcmlhYmxlX3Jlc2VydmVfc2l6ZTsKLQkJc2l6ZSA9IGxtYl9lbmRfb2ZfRFJBTSgpIC0gYmFzZTsKLQotCQkvKiBYWFggY3Jhc2hlZF9yYW1fZW5kIGlzIHdyb25nLCBzaW5jZSBpdCBtYXkgYmUgYmV5b25kCi0JCSAqIHRoZSBtZW1vcnlfbGltaXQsIGl0IHdpbGwgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KLQkJbG1iX3Jlc2VydmUoYmFzZSwgc2l6ZSk7Ci0KLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zdGFydCA9IGJhc2U7Ci0JCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSA9IHNpemU7Ci0JfSBlbHNlIHsKLQkJc2l6ZSA9IHBoeXBfZHVtcF9pbmZvLT5jcHVfc3RhdGVfc2l6ZSArCi0JCQlwaHlwX2R1bXBfaW5mby0+aHB0ZV9yZWdpb25fc2l6ZSArCi0JCQl2YXJpYWJsZV9yZXNlcnZlX3NpemU7Ci0JCWJhc2UgPSBsbWJfZW5kX29mX0RSQU0oKSAtIHNpemU7Ci0JCWxtYl9yZXNlcnZlKGJhc2UsIHNpemUpOwotCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ID0gYmFzZTsKLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplID0gc2l6ZTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUEhZUF9EVU1QICAmJiBDT05GSUdfUFBDX1JUQVMgKi8KLQogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIC8qIE1TIHRoaXMgaXMgTWljcm9ibGF6ZSBzcGVjaWZpZyBmdW5jdGlvbiAqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3NlcmlhbCh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC03NzUsMTEgKzk4LDYgQEAKIAkvKiBTZXR1cCBmbGF0IGRldmljZS10cmVlIHBvaW50ZXIgKi8KIAlpbml0aWFsX2Jvb3RfcGFyYW1zID0gcGFyYW1zOwogCi0jaWZkZWYgQ09ORklHX1BIWVBfRFVNUAotCS8qIHNjYW4gdHJlZSB0byBzZWUgaWYgZHVtcCBvY2N1cmVkIGR1cmluZyBsYXN0IGJvb3QgKi8KLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3BoeXBfZHVtcCwgTlVMTCk7Ci0jZW5kaWYKLQogCS8qIFJldHJpZXZlIHZhcmlvdXMgaW5mb3JtYXRpb25zIGZyb20gdGhlIC9jaG9zZW4gbm9kZSBvZiB0aGUKIAkgKiBkZXZpY2UtdHJlZSwgaW5jbHVkaW5nIHRoZSBwbGF0Zm9ybSB0eXBlLCBpbml0cmQgbG9jYXRpb24gYW5kCiAJICogc2l6ZSwgVENFIHJlc2VydmUsIGFuZCBtb3JlIC4uLgpAQCAtNzk5LDMzICsxMTcsMTggQEAKIAogCXByX2RlYnVnKCJQaHlzLiBtZW06ICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpIGxtYl9waHlzX21lbV9zaXplKCkpOwogCi0JcHJfZGVidWcoIlNjYW5uaW5nIENQVXMgLi4uXG4iKTsKLQotCS8qIFJldHJlaXZlIENQVSByZWxhdGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBmbGF0IHRyZWUKLQkgKiAoYWx0aXZlYyBzdXBwb3J0LCBib290IENQVSBJRCwgLi4uKQotCSAqLwotCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fY3B1cywgTlVMTCk7Ci0KIAlwcl9kZWJ1ZygiIDwtIGVhcmx5X2luaXRfZGV2dHJlZSgpXG4iKTsKIH0KIAotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBub2RlIGhhcyBhIGdpdmVuIHZhbHVlIGluIGl0cwotICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KLSAqLwotaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCXVuc2lnbmVkIGxvbmcgZW5kKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKLQlpbnQgcmMgPSAwOwotCi0Jcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7Ci0JaWYgKHJvb3QpIHsKLQkJcmMgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyb290LCBjb21wYXQpOwotCQlvZl9ub2RlX3B1dChyb290KTsKLQl9Ci0JcmV0dXJuIHJjOworCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpOworCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CisJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIH0KLUVYUE9SVF9TWU1CT0wobWFjaGluZV9pc19jb21wYXRpYmxlKTsKKyNlbmRpZgogCiAvKioqKioqKgogICoKQEAgLTgzOCwyNzMgKzE0MSw2IEBACiAgKgogICoqKioqKiovCiAKLS8qKgotICoJb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUgLSBGaW5kIGEgbm9kZSBnaXZlbiBhIHBoYW5kbGUKLSAqCUBoYW5kbGU6CXBoYW5kbGUgb2YgdGhlIG5vZGUgdG8gZmluZAotICoKLSAqCVJldHVybnMgYSBub2RlIHBvaW50ZXIgd2l0aCByZWZjb3VudCBpbmNyZW1lbnRlZCwgdXNlCi0gKglvZl9ub2RlX3B1dCgpIG9uIGl0IHdoZW4gZG9uZS4KLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JcmVhZF9sb2NrKCZkZXZ0cmVlX2xvY2spOwotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gTlVMTDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IGhhbmRsZSkKLQkJCWJyZWFrOwotCW9mX25vZGVfZ2V0KG5wKTsKLQlyZWFkX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQotLyoqCi0gKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKglSZXR1cm5zIG5vZGUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7Ci0JcmV0dXJuIG5vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQotICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKLSAqCi0gKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKLSAqCWFzIHRoZSBkZXN0cnVjdG9yLgotICovCi1zdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV0FSTklORzogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsCi0JCQlub2RlLT5mdWxsX25hbWUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCWtyZWZfaW5pdCgmbm9kZS0+a3JlZik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9EWU5BTUlDKSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKHByb3ApIHsKLQkJc3RydWN0IHByb3BlcnR5ICpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJa2ZyZWUocHJvcC0+bmFtZSk7Ci0JCWtmcmVlKHByb3AtPnZhbHVlKTsKLQkJa2ZyZWUocHJvcCk7Ci0JCXByb3AgPSBuZXh0OwotCi0JCWlmICghcHJvcCkgewotCQkJcHJvcCA9IG5vZGUtPmRlYWRwcm9wczsKLQkJCW5vZGUtPmRlYWRwcm9wcyA9IE5VTEw7Ci0JCX0KLQl9Ci0Ja2ZyZWUobm9kZS0+ZnVsbF9uYW1lKTsKLQlrZnJlZShub2RlLT5kYXRhKTsKLQlrZnJlZShub2RlKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3B1dCAtIERlY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGRlYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKi8KLXZvaWQgb2Zfbm9kZV9wdXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX3B1dCgmbm9kZS0+a3JlZiwgb2Zfbm9kZV9yZWxlYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfbm9kZV9wdXQpOwotCi0vKgotICogUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgotICovCi12b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKLQlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOwotCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7Ci0JYWxsbm9kZXMgPSBucDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuICBUaGUgY2FsbGVyIG11c3QgaG9sZAotICogYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICogaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCi0gKi8KLXZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCXBhcmVudCA9IG5wLT5wYXJlbnQ7Ci0JaWYgKCFwYXJlbnQpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWlmIChhbGxub2RlcyA9PSBucCkKLQkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OwotCQlmb3IgKHByZXYgPSBhbGxub2RlczsKLQkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOwotCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQotCQkJOwotCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7Ci0JfQotCi0JaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCi0JCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOwotCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKLQkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOwotCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQotCQkJOwotCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7Ci0JfQotCi0Jb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOwotCi1vdXRfdW5sb2NrOgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQotICovCi1pbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByb3AtPm5leHQgPSBOVUxMOwotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAoKm5leHQpLT5uYW1lKSA9PSAwKSB7Ci0JCQkvKiBkdXBsaWNhdGUgISBkb24ndCBpbnNlcnQgaXQgKi8KLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCSpuZXh0ID0gcHJvcDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfYWRkX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIGEgbm9kZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseQotICogcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dCB3aG8ta25vd3MtaG93LW1hbnkgcG9pbnRlcnMKLSAqIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4gIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eQotICogdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsIHNvIGl0IHdvbid0IGJlIGZvdW5kIGFueSBtb3JlLgotICovCi1pbnQgcHJvbV9yZW1vdmVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCSpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJCXByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOwotCQkJbnAtPmRlYWRwcm9wcyA9IHByb3A7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PREVWOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byByZW1vdmUgdGhlIHByb2Mgbm9kZSBhcyB3ZWxsICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfcmVtb3ZlX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlCi0gKiBwcm9wZXJ0eSBsaXN0Ci0gKi8KLWludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJIHN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmb3VuZCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmICgqbmV4dCA9PSBvbGRwcm9wKSB7Ci0JCQkvKiBmb3VuZCB0aGUgbm9kZSAqLwotCQkJbmV3cHJvcC0+bmV4dCA9IG9sZHByb3AtPm5leHQ7Ci0JCQkqbmV4dCA9IG5ld3Byb3A7Ci0JCQlvbGRwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBvbGRwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV91cGRhdGVfcHJvcChucC0+cGRlLCBuZXdwcm9wLCBvbGRwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKERFQlVHKQogc3RhdGljIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBmbGF0X2R0X2Jsb2I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggOGI1ZDE3NC4uNTkxY2EwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTQxLDcgKzQxLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHQ0QKIAlzZWxlY3QgVkxZTlEKIAloZWxwCkBAIC0xODAsNyArMTgwLDcgQEAKIAogY29uZmlnIE1BQ0hfTE9PTkdTT04KIAlib29sICJMb29uZ3NvbiBmYW1pbHkgb2YgbWFjaGluZXMiCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IG9mIExvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcy4KIApAQCAtMTI5NSw3ICsxMjk1LDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAogCXNlbGVjdCBOUl9DUFVTX0RFRkFVTFRfMTYKIAlzZWxlY3QgV0VBS19PUkRFUklORwotCXNlbGVjdCBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUwogCWhlbHAKQEAgLTE3MjYsNiArMTcyNSw5IEBACiBjb25maWcgNjRCSVRfUEhZU19BRERSCiAJYm9vbAogCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorICAgICAgIGRlZl9ib29sIDY0QklUX1BIWVNfQUREUgorCiBjb25maWcgQ1BVX0hBU19TTUFSVE1JUFMKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19TTUFSVE1JUFMKIAlib29sICJTdXBwb3J0IGZvciB0aGUgU21hcnRNSVBTIEFTRSIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggZDJiODhhMC4uNDNkYzI3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTEwMiw0ICsxMDIsMzAgQEAKIAkgIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWJ1Zy5oIGZvciBkZWJ1Z2dpbmcgbWFjcm9zLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIERFQlVHX1pCT09UCisJYm9vbCAiRW5hYmxlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNZU19TVVBQT1JUU19aQk9PVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIGFkZCBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IHRvIGEgbmV3IGJvYXJkLCBhbmQgdGhlCisJICBib2FyZCBzdXBwb3J0cyB1YXJ0MTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydCwgcGxlYXNlIHNlbGVjdAorCSAgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBib2FyZCBhbmQgZW5hYmxlIHRoaXMgb3B0aW9uIHRvCisJICBkZWJ1ZyBpdC4KKworCSAgSWYgeW91ciBib2FyZCBkb2Vzbid0IHN1cHBvcnQgdWFydDE2NTUwIGNvbXBhdGlibGUgc2VyaWFsIHBvcnQsIHlvdQorCSAgY2FuIHRyeSB0byBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UIGFuZCB1c2UgdGhlIG90aGVyIG1ldGhvZHMgdG8KKwkgIGRlYnVnIGl0LiBmb3IgZXhhbXBsZSwgYWRkIGEgbmV3IHNlcmlhbCBwb3J0IHN1cHBvcnQganVzdCBhcworCSAgYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LTE2NTUwLmMgZG9lcy4KKworCSAgQWZ0ZXIgdGhlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgd29ya3MsIHBsZWFzZSBkaXNhYmxlIHRoaXMgb3B0aW9uCisJICB0byByZWR1Y2UgdGhlIGtlcm5lbCBpbWFnZSBzaXplIGFuZCBzcGVlZCB1cCB0aGUgYm9vdGluZyBwcm9jZWR1cmUgYQorCSAgbGl0dGxlLgorCitjb25maWcgU1BJTkxPQ0tfVEVTVAorCWJvb2wgIkVuYWJsZSBzcGlubG9jayB0aW1pbmcgdGVzdHMgaW4gZGVidWdmcyIKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgQWRkIHNldmVyYWwgZmlsZXMgdG8gdGhlIGRlYnVnZnMgdG8gdGVzdCBzcGlubG9jayBzcGVlZC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDE4OTNlZmQuLjJmMmVhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTE4NSw2ICsxODUsMTUgQEAKIGxpYnMteQkJCQkrPSBhcmNoL21pcHMvZncvbGliLwogCiAjCisjIEtlcm5lbCBjb21wcmVzc2lvbgorIworaWZkZWYgU1lTX1NVUFBPUlRTX1pCT09UCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV6CitlbHNlCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV4CitlbmRpZgorCisjCiAjIEJvYXJkLWRlcGVuZGVudCBvcHRpb25zIGFuZCBleHRyYSBmaWxlcwogIwogCkBAIC0zMzIsMTEgKzM0MSwxMSBAQAogIwogIyBMb29uZ3NvbiBmYW1pbHkKICMKLWNvcmUtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz1hcmNoL21pcHMvbG9vbmdzb24vCitjb3JlLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IGFyY2gvbWlwcy9sb29uZ3Nvbi8KIGNmbGFncy0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24gXAogICAgICAgICAgICAgICAgICAgICAtbW5vLWJyYW5jaC1saWtlbHkKLWxvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0weGZmZmZmZmZmODAxMDAwMDAKLWxvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0weGZmZmZmZmZmODAyMDAwMDAKK2xvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0gMHhmZmZmZmZmZjgwMTAwMDAwCitsb2FkLSQoQ09ORklHX0xFTU9URV9NQUNIMkYpICs9IDB4ZmZmZmZmZmY4MDIwMDAwMAogCiAjCiAjIE1JUFMgTWFsdGEgYm9hcmQKQEAgLTM0NCw3ICszNTMsNyBAQAogY29yZS0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBhcmNoL21pcHMvbXRpLW1hbHRhLwogY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQogbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLWFsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSB2bWxpbnV6LmJpbgorYWxsLSQoQ09ORklHX01JUFNfTUFMVEEpCTo9ICQoQ09NUFJFU1NJT05fRk5BTUUpLmJpbgogCiAjCiAjIE1JUFMgU0lNCkBAIC01OTQsNyArNjAzLDcgQEAKIGVsc2UKIGxvYWQtJChDT05GSUdfU05JX1JNKQkJKz0gMHhmZmZmZmZmZjgwMDMwMDAwCiBlbmRpZgotYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9IHZtbGludXouZWNvZmYKK2FsbC0kKENPTkZJR19TTklfUk0pCQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5lY29mZgogCiAjCiAjIENvbW1vbiBUWHg5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwppbmRleCAwMGI0OThlLi5kZjNiMWE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKQEAgLTEsNSArMSw1IEBACi0jIGF1MTAwMC1zdHlsZSBncGlvCi1jb25maWcgQUxDSEVNWV9HUElPX0FVMTAwMAorIyBhdTEwMDAtc3R5bGUgZ3BpbyBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXJzCitjb25maWcgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCWJvb2wKIAogIyBzZWxlY3QgdGhpcyBpbiB5b3VyIGJvYXJkIGNvbmZpZyBpZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGdwaW8KQEAgLTIwLDEyICsyMCwxNCBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfQk9TUE9SVVMKIAlib29sICJBbGNoZW15IEJvc3BvcnVzIGJvYXJkIgogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjEwMDAKIAlib29sICJBbGNoZW15IERCMTAwMCBib2FyZCIKQEAgLTMzLDEyICszNSwxNCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjExMDAKIAlib29sICJBbGNoZW15IERCMTEwMCBib2FyZCIKIAlzZWxlY3QgU09DX0FVMTEwMAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxMjAwCiAJYm9vbCAiQWxjaGVteSBEQjEyMDAgYm9hcmQiCkBAIC00Niw2ICs1MCw3IEBACiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTUwMAogCWJvb2wgIkFsY2hlbXkgREIxNTAwIGJvYXJkIgpAQCAtNTUsNiArNjAsNyBAQAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTU1MAogCWJvb2wgIkFsY2hlbXkgREIxNTUwIGJvYXJkIgpAQCAtNjMsMTIgKzY5LDE0IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX01JUkFHRQogCWJvb2wgIkFsY2hlbXkgTWlyYWdlIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjEwMDAKIAlib29sICJBbGNoZW15IFBCMTAwMCBib2FyZCIKQEAgLTc3LDYgKzg1LDcgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTEwMAogCWJvb2wgIkFsY2hlbXkgUEIxMTAwIGJvYXJkIgpAQCAtODUsNiArOTQsNyBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxMjAwCiAJYm9vbCAiQWxjaGVteSBQQjEyMDAgYm9hcmQiCkBAIC05Miw2ICsxMDIsNyBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjE1MDAKIAlib29sICJBbGNoZW15IFBCMTUwMCBib2FyZCIKQEAgLTk5LDYgKzExMCw3IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTU1MAogCWJvb2wgIkFsY2hlbXkgUEIxNTUwIGJvYXJkIgpAQCAtMTA3LDM5ICsxMTksNDEgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1hYUzE1MDAKIAlib29sICJNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGVuZGNob2ljZQogCiBjb25maWcgU09DX0FVMTAwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTExMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxNTAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTU1MAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTEyMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxWDAwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCmluZGV4IGI2N2ZiNTEuLjA2YzBlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKQEAgLTUsMTQgKzUsMTUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IEF1MXh4MCBDUFVzLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteSArPSBwcm9tLm8gaXJxLm8gcHV0cy5vIHRpbWUubyByZXNldC5vIFwKLQljbG9ja3MubyBwbGF0Zm9ybS5vIHBvd2VyLm8gc2V0dXAubyBcCitvYmoteSArPSBwcm9tLm8gdGltZS5vIGNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKIAlzbGVlcGVyLm8gZG1hLm8gZGJkbWEubwogCitvYmotJChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkgKz0gaXJxLm8KKwogIyBvcHRpb25hbCBncGlvbGliIHN1cHBvcnQKIGlmZXEgKCQoQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCksKQogIGlmZXEgKCQoQ09ORklHX0dQSU9MSUIpLHkpCi0gIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9fQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCisgIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCiAgZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwppbmRleCBkODk5MTg1Li40NjBjNjI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCkBAIC00MCw4ICs0MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGF1MXgwMF9jbG9jazsgLyogIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1YXJ0X2JhdWRfYmFzZTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lX2xvY2spOwotCiAvKgogICogU2V0IHRoZSBhdTEwMDBfY2xvY2sKICAqLwpAQCAtODQsOSArODIsNiBAQAogdW5zaWduZWQgbG9uZyBhdTF4eHhfY2FsY19jbG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X3NwZWVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZV9sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIE9uIGVhcmx5IEF1MTAwMCwgc3lzX2NwdXBsbCB3YXMgd3JpdGUtb25seS4gU2luY2UgdGhlc2UKQEAgLTEwOCw4ICsxMDMsNiBAQAogCXNldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UoY3B1X3NwZWVkIC8gKDIgKiAoKGludCkoYXVfcmVhZGwoU1lTX1BPV0VSQ1RSTCkKIAkJCQkJCQkgICYgMHgwMykgKyAyKSAqIDE2KSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lX2xvY2ssIGZsYWdzKTsKLQogCXNldF9hdTF4MDBfc3BlZWQoY3B1X3NwZWVkKTsKIAogCXJldHVybiBjcHVfc3BlZWQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IGY5MjAxY2EuLjk5YWU4NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC01OCw3ICs1OSw2IEBACiAKIHN0YXRpYyBkYmRtYV9nbG9iYWxfdCAqZGJkbWFfZ3B0ciA9IChkYmRtYV9nbG9iYWxfdCAqKURETUFfR0xPQkFMX0JBU0U7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRpYWxpemVkOwotc3RhdGljIHZvaWQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCk7CiAKIHN0YXRpYyBkYmRldl90YWJfdCBkYmRldl90YWJbXSA9IHsKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MApAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiksIHZvaWQgKmNhbGxwYXJhbSkKIHsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JdTMyCQl1c2VkLCBjaGFuLCBydjsKKwl1MzIJCXVzZWQsIGNoYW47CiAJdTMyCQlkY3A7CiAJaW50CQlpOwogCWRiZGV2X3RhYl90CSpzdHAsICpkdHA7CkBAIC0yNTAsOCArMjUwLDcgQEAKIAkgKiB3aGljaCBjYW4ndCBiZSBkb25lIHN1Y2Nlc3NmdWxseSBkdXJpbmcgYm9hcmQgc2V0IHVwLgogCSAqLwogCWlmICghZGJkbWFfaW5pdGlhbGl6ZWQpCi0JCWF1MXh4eF9kYmRtYV9pbml0KCk7Ci0JZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOworCQlyZXR1cm4gMDsKIAogCXN0cCA9IGZpbmRfZGJkZXZfaWQoc3JjaWQpOwogCWlmIChzdHAgPT0gTlVMTCkKQEAgLTI2MSw3ICsyNjAsNiBAQAogCQlyZXR1cm4gMDsKIAogCXVzZWQgPSAwOwotCXJ2ID0gMDsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGJvdGggY2hhbm5lbHMuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKQEAgLTI4Miw2MyArMjgwLDY1IEBACiAJCXVzZWQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXVzZWQpIHsKLQkJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLwotCQljdHAgPSBOVUxMOwotCQljaGFuID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKQotCQkJaWYgKGNoYW5fdGFiX3B0cltpXSA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiBrbWFsbG9jIGZhaWxzLCBpdCBpcyBjYXVnaHQgYmVsb3cgc2FtZQotCQkJCSAqIGFzIGEgY2hhbm5lbCBub3QgYXZhaWxhYmxlLgotCQkJCSAqLwotCQkJCWN0cCA9IGttYWxsb2Moc2l6ZW9mKGNoYW5fdGFiX3QpLCBHRlBfQVRPTUlDKTsKLQkJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlpZiAodXNlZCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGN0cCAhPSBOVUxMKSB7Ci0JCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOwotCQkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7Ci0JCQlkY3AgPSBERE1BX0NIQU5ORUxfQkFTRTsKLQkJCWRjcCArPSAoMHgwMTAwICogY2hhbik7Ci0JCQljdHAtPmNoYW5fcHRyID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWNwID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7Ci0JCQljdHAtPmNoYW5fZGVzdCA9IGR0cDsKLQkJCWN0cC0+Y2hhbl9jYWxsYmFjayA9IGNhbGxiYWNrOwotCQkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKLQotCQkJLyogSW5pdGlhbGl6ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uICovCi0JCQlpID0gMDsKLQkJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKLQkJCQlpIHw9IERETUFfQ0ZHX1NFRDsKLQkJCWlmIChzdHAtPmRldl9pbnRwb2xhcml0eSkKLQkJCQlpIHw9IERETUFfQ0ZHX1NQOwotCQkJaWYgKGR0cC0+ZGV2X2ludGxldmVsKQotCQkJCWkgfD0gRERNQV9DRkdfREVEOwotCQkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQotCQkJCWkgfD0gRERNQV9DRkdfRFA7Ci0JCQlpZiAoKHN0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpIHx8Ci0JCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQotCQkJCQlpIHw9IERETUFfQ0ZHX1NZTkM7Ci0JCQljcC0+ZGRtYV9jZmcgPSBpOwotCQkJYXVfc3luYygpOwotCi0JCQkvKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvCi0JCQkgKiBmaW5kIHRoZSBjaGFubmVsIGluZm9ybWF0aW9uIGluIHN1YnNlcXVlbnQKLQkJCSAqIG9wZXJhdGlvbnMuCisJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLworCWN0cCA9IE5VTEw7CisJY2hhbiA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspCisJCWlmIChjaGFuX3RhYl9wdHJbaV0gPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIGttYWxsb2MgZmFpbHMsIGl0IGlzIGNhdWdodCBiZWxvdyBzYW1lCisJCQkgKiBhcyBhIGNoYW5uZWwgbm90IGF2YWlsYWJsZS4KIAkJCSAqLwotCQkJcnYgPSAodTMyKSgmY2hhbl90YWJfcHRyW2NoYW5dKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFJlbGVhc2UgZGV2aWNlcyAqLwotCQkJc3RwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKLQkJCWR0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJCQljdHAgPSBrbWFsbG9jKHNpemVvZihjaGFuX3RhYl90KSwgR0ZQX0FUT01JQyk7CisJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7CisJCQlicmVhazsKIAkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKworCWlmIChjdHAgIT0gTlVMTCkgeworCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOworCQljdHAtPmNoYW5faW5kZXggPSBjaGFuID0gaTsKKwkJZGNwID0gRERNQV9DSEFOTkVMX0JBU0U7CisJCWRjcCArPSAoMHgwMTAwICogY2hhbik7CisJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOworCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CisJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7CisJCWN0cC0+Y2hhbl9kZXN0ID0gZHRwOworCQljdHAtPmNoYW5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKKworCQkvKiBJbml0aWFsaXplIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gKi8KKwkJaSA9IDA7CisJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKKwkJCWkgfD0gRERNQV9DRkdfU0VEOworCQlpZiAoc3RwLT5kZXZfaW50cG9sYXJpdHkpCisJCQlpIHw9IERETUFfQ0ZHX1NQOworCQlpZiAoZHRwLT5kZXZfaW50bGV2ZWwpCisJCQlpIHw9IERETUFfQ0ZHX0RFRDsKKwkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQorCQkJaSB8PSBERE1BX0NGR19EUDsKKwkJaWYgKChzdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSB8fAorCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQorCQkJCWkgfD0gRERNQV9DRkdfU1lOQzsKKwkJY3AtPmRkbWFfY2ZnID0gaTsKKwkJYXVfc3luYygpOworCisJCS8qCisJCSAqIFJldHVybiBhIG5vbi16ZXJvIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgY2hhbm5lbAorCQkgKiBpbmZvcm1hdGlvbiBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCisJCSAqLworCQlyZXR1cm4gKHUzMikoJmNoYW5fdGFiX3B0cltjaGFuXSk7CiAJfQotCXJldHVybiBydjsKKworCS8qIFJlbGVhc2UgZGV2aWNlcyAqLworCXN0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJZHRwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyk7CiAKQEAgLTU3Miw3ICs1NzIsNyBAQAogICogVGhpcyB1cGRhdGVzIHRoZSBzb3VyY2UgcG9pbnRlciBhbmQgYnl0ZSBjb3VudC4gIE5vcm1hbGx5IHVzZWQKICAqIGZvciBtZW1vcnkgdG8gZmlmbyB0cmFuc2ZlcnMuCiAgKi8KLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKIHsKIAljaGFuX3RhYl90CQkqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QJKmRwOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogTG9hZCB1cCBidWZmZXIgYWRkcmVzcyBhbmQgYnl0ZSBjb3VudC4gKi8KLQlkcC0+ZHNjcl9zb3VyY2UwID0gdmlydF90b19waHlzKGJ1Zik7CisJZHAtPmRzY3Jfc291cmNlMCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKIAkvKiBDaGVjayBmbGFncyAqLwogCWlmIChmbGFncyAmIERETUFfRkxBR1NfSUUpCkBAIC02MjUsMTQgKzYyNSwxMyBAQAogCS8qIFJldHVybiBzb21ldGhpbmcgbm9uLXplcm8uICovCiAJcmV0dXJuIG5ieXRlczsKIH0KLUVYUE9SVF9TWU1CT0woX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKTsKK0VYUE9SVF9TWU1CT0woYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UpOwogCiAvKiBQdXQgYSBkZXN0aW5hdGlvbiBidWZmZXIgaW50byB0aGUgRE1BIHJpbmcuCiAgKiBUaGlzIHVwZGF0ZXMgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgYW5kIGJ5dGUgY291bnQuICBOb3JtYWxseSB1c2VkCiAgKiB0byBwbGFjZSBhbiBlbXB0eSBidWZmZXIgaW50byB0aGUgcmluZyBmb3IgZmlmbyB0byBtZW1vcnkgdHJhbnNmZXJzLgogICovCi11MzIKLV9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCiB7CiAJY2hhbl90YWJfdAkJKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190CSpkcDsKQEAgLTY2Miw3ICs2NjEsNyBAQAogCWlmIChmbGFncyAmIERETUFfRkxBR1NfTk9JRSkKIAkJZHAtPmRzY3JfY21kMCAmPSB+RFNDUl9DTUQwX0lFOwogCi0JZHAtPmRzY3JfZGVzdDAgPSB2aXJ0X3RvX3BoeXMoYnVmKTsKKwlkcC0+ZHNjcl9kZXN0MCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKICNpZiAwCiAJcHJpbnRrKEtFUk5fREVCVUcgImNtZDA6JXggY21kMToleCBzb3VyY2UwOiV4IHNvdXJjZTE6JXggZGVzdDA6JXggZGVzdDE6JXhcbiIsCkBAIC02ODgsNyArNjg3LDcgQEAKIAkvKiBSZXR1cm4gc29tZXRoaW5nIG5vbi16ZXJvLiAqLwogCXJldHVybiBuYnl0ZXM7CiB9Ci1FWFBPUlRfU1lNQk9MKF9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOworRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOwogCiAvKgogICogR2V0IGEgZGVzdGluYXRpb24gYnVmZmVyIGludG8gdGhlIERNQSByaW5nLgpAQCAtODcxLDI4ICs4NzAsNiBAQAogCXJldHVybiBJUlFfUkVUVkFMKDEpOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZGJkbWFfaW5pdCh2b2lkKQotewotCWludCBpcnFfbnI7Ci0KLQlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV90aHJvdHRsZSA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV9pbnRlbiA9IDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCWlycV9uciA9IEFVMTU1MF9ERE1BX0lOVDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JaXJxX25yID0gQVUxMjAwX0RETUFfSU5UOwotI2Vsc2UKLQkjZXJyb3IgVW5rbm93biBBdTF4MDAgU09DCi0jZW5kaWYKLQotCWlmIChyZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSJBdTF4eHggZGJkbWEiLCAodm9pZCAqKWRiZG1hX2dwdHIpKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCAxNTUwIGRiZG1hIGlycSIpOwotfQotCiB2b2lkIGF1MXh4eF9kYmRtYV9kdW1wKHUzMiBjaGFuaWQpCiB7CiAJY2hhbl90YWJfdAkgKmN0cDsKQEAgLTkwNiw3ICs4ODMsNyBAQAogCWR0cCA9IGN0cC0+Y2hhbl9kZXN0OwogCWNwID0gY3RwLT5jaGFuX3B0cjsKIAotCXByaW50ayhLRVJOX0RFQlVHICJDaGFuICV4LCBzdHAgJXggKGRldiAlZCkgIGR0cCAleCAoZGV2ICVkKSBcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIkNoYW4gJXgsIHN0cCAleCAoZGV2ICVkKSAgZHRwICV4IChkZXYgJWQpXG4iLAogCQkJICAodTMyKWN0cCwgKHUzMilzdHAsIHN0cCAtIGRiZGV2X3RhYiwgKHUzMilkdHAsCiAJCQkgIGR0cCAtIGRiZGV2X3RhYik7CiAJcHJpbnRrKEtFUk5fREVCVUcgImRlc2MgYmFzZSAleCwgZ2V0ICV4LCBwdXQgJXgsIGN1ciAleFxuIiwKQEAgLTEwNDEsNCArMTAxOCwzOCBAQAogCX0KIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBfX2luaXQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgaXJxX25yLCByZXQ7CisKKwlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7CisJZGJkbWFfZ3B0ci0+ZGRtYV90aHJvdHRsZSA9IDA7CisJZGJkbWFfZ3B0ci0+ZGRtYV9pbnRlbiA9IDB4ZmZmZjsKKwlhdV9zeW5jKCk7CisKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlpcnFfbnIgPSBBVTE1NTBfRERNQV9JTlQ7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlpcnFfbnIgPSBBVTEyMDBfRERNQV9JTlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycV9uciwgZGJkbWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJIkF1MXh4eCBkYmRtYSIsICh2b2lkICopZGJkbWFfZ3B0cik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZ3JhYiBEQkRNQSBpbnRlcnJ1cHQhXG4iKTsKKwllbHNlIHsKKwkJZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOworCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERCRE1BIGluaXRpYWxpemVkXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKGF1MXh4eF9kYmRtYV9pbml0KTsKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKaW5kZXggZDZmYmRhMi4uZDUyNzg4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYwpAQCAtMjksNiArMjksOCBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xODgsMTcgKzE5MCwxNCBAQAogCQlkZXYgPSAmZG1hX2Rldl90YWJsZVtkZXZfaWRdOwogCiAJaWYgKGlycWhhbmRsZXIpIHsKLQkJY2hhbi0+aXJxID0gQVUxMDAwX0RNQV9JTlRfQkFTRSArIGk7CiAJCWNoYW4tPmlycV9kZXYgPSBpcnFfZGV2X2lkOwogCQlyZXQgPSByZXF1ZXN0X2lycShjaGFuLT5pcnEsIGlycWhhbmRsZXIsIGlycWZsYWdzLCBkZXZfc3RyLAogCQkJCSAgY2hhbi0+aXJxX2Rldik7CiAJCWlmIChyZXQpIHsKLQkJCWNoYW4tPmlycSA9IDA7CiAJCQljaGFuLT5pcnFfZGV2ID0gTlVMTDsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9IGVsc2UgewotCQljaGFuLT5pcnEgPSAwOwogCQljaGFuLT5pcnFfZGV2ID0gTlVMTDsKIAl9CiAKQEAgLTIyNiwxMyArMjI1LDQwIEBACiAJfQogCiAJZGlzYWJsZV9kbWEoZG1hbnIpOwotCWlmIChjaGFuLT5pcnEpCisJaWYgKGNoYW4tPmlycV9kZXYpCiAJCWZyZWVfaXJxKGNoYW4tPmlycSwgY2hhbi0+aXJxX2Rldik7CiAKLQljaGFuLT5pcnEgPSAwOwogCWNoYW4tPmlycV9kZXYgPSBOVUxMOwogCWNoYW4tPmRldl9pZCA9IC0xOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2F1MTAwMF9kbWEpOwogCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfZG1hX2luaXQodm9pZCkKK3sKKyAgICAgICAgaW50IGJhc2UsIGk7CisKKyAgICAgICAgc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisgICAgICAgICAgICAgICAgYmFzZSA9IEFVMTAwMF9ETUFfSU5UX0JBU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorICAgICAgICAgICAgICAgIGJhc2UgPSBBVTE1MDBfRE1BX0lOVF9CQVNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKyAgICAgICAgICAgICAgICBiYXNlID0gQVUxMTAwX0RNQV9JTlRfQkFTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVUxMDAwX0RNQV9DSEFOTkVMUzsgaSsrKQorICAgICAgICAgICAgICAgIGF1MTAwMF9kbWFfdGFibGVbaV0uaXJxID0gYmFzZSArIGk7CisKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteSBETUEgaW5pdGlhbGl6ZWRcbiIpOworCitvdXQ6CisgICAgICAgIHJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhdTEwMDBfZG1hX2luaXQpOworCiAjZW5kaWYgLyogQVUxMDAwIEFVMTUwMCBBVTExMDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvbGliLWF1MTAwMC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKaW5kZXggMWJmYTkxZi4uYzhlMWE5NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KIAotI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQogc3RhdGljIGludCBncGlvMl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXJldHVybiBhbGNoZW15X2dwaW8yX2dldF92YWx1ZShvZmZzZXQgKyBBTENIRU1ZX0dQSU8yX0JBU0UpOwpAQCAtNjMsNyArNjIsNyBAQAogewogCXJldHVybiBhbGNoZW15X2dwaW8yX3RvX2lycShvZmZzZXQgKyBBTENIRU1ZX0dQSU8yX0JBU0UpOwogfQotI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKSAqLworCiAKIHN0YXRpYyBpbnQgZ3BpbzFfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKQEAgLTEwNCw3ICsxMDMsNiBAQAogCQkuYmFzZQkJCT0gQUxDSEVNWV9HUElPMV9CQVNFLAogCQkubmdwaW8JCQk9IEFMQ0hFTVlfR1BJTzFfTlVNLAogCX0sCi0jaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCiAJWzFdID0gewogCQkubGFiZWwgICAgICAgICAgICAgICAgICA9ICJhbGNoZW15LWdwaW8yIiwKIAkJLmRpcmVjdGlvbl9pbnB1dCAgICAgICAgPSBncGlvMl9kaXJlY3Rpb25faW5wdXQsCkBAIC0xMTUsMTUgKzExMywxMyBAQAogCQkuYmFzZSAgICAgICAgICAgICAgICAgICA9IEFMQ0hFTVlfR1BJTzJfQkFTRSwKIAkJLm5ncGlvICAgICAgICAgICAgICAgICAgPSBBTENIRU1ZX0dQSU8yX05VTSwKIAl9LAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhbGNoZW15X2dwaW9saWJfaW5pdCh2b2lkKQogewogCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMF0pOwotI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMV0pOwotI2VuZGlmCisJaWYgKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSAhPSBBTENIRU1ZX0NQVV9BVTEwMDApCisJCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMV0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKaW5kZXggZDY3MDkyOC4uYjI4MjFhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwpAQCAtMzksMTY4ICszOSwxODAgQEAKIAogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSk7CiAKKy8qIE5PVEUgb24gaW50ZXJydXB0IHByaW9yaXRpZXM6IFRoZSBvcmlnaW5hbCB3cml0ZXJzIG9mIHRoaXMgY29kZSBzYWlkOgorICoKKyAqIEJlY2F1c2Ugb2YgdGhlIHRpZ2h0IHRpbWluZyBvZiBTRVRVUCB0b2tlbiB0byByZXBseSB0cmFuc2FjdGlvbnMsCisgKiB0aGUgVVNCIGRldmljZXMtc2lkZSBwYWNrZXQgY29tcGxldGUgaW50ZXJydXB0IChVU0JfREVWX1JFUV9JTlQpCisgKiBuZWVkcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyAqLworCiAvKiBwZXItcHJvY2Vzc29yIGZpeGVkIGZ1bmN0aW9uIGlycXMgKi8KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MXh4eF9pYzBfbWFwW10gX19pbml0ZGF0YSA9IHsKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIHsKKwlpbnQgaW1faXJxOworCWludCBpbV90eXBlOworCWludCBpbV9yZXF1ZXN0OwkJLyogc2V0IDEgdG8gZ2V0IGhpZ2hlciBwcmlvcml0eSAqLworfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JeyBBVTEwMDBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDJfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9TU0kxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsxLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs0LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs3LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX0lSREFfVFhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfSVJEQV9SWF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTAwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxMDAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQyX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1NTSTBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfU1NJMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTAwMF9JUkRBX1RYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0lSREFfUlhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAogCXsgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9VU0JfSE9TVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX0FDU1lOQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfTUFDMV9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfQUM5N0NfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxMDAwX0FDU1lOQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9NQUMwX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9NQUMxX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9BQzk3Q19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTUwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxNTAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRBLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfUENJX0lOVEIsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9QQ0lfSU5UQywJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRELAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFLAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzEsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSsyLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrMywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzQsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSs1LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrNiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzcsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTE1MDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAorCXsgQVUxNTAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9VU0JfSE9TVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9BQ1NZTkNfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfTUFDMV9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfQUM5N0NfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyAtMSwgfSwKK307CiAKLQl7IEFVMTUwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfUENJX0lOVEIsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTAwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5URCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzEsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzcsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfQUNTWU5DX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTUwMF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTUwMF9NQUMxX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9BQzk3Q19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTExMDBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTEwMF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9TRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9TU0kwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1NTSTFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFLAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzEsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSsyLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrMywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzQsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSs1LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrNiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzcsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTExMDBfSVJEQV9UWF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9JUkRBX1JYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDEgfSwKKwl7IEFVMTEwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTExMDBfQUNTWU5DX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX01BQzBfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0xDRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9BQzk3Q19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQotCXsgQVUxMTAwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1NEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1NTSTBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsyLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzMsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs1LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzYsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9JUkRBX1RYX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0lSREFfUlhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfQUNTWU5DX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTEwMF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTEwMF9MQ0RfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfQUM5N0NfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCi0JeyBBVTE1NTBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1BDSV9JTlRCLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9ERE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX0NSWVBUT19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QQ0lfSU5UQywgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1BDSV9SU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9VQVJUMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9VQVJUM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BTQzFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUFNDMl9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTU1MF9OQU5EX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTU1MF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTU1MF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxNTUwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRBLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfUENJX0lOVEIsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9ERE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX0NSWVBUT19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfSU5UQywJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRELAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfUENJX1JTVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BTQzFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUFNDMl9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTE1NTBfTkFORF9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsICAxIH0sCiAJeyBBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxNTUwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfTUFDMV9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCisJeyBBVTE1NTBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfTUFDMV9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyAtMSwgfSwKK307CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0KLQl7IEFVMTIwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9TV1RfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMjAwX1NEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0RETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfTUFFX0JFX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX01BRV9GRV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9QU0MwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1BTQzFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfQUVTX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0NBTUVSQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEyMDBfTkFORF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEyMDBfVVNCX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0xDRF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9NQUVfQk9USF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQotI2Vsc2UKLSNlcnJvciAiRXJyb3I6IFVua25vd24gQWxjaGVteSBTT0MiCi0jZW5kaWYKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTIwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxMjAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1NXVF9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9TRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9ERE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX01BRV9CRV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9NQUVfRkVfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfUFNDMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9QU0MxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX0FFU19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9DQU1FUkFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTIwMF9OQU5EX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1VTQl9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9MQ0RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfTUFFX0JPVEhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyAtMSwgfSwKIH07CiAKIApAQCAtMzA2LDcgKzMxOCw3IEBACiAgKiBub3doZXJlIGluIHRoZSBjdXJyZW50IGtlcm5lbCBzb3VyY2VzIGlzIGl0IGRpc2FibGVkLgktLW1sYXUKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfUEIxMDAwKQotCWlmIChpcnFfbnIgPT0gQVUxMDAwX0dQSU9fMTUpCisJaWYgKGlycV9uciA9PSBBVTEwMDBfR1BJTzE1X0lOVCkKIAkJYXVfd3JpdGVsKDB4NDAwMCwgUEIxMDAwX01EUik7IC8qIGVuYWJsZSBpbnQgKi8KICNlbmRpZgogCWF1X3N5bmMoKTsKQEAgLTM3OCwxMSArMzkwLDEzIEBACiAKIHN0YXRpYyBpbnQgYXUxeF9pYzFfc2V0d2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0JdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwlpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwogCXVuc2lnbmVkIGxvbmcgd2FrZW1zaywgZmxhZ3M7CiAKLQkvKiBvbmx5IEdQSU8gMC03IGNhbiBhY3QgYXMgd2FrZXVwIHNvdXJjZTogKi8KLQlpZiAoKGlycSA8IEFVMTAwMF9HUElPXzApIHx8IChpcnEgPiBBVTEwMDBfR1BJT183KSkKKwkvKiBvbmx5IEdQSU8gMC03IGNhbiBhY3QgYXMgd2FrZXVwIHNvdXJjZS4gIEZvcnR1bmF0ZWx5IHRoZXNlCisJICogYXJlIHdpcmVkIHVwIGlkZW50aWNhbGx5IG9uIGFsbCBzdXBwb3J0ZWQgdmFyaWFudHMuCisJICovCisJaWYgKChiaXQgPCAwKSB8fCAoYml0ID4gNykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtNTA0LDExICs1MTgsMTEgQEAKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQogewogCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKLQl1bnNpZ25lZCBsb25nIHMsIG9mZiwgYml0OworCXVuc2lnbmVkIGxvbmcgcywgb2ZmOwogCiAJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KSB7Ci0JCWRvX0lSUShNSVBTX0NQVV9JUlFfQkFTRSArIDcpOwotCQlyZXR1cm47CisJCW9mZiA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgNzsKKwkJZ290byBoYW5kbGU7CiAJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikgewogCQlzID0gSUMwX1JFUTBJTlQ7CiAJCW9mZiA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKQEAgLTUyNCw1OCArNTM4LDIwIEBACiAJfSBlbHNlCiAJCWdvdG8gc3B1cmlvdXM7CiAKLQliaXQgPSAwOwogCXMgPSBhdV9yZWFkbChzKTsKIAlpZiAodW5saWtlbHkoIXMpKSB7CiBzcHVyaW91czoKIAkJc3B1cmlvdXNfaW50ZXJydXB0KCk7CiAJCXJldHVybjsKIAl9Ci0jaWZkZWYgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVAotCS8qCi0JICogQmVjYXVzZSBvZiB0aGUgdGlnaHQgdGltaW5nIG9mIFNFVFVQIHRva2VuIHRvIHJlcGx5Ci0JICogdHJhbnNhY3Rpb25zLCB0aGUgVVNCIGRldmljZXMtc2lkZSBwYWNrZXQgY29tcGxldGUKLQkgKiBpbnRlcnJ1cHQgbmVlZHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCi0JICovCi0JYml0ID0gMSA8PCAoQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRSk7Ci0JaWYgKChwZW5kaW5nICYgQ0FVU0VGX0lQMikgJiYgKHMgJiBiaXQpKSB7Ci0JCWRvX0lSUShBVTEwMDBfVVNCX0RFVl9SRVFfSU5UKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWRvX0lSUShfX2ZmcyhzKSArIG9mZik7CisJb2ZmICs9IF9fZmZzKHMpOworaGFuZGxlOgorCWRvX0lSUShvZmYpOwogfQogCi0vKiBzZXR1cCBlZGdlL2xldmVsIGFuZCBhc3NpZ24gcmVxdWVzdCAwLzEgKi8KLXZvaWQgX19pbml0IGF1MXh4eF9zZXR1cF9pcnFtYXAoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX19pbml0IGF1MTAwMF9pbml0X2lycShzdHJ1Y3QgYXUxeHh4X2lycW1hcCAqbWFwKQogewogCXVuc2lnbmVkIGludCBiaXQsIGlycV9ucjsKLQotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlycV9uciA9IG1hcFtjb3VudF0uaW1faXJxOwotCi0JCWlmICgoKGlycV9uciA8IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSkgfHwKLQkJICAgICAoaXJxX25yID49IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMyKSkgJiYKLQkJICAgICgoaXJxX25yIDwgQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB8fAotCQkgICAgIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFICsgMzIpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB7Ci0JCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JCQlpZiAobWFwW2NvdW50XS5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0FTU0lHTkNMUik7Ci0JCX0gZWxzZSB7Ci0JCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JCQlpZiAobWFwW2NvdW50XS5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0FTU0lHTkNMUik7Ci0JCX0KLQotCQlhdTF4X2ljX3NldHR5cGUoaXJxX25yLCBtYXBbY291bnRdLmltX3R5cGUpOwotCX0KLX0KLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQotewogCWludCBpOwogCiAJLyoKQEAgLTU4NSw3ICs1NjEsNyBAQAogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQ0ZHMUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9DRkcyQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX01BU0tDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQVNTSUdOU0VUKTsKKwlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0FTU0lHTkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9XQUtFQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1NSQ1NFVCk7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9GQUxMSU5HQ0xSKTsKQEAgLTU5Niw3ICs1NzIsNyBAQAogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQ0ZHMUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9DRkcyQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX01BU0tDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQVNTSUdOU0VUKTsKKwlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0FTU0lHTkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9XQUtFQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX1NSQ1NFVCk7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9GQUxMSU5HQ0xSKTsKQEAgLTYxOSwxMSArNTk1LDQzIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIElDMCwgd2hpY2ggaXMgZml4ZWQgcGVyIHByb2Nlc3Nvci4KIAkgKi8KLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pYzBfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pYzBfbWFwKSk7CisJd2hpbGUgKG1hcC0+aW1faXJxICE9IC0xKSB7CisJCWlycV9uciA9IG1hcC0+aW1faXJxOwogCi0JLyogQm9hcmRzIGNhbiByZWdpc3RlciBhZGRpdGlvbmFsIChHUElPLWJhc2VkKSBJUlFzLgotCSovCi0JYm9hcmRfaW5pdF9pcnEoKTsKKwkJaWYgKGlycV9uciA+PSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UpIHsKKwkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwkJCWlmIChtYXAtPmltX3JlcXVlc3QpCisJCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfQVNTSUdOU0VUKTsKKwkJfSBlbHNlIHsKKwkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwkJCWlmIChtYXAtPmltX3JlcXVlc3QpCisJCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfQVNTSUdOU0VUKTsKKwkJfQorCisJCWF1MXhfaWNfc2V0dHlwZShpcnFfbnIsIG1hcC0+aW1fdHlwZSk7CisJCSsrbWFwOworCX0KIAogCXNldF9jMF9zdGF0dXMoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyk7CiB9CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMDAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxNTAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMTAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxNTUwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMjAwX2lycW1hcCk7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggMTE3Zjk5Zi4uMjU4MGU3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTE5LDM5ICsxOSw0MCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oPgogCi0jZGVmaW5lIFBPUlQoX2Jhc2UsIF9pcnEpCQkJCVwKLQl7CQkJCQkJXAotCQkuaW9iYXNlCQk9IF9iYXNlLAkJXAotCQkubWVtYmFzZQk9ICh2b2lkIF9faW9tZW0gKilfYmFzZSxcCi0JCS5tYXBiYXNlCT0gQ1BIWVNBRERSKF9iYXNlKSwJXAotCQkuaXJxCQk9IF9pcnEsCQkJXAotCQkucmVnc2hpZnQJPSAyLAkJCVwKLQkJLmlvdHlwZQkJPSBVUElPX0FVLAkJXAotCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCAJXAorI2RlZmluZSBQT1JUKF9iYXNlLCBfaXJxKQkJCQkJXAorCXsJCQkJCQkJXAorCQkubWFwYmFzZQk9IF9iYXNlLAkJCVwKKwkJLmlycQkJPSBfaXJxLAkJCQlcCisJCS5yZWdzaGlmdAk9IDIsCQkJCVwKKwkJLmlvdHlwZQkJPSBVUElPX0FVLAkJCVwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCB8CVwKKwkJCQkgIFVQRl9GSVhFRF9UWVBFLAkJXAorCQkudHlwZQkJPSBQT1JUXzE2NTUwQSwJCQlcCiAJfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGF1MXgwMF91YXJ0X2RhdGFbXSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDApCiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTAwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUMl9BRERSLCBBVTEwMDBfVUFSVDJfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTAwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTEwMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUMl9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMl9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTEwMDBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTUwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxNTAwX1VBUlQzX0lOVCksCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxMTAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9BRERSLCBBVTExMDBfVUFSVDFfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTExMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAogI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTU1MF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxNTUwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUM19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTU1MF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX0FERFIsIEFVMTIwMF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMjAwX1VBUlQxX0lOVCksCiAjZW5kaWYKICNlbmRpZgkvKiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwICovCiAJeyB9LApAQCAtNzMsOCArNzQsOCBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAotCQkuZW5kCQk9IEFVMTAwMF9VU0JfSE9TVF9JTlQsCisJCS5zdGFydAkJPSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQsCisJCS5lbmQJCT0gRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5ULAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMzIsOCArMTMzLDggQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJCT0gQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQkJLmVuZAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAorCQkuc3RhcnQJCT0gQVUxMjAwX1VTQl9JTlQsCisJCS5lbmQJCT0gQVUxMjAwX1VTQl9JTlQsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTMwOCwxMSArMzA5LDYgQEAKICNlbmRpZiAvKiAjaWZuZGVmIENPTkZJR19NSVBTX0RCMTIwMCAqLwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfU09DX0FVMTIwMCAqLwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4MDBfcGNtY2lhX2RldmljZSA9IHsKLQkubmFtZSAJCT0gImF1MXgwMC1wY21jaWEiLAotCS5pZCAJCT0gMCwKLX07Ci0KIC8qIEFsbCBBbGNoZW15IGRlbW9ib2FyZHMgd2l0aCBJMkMgaGF2ZSB0aGlzICNkZWZpbmUgaW4gdGhlaXIgaGVhZGVycyAqLwogI2lmZGVmIFNNQlVTX1BTQ19CQVNFCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBiZGJfc21idXNfcmVzb3VyY2VzW10gPSB7CkBAIC0zMzEsMTAgKzMyNyw5MiBAQAogfTsKICNlbmRpZgogCisvKiBNYWNybyB0byBoZWxwIGRlZmluaW5nIHRoZSBFdGhlcm5ldCBNQUMgcmVzb3VyY2VzICovCisjZGVmaW5lIE1BQ19SRVMoX2Jhc2UsIF9lbmFibGUsIF9pcnEpCQkJXAorCXsJCQkJCQlcCisJCS5zdGFydAk9IENQSFlTQUREUihfYmFzZSksCQlcCisJCS5lbmQJPSBDUEhZU0FERFIoX2Jhc2UgKyAweGZmZmYpLAlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAorCX0sCQkJCQkJXAorCXsJCQkJCQlcCisJCS5zdGFydAk9IENQSFlTQUREUihfZW5hYmxlKSwJCVwKKwkJLmVuZAk9IENQSFlTQUREUihfZW5hYmxlICsgMHgzKSwJXAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJCVwKKwl9LAkJCQkJCVwKKwl7CQkJCQkJXAorCQkuc3RhcnQJPSBfaXJxLAkJCQlcCisJCS5lbmQJPSBfaXJxLAkJCQlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCQlcCisJfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgwX3Jlc291cmNlc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJTUFDX1JFUyhBVTEwMDBfRVRIMF9CQVNFLCBBVTEwMDBfTUFDMF9FTkFCTEUsIEFVMTAwMF9NQUMwX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKKwlNQUNfUkVTKEFVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQorCU1BQ19SRVMoQVUxNTUwX0VUSDBfQkFTRSwgQVUxNTUwX01BQzBfRU5BQkxFLCBBVTE1NTBfTUFDMF9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCisJTUFDX1JFUyhBVTE1MDBfRVRIMF9CQVNFLCBBVTE1MDBfTUFDMF9FTkFCTEUsIEFVMTUwMF9NQUMwX0RNQV9JTlQpLAorI2VuZGlmCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBoeTFfc2VhcmNoX21hYzAgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeHh4X2V0aDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdTEwMDAtZXRoIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxeHh4X2V0aDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBhdTF4eHhfZXRoMF9yZXNvdXJjZXMsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsCit9OworCisjaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgxX3Jlc291cmNlc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJTUFDX1JFUyhBVTEwMDBfRVRIMV9CQVNFLCBBVTEwMDBfTUFDMV9FTkFCTEUsIEFVMTAwMF9NQUMxX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKKwlNQUNfUkVTKEFVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQorCU1BQ19SRVMoQVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UKSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkucGh5MV9zZWFyY2hfbWFjMCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4eHhfZXRoMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF1MTAwMC1ldGgiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTF4eHhfZXRoMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGF1MXh4eF9ldGgxX3Jlc291cmNlcywKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwKK307CisjZW5kaWYKKwordm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgaW50IHBvcnQsCisJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKK3sKKwlpZiAoIWV0aF9kYXRhIHx8IHBvcnQgPiAxKQorCQlyZXR1cm47CisKKwlpZiAocG9ydCA9PSAwKQorCQltZW1jcHkoJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsIGV0aF9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEpKTsKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKKwllbHNlCisJCW1lbWNweSgmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwgZXRoX2RhdGEsCisJCQlzaXplb2Yoc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSkpOworI2VuZGlmCit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdTF4eHhfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmF1MXh4MF91YXJ0X2RldmljZSwKIAkmYXUxeHh4X3VzYl9vaGNpX2RldmljZSwKLQkmYXUxeDAwX3BjbWNpYV9kZXZpY2UsCiAjaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAogCSZhdTExMDBfbGNkX2RldmljZSwKICNlbmRpZgpAQCAtMzUxLDYgKzQyOSw3IEBACiAjaWZkZWYgU01CVVNfUFNDX0JBU0UKIAkmcGJkYl9zbWJ1c19kZXZpY2UsCiAjZW5kaWYKKwkmYXUxeHh4X2V0aDBfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X3BsYXRmb3JtX2luaXQodm9pZCkKQEAgLTM2Miw2ICs0NDEsMTIgQEAKIAlmb3IgKGkgPSAwOyBhdTF4MDBfdWFydF9kYXRhW2ldLmZsYWdzOyBpKyspCiAJCWF1MXgwMF91YXJ0X2RhdGFbaV0udWFydGNsayA9IHVhcnRjbGs7CiAKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKKwkvKiBSZWdpc3RlciBzZWNvbmQgTUFDIGlmIGVuYWJsZWQgaW4gcGluZnVuYyAqLworCWlmICghKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpU1lTX1BGX05JMikpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDFfZGV2aWNlKTsKKyNlbmRpZgorCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYwppbmRleCAxOGIzMTBiLi5jMjk1MTFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmMKQEAgLTQzLDI5ICs0MywxNSBAQAogY2hhciAqKnByb21fYXJndjsKIGNoYXIgKipwcm9tX2VudnA7CiAKLWNoYXIgKiBfX2luaXRfb3JfbW9kdWxlIHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQljaGFyICpjcDsKLQlpbnQgYWN0cjsKKwlpbnQgaTsKIAotCWFjdHIgPSAxOyAvKiBBbHdheXMgaWdub3JlIGFyZ3ZbMF0gKi8KLQotCWNwID0gJihhcmNzX2NtZGxpbmVbMF0pOwotCXdoaWxlIChhY3RyIDwgcHJvbV9hcmdjKSB7Ci0JCXN0cmNweShjcCwgcHJvbV9hcmd2W2FjdHJdKTsKLQkJY3AgKz0gc3RybGVuKHByb21fYXJndlthY3RyXSk7Ci0JCSpjcCsrID0gJyAnOwotCQlhY3RyKys7CisJZm9yIChpID0gMTsgaSA8IHByb21fYXJnYzsgaSsrKSB7CisJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBwcm9tX2FyZ3ZbaV0sIENPTU1BTkRfTElORV9TSVpFKTsKKwkJaWYgKGkgPCAocHJvbV9hcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQotCWlmIChjcCAhPSAmKGFyY3NfY21kbGluZVswXSkpIC8qIGdldCByaWQgb2YgdHJhaWxpbmcgc3BhY2UgKi8KLQkJLS1jcDsKLQlpZiAocHJvbV9hcmdjID4gMSkKLQkJKmNwID0gJ1wwJzsKIH0KIAogY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSkKQEAgLTEyMSwxNCArMTA3LDEyIEBACiBpbnQgcHJvbV9nZXRfZXRoZXJuZXRfYWRkcihjaGFyICpldGhlcm5ldF9hZGRyKQogewogCWNoYXIgKmV0aGFkZHJfc3RyOwotCWNoYXIgKmFyZ3B0cjsKIAogCS8qIENoZWNrIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3QgKi8KIAlldGhhZGRyX3N0ciA9IHByb21fZ2V0ZW52KCJldGhhZGRyIik7CiAJaWYgKCFldGhhZGRyX3N0cikgewogCQkvKiBDaGVjayBjb21tYW5kIGxpbmUgKi8KLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCWV0aGFkZHJfc3RyID0gc3Ryc3RyKGFyZ3B0ciwgImV0aGFkZHI9Iik7CisJCWV0aGFkZHJfc3RyID0gc3Ryc3RyKGFyY3NfY21kbGluZSwgImV0aGFkZHI9Iik7CiAJCWlmICghZXRoYWRkcl9zdHIpCiAJCQlyZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wdXRzLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWJiZTI0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJTG93IGxldmVsIFVBUlQgcm91dGluZXMgdG8gZGlyZWN0bHkgYWNjZXNzIEFsY2hlbXkgVUFSVC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNkZWZpbmUgU0VSSUFMX0JBU0UgICBVQVJUX0JBU0UKLSNkZWZpbmUgU0VSX0NNRCAgICAgICAweDcKLSNkZWZpbmUgU0VSX0RBVEEgICAgICAweDEKLSNkZWZpbmUgVFhfQlVTWSAgICAgICAweDIwCi0KLSNkZWZpbmUgVElNRU9VVCAgICAgICAweGZmZmZmZgotI2RlZmluZSBTTE9XX0RPV04KLQotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBjb25zdCBjb20xID0gKHVuc2lnbmVkIGxvbmcgKilTRVJJQUxfQkFTRTsKLQotI2lmZGVmIFNMT1dfRE9XTgotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bih2b2lkKQotewotCWludCBrOwotCi0JZm9yIChrID0gMDsgayA8IDEwMDAwOyBrKyspOwotfQotI2Vsc2UKLSNkZWZpbmUgc2xvd19kb3duKCkKLSNlbmRpZgotCi12b2lkCi1wcm9tX3B1dGNoYXIoY29uc3QgdW5zaWduZWQgY2hhciBjKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0JZG8gewotCQljaCA9IGNvbTFbU0VSX0NNRF07Ci0JCXNsb3dfZG93bigpOwotCQlpKys7Ci0JCWlmIChpID4gVElNRU9VVCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKDAgPT0gKGNoICYgVFhfQlVTWSkpOwotCi0JY29tMVtTRVJfREFUQV0gPSBjOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5MTAxMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHgwIHJlc2V0IHJvdXRpbmVzLgotICoKLSAqIENvcHlyaWdodCAyMDAxLCAyMDA2LCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi12b2lkIGF1MTAwMF9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCi17Ci0JLyogU2V0IGFsbCBpbnRlZ3JhdGVkIHBlcmlwaGVyYWxzIHRvIGRpc2FibGVkIHN0YXRlcyAqLwotCWV4dGVybiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpOwotCXUzMiBwcmlkID0gcmVhZF9jMF9wcmlkKCk7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogUmVzZXR0aW5nIEludGVncmF0ZWQgUGVyaXBoZXJhbHNcbiIpOwotCi0Jc3dpdGNoIChwcmlkICYgMHhGRjAwMDAwMCkgewotCWNhc2UgMHgwMDAwMDAwMDogLyogQXUxMDAwICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIwMDAwMDEwKTsgLyogYWM5N19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDgsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAtIGVhcmx5IGVycmF0YSAqLwotCQlhc20oInN5bmMiKTsKLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMzAwMDQwKTsgLyogaXJfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDUyMDAwNCk7IC8qIG1hY2VuMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTAwMDAwOCk7IC8qIGkyc19lbmFibGUgICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMjAwMTAwKTsgLyogdWFydDFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMzAwMTAwKTsgLyogdWFydDJfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjAwMTAwKTsgLyogc3NpMF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjE2ODAxMDApOyAvKiBzc2kxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDAxMDAwMDAwOiAvKiBBdTE1MDAgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjAwMDAwMTApOyAvKiBhYzk3X2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwOCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlIC0gZWFybHkgZXJyYXRhICovCi0JCWFzbSgic3luYyIpOwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMjAwMDU4KTsgLyogdXNiZF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMDQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTE0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEyNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMzQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDAwKTsgLyogbWFjZW4wICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDA0KTsgLyogbWFjZW4xICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDIwKTsgLyogc3lzX2ZyZXFjdHJsMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyNCk7IC8qIHN5c19mcmVxY3RybDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjgpOyAvKiBzeXNfY2xrc3JjICovCi0JCWF1X3dyaXRlbCgweDEwLCAweGIxOTAwMDYwKTsgLyogc3lzX2NwdXBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDA2NCk7IC8qIHN5c19hdXhwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAxMDApOyAvKiBzeXNfcGluaW5wdXRlbiAqLwotCQlicmVhazsKLQljYXNlIDB4MDIwMDAwMDA6IC8qIEF1MTEwMCAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMDAwMDAxMCk7IC8qIGFjOTdfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDA4LCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgLSBlYXJseSBlcnJhdGEgKi8KLQkJYXNtKCJzeW5jIik7Ci0JCWF1X3dyaXRlbCgweDAwLCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAyMDAwNTgpOyAvKiB1c2JkX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDMwMDA0MCk7IC8qIGlyX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEwNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMTQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTI0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEzNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjA1MjAwMDApOyAvKiBtYWNlbjAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEwMDAwMDgpOyAvKiBpMnNfZW5hYmxlICAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTIwMDEwMCk7IC8qIHVhcnQxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMTYwMDEwMCk7IC8qIHNzaTBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjgwMTAwKTsgLyogc3NpMV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjApOyAvKiBzeXNfZnJlcWN0cmwwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI0KTsgLyogc3lzX2ZyZXFjdHJsMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyOCk7IC8qIHN5c19jbGtzcmMgKi8KLQkJYXVfd3JpdGVsKDB4MTAsIDB4YjE5MDAwNjApOyAvKiBzeXNfY3B1cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDY0KTsgLyogc3lzX2F1eHBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDEwMCk7IC8qIHN5c19waW5pbnB1dGVuICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMzAwMDAwMDogLyogQXUxNTUwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxYTAwMDA0KTsgLyogcHNjIDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjFiMDAwMDQpOyAvKiBwc2MgMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMGEwMDAwNCk7IC8qIHBzYyAyICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwYjAwMDA0KTsgLyogcHNjIDMgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwNCk7IC8qIG1hY2VuMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTIwMDEwMCk7IC8qIHVhcnQxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JfQotCi0Jc2V0X2MwX3N0YXR1cyhTVDBfQkVWIHwgU1QwX0VSTCk7Ci0JY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX1VOQ0FDSEVEKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQl3cml0ZV9jMF93aXJlZCgwKTsKLQotCS8qIEdpdmUgYm9hcmQgYSBjaGFuY2UgdG8gZG8gYSBoYXJkd2FyZSByZXNldCAqLwotCWJvYXJkX3Jlc2V0KCk7Ci0KLQkvKiBKdW1wIHRvIHRoZSBiZWdnaW5pbmcgaW4gY2FzZSBib2FyZF9yZXNldCgpIGlzIGVtcHR5ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImpyXHQlMCI6OiJyIigweGJmYzAwMDAwKSk7Ci19Ci0KLXZvaWQgYXUxMDAwX2hhbHQodm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCi0JLyogUG93ZXIgb2ZmIHN5c3RlbSAqLwotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBQb3dlcmluZyBvZmYuLi5cbiIpOwotCWF1X3dyaXRldyhhdV9yZWFkdygweEFGMDAwMDFDKSB8ICgzIDw8IDE0KSwgMHhBRjAwMDAxQyk7Ci0JYXVfc3luYygpOwotCXdoaWxlICgxKTsgLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotI2Vsc2UKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEwLCAxKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotCWF1X3dyaXRldyhhdV9yZWFkdygweEI5ODAwMDFDKSB8ICgxIDw8IDE0KSwgMHhCOTgwMDAxQyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUE0KLQlhdV9zbGVlcCgpOwotCi0JLyogU2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHB1dCBDUFUgaW4gc2xlZXAgbW9kZVxuIik7Ci0Jd2hpbGUgKDEpOwotI2Vsc2UKLQl3aGlsZSAoMSkKLQkJX19hc21fXygiLnNldFx0bWlwczNcblx0IgotCSAgICAgICAgICAgICAgICAid2FpdFxuXHQiCi0JCQkiLnNldFx0bWlwczAiKTsKLSNlbmRpZgotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkgKi8KLX0KLQotdm9pZCBhdTEwMDBfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JYXUxMDAwX2hhbHQoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKaW5kZXggNjE4NGJhYS4uNTYxZTVkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKQEAgLTI5LDE4ICsyOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNpbmNsdWRlIDxhdTEwMDAuaD4KIAogZXh0ZXJuIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXUxMDAwX3Jlc3RhcnQoY2hhciAqKTsKLWV4dGVybiB2b2lkIGF1MTAwMF9oYWx0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXUxMDAwX3Bvd2VyX29mZih2b2lkKTsKIGV4dGVybiB2b2lkIHNldF9jcHVzcGVjKHZvaWQpOwogCiB2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQpAQCAtNTcsMTAgKzUyLDYgQEAKIAkvKiB0aGlzIGlzIGZhc3RlciB0aGFuIHdhc3RpbmcgY3ljbGVzIHRyeWluZyB0byBhcHByb3hpbWF0ZSBpdCAqLwogCXByZXNldF9scGogPSAoZXN0X2ZyZXEgPj4gMSkgLyBIWjsKIAotCV9tYWNoaW5lX3Jlc3RhcnQgPSBhdTEwMDBfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gYXUxMDAwX2hhbHQ7Ci0JcG1fcG93ZXJfb2ZmID0gYXUxMDAwX3Bvd2VyX29mZjsKLQogCWJvYXJkX3NldHVwKCk7ICAvKiBib2FyZCBzcGVjaWZpYyBzZXR1cCAqLwogCiAJaWYgKGF1MXh4eF9jcHVfbmVlZHNfY29uZmlnX29kKCkpCkBAIC03OCwzNyArNjksMjAgQEAKIAlpb21lbV9yZXNvdXJjZS5lbmQgPSBJT01FTV9SRVNPVVJDRV9FTkQ7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCiAvKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIHZhbGlkIGZvciBhbGwgQXUxeCBiYXNlZCBib2FyZHMgKi8KIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QgcGh5c19hZGRyLCBwaHlzX3Qgc2l6ZSkKIHsKKwl1MzIgc3RhcnQgPSAodTMyKUF1MTUwMF9QQ0lfTUVNX1NUQVJUOworCXUzMiBlbmQgICA9ICh1MzIpQXUxNTAwX1BDSV9NRU1fRU5EOworCiAJLyogRG9uJ3QgZml4dXAgMzYtYml0IGFkZHJlc3NlcyAqLwogCWlmICgocGh5c19hZGRyID4+IDMyKSAhPSAwKQogCQlyZXR1cm4gcGh5c19hZGRyOwogCi0jaWZkZWYgQ09ORklHX1BDSQotCXsKLQkJdTMyIHN0YXJ0ID0gKHUzMilBdTE1MDBfUENJX01FTV9TVEFSVDsKLQkJdTMyIGVuZCAgID0gKHUzMilBdTE1MDBfUENJX01FTV9FTkQ7Ci0KLQkJLyogQ2hlY2sgZm9yIFBDSSBtZW1vcnkgd2luZG93ICovCi0JCWlmIChwaHlzX2FkZHIgPj0gc3RhcnQgJiYgKHBoeXNfYWRkciArIHNpemUgLSAxKSA8PSBlbmQpCi0JCQlyZXR1cm4gKHBoeXNfdCkKLQkJCSAgICAgICAoKHBoeXNfYWRkciAtIHN0YXJ0KSArIEF1MTUwMF9QQ0lfTUVNX1NUQVJUKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogQWxsIEF1MXh4MCBTT0NzIGhhdmUgYSBQQ01DSUEgY29udHJvbGxlci4KLQkgKiBXZSBzZXR1cCBvdXIgMzItYml0IHBzZXVkbyBhZGRyZXNzZXMgdG8gYmUgZXF1YWwgdG8gdGhlCi0JICogMzYtYml0IGFkZHIgPj4gNCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY2hlY2sgdGhlIGFkZHJlc3MKLQkgKiBhbmQgZml4IGl0LgotCSAqIFRoZSBQQ01DSUEgc29ja2V0IDAgcGh5c2ljYWwgYXR0cmlidXRlIGFkZHJlc3MgaXMgMHhGIDQwMDAgMDAwMC4KLQkgKiBUaGUgcHNldWRvIGFkZHJlc3Mgd2UgdXNlIGlzIDB4RjQwMCAwMDAwLiBBbnkgYWRkcmVzcyBvdmVyCi0JICogMHhGNDAwIDAwMDAgaXMgYSBQQ01DSUEgcHNldWRvIGFkZHJlc3MuCi0JICovCi0JaWYgKChwaHlzX2FkZHIgPj0gMHhGNDAwMDAwMCkgJiYgKHBoeXNfYWRkciA8IDB4RkZGRkZGRkYpKQotCQlyZXR1cm4gKHBoeXNfdCkocGh5c19hZGRyIDw8IDQpOworCS8qIENoZWNrIGZvciBQQ0kgbWVtb3J5IHdpbmRvdyAqLworCWlmIChwaHlzX2FkZHIgPj0gc3RhcnQgJiYgKHBoeXNfYWRkciArIHNpemUgLSAxKSA8PSBlbmQpCisJCXJldHVybiAocGh5c190KSgocGh5c19hZGRyIC0gc3RhcnQpICsgQXUxNTAwX1BDSV9NRU1fU1RBUlQpOwogCiAJLyogZGVmYXVsdCBub3AgKi8KIAlyZXR1cm4gcGh5c19hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKaW5kZXggMzc5YTY2NC4uMmFlY2IyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYW51ZWwgTGF1c3MgPG1hbm9Acm9hcmluZWxrLmhvbWVsaW51eC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CiAgKgogICogUHJldmlvdXMgaW5jYXJuYXRpb25zIHdlcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDYsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSwgPHNvdXJjZUBtdmlzdGEuY29tPgpAQCAtODUsNyArODUsNiBAQAogCS5uYW1lCQk9ICJydGNtYXRjaDIiLAogCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSBBVTEwMDBfUlRDX01BVENIMl9JTlQsCiAJLnNldF9uZXh0X2V2ZW50CT0gYXUxeF9ydGNtYXRjaDJfc2V0X25leHRfZXZlbnQsCiAJLnNldF9tb2RlCT0gYXUxeF9ydGNtYXRjaDJfc2V0X21vZGUsCiAJLmNwdW1hc2sJPSBjcHVfYWxsX21hc2ssCkBAIC05OCwxMSArOTcsMTMgQEAKIAkuZGV2X2lkCQk9ICZhdTF4X3J0Y21hdGNoMl9jbG9ja2RldiwKIH07CiAKLXZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhbGNoZW15X3RpbWVfaW5pdCh1bnNpZ25lZCBpbnQgbTJpbnQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QgPSAmYXUxeF9ydGNtYXRjaDJfY2xvY2tkZXY7CiAJdW5zaWduZWQgbG9uZyB0OwogCisJYXUxeF9ydGNtYXRjaDJfY2xvY2tkZXYuaXJxID0gbTJpbnQ7CisKIAkvKiBDaGVjayBpZiBmaXJtd2FyZSAoWUFNT04sIC4uLikgaGFzIGVuYWJsZWQgMzJrSHogYW5kIGNsb2NrCiAJICogaGFzIGJlZW4gZGV0ZWN0ZWQuICBJZiBzbyBpbnN0YWxsIHRoZSBydGNtYXRjaDIgY2xvY2tzb3VyY2UsCiAJICogb3RoZXJ3aXNlIGRvbid0IGJvdGhlci4gIE5vdGUgdGhhdCBib3RoIGJpdHMgYmVpbmcgc2V0IGlzIGJ5CkBAIC0xNDgsMTMgKzE0OSwxOCBAQAogCWNkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmYsIGNkKTsKIAljZC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyg4LCBjZCk7CS8qIH4wLjI1bXMgKi8KIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2QpOwotCXNldHVwX2lycShBVTEwMDBfUlRDX01BVENIMl9JTlQsICZhdTF4X3J0Y21hdGNoMl9pcnFhY3Rpb24pOworCXNldHVwX2lycShtMmludCwgJmF1MXhfcnRjbWF0Y2gyX2lycWFjdGlvbik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IGNsb2Nrc291cmNlIGluc3RhbGxlZFxuIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNudHJfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGFsY2hlbXlfc2V0dXBfYzB0aW1lcih2b2lkKQorewogCS8qCiAJICogTUlQUyBrZXJuZWwgYXNzaWducyAnYXUxa193YWl0JyB0byAnY3B1X3dhaXQnIGJlZm9yZSB0aGlzCiAJICogZnVuY3Rpb24gaXMgY2FsbGVkLiAgQmVjYXVzZSB0aGUgQWxjaGVteSBjb3VudGVycyBhcmUgdW51c2FibGUKQEAgLTE2NiwzICsxNzIsMjIgQEAKIAlyNGtfY2xvY2tldmVudF9pbml0KCk7CiAJaW5pdF9yNGtfY2xvY2tzb3VyY2UoKTsKIH0KKworc3RhdGljIGludCBhbGNoZW15X20yaW50dGFiW10gX19pbml0ZGF0YSA9IHsKKwlBVTEwMDBfUlRDX01BVENIMl9JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMl9JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDJfSU5ULAorfTsKKwordm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKK3sKKwlpbnQgdDsKKworCXQgPSBhbGNoZW15X2dldF9jcHV0eXBlKCk7CisJaWYgKHQgPT0gQUxDSEVNWV9DUFVfVU5LTk9XTikKKwkJYWxjaGVteV9zZXR1cF9jMHRpbWVyKCk7CisJZWxzZSBpZiAoYWxjaGVteV90aW1lX2luaXQoYWxjaGVteV9tMmludHRhYlt0XSkpCisJCWFsY2hlbXlfc2V0dXBfYzB0aW1lcigpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlCmluZGV4IDczMGY5ZjIuLmVjYmQzN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIEFsY2hlbXkgRGV2ZWxib2FyZHMKICMKIAotb2JqLXkgKz0gcHJvbS5vCitvYmoteSArPSBwcm9tLm8gYmNzci5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19NSVBTX1BCMTAwMCkJKz0gcGIxMDAwLwogb2JqLSQoQ09ORklHX01JUFNfUEIxMTAwKQkrPSBwYjExMDAvCkBAIC0xMSw4ICsxMSwxMCBAQAogb2JqLSQoQ09ORklHX01JUFNfUEIxNTUwKQkrPSBwYjE1NTAvCiBvYmotJChDT05GSUdfTUlQU19EQjEwMDApCSs9IGRiMXgwMC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTEwMCkJKz0gZGIxeDAwLwotb2JqLSQoQ09ORklHX01JUFNfREIxMjAwKQkrPSBwYjEyMDAvCitvYmotJChDT05GSUdfTUlQU19EQjEyMDApCSs9IGRiMTIwMC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTUwMCkJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfREIxNTUwKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19CT1NQT1JVUykJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSBkYjF4MDAvCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvYmNzci5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2Jjc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM0ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2Jjc3IuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIGJjc3IuaCAtLSBEYjF4eHgvUGIxeHh4IERldmJvYXJkIENQTEQgcmVnaXN0ZXJzICgiQkNTUiIpIGFic3RyYWN0aW9uLgorICoKKyAqIEFsbCBBbGNoZW15IGRldmVsb3BtZW50IGJvYXJkcyAoZXhjZXB0LCBvZiBjb3Vyc2UsIHRoZSB3ZWlyZCBQQjEwMDApCisgKiBoYXZlIGEgZmV3IHJlZ2lzdGVycyBpbiBhIENQTEQgd2l0aCBzdGFuZGFyZGlzZWQgbGF5b3V0OyB0aGV5IG1vc3RseQorICogb25seSBkaWZmZXIgaW4gYmFzZSBhZGRyZXNzLgorICogQWxsIHJlZ2lzdGVycyBhcmUgMTZiaXRzIHdpZGUgd2l0aCAzMmJpdCBzcGFjaW5nLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCitzdGF0aWMgc3RydWN0IGJjc3JfcmVnIHsKKwl2b2lkIF9faW9tZW0gKnJhZGRyOworCXNwaW5sb2NrX3QgbG9jazsKK30gYmNzcl9yZWdzW0JDU1JfQ05UXTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqYmNzcl92aXJ0OwkvKiBLU0VHMSBhZGRyIG9mIEJDU1IgYmFzZSAqLworc3RhdGljIGludCBiY3NyX2NzY19iYXNlOwkvKiBsaW51eC1pcnEgb2YgZmlyc3QgY2FzY2FkZWQgaXJxICovCisKK3ZvaWQgX19pbml0IGJjc3JfaW5pdCh1bnNpZ25lZCBsb25nIGJjc3IxX3BoeXMsIHVuc2lnbmVkIGxvbmcgYmNzcjJfcGh5cykKK3sKKwlpbnQgaTsKKworCWJjc3IxX3BoeXMgPSBLU0VHMUFERFIoQ1BIWVNBRERSKGJjc3IxX3BoeXMpKTsKKwliY3NyMl9waHlzID0gS1NFRzFBRERSKENQSFlTQUREUihiY3NyMl9waHlzKSk7CisKKwliY3NyX3ZpcnQgPSAodm9pZCBfX2lvbWVtICopYmNzcjFfcGh5czsKKworCWZvciAoaSA9IDA7IGkgPCBCQ1NSX0NOVDsgaSsrKSB7CisJCWlmIChpID49IEJDU1JfSEVYTEVEUykKKwkJCWJjc3JfcmVnc1tpXS5yYWRkciA9ICh2b2lkIF9faW9tZW0gKiliY3NyMl9waHlzICsKKwkJCQkJKDB4MDQgKiAoaSAtIEJDU1JfSEVYTEVEUykpOworCQllbHNlCisJCQliY3NyX3JlZ3NbaV0ucmFkZHIgPSAodm9pZCBfX2lvbWVtICopYmNzcjFfcGh5cyArCisJCQkJCSgweDA0ICogaSk7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmJjc3JfcmVnc1tpXS5sb2NrKTsKKwl9Cit9CisKK3Vuc2lnbmVkIHNob3J0IGJjc3JfcmVhZChlbnVtIGJjc3JfaWQgcmVnKQoreworCXVuc2lnbmVkIHNob3J0IHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJciA9IF9fcmF3X3JlYWR3KGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY3NyX3JlYWQpOworCit2b2lkIGJjc3Jfd3JpdGUoZW51bSBiY3NyX2lkIHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCV9fcmF3X3dyaXRldyh2YWwsIGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwl3bWIoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY3NyX3dyaXRlKTsKKwordm9pZCBiY3NyX21vZChlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCBjbHIsIHVuc2lnbmVkIHNob3J0IHNldCkKK3sKKwl1bnNpZ25lZCBzaG9ydCByOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCXIgPSBfX3Jhd19yZWFkdyhiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJciAmPSB+Y2xyOworCXIgfD0gc2V0OworCV9fcmF3X3dyaXRldyhyLCBiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJd21iKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNzcl9tb2QpOworCisvKgorICogREIxMjAwL1BCMTIwMCBDUExEIElSUSBtdXhlcgorICovCitzdGF0aWMgdm9pZCBiY3NyX2NzY19oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBiaXNyID0gX19yYXdfcmVhZHcoYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU1RBVCk7CisKKwlmb3IgKCA7IGJpc3I7IGJpc3IgJj0gYmlzciAtIDEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiY3NyX2NzY19iYXNlICsgX19mZnMoYmlzcikpOworfQorCisvKiBOT1RFOiBib3RoIHRoZSBlbmFibGUgYW5kIG1hc2sgYml0cyBtdXN0IGJlIGNsZWFyZWQsIG90aGVyd2lzZSB0aGUKKyAqIENQTEQgZ2VuZXJhdGVzIHRvbnMgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAoYXQgbGVhc3Qgb24gbXkgREIxMjAwKS4KKyAqCS0tIG1sYXUKKyAqLworc3RhdGljIHZvaWQgYmNzcl9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIHNob3J0IHYgPSAxIDw8IChpcnFfbnIgLSBiY3NyX2NzY19iYXNlKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UQ0xSKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS0NMUik7CisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjc3JfaXJxX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2ID0gMSA8PCAoaXJxX25yIC0gYmNzcl9jc2NfYmFzZSk7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVENMUik7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tDTFIpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRTVEFUKTsJLyogYWNrICovCisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjc3JfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIHNob3J0IHYgPSAxIDw8IChpcnFfbnIgLSBiY3NyX2NzY19iYXNlKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU0VUKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS1NFVCk7CisJd21iKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNzcl9pcnFfdHlwZSA9IHsKKwkubmFtZQkJPSAiQ1BMRCIsCisJLm1hc2sJCT0gYmNzcl9pcnFfbWFzaywKKwkubWFza19hY2sJPSBiY3NyX2lycV9tYXNrYWNrLAorCS51bm1hc2sJCT0gYmNzcl9pcnFfdW5tYXNrLAorfTsKKwordm9pZCBfX2luaXQgYmNzcl9pbml0X2lycShpbnQgY3NjX3N0YXJ0LCBpbnQgY3NjX2VuZCwgaW50IGhvb2tfaXJxKQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwkvKiBtYXNrICYgZGlzYWJsZSAmIGFjayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRDTFIpOworCV9fcmF3X3dyaXRldygweGZmZmYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tDTFIpOworCV9fcmF3X3dyaXRldygweGZmZmYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVFNUQVQpOworCXdtYigpOworCisJYmNzcl9jc2NfYmFzZSA9IGNzY19zdGFydDsKKworCWZvciAoaXJxID0gY3NjX3N0YXJ0OyBpcnEgPD0gY3NjX2VuZDsgaXJxKyspCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmJjc3JfaXJxX3R5cGUsCisJCQloYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGhvb2tfaXJxLCBiY3NyX2NzY19oYW5kbGVyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODQwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15ICs9IHNldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjk1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBEQkF1MTIwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTE1NTBfc3BpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGIxMjAwX3NwaWZsYXNoX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9ICJEQjEyMDAgU1BJIGZsYXNoIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGRiMTIwMF9zcGlmbGFzaF9kYXRhID0geworCS5uYW1lCQk9ICJzMjVmbDAwMSIsCisJLnBhcnRzCQk9IGRiMTIwMF9zcGlmbGFzaF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGRiMTIwMF9zcGlmbGFzaF9wYXJ0cyksCisJLnR5cGUJCT0gIm0yNXAxMCIsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGRiMTIwMF9zcGlfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkvKiBUSSBUTVAxMjFBSURCVlIgdGVtcCBzZW5zb3IgKi8KKwkJLm1vZGFsaWFzCT0gInRtcDEyMSIsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tb2RlCQk9IDAsCisJfSwKKwl7CisJCS8qIFNwYW5zaW9uIFMyNUZMMDAxRDBGTUEgU1BJIGZsYXNoICovCisJCS5tb2RhbGlhcwk9ICJtMjVwODAiLAorCQkubWF4X3NwZWVkX2h6CT0gNTAwMDAwMDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0CT0gMSwKKwkJLm1vZGUJCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZGIxMjAwX3NwaWZsYXNoX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZGIxMjAwX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS8qIEFUMjRDMDQtMTAgSTJDIGVlcHJvbSAqLworCQlJMkNfQk9BUkRfSU5GTygiMjRjMDQiLCAweDUyKSwKKwl9LAorCXsKKwkJLyogUGhpbGlwcyBORTE2MTkgdGVtcC92b2x0YWdlIHNlbnNvciAoYWRtMTAyNSBkcnYpICovCisJCUkyQ19CT0FSRF9JTkZPKCJuZTE2MTkiLCAweDJkKSwKKwl9LAorCXsKKwkJLyogSTJTIGF1ZGlvIGNvZGVjIFdNODczMSAqLworCQlJMkNfQk9BUkRfSU5GTygid204NzMxIiwgMHgxYiksCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdTEyMDBfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9ICh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVzsKKworCWlvYWRkciAmPSAweGZmZmZmZjAwOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkgeworCQlpb2FkZHIgKz0gTUVNX1NUTkFORF9DTUQ7CisJfSBlbHNlIGlmIChjdHJsICYgTkFORF9BTEUpIHsKKwkJaW9hZGRyICs9IE1FTV9TVE5BTkRfQUREUjsKKwl9IGVsc2UgeworCQkvKiBhc3N1bWUgd2Ugd2FudCB0byByL3cgcmVhbCBkYXRhICBieSBkZWZhdWx0ICovCisJCWlvYWRkciArPSBNRU1fU1ROQU5EX0RBVEE7CisJfQorCXRoaXMtPklPX0FERFJfUiA9IHRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKilpb2FkZHI7CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKSB7CisJCV9fcmF3X3dyaXRlYihjbWQsIHRoaXMtPklPX0FERFJfVyk7CisJCXdtYigpOworCX0KK30KKworc3RhdGljIGludCBhdTEyMDBfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilNRU1fU1RTVEFUKSAmIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkYjEyMDBfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGIxMjAwX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIk5BTkQgRlMgMCIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IDggKiAxMDI0ICogMTAyNCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiTkFORCBGUyAxIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgZGIxMjAwX25hbmRfcGxhdGRhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5ucl9jaGlwcwk9IDEsCisJCS5jaGlwX29mZnNldAk9IDAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShkYjEyMDBfbmFuZF9wYXJ0cyksCisJCS5wYXJ0aXRpb25zCT0gZGIxMjAwX25hbmRfcGFydHMsCisJCS5jaGlwX2RlbGF5CT0gMjAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzID0gZGIxMjAwX3BhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwgPSB7CisJCS5kZXZfcmVhZHkJPSBhdTEyMDBfbmFuZF9kZXZpY2VfcmVhZHksCisJCS5jbWRfY3RybAk9IGF1MTIwMF9uYW5kX2NtZF9jdHJsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiMTIwMF9uYW5kX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX05BTkRfUEhZU19BRERSLAorCQkuZW5kCT0gREIxMjAwX05BTkRfUEhZU19BRERSICsgMHhmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9uYW5kX2RldiA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYjEyMDBfbmFuZF9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9uYW5kX3JlcywKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRiMTIwMF9uYW5kX3BsYXRkYXRhLAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBkYjEyMDBfZXRoX2RhdGEgPSB7CisJLmZsYWdzCT0gU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfMTZCSVQsCisJLmxlZGEJPSBSUENfTEVEXzEwMF8xMCwKKwkubGVkYgk9IFJQQ19MRURfVFhfUlgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiMTIwMF9ldGhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBEQjEyMDBfRVRIX1BIWVNfQUREUiwKKwkJLmVuZAk9IERCMTIwMF9FVEhfUEhZU19BRERSICsgMHhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX0VUSF9JTlQsCisJCS5lbmQJPSBEQjEyMDBfRVRIX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9ldGhfZGV2ID0geworCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRiMTIwMF9ldGhfZGF0YSwKKwl9LAorCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGIxMjAwX2V0aF9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9ldGhfcmVzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGIxMjAwX2lkZV9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9JREVfUEhZU19BRERSLAorCQkuZW5kIAk9IERCMTIwMF9JREVfUEhZU19BRERSICsgREIxMjAwX0lERV9QSFlTX0xFTiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBEQjEyMDBfSURFX0lOVCwKKwkJLmVuZAk9IERCMTIwMF9JREVfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IGlkZV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9pZGVfZGV2ID0geworCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgCQk9ICZpZGVfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGIxMjAwX2lkZV9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9pZGVfcmVzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9ydGNfZGV2ID0geworCS5uYW1lCT0gInJ0Yy1hdTF4eHgiLAorCS5pZAk9IC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNEIGNhcmRkZXRlY3RzOiAgdGhleSdyZSBzdXBwb3NlZCB0byBiZSBlZGdlLXRyaWdnZXJlZCwgYnV0IGFjaworICogZG9lc24ndCBzZWVtIHRvIHdvcmsgKENQTEQgUmV2IDIpLiAgSW5zdGVhZCwgdGhlIHNjcmVhbWluZyBvbmUKKyAqIGlzIGRpc2FibGVkIGFuZCBpdHMgY291bnRlcnBhcnQgZW5hYmxlZC4gIFRoZSA1MDBtcyB0aW1lb3V0IGlzCisgKiBiZWNhdXNlIHRoZSBjYXJkZGV0ZWN0IGlzbid0IGRlYm91bmNlZCBpbiBoYXJkd2FyZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGRiMTIwMF9tbWNfY2QoaW50IGlycSwgdm9pZCAqcHRyKQoreworCXZvaWQoKm1tY19jZCkoc3RydWN0IG1tY19ob3N0ICosIHVuc2lnbmVkIGxvbmcpOworCisJaWYgKGlycSA9PSBEQjEyMDBfU0QwX0lOU0VSVF9JTlQpIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKERCMTIwMF9TRDBfSU5TRVJUX0lOVCk7CisJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9FSkVDVF9JTlQpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhEQjEyMDBfU0QwX0VKRUNUX0lOVCk7CisJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5UKTsKKwl9CisKKwkvKiBsaW5rIGFnYWluc3QgQ09ORklHX01NQz1tICovCisJbW1jX2NkID0gc3ltYm9sX2dldChtbWNfZGV0ZWN0X2NoYW5nZSk7CisJaWYgKG1tY19jZCkgeworCQltbWNfY2QocHRyLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCQlzeW1ib2xfcHV0KG1tY19kZXRlY3RfY2hhbmdlKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGIxMjAwX21tY19jZF9zZXR1cCh2b2lkICptbWNfaG9zdCwgaW50IGVuKQoreworCWludCByZXQ7CisKKwlpZiAoZW4pIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5ULCBkYjEyMDBfbW1jX2NkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNkX2luc2VydCIsIG1tY19ob3N0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IHJlcXVlc3RfaXJxKERCMTIwMF9TRDBfRUpFQ1RfSU5ULCBkYjEyMDBfbW1jX2NkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNkX2VqZWN0IiwgbW1jX2hvc3QpOworCQlpZiAocmV0KSB7CisJCQlmcmVlX2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQsIG1tY19ob3N0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QwSU5TRVJUKQorCQkJZW5hYmxlX2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCk7CisJCWVsc2UKKwkJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5UKTsKKworCX0gZWxzZSB7CisJCWZyZWVfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCwgbW1jX2hvc3QpOworCQlmcmVlX2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCwgbW1jX2hvc3QpOworCX0KKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRiMTIwMF9tbWNfc2V0X3Bvd2VyKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpCit7CisJaWYgKHN0YXRlKSB7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfU0QwUFdSKTsKKwkJbXNsZWVwKDQwMCk7CS8qIHN0YWJpbGl6YXRpb24gdGltZSAqLworCX0gZWxzZQorCQliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX1NEMFBXUiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZGIxMjAwX21tY19jYXJkX3JlYWRvbmx5KHZvaWQgKm1tY19ob3N0KQoreworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGRiMTIwMF9tbWNfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKK3sKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QwSU5TRVJUKSA/IDEgOiAwOworfQorCitzdGF0aWMgdm9pZCBkYjEyMDBfbW1jbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQsCisJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJYmNzcl9tb2QoQkNTUl9MRURTLCBCQ1NSX0xFRFNfTEVEMCwgMCk7CisJZWxzZQorCQliY3NyX21vZChCQ1NSX0xFRFMsIDAsIEJDU1JfTEVEU19MRUQwKTsKK30KKworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgZGIxMjAwX21tY19sZWQgPSB7CisJLmJyaWdodG5lc3Nfc2V0CT0gZGIxMjAwX21tY2xlZF9zZXQsCit9OworCisvKiBuZWVkZWQgYnkgYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMgKi8KK3N0cnVjdCBhdTF4bW1jX3BsYXRmb3JtX2RhdGEgYXUxeG1tY19wbGF0ZGF0YVtdID0geworCVswXSA9IHsKKwkJLmNkX3NldHVwCT0gZGIxMjAwX21tY19jZF9zZXR1cCwKKwkJLnNldF9wb3dlcgk9IGRiMTIwMF9tbWNfc2V0X3Bvd2VyLAorCQkuY2FyZF9pbnNlcnRlZAk9IGRiMTIwMF9tbWNfY2FyZF9pbnNlcnRlZCwKKwkJLmNhcmRfcmVhZG9ubHkJPSBkYjEyMDBfbW1jX2NhcmRfcmVhZG9ubHksCisJCS5sZWQJCT0gJmRiMTIwMF9tbWNfbGVkLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTEyMDBfcHNjMF9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBTQzBfUEhZU19BRERSLAorCQkuZW5kCT0gUFNDMF9QSFlTX0FERFIgKyAweDAwMGZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVUxMjAwX1BTQzBfSU5ULAorCQkuZW5kCT0gQVUxMjAwX1BTQzBfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzBfVFgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMF9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MwX1JYLAorCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzBfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfaTJjX2RldiA9IHsKKwkubmFtZQkJPSAiYXUxeHBzY19zbWJ1cyIsCisJLmlkCQk9IDAsCS8qIGJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzBfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMF9yZXMsCit9OworCitzdGF0aWMgdm9pZCBkYjEyMDBfc3BpX2NzX2VuKHN0cnVjdCBhdTE1NTBfc3BpX2luZm8gKnNwaSwgaW50IGNzLCBpbnQgcG9sKQoreworCWlmIChjcykKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX1NQSVNFTCk7CisJZWxzZQorCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfU1BJU0VMLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBhdTE1NTBfc3BpX2luZm8gZGIxMjAwX3NwaV9wbGF0ZGF0YSA9IHsKKwkubWFpbmNsa19oegk9IDUwMDAwMDAwLAkvKiBQU0MwIGNsb2NrICovCisJLm51bV9jaGlwc2VsZWN0ID0gMiwKKwkuYWN0aXZhdGVfY3MJPSBkYjEyMDBfc3BpX2NzX2VuLAorfTsKKworc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV8zMkJJVF9NQVNLOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfc3BpX2RldiA9IHsKKwkuZGV2CT0geworCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiMTIwMF9zcGlfcGxhdGRhdGEsCisJfSwKKwkubmFtZQkJPSAiYXUxNTUwLXNwaSIsCisJLmlkCQk9IDAsCS8qIGJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzBfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMF9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MTIwMF9wc2MxX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUFNDMV9QSFlTX0FERFIsCisJCS5lbmQJPSBQU0MxX1BIWVNfQUREUiArIDB4MDAwZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVTEyMDBfUFNDMV9JTlQsCisJCS5lbmQJPSBBVTEyMDBfUFNDMV9JTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKKwkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfUlgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9hdWRpb19kZXYgPSB7CisJLyogbmFtZSBhc3NpZ25lZCBsYXRlciBiYXNlZCBvbiBzd2l0Y2ggc2V0dGluZyAqLworCS5pZAkJPSAxLAkvKiBQU0MgSUQgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzFfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMV9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGIxMjAwX2RldnNbXSBfX2luaXRkYXRhID0geworCU5VTEwsCQkvKiBQU0MwLCBzZWxlY3RlZCBieSBTNi44ICovCisJJmRiMTIwMF9pZGVfZGV2LAorCSZkYjEyMDBfZXRoX2RldiwKKwkmZGIxMjAwX3J0Y19kZXYsCisJJmRiMTIwMF9uYW5kX2RldiwKKwkmZGIxMjAwX2F1ZGlvX2RldiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMTIwMF9kZXZfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGZjOworCXVuc2lnbmVkIHNob3J0IHN3OworCWludCBzd2FwcGVkOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGIxMjAwX2kyY19kZXZzLAorCQkJCUFSUkFZX1NJWkUoZGIxMjAwX2kyY19kZXZzKSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGIxMjAwX3NwaV9kZXZzLAorCQkJCUFSUkFZX1NJWkUoZGIxMjAwX2kyY19kZXZzKSk7CisKKwkvKiBTV0lUQ0hFUzoJUzYuOCBJMkMvU1BJIHNlbGVjdG9yICAoT0ZGPUkyQyAgT049U1BJKQorCSAqCQlTNi43IEFDOTcvSTJTIHNlbGVjdG9yIChPRkY9QUM5NyBPTj1JMlMpCisJICovCisKKwkvKiBOT1RFOiBHUElPMjE1IGNvbnRyb2xzIE9URyBWQlVTIHN1cHBseS4gIEluIFNQSSBtb2RlIGhvd2V2ZXIKKwkgKiB0aGlzIHBpbiBpcyBjbGFpbWVkIGJ5IFBTQzAgKHVudXNlZCB0aG91Z2gsIGJ1dCBwaW5tdXggZG9lc24ndAorCSAqIGFsbG93IHRvIGZyZWUgaXQgd2l0aG91dCBjcmlwcGxpbmcgdGhlIFNQSSBpbnRlcmZhY2UpLgorCSAqIEFzIGEgcmVzdWx0LCBpbiBTUEkgbW9kZSwgT1RHIHNpbXBseSB3b24ndCB3b3JrIChQU0MwIHVzZXMKKwkgKiBpdCBhcyBhbiBpbnB1dCBwaW4gd2hpY2ggaXMgcHVsbGVkIGhpZ2ggb24gdGhlIGJvYXJkcykuCisJICovCisJcGZjID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKSAmIH5TWVNfUElORlVOQ19QMEE7CisKKwkvKiBzd2l0Y2ggb2ZmIE9URyBWQlVTIHN1cHBseSAqLworCWdwaW9fcmVxdWVzdCgyMTUsICJvdGctdmJ1cyIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgyMTUsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiREIxMjAwIGRldmljZSBjb25maWd1cmF0aW9uOlxuIik7CisKKwlzdyA9IGJjc3JfcmVhZChCQ1NSX1NXSVRDSEVTKTsKKwlpZiAoc3cgJiBCQ1NSX1NXSVRDSEVTX0RJUF84KSB7CisJCWRiMTIwMF9kZXZzWzBdID0gJmRiMTIwMF9pMmNfZGV2OworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDME1VWCwgMCk7CisKKwkJcGZjIHw9ICgyIDw8IDE3KTsJLyogR1BJTzIgYmxvY2sgb3ducyBHUElPMjE1ICovCisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIFM2LjggT0ZGOiBQU0MwIG1vZGUgSTJDXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgT1RHIHBvcnQgVkJVUyBzdXBwbHkgYXZhaWxhYmxlIVxuIik7CisJfSBlbHNlIHsKKwkJZGIxMjAwX2RldnNbMF0gPSAmZGIxMjAwX3NwaV9kZXY7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19QU0MwTVVYKTsKKworCQlwZmMgfD0gKDEgPDwgMTcpOwkvKiBQU0MwIG93bnMgR1BJTzIxNSAqLworCisJCXByaW50ayhLRVJOX0lORk8gIiBTNi44IE9OIDogUFNDMCBtb2RlIFNQSVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiAgIE9URyBwb3J0IFZCVVMgc3VwcGx5IGRpc2FibGVkXG4iKTsKKwl9CisJX19yYXdfd3JpdGVsKHBmYywgKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKTsKKwl3bWIoKTsKKworCS8qIEF1ZGlvOiBESVA3IHNlbGVjdHMgSTJTKDApL0FDOTcoMSksIGJ1dCBuZWVkIEkyQyBmb3IgSTJTIQorCSAqIHNvOiBESVA3PTEgfHwgRElQOD0wID0+IEFDOTcsIERJUDc9MCAmJiBESVA4PTEgPT4gSTJTCisJICovCisJc3cgJj0gQkNTUl9TV0lUQ0hFU19ESVBfOCB8IEJDU1JfU1dJVENIRVNfRElQXzc7CisJaWYgKHN3ID09IEJDU1JfU1dJVENIRVNfRElQXzgpIHsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX1BTQzFNVVgpOworCQlkYjEyMDBfYXVkaW9fZGV2Lm5hbWUgPSAiYXUxeHBzY19pMnMiOworCQlwcmludGsoS0VSTl9JTkZPICIgUzYuNyBPTiA6IFBTQzEgbW9kZSBJMlNcbiIpOworCX0gZWxzZSB7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19QU0MxTVVYLCAwKTsKKwkJZGIxMjAwX2F1ZGlvX2Rldi5uYW1lID0gImF1MXhwc2NfYWM5NyI7CisJCXByaW50ayhLRVJOX0lORk8gIiBTNi43IE9GRjogUFNDMSBtb2RlIEFDOTdcbiIpOworCX0KKworCS8qIEF1ZGlvIFBTQyBjbG9jayBpcyBzdXBwbGllZCBleHRlcm5hbGx5LiAoRklYTUU6IHBsYXRkYXRhISEpICovCisJX19yYXdfd3JpdGVsKFBTQ19TRUxfQ0xLX1NFUkNMSywKKwkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihQU0MxX1BIWVNfQUREUikgKyBQU0NfU0VMX09GRlNFVCk7CisJd21iKCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgREIxMjAwX1BDMF9JTlQsCisJCQkJICAgIERCMTIwMF9QQzBfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypEQjEyMDBfUEMwX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIERCMTIwMF9QQzBfRUpFQ1RfSU5ULAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMTAwMDAgLSAxLAorCQkJCSAgICBEQjEyMDBfUEMxX0lOVCwKKwkJCQkgICAgREIxMjAwX1BDMV9JTlNFUlRfSU5ULAorCQkJCSAgICAvKkRCMTIwMF9QQzFfU1RTQ0hHX0lOVCovMCwKKwkJCQkgICAgREIxMjAwX1BDMV9FSkVDVF9JTlQsCisJCQkJICAgIDEpOworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19EQjEyMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg2NCA8PCAyMCwgMiwgc3dhcHBlZCk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGIxMjAwX2RldnMsIEFSUkFZX1NJWkUoZGIxMjAwX2RldnMpKTsKK30KK2RldmljZV9pbml0Y2FsbChkYjEyMDBfZGV2X2luaXQpOworCisvKiBhdTEyMDBmYiBjYWxscyB0aGVzZTogU1RFUkJUIEVJTkVOIFRSQUdJU0NIRU4gVE9EISEhICovCitpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWwodm9pZCkKK3sKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NXSVRDSEVTKSA+PiA4KSAmIDB4MGY7Cit9CisKK2ludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9pbml0KHZvaWQpCit7CisJLyogQXBwbHkgcG93ZXIgKi8KKwliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCQlCQ1NSX0JPQVJEX0xDREJMKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKHZvaWQpCit7CisJLyogUmVtb3ZlIHBvd2VyICovCisJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8CisJCQkgICAgIEJDU1JfQk9BUkRfTENEQkwsIDApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTUzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBBbGNoZW15L0FNRC9STUkgREIxMjAwIGJvYXJkIHNldHVwLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvdXRsaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSByb290IG9mCisgKiB0aGlzIHNvdXJjZSBhcmNoaXZlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiQWxjaGVteSBEYjEyMDAiOworfQorCit2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZnJlcTAsIGNsa3NyYywgZGl2LCBwZmM7CisJdW5zaWduZWQgc2hvcnQgd2hvYW1pOworCisJYmNzcl9pbml0KERCMTIwMF9CQ1NSX1BIWVNfQUREUiwKKwkJICBEQjEyMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEyMDBfQkNTUl9IRVhMRURfT0ZTKTsKKworCXdob2FtaSA9IGJjc3JfcmVhZChCQ1NSX1dIT0FNSSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteS9BTUQvUk1JIERCMTIwMCBCb2FyZCwgQ1BMRCBSZXYgJWQiCisJCSIgIEJvYXJkLUlEICVkICBEYXVnaHRlcmNhcmQgSUQgJWRcbiIsCisJCSh3aG9hbWkgPj4gNCkgJiAweGYsICh3aG9hbWkgPj4gOCkgJiAweGYsIHdob2FtaSAmIDB4Zik7CisKKwkvKiBTTUJ1cy9TUEkgb24gUFNDMCwgQXVkaW8gb24gUFNDMSAqLworCXBmYyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilTWVNfUElORlVOQyk7CisJcGZjICY9IH4oU1lTX1BJTkZVTkNfUDBBIHwgU1lTX1BJTkZVTkNfUDBCKTsKKwlwZmMgJj0gfihTWVNfUElORlVOQ19QMUEgfCBTWVNfUElORlVOQ19QMUIgfCBTWVNfUElORlVOQ19GUzMpOworCXBmYyB8PSBTWVNfUElORlVOQ19QMUM7CS8qIFNQSSBpcyBjb25maWd1cmVkIGxhdGVyICovCisJX19yYXdfd3JpdGVsKHBmYywgKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKTsKKwl3bWIoKTsKKworCS8qIENsb2NrIGNvbmZpZ3VyYXRpb25zOiBQU0MwOiB+NTBNSHogdmlhIENsa2dlbjAsIGRlcml2ZWQgZnJvbQorCSAqIENQVSBjbG9jazsgYWxsIG90aGVyIGNsb2NrIGdlbmVyYXRvcnMgb2ZmL3VudXNlZC4KKwkgKi8KKwlkaXYgPSAoZ2V0X2F1MXgwMF9zcGVlZCgpICsgMjUwMDAwMDApIC8gNTAwMDAwMDA7CisJaWYgKGRpdiAmIDEpCisJCWRpdisrOworCWRpdiA9ICgoZGl2ID4+IDEpIC0gMSkgJiAweGZmOworCisJZnJlcTAgPSBkaXYgPDwgU1lTX0ZDX0ZSRElWMF9CSVQ7CisJX19yYXdfd3JpdGVsKGZyZXEwLCAodm9pZCBfX2lvbWVtICopU1lTX0ZSRVFDVFJMMCk7CisJd21iKCk7CisJZnJlcTAgfD0gU1lTX0ZDX0ZFMDsJLyogZW5hYmxlIEYwICovCisJX19yYXdfd3JpdGVsKGZyZXEwLCAodm9pZCBfX2lvbWVtICopU1lTX0ZSRVFDVFJMMCk7CisJd21iKCk7CisKKwkvKiBwc2MwX2ludGNsayBjb21lcyAxOjEgZnJvbSBGMCAqLworCWNsa3NyYyA9IFNZU19DU19NVVhfRlEwIDw8IFNZU19DU19NRTBfQklUOworCV9fcmF3X3dyaXRlbChjbGtzcmMsICh2b2lkIF9faW9tZW0gKilTWVNfQ0xLU1JDKTsKKwl3bWIoKTsKK30KKworLyogdXNlIHRoZSBoZXhsZWRzIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNwdSBoYXMgZW50ZXJlZAorICogd2FpdCwgdGhlIGRvdHMgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgQ1BVIGlzIGN1cnJlbnRseSBpZGxlIG9yCisgKiBhY3RpdmUgKGRvdHMgb2ZmID0gc2xlZXBpbmcsIGRvdHMgb24gPSB3b3JraW5nKSBmb3IgY2FzZXMgd2hlcmUKKyAqIHRoZSBudW1iZXIgZG9lc24ndCBjaGFuZ2UgZm9yIGEgbG9uZyhlcikgcGVyaW9kIG9mIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIGRiMTIwMF93YWl0KHZvaWQpCit7CisJX19hc21fXygiCS5zZXQJcHVzaAkJCVxuIgorCQkiCS5zZXQJbWlwczMJCQlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJXG4iCisJCSIJY2FjaGUJMHgxNCwgMCglMCkJCVxuIgorCQkiCWNhY2hlCTB4MTQsIDMyKCUwKQkJXG4iCisJCSIJY2FjaGUJMHgxNCwgNjQoJTApCQlcbiIKKwkJLyogZG90cyBvZmY6IHdlJ3JlIGFib3V0IHRvIGNhbGwgd2FpdCAqLworCQkiCWx1aQkkMjYsIDB4Yjk4MAkJXG4iCisJCSIJb3JpCSQyNywgJDAsIDMJCVxuIgorCQkiCXNiCSQyNywgMHgxOCgkMjYpCQlcbiIKKwkJIglzeW5jCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIgl3YWl0CQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCS8qIGRvdHMgb246IHRoZXJlJ3Mgd29yayB0byBkbywgaW5jcmVtZW50IGNudHIgKi8KKwkJIglsdWkJJDI2LCAweGI5ODAJCVxuIgorCQkiCXNiCSQwLCAweDE4KCQyNikJCVxuIgorCQkiCWx1aQkkMjYsIDB4YjljMAkJXG4iCisJCSIJbGIJJDI3LCAwKCQyNikJCVxuIgorCQkiCWFkZGl1CSQyNywgJDI3LCAxCQlcbiIKKwkJIglzYgkkMjcsIDAoJDI2KQkJXG4iCisJCSIJc3luYwkJCQlcbiIKKwkJIgkuc2V0CXBvcAkJCVxuIgorCQk6IDogInIiIChkYjEyMDBfd2FpdCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfYXJjaF9pbml0KHZvaWQpCit7CisJLyogR1BJTzcgaXMgbG93LWxldmVsIHRyaWdnZXJlZCBDUExEIGNhc2NhZGUgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMjAwX0dQSU83X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJYmNzcl9pbml0X2lycShEQjEyMDBfSU5UX0JFR0lOLCBEQjEyMDBfSU5UX0VORCwgQVUxMjAwX0dQSU83X0lOVCk7CisKKwkvKiBkbyBub3QgYXV0b2VuYWJsZSB0aGVzZTogQ1BMRCBoYXMgYnJva2VuIGVkZ2UgaW50IGhhbmRsaW5nLAorCSAqIGFuZCB0aGUgQ0QgaGFuZGxlciBzZXR1cCByZXF1aXJlcyBtYW51YWwgZW5hYmxpbmcgdG8gd29yaworCSAqIGFyb3VuZCB0aGF0LgorCSAqLworCWlycV90b19kZXNjKERCMTIwMF9TRDBfSU5TRVJUX0lOVCktPnN0YXR1cyB8PSBJUlFfTk9BVVRPRU47CisJaXJxX3RvX2Rlc2MoREIxMjAwX1NEMF9FSkVDVF9JTlQpLT5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCisJaWYgKGNwdV93YWl0KQorCQljcHVfd2FpdCA9IGRiMTIwMF93YWl0OworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGRiMTIwMF9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUKaW5kZXggNDMyMjQxYWIuLjYxM2MwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgREJBdTF4eDAgYm9hcmRzLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwppbmRleCBkZTMwZDhlLi41MGM5YmVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCkBAIC0yOSw1OCArMjksMTM4IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMTJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gSFBUMzcxICAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KK307CiAKLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAorY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVsxMV0gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEMsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTEgLSBvbi1ib2FyZCBIUFQzNzEgKi8KKwlbMTJdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRCLCBBVTE1NTBfUENJX0lOVEMsIEFVMTU1MF9QQ0lfSU5URCwgQVUxNTUwX1BDSV9JTlRBIH0sIC8qIElEU0VMIDEyIC0gUENJIHNsb3QgMiAobGVmdCkgKi8KKwlbMTNdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRBLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCit9OworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzExXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDExIC0gbWluaVBDSSAgKi8KKwlbMTJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gU04xNzQxICAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KK307CisKKy8qCisgKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKKyAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQorICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5CisgKiB0byB0aGUgc3dpdGNoLgorICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAorICovCitzdGF0aWMgc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkYXRhID0geworCS5waHlfc3RhdGljX2NvbmZpZwk9IDEsCisJLnBoeV9hZGRyCQk9IDUsCit9OworCitzdGF0aWMgdm9pZCBib3Nwb3J1c19wb3dlcl9vZmYodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJJdCdzIG5vdyBzYWZlIHRvIHR1cm4gb2ZmIHBvd2VyXG4iKTsKKwl3aGlsZSAoMSkKKwkJYXNtIHZvbGF0aWxlICgiLnNldCBtaXBzMyA7IHdhaXQgOyAuc2V0IG1pcHMwIik7Cit9CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCiAJcmV0dXJuICJBbGNoZW15IEJvc3BvcnVzIEdhdGV3YXkgUmVmZXJlbmNlIjsKLSNlbHNlCi0JcmV0dXJuICJBbGNoZW15IERiMXgwMCI7Cit9CiAjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzExXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5URCwgMHhmZiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMSAtIFNNSSBWR1ggKi8KKwlbMTJdID0geyAtMSwgMHhmZiwgMHhmZiwgQVUxNTAwX1BDSV9JTlRDLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gUE5YMTMwMCAqLworCVsxM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMyAtIG1pbmlQQ0kgKi8KK307CisKK3N0YXRpYyB2b2lkIG1pcmFnZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTAsIDEpOwogfQogCi12b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5TV19SRVNFVFtSRVNFVF0gKi8KLQliY3NyLT5zd3Jlc2V0ID0gMHgwMDAwOworCXJldHVybiAiQWxjaGVteSBNaXJhZ2UiOwogfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfTUlSQUdFKQorc3RhdGljIHZvaWQgbWlwc19zb2Z0cmVzZXQodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKCJqclx0JTAiIDogOiAiciIoMHhiZmMwMDAwMCkpOworfQorCisjZWxzZQorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIkFsY2hlbXkgRGIxeDAwIjsKK30KKyNlbmRpZgorCiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7Ci0JdTMyIHBpbl9mdW5jID0gMDsKLQljaGFyICphcmdwdHI7CisJdW5zaWduZWQgbG9uZyBiY3NyMSwgYmNzcjI7CisJdTMyIHBpbl9mdW5jOwogCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9CisJYmNzcjEgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFI7CisJYmNzcjIgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTOworCisJcGluX2Z1bmMgPSAwOworCisjaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1MDAvRGIxNTAwIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX0RCMTEwMAorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTEwMC9EYjExMDAgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKKwlhdTF4eHhfb3ZlcnJpZGVfZXRoX2NmZygwLCAmZXRoMF9wZGF0YSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBCb3Nwb3J1cyBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBNaXJhZ2UgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTUwL0RiMTU1MCBCb2FyZFxuIik7CisKKwliY3NyMSA9IERCMTU1MF9CQ1NSX1BIWVNfQUREUjsKKwliY3NyMiA9IERCMTU1MF9CQ1NSX1BIWVNfQUREUiArIERCMTU1MF9CQ1NSX0hFWExFRF9PRlM7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQl9BVTExMDAKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAidmlkZW89Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQkvKiBkZWZhdWx0IHBhbmVsICovCi0JCS8qc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1hdTExMDBmYjpwYW5lbDpTaGFycF8zMjB4MjQwXzE2Iik7Ki8KLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPVU5EX0FVMVgwMCkgJiYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JLyogYXUxMDAwIGRvZXMgbm90IHN1cHBvcnQgdnJhLCBhdTE1MDAgYW5kIGF1MTEwMCBkbyAqLwotCXN0cmNhdChhcmdwdHIsICIgYXUxMDAwX2F1ZGlvPXZyYSIpOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2VuZGlmCisJLyogaW5pdGlhbGl6ZSBib2FyZCByZWdpc3RlciBzcGFjZSAqLworCWJjc3JfaW5pdChiY3NyMSwgYmNzcjIpOwogCiAJLyogTm90IHZhbGlkIGZvciBBdTE1NTAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSAmJiBcCkBAIC04OSwxMSArMTY5LDEwIEBACiAJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOwogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCS8qIFBvd2VyIG9mZiB1bnRpbCB0aGUgZHJpdmVyIGlzIGluIHVzZSAqLwotCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0s7Ci0JYmNzci0+cmVzZXRzIHw9ICBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGOwotCWF1X3N5bmMoKTsKKwliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0ssCisJCQkJQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRik7CiAjZW5kaWYKLQliY3NyLT5wY21jaWEgPSAweDAwMDA7IC8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLworCWJjc3Jfd3JpdGUoQkNTUl9QQ01DSUEsIDApOwkvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KIAogCS8qIEVuYWJsZSBHUElPWzMxOjBdIGlucHV0cyAqLwogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CkBAIC0xMjAsMjYgKzE5OSw1MyBAQAogCSAqIGJlIHBhcnQgb2YgdGhlIGF1ZGlvIGRyaXZlci4KIAkgKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMDksIDEpOworCisJcG1fcG93ZXJfb2ZmID0gbWlyYWdlX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKICNlbmRpZgogCi0JYXVfc3luYygpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1MDAvRGIxNTAwIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTEwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTEwMC9EYjExMDAgQm9hcmRcbiIpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBCb3Nwb3J1cyBCb2FyZFxuIik7CisJcG1fcG93ZXJfb2ZmID0gYm9zcG9ydXNfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSBib3Nwb3J1c19wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBNaXJhZ2UgQm9hcmRcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTUwL0RiMTU1MCBCb2FyZFxuIik7Ci0jZW5kaWYKKwlhdV9zeW5jKCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMXgwMF9pbml0X2lycSh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTUlSQUdFKQorCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzdfSU5ULCBJUlFGX1RSSUdHRVJfUklTSU5HKTsgLyogVFMgcGVuZG93biAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8yMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzIyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTUwMCkKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDEjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzRfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMSMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQorCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QxIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDAjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPNF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcxIyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDEjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQxIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZGIxeDAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2lycW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA5MDI1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTJdID0geyAtMSwgSU5UQSwgSU5UWCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMiAtIEhQVDM3MSAgICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTFdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMSAtIG1pbmlQQ0kgICovCi0JWzEyXSA9IHsgLTEsIElOVEEsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTIgLSBTTjE3NDEgICAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMV0gPSB7IC0xLCBJTlRELCBJTlRYLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDExIC0gU01JIFZHWCAqLwotCVsxMl0gPSB7IC0xLCBJTlRYLCBJTlRYLCBJTlRDLCBJTlRYIH0sIC8qIElEU0VMIDEyIC0gUE5YMTMwMCAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDEzIC0gbWluaVBDSSAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzExXSA9IHsgLTEsIElOVEMsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTEgLSBvbi1ib2FyZCBIUFQzNzEgKi8KLQlbMTJdID0geyAtMSwgSU5UQiwgSU5UQywgSU5URCwgSU5UQSB9LCAvKiBJRFNFTCAxMiAtIFBDSSBzbG90IDIgKGxlZnQpICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KLX07Ci0jZW5kaWYKLQotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0KLSNpZm5kZWYgQ09ORklHX01JUFNfTUlSQUdFCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0JeyBBVTEwMDBfR1BJT18zLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgSVJRIyAqLwotCXsgQVUxMDAwX0dQSU9fNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIElSUSMgKi8KLSNlbHNlCi0JeyBBVTEwMDBfR1BJT18wLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgRnVsbHlfSW50ZXJ0ZWQjICovCi0JeyBBVTEwMDBfR1BJT18xLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgU1RTQ0hHIyAqLwotCXsgQVUxMDAwX0dQSU9fMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAwIElSUSMgKi8KLQotCXsgQVUxMDAwX0dQSU9fMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIEZ1bGx5X0ludGVydGVkIyAqLwotCXsgQVUxMDAwX0dQSU9fNCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIFNUU0NIRyMgKi8KLQl7IEFVMTAwMF9HUElPXzUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMSBJUlEjICovCi0jZW5kaWYKLSNlbHNlCi0JeyBBVTEwMDBfR1BJT183LCBJUlFGX1RSSUdHRVJfUklTSU5HLCAwIH0sIC8qIHRvdWNoc2NyZWVuIHBlbiBkb3duICovCi0jZW5kaWYKLQotfTsKLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZDVhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIERCQXUxeHh4IGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworLyogREIxeHh4IFBDTUNJQSBpbnRlcnJ1cHQgc291cmNlczoKKyAqIENEMC8xIAlHUElPMC8zCisgKiBTVFNDSEcwLzEJR1BJTzEvNAorICogQ0FSRDAvMQlHUElPMi81CisgKiBEYjE1NTA6CTAvMSwgMjEvMjIsIDMvNQorICovCisKKyNkZWZpbmUgREIxWFhYX0hBU19QQ01DSUEKKyNkZWZpbmUgRl9TV0FQUEVEIChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UKQorCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTAwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTAwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTEwMDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTAwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTAwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTEwMDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTEwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTEwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTExMDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTEwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTEwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTExMDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1MDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTUwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTUwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTE1MDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTUwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTUwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTE1MDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTU1MF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTU1MF9HUElPMjFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDAJQVUxNTUwX0dQSU8zX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMQlBVTE1NTBfR1BJTzFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMQlBVTE1NTBfR1BJTzIyX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQxCUFVMTU1MF9HUElPNV9JTlQKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDA4MDAwMDAwIC8qIDEyOE1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2Vsc2UKKy8qIG90aGVyIGJvYXJkOiBubyBQQ01DSUEgKi8KKyN1bmRlZiBEQjFYWFhfSEFTX1BDTUNJQQorI3VuZGVmIEZfU1dBUFBFRAorI2RlZmluZSBGX1NXQVBQRUQgMAorI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTIgLyogMTYtYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19NSVJBR0UpCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwNDAwMDAwMCAvKiA2NE1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgZGIxeHh4X2Rldl9pbml0KHZvaWQpCit7CisjaWZkZWYgREIxWFhYX0hBU19QQ01DSUEKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DQVJEMCwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DRDAsCisJCQkJICAgIC8qREIxWFhYX1BDTUNJQV9TVFNDSEcwKi8wLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMTAwMDAgLSAxLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NBUkQxLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NEMSwKKwkJCQkgICAgLypEQjFYWFhfUENNQ0lBX1NUU0NIRzEqLzAsCisJCQkJICAgIDAsCisJCQkJICAgIDEpOworI2VuZGlmCisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaChCT0FSRF9GTEFTSF9TSVpFLCBCT0FSRF9GTEFTSF9XSURUSCwgRl9TV0FQUEVEKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChkYjF4eHhfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGNkMjczNTQ1Li5iNTMxMWQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCkBAIC0zMSwxMSArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaD4KICNpbmNsdWRlIDxwcm9tLmg+CiAKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fMTUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKQEAgLTQ2LDI1ICs0MiwxNCBAQAogewogfQogCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLX0KLQogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmMsIHN0YXRpY19jZmcwOwogCXUzMiBzeXNfZnJlcWN0cmwsIHN5c19jbGtzcmM7CiAJdTMyIHByaWQgPSByZWFkX2MwX3ByaWQoKTsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCisJc3lzX2ZyZXFjdHJsID0gMDsKKwlzeXNfY2xrc3JjID0gMDsKIAogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwogCWF1X3dyaXRlbCg4LCBTWVNfQVVYUExMKTsKQEAgLTE5MywzICsxNzgsMTYgQEAKIAkJYnJlYWs7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBwYjEwMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8xNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjEwMDBfaW5pdF9pcnEpOworCitzdGF0aWMgaW50IF9faW5pdCBwYjEwMDBfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg4ICogMTAyNCAqIDEwMjQsIDQsIDApOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTAwMF9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9NYWtlZmlsZQppbmRleCBjNTg2ZGQ3Li43ZTM3NTZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTEwMCBib2FyZC4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMKaW5kZXggNjEyNjMwOC4uYzdiNGNhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvYm9hcmRfc2V0dXAuYwpAQCAtMjksMTkgKzI5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKIAotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fOSwgIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgRnVsbHlfSW5zZXJ0ZWQjICovCi0JeyBBVTEwMDBfR1BJT18xMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCBTVFNDSEcjICovCi0JeyBBVTEwMDBfR1BJT18xMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCBJUlEjICovCi0JeyBBVTEwMDBfR1BJT18xMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBEQ19JUlEjICovCi19OwotCi0KIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewogCXJldHVybiAiQWxjaGVteSBQYjExMDAiOwpAQCAtNDksNDMgKzQxLDE1IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5SU1RfVkRESVtTT0ZUX1JFU0VUXSAqLwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBQQjExMDBfUlNUX1ZEREkpOwotfQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICopMHhhYzAwMDAwMFVMOwotCWNoYXIgKmFyZ3B0cjsKIAotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRkJfQVUxMTAwCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgInZpZGVvPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJLyogZGVmYXVsdCBwYW5lbCAqLwotCQkvKnN0cmNhdChhcmdwdHIsICIgdmlkZW89YXUxMTAwZmI6cGFuZWw6U2hhcnBfMzIweDI0MF8xNiIpOyovCi0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT1VORF9BVTFYMDApICYmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCS8qIGF1MTAwMCBkb2VzIG5vdCBzdXBwb3J0IHZyYSwgYXUxNTAwIGFuZCBhdTExMDAgZG8gKi8KLQlzdHJjYXQoYXJncHRyLCAiIGF1MTAwMF9hdWRpbz12cmEiKTsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNlbmRpZgorCWJjc3JfaW5pdChEQjEwMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgREIxMDAwX0JDU1JfUEhZU19BRERSICsgREIxMDAwX0JDU1JfSEVYTEVEX09GUyk7CiAKIAkvKiBTZXQgQVVYIGNsb2NrIHRvIDEyIE1IeiAqIDggPSA5NiBNSHogKi8KIAlhdV93cml0ZWwoOCwgU1lTX0FVWFBMTCk7CkBAIC0xNTUsMyArMTE5LDE0IEBACiAJCWF1X3N5bmMoKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTEwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzlfSU5ULCAgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFBDQ0QjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMTBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogUENTVFNDSEcjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMTFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogUENDYXJkIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzEzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIERDX0lSUSMgKi8KKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjExMDBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFBiMTEwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBfX2luaXQgcGIxMTAwX2Rldl9pbml0KHZvaWQpCit7CisJaW50IHN3YXBwZWQ7CisKKwkvKiBQQ01DSUEuIHNpbmdsZSBzb2NrZXQsIGlkZW50aWNhbCB0byBQYjE1MDAgKi8KKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxMTAwX0dQSU8xMV9JTlQsCSAvKiBjYXJkICovCisJCQkJICAgIEFVMTEwMF9HUElPOV9JTlQsCSAvKiBpbnNlcnQgKi8KKwkJCQkgICAgLypBVTExMDBfR1BJTzEwX0lOVCovMCwgLyogc3RzY2hnICovCisJCQkJICAgIDAsCQkJIC8qIGVqZWN0ICovCisJCQkJICAgIDApOwkJCSAvKiBpZCAqLworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiAgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goNjQgKiAxMDI0ICogMTAyNCwgNCwgc3dhcHBlZCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChwYjExMDBfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUKaW5kZXggYzhjM2E5OS4uMmVhOWIwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBQYjEyMDAvREJBdTEyMDAgYm9hcmRzLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vIGlycW1hcC5vIHBsYXRmb3JtLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDk0ZTZiN2UuLjMxODQwNjNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jCkBAIC0yNSwxMSArMjUsMjMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxwcm9tLmg+Ci0jaW5jbHVkZSA8YXUxeHh4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKKyNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMjAwLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaD4KKyNkZWZpbmUgUEIxMjAwX0lOVF9CRUdJTiBEQjEyMDBfSU5UX0JFR0lOCisjZGVmaW5lIFBCMTIwMF9JTlRfRU5EIERCMTIwMF9JTlRfRU5ECisjZW5kaWYKKworI2luY2x1ZGUgPHByb20uaD4KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CkBAIC0zOCwyNSArNTAsMTUgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCWJjc3ItPnJlc2V0cyA9IDA7Ci0JYmNzci0+c3lzdGVtID0gMDsKKwliY3NyX3dyaXRlKEJDU1JfUkVTRVRTLCAwKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19GQl9BVTEyMDAKLQlzdHJjYXQoYXJncHRyLCAiIHZpZGVvPWF1MTIwMGZiOnBhbmVsOmJzIik7Ci0jZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBQYjEyMDAgQm9hcmRcbiIpOworCWJjc3JfaW5pdChQQjEyMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgUEIxMjAwX0JDU1JfUEhZU19BRERSICsgUEIxMjAwX0JDU1JfSEVYTEVEX09GUyk7CiAKICNpZiAwCiAJewpAQCAtODIsNyArODQsNyBAQAogCQl1MzIgcGluX2Z1bmM7CiAKIAkJLyogU2VsZWN0IFNNQnVzIGluIENQTEQgKi8KLQkJYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19QQ1MwTVVYOworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDME1VWCwgMCk7CiAKIAkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQyk7CiAJCWF1X3N5bmMoKTsKQEAgLTExNiwzOCArMTE4LDU0IEBACiAKIAkvKgogCSAqIFRoZSBQYjEyMDAgZGV2ZWxvcG1lbnQgYm9hcmQgdXNlcyBleHRlcm5hbCBNVVggZm9yIFBTQzAgdG8KLQkgKiBzdXBwb3J0IFNNQi9TUEkuIGJjc3ItPnJlc2V0cyBiaXQgMTI6IDA9U01CIDE9U1BJCisJICogc3VwcG9ydCBTTUIvU1BJLiBiY3NyX3Jlc2V0cyBiaXQgMTI6IDA9U01CIDE9U1BJCiAJICovCiAjaWZkZWYgQ09ORklHX0kyQ19BVTE1NTAKLQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX1BDUzBNVVg7CisJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1BTQzBNVVgsIDApOwogI2VuZGlmCiAJYXVfc3luYygpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgUGIxMjAwIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IERiMTIwMCBCb2FyZFxuIik7Ci0jZW5kaWYKIH0KIAorc3RhdGljIGludCBfX2luaXQgcGIxMjAwX2luaXRfaXJxKHZvaWQpCit7CisJLyogV2UgaGF2ZSBhIHByb2JsZW0gd2l0aCBDUExEIHJldiAzLiAqLworCWlmIChCQ1NSX1dIT0FNSV9DUExEKGJjc3JfcmVhZChCQ1NSX1dIT0FNSSkpIDw9IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQYjEyMDAgbXVzdCBiZSBhdCBDUExEIHJldiA0LiBQbGVhc2UgaGF2ZSBQYjEyMDBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInVwZGF0ZWQgdG8gbGF0ZXN0IHJldmlzaW9uLiBUaGlzIHNvZnR3YXJlIHdpbGxcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5vdCB3b3JrIG9uIGFueXRoaW5nIGxlc3MgdGhhbiBDUExEIHJldiA0LlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXBhbmljKCJHYW1lIG92ZXIuICBZb3VyIHNjb3JlIGlzIDAuIik7CisJfQorCisJc2V0X2lycV90eXBlKEFVMTIwMF9HUElPN19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCWJjc3JfaW5pdF9pcnEoUEIxMjAwX0lOVF9CRUdJTiwgUEIxMjAwX0lOVF9FTkQsIEFVMTIwMF9HUElPN19JTlQpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTIwMF9pbml0X2lycSk7CisKKwogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsKHZvaWQpCiB7Ci0JQkNTUiAqYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCWludCBwOwotCi0JcCA9IGJjc3ItPnN3aXRjaGVzOwotCXAgPj49IDg7Ci0JcCAmPSAweDBGOwotCXJldHVybiBwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1dJVENIRVMpID4+IDgpICYgMHgwZjsKIH0KIAogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQodm9pZCkKIHsKIAkvKiBBcHBseSBwb3dlciAqLwotCUJDU1IgKmJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQotCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfCBCQ1NSX0JPQVJEX0xDREJMOworCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAorCQkJCUJDU1JfQk9BUkRfTENEQkwpOwogCS8qIHByaW50ayhLRVJOX0RFQlVHICJib2FyZF9hdTEyMDBmYl9wYW5lbF9pbml0KClcbiIpOyAqLwogCXJldHVybiAwOwogfQpAQCAtMTU1LDEwICsxNzMsOCBAQAogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKHZvaWQpCiB7CiAJLyogUmVtb3ZlIHBvd2VyICovCi0JQkNTUiAqYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0JYmNzci0+Ym9hcmQgJj0gfihCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKLQkJCSBCQ1NSX0JPQVJEX0xDREJMKTsKKwliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCSAgICAgQkNTUl9CT0FSRF9MQ0RCTCwgMCk7CiAJLyogcHJpbnRrKEtFUk5fREVCVUcgImJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKClcbiIpOyAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDc0OTguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9pcnFtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRAkgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUwlPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0jaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oPgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLSNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+Ci0jZGVmaW5lIFBCMTIwMF9JTlRfQkVHSU4gREIxMjAwX0lOVF9CRUdJTgotI2RlZmluZSBQQjEyMDBfSU5UX0VORCBEQjEyMDBfSU5UX0VORAotI2VuZGlmCi0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQkvKiBUaGlzIGlzIGV4dGVybmFsIGludGVycnVwdCBjYXNjYWRlICovCi0JeyBBVTEwMDBfR1BJT183LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi19OwotCi0KLS8qCi0gKiBTdXBwb3J0IGZvciBFeHRlcm5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBQYjEyMDAgRGV2ZWxvcG1lbnQgcGxhdGZvcm0uCi0gKi8KLQotc3RhdGljIHZvaWQgcGIxMjAwX2Nhc2NhZGVfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCi17Ci0JdW5zaWduZWQgc2hvcnQgYmlzciA9IGJjc3ItPmludF9zdGF0dXM7Ci0KLQlmb3IgKCA7IGJpc3I7IGJpc3IgJj0gYmlzciAtIDEpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShQQjEyMDBfSU5UX0JFR0lOICsgX19mZnMoYmlzcikpOwotfQotCi0vKiBOT1RFOiBib3RoIHRoZSBlbmFibGUgYW5kIG1hc2sgYml0cyBtdXN0IGJlIGNsZWFyZWQsIG90aGVyd2lzZSB0aGUKLSAqIENQTEQgZ2VuZXJhdGVzIHRvbnMgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAoYXQgbGVhc3Qgb24gdGhlIERCMTIwMCkuCi0gKi8KLXN0YXRpYyB2b2lkIHBiMTIwMF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWJjc3ItPmludGNscl9tYXNrID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYmNzci0+aW50Y2xyID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBwYjEyMDBfbWFza2Fja19pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQliY3NyLT5pbnRjbHJfbWFzayA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludGNsciA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludF9zdGF0dXMgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsJLyogYWNrICovCi0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBwYjEyMDBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWJjc3ItPmludHNldCA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludHNldF9tYXNrID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHBiMTIwMF9jcGxkX2lycV90eXBlID0gewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotCS5uYW1lID0gIlBiMTIwMCBFeHQiLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0JLm5hbWUgPSAiRGIxMjAwIEV4dCIsCi0jZW5kaWYKLQkubWFzawkJPSBwYjEyMDBfbWFza19pcnEsCi0JLm1hc2tfYWNrCT0gcGIxMjAwX21hc2thY2tfaXJxLAotCS51bm1hc2sJCT0gcGIxMjAwX3VubWFza19pcnEsCi19OwotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLQkvKiBXZSBoYXZlIGEgcHJvYmxlbSB3aXRoIENQTEQgcmV2IDMuICovCi0JaWYgKCgoYmNzci0+d2hvYW1pICYgQkNTUl9XSE9BTUlfQ1BMRCkgPj4gNCkgPD0gMykgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIlBiMTIwMCBtdXN0IGJlIGF0IENQTEQgcmV2IDQuIFBsZWFzZSBoYXZlIFBiMTIwMFxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAidXBkYXRlZCB0byBsYXRlc3QgcmV2aXNpb24uIFRoaXMgc29mdHdhcmUgd2lsbFxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAibm90IHdvcmsgb24gYW55dGhpbmcgbGVzcyB0aGFuIENQTEQgcmV2IDQuXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcGFuaWMoIkdhbWUgb3Zlci4gIFlvdXIgc2NvcmUgaXMgMC4iKTsKLQl9Ci0jZW5kaWYKLQkvKiBtYXNrICYgZGlzYWJsZSAmIGFjayBhbGwgKi8KLQliY3NyLT5pbnRjbHJfbWFzayA9IDB4ZmZmZjsKLQliY3NyLT5pbnRjbHIgPSAweGZmZmY7Ci0JYmNzci0+aW50X3N0YXR1cyA9IDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLQlmb3IgKGlycSA9IFBCMTIwMF9JTlRfQkVHSU47IGlycSA8PSBQQjEyMDBfSU5UX0VORDsgaXJxKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnBiMTIwMF9jcGxkX2lycV90eXBlLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7Ci0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihBVTEwMDBfR1BJT183LCBwYjEyMDBfY2FzY2FkZV9oYW5kbGVyKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwppbmRleCBiOTNkZmY0Li4zZWYyZGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCkBAIC0yNiwyNyArMjYsMzAgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgogCiBzdGF0aWMgaW50IG1tY19hY3Rpdml0eTsKIAogc3RhdGljIHZvaWQgcGIxMjAwbW1jMF9zZXRfcG93ZXIodm9pZCAqbW1jX2hvc3QsIGludCBzdGF0ZSkKIHsKIAlpZiAoc3RhdGUpCi0JCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfU0QwUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX1NEMFBXUik7CiAJZWxzZQotCQliY3NyLT5ib2FyZCAmPSB+QkNTUl9CT0FSRF9TRDBQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfU0QwUFdSLCAwKTsKIAotCWF1X3N5bmNfZGVsYXkoMSk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzBfY2FyZF9yZWFkb25seSh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnN0YXR1cyAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzBfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnNpZ19zdGF0dXMgJiBCQ1NSX0lOVF9TRDBJTlNFUlQpID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMElOU0VSVCkgPyAxIDogMDsKIH0KIAogc3RhdGljIHZvaWQgcGIxMjAwX21tY2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLApAQCAtNTQsMTAgKzU3LDEwIEBACiB7CiAJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikgewogCQlpZiAoKyttbWNfYWN0aXZpdHkgPT0gMSkKLQkJCWJjc3ItPmRpc2tfbGVkcyAmPSB+KDEgPDwgOCk7CisJCQliY3NyX21vZChCQ1NSX0xFRFMsIEJDU1JfTEVEU19MRUQwLCAwKTsKIAl9IGVsc2UgewogCQlpZiAoLS1tbWNfYWN0aXZpdHkgPT0gMCkKLQkJCWJjc3ItPmRpc2tfbGVkcyB8PSAoMSA8PCA4KTsKKwkJCWJjc3JfbW9kKEJDU1JfTEVEUywgMCwgQkNTUl9MRURTX0xFRDApOwogCX0KIH0KIApAQCAtNjUsMjcgKzY4LDI1IEBACiAJLmJyaWdodG5lc3Nfc2V0CT0gcGIxMjAwX21tY2xlZF9zZXQsCiB9OwogCi0jaWZuZGVmIENPTkZJR19NSVBTX0RCMTIwMAogc3RhdGljIHZvaWQgcGIxMjAwbW1jMV9zZXRfcG93ZXIodm9pZCAqbW1jX2hvc3QsIGludCBzdGF0ZSkKIHsKIAlpZiAoc3RhdGUpCi0JCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfU0QxUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX1NEMVBXUik7CiAJZWxzZQotCQliY3NyLT5ib2FyZCAmPSB+QkNTUl9CT0FSRF9TRDFQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfU0QxUFdSLCAwKTsKIAotCWF1X3N5bmNfZGVsYXkoMSk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzFfY2FyZF9yZWFkb25seSh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnN0YXR1cyAmIEJDU1JfU1RBVFVTX1NEMVdQKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMVdQKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzFfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnNpZ19zdGF0dXMgJiBCQ1NSX0lOVF9TRDFJTlNFUlQpID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMUlOU0VSVCkgPyAxIDogMDsKIH0KLSNlbmRpZgogCiBjb25zdCBzdHJ1Y3QgYXUxeG1tY19wbGF0Zm9ybV9kYXRhIGF1MXhtbWNfcGxhdGRhdGFbMl0gPSB7CiAJWzBdID0gewpAQCAtOTUsNyArOTYsNiBAQAogCQkuY2Rfc2V0dXAJPSBOVUxMLAkJLyogdXNlIHBvbGwtdGltZXIgaW4gZHJpdmVyICovCiAJCS5sZWQJCT0gJnBiMTIwMG1tY19sZWQsCiAJfSwKLSNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwCiAJWzFdID0gewogCQkuc2V0X3Bvd2VyCT0gcGIxMjAwbW1jMV9zZXRfcG93ZXIsCiAJCS5jYXJkX2luc2VydGVkCT0gcGIxMjAwbW1jMV9jYXJkX2luc2VydGVkLApAQCAtMTAzLDcgKzEwMyw2IEBACiAJCS5jZF9zZXR1cAk9IE5VTEwsCQkvKiB1c2UgcG9sbC10aW1lciBpbiBkcml2ZXIgKi8KIAkJLmxlZAkJPSAmcGIxMjAwbW1jX2xlZCwKIAl9LAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlkZV9yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OSw4ICsxNjgsMzYgQEAKIAogc3RhdGljIGludCBfX2luaXQgYm9hcmRfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQogeworCWludCBzd2FwcGVkOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIFBCMTIwMF9QQzBfSU5ULAorCQkJCSAgICBQQjEyMDBfUEMwX0lOU0VSVF9JTlQsCisJCQkJICAgIC8qUEIxMjAwX1BDMF9TVFNDSEdfSU5UKi8wLAorCQkJCSAgICBQQjEyMDBfUEMwX0VKRUNUX0lOVCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDEwMDAwIC0gMSwKKwkJCQkgICAgUEIxMjAwX1BDMV9JTlQsCisJCQkJICAgIFBCMTIwMF9QQzFfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypQQjEyMDBfUEMxX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIFBCMTIwMF9QQzFfRUpFQ1RfSU5ULAorCQkJCSAgICAxKTsKKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgIEJDU1JfU1RBVFVTX0RCMTIwMF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDEyOCAqIDEwMjQgKiAxMDI0LCAyLCBzd2FwcGVkKTsKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhib2FyZF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGJvYXJkX3BsYXRmb3JtX2RldmljZXMpKTsKIH0KLQotYXJjaF9pbml0Y2FsbChib2FyZF9yZWdpc3Rlcl9kZXZpY2VzKTsKK2RldmljZV9pbml0Y2FsbChib2FyZF9yZWdpc3Rlcl9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL01ha2VmaWxlCmluZGV4IDE3M2I0MTkuLmU4M2IxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgUGIxNTAwIGJvYXJkLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYwppbmRleCBkN2E1NjU2Li5mYTk3NzBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCkBAIC0yOSwyMiArMjksMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxNTAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAogCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzEyXSA9IHsgLTEsIElOVEEsIElOVFgsIElOVFgsIElOVFggfSwgICAvKiBJRFNFTCAxMiAtIEhQVDM3MAkqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sICAgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwotfTsKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxNTAwX0dQSU9fMjA0LCBJUlFGX1RSSUdHRVJfSElHSCwgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAxLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjA1LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCisJWzEyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiwgMHhmZiB9LCAgIC8qIElEU0VMIDEyIC0gSFBUMzcwCSovCisJWzEzXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCB9LCAgIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KIH07CiAKIApAQCAtNTUsMzUgKzQ3LDE2IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5SU1RfVkRESVtTT0ZUX1JFU0VUXSAqLwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBQQjE1MDBfUlNUX1ZEREkpOwotfQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmM7CiAJdTMyIHN5c19mcmVxY3RybCwgc3lzX2Nsa3NyYzsKLQljaGFyICphcmdwdHI7CiAKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU09VTkRfQVUxWDAwKSAmJiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkvKiBhdTEwMDAgZG9lcyBub3Qgc3VwcG9ydCB2cmEsIGF1MTUwMCBhbmQgYXUxMTAwIGRvICovCi0Jc3RyY2F0KGFyZ3B0ciwgIiBhdTEwMDBfYXVkaW89dnJhIik7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jZW5kaWYKKwliY3NyX2luaXQoREIxMDAwX0JDU1JfUEhZU19BRERSLAorCQkgIERCMTAwMF9CQ1NSX1BIWVNfQUREUiArIERCMTAwMF9CQ1NSX0hFWExFRF9PRlMpOwogCiAJc3lzX2Nsa3NyYyA9IHN5c19mcmVxY3RybCA9IHBpbl9mdW5jID0gMDsKIAkvKiBTZXQgQVVYIGNsb2NrIHRvIDEyIE1IeiAqIDggPSA5NiBNSHogKi8KQEAgLTE2MywzICsxMzYsMTggQEAKIAkJYXVfc3luYygpOwogCX0KIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxNTAwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPOV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgIC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0FSRDAgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDRfSU5ULCBJUlFGX1RSSUdHRVJfSElHSCk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAxX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA1X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxNTAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQzYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBQYjE1MDAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IF9faW5pdCBwYjE1MDBfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgc3dhcHBlZDsKKworCS8qIFBDTUNJQS4gc2luZ2xlIHNvY2tldCwgaWRlbnRpY2FsIHRvIFBiMTUwMCAqLworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBBVTE1MDBfR1BJTzExX0lOVCwJIC8qIGNhcmQgKi8KKwkJCQkgICAgQVUxNTAwX0dQSU85X0lOVCwJIC8qIGluc2VydCAqLworCQkJCSAgICAvKkFVMTUwMF9HUElPMTBfSU5UKi8wLCAvKiBzdHNjaGcgKi8KKwkJCQkgICAgMCwJCQkgLyogZWplY3QgKi8KKwkJCQkgICAgMCk7CQkJIC8qIGlkICovCisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmICBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg2NCAqIDEwMjQgKiAxMDI0LCA0LCBzd2FwcGVkKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTUwMF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9NYWtlZmlsZQppbmRleCBjZmY5NWJjLi45NjYxYjZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTU1MCBib2FyZC4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMKaW5kZXggYjZlOWU3ZC4uMWU4ZmIzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvYm9hcmRfc2V0dXAuYwpAQCAtMzIsMTggKzMyLDE1IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAogCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzEyXSA9IHsgLTEsIElOVEIsIElOVEMsIElOVEQsIElOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLwotfTsKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAorCVsxMl0gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlRELCBBVTE1NTBfUENJX0lOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRBLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCiB9OwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKQEAgLTUzLDI4ICs1MCwxNyBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0JLyogSGl0IEJDU1IuU1lTVEVNW1JFU0VUXSAqLwotCWF1X3dyaXRldyhhdV9yZWFkdygweEFGMDAwMDFDKSAmIH5CQ1NSX1NZU1RFTV9SRVNFVCwgMHhBRjAwMDAxQyk7Ci19Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYzsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgorCWJjc3JfaW5pdChQQjE1NTBfQkNTUl9QSFlTX0FERFIsCisJCSAgUEIxNTUwX0JDU1JfUEhZU19BRERSICsgUEIxNTUwX0JDU1JfSEVYTEVEX09GUyk7CisKKwlhbGNoZW15X2dwaW8yX2VuYWJsZSgpOwogCiAJLyoKIAkgKiBFbmFibGUgUFNDMSBTWU5DIGZvciBBQyc5Ny4gIE5vcm1hbHkgZG9uZSBpbiBhdWRpbyBkcml2ZXIsCkBAIC04NSw4ICs3MSwyMSBAQAogCXBpbl9mdW5jIHw9IFNZU19QRl9NVVNUX0JFX1NFVCB8IFNZU19QRl9QU0MxX1MxOwogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCi0JYXVfd3JpdGVsKDAsICh1MzIpYmNzciB8IDB4MTApOyAvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KLQlhdV9zeW5jKCk7CisJYmNzcl93cml0ZShCQ1NSX1BDTUNJQSwgMCk7CS8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgUGIxNTUwIEJvYXJkXG4iKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxNTUwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCisJLyogZW5hYmxlIGJvdGggUENNQ0lBIGNhcmQgaXJxcyBpbiB0aGUgc2hhcmVkIGxpbmUgKi8KKwlhbGNoZW15X2dwaW8yX2VuYWJsZV9pbnQoMjAxKTsKKwlhbGNoZW15X2dwaW8yX2VuYWJsZV9pbnQoMjAyKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjE1NTBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MTUwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIFBiMTU1MCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxNTUwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTU1MF9kZXZfaW5pdCh2b2lkKQoreworCWludCBzd2FwcGVkOworCisJLyogUGIxNTUwLCBsaWtlIGFsbCBvdGhlcnMsIGFsc28gaGFzIHN0YXR1c2NoYW5nZSBpcnFzOyBob3dldmVyIHRoZXkncmUKKwkqIHdpcmVkIHVwIG9uIG9uZSBvZiB0aGUgQXUxNTUwJ3Mgc2hhcmVkIEdQSU8yMDFfMjA1IGxpbmUsIHdoaWNoIGFsc28KKwkqIHNlcnZpY2VzIHRoZSBQQ01DSUEgY2FyZCBpbnRlcnJ1cHRzLiAgU28gd2UgaWdub3JlIHN0YXR1c2NoYW5nZSBhbmQKKwkqIHVzZSB0aGUgR1BJTzIwMV8yMDUgZXhjbHVzaXZlbHkgZm9yIGNhcmQgaW50ZXJydXB0cywgc2luY2UgYSkgcGNtY2lhCisJKiBkcml2ZXJzIGFyZSB1c2VkIHRvIHNoYXJlZCBpcnFzIGFuZCBiKSBzdGF0dXNjaGFuZ2UgaXNuJ3QgcmVhbGx5IHVzZS0KKwkqIGZ1bCBhbnl3YXkuCisJKi8KKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwKKwkJCQkgICAgQVUxNTUwX0dQSU8wX0lOVCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwKKwkJCQkgICAgQVUxNTUwX0dQSU8xX0lOVCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMSk7CisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1BCMTU1MF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDEyOCAqIDEwMjQgKiAxMDI0LCA0LCBzd2FwcGVkKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTU1MF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIGRldm9hcmQgbWlzYyBzdHVmZi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCitzdGF0aWMgdm9pZCBkYjF4X3Bvd2VyX29mZih2b2lkKQoreworCWJjc3Jfd3JpdGUoQkNTUl9SRVNFVFMsIDApOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIEJDU1JfU1lTVEVNX1BXUk9GRiB8IEJDU1JfU1lTVEVNX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgZGIxeF9yZXNldChjaGFyICpjKQoreworCWJjc3Jfd3JpdGUoQkNTUl9SRVNFVFMsIDApOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjF4X3Bvd2Vyb2ZmX3NldHVwKHZvaWQpCit7CisJaWYgKCFwbV9wb3dlcl9vZmYpCisJCXBtX3Bvd2VyX29mZiA9IGRiMXhfcG93ZXJfb2ZmOworCWlmICghX21hY2hpbmVfaGFsdCkKKwkJX21hY2hpbmVfaGFsdCA9IGRiMXhfcG93ZXJfb2ZmOworCWlmICghX21hY2hpbmVfcmVzdGFydCkKKwkJX21hY2hpbmVfcmVzdGFydCA9IGRiMXhfcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoZGIxeF9wb3dlcm9mZl9zZXR1cCk7CisKKy8qIHJlZ2lzdGVyIGEgcGNtY2lhIHNvY2tldCAqLworaW50IF9faW5pdCBkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQocGh5c19hZGRyX3QgcGNtY2lhX2F0dHJfc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX2VuZCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9lbmQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2lvX2VuZCwKKwkJCQkgICAgICAgaW50IGNhcmRfaXJxLAorCQkJCSAgICAgICBpbnQgY2RfaXJxLAorCQkJCSAgICAgICBpbnQgc3RzY2hnX2lycSwKKwkJCQkgICAgICAgaW50IGVqZWN0X2lycSwKKwkJCQkgICAgICAgaW50IGlkKQoreworCWludCBjbnQsIGksIHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnNyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCisJY250ID0gNTsKKwlpZiAoZWplY3RfaXJxKQorCQljbnQrKzsKKwlpZiAoc3RzY2hnX2lycSkKKwkJY250Kys7CisKKwlzciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBjbnQsIEdGUF9LRVJORUwpOworCWlmICghc3IpCisJCXJldHVybiAtRU5PTUVNOworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImRiMXh4eF9wY21jaWEiLCBpZCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzclswXS5uYW1lCT0gInBjbWNpYS1hdHRyIjsKKwlzclswXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzBdLnN0YXJ0CT0gcGNtY2lhX2F0dHJfc3RhcnQ7CisJc3JbMF0uZW5kCT0gcGNtY2lhX2F0dHJfZW5kOworCisJc3JbMV0ubmFtZQk9ICJwY21jaWEtbWVtIjsKKwlzclsxXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzFdLnN0YXJ0CT0gcGNtY2lhX21lbV9zdGFydDsKKwlzclsxXS5lbmQJPSBwY21jaWFfbWVtX2VuZDsKKworCXNyWzJdLm5hbWUJPSAicGNtY2lhLWlvIjsKKwlzclsyXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzJdLnN0YXJ0CT0gcGNtY2lhX2lvX3N0YXJ0OworCXNyWzJdLmVuZAk9IHBjbWNpYV9pb19lbmQ7CisKKwlzclszXS5uYW1lCT0gImluc2VydCI7CisJc3JbM10uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwlzclszXS5zdGFydCA9IHNyWzNdLmVuZCA9IGNkX2lycTsKKworCXNyWzRdLm5hbWUJPSAiY2FyZCI7CisJc3JbNF0uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwlzcls0XS5zdGFydCA9IHNyWzRdLmVuZCA9IGNhcmRfaXJxOworCisJaSA9IDU7CisJaWYgKHN0c2NoZ19pcnEpIHsKKwkJc3JbaV0ubmFtZQk9ICJzdHNjaGciOworCQlzcltpXS5mbGFncwk9IElPUkVTT1VSQ0VfSVJROworCQlzcltpXS5zdGFydCA9IHNyW2ldLmVuZCA9IHN0c2NoZ19pcnE7CisJCWkrKzsKKwl9CisJaWYgKGVqZWN0X2lycSkgeworCQlzcltpXS5uYW1lCT0gImVqZWN0IjsKKwkJc3JbaV0uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwkJc3JbaV0uc3RhcnQgPSBzcltpXS5lbmQgPSBlamVjdF9pcnE7CisJfQorCisJcGQtPnJlc291cmNlID0gc3I7CisJcGQtPm51bV9yZXNvdXJjZXMgPSBjbnQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDoKKwlrZnJlZShzcik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBZQU1PTl9TSVpFCTB4MDAxMDAwMDAKKyNkZWZpbmUgWUFNT05fRU5WX1NJWkUJMHgwMDA0MDAwMAorCitpbnQgX19pbml0IGRiMXhfcmVnaXN0ZXJfbm9yZmxhc2godW5zaWduZWQgbG9uZyBzaXplLCBpbnQgd2lkdGgsCisJCQkJICBpbnQgc3dhcHBlZCkKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpwZmQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQsIGk7CisKKwlpZiAoc2l6ZSA8ICg4ICogMTAyNCAqIDEwMjQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IC1FTk9NRU07CisJcGFydHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbikgKiA1LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlnb3RvIG91dDsKKworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlnb3RvIG91dDE7CisKKwlwZmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZmQpCisJCWdvdG8gb3V0MjsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwaHlzbWFwLWZsYXNoIiwgMCk7CisJaWYgKCFwZCkKKwkJZ290byBvdXQzOworCisJLyogTk9SIGZsYXNoIGVuZHMgYXQgMHgyMDAwMDAwMCwgcmVnYXJkbGVzcyBvZiBzaXplICovCisJcmVzLT5zdGFydCA9IDB4MjAwMDAwMDAgLSBzaXplOworCXJlcy0+ZW5kID0gMHgyMDAwMDAwMCAtIDE7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJLyogcGFydGl0aW9uIHNldHVwLiAgTW9zdCBEZXZlbGJvYXJkcyBoYXZlIGEgc3dpdGNoIHdoaWNoIGFsbG93cworCSAqIHRvIHN3YXAgdGhlIHBoeXNpY2FsIGxvY2F0aW9ucyBvZiB0aGUgMiBOT1IgZmxhc2ggYmFua3MuCisJICovCisJaSA9IDA7CisJaWYgKCFzd2FwcGVkKSB7CisJCS8qIGZpcnN0IE5PUiBjaGlwICovCisJCXBhcnRzW2ldLm9mZnNldCA9IDA7CisJCXBhcnRzW2ldLm5hbWUgPSAiVXNlciBGUyI7CisJCXBhcnRzW2ldLnNpemUgPSBzaXplIC8gMjsKKwkJaSsrOworCX0KKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gIlVzZXIgRlMgMiI7CisJcGFydHNbaV0uc2l6ZSA9IChzaXplIC8gMikgLSAoMHgyMDAwMDAwMCAtIDB4MWZjMDAwMDApOworCWkrKzsKKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gIllBTU9OIjsKKwlwYXJ0c1tpXS5zaXplID0gWUFNT05fU0laRTsKKwlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKwlpKys7CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJyYXcga2VybmVsIjsKKwlwYXJ0c1tpXS5zaXplID0gMHgwMDQwMDAwMCAtIFlBTU9OX1NJWkUgLSBZQU1PTl9FTlZfU0laRTsKKwlpKys7CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJZQU1PTiBFbnYiOworCXBhcnRzW2ldLnNpemUgPSBZQU1PTl9FTlZfU0laRTsKKwlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKwlpKys7CisKKwlpZiAoc3dhcHBlZCkgeworCQlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJCXBhcnRzW2ldLm5hbWUgPSAiVXNlciBGUyI7CisJCXBhcnRzW2ldLnNpemUgPSBzaXplIC8gMjsKKwkJaSsrOworCX0KKworCXBmZC0+d2lkdGggPSB3aWR0aDsKKwlwZmQtPnBhcnRzID0gcGFydHM7CisJcGZkLT5ucl9wYXJ0cyA9IDU7CisKKwlwZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZmQ7CisJcGQtPnJlc291cmNlID0gcmVzOworCXBkLT5udW1fcmVzb3VyY2VzID0gMTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CitvdXQzOgorCWtmcmVlKHBmZCk7CitvdXQyOgorCWtmcmVlKHJlcyk7CitvdXQxOgorCWtmcmVlKHBhcnRzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmggYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfREVWQk9BUkRfUExBVEZPUk1fSF8KKyNkZWZpbmUgX0RFVkJPQVJEX1BMQVRGT1JNX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfYXR0cl9sZW4sCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fZW5kLAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfaW9fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19lbmQsCisJCQkJICAgICAgIGludCBjYXJkX2lycSwKKwkJCQkgICAgICAgaW50IGNkX2lycSwKKwkJCQkgICAgICAgaW50IHN0c2NoZ19pcnEsCisJCQkJICAgICAgIGludCBlamVjdF9pcnEsCisJCQkJICAgICAgIGludCBpZCk7CisKK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCh1bnNpZ25lZCBsb25nIHNpemUsIGludCB3aWR0aCwKKwkJCQkgIGludCBzd2FwcGVkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCmluZGV4IDYzMmY5ODYuLjRiYmQzMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCiAvKgogICogR2VuZXJpYyBzdXNwZW5kIHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIEFsY2hlbXkgZGV2ZWxvcG1lbnQgYm9hcmRzLgpAQCAtMjYsNiArMjcsMjAgQEAKIAogc3RhdGljIGludCBkYjF4X3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKKwl1bnNpZ25lZCBzaG9ydCBiY3Nyc1sxNl07CisJaW50IGksIGosIGhhc2ludDsKKworCS8qIHNhdmUgQ1BMRCByZWdzICovCisJaGFzaW50ID0gYmNzcl9yZWFkKEJDU1JfV0hPQU1JKTsKKwloYXNpbnQgPSBCQ1NSX1dIT0FNSV9CT0FSRChoYXNpbnQpID49IEJDU1JfV0hPQU1JX0RCMTIwMDsKKwlqID0gKGhhc2ludCkgPyBCQ1NSX01BU0tTRVQgOiBCQ1NSX1NZU1RFTTsKKworCWZvciAoaSA9IEJDU1JfU1RBVFVTOyBpIDw9IGo7IGkrKykKKwkJYmNzcnNbaV0gPSBiY3NyX3JlYWQoaSk7CisKKwkvKiBzaHV0IG9mZiBoZXhsZWRzICovCisJYmNzcl93cml0ZShCQ1NSX0hFWENMRUFSLCAzKTsKKwogCS8qIGVuYWJsZSBHUElPIGJhc2VkIHdha2V1cCAqLwogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAKQEAgLTUyLDYgKzY3LDIzIEBACiAJLyogLi4uYW5kIG5vdyB0aGUgc2FuZG1hbiBjYW4gY29tZSEgKi8KIAlhdV9zbGVlcCgpOwogCisKKwkvKiByZXN0b3JlIENQTEQgcmVncyAqLworCWZvciAoaSA9IEJDU1JfU1RBVFVTOyBpIDw9IEJDU1JfU1lTVEVNOyBpKyspCisJCWJjc3Jfd3JpdGUoaSwgYmNzcnNbaV0pOworCisJLyogcmVzdG9yZSBDUExEIGludCByZWdpc3RlcnMgKi8KKwlpZiAoaGFzaW50KSB7CisJCWJjc3Jfd3JpdGUoQkNTUl9JTlRDTFIsIDB4ZmZmZik7CisJCWJjc3Jfd3JpdGUoQkNTUl9NQVNLQ0xSLCAweGZmZmYpOworCQliY3NyX3dyaXRlKEJDU1JfSU5UU1RBVCwgMHhmZmZmKTsKKwkJYmNzcl93cml0ZShCQ1NSX0lOVFNFVCwgYmNzcnNbQkNTUl9JTlRTRVRdKTsKKwkJYmNzcl93cml0ZShCQ1NSX01BU0tTRVQsIGJjc3JzW0JDU1JfTUFTS1NFVF0pOworCX0KKworCS8qIGxpZ2h0IHVwIGhleGxlZHMgKi8KKwliY3NyX3dyaXRlKEJDU1JfSEVYQ0xFQVIsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCmluZGV4IDAwNDJiZDYuLmIzMGRmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYwpAQCAtNjAsMyArNjAsOCBAQAogCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CisKK3ZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKK3sKKyAgICBhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQppbmRleCA3YzY3YjNkLi40YTUzODE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgTWFrZWZpbGUgZm9yIDRHIFN5c3RlbXMgTVRYLTEgYm9hcmQuCiAjCiAKLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitsaWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubwogb2JqLXkgOj0gcGxhdGZvcm0ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKaW5kZXggNDViNjFjOS4uYTlmMDMzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCkBAIC0zMCwzMiArMzAsNDMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMCAtIEFkYXB0ZXJBLVNsb3QwICh0b3ApICovCisJWzFdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDEgLSBBZGFwdGVyQS1TbG90MSAoYm90dG9tKSAqLworCVsyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlRELCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDAyIC0gQWRhcHRlckItU2xvdDAgKHRvcCkgKi8KKwlbM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEQsIEFVMTUwMF9QQ0lfSU5UQywgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMyAtIEFkYXB0ZXJCLVNsb3QxIChib3R0b20pICovCisJWzRdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDQgLSBBZGFwdGVyQy1TbG90MCAodG9wKSAqLworCVs1XSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDA1IC0gQWRhcHRlckMtU2xvdDEgKGJvdHRvbSkgKi8KKwlbNl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwNiAtIEFkYXB0ZXJELVNsb3QwICh0b3ApICovCisJWzddID0geyAtMSwgQVUxNTAwX1BDSV9JTlRELCBBVTE1MDBfUENJX0lOVEMsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDcgLSBBZGFwdGVyRC1TbG90MSAoYm90dG9tKSAqLworfTsKKwogZXh0ZXJuIGludCAoKmJvYXJkX3BjaV9pZHNlbCkodW5zaWduZWQgaW50IGRldnNlbCwgaW50IGFzc2VydCk7CiBpbnQgbXR4MV9wY2lfaWRzZWwodW5zaWduZWQgaW50IGRldnNlbCwgaW50IGFzc2VydCk7CiAKLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG10eDFfcmVzZXQoY2hhciAqYykKIHsKIAkvKiBIaXQgQkNTUi5TWVNURU1fQ09OVFJPTFtTV19SU1RdICovCiAJYXVfd3JpdGVsKDB4MDAwMDAwMDAsIDB4QUUwMDAwMUMpOwogfQogCitzdGF0aWMgdm9pZCBtdHgxX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CisJd2hpbGUgKDEpCisJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworfQorCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCiAJYWxjaGVteV9ncGlvMl9lbmFibGUoKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKQEAgLTg2LDYgKzk3LDEwIEBACiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjExLCAxKTsJLyogZ3JlZW4gb24gKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTIsIDApOwkvKiByZWQgb2ZmICovCiAKKwlwbV9wb3dlcl9vZmYgPSBtdHgxX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gbXR4MV9wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9IG10eDFfcmVzZXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICI0RyBTeXN0ZW1zIE1UWC0xIEJvYXJkXG4iKTsKIH0KIApAQCAtMTA5LDMgKzEyNCwxNSBAQAogCWF1X3N5bmNfdWRlbGF5KDEpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHgxX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA0X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG10eDFfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCmluZGV4IDVlODcxYzguLmY4ZDI1NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKQEAgLTU4LDMgKzU5LDggQEAKIAkJc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKTsKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwogfQorCit2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCit7CisJYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2lycW1hcC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYWIxMmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzBdID0geyAtMSwgSU5UQSwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMCAtIEFkYXB0ZXJBLVNsb3QwICh0b3ApICovCi0JWzFdID0geyAtMSwgSU5UQiwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMSAtIEFkYXB0ZXJBLVNsb3QxIChib3R0b20pICovCi0JWzJdID0geyAtMSwgSU5UQywgSU5URCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMiAtIEFkYXB0ZXJCLVNsb3QwICh0b3ApICovCi0JWzNdID0geyAtMSwgSU5URCwgSU5UQywgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMyAtIEFkYXB0ZXJCLVNsb3QxIChib3R0b20pICovCi0JWzRdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNCAtIEFkYXB0ZXJDLVNsb3QwICh0b3ApICovCi0JWzVdID0geyAtMSwgSU5UQiwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNSAtIEFkYXB0ZXJDLVNsb3QxIChib3R0b20pICovCi0JWzZdID0geyAtMSwgSU5UQywgSU5URCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNiAtIEFkYXB0ZXJELVNsb3QwICh0b3ApICovCi0JWzddID0geyAtMSwgSU5URCwgSU5UQywgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNyAtIEFkYXB0ZXJELVNsb3QxIChib3R0b20pICovCi19OwotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0gICAgICAgeyBBVTE1MDBfR1BJT18yMDQsIElSUUZfVFJJR0dFUl9ISUdILCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotICAgICAgIHsgQVUxNTAwX0dQSU9fMjAzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZQppbmRleCBkYjNjNTI2Li40ZGM4MWQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUKQEAgLTUsNCArNSw2IEBACiAjIE1ha2VmaWxlIGZvciBNeUNhYmxlIFhYUzE1MDAgYm9hcmQuCiAjCiAKLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitsaWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKaW5kZXggNGRlMmQ0OC4uNDdiNDI5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtMjUsMzEgKzI1LDM1IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIHh4czE1MDBfcmVzZXQoY2hhciAqYykKIHsKIAkvKiBIaXQgQkNTUi5TWVNURU1fQ09OVFJPTFtTV19SU1RdICovCiAJYXVfd3JpdGVsKDB4MDAwMDAwMDAsIDB4QUUwMDAwMUMpOwogfQogCitzdGF0aWMgdm9pZCB4eHMxNTAwX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CisJd2hpbGUgKDEpCisJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworfQorCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYzsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgorCXBtX3Bvd2VyX29mZiA9IHh4czE1MDBfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSB4eHMxNTAwX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0geHhzMTUwMF9yZXNldDsKIAogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAJYWxjaGVteV9ncGlvMl9lbmFibGUoKTsKQEAgLTY4LDIyICs3Miw2IEBACiAJLyogRW5hYmxlIERUUiA9IFVTQiBwb3dlciB1cCAqLwogCWF1X3dyaXRlbCgweDAxLCBVQVJUM19BRERSICsgVUFSVF9NQ1IpOyAvKiBVQVJUX01DUl9EVFIgaXMgMHgwMT8/PyAqLwogCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9YWFMxNTAwCi0JLyogR1BJTyAwLCAxLCBhbmQgNCBhcmUgaW5wdXRzICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgwKTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDEpOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoNCk7Ci0KLQkvKiBHUElPMiAyMDgvOS8xMC8xMSBhcmUgaW5wdXRzICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMDgpOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMjA5KTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDIxMCk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMTEpOwotCi0JLyogVHVybiBvZmYgcG93ZXIgKi8KLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTQsIDApOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENJCiAjaWYgZGVmaW5lZChfX01JUFNFQl9fKQogCWF1X3dyaXRlbCgweGYgfCAoMiA8PCA2KSB8ICgxIDw8IDQpLCBBdTE1MDBfUENJX0NGRyk7CkBAIC05MiwzICs4MCwyMyBAQAogI2VuZGlmCiAjZW5kaWYKIH0KKworc3RhdGljIGludCBfX2luaXQgeHhzMTUwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNF9JTlQsIElSUUZfVFJJR0dFUl9ISUdIKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDdfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENGIGlycSAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbCh4eHMxNTAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKaW5kZXggNDU2ZmExNC4uMTUxMjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIApAQCAtNTYsMyArNTcsOCBAQAogCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CisKK3ZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMGYzMDEyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTE1MDBfR1BJT18yMDQsIElSUUZfVFJJR0dFUl9ISUdILCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwNywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCi0JeyBBVTEwMDBfR1BJT18wLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18xLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18yLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18zLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT180LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIENGIGludGVycnVwdCAqLwotCXsgQVUxMDAwX0dQSU9fNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotfTsKLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3YzQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogWFhTMTUwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB4eHMxNTAwX3BjbWNpYV9yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInBjbWNpYS1pbyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX0lPX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwl9LAorCXsKKwkJLm5hbWUJPSAicGNtY2lhLWF0dHIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCX0sCisJeworCQkubmFtZQk9ICJwY21jaWEtbWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX01FTV9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHh4czE1MDBfcGNtY2lhX2RldiA9IHsKKwkubmFtZQkJPSAieHhzMTUwMF9wY21jaWEiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoeHhzMTUwMF9wY21jaWFfcmVzKSwKKwkucmVzb3VyY2UJPSB4eHMxNTAwX3BjbWNpYV9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqeHhzMTUwMF9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmeHhzMTUwMF9wY21jaWFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHhzMTUwMF9kZXZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh4eHMxNTAwX2RldnMsCisJCQkJICAgIEFSUkFZX1NJWkUoeHhzMTUwMF9kZXZzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoeHhzMTUwMF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L2Nsb2NrLmMgYi9hcmNoL21pcHMvYXI3L2Nsb2NrLmMKaW5kZXggY2M2NWM4ZS4uZmMwZTcxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9jbG9jay5jCisrKyBiL2FyY2gvbWlwcy9hcjcvY2xvY2suYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEV1Z2VuZSBLb25ldiA8ZWprYUBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjQsNiArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CkBAIC05NCwxMiArOTcsMTYgQEAKIAlzdHJ1Y3QgdG5ldGQ3MjAwX2Nsb2NrIHVzYjsKIH07CiAKLWludCBhcjdfY3B1X2Nsb2NrID0gMTUwMDAwMDAwOwotRVhQT1JUX1NZTUJPTChhcjdfY3B1X2Nsb2NrKTsKLWludCBhcjdfYnVzX2Nsb2NrID0gMTI1MDAwMDAwOwotRVhQT1JUX1NZTUJPTChhcjdfYnVzX2Nsb2NrKTsKLWludCBhcjdfZHNwX2Nsb2NrOwotRVhQT1JUX1NZTUJPTChhcjdfZHNwX2Nsb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJ1c19jbGsgPSB7CisJLnJhdGUJPSAxMjUwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5yYXRlCT0gMTUwMDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZidXNfY2xrOwogCiBzdGF0aWMgdm9pZCBhcHByb3hpbWF0ZShpbnQgYmFzZSwgaW50IHRhcmdldCwgaW50ICpwcmVkaXYsCiAJCQlpbnQgKnBvc3RkaXYsIGludCAqbXVsKQpAQCAtMTg1LDcgKzE5Miw3IEBACiAJCWJhc2VfY2xvY2sgPSBBUjdfWFRBTF9DTE9DSzsKIAkJYnJlYWs7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfQ1BVOgotCQliYXNlX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwkJYmFzZV9jbG9jayA9IGNwdV9jbGsucmF0ZTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMTIsMTEgKzIxOSwxMSBAQAogCXUzMiAqYm9vdGNyLCB1MzIgZnJlcXVlbmN5KQogewogCWludCBwcmVkaXYsIHBvc3RkaXYsIG11bDsKLQlpbnQgYmFzZV9jbG9jayA9IGFyN19idXNfY2xvY2s7CisJaW50IGJhc2VfY2xvY2sgPSBidXNfY2xrLnJhdGU7CiAKIAlzd2l0Y2ggKCgqYm9vdGNyICYgKEJPT1RfUExMX1NPVVJDRV9NQVNLIDw8IHNoaWZ0KSkgPj4gc2hpZnQpIHsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9CVVM6Ci0JCWJhc2VfY2xvY2sgPSBhcjdfYnVzX2Nsb2NrOworCQliYXNlX2Nsb2NrID0gYnVzX2Nsay5yYXRlOwogCQlicmVhazsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9SRUY6CiAJCWJhc2VfY2xvY2sgPSBBUjdfUkVGX0NMT0NLOwpAQCAtMjI1LDcgKzIzMiw3IEBACiAJCWJhc2VfY2xvY2sgPSBBUjdfWFRBTF9DTE9DSzsKIAkJYnJlYWs7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfQ1BVOgotCQliYXNlX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwkJYmFzZV9jbG9jayA9IGNwdV9jbGsucmF0ZTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDcsMTggKzI1NCwxOCBAQAogCQkJCQlpb3JlbWFwX25vY2FjaGUoVVI4X1JFR1NfQ0xPQ0tTLAogCQkJCQlzaXplb2Yoc3RydWN0IHRuZXRkNzMwMF9jbG9ja3MpKTsKIAotCWFyN19idXNfY2xvY2sgPSB0bmV0ZDczMDBfZ2V0X2Nsb2NrKEJVU19QTExfU09VUkNFX1NISUZULAorCWJ1c19jbGsucmF0ZSA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQlVTX1BMTF9TT1VSQ0VfU0hJRlQsCiAJCSZjbG9ja3MtPmJ1cywgYm9vdGNyLCBBUjdfQUZFX0NMT0NLKTsKIAogCWlmICgqYm9vdGNyICYgQk9PVF9QTExfQVNZTkNfTU9ERSkKLQkJYXI3X2NwdV9jbG9jayA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQ1BVX1BMTF9TT1VSQ0VfU0hJRlQsCisJCWNwdV9jbGsucmF0ZSA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQ1BVX1BMTF9TT1VSQ0VfU0hJRlQsCiAJCQkmY2xvY2tzLT5jcHUsIGJvb3RjciwgQVI3X0FGRV9DTE9DSyk7CiAJZWxzZQotCQlhcjdfY3B1X2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwkJY3B1X2Nsay5yYXRlID0gYnVzX2Nsay5yYXRlOwogCi0JaWYgKGFyN19kc3BfY2xvY2sgPT0gMjUwMDAwMDAwKQorCWlmIChkc3BfY2xrLnJhdGUgPT0gMjUwMDAwMDAwKQogCQl0bmV0ZDczMDBfc2V0X2Nsb2NrKERTUF9QTExfU09VUkNFX1NISUZULCAmY2xvY2tzLT5kc3AsCi0JCQlib290Y3IsIGFyN19kc3BfY2xvY2spOworCQkJYm9vdGNyLCBkc3BfY2xrLnJhdGUpOwogCiAJaW91bm1hcChjbG9ja3MpOwogCWlvdW5tYXAoYm9vdGNyKTsKQEAgLTM0MywyMCArMzUwLDIwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQljYWxjdWxhdGUoZHNwX2Jhc2UsIFRORVRENzIwMF9ERUZfRFNQX0NMSywKIAkJCSZkc3BfcHJlZGl2LCAmZHNwX3Bvc3RkaXYsICZkc3BfbXVsKTsKLQkJYXI3X2J1c19jbG9jayA9CisJCWJ1c19jbGsucmF0ZSA9CiAJCQkoKGRzcF9iYXNlIC8gZHNwX3ByZWRpdikgKiBkc3BfbXVsKSAvIGRzcF9wb3N0ZGl2OwogCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGRzcF9iYXNlLCAmY2xvY2tzLT5kc3AsCiAJCQlkc3BfcHJlZGl2LCBkc3BfcG9zdGRpdiAqIDIsIGRzcF9wb3N0ZGl2LCBkc3BfbXVsICogMiwKLQkJCWFyN19idXNfY2xvY2spOworCQkJYnVzX2Nsay5yYXRlKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgQ1BVIGNsb2NrXG4iKTsKIAkJY2FsY3VsYXRlKGNwdV9iYXNlLCBUTkVURDcyMDBfREVGX0NQVV9DTEssICZjcHVfcHJlZGl2LAogCQkJJmNwdV9wb3N0ZGl2LCAmY3B1X211bCk7Ci0JCWFyN19jcHVfY2xvY2sgPQorCQljcHVfY2xrLnJhdGUgPQogCQkJKChjcHVfYmFzZSAvIGNwdV9wcmVkaXYpICogY3B1X211bCkgLyBjcHVfcG9zdGRpdjsKIAkJdG5ldGQ3MjAwX3NldF9jbG9jayhjcHVfYmFzZSwgJmNsb2Nrcy0+Y3B1LAogCQkJY3B1X3ByZWRpdiwgY3B1X3Bvc3RkaXYsIC0xLCBjcHVfbXVsLAotCQkJYXI3X2NwdV9jbG9jayk7CisJCQljcHVfY2xrLnJhdGUpOwogCiAJfSBlbHNlCiAJCWlmICgqYm9vdGNyICYgQk9PVF9QTExfMlRPMV9NT0RFKSB7CkBAIC0zNjUsNDggKzM3Miw5MCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIENQVSBjbG9ja1xuIik7CiAJCQljYWxjdWxhdGUoY3B1X2Jhc2UsIFRORVRENzIwMF9ERUZfQ1BVX0NMSywgJmNwdV9wcmVkaXYsCiAJCQkJJmNwdV9wb3N0ZGl2LCAmY3B1X211bCk7Ci0JCQlhcjdfY3B1X2Nsb2NrID0gKChjcHVfYmFzZSAvIGNwdV9wcmVkaXYpICogY3B1X211bCkKKwkJCWNwdV9jbGsucmF0ZSA9ICgoY3B1X2Jhc2UgLyBjcHVfcHJlZGl2KSAqIGNwdV9tdWwpCiAJCQkJCQkJCS8gY3B1X3Bvc3RkaXY7CiAJCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGNwdV9iYXNlLCAmY2xvY2tzLT5jcHUsCiAJCQkJY3B1X3ByZWRpdiwgY3B1X3Bvc3RkaXYsIC0xLCBjcHVfbXVsLAotCQkJCWFyN19jcHVfY2xvY2spOworCQkJCWNwdV9jbGsucmF0ZSk7CiAKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQkJY2FsY3VsYXRlKGRzcF9iYXNlLCBUTkVURDcyMDBfREVGX0RTUF9DTEssICZkc3BfcHJlZGl2LAogCQkJCSZkc3BfcG9zdGRpdiwgJmRzcF9tdWwpOwotCQkJYXI3X2J1c19jbG9jayA9IGFyN19jcHVfY2xvY2sgLyAyOworCQkJYnVzX2Nsay5yYXRlID0gY3B1X2Nsay5yYXRlIC8gMjsKIAkJCXRuZXRkNzIwMF9zZXRfY2xvY2soZHNwX2Jhc2UsICZjbG9ja3MtPmRzcCwKIAkJCQlkc3BfcHJlZGl2LCBkc3BfcG9zdGRpdiAqIDIsIGRzcF9wb3N0ZGl2LAotCQkJCWRzcF9tdWwgKiAyLCBhcjdfYnVzX2Nsb2NrKTsKKwkJCQlkc3BfbXVsICogMiwgYnVzX2Nsay5yYXRlKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU3luYyAxOjEgbW9kZVxuIik7CiAKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQkJY2FsY3VsYXRlKGRzcF9iYXNlLCBUTkVURDcyMDBfREVGX0RTUF9DTEssICZkc3BfcHJlZGl2LAogCQkJCSZkc3BfcG9zdGRpdiwgJmRzcF9tdWwpOwotCQkJYXI3X2J1c19jbG9jayA9ICgoZHNwX2Jhc2UgLyBkc3BfcHJlZGl2KSAqIGRzcF9tdWwpCisJCQlidXNfY2xrLnJhdGUgPSAoKGRzcF9iYXNlIC8gZHNwX3ByZWRpdikgKiBkc3BfbXVsKQogCQkJCQkJCQkvIGRzcF9wb3N0ZGl2OwogCQkJdG5ldGQ3MjAwX3NldF9jbG9jayhkc3BfYmFzZSwgJmNsb2Nrcy0+ZHNwLAogCQkJCWRzcF9wcmVkaXYsIGRzcF9wb3N0ZGl2ICogMiwgZHNwX3Bvc3RkaXYsCi0JCQkJZHNwX211bCAqIDIsIGFyN19idXNfY2xvY2spOworCQkJCWRzcF9tdWwgKiAyLCBidXNfY2xrLnJhdGUpOwogCi0JCQlhcjdfY3B1X2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwkJCWNwdV9jbGsucmF0ZSA9IGJ1c19jbGsucmF0ZTsKIAkJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIFVTQiBjbG9ja1xuIik7Ci0JdXNiX2Jhc2UgPSBhcjdfYnVzX2Nsb2NrOworCXVzYl9iYXNlID0gYnVzX2Nsay5yYXRlOwogCWNhbGN1bGF0ZSh1c2JfYmFzZSwgVE5FVEQ3MjAwX0RFRl9VU0JfQ0xLLCAmdXNiX3ByZWRpdiwKIAkJJnVzYl9wb3N0ZGl2LCAmdXNiX211bCk7CiAJdG5ldGQ3MjAwX3NldF9jbG9jayh1c2JfYmFzZSwgJmNsb2Nrcy0+dXNiLAogCQl1c2JfcHJlZGl2LCB1c2JfcG9zdGRpdiwgLTEsIHVzYl9tdWwsCiAJCVRORVRENzIwMF9ERUZfVVNCX0NMSyk7CiAKLQlhcjdfZHNwX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwlkc3BfY2xrLnJhdGUgPSBjcHVfY2xrLnJhdGU7CiAKIAlpb3VubWFwKGNsb2Nrcyk7CiAJaW91bm1hcChib290Y3IpOwogfQogCisvKgorICogTGludXggY2xvY2sgQVBJCisgKi8KK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJaWYgKCFzdHJjbXAoaWQsICJidXMiKSkKKwkJcmV0dXJuICZidXNfY2xrOworCS8qIGNwbWFjIGFuZCB2YnVzIHNoYXJlIHRoZSBzYW1lIHJhdGUgKi8KKwlpZiAoIXN0cmNtcChpZCwgImNwbWFjIikpCisJCXJldHVybiAmdmJ1c19jbGs7CisJaWYgKCFzdHJjbXAoaWQsICJjcHUiKSkKKwkJcmV0dXJuICZjcHVfY2xrOworCWlmICghc3RyY21wKGlkLCAiZHNwIikpOworCQlyZXR1cm4gJmRzcF9jbGs7CisJaWYgKCFzdHJjbXAoaWQsICJ2YnVzIikpCisJCXJldHVybiAmdmJ1c19jbGs7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKwogaW50IF9faW5pdCBhcjdfaW5pdF9jbG9ja3Modm9pZCkKIHsKIAlzd2l0Y2ggKGFyN19jaGlwX2lkKCkpIHsKQEAgLTQxNSwxMiArNDY0LDE0IEBACiAJCXRuZXRkNzIwMF9pbml0X2Nsb2NrcygpOwogCQlicmVhazsKIAljYXNlIEFSN19DSElQXzczMDA6Ci0JCWFyN19kc3BfY2xvY2sgPSB0bmV0ZDczMDBfZHNwX2Nsb2NrKCk7CisJCWRzcF9jbGsucmF0ZSA9IHRuZXRkNzMwMF9kc3BfY2xvY2soKTsKIAkJdG5ldGQ3MzAwX2luaXRfY2xvY2tzKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKwkvKiBhZGp1c3QgdmJ1cyBjbG9jayByYXRlICovCisJdmJ1c19jbGsucmF0ZSA9IGJ1c19jbGsucmF0ZSAvIDI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKaW5kZXggNzRlMTRhMy4uYzMyZmJiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFdWdlbmUgS29uZXYgPGVqa2FAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4LDMxICsxOSwxMTMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2dwaW8uaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKmFyN19ncGlvX2xpc3RbQVI3X0dQSU9fTUFYXTsKK3N0cnVjdCBhcjdfZ3Bpb19jaGlwIHsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKK307CiAKLWludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCitzdGF0aWMgaW50IGFyN19ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvKQogewotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX2luID0gZ3BjaC0+cmVncyArIEFSN19HUElPX0lOUFVUOwogCi0JaWYgKGFyN19ncGlvX2xpc3RbZ3Bpb10pCi0JCXJldHVybiAtRUJVU1k7CisJcmV0dXJuIHJlYWRsKGdwaW9faW4pICYgKDEgPDwgZ3Bpbyk7Cit9CiAKLQlpZiAobGFiZWwpCi0JCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSBsYWJlbDsKLQllbHNlCi0JCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSAiYnVzeSI7CitzdGF0aWMgdm9pZCBhcjdfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX291dCA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19PVVRQVVQ7CisJdW5zaWduZWQgdG1wOworCisJdG1wID0gcmVhZGwoZ3Bpb19vdXQpICYgfigxIDw8IGdwaW8pOworCWlmICh2YWx1ZSkKKwkJdG1wIHw9IDEgPDwgZ3BpbzsKKwl3cml0ZWwodG1wLCBncGlvX291dCk7Cit9CisKK3N0YXRpYyBpbnQgYXI3X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX2RpciA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19ESVI7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpIHwgKDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhcjdfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKIHsKLQlCVUdfT04oIWFyN19ncGlvX2xpc3RbZ3Bpb10pOwotCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSBOVUxMOworCXN0cnVjdCBhcjdfZ3Bpb19jaGlwICpncGNoID0KKwkJCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFyN19ncGlvX2NoaXAsIGNoaXApOworCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPSBncGNoLT5yZWdzICsgQVI3X0dQSU9fRElSOworCisJYXI3X2dwaW9fc2V0X3ZhbHVlKGNoaXAsIGdwaW8sIHZhbHVlKTsKKwl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpICYgfigxIDw8IGdwaW8pLCBncGlvX2Rpcik7CisKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKKworc3RhdGljIHN0cnVjdCBhcjdfZ3Bpb19jaGlwIGFyN19ncGlvX2NoaXAgPSB7CisJLmNoaXAgPSB7CisJCS5sYWJlbAkJCT0gImFyNy1ncGlvIiwKKwkJLmRpcmVjdGlvbl9pbnB1dAk9IGFyN19ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkJLmRpcmVjdGlvbl9vdXRwdXQJPSBhcjdfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCQkuc2V0CQkJPSBhcjdfZ3Bpb19zZXRfdmFsdWUsCisJCS5nZXQJCQk9IGFyN19ncGlvX2dldF92YWx1ZSwKKwkJLmJhc2UJCQk9IDAsCisJCS5uZ3BpbwkJCT0gQVI3X0dQSU9fTUFYLAorCX0KK307CisKK2ludCBhcjdfZ3Bpb19lbmFibGUodW5zaWduZWQgZ3BpbykKK3sKKwl2b2lkIF9faW9tZW0gKmdwaW9fZW4gPSBhcjdfZ3Bpb19jaGlwLnJlZ3MgKyBBUjdfR1BJT19FTkFCTEU7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19lbikgfCAoMSA8PCBncGlvKSwgZ3Bpb19lbik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXI3X2dwaW9fZW5hYmxlKTsKKworaW50IGFyN19ncGlvX2Rpc2FibGUodW5zaWduZWQgZ3BpbykKK3sKKwl2b2lkIF9faW9tZW0gKmdwaW9fZW4gPSBhcjdfZ3Bpb19jaGlwLnJlZ3MgKyBBUjdfR1BJT19FTkFCTEU7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19lbikgJiB+KDEgPDwgZ3BpbyksIGdwaW9fZW4pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGFyN19ncGlvX2Rpc2FibGUpOworCitzdGF0aWMgaW50IF9faW5pdCBhcjdfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWFyN19ncGlvX2NoaXAucmVncyA9IGlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19HUElPLAorCQkJCQlBUjdfUkVHU19HUElPICsgMHgxMCk7CisKKwlpZiAoIWFyN19ncGlvX2NoaXAucmVncykgeworCQlwcmludGsoS0VSTl9FUlIgImFyNy1ncGlvOiBmYWlsZWQgdG8gaW9yZW1hcCByZWdzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZhcjdfZ3Bpb19jaGlwLmNoaXApOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcjctZ3BpbzogZmFpbGVkIHRvIGFkZCBncGlvY2hpcFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXByaW50ayhLRVJOX0lORk8gImFyNy1ncGlvOiByZWdpc3RlcmVkICVkIEdQSU9zXG4iLAorCQkJCWFyN19ncGlvX2NoaXAuY2hpcC5uZ3Bpbyk7CisJcmV0dXJuIHJldDsKK30KK2FyY2hfaW5pdGNhbGwoYXI3X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L21lbW9yeS5jIGIvYXJjaC9taXBzL2FyNy9tZW1vcnkuYwppbmRleCA2OTZjNzIzLi4yOGFiZmVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L21lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvbWVtb3J5LmMKQEAgLTYyLDggKzYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCiAJcGFnZXMgPSBtZW1zaXplKCkgPj4gUEFHRV9TSElGVDsKLQlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX09GRlNFVCwgcGFnZXMgPDwgUEFHRV9TSElGVCwKLQkJCSAgQk9PVF9NRU1fUkFNKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX09GRlNFVCwgcGFnZXMgPDwgUEFHRV9TSElGVCwgQk9PVF9NRU1fUkFNKTsKIH0KIAogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKaW5kZXggZjcwYTEwYS4uMjQ2ZGY3YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwpAQCAtMzQsNDUgKzM0LDUwIEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L3Byb20uaD4KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWTFlOUSBCdXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IHBsYXRfdmx5bnFfZGF0YSB7CiAJc3RydWN0IHBsYXRfdmx5bnFfb3BzIG9wczsKIAlpbnQgZ3Bpb19iaXQ7CiAJaW50IHJlc2V0X2JpdDsKIH07CiAKLQogc3RhdGljIGludCB2bHlucV9vbihzdHJ1Y3Qgdmx5bnFfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmV0OwogCXN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXJlc3VsdCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19iaXQsICJ2bHlucSIpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2JpdCwgInZseW5xIik7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlhcjdfZGV2aWNlX3Jlc2V0KHBkYXRhLT5yZXNldF9iaXQpOwogCi0JcmVzdWx0ID0gYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VuYWJsZWQ7CiAKLQlyZXN1bHQgPSBhcjdfZ3Bpb19lbmFibGUocGRhdGEtPmdwaW9fYml0KTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGFyN19ncGlvX2VuYWJsZShwZGF0YS0+Z3Bpb19iaXQpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VuYWJsZWQ7CiAKLQlyZXN1bHQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fYml0LCAwKTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19iaXQsIDApOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2dwaW9fZW5hYmxlZDsKIAogCW1zbGVlcCg1MCk7CiAKIAlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19iaXQsIDEpOworCiAJbXNsZWVwKDUwKTsKIAogCXJldHVybiAwOwpAQCAtODMsMzUyICs4OCwyMDggQEAKIAlhcjdfZGV2aWNlX2Rpc2FibGUocGRhdGEtPnJlc2V0X2JpdCk7CiAJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2JpdCk7CiBvdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB2bHlucV9vZmYoc3RydWN0IHZseW5xX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwogCWFyN19ncGlvX2Rpc2FibGUocGRhdGEtPmdwaW9fYml0KTsKIAlncGlvX2ZyZWUocGRhdGEtPmdwaW9fYml0KTsKIAlhcjdfZGV2aWNlX2Rpc2FibGUocGRhdGEtPnJlc2V0X2JpdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGh5c21hcF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJtZW0iLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydCA9IDB4MTAwMDAwMDAsCi0JLmVuZCA9IDB4MTA3ZmZmZmYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2xvd19yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfTUFDMCwKLQkJLmVuZCA9IEFSN19SRUdTX01BQzAgKyAweDdmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDI3LAotCQkuZW5kID0gMjcsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfaGlnaF9yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfTUFDMSwKLQkJLmVuZCA9IEFSN19SRUdTX01BQzEgKyAweDdmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDQxLAotCQkuZW5kID0gNDEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugdmx5bnFfbG93X3Jlc1tdID0gewogCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19WTFlOUTAsCi0JCS5lbmQgPSBBUjdfUkVHU19WTFlOUTAgKyAweGZmLAorCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX1ZMWU5RMCwKKwkJLmVuZAk9IEFSN19SRUdTX1ZMWU5RMCArIDB4ZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAyOSwKLQkJLmVuZCA9IDI5LAorCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMjksCisJCS5lbmQJPSAyOSwKIAl9LAogCXsKLQkJLm5hbWUgPSAibWVtIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IDB4MDQwMDAwMDAsCi0JCS5lbmQgPSAweDA0ZmZmZmZmLAorCQkubmFtZQk9ICJtZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gMHgwNDAwMDAwMCwKKwkJLmVuZAk9IDB4MDRmZmZmZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImRldmlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSA4MCwKLQkJLmVuZCA9IDExMSwKKwkJLm5hbWUJPSAiZGV2aXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDgwLAorCQkuZW5kCT0gMTExLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZseW5xX2hpZ2hfcmVzW10gPSB7CiAJewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1ZMWU5RMSwKLQkJLmVuZCA9IEFSN19SRUdTX1ZMWU5RMSArIDB4ZmYsCisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfVkxZTlExLAorCQkuZW5kCT0gQVI3X1JFR1NfVkxZTlExICsgMHhmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDMzLAotCQkuZW5kID0gMzMsCisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAzMywKKwkJLmVuZAk9IDMzLAogCX0sCiAJewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwYzAwMDAwMCwKLQkJLmVuZCA9IDB4MGNmZmZmZmYsCisJCS5uYW1lCT0gIm1lbSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSAweDBjMDAwMDAwLAorCQkuZW5kCT0gMHgwY2ZmZmZmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiZGV2aXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDExMiwKLQkJLmVuZCA9IDE0MywKKwkJLm5hbWUJPSAiZGV2aXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDExMiwKKwkJLmVuZAk9IDE0MywKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfcmVzW10gPSB7Ci0JewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1VTQiwKLQkJLmVuZCA9IEFSN19SRUdTX1VTQiArIDB4ZmYsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAzMiwKLQkJLmVuZCA9IDMyLAotCX0sCi0JewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwMzQwMDAwMCwKLQkJLmVuZCA9IDB4MDM0MDFmZmYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBoeXNtYXBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZpeGVkX3BoeV9zdGF0dXMgX19pbml0ZGF0YSA9IHsKLQkubGluayA9IDEsCi0JLnNwZWVkID0gMTAwLAotCS5kdXBsZXggPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfbG93X2RhdGEgPSB7Ci0JLnJlc2V0X2JpdCA9IDE3LAotCS5wb3dlcl9iaXQgPSAyMCwKLQkucGh5X21hc2sgPSAweDgwMDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfaGlnaF9kYXRhID0gewotCS5yZXNldF9iaXQgPSAyMSwKLQkucG93ZXJfYml0ID0gMjIsCi0JLnBoeV9tYXNrID0gMHg3ZmZmZmZmZiwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHZseW5xX2xvd19kYXRhID0gewotCS5vcHMub24gPSB2bHlucV9vbiwKLQkub3BzLm9mZiA9IHZseW5xX29mZiwKLQkucmVzZXRfYml0ID0gMjAsCi0JLmdwaW9fYml0ID0gMTgsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCisJfSwKKwkucmVzZXRfYml0CT0gMjAsCisJLmdwaW9fYml0CT0gMTgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRfdmx5bnFfZGF0YSB2bHlucV9oaWdoX2RhdGEgPSB7Ci0JLm9wcy5vbiA9IHZseW5xX29uLAotCS5vcHMub2ZmID0gdmx5bnFfb2ZmLAotCS5yZXNldF9iaXQgPSAxNiwKLQkuZ3Bpb19iaXQgPSAxOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBoeXNtYXBfZmxhc2ggPSB7Ci0JLmlkID0gMCwKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcGh5c21hcF9mbGFzaF9kYXRhLAotCS5yZXNvdXJjZSA9ICZwaHlzbWFwX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgY3BtYWNfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfbG93ID0gewotCS5pZCA9IDAsCi0JLm5hbWUgPSAiY3BtYWMiLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzayA9ICZjcG1hY19kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmY3BtYWNfbG93X2RhdGEsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCiAJfSwKLQkucmVzb3VyY2UgPSBjcG1hY19sb3dfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjcG1hY19sb3dfcmVzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2hpZ2ggPSB7Ci0JLmlkID0gMSwKLQkubmFtZSA9ICJjcG1hYyIsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJmNwbWFjX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZjcG1hY19oaWdoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSBjcG1hY19oaWdoX3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAorCS5yZXNldF9iaXQJPSAyNiwKKwkuZ3Bpb19iaXQJPSAxOSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZseW5xX2xvdyA9IHsKLQkuaWQgPSAwLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfbG93X2RhdGEsCi0JLnJlc291cmNlID0gdmx5bnFfbG93X3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodmx5bnFfbG93X3JlcyksCisJLmlkCQk9IDAsCisJLm5hbWUJCT0gInZseW5xIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHZseW5xX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZseW5xX2xvd19yZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdmx5bnFfaGlnaCA9IHsKLQkuaWQgPSAxLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfaGlnaF9kYXRhLAotCS5yZXNvdXJjZSA9IHZseW5xX2hpZ2hfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh2bHlucV9oaWdoX3JlcyksCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDgsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gOSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJldGhlcm5ldCIsCi0JCS5ncGlvID0gNywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ1c2IiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInBwcCIsCi0JCS5ncGlvID0gNiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDcsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiYWRzbCIsCi0JCS5ncGlvID0gOCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ3aWZpIiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJwb3dlciIsCi0JCS5ncGlvID0gMTQsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9zbF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICIxIiwKLQkJLmdwaW8gPSA3LAotCX0sCi0JewotCQkubmFtZSA9ICIyIiwKLQkJLmdwaW8gPSAxMywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICIzIiwKLQkJLmdwaW8gPSAxMCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI0IiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSA5LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfZm9uX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIjEiLAotCQkuZ3BpbyA9IDgsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjIiLAotCQkuZ3BpbyA9IDMsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiMyIsCi0JCS5ncGlvID0gNSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiNCIsCi0JCS5ncGlvID0gNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSAxMSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0gewotCS5uYW1lID0gImxlZHMtZ3BpbyIsCi0JLmlkID0gLTEsCisJLmlkCQk9IDEsCisJLm5hbWUJCT0gInZseW5xIiwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZhcjdfbGVkX2RhdGEsCi0JfQorCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB2bHlucV9oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmx5bnFfaGlnaF9yZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXI3X3VkYyA9IHsKLQkuaWQgPSAtMSwKLQkubmFtZSA9ICJhcjdfdWRjIiwKLQkucmVzb3VyY2UgPSB1c2JfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1c2JfcmVzKSwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0geworCS5uYW1lCT0gIm1lbSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkuZW5kCT0gMHgxMDdmZmZmZiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7Ci0JLm5hbWUgPSAicmVncyIsCi0JLnN0YXJ0ID0gLTEsIC8qIEZpbGxlZCBhdCBydW50aW1lICovCi0JLmVuZCA9IC0xLCAvKiBGaWxsZWQgYXQgcnVudGltZSAqLwotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0geworCS53aWR0aAk9IDIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfd2R0ID0gewotCS5pZCA9IC0xLAotCS5uYW1lICA9ICJhcjdfd2R0IiwKLQkucmVzb3VyY2UgPSAmYXI3X3dkdF9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGh5c21hcF9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2xvd19yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfTUFDMCwKKwkJLmVuZAk9IEFSN19SRUdTX01BQzAgKyAweDdmZiwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDI3LAorCQkuZW5kIAk9IDI3LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2hpZ2hfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX01BQzEsCisJCS5lbmQJPSBBUjdfUkVHU19NQUMxICsgMHg3ZmYsCisJfSwKKwl7CisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSA0MSwKKwkJLmVuZAk9IDQxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZml4ZWRfcGh5X3N0YXR1cyBfX2luaXRkYXRhID0geworCS5saW5rCQk9IDEsCisJLnNwZWVkCQk9IDEwMCwKKwkuZHVwbGV4CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19sb3dfZGF0YSA9IHsKKwkucmVzZXRfYml0CT0gMTcsCisJLnBvd2VyX2JpdAk9IDIwLAorCS5waHlfbWFzawk9IDB4ODAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19oaWdoX2RhdGEgPSB7CisJLnJlc2V0X2JpdAk9IDIxLAorCS5wb3dlcl9iaXQJPSAyMiwKKwkucGh5X21hc2sJPSAweDdmZmZmZmZmLAorfTsKKworc3RhdGljIHU2NCBjcG1hY19kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2xvdyA9IHsKKwkuaWQJCT0gMCwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNwbWFjX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNwbWFjX2xvd19yZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfaGlnaCA9IHsKKwkuaWQJCT0gMSwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjcG1hY19oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNoYXIyaGV4KGNoYXIgaCkKQEAgLTQ2Nyw2ICszMjgsMTU2IEBACiAJCQljaGFyMmhleChtYWNbaSAqIDMgKyAxXSk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19VU0IsCisJCS5lbmQJPSBBUjdfUkVHU19VU0IgKyAweGZmLAorCX0sCisJeworCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMzIsCisJCS5lbmQJPSAzMiwKKwl9LAorCXsKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MDM0MDAwMDAsCisJCS5lbmQJPSAweDAzNDAxZmZmLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfdWRjID0geworCS5uYW1lCQk9ICJhcjdfdWRjIiwKKwkucmVzb3VyY2UJPSB1c2JfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfcmVzKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRlZmF1bHRfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gOCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiZXRoZXJuZXQiLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJ1c2IiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAicHBwIiwKKwkJLmdwaW8JCQk9IDYsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiYWRzbCIsCisJCS5ncGlvCQkJPSA4LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIndpZmkiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAicG93ZXIiLAorCQkuZ3BpbwkJCT0gMTQsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfc2xfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICIxIiwKKwkJLmdwaW8JCQk9IDcsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMiIsCisJCS5ncGlvCQkJPSAxMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIzIiwKKwkJLmdwaW8JCQk9IDEwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNSIsCisJCS5ncGlvCQkJPSA5LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGZiX2Zvbl9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIjEiLAorCQkuZ3BpbwkJCT0gOCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIyIiwKKwkJLmdwaW8JCQk9IDMsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMyIsCisJCS5ncGlvCQkJPSA1LAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gNCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICI1IiwKKwkJLmdwaW8JCQk9IDExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXI3X2xlZF9kYXRhLAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfbGVkcyh2b2lkKQogewogCWNoYXIgKnByaWQsICp1c2JfcHJvZDsKQEAgLTQ5OSwxMTEgKzUxMCwxNDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7CisJLm5hbWUJCT0gInJlZ3MiLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gLTEsCS8qIEZpbGxlZCBhdCBydW50aW1lICovCisJLmVuZAkJPSAtMSwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN193ZHQgPSB7CisJLm5hbWUJCT0gImFyN193ZHQiLAorCS5yZXNvdXJjZQk9ICZhcjdfd2R0X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX3VhcnRzKHZvaWQpCiB7Ci0JdTE2IGNoaXBfaWQ7Ci0JaW50IHJlczsKLQl1MzIgKmJvb3RjciwgdmFsOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAotCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydFsyXSBfX2luaXRkYXRhOworCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydCBfX2luaXRkYXRhOworCXN0cnVjdCBjbGsgKmJ1c19jbGs7CisJaW50IHJlczsKIAotCW1lbXNldCh1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSAqIDIpOworCW1lbXNldCgmdWFydF9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCkpOwogCi0JdWFydF9wb3J0WzBdLnR5cGUgPSBQT1JUXzE2NTUwQTsKLQl1YXJ0X3BvcnRbMF0ubGluZSA9IDA7Ci0JdWFydF9wb3J0WzBdLmlycSA9IEFSN19JUlFfVUFSVDA7Ci0JdWFydF9wb3J0WzBdLnVhcnRjbGsgPSBhcjdfYnVzX2ZyZXEoKSAvIDI7Ci0JdWFydF9wb3J0WzBdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JdWFydF9wb3J0WzBdLm1hcGJhc2UgPSBBUjdfUkVHU19VQVJUMDsKLQl1YXJ0X3BvcnRbMF0ubWVtYmFzZSA9IGlvcmVtYXAodWFydF9wb3J0WzBdLm1hcGJhc2UsIDI1Nik7Ci0JdWFydF9wb3J0WzBdLnJlZ3NoaWZ0ID0gMjsKLQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydFswXSk7CisJYnVzX2NsayA9IGNsa19nZXQoTlVMTCwgImJ1cyIpOworCWlmIChJU19FUlIoYnVzX2NsaykpCisJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IGJ1cyBjbGtcbiIpOworCisJdWFydF9wb3J0LnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdWFydF9wb3J0LnVhcnRjbGsJPSBjbGtfZ2V0X3JhdGUoYnVzX2NsaykgLyAyOworCXVhcnRfcG9ydC5pb3R5cGUJPSBVUElPX01FTTMyOworCXVhcnRfcG9ydC5yZWdzaGlmdAk9IDI7CisKKwl1YXJ0X3BvcnQubGluZQkJPSAwOworCXVhcnRfcG9ydC5pcnEJCT0gQVI3X0lSUV9VQVJUMDsKKwl1YXJ0X3BvcnQubWFwYmFzZQk9IEFSN19SRUdTX1VBUlQwOworCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0KTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0KIAkvKiBPbmx5IFRORVRENzN4eCBoYXZlIGEgc2Vjb25kIHNlcmlhbCBwb3J0ICovCiAJaWYgKGFyN19oYXNfc2Vjb25kX3VhcnQoKSkgewotCQl1YXJ0X3BvcnRbMV0udHlwZSA9IFBPUlRfMTY1NTBBOwotCQl1YXJ0X3BvcnRbMV0ubGluZSA9IDE7Ci0JCXVhcnRfcG9ydFsxXS5pcnEgPSBBUjdfSVJRX1VBUlQxOwotCQl1YXJ0X3BvcnRbMV0udWFydGNsayA9IGFyN19idXNfZnJlcSgpIC8gMjsKLQkJdWFydF9wb3J0WzFdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JCXVhcnRfcG9ydFsxXS5tYXBiYXNlID0gVVI4X1JFR1NfVUFSVDE7Ci0JCXVhcnRfcG9ydFsxXS5tZW1iYXNlID0gaW9yZW1hcCh1YXJ0X3BvcnRbMV0ubWFwYmFzZSwgMjU2KTsKLQkJdWFydF9wb3J0WzFdLnJlZ3NoaWZ0ID0gMjsKLQkJcmVzID0gZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0X3BvcnRbMV0pOworCQl1YXJ0X3BvcnQubGluZQkJPSAxOworCQl1YXJ0X3BvcnQuaXJxCQk9IEFSN19JUlFfVUFSVDE7CisJCXVhcnRfcG9ydC5tYXBiYXNlCT0gVVI4X1JFR1NfVUFSVDE7CisJCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydCk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfU0VSSUFMXzgyNTAgKi8KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpib290Y3I7CisJdTMyIHZhbDsKKwl1MTYgY2hpcF9pZDsKKwlpbnQgcmVzOworCisJcmVzID0gYXI3X3JlZ2lzdGVyX3VhcnRzKCk7CisJaWYgKHJlcykKKwkJcHJfZXJyKCJ1bmFibGUgdG8gc2V0dXAgdWFydChzKTogJWRcbiIsIHJlcyk7CisKIAlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2gpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBwaHlzbWFwLWZsYXNoOiAlZFxuIiwgcmVzKTsKIAogCWFyN19kZXZpY2VfZGlzYWJsZSh2bHlucV9sb3dfZGF0YS5yZXNldF9iaXQpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfbG93KTsKIAlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmx5bnEtbG93OiAlZFxuIiwgcmVzKTsKIAogCWlmIChhcjdfaGFzX2hpZ2hfdmx5bnEoKSkgewogCQlhcjdfZGV2aWNlX2Rpc2FibGUodmx5bnFfaGlnaF9kYXRhLnJlc2V0X2JpdCk7CiAJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfaGlnaCk7CiAJCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOworCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHZseW5xLWhpZ2g6ICVkXG4iLCByZXMpOwogCX0KIAogCWlmIChhcjdfaGFzX2hpZ2hfY3BtYWMoKSkgewotCQlyZXMgPSBmaXhlZF9waHlfYWRkKFBIWV9QT0xMLCBjcG1hY19oaWdoLmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7Ci0JCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCQlyZXR1cm4gcmVzOwotCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7Ci0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0gZWxzZSB7CisJCWlmICghcmVzKSB7CisJCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7CisKKwkJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7CisJCQlpZiAocmVzKQorCQkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBjcG1hYy1oaWdoOiAlZFxuIiwgcmVzKTsKKwkJfSBlbHNlCisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gYWRkIGNwbWFjLWhpZ2ggcGh5OiAlZFxuIiwgcmVzKTsKKwl9IGVsc2UKIAkJY3BtYWNfbG93X2RhdGEucGh5X21hc2sgPSAweGZmZmZmZmZmOwotCX0KIAogCXJlcyA9IGZpeGVkX3BoeV9hZGQoUEhZX1BPTEwsIGNwbWFjX2xvdy5pZCwgJmZpeGVkX3BoeV9zdGF0dXMpOwotCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCXJldHVybiByZXM7Ci0KLQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2xvdyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwlpZiAoIXJlcykgeworCQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19sb3cpOworCQlpZiAocmVzKQorCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGNwbWFjLWxvdzogJWRcbiIsIHJlcyk7CisJfSBlbHNlCisJCXByX3dhcm5pbmcoInVuYWJsZSB0byBhZGQgY3BtYWMtbG93IHBoeTogJWRcbiIsIHJlcyk7CiAKIAlkZXRlY3RfbGVkcygpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X2dwaW9fbGVkcyk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGxlZHM6ICVkXG4iLCByZXMpOwogCiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfdWRjKTsKLQotCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOwotCXN3aXRjaCAoY2hpcF9pZCkgewotCWNhc2UgQVI3X0NISVBfNzEwMDoKLQljYXNlIEFSN19DSElQXzcyMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gQVI3X1JFR1NfV0RUOwotCQlicmVhazsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gVVI4X1JFR1NfV0RUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7Ci0KLQlib290Y3IgPSAodTMyICopaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7Ci0JdmFsID0gKmJvb3RjcjsKLQlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHJlcykKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHVzYiBzbGF2ZTogJWRcbiIsIHJlcyk7CiAKIAkvKiBSZWdpc3RlciB3YXRjaGRvZyBvbmx5IGlmIGVuYWJsZWQgaW4gaGFyZHdhcmUgKi8KLQlpZiAodmFsICYgQVI3X1dEVF9IV19FTkEpCi0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7CisJdmFsID0gcmVhZGwoYm9vdGNyKTsKKwlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKSB7CisJCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOworCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBBUjdfQ0hJUF83MTAwOgorCQljYXNlIEFSN19DSElQXzcyMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IEFSN19SRUdTX1dEVDsKKwkJCWJyZWFrOworCQljYXNlIEFSN19DSElQXzczMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IFVSOF9SRUdTX1dEVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KIAotCXJldHVybiByZXM7CisJCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKKwkJaWYgKHJlcykKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciB3YXRjaGRvZzogJWRcbiIsIHJlcyk7CisJfQorCisJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGFyN19yZWdpc3Rlcl9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcHJvbS5jIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKaW5kZXggYzFmZGQzNi4uNTIzODU3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKQEAgLTMyLDggKzMyLDggQEAKICNkZWZpbmUgTUFYX0VOVFJZIDgwCiAKIHN0cnVjdCBlbnZfdmFyIHsKLQljaGFyICpuYW1lOwotCWNoYXIgKnZhbHVlOworCWNoYXIJKm5hbWU7CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IGVudl92YXIgYWRhbTJfZW52W01BWF9FTlRSWV07CkBAIC00MSw2ICs0MSw3IEBACiBjaGFyICpwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgKGkgPCBNQVhfRU5UUlkpICYmIGFkYW0yX2VudltpXS5uYW1lOyBpKyspCiAJCWlmICghc3RyY21wKG5hbWUsIGFkYW0yX2VudltpXS5uYW1lKSkKIAkJCXJldHVybiBhZGFtMl9lbnZbaV0udmFsdWU7CkBAIC00OSw2NSArNTAsNTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wocHJvbV9nZXRlbnYpOwogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIHN0YXRpYyB2b2lkICBfX2luaXQgYXI3X2luaXRfY21kbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWNoYXIgKmNwOwotCWludCBhY3RyOworCWludCBpOwogCi0JYWN0ciA9IDE7IC8qIEFsd2F5cyBpZ25vcmUgYXJndlswXSAqLwotCi0JY3AgPSAmKGFyY3NfY21kbGluZVswXSk7Ci0Jd2hpbGUgKGFjdHIgPCBhcmdjKSB7Ci0JCXN0cmNweShjcCwgYXJndlthY3RyXSk7Ci0JCWNwICs9IHN0cmxlbihhcmd2W2FjdHJdKTsKLQkJKmNwKysgPSAnICc7Ci0JCWFjdHIrKzsKLQl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgewotCQkvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JCSpjcCA9ICdcMCc7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYXJndltpXSwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlpZiAoaSA8IChhcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQogfQogCiBzdHJ1Y3QgcHNibF9yZWMgewotCXUzMiBwc2JsX3NpemU7Ci0JdTMyIGVudl9iYXNlOwotCXUzMiBlbnZfc2l6ZTsKLQl1MzIgZmZzX2Jhc2U7Ci0JdTMyIGZmc19zaXplOworCXUzMglwc2JsX3NpemU7CisJdTMyCWVudl9iYXNlOworCXUzMgllbnZfc2l6ZTsKKwl1MzIJZmZzX2Jhc2U7CisJdTMyCWZmc19zaXplOwogfTsKIAogc3RhdGljIF9faW5pdGRhdGEgY2hhciBwc3BfZW52X3ZlcnNpb25bXSA9ICJUSUVOVjAuOCI7CiAKIHN0cnVjdCBwc3BfZW52X2NodW5rIHsKLQl1OCBudW07Ci0JdTggY3RybDsKLQl1MTYgY3N1bTsKLQl1OCBsZW47Ci0JY2hhciBkYXRhWzExXTsKKwl1OAludW07CisJdTgJY3RybDsKKwl1MTYJY3N1bTsKKwl1OAlsZW47CisJY2hhcglkYXRhWzExXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcHNwX3Zhcl9tYXBfZW50cnkgewotCXU4IG51bTsKLQljaGFyICp2YWx1ZTsKKwl1OAludW07CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBzcF92YXJfbWFwX2VudHJ5IHBzcF92YXJfbWFwW10gPSB7Ci0JeyAxLCAiY3B1ZnJlcXVlbmN5IiB9LAotCXsgMiwgIm1lbXNpemUiIH0sCi0JeyAzLCAiZmxhc2hzaXplIiB9LAotCXsgNCwgIm1vZGV0dHkwIiB9LAotCXsgNSwgIm1vZGV0dHkxIiB9LAotCXsgOCwgIm1hY2EiIH0sCi0JeyA5LCAibWFjYiIgfSwKLQl7IDI4LCAic3lzZnJlcXVlbmN5IiB9LAotCXsgMzgsICJtaXBzZnJlcXVlbmN5IiB9LAorCXsgIDEsCSJjcHVmcmVxdWVuY3kiIH0sCisJeyAgMiwJIm1lbXNpemUiIH0sCisJeyAgMywJImZsYXNoc2l6ZSIgfSwKKwl7ICA0LAkibW9kZXR0eTAiIH0sCisJeyAgNSwJIm1vZGV0dHkxIiB9LAorCXsgIDgsCSJtYWNhIiB9LAorCXsgIDksCSJtYWNiIiB9LAorCXsgMjgsCSJzeXNmcmVxdWVuY3kiIH0sCisJeyAzOCwJIm1pcHNmcmVxdWVuY3kiIH0sCiB9OwogCiAvKgpAQCAtMTU0LDYgKzE0MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYWRkX2FkYW0yX3ZhcihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRU5UUlk7IGkrKykgewogCQlpZiAoIWFkYW0yX2VudltpXS5uYW1lKSB7CiAJCQlhZGFtMl9lbnZbaV0ubmFtZSA9IG5hbWU7CkBAIC0yMTYsNyArMjAzLDcgQEAKIAljaGFyIHBhcml0eSA9ICdcMCcsIGJpdHMgPSAnXDAnLCBmbG93ID0gJ1wwJzsKIAljaGFyICpzLCAqcDsKIAotCWlmIChzdHJzdHIocHJvbV9nZXRjbWRsaW5lKCksICJjb25zb2xlPSIpKQorCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiY29uc29sZT0iKSkKIAkJcmV0dXJuOwogCiAJcyA9IHByb21fZ2V0ZW52KCJtb2RldHR5MCIpOwpAQCAtMjUwLDcgKzIzNyw3IEBACiAJZWxzZQogCQlzcHJpbnRmKGNvbnNvbGVfc3RyaW5nLCAiIGNvbnNvbGU9dHR5UzAsJWQlYyVjIiwgYmF1ZCwgcGFyaXR5LAogCQkJYml0cyk7Ci0Jc3RyY2F0KHByb21fZ2V0Y21kbGluZSgpLCBjb25zb2xlX3N0cmluZyk7CisJc3RybGNhdChhcmNzX2NtZGxpbmUsIGNvbnNvbGVfc3RyaW5nLCBDT01NQU5EX0xJTkVfU0laRSk7CiAjZW5kaWYKIH0KIApAQCAtMjc5LDQgKzI2NiwzIEBACiAJc2VyaWFsX291dChVQVJUX1RYLCBjKTsKIAlyZXR1cm4gMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9zZXR1cC5jIGIvYXJjaC9taXBzL2FyNy9zZXR1cC5jCmluZGV4IDM5ZjZiNWIuLjNhODAxZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXI3L3NldHVwLmMKQEAgLTI2LDggKzI2LDggQEAKIAogc3RhdGljIHZvaWQgYXI3X21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQogewotCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsKLQkJCQkJICBBUjdfUkVTRVRfU09GVFdBUkUsIDEpOworCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsgQVI3X1JFU0VUX1NPRlRXQVJFLCAxKTsKKwogCXdyaXRlbCgxLCBzb2Z0cmVzX3JlZyk7CiB9CiAKQEAgLTQxLDYgKzQxLDcgQEAKIHsKIAl1MzIgKnBvd2VyX3JlZyA9ICh1MzIgKilpb3JlbWFwKEFSN19SRUdTX1BPV0VSLCAxKTsKIAl1MzIgcG93ZXJfc3RhdGUgPSByZWFkbChwb3dlcl9yZWcpIHwgKDMgPDwgMzApOworCiAJd3JpdGVsKHBvd2VyX3N0YXRlLCBwb3dlcl9yZWcpOwogCWFyN19tYWNoaW5lX2hhbHQoKTsKIH0KQEAgLTQ5LDE0ICs1MCwxNCBAQAogewogCXUxNiBjaGlwX2lkID0gYXI3X2NoaXBfaWQoKTsKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAljYXNlIEFSN19DSElQXzcxMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcxMDApIjsKIAljYXNlIEFSN19DSElQXzcyMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcyMDApIjsKKwljYXNlIEFSN19DSElQXzczMDA6CisJCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gIlRJIEFSNyAoVW5rbm93bikiOworCQlyZXR1cm4gIlRJIEFSNyAodW5rbm93bikiOwogCX0KIH0KIApAQCAtNzAsNyArNzEsNiBAQAogICogSW5pdGlhbGl6ZXMgYmFzaWMgcm91dGluZXMgYW5kIHN0cnVjdHVyZXMgcG9pbnRlcnMsIG1lbW9yeSBzaXplIChhcwogICogZ2l2ZW4gYnkgdGhlIGJpb3MgYW5kIHNhdmVzIHRoZSBjb21tYW5kIGxpbmUuCiAgKi8KLQogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CkBAIC04OCw2ICs4OCw1IEBACiAJcHJvbV9tZW1pbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcywgSUQ6IDB4JTA0eCwgUmV2aXNpb246IDB4JTAyeFxuIiwKLQkJCQkJZ2V0X3N5c3RlbV90eXBlKCksCi0JCWFyN19jaGlwX2lkKCksIGFyN19jaGlwX3JldigpKTsKKwkJCWdldF9zeXN0ZW1fdHlwZSgpLCBhcjdfY2hpcF9pZCgpLCBhcjdfY2hpcF9yZXYoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3RpbWUuYyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCmluZGV4IGExZmJhODkuLjVmYjhhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCkBAIC0yMCwxMSArMjAsMjEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKLQltaXBzX2hwdF9mcmVxdWVuY3kgPSBhcjdfY3B1X2ZyZXEoKSAvIDI7CisJc3RydWN0IGNsayAqY3B1X2NsazsKKworCWNwdV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJjcHUiKTsKKwlpZiAoSVNfRVJSKGNwdV9jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdldCBjcHUgY2xvY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJbWlwc19ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKGNwdV9jbGspIC8gMjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYyBiL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYwppbmRleCA5Yjc5ODgwLi5lNGE1ZWU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCkBAIC01OSw0ICs1OSwzIEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb190b19pcnEpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKaW5kZXggMjlkM2NiZi4uMGZhNjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwpAQCAtMTYzLDQgKzE2MywzIEBACiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKIHsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKaW5kZXggMmY1ODBmYS4uZDQ0MmUxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCkBAIC0xMjEsNCArMTIxLDMgQEAKIAlfbWFjaGluZV9oYWx0ID0gYmNtNDd4eF9tYWNoaW5lX2hhbHQ7CiAJcG1fcG93ZXJfb2ZmID0gYmNtNDd4eF9tYWNoaW5lX2hhbHQ7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwppbmRleCBlZjAwZTdmLi43NGQwNjk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCkBAIC0xNjQsNCArMTY0LDMgQEAKIH0KIAogbW9kdWxlX2luaXQod2d0NjM0dV9pbml0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCAxZmU0MTJjLi5lYTE3OTQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtODM2LDQgKzgzNiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYyBiL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMKaW5kZXggYmE1MjJiZC4uNWYxMTM1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8YmNtNjN4eF90aW1lci5oPgogI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyX3JlZ19sb2NrKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfZGF0YV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRpbWVyX3JlZ19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRpbWVyX2RhdGFfbG9jayk7CiBzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2NsazsKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9kYXRhIHsKQEAgLTMxLDIzICszMSwyMyBAQAogCXUzMiBzdGF0OwogCWludCBpOwogCi0Jc3Bpbl9sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmdGltZXJfcmVnX2xvY2spOwogCXN0YXQgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfSVJRU1RBVF9SRUcpOwogCWJjbV90aW1lcl93cml0ZWwoc3RhdCwgVElNRVJfSVJRU1RBVF9SRUcpOwotCXNwaW5fdW5sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQkNNNjNYWF9USU1FUl9DT1VOVDsgaSsrKSB7CiAJCWlmICghKHN0YXQgJiBUSU1FUl9JUlFTVEFUX1RJTUVSX0NBVVNFKGkpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmdGltZXJfZGF0YV9sb2NrKTsKIAkJaWYgKCF0aW1lcl9kYXRhW2ldLmNiKSB7Ci0JCQlzcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdGltZXJfZGF0YVtpXS5jYih0aW1lcl9kYXRhW2ldLmRhdGEpOwotCQlzcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTYxLDcgKzYxLDcgQEAKIAlpZiAoaWQgPj0gQkNNNjNYWF9USU1FUl9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAKIAlyZWcgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAlyZWcgfD0gVElNRVJfQ1RMX0VOQUJMRV9NQVNLOwpAQCAtNzEsNyArNzEsNyBAQAogCXJlZyB8PSBUSU1FUl9JUlFTVEFUX1RJTUVSX0lSX0VOKGlkKTsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfSVJRU1RBVF9SRUcpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODUsNyArODUsNyBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCXJlZyAmPSB+VElNRVJfQ1RMX0VOQUJMRV9NQVNLOwpAQCAtOTUsNyArOTUsNyBAQAogCXJlZyAmPSB+VElNRVJfSVJRU1RBVF9USU1FUl9JUl9FTihpZCk7CiAJYmNtX3RpbWVyX3dyaXRlbChyZWcsIFRJTUVSX0lSUVNUQVRfUkVHKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IDA7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVyX2RhdGFbaWRdLmNiKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAl0aW1lcl9kYXRhW2lkXS5kYXRhID0gZGF0YTsKIAogb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzMsOSArMTMzLDkgQEAKIAlpZiAoaWQgPj0gQkNNNjNYWF9USU1FUl9DT1VOVCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiAJdGltZXJfZGF0YVtpZF0uY2IgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChiY202M3h4X3RpbWVyX3VucmVnaXN0ZXIpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJaWYgKGNvdW50ZG93biAmIH5USU1FUl9DVExfQ09VTlRET1dOX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCiAJaWYgKG1vbm90b25pYykKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXJlZyB8PSBjb3VudGRvd247CiAJYmNtX3RpbWVyX3dyaXRlbChyZWcsIFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA5ZGY5MDNkLi43OTBkZGQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAjIG1vZGlmaWVkIGJ5IENvcnQgKGNvcnRAY3Mubm10LmVkdSkKICMKICMgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eQotIyBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisjIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogIwogCiAjIGNvbXByZXNzZWQga2VybmVsIGxvYWQgYWRkcjogVk1MSU5VWl9MT0FEX0FERFJFU1MgPiBWTUxJTlVYX0xPQURfQUREUkVTUyArIFZNTElOVVhfU0laRQpAQCAtMjcsMTUgKzI3LDE4IEBACiBLQlVJTERfQ0ZMQUdTIDo9ICQoc2hlbGwgZWNobyAkKEtCVUlMRF9DRkxBR1MpIHwgc2VkIC1lICJzLy1wZy8vIikKIAogS0JVSUxEX0NGTEFHUyA6PSAkKExJTlVYSU5DTFVERSkgJChLQlVJTERfQ0ZMQUdTKSAtRF9fS0VSTkVMX18gXAotCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgLUQiVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMPSQoVk1MSU5VWF9MT0FEX0FERFJFU1MpdWxsIiBcCisJLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKSAtRCJWTUxJTlVYX0xPQURfQUREUkVTU19VTEw9JChWTUxJTlVYX0xPQURfQUREUkVTUyl1bGwiCiAKIEtCVUlMRF9BRkxBR1MgOj0gJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0FGTEFHUykgLURfX0FTU0VNQkxZX18gXAotCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkgXAotCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIFwKKwktREtFUk5FTF9FTlRSWT0weCQoc2hlbGwgJChOTSkgJChvYmp0cmVlKS8kKEtCVUlMRF9JTUFHRSkgMj4vZGV2L251bGwgfCBncmVwICIga2VybmVsX2VudHJ5IiB8IGN1dCAtZjEgLWQgXCApCiAKIG9iai15IDo9ICQob2JqKS9oZWFkLm8gJChvYmopL2RlY29tcHJlc3MubyAkKG9iaikvZGJnLm8KIAoraWZkZWYgQ09ORklHX0RFQlVHX1pCT09UCiBvYmotJChDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCkgKz0gJChvYmopL3VhcnQtMTY1NTAubworb2JqLSQoQ09ORklHX01BQ0hfQUxDSEVNWSkJCSAgICs9ICQob2JqKS91YXJ0LWFsY2hlbXkubworZW5kaWYKIAogT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkgLVIgLmNvbW1lbnQgLVMKICQob2JqKS92bWxpbnV4LmJpbjogJChLQlVJTERfSU1BR0UpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwppbmRleCBmZjRkYzdhLi4xMzRhNjE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKQEAgLTUsMTEgKzUsMTEgQEAKICAqIHBsZWFzZSBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBtYWNoaW5lLiBvdGhld2lzZSwgeW91CiAgKiBuZWVkIHRvIGltcGxlbWVudCB5b3VyIG93biBwdXRjKCkuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBwdXRjKGNoYXIgYykKK3ZvaWQgX193ZWFrIHB1dGMoY2hhciBjKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCmluZGV4IDU1ZDAyYjMuLjVkYjQzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC01LDggKzUsOCBAQAogICogQXV0aG9yOiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPiBEZXJpdmVkIGZyb20KICAqIGFyY2gvcHBjL2Jvb3QvcHJlcC9taXNjLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmZjIyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCit2b2lkIHB1dGMoY2hhciBjKQoreworCS8qIGFsbCBjdXJyZW50IChKYW4uIDIwMTApIGluLWtlcm5lbCBib2FyZHMgKi8KKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCmluZGV4IDRiOTJiZmMuLmJlNTMxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKQEAgLTQxLDcgKzQxLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhcjFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiYXIxX2xvY2spOwogc3RhdGljIHN0cnVjdCBiYXIxX2luZGV4X3N0YXRlIGJhcjFfc3RhdGVbMzJdOwogI2VuZGlmCiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQlzdGFydF9pbmRleCA9IDMxOwogCiAJLyogT25seSBvbmUgcHJvY2Vzc29yIGNhbiBhY2Nlc3MgdGhlIEJhciByZWdpc3RlciBhdCBvbmNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBMb29rIHRocm91Z2ggQmFyMSBmb3IgZXhpc3RpbmcgbWFwcGluZyB0aGF0IHdpbGwgd29yayAqLwogCWZvciAoaW5kZXggPSBzdGFydF9pbmRleDsgaW5kZXggPj0gMDsgaW5kZXgtLSkgewpAQCAtMjUwLDcgKzI1MCw3IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNpY2FsKTsKIAogZG9uZV91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogZG9uZToKIAlwcl9kZWJ1ZygiZG1hX21hcF9zaW5nbGUgMHglbGx4LT4weCVsbHhcbiIsIHBoeXNpY2FsLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CkBAIC0zMjQsMTQgKzMyNCwxNCBAQAogCQkgICAgICAiQXR0ZW1wdCB0byB1bm1hcCBhbiBpbnZhbGlkIGFkZHJlc3MgKDB4JWxseClcbiIsCiAJCSAgICAgIGRtYV9hZGRyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiYXIxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogCWJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudC0tOwogCWlmIChiYXIxX3N0YXRlW2luZGV4XS5yZWZfY291bnQgPT0gMCkKIAkJb2N0ZW9uX25waV93cml0ZTMyKENWTVhfTlBJX1BDSV9CQVIxX0lOREVYWChpbmRleCksIDApOwogCWVsc2UgaWYgKHVubGlrZWx5KGJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudCA8IDApKQogCQlwYW5pYygiZG1hX3VubWFwX3NpbmdsZTogQmFyMVsldV0gcmVmZXJlbmNlIGNvdW50IDwgMFxuIiwKIAkJICAgICAgKGludCkgaW5kZXgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXIxX2xvY2ssIGZsYWdzKTsKIGRvbmU6CiAJcHJfZGVidWcoImRtYV91bm1hcF9zaW5nbGUgMHglbGx4XG4iLCBkbWFfYWRkcik7CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCmluZGV4IDI1NjY2ZGExLi5mZGY1ZjE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAkgKiBpbXBvc3NpYmxlIHJlcXVlc3RzIHVwIGZyb250LiAoTk9QIGZvciBhZGRyZXNzX21pbiA9PSAwKQogCSAqLwogCWlmIChhbGlnbm1lbnQpCi0JCWFkZHJlc3NfbWluID0gX19BTElHTl9NQVNLKGFkZHJlc3NfbWluLCAoYWxpZ25tZW50IC0gMSkpOworCQlhZGRyZXNzX21pbiA9IEFMSUdOKGFkZHJlc3NfbWluLCBhbGlnbm1lbnQpOwogCiAJLyoKIAkgKiBSZWplY3QgaW5jb25zaXN0ZW50IGFyZ3MuICBXZSBoYXZlIGFkanVzdGVkIHRoZXNlLCBzbyB0aGlzCkBAIC0yOTEsNyArMjkxLDcgQEAKIAkJICogc2F0aXNmeSByZXF1ZXN0LgogCQkgKi8KIAkJdXNhYmxlX2Jhc2UgPQotCQkgICAgX19BTElHTl9NQVNLKG1heChhZGRyZXNzX21pbiwgZW50X2FkZHIpLCBhbGlnbm1lbnQgLSAxKTsKKwkJICAgIEFMSUdOKG1heChhZGRyZXNzX21pbiwgZW50X2FkZHIpLCBhbGlnbm1lbnQpOwogCQl1c2FibGVfbWF4ID0gbWluKGFkZHJlc3NfbWF4LCBlbnRfYWRkciArIGVudF9zaXplKTsKIAkJLyoKIAkJICogV2Ugc2hvdWxkIGJlIGFibGUgdG8gYWxsb2NhdGUgYmxvY2sgYXQgYWRkcmVzcwpAQCAtNjcxLDcgKzY3MSw3IEBACiAJICogY29hbGxlc2NlZCB3aGVuIHRoZXkgYXJlIGZyZWVkLiAgVGhlIGFsbG9jIHJvdXRpbmUgZG9lcyB0aGUKIAkgKiBzYW1lIHJvdW5kaW5nIHVwIG9uIGFsbCBhbGxvY2F0aW9ucy4KIAkgKi8KLQlzaXplID0gX19BTElHTl9NQVNLKHNpemUsIChDVk1YX0JPT1RNRU1fQUxJR05NRU5UX1NJWkUgLSAxKSk7CisJc2l6ZSA9IEFMSUdOKHNpemUsIENWTVhfQk9PVE1FTV9BTElHTk1FTlRfU0laRSk7CiAKIAlhZGRyX2FsbG9jYXRlZCA9IGN2bXhfYm9vdG1lbV9waHlfYWxsb2Moc2l6ZSwgbWluX2FkZHIsIG1heF9hZGRyLAogCQkJCQkJYWxpZ25tZW50LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jCmluZGV4IGU1ODM4ODkuLjhiMThhMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMKQEAgLTExNSw0ICsxMTUsMyBAQAogCiAJcmV0dXJuIDE7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwppbmRleCA2ZjJhY2YwLi5jNDI0Y2QxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCkBAIC0xMyw5ICsxMyw4IEBACiAjaW5jbHVkZSA8YXNtL29jdGVvbi9jdm14LXBleHAtZGVmcy5oPgogI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1ucGktZGVmcy5oPgogCi1ERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MF9yd2xvY2spOwotREVGSU5FX1JXTE9DSyhvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKLURFRklORV9TUElOTE9DSyhvY3Rlb25faXJxX21zaV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG9jdGVvbl9pcnFfY2l1MF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG9jdGVvbl9pcnFfY2l1MV9sb2NrKTsKIAogc3RhdGljIGludCBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoaW50IGNwdSkKIHsKQEAgLTUxLDkgKzUwLDYgQEAKIAkgKi8KIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKQogCQlyZXR1cm47Ci0KLQkvKiBUaGVyZSBpcyBhIHJhY2UgaGVyZS4gIFdlIHNob3VsZCBmaXggaXQuICAqLwotCiAJLyoKIAkgKiBXZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgSVJRcyB0byBtYWtlIHRoZXNlIGF0b21pYyBzaW5jZQogCSAqIHRoZXkgYXJlIGFscmVhZHkgZGlzYWJsZWQgZWFybGllciBpbiB0aGUgbG93IGxldmVsCkBAIC0xNDEsMTkgKzEzNywxMiBAQAogCXVpbnQ2NF90IGVuMDsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0JLyoKLQkgKiBBIHJlYWQgbG9jayBpcyB1c2VkIGhlcmUgdG8gbWFrZSBzdXJlIG9ubHkgb25lIGNvcmUgaXMgZXZlcgotCSAqIHVwZGF0aW5nIHRoZSBDSVUgZW5hYmxlIGJpdHMgYXQgYSB0aW1lLiBEdXJpbmcgYW4gZW5hYmxlCi0JICogdGhlIGNvcmVzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuIER1cmluZyBhIGRpc2FibGUKLQkgKiB0aGUgd3JpdGUgbG9jayBzdG9wcyBhbnkgZW5hYmxlcyB0aGF0IG1pZ2h0IGNhdXNlIGEKLQkgKiBwcm9ibGVtLgotCSAqLwotCXJlYWRfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCWVuMCB8PSAxdWxsIDw8IGJpdDsKIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSwgZW4wKTsKIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xNjIsNyArMTUxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMDsKIAlpbnQgY3B1OwotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwpAQCAtMTc0LDcgKzE2Myw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE5Myw3ICsxODIsNyBAQAogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKIAl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKQEAgLTIwMiw2ICsxOTEsNDMgQEAKIH0KIAogLyoKKyAqIENJVSB0aW1lciB0eXBlIGludGVycnVwdHMgbXVzdCBiZSBhY2tub2xlZ2VkIGJ5IHdyaXRpbmcgYSAnMScgYml0CisgKiB0byB0aGVpciBzdW0wIGJpdC4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXVpbnQ2NF90IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9TVU0wKGluZGV4KSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjEodW5zaWduZWQgaW50IGlycSkKK3sKKwlvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrKGlycSk7CisJb2N0ZW9uX2lycV9jaXUwX2FjayhpcnEpOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2FjayhpcnEpOworCW9jdGVvbl9pcnFfY2l1MF9hY2tfdjIoaXJxKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VvaV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxUyhpbmRleCksIG1hc2spOworfQorCisvKgogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBhbGwgY29yZXMgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwpAQCAtMjIzLDcgKzI0OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4wID0KQEAgLTIzOSw3ICsyNjUsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjdm14X2dldF9jb3JlX251bSgpICogMikpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3Miw4ICsyOTgsOCBAQAogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfYWxsX3YyLAotCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92MiwKLQkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaV92MiwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCiAjZW5kaWYKQEAgLTI5MCw2ICszMTYsMjggQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF90aW1lcl92MiA9IHsKKwkubmFtZSA9ICJDSVUwLVQiLAorCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyLAorCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfYWxsX3YyLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW9pX3YyLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eV92MiwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF90aW1lciA9IHsKKwkubmFtZSA9ICJDSVUwLVQiLAorCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLAorCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGUsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjEsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2ksCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5LAorI2VuZGlmCit9OworCiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTMyMiwxOSArMzcwLDEyIEBACiAJdWludDY0X3QgZW4xOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAotCS8qCi0JICogQSByZWFkIGxvY2sgaXMgdXNlZCBoZXJlIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBjb3JlIGlzIGV2ZXIKLQkgKiB1cGRhdGluZyB0aGUgQ0lVIGVuYWJsZSBiaXRzIGF0IGEgdGltZS4gIER1cmluZyBhbiBlbmFibGUKLQkgKiB0aGUgY29yZXMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci4gIER1cmluZyBhIGRpc2FibGUKLQkgKiB0aGUgd3JpdGUgbG9jayBzdG9wcyBhbnkgZW5hYmxlcyB0aGF0IG1pZ2h0IGNhdXNlIGEKLQkgKiBwcm9ibGVtLgotCSAqLwotCXJlYWRfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKIAllbjEgfD0gMXVsbCA8PCBiaXQ7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpLCBlbjEpOwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCkBAIC0zNDMsNyArMzg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMTsKIAlpbnQgY3B1OwotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKQEAgLTM1NSw3ICszOTYsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjdm14X2dldF9jb3JlX251bSgpICogMiArIDEpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMzc0LDcgKzQxNSw3IEBACiAgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQogICogcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Fja192Mih1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKIAl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOwpAQCAtMzgzLDYgKzQyNCwyMCBAQAogfQogCiAvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZW9pX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgPT0gMCkKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCiAgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQogICogcmVnaXN0ZXJzLgogICovCkBAIC00MDUsNyArNDYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMSA9CkBAIC00MjIsNyArNDc3LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU1LDggKzUxMCw4IEBACiAJLm5hbWUgPSAiQ0lVMCIsCiAJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCiAJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyLAotCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTFfYWNrX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW9pX3YyLAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92MiwKICNlbmRpZgpAQCAtNDc1LDYgKzUzMCw4IEBACiAKICNpZmRlZiBDT05GSUdfUENJX01TSQogCitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX21zaV9sb2NrKTsKKwogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9tc2lfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaWYgKCFvY3Rlb25faGFzX2ZlYXR1cmUoT0NURU9OX0ZFQVRVUkVfUENJRSkpIHsKQEAgLTUxNSwxMiArNTcyLDEyIEBACiAJCSAqLwogCQl1aW50NjRfdCBlbjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJCWVuID0gY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7CiAJCWVuIHw9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfTVNJX0JJVDApOwogCQljdm14X3dyaXRlX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCwgZW4pOwogCQljdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNTM3LDEyICs1OTQsMTIgQEAKIAkJICovCiAJCXVpbnQ2NF90IGVuOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAkJZW4gPSBjdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKIAkJZW4gJj0gfigxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKSk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwLCBlbik7CiAJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC01NTksNiArNjE2LDcgQEAKIHsKIAlpbnQgaXJxOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDA7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMF90aW1lcjsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAxOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNTc0LDkgKzYzMiwxMSBAQAogCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMl9YKSB8fAogCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMl9YKSkgewogCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF92MjsKKwkJY2hpcDBfdGltZXIgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXJfdjI7CiAJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxX3YyOwogCX0gZWxzZSB7CiAJCWNoaXAwID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwOworCQljaGlwMF90aW1lciA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF90aW1lcjsKIAkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTE7CiAJfQogCkBAIC01OTAsNyArNjUwLDIxIEBACiAKIAkvKiAyNCAtIDg3IENJVV9JTlRfU1VNMCAqLwogCWZvciAoaXJxID0gT0NURU9OX0lSUV9XT1JLUTA7IGlycSA8PSBPQ1RFT05fSVJRX0JPT1RETUE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXN3aXRjaCAoaXJxKSB7CisJCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMDoKKwkJY2FzZSBPQ1RFT05fSVJRX0dNWF9EUlAxOgorCQljYXNlIE9DVEVPTl9JUlFfSVBEX0RSUDoKKwkJY2FzZSBPQ1RFT05fSVJRX0tFWV9aRVJPOgorCQljYXNlIE9DVEVPTl9JUlFfVElNRVIwOgorCQljYXNlIE9DVEVPTl9JUlFfVElNRVIxOgorCQljYXNlIE9DVEVPTl9JUlFfVElNRVIyOgorCQljYXNlIE9DVEVPTl9JUlFfVElNRVIzOgorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDBfdGltZXIsIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDAsIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCmluZGV4IGNmZGI0YzIuLjYyYWMzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCkBAIC0xNTksNiArMTYwLDkwIEBACiB9CiBkZXZpY2VfaW5pdGNhbGwob2N0ZW9uX3JuZ19kZXZpY2VfaW5pdCk7CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBvY3Rlb25faTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJkczEzMzciLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19kZXZpY2VzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgb2N0ZW9uX2kyY19kZXZpY2VzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKG9jdGVvbl9pMmNfZGV2aWNlcykpOworfQorYXJjaF9pbml0Y2FsbChvY3Rlb25faTJjX2RldmljZXNfaW5pdCk7CisKKyNkZWZpbmUgT0NURU9OX0kyQ19JT19CQVNFIDB4MTE4MDAwMDAwMTAwMHVsbAorI2RlZmluZSBPQ1RFT05fSTJDX0lPX1VOSVRfT0ZGU0VUIDB4MjAwCisKK3N0YXRpYyBzdHJ1Y3Qgb2N0ZW9uX2kyY19kYXRhIG9jdGVvbl9pMmNfZGF0YVsyXTsKKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19kZXZpY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCWludCByZXQgPSAwOworCWludCBwb3J0LCBudW1fcG9ydHM7CisKKwlzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdID0geworCQl7CisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCX0KKwl9OworCisJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKSB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCkpCisJCW51bV9wb3J0cyA9IDI7CisJZWxzZQorCQludW1fcG9ydHMgPSAxOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IG51bV9wb3J0czsgcG9ydCsrKSB7CisJCW9jdGVvbl9pMmNfZGF0YVtwb3J0XS5zeXNfZnJlcSA9IG9jdGVvbl9nZXRfY2xvY2tfcmF0ZSgpOworCQkvKkZJWE1FOiBzaG91bGQgYmUgZXhhbWluZWQuIEF0IHRoZSBtb21lbnQgaXMgc2V0IGZvciAxMDBLaHogKi8KKwkJb2N0ZW9uX2kyY19kYXRhW3BvcnRdLmkyY19mcmVxID0gMTAwMDAwOworCisJCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJpMmMtb2N0ZW9uIiwgcG9ydCk7CisJCWlmICghcGQpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXBkLT5kZXYucGxhdGZvcm1fZGF0YSA9IG9jdGVvbl9pMmNfZGF0YSArIHBvcnQ7CisKKwkJaTJjX3Jlc291cmNlc1swXS5zdGFydCA9CisJCQlPQ1RFT05fSTJDX0lPX0JBU0UgKyAocG9ydCAqIE9DVEVPTl9JMkNfSU9fVU5JVF9PRkZTRVQpOworCQlpMmNfcmVzb3VyY2VzWzBdLmVuZCA9IGkyY19yZXNvdXJjZXNbMF0uc3RhcnQgKyAweDFmOworCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSAwOgorCQkJaTJjX3Jlc291cmNlc1sxXS5zdGFydCA9IE9DVEVPTl9JUlFfVFdTSTsKKwkJCWkyY19yZXNvdXJjZXNbMV0uZW5kID0gT0NURU9OX0lSUV9UV1NJOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWkyY19yZXNvdXJjZXNbMV0uc3RhcnQgPSBPQ1RFT05fSVJRX1RXU0kyOworCQkJaTJjX3Jlc291cmNlc1sxXS5lbmQgPSBPQ1RFT05fSVJRX1RXU0kyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkLAorCQkJCQkJICAgIGkyY19yZXNvdXJjZXMsCisJCQkJCQkgICAgQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybiByZXQ7CitmYWlsOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwob2N0ZW9uX2kyY19kZXZpY2VfaW5pdCk7CisKIC8qIE9jdGVvbiBTTUkvTURJTyBpbnRlcmZhY2UuICAqLwogc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX21kaW9idXNfZGV2aWNlX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKaW5kZXggYzE5OGVmZC4uNTFlOTgwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCQkJCSAgIGF2YWlsX2NvcmVtYXNrKTsKIAl9CiAKLQlwcl9pbmZvKCJSZXNldCBjb3JlICVkLiBBdmFpbGFibGUgQ29yZW1hc2sgPSAleCBcbiIsIGNvcmVpZCwKKwlwcl9pbmZvKCJSZXNldCBjb3JlICVkLiBBdmFpbGFibGUgQ29yZW1hc2sgPSAleFxuIiwgY29yZWlkLAogCQlhdmFpbF9jb3JlbWFzayk7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUlNULCAxIDw8IGNvcmVpZCk7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUlNULCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMgYi9hcmNoL21pcHMvY29iYWx0L3BjaS5jCmluZGV4IGNmY2U3YWYuLjg1ZWM5Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9wY2kuYwpAQCAtMjUsNyArMjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvYmFsdF9pb19yZXNvdXJjZSA9IHsKIAkuc3RhcnQJPSAweDEwMDAsCi0JLmVuZAk9IEdUX0RFRl9QQ0kwX0lPX1NJWkUgLSAxLAorCS5lbmQJPSAweGZmZmZmZlVMLAogCS5uYW1lCT0gIlBDSSBJL08iLAogCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKaW5kZXggNjhlOTBjZC4uZjY2ZDQwNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCkBAIC0xLDc4ICsxLDEwMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjQgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NDY6MTQgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjEwMDA9eQotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxMDAwPXkKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTAwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTEwMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04NSw2ICsxMDksNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTIsMTEgKzExNywxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNiwxODQgKzEzNCwyNDQgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxMDAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMjk0LDExMCArMzgyLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MDcsMjcgKzQxMCwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MzYsMjUgKzQzNiwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDY3LDYgKzQ2Nyw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDkyLDE0ICs0OTMsMTMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MTYsMTc0ICs1MTYsMTE1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVF9QQ01DSUE9eQotQ09ORklHX1BDTUNJQV8zQzU4OT1tCi1DT05GSUdfUENNQ0lBXzNDNTc0PW0KLUNPTkZJR19QQ01DSUFfRk1WSjE4WD1tCi1DT05GSUdfUENNQ0lBX1BDTkVUPW0KLUNPTkZJR19QQ01DSUFfTk1DTEFOPW0KLUNPTkZJR19QQ01DSUFfU01DOTFDOTI9bQotQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KLUNPTkZJR19QQ01DSUFfQVhORVQ9bQotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTY5MSwxNiArNjMyLDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03MTAsMzUgKzY0OSwzMyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX0NTPW0KKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03NTAsMTk4ICs2ODcsMjkxIEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIEhJRCBEZXZpY2VzCisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgTEVEIFRyaWdnZXJzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBUSSBWTFlOUQogIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk2MCw3NCArOTkwLDY1IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDEwICsxMDY2LDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTA1OCwzOCArMTA3OSw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDk3LDY3ICsxMTU1LDI5IEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDkwODEyODMuLmFiYjlhNTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjUwOjE1IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxMTAwPXkKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTEwMD15CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTExMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTczICsxMzQsMjQyIEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTEwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjIFBDLWNhcmQgYnJpZGdlcwogIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMjgzLDExMCArMzgwLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zOTYsMjcgKzQwOCwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjUsMjUgKzQzNCwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ1Niw2ICs0NjUsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ4MSwxNCArNDkxLDEzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTA1LDE2MSArNTE0LDEyMyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CiAKICMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCi0jIEJsb2NrIGRldmljZXMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTY2NywxNiArNjM4LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC02ODYsMzQgKzY1NSwzMyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9bQotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTcyNSw3OCArNjkzLDkxIEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVTExMDA9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTgwNCw5ICs3ODUsMTAgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfOHg4PXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4MTY9eQogIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CkBAIC04MTYsMTMyICs3OTgsMTg2IEBACiAjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBISUQgRGV2aWNlcwotIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIworIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgTEVEIFRyaWdnZXJzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBUSSBWTFlOUQogIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05NjAsNjkgKzk5Niw3NiBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKK0NPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldApAQCAtMTA2MiwzNCArMTEwNSw3MSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDk3LDY3ICsxMTc3LDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IGRhYmYwMzAuLjk5MWMyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI1IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDEwOjE4OjA5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxMjAwPXkKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTIwMD15CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTEyMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMjAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTgwICsxMzQsMjM1IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0tTTT15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjEyMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCi1DT05GSUdfUENNQ0lBX0FVMVgwMD1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5MCwxMDcgKzM3MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MDAsMjEgKzQwMSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjMsMjUgKzQyNywyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NTQsNiArNDU4LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00NzksMTkgKzQ4NCwyMSBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTAzLDIyNCArNTEwLDEzNCBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKICMgQ09ORklHX01URF9OQU5EX0FVMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorIyBDT05GSUdfSURFX1BST0NfRlMgaXMgbm90IHNldAogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFg9eQogQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUE9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfU0VRVFNfUEVSX1JRPTEyOAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNzI4LDE2ICs2NDUsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTc0NywyOCArNjYyLDI2IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9eQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzc2LDMzICs2ODksMjIgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDA9eQogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCkBAIC04MTEsMjIzICs3MTMsNjI0IEBACiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0FVMTU1MD15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVUxNTUwPXkKK0NPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKK0NPTkZJR19IV01PTl9WSUQ9eQorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjIE5hdGl2ZSBkcml2ZXJzCiAjCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQURNMTAyNT15CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNNzA9eQorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVTEyMDA9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBISUQgRGV2aWNlcwotIworQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDX0kyUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDX0FDOTc9eQorQ09ORklHX1NORF9TT0NfREIxMjAwPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfU09DX1dNODczMT15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURSQVc9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKLUNPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgVVNCIEltYWdpbmcgZGV2aWNlcwogIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0FVMVg9eQorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIExFRCBkZXZpY2VzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FVMVg9eQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKIAogIwogIyBMRUQgZHJpdmVycwogIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKICMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKICMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBJMkMgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBTUEkgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRGV2aWNlcworIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGU19GUz15Ci0jIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfRlM9eQogQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDM2LDIxICsxMzM5LDE3IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNTksMjcgKzEzNTgsMzYgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQogIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CiBDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKIENPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CkBAIC0xMDg3LDkzICsxMzk1LDE0MCBAQAogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPXkKLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KLUNPTkZJR19OTFNfSVNPODg1OV84PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQotQ09ORklHX05MU19BU0NJST1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTM9bQotQ09ORklHX05MU19JU084ODU5XzE0PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xNT1tCi1DT05GSUdfTkxTX0tPSThfUj1tCi1DT05GSUdfTkxTX0tPSThfVT1tCi1DT05GSUdfTkxTX1VURjg9bQotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ01ETElORV9CT09MPXkKLUNPTkZJR19DTURMSU5FPSJtZW09NDhNIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIgogIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE4MSw2NyArMTUzNiwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX0hNQUM9bQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IGExNTEzMTMuLjU0MjRjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw4MCArMSwxMDQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI2IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjQ2OjMzIDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxNTAwPXkKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTUwMD15CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTE1MDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg3LDYgKzExMSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05NCwxMSArMTE5LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA4LDEzNyArMTM2LDIwNyBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxNTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwpAQCAtMjQ2LDUxICszNDQsNDkgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDEsMTEwICszOTcsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxNCwyNyArNDI1LDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MywyNSArNDUxLDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NzQsNiArNDgyLDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTksMTQgKzUwOCwxNCBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI0LDE1MiArNTMzLDE1MiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKICMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNjc3LDg4ICs2ODYsNTEgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CiAKICMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY2LDE2ICs3MzgsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTc4NSwzMyArNzU1LDM0IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtODI1LDMwMSArNzk2LDE0MyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCitDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwotQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCi1DT05GSUdfU05EX1NFUVVFTkNFUj1tCi1DT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotQ09ORklHX1NORF9WSVJNSURJPW0KLUNPTkZJR19TTkRfTVRQQVY9bQotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIE1JUFMgZGV2aWNlcwotIwotQ09ORklHX1NORF9BVTFYMDA9bQotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIFNvQyBhdWRpbyBzdXBwb3J0Ci0jCi0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX09CU09MRVRFX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9JQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9bQotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfWUVBTElOSz1tCi0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKLQotIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjgsNyArOTQxLDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTEzNiwxMTIgKzk0OSwxMDcgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0xEPW0KKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTI2MCw3NCArMTA2OCw4MSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKK0NPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKQEAgLTEzNDUsMTAgKzExNjAsMTAgQEAKICMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTEzNTgsMzggKzExNzMsNzYgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTM5Nyw2NyArMTI1MCwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwppbmRleCA2YjY0MzM5Li45NDliNmRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKQEAgLTEsNzkgKzEsMTAzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo1ODoyMiAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTU1MD15Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjE1NTA9eQorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTUwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTU1MD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MywxMSArMTE4LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA3LDEzNyArMTM1LDIwNSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxNTUwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSREJVUyBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCkBAIC0yNDUsNTEgKzM0MSw0OSBAQAogIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAogIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBX0FVMVgwMD1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMCwxMTAgKzM5NCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDEzLDI3ICs0MjIsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQyLDI1ICs0NDgsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDczLDYgKzQ3OSw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk4LDIwICs1MDUsMjMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01MjMsMTA1ICs1MzMsOTYgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX01URF9OQU5EPW0KK0NPTkZJR19NVERfTkFORD15CiAjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPW0KLUNPTkZJR19NVERfTkFORF9BVTE1NTA9bQorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9BVTE1NTA9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLSMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSFBUMzY2PXkKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSVQ4MjEzPW0KKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC02MzEsODIgKzYzMiw2NSBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCi0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CkBAIC03MTQsOTYgKzY5OCw1MyBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfUUxBM1hYWD1tCi0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDM9bQotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPW0KLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CiAKICMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtODExLDE2ICs3NTIsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTgzMCwyNiArNzY5LDI3IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTg2NiwxOTkgKzgwNiw0MjAgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKIAogIwotIyBJMkMgc3VwcG9ydAorIyBJMkMgQWxnb3JpdGhtcwogIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCiAjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVTE1NTA9eQorQ09ORklHX1NQSV9CSVRCQU5HPXkKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0M9eQorIyBDT05GSUdfU05EX1NPQ19EQjEyMDAgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCiAjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgSTJDIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIERldmljZXMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIyBUSSBWTFlOUQogIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEwNzcsNzUgKzEyMzgsODIgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfQ09ORklHRlNfRlM9eQorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorIyBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE2MiwxMCArMTMzMCwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE3NSwzOCArMTM0Myw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjE0LDY3ICsxNDE5LDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwppbmRleCBiNzFhMGE0Li40Y2FhMGUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgotIyBNb24gTm92ICA5IDIzOjQyOjQyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzo0MTowOSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTI3LDYgKzI3LDcgQEAKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldApAQCAtNTEsNiArNTIsOSBAQAogIyBDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSBpcyBub3Qgc2V0CiBDT05GSUdfTEVNT1RFX01BQ0gyRj15CiBDT05GSUdfQ1M1NTM2PXkKK0NPTkZJR19DUzU1MzZfTUZHUFQ9eQorQ09ORklHX0xPT05HU09OX1NVU1BFTkQ9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKQEAgLTYzLDEzICs2Nyw4IEBACiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX0NFVlRfUjRLX0xJQj15Ci1DT05GSUdfQ0VWVF9SNEs9eQotQ09ORklHX0NTUkNfUjRLX0xJQj15Ci1DT05GSUdfQ1NSQ19SNEs9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfSTgyNTk9eQogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKQEAgLTEwOSwxMyArMTA4LDE1IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQotQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTA9eQogQ09ORklHX0NQVV9MT09OR1NPTjI9eQogQ09ORklHX1NZU19IQVNfQ1BVX0xPT05HU09OMkY9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU19DUFVGUkVRPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRz15CitDT05GSUdfQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVEPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTM3LDcgKzEzOCw2IEBACiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfSElHSE1FTT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTQ2LDE3ICsxNDYsMTEgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotCi0jCi0jIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCi0jCiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0xNzUsNyArMTY5LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMTk0LDkgKzE4OCw5IEBACiBDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CiBDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQogQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9HWklQPXkKICMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci1DT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTIxMSw2ICsyMDUsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTY0CiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTIyNCw3ICsyMTksMTEgQEAKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtMjU2LDE0ICsyNTUsMTggQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQorIyBDT05GSUdfU0xPV19XT1JLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yODMsMTQgKzI4Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPW0KIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0zMTQsNyArMzQ0LDcgQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQpAQCAtMzM1LDkgKzM2NSwzNCBAQAogQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049Ii9kZXYvaGRhMyIKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX01JUFNfRVhURVJOQUxfVElNRVI9eQorQ09ORklHX01JUFNfQ1BVRlJFUT15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKK0NPTkZJR19DUFVfRlJFUV9ERUJVRz15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD1tCitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9bQorCisjCisjIENQVUZyZXEgcHJvY2Vzc29yIGRyaXZlcnMKKyMKK0NPTkZJR19MT09OR1NPTjJfQ1BVRlJFUT1tCiBDT05GSUdfTkVUPXkKLUNPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUz15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCkBAIC0zNDYsMTEgKzQwMSwxMiBAQAogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CkBAIC0zNjEsMTIgKzQxNywxMyBAQAogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CiAjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QgaXMgbm90IHNldAogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX0FSUEQ9eQogQ09ORklHX1NZTl9DT09LSUVTPXkKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldApAQCAtMzk5LDMwICs0NTYsMzQgQEAKICMgQ09ORklHX0RFRkFVTFRfV0VTVFdPT0QgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJiaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CisjIENPTkZJR19JUFY2X1JPVVRFX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBWNl9TVUJUUkVFUz15CiAjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTQ0NiwxNyArNTA3LDIyIEBACiAjCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAogIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPW0KK0NPTkZJR19CUklER0U9bQogIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldApAQCAtNTE4LDI2ICs1ODQsNjEgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJQlRVU0I9bQorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorQ09ORklHX0JUX0hDSUJGVVNCPW0KK0NPTkZJR19CVF9IQ0lWSENJPW0KKyMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorQ09ORklHX1dFWFRfQ09SRT15CitDT05GSUdfV0VYVF9QUk9DPXkKK0NPTkZJR19DRkc4MDIxMT1tCisjIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQorIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCitDT05GSUdfTElCODAyMTE9bQorQ09ORklHX0xJQjgwMjExX0RFQlVHPXkKK0NPTkZJR19NQUM4MDIxMT1tCisjIENPTkZJR19NQUM4MDIxMV9SQ19QSUQgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKIENPTkZJR19SRktJTEw9bQotIyBDT05GSUdfUkZLSUxMX0lOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTExfTEVEUz15CitDT05GSUdfUkZLSUxMX0lOUFVUPXkKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NSw3ICs2NTYsNyBAQAogQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CiBDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CkBAIC01NjYsNyArNjY3LDEyIEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01NzcsMTkgKzY4Myw3IEBACiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogCkBAIC02MTksOCArNzEzLDcgQEAKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15CiAjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKQEAgLTcwMCw3ICs3OTMsMjkgQEAKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ2X1BRPW0KKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9ERUJVRz15CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX0xPR19VU0VSU1BBQ0U9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fTVVMVElQQVRIX1FMPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfU1Q9bQorQ09ORklHX0RNX0RFTEFZPW0KK0NPTkZJR19ETV9VRVZFTlQ9eQogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtNzEyLDE5ICs4MjcsMTkgQEAKICMKIAogIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19JRkIgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1RVTj1tCitDT05GSUdfVkVUSD1tCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzM4LDYgKzg1Myw3IEBACiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldApAQCAtNzY5LDcgKzg4NSw3IEBACiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogQ09ORklHXzgxMzlUT089eQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSPXkKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CkBAIC03OTUsNiArOTExLDcgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKIENPTkZJR19SODE2OT15CitDT05GSUdfUjgxNjlfVkxBTj15CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKQEAgLTgxMCwxNSArOTI3LDMxIEBACiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotQ09ORklHX1dMQU5fUFJFODAyMTE9eQotIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NV0w4SyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04MzEsMTcgKzk2NCwzOSBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVVNCTkVUPW0KK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9bQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorQ09ORklHX1VTQl9ORVRfQ0RDX0VFTT1tCisjIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorIyBDT05GSUdfVVNCX0FMSV9NNTYzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU4yNzIwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQkVMS0lOPXkKK0NPTkZJR19VU0JfQVJNTElOVVg9eQorIyBDT05GSUdfVVNCX0VQU09OMjg4OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0MyMTkwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCiAjIENPTkZJR19VU0JfSFNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfSU5UNTFYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9bQorQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODQ5LDggKzEwMDQsOSBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCitDT05GSUdfSU5QVVRfUE9MTERFVj1tCisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04ODQsNyArMTA0MCw3IEBACiAjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KICMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CkBAIC05MDQsNiArMTA2MCw3IEBACiAjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkzNCw4ICsxMDkxLDcgQEAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTA9bQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xNgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtOTUzLDggKzExMDksNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPW0KICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldApAQCAtMTAzMywxNCArMTE4OCwxOCBAQAogIwogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKK0NPTkZJR19JUl9DT1JFPW0KK0NPTkZJR19WSURFT19JUj1tCiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1Y0TDI9bQogQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPQlVGX0dFTj1tCitDT05GSUdfVklERU9CVUZfVk1BTExPQz1tCiBDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKICMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKLSMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1ZJVkk9bQogIyBDT05GSUdfVklERU9fUE1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldApAQCAtMTA0OSw1MiArMTIwOCw1NSBAQAogQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCiBDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKIENPTkZJR19VU0JfR1NQQ0E9bQotIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTTU2MDI9bQorQ09ORklHX1VTQl9TVFYwNlhYPW0KICMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfQ09ORVg9bQorQ09ORklHX1VTQl9HU1BDQV9FVE9NUz1tCitDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVg9bQogIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVDYxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9WQzAzMlggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1pDM1hYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfTUFSUz1tCitDT05GSUdfVVNCX0dTUENBX01SOTczMTBBPW0KK0NPTkZJR19VU0JfR1NQQ0FfT1Y1MTk9bQorQ09ORklHX1VTQl9HU1BDQV9PVjUzND1tCitDT05GSUdfVVNCX0dTUENBX1BBQzIwNz1tCisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dTUENBX1BBQzczMTE9bQorQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYPW0KK0NPTkZJR19VU0JfR1NQQ0FfU045QzIwWF9FVkRFVj15CitDT05GSUdfVVNCX0dTUENBX1NPTklYQj1tCitDT05GSUdfVVNCX0dTUENBX1NPTklYSj1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDA9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNT1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MT1tCitDT05GSUdfVVNCX0dTUENBX1NROTA1PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1E5MDVDPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1RLMDE0PW0KKyMgQ09ORklHX1VTQl9HU1BDQV9TVFYwNjgwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCitDT05GSUdfVVNCX0dTUENBX1Q2MTM9bQorQ09ORklHX1VTQl9HU1BDQV9UVjg1MzI9bQorQ09ORklHX1VTQl9HU1BDQV9WQzAzMlg9bQorQ09ORklHX1VTQl9HU1BDQV9aQzNYWD1tCiAjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVklDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lCTUNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS09OSUNBV0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1FVSUNLQ0FNX01FU1NFTkdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVQ2MVgyNTEgaXMgbm90IHNldAorQ09ORklHX1VTQl9FVDYxWDI1MT1tCiAjIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU045QzEwMj1tCiAjIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9aQzAzMDE9bQogIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pSMzY0WFg9bQorQ09ORklHX1VTQl9TVEtXRUJDQU09bQorQ09ORklHX1VTQl9TMjI1NT1tCiAjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCkBAIC0xMTMyLDYgKzEyOTQsNyBAQAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKQEAgLTExNjEsNyArMTMyNCw3IEBACiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKICMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz1tCiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtMTE5MywyOCArMTM1Niw0NCBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorQ09ORklHX1NORF9IUlRJTUVSPW0KK0NPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CiAjIENPTkZJR19TTkRfUlRDVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUkFXTUlESV9TRVE9bQogIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQogQ09ORklHX1NORF9BQzk3X0NPREVDPW0KLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwPW0KK0NPTkZJR19TTkRfTVBVNDAxPW0KK0NPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFPXkKK0NPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFX0RFRkFVTFQ9MTAKIENPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CkBAIC0xMjgxLDcgKzE0NjAsMTAgQEAKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89bQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfQUM5N19CVVM9bQpAQCAtMTI5OSwzMiArMTQ4MSw0MSBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfRFJBR09OUklTRT1tCitDT05GSUdfRFJBR09OUklTRV9GRj15CitDT05GSUdfSElEX0VaS0VZPW0KK0NPTkZJR19ISURfS1lFPW0KK0NPTkZJR19ISURfR1lSQVRJT049bQorQ09ORklHX0hJRF9UV0lOSEFOPW0KK0NPTkZJR19ISURfS0VOU0lOR1RPTj1tCitDT05GSUdfSElEX0xPR0lURUNIPW0KK0NPTkZJR19MT0dJVEVDSF9GRj15CitDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkY9eQorQ09ORklHX0hJRF9NSUNST1NPRlQ9bQorQ09ORklHX0hJRF9NT05URVJFWT1tCitDT05GSUdfSElEX05UUklHPW0KK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQorQ09ORklHX1BBTlRIRVJMT1JEX0ZGPXkKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorQ09ORklHX0hJRF9HUkVFTkFTSUE9bQorQ09ORklHX0dSRUVOQVNJQV9GRj15CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz1tCitDT05GSUdfU01BUlRKT1lQTFVTX0ZGPXkKK0NPTkZJR19ISURfVE9QU0VFRD1tCitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj1tCitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKK0NPTkZJR19ISURfV0FDT009bQorQ09ORklHX0hJRF9aRVJPUExVUz1tCitDT05GSUdfWkVST1BMVVNfRkY9eQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMzQ0LDcgKzE1MzUsNyBAQAogQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1dVU0I9bQogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNjYsMTQgKzE1NTcsMTUgQEAKIENPTkZJR19VU0JfVUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1dIQ0lfSENEPW0KK0NPTkZJR19VU0JfSFdBX0hDRD1tCisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiBDT05GSUdfVVNCX0FDTT1tCi0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BSSU5URVI9bQogQ09ORklHX1VTQl9XRE09bQogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKQEAgLTEzOTcsNyArMTU4OSw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xJQlVTVUFMPXkKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xNDY3LDcgKzE2NTksNyBAQAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xFRD1tCiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldApAQCAtMTQ4MCwxNiArMTY3Miw5NSBAQAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CitDT05GSUdfVVNCX002NjU5Mj1tCisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19VV0I9bQorQ09ORklHX1VXQl9IV0E9bQorQ09ORklHX1VXQl9XSENJPW0KKyMgQ09ORklHX1VXQl9XTFAgaXMgbm90IHNldAorIyBDT05GSUdfVVdCX0kxNDgwVSBpcyBub3Qgc2V0CitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldApAQCAtMTUwNCwyMiArMTc3NSwxOCBAQAogIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVzM1VU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfT1RVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01FREkgaXMgbm90IHNldAogIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxODdTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTkyU1UgaXMgbm90IHNldAorIyBDT05GSUdfUjgxODdTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTkyRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFOWlBPUlQgaXMgbm90IHNldAogCiAjCi0jIEFuZHJvaWQKLSMKLQotIwogIyBRdWFsY29tbSBNU00gQ2FtZXJhIEFuZCBWaWRlbwogIwogCkBAIC0xNTI3LDcgKzE3OTQsNiBAQAogIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgogIwogIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EU1QgaXMgbm90IHNldAogIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAogIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAogIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKQEAgLTE1NDQsMjggKzE4MTAsNTUgQEAKICMKICMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkFNWlNXQVAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TTTdYWD15Ci1DT05GSUdfRkJfU003WFhfQUNDRUw9eQorIyBDT05GSUdfRkJfU003WFhfQUNDRUwgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz1tCisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CisjIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRDI9eQorIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19QUk9DX0lORk89eQorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KK0NPTkZJR19KRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0pGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1hGU19GUz1tCitDT05GSUdfWEZTX1FVT1RBPXkKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQlRSRlNfRlM9bQorIyBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CkBAIC0xNTc1LDE3ICsxODY4LDI1IEBACiBDT05GSUdfUVVPVEE9eQogIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAogQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorQ09ORklHX1FVT1RBX1RSRUU9bQogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPW0KIENPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENhY2hlcwogIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfRlNDQUNIRT1tCisjIENPTkZJR19GU0NBQ0hFX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVGSUxFUz1tCisjIENPTkZJR19DQUNIRUZJTEVTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xNTk5LDExICsxOTAwLDEzIEBACiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19GQVRfRlM9bQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorQ09ORklHX05URlNfRlM9bQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19SVz15CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCkBAIC0xNjE2LDIzICsxOTE5LDYwIEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19TUVVBU0hGUz1tCitDT05GSUdfU1FVQVNIRlNfRU1CRURERUQ9eQorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MworIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz1tCitDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAorQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRlNDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTE9DS0Q9bQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0FDTF9TVVBQT1JUPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKK0NPTkZJR19TVU5SUENfR1NTPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfVVBDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERlNfVVBDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xNjQzLDQ1ICsxOTgzLDQ1IEBACiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0idXRmLTgiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PXkKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKQEAgLTE2OTUsMTI1ICsyMDM1LDE1NSBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlTPXkKK0NPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KK0NPTkZJR19BU1lOQ19QUT1tCitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9bQogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCitDT05GSUdfQ1JZUFRPX0ZJUFM9eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCiBDT05GSUdfQ1JZUFRPX1JORzI9eQogQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCiAKICMKICMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCiAjCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQogCiAjCiAjIEJsb2NrIG1vZGVzCiAjCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KICMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KIAogIwogIyBIYXNoIG1vZGVzCiAjCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hNQUM9bQorQ09ORklHX0NSWVBUT19YQ0JDPW0KICMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19HSEFTSD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fUk1EMTI4PW0KK0NPTkZJR19DUllQVE9fUk1EMTYwPW0KK0NPTkZJR19DUllQVE9fUk1EMjU2PW0KK0NPTkZJR19DUllQVE9fUk1EMzIwPW0KK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogCiAjCiAjIENvbXByZXNzaW9uCiAjCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX1pMSUI9bQorQ09ORklHX0NSWVBUT19MWk89bQogCiAjCiAjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgogIwotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTgyMSwxNCArMjE5MSwyMCBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfQVVESVRfR0VORVJJQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCBkZGY2N2Y2Li45NzM4MmI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTEsNzkgKzEsMTAzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwOTo1MzoyOSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTEwMD15Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjExMDA9eQorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTEwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfU1dBUF9JT19TUEFDRT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MywxMSArMTE4LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA3LDE4NCArMTM1LDI0NCBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1wYjExMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yOTUsMTEwICszODMsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQwOCwyNyArNDExLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQzNywyNSArNDM3LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ2OCw2ICs0NjgsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5MywxNCArNDk0LDEzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE3LDE2NiArNTE3LDEzNiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfUEhZTElCPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQVUxWDAwX0VORVQgaXMgbm90IHNldAorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTY4NCwxNiArNjU0LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03MDMsMjggKzY3MSwyNiBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTc0MywxOTggKzcwOSwyODggQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURSQVc9eQogCiAjCi0jIEhJRCBEZXZpY2VzCisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk1Myw2OSArMTAwOSw3NiBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKQEAgLTEwNTUsMzQgKzExMTgsNzEgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5MCw2NyArMTE5MCwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFkNzczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NjggQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDEwOjIzOjM0IDIwMTAKKyMKK0NPTkZJR19NSVBTPXkKKworIworIyBNYWNoaW5lIHNlbGVjdGlvbgorIworQ09ORklHX01BQ0hfQUxDSEVNWT15CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfUEIxMjAwPXkKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTIwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CitDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX0lSUV9DUFU9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTUlQUzMyX1IxPXkKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQorQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CitDT05GSUdfQ1BVX01JUFMzMj15CitDT05GSUdfQ1BVX01JUFNSMT15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CitDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAorQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0tTTT15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTIwMCIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9BVTE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CisjIENPTkZJR19JREVfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYPXkKK0NPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMD15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVTE1NTA9eQorQ09ORklHX1NQSV9CSVRCQU5HPXkKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQURNMTAyNT15CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNNzA9eQorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0FVMTIwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDX0kyUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDX0FDOTc9eQorQ09ORklHX1NORF9TT0NfREIxMjAwPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfU09DX1dNODczMT15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MworIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRUZJX1BBUlRJVElPTj15CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKK0NPTkZJR19LRVlTPXkKK0NPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKaW5kZXggNWVjNjA4My4uNzQ5N2QzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjM3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDEwOjA1OjI3IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfUEIxNTAwPXkKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTUwMD15CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTE1MDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxNTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTkwICsxMzQsMjU1IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1wYjE1MDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CiBDT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAotQ09ORklHX1BENjcyOT1tCisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAwLDExMCArMzkzLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTMsMjcgKzQyMSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDIsMjUgKzQ0NywyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NzMsNiArNDc4LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTgsMTQgKzUwNCwxNCBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTIzLDMwICs1MjksMjAgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldApAQCAtNTU0LDY3ICs1NTAsNjYgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjI0LDgyICs2MTksNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNzA3LDk2ICs2ODUsNTEgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CiAKICMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtODA0LDE2ICs3MzcsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTgyMywzMyArNzU0LDM0IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTg2MywyODIgKzc5NSw0NTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorQ09ORklHX0ZCX1MxRDEzWFhYPXkKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIEhJRCBEZXZpY2VzCisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1RHX1dISVRFTElTVD15CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKK0NPTkZJR19GQVRfRlM9eQogIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CkBAIC0xMTU1LDEwICsxMjU1LDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMTY4LDM4ICsxMjY4LDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjA3LDY3ICsxMzQ0LDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwppbmRleCA2NjQ3NjQyLi5hYTUyNmY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKQEAgLTEsNzkgKzEsMTAzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDowNjowNyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTU1MD15Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjE1NTA9eQorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTUwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTU1MD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MywxMSArMTE4LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA3LDE5MCArMTM1LDI1NSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxNTUwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKLUNPTkZJR19QRDY3Mjk9bQorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMSwxMTAgKzM5NCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDE0LDI3ICs0MjIsMzAgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQzLDI1ICs0NTQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDc0LDYgKzQ4NSw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1MTEsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCwzMCArNTM2LDMwIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9BVTE1NTA9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTU1NSw2NyArNTY3LDY2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLSMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSFBUMzY2PXkKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSVQ4MjEzPW0KKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC02MjUsODIgKzYzNiw2NSBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCi0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcwOCw4OCArNzAyLDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTc5NywxNiArNzU0LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MTYsMzMgKzc3MSwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04NTYsMjgyICs4MTIsNDkyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKK0NPTkZJR19GQVRfRlM9eQogIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDEwICsxMzE0LDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMTYxLDM4ICsxMzI3LDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjAwLDY3ICsxNDAzLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jIGIvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYwppbmRleCBiMGRjNmQ1Li45NGQyM2I0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jCisrKyBiL2FyY2gvbWlwcy9kZWMva24wMS1iZXJyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgLS0gaXQgaGFzIHRvIGJlIGluaXRpYWxpemVkLgogICovCiB1MTYgY2FjaGVkX2tuMDFfY3NyOwotREVGSU5FX1NQSU5MT0NLKGtuMDFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhrbjAxX2xvY2spOwogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfa24wMV9iZV9hY2sodm9pZCkKQEAgLTU0LDEyICs1NCwxMiBAQAogCXZvbGF0aWxlIHUxNiAqY3NyID0gKHZvaWQgKilDS1NFRzFBRERSKEtOMDFfU0xPVF9CQVNFICsgS04wMV9DU1IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZrbjAxX2xvY2ssIGZsYWdzKTsKIAogCSpjc3IgPSBjYWNoZWRfa24wMV9jc3IgfCBLTjAxX0NTUl9NRU1FUlI7CS8qIENsZWFyIGJ1cyBJUlEuICovCiAJaW9iKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbjAxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgZGVjX2tuMDFfYmVfYmFja2VuZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwLCBpbnQgaW52b2tlcikKQEAgLTE4Miw3ICsxODIsNyBAQAogCXZvbGF0aWxlIHUxNiAqY3NyID0gKHZvaWQgKilDS1NFRzFBRERSKEtOMDFfU0xPVF9CQVNFICsgS04wMV9DU1IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZrbjAxX2xvY2ssIGZsYWdzKTsKIAogCS8qIFByZXNldCB3cml0ZS1vbmx5IGJpdHMgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIgY2FjaGUuICovCiAJY2FjaGVkX2tuMDFfY3NyID0gKmNzcjsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSpjc3IgPSBjYWNoZWRfa24wMV9jc3I7CiAJaW9iKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbjAxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBDbGVhciBhbnkgbGVmdG92ZXIgZXJyb3JzIGZyb20gdGhlIGZpcm13YXJlLiAqLwogCWRlY19rbjAxX2JlX2FjaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TIGIvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TCmluZGV4IGQ5YWNkY2UuLmY3MmI1NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUworKysgYi9hcmNoL21pcHMvZGVjL3Byb20vbG9jb3JlLlMKQEAgLTI3LDQgKzI3LDMgQEAKIAlqcglrMAogCSByZmUKIEVORChnZW5leGNlcHRfZWFybHkpCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBkZDc1ZDY3Li41MTkxOTdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xMzcsNyArMTM3LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC0xODksNyArMTg5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC01MTYsNyArNTE2LDcgQEAKIHsKIAlsb25nIHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWxvbmcgdGVtcDsKQEAgLTU2OCw3ICs1NjgsNyBAQAogewogCWxvbmcgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJbG9uZyB0ZW1wOwpAQCAtNjI4LDcgKzYyOCw3IEBACiB7CiAJbG9uZyByZXN1bHQ7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlsb25nIHRlbXA7CkBAIC03ODgsOSArNzg4LDkgQEAKICAqIGF0b21pYypfcmV0dXJuIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6aW5nIGJ1dCBub3QgdGhlIG5vbi0qX3JldHVybgogICogdmVyc2lvbnMuCiAgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9sbHNjX21iKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDhlOWFjMzEuLmMwODg0ZjAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTg4LDEyICs4OCwyMCBAQAogCQk6IC8qIG5vIG91dHB1dCAqLwkJXAogCQk6ICJtIiAoKihpbnQgKilDS1NFRzEpCQlcCiAJCTogIm1lbW9yeSIpCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjIGRlZmluZSBPQ1RFT05fU1lOQ1dfU1RSCSIuc2V0IHB1c2hcbi5zZXQgYXJjaD1vY3Rlb25cbnN5bmN3XG5zeW5jd1xuLnNldCBwb3BcbiIKKyMgZGVmaW5lIF9fc3luY3coKSAJX19hc21fXyBfX3ZvbGF0aWxlX18oT0NURU9OX1NZTkNXX1NUUiA6IDogOiAibWVtb3J5IikKIAotI2RlZmluZSBmYXN0X3dtYigpCV9fc3luYygpCi0jZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKLSNkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCi0jaWZkZWYgQ09ORklHX1NHSV9JUDI4Ci0jZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAorIyBkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmN3KCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJYmFycmllcigpCisjIGRlZmluZSBmYXN0X21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfaW9iKCkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UgLyogISBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gKi8KKyMgZGVmaW5lIGZhc3Rfd21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorIyBpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCiAJCSIuc2V0CXB1c2hcblx0IgkJXAogCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXApAQCAtMTA0LDEzICsxMTIsMTQgQEAKIAkJOiAvKiBubyBvdXRwdXQgKi8JCVwKIAkJOiAibSIgKCooaW50ICopQ0tTRUcxQUREUigweDFmYTAwMDA0KSkgXAogCQk6ICJtZW1vcnkiKQotI2Vsc2UKLSNkZWZpbmUgZmFzdF9pb2IoKQkJCQlcCisjIGVsc2UKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlkbyB7CQkJCQlcCiAJCV9fc3luYygpOwkJCVwKIAkJX19mYXN0X2lvYigpOwkJCVwKIAl9IHdoaWxlICgwKQotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgogCkBAIC0xMzEsMjUgKzE0MCw0MiBAQAogI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfV0VBS19PUkRFUklORykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotI2RlZmluZSBfX1dFQUtfT1JERVJJTkdfTUIJIiAgICAgICBzeW5jCVxuIgorIyBpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyMgIGRlZmluZSBzbXBfbWIoKQlfX3N5bmMoKQorIyAgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyMgIGRlZmluZSBzbXBfd21iKCkJX19zeW5jdygpCisjIGVsc2UKKyMgIGRlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIgOiA6IDoibWVtb3J5IikKKyMgIGRlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6Im1lbW9yeSIpCisjICBkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiJtZW1vcnkiKQorIyBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgX19XRUFLX09SREVSSU5HX01CCSIJCVxuIgorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1dFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQogI2RlZmluZSBfX1dFQUtfTExTQ19NQgkJIiAgICAgICBzeW5jCVxuIgogI2Vsc2UKICNkZWZpbmUgX19XRUFLX0xMU0NfTUIJCSIJCVxuIgogI2VuZGlmCiAKLSNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oX19XRUFLX09SREVSSU5HX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfT1JERVJJTkdfTUIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19PUkRFUklOR19NQiA6IDogOiJtZW1vcnkiKQotCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCiAJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc21wX2xsc2NfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY19ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY193bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSBzbXBfd21iKCkKKy8qIENhdXNlIHByZXZpb3VzIHdyaXRlcyB0byBiZWNvbWUgdmlzaWJsZSBvbiBhbGwgQ1BVcyBhcyBzb29uIGFzIHBvc3NpYmxlICovCisjZGVmaW5lIG51ZGdlX3dyaXRlcygpIF9fYXNtX18gX192b2xhdGlsZV9fKCIuc2V0IHB1c2hcblx0IgkJXAorCQkJCQkgICAgIi5zZXQgYXJjaD1vY3Rlb25cblx0IglcCisJCQkJCSAgICAic3luY3dcblx0IgkJCVwKKwkJCQkJICAgICIuc2V0IHBvcCIgOiA6IDogIm1lbW9yeSIpCisjZWxzZQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9sbHNjKCkgc21wX2xsc2NfbWIoKQorI2RlZmluZSBudWRnZV93cml0ZXMoKSBtYigpCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDg0YTM4MzguLjkyNTVjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qCiAgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KICAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9sbHNjX21iKCkKIAogLyoKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJpdCA9IG5yICYgU1pMT05HX01BU0s7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCmluZGV4IDgxNWE0MzhhLi5lZDlhYWFhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NtcHhjaGcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCkBAIC03MiwxNCArNzIsMTQgQEAKICAqLwogZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCi0jZGVmaW5lIF9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBiYXJyaWVyKQkJCQlcCisjZGVmaW5lIF9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBwcmVfYmFycmllciwgcG9zdF9iYXJyaWVyKQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXyhwdHIpIF9fcHRyID0gKHB0cik7CQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fb2xkID0gKG9sZCk7CQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19uZXcgPSAobmV3KTsJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3JlcyA9IDA7CQkJCQlcCiAJCQkJCQkJCQlcCi0JYmFycmllcjsJCQkJCQkJXAorCXByZV9iYXJyaWVyOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJc3dpdGNoIChzaXplb2YoKihfX3B0cikpKSB7CQkJCQlcCiAJY2FzZSA0OgkJCQkJCQkJXApAQCAtOTYsMTMgKzk2LDEzIEBACiAJCWJyZWFrOwkJCQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAotCWJhcnJpZXI7CQkJCQkJCVwKKwlwb3N0X2JhcnJpZXI7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX3JlczsJCQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHNtcF9sbHNjX21iKCkpCi0jZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvbGQsIG5ldykJX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsICkKKyNkZWZpbmUgY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSwgc21wX2xsc2NfbWIoKSkKKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG9sZCwgbmV3KQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgLCApCiAKICNkZWZpbmUgY21weGNoZzY0KHB0ciwgbywgbikJCQkJCQlcCiAgICh7CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCmluZGV4IDI3MmM1ZWYuLmFjNzNjZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKQEAgLTk1LDYgKzk1LDkgQEAKICNpZm5kZWYgY3B1X2hhc19zbWFydG1pcHMKICNkZWZpbmUgY3B1X2hhc19zbWFydG1pcHMgICAgICAoY3B1X2RhdGFbMF0uYXNlcyAmIE1JUFNfQVNFX1NNQVJUTUlQUykKICNlbmRpZgorI2lmbmRlZiBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aQorI2RlZmluZSBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSAwCisjZW5kaWYKICNpZm5kZWYgY3B1X2hhc192dGFnX2ljYWNoZQogI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCShjcHVfZGF0YVswXS5pY2FjaGUuZmxhZ3MgJiBNSVBTX0NBQ0hFX1ZUQUcpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBjZjM3M2E5Li5hNWFjZGE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgKiBNSVBTNjQgY2xhc3MgcHJvY2Vzc29ycwogCSAqLwogCUNQVV81S0MsIENQVV8yMEtDLCBDUFVfMjVLRiwgQ1BVX1NCMSwgQ1BVX1NCMUEsIENQVV9MT09OR1NPTjIsCi0JQ1BVX0NBVklVTV9PQ1RFT04sCisJQ1BVX0NBVklVTV9PQ1RFT04sIENQVV9DQVZJVU1fT0NURU9OX1BMVVMsCiAKIAlDUFVfTEFTVAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oCmluZGV4IDU1OWRiNjYuLjRjNTE0MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaApAQCAtMSwyMyArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMiBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9DVVJSRU5UX0gKLSNkZWZpbmUgX0FTTV9DVVJSRU5UX0gKLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0KLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQotewotCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Ci19Ci0KLSNkZWZpbmUgY3VycmVudAkJZ2V0X2N1cnJlbnQoKQotCi0jZW5kaWYgLyogX0FTTV9DVVJSRU5UX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jdXJyZW50Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMva24wMS5oCmluZGV4IDI4ZmE3MTcuLjg4ZDlmZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMva24wMS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMva24wMS5oCkBAIC04MCw3ICs4MCw2IEBACiBzdHJ1Y3QgcHRfcmVnczsKIAogZXh0ZXJuIHUxNiBjYWNoZWRfa24wMV9jc3I7Ci1leHRlcm4gc3BpbmxvY2tfdCBrbjAxX2xvY2s7CiAKIGV4dGVybiB2b2lkIGRlY19rbjAxX2JlX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGRlY19rbjAxX2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc19maXh1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggZDhmOTg3Mi4uMDY3NDZjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtNCw0ICs0LDMgQEAKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKICAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RldmljZS5oPgotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggN2E2YTM1ZC4uZTUzZDdiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMzM0LDE0ICszMzQsMTQgQEAKIAogI2RlZmluZSBFTEZfSFdDQVAgICAgICAgKDApCiAKLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorLyoKKyAqIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICogc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAqIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorICovCiAKLSAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAotICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICBfX2VsZl9wbGF0Zm9ybQorZXh0ZXJuIGNvbnN0IGNoYXIgKl9fZWxmX3BsYXRmb3JtOwogCiAvKgogICogU2VlIGNvbW1lbnRzIGluIGFzbS1hbHBoYS9lbGYuaCwgdGhpcyBpcyB0aGUgc2FtZSB0aGluZwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IDM5ODZjZDguLmNlMzVjOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTQsNyArNCw3IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHksIENoaW5hCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogCiAjaWZuZGVmIF9BU01fTUlQU19GVFJBQ0VfSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTkuaAppbmRleCA4NTcyYTJkLi5jN2UyNzg0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTkuaApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBTTEFWRV9JQ1c0X0RFRkFVTFQJMHgwMQogI2RlZmluZSBQSUNfSUNXNF9BRU9JCQkyCiAKLWV4dGVybiBzcGlubG9ja190IGk4MjU5QV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjU5QV9sb2NrOwogCiBleHRlcm4gaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpAQCAtNTEsNyArNTEsNyBAQAogewogCWludCBpcnE7CiAKLQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CiAKIAkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCiAJb3V0YigweDBDLCBQSUNfTUFTVEVSX0NNRCk7CQkvKiBwcmVwYXJlIGZvciBwb2xsICovCkBAIC03OCw3ICs3OCw3IEBACiAJCQlpcnEgPSAtMTsKIAl9CiAKLQlzcGluX3VubG9jaygmaTgyNTlBX2xvY2spOworCXJhd19zcGluX3VubG9jaygmaTgyNTlBX2xvY2spOwogCiAJcmV0dXJuIGxpa2VseShpcnEgPj0gMCkgPyBpcnEgKyBJODI1OUFfSVJRX0JBU0UgOiBpcnE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQzNjg3OGUuLmM5OGJmNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCkBAIC00NDcsNiArNDQ3LDI0IEBACiAjZGVmaW5lIHJlYWRsX3JlbGF4ZWQJCQlyZWFkbAogI2RlZmluZSByZWFkcV9yZWxheGVkCQkJcmVhZHEKIAorI2RlZmluZSByZWFkYl9iZShhZGRyKQkJCQkJCQlcCisJX19yYXdfcmVhZGIoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHJlYWR3X2JlKGFkZHIpCQkJCQkJCVwKKwliZTE2X3RvX2NwdShfX3Jhd19yZWFkdygoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkpCisjZGVmaW5lIHJlYWRsX2JlKGFkZHIpCQkJCQkJCVwKKwliZTMyX3RvX2NwdShfX3Jhd19yZWFkbCgoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkpCisjZGVmaW5lIHJlYWRxX2JlKGFkZHIpCQkJCQkJCVwKKwliZTY0X3RvX2NwdShfX3Jhd19yZWFkcSgoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkpCisKKyNkZWZpbmUgd3JpdGViX2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGViKCh2YWwpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGV3X2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KCh2YWwpKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHdyaXRlbF9iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMigodmFsKSksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSB3cml0ZXFfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQoKHZhbCkpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKwogLyoKICAqIFNvbWUgY29kZSB0ZXN0cyBmb3IgdGhlc2Ugc3ltYm9scwogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9sb2NhbC5oCmluZGV4IDM2MWY0ZjE2Li5iZGNkZWYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbG9jYWwuaApAQCAtMTkzLDI5ICsxOTMsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLCBsKQkoKGwpLT5hLmNvdW50ZXIrPShpKSkKICNkZWZpbmUgX19sb2NhbF9zdWIoaSwgbCkJKChsKS0+YS5jb3VudGVyLT0oaSkpCiAKLS8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAotICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gYXRvbWljIHdheS4gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXBfdihsKQkgCVwKLQkoeyBsb2NhbF90IHJlc19fOwkJXAotCSAgIHByZWVtcHRfZGlzYWJsZSgpOyAJCVwKLQkgICByZXNfXyA9IChsKTsJCQlcCi0JICAgcHJlZW1wdF9lbmFibGUoKTsJCVwKLQkgICByZXNfXzsgfSkKLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXAobCkJCVwKLQkoeyBwcmVlbXB0X2Rpc2FibGUoKTsJCVwKLQkgICBsOwkJCQlcCi0JICAgcHJlZW1wdF9lbmFibGUoKTsgfSkJCVwKLQotI2RlZmluZSBjcHVfbG9jYWxfcmVhZChsKSAgICBjcHVfbG9jYWxfd3JhcF92KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfc2V0KGwsIGkpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkgICAgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWMobCkgICAgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQotCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2luYyhsKQljcHVfbG9jYWxfaW5jKGwpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQljcHVfbG9jYWxfZGVjKGwpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQljcHVfbG9jYWxfYWRkKChpKSwgKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJY3B1X2xvY2FsX3N1YigoaSksIChsKSkKLQogI2VuZGlmIC8qIF9BUkNIX01JUFNfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCmluZGV4IDIxY2JiYzcuLmYxY2YzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKQEAgLTEwNSwyNiArMTA1LDkgQEAKIAlyZXR1cm4gKHJlYWRsKCh2b2lkICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyAweDE0KSkgPj4gMTYpICYgMHhmZjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXI3X2NwdV9mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19jcHVfY2xvY2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19idXNfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfYnVzX2Nsb2NrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfdmJ1c19mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19idXNfY2xvY2sgLyAyOwotfQotI2RlZmluZSBhcjdfY3BtYWNfZnJlcSBhcjdfdmJ1c19mcmVxCi0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19kc3BfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfZHNwX2Nsb2NrOwotfQorc3RydWN0IGNsayB7CisJdW5zaWduZWQgaW50CXJhdGU7Cit9OwogCiBzdGF0aWMgaW5saW5lIGludCBhcjdfaGFzX2hpZ2hfY3BtYWModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oCmluZGV4IGNiZTljNGYuLjczZjliMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2dwaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw4OCArMjIsMTggQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CiAKICNkZWZpbmUgQVI3X0dQSU9fTUFYIDMyCisjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyBBUjdfR1BJT19NQVgKIAotZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlOVUxMCiAKLS8qIENvbW1vbiBHUElPIGxheWVyICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19pbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0lOUFVUKTsKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSBfX2dwaW9fc2V0X3ZhbHVlCiAKLQlyZXR1cm4gcmVhZGwoZ3Bpb19pbikgJiAoMSA8PCBncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fb3V0ID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fT1VUUFVUKTsKLQl1bnNpZ25lZCB0bXA7Ci0KLQl0bXAgPSByZWFkbChncGlvX291dCkgJiB+KDEgPDwgZ3Bpbyk7Ci0JaWYgKHZhbHVlKQotCQl0bXAgfD0gMSA8PCBncGlvOwotCXdyaXRlbCh0bXAsIGdwaW9fb3V0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRElSKTsKLQotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpIHwgKDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPQotCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyBBUjdfR1BJT19ESVIpOwotCi0JaWYgKGdwaW8gPj0gQVI3X0dQSU9fTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpICYgfigxIDw8IGdwaW8pLCBncGlvX2Rpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCXJldHVybiAtRUlOVkFMOwotfQorI2RlZmluZSBncGlvX2NhbnNsZWVwIF9fZ3Bpb19jYW5zbGVlcAogCiAvKiBCb2FyZCBzcGVjaWZpYyBHUElPIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSB8ICgxIDw8IGdwaW8pLCBncGlvX2VuKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfZ3Bpb19kaXNhYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19lbik7Ci0KLQlyZXR1cm4gMDsKLX0KK2ludCBhcjdfZ3Bpb19lbmFibGUodW5zaWduZWQgZ3Bpbyk7CitpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKTsKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCmluZGV4IDg1NGU5NWYuLmFlMDc0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTEzMCw2ICsxMzAsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBBTENIRU1ZX0NQVV9VTktOT1dOCS0xCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTAwMAkwCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTUwMAkxCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTEwMAkyCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTU1MAkzCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTIwMAk0CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ2V0X2NwdXR5cGUodm9pZCkKK3sKKwlzd2l0Y2ggKHJlYWRfYzBfcHJpZCgpICYgMHhmZmZmMDAwMCkgeworCWNhc2UgMHgwMDAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAxMDMwMDAwOgorCQlyZXR1cm4gQUxDSEVNWV9DUFVfQVUxNTAwOworCQlicmVhazsKKwljYXNlIDB4MDIwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTExMDA7CisJCWJyZWFrOworCWNhc2UgMHgwMzAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTU1MDsKKwkJYnJlYWs7CisJY2FzZSAweDA0MDMwMDAwOgorCWNhc2UgMHgwNTAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTIwMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIEFMQ0hFTVlfQ1BVX1VOS05PV047Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X3VhcnRfcHV0Y2hhcih1MzIgdWFydF9waHlzLCB1OCBjKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIodWFydF9waHlzKTsKKwlpbnQgdGltZW91dCwgaTsKKworCS8qIGNoZWNrIExTUiBUWF9FTVBUWSBiaXQgKi8KKwl0aW1lb3V0ID0gMHhmZmZmZmY7CisJZG8geworCQlpZiAoX19yYXdfcmVhZGwoYmFzZSArIDB4MWMpICYgMHgyMCkKKwkJCWJyZWFrOworCQkvKiBzbG93IGRvd24gKi8KKwkJZm9yIChpID0gMTAwMDA7IGk7IGktLSkKKwkJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlfX3Jhd193cml0ZWwoYywgYmFzZSArIDB4MDQpOwkvKiB0eCAqLworCXdtYigpOworfQorCiAvKiBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jbG9ja3MuYyAqLwogZXh0ZXJuIHZvaWQgc2V0X2F1MXgwMF9zcGVlZCh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfYXUxeDAwX3NwZWVkKHZvaWQpOwpAQCAtMTQzLDIwICsxOTMsMzMyIEBACiB2b2lkIHNhdmVfYXUxeHh4X2ludGN0bCh2b2lkKTsKIHZvaWQgcmVzdG9yZV9hdTF4eHhfaW50Y3RsKHZvaWQpOwogCi0vKgotICogRXZlcnkgYm9hcmQgZGVzY3JpYmVzIGl0cyBJUlEgbWFwcGluZyB3aXRoIHRoaXMgdGFibGUuCi0gKi8KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIHsKLQlpbnQJaW1faXJxOwotCWludAlpbV90eXBlOwotCWludAlpbV9yZXF1ZXN0OworCisvKiBTT0MgSW50ZXJydXB0IG51bWJlcnMgKi8KKworI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKKyNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9MQVNUCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMSkKKyNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9CQVNFCShBVTEwMDBfSU5UQzBfSU5UX0xBU1QgKyAxKQorI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQorI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgCUFVMTAwMF9JTlRDMV9JTlRfTEFTVAorCitlbnVtIHNvY19hdTEwMDBfaW50cyB7CisJQVUxMDAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEwMDBfVUFSVDBfSU5UCT0gQVUxMDAwX0ZJUlNUX0lOVCwKKwlBVTEwMDBfVUFSVDFfSU5ULAorCUFVMTAwMF9VQVJUMl9JTlQsCisJQVUxMDAwX1VBUlQzX0lOVCwKKwlBVTEwMDBfU1NJMF9JTlQsCisJQVUxMDAwX1NTSTFfSU5ULAorCUFVMTAwMF9ETUFfSU5UX0JBU0UsCisKKwlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMDAwX1JUQ19JTlQsCisJQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMDAwX0lSREFfVFhfSU5ULAorCUFVMTAwMF9JUkRBX1JYX0lOVCwKKwlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMDAwX1VTQl9IT1NUX0lOVCwKKwlBVTEwMDBfQUNTWU5DX0lOVCwKKwlBVTEwMDBfTUFDMF9ETUFfSU5ULAorCUFVMTAwMF9NQUMxX0RNQV9JTlQsCisJQVUxMDAwX0kyU19VT19JTlQsCisJQVUxMDAwX0FDOTdDX0lOVCwKKwlBVTEwMDBfR1BJTzBfSU5ULAorCUFVMTAwMF9HUElPMV9JTlQsCisJQVUxMDAwX0dQSU8yX0lOVCwKKwlBVTEwMDBfR1BJTzNfSU5ULAorCUFVMTAwMF9HUElPNF9JTlQsCisJQVUxMDAwX0dQSU81X0lOVCwKKwlBVTEwMDBfR1BJTzZfSU5ULAorCUFVMTAwMF9HUElPN19JTlQsCisJQVUxMDAwX0dQSU84X0lOVCwKKwlBVTEwMDBfR1BJTzlfSU5ULAorCUFVMTAwMF9HUElPMTBfSU5ULAorCUFVMTAwMF9HUElPMTFfSU5ULAorCUFVMTAwMF9HUElPMTJfSU5ULAorCUFVMTAwMF9HUElPMTNfSU5ULAorCUFVMTAwMF9HUElPMTRfSU5ULAorCUFVMTAwMF9HUElPMTVfSU5ULAorCUFVMTAwMF9HUElPMTZfSU5ULAorCUFVMTAwMF9HUElPMTdfSU5ULAorCUFVMTAwMF9HUElPMThfSU5ULAorCUFVMTAwMF9HUElPMTlfSU5ULAorCUFVMTAwMF9HUElPMjBfSU5ULAorCUFVMTAwMF9HUElPMjFfSU5ULAorCUFVMTAwMF9HUElPMjJfSU5ULAorCUFVMTAwMF9HUElPMjNfSU5ULAorCUFVMTAwMF9HUElPMjRfSU5ULAorCUFVMTAwMF9HUElPMjVfSU5ULAorCUFVMTAwMF9HUElPMjZfSU5ULAorCUFVMTAwMF9HUElPMjdfSU5ULAorCUFVMTAwMF9HUElPMjhfSU5ULAorCUFVMTAwMF9HUElPMjlfSU5ULAorCUFVMTAwMF9HUElPMzBfSU5ULAorCUFVMTAwMF9HUElPMzFfSU5ULAogfTsKIAotLyogY29yZSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGxldCBib2FyZHMgaW5pdGlhbGl6ZSBvdGhlciBJUlEgc291cmNlcyAqLwotdm9pZCBib2FyZF9pbml0X2lycSh2b2lkKTsKK2VudW0gc29jX2F1MTEwMF9pbnRzIHsKKwlBVTExMDBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAorCUFVMTEwMF9VQVJUMV9JTlQsCisJQVUxMTAwX1NEX0lOVCwKKwlBVTExMDBfVUFSVDNfSU5ULAorCUFVMTEwMF9TU0kwX0lOVCwKKwlBVTExMDBfU1NJMV9JTlQsCisJQVUxMTAwX0RNQV9JTlRfQkFTRSwKIAotLyogYm9hcmRzIGNhbGwgdGhpcyB0byByZWdpc3RlciBhZGRpdGlvbmFsIChHUElPKSBpbnRlcnJ1cHRzICovCi12b2lkIGF1MXh4eF9zZXR1cF9pcnFtYXAoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCwgaW50IGNvdW50KTsKKwlBVTExMDBfVE9ZX0lOVAkJPSBBVTExMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMTAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTEwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTExMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMTAwX1JUQ19JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMTAwX0lSREFfVFhfSU5ULAorCUFVMTEwMF9JUkRBX1JYX0lOVCwKKwlBVTExMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTEwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMTAwX1VTQl9IT1NUX0lOVCwKKwlBVTExMDBfQUNTWU5DX0lOVCwKKwlBVTExMDBfTUFDMF9ETUFfSU5ULAorCUFVMTEwMF9HUElPMjA4XzIxNV9JTlQsCisJQVUxMTAwX0xDRF9JTlQsCisJQVUxMTAwX0FDOTdDX0lOVCwKKwlBVTExMDBfR1BJTzBfSU5ULAorCUFVMTEwMF9HUElPMV9JTlQsCisJQVUxMTAwX0dQSU8yX0lOVCwKKwlBVTExMDBfR1BJTzNfSU5ULAorCUFVMTEwMF9HUElPNF9JTlQsCisJQVUxMTAwX0dQSU81X0lOVCwKKwlBVTExMDBfR1BJTzZfSU5ULAorCUFVMTEwMF9HUElPN19JTlQsCisJQVUxMTAwX0dQSU84X0lOVCwKKwlBVTExMDBfR1BJTzlfSU5ULAorCUFVMTEwMF9HUElPMTBfSU5ULAorCUFVMTEwMF9HUElPMTFfSU5ULAorCUFVMTEwMF9HUElPMTJfSU5ULAorCUFVMTEwMF9HUElPMTNfSU5ULAorCUFVMTEwMF9HUElPMTRfSU5ULAorCUFVMTEwMF9HUElPMTVfSU5ULAorCUFVMTEwMF9HUElPMTZfSU5ULAorCUFVMTEwMF9HUElPMTdfSU5ULAorCUFVMTEwMF9HUElPMThfSU5ULAorCUFVMTEwMF9HUElPMTlfSU5ULAorCUFVMTEwMF9HUElPMjBfSU5ULAorCUFVMTEwMF9HUElPMjFfSU5ULAorCUFVMTEwMF9HUElPMjJfSU5ULAorCUFVMTEwMF9HUElPMjNfSU5ULAorCUFVMTEwMF9HUElPMjRfSU5ULAorCUFVMTEwMF9HUElPMjVfSU5ULAorCUFVMTEwMF9HUElPMjZfSU5ULAorCUFVMTEwMF9HUElPMjdfSU5ULAorCUFVMTEwMF9HUElPMjhfSU5ULAorCUFVMTEwMF9HUElPMjlfSU5ULAorCUFVMTEwMF9HUElPMzBfSU5ULAorCUFVMTEwMF9HUElPMzFfSU5ULAorfTsKKworZW51bSBzb2NfYXUxNTAwX2ludHMgeworCUFVMTUwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxNTAwX1VBUlQwX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQsCisJQVUxNTAwX1BDSV9JTlRBLAorCUFVMTUwMF9QQ0lfSU5UQiwKKwlBVTE1MDBfVUFSVDNfSU5ULAorCUFVMTUwMF9QQ0lfSU5UQywKKwlBVTE1MDBfUENJX0lOVEQsCisJQVUxNTAwX0RNQV9JTlRfQkFTRSwKKworCUFVMTUwMF9UT1lfSU5UCQk9IEFVMTUwMF9GSVJTVF9JTlQgKyAxNCwKKwlBVTE1MDBfVE9ZX01BVENIMF9JTlQsCisJQVUxNTAwX1RPWV9NQVRDSDFfSU5ULAorCUFVMTUwMF9UT1lfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUlRDX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMF9JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDFfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUENJX0VSUl9JTlQsCisJQVUxNTAwX1JFU0VSVkVEX0lOVCwKKwlBVTE1MDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTUwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxNTAwX1VTQl9IT1NUX0lOVCwKKwlBVTE1MDBfQUNTWU5DX0lOVCwKKwlBVTE1MDBfTUFDMF9ETUFfSU5ULAorCUFVMTUwMF9NQUMxX0RNQV9JTlQsCisJQVUxNTAwX0FDOTdDX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQgKyAzMSwKKwlBVTE1MDBfR1BJTzBfSU5ULAorCUFVMTUwMF9HUElPMV9JTlQsCisJQVUxNTAwX0dQSU8yX0lOVCwKKwlBVTE1MDBfR1BJTzNfSU5ULAorCUFVMTUwMF9HUElPNF9JTlQsCisJQVUxNTAwX0dQSU81X0lOVCwKKwlBVTE1MDBfR1BJTzZfSU5ULAorCUFVMTUwMF9HUElPN19JTlQsCisJQVUxNTAwX0dQSU84X0lOVCwKKwlBVTE1MDBfR1BJTzlfSU5ULAorCUFVMTUwMF9HUElPMTBfSU5ULAorCUFVMTUwMF9HUElPMTFfSU5ULAorCUFVMTUwMF9HUElPMTJfSU5ULAorCUFVMTUwMF9HUElPMTNfSU5ULAorCUFVMTUwMF9HUElPMTRfSU5ULAorCUFVMTUwMF9HUElPMTVfSU5ULAorCUFVMTUwMF9HUElPMjAwX0lOVCwKKwlBVTE1MDBfR1BJTzIwMV9JTlQsCisJQVUxNTAwX0dQSU8yMDJfSU5ULAorCUFVMTUwMF9HUElPMjAzX0lOVCwKKwlBVTE1MDBfR1BJTzIwX0lOVCwKKwlBVTE1MDBfR1BJTzIwNF9JTlQsCisJQVUxNTAwX0dQSU8yMDVfSU5ULAorCUFVMTUwMF9HUElPMjNfSU5ULAorCUFVMTUwMF9HUElPMjRfSU5ULAorCUFVMTUwMF9HUElPMjVfSU5ULAorCUFVMTUwMF9HUElPMjZfSU5ULAorCUFVMTUwMF9HUElPMjdfSU5ULAorCUFVMTUwMF9HUElPMjhfSU5ULAorCUFVMTUwMF9HUElPMjA2X0lOVCwKKwlBVTE1MDBfR1BJTzIwN19JTlQsCisJQVUxNTAwX0dQSU8yMDhfMjE1X0lOVCwKK307CisKK2VudW0gc29jX2F1MTU1MF9pbnRzIHsKKwlBVTE1NTBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTU1MF9VQVJUMF9JTlQJPSBBVTE1NTBfRklSU1RfSU5ULAorCUFVMTU1MF9QQ0lfSU5UQSwKKwlBVTE1NTBfUENJX0lOVEIsCisJQVUxNTUwX0RETUFfSU5ULAorCUFVMTU1MF9DUllQVE9fSU5ULAorCUFVMTU1MF9QQ0lfSU5UQywKKwlBVTE1NTBfUENJX0lOVEQsCisJQVUxNTUwX1BDSV9SU1RfSU5ULAorCUFVMTU1MF9VQVJUMV9JTlQsCisJQVUxNTUwX1VBUlQzX0lOVCwKKwlBVTE1NTBfUFNDMF9JTlQsCisJQVUxNTUwX1BTQzFfSU5ULAorCUFVMTU1MF9QU0MyX0lOVCwKKwlBVTE1NTBfUFNDM19JTlQsCisJQVUxNTUwX1RPWV9JTlQsCisJQVUxNTUwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTU1MF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfVE9ZX01BVENIMl9JTlQsCisJQVUxNTUwX1JUQ19JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMl9JTlQsCisKKwlBVTE1NTBfTkFORF9JTlQJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAorCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCisJQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwKKwlBVTE1NTBfVVNCX0hPU1RfSU5ULAorCUFVMTU1MF9NQUMwX0RNQV9JTlQsCisJQVUxNTUwX01BQzFfRE1BX0lOVCwKKwlBVTE1NTBfR1BJTzBfSU5UCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDMyLAorCUFVMTU1MF9HUElPMV9JTlQsCisJQVUxNTUwX0dQSU8yX0lOVCwKKwlBVTE1NTBfR1BJTzNfSU5ULAorCUFVMTU1MF9HUElPNF9JTlQsCisJQVUxNTUwX0dQSU81X0lOVCwKKwlBVTE1NTBfR1BJTzZfSU5ULAorCUFVMTU1MF9HUElPN19JTlQsCisJQVUxNTUwX0dQSU84X0lOVCwKKwlBVTE1NTBfR1BJTzlfSU5ULAorCUFVMTU1MF9HUElPMTBfSU5ULAorCUFVMTU1MF9HUElPMTFfSU5ULAorCUFVMTU1MF9HUElPMTJfSU5ULAorCUFVMTU1MF9HUElPMTNfSU5ULAorCUFVMTU1MF9HUElPMTRfSU5ULAorCUFVMTU1MF9HUElPMTVfSU5ULAorCUFVMTU1MF9HUElPMjAwX0lOVCwKKwlBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDE6MjA1ICovCisJQVUxNTUwX0dQSU8xNl9JTlQsCisJQVUxNTUwX0dQSU8xN19JTlQsCisJQVUxNTUwX0dQSU8yMF9JTlQsCisJQVUxNTUwX0dQSU8yMV9JTlQsCisJQVUxNTUwX0dQSU8yMl9JTlQsCisJQVUxNTUwX0dQSU8yM19JTlQsCisJQVUxNTUwX0dQSU8yNF9JTlQsCisJQVUxNTUwX0dQSU8yNV9JTlQsCisJQVUxNTUwX0dQSU8yNl9JTlQsCisJQVUxNTUwX0dQSU8yN19JTlQsCisJQVUxNTUwX0dQSU8yOF9JTlQsCisJQVUxNTUwX0dQSU8yMDZfSU5ULAorCUFVMTU1MF9HUElPMjA3X0lOVCwKKwlBVTE1NTBfR1BJTzIwOF8yMTVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE1ICovCit9OworCitlbnVtIHNvY19hdTEyMDBfaW50cyB7CisJQVUxMjAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKKwlBVTEyMDBfU1dUX0lOVCwKKwlBVTEyMDBfU0RfSU5ULAorCUFVMTIwMF9ERE1BX0lOVCwKKwlBVTEyMDBfTUFFX0JFX0lOVCwKKwlBVTEyMDBfR1BJTzIwMF9JTlQsCisJQVUxMjAwX0dQSU8yMDFfSU5ULAorCUFVMTIwMF9HUElPMjAyX0lOVCwKKwlBVTEyMDBfVUFSVDFfSU5ULAorCUFVMTIwMF9NQUVfRkVfSU5ULAorCUFVMTIwMF9QU0MwX0lOVCwKKwlBVTEyMDBfUFNDMV9JTlQsCisJQVUxMjAwX0FFU19JTlQsCisJQVUxMjAwX0NBTUVSQV9JTlQsCisJQVUxMjAwX1RPWV9JTlQsCisJQVUxMjAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTIwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMjAwX1JUQ19JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMjAwX0dQSU8yMDNfSU5ULAorCUFVMTIwMF9OQU5EX0lOVCwKKwlBVTEyMDBfR1BJTzIwNF9JTlQsCisJQVUxMjAwX0dQSU8yMDVfSU5ULAorCUFVMTIwMF9HUElPMjA2X0lOVCwKKwlBVTEyMDBfR1BJTzIwN19JTlQsCisJQVUxMjAwX0dQSU8yMDhfMjE1X0lOVCwJLyogTG9naWNhbCBPUiBvZiAyMDg6MjE1ICovCisJQVUxMjAwX1VTQl9JTlQsCisJQVUxMjAwX0xDRF9JTlQsCisJQVUxMjAwX01BRV9CT1RIX0lOVCwKKwlBVTEyMDBfR1BJTzBfSU5ULAorCUFVMTIwMF9HUElPMV9JTlQsCisJQVUxMjAwX0dQSU8yX0lOVCwKKwlBVTEyMDBfR1BJTzNfSU5ULAorCUFVMTIwMF9HUElPNF9JTlQsCisJQVUxMjAwX0dQSU81X0lOVCwKKwlBVTEyMDBfR1BJTzZfSU5ULAorCUFVMTIwMF9HUElPN19JTlQsCisJQVUxMjAwX0dQSU84X0lOVCwKKwlBVTEyMDBfR1BJTzlfSU5ULAorCUFVMTIwMF9HUElPMTBfSU5ULAorCUFVMTIwMF9HUElPMTFfSU5ULAorCUFVMTIwMF9HUElPMTJfSU5ULAorCUFVMTIwMF9HUElPMTNfSU5ULAorCUFVMTIwMF9HUElPMTRfSU5ULAorCUFVMTIwMF9HUElPMTVfSU5ULAorCUFVMTIwMF9HUElPMTZfSU5ULAorCUFVMTIwMF9HUElPMTdfSU5ULAorCUFVMTIwMF9HUElPMThfSU5ULAorCUFVMTIwMF9HUElPMTlfSU5ULAorCUFVMTIwMF9HUElPMjBfSU5ULAorCUFVMTIwMF9HUElPMjFfSU5ULAorCUFVMTIwMF9HUElPMjJfSU5ULAorCUFVMTIwMF9HUElPMjNfSU5ULAorCUFVMTIwMF9HUElPMjRfSU5ULAorCUFVMTIwMF9HUElPMjVfSU5ULAorCUFVMTIwMF9HUElPMjZfSU5ULAorCUFVMTIwMF9HUElPMjdfSU5ULAorCUFVMTIwMF9HUElPMjhfSU5ULAorCUFVMTIwMF9HUElPMjlfSU5ULAorCUFVMTIwMF9HUElPMzBfSU5ULAorCUFVMTIwMF9HUElPMzFfSU5ULAorfTsKIAogI2VuZGlmIC8qICFkZWZpbmVkIChfTEFOR1VBR0VfQVNTRU1CTFkpICovCiAKQEAgLTU0OSw3OCArOTExLDE2IEBACiAKICNkZWZpbmUgSUMxX1RFU1RCSVQJCTB4QjE4MDAwODAKIAotLyogSW50ZXJydXB0IE51bWJlcnMgKi8KKwogLyogQXUxMDAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKLWVudW0gc29jX2F1MTAwMF9pbnRzIHsKLQlBVTEwMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTAwMF9VQVJUMF9JTlQJPSBBVTEwMDBfRklSU1RfSU5ULAotCUFVMTAwMF9VQVJUMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUMl9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUM19JTlQsCi0JQVUxMDAwX1NTSTBfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfU1NJMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9ETUFfSU5UX0JBU0UsCi0KLQlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMDAwX0lSREFfVFhfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfSVJEQV9SWF9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTAwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMDAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfSTJTX1VPX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX0FDOTdDX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDJfQUREUgkJMHhCMTMwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEwMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMDAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTAwMF9FVEgxX0JBU0UJMHhCMDUxMDAwMApAQCAtNjMxLDc4ICs5MzEsMTMgQEAKIAogLyogQXUxNTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKLWVudW0gc29jX2F1MTUwMF9pbnRzIHsKLQlBVTE1MDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTUwMF9VQVJUMF9JTlQJPSBBVTE1MDBfRklSU1RfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQSwJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRCLAkJCQkvKiBhdTE1MDAgKi8KLQlBVTE1MDBfVUFSVDNfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQywJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRELAkJCQkvKiBhdTE1MDAgKi8KLQlBVTEwMDBfRE1BX0lOVF9CQVNFLAotCi0JQVUxMDAwX1RPWV9JTlQJCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDE0LAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTUwMF9QQ0lfRVJSX0lOVCwKLQlBVTE1MDBfUkVTRVJWRURfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTUwMF9NQUMwX0RNQV9JTlQsCi0JQVUxNTAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5UCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDMxLAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTAwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMSwKLQlBVTE1MDBfR1BJT18yMDIsCi0JQVUxNTAwX0dQSU9fMjAzLAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIwNCwKLQlBVTE1MDBfR1BJT18yMDUsCi0JQVUxNTAwX0dQSU9fMjMsCi0JQVUxNTAwX0dQSU9fMjQsCi0JQVUxNTAwX0dQSU9fMjUsCi0JQVUxNTAwX0dQSU9fMjYsCi0JQVUxNTAwX0dQSU9fMjcsCi0JQVUxNTAwX0dQSU9fMjgsCi0JQVUxNTAwX0dQSU9fMjA2LAotCUFVMTUwMF9HUElPXzIwNywKLQlBVTE1MDBfR1BJT18yMDhfMjE1LAotfTsKLQotLyogc2hvcnRjdXRzICovCi0jZGVmaW5lIElOVEEgQVUxMDAwX1BDSV9JTlRBCi0jZGVmaW5lIElOVEIgQVUxMDAwX1BDSV9JTlRCCi0jZGVmaW5lIElOVEMgQVUxMDAwX1BDSV9JTlRDCi0jZGVmaW5lIElOVEQgQVUxMDAwX1BDSV9JTlRECiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdmZmZjCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1MDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxNTAwX0VUSDBfQkFTRQkweEIxNTAwMDAwCiAjZGVmaW5lIEFVMTUwMF9FVEgxX0JBU0UJMHhCMTUxMDAwMApAQCAtNzEzLDc0ICs5NDgsMTMgQEAKIAogLyogQXUxMTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKLWVudW0gc29jX2F1MTEwMF9pbnRzIHsKLQlBVTExMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAotCUFVMTEwMF9VQVJUMV9JTlQsCi0JQVUxMTAwX1NEX0lOVCwKLQlBVTExMDBfVUFSVDNfSU5ULAotCUFVMTAwMF9TU0kwX0lOVCwKLQlBVTEwMDBfU1NJMV9JTlQsCi0JQVUxMDAwX0RNQV9JTlRfQkFTRSwKLQotCUFVMTAwMF9UT1lfSU5UCQk9IEFVMTEwMF9GSVJTVF9JTlQgKyAxNCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfSVJEQV9UWF9JTlQsCi0JQVUxMDAwX0lSREFfUlhfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTEwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMTAwX0dQSU9fMjA4XzIxNSwKLQlBVTExMDBfTENEX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5ULAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxMDAwX0dQSU9fMTYsCi0JQVUxMDAwX0dQSU9fMTcsCi0JQVUxMDAwX0dQSU9fMTgsCi0JQVUxMDAwX0dQSU9fMTksCi0JQVUxMDAwX0dQSU9fMjAsCi0JQVUxMDAwX0dQSU9fMjEsCi0JQVUxMDAwX0dQSU9fMjIsCi0JQVUxMDAwX0dQSU9fMjMsCi0JQVUxMDAwX0dQSU9fMjQsCi0JQVUxMDAwX0dQSU9fMjUsCi0JQVUxMDAwX0dQSU9fMjYsCi0JQVUxMDAwX0dQSU9fMjcsCi0JQVUxMDAwX0dQSU9fMjgsCi0JQVUxMDAwX0dQSU9fMjksCi0JQVUxMDAwX0dQSU9fMzAsCi0JQVUxMDAwX0dQSU9fMzEsCi19OwogCiAjZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDFfQUREUgkJMHhCMTIwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTExMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMTAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTEwMF9NQUMwX0VOQUJMRQkweEIwNTIwMDAwCkBAIC03ODgsODcgKzk2MiwxMiBAQAogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxMTAwICovCiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAotZW51bSBzb2NfYXUxNTUwX2ludHMgewotCUFVMTU1MF9GSVJTVF9JTlQJPSBNSVBTX0NQVV9JUlFfQkFTRSArIDgsCi0JQVUxNTUwX1VBUlQwX0lOVAk9IEFVMTU1MF9GSVJTVF9JTlQsCi0JQVUxNTUwX1BDSV9JTlRBLAotCUFVMTU1MF9QQ0lfSU5UQiwKLQlBVTE1NTBfRERNQV9JTlQsCi0JQVUxNTUwX0NSWVBUT19JTlQsCi0JQVUxNTUwX1BDSV9JTlRDLAotCUFVMTU1MF9QQ0lfSU5URCwKLQlBVTE1NTBfUENJX1JTVF9JTlQsCi0JQVUxNTUwX1VBUlQxX0lOVCwKLQlBVTE1NTBfVUFSVDNfSU5ULAotCUFVMTU1MF9QU0MwX0lOVCwKLQlBVTE1NTBfUFNDMV9JTlQsCi0JQVUxNTUwX1BTQzJfSU5ULAotCUFVMTU1MF9QU0MzX0lOVCwKLQlBVTEwMDBfVE9ZX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQotCUFVMTU1MF9OQU5EX0lOVAkJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAotCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfUkVRX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTU1MF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULAotCUFVMTU1MF9VU0JfSE9TVF9JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVAkJPSBBVTE1NTBfVVNCX0hPU1RfSU5ULAotCUFVMTU1MF9NQUMwX0RNQV9JTlQsCi0JQVUxNTUwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfR1BJT18wCQkJPSBBVTE1NTBfRklSU1RfSU5UICsgMzIsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTUwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMV8yMDUsCQkJLyogTG9naWNhbCBvciBvZiBHUElPMjAxOjIwNSAqLwotCUFVMTUwMF9HUElPXzE2LAotCUFVMTUwMF9HUElPXzE3LAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIxLAotCUFVMTUwMF9HUElPXzIyLAotCUFVMTUwMF9HUElPXzIzLAotCUFVMTUwMF9HUElPXzI0LAotCUFVMTUwMF9HUElPXzI1LAotCUFVMTUwMF9HUElPXzI2LAotCUFVMTUwMF9HUElPXzI3LAotCUFVMTUwMF9HUElPXzI4LAotCUFVMTUwMF9HUElPXzIwNiwKLQlBVTE1MDBfR1BJT18yMDcsCi0JQVUxNTAwX0dQSU9fMjA4XzIxOCwJCQkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE4ICovCi19OwotCi0vKiBzaG9ydGN1dHMgKi8KLSNkZWZpbmUgSU5UQSBBVTE1NTBfUENJX0lOVEEKLSNkZWZpbmUgSU5UQiBBVTE1NTBfUENJX0lOVEIKLSNkZWZpbmUgSU5UQyBBVTE1NTBfUENJX0lOVEMKLSNkZWZpbmUgSU5URCBBVTE1NTBfUENJX0lOVEQKLQogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTQwMjAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9PSENJX0xFTgkJMHgwMDA2MDAwMAogI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgCTB4QjQwMjdmZmMKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTU1MF9VU0JfSE9TVF9JTlQKIAogI2RlZmluZSBBVTE1NTBfRVRIMF9CQVNFCTB4QjA1MDAwMDAKICNkZWZpbmUgQVUxNTUwX0VUSDFfQkFTRQkweEIwNTEwMDAwCkBAIC04NzcsNzggKzk3NiwxMCBAQAogI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxNTUwICovCiAKKwogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi1lbnVtIHNvY19hdTEyMDBfaW50cyB7Ci0JQVUxMjAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKLQlBVTEyMDBfU1dUX0lOVCwKLQlBVTEyMDBfU0RfSU5ULAotCUFVMTIwMF9ERE1BX0lOVCwKLQlBVTEyMDBfTUFFX0JFX0lOVCwKLQlBVTEyMDBfR1BJT18yMDAsCi0JQVUxMjAwX0dQSU9fMjAxLAotCUFVMTIwMF9HUElPXzIwMiwKLQlBVTEyMDBfVUFSVDFfSU5ULAotCUFVMTIwMF9NQUVfRkVfSU5ULAotCUFVMTIwMF9QU0MwX0lOVCwKLQlBVTEyMDBfUFNDMV9JTlQsCi0JQVUxMjAwX0FFU19JTlQsCi0JQVUxMjAwX0NBTUVSQV9JTlQsCi0JQVUxMDAwX1RPWV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMjAwX0dQSU9fMjAzLAotCUFVMTIwMF9OQU5EX0lOVCwKLQlBVTEyMDBfR1BJT18yMDQsCi0JQVUxMjAwX0dQSU9fMjA1LAotCUFVMTIwMF9HUElPXzIwNiwKLQlBVTEyMDBfR1BJT18yMDcsCi0JQVUxMjAwX0dQSU9fMjA4XzIxNSwJCQkvKiBMb2dpY2FsIE9SIG9mIDIwODoyMTUgKi8KLQlBVTEyMDBfVVNCX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5UCT0gQVUxMjAwX1VTQl9JTlQsCi0JQVUxMjAwX0xDRF9JTlQsCi0JQVUxMjAwX01BRV9CT1RIX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKIAogI2RlZmluZSBVU0JfVU9DX0JBU0UJCTB4MTQwMjAwMjAKICNkZWZpbmUgVVNCX1VPQ19MRU4JCTB4MjAKQEAgLTk3NCwxNiArMTAwNSwxMCBAQAogI2RlZmluZSBVU0JNU1JNQ0ZHX1JEQ09NQgkzMAogI2RlZmluZSBVU0JNU1JNQ0ZHX1BGRU4gCTMxCiAKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTIwMF9VU0JfSU5UCisKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTIwMCAqLwogCi0jZGVmaW5lIEFVMTAwMF9JTlRDMF9JTlRfQkFTRQkoTUlQU19DUFVfSVJRX0JBU0UgKyA4KQotI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMxKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMyKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQotCi0jZGVmaW5lIEFVMTAwMF9NQVhfSU5UUiAJQVUxMDAwX0lOVEMxX0lOVF9MQVNUCi0jZGVmaW5lIElOVFgJCQkweEZGCQkJLyogbm90IHZhbGlkICovCi0KIC8qIFByb2dyYW1tYWJsZSBDb3VudGVycyAwIGFuZCAxICovCiAjZGVmaW5lIFNZU19CQVNFCQkweEIxOTAwMDAwCiAjZGVmaW5lIFNZU19DT1VOVEVSX0NOVFJMCShTWVNfQkFTRSArIDB4MTQpCkBAIC0xMjMxLDE0ICsxMjU2LDYgQEAKICNkZWZpbmUgTUFDX1JYX0JVRkYzX1NUQVRVUwkweDMwCiAjZGVmaW5lIE1BQ19SWF9CVUZGM19BRERSCTB4MzQKIAotLyogVUFSVFMgMC0zICovCi0jZGVmaW5lIFVBUlRfQkFTRQkJVUFSVDBfQUREUgotI2lmZGVmCUNPTkZJR19TT0NfQVUxMjAwCi0jZGVmaW5lIFVBUlRfREVCVUdfQkFTRSAJVUFSVDFfQUREUgotI2Vsc2UKLSNkZWZpbmUgVUFSVF9ERUJVR19CQVNFIAlVQVJUM19BRERSCi0jZW5kaWYKLQogI2RlZmluZSBVQVJUX1JYCQkwCS8qIFJlY2VpdmUgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfVFgJCTQJLyogVHJhbnNtaXQgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfSUVSCTgJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwpAQCAtMTI1MSw4NCArMTI2OCw2IEBACiAjZGVmaW5lIFVBUlRfQ0xLCTB4MjgJLyogQmF1ZCBSYXRlIENsb2NrIERpdmlkZXIgKi8KICNkZWZpbmUgVUFSVF9NT0RfQ05UUkwJMHgxMDAJLyogTW9kdWxlIENvbnRyb2wgKi8KIAotI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTwkweDAxIC8qIEVuYWJsZSB0aGUgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSCTB4MDIgLyogQ2xlYXIgdGhlIFJDVlIgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9YTUlUCTB4MDQgLyogQ2xlYXIgdGhlIFhNSVQgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUCTB4MDggLyogRm9yIERNQSBhcHBsaWNhdGlvbnMgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl9NQVNLCTB4RjAgLyogTWFzayBmb3IgdGhlIEZJRk8gdHJpZ2dlciByYW5nZSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMQkweDAwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfNAkweDQwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfOAkweDgwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgOCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMTQgICAweEEwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMTQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzAJMHgwMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCAwICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl80CTB4MTAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfOCAgICAweDIwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDggKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzEyCTB4MzAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMTIgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX0xDUl9TQkMJMHg0MAkvKiBTZXQgYnJlYWsgY29udHJvbCAqLwotI2RlZmluZSBVQVJUX0xDUl9TUEFSCTB4MjAJLyogU3RpY2sgcGFyaXR5ICg/KSAqLwotI2RlZmluZSBVQVJUX0xDUl9FUEFSCTB4MTAJLyogRXZlbiBwYXJpdHkgc2VsZWN0ICovCi0jZGVmaW5lIFVBUlRfTENSX1BBUklUWQkweDA4CS8qIFBhcml0eSBFbmFibGUgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU1RPUAkweDA0CS8qIFN0b3AgYml0czogMD0xIHN0b3AgYml0LCAxPSAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONSAgMHgwMAkvKiBXb3JkbGVuZ3RoOiA1IGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgIDB4MDEJLyogV29yZGxlbmd0aDogNiBiaXRzICovCi0jZGVmaW5lIFVBUlRfTENSX1dMRU43ICAweDAyCS8qIFdvcmRsZW5ndGg6IDcgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVOOCAgMHgwMwkvKiBXb3JkbGVuZ3RoOiA4IGJpdHMgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTFNSX1RFTVQJMHg0MAkvKiBUcmFuc21pdHRlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9USFJFCTB4MjAJLyogVHJhbnNtaXQtaG9sZC1yZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9CSQkweDEwCS8qIEJyZWFrIGludGVycnVwdCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRkUJMHgwOAkvKiBGcmFtZSBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfUEUJMHgwNAkvKiBQYXJpdHkgZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX09FCTB4MDIJLyogT3ZlcnJ1biBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRFIJMHgwMQkvKiBSZWNlaXZlciBkYXRhIHJlYWR5ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UCTB4MDEJLyogTm8gaW50ZXJydXB0cyBwZW5kaW5nICovCi0jZGVmaW5lIFVBUlRfSUlSX0lECTB4MDYJLyogTWFzayBmb3IgdGhlIGludGVycnVwdCBJRCAqLwotI2RlZmluZSBVQVJUX0lJUl9NU0kJMHgwMAkvKiBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1RIUkkJMHgwMgkvKiBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JESQkweDA0CS8qIFJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JMU0kJMHgwNgkvKiBSZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JRVJfTVNJCTB4MDgJLyogRW5hYmxlIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkxTSQkweDA0CS8qIEVuYWJsZSByZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfVEhSSQkweDAyCS8qIEVuYWJsZSBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGludC4gKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkRJCTB4MDEJLyogRW5hYmxlIHJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTUNSX0xPT1AJMHgxMAkvKiBFbmFibGUgbG9vcGJhY2sgdGVzdCBtb2RlICovCi0jZGVmaW5lIFVBUlRfTUNSX09VVDIJMHgwOAkvKiBPdXQyIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfT1VUMQkweDA0CS8qIE91dDEgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9SVFMJMHgwMgkvKiBSVFMgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9EVFIJMHgwMQkvKiBEVFIgY29tcGxlbWVudCAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTVNSX0RDRAkweDgwCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfUkkJMHg0MAkvKiBSaW5nIEluZGljYXRvciAqLwotI2RlZmluZSBVQVJUX01TUl9EU1IJMHgyMAkvKiBEYXRhIFNldCBSZWFkeSAqLwotI2RlZmluZSBVQVJUX01TUl9DVFMJMHgxMAkvKiBDbGVhciB0byBTZW5kICovCi0jZGVmaW5lIFVBUlRfTVNSX0REQ0QJMHgwOAkvKiBEZWx0YSBEQ0QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfVEVSSQkweDA0CS8qIFRyYWlsaW5nIGVkZ2UgcmluZyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRERTUgkweDAyCS8qIERlbHRhIERTUiAqLwotI2RlZmluZSBVQVJUX01TUl9EQ1RTCTB4MDEJLyogRGVsdGEgQ1RTICovCi0jZGVmaW5lIFVBUlRfTVNSX0FOWV9ERUxUQSAweDBGCS8qIEFueSBvZiB0aGUgZGVsdGEgYml0cyEgKi8KLQogLyogU1NJTyAqLwogI2RlZmluZSBTU0kwX1NUQVRVUwkJMHhCMTYwMDAwMAogIyAgZGVmaW5lIFNTSV9TVEFUVVNfQkYgCSgxIDw8IDQpCkBAIC0xNzIwLDcgKzE2NTksNyBAQAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQJMHgwMDAwMTAwMAkvKiBza2lwIGxlZ2FjeSBwcm9iaW5nICovCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZWxzZSAvKiBBdTEwMDAgYW5kIEF1MTEwMCBhbmQgQXUxMjAwICovCiAKQEAgLTE3MjgsNyArMTY2Nyw3IEBACiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZGVmaW5lIFBDSV9JT19TVEFSVAkwCiAjZGVmaW5lIFBDSV9JT19FTkQJMApAQCAtMTczOSw1MyArMTY3OCw0IEBACiAKICNlbmRpZgogCi0jaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgewotCS8qIDB4MDAwMCAqLyB1MzIgdG95dHJpbTsKLQkvKiAweDAwMDQgKi8gdTMyIHRveXdyaXRlOwotCS8qIDB4MDAwOCAqLyB1MzIgdG95bWF0Y2gwOwotCS8qIDB4MDAwQyAqLyB1MzIgdG95bWF0Y2gxOwotCS8qIDB4MDAxMCAqLyB1MzIgdG95bWF0Y2gyOwotCS8qIDB4MDAxNCAqLyB1MzIgY250cmN0cmw7Ci0JLyogMHgwMDE4ICovIHUzMiBzY3JhdGNoMDsKLQkvKiAweDAwMUMgKi8gdTMyIHNjcmF0Y2gxOwotCS8qIDB4MDAyMCAqLyB1MzIgZnJlcWN0cmwwOwotCS8qIDB4MDAyNCAqLyB1MzIgZnJlcWN0cmwxOwotCS8qIDB4MDAyOCAqLyB1MzIgY2xrc3JjOwotCS8qIDB4MDAyQyAqLyB1MzIgcGluZnVuYzsKLQkvKiAweDAwMzAgKi8gdTMyIHJlc2VydmVkMDsKLQkvKiAweDAwMzQgKi8gdTMyIHdha2Vtc2s7Ci0JLyogMHgwMDM4ICovIHUzMiBlbmRpYW47Ci0JLyogMHgwMDNDICovIHUzMiBwb3dlcmN0cmw7Ci0JLyogMHgwMDQwICovIHUzMiB0b3lyZWFkOwotCS8qIDB4MDA0NCAqLyB1MzIgcnRjdHJpbTsKLQkvKiAweDAwNDggKi8gdTMyIHJ0Y3dyaXRlOwotCS8qIDB4MDA0QyAqLyB1MzIgcnRjbWF0Y2gwOwotCS8qIDB4MDA1MCAqLyB1MzIgcnRjbWF0Y2gxOwotCS8qIDB4MDA1NCAqLyB1MzIgcnRjbWF0Y2gyOwotCS8qIDB4MDA1OCAqLyB1MzIgcnRjcmVhZDsKLQkvKiAweDAwNUMgKi8gdTMyIHdha2VzcmM7Ci0JLyogMHgwMDYwICovIHUzMiBjcHVwbGw7Ci0JLyogMHgwMDY0ICovIHUzMiBhdXhwbGw7Ci0JLyogMHgwMDY4ICovIHUzMiByZXNlcnZlZDE7Ci0JLyogMHgwMDZDICovIHUzMiByZXNlcnZlZDI7Ci0JLyogMHgwMDcwICovIHUzMiByZXNlcnZlZDM7Ci0JLyogMHgwMDc0ICovIHUzMiByZXNlcnZlZDQ7Ci0JLyogMHgwMDc4ICovIHUzMiBzbHBwd3I7Ci0JLyogMHgwMDdDICovIHUzMiBzbGVlcDsKLQkvKiAweDAwODAgKi8gdTMyIHJlc2VydmVkNVszMl07Ci0JLyogMHgwMTAwICovIHUzMiB0cmlvdXRyZDsKLSNkZWZpbmUgdHJpb3V0Y2xyIHRyaW91dHJkCi0JLyogMHgwMTA0ICovIHUzMiByZXNlcnZlZDY7Ci0JLyogMHgwMTA4ICovIHUzMiBvdXRwdXRyZDsKLSNkZWZpbmUgb3V0cHV0c2V0IG91dHB1dHJkCi0JLyogMHgwMTBDICovIHUzMiBvdXRwdXRjbHI7Ci0JLyogMHgwMTEwICovIHUzMiBwaW5zdGF0ZXJkOwotI2RlZmluZSBwaW5pbnB1dGVuIHBpbnN0YXRlcmQKLX0gQVUxWDAwX1NZUzsKLQotc3RhdGljIEFVMVgwMF9TWVMgKiBjb25zdCBzeXMgPSAoQVUxWDAwX1NZUyAqKVNZU19CQVNFOwotCi0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaAppbmRleCBjMzVlMjA5Li45NDAwMGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlpbnQoKmNhcmRfcmVhZG9ubHkpKHZvaWQgKm1tY19ob3N0KTsKIAl2b2lkKCpzZXRfcG93ZXIpKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpOwogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZDsKKwl1bnNpZ25lZCBsb25nIG1hc2tfaG9zdF9jYXBzOwogfTsKIAogI2RlZmluZSBTRDBfQkFTRQkweEIwNjAwMDAwCkBAIC0yMDUsNCArMjA2LDMgQEAKIAogCiAjZW5kaWYgLyogX19BU01fQVUxMTAwX01NQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAppbmRleCBkMjA2MDAwLi44YzZiMTEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCkBAIC0zMzksOCArMzM5LDggQEAKIHUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcyk7CiAKIC8qIFB1dCBidWZmZXJzIG9uIHNvdXJjZS9kZXN0aW5hdGlvbiBkZXNjcmlwdG9ycy4gKi8KLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwotdTMyIF9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwordTMyIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwordTMyIGF1MXh4eF9kYmRtYV9wdXRfZGVzdCh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKIAogLyogR2V0IGEgYnVmZmVyIGZyb20gdGhlIGRlc3RpbmF0aW9uIGRlc2NyaXB0b3IuICovCiB1MzIgYXUxeHh4X2RiZG1hX2dldF9kZXN0KHUzMiBjaGFuaWQsIHZvaWQgKipidWYsIGludCAqbmJ5dGVzKTsKQEAgLTM2MywyNSArMzYzLDYgQEAKIHZvaWQgYXUxeHh4X2RiZG1hX3Jlc3VtZSh2b2lkKTsKICNlbmRpZgogCi0KLS8qCi0gKiBTb21lIGNvbXBhdGliaWx0eSBtYWNyb3MgLS0gbmVlZGVkIHRvIG1ha2UgY2hhbmdlcyB0byBBUEkKLSAqIHdpdGhvdXQgYnJlYWtpbmcgZXhpc3RpbmcgZHJpdmVycy4KLSAqLwotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFuaWQsIGJ1ZiwgbmJ5dGVzKQkJCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcywgRERNQV9GTEFHU19JRSkKLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2VfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCi0jZGVmaW5lIHB1dF9zb3VyY2VfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCQkJXAotCWF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzKQkJCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5pZCwgYnVmLCBuYnl0ZXMsIERETUFfRkxBR1NfSUUpCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykgCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotI2RlZmluZSBwdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykJCQlcCi0JYXUxeHh4X2RiZG1hX3B1dF9kZXN0X2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotCiAvKgogICoJRmxhZ3MgZm9yIHRoZSBwdXRfc291cmNlL3B1dF9kZXN0IGZ1bmN0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlOWI3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfX0FVMVgwMF9FVEhfREFUQV9ICisjZGVmaW5lIF9fQVUxWDAwX0VUSF9EQVRBX0gKKworLyogUGxhdGZvcm0gc3BlY2lmaWMgUEhZIGNvbmZpZ3VyYXRpb24gcGFzc2VkIHRvIHRoZSBNQUMgZHJpdmVyICovCitzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgcGh5X3N0YXRpY19jb25maWc7CisJaW50IHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCWludCBwaHkxX3NlYXJjaF9tYWMwOworCWludCBwaHlfYWRkcjsKKwlpbnQgcGh5X2J1c2lkOworCWludCBwaHlfaXJxOworfTsKKwordm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgcG9ydCwKKwkJCXN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKKworI2VuZGlmIC8qIF9fQVUxWDAwX0VUSF9EQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKaW5kZXggOTE1OTVmYS4uNjJkMmYxMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKQEAgLTM1LDE1ICszNSwxMyBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTAwMAogc3RhdGljIGlubGluZSBpbnQgYXUxMDAwX2lycV90b19ncGlvKGludCBpcnEpCiB7Ci0JaWYgKChpcnEgPj0gQVUxMDAwX0dQSU9fMCkgJiYgKGlycSA8PSBBVTEwMDBfR1BJT18zMSkpCi0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOworCWlmICgoaXJxID49IEFVMTAwMF9HUElPMF9JTlQpICYmIChpcnEgPD0gQVUxMDAwX0dQSU8zMV9JTlQpKQorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPMF9JTlQpICsgMDsKIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxNTAwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTcxLDI3ICs2OSwyNSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAogc3RhdGljIGlubGluZSBpbnQgYXUxNTAwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzE1OgotCWNhc2UgQVUxNTAwX0dQSU9fMjA6Ci0JY2FzZSBBVTE1MDBfR1BJT18yMyAuLi4gQVUxNTAwX0dQSU9fMjg6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMjAwIC4uLiBBVTE1MDBfR1BJT18yMDM6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjAwKSArIDA7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDQgLi4uIEFVMTUwMF9HUElPXzIwNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDQpICsgNDsKLQljYXNlIEFVMTUwMF9HUElPXzIwNiAuLi4gQVUxNTAwX0dQSU9fMjA3OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwNikgKyA2OwotCWNhc2UgQVUxNTAwX0dQSU9fMjA4XzIxNToKKwljYXNlIEFVMTUwMF9HUElPMF9JTlQgLi4uIEFVMTUwMF9HUElPMTVfSU5UOgorCWNhc2UgQVUxNTAwX0dQSU8yMF9JTlQ6CisJY2FzZSBBVTE1MDBfR1BJTzIzX0lOVCAuLi4gQVUxNTAwX0dQSU8yOF9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxNTAwX0dQSU8yMDBfSU5UIC4uLiBBVTE1MDBfR1BJTzIwM19JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTE1MDBfR1BJTzIwNF9JTlQgLi4uIEFVMTUwMF9HUElPMjA1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzIwNF9JTlQpICsgNDsKKwljYXNlIEFVMTUwMF9HUElPMjA2X0lOVCAuLi4gQVUxNTAwX0dQSU8yMDdfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMjA2X0lOVCkgKyA2OworCWNhc2UgQVUxNTAwX0dQSU8yMDhfMjE1X0lOVDoKIAkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIDg7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTExMDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTA4LDE5ICsxMDQsMTcgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTEwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18zMToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTExMDBfR1BJT18yMDhfMjE1OgorCWNhc2UgQVUxMTAwX0dQSU8wX0lOVCAuLi4gQVUxMTAwX0dQSU8zMV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMTAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxMTAwX0dQSU8yMDhfMjE1X0lOVDoKIAkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIDg7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTE1NTBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTQ5LDI0ICsxNDMsMjIgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTU1MF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18xNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTE1NTBfR1BJT18yMDA6Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDFfMjA1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMTYgLi4uIEFVMTUwMF9HUElPXzI4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzE2KSArIDE2OwotCWNhc2UgQVUxNTAwX0dQSU9fMjA2IC4uLiBBVTE1MDBfR1BJT18yMDhfMjE4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwNikgKyA2OworCWNhc2UgQVUxNTUwX0dQSU8wX0lOVCAuLi4gQVUxNTUwX0dQSU8xNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxNTUwX0dQSU8yMDBfSU5UOgorCWNhc2UgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzIwMF9JTlQpICsgMDsKKwljYXNlIEFVMTU1MF9HUElPMTZfSU5UIC4uLiBBVTE1NTBfR1BJTzI4X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzE2X0lOVCkgKyAxNjsKKwljYXNlIEFVMTU1MF9HUElPMjA2X0lOVCAuLi4gQVUxNTUwX0dQSU8yMDhfMjE1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzIwNl9JTlQpICsgNjsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTIwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC0xODcsMjMgKzE3OSwyMSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAogc3RhdGljIGlubGluZSBpbnQgYXUxMjAwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzMxOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTIwMF9HUElPXzIwMCAuLi4gQVUxMjAwX0dQSU9fMjAyOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxMjAwX0dQSU9fMjAzOgorCWNhc2UgQVUxMjAwX0dQSU8wX0lOVCAuLi4gQVUxMjAwX0dQSU8zMV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxMjAwX0dQSU8yMDBfSU5UIC4uLiBBVTEyMDBfR1BJTzIwMl9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTEyMDBfR1BJTzIwM19JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAzOwotCWNhc2UgQVUxMjAwX0dQSU9fMjA0IC4uLiBBVTEyMDBfR1BJT18yMDhfMjE1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPXzIwNCkgKyA0OworCWNhc2UgQVUxMjAwX0dQSU8yMDRfSU5UIC4uLiBBVTEyMDBfR1BJTzIwOF8yMTVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMjA0X0lOVCkgKyA0OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogLyoKICAqIEdQSU8xIGJsb2NrIG1hY3JvcyBmb3IgY29tbW9uIGxpbnV4IGdwaW8gZnVuY3Rpb25zLgpAQCAtMjQ2LDE5ICsyMzYsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlyZXR1cm4gYXUxMDAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlyZXR1cm4gYXUxNTUwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gYXUxMTAwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlyZXR1cm4gYXUxMjAwX2dwaW8xX3RvX2lycShncGlvKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKgpAQCAtMzE2LDE5ICszMDYsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMl90b19pcnEoaW50IGdwaW8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlyZXR1cm4gYXUxMDAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlyZXR1cm4gYXUxNTUwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gYXUxMTAwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlyZXR1cm4gYXUxMjAwX2dwaW8yX3RvX2lycShncGlvKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM4NCwxMCArMzc0LDEzIEBACiAKIAlncGlvMiAtPSBBTENIRU1ZX0dQSU8yX0JBU0U7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQogCS8qIEF1MTEwMC9BdTE1MDAgaGF2ZSBHUElPMjA4LTIxNSBlbmFibGUgYml0cyBhdCAwLi43ICovCi0JZ3BpbzIgLT0gODsKLSNlbmRpZgorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCWdwaW8yIC09IDg7CisJfQorCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCV9fYWxjaGVteV9ncGlvMl9tb2RfaW50KGdwaW8yLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC00MDUsMTAgKzM5OCwxMyBAQAogCiAJZ3BpbzIgLT0gQUxDSEVNWV9HUElPMl9CQVNFOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKIAkvKiBBdTExMDAvQXUxNTAwIGhhdmUgR1BJTzIwOC0yMTUgZW5hYmxlIGJpdHMgYXQgMC4uNyAqLwotCWdwaW8yIC09IDg7Ci0jZW5kaWYKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlncGlvMiAtPSA4OworCX0KKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX2FsY2hlbXlfZ3BpbzJfbW9kX2ludChncGlvMiwgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNDk0LDE5ICs0OTAsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQlyZXR1cm4gYXUxMTAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlyZXR1cm4gYXUxMjAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlyZXR1cm4gYXUxNTAwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9pcnFfdG9fZ3BpbyhpcnEpOworCX0KIAlyZXR1cm4gLUVOWElPOwotI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKaW5kZXggZjliN2Q0MS4uYzNmNjBjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQUxDSEVNWV9HUElPX0hfCiAjZGVmaW5lIF9BTENIRU1ZX0dQSU9fSF8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FMQ0hFTVlfR1BJT19BVTEwMDApCisjaWYgZGVmaW5lZChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaAppbmRleCAzNjRjZWEyLi43NWE5NGFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCiBleHRlcm4gcGh5c190IF9fZml4dXBfYmlncGh5c19hZGRyKHBoeXNfdCwgcGh5c190KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QgcGh5c19hZGRyLCBwaHlzX3Qgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oCmluZGV4IGUzODcxNTUuLjRjMGUwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaApAQCAtNiw3ICs2LDYgQEAKIGV4dGVybiBjaGFyICoqcHJvbV9lbnZwOwogCiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKLWV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSk7CiBleHRlcm4gaW50IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoY2hhciAqZXRoZXJuZXRfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oCmluZGV4IGVkNGNjZWMuLjg1ZmQyNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaApAQCAtNzcwLDQgKzc3MCwzIEBACiAjZGVmaW5lIERNSVBTUExMQ0ZHX04yX01BU0sJCSgweDcgPDwgRE1JUFNQTExDRkdfTjJfU0hJRlQpCiAKICNlbmRpZiAvKiBCQ002M1hYX1JFR1NfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggNDI1ZTcwOC4uYmJmMDU0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC01OCw2ICs1OCw5IEBACiAjZGVmaW5lIGNwdV9oYXNfdmludAkJMAogI2RlZmluZSBjcHVfaGFzX3ZlaWMJCTAKICNkZWZpbmUgY3B1X2h3cmVuYV9pbXBsX2JpdHMJMHhjMDAwMDAwMAorCisjZGVmaW5lIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpIChjcHVfZGF0YVswXS5jcHV0eXBlID09IENQVV9DQVZJVU1fT0NURU9OX1BMVVMpCisKICNkZWZpbmUgQVJDSF9IQVNfUkVBRF9DVVJSRU5UX1RJTUVSIDEKICNkZWZpbmUgQVJDSF9IQVNfSVJRX1BFUl9DUFUJMQogI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSCAxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvYmNzci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThkMmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIGJjc3IuaCAtLSBEYjF4eHgvUGIxeHh4IERldmJvYXJkIENQTEQgcmVnaXN0ZXJzICgiQkNTUiIpIGFic3RyYWN0aW9uLgorICoKKyAqIEFsbCBBbGNoZW15IGRldmVsb3BtZW50IGJvYXJkcyAoZXhjZXB0LCBvZiBjb3Vyc2UsIHRoZSB3ZWlyZCBQQjEwMDApCisgKiBoYXZlIGEgZmV3IHJlZ2lzdGVycyBpbiBhIENQTEQgd2l0aCBzdGFuZGFyZGlzZWQgbGF5b3V0OyB0aGV5IG1vc3RseQorICogb25seSBkaWZmZXIgaW4gYmFzZSBhZGRyZXNzIGFuZCBiaXQgbWVhbmluZ3MgaW4gdGhlIFJFU0VUUyBhbmQgQk9BUkQKKyAqIHJlZ2lzdGVycy4KKyAqCisgKiBBbGwgZGF0YSB0YWtlbiBmcm9tIHRoZSBvZmZpY2lhbCBBTUQgYm9hcmQgZG9jdW1lbnRhdGlvbiBzaGVldHMuCisgKi8KKworI2lmbmRlZiBfREIxWFhYX0JDU1JfSF8KKyNkZWZpbmUgX0RCMVhYWF9CQ1NSX0hfCisKKworLyogQkNTUiBiYXNlIGFkZHJlc3NlcyBvbiB2YXJpb3VzIGJvYXJkcy4gQkNTUiBiYXNlIDIgcmVmZXJzIHRvIHRoZQorICogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgSEVYTEVEUyByZWdpc3Rlciwgd2hpY2ggaXMgdXN1YWxseQorICogYSB2YXJpYWJsZSBvZmZzZXQgZnJvbSB0aGUgV0hPQU1JIHJlZ2lzdGVyLgorICovCisKKy8qIERCMTAwMCwgREIxMTAwLCBEQjE1MDAsIFBCMTEwMCwgUEIxNTAwICovCisjZGVmaW5lIERCMTAwMF9CQ1NSX1BIWVNfQUREUgkweDBFMDAwMDAwCisjZGVmaW5lIERCMTAwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMTAwMDAwMAorCisjZGVmaW5lIERCMTU1MF9CQ1NSX1BIWVNfQUREUgkweDBGMDAwMDAwCisjZGVmaW5lIERCMTU1MF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisjZGVmaW5lIFBCMTU1MF9CQ1NSX1BIWVNfQUREUgkweDBGMDAwMDAwCisjZGVmaW5lIFBCMTU1MF9CQ1NSX0hFWExFRF9PRlMJMHgwMDgwMDAwMAorCisjZGVmaW5lIERCMTIwMF9CQ1NSX1BIWVNfQUREUgkweDE5ODAwMDAwCisjZGVmaW5lIERCMTIwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisjZGVmaW5lIFBCMTIwMF9CQ1NSX1BIWVNfQUREUgkweDBEODAwMDAwCisjZGVmaW5lIFBCMTIwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisKK2VudW0gYmNzcl9pZCB7CisJLyogQkNTUiBiYXNlIDEgKi8KKwlCQ1NSX1dIT0FNSQk9IDAsCisJQkNTUl9TVEFUVVMsCisJQkNTUl9TV0lUQ0hFUywKKwlCQ1NSX1JFU0VUUywKKwlCQ1NSX1BDTUNJQSwKKwlCQ1NSX0JPQVJELAorCUJDU1JfTEVEUywKKwlCQ1NSX1NZU1RFTSwKKwkvKiBBdTEyMDAvMTMwMCBiYXNlZCBib2FyZHMgKi8KKwlCQ1NSX0lOVENMUiwKKwlCQ1NSX0lOVFNFVCwKKwlCQ1NSX01BU0tDTFIsCisJQkNTUl9NQVNLU0VULAorCUJDU1JfU0lHU1RBVCwKKwlCQ1NSX0lOVFNUQVQsCisKKwkvKiBCQ1NSIGJhc2UgMiAqLworCUJDU1JfSEVYTEVEUywKKwlCQ1NSX1JTVkQxLAorCUJDU1JfSEVYQ0xFQVIsCisKKwlCQ1NSX0NOVCwKK307CisKKy8qIHJlZ2lzdGVyIG9mZnNldHMsIHZhbGlkIGZvciBhbGwgRGIxeHh4L1BiMXh4eCBib2FyZHMgKi8KKyNkZWZpbmUgQkNTUl9SRUdfV0hPQU1JCQkweDAwCisjZGVmaW5lIEJDU1JfUkVHX1NUQVRVUwkJMHgwNAorI2RlZmluZSBCQ1NSX1JFR19TV0lUQ0hFUwkweDA4CisjZGVmaW5lIEJDU1JfUkVHX1JFU0VUUwkJMHgwYworI2RlZmluZSBCQ1NSX1JFR19QQ01DSUEJCTB4MTAKKyNkZWZpbmUgQkNTUl9SRUdfQk9BUkQJCTB4MTQKKyNkZWZpbmUgQkNTUl9SRUdfTEVEUwkJMHgxOAorI2RlZmluZSBCQ1NSX1JFR19TWVNURU0JCTB4MWMKKy8qIEF1MTIwMC9BdTEzMDAgYmFzZWQgYm9hcmRzOiBDUExEIElSUSBtdXhlciAqLworI2RlZmluZSBCQ1NSX1JFR19JTlRDTFIJCTB4MjAKKyNkZWZpbmUgQkNTUl9SRUdfSU5UU0VUCQkweDI0CisjZGVmaW5lIEJDU1JfUkVHX01BU0tDTFIJMHgyOAorI2RlZmluZSBCQ1NSX1JFR19NQVNLU0VUCTB4MmMKKyNkZWZpbmUgQkNTUl9SRUdfU0lHU1RBVAkweDMwCisjZGVmaW5lIEJDU1JfUkVHX0lOVFNUQVQJMHgzNAorCisvKiBoZXhsZWQgY29udHJvbCwgb2Zmc2V0IGZyb20gQkNTUiBiYXNlIDIgKi8KKyNkZWZpbmUgQkNTUl9SRUdfSEVYTEVEUwkweDAwCisjZGVmaW5lIEJDU1JfUkVHX0hFWENMRUFSCTB4MDgKKworLyoKKyAqIFJlZ2lzdGVyIEJpdHMgYW5kIFBpZWNlcy4KKyAqLworI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lEKHgpCQkoKHgpICYgMHhmKQorI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExEKHgpCQkoKCh4KSA+PiA0KSAmIDB4ZikKKyNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQoeCkJCSgoKHgpID4+IDgpICYgMHhmKQorCisvKiByZWdpc3RlciAiV0hPQU1JIiBiaXRzIDExOjggaWRlbnRpZnkgdGhlIGJvYXJkICovCitlbnVtIGJjc3Jfd2hvYW1pX2JvYXJkcyB7CisJQkNTUl9XSE9BTUlfUEIxNTAwID0gMSwKKwlCQ1NSX1dIT0FNSV9QQjE1MDBSMiwKKwlCQ1NSX1dIT0FNSV9QQjExMDAsCisJQkNTUl9XSE9BTUlfREIxMDAwLAorCUJDU1JfV0hPQU1JX0RCMTEwMCwKKwlCQ1NSX1dIT0FNSV9EQjE1MDAsCisJQkNTUl9XSE9BTUlfREIxNTUwLAorCUJDU1JfV0hPQU1JX1BCMTU1MF9ERFIsCisJQkNTUl9XSE9BTUlfUEIxNTUwID0gQkNTUl9XSE9BTUlfUEIxNTUwX0REUiwKKwlCQ1NSX1dIT0FNSV9QQjE1NTBfU0RSLAorCUJDU1JfV0hPQU1JX1BCMTIwMF9ERFIxLAorCUJDU1JfV0hPQU1JX1BCMTIwMCA9IEJDU1JfV0hPQU1JX1BCMTIwMF9ERFIxLAorCUJDU1JfV0hPQU1JX1BCMTIwMF9ERFIyLAorCUJDU1JfV0hPQU1JX0RCMTIwMCwKK307CisKKy8qIFNUQVRVUyByZWcuICBVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCB0aGV5J3JlIHZhbGlkIG9uIGFsbCBib2FyZHMuCisgKiBQQjEyMDAgPSBEQjEyMDAuCisgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwVlMJCTB4MDAwMworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFWUwkJMHgwMDBDCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMEZJCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxRkkJCTB4MDAyMAorI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfU1dBUEJPT1QJMHgwMDQwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NSQU1XSURUSAkJMHgwMDgwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkJMHgwMTAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJCTB4MDQwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19TRDBXUAkJMHgwNDAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19TRDFXUAkJMHgwODAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1VTQk9UR0lECQkweDA4MDAJLyogUEIvREIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTAwMF9TV0FQQk9PVAkweDIwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1NXQVBCT09UCTB4MDA0MAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfSURFQ0JMSUQJCTB4MDIwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1UwUlhECTB4MTAwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1UxUlhECTB4MjAwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hERU4JCTB4QzAwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19EQjE1NTBfVTBSWEQJMHgxMDAwCS8qIERCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjE1NTBfVTNSWEQJMHgyMDAwCS8qIERCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTBSWEQJMHgxMDAwCS8qIFBCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTFSWEQJMHgyMDAwCS8qIFBCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTNSWEQJMHg4MDAwCS8qIFBCMTU1MCAqLworCisKKy8qIERCL1BCMTAwMCwxMTAwLDE1MDAsMTU1MCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkwCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMQkJMHgwMDAyCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkJMHgwMDA0CisjZGVmaW5lIEJDU1JfUkVTRVRTX0ZJUl9TRUwJCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSwkweEMwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEwJMHgwMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BCMTU1MF9XU0NGU00JMHgyMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYJMHg0MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8yXzMJMHg4MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8xXzMJMHhDMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RNQVJFUQkJMHg4MDAwCS8qIFBCMTU1MCAqLworCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJTTY2RU4JCTB4MDAwMQorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkJMHgwMDQwCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QxUFdSCQkweDAwODAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNMzMJCTB4MDEwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUVYVEFSQgkJMHgwMjAwCisjZGVmaW5lIEJDU1JfQk9BUkRfR1BJTzIwMFJTVAkJMHgwNDAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0xLT1VUCQkweDA4MDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lDRkcJCTB4MTAwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1NQSVNFTAkJMHg0MDAwCS8qIFBCL0RCMTU1MCAqLworI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFdQCQkweDQwMDAJLyogREIxMTAwICovCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QxV1AJCTB4ODAwMAkvKiBEQjExMDAgKi8KKworCisvKiBEQi9QQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkJMHgwMDAxCisjZGVmaW5lIEJDU1JfUkVTRVRTX0NBTUVSQQkJMHgwMDAyCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkJMHgwMDA0CisjZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJCTB4MDAwOAorI2RlZmluZSBCQ1NSX1JFU0VUU19UVgkJCTB4MDAxMAkvKiBEQjEyMDAgKi8KKy8qIE5vdCByZXNldHMgYnV0IGluIHRoZSBzYW1lIHJlZ2lzdGVyICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BXTVIxTVVYCQkweDA4MDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BCMTIwMF9XU0NGU00JMHgwODAwCS8qIFBCMTIwMCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QU0MwTVVYCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUFNDMU1VWAkJMHgyMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkJMHg0MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1NEMU1VWAkJMHg4MDAwCS8qIFBCMTIwMCAqLworCisjZGVmaW5lIEJDU1JfQk9BUkRfTENEVkVFCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJCTB4MDAwMgorI2RlZmluZSBCQ1NSX0JPQVJEX0xDREJMCQkweDAwMDQKKyNkZWZpbmUgQkNTUl9CT0FSRF9DQU1TTkFQCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJCTB4MDAyMAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkJMHgwMDQwCisKKworI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUAkJMHgwMEZGCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCQkweDAwNDAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkJMHgwMDIwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJCTB4MDAxMAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CQkweDAwMDgKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkJMHgwMDA0CisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CQkweDAwMDEKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJCTB4MEYwMAorCisKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCQkweDAwMEMKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JCTB4MDAxMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJCTB4MDMwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJCTB4MEMwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkJMHgxMDAwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkJMHg4MDAwCisKKworI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJCTB4MDAwMworI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJCTB4MDEwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJCTB4MDIwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJCTB4MDQwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJCTB4MDgwMAorCisKKyNkZWZpbmUgQkNTUl9TWVNURU1fUkVTRVQJCTB4ODAwMAkvKiBjbGVhciB0byByZXNldCAqLworI2RlZmluZSBCQ1NSX1NZU1RFTV9QV1JPRkYJCTB4NDAwMAkvKiBzZXQgdG8gcG93ZXIgb2ZmICovCisjZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJCTB4MDAxRgkvKiBQQjF4eHggYm9hcmRzICovCisKKworCisKKy8qIGluaXRpYWxpemUgQkNTUiBmb3IgYSBib2FyZC4gUHJvdmlkZSB0aGUgUEhZU0lDQUwgYWRkcmVzc2VzIG9mIGJvdGgKKyAqIEJDU1Igc3BhY2VzLgorICovCit2b2lkIF9faW5pdCBiY3NyX2luaXQodW5zaWduZWQgbG9uZyBiY3NyMV9waHlzLCB1bnNpZ25lZCBsb25nIGJjc3IyX3BoeXMpOworCisvKiByZWFkIGEgYm9hcmQgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIHNob3J0IGJjc3JfcmVhZChlbnVtIGJjc3JfaWQgcmVnKTsKKworLyogd3JpdGUgdG8gYSBib2FyZCByZWdpc3RlciAqLwordm9pZCBiY3NyX3dyaXRlKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCk7CisKKy8qIG1vZGlmeSBhIHJlZ2lzdGVyLiBjbGVhciBiaXRzIHNldCBpbiAnY2xyJywgc2V0IGJpdHMgc2V0IGluICdzZXQnICovCit2b2lkIGJjc3JfbW9kKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IGNsciwgdW5zaWduZWQgc2hvcnQgc2V0KTsKKworLyogaW5zdGFsbCBDUExEIElSUSBkZW11eGVyIChEQjEyMDAvUEIxMjAwKSAqLwordm9pZCBfX2luaXQgYmNzcl9pbml0X2lycShpbnQgY3NjX3N0YXJ0LCBpbnQgY3NjX2VuZCwgaW50IGhvb2tfaXJxKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmgKaW5kZXggMjdmMjYxMC4uMzQwNDI0OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaApAQCAtMjUsMTMzICsyNSw5IEBACiAjZGVmaW5lIF9fQVNNX0RCMTIwMF9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oPgogCi0jZGVmaW5lIERCRE1BX0FDOTdfVFhfQ0hBTglEU0NSX0NNRDBfUFNDMV9UWAotI2RlZmluZSBEQkRNQV9BQzk3X1JYX0NIQU4JRFNDUl9DTUQwX1BTQzFfUlgKLSNkZWZpbmUgREJETUFfSTJTX1RYX0NIQU4JRFNDUl9DTUQwX1BTQzFfVFgKLSNkZWZpbmUgREJETUFfSTJTX1JYX0NIQU4JRFNDUl9DTUQwX1BTQzFfUlgKLQotLyoKLSAqIFNQSSBhbmQgU01CIGFyZSBtdXhlZCBvbiB0aGUgREJBdTEyMDAgYm9hcmQuCi0gKiBSZWZlciB0byBib2FyZCBkb2N1bWVudGF0aW9uLgotICovCi0jZGVmaW5lIFNQSV9QU0NfQkFTRQkJUFNDMF9CQVNFX0FERFIKLSNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzBfQkFTRV9BRERSCi0vKgotICogQUMnOTcgYW5kIEkyUyBhcmUgbXV4ZWQgb24gdGhlIERCQXUxMjAwIGJvYXJkLgotICogUmVmZXIgdG8gYm9hcmQgZG9jdW1lbnRhdGlvbi4KLSAqLwotI2RlZmluZSBBQzk3X1BTQ19CQVNFCQlQU0MxX0JBU0VfQUREUgotI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCi0KLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIAkweEI5ODAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgYm9hcmQ7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBkaXNrX2xlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLQkvKjIwKi8JdTE2IGludGNscjsKLQkJdTE2IHJlc2VydmVkODsKLQkvKjI0Ki8JdTE2IGludHNldDsKLQkJdTE2IHJlc2VydmVkOTsKLQkvKjI4Ki8JdTE2IGludGNscl9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMDsKLQkvKjJDKi8JdTE2IGludHNldF9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMTsKLQotCS8qMzAqLwl1MTYgc2lnX3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTI7Ci0JLyozNCovCXUxNiBpbnRfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMzsKLQkvKjM4Ki8JdTE2IHJlc2VydmVkMTQ7Ci0JCXUxNiByZXNlcnZlZDE1OwotCS8qM0MqLwl1MTYgcmVzZXJ2ZWQxNjsKLQkJdTE2IHJlc2VydmVkMTc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UwUlhECTB4MTAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMVJYRAkweDIwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX09DVEFMCTB4MDBGRgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CTB4MDAwNAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1JFU0VUU19FVEgJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19DQU1FUkEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSURFCQkweDAwMDgKLSNkZWZpbmUgQkNTUl9SRVNFVFNfVFYJCTB4MDAxMAotLyogTm90IHJlc2V0cyBidXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQkNTUl9SRVNFVFNfUFdNUjFNVVgJMHgwODAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzBNVVgJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzFNVVgJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkweDAwMEMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCTB4MDMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWRUUJMHgwMDAxCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkRECTB4MDAwMgotI2RlZmluZSBCQ1NSX0JPQVJEX0xDREJMCTB4MDAwNAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVNOQVAJMHgwMDEwCi0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNUFdSCTB4MDAyMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkweDAwNDAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKLQotI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKLSNkZWZpbmUgQkNTUl9TWVNURU1fUkVTRVQJMHg4MDAwCi0KIC8qIEJpdCBwb3NpdGlvbnMgZm9yIHRoZSBkaWZmZXJlbnQgaW50ZXJydXB0IHNvdXJjZXMgKi8KICNkZWZpbmUgQkNTUl9JTlRfSURFCQkweDAwMDEKICNkZWZpbmUgQkNTUl9JTlRfRVRICQkweDAwMDIKQEAgLTE2OCwxNyArNDQsMTUgQEAKICNkZWZpbmUgQkNTUl9JTlRfU0QwSU5TRVJUCTB4MTAwMAogI2RlZmluZSBCQ1NSX0lOVF9TRDBFSkVDVAkweDIwMDAKIAotI2RlZmluZSBTTUM5MUMxMTFfUEhZU19BRERSCTB4MTkwMDAzMDAKLSNkZWZpbmUgU01DOTFDMTExX0lOVAkJREIxMjAwX0VUSF9JTlQKLQogI2RlZmluZSBJREVfUEhZU19BRERSCQkweDE4ODAwMDAwCiAjZGVmaW5lIElERV9SRUdfU0hJRlQJCTUKLSNkZWZpbmUgSURFX1BIWVNfTEVOCQkoMTYgPDwgSURFX1JFR19TSElGVCkKLSNkZWZpbmUgSURFX0lOVCAJCURCMTIwMF9JREVfSU5UCiAjZGVmaW5lIElERV9ERE1BX1JFUQkJRFNDUl9DTUQwX0RNQV9SRVExCiAjZGVmaW5lIElERV9SUVNJWkUJCTEyOAogCi0jZGVmaW5lIE5BTkRfUEhZU19BRERSCQkweDIwMDAwMDAwCisjZGVmaW5lIERCMTIwMF9JREVfUEhZU19BRERSCUlERV9QSFlTX0FERFIKKyNkZWZpbmUgREIxMjAwX0lERV9QSFlTX0xFTgkoMTYgPDwgSURFX1JFR19TSElGVCkKKyNkZWZpbmUgREIxMjAwX0VUSF9QSFlTX0FERFIJMHgxOTAwMDMwMAorI2RlZmluZSBEQjEyMDBfTkFORF9QSFlTX0FERFIJMHgyMDAwMDAwMAogCiAvKgogICogRXh0ZXJuYWwgSW50ZXJydXB0cyBmb3IgREJBdTEyMDAgYXMgb2YgOC82LzIwMDQuCkBAIC0xODgsNyArNjIsNyBAQAogICogICBFeGFtcGxlOiBJREUgYmlzIHBvcyBpcyAgPSA2NCAtIDY0CiAgKiAgICAgICAgICAgIEVUSCBiaXQgcG9zIGlzICA9IDY1IC0gNjQKICAqLwotZW51bSBleHRlcm5hbF9wYjEyMDBfaW50cyB7CitlbnVtIGV4dGVybmFsX2RiMTIwMF9pbnRzIHsKIAlEQjEyMDBfSU5UX0JFR0lOCT0gQVUxMDAwX01BWF9JTlRSICsgMSwKIAogCURCMTIwMF9JREVfSU5UCQk9IERCMTIwMF9JTlRfQkVHSU4sCkBAIC0yMDksMjIgKzgzLDQgQEAKIAlEQjEyMDBfSU5UX0VORAkJPSBEQjEyMDBfSU5UX0JFR0lOICsgMTUsCiB9OwogCi0KLS8qCi0gKiBEQkF1MTIwMCBzcGVjaWZpYyBQQ01DSUEgZGVmaW5lcyBmb3IgZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCi0gKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpIFwKLQkoKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkgPDwgKChTTE9UKSAqIDgpKQotCi0jZGVmaW5lIEJPQVJEX1BDMF9JTlQJREIxMjAwX1BDMF9JTlQKLSNkZWZpbmUgQk9BUkRfUEMxX0lOVAlEQjEyMDBfUEMxX0lOVAotI2RlZmluZSBCT0FSRF9DQVJEX0lOU0VSVEVEKFNPQ0tFVCkgYmNzci0+c2lnX3N0YXR1cyAmICgxIDw8ICg4ICsgKDIgKiBTT0NLRVQpKSkKLQotLyogTkFORCBjaGlwIHNlbGVjdCAqLwotI2RlZmluZSBOQU5EX0NTIDEKLQogI2VuZGlmIC8qIF9fQVNNX0RCMTIwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmgKaW5kZXggMWE1MTViOC4uYTkxOWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaApAQCAtNDEsMTExICs0MSwxMSBAQAogI2RlZmluZSBTTUJVU19QU0NfQkFTRQkJUFNDMl9CQVNFX0FERFIKICNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MzX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAJMHhBRjAwMDAwMAogI2RlZmluZSBOQU5EX1BIWVNfQUREUgkJMHgyMDAwMDAwMAogCi0jZWxzZQotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgMHhBRTAwMDAwMAogI2VuZGlmCiAKIC8qCi0gKiBPdmVybGF5IGRhdGEgc3RydWN0dXJlIG9mIHRoZSBEQkF1MXgwMCBib2FyZCByZWdpc3RlcnMuCi0gKiBSZWdpc3RlcnMgYXJlIGxvY2F0ZWQgYXQgcGh5c2ljYWwgMEUwMDAweHgsIEtTRUcxIDB4QUUwMDAweHguCi0gKi8KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXVuc2lnbmVkIHNob3J0IHdob2FtaTsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDA7Ci0JLyowNCovCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDE7Ci0JLyowOCovCXVuc2lnbmVkIHNob3J0IHN3aXRjaGVzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMjsKLQkvKjBDKi8JdW5zaWduZWQgc2hvcnQgcmVzZXRzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMzsKLQkvKjEwKi8JdW5zaWduZWQgc2hvcnQgcGNtY2lhOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNDsKLQkvKjE0Ki8JdW5zaWduZWQgc2hvcnQgc3BlY2lmaWM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1bnNpZ25lZCBzaG9ydCBsZWRzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNjsKLQkvKjFDKi8JdW5zaWduZWQgc2hvcnQgc3dyZXNldDsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDc7Ci0KLX0gQkNTUjsKLQotCi0vKgotICogUmVnaXN0ZXIvbWFzayBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJCTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECQkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMFZTCQkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxVlMJCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBGSQkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMUZJCQkweDAwMjAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hERU4JCTB4QzAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQCQkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCQkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJCTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CQkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1JFU0VUU19GSVJfU0VMCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0sJMHhDMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMCTB4MDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMl8zCTB4ODAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMV8zCTB4QzAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCQkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCQkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCQkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCQkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfQk9BUkRfUENJTTY2RU4JCTB4MDAwMQotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMF9QV1IJCTB4MDA0MAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9QV1IJCTB4MDA4MAotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU0zMwkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfR1BJTzIwMFJTVAkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0ZHCQkweDEwMDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBfV1AJCTB4NDAwMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9XUAkJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCQkweDAwMDMKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCQkweDA4MDAKLQotI2RlZmluZSBCQ1NSX1NXUkVTRVRfUkVTRVQJCTB4MDA4MAotCi0vKiBQQ01DSUEgREJBdTF4MDAgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVClcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotLyoKICAqIE5BTkQgZGVmaW5lcwogICoKICAqIFRpbWluZyB2YWx1ZXMgYXMgZGVzY3JpYmVkIGluIGRhdGFib29rLCAqIG5zIHZhbHVlIHN0cmlwcGVkIG9mIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCA5OTQ3ZTU3Yy4uMTYyMTBjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCmluZGV4IDYzMDViZWEuLjIxYzRlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaApAQCAtMiw3ICsyLDcgQEAKICAqIHRoZSByZWFkL3dyaXRlIGludGVyZmFjZXMgZm9yIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpZm5kZWYJX0NTNTUzNl9WU01fSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKaW5kZXggZWU4YmM4My4uMWNmN2IxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCkBAIC0xLDEyICsxLDExIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX0xPT05HU09OX0gKQEAgLTIzLDcgKzIyLDcgQEAKIGV4dGVybiB2b2lkIG1hY2hfcHJlcGFyZV9zaHV0ZG93bih2b2lkKTsKIAogLyogZW52aXJvbm1lbnQgYXJndW1lbnRzIGZyb20gYm9vdGxvYWRlciAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9jbG9ja19mcmVxOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKIC8qIGxvb25nc29uLXNwZWNpZmljIGNvbW1hbmQgbGluZSwgZW52IGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAppbmRleCBhY2Y4MzU5Li40MzIxMzM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCmluZGV4IGU5OTYwZjMuLjNiMjNlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCmluZGV4IGExOTlhNGYuLmJjOTlkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCkBAIC0xLDIzICsxLDEyIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4IFpoYW5nIExlIDxyMGJlcnR6QGdlbnRvby5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CiAgKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEKLSAqIDAyMTM5LCBVU0EuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX1BDSV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWE2MGYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBBbGNoZW15IFNlbWkgUGIxMTAwIFJlZmVycmVuY2UgQm9hcmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2lmbmRlZiBfX0FTTV9QQjExMDBfSAotI2RlZmluZSBfX0FTTV9QQjExMDBfSAotCi0jZGVmaW5lIFBCMTEwMF9JREVOVAkJMHhBRTAwMDAwMAotI2RlZmluZSBCT0FSRF9TVEFUVVNfUkVHCTB4QUUwMDAwMDQKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NFTAkoMSA8PCAxNSkKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NJWgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfU1dBUF9CT09UCSgxIDw8IDEzKQotIyAgZGVmaW5lIFBCMTEwMF9GTEFTSF9XUAkoMSA8PCAxMikKLSMgIGRlZmluZSBQQjExMDBfUk9NX0hfU1RTCSgxIDw8IDExKQotIyAgZGVmaW5lIFBCMTEwMF9ST01fTF9TVFMJKDEgPDwgMTApCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0hfU1RTCSgxIDw8IDkpCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0xfU1RTCSgxIDw8IDgpCi0jICBkZWZpbmUgUEIxMTAwX1NSQU1fU0laCSgxIDw8IDcpCi0jICBkZWZpbmUgUEIxMTAwX1RTQ19CVVNZCSgxIDw8IDYpCi0jICBkZWZpbmUgUEIxMTAwX1BDTUNJQV9WU19NQVNLICgzIDw8IDQpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NECSgxIDw8IDMpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NUUwkoMSA8PCAyKQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9EU1IJKDEgPDwgMSkKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfUkkJKDEgPDwgMCkKLQotI2RlZmluZSBQQjExMDBfSVJEQV9SUzIzMgkweEFFMDAwMDBDCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRlVMTAkoMCA8PCAxNCkJLyogZnVsbCBwb3dlcgkJKi8KLSMgIGRlZmluZSBQQjExMDBfSVJEQV9TSFVURE9XTgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfSVJEQV9UVAkoMiA8PCAxNCkJLyogMi8zIHBvd2VyCQkqLwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX09UCSgzIDw8IDE0KQkvKiAxLzMgcG93ZXIJCSovCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRklSCSgxIDw8IDEzKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9SRUcJMHhBRTAwMDAxMAotIyAgZGVmaW5lIFBCMTEwMF9TRF9XUDFfUk8JKDEgPDwgMTUpCS8qIHJlYWQgb25seQkJKi8KLSMgIGRlZmluZSBQQjExMDBfU0RfV1AwX1JPCSgxIDw8IDE0KQkvKiByZWFkIG9ubHkJCSovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjEJKDEgPDwgMTEpCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QxICovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjAJKDEgPDwgMTApCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QwICovCi0jICBkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMQkoMSA8PCA5KQotIyAgZGVmaW5lIFBCMTEwMF9TRUxfU0RfQ09OTjAJKDEgPDwgOCkKLSMgIGRlZmluZSBQQ19ERUFTU0VSVF9SU1QJKDEgPDwgNykKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSgxIDw8IDQpCi0KLSNkZWZpbmUgUEIxMTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0CS8qIGdyYXBoaWNzIGNvbnRyb2wJKi8KLQotI2RlZmluZSBQQjExMDBfUlNUX1ZEREkgCTB4QUUwMDAwMUMKLSMgIGRlZmluZSBQQjExMDBfU09GVF9SRVNFVAkoMSA8PCAxNSkJLyogY2xlYXIgdG8gcmVzZXQgdGhlIGJvYXJkICovCi0jICBkZWZpbmUgUEIxMTAwX1ZERElfTUFTSwkweDFGCi0KLSNkZWZpbmUgUEIxMTAwX0xFRFMJCTB4QUUwMDAwMTgKLQotLyoKLSAqIDExOjggaXMgNCBkaXNjcmVldCBMRURzLiBDbGVhcmluZyBhIGJpdCBpbGx1bWluYXRlcyB0aGUgTEVELgotICogNzowICBpcyB0aGUgTEVEIERpc3BsYXkncyBkZWNpbWFsIHBvaW50cy4KLSAqLwotI2RlZmluZSBQQjExMDBfSEVYX0xFRAkJMHhBRTAwMDAxOAotCi0vKiBQQ01DSUEgUGIxMTAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAwCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFApICgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpCi0KLSNlbmRpZiAvKiBfX0FTTV9QQjExMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCmluZGV4IGM4NjE4ZGYuLjk2MmViNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgX19BU01fUEIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CiAKICNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCkBAIC00MywxMTMgKzQ0LDggQEAKICAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCiAgKi8KICNkZWZpbmUgQUM5N19QU0NfQkFTRSAgICAgICBQU0MxX0JBU0VfQUREUgotI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCisjZGVmaW5lIEkyU19QU0NfQkFTRQlQU0MxX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAweEFEODAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgYm9hcmQ7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBkaXNrX2xlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLQkvKjIwKi8JdTE2IGludGNscjsKLQkJdTE2IHJlc2VydmVkODsKLQkvKjI0Ki8JdTE2IGludHNldDsKLQkJdTE2IHJlc2VydmVkOTsKLQkvKjI4Ki8JdTE2IGludGNscl9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMDsKLQkvKjJDKi8JdTE2IGludHNldF9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMTsKLQotCS8qMzAqLwl1MTYgc2lnX3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTI7Ci0JLyozNCovCXUxNiBpbnRfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMzsKLQkvKjM4Ki8JdTE2IHJlc2VydmVkMTQ7Ci0JCXUxNiByZXNlcnZlZDE1OwotCS8qM0MqLwl1MTYgcmVzZXJ2ZWQxNjsKLQkJdTE2IHJlc2VydmVkMTc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMVdQCTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJMHgwMDA4Ci0vKiBub3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLwotI2RlZmluZSBCQ1NSX1JFU0VUU19XU0NGU00JMHgwODAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzBNVVgJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzFNVVgJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU0QxTVVYCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJMHgwMDAyCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEQkwJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkweDAwMTAKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJMHgwMDIwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCTB4MDA0MAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVBXUgkweDAwODAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMEZGCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKIAogI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCTB4MDAxRgogI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKQEAgLTIzOSwyMCArMTM1LDYgQEAKIAlQQjEyMDBfSU5UX0VORAkJPSBQQjEyMDBfSU5UX0JFR0lOICsgMTUKIH07CiAKLS8qCi0gKiBQYjEyMDAgc3BlY2lmaWMgUENNQ0lBIGRlZmluZXMgZm9yIGRyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwotICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotI2RlZmluZSBCT0FSRF9QQzBfSU5UCVBCMTIwMF9QQzBfSU5UCi0jZGVmaW5lIEJPQVJEX1BDMV9JTlQJUEIxMjAwX1BDMV9JTlQKLSNkZWZpbmUgQk9BUkRfQ0FSRF9JTlNFUlRFRChTT0NLRVQpIGJjc3ItPnNpZ19zdGF0dXMgJiAoMSA8PCAoOCArICgyICogU09DS0VUKSkpCi0KIC8qIE5BTkQgY2hpcCBzZWxlY3QgKi8KICNkZWZpbmUgTkFORF9DUyAxCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1MWEyZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQWxjaGVteSBTZW1pIFBiMTUwMCBSZWZlcnJlbmNlIEJvYXJkCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLSNpZm5kZWYgX19BU01fUEIxNTAwX0gKLSNkZWZpbmUgX19BU01fUEIxNTAwX0gKLQotI2RlZmluZSBJREVOVF9CT0FSRF9SRUcgCTB4QUUwMDAwMDAKLSNkZWZpbmUgQk9BUkRfU1RBVFVTX1JFRwkweEFFMDAwMDA0Ci0jZGVmaW5lIFBDSV9CT0FSRF9SRUcJCTB4QUUwMDAwMTAKLSNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRwkweEFFMDAwMDEwCi0jICBkZWZpbmUgUENfREVBU1NFUlRfUlNUCSAgICAgIDB4ODAKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSAgICAgIDB4MTAKLSNkZWZpbmUgUEIxNTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0Ci0jZGVmaW5lIFBCMTUwMF9SU1RfVkRESSAJMHhBRTAwMDAxQwotI2RlZmluZSBQQjE1MDBfTEVEUwkJMHhBRTAwMDAxOAotCi0jZGVmaW5lIFBCMTUwMF9IRVhfTEVECQkweEFGMDAwMDA0Ci0jZGVmaW5lIFBCMTUwMF9IRVhfTEVEX0JMQU5LCTB4QUYwMDAwMDgKLQotLyogUENNQ0lBIFBiMTUwMCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQKSAoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKQotCi0jZW5kaWYgLyogX19BU01fUEIxNTAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA2NzA0YTExLi41ODc5NjQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCkBAIC00MCwxMDIgKzQwLDYgQEAKICNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzJfQkFTRV9BRERSCiAjZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDM19CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX1BIWVNfQUREUiAweEFGMDAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IHBjaTsKLQkJdTE2IHJlc2VydmVkNTsKLQkvKjE4Ki8JdTE2IGxlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX1BIWVNfQUREUjsKLQotLyoKLSAqIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMFZTCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExVlMJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBGSQkweDAwMTAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMUZJCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1JBTVdJRFRICTB4MDA4MAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1VTQk9UR0lECTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UzUlhECTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfT0NUQUwJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfV1NDCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19ETUFSRVEJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENJX002NkVOCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9QQ0lfTTMzCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9QQ0lfRVhURVJOQVJCCTB4MDIwMAotI2RlZmluZSBCQ1NSX1BDSV9HUElPMjAwUlNUCTB4MDQwMAotI2RlZmluZSBCQ1NSX1BDSV9DTEtPVVQJCTB4MDgwMAotI2RlZmluZSBCQ1NSX1BDSV9DRkdIT1NUCTB4MTAwMAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkweDAwRkYKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCTB4MDgwMAotCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJMHgwMDFGCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1BPV0VST0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1NZU1RFTV9SRVNFVAkweDgwMDAKLQotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVCkgXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKICNkZWZpbmUgUEIxNTUwX0JPVEhfQkFOS1MKICNlbGlmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaAppbmRleCA2NTdmMDg5Li42ZDcwMjY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oCkBAIC0xMjMsNCArMTIzLDMgQEAKICNkZWZpbmUgUE5YODMzWF9HUElPXzE1X0lOVAkJCShQTlg4MzNYX0dQSU9fSVJRX0JBU0UgKyAxNSkKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKaW5kZXggNjI5YTU3NC4uNGZkNjUyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKQEAgLTI1MSw0ICsyNTEsMyBAQAogCQkJCQkJICogY2hhbm5lbCAzLiAqLwogI2RlZmluZSBpcnFfbXBlZ19kCQkoaWJhc2UrMCkgCS8qIE1QRUcgRGVjb2RlciBJbnRlcnJ1cHQgKi8KICNlbmRpZgkvKiBfQVNNX01BQ0hfUE9XRVJUVl9JTlRFUlJVUFRTX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggZjRhYjMxMy4uNDkzODJkNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTI1MSw2ICsyNTEsMTQgQEAKICNkZWZpbmUgUExfMjU2TQkJMjgKIAogLyoKKyAqIFBhZ2VHcmFpbiBiaXRzCisgKi8KKyNkZWZpbmUgUEdfUklFCQkoX1VMQ0FTVF8oMSkgPDwgIDMxKQorI2RlZmluZSBQR19YSUUJCShfVUxDQVNUXygxKSA8PCAgMzApCisjZGVmaW5lIFBHX0VMUEEJCShfVUxDQVNUXygxKSA8PCAgMjkpCisjZGVmaW5lIFBHX0VTUAkJKF9VTENBU1RfKDEpIDw8ICAyOCkKKworLyoKICAqIFI0eDAwIGludGVycnVwdCBlbmFibGUgLyBjYXVzZSBiaXRzCiAgKi8KICNkZWZpbmUgSUVfU1cwICAgICAgICAgIChfVUxDQVNUXygxKSA8PCAgOCkKQEAgLTU3Niw2ICs1ODQsMTAgQEAKICNkZWZpbmUgTUlQU19DT05GM19EU1AJCShfVUxDQVNUXygxKSA8PCAxMCkKICNkZWZpbmUgTUlQU19DT05GM19VTFJJCQkoX1VMQ0FTVF8oMSkgPDwgMTMpCiAKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVTSVpFRVhUCShfVUxDQVNUXygyNTUpIDw8IDApCisjZGVmaW5lIE1JUFNfQ09ORjRfTU1VRVhUREVGCShfVUxDQVNUXygzKSA8PCAxNCkKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVFWFRERUZfTU1VU0laRUVYVCAoX1VMQ0FTVF8oMSkgPDwgMTQpCisKICNkZWZpbmUgTUlQU19DT05GN19XSUkJCShfVUxDQVNUXygxKSA8PCAzMSkKIAogI2RlZmluZSBNSVBTX0NPTkY3X1JQUwkJKF9VTENBU1RfKDEpIDw8IDIpCkBAIC04MjYsNiArODM4LDkgQEAKICNkZWZpbmUgcmVhZF9jMF9wYWdlbWFzaygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfcGFnZW1hc2sodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwLCB2YWwpCiAKKyNkZWZpbmUgcmVhZF9jMF9wYWdlZ3JhaW4oKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEpCisjZGVmaW5lIHdyaXRlX2MwX3BhZ2VncmFpbih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEsIHZhbCkKKwogI2RlZmluZSByZWFkX2MwX3dpcmVkKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCkKICNkZWZpbmUgd3JpdGVfYzBfd2lyZWQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ2LCAwLCB2YWwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKaW5kZXggNzk4OWI5Zi4uZDkyNDA2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKQEAgLTE0NSw0ICsxNDUsMyBAQAogZXh0ZXJuIHZvaWQgbGxfbXNjX2lycSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX01JUFNfQk9BUkRTX01TQzAxX0lDX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAppbmRleCBjM2NhOTU5Li5hZjBlNTFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaApAQCAtMzA3LDQgKzMwNywzIEBACiBleHRlcm4gdm9pZCBuaWxlNF9kdW1wX2lycV9zdGF0dXModm9pZCk7CS8qIERlYnVnICovCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmgKaW5kZXggZWYyNGE3Yi4uY2JhNmZiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaApAQCAtOTksNiArOTksOCBAQAogCQlyZXR1cm4gIWN2bXhfZnVzZV9yZWFkKDkwKTsKIAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfUENJRToKKwljYXNlIE9DVEVPTl9GRUFUVVJFX01HTVRfUE9SVDoKKwljYXNlIE9DVEVPTl9GRUFUVVJFX1JBSUQ6CiAJCXJldHVybiBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkKIAkJCXx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKTsKIApAQCAtMTEwLDEyICsxMTIsNiBAQAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfVFJBOgogCQlyZXR1cm4gIShPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOMzBYWCkKIAkJCSB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTBYWCkpOwotCWNhc2UgT0NURU9OX0ZFQVRVUkVfTUdNVF9QT1JUOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7Ci0JY2FzZSBPQ1RFT05fRkVBVFVSRV9SQUlEOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7CiAJY2FzZSBPQ1RFT05fRkVBVFVSRV9VU0I6CiAJCXJldHVybiAhKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zOFhYKQogCQkJIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041OFhYKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAppbmRleCA0ZDBhOGM2Li5jYTYyMTRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKQEAgLTIxMyw2ICsyMTMsMTEgQEAKIAlpbnQJCWRtYV9lbmdpbmU7CS8qIC0xIGZvciBubyBETUEgKi8KIH07CiAKK3N0cnVjdCBvY3Rlb25faTJjX2RhdGEgeworCXVuc2lnbmVkIGludAlzeXNfZnJlcTsKKwl1bnNpZ25lZCBpbnQJaTJjX2ZyZXE7Cit9OworCiBleHRlcm4gdm9pZCBvY3Rlb25fd3JpdGVfbGNkKGNvbnN0IGNoYXIgKnMpOwogZXh0ZXJuIHZvaWQgb2N0ZW9uX2NoZWNrX2NwdV9iaXN0KHZvaWQpOwogZXh0ZXJuIGludCBvY3Rlb25fZ2V0X2Jvb3RfZGVidWdfZmxhZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGYyNjYyOTUuLmFjMzI1NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDE4ICsxMDcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiAvKgotICogRm9yIDMtbGV2ZWwgcGFnZXRhYmxlcyB3ZSBkZWZpbmVzIHRoZXNlIG91cnNlbHZlcywgZm9yIDItbGV2ZWwgdGhlCi0gKiBkZWZpbml0aW9ucyBhcmUgc3VwcGxpZWQgYnkgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4uCi0gKi8KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKLSNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKLSNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCi0KLSNlbmRpZgotCi0vKgogICogUmlnaHQgbm93IHdlIGRvbid0IHN1cHBvcnQgNC1sZXZlbCBwYWdldGFibGVzLCBzbyBhbGwgcHVkLXJlbGF0ZWQKICAqIGRlZmluaXRpb25zIGNvbWUgZnJvbSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAxZDliYjhjLi5kYTM5MjBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtOSwyMyArOSw4IEBACiAjaWZuZGVmIF9BU01fUEFSQU1fSAogI2RlZmluZSBfQVNNX1BBUkFNX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KICNkZWZpbmUgRVhFQ19QQUdFU0laRQk2NTUzNgogCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CiAKICNlbmRpZiAvKiBfQVNNX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCmluZGV4IGY1MjY1NjgyLi5jZjI1MmFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKQEAgLTEsMTUgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIFRpbSBXYXVnaCA8dGltQGN5YmVyZWxrLmRlbW9uLmNvLnVrPgotICoKLSAqIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBkcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jLgotICovCi0jaWZuZGVmIF9BU01fUEFSUE9SVF9ICi0jZGVmaW5lIF9BU01fUEFSUE9SVF9ICi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQotewotCXJldHVybiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzKGF1dG9pcnEsIGF1dG9kbWEpOwotfQotCi0jZW5kaWYgLyogX0FTTV9QQVJQT1JUX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJwb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAzNzM4ZjRiNC4uODgxZDE4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiBleHRlcm4gdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKTsKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIHB0ZSk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCmluZGV4IDU1ODEzZDYuLmFlOTA0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaApAQCAtMTI3LDggKzEyNyw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHVuc2lnbmVkIGxvbmcgbG9uZykocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBfUEZOX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgodW5zaWduZWQgbG9uZyBsb25nKShwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKaW5kZXggOGVkYTMwYi4uMjZkYzY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCkBAIC0xNiw3ICsxNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIAorI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorI2VuZGlmCiAKIC8qCiAgKiBFYWNoIGFkZHJlc3Mgc3BhY2UgaGFzIDIgNEsgcGFnZXMgYXMgaXRzIHBhZ2UgZGlyZWN0b3J5LCBnaXZpbmcgMTAyNApAQCAtMzcsMTMgKzQxLDIwIEBACiAgKiBmYXVsdCBhZGRyZXNzIC0gVk1BTExPQ19TVEFSVC4KICAqLwogCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBBR0VfU0hJRlQgKyBQQUdFX1NISUZUICsgUFRFX09SREVSIC0gMykKKyNlbHNlCisKIC8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBURV9PUkRFUiAtIDMpKQogI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKICNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCiAKLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBNRF9PUkRFUiAtIDMpKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCkBAIC05MiwxMiArMTAzLDE0IEBACiAjaWZkZWYgQ09ORklHX1BBR0VfU0laRV82NEtCCiAjZGVmaW5lIFBHRF9PUkRFUgkJMAogI2RlZmluZSBQVURfT1JERVIJCWFpZWVlZV9hdHRlbXB0X3RvX2FsbG9jYXRlX3B1ZAotI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUE1EX09SREVSCQlhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wbWQKICNkZWZpbmUgUFRFX09SREVSCQkwCiAjZW5kaWYKIAogI2RlZmluZSBQVFJTX1BFUl9QR0QJKChQQUdFX1NJWkUgPDwgUEdEX09SREVSKSAvIHNpemVvZihwZ2RfdCkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgoUEFHRV9TSVpFIDw8IFBNRF9PUkRFUikgLyBzaXplb2YocG1kX3QpKQorI2VuZGlmCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKIAogI2lmIFBHRElSX1NJWkUgPj0gVEFTS19TSVpFCkBAIC0xMjIsMTUgKzEzNSwzMCBAQAogCiAjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNlbmRpZgogI2RlZmluZSBwZ2RfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCiBleHRlcm4gcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXTsKIGV4dGVybiBwdGVfdCBlbXB0eV9iYWRfcGFnZV90YWJsZVtQVFJTX1BFUl9QVEVdOworCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorLyoKKyAqIEZvciAzLWxldmVsIHBhZ2V0YWJsZXMgd2UgZGVmaW5lcyB0aGVzZSBvdXJzZWx2ZXMsIGZvciAyLWxldmVsIHRoZQorICogZGVmaW5pdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+LgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKworCiBleHRlcm4gcG1kX3QgaW52YWxpZF9wbWRfdGFibGVbUFRSU19QRVJfUE1EXTsKIGV4dGVybiBwbWRfdCBlbXB0eV9iYWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF07CisjZW5kaWYKIAogLyoKICAqIEVtcHR5IHBnZC9wbWQgZW50cmllcyBwb2ludCB0byB0aGUgaW52YWxpZF9wdGVfdGFibGUuCkBAIC0xNTEsNiArMTc5LDcgQEAKIHsKIAlwbWRfdmFsKCpwbWRwKSA9ICgodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpOwogfQorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIC8qCiAgKiBFbXB0eSBwdWQgZW50cmllcyBwb2ludCB0byB0aGUgaW52YWxpZF9wbWRfdGFibGUuCkBAIC0xNzQsNiArMjAzLDcgQEAKIHsKIAlwdWRfdmFsKCpwdWRwKSA9ICgodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGUpOwogfQorI2VuZGlmCiAKICNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCiAKQEAgLTE4MSw4ICsyMTEsOCBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gKFBBR0VfU0hJRlQgKyAyKSkpCiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgKFBBR0VfU0hJRlQgKyAyKSkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2Vsc2UKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IF9QRk5fU0hJRlQpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogCiAjZGVmaW5lIF9fcGdkX29mZnNldChhZGRyZXNzKQlwZ2RfaW5kZXgoYWRkcmVzcykKQEAgLTE5OCw2ICsyMjgsNyBAQAogLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCiAjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCiAKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9wYWdlX3ZhZGRyKHB1ZF90IHB1ZCkKIHsKIAlyZXR1cm4gcHVkX3ZhbChwdWQpOwpAQCAtMjEwLDYgKzI0MSw3IEBACiB7CiAJcmV0dXJuIChwbWRfdCAqKSBwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKIH0KKyNlbmRpZgogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KICNkZWZpbmUgX19wdGVfb2Zmc2V0KGFkZHJlc3MpCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCmluZGV4IDEwNzNlNmQuLmU5ZmU3ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgX0NBQ0hFX1NISUZUICAgICAgICAgICAgICAgIDMKICNkZWZpbmUgX0NBQ0hFX01BU0sgICAgICAgICAgICAgICAgICg3PDwzKQogCi0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQogCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgICAgICAgICAoMTw8MCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCiAjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAgICAgICAgICAgICAoMTw8MSkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCkBAIC01OSw4ICs1OSw2IEBACiAjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgICAgICAgICAoMTw8NCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCiAjZGVmaW5lIF9QQUdFX0ZJTEUgICAgICAgICAgICAgICAgICAoMTw8NCkgIC8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQotCiAjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8OCkKICNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAgICAgICAgICgxPDw5KQogI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICAgICAgICAgKDE8PDkpICAvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLwpAQCAtNjksMjEgKzY3LDExMyBAQAogI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgICAgICAgICAgICAgKDE8PDExKQogI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDE8PDExKQogCisjZWxzZSAvKiAnTm9ybWFsJyByNEsgY2FzZSAqLworLyoKKyAqIFdoZW4gdXNpbmcgdGhlIFJJL1hJIGJpdCBzdXBwb3J0LCB3ZSBoYXZlIDEzIGJpdHMgb2YgZmxhZ3MgYmVsb3cKKyAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzLiBUaGUgUkkvWEkgYml0cyBhcmUgcGxhY2VkIHN1Y2ggdGhhdCBhIFNSTCA1CisgKiBjYW4gc3RyaXAgb2ZmIHRoZSBzb2Z0d2FyZSBiaXRzLCB0aGVuIGEgUk9UUiAyIGNhbiBtb3ZlIHRoZSBSSS9YSQorICogaW50byBiaXRzIFs2Mzo2Ml0uIFRoaXMgYWxzbyBsaW1pdHMgcGh5c2ljYWwgYWRkcmVzcyB0byA1NiBiaXRzLAorICogd2hpY2ggaXMgbW9yZSB0aGFuIHdlIG5lZWQgcmlnaHQgbm93LgorICovCisKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlRfU0hJRlQJKDApCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJCSgxIDw8IF9QQUdFX1BSRVNFTlRfU0hJRlQpCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSwgc2hvdWxkIGJlIHVudXNlZCBpZiBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aS4gKi8KKyNkZWZpbmUgX1BBR0VfUkVBRF9TSElGVAkoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyBfUEFHRV9QUkVTRU5UX1NISUZUIDogX1BBR0VfUFJFU0VOVF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1JFQUQgKHtpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIEJVRygpOyAxIDw8IF9QQUdFX1JFQURfU0hJRlQ7IH0pCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfUEFHRV9XUklURV9TSElGVAkoX1BBR0VfUkVBRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1dSSVRFCQkoMSA8PCBfUEFHRV9XUklURV9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEX1NISUZUCShfUEFHRV9XUklURV9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECQkoMSA8PCBfUEFHRV9BQ0NFU1NFRF9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEX1NISUZUCShfUEFHRV9BQ0NFU1NFRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX01PRElGSUVECQkoMSA8PCBfUEFHRV9NT0RJRklFRF9TSElGVCkKKy8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLworI2RlZmluZSBfUEFHRV9GSUxFCQkoX1BBR0VfTU9ESUZJRUQpCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisvKiBodWdlIHRsYiBwYWdlICovCisjZGVmaW5lIF9QQUdFX0hVR0VfU0hJRlQJKF9QQUdFX01PRElGSUVEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfSFVHRQkJKDEgPDwgX1BBR0VfSFVHRV9TSElGVCkKICNlbHNlCi0KLSNkZWZpbmUgX1BBR0VfUjRLQlVHICAgICAgICAgICAgICAgICgxPDw1KSAgLyogd29ya2Fyb3VuZCBmb3IgcjRrIGJ1ZyAgKi8KLSNkZWZpbmUgX1BBR0VfSFVHRSAgICAgICAgICAgICAgICAgICgxPDw1KSAgLyogaHVnZSB0bGIgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgICAgICAgICAoMTw8NykKLSNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAgICAgICAgICgxPDw3KSAgLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkgICAgICAgICAgICAgICAgICgxPDw4KSAgLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFICAgICAgICAgICgxPDw4KQotI2RlZmluZSBfQ0FDSEVfU0hJRlQJCSAgICA5Ci0jZGVmaW5lIF9DQUNIRV9NQVNLICAgICAgICAgICAgICAgICAoNzw8OSkKLQorI2RlZmluZSBfUEFHRV9IVUdFX1NISUZUCShfUEFHRV9NT0RJRklFRF9TSElGVCkKKyNkZWZpbmUgX1BBR0VfSFVHRQkJKHtCVUcoKTsgMTsgfSkgIC8qIER1bW15IHZhbHVlICovCiAjZW5kaWYKKworLyogUGFnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fRVhFQ19TSElGVAkoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyBfUEFHRV9IVUdFX1NISUZUICsgMSA6IF9QQUdFX0hVR0VfU0hJRlQpCisjZGVmaW5lIF9QQUdFX05PX0VYRUMJCSh7aWYgKCFrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgQlVHKCk7IDEgPDwgX1BBR0VfTk9fRVhFQ19TSElGVDsgfSkKKworLyogUGFnZSBjYW5ub3QgYmUgcmVhZCAqLworI2RlZmluZSBfUEFHRV9OT19SRUFEX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX05PX0VYRUNfU0hJRlQgKyAxIDogX1BBR0VfTk9fRVhFQ19TSElGVCkKKyNkZWZpbmUgX1BBR0VfTk9fUkVBRAkJKHtpZiAoIWtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSBCVUcoKTsgMSA8PCBfUEFHRV9OT19SRUFEX1NISUZUOyB9KQorCisjZGVmaW5lIF9QQUdFX0dMT0JBTF9TSElGVAkoX1BBR0VfTk9fUkVBRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0dMT0JBTAkJKDEgPDwgX1BBR0VfR0xPQkFMX1NISUZUKQorCisjZGVmaW5lIF9QQUdFX1ZBTElEX1NISUZUCShfUEFHRV9HTE9CQUxfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9WQUxJRAkJKDEgPDwgX1BBR0VfVkFMSURfU0hJRlQpCisvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRAkoX1BBR0VfVkFMSUQpCisKKy8qIFRoZSBNSVBTIGRpcnR5IGJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX0RJUlRZX1NISUZUCShfUEFHRV9WQUxJRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0RJUlRZCQkoMSA8PCBfUEFHRV9ESVJUWV9TSElGVCkKKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFCShfUEFHRV9ESVJUWSkKKworI2RlZmluZSBfQ0FDSEVfU0hJRlQJCShfUEFHRV9ESVJUWV9TSElGVCArIDEpCisjZGVmaW5lIF9DQUNIRV9NQVNLCQkoNyA8PCBfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgX1BGTl9TSElGVAkJKFBBR0VfU0hJRlQgLSAxMiArIF9DQUNIRV9TSElGVCArIDMpCisKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIAorI2lmbmRlZiBfUEZOX1NISUZUCisjZGVmaW5lIF9QRk5fU0hJRlQgICAgICAgICAgICAgICAgICBQQUdFX1NISUZUCisjZW5kaWYKKyNkZWZpbmUgX1BGTl9NQVNLCQkofigoMSA8PCAoX1BGTl9TSElGVCkpIC0gMSkpCisKKyNpZm5kZWYgX1BBR0VfTk9fUkVBRAorI2RlZmluZSBfUEFHRV9OT19SRUFEICh7QlVHKCk7IDA7IH0pCisjZGVmaW5lIF9QQUdFX05PX1JFQURfU0hJRlQgKHtCVUcoKTsgMDsgfSkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9OT19FWEVDCisjZGVmaW5lIF9QQUdFX05PX0VYRUMgKHtCVUcoKTsgMDsgfSkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9HTE9CQUxfU0hJRlQKKyNkZWZpbmUgX1BBR0VfR0xPQkFMX1NISUZUIGlsb2cyKF9QQUdFX0dMT0JBTCkKKyNlbmRpZgorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogcHRlX3RvX2VudHJ5bG8gY29udmVydHMgYSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGludG8gYSBNaXBzCisgKiBlbnRyeWxvMC8xIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHB0ZV90b19lbnRyeWxvKHVuc2lnbmVkIGxvbmcgcHRlX3ZhbCkKK3sKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJaW50IHNhOworI2lmZGVmIENPTkZJR18zMkJJVAorCQlzYSA9IDMxIC0gX1BBR0VfTk9fUkVBRF9TSElGVDsKKyNlbHNlCisJCXNhID0gNjMgLSBfUEFHRV9OT19SRUFEX1NISUZUOworI2VuZGlmCisJCS8qCisJCSAqIEMgaGFzIG5vIHdheSB0byBleHByZXNzIHRoYXQgdGhpcyBpcyBhIERTUkwKKwkJICogX1BBR0VfTk9fRVhFQ19TSElGVCBmb2xsb3dlZCBieSBhIFJPVFIgMi4gIEx1Y2tpbHkKKwkJICogaW4gdGhlIGZhc3QgcGF0aCB0aGlzIGlzIGRvbmUgaW4gYXNzZW1ibHkKKwkJICovCisJCXJldHVybiAocHRlX3ZhbCA+PiBfUEFHRV9HTE9CQUxfU0hJRlQpIHwKKwkJCSgocHRlX3ZhbCAmIChfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCkpIDw8IHNhKTsKKwl9CisKKwlyZXR1cm4gcHRlX3ZhbCA+PiBfUEFHRV9HTE9CQUxfU0hJRlQ7Cit9CisjZW5kaWYKIAogLyoKICAqIENhY2hlIGF0dHJpYnV0ZXMKQEAgLTEzMCw5ICsyMjAsOSBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBfX1JFQURBQkxFCShfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgX19SRUFEQUJMRQkoX1BBR0VfU0lMRU5UX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSkKICNkZWZpbmUgX19XUklURUFCTEUJKF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFIHwgX1BBR0VfTU9ESUZJRUQpCiAKLSNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX01PRElGSUVEIHwgX0NBQ0hFX01BU0spCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLICAoX1BGTl9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9NT0RJRklFRCB8IF9DQUNIRV9NQVNLKQogCiAjZW5kaWYgLyogX0FTTV9QR1RBQkxFX0JJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMTg1NDMzNi4uN2U0MGYzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yMiwyMyArMjIsMjQgQEAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIAogI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9DQUNIRV9DQUNIQUJMRV9OT05DT0hFUkVOVCkKLSNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IFwKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAogCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBcCi0JCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBcCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAorCQkJCSAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAgX1BBR0VfTk9fRVhFQyA6IDApIHwgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAogCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQogI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IF9fV1JJVEVBQkxFIHwgXAogCQkJCSBfUEFHRV9HTE9CQUwgfCBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQotI2RlZmluZSBQQUdFX1VTRVJJTwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgXAorI2RlZmluZSBQQUdFX1VTRVJJTwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgX1BBR0VfV1JJVEUgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1VOQ0FDSEVEIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgXAogCQkJX19XUklURUFCTEUgfCBfUEFHRV9HTE9CQUwgfCBfQ0FDSEVfVU5DQUNIRUQpCiAKIC8qCi0gKiBNSVBTIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyB0aGF0IHRoZSBzYW1lIGxpa2UKLSAqIHJlYWQuIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3QKLSAqIHdlIGNhbiBnZXQgYnkgcmVhc29uYWJsZSBtZWFucy4uCisgKiBJZiBfUEFHRV9OT19FWEVDIGlzIG5vdCBkZWZpbmVkLCB3ZSBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yCisgKiBleGVjdXRlLCBhbmQgY29uc2lkZXIgaXQgdG8gYmUgdGhlIHNhbWUgYXMgcmVhZC4gQWxzbywgd3JpdGUKKyAqIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldAorICogYnkgcmVhc29uYWJsZSBtZWFucy4uCiAgKi8KIAogLyoKQEAgLTE3Nyw3ICsxNzgsNyBAQAogICovCiAjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIGRvIHsgKihwbWRwdHIpID0gKHBtZHZhbCk7IH0gd2hpbGUoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAvKgogICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCiAgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQpAQCAtMjk4LDggKzI5OSwxMyBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOwotCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEKQotCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX05PX1JFQUQpKQorCQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCX0gZWxzZSB7CisJCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEKQorCQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCX0KIAlyZXR1cm4gcHRlOwogfQogCkBAIC0zNjIsOCArMzY4LDkgQEAKIAlwdGVfdCBwdGUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogeworCXB0ZV90IHB0ZSA9ICpwdGVwOwogCV9fdXBkYXRlX3RsYih2bWEsIGFkZHJlc3MsIHB0ZSk7CiAJX191cGRhdGVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCmluZGV4IDE0Y2E3ZGMuLjU0ZWYxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKQEAgLTExOCw3ICsxMTgsNiBAQAogI2RlZmluZSBaU1BfRFVFVAkJJ0QnCS8qIG9uZSBEVUVUIHpzcCBlbmdpbmUgKi8KICNkZWZpbmUgWlNQX1RSSUFECQknVCcJLyogdHdvIFRSSUFEIHpzcCBlbmdpbmVzICovCiAKLWV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaAppbmRleCBjMDdlYmQ4Li5hMGNiMGNhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaApAQCAtMSwyMiArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9TRVJJQUxfSAotI2RlZmluZSBfQVNNX1NFUklBTF9ICi0KLQotLyoKLSAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KLSAqCi0gKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6Ci0gKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQotICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgotICovCi0jZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMCAvIDE2KQotCi0jZW5kaWYgLyogX0FTTV9TRVJJQUxfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKaW5kZXggNjM3NDFjYS4uMmEyZjFiZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCkBAIC0zMywxNCArMzMsNiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYyk7CiBleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CiAKLS8qIE1lbW9yeSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuICovCi0jZGVmaW5lIFBST01fTUFYX1BNRU1CTE9DS1MgICAgMzIKLXN0cnVjdCBwcm9tX3BtZW1ibG9jayB7Ci0JTE9ORwliYXNlOwkJLyogV2l0aGluIEtTRUcwIG9yIFhLUEhZUy4gKi8KLQlVTE9ORwlzaXplOwkJLyogSW4gYnl0ZXMuICovCi0JVUxPTkcJdHlwZTsJCS8qIGZyZWUgb3IgcHJvbSBtZW1vcnkgKi8KLX07Ci0KIC8qIEdldCBuZXh0IG1lbW9yeSBkZXNjcmlwdG9yIGFmdGVyIENVUlIsIHJldHVybnMgZmlyc3QgZGVzY3JpcHRvcgogICogaW4gY2hhaW4gaXMgQ1VSUiBpcyBOVUxMLgogICovCkBAIC01MSw3ICs0Myw2IEBACiAgKiBhcnJheS4KICAqLwogZXh0ZXJuIHZvaWQgcHJvbV9tZW1pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJvbV9maXh1cF9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgc3RhcnRfbWVtLCB1bnNpZ25lZCBsb25nIGVuZF9tZW0pOwogCiAvKiBQUk9NIGRldmljZSB0cmVlIGxpYnJhcnkgcm91dGluZXMuICovCiAjZGVmaW5lIFBST01fTlVMTF9DT01QT05FTlQgKChwY29tcG9uZW50ICopIDApCkBAIC02MiwyMCArNTMsNiBAQAogLyogR2V0IGNoaWxkIGNvbXBvbmVudCBvZiBUSElTLiAqLwogZXh0ZXJuIHBjb21wb25lbnQgKkFyY0dldENoaWxkKHBjb21wb25lbnQgKnRoaXMpOwogCi0vKiBHZXQgcGFyZW50IGNvbXBvbmVudCBvZiBDSElMRC4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2dldHBhcmVudChwY29tcG9uZW50ICpjaGlsZCk7Ci0KLS8qIENvcHkgY29tcG9uZW50IG9wYXF1ZSBkYXRhIG9mIGNvbXBvbmVudCBUSElTIGludG8gQlVGRkVSCi0gKiBpZiBjb21wb25lbnQgVEhJUyBoYXMgb3BhcXVlIGRhdGEuICBSZXR1cm5zIHN1Y2Nlc3Mgb3IKLSAqIGZhaWx1cmUgc3RhdHVzLgotICovCi1leHRlcm4gbG9uZyBwcm9tX2dldGNkYXRhKHZvaWQgKmJ1ZmZlciwgcGNvbXBvbmVudCAqdGhpcyk7Ci0KLS8qIE90aGVyIG1pc2MuIGNvbXBvbmVudCByb3V0aW5lcy4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NoaWxkYWRkKHBjb21wb25lbnQgKnRoaXMsIHBjb21wb25lbnQgKnRtcCwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gbG9uZyBwcm9tX2RlbGNvbXBvbmVudChwY29tcG9uZW50ICp0aGlzKTsKLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NvbXBvbmVudGJ5cGF0aChjaGFyICpwYXRoKTsKLQogLyogVGhpcyBpcyBjYWxsZWQgYXQgcHJvbV9pbml0IHRpbWUgdG8gaWRlbnRpZnkgdGhlCiAgKiBBUkMgYXJjaGl0ZWN0dXJlIHdlIGFyZSBydW5uaW5nIG9uCiAgKi8KQEAgLTg4LDM1ICs2NSwxMyBAQAogLyogQVJDUyBjb21tYW5kIGxpbmUgcGFyc2luZy4gKi8KIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwogCi0vKiBBY3F1aXJpbmcgaW5mbyBhYm91dCB0aGUgY3VycmVudCB0aW1lLCBldGMuICovCi1leHRlcm4gc3RydWN0IGxpbnV4X3RpbmZvICpwcm9tX2dldHRpbmZvKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9nZXRydGltZSh2b2lkKTsKLQogLyogRmlsZSBvcGVyYXRpb25zLiAqLwotZXh0ZXJuIGxvbmcgcHJvbV9nZXR2ZGlyZW50KHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF92ZGlyZW50ICplbnQsIHVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nICpjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9vcGVuKGNoYXIgKm5hbWUsIGVudW0gbGludXhfb21vZGUgbWQsIHVuc2lnbmVkIGxvbmcgKmZkKTsKLWV4dGVybiBsb25nIHByb21fY2xvc2UodW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNSZWFkKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX2dldHJzdGF0dXModW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNXcml0ZShVTE9ORyBmZCwgUFZPSUQgYnVmLCBVTE9ORyBudW0sIFBVTE9ORyBjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9zZWVrKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9iaWdpbnQgKm9mZiwgZW51bSBsaW51eF9zZWVrbW9kZSBzbSk7Ci1leHRlcm4gbG9uZyBwcm9tX21vdW50KGNoYXIgKm5hbWUsIGVudW0gbGludXhfbW91bnRvcHMgb3ApOwotZXh0ZXJuIGxvbmcgcHJvbV9nZXRmaW5mbyh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3QgbGludXhfZmluZm8gKmJ1Zik7Ci1leHRlcm4gbG9uZyBwcm9tX3NldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbXNrKTsKLQotLyogUnVubmluZyBzdGFuZC1hbG9uZyBwcm9ncmFtcy4gKi8KLWV4dGVybiBsb25nIHByb21fbG9hZChjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcGMsIHVuc2lnbmVkIGxvbmcgKmVhZGRyKTsKLWV4dGVybiBsb25nIHByb21faW52b2tlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3AsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKLWV4dGVybiBsb25nIHByb21fZXhlYyhjaGFyICpuYW1lLCBsb25nIGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7CiAKIC8qIE1pc2MuIHJvdXRpbmVzLiAqLwotZXh0ZXJuIFZPSUQgcHJvbV9oYWx0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gVk9JRCBwcm9tX3Bvd2VyZG93bihWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotZXh0ZXJuIFZPSUQgcHJvbV9yZXN0YXJ0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiBleHRlcm4gVk9JRCBBcmNSZWJvb3QoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIGV4dGVybiBWT0lEIEFyY0VudGVySW50ZXJhY3RpdmVNb2RlKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gbG9uZyBwcm9tX2NmZ3NhdmUoVk9JRCk7Ci1leHRlcm4gc3RydWN0IGxpbnV4X3N5c2lkICpwcm9tX2dldHN5c2lkKFZPSUQpOwogZXh0ZXJuIFZPSUQgQXJjRmx1c2hBbGxDYWNoZXMoVk9JRCk7CiBleHRlcm4gRElTUExBWV9TVEFUVVMgKkFyY0dldERpc3BsYXlTdGF0dXMoVUxPTkcgRmlsZUlEKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvYmlnc3VyLmgKaW5kZXggZWJlZmU3OS4uMmQxYTI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oCkBAIC00Niw0ICs0NiwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NJQllURV9CSUdTVVJfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9sZHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCmluZGV4IDA4MWU4YjEuLjFlNzZjZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCkBAIC00MjAsNCArNDIwLDMgQEAKICNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xrZXJudmFycy5oCmluZGV4IDVkZTRjNWUuLjZhZjI1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaApAQCAtMjYsNCArMjYsMyBAQAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NOX0tMS0VSTlZBUlNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKaW5kZXggNzk1YWM2YzIuLjcxNjUzMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKQEAgLTExLDQgKzExLDMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KICNlbmRpZiAvKiBfTUlQU19TUEFSU0VNRU1fSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDIxZWY5ZWYuLjM5NmU0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0zNiw5ICszNiw5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19sb2NrZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCXUzMiBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0JcmV0dXJuICgoY291bnRlcnMgPj4gMTQpIF4gY291bnRlcnMpICYgMHgxZmZmOworCXJldHVybiAoKGNvdW50ZXJzID4+IDE2KSBeIGNvdW50ZXJzKSAmIDB4ZmZmZjsKIH0KIAogI2RlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9zcGluX2xvY2sobG9jaykKQEAgLTQ3LDkgKzQ3LDkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2NvbnRlbmRlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CisJdTMyIGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlyZXR1cm4gKCgoY291bnRlcnMgPj4gMTQpIC0gY291bnRlcnMpICYgMHgxZmZmKSA+IDE7CisJcmV0dXJuICgoKGNvdW50ZXJzID4+IDE2KSAtIGNvdW50ZXJzKSAmIDB4ZmZmZikgPiAxOwogfQogI2RlZmluZSBhcmNoX3NwaW5faXNfY29udGVuZGVkCWFyY2hfc3Bpbl9pc19jb250ZW5kZWQKIApAQCAtNTcsNiArNTcsNyBAQAogewogCWludCBteV90aWNrZXQ7CiAJaW50IHRtcDsKKwlpbnQgaW5jID0gMHgxMDAwMDsKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKApAQCAtNjQsMjUgKzY1LDI0IEBACiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglhZGRpdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIglhZGR1CSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAlW2luY10JCVxuIgogCQkiCXNjCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCiAJCSIJYmVxemwJJVtteV90aWNrZXRdLCAxYgkJCVxuIgogCQkiCSBub3AJCQkJCQlcbiIKLQkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweGZmZmYJCVxuIgorCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4ZmZmZglcbiIKIAkJIglibmUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDRmCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCi0JCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHhmZmZmCQlcbiIKIAkJIglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNjoJYm5legklW3RpY2tldF0sIDZiCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgMQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsdwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJbGh1CSVbdGlja2V0XSwgJVtzZXJ2aW5nX25vd19wdHJdCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgogCQkiCWIJNGIJCQkJCVxuIgpAQCAtOTAsMzYgKzkwLDMzIEBACiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAorCQkgIFtzZXJ2aW5nX25vd19wdHJdICIrbSIgKGxvY2stPmguc2VydmluZ19ub3cpLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAotCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpKTsKKwkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KQorCQk6IFtpbmNdICJyIiAoaW5jKSk7CiAJfSBlbHNlIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fbG9jawlcbiIKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCi0JCSIJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIjE6CWFkZGl1CSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKKwkJIglhZGR1CSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAlW2luY10JCVxuIgogCQkiCXNjCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxegklW215X3RpY2tldF0sIDNmCQkJXG4iCi0JCSIJIG5vcAkJCQkJCVxuIgotCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCWJlcXoJJVtteV90aWNrZXRdLCAxYgkJCVxuIgorCQkiCSBzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweGZmZmYJCVxuIgorCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4ZmZmZglcbiIKIAkJIglibmUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDRmCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCi0JCSIzOgliCTFiCQkJCQlcbiIKLQkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgkJCQkJCQlcbiIKIAkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCiAJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCi0JCSIJbHcJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCWxodQklW3RpY2tldF0sICVbc2VydmluZ19ub3dfcHRyXQkJXG4iCiAJCSIJYmVxCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAyYgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIgliCTRiCQkJCQlcbiIKQEAgLTEyNyw4ICsxMjQsMTAgQEAKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKIAkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCisJCSAgW3NlcnZpbmdfbm93X3B0cl0gIittIiAobG9jay0+aC5zZXJ2aW5nX25vdyksCiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCksCi0JCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkpOworCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9CiAKIAlzbXBfbGxzY19tYigpOwpAQCAtMTM2LDQ3ICsxMzUsMTYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCWludCB0bXA7Ci0KLQlzbXBfbGxzY19tYigpOwotCi0JaWYgKFIxMDAwMF9MTFNDX1dBUikgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIJCQkJIyBhcmNoX3NwaW5fdW5sb2NrCVxuIgotCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMQkJCVxuIgotCQkiCW9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIgl4b3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxemwJJVt0aWNrZXRdLCAxYgkJCQlcbiIKLQkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCi0JCSAgW3RpY2tldF0gIj0mciIgKHRtcCkpOwotCX0gZWxzZSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX3VubG9jawlcbiIKLQkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCi0JCSIJCQkJCQkJXG4iCi0JCSIJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIjE6CWFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCi0JCSIJb3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXhvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6CSVbdGlja2V0XSwgMmYJCQkJXG4iCi0JCSIJIG5vcAkJCQkJCVxuIgotCQkiCQkJCQkJCVxuIgotCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgotCQkiMjoJYgkxYgkJCQkJXG4iCi0JCSIJIGxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJLnByZXZpb3VzCQkJCQlcbiIKLQkJIgkuc2V0IHBvcAkJCQkJXG4iCi0JCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAotCQkgIFt0aWNrZXRdICI9JnIiICh0bXApKTsKLQl9CisJdW5zaWduZWQgaW50IHNlcnZpbmdfbm93ID0gbG9jay0+aC5zZXJ2aW5nX25vdyArIDE7CisJd21iKCk7CisJbG9jay0+aC5zZXJ2aW5nX25vdyA9ICh1MTYpc2VydmluZ19ub3c7CisJbnVkZ2Vfd3JpdGVzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wLCB0bXAyLCB0bXAzOworCWludCBpbmMgPSAweDEwMDAwOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC0xODQsMTEgKzE1MiwxMSBAQAogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHgxZmZmCVxuIgorCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4ZmZmZglcbiIKKwkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4ZmZmZglcbiIKIAkJIglibmUJJVtteV90aWNrZXRdLCAlW25vd19zZXJ2aW5nXSwgM2YJXG4iCi0JCSIJIGFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiCSBhZGR1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAlW2luY10JCVxuIgogCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCiAJCSIJYmVxemwJJVt0aWNrZXRdLCAxYgkJCQlcbiIKIAkJIgkgbGkJJVt0aWNrZXRdLCAxCQkJCVxuIgpAQCAtMjAxLDMzICsxNjksMzMgQEAKIAkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCksCiAJCSAgW215X3RpY2tldF0gIj0mciIgKHRtcDIpLAotCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpKTsKKwkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKQorCQk6IFtpbmNdICJyIiAoaW5jKSk7CiAJfSBlbHNlIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fdHJ5bG9jawlcbiIKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCi0JCSIJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIjE6CXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4MWZmZglcbiIKKwkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCisJCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgorCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW215X3RpY2tldF0sICVbbm93X3NlcnZpbmddLCAzZglcbiIKLQkJIgkgYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIJIGFkZHUJJVt0aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6CSVbdGlja2V0XSwgNGYJCQkJXG4iCisJCSIJYmVxegklW3RpY2tldF0sIDFiCQkJCVxuIgogCQkiCSBsaQklW3RpY2tldF0sIDEJCQkJXG4iCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKIAkJIjM6CWIJMmIJCQkJCVxuIgogCQkiCSBsaQklW3RpY2tldF0sIDAJCQkJXG4iCi0JCSI0OgliCTFiCQkJCQlcbiIKLQkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKIAkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCksCiAJCSAgW215X3RpY2tldF0gIj0mciIgKHRtcDIpLAotCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpKTsKKwkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKQorCQk6IFtpbmNdICJyIiAoaW5jKSk7CiAJfQogCiAJc21wX2xsc2NfbWIoKTsKQEAgLTMwNSw3ICsyNzMsNyBAQAogewogCXVuc2lnbmVkIGludCB0bXA7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGVlMTk3YzIuLmM1MmYzNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC01LDE2ICs1LDI4IEBACiAjIGVycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgeworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3R5cGVkZWYgdW5pb24gewogCS8qCi0JICogYml0cyAgMC4uMTM6IHNlcnZpbmdfbm93Ci0JICogYml0cyAxNCAgICA6IGp1bmsgZGF0YQotCSAqIGJpdHMgMTUuLjI4OiB0aWNrZXQKKwkgKiBiaXRzICAwLi4xNSA6IHNlcnZpbmdfbm93CisJICogYml0cyAxNi4uMzEgOiB0aWNrZXQKIAkgKi8KLQl1bnNpZ25lZCBpbnQgbG9jazsKKwl1MzIgbG9jazsKKwlzdHJ1Y3QgeworI2lmZGVmIF9fQklHX0VORElBTgorCQl1MTYgdGlja2V0OworCQl1MTYgc2VydmluZ19ub3c7CisjZWxzZQorCQl1MTYgc2VydmluZ19ub3c7CisJCXUxNiB0aWNrZXQ7CisjZW5kaWYKKwl9IGg7CiB9IGFyY2hfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAubG9jayA9IDAgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODNiNTUwOS4uYmI5MzdjYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtOTUsNiArOTUsOCBAQAogewogCV9fdTMyIHJldHZhbDsKIAorCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKKwogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC0xNDcsNiArMTQ5LDggQEAKIHsKIAlfX3U2NCByZXR2YWw7CiAKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CisKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyBkdW1teTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oCmluZGV4IDgyN2RjMjIuLjY0ODg3ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmgKQEAgLTQyLDcgKzQyLDYgQEAKIH07CiBleHRlcm4gc3RydWN0IHR4eDlfYm9hcmRfdmVjICp0eHg5X2JvYXJkX3ZlYzsKIGV4dGVybiBpbnQgKCp0eHg5X2lycV9kaXNwYXRjaCkoaW50IHBlbmRpbmcpOwotY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwogY29uc3QgY2hhciAqcHJvbV9nZXRlbnYoY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIHR4eDlfd2R0X2luaXQodW5zaWduZWQgbG9uZyBiYXNlKTsKIHZvaWQgdHh4OV93ZHRfbm93KHVuc2lnbmVkIGxvbmcgYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTliZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vhc20uaApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCAgVGhpZW1vIFNldWZlcgorICogQ29weXJpZ2h0IChDKSAyMDA1ICBNYWNpZWogVy4gUm96eWNraQorICogQ29weXJpZ2h0IChDKSAyMDA2ICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSXBfdTF1MnUzKG9wKQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCisKKyNkZWZpbmUgSXBfdTJ1MXUzKG9wKQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCisKKyNkZWZpbmUgSXBfdTN1MXUyKG9wKQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCisKKyNkZWZpbmUgSXBfdTF1MnMzKG9wKQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgc2lnbmVkIGludCBjKQorCisjZGVmaW5lIElwX3UyczN1MShvcCkJCQkJCQkJXAordm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKK3Vhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKKworI2RlZmluZSBJcF91MnUxczMob3ApCQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0CQkJCQkJCQlcCit1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCisKKyNkZWZpbmUgSXBfdTJ1MW1zYnUzKG9wKQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0CQkJCQkJCQlcCit1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYywJXAorCSAgIHVuc2lnbmVkIGludCBkKQorCisjZGVmaW5lIElwX3UxdTIob3ApCQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCisKKyNkZWZpbmUgSXBfdTFzMihvcCkJCQkJCQkJXAordm9pZCBfX2NwdWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisKKyNkZWZpbmUgSXBfdTEob3ApIHZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSkKKworI2RlZmluZSBJcF8wKG9wKSB2b2lkIF9fY3B1aW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZikKKworSXBfdTJ1MXMzKF9hZGRpdSk7CitJcF91M3UxdTIoX2FkZHUpOworSXBfdTJ1MXUzKF9hbmRpKTsKK0lwX3UzdTF1MihfYW5kKTsKK0lwX3UxdTJzMyhfYmVxKTsKK0lwX3UxdTJzMyhfYmVxbCk7CitJcF91MXMyKF9iZ2V6KTsKK0lwX3UxczIoX2JnZXpsKTsKK0lwX3UxczIoX2JsdHopOworSXBfdTFzMihfYmx0emwpOworSXBfdTF1MnMzKF9ibmUpOworSXBfdTJzM3UxKF9jYWNoZSk7CitJcF91MXUydTMoX2RtZmMwKTsKK0lwX3UxdTJ1MyhfZG10YzApOworSXBfdTJ1MXMzKF9kYWRkaXUpOworSXBfdTN1MXUyKF9kYWRkdSk7CitJcF91MnUxdTMoX2RzbGwpOworSXBfdTJ1MXUzKF9kc2xsMzIpOworSXBfdTJ1MXUzKF9kc3JhKTsKK0lwX3UydTF1MyhfZHNybCk7CitJcF91MnUxdTMoX2RzcmwzMik7CitJcF91MnUxdTMoX2Ryb3RyKTsKK0lwX3UzdTF1MihfZHN1YnUpOworSXBfMChfZXJldCk7CitJcF91MShfaik7CitJcF91MShfamFsKTsKK0lwX3UxKF9qcik7CitJcF91MnMzdTEoX2xkKTsKK0lwX3UyczN1MShfbGwpOworSXBfdTJzM3UxKF9sbGQpOworSXBfdTFzMihfbHVpKTsKK0lwX3UyczN1MShfbHcpOworSXBfdTF1MnUzKF9tZmMwKTsKK0lwX3UxdTJ1MyhfbXRjMCk7CitJcF91MnUxdTMoX29yaSk7CitJcF91MnMzdTEoX3ByZWYpOworSXBfMChfcmZlKTsKK0lwX3UyczN1MShfc2MpOworSXBfdTJzM3UxKF9zY2QpOworSXBfdTJzM3UxKF9zZCk7CitJcF91MnUxdTMoX3NsbCk7CitJcF91MnUxdTMoX3NyYSk7CitJcF91MnUxdTMoX3NybCk7CitJcF91MnUxdTMoX3JvdHIpOworSXBfdTN1MXUyKF9zdWJ1KTsKK0lwX3UyczN1MShfc3cpOworSXBfMChfdGxicCk7CitJcF8wKF90bGJyKTsKK0lwXzAoX3RsYndpKTsKK0lwXzAoX3RsYndyKTsKK0lwX3UzdTF1MihfeG9yKTsKK0lwX3UydTF1MyhfeG9yaSk7CitJcF91MnUxbXNidTMoX2RpbnMpOworCisvKiBIYW5kbGUgbGFiZWxzLiAqLworc3RydWN0IHVhc21fbGFiZWwgeworCXUzMiAqYWRkcjsKKwlpbnQgbGFiOworfTsKKwordm9pZCBfX2NwdWluaXQgdWFzbV9idWlsZF9sYWJlbChzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyLCBpbnQgbGlkKTsKKyNpZmRlZiBDT05GSUdfNjRCSVQKK2ludCB1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcik7CisjZW5kaWYKK2ludCB1YXNtX3JlbF9oaShsb25nIHZhbCk7CitpbnQgdWFzbV9yZWxfbG8obG9uZyB2YWwpOwordm9pZCBVQVNNX2lfTEFfbW9zdGx5KHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IHJzLCBsb25nIGFkZHIpOwordm9pZCBVQVNNX2lfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcik7CisKKyNkZWZpbmUgVUFTTV9MX0xBKGxiKQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVpbml0IHVhc21fbCMjbGIoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkcikgXAorewkJCQkJCQkJCVwKKwl1YXNtX2J1aWxkX2xhYmVsKGxhYiwgYWRkciwgbGFiZWwjI2xiKTsJCQkJXAorfQorCisvKiBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIGluc3RydWN0aW9ucyAqLworI2lmZGVmIENPTkZJR182NEJJVAorIyBkZWZpbmUgVUFTTV9pX0xXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sZChidWYsIHJzLCBydCwgb2ZmKQorIyBkZWZpbmUgVUFTTV9pX1NXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9zZChidWYsIHJzLCBydCwgb2ZmKQorIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKKyMgZGVmaW5lIFVBU01faV9TUkEoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNyYShidWYsIHJzLCBydCwgc2gpCisjIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHJvdHIoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX01GQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9kbWZjMChidWYsIHJ0LCByZCkKKyMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG10YzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2RhZGRpdShidWYsIHJzLCBydCwgdmFsKQorIyBkZWZpbmUgVUFTTV9pX0FERFUoYnVmLCBycywgcnQsIHJkKSB1YXNtX2lfZGFkZHUoYnVmLCBycywgcnQsIHJkKQorIyBkZWZpbmUgVUFTTV9pX1NVQlUoYnVmLCBycywgcnQsIHJkKSB1YXNtX2lfZHN1YnUoYnVmLCBycywgcnQsIHJkKQorIyBkZWZpbmUgVUFTTV9pX0xMKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sbGQoYnVmLCBycywgcnQsIG9mZikKKyMgZGVmaW5lIFVBU01faV9TQyhidWYsIHJzLCBydCwgb2ZmKSB1YXNtX2lfc2NkKGJ1ZiwgcnMsIHJ0LCBvZmYpCisjZWxzZQorIyBkZWZpbmUgVUFTTV9pX0xXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sdyhidWYsIHJzLCBydCwgb2ZmKQorIyBkZWZpbmUgVUFTTV9pX1NXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9zdyhidWYsIHJzLCBydCwgb2ZmKQorIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zbGwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1NSQShidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmEoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfcm90cihidWYsIHJzLCBydCwgc2gpCisjIGRlZmluZSBVQVNNX2lfTUZDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX21mYzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBVQVNNX2lfTVRDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX210YzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2FkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCisjIGRlZmluZSBVQVNNX2lfQUREVShidWYsIHJzLCBydCwgcmQpIHVhc21faV9hZGR1KGJ1ZiwgcnMsIHJ0LCByZCkKKyMgZGVmaW5lIFVBU01faV9TVUJVKGJ1ZiwgcnMsIHJ0LCByZCkgdWFzbV9pX3N1YnUoYnVmLCBycywgcnQsIHJkKQorIyBkZWZpbmUgVUFTTV9pX0xMKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sbChidWYsIHJzLCBydCwgb2ZmKQorIyBkZWZpbmUgVUFTTV9pX1NDKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9zYyhidWYsIHJzLCBydCwgb2ZmKQorI2VuZGlmCisKKyNkZWZpbmUgdWFzbV9pX2IoYnVmLCBvZmYpIHVhc21faV9iZXEoYnVmLCAwLCAwLCBvZmYpCisjZGVmaW5lIHVhc21faV9iZXF6KGJ1ZiwgcnMsIG9mZikgdWFzbV9pX2JlcShidWYsIHJzLCAwLCBvZmYpCisjZGVmaW5lIHVhc21faV9iZXF6bChidWYsIHJzLCBvZmYpIHVhc21faV9iZXFsKGJ1ZiwgcnMsIDAsIG9mZikKKyNkZWZpbmUgdWFzbV9pX2JuZXooYnVmLCBycywgb2ZmKSB1YXNtX2lfYm5lKGJ1ZiwgcnMsIDAsIG9mZikKKyNkZWZpbmUgdWFzbV9pX2JuZXpsKGJ1ZiwgcnMsIG9mZikgdWFzbV9pX2JuZWwoYnVmLCBycywgMCwgb2ZmKQorI2RlZmluZSB1YXNtX2lfbW92ZShidWYsIGEsIGIpIFVBU01faV9BRERVKGJ1ZiwgYSwgMCwgYikKKyNkZWZpbmUgdWFzbV9pX25vcChidWYpIHVhc21faV9zbGwoYnVmLCAwLCAwLCAwKQorI2RlZmluZSB1YXNtX2lfc3Nub3AoYnVmKSB1YXNtX2lfc2xsKGJ1ZiwgMCwgMCwgMSkKKyNkZWZpbmUgdWFzbV9pX2VoYihidWYpIHVhc21faV9zbGwoYnVmLCAwLCAwLCAzKQorCisvKiBIYW5kbGUgcmVsb2NhdGlvbnMuICovCitzdHJ1Y3QgdWFzbV9yZWxvYyB7CisJdTMyICphZGRyOworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBsYWI7Cit9OworCisvKiBUaGlzIGlzIHplcm8gc28gd2UgY2FuIHVzZSB6ZXJvZWQgbGFiZWwgYXJyYXlzLiAqLworI2RlZmluZSBVQVNNX0xBQkVMX0lOVkFMSUQgMAorCit2b2lkIHVhc21fcl9taXBzX3BjMTYoc3RydWN0IHVhc21fcmVsb2MgKipyZWwsIHUzMiAqYWRkciwgaW50IGxpZCk7Cit2b2lkIHVhc21fcmVzb2x2ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYik7Cit2b2lkIHVhc21fbW92ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKTsKK3ZvaWQgdWFzbV9tb3ZlX2xhYmVscyhzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLCB1MzIgKmZpcnN0LCB1MzIgKmVuZCwgbG9uZyBvZmYpOwordm9pZCB1YXNtX2NvcHlfaGFuZGxlcihzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCBzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLAorCXUzMiAqZmlyc3QsIHUzMiAqZW5kLCB1MzIgKnRhcmdldCk7CitpbnQgdWFzbV9pbnNuX2hhc19iZGVsYXkoc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgdTMyICphZGRyKTsKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBsYWJlbGVkIGJyYW5jaGVzLiAqLwordm9pZCB1YXNtX2lsX2JsdHoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKK3ZvaWQgdWFzbV9pbF9iKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYmVxeih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JlcXpsKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYm5lKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZzEsCisJCSB1bnNpZ25lZCBpbnQgcmVnMiwgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYm5leih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JnZXpsKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYmdleih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCA4YTRiMjBlLi45YmMwN2I5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtMSwyMSArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIExvdyBsZXZlbCBleGNlcHRpb24gaGFuZGxpbmcKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX0FTTV9VQ09OVEVYVF9ICi0jZGVmaW5lIF9BU01fVUNPTlRFWFRfSAotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLSNlbmRpZiAvKiBfQVNNX1VDT05URVhUX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91Y29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCA3YmQzMmQwLi5lZTE4MDI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMjAsMTcgKzIwLDE3IEBACiAjaW5jbHVkZSA8YXNtL2phenouaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHI0MDMwX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socjQwMzBfbG9jayk7CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9yNDAzMF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAtIEpBWlpfSVJRX1NUQVJUKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIAltYXNrIHw9IHI0MDMwX3JlYWRfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFKTsKIAlyNDAzMF93cml0ZV9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGRpc2FibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0zOCwxMCArMzgsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbWFzayA9IH4oMSA8PCAoaXJxIC0gSkFaWl9JUlFfU1RBUlQpKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIAltYXNrICY9IHI0MDMwX3JlYWRfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFKTsKIAlyNDAzMF93cml0ZV9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHI0MDMwX2lycV90eXBlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOTMyNmFmNS4uZWYyMDk1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtOTMsNiArOTMsNyBAQAogCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU1BJTkxPQ0tfVEVTVCkJKz0gc3BpbmxvY2tfdGVzdC5vCiAKIENGTEFHU19jcHUtYnVnczY0Lm8JPSAkKHNoZWxsIGlmICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLVdhLC1tZGFkZGkgLWMgLW8gL2Rldi9udWxsIC14YyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIi1ESEFWRV9BU19TRVRfREFEREkiOyBmaSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDJjMWUxZDAuLmNhNmM4MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE4OCwxMSArMTg4LDE1IEBACiAJREVGSU5FKF9QVEVfVF9TSVpFLCBzaXplb2YocHRlX3QpKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX1RfTE9HMiwgUEdEX1RfTE9HMik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlERUZJTkUoX1BNRF9UX0xPRzIsIFBNRF9UX0xPRzIpOworI2VuZGlmCiAJREVGSU5FKF9QVEVfVF9MT0cyLCBQVEVfVF9MT0cyKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX09SREVSLCBQR0RfT1JERVIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJREVGSU5FKF9QTURfT1JERVIsIFBNRF9PUkRFUik7CisjZW5kaWYKIAlERUZJTkUoX1BURV9PUkRFUiwgUFRFX09SREVSKTsKIAlCTEFOSygpOwogCURFRklORShfUE1EX1NISUZULCBQTURfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKaW5kZXggZjVkMjY1ZS4uMzkyZWYzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGd0NjQxeHhfdGltZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhndDY0MXh4X3RpbWVyX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCBndDY0MXh4X2Jhc2VfY2xvY2s7CiAKIHZvaWQgZ3Q2NDF4eF9zZXRfYmFzZV9jbG9jayh1bnNpZ25lZCBpbnQgY2xvY2spCkBAIC00OSw3ICs0OSw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIAogCWN0cmwgPSBHVF9SRUFEKEdUX1RDX0NPTlRST0xfT0ZTKTsKIAljdHJsICY9IH4oR1RfVENfQ09OVFJPTF9FTlRDMF9NU0sgfCBHVF9UQ19DT05UUk9MX1NFTFRDMF9NU0spOwpAQCAtNTgsNyArNTgsNyBAQAogCUdUX1dSSVRFKEdUX1RDMF9PRlMsIGRlbHRhKTsKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY4LDcgKzY4LDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCXNwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogCiAJY3RybCA9IEdUX1JFQUQoR1RfVENfQ09OVFJPTF9PRlMpOwogCWN0cmwgJj0gfihHVF9UQ19DT05UUk9MX0VOVEMwX01TSyB8IEdUX1RDX0NPTlRST0xfU0VMVEMwX01TSyk7CkBAIC04Niw3ICs4Niw3IEBACiAKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0NjQxeHhfdGltZXIwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggNzU4YWQ0Mi4uYmU1YmIxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJY2FzZSBDUFVfQkNNNjM0ODoKIAljYXNlIENQVV9CQ002MzU4OgogCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT046CisJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlicmVhazsKIApAQCAtNzAwLDYgKzcwMSwxOSBAQAogCXJldHVybiBjb25maWczICYgTUlQU19DT05GX007CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRlY29kZV9jb25maWc0KHN0cnVjdCBjcHVpbmZvX21pcHMgKmMpCit7CisJdW5zaWduZWQgaW50IGNvbmZpZzQ7CisKKwljb25maWc0ID0gcmVhZF9jMF9jb25maWc0KCk7CisKKwlpZiAoKGNvbmZpZzQgJiBNSVBTX0NPTkY0X01NVUVYVERFRikgPT0gTUlQU19DT05GNF9NTVVFWFRERUZfTU1VU0laRUVYVAorCSAgICAmJiBjcHVfaGFzX3RsYikKKwkJYy0+dGxic2l6ZSArPSAoY29uZmlnNCAmIE1JUFNfQ09ORjRfTU1VU0laRUVYVCkgKiAweDQwOworCisJcmV0dXJuIGNvbmZpZzQgJiBNSVBTX0NPTkZfTTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGRlY29kZV9jb25maWdzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMpCiB7CiAJaW50IG9rOwpAQCAtNzE4LDYgKzczMiw4IEBACiAJCW9rID0gZGVjb2RlX2NvbmZpZzIoYyk7CiAJaWYgKG9rKQogCQlvayA9IGRlY29kZV9jb25maWczKGMpOworCWlmIChvaykKKwkJb2sgPSBkZWNvZGVfY29uZmlnNChjKTsKIAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQpAQCAtNzMxLDkgKzc0Nyw2IEBACiAJCV9fY3B1X25hbWVbY3B1XSA9ICJNSVBTIDRLYyI7CiAJCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfNEtFQzoKLQkJYy0+Y3B1dHlwZSA9IENQVV80S0VDOwotCQlfX2NwdV9uYW1lW2NwdV0gPSAiTUlQUyA0S0VjIjsKLQkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF80S0VDUjI6CiAJCWMtPmNwdXR5cGUgPSBDUFVfNEtFQzsKIAkJX19jcHVfbmFtZVtjcHVdID0gIk1JUFMgNEtFYyI7CkBAIC04OTksMTIgKzkxMiwxOCBAQAogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NOMzhYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjMxWFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ04zMFhYOgorCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT047CisJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uIjsKKwkJZ290byBwbGF0Zm9ybTsKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjU4WFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041NlhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONTBYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjUyWFg6Ci0JCWMtPmNwdXR5cGUgPSBDUFVfQ0FWSVVNX09DVEVPTjsKLQkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24iOworCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT05fUExVUzsKKwkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24rIjsKK3BsYXRmb3JtOgorCQlpZiAoY3B1ID09IDApCisJCQlfX2VsZl9wbGF0Zm9ybSA9ICJvY3Rlb24iOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIE9jdGVvbiBjaGlwIVxuIik7CkBAIC05MTQsNiArOTMzLDcgQEAKIH0KIAogY29uc3QgY2hhciAqX19jcHVfbmFtZVtOUl9DUFVTXTsKK2NvbnN0IGNoYXIgKl9fZWxmX3BsYXRmb3JtOwogCiBfX2NwdWluaXQgdm9pZCBjcHVfcHJvYmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDY4YjA2NzAuLmU5ZTY0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhhbmtzIGdvZXMgdG8gU3RldmVuIFJvc3RlZHQgZm9yIHdyaXRpbmcgdGhlIG9yaWdpbmFsIHg4NiB2ZXJzaW9uLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKaW5kZXggMDFjMDg4NS4uMjc3OTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMjksNyArMjksNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pID0gLTE7Ci1ERUZJTkVfU1BJTkxPQ0soaTgyNTlBX2xvY2spOworREVGSU5FX1JBV19TUElOTE9DSyhpODI1OUFfbG9jayk7CiBzdGF0aWMgdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfODI1OUEodW5zaWduZWQgaW50IGlycSk7CkBAIC02NSwxMyArNjUsMTMgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAljYWNoZWRfaXJxX21hc2sgfD0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CiAJZWxzZQogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTgxLDEzICs4MSwxMyBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gfigxIDw8IGlycSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtOTgsMTIgKzk4LDEyIEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA8IDgpCiAJCXJldCA9IGluYihQSUNfTUFTVEVSX0NNRCkgJiBtYXNrOwogCWVsc2UKIAkJcmV0ID0gaW5iKFBJQ19TTEFWRV9DTUQpICYgKG1hc2sgPj4gOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJaXJxbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTE4Myw3ICsxODMsNyBAQAogCQlvdXRiKDB4NjAraXJxLCBQSUNfTUFTVEVSX0NNRCk7CS8qICdTcGVjaWZpYyBFT0kgdG8gbWFzdGVyICovCiAJfQogCXNtdGNfaW1fYWNrX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yNjQsNyArMjY0LDcgQEAKIAogCWk4MjU5QV9hdXRvX2VvaSA9IGF1dG9fZW9pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJb3V0YigweGZmLCBQSUNfTUFTVEVSX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTEgKi8KIAlvdXRiKDB4ZmYsIFBJQ19TTEFWRV9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0yICovCkBAIC0yOTgsNyArMjk4LDcgQEAKIAlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOyAvKiByZXN0b3JlIG1hc3RlciBJUlEgbWFzayAqLwogCW91dGIoY2FjaGVkX3NsYXZlX21hc2ssIFBJQ19TTEFWRV9JTVIpOwkgIC8qIHJlc3RvcmUgc2xhdmUgSVJRIG1hc2sgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMKaW5kZXggZWJjYzVmNy4uNDJlZjgxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYwpAQCAtMjcsMTggKzI3LDE4IEBACiAKICNkZWZpbmUgR1Q2NDFYWF9JUlFfVE9fQklUKGlycSkJKDFVIDw8IChpcnEgLSBHVDY0MVhYX0lSUV9CQVNFKSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhndDY0MXh4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGd0NjQxeHhfaXJxX2xvY2spOwogCiBzdGF0aWMgdm9pZCBhY2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBjYXVzZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJY2F1c2UgPSBHVF9SRUFEKEdUX0lOVFJDQVVTRV9PRlMpOwogCWNhdXNlICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSQ0FVU0VfT0ZTLCBjYXVzZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQ2LDExICs0NiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19hY2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTU4LDcgKzU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBjYXVzZSwgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJbWFzayA9IEdUX1JFQUQoR1RfSU5UUk1BU0tfT0ZTKTsKIAltYXNrICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIG1hc2spOwpAQCAtNjYsNyArNjYsNyBAQAogCWNhdXNlID0gR1RfUkVBRChHVF9JTlRSQ0FVU0VfT0ZTKTsKIAljYXVzZSAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUkNBVVNFX09GUywgY2F1c2UpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB1bm1hc2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTc0LDExICs3NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayB8PSBHVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGd0NjQxeHhfaXJxX2NoaXAgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IGYwNDI1NjMuLmJkZTc5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21jb3VudC5TIGIvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUwppbmRleCAwYTljZmRiLi42ODUxZmM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKQEAgLTYsNyArNiw3IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUyBiL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCmluZGV4IDM5NTJiODMuLmRkMThiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCkBAIC01MDAsNCArNTAwLDMgQEAKIAkgbm9wCiAJRU5EKG9jdGVvbl9tdWx0X3Jlc3RvcmUpCiAJLnNldCBwb3AKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCAzNjRmMDY2Li5kY2FlZDFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zcGlubG9ja190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MTEzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jCkBAIC0wLDAgKzEsMTQxIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworCitzdGF0aWMgaW50IHNzX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlrdGltZV90IHN0YXJ0LCBmaW5pc2g7CisJaW50IGxvb3BzOworCWludCBjb250OworCURFRklORV9SQVdfU1BJTkxPQ0soc3Nfc3Bpbik7CisKKwlsb29wcyA9IDEwMDAwMDA7CisJY29udCA9IDE7CisKKwlzdGFydCA9IGt0aW1lX2dldCgpOworCisJd2hpbGUgKGNvbnQpIHsKKwkJcmF3X3NwaW5fbG9jaygmc3Nfc3Bpbik7CisJCWxvb3BzLS07CisJCWlmIChsb29wcyA9PSAwKQorCQkJY29udCA9IDA7CisJCXJhd19zcGluX3VubG9jaygmc3Nfc3Bpbik7CisJfQorCisJZmluaXNoID0ga3RpbWVfZ2V0KCk7CisKKwkqdmFsID0ga3RpbWVfdXNfZGVsdGEoZmluaXNoLCBzdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZm9wc19zcywgc3NfZ2V0LCBOVUxMLCAiJWxsdVxuIik7CisKKworCitzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSB7CisJcmF3X3NwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCBzdGFydF93YWl0OworCWF0b21pY190IGVudGVyX3dhaXQ7CisJYXRvbWljX3QgZXhpdF93YWl0OworCWludCBsb29wczsKK307CisKK3N0cnVjdCBzcGluX211bHRpX3Blcl90aHJlYWQgeworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlICpzdGF0ZTsKKwlrdGltZV90IHN0YXJ0OworfTsKKworc3RhdGljIGludCBtdWx0aV9vdGhlcih2b2lkICpkYXRhKQoreworCWludCBsb29wczsKKwlpbnQgY29udDsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9wZXJfdGhyZWFkICpwdCA9IGRhdGE7CisJc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgKnMgPSBwdC0+c3RhdGU7CisKKwlsb29wcyA9IHMtPmxvb3BzOworCWNvbnQgPSAxOworCisJYXRvbWljX2RlYygmcy0+ZW50ZXJfd2FpdCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnMtPmVudGVyX3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKworCXB0LT5zdGFydCA9IGt0aW1lX2dldCgpOworCisJYXRvbWljX2RlYygmcy0+c3RhcnRfd2FpdCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnMtPnN0YXJ0X3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKworCXdoaWxlIChjb250KSB7CisJCXJhd19zcGluX2xvY2soJnMtPmxvY2spOworCQlsb29wcy0tOworCQlpZiAobG9vcHMgPT0gMCkKKwkJCWNvbnQgPSAwOworCQlyYXdfc3Bpbl91bmxvY2soJnMtPmxvY2spOworCX0KKworCWF0b21pY19kZWMoJnMtPmV4aXRfd2FpdCk7CisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5leGl0X3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdWx0aV9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJa3RpbWVfdCBmaW5pc2g7CisJc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgbXM7CisJc3RydWN0IHNwaW5fbXVsdGlfcGVyX3RocmVhZCB0MSwgdDI7CisKKwltcy5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKCJtdWx0aV9nZXQiKTsKKwltcy5sb29wcyA9IDEwMDAwMDA7CisKKwlhdG9taWNfc2V0KCZtcy5zdGFydF93YWl0LCAyKTsKKwlhdG9taWNfc2V0KCZtcy5lbnRlcl93YWl0LCAyKTsKKwlhdG9taWNfc2V0KCZtcy5leGl0X3dhaXQsIDIpOworCXQxLnN0YXRlID0gJm1zOworCXQyLnN0YXRlID0gJm1zOworCisJa3RocmVhZF9ydW4obXVsdGlfb3RoZXIsICZ0MiwgIm11bHRpX2dldCIpOworCisJbXVsdGlfb3RoZXIoJnQxKTsKKworCWZpbmlzaCA9IGt0aW1lX2dldCgpOworCisJKnZhbCA9IGt0aW1lX3VzX2RlbHRhKGZpbmlzaCwgdDEuc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGZvcHNfbXVsdGksIG11bHRpX2dldCwgTlVMTCwgIiVsbHVcbiIpOworCisKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICptaXBzX2RlYnVnZnNfZGlyOworc3RhdGljIGludCBfX2luaXQgc3BpbmxvY2tfdGVzdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIW1pcHNfZGVidWdmc19kaXIpCisJCXJldHVybiAtRU5PREVWOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNwaW5fc2luZ2xlIiwgU19JUlVHTywKKwkJCQltaXBzX2RlYnVnZnNfZGlyLCBOVUxMLAorCQkJCSZmb3BzX3NzKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNwaW5fbXVsdGkiLCBTX0lSVUdPLAorCQkJCW1pcHNfZGVidWdmc19kaXIsIE5VTEwsCisJCQkJJmZvcHNfbXVsdGkpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChzcGlubG9ja190ZXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCAzMWIyMDRiLi40ZTAwZjliIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogZXh0ZXJuIHZvaWQgY2hlY2tfd2FpdCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcjRrX3dhaXQodm9pZCk7CkBAIC0xMjcxLDIxICsxMjcyLDI1IEBACiB1bnNpZ25lZCBsb25nIGV4Y2VwdGlvbl9oYW5kbGVyc1szMl07CiB1bnNpZ25lZCBsb25nIHZpX2hhbmRsZXJzWzY0XTsKIAotLyoKLSAqIEFzIGEgc2lkZSBlZmZlY3Qgb2YgdGhlIHdheSB0aGlzIGlzIGltcGxlbWVudGVkIHdlJ3JlIGxpbWl0ZWQKLSAqIHRvIGludGVycnVwdCBoYW5kbGVycyBpbiB0aGUgYWRkcmVzcyByYW5nZSBmcm9tCi0gKiBLU0VHMCA8PSB4IDwgS1NFRzAgKyAyNTZtYiBvbiB0aGUgTmV2YWRhLiAgT2ggd2VsbCAuLi4KLSAqLwotdm9pZCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpCit2b2lkIF9faW5pdCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBvbGRfaGFuZGxlciA9IGV4Y2VwdGlvbl9oYW5kbGVyc1tuXTsKIAogCWV4Y2VwdGlvbl9oYW5kbGVyc1tuXSA9IGhhbmRsZXI7CiAJaWYgKG4gPT0gMCAmJiBjcHVfaGFzX2RpdmVjKSB7Ci0JCSoodTMyICopKGViYXNlICsgMHgyMDApID0gMHgwODAwMDAwMCB8Ci0JCQkJCSAgKDB4MDNmZmZmZmYgJiAoaGFuZGxlciA+PiAyKSk7Ci0JCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShlYmFzZSArIDB4MjAwLCBlYmFzZSArIDB4MjA0KTsKKwkJdW5zaWduZWQgbG9uZyBqdW1wX21hc2sgPSB+KCgxIDw8IDI4KSAtIDEpOworCQl1MzIgKmJ1ZiA9ICh1MzIgKikoZWJhc2UgKyAweDIwMCk7CisJCXVuc2lnbmVkIGludCBrMCA9IDI2OworCQlpZiAoKGhhbmRsZXIgJiBqdW1wX21hc2spID09ICgoZWJhc2UgKyAweDIwMCkgJiBqdW1wX21hc2spKSB7CisJCQl1YXNtX2lfaigmYnVmLCBoYW5kbGVyICYgfmp1bXBfbWFzayk7CisJCQl1YXNtX2lfbm9wKCZidWYpOworCQl9IGVsc2UgeworCQkJVUFTTV9pX0xBKCZidWYsIGswLCBoYW5kbGVyKTsKKwkJCXVhc21faV9qcigmYnVmLCBrMCk7CisJCQl1YXNtX2lfbm9wKCZidWYpOworCQl9CisJCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShlYmFzZSArIDB4MjAwLCAodW5zaWduZWQgbG9uZylidWYpOwogCX0KIAlyZXR1cm4gKHZvaWQgKilvbGRfaGFuZGxlcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IDYwNDc3NTIuLjJiZDIxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaCBiL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaAppbmRleCA5MWRmNTUzLi4yZjA3NTc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmgKKysrIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oCkBAIC00Miw0ICs0MiwzIEBACiAKIHZvaWQgcHZjX2NsZWFyKHZvaWQpOwogdm9pZCBwdmNfaG9tZSh2b2lkKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYwppbmRleCA3YWQ0N2YyLi4xYTA2ZGVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYwpAQCAtMTAsNyArMTAsNyBAQAogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIxLDEyICsyMSwxMSBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KIAotaW50IHByb21fYXJnYzsKLS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwotaW50ICpfcHJvbV9hcmd2OwotCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKQogeworCWludCBwcm9tX2FyZ2M7CisJLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCisJaW50ICpfcHJvbV9hcmd2OwogCWludCBpOwogCWxvbmcgbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jCmluZGV4IGI0OTQ4NWYuLmIzZmQ1ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMKaW5kZXggNzRmOWM1OS4uZWFmOGI4NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwppbmRleCAzZjYxNTk0Li45YTk2YjU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwppbmRleCBiNmYxN2Y1Li5mNWMwODE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKaW5kZXggNmNiNDRkYi4uOGM4MDdjOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IFlhbmh1YSwgeWFuaEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgemhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogUmVmZXJlbmNlOiBBTUQgR2VvZGUoVE0pIENTNTUzNiBDb21wYW5pb24gRGV2aWNlIERhdGEgQm9vawogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jCmluZGV4IDhmZGIwMmIuLmRiNTkwMGFhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwppbmRleCBlMjNmM2Q3Li42ZGZlYWIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCmluZGV4IDIzZTdhOGYuLmE3MTczNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICogIENvcHlyaWdodCAoYykgMjAwOSBMZW1vdGUgSW5jLgotICogIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKaW5kZXggMTk2ZDk0Ny4uYWU0Y2ZmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCkBAIC05LDggKzksOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIzLDEzICsyMywxMCBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KIAotdW5zaWduZWQgbG9uZyBidXNfY2xvY2ssIGNwdV9jbG9ja19mcmVxOwordW5zaWduZWQgbG9uZyBjcHVfY2xvY2tfZnJlcTsKIEVYUE9SVF9TWU1CT0woY3B1X2Nsb2NrX2ZyZXEpOwogdW5zaWduZWQgbG9uZyBtZW1zaXplLCBoaWdobWVtc2l6ZTsKIAotLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCi1pbnQgKl9wcm9tX2VudnA7Ci0KICNkZWZpbmUgcGFyc2VfZXZlbl9lYXJsaWVyKHJlcywgb3B0aW9uLCBwKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmIChzdHJuY21wKG9wdGlvbiwgKGNoYXIgKilwLCBzdHJsZW4ob3B0aW9uKSkgPT0gMCkJCVwKQEAgLTM5LDYgKzM2LDEwIEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdF9lbnYodm9pZCkKIHsKKwkvKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KKwlpbnQgKl9wcm9tX2VudnA7CisJdW5zaWduZWQgbG9uZyBidXNfY2xvY2s7CisJdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKIAlsb25nIGw7CiAKIAkvKiBmaXJtd2FyZSBhcmd1bWVudHMgYXJlIGluaXRpYWxpemVkIGluIGhlYWQuUyAqLwpAQCAtNTUsNiArNTYsMjIgQEAKIAl9CiAJaWYgKG1lbXNpemUgPT0gMCkKIAkJbWVtc2l6ZSA9IDI1NjsKKwlpZiAoYnVzX2Nsb2NrID09IDApCisJCWJ1c19jbG9jayA9IDY2MDAwMDAwOworCWlmIChjcHVfY2xvY2tfZnJlcSA9PSAwKSB7CisJCXByb2Nlc3Nvcl9pZCA9ICgmY3VycmVudF9jcHVfZGF0YSktPnByb2Nlc3Nvcl9pZDsKKwkJc3dpdGNoIChwcm9jZXNzb3JfaWQgJiBQUklEX1JFVl9NQVNLKSB7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRToKKwkJCWNwdV9jbG9ja19mcmVxID0gNTMzMDgwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRjoKKwkJCWNwdV9jbG9ja19mcmVxID0gNzk3MDAwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljcHVfY2xvY2tfZnJlcSA9IDEwMDAwMDAwMDsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJcHJfaW5mbygiYnVzY2xvY2s9JWxkLCBjcHVjbG9jaz0lbGQsIG1lbXNpemU9JWxkLCBoaWdobWVtc2l6ZT0lbGRcbiIsCiAJCWJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXEsIG1lbXNpemUsIGhpZ2htZW1zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKaW5kZXggYTJhYmQ5My4uMTlkMzQxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYwppbmRleCAwZWQ1MmIzLi44NTNmMTg0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgogICoKQEAgLTM1LDYgKzM1LDEwIEBACiAJcmV0dXJuIHN5c3RlbV90eXBlc1ttaXBzX21hY2h0eXBlXTsKIH0KIAordm9pZCBfX3dlYWsgX19pbml0IG1hY2hfcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpCit7Cit9CisKIHZvaWQgX19pbml0IHByb21faW5pdF9tYWNodHlwZSh2b2lkKQogewogCWNoYXIgKnAsIHN0cltNQUNIVFlQRV9MRU5dOwpAQCAtNDMsOCArNDcsMTAgQEAKIAltaXBzX21hY2h0eXBlID0gTE9PTkdTT05fTUFDSFRZUEU7CiAKIAlwID0gc3Ryc3RyKGFyY3NfY21kbGluZSwgIm1hY2h0eXBlPSIpOwotCWlmICghcCkKKwlpZiAoIXApIHsKKwkJbWFjaF9wcm9tX2luaXRfbWFjaHR5cGUoKTsKIAkJcmV0dXJuOworCX0KIAlwICs9IHN0cmxlbigibWFjaHR5cGU9Iik7CiAJc3RybmNweShzdHIsIHAsIE1BQ0hUWVBFX0xFTik7CiAJcCA9IHN0cnN0cihzdHIsICIgIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYwppbmRleCBjZWFjZDA5Li5lYzJmNzk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKQEAgLTE2LDEwICsxNiwxMSBAQAogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfbWVtb3J5KHZvaWQpCiB7Ci0gICAgYWRkX21lbW9yeV9yZWdpb24oMHgwLCAobWVtc2l6ZSA8PCAyMCksIEJPT1RfTUVNX1JBTSk7CisJYWRkX21lbW9yeV9yZWdpb24oMHgwLCAobWVtc2l6ZSA8PCAyMCksIEJPT1RfTUVNX1JBTSk7CiAKLSAgICBhZGRfbWVtb3J5X3JlZ2lvbihtZW1zaXplIDw8IDIwLCBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUIC0gKG1lbXNpemUgPDwKLQkJCSAgICAyMCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbihtZW1zaXplIDw8IDIwLCBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUIC0gKG1lbXNpemUgPDwKKwkJCQkyMCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwogI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRwogCXsKIAkJaW50IGJpdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwppbmRleCBiZTgxNzc3Li5lZDAwN2EyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKaW5kZXggYjYyNWZlYy4uNmMxZmQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYwpAQCAtMiw3ICsyLDcgQEAKICAqIGxvb25nc29uLXNwZWNpZmljIHN1c3BlbmQgc3VwcG9ydAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKaW5kZXggZDU3ZjE3MS4uNGJkOWMxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYwpAQCAtNiw4ICs2LDggQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogWmhhbmdqaW4gV3UsIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBaaGFuZ2ppbiBXdSwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpAQCAtMjUsMTggKzI1LDI2IEBACiAJKCh2b2lkICgqKSh2b2lkKSlpb3JlbWFwX25vY2FjaGUoTE9PTkdTT05fQk9PVF9CQVNFLCA0KSkgKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb25nc29uX2hhbHQodm9pZCkKK3N0YXRpYyB2b2lkIGxvb25nc29uX3Bvd2Vyb2ZmKHZvaWQpCiB7CiAJbWFjaF9wcmVwYXJlX3NodXRkb3duKCk7Ci0Jd2hpbGUgKDEpCi0JCTsKKwl1bnJlYWNoYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBsb29uZ3Nvbl9oYWx0KHZvaWQpCit7CisJcHJfbm90aWNlKCJcblxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyIG5vdyAqKlxuXG4iKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoY3B1X3dhaXQpCisJCQljcHVfd2FpdCgpOworCX0KIH0KIAogc3RhdGljIGludCBfX2luaXQgbWlwc19yZWJvb3Rfc2V0dXAodm9pZCkKIHsKIAlfbWFjaGluZV9yZXN0YXJ0ID0gbG9vbmdzb25fcmVzdGFydDsKIAlfbWFjaGluZV9oYWx0ID0gbG9vbmdzb25faGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBsb29uZ3Nvbl9oYWx0OworCXBtX3Bvd2VyX29mZiA9IGxvb25nc29uX3Bvd2Vyb2ZmOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYwppbmRleCAyM2I2NmE1Li43NTgwODczIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgogICogQXV0aG9yOiBZYW4gaHVhICh5YW5odWFAbGVtb3RlLmNvbSkKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1empAbGVtb3RlLmNvbSkKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1emhhbmdqaW5AZ21haWwuY29tKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYwppbmRleCAzNWYwYjY2Li45ZmRkMDFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYwpAQCAtMiw4ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jCmluZGV4IDc4ZmY2NmEuLmQ2OWVhNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKaW5kZXggZmMxNmM2Ny4uYmMzOWVjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCkBAIC0xLDggKzEsOCBAQAogLyogQm9hcmQtc3BlY2lmaWMgcmVib290L3NodXRkb3duIHJvdXRpbmVzCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlCmluZGV4IDRkODRiMjcuLjg2OTlhNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIGxlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcwogIwogCi1vYmoteSArPSBpcnEubyByZXNldC5vIGVjX2tiMzMxMGIubworb2JqLXkgKz0gbWFjaHR5cGUubyBpcnEubyByZXNldC5vIGVjX2tiMzMxMGIubwogCiAjCiAjIFN1c3BlbmQgU3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwppbmRleCA0ZDg0MTExLi42NDA1NzI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwpAQCAtNzUsNiArNzUsOCBAQAogCQl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKIAl9CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2FjY2Vzc19sb2NrLCBmbGFncyk7CisKIAlpZiAodGltZW91dCA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlYWRhYmxlIGVycm9yIDogdGltZW91dC4uLlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtODMsOCArODUsNiBAQAogCQkJICAgIigleC8lZCllYyBpc3N1ZWQgY29tbWFuZCAlZCBzdGF0dXMgOiAweCV4XG4iLAogCQkJICAgdGltZW91dCwgRUNfQ01EX1RJTUVPVVQgLSB0aW1lb3V0LCBjbWQsIHN0YXR1cyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2FjY2Vzc19sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWNfcXVlcnlfc2VxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCmluZGV4IDc3ZDMyZjkuLjg4MmRmY2Q0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpcnEgPSAtMTsKIAogCWlmICgoTE9PTkdTT05fSU5USVNSICYgTE9PTkdTT05fSU5URU4pICYgTE9PTkdTT05fSU5UX0JJVF9JTlQwKSB7Ci0JCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CiAJCWlzciA9IGluYihQSUNfTUFTVEVSX0NNRCkgJgogCQkJfmluYihQSUNfTUFTVEVSX0lNUikgJiB+KDEgPDwgUElDX0NBU0NBREVfSVIpOwogCQlpZiAoIWlzcikKQEAgLTU2LDcgKzU2LDcgQEAKIAkJCWlmICh+aW5iKFBJQ19NQVNURVJfSVNSKSAmIDB4ODApCiAJCQkJaXJxID0gLTE7CiAJCX0KLQkJc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CiAJfQogCiAJcmV0dXJuIGlycTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODYwYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9tYWNodHlwZS5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8bG9vbmdzb24uaD4KKwordm9pZCBfX2luaXQgbWFjaF9wcm9tX2luaXRfbWFjaHR5cGUodm9pZCkKK3sKKwkvKiBXZSBzaGFyZSB0aGUgc2FtZSBrZXJuZWwgaW1hZ2UgZmlsZSBhbW9uZyBMZW1vdGUgMkYgZmFtaWx5CisJICogb2YgbWFjaGluZXMsIGFuZCBwcm92aWRlIHRoZSBtYWNodHlwZT0ga2VybmVsIGNvbW1hbmQgbGluZQorCSAqIHRvIHVzZXJzIHRvIGluZGljYXRlIHRoZWlyIG1hY2hpbmUsIHRoaXMgY29tbWFuZCBsaW5lIHdpbGwKKwkgKiBiZSBwYXNzZWQgYnkgdGhlIGxhdGVzdCBQTU9OIGF1dG9tYXRpY2FsbHkuIGFuZCBmb3J0dW5hdGVseSwKKwkgKiB1cCB0byBub3csIHdlIGNhbiBnZXQgdGhlIG1hY2hpbmUgdHlwZSBmcm9tIHRoZSBQTU9OX1ZFUj0KKwkgKiBjb21tYW5kbGluZSBkaXJlY3RseSBleGNlcHQgdGhlIE5BUyBtYWNoaW5lLCBJbiB0aGUgb2xkCisJICogbWFjaGluZXMsIHRoaXMgd2lsbCBoZWxwIHRoZSB1c2VycyBhIGxvdC4KKwkgKgorCSAqIElmIG5vICJtYWNodHlwZT0iIHBhc3NlZCwgZ2V0IG1hY2hpbmUgdHlwZSBmcm9tICJQTU9OX1ZFUj0iLgorCSAqIAlQTU9OX1ZFUj1MTTgwODkJCUxlbW90ZSA4LjknJyBuZXRib29rCisJICogCSAgICAgICAgIExNODEwMQkJTGVtb3RlIDEwLjEnJyBuZXRib29rCisJICogCShUaGUgYWJvdmUgdHdvIG5ldGJvb2tzIGhhdmUgdGhlIHNhbWUga2VybmVsIHN1cHBvcnQpCisJICoJICAgICAgICAgTE02WFhYCQlMZW1vdGUgRnVMb29uZygyRikgYm94IHNlcmllcworCSAqCSAgICAgICAgIExNOVhYWAkJTGVtb3RlIEx5bkxvb25nIFBDIHNlcmllcworCSAqLworCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE0iKSkgeworCQlpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNOCIpKQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX1lMMkY4OTsKKwkJZWxzZSBpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNNiIpKQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX0ZMMkY7CisJCWVsc2UgaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTkiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9MTDJGOworCQllbHNlCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfTkFTOworCisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgbWFjaHR5cGU9Iik7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGdldF9zeXN0ZW1fdHlwZSgpKTsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiAiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMKaW5kZXggZDdhZjJlNi4uY2FjNGQzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYwpAQCAtMiw3ICsyLDcgQEAKICAqICBMZW1vdGUgbG9vbmdzb24yZiBmYW1pbHkgbWFjaGluZXMnIHNwZWNpZmljIHN1c3BlbmQgc3VwcG9ydAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKaW5kZXggNTFkMWE2MC4uMzYwMjBhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYwpAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYwppbmRleCA3ZTkwMGYzLi5hMDMyNTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYwpAQCAtMTM1LDQgKzEzNSwzIEBACiAJcHJpbnRrKCJcbiIpOwogCXJldHVybiB4OwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMKaW5kZXggNmQyZDg5Zi4uMmYyMmZkNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAKIAkJCXN3aXRjaChpZWVlNzU0X2Nzci5ybSkgewogCQkJY2FzZSBJRUVFNzU0X1JOOgotCQkJCXJldHVybiBpZWVlNzU0ZHBfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlo6CiAJCQkJcmV0dXJuIGllZWU3NTRkcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SVTogICAgLyogdG93YXJkICtJbmZpbml0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jCmluZGV4IDQ2MzUzNDAuLmExOWI3MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMKQEAgLTE0OSw3ICsxNDksNiBAQAogCiAJCQlzd2l0Y2goaWVlZTc1NF9jc3Iucm0pIHsKIAkJCWNhc2UgSUVFRTc1NF9STjoKLQkJCQlyZXR1cm4gaWVlZTc1NHNwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JaOgogCQkJCXJldHVybiBpZWVlNzU0c3BfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlU6ICAgICAgLyogdG93YXJkICtJbmZpbml0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYwppbmRleCA3ZDhlZjg5Li5lMDI0MjNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYwpAQCAtNDYsNCArNDYsMyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJmbG9hdGluZyBwb2ludCBleGNlcHRpb24gaW4gXCIlc1wiLCB0eXBlPSVzXG4iLAogCQl4Y3AtPm9wLCBydG5hbWVzW3hjcC0+cnRdKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMgYi9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYwppbmRleCBlMDZmMWFmLi4wZjljNDg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAKIAlzd2l0Y2ggKGMtPmNwdXR5cGUpIHsKIAljYXNlIENQVV9DQVZJVU1fT0NURU9OOgorCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT05fUExVUzoKIAkJY29uZmlnMSA9IHJlYWRfYzBfY29uZmlnMSgpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMiA8PCAoKGNvbmZpZzEgPj4gMTkpICYgNyk7CiAJCWMtPmljYWNoZS5zZXRzID0gNjQgPDwgKChjb25maWcxID4+IDIyKSAmIDcpOwpAQCAtMTkyLDEwICsxOTMsMTAgQEAKIAkJCWMtPmljYWNoZS5zZXRzICogYy0+aWNhY2hlLndheXMgKiBjLT5pY2FjaGUubGluZXN6OwogCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplIC8gYy0+aWNhY2hlLndheXMpIC0gMTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDEyODsKLQkJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zWFhYKSkKLQkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwotCQllbHNlCisJCWlmIChjLT5jcHV0eXBlID09IENQVV9DQVZJVU1fT0NURU9OX1BMVVMpCiAJCQljLT5kY2FjaGUuc2V0cyA9IDI7IC8qIENONVhYWCBoYXMgdHdvIERjYWNoZSBzZXRzICovCisJCWVsc2UKKwkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwogCQljLT5kY2FjaGUud2F5cyA9IDY0OwogCQlkY2FjaGVfc2l6ZSA9CiAJCQljLT5kY2FjaGUuc2V0cyAqIGMtPmRjYWNoZS53YXlzICogYy0+ZGNhY2hlLmxpbmVzejsKQEAgLTMwNSw0ICszMDYsMyBAQAogewogCWNhY2hlX3Bhcml0eV9lcnJvcl9vY3Rlb24oMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKaW5kZXggZTcxNmNhZi4uYmU4NjI3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NhY2hlLmMKKysrIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKQEAgLTEzNywyMiArMTM3LDQzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wcm90ZWN0aW9uX21hcCh2b2lkKQogewotCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzFdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsyXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFs0XSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbNV0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzddID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzhdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsxMF0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMV0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzEzXSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMTRdID0gUEFHRV9TSEFSRUQ7Ci0JcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXByb3RlY3Rpb25fbWFwWzBdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMpOworCQlwcm90ZWN0aW9uX21hcFsyXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbM10gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDKTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbNV0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFs2XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFs3XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCk7CisKKwkJcHJvdGVjdGlvbl9tYXBbOF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzldICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyk7CisJCXByb3RlY3Rpb25fbWFwWzEwXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTJdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTNdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFICB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxNV0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFKTsKKworCX0gZWxzZSB7CisJCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOworCQlwcm90ZWN0aW9uX21hcFsxXSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzJdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFs1XSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFs3XSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbOF0gPSBQQUdFX05PTkU7CisJCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMTBdID0gUEFHRV9TSEFSRUQ7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IFBBR0VfU0hBUkVEOworCQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxM10gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBQQUdFX1NIQVJFRDsKKwkJcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCBlOTdhN2EyLi5iNzhmN2Q5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtOTksOCArOTksMzEgQEAKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfSBlbHNlIHsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkpCi0JCQlnb3RvIGJhZF9hcmVhOworCQlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJCWlmIChhZGRyZXNzID09IHJlZ3MtPmNwMF9lcGMgJiYgISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpIHsKKyNpZiAwCisJCQkJcHJfbm90aWNlKCJDcHUlZFslczolZDolMCpseDolbGQ6JTAqbHhdIFhJIHZpb2xhdGlvblxuIiwKKwkJCQkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQkJICBmaWVsZCwgYWRkcmVzcywgd3JpdGUsCisJCQkJCSAgZmllbGQsIHJlZ3MtPmNwMF9lcGMpOworI2VuZGlmCisJCQkJZ290byBiYWRfYXJlYTsKKwkJCX0KKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSkgeworI2lmIDAKKwkJCQlwcl9ub3RpY2UoIkNwdSVkWyVzOiVkOiUwKmx4OiVsZDolMCpseF0gUkkgdmlvbGF0aW9uXG4iLAorCQkJCQkgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCSAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQkgIGZpZWxkLCBhZGRyZXNzLCB3cml0ZSwKKwkJCQkJICBmaWVsZCwgcmVncy0+Y3AwX2VwYyk7CisjZW5kaWYKKwkJCQlnb3RvIGJhZF9hcmVhOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkpCisJCQkJZ290byBiYWRfYXJlYTsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCmluZGV4IDhjMjgzNGYuLmNkMDY2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCkBAIC05Nyw0ICs5NywzIEBACiAJCXBhZ2UgKz0gKChhZGRyZXNzICYgfkhQQUdFX01BU0spID4+IFBBR0VfU0hJRlQpOwogCXJldHVybiBwYWdlOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxNjUxOTQyLi4xMjUzOWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKIAllbnRyeWxvID0gcHRlLnB0ZV9oaWdoOwogI2Vsc2UKLQllbnRyeWxvID0gcHRlX3ZhbChwdGUpID4+IDY7CisJZW50cnlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwocHRlKSk7CiAjZW5kaWYKIAogCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKQEAgLTI5OCw3ICsyOTgsNyBAQAogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi1zdGF0aWMgaW50IF9faW5pdCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKK2ludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKIHsKIAlpbnQgaTsKIApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgKiB3aWxsIG9mZmljaWFsbHkgYmUgcmV0aXJlZC4KICAqLwogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbX1BUUlNfUEVSX1BHRF0gX19wYWdlX2FsaWduZWQoX1BHRF9PUkRFUik7Ci0jaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHBtZF90IGludmFsaWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF0gX19wYWdlX2FsaWduZWQoUE1EX09SREVSKTsKICNlbmRpZgogcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZChQVEVfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BhZ2UuYyBiL2FyY2gvbWlwcy9tbS9wYWdlLmMKaW5kZXggZjVjNzM3NS4uMzYyNzJmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BhZ2UuYworKysgYi9hcmNoL21pcHMvbW0vcGFnZS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZG1hLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgInVhc20uaCIKKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiAvKiBSZWdpc3RlcnMgdXNlZCBpbiB0aGUgYXNzZW1ibGVkIHJvdXRpbmVzLiAqLwogI2RlZmluZSBaRVJPIDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCmluZGV4IDExMjEwMTkuLjc4ZWFhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAtMTUsMjMgKzE1LDMxIEBACiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nICpwLCAqZW5kOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisKKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZTsKKyNlbHNlCisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZTsKKyNlbmRpZgogCiAgCXAgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlOwogCWVuZCA9IHAgKyBQVFJTX1BFUl9QR0Q7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOworCQlwWzBdID0gZW50cnk7CisJCXBbMV0gPSBlbnRyeTsKKwkJcFsyXSA9IGVudHJ5OworCQlwWzNdID0gZW50cnk7CisJCXBbNF0gPSBlbnRyeTsKKwkJcFs1XSA9IGVudHJ5OworCQlwWzZdID0gZW50cnk7CisJCXBbN10gPSBlbnRyeTsKIAkJcCArPSA4OwogCX0KIH0KIAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCwgKmVuZDsKQEAgLTQwLDE3ICs0OCwxOCBAQAogCWVuZCA9IHAgKyBQVFJTX1BFUl9QTUQ7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOworCQlwWzBdID0gcGFnZXRhYmxlOworCQlwWzFdID0gcGFnZXRhYmxlOworCQlwWzJdID0gcGFnZXRhYmxlOworCQlwWzNdID0gcGFnZXRhYmxlOworCQlwWzRdID0gcGFnZXRhYmxlOworCQlwWzVdID0gcGFnZXRhYmxlOworCQlwWzZdID0gcGFnZXRhYmxlOworCQlwWzddID0gcGFnZXRhYmxlOwogCQlwICs9IDg7CiAJfQogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHBhZ2V0YWJsZV9pbml0KHZvaWQpCiB7CkBAIC01OSw4ICs2OCw5IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KIAlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2Rpcik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlwbWRfaW5pdCgodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSwgKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVfdGFibGUpOwotCisjZW5kaWYKIAlwZ2RfYmFzZSA9IHN3YXBwZXJfcGdfZGlyOwogCS8qCiAJICogRml4ZWQgbWFwcGluZ3M6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwppbmRleCBkNzM0MjhiLi5jNjE4ZWVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvOwogCQl3cml0ZV9jMF9wYWdlbWFzayhQTV9IVUdFX01BU0spOwogCQlwdGVwID0gKHB0ZV90ICopcG1kcDsKLQkJbG8gPSBwdGVfdmFsKCpwdGVwKSA+PiA2OworCQlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXApKTsKIAkJd3JpdGVfYzBfZW50cnlsbzAobG8pOwogCQl3cml0ZV9jMF9lbnRyeWxvMShsbyArIChIUEFHRV9TSVpFID4+IDcpKTsKIApAQCAtMzIzLDggKzMyMyw4IEBACiAJCXB0ZXArKzsKIAkJd3JpdGVfYzBfZW50cnlsbzEocHRlcC0+cHRlX2hpZ2gpOwogI2Vsc2UKLQkJd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3ZhbCgqcHRlcCkgPj4gNik7CisJCXdyaXRlX2MwX2VudHJ5bG8wKHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXArKykpKTsKKwkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3RvX2VudHJ5bG8ocHRlX3ZhbCgqcHRlcCkpKTsKICNlbmRpZgogCQltdGMwX3RsYndfaGF6YXJkKCk7CiAJCWlmIChpZHggPCAwKQpAQCAtMzM3LDQwICszMzcsNiBAQAogCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCi0jaWYgMAotc3RhdGljIHZvaWQgcjRrX3VwZGF0ZV9tbXVfY2FjaGVfaHdidWcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBhc2lkOwotCXBnZF90ICpwZ2RwOwotCXBtZF90ICpwbWRwOwotCXB0ZV90ICpwdGVwOwotCWludCBpZHg7Ci0KLQlFTlRFUl9DUklUSUNBTChmbGFncyk7Ci0JYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCWFzaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKLQl3cml0ZV9jMF9lbnRyeWhpKGFkZHJlc3MgfCBhc2lkKTsKLQlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JdGxiX3Byb2JlKCk7Ci0JdGxiX3Byb2JlX2hhemFyZCgpOwotCXBtZHAgPSBwbWRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpOwotCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKLQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcmVzcyk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdmFsKCpwdGVwKSA+PiA2KTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JaWYgKGlkeCA8IDApCi0JCXRsYl93cml0ZV9yYW5kb20oKTsKLQllbHNlCi0JCXRsYl93cml0ZV9pbmRleGVkKCk7Ci0JdGxid191c2VfaGF6YXJkKCk7Ci0JRVhJVF9DUklUSUNBTChmbGFncyk7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX2luaXQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsCiAJdW5zaWduZWQgbG9uZyBlbnRyeWhpLCB1bnNpZ25lZCBsb25nIHBhZ2VtYXNrKQogewpAQCAtNDQ3LDM0ICs0MTMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwcm9iZV90bGIodW5zaWduZWQgbG9uZyBjb25maWcpCi17Ci0Jc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwotCXVuc2lnbmVkIGludCByZWc7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXNuJ3QgYSBNSVBTMzIgLyBNSVBTNjQgY29tcGxpYW50IENQVS4gIENvbmZpZyAxIHJlZ2lzdGVyCi0JICogaXMgbm90IHN1cHBvcnRlZCwgd2UgYXNzdW1lIFI0ayBzdHlsZS4gIENwdSBwcm9iaW5nIGFscmVhZHkgZmlndXJlZAotCSAqIG91dCB0aGUgbnVtYmVyIG9mIHRsYiBlbnRyaWVzLgotCSAqLwotCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwMDApID09IFBSSURfQ09NUF9MRUdBQ1kpCi0JCXJldHVybjsKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JLyoKLQkgKiBJZiBUTEIgaXMgc2hhcmVkIGluIFNNVEMgc3lzdGVtLCB0b3RhbCBzaXplIGFscmVhZHkKLQkgKiBoYXMgYmVlbiBjYWxjdWxhdGVkIGFuZCB3cml0dGVuIGludG8gY3B1X2RhdGEgdGxic2l6ZQotCSAqLwotCWlmKChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgPT0gU01UQ19UTEJfU0hBUkVEKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwotCi0JcmVnID0gcmVhZF9jMF9jb25maWcxKCk7Ci0JaWYgKCEoKGNvbmZpZyA+PiA3KSAmIDMpKQotCQlwYW5pYygiTm8gVExCIHByZXNlbnQiKTsKLQotCWMtPnRsYnNpemUgPSAoKHJlZyA+PiAyNSkgJiAweDNmKSArIDE7Ci19Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBudGxiOwogc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQogewpAQCAtNDg2LDggKzQyNCw2IEBACiAKIHZvaWQgX19jcHVpbml0IHRsYl9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7Ci0KIAkvKgogCSAqIFlvdSBzaG91bGQgbmV2ZXIgY2hhbmdlIHRoaXMgcmVnaXN0ZXI6CiAJICogICAtIE9uIFI0NjAwIDEuNyB0aGUgdGxicCBuZXZlciBoaXRzIGZvciBwYWdlcyBzbWFsbGVyIHRoYW4KQEAgLTQ5NSwxMyArNDMxLDI1IEBACiAJICogICAtIFRoZSBlbnRpcmUgbW0gaGFuZGxpbmcgYXNzdW1lcyB0aGUgYzBfcGFnZW1hc2sgcmVnaXN0ZXIgdG8KIAkgKiAgICAgYmUgc2V0IHRvIGZpeGVkLXNpemUgcGFnZXMuCiAJICovCi0JcHJvYmVfdGxiKGNvbmZpZyk7CiAJd3JpdGVfYzBfcGFnZW1hc2soUE1fREVGQVVMVF9NQVNLKTsKIAl3cml0ZV9jMF93aXJlZCgwKTsKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTAwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTIwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTQwMDApCiAJCXdyaXRlX2MwX2ZyYW1lbWFzaygwKTsKKworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkvKgorCQkgKiBFbmFibGUgdGhlIG5vIHJlYWQsIG5vIGV4ZWMgYml0cywgYW5kIGVuYWJsZSBsYXJnZSB2aXJ0dWFsCisJCSAqIGFkZHJlc3MuCisJCSAqLworCQl1MzIgcGcgPSBQR19SSUUgfCBQR19YSUU7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCXBnIHw9IFBHX0VMUEE7CisjZW5kaWYKKwkJd3JpdGVfYzBfcGFnZWdyYWluKHBnKTsKKwl9CisKIAl0ZW1wX3RsYl9lbnRyeSA9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSAtIDE7CiAKICAgICAgICAgLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSBBUkMgZmlybXdhcmUgaXMgZGVhZC4gICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGJhZGNmNWUuLjBkZTBlNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0yOSw4ICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vd2FyLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogc3RhdGljIGlubGluZSBpbnQgcjQ1a19idmFod2J1Zyh2b2lkKQogewpAQCAtNzcsNiArNzYsOCBAQAogCWxhYmVsX3ZtYWxsb2NfZG9uZSwKIAlsYWJlbF90bGJ3X2hhemFyZCwKIAlsYWJlbF9zcGxpdCwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMSwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMiwKIAlsYWJlbF9ub3BhZ2VfdGxibCwKIAlsYWJlbF9ub3BhZ2VfdGxicywKIAlsYWJlbF9ub3BhZ2VfdGxibSwKQEAgLTkzLDYgKzk0LDggQEAKIFVBU01fTF9MQShfdm1hbGxvY19kb25lKQogVUFTTV9MX0xBKF90bGJ3X2hhemFyZCkKIFVBU01fTF9MQShfc3BsaXQpCitVQVNNX0xfTEEoX3RsYmxfZ29hcm91bmQxKQorVUFTTV9MX0xBKF90bGJsX2dvYXJvdW5kMikKIFVBU01fTF9MQShfbm9wYWdlX3RsYmwpCiBVQVNNX0xfTEEoX25vcGFnZV90bGJzKQogVUFTTV9MX0xBKF9ub3BhZ2VfdGxibSkKQEAgLTM5Nyw3ICs0MDAsNDQgQEAKIAl9CiB9CiAKK3N0YXRpYyBfX2NwdWluaXQgX19tYXliZV91bnVzZWQgdm9pZCBidWlsZF9jb252ZXJ0X3B0ZV90b19lbnRyeWxvKHUzMiAqKnAsCisJCQkJCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfUk9UUihwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKwkJdWFzbV9pX2RzcmwocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOworI2Vsc2UKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSk7CisjZW5kaWYKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKK3N0YXRpYyBfX2NwdWluaXQgdm9pZCBidWlsZF9yZXN0b3JlX3BhZ2VtYXNrKHUzMiAqKnAsCisJCQkJCSAgICAgc3RydWN0IHVhc21fcmVsb2MgKipyLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB0bXAsCisJCQkJCSAgICAgZW51bSBsYWJlbF9pZCBsaWQpCit7CisJLyogUmVzZXQgZGVmYXVsdCBwYWdlIHNpemUgKi8KKwlpZiAoUE1fREVGQVVMVF9NQVNLID4+IDE2KSB7CisJCXVhc21faV9sdWkocCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgPj4gMTYpOworCQl1YXNtX2lfb3JpKHAsIHRtcCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgJiAweGZmZmYpOworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7CisJfSBlbHNlIGlmIChQTV9ERUZBVUxUX01BU0spIHsKKwkJdWFzbV9pX29yaShwLCB0bXAsIDAsIFBNX0RFRkFVTFRfTUFTSyk7CisJCXVhc21faWxfYihwLCByLCBsaWQpOworCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKKwl9IGVsc2UgeworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgMCwgQzBfUEFHRU1BU0spOworCX0KK30KKwogc3RhdGljIF9fY3B1aW5pdCB2b2lkIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5KHUzMiAqKnAsCiAJCQkJCQkgc3RydWN0IHVhc21fbGFiZWwgKipsLAogCQkJCQkJIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKQEAgLTQxMSwyMCArNDUxLDcgQEAKIAogCWJ1aWxkX3RsYl93cml0ZV9lbnRyeShwLCBsLCByLCB3bW9kZSk7CiAKLQkvKiBSZXNldCBkZWZhdWx0IHBhZ2Ugc2l6ZSAqLwotCWlmIChQTV9ERUZBVUxUX01BU0sgPj4gMTYpIHsKLQkJdWFzbV9pX2x1aShwLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyA+PiAxNik7Ci0JCXVhc21faV9vcmkocCwgdG1wLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyAmIDB4ZmZmZik7Ci0JCXVhc21faWxfYihwLCByLCBsYWJlbF9sZWF2ZSk7Ci0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOwotCX0gZWxzZSBpZiAoUE1fREVGQVVMVF9NQVNLKSB7Ci0JCXVhc21faV9vcmkocCwgdG1wLCAwLCBQTV9ERUZBVUxUX01BU0spOwotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKLQl9IGVsc2UgewotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9QQUdFTUFTSyk7Ci0JfQorCWJ1aWxkX3Jlc3RvcmVfcGFnZW1hc2socCwgciwgdG1wLCBsYWJlbF9sZWF2ZSk7CiB9CiAKIC8qCkBAIC00NjAsMTUgKzQ4NywxNSBAQAogCWlmICghc21hbGxfc2VxdWVuY2UpCiAJCXVhc21faV9sdWkocCwgdG1wLCBIUEFHRV9TSVpFID4+ICg3ICsgMTYpKTsKIAotCVVBU01faV9TUkwocCwgcHRlLCBwdGUsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8gKi8KLQl1YXNtX2lfbXRjMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCWJ1aWxkX2NvbnZlcnRfcHRlX3RvX2VudHJ5bG8ocCwgcHRlKTsKKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwogCS8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KIAlpZiAoc21hbGxfc2VxdWVuY2UpCiAJCVVBU01faV9BRERJVShwLCBwdGUsIHB0ZSwgSFBBR0VfU0laRSA+PiA3KTsKIAllbHNlCiAJCVVBU01faV9BRERVKHAsIHB0ZSwgcHRlLCB0bXApOwogCi0JdWFzbV9pX210YzAocCwgcHRlLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogfQogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgYnVpbGRfaHVnZV9oYW5kbGVyX3RhaWwodTMyICoqcCwKQEAgLTU0OSwxMSArNTc2LDEzIEBACiAKIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BHRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwZ2Qgb2Zmc2V0ICovCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAl1YXNtX2lfZG1mYzAocCwgdG1wLCBDMF9CQURWQUREUik7IC8qIGdldCBmYXVsdGluZyBhZGRyZXNzICovCiAJdWFzbV9pX2xkKHAsIHB0ciwgMCwgcHRyKTsgLyogZ2V0IHBtZCBwb2ludGVyICovCiAJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIFBNRF9TSElGVC0zKTsgLyogZ2V0IHBtZCBvZmZzZXQgaW4gYnl0ZXMgKi8KIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BNRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwbWQgb2Zmc2V0ICovCisjZW5kaWYKIH0KIAogLyoKQEAgLTY4NCwzNSArNzEzLDUzIEBACiAJaWYgKGNwdV9oYXNfNjRiaXRzKSB7CiAJCXVhc21faV9sZChwLCB0bXAsIDAsIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KIAkJdWFzbV9pX2xkKHAsIHB0ZXAsIHNpemVvZihwdGVfdCksIHB0ZXApOyAvKiBnZXQgb2RkIHB0ZSAqLwotCQl1YXNtX2lfZHNybChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KLQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQkJVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCQlVQVNNX2lfUk9UUihwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCQlVQVNNX2lfUk9UUihwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQl9IGVsc2UgeworCQkJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCisJCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJfQorCQlVQVNNX2lfTVRDMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KIAl9IGVsc2UgewogCQlpbnQgcHRlX29mZl9ldmVuID0gc2l6ZW9mKHB0ZV90KSAvIDI7CiAJCWludCBwdGVfb2ZmX29kZCA9IHB0ZV9vZmZfZXZlbiArIHNpemVvZihwdGVfdCk7CiAKIAkJLyogVGhlIHB0ZSBlbnRyaWVzIGFyZSBwcmUtc2hpZnRlZCAqLwogCQl1YXNtX2lfbHcocCwgdG1wLCBwdGVfb2ZmX2V2ZW4sIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KIAkJdWFzbV9pX2x3KHAsIHB0ZXAsIHB0ZV9vZmZfb2RkLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogCX0KICNlbHNlCiAJVUFTTV9pX0xXKHAsIHRtcCwgMCwgcHRlcCk7IC8qIGdldCBldmVuIHB0ZSAqLwogCVVBU01faV9MVyhwLCBwdGVwLCBzaXplb2YocHRlX3QpLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KIAlpZiAocjQ1a19idmFod2J1ZygpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkocCk7Ci0JVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJVUFTTV9pX1JPVFIocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKKwkJCVVBU01faV9NVEMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX1JPVFIocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworCQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLworCQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCisJCQlVQVNNX2lfTVRDMChwLCAwLCBDMF9FTlRSWUxPMCk7CisJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJaWYgKHI0NWtfYnZhaHdidWcoKSkKKwkJCXVhc21faV9tZmMwKHAsIHRtcCwgQzBfSU5ERVgpOworCX0KIAlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKLQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwotCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQlpZiAocjQ1a19idmFod2J1ZygpKQotCQl1YXNtX2lfbWZjMChwLCB0bXAsIEMwX0lOREVYKTsKLQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8xKTsKLQl1YXNtX2lfbXRjMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgMCwgQzBfRU5UUllMTzEpOworCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogI2VuZGlmCiB9CiAKQEAgLTk4NSw5ICsxMDMyLDE0IEBACiBidWlsZF9wdGVfcHJlc2VudCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSAgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0ciwgZW51bSBsYWJlbF9pZCBsaWQpCiB7Ci0JdWFzbV9pX2FuZGkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKLQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOwotCXVhc21faWxfYm5leihwLCByLCBwdGUsIGxpZCk7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXVhc21faV9hbmRpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UKTsKKwkJdWFzbV9pbF9iZXF6KHAsIHIsIHB0ZSwgbGlkKTsKKwl9IGVsc2UgeworCQl1YXNtX2lfYW5kaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lsX2JuZXoocCwgciwgcHRlLCBsaWQpOworCX0KIAlpUFRFX0xXKHAsIHB0ZSwgcHRyKTsKIH0KIApAQCAtMTI3Miw2ICsxMzI0LDM0IEBACiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlpZiAobTRrY190bGJwX3dhcigpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDEpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9ibmV6KCZwLCAmciwgSzAsIGxhYmVsX25vcGFnZV90bGJsKTsKKworCQl1YXNtX2xfdGxibF9nb2Fyb3VuZDEoJmwsIHApOworCQkvKiBSZWxvYWQgdGhlIFBURSB2YWx1ZSAqLworCQlpUFRFX0xXKCZwLCBLMCwgSzEpOworCX0KIAlidWlsZF9tYWtlX3ZhbGlkKCZwLCAmciwgSzAsIEsxKTsKIAlidWlsZF9yNDAwMF90bGJjaGFuZ2VfaGFuZGxlcl90YWlsKCZwLCAmbCwgJnIsIEswLCBLMSk7CiAKQEAgLTEyODQsNiArMTM2NCw0MCBAQAogCWlQVEVfTFcoJnAsIEswLCBLMSk7CiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDIpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9iZXF6KCZwLCAmciwgSzAsIGxhYmVsX3RsYmxfZ29hcm91bmQyKTsKKwkJLyogUmVsb2FkIHRoZSBQVEUgdmFsdWUgKi8KKwkJaVBURV9MVygmcCwgSzAsIEsxKTsKKworCQkvKgorCQkgKiBXZSBjbG9iYmVyZWQgQzBfUEFHRU1BU0ssIHJlc3RvcmUgaXQuICBPbiB0aGUgb3RoZXIgYnJhbmNoCisJCSAqIGl0IGlzIHJlc3RvcmVkIGluIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5LgorCQkgKi8KKwkJYnVpbGRfcmVzdG9yZV9wYWdlbWFzaygmcCwgJnIsIEswLCBsYWJlbF9ub3BhZ2VfdGxibCk7CisKKwkJdWFzbV9sX3RsYmxfZ29hcm91bmQyKCZsLCBwKTsKKwl9CiAJdWFzbV9pX29yaSgmcCwgSzAsIEswLCAoX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9WQUxJRCkpOwogCWJ1aWxkX2h1Z2VfaGFuZGxlcl90YWlsKCZwLCAmciwgJmwsIEswLCBLMSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmMgYi9hcmNoL21pcHMvbW0vdWFzbS5jCmluZGV4IDBhMTY1YzUuLjE1ODFlOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmMKKysrIGIvYXJjaC9taXBzL21tL3Vhc20uYwpAQCAtMTksOCArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogZW51bSBmaWVsZHMgewogCVJTID0gMHgwMDEsCkBAIC02Myw4ICs2Miw5IEBACiAJaW5zbl9kc3JsMzIsIGluc25fZHJvdHIsIGluc25fZHN1YnUsIGluc25fZXJldCwgaW5zbl9qLCBpbnNuX2phbCwKIAlpbnNuX2pyLCBpbnNuX2xkLCBpbnNuX2xsLCBpbnNuX2xsZCwgaW5zbl9sdWksIGluc25fbHcsIGluc25fbWZjMCwKIAlpbnNuX210YzAsIGluc25fb3JpLCBpbnNuX3ByZWYsIGluc25fcmZlLCBpbnNuX3NjLCBpbnNuX3NjZCwKLQlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3N1YnUsIGluc25fc3csCi0JaW5zbl90bGJwLCBpbnNuX3RsYndpLCBpbnNuX3RsYndyLCBpbnNuX3hvciwgaW5zbl94b3JpLCBpbnNuX2RpbnMKKwlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3JvdHIsIGluc25fc3VidSwgaW5zbl9zdywKKwlpbnNuX3RsYnAsIGluc25fdGxiciwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaSwKKwlpbnNuX2RpbnMKIH07CiAKIHN0cnVjdCBpbnNuIHsKQEAgLTEyNiw5ICsxMjYsMTEgQEAKIAl7IGluc25fc2xsLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzbGxfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX3NyYSwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3JhX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zcmwsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHNybF9vcCksICBSVCB8IFJEIHwgUkUgfSwKKwl7IGluc25fcm90ciwgIE0oc3BlY19vcCwgMSwgMCwgMCwgMCwgc3JsX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zdWJ1LCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzdWJ1X29wKSwgIFJTIHwgUlQgfCBSRCB9LAogCXsgaW5zbl9zdywgIE0oc3dfb3AsIDAsIDAsIDAsIDAsIDApLCAgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fdGxicCwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJwX29wKSwgIDAgfSwKKwl7IGluc25fdGxiciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJyX29wKSwgIDAgfSwKIAl7IGluc25fdGxid2ksICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxid2lfb3ApLCAgMCB9LAogCXsgaW5zbl90bGJ3ciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJ3cl9vcCksICAwIH0sCiAJeyBpbnNuX3hvciwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgeG9yX29wKSwgIFJTIHwgUlQgfCBSRCB9LApAQCAtMzc5LDkgKzM4MSwxMSBAQAogSV91MnUxdTMoX3NsbCkKIElfdTJ1MXUzKF9zcmEpCiBJX3UydTF1Myhfc3JsKQorSV91MnUxdTMoX3JvdHIpCiBJX3UzdTF1Mihfc3VidSkKIElfdTJzM3UxKF9zdykKIElfMChfdGxicCkKK0lfMChfdGxicikKIElfMChfdGxid2kpCiBJXzAoX3RsYndyKQogSV91M3UxdTIoX3hvcikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmggYi9hcmNoL21pcHMvbW0vdWFzbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE1M2VkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCAgVGhpZW1vIFNldWZlcgotICogQ29weXJpZ2h0IChDKSAyMDA1ICBNYWNpZWogVy4gUm96eWNraQotICogQ29weXJpZ2h0IChDKSAyMDA2ICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgSXBfdTF1MnUzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAotdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCi0KLSNkZWZpbmUgSXBfdTJ1MXUzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAotdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCi0KLSNkZWZpbmUgSXBfdTN1MXUyKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAotdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCi0KLSNkZWZpbmUgSXBfdTF1MnMzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAotdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgc2lnbmVkIGludCBjKQotCi0jZGVmaW5lIElwX3UyczN1MShvcCkJCQkJCQkJXAotdm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKLXVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKLQotI2RlZmluZSBJcF91MnUxczMob3ApCQkJCQkJCVwKLXZvaWQgX19jcHVpbml0CQkJCQkJCQlcCi11YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCi0KLSNkZWZpbmUgSXBfdTJ1MW1zYnUzKG9wKQkJCQkJCVwKLXZvaWQgX19jcHVpbml0CQkJCQkJCQlcCi11YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYywJXAotCSAgIHVuc2lnbmVkIGludCBkKQotCi0jZGVmaW5lIElwX3UxdTIob3ApCQkJCQkJCVwKLXZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCi0KLSNkZWZpbmUgSXBfdTFzMihvcCkJCQkJCQkJXAotdm9pZCBfX2NwdWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCi0KLSNkZWZpbmUgSXBfdTEob3ApIHZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSkKLQotI2RlZmluZSBJcF8wKG9wKSB2b2lkIF9fY3B1aW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZikKLQotSXBfdTJ1MXMzKF9hZGRpdSk7Ci1JcF91M3UxdTIoX2FkZHUpOwotSXBfdTJ1MXUzKF9hbmRpKTsKLUlwX3UzdTF1MihfYW5kKTsKLUlwX3UxdTJzMyhfYmVxKTsKLUlwX3UxdTJzMyhfYmVxbCk7Ci1JcF91MXMyKF9iZ2V6KTsKLUlwX3UxczIoX2JnZXpsKTsKLUlwX3UxczIoX2JsdHopOwotSXBfdTFzMihfYmx0emwpOwotSXBfdTF1MnMzKF9ibmUpOwotSXBfdTJzM3UxKF9jYWNoZSk7Ci1JcF91MXUydTMoX2RtZmMwKTsKLUlwX3UxdTJ1MyhfZG10YzApOwotSXBfdTJ1MXMzKF9kYWRkaXUpOwotSXBfdTN1MXUyKF9kYWRkdSk7Ci1JcF91MnUxdTMoX2RzbGwpOwotSXBfdTJ1MXUzKF9kc2xsMzIpOwotSXBfdTJ1MXUzKF9kc3JhKTsKLUlwX3UydTF1MyhfZHNybCk7Ci1JcF91MnUxdTMoX2RzcmwzMik7Ci1JcF91MnUxdTMoX2Ryb3RyKTsKLUlwX3UzdTF1MihfZHN1YnUpOwotSXBfMChfZXJldCk7Ci1JcF91MShfaik7Ci1JcF91MShfamFsKTsKLUlwX3UxKF9qcik7Ci1JcF91MnMzdTEoX2xkKTsKLUlwX3UyczN1MShfbGwpOwotSXBfdTJzM3UxKF9sbGQpOwotSXBfdTFzMihfbHVpKTsKLUlwX3UyczN1MShfbHcpOwotSXBfdTF1MnUzKF9tZmMwKTsKLUlwX3UxdTJ1MyhfbXRjMCk7Ci1JcF91MnUxdTMoX29yaSk7Ci1JcF91MnMzdTEoX3ByZWYpOwotSXBfMChfcmZlKTsKLUlwX3UyczN1MShfc2MpOwotSXBfdTJzM3UxKF9zY2QpOwotSXBfdTJzM3UxKF9zZCk7Ci1JcF91MnUxdTMoX3NsbCk7Ci1JcF91MnUxdTMoX3NyYSk7Ci1JcF91MnUxdTMoX3NybCk7Ci1JcF91M3UxdTIoX3N1YnUpOwotSXBfdTJzM3UxKF9zdyk7Ci1JcF8wKF90bGJwKTsKLUlwXzAoX3RsYndpKTsKLUlwXzAoX3RsYndyKTsKLUlwX3UzdTF1MihfeG9yKTsKLUlwX3UydTF1MyhfeG9yaSk7Ci1JcF91MnUxbXNidTMoX2RpbnMpOwotCi0vKiBIYW5kbGUgbGFiZWxzLiAqLwotc3RydWN0IHVhc21fbGFiZWwgewotCXUzMiAqYWRkcjsKLQlpbnQgbGFiOwotfTsKLQotdm9pZCBfX2NwdWluaXQgdWFzbV9idWlsZF9sYWJlbChzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyLCBpbnQgbGlkKTsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLWludCB1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcik7Ci0jZW5kaWYKLWludCB1YXNtX3JlbF9oaShsb25nIHZhbCk7Ci1pbnQgdWFzbV9yZWxfbG8obG9uZyB2YWwpOwotdm9pZCBVQVNNX2lfTEFfbW9zdGx5KHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IHJzLCBsb25nIGFkZHIpOwotdm9pZCBVQVNNX2lfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcik7Ci0KLSNkZWZpbmUgVUFTTV9MX0xBKGxiKQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jcHVpbml0IHVhc21fbCMjbGIoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkcikgXAotewkJCQkJCQkJCVwKLQl1YXNtX2J1aWxkX2xhYmVsKGxhYiwgYWRkciwgbGFiZWwjI2xiKTsJCQkJXAotfQotCi0vKiBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIGluc3RydWN0aW9ucyAqLwotI2lmZGVmIENPTkZJR182NEJJVAotIyBkZWZpbmUgVUFTTV9pX0xXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sZChidWYsIHJzLCBydCwgb2ZmKQotIyBkZWZpbmUgVUFTTV9pX1NXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9zZChidWYsIHJzLCBydCwgb2ZmKQotIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKLSMgZGVmaW5lIFVBU01faV9TUkEoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNyYShidWYsIHJzLCBydCwgc2gpCi0jIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmwoYnVmLCBycywgcnQsIHNoKQotIyBkZWZpbmUgVUFTTV9pX01GQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9kbWZjMChidWYsIHJ0LCByZCkKLSMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG10YzAoYnVmLCBydCwgcmQpCi0jIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2RhZGRpdShidWYsIHJzLCBydCwgdmFsKQotIyBkZWZpbmUgVUFTTV9pX0FERFUoYnVmLCBycywgcnQsIHJkKSB1YXNtX2lfZGFkZHUoYnVmLCBycywgcnQsIHJkKQotIyBkZWZpbmUgVUFTTV9pX1NVQlUoYnVmLCBycywgcnQsIHJkKSB1YXNtX2lfZHN1YnUoYnVmLCBycywgcnQsIHJkKQotIyBkZWZpbmUgVUFTTV9pX0xMKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sbGQoYnVmLCBycywgcnQsIG9mZikKLSMgZGVmaW5lIFVBU01faV9TQyhidWYsIHJzLCBydCwgb2ZmKSB1YXNtX2lfc2NkKGJ1ZiwgcnMsIHJ0LCBvZmYpCi0jZWxzZQotIyBkZWZpbmUgVUFTTV9pX0xXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9sdyhidWYsIHJzLCBydCwgb2ZmKQotIyBkZWZpbmUgVUFTTV9pX1NXKGJ1ZiwgcnMsIHJ0LCBvZmYpIHVhc21faV9zdyhidWYsIHJzLCBydCwgb2ZmKQotIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zbGwoYnVmLCBycywgcnQsIHNoKQotIyBkZWZpbmUgVUFTTV9pX1NSQShidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmEoYnVmLCBycywgcnQsIHNoKQotIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmwoYnVmLCBycywgcnQsIHNoKQotIyBkZWZpbmUgVUFTTV9pX01GQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9tZmMwKGJ1ZiwgcnQsIHJkKQotIyBkZWZpbmUgVUFTTV9pX01UQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9tdGMwKGJ1ZiwgcnQsIHJkKQotIyBkZWZpbmUgVUFTTV9pX0FERElVKGJ1ZiwgcnMsIHJ0LCB2YWwpIHVhc21faV9hZGRpdShidWYsIHJzLCBydCwgdmFsKQotIyBkZWZpbmUgVUFTTV9pX0FERFUoYnVmLCBycywgcnQsIHJkKSB1YXNtX2lfYWRkdShidWYsIHJzLCBydCwgcmQpCi0jIGRlZmluZSBVQVNNX2lfU1VCVShidWYsIHJzLCBydCwgcmQpIHVhc21faV9zdWJ1KGJ1ZiwgcnMsIHJ0LCByZCkKLSMgZGVmaW5lIFVBU01faV9MTChidWYsIHJzLCBydCwgb2ZmKSB1YXNtX2lfbGwoYnVmLCBycywgcnQsIG9mZikKLSMgZGVmaW5lIFVBU01faV9TQyhidWYsIHJzLCBydCwgb2ZmKSB1YXNtX2lfc2MoYnVmLCBycywgcnQsIG9mZikKLSNlbmRpZgotCi0jZGVmaW5lIHVhc21faV9iKGJ1Ziwgb2ZmKSB1YXNtX2lfYmVxKGJ1ZiwgMCwgMCwgb2ZmKQotI2RlZmluZSB1YXNtX2lfYmVxeihidWYsIHJzLCBvZmYpIHVhc21faV9iZXEoYnVmLCBycywgMCwgb2ZmKQotI2RlZmluZSB1YXNtX2lfYmVxemwoYnVmLCBycywgb2ZmKSB1YXNtX2lfYmVxbChidWYsIHJzLCAwLCBvZmYpCi0jZGVmaW5lIHVhc21faV9ibmV6KGJ1ZiwgcnMsIG9mZikgdWFzbV9pX2JuZShidWYsIHJzLCAwLCBvZmYpCi0jZGVmaW5lIHVhc21faV9ibmV6bChidWYsIHJzLCBvZmYpIHVhc21faV9ibmVsKGJ1ZiwgcnMsIDAsIG9mZikKLSNkZWZpbmUgdWFzbV9pX21vdmUoYnVmLCBhLCBiKSBVQVNNX2lfQUREVShidWYsIGEsIDAsIGIpCi0jZGVmaW5lIHVhc21faV9ub3AoYnVmKSB1YXNtX2lfc2xsKGJ1ZiwgMCwgMCwgMCkKLSNkZWZpbmUgdWFzbV9pX3Nzbm9wKGJ1ZikgdWFzbV9pX3NsbChidWYsIDAsIDAsIDEpCi0jZGVmaW5lIHVhc21faV9laGIoYnVmKSB1YXNtX2lfc2xsKGJ1ZiwgMCwgMCwgMykKLQotLyogSGFuZGxlIHJlbG9jYXRpb25zLiAqLwotc3RydWN0IHVhc21fcmVsb2MgewotCXUzMiAqYWRkcjsKLQl1bnNpZ25lZCBpbnQgdHlwZTsKLQlpbnQgbGFiOwotfTsKLQotLyogVGhpcyBpcyB6ZXJvIHNvIHdlIGNhbiB1c2UgemVyb2VkIGxhYmVsIGFycmF5cy4gKi8KLSNkZWZpbmUgVUFTTV9MQUJFTF9JTlZBTElEIDAKLQotdm9pZCB1YXNtX3JfbWlwc19wYzE2KHN0cnVjdCB1YXNtX3JlbG9jICoqcmVsLCB1MzIgKmFkZHIsIGludCBsaWQpOwotdm9pZCB1YXNtX3Jlc29sdmVfcmVsb2NzKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHN0cnVjdCB1YXNtX2xhYmVsICpsYWIpOwotdm9pZCB1YXNtX21vdmVfcmVsb2NzKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqZmlyc3QsIHUzMiAqZW5kLCBsb25nIG9mZik7Ci12b2lkIHVhc21fbW92ZV9sYWJlbHMoc3RydWN0IHVhc21fbGFiZWwgKmxhYiwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKTsKLXZvaWQgdWFzbV9jb3B5X2hhbmRsZXIoc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYiwKLQl1MzIgKmZpcnN0LCB1MzIgKmVuZCwgdTMyICp0YXJnZXQpOwotaW50IHVhc21faW5zbl9oYXNfYmRlbGF5KHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqYWRkcik7Ci0KLS8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgbGFiZWxlZCBicmFuY2hlcy4gKi8KLXZvaWQgdWFzbV9pbF9ibHR6KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7Ci12b2lkIHVhc21faWxfYih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIGludCBsaWQpOwotdm9pZCB1YXNtX2lsX2JlcXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKLXZvaWQgdWFzbV9pbF9iZXF6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwotdm9pZCB1YXNtX2lsX2JuZSh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcxLAotCQkgdW5zaWduZWQgaW50IHJlZzIsIGludCBsaWQpOwotdm9pZCB1YXNtX2lsX2JuZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKLXZvaWQgdWFzbV9pbF9iZ2V6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwotdm9pZCB1YXNtX2lsX2JnZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDRjM2ZjYTE4Li4yY2I1YWU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9nY21wX2Jhc2U7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlwaV9tYXBbTlJfQ1BVU107CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWlwc19pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBpbnQgbWlwc19wY2liaW9zX2lhY2sodm9pZCkKIHsKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxID0gbWlwc19wY2liaW9zX2lhY2soKTsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAJICogb24gYW4gU01QIHN5c3RlbSwgIHNvIGxlYXZlIGl0IHVwIHRvIHRoZSBnZW5lcmljIGNvZGUuLi4KIAkgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pcHNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKaW5kZXggM2E0NjdjMC4uOTQxOTE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKQEAgLTE1NiwxOSArMTU2LDE5IEBACiAjZGVmaW5lIElSUUZMQUdfU1RBUlRFRAkJMQogI2RlZmluZSBJUlFGTEFHX0RJU0FCTEVECTIKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbng4MzN4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBueDgzM3hfaXJxX2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBueDgzM3hfc3RhcnR1cF9waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdID0gSVJRRkxBR19TVEFSVEVEOwkvKiBzdGFydGVkLCBub3QgZGlzYWJsZWQgKi8KIAlwbng4MzN4X2hhcmRfZW5hYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc3LDEyICsxNzcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gPSAwOwkJCS8qIG5vdCBzdGFydGVkICovCiAJcG54ODMzeF9oYXJkX2Rpc2FibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2VuYWJsZV9waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xOTAsMTMgKzE5MCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSAmPSB+SVJRRkxBR19ESVNBQkxFRDsKIAlpZiAoaXJxZmxhZ3NbcGljX2lycV0gPT0gSVJRRkxBR19TVEFSVEVEKQogCQlwbng4MzN4X2hhcmRfZW5hYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9kaXNhYmxlX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIwNCwxMiArMjA0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdIHw9IElSUUZMQUdfRElTQUJMRUQ7CiAJcG54ODMzeF9oYXJkX2Rpc2FibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Fja19waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMjAsMTUgKzIyMCwxNSBAQAogewogfQogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBwbng4MzN4X3N0YXJ0dXBfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19lbmFibGVfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM2LDE4ICsyMzYsMTggQEAKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19lbmFibGVfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9kaXNhYmxlX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fZGlzYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Fja19ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjU4LDkgKzI1OCw5IEBACiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fY2xlYXJfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwbng4MzN4X3NldF90eXBlX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCkBAIC0zNzcsNCArMzc3LDMgQEAKIAogCW1pcHNfaHB0X2ZyZXF1ZW5jeSAqPSA1MDAwMDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKaW5kZXggMmE0MWU4Zi4uMjk5NjlmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKQEAgLTYyLDkgKzYyLDMgQEAKIHZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQogewogfQotCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiBhcmNzX2NtZGxpbmU7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKaW5kZXggMmY1Njc0NS4uMzJmNzAwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKQEAgLTEyNCw2ICsxMjQsNSBAQAogCX0KIH0KIAotRVhQT1JUX1NZTUJPTChwcm9tX2dldGNtZGxpbmUpOwogRVhQT1JUX1NZTUJPTChnZXRfZXRoZXJuZXRfYWRkcik7CiBFWFBPUlRfU1lNQk9MKHN0cjJlYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggNzgzMmFkMi4uZjllYjFhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwpAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgpAQCAtMTQsOSArMTUsOSBAQAogCiAjaW5jbHVkZSAib3BfaW1wbC5oIgogCi1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbG9vbmdzb24yX29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyBfX3dlYWs7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyBfX3dlYWs7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbG9vbmdzb24yX29wcyBfX3dlYWs7CiAKIHN0YXRpYyBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCAqbW9kZWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCA0NzVmZjQ2Li4yOWUyMzI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBZYW5odWEgPHlhbmhAbGVtb3RlLmNvbT4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC00Nyw4ICs0Nyw2IEBACiAJaW50IGNudDFfZW5hYmxlZCwgY250Ml9lbmFibGVkOwogfSByZWc7CiAKLURFRklORV9TUElOTE9DSyhzYW1wbGVfbG9jayk7Ci0KIHN0YXRpYyBjaGFyICpvcHJvZmlkID0gIkxvb25nc29uUGVyZiI7CiBzdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX3BlcmZjb3VudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAvKiBDb21wdXRlIGFsbCBvZiB0aGUgcmVnaXN0ZXJzIGluIHByZXBhcmF0aW9uIGZvciBlbmFibGluZyBwcm9maWxpbmcuICAqLwpAQCAtMTE1LDcgKzExMyw2IEBACiAJdWludDY0X3QgY291bnRlciwgY291bnRlcjEsIGNvdW50ZXIyOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CiAJaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCiAJICogTE9PTkdTT04yIGRlZmluZXMgdHdvIDMyLWJpdCBwZXJmb3JtYW5jZSBjb3VudGVycy4KQEAgLTEzNiw4ICsxMzMsNiBAQAogCWNvdW50ZXIxID0gY291bnRlciAmIDB4ZmZmZmZmZmY7CiAJY291bnRlcjIgPSBjb3VudGVyID4+IDMyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNhbXBsZV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAoY291bnRlcjEgJiBMT09OR1NPTjJfUEVSRkNOVF9PVkVSRkxPVykgewogCQlpZiAocmVnLmNudDFfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMCk7CkBAIC0xNDksOCArMTQ0LDYgQEAKIAkJY291bnRlcjIgPSByZWcucmVzZXRfY291bnRlcjI7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKLQogCXdyaXRlX2MwX3BlcmZjbnQoKGNvdW50ZXIyIDw8IDMyKSB8IGNvdW50ZXIxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCmluZGV4IDk1NTNiMTQuLmFjYWNkMTQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKQEAgLTUxLDYgKzUxLDY3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MTExLAogCSBxdWJlX3JhcV9nYWxpbGVvX2Vhcmx5X2ZpeHVwKTsKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgICAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKWRldi0+c3lzZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGhvc2UtPmlvX29mZnNldDsKKwlzdHJ1Y3QgcmVzb3VyY2Ugb3JpZyA9ICpyZXM7CisKKwlpZiAoIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgfHwKKwkgICAgIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpKQorCQlyZXR1cm47CisKKwlyZXMtPnN0YXJ0IC09IG9mZnNldDsKKwlyZXMtPmVuZCAtPSBvZmZzZXQ7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJjb252ZXJ0ZWQgbGVnYWN5ICVwUiB0byBidXMgJXBSXG4iLAorCQkgICAmb3JpZywgcmVzKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGNvYmFsdF9sZWdhY3lfaWRlX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTMyIGNsYXNzOworCXU4IHByb2dpZjsKKworCS8qCisJICogSWYgdGhlIElERSBjb250cm9sbGVyIGlzIGluIGxlZ2FjeSBtb2RlLCBwY2lfc2V0dXBfZGV2aWNlKCkgZmlsbHMgaW4KKwkgKiB0aGUgcmVzb3VyY2VzIHdpdGggdGhlIGxlZ2FjeSBhZGRyZXNzZXMgdGhhdCBub3JtYWxseSBhcHBlYXIgb24gdGhlCisJICogUENJIGJ1cywganVzdCBhcyBpZiB3ZSBoYWQgcmVhZCB0aGVtIGZyb20gYSBCQVIuCisJICoKKwkgKiBIb3dldmVyLCB3aXRoIHRoZSBHVC02NDExMSwgdGhvc2UgbGVnYWN5IGFkZHJlc3NlcywgZS5nLiwgMHgxZjAsCisJICogd2lsbCBuZXZlciBhcHBlYXIgb24gdGhlIFBDSSBidXMgYmVjYXVzZSBpdCBjb252ZXJ0cyBtZW1vcnkgYWNjZXNzZXMKKwkgKiBpbiB0aGUgUENJIEkvTyByZWdpb24gKHdoaWNoIGlzIG5ldmVyIGF0IGFkZHJlc3MgemVybykgaW50byBJL08gcG9ydAorCSAqIGFjY2Vzc2VzIHdpdGggbm8gYWRkcmVzcyB0cmFuc2xhdGlvbi4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBpZiBHVF9ERUZfUENJMF9JT19CQVNFIGlzIDB4MTAwMDAwMDAsIGEgbG9hZCBvciBzdG9yZQorCSAqIHRvIHBoeXNpY2FsIGFkZHJlc3MgMHgxMDAwMDFmMCB3aWxsIGJlY29tZSBhIFBDSSBhY2Nlc3MgdG8gSS9PIHBvcnQKKwkgKiAweDEwMDAwMWYwLiAgVGhlcmUncyBubyB3YXkgdG8gZ2VuZXJhdGUgYW4gYWNjZXNzIHRvIEkvTyBwb3J0IDB4MWYwLAorCSAqIGJ1dCB0aGUgVlQ4MkM1ODYgSURFIGNvbnRyb2xsZXIgZG9lcyByZXNwb25kIGF0IDB4MTAwMDAxZjAgYmVjYXVzZQorCSAqIGl0IG9ubHkgZGVjb2RlcyB0aGUgbG93IDI0IGJpdHMgb2YgdGhlIGFkZHJlc3MuCisJICoKKwkgKiBXaGVuIHRoaXMgcXVpcmsgcnVucywgdGhlIHBjaV9kZXYgcmVzb3VyY2VzIHNob3VsZCBjb250YWluIGJ1cworCSAqIGFkZHJlc3Nlcywgbm90IExpbnV4IEkvTyBwb3J0IG51bWJlcnMsIHNvIGNvbnZlcnQgbGVnYWN5IGFkZHJlc3NlcworCSAqIGxpa2UgMHgxZjAgdG8gYnVzIGFkZHJlc3NlcyBsaWtlIDB4MTAwMDAxZjAuICBMYXRlciwgd2UnbGwgY29udmVydAorCSAqIHRoZW0gYmFjayB3aXRoIHBjaWJpb3NfZml4dXBfYnVzKCkgb3IgcGNpYmlvc19idXNfdG9fcmVzb3VyY2UoKS4KKwkgKi8KKwljbGFzcyA9IGRldi0+Y2xhc3MgPj4gODsKKwlpZiAoY2xhc3MgIT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19QUk9HLCAmcHJvZ2lmKTsKKwlpZiAoKHByb2dpZiAmIDEpID09IDApIHsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVswXSk7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMV0pOworCX0KKwlpZiAoKHByb2dpZiAmIDQpID09IDApIHsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVsyXSk7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbM10pOworCX0KK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSwKKwkgIGNvYmFsdF9sZWdhY3lfaWRlX2ZpeHVwKTsKKwogc3RhdGljIHZvaWQgcXViZV9yYXFfdmlhX2JtSURFX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgc2hvcnQgY2Znd29yZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYwppbmRleCBjYWYyZWRlLi40Yjk3NjhkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogCS8qIFNlcmlhbCBzaG9ydCBkZXRlY3QgZW5hYmxlICovCiAJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAmaGksICZsbyk7Ci0JX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksIGxvKTsKKwlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0NPTkZJRyksICgxIDw8IDEpIHwgKDEgPDwgMyksIGxvKTsKIAogCS8qIHNldHRpbmcgdGhlIFVTQjIuMCBtaWNybyBmcmFtZSBsZW5ndGggKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FSENJX0ZMQURKX1JFRywgMHgyMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKaW5kZXggYWE1ZDNkYS4uMmJiNDA1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKQEAgLTEsMTMgKzEsMTEgQEAKIC8qCi0gKiBmdWxvb25nMmUgc3BlY2lmaWMgUENJIHN1cHBvcnQuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA0ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KICAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKaW5kZXggMzI1NDhiNS4uMDRiMzE0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICYmIFBDSV9DT1VOVEVSUyAqLwogCi1ERUZJTkVfU1BJTkxPQ0soYnBjaV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYnBjaV9sb2NrKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCmluZGV4IGJlYTliNmNkLi40NTVmOGU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCkBAIC01Nyw0ICs1NywzIEBACiAJZGV2LT5pcnEgPSByZXM7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKaW5kZXggOWNiMGM4MDcuLmQyNDhiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCkBAIC0yMDksMTYgKzIwOSwxNCBAQAogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX05BTzM4OgogCQkvKiBUaGlzIGlzIHJlYWxseSB0aGUgTkFDMzggKi8KIAkJcmV0dXJuICJBQUFBQURBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSI7Ci0JY2FzZSBDVk1YX0JPQVJEX1RZUEVfVEhVTkRFUjoKLQkJcmV0dXJuICIiOwotCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMwMDA6Ci0JCXJldHVybiAiIjsKIAljYXNlIENWTVhfQk9BUkRfVFlQRV9FQkgzMTAwOgogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0NOMzAxMF9FVkJfSFM1OgogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0NOMzAwNV9FVkJfSFM1OgogCQlyZXR1cm4gIkFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIjsKIAljYXNlIENWTVhfQk9BUkRfVFlQRV9CQkdXX1JFRjoKIAkJcmV0dXJuICJBQUJDRCI7CisJY2FzZSBDVk1YX0JPQVJEX1RZUEVfVEhVTkRFUjoKKwljYXNlIENWTVhfQk9BUkRfVFlQRV9FQkgzMDAwOgogCWRlZmF1bHQ6CiAJCXJldHVybiAiIjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCA5YTExYzIyLi4zOGJjMjgwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTQ5LDggKzQ5LDggQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwpAQCAtNzMsNyArNzMsNyBAQAogCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9NRU0gKyBob3NlLT5tZW1fcmVzb3VyY2UtPnN0YXJ0OwogCX0KIAotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5idXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQpAQCAtMjUxLDggKzI1MSw2IEBACiAJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKIAkJaWYgKCFkZXYtPnJlc291cmNlW2ldLnN0YXJ0KQogCQkJY29udGludWU7Ci0JCWlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpCi0JCQljb250aW51ZTsKIAkJaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQogCQkJb2Zmc2V0ID0gaG9zZS0+aW9fb2Zmc2V0OwogCQllbHNlIGlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMKaW5kZXggNTE3NTM1Ny4uOTRjOWMyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX2NpYy5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYwpAQCAtMTMxLDQgKzEzMSwzIEBACiAJZWxzZQogCQlkb19JUlEoZmZzKHBlbmRpbmcpICsgaW50YmFzZSAtIDEpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMKaW5kZXggYzMxN2EzNi4uZGI5OGQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYwpAQCAtMzAzLDEyICszMDMsNiBAQAogfQogCiAvKiBQUk9NIGNvbW1hbmRsaW5lIGZ1bmN0aW9ucyAqLwotY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLUVYUE9SVF9TWU1CT0wocHJvbV9nZXRjbWRsaW5lKTsKLQogdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7CiAJY2hhciAqY3A7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uYwppbmRleCBmYzk5MGNiLi5kNmY4YmRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJaWYgKGFjaykgewogCQlkb19pZGxlKCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0aGUgQXRtZWwgMjRDMzIvMjRDNjQgRUVQUk9NIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0aGUgQXRtZWwgMjRDMzIvMjRDNjQgRUVQUk9NXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaCBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmgKaW5kZXggYTMxMjg4My4uZDZjN2VjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaAorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oCkBAIC02NSw0ICs2NSwzIEBACiBjb25zdCBjaGFyIHJ0cyA9IFRJT0NNX1JUUzsKIGNvbnN0IGNoYXIgZHRyID0gVElPQ01fRFRSOwogaW50IGZkOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwppbmRleCA2NzgzODhmLi5mZDIyNTk3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKQEAgLTM0NSwxNCArMzQ1LDEzIEBACiAgICAgICAgIHJldHVybiBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoZGV2KTsKIH0KIAotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAgICAgICAgIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7Ci0KICAgICAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBgbWlycm9yZWQnIFZHQSBwb3J0cwogICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBzdHJhbmdlIElTQSBoYXJkd2FyZSwgc28gd2UgYWx3YXlzIHdhbnQgdGhlCiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzIGtpbG9ieXRlIGFsaWduZWQuICAqLwpAQCAtMzYzLDggKzM2Miw5IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc3RhcnQgPSAoc3RhcnQgKyAxMDI0IC0gMSkgJiB+KDEwMjQgLSAxKTsKLSAgICAgICAgICAgICAgICByZXMtPnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgIH0KKworCXJldHVybiBzdGFydDsKIH0KIAogc3RydWN0IHBjaV9vcHMgdGl0YW5fcGNpX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKaW5kZXggMzI2ZmU3YS4uZWZjOWU4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKQEAgLTgsNyArOCw3IEBACiAKICNkZWZpbmUgTEFVTkNIU1RBQ0tfU0laRSAyNTYKIAotc3RhdGljIF9fY3B1aW5pdGRhdGEgREVGSU5FX1NQSU5MT0NLKGxhdW5jaF9sb2NrKTsKK3N0YXRpYyBfX2NwdWluaXRkYXRhIGFyY2hfc3BpbmxvY2tfdCBsYXVuY2hfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9zcCBfX2NwdWluaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2dwIF9fY3B1aW5pdGRhdGE7CkBAIC0yMCw3ICsyMCw3IEBACiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCXdoaWxlIChzcGluX2lzX2xvY2tlZCgmbGF1bmNoX2xvY2spKTsKKwl3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCgmbGF1bmNoX2xvY2spKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIJbW92ZQkkc3AsICUwCQlcbiIKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogdm9pZCBfX2luaXQgcHJvbV9ncmFiX3NlY29uZGFyeSh2b2lkKQogewotCXNwaW5fbG9jaygmbGF1bmNoX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZsYXVuY2hfbG9jayk7CiAKIAlwbW9uX2NwdXN0YXJ0KDEsICZwcm9tX3NtcF9ib290c3RyYXAsCiAJICAgICAgICAgICAgICBsYXVuY2hzdGFjayArIExBVU5DSFNUQUNLX1NJWkUsIDApOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJc2Vjb25kYXJ5X3NwID0gc3A7CiAJc2Vjb25kYXJ5X2dwID0gZ3A7CiAKLQlzcGluX3VubG9jaygmbGF1bmNoX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmxhdW5jaF9sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlci9jcHUuYyBiL2FyY2gvbWlwcy9wb3dlci9jcHUuYwppbmRleCA3OTk1ZGY0Li4yNmE2ZWYxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VyL2NwdS5jCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBIdSBIb25nYmluZyA8aHVoYkBsZW1vdGUuY29tPgotICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUyBiL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUwppbmRleCAwY2Y4NmZiLi5kYmI1YzdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKKysrIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBIdSBIb25nYmluZyA8aHVoYkBsZW1vdGUuY29tPgotICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKaW5kZXggNmE4ODIxOS4uMjE3NDI0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYworKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCkBAIC0zNDAsMTAgKzM0MCw2IEBACiAKIAlzd2l0Y2ggKGFzaWMpIHsKIAljYXNlIEFTSUNfWkVVUzoKLQkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMCk7Ci0JCWJjbTFfdXNiMl9jdGwgPSAweDgwMzsKLQkJYnJlYWs7Ci0KIAljYXNlIEFTSUNfQ1JPTlVTOgogCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgogCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwppbmRleCA4MGIyZWVkLi4zMjVmYWI5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwpAQCAtMzksMjEgKzM5LDIxIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFzaWNfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9pbnQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpcnE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxID0gKGFzaWNfcmVhZChpbnRfaW50X3NjYW4pID4+IDQpIC0gMTsKIAogCWlmIChpcnEgPT0gMCB8fCBpcnEgPj0gTlJfSVJRUykKIAkJaXJxID0gLTE7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWNfaXJxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBpcnE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKaW5kZXggNjk4YjFlYS4uYWYyY2FlMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwpAQCAtMjUsMTQgKzI1LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgInJlc2V0LmgiCkBAIC00MSwyNiArNDIsMjEgQEAKIAogLyoKICAqIE1hY3JvcyBmb3IgbG9hZGluZyBhZGRyZXNzZXMgYW5kIHN0b3JpbmcgcmVnaXN0ZXJzOgotICogUFRSX0xBCUxvYWQgdGhlIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyCi0gKiBMT05HX1MJU3RvcmUgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLgotICogTE9OR19MCUxvYWQgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyCi0gKiBQVFJfQURESVUJQWRkIGEgY29uc3RhbnQgdmFsdWUgdG8gYSByZWdpc3RlciB1c2VkIGFzIGEgcG9pbnRlcgorICogTE9OR19MXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIExPTkdfTCBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAorICogTE9OR19TXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIExPTkdfUyBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAorICogUFRSX0xBXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIFBUUl9MQSBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAogICogUkVHX1NJWkUJTnVtYmVyIG9mIDgtYml0IGJ5dGVzIGluIGEgZnVsbCB3aWR0aCByZWdpc3RlcgogICovCisjZGVmaW5lIExPTkdfTF8JCVZBTChMT05HX0wpICIgIgorI2RlZmluZSBMT05HX1NfCQlWQUwoTE9OR19TKSAiICIKKyNkZWZpbmUgUFRSX0xBXwkJVkFMKFBUUl9MQSkgIiAiCisKICNpZmRlZiBDT05GSUdfNjRCSVQKICN3YXJuaW5nIFRPRE86IDY0LWJpdCBjb2RlIG5lZWRzIHRvIGJlIHZlcmlmaWVkCi0jZGVmaW5lIFBUUl9MQQkJImRsYQkiCi0jZGVmaW5lIExPTkdfUwkJInNkCSIKLSNkZWZpbmUgTE9OR19MCQkibGQJIgotI2RlZmluZSBQVFJfQURESVUJImRhZGRpdQkiCiAjZGVmaW5lIFJFR19TSVpFCSI4IgkJLyogSW4gYnl0ZXMgKi8KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzMyQklUCi0jZGVmaW5lIFBUUl9MQQkJImxhCSIKLSNkZWZpbmUgTE9OR19TCQkic3cJIgotI2RlZmluZSBMT05HX0wJCSJsdwkiCi0jZGVmaW5lIFBUUl9BRERJVQkiYWRkaXUJIgogI2RlZmluZSBSRUdfU0laRQkiNCIJCS8qIEluIGJ5dGVzICovCiAjZW5kaWYKIApAQCAtMTEzLDkgKzEwOSw5IEBACiAJCSAqIHN0cnVjdHVyZS4gKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkJIi5zZXQJbm9hdFxuIgotCQkJTE9OR19TCQkiJGF0LCAlW2F0XVxuIgotCQkJTE9OR19TCQkiJDIsICVbdjBdXG4iCi0JCQlMT05HX1MJCSIkMywgJVt2MV1cbiIKKwkJCUxPTkdfU18JCSIkYXQsICVbYXRdXG4iCisJCQlMT05HX1NfCQkiJDIsICVbdjBdXG4iCisJCQlMT05HX1NfCQkiJDMsICVbdjFdXG4iCiAJCToKIAkJCVthdF0gIj1tIiAoYXQpLAogCQkJW3YwXSAiPW0iICh2MCksCkBAIC0xMjksNTQgKzEyNSw1NCBAQAogCQkJIm1vdmUJCSRhdCwgJVtwdF9yZWdzXVxuIgogCiAJCQkvKiBBcmd1bWVudCByZWdpc3RlcnMgKi8KLQkJCUxPTkdfUwkJIiQ0LCAiIFZBTChQVF9SNCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkNSwgIiBWQUwoUFRfUjUpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ3LCAiIFZBTChQVF9SNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDQsICIgVkFMKFBUX1I0KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNSwgIiBWQUwoUFRfUjUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ2LCAiIFZBTChQVF9SNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDcsICIgVkFMKFBUX1I3KSAiKCRhdClcbiIKIAogCQkJLyogVGVtcG9yYXJ5IHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SOCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkOSwgIiBWQUwoUFRfUjkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEwLCAiIFZBTChQVF9SMTApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDExLCAiIFZBTChQVF9SMTEpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEyLCAiIFZBTChQVF9SMTIpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEzLCAiIFZBTChQVF9SMTMpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE0LCAiIFZBTChQVF9SMTQpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE1LCAiIFZBTChQVF9SMTUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SOCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDksICIgVkFMKFBUX1I5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDExLCAiIFZBTChQVF9SMTEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMiwgIiBWQUwoUFRfUjEyKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE0LCAiIFZBTChQVF9SMTQpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxNSwgIiBWQUwoUFRfUjE1KSAiKCRhdClcbiIKIAogCQkJLyogIlNhdmVkIiByZWdpc3RlcnMgKi8KLQkJCUxPTkdfUwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxNywgIiBWQUwoUFRfUjE3KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxOCwgIiBWQUwoUFRfUjE4KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMCwgIiBWQUwoUFRfUjIwKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMSwgIiBWQUwoUFRfUjIxKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMywgIiBWQUwoUFRfUjIzKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTYsICIgVkFMKFBUX1IxNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE3LCAiIFZBTChQVF9SMTcpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxOCwgIiBWQUwoUFRfUjE4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTksICIgVkFMKFBUX1IxOSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIwLCAiIFZBTChQVF9SMjApICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyMSwgIiBWQUwoUFRfUjIxKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjIsICIgVkFMKFBUX1IyMikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIzLCAiIFZBTChQVF9SMjMpICIoJGF0KVxuIgogCiAJCQkvKiBBZGQnbCB0ZW1wIHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQyNCwgIiBWQUwoUFRfUjI0KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyNSwgIiBWQUwoUFRfUjI1KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjQsICIgVkFMKFBUX1IyNCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgogCiAJCQkvKiBLZXJuZWwgdGVtcCByZWdzICovCi0JCQlMT05HX1MJCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMjcsICIgVkFMKFBUX1IyNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI2LCAiIFZBTChQVF9SMjYpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKIAogCQkJLyogR2xvYmFsIHBvaW50ZXIsIHN0YWNrIHBvaW50ZXIsIGZyYW1lIHBvaW50ZXIgYW5kCiAJCQkgKiByZXR1cm4gYWRkcmVzcyAqLwotCQkJTE9OR19TCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJHNwLCAiIFZBTChQVF9SMjkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJGZwLCAiIFZBTChQVF9SMzApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRncCwgIiBWQUwoUFRfUjI4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkc3AsICIgVkFMKFBUX1IyOSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJGZwLCAiIFZBTChQVF9SMzApICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRyYSwgIiBWQUwoUFRfUjMxKSAiKCRhdClcbiIKIAogCQkJLyogTm93IHdlIGNhbiBnZXQgdGhlICRhdCBhbmQgdjAgcmVnaXN0ZXJzIGJhY2sgYW5kCiAJCQkgKiBzdG9yZSB0aGVtICovCi0JCQlMT05HX0wJCSIkOCwgJVthdF1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMSkgIigkYXQpXG4iCi0JCQlMT05HX0wJCSIkOCwgJVt2MF1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCi0JCQlMT05HX0wJCSIkOCwgJVt2MV1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMykgIigkYXQpXG4iCisJCQlMT05HX0xfCQkiJDgsICVbYXRdXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKKwkJCUxPTkdfTF8JCSIkOCwgJVt2MF1cbiIKKwkJCUxPTkdfU18JCSIkOCwgIiBWQUwoUFRfUjIpICIoJGF0KVxuIgorCQkJTE9OR19MXwkJIiQ4LCAlW3YxXVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SMykgIigkYXQpXG4iCiAJCToKIAkJOgogCQkJW2F0XSAibSIgKGF0KSwKQEAgLTE5MSw4ICsxODcsOCBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCQkiLnNldAlub2F0XG4iCiAJCSIxOlxuIgotCQkJUFRSX0xBCQkiJGF0LCAxYlxuIgotCQkJTE9OR19TCQkiJGF0LCAlW2NwMF9lcGNdXG4iCisJCQlQVFJfTEFfCQkiJGF0LCAxYlxuIgorCQkJTE9OR19TXwkJIiRhdCwgJVtjcDBfZXBjXVxuIgogCQk6CiAJCQlbY3AwX2VwY10gIj1tIiAobXlfcmVncy5jcDBfZXBjKQogCQk6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCmluZGV4IGQ5Yzc5ZDguLmMzZDMwYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCkBAIC0xMzMsNCArMTMzLDMgQEAKIAkJcmV0dXJuIChLRE1fVE9fUEhZUyhQQUdFX0FMSUdOKFNZTU1PTl9TVEtfQUREUihuYXNpZCwgMCkpKSA+PgogCQkJCQkJCQlQQUdFX1NISUZUKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwppbmRleCA2YzVhNjMwLi5iYzRmYThkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwpAQCAtMTcsMTEgKzE3LDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBDTk9ERUlEX05PTkUgKGNub2RlaWRfdCktMQotI2RlZmluZSBlbnRlcl9wYW5pY19tb2RlKCkJc3Bpbl9sb2NrKCZubWlfbG9jaykKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1hY2hyZWdfdDsKIAotREVGSU5FX1NQSU5MT0NLKG5taV9sb2NrKTsKK3N0YXRpYyBhcmNoX3NwaW5sb2NrX3Qgbm1pX2xvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOwogCiAvKgogICogTGV0cyBzZWUgd2hhdCBlbHNlIHdlIG5lZWQgdG8gZG8gaGVyZS4gU2V0IHVwIHNwLCBncD8KQEAgLTE5Myw5ICsxOTIsOSBAQAogCWF0b21pY19pbmMoJm5taWVkX2NwdXMpOwogI2VuZGlmCiAJLyoKLQkgKiBVc2UgZW50ZXJfcGFuaWNfbW9kZSB0byBhbGxvdyBvbmx5IDEgY3B1IHRvIHByb2NlZWQKKwkgKiBPbmx5IGFsbG93IDEgY3B1IHRvIHByb2NlZWQKIAkgKi8KLQllbnRlcl9wYW5pY19tb2RlKCk7CisJYXJjaF9zcGluX2xvY2soJm5taV9sb2NrKTsKIAogI2lmZGVmIFJFQUxfTk1JX1NJR05BTAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCmluZGV4IDVjMmJmMTEuLmQ4YjY1MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC01MTIsMTAgKzUxMiw2IEBACiAJCQkJImxldmVsIik7CiAJCQlicmVhazsKIAotCQljYXNlIENSSU1FX0dCRTBfSVJRIC4uLiBDUklNRV9HQkUzX0lSUToKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKLQkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQkJCWJyZWFrOwogCQljYXNlIENSSU1FX0NQVUVSUl9JUlE6CiAJCWNhc2UgQ1JJTUVfTUVNRVJSX0lSUToKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKQEAgLTUyMywxMiArNTE5LDkgQEAKIAkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgQ1JJTUVfR0JFMF9JUlEgLi4uIENSSU1FX0dCRTNfSVJROgogCQljYXNlIENSSU1FX1JFX0VNUFRZX0VfSVJRIC4uLiBDUklNRV9SRV9JRExFX0VfSVJROgogCQljYXNlIENSSU1FX1NPRlQwX0lSUSAuLi4gQ1JJTUVfU09GVDJfSVJROgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAotCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBDUklNRV9WSUNFX0lSUToKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKIAkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCA0MDcwMjY4Li4wNmUyNWQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC03MywxNCArNzMsMTQgQEAKIC8qIFN0b3JlIHRoZSBDUFUgaWQgKG5vdCB0aGUgbG9naWNhbCBudW1iZXIpICovCiBpbnQgYmNtMTQ4MF9pcnFfb3duZXJbQkNNMTQ4MF9OUl9JUlFTXTsKIAotREVGSU5FX1NQSU5MT0NLKGJjbTE0ODBfaW1yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYmNtMTQ4MF9pbXJfbG9jayk7CiAKIHZvaWQgYmNtMTQ4MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGhsX3NwYWNpbmc7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAlobF9zcGFjaW5nID0gMDsKIAlpZiAoKGlycSA+PSBCQ00xNDgwX05SX0lSUVNfSEFMRikgJiYgKGlycSA8PSBCQ00xNDgwX05SX0lSUVMpKSB7CiAJCWhsX3NwYWNpbmcgPSBCQ00xNDgwX0lNUl9ITF9TUEFDSU5HOwpAQCAtODksNyArODksNyBAQAogCWN1cl9pbnRzID0gX19fX3Jhd19yZWFkcShJT0FERFIoQV9CQ00xNDgwX0lNUl9NQVBQRVIoY3B1KSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX01BU0tfSCArIGhsX3NwYWNpbmcpKTsKIAljdXJfaW50cyB8PSAoKCh1NjQpIDEpIDw8IGlycSk7CiAJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGJjbTE0ODBfdW5tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQpAQCAtOTcsNyArOTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGhsX3NwYWNpbmc7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAlobF9zcGFjaW5nID0gMDsKIAlpZiAoKGlycSA+PSBCQ00xNDgwX05SX0lSUVNfSEFMRikgJiYgKGlycSA8PSBCQ00xNDgwX05SX0lSUVMpKSB7CiAJCWhsX3NwYWNpbmcgPSBCQ00xNDgwX0lNUl9ITF9TUEFDSU5HOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwogCWN1cl9pbnRzICY9IH4oKCh1NjQpIDEpIDw8IGlycSk7CiAJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTIzLDcgKzEyMyw3IEBACiAJY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGkpOwogCiAJLyogUHJvdGVjdCBhZ2FpbnN0IG90aGVyIGFmZmluaXR5IGNoYW5nZXJzIGFuZCBJTVIgbWFuaXB1bGF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCS8qIFN3aXp6bGUgZWFjaCBDUFUncyBJTVIgKGJ1dCBsZWF2ZSB0aGUgSVAgc2VsZWN0aW9uIGFsb25lKSAqLwogCW9sZF9jcHUgPSBiY20xNDgwX2lycV9vd25lcltpcnFdOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyAoaypCQ00xNDgwX0lNUl9ITF9TUEFDSU5HKSkpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCmluZGV4IDE1ZWE3NzguLmVkMjQ1M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCmluZGV4IDVlN2YyMDEuLmFiNDRhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCkBAIC03MiwyMCArNzIsMjAgQEAKIC8qIFN0b3JlIHRoZSBDUFUgaWQgKG5vdCB0aGUgbG9naWNhbCBudW1iZXIpICovCiBpbnQgc2IxMjUwX2lycV9vd25lcltTQjEyNTBfTlJfSVJRU107CiAKLURFRklORV9TUElOTE9DSyhzYjEyNTBfaW1yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soc2IxMjUwX2ltcl9sb2NrKTsKIAogdm9pZCBzYjEyNTBfbWFza19pcnEoaW50IGNwdSwgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBjdXJfaW50czsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCWN1cl9pbnRzID0gX19fX3Jhd19yZWFkcShJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwogCWN1cl9pbnRzIHw9ICgoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgc2IxMjUwX3VubWFza19pcnEoaW50IGNwdSwgaW50IGlycSkKQEAgLTkzLDEzICs5MywxMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJY3VyX2ludHMgJj0gfigoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMTUsNyArMTE1LDcgQEAKIAljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgb3RoZXIgYWZmaW5pdHkgY2hhbmdlcnMgYW5kIElNUiBtYW5pcHVsYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCS8qIFN3aXp6bGUgZWFjaCBDUFUncyBJTVIgKGJ1dCBsZWF2ZSB0aGUgSVAgc2VsZWN0aW9uIGFsb25lKSAqLwogCW9sZF9jcHUgPSBzYjEyNTBfaXJxX293bmVyW2lycV07CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jIGIvYXJjaC9taXBzL3NuaS9ybTIwMC5jCmluZGV4IDMxZTI1ODNlLi45MGM1NThmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiByZWFkYi93cml0ZWIgdG8gYWNjZXNzIHRoZW0KICAqLwogCi1ERUZJTkVfU1BJTkxPQ0soc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAjZGVmaW5lIFBJQ19DTUQgICAgMHgwMAogI2RlZmluZSBQSUNfSU1SICAgIDB4MDEKICNkZWZpbmUgUElDX0lTUiAgICBQSUNfQ01ECkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCiAJaXJxIC09IFJNMjAwX0k4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcm0yMDBfY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAJZWxzZQogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzbmlfcm0yMDBfZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTc3LDEzICsxNzcsMTMgQEAKIAogCWlycSAtPSBSTTIwMF9JODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJtMjAwX2NhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCWVsc2UKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25pX3JtMjAwX2k4MjU5QV9pcnFfcmVhbCh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAlpcnEgLT0gUk0yMDBfSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJCXdyaXRlYigweDYwK2lycSwgcm0yMDBfcGljX21hc3RlciArIFBJQ19DTUQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yOTgsNyArMjk4LDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCiAJd3JpdGViKDB4MEMsIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfQ01EKTsJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQlpcnEgPSAtMTsKIAl9CiAKLQlzcGluX3VubG9jaygmc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIFJNMjAwX0k4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KQEAgLTMzNCw3ICszMzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXdyaXRlYigweGZmLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJd3JpdGViKDB4ZmYsIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKaW5kZXggZTI3ODA5Yi4uNzE3NGQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwpAQCAtMzk5LDExICszOTksNiBAQAogCXJldHVybiB0eHg5X3N5c3RlbV90eXBlOwogfQogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIGNvbnN0IGNoYXIgKl9faW5pdCBwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKQogewogCWNvbnN0IHMzMiAqc3RyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCmluZGV4IDI1ZTUwYTcuLjMyMDZmNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKQEAgLTY3LDggKzY3LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGptcjM5MjdfbWVtX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqYXJncHRyOwotCiAJc2V0X2lvX3BvcnRfYmFzZShKTVIzOTI3X1BPUlRfQkFTRSArIEpNUjM5MjdfUENJSU8pOwogCiAJX21hY2hpbmVfcmVzdGFydCA9IGptcjM5MjdfbWFjaGluZV9yZXN0YXJ0OwpAQCAtOTcsMTEgKzk1LDYgQEAKIAlqbXIzOTI3X2JvYXJkX2luaXQoKTsKIAogCXR4MzkyN19zaW9faW5pdCgwLCAxIDw8IDEpOyAvKiBjaDE6IG5vQ1RTICovCi0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlpZiAoIXN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzEsMTE1MjAwIik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGptcjM5MjdfcGNpX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYwppbmRleCBlZTQ2OGVhLi5iMTVhZGZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKQEAgLTE4Nyw4ICsxODcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfbWVtX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqYXJncHRyOwotCiAJaWYgKFRYNDkyN19SRVZfUENPREUoKSA9PSAweDQ5MjcpIHsKIAkJcmJ0eDQ5MjdfY2xvY2tfaW5pdCgpOwogCQl0eDQ5Mjdfc2V0dXAoKTsKQEAgLTIxMywxMSArMjExLDYgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTUsIDEpOwogCiAJdHg0OTI3X3Npb19pbml0KDAsIDApOwotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JaWYgKCFzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDM4NDAwIik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X2Nsb2NrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCmluZGV4IGQ2NjUwOWIuLmQ2ZTcwZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYwpAQCAtMTUzLDcgKzE1Myw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MzhfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBjZmc7Ci0JY2hhciAqYXJncHRyOwogCiAJaWYgKHR4eDlfbWFzdGVyX2Nsb2NrID09IDApCiAJCXR4eDlfbWFzdGVyX2Nsb2NrID0gMjUwMDAwMDA7IC8qIDI1TUh6ICovCkBAIC0xNjgsMTEgKzE2Nyw2IEBACiAjZW5kaWYKIAogCXR4NDkzOF9zaW9faW5pdCg3MzcyODAwLCAwKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWlmICghc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikpCi0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwzODQwMCIpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9QSU81OF82MQogCXByX2luZm8oIlBJT1NFTDogZGlzYWJsaW5nIGJvdGggQVRBIGFuZCBOQU5EIHNlbGVjdGlvblxuIik7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA2ZGMzMGZjOC4uMTZkODg1NyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00NjYsNyArNDY2LDcgQEAKICAqIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMgY29udGFpbmluZyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGJ5IHRsYi1tbjEwMzAwLlMKICAqLwogZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL21tdS1jb250ZXh0LmMgYi9hcmNoL21uMTAzMDAvbW0vbW11LWNvbnRleHQuYwppbmRleCAzMWM5ZDI3Li4zNmJhMDIxIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbW0vbW11LWNvbnRleHQuYworKysgYi9hcmNoL21uMTAzMDAvbW0vbW11LWNvbnRleHQuYwpAQCAtNTEsOSArNTEsMTAgQEAKIC8qCiAgKiBwcmVlbXB0aXZlbHkgc2V0IGEgVExCIGVudHJ5CiAgKi8KLXZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJdW5zaWduZWQgbG9uZyBwdGV1LCBwdGVsLCBjbngsIGZsYWdzOworCXB0ZV90IHB0ZSA9ICpwdGVwOwogCiAJYWRkciAmPSBQQUdFX01BU0s7CiAJcHRlbCA9IHB0ZV92YWwocHRlKSAmIH4oeFBURUxfVU5VU0VEMSB8IHhQVEVMX1VOVVNFRDIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCmluZGV4IDc4Y2QxMzQuLmQ2MTE5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKQEAgLTMxLDkgKzMxLDExIEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKKwogI2lmIDAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIApAQCAtNDcsMTQgKzQ5LDEwIEBACiAJICAgICAgICk7CiAjZW5kaWYKIAotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAmJiAoc3RhcnQgJiAweDMwMCkpCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7Ci0JCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0KKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKaW5kZXggMmNiN2U3NS4uNmQ4NzIwYSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCkBAIC0zMzEsMTIgKzMzMSwxMCBAQAogc3RhdGljIGludCBfX2RldmluaXQgaXNfdmFsaWRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkeCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNOwotCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XSwgKmJ1c3I7CiAKIAlpZiAoZGV2LT5idXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgcmVzb3VyY2UgKmJ1c3IgPSBkZXYtPmJ1cy0+cmVzb3VyY2VbaV07Ci0KKwkJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewogCQkJaWYgKCFidXNyIHx8IChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdhNzNiNjEuLjQ3NzI3NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTM4LDYgKzM4LDE4IEBACiAKICNkZWZpbmUgZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZShzdGFydCxzaXplKSBcCiAJZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZV9hc20oKHN0YXJ0KSwgKHN0YXJ0KSsoc2l6ZSkpOworLyogdm1hcCByYW5nZSBmbHVzaGVzIGFuZCBpbnZhbGlkYXRlcy4gIEFyY2hpdGVjdHVyYWxseSwgd2UgZG9uJ3QgbmVlZAorICogdGhlIGludmFsaWRhdGUsIGJlY2F1c2UgdGhlIENQVSBzaG91bGQgcmVmdXNlIHRvIHNwZWN1bGF0ZSBvbmNlIGFuCisgKiBhcmVhIGhhcyBiZWVuIGZsdXNoZWQsIHNvIGludmFsaWRhdGUgaXMgbGVmdCBlbXB0eSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CisKKwlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbShzdGFydCwgc3RhcnQgKyBzaXplKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKK30KIAogI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQogI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYTI3ZDJlMi4uMDFjMTUwMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDEwLDcgKzQxMCw3IEBACiAKICNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5ICAgICAgICAgUEdfYXJjaF8xCiAKLWV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopOwogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKaW5kZXggYjZlZDM0ZC4uMTA1NGJhYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKQEAgLTY4LDkgKzY4LDkgQEAKIEVYUE9SVF9TWU1CT0woZmx1c2hfY2FjaGVfYWxsX2xvY2FsKTsKIAogdm9pZAotdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCit1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewotCXN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UocHRlKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKCpwdGVwKTsKIAogCWlmIChwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpICYmIHBhZ2VfbWFwcGluZyhwYWdlKSAmJgogCSAgICB0ZXN0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncykpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwppbmRleCA5ZTc0YmZlLi4zODM3MmU3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCkBAIC0yNTcsMTAgKzI1NywxMCBAQAogICogU2luY2Ugd2UgYXJlIGp1c3QgY2hlY2tpbmcgY2FuZGlkYXRlcywgZG9uJ3QgdXNlIGFueSBmaWVsZHMgb3RoZXIKICAqIHRoYW4gcmVzLT5zdGFydC4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbm1lbnQpCiB7Ci0JcmVzb3VyY2Vfc2l6ZV90IG1hc2ssIGFsaWduOworCXJlc291cmNlX3NpemVfdCBtYXNrLCBhbGlnbiwgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJREJHX1JFUygicGNpYmlvc19hbGlnbl9yZXNvdXJjZSglcywgKCVwKSBbJWx4LCVseF0vJXgsIDB4JWx4LCAweCVseClcbiIsCiAJCXBjaV9uYW1lKCgoc3RydWN0IHBjaV9kZXYgKikgZGF0YSkpLApAQCAtMjcyLDEwICsyNzIsMTAgQEAKIAogCS8qIEFsaWduIHRvIGxhcmdlc3Qgb2YgTUlOIG9yIGlucHV0IHNpemUgKi8KIAltYXNrID0gbWF4KGFsaWdubWVudCwgYWxpZ24pIC0gMTsKLQlyZXMtPnN0YXJ0ICs9IG1hc2s7Ci0JcmVzLT5zdGFydCAmPSB+bWFzazsKKwlzdGFydCArPSBtYXNrOworCXN0YXJ0ICY9IH5tYXNrOwogCi0JLyogVGhlIGNhbGxlciB1cGRhdGVzIHRoZSBlbmQgZmllbGQsIHdlIGRvbid0LiAgKi8KKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbGliL2ZpeHVwLlMgYi9hcmNoL3BhcmlzYy9saWIvZml4dXAuUwppbmRleCBkMTcyZDQyLi5mOGM0NWNjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9saWIvZml4dXAuUworKysgYi9hcmNoL3BhcmlzYy9saWIvZml4dXAuUwpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAJLyogdDIgPSAmX19wZXJfY3B1X29mZnNldFtzbXBfcHJvY2Vzc29yX2lkKCldOyAqLwogCUxEUkVHWCBcdDIoXHQxKSxcdDIgCi0JYWRkaWwgTFQlcGVyX2NwdV9fZXhjZXB0aW9uX2RhdGEsJXIyNwotCUxEUkVHIFJUJXBlcl9jcHVfX2V4Y2VwdGlvbl9kYXRhKCVyMSksXHQxCisJYWRkaWwgTFQlZXhjZXB0aW9uX2RhdGEsJXIyNworCUxEUkVHIFJUJWV4Y2VwdGlvbl9kYXRhKCVyMSksXHQxCiAJLyogdDEgPSAmX19nZXRfY3B1X3ZhcihleGNlcHRpb25fZGF0YSkgKi8KIAlhZGQsbCBcdDEsXHQyLFx0MQogCS8qIHQxID0gdDEtPmZhdWx0X2lwICovCkBAIC00Niw4ICs0Niw4IEBACiAjZWxzZQogCS5tYWNybyAgZ2V0X2ZhdWx0X2lwIHQxIHQyCiAJLyogdDEgPSAmX19nZXRfY3B1X3ZhcihleGNlcHRpb25fZGF0YSkgKi8KLQlhZGRpbCBMVCVwZXJfY3B1X19leGNlcHRpb25fZGF0YSwlcjI3Ci0JTERSRUcgUlQlcGVyX2NwdV9fZXhjZXB0aW9uX2RhdGEoJXIxKSxcdDIKKwlhZGRpbCBMVCVleGNlcHRpb25fZGF0YSwlcjI3CisJTERSRUcgUlQlZXhjZXB0aW9uX2RhdGEoJXIxKSxcdDIKIAkvKiB0MSA9IHQyLT5mYXVsdF9pcCAqLwogCUxEUkVHIEVYQ0RBVEFfSVAoXHQyKSwgXHQxCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggYmEzOTQ4Yy4uMTU1ZDU3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTU4LDcgKzU4LDcgQEAKIAogY29uZmlnIE5SX0lSUVMKIAlpbnQgIk51bWJlciBvZiB2aXJ0dWFsIGludGVycnVwdCBudW1iZXJzIgotCXJhbmdlIDMyIDUxMgorCXJhbmdlIDMyIDMyNzY4CiAJZGVmYXVsdCAiNTEyIgogCWhlbHAKIAkgIFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlcnMgdGhlIGtlcm5lbApAQCAtMTczLDYgKzE3Myw3IEBACiAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFBQQ19VREJHXzE2NTUwCiAJYm9vbApAQCAtMjQwLDYgKzI0MSwzMyBAQAogY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCiAJZGVmX2Jvb2wgeQogCitjb25maWcgUFBDX0FEVl9ERUJVR19SRUdTCisJYm9vbAorCWRlcGVuZHMgb24gNDB4IHx8IEJPT0tFCisJZGVmYXVsdCB5CisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0lBQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgNCBpZiA0NHgKKwlkZWZhdWx0IDIKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDUworCWludAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTCisJZGVmYXVsdCAyCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RWQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgMiBpZiA0NHgKKwlkZWZhdWx0IDAKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTICYmIDQ0eAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwppbmRleCA0MTRlZjhiLi4zMGY0MTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwpAQCAtNjAsNiArNjAsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTE0Niw2ICsxNDcsMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMjc0LDYgKzI4Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHhmZmZmZmZmZj47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGE+OwpAQCAtMzAyLDYgKzMxMSw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGI+OwpAQCAtMzMxLDYgKzM0MSw4IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CisJCQkJdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OyAvKiBlbWFjMiYzIG9ubHkgKi8KIAkJCQlwaHktbW9kZSA9ICJzZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAxPjsKIAkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwQz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCmluZGV4IGM4NjExNGUuLjk3N2YyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCkBAIC0zNDEsNiArMzQxLDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwppbmRleCA4MjBjMmIzLi44ZTRlZmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCkBAIC0zMiw2ICszMiw3IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKIAl9OwogCiAJY3B1cyB7CkBAIC0zMzgsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKQEAgLTM1OCw3ICszNzUsNyBAQAogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgyCiAJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCmluZGV4IDMwOTExYWQuLmJiNzA2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTc1LDE0ICs3NSw0OCBAQAogCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAotCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMCAgICAgLy8gMTZNQiBCb290IGZsYXNoCi0JCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDAKLQkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMQotCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwICAgICAvLyBOVlJBTQotCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwICAgICAvLyBGUEdBCi0JCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAgICAgIC8vIEFGSVggRlBHQQotCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKLQkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQorCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMAkvLyAxNk1CIEJvb3QgZmxhc2gKKwkJCSAgMSAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAwCisJCQkgIDIgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMQorCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwCS8vIE5WUkFNCisJCQkgIDQgMCAweGZjMDAwMDAwIDB4MDAwMDgwMDAJLy8gRlBHQQorCQkJICA1IDAgMHhmYzAwODAwMCAweDAwMDA4MDAwCS8vIEFGSVggRlBHQQorCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwCS8vIElPIEZQR0EgKDgtYml0KQorCQkJICA3IDAgMHhmZDgwMDAwMCAweDAwODAwMDAwPjsJLy8gSU8gRlBHQSAoMzItYml0KQorCisJCS8qIGZsYXNoQDAsMCBpcyBhIG1pcnJvciBvZiBwYXJ0IG9mIHRoZSBtZW1vcnkgaW4gZmxhc2hAMSwwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtcGFnZWQtZmxhc2giLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwIDB4NzgwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHg3ODAwMDAwIDB4ODAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OwogCiAJCW52cmFtQDMsMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJudnJhbSI7CkBAIC0zMDUsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwppbmRleCBmNmY2MTg5Li5kNjJhNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBHbGFjaWVyICg0NjBHVCkKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dApAQCAtNDIsNiArNDIsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTEwNiw2ICsxMDcsMTYgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCUwyQzA6IGwyYyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGwyLWNhY2hlLTQ2MGd0IiwgImlibSxsMi1jYWNoZSI7CisJCWRjci1yZWcgPSA8MHgwMjAgMHgwMDgJCS8qIEludGVybmFsIFNSQU0gRENSJ3MgKi8KKwkJCSAgIDB4MDMwIDB4MDA4PjsJLyogTDIgY2FjaGUgRENSJ3MgKi8KKwkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJCS8qIDMyIGJ5dGVzICovCisJCWNhY2hlLXNpemUgPSA8MjYyMTQ0PjsJCS8qIEwyLCAyNTZLICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQlpbnRlcnJ1cHRzID0gPDExIDE+OworCX07CisKIAlwbGIgewogCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwZ3QiLCAiaWJtLHBsYjQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKQEAgLTExOCw2ICsxMjksMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMTg2LDYgKzIwNCwyOSBAQAogCQkJCQkJcmVnID0gPDB4MDNmYTAwMDAgMHgwMDA2MDAwMD47CiAJCQkJCX07CiAJCQkJfTsKKworCQkJCW5kZmNAMywwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJpYm0sbmRmYyI7CisJCQkJCXJlZyA9IDwweDAwMDAwMDAzIDB4MDAwMDAwMDAgMHgwMDAwMjAwMD47CisJCQkJCWNjciA9IDwweDAwMDAxMDAwPjsKKwkJCQkJYmFuay1zZXR0aW5ncyA9IDwweDgwMDAyMjIyPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQkJCW5hbmQgeworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJCQl9OworCQkJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwM2YwMDAwMD47CisJCQkJCQl9OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCiAJCQlVQVJUMDogc2VyaWFsQGVmNjAwMzAwIHsKQEAgLTIzNyw2ICsyNzgsMjAgQEAKIAkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAic3RtLG00MXQ4MCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQkJCWludGVycnVwdHMgPSA8MHgxOSAweDg+OworCQkJCX07CisJCQkJc3R0bUA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE0IDB4OD47CisJCQkJfTsKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CkBAIC0yNzUsNyArMzMwLDcgQEAKIAogCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMjgzLDcgKzMzOCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEwIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTQgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0zMDUsNyArMzYwLDcgQEAKIAogCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMT47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzEzLDcgKzM2OCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDExIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTUgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CkBAIC0zMzYsNyArMzkxLDcgQEAKIAogCQkJRU1BQzI6IGV0aGVybmV0QGVmNjAxMTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzQ0LDcgKzM5OSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEyIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTYgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CkBAIC0zNjYsNyArNDIxLDcgQEAKIAogCQkJRU1BQzM6IGV0aGVybmV0QGVmNjAxMjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzc0LDcgKzQyOSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEzIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTcgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mz47CkBAIC00MTQsNiArNDY5LDcgQEAKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCiAJCQkgKi8KIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBkIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MGVlMDAwMDAgMHgwMDAwMDAwMCAweDAwMTAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MDgwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwpAQCAtNDQ0LDYgKzUwMCw3IEBACiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAogCQkJICovCiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZSAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDEwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKIAkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KQEAgLTQ4NSw2ICs1NDIsNyBAQAogCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKIAkJCSAqLwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGUgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDEwMDAwMCAweDAwMDAwMDAwIDB4MDAxMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAxMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCiAJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDhmMzQ1ZGU5Li44Y2YyYzBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDQwc3BlIiwgImlibSxvcGItNDQwZ3AiLCAiaWJtLG9wYiI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OworCQkJcmFuZ2VzID0gPDB4ZTAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCiAKIAkJCUVCQzA6IGViYyB7CkBAIC0xNjUsMTQgKzE2NSw0NyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCisJCQkJbm9yX2ZsYXNoQDAsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDIwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQlyZWcgPSA8MHgwMDQwMDAwMCAweDAwYjYwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQGY2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDBmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkBmYTAwMDAgeworCQkJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQkJCXJlZyA9IDwweDAwZmEwMDAwIDB4MDAwNjAwMDA+OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCi0JCQlVQVJUMDogc2VyaWFsQDEwMDAwMjAwIHsKKwkJCVVBUlQwOiBzZXJpYWxAZjAwMDAyMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDIwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDIwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMjAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KIAkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CkBAIC0xODAsMTAgKzIxMywxMCBAQAogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CiAJCQl9OwogCi0JCQlVQVJUMTogc2VyaWFsQDEwMDAwMzAwIHsKKwkJCVVBUlQxOiBzZXJpYWxAZjAwMDAzMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDMwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDMwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMzAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKQEAgLTE5MiwxMCArMjI1LDEwIEBACiAJCQl9OwogCiAKLQkJCVVBUlQyOiBzZXJpYWxAMTAwMDA2MDAgeworCQkJVUFSVDI6IHNlcmlhbEBmMDAwMDYwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJCXJlZyA9IDwweDEwMDAwNjAwIDB4MDAwMDAwMDg+OworCQkJCXJlZyA9IDwweGYwMDAwNjAwIDB4MDAwMDAwMDg+OwogCQkJCXZpcnR1YWwtcmVnID0gPDB4YTAwMDA2MDA+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCQljdXJyZW50LXNwZWVkID0gPDA+OwpAQCAtMjAzLDI3ICsyMzYsMjcgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDQ+OwogCQkJfTsKIAotCQkJSUlDMDogaTJjQDEwMDAwNDAwIHsKKwkJCUlJQzA6IGkyY0BmMDAwMDQwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwotCQkJCXJlZyA9IDwweDEwMDAwNDAwIDB4MDAwMDAwMTQ+OworCQkJCXJlZyA9IDwweGYwMDAwNDAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgyIDB4ND47CiAJCQl9OwogCi0JCQlJSUMxOiBpMmNAMTAwMDA1MDAgeworCQkJSUlDMTogaTJjQGYwMDAwNTAwIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwc3BlIiwgImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7Ci0JCQkJcmVnID0gPDB4MTAwMDA1MDAgMHgwMDAwMDAxND47CisJCQkJcmVnID0gPDB4ZjAwMDA1MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKIAkJCX07CiAKLQkJCUVNQUMwOiBldGhlcm5ldEAxMDAwMDgwMCB7CisJCQlFTUFDMDogZXRoZXJuZXRAZjAwMDA4MDAgewogCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MHgwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MHNwZSIsICJpYm0sZW1hYzQiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwogCQkJCWludGVycnVwdHMgPSA8MHgxYyAweDQgMHgxZCAweDQ+OwotCQkJCXJlZyA9IDwweDEwMDAwODAwIDB4MDAwMDAwNzQ+OworCQkJCXJlZyA9IDwweGYwMDAwODAwIDB4MDAwMDAwNzQ+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07CiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0yNDgsMTEgKzI4MSwxMSBAQAogCQkJcHJpbWFyeTsKIAkJCWxhcmdlLWluYm91bmQtd2luZG93czsKIAkJCWVuYWJsZS1tc2ktaG9sZTsKLQkJCXJlZyA9IDwweDAwMDAwMDBjIDB4MGVjMDAwMDAgICAweDAwMDAwMDA4CS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KLQkJCSAgICAgICAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMAkJLyogbm8gSUFDSyBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVkMDAwMDAgICAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMAkvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAxMDAgIDB4MDAwMDAwZmM+OwkvKiBJbnRlcm5hbCBtZXNzYWdpbmcgcmVnaXN0ZXJzICovCisJCQlyZWcgPSA8MHgwMDAwMDAwYyAweDBlYzAwMDAwIDB4MDAwMDAwMDggICAvKiBDb25maWcgc3BhY2UgYWNjZXNzICovCisJCQkgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgICAvKiBubyBJQUNLIGN5Y2xlcyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWQwMDAwMCAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMCAgIC8qIEludGVybmFsIHJlZ2lzdGVycyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWM4MDEwMCAweDAwMDAwMGZjPjsgLyogSW50ZXJuYWwgbWVzc2FnaW5nIHJlZ2lzdGVycyAqLwogCiAJCQkvKiBPdXRib3VuZCByYW5nZXMsIG9uZSBtZW1vcnkgYW5kIG9uZSBJTywKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCkBAIC00NTMsNiArNDg2LDYgQEAKIAl9OwogCiAJY2hvc2VuIHsKLQkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQDEwMDAwMjAwIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGYwMDAwMjAwIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwppbmRleCBjMzUzZGFjLi5jOWVmNmJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCkBAIC02MiwxNyArNjIsMTIgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQliYW5rLXdpZHRoID0gPDE+OwogCQkvLyBBRFMgaGFzIHR3byBIeW5peCA1MTJNQiBOYW5kIGZsYXNoIGNoaXBzIGluIGEgc2luZ2xlCi0JCS8vIHN0YWNrZWQgcGFja2FnZSAuCisJCS8vIHN0YWNrZWQgcGFja2FnZS4KIAkJY2hpcHMgPSA8Mj47Ci0JCW5hbmQwQDAgewotCQkJbGFiZWwgPSAibmFuZDAiOwotCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDAKLQkJfTsKLQkJbmFuZDFAMjAwMDAwMDAgewotCQkJbGFiZWwgPSAibmFuZDEiOwotCQkJcmVnID0gPDB4MjAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDEKKwkJbmFuZEAwIHsKKwkJCWxhYmVsID0gIm5hbmQiOworCQkJcmVnID0gPDB4MDAwMDAwMDAgMHg0MDAwMDAwMD47CS8vIDUxMk1CICsgNTEyTUIKIAkJfTsKIAl9OwogCkBAIC0xNjYsNiArMTYxLDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCisJCXJlc2V0QGUwMCB7CS8vIFJlc2V0IG1vZHVsZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1yZXNldCI7CisJCQlyZWcgPSA8MHhlMDAgMHgxMDA+OworCQl9OworCiAJCWNsb2NrQGYwMCB7CS8vIENsb2NrIGNvbnRyb2wKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtY2xvY2siOwogCQkJcmVnID0gPDB4ZjAwIDB4MTAwPjsKQEAgLTE4NSwxNyArMTg1LDE1IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCi0JCW1zY2FuQDEzMDAgeworCQljYW5AMTMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEyIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJcmVnID0gPDB4MTMwMCAweDgwPjsKIAkJfTsKIAotCQltc2NhbkAxMzgwIHsKKwkJY2FuQDEzODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwxMyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCXJlZyA9IDwweDEzODAgMHg4MD47CkBAIC0yMDUsMTcgKzIwMywzMSBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDE3MDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CisKKwkJCWh3bW9uQDRhIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZDc0MTQiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCX07CisKKwkJCWVlcHJvbUA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMzMiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gInN0bSxtNDF0NjIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDE3MjAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDE3MjAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjI1LDcgKzIzNyw2IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMiLCAiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4MTc0MCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNDQsNyArMjU1LDcgQEAKIAkJfTsKIAogCQlkaXNwbGF5QDIxMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiLCAiZnNsLWRpdSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSI7CiAJCQlyZWcgPSA8MHgyMTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8NjQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNzcsNyArMjg4LDcgQEAKIAogCQkvLyBVU0IxIHVzaW5nIGV4dGVybmFsIFVMUEkgUEhZCiAJCS8vdXNiQDMwMDAgewotCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkvLwlyZWcgPSA8MHgzMDAwIDB4MTAwMD47CiAJCS8vCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkvLwkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI4NSwxMiArMjk2LDExIEBACiAJCS8vCWludGVycnVwdHMgPSA8NDMgMHg4PjsKIAkJLy8JZHJfbW9kZSA9ICJvdGciOwogCQkvLwlwaHlfdHlwZSA9ICJ1bHBpIjsKLQkJLy8JcG9ydDE7CiAJCS8vfTsKIAogCQkvLyBVU0IwIHVzaW5nIGludGVybmFsIFVUTUkgUEhZCiAJCXVzYkA0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtdXNiMi1kciIsICJmc2wtdXNiMi1kciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkJcmVnID0gPDB4NDAwMCAweDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI5OCw3ICszMDgsOCBAQAogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJZHJfbW9kZSA9ICJvdGciOwogCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKLQkJCXBvcnQwOworCQkJZnNsLGludmVydC1kcnZ2YnVzOworCQkJZnNsLGludmVydC1wd3ItZmF1bHQ7CiAJCX07CiAKIAkJLy8gSU8gY29udHJvbApAQCAtMzY1LDcgKzM3Niw3IEBACiAJCX07CiAKIAkJZG1hQDE0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZG1hMiI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYSI7CiAJCQlyZWcgPSA8MHgxNDAwMCAweDE4MDA+OwogCQkJaW50ZXJydXB0cyA9IDw2NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwppbmRleCA2ZDg5MmJhLi45MmZiMTc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCkBAIC01NCw5ICs1NCw1MiBAQAogCQlyZWcgPSA8MHgwIDB4MTAwMDAwMDA+OwogCX07CiAKLQliY3NyQGY4MDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OG1kcy1iY3NyIjsKLQkJcmVnID0gPDB4ZjgwMDAwMDAgMHg4MDAwPjsKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OC1sb2NhbGJ1cyIsICJmc2wscHEzLWxvY2FsYnVzIiwKKwkJCSAgICAgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDEwMDA+OworCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAweDEgMHgwIDB4ZjgwMDAwMDAgMHgwMDAwODAwMAorCQkJICAweDIgMHgwIDB4ZjAwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAweDQgMHgwIDB4ZjgwMDgwMDAgMHgwMDAwODAwMAorCQkJICAweDUgMHgwIDB4ZjgwMTAwMDAgMHgwMDAwODAwMD47CisKKwkJbm9yQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgwMjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3IiOworCQkJcmVnID0gPDEgMCAweDgwMDA+OworCQkJcmFuZ2VzID0gPDAgMSAwIDB4ODAwMD47CisKKwkJCWJjc3I1OiBncGlvLWNvbnRyb2xsZXJAMTEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtYmNzci1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1IDB4MT47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKKwkJfTsKKworCQlwaWJANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw0IDAgMHg4MDAwPjsKKwkJfTsKKworCQlwaWJANSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw1IDAgMHg4MDAwPjsKKwkJfTsKIAl9OwogCiAJc29jODU2OEBlMDAwMDAwMCB7CkBAIC02MTAsNCArNjUzLDIwIEBACiAJCXNsZWVwID0gPCZwbWMgMHgwMDA4MDAwMCAgIC8qIGNvbnRyb2xsZXIgKi8KIAkJCSAmcG1jIDB4MDAwNDAwMDA+OyAvKiBtZXNzYWdlIHVuaXQgKi8KIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlncmVlbiB7CisJCQlncGlvcyA9IDwmYmNzcjUgMSAwPjsKKwkJfTsKKworCQlhbWJlciB7CisJCQlncGlvcyA9IDwmYmNzcjUgMiAwPjsKKwkJfTsKKworCQlyZWQgeworCQkJZ3Bpb3MgPSA8JmJjc3I1IDMgMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKaW5kZXggNzk1ZWIzNjIuLjhiNzJlYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKQEAgLTUzNSw2ICs1MzUsNyBAQAogCQkJcngtY2xvY2stbmFtZSA9ICJub25lIjsKIAkJCXR4LWNsb2NrLW5hbWUgPSAiY2xrMTIiOwogCQkJcGlvLWhhbmRsZSA9IDwmcGlvMT47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAJCX07CkBAIC01NzksNyArNTgwLDcgQEAKIAkJCQlyZWcgPSA8MHg2PjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKLQkJCXRiaS1waHlAMTEgeworCQkJdGJpMTogdGJpLXBoeUAxMSB7CiAJCQkJcmVnID0gPDB4MTE+OwogCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwogCQkJfTsKQEAgLTU5MCw3ICs1OTEsNyBAQAogCQkJcmVnID0gPDB4MzUyMCAweDE4PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIjsKIAotCQkJdGJpMDogdGJpLXBoeUAxNSB7CisJCQl0Ymk2OiB0YmktcGh5QDE1IHsKIAkJCXJlZyA9IDwweDE1PjsKIAkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwogCQkJfTsKQEAgLTYwMCw3ICs2MDEsNyBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlyZWcgPSA8MHgzNzIwIDB4Mzg+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iOwotCQkJdGJpMTogdGJpLXBoeUAxNyB7CisJCQl0Ymk4OiB0YmktcGh5QDE3IHsKIAkJCQlyZWcgPSA8MHgxNz47CiAJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CiAJCQl9OwpAQCAtNjE3LDEwICs2MTgsMjIgQEAKIAkJCXJ4LWNsb2NrLW5hbWUgPSAibm9uZSI7CiAJCQl0eC1jbG9jay1uYW1lID0gImNsazEyIjsKIAkJCXBpby1oYW5kbGUgPSA8JnBpbzM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZxZV9waHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQl9OwogCisJCW1kaW9AMjMyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MjMyMCAweDE4PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIjsKKwkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKIAkJZW5ldDE6IHVjY0AzMDAwIHsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aCI7CkBAIC02MzIsMTAgKzY0NSwyMiBAQAogCQkJcngtY2xvY2stbmFtZSA9ICJub25lIjsKIAkJCXR4LWNsb2NrLW5hbWUgPSAiY2xrMTciOwogCQkJcGlvLWhhbmRsZSA9IDwmcGlvMj47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAJCX07CiAKKwkJbWRpb0AzMTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgzMTIwIDB4MTg+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iOworCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJfTsKKwkJfTsKKwogCQllbmV0MzogdWNjQDMyMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKQEAgLTY0NywxMCArNjcyLDIyIEBACiAJCQlyeC1jbG9jay1uYW1lID0gIm5vbmUiOwogCQkJdHgtY2xvY2stbmFtZSA9ICJjbGsxNyI7CiAJCQlwaW8taGFuZGxlID0gPCZwaW80PjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTQ+OwogCQkJcGh5LWhhbmRsZSA9IDwmcWVfcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAkJfTsKIAorCQltZGlvQDMzMjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDMzMjAgMHgxOD47CisJCQljb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyI7CisJCQl0Ymk0OiB0YmktcGh5QDExIHsKKwkJCQlyZWcgPSA8MHgxMT47CisJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQl9OworCQl9OworCiAJCWVuZXQ1OiB1Y2NAMzQwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGgiOwpAQCAtNjYxLDcgKzY5OCw3IEBACiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCXJ4LWNsb2NrLW5hbWUgPSAibm9uZSI7CiAJCQl0eC1jbG9jay1uYW1lID0gIm5vbmUiOwotCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQl0YmktaGFuZGxlID0gPCZ0Ymk2PjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTU+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJzZ21paSI7CiAJCX07CkBAIC02NzYsNyArNzEzLDcgQEAKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJcngtY2xvY2stbmFtZSA9ICJub25lIjsKIAkJCXR4LWNsb2NrLW5hbWUgPSAibm9uZSI7Ci0JCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTg+OwogCQkJcGh5LWhhbmRsZSA9IDwmcWVfcGh5Nz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcKaW5kZXggZGVjOTAxZjkuLmFmMjQ0ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE0OjU1OjM0IDIwMTAKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKKyMgVHVlIEphbiAyNiAxNDo0MDo1OCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTEwNiw2ICsxMDYsNyBAQAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNDQyLDcgKzQ0Myw5MCBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CkBAIC01MDAsNyArNTg0LDcgQEAKICMKIAogIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTc2Myw3ICs4NDcsNiBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04MjAsNiArOTAzLDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCmluZGV4IGE4NWY5MjcuLjYyMmQ4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTE1NTcsNyArMTU1Nyw1MiBAQAogIwogIyBUSSBWTFlOUQogIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU1RBR0lORz15CisjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUlMSEFVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfQ09NRURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfT0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfUENJRV9DSERNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFOWlBPUlQgaXMgbm90IHNldAorCisjCisjIEFuZHJvaWQKKyMKKyMgQ09ORklHX0FORFJPSUQgaXMgbm90IHNldAorIyBDT05GSUdfRFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPSE1FTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0IzREZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9QSElTT04gaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NQQyBpcyBub3Qgc2V0CisKKyMKKyMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KKyMKKworIworIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgorIworIyBDT05GSUdfSFlQRVJWX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSFlQRVJWX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hZUEVSVl9ORVQgaXMgbm90IHNldAorQ09ORklHX1ZNRV9CVVM9eQorCisjCisjIFZNRSBCcmlkZ2UgRHJpdmVycworIworQ09ORklHX1ZNRV9UU0kxNDg9eQorCisjCisjIFZNRSBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfVk1FX1VTRVIgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKaW5kZXggNDU1NGQ5Yi4uNjJjMmI4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCkBAIC0yNjUsNyArMjY1LDcgQEAKICMKICMgS2VybmVsIG9wdGlvbnMKICMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0hJR0hNRU09eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTY1MSw3ICs2NTEsNyBAQAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC02NzEsMTMgKzY3MSw5IEBACiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCiAjCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9HRU5fUFJPQkU9eQotQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotIyBDT05GSUdfTVREX0NGSV9OT1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CkBAIC02ODgsNyArNjg0LDYgQEAKIENPTkZJR19NVERfQ0ZJX0kyPXkKICMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldApAQCAtMTY1Miw3ICsxNjQ3LDQ0IEBACiAjCiAjIFRJIFZMWU5RCiAjCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFHSU5HPXkKKyMgQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVDEzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUU0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FSUxIQVVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQW5kcm9pZAorIworIyBDT05GSUdfQU5EUk9JRCBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1BISVNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldAorIyBDT05GSUdfSEVDSSBpcyBub3Qgc2V0CisjIENPTkZJR19WVDY2NTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NQQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRENfMTdGMzEwMVggaXMgbm90IHNldAorQ09ORklHX1ZNRV9CVVM9eQorCisjCisjIFZNRSBCcmlkZ2UgRHJpdmVycworIworIyBDT05GSUdfVk1FX0NBOTFDWDQyIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfVFNJMTQ4PXkKKworIworIyBWTUUgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE3MjksNyArMTc2MSwxNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE4NzQsNiArMTkxNiw3IEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3MjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjk0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM2CisjIEZyaSBGZWIgIDUgMTE6NDg6MjkgMjAxMAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfUFBDX0JPT0szU18zMj15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDNTEyeD15CitDT05GSUdfUFBDX01QQzUxMjE9eQorQ09ORklHX01QQzUxMjFfQURTPXkKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0NBTj15CitDT05GSUdfQ0FOX1JBVz15CitDT05GSUdfQ0FOX0JDTT15CisKKyMKKyMgQ0FOIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfQ0FOX1ZDQU49eQorQ09ORklHX0NBTl9ERVY9eQorIyBDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fTVNDQU49eQorIyBDT05GSUdfQ0FOX1NKQTEwMDAgaXMgbm90IHNldAorCisjCisjIENBTiBVU0IgaW50ZXJmYWNlcworIworIyBDT05GSUdfQ0FOX0VNU19VU0IgaXMgbm90IHNldAorQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTPXkKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JPTT15CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX01QQzUxMjFfTkZDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTEKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1hJUD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND15CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKK0NPTkZJR19GSVhFRF9QSFk9eQorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVQ9eQorQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUM9eQorQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CitDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTVBDNTJ4eD15CitDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTExNTIwMAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorQ09ORklHX01FRElBX1NVUFBPUlQ9eQorCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPXkKK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CisjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9eQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0lSX0NPUkU9eQorQ09ORklHX1ZJREVPX0lSPXkKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9eQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKK0NPTkZJR19WSURFT19WNEwyPXkKK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorQ09ORklHX1ZJREVPX0FEVl9ERUJVRz15CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0lSX0kyQz15CisKKyMKKyMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcworIworCisjCisjIEF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTc0MzIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MjAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzNDUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTTUyNzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004NzM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKKworIworIyBSRFMgZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTY1ODggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19BRFY3MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0tTMDEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVjc2NzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVQ5VjAxMSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMTAgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1NBQTcxMVg9eQorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlBYMzIyMCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKworIworIyBNUEVHIHZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzE3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19USFM3MzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CisjIENPTkZJR19VU0JfVklERU9fQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CitDT05GSUdfVVNCX0dTUENBPW0KKyMgQ09ORklHX1VTQl9NNTYwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWMDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0w4NjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9FVE9NUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVFYwNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1gyMzFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX1pSMzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAorQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX0kyQ19TSTQ3MTMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0ZTTF9ESVU9eQorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9LWUU9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX0RFU0M9eQorIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NUEM1MTIxPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfRlNMX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfTVBDNTEyWF9ETUE9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTz15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz15CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorQ09ORklHX1BQQ19DTE9DSz15CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggN2IzODA0YS4uMTI5ODBkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMTM3LDggKzEzNyw5IEBACiBDT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKQEAgLTE5MSw2ICsxOTIsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKIENPTkZJR19QUENfSVNFUklFUz15CiAKICMKQEAgLTMyOCw5ICszMzAsMTAgQEAKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19QSFlQX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD04CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CkBAIC0zMzksNiArMzQyLDcgQEAKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQogQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkBAIC0zNTQsMTEgKzM1OCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX1NNVD15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgpAQCAtNzkwLDEyICs3OTUsMTIgQEAKIENPTkZJR19TQ1NJX0lQUl9UUkFDRT15CiBDT05GSUdfU0NTSV9JUFJfRFVNUD15CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1FMQV9GQz1tCiAjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CkBAIC04NjcsOSArODcyLDggQEAKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci1DT05GSUdfTURfUkFJRDEwPXkKLUNPTkZJR19NRF9SQUlENDU2PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTk4NCw3ICs5ODgsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTEwMDAsMjUgKzEwMDQsMjQgQEAKIENPTkZJR19TUElERVJfTkVUPW0KIENPTkZJR19HRUxJQ19ORVQ9bQogQ09ORklHX0dFTElDX1dJUkVMRVNTPXkKLSMgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDM9bQogQ09ORklHX0VIRUE9bQogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQkU9bQogQ09ORklHX0lYR0I9bQotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TMklPPW0KK0NPTkZJR19NWVJJMTBHRT1tCitDT05GSUdfTkVUWEVOX05JQz1tCiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogQ09ORklHX1BBU0VNSV9NQUM9eQotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorQ09ORklHX01MWDRfRU49bQorQ09ORklHX01MWDRfQ09SRT1tCiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CkBAIC0xMTY5LDcgKzExNzIsNyBAQAogQ09ORklHX0hBU19UWFg5X1NFUklBTD15CiBDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9NgogQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0pTTT1tCiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC0xNTg2LDcgKzE1ODksNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTY4NiwyMSArMTY4OSwyMiBAQAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORD1tCi0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQ9bQorQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1M9bQorQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU09eQogQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQQVRIPW0KIENPTkZJR19JTkZJTklCQU5EX0VIQ0E9bQogIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX01MWDRfSU5GSU5JQkFORD1tCiAjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNPXkKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9TUlA9bQogQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCiBDT05GSUdfRURBQz15CiAKQEAgLTE3OTgsNyArMTgwMiw3IEBACiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX0ZTPW0KIENPTkZJR19KRlNfUE9TSVhfQUNMPXkKIENPTkZJR19KRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE4MTEsMTQgKzE4MTUsMjIgQEAKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfT0NGUzJfRlM9bQorQ09ORklHX09DRlMyX0ZTX08yQ0I9bQorQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKK0NPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xODUxLDcgKzE4NjMsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTIwNzUsNyArMjA4Nyw3IEBACiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX0lSUVNUQUNLUz15Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJRX0RFQlVHPXkKIENPTkZJR19CT09UWF9URVhUPXkKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDdkZTEyN2UuLjMyZjcwNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtNTkzLDcgKzU5Myw2IEBACiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0dFTElDX05FVD15CiBDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQotIyBDT05GSUdfR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBjYTlmZjlhLi40MWRlM2RkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMTU5LDcgKzE1OSw3IEBACiBDT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKIENPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKQEAgLTE5MSw2ICsxOTEsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CkBAIC0yNTUsNyArMjU2LDggQEAKICMgQ09ORklHX1BIWVBfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19OVU1BPXkKLUNPTkZJR19OT0RFU19TSElGVD00CitDT05GSUdfTk9ERVNfU0hJRlQ9OAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CkBAIC0yNzAsNyArMjcyLDkgQEAKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci0jIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKQEAgLTcwNSw3ICs3MDksNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTgwMCw3ICs4MDQsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTgxOCwxOCArODIyLDE4IEBACiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDM9bQogQ09ORklHX0VIRUE9eQogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQkU9bQogQ09ORklHX0lYR0I9bQogQ09ORklHX1MySU89bQotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CitDT05GSUdfTVlSSTEwR0U9bQorQ09ORklHX05FVFhFTl9OSUM9bQogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0VOPW0KK0NPTkZJR19NTFg0X0NPUkU9bQogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldApAQCAtODk0LDcgKzg5OCw3IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzEsNyArMTI3NSw3IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX01PTj1tCiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTMxMSw3ICsxMzE1LDcgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldApAQCAtMTMyMiw3ICsxMzI2LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKQEAgLTEzNzcsMTcgKzEzODEsMTcgQEAKIENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUEFUSD1tCiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTT15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldApAQCAtMTQ0Myw2ICsxNDQ3LDkgQEAKIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0NTUsOCArMTQ2Miw4IEBACiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC0xNTA4LDE0ICsxNTE1LDE0IEBACiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjJfQUNMPXkKIENPTkZJR19ORlNEX1YzPXkKIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKQEAgLTE2ODEsMTIgKzE2ODgsMTIgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKaW5kZXggOGYwZmU3OS4uYzFiNDc1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCiAjaWZkZWYgX19BU1NFTUJMWV9fCiAjICBkZWZpbmUgc3RyaW5naWZ5X2luX2MoLi4uKQlfX1ZBX0FSR1NfXwpAQCAtMjQsNyArMjUsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubGxvbmcpCiAjZGVmaW5lIFBQQ19MT05HX0FMSUdOCXN0cmluZ2lmeV9pbl9jKC5iYWxpZ24gOCkKICNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHRkbmVpKQotI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobGRhcngpCisjZGVmaW5lIFBQQ19MTEFSWCh0LCBhLCBiLCBlaCkJUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQogI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3RkY3guKQogI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6ZCkKIApAQCAtNDYsNyArNDcsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKICNkZWZpbmUgUFBDX0xPTkdfQUxJR04Jc3RyaW5naWZ5X2luX2MoLmJhbGlnbiA0KQogI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModHduZWkpCi0jZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsd2FyeCkKKyNkZWZpbmUgUFBDX0xMQVJYKHQsIGEsIGIsIGVoKQlQUENfTFdBUlgodCwgYSwgYiwgZWgpCiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdHdjeC4pCiAjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHp3KQogI2RlZmluZSBQUENfTVRPQ1JGCXN0cmluZ2lmeV9pbl9jKG10Y3JmKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDQwMTI0ODMuLmI4ZjE1MmVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC00OSwxMyArNDksMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMgkJIyBhdG9taWNfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTg1LDEzICs4NSwxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTExOSwxMyArMTE5LDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTE2MywxMyArMTYzLDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2RlY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwtMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfYWRkX3VubGVzc1xuXAogCWNtcHcJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXApAQCAtMjAyLDcgKzIwMiw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIgXG4iCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogIglzdWJmCSUwLCUyLCUwIFxuXAogMjoiCiAJOiAiPSZyIiAodCkKQEAgLTIyNyw3ICsyMjcsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfaWZfcG9zaXRpdmVcblwKIAljbXB3aQklMCwxXG5cCiAJYWRkaQklMCwlMCwtMVxuXApAQCAtMjM1LDcgKzIzNSw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCTogIj0mYiIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQpAQCAtMjg2LDEyICsyODYsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuXAogCXN0ZGN4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzIwLDEyICszMjAsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfc3ViX3JldHVyblxuXAogCXN1YmYJJTAsJTEsJTBcblwKIAlzdGRjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTM1MiwxMiArMzUyLDEyIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG5cCiAJc3RkY3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMzk0LDEyICszOTQsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfZGVjX3JldHVyblxuXAogCWFkZGljCSUwLCUwLC0xXG5cCiAJc3RkY3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC00MTksMTMgKzQxOSwxMyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmVcblwKIAlhZGRpYy4JJTAsJTAsLTFcblwKIAlibHQtCTJmXG5cCiAJc3RkY3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCkBAIC00NTEsMTQgKzQ1MSwxNCBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljX2FkZF91bmxlc3NcblwKIAljbXBkCTAsJTAsJTMgXG5cCiAJYmVxLQkyZiBcblwKIAlhZGQJJTAsJTIsJTAgXG4iCiAiCXN0ZGN4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIgXG4iCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogIglzdWJmCSUwLCUyLCUwIFxuXAogMjoiCiAJOiAiPSZyIiAodCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA1NmYyZjJlLi4zMDk2NGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC02NSw3ICs2NSw3IEBACiAJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopX3A7CVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJXAogCXByZWZpeAkJCQkJXAotIjE6IglQUENfTExBUlggIiUwLDAsJTNcbiIJCQlcCisiMToiCVBQQ19MTEFSWCglMCwwLCUzLDApICJcbiIJCVwKIAlzdHJpbmdpZnlfaW5fYyhvcCkgIiUwLCUwLCUyXG4iCQlcCiAJUFBDNDA1X0VSUjc3KDAsJTMpCQkJXAogCVBQQ19TVExDWCAiJTAsMCwlM1xuIgkJCVwKQEAgLTc4LDcgKzc4LDcgQEAKIAogREVGSU5FX0JJVE9QKHNldF9iaXRzLCBvciwgIiIsICIiKQogREVGSU5FX0JJVE9QKGNsZWFyX2JpdHMsIGFuZGMsICIiLCAiIikKLURFRklORV9CSVRPUChjbGVhcl9iaXRzX3VubG9jaywgYW5kYywgTFdTWU5DX09OX1NNUCwgIiIpCitERUZJTkVfQklUT1AoY2xlYXJfYml0c191bmxvY2ssIGFuZGMsIFBQQ19SRUxFQVNFX0JBUlJJRVIsICIiKQogREVGSU5FX0JJVE9QKGNoYW5nZV9iaXRzLCB4b3IsICIiLCAiIikKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKQEAgLTEwMywzMSArMTAzLDM1IEBACiAKIC8qIExpa2UgREVGSU5FX0JJVE9QKCksIHdpdGggY2hhbmdlcyB0byB0aGUgYXJndW1lbnRzIHRvICdvcCcgYW5kIHRoZSBvdXRwdXQKICAqIG9wZXJhbmRzLiAqLwotI2RlZmluZSBERUZJTkVfVEVTVE9QKGZuLCBvcCwgcHJlZml4LCBwb3N0Zml4KQlcCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZuKAkJXAotCQl1bnNpZ25lZCBsb25nIG1hc2ssCQlcCi0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKl9wKQlcCi17CQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwkJCVwKLQl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKilfcDsJXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQlcCi0JcHJlZml4CQkJCQlcCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlM1xuIgkJCVwKLQlzdHJpbmdpZnlfaW5fYyhvcCkgIiUxLCUwLCUyXG4iCQlcCi0JUFBDNDA1X0VSUjc3KDAsJTMpCQkJXAotCVBQQ19TVExDWCAiJTEsMCwlM1xuIgkJCVwKLQkiYm5lLSAxYlxuIgkJCQlcCi0JcG9zdGZpeAkJCQkJXAotCTogIj0mciIgKG9sZCksICI9JnIiICh0KQkJXAotCTogInIiIChtYXNrKSwgInIiIChwKQkJCVwKLQk6ICJjYyIsICJtZW1vcnkiKTsJCQlcCi0JcmV0dXJuIChvbGQgJiBtYXNrKTsJCQlcCisjZGVmaW5lIERFRklORV9URVNUT1AoZm4sIG9wLCBwcmVmaXgsIHBvc3RmaXgsIGVoKQlcCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZuKAkJCVwKKwkJdW5zaWduZWQgbG9uZyBtYXNrLAkJCVwKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCQlcCit7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIG9sZCwgdDsJCQkJXAorCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCXByZWZpeAkJCQkJCVwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTMsZWgpICJcbiIJCQlcCisJc3RyaW5naWZ5X2luX2Mob3ApICIlMSwlMCwlMlxuIgkJCVwKKwlQUEM0MDVfRVJSNzcoMCwlMykJCQkJXAorCVBQQ19TVExDWCAiJTEsMCwlM1xuIgkJCQlcCisJImJuZS0gMWJcbiIJCQkJCVwKKwlwb3N0Zml4CQkJCQkJXAorCTogIj0mciIgKG9sZCksICI9JnIiICh0KQkJCVwKKwk6ICJyIiAobWFzayksICJyIiAocCkJCQkJXAorCTogImNjIiwgIm1lbW9yeSIpOwkJCQlcCisJcmV0dXJuIChvbGQgJiBtYXNrKTsJCQkJXAogfQogCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzLCBvciwgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0c19sb2NrLCBvciwgIiIsIElTWU5DX09OX1NNUCkKLURFRklORV9URVNUT1AodGVzdF9hbmRfY2xlYXJfYml0cywgYW5kYywgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jaGFuZ2VfYml0cywgeG9yLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzLCBvciwgUFBDX1JFTEVBU0VfQkFSUklFUiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAwKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0c19sb2NrLCBvciwgIiIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMSkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfY2xlYXJfYml0cywgYW5kYywgUFBDX1JFTEVBU0VfQkFSUklFUiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAwKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jaGFuZ2VfYml0cywgeG9yLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsCiAJCQkJICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCkBAIC0xNTgsNyArMTYyLDcgQEAKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NsZWFyX2JpdF91bmxvY2soaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKExXU1lOQ19PTl9TTVAgIiIgOjo6ICJtZW1vcnkiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyhQUENfUkVMRUFTRV9CQVJSSUVSICIiIDo6OiAibWVtb3J5Iik7CiAJX19jbGVhcl9iaXQobnIsIGFkZHIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDgwZjMxNWUuLmFiYjgzM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0zODEsOSArMzgxLDkgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KLSNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVIzCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAorI2RlZmluZSBDUFVfRlRSU19QT1dFUjMJKENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0lBQlIgfCBDUFVfRlRSX1BQQ19MRSkKLSNkZWZpbmUgQ1BVX0ZUUlNfUlM2NAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKKyNkZWZpbmUgQ1BVX0ZUUlNfUlM2NAkoQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSUFCUiB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCkKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggZmExOWYzZi4uOGJkYzZhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC03MywxMCArNzMsOSBAQAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QgY3B1dGltZV90b19zY2FsZWQoY29uc3QgY3B1dGltZV90IGN0KQogewogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TUFVSUikgJiYKLQkgICAgcGVyX2NwdShjcHV0aW1lX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCXJldHVybiBjdCAqCi0JCQlwZXJfY3B1KGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkvCi0JCQlwZXJfY3B1KGNwdXRpbWVfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkgICAgX19nZXRfY3B1X3ZhcihjcHV0aW1lX2xhc3RfZGVsdGEpKQorCQlyZXR1cm4gY3QgKiBfX2dldF9jcHVfdmFyKGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEpIC8KKwkJCSAgICBfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSk7CiAJcmV0dXJuIGN0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCmluZGV4IGNiZDRkZmEuLjk2YTdkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkucHVzaHNlY3Rpb24gc2VjdCwiYSI7CQkJCVwKIAkuYWxpZ24gMjsJCQkJCVwKIGxhYmVsIyMzOgkJCQkJICAgICAgIAlcCi0JLmxvbmcgbGFiZWwjIzFiLWxhYmVsIyMzYjsJCQlcCisJRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjMWItbGFiZWwjIzNiOwkJXAogCS5wb3BzZWN0aW9uOwogCiAjZW5kaWYgLyogX19BU01fUE9XRVJQQ19GRUFUVVJFX0ZJWFVQU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCmluZGV4IDk2OTZjYzMuLjdjNTg5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAogICBfX2FzbV9fIF9fdm9sYXRpbGUgKCBcCi0JTFdTWU5DX09OX1NNUCBcCisJUFBDX1JFTEVBU0VfQkFSUklFUiBcCiAiMToJbHdhcngJJTAsMCwlMlxuIiBcCiAJaW5zbiBcCiAJUFBDNDA1X0VSUjc3KDAsICUyKSBcCkBAIC05MCwxNCArOTAsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICBMV1NZTkNfT05fU01QCisgICAgICAgIFBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOiAgICAgbHdhcnggICAlMCwwLCUyICAgICAgICAgIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pY1xuXAogICAgICAgICBjbXB3ICAgIDAsJTAsJTNcblwKICAgICAgICAgYm5lLSAgICAzZlxuIgogICAgICAgICBQUEM0MDVfRVJSNzcoMCwlMikKICIyOiAgICAgc3R3Y3guICAlNCwwLCUyXG5cCiAgICAgICAgIGJuZS0gICAgMWJcbiIKLSAgICAgICAgSVNZTkNfT05fU01QCisgICAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIKICIzOgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cCiA0OglsaQklMCwlNVxuXAogCWIJM2JcblwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGZiM2MwNWEuLjMxNDdhMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSArMSwyOSBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0hBUkRJUlFfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IHRpbWVyX2lycXM7CisJdW5zaWduZWQgaW50IHBtdV9pcnFzOworCXVuc2lnbmVkIGludCBtY2VfZXhjZXB0aW9uczsKKwl1bnNpZ25lZCBpbnQgc3B1cmlvdXNfaXJxczsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKK0RFQ0xBUkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7CisKKyNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCisKKyNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuX19zb2Z0aXJxX3BlbmRpbmcKKworc3RhdGljIGlubGluZSB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcHJpbnRrKEtFUk5fQ1JJVCAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKK30KKworZXh0ZXJuIHU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsKKyNkZWZpbmUgYXJjaF9pcnFfc3RhdF9jcHUJYXJjaF9pcnFfc3RhdF9jcHUKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKaW5kZXggODRiNDU3YS4uYzI0MTBhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUyCQkjIGxvY2FsX2FkZF9yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTIsMCkgIgkJCSMgbG9jYWxfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogCVBQQ19TVExDWAkiJTAsMCwlMiBcblwKQEAgLTQzLDcgKzQzLDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUyCQkjIGxvY2FsX3N1Yl9yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTIsMCkgIgkJCSMgbG9jYWxfc3ViX3JldHVyblxuXAogCXN1YmYJJTAsJTEsJTBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKIAlQUENfU1RMQ1gJIiUwLDAsJTIgXG5cCkBAIC02MCw3ICs2MCw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9pbmNfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAJUFBDX1NUTENYCSIlMCwwLCUxIFxuXApAQCAtODcsNyArODcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfZGVjX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9kZWNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKIAlQUENfU1RMQ1gJIiUwLDAsJTFcblwKQEAgLTExNyw3ICsxMTcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2FkZF91bmxlc3NcblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfYWRkX3VubGVzc1xuXAogCWNtcHcJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXAogCWFkZAklMCwlMiwlMCBcbiIKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfZGVjX2lmX3Bvc2l0aXZlXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2RlY19pZl9wb3NpdGl2ZVxuXAogCWNtcHdpCSUwLDFcblwKIAlhZGRpCSUwLCUwLC0xXG5cCiAJYmx0LQkyZlxuIgpAQCAtMTcyLDI5ICsxNzIsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCSgobCktPmEuY291bnRlcis9KGkpKQogI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPmEuY291bnRlci09KGkpKQogCi0vKiBOZWVkIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBmb3IgdGhlIGNwdSBsb2NhbCBjb3VudGVycyBvdGhlcndpc2Ugd2UgY291bGQKLSAgIHN0aWxsIGFjY2VzcyBhIHZhcmlhYmxlIG9mIGEgcHJldmlvdXMgQ1BVIGluIGEgbm9uIGF0b21pYyB3YXkuICovCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkJIAlcCi0JKHsgbG9jYWxfdCByZXNfXzsJCVwKLQkgICBwcmVlbXB0X2Rpc2FibGUoKTsgCQlcCi0JICAgcmVzX18gPSAobCk7CQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7CQlcCi0JICAgcmVzX187IH0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCi0JKHsgcHJlZW1wdF9kaXNhYmxlKCk7CQlcCi0JICAgbDsJCQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7IH0pCQlcCi0KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKLQotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCWNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCi0KICNlbmRpZiAvKiBfQVJDSF9QT1dFUlBDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1MTIxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTMwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBNUEM1MTIxIFByb3RvdHlwZXMgYW5kIGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BPV0VSUENfTVBDNTEyMV9IX18KKyNkZWZpbmUgX19BU01fUE9XRVJQQ19NUEM1MTIxX0hfXworCisvKiBNUEM1MTJ4IFJlc2V0IG1vZHVsZSByZWdpc3RlcnMgKi8KK3N0cnVjdCBtcGM1MTJ4X3Jlc2V0X21vZHVsZSB7CisJdTMyCXJjd2xyOwkvKiBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgTG93IFJlZ2lzdGVyICovCisJdTMyCXJjd2hyOwkvKiBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgSGlnaCBSZWdpc3RlciAqLworCXUzMglyZXNlcnZlZDE7CisJdTMyCXJlc2VydmVkMjsKKwl1MzIJcnNyOwkvKiBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIJcm1yOwkvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovCisJdTMyCXJwcjsJLyogUmVzZXQgUHJvdGVjdGlvbiBSZWdpc3RlciAqLworCXUzMglyY3I7CS8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIJcmNlcjsJLyogUmVzZXQgQ29udHJvbCBFbmFibGUgUmVnaXN0ZXIgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCmluZGV4IGZiODQxMjAuLjQyNTYxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCkBAIC0yNSw3ICsyNSwxMSBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAvKiBNYXggbnVtYmVyIG9mIFBTQ3MgKi8KKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTUFYTlVNICAgICAxMgorI2Vsc2UKICNkZWZpbmUgTVBDNTJ4eF9QU0NfTUFYTlVNCTYKKyNlbmRpZgogCiAvKiBQcm9ncmFtbWFibGUgU2VyaWFsIENvbnRyb2xsZXIgKFBTQykgc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KICNkZWZpbmUgTVBDNTJ4eF9QU0NfU1JfVU5FWF9SWAkweDAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCmluZGV4IGEwMDI2ODIuLjYxOTEzZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaApAQCAtMjg5LDcgKzI4OSw3IEBACiAjaWZkZWYgQ09ORklHX01QSUNfVTNfSFRfSVJRUwogCS8qIFRoZSBmaXh1cCB0YWJsZSAqLwogCXN0cnVjdCBtcGljX2lycV9maXh1cAkqZml4dXBzOwotCXNwaW5sb2NrX3QJCWZpeHVwX2xvY2s7CisJcmF3X3NwaW5sb2NrX3QJZml4dXBfbG9jazsKICNlbmRpZgogCiAJLyogUmVnaXN0ZXIgYWNjZXNzIG1ldGhvZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCBkYWJjMDFjLi41Mzk5ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtMTUsNyArMTUsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTMsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6IgogCTogIj0mciIgKHQpCkBAIC0zNSw3ICszNSw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC00OCw3ICs0OCw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgbXV0ZXggdW5sb2NrXG5cCiAJYWRkaWMJJTAsJTAsMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAwOTRmNjNkLi45NjVkNDU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtMSwyMiArMSBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfUEFSQU1fSAotI2RlZmluZSBfQVNNX1BPV0VSUENfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBIWgkJQ09ORklHX0haCS8qIGludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSNkZWZpbmUgVVNFUl9IWgkJMTAwCQkvKiBmb3IgdXNlciBpbnRlcmZhY2VzIGluICJ0aWNrcyIgKi8KLSNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGZyZXF1ZW5jeSBhdCB3aGljaCB0aW1lcygpIGNvdW50cyAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2lmbmRlZiBIWgotI2RlZmluZSBIWiAxMDAKLSNlbmRpZgotCi0jZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgotCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwotCi0jZW5kaWYJLyogX0FTTV9QT1dFUlBDX1BBUkFNX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjEyMDdlNTQuLjg5ZjE1ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjA5LDcgKzIwOSw3IEBACiAgKiBjb3JyZXNwb25kaW5nIEhQVEUgaW50byB0aGUgaGFzaCB0YWJsZSBhaGVhZCBvZiB0aW1lLCBpbnN0ZWFkIG9mCiAgKiB3YWl0aW5nIGZvciB0aGUgaW5ldml0YWJsZSBleHRyYSBoYXNoLXRhYmxlIG1pc3MgZXhjZXB0aW9uLgogICovCi1leHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKIAogZXh0ZXJuIGludCBndXBfaHVnZXBkKGh1Z2VwZF90ICpodWdlcGQsIHVuc2lnbmVkIHBkc2hpZnQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCB3cml0ZSwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKaW5kZXggODc3YzM1YS4uMDBlZWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaApAQCAtMzc4LDcgKzM3OCw3IEBACiAgKiBUaG9zZSBhcmUgZXhwb3J0ZWQgYnkgcG1hYyBmZWF0dXJlIGZvciBpbnRlcm5hbCB1c2UgYnkgYXJjaCBjb2RlCiAgKiBvbmx5IGxpa2UgdGhlIHBsYXRmb3JtIGZ1bmN0aW9uIGNhbGxiYWNrcywgZG8gbm90IHVzZSBkaXJlY3RseSBpbiBkcml2ZXJzCiAgKi8KLWV4dGVybiBzcGlubG9ja190IGZlYXR1cmVfbG9jazsKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBmZWF0dXJlX2xvY2s7CiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICp1bmlub3J0aF9ub2RlOwogZXh0ZXJuIHUzMiBfX2lvbWVtICp1bmlub3J0aF9iYXNlOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaAppbmRleCBlZjlhYTg0Li5hZWE3MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKQEAgLTIyLDggKzIyLDEwIEBACiAjZGVmaW5lIFBQQ19JTlNUX0RDQlpMCQkJMHg3YzIwMDdlYwogI2RlZmluZSBQUENfSU5TVF9JU0VMCQkJMHg3YzAwMDAxZQogI2RlZmluZSBQUENfSU5TVF9JU0VMX01BU0sJCTB4ZmMwMDAwM2UKKyNkZWZpbmUgUFBDX0lOU1RfTERBUlgJCQkweDdjMDAwMGE4CiAjZGVmaW5lIFBQQ19JTlNUX0xTV0kJCQkweDdjMDAwNGFhCiAjZGVmaW5lIFBQQ19JTlNUX0xTV1gJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX0xXQVJYCQkJMHg3YzAwMDAyOQogI2RlZmluZSBQUENfSU5TVF9MV1NZTkMJCQkweDdjMjAwNGFjCiAjZGVmaW5lIFBQQ19JTlNUX0xYVkQyWAkJCTB4N2MwMDA2OTgKICNkZWZpbmUgUFBDX0lOU1RfTUNSWFIJCQkweDdjMDAwNDAwCkBAIC01NSwxNSArNTcsMzEgQEAKICNkZWZpbmUgX19QUENfUkEoYSkJKCgoYSkgJiAweDFmKSA8PCAxNikKICNkZWZpbmUgX19QUENfUkIoYikJKCgoYikgJiAweDFmKSA8PCAxMSkKICNkZWZpbmUgX19QUENfUlMocykJKCgocykgJiAweDFmKSA8PCAyMSkKKyNkZWZpbmUgX19QUENfUlQocykJX19QUENfUlMocykKICNkZWZpbmUgX19QUENfWFMocykJKCgoKHMpICYgMHgxZikgPDwgMjEpIHwgKCgocykgJiAweDIwKSA+PiA1KSkKICNkZWZpbmUgX19QUENfVF9UTEIodCkJKCgodCkgJiAweDMpIDw8IDIxKQogI2RlZmluZSBfX1BQQ19XQyh3KQkoKCh3KSAmIDB4MykgPDwgMjEpCisvKgorICogT25seSB1c2UgdGhlIGxhcnggaGludCBiaXQgb24gNjRiaXQgQ1BVcy4gT25jZSB3ZSB2ZXJpZnkgaXQgZG9lc24ndCBoYXZlCisgKiBhbnkgc2lkZSBlZmZlY3RzIG9uIGFsbCAzMmJpdCBwcm9jZXNzb3JzLCB3ZSBjYW4gZG8gdGhpcyBhbGwgdGhlIHRpbWUuCisgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKKyNkZWZpbmUgX19QUENfRUgoZWgpCSgoKGVoKSAmIDB4MSkgPDwgMCkKKyNlbHNlCisjZGVmaW5lIF9fUFBDX0VIKGVoKQkwCisjZW5kaWYKIAogLyogRGVhbCB3aXRoIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgYXJlbid0IGF3YXJlIG9mICovCiAjZGVmaW5lCVBQQ19EQ0JBTChhLCBiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRENCQUwgfCBcCiAJCQkJCV9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCiAjZGVmaW5lCVBQQ19EQ0JaTChhLCBiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRENCWkwgfCBcCiAJCQkJCV9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19MREFSWCh0LCBhLCBiLCBlaCkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTERBUlggfCBcCisJCQkJCV9fUFBDX1JUKHQpIHwgX19QUENfUkEoYSkgfCBcCisJCQkJCV9fUFBDX1JCKGIpIHwgX19QUENfRUgoZWgpKQorI2RlZmluZSBQUENfTFdBUlgodCwgYSwgYiwgZWgpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0xXQVJYIHwgXAorCQkJCQlfX1BQQ19SVCh0KSB8IF9fUFBDX1JBKGEpIHwgXAorCQkJCQlfX1BQQ19SQihiKSB8IF9fUFBDX0VIKGVoKSkKICNkZWZpbmUgUFBDX01TR1NORChiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTVNHU05EIHwgXAogCQkJCQlfX1BQQ19SQihiKSkKICNkZWZpbmUgUFBDX1JGQ0kJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGQ0kpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaAppbmRleCAyODI4ZjlkLi40MmZkZmYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKQEAgLTEzNyw2ICsxMzcsMTEgQEAKIHZvaWQgZWVoX3N5c2ZzX2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdm9pZCBlZWhfc3lzZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZWVoX3BjaV9uYW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSAKK3sgCisJcmV0dXJuIHBkZXYgPyBwY2lfbmFtZShwZGV2KSA6ICI8bnVsbD4iOworfSAKKwogI2VuZGlmIC8qIENPTkZJR19FRUggKi8KIAogI2Vsc2UgLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDllZWQyOWUuLjIyMWJhNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE2MSw5ICsxNjEsNDEgQEAKICNpZmRlZiBDT05GSUdfUFBDMzIKIAl2b2lkCQkqcGdkaXI7CQkvKiByb290IG9mIHBhZ2UtdGFibGUgdHJlZSAqLwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkIChDT05GSUdfQk9PS0UpCi0JdW5zaWduZWQgbG9uZwlkYmNyMDsJCS8qIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCS8qCisJICogVGhlIGZvbGxvd2luZyBoZWxwIHRvIG1hbmFnZSB0aGUgdXNlIG9mIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzCisJICogb20gdGhlIEJvb2tFIHBsYXRmb3Jtcy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCWRiY3IwOwogCXVuc2lnbmVkIGxvbmcJZGJjcjE7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJdW5zaWduZWQgbG9uZwlkYmNyMjsKKyNlbmRpZgorCS8qCisJICogVGhlIHN0b3JlZCB2YWx1ZSBvZiB0aGUgREJTUiByZWdpc3RlciB3aWxsIGJlIHRoZSB2YWx1ZSBhdCB0aGUKKwkgKiBsYXN0IGRlYnVnIGludGVycnVwdC4gVGhpcyByZWdpc3RlciBjYW4gb25seSBiZSByZWFkIGZyb20gdGhlCisJICogdXNlciAod2lsbCBuZXZlciBiZSB3cml0dGVuIHRvKSBhbmQgaGFzIHZhbHVlIHdoaWxlIGhlbHBpbmcgdG8KKwkgKiBkZXNjcmliZSB0aGUgcmVhc29uIGZvciB0aGUgbGFzdCBkZWJ1ZyB0cmFwLiAgVG9yZXoKKwkgKi8KKwl1bnNpZ25lZCBsb25nCWRic3I7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHdpbGwgY29udGFpbiBhZGRyZXNzZXMgdXNlZCBieSBkZWJ1ZyBhcHBsaWNhdGlvbnMKKwkgKiB0byBoZWxwIHRyYWNlIGFuZCB0cmFwIG9uIHBhcnRpY3VsYXIgYWRkcmVzcyBsb2NhdGlvbnMuCisJICogVGhlIGJpdHMgaW4gdGhlIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzIGFib3ZlIGhlbHAgZGVmaW5lIHdoaWNoCisJICogb2YgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgd2lsbCBjb250YWluIHZhbGlkIGRhdGEgYW5kL29yIGFkZHJlc3Nlcy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCWlhYzE7CisJdW5zaWduZWQgbG9uZwlpYWMyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJdW5zaWduZWQgbG9uZwlpYWMzOworCXVuc2lnbmVkIGxvbmcJaWFjNDsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcJZGFjMTsKKwl1bnNpZ25lZCBsb25nCWRhYzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwl1bnNpZ25lZCBsb25nCWR2YzE7CisJdW5zaWduZWQgbG9uZwlkdmMyOworI2VuZGlmCiAjZW5kaWYKIAkvKiBGUCBhbmQgVlNYIDAtMzEgcmVnaXN0ZXIgc2V0ICovCiAJZG91YmxlCQlmcHJbMzJdW1RTX0ZQUldJRFRIXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCmluZGV4IDJhYjljYmQuLmRkZDQwOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaApAQCAtMjMsMjEgKzIzLDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQJMQotI2RlZmluZSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUCTEKLQotI2RlZmluZSBvZl9jb21wYXRfY21wKHMxLCBzMiwgbCkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9wcm9wX2NtcChzMSwgczIpCQlzdHJjbXAoKHMxKSwgKHMyKSkKLSNkZWZpbmUgb2Zfbm9kZV9jbXAoczEsIHMyKQkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQotCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47Ci0KICNkZWZpbmUgSEFWRV9BUkNIX0RFVlRSRUVfRklYVVBTCiAKLS8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLwotZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAvKgogICogUENJIDwtPiBPRiBtYXRjaGluZyBmdW5jdGlvbnMKQEAgLTUyLDExICszOSw2IEBACiBleHRlcm4gdm9pZCBwY2lfY3JlYXRlX09GX2J1c19tYXAodm9pZCk7CiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcmVxdWVzdF9PRl9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsCi0JCQkJaW50IGluZGV4LCBjb25zdCBjaGFyKiBuYW1lX3Bvc3RmaXgpOwotZXh0ZXJuIGludCByZWxlYXNlX09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgaW50IGluZGV4KTsKLQotCiAvKgogICogT0YgYWRkcmVzcyByZXRyZWl2YWwgJiB0cmFuc2xhdGlvbgogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggY2JkNzU5ZS4uYjQ1MTA4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjQsNiArMjQsMTIgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgcHRfcmVncyB7CkBAIC0yOTQsNCArMzAwLDc1IEBACiAKICNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTB4MTAwCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KIAorI2RlZmluZSBQUENfUFRSQUNFX0dFVEhXREJHSU5GTwkweDg5CisjZGVmaW5lIFBQQ19QVFJBQ0VfU0VUSFdERUJVRwkweDg4CisjZGVmaW5lIFBQQ19QVFJBQ0VfREVMSFdERUJVRwkweDg3CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwcGNfZGVidWdfaW5mbyB7CisJdWludDMyX3QgdmVyc2lvbjsJCS8qIE9ubHkgdmVyc2lvbiAxIGV4aXN0cyB0byBkYXRlICovCisJdWludDMyX3QgbnVtX2luc3RydWN0aW9uX2JwczsKKwl1aW50MzJfdCBudW1fZGF0YV9icHM7CisJdWludDMyX3QgbnVtX2NvbmRpdGlvbl9yZWdzOworCXVpbnQzMl90IGRhdGFfYnBfYWxpZ25tZW50OworCXVpbnQzMl90IHNpemVvZl9jb25kaXRpb247CS8qIHNpemUgb2YgdGhlIERWQyByZWdpc3RlciAqLworCXVpbnQ2NF90IGZlYXR1cmVzOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogZmVhdHVyZXMgd2lsbCBoYXZlIGJpdHMgaW5kaWNhdGlvbiB3aGV0aGVyIHRoZXJlIGlzIHN1cHBvcnQgZm9yOgorICovCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfUkFOR0UJCTB4MDAwMDAwMDAwMDAwMDAwMQorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX01BU0sJCTB4MDAwMDAwMDAwMDAwMDAwMgorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX1JBTkdFCQkweDAwMDAwMDAwMDAwMDAwMDQKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9NQVNLCQkweDAwMDAwMDAwMDAwMDAwMDgKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHBwY19od19icmVha3BvaW50IHsKKwl1aW50MzJfdCB2ZXJzaW9uOwkJLyogY3VycmVudGx5LCB2ZXJzaW9uIG11c3QgYmUgMSAqLworCXVpbnQzMl90IHRyaWdnZXJfdHlwZTsJCS8qIG9ubHkgc29tZSBjb21iaW5hdGlvbnMgYWxsb3dlZCAqLworCXVpbnQzMl90IGFkZHJfbW9kZTsJCS8qIGFkZHJlc3MgbWF0Y2ggbW9kZSAqLworCXVpbnQzMl90IGNvbmRpdGlvbl9tb2RlOwkvKiBicmVhay93YXRjaHBvaW50IGNvbmRpdGlvbiBmbGFncyAqLworCXVpbnQ2NF90IGFkZHI7CQkJLyogYnJlYWsvd2F0Y2hwb2ludCBhZGRyZXNzICovCisJdWludDY0X3QgYWRkcjI7CQkJLyogcmFuZ2UgZW5kIG9yIG1hc2sgKi8KKwl1aW50NjRfdCBjb25kaXRpb25fdmFsdWU7CS8qIGNvbnRlbnRzIG9mIHRoZSBEVkMgcmVnaXN0ZXIgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRyaWdnZXIgVHlwZQorICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURQkweDAwMDAwMDAxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRAkweDAwMDAwMDAyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUJMHgwMDAwMDAwNAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXCVwKKwkoUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEIHwgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKworLyoKKyAqIEFkZHJlc3MgTW9kZQorICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9JTkNMVVNJVkUJMHgwMDAwMDAwMQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRQkweDAwMDAwMDAyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSwkJMHgwMDAwMDAwMworCisvKgorICogQ29uZGl0aW9uIE1vZGUKKyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTU9ERQkweDAwMDAwMDAzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORAkweDAwMDAwMDAxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9FWEFDVAlQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5ECisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9PUgkweDAwMDAwMDAyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkRfT1IJMHgwMDAwMDAwMworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMCTB4MDBmZjAwMDAKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX1NISUZUCTE2CisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRShuKQlcCisJKDE8PCgobikrUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX1NISUZUKSkKKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDNiZjc4MzUuLjg4MDhkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTI0OCw2ICsyNDgsOCBAQAogI2RlZmluZSBEQlNSX1JFVAkweDAwMDA4MDAwCS8qIFJldHVybiBEZWJ1ZyBFdmVudCAqLwogI2RlZmluZSBEQlNSX0NJUlBUCTB4MDAwMDAwNDAJLyogQ3JpdGljYWwgSW50ZXJydXB0IFRha2VuIEV2ZW50ICovCiAjZGVmaW5lIERCU1JfQ1JFVAkweDAwMDAwMDIwCS8qIENyaXRpY2FsIFJldHVybiBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzEyQVRTCTB4MDAwMDAwMDIJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDEvMiBUb2dnbGUgKi8KKyNkZWZpbmUgREJTUl9JQUMzNEFUUwkweDAwMDAwMDAxCS8qIEluc3RyIEFkZHJlc3MgQ29tcGFyZSAzLzQgVG9nZ2xlICovCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfNDB4CiAjZGVmaW5lIERCU1JfSUMJCTB4ODAwMDAwMDAJLyogSW5zdHJ1Y3Rpb24gQ29tcGxldGlvbiAqLwpAQCAtMzEzLDYgKzMxNSwzOCBAQAogI2RlZmluZSBEQkNSMF9JQTEyVAkweDAwMDA4MDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIFRvZ2dsZSAqLwogI2RlZmluZSBEQkNSMF9JQTM0VAkweDAwMDA0MDAwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIFRvZ2dsZSAqLwogI2RlZmluZSBEQkNSMF9GVAkweDAwMDAwMDAxCS8qIEZyZWV6ZSBUaW1lcnMgb24gZGVidWcgZXZlbnQgKi8KKworI2RlZmluZSBkYmNyX2lhY19yYW5nZSh0YXNrKQkoKHRhc2spLT50aHJlYWQuZGJjcjApCisjZGVmaW5lIERCQ1JfSUFDMTJJCURCQ1IwX0lBMTIJCQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMlgJKERCQ1IwX0lBMTIgfCBEQkNSMF9JQTEyWCkJLyogUmFuZ2UgRXhjbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMTJNT0RFCShEQkNSMF9JQTEyIHwgREJDUjBfSUExMlgpCS8qIElBQyAxLTIgTW9kZSBCaXRzICovCisjZGVmaW5lIERCQ1JfSUFDMzRJCURCQ1IwX0lBMzQJCQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNFgJKERCQ1IwX0lBMzQgfCBEQkNSMF9JQTM0WCkJLyogUmFuZ2UgRXhjbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMzRNT0RFCShEQkNSMF9JQTM0IHwgREJDUjBfSUEzNFgpCS8qIElBQyAzLTQgTW9kZSBCaXRzICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBEQkNSMS4gKi8KKyNkZWZpbmUgREJDUjFfREFDMVIJMHg4MDAwMDAwMAkvKiBEQUMxIFJlYWQgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjFfREFDMlIJMHg0MDAwMDAwMAkvKiBEQUMyIFJlYWQgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjFfREFDMVcJMHgyMDAwMDAwMAkvKiBEQUMxIFdyaXRlIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1IxX0RBQzJXCTB4MTAwMDAwMDAJLyogREFDMiBXcml0ZSBEZWJ1ZyBFdmVudCAqLworCisjZGVmaW5lIGRiY3JfZGFjKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMSkKKyNkZWZpbmUgREJDUl9EQUMxUglEQkNSMV9EQUMxUgorI2RlZmluZSBEQkNSX0RBQzFXCURCQ1IxX0RBQzFXCisjZGVmaW5lIERCQ1JfREFDMlIJREJDUjFfREFDMlIKKyNkZWZpbmUgREJDUl9EQUMyVwlEQkNSMV9EQUMyVworCisvKgorICogQXJlIHRoZXJlIGFueSBhY3RpdmUgRGVidWcgRXZlbnRzIHJlcHJlc2VudGVkIGluIHRoZQorICogRGVidWcgQ29udHJvbCBSZWdpc3RlcnM/CisgKi8KKyNkZWZpbmUgREJDUjBfQUNUSVZFX0VWRU5UUwkoREJDUjBfSUNNUCB8IERCQ1IwX0lBQzEgfCBEQkNSMF9JQUMyIHwgXAorCQkJCSBEQkNSMF9JQUMzIHwgREJDUjBfSUFDNCkKKyNkZWZpbmUgREJDUjFfQUNUSVZFX0VWRU5UUwkoREJDUjFfREFDMVIgfCBEQkNSMV9EQUMyUiB8IFwKKwkJCQkgREJDUjFfREFDMVcgfCBEQkNSMV9EQUMyVykKKyNkZWZpbmUgREJDUl9BQ1RJVkVfRVZFTlRTKGRiY3IwLCBkYmNyMSkgICgoKGRiY3IwKSAmIERCQ1IwX0FDVElWRV9FVkVOVFMpIHx8IFwKKwkJCQkJICAgKChkYmNyMSkgJiBEQkNSMV9BQ1RJVkVfRVZFTlRTKSkKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCiAjZGVmaW5lIERCQ1IwX0VETQkweDgwMDAwMDAwCS8qIEV4dGVybmFsIERlYnVnIE1vZGUgKi8KICNkZWZpbmUgREJDUjBfSURNCTB4NDAwMDAwMDAJLyogSW50ZXJuYWwgRGVidWcgTW9kZSAqLwpAQCAtMzQyLDE5ICszNzYsNzkgQEAKICNkZWZpbmUgREJDUjBfQ1JFVAkweDAwMDAwMDIwCS8qIENyaXRpY2FsIFJldHVybiBEZWJ1ZyBFdmVudCAqLwogI2RlZmluZSBEQkNSMF9GVAkweDAwMDAwMDAxCS8qIEZyZWV6ZSBUaW1lcnMgb24gZGVidWcgZXZlbnQgKi8KIAorI2RlZmluZSBkYmNyX2RhYyh0YXNrKQkoKHRhc2spLT50aHJlYWQuZGJjcjApCisjZGVmaW5lIERCQ1JfREFDMVIJREJDUjBfREFDMVIKKyNkZWZpbmUgREJDUl9EQUMxVwlEQkNSMF9EQUMxVworI2RlZmluZSBEQkNSX0RBQzJSCURCQ1IwX0RBQzJSCisjZGVmaW5lIERCQ1JfREFDMlcJREJDUjBfREFDMlcKKwogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IxLiAqLworI2RlZmluZSBEQkNSMV9JQUMxVVMJMHhDMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjFfSUFDMUVSCTB4MzAwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMSBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMV9JQUMxRVJfMDEJMHgxMDAwMDAwMAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBEQkNSMV9JQUMxRVJfMTAJMHgyMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIEVmZi9SZWFsIE1TUltJU109MCAqLworI2RlZmluZSBEQkNSMV9JQUMxRVJfMTEJMHgzMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIEVmZi9SZWFsIE1TUltJU109MSAqLworI2RlZmluZSBEQkNSMV9JQUMyVVMJMHgwQzAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjFfSUFDMkVSCTB4MDMwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMiBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMV9JQUMyRVJfMDEJMHgwMTAwMDAwMAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBEQkNSMV9JQUMyRVJfMTAJMHgwMjAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIEVmZi9SZWFsIE1TUltJU109MCAqLworI2RlZmluZSBEQkNSMV9JQUMyRVJfMTEJMHgwMzAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIEVmZi9SZWFsIE1TUltJU109MSAqLwogI2RlZmluZSBEQkNSMV9JQUMxMk0JMHgwMDgwMDAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBlbmFibGUgKi8KICNkZWZpbmUgREJDUjFfSUFDMTJNWAkweDAwQzAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVYY2x1c2l2ZSAqLwogI2RlZmluZSBEQkNSMV9JQUMxMkFUCTB4MDAwMTAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgVG9nZ2xlICovCisjZGVmaW5lIERCQ1IxX0lBQzNVUwkweDAwMDBDMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMzRVIJMHgwMDAwMzAwMAkvKiBJbnN0ciBBZGRyIENtcCAzIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUl8wMQkweDAwMDAxMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUl8xMAkweDAwMDAyMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUl8xMQkweDAwMDAzMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgRWZmL1JlYWwgTVNSW0lTXT0xICovCisjZGVmaW5lIERCQ1IxX0lBQzRVUwkweDAwMDAwQzAwCS8qIEluc3RyIEFkZHIgQ21wIDQgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUM0RVIJMHgwMDAwMDMwMAkvKiBJbnN0ciBBZGRyIENtcCA0IEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUl8wMQkweDAwMDAwMTAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUl8xMAkweDAwMDAwMjAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUl8xMQkweDAwMDAwMzAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgTVNSW0lTXT0xICovCiAjZGVmaW5lIERCQ1IxX0lBQzM0TQkweDAwMDAwMDgwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIGVuYWJsZSAqLwogI2RlZmluZSBEQkNSMV9JQUMzNE1YCTB4MDAwMDAwQzAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgZVhjbHVzaXZlICovCiAjZGVmaW5lIERCQ1IxX0lBQzM0QVQJMHgwMDAwMDAwMQkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBUb2dnbGUgKi8KIAorI2RlZmluZSBkYmNyX2lhY19yYW5nZSh0YXNrKQkoKHRhc2spLT50aHJlYWQuZGJjcjEpCisjZGVmaW5lIERCQ1JfSUFDMTJJCURCQ1IxX0lBQzEyTQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMlgJREJDUjFfSUFDMTJNWAkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMk1PREUJREJDUjFfSUFDMTJNWAkvKiBJQUMgMS0yIE1vZGUgQml0cyAqLworI2RlZmluZSBEQkNSX0lBQzM0SQlEQkNSMV9JQUMzNE0JLyogUmFuZ2UgSW5jbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMzRYCURCQ1IxX0lBQzM0TVgJLyogUmFuZ2UgRXhjbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMzRNT0RFCURCQ1IxX0lBQzM0TVgJLyogSUFDIDMtNCBNb2RlIEJpdHMgKi8KKwogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IyLiAqLworI2RlZmluZSBEQkNSMl9EQUMxVVMJMHhDMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDEgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMl9EQUMxRVIJMHgzMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDEgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjJfREFDMlVTCTB4MDAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAyIFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjJfREFDMkVSCTB4MDAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAyIEVmZi9SZWFsICovCiAjZGVmaW5lIERCQ1IyX0RBQzEyTQkweDAwODAwMDAwCS8qIERBQyAxLTIgcmFuZ2UgZW5hYmxlICovCisjZGVmaW5lIERCQ1IyX0RBQzEyTU0JMHgwMDQwMDAwMAkvKiBEQUMgMS0yIE1hc2sgbW9kZSovCiAjZGVmaW5lIERCQ1IyX0RBQzEyTVgJMHgwMEMwMDAwMAkvKiBEQUMgMS0yIHJhbmdlIGVYY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSMl9EQUMxMk1PREUJMHgwMEMwMDAwMAkvKiBEQUMgMS0yIE1vZGUgQml0cyAqLwogI2RlZmluZSBEQkNSMl9EQUMxMkEJMHgwMDIwMDAwMAkvKiBEQUMgMS0yIEFzeW5jaHJvbm91cyAqLwotI2VuZGlmCisjZGVmaW5lIERCQ1IyX0RWQzFNCTB4MDAwQzAwMDAJLyogRGF0YSBWYWx1ZSBDb21wIDEgTW9kZSAqLworI2RlZmluZSBEQkNSMl9EVkMxTV9TSElGVAkxOAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgREJDUjJfRFZDMU0gKi8KKyNkZWZpbmUgREJDUjJfRFZDMk0JMHgwMDAzMDAwMAkvKiBEYXRhIFZhbHVlIENvbXAgMiBNb2RlICovCisjZGVmaW5lIERCQ1IyX0RWQzJNX1NISUZUCTE2CS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMyTSAqLworI2RlZmluZSBEQkNSMl9EVkMxQkUJMHgwMDAwMEYwMAkvKiBEYXRhIFZhbHVlIENvbXAgMSBCeXRlICovCisjZGVmaW5lIERCQ1IyX0RWQzFCRV9TSElGVAk4CS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMxQkUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMkJFCTB4MDAwMDAwMEYJLyogRGF0YSBWYWx1ZSBDb21wIDIgQnl0ZSAqLworI2RlZmluZSBEQkNSMl9EVkMyQkVfU0hJRlQJMAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgREJDUjJfRFZDMkJFICovCisKKy8qCisgKiBBcmUgdGhlcmUgYW55IGFjdGl2ZSBEZWJ1ZyBFdmVudHMgcmVwcmVzZW50ZWQgaW4gdGhlCisgKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycz8KKyAqLworI2RlZmluZSBEQkNSMF9BQ1RJVkVfRVZFTlRTICAoREJDUjBfSUNNUCB8IERCQ1IwX0lBQzEgfCBEQkNSMF9JQUMyIHwgXAorCQkJICAgICAgREJDUjBfSUFDMyB8IERCQ1IwX0lBQzQgfCBEQkNSMF9EQUMxUiB8IFwKKwkJCSAgICAgIERCQ1IwX0RBQzFXICB8IERCQ1IwX0RBQzJSIHwgREJDUjBfREFDMlcpCisjZGVmaW5lIERCQ1IxX0FDVElWRV9FVkVOVFMJMAorCisjZGVmaW5lIERCQ1JfQUNUSVZFX0VWRU5UUyhkYmNyMCwgZGJjcjEpICAoKChkYmNyMCkgJiBEQkNSMF9BQ1RJVkVfRVZFTlRTKSB8fCBcCisJCQkJCSAgICgoZGJjcjEpICYgREJDUjFfQUNUSVZFX0VWRU5UUykpCisjZW5kaWYgLyogI2VsaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpICovCiAKIC8qIEJpdCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBUQ1IuICovCiAjZGVmaW5lIFRDUl9XUCh4KQkoKCh4KSYweDMpPDwzMCkJLyogV0RUIFBlcmlvZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA3NjQwOTRjLi5mOTYxMWJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjcsNiArMjcsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vc3luY2guaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCiAjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQoeCkJCSgoeCktPnNsb2NrICE9IDApCiAKQEAgLTYwLDEzICs2MSwxNCBAQAogCiAJdG9rZW4gPSBMT0NLX1RPS0VOOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWx3YXJ4CQklMCwwLCUyXG5cCisiMToJIiBQUENfTFdBUlgoJTAsMCwlMiwxKSAiXG5cCiAJY21wd2kJCTAsJTAsMFxuXAogCWJuZS0JCTJmXG5cCiAJc3R3Y3guCQklMSwwLCUyXG5cCi0JYm5lLQkJMWJcblwKLQlpc3luY1xuXAotMjoiCTogIj0mciIgKHRtcCkKKwlibmUtCQkxYlxuIgorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKKyIyOiIKKwk6ICI9JnIiICh0bXApCiAJOiAiciIgKHRva2VuKSwgInIiICgmbG9jay0+c2xvY2spCiAJOiAiY3IwIiwgIm1lbW9yeSIpOwogCkBAIC0xNDQsNyArMTQ2LDcgQEAKIHsKIAlTWU5DX0lPOwogCV9fYXNtX18gX192b2xhdGlsZV9fKCIjIGFyY2hfc3Bpbl91bmxvY2tcblx0IgotCQkJCUxXU1lOQ19PTl9TTVA6IDogOiJtZW1vcnkiKTsKKwkJCQlQUENfUkVMRUFTRV9CQVJSSUVSOiA6IDoibWVtb3J5Iik7CiAJbG9jay0+c2xvY2sgPSAwOwogfQogCkBAIC0xODYsMTUgKzE4OCwxNSBAQAogCWxvbmcgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToJbHdhcngJCSUwLDAsJTFcbiIKKyIxOgkiIFBQQ19MV0FSWCglMCwwLCUxLDEpICJcbiIKIAlfX0RPX1NJR05fRVhURU5ECiAiCWFkZGljLgkJJTAsJTAsMVxuXAogCWJsZS0JCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgkJJTAsMCwlMVxuXAotCWJuZS0JCTFiXG5cCi0JaXN5bmNcblwKLTI6Igk6ICI9JnIiICh0bXApCisJYm5lLQkJMWJcbiIKKwlQUENfQUNRVUlSRV9CQVJSSUVSCisiMjoiCTogIj0mciIgKHRtcCkKIAk6ICJyIiAoJnJ3LT5sb2NrKQogCTogImNyMCIsICJ4ZXIiLCAibWVtb3J5Iik7CiAKQEAgLTIxMSwxNCArMjEzLDE0IEBACiAKIAl0b2tlbiA9IFdSTE9DS19UT0tFTjsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOglsd2FyeAkJJTAsMCwlMlxuXAorIjE6CSIgUFBDX0xXQVJYKCUwLDAsJTIsMSkgIlxuXAogCWNtcHdpCQkwLCUwLDBcblwKIAlibmUtCQkyZlxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JCSUxLDAsJTJcblwKLQlibmUtCQkxYlxuXAotCWlzeW5jXG5cCi0yOiIJOiAiPSZyIiAodG1wKQorCWJuZS0JCTFiXG4iCisJUFBDX0FDUVVJUkVfQkFSUklFUgorIjI6Igk6ICI9JnIiICh0bXApCiAJOiAiciIgKHRva2VuKSwgInIiICgmcnctPmxvY2spCiAJOiAiY3IwIiwgIm1lbW9yeSIpOwogCkBAIC0yNjksNyArMjcxLDcgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIjIHJlYWRfdW5sb2NrXG5cdCIKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CQklMCwwLCUxXG5cCiAJYWRkaWMJCSUwLCUwLC0xXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCkBAIC0yODMsNyArMjg1LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyB3cml0ZV91bmxvY2tcblx0IgotCQkJCUxXU1lOQ19PTl9TTVA6IDogOiJtZW1vcnkiKTsKKwkJCQlQUENfUkVMRUFTRV9CQVJSSUVSOiA6IDoibWVtb3J5Iik7CiAJcnctPmxvY2sgPSAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeW5jaC5oCmluZGV4IDI4ZjZkZGJmLi5kN2NhYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaApAQCAtMzcsMTEgKzM3LDE1IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgSVNZTkNfT05fU01QCSJcblx0aXN5bmNcbiIKLSNkZWZpbmUgTFdTWU5DX09OX1NNUAlzdHJpbmdpZnlfaW5fYyhMV1NZTkMpICJcbiIKKyNkZWZpbmUgX19QUENfQUNRVUlSRV9CQVJSSUVSCQkJCVwKKwlTVEFSVF9MV1NZTkNfU0VDVElPTig5Nyk7CQkJXAorCWlzeW5jOwkJCQkJCVwKKwlNQUtFX0xXU1lOQ19TRUNUSU9OX0VOVFJZKDk3LCBfX2x3c3luY19maXh1cCk7CisjZGVmaW5lIFBQQ19BQ1FVSVJFX0JBUlJJRVIJIlxuIiBzdHJpbmdpZnlfaW5fYyhfX1BQQ19BQ1FVSVJFX0JBUlJJRVIpCisjZGVmaW5lIFBQQ19SRUxFQVNFX0JBUlJJRVIJc3RyaW5naWZ5X2luX2MoTFdTWU5DKSAiXG4iCiAjZWxzZQotI2RlZmluZSBJU1lOQ19PTl9TTVAKLSNkZWZpbmUgTFdTWU5DX09OX1NNUAorI2RlZmluZSBQUENfQUNRVUlSRV9CQVJSSUVSCisjZGVmaW5lIFBQQ19SRUxFQVNFX0JBUlJJRVIKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGJiOGUwMDYuLmE2Mjk3YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTExMiw4ICsxMTIsMTMgQEAKICNlbmRpZgogCiBleHRlcm4gaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicik7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworZXh0ZXJuIHZvaWQgZG9fc2VuZF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgc2lnbmFsX2NvZGUsIGludCBicmtwdCk7CisjZWxzZQogZXh0ZXJuIHZvaWQgZG9fZGFicihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgcHJpbnRfYmFja3RyYWNlKHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIGV4dGVybiB2b2lkIGZsdXNoX2luc3RydWN0aW9uX2NhY2hlKHZvaWQpOwpAQCAtMjMyLDEyICsyMzcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMywwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHByZXYpLCAiK20iICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKXApCiAJOiAiciIgKHApLCAiciIgKHZhbCkKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTI3NSwxMiArMjgwLDEyIEBACiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdGRjeC4JJTMsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcCkKIAk6ICJyIiAocCksICJyIiAodmFsKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzY2LDE0ICszNzEsMTQgQEAKIAl1bnNpZ25lZCBpbnQgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3UzMlxuXAogCWNtcHcJMCwlMCwlM1xuXAogCWJuZS0JMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSU0LDAsJTJcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKnApCkBAIC00MTIsMTMgKzQxNywxMyBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3U2NFxuXAogCWNtcGQJMCwlMCwlM1xuXAogCWJuZS0JMmZcblwKIAlzdGRjeC4JJTQsMCwlMlxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6IgogCTogIj0mciIgKHByZXYpLCAiK20iICgqcCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYmJmODk3MC4uOGVhZWMzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTM4LDI3ICszOCwzMyBAQAogCQkJCSBjcHVtYXNrX29mX25vZGUocGNpYnVzX3RvX25vZGUoYnVzKSkpCiAKIC8qIHNjaGVkX2RvbWFpbnMgU0RfTk9ERV9JTklUIGZvciBQUEM2NCBtYWNoaW5lcyAqLwotI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKLQkucGFyZW50CQkJPSBOVUxMLAkJCVwKLQkuY2hpbGQJCQk9IE5VTEwsCQkJXAotCS5ncm91cHMJCQk9IE5VTEwsCQkJXAotCS5taW5faW50ZXJ2YWwJCT0gOCwJCQlcCi0JLm1heF9pbnRlcnZhbAkJPSAzMiwJCQlcCi0JLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKLQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAotCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCi0JLmJ1c3lfaWR4CQk9IDMsCQkJXAotCS5pZGxlX2lkeAkJPSAxLAkJCVwKLQkubmV3aWRsZV9pZHgJCT0gMCwJCQlcCi0JLndha2VfaWR4CQk9IDAsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCi0JCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAotCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKLQkJCQl8IFNEX1NFUklBTElaRSwJCVwKLQkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCi0JLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKLQkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKKyNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQkJCVwKKwkubWluX2ludGVydmFsCQk9IDgsCQkJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMiwJCQkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCQkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQkJCVwKKwkuYnVzeV9pZHgJCT0gMywJCQkJCVwKKwkuaWRsZV9pZHgJCT0gMSwJCQkJCVwKKwkubmV3aWRsZV9pZHgJCT0gMCwJCQkJCVwKKwkud2FrZV9pZHgJCT0gMCwJCQkJCVwKKwkuZm9ya2V4ZWNfaWR4CQk9IDAsCQkJCQlcCisJCQkJCQkJCQlcCisJLmZsYWdzCQkJPSAxKlNEX0xPQURfQkFMQU5DRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9ORVdJRExFCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0VYRUMJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKKwkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAorCQkJCXwgMCpTRF9XQUtFX0FGRklORQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKKwkJCQl8IDAqU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJCVwKKwkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAorCQkJCXwgMSpTRF9TRVJJQUxJWkUJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9TSUJMSU5HCQkJXAorCQkJCSwJCQkJCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQkJCVwKKwkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJCQlcCiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCBkdW1wX251bWFfY3B1X3RvcG9sb2d5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGJkY2I1NTcuLjA3MTA5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTc5MSw5ICs3OTEsOCBAQAogCQogICAgICAgICBsaSAgICAgIHI5LDEKICAgICAgICAgcmxkaWNyICByOSxyOSxNU1JfU0ZfTEcsKDYzLU1TUl9TRl9MRykKLQlvcmkJcjkscjksTVNSX0lSfE1TUl9EUnxNU1JfRkUwfE1TUl9GRTF8TVNSX0ZQCisJb3JpCXI5LHI5LE1TUl9JUnxNU1JfRFJ8TVNSX0ZFMHxNU1JfRkUxfE1TUl9GUHxNU1JfUkkKIAlhbmRjCXI2LHIwLHI5Ci0Jb3JpCXI2LHI2LE1TUl9SSQogCXN5bmMJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIHNvIFNSUjAvMSAqLwogCW10bXNyZAlyMAkJCS8qIGRvbid0IGdldCB0cmFzaGVkICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCAxNjc5YTcwLi42YjFmNDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xNyw1ICsxNyw1IEBACiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAotdW5zaWduZWQgbG9uZyBwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzOwordW5zaWduZWQgbG9uZyBwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCA3ZjRiZDdmLi4yNTc5M2JiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC0yMTQsMTEgKzIxNCwxMSBAQAogCWJsCTFmCQkvKiBGaW5kIG91ciBhZGRyZXNzICovCiAxOgltZmxyCXI5CiAJcmx3aW1pCXI3LHI5LDAsMjAsMzEKLQlhZGRpCXI3LHI3LDI0CisJYWRkaQlyNyxyNywoMmYgLSAxYikKIAltdHNwcglTUFJOX1NSUjAscjcKIAltdHNwcglTUFJOX1NSUjEscjYKIAlyZmkKLQorMjoKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCiAJbXRzcHIgICBTUFJOX01BUzYscjYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDkwNDAzMzAuLjY0ZjZmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNzMsOCArNzMsMTAgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woaXJxX3N0YXQpOworCiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOwotc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKIAogI2lmZGVmIENPTkZJR19QUEMzMgogRVhQT1JUX1NZTUJPTChfX2lycV9vZmZzZXRfdmFsdWUpOwpAQCAtMTgwLDMwICsxODIsNjQgQEAKIEVYUE9SVF9TWU1CT0wocmF3X2xvY2FsX2lycV9yZXN0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAorc3RhdGljIGludCBzaG93X290aGVyX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKK3sKKwlpbnQgajsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19UQVVfSU5UKQorCWlmICh0YXVfaW5pdGlhbGl6ZWQpIHsKKwkJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEFVIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOworCQlzZXFfcHV0cyhwLCAiICBQb3dlclBDICAgICAgICAgICAgIFRoZXJtYWwgQXNzaXN0IChjcHUgdGVtcClcbiIpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgQ09ORklHX1RBVV9JTlQgKi8KKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS50aW1lcl9pcnFzKTsKKyAgICAgICAgc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS5zcHVyaW91c19pcnFzKTsKKwlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ05UIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnBtdV9pcnFzKTsKKwlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJNQ0UiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikubWNlX2V4Y2VwdGlvbnMpOworCXNlcV9wcmludGYocCwgIiAgTWFjaGluZSBjaGVjayBleGNlcHRpb25zXG4iKTsKKworCXJldHVybiAwOworfQorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopdiwgajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBhbnlfY291bnQgPSAwOworCWludCBpID0gKihsb2ZmX3QgKikgdiwgaiwgcHJlYzsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wdXRzKHAsICIgICAgICAgICAgICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLCBqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfSBlbHNlIGlmIChpID09IG5yX2lycXMpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgZGVmaW5lZChDT05GSUdfVEFVX0lOVCkKLQkJaWYgKHRhdV9pbml0aWFsaXplZCl7Ci0JCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKLQkJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKLQkJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgQ09ORklHX1RBVV9JTlQqLwotCQlzZXFfcHJpbnRmKHAsICJCQUQ6ICUxMHVcbiIsIHBwY19zcHVyaW91c19pbnRlcnJ1cHRzKTsKLQorCWlmIChpID4gbnJfaXJxcykKIAkJcmV0dXJuIDA7CisKKwlmb3IgKHByZWMgPSAzLCBqID0gMTAwMDsgcHJlYyA8IDEwICYmIGogPD0gbnJfaXJxczsgKytwcmVjKQorCQlqICo9IDEwOworCisJaWYgKGkgPT0gbnJfaXJxcykKKwkJcmV0dXJuIHNob3dfb3RoZXJfaW50ZXJydXB0cyhwLCBwcmVjKTsKKworCS8qIHByaW50IGhlYWRlciAqLworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiJSpzIiwgcHJlYyArIDgsICIiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsIGopOworCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CkBAIC0yMTEsMzcgKzI0Nyw0OCBAQAogCQlyZXR1cm4gMDsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCWlmICghYWN0aW9uIHx8ICFhY3Rpb24tPmhhbmRsZXIpCi0JCWdvdG8gc2tpcDsKKwlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQorCQlnb3RvIG91dDsKIAotCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZkZWYgQ09ORklHX1NNUAorCXNlcV9wcmludGYocCwgIiUqZDogIiwgcHJlYywgaSk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKLSNlbHNlCi0Jc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlpZiAoZGVzYy0+Y2hpcCkKLQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGRlc2MtPmNoaXAtPm5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgICUtMTZzIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CiAJZWxzZQotCQlzZXFfcHV0cyhwLCAiICBOb25lICAgICAgIik7CisJCXNlcV9wcmludGYocCwgIiAgJS0xNnMiLCAiTm9uZSIpOworCXNlcV9wcmludGYocCwgIiAlLThzIiwgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwiIDogIkVkZ2UiKTsKIAotCXNlcV9wcmludGYocCwgIiVzIiwgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwgIiA6ICJFZGdlICAiKTsKLQlzZXFfcHJpbnRmKHAsICIgICAgJXMiLCBhY3Rpb24tPm5hbWUpOworCWlmIChhY3Rpb24pIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQorCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CisJfQogCi0JZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQotCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKIAlzZXFfcHV0YyhwLCAnXG4nKTsKLQotc2tpcDoKK291dDoKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiAvcHJvYy9zdGF0IGhlbHBlcnMKKyAqLwordTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0IHN1bSA9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkudGltZXJfaXJxczsKKworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLnBtdV9pcnFzOworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLm1jZV9leGNlcHRpb25zOworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLnNwdXJpb3VzX2lycXM7CisKKwlyZXR1cm4gc3VtOworfQorCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIGZpeHVwX2lycXMoY3B1bWFza190IG1hcCkKIHsKQEAgLTM1Myw4ICs0MDAsNyBAQAogCWlmIChpcnEgIT0gTk9fSVJRICYmIGlycSAhPSBOT19JUlFfSUdOT1JFKQogCQloYW5kbGVfb25lX2lycShpcnEpOwogCWVsc2UgaWYgKGlycSAhPSBOT19JUlFfSUdOT1JFKQotCQkvKiBUaGF0J3Mgbm90IFNNUCBzYWZlIC4uLiBidXQgd2hvIGNhcmVzID8gKi8KLQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKKwkJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuc3B1cmlvdXNfaXJxcysrOwogCiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwpAQCAtNDc0LDcgKzUyMCw3IEBACiAgKi8KIAogc3RhdGljIExJU1RfSEVBRChpcnFfaG9zdHMpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfYmlnX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmV2bWFwX3RyZWVzX2FsbG9jYXRlZDsKIHN0YXRpYyBERUZJTkVfTVVURVgocmV2bWFwX3RyZWVzX211dGV4KTsKIHN0cnVjdCBpcnFfbWFwX2VudHJ5IGlycV9tYXBbTlJfSVJRU107CkBAIC01MjAsMTQgKzU2NiwxNCBAQAogCWlmIChob3N0LT5vcHMtPm1hdGNoID09IE5VTEwpCiAJCWhvc3QtPm9wcy0+bWF0Y2ggPSBkZWZhdWx0X2lycV9ob3N0X21hdGNoOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBJZiBpdCdzIGEgbGVnYWN5IGNvbnRyb2xsZXIsIGNoZWNrIGZvciBkdXBsaWNhdGVzIGFuZAogCSAqIG1hcmsgaXQgYXMgYWxsb2NhdGVkICh3ZSB1c2UgaXJxIDAgaG9zdCBwb2ludGVyIGZvciB0aGF0CiAJICovCiAJaWYgKHJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9MRUdBQ1kpIHsKIAkJaWYgKGlycV9tYXBbMF0uaG9zdCAhPSBOVUxMKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAkJCS8qIElmIHdlIGFyZSBlYXJseSBib290LCB3ZSBjYW4ndCBmcmVlIHRoZSBzdHJ1Y3R1cmUsCiAJCQkgKiB0b28gYmFkLi4uCiAJCQkgKiB0aGlzIHdpbGwgYmUgZml4ZWQgb25jZSBzbGFiIGlzIG1hZGUgYXZhaWxhYmxlIGVhcmx5CkBAIC01NDEsNyArNTg3LDcgQEAKIAl9CiAKIAlsaXN0X2FkZCgmaG9zdC0+bGluaywgJmlycV9ob3N0cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCiAJLyogQWRkaXRpb25hbCBzZXR1cHMgcGVyIHJldm1hcCB0eXBlICovCiAJc3dpdGNoKHJldm1hcF90eXBlKSB7CkBAIC01OTIsMTMgKzYzOCwxMyBAQAogCSAqIHRoZSBhYnNlbmNlIG9mIGEgZGV2aWNlIG5vZGUuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIHNvIGZhcgogCSAqIHlldCB0aG91Z2guLi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZpcnFfaG9zdHMsIGxpbmspCiAJCWlmIChoLT5vcHMtPm1hdGNoKGgsIG5vZGUpKSB7CiAJCQlmb3VuZCA9IGg7CiAJCQlicmVhazsKIAkJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gZm91bmQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZmluZF9ob3N0KTsKQEAgLTk2Nyw3ICsxMDEzLDcgQEAKIAlpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IChpcnFfdmlycV9jb3VudCAtIE5VTV9JU0FfSU5URVJSVVBUUykpCiAJCXJldHVybiBOT19JUlE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAogCS8qIFVzZSBoaW50IGZvciAxIGludGVycnVwdCBpZiBhbnkgKi8KIAlpZiAoY291bnQgPT0gMSAmJiBoaW50ID49IE5VTV9JU0FfSU5URVJSVVBUUyAmJgpAQCAtOTkxLDcgKzEwMzcsNyBAQAogCQl9CiAJfQogCWlmIChmb3VuZCA9PSBOT19JUlEpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5PX0lSUTsKIAl9CiAgaGludF9mb3VuZDoKQEAgLTEwMDAsNyArMTA0Niw3IEBACiAJCXNtcF93bWIoKTsKIAkJaXJxX21hcFtpXS5ob3N0ID0gaG9zdDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtMTAxMiw3ICsxMDU4LDcgQEAKIAlXQVJOX09OICh2aXJxIDwgTlVNX0lTQV9JTlRFUlJVUFRTKTsKIAlXQVJOX09OIChjb3VudCA9PSAwIHx8ICh2aXJxICsgY291bnQpID4gaXJxX3ZpcnFfY291bnQpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gdmlycTsgaSA8ICh2aXJxICsgY291bnQpOyBpKyspIHsKIAkJc3RydWN0IGlycV9ob3N0ICpob3N0OwogCkBAIC0xMDI1LDcgKzEwNzEsNyBAQAogCQlzbXBfd21iKCk7CiAJCWlycV9tYXBbaV0uaG9zdCA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKaW5kZXggYjZiZDFlYS4uNDFiYWRhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwgLTEpOwogCQkvKiBzZXQgdGhlIHRyYWNlIGJpdCBpZiB3ZSdyZSBzdGVwcGluZyAqLwogCQlpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAncycpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCW10c3ByKFNQUk5fREJDUjAsCiAJCQkgICAgICBtZnNwcihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKIAkJCWxpbnV4X3JlZ3MtPm1zciB8PSBNU1JfREU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGM5MzI5Nzg2Li4zZmQxYWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaWZkZWYgQ09ORklHX0JPT0tFCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogI2RlZmluZSBNU1JfU0lOR0xFU1RFUAkoTVNSX0RFKQogI2Vsc2UKICNkZWZpbmUgTVNSX1NJTkdMRVNURVAJKE1TUl9TRSkKQEAgLTExMCw3ICsxMTAsNyBAQAogCSAqIGxpa2UgRGVjcmVtZW50ZXIgb3IgRXh0ZXJuYWwgSW50ZXJydXB0ICovCiAJcmVncy0+bXNyICY9IH5NU1JfRUU7CiAJcmVncy0+bXNyIHw9IE1TUl9TSU5HTEVTVEVQOwotI2lmZGVmIENPTkZJR19CT09LRQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAlyZWdzLT5tc3IgJj0gfk1TUl9DRTsKIAltdHNwcihTUFJOX0RCQ1IwLCBtZnNwcihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCA3OWEwMGJiLi5kMDlkMWM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIAl1bnNpZ25lZCBjaGFyICpsb2NhbF9idWZmZXIgPSBrbWFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWxfYnVmZmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkXG4iLAogCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CkBAIC0zODMsMTMgKzM4MywxMyBAQAogCQlpbnQgaWR4LCB3X2lkeDsKIAkJY2hhciAqd29ya2J1ZmZlciA9IGt6YWxsb2MoU1BMUEFSX01BWExFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghd29ya2J1ZmZlcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkXG4iLAogCQkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJa2ZyZWUobG9jYWxfYnVmZmVyKTsKIAkJCXJldHVybjsKIAkJfQogI2lmZGVmIExQQVJDRkdfREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAic3VjY2VzcyBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyIFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gInN1Y2Nlc3MgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlclxuIik7CiAjZW5kaWYKIAkJc3BscGFyX3N0cmxlbiA9IGxvY2FsX2J1ZmZlclswXSAqIDI1NiArIGxvY2FsX2J1ZmZlclsxXTsKIAkJbG9jYWxfYnVmZmVyICs9IDI7CS8qIHN0ZXAgb3ZlciBzdHJsZW4gdmFsdWUgKi8KQEAgLTQ0MCw3ICs0NDAsNyBAQAogCiAJd2hpbGUgKChjcHVzX2RuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoY3B1c19kbiwgImNwdSIpKSkgewogI2lmZGVmIExQQVJDRkdfREVCVUcKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVzX2RuICVwIFxuIiwgY3B1c19kbik7CisJCXByaW50ayhLRVJOX0VSUiAiY3B1c19kbiAlcFxuIiwgY3B1c19kbik7CiAjZW5kaWYKIAkJY291bnQrKzsKIAl9CkBAIC03MjUsNyArNzI1LDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgKmxwX2luZGV4X3B0cjsKIAl1bnNpZ25lZCBpbnQgbHBfaW5kZXggPSAwOwogCi0Jc2VxX3ByaW50ZihtLCAiJXMgJXMgXG4iLCBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOworCXNlcV9wcmludGYobSwgIiVzICVzXG4iLCBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOwogCiAJcm9vdGRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAocm9vdGRuKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKaW5kZXggYWQ0NjFlNy4uOWNmMTk3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwpAQCAtMzM4LDggKzMzOCw4IEBACiAKIAlyYyA9IG52cmFtX3dyaXRlX2hlYWRlcihuZXdfcGFydCk7CiAJaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgXAotCQkJCWZhaWxlZCAoJWQpXG4iLCByYyk7CisJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGVfaGVhZGVyICIKKwkJCQkiZmFpbGVkICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmc2VxX2luaXQsIHNpemVvZihzZXFfaW5pdCksICZ0bXBfaW5kZXgpOwogCWlmIChyYyA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGUgIgotCQkJCSJmYWlsZWQgKCVkKVxuIiwgcmMpOworCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggMWE0ZmMwZDEuLjY2NmQwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogc3RhdGljIGludCBvZl9kZXZfcGhhbmRsZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJcGhhbmRsZSAqcGggPSBkYXRhOwotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+bGludXhfcGhhbmRsZSA9PSAqcGg7CisJcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5waGFuZGxlID09ICpwaDsKIH0KIAogc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZShwaGFuZGxlIHBoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBjYWRiZWQ2Li4yNTk3Zjk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMTA0NywxMCArMTA0Nyw4IEBACiAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXJlcy0+ZmxhZ3MpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncykKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSA+PSAzICYmIGJ1cy0+c2VsZi0+dHJhbnNwYXJlbnQpCiAJCQljb250aW51ZTsKQEAgLTExODEsMjEgKzExNzksMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwotCiAJCWlmIChza2lwX2lzYV9pb3Jlc291cmNlX2FsaWduKGRldikpCi0JCQlyZXR1cm47Ci0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCQlyZXR1cm4gc3RhcnQ7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UpOwogCkBAIC0xMjc4LDkgKzEyNzUsOCBAQAogCXByX2RlYnVnKCJQQ0k6IEFsbG9jYXRpbmcgYnVzIHJlc291cmNlcyBmb3IgJTA0eDolMDJ4Li4uXG4iLAogCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyArK2kpIHsKLQkJaWYgKChyZXMgPSBidXMtPnJlc291cmNlW2ldKSA9PSBOVUxMIHx8ICFyZXMtPmZsYWdzCi0JCSAgICB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncyB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCiAJCQljb250aW51ZTsKIAkJaWYgKGJ1cy0+cGFyZW50ID09IE5VTEwpCiAJCQlwciA9IChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggY2NmNTZhYy4uZDQzZmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgKiBHNSBtYWNoaW5lcy4uLiBTbyB3aGVuIHNvbWV0aGluZyBhc2tzIGZvciBidXMgMCBpbyBiYXNlCiAJICogKGJ1cyAwIGlzIEhUIHJvb3QpLCB3ZSByZXR1cm4gdGhlIEFHUCBvbmUgaW5zdGVhZC4KIAkgKi8KLQlpZiAoaW5fYnVzID09IDAgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CisJaWYgKGluX2J1cyA9PSAwICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFncDsKIAogCQlhZ3AgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAidTMtYWdwIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKaW5kZXggNGFhMTc0MC4uY2QxMWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJaW50IHJlZ2xlbiwgZGV2Zm47CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCXByX2RlYnVnKCJvZl9zY2FuX2J1cyglcykgYnVzIG5vICVkLi4uIFxuIiwKKwlwcl9kZWJ1Zygib2Zfc2Nhbl9idXMoJXMpIGJ1cyBubyAlZC4uLlxuIiwKIAkJIG5vZGUtPmZ1bGxfbmFtZSwgYnVzLT5udW1iZXIpOwogCiAJLyogU2NhbiBkaXJlY3QgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwppbmRleCBhM2MxMWNhLi45NWFkOWRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCkBAIC00OTUsOSArNDk1LDYgQEAKIAogCWVudHJ5LT5uciA9IDA7CiAKLQlpZiAoY3VycmVudC0+cGlkID09IDApCQkvKiBpZGxlIHRhc2s/ICovCi0JCXJldHVybiBlbnRyeTsKLQogCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXBlcmZfY2FsbGNoYWluX2tlcm5lbChyZWdzLCBlbnRyeSk7CiAJCWlmIChjdXJyZW50LT5tbSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMWViODVmYi4uYjZjZjhmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTcxOCwxMCArNzE4LDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCiAJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CkBAIC03MzUsNyArNzM1LDcgQEAKICAqLwogaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KQorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OwogCWxvbmcgaSwgbiwgbjA7CkBAIC03NjYsMTAgKzc2NiwxMCBAQAogCQljcHVody0+ZXZlbnRbaV0tPmh3LmNvbmZpZyA9IGNwdWh3LT5ldmVudHNbaV07CiAJY3B1Y3R4LT5hY3RpdmVfb25jcHUgKz0gbjsKIAluID0gMTsKLQlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7CisJZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewogCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgewotCQkJZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHUpOworCQkJZXZlbnRfc2NoZWRfaW4oc3ViKTsKIAkJCSsrbjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCmluZGV4IDA1MTZlMmQuLjQ2MTQ5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwpAQCAtMzcsNyArMzcsNyBAQAogfQogCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG1jX293bmVyX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG1jX293bmVyX2xvY2spOwogc3RhdGljIHZvaWQgKnBtY19vd25lcl9jYWxsZXI7IC8qIG1vc3RseSBmb3IgZGVidWdnaW5nICovCiBwZXJmX2lycV90IHBlcmZfaXJxID0gZHVtbXlfcGVyZjsKIApAQCAtNDUsNyArNDUsNyBAQAogewogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOwogCiAJaWYgKHBtY19vd25lcl9jYWxsZXIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmVzZXJ2ZV9wbWNfaGFyZHdhcmU6ICIKQEAgLTU5LDIxICs1OSwyMSBAQAogCXBlcmZfaXJxID0gbmV3X3BlcmZfaXJxID8gbmV3X3BlcmZfaXJxIDogZHVtbXlfcGVyZjsKIAogIG91dDoKLQlzcGluX3VubG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX3VubG9jaygmcG1jX293bmVyX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX3BtY19oYXJkd2FyZSk7CiAKIHZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCkKIHsKLQlzcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CiAKIAlXQVJOX09OKCEgcG1jX293bmVyX2NhbGxlcik7CiAKIAlwbWNfb3duZXJfY2FsbGVyID0gTlVMTDsKIAlwZXJmX2lycSA9IGR1bW15X3BlcmY7CiAKLQlzcGluX3VubG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX3VubG9jaygmcG1jX293bmVyX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVsZWFzZV9wbWNfaGFyZHdhcmUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdiODE2ZGEuLmU0ZDcxY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNDUsNiArMjQ1LDI0IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwordm9pZCBkb19zZW5kX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIGludCBzaWduYWxfY29kZSwgaW50IGJyZWFrcHQpCit7CisJc2lnaW5mb190IGluZm87CisKKwlpZiAobm90aWZ5X2RpZShESUVfREFCUl9NQVRDSCwgImRhYnJfbWF0Y2giLCByZWdzLCBlcnJvcl9jb2RlLAorCQkJMTEsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisKKwkvKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gdXNlcnNwYWNlICovCisJaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7CisJaW5mby5zaV9lcnJubyA9IGJyZWFrcHQ7CS8qIGJyZWFrcG9pbnQgb3Igd2F0Y2hwb2ludCBpZCAqLworCWluZm8uc2lfY29kZSA9IHNpZ25hbF9jb2RlOworCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CisJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJmluZm8sIGN1cnJlbnQpOworfQorI2Vsc2UJLyogIUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIHZvaWQgZG9fZGFicihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQogewpAQCAtMjU3LDEyICsyNzUsNiBAQAogCWlmIChkZWJ1Z2dlcl9kYWJyX21hdGNoKHJlZ3MpKQogCQlyZXR1cm47CiAKLQkvKiBDbGVhciB0aGUgREFDIGFuZCBzdHJ1Y3QgZW50cmllcy4gIE9uZSBzaG90IHRyaWdnZXIgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQltdHNwcihTUFJOX0RCQ1IwLCBtZnNwcihTUFJOX0RCQ1IwKSAmIH4oREJTUl9EQUMxUiB8IERCU1JfREFDMVcKLQkJCQkJCQl8IERCQ1IwX0lETSkpOwotI2VuZGlmCi0KIAkvKiBDbGVhciB0aGUgREFCUiAqLwogCXNldF9kYWJyKDApOwogCkBAIC0yNzMsOSArMjg1LDgyIEBACiAJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopYWRkcmVzczsKIAlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgY3VycmVudCk7CiB9CisjZW5kaWYJLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgY3VycmVudF9kYWJyKTsKIAorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKy8qCisgKiBTZXQgdGhlIGRlYnVnIHJlZ2lzdGVycyBiYWNrIHRvIHRoZWlyIGRlZmF1bHQgInNhZmUiIHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgc2V0X2RlYnVnX3JlZ19kZWZhdWx0cyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCXRocmVhZC0+aWFjMSA9IHRocmVhZC0+aWFjMiA9IDA7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwl0aHJlYWQtPmlhYzMgPSB0aHJlYWQtPmlhYzQgPSAwOworI2VuZGlmCisJdGhyZWFkLT5kYWMxID0gdGhyZWFkLT5kYWMyID0gMDsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCXRocmVhZC0+ZHZjMSA9IHRocmVhZC0+ZHZjMiA9IDA7CisjZW5kaWYKKwl0aHJlYWQtPmRiY3IwID0gMDsKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwkvKgorCSAqIEZvcmNlIFVzZXIvU3VwZXJ2aXNvciBiaXRzIHRvIGIxMSAodXNlci1vbmx5IE1TUltQUl09MSkKKwkgKi8KKwl0aHJlYWQtPmRiY3IxID0gREJDUjFfSUFDMVVTIHwgREJDUjFfSUFDMlVTIHwJXAorCQkJREJDUjFfSUFDM1VTIHwgREJDUjFfSUFDNFVTOworCS8qCisJICogRm9yY2UgRGF0YSBBZGRyZXNzIENvbXBhcmUgVXNlci9TdXBlcnZpc29yIGJpdHMgdG8gYmUgVXNlci1vbmx5CisJICogKDBiMTEgTVNSW1BSXT0xKSBhbmQgc2V0IGFsbCBvdGhlciBiaXRzIGluIERCQ1IyIHJlZ2lzdGVyIHRvIGJlIDAuCisJICovCisJdGhyZWFkLT5kYmNyMiA9IERCQ1IyX0RBQzFVUyB8IERCQ1IyX0RBQzJVUzsKKyNlbHNlCisJdGhyZWFkLT5kYmNyMSA9IDA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcHJpbWVfZGVidWdfcmVncyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCW10c3ByKFNQUk5fSUFDMSwgdGhyZWFkLT5pYWMxKTsKKwltdHNwcihTUFJOX0lBQzIsIHRocmVhZC0+aWFjMik7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwltdHNwcihTUFJOX0lBQzMsIHRocmVhZC0+aWFjMyk7CisJbXRzcHIoU1BSTl9JQUM0LCB0aHJlYWQtPmlhYzQpOworI2VuZGlmCisJbXRzcHIoU1BSTl9EQUMxLCB0aHJlYWQtPmRhYzEpOworCW10c3ByKFNQUk5fREFDMiwgdGhyZWFkLT5kYWMyKTsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCW10c3ByKFNQUk5fRFZDMSwgdGhyZWFkLT5kdmMxKTsKKwltdHNwcihTUFJOX0RWQzIsIHRocmVhZC0+ZHZjMik7CisjZW5kaWYKKwltdHNwcihTUFJOX0RCQ1IwLCB0aHJlYWQtPmRiY3IwKTsKKwltdHNwcihTUFJOX0RCQ1IxLCB0aHJlYWQtPmRiY3IxKTsKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwltdHNwcihTUFJOX0RCQ1IyLCB0aHJlYWQtPmRiY3IyKTsKKyNlbmRpZgorfQorLyoKKyAqIFVubGVzcyBuZWl0aGVyIHRoZSBvbGQgb3IgbmV3IHRocmVhZCBhcmUgbWFraW5nIHVzZSBvZiB0aGUKKyAqIGRlYnVnIHJlZ2lzdGVycywgc2V0IHRoZSBkZWJ1ZyByZWdpc3RlcnMgZnJvbSB0aGUgdmFsdWVzCisgKiBzdG9yZWQgaW4gdGhlIG5ldyB0aHJlYWQuCisgKi8KK3N0YXRpYyB2b2lkIHN3aXRjaF9ib29rZV9kZWJ1Z19yZWdzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICpuZXdfdGhyZWFkKQoreworCWlmICgoY3VycmVudC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSURNKQorCQl8fCAobmV3X3RocmVhZC0+ZGJjcjAgJiBEQkNSMF9JRE0pKQorCQkJcHJpbWVfZGVidWdfcmVncyhuZXdfdGhyZWFkKTsKK30KKyNlbHNlCS8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCitzdGF0aWMgdm9pZCBzZXRfZGVidWdfcmVnX2RlZmF1bHRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJaWYgKHRocmVhZC0+ZGFicikgeworCQl0aHJlYWQtPmRhYnIgPSAwOworCQlzZXRfZGFicigwKTsKKwl9Cit9CisjZW5kaWYJLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworCiBpbnQgc2V0X2RhYnIodW5zaWduZWQgbG9uZyBkYWJyKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9kYWJyKSA9IGRhYnI7CkBAIC0yODQsNyArMzY5LDcgQEAKIAkJcmV0dXJuIHBwY19tZC5zZXRfZGFicihkYWJyKTsKIAogCS8qIFhYWCBzaG91bGQgd2UgaGF2ZSBhIENQVV9GVFJfSEFTX0RBQlIgPyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAltdHNwcihTUFJOX0RBQzEsIGRhYnIpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szUykKIAltdHNwcihTUFJOX0RBQlIsIGRhYnIpOwpAQCAtMzcxLDEwICs0NTYsOCBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JLyogSWYgbmV3IHRocmVhZCBEQUMgKEhXIGJyZWFrcG9pbnQpIGlzIHRoZSBzYW1lIHRoZW4gbGVhdmUgaXQgKi8KLQlpZiAobmV3LT50aHJlYWQuZGFicikKLQkJc2V0X2RhYnIobmV3LT50aHJlYWQuZGFicik7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCXN3aXRjaF9ib29rZV9kZWJ1Z19yZWdzKCZuZXctPnRocmVhZCk7CiAjZWxzZQogCWlmICh1bmxpa2VseShfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgIT0gbmV3LT50aHJlYWQuZGFicikpCiAJCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOwpAQCAtNTE0LDcgKzU5Nyw3IEBACiAJcHJpbnRrKCIgIENSOiAlMDhseCAgWEVSOiAlMDhseFxuIiwgcmVncy0+Y2NyLCByZWdzLT54ZXIpOwogCXRyYXAgPSBUUkFQKHJlZ3MpOwogCWlmICh0cmFwID09IDB4MzAwIHx8IHRyYXAgPT0gMHg2MDApCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCXByaW50aygiREVBUjogIlJFRyIsIEVTUjogIlJFRyJcbiIsIHJlZ3MtPmRhciwgcmVncy0+ZHNpc3IpOwogI2Vsc2UKIAkJcHJpbnRrKCJEQVI6ICJSRUciLCBEU0lTUjogIlJFRyJcbiIsIHJlZ3MtPmRhciwgcmVncy0+ZHNpc3IpOwpAQCAtNTU2LDE0ICs2MzksNyBAQAogewogCWRpc2NhcmRfbGF6eV9jcHVfc3RhdGUoKTsKIAotCWlmIChjdXJyZW50LT50aHJlYWQuZGFicikgewotCQljdXJyZW50LT50aHJlYWQuZGFiciA9IDA7Ci0JCXNldF9kYWJyKDApOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKTsKLSNlbmRpZgotCX0KKwlzZXRfZGVidWdfcmVnX2RlZmF1bHRzKCZjdXJyZW50LT50aHJlYWQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDRlYzMwMDguLjQzMjM4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02MSwzNjUgKzYxLDEyIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAotCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOwotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKLQogI2lmZGVmIENPTkZJR19QUEM2NAogaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOwogaW50IF9faW5pdGRhdGEgaW9tbXVfZm9yY2Vfb247CiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKICNlbmRpZgogCi10eXBlZGVmIHUzMiBjZWxsX3Q7Ci0KLSNpZiAwCi1zdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zIF9faW5pdGRhdGE7Ci0jZWxzZQotc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zOwotI2VuZGlmCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi0vKiBleHBvcnQgdGhhdCB0byBvdXRzaWRlIHdvcmxkICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQotc3RhdGljIGlubGluZSBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpCi17Ci0JcmV0dXJuICgoY2hhciAqKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cmluZ3MgKyBvZmZzZXQ7Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNjYW4gdGhlIGZsYXR0ZW5lZCBkZXZpY2UtdHJlZSwgaXQgaXMKLSAqIHVzZWQgdG8gZXh0cmFjdCB0aGUgbWVtb3J5IGluZm9ybWF0aW9ucyBhdCBib290IGJlZm9yZSB3ZSBjYW4KLSAqIHVuZmxhdHRlbiB0aGUgdHJlZQotICovCi1pbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkgICAgIHZvaWQgKmRhdGEpLAotCQkJICAgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCWludCByYyA9IDA7Ci0JaW50IGRlcHRoID0gLTE7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJY2hhciAqcGF0aHA7Ci0JCQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJCWRlcHRoIC0tOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkQpCi0JCQlicmVhazsKLQkJaWYgKHRhZyA9PSBPRl9EVF9QUk9QKSB7Ci0JCQl1MzIgc3ogPSAqKCh1MzIgKilwKTsKLQkJCXAgKz0gODsKLQkJCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0JCQlwICs9IHN6OwotCQkJcCA9IF9BTElHTihwLCA0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCB0YWcgJXggc2Nhbm5pbmcgZmxhdHRlbmVkIgotCQkJICAgICAgICIgZGV2aWNlIHRyZWUgIVxuIiwgdGFnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRlcHRoKys7Ci0JCXBhdGhwID0gKGNoYXIgKilwOwotCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7Ci0JCWlmICgoKnBhdGhwKSA9PSAnLycpIHsKLQkJCWNoYXIgKmxwLCAqbnA7Ci0JCQlmb3IgKGxwID0gTlVMTCwgbnAgPSBwYXRocDsgKm5wOyBucCsrKQotCQkJCWlmICgoKm5wKSA9PSAnLycpCi0JCQkJCWxwID0gbnArMTsKLQkJCWlmIChscCAhPSBOVUxMKQotCQkJCXBhdGhwID0gbHA7Ci0JCX0KLQkJcmMgPSBpdChwLCBwYXRocCwgZGVwdGgsIGRhdGEpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwkJCi0JfSB3aGlsZSgxKTsKLQotCXJldHVybiByYzsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0KLQl3aGlsZSgqKCh1MzIgKilwKSA9PSBPRl9EVF9OT1ApCi0JCXAgKz0gNDsKLQlCVUdfT04gKCooKHUzMiAqKXApICE9IE9GX0RUX0JFR0lOX05PREUpOwotCXAgKz0gNDsKLQlyZXR1cm4gX0FMSUdOKHAgKyBzdHJsZW4oKGNoYXIgKilwKSArIDEsIDQpOwotfQotCi0vKioKLSAqIFRoaXMgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBzY2FuX2ZsYXR0ZW5lZF9kdCBjYWxsYmFjayB0byBnZXQKLSAqIGFjY2VzcyB0byBwcm9wZXJ0aWVzCi0gKi8KLXZvaWQqIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9wcm9wKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSBub2RlOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY29uc3QgY2hhciAqbnN0cjsKLQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCXJldHVybiBOVUxMOwotCi0JCXN6ID0gKigodTMyICopcCk7Ci0JCW5vZmYgPSAqKCh1MzIgKikocCArIDQpKTsKLQkJcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChuc3RyID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXgiCi0JCQkgICAgICAgIiBuYW1lICFcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHN0cmNtcChuYW1lLCBuc3RyKSA9PSAwKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IHN6OwotCQkJcmV0dXJuICh2b2lkICopcDsKLQkJfQotCQlwICs9IHN6OwotCQlwID0gX0FMSUdOKHAsIDQpOwotCX0gd2hpbGUoMSk7Ci19Ci0KLWludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQotewotCWNvbnN0IGNoYXIqIGNwOwotCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7Ci0KLQljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlsID0gc3RybGVuKGNwKSArIDE7Ci0JCWNwICs9IGw7Ci0JCWNwbGVuIC09IGw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXZvaWQgKnJlczsKLQotCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOwotCXJlcyA9ICh2b2lkICopKm1lbTsKLQkqbWVtICs9IHNpemU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAsCi0JCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAotCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZwc2l6ZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7Ci0JY2hhciAqcGF0aHA7Ci0JdTMyIHRhZzsKLQl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOwotCWludCBoYXNfbmFtZSA9IDA7Ci0JaW50IG5ld19mb3JtYXQgPSAwOwotCi0JdGFnID0gKigodTMyICopKCpwKSk7Ci0JaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IHN0YXJ0IG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXBhdGhwID0gKGNoYXIgKikqcDsKLQlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKLQotCS8qIHZlcnNpb24gMHgxMCBoYXMgYSBtb3JlIGNvbXBhY3QgdW5pdCBuYW1lIGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVsbAotCSAqIHBhdGguIHdlIGFjY3VtdWxhdGUgdGhlIGZ1bGwgcGF0aCBzaXplIHVzaW5nICJmcHNpemUiLCB3ZSdsbCByZWJ1aWxkCi0JICogaXQgbGF0ZXIuIFdlIGRldGVjdCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmFtZSBpcwotCSAqIG5vdCAnLycuCi0JICovCi0JaWYgKCgqcGF0aHApICE9ICcvJykgewotCQluZXdfZm9ybWF0ID0gMTsKLQkJaWYgKGZwc2l6ZSA9PSAwKSB7Ci0JCQkvKiByb290IG5vZGU6IHNwZWNpYWwgY2FzZS4gZnBzaXplIGFjY291bnRzIGZvciBwYXRoCi0JCQkgKiBwbHVzIHRlcm1pbmF0aW5nIHplcm8uIHJvb3Qgbm9kZSBvbmx5IGhhcyAnLycsIHNvCi0JCQkgKiBmcHNpemUgc2hvdWxkIGJlIDIsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBmaXJzdAotCQkJICogbGV2ZWwgbm9kZXMgdG8gaGF2ZSB0d28gJy8nIHNvIHdlIHVzZSBmcHNpemUgMSBoZXJlCi0JCQkgKi8KLQkJCWZwc2l6ZSA9IDE7Ci0JCQlhbGxvY2wgPSAyOwotCQl9IGVsc2UgewotCQkJLyogYWNjb3VudCBmb3IgJy8nIGFuZCBwYXRoIHNpemUgbWludXMgdGVybWluYWwgMAotCQkJICogYWxyZWFkeSBpbiAnbCcKLQkJCSAqLwotCQkJZnBzaXplICs9IGw7Ci0JCQlhbGxvY2wgPSBmcHNpemU7Ci0JCX0KLQl9Ci0KLQotCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAotCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCWlmIChhbGxuZXh0cHApIHsKLQkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7Ci0JCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIqKW5wKSArIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpOwotCQlpZiAobmV3X2Zvcm1hdCkgewotCQkJY2hhciAqcCA9IG5wLT5mdWxsX25hbWU7Ci0JCQkvKiByZWJ1aWxkIGZ1bGwgcGF0aCBmb3IgbmV3IGZvcm1hdCAqLwotCQkJaWYgKGRhZCAmJiBkYWQtPnBhcmVudCkgewotCQkJCXN0cmNweShwLCBkYWQtPmZ1bGxfbmFtZSk7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZiAoKHN0cmxlbihwKSArIGwgKyAxKSAhPSBhbGxvY2wpIHsKLQkJCQkJREJHKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKLQkJCQkJICAgIHBhdGhwLCAoaW50KXN0cmxlbihwKSwgbCwgYWxsb2NsKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlwICs9IHN0cmxlbihwKTsKLQkJCX0KLQkJCSoocCsrKSA9ICcvJzsKLQkJCW1lbWNweShwLCBwYXRocCwgbCk7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKLQkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKLQkJKiphbGxuZXh0cHAgPSBucDsKLQkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKLQkJaWYgKGRhZCAhPSBOVUxMKSB7Ci0JCQlucC0+cGFyZW50ID0gZGFkOwotCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCi0JCQlpZiAoZGFkLT5uZXh0ID09IDApCi0JCQkJZGFkLT5jaGlsZCA9IG5wOwotCQkJZWxzZQotCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOwotCQkJZGFkLT5uZXh0ID0gbnA7Ci0JCX0KLQkJa3JlZl9pbml0KCZucC0+a3JlZik7Ci0JfQotCXdoaWxlKDEpIHsKLQkJdTMyIHN6LCBub2ZmOwotCQljaGFyICpwbmFtZTsKLQotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKLQkJCSpwICs9IDQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlicmVhazsKLQkJKnAgKz0gNDsKLQkJc3ogPSAqKCh1MzIgKikoKnApKTsKLQkJbm9mZiA9ICooKHUzMiAqKSgoKnApICsgNCkpOwotCQkqcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkqcCA9IF9BTElHTigqcCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQlwbmFtZSA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChwbmFtZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQotCQkJaGFzX25hbWUgPSAxOwotCQlsID0gc3RybGVuKHBuYW1lKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJaWYgKHN0cmNtcChwbmFtZSwgImxpbnV4LHBoYW5kbGUiKSA9PSAwKSB7Ci0JCQkJbnAtPm5vZGUgPSAqKCh1MzIgKikqcCk7Ci0JCQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IDApCi0JCQkJCW5wLT5saW51eF9waGFuZGxlID0gbnAtPm5vZGU7Ci0JCQl9Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAiaWJtLHBoYW5kbGUiKSA9PSAwKQotCQkJCW5wLT5saW51eF9waGFuZGxlID0gKigodTMyICopKnApOwotCQkJcHAtPm5hbWUgPSBwbmFtZTsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9ICh2b2lkICopKnA7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJfQotCQkqcCA9IF9BTElHTigoKnApICsgc3osIDQpOwotCX0KLQkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCi0JICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50Ci0JICovCi0JaWYgKCFoYXNfbmFtZSkgewotCQljaGFyICpwID0gcGF0aHAsICpwcyA9IHBhdGhwLCAqcGEgPSBOVUxMOwotCQlpbnQgc3o7Ci0KLQkJd2hpbGUgKCpwKSB7Ci0JCQlpZiAoKCpwKSA9PSAnQCcpCi0JCQkJcGEgPSBwOwotCQkJaWYgKCgqcCkgPT0gJy8nKQotCQkJCXBzID0gcCArIDE7Ci0JCQlwKys7Ci0JCX0KLQkJaWYgKHBhIDwgcHMpCi0JCQlwYSA9IHA7Ci0JCXN6ID0gKHBhIC0gcHMpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCXBwLT5uYW1lID0gIm5hbWUiOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gcHAgKyAxOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKLQkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7Ci0JCQlEQkcoImZpeGVkIHVwIG5hbWUgZm9yICVzIC0+ICVzXG4iLCBwYXRocCwKLQkJCQkoY2hhciAqKXBwLT52YWx1ZSk7Ci0JCX0KLQl9Ci0JaWYgKGFsbG5leHRwcCkgewotCQkqcHJldl9wcCA9IE5VTEw7Ci0JCW5wLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQlucC0+dHlwZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0KLQkJaWYgKCFucC0+bmFtZSkKLQkJCW5wLT5uYW1lID0gIjxOVUxMPiI7Ci0JCWlmICghbnAtPnR5cGUpCi0JCQlucC0+dHlwZSA9ICI8TlVMTD4iOwotCX0KLQl3aGlsZSAodGFnID09IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJbWVtID0gdW5mbGF0dGVuX2R0X25vZGUobWVtLCBwLCBucCwgYWxsbmV4dHBwLCBmcHNpemUpOwotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQl9Ci0JaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgewotCQlwcmludGsoIldlaXJkIHRhZyBhdCBlbmQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcmV0dXJuIG1lbTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCiB7CiAJaWYgKCFwKQpAQCAtNDQ2LDcgKzkzLDcgQEAKIAlEQkcoIi0+IG1vdmVfZGV2aWNlX3RyZWVcbiIpOwogCiAJc3RhcnQgPSBfX3BhKGluaXRpYWxfYm9vdF9wYXJhbXMpOwotCXNpemUgPSBpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemU7CisJc2l6ZSA9IGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZSk7CiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IG1lbW9yeV9saW1pdCkgfHwKIAkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSkgewpAQCAtNDU5LDU0ICsxMDYsNiBAQAogCURCRygiPC0gbW92ZV9kZXZpY2VfdHJlZVxuIik7CiB9CiAKLS8qKgotICogdW5mbGF0dGVucyB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgdGhlCi0gKiB0cmVlIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4gSXQgYWxzbyBmaWxscyB0aGUgIm5hbWUiIGFuZCAidHlwZSIKLSAqIHBvaW50ZXJzIG9mIHRoZSBub2RlcyBzbyB0aGUgbm9ybWFsIGRldmljZS10cmVlIHdhbGtpbmcgZnVuY3Rpb25zCi0gKiBjYW4gYmUgdXNlZCAodGhpcyB1c2VkIHRvIGJlIGRvbmUgYnkgZmluaXNoX2RldmljZV90cmVlKQotICovCi12b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0KLQlEQkcoIiAtPiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci0KLQkvKiBGaXJzdCBwYXNzLCBzY2FuIGZvciBzaXplICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOwotCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKLQotCURCRygiICBzaXplIGlzICVseCwgYWxsb2NhdGluZy4uLlxuIiwgc2l6ZSk7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBleHBhbmRlZCBkZXZpY2UgdHJlZSAqLwotCW1lbSA9IGxtYl9hbGxvYyhzaXplICsgNCwgX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JbWVtID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEobWVtKTsKLQotCSgodTMyICopbWVtKVtzaXplIC8gNF0gPSAweGRlYWRiZWVmOwotCi0JREJHKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7Ci0KLQkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQl1bmZsYXR0ZW5fZHRfbm9kZShtZW0sICZzdGFydCwgTlVMTCwgJmFsbG5leHRwLCAwKTsKLQlpZiAoKigodTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLCAqKCh1MzIgKilzdGFydCkpOwotCWlmICgoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdICE9IDB4ZGVhZGJlZWYpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVuZCBvZiB0cmVlIG1hcmtlciBvdmVyd3JpdHRlbjogJTA4eFxuIiwKLQkJICAgICAgICgodTMyICopbWVtKVtzaXplIC8gNF0gKTsKLQkqYWxsbmV4dHAgPSBOVUxMOwotCi0JLyogR2V0IHBvaW50ZXIgdG8gT0YgIi9jaG9zZW4iIG5vZGUgZm9yIHVzZSBldmVyeXdoZXJlICovCi0Jb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKLQlpZiAob2ZfY2hvc2VuID09IE5VTEwpCi0JCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKLQotCURCRygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLX0KLQogLyoKICAqIGlibSxwYS1mZWF0dXJlcyBpcyBhIHBlci1jcHUgcHJvcGVydHkgdGhhdCBjb250YWlucyBhIHN0cmluZyBvZgogICogYXR0cmlidXRlIGRlc2NyaXB0b3JzLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIgYnl0ZSBoZWFkZXIgcGx1cyB1cApAQCAtNzYzLDQ4ICszNjIsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JdTMyICpwcm9wOwotCi0JREJHKCJMb29raW5nIGZvciBpbml0cmQgcHJvcGVydGllcy4uLiAiKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbCk7Ci0JaWYgKHByb3ApIHsKLQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShvZl9yZWFkX3Vsb25nKHByb3AsIGwvNCkpOwotCi0JCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmwpOwotCQlpZiAocHJvcCkgewotCQkJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQlfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0JCQlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwotCQl9IGVsc2UgewotCQkJaW5pdHJkX3N0YXJ0ID0gMDsKLQkJfQotCX0KLQotCURCRygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKQogewogCXVuc2lnbmVkIGxvbmcgKmxwcm9wOwotCXVuc2lnbmVkIGxvbmcgbDsKLQljaGFyICpwOwotCi0JREJHKCJzZWFyY2ggXCJjaG9zZW5cIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7Ci0KLQlpZiAoZGVwdGggIT0gMSB8fAotCSAgICAoc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCAmJiBzdHJjbXAodW5hbWUsICJjaG9zZW5AMCIpICE9IDApKQotCQlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIGNoZWNrIGlmIGlvbW11IGlzIGZvcmNlZCBvbiBvciBvZmYgKi8KQEAgLTgxNSwxNyArMzc1LDE3IEBACiAjZW5kaWYKIAogCS8qIG1lbT14IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgdGhlIHByZWZlcnJlZCBtZWNoYW5pc20gKi8KLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxtZW1vcnktbGltaXQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJbWVtb3J5X2xpbWl0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsbWVtb3J5LWxpbWl0IiwgTlVMTCk7CisJaWYgKGxwcm9wKQorCQltZW1vcnlfbGltaXQgPSAqbHByb3A7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOwotIAlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKKwlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLWVuZCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tFWEVDCkBAIC04MzcsNTEgKzM5Nyw2IEBACiAJaWYgKGxwcm9wKQogCQljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyAqbHByb3AgLSAxOwogI2VuZGlmCi0KLQllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7Ci0KLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KLSAJcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImJvb3RhcmdzIiwgJmwpOwotCWlmIChwICE9IE5VTEwgJiYgbCA+IDApCi0JCXN0cmxjcHkoY21kX2xpbmUsIHAsIG1pbigoaW50KWwsIENPTU1BTkRfTElORV9TSVpFKSk7Ci0KLSNpZmRlZiBDT05GSUdfQ01ETElORQotCWlmIChwID09IE5VTEwgfHwgbCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JREJHKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JdTMyICpwcm9wOwotCi0JaWYgKGRlcHRoICE9IDApCi0JCXJldHVybiAwOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNzaXplLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9zaXplX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAxIDogKnByb3A7Ci0JREJHKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3RfYWRkcl9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMiA6ICpwcm9wOwotCURCRygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7Ci0JCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIGNlbGxfdCAqKmNlbGxwKQotewotCWNlbGxfdCAqcCA9ICpjZWxscDsKLQotCSpjZWxscCA9IHAgKyBzOwotCXJldHVybiBvZl9yZWFkX251bWJlcihwLCBzKTsKIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpAQCAtODkzLDIyICs0MDgsMjIgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlKQogewotCWNlbGxfdCAqZG0sICpscywgKnVzbTsKKwlfX2JlMzIgKmRtLCAqbHMsICp1c207CiAJdW5zaWduZWQgbG9uZyBsLCBuLCBmbGFnczsKIAl1NjQgYmFzZSwgc2l6ZSwgbG1iX3NpemU7CiAJdW5zaWduZWQgaW50IGlzX2tleGVjX2tkdW1wID0gMCwgcm5nczsKIAogCWxzID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwotCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobHMgPT0gTlVMTCB8fCBsIDwgZHRfcm9vdF9zaXplX2NlbGxzICogc2l6ZW9mKF9fYmUzMikpCiAJCXJldHVybiAwOwogCWxtYl9zaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZscyk7CiAKIAlkbSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxkeW5hbWljLW1lbW9yeSIsICZsKTsKLQlpZiAoZG0gPT0gTlVMTCB8fCBsIDwgc2l6ZW9mKGNlbGxfdCkpCisJaWYgKGRtID09IE5VTEwgfHwgbCA8IHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKIAogCW4gPSAqZG0rKzsJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KLQlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoX19iZTMyKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsLiAqLwpAQCAtOTYzLDY2ICs0NzgsNDggQEAKICNkZWZpbmUgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSkJMAogI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5X3BwYyh1bnNpZ25lZCBsb25nIG5vZGUsCisJCQkJCQljb25zdCBjaGFyICp1bmFtZSwKKwkJCQkJCWludCBkZXB0aCwgdm9pZCAqZGF0YSkKIHsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQljZWxsX3QgKnJlZywgKmVuZHA7Ci0JdW5zaWduZWQgbG9uZyBsOwotCi0JLyogTG9vayBmb3IgdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgbm9kZSAqLwogCWlmIChkZXB0aCA9PSAxICYmCiAJICAgIHN0cmNtcCh1bmFtZSwgImlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKSA9PSAwKQogCQlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSk7Ci0KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwpIHsKLQkJLyoKLQkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKLQkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgotCQkgKi8KLQkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKGNlbGxfdCkpOwotCi0JREJHKCJtZW1vcnkgc2NhbiBub2RlICVzLCByZWcgc2l6ZSAlbGQsIGRhdGE6ICV4ICV4ICV4ICV4LFxuIiwKLQkgICAgdW5hbWUsIGwsIHJlZ1swXSwgcmVnWzFdLCByZWdbMl0sIHJlZ1szXSk7Ci0KLQl3aGlsZSAoKGVuZHAgLSByZWcpID49IChkdF9yb290X2FkZHJfY2VsbHMgKyBkdF9yb290X3NpemVfY2VsbHMpKSB7Ci0JCXU2NCBiYXNlLCBzaXplOwotCi0JCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7Ci0JCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlEQkcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJaWYgKGlvbW11X2lzX29mZikgewotCQkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCi0JCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7Ci0JCX0KLSNlbmRpZgotCQlsbWJfYWRkKGJhc2UsIHNpemUpOwotCi0JCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwkKKwlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeShub2RlLCB1bmFtZSwgZGVwdGgsIGRhdGEpOwogfQogCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisJaWYgKGlvbW11X2lzX29mZikgeworCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCisJCQlyZXR1cm47CisJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CisJfQorI2VuZGlmCisKKwlsbWJfYWRkKGJhc2UsIHNpemUpOworCisJbWVtc3RhcnRfYWRkciA9IG1pbigodTY0KW1lbXN0YXJ0X2FkZHIsIGJhc2UpOworfQorCit1NjQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlyZXR1cm4gbG1iX2FsbG9jKHNpemUsIGFsaWduKTsKK30KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKKwlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpX192YShlbmQpOworCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtKHZvaWQpCiB7CiAJdTY0IGJhc2UsIHNpemU7CkBAIC0xMTg2LDcgKzY4Myw3IEBACiAJLyogU2NhbiBtZW1vcnkgbm9kZXMgYW5kIHJlYnVpbGQgTE1CcyAqLwogCWxtYl9pbml0KCk7CiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9yb290LCBOVUxMKTsKLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSwgTlVMTCk7CisJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnlfcHBjLCBOVUxMKTsKIAogCS8qIFNhdmUgY29tbWFuZCBsaW5lIGZvciAvcHJvYy9jbWRsaW5lIGFuZCB0aGVuIHBhcnNlIHBhcmFtZXRlcnMgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBjbWRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwpAQCAtMTIzNCwyNSArNzMxLDYgQEAKIAlEQkcoIiA8LSBlYXJseV9pbml0X2RldnRyZWUoKVxuIik7CiB9CiAKLQotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBub2RlIGhhcyBhIGdpdmVuIHZhbHVlIGluIGl0cwotICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KLSAqLwotaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwotCWludCByYyA9IDA7Ci0KLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkgewotCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7Ci0JCW9mX25vZGVfcHV0KHJvb3QpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfaXNfY29tcGF0aWJsZSk7Ci0KIC8qKioqKioqCiAgKgogICogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBPRiAiZmluZCIgQVBJcywgcmV0dXJuIGEgcmVmY291bnRlZApAQCAtMTI2NSwyNyArNzQzLDYgQEAKICAqKioqKioqLwogCiAvKioKLSAqCW9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCi0gKglAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKLSAqCi0gKglSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQotICoJb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wICE9IDA7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQlvZl9ub2RlX2dldChucCk7Ci0JcmVhZF91bmxvY2soJmRldnRyZWVfbG9jayk7Ci0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KLS8qKgogICoJb2ZfZmluZF9uZXh0X2NhY2hlX25vZGUgLSBGaW5kIGEgbm9kZSdzIHN1YnNpZGlhcnkgY2FjaGUKICAqCUBucDoJbm9kZSBvZiB0eXBlICJjcHUiIG9yICJjYWNoZSIKICAqCkBAIC0xMzE2LDEzOCArNzczLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoqCi0gKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKglSZXR1cm5zIG5vZGUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7Ci0JcmV0dXJuIG5vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBrcmVmX3RvX2RldmljZV9ub2RlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXJldHVybiBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRldmljZV9ub2RlLCBrcmVmKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3JlbGVhc2UgLSByZWxlYXNlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG5vZGUKLSAqCUBrcmVmOiAga3JlZiBlbGVtZW50IG9mIHRoZSBub2RlIHRvIGJlIHJlbGVhc2VkCi0gKgotICoJSW4gb2Zfbm9kZV9wdXQoKSB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBrcmVmX3B1dCgpCi0gKglhcyB0aGUgZGVzdHJ1Y3Rvci4KLSAqLwotc3RhdGljIHZvaWQgb2Zfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGtyZWZfdG9fZGV2aWNlX25vZGUoa3JlZik7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gbm9kZS0+cHJvcGVydGllczsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSByZWxlYXNpbmcgbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGV0YWNoZWQuICovCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpKSB7Ci0JCXByaW50aygiV0FSTklORzogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAocHJvcCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OwotCQlrZnJlZShwcm9wLT5uYW1lKTsKLQkJa2ZyZWUocHJvcC0+dmFsdWUpOwotCQlrZnJlZShwcm9wKTsKLQkJcHJvcCA9IG5leHQ7Ci0KLQkJaWYgKCFwcm9wKSB7Ci0JCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOwotCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKLQkJfQotCX0KLQlrZnJlZShub2RlLT5mdWxsX25hbWUpOwotCWtmcmVlKG5vZGUtPmRhdGEpOwotCWtmcmVlKG5vZGUpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqLwotdm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7Ci0KLS8qCi0gKiBQbHVnIGEgZGV2aWNlIG5vZGUgaW50byB0aGUgdHJlZSBhbmQgZ2xvYmFsIGxpc3QuCi0gKi8KLXZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQlucC0+c2libGluZyA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCW5wLT5hbGxuZXh0ID0gYWxsbm9kZXM7Ci0JbnAtPnBhcmVudC0+Y2hpbGQgPSBucDsKLQlhbGxub2RlcyA9IG5wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqICJVbnBsdWciIGEgbm9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gIFRoZSBjYWxsZXIgbXVzdCBob2xkCi0gKiBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gIFRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCi0gKiBpcyBub3QgZnJlZWQgdW50aWwgaXRzIHJlZmNvdW50IGdvZXMgdG8gemVyby4KLSAqLwotdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JcGFyZW50ID0gbnAtPnBhcmVudDsKLQlpZiAoIXBhcmVudCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JaWYgKGFsbG5vZGVzID09IG5wKQotCQlhbGxub2RlcyA9IG5wLT5hbGxuZXh0OwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXY7Ci0JCWZvciAocHJldiA9IGFsbG5vZGVzOwotCQkgICAgIHByZXYtPmFsbG5leHQgIT0gbnA7Ci0JCSAgICAgcHJldiA9IHByZXYtPmFsbG5leHQpCi0JCQk7Ci0JCXByZXYtPmFsbG5leHQgPSBucC0+YWxsbmV4dDsKLQl9Ci0KLQlpZiAocGFyZW50LT5jaGlsZCA9PSBucCkKLQkJcGFyZW50LT5jaGlsZCA9IG5wLT5zaWJsaW5nOwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXZzaWI7Ci0JCWZvciAocHJldnNpYiA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCQkgICAgIHByZXZzaWItPnNpYmxpbmcgIT0gbnA7Ci0JCSAgICAgcHJldnNpYiA9IHByZXZzaWItPnNpYmxpbmcpCi0JCQk7Ci0JCXByZXZzaWItPnNpYmxpbmcgPSBucC0+c2libGluZzsKLQl9Ci0KLQlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9ERVRBQ0hFRCk7Ci0KLW91dF91bmxvY2s6Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgogICogRml4IHVwIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhIG5ldyBkZXZpY2Ugbm9kZToKQEAgLTE0NzksOSArODA0LDkgQEAKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogZml4IHVwIG5ldyBub2RlJ3MgbGludXhfcGhhbmRsZSBmaWVsZCAqLworCS8qIGZpeCB1cCBuZXcgbm9kZSdzIHBoYW5kbGUgZmllbGQgKi8KIAlpZiAoKGlibV9waGFuZGxlID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJpYm0scGhhbmRsZSIsIE5VTEwpKSkKLQkJbm9kZS0+bGludXhfcGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKKwkJbm9kZS0+cGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKIAogb3V0OgogCW9mX25vZGVfcHV0KHBhcmVudCk7CkBAIC0xNTIwLDEyMCArODQ1LDYgQEAKIF9faW5pdGNhbGwocHJvbV9yZWNvbmZpZ19zZXR1cCk7CiAjZW5kaWYKIAotLyoKLSAqIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQotICovCi1pbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlKiBucCwgc3RydWN0IHByb3BlcnR5KiBwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByb3AtPm5leHQgPSBOVUxMOwkKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgewotCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCi0JCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQkqbmV4dCA9IHByb3A7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KLSAqLwotaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQkqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgYW5kIGFkZCB0aGUgbmV3IHByb3BlcnR5IHRvIHRoZQotICogcHJvcGVydHkgbGlzdAotICovCi1pbnQgcHJvbV91cGRhdGVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm5ld3Byb3AsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpvbGRwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gb2xkcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCW5ld3Byb3AtPm5leHQgPSBvbGRwcm9wLT5uZXh0OwotCQkJKm5leHQgPSBuZXdwcm9wOwotCQkJb2xkcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gb2xkcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfdXBkYXRlX3Byb3AobnAtPnBkZSwgbmV3cHJvcCwgb2xkcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyogRmluZCB0aGUgZGV2aWNlIG5vZGUgZm9yIGEgZ2l2ZW4gbG9naWNhbCBjcHUgbnVtYmVyLCBhbHNvIHJldHVybnMgdGhlIGNwdQogICogbG9jYWwgdGhyZWFkIG51bWJlciAoaW5kZXggaW4gaWJtLGludGVycnVwdC1zZXJ2ZXIjcykgaWYgcmVsZXZhbnQgYW5kCiAgKiBhc2tlZCBmb3IgKG5vbiBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggYmFmYWMyZS4uNWYzMDZjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC02NTQsNiArNjU0LDkgQEAKICNkZWZpbmUgT1Y1X0NNTwkJCTB4MDAKICNlbmRpZgogCisvKiBPcHRpb24gVmVjdG9yIDY6IElCTSBQQVBSIGhpbnRzICovCisjZGVmaW5lIE9WNl9MSU5VWAkJMHgwMgkvKiBMaW51eCBpcyBvdXIgT1MgKi8KKwogLyoKICAqIFRoZSBhcmNoaXRlY3R1cmUgdmVjdG9yIGhhcyBhbiBhcnJheSBvZiBQVlIgbWFzay92YWx1ZSBwYWlycywKICAqIGZvbGxvd2VkIGJ5ICMgb3B0aW9uIHZlY3RvcnMgLSAxLCBmb2xsb3dlZCBieSB0aGUgb3B0aW9uIHZlY3RvcnMuCkBAIC02NjUsNyArNjY4LDcgQEAKIAlXKDB4ZmZmZmZmZmYpLCBXKDB4MGYwMDAwMDMpLAkvKiBhbGwgMi4wNi1jb21wbGlhbnQgKi8KIAlXKDB4ZmZmZmZmZmYpLCBXKDB4MGYwMDAwMDIpLAkvKiBhbGwgMi4wNS1jb21wbGlhbnQgKi8KIAlXKDB4ZmZmZmZmZmUpLCBXKDB4MGYwMDAwMDEpLAkvKiBhbGwgMi4wNC1jb21wbGlhbnQgYW5kIGVhcmxpZXIgKi8KLQk1IC0gMSwJCQkJLyogNSBvcHRpb24gdmVjdG9ycyAqLworCTYgLSAxLAkJCQkvKiA2IG9wdGlvbiB2ZWN0b3JzICovCiAKIAkvKiBvcHRpb24gdmVjdG9yIDE6IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCAqLwogCTMgLSAyLAkJCQkvKiBsZW5ndGggKi8KQEAgLTY5NywxMiArNzAwLDI5IEBACiAJMCwJCQkJLyogZG9uJ3QgaGFsdCAqLwogCiAJLyogb3B0aW9uIHZlY3RvciA1OiBQQVBSL09GIG9wdGlvbnMgKi8KLQk1IC0gMiwJCQkJLyogbGVuZ3RoICovCisJMTMgLSAyLAkJCQkvKiBsZW5ndGggKi8KIAkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KIAlPVjVfTFBBUiB8IE9WNV9TUExQQVIgfCBPVjVfTEFSR0VfUEFHRVMgfCBPVjVfRFJDT05GX01FTU9SWSB8CiAJT1Y1X0RPTkFURV9ERURJQ0FURV9DUFUgfCBPVjVfTVNJLAogCTAsCiAJT1Y1X0NNTywKKwkwLAorCTAsCisJMCwKKwkwLAorCS8qIFdBUk5JTkc6IFRoZSBvZmZzZXQgb2YgdGhlICJudW1iZXIgb2YgY29yZXMiIGZpZWxkIGJlbG93CisJICogbXVzdCBtYXRjaCBieSB0aGUgbWFjcm8gYmVsb3cuIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbiBpZgorCSAqIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IGNoYW5nZXMuCisJICovCisjZGVmaW5lIElCTV9BUkNIX1ZFQ19OUkNPUkVTX09GRlNFVAkxMDAKKwlXKE5SX0NQVVMpLAkJCS8qIG51bWJlciBvZiBjb3JlcyBzdXBwb3J0ZWQgKi8KKworCS8qIG9wdGlvbiB2ZWN0b3IgNjogSUJNIFBBUFIgaGludHMgKi8KKwk0IC0gMiwJCQkJLyogbGVuZ3RoICovCisJMCwKKwkwLAorCU9WNl9MSU5VWCwKKwogfTsKIAogLyogT2xkIG1ldGhvZCAtIEVMRiBoZWFkZXIgd2l0aCBQVF9OT1RFIHNlY3Rpb25zICovCkBAIC03OTIsMTMgKzgxMiw3MCBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IHByb21fY291bnRfc210X3RocmVhZHModm9pZCkKK3sKKwlwaGFuZGxlIG5vZGU7CisJY2hhciB0eXBlWzY0XTsKKwl1bnNpZ25lZCBpbnQgcGxlbjsKKworCS8qIFBpY2sgdXAgdGggZmlyc3QgQ1BVIG5vZGUgd2UgY2FuIGZpbmQgKi8KKwlmb3IgKG5vZGUgPSAwOyBwcm9tX25leHRfbm9kZSgmbm9kZSk7ICkgeworCQl0eXBlWzBdID0gMDsKKwkJcHJvbV9nZXRwcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIHR5cGUsIHNpemVvZih0eXBlKSk7CisKKwkJaWYgKHN0cmNtcCh0eXBlLCBSRUxPQygiY3B1IikpKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFRoZXJlIGlzIGFuIGVudHJ5IGZvciBlYWNoIHNtdCB0aHJlYWQsIGVhY2ggZW50cnkgYmVpbmcKKwkJICogNCBieXRlcyBsb25nLiAgQWxsIGNwdXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mCisJCSAqIHNtdCB0aHJlYWRzLCBzbyByZXR1cm4gYWZ0ZXIgZmluZGluZyB0aGUgZmlyc3QuCisJCSAqLworCQlwbGVuID0gcHJvbV9nZXRwcm9wbGVuKG5vZGUsICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIpOworCQlpZiAocGxlbiA9PSBQUk9NX0VSUk9SKQorCQkJYnJlYWs7CisJCXBsZW4gPj49IDI7CisJCXByb21fZGVidWcoIkZvdW5kIDB4JXggc210IHRocmVhZHMgcGVyIGNvcmVcbiIsICh1bnNpZ25lZCBsb25nKXBsZW4pOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAocGxlbiA8IDEgfHwgcGxlbiA+IDY0KSB7CisJCQlwcm9tX3ByaW50ZigiVGhyZWFkcyBwZXIgY29yZSAweCV4IG91dCBvZiBib3VuZHMsIGFzc3VtaW5nIDFcbiIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKXBsZW4pOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIHBsZW47CisJfQorCXByb21fZGVidWcoIk5vIHRocmVhZHMgZm91bmQsIGFzc3VtaW5nIDEgcGVyIGNvcmVcbiIpOworCisJcmV0dXJuIDE7CisKK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9zZW5kX2NhcGFiaWxpdGllcyh2b2lkKQogewogCWloYW5kbGUgZWxmbG9hZGVyLCByb290OwogCXByb21fYXJnX3QgcmV0OworCXUzMiAqY29yZXM7CiAKIAlyb290ID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiLyIpKTsKIAlpZiAocm9vdCAhPSAwKSB7CisJCS8qIFdlIG5lZWQgdG8gdGVsbCB0aGUgRlcgYWJvdXQgdGhlIG51bWJlciBvZiBjb3JlcyB3ZSBzdXBwb3J0LgorCQkgKgorCQkgKiBUbyBkbyB0aGF0LCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgb24gdGhlIGZpcnN0IGNvcmUKKwkJICogKHdlIGFzc3VtZSB0aGlzIGlzIHRoZSBzYW1lIGZvciBhbGwgY29yZXMpIGFuZCB1c2UgaXQgdG8KKwkJICogZGl2aWRlIE5SX0NQVVMuCisJCSAqLworCQljb3JlcyA9ICh1MzIgKilQVFJSRUxPQygmaWJtX2FyY2hpdGVjdHVyZV92ZWNbSUJNX0FSQ0hfVkVDX05SQ09SRVNfT0ZGU0VUXSk7CisJCWlmICgqY29yZXMgIT0gTlJfQ1BVUykgeworCQkJcHJvbV9wcmludGYoIldBUk5JTkcgISAiCisJCQkJICAgICJpYm1fYXJjaGl0ZWN0dXJlX3ZlYyBzdHJ1Y3R1cmUgaW5jb25zaXN0ZW50OiAweCV4ICFcbiIsCisJCQkJICAgICpjb3Jlcyk7CisJCX0gZWxzZSB7CisJCQkqY29yZXMgPSBOUl9DUFVTIC8gcHJvbV9jb3VudF9zbXRfdGhyZWFkcygpOworCQkJcHJvbV9wcmludGYoIk1heCBudW1iZXIgb2YgY29yZXMgcGFzc2VkIHRvIGZpcm13YXJlOiAweCV4XG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykqY29yZXMpOworCQl9CisKIAkJLyogdHJ5IGNhbGxpbmcgdGhlIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgbWV0aG9kICovCiAJCXByb21fcHJpbnRmKCJDYWxsaW5nIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQuLi4iKTsKIAkJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJnJldCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IGVmMTQ5ODguLmQ5YjA1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDYsNyArNDYsNyBAQAogLyoKICAqIFNldCBvZiBtc3IgYml0cyB0aGF0IGdkYiBjYW4gY2hhbmdlIG9uIGJlaGFsZiBvZiBhIHByb2Nlc3MuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICNkZWZpbmUgTVNSX0RFQlVHQ0hBTkdFCTAKICNlbHNlCiAjZGVmaW5lIE1TUl9ERUJVR0NIQU5HRQkoTVNSX1NFIHwgTVNSX0JFKQpAQCAtNzAzLDcgKzcwMyw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKIAogCWlmIChyZWdzICE9IE5VTEwpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9CVDsKIAkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETSB8IERCQ1IwX0lDOwogCQlyZWdzLT5tc3IgfD0gTVNSX0RFOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKIAogCWlmIChyZWdzICE9IE5VTEwpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQzsKIAkJdGFzay0+dGhyZWFkLmRiY3IwID0gREJDUjBfSURNIHwgREJDUjBfQlQ7CiAJCXJlZ3MtPm1zciB8PSBNU1JfREU7CkBAIC03MzcsMTcgKzczNywyNSBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCS8qIElmIERBQyBkb24ndCBjbGVhciBEQkNST19JRE0gb3IgTVNSX0RFICovCi0JCWlmICh0YXNrLT50aHJlYWQuZGFicikKLQkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQpOwotCQllbHNlIHsKLQkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQgfCBEQkNSMF9JRE0pOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJLyoKKwkJICogVGhlIGxvZ2ljIHRvIGRpc2FibGUgc2luZ2xlIHN0ZXBwaW5nIHNob3VsZCBiZSBhcworCQkgKiBzaW1wbGUgYXMgdHVybmluZyBvZmYgdGhlIEluc3RydWN0aW9uIENvbXBsZXRlIGZsYWcuCisJCSAqIEFuZCwgYWZ0ZXIgZG9pbmcgc28sIGlmIGFsbCBkZWJ1ZyBmbGFncyBhcmUgb2ZmLCB0dXJuCisJCSAqIG9mZiBEQkNSMChJRE0pIGFuZCBNU1IoREUpIC4uLi4gVG9yZXoKKwkJICovCisJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CisJCS8qCisJCSAqIFRlc3QgdG8gc2VlIGlmIGFueSBvZiB0aGUgREJDUl9BQ1RJVkVfRVZFTlRTIGJpdHMgYXJlIHNldC4KKwkJICovCisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKHRhc2stPnRocmVhZC5kYmNyMCwKKwkJCQkJdGFzay0+dGhyZWFkLmRiY3IxKSkgeworCQkJLyoKKwkJCSAqIEFsbCBkZWJ1ZyBldmVudHMgd2VyZSBvZmYuLi4uLgorCQkJICovCisJCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKIAkJCXJlZ3MtPm1zciAmPSB+TVNSX0RFOwogCQl9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR180MHgpCi0JCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQgfCBEQkNSMF9JRE0pOwotCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKICNlbHNlCiAJCXJlZ3MtPm1zciAmPSB+KE1TUl9TRSB8IE1TUl9CRSk7CiAjZW5kaWYKQEAgLTc2OSw4ICs3NzcsNyBAQAogCWlmICgoZGF0YSAmIH4weDdVTCkgPj0gVEFTS19TSVpFKQogCQlyZXR1cm4gLUVJTzsKIAotI2lmbmRlZiBDT05GSUdfQk9PS0UKLQorI2lmbmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJLyogRm9yIHByb2Nlc3NvcnMgdXNpbmcgREFCUiAoaS5lLiA5NzApLCB0aGUgYm90dG9tIDMgYml0cyBhcmUgZmxhZ3MuCiAJICogIEl0IHdhcyBhc3N1bWVkLCBvbiBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgMyBiaXRzIHdlcmUKIAkgKiAgcGFzc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGRhdGEgYWRkcmVzcywgZml0dGluZyB0aGUgZGVzaWduIG9mIHRoZQpAQCAtNzg5LDIxICs3OTYsMjIgQEAKIAogCS8qIE1vdmUgY29udGVudHMgdG8gdGhlIERBQlIgcmVnaXN0ZXIgKi8KIAl0YXNrLT50aHJlYWQuZGFiciA9IGRhdGE7Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCisjZWxzZSAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiAJLyogQXMgZGVzY3JpYmVkIGFib3ZlLCBpdCB3YXMgYXNzdW1lZCAzIGJpdHMgd2VyZSBwYXNzZWQgd2l0aCB0aGUgZGF0YQogCSAqICBhZGRyZXNzLCBidXQgd2Ugd2lsbCBhc3N1bWUgb25seSB0aGUgbW9kZSBiaXRzIHdpbGwgYmUgcGFzc2VkCiAJICogIGFzIHRvIG5vdCBjYXVzZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIGZvciBEQUMtYmFzZWQgcHJvY2Vzc29ycy4KIAkgKi8KIAogCS8qIERBQydzIGhvbGQgdGhlIHdob2xlIGFkZHJlc3Mgd2l0aG91dCBhbnkgbW9kZSBmbGFncyAqLwotCXRhc2stPnRocmVhZC5kYWJyID0gZGF0YSAmIH4weDNVTDsKKwl0YXNrLT50aHJlYWQuZGFjMSA9IGRhdGEgJiB+MHgzVUw7CiAKLQlpZiAodGFzay0+dGhyZWFkLmRhYnIgPT0gMCkgewotCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVyB8IERCQ1IwX0lETSk7Ci0JCXRhc2stPnRocmVhZC5yZWdzLT5tc3IgJj0gfk1TUl9ERTsKKwlpZiAodGFzay0+dGhyZWFkLmRhYzEgPT0gMCkgeworCQlkYmNyX2RhYyh0YXNrKSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKwkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFModGFzay0+dGhyZWFkLmRiY3IwLAorCQkJCQl0YXNrLT50aHJlYWQuZGJjcjEpKSB7CisJCQl0YXNrLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgxNCwxNyArODIyLDE3IEBACiAKIAkvKiBTZXQgdGhlIEludGVybmFsIERlYnVnZ2luZyBmbGFnIChJRE0gYml0IDEpIGZvciB0aGUgREJDUjAKIAkgICByZWdpc3RlciAqLwotCXRhc2stPnRocmVhZC5kYmNyMCA9IERCQ1IwX0lETTsKKwl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOwogCiAJLyogQ2hlY2sgZm9yIHdyaXRlIGFuZCByZWFkIGZsYWdzIGFuZCBzZXQgREJDUjAKIAkgICBhY2NvcmRpbmdseSAqLworCWRiY3JfZGFjKHRhc2spICY9IH4oREJDUl9EQUMxUnxEQkNSX0RBQzFXKTsKIAlpZiAoZGF0YSAmIDB4MVVMKQotCQl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJTUl9EQUMxUjsKKwkJZGJjcl9kYWModGFzaykgfD0gREJDUl9EQUMxUjsKIAlpZiAoZGF0YSAmIDB4MlVMKQotCQl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJTUl9EQUMxVzsKLQorCQlkYmNyX2RhYyh0YXNrKSB8PSBEQkNSX0RBQzFXOwogCXRhc2stPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOwotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCXJldHVybiAwOwogfQogCkBAIC04MzksNiArODQ3LDM5NCBAQAogCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCitzdGF0aWMgbG9uZyBzZXRfaW50cnVjdGlvbl9icChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkJICAgICAgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBzbG90OworCWludCBzbG90MV9pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMxKSAhPSAwKTsKKwlpbnQgc2xvdDJfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMikgIT0gMCk7CisJaW50IHNsb3QzX2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzMpICE9IDApOworCWludCBzbG90NF9pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUM0KSAhPSAwKTsKKworCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkKKwkJc2xvdDJfaW5fdXNlID0gMTsKKwlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpCisJCXNsb3Q0X2luX3VzZSA9IDE7CisKKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCisJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKSB7CisKKwkJLyogTWFrZSBzdXJlIHJhbmdlIGlzIHZhbGlkLiAqLworCQlpZiAoYnBfaW5mby0+YWRkcjIgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisKKwkJLyogV2UgbmVlZCBhIHBhaXIgb2YgSUFDIHJlZ3Npc3RlcnMgKi8KKwkJaWYgKCghc2xvdDFfaW5fdXNlKSAmJiAoIXNsb3QyX2luX3VzZSkpIHsKKwkJCXNsb3QgPSAxOworCQkJY2hpbGQtPnRocmVhZC5pYWMxID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IGJwX2luZm8tPmFkZHIyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMxOworCQkJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PQorCQkJCQlQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSkKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMxMlg7CisJCQllbHNlCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMTJJOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJCX0gZWxzZSBpZiAoKCFzbG90M19pbl91c2UpICYmICghc2xvdDRfaW5fdXNlKSkgeworCQkJc2xvdCA9IDM7CisJCQljaGlsZC0+dGhyZWFkLmlhYzMgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5pYWM0ID0gYnBfaW5mby0+YWRkcjI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzM7CisJCQlpZiAoYnBfaW5mby0+YWRkcl9tb2RlID09CisJCQkJCVBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFKQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzM0WDsKKwkJCWVsc2UKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMzNEk7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9IGVsc2UgeworCQkvKiBXZSBvbmx5IG5lZWQgb25lLiAgSWYgcG9zc2libGUgbGVhdmUgYSBwYWlyIGZyZWUgaW4KKwkJICogY2FzZSBhIHJhbmdlIGlzIG5lZWRlZCBsYXRlcgorCQkgKi8KKwkJaWYgKCFzbG90MV9pbl91c2UpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB1c2UgaWFjMSBpZiBpYWMxLWlhYzIgYXJlIGZyZWUgYW5kIGVpdGhlcgorCQkJICogaWFjMyBvciBpYWM0IChidXQgbm90IGJvdGgpIGFyZSBmcmVlCisJCQkgKi8KKwkJCWlmIChzbG90Ml9pbl91c2UgfHwgKHNsb3QzX2luX3VzZSA9PSBzbG90NF9pbl91c2UpKSB7CisJCQkJc2xvdCA9IDE7CisJCQkJY2hpbGQtPnRocmVhZC5pYWMxID0gYnBfaW5mby0+YWRkcjsKKwkJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzE7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJaWYgKCFzbG90Ml9pbl91c2UpIHsKKwkJCXNsb3QgPSAyOworCQkJY2hpbGQtPnRocmVhZC5pYWMyID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCQl9IGVsc2UgaWYgKCFzbG90M19pbl91c2UpIHsKKwkJCXNsb3QgPSAzOworCQkJY2hpbGQtPnRocmVhZC5pYWMzID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMzsKKwkJfSBlbHNlIGlmICghc2xvdDRfaW5fdXNlKSB7CisJCQlzbG90ID0gNDsKKwkJCWNoaWxkLT50aHJlYWQuaWFjNCA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzQ7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9CitvdXQ6CisJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE07CisJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyBpbnQgZGVsX2luc3RydWN0aW9uX2JwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBzbG90KQoreworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMToKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMSA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMTJNT0RFKSB7CisJCQkvKiBhZGRyZXNzIHJhbmdlIC0gY2xlYXIgc2xvdHMgMSAmIDIgKi8KKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IDA7CisJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgJj0gfkRCQ1JfSUFDMTJNT0RFOworCQl9CisJCWNoaWxkLT50aHJlYWQuaWFjMSA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMiA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMTJNT0RFKQorCQkJLyogdXNlZCBpbiBhIHJhbmdlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hpbGQtPnRocmVhZC5pYWMyID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMjsKKwkJYnJlYWs7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwljYXNlIDM6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzMgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzM0TU9ERSkgeworCQkJLyogYWRkcmVzcyByYW5nZSAtIGNsZWFyIHNsb3RzIDMgJiA0ICovCisJCQljaGlsZC0+dGhyZWFkLmlhYzQgPSAwOworCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICY9IH5EQkNSX0lBQzM0TU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmlhYzMgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMzOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzQgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzM0TU9ERSkKKwkJCS8qIFVzZWQgaW4gYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuaWFjNCA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9kYWMoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBieXRlX2VuYWJsZSA9CisJCShicF9pbmZvLT5jb25kaXRpb25fbW9kZSA+PiBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQpCisJCSYgMHhmOworCWludCBjb25kaXRpb25fbW9kZSA9CisJCWJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICYgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREU7CisJaW50IHNsb3Q7CisKKwlpZiAoYnl0ZV9lbmFibGUgJiYgKGNvbmRpdGlvbl9tb2RlID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGRiY3JfZGFjKGNoaWxkKSAmIChEQkNSX0RBQzFSIHwgREJDUl9EQUMxVykpID09IDApIHsKKwkJc2xvdCA9IDE7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMxUjsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMxVzsKKwkJY2hpbGQtPnRocmVhZC5kYWMxID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQlpZiAoYnl0ZV9lbmFibGUpIHsKKwkJCWNoaWxkLT50aHJlYWQuZHZjMSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+Y29uZGl0aW9uX3ZhbHVlOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMiB8PQorCQkJCSgoYnl0ZV9lbmFibGUgPDwgREJDUjJfRFZDMUJFX1NISUZUKSB8CisJCQkJIChjb25kaXRpb25fbW9kZSA8PCBEQkNSMl9EVkMxTV9TSElGVCkpOworCQl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwl9IGVsc2UgaWYgKGNoaWxkLT50aHJlYWQuZGJjcjIgJiBEQkNSMl9EQUMxMk1PREUpIHsKKwkJLyogQm90aCBkYWMxIGFuZCBkYWMyIGFyZSBwYXJ0IG9mIGEgcmFuZ2UgKi8KKwkJcmV0dXJuIC1FTk9TUEM7CisjZW5kaWYKKwl9IGVsc2UgaWYgKChkYmNyX2RhYyhjaGlsZCkgJiAoREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpKSA9PSAwKSB7CisJCXNsb3QgPSAyOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMlI7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMlc7CisJCWNoaWxkLT50aHJlYWQuZGFjMiA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJaWYgKGJ5dGVfZW5hYmxlKSB7CisJCQljaGlsZC0+dGhyZWFkLmR2YzIgPQorCQkJCSh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmNvbmRpdGlvbl92YWx1ZTsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgfD0KKwkJCQkoKGJ5dGVfZW5hYmxlIDw8IERCQ1IyX0RWQzJCRV9TSElGVCkgfAorCQkJCSAoY29uZGl0aW9uX21vZGUgPDwgREJDUjJfRFZDMk1fU0hJRlQpKTsKKwkJfQorI2VuZGlmCisJfSBlbHNlCisJCXJldHVybiAtRU5PU1BDOworCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOworCWNoaWxkLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKKworCXJldHVybiBzbG90ICsgNDsKK30KKworc3RhdGljIGludCBkZWxfZGFjKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBzbG90KQoreworCWlmIChzbG90ID09IDEpIHsKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGFjMSA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJY2hpbGQtPnRocmVhZC5kYWMxID0gMDsKKwkJZGJjcl9kYWMoY2hpbGQpICY9IH4oREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMiAmIERCQ1IyX0RBQzEyTU9ERSkgeworCQkJY2hpbGQtPnRocmVhZC5kYWMyID0gMDsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgJj0gfkRCQ1IyX0RBQzEyTU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmRiY3IyICY9IH4oREJDUjJfRFZDMU0gfCBEQkNSMl9EVkMxQkUpOworI2VuZGlmCisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJY2hpbGQtPnRocmVhZC5kdmMxID0gMDsKKyNlbmRpZgorCX0gZWxzZSBpZiAoc2xvdCA9PSAyKSB7CisJCWlmIChjaGlsZC0+dGhyZWFkLmRhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWlmIChjaGlsZC0+dGhyZWFkLmRiY3IyICYgREJDUjJfREFDMTJNT0RFKQorCQkJLyogUGFydCBvZiBhIHJhbmdlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAmPSB+KERCQ1IyX0RWQzJNIHwgREJDUjJfRFZDMkJFKTsKKyNlbmRpZgorI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWNoaWxkLT50aHJlYWQuZHZjMiA9IDA7CisjZW5kaWYKKwkJY2hpbGQtPnRocmVhZC5kYWMyID0gMDsKKwkJZGJjcl9kYWMoY2hpbGQpICY9IH4oREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorc3RhdGljIGludCBzZXRfZGFjX3JhbmdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBtb2RlID0gYnBfaW5mby0+YWRkcl9tb2RlICYgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLOworCisJLyogV2UgZG9uJ3QgYWxsb3cgcmFuZ2Ugd2F0Y2hwb2ludHMgdG8gYmUgdXNlZCB3aXRoIERWQyAqLworCWlmIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEJlc3QgZWZmb3J0IHRvIHZlcmlmeSB0aGUgYWRkcmVzcyByYW5nZS4gIFRoZSB1c2VyL3N1cGVydmlzb3IgYml0cworCSAqIHByZXZlbnQgdHJhcHBpbmcgaW4ga2VybmVsIHNwYWNlLCBidXQgbGV0J3MgZmFpbCBvbiBhbiBvYnZpb3VzIGJhZAorCSAqIHJhbmdlLiAgVGhlIHNpbXBsZSB0ZXN0IG9uIHRoZSBtYXNrIGlzIG5vdCBmb29sLXByb29mLCBhbmQgYW55CisJICogZXhjbHVzaXZlIHJhbmdlIHdpbGwgc3BpbGwgb3ZlciBpbnRvIGtlcm5lbCBzcGFjZS4KKwkgKi8KKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCWlmIChtb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSykgeworCQkvKgorCQkgKiBkYWMyIGlzIGEgYml0bWFzay4gIERvbid0IGFsbG93IGEgbWFzayB0aGF0IG1ha2VzIGEKKwkJICoga2VybmVsIHNwYWNlIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGRhYzEgdmFsdWUKKwkJICovCisJCWlmICh+KCh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHIyKSA+PSBUQVNLX1NJWkUpCisJCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgcmFuZ2UgYnJlYWtwb2ludHMsIGFkZHIyIG11c3QgYWxzbyBiZSBhIHZhbGlkIGFkZHJlc3MKKwkJICovCisJCWlmIChicF9pbmZvLT5hZGRyMiA+PSBUQVNLX1NJWkUpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMCAmCisJICAgIChEQkNSMF9EQUMxUiB8IERCQ1IwX0RBQzFXIHwgREJDUjBfREFDMlIgfCBEQkNSMF9EQUMyVykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSAoREJDUjBfREFDMVIgfCBEQkNSMF9JRE0pOworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IChEQkNSMF9EQUMxVyB8IERCQ1IwX0lETSk7CisJY2hpbGQtPnRocmVhZC5kYWMxID0gYnBfaW5mby0+YWRkcjsKKwljaGlsZC0+dGhyZWFkLmRhYzIgPSBicF9pbmZvLT5hZGRyMjsKKwlpZiAobW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRSkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAgfD0gREJDUjJfREFDMTJNOworCWVsc2UgaWYgKG1vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUpCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTVg7CisJZWxzZQkvKiBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0sgKi8KKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAgfD0gREJDUjJfREFDMTJNTTsKKwljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwlyZXR1cm4gNTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UgKi8KKworc3RhdGljIGxvbmcgcHBjX3NldF9od2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCSAgICAgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWlmIChicF9pbmZvLT52ZXJzaW9uICE9IDEpCisJCXJldHVybiAtRU5PVFNVUFA7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCS8qCisJICogQ2hlY2sgZm9yIGludmFsaWQgZmxhZ3MgYW5kIGNvbWJpbmF0aW9ucworCSAqLworCWlmICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlID09IDApIHx8CisJICAgIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiB+KFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSB8CisJCQkJICAgICAgIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpKSB8fAorCSAgICAoYnBfaW5mby0+YWRkcl9tb2RlICYgflBQQ19CUkVBS1BPSU5UX01PREVfTUFTSykgfHwKKwkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICYKKwkgICAgIH4oUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREUgfAorCSAgICAgICBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMKSkpCisJCXJldHVybiAtRUlOVkFMOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPT0gMAorCWlmIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUpIHsKKwkJaWYgKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgIT0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFKSB8fAorCQkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gc2V0X2ludHJ1Y3Rpb25fYnAoY2hpbGQsIGJwX2luZm8pOworCX0KKwlpZiAoYnBfaW5mby0+YWRkcl9tb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QpCisJCXJldHVybiBzZXRfZGFjKGNoaWxkLCBicF9pbmZvKTsKKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCXJldHVybiBzZXRfZGFjX3JhbmdlKGNoaWxkLCBicF9pbmZvKTsKKyNlbHNlCisJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKyNlbHNlIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTICovCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGRhdGEgYnJlYWtwb2ludAorCSAqLworCWlmICgoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpID09IDApIHx8CisJICAgICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgflBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpICE9IDApIHx8CisJICAgIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgIT0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkgfHwKKwkgICAgKGJwX2luZm8tPmFkZHJfbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKSB8fAorCSAgICAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGlsZC0+dGhyZWFkLmRhYnIpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKCh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaWxkLT50aHJlYWQuZGFiciA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisKKwlyZXR1cm4gMTsKKyNlbmRpZiAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyAqLworfQorCitzdGF0aWMgbG9uZyBwcGNfZGVsX2h3ZGVidWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCit7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCWludCByYzsKKworCWlmIChkYXRhIDw9IDQpCisJCXJjID0gZGVsX2luc3RydWN0aW9uX2JwKGNoaWxkLCAoaW50KWRhdGEpOworCWVsc2UKKwkJcmMgPSBkZWxfZGFjKGNoaWxkLCAoaW50KWRhdGEgLSA0KTsKKworCWlmICghcmMpIHsKKwkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFMoY2hpbGQtPnRocmVhZC5kYmNyMCwKKwkJCQkJY2hpbGQtPnRocmVhZC5kYmNyMSkpIHsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJCWNoaWxkLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJCX0KKwl9CisJcmV0dXJuIHJjOworI2Vsc2UKKwlpZiAoZGF0YSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hpbGQtPnRocmVhZC5kYWJyID09IDApCisJCXJldHVybiAtRU5PRU5UOworCisJY2hpbGQtPnRocmVhZC5kYWJyID0gMDsKKworCXJldHVybiAwOworI2VuZGlmCit9CisKIC8qCiAgKiBIZXJlIGFyZSB0aGUgb2xkICJsZWdhY3kiIHBvd2VycGMgc3BlY2lmaWMgZ2V0cmVncy9zZXRyZWdzIHB0cmFjZSBjYWxscywKICAqIHdlIG1hcmsgdGhlbSBhcyBvYnNvbGV0ZSBub3csIHRoZXkgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24KQEAgLTkzMiwxMyArMTMyOCw3NyBAQAogCQlicmVhazsKIAl9CiAKKwljYXNlIFBQQ19QVFJBQ0VfR0VUSFdEQkdJTkZPOiB7CisJCXN0cnVjdCBwcGNfZGVidWdfaW5mbyBkYmdpbmZvOworCisJCWRiZ2luZm8udmVyc2lvbiA9IDE7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQlkYmdpbmZvLm51bV9pbnN0cnVjdGlvbl9icHMgPSBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTOworCQlkYmdpbmZvLm51bV9kYXRhX2JwcyA9IENPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M7CisJCWRiZ2luZm8ubnVtX2NvbmRpdGlvbl9yZWdzID0gQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUzsKKwkJZGJnaW5mby5kYXRhX2JwX2FsaWdubWVudCA9IDQ7CisJCWRiZ2luZm8uc2l6ZW9mX2NvbmRpdGlvbiA9IDQ7CisJCWRiZ2luZm8uZmVhdHVyZXMgPSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX1JBTkdFIHwKKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX01BU0s7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWRiZ2luZm8uZmVhdHVyZXMgfD0KKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX1JBTkdFIHwKKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0s7CisjZW5kaWYKKyNlbHNlIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisJCWRiZ2luZm8ubnVtX2luc3RydWN0aW9uX2JwcyA9IDA7CisJCWRiZ2luZm8ubnVtX2RhdGFfYnBzID0gMTsKKwkJZGJnaW5mby5udW1fY29uZGl0aW9uX3JlZ3MgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAorCQlkYmdpbmZvLmRhdGFfYnBfYWxpZ25tZW50ID0gODsKKyNlbHNlCisJCWRiZ2luZm8uZGF0YV9icF9hbGlnbm1lbnQgPSA0OworI2VuZGlmCisJCWRiZ2luZm8uc2l6ZW9mX2NvbmRpdGlvbiA9IDA7CisJCWRiZ2luZm8uZmVhdHVyZXMgPSAwOworI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRhdGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfZGVidWdfaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IF9fY29weV90b191c2VyKChzdHJ1Y3QgcHBjX2RlYnVnX2luZm8gX191c2VyICopZGF0YSwKKwkJCQkgICAgICZkYmdpbmZvLCBzaXplb2Yoc3RydWN0IHBwY19kZWJ1Z19pbmZvKSkgPworCQkgICAgICAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBQUENfUFRSQUNFX1NFVEhXREVCVUc6IHsKKwkJc3RydWN0IHBwY19od19icmVha3BvaW50IGJwX2luZm87CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGRhdGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IF9fY29weV9mcm9tX3VzZXIoJmJwX2luZm8sCisJCQkJICAgICAgIChzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgX191c2VyICopZGF0YSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCkpID8KKwkJICAgICAgLUVGQVVMVCA6IDA7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcHBjX3NldF9od2RlYnVnKGNoaWxkLCAmYnBfaW5mbyk7CisJCWJyZWFrOworCX0KKworCWNhc2UgUFBDX1BUUkFDRV9ERUxIV0RFQlVHOiB7CisJCXJldCA9IHBwY19kZWxfaHdkZWJ1ZyhjaGlsZCwgYWRkciwgZGF0YSk7CisJCWJyZWFrOworCX0KKwogCWNhc2UgUFRSQUNFX0dFVF9ERUJVR1JFRzogewogCQlyZXQgPSAtRUlOVkFMOwogCQkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIERBQlIgYW5kIG5vIElBQlJTIGF0IHRoZSBtb21lbnQgKi8KIAkJaWYgKGFkZHIgPiAwKQogCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYzEsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisjZWxzZQogCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYnIsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisjZW5kaWYKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYwppbmRleCAwMGI1MDc4Li5hMGFmYjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTE0MCwxNyArMTQwLDE1IEBACiAJCXJldHVybiAwOyAgICAgICAgICAgICAgIC8qIG5vIHNpZ25hbHMgZGVsaXZlcmVkICovCiAJfQogCisjaWZuZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICAgICAgICAgLyoKIAkgKiBSZWVuYWJsZSB0aGUgREFCUiBiZWZvcmUgZGVsaXZlcmluZyB0aGUgc2lnbmFsIHRvCiAJICogdXNlciBzcGFjZS4gVGhlIERBQlIgd2lsbCBoYXZlIGJlZW4gY2xlYXJlZCBpZiBpdAogCSAqIHRyaWdnZXJlZCBpbnNpZGUgdGhlIGtlcm5lbC4KIAkgKi8KLQlpZiAoY3VycmVudC0+dGhyZWFkLmRhYnIpIHsKKwlpZiAoY3VycmVudC0+dGhyZWFkLmRhYnIpCiAJCXNldF9kYWJyKGN1cnJlbnQtPnRocmVhZC5kYWJyKTsKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkJbXRzcHIoU1BSTl9EQkNSMCwgY3VycmVudC0+dGhyZWFkLmRiY3IwKTsKICNlbmRpZgotCX0KIAogCWlmIChpczMyKSB7CiAgICAgICAgIAlpZiAoa2Euc2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggZDY3MDQyOS4uMjY2NjEwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgdG1wOwogCXVuc2lnbmVkIGxvbmcgbmV3X21zciA9IHJlZ3MtPm1zcjsKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAl1bnNpZ25lZCBsb25nIG5ld19kYmNyMCA9IGN1cnJlbnQtPnRocmVhZC5kYmNyMDsKICNlbmRpZgogCkBAIC0xMDg3LDEzICsxMDg3LDE3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc3dpdGNoIChvcC5kYmdfdHlwZSkgewogCQljYXNlIFNJR19EQkdfU0lOR0xFX1NURVBQSU5HOgotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQkJaWYgKG9wLmRiZ192YWx1ZSkgewogCQkJCW5ld19tc3IgfD0gTVNSX0RFOwogCQkJCW5ld19kYmNyMCB8PSAoREJDUjBfSURNIHwgREJDUjBfSUMpOwogCQkJfSBlbHNlIHsKLQkJCQluZXdfbXNyICY9IH5NU1JfREU7Ci0JCQkJbmV3X2RiY3IwICY9IH4oREJDUjBfSURNIHwgREJDUjBfSUMpOworCQkJCW5ld19kYmNyMCAmPSB+REJDUjBfSUM7CisJCQkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFMobmV3X2RiY3IwLAorCQkJCQkJY3VycmVudC0+dGhyZWFkLmRiY3IxKSkgeworCQkJCQluZXdfbXNyICY9IH5NU1JfREU7CisJCQkJCW5ld19kYmNyMCAmPSB+REJDUjBfSURNOworCQkJCX0KIAkJCX0KICNlbHNlCiAJCQlpZiAob3AuZGJnX3ZhbHVlKQpAQCAtMTEwMyw3ICsxMTA3LDcgQEAKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU0lHX0RCR19CUkFOQ0hfVFJBQ0lORzoKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKIAkJCWlmIChvcC5kYmdfdmFsdWUpCkBAIC0xMTI0LDcgKzExMjgsNyBAQAogCSAgIGZhaWx1cmUgaXMgYSBwcm9ibGVtLCBhbnl3YXksIGFuZCBpdCdzIHZlcnkgdW5saWtlbHkgdW5sZXNzCiAJICAgdGhlIHVzZXIgaXMgcmVhbGx5IGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gKi8KIAlyZWdzLT5tc3IgPSBuZXdfbXNyOwotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCWN1cnJlbnQtPnRocmVhZC5kYmNyMCA9IG5ld19kYmNyMDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDZjNjA5M2QuLjFiMTZiOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0yNjUsOCArMjY1LDggQEAKIAkJYWNjb3VudF9zeXN0ZW1fdGltZSh0c2ssIDAsIGRlbHRhLCBkZWx0YXNjYWxlZCk7CiAJZWxzZQogCQlhY2NvdW50X2lkbGVfdGltZShkZWx0YSk7Ci0JcGVyX2NwdShjcHV0aW1lX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBkZWx0YTsKLQlwZXJfY3B1KGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBkZWx0YXNjYWxlZDsKKwlfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSkgPSBkZWx0YTsKKwlfX2dldF9jcHVfdmFyKGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEpID0gZGVsdGFzY2FsZWQ7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNjb3VudF9zeXN0ZW1fdnRpbWUpOwpAQCAtNTc1LDYgKzU3NSw4IEBACiAKIAl0cmFjZV90aW1lcl9pbnRlcnJ1cHRfZW50cnkocmVncyk7CiAKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS50aW1lcl9pcnFzKys7CisKIAkvKiBFbnN1cmUgYSBwb3NpdGl2ZSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBkZWNyZW1lbnRlciwgb3IgZWxzZQogCSAqIHNvbWUgQ1BVcyB3aWxsIGNvbnRpbnV1ZSB0byB0YWtlIGRlY3JlbWVudGVyIGV4Y2VwdGlvbnMgKi8KIAlzZXRfZGVjKERFQ1JFTUVOVEVSX01BWCk7CkBAIC05MzUsOCArOTM3LDggQEAKIAkqZGVjID0gZGVjcmVtZW50ZXJfY2xvY2tldmVudDsKIAlkZWMtPmNwdW1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiY2xvY2tldmVudDogJXMgbXVsdFsleF0gc2hpZnRbJWRdIGNwdVslZF1cbiIsCi0JICAgICAgIGRlYy0+bmFtZSwgZGVjLT5tdWx0LCBkZWMtPnNoaWZ0LCBjcHUpOworCXByaW50a19vbmNlKEtFUk5fREVCVUcgImNsb2NrZXZlbnQ6ICVzIG11bHRbJXhdIHNoaWZ0WyVkXSBjcHVbJWRdXG4iLAorCQkgICAgZGVjLT5uYW1lLCBkZWMtPm11bHQsIGRlYy0+c2hpZnQsIGNwdSk7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZGVjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCBkMDY5ZmY4Li42OTY2MjZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC02MCwxMyArNjAsMTMgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9pcGkpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX3NzdGVwKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2lhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgKCpfX2RlYnVnZ2VyKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfaXBpKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OwogCiBFWFBPUlRfU1lNQk9MKF9fZGVidWdnZXIpOwogRVhQT1JUX1NZTUJPTChfX2RlYnVnZ2VyX2lwaSk7CkBAIC0xMDIsMTEgKzEwMiwxMSBAQAogaW50IGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKIAlzdGF0aWMgc3RydWN0IHsKLQkJc3BpbmxvY2tfdCBsb2NrOworCQlyYXdfc3BpbmxvY2tfdCBsb2NrOwogCQl1MzIgbG9ja19vd25lcjsKIAkJaW50IGxvY2tfb3duZXJfZGVwdGg7CiAJfSBkaWUgPSB7Ci0JCS5sb2NrID0JCQlfX1NQSU5fTE9DS19VTkxPQ0tFRChkaWUubG9jayksCisJCS5sb2NrID0JCQlfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoZGllLmxvY2spLAogCQkubG9ja19vd25lciA9CQktMSwKIAkJLmxvY2tfb3duZXJfZGVwdGggPQkwCiAJfTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJaWYgKGRpZS5sb2NrX293bmVyICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRpZS5sb2NrLCBmbGFncyk7CiAJCWRpZS5sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlkaWUubG9ja19vd25lcl9kZXB0aCA9IDA7CiAJCWJ1c3Rfc3BpbmxvY2tzKDEpOwpAQCAtMTQ2LDYgKzE0NiwxMSBAQAogI2VuZGlmCiAJCXByaW50aygiJXNcbiIsIHBwY19tZC5uYW1lID8gcHBjX21kLm5hbWUgOiAiIik7CiAKKwkJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOworCQlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIDI1NSwKKwkJCSAgICAgICBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJCXJldHVybiAxOworCiAJCXByaW50X21vZHVsZXMoKTsKIAkJc2hvd19yZWdzKHJlZ3MpOwogCX0gZWxzZSB7CkBAIC0xNTUsNyArMTYwLDcgQEAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlkaWUubG9ja19vd25lciA9IC0xOwogCWFkZF90YWludChUQUlOVF9ESUUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZS5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZS5sb2NrLCBmbGFncyk7CiAKIAlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpIHx8CiAJCWtleGVjX3NyX2FjdGl2YXRlZChzbXBfcHJvY2Vzc29yX2lkKCkpKQpAQCAtMjk0LDcgKzI5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIC8qIE9uIDR4eCwgdGhlIHJlYXNvbiBmb3IgdGhlIG1hY2hpbmUgY2hlY2sgb3IgcHJvZ3JhbSBleGNlcHRpb24KICAgIGlzIGluIHRoZSBFU1IuICovCiAjZGVmaW5lIGdldF9yZWFzb24ocmVncykJKChyZWdzKS0+ZHNpc3IpCkBAIC00NzgsNiArNDgzLDggQEAKIHsKIAlpbnQgcmVjb3ZlciA9IDA7CiAKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5tY2VfZXhjZXB0aW9ucysrOworCiAJLyogU2VlIGlmIGFueSBtYWNoaW5lIGRlcGVuZGVudCBjYWxscy4gSW4gdGhlb3J5LCB3ZSB3b3VsZCB3YW50CiAJICogdG8gY2FsbCB0aGUgQ1BVIGZpcnN0LCBhbmQgY2FsbCB0aGUgcHBjX21kLiBvbmUgaWYgdGhlIENQVQogCSAqIG9uZSByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLiBIb3dldmVyIHRoZXJlIGlzIGV4aXN0aW5nIGNvZGUKQEAgLTk2MCw2ICs5NjcsOCBAQAogCiB2b2lkIHBlcmZvcm1hbmNlX21vbml0b3JfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLnBtdV9pcnFzKys7CisKIAlwZXJmX2lycShyZWdzKTsKIH0KIApAQCAtMTAyNCwxMCArMTAzMyw2OSBAQAogfQogI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworc3RhdGljIHZvaWQgaGFuZGxlX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGRlYnVnX3N0YXR1cykKK3sKKwlpbnQgY2hhbmdlZCA9IDA7CisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBkZWJ1ZyBldmVudCwgY2xlYXIgdGhlCisJICogZXZlbnQgZmxhZ3MgYW5kIHNlbmQgYSB0cmFwIHRvIHRoZSBoYW5kbGVyLiBUb3JlegorCSAqLworCWlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKSB7CisJCWRiY3JfZGFjKGN1cnJlbnQpICY9IH4oREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQljdXJyZW50LT50aHJlYWQuZGJjcjIgJj0gfkRCQ1IyX0RBQzEyTU9ERTsKKyNlbmRpZgorCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9EQUMxKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgNSk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMyUiB8IERCU1JfREFDMlcpKSB7CisJCWRiY3JfZGFjKGN1cnJlbnQpICY9IH4oREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9EQUMyKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgNik7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzEpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMxOworCQlkYmNyX2lhY19yYW5nZShjdXJyZW50KSAmPSB+REJDUl9JQUMxMk1PREU7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzEpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAxKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDMikgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzI7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzIpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAyKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDMykgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzM7CisJCWRiY3JfaWFjX3JhbmdlKGN1cnJlbnQpICY9IH5EQkNSX0lBQzM0TU9ERTsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDMyksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDMpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUM0KSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDNDsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDNCksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDQpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfQorCS8qCisJICogQXQgdGhlIHBvaW50IHRoaXMgcm91dGluZSB3YXMgY2FsbGVkLCB0aGUgTVNSKERFKSB3YXMgdHVybmVkIG9mZi4KKwkgKiBDaGVjayBhbGwgb3RoZXIgZGVidWcgZmxhZ3MgYW5kIHNlZSBpZiB0aGF0IGJpdCBuZWVkcyB0byBiZSB0dXJuZWQKKwkgKiBiYWNrIG9uIG9yIG5vdC4KKwkgKi8KKwlpZiAoREJDUl9BQ1RJVkVfRVZFTlRTKGN1cnJlbnQtPnRocmVhZC5kYmNyMCwgY3VycmVudC0+dGhyZWFkLmRiY3IxKSkKKwkJcmVncy0+bXNyIHw9IE1TUl9ERTsKKwllbHNlCisJCS8qIE1ha2Ugc3VyZSB0aGUgSURNIGZsYWcgaXMgb2ZmICovCisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworCisJaWYgKGNoYW5nZWQgJiAweDAxKQorCQltdHNwcihTUFJOX0RCQ1IwLCBjdXJyZW50LT50aHJlYWQuZGJjcjApOworfQogCiB2b2lkIF9fa3Byb2JlcyBEZWJ1Z0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBkZWJ1Z19zdGF0dXMpCiB7CisJY3VycmVudC0+dGhyZWFkLmRic3IgPSBkZWJ1Z19zdGF0dXM7CisKIAkvKiBIYWNrIGFsZXJ0OiBPbiBCb29rRSwgQnJhbmNoIFRha2VuIHN0b3BzIG9uIHRoZSBicmFuY2ggaXRzZWxmLCB3aGlsZQogCSAqIG9uIHNlcnZlciwgaXQgc3RvcHMgb24gdGhlIHRhcmdldCBvZiB0aGUgYnJhbmNoLiBJbiBvcmRlciB0byBzaW11bGF0ZQogCSAqIHRoZSBzZXJ2ZXIgYmVoYXZpb3VyLCB3ZSB0aHVzIHJlc3RhcnQgcmlnaHQgYXdheSB3aXRoIGEgc2luZ2xlIHN0ZXAKQEAgLTEwNzEsMjkgKzExMzksMjMgQEAKIAkJaWYgKGRlYnVnZ2VyX3NzdGVwKHJlZ3MpKQogCQkJcmV0dXJuOwogCi0JCWlmICh1c2VyX21vZGUocmVncykpCi0JCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyk7CisJCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQkJaWYgKERCQ1JfQUNUSVZFX0VWRU5UUyhjdXJyZW50LT50aHJlYWQuZGJjcjAsCisJCQkJCSAgICAgICBjdXJyZW50LT50aHJlYWQuZGJjcjEpKQorCQkJCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJCQllbHNlCisJCQkJLyogTWFrZSBzdXJlIHRoZSBJRE0gYml0IGlzIG9mZiAqLworCQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworI2VuZGlmCisJCX0KIAogCQlfZXhjZXB0aW9uKFNJR1RSQVAsIHJlZ3MsIFRSQVBfVFJBQ0UsIHJlZ3MtPm5pcCk7Ci0JfSBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKSB7Ci0JCXJlZ3MtPm1zciAmPSB+TVNSX0RFOwotCi0JCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXIHwKLQkJCQkJCQkJREJDUjBfSURNKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERpc2FibGUgREFDIGludGVydXB0cyAqLwotCQkJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgJiB+KERCU1JfREFDMVIgfAotCQkJCQkJREJTUl9EQUMxVyB8IERCQ1IwX0lETSkpOwotCi0JCQkvKiBDbGVhciB0aGUgREFDIGV2ZW50ICovCi0JCQltdHNwcihTUFJOX0RCU1IsIChEQlNSX0RBQzFSIHwgREJTUl9EQUMxVykpOwotCQl9Ci0JCS8qIFNldHVwIGFuZCBzZW5kIHRoZSB0cmFwIHRvIHRoZSBoYW5kbGVyICovCi0JCWRvX2RhYnIocmVncywgbWZzcHIoU1BSTl9EQUMxKSwgZGVidWdfc3RhdHVzKTsKLQl9CisJfSBlbHNlCisJCWhhbmRsZV9kZWJ1ZyhyZWdzLCBkZWJ1Z19zdGF0dXMpOwogfQotI2VuZGlmIC8qIENPTkZJR180eHggfHwgQ09ORklHX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1RBVV9JTlQpCiB2b2lkIFRBVUV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA2ZmI2ZThhLi5mZTAzN2ZkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwpAQCAtNzUsNiArNzUsNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitzb3VyY2UgZHJpdmVycy92aG9zdC9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggZTY4YmVhYy4uNGQ0ZWViOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtNDMsNjIgKzQzLDYyIEBACiAJbGQJcjcsMTYocjQpCiAJbGR1CXI4LDI0KHI0KQogMToJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQotCWxkCXI1LDEwNChyNCkKIAlzdGQJcjEwLDExMihyMykKKwlsZAlyNSwxMDQocjQpCiAJbGQJcjYsMTEyKHI0KQogCXN0ZAlyMTEsMTIwKHIzKQotCWxkCXI3LDEyMChyNCkKIAlzdGR1CXIxMiwxMjgocjMpCisJbGQJcjcsMTIwKHI0KQogCWxkdQlyOCwxMjgocjQpCiAJYmRuegkxYgogCiAJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQogCXN0ZAlyMTAsMTEyKHIzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCmluZGV4IDY5M2IxNGEuLjU3OGI2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKQEAgLTQ0LDM3ICs0NCw1NSBAQAogCWFuZGkuCXIwLHI0LDcKIAlibmUJLkxzcmNfdW5hbGlnbmVkCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9VTkFMSUdORURfTERfU1REKQotCXNyZGkJcjcscjUsNAotMjA6CWxkCXI5LDAocjQpCi0JYWRkaQlyNCxyNCwtOAotCW10Y3RyCXI3Ci0JYW5kaS4JcjUscjUsNwotCWJmCWNyNyo0KzAsMjJmCi0JYWRkaQlyMyxyMyw4Ci0JYWRkaQlyNCxyNCw4Ci0JbXIJcjgscjkKLQlibHQJY3IxLDcyZgotMjE6CWxkCXI5LDgocjQpCi03MDoJc3RkCXI4LDgocjMpCi0yMjoJbGR1CXI4LDE2KHI0KQotNzE6CXN0ZHUJcjksMTYocjMpCi0JYmRuegkyMWIKLTcyOglzdGQJcjgsOChyMykKLQliZXErCTNmCisJYmx0CWNyMSwuTGRvX3RhaWwJCS8qIGlmIDwgMTYgYnl0ZXMgdG8gY29weSAqLworCXNyZGkJcjAscjUsNQorCWNtcGRpCWNyMSxyMCwwCisyMDoJbGQJcjcsMChyNCkKKzIyMDoJbGQJcjYsOChyNCkKKwlhZGRpCXI0LHI0LDE2CisJbXRjdHIJcjAKKwlhbmRpLglyMCxyNSwweDEwCisJYmVxCTIyZgogCWFkZGkJcjMscjMsMTYKKwlhZGRpCXI0LHI0LC0xNgorCW1yCXI5LHI3CisJbXIJcjgscjYKKwliZXEJY3IxLDcyZgorMjE6CWxkCXI3LDE2KHI0KQorMjIxOglsZAlyNiwyNChyNCkKKwlhZGRpCXI0LHI0LDMyCis3MDoJc3RkCXI5LDAocjMpCisyNzA6CXN0ZAlyOCw4KHIzKQorMjI6CWxkCXI5LDAocjQpCisyMjI6CWxkCXI4LDgocjQpCis3MToJc3RkCXI3LDE2KHIzKQorMjcxOglzdGQJcjYsMjQocjMpCisJYWRkaQlyMyxyMywzMgorCWJkbnoJMjFiCis3MjoJc3RkCXI5LDAocjMpCisyNzI6CXN0ZAlyOCw4KHIzKQorCWFuZGkuCXI1LHI1LDB4ZgorCWJlcSsJM2YKKwlhZGRpCXI0LHI0LDE2CiAuTGRvX3RhaWw6Ci0JYmYJY3I3KjQrMSwxZgotMjM6CWx3eglyOSw4KHI0KQorCWFkZGkJcjMscjMsMTYKKwliZgljcjcqNCswLDI0NmYKKzI0NDoJbGQJcjksMChyNCkKKwlhZGRpCXI0LHI0LDgKKzI0NToJc3RkCXI5LDAocjMpCisJYWRkaQlyMyxyMyw4CisyNDY6CWJmCWNyNyo0KzEsMWYKKzIzOglsd3oJcjksMChyNCkKIAlhZGRpCXI0LHI0LDQKIDczOglzdHcJcjksMChyMykKIAlhZGRpCXIzLHIzLDQKIDE6CWJmCWNyNyo0KzIsMmYKLTQ0OglsaHoJcjksOChyNCkKKzQ0OglsaHoJcjksMChyNCkKIAlhZGRpCXI0LHI0LDIKIDc0OglzdGgJcjksMChyMykKIAlhZGRpCXIzLHIzLDIKIDI6CWJmCWNyNyo0KzMsM2YKLTQ1OglsYnoJcjksOChyNCkKKzQ1OglsYnoJcjksMChyNCkKIDc1OglzdGIJcjksMChyMykKIDM6CWxpCXIzLDAKIAlibHIKQEAgLTIyMCw3ICsyMzgsOSBAQAogMTMxOgogCWFkZGkJcjMscjMsOAogMTIwOgorMzIwOgogMTIyOgorMzIyOgogMTI0OgogMTI1OgogMTI2OgpAQCAtMjI5LDkgKzI0OSwxMSBAQAogMTI5OgogMTMzOgogCWFkZGkJcjMscjMsOAotMTIxOgogMTMyOgogCWFkZGkJcjMscjMsOAorMTIxOgorMzIxOgorMzQ0OgogMTM0OgogMTM1OgogMTM4OgpAQCAtMzAzLDE4ICszMjUsMjIgQEAKIDE4MzoKIAlhZGQJcjMscjMscjcKIAliCTFmCiszNzE6CiAxODA6CiAJYWRkaQlyMyxyMyw4CiAxNzE6CiAxNzc6CiAJYWRkaQlyMyxyMyw4Ci0xNzA6Ci0xNzI6CiszNzA6CiszNzI6CiAxNzY6CiAxNzg6CiAJYWRkaQlyMyxyMyw0CiAxODU6CiAJYWRkaQlyMyxyMyw0CisxNzA6CisxNzI6CiszNDU6CiAxNzM6CiAxNzQ6CiAxNzU6CkBAIC0zNDEsMTEgKzM2NywxOSBAQAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmFsaWduCTMKIAkubGxvbmcJMjBiLDEyMGIKKwkubGxvbmcJMjIwYiwzMjBiCiAJLmxsb25nCTIxYiwxMjFiCisJLmxsb25nCTIyMWIsMzIxYgogCS5sbG9uZwk3MGIsMTcwYgorCS5sbG9uZwkyNzBiLDM3MGIKIAkubGxvbmcJMjJiLDEyMmIKKwkubGxvbmcJMjIyYiwzMjJiCiAJLmxsb25nCTcxYiwxNzFiCisJLmxsb25nCTI3MWIsMzcxYgogCS5sbG9uZwk3MmIsMTcyYgorCS5sbG9uZwkyNzJiLDM3MmIKKwkubGxvbmcJMjQ0YiwzNDRiCisJLmxsb25nCTI0NWIsMzQ1YgogCS5sbG9uZwkyM2IsMTIzYgogCS5sbG9uZwk3M2IsMTczYgogCS5sbG9uZwk0NGIsMTQ0YgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCmluZGV4IDdlODg2NWIuLmU2NDAxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCiB2b2lkIGRvX2x3c3luY19maXh1cHModW5zaWduZWQgbG9uZyB2YWx1ZSwgdm9pZCAqZml4dXBfc3RhcnQsIHZvaWQgKmZpeHVwX2VuZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnN0YXJ0LCAqZW5kLCAqZGVzdDsKKwlsb25nICpzdGFydCwgKmVuZDsKKwl1bnNpZ25lZCBpbnQgKmRlc3Q7CiAKIAlpZiAoISh2YWx1ZSAmIENQVV9GVFJfTFdTWU5DKSkKIAkJcmV0dXJuIDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCmluZGV4IDA4ZGZhOGUuLjY1YWJmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwpAQCAtODQsOCArODQsOCBAQAogCSAqIHZlY3RvcnMgYW5kIHRoZSBrZXJuZWwgbGl2ZSBpbiByZWFsLW1vZGUuCiAJICovCiAKLSAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEYwMDAwMDAwKTsJLyogNTEyIE1CIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLwotICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RjAwMDAwMDApOwkvKiA1MTIgTUIgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KKyAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEZGRkYwMDAwKTsJLyogMkdCeXRlIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLworICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RkZGRjAwMDApOwkvKiAyR0J5dGUgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KIH0KIAogI2RlZmluZSBMQVJHRV9QQUdFX1NJWkVfMTZNCSgxPDwyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKaW5kZXggMDU2ZDIzYS4uNzg0YTQwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2RlZmluZSBIUFRFX0xPQ0tfQklUIDMKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBwc2l6ZSwgaW50IHNzaXplKQogewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaWYgKHVzZV9sb2NhbCkKIAkJdXNlX2xvY2FsID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnRsYmllbDsKIAlpZiAobG9ja190bGJpZSAmJiAhdXNlX2xvY2FsKQotCQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6IDogOiJtZW1vcnkiKTsKIAlpZiAodXNlX2xvY2FsKSB7CiAJCV9fdGxiaWVsKHZhLCBwc2l6ZSwgc3NpemUpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CiAJfQogCWlmIChsb2NrX3RsYmllICYmICF1c2VfbG9jYWwpCi0JCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvY2tfaHB0ZShzdHJ1Y3QgaGFzaF9wdGUgKmhwdGVwKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAJdW5zaWduZWQgbG9uZyAqd29yZCA9ICZocHRlcC0+djsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChIUFRFX0xPQ0tfQklULCB3b3JkKSkKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQlicmVhazsKIAkJd2hpbGUodGVzdF9iaXQoSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQljcHVfcmVsYXgoKTsKQEAgLTEzMyw4ICsxMzMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgKndvcmQgPSAmaHB0ZXAtPnY7CiAKLQlhc20gdm9sYXRpbGUoImx3c3luYyI6OjoibWVtb3J5Iik7Ci0JY2xlYXJfYml0KEhQVEVfTE9DS19CSVQsIHdvcmQpOworCWNsZWFyX2JpdF91bmxvY2soSFBURV9MT0NLX0JJVCwgd29yZCk7CiB9CiAKIHN0YXRpYyBsb25nIG5hdGl2ZV9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsIHVuc2lnbmVkIGxvbmcgdmEsCkBAIC00MzQsNyArNDMzLDcgQEAKIAkvKiB3ZSB0YWtlIHRoZSB0bGJpZSBsb2NrIGFuZCBob2xkIGl0LiAgU29tZSBoYXJkd2FyZSB3aWxsCiAJICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIHRsYmllIGZyb20gdHdvIHByb2Nlc3NvcnMgYXQgb25jZS4KIAkgKi8KLQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAlzbG90cyA9IHB0ZWdfY291bnQgKiBIUFRFU19QRVJfR1JPVVA7CiAKQEAgLTQ1OCw3ICs0NTcsNyBAQAogCX0KIAogCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOjo6Im1lbW9yeSIpOwotCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC01MjEsNyArNTIwLDcgQEAKIAkJaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOwogCiAJCWlmIChsb2NrX3RsYmllKQotCQkJc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CkBAIC01MzYsNyArNTM1LDcgQEAKIAkJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6OjoibWVtb3J5Iik7CiAKIAkJaWYgKGxvY2tfdGxiaWUpCi0JCQlzcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGI5YjE1MjUuLjMxMTIyNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQ5NCwxMyArNDk0LDEzIEBACiAgKiBUaGlzIG11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBwdGUgbG9jayBoZWxkLgogICovCiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHRlX3QgcHRlKQorCQkgICAgICBwdGVfdCAqcHRlcCkKIHsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAl1bnNpZ25lZCBsb25nIGFjY2VzcyA9IDAsIHRyYXA7CiAKIAkvKiBXZSBvbmx5IHdhbnQgSFBURXMgZm9yIGxpbnV4IFBURXMgdGhhdCBoYXZlIF9QQUdFX0FDQ0VTU0VEIHNldCAqLwotCWlmICghcHRlX3lvdW5nKHB0ZSkgfHwgYWRkcmVzcyA+PSBUQVNLX1NJWkUpCisJaWYgKCFwdGVfeW91bmcoKnB0ZXApIHx8IGFkZHJlc3MgPj0gVEFTS19TSVpFKQogCQlyZXR1cm47CiAKIAkvKiBXZSB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgY29taW5nIGZyb20gYW4gaW5zdHJ1Y3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYwppbmRleCBiOTEwZDM3Li41MTYyMmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW11X2NvbnRleHRfbG9jayk7Ci1zdGF0aWMgREVGSU5FX0lEUihtbXVfY29udGV4dF9pZHIpOworc3RhdGljIERFRklORV9JREEobW11X2NvbnRleHRfaWRhKTsKIAogLyoKICAqIFRoZSBwcm90by1WU0lEIHNwYWNlIGhhcyAyXjM1IC0gMSBzZWdtZW50cyBhdmFpbGFibGUgZm9yIHVzZXIgbWFwcGluZ3MuCkBAIC0zOSwxMSArMzksMTEgQEAKIAlpbnQgZXJyOwogCiBhZ2FpbjoKLQlpZiAoIWlkcl9wcmVfZ2V0KCZtbXVfY29udGV4dF9pZHIsIEdGUF9LRVJORUwpKQorCWlmICghaWRhX3ByZV9nZXQoJm1tdV9jb250ZXh0X2lkYSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQllcnIgPSBpZHJfZ2V0X25ld19hYm92ZSgmbW11X2NvbnRleHRfaWRyLCBOVUxMLCAxLCAmaW5kZXgpOworCWVyciA9IGlkYV9nZXRfbmV3X2Fib3ZlKCZtbXVfY29udGV4dF9pZGEsIDEsICZpbmRleCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogCiAJaWYgKGVyciA9PSAtRUFHQUlOKQpAQCAtNTMsNyArNTMsNyBAQAogCiAJaWYgKGluZGV4ID4gTUFYX0NPTlRFWFQpIHsKIAkJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQkJaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBpbmRleCk7CisJCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgaW5kZXgpOwogCQlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTg1LDcgKzg1LDcgQEAKIHZvaWQgX19kZXN0cm95X2NvbnRleHQoaW50IGNvbnRleHRfaWQpCiB7CiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQlpZHJfcmVtb3ZlKCZtbXVfY29udGV4dF9pZHIsIGNvbnRleHRfaWQpOworCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgY29udGV4dF9pZCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19kZXN0cm95X2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IDEwNDRhNjMuLmRiYzY5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpjb250ZXh0X21hcDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpzdGFsZV9tYXBbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqKmNvbnRleHRfbW07Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnRleHRfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOwogCiAjZGVmaW5lIENUWF9NQVBfU0laRQlcCiAJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChsYXN0X2NvbnRleHQgLyBCSVRTX1BFUl9MT05HICsgMSkpCkBAIC0xMjEsOSArMTIxLDkgQEAKIAkvKiBUaGlzIHdpbGwgaGFwcGVuIGlmIHlvdSBoYXZlIG1vcmUgQ1BVcyB0aGFuIGF2YWlsYWJsZSBjb250ZXh0cywKIAkgKiBhbGwgd2UgY2FuIGRvIGhlcmUgaXMgd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluCiAJICovCi0Jc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOwogCWNwdV9yZWxheCgpOwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJLyogVGhpcyB3aWxsIGNhdXNlIHRoZSBjYWxsZXIgdG8gdHJ5IGFnYWluICovCiAJcmV0dXJuIE1NVV9OT19DT05URVhUOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZyAqbWFwOwogCiAJLyogTm8gbG9ja2xlc3MgZmFzdCBwYXRoIC4uIHlldCAqLwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJcHJfaGFyZCgiWyVkXSBhY3RpdmF0aW5nIGNvbnRleHQgZm9yIG1tIEAlcCwgYWN0aXZlPSVkLCBpZD0lZCIsCiAJCWNwdSwgbmV4dCwgbmV4dC0+Y29udGV4dC5hY3RpdmUsIG5leHQtPmNvbnRleHQuaWQpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJLyogRmxpY2sgdGhlIE1NVSBhbmQgcmVsZWFzZSBsb2NrICovCiAJcHJfaGFyZGNvbnQoIiAtPiAlZFxuIiwgaWQpOwogCXNldF9jb250ZXh0KGlkLCBuZXh0LT5wZ2QpOwotCXNwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKIH0KIAogLyoKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAJV0FSTl9PTihtbS0+Y29udGV4dC5hY3RpdmUgIT0gMCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKIAlpZCA9IG1tLT5jb250ZXh0LmlkOwogCWlmIChpZCAhPSBNTVVfTk9fQ09OVEVYVCkgewogCQlfX2NsZWFyX2JpdChpZCwgY29udGV4dF9tYXApOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCWNvbnRleHRfbW1baWRdID0gTlVMTDsKIAkJbnJfZnJlZV9jb250ZXh0cysrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGYyODgyNzkuLjhiMDRjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBMb3cgbGV2ZSBUTEIgbWlzcyBoYW5kbGVycyBmb3IgQm9vazNFCisgKiAgTG93IGxldmVsIFRMQiBtaXNzIGhhbmRsZXJzIGZvciBCb29rM0UKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkKICAqICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDJmYmM2ODAuLmU4MWQ1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRsYml2YXhfbG9jayk7CiAKIHN0YXRpYyBpbnQgbW1faXNfY29yZV9sb2NhbChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CiAJCQlpZiAobG9jaykKLQkJCQlzcGluX2xvY2soJnRsYml2YXhfbG9jayk7CisJCQkJcmF3X3NwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQotCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOworCQkJCXJhd19zcGluX3VubG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9jbG9jay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKaW5kZXggODQ1NDRkMC4uNGM0MjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKQEAgLTY5OCw4ICs2OTgsNyBAQAogCS5jbGtfZ2V0X3BhcmVudAkJPSBOVUxMLAogfTsKIAotc3RhdGljIGludAotbXBjNTEyMV9jbGtfaW5pdCh2b2lkKQoraW50IF9faW5pdCBtcGM1MTIxX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtNzI0LDYgKzcyMywzIEBACiAJY2xrX2Z1bmN0aW9ucyA9IG1wYzUxMjFfY2xrX2Z1bmN0aW9uczsKIAlyZXR1cm4gMDsKIH0KLQotCi1hcmNoX2luaXRjYWxsKG1wYzUxMjFfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA0NDFhYmM0OC4uZWU2YWUxMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMKQEAgLTY0LDggKzY0LDkgQEAKIAkubmFtZQkJCT0gIk1QQzUxMjEgQURTIiwKIAkucHJvYmUJCQk9IG1wYzUxMjFfYWRzX3Byb2JlLAogCS5zZXR1cF9hcmNoCQk9IG1wYzUxMjFfYWRzX3NldHVwX2FyY2gsCi0JLmluaXQJCQk9IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzLAorCS5pbml0CQkJPSBtcGM1MTJ4X2luaXQsCiAJLmluaXRfSVJRCQk9IG1wYzUxMjFfYWRzX2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKaW5kZXggZGE5YjIwYS4uNGVjZjRjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCkBAIC03OSw3ICs3OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3BsZF9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTEQgUElDICIsCisJLm5hbWUgPSAiQ1BMRCBQSUMiLAogCS5tYXNrID0gY3BsZF9tYXNrX2lycSwKIAkuYWNrID0gY3BsZF9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BsZF91bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCmluZGV4IDI0NzlkZTkuLmE2YzBlM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKQEAgLTUxLDggKzUxLDkgQEAKIGRlZmluZV9tYWNoaW5lKG1wYzUxMjFfZ2VuZXJpYykgewogCS5uYW1lCQkJPSAiTVBDNTEyMSBnZW5lcmljIiwKIAkucHJvYmUJCQk9IG1wYzUxMjFfZ2VuZXJpY19wcm9iZSwKLQkuaW5pdAkJCT0gbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXQJCQk9IG1wYzUxMnhfaW5pdCwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyeF9pbml0X0lSUSwKIAkuZ2V0X2lycQkJPSBpcGljX2dldF9pcnEsCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnJlc3RhcnQJCT0gbXBjNTEyeF9yZXN0YXJ0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCmluZGV4IDIyYTUzNTIuLmIyZGFjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaApAQCAtMTIsNSArMTIsOCBAQAogI2lmbmRlZiBfX01QQzUxMlhfSF9fCiAjZGVmaW5lIF9fTVBDNTEyWF9IX18KIGV4dGVybiB2b2lkIF9faW5pdCBtcGM1MTJ4X2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX19pbml0IG1wYzUxMjFfY2xrX2luaXQodm9pZCk7CiB2b2lkIF9faW5pdCBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIG1wYzUxMnhfcmVzdGFydChjaGFyICpjbWQpOwogI2VuZGlmCQkJCS8qIF9fTVBDNTEyWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4X3NoYXJlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKaW5kZXggNDM0ZDY4My4uYjdmNTE4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKQEAgLTIxLDkgKzIxLDM4IEBACiAjaW5jbHVkZSA8YXNtL2lwaWMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21wYzUxMjEuaD4KIAogI2luY2x1ZGUgIm1wYzUxMnguaCIKIAorc3RhdGljIHN0cnVjdCBtcGM1MTJ4X3Jlc2V0X21vZHVsZSBfX2lvbWVtICpyZXNldF9tb2R1bGVfYmFzZTsKKworc3RhdGljIHZvaWQgX19pbml0IG1wYzUxMnhfcmVzdGFydF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtcGM1MTIxLXJlc2V0Iik7CisJaWYgKCFucCkKKwkJcmV0dXJuOworCisJcmVzZXRfbW9kdWxlX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworfQorCit2b2lkIG1wYzUxMnhfcmVzdGFydChjaGFyICpjbWQpCit7CisJaWYgKHJlc2V0X21vZHVsZV9iYXNlKSB7CisJCS8qIEVuYWJsZSBzb2Z0d2FyZSByZXNldCAiUlNURSIgKi8KKwkJb3V0X2JlMzIoJnJlc2V0X21vZHVsZV9iYXNlLT5ycHIsIDB4NTI1MzU0NDUpOworCQkvKiBTZXQgc29mdHdhcmUgaGFyZCByZXNldCAqLworCQlvdXRfYmUzMigmcmVzZXRfbW9kdWxlX2Jhc2UtPnJjciwgMHgyKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoIlJlc3RhcnQgbW9kdWxlIG5vdCBtYXBwZWQuXG4iKTsKKwl9CisJZm9yICg7OykKKwkJOworfQorCiB2b2lkIF9faW5pdCBtcGM1MTJ4X2luaXRfSVJRKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTUzLDggKzgyLDIyIEBACiAKIHZvaWQgX19pbml0IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwogCWlmIChvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCkpCiAJCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiAiCiAJCQkiRXJyb3Igd2hpbGUgcHJvYmluZyBvZl9wbGF0Zm9ybSBidXNcbiIpOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtbmZjIik7CisJaWYgKG5wKSB7CisJCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsIE5VTEwsIE5VTEwpOworCQlvZl9ub2RlX3B1dChucCk7CisJfQogfQogCit2b2lkIF9faW5pdCBtcGM1MTJ4X2luaXQodm9pZCkKK3sKKwltcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcygpOworCW1wYzUxMjFfY2xrX2luaXQoKTsKKwltcGM1MTJ4X3Jlc3RhcnRfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCBjYzI5YzBmLi5mMDY4NGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMjM3LDYgKzIzNyw4IEBACiAJCX0gZWxzZSBpZiAobWFjaGluZV9pcyhtcGM4NTY5X21kcykpIHsKICNkZWZpbmUgQkNTUjdfVUNDMTJfR0VUSG5SU1QJKDB4MSA8PCAyKQogI2RlZmluZSBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QJKDB4MSA8PCAxKQorI2RlZmluZSBCQ1NSX1VDQ19SR01JSQkJKDB4MSA8PCA2KQorI2RlZmluZSBCQ1NSX1VDQ19SVEJJCQkoMHgxIDw8IDUpCiAJCQkvKgogCQkJICogVS1Cb290IG1hbmdsZXMgaW50ZXJydXB0IHBvbGFyaXR5IGZvciBNYXJ2ZWxsIFBIWXMsCiAJCQkgKiBzbyByZXNldCBidWlsdC1pbiBhbmQgVUVNIE1hcnZlbGwgUEhZcywgdGhpcyBwdXRzCkBAIC0yNDcsNiArMjQ5LDI4IEBACiAKIAkJCXNldGJpdHM4KCZiY3NyX3JlZ3NbN10sIEJDU1I3X1VDQzEyX0dFVEhuUlNUKTsKIAkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1I4X1VFTV9NQVJWRUxMX1JTVCk7CisKKwkJCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwKKwkJCQkJCQkibmV0d29yayIsCisJCQkJCQkJInVjY19nZXRoIikpICE9IE5VTEw7KSB7CisJCQkJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCQkJCWludCB1Y2NfbnVtOworCisJCQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKKwkJCQlpZiAocHJvcCA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKworCQkJCXVjY19udW0gPSAqcHJvcCAtIDE7CisKKwkJCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWNvbm5lY3Rpb24tdHlwZSIsIE5VTEwpOworCQkJCWlmIChwcm9wID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKHN0cmNtcCgicnRiaSIsIChjb25zdCBjaGFyICopcHJvcCkgPT0gMCkKKwkJCQkJY2xyc2V0Yml0c184KCZiY3NyX3JlZ3NbNyArIHVjY19udW1dLAorCQkJCQkJQkNTUl9VQ0NfUkdNSUksIEJDU1JfVUNDX1JUQkkpOworCQkJfQorCiAJCX0KIAkJaW91bm1hcChiY3NyX3JlZ3MpOwogCX0KQEAgLTMwMiwxMSArMzI2LDE0IEBACiAJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIiwgfSwKIAl7fSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfcHVibGlzaF9kZXZpY2VzKHZvaWQpCiB7CisJaWYgKG1hY2hpbmVfaXMobXBjODU2OF9tZHMpKQorCQlzaW1wbGVfZ3Bpb2NoaXBfaW5pdCgiZnNsLG1wYzg1NjhtZHMtYmNzci1ncGlvIik7CiAJaWYgKG1hY2hpbmVfaXMobXBjODU2OV9tZHMpKQogCQlzaW1wbGVfZ3Bpb2NoaXBfaW5pdCgiZnNsLG1wYzg1NjltZHMtYmNzci1ncGlvIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKaW5kZXggZTVkYTVmNi4uNDJlODdmMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0gewotCS5uYW1lCQk9ICIgRlBHQS1QSUMgIiwKKwkubmFtZQkJPSAiRlBHQS1QSUMiLAogCS5hY2sJCT0gc29jcmF0ZXNfZnBnYV9waWNfYWNrLAogCS5tYXNrICAgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2ssCiAJLm1hc2tfYWNrICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCBmNTU5OTE4Li5iYzMzZDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXB2aWQgPSBtZnNwcihTUFJOX1BWUik7CiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAotCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFJQQyBFbGVjdHJvbmljcyBTVHggXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBSUEMgRWxlY3Ryb25pY3MgU1R4XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwppbmRleCAxYjQyNjA1Li4wMTI1NjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwpAQCAtODAsOCArODAsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInhlc19tcGM4NXh4OiBFbmFibGluZyBMMiBhcyBjYWNoZVxuIik7CiAKIAljdGwgPSBNUEM4NXh4X0wyQ1RMX0wyRSB8IE1QQzg1eHhfTDJDVExfTDJJOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NDAiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NjAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTQwIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTYwIikpCiAJCS8qCiAJCSAqIEFzc3VtZSBMMiBTUkFNIGlzIHVzZWQgZnVsbHkgZm9yIGNhY2hlLCBzbyBzZXQKIAkJICogTDJCTEtTWiAoYml0cyA0OjUpIHRvIG1hdGNoIEwyU0laIChiaXRzIDI6MykuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMKaW5kZXggMzViMWVjNC4uMjUxNmMxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2h0YWIuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBEQkdfTE9XKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZWF0X3JlYWRfbWFzayh1bnNpZ25lZCBocHRlX2dyb3VwKQogewpAQCAtMTE0LDE4ICsxMTQsMTggQEAKIAlpZiAocmZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpCiAJCWhwdGVfciAmPSB+X1BBR0VfQ09IRVJFTlQ7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJbHBhcl9yYyA9IGJlYXRfcmVhZF9tYXNrKGhwdGVfZ3JvdXApOwogCWlmIChscGFyX3JjID09IDApIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgZnVsbFxuIik7Ci0JCXNwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfaW5zZXJ0X2h0YWJfZW50cnkoMCwgaHB0ZV9ncm91cCwgbHBhcl9yYyA8PCA0OCwKIAkJaHB0ZV92LCBocHRlX3IsICZzbG90KTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSB0cnkgYW5kIGlvcmVtYXAgUEhCcyB3ZSBkb24ndCBvd24sIHRoZSBwdGUgaW5zZXJ0CkBAIC0xOTgsMTcgKzE5OCwxNyBAQAogCQkiYXZwbnY9JTAxNmx4LCBzbG90PSUwMTZseCwgcHNpemU6ICVkLCBuZXdwcCAlMDE2bHggLi4uICIsCiAJCXdhbnRfdiAmIEhQVEVfVl9BVlBOLCBzbG90LCBwc2l6ZSwgbmV3cHApOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCWR1bW15MCA9IGJlYXRfbHBhcl9ocHRlX2dldHdvcmQwKHNsb3QpOwogCWlmICgoZHVtbXkwICYgfjB4N0ZVTCkgIT0gKHdhbnRfdiAmIH4weDdGVUwpKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKLQkJc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LCAmZHVtbXkwLAogCQkJCQkmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCWlmIChscGFyX3JjICE9IDAgfHwgZHVtbXkwID09IDApIHsKIAkJREJHX0xPVygibm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yNjIsMTMgKzI2MiwxMyBAQAogCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEsIE1NVV9TRUdTSVpFXzI1Nk0pOwogCXZhID0gKHZzaWQgPDwgMjgpIHwgKGVhICYgMHgwZmZmZmZmZik7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJc2xvdCA9IGJlYXRfbHBhcl9ocHRlX2ZpbmQodmEsIHBzaXplKTsKIAlCVUdfT04oc2xvdCA9PSAtMSk7CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LAogCQkmZHVtbXkwLCAmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJQlVHX09OKGxwYXJfcmMgIT0gMCk7CiB9CkBAIC0yODUsMTggKzI4NSwxOCBAQAogCQlzbG90LCB2YSwgcHNpemUsIGxvY2FsKTsKIAl3YW50X3YgPSBocHRlX2VuY29kZV92KHZhLCBwc2l6ZSwgTU1VX1NFR1NJWkVfMjU2TSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdF9odGFiX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAJZHVtbXkxID0gYmVhdF9scGFyX2hwdGVfZ2V0d29yZDAoc2xvdCk7CiAKIAlpZiAoKGR1bW15MSAmIH4weDdGVUwpICE9ICh3YW50X3YgJiB+MHg3RlVMKSkgewogCQlEQkdfTE9XKCJub3QgZm91bmQgIVxuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCAwLCBIUFRFX1ZfVkFMSUQsIDAsCiAJCSZkdW1teTEsICZkdW1teTIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAKIAlCVUdfT04obHBhcl9yYyAhPSAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKaW5kZXggMzYwNTJhOS4uNjgyYWY5NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJiZWF0X3dyYXBwZXIuaCIKIAogI2RlZmluZQlNQVhfSVJRUwlOUl9JUlFTCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfZW5hYmxlWyhNQVhfSVJRUysyNTUpLzY0XTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfYWNrWyhNQVhfSVJRUysyNTUpLzY0XTsKIApAQCAtNjUsMzAgKzY1LDMwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfZW5hYmxlW2lycV9wbHVnLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmVhdGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiAJYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gfD0gMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpOwogCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlYXRpY19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfcGx1ZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdICY9IH4oMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiZWF0aWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogCiAJCXByaW50ayhLRVJOX0VSUiAiSVJRIG92ZXItZG93bmNvdW50ZWQsIHBsdWcgJWRcbiIsIGlycV9wbHVnKTsKIAl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdIHw9IDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJlYXRpY19waWMgPSB7Ci0JLm5hbWUgPSAiIENFTEwtQkVBVCAiLAorCS5uYW1lID0gIkNFTEwtQkVBVCIsCiAJLnVubWFzayA9IGJlYXRpY191bm1hc2tfaXJxLAogCS5tYXNrID0gYmVhdGljX21hc2tfaXJxLAogCS5lb2kgPSBiZWF0aWNfZW5kX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwppbmRleCBkY2RkYWE1Li5mNzVhNGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCkBAIC00OCw3ICs0OCw3IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBOb3QgYSBjZWxsIGJsYWRlLlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA2ODI5Y2Y3Li4xMGViMWE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC04OCw3ICs4OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIENFTEwtSUlDICIsCisJLm5hbWUgPSAiQ0VMTC1JSUMiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19lb2ksCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19pb2V4Y19jaGlwID0gewotCS5uYW1lID0gIiBDRUxMLUlPRVgiLAorCS5uYW1lID0gIkNFTEwtSU9FWCIsCiAJLm1hc2sgPSBpaWNfbWFzaywKIAkudW5tYXNrID0gaWljX3VubWFzaywKIAkuZW9pID0gaWljX2lvZXhjX2VvaSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwppbmRleCA1ZTBhMTkxLi42MDhmZDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsKIAlzdHJ1Y3QgY2JlX3BtZF9yZWdzIF9faW9tZW0gKnJlZ3M7CiAKLQlzeXNyZXNldF9oYWNrID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOworCXN5c3Jlc2V0X2hhY2sgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIik7CiAJaWYgKCFzeXNyZXNldF9oYWNrKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKaW5kZXggMDEyNDRmMi4uNTg3NmU4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzcGlkZXJfcGljID0gewotCS5uYW1lID0gIiBTUElERVIgICAiLAorCS5uYW1lID0gIlNQSURFUiIsCiAJLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAogCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAogCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCmluZGV4IDRjNTA2YzE0Ni4uODkxZjE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl2aWNfaGFuZGxlcyA9IG9mX2dldF9wcm9wZXJ0eShzcHVfZG4sICJ2aWNpbml0eSIsICZsZW5wKTsKIAkJZm9yIChpPTA7IGkgPCAobGVucCAvIHNpemVvZihwaGFuZGxlKSk7IGkrKykgewotCQkJaWYgKHZpY19oYW5kbGVzW2ldID09IHRhcmdldC0+bGludXhfcGhhbmRsZSkKKwkJCWlmICh2aWNfaGFuZGxlc1tpXSA9PSB0YXJnZXQtPnBoYW5kbGUpCiAJCQkJcmV0dXJuIHNwdTsKIAkJfQogCX0KQEAgLTQ5OSw3ICs0OTksNyBAQAogCiAJCQlpZiAoc3RyY21wKG5hbWUsICJzcGUiKSA9PSAwKSB7CiAJCQkJc3B1ID0gZGV2bm9kZV9zcHUoY2JlLCB2aWNfZG4pOwotCQkJCWF2b2lkX3BoID0gbGFzdF9zcHVfZG4tPmxpbnV4X3BoYW5kbGU7CisJCQkJYXZvaWRfcGggPSBsYXN0X3NwdV9kbi0+cGhhbmRsZTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiAibWljLXRtIiBhbmQgImJpZjAiIG5vZGVzIGRvIG5vdCBoYXZlCkBAIC01MTQsNyArNTE0LDcgQEAKIAkJCQkJbGFzdF9zcHUtPmhhc19tZW1fYWZmaW5pdHkgPSAxOwogCQkJCQlzcHUtPmhhc19tZW1fYWZmaW5pdHkgPSAxOwogCQkJCX0KLQkJCQlhdm9pZF9waCA9IHZpY19kbi0+bGludXhfcGhhbmRsZTsKKwkJCQlhdm9pZF9waCA9IHZpY19kbi0+cGhhbmRsZTsKIAkJCX0KIAogCQkJbGlzdF9hZGRfdGFpbCgmc3B1LT5hZmZfbGlzdCwgJmxhc3Rfc3B1LT5hZmZfbGlzdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKaW5kZXggZmQyM2ExZC4uOGIwYzIwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYwpAQCAtMjIyLDYgKzIyMiw3IEBACiAJaW50IGk7CiAJdTggKmR1bW15OwogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlyZXNvdXJjZV9zaXplX3QgZW5kID0gMDsKIAogCWZvciAoaSA9IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRVMrMzsgaSsrKSB7CkBAIC0yMzAsMTMgKzIzMSwxMiBAQAogCQkJZW5kID0gcGNpX3Jlc291cmNlX2VuZChkZXYsIGkpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlpZiAoKGJ1cy0+cmVzb3VyY2VbaV0pICYmCi0JCQkoYnVzLT5yZXNvdXJjZVtpXS0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJCWlmIChidXMtPnJlc291cmNlW2ldLT5lbmQgPT0gZW5kKQotCQkJCWR1bW15ID0gaW9yZW1hcChidXMtPnJlc291cmNlW2ldLT5zdGFydCwgMHg0KTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKSB7CisJCWlmIChyZXMgJiYgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCQlpZiAocmVzLT5lbmQgPT0gZW5kKQorCQkJCWR1bW15ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAweDQpOwogCQkJZWxzZQotCQkJCWR1bW15ID0gaW9yZW1hcChidXMtPnJlc291cmNlW2ldLT5lbmQgLSAzLCAweDQpOworCQkJCWR1bW15ID0gaW9yZW1hcChyZXMtPmVuZCAtIDMsIDB4NCk7CiAJCQlpZiAoZHVtbXkpIHsKIAkJCQlpbl84KGR1bW15KTsKIAkJCQlpb3VubWFwKGR1bW15KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCA4NmM0YjI5Li5iYTQ0NmJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC0yNzMsNyArMjczLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpc2VyaWVzX3BpYyA9IHsKLQkubmFtZQk9ICJpU2VyaWVzIGlycSBjb250cm9sbGVyIiwKKwkubmFtZQkJPSAiaVNlcmllcyIsCiAJLnN0YXJ0dXAJPSBpc2VyaWVzX3N0YXJ0dXBfSVJRLAogCS5zaHV0ZG93bgk9IGlzZXJpZXNfc2h1dGRvd25fSVJRLAogCS51bm1hc2sJCT0gaXNlcmllc19lbmFibGVfSVJRLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKaW5kZXggOTFmNGM2Yy4uMDY3NjM2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCkBAIC04NSw3ICs4NSw3IEBACiAKIAkJc2VxX3ByaW50ZihtLCAiICB0aXRhbiBlbGFwc2VkID0gJWx1IHVTZWNcbiIsIHRpdGFuX3VzZWMpOwogCQlzZXFfcHJpbnRmKG0sICIgIHRiIGVsYXBzZWQgICAgPSAlbHUgdGlja3NcbiIsIHRiX3RpY2tzKTsKLQkJc2VxX3ByaW50ZihtLCAiICB0aXRhbiBqaWZmaWVzID0gJWx1LiUwNGx1IFxuIiwgdGl0YW5famlmZmllcywKKwkJc2VxX3ByaW50ZihtLCAiICB0aXRhbiBqaWZmaWVzID0gJWx1LiUwNGx1XG4iLCB0aXRhbl9qaWZmaWVzLAogCQkJICAgdGl0YW5famlmZl9yZW1fdXNlYyk7CiAJCXNlcV9wcmludGYobSwgIiAgdGIgamlmZmllcyAgICA9ICVsdS4lMDRsdVxuIiwgdGJfamlmZmllcywKIAkJCSAgIHRiX2ppZmZfcmVtX3VzZWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCBhNmNkMzM5Li5iMDg2MzQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCW1lbV9ibG9ja3MgPSBpU2VyaWVzX3Byb2Nlc3NfQ29uZG9yX21haW5zdG9yZV92cGQobWJfYXJyYXksCiAJCQkJbWF4X2VudHJpZXMpOwogCi0JcHJpbnRrKCJNYWluc3RvcmVfVlBEOiBudW1NZW1vcnlCbG9ja3MgPSAlbGQgXG4iLCBtZW1fYmxvY2tzKTsKKwlwcmludGsoIk1haW5zdG9yZV9WUEQ6IG51bU1lbW9yeUJsb2NrcyA9ICVsZFxuIiwgbWVtX2Jsb2Nrcyk7CiAJZm9yIChpID0gMDsgaSA8IG1lbV9ibG9ja3M7ICsraSkgewogCQlwcmludGsoIk1haW5zdG9yZV9WUEQ6IGJsb2NrICUzbGQgbG9naWNhbCBjaHVua3MgJTAxNmx4IC0gJTAxNmx4XG4iCiAJCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnMgY2h1bmtzICUwMTZseCAtICUwMTZseFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYwppbmRleCBiZTI1MjdhLi5kMzVlMDUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCkBAIC0zMDQsOCArMzA0LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFzX2NwdWZyZXFfaW5pdCh2b2lkKQogewotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQQTZULTE2ODJNIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgicGFzZW1pLHB3cmZpY2llbnQiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUEE2VC0xNjgyTSIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInBhc2VtaSxwd3JmaWNpZW50IikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwYXNfY3B1ZnJlcV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYwppbmRleCA5ZGQ3ODlhNy4uODRkN2ZkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQlpZiAobW9kZWwKIAkJICAgICYmIChzdHJjbXAobW9kZWwsICJpTWFjLDEiKSA9PSAwCiAJCQl8fCBzdHJjbXAobW9kZWwsICJQb3dlck1hYzEsMSIpID09IDApKSB7Ci0JCQlib290eF9wcmludGYoImlNYWMsMSBkZXRlY3RlZCwgc2h1dHRpbmcgZG93biBVU0IgXG4iKTsKKwkJCWJvb3R4X3ByaW50ZigiaU1hYywxIGRldGVjdGVkLCBzaHV0dGluZyBkb3duIFVTQlxuIik7CiAJCQlvdXRfbGUzMigodW5zaWduZWQgX19pb21lbSAqKTB4ODA4ODAwMDgsIDEpOwkvKiBYWFggKi8KIAkJfQogCX0KQEAgLTU1NCw3ICs1NTQsNyBAQAogCX0gZWxzZQogCQlzcGFjZSA9IGJpLT50b3RhbFBhcmFtc1NpemU7CiAKLQlib290eF9wcmludGYoIlRvdGFsIHNwYWNlIHVzZWQgYnkgcGFyYW1ldGVycyAmIHJhbWRpc2s6IDB4JXggXG4iLCBzcGFjZSk7CisJYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4XG4iLCBzcGFjZSk7CiAKIAkvKiBOZXcgQm9vdFggd2lsbCBoYXZlIGZsdXNoZWQgYWxsIFRMQnMgYW5kIGVudGVycyBrZXJuZWwgd2l0aAogCSAqIE1NVSBzd2l0Y2hlZCBPRkYsIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VmdWwgYW55bW9yZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKaW5kZXggMDhkOTRlNC4uZDRmMTI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKQEAgLTY1NywzMSArNjU3LDMxIEBACiAJY3VyX2ZyZXEgPSAoKnZhbHVlKSAvIDEwMDA7CiAKIAkvKiAgQ2hlY2sgZm9yIDc0NDdBIGJhc2VkIE1hY1JJU0MzICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKIAkgICAgb2ZfZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJkeW5hbWljLXBvd2VyLXN0ZXAiLCBOVUxMKSAmJgogCSAgICBQVlJfVkVSKG1mc3ByKFNQUk5fUFZSKSkgPT0gMHg4MDAzKSB7CiAJCXBtYWNfY3B1ZnJlcV9pbml0Xzc0NDdBKGNwdW5vZGUpOwogCS8qIENoZWNrIGZvciBvdGhlciBNYWNSSVNDMyBtYWNoaW5lcyAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAotCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8Ci0JCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8CisJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgewogCQlwbWFjX2NwdWZyZXFfaW5pdF9NYWNSSVNDMyhjcHVub2RlKTsKIAkvKiBFbHNlIGNoZWNrIGZvciBpQm9vazIgNTAwLzYwMCAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgewogCQloaV9mcmVxID0gY3VyX2ZyZXE7CiAJCWxvd19mcmVxID0gNDAwMDAwOwogCQlzZXRfc3BlZWRfcHJvYyA9IHBtdV9zZXRfY3B1X3NwZWVkOwogCQlpc19wbXVfYmFzZWQgPSAxOwogCX0KIAkvKiBFbHNlIGNoZWNrIGZvciBUaVBiIDU1MCAqLwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikgJiYgY3VyX2ZyZXEgPT0gNTUwMDAwKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSAmJiBjdXJfZnJlcSA9PSA1NTAwMDApIHsKIAkJaGlfZnJlcSA9IGN1cl9mcmVxOwogCQlsb3dfZnJlcSA9IDUwMDAwMDsKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CiAJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA0MDAgJiA1MDAgKi8KLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQkvKiBXZSBvbmx5IGtub3cgYWJvdXQgdGhlIDQwMCBNSHogYW5kIHRoZSA1MDBNaHogbW9kZWwKIAkJICogdGhleSBib3RoIGhhdmUgMzAwIE1IeiBhcyBsb3cgZnJlcXVlbmN5CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCA3MDhjNzUxLi4zZWQyODhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtMzk4LDExICszOTgsMTEgQEAKIAlpbnQgcmMgPSAtRU5PREVWOwogCiAJLyogQ2hlY2sgc3VwcG9ydGVkIHBsYXRmb3JtcyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCiAJCXVzZV92b2x0c19zbXUgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKIAkJdXNlX3ZvbHRzX3ZkbmFwID0gMTsKIAllbHNlCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzI5LDkgKzcyOSw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlyYyA9IGc1X3BtNzJfY3B1ZnJlcV9pbml0KGNwdXMpOwogI2lmZGVmIENPTkZJR19QTUFDX1NNVQogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggZmJjOWJiZC4uOWUxYjlmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTU5LDEwICs1OSwxMCBAQAogICogV2UgdXNlIGEgc2luZ2xlIGdsb2JhbCBsb2NrIHRvIHByb3RlY3QgYWNjZXNzZXMuIEVhY2ggZHJpdmVyIGhhcwogICogdG8gdGFrZSBjYXJlIG9mIGl0cyBvd24gbG9ja2luZwogICovCi1ERUZJTkVfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKIAotI2RlZmluZSBMT0NLKGZsYWdzKQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7Ci0jZGVmaW5lIFVOTE9DSyhmbGFncykJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIExPQ0soZmxhZ3MpCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIFVOTE9DSyhmbGFncykJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCiAKIC8qCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCSAgICB9CiAJfQogCWZvcihpPTA7IGk8QVJSQVlfU0laRShwbWFjX21iX2RlZnMpOyBpKyspIHsKLQkgICAgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZShwbWFjX21iX2RlZnNbaV0ubW9kZWxfc3RyaW5nKSkgeworCSAgICBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKHBtYWNfbWJfZGVmc1tpXS5tb2RlbF9zdHJpbmcpKSB7CiAJCXBtYWNfbWIgPSBwbWFjX21iX2RlZnNbaV07CiAJCWdvdG8gZm91bmQ7CiAJICAgIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwppbmRleCBjNmYwZjllLi44MGE1MjU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCkBAIC04MCw3ICs4MCw3IEBACiBzdGF0aWMgaW50IGNvcmU5OV9iYW5rID0gMDsKIHN0YXRpYyBpbnQgbnZyYW1fcGFydGl0aW9uc1szXTsKIC8vIFhYWCBUdXJuIHRoYXQgaW50byBhIHNlbQotc3RhdGljIERFRklORV9TUElOTE9DSyhudl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG52X2xvY2spOwogCiBzdGF0aWMgaW50ICgqY29yZTk5X3dyaXRlX2JhbmspKGludCBiYW5rLCB1OCogZGF0YXMpOwogc3RhdGljIGludCAoKmNvcmU5OV9lcmFzZV9iYW5rKShpbnQgYmFuayk7CkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJdmFsID0gaW5fOCgmbnZyYW1fZGF0YVsoYWRkciAmIDB4MWYpIDw8IDRdKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiB2YWw7CiB9CkBAIC0xNzcsMTAgKzE3NywxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJb3V0XzgoJm52cmFtX2RhdGFbKGFkZHIgJiAweDFmKSA8PCA0XSwgdmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC00ODEsNyArNDgxLDcgQEAKIAlpZiAoIWlzX2NvcmVfOTkgfHwgIW52cmFtX2RhdGEgfHwgIW52cmFtX2ltYWdlKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCWlmICghbWVtY21wKG52cmFtX2ltYWdlLCAodTgqKW52cmFtX2RhdGEgKyBjb3JlOTlfYmFuaypOVlJBTV9TSVpFLAogCQlOVlJBTV9TSVpFKSkKIAkJZ290byBiYWlsOwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCWlmIChjb3JlOTlfd3JpdGVfYmFuayhjb3JlOTlfYmFuaywgbnZyYW1faW1hZ2UpKQogCQkJcHJpbnRrKCJudnJhbTogRXJyb3Igd3JpdGluZyBiYW5rICVkXG4iLCBjb3JlOTlfYmFuayk7CiAgYmFpbDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIERFQlVHCiAgICAgICAgCW1kZWxheSgyMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKaW5kZXggZGIyMGRlNS4uZjVlM2NkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKQEAgLTUwLDEzICs1MCwxMyBAQAogCQl2YWx1ZSA9IH52YWx1ZTsKIAogCS8qIFRvZ2dsZSB0aGUgR1BJTyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IHJlYWRiKGFkZHIpOwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKTsKIAlEQkcoIkRvIHdyaXRlIDB4JTAyeCB0byBHUElPICVzICglcClcbiIsCiAJICAgIHRtcCwgZnVuYy0+bm9kZS0+ZnVsbF9uYW1lLCBhZGRyKTsKIAl3cml0ZWIodG1wLCBhZGRyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NSw5ICsxNDUsOSBAQAogCXN0cnVjdCBtYWNpb19jaGlwICptYWNpbyA9IGZ1bmMtPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIChNQUNJT19JTjMyKG9mZnNldCkgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjgsOSArMTY4LDkgQEAKIAlzdHJ1Y3QgbWFjaW9fY2hpcCAqbWFjaW8gPSBmdW5jLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJTUFDSU9fT1VUOChvZmZzZXQsIChNQUNJT19JTjgob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMywxMiArMjIzLDEyIEBACiAJaWYgKGFyZ3MgPT0gTlVMTCB8fCBhcmdzLT5jb3VudCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IE1BQ0lPX0lOMzIob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIHRtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDMsMTIgKzI0MywxMiBAQAogCWlmIChhcmdzID09IE5VTEwgfHwgYXJncy0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSBNQUNJT19JTjgob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQ4KG9mZnNldCwgdG1wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OCwxMiArMjc4LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCS8qIFRoaXMgaXMgZmFpcmx5IGJvZ3VzIGluIGRhcndpbiwgYnV0IGl0IHNob3VsZCB3b3JrIGZvciBvdXIgbmVlZHMKIAkgKiBpbXBsZW1ldGVkIHRoYXQgd2F5OgogCSAqLwogCVVOX09VVChvZmZzZXQsIChVTl9JTihvZmZzZXQpICYgfm1hc2spIHwgKHZhbHVlICYgbWFzaykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwppbmRleCA5NmQ1Y2U1Li5lZGU0OWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwpAQCAtODQyLDcgKzg0Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jLCAmZGV2LT5mdW5jdGlvbnMsIGxpbmspIHsKIAkJaWYgKG5hbWUgJiYgc3RyY21wKG5hbWUsIGZ1bmMtPm5hbWUpKQogCQkJY29udGludWU7Ci0JCWlmIChmdW5jLT5waGFuZGxlICYmIHRhcmdldC0+bm9kZSAhPSBmdW5jLT5waGFuZGxlKQorCQlpZiAoZnVuYy0+cGhhbmRsZSAmJiB0YXJnZXQtPnBoYW5kbGUgIT0gZnVuYy0+cGhhbmRsZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGZ1bmMtPmZsYWdzICYgZmxhZ3MpID09IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDA5ZTgyNzIuLjYzMGE1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIGludCBtYXhfcmVhbF9pcnFzOwogc3RhdGljIHUzMiBsZXZlbF9tYXNrWzRdOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtYWNfcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG1hY19waWNfbG9jayk7CiAKICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoc3JjLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkKICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgIG1iKCk7CiAgICAgICAgIH0gd2hpbGUoKGluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5lbmFibGUpICYgYml0KQogICAgICAgICAgICAgICAgICE9IChwcGNfY2FjaGVkX2lycV9tYXNrW2ldICYgYml0KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBtYWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTEwNywxMiArMTA3LDEyIEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KHNyYywgcHBjX2xvc3RfaW50ZXJydXB0cykpCiAgICAgICAgICAgICAgICAgYXRvbWljX2RlYygmcHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKICAgICAgICAgb3V0X2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2ssIGJpdCk7CiAgICAgICAgICh2b2lkKWluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX3BtYWNfc2V0X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFfbnIsIGludCBub2tpY2tsb3N0KQpAQCAtMTUyLDEyICsxNTIsMTIgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOwogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICBfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTAgKzE2NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CiAgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAxKTsKLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xNzgsMjQgKzE3OCwyNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwbWFjX3JldHJpZ2dlcih1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fcG1hY19yZXRyaWdnZXIoaXJxX21hcFt2aXJxXS5od2lycSk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWFjX3BpYyA9IHsKLQkubmFtZQkJPSAiIFBNQUMtUElDICIsCisJLm5hbWUJCT0gIlBNQUMtUElDIiwKIAkuc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCiAJLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKIAkuYWNrCQk9IHBtYWNfYWNrX2lycSwKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWludCBpcnEsIGJpdHM7CiAJaW50IHJjID0gSVJRX05PTkU7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJZm9yIChpcnEgPSBtYXhfaXJxczsgKGlycSAtPSAzMikgPj0gbWF4X3JlYWxfaXJxczsgKSB7CiAJCWludCBpID0gaXJxID4+IDU7CiAJCWJpdHMgPSBpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZXZlbnQpIHwgcHBjX2xvc3RfaW50ZXJydXB0c1tpXTsKQEAgLTIyMCwxMiArMjIwLDEyIEBACiAJCWlmIChiaXRzID09IDApCiAJCQljb250aW51ZTsKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCQlyYyA9IElSUV9IQU5ETEVEOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLwogICAgICAgICB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7CiAJCWJyZWFrOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWlmICh1bmxpa2VseShpcnEgPCAwKSkKIAkJcmV0dXJuIE5PX0lSUTsKIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAocG1hY19waWNfaG9zdCwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGI0MGMyMmQuLjY4OThlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNjkzLDkgKzY5Myw5IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKIAkvKiBpMmMgYmFzZWQgSFcgc3luYyBvbiBzb21lIEc1cyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlzbXBfY29yZTk5X3NldHVwX2kyY19od3N5bmMobmNwdXMpOwogCiAJLyogcGZ1bmMgYmFzZWQgSFcgc3luYyBvbiByZWNlbnQgRzVzICovCkBAIC03MTMsNyArNzEzLDcgQEAKICNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwogCiAJLyogR1BJTyBiYXNlZCBIVyBzeW5jIG9uIHBwYzMyIENvcmU5OSAqLwotCWlmIChwbWFjX3RiX2ZyZWV6ZSA9PSBOVUxMICYmICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKKwlpZiAocG1hY190Yl9mcmVlemUgPT0gTlVMTCAmJiAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OwogCQljb25zdCB1MzIgKnRicHJvcCA9IE5VTEw7CiAKQEAgLTc1MCw3ICs3NTAsNyBAQAogI2VuZGlmCiAKIAkvKiAzMiBiaXRzIFNNUCBjYW4ndCBOQVAgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKIAkJcG93ZXJzYXZlX25hcCA9IDA7CiB9CiAKQEAgLTg1Miw3ICs4NTIsNyBAQAogCQkvKiBJZiB3ZSBkaWRuJ3Qgc3RhcnQgdGhlIHNlY29uZCBDUFUsIHdlIG11c3QgdGFrZQogCQkgKiBpdCBvZmYgdGhlIGJ1cwogCQkgKi8KLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSAmJgorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpICYmCiAJCSAgICBudW1fb25saW5lX2NwdXMoKSA8IDIpCQkKIAkJCWc1X3BoeV9kaXNhYmxlX2NwdTEoKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKaW5kZXggMTgxMGU0Mi4uNDgyMTFjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKQEAgLTMxNyw5ICszMTcsOSBAQAogCSAqIGNhbGlicmF0aW9uLiBUaGF0J3MgYmV0dGVyIHNpbmNlIHRoZSBWSUEgaXRzZWxmIHNlZW1zCiAJICogdG8gYmUgc2xpZ2h0bHkgb2ZmLiAtLUJlbkgKIAkgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzIiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMyIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MyIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQogCQlpZiAodmlhX2NhbGlicmF0ZV9kZWNyKCkpCiAJCQlyZXR1cm47CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCSAqIHByb2JhYmx5IGltcGxlbWVudCBjYWxpYnJhdGlvbiBiYXNlZCBvbiB0aGUgS0wgdGltZXIgb24gdGhlc2UKIAkgKiBtYWNoaW5lcyBhbnl3YXkuLi4gLUJlbkgKIAkgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw1IikpCiAJCWlmICh2aWFfY2FsaWJyYXRlX2RlY3IoKSkKIAkJCXJldHVybjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IDk0OTAxNTcuLmQ4MzEzNWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkJc2NjX2luaXR0YWJbMV0gPSBpbl84KHNjY2MpOwogCQlvdXRfOChzY2NjLCAxMik7CiAJCXNjY19pbml0dGFiWzNdID0gaW5fOChzY2NjKTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCS8qIFhzZXJ2ZXMgYW5kIEc1cyBkZWZhdWx0IHRvIDU3NjAwICovCiAJCXNjY19pbml0dGFiWzFdID0gMDsKIAkJc2NjX2luaXR0YWJbM10gPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IGNjZDhkZDAuLjdkZjdmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2VuYWJsZWQpOwogCiAvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOwogCiAvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzLiBJdHMgaGVyZQogICogaW4gQlNTLCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbgpAQCAtNDM2LDcgKzQzNiw3IEBACiB2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJCiAJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOwogCQpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKIAlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOwogCV9fZWVoX2NsZWFyX3Nsb3QoZG4sIG1vZGVfZmxhZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogCQlpZ25vcmVkX2NoZWNrKys7CiAJCXByX2RlYnVnKCJFRUg6IElnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsCi0JCQkgcGRuLT5lZWhfbW9kZSwgcGNpX25hbWUgKGRldiksIGRuLT5mdWxsX25hbWUpOworCQkJIHBkbi0+ZWVoX21vZGUsIGVlaF9wY2lfbmFtZShkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MDYsNyArNTA2LDcgQEAKIAkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKIAkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyYyA9IDE7CiAJaWYgKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9JU09MQVRFRCkgewogCQlwZG4tPmVlaF9jaGVja19jb3VudCArKzsKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiAlZCByZWFkcyBpZ25vcmVkIGZvciByZWNvdmVyaW5nIGRldmljZSBhdCAiCiAJCQkJImxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKIAkJCQlwZG4tPmVlaF9jaGVja19jb3VudCwgbG9jYXRpb24sCi0JCQkJZGV2LT5kcml2ZXItPm5hbWUsIHBjaV9uYW1lKGRldikpOworCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBlZWhfcGNpX25hbWUoZGV2KSk7CiAJCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IE1pZ2h0IGJlIGluZmluaXRlIGxvb3AgaW4gJXMgZHJpdmVyXG4iLAogCQkJCWRldi0+ZHJpdmVyLT5uYW1lKTsKIAkJCWR1bXBfc3RhY2soKTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCSAqIHdpdGggb3RoZXIgZnVuY3Rpb25zIG9uIHRoaXMgZGV2aWNlLCBhbmQgZnVuY3Rpb25zIHVuZGVyCiAJICogYnJpZGdlcy4gKi8KIAllZWhfbWFya19zbG90IChkbiwgRUVIX01PREVfSVNPTEFURUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAogCWVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKGRuLCBkZXYpOwogCkBAIC01ODYsNyArNTg2LDcgQEAKIAlyZXR1cm4gMTsKIAogZG5fdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKLQlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNsb3RfZXJyYnVmX2xvY2spOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGVmOGU0NTQuLmI4ZDcwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCWxvY2F0aW9uID0gbG9jYXRpb24gPyBsb2NhdGlvbiA6ICJ1bmtub3duIjsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IEVycm9yOiBDYW5ub3QgZmluZCBwYXJ0aXRpb24gZW5kcG9pbnQgIgogCQkgICAgICAgICAgICAgICAgImZvciBsb2NhdGlvbj0lcyBwY2kgYWRkcj0lc1xuIiwKLQkJICAgICAgICBsb2NhdGlvbiwgcGNpX25hbWUoZXZlbnQtPmRldikpOworCQkgICAgICAgIGxvY2F0aW9uLCBlZWhfcGNpX25hbWUoZXZlbnQtPmRldikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTM2OCw3ICszNjgsNyBAQAogCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJfSBlbHNlIHsKLQkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKKwkJcGNpX3N0ciA9IGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQpAQCAtNDc4LDkgKzQ3OCw5IEBACiAJICogZHVlIHRvIGFjdHVhbCwgZmFpbGVkIGNhcmRzLgogCSAqLwogCXByaW50ayhLRVJOX0VSUgotCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzIFxuIgorCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJCSJoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgIgotCQkiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiBcbiIKKwkJImFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbiIKIAkJIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyLCBmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKIAlnb3RvIHBlcm1fZXJyb3I7CkBAIC00ODgsNyArNDg4LDcgQEAKIGhhcmRfZmFpbDoKIAlwcmludGsoS0VSTl9FUlIKIAkgICAiRUVIOiBVbmFibGUgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmUgb2YgUENJIGRldmljZSAiCi0JICAgImF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lcyBcbiIKKwkgICAiYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJICAgIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IGRkYjgwZjUuLmVjNWRmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJFRUg6IERldGVjdGVkIFBDSSBidXMgZXJyb3Igb24gZGV2aWNlICVzXG4iLAotCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7CisJICAgICAgIGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KSk7CiAKIAlwZG4gPSBoYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggNmVhNDY5OC4uZDFiMTI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTM4NywyNCArMzg3LDEyIEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfY2VkZV9wYXJhbWV0ZXJzKHZvaWQpCiB7Ci0JaW50IGNhbGxfc3RhdHVzOwotCiAJbWVtc2V0KGNlZGVfcGFyYW1ldGVycywgMCwgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAotCQkJCU5VTEwsCi0JCQkJQ0VERV9MQVRFTkNZX1RPS0VOLAotCQkJCV9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKLQkJCQlDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7Ci0KLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCi0JCQklcyAlcyBFcnJvciBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyKDB4JXgpXG4iLAotCQkJX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJDRURFX0xBVEVOQ1k6IFwKLQkJCWdldC1zeXN0ZW0tcGFyYW1ldGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCXJldHVybiBjYWxsX3N0YXR1czsKKwlyZXR1cm4gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAorCQkJIE5VTEwsCisJCQkgQ0VERV9MQVRFTkNZX1RPS0VOLAorCQkJIF9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKKwkJCSBDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfY3B1X2hvdHBsdWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwppbmRleCAyZjU4YzcxLi4xZmVmYWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAKIAloID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOwogCWgtPm51bV9jYWxscysrOwotCWgtPnRiX3RvdGFsID0gbWZ0YigpIC0gaC0+dGJfc3RhcnQ7Ci0JaC0+cHVycl90b3RhbCA9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OworCWgtPnRiX3RvdGFsICs9IG1mdGIoKSAtIGgtPnRiX3N0YXJ0OworCWgtPnB1cnJfdG90YWwgKz0gbWZzcHIoU1BSTl9QVVJSKSAtIGgtPnB1cnJfc3RhcnQ7CiAKIAlwdXRfY3B1X3ZhcihoY2FsbF9zdGF0cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKaW5kZXggYjZmYTNlNC4uNGI3YTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJjLCBpOwogCi0JcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLiBcbiIsCisJcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLlxuIiwKIAkJIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CiAKIAkvKiBXZSBjYW5ub3QgdG8gcmVtb3ZlIGEgcm9vdCBidXMgdGhhdCBoYXMgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwppbmRleCAxNWViNjEwLi4yMjVhNTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXggYXV0byB0aW1lPSAlZFxuIiwgcGgtPm1heHRpbWVfdG9fYXV0byk7CiAKIAkvKnNldCBjcHUgc3RhdGUgYW5kIGhwdGUgc3RhdGVzIGFzIHdlbGwgc2NyYXRjaCBwYWQgYXJlYSAqLwotCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQSBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZHVtcF9mbGFncyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmNwdV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJjcHUgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZXJyb3JfZmxhZ3MpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5jcHVfZGF0YS5sZW5ndGhfY29waWVkKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiBIUFRFIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgSFBURSBBUkVBXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIkhQVEUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5lcnJvcl9mbGFncyk7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5ocHRlX2RhdGEubGVuZ3RoX2NvcGllZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIgU1JTRCBBUkVBIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIFNSU0QgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0Qgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuc291cmNlX3R5cGUpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0QgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuZXJyb3JfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGI0ODg2NjMuLjRlN2Y4OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKLQkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZCAiCisJCQkJCQkiUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCBmNWY3OTE5Li40Y2E2NDEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJbHBhcl9yYyA9IHBscGFyX3hpcnIoJnJldHVybl92YWx1ZSk7CiAJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHggXG4iLCBscGFyX3JjKTsKKwkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4XG4iLCBscGFyX3JjKTsKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CiB9CiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKLQkubmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICJYSUNTIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTQzMyw3ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS5uYW1lID0gIiBYSUNTICAgICAiLAorCS5uYW1lID0gIlhJQ1MiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLAogCS5tYXNrID0geGljc19tYXNrX2lycSwKIAkudW5tYXNrID0geGljc191bm1hc2tfaXJxLApAQCAtNTEwLDE1ICs1MTAsMTMgQEAKIC8qCiAgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCiAgKi8KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwotCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1zdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodW5zaWduZWQgbG9uZywgeGljc19pcGlfbWVzc2FnZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCiB7Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7CisKKwlzZXRfYml0KG1zZywgdGd0KTsKIAltYigpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlscGFyX3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7CkBAIC01NDQsMjUgKzU0MiwyMyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKIHsKKwl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOworCiAJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKIAogCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLwotCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJd2hpbGUgKCp0Z3QpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCBhNGI0MWRiLi5lY2FkMTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNzcsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbV9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTSBQSUMgIiwKKwkubmFtZSA9ICJDUE0gUElDIiwKIAkubWFzayA9IGNwbV9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtX3VubWFza19pcnEsCiAJLmVvaSA9IGNwbV9lbmRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDE3MDlhYzUuLmZjZWE0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewotCS5uYW1lID0gIiBDUE0yIFNJVSAiLAorCS5uYW1lID0gIkNQTTIgU0lVIiwKIAkubWFzayA9IGNwbTJfbWFza19pcnEsCiAJLnVubWFzayA9IGNwbTJfdW5tYXNrX2lycSwKIAkuYWNrID0gY3BtMl9hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGM2ZTExYjAuLmUwOTQzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLmFjawkJPSBmc2xfbXNpX2VuZF9pcnEsCi0JLm5hbWUJPSAiIEZTTC1NU0kgICIsCisJLm5hbWUJCT0gIkZTTC1NU0kiLAogfTsKIAogc3RhdGljIGludCBmc2xfbXNpX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2dyYWNrbGUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCmluZGV4IDVkYTM3YzIuLmNmMjdkZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCkBAIC01Niw5ICs1Niw5IEBACiB2b2lkIF9faW5pdCBzZXR1cF9ncmFja2xlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgMHhmZWMwMDAwMCwgMHhmZWUwMDAwMCwgMCk7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEsMSIpKQogCQlwcGNfcGNpX2FkZF9mbGFncyhQUENfUENJX1JFQVNTSUdOX0FMTF9CVVMpOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQogCQlncmFja2xlX3NldF9sb29wX3Nub29wKGhvc2UsIDEpOwogI2lmIDAJLyogRGlzYWJsZWQgZm9yIG5vdywgSFcgcHJvYmxlbXMgPz8/ICovCiAJZ3JhY2tsZV9zZXRfc3RnKGhvc2UsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IDBhNTVkYjguLjYzMjNlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgY2FjaGVkX0ExIChjYWNoZWRfODI1OVswXSkKICNkZWZpbmUgY2FjaGVkXzIxIChjYWNoZWRfODI1OVsxXSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpODI1OV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5X2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppODI1OV9ob3N0OwogCkBAIC00Miw3ICs0Miw3IEBACiAJaWYgKHBjaV9pbnRhY2spCiAJCWlycSA9IHJlYWRiKHBjaV9pbnRhY2spOwogCWVsc2UgewotCQlzcGluX2xvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OV9sb2NrKTsKIAkJbG9jayA9IDE7CiAKIAkJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwpAQCAtNzQsNyArNzQsNyBAQAogCQlpcnEgPSBOT19JUlE7CiAKIAlpZiAobG9jaykKLQkJc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yID4gNykgewogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCQlpbmIoMHhBMSk7IAkvKiBEVU1NWSAqLwpAQCAtOTUsNyArOTUsNyBAQAogCQlvdXRiKGNhY2hlZF8yMSwgMHgyMSk7CiAJCW91dGIoMHgyMCwgMHgyMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X3NldF9pcnFfbWFzayhpbnQgaXJxX25yKQpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIAogCXByX2RlYnVnKCJpODI1OV9tYXNrX2lycSglZClcbiIsIGlycV9ucik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPCA4KQogCQljYWNoZWRfMjEgfD0gMSA8PCBpcnFfbnI7CiAJZWxzZQogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogCiAJcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yIDwgOCkKIAkJY2FjaGVkXzIxICY9IH4oMSA8PCBpcnFfbnIpOwogCWVsc2UKIAkJY2FjaGVkX0ExICY9IH4oMSA8PCAoaXJxX25yLTgpKTsKIAlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7Ci0JLm5hbWUJCT0gIiBpODI1OSAgICAiLAorCS5uYW1lCQk9ICJpODI1OSIsCiAJLm1hc2sJCT0gaTgyNTlfbWFza19pcnEsCiAJLmRpc2FibGUJPSBpODI1OV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGk4MjU5X3VubWFza19pcnEsCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBNYXNrIGFsbCBmaXJzdCAqLwogCW91dGIoMHhmZiwgMHhBMSk7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJb3V0YihjYWNoZWRfMjEsIDB4MjEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBjcmVhdGUgYSBsZWdhY3kgaG9zdCAqLwogCWk4MjU5X2hvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTEVHQUNZLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCAyOGNkZGRkLi5kN2I5YjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlwaWMgKiBwcmltYXJ5X2lwaWM7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfbGV2ZWxfaXJxX2NoaXAsIGlwaWNfZWRnZV9pcnFfY2hpcDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlwaWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXBpY19pbmZvIGlwaWNfaW5mb1tdID0gewogCVsxXSA9IHsKQEAgLTUzMCwxMyArNTMwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKIAl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC01NDYsNyArNTQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CkBAIC01NzUsNyArNTc1LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC01ODUsNyArNTg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBpcGljX3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAvKiBsZXZlbCBpbnRlcnJ1cHRzIGFuZCBlZGdlIGludGVycnVwdHMgaGF2ZSBkaWZmZXJlbnQgYWNrIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19sZXZlbF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIElQSUMgICIsCisJLm5hbWUJCT0gIklQSUMiLAogCS51bm1hc2sJCT0gaXBpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IGlwaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gaXBpY19tYXNrX2lycSwKQEAgLTY2OCw3ICs2NjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2VkZ2VfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIiBJUElDICAiLAorCS5uYW1lCQk9ICJJUElDIiwKIAkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSBpcGljX21hc2tfaXJxLAogCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnFfYW5kX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggNjliZDZmNC4uOGMyN2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHhfcGljID0gewotCS5uYW1lID0gIiBNUEM4WFggU0lVICIsCisJLm5hbWUgPSAiTVBDOFhYIFNJVSIsCiAJLnVubWFzayA9IG1wYzh4eF91bm1hc2tfaXJxLAogCS5tYXNrID0gbXBjOHh4X21hc2tfaXJxLAogCS5hY2sgPSBtcGM4eHhfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0NzBkYzZjMS4uMzM5ZThhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBtcGljICptcGljczsKIHN0YXRpYyBzdHJ1Y3QgbXBpYyAqbXBpY19wcmltYXJ5Owotc3RhdGljIERFRklORV9TUElOTE9DSyhtcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobXBpY19sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgkvKiBYWFggZm9yIG5vdyAqLwogI2lmZGVmIENPTkZJR19JUlFfQUxMX0NQVVMKQEAgLTM0NywxMCArMzQ3LDEwIEBACiAJCXVuc2lnbmVkIGludCBtYXNrID0gMVUgPDwgKGZpeHVwLT5pbmRleCAmIDB4MWYpOwogCQl3cml0ZWwobWFzaywgZml4dXAtPmFwcGxlYmFzZSArIHNvZmYpOwogCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CisJCXJhd19zcGluX2xvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCQl3cml0ZWIoMHgxMSArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJCXdyaXRlbChmaXh1cC0+ZGF0YSwgZml4dXAtPmJhc2UgKyA0KTsKLQkJc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCX0KIH0KIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlEQkcoInN0YXJ0dXBfaHRfaW50ZXJydXB0KDB4JXgsIDB4JXgpIGluZGV4OiAlZFxuIiwKIAkgICAgc291cmNlLCBpcnFmbGFncywgZml4dXAtPmluZGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCS8qIEVuYWJsZSBhbmQgY29uZmlndXJlICovCiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAlpZiAoaXJxZmxhZ3MgJiBJUlFfTEVWRUwpCiAJCXRtcCB8PSAweDIyOwogCXdyaXRlbCh0bXAsIGZpeHVwLT5iYXNlICsgNCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKQEAgLTM5NiwxMiArMzk2LDEyIEBACiAJREJHKCJzaHV0ZG93bl9odF9pbnRlcnJ1cHQoMHgleCwgMHgleClcbiIsIHNvdXJjZSwgaXJxZmxhZ3MpOwogCiAJLyogRGlzYWJsZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CiAJdG1wIHw9IDE7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19QTQogCS8qIHVzZSB0aGUgbG93ZXN0IGJpdCBpbnZlcnRlZCB0byB0aGUgYWN0dWFsIEhXLApAQCAtNTE1LDcgKzUxNSw3IEBACiAJQlVHX09OKG1waWMtPmZpeHVwcyA9PSBOVUxMKTsKIAogCS8qIEluaXQgc3BpbmxvY2sgKi8KLQlzcGluX2xvY2tfaW5pdCgmbXBpYy0+Zml4dXBfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZtcGljLT5maXh1cF9sb2NrKTsKIAogCS8qIE1hcCBVMyBjb25maWcgc3BhY2UuIFdlIGFzc3VtZSBhbGwgSU8tQVBJQ3MgYXJlIG9uIHRoZSBwcmltYXJ5IGJ1cwogCSAqIHNvIHdlIG9ubHkgbmVlZCB0byBtYXAgNjRrQi4KQEAgLTU3MywxMiArNTczLDEyIEBACiAKIAlpZiAoY3B1bWFza19lcXVhbChtYXNrLCBjcHVfYWxsX21hc2spKSB7CiAJCXN0YXRpYyBpbnQgaXJxX3JvdmVyOwotCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9yb3Zlcl9sb2NrKTsKKwkJc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX3JvdmVyX2xvY2spOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIFJvdW5kLXJvYmluIGRpc3RyaWJ1dGlvbi4uLiAqLwogCWRvX3JvdW5kX3JvYmluOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCiAJCXdoaWxlICghY3B1X29ubGluZShpcnFfcm92ZXIpKSB7CiAJCQlpZiAoKytpcnFfcm92ZXIgPj0gTlJfQ1BVUykKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkJCWlycV9yb3ZlciA9IDA7CiAJCX0gd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWNwdWlkID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAkJaWYgKGNwdWlkID49IG5yX2NwdV9pZHMpCkBAIC0xMzY4LDE0ICsxMzY4LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCXYgPSBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xKTsKIAlpZiAoZW5hYmxlKQogCQl2IHw9IE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAllbHNlCiAJCXYgJj0gfk1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMSwgdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpKQpAQCAtMTM4OCw3ICsxMzg4LDcgQEAKIAlpZiAoIW1waWMpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCWlmIChtcGljX2lzX2lwaShtcGljLCBpcnEpKSB7CiAJCXJlZyA9IG1waWNfaXBpX3JlYWQoc3JjIC0gbXBpYy0+aXBpX3ZlY3NbMF0pICYKIAkJCX5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLAogCQkJICAgICAgIHJlZyB8IChwcmkgPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfc2V0dXBfdGhpc19jcHUodm9pZCkKQEAgLTE0MTUsNyArMTQxNSw3IEBACiAKIAlEQkcoIiVzOiBzZXR1cF90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCiAgCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIHdhbnQgaW50cnMuIGRlZmF1bHQgYWZmaW5pdHkgaXMgMHhmZmZmZmZmZgogCSAqIHVudGlsIGNoYW5nZWQgdmlhIC9wcm9jLiBUaGF0J3MgaG93IGl0J3MgZG9uZSBvbiB4ODYuIElmIHdlIHdhbnQKQEAgLTE0MzEsNyArMTQzMSw3IEBACiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIDAgKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAwKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJQlVHX09OKG1waWMgPT0gTlVMTCk7CiAKIAlEQkcoIiVzOiB0ZWFyZG93bl90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAogCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIGRvbid0IHdhbnQgaW50cnMuICAqLwogCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlcyA7IGkrKykKQEAgLTE0NzQsNyArMTQ3NCw3IEBACiAJICovCiAJbXBpY19lb2kobXBpYyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtMTU3NSw3ICsxNTc1LDcgQEAKIAlpbnQgaTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAotCXByaW50ayhLRVJOX0lORk8gIm1waWM6IHJlcXVlc3RpbmcgSVBJcyAuLi4gXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJtcGljOiByZXF1ZXN0aW5nIElQSXMuLi5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyhtcGljLT5pcnFob3N0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggMGY2YWIwNi4uM2I2YTlhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC02MCw3ICs2MCw3IEBACiAJLmVvaQkJPSBtcGljX2VuZF9pcnEsCiAJLnNldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCiAJLnNldF9hZmZpbml0eQk9IG1waWNfc2V0X2FmZmluaXR5LAotCS5uYW1lCQk9ICJQQVNFTUktTVNJICIsCisJLm5hbWUJCT0gIlBBU0VNSS1NU0kiLAogfTsKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCmluZGV4IGI2YmQ3NzUuLjMxYWNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIApAQCAtMTg5LDYgKzE5MCw3IEBACiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNUFNDX0NUTFJfTkFNRSwgcG9ydF9udW1iZXIpOwogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDUpOwogCWlmIChlcnIpCkBAIC0zMDIsNiArMzA0LDcgQEAKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwppbmRleCA1YjMyYWRjLi41YzAxNDM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwpAQCAtMTc0LDcgKzE3NCw4IEBACiAJCXwgTDJDX0NGR19DUElNIHwgTDJDX0NGR19UUElNIHwgTDJDX0NGR19MSU0gfCBMMkNfQ0ZHX1NNQ007CiAKIAkvKiBDaGVjayBmb3IgNDYwRVgvR1Qgc3BlY2lhbCBoYW5kbGluZyAqLwotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGwyLWNhY2hlLTQ2MGd0IikpCiAJCXIgfD0gTDJDX0NGR19SREJXOwogCiAJbXRkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfQ0ZHLCByKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDJhY2M5MjguLmQ5MjdkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcWVfaWNfaXJxX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIFFFSUMgICIsCisJLm5hbWUgPSAiUUVJQyIsCiAJLnVubWFzayA9IHFlX2ljX3VubWFza19pcnEsCiAJLm1hc2sgPSBxZV9pY19tYXNrX2lycSwKIAkubWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAogCWlmIChxZV9pY19pbmZvW2h3XS5tYXNrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBtYXAgcmVzZXJ2ZWQgSVJRIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgbWFwIHJlc2VydmVkIElSUVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEZWZhdWx0IGNoaXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCmluZGV4IDdjODc0NjAuLjc3ZTQ5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYwpAQCAtMTU3LDEzICsxNTcsMTMgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgKnBpb19tYXA7CiAKIAlpZiAocGFyX2lvID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYXJfaW8gbm90IGluaXRpYWxpemVkIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGFyX2lvIG5vdCBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBpby1oYW5kbGUiLCBOVUxMKTsKIAlpZiAocGggPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZSBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3MSwxMiArMTcxLDEyIEBACiAKIAlwaW9fbWFwID0gb2ZfZ2V0X3Byb3BlcnR5KHBpbywgInBpby1tYXAiLCAmcGlvX21hcF9sZW4pOwogCWlmIChwaW9fbWFwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGlzIG5vdCBzZXQhIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBpcyBub3Qgc2V0IVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcGlvX21hcF9sZW4gLz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAJaWYgKChwaW9fbWFwX2xlbiAlIDYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwppbmRleCA2ZjIyMGE5Li4wMDM4ZmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHVpY19pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIFVJQyAgIiwKKwkubmFtZQkJPSAiVUlDIiwKIAkudW5tYXNrCQk9IHVpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IHVpY19tYXNrX2lycSwKICAJLm1hc2tfYWNrCT0gdWljX21hc2tfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA0ZTYxNTJjLi44YmFkN2Q1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IHhtb25fZ2F0ZTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3htb24gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5feG1vbiBfX3JlYWRfbW9zdGx5ID0gMDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRyczsKIHN0YXRpYyBpbnQgc2l6ZSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGM4MDIzNTIuLjBkOGNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC01NCw2ICs1NCw5IEBACiAJZGVwZW5kcyBvbiBCVUcKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTCisJZGVmX2Jvb2wgeQorCiBjb25maWcgTk9fSU9NRU0KIAlkZWZfYm9vbCB5CiAKQEAgLTg3LDYgKzkwLDcgQEAKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfREVGQVVMVF9OT19TUElOX01VVEVYRVMKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKQEAgLTk1LDYgKzk5LDkgQEAKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCAyMjgzOTMzLi40NWUwYzYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtNiw0ICs2LDE3IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKK2NvbmZpZyBERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworCWJvb2wgIlN0cmljdCB1c2VyIGNvcHkgc2l6ZSBjaGVja3MiCisJLS0taGVscC0tLQorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gdHVybnMgYSBjZXJ0YWluIHNldCBvZiBzYW5pdHkgY2hlY2tzIGZvciB1c2VyCisJICBjb3B5IG9wZXJhdGlvbnMgaW50byBjb21waWxlIHRpbWUgd2FybmluZ3MuCisKKwkgIFRoZSBjb3B5X2Zyb21fdXNlcigpIGV0YyBjaGVja3MgYXJlIHRoZXJlIHRvIGhlbHAgdGVzdCBpZiB0aGVyZQorCSAgYXJlIHN1ZmZpY2llbnQgc2VjdXJpdHkgY2hlY2tzIG9uIHRoZSBsZW5ndGggYXJndW1lbnQgb2YKKwkgIHRoZSBjb3B5IG9wZXJhdGlvbiwgYnkgaGF2aW5nIGdjYyBwcm92ZSB0aGF0IHRoZSBhcmd1bWVudCBpcworCSAgd2l0aGluIGJvdW5kcy4KKworCSAgSWYgdW5zdXJlLCBvciBpZiB5b3UgcnVuIGFuIG9sZGVyIChwcmUgNC40KSBnY2MsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggZmM4ZmIyMC4uMGRhMTA3NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogIwogCiBpZm5kZWYgQ09ORklHXzY0QklUCitMRF9CRkQJCTo9IGVsZjMyLXMzOTAKIExERkxBR1MJCTo9IC1tIGVsZl9zMzkwCiBLQlVJTERfQ0ZMQUdTCSs9IC1tMzEKIEtCVUlMRF9BRkxBR1MJKz0gLW0zMQpAQCAtMjEsNiArMjIsNyBAQAogU1RBQ0tfU0laRQk6PSA4MTkyCiBDSEVDS0ZMQUdTCSs9IC1EX19zMzkwX18gLW1zaXplLWxvbmcKIGVsc2UKK0xEX0JGRAkJOj0gZWxmNjQtczM5MAogTERGTEFHUwkJOj0gLW0gZWxmNjRfczM5MAogTU9ERkxBR1MJKz0gLWZwaWMgLURfX1BJQ19fCiBLQlVJTERfQ0ZMQUdTCSs9IC1tNjQKQEAgLTMwLDYgKzMyLDggQEAKIENIRUNLRkxBR1MJKz0gLURfX3MzOTBfXyAtRF9fczM5MHhfXwogZW5kaWYKIAorZXhwb3J0IExEX0JGRAorCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfRzUpICAgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ZzUpCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjkwMCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejkwMCkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTkwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTkwKQpAQCAtODUsNyArODksOSBAQAogT0JKQ09QWUZMQUdTCTo9IC1PIGJpbmFyeQogTERGTEFHU192bWxpbnV4IDo9IC1lIHN0YXJ0CiAKLWhlYWQteQkJOj0gYXJjaC9zMzkwL2tlcm5lbC9oZWFkLm8gYXJjaC9zMzkwL2tlcm5lbC9pbml0X3Rhc2subworaGVhZC15CQk6PSBhcmNoL3MzOTAva2VybmVsL2hlYWQubworaGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsLyQoaWYgJChDT05GSUdfNjRCSVQpLGhlYWQ2NC5vLGhlYWQzMS5vKQoraGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsL2luaXRfdGFzay5vCiAKIGNvcmUteQkJKz0gYXJjaC9zMzkwL21tLyBhcmNoL3MzOTAva2VybmVsLyBhcmNoL3MzOTAvY3J5cHRvLyBcCiAJCSAgIGFyY2gvczM5MC9hcHBsZGF0YS8gYXJjaC9zMzkwL2h5cGZzLyBhcmNoL3MzOTAva3ZtLwpAQCAtOTksMTIgKzEwNSwxMiBAQAogCiBib290CQk6PSBhcmNoL3MzOTAvYm9vdAogCi1hbGw6IGltYWdlCithbGw6IGltYWdlIGJ6SW1hZ2UKIAogaW5zdGFsbDogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKIAotaW1hZ2U6IHZtbGludXgKK2ltYWdlIGJ6SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAogemZjcGR1bXA6CkBAIC0xMTYsNCArMTIyLDUgQEAKICMgRG9uJ3QgdXNlIHRhYnMgaW4gZWNobyBhcmd1bWVudHMKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICAnKiBpbWFnZSAgICAgICAgICAgLSBLZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9pbWFnZSknCisgIGVjaG8JJyogYnpJbWFnZSAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9iekltYWdlKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L01ha2VmaWxlCmluZGV4IDRkOTdlZWYuLjg4MDBjZjA5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQpAQCAtOSwxMCArOSwxOCBAQAogRVhUUkFfQ0ZMQUdTICA6PSAtRENPTVBJTEVfVkVSU0lPTj0kKENPTVBJTEVfVkVSU0lPTikgLWdzdGFicyAtSS4KIAogdGFyZ2V0cyA6PSBpbWFnZQordGFyZ2V0cyArPSBiekltYWdlCitzdWJkaXItIDo9IGNvbXByZXNzZWQKIAogJChvYmopL2ltYWdlOiB2bWxpbnV4IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKIAorJChvYmopL2J6SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCiskKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACisKIGluc3RhbGw6ICQoQ09ORklHVVJFKSAkKG9iaikvaW1hZ2UKIAlzaCAteCAgJChzcmN0cmVlKS8kKG9iaikvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQob2JqKS9pbWFnZSBcCiAJICAgICAgU3lzdGVtLm1hcCBLZXJudHlwZXMgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGE2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0wLDAgKzEsNjAgQEAKKyMKKyMgbGludXgvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIworIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAorIworCitCSVRTIDo9ICQoaWYgJChDT05GSUdfNjRCSVQpLDY0LDMxKQorCit0YXJnZXRzCTo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkgICB2bWxpbnV4LmJpbi5sem1hIG1pc2MubyBwaWdneS5vIHNpemVzLmggaGVhZCQoQklUUykubworCitLQlVJTERfQ0ZMQUdTIDo9IC1tJChCSVRTKSAtRF9fS0VSTkVMX18gJChMSU5VWF9JTkNMVURFKSAtTzIKK0tCVUlMRF9DRkxBR1MgKz0gJChjZmxhZ3MteSkKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXBhY2tlZC1zdGFjaykKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZmZyZWVzdGFuZGluZykKKworR0NPVl9QUk9GSUxFIDo9IG4KKworT0JKRUNUUyA6PSAkKGFkZHByZWZpeCAkKG9ianRyZWUpL2FyY2gvczM5MC9rZXJuZWwvLCBoZWFkLm8gc2NscC5vIGViY2RpYy5vKQorT0JKRUNUUyArPSAkKG9iaikvaGVhZCQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9waWdneS5vCisKK0xERkxBR1Nfdm1saW51eCA6PSAtLW9mb3JtYXQgJChMRF9CRkQpIC1lIHN0YXJ0dXAgLVQKKyQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChPQkpFQ1RTKQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQorCUA6CisKK3NlZC1zaXplcyA6PSAtZSAncy9eXChbMC05YS1mQS1GXSpcKSAuIFwoX19ic3Nfc3RhcnRcfF9lbmRcKSQkL1wjZGVmaW5lIFNaXDIgMHhcMS9wJworCitxdWlldF9jbWRfc2l6ZXMgPSBHRU4gJEAKKyAgICAgIGNtZF9zaXplcyA9ICQoTk0pICQ8IHwgc2VkIC1uICQoc2VkLXNpemVzKSA+ICRACisKKyQob2JqKS9zaXplcy5oOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsc2l6ZXMpCisKK0FGTEFHU19oZWFkJChCSVRTKS5vICs9IC1JJChvYmopCiskKG9iaikvaGVhZCQoQklUUykubzogJChvYmopL3NpemVzLmgKKworQ0ZMQUdTX21pc2MubyArPSAtSSQob2JqKQorJChvYmopL21pc2MubzogJChvYmopL3NpemVzLmgKKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICAtUiAuY29tbWVudCAtUworJChvYmopL3ZtbGludXguYmluOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKwordm1saW51eC5iaW4uYWxsLXkgOj0gJChvYmopL3ZtbGludXguYmluCisKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKKworJChvYmopL3ZtbGludXguYmluLmd6OiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJ6aXAyKQorJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQodm1saW51eC5iaW4uYWxsLXkpCisJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKKworTERGTEFHU19waWdneS5vIDo9IC1yIC0tZm9ybWF0IGJpbmFyeSAtLW9mb3JtYXQgJChMRF9CRkQpIC1UCiskKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi4kKHN1ZmZpeC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkMzEuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1NTIzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWwJJXIxNSwuTHN0YWNrLS5MUEcxKCVyMTMpCisJYWhpCSVyMTUsLTk2CisJbAklcjEsLkxkZWNvbXByZXNzLS5MUEcxKCVyMTMpCisJYmFzcgklcjE0LCVyMQorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbHIJJXI0LCVyMgorCWwJJXIyLC5Mb2Zmc2V0LS5MUEcxKCVyMTMpCisJbGEJJXI0LDAoJXIyLCVyNCkKKwlsCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxyCSVyNSwlcjMKKwkjIG1vdmUgdGhlIG1lbW9yeSBtb3ZlciBzb21lcGxhY2Ugc2FmZQorCWxhCSVyMSwweDIwMAorCW12YwkwKG1vdmVyX2VuZC1tb3ZlciwlcjEpLG1vdmVyLS5MUEcxKCVyMTMpCisJIyBkZWNvbXByZXNzIGltYWdlIGlzIHN0YXJ0ZWQgYXQgMHgxMTAwMAorCWxyCSVyNiwlcjIKKwlicgklcjEKK21vdmVyOgorCW12Y2xlCSVyMiwlcjQsMAorCWpvCW1vdmVyCisJYnIJJXI2Cittb3Zlcl9lbmQ6CisKKwkuYWxpZ24JOAorLkxzdGFjazoKKwkubG9uZwkweDgwMDAgKyAoMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSkKKy5MZGVjb21wcmVzczoKKwkubG9uZwlkZWNvbXByZXNzX2tlcm5lbAorLkxvZmZzZXQ6CisJLmxvbmcJMHgxMTAwMAorLkxtdnNpemU6CisJLmxvbmcJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkNjQuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4MmNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWxnCSVyMTUsLkxzdGFjay0uTFBHMSglcjEzKQorCWFnaGkJJXIxNSwtMTYwCisJYnJhc2wJJXIxNCxkZWNvbXByZXNzX2tlcm5lbAorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbGdyCSVyNCwlcjIKKwlsZwklcjIsLkxvZmZzZXQtLkxQRzEoJXIxMykKKwlsYQklcjQsMCglcjIsJXI0KQorCWxnCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxncgklcjUsJXIzCisJIyBtb3ZlIHRoZSBtZW1vcnkgbW92ZXIgc29tZXBsYWNlIHNhZmUKKwlsYQklcjEsMHgyMDAKKwltdmMJMChtb3Zlcl9lbmQtbW92ZXIsJXIxKSxtb3Zlci0uTFBHMSglcjEzKQorCSMgZGVjb21wcmVzcyBpbWFnZSBpcyBzdGFydGVkIGF0IDB4MTEwMDAKKwlsZ3IJJXI2LCVyMgorCWJyCSVyMQorbW92ZXI6CisJbXZjbGUJJXIyLCVyNCwwCisJam8JbW92ZXIKKwlicgklcjYKK21vdmVyX2VuZDoKKworCS5hbGlnbgk4CisuTHN0YWNrOgorCS5xdWFkCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQorLkxvZmZzZXQ6CisJLnF1YWQJMHgxMTAwMAorLkxtdnNpemU6CisJLnF1YWQJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBEZWZpbml0aW9ucyBhbmQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGtlcm5lbCBkZWNvbXByZXNzb3IKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqCisgKiBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KKyNpbmNsdWRlICJzaXplcy5oIgorCisvKgorICogZ3ppcCBkZWNsYXJhdGlvbnMKKyAqLworI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyN1bmRlZiBtZW1zZXQKKyN1bmRlZiBtZW1jcHkKKyN1bmRlZiBtZW1tb3ZlCisjZGVmaW5lIG1lbXplcm8ocywgbikgbWVtc2V0KChzKSwgMCwgKG4pKQorCisvKiBTeW1ib2xzIGRlZmluZWQgYnkgbGlua2VyIHNjcmlwdHMgKi8KK2V4dGVybiBjaGFyIGlucHV0X2RhdGFbXTsKK2V4dGVybiBpbnQgaW5wdXRfbGVuOworZXh0ZXJuIGludCBfdGV4dDsKK2V4dGVybiBpbnQgX2VuZDsKKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CisKKyNpZmRlZiBDT05GSUdfSEFWRV9LRVJORUxfQlpJUDIKKyNkZWZpbmUgSEVBUF9TSVpFCTB4NDAwMDAwCisjZWxzZQorI2RlZmluZSBIRUFQX1NJWkUJMHgxMDAwMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCisKK2V4dGVybiBfc2NscF9wcmludF9lYXJseShjb25zdCBjaGFyICopOworCitpbnQgcHV0cyhjb25zdCBjaGFyICpzKQoreworCV9zY2xwX3ByaW50X2Vhcmx5KHMpOworCXJldHVybiAwOworfQorCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWNoYXIgKnhzOworCisJaWYgKGMgPT0gMCkKKwkJcmV0dXJuIF9fYnVpbHRpbl9tZW1zZXQocywgMCwgbik7CisKKwl4cyA9IChjaGFyICopIHM7CisJaWYgKG4gPiAwKQorCQlkbyB7CisJCQkqeHMrKyA9IGM7CisJCX0gd2hpbGUgKC0tbiA+IDApOworCXJldHVybiBzOworfQorCit2b2lkICptZW1jcHkodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7Cit9CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCWNoYXIgKmQ7CisJY29uc3QgY2hhciAqczsKKworCWlmIChfX2Rlc3QgPD0gX19zcmMpCisJCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7CisJZCA9IF9fZGVzdCArIF9fbjsKKwlzID0gX19zcmMgKyBfX247CisJd2hpbGUgKF9fbi0tKQorCQkqLS1kID0gKi0tczsKKwlyZXR1cm4gX19kZXN0OworfQorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwc3cgPSAweDAwMGEwMDAwZGVhZGJlZWZVTEw7CisKKwlwdXRzKCJcblxuIik7CisJcHV0cyh4KTsKKwlwdXRzKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWQiKTsKKworCWFzbSB2b2xhdGlsZSgibHBzdyAlMCIgOiA6ICJRIiAocHN3KSk7Cit9CisKKy8qCisgKiBTYWZlIGd1YXJkIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGFnYWluc3QgYSBtZW1vcnkgYXJlYSB0aGF0IHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGlzIGNvbXBsZXgKKyAqIChzZWUgY2lvX2dldF9pcGxpbmZvIGFuZCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKSBidXQgaWYgdGhlIHBvaW50ZXIgdG8KKyAqIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGludGVyc2VjdHMgd2l0aCB0aGUgcGFzc2VkIG1lbW9yeSBhcmVhIHdlIGNhbgorICogc2FmZWx5IGFzc3VtZSB0aGF0IHdlIGNhbiByZWFkIGZyb20gdGhhdCBtZW1vcnkuIEluIHRoYXQgY2FzZSBqdXN0IGNvcHkKKyAqIHRoZSBtZW1vcnkgdG8gSVBMX1BBUk1CTE9DS19PUklHSU4gZXZlbiBpZiB0aGVyZSBpcyBubyBpcGwgcGFyYW1ldGVyCisgKiBibG9jay4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfaXBsX3Bhcm1ibG9jayh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKnNyYywgKmRzdDsKKworCXNyYyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIFMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0cjsKKwlpZiAoc3JjICsgUEFHRV9TSVpFIDw9IHN0YXJ0IHx8IHNyYyA+PSBzdGFydCArIHNpemUpCisJCXJldHVybjsKKwlkc3QgPSAodm9pZCAqKSBJUExfUEFSTUJMT0NLX09SSUdJTjsKKwltZW1tb3ZlKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCVMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0ciA9IElQTF9QQVJNQkxPQ0tfT1JJR0lOOworfQorCit1bnNpZ25lZCBsb25nIGRlY29tcHJlc3Nfa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvdXRwdXRfYWRkcjsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXQ7CisKKwlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOworCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJLyoKKwkgKiBNb3ZlIHRoZSBpbml0cmQgcmlnaHQgYmVoaW5kIHRoZSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZAorCSAqIGtlcm5lbCBpbWFnZS4KKwkgKi8KKwlpZiAoSU5JVFJEX1NUQVJUICYmIElOSVRSRF9TSVpFICYmCisJICAgIElOSVRSRF9TVEFSVCA8ICh1bnNpZ25lZCBsb25nKSBvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0KSB7CisJCWNoZWNrX2lwbF9wYXJtYmxvY2sob3V0cHV0ICsgU1pfX2Jzc19zdGFydCwKKwkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUpOworCQltZW1tb3ZlKG91dHB1dCArIFNaX19ic3Nfc3RhcnQsCisJCQkodm9pZCAqKSBJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFKTsKKwkJSU5JVFJEX1NUQVJUID0gKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQ7CisJfQorI2VuZGlmCisKKwlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXQsIE5VTEwsIGVycm9yKTsKKwlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSBvdXRwdXQ7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBmNzlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsNTUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCisjaWZkZWYgQ09ORklHXzY0QklUCitPVVRQVVRfRk9STUFUKCJlbGY2NC1zMzkwIiwgImVsZjY0LXMzOTAiLCAiZWxmNjQtczM5MCIpCitPVVRQVVRfQVJDSChzMzkwOjY0LWJpdCkKKyNlbHNlCitPVVRQVVRfRk9STUFUKCJlbGYzMi1zMzkwIiwgImVsZjMyLXMzOTAiLCAiZWxmMzItczM5MCIpCitPVVRQVVRfQVJDSChzMzkwKQorI2VuZGlmCisKK0VOVFJZKHN0YXJ0dXApCisKK1NFQ1RJT05TCit7CisJLyogQmUgY2FyZWZ1bCBwYXJ0cyBvZiBoZWFkXzY0LlMgYXNzdW1lIHN0YXJ0dXBfMzIgaXMgYXQKKwkgKiBhZGRyZXNzIDAuCisJICovCisJLiA9IDA7CisJLmhlYWQudGV4dCA6IHsKKwkJX2hlYWQgPSAuIDsKKwkJSEVBRF9URVhUCisJCV9laGVhZCA9IC4gOworCX0KKwkucm9kYXRhLmNvbXByZXNzZWQgOiB7CisJCSooLnJvZGF0YS5jb21wcmVzc2VkKQorCX0KKwkudGV4dCA6CXsKKwkJX3RleHQgPSAuOwkvKiBUZXh0ICovCisJCSooLnRleHQpCisJCSooLnRleHQuKikKKwkJX2V0ZXh0ID0gLiA7CisJfQorCS5yb2RhdGEgOiB7CisJCV9yb2RhdGEgPSAuIDsKKwkJKigucm9kYXRhKQkgLyogcmVhZC1vbmx5IGRhdGEgKi8KKwkJKigucm9kYXRhLiopCisJCV9lcm9kYXRhID0gLiA7CisJfQorCS5kYXRhIDoJeworCQlfZGF0YSA9IC4gOworCQkqKC5kYXRhKQorCQkqKC5kYXRhLiopCisJCV9lZGF0YSA9IC4gOworCX0KKwkuID0gQUxJR04oMjU2KTsKKwkuYnNzIDogeworCQlfYnNzID0gLiA7CisJCSooLmJzcykKKwkJKiguYnNzLiopCisJCSooQ09NTU9OKQorCQkuID0gQUxJR04oOCk7CS8qIEZvciBjb252ZW5pZW5jZSBkdXJpbmcgemVyb2luZyAqLworCQlfZWJzcyA9IC47CisJfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4LnNjciBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzgyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKQEAgLTAsMCArMSwxMCBAQAorU0VDVElPTlMKK3sKKyAgLnJvZGF0YS5jb21wcmVzc2VkIDogeworCWlucHV0X2xlbiA9IC47CisJTE9ORyhpbnB1dF9kYXRhX2VuZCAtIGlucHV0X2RhdGEpIGlucHV0X2RhdGEgPSAuOworCSooLmRhdGEpCisJb3V0cHV0X2xlbiA9IC4gLSA0OworCWlucHV0X2RhdGFfZW5kID0gLjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNmJlNDUwMy4uNThmNDY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtNzgsMTQgKzc4LDE0IEBACiAJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJaW50IHJldDsKIAotCXNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7Ci0Jc2N0eC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgorCXNjdHgtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgogCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CiAKIAlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleShzY3R4LT5mYWxsYmFjay5jaXAsIGluX2tleSwga2V5X2xlbik7CiAJaWYgKHJldCkgewogCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKLQkJdGZtLT5jcnRfZmxhZ3MgfD0gKHNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJgorCQl0Zm0tPmNydF9mbGFncyB8PSAoc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmCiAJCQkJQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBiNDE2YWExLi43YWU3MWNjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTM2LDYgKzM2LDEzIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggMmI5MmQ1MC4uODdjZjUyMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAogc3RhdGljIGludCBkaWFnMjI0KHZvaWQgKnB0cikKIHsKLQlpbnQgcmMgPSAtRU5PVFNVUFA7CisJaW50IHJjID0gLUVPUE5PVFNVUFA7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJZGlhZwklMSwlMiwweDIyNFxuIgpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChkaWFnMjI0KGRpYWcyMjRfY3B1X25hbWVzKSkgewogCQlrZnJlZShkaWFnMjI0X2NwdV9uYW1lcyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAJRUJDQVNDKGRpYWcyMjRfY3B1X25hbWVzICsgMTYsICgqZGlhZzIyNF9jcHVfbmFtZXMgKyAxKSAqIDE2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAyYTExM2Q2Li40NTFiZmJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xOCw4ICsxOCw2IEBACiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkgIHsgKGkpIH0KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKIAlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCkBAIC0zNSwyNiArMzMsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKLQlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbAklMCwwKCUzKVxuIgkJCQlcCi0JCSIwOglscgklMSwlMFxuIgkJCQlcCi0JCW9wX3N0cmluZyAiCSUxLCU0XG4iCQkJCVwKLQkJIgljcwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQogewogCWJhcnJpZXIoKTsKQEAgLTEwMSwxOSArNzksMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3MJJTAsJTIsJTEiCiAJCTogIitkIiAob2xkKSwgIj1RIiAodi0+Y291bnRlcikKIAkJOiAiZCIgKG5ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIgljcwklMCwlMywwKCUyKSIKLQkJOiAiK2QiIChvbGQpLCAiPW0iICh2LT5jb3VudGVyKQotCQk6ICJhIiAodiksICJkIiAobmV3KSwgIm0iICh2LT5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCXJldHVybiBvbGQ7CiB9CiAKQEAgLTE0MCw4ICsxMTAsNiBAQAogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAogCWxvbmcgbG9uZyBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXApAQCAtMTU3LDI2ICsxMjUsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU0dfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCi0JbG9uZyBsb25nIG9sZF92YWwsIG5ld192YWw7CQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbGcJJTAsMCglMylcbiIJCQkJXAotCQkiMDoJbGdyCSUxLCUwXG4iCQkJCVwKLQkJb3Bfc3RyaW5nICIJJTEsJTRcbiIJCQkJXAotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKIHsKIAliYXJyaWVyKCk7CkBAIC0yMTQsMTkgKzE2MiwxMSBAQAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAogCQkJCQkgICAgIGxvbmcgbG9uZyBvbGQsIGxvbmcgbG9uZyBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3NnCSUwLCUyLCUxIgogCQk6ICIrZCIgKG9sZCksICI9USIgKHYtPmNvdW50ZXIpCiAJCTogImQiIChuZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIiwgIm1lbW9yeSIpOwotI2Vsc2UgLyogX19HTlVDX18gKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJY3NnCSUwLCUzLDAoJTIpIgotCQk6ICIrZCIgKG9sZCksICI9bSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICh2KSwgImQiIChuZXcpLCAibSIgKHYtPmNvdW50ZXIpCi0JCTogImNjIiwgIm1lbW9yeSIpOwotI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIG9sZDsKIH0KIApAQCAtMjQzLDEwICsxODMsOCBAQAogCXJlZ2lzdGVyX3BhaXIgcnA7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJbG0JJTAsJU4wLDAoJTEpIgotCQk6ICI9JmQiIChycCkKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQotCQkpOworCQkiCWxtCSUwLCVOMCwlMSIKKwkJOiAiPSZkIiAocnApIDogIlEiICh2LT5jb3VudGVyKQkpOwogCXJldHVybiBycC5wYWlyOwogfQogCkBAIC0yNTUsMTAgKzE5Myw4IEBACiAJcmVnaXN0ZXJfcGFpciBycCA9IHsucGFpciA9IGl9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0bQklMSwlTjEsMCglMikiCi0JCTogIj1tIiAodi0+Y291bnRlcikKLQkJOiAiZCIgKHJwKSwgImEiICgmdi0+Y291bnRlcikKLQkJKTsKKwkJIglzdG0JJTEsJU4xLCUwIgorCQk6ICI9USIgKHYtPmNvdW50ZXIpIDogImQiIChycCkgKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIGxvbmcgbmV3KQpAQCAtMjY3LDExICsyMDMsMTEgQEAKIAlyZWdpc3Rlcl9wYWlyIHJwX29sZDsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIglsbQklMCwlTjAsMCglMilcbiIKLQkJIjA6CWNkcwklMCwlMywwKCUyKVxuIgorCQkiCWxtCSUwLCVOMCwlMVxuIgorCQkiMDoJY2RzCSUwLCUyLCUxXG4iCiAJCSIJamwJMGJcbiIKLQkJOiAiPSZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCTogIj0mZCIgKHJwX29sZCksICI9USIgKHYtPmNvdW50ZXIpCisJCTogImQiIChycF9uZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIik7CiAJcmV0dXJuIHJwX29sZC5wYWlyOwogfQpAQCAtMjgzLDkgKzIxOSw5IEBACiAJcmVnaXN0ZXJfcGFpciBycF9uZXcgPSB7LnBhaXIgPSBuZXd9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCWNkcwklMCwlMywwKCUyKSIKLQkJOiAiKyZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCSIJY2RzCSUwLCUyLCUxIgorCQk6ICIrJmQiIChycF9vbGQpLCAiPVEiICh2LT5jb3VudGVyKQorCQk6ICJkIiAocnBfbmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIpOwogCXJldHVybiBycF9vbGQucGFpcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBiMzA2MDZmLi4yZTA1OTcyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC03MSw4ICs3MSw2IEBACiAjZGVmaW5lIF9fQklUT1BTX0FORAkJIm5yIgogI2RlZmluZSBfX0JJVE9QU19YT1IJCSJ4ciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsCSUwLCUyXG4iCQkJXApAQCAtODUsMjIgKzgzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsCSUwLDAoJTQpXG4iCQkJXAotCQkiMDoJbHIJJTEsJTBcbiIJCQlcCi0JCV9fb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQlcCi0JCSIJY3MJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX0FMSUdOCQk3CkBAIC0xMDksOCArOTEsNiBAQAogI2RlZmluZSBfX0JJVE9QU19BTkQJCSJuZ3IiCiAjZGVmaW5lIF9fQklUT1BTX1hPUgkJInhnciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsZwklMCwlMlxuIgkJCVwKQEAgLTEyMywyMyArMTAzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsZwklMCwwKCU0KVxuIgkJCVwKLQkJIjA6CWxncgklMSwlMFxuIgkJCVwKLQkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKLQkJIgljc2cJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX1dPUkRTKGJpdHMpICgoKGJpdHMpK19fQklUT1BTX1dPUkRTSVpFLTEpL19fQklUT1BTX1dPUkRTSVpFKQpAQCAtMjYxLDkgKzIyNCw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW9jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpIDogImEiIChhZGRyKSwKLQkJICAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQkiCW9jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpIDogIlEiIChfb2lfYml0bWFwW25yICYgN10pIDogImNjIiApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC0yOTAsOSArMjUyLDggQEAKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbmMJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikJOiAiYSIgKGFkZHIpLAotCQkgICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKSA6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKSA6ICJjYyIgKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMzE4LDkgKzI3OSw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogICI9bSIgKCooY2hhciAqKSBhZGRyKSA6ICJhIiAoYWRkciksCi0JCSAgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCSIJeGMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikgOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTM0OSwxMCArMzA5LDkgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJY2ggPSAqKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJb2MJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5Iik7CisJCSIJb2MJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikJOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOwogfQogI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9iaXQoWCxZKQkJdGVzdF9hbmRfc2V0X2JpdF9zaW1wbGUoWCxZKQpAQCAtMzY5LDEwICszMjgsOSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOwogCWFzbSB2b2xhdGlsZSgKLQkJIgluYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQk6ICJhIiAoYWRkciksICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwKLQkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKQk6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KFgsWSkJdGVzdF9hbmRfY2xlYXJfYml0X3NpbXBsZShYLFkpCkBAIC0zODksMTAgKzM0Nyw5IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCTogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIpOworCQkiCXhjCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpCTogIlEiIChfb2lfYml0bWFwW25yICYgN10pCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKIH0KICNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KFgsWSkJdGVzdF9hbmRfY2hhbmdlX2JpdF9zaW1wbGUoWCxZKQpAQCAtNTkxLDExICs1NDgsMTEgQEAKIAlwID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpIHAgKyBvZmZzZXQpOwogI2lmbmRlZiBfX3MzOTB4X18KIAlhc20gdm9sYXRpbGUoCi0JCSIJaWMJJTAsMCglMSlcbiIKLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDgsMyglMSkiCi0JCTogIj0mZCIgKHdvcmQpIDogImEiIChwKSwgIm0iICgqcCkgOiAiY2MiKTsKKwkJIglpYwklMCwlTzEoJVIxKVxuIgorCQkiCWljbQklMCwyLCVPMSsxKCVSMSlcbiIKKwkJIglpY20JJTAsNCwlTzErMiglUjEpXG4iCisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKSIKKwkJOiAiPSZkIiAod29yZCkgOiAiUSIgKCpwKSA6ICJjYyIpOwogI2Vsc2UKIAlhc20gdm9sYXRpbGUoCiAJCSIJbHJ2ZwklMCwlMSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaAppbmRleCBiMTA2NmI5Li45YmVlYjlkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC01LDEyICs1LDYgQEAKIAogI2lmZGVmIENPTkZJR19CVUcKIAotI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBTMzkwX0xPTkcgIi5xdWFkIgotI2Vsc2UKLSNkZWZpbmUgUzM5MF9MT05HICIubG9uZyIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIAogI2RlZmluZSBfX0VNSVRfQlVHKHgpIGRvIHsJCQkJCVwKQEAgLTIxLDcgKzE1LDcgQEAKIAkJIjI6CS5hc2NpeglcIiJfX0ZJTEVfXyJcIlxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIjM6XHQiCVMzOTBfTE9ORyAiXHQxYiwyYlxuIgkJCVwKKwkJIjM6CS5sb25nCTFiLTNiLDJiLTNiXG4iCQkJXAogCQkiCS5zaG9ydAklMCwlMVxuIgkJCVwKIAkJIgkub3JnCTNiKyUyXG4iCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCkBAIC0zNyw3ICszMSw3IEBACiAJCSIwOglqCTBiKzJcbiIJCQlcCiAJCSIxOlxuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKLQkJIjI6XHQiCVMzOTBfTE9ORyAiXHQxYlxuIgkJXAorCQkiMjoJLmxvbmcJMWItMmJcbiIJCVwKIAkJIgkuc2hvcnQJJTBcbiIJCQlcCiAJCSIJLm9yZwkyYislMVxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaAppbmRleCAyMTg1YTZkLi43NDlhOTdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0zMiw2ICszMiw3IEBACiBleHRlcm4gaW50IGNyd19yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7CiBleHRlcm4gdm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpOwogZXh0ZXJuIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKTsKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpOwogCiAjZGVmaW5lIE5SX1JTQ1MgMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oCmluZGV4IDgwZWY1OGMuLjUzOGUxYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmgKQEAgLTE0NSwxMSArMTQ1LDExIEBACiAJaW50IHJjID0gLUVOT1NZUzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgkuaW5zbglzLDB4YjIxNjAwMDAsMCglMilcbiIKKwkJIgkuaW5zbglzLDB4YjIxNjAwMDAsJTFcbiIKIAkJIjA6CWxhCSUwLDBcbiIKIAkJIjE6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHJjKSA6ICJtIiAoKmN0cmwpLCAiYSIgKGN0cmwpKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCpjdHJsKSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTksMTEgKzE1OSwxMSBAQAogCWludCByYyA9IC1FTk9TWVM7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJLmluc24JcywweGIyMTcwMDAwLDAoJTIpXG4iCisJCSIJLmluc24JcywweGIyMTcwMDAwLCUxXG4iCiAJCSIwOglsYQklMCwwXG4iCiAJCSIxOlxuIgogCQlFWF9UQUJMRSgwYiwxYikKLQkJOiAiK2QiIChyYykgOiAibSIgKCphaWIpLCAiYSIgKGFpYikpOworCQk6ICIrZCIgKHJjKSA6ICJRIiAoKmFpYikpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTc0LDExICsxNzQsMTEgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwwKCUyKVxuIgorCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwlMVxuIgogCQkiMDoJbGEJJTAsMFxuIgogCQkiMTpcbiIKIAkJRVhfVEFCTEUoMGIsMWIpCi0JCTogIitkIiAocmMpIDogIm0iICgqYWliKSwgImEiIChhaWIpLCAiZCIgKHJlZzApKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCphaWIpLCAiZCIgKHJlZzApKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYzJmYjQzMi4uMTViM2FjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTgsOCArOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogLyogc3RvcmUgdGhlbiBvciBzeXN0ZW0gbWFzay4gKi8KICNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0b3NtKF9fb3IpCQkJCQlcCiAoewkJCQkJCQkJCVwKQEAgLTM2LDQwICszNCw2IEBACiAJYXNtIHZvbGF0aWxlKCJzc20gICAlMCIgOiA6ICJRIiAoX19tYXNrKSA6ICJtZW1vcnkiKTsJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLS8qIHN0b3JlIHRoZW4gb3Igc3lzdGVtIG1hc2suICovCi0jZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG9zbShfX29yKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCXN0b3NtCTAoJTEpLCUyIgkJCQlcCi0JCTogIj1tIiAoX19tYXNrKQkJCQkJCVwKLQkJOiAiYSIgKCZfX21hc2spLCAiaSIgKF9fb3IpIDogIm1lbW9yeSIpOwkJXAotCV9fbWFzazsJCQkJCQkJCVwKLX0pCi0KLS8qIHN0b3JlIHRoZW4gYW5kIHN5c3RlbSBtYXNrLiAqLwotI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Ruc20oX19hbmQpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fbWFzazsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJc3Ruc20JMCglMSksJTIiCQkJCVwKLQkJOiAiPW0iIChfX21hc2spCQkJCQkJXAotCQk6ICJhIiAoJl9fbWFzayksICJpIiAoX19hbmQpIDogIm1lbW9yeSIpOwkJXAotCV9fbWFzazsJCQkJCQkJCVwKLX0pCi0KLS8qIHNldCBzeXN0ZW0gbWFzay4gKi8KLSNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3NzbShfX21hc2spCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglzc20JMCglMCkiCQkJCQlcCi0JCTogOiAiYSIgKCZfX21hc2spLCAibSIgKF9fbWFzaykgOiAibWVtb3J5Iik7CQlcCi19KQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogLyogaW50ZXJydXB0IGNvbnRyb2wuLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAppbmRleCBjMjVkZmFjNy4uMDU1MjdjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xLDE0MSArMSwxNiBAQAogLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAxMAorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAwMTQKLSNkZWZpbmUgX19MQ19FWFRfUEFSQU1TCQkJMHgwMDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MJCTB4MDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERQkJMHgwMDg2Ci0KLSNkZWZpbmUgX19MQ19TVkNfSUxDCQkJMHgwMDg4Ci0jZGVmaW5lIF9fTENfU1ZDX0lOVF9DT0RFCQkweDAwOGEKLSNkZWZpbmUgX19MQ19QR01fSUxDCQkJMHgwMDhjCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFCQkweDAwOGUKLQotI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKLSNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCi0KLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lECQkweDAwYjgKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX05SCQkweDAwYmEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTQkJMHgwMGJjCi0jZGVmaW5lIF9fTENfSU9fSU5UX1dPUkQJCTB4MDBjMAotI2RlZmluZSBfX0xDX1NURkxfRkFDX0xJU1QJCTB4MDBjOAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERQkJCTB4MDBlOAotCi0jZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAotCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKLSNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKLSNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAotI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKLSNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKLSNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCi0jZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAyZDgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMmRjCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzAwCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgwMGQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwMGUwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgwMTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgwMTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDAxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDAxNjAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDAxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MDFjMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCi0jZGVmaW5lIF9fTENfUkVTVEFSVF9QU1cJCTB4MDFhMAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCi0jZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCi0jZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAotI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKLSNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCi0jZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAotI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCi0jZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAotI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKLSNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCi0jZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCi0jZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCi0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAzNTgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMzYwCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzgwCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweDAzYzAKLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgxMWI4Ci0jZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgxMjAwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgxMjgwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgxMzAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMzE4Ci0jZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwotI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKIHZvaWQgcmVzdGFydF9pbnRfaGFuZGxlcih2b2lkKTsKIHZvaWQgZXh0X2ludF9oYW5kbGVyKHZvaWQpOwpAQCAtMTQ0LDcgKzE5LDEyIEBACiB2b2lkIG1jY2tfaW50X2hhbmRsZXIodm9pZCk7CiB2b2lkIGlvX2ludF9oYW5kbGVyKHZvaWQpOwogCi1zdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAgeworI2lmZGVmIENPTkZJR18zMkJJVAorCisjZGVmaW5lIExDX09SREVSIDAKKyNkZWZpbmUgTENfUEFHRVMgMQorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKIAl1MzIJZXh0X3NhdmU7CiAJdTY0CXRpbWVyOwogCXU2NAljbGtfY21wOwpAQCAtMTU2LDU0ICszNiwxMyBAQAogCXU2NAlmcF9yZWdzWzRdOwogCXUzMglncF9yZWdzWzE2XTsKIAl1MzIJY3RybF9yZWdzWzE2XTsKLX0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAotc3RydWN0IHNhdmVfYXJlYV9zMzkweCB7Ci0JdTY0CWZwX3JlZ3NbMTZdOwotCXU2NAlncF9yZWdzWzE2XTsKLQl1OAlwc3dbMTZdOwotCXU4CXBhZDFbOF07Ci0JdTMyCXByZWZfcmVnOwotCXUzMglmcF9jdHJsX3JlZzsKLQl1OAlwYWQyWzRdOwotCXUzMgl0b2RfcmVnOwotCXU2NAl0aW1lcjsKLQl1NjQJY2xrX2NtcDsKLQl1OAlwYWQzWzhdOwotCXUzMglhY2NfcmVnc1sxNl07Ci0JdTY0CWN0cmxfcmVnc1sxNl07Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotdW5pb24gc2F2ZV9hcmVhIHsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAJczM5MDsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4CXMzOTB4OwotfTsKLQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRV9TMzkwCTB4ZDQKLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0VfUzM5MFgJMHgxMjAwCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTApCi0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTAKLSNlbHNlCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4KQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRSBTQVZFX0FSRUFfQkFTRV9TMzkwWAotI2VuZGlmCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIExDX09SREVSIDAKLSNlbHNlCi0jZGVmaW5lIExDX09SREVSIDEKLSNlbmRpZgotCi0jZGVmaW5lIExDX1BBR0VTICgxVUwgPDwgTENfT1JERVIpCi0KLXN0cnVjdCBfbG93Y29yZQotewotI2lmbmRlZiBfX3MzOTB4X18KLQkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCitzdHJ1Y3QgX2xvd2NvcmUgewogCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLwotCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJcmVzdGFydF9vbGRfcHN3OwkJLyogMHgwMDA4ICovCisJX191OAlwYWRfMHgwMDEwWzB4MDAxNC0weDAwMTBdOwkvKiAweDAwMTAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAwMTggKi8KIAlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAwMjAgKi8KIAlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAwMjggKi8KQEAgLTIyOSw3ICs2OCw5IEBACiAJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLwogCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KIAlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCi0JX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGI4LTB4MDBhNF07CS8qIDB4MDBhNCAqLwogCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCiAJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KIAlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KQEAgLTI0NSw4ICs4Niw5IEBACiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCiAJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KLQlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KLQlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLworCXBzd190CXBzd19zYXZlX2FyZWE7CQkJLyogMHgwMTAwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MDEwOCAqLworCV9fdTgJcGFkXzB4MDEwY1sweDAxMjAtMHgwMTBjXTsJLyogMHgwMTBjICovCiAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MDEyMCAqLwpAQCAtMzEwLDEwICsxNTIsMzIgQEAKIAogCS8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KIAlfX3U4CXBhZF8weDBlMDhbMHgxMDAwLTB4MGUwOF07CS8qIDB4MGUwOCAqLwotI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotCS8qIDB4MDAwMCAtIDB4MDFmZjogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlfX3UzMgljY3cxWzJdOwkJCS8qIDB4MDAwMCAqLwotCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCit9IF9fcGFja2VkOworCisjZWxzZSAvKiBDT05GSUdfMzJCSVQgKi8KKworI2RlZmluZSBMQ19PUkRFUiAxCisjZGVmaW5lIExDX1BBR0VTIDIKKworc3RydWN0IHNhdmVfYXJlYSB7CisJdTY0CWZwX3JlZ3NbMTZdOworCXU2NAlncF9yZWdzWzE2XTsKKwl1OAlwc3dbMTZdOworCXU4CXBhZDFbOF07CisJdTMyCXByZWZfcmVnOworCXUzMglmcF9jdHJsX3JlZzsKKwl1OAlwYWQyWzRdOworCXUzMgl0b2RfcmVnOworCXU2NAl0aW1lcjsKKwl1NjQJY2xrX2NtcDsKKwl1OAlwYWQzWzhdOworCXUzMglhY2NfcmVnc1sxNl07CisJdTY0CWN0cmxfcmVnc1sxNl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgX2xvd2NvcmUgeworCV9fdTgJcGFkXzB4MDAwMFsweDAwMTQtMHgwMDAwXTsJLyogMHgwMDAwICovCisJX191MzIJaXBsX3Bhcm1ibG9ja19wdHI7CQkvKiAweDAwMTQgKi8KIAlfX3U4CXBhZF8weDAwMThbMHgwMDgwLTB4MDAxOF07CS8qIDB4MDAxOCAqLwogCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCiAJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCkBAIC0zNDQsNyArMjA4LDkgQEAKIAlfX3U4CXBhZF8weDAwZjBbMHgwMGY0LTB4MDBmMF07CS8qIDB4MDBmMCAqLwogCV9fdTMyCWV4dGVybmFsX2RhbWFnZV9jb2RlOwkJLyogMHgwMGY0ICovCiAJYWRkcl90CWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KLQlfX3U4CXBhZF8weDAxMDBbMHgwMTIwLTB4MDEwMF07CS8qIDB4MDEwMCAqLworCV9fdTgJcGFkXzB4MDEwMFsweDAxMTAtMHgwMTAwXTsJLyogMHgwMTAwICovCisJX191NjQJYnJlYWtpbmdfZXZlbnRfYWRkcjsJCS8qIDB4MDExMCAqLworCV9fdTgJcGFkXzB4MDExOFsweDAxMjAtMHgwMTE4XTsJLyogMHgwMTE4ICovCiAJcHN3X3QJcmVzdGFydF9vbGRfcHN3OwkJLyogMHgwMTIwICovCiAJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDEzMCAqLwogCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDE0MCAqLwpAQCAtNDI1LDcgKzI5MSw3IEBACiAJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KIAlfX3U2NAlmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOwkvKiAweDEyMDAgKi8KIAlfX3U2NAlncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTI4MCAqLwotCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MTMwMCAqLworCXBzd190CXBzd19zYXZlX2FyZWE7CQkJLyogMHgxMzAwICovCiAJX191OAlwYWRfMHgxMzEwWzB4MTMxOC0weDEzMTBdOwkvKiAweDEzMTAgKi8KIAlfX3UzMglwcmVmaXhyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzE4ICovCiAJX191MzIJZnB0X2NyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzFjICovCkBAIC00MzksMTAgKzMwNSwxMiBAQAogCiAJLyogYWxpZ24gdG8gdGhlIHRvcCBvZiB0aGUgcHJlZml4IGFyZWEgKi8KIAlfX3U4CXBhZF8weDE0MDBbMHgyMDAwLTB4MTQwMF07CS8qIDB4MTQwMCAqLwotI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IC8qIEVuZCBzdHJ1Y3R1cmUqLworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIENPTkZJR18zMkJJVCAqLwogCiAjZGVmaW5lIFMzOTBfbG93Y29yZSAoKigoc3RydWN0IF9sb3djb3JlICopIDApKQorCiBleHRlcm4gc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltdOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3ByZWZpeChfX3UzMiBhZGRyZXNzKQpAQCAtNDU4LDYgKzMyNiw0IEBACiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLSNlbmRpZgotCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1MzOTBfTE9XQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA1ZTlkYWY1Li5hZjY1MGZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEwNyw5ICsxMDcsNiBAQAogI2RlZmluZSBfX3BnZCh4KSAgICAgICAgKChwZ2RfdCkgeyAoeCkgfSApCiAjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoKHBncHJvdF90KSB7ICh4KSB9ICkKIAotLyogZGVmYXVsdCBzdG9yYWdlIGtleSB1c2VkIGZvciBhbGwgcGFnZXMgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zdG9yYWdlX2tleTsKLQogc3RhdGljIGlubGluZSB2b2lkCiBwYWdlX3NldF9zdG9yYWdlX2tleSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBza2V5KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTJmYTc5Yy4uOWI1YjkxOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00Myw3ICs0Myw3IEBACiAgKiBUaGUgUzM5MCBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKICAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKSAgICAgZG8geyB9IHdoaWxlICgwKQogCiAvKgogICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiNDI3MTU0Li43M2UyNTk4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3B1X2lkKHN0cnVjdCBjcHVpZCAqcHRyKQogewotCWFzbSB2b2xhdGlsZSgic3RpZHAgMCglMSkiIDogIj1tIiAoKnB0cikgOiAiYSIgKHB0cikpOworCWFzbSB2b2xhdGlsZSgic3RpZHAgJTAiIDogIj1RIiAoKnB0cikpOwogfQogCiBleHRlcm4gdm9pZCBzMzkwX2FkanVzdF9qaWZmaWVzKHZvaWQpOwpAQCAtMTg0LDkgKzE4NCw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19sb2FkX3Bzdyhwc3dfdCBwc3cpCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotCWFzbSB2b2xhdGlsZSgibHBzdyAgMCglMCkiIDogOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAiY2MiKTsKKwlhc20gdm9sYXRpbGUoImxwc3cgICUwIiA6IDogIlEiIChwc3cpIDogImNjIik7CiAjZWxzZQotCWFzbSB2b2xhdGlsZSgibHBzd2UgMCglMCkiIDogOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAiY2MiKTsKKwlhc20gdm9sYXRpbGUoImxwc3dlICUwIiA6IDogIlEiIChwc3cpIDogImNjIik7CiAjZW5kaWYKIH0KIApAQCAtMjA2LDE3ICsyMDYsMTcgQEAKIAlhc20gdm9sYXRpbGUoCiAJCSIJYmFzcgklMCwwXG4iCiAJCSIwOglhaGkJJTAsMWYtMGJcbiIKLQkJIglzdAklMCw0KCUxKVxuIgotCQkiCWxwc3cJMCglMSlcbiIKKwkJIglzdAklMCwlTzErNCglUjEpXG4iCisJCSIJbHBzdwklMVxuIgogCQkiMToiCi0JCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOworCQk6ICI9JmQiIChhZGRyKSwgIj1RIiAocHN3KSA6ICJRIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCWFzbSB2b2xhdGlsZSgKIAkJIglsYXJsCSUwLDFmXG4iCi0JCSIJc3RnCSUwLDgoJTEpXG4iCi0JCSIJbHBzd2UJMCglMSlcbiIKKwkJIglzdGcJJTAsJU8xKzgoJVIxKVxuIgorCQkiCWxwc3dlCSUxXG4iCiAJCSIxOiIKLQkJOiAiPSZkIiAoYWRkcikgOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CisJCTogIj0mZCIgKGFkZHIpLCAiPVEiIChwc3cpIDogIlEiIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogfQogIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDk1ZGNmMTguLmRkMmQ5MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTQ5MiwxMyArNDkyLDI0IEBACiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CiAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5wc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkgIT0gMCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wc3cuYWRkciAmIFBTV19BRERSX0lOU04pCiAjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKSgocmVncyktPmdwcnNbMTVdKQogI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSgocmVncyktPmdwcnNbMl0pCiAjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQotZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CisKK2ludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKTsKK2NvbnN0IGNoYXIgKnJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfcmVnaXN0ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBvZmZzZXQpOwordW5zaWduZWQgbG9uZyByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrZXJuZWxfc3RhY2tfcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+Z3Byc1sxNV0gJiBQU1dfQUREUl9JTlNOOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAppbmRleCA3OWQ4NDlmLi5jNjY2YmZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKQEAgLTEzLDcgKzEzLDggQEAKICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogCi0jZGVmaW5lIFFESU9fTUFYX1FVRVVFU19QRVJfSVJRCQkzMgorLyogb25seSB1c2UgNCBxdWV1ZXMgdG8gc2F2ZSBzb21lIGNhY2hlbGluZXMgKi8KKyNkZWZpbmUgUURJT19NQVhfUVVFVUVTX1BFUl9JUlEJCTQKICNkZWZpbmUgUURJT19NQVhfQlVGRkVSU19QRVJfUQkJMTI4CiAjZGVmaW5lIFFESU9fTUFYX0JVRkZFUlNfTUFTSwkJKFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSAxKQogI2RlZmluZSBRRElPX01BWF9FTEVNRU5UU19QRVJfQlVGRkVSCTE2CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IDlkMmExNzk3Li40MjNmZGRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaApAQCAtMTI0LDIxICsxMjQsMjEgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdoaQklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnaGkJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAob2xkIDwgMCkKIAkJcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzZW0pOwogfQpAQCAtMTUyLDI1ICsxNTIsMjUgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWx0cgklMSwlMFxuIgogCQkiCWptCTFmXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiXG4iCiAJCSIxOiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWx0Z3IJJTEsJTBcbiIKIAkJIglqbQkxZlxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGJcbiIKIAkJIjE6IgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIpOworCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBvbGQgPj0gMCA/IDEgOiAwOwogfQogCkBAIC0xODQsMjAgKzE4NCwyMCBAQAogCXRtcCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOwogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZwklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgIm0iICh0bXApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChvbGQgIT0gMCkKIAkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKQEAgLTIxNywyMiArMjE3LDIyIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMilcbiIKKwkJIglsCSUwLCUxXG4iCiAJCSIwOglsdHIJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljcwklMCwlNCwwKCUyKVxuIgorCQkiCWNzCSUwLCUzLCUxXG4iCiAJCSIJamwJMGJcbiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTIpXG4iCisJCSIJbGcJJTAsJTFcbiIKIAkJIjA6CWx0Z3IJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljc2cJJTAsJTQsMCglMilcbiIKKwkJIgljc2cJJTAsJTMsJTFcbiIKIAkJIglqbAkwYlxuIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCQkiMToiCi0JCTogIj0mZCIgKG9sZCksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CisJCTogIj0mZCIgKG9sZCksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChvbGQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpID8gMSA6IDA7CiB9CiAKQEAgLTI0NSwyMSArMjQ1LDIwIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWFoaQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYWhpCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChuZXcgPCAwKQogCQlpZiAoKG5ldyAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQpAQCAtMjc2LDIwICsyNzUsMjAgQEAKIAl0bXAgPSAtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA8IDApCiAJCWlmICgobmV3ICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCkBAIC0zMDYsMjAgKzMwNSwyMCBAQAogCXRtcCA9IC1SV1NFTV9XQUlUSU5HX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA+IDEpCiAJCXJ3c2VtX2Rvd25ncmFkZV93YWtlKHNlbSk7CkBAIC0zMzQsMjAgKzMzMywyMCBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhcgklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYXIJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdyCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWdyCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKIH0KIApAQCAtMzYwLDIwICszNTksMjAgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYXIJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWFyCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFncgklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFncgklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIG5ldzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggNTJhNzc5Yy4uOWFiNmJkMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTE0LDE0ICsxNCwxNCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2RlZmluZSBQQVJNQVJFQQkJMHgxMDQwMAogI2RlZmluZSBNRU1PUllfQ0hVTktTCQkyNTYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKICNpZm5kZWYgX19zMzkweF9fCiAjZGVmaW5lIElQTF9ERVZJQ0UgICAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDA0KSkKICNkZWZpbmUgSU5JVFJEX1NUQVJUICAgICAgKCoodW5zaWduZWQgbG9uZyAqKSAgKDB4MTA0MEMpKQpAQCAtNzEsOSArNzEsMTIgQEAKICNkZWZpbmUgTUFDSElORV9GTEFHX0tWTQkoMVVMIDw8IDkpCiAjZGVmaW5lIE1BQ0hJTkVfRkxBR19IUEFHRQkoMVVMIDw8IDEwKQogI2RlZmluZSBNQUNISU5FX0ZMQUdfUEZNRgkoMVVMIDw8IDExKQorI2RlZmluZSBNQUNISU5FX0ZMQUdfTFBBUgkoMVVMIDw8IDEyKQogCiAjZGVmaW5lIE1BQ0hJTkVfSVNfVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19WTSkKICNkZWZpbmUgTUFDSElORV9JU19LVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19LVk0pCisjZGVmaW5lIE1BQ0hJTkVfSVNfTFBBUgkJKFMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzICYgTUFDSElORV9GTEFHX0xQQVIpCisKICNkZWZpbmUgTUFDSElORV9IQVNfRElBRzlDCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19ESUFHOUMpCiAKICNpZm5kZWYgX19zMzkweF9fCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaAppbmRleCBmNzJkNjExLi5lM2JmZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zaWdwLmgKQEAgLTEsMjQgKzEsMTkgQEAKIC8qCi0gKiAgaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKKyAqICBSb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBmb3Igc2lnbmFsbGluZyBvdGhlciBwcm9jZXNzb3JzLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSksCi0gKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKLSAqICAgICAgICAgICAgICAgSGVpa28gQ2Fyc3RlbnMgKGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20pCi0gKgotICogIHNpZ3AuaCBieSBELkouIEJhcnJvdyAoYykgSUJNIDE5OTkKLSAqICBjb250YWlucyByb3V0aW5lcyAvIHN0cnVjdHVyZXMgZm9yIHNpZ25hbGxpbmcgb3RoZXIgUy8zOTAgcHJvY2Vzc29ycyBpbiBhbgotICogIFNNUCBjb25maWd1cmF0aW9uLgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdywKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAogICovCiAKLSNpZm5kZWYgX19TSUdQX18KLSNkZWZpbmUgX19TSUdQX18KKyNpZm5kZWYgX19BU01fU0lHUF9ICisjZGVmaW5lIF9fQVNNX1NJR1BfSAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0vKiBnZXQgcmVhbCBjcHUgYWRkcmVzcyBmcm9tIGxvZ2ljYWwgY3B1IG51bWJlciAqLwotZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtdOworLyogR2V0IHJlYWwgY3B1IGFkZHJlc3MgZnJvbSBsb2dpY2FsIGNwdSBudW1iZXIuICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19jcHVfbG9naWNhbF9tYXBbXTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCiB7CkBAIC0yOSwxMDcgKzI0LDEwOCBAQAogI2VuZGlmCiB9CiAKLXR5cGVkZWYgZW51bQotewotCXNpZ3BfdW5hc3NpZ25lZD0weDAsCi0Jc2lncF9zZW5zZSwKLQlzaWdwX2V4dGVybmFsX2NhbGwsCi0Jc2lncF9lbWVyZ2VuY3lfc2lnbmFsLAotCXNpZ3Bfc3RhcnQsCi0Jc2lncF9zdG9wLAotCXNpZ3BfcmVzdGFydCwKLQlzaWdwX3VuYXNzaWduZWQxLAotCXNpZ3BfdW5hc3NpZ25lZDIsCi0Jc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMsCi0Jc2lncF91bmFzc2lnbmVkMywKLQlzaWdwX2luaXRpYWxfY3B1X3Jlc2V0LAotCXNpZ3BfY3B1X3Jlc2V0LAotCXNpZ3Bfc2V0X3ByZWZpeCwKLQlzaWdwX3N0b3JlX3N0YXR1c19hdF9hZGRyZXNzLAotCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MKLX0gc2lncF9vcmRlcl9jb2RlOworZW51bSB7CisJc2lncF9zZW5zZSA9IDEsCisJc2lncF9leHRlcm5hbF9jYWxsID0gMiwKKwlzaWdwX2VtZXJnZW5jeV9zaWduYWwgPSAzLAorCXNpZ3Bfc3RhcnQgPSA0LAorCXNpZ3Bfc3RvcCA9IDUsCisJc2lncF9yZXN0YXJ0ID0gNiwKKwlzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyA9IDksCisJc2lncF9pbml0aWFsX2NwdV9yZXNldCA9IDExLAorCXNpZ3BfY3B1X3Jlc2V0ID0gMTIsCisJc2lncF9zZXRfcHJlZml4ID0gMTMsCisJc2lncF9zdG9yZV9zdGF0dXNfYXRfYWRkcmVzcyA9IDE0LAorCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MgPSAxNSwKKwlzaWdwX3NldF9hcmNoaXRlY3R1cmUgPSAxOCwKKwlzaWdwX2NvbmRpdGlvbmFsX2VtZXJnZW5jeV9zaWduYWwgPSAxOSwKKwlzaWdwX3NlbnNlX3J1bm5pbmcgPSAyMSwKK307CiAKLXR5cGVkZWYgX191MzIgc2lncF9zdGF0dXNfd29yZDsKLQotdHlwZWRlZiBlbnVtCi17Ci0gICAgICAgIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZD0wLAotCXNpZ3Bfc3RhdHVzX3N0b3JlZCwKLQlzaWdwX2J1c3ksCi0Jc2lncF9ub3Rfb3BlcmF0aW9uYWwKLX0gc2lncF9jY29kZTsKLQorZW51bSB7CisJc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkID0gMCwKKwlzaWdwX3N0YXR1c19zdG9yZWQgPSAxLAorCXNpZ3BfYnVzeSA9IDIsCisJc2lncF9ub3Rfb3BlcmF0aW9uYWwgPSAzLAorfTsKIAogLyoKLSAqIERlZmluaXRpb25zIGZvciB0aGUgZXh0ZXJuYWwgY2FsbAorICogRGVmaW5pdGlvbnMgZm9yIGV4dGVybmFsIGNhbGwuCiAgKi8KLQotLyogJ0JpdCcgc2lnbmFscywgYXN5bmNocm9ub3VzICovCi10eXBlZGVmIGVudW0KLXsKLQllY19zY2hlZHVsZT0wLAorZW51bSB7CisJZWNfc2NoZWR1bGUgPSAwLAogCWVjX2NhbGxfZnVuY3Rpb24sCiAJZWNfY2FsbF9mdW5jdGlvbl9zaW5nbGUsCi0JZWNfYml0X2xhc3QKLX0gZWNfYml0X3NpZzsKK307CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yCisgKiBTaWduYWwgcHJvY2Vzc29yLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3IoX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3AodTE2IGNwdSwgaW50IG9yZGVyKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIikgPSAwOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJaW50IGNjb2RlOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKIAkJIglpcG0JJTBcbiIKIAkJIglzcmwJJTAsMjhcbiIKIAkJOgkiPWQiCShjY29kZSkKLQkJOiAiZCIgKHJlZzEpLCAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLAotCQkgICJhIiAob3JkZXJfY29kZSkgOiAiY2MiICwgIm1lbW9yeSIpOworCQk6ICJkIiAocmVnMSksICJkIiAoY3B1KSwKKwkJICAiYSIgKG9yZGVyKSA6ICJjYyIgLCAibWVtb3J5Iik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiAvKgotICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlcgorICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlci4KICAqLwotc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCi1zaWduYWxfcHJvY2Vzc29yX3AoX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCitzdGF0aWMgaW5saW5lIGludCByYXdfc2lncF9wKHUzMiBwYXJhbWV0ZXIsIHUxNiBjcHUsIGludCBvcmRlcikKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVnMSBhc20gKCIxIikgPSBwYXJhbWV0ZXI7Ci0Jc2lncF9jY29kZSBjY29kZTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAocmVnMSksICJkIiAoY3B1X2xvZ2ljYWxfbWFwKGNwdV9hZGRyKSksCi0JCSAgImEiIChvcmRlcl9jb2RlKSA6ICJjYyIgLCAibWVtb3J5Iik7CisJCTogImQiIChyZWcxKSwgImQiIChjcHUpLAorCQkgICJhIiAob3JkZXIpIDogImNjIiAsICJtZW1vcnkiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzCisgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3JfcHMoX191MzIgKnN0YXR1c3B0ciwgX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwKLQkJICAgIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3BfcHModTMyICpzdGF0dXMsIHUzMiBwYXJtLCB1MTYgY3B1LCBpbnQgb3JkZXIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFyYW1ldGVyOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFybTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKSwgIitkIiAocmVnMSkKLQkJOiAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLCAiYSIgKG9yZGVyX2NvZGUpCisJCTogImQiIChjcHUpLCAiYSIgKG9yZGVyKQogCQk6ICJjYyIgLCAibWVtb3J5Iik7Ci0JKnN0YXR1c3B0ciA9IHJlZzE7CisJKnN0YXR1cyA9IHJlZzE7CiAJcmV0dXJuIGNjb2RlOwogfQogCi0jZW5kaWYgLyogX19TSUdQX18gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNpZ3AoaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncChjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzaWdwX3AodTMyIHBhcmFtZXRlciwgaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncF9wKHBhcmFtZXRlciwgY3B1X2xvZ2ljYWxfbWFwKGNwdSksIG9yZGVyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lncF9wcyh1MzIgKnN0YXR1cywgdTMyIHBhcm0sIGludCBjcHUsIGludCBvcmRlcikKK3sKKwlyZXR1cm4gcmF3X3NpZ3BfcHMoc3RhdHVzLCBwYXJtLCBjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCisjZW5kaWYgLyogX19BU01fU0lHUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMmFiMTE0MS4uZWRjMDNjYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjksNyArMjksNDMgQEAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiAKLWV4dGVybiB1bmlvbiBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworZXh0ZXJuIHN0cnVjdCBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworCitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2lwbF9jcHUodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2NwdSh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgc3AsCisJCQkgICAgICBpbnQgZnJvbSwgaW50IHRvKTsKK2V4dGVybiB2b2lkIHNtcF9yZXN0YXJ0X2NwdSh2b2lkKTsKKworLyoKKyAqIHJldHVybnMgMSBpZiAodmlydHVhbCkgY3B1IGlzIHNjaGVkdWxlZAorICogcmV0dXJucyAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGludCBzbXBfdmNwdV9zY2hlZHVsZWQoaW50IGNwdSkKK3sKKwl1MzIgc3RhdHVzOworCisJc3dpdGNoIChzaWdwX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZV9ydW5uaW5nKSkgeworCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgorCQkvKiBDaGVjayBmb3IgcnVubmluZyBzdGF0dXMgKi8KKwkJaWYgKHN0YXR1cyAmIDB4NDAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2Ugc2lncF9ub3Rfb3BlcmF0aW9uYWw6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCWZ1bmMoZGF0YSk7Cit9CisKKyNkZWZpbmUgc21wX3ZjcHVfc2NoZWR1bGVkCSgxKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGE1ODc5MDcuLjU2NjEyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KIHN0YXRpYyBpbmxpbmUgaW50CiBfcmF3X2NvbXBhcmVfYW5kX3N3YXAodm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrLAogCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQpAQCAtMjcsMjIgKzI1LDYgQEAKIAlyZXR1cm4gb2xkOwogfQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi1zdGF0aWMgaW5saW5lIGludAotX3Jhd19jb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqbG9jaywKLQkJICAgICAgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKLXsKLQlhc20gdm9sYXRpbGUoCi0JCSIJY3MJJTAsJTMsMCglNCkiCi0JCTogIj1kIiAob2xkKSwgIj1tIiAoKmxvY2spCi0JCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAobG9jayksICJtIiAoKmxvY2spCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogLyoKICAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKICAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGViMThkYzEuLjZiZGVlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNDcsMTEgKzQ3LDExIEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsOCwzKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDIsMSglMSlcbiIKLQkJIglpYwklMCwwKCUxKSIKLQkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIik7CisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKVxuIgorCQkiCWljbQklMCw0LCVPMSsyKCVSMSlcbiIKKwkJIglpY20JJTAsMiwlTzErMSglUjEpXG4iCisJCSIJaWMJJTAsJTEiCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2CSUwLCUxIgogCQk6ICI9ZCIgKHJlc3VsdCkgOiAibSIgKCp4KSk7CkBAIC03Nyw5ICs3Nyw5IEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljCSUwLDAoJTEpXG4iCi0JCTogIj0mZCIgKHJlc3VsdCkgOiAiYSIgKHgpLCAibSIgKCp4KSA6ICJjYyIpOworCQkiCWljbQklMCwyLCVPKzEoJVIxKVxuIgorCQkiCWljCSUwLCUxXG4iCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2aAklMCwlMSIKIAkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggZTBhNzNkMy4uODQyOTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xNSw2ICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCisvKgorICogVGhlIHN5c2NhbGwgdGFibGUgYWx3YXlzIGNvbnRhaW5zIDMyIGJpdCBwb2ludGVycyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaXMgKHdheSkgYmVsb3cgNEdCLiAgU28gdGhlICJpbnQiCisgKiB0eXBlIGhlcmUgaXMgd2hhdCB3ZSB3YW50IFtuZWVkXSBmb3IgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBzeXN0ZW1zLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKIHN0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IDlkNzAwNTcuLjIyYmRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtODcsNyArODcsOCBAQAogCiBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB7CiAJY2hhciByZXNlcnZlZF8wWzMxXTsKLQl1bnNpZ25lZCBjaGFyIGNvdW50OworCXVuc2lnbmVkIGNoYXIgOjQ7CisJdW5zaWduZWQgY2hhciBjb3VudDo0OwogCXN0cnVjdCB7CiAJCWNoYXIgcmVzZXJ2ZWRfMFs0XTsKIAkJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAzNzk2NjFkLi42N2VlNmMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0yNCw2NSArMjQsNjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0ZAkwLDgoJTEpXG4iCi0JCSIJc3RkCTIsMjQoJTEpXG4iCi0JCSIJc3RkCTQsNDAoJTEpXG4iCi0JCSIJc3RkCTYsNTYoJTEpIgotCQk6ICI9bSIgKCpmcHJlZ3MpIDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpIDogIm1lbW9yeSIpOworCQkiCXN0ZAkwLCVPMCs4KCVSMClcbiIKKwkJIglzdGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCXN0ZAk0LCVPMCs0MCglUjApXG4iCisJCSIJc3RkCTYsJU8wKzU2KCVSMCkiCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIAlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCiAJCXJldHVybjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJc3RmcGMJMCglMSlcbiIKLQkJIglzdGQJMSwxNiglMSlcbiIKLQkJIglzdGQJMywzMiglMSlcbiIKLQkJIglzdGQJNSw0OCglMSlcbiIKLQkJIglzdGQJNyw2NCglMSlcbiIKLQkJIglzdGQJOCw3MiglMSlcbiIKLQkJIglzdGQJOSw4MCglMSlcbiIKLQkJIglzdGQJMTAsODgoJTEpXG4iCi0JCSIJc3RkCTExLDk2KCUxKVxuIgotCQkiCXN0ZAkxMiwxMDQoJTEpXG4iCi0JCSIJc3RkCTEzLDExMiglMSlcbiIKLQkJIglzdGQJMTQsMTIwKCUxKVxuIgotCQkiCXN0ZAkxNSwxMjgoJTEpXG4iCi0JCTogIj1tIiAoKmZwcmVncykgOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgOiAibWVtb3J5Iik7CisJCSIJc3RmcGMJJTBcbiIKKwkJIglzdGQJMSwlTzArMTYoJVIwKVxuIgorCQkiCXN0ZAkzLCVPMCszMiglUjApXG4iCisJCSIJc3RkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglzdGQJNywlTzArNjQoJVIwKVxuIgorCQkiCXN0ZAk4LCVPMCs3MiglUjApXG4iCisJCSIJc3RkCTksJU8wKzgwKCVSMClcbiIKKwkJIglzdGQJMTAsJU8wKzg4KCVSMClcbiIKKwkJIglzdGQJMTEsJU8wKzk2KCVSMClcbiIKKwkJIglzdGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJc3RkCTEzLCVPMCsxMTIoJVIwKVxuIgorCQkiCXN0ZAkxNCwlTzArMTIwKCVSMClcbiIKKwkJIglzdGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnBfcmVncyhzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbGQJMCw4KCUwKVxuIgotCQkiCWxkCTIsMjQoJTApXG4iCi0JCSIJbGQJNCw0MCglMClcbiIKLQkJIglsZAk2LDU2KCUwKSIKLQkJOiA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSk7CisJCSIJbGQJMCwlTzArOCglUjApXG4iCisJCSIJbGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCWxkCTQsJU8wKzQwKCVSMClcbiIKKwkJIglsZAk2LCVPMCs1NiglUjApIgorCQk6IDogIlEiICgqZnByZWdzKSk7CiAJaWYgKCFNQUNISU5FX0hBU19JRUVFKQogCQlyZXR1cm47CiAJYXNtIHZvbGF0aWxlKAotCQkiCWxmcGMJMCglMClcbiIKLQkJIglsZAkxLDE2KCUwKVxuIgotCQkiCWxkCTMsMzIoJTApXG4iCi0JCSIJbGQJNSw0OCglMClcbiIKLQkJIglsZAk3LDY0KCUwKVxuIgotCQkiCWxkCTgsNzIoJTApXG4iCi0JCSIJbGQJOSw4MCglMClcbiIKLQkJIglsZAkxMCw4OCglMClcbiIKLQkJIglsZAkxMSw5NiglMClcbiIKLQkJIglsZAkxMiwxMDQoJTApXG4iCi0JCSIJbGQJMTMsMTEyKCUwKVxuIgotCQkiCWxkCTE0LDEyMCglMClcbiIKLQkJIglsZAkxNSwxMjgoJTApXG4iCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykpOworCQkiCWxmcGMJJTBcbiIKKwkJIglsZAkxLCVPMCsxNiglUjApXG4iCisJCSIJbGQJMywlTzArMzIoJVIwKVxuIgorCQkiCWxkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglsZAk3LCVPMCs2NCglUjApXG4iCisJCSIJbGQJOCwlTzArNzIoJVIwKVxuIgorCQkiCWxkCTksJU8wKzgwKCVSMClcbiIKKwkJIglsZAkxMCwlTzArODgoJVIwKVxuIgorCQkiCWxkCTExLCVPMCs5NiglUjApXG4iCisJCSIJbGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJbGQJMTMsJU8wKzExMiglUjApXG4iCisJCSIJbGQJMTQsJU8wKzEyMCglUjApXG4iCisJCSIJbGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNhdmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSgic3RhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoInN0YW0gMCwxNSwlMCIgOiAiPVEiICgqYWNycykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9hY2Nlc3NfcmVncyh1bnNpZ25lZCBpbnQgKmFjcnMpCiB7Ci0JYXNtIHZvbGF0aWxlKCJsYW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykpOworCWFzbSB2b2xhdGlsZSgibGFtIDAsMTUsJTAiIDogOiAiUSIgKCphY3JzKSk7CiB9CiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7CQkJCQkgICAgIFwKQEAgLTEzOSw0OCArMTM5LDQ4IEBACiAJCXNoaWZ0ID0gKDMgXiAoYWRkciAmIDMpKSA8PCAzOwogCQlhZGRyIF49IGFkZHIgJiAzOwogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWwJJTAsMCglNClcbiIKKwkJCSIJbAklMCwlNFxuIgogCQkJIjA6CWxyCTAsJTBcbiIKIAkJCSIJbnIJMCwlM1xuIgogCQkJIglvcgkwLCUyXG4iCi0JCQkiCWNzCSUwLDAsMCglNClcbiIKKwkJCSIJY3MJJTAsMCwlNFxuIgogCQkJIglqbAkwYlxuIgotCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgYWRkcikKLQkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oMjU1IDw8IHNoaWZ0KSksCisJCQkgICJRIiAoKihpbnQgKikgYWRkcikgOiAibWVtb3J5IiwgImNjIiwgIjAiKTsKIAkJcmV0dXJuIG9sZCA+PiBzaGlmdDsKIAljYXNlIDI6CiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOwogCQlzaGlmdCA9ICgyIF4gKGFkZHIgJiAyKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMjsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTRcbiIKIAkJCSIwOglscgkwLCUwXG4iCiAJCQkiCW5yCTAsJTNcbiIKIAkJCSIJb3IJMCwlMlxuIgotCQkJIgljcwklMCwwLDAoJTQpXG4iCisJCQkiCWNzCSUwLDAsJTRcbiIKIAkJCSIJamwJMGJcbiIKLQkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIGFkZHIpCi0JCQk6ICJkIiAoeCA8PCBzaGlmdCksICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwKKwkJCSAgIlEiICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIpOwogCQlyZXR1cm4gb2xkID4+IHNoaWZ0OwogCWNhc2UgNDoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3MJJTAsJTIsMCglMylcbiIKKwkJCSIJbAklMCwlM1xuIgorCQkJIjA6CWNzCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCi0JCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGludCAqKSBwdHIpCi0JCQk6ICJkIiAoeCksICJhIiAocHRyKSwgIm0iICgqKGludCAqKSBwdHIpCisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICJkIiAoeCksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjaWZkZWYgX19zMzkweF9fCiAJY2FzZSA4OgogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWxnCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3NnCSUwLCUyLDAoJTMpXG4iCisJCQkiCWxnCSUwLCUzXG4iCisJCQkiMDoJY3NnCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCiAJCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGxvbmcgKikgcHRyKQotCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihsb25nICopIHB0cikKKwkJCTogImQiICh4KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjZW5kaWYgLyogX19zMzkweF9fICovCkBAIC0yMTUsMjAgKzIxNSwyMCBAQAogCQlzaGlmdCA9ICgzIF4gKGFkZHIgJiAzKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMzsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTJcbiIKIAkJCSIwOglucgklMCwlNVxuIgogCQkJIglscgklMSwlMFxuIgogCQkJIglvcgklMCwlMlxuIgogCQkJIglvcgklMSwlM1xuIgotCQkJIgljcwklMCwlMSwwKCU0KVxuIgorCQkJIgljcwklMCwlMSwlMlxuIgogCQkJIglqbmwJMWZcbiIKIAkJCSIJeHIJJTEsJTBcbiIKIAkJCSIJbnIJJTEsJTVcbiIKIAkJCSIJam56CTBiXG4iCiAJCQkiMToiCi0JCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKLQkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKLQkJCSAgImQiICh+KDI1NSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofigyNTUgPDwgc2hpZnQpKSwgIlEiICgqKGludCAqKSBwdHIpCiAJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXYgPj4gc2hpZnQ7CiAJY2FzZSAyOgpAQCAtMjM2LDMzICsyMzYsMzUgQEAKIAkJc2hpZnQgPSAoMiBeIChhZGRyICYgMikpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDI7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCU0KVxuIgorCQkJIglsCSUwLCUyXG4iCiAJCQkiMDoJbnIJJTAsJTVcbiIKIAkJCSIJbHIJJTEsJTBcbiIKIAkJCSIJb3IJJTAsJTJcbiIKIAkJCSIJb3IJJTEsJTNcbiIKLQkJCSIJY3MJJTAsJTEsMCglNClcbiIKKwkJCSIJY3MJJTAsJTEsJTJcbiIKIAkJCSIJam5sCTFmXG4iCiAJCQkiCXhyCSUxLCUwXG4iCiAJCQkiCW5yCSUxLCU1XG4iCiAJCQkiCWpuegkwYlxuIgogCQkJIjE6IgotCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApCi0JCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLCAiYSIgKHB0ciksCi0JCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiUSIgKCooaW50ICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldiA+PiBzaGlmdDsKIAljYXNlIDQ6CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJY3MJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljcwklMCwlMywlMVxuIgorCQkJOiAiPSZkIiAocHJldiksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2lmZGVmIF9fczM5MHhfXwogCWNhc2UgODoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIgljc2cJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljc2cJJTAsJTMsJTFcbiIKKwkJCTogIj0mZCIgKHByZXYpLCAiPVEiICgqKGxvbmcgKikgcHRyKQorCQkJOiAiMCIgKG9sZCksICJkIiAobmV3KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpAQCAtMzAyLDE3ICszMDQsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGxnCSUxLCUyLDAoJTApXG4iCQkJXAotCQk6IDogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCksCVwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKSk7CQlcCisJCSIJbGN0bGcJJTEsJTIsJTBcbiIJCQlcCisJCTogOiAiUSIgKCooYWRkcnR5cGUgKikoJmFycmF5KSksCQlcCisJCSAgICAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJCVwKIAl9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0ZwklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0ZwklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwpAQCAtMzIwLDE3ICszMjIsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGwJJTEsJTIsMCglMClcbiIJCQlcCi0JCTogOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSwJXAotCQkgICAgIm0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpKTsJCVwKKwkJIglsY3RsCSUxLCUyLCUwXG4iCQkJXAorCQk6IDogIlEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpLAkJXAorCQkgICAgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCQlcCiB9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0bAklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0bAklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNjYwNjllNy4uMzRmMDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTczLDcgKzczLDcgQEAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKCgqKHVuc2lnbmVkIGxvbmcgKikgX19MQ19LRVJORUxfU1RBQ0spLVRIUkVBRF9TSVpFKTsKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShTMzkwX2xvd2NvcmUua2VybmVsX3N0YWNrIC0gVEhSRUFEX1NJWkUpOwogfQogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIFRIUkVBRF9PUkRFUgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCA2OGQ5ZmVhLi5mMTc0YmRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMjAsMTAgKzIwLDEwIEBACiAJaW50IGNjOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiICAgc2NrICAgMCglMilcbiIKKwkJIiAgIHNjayAgICUxXG4iCiAJCSIgICBpcG0gICAlMFxuIgogCQkiICAgc3JsICAgJTAsMjhcbiIKLQkJOiAiPWQiIChjYykgOiAibSIgKHRpbWUpLCAiYSIgKCZ0aW1lKSA6ICJjYyIpOworCQk6ICI9ZCIgKGNjKSA6ICJRIiAodGltZSkgOiAiY2MiKTsKIAlyZXR1cm4gY2M7CiB9CiAKQEAgLTMyLDIxICszMiwyMSBAQAogCWludCBjYzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIiAgIHN0Y2sgIDAoJTIpXG4iCisJCSIgICBzdGNrICAlMVxuIgogCQkiICAgaXBtICAgJTBcbiIKIAkJIiAgIHNybCAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2MpLCAiPW0iICgqdGltZSkgOiAiYSIgKHRpbWUpIDogImNjIik7CisJCTogIj1kIiAoY2MpLCAiPVEiICgqdGltZSkgOiA6ICJjYyIpOwogCXJldHVybiBjYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jbG9ja19jb21wYXJhdG9yKF9fdTY0IHRpbWUpCiB7Ci0JYXNtIHZvbGF0aWxlKCJzY2tjIDAoJTEpIiA6IDogIm0iICh0aW1lKSwgImEiICgmdGltZSkpOworCWFzbSB2b2xhdGlsZSgic2NrYyAlMCIgOiA6ICJRIiAodGltZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfY2xvY2tfY29tcGFyYXRvcihfX3U2NCAqdGltZSkKIHsKLQlhc20gdm9sYXRpbGUoInN0Y2tjIDAoJTEpIiA6ICI9bSIgKCp0aW1lKSA6ICJhIiAodGltZSkpOworCWFzbSB2b2xhdGlsZSgic3Rja2MgJTAiIDogIj1RIiAoKnRpbWUpKTsKIH0KIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCkBAIC01NywxMSArNTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGs7CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgic3RjayAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrIDAoJTEpIiA6ICI9bSIgKGNsaykgOiAiYSIgKCZjbGspIDogImNjIik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gY2xrOwogfQogCkBAIC02OSwxMyArNjUsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY2xrWzE2XTsKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKCJzdGNrZSAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrZSAwKCUxKSIgOiAiPW0iIChjbGspCi0JCQkJICAgOiAiYSIgKGNsaykgOiAiY2MiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZjbGtbMV0pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBjYmYwYTg3Li5kNmIxZWQwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTI2NSw2ICsyNjUsMTIgQEAKIAkJcmV0dXJuIHVhY2Nlc3MuY29weV9mcm9tX3VzZXIobiwgZnJvbSwgdG8pOwogfQogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworX19jb21waWxldGltZV93YXJuaW5nKCJjb3B5X2Zyb21fdXNlcigpIGJ1ZmZlciBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0IikKKyNlbmRpZgorOworCiAvKioKICAqIGNvcHlfZnJvbV91c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGZyb20gdXNlciBzcGFjZS4KICAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCkBAIC0yODQsNyArMjkwLDEzIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKwl1bnNpZ25lZCBpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKwogCW1pZ2h0X2ZhdWx0KCk7CisJaWYgKHVubGlrZWx5KHN6ICE9IC0xICYmIHN6IDwgbikpIHsKKwkJY29weV9mcm9tX3VzZXJfb3ZlcmZsb3coKTsKKwkJcmV0dXJuIG47CisJfQogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQogCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92ZHNvLmgKaW5kZXggN2JkZDdjOC4uNGE3NmQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdmRzby5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBWRFNPMzJfTEJBU0UJMAogI2RlZmluZSBWRFNPNjRfTEJBU0UJMAogCi0jZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI2CisjZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI5CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IDY4M2Y2MzguLjY0MjMwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjksOSArMjksMTIgQEAKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQogCiBleHRyYS15CQkJCSs9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcworZXh0cmEteQkJCQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxoZWFkNjQubyxoZWFkMzEubykKIAogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBzMzkwX2tzeW1zLm8gbW9kdWxlLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyB0b3BvbG9neS5vCitvYmotJChDT05GSUdfU01QKQkJKz0gJChpZiAkKENPTkZJR182NEJJVCksc3dpdGNoX2NwdTY0Lm8sIFwKKwkJCQkJCQlzd2l0Y2hfY3B1Lm8pCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN1c3BlbmQubyBzd3N1c3BfYXNtNjQubwogb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogY29tcGF0LW9iai0kKENPTkZJR19BVURJVCkJKz0gY29tcGF0X2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA2M2U0NjQzLi4wOGRiNzM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00LDE4ICs0LDI3IEBACiAgKiBhbmQgZm9ybWF0IHRoZSByZXF1aXJlZCBkYXRhLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2RlZmluZSBBU01fT0ZGU0VUU19DCisKICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KIAorLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb21waWxlciBpcyBuZXcgZW5vdWdoLiBXZSB3YW50IGEgY29tcGlsZXIgdGhhdAorICogaXMga25vd24gdG8gd29yayB3aXRoIHRoZSAiUSIgYXNzZW1ibGVyIGNvbnN0cmFpbnQuCisgKi8KKyNpZiBfX0dOVUNfXyA8IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQorI2Vycm9yIFlvdXIgY29tcGlsZXIgaXMgdG9vIG9sZDsgcGxlYXNlIHVzZSB2ZXJzaW9uIDMuMy4zIG9yIG5ld2VyCisjZW5kaWYKKwogaW50IG1haW4odm9pZCkKIHsKIAlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShfX1RIUkVBRF9rc3AsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmtzcCkpOwogCURFRklORShfX1RIUkVBRF9wZXIsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9pbmZvKSk7Ci0JREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1tX3NlZ21lbnQpKTsKKwlERUZJTkUoX19USFJFQURfbW1fc2VnbWVudCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQubW1fc2VnbWVudCkpOwogCUJMQU5LKCk7CiAJREVGSU5FKF9fVEFTS19waWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkKSk7CiAJQkxBTksoKTsKQEAgLTUyLDE4ICs2MSw5NCBAQAogCURFRklORShfX1ZEU09fV1RPTV9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKIAlERUZJTkUoX19WRFNPX1RJTUVaT05FLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9taW51dGVzd2VzdCkpOwogCURFRklORShfX1ZEU09fRUNUR19PSywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgZWN0Z19hdmFpbGFibGUpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfQkFTRSwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3RpbWVyX2Jhc2UpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfVVNFUiwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3VzZXJfdGltZSkpOworCURFRklORShfX1ZEU09fRUNUR19CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdGltZXJfYmFzZSkpOworCURFRklORShfX1ZEU09fRUNUR19VU0VSLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdXNlcl90aW1lKSk7CiAJLyogY29uc3RhbnRzIHVzZWQgYnkgdGhlIHZkc28gKi8KIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUUsIENMT0NLX1JFQUxUSU1FKTsKIAlERUZJTkUoQ0xPQ0tfTU9OT1RPTklDLCBDTE9DS19NT05PVE9OSUMpOwogCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIE1PTk9UT05JQ19SRVNfTlNFQyk7CisJQkxBTksoKTsKIAkvKiBjb25zdGFudHMgZm9yIFNJR1AgKi8KIAlERUZJTkUoX19TSUdQX1NUT1AsIHNpZ3Bfc3RvcCk7CiAJREVGSU5FKF9fU0lHUF9SRVNUQVJULCBzaWdwX3Jlc3RhcnQpOwogCURFRklORShfX1NJR1BfU0VOU0UsIHNpZ3Bfc2Vuc2UpOwogCURFRklORShfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCUJMQU5LKCk7CisJLyogbG93Y29yZSBvZmZzZXRzICovCisJREVGSU5FKF9fTENfRVhUX1BBUkFNUywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRfcGFyYW1zKSk7CisJREVGSU5FKF9fTENfQ1BVX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2FkZHIpKTsKKwlERUZJTkUoX19MQ19FWFRfSU5UX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X2ludF9jb2RlKSk7CisJREVGSU5FKF9fTENfU1ZDX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdmNfaWxjKSk7CisJREVGSU5FKF9fTENfU1ZDX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19jb2RlKSk7CisJREVGSU5FKF9fTENfUEdNX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21faWxjKSk7CisJREVGSU5FKF9fTENfUEdNX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBnbV9jb2RlKSk7CisJREVGSU5FKF9fTENfUEVSX0FUTUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9wZXJjX2F0bWlkKSk7CisJREVGSU5FKF9fTENfUEVSX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX2FkZHJlc3MpKTsKKwlERUZJTkUoX19MQ19QRVJfQUNDRVNTX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hY2Nlc3NfaWQpKTsKKwlERUZJTkUoX19MQ19BUl9NT0RFX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFyX2FjY2Vzc19pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9ucikpOworCURFRklORShfX0xDX0lPX0lOVF9QQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX2ludF9wYXJtKSk7CisJREVGSU5FKF9fTENfSU9fSU5UX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaW9faW50X3dvcmQpKTsKKwlERUZJTkUoX19MQ19TVEZMX0ZBQ19MSVNULCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZmxfZmFjX2xpc3QpKTsKKwlERUZJTkUoX19MQ19NQ0NLX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19pbnRlcnJ1cHRpb25fY29kZSkpOworCURFRklORShfX0xDX0RVTVBfUkVJUEwsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaXBpYikpOworCUJMQU5LKCk7CisJREVGSU5FKF9fTENfUlNUX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9wc3cpKTsKKwlERUZJTkUoX19MQ19SU1RfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXN0YXJ0X29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19JT19PTERfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19JT19ORVdfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUkVUVVJOX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXR1cm5fcHN3KSk7CisJREVGSU5FKF9fTENfUkVUVVJOX01DQ0tfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJldHVybl9tY2NrX3BzdykpOworCURFRklORShfX0xDX1NZTkNfRU5URVJfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3luY19lbnRlcl90aW1lcikpOworCURFRklORShfX0xDX0FTWU5DX0VOVEVSX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFzeW5jX2VudGVyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfRVhJVF9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleGl0X3RpbWVyKSk7CisJREVGSU5FKF9fTENfVVNFUl9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCB1c2VyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfU1lTVEVNX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN5c3RlbV90aW1lcikpOworCURFRklORShfX0xDX1NURUFMX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZWFsX3RpbWVyKSk7CisJREVGSU5FKF9fTENfTEFTVF9VUERBVEVfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbGFzdF91cGRhdGVfdGltZXIpKTsKKwlERUZJTkUoX19MQ19MQVNUX1VQREFURV9DTE9DSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBsYXN0X3VwZGF0ZV9jbG9jaykpOworCURFRklORShfX0xDX0NVUlJFTlQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3VycmVudF90YXNrKSk7CisJREVGSU5FKF9fTENfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoX19MQ19LRVJORUxfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwga2VybmVsX3N0YWNrKSk7CisJREVGSU5FKF9fTENfQVNZTkNfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgYXN5bmNfc3RhY2spKTsKKwlERUZJTkUoX19MQ19QQU5JQ19TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwYW5pY19zdGFjaykpOworCURFRklORShfX0xDX0tFUk5FTF9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGtlcm5lbF9hc2NlKSk7CisJREVGSU5FKF9fTENfVVNFUl9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfYXNjZSkpOworCURFRklORShfX0xDX1VTRVJfRVhFQ19BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfZXhlY19hc2NlKSk7CisJREVGSU5FKF9fTENfQ1BVSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2lkKSk7CisJREVGSU5FKF9fTENfSU5UX0NMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGludF9jbG9jaykpOworCURFRklORShfX0xDX01BQ0hJTkVfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWFjaGluZV9mbGFncykpOworCURFRklORShfX0xDX0ZUUkFDRV9GVU5DLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZ0cmFjZV9mdW5jKSk7CisJREVGSU5FKF9fTENfSVJCLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlyYikpOworCURFRklORShfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X3RpbWVyX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNsb2NrX2NvbXBfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFNXX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwc3dfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFJFRklYX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcmVmaXhyZWdfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQVJFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0ZQUkVHU19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfR1BSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBncHJlZ3Nfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQ1JFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNyZWdzX3NhdmVfYXJlYSkpOworI2lmZGVmIENPTkZJR18zMkJJVAorCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHIpKTsKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMyKSk7CisJREVGSU5FKF9fTENfRVhUX1BBUkFNUzIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X3BhcmFtczIpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUEFTVEUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGFzdGUpKTsKKwlERUZJTkUoX19MQ19GUF9DUkVHX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBmcHRfY3JlZ19zYXZlX2FyZWEpKTsKKwlERUZJTkUoX19MQ19MQVNUX0JSRUFLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGJyZWFraW5nX2V2ZW50X2FkZHIpKTsKKwlERUZJTkUoX19MQ19WRFNPX1BFUl9DUFUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdmRzb19wZXJfY3B1X2RhdGEpKTsKKyNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKaW5kZXggZGM3ZTUyNS4uMTVlNDZjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKQEAgLTYsOCArNiw4IEBACiAgKgkJIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwppbmRleCBkYjk0M2E3Li5iMzliMjdkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKQEAgLTg2LDEwICs4NiwxNyBAQAogCVU0XzEyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxMiAqLwogCVU0XzE2LAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLwogCVU0XzIwLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAyMCAqLworCVU0XzMyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAzMiAqLwogCVU4XzgsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDggKi8KIAlVOF8xNiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlVOF8yNCwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMjQgKi8KKwlVOF8zMiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KKwlJOF84LAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgOCAqLworCUk4XzMyLAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KIAlJMTZfMTYsCS8qIDE2IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlJMTZfMzIsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KIAlVMTZfMTYsCS8qIDE2IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLworCVUxNl8zMiwJLyogMzIgYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCiAJSjE2XzE2LAkvKiBQQyByZWxhdGl2ZSBqdW1wIG9mZnNldCBhdCAxNiAqLwogCUozMl8xNiwJLyogUEMgcmVsYXRpdmUgbG9uZyBvZmZzZXQgYXQgMTYgKi8KIAlJMzJfMTYsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KQEAgLTEwNCwyMSArMTExLDM3IEBACiAgKi8KIGVudW0gewogCUlOU1RSX0lOVkFMSUQsCi0JSU5TVFJfRSwgSU5TVFJfUklFX1JSUCwgSU5TVFJfUklMX1JJLCBJTlNUUl9SSUxfUlAsIElOU1RSX1JJTF9SVSwKLQlJTlNUUl9SSUxfVVAsIElOU1RSX1JJX1JJLCBJTlNUUl9SSV9SUCwgSU5TVFJfUklfUlUsIElOU1RSX1JJX1VQLAorCUlOU1RSX0UsCisJSU5TVFJfUklFX1IwSVUsIElOU1RSX1JJRV9SMFVVLCBJTlNUUl9SSUVfUlJQLCBJTlNUUl9SSUVfUlJQVSwKKwlJTlNUUl9SSUVfUlJVVVUsIElOU1RSX1JJRV9SVVBJLCBJTlNUUl9SSUVfUlVQVSwKKwlJTlNUUl9SSUxfUkksIElOU1RSX1JJTF9SUCwgSU5TVFJfUklMX1JVLCBJTlNUUl9SSUxfVVAsCisJSU5TVFJfUklTX1IwUkRVLCBJTlNUUl9SSVNfUjBVVSwgSU5TVFJfUklTX1JVUkRJLCBJTlNUUl9SSVNfUlVSRFUsCisJSU5TVFJfUklfUkksIElOU1RSX1JJX1JQLCBJTlNUUl9SSV9SVSwgSU5TVFJfUklfVVAsCiAJSU5TVFJfUlJFXzAwLCBJTlNUUl9SUkVfMFIsIElOU1RSX1JSRV9BQSwgSU5TVFJfUlJFX0FSLCBJTlNUUl9SUkVfRjAsCi0JSU5TVFJfUlJFX0ZGLCBJTlNUUl9SUkVfUjAsIElOU1RSX1JSRV9SQSwgSU5TVFJfUlJFX1JGLCBJTlNUUl9SUkVfUlIsCi0JSU5TVFJfUlJFX1JSX09QVCwgSU5TVFJfUlJGX0YwRkYsIElOU1RSX1JSRl9GVUZGLCBJTlNUUl9SUkZfTTBSUiwKLQlJTlNUUl9SUkZfUjBSUiwgSU5TVFJfUlJGX1JVUlIsIElOU1RSX1JSRl9VMEZGLCBJTlNUUl9SUkZfVTBSRiwKKwlJTlNUUl9SUkVfRkYsIElOU1RSX1JSRV9GUiwgSU5TVFJfUlJFX1IwLCBJTlNUUl9SUkVfUkEsIElOU1RSX1JSRV9SRiwKKwlJTlNUUl9SUkVfUlIsIElOU1RSX1JSRV9SUl9PUFQsCisJSU5TVFJfUlJGXzBVRkYsIElOU1RSX1JSRl9GMEZGLCBJTlNUUl9SUkZfRjBGRjIsIElOU1RSX1JSRl9GMEZSLAorCUlOU1RSX1JSRl9GRlJVLCBJTlNUUl9SUkZfRlVGRiwgSU5TVFJfUlJGX00wUlIsIElOU1RSX1JSRl9SMFJSLAorCUlOU1RSX1JSRl9SVVJSLCBJTlNUUl9SUkZfVTBGRiwgSU5TVFJfUlJGX1UwUkYsIElOU1RSX1JSRl9VMFJSLAorCUlOU1RSX1JSRl9VVUZGLCBJTlNUUl9SUlJfRjBGRiwgSU5TVFJfUlJTX1JSUkRVLAogCUlOU1RSX1JSX0ZGLCBJTlNUUl9SUl9SMCwgSU5TVFJfUlJfUlIsIElOU1RSX1JSX1UwLCBJTlNUUl9SUl9VUiwKLQlJTlNUUl9SU0VfQ0NSRCwgSU5TVFJfUlNFX1JSUkQsIElOU1RSX1JTRV9SVVJELCBJTlNUUl9SU0lfUlJQLAotCUlOU1RSX1JTTF9SMFJELCBJTlNUUl9SU1lfQUFSRCwgSU5TVFJfUlNZX0NDUkQsIElOU1RSX1JTWV9SUlJELAotCUlOU1RSX1JTWV9SVVJELCBJTlNUUl9SU19BQVJELCBJTlNUUl9SU19DQ1JELCBJTlNUUl9SU19SMFJELAotCUlOU1RSX1JTX1JSUkQsIElOU1RSX1JTX1JVUkQsIElOU1RSX1JYRV9GUlJELCBJTlNUUl9SWEVfUlJSRCwKLQlJTlNUUl9SWEZfRlJSREYsIElOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhfRlJSRCwKLQlJTlNUUl9SWF9SUlJELCBJTlNUUl9SWF9VUlJELCBJTlNUUl9TSVlfVVJELCBJTlNUUl9TSV9VUkQsCi0JSU5TVFJfU1NFX1JEUkQsIElOU1RSX1NTRl9SUkRSRCwgSU5TVFJfU1NfTDBSRFJELCBJTlNUUl9TU19MSVJEUkQsCi0JSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsIElOU1RSX1NTX1JSUkRSRDIsIElOU1RSX1NTX1JSUkRSRDMsCisJSU5TVFJfUlNFX0NDUkQsIElOU1RSX1JTRV9SUlJELCBJTlNUUl9SU0VfUlVSRCwKKwlJTlNUUl9SU0lfUlJQLAorCUlOU1RSX1JTTF9SMFJELAorCUlOU1RSX1JTWV9BQVJELCBJTlNUUl9SU1lfQ0NSRCwgSU5TVFJfUlNZX1JSUkQsIElOU1RSX1JTWV9SVVJELAorCUlOU1RSX1JTX0FBUkQsIElOU1RSX1JTX0NDUkQsIElOU1RSX1JTX1IwUkQsIElOU1RSX1JTX1JSUkQsCisJSU5TVFJfUlNfUlVSRCwKKwlJTlNUUl9SWEVfRlJSRCwgSU5TVFJfUlhFX1JSUkQsCisJSU5TVFJfUlhGX0ZSUkRGLAorCUlOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhZX1VSUkQsCisJSU5TVFJfUlhfRlJSRCwgSU5TVFJfUlhfUlJSRCwgSU5TVFJfUlhfVVJSRCwKKwlJTlNUUl9TSUxfUkRJLCBJTlNUUl9TSUxfUkRVLAorCUlOU1RSX1NJWV9JUkQsIElOU1RSX1NJWV9VUkQsCisJSU5TVFJfU0lfVVJELAorCUlOU1RSX1NTRV9SRFJELAorCUlOU1RSX1NTRl9SUkRSRCwKKwlJTlNUUl9TU19MMFJEUkQsIElOU1RSX1NTX0xJUkRSRCwgSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsCisJSU5TVFJfU1NfUlJSRFJEMiwgSU5TVFJfU1NfUlJSRFJEMywKIAlJTlNUUl9TXzAwLCBJTlNUUl9TX1JELAogfTsKIApAQCAtMTI5LDcgKzE1Miw3IEBACiB9OwogCiBzdHJ1Y3QgaW5zbiB7Ci0JY29uc3QgY2hhciBuYW1lWzVdOworCWNvbnN0IGNoYXIgbmFtZVs2XTsKIAl1bnNpZ25lZCBjaGFyIG9wZnJhZzsKIAl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKIH07CkBAIC0xNzAsMTEgKzE5MywxNiBAQAogCVtVNF8xMl0gID0geyAgNCwgMTIsIDAgfSwKIAlbVTRfMTZdICA9IHsgIDQsIDE2LCAwIH0sCiAJW1U0XzIwXSAgPSB7ICA0LCAyMCwgMCB9LAorCVtVNF8zMl0gID0geyAgNCwgMzIsIDAgfSwKIAlbVThfOF0JID0geyAgOCwgIDgsIDAgfSwKIAlbVThfMTZdICA9IHsgIDgsIDE2LCAwIH0sCisJW1U4XzI0XSAgPSB7ICA4LCAyNCwgMCB9LAorCVtVOF8zMl0gID0geyAgOCwgMzIsIDAgfSwKIAlbSTE2XzE2XSA9IHsgMTYsIDE2LCBPUEVSQU5EX1NJR05FRCB9LAogCVtVMTZfMTZdID0geyAxNiwgMTYsIDAgfSwKKwlbVTE2XzMyXSA9IHsgMTYsIDMyLCAwIH0sCiAJW0oxNl8xNl0gPSB7IDE2LCAxNiwgT1BFUkFORF9QQ1JFTCB9LAorCVtJMTZfMzJdID0geyAxNiwgMzIsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW0ozMl8xNl0gPSB7IDMyLCAxNiwgT1BFUkFORF9QQ1JFTCB9LAogCVtJMzJfMTZdID0geyAzMiwgMTYsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW1UzMl8xNl0gPSB7IDMyLCAxNiwgMCB9LApAQCAtMTgzLDgyICsyMTEsOTMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZvcm1hdHNbXVs3XSA9IHsKLQlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gcHIgICAgKi8KLQlbSU5TVFJfUklFX1JSUF0JICA9IHsgMHhmZiwgUl84LFJfMTIsSjE2XzE2LDAsMCwwIH0sICAgLyogZS5nLiBicnhoZyAqLwotCVtJTlNUUl9SSUxfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJhc2wgKi8KLQlbSU5TVFJfUklMX1VQXQkgID0geyAweDBmLCBVNF84LEozMl8xNiwwLDAsMCwwIH0sICAgICAvKiBlLmcuIGJyY2wgICovCi0JW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sICAgICAgLyogZS5nLiBhZmkgICAqLwotCVtJTlNUUl9SSUxfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWxmaSAgKi8KLQlbSU5TVFJfUklfUkldCSAgPSB7IDB4MGYsIFJfOCxJMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWhpICAgKi8KLQlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJjdCAgKi8KLQlbSU5TVFJfUklfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gdG1sICAgKi8KLQlbSU5TVFJfUklfVVBdCSAgPSB7IDB4MGYsIFU0XzgsSjE2XzE2LDAsMCwwLDAgfSwgICAgIC8qIGUuZy4gYnJjICAgKi8KLQlbSU5TVFJfUlJFXzAwXQkgID0geyAweGZmLCAwLDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBwYWxiICAqLwotCVtJTlNUUl9SUkVfMFJdCSAgPSB7IDB4ZmYsIFJfMjgsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHRiICAgICovCi0JW0lOU1RSX1JSRV9BQV0JICA9IHsgMHhmZiwgQV8yNCxBXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBjcHlhICAqLwotCVtJTlNUUl9SUkVfQVJdCSAgPSB7IDB4ZmYsIEFfMjQsUl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gc2FyICAgKi8KLQlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBzcWVyICAqLwotCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZGViciAgKi8KLQlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBpcG0gICAqLwotCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZWFyICAgKi8KLQlbSU5TVFJfUlJFX1JGXQkgID0geyAweGZmLCBSXzI0LEZfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGNlZmJyICovCi0JW0lOU1RSX1JSRV9SUl0JICA9IHsgMHhmZiwgUl8yNCxSXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBsdXJhICAqLwotCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwgICAgICAvKiBlZnBjLCBzZnBjICovCi0JW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gbWFkYnIgKi8KLQlbSU5TVFJfUlJGX0ZVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzE2LEZfMjgsVTRfMjAsMCwwIH0sLyogZS5nLiBkaWRiciAqLwotCVtJTlNUUl9SUkZfUlVSUl0gID0geyAweGZmLCBSXzI0LFJfMjgsUl8xNixVNF8yMCwwLDAgfSwvKiBlLmcuIC5pbnNuICovCi0JW0lOU1RSX1JSRl9SMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8xNixSXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gaWR0ZSAgKi8KLQlbSU5TVFJfUlJGX1UwRkZdICA9IHsgMHhmZiwgRl8yNCxVNF8xNixGXzI4LDAsMCwwIH0sICAgLyogZS5nLiBmaXhyICAqLwotCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwgICAvKiBlLmcuIGNmZWJyICovCi0JW0lOU1RSX1JSRl9NMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxNXzE2LDAsMCwwIH0sICAgIC8qIGUuZy4gc3NrZSAgKi8KLQlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwgICAgICAgIC8qIGUuZy4gYWRyICAgKi8KLQlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHNwbSAgICovCi0JW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sICAgICAgICAvKiBlLmcuIGxyICAgICovCi0JW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gc3ZjICAgKi8KLQlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gYmNyICAgKi8KLQlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBsbWggICAqLwotCVtJTlNUUl9SU0VfQ0NSRF0gID0geyAweGZmLCBDXzgsQ18xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxtaCAgICovCi0JW0lOU1RSX1JTRV9SVVJEXSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtaCAgKi8KLQlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiB0cCAgICAqLwotCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwgICAvKiBlLmcuIGJyeGggICovCi0JW0lOU1RSX1JTWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gc3RteSAgKi8KKwlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUklFX1IwVVVdICA9IHsgMHhmZiwgUl84LFUxNl8xNixVNF8zMiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJQVV0gID0geyAweGZmLCBSXzgsUl8xMixVNF8zMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJRV9SUlBdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEoxNl8xNiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJVVVVdID0geyAweGZmLCBSXzgsUl8xMixVOF8xNixVOF8yNCxVOF8zMiwwIH0sCisJW0lOU1RSX1JJRV9SVVBJXSAgPSB7IDB4ZmYsIFJfOCxJOF8zMixVNF8xMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SUF0JICA9IHsgMHgwZiwgUl84LEozMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SVV0JICA9IHsgMHgwZiwgUl84LFUzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9VUF0JICA9IHsgMHgwZiwgVTRfOCxKMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSVNfUjBSRFVdID0geyAweGZmLCBSXzgsVThfMzIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SSVNfUlVSREldID0geyAweGZmLCBSXzgsSThfMzIsVTRfMTIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUklTX1JVUkRVXSA9IHsgMHhmZiwgUl84LFU4XzMyLFU0XzEyLERfMjAsQl8xNiwwIH0sCisJW0lOU1RSX1JJX1JJXQkgID0geyAweDBmLCBSXzgsSTE2XzE2LDAsMCwwLDAgfSwKKwlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSV9SVV0JICA9IHsgMHgwZiwgUl84LFUxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJX1VQXQkgID0geyAweDBmLCBVNF84LEoxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV8wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFXzBSXQkgID0geyAweGZmLCBSXzI4LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfQUFdCSAgPSB7IDB4ZmYsIEFfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9BUl0JICA9IHsgMHhmZiwgQV8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9GUl0JICA9IHsgMHhmZiwgRl8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9SRl0JICA9IHsgMHhmZiwgUl8yNCxGXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1JSXQkgID0geyAweGZmLCBSXzI0LFJfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJGXzBVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LFU0XzIwLDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGMl0gPSB7IDB4ZmYsIEZfMjQsRl8xNixGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZSXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GRlJVXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LFU0XzIwLDAsMCB9LAorCVtJTlNUUl9SUkZfRlVGRl0gID0geyAweGZmLCBGXzI0LEZfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJGX00wUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LE1fMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1IwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzE2LFJfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1JVUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFJfMTYsVTRfMjAsMCwwIH0sCisJW0lOU1RSX1JSRl9VMEZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1UwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFU0XzE2LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9VVUZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJSX0YwRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LEZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJTX1JSUkRVXSA9IHsgMHhmZiwgUl84LFJfMTIsVTRfMzIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JTRV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0VfUlVSRF0gID0geyAweGZmLCBSXzgsVTRfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgRF8yMCxMNF84LEJfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNZX0FBUkRdICA9IHsgMHhmZiwgQV84LEFfMTIsRDIwXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTWV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLEQyMF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU1lfUlJSRF0gID0geyAweGZmLCBSXzgsUl8xMixEMjBfMjAsQl8xNiwwLDAgfSwKIAlbSU5TVFJfUlNZX1JVUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLEQyMF8yMCxCXzE2LDAsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGljbWggICovCi0JW0lOU1RSX1JTWV9BQVJEXSAgPSB7IDB4ZmYsIEFfOCxBXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gbGFteSAgKi8KLQlbSU5TVFJfUlNZX0NDUkRdICA9IHsgMHhmZiwgQ184LENfMTIsRDIwXzIwLEJfMTYsMCwwIH0sLyogZS5nLiBsYW15ICAqLwotCVtJTlNUUl9SU19BQVJEXQkgID0geyAweGZmLCBBXzgsQV8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxhbSAgICovCi0JW0lOU1RSX1JTX0NDUkRdCSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwgIC8qIGUuZy4gbGN0bCAgKi8KLQlbSU5TVFJfUlNfUjBSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiBzbGwgICAqLwotCVtJTlNUUl9SU19SUlJEXQkgID0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGNzICAgICovCi0JW0lOU1RSX1JTX1JVUkRdCSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtICAgKi8KLQlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBheGJyICAqLwotCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxnICAgICovCisJW0lOU1RSX1JTX0FBUkRdCSAgPSB7IDB4ZmYsIEFfOCxBXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfQ0NSRF0JICA9IHsgMHhmZiwgQ184LENfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU19SMFJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxCXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JTX1JSUkRdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfUlVSRF0JICA9IHsgMHhmZiwgUl84LFU0XzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sCiAJW0lOU1RSX1JYRl9GUlJERl0gPSB7IDB4ZmYsIEZfMzIsRl84LERfMjAsWF8xMixCXzE2LDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtYWRiICAqLwotCVtJTlNUUl9SWFlfUlJSRF0gID0geyAweGZmLCBSXzgsRDIwXzIwLFhfMTIsQl8xNiwwLDAgfSwvKiBlLmcuIGx5ICAgICovCi0JW0lOU1RSX1JYWV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LC8qIGUuZy4gbGV5ICAgKi8KLQlbSU5TVFJfUlhfRlJSRF0JICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBhZSAgICAqLwotCVtJTlNUUl9SWF9SUlJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGwgICAgICovCi0JW0lOU1RSX1JYX1VSUkRdCSAgPSB7IDB4ZmYsIFU0XzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sIC8qIGUuZy4gYmMgICAgKi8KLQlbSU5TVFJfU0lfVVJEXQkgID0geyAweGZmLCBEXzIwLEJfMTYsVThfOCwwLDAsMCB9LCAgICAvKiBlLmcuIGNsaSAgICovCi0JW0lOU1RSX1NJWV9VUkRdCSAgPSB7IDB4ZmYsIEQyMF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwgIC8qIGUuZy4gdG15ICAgKi8KLQlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwgLyogZS5nLiBtdnNkayAqLwotCVtJTlNUUl9TU19MMFJEUkRdID0geyAweGZmLCBEXzIwLEw4XzgsQl8xNixEXzM2LEJfMzIsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12YyAgICovCi0JW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHNycCAgICovCi0JW0lOU1RSX1NTX0xMUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsTDRfMTIsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHBhY2sgICovCi0JW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtdmNrICAqLwotCVtJTlNUUl9TU19SUlJEUkQyXT0geyAweGZmLCBSXzgsRF8yMCxCXzE2LFJfMTIsRF8zNixCXzMyIH0sCi0JCQkJCQkJICAgICAgIC8qIGUuZy4gcGxvICAgKi8KLQlbSU5TVFJfU1NfUlJSRFJEM109IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LERfMzYsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGxtZCAgICovCi0JW0lOU1RSX1NfMDBdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIGhzY2ggICovCi0JW0lOU1RSX1NfUkRdCSAgPSB7IDB4ZmYsIERfMjAsQl8xNiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gbHBzdyAgKi8KKwlbSU5TVFJfUlhZX0ZSUkRdICA9IHsgMHhmZiwgRl84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWFlfVVJSRF0gID0geyAweGZmLCBVNF84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYX0ZSUkRdCSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhfUlJSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWF9VUlJEXQkgID0geyAweGZmLCBVNF84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9TSUxfUkRJXSAgID0geyAweGZmLCBEXzIwLEJfMTYsSTE2XzMyLDAsMCwwIH0sCisJW0lOU1RSX1NJTF9SRFVdICAgPSB7IDB4ZmYsIERfMjAsQl8xNixVMTZfMzIsMCwwLDAgfSwKKwlbSU5TVFJfU0lZX0lSRF0gICA9IHsgMHhmZiwgRDIwXzIwLEJfMTYsSThfOCwwLDAsMCB9LAorCVtJTlNUUl9TSVlfVVJEXQkgID0geyAweGZmLCBEMjBfMjAsQl8xNixVOF84LDAsMCwwIH0sCisJW0lOU1RSX1NJX1VSRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwKKwlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwKIAlbSU5TVFJfU1NGX1JSRFJEXSA9IHsgMHgwMCwgRF8yMCxCXzE2LERfMzYsQl8zMixSXzgsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12Y29zICovCisJW0lOU1RSX1NTX0wwUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDhfOCxCXzE2LERfMzYsQl8zMiwwIH0sCisJW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAorCVtJTlNUUl9TU19MTFJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEw0XzEyLEJfMzIgfSwKKwlbSU5TVFJfU1NfUlJSRFJEMl09IHsgMHhmZiwgUl84LERfMjAsQl8xNixSXzEyLERfMzYsQl8zMiB9LAorCVtJTlNUUl9TU19SUlJEUkQzXT0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsRF8zNixCXzMyIH0sCisJW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKKwlbSU5TVFJfU18wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfU19SRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LDAsMCwwLDAgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVbXSA9IHsKQEAgLTQ1NCw2ICs0OTMsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV8wMVtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgInNhbTY0IiwgMHgwZSwgSU5TVFJfRSB9LAorCXsgInBmcG8iLCAweDBhLCBJTlNUUl9FIH0sCisJeyAicHRmZiIsIDB4MDQsIElOU1RSX0UgfSwKICNlbmRpZgogCXsgInByIiwgMHgwMSwgSU5TVFJfRSB9LAogCXsgInVwdCIsIDB4MDIsIElOU1RSX0UgfSwKQEAgLTUxOSw2ICs1NjAsOCBAQAogCXsgImN1dGZ1IiwgMHhhNywgSU5TVFJfUlJGX00wUlIgfSwKIAl7ICJzdGZsZSIsIDB4YjAsIElOU1RSX1NfUkQgfSwKIAl7ICJscHN3ZSIsIDB4YjIsIElOU1RSX1NfUkQgfSwKKwl7ICJzcm5tdCIsIDB4YjksIElOU1RSX1NfUkQgfSwKKwl7ICJsZmFzIiwgMHhiZCwgSU5TVFJfU19SRCB9LAogI2VuZGlmCiAJeyAic3RpZHAiLCAweDAyLCBJTlNUUl9TX1JEIH0sCiAJeyAic2NrIiwgMHgwNCwgSU5TVFJfU19SRCB9LApAQCAtNTg5LDcgKzYzMiw2IEBACiAJeyAiY2xzdCIsIDB4NWQsIElOU1RSX1JSRV9SUiB9LAogCXsgInNyc3QiLCAweDVlLCBJTlNUUl9SUkVfUlIgfSwKIAl7ICJjbXBzYyIsIDB4NjMsIElOU1RSX1JSRV9SUiB9LAotCXsgImNtcHNjIiwgMHg2MywgSU5TVFJfUlJFX1JSIH0sCiAJeyAic2lnYSIsIDB4NzQsIElOU1RSX1NfUkQgfSwKIAl7ICJ4c2NoIiwgMHg3NiwgSU5TVFJfU18wMCB9LAogCXsgInJwIiwgMHg3NywgSU5TVFJfU19SRCB9LApAQCAtNjMwLDYgKzY3Miw1NyBAQAogCXsgImNnZXIiLCAweGM4LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNnZHIiLCAweGM5LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNneHIiLCAweGNhLCBJTlNUUl9SUkZfVTBSRiB9LAorCXsgImxwZGZyIiwgMHg3MCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAibG5kZnIiLCAweDcxLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjcHNkciIsIDB4NzIsIElOU1RSX1JSRl9GMEZGMiB9LAorCXsgImxjZGZyIiwgMHg3MywgSU5TVFJfUlJFX0ZGIH0sCisJeyAibGRnciIsIDB4YzEsIElOU1RSX1JSRV9GUiB9LAorCXsgImxnZHIiLCAweGNkLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJhZHRyIiwgMHhkMiwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJheHRyIiwgMHhkYSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJjZHRyIiwgMHhlNCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY3h0ciIsIDB4ZWMsIElOU1RSX1JSRV9GRiB9LAorCXsgImtkdHIiLCAweGUwLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJreHRyIiwgMHhlOCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY2VkdHIiLCAweGY0LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjZXh0ciIsIDB4ZmMsIElOU1RSX1JSRV9GRiB9LAorCXsgImNkZ3RyIiwgMHhmMSwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY3hndHIiLCAweGY5LCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjZHN0ciIsIDB4ZjMsIElOU1RSX1JSRV9GUiB9LAorCXsgImN4c3RyIiwgMHhmYiwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY2R1dHIiLCAweGYyLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjeHV0ciIsIDB4ZmEsIElOU1RSX1JSRV9GUiB9LAorCXsgImNnZHRyIiwgMHhlMSwgSU5TVFJfUlJGX1UwUkYgfSwKKwl7ICJjZ3h0ciIsIDB4ZTksIElOU1RSX1JSRl9VMFJGIH0sCisJeyAiY3NkdHIiLCAweGUzLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJjc3h0ciIsIDB4ZWIsIElOU1RSX1JSRV9SRiB9LAorCXsgImN1ZHRyIiwgMHhlMiwgSU5TVFJfUlJFX1JGIH0sCisJeyAiY3V4dHIiLCAweGVhLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJkZHRyIiwgMHhkMSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJkeHRyIiwgMHhkOSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJlZWR0ciIsIDB4ZTUsIElOU1RSX1JSRV9SRiB9LAorCXsgImVleHRyIiwgMHhlZCwgSU5TVFJfUlJFX1JGIH0sCisJeyAiZXNkdHIiLCAweGU3LCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJlc3h0ciIsIDB4ZWYsIElOU1RSX1JSRV9SRiB9LAorCXsgImllZHRyIiwgMHhmNiwgSU5TVFJfUlJGX0YwRlIgfSwKKwl7ICJpZXh0ciIsIDB4ZmUsIElOU1RSX1JSRl9GMEZSIH0sCisJeyAibHRkdHIiLCAweGQ2LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJsdHh0ciIsIDB4ZGUsIElOU1RSX1JSRV9GRiB9LAorCXsgImZpZHRyIiwgMHhkNywgSU5TVFJfUlJGX1VVRkYgfSwKKwl7ICJmaXh0ciIsIDB4ZGYsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGRldHIiLCAweGQ0LCBJTlNUUl9SUkZfMFVGRiB9LAorCXsgImx4ZHRyIiwgMHhkYywgSU5TVFJfUlJGXzBVRkYgfSwKKwl7ICJsZWR0ciIsIDB4ZDUsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGR4dHIiLCAweGRkLCBJTlNUUl9SUkZfVVVGRiB9LAorCXsgIm1kdHIiLCAweGQwLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgIm14dHIiLCAweGQ4LCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInFhZHRyIiwgMHhmNSwgSU5TVFJfUlJGX0ZVRkYgfSwKKwl7ICJxYXh0ciIsIDB4ZmQsIElOU1RSX1JSRl9GVUZGIH0sCisJeyAicnJkdHIiLCAweGY3LCBJTlNUUl9SUkZfRkZSVSB9LAorCXsgInJyeHRyIiwgMHhmZiwgSU5TVFJfUlJGX0ZGUlUgfSwKKwl7ICJzZmFzciIsIDB4ODUsIElOU1RSX1JSRV9SMCB9LAorCXsgInNkdHIiLCAweGQzLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInN4dHIiLCAweGRiLCBJTlNUUl9SUlJfRjBGRiB9LAogI2VuZGlmCiAJeyAibHBlYnIiLCAweDAwLCBJTlNUUl9SUkVfRkYgfSwKIAl7ICJsbmViciIsIDB4MDEsIElOU1RSX1JSRV9GRiB9LApAQCAtNzgwLDYgKzg3MywxNCBAQAogCXsgImN1MjQiLCAweGIxLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDEiLCAweGIyLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDIiLCAweGIzLCBJTlNUUl9SUkZfTTBSUiB9LAorCXsgImNydCIsIDB4NzIsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2dydCIsIDB4NjAsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xydCIsIDB4NzMsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xncnQiLCAweDYxLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgInB0ZiIsIDB4YTIsIElOU1RSX1JSRV9SMCB9LAorCXsgInBmbWYiLCAweGFmLCBJTlNUUl9SUkVfUlIgfSwKKwl7ICJ0cnRlIiwgMHhiZiwgSU5TVFJfUlJGX00wUlIgfSwKKwl7ICJ0cnRyZSIsIDB4YmQsIElOU1RSX1JSRl9NMFJSIH0sCiAjZW5kaWYKIAl7ICJrbWFjIiwgMHgxZSwgSU5TVFJfUlJFX1JSIH0sCiAJeyAibHJ2ciIsIDB4MWYsIElOU1RSX1JSRV9SUiB9LApAQCAtODM1LDYgKzkzNiw0MyBAQAogCXsgImNmaSIsIDB4MGQsIElOU1RSX1JJTF9SSSB9LAogCXsgImNsZ2ZpIiwgMHgwZSwgSU5TVFJfUklMX1JVIH0sCiAJeyAiY2xmaSIsIDB4MGYsIElOU1RSX1JJTF9SVSB9LAorCXsgIm1zZmkiLCAweDAxLCBJTlNUUl9SSUxfUkkgfSwKKwl7ICJtc2dmaSIsIDB4MDAsIElOU1RSX1JJTF9SSSB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M0W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAibHJsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGdybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAibGhybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxocmwiLCAweDAyLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJsbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdHJsIiwgMHgwZiwgSU5TVFJfUklMX1JQIH0sCisJeyAic3RncmwiLCAweDBiLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdGhybCIsIDB4MDcsIElOU1RSX1JJTF9SUCB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M2W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAiY3JsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2dybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAiY2hybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xybCIsIDB4MGYsIElOU1RSX1JJTF9SUCB9LAorCXsgImNsZ3JsIiwgMHgwYSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xocmwiLCAweDA3LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJwZmRybCIsIDB4MDIsIElOU1RSX1JJTF9VUCB9LAorCXsgImV4cmwiLCAweDAwLCBJTlNUUl9SSUxfUlAgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTg0Miw2ICs5ODAsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV9jOFtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgIm12Y29zIiwgMHgwMCwgSU5TVFJfU1NGX1JSRFJEIH0sCisJeyAiZWN0ZyIsIDB4MDEsIElOU1RSX1NTRl9SUkRSRCB9LAorCXsgImNzc3QiLCAweDAyLCBJTlNUUl9TU0ZfUlJEUkQgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTkxNyw2ICsxMDU3LDEyIEBACiAJeyAibGxnaCIsIDB4OTEsIElOU1RSX1JYWV9SUlJEIH0sCiAJeyAibGxjIiwgMHg5NCwgSU5TVFJfUlhZX1JSUkQgfSwKIAl7ICJsbGgiLCAweDk1LCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgImNnaCIsIDB4MzQsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibGFleSIsIDB4NzUsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibHRnZiIsIDB4MzIsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibWZ5IiwgMHg1YywgSU5TVFJfUlhZX1JSUkQgfSwKKwl7ICJtaHkiLCAweDdjLCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgInBmZCIsIDB4MzYsIElOU1RSX1JYWV9VUlJEIH0sCiAjZW5kaWYKIAl7ICJscnYiLCAweDFlLCBJTlNUUl9SWFlfUlJSRCB9LAogCXsgImxydmgiLCAweDFmLCBJTlNUUl9SWFlfUlJSRCB9LApAQCAtOTMxLDYgKzEwNzcsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVfZTVbXSA9IHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJzdHJhZyIsIDB4MDIsIElOU1RSX1NTRV9SRFJEIH0sCisJeyAiY2hoc2kiLCAweDU0LCBJTlNUUl9TSUxfUkRJIH0sCisJeyAiY2hzaSIsIDB4NWMsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjZ2hzaSIsIDB4NTgsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjbGhoc2kiLCAweDU1LCBJTlNUUl9TSUxfUkRVIH0sCisJeyAiY2xmaHNpIiwgMHg1ZCwgSU5TVFJfU0lMX1JEVSB9LAorCXsgImNsZ2hzaSIsIDB4NTksIElOU1RSX1NJTF9SRFUgfSwKKwl7ICJtdmhoaSIsIDB4NDQsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJtdmhpIiwgMHg0YywgSU5TVFJfU0lMX1JESSB9LAorCXsgIm12Z2hpIiwgMHg0OCwgSU5TVFJfU0lMX1JESSB9LAogI2VuZGlmCiAJeyAibGFzcCIsIDB4MDAsIElOU1RSX1NTRV9SRFJEIH0sCiAJeyAidHByb3QiLCAweDAxLCBJTlNUUl9TU0VfUkRSRCB9LApAQCAtOTc3LDYgKzExMzIsMTEgQEAKIAl7ICJsbXkiLCAweDk4LCBJTlNUUl9SU1lfUlJSRCB9LAogCXsgImxhbXkiLCAweDlhLCBJTlNUUl9SU1lfQUFSRCB9LAogCXsgInN0YW15IiwgMHg5YiwgSU5TVFJfUlNZX0FBUkQgfSwKKwl7ICJhc2kiLCAweDZhLCBJTlNUUl9TSVlfSVJEIH0sCisJeyAiYWdzaSIsIDB4N2EsIElOU1RSX1NJWV9JUkQgfSwKKwl7ICJhbHNpIiwgMHg2ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImFsZ3NpIiwgMHg3ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImVjYWciLCAweDRjLCBJTlNUUl9SU1lfUlJSRCB9LAogI2VuZGlmCiAJeyAicmxsIiwgMHgxZCwgSU5TVFJfUlNZX1JSUkQgfSwKIAl7ICJtdmNsdSIsIDB4OGUsIElOU1RSX1JTWV9SUlJEIH0sCkBAIC05ODgsNiArMTE0OCwzMCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXsgImJyeGhnIiwgMHg0NCwgSU5TVFJfUklFX1JSUCB9LAogCXsgImJyeGxnIiwgMHg0NSwgSU5TVFJfUklFX1JSUCB9LAorCXsgImNyYiIsIDB4ZjYsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNncmIiLCAweGU0LCBJTlNUUl9SUlNfUlJSRFUgfSwKKwl7ICJjcmoiLCAweDc2LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNncmoiLCAweDY0LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNpYiIsIDB4ZmUsIElOU1RSX1JJU19SVVJESSB9LAorCXsgImNnaWIiLCAweGZjLCBJTlNUUl9SSVNfUlVSREkgfSwKKwl7ICJjaWoiLCAweDdlLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNnaWoiLCAweDdjLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNpdCIsIDB4NzIsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2dpdCIsIDB4NzAsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2xyYiIsIDB4ZjcsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNsZ3JiIiwgMHhlNSwgSU5TVFJfUlJTX1JSUkRVIH0sCisJeyAiY2xyaiIsIDB4NzcsIElOU1RSX1JJRV9SUlBVIH0sCisJeyAiY2xncmoiLCAweDY1LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNsaWIiLCAweGZmLCBJTlNUUl9SSVNfUlVSRFUgfSwKKwl7ICJjbGdpYiIsIDB4ZmQsIElOU1RSX1JJU19SVVJEVSB9LAorCXsgImNsaWoiLCAweDdmLCBJTlNUUl9SSUVfUlVQVSB9LAorCXsgImNsZ2lqIiwgMHg3ZCwgSU5TVFJfUklFX1JVUFUgfSwKKwl7ICJjbGZpdCIsIDB4NzMsIElOU1RSX1JJRV9SMFVVIH0sCisJeyAiY2xnaXQiLCAweDcxLCBJTlNUUl9SSUVfUjBVVSB9LAorCXsgInJuc2JnIiwgMHg1NCwgSU5TVFJfUklFX1JSVVVVIH0sCisJeyAicnhzYmciLCAweDU3LCBJTlNUUl9SSUVfUlJVVVUgfSwKKwl7ICJyb3NiZyIsIDB4NTYsIElOU1RSX1JJRV9SUlVVVSB9LAorCXsgInJpc2JnIiwgMHg1NSwgSU5TVFJfUklFX1JSVVVVIH0sCiAjZW5kaWYKIAl7ICIiLCAwLCBJTlNUUl9JTlZBTElEIH0KIH07CkBAIC0xMDA0LDYgKzExODgsMTYgQEAKIAl7ICJsZHkiLCAweDY1LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZXkiLCAweDY2LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZHkiLCAweDY3LCBJTlNUUl9SWFlfRlJSRCB9LAorCXsgInNsZHQiLCAweDQwLCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJzbHh0IiwgMHg0OCwgSU5TVFJfUlhGX0ZSUkRGIH0sCisJeyAic3JkdCIsIDB4NDEsIElOU1RSX1JYRl9GUlJERiB9LAorCXsgInNyeHQiLCAweDQ5LCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJ0ZGNldCIsIDB4NTAsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRjZHQiLCAweDU0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkY3h0IiwgMHg1OCwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJ0ZGdldCIsIDB4NTEsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRnZHQiLCAweDU1LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkZ3h0IiwgMHg1OSwgSU5TVFJfUlhFX0ZSUkQgfSwKICNlbmRpZgogCXsgImxkZWIiLCAweDA0LCBJTlNUUl9SWEVfRlJSRCB9LAogCXsgImx4ZGIiLCAweDA1LCBJTlNUUl9SWEVfRlJSRCB9LApAQCAtMTAzNyw2ICsxMjMxLDcgQEAKIAl7ICJtYWUiLCAweDJlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2UiLCAweDJmLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJzcWUiLCAweDM0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInNxZCIsIDB4MzUsIElOU1RSX1JYRV9GUlJEIH0sCiAJeyAibWVlIiwgMHgzNywgSU5TVFJfUlhFX0ZSUkQgfSwKIAl7ICJtYWQiLCAweDNlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2QiLCAweDNmLCBJTlNUUl9SWEZfRlJSREYgfSwKQEAgLTExMTcsNiArMTMxMiwxMiBAQAogCWNhc2UgMHhjMjoKIAkJdGFibGUgPSBvcGNvZGVfYzI7CiAJCWJyZWFrOworCWNhc2UgMHhjNDoKKwkJdGFibGUgPSBvcGNvZGVfYzQ7CisJCWJyZWFrOworCWNhc2UgMHhjNjoKKwkJdGFibGUgPSBvcGNvZGVfYzY7CisJCWJyZWFrOwogCWNhc2UgMHhjODoKIAkJdGFibGUgPSBvcGNvZGVfYzg7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGU0OWU5ZTAuLjMxZDYxOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTIxNCwxMCArMjE0LDEzIEBACiAKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0JLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLwotCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCS8qIENoZWNrIGN1cnJlbnQtY29uZmlndXJhdGlvbi1sZXZlbCAqLworCWlmICgoc3RzaShOVUxMLCAwLCAwLCAwKSA+PiAyOCkgPD0gMikgeworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfTFBBUjsKIAkJcmV0dXJuOwotCWlmICghdm1tcy5jb3VudCkKKwl9CisJLyogR2V0IHZpcnR1YWwtbWFjaGluZSBjcHUgaW5mb3JtYXRpb24uICovCisJaWYgKHN0c2koJnZtbXMsIDMsIDIsIDIpID09IC1FTk9TWVMgfHwgIXZtbXMuY291bnQpCiAJCXJldHVybjsKIAogCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KQEAgLTQwMiw4ICs0MDUsMTkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY29tbWFuZF9saW5lKHZvaWQpCiB7CisJaW50IGk7CisKKwkvKiBjb252ZXJ0IGFyY2ggY29tbWFuZCBsaW5lIHRvIGFzY2lpICovCisJZm9yIChpID0gMDsgaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkU7IGkrKykKKwkJaWYgKENPTU1BTkRfTElORVtpXSAmIDB4ODApCisJCQlicmVhazsKKwlpZiAoaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpCisJCUVCQ0FTQyhDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCUNPTU1BTkRfTElORVtBUkNIX0NPTU1BTkRfTElORV9TSVpFLTFdID0gMDsKKwogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KLQlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIHN0cnN0cmlwKENPTU1BTkRfTElORSksCisJCUFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZThlZjIxYy4uNDM0OGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGYzMzY1OGYwLi4yOWZkMGYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtOSwxMSArOSw5IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNWE4MmJjNi4uNmE4M2QwNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDx0cmFjZS9zeXNjYWxsLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCkBAIC0yMDAsMTMgKzIwMCwzIEBACiAJcmV0dXJuIHBhcmVudDsKIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KLSNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzX2NhbGxfdGFibGVbXTsKLQotdW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggYzUyYjRmNy4uY2E0YTYyYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDEwCiAgKgogICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQVJDSF9PRkZTRVQJNApAQCAtMjg4LDE5ICsyODUsNyBAQAogCWJ6CS5MYWdhaW4xCQkjIHNraXAgZGF0ZXNldCB0cmFpbGVyCiAJbGEJJXI1LDAoJXI0LCVyMikKIAlscgklcjMsJXIyCi0uTGlkZWJjOgotCXRtCTAoJXI1KSwweDgwCQkjIGhpZ2ggb3JkZXIgYml0IHNldCA/Ci0JYm8JLkxkb2N2CQkJIyAgeWVzIC0+IGNvbnZlcnQgZnJvbSBFQkNESUMKLQlhaGkJJXI1LC0xCi0JYmN0CSVyMywuTGlkZWJjCi0JYgkuTG5vY3YKLS5MZG9jdjoKLQlsCSVyMywuTGN2dGFiCi0JdHIJMCgyNTYsJXI0KSwwKCVyMykJIyBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gYXNjaWkKLQl0cgkyNTYoMjU2LCVyNCksMCglcjMpCi0JdHIJNTEyKDI1NiwlcjQpLDAoJXIzKQotCXRyCTc2OCgxMjIsJXI0KSwwKCVyMykKLS5Mbm9jdjogbGEJJXIzLENPTU1BTkRfTElORS1QQVJNQVJFQSglcjEyKSAjIGxvYWQgYWRyLiBvZiBjb21tYW5kIGxpbmUKKwlsYQklcjMsQ09NTUFORF9MSU5FLVBBUk1BUkVBKCVyMTIpICMgbG9hZCBhZHIuIG9mIGNvbW1hbmQgbGluZQogCW12YwkwKDI1NiwlcjMpLDAoJXI0KQogCW12YwkyNTYoMjU2LCVyMyksMjU2KCVyNCkKIAltdmMJNTEyKDI1NiwlcjMpLDUxMiglcjQpCkBAIC0zODQsNyArMzY5LDYgQEAKIC5MaW5pdHJkOi5sb25nIF9lbmQgKyAweDQwMDAwMAkJIyBkZWZhdWx0IGFkZHJlc3Mgb2YgaW5pdHJkCiAuTHBhcm06CS5sb25nICBQQVJNQVJFQQogLkxzdGFydHVwOiAubG9uZyBzdGFydHVwCi0uTGN2dGFiOi5sb25nCV9lYmNhc2MgCQkjIGViY2RpYyB0byBhc2NpaSB0YWJsZQogLkxyZXNldDouYnl0ZQkweGMzLDB4YzgsMHhjMSwweGQ1LDB4YzcsMHhjNSwweDQwLDB4ZDksMHhjNCwweGQ5LDB4NDAKIAkuYnl0ZQkweGMxLDB4ZDMsMHhkMywweDQwLDB4ZDIsMHhjNSwweGM1LDB4ZDcsMHg0MCwweGQ1LDB4ZDYKIAkuYnl0ZQkweGM4LDB4ZDYsMHhkMywweGM0CSMgImNoYW5nZSByZHIgYWxsIGtlZXAgbm9ob2xkIgpAQCAtNDE3LDEzICs0MDEsMTAgQEAKIC5zazh4ODoKIAltdmMJMCgyNDAsJXI4KSwwKCVyOSkJIyBjb3B5IGlwbHBhcm1zIGludG8gYnVmZmVyCiAuZ290cjoKLQlsCSVyMTAsLnRibAkJIyBFQkNESUMgdG8gQVNDSUkgdGFibGUKLQl0cgkwKDI0MCwlcjgpLDAoJXIxMCkKIAlzbHIJJXIwLCVyMAogCXN0CSVyMCxJTklUUkRfU0laRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjExKQogCXN0CSVyMCxJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKIAlqCXN0YXJ0dXAgCQkjIGNvbnRpbnVlIHdpdGggc3RhcnR1cAotLnRibDoJLmxvbmcJX2ViY2FzYwkJCSMgdHJhbnNsYXRlIHRhYmxlCiAuY21kOgkubG9uZwlDT01NQU5EX0xJTkUJCSMgYWRkcmVzcyBvZiBjb21tYW5kIGxpbmUgYnVmZmVyCiAucGFybToJLmxvbmcJUEFSTUFSRUEKIC5sb3djYXNlOgpAQCAtNDY3LDE2ICs0NDgsMTUgQEAKICMgb3IgbGlubG9hZCBvciBTQUxJUEwKICMKIAkub3JnCTB4MTAwMDAKLXN0YXJ0dXA6YmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCisJLmdsb2JsCXN0YXJ0dXAKK3N0YXJ0dXA6CisJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCiAuTFBHMDoKIAl4YwkweDIwMCgyNTYpLDB4MjAwCSMgcGFydGlhbGx5IGNsZWFyIGxvd2NvcmUKIAl4YwkweDMwMCgyNTYpLDB4MzAwCi0JbAklcjEsNWYtLkxQRzAoJXIxMykKLQlzdGNrCTAoJXIxKQotCXNwdAk2Zi0uTFBHMCglcjEzKQotCW12YwlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLKDgpLDAoJXIxKQotCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLDZmLS5MUEcwKCVyMTMpCi0JbXZjCV9fTENfRVhJVF9USU1FUig4KSw1Zi0uTFBHMCglcjEzKQorCXN0Y2sJX19MQ19MQVNUX1VQREFURV9DTE9DSworCXNwdAk1Zi0uTFBHMCglcjEzKQorCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLDVmLS5MUEcwKCVyMTMpCiAjaWZuZGVmIENPTkZJR19NQVJDSF9HNQogCSMgY2hlY2sgY2FwYWJpbGl0aWVzIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQogCXhjCV9fTENfU1RGTF9GQUNfTElTVCg4KSxfX0xDX1NURkxfRkFDX0xJU1QKQEAgLTQ5NCw3ICs0NzQsNiBAQAogCWNsCSVyMCwyZisxMi0uTFBHMCglcjEzKQogCWplCTNmCiAxOglsCSVyMTUsLkxzdGFjay0uTFBHMCglcjEzKQotCWFoaQklcjE1LDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikgIyBpbml0X3Rhc2tfdW5pb24rVEhSRUFEX1NJWkUKIAlhaGkJJXIxNSwtOTYKIAlsYQklcjIsLkxhbHNfc3RyaW5nLS5MUEcwKCVyMTMpCiAJbAklcjMsLkxzY2xwX3ByaW50LS5MUEcwKCVyMTMpCkBAIC01MDUsNyArNDg0LDcgQEAKIC5Mc2NscF9wcmludDoKIAkubG9uZwlfc2NscF9wcmludF9lYXJseQogLkxzdGFjazoKLQkubG9uZwlpbml0X3RocmVhZF91bmlvbgorCS5sb25nCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQogCS5hbGlnbiAxNgogMjoJLmxvbmcJMHgwMDBhMDAwMCwweDhiYWRjY2NjCiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpCkBAIC01MzIsMTMgKzUxMSwyMiBAQAogMzoKICNlbmRpZgogCisjaWZkZWYgQ09ORklHXzY0QklUCisJbXZpCV9fTENfQVJfTU9ERV9JRCwxCSMgc2V0IGVzYW1lIGZsYWcKKwlzbHIJJXIwLCVyMCAJCSMgc2V0IGNwdWlkIHRvIHplcm8KKwlsaGkJJXIxLDIJCQkjIG1vZGUgMiA9IGVzYW1lIChkdW1wKQorCXNpZ3AJJXIxLCVyMCwweDEyCQkjIHN3aXRjaCB0byBlc2FtZSBtb2RlCisJc2FtNjQJCQkJIyBzd2l0Y2ggdG8gNjQgYml0IG1vZGUKKwlqZwlzdGFydHVwX2NvbnRpbnVlCisjZWxzZQorCW12aQlfX0xDX0FSX01PREVfSUQsMAkjIHNldCBFU0EgZmxhZyAobW9kZSAwKQogCWwJJXIxMyw0Zi0uTFBHMCglcjEzKQogCWIJMCglcjEzKQotCS5hbGlnbgk0Ci00OgkubG9uZwlzdGFydHVwX2NvbnRpbnVlCi01OgkubG9uZwlzY2hlZF9jbG9ja19iYXNlX2NjCiAJLmFsaWduCTgKLTY6CS5sb25nCTB4N2ZmZmZmZmYsMHhmZmZmZmZmZgorNDoJLmxvbmcJc3RhcnR1cF9jb250aW51ZQorI2VuZGlmCisJLmFsaWduCTgKKzU6CS5sb25nCTB4N2ZmZmZmZmYsMHhmZmZmZmZmZgogCiAjCiAjIHBhcmFtcyBhdCAxMDQwMCAoc2V0dXAuaCkKQEAgLTU1Miw4ICs1NDAsNCBAQAogCS5ieXRlCSJyb290PS9kZXYvcmFtMCBybyIKIAkuYnl0ZQkwCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKLSNpbmNsdWRlICJoZWFkNjQuUyIKLSNlbHNlCi0jaW5jbHVkZSAiaGVhZDMxLlMiCi0jZW5kaWYKKwkub3JnCTB4MTEwMDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDYwMmI1MDguLjFiYmNjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCiAgKgotICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNSwyMDA2CisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA1LDIwMTAKICAqCiAgKiAgIEF1dGhvcihzKToJSGFydG11dCBQZW5uZXIgPGhwQGRlLmlibS5jb20+CiAgKgkJTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgpAQCAtMTAsMTMgKzEwLDE5IEBACiAgKgogICovCiAKLQkub3JnCTB4MTEwMDAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAorX19IRUFECisJLmdsb2JsCXN0YXJ0dXBfY29udGludWUKIHN0YXJ0dXBfY29udGludWU6CiAJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCiAuTFBHMToKIAotCW12aQlfX0xDX0FSX01PREVfSUQsMAkjIHNldCBFU0EgZmxhZyAobW9kZSAwKQorCWwJJXIxLC5MYmFzZV9jYy0uTFBHMSglcjEzKQorCW12YwkwKDgsJXIxKSxfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQpAQCAtNjksMTAgKzc1LDEyIEBACiAuTGR1YWxkOi5yZXB0CTgKIAkubG9uZwkweDgwMDAwMDAwLDAsMCwwCSMgaW52YWxpZCBhY2Nlc3MtbGlzdCBlbnRyaWVzCiAJLmVuZHIKKy5MYmFzZV9jYzoKKwkubG9uZwlzY2hlZF9jbG9ja19iYXNlX2NjCiAKLQkub3JnCTB4MTIwMDAKIAkuZ2xvYmwJX2VoZWFkCiBfZWhlYWQ6CisKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcJMHgxMDAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggZDk4NGEyYS4uMzk1ODBlNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAxOTk5LDIwMDYKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAxMAogICoKICAqICAgQXV0aG9yKHMpOglIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0xMCw4MCArMTAsMTcgQEAKICAqCiAgKi8KIAotCS5vcmcJMHgxMTAwMAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQogc3RhcnR1cF9jb250aW51ZToKLQliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKLS5MUEcxOglzbGwJJXIxMywxCQkJIyByZW1vdmUgaGlnaCBvcmRlciBiaXQKLQlzcmwJJXIxMywxCi0KLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKLQotCSMgY2hlY2sgaWYgd2UgaGF2ZSBiZWVuIGlwbGVkIHVzaW5nIHpmY3AgZHVtcDoKLQotCXRtCTB4YjksMHgwMQkJIyB0ZXN0IGlmIHN1YmNoYW5uZWwgaXMgZW5hYmxlZAotCWpubwkubm9kdW1wCQkJIyBzdWJjaGFubmVsIGRpc2FibGVkCi0JbAklcjEsMHhiOAotCWxhCSVyNSwuTGlwbF9zY2hpYi0uTFBHMSglcjEzKQotCXN0c2NoCTAoJXI1KQkJCSMgZ2V0IHNjaGliIG9mIHN1YmNoYW5uZWwKLQlqbmUJLm5vZHVtcAkJCSMgc2NoaWIgbm90IGF2YWlsYWJsZQotCXRtCTUoJXI1KSwweDAxCQkjIGRldm5vIHZhbGlkPwotCWpubwkubm9kdW1wCi0JdG0JNCglcjUpLDB4ODAJCSMgcWRpbyBjYXBhYmxlIGRldmljZT8KLQlqbm8JLm5vZHVtcAotCWwJJXIyLDIwKCVyMCkJCSMgYWRkcmVzcyBvZiBpcGwgcGFyYW1ldGVyIGJsb2NrCi0JbGhpCSVyMywwCi0JaWMJJXIzLDB4MTQ4KCVyMikJCSMgZ2V0IG9wdCBmaWVsZAotCWNoaQklcjMsMHgyMAkJIyBsb2FkIHdpdGggZHVtcD8KLQlqbmUJLm5vZHVtcAotCi0JIyBzdG9yZSBhbGwgcHJlZml4IHJlZ2lzdGVycyBpbiBjYXNlIG9mIGxvYWQgd2l0aCBkdW1wOgotCi0JbGEJJXI3LDAJCQkjIGJhc2UgcmVnaXN0ZXIgZm9yIDAgcGFnZQotCWxhCSVyOCwwCQkJIyBmaXJzdCBjcHUKLQlsCSVyMTEsLkxwcmVmX2Fycl9wdHItLkxQRzEoJXIxMykJIyBhZGRyZXNzIG9mIHByZWZpeCBhcnJheQotCWFoaQklcjExLDQJCQkjIHNraXAgYm9vdCBjcHUKLQlscgklcjEyLCVyMTEKLQlhaGkJJXIxMiwoQ09ORklHX05SX0NQVVMqNCkJIyBlbmQgb2YgcHJlZml4IGFycmF5Ci0Jc3RhcAkuTGN1cnJlbnRfY3B1KzItLkxQRzEoJXIxMykJIyBzdG9yZSBjdXJyZW50IGNwdSBhZGRyCi0xOgotCWNsCSVyOCwuTGN1cnJlbnRfY3B1LS5MUEcxKCVyMTMpCSMgaXMgaXBsIGNwdSA/Ci0JamUJNGYJCQkJIyBpZiB5ZXMgZ2V0IG5leHQgY3B1Ci0yOgotCWxyCSVyOSwlcjcKLQlzaWdwCSVyOSwlcjgsMHg5CQkjIHN0b3AgJiBzdG9yZSBzdGF0dXMgb2YgY3B1Ci0JYnJjCTgsM2YJCQkjIGFjY2VwdGVkCi0JYnJjCTQsNGYJCQkjIHN0YXR1cyBzdG9yZWQ6IG5leHQgY3B1Ci0JYnJjCTIsMmIJCQkjIGJ1c3k6IAkgdHJ5IGFnYWluCi0JYnJjCTEsNGYJCQkjIG5vdCBvcDoJIG5leHQgY3B1Ci0zOgotCW12YwkwKDQsJXIxMSksMjY0KCVyNykJIyBjb3B5IHByZWZpeCByZWdpc3RlciB0byBwcmVmaXggYXJyYXkKLQlhaGkJJXIxMSw0CQkJIyBuZXh0IGVsZW1lbnQgaW4gcHJlZml4IGFycmF5Ci0JY2xyCSVyMTEsJXIxMgotCWplCTVmCQkJIyBubyBtb3JlIHNwYWNlIGluIHByZWZpeCBhcnJheQotNDoKLQlhaGkJJXI4LDEJCQkjIG5leHQgY3B1IChyOCArPSAxKQotCWNoaQklcjgsTUFYX0NQVV9BRERSRVNTCSMgaXMgbGFzdCBwb3NzaWJsZSBjcHUgPwotCWpsZQkxYgkJCSMganVtcCBpZiBub3QgbGFzdCBjcHUKLTU6Ci0JbGhpCSVyMSwyCQkJIyBtb2RlIDIgPSBlc2FtZSAoZHVtcCkKLQlqCTZmCi0JLmFsaWduIDQKLS5MaXBsX3NjaGliOgotCS5yZXB0IDEzCi0JLmxvbmcgMAotCS5lbmRyCi0ubm9kdW1wOgotCWxoaQklcjEsMQkJCSMgbW9kZSAxID0gZXNhbWUgKG5vcm1hbCBpcGwpCi02OgotI2Vsc2UKLQlsaGkJJXIxLDEJCQkjIG1vZGUgMSA9IGVzYW1lIChub3JtYWwgaXBsKQotI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwotCW12aQlfX0xDX0FSX01PREVfSUQsMQkjIHNldCBlc2FtZSBmbGFnCi0Jc2xyCSVyMCwlcjAgCQkjIHNldCBjcHVpZCB0byB6ZXJvCi0Jc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKLQlzYW02NAkJCQkjIHN3aXRjaCB0byA2NCBiaXQgbW9kZQotCWxsZ2ZyCSVyMTMsJXIxMwkJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYgb2YgYmFzZSByZWcKKwlsYXJsCSVyMSxzY2hlZF9jbG9ja19iYXNlX2NjCisJbXZjCTAoOCwlcjEpLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKKwlsYXJsCSVyMTMsLkxQRzEJCSMgZ2V0IGJhc2UKIAlsbWgJJXIwLCVyMTUsLkx6ZXJvNjQtLkxQRzEoJXIxMykJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCkBAIC0xMDgsNiArNDUsNyBAQAogCWxwc3dlCS5MZW50cnktLkxQRzEoMTMpCSMganVtcCB0byBfc3RleHQgaW4gcHJpbWFyeS1zcGFjZSwKIAkJCQkJIyB2aXJ0dWFsIGFuZCBuZXZlciByZXR1cm4gLi4uCiAJLmFsaWduCTE2CisuTFBHMToKIC5MZW50cnk6LnF1YWQJMHgwMDAwMDAwMTgwMDAwMDAwLF9zdGV4dAogLkxjdGw6CS5xdWFkCTB4MDQzNTAwMDIJCSMgY3IwOiB2YXJpb3VzIHRoaW5ncwogCS5xdWFkCTAJCQkjIGNyMTogcHJpbWFyeSBzcGFjZSBzZWdtZW50IHRhYmxlCkBAIC0xMzAsMTIgKzY4LDYgQEAKIC5Mc2NhbjJnOi5xdWFkCTB4ODAwMDAwMDAgKyAweDIwMDAwIC0gOAkjIDJHQiArIDEyOEsgLSA4CiAuTG5vcDoJLmxvbmcJMHgwNzAwMDcwMAogLkx6ZXJvNjQ6LmZpbGwJMTYsNCwweDAKLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKLS5MY3VycmVudF9jcHU6Ci0JLmxvbmcgMHgwCi0uTHByZWZfYXJyX3B0cjoKLQkubG9uZyB6ZmNwZHVtcF9wcmVmaXhfYXJyYXkKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KIC5McGFybWFkZHI6CiAJLnF1YWQJUEFSTUFSRUEKIAkuYWxpZ24JNjQKQEAgLTE0Niw5ICs3OCw5IEBACiAJLmxvbmcJMHg4MDAwMDAwMCwwLDAsMAkjIGludmFsaWQgYWNjZXNzLWxpc3QgZW50cmllcwogCS5lbmRyCiAKLQkub3JnCTB4MTIwMDAKIAkuZ2xvYmwJX2VoZWFkCiBfZWhlYWQ6CisKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcJMHgxMDAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggNGQ3MzI5Ni4uN2VlZGJiYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX2lwbF9ydW4odm9pZCAqdW51c2VkKQogewogCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOwogCWlmIChNQUNISU5FX0lTX1ZNKQpAQCAtNTYyLDYgKzU2MiwxMSBAQAogCQlyZWlwbF9jY3dfZGV2KCZpcGxfaW5mby5kYXRhLmNjdy5kZXZfaWQpOwogfQogCitzdGF0aWMgdm9pZCBpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQoreworCXNtcF9zd2l0Y2hfdG9faXBsX2NwdShfX2lwbF9ydW4sIE5VTEwpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKQogewogCWludCByYzsKQEAgLTEwMzksNyArMTA0NCw3IEBACiAJCXNwcmludGYoZHN0ICsgcG9zLCAiIFBBUk0gJXMiLCB2bXBhcm0pOwogfQogCi1zdGF0aWMgdm9pZCByZWlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX3JlaXBsX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CiAJc3RhdGljIGNoYXIgYnVmWzEyOF07CkBAIC0xMDg3LDYgKzEwOTIsMTEgQEAKIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCitzdGF0aWMgdm9pZCByZWlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fcmVpcGxfcnVuLCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2luaXQoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYikKIHsKIAlpcGItPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfQ0NXX0xFTjsKQEAgLTEzNjksMjAgKzEzNzksMTggQEAKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpkdW1wX2tzZXQ7CiAKLXN0YXRpYyB2b2lkIGR1bXBfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQorc3RhdGljIHZvaWQgX19kdW1wX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CiAJc3RhdGljIGNoYXIgYnVmWzEwMF07CiAKIAlzd2l0Y2ggKGR1bXBfbWV0aG9kKSB7CiAJY2FzZSBEVU1QX01FVEhPRF9DQ1dfQ0lPOgotCQlzbXBfc2VuZF9zdG9wKCk7CiAJCWRldmlkLmRldm5vID0gZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubzsKIAkJZGV2aWQuc3NpZCAgPSAwOwogCQlyZWlwbF9jY3dfZGV2KCZkZXZpZCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfQ0NXX1ZNOgotCQlzbXBfc2VuZF9zdG9wKCk7CiAJCXNwcmludGYoYnVmLCAiU1RPUkUgU1RBVFVTIik7CiAJCV9fY3BjbWQoYnVmLCBOVUxMLCAwLCBOVUxMKTsKIAkJc3ByaW50ZihidWYsICJJUEwgJVgiLCBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vKTsKQEAgLTEzOTYsMTAgKzE0MDQsMTcgQEAKIAkJZGlhZzMwOChESUFHMzA4X1NFVCwgZHVtcF9ibG9ja19mY3ApOwogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwotCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiRHVtcCBmYWlsZWQhXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJaWYgKGR1bXBfbWV0aG9kID09IERVTVBfTUVUSE9EX05PTkUpCisJCXJldHVybjsKKwlzbXBfc2VuZF9zdG9wKCk7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fZHVtcF9ydW4sIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBkdW1wX2Njd19pbml0KHZvaWQpCkBAIC0xNTc3LDcgKzE1OTIsNyBAQAogc3RhdGljIGludCB2bWNtZF9pbml0KHZvaWQpCiB7CiAJaWYgKCFNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJdm1jbWRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInZtY21kIiwgTlVMTCwgZmlybXdhcmVfa29iaik7CiAJaWYgKCF2bWNtZF9rc2V0KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1OTUsNyArMTYxMCw3IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KQEAgLTE5MDIsNyArMTkxNyw2IEBACiB2b2lkIF9faW5pdCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKHZvaWQpCiB7CiAJc3RydWN0IGNpb19pcGxpbmZvIGlwbGluZm87Ci0JdW5zaWduZWQgaW50ICppcGxfcHRyOwogCXZvaWQgKnNyYywgKmRzdDsKIAogCWlmIChjaW9fZ2V0X2lwbGluZm8oJmlwbGluZm8pKQpAQCAtMTkxMywxMSArMTkyNywxMCBAQAogCWlmICghaXBsaW5mby5pc19xZGlvKQogCQlyZXR1cm47CiAJaXBsX2ZsYWdzIHw9IElQTF9QQVJNQkxPQ0tfVkFMSUQ7Ci0JaXBsX3B0ciA9ICh1bnNpZ25lZCBpbnQgKilfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSOwotCXNyYyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKmlwbF9wdHI7CisJc3JjID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHI7CiAJZHN0ID0gKHZvaWQgKilJUExfUEFSTUJMT0NLX09SSUdJTjsKIAltZW1tb3ZlKGRzdCwgc3JjLCBQQUdFX1NJWkUpOwotCSppcGxfcHRyID0gSVBMX1BBUk1CTE9DS19PUklHSU47CisJUzM5MF9sb3djb3JlLmlwbF9wYXJtYmxvY2tfcHRyID0gSVBMX1BBUk1CTE9DS19PUklHSU47CiB9CiAKIHN0YXRpYyBMSVNUX0hFQUQocmNhbGwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCAxMzFkN2VlLi5hOTIyZDUxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtNTQsMTEgKzU0LDExIEBACiB7CiB9CiAKLXZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3N0YXRpYyB2b2lkIF9fbWFjaGluZV9rZXhlYyh2b2lkICpkYXRhKQogewogCXJlbG9jYXRlX2tlcm5lbF90IGRhdGFfbW92ZXI7CisJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBkYXRhOwogCi0Jc21wX3NlbmRfc3RvcCgpOwogCXBmYXVsdF9maW5pKCk7CiAJczM5MF9yZXNldF9zeXN0ZW0oKTsKIApAQCAtNjgsMyArNjgsOSBAQAogCSgqZGF0YV9tb3ZlcikoJmltYWdlLT5oZWFkLCBpbWFnZS0+c3RhcnQpOwogCWZvciAoOzspOwogfQorCit2b2lkIG1hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit7CisJc21wX3NlbmRfc3RvcCgpOworCXNtcF9zd2l0Y2hfdG9faXBsX2NwdShfX21hY2hpbmVfa2V4ZWMsIGltYWdlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDdjZjQ2NDIuLjMzZmRjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTkyLDMgKzk5Miw2MSBAQAogI2VuZGlmCiAJcmV0dXJuICZ1c2VyX3MzOTBfdmlldzsKIH0KKworc3RhdGljIGNvbnN0IGNoYXIgKmdwcl9uYW1lc1tOVU1fR1BSU10gPSB7CisJInIwIiwgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAicjYiLCAgInI3IiwKKwkicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiLAorfTsKKwordW5zaWduZWQgbG9uZyByZWdzX2dldF9yZWdpc3RlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVncy0+Z3Byc1tvZmZzZXRdOworfQorCitpbnQgcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCWlmICghbmFtZSB8fCAqbmFtZSAhPSAncicpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzdHJpY3Rfc3RydG91bChuYW1lICsgMSwgMTAsICZvZmZzZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gb2Zmc2V0OworfQorCitjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gZ3ByX25hbWVzW29mZnNldF07Cit9CisKK3N0YXRpYyBpbnQgcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBrc3AgPSBrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKTsKKworCXJldHVybiAoYWRkciAmIH4oVEhSRUFEX1NJWkUgLSAxKSkgPT0gKGtzcCAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7Cit9CisKKy8qKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIC0gZ2V0IE50aCBlbnRyeSBvZiB0aGUgc3RhY2sKKyAqIEByZWdzOnB0X3JlZ3Mgd2hpY2ggY29udGFpbnMga2VybmVsIHN0YWNrIHBvaW50ZXIuCisgKiBAbjpzdGFjayBlbnRyeSBudW1iZXIuCisgKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIHJldHVybnMgQG4gdGggZW50cnkgb2YgdGhlIGtlcm5lbCBzdGFjayB3aGljaAorICogaXMgc3BlY2lmaW5lZCBieSBAcmVncy4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUga2VybmVsIHN0YWNrLAorICogdGhpcyByZXR1cm5zIDAuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpICsgbiAqIHNpemVvZihsb25nKTsKKwlpZiAoIXJlZ3Nfd2l0aGluX2tlcm5lbF9zdGFjayhyZWdzLCBhZGRyKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWFkZHI7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKaW5kZXggMmY0ODFjYy4uY2I4OTlkOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKQEAgLTYsNyArNiw3IEBACiAgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKICAqLwogCi0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogIwogIyBkb19yZWlwbF9hc20KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggNzc0MTQ3OC4uNWU3M2RlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTQsNyArNCw3IEBACiAgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICMKICMgZG9fcmVpcGxfYXNtCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCmluZGV4IGUyN2NhNjMuLjI3YWYzYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCkBAIC05LDggKzksMTAgQEAKICAqLwogCiBMQ19FWFRfTkVXX1BTVwkJPSAweDU4CQkJIyBhZGRyIG9mIGV4dCBpbnQgaGFuZGxlcgorTENfRVhUX05FV19QU1dfNjQJPSAweDFiMAkJCSMgYWRkciBvZiBleHQgaW50IGhhbmRsZXIgNjQgYml0CiBMQ19FWFRfSU5UX1BBUkFNCT0gMHg4MAkJCSMgYWRkciBvZiBleHQgaW50IHBhcmFtZXRlcgogTENfRVhUX0lOVF9DT0RFCQk9IDB4ODYJCQkjIGFkZHIgb2YgZXh0IGludCBjb2RlCitMQ19BUl9NT0RFX0lECQk9IDB4YTMKIAogIwogIyBTdWJyb3V0aW5lIHdoaWNoIHdhaXRzIHN5bmNocm9ub3VzbHkgdW50aWwgZWl0aGVyIGFuIGV4dGVybmFsIGludGVycnVwdGlvbgpAQCAtMzAsOCArMzIsMTYgQEAKIC5MYmFzZVMxOgogCWFoaQklcjE1LC05NgkJCSMgY3JlYXRlIHN0YWNrIGZyYW1lCiAJbGEJJXI4LExDX0VYVF9ORVdfUFNXCQkjIHJlZ2lzdGVyIGludCBoYW5kbGVyCi0JbXZjCS5Mb2xkcHN3UzEtLkxiYXNlUzEoOCwlcjEzKSwwKCVyOCkKLQltdmMJMCg4LCVyOCksLkxleHRwc3dTMS0uTGJhc2VTMSglcjEzKQorCWxhCSVyOSwuTGV4dHBzd1MxLS5MYmFzZVMxKCVyMTMpCisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMQorCWxhCSVyOCxMQ19FWFRfTkVXX1BTV182NAkJIyByZWdpc3RlciBpbnQgaGFuZGxlciA2NCBiaXQKKwlsYQklcjksLkxleHRwc3dTMV82NC0uTGJhc2VTMSglcjEzKQorLkxlc2ExOgorI2VuZGlmCisJbXZjCS5Mb2xkcHN3UzEtLkxiYXNlUzEoMTYsJXIxMyksMCglcjgpCisJbXZjCTAoMTYsJXI4KSwwKCVyOSkKIAlsaGkJJXI2LDB4MDIwMAkJCSMgY3IgbWFzayBmb3IgZXh0IGludCAoY3IwLjU0KQogCWx0cgklcjIsJXIyCiAJanoJLkxzZXRjdFMxCkBAIC02NCwxNSArNzQsMTkgQEAKIC5MdGltZW91dFMxOgogCWxjdGwJJWMwLCVjMCwuTGN0bFMxLS5MYmFzZVMxKCVyMTMpCSMgcmVzdG9yZSBpbnRlcnJ1cHQgc2V0dGluZwogCSMgcmVzdG9yZSBvbGQgaGFuZGxlcgotCW12YwkwKDgsJXI4KSwuTG9sZHBzd1MxLS5MYmFzZVMxKCVyMTMpCisJbXZjCTAoMTYsJXI4KSwuTG9sZHBzd1MxLS5MYmFzZVMxKCVyMTMpCiAJbG0JJXI2LCVyMTUsMTIwKCVyMTUpCQkjIHJlc3RvcmUgcmVnaXN0ZXJzCiAJYnIJJXIxNAkJCQkjIHJldHVybiB0byBjYWxsZXIKIAogCS5hbGlnbgk4CiAuTG9sZHBzd1MxOgotCS5sb25nCTAsIDAJCQkJIyBvbGQgZXh0IGludCBQU1cKKwkubG9uZwkwLCAwLCAwLCAwCQkJIyBvbGQgZXh0IGludCBQU1cKIC5MZXh0cHN3UzE6CiAJLmxvbmcJMHgwMDA4MDAwMCwgMHg4MDAwMDAwMCsuTHdhaXRTMQkjIFBTVyB0byBoYW5kbGUgZXh0IGludAorI2lmZGVmIENPTkZJR182NEJJVAorLkxleHRwc3dTMV82NDoKKwkucXVhZAkweDAwMDAwMDAxODAwMDAwMDAsIC5Md2FpdFMxCSMgUFNXIHRvIGhhbmRsZSBleHQgaW50LCA2NCBiaXQKKyNlbmRpZgogLkx3YWl0cHN3UzE6CiAJLmxvbmcJMHgwMTBhMDAwMCwgMHgwMDAwMDAwMCsuTGxvb3BTMQkjIFBTVyB0byB3YWl0IGZvciBleHQgaW50CiAuTHRpbWVTMToKQEAgLTI1MCw2ICsyNjQsMTMgQEAKIF9zY2xwX3ByaW50X2Vhcmx5OgogCXN0bQklcjYsJXIxNSwyNCglcjE1KQkJIyBzYXZlIHJlZ2lzdGVycwogCWFoaQklcjE1LC05NgkJCSMgY3JlYXRlIHN0YWNrIGZyYW1lCisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMgorCWFoaQklcjE1LC04MAorCXN0bWgJJXI2LCVyMTUsOTYoJXIxNSkJCSMgc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCisuTGVzYTI6CisjZW5kaWYKIAlscgklcjEwLCVyMgkJCSMgc2F2ZSBzdHJpbmcgcG9pbnRlcgogCWxoaQklcjIsMAogCWJyYXMJJXIxNCxfc2NscF9zZXR1cAkJIyBlbmFibGUgY29uc29sZQpAQCAtMjYyLDYgKzI4MywxMyBAQAogCWxoaQklcjIsMQogCWJyYXMJJXIxNCxfc2NscF9zZXR1cAkJIyBkaXNhYmxlIGNvbnNvbGUKIC5MZW5kUzU6CisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMworCWxtaAklcjYsJXIxNSw5NiglcjE1KQkJIyBzdG9yZSB1cHBlciByZWdpc3RlciBoYWx2ZXMKKwlhaGkJJXIxNSw4MAorLkxlc2EzOgorI2VuZGlmCiAJbG0JJXI2LCVyMTUsMTIwKCVyMTUpCQkjIHJlc3RvcmUgcmVnaXN0ZXJzCiAJYnIJJXIxNAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggOGQ4OTU3Yi4uNzdhNjNhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMzk2LDE1ICszOTYsMTIgQEAKIHNldHVwX2xvd2NvcmUodm9pZCkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxjOwotCWludCBsY19wYWdlczsKIAogCS8qCiAJICogU2V0dXAgbG93Y29yZSBmb3IgYm9vdCBjcHUKIAkgKi8KLQlsY19wYWdlcyA9IHNpemVvZih2b2lkICopID09IDggPyAyIDogMTsKLQlsYyA9IChzdHJ1Y3QgX2xvd2NvcmUgKikKLQkJX19hbGxvY19ib290bWVtKGxjX3BhZ2VzICogUEFHRV9TSVpFLCBsY19wYWdlcyAqIFBBR0VfU0laRSwgMCk7Ci0JbWVtc2V0KGxjLCAwLCBsY19wYWdlcyAqIFBBR0VfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgX2xvd2NvcmUpICE9IExDX1BBR0VTICogNDA5Nik7CisJbGMgPSBfX2FsbG9jX2Jvb3RtZW0oTENfUEFHRVMgKiBQQUdFX1NJWkUsIExDX1BBR0VTICogUEFHRV9TSVpFLCAwKTsKIAlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CiAJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPQogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSByZXN0YXJ0X2ludF9oYW5kbGVyOwpAQCAtODA0LDcgKzgwMSw3IEBACiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCXByX2luZm8oIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNICIKIAkJCSJndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGluIDMxLWJpdCBtb2RlXG4iKTsKLQllbHNlCisJZWxzZSBpZiAoTUFDSElORV9JU19MUEFSKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIG5hdGl2ZWx5IGluIDMxLWJpdCBtb2RlXG4iKTsKIAlpZiAoTUFDSElORV9IQVNfSUVFRSkKIAkJcHJfaW5mbygiVGhlIGhhcmR3YXJlIHN5c3RlbSBoYXMgSUVFRSBjb21wYXRpYmxlICIKQEAgLTgxOCw3ICs4MTUsNyBAQAogCQkJImd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaW4gNjQtYml0IG1vZGVcbiIpOwogCWVsc2UgaWYgKE1BQ0hJTkVfSVNfS1ZNKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIHVuZGVyIEtWTSBpbiA2NC1iaXQgbW9kZVxuIik7Ci0JZWxzZQorCWVsc2UgaWYgKE1BQ0hJTkVfSVNfTFBBUikKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyBuYXRpdmVseSBpbiA2NC1iaXQgbW9kZVxuIik7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDc2YTZmZGQuLjhiMTAxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2lncC5oPgpAQCAtNTMsNyArNTQsNyBAQAogI2luY2x1ZGUgImVudHJ5LmgiCiAKIC8qIGxvZ2ljYWwgY3B1IHRvIGNwdSBhZGRyZXNzICovCi1pbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107Cit1bnNpZ25lZCBzaG9ydCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKQEAgLTcyLDEzICs3MywxMyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwogCi1zdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50LCBlY19iaXRfc2lnKTsKK3N0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQsIGludCk7CiAKLXN0YXRpYyBpbnQgY3B1X3N0b3BwZWQoaW50IGNwdSkKK3N0YXRpYyBpbnQgcmF3X2NwdV9zdG9wcGVkKGludCBjcHUpCiB7Ci0JX191MzIgc3RhdHVzOworCXUzMiBzdGF0dXM7CiAKLQlzd2l0Y2ggKHNpZ25hbF9wcm9jZXNzb3JfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgeworCXN3aXRjaCAocmF3X3NpZ3BfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgewogCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgogCQkvKiBDaGVjayBmb3Igc3RvcHBlZCBhbmQgY2hlY2sgc3RvcCBzdGF0ZSAqLwogCQlpZiAoc3RhdHVzICYgMHg1MCkKQEAgLTkwLDYgKzkxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCit7CisJcmV0dXJuIHJhd19jcHVfc3RvcHBlZChjcHVfbG9naWNhbF9tYXAoY3B1KSk7Cit9CisKK3ZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBfbG93Y29yZSAqbGMsICpjdXJyZW50X2xjOworCXN0cnVjdCBzdGFja19mcmFtZSAqc2Y7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJdW5zaWduZWQgbG9uZyBzcDsKKworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKKwkJZnVuYyhkYXRhKTsKKwlfX2xvYWRfcHN3X21hc2soUFNXX0JBU0VfQklUUyB8IFBTV19ERUZBVUxUX0tFWSk7CisJLyogRGlzYWJsZSBsb3djb3JlIHByb3RlY3Rpb24gKi8KKwlfX2N0bF9jbGVhcl9iaXQoMCwgMjgpOworCWN1cnJlbnRfbGMgPSBsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldOworCWxjID0gbG93Y29yZV9wdHJbMF07CisJaWYgKCFsYykKKwkJbGMgPSBjdXJyZW50X2xjOworCWxjLT5yZXN0YXJ0X3Bzdy5tYXNrID0gUFNXX0JBU0VfQklUUyB8IFBTV19ERUZBVUxUX0tFWTsKKwlsYy0+cmVzdGFydF9wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIHNtcF9yZXN0YXJ0X2NwdTsKKwlpZiAoIWNwdV9vbmxpbmUoMCkpCisJCXNtcF9zd2l0Y2hfdG9fY3B1KGZ1bmMsIGRhdGEsIDAsIHN0YXAoKSwgX19jcHVfbG9naWNhbF9tYXBbMF0pOworCXdoaWxlIChzaWdwKDAsIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PSBzaWdwX2J1c3kpCisJCWNwdV9yZWxheCgpOworCXNwID0gbGMtPnBhbmljX3N0YWNrOworCXNwIC09IHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CisJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSBzcDsKKwltZW1jcHkoJnJlZ3MtPmdwcnMsICZjdXJyZW50X2xjLT5ncHJlZ3Nfc2F2ZV9hcmVhLCBzaXplb2YocmVncy0+Z3BycykpOworCXJlZ3MtPnBzdyA9IGxjLT5wc3dfc2F2ZV9hcmVhOworCXNwIC09IFNUQUNLX0ZSQU1FX09WRVJIRUFEOworCXNmID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKSBzcDsKKwlzZi0+YmFja19jaGFpbiA9IHJlZ3MtPmdwcnNbMTVdOworCXNtcF9zd2l0Y2hfdG9fY3B1KGZ1bmMsIGRhdGEsIHNwLCBzdGFwKCksIF9fY3B1X2xvZ2ljYWxfbWFwWzBdKTsKK30KKwogdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpCiB7CiAJaW50IGNwdSwgcmM7CkBAIC0xMDMsNyArMTQyLDcgQEAKIAkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCQljb250aW51ZTsKIAkJZG8gewotCQkJcmMgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9zdG9wKTsKKwkJCXJjID0gc2lncChjcHUsIHNpZ3Bfc3RvcCk7CiAJCX0gd2hpbGUgKHJjID09IHNpZ3BfYnVzeSk7CiAKIAkJd2hpbGUgKCFjcHVfc3RvcHBlZChjcHUpKQpAQCAtMTM5LDEzICsxNzgsMTMgQEAKICAqIFNlbmQgYW4gZXh0ZXJuYWwgY2FsbCBzaWdwIHRvIGFub3RoZXIgY3B1IGFuZCByZXR1cm4gd2l0aG91dCB3YWl0aW5nCiAgKiBmb3IgaXRzIGNvbXBsZXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQgY3B1LCBlY19iaXRfc2lnIHNpZykKK3N0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQgY3B1LCBpbnQgc2lnKQogewogCS8qCiAJICogU2V0IHNpZ25hbGluZyBiaXQgaW4gbG93Y29yZSBvZiB0YXJnZXQgY3B1IGFuZCBraWNrIGl0CiAJICovCiAJc2V0X2JpdChzaWcsICh1bnNpZ25lZCBsb25nICopICZsb3djb3JlX3B0cltjcHVdLT5leHRfY2FsbF9mYXN0KTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfZW1lcmdlbmN5X3NpZ25hbCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKGNwdSwgc2lncF9lbWVyZ2VuY3lfc2lnbmFsKSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiB9CiAKQEAgLTIzOSwyNCArMjc4LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woc21wX2N0bF9jbGVhcl9iaXQpOwogCi0vKgotICogSW4gZWFybHkgaXBsIHN0YXRlIGEgdGVtcC4gbG9naWNhbGx5IGNwdSBudW1iZXIgaXMgbmVlZGVkLCBzbyB0aGUgc2lncAotICogZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIHNlbnNlIG90aGVyIGNwdXMuIFNpbmNlIE5SX0NQVVMgaXMgPj0gMiBvbgotICogQ09ORklHX1NNUCBhbmQgdGhlIGlwbCBjcHUgaXMgbG9naWNhbCBjcHUgMCwgaXQgbXVzdCBiZSAxLgotICovCi0jZGVmaW5lIENQVV9JTklUX05PCTEKLQogI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCi0vKgotICogemZjcGR1bXBfcHJlZml4X2FycmF5IGhvbGRzIHByZWZpeCByZWdpc3RlcnMgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86Ci0gKiA2NCBiaXQgemZjcGR1bXAga2VybmVsIGFuZCAzMSBiaXQga2VybmVsIHdoaWNoIGlzIHRvIGJlIGR1bXBlZC4gV2UgaGF2ZSB0bwotICogc2F2ZSBpdHMgcHJlZml4IHJlZ2lzdGVycywgc2luY2UgdGhleSBnZXQgbG9zdCwgd2hlbiBzd2l0Y2hpbmcgZnJvbSAzMSBiaXQKLSAqIHRvIDY0IGJpdC4KLSAqLwotdW5zaWduZWQgaW50IHpmY3BkdW1wX3ByZWZpeF9hcnJheVtOUl9DUFVTICsgMV0gXAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSk7Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkKIHsKIAlpZiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1BfRFVNUCkKQEAgLTI2NiwyMSArMjg5LDE1IEBACiAJCQkgICAidGhlIGR1bXBcbiIsIGNwdSwgTlJfQ1BVUyAtIDEpOwogCQlyZXR1cm47CiAJfQotCXpmY3BkdW1wX3NhdmVfYXJlYXNbY3B1XSA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIHNhdmVfYXJlYSksIEdGUF9LRVJORUwpOwotCV9fY3B1X2xvZ2ljYWxfbWFwW0NQVV9JTklUX05PXSA9IChfX3UxNikgcGh5X2NwdTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihDUFVfSU5JVF9OTywgc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMpID09Ci0JICAgICAgIHNpZ3BfYnVzeSkKKwl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhKSwgR0ZQX0tFUk5FTCk7CisJd2hpbGUgKHJhd19zaWdwKHBoeV9jcHUsIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCW1lbWNweSh6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0sCiAJICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIHN0b3JlX3ByZWZpeCgpICsgU0FWRV9BUkVBX0JBU0UsCi0JICAgICAgIFNBVkVfQVJFQV9TSVpFKTsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkvKiBjb3B5IG9yaWdpbmFsIHByZWZpeCByZWdpc3RlciAqLwotCXpmY3BkdW1wX3NhdmVfYXJlYXNbY3B1XS0+czM5MHgucHJlZl9yZWcgPSB6ZmNwZHVtcF9wcmVmaXhfYXJyYXlbY3B1XTsKLSNlbmRpZgorCSAgICAgICBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYSkpOwogfQogCi11bmlvbiBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworc3RydWN0IHNhdmVfYXJlYSAqemZjcGR1bXBfc2F2ZV9hcmVhc1tOUl9DUFVTICsgMV07CiBFWFBPUlRfU1lNQk9MX0dQTCh6ZmNwZHVtcF9zYXZlX2FyZWFzKTsKIAogI2Vsc2UKQEAgLTM4OSw4ICs0MDYsNyBAQAogCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBNQVhfQ1BVX0FERFJFU1M7IGNwdSsrKSB7CiAJCQlpZiAoY3B1ID09IGJvb3RfY3B1X2FkZHIpCiAJCQkJY29udGludWU7Ci0JCQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSBjcHU7Ci0JCQlpZiAoIWNwdV9zdG9wcGVkKENQVV9JTklUX05PKSkKKwkJCWlmICghcmF3X2NwdV9zdG9wcGVkKGNwdSkpCiAJCQkJY29udGludWU7CiAJCQlzbXBfZ2V0X3NhdmVfYXJlYShjX2NwdXMsIGNwdSk7CiAJCQljX2NwdXMrKzsKQEAgLTQxMyw4ICs0MjksNyBAQAogCQljcHVfYWRkciA9IGluZm8tPmNwdVtjcHVdLmFkZHJlc3M7CiAJCWlmIChjcHVfYWRkciA9PSBib290X2NwdV9hZGRyKQogCQkJY29udGludWU7Ci0JCV9fY3B1X2xvZ2ljYWxfbWFwW0NQVV9JTklUX05PXSA9IGNwdV9hZGRyOwotCQlpZiAoIWNwdV9zdG9wcGVkKENQVV9JTklUX05PKSkgeworCQlpZiAoIXJhd19jcHVfc3RvcHBlZChjcHVfYWRkcikpIHsKIAkJCXNfY3B1cysrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUzMywxOCArNTQ4LDE4IEBACiAvKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqLwogaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmNwdV9sb3djb3JlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKIAlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKnNmOwotCXNpZ3BfY2NvZGUgY2NvZGU7CiAJdTMyIGxvd2NvcmU7CisJaW50IGNjb2RlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKLQkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWNjb2RlID0gc2lncChjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOwogCQlpZiAoY2NvZGUgPT0gc2lncF9idXN5KQogCQkJdWRlbGF5KDEwKTsKIAkJaWYgKGNjb2RlID09IHNpZ3Bfbm90X29wZXJhdGlvbmFsKQpAQCAtNTUyLDcgKzU2Nyw3IEBACiAJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAogCWxvd2NvcmUgPSAodTMyKSh1bnNpZ25lZCBsb25nKWxvd2NvcmVfcHRyW2NwdV07Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcChsb3djb3JlLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwX3AobG93Y29yZSwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKIAkJdWRlbGF5KDEwKTsKIAogCWlkbGUgPSBjdXJyZW50X3NldFtjcHVdOwpAQCAtNTc4LDcgKzU5Myw3IEBACiAJY3B1X2xvd2NvcmUtPmZ0cmFjZV9mdW5jID0gUzM5MF9sb3djb3JlLmZ0cmFjZV9mdW5jOwogCWVpZWlvKCk7CiAKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiAKIAl3aGlsZSAoIWNwdV9vbmxpbmUoY3B1KSkKQEAgLTY0MCw3ICs2NTUsNyBAQAogCS8qIFdhaXQgdW50aWwgdGFyZ2V0IGNwdSBpcyBkb3duICovCiAJd2hpbGUgKCFjcHVfc3RvcHBlZChjcHUpKQogCQljcHVfcmVsYXgoKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKDAsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJd2hpbGUgKHNpZ3BfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKIAlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RvcHBlZFxuIiwgY3B1KTsKQEAgLTY0OSw3ICs2NjQsNyBAQAogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWRsZV90YXNrX2V4aXQoKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCWZvciAoOzspOwogfQpAQCAtNzY1LDcgKzc4MCw4IEBACiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfbG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CiAJcmMgPSAtRUJVU1k7Ci0JaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkvKiBkaXNhbGxvdyBjb25maWd1cmF0aW9uIGNoYW5nZXMgb2Ygb25saW5lIGNwdXMgYW5kIGNwdSAwICovCisJaWYgKGNwdV9vbmxpbmUoY3B1KSB8fCBjcHUgPT0gMCkKIAkJZ290byBvdXQ7CiAJcmMgPSAwOwogCXN3aXRjaCAodmFsKSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWYxMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIDMxLWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKKwlscgklcjEsJXIxNQorCWFoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0CSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCXN0bQklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNixfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBkZXN0aW5hdGlvbiBDUFUgKi8KKwlicmMJMiwxYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMjoJc2lncAklcjAsJXI1LF9fU0lHUF9TVE9QCS8qIHN0b3AgY3VycmVudCBDUFUgKi8KKwlicmMJMiwyYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMzoJagkzYgorCisJLmdsb2JsCXNtcF9yZXN0YXJ0X2NwdQorc21wX3Jlc3RhcnRfY3B1OgorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCWxtCSVyMCwlcjE1LDAoJXIxKQorMToJc2lncAklcjAsJXI1LF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciBjYWxsaW5nIENQVSAqLworCWJyYwkxMCwxYgkJCS8qIGJ1c3ksIGFjY2VwdGVkIChzdGF0dXMgMCksIHJ1bm5pbmcgKi8KKwl0bWxsCSVyMCwweDQwCQkvKiBUZXN0IGlmIGNhbGxpbmcgQ1BVIGlzIHN0b3BwZWQgKi8KKwlqegkxYgorCWx0cgklcjQsJXI0CQkJLyogTmV3IHN0YWNrID8gKi8KKwlqegkxZgorCWxyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKy5ncHJyZWdzX2FkZHI6CisJLmxvbmcJLmdwcnJlZ3MKKworCS5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCisuZ3BycmVnczoKKwkucmVwdAkxNgorCS5sb25nCTAKKwkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0YWFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIDY0LWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bWcJJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKKwlsYXJsCSVyMSwuZ3BycmVncworCXN0bWcJJXIwLCVyMTUsMCglcjEpCisxOglzaWdwCSVyMCwlcjYsX19TSUdQX1JFU1RBUlQJLyogc3RhcnQgZGVzdGluYXRpb24gQ1BVICovCisJYnJjCTIsMWIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzI6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU1RPUAkvKiBzdG9wIGN1cnJlbnQgQ1BVICovCisJYnJjCTIsMmIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzM6CWoJM2IKKworCS5nbG9ibAlzbXBfcmVzdGFydF9jcHUKK3NtcF9yZXN0YXJ0X2NwdToKKwlsYXJsCSVyMSwuZ3BycmVncworCWxtZwklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU0VOU0UJLyogV2FpdCBmb3IgY2FsbGluZyBDUFUgKi8KKwlicmMJMTAsMWIJCQkvKiBidXN5LCBhY2NlcHRlZCAoc3RhdHVzIDApLCBydW5uaW5nICovCisJdG1sbAklcjAsMHg0MAkJLyogVGVzdCBpZiBjYWxsaW5nIENQVSBpcyBzdG9wcGVkICovCisJanoJMWIKKwlsdGdyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLworCWp6CTFmCisJbGdyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cworLmdwcnJlZ3M6CisJLnJlcHQJMTYKKwkucXVhZAkwCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IDBjMjZjYzEuLmIzNTQ0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJY2dyCSVyMSwlcjIKIAlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCiAJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KLQltdmMJX19MQ19SRVNUQVJUX1BTVygxNiwlcjApLDAoJXI0KQorCW12YwlfX0xDX1JTVF9ORVdfUFNXKDE2LCVyMCksMCglcjQpCiAzOgogCXNpZ3AJJXI5LCVyMSxfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQKIAlicmMJOCw0ZgkvKiBhY2NlcHRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCA2NTA2NWFjLi5hOGY5M2YxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtNTEsMTQgKzUxLDYgQEAKICNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZICAgICAoKHVuc2lnbmVkIGxvbmcpIDEwMDAwMDAvSFopCiAjZGVmaW5lIENMS19USUNLU19QRVJfSklGRlkgKCh1bnNpZ25lZCBsb25nKSBVU0VDU19QRVJfSklGRlkgPDwgMTIpCiAKLS8qCi0gKiBDcmVhdGUgYSBzbWFsbCB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZXIgaW50ZXJydXB0cwotICogb24gdGhlIGRpZmZlcmVudCBjcHVzIHRvIGF2b2lkIGxvY2sgY29udGVudGlvbi4KLSAqLwotI2RlZmluZSBDUFVfREVWSUFUSU9OICAgICAgIChzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMTIpCi0KLSNkZWZpbmUgVElDS19TSVpFIHRpY2sKLQogdTY0IHNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSAtMTsJLyogRm9yY2UgdG8gZGF0YSBzZWN0aW9uLiAqLwogRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfYmFzZV9jYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNWY5OWU2Ni4uNmJjOWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL0tjb25maWcgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKaW5kZXggNmVlNTVhZS4uYTcyNTE1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwpAQCAtMzUsNiArMzUsNyBAQAogCiAjIE9LLCBpdCdzIGEgbGl0dGxlIGNvdW50ZXItaW50dWl0aXZlIHRvIGRvIHRoaXMsIGJ1dCBpdCBwdXRzIGl0IG5lYXRseSB1bmRlcgogIyB0aGUgdmlydHVhbGl6YXRpb24gbWVudS4KK3NvdXJjZSBkcml2ZXJzL3Zob3N0L0tjb25maWcKIHNvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCiAKIGVuZGlmICMgVklSVFVBTElaQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGlhZy5jIGIvYXJjaC9zMzkwL2t2bS9kaWFnLmMKaW5kZXggODMwMDMwOS4uOWU0Yzg0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9kaWFnLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJdmNwdS0+cnVuLT5zMzkwX3Jlc2V0X2ZsYWdzID0gMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWF0b21pY19jbGVhcl9tYXNrKENQVVNUQVRfUlVOTklORywgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CkBAIC02Miw2ICs2Miw2IEBACiAJY2FzZSAweDMwODoKIAkJcmV0dXJuIF9fZGlhZ19pcGxfZnVuY3Rpb25zKHZjcHUpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCBiNDAwOTY0Li4zZGRjMzA4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fbGN0bGcrKzsKIAlpZiAoKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGIgJiAweGZmKSAhPSAweDJmKQotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAl1c2VyYWRkciA9IGRpc3AyOwogCWlmIChiYXNlMikKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlyYyA9IF9fa3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXModmNwdSwKIAkJCQkJCSAgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX05PQUREUik7CiAJCWlmIChyYyA+PSAwKQotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KIAogCWlmICh2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmIEFDVElPTl9SRUxPQURWQ1BVX09OX1NUT1ApIHsKQEAgLTE1MCw3ICsxNTAsNyBAQAogCWlmICh2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmIEFDVElPTl9TVE9QX09OX1NUT1ApIHsKIAkJdmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJj0gfkFDVElPTl9TVE9QX09OX1NUT1A7CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgImNwdSBzdG9wcGVkIik7Ci0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ2Y3B1LT5hcmNoLmxvY2FsX2ludC5sb2NrKTsKQEAgLTE3MSw5ICsxNzEsOSBAQAogCQkJIDIqUEFHRV9TSVpFKTsKIAkJaWYgKHJjKQogCQkJLyogdXNlciB3aWxsIHJlY2VpdmUgc2lnc2VndiwgZXhpdCB0byB1c2VyICovCi0JCQlyYyA9IC1FTk9UU1VQUDsKKwkJCXJjID0gLUVPUE5PVFNVUFA7CiAJfSBlbHNlCi0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCiAJaWYgKHJjKQogCQlWQ1BVX0VWRU5UKHZjcHUsIDIsICJ1bmhhbmRsZWQgdmFsaWRpdHkgaW50ZXJjZXB0IGNvZGUgJWQiLApAQCAtMTg5LDcgKzE4OSw3IEBACiAJaGFuZGxlciA9IGluc3RydWN0aW9uX2hhbmRsZXJzW3ZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgPj4gOF07CiAJaWYgKGhhbmRsZXIpCiAJCXJldHVybiBoYW5kbGVyKHZjcHUpOwotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9wcm9nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTIwNiw3ICsyMDYsNyBAQAogCXJjID0gaGFuZGxlX2luc3RydWN0aW9uKHZjcHUpOwogCXJjMiA9IGhhbmRsZV9wcm9nKHZjcHUpOwogCi0JaWYgKHJjID09IC1FTk9UU1VQUCkKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFApCiAJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZSA9IDB4MDQ7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0yMzEsOSArMjMxLDkgQEAKIAl1OCBjb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmljcHRjb2RlOwogCiAJaWYgKGNvZGUgJiAzIHx8IChjb2RlID4+IDIpID49IEFSUkFZX1NJWkUoaW50ZXJjZXB0X2Z1bmNzKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWZ1bmMgPSBpbnRlcmNlcHRfZnVuY3NbY29kZSA+PiAyXTsKIAlpZiAoZnVuYykKIAkJcmV0dXJuIGZ1bmModmNwdSk7Ci0JcmV0dXJuIC1FTk9UU1VQUDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA0MzQ4NmMyLi44MzQ3NzRkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTEwLDEyICsxMCwxMiBAQAogICogICAgQXV0aG9yKHMpOiBDYXJzdGVuIE90dGUgPGNvdHRlQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJrdm0tczM5MC5oIgogI2luY2x1ZGUgImdhY2Nlc3MuaCIKIApAQCAtMTg3LDggKzE4Nyw4IEBACiAJCWlmIChyYyA9PSAtRUZBVUxUKQogCQkJZXhjZXB0aW9uID0gMTsKIAotCQlyYyA9IHB1dF9ndWVzdF91NjQodmNwdSwgX19MQ19QRkFVTFRfSU5UUEFSTSwKLQkJCWludGktPmV4dC5leHRfcGFyYW1zMik7CisJCXJjID0gcHV0X2d1ZXN0X3U2NCh2Y3B1LCBfX0xDX0VYVF9QQVJBTVMyLAorCQkJCSAgIGludGktPmV4dC5leHRfcGFyYW1zMik7CiAJCWlmIChyYyA9PSAtRUZBVUxUKQogCQkJZXhjZXB0aW9uID0gMTsKIAkJYnJlYWs7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlpZiAocHN3X2ludGVycnVwdHNfZGlzYWJsZWQodmNwdSkpIHsKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiJXMiLCAiZGlzYWJsZWQgd2FpdCIpOwogCQlfX3Vuc2V0X2NwdV9pZGxlKHZjcHUpOwotCQlyZXR1cm4gLUVOT1RTVVBQOyAvKiBkaXNhYmxlZCB3YWl0ICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsgLyogZGlzYWJsZWQgd2FpdCAqLwogCX0KIAogCWlmIChwc3dfZXh0aW50X2Rpc2FibGVkKHZjcHUpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggZjhiY2FlZi4uM2ZhMGExMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CkBAIC01NDMsNyArNTQ0LDcgQEAKIAkJcmMgPSAtRUlOVFI7CiAJfQogCi0JaWYgKHJjID09IC1FTk9UU1VQUCkgeworCWlmIChyYyA9PSAtRU9QTk9UU1VQUCkgewogCQkvKiBpbnRlcmNlcHQgY2Fubm90IGJlIGhhbmRsZWQgaW4ta2VybmVsLCBwcmVwYXJlIGt2bS1ydW4gKi8KIAkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gICAgICAgICA9IEtWTV9FWElUX1MzOTBfU0lFSUM7CiAJCWt2bV9ydW4tPnMzOTBfc2llaWMuaWNwdGNvZGUgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGU7CkBAIC02MDMsNDUgKzYwNCw0NSBAQAogCX0gZWxzZQogCQlwcmVmaXggPSAwOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBmcF9yZWdzKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGZwX3JlZ3MpLAogCQkJdmNwdS0+YXJjaC5ndWVzdF9mcHJlZ3MuZnBycywgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZ3BfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBncF9yZWdzKSwKIAkJCXZjcHUtPmFyY2guZ3Vlc3RfZ3BycywgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgcHN3KSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHBzdyksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIDE2LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgcHJlZl9yZWcpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgcHJlZl9yZWcpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXgsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsCi0JCQlhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZnBfY3RybF9yZWcpLAorCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGZwX2N0cmxfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwcmVncy5mcGMsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCB0b2RfcmVnKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRvZF9yZWcpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT50b2RwciwgNCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHRpbWVyKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRpbWVyKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1dG0sIDgsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBjbGtfY21wKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGNsa19jbXApLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ja2MsIDgsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBhY2NfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBhY2NfcmVncyksCiAJCQkmdmNwdS0+YXJjaC5ndWVzdF9hY3JzLCA2NCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoX19ndWVzdGNvcHkodmNwdSwKLQkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBjdHJsX3JlZ3MpLAorCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGN0cmxfcmVncyksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjciwgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggZDQyNmFhYy4uMjhjNTU2NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTMyMyw1ICszMjMsNSBAQAogCQllbHNlCiAJCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKIAl9Ci0JcmV0dXJuIC1FTk9UU1VQUDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCmluZGV4IDE1ZWUxMTEuLjI0MWE0ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2lncC5jCisrKyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJcmMgPSAwOyAvKiBvcmRlciBhY2NlcHRlZCAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBACiAJCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc2lncF9yZXN0YXJ0Kys7CiAJCS8qIHVzZXIgc3BhY2UgbXVzdCBrbm93IGFib3V0IHJlc3RhcnQgKi8KIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaWYgKHJjIDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUgYi9hcmNoL3MzOTAvbGliL01ha2VmaWxlCmluZGV4IDk3OTc1ZWMuLmNkNTRhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHMzOTAtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8KK2xpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8gdXNlcmNvcHkubwogb2JqLSQoQ09ORklHXzMyQklUKSArPSBkaXY2NC5vIHFybm5kLm8gdWNtcGRpMi5vCiBsaWItJChDT05GSUdfNjRCSVQpICs9IHVhY2Nlc3NfbXZjb3MubwogbGliLSQoQ09ORklHX1NNUCkgKz0gc3BpbmxvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCmluZGV4IGNmZjMyN2YuLjkxNzU0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYworKysgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKQEAgLTQzLDE2ICs0MywyNCBAQAogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG93bmVyOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKGNvdW50LS0gPD0gMCkgewotCQkJdW5zaWduZWQgaW50IG93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJCWlmIChvd25lciAhPSAwKQotCQkJCV9yYXdfeWllbGRfY3B1KH5vd25lcik7Ci0JCQljb3VudCA9IHNwaW5fcmV0cnk7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKCFvd25lciB8fCBzbXBfdmNwdV9zY2hlZHVsZWQofm93bmVyKSkgeworCQkJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwKKwkJCQkJCQkgIGNwdSkgPT0gMCkKKwkJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKE1BQ0hJTkVfSVNfTFBBUikKKwkJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCi0JCQljb250aW51ZTsKKwkJb3duZXIgPSBscC0+b3duZXJfY3B1OworCQlpZiAob3duZXIpCisJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCiAJCQlyZXR1cm47CiAJfQpAQCAtNjMsMTcgKzcxLDI3IEBACiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gfnNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgb3duZXI7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKGNvdW50LS0gPD0gMCkgewotCQkJdW5zaWduZWQgaW50IG93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJCWlmIChvd25lciAhPSAwKQotCQkJCV9yYXdfeWllbGRfY3B1KH5vd25lcik7Ci0JCQljb3VudCA9IHNwaW5fcmV0cnk7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKCFvd25lciB8fCBzbXBfdmNwdV9zY2hlZHVsZWQofm93bmVyKSkgeworCQkJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCQkJY29udGludWU7CisJCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLAorCQkJCQkJCSAgY3B1KSA9PSAwKQorCQkJCQlyZXR1cm47CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJfQorCQkJaWYgKE1BQ0hJTkVfSVNfTFBBUikKKwkJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCi0JCQljb250aW51ZTsKKwkJb3duZXIgPSBscC0+b3duZXJfY3B1OworCQlpZiAob3duZXIpCisJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCiAJCQlyZXR1cm47CkBAIC0xMDAsOCArMTE4LDExIEBACiB2b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IGxvY2stPm93bmVyX2NwdTsKLQlpZiAoY3B1ICE9IDApCi0JCV9yYXdfeWllbGRfY3B1KH5jcHUpOworCWlmIChjcHUgIT0gMCkgeworCQlpZiAoTUFDSElORV9JU19WTSB8fCBNQUNISU5FX0lTX0tWTSB8fAorCQkgICAgIXNtcF92Y3B1X3NjaGVkdWxlZCh+Y3B1KSkKKwkJCV9yYXdfeWllbGRfY3B1KH5jcHUpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9zcGluX3JlbGF4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jIGIvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjM2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvbGliL3VzZXJjb3B5LmMKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKK3ZvaWQgY29weV9mcm9tX3VzZXJfb3ZlcmZsb3codm9pZCkKK3sKKwlXQVJOKDEsICJCdWZmZXIgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iKTsKK30KK0VYUE9SVF9TWU1CT0woY29weV9mcm9tX3VzZXJfb3ZlcmZsb3cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IDVjODQ1NzEuLjY0MDlmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCX0KICNlbmRpZgogCWlmIChxb3V0LT5zZWdjbnQgPiA2KSB7Ci0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMzI0LDExICszMjQsMTEgQEAKIAkJZm9yIChpPTA7IGk8cW91dC0+c2VnY250OyBpKyspIHsKIAkJCWlmICgoKHFvdXQtPnJhbmdlW2ldLnN0YXJ0ICYgMHhmZikgIT0gU0VHX1RZUEVfRVcpICYmCiAJCQkgICAgKChxb3V0LT5yYW5nZVtpXS5zdGFydCAmIDB4ZmYpICE9IFNFR19UWVBFX0VOKSkgewotCQkJCXJjID0gLUVOT1RTVVBQOworCQkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCWlmIChzdGFydCAhPSBxb3V0LT5yYW5nZVtpXS5zdGFydCA+PiBQQUdFX1NISUZUKSB7Ci0JCQkJcmMgPSAtRU5PVFNVUFA7CisJCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQkJc3RhcnQgPSAocW91dC0+cmFuZ2VbaV0uZW5kID4+IFBBR0VfU0hJRlQpICsgMTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgZGlhZ25vc2UKICAqIC1FTk9FTlQgIDogbm8gc3VjaCBzZWdtZW50Ci0gKiAtRU5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CisgKiAtRU9QTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKICAqIC1FTk9NRU0gIDogb3V0IG9mIG1lbW9yeQogICogMCAuLiA2ICAgOiB0eXBlIG9mIHNlZ21lbnQgYXMgZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS1zMzkwL2V4dG1lbS5oCiAgKi8KQEAgLTUxNSw3ICs1MTUsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgb3IgbG9hZCBkaWFnbm9zZQogICogLUVOT0VOVCAgOiBubyBzdWNoIHNlZ21lbnQKLSAqIC1FTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKKyAqIC1FT1BOT1RTVVBQOiBtdWx0aS1wYXJ0IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBsaW51eAogICogLUVOT1NQQyAgOiBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIHN0b3JhZ2UpCiAgKiAtRUJVU1kgICA6IHNlZ21lbnQgY2FuIHRlbXBvcmFyaWx5IG5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIGRjc3MpCiAgKiAtRVJBTkdFICA6IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgKGV4Y2VlZHMga2VybmVsIG1hcHBpbmcgcmFuZ2UpCkBAIC03NDIsNyArNzQyLDcgQEAKIAkJcHJfZXJyKCJMb2FkaW5nIG9yIHF1ZXJ5aW5nIERDU1MgJXMgcmVzdWx0ZWQgaW4gYSAiCiAJCSAgICAgICAiaGFyZHdhcmUgZXJyb3JcbiIsIHNlZ19uYW1lKTsKIAkJYnJlYWs7Ci0JY2FzZSAtRU5PVFNVUFA6CisJY2FzZSAtRU9QTk9UU1VQUDoKIAkJcHJfZXJyKCJEQ1NTICVzIGhhcyBtdWx0aXBsZSBwYWdlIHJhbmdlcyBhbmQgY2Fubm90IGJlICIKIAkJICAgICAgICJsb2FkZWQgb3IgcXVlcmllZFxuIiwgc2VnX25hbWUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggZmMxMDJlNy4uMzA0MGQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KQEAgLTU5LDE1ICs2MCwxMyBAQAogewogCWludCByZXQgPSAwOwogCi0jaWZkZWYgQ09ORklHX0tQUk9CRVMKIAkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJaWYgKGtwcm9iZXNfYnVpbHRfaW4oKSAmJiAhdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAxNCkpCiAJCQlyZXQgPSAxOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KLSNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IDc2NTY0NzkuLmQ1ODY1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTQzLDMzICsxNDMsMzQgQEAKIH0KICNlbmRpZgogCi12b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBiZWdpbjsKIAotICAgICAgICBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOwotICAgICAgICBmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJaWYgKGJlZ2luID49IGVuZCkKKwkJcmV0dXJuOworCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJbWVtc2V0KCh2b2lkICopYWRkciwgUE9JU09OX0ZSRUVfSU5JVE1FTSwgUEFHRV9TSVpFKTsKKwkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiBQQUdFX01BU0spLCBQT0lTT05fRlJFRV9JTklUTUVNLAorCQkgICAgICAgUEFHRV9TSVpFKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ayAoIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JCSgodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4pID4+IDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7Cit9CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCisJCQkodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luLAorCQkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLSAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKQotICAgICAgICAgICAgICAgIHByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotICAgICAgICAgICAgICAgIGZyZWVfcGFnZShzdGFydCk7Ci0gICAgICAgICAgICAgICAgdG90YWxyYW1fcGFnZXMrKzsKLSAgICAgICAgfQorCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNjc0OTM0Yi4uY2NmMzhmMCAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI3Miw4ICsyNzIsOSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywJcHRlX3QgcHRlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKKwlwdGVfdCBwdGUgPSAqcHRlcDsKIAlfX3VwZGF0ZV90bGIodm1hLCBhZGRyZXNzLCBwdGUpOwogCV9fdXBkYXRlX2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvbW0vaW5pdC5jIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKaW5kZXggZGZhZjQ1OC4uN2YwMDFiYiAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9tbS9pbml0LmMKKysrIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotc3RhdGljIGludCBfX2luaXQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCitpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCiB7CiAJaWYgKHBhZ2VuciA+PSBtaW5fbG93X3BmbiAmJiBwYWdlbnIgPCBtYXhfbG93X3BmbikKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggMjEyMWZiYi4uMDVjZWY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTMsNyArMTMsNiBAQAogCXNlbGVjdCBIQVZFX0xNQgogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKLQlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCkBAIC0yMiw2ICsyMSw3IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IFJUQ19MSUIKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NApAQCAtMzUsNiArMzUsNyBAQAogCWRlZl9ib29sIEFSQ0ggPSAic2giCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VICYmICFYMlRMQgogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKQEAgLTQyLDYgKzQzLDggQEAKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSIGlmIERZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCisJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorCXNlbGVjdCBQRVJGX0VWRU5UUyBpZiBIQVZFX0hXX0JSRUFLUE9JTlQKIAlzZWxlY3QgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpZiBNTVUKIAogY29uZmlnIFNVUEVSSDY0CkBAIC03OCwxMiArODEsMTMgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWRlZl9ib29sIHkKLQogY29uZmlnIElSUV9QRVJfQ1BVCiAJZGVmX2Jvb2wgeQogCitjb25maWcgU1BBUlNFX0lSUQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNVUEVSSDMyCisKIGNvbmZpZyBHRU5FUklDX0dQSU8KIAlkZWZfYm9vbCBuCiAKQEAgLTU0OCw4ICs1NTIsNyBAQAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NgorCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHCiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTU2Myw3ICs1NjYsOCBAQAogCiBjb25maWcgU0hfQ0xLX0NQR19MRUdBQ1kKIAlkZXBlbmRzIG9uIFNIX0NMS19DUEcKLQlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUKKwlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUgJiYgXAorCQkgICAgICAhQ1BVX1NVQlRZUEVfU0g3Nzg2CiAKIGNvbmZpZyBTSF9DTEtfTUQKIAlpbnQgIkNQVSBNb2RlIFBpbiBTZXR0aW5nIgpAQCAtNzI1LDE4ICs3MjksNiBAQAogCSAgTExTQywgdGhpcyBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgb2YKIAkgIGRpc2FibGluZyBpbnRlcnJ1cHRzIGFyb3VuZCB0aGUgYXRvbWljIHNlcXVlbmNlLgogCi1jb25maWcgU1BBUlNFX0lSUQotCWJvb2wgIlN1cHBvcnQgc3BhcnNlIGlycSBudW1iZXJpbmciCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3BhcnNlIGlycXMuIFRoaXMgaXMgdXNlZnVsIGluIGdlbmVyYWwKLQkgIGFzIG1vc3QgQ1BVcyBoYXZlIGEgZmFpcmx5IHNwYXJzZSBhcnJheSBvZiBJUlEgdmVjdG9ycywgd2hpY2gKLQkgIHRoZSBpcnFfZGVzYyB0aGVuIG1hcHMgZGlyZWN0bHkgb24gdG8uIFN5c3RlbXMgd2l0aCBhIGhpZ2gKLQkgIG51bWJlciBvZiBvZmYtY2hpcCBJUlFzIHdpbGwgd2FudCB0byB0cmVhdCB0aGlzIGFzCi0JICBleHBlcmltZW50YWwgdW50aWwgdGhleSBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZC4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogZW5kbWVudQogCiBtZW51ICJCb290IG9wdGlvbnMiCkBAIC04MjIsMTEgKzgxNCwxNSBAQAogY29uZmlnIFBDSQogCWJvb2wgIlBDSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUwogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCiAJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCiAJICB5b3VyIGJveC4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCiAKK2NvbmZpZyBQQ0lfRE9NQUlOUworCWJvb2wKKwogc291cmNlICJkcml2ZXJzL3BjaS9wY2llL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IGNkNmUzZWEuLmRkZjA5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtNjgsNyArNjgsOCBAQAogCiBjb25maWcgU1BFQ1VMQVRJVkVfRVhFQ1VUSU9OCiAJYm9vbCAiU3BlY3VsYXRpdmUgc3Vicm91dGluZSByZXR1cm4iCi0JZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGEgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24gZmV0Y2ggZm9yCiAJICBzdWJyb3V0aW5lIHJldHVybi4gVGhlcmUgYXJlIHZhcmlvdXMgcGl0ZmFsbHMgYXNzb2NpYXRlZCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBkYjkxOTI1Li41ODg1NzlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTgzLDYgKzgzLDcgQEAKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORSkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NESzc3ODYpCQk6PSB2bWxpbnV4LmJpbgogCiAjIFNldCBzb21lIHNlbnNpYmxlIEtidWlsZCBkZWZhdWx0cwogS0JVSUxEX0lNQUdFCQk6PSAkKGRlZmF1bHRpbWFnZS15KQpAQCAtMTQzLDExICsxNDQsMTEgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfS0ZSMlIwOSkJCQkrPSBtYWNoLWtmcjJyMDkKIG1hY2hkaXItJChDT05GSUdfU0hfRUNPVkVDKQkJCSs9IG1hY2gtZWNvdmVjMjQKIG1hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4MCkJCQkrPSBtYWNoLXNkazc3ODAKK21hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4NikJCQkrPSBtYWNoLXNkazc3ODYKIG1hY2hkaXItJChDT05GSUdfU0hfWDNQUk9UTykJCQkrPSBtYWNoLXgzcHJvdG8KIG1hY2hkaXItJChDT05GSUdfU0hfU0g3NzYzUkRQKQkJCSs9IG1hY2gtc2g3NzYzcmRwCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINDIwMl9NSUNST0RFVikJCSs9IG1hY2gtbWljcm9kZXYKIG1hY2hkaXItJChDT05GSUdfU0hfTEFORElTSykJCQkrPSBtYWNoLWxhbmRpc2sKLW1hY2hkaXItJChDT05GSUdfU0hfVElUQU4pCQkJKz0gbWFjaC10aXRhbgogbWFjaGRpci0kKENPTkZJR19TSF9MQk9YX1JFMikJCQkrPSBtYWNoLWxib3hyZTIKIG1hY2hkaXItJChDT05GSUdfU0hfQ0FZTUFOKQkJCSs9IG1hY2gtY2F5bWFuCiBtYWNoZGlyLSQoQ09ORklHX1NIX1JTSykJCQkrPSBtYWNoLXJzawpAQCAtMjAzLDggKzIwNCw5IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgdUltYWdlLmJpbiBcCi0JICAgICAgIHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIFwKKwkgICAgICAgdUltYWdlLnNyZWMgdUltYWdlLmJpbiB6SW1hZ2Ugdm1saW51eC5iaW4gdm1saW51eC5zcmVjIFwKKwkgICAgICAgcm9tSW1hZ2UKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQogCiBhbGw6ICQoS0JVSUxEX0lNQUdFKQpAQCAtMjI1LDEwICsyMjcsMTIgQEAKIAlAZWNobyAnICB6SW1hZ2UgCSAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZScKIAlAZWNobyAnICByb21JbWFnZQkgICAgICAgICAgIC0gQ29tcHJlc3NlZCBST00gaW1hZ2UsIGlmIHN1cHBvcnRlZCcKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCisJQGVjaG8gJyAgdm1saW51eC5iaW4JICAgICAgICAgICAtIENyZWF0ZSBhbiB1bmNvbXByZXNzZWQgYmluYXJ5IGltYWdlJwogCUBlY2hvICcqIHVJbWFnZSAgCSAgICAgICAgICAgLSBBbGlhcyB0byBib290YWJsZSBVLUJvb3QgaW1hZ2UnCiAJQGVjaG8gJyAgdUltYWdlLnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBTLXJlY29yZCBmb3IgVS1Cb290JwogCUBlY2hvICcgIHVJbWFnZS5iaW4JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJpbiknCiAJQGVjaG8gJyogdUltYWdlLmd6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChnemlwKScKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJworCUBlY2hvICcgIHVJbWFnZS5sem8JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6byknCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKaW5kZXggYWVkZDlkZS4uOTM4ZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCkBAIC0xNTAsNiArMTUwLDE0IEBACiAJICBTZWxlY3QgU0RLNzc4MCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc4MCBTREs3NzgwUjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9TREs3Nzg2CisJYm9vbCAiU0RLNzc4NiIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfUENJCisJaGVscAorCSAgU2VsZWN0IFNESzc3ODYgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZQorCSAgU0g3Nzg2LTY1bm0gYm9hcmQuCisKIGNvbmZpZyBTSF9ISUdITEFOREVSCiAJYm9vbCAiSGlnaGxhbmRlciIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggY2UwZjI2My4uNGY5MGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubwogb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KIG9iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KK29iai0kKENPTkZJR19TSF9USVRBTikJCSs9IGJvYXJkLXRpdGFuLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggOTlmZmM1Zi4uZWZiYTQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMC5oPgogCi0jZGVmaW5lIExBTjkxMTVfUkVBRFkJKGN0cmxfaW5sKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCisjZGVmaW5lIExBTjkxMTVfUkVBRFkJKF9fcmF3X3JlYWRsKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCiAKIC8qIFByZWZlciBjbWRsaW5lIG92ZXIgUmVkQm9vdCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEwgfTsKQEAgLTYwLDMzICs2MCwzMyBAQAogewogCS8qIENTMjogTEFOICgweDA4MDAwMDAwIC0gMHgwYmZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBDUzJCQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBDUzJCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKIAogCS8qIENTNDogQ0FOMSAoMHhiMDAwMDAwMCAtIDB4YjNmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5ODEsIENTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNFdDUik7CiAKIAkvKiBDUzVhOiBDQU4yICgweGI0MDAwMDAwIC0gMHhiNWZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVBQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QUJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVBV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QVdDUik7CiAKIAkvKiBDUzViOiBDQU4zICgweGI2MDAwMDAwIC0gMHhiN2ZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVCQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QkJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVCV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QldDUik7CiAKIAkvKiBDUzZhOiBSb3RhcnkgKDB4YjgwMDAwMDAgLSAweGI5ZmZmZmZmKSAqLwogCS8qIG5vIGlkbGUgY3ljbGVzLCBub3JtYWwgc3BhY2UsIDggYml0IGRhdGEgYnVzICovCi0JY3RybF9vdXRsKDB4MDAwMDAyMDAsIENTNkFCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwMjAwLCBDUzZBQkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgbm8gZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5QzEsIENTNkFXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTAwOUMxLCBDUzZBV0NSKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3BvcnRfbXVsdGlwbGV4aW5nKHZvaWQpCkBAIC05NCw3MSArOTQsNzEgQEAKIAkvKiBBNyBHUE8oTEVEOCk7ICAgICBBNiBHUE8oTEVENyk7ICAgICBBNSBHUE8oTEVENik7CSAgQTQgR1BPKExFRDUpOwogCSAqIEEzIEdQTyhMRUQ0KTsgICAgIEEyIEdQTyhMRUQzKTsgICAgIEExIEdQTyhMRUQyKTsJICBBMCBHUE8oTEVEMSk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQUNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BBQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQjcgR1BPKFJTVDQpOyAgIEI2IEdQTyhSU1QzKTsgIEI1IEdQTyhSU1QyKTsgICAgQjQgR1BPKFJTVDEpOwogCSAqIEIzIEdQTyhQQjMpOwkgICBCMiBHUE8oUEIyKTsJICBCMSBHUE8oUEIxKTsJICAgQjAgR1BPKFBCMCk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQkNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BCQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQzcgR1BPKFBDNyk7CSAgQzYgR1BPKFBDNik7CSAgQzUgR1BPKFBDNSk7CSAgIEM0IEdQTyhQQzQpOwogCSAqIEMzIExDRF9EQVRBMzsgIEMyIExDRF9EQVRBMjsgICBDMSBMQ0RfREFUQTE7CSAgIEMwIExDRF9EQVRBMDsKIAkgKi8KLQljdHJsX291dHcoMHg1NTAwLCBQT1JUX1BDQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDU1MDAsIFBPUlRfUENDUik7CS8qIDAxIDAxIDAxIDAxIDAwIDAwIDAwIDAwICovCiAKIAkvKiBENyBHUE8oUEQ3KTsJRDYgR1BPKFBENik7CUQ1IEdQTyhQRDUpOwkgICBENCBHUE8oUEQ0KTsKIAkgKiBEMyBHUE8oUEQzKTsJRDIgR1BPKFBEMik7CUQxIEdQTyhQRDEpOwkgICBEMCBHUE8oUEQwKTsKIAkgKi8KLQljdHJsX291dHcoMHg1NTU1LCBQT1JUX1BEQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDU1NTUsIFBPUlRfUERDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCiAKIAkvKiBFNyAoeCk7CSAgRTYgR1BJKG51KTsJIEU1IEdQSShudSk7CSAgRTQgTENEX01fRElTUDsKIAkgKiBFMyBMQ0RfQ0wxOwkgIEUyIExDRF9DTDI7CSBFMSBMQ0RfRE9OOwkgIEUwIExDRF9GTE07CiAJICovCi0JY3RybF9vdXR3KDB4M0MwMCwgUE9SVF9QRUNSKTsJLyogMDAgMTEgMTEgMDAgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgzQzAwLCBQT1JUX1BFQ1IpOwkvKiAwMCAxMSAxMSAwMCAwMCAwMCAwMCAwMCAqLwogCiAJLyogRjcgKHgpOwkgICAgIEY2IERBMShWTENEKTsgICAgIEY1IERBMChuYyk7CSAgRjQgQU4zOwogCSAqIEYzIEFOMihNSURfQUQpOyAgIEYyIEFOMShFQVJUSF9BRCk7IEYxIEFOMChURU1QKTsJICBGMCBHUEkrKG5jKTsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAyLCBQT1JUX1BGQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAxMCAqLworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEZDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDEwICovCiAKIAkvKiBHNyAoeCk7CSAgRzYgSVJRNShUT1VDSF9CVVNZKTsgRzUgSVJRNChUT1VDSF9JUlEpOyBHNCBHUEkoS0VZMik7CiAJICogRzMgR1BJKEtFWTEpOyAgRzIgR1BPKExFRDExKTsJRzEgR1BPKExFRDEwKTsgICAgIEcwIEdQTyhMRUQ5KTsKIAkgKi8KLQljdHJsX291dHcoMHgwM0Q1LCBQT1JUX1BHQ1IpOwkvKiAwMCAwMCAwMCAxMSAxMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDAzRDUsIFBPUlRfUEdDUik7CS8qIDAwIDAwIDAwIDExIDExIDAxIDAxIDAxICovCiAKIAkvKiBINyAoeCk7CSAgICAgIEg2IC9SQVMoQlJBUyk7CSAgSDUgL0NBUyhCQ0FTKTsgSDQgQ0tFKEJDS0UpOwogCSAqIEgzIEdQTyhFQVJUSF9PRkYpOyBIMiBHUE8oRUFSVEhfVEVTVCk7IEgxIFVTQjJfUFdSOwkgSDAgVVNCMV9QV1I7CiAJICovCi0JY3RybF9vdXR3KDB4MDA1MCwgUE9SVF9QSENSKTsJLyogMDAgMDAgMDAgMDAgMDEgMDEgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDUwLCBQT1JUX1BIQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMSAwMSAwMCAwMCAqLwogCiAJLyogSjcgKHgpOwkgIEo2IEFVRENLOwkgICBKNSBBU0VCUktBSzsJICAgIEo0IEFVREFUQTM7CiAJICogSjMgQVVEQVRBMjsJICBKMiBBVURBVEExOwkgICBKMSBBVURBVEEwOwkgICAgSjAgQVVEU1lOQzsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BKQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUEpDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCiAKIAkvKiBLNyAoeCk7CSAgICBLNiAoeCk7CSAgICAgSzUgKHgpOwkgICBLNCAoeCk7CiAJICogSzMgUElOVDcoL1BXUjIpOyBLMiBQSU5UNigvUFdSMSk7IEsxIFBJTlQ1KG51KTsgSzAgUElOVDQoRkxBU0hfUkVBRFkpCiAJICovCi0JY3RybF9vdXR3KDB4MDBGRiwgUE9SVF9QS0NSKTsJLyogMDAgMDAgMDAgMDAgMTEgMTEgMTEgMTEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEZGLCBQT1JUX1BLQ1IpOwkvKiAwMCAwMCAwMCAwMCAxMSAxMSAxMSAxMSAqLwogCiAJLyogTDcgVFJTVDsJICAgTDYgVE1TOwkgICAgIEw1IFRETzsJCSAgTDQgVERJOwogCSAqIEwzIFRDSzsJICAgTDIgKHgpOwkgICAgIEwxICh4KTsJCSAgTDAgKHgpOwogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUExDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTENSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KIAogCS8qIE03IEdQTyhDVVJSRU5UX1NJTkspOyAgICBNNiBHUE8oUFdSX1NXSVRDSCk7ICAgICBNNSBHUE8oTEFOX1NQRUVEKTsKIAkgKiBNNCBHUE8oTEFOX1JFU0VUKTsgICAgICAgTTMgR1BPKEJVWlpFUik7CSAgICBNMiBHUE8oTENEX0JMKTsKIAkgKiBNMSBDUzVCKENBTjNfQ1MpOwkgICAgTTAgR1BJKyhuYyk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1MiwgUE9SVF9QTUNSKTsJICAgLyogMDEgMDEgMDEgMDEgMDEgMDEgMDAgMTAgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTUyLCBQT1JUX1BNQ1IpOwkgICAvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMCAxMCAqLwogCiAJLyogQ1VSUkVOVF9TSU5LPW9mZiwJUFdSX1NXSVRDSD1vZmYsIExBTl9TUEVFRD0xMDBNQml0LAogCSAqIExBTl9SRVNFVD1vZmYsCUJVWlpFUj1vZmYsCUxDRF9CTD1vZmYKIAkgKi8KICNpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAyCi0JY3RybF9vdXRiKDB4MzAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4MzAsIFBPUlRfUE1EUik7CiAjZWxpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAzCi0JY3RybF9vdXRiKDB4RjAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4RjAsIFBPUlRfUE1EUik7CiAjZWxzZQogI2Vycm9yIFVua25vd24gcmV2aXNpb24gb2YgUExBVEZPUk1fTVBfUjIKICNlbmRpZgpAQCAtMTY3LDggKzE2Nyw4IEBACiAJICogUDQgR1BPKG51KTsJICAgICAgIFAzIElSUTMoTEFOX0lSUSk7ICBQMiBJUlEyKENBTjNfSVJRKTsKIAkgKiBQMSBJUlExKENBTjJfSVJRKTsgIFAwIElSUTAoQ0FOMV9JUlEpCiAJICovCi0JY3RybF9vdXR3KDB4MDEwMCwgUE9SVF9QUENSKTsJLyogMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgKi8KLQljdHJsX291dGIoMHgxMCwgUE9SVF9QUERSKTsKKwlfX3Jhd193cml0ZXcoMHgwMTAwLCBQT1JUX1BQQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRlYigweDEwLCBQT1JUX1BQRFIpOwogCiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CkBAIC0xODUsMjIgKzE4NSwyMiBAQAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CiAJICovCi0JY3RybF9vdXR3KDB4MDE0MCwgUE9SVF9QU0NSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMTQwLCBQT1JUX1BTQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMSAwMCAwMCAwMCAqLwogCiAJLyogVDcgKHgpOwkgICBUNiAoeCk7CSAgVDUgKHgpOwkgIFQ0IENPTTFfQ1RTOwogCSAqIFQzIENPTTFfUlRTOwkgICBUMiBDT00xX1RYRDsJICBUMSBDT00xX1JYRDsJICBUMCBHUE8oV0RPRykKIAkgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BUQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAqLworCV9fcmF3X3dyaXRldygweDAwMDEsIFBPUlRfUFRDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICovCiAKIAkvKiBVNyAoeCk7CSAgICAgVTYgKHgpOwkgICBVNSAoeCk7CSAgVTQgR1BJKygvQUNfRkFVTFQpOwogCSAqIFUzIEdQTyhUT1VDSF9DUyk7IFUyIFRPVUNIX1RYRDsgVTEgVE9VQ0hfUlhEOyAgVTAgVE9VQ0hfU0NLOwogCSAqLwotCWN0cmxfb3V0dygweDAyNDAsIFBPUlRfUFVDUik7CS8qIDAwIDAwIDAwIDEwIDAxIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDI0MCwgUE9SVF9QVUNSKTsJLyogMDAgMDAgMDAgMTAgMDEgMDAgMDAgMDAgKi8KIAogCS8qIFY3ICh4KTsJICBWNiAoeCk7CVY1ICh4KTsJCSAgVjQgR1BPKE1JRDIpOwogCSAqIFYzIEdQTyhNSUQxKTsgIFYyIENBUkRfVHhEOwlWMSBDQVJEX1J4RDsJICBWMCBHUEkrKC9CQVRfRkFVTFQpOwogCSAqLwotCWN0cmxfb3V0dygweDAxNDIsIFBPUlRfUFZDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDEwICovCisJX19yYXdfd3JpdGV3KDB4MDE0MiwgUE9SVF9QVkNSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMTAgKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKQEAgLTIwOSwyNCArMjA5LDI0IEBACiAJICogL1BDQ19DRDEsIC9QQ0NfQ0QyLCAgUENDX0JWRDEsIFBDQ19CVkQyLAogCSAqIC9JT0lTMTYsICBJUlE0LAlJUlE1LAkgIFVTQjFkX1NVU1BFTkQKIAkgKi8KLQljdHJsX291dHcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKKwlfX3Jhd193cml0ZXcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBCOgogCSAqIC9TQ0lGMF9SVFMsIC9TQ0lGMF9DVFMsIExDRF9WQ1BXQywKIAkgKiBMQ0RfVkVQV0MsICBJSUNfU0RBLCAgICBJSUNfU0NMLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDNDMDAsIFBPUlRfUFNFTEIpOworCV9fcmF3X3dyaXRldygweDNDMDAsIFBPUlRfUFNFTEIpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEM6CiAJICogU0lPRjFfU0NLLCBTSU9GMV9SeEQsIFNDSUYxX1J4RCwgU0NJRjFfVHhELCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEMpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEMpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEQ6IFJlc2VydmVkLCBTSU9GMV9UeEQsIFJlc2VydmVkLCBTSU9GMV9NQ0xLLAogCSAqIFJlc2VydmVkLCBTSU9GMV9TWU5DLCBSZXNlcnZlZCwgU0NJRjFfU0NLLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEQpOwogCS8qIHNldCBVU0IgVHhSeCBDb250cm9sOiBSZXNlcnZlZCwgRFJWLCBSZXNlcnZlZCwgVVNCX1RSQU5TLCBVU0JfU0VMICovCi0JY3RybF9vdXR3KDB4MDEwMSwgUE9SVF9VVFJDVEwpOworCV9fcmF3X3dyaXRldygweDAxMDEsIFBPUlRfVVRSQ1RMKTsKIAkvKiBzZXQgVVNCIENsb2NrIENvbnRyb2w6IFVTU0NTLCBVU1NUQiwgUmVzZXJ2ZWQgKEhpZ2hCeXRlIGFsd2F5cyBBNSkgKi8KLQljdHJsX291dHcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKKwlfX3Jhd193cml0ZXcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKIAogCXNldHVwX2NoaXBfc2VsZWN0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwppbmRleCA2MjYwN2ViLi41OTQ4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCkBAIC01OSwxNSArNTksMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gOCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUE9SVF9QQ0RSLAotCQkuZW5kCT0gUE9SVF9QQ0RSLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUE9SVF9QQ0RSLAorCS5lbmQJPSBQT1JUX1BDRFIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTc2LDggKzczLDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC05MiwxNSArODksMTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmluZyBQb2xhcmlzIGV4dGVybmFsIGJ1c1xuIik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IHdpdGggMiB3YWl0IHN0YXRlcyAqLwotCXdjciA9IGN0cmxfaW53KFdDUjIpOworCXdjciA9IF9fcmF3X3JlYWR3KFdDUjIpOwogCXdjciAmPSAofkFSRUE1X1dBSVRfQ1RSTCk7CiAJd2NyIHw9IChXQUlUX1NUQVRFU18xMCA8PCAxMCk7Ci0JY3RybF9vdXR3KHdjciwgV0NSMik7CisJX19yYXdfd3JpdGV3KHdjciwgV0NSMik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IGZvciAzMi1iaXQgYWNjZXNzICovCi0JYmNyX21hc2sgPSBjdHJsX2ludyhCQ1IyKTsKKwliY3JfbWFzayA9IF9fcmF3X3JlYWR3KEJDUjIpOwogCWJjcl9tYXNrIHw9IDEgPDwgMTA7Ci0JY3RybF9vdXR3KGJjcl9tYXNrLCBCQ1IyKTsKKwlfX3Jhd193cml0ZXcoYmNyX21hc2ssIEJDUjIpOwogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKQEAgLTEzMSwxMyArMTI4LDEzIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wb2xhcmlzX2lycSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBlNWE4YTJmLi5mZTdlNjg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBjYS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxtYWNoL3NoNzc4NWxjci5oPgpAQCAtMzIsMjYgKzMzLDE3IEBACiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgogICoJIFBsZWFzZSBsb29rIGF0IGluY2x1ZGUvYXNtLXNoL3NoNzc4NWxjci5oIG9yIGhhcmR3YXJlIG1hbnVhbC4KICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQTERfTEVEQ1IsCi0JCS5lbmQJPSBQTERfTEVEQ1IsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gOCwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBMRF9MRURDUiwKKwkuZW5kCT0gUExEX0xFRENSLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKQEAgLTM0MSw4ICszMzMsMTQgQEAKIAlwbV9wb3dlcl9vZmYgPSBzaDc3ODVsY3JfcG93ZXJfb2ZmOwogCiAJLyogc201MDEgRFJBTSBjb25maWd1cmF0aW9uICovCi0Jc201MDFfcmVnID0gKHZvaWQgX19pb21lbSAqKTB4YjNlMDAwMDAgKyBTTTUwMV9EUkFNX0NPTlRST0w7Ci0Jd3JpdGVsKDB4MDAwMzA3YzIsIHNtNTAxX3JlZyk7CisJc201MDFfcmVnID0gaW9yZW1hcF9ub2NhY2hlKFNNMTA3X1JFR19BRERSLCBTTTUwMV9EUkFNX0NPTlRST0wpOworCWlmICghc201MDFfcmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwoMHgwMDAzMDdjMiwgc201MDFfcmVnICsgU001MDFfRFJBTV9DT05UUk9MKTsKKwlpb3VubWFwKHNtNTAxX3JlZyk7CiB9CiAKIC8qIFJldHVybiB0aGUgYm9hcmQgc3BlY2lmaWMgYm9vdCBtb2RlIHBpbiBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwppbmRleCBiMWRjYmJjOC4uMzI1YmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCkBAIC0xNyw4ICsxNyw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NobWluX2lycSh2b2lkKQogewotCWN0cmxfb3V0dygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQotCWN0cmxfb3V0dygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgorCV9fcmF3X3dyaXRldygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQorCV9fcmF3X3dyaXRldygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdGl0YW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXRpdGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC10aXRhbi5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCit7CisJLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJUaXRhbiIsCisJLm12X2luaXRfaXJxCT0gaW5pdF90aXRhbl9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCmluZGV4IDM2YjhiYWMuLmE5YmQ2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTIsNyArMiw3IEBACiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBQYXVsIE11bmR0CiAgKgogICogQmFzZWQgb24gYm9hcmQtc2g3Nzg1bGNyLmMKICAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxtYWNoL3VycXVlbGwuaD4KICNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgpAQCAtNTAsMjYgKzUxLDE3IEBACiAgKi8KIAogLyogSGVhcnRCZWF0ICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmVuZAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKKwkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogTEFOOTFDMTExICovCkBAIC0xODQsNiArMTc2LDI3IEBACiAJcmV0dXJuIF9fcmF3X3JlYWR3KFVCT0FSRFJFRyhNRFNXTVIpKTsKIH0KIAorc3RhdGljIGludCB1cnF1ZWxsX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewpAQCAtMjAwLDQgKzIxMyw1IEBACiAJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKIAkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAogCS5tdl9tb2RlX3BpbnMJPSB1cnF1ZWxsX21vZGVfcGlucywKKwkubXZfY2xrX2luaXQJPSB1cnF1ZWxsX2Nsa19pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCAxZjVmYTVjNDQuLjU3ZTM3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKQEAgLTE1OSwyMSArMTU5LDIxIEBACiAJbXNsZWVwKDEwMCk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT04gKi8KLQljdHJsX291dHcoRlBHQV9MQ0RSRUdfVkFMLCBGUEdBX0xDRFJFRyk7CisJX19yYXdfd3JpdGV3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKLQljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKKwlfX3Jhd193cml0ZXcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKIHsKIAkvKiBiYWNrbGlnaHQgKi8KLQljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0JLTFJFRyk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKIAogCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KLQljdHJsX291dHcoMCwgRlBHQV9MQ0RSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0xDRFJFRyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBsY2RjX2luZm8gPSB7CkBAIC00MjAsNyArNDIwLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDEwMSwKKwkJLnN0YXJ0CT0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00NDMsNyArNDQzLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDI0LAorCQkuc3RhcnQJPSAyMywKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDcxLDggKzQ3MSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyBvdjc3MjVfaW5mbyA9IHsKLQkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKLQkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCwKKwkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCB8IFwKKwkJCSAgT1Y3NzJYX0ZMQUdfOEJJVCwKIAkuZWRnZWN0cmwJPSBPVjc3MlhfQVVUT19FREdFQ1RSTCgweGYsIDApLAogfTsKIApAQCAtNTk1LDcgKzU5NSw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaNCwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRaNCwgMCk7IC8qIFNBRERSICovCiAKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJLyogRkxDVEwgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GQ0UsIE5VTEwpOwpAQCAtNjEzLDkgKzYxMyw5IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRldFLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GUkIsIE5VTEwpOwogCi0JY3RybF9vdXR3KDAsIFBPUlRfSElaQ1JDKTsKLQljdHJsX291dHcoMHhGRkZGLCBQT1JUX0RSVkNSQSk7Ci0JY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkIpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX0hJWkNSQyk7CisJX19yYXdfd3JpdGV3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOworCV9fcmF3X3dyaXRldygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtY2F5bWFuL2lycS5jCmluZGV4IDMzZjc3MDg1Li4xMzk0YjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYwpAQCAtNjYsOSArNjYsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgfD0gYml0OwotCWN0cmxfb3V0bChtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChtYXNrLCByZWcpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtODMsOSArODMsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgJj0gfmJpdDsKLQljdHJsX291dGwobWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEwOSw4ICsxMDksOCBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAkJaW50IGk7CiAKLQkJc3RhdHVzID0gY3RybF9pbmwoRVBMRF9TVEFUVVNfQkFTRSkgJgotCQkJIGN0cmxfaW5sKEVQTERfTUFTS19CQVNFKSAmIDB4ZmY7CisJCXN0YXR1cyA9IF9fcmF3X3JlYWRsKEVQTERfU1RBVFVTX0JBU0UpICYKKwkJCSBfX3Jhd19yZWFkbChFUExEX01BU0tfQkFTRSkgJiAweGZmOwogCQlpZiAoc3RhdHVzID09IDApIHsKIAkJCWlycSA9IC0xOwogCQl9IGVsc2UgewpAQCAtMTI2LDggKzEyNiw4IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCQlpbnQgaTsKIAotCQlzdGF0dXMgPSBjdHJsX2lubChFUExEX1NUQVRVU19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmCi0JCQkgY3RybF9pbmwoRVBMRF9NQVNLX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYgMHhmZjsKKwkJc3RhdHVzID0gX19yYXdfcmVhZGwoRVBMRF9TVEFUVVNfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJgorCQkJIF9fcmF3X3JlYWRsKEVQTERfTUFTS19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmIDB4ZmY7CiAJCWlmIChzdGF0dXMgPT0gMCkgewogCQkJaXJxID0gLTE7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCmluZGV4IGY1NWZjOGUuLmQ5MzI2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCkBAIC0xMzUsMyArMTM1LDMwIEBACiAJLyogTm90IHJlYWNoZWQgKi8KIAlyZXR1cm4gaXJxOwogfQorCit2b2lkIHN5c3RlbWFzaWNfaXJxX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CisKKwkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCisJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGksIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3Igc3lzdGVtYXNpY1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAodW5saWtlbHkoaXJxICE9IGkpKSB7CisJCQlwcl9lcnIoIiVzOiBnb3QgaXJxICVkIGJ1dCB3YW50ZWQgJWQsIGJhaWxpbmcuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEsIGkpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCisJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCmluZGV4IGE3NDMzNjg1Li4wNjFkNjU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYwpAQCAtMzUsMTEgKzM1LDExIEBACiAJdW5zaWduZWQgbG9uZyB2YWwxLCB2YWwyOwogCiAJZG8gewotCQl2YWwxID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwxID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCi0JCXZhbDIgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDIgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAJfSB3aGlsZSAodmFsMSAhPSB2YWwyKTsKIAogCXRzLT50dl9zZWMgPSB2YWwxIC0gVFdFTlRZX1lFQVJTOwpAQCAtNjAsMTQgKzYwLDE0IEBACiAJdW5zaWduZWQgbG9uZyBhZGogPSBzZWNzICsgVFdFTlRZX1lFQVJTOwogCiAJZG8gewotCQljdHJsX291dGwoKGFkaiAmIDB4ZmZmZjAwMDApID4+IDE2LCBBSUNBX1JUQ19TRUNTX0gpOwotCQljdHJsX291dGwoKGFkaiAmIDB4ZmZmZiksIEFJQ0FfUlRDX1NFQ1NfTCk7CisJCV9fcmF3X3dyaXRlbCgoYWRqICYgMHhmZmZmMDAwMCkgPj4gMTYsIEFJQ0FfUlRDX1NFQ1NfSCk7CisJCV9fcmF3X3dyaXRlbCgoYWRqICYgMHhmZmZmKSwgQUlDQV9SVENfU0VDU19MKTsKIAotCQl2YWwxID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwxID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCi0JCXZhbDIgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDIgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAJfSB3aGlsZSAodmFsMSAhPSB2YWwyKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKaW5kZXggYTRiNzQwMi4uYWQxYTRkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCkBAIC0yOCwyNSArMjgsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLWV4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgc3lzdGVtYXNpY19pbnQ7Ci1leHRlcm4gdm9pZCBhaWNhX3RpbWVfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgc3lzdGVtYXNpY19pcnFfZGVtdXgoaW50KTsKLQogc3RhdGljIHZvaWQgX19pbml0IGRyZWFtY2FzdF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCWludCBpOwotCi0JLyogTWFzayBhbGwgaGFyZHdhcmUgZXZlbnRzICovCi0JLyogWFhYICovCi0KLQkvKiBBY2tub3dsZWRnZSBhbnkgcHJldmlvdXMgZXZlbnRzICovCi0JLyogWFhYICovCi0KLQkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCi0JZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKLQogCWJvYXJkX3RpbWVfaW5pdCA9IGFpY2FfdGltZV9pbml0OwogfQogCkBAIC01NCw0ICszNyw1IEBACiAJLm12X25hbWUJCT0gIlNlZ2EgRHJlYW1jYXN0IiwKIAkubXZfc2V0dXAJCT0gZHJlYW1jYXN0X3NldHVwLAogCS5tdl9pcnFfZGVtdXgJCT0gc3lzdGVtYXNpY19pcnFfZGVtdXgsCisJLm12X2luaXRfaXJxCQk9IHN5c3RlbWFzaWNfaXJxX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TCmluZGV4IDgzMzQ0MDAuLjM5NjNjNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMKQEAgLTM3LDYgKzM3LDEwIEBACiAJLmJhbGlnbiA0CiBFTlRSWShlY292ZWMyNF9zZHJhbV9sZWF2ZV9zdGFydCkKIAorCW1vdi5sCUAoU0hfU0xFRVBfTU9ERSwgcjUpLCByMAorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwliZglyZXN1bWVfcnN0YW5kYnkKKwogCS8qIERCU0M6IHB1dCBtZW1vcnkgaW4gYXV0by1yZWZyZXNoIG1vZGUgKi8KIAogCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDAgLyogREJSRlBETjAgKi8KQEAgLTQ5LDQgKzUzLDU5IEBACiAJcnRzCiAJIG5vcAogCityZXN1bWVfcnN0YW5kYnk6CisKKwkvKiBEQlNDOiByZS1pbml0aWFsaXplIGFuZCBwdXQgaW4gYXV0by1yZWZyZXNoICovCisKKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMTgxIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDAyMCwgMHgwMTVCMDAwMiAvKiBEQkNPTkYgKi8KKwlFRCAweEZEMDAwMDMwLCAweDAzMDcxNTAyIC8qIERCVFIwICovCisJRUQgMHhGRDAwMDAzNCwgMHgwMjAyMDEwMiAvKiBEQlRSMSAqLworCUVEIDB4RkQwMDAwMzgsIDB4MDEwOTA0MDUgLyogREJUUjIgKi8KKwlFRCAweEZEMDAwMDNDLCAweDAwMDAwMDAyIC8qIERCVFIzICovCisJRUQgMHhGRDAwMDAwOCwgMHgwMDAwMDAwNSAvKiBEQktJTkQgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAxIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwMTgsIDB4MDAwMDAwMDEgLyogREJDS0VDTlQgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TOgorCWR0CXIwCisJYmYJV0FJVF80MDBOUworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDIwMDAwIC8qIERCTVJDTlQgKEVNUjIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAzMDAwMCAvKiBEQk1SQ05UIChFTVIzKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwMDQgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA1MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNDMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwM2MwIC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDQwIC8qIERCTVJDTlQgKEVNUikgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TXzI6CisJZHQJcjAKKwliZglXQUlUXzQwME5TXzIKKworCUVEIDB4RkQwMDAwMTAsIDB4MDAwMDAwMDEgLyogREJFTiAqLworCUVEIDB4RkQwMDAwNDQsIDB4MDAwMDA1MGYgLyogREJSRlBETjEgKi8KKwlFRCAweEZEMDAwMDQ4LCAweDIzNjgwMGU2IC8qIERCUkZQRE4yICovCisKKwltb3YubAlEVU1NWSxyMAorCW1vdi5sCUByMCwgcjEgLyogZm9yY2Ugc2luZ2xlIGR1bW15IHJlYWQgKi8KKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAwODAgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDEwMDAwIC8qIERCUkZQRE4wICovCisKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKK0RVTU1ZOgkubG9uZwkweGFjNDAwMDAwCisKIEVOVFJZKGVjb3ZlYzI0X3NkcmFtX2xlYXZlX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCA1YzI0NjI4Li4zOWVkODcyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC02NCwxOCArNjQsMTYgQEAKIAogLyogSGVhcnRiZWF0ICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZWRfcG9zW10gPSB7IDAsIDEsIDIsIDMgfTsKKwogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDgsCiAJLm5yX2JpdHMgPSA0LAogCS5iaXRfcG9zID0gbGVkX3BvcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IDB4QTQwNTAxMkMsIC8qIFBURyAqLwotCQkuZW5kICAgID0gMHhBNDA1MDEyRSAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IDB4QTQwNTAxMkMsIC8qIFBURyAqLworCS5lbmQgICAgPSAweEE0MDUwMTJFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTg0LDggKzgyLDggQEAKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBNVEQgKi8KQEAgLTQ1NSw3ICs0NTMsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAxMDEsCisJCS5zdGFydCAgPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5MSw3ICs0ODksNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAyNCwKKwkJLnN0YXJ0ICA9IDIzLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC02OTgsMTMgKzY5NiwxMyBAQAogI2RlZmluZSBGQ0xLQkNSCQkweGE0MTUwMDBjCiBzdGF0aWMgdm9pZCBmc2ltY2tfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHN0YXR1cyA9IGN0cmxfaW5sKGNsay0+ZW5hYmxlX3JlZyk7CisJdTMyIHN0YXR1cyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAKIAkvKiB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KIAlzdGF0dXMgJj0gfjB4MDAwMDAwZmY7CiAJc3RhdHVzIHw9IDB4MDAwMDAwODA7CiAKLQljdHJsX291dGwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2ltY2tfY2xrX29wcyA9IHsKQEAgLTc1Myw2ICs3NTEsMjYgQEAKIAl9LAogfTsKIAorLyogSXJEQSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSXJEQSIsCisJCS5zdGFydCAgPSAweEE0NUQwMDAwLAorCQkuZW5kICAgID0gMHhBNDVEMDA0OSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMjAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX3NpciIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZWNvdmVjX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZoZWFydGJlYXRfZGV2aWNlLAogCSZub3JfZmxhc2hfZGV2aWNlLApAQCAtNzczLDggKzc5MSwxMCBAQAogCSZjYW1lcmFfZGV2aWNlc1sxXSwKIAkmY2FtZXJhX2RldmljZXNbMl0sCiAJJmZzaV9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAorI2lmZGVmIENPTkZJR19JMkMKICNkZWZpbmUgRUVQUk9NX0FERFIgMHg1MAogc3RhdGljIHU4IG1hY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYSwgdTggY29tbWFuZCkKIHsKQEAgLTgxNyw2ICs4MzcsMTIgQEAKIAkJbXNsZWVwKDEwKTsKIAl9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IHNoX2V0aF9pbml0KHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhICpwZCkKK3sKKwlwcl9lcnIoInVuYWJsZSB0byByZWFkIHNoX2V0aCBNQUMgYWRkcmVzc1xuIik7Cit9CisjZW5kaWYKIAogI2RlZmluZSBQT1JUX0hJWkEgMHhBNDA1MDE1OAogI2RlZmluZSBJT0RSSVZFQSAgMHhBNDA1MDE4QQpAQCAtODMxLDcgKzg1Nyw4IEBACiAJc3RydWN0IGNsayAqY2xrOwogCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KLQlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCisJc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGIHwKKwkJCQkJU1VTUF9TSF9SU1RBTkRCWSwKIAkJCQkJJmVjb3ZlYzI0X3NkcmFtX2VudGVyX3N0YXJ0LAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fbGVhdmVfc3RhcnQsCkBAIC04NTUsNyArODgyLDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEcxLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEcyLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEczLCAwKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQSkgJiB+KDB4MSA8PCAxKSkgLCBQT1JUX0hJWkEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9ISVpBKSAmIH4oMHgxIDw8IDEpKSAsIFBPUlRfSElaQSk7CiAKIAkvKiBlbmFibGUgU0gtRXRoICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMSwgTlVMTCk7CkBAIC04NzUsMTYgKzkwMiwxNiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xOS1NUQSwgICAgICAgTlVMTCk7CiAKIAkvKiBlbmFibGUgVVNCICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNEQ4MDAwMCk7Ci0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNEQ5MDAwMCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNEQ4MDAwMCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNEQ5MDAwMCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCMywgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQjQsICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEI1LCAgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEIzKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI0LCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI1LCAwKTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMTkyKTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMTkyKTsKIAogCWlmIChncGlvX2dldF92YWx1ZShHUElPX1BUQjMpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVTQjEgZnVuY3Rpb24gaXMgc2VsZWN0ZWRcbiIpOwpAQCAtOTI1LDcgKzk1Miw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERPTiwgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCAgTlVMTCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CiAKIAlncGlvX3JlcXVlc3QoR1BJT19QVEU2LCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVFUxLCBOVUxMKTsKQEAgLTkzNyw3ICs5NjQsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQTIsIDApOwogCiAJLyogSS9PIGJ1ZmZlciBkcml2ZSBhYmlsaXR5IGlzIGhpZ2ggKi8KLQljdHJsX291dHcoKGN0cmxfaW53KElPRFJJVkVBKSAmIH4weDAwYzApIHwgMHgwMDgwICwgSU9EUklWRUEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoSU9EUklWRUEpICYgfjB4MDBjMCkgfCAweDAwODAgLCBJT0RSSVZFQSk7CiAKIAlpZiAoZ3Bpb19nZXRfdmFsdWUoR1BJT19QVEU2KSkgewogCQkvKiBEVkkgKi8KQEAgLTEwNjksNyArMTA5Niw3IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRCNywgMCk7CiAKIAkvKiBJL08gYnVmZmVyIGRyaXZlIGFiaWxpdHkgaXMgaGlnaCBmb3IgU0RISTEgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KElPRFJJVkVBKSAmIH4weDMwMDApIHwgMHgyMDAwICwgSU9EUklWRUEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoSU9EUklWRUEpICYgfjB4MzAwMCkgfCAweDIwMDAgLCBJT0RSSVZFQSk7CiAjZWxzZQogCS8qIGVuYWJsZSBNU0lPRjAgb24gQ04xMSAobmVlZHMgRFMyLjQgc2V0IHRvIE9GRikgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9NU0lPRjBfVFhELCBOVUxMKTsKQEAgLTExMDcsNiArMTEzNCwxMSBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CTFJDSywgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQk8sIE5VTEwpOwogCisJLyogc2V0IFNQVTIgY2xvY2sgdG8gODMuNCBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJzcHVfY2xrIik7CisJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCA4MzMzMzMzMykpOworCWNsa19wdXQoY2xrKTsKKwogCS8qIGNoYW5nZSBwYXJlbnQgb2YgRlNJIEIgKi8KIAljbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2liX2NsayIpOwogCWNsa19yZWdpc3RlcigmZnNpbWNrYl9jbGspOwpAQCAtMTEyMyw2ICsxMTU1LDE3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlExLCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0ZOX0lOVENfSVJRMSk7CiAKKwkvKiBzZXQgVlBVIGNsb2NrIHRvIDE2NiBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJ2cHVfY2xrIik7CisJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCAxNjYwMDAwMDApKTsKKwljbGtfcHV0KGNsayk7CisKKwkvKiBlbmFibGUgSXJEQSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRVNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRVNSwgMCk7CisKIAkvKiBlbmFibGUgSTJDIGRldmljZSAqLwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyYzBfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGkyYzBfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwppbmRleCA4M2MyOGJjZC4uOTg5M2ZkMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKChjdHJsX2ludygweGE0MDAwNzAwKSAmIDB4ZjAwMCkgPT0gMHgyMDAwKSB7CisJaWYgKChfX3Jhd19yZWFkdygweGE0MDAwNzAwKSAmIDB4ZjAwMCkgPT0gMHgyMDAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3NzgwbXAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCQlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKaW5kZXggYjcyMWU4Ni4uMDgwNWIyMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKGN0cmxfaW53KDB4YTUwMDA2MDApKSB7CisJaWYgKF9fcmF3X3JlYWR3KDB4YTUwMDA2MDApKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3NzgwcnAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCQlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKaW5kZXggMzgxMWIwNi4uNTU4YjI0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKQEAgLTY2LDIwICs2NiwyMCBAQAogCiB1bnNpZ25lZCBjaGFyICogX19pbml0IGhpZ2hsYW5kZXJfcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKLQlpZiAoKGN0cmxfaW53KDB4YTQwMDAxNTgpICYgMHhmMDAwKSAhPSAweDEwMDApCisJaWYgKChfX3Jhd19yZWFkdygweGE0MDAwMTU4KSAmIDB4ZjAwMCkgIT0gMHgxMDAwKQogCQlyZXR1cm4gTlVMTDsKIAogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3Nzg1cnAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFNTUjEpOwkvKiBGUEdBIElSTFNTUjEoQ0ZfQ0QgY2xlYXIpICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfSVJMU1NSMSk7CS8qIEZQR0EgSVJMU1NSMShDRl9DRCBjbGVhcikgKi8KIAogCS8qIFNldHVwIHRoZSBGUEdBIElSTCAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFBSQSk7CS8qIEZQR0EgSVJMQSAqLwotCWN0cmxfb3V0dygweGU1OTgsIFBBX0lSTFBSQik7CS8qIEZQR0EgSVJMQiAqLwotCWN0cmxfb3V0dygweDcwNjAsIFBBX0lSTFBSQyk7CS8qIEZQR0EgSVJMQyAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFBSRCk7CS8qIEZQR0EgSVJMRCAqLwotCWN0cmxfb3V0dygweDQzMjEsIFBBX0lSTFBSRSk7CS8qIEZQR0EgSVJMRSAqLwotCWN0cmxfb3V0dygweGRjYmEsIFBBX0lSTFBSRik7CS8qIEZQR0EgSVJMRiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFBSQSk7CS8qIEZQR0EgSVJMQSAqLworCV9fcmF3X3dyaXRldygweGU1OTgsIFBBX0lSTFBSQik7CS8qIEZQR0EgSVJMQiAqLworCV9fcmF3X3dyaXRldygweDcwNjAsIFBBX0lSTFBSQyk7CS8qIEZQR0EgSVJMQyAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFBSRCk7CS8qIEZQR0EgSVJMRCAqLworCV9fcmF3X3dyaXRldygweDQzMjEsIFBBX0lSTFBSRSk7CS8qIEZQR0EgSVJMRSAqLworCV9fcmF3X3dyaXRldygweGRjYmEsIFBBX0lSTFBSRik7CS8qIEZQR0EgSVJMRiAqLwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCXJldHVybiBpcmwyaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCmluZGV4IDM3YjFhMmUuLjUyMjc4NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbCwgbWFzazsKIAlpbnQgcmV0ID0gMDsKIAotCWwgPSBjdHJsX2ludyhQQV9EQlNXKTsKKwlsID0gX19yYXdfcmVhZHcoUEFfREJTVyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gc3RhdGUgY2hhbmdlICovCiAJaWYgKHBzdy0+c3RhdGUpIHsKQEAgLTQ1LDcgKzQ1LDcgQEAKIG91dDoKIAkvKiBDbGVhciB0aGUgc3dpdGNoIElSUXMgKi8KIAlsIHw9ICgweDcgPDwgMTIpOwotCWN0cmxfb3V0dyhsLCBQQV9EQlNXKTsKKwlfX3Jhd193cml0ZXcobCwgUEFfREJTVyk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwppbmRleCBmNjYzYzE0Li5hZmZkNjY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwpAQCAtMzExLDEzICszMTEsMTMgQEAKICAqLwogc3RhdGljIGludCBpdmRyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8ICgxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfSVZEUkNUTCkgfCAoMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGl2ZHJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSAmIH4oMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0lWRFJDVEwpICYgfigxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGl2ZHJfY2xrX29wcyA9IHsKQEAgLTMzNyw3ICszMzcsNyBAQAogc3RhdGljIHZvaWQgcjc3ODBycF9wb3dlcl9vZmYodm9pZCkKIHsKIAlpZiAobWFjaF9pc19yNzc4MG1wKCkgfHwgbWFjaF9pc19yNzc4NXJwKCkpCi0JCWN0cmxfb3V0dygweDAwMDEsIFBBX1BPRkYpOworCQlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9QT0ZGKTsKIH0KIAogLyoKQEAgLTM0NSw3ICszNDUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgaGlnaGxhbmRlcl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCXUxNiB2ZXIgPSBjdHJsX2ludyhQQV9WRVJSRUcpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpOwogCWludCBpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciAlcyBzdXBwb3J0LlxuIiwKQEAgLTM3MCwxMiArMzcwLDEyIEBACiAJCWNsa19lbmFibGUoY2xrKTsKIAl9CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9PQkxFRCk7CS8qIENsZWFyIExFRC4gKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9PQkxFRCk7CS8qIENsZWFyIExFRC4gKi8KIAogCWlmIChtYWNoX2lzX3I3NzgwcnAoKSkKLQkJY3RybF9vdXR3KDB4MDAwMSwgUEFfU0RQT1cpOwkvKiBTRCBQb3dlciBPTiAqLworCQlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9TRFBPVyk7CS8qIFNEIFBvd2VyIE9OICovCiAKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgfCAweDAxLCBQQV9JVkRSQ1RMKTsJLyogU2kxMzExMiAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9JVkRSQ1RMKSB8IDB4MDEsIFBBX0lWRFJDVEwpOwkvKiBTaTEzMTEyICovCiAKIAlwbV9wb3dlcl9vZmYgPSByNzc4MHJwX3Bvd2VyX29mZjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCmluZGV4IGU4NTIxMmYuLmI0OTUzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwpAQCAtNTMsNyArNTMsNyBAQAogCWluZm8tPmFjX2xpbmVfc3RhdHVzID0gKGJhdHRlcnkgPiBIUDY4MF9CQVRURVJZX0FDX09OKSA/CiAJCQkgQVBNX0FDX09OTElORSA6IEFQTV9BQ19PRkZMSU5FOwogCi0JcGdkciA9IGN0cmxfaW5iKFBHRFIpOworCXBnZHIgPSBfX3Jhd19yZWFkYihQR0RSKTsKIAlpZiAocGdkciAmIFBHRFJfTUFJTl9CQVRURVJZX09VVCkgewogCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cwk9IEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVDsKIAkJaW5mby0+YmF0dGVyeV9mbGFnCT0gMHg4MDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwppbmRleCBkOTM2YzFhLi40NDk5YTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCkBAIC01MywxNyArNTMsMTcgQEAKIAlzaF93ZHRfd3JpdGVfY250KDApOwogCiAJLyogZGlzYWJsZSBQTEwxICovCi0JZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJZnJxY3IgJj0gfihGUlFDUl9QTExFTiB8IEZSUUNSX1BTVEJZKTsKLQljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwlfX3Jhd193cml0ZXcoZnJxY3IsIEZSUUNSKTsKIAogCS8qIGVuYWJsZSBzdGFuZGJ5ICovCi0Jc3RiY3IgPSBjdHJsX2luYihTVEJDUik7Ci0JY3RybF9vdXRiKHN0YmNyIHwgU1RCQ1JfU1RCWSB8IFNUQkNSX01TVFAyLCBTVEJDUik7CisJc3RiY3IgPSBfX3Jhd19yZWFkYihTVEJDUik7CisJX19yYXdfd3JpdGViKHN0YmNyIHwgU1RCQ1JfU1RCWSB8IFNUQkNSX01TVFAyLCBTVEJDUik7CiAKIAkvKiBzZXQgc2VsZi1yZWZyZXNoICovCi0JbWNyID0gY3RybF9pbncoTUNSKTsKLQljdHJsX291dHcobWNyICYgfk1DUl9SRlNILCBNQ1IpOworCW1jciA9IF9fcmF3X3JlYWR3KE1DUik7CisJX19yYXdfd3JpdGV3KG1jciAmIH5NQ1JfUkZTSCwgTUNSKTsKIAogCS8qIHNldCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWFzbSB2b2xhdGlsZSgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyX29sZCkpOwpAQCAtNzMsOCArNzMsOCBAQAogCSAgICAgICAmd2FrZXVwX3N0YXJ0LCAmd2FrZXVwX2VuZCAtICZ3YWtldXBfc3RhcnQpOwogCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKHZicl9uZXcpKTsKIAotCWN0cmxfb3V0dygwLCBSVENOVCk7Ci0JY3RybF9vdXR3KG1jciB8IE1DUl9SRlNIIHwgTUNSX1JNT0RFLCBNQ1IpOworCV9fcmF3X3dyaXRldygwLCBSVENOVCk7CisJX19yYXdfd3JpdGV3KG1jciB8IE1DUl9SRlNIIHwgTUNSX1JNT0RFLCBNQ1IpOwogCiAJY3B1X3NsZWVwKCk7CiAKQEAgLTgzLDE0ICs4MywxNCBAQAogCWZyZWVfcGFnZSh2YnJfbmV3KTsKIAogCS8qIGVuYWJsZSBQTEwxICovCi0JZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJZnJxY3IgfD0gRlJRQ1JfUFNUQlk7Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAJdWRlbGF5KDUwKTsKIAlmcnFjciB8PSBGUlFDUl9QTExFTjsKLQljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwlfX3Jhd193cml0ZXcoZnJxY3IsIEZSUUNSKTsKIAotCWN0cmxfb3V0YihzdGJjciwgU1RCQ1IpOworCV9fcmF3X3dyaXRlYihzdGJjciwgU1RCQ1IpOwogCiAJY2xlYXJfYmxfYml0KCk7CiB9CkBAIC0xMTUsMjEgKzExNSwyMSBAQAogCW91dHcoaGQ2NDQ2MV9zdGJjciwgSEQ2NDQ2MV9TVEJDUik7CiAjZW5kaWYKIAotCWN0cmxfb3V0YigweDFmLCBEQUNSKTsKKwlfX3Jhd193cml0ZWIoMHgxZiwgREFDUik7CiAKLQlzdGJjciA9IGN0cmxfaW5iKFNUQkNSKTsKLQljdHJsX291dGIoMHgwMSwgU1RCQ1IpOworCXN0YmNyID0gX19yYXdfcmVhZGIoU1RCQ1IpOworCV9fcmF3X3dyaXRlYigweDAxLCBTVEJDUik7CiAKLQlzdGJjcjIgPSBjdHJsX2luYihTVEJDUjIpOwotCWN0cmxfb3V0YigweDdmICwgU1RCQ1IyKTsKKwlzdGJjcjIgPSBfX3Jhd19yZWFkYihTVEJDUjIpOworCV9fcmF3X3dyaXRlYigweDdmICwgU1RCQ1IyKTsKIAogCW91dHcoMHhmMDdmLCBIRDY0NDYxX1NDUFVDUik7CiAKIAlwbV9lbnRlcigpOwogCiAJb3V0dygwLCBIRDY0NDYxX1NDUFVDUik7Ci0JY3RybF9vdXRiKHN0YmNyLCBTVEJDUik7Ci0JY3RybF9vdXRiKHN0YmNyMiwgU1RCQ1IyKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IsIFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IyLCBTVEJDUjIpOwogCiAjaWZkZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgogCWhkNjQ0NjFfc3RiY3IgPSBpbncoSEQ2NDQ2MV9TVEJDUik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggZTZkZDVlOS4uOGM5YWRkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwpAQCAtMTQ5LDE5ICsxNDksMTkgQEAKIAogCXNoX2RhY19vdXRwdXQoMCwgREFDX1NQRUFLRVJfVk9MVU1FKTsKIAlzaF9kYWNfZGlzYWJsZShEQUNfU1BFQUtFUl9WT0xVTUUpOwotCXY4ID0gY3RybF9pbmIoREFDUik7CisJdjggPSBfX3Jhd19yZWFkYihEQUNSKTsKIAl2OCAmPSB+REFDUl9EQUU7Ci0JY3RybF9vdXRiKHY4LERBQ1IpOworCV9fcmF3X3dyaXRlYih2OCxEQUNSKTsKIAotCXY4ID0gY3RybF9pbmIoU0NQRFIpOworCXY4ID0gX19yYXdfcmVhZGIoU0NQRFIpOwogCXY4IHw9IFNDUERSX1RTX1NDQU5fWCB8IFNDUERSX1RTX1NDQU5fWTsKIAl2OCAmPSB+U0NQRFJfVFNfU0NBTl9FTkFCTEU7Ci0JY3RybF9vdXRiKHY4LCBTQ1BEUik7CisJX19yYXdfd3JpdGViKHY4LCBTQ1BEUik7CiAKLQl2ID0gY3RybF9pbncoU0NQQ1IpOworCXYgPSBfX3Jhd19yZWFkdyhTQ1BDUik7CiAJdiAmPSB+U0NQQ1JfVFNfTUFTSzsKIAl2IHw9IFNDUENSX1RTX0VOQUJMRTsKLQljdHJsX291dHcodiwgU0NQQ1IpOworCV9fcmF3X3dyaXRldyh2LCBTQ1BDUik7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaHA2eHhfZGV2aWNlc19zZXR1cCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKaW5kZXggNWQ3YjVkOS4uYjJjZDBlZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogCQkgKiB1c2UgMS44IFYgZm9yIFZjY1FfVklPCiAJCSAqIHVzZSAyLjg1ViBmb3IgVmNjUV9TUgogCQkgKi8KLQkJY3RybF9vdXR3KChjdHJsX2ludyhEUlZDUkIpICYgfjB4MDAwMykgfCAweDAwMDEsIERSVkNSQik7CisJCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoRFJWQ1JCKSAmIH4weDAwMDMpIHwgMHgwMDAxLCBEUlZDUkIpOwogCiAJCS8qIHJlc2V0IGNsZWFyICovCiAJCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1BUQjQsIE5VTEwpOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDkyLDEzICs0OTIsMTMgQEAKIAlpZiAoa2ZyMnIwOV91c2IwX2dhZGdldF9pMmNfc2V0dXAoKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsgLyogdW5hYmxlIHRvIGNvbmZpZ3VyZSB1c2luZyBpMmMgKi8KIAotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsgLyogUi1zdGFuZGJ5IGRpc2FibGVzIFVTQiBjbG9jayAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BUVjYsIE5VTEwpOyAvKiBVU0JDTEtfT04gKi8KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFY2LCAxKTsgLyogVVNCQ0xLX09OID0gSCAqLwogCW1zbGVlcCgyMCk7IC8qIHdhaXQgMjBtcyB0byBsZXQgdGhlIGNsb2NrIHNldHRsZSAqLwogCWNsa19lbmFibGUoY2xrX2dldChOVUxMLCAidXNiMCIpKTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTI2LDEyICs1MjYsMTIgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEczLCAxKTsgLyogSFBPTl9PTiA9IEggKi8KIAogCS8qIHNldHVwIE5PUiBmbGFzaCBhdCBDUzAgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQlNDX0NTMEJDUik7Ci0JY3RybF9vdXRsKDB4MDAwMDA1MDAsIEJTQ19DUzBXQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBCU0NfQ1MwQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDUwMCwgQlNDX0NTMFdDUik7CiAKIAkvKiBzZXR1cCBOQU5EIGZsYXNoIGF0IENTNCAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBCU0NfQ1M0QkNSKTsKLQljdHJsX291dGwoMHgwMDAwMDUwMCwgQlNDX0NTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIEJTQ19DUzRCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwNTAwLCBCU0NfQ1M0V0NSKTsKIAogCS8qIHNldHVwIEtFWVNDIHBpbnMgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCA1MjgwMTMxLi4wMWU2YWJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC03NiwzOSArNzYsMzkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTE6CS8qIHdyaXRlIGJ5dGUgKi8KLQkJY3RybF9vdXRiKCh1bnNpZ25lZCBjaGFyKSgweDBmZiAmIGRhdGEpLCBhZGRyKTsKKwkJX19yYXdfd3JpdGViKCh1bnNpZ25lZCBjaGFyKSgweDBmZiAmIGRhdGEpLCBhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTI6CS8qIHdyaXRlIHdvcmQgKi8KIAkJaWYgKGFkZHIgJiAweDAxKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQljdHJsX291dHcoKHVuc2lnbmVkIHNob3J0IGludCkoMHgwZmZmZiAmIGRhdGEpLCBhZGRyKTsKKwkJX19yYXdfd3JpdGV3KCh1bnNpZ25lZCBzaG9ydCBpbnQpKDB4MGZmZmYgJiBkYXRhKSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEE0OgkvKiB3cml0ZSBsb25nICovCiAJCWlmIChhZGRyICYgMHgwMykgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEExOgkvKiByZWFkIGJ5dGUgKi8KLQkJZGF0YSA9IGN0cmxfaW5iKGFkZHIpOworCQlkYXRhID0gX19yYXdfcmVhZGIoYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEEyOgkvKiByZWFkIHdvcmQgKi8KIAkJaWYgKGFkZHIgJiAweDAxKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlkYXRhID0gY3RybF9pbncoYWRkcik7CisJCWRhdGEgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NHR0lPREFUQTQ6CS8qIHJlYWQgbG9uZyAqLwogCQlpZiAoYWRkciAmIDB4MDMpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYwppbmRleCA3YjI4NGNkLi45NmYzOGE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jCkBAIC0yMiwxNCArMjIsMTQgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIG1hc2sgPSAweGZmIF4gKDB4MDEgPDwgKGlycSAtIDUpKTsKIAotCWN0cmxfb3V0YihjdHJsX2luYihQQV9JTUFTSykgJiBtYXNrLCBQQV9JTUFTSyk7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0lNQVNLKSAmIG1hc2ssIFBBX0lNQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgY2hhciB2YWx1ZSA9ICgweDAxIDw8IChpcnEgLSA1KSk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUEFfSU1BU0spIHwgdmFsdWUsIFBBX0lNQVNLKTsKKwlfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIoUEFfSU1BU0spIHwgdmFsdWUsIFBBX0lNQVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYW5kaXNrX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC01Miw1ICs1Miw1IEBACiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQllbmFibGVfbGFuZGlza19pcnEoaSk7CiAJfQotCWN0cmxfb3V0YigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKKwlfX3Jhd193cml0ZWIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMKaW5kZXggZTZiMGVmYS4uYmVmODM1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYwpAQCAtMjUsNyArMjUsNyBAQAogCXVuc2lnbmVkIGludCBzd192YWx1ZTsKIAlpbnQgcmV0ID0gMDsKIAotCXN3X3ZhbHVlID0gKDB4MGZmICYgKH5jdHJsX2luYihQQV9TVEFUVVMpKSk7CisJc3dfdmFsdWUgPSAoMHgwZmYgJiAofl9fcmF3X3JlYWRiKFBBX1NUQVRVUykpKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUncyBubyBzdGF0ZSBjaGFuZ2UgKi8KIAlpZiAocHN3LT5zdGF0ZSkgewpAQCAtNDIsNyArNDIsNyBAQAogCiBvdXQ6CiAJLyogQ2xlYXIgdGhlIHN3aXRjaCBJUlFzICovCi0JY3RybF9vdXRiKDB4MDAsIFBBX1BXUklOVF9DTFIpOworCV9fcmF3X3dyaXRlYigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jCmluZGV4IGRiMjJlYTIuLjUwMzM3YWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwpAQCAtMjUsNyArMjUsNyBAQAogCiBzdGF0aWMgdm9pZCBsYW5kaXNrX3Bvd2VyX29mZih2b2lkKQogewotICAgICAgICBjdHJsX291dGIoMHgwMSwgUEFfU0hVVERPV04pOworICAgICAgICBfX3Jhd193cml0ZWIoMHgwMSwgUEFfU0hVVERPV04pOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbM107CkBAIC02Myw3ICs2Myw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODgsNyArODgsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGxhbmRpc2tfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKICAgICAgICAgLyogTEVEIE9OICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKFBBX0xFRCkgfCAweDAzLCBQQV9MRUQpOworCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9MRUQpIHwgMHgwMywgUEFfTEVEKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkktTyBEQVRBIERFVklDRSwgSU5DLiBcIkxBTkRJU0sgU2VyaWVzXCIgc3VwcG9ydC5cbiIpOwogCXBtX3Bvd2VyX29mZiA9IGxhbmRpc2tfcG93ZXJfb2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYwppbmRleCAyYjBiNTgxLi43OWI0ZTBkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKQEAgLTU2LDggKzU2LDggQEAKIAkvKiBvcGVuIEkvTyBhcmVhIHdpbmRvdyAqLwogCXBhZGRyYmFzZSA9IHZpcnRfdG9fcGh5cygodm9pZCopUEFfQVJFQTVfSU8pOwogCXBzaXplID0gUEFHRV9TSVpFOwotCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoIDEgLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2YwX2lvX2Jhc2UgPSAodTMyKXAzX2lvcmVtYXAocGFkZHJiYXNlLCBwc2l6ZSwgcHJvdC5wZ3Byb3QpOworCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOworCWNmMF9pb19iYXNlID0gKHUzMilpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBwc2l6ZSwgcGdwcm90X3ZhbChwcm90KSk7CiAJaWYgKCFjZjBfaW9fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIiAsIF9fZnVuY19fICk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCmluZGV4IDUyZGQ3NDguLjI5NjBjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKQEAgLTE0MSwxMCArMTQxLDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogCS8qIFN5c3RlbSBib2FyZCBwcmVzZW50LCBqdXN0IG1ha2UgYSBkdW1teSBTUkFNIGFjY2Vzcy4gIChDUzAgd2lsbCBiZQogCSAgIG1hcHBlZCB0byBQQ0kgbWVtb3J5LCBwcm9iYWJseSBnb29kIHRvIGF2b2lkIGl0LikgKi8KLQljdHJsX2ludygweGE2ODAwMDAwKTsKKwlfX3Jhd19yZWFkdygweGE2ODAwMDAwKTsKICNlbHNlCiAJLyogQ1MwIHdpbGwgYmUgbWFwcGVkIHRvIGZsYXNoLCBST00gZXRjIHNvIHNhZmUgdG8gYWNjZXNzIGl0LiAqLwotCWN0cmxfaW53KDB4YTAwMDAwMDApOworCV9fcmF3X3JlYWR3KDB4YTAwMDAwMDApOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCmluZGV4IGI1NTE5NjMuLmEyNmQxNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwpAQCAtODgsNyArODgsNyBAQAogCWZwZ2FJcnEgPSBmcGdhSXJxVGFibGVbaXJxXS5mcGdhSXJxOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KLQljdHJsX291dGwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CisJX19yYXdfd3JpdGVsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfbWljcm9kZXZfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMDcsMTMgKzEwNywxMyBAQAogCXByaW9yaXR5UmVnID0gTUlDUk9ERVZfRlBHQV9JTlRQUklfUkVHKGZwZ2FJcnEpOwogCiAJLyogc2V0IHByaW9yaXR5IGZvciB0aGUgaW50ZXJydXB0ICovCi0JcHJpb3JpdGllcyA9IGN0cmxfaW5sKHByaW9yaXR5UmVnKTsKKwlwcmlvcml0aWVzID0gX19yYXdfcmVhZGwocHJpb3JpdHlSZWcpOwogCXByaW9yaXRpZXMgJj0gfk1JQ1JPREVWX0ZQR0FfSU5UUFJJX01BU0soZnBnYUlycSk7CiAJcHJpb3JpdGllcyB8PSBNSUNST0RFVl9GUEdBX0lOVFBSSV9MRVZFTChmcGdhSXJxLCBwcmkpOwotCWN0cmxfb3V0bChwcmlvcml0aWVzLCBwcmlvcml0eVJlZyk7CisJX19yYXdfd3JpdGVsKHByaW9yaXRpZXMsIHByaW9yaXR5UmVnKTsKIAogCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KLQljdHJsX291dGwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URU5CX1JFRyk7CisJX19yYXdfd3JpdGVsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVEVOQl9SRUcpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlc2lyZWQgaXJxIGhhbmRsZXIgdG8gYmUgYSBNaWNyb0RldiB0eXBlICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpbnQgaTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKH4wdWwsIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CisJX19yYXdfd3JpdGVsKH4wdWwsIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX0lSUVM7IGkrKykKIAkJbWFrZV9taWNyb2Rldl9pcnEoaSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggNTA3Yzc3Yi4uYmUzMDBhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAxMDEsCisJCS5zdGFydAk9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDMxLDcgKzQzMSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyBvdjc3MjVfaW5mbyA9IHsKLQkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKKwkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIG92NzcyNV9saW5rID0gewpAQCAtNDk2LDI4ICs0OTYsMTYgQEAKIAkJCQkJJm1pZ29yX3NkcmFtX2VudGVyX2VuZCwKIAkJCQkJJm1pZ29yX3NkcmFtX2xlYXZlX3N0YXJ0LAogCQkJCQkmbWlnb3Jfc2RyYW1fbGVhdmVfZW5kKTsKLSNpZmRlZiBDT05GSUdfUE0KIAkvKiBMZXQgRDExIExFRCBzaG93IFNUQVRVUzAgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMwLCBOVUxMKTsKIAogCS8qIExpdCBEMTIgTEVEIHNob3cgUERTVEFUVVMgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7Ci0jZWxzZQotCS8qIExpdCBEMTEgTEVEICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKLQotCS8qIExpdCBEMTIgTEVEICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKLSNlbmRpZgogCiAJLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAsIFNldHVwIENTNCBmb3IgMTYtYml0IGZhc3QgYWNjZXNzICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMCwgTlVMTCk7Ci0JY3RybF9vdXRsKDB4MDAwMDM0MDAsIEJTQ19DUzRCQ1IpOwotCWN0cmxfb3V0bCgweDAwMTEwMDgwLCBCU0NfQ1M0V0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMzQwMCwgQlNDX0NTNEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMTAwODAsIEJTQ19DUzRXQ1IpOwogCiAJLyogS0VZU0MgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKQEAgLTUzMyw3ICs1MjEsNyBAQAogCiAJLyogTkFORCBGbGFzaCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7Ci0JY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoQlNDX0NTNkFCQ1IpICYgfjB4MDYwMCkgfCAweDAyMDAsIEJTQ19DUzZBQkNSKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEExLCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUQTEpOwogCkBAIC02MjcsNyArNjE1LDcgQEAKICNlbHNlCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMCwgMSk7CiAjZW5kaWYKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSB8IDB4MjAwMCwgUE9SVF9NU0VMQ1JCKTsgLyogRDE1LT5EOCAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJm1pZ29yX2NldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYwppbmRleCA3OGQ3YjI3Li41NzRmMDA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiB7CiAJc3RydWN0IGludGNfZGVzYyAqZDsKIAotCXN3aXRjaCAoY3RybF9pbncoUEFfVkVSUkVHKSAmIDB4ZjApIHsKKwlzd2l0Y2ggKF9fcmF3X3JlYWR3KFBBX1ZFUlJFRykgJiAweGYwKSB7CiAjaWZkZWYgQ09ORklHX1JUUzc3NTFSMkRfUExVUwogCWNhc2UgMHgxMDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUjJELVBMVVMgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBSMkQgaW50ZXJydXB0IGNvbnRyb2xsZXIgMHglMDR4XG4iLAotCQkgICAgICAgY3RybF9pbncoUEFfVkVSUkVHKSk7CisJCSAgICAgICBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKaW5kZXggYTYyNWVjYi4uYjg0ZGY2YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCkBAIC03MCw3ICs3MCw3IEBACiBzdGF0aWMgdm9pZCByMmRfY2hpcF9zZWxlY3Qoc3RydWN0IHNoX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHN0YXRlKQogewogCUJVR19PTihjcyAhPSAwKTsgIC8qIFNpbmdsZSBFcHNvbiBSVEMtOTcwMUpFIGF0dGFjaGVkIG9uIENTMCAqLwotCWN0cmxfb3V0dyhzdGF0ZSA9PSBCSVRCQU5HX0NTX0FDVElWRSwgUEFfUlRDQ0UpOworCV9fcmF3X3dyaXRldyhzdGF0ZSA9PSBCSVRCQU5HX0NTX0FDVElWRSwgUEFfUlRDQ0UpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX3NwaV9pbmZvIHNwaV9pbmZvID0gewpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIHN0YXRpYyB2b2lkIHJ0czc3NTFyMmRfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY3RybF9vdXR3KDB4MDAwMSwgUEFfUE9XT0ZGKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9QT1dPRkYpOwogfQogCiAvKgpAQCAtMjcxLDE0ICsyNzEsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBydHM3NzUxcjJkX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJdm9pZCBfX2lvbWVtICpzbTUwMV9yZWc7Ci0JdTE2IHZlciA9IGN0cmxfaW53KFBBX1ZFUlJFRyk7CisJdTE2IHZlciA9IF9fcmF3X3JlYWR3KFBBX1ZFUlJFRyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgUlRTNzc1MVIyRCBzdXBwb3J0LlxuIik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJGUEdBIHZlcnNpb246JWQgKHJldmlzaW9uOiVkKVxuIiwKIAkJCQkJKHZlciA+PiA0KSAmIDB4ZiwgdmVyICYgMHhmKTsKIAotCWN0cmxfb3V0dygweDAwMDAsIFBBX09VVFBPUlQpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX09VVFBPUlQpOwogCXBtX3Bvd2VyX29mZiA9IHJ0czc3NTFyMmRfcG93ZXJfb2ZmOwogCiAJLyogc201MDEgZHJhbSBjb25maWd1cmF0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCBjMzc2MTdlNi4uNGZhMDhiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9SWEQwLCBOVUxMKTsKIAogCS8qIFNldHVwIExBTjkxMTg6IENTMSBpbiAxNi1iaXQgQmlnIEVuZGlhbiBNb2RlLCBJUlEwIGF0IFBvcnQgQiAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCAweGZmZmMwMDA4KTsgLyogQ1MxQkNSICovCisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIDB4ZmZmYzAwMDgpOyAvKiBDUzFCQ1IgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlEwX1BCLCBOVUxMKTsKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyc2s3MjAzX2RldmljZXMsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODU1NTU4MS4uZTVmNzU2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMzcsOSArMzcsOSBAQAogewogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFNESzc3ODAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAotCWN0cmxfb3V0dygweEZGRkYsIEZQR0FfSVJRME1SKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBGUEdBX0lSUTBNUik7CiAJLyogU2V0dXAgSVJMIDAtMyAqLwotCWN0cmxfb3V0dygweDAwMDMsIEZQR0FfSU1TUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMywgRlBHQV9JTVNSKTsKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZmcGdhX2ludGNfZGVzYyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFhZDk0YTcuLjRkYTM4ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0yMCwyNyArMjAsMTggQEAKIAogI2RlZmluZSBHUElPX1BFQ1IgICAgICAgIDB4RkZFQTAwMDgKIAotLy8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKKy8qIEhlYXJ0YmVhdCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBTTUM5MXggKi8KQEAgLTgzLDggKzc0LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNkazc3ODBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1MTYgdmVyID0gY3RybF9pbncoRlBHQV9GUFZFUlIpOwotCXUxNiBkYXRlU3RhbXAgPSBjdHJsX2ludyhGUEdBX0ZQREFURVIpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhGUEdBX0ZQVkVSUik7CisJdTE2IGRhdGVTdGFtcCA9IF9fcmF3X3JlYWR3KEZQR0FfRlBEQVRFUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODAgc3VwcG9ydC5cbiIpOwogCXByaW50ayhLRVJOX0lORk8gIkJvYXJkIHZlcnNpb246ICVkIChyZXZpc2lvbiAlZCksICIKQEAgLTk0LDcgKzg1LDcgQEAKIAkJCSBkYXRlU3RhbXApOwogCiAJLyogU2V0dXAgcGluIG11eCdpbmcgZm9yIFBDSUMgKi8KLQljdHJsX291dHcoMHgwMDAwLCBHUElPX1BFQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQk6PSBzZXR1cC5vIGZwZ2EubyBpcnEubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZWM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFNESzc3ODYgRlBHQSBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgRlBHQV9SRUdTX09GRlNFVAkweDAzZmZmODAwCisjZGVmaW5lIEZQR0FfUkVHU19TSVpFCQkweDQ5MAorCisvKgorICogVGhlIEZQR0EgY2FuIGJlIG1hcHBlZCBpbiBhbnkgb2YgdGhlIGdlbmVyYWxseSBhdmFpbGFibGUgYXJlYXMsCisgKiBzbyB3ZSBhdHRlbXB0IHRvIHNjYW4gZm9yIGl0IHVzaW5nIHRoZSBmaXhlZCBTUlNUUiByZWFkIG1hZ2ljLgorICoKKyAqIE9uY2UgdGhlIEZQR0EgaXMgbG9jYXRlZCwgdGhlIHJlc3Qgb2YgdGhlIG1hcHBpbmcgZGF0YSBmb3IgdGhlIG90aGVyCisgKiBjb21wb25lbnRzIGNhbiBiZSBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGZyb20gaXRzIHNlY3Rpb24gbWFwcGluZworICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZGs3Nzg2X2ZwZ2FfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFyZWE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBhcmVhcyB3aGVyZSB0aGUgRlBHQSBjb3VsZCBiZSBtYXBwZWQuCisJICogVGhlIHBvc3NpYmxlIHJhbmdlIGlzIGFueXdoZXJlIGZyb20gYXJlYSAwIHRocm91Z2ggNiwgYXJlYSA3CisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJZm9yIChhcmVhID0gUEFfQVJFQTA7IGFyZWEgPCBQQV9BUkVBNzsgYXJlYSArPSBTWl82NE0pIHsKKwkJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShhcmVhICsgRlBHQV9SRUdTX09GRlNFVCwgRlBHQV9SRUdTX1NJWkUpOworCQlpZiAoIWJhc2UpIHsKKwkJCS8qIEZhaWxlZCB0byByZW1hcCB0aGlzIGFyZWEsIG1vdmUgYWxvbmcuICovCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpb3JlYWQxNihiYXNlICsgU1JTVFIpID09IFNSU1RSX01BR0lDKQorCQkJcmV0dXJuIGJhc2U7CS8qIEZvdW5kIGl0ISAqLworCisJCWlvdW5tYXAoYmFzZSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX2Jhc2U7CisKK3ZvaWQgX19pbml0IHNkazc3ODZfZnBnYV9pbml0KHZvaWQpCit7CisJdTE2IHZlcnNpb24sIGRhdGU7CisKKwlzZGs3Nzg2X2ZwZ2FfYmFzZSA9IHNkazc3ODZfZnBnYV9wcm9iZSgpOworCWlmICh1bmxpa2VseSghc2RrNzc4Nl9mcGdhX2Jhc2UpKSB7CisJCXBhbmljKCJGUEdBIGRldGVjdGlvbiBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZlcnNpb24gPSBmcGdhX3JlYWRfcmVnKEZQR0FWUik7CisJZGF0ZSA9IGZwZ2FfcmVhZF9yZWcoRlBHQURSKTsKKworCXByX2luZm8oIlx0RlBHQSB2ZXJzaW9uOlx0JWQuJWQgKGJ1aWx0IG9uICVkLyVkLyVkKVxuIiwKKwkJYmNkMmJpbih2ZXJzaW9uID4+IDgpICYgMHhmLCBiY2QyYmluKHZlcnNpb24gJiAweGYpLAorCQkoKGRhdGUgPj4gMTIpICYgMHhmKSArIDIwMDAsCisJCShkYXRlID4+IDgpICYgMHhmLCBiY2QyYmluKGRhdGUgJiAweGZmKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5NDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogU0RLNzc4NiBGUEdBIElSUSBDb250cm9sbGVyIFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KKworZW51bSB7CisJQVRBX0lSUV9CSVQJCT0gMSwKKwlTUElfQlVTWV9CSVQJCT0gMiwKKwlMSVJRNV9CSVQJCT0gMywKKwlMSVJRNl9CSVQJCT0gNCwKKwlMSVJRN19CSVQJCT0gNSwKKwlMSVJROF9CSVQJCT0gNiwKKwlLRVlfSVJRX0JJVAkJPSA3LAorCVBFTl9JUlFfQklUCQk9IDgsCisJRVRIX0lSUV9CSVQJCT0gOSwKKwlSVENfQUxBUk1fQklUCQk9IDEwLAorCUNSWVNUQUxfRkFJTF9CSVQJPSAxMiwKKwlFVEhfUE1FX0JJVAkJPSAxNCwKK307CisKK3ZvaWQgX19pbml0IHNkazc3ODZfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogRW5hYmxlIHByaW9yaXR5IGVuY29kaW5nIGZvciBhbGwgSVJMcyAqLworCWZwZ2Ffd3JpdGVfcmVnKGZwZ2FfcmVhZF9yZWcoSU5UTVNSKSB8IDB4MDMwMywgSU5UTVNSKTsKKworCS8qIENsZWFyIEZQR0EgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKwlmcGdhX3dyaXRlX3JlZygweDAwMDAsIElOVEFTUik7CisJZnBnYV93cml0ZV9yZWcoMHgwMDAwLCBJTlRCU1IpOworCisJLyogVW5tYXNrIEZQR0EgaW50ZXJydXB0cyAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoSU5UQU1SKTsKKwl0bXAgJj0gfigxIDw8IEVUSF9JUlFfQklUKTsKKwlmcGdhX3dyaXRlX3JlZyh0bXAsIElOVEFNUik7CisKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDc2NTRfTUFTSyk7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODYgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZjhiMCwKKwkuZW5kCQk9IDB4MDdmZmY4YjAgKyBzaXplb2YodTE2KSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IDB4MDdmZmZmMDAsCisJCS5lbmQJCT0gMHgwN2ZmZmYwMCArIFNaXzI1NiAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LWlycSIsCisJCS5zdGFydAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmVuZAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19mcGdhX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDA3ZmZmOWUwLAorCS5lbmQJCT0gMHgwN2ZmZjllMCArIFNaXzMyIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWJ1c19mcGdhX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNkazc3ODYiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc21idXNfZnBnYV9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21idXNfcGNpZV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZmMzMCwKKwkuZW5kCQk9IDB4MDdmZmZjMzAgKyBTWl8zMiAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21idXNfcGNpZV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1zZGs3Nzg2IiwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNtYnVzX3BjaWVfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2RrNzc4Nl9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm1heDY5MDAiLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21zYzkxMXhfZGV2aWNlLAorCSZzbWJ1c19mcGdhX2RldmljZSwKKwkmc21idXNfcGNpZV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IHNkazc3ODZfaTJjX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qCisJICogSGFuZCBvdmVyIEkyQyBjb250cm9sIHRvIHRoZSBGUEdBLgorCSAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoU0JDUik7CisJdG1wICY9IH5TQ0JSX0kyQ0NFTjsKKwl0bXAgfD0gU0NCUl9JMkNNRU47CisJZnBnYV93cml0ZV9yZWcodG1wLCBTQkNSKTsKKworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBzZGs3Nzg2X2kyY19kZXZpY2VzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHNkazc3ODZfaTJjX2RldmljZXMpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2RrNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc4Nl9kZXZpY2VzLCBBUlJBWV9TSVpFKHNoNzc4Nl9kZXZpY2VzKSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzZGs3Nzg2X2kyY19zZXR1cCgpOworfQorX19pbml0Y2FsbChzZGs3Nzg2X2RldmljZXNfc2V0dXApOworCitzdGF0aWMgaW50IHNkazc3ODZfbW9kZV9waW5zKHZvaWQpCit7CisJcmV0dXJuIGZwZ2FfcmVhZF9yZWcoTU9EU1dSKTsKK30KKworc3RhdGljIGludCBzZGs3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkazc3ODZfcmVzdGFydChjaGFyICpjbWQpCit7CisJZnBnYV93cml0ZV9yZWcoMHhhNWE1LCBTUlNUUik7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2RrNzc4Nl9zZXR1cChjaGFyICoqY21kbGluZV9wKQoreworCXByX2luZm8oIlJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4NiBzdXBwb3J0OlxuIik7CisKKwlzZGs3Nzg2X2ZwZ2FfaW5pdCgpOworCisJcHJfaW5mbygiXHRQQ0IgcmV2aXNpb246XHQlZFxuIiwgZnBnYV9yZWFkX3JlZyhQQ0JSUikgJiAweGYpOworCisJbWFjaGluZV9vcHMucmVzdGFydCA9IHNkazc3ODZfcmVzdGFydDsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3Nkazc3ODYgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIlNESzc3ODYiLAorCS5tdl9zZXR1cAkJPSBzZGs3Nzg2X3NldHVwLAorCS5tdl9tb2RlX3BpbnMJCT0gc2RrNzc4Nl9tb2RlX3BpbnMsCisJLm12X2Nsa19pbml0CQk9IHNkazc3ODZfY2xrX2luaXQsCisJLm12X2luaXRfaXJxCQk9IHNkazc3ODZfaW5pdF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwppbmRleCAxODA0NTU2Li5hZGFkYzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwpAQCAtMTYsNyArMTYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKIHsKLQljdHJsX2ludygweDIwMDAwMDAwKTsgIC8qIFAyIFJPTSBBcmVhICovCisJX19yYXdfcmVhZHcoMHgyMDAwMDAwMCk7ICAvKiBQMiBST00gQXJlYSAqLwogfQogCiAvKiBNUzc3NTAgcmVxdWlyZXMgc3BlY2lhbCB2ZXJzaW9ucyBvZiBpbiosIG91dCogcm91dGluZXMsIHNpbmNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMKaW5kZXggYWVmN2YwNS4uOGQ4MjE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHRoZSBwcmlvcml0eSBpbiBJUFIgdG8gMCAqLwotCXZhbCA9IGN0cmxfaW53KElOVENfSVBSMDEpOworCXZhbCA9IF9fcmF3X3JlYWR3KElOVENfSVBSMDEpOwogCXZhbCAmPSBtYXNrOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCS8qIEZQR0EgbWFzayBzZXQgKi8KLQltc2swID0gY3RybF9pbncoSU5UTVNLMCk7Ci0JbXNrMSA9IGN0cmxfaW53KElOVE1TSzEpOworCW1zazAgPSBfX3Jhd19yZWFkdyhJTlRNU0swKTsKKwltc2sxID0gX19yYXdfcmVhZHcoSU5UTVNLMSk7CiAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRMF9JUlE6CkBAIC01MSw4ICs1MSw4IEBACiAJCW1zazEgfD0gMHgwMGZmOwogCQlicmVhazsKIAl9Ci0JY3RybF9vdXR3KG1zazAsIElOVE1TSzApOwotCWN0cmxfb3V0dyhtc2sxLCBJTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcobXNrMCwgSU5UTVNLMCk7CisJX19yYXdfd3JpdGV3KG1zazEsIElOVE1TSzEpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3MjA2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNjIsMTMgKzYyLDEzIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JdmFsID0gY3RybF9pbncoSU5UQ19JUFIwMSk7CisJdmFsID0gX19yYXdfcmVhZHcoSU5UQ19JUFIwMSk7CiAJdmFsIHw9IHZhbHVlOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCiAJLyogRlBHQSBtYXNrIHJlc2V0ICovCi0JbXNrMCA9IGN0cmxfaW53KElOVE1TSzApOwotCW1zazEgPSBjdHJsX2ludyhJTlRNU0sxKTsKKwltc2swID0gX19yYXdfcmVhZHcoSU5UTVNLMCk7CisJbXNrMSA9IF9fcmF3X3JlYWR3KElOVE1TSzEpOwogCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUTBfSVJROgpAQCAtODIsMTkgKzgyLDIwIEBACiAJCW1zazEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CiAJfQotCWN0cmxfb3V0dyhtc2swLCBJTlRNU0swKTsKLQljdHJsX291dHcobXNrMSwgSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KG1zazAsIElOVE1TSzApOworCV9fcmF3X3dyaXRldyhtc2sxLCBJTlRNU0sxKTsKIH0KIAogc3RhdGljIHZvaWQgZW9pX3NlNzIwNl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBzaG9ydCBzdHMwLHN0czE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQorCWlmICghKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX3NlNzIwNl9pcnEoaXJxKTsKIAkvKiBGUEdBIGlzciBjbGVhciAqLwotCXN0czAgPSBjdHJsX2ludyhJTlRTVFMwKTsKLQlzdHMxID0gY3RybF9pbncoSU5UU1RTMSk7CisJc3RzMCA9IF9fcmF3X3JlYWR3KElOVFNUUzApOworCXN0czEgPSBfX3Jhd19yZWFkdyhJTlRTVFMxKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlEwX0lSUToKQEAgLTEwOCw4ICsxMDksOCBAQAogCQlzdHMxICY9IH4weDAwZmY7CiAJCWJyZWFrOwogCX0KLQljdHJsX291dHcoc3RzMCwgSU5UU1RTMCk7Ci0JY3RybF9vdXR3KHN0czEsIElOVFNUUzEpOworCV9fcmF3X3dyaXRldyhzdHMwLCBJTlRTVFMwKTsKKwlfX3Jhd193cml0ZXcoc3RzMSwgSU5UU1RTMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MjA2X2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0xMzYsMTEgKzEzNywxMSBAQAogCW1ha2Vfc2U3MjA2X2lycShJUlEwX0lSUSk7IC8qIFNNQzkxQzExMSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlExX0lSUSk7IC8qIEFUQSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlEzX0lSUSk7IC8qIFNMT1QgLyBQQ00gKi8KLQljdHJsX291dHcoaW53KElOVENfSUNSMSkgfCAweDAwMGIgLElOVENfSUNSMSApIDsgLyogSUNSMSAqLworCV9fcmF3X3dyaXRldyhpbncoSU5UQ19JQ1IxKSB8IDB4MDAwYiAsSU5UQ19JQ1IxICkgOyAvKiBJQ1IxICovCiAKIAkvKiBGUEdBIFN5c3RlbSByZWdpc3RlciBzZXR1cCovCi0JY3RybF9vdXR3KDB4MDAwMCxJTlRTVFMwKTsgLyogQ2xlYXIgSU5UU1RTMCAqLwotCWN0cmxfb3V0dygweDAwMDAsSU5UU1RTMSk7IC8qIENsZWFyIElOVFNUUzEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLElOVFNUUzApOyAvKiBDbGVhciBJTlRTVFMwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCxJTlRTVFMxKTsgLyogQ2xlYXIgSU5UU1RTMSAqLwogCS8qIElSUTA9TEFOLCBJUlExPUFUQSwgSVJRMz1TTFQsUENNICovCi0JY3RybF9vdXR3KDB4MDAwMSxJTlRTRUwpOworCV9fcmF3X3dyaXRldygweDAwMDEsSU5UU0VMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMKaW5kZXggZjU0NjYzODQuLjhmNWM2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCkBAIC01MCwxNSArNTAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gMzIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtNjcsOCArNjQsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2U3MjA2X2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCmluZGV4IDA1MWMyOWQuLmQ0MzA1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKQEAgLTE2LDE2ICsxNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWFjaC1zZS9tYWNoL3NlNzM0My5oPgogCit1bnNpZ25lZCBpbnQgc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9OUl0gPSB7IDAsIH07CisKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2U3MzQzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKLQljdHJsX291dHcoY3RybF9pbncoUEFfQ1BMRF9JTVNLKSB8IDEgPDwgYml0LCBQQV9DUExEX0lNU0spOworCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0NQTERfSU1TSykgfCAxIDw8IGJpdCwgUEFfQ1BMRF9JTVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzM0M19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gU0U3MzQzX0ZQR0FfSVJRX0JBU0U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0NQTERfSU1TSykgJiB+KDEgPDwgYml0KSwgUEFfQ1BMRF9JTVNLKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9DUExEX0lNU0spICYgfigxIDw8IGJpdCksIFBBX0NQTERfSU1TSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MzQzX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0zNywxOSArMzksMTYgQEAKIAogc3RhdGljIHZvaWQgc2U3MzQzX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KFBBX0NQTERfU1QpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7Ci0JdW5zaWduZWQgaW50IGV4dF9pcnEgPSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoUEFfQ1BMRF9TVCk7CisJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTczNDNfRlBHQV9JUlFfTlIpIC0gMTsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoc2U3MzQzX2ZwZ2FfaXJxW2V4dF9pcnFdKTsKIAl9CiB9CiAKQEAgLTU4LDE2ICs1NywyNCBAQAogICovCiB2b2lkIF9faW5pdCBpbml0XzczNDNzZV9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIFBBX0NQTERfSU1TSyk7CS8qIGRpc2FibGUgYWxsIGlycXMgKi8KLQljdHJsX291dHcoMHgyMDAwLCAweGIwM2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KKwlfX3Jhd193cml0ZXcoMCwgUEFfQ1BMRF9JTVNLKTsJLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTczNDNfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwkJaWYgKGlycSA8IDApCisJCQlyZXR1cm47CisJCXNlNzM0M19mcGdhX2lycVtpXSA9IGlycTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShzZTczNDNfZnBnYV9pcnFbaV0sCiAJCQkJCSAgICAgICZzZTczNDNfaXJxX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCisJCXNldF9pcnFfY2hpcF9kYXRhKHNlNzM0M19mcGdhX2lycVtpXSwgKHZvaWQgKilpKTsKKwl9CisKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlEwX0lSUSwgc2U3MzQzX2lycV9kZW11eCk7CiAJc2V0X2lycV90eXBlKElSUTBfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUTFfSVJRLCBzZTczNDNfaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKaW5kZXggNGRlNTZmMy4uZDIzNzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKQEAgLTExLDI2ICsxMSwxNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiaGVhcnRiZWF0IiwKIAkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewpAQCAtODIsNyArNzMsNiBAQAogCQkubWFwYmFzZQk9IDB4MTYwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRBX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJWzFdID0gewpAQCAtOTAsNyArODAsNiBAQAogCQkubWFwYmFzZQk9IDB4MTcwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRCX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJeyB9LApAQCAtMTIxLDcgKzExMCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsyXSA9IHsKLQkJLnN0YXJ0ICA9IFVTQl9JUlEsCisJCS8qIEZpbGxlZCBpbiBsYXRlciAqLwogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMzgsOCArMTI3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpc3AxMTZ4LWhjZCIsCiAJLmlkCQkJPSAtMSwKLQkubnVtX3Jlc291cmNlcyAgCT0gQVJSQVlfU0laRSh1c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgCT0gdXNiX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSB1c2JfcmVzb3VyY2VzLAogCS5kZXYJCQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiX3BsYXRmb3JtX2RhdGEsCiAJfSwKQEAgLTE1NSw2ICsxNDQsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2g3MzQzc2VfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIFdpcmUtdXAgZHluYW1pYyB2ZWN0b3JzICovCisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQV07CisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQl07CisKKwl1c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gdXNiX3Jlc291cmNlc1syXS5lbmQgPQorCQlzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX1VTQl07CisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CkBAIC0xNjUsMTAgKzE2MSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2g3MzQzc2Vfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQljdHJsX291dHcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KKwlfX3Jhd193cml0ZXcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KIAotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLwotCWN0cmxfb3V0dygweDAwMjAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLworCV9fcmF3X3dyaXRldygweDAwMjAsIFBPUlRfUFNFTEQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVM3MzQzQ1AwMSBTZXR1cC4uLmRvbmVcbiIpOwogfQpAQCAtMTc5LDYgKzE3NSw1IEBACiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12XzczNDNzZSBfX2luaXRtdiA9IHsKIAkubXZfbmFtZSA9ICJTb2x1dGlvbkVuZ2luZSA3MzQzIiwKIAkubXZfc2V0dXAgPSBzaDczNDNzZV9zZXR1cCwKLQkubXZfbnJfaXJxcyA9IFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX05SLAogCS5tdl9pbml0X2lycSA9IGluaXRfNzM0M3NlX0lSUSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMKaW5kZXggZWMxZmVhNS4uMTAyOGMxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYwpAQCAtOTYsMTMgKzk2LDEzIEBACiB2b2lkIF9faW5pdCBpbml0X3NlX0lSUSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwppbmRleCA1MjdlYjZiLi42NmQzOWQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwpAQCAtOTMsMTUgKzkzLDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDE2LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTExMCw4ICsxMDcsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYwppbmRleCBiNDE3YWNjLi5kODUwMjJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiB2b2lkIF9faW5pdCBpbml0X3NlNzcyMV9JUlEodm9pZCkKIHsKIAkvKiBQUENSICovCi0JY3RybF9vdXR3KGN0cmxfaW53KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJaW50Y19zZXRfcHJpb3JpdHkoTVJTSFBDX0lSUTAsIDB4ZiAtIE1SU0hQQ19JUlEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKaW5kZXggNTVhZjRjMy4uNzQxNmFkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKQEAgLTIzLDE1ICsyMywxMiBAQAogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKIAkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAogCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCi0JLnJlZ3NpemUJPSAxNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC00MCw4ICszNyw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1tdID0gewpAQCAtODMsMTAgKzgwLDEwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIxX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogZm9yIFVTQiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KLQljdHJsX291dHcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCmluZGV4IGIyMjFiNjguLjYxNjA1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKQEAgLTIxLDEzICsyMSwxMyBAQAogc3RhdGljIHZvaWQgZGlzYWJsZV9zZTc3MjJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQljdHJsX291dHcoY3RybF9pbncoSVJRMDFfTUFTSykgfCAxIDw8IGJpdCwgSVJRMDFfTUFTSyk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElSUTAxX01BU0spIHwgMSA8PCBiaXQsIElSUTAxX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzIyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KElSUTAxX01BU0spICYgfigxIDw8IGJpdCksIElSUTAxX01BU0spOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJUlEwMV9NQVNLKSAmIH4oMSA8PCBiaXQpLCBJUlEwMV9NQVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTc3MjJfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgc2U3NzIyX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KElSUTAxX1NUUyk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KElSUTAxX1NUUyk7CiAJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTc3MjJfRlBHQV9JUlFfTlIpIC0gMTsKQEAgLTU5LDggKzU5LDggQEAKIHsKIAlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIElSUTAxX01BU0spOyAgICAgICAvKiBkaXNhYmxlIGFsbCBpcnFzICovCi0JY3RybF9vdXR3KDB4MjAwMCwgMHhiMDNmZmZlYyk7ICAvKiBtcnNocGMgaXJxIGVuYWJsZSAqLworCV9fcmF3X3dyaXRldygwLCBJUlEwMV9NQVNLKTsgICAgICAgLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOyAgLyogbXJzaHBjIGlycSBlbmFibGUgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBTRTc3MjJfRlBHQV9JUlFfTlI7IGkrKykgewogCQlpcnEgPSBjcmVhdGVfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCmluZGV4IGIxY2I5NDIuLjgwYTRlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCkBAIC0yNSwyNiArMjUsMTcgQEAKICNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIC8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogU01DOTF4ICovCkBAIC0xNjUsMzIgKzE1NiwzMiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JY3RybF9vdXR3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCisJX19yYXdfd3JpdGV3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCiAKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KLQljdHJsX291dHcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KKwlfX3Jhd193cml0ZXcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KIAogCS8qIExDREMgSS9PICovCi0JY3RybF9vdXR3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CisJX19yYXdfd3JpdGV3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CiAKIAkvKiBTSU9GMSovCi0JY3RybF9vdXR3KDB4MDAwMywgUE9SVF9QU0VMQik7Ci0JY3RybF9vdXR3KDB4ZTAwMCwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QS0NSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAzLCBQT1JUX1BTRUxCKTsKKwlfX3Jhd193cml0ZXcoMHhlMDAwLCBQT1JUX1BTRUxDKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BLQ1IpOwogCiAJLyogTENEQyAqLwotCWN0cmxfb3V0dygweDQwMjAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUFJDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QWENSKTsgICAvKiBMQ0RDLENTNkEgKi8KKwlfX3Jhd193cml0ZXcoMHg0MDIwLCBQT1JUX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUExDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTUNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BSQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFhDUik7ICAgLyogTENEQyxDUzZBICovCiAKIAkvKiBLRVlTQyAqLwotCWN0cmxfb3V0dygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BZQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOworCV9fcmF3X3dyaXRldygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BZQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFpDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jCmluZGV4IGY3NmNmM2IuLjA5NDJiZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMKQEAgLTcyLDE0ICs3MiwxNCBAQAogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzI0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzcyNF9pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtOTIsMTkgKzkyLDE2IEBACiBzdGF0aWMgdm9pZCBzZTc3MjRfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZnBnYV9pcnEgc2V0ID0gZ2V0X2ZwZ2FfaXJxKGlycSk7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KHNldC5zcmFkZHIpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KHNldC5zcmFkZHIpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gc2V0LmJhc2U7CiAKIAlpbnR2ICY9IHNldC5tYXNrOwogCi0Jd2hpbGUgKGludHYpIHsKLQkJaWYgKGludHYgJiAweDAwMDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4dF9pcnEpOwogCX0KIH0KIApAQCAtMTEzLDIwICsxMTAsMzkgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF9zZTc3MjRfSVJRKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOwogCi0JY3RybF9vdXR3KDB4ZmZmZiwgSVJRMF9NUik7ICAvKiBtYXNrIGFsbCAqLwotCWN0cmxfb3V0dygweGZmZmYsIElSUTFfTVIpOyAgLyogbWFzayBhbGwgKi8KLQljdHJsX291dHcoMHhmZmZmLCBJUlEyX01SKTsgIC8qIG1hc2sgYWxsICovCi0JY3RybF9vdXR3KDB4MDAwMCwgSVJRMF9TUik7ICAvKiBjbGVhciBpcnEgKi8KLQljdHJsX291dHcoMHgwMDAwLCBJUlExX1NSKTsgIC8qIGNsZWFyIGlycSAqLwotCWN0cmxfb3V0dygweDAwMDAsIElSUTJfU1IpOyAgLyogY2xlYXIgaXJxICovCi0JY3RybF9vdXR3KDB4MDAyYSwgSVJRX01PREUpOyAvKiBzZXQgaXJxIHR5cGUgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBJUlEwX01SKTsgIC8qIG1hc2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSVJRMV9NUik7ICAvKiBtYXNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIElSUTJfTVIpOyAgLyogbWFzayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBJUlEwX1NSKTsgIC8qIGNsZWFyIGlycSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIElSUTFfU1IpOyAgLyogY2xlYXIgaXJxICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgSVJRMl9TUik7ICAvKiBjbGVhciBpcnEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDJhLCBJUlFfTU9ERSk7IC8qIHNldCBpcnEgdHlwZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWludCBpcnEsIHdhbnRlZDsKKworCQl3YW50ZWQgPSBTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGk7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucih3YW50ZWQsIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3IgRlBHQVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgd2FudGVkKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gd2FudGVkKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCB3YW50ZWQpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKIAkJCQkJICAgICAgJnNlNzcyNF9pcnFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJfQogCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRMF9JUlEsIHNlNzcyNF9pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShJUlEwX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKaW5kZXggOTA0MDE2Ny4uNmZhNDczNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKQEAgLTM5LDYgKzM5LDEwIEBACiAKIAkvKiBEQlNDOiBwdXQgbWVtb3J5IGluIGF1dG8tcmVmcmVzaCBtb2RlICovCiAKKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUlNUQU5EQlksIHIwCisJYmYJcmVzdW1lX3JzdGFuZGJ5CisKIAlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCiAJV0FJVCAxCiAJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KQEAgLTQ5LDQgKzUzLDc5IEBACiAJcnRzCiAJIG5vcAogCityZXN1bWVfcnN0YW5kYnk6CisKKwkvKiBDUEc6IHNldHVwIGNsb2NrcyBiZWZvcmUgcmVzdGFydGluZyBleHRlcm5hbCBtZW1vcnkgKi8KKworCUVEIDB4QTQxNTAwMjQsIDB4MDAwMDQwMDAgLyogUExMQ1IgKi8KKworCW1vdi5sCUZSUUNSQSxyMAorCW1vdi5sCUByMCxyMworCW1vdi5sCUtJQ0sscjEKKwlvcglyMSwgcjMKKwltb3YubAlyMywgQHIwCisKKwltb3YubAlMU1RBVFMscjAKKwltb3YJIzEscjEKK1dBSVRfTFNUQVRTOgorCW1vdi5sCUByMCxyMworCXRzdAlyMSxyMworCWJmCVdBSVRfTFNUQVRTCisKKwkvKiBEQlNDOiByZS1pbml0aWFsaXplIGFuZCBwdXQgaW4gYXV0by1yZWZyZXNoICovCisKKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMTgxIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDAyMCwgMHgwMTVCMDAwMiAvKiBEQkNPTkYgKi8KKwlFRCAweEZEMDAwMDMwLCAweDAzMDcxNTAyIC8qIERCVFIwICovCisJRUQgMHhGRDAwMDAzNCwgMHgwMjAyMDEwMiAvKiBEQlRSMSAqLworCUVEIDB4RkQwMDAwMzgsIDB4MDEwOTA0MDUgLyogREJUUjIgKi8KKwlFRCAweEZEMDAwMDNDLCAweDAwMDAwMDAyIC8qIERCVFIzICovCisJRUQgMHhGRDAwMDAwOCwgMHgwMDAwMDAwNSAvKiBEQktJTkQgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAxIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwMTgsIDB4MDAwMDAwMDEgLyogREJDS0VDTlQgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TOgorCWR0CXIwCisJYmYJV0FJVF80MDBOUworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDIwMDAwIC8qIERCTVJDTlQgKEVNUjIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAzMDAwMCAvKiBEQk1SQ05UIChFTVIzKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwMDQgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA1MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNDMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwM2MwIC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDQwIC8qIERCTVJDTlQgKEVNUikgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TXzI6CisJZHQJcjAKKwliZglXQUlUXzQwME5TXzIKKworCUVEIDB4RkQwMDAwMTAsIDB4MDAwMDAwMDEgLyogREJFTiAqLworCUVEIDB4RkQwMDAwNDQsIDB4MDAwMDA1MGYgLyogREJSRlBETjEgKi8KKwlFRCAweEZEMDAwMDQ4LCAweDIzNjgwMGU2IC8qIERCUkZQRE4yICovCisKKwltb3YubAlEVU1NWSxyMAorCW1vdi5sCUByMCwgcjEgLyogZm9yY2Ugc2luZ2xlIGR1bW15IHJlYWQgKi8KKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAwODAgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDEwMDAwIC8qIERCUkZQRE4wICovCisKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKK0RVTU1ZOgkubG9uZwkweGFjNDAwMDAwCitGUlFDUkE6CS5sb25nCTB4YTQxNTAwMDAKK0tJQ0s6CS5sb25nCTB4ODAwMDAwMDAKK0xTVEFUUzoJLmxvbmcJMHhhNDE1MDA2MAorCiBFTlRSWShtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDg1OGVjYjIuLjY2Y2RiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC01MywyNiArNTMsMTcgQEAKICAqLwogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIExBTjkxQzExMSAqLwpAQCAtMjY1LDEyICsyNTYsMTIgQEAKICNkZWZpbmUgRkNMS0FDUgkJMHhhNDE1MDAwOAogc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCiAJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCiAJc3RhdHVzICY9IH4weDAwMDAwMGZmOwogCXN0YXR1cyB8PSAweDAwMDAwMDgwOwotCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0gewpAQCAtMzIyLDcgKzMxMyw3IEBACiAvKiBLRVlTQyBpbiBTb0MgKE5lZWRzIFNXMzMtMiBzZXQgdG8gT04pICovCiBzdGF0aWMgc3RydWN0IHNoX2tleXNjX2luZm8ga2V5c2NfaW5mbyA9IHsKIAkubW9kZSA9IFNIX0tFWVNDX01PREVfMSwKLQkuc2Nhbl90aW1pbmcgPSAxMCwKKwkuc2Nhbl90aW1pbmcgPSAzLAogCS5kZWxheSA9IDUwLAogCS5rZXljb2RlcyA9IHsKIAkJS0VZXzEsIEtFWV8yLCBLRVlfMywgS0VZXzQsIEtFWV81LApAQCAtNDYwLDcgKzQ1MSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDgzLDcgKzQ3NCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDI0LAorCQkuc3RhcnQgID0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5OCw2ICs0ODksMjYgQEAKIAl9LAogfTsKIAorLyogSXJEQSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSXJEQSIsCisJCS5zdGFydCAgPSAweEE0NUQwMDAwLAorCQkuZW5kICAgID0gMHhBNDVEMDA0OSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMjAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX3NpciIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXM3NzI0c2VfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJnNtYzkxeF9ldGhfZGV2aWNlLApAQCAtNTEyLDYgKzUyMyw3IEBACiAJJmZzaV9kZXZpY2UsCiAJJnNkaGkwX2NuN19kZXZpY2UsCiAJJnNkaGkxX2NuOF9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAogLyogSTJDIGRldmljZSAqLwpAQCAtNTMxLDcgKzU0Myw3IEBACiAJaW50IHQgPSAxMDAwMDsKIAogCXdoaWxlICh0LS0pIHsKLQkJaWYgKCFjdHJsX2ludyhFRVBST01fU1RBVCkpCisJCWlmICghX19yYXdfcmVhZHcoRUVQUk9NX1NUQVQpKQogCQkJcmV0dXJuIDE7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NTEsMTMgKzU2MywxMyBAQAogCiAJLyogcmVhZCBNQUMgYWRkciBmcm9tIEVFUFJPTSAqLwogCWZvciAoaSA9IDAgOyBpIDwgMyA7IGkrKykgewotCQljdHJsX291dHcoMHgwLCBFRVBST01fT1ApOyAvKiByZWFkICovCi0JCWN0cmxfb3V0dyhpKjIsIEVFUFJPTV9BRFIpOwotCQljdHJsX291dHcoMHgxLCBFRVBST01fU1RSVCk7CisJCV9fcmF3X3dyaXRldygweDAsIEVFUFJPTV9PUCk7IC8qIHJlYWQgKi8KKwkJX19yYXdfd3JpdGV3KGkqMiwgRUVQUk9NX0FEUik7CisJCV9fcmF3X3dyaXRldygweDEsIEVFUFJPTV9TVFJUKTsKIAkJaWYgKCFzaF9ldGhfaXNfZWVwcm9tX3JlYWR5KCkpCiAJCQlyZXR1cm47CiAKLQkJbWFjID0gY3RybF9pbncoRUVQUk9NX0RBVEEpOworCQltYWMgPSBfX3Jhd19yZWFkdyhFRVBST01fREFUQSk7CiAJCXNoX2V0aF9wbGF0Lm1hY19hZGRyW2kgPDwgMV0gPSBtYWMgJiAweGZmOwogCQlzaF9ldGhfcGxhdC5tYWNfYWRkclsoaSA8PCAxKSArIDFdID0gbWFjID4+IDg7CiAJfQpAQCAtNTk0LDI4ICs2MDYsMjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgZGV2aWNlc19zZXR1cCh2b2lkKQogewotCXUxNiBzdyA9IGN0cmxfaW53KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KLQlzdHJ1Y3QgY2xrICpmc2lhX2NsazsKKwl1MTYgc3cgPSBfX3Jhd19yZWFkdyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCisJc3RydWN0IGNsayAqY2xrOwogCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KLQlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCisJc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGIHwKKwkJCQkJU1VTUF9TSF9SU1RBTkRCWSwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2VudGVyX3N0YXJ0LAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fbGVhdmVfc3RhcnQsCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpOwogCS8qIFJlc2V0IFJlbGVhc2UgKi8KLQljdHJsX291dHcoY3RybF9pbncoRlBHQV9PVVQpICYKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRlBHQV9PVVQpICYKIAkJICB+KCgxIDw8IDEpICB8IC8qIExBTiAqLwogCQkgICAgKDEgPDwgNikgIHwgLyogVklERU8gREFDICovCiAJCSAgICAoMSA8PCA3KSAgfCAvKiBBSzQ2NDMgKi8KKwkJICAgICgxIDw8IDgpICB8IC8qIElyREEgKi8KIAkJICAgICgxIDw8IDEyKSB8IC8qIFVTQjAgKi8KIAkJICAgICgxIDw8IDE0KSksIC8qIFJNSUkgKi8KIAkJICBGUEdBX09VVCk7CiAKIAkvKiB0dXJuIG9uIFVTQiBjbG9ja3MsIHVzZSBleHRlcm5hbCBjbG9jayAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOwogCi0jaWZkZWYgQ09ORklHX1BNCiAJLyogTGV0IExFRDkgc2hvdyBTVEFUVVMyICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CiAKQEAgLTYyNCwyOCArNjM3LDEyIEBACiAKIAkvKiBMaXQgTEVEMTEgc2hvdyBQRFNUQVRVUyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKLSNlbHNlCi0JLyogTGl0IExFRDkgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo2LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo2LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjYsIDApOwotCi0JLyogTGl0IExFRDEwICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKLQotCS8qIExpdCBMRUQxMSAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNywgMCk7Ci0jZW5kaWYKIAogCS8qIGVuYWJsZSBVU0IwIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKIAogCS8qIGVuYWJsZSBVU0IxIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMTkyKTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMTkyKTsKIAogCS8qIGVuYWJsZSBJUlEgMCwxLDIgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOwpAQCAtNjkzLDcgKzY5MCw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVkNQV0MsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJELCAgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCAgTlVMTCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CiAKIAkvKiBlbmFibGUgQ0VVMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJTzBfRDE1LCBOVUxMKTsKQEAgLTc2NCwxMyArNzYxLDE4IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFTRCwgICAgTlVMTCk7CiAKKwkvKiBzZXQgU1BVMiBjbG9jayB0byA4My40IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInNwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDgzMzMzMzMzKSk7CisJY2xrX3B1dChjbGspOworCiAJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLwotCWZzaWFfY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2lhX2NsayIpOwogCWNsa19yZWdpc3RlcigmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcGFyZW50KGZzaWFfY2xrLCAmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcmF0ZShmc2lhX2NsaywgMTEwMDApOworCWNsa19zZXRfcGFyZW50KGNsaywgJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3JhdGUoY2xrLCAxMTAwMCk7CiAJY2xrX3NldF9yYXRlKCZmc2ltY2thX2NsaywgMTEwMDApOwotCWNsa19wdXQoZnNpYV9jbGspOworCWNsa19wdXQoY2xrKTsKIAogCS8qIFNESEkwIGNvbm5lY3RlZCB0byBjbjcgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMENELCBOVUxMKTsKQEAgLTc5Miw2ICs3OTQsMTAgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMUNNRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTFDTEssIE5VTEwpOwogCisJLyogZW5hYmxlIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgIE5VTEwpOworCiAJLyoKIAkgKiBlbmFibGUgU0gtRXRoCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYwppbmRleCAxMjE3NDRjLi5kNWM5ZWRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jCkBAIC0yNCwzMCArMjQsMzAgQEAKIHZvaWQgX19pbml0IGluaXRfc2U3NzgwX0lSUSh2b2lkKQogewogCS8qIGVuYWJsZSBhbGwgaW50ZXJydXB0IGF0IEZQR0EgKi8KLQljdHJsX291dHcoMCwgRlBHQV9JTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9JTlRNU0sxKTsKIAkvKiBtYXNrIFNNNTAxIGludGVycnVwdCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoRlBHQV9JTlRNU0sxKSB8IDB4MDAwMiksIEZQR0FfSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhGUEdBX0lOVE1TSzEpIHwgMHgwMDAyKSwgRlBHQV9JTlRNU0sxKTsKIAkvKiBlbmFibGUgYWxsIGludGVycnVwdCBhdCBGUEdBICovCi0JY3RybF9vdXR3KDAsIEZQR0FfSU5UTVNLMik7CisJX19yYXdfd3JpdGV3KDAsIEZQR0FfSU5UTVNLMik7CiAKIAkvKiBzZXQgRlBHQSBJTlRTRUwgcmVnaXN0ZXIgKi8KIAkvKiBGUEdBICsgMHgwNiAqLwotCWN0cmxfb3V0dyggKChJUlFQSU5fU001MDEgPDwgSVJRUE9TX1NNNTAxKSB8CisJX19yYXdfd3JpdGV3KCAoKElSUVBJTl9TTTUwMSA8PCBJUlFQT1NfU001MDEpIHwKIAkJKElSUVBJTl9TTUM5MUNYIDw8IElSUVBPU19TTUM5MUNYKSksIEZQR0FfSU5UU0VMMSk7CiAKIAkvKiBGUEdBICsgMHgwOCAqLwotCWN0cmxfb3V0dygoKElSUVBJTl9FWFRJTlQ0IDw8IElSUVBPU19FWFRJTlQ0KSB8CisJX19yYXdfd3JpdGV3KCgoSVJRUElOX0VYVElOVDQgPDwgSVJRUE9TX0VYVElOVDQpIHwKIAkJKElSUVBJTl9FWFRJTlQzIDw8IElSUVBPU19FWFRJTlQzKSB8CiAJCShJUlFQSU5fRVhUSU5UMiA8PCBJUlFQT1NfRVhUSU5UMikgfAogCQkoSVJRUElOX0VYVElOVDEgPDwgSVJRUE9TX0VYVElOVDEpKSwgRlBHQV9JTlRTRUwyKTsKIAogCS8qIEZQR0EgKyAweDBBICovCi0JY3RybF9vdXR3KChJUlFQSU5fUENDUFcgPDwgSVJRUE9TX1BDQ1BXKSwgRlBHQV9JTlRTRUwzKTsKKwlfX3Jhd193cml0ZXcoKElSUVBJTl9QQ0NQVyA8PCBJUlFQT1NfUENDUFcpLCBGUEdBX0lOVFNFTDMpOwogCiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOyAvKiBpbnN0YWxsIGhhbmRsZXJzIGZvciBJUlEwLTcgKi8KIAogCS8qIElDUjE6IGRldGVjdCBsb3cgbGV2ZWwoZm9yIDJuZGN1dCkgKi8KLQljdHJsX291dGwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKKwlfX3Jhd193cml0ZWwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKIAogCS8qCiAJICogRlBHQSBQQ0lTRUwgcmVnaXN0ZXIgaW5pdGlhbGl6ZQpAQCAtNjMsNiArNjMsNiBAQAogCSAqICBJTlREIHx8IElOVEQgIHwgSU5UQyAgfCAgLS0gICB8IElOVEEKIAkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCWN0cmxfb3V0dygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOwotCWN0cmxfb3V0dygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOworCV9fcmF3X3dyaXRldygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOworCV9fcmF3X3dyaXRldygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwppbmRleCAxZDNhODY3Li42ZjdjMjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwpAQCAtMTcsMjYgKzE3LDE3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIFNNQzkxeCAqLwpAQCAtODQsMTQgKzc1LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzgwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogIlNILUxpbnV4IiBvbiBMRUQgRGlzcGxheSAqLwotCWN0cmxfb3V0dyggJ1MnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwwX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdIJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMV9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnLScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDJfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ0wnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwzX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdpJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNF9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnbicgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDVfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ3UnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw2X0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICd4JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMN19BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnUycgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDBfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ0gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwxX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICctJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMl9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnTCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDNfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ2knICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw0X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICduJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNV9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAndScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDZfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ3gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw3X0FERFIgPDwgMSkgKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkhpdGFjaGkgVUwgU29sdXRpb25zIEVuZ2luZSA3NzgwU0UwMyBzdXBwb3J0LlxuIik7CiAKQEAgLTEwMiwxNSArOTMsMTUgQEAKIAkgKiAgIFJFUTIvR05UMiAtPiBTZXJpYWwgQVRBCiAJICogICBSRVEzL0dOVDMgLT4gUENJIHNsb3QKIAkgKi8KLQljdHJsX291dHcoMHgwMjEzLCBGUEdBX1JFUVNFTCk7CisJX19yYXdfd3JpdGV3KDB4MDIxMywgRlBHQV9SRVFTRUwpOwogCiAJLyogR1BJTyBzZXR0aW5nICovCi0JY3RybF9vdXR3KDB4MDAwMCwgR1BJT19QRUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoR1BJT19QSENSKSYweGZmZjMsIEdQSU9fUEhDUik7Ci0JY3RybF9vdXR3KDB4MGMwMCwgR1BJT19QTVNFTFIpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KEdQSU9fUEhDUikmMHhmZmYzLCBHUElPX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDBjMDAsIEdQSU9fUE1TRUxSKTsKIAogCS8qIGlWRFIgUG93ZXIgT04gKi8KLQljdHJsX291dHcoMHgwMDAxLCBGUEdBX0lWRFJQVyk7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgRlBHQV9JVkRSUFcpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jCmluZGV4IGE4YjlmODQuLjFiMjAwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCXNwaW5fbG9jaygmc2gwM19ydGNfbG9jayk7CiAgYWdhaW46CiAJZG8gewotCQlzZWMgID0gKGN0cmxfaW5iKFJUQ19TRUMxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMDsKLQkJbWluICA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7Ci0JCWhvdXIgPSAoY3RybF9pbmIoUlRDX0hPVTEpICYgMHhmKSArIChjdHJsX2luYihSVENfSE9VMTApICYgMHhmKSAqIDEwOwotCQlkYXkgID0gKGN0cmxfaW5iKFJUQ19EQVkxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX0RBWTEwKSAmIDB4ZikgKiAxMDsKLQkJbW9uICA9IChjdHJsX2luYihSVENfTU9OMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NT04xMCkgJiAweGYpICogMTA7Ci0JCXllYXIgPSAoY3RybF9pbmIoUlRDX1lFQTEpICYgMHhmKSArIChjdHJsX2luYihSVENfWUVBMTApICYgMHhmKSAqIDEwCi0JCSAgICAgKyAoY3RybF9pbmIoUlRDX1lFQTEwMCApICYgMHhmKSAqIDEwMAotCQkgICAgICsgKGN0cmxfaW5iKFJUQ19ZRUExMDAwKSAmIDB4ZikgKiAxMDAwOwotCX0gd2hpbGUgKHNlYyAhPSAoY3RybF9pbmIoUlRDX1NFQzEpICYgMHhmKSArIChjdHJsX2luYihSVENfU0VDMTApICYgMHg3KSAqIDEwKTsKKwkJc2VjICA9IChfX3Jhd19yZWFkYihSVENfU0VDMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19TRUMxMCkgJiAweDcpICogMTA7CisJCW1pbiAgPSAoX19yYXdfcmVhZGIoUlRDX01JTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTUlOMTApICYgMHhmKSAqIDEwOworCQlob3VyID0gKF9fcmF3X3JlYWRiKFJUQ19IT1UxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX0hPVTEwKSAmIDB4ZikgKiAxMDsKKwkJZGF5ICA9IChfX3Jhd19yZWFkYihSVENfREFZMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19EQVkxMCkgJiAweGYpICogMTA7CisJCW1vbiAgPSAoX19yYXdfcmVhZGIoUlRDX01PTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTU9OMTApICYgMHhmKSAqIDEwOworCQl5ZWFyID0gKF9fcmF3X3JlYWRiKFJUQ19ZRUExKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1lFQTEwKSAmIDB4ZikgKiAxMAorCQkgICAgICsgKF9fcmF3X3JlYWRiKFJUQ19ZRUExMDAgKSAmIDB4ZikgKiAxMDAKKwkJICAgICArIChfX3Jhd19yZWFkYihSVENfWUVBMTAwMCkgJiAweGYpICogMTAwMDsKKwl9IHdoaWxlIChzZWMgIT0gKF9fcmF3X3JlYWRiKFJUQ19TRUMxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMCk7CiAJaWYgKHllYXIgPT0gMCB8fCBtb24gPCAxIHx8IG1vbiA+IDEyIHx8IGRheSA+IDMxIHx8IGRheSA8IDEgfHwKIAkgICAgaG91ciA+IDIzIHx8IG1pbiA+IDU5IHx8IHNlYyA+IDU5KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNjAsMTYgKzYwLDE2IEBACiAJCXByaW50aygieWVhcj0lZCwgbW9uPSVkLCBkYXk9JWQsIGhvdXI9JWQsIG1pbj0lZCwgc2VjPSVkXG4iLAogCQkgICAgICAgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIAotCQljdHJsX291dGIoMCwgUlRDX1NFQzEpOyBjdHJsX291dGIoMCwgUlRDX1NFQzEwKTsKLQkJY3RybF9vdXRiKDAsIFJUQ19NSU4xKTsgY3RybF9vdXRiKDAsIFJUQ19NSU4xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfSE9VMSk7IGN0cmxfb3V0YigwLCBSVENfSE9VMTApOwotCQljdHJsX291dGIoNiwgUlRDX1dFRTEpOwotCQljdHJsX291dGIoMSwgUlRDX0RBWTEpOyBjdHJsX291dGIoMCwgUlRDX0RBWTEwKTsKLQkJY3RybF9vdXRiKDEsIFJUQ19NT04xKTsgY3RybF9vdXRiKDAsIFJUQ19NT04xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfWUVBMSk7IGN0cmxfb3V0YigwLCBSVENfWUVBMTApOwotCQljdHJsX291dGIoMCwgUlRDX1lFQTEwMCk7Ci0JCWN0cmxfb3V0YigyLCBSVENfWUVBMTAwMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfQ1RMKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfTUlOMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTUlOMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEwKTsKKwkJX19yYXdfd3JpdGViKDYsIFJUQ19XRUUxKTsKKwkJX19yYXdfd3JpdGViKDEsIFJUQ19EQVkxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19EQVkxMCk7CisJCV9fcmF3X3dyaXRlYigxLCBSVENfTU9OMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTU9OMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExMDApOworCQlfX3Jhd193cml0ZWIoMiwgUlRDX1lFQTEwMDApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0NUTCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC05Myw5ICs5Myw5IEBACiAJLyogZ2V0cyByZWNhbGxlZCB3aXRoIGlycSBsb2NhbGx5IGRpc2FibGVkICovCiAJc3Bpbl9sb2NrKCZzaDAzX3J0Y19sb2NrKTsKIAlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCi0JCWlmICghKGN0cmxfaW5iKFJUQ19DVEwpICYgUlRDX0JVU1kpKQorCQlpZiAoIShfX3Jhd19yZWFkYihSVENfQ1RMKSAmIFJUQ19CVVNZKSkKIAkJCWJyZWFrOwotCWNtb3NfbWludXRlcyA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7CisJY21vc19taW51dGVzID0gKF9fcmF3X3JlYWRiKFJUQ19NSU4xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01JTjEwKSAmIDB4ZikgKiAxMDsKIAlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7CiAJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwogCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCWN0cmxfb3V0YihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOwotCQljdHJsX291dGIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7Ci0JCWN0cmxfb3V0YihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOwotCQljdHJsX291dGIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOworCQlfX3Jhd193cml0ZWIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOworCQlfX3Jhd193cml0ZWIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCmluZGV4IDc0Y2ZiNGIuLmFmNGEwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwppbmRleCBkOGViZmE3Li5hZGQ2OThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwpAQCAtMjgsMTggKzI4LDE4IEBACiB2b2lkIF9faW5pdCBpbml0X3NoNzc2M3JkcF9JUlEodm9pZCkKIHsKIAkvKiBHUElPIGVuYWJsZWQgKi8KLQljdHJsX291dGwoMSA8PCAyNSwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDI1LCBJTlRDX0lOVDJNU0tDUik7CiAKIAkvKiBlbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXRsKChjdHJsX2lubChJTlRDX0lOVDJQUkk3KSAmIDB4RkYwMEZGRkYpIHwgMHgwMDBGMDAwMCwKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKElOVENfSU5UMlBSSTcpICYgMHhGRjAwRkZGRikgfCAweDAwMEYwMDAwLAogCQkgIElOVENfSU5UMlBSSTcpOwogCiAJLyogVVNCSCBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CisJX19yYXdfd3JpdGVsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CiAKIAkvKiBHRVRIRVIgZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOworCV9fcmF3X3dyaXRlbCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOwogCiAJLyogRE1BQyBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgOCwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDgsIElOVENfSU5UMk1TS0NSKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDM5MDUzNGEuLmY2NGE2OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtMTU4LDUwICsxNTgsNTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaDc3NjNyZHBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBCb2FyZCB2ZXJzaW9uIGNoZWNrICovCi0JaWYgKGN0cmxfaW53KENQTERfQk9BUkRfSURfRVJWX1JFRykgPT0gMHhFQ0IxKQorCWlmIChfX3Jhd19yZWFkdyhDUExEX0JPQVJEX0lEX0VSVl9SRUcpID09IDB4RUNCMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRFIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRBIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCiAJLyogVVNCIHBpbiBzZWxlY3QgYml0cyAoY2xlYXIgYml0IDUtMiB0byAwKSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweEZGQzMpLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHhGRkMzKSwgUE9SVF9QU0VMMik7CiAJLyogVVNCSCBzZXR1cCBwb3J0IEkgY29udHJvbHMgdG8gb3RoZXIgKGNsZWFyIGJpdHMgNC05IHRvIDApICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CiAKIAkvKiBTZWxlY3QgVVNCIEhvc3QgY29udHJvbGxlciAqLwotCWN0cmxfb3V0dygweDAwLCBVU0JfVVNCSFNDKTsKKwlfX3Jhd193cml0ZXcoMHgwMCwgVVNCX1VTQkhTQyk7CiAKIAkvKiBGb3IgTENEICovCiAJLyogc2V0IFBUSjctMSwgYml0cyAxNS0yIG9mIFBKQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOwogCS8qIHNldCBQVEk1LCBiaXRzIDExLTEwIG9mIFBJQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BLQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BMQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BLQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BMQ1IpOwogCS8qIHNldCBQU0VMMiBiaXRzIDE0LTgsIDUtNCwgb2YgUFNFTDIgdG8gMCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweDAwQzApLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHgwMEMwKSwgUE9SVF9QU0VMMik7CiAJLyogc2V0IFBTRUwzIGJpdHMgMTQtMTIsIDYtNCwgMi0wIG9mIFBTRUwzIHRvIDAgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDMpICYgMHgwNzAwKSwgUE9SVF9QU0VMMyk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwzKSAmIDB4MDcwMCksIFBPUlRfUFNFTDMpOwogCiAJLyogRm9yIEhBQyAqLwogCS8qIGJpdDMtMCAgMDEwMDpIQUMgJiBTU0kxIGVuYWJsZSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMSkgJiAweEZGRjApIHwgMHgwMDA0LCBQT1JUX1BTRUwxKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgMHhGRkYwKSB8IDB4MDAwNCwgUE9SVF9QU0VMMSk7CiAJLyogYml0MTQgICAgICAxOlNTSV9IQUNfQ0xLIGVuYWJsZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUw0KSB8IDB4NDAwMCwgUE9SVF9QU0VMNCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUFNFTDQpIHwgMHg0MDAwLCBQT1JUX1BTRUw0KTsKIAogCS8qIFNILUV0aGVyICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTRUwxKSAmIH4weGZmMDApIHwgMHgyNDAwLCBQT1JUX1BTRUwxKTsKLQljdHJsX291dHcoMHgwLCBQT1JUX1BGQ1IpOwotCWN0cmxfb3V0dygweDAsIFBPUlRfUEZDUik7Ci0JY3RybF9vdXR3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgfjB4ZmYwMCkgfCAweDI0MDAsIFBPUlRfUFNFTDEpOworCV9fcmF3X3dyaXRldygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoMHgwLCBQT1JUX1BGQ1IpOwogCiAJLyogTU1DICovCiAJLypzZWxlY3RzIFNDSUYgYW5kIE1NQyBvdGhlciBmdW5jdGlvbnMgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKIAkvKiBNTUMgY2xvY2sgb3BlcmF0ZXMgKi8KLQljdHJsX291dGwoY3RybF9pbmwoTVNUUENSMSkgJiB+MHg4LCBNU1RQQ1IxKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDMwMDAsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUENDUikgJiB+MHhDRkMzLCBQT1JUX1BDQ1IpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNU1RQQ1IxKSAmIH4weDgsIE1TVFBDUjEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BBQ1IpICYgfjB4MzAwMCwgUE9SVF9QQUNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QQ0NSKSAmIH4weENGQzMsIFBPUlRfUENDUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g3NzYzcmRwIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGEzMjc3YTIuLjMzMTc0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IGVyYXNlY29uZmlnX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JKHZvaWQpY3RybF9pbmIoMHhiODAwMDAwMCk7CS8qIGR1bW15IHJlYWQgKi8KKwkodm9pZClfX3Jhd19yZWFkYigweGI4MDAwMDAwKTsJLyogZHVtbXkgcmVhZCAqLwogCiAJcHJpbnRrKCJTbmFwR2VhcjogZXJhc2Ugc3dpdGNoIGludGVycnVwdCFcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKaW5kZXggOTg2YTBlNzEuLjUyM2FlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTQxLDEzICs0MSwxMyBAQAogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBDbGVhciB0aGUgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgYW5kIHNldCBpdCBpbiB0aGUgcmVxdWVzdCAqLwotCQl2YWwgPSBjdHJsX2lubCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKKwkJdmFsID0gX19yYXdfcmVhZGwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAJCXZhbCAmPSB+bWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9yZXF1ZXN0X3JlZ2lzdGVyKTsKIAkJdmFsIHw9IG1hc2s7Ci0JCWN0cmxfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOworCQlfX3Jhd193cml0ZWwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9yZXF1ZXN0X3JlZ2lzdGVyKTsKIAl9CiB9CiAKQEAgLTU3LDkgKzU3LDkgQEAKIAkJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2sgPSAweDAxIDw8IDE7CiAKIAkJLyogU2V0ICJpcnEidGggYml0IGluIHRoZSBtYXNrIHJlZ2lzdGVyICovCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsIHw9IG1hc2s7Ci0JCWN0cmxfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQlfX3Jhd193cml0ZWwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGQ3NTM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBOaW1ibGUgTWljcm9zeXN0ZW1zIFRJVEFOIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IHNldHVwLm8gaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTMwZTk4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICoJSS9PIHJvdXRpbmVzIGZvciBUaXRhbgotICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8bWFjaC90aXRhbi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLSAgICAgICAgbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKLSAgICAgICAgcmV0dXJuIHBvcnQ7Ci19Ci0KLXU4IHRpdGFuX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIGlmIChQWFNFRyhwb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIocG9ydCk7Ci0gICAgICAgIHJldHVybiBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOwotfQotCi11OCB0aXRhbl9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIHU4IHY7Ci0KLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHYgPSBjdHJsX2luYihwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHYgPSBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOwotICAgICAgICBjdHJsX2RlbGF5KCk7Ci0gICAgICAgIHJldHVybiB2OwotfQotCi11MTYgdGl0YW5faW53KHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2ludyhwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi11MzIgdGl0YW5faW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2lubChwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi12b2lkIHRpdGFuX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLX0KLQotdm9pZCB0aXRhbl9vdXRiX3AodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgY3RybF9kZWxheSgpOwotfQotCi12b2lkIHRpdGFuX291dHcodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIGlmIChQWFNFRyhwb3J0KSkKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0bCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0bCh2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXliZWJhZGlvKHBvcnQpOwotfQotCi12b2lkIHRpdGFuX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgX19pb21lbSAqdGl0YW5faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQotewotCWlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0OwotCi0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0MmFkcihwb3J0KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFlN2UwZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogYXJjaC9zaC9ib2FyZHMvdGl0YW4vc2V0dXAuYyAtIFNldHVwIGZvciBUaXRhbgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIEphbWllIExlbmVoYW4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RpdGFuX2lycSh2b2lkKQotewotCS8qIGVuYWJsZSBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBleHRlcm5hbHMgKi8KLQlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSUSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdGl0YW4gX19pbml0bXYgPSB7Ci0JLm12X25hbWUgPQkiVGl0YW4iLAotCi0JLm12X2luYiA9CXRpdGFuX2luYiwKLQkubXZfaW53ID0JdGl0YW5faW53LAotCS5tdl9pbmwgPQl0aXRhbl9pbmwsCi0JLm12X291dGIgPQl0aXRhbl9vdXRiLAotCS5tdl9vdXR3ID0JdGl0YW5fb3V0dywKLQkubXZfb3V0bCA9CXRpdGFuX291dGwsCi0KLQkubXZfaW5iX3AgPQl0aXRhbl9pbmJfcCwKLQkubXZfaW53X3AgPQl0aXRhbl9pbncsCi0JLm12X2lubF9wID0JdGl0YW5faW5sLAotCS5tdl9vdXRiX3AgPQl0aXRhbl9vdXRiX3AsCi0JLm12X291dHdfcCA9CXRpdGFuX291dHcsCi0JLm12X291dGxfcCA9CXRpdGFuX291dGwsCi0KLQkubXZfaW5zbCA9CXRpdGFuX2luc2wsCi0JLm12X291dHNsID0JdGl0YW5fb3V0c2wsCi0KLQkubXZfaW9wb3J0X21hcCA9IHRpdGFuX2lvcG9ydF9tYXAsCi0KLQkubXZfaW5pdF9pcnEgPQlpbml0X3RpdGFuX2lycSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXgzcHJvdG8vaWxzZWwuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCmluZGV4IGI1YzY3M2MzOTMuLjVjOTg0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCkBAIC03MCwxMCArNzAsMTAgQEAKIAlwcl9kZWJ1ZygiJXM6IGJpdCMlZDogYWRkciAtIDB4JTA4bHggKHNoaWZ0ICVkLCBzZXQgJWQpXG4iLAogCQkgX19mdW5jX18sIGJpdCwgYWRkciwgc2hpZnQsIHNldCk7CiAKLQl0bXAgPSBjdHJsX2ludyhhZGRyKTsKKwl0bXAgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAl0bXAgJj0gfigweGYgPDwgc2hpZnQpOwogCXRtcCB8PSBzZXQgPDwgc2hpZnQ7Ci0JY3RybF9vdXR3KHRtcCwgYWRkcik7CisJX19yYXdfd3JpdGV3KHRtcCwgYWRkcik7CiB9CiAKIC8qKgpAQCAtMTQyLDkgKzE0Miw5IEBACiAKIAlhZGRyID0gbWtfaWxzZWxfYWRkcihpcnEpOwogCi0JdG1wID0gY3RybF9pbncoYWRkcik7CisJdG1wID0gX19yYXdfcmVhZHcoYWRkcik7CiAJdG1wICY9IH4oMHhmIDw8IG1rX2lsc2VsX3NoaWZ0KGlycSkpOwotCWN0cmxfb3V0dyh0bXAsIGFkZHIpOworCV9fcmF3X3dyaXRldyh0bXAsIGFkZHIpOwogCiAJY2xlYXJfYml0KGlycSwgJmlsc2VsX2xldmVsX21hcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXgzcHJvdG8vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCmluZGV4IGVmZTRjYjkuLmUyODQ1OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTApOwogCiAJLyogU2V0IElDUjAuTFZMTU9ERSAqLwotCWN0cmxfb3V0bChjdHJsX2lubCgweGZlNDEwMDAwKSB8ICgxIDw8IDIxKSwgMHhmZTQxMDAwMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKDB4ZmU0MTAwMDApIHwgKDEgPDwgMjEpLCAweGZlNDEwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl94M3Byb3RvIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGNiOGNmNTUuLjFjZTYzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTIxLDEyICsyMSwxNSBAQAogQ09ORklHX0VOVFJZX09GRlNFVAk/PSAweDAwMDAxMDAwCiAKIHN1ZmZpeC15IDo9IGJpbgotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKLXN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKQk6PSBnegorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikJOj0gYnoyCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpCTo9IGx6bWEKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKQk6PSBsem8KIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCi1leHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCit0YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiBcCisJICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIHVJbWFnZS5iaW4KK2V4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAorCSAgIHZtbGludXguYmluLmx6bwogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJvbWltYWdlCiAKICQob2JqKS96SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKQEAgLTQzLDE1ICs0Niw4IEBACiAkKG9iaikvcm9taW1hZ2Uvdm1saW51eDogJChvYmopL3pJbWFnZSBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9yb21pbWFnZSAkQAogCi1LRVJORUxfTUVNT1JZIDo9IDB4MDAwMDAwMDAKLWlmZXEgKCQoQ09ORklHX1BNQl9GSVhFRCkseSkKLUtFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCitLRVJORUxfTUVNT1JZCTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCkgJiAweDFmZmZmZmZmXScpCi1lbmRpZgotaWZlcSAoJChDT05GSUdfMjlCSVQpLHkpCi1LRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCldJykKLWVuZGlmCiAKIEtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCkBAIC04MCw2ICs3Niw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtbGludXguYmluLmx6bzogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQorCiAkKG9iaikvdUltYWdlLmJ6MjogJChvYmopL3ZtbGludXguYmluLmJ6MgogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxiemlwMikKIApAQCAtODksNiArODgsOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmx6bzogJChvYmopL3ZtbGludXguYmluLmx6bworCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem8pCisKICQob2JqKS91SW1hZ2UuYmluOiAkKG9iaikvdm1saW51eC5iaW4KIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA2MTgyZWNhLi41ZDY2MGI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNiwxNCArNiwxMSBAQAogCiB0YXJnZXRzCQk6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IFwKIAkJICAgdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAorCQkgICB2bWxpbnV4LmJpbi5sem8gXAogCQkgICBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwogCiBPQkpFQ1RTID0gJChvYmopL2hlYWRfJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL2NhY2hlLm8KIAotaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLU9CSkVDVFMgKz0gJChvYmopLy4uLy4uL2tlcm5lbC9zaF9iaW9zLm8KLWVuZGlmCi0KICMKICMgSU1BR0VfT0ZGU0VUIGlzIHRoZSBsb2FkIG9mZnNldCBvZiB0aGUgY29tcHJlc3Npb24gbG9hZGVyCiAjCkBAIC00Nyw2ICs0NCw4IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorJChvYmopL3ZtbGludXguYmluLmx6bzogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCiAKIE9CSkNPUFlGTEFHUyArPSAtUiAuZW1wdHlfemVyb19wYWdlCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBiNTFiMWZjLi4yNzE0MGE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKQEAgLTYyLDI5ICs2MSwxNSBAQAogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQotewotCWludCBpID0gMDsKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCisjZW5kaWYKIAotCXdoaWxlICgqcysrKQotCQlpKys7Ci0JcmV0dXJuIGk7Ci19Ci0KLWludCBwdXRzKGNvbnN0IGNoYXIgKnMpCi17Ci0JaW50IGxlbiA9IHN0cmxlbihzKTsKLQlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgbGVuKTsKLQlyZXR1cm4gbGVuOwotfQotI2Vsc2UKIGludCBwdXRzKGNvbnN0IGNoYXIgKnMpCiB7CiAJLyogVGhpcyBzaG91bGQgYmUgdXBkYXRlZCB0byB1c2UgdGhlIHNoLXNjaSByb3V0aW5lcyAqLwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHZvaWQqIG1lbXNldCh2b2lkKiBzLCBpbnQgYywgc2l6ZV90IG4pCiB7CkBAIC0xMzIsNyArMTE3LDcgQEAKIAlvdXRwdXRfYWRkciA9IChDT05GSUdfTUVNT1JZX1NUQVJUICsgMHgyMDAwKTsKICNlbHNlCiAJb3V0cHV0X2FkZHIgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwotI2lmZGVmIENPTkZJR18yOUJJVAorI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKQogCW91dHB1dF9hZGRyIHw9IFAyU0VHOwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKaW5kZXggNTBhYTBjMS4uYmNiMzFhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jCkBAIC01NSwyNSArNTUsMjIgQEAKIAogc3RhdGljIHZvaWQgaGQ2NDQ2MV9pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIHNob3J0IGludHYgPSBjdHJsX2ludyhIRDY0NDYxX05JUlIpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KEhENjQ0NjFfTklSUik7CiAJdW5zaWduZWQgaW50IGV4dF9pcnEgPSBIRDY0NDYxX0lSUUJBU0U7CiAKIAlpbnR2ICY9ICgxIDw8IEhENjQ0NjFfSVJRX05VTSkgLSAxOwogCi0Jd2hpbGUgKGludHYpIHsKLQkJaWYgKGludHYgJiAxKSB7Ci0JCQlleHRfZGVzYyA9IGlycV9kZXNjICsgZXh0X2lycTsKLQkJCWhhbmRsZV9sZXZlbF9pcnEoZXh0X2lycSwgZXh0X2Rlc2MpOwotCQl9Ci0JCWludHYgPj49IDE7Ci0JCWV4dF9pcnErKzsKKwlmb3IgKDsgaW50djsgaW50diA+Pj0gMSwgZXh0X2lycSsrKSB7CisJCWlmICghKGludHYgJiAxKSkKKwkJCWNvbnRpbnVlOworCisJCWdlbmVyaWNfaGFuZGxlX2lycShleHRfaXJxKTsKIAl9CiB9CiAKIGludCBfX2luaXQgc2V0dXBfaGQ2NDQ2MSh2b2lkKQogewotCWludCBpOworCWludCBpLCBuaWQgPSBjcHVfdG9fbm9kZShib290X2NwdV9kYXRhKTsKIAogCWlmICghTUFDSF9IRDY0NDYxKQogCQlyZXR1cm4gMDsKQEAgLTkwLDkgKzg3LDI2IEBACiAJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSEQ2NDQ2MV9OSU1SKTsKIAogCS8qICBJUlEgODAgLT4gOTUgYmVsb25ncyB0byBIRDY0NDYxICAqLwotCWZvciAoaSA9IEhENjQ0NjFfSVJRQkFTRTsgaSA8IEhENjQ0NjFfSVJRQkFTRSArIDE2OyBpKyspCisJZm9yIChpID0gSEQ2NDQ2MV9JUlFCQVNFOyBpIDwgSEQ2NDQ2MV9JUlFCQVNFICsgMTY7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaSwgbmlkKTsKKwkJaWYgKHVubGlrZWx5KGlycSA9PSAwKSkgeworCQkJcHJfZXJyKCIlczogZmFpbGVkIGhvb2tpbmcgaXJxICVkIGZvciBIRDY0NDYxXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlpZiAodW5saWtlbHkoaXJxICE9IGkpKSB7CisJCQlwcl9lcnIoIiVzOiBnb3QgaXJxICVkIGJ1dCB3YW50ZWQgJWQsIGJhaWxpbmcuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEsIGkpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZoZDY0NDYxX2lycV9jaGlwLAogCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJfQogCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQ09ORklHX0hENjQ0NjFfSVJRLCBoZDY0NDYxX2lycV9kZW11eCk7CiAJc2V0X2lycV90eXBlKENPTkZJR19IRDY0NDYxX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjMzMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTc1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNworIyBUdWUgRmViICA5IDE1OjI3OjA2IDIwMTAKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKKyMgQ09ORklHX1NVUEVSSDY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1BBUlNFX0lSUT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQorQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfQ09IRVJFTlQ9eQorIyBDT05GSUdfRE1BX05PTkNPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVV9UUkFDRT15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX05TPXkKK0NPTkZJR19DR1JPVVBfRlJFRVpFUj15CitDT05GSUdfQ0dST1VQX0RFVklDRT15CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfQ1BVQUNDVD15CitDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQorQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFI9eQorIyBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NTV9PV05FUj15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKK0NPTkZJR19VVFNfTlM9eQorQ09ORklHX0lQQ19OUz15CitDT05GSUdfVVNFUl9OUz15CitDT05GSUdfUElEX05TPXkKK0NPTkZJR19ORVRfTlM9eQorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKK0NPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQ9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19DR1JPVVA9eQorIyBDT05GSUdfREVCVUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0NGUV9HUk9VUF9JT1NDSEVEPXkKKyMgQ09ORklHX0RFQlVHX0NGUV9JT1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorQ09ORklHX0NQVV9TSFgzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHg2MDAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MjAwMDAwMDAKKyMgQ09ORklHXzI5QklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CitDT05GSUdfUE1CPXkKKyMgQ09ORklHX1BNQl9MRUdBQ1kgaXMgbm90IHNldAorQ09ORklHX1gyVExCPXkKK0NPTkZJR19WU1lTQ0FMTD15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFPXkKK0NPTkZJR19JT1JFTUFQX0ZJWEVEPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NksgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQj15CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQiBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQorQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTEKK0NPTkZJR19LU009eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUFFWD15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9TREs3Nzg2PXkKKyMgQ09ORklHX1NIX1VSUVVFTEwgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVElNRVJfVE1VPXkKK0NPTkZJR19TSF9DTEtfQ1BHPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCitDT05GSUdfU0hfQ1BVX0ZSRVE9eQorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIGVhcmx5cHJpbnRrPXNoLXNjaS4xLDExNTIwMCByb290PS9kZXYvc2RhMSBubWlfZGVidWc9c3RhdGUsZGVib3VuY2Ugcm9vdGRlbGF5PTEwIgorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lFQUVSX0lOSkVDVD15CitDT05GSUdfUENJRUFTUE09eQorQ09ORklHX1BDSUVBU1BNX0RFQlVHPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorQ09ORklHX1BDSV9ERUJVRz15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9ERUJVRz15CitDT05GSUdfUE1fVkVSQk9TRT15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9QTEFURk9STT15CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfTVNJT0YgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQVJCPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX01BWDY5MDA9eQorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0g9eQorIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CitDT05GSUdfVUlPPW0KKyMgQ09ORklHX1VJT19DSUYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TTVggaXMgbm90IHNldAorIyBDT05GSUdfVUlPX0FFQyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUENJX0dFTkVSSUMgaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQkZTPXkKK0NPTkZJR19IVUdFVExCX1BBR0U9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1ZNPXkKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CitDT05GSUdfS1NZTV9UUkFDRVI9eQorIyBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorQ09ORklHX0RVTVBfQ09ERT15CitDT05GSUdfRFdBUkZfVU5XSU5ERVI9eQorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKaW5kZXggMzkxY2JlMS4uM2NlZTU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYwpAQCAtNDAsMTAgKzQwLDEwIEBACiAKIHN0YXRpYyBpbnQgcHZyMl9yZXF1ZXN0X2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKGN0cmxfaW5sKFBWUjJfRE1BX01PREUpICE9IDApCisJaWYgKF9fcmF3X3JlYWRsKFBWUjJfRE1BX01PREUpICE9IDApCiAJCXJldHVybiAtRUJVU1k7CiAKLQljdHJsX291dGwoMCwgUFZSMl9ETUFfTE1NT0RFMCk7CisJX19yYXdfd3JpdGVsKDAsIFBWUjJfRE1BX0xNTU9ERTApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MCw5ICs2MCw5IEBACiAKIAl4ZmVyX2NvbXBsZXRlID0gMDsKIAotCWN0cmxfb3V0bChjaGFuLT5kYXIsIFBWUjJfRE1BX0FERFIpOwotCWN0cmxfb3V0bChjaGFuLT5jb3VudCwgUFZSMl9ETUFfQ09VTlQpOwotCWN0cmxfb3V0bChjaGFuLT5tb2RlICYgRE1BX01PREVfTUFTSywgUFZSMl9ETUFfTU9ERSk7CisJX19yYXdfd3JpdGVsKGNoYW4tPmRhciwgUFZSMl9ETUFfQUREUik7CisJX19yYXdfd3JpdGVsKGNoYW4tPmNvdW50LCBQVlIyX0RNQV9DT1VOVCk7CisJX19yYXdfd3JpdGVsKGNoYW4tPm1vZGUgJiBETUFfTU9ERV9NQVNLLCBQVlIyX0RNQV9NT0RFKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggMzdmYjViOC4uODI3MjA4NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC01MiwxMSArNTIsMTQgQEAKICAqCiAgKiBpdGVyYXRpb25zIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2Zlci4KICAqLworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCXUzMiBjaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCXUzMiBjaGNyID0gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWludCBjbnQgPSAoKGNoY3IgJiBDSENSX1RTX0xPV19NQVNLKSA+PiBDSENSX1RTX0xPV19TSElGVCkgfAorCQkoKGNoY3IgJiBDSENSX1RTX0hJR0hfTUFTSykgPj4gQ0hDUl9UU19ISUdIX1NISUZUKTsKIAotCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSyk+PkNIQ1JfVFNfU0hJRlRdOworCXJldHVybiB0c19zaGlmdFtjbnRdOwogfQogCiAvKgpAQCAtNzAsMTMgKzczLDEzIEBACiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFuID0gZGV2X2lkOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwljaGNyID0gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCiAJaWYgKCEoY2hjciAmIENIQ1JfVEUpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAljaGNyICY9IH4oQ0hDUl9JRSB8IENIQ1JfREUpOwotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAl3YWtlX3VwKCZjaGFuLT53YWl0X3F1ZXVlKTsKIApAQCAtMTE1LDcgKzExOCw3IEBACiAJCWNoYW4tPmZsYWdzICY9IH5ETUFfVEVJX0NBUEFCTEU7CiAJfQogCi0JY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOworCV9fcmF3X3dyaXRlbChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWNoYW4tPmZsYWdzIHw9IERNQV9DT05GSUdVUkVEOwogCXJldHVybiAwOwpAQCAtMTI2LDEzICsxMjksMTMgQEAKIAlpbnQgaXJxOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwljaGNyID0gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgfD0gQ0hDUl9ERTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkKIAkJY2hjciB8PSBDSENSX0lFOwogCi0JY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOworCV9fcmF3X3dyaXRlbChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkgewogCQlpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CkBAIC0xNTAsOSArMTUzLDkgQEAKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAl9CiAKLQljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciAmPSB+KENIQ1JfREUgfCBDSENSX1RFIHwgQ0hDUl9JRSk7Ci0JY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOworCV9fcmF3X3dyaXRlbChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIH0KIAogc3RhdGljIGludCBzaF9kbWFjX3hmZXJfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTE4MywxMiArMTg2LDEyIEBACiAJICovCiAJaWYgKGNoYW4tPnNhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPnNhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0rU0FSKSk7CisJCV9fcmF3X3dyaXRlbChjaGFuLT5zYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dK1NBUikpOwogCWlmIChjaGFuLT5kYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5kYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgREFSKSk7CisJCV9fcmF3X3dyaXRlbChjaGFuLT5kYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgREFSKSk7CiAKLQljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLAorCV9fcmF3X3dyaXRlbChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksCiAJCShkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKSk7CiAKIAlzaF9kbWFjX2VuYWJsZV9kbWEoY2hhbik7CkBAIC0xOTgsMTAgKzIwMSwxMCBAQAogCiBzdGF0aWMgaW50IHNoX2RtYWNfZ2V0X2RtYV9yZXNpZHVlKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQlpZiAoIShjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikgJiBDSENSX0RFKSkKKwlpZiAoIShfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikgJiBDSENSX0RFKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikKKwlyZXR1cm4gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikKIAkJIDw8IGNhbGNfeG1pdF9zaGlmdChjaGFuKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMKaW5kZXggNWUyMjY4OS4uNzI2MjJlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCkBAIC04Niw4ICs4Niw4IEBACiAJdW5zaWduZWQgbG9uZyBkY3I7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlkY3IgPSBjdHJsX2lubChETUFCUkdDUik7Ci0JY3RybF9vdXRsKGRjciAmIH4weDAwZmYwMDAzLCBETUFCUkdDUik7CS8qIGFjayBhbGwgKi8KKwlkY3IgPSBfX3Jhd19yZWFkbChETUFCUkdDUik7CisJX19yYXdfd3JpdGVsKGRjciAmIH4weDAwZmYwMDAzLCBETUFCUkdDUik7CS8qIGFjayBhbGwgKi8KIAlkY3IgJj0gZGNyID4+IDg7CS8qIGlnbm9yZSBtYXNrZWQgKi8KIAogCS8qIFVTQiBzdHVmZiwgZ2V0IGl0IG91dCBvZiB0aGUgd2F5IGZpcnN0ICovCkBAIC0xMDksMTcgKzEwOSwxNyBAQAogc3RhdGljIHZvaWQgZG1hYnJnX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBkY3I7Ci0JZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOworCWRjciA9IF9fcmF3X3JlYWRsKERNQUJSR0NSKTsKIAlkY3IgJj0gfigxIDw8ICgoZG1haXJxID4gMSkgPyBkbWFpcnEgKyAyMiA6IGRtYWlycSArIDgpKTsKLQljdHJsX291dGwoZGNyLCBETUFCUkdDUik7CisJX19yYXdfd3JpdGVsKGRjciwgRE1BQlJHQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBkbWFicmdfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgZG1haXJxKQogewogCXVuc2lnbmVkIGxvbmcgZGNyOwotCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKKwlkY3IgPSBfX3Jhd19yZWFkbChETUFCUkdDUik7CiAJZGNyIHw9ICgxIDw8ICgoZG1haXJxID4gMSkgPyBkbWFpcnEgKyAyMiA6IGRtYWlycSArIDgpKTsKLQljdHJsX291dGwoZGNyLCBETUFCUkdDUik7CisJX19yYXdfd3JpdGVsKGRjciwgRE1BQlJHQ1IpOwogfQogCiBpbnQgZG1hYnJnX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEsIHZvaWQoKmhhbmRsZXIpKHZvaWQqKSwKQEAgLTE2NSwxMyArMTY1LDEzIEBACiAJCXByaW50ayhLRVJOX0lORk8gIkRNQUJSRzogRE1BQyBjaDAgbm90IHJlc2VydmVkIVxuIik7CiAjZW5kaWYKIAotCWN0cmxfb3V0bCgwLCBETUFCUkdDUik7Ci0JY3RybF9vdXRsKDAsIERNQUNIQ1IwKTsKLQljdHJsX291dGwoMHg5NDAwMDAwMCwgRE1BUlNSQSk7CS8qIGVuYWJsZSBETUFCUkcgaW4gRE1BQyAwICovCisJX19yYXdfd3JpdGVsKDAsIERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoMCwgRE1BQ0hDUjApOworCV9fcmF3X3dyaXRlbCgweDk0MDAwMDAwLCBETUFSU1JBKTsJLyogZW5hYmxlIERNQUJSRyBpbiBETUFDIDAgKi8KIAogCS8qIGVuYWJsZSBETUFCUkcgbW9kZSwgZW5hYmxlIHRoZSBETUFDICovCi0Jb3IgPSBjdHJsX2lubChETUFPUik7Ci0JY3RybF9vdXRsKG9yIHwgRE1BT1JfQlJHIHwgRE1BT1JfRE1FTiwgRE1BT1IpOworCW9yID0gX19yYXdfcmVhZGwoRE1BT1IpOworCV9fcmF3X3dyaXRlbChvciB8IERNQU9SX0JSRyB8IERNQU9SX0RNRU4sIERNQU9SKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKERNQUJSR0kwLCBkbWFicmdfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkJIkRNQUJSRyBVU0IgYWRkcmVzcyBlcnJvciIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jIGIvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCmluZGV4IGE5MzM5YTYuLjJhY2JjNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogR2VuZXJpYyBoZWFydGJlYXQgZHJpdmVyIGZvciByZWd1bGFyIExFRCBiYW5rcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIE1vc3QgU0ggcmVmZXJlbmNlIGJvYXJkcyBpbmNsdWRlIGEgbnVtYmVyIG9mIGluZGl2aWR1YWwgTEVEcyB0aGF0IGNhbgogICogYmUgaW5kZXBlbmRlbnRseSBjb250cm9sbGVkIChlaXRoZXIgdmlhIGEgcHJlLWRlZmluZWQgaGFyZHdhcmUKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAKICNkZWZpbmUgRFJWX05BTUUgImhlYXJ0YmVhdCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjIiCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlZmF1bHRfYml0X3Bvc1tdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CiAKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWhkLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWhkLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKHVubGlrZWx5KCFoZC0+YmFzZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwogCkBAIC0xMTcsOCArMTE3LDIwIEBACiAJZm9yIChpID0gMDsgaSA8IGhkLT5ucl9iaXRzOyBpKyspCiAJCWhkLT5tYXNrIHw9ICgxIDw8IGhkLT5iaXRfcG9zW2ldKTsKIAotCWlmICghaGQtPnJlZ3NpemUpCi0JCWhkLT5yZWdzaXplID0gODsJLyogZGVmYXVsdCBhY2Nlc3Mgc2l6ZSAqLworCWlmICghaGQtPnJlZ3NpemUpIHsKKwkJc3dpdGNoIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fVFlQRV9NQVNLKSB7CisJCWNhc2UgSU9SRVNPVVJDRV9NRU1fMzJCSVQ6CisJCQloZC0+cmVnc2l6ZSA9IDMyOworCQkJYnJlYWs7CisJCWNhc2UgSU9SRVNPVVJDRV9NRU1fMTZCSVQ6CisJCQloZC0+cmVnc2l6ZSA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgSU9SRVNPVVJDRV9NRU1fOEJJVDoKKwkJZGVmYXVsdDoKKwkJCWhkLT5yZWdzaXplID0gODsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJc2V0dXBfdGltZXIoJmhkLT50aW1lciwgaGVhcnRiZWF0X3RpbWVyLCAodW5zaWduZWQgbG9uZyloZCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggMDhhZjFmNC4uNGE1OWU2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgUENJIHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCi1vYmoteQkJCQkJKz0gcGNpLm8KK29iai15CQkJCQkrPSBjb21tb24ubyBwY2kubwogCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQkrPSBwY2ktc2g3NzUxLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikJKz0gcGNpLXNoNzc1MS5vIG9wcy1zaDQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykJKz0gcGNpLXNoNzc4MC5vIG9wcy1zaDQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJKz0gcGNpLXNoNzc4MC5vIG9wcy1zaDQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJKz0gcGNpLXNoNzc4MC5vIG9wcy1zaDQubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJKz0gb3BzLXNoNzc4Ni5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBwY2llLXNoNzc4Ni5vIG9wcy1zaDc3ODYubwogb2JqLSQoQ09ORklHX0NQVV9TSDUpCQkJKz0gcGNpLXNoNS5vIG9wcy1zaDUubwogCiBvYmotJChDT05GSUdfU0hfRFJFQU1DQVNUKQkJKz0gb3BzLWRyZWFtY2FzdC5vIGZpeHVwcy1kcmVhbWNhc3QubyBcCkBAIC0yNSw0ICsyNSwzIEBACiBvYmotJChDT05GSUdfU0hfTEFORElTSykJCSs9IGZpeHVwcy1sYW5kaXNrLm8KIG9iai0kKENPTkZJR19TSF9MQk9YX1JFMikJCSs9IGZpeHVwcy1ydHM3NzUxcjJkLm8KIG9iai0kKENPTkZJR19TSF9DQVlNQU4pCQkJKz0gZml4dXBzLWNheW1hbi5vCi1vYmotJChDT05GSUdfU0hfVVJRVUVMTCkJCSs9IHBjaWUtc2g3Nzg2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjEzODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jCkBAIC0wLDAgKzEsMTYyIEBACisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBlYXJseSBvbiBiZWZvcmUgUENJIHNjYW5uaW5nIGlzIGRvbmUKKyAqIGFuZCBhbGwgb2YgdGhlIHBjaV9kZXYgYW5kIHBjaV9idXMgc3RydWN0dXJlcyBoYXZlIGJlZW4gY3JlYXRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpmYWtlX3BjaV9kZXYoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCWludCB0b3BfYnVzLCBpbnQgYnVzbnIsIGludCBkZXZmbikKK3sKKwlzdGF0aWMgc3RydWN0IHBjaV9kZXYgZGV2OworCXN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyBidXM7CisKKwlkZXYuYnVzID0gJmJ1czsKKwlkZXYuc3lzZGF0YSA9IGhvc2U7CisJZGV2LmRldmZuID0gZGV2Zm47CisJYnVzLm51bWJlciA9IGJ1c25yOworCWJ1cy5zeXNkYXRhID0gaG9zZTsKKwlidXMub3BzID0gaG9zZS0+cGNpX29wczsKKworCWlmKGJ1c25yICE9IHRvcF9idXMpCisJCS8qIEZha2UgYSBwYXJlbnQgYnVzIHN0cnVjdHVyZS4gKi8KKwkJYnVzLnBhcmVudCA9ICZidXM7CisJZWxzZQorCQlidXMucGFyZW50ID0gTlVMTDsKKworCXJldHVybiAmZGV2OworfQorCisjZGVmaW5lIEVBUkxZX1BDSV9PUChydywgc2l6ZSwgdHlwZSkJCQkJCVwKK2ludCBfX2luaXQgZWFybHlfIyNydyMjX2NvbmZpZ18jI3NpemUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAkJXAorCWludCB0b3BfYnVzLCBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHR5cGUgdmFsdWUpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHBjaV8jI3J3IyNfY29uZmlnXyMjc2l6ZSgJCQkJXAorCQlmYWtlX3BjaV9kZXYoaG9zZSwgdG9wX2J1cywgYnVzLCBkZXZmbiksCQlcCisJCW9mZnNldCwgdmFsdWUpOwkJCQkJCVwKK30KKworRUFSTFlfUENJX09QKHJlYWQsIGJ5dGUsIHU4ICopCitFQVJMWV9QQ0lfT1AocmVhZCwgd29yZCwgdTE2ICopCitFQVJMWV9QQ0lfT1AocmVhZCwgZHdvcmQsIHUzMiAqKQorRUFSTFlfUENJX09QKHdyaXRlLCBieXRlLCB1OCkKK0VBUkxZX1BDSV9PUCh3cml0ZSwgd29yZCwgdTE2KQorRUFSTFlfUENJX09QKHdyaXRlLCBkd29yZCwgdTMyKQorCitpbnQgX19pbml0IHBjaV9pc182Nm1oel9jYXBhYmxlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwkJCQlpbnQgdG9wX2J1cywgaW50IGN1cnJlbnRfYnVzKQoreworCXUzMiBwY2lfZGV2Zm47CisJdW5zaWduZWQgc2hvcnQgdmlkOworCWludCBjYXA2NiA9IC0xOworCXUxNiBzdGF0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBDaGVja2luZyA2Nk1IeiBjYXBhYmlsaXRpZXMuLi5cbiIpOworCisJZm9yIChwY2lfZGV2Zm4gPSAwOyBwY2lfZGV2Zm4gPCAweGZmOyBwY2lfZGV2Zm4rKykgeworCQlpZiAoUENJX0ZVTkMocGNpX2RldmZuKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJICAgcGNpX2RldmZuLCBQQ0lfVkVORE9SX0lELCAmdmlkKSAhPQorCQkgICAgUENJQklPU19TVUNDRVNTRlVMKQorCQkJY29udGludWU7CisJCWlmICh2aWQgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJLyogY2hlY2sgNjZNSHogY2FwYWJpbGl0eSAqLworCQlpZiAoY2FwNjYgPCAwKQorCQkJY2FwNjYgPSAxOworCQlpZiAoY2FwNjYpIHsKKwkJCWVhcmx5X3JlYWRfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCSAgICAgICBwY2lfZGV2Zm4sIFBDSV9TVEFUVVMsICZzdGF0KTsKKwkJCWlmICghKHN0YXQgJiBQQ0lfU1RBVFVTXzY2TUhaKSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJQQ0k6ICUwMng6JTAyeCBub3QgNjZNSHogY2FwYWJsZS5cbiIsCisJCQkJICAgICAgIGN1cnJlbnRfYnVzLCBwY2lfZGV2Zm4pOworCQkJCWNhcDY2ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBjYXA2NiA+IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWJpb3NfZW5hYmxlX2Vycih1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSAoc3RydWN0IHBjaV9jaGFubmVsICopX19kYXRhOworCisJZGVsX3RpbWVyKCZob3NlLT5lcnJfdGltZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHJlLWVuYWJsaW5nIGVycm9yIElSUS5cbiIpOworCWVuYWJsZV9pcnEoaG9zZS0+ZXJyX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWJpb3NfZW5hYmxlX3NlcnIodW5zaWduZWQgbG9uZyBfX2RhdGEpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gKHN0cnVjdCBwY2lfY2hhbm5lbCAqKV9fZGF0YTsKKworCWRlbF90aW1lcigmaG9zZS0+c2Vycl90aW1lcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogcmUtZW5hYmxpbmcgc3lzdGVtIGVycm9yIElSUS5cbiIpOworCWVuYWJsZV9pcnEoaG9zZS0+c2Vycl9pcnEpOworfQorCit2b2lkIHBjaWJpb3NfZW5hYmxlX3RpbWVycyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJaWYgKGhvc2UtPmVycl9pcnEpIHsKKwkJaW5pdF90aW1lcigmaG9zZS0+ZXJyX3RpbWVyKTsKKwkJaG9zZS0+ZXJyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3NlOworCQlob3NlLT5lcnJfdGltZXIuZnVuY3Rpb24gPSBwY2liaW9zX2VuYWJsZV9lcnI7CisJfQorCisJaWYgKGhvc2UtPnNlcnJfaXJxKSB7CisJCWluaXRfdGltZXIoJmhvc2UtPnNlcnJfdGltZXIpOworCQlob3NlLT5zZXJyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3NlOworCQlob3NlLT5zZXJyX3RpbWVyLmZ1bmN0aW9uID0gcGNpYmlvc19lbmFibGVfc2VycjsKKwl9Cit9CisKKy8qCisgKiBBIHNpbXBsZSBoYW5kbGVyIGZvciB0aGUgcmVndWxhciBQQ0kgc3RhdHVzIGVycm9ycywgY2FsbGVkIGZyb20gSVJRCisgKiBjb250ZXh0LgorICovCit1bnNpZ25lZCBpbnQgcGNpYmlvc19oYW5kbGVfc3RhdHVzX2Vycm9ycyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgdW5zaWduZWQgaW50IHN0YXR1cywKKwkJCQkJICBzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJdW5zaWduZWQgaW50IGNtZCA9IDA7CisKKwlpZiAoc3RhdHVzICYgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1hc3RlciBhYm9ydCwgcGM9MHglMDhseFxuIiwgYWRkcik7CisJCWNtZCB8PSBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQ7CisJfQorCisJaWYgKHN0YXR1cyAmIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiB0YXJnZXQgYWJvcnQ6ICIpOworCQlwY2liaW9zX3JlcG9ydF9zdGF0dXMoUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwKKwkJCQkgICAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfAorCQkJCSAgICAgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCwgMSk7CisJCXByaW50aygiXG4iKTsKKworCQljbWQgfD0gUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUOworCX0KKworCWlmIChzdGF0dXMgJiAoUENJX1NUQVRVU19QQVJJVFkgfCBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogcGFyaXR5IGVycm9yIGRldGVjdGVkOiAiKTsKKwkJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfUEFSSVRZIHwKKwkJCQkgICAgICBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSwgMSk7CisJCXByaW50aygiXG4iKTsKKworCQljbWQgfD0gUENJX1NUQVRVU19QQVJJVFkgfCBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWTsKKworCQkvKiBOb3cgYmFjayBvZmYgb2YgdGhlIElSUSBmb3IgYXdoaWxlICovCisJCWlmIChob3NlLT5lcnJfaXJxKSB7CisJCQlkaXNhYmxlX2lycV9ub3N5bmMoaG9zZS0+ZXJyX2lycSk7CisJCQlob3NlLT5lcnJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwkJCWFkZF90aW1lcigmaG9zZS0+ZXJyX3RpbWVyKTsKKwkJfQorCX0KKworCXJldHVybiBjbWQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jCmluZGV4IGVkN2Y0ODkuLjk0MmVmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jCkBAIC0zOSw3ICszOSw3IEBACiAJCS8qCiAJCSAqIFdlIGFsc28gYXNzdW1lIHRoYXQgZGV2LT5kZXZmbiA9PSAwCiAJCSAqLwotCQlkZXYtPnJlc291cmNlWzFdLnN0YXJ0CT0gcC0+aW9fcmVzb3VyY2UtPnN0YXJ0ICArIDB4MTAwOworCQlkZXYtPnJlc291cmNlWzFdLnN0YXJ0CT0gcC0+cmVzb3VyY2VzWzBdLnN0YXJ0ICArIDB4MTAwOwogCQlkZXYtPnJlc291cmNlWzFdLmVuZAk9IGRldi0+cmVzb3VyY2VbMV0uc3RhcnQgKyAweDIwMCAtIDE7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYwppbmRleCAxNWNhNjVjLi4wOGIyZDg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCkBAIC0yMiwxNSArMjIsMyBAQAogewogCXJldHVybiBpcnFfdGFiW3Nsb3RdOwogfQotCi1pbnQgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQotewotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwNDNmZiwgU0g0X1BDSUlOVE0pOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g3NzgwX1BDSUlCQVIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwODAwMDAwMCwgU0g3NzgwX1BDSUNTQ1IwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMWIsIFNINzc4MF9QQ0lDU0FSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweGZkMDAwMDAwLCBTSDc3ODBfUENJQ1NDUjEpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwZiwgU0g3NzgwX1BDSUNTQVIxKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCmluZGV4IDc4OThmMTQuLmUyNDg1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGJjcjEsIG1jcjsKIAotCWJjcjEgPSBjdHJsX2lubChTSDc3NTFfQkNSMSk7CisJYmNyMSA9IF9fcmF3X3JlYWRsKFNINzc1MV9CQ1IxKTsKIAliY3IxIHw9IDB4NDAwODAwMDA7CS8qIEVuYWJsZSBCaXQgMTkgQlJFUUVOLCBzZXQgUENJQyB0byBzbGF2ZSAqLwogCXBjaV93cml0ZV9yZWcoY2hhbiwgYmNyMSwgU0g0X1BDSUJDUjEpOwogCkBAIC01NCw3ICs1NCw3IEBACiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAweGZiOTAwMDQ3LCBTSDc3NTFfUENJQ09ORjEpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhhYjAwMDAwMSwgU0g3NzUxX1BDSUNPTkY0KTsKIAotCW1jciA9IGN0cmxfaW5sKFNINzc1MV9NQ1IpOworCW1jciA9IF9fcmF3X3JlYWRsKFNINzc1MV9NQ1IpOwogCW1jciA9IChtY3IgJiBQQ0lNQ1JfTVJTRVRfT0ZGKSAmIFBDSU1DUl9SRlNIX09GRjsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIG1jciwgU0g0X1BDSU1DUik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYwppbmRleCAyNTBiMGVkLi4wOTMwZjk4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCkBAIC0zMSwyMiArMzEsMyBAQAogewogICAgICAgIHJldHVybiBzZGs3NzgwX2lycV90YWJbcGluLTFdW3Nsb3RdOwogfQotaW50IHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKLXsKLQkvKiBFbmFibGUgYWxsIGludGVycnVwdHMsIHNvIHdlIGtub3cgd2hhdCB0byBmaXggKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMEMzRkYsIFNINzc4MF9QQ0lJTVIpOwotCi0JLyogU2V0IHVwIHN0YW5kYXJkIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA4MDAwMDAwLCBTSDc3ODBfUENJTUJBUjApOwkvKiBQQ0kgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDgwMDAwMDAsIFNINF9QQ0lMQVIwKTsJLyogU0h3eSAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwN0YwMDAwMSwgU0g0X1BDSUxTUjApOwkvKiBzaXplIDEyOE0gdy8gTUJBUiAqLwotCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDc3ODBfUENJTUJBUjEpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0X1BDSUxBUjEpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0X1BDSUxTUjEpOwotCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweEFCMDAwODAxLCBTSDc3ODBfUENJSUJBUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweEE1MDAwQzAxLCBTSDRfUENJQ1IpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCmluZGV4IDQ3NWZhOWYuLmE0YzdkM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCkBAIC05NywxMiArOTcsMTIgQEAKIAkqIG1lYW5pbmcgYWxsIGNhbGxzIGdvIHN0cmFpZ2h0IHRocm91Z2guLi4gdXNlIEJVR19PTiB0bwogCSogY2F0Y2ggZXJyb25lb3VzIGFzc3VtcHRpb24uCiAJKi8KLQlCVUdfT04oY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCAhPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFKTsKKwlCVUdfT04oY2hhbi0+cmVzb3VyY2VzWzFdLnN0YXJ0ICE9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UpOwogCi0JUENJQ19XUklURShTSDc3NTFfUENJTUJSLCBjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0KTsKKwlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lNQlIsIGNoYW4tPnJlc291cmNlc1sxXS5zdGFydCk7CiAKIAkvKiBTZXQgSU9CUiBmb3Igd2luZG93IGNvbnRhaW5pbmcgYXJlYSBzcGVjaWZpZWQgaW4gcGNpLmggKi8KLQlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lJT0JSLCAoY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0ICYgU0g3NzUxX1BDSUlPQlJfTUFTSykpOworCVBDSUNfV1JJVEUoU0g3NzUxX1BDSUlPQlIsIChjaGFuLT5yZXNvdXJjZXNbMF0uc3RhcnQgJiBTSDc3NTFfUENJSU9CUl9NQVNLKSk7CiAKIAkvKiBBbGwgZG9uZSwgbWF5IGFzIHdlbGwgc2F5IHNvLi4uICovCiAJcHJpbnRrKCJTSDc3NTEgUENJOiBGaW5pc2hlZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgUENJIGNvbnRyb2xsZXJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYwppbmRleCA3OGJlYmViLi4wYjgxOTk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYwpAQCAtMTYsNyArMTYsNyBAQAogICogRGlyZWN0IGFjY2VzcyB0byBQQ0kgaGFyZHdhcmUuLi4KICAqLwogI2RlZmluZSBDT05GSUdfQ01EKGJ1cywgZGV2Zm4sIHdoZXJlKSBcCi0JKFAxU0VHIHwgKGJ1cy0+bnVtYmVyIDw8IDE2KSB8IChkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIH4zKSkKKwkoMHg4MDAwMDAwMCB8IChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2g0X3BjaV9sb2NrKTsKIApAQCAtMTAyLDM0ICsxMDIsNiBAQAogCS53cml0ZQkJPSBzaDRfcGNpX3dyaXRlLAogfTsKIAotLyoKLSAqIE5vdCByZWFsbHkgcmVsYXRlZCB0byBwY2lfb3BzLCBidXQgaXQncyBjb21tb24gYW5kIG5vdCB3b3J0aCBzaG92aW5nCi0gKiBzb21ld2hlcmUgZWxzZSBmb3Igbm93Li4KLSAqLwotaW50IF9faW5pdCBzaDRfcGNpX2NoZWNrX2RpcmVjdChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCi17Ci0JLyoKLQkgKiBDaGVjayBpZiBjb25maWd1cmF0aW9uIHdvcmtzLgotCSAqLwotCXVuc2lnbmVkIGludCB0bXAgPSBwY2lfcmVhZF9yZWcoY2hhbiwgU0g0X1BDSVBBUik7Ci0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIFAxU0VHLCBTSDRfUENJUEFSKTsKLQotCWlmIChwY2lfcmVhZF9yZWcoY2hhbiwgU0g0X1BDSVBBUikgPT0gUDFTRUcpIHsKLQkJcGNpX3dyaXRlX3JlZyhjaGFuLCB0bXAsIFNINF9QQ0lQQVIpOwotCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIGNvbmZpZ3VyYXRpb24gdHlwZSAxXG4iKTsKLQkJcmVxdWVzdF9yZWdpb24oY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJUEFSLCA4LAotCQkJICAgICAgICJQQ0kgY29uZjEiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCB0bXAsIFNINF9QQ0lQQVIpOwotCi0JcHJpbnRrKEtFUk5fRVJSICJQQ0k6ICVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIGludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQogewogCS8qIE5vdGhpbmcgdG8gZG8uICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWRyZWFtY2FzdC5jCmluZGV4IDIxMGY5ZDQuLjYzMzY5NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWRyZWFtY2FzdC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWRyZWFtY2FzdC5jCkBAIC0yNSwyNSArMjUsMjUgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9wY2kuaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXBzcGNpX2lvX3Jlc291cmNlID0gewotCS5uYW1lCT0gIkdBUFNQQ0kgSU8iLAotCS5zdGFydAk9IEdBUFNQQ0lfQkJBX0NPTkZJRywKLQkuZW5kCT0gR0FQU1BDSV9CQkFfQ09ORklHICsgR0FQU1BDSV9CQkFfQ09ORklHX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGdhcHNwY2lfbWVtX3Jlc291cmNlID0gewotCS5uYW1lCT0gIkdBUFNQQ0kgbWVtIiwKLQkuc3RhcnQJPSBHQVBTUENJX0RNQV9CQVNFLAotCS5lbmQJPSBHQVBTUENJX0RNQV9CQVNFICsgR0FQU1BDSV9ETUFfU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdhcHNwY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJHQVBTUENJIElPIiwKKwkJLnN0YXJ0CT0gR0FQU1BDSV9CQkFfQ09ORklHLAorCQkuZW5kCT0gR0FQU1BDSV9CQkFfQ09ORklHICsgR0FQU1BDSV9CQkFfQ09ORklHX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sICB7CisJCS5uYW1lCT0gIkdBUFNQQ0kgbWVtIiwKKwkJLnN0YXJ0CT0gR0FQU1BDSV9ETUFfQkFTRSwKKwkJLmVuZAk9IEdBUFNQQ0lfRE1BX0JBU0UgKyBHQVBTUENJX0RNQV9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgZHJlYW1jYXN0X3BjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCT0gJmdhcHNwY2lfcGNpX29wcywKLQkuaW9fcmVzb3VyY2UJPSAmZ2Fwc3BjaV9pb19yZXNvdXJjZSwKKwkucmVzb3VyY2VzCT0gZ2Fwc3BjaV9yZXNvdXJjZXMsCisJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZ2Fwc3BjaV9yZXNvdXJjZXMpLAogCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5tZW1fcmVzb3VyY2UJPSAmZ2Fwc3BjaV9tZW1fcmVzb3VyY2UsCiAJLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwLAogfTsKIApAQCAtOTUsOCArOTUsNiBAQAogCW91dGwoMHgwMDAwMjAwMSwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MTApOwogCW91dGwoMHgwMTAwMDAwMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MTQpOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJmRyZWFtY2FzdF9wY2lfY29udHJvbGxlcik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJmRyZWFtY2FzdF9wY2lfY29udHJvbGxlcik7CiB9CiBhcmNoX2luaXRjYWxsKGdhcHNwY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oCmluZGV4IDNkNTI5NmMuLmNiZjc2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oCkBAIC00OSw2ICs0OSwxNyBAQAogICAjZGVmaW5lIFNINF9QQ0lJTlRfTVdQRAkgIDB4MDAwMDAwMDIJLyogTWFzdGVyIFdyaXRlIFBFUlIgRGV0ZWN0ICovCiAgICNkZWZpbmUgU0g0X1BDSUlOVF9NUlBECSAgMHgwMDAwMDAwMQkvKiBNYXN0ZXIgUmVhZCBQRVJSIERldGVjdCAqLwogI2RlZmluZSBTSDRfUENJSU5UTQkJMHgxMTgJCS8qIFBDSSBJbnRlcnJ1cHQgTWFzayAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1RUQURJTQkgIEJJVCgxNCkJLyogVGFyZ2V0LXRhcmdldCBhYm9ydCBpbnRlcnJ1cHQgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9UTVRPSU0JICBCSVQoOSkJLyogVGFyZ2V0IHJldHJ5IHRpbWVvdXQgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9NREVJTQkgIEJJVCg4KQkvKiBNYXN0ZXIgZnVuY3Rpb24gZGlzYWJsZSBlcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX0FQRURJTQkgIEJJVCg3KQkvKiBBZGRyZXNzIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9TRElNCSAgQklUKDYpCS8qIFNFUlIgZGV0ZWN0aW9uICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fRFBFSVRXTQkgIEJJVCg1KQkvKiBEYXRhIHBhcml0eSBlcnJvciBmb3IgdGFyZ2V0IHdyaXRlICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fUEVESVRSTQkgIEJJVCg0KQkvKiBQRVJSIGRldGVjdGlvbiBmb3IgdGFyZ2V0IHJlYWQgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9UQURJTU0JICBCSVQoMykJLyogVGFyZ2V0IGFib3J0IGZvciBtYXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9NQURJTU0JICBCSVQoMikJLyogTWFzdGVyIGFib3J0IGZvciBtYXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9NV1BESU0JICBCSVQoMSkJLyogTWFzdGVyIHdyaXRlIGRhdGEgcGFyaXR5IGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTVJEUEVJTQkgIEJJVCgwKQkvKiBNYXN0ZXIgcmVhZCBkYXRhIHBhcml0eSBlcnJvciAqLwogI2RlZmluZSBTSDRfUENJQUxSCQkweDExQwkJLyogRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTSDRfUENJQ0xSCQkweDEyMAkJLyogRXJyb3IgQ29tbWFuZC9EYXRhICovCiAgICNkZWZpbmUgU0g0X1BDSUNMUl9NUElPCSAgMHg4MDAwMDAwMApAQCAtNjEsNyArNzIsNyBAQAogI2RlZmluZSBTSDRfUENJQUlOVAkJMHgxMzAJCS8qIEFyYml0ZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJLTgkgIDB4MDAwMDIwMDAJLyogTWFzdGVyIEJyb2tlbiBJbnRlcnJ1cHQgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9UQlRPCSAgMHgwMDAwMTAwMAkvKiBUYXJnZXQgQnVzIFRpbWUgT3V0ICovCi0gICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJUTwkgIDB4MDAwMDEwMDAJLyogTWFzdGVyIEJ1cyBUaW1lIE91dCAqLworICAjZGVmaW5lIFNINF9QQ0lBSU5UX01CVE8JICAweDAwMDAwODAwCS8qIE1hc3RlciBCdXMgVGltZSBPdXQgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9UQUJUCSAgMHgwMDAwMDAwOAkvKiBUYXJnZXQgQWJvcnQgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9NQUJUCSAgMHgwMDAwMDAwNAkvKiBNYXN0ZXIgQWJvcnQgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9SRFBFCSAgMHgwMDAwMDAwMgkvKiBSZWFkIERhdGEgUGFyaXR5IEVycm9yICovCkBAIC0xNTEsNyArMTYyLDYgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvZHJpdmVycy9wY2kvb3BzLXNoNC5jICovCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgc2g0X3BjaV9vcHM7Ci1pbnQgc2g0X3BjaV9jaGVja19kaXJlY3Qoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKTsKIGludCBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pOwogCiBzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX3NwYWNlIHsKQEAgLTE2NywxMyArMTc3LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3dyaXRlX3JlZyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4sCiAJCQkJIHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKIHsKLQljdHJsX291dGwodmFsLCBjaGFuLT5yZWdfYmFzZSArIHJlZyk7CisJX19yYXdfd3JpdGVsKHZhbCwgY2hhbi0+cmVnX2Jhc2UgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGNpX3JlYWRfcmVnKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcmVnKQogewotCXJldHVybiBjdHJsX2lubChjaGFuLT5yZWdfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogI2VuZGlmIC8qIF9fUENJX1NINF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5jCmluZGV4IDg3M2VkMmIuLjBiZjI5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5jCkBAIC04OSwxNCArODksMTMgQEAKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g1X2lvX3Jlc291cmNlID0geyAvKiBwbGFjZSBob2xkZXIgKi8gfTsKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g1X21lbV9yZXNvdXJjZSA9IHsgLyogcGxhY2UgaG9sZGVyICovIH07CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNV9wY2lfcmVzb3VyY2VzWzJdOwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIHNoNXBjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCQk9ICZzaDVfcGNpX29wcywKLQkubWVtX3Jlc291cmNlCQk9ICZzaDVfbWVtX3Jlc291cmNlLAorCS5yZXNvdXJjZXMJCT0gc2g1X3BjaV9yZXNvdXJjZXMsCisJLm5yX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHNoNV9wY2lfcmVzb3VyY2VzKSwKIAkubWVtX29mZnNldAkJPSAweDAwMDAwMDAwLAotCS5pb19yZXNvdXJjZQkJPSAmc2g1X2lvX3Jlc291cmNlLAogCS5pb19vZmZzZXQJCT0gMHgwMDAwMDAwMCwKIH07CiAKQEAgLTIxMCwxNCArMjA5LDEyIEBACiAgICAgICAgIFNINVBDSV9XUklURShBSU5UTSwgfjApOwogICAgICAgICBTSDVQQ0lfV1JJVEUoUElOVE0sIH4wKTsKIAotCXNoNV9pb19yZXNvdXJjZS5zdGFydCA9IFBDSV9JT19BUkVBOwotCXNoNV9pb19yZXNvdXJjZS5lbmQgPSBQQ0lfSU9fQVJFQSArIDB4MTAwMDA7CisJc2g1X3BjaV9yZXNvdXJjZXNbMF0uc3RhcnQgPSBQQ0lfSU9fQVJFQTsKKwlzaDVfcGNpX3Jlc291cmNlc1swXS5lbmQgPSBQQ0lfSU9fQVJFQSArIDB4MTAwMDA7CiAKLQlzaDVfbWVtX3Jlc291cmNlLnN0YXJ0ID0gbWVtU3RhcnQ7Ci0Jc2g1X21lbV9yZXNvdXJjZS5lbmQgPSBtZW1TdGFydCArIG1lbVNpemU7CisJc2g1X3BjaV9yZXNvdXJjZXNbMV0uc3RhcnQgPSBtZW1TdGFydDsKKwlzaDVfcGNpX3Jlc291cmNlc1sxXS5lbmQgPSBtZW1TdGFydCArIG1lbVNpemU7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmc2g1cGNpX2NvbnRyb2xsZXIpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZzaDVwY2lfY29udHJvbGxlcik7CiB9CiBhcmNoX2luaXRjYWxsKHNoNXBjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmgKaW5kZXggZjI3NzYyOC4uM2YwMWRlYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmgKQEAgLTg2LDE0ICs4NiwxNCBAQAogLyogI2RlZmluZSBQQ0lTSDVfVkNSX1JFRyh4KSAgICAgICAgICAgICAgICAoIFNINVBDSV9WQ1JfQkFTRSAoUENJU0g1X1ZDUl8jI3gpKSAqLwogCiAvKiBXcml0ZSBJL08gZnVuY3Rpb25zICovCi0jZGVmaW5lIFNINVBDSV9XUklURShyZWcsdmFsKSAgICAgICAgY3RybF9vdXRsKCh1MzIpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1dSSVRFX1NIT1JUKHJlZyx2YWwpICBjdHJsX291dHcoKHUxNikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfV1JJVEVfQllURShyZWcsdmFsKSAgIGN0cmxfb3V0YigodTgpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1dSSVRFKHJlZyx2YWwpICAgICAgICBfX3Jhd193cml0ZWwoKHUzMikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfV1JJVEVfU0hPUlQocmVnLHZhbCkgIF9fcmF3X3dyaXRldygodTE2KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9XUklURV9CWVRFKHJlZyx2YWwpICAgX19yYXdfd3JpdGViKCh1OCkodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQogCiAvKiBSZWFkIEkvTyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgU0g1UENJX1JFQUQocmVnKSAgICAgICAgICAgICBjdHJsX2lubChQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfUkVBRF9TSE9SVChyZWcpICAgICAgIGN0cmxfaW53KFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9SRUFEX0JZVEUocmVnKSAgICAgICAgY3RybF9pbmIoUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1JFQUQocmVnKSAgICAgICAgICAgICBfX3Jhd19yZWFkbChQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfUkVBRF9TSE9SVChyZWcpICAgICAgIF9fcmF3X3JlYWR3KFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9SRUFEX0JZVEUocmVnKSAgICAgICAgX19yYXdfcmVhZGIoUENJU0g1X0lDUl9SRUcocmVnKSkKIAogLyogU2V0IFBDSSBjb25maWcgYml0cyAqLwogI2RlZmluZSBTRVRfQ09ORklHX0JJVFMoYnVzLGRldmZuLHdoZXJlKSAgKCgoKGJ1cykgPDwgMTYpIHwgKChkZXZmbikgPDwgOCkgfCAoKHdoZXJlKSAmIH4zKSkgfCAweDgwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYwppbmRleCA3MGMxOTk5Li4xNzgxMWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYwpAQCAtNDQsMjUgKzQ0LDI1IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX2lvX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc1MV9JTyIsCi0JLnN0YXJ0CT0gU0g3NzUxX1BDSV9JT19CQVNFLAotCS5lbmQJPSBTSDc3NTFfUENJX0lPX0JBU0UgKyBTSDc3NTFfUENJX0lPX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX21lbV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3NTFfbWVtIiwKLQkuc3RhcnQJPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFLAotCS5lbmQJPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFICsgU0g3NzUxX1BDSV9NRU1fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX3BjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlNINzc1MV9JTyIsCisJCS5zdGFydAk9IFNINzc1MV9QQ0lfSU9fQkFTRSwKKwkJLmVuZAk9IFNINzc1MV9QQ0lfSU9fQkFTRSArIFNINzc1MV9QQ0lfSU9fU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KKwl9LCB7CisJCS5uYW1lCT0gIlNINzc1MV9tZW0iLAorCQkuc3RhcnQJPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFLAorCQkuZW5kCT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSArIFNINzc1MV9QQ0lfTUVNX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIHNoNzc1MV9wY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZzaDRfcGNpX29wcywKLQkubWVtX3Jlc291cmNlCT0gJnNoNzc1MV9tZW1fcmVzb3VyY2UsCisJLnJlc291cmNlcwk9IHNoNzc1MV9wY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc1MV9wY2lfcmVzb3VyY2VzKSwKIAkubWVtX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLmlvX3Jlc291cmNlCT0gJnNoNzc1MV9pb19yZXNvdXJjZSwKIAkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKIAkuaW9fbWFwX2Jhc2UJPSBTSDc3NTFfUENJX0lPX0JBU0UsCiB9OwpAQCAtNzksNyArNzksNiBAQAogCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9ICZzaDc3NTFfcGNpX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgaW50IGlkOwogCXUzMiB3b3JkLCByZWc7Ci0JaW50IHJldDsKIAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBTdGFydGluZyBpbnRpYWxpemF0aW9uLlxuIik7CiAKQEAgLTkzLDEzICs5MiwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoKHJldCA9IHNoNF9wY2lfY2hlY2tfZGlyZWN0KGNoYW4pKSAhPSAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogU2V0IHRoZSBCQ1IncyB0byBlbmFibGUgUENJIGFjY2VzcyAqLwotCXJlZyA9IGN0cmxfaW5sKFNINzc1MV9CQ1IxKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChTSDc3NTFfQkNSMSk7CiAJcmVnIHw9IDB4ODAwMDA7Ci0JY3RybF9vdXRsKHJlZywgU0g3NzUxX0JDUjEpOworCV9fcmF3X3dyaXRlbChyZWcsIFNINzc1MV9CQ1IxKTsKIAogCS8qIFR1cm4gdGhlIGNsb2NrcyBiYWNrIG9uIChub3QgZG9uZSBpbiByZXNldCkqLwogCXBjaV93cml0ZV9yZWcoY2hhbiwgMCwgU0g0X1BDSUNMS1IpOwpAQCAtMTMyLDEzICsxMjgsMTMgQEAKIAkvKiBTZXQgdGhlIGxvY2FsIDE2TUIgUENJIG1lbW9yeSBzcGFjZSB3aW5kb3cgdG8KIAkgKiB0aGUgbG93ZXN0IFBDSSBtYXBwZWQgYWRkcmVzcwogCSAqLwotCXdvcmQgPSBjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0ICYgU0g0X1BDSU1CUl9NQVNLOworCXdvcmQgPSBjaGFuLT5yZXNvdXJjZXNbMV0uc3RhcnQgJiBTSDRfUENJTUJSX01BU0s7CiAJcHJfZGVidWcoIlBDSTogU2V0dGluZyB1cHBlciBiaXRzIG9mIE1lbW9yeSB3aW5kb3cgdG8gMHgleFxuIiwgd29yZCk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkICwgU0g0X1BDSU1CUik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIE1TQidzIG9mIElPIHdpbmRvdyBhcmUgc2V0IHRvIGFjY2VzcyBQQ0kgc3BhY2UKIAkgKiBjb3JyZWN0bHkgKi8KLQl3b3JkID0gY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0ICYgU0g0X1BDSUlPQlJfTUFTSzsKKwl3b3JkID0gY2hhbi0+cmVzb3VyY2VzWzBdLnN0YXJ0ICYgU0g0X1BDSUlPQlJfTUFTSzsKIAlwcl9kZWJ1ZygiUENJOiBTZXR0aW5nIHVwcGVyIGJpdHMgb2YgSU8gd2luZG93IHRvIDB4JXhcbiIsIHdvcmQpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSUlPQlIpOwogCkBAIC0xNTksMTMgKzE1NSwxMyBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBjb25maWd1cmUgdGhlIHdhaXQgY29udHJvbCByZWdpc3RlcnMgKi8KLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX1dDUjEpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfV0NSMSk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJV0NSMSk7Ci0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9XQ1IyKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX1dDUjIpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSVdDUjIpOwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfV0NSMyk7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9XQ1IzKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lXQ1IzKTsKLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX01DUik7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9NQ1IpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSU1DUik7CiAKIAkvKiBOT1RFOiBJJ20gaWdub3JpbmcgdGhlIFBDSSBlcnJvciBJUlFzIGZvciBub3cuLgpAQCAtMTgwLDggKzE3Niw2IEBACiAJd29yZCA9IFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfQ0ZJTiB8IFNINF9QQ0lDUl9BUkJNOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSUNSKTsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOwogfQogYXJjaF9pbml0Y2FsbChzaDc3NTFfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwppbmRleCAzMjNiOTJkLi5mZmRjYmYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBMb3ctTGV2ZWwgUENJIFN1cHBvcnQgZm9yIHRoZSBTSDc3ODAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTEsNTIgKzExLDI0MCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODVfaW9fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3Nzg1X0lPIiwKLQkuc3RhcnQJPSBTSDc3ODBfUENJX0lPX0JBU0UsCi0JLmVuZAk9IFNINzc4MF9QQ0lfSU9fQkFTRSArIFNINzc4MF9QQ0lfSU9fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODVfbWVtX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc4NV9tZW0iLAotCS5zdGFydAk9IFNINzc4MF9QQ0lfTUVNT1JZX0JBU0UsCi0JLmVuZAk9IFNINzc4MF9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3ODBfUENJX01FTV9TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODVfcGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiUENJIElPIiwKKwkJLnN0YXJ0CT0gMHgxMDAwLAorCQkuZW5kCT0gU1pfNE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sIHsKKwkJLm5hbWUJPSAiUENJIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHhmZDAwMDAwMCwKKwkJLmVuZAk9IDB4ZmQwMDAwMDAgKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lCT0gIlBDSSBNRU0gMSIsCisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDEwMDAwMDAwICsgU1pfNjRNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkvKgorCQkgKiAzMi1iaXQgb25seSByZXNvdXJjZXMgbXVzdCBiZSBsYXN0LgorCQkgKi8KKwkJLm5hbWUJPSAiUENJIE1FTSAyIiwKKwkJLnN0YXJ0CT0gMHhjMDAwMDAwMCwKKwkJLmVuZAk9IDB4YzAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3ODBfcGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJPSAmc2g0X3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQk9ICZzaDc3ODVfbWVtX3Jlc291cmNlLAotCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3Nzg1X2lvX3Jlc291cmNlLAotCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5pb19tYXBfYmFzZQk9IFNINzc4MF9QQ0lfSU9fQkFTRSwKKwkucmVzb3VyY2VzCT0gc2g3Nzg1X3BjaV9yZXNvdXJjZXMsCisJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3Nzg1X3BjaV9yZXNvdXJjZXMpLAorCS5pb19vZmZzZXQJPSAwLAorCS5tZW1fb2Zmc2V0CT0gMCwKKwkuaW9fbWFwX2Jhc2UJPSAweGZlMjAwMDAwLAorCS5zZXJyX2lycQk9IGV2dDJpcnEoMHhhMDApLAorCS5lcnJfaXJxCT0gZXZ0MmlycSgweGFhMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXAgc2g3NzgwX3BjaV9tYXAgPSB7Ci0JLndpbmRvdzAJPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCi0JCS5iYXNlCT0gU0g3NzgwXzMyQklUX0REUl9CQVNFX0FERFIsCi0JCS5zaXplCT0gMHg0MDAwMDAwMCwKLSNlbHNlCi0JCS5iYXNlCT0gU0g3NzgwX0NTMF9CQVNFX0FERFIsCi0JCS5zaXplCT0gMHgyMDAwMDAwMCwKLSNlbmRpZgotCX0sCitzdHJ1Y3QgcGNpX2Vycm9ycyB7CisJdW5zaWduZWQgaW50CW1hc2s7CisJY29uc3QgY2hhcgkqc3RyOworfSBwY2lfYXJiaXRlcl9lcnJvcnNbXSA9IHsKKwl7IFNINF9QQ0lBSU5UX01CS04sCSJtYXN0ZXIgYnJva2VuIiB9LAorCXsgU0g0X1BDSUFJTlRfVEJUTywJInRhcmdldCBidXMgdGltZSBvdXQiIH0sCisJeyBTSDRfUENJQUlOVF9NQlRPLAkibWFzdGVyIGJ1cyB0aW1lIG91dCIgfSwKKwl7IFNINF9QQ0lBSU5UX1RBQlQsCSJ0YXJnZXQgYWJvcnQiIH0sCisJeyBTSDRfUENJQUlOVF9NQUJULAkibWFzdGVyIGFib3J0IiB9LAorCXsgU0g0X1BDSUFJTlRfUkRQRSwJInJlYWQgZGF0YSBwYXJpdHkgZXJyb3IiIH0sCisJeyBTSDRfUENJQUlOVF9XRFBFLAkid3JpdGUgZGF0YSBwYXJpdHkgZXJyb3IiIH0sCit9LCBwY2lfaW50ZXJydXB0X2Vycm9yc1tdID0geworCXsgU0g0X1BDSUlOVF9NTENLLAkibWFzdGVyIGxvY2sgZXJyb3IiIH0sCisJeyBTSDRfUENJSU5UX1RBQlQsCSJ0YXJnZXQtdGFyZ2V0IGFib3J0IiB9LAorCXsgU0g0X1BDSUlOVF9UUkVULAkidGFyZ2V0IHJldHJ5IHRpbWUgb3V0IiB9LAorCXsgU0g0X1BDSUlOVF9NRkRFLAkibWFzdGVyIGZ1bmN0aW9uIGRpc2FibGUgZXJvcnIiIH0sCisJeyBTSDRfUENJSU5UX1BSVFksCSJhZGRyZXNzIHBhcml0eSBlcnJvciIgfSwKKwl7IFNINF9QQ0lJTlRfU0VSUiwJIlNFUlIiIH0sCisJeyBTSDRfUENJSU5UX1RXRFAsCSJkYXRhIHBhcml0eSBlcnJvciBmb3IgdGFyZ2V0IHdyaXRlIiB9LAorCXsgU0g0X1BDSUlOVF9UUkRQLAkiUEVSUiBkZXRlY3RlZCBmb3IgdGFyZ2V0IHJlYWQiIH0sCisJeyBTSDRfUENJSU5UX01UQUJULAkidGFyZ2V0IGFib3J0IGZvciBtYXN0ZXIiIH0sCisJeyBTSDRfUENJSU5UX01NQUJULAkibWFzdGVyIGFib3J0IGZvciBtYXN0ZXIiIH0sCisJeyBTSDRfUENJSU5UX01XUEQsCSJtYXN0ZXIgd3JpdGUgZGF0YSBwYXJpdHkgZXJyb3IiIH0sCisJeyBTSDRfUENJSU5UX01SUEQsCSJtYXN0ZXIgcmVhZCBkYXRhIHBhcml0eSBlcnJvciIgfSwKIH07CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaDc3ODBfcGNpX2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY21kOworCWludCBpOworCisJYWRkciA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFMUik7CisKKwkvKgorCSAqIEhhbmRsZSBzdGF0dXMgZXJyb3JzLgorCSAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWR3KGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1BBUklUWSB8CisJCSAgICAgIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZIHwKKwkJICAgICAgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIHwKKwkJICAgICAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwKKwkJICAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKSkgeworCQljbWQgPSBwY2liaW9zX2hhbmRsZV9zdGF0dXNfZXJyb3JzKGFkZHIsIHN0YXR1cywgaG9zZSk7CisJCWlmIChsaWtlbHkoY21kKSkKKwkJCV9fcmF3X3dyaXRldyhjbWQsIGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisJfQorCisJLyoKKwkgKiBIYW5kbGUgYXJiaXRlciBlcnJvcnMuCisJICovCisJc3RhdHVzID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUlOVCk7CisJZm9yIChpID0gY21kID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpX2FyYml0ZXJfZXJyb3JzKTsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiBwY2lfYXJiaXRlcl9lcnJvcnNbaV0ubWFzaykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMsIGFkZHI9JTA4bHhcbiIsCisJCQkgICAgICAgcGNpX2FyYml0ZXJfZXJyb3JzW2ldLnN0ciwgYWRkcik7CisJCQljbWQgfD0gcGNpX2FyYml0ZXJfZXJyb3JzW2ldLm1hc2s7CisJCX0KKwl9CisJX19yYXdfd3JpdGVsKGNtZCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUlOVCk7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcmVtYWluaW5nIFBDSSBlcnJvcnMuCisJICovCisJc3RhdHVzID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UKTsKKwlmb3IgKGkgPSBjbWQgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfaW50ZXJydXB0X2Vycm9ycyk7IGkrKykgeworCQlpZiAoc3RhdHVzICYgcGNpX2ludGVycnVwdF9lcnJvcnNbaV0ubWFzaykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMsIGFkZHI9JTA4bHhcbiIsCisJCQkgICAgICAgcGNpX2ludGVycnVwdF9lcnJvcnNbaV0uc3RyLCBhZGRyKTsKKwkJCWNtZCB8PSBwY2lfaW50ZXJydXB0X2Vycm9yc1tpXS5tYXNrOworCQl9CisJfQorCV9fcmF3X3dyaXRlbChjbWQsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaDc3ODBfcGNpX3NlcnJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXZfaWQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBzeXN0ZW0gZXJyb3IgcmVjZWl2ZWQ6ICIpOworCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IsIDEpOworCXByaW50aygiXG4iKTsKKworCS8qIERlYXNzZXJ0IFNFUlIgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUlOVE1fU0RJTSwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UTSk7CisKKwkvKiBCYWNrIG9mZiB0aGUgSVJRIGZvciBhd2hpbGUgKi8KKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlob3NlLT5zZXJyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJYWRkX3RpbWVyKCZob3NlLT5zZXJyX3RpbWVyKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2g3NzgwX3BjaV9zZXR1cF9pcnFzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwlpbnQgcmV0OworCisJLyogQ2xlYXIgb3V0IFBDSSBhcmJpdGVyIElSUXMgKi8KKwlfX3Jhd193cml0ZWwoMCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUlOVCk7CisKKwkvKiBDbGVhciBhbGwgZXJyb3IgY29uZGl0aW9ucyAqLworCV9fcmF3X3dyaXRldyhQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAgfCBcCisJCSAgICAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgfCBcCisJCSAgICAgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfUEFSSVRZLCBob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaG9zZS0+c2Vycl9pcnEsIHNoNzc4MF9wY2lfc2Vycl9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkgICJQQ0kgU0VSUiBpbnRlcnJ1cHQiLCBob3NlKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogRmFpbGVkIGhvb2tpbmcgU0VSUiBJUlFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogVGhlIFBDSSBFUlIgSVJRIG5lZWRzIHRvIGJlIElSUUZfU0hBUkVEIHNpbmNlIGFsbCBvZiB0aGUgcG93ZXIKKwkgKiBkb3duIElSUSB2ZWN0b3JzIGFyZSByb3V0ZWQgdGhyb3VnaCB0aGUgRVJSIElSUSB2ZWN0b3IuIFdlCisJICogb25seSByZXF1ZXN0X2lycSgpIG9uY2UgYXMgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXNraW5nCisJICogc291cmNlIGZvciBtdWx0aXBsZSBldmVudHMuCisJICovCisJcmV0ID0gcmVxdWVzdF9pcnEoaG9zZS0+ZXJyX2lycSwgc2g3NzgwX3BjaV9lcnJfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgIlBDSSBFUlIgaW50ZXJydXB0IiwgaG9zZSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJZnJlZV9pcnEoaG9zZS0+c2Vycl9pcnEsIGhvc2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFVubWFzayBhbGwgb2YgdGhlIGFyYml0ZXIgSVJRcy4gKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUFJTlRfTUJLTiB8IFNINF9QQ0lBSU5UX1RCVE8gfCBTSDRfUENJQUlOVF9NQlRPIHwgXAorCQkgICAgIFNINF9QQ0lBSU5UX1RBQlQgfCBTSDRfUENJQUlOVF9NQUJUIHwgU0g0X1BDSUFJTlRfUkRQRSB8IFwKKwkJICAgICBTSDRfUENJQUlOVF9XRFBFLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UTSk7CisKKwkvKiBVbm1hc2sgYWxsIG9mIHRoZSBQQ0kgSVJRcyAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJSU5UTV9UVEFESU0gIHwgU0g0X1BDSUlOVE1fVE1UT0lNICB8IFwKKwkJICAgICBTSDRfUENJSU5UTV9NREVJTSAgIHwgU0g0X1BDSUlOVE1fQVBFRElNICB8IFwKKwkJICAgICBTSDRfUENJSU5UTV9TRElNICAgIHwgU0g0X1BDSUlOVE1fRFBFSVRXTSB8IFwKKwkJICAgICBTSDRfUENJSU5UTV9QRURJVFJNIHwgU0g0X1BDSUlOVE1fVEFESU1NICB8IFwKKwkJICAgICBTSDRfUENJSU5UTV9NQURJTU0gIHwgU0g0X1BDSUlOVE1fTVdQRElNICB8IFwKKwkJICAgICBTSDRfUENJSU5UTV9NUkRQRUlNLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlRNKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc2g3NzgwX3BjaV90ZWFyZG93bl9pcnFzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwlmcmVlX2lycShob3NlLT5lcnJfaXJxLCBob3NlKTsKKwlmcmVlX2lycShob3NlLT5zZXJyX2lycSwgaG9zZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3ODBfcGNpNjZfaW5pdChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmICghcGNpX2lzXzY2bWh6X2NhcGFibGUoaG9zZSwgMCwgMCkpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSByZWdpc3RlciBhY2Nlc3MgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisJdG1wIHw9IFNINF9QQ0lDUl9QUkVGSVg7CisJX19yYXdfd3JpdGVsKHRtcCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCisJLyogRW5hYmxlIDY2TUh6IG9wZXJhdGlvbiAqLworCXRtcCA9IF9fcmF3X3JlYWR3KGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisJdG1wIHw9IFBDSV9TVEFUVVNfNjZNSFo7CisJX19yYXdfd3JpdGV3KHRtcCwgaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKworCS8qIERvbmUgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisJdG1wIHw9IFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfQ0ZJTjsKKwlfX3Jhd193cml0ZWwodG1wLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9wY2lfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9ICZzaDc3ODBfcGNpX2NvbnRyb2xsZXI7CisJcGh5c19hZGRyX3QgbWVtcGh5czsKKwlzaXplX3QgbWVtc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaWQ7Ci0JY29uc3QgY2hhciAqdHlwZSA9IE5VTEw7Ci0JaW50IHJldDsKLQl1MzIgd29yZDsKKwljb25zdCBjaGFyICp0eXBlOworCWludCByZXQsIGk7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogU3RhcnRpbmcgaW50aWFsaXphdGlvbi5cbiIpOwogCkBAIC02NSwxNyArMjUzLDI4IEBACiAJLyogRW5hYmxlIENQVSBhY2Nlc3MgdG8gdGhlIFBDSUMgcmVnaXN0ZXJzLiAqLwogCV9fcmF3X3dyaXRlbChQQ0lFQ1JfRU5CTCwgUENJRUNSKTsKIAotCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJVklEKTsKLQlpZiAoaWQgIT0gU0g3NzgwX1ZFTkRPUl9JRCkgeworCS8qIFJlc2V0ICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfUFJTVCwKKwkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisKKwkvKgorCSAqIFdhaXQgZm9yIGl0IHRvIGNvbWUgYmFjayB1cC4gVGhlIHNwZWMgc2F5cyB0byBhbGxvdyBmb3IgdXAgdG8KKwkgKiAxIHNlY29uZCBhZnRlciB0b2dnbGluZyB0aGUgcmVzZXQgcGluLCBidXQgaW4gcHJhY3RpY2UgMTAwbXMKKwkgKiBpcyBtb3JlIHRoYW4gZW5vdWdoLgorCSAqLworCW1kZWxheSgxMDApOworCisJaWQgPSBfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFBDSV9WRU5ET1JfSUQpOworCWlmIChpZCAhPSBQQ0lfVkVORE9SX0lEX1JFTkVTQVMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IFVua25vd24gdmVuZG9yIElEIDB4JTA0eC5cbiIsIGlkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWQgPSBfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lESUQpOwotCXR5cGUgPSAoaWQgPT0gU0g3NzYzX0RFVklDRV9JRCkJPyAiU0g3NzYzIiA6Ci0JICAgICAgIChpZCA9PSBTSDc3ODBfREVWSUNFX0lEKSA/ICJTSDc3ODAiIDoKLQkgICAgICAgKGlkID09IFNINzc4MV9ERVZJQ0VfSUQpID8gIlNINzc4MSIgOgotCSAgICAgICAoaWQgPT0gU0g3Nzg1X0RFVklDRV9JRCkgPyAiU0g3Nzg1IiA6CisJaWQgPSBfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFBDSV9ERVZJQ0VfSUQpOworCXR5cGUgPSAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc2MykgPyAiU0g3NzYzIiA6CisJICAgICAgIChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgwKSA/ICJTSDc3ODAiIDoKKwkgICAgICAgKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODEpID8gIlNINzc4MSIgOgorCSAgICAgICAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4NSkgPyAiU0g3Nzg1IiA6CiAJCQkJCSAgTlVMTDsKIAlpZiAodW5saWtlbHkoIXR5cGUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBGb3VuZCBhbiB1bnN1cHBvcnRlZCBSZW5lc2FzIGhvc3QgIgpAQCAtODUsNjIgKzI4NCwxMTkgQEAKIAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBGb3VuZCBhIFJlbmVzYXMgJXMgaG9zdCAiCiAJICAgICAgICJjb250cm9sbGVyLCByZXZpc2lvbiAlZC5cbiIsIHR5cGUsCi0JICAgICAgIF9fcmF3X3JlYWRiKGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVJJRCkpOworCSAgICAgICBfX3Jhd19yZWFkYihjaGFuLT5yZWdfYmFzZSArIFBDSV9SRVZJU0lPTl9JRCkpOwogCi0JaWYgKChyZXQgPSBzaDRfcGNpX2NoZWNrX2RpcmVjdChjaGFuKSkgIT0gMCkKKwkvKgorCSAqIE5vdyB0aHJvdyBpdCBpbiB0byByZWdpc3RlciBpbml0aWFsaXphdGlvbiBtb2RlIGFuZAorCSAqIHN0YXJ0IHRoZSByZWFsIHdvcmsuCisJICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lDUl9QUkVGSVgsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKworCW1lbXBoeXMgPSBfX3BhKG1lbW9yeV9zdGFydCk7CisJbWVtc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKworCS8qCisJICogSWYgdGhlcmUncyBtb3JlIHRoYW4gNTEyTUIgb2YgbWVtb3J5LCB3ZSBuZWVkIHRvIHJvbGwgb3ZlciB0bworCSAqIExBUjEvTFNSMS4KKwkgKi8KKwlpZiAobWVtc2l6ZSA+IFNaXzUxMk0pIHsKKwkJX19yYXdfd3JpdGVsKG1lbXBoeXMgKyBTWl81MTJNLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMQVIxKTsKKwkJX19yYXdfd3JpdGVsKCgoKG1lbXNpemUgLSBTWl81MTJNKSAtIFNaXzFNKSAmIDB4MWZmMDAwMDApIHwgMSwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTFNSMSk7CisJCW1lbXNpemUgPSBTWl81MTJNOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE90aGVyd2lzZSBqdXN0IHplcm8gaXQgb3V0IGFuZCBkaXNhYmxlIGl0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxBUjEpOworCQlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTFNSMSk7CisJfQorCisJLyoKKwkgKiBMQVIwL0xTUjAgY292ZXJzIHVwIHRvIHRoZSBmaXJzdCA1MTJNQiwgd2hpY2ggaXMgZW5vdWdoIHRvCisJICogY292ZXIgYWxsIG9mIGxvd21lbSBvbiBtb3N0IHBsYXRmb3Jtcy4KKwkgKi8KKwlfX3Jhd193cml0ZWwobWVtcGh5cywgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTEFSMCk7CisJX19yYXdfd3JpdGVsKCgobWVtc2l6ZSAtIFNaXzFNKSAmIDB4MWZmMDAwMDApIHwgMSwKKwkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMU1IwKTsKKworCS8qCisJICogSG9vayB1cCB0aGUgRVJSIGFuZCBTRVJSIElSUXMuCisJICovCisJcmV0ID0gc2g3NzgwX3BjaV9zZXR1cF9pcnFzKGNoYW4pOworCWlmICh1bmxpa2VseShyZXQpKQogCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBTZXQgdGhlIGNsYXNzIGFuZCBzdWItY2xhc3MgY29kZXMuCisJICogRGlzYWJsZSB0aGUgY2FjaGUgc25vb3AgY29udHJvbGxlciBmb3Igbm9uLWNvaGVyZW50IERNQS4KIAkgKi8KLQlfX3Jhd193cml0ZWIoUENJX0NMQVNTX0JSSURHRV9IT1NUID4+IDgsCi0JCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQkNDKTsKLQlfX3Jhd193cml0ZWIoUENJX0NMQVNTX0JSSURHRV9IT1NUICYgMHhmZiwKLQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTVUIpOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0NSMCk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQVIwKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NDUjEpOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0FSMSk7CiAKIAkvKgotCSAqIFNldCBJTyBhbmQgTWVtIHdpbmRvd3MgdG8gbG9jYWwgYWRkcmVzcwotCSAqIE1ha2UgUENJIGFuZCBsb2NhbCBhZGRyZXNzIHRoZSBzYW1lIGZvciBlYXN5IDEgdG8gMSBtYXBwaW5nCisJICogU2V0dXAgdGhlIG1lbW9yeSBCQVJzCiAJICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBzaDc3ODBfcGNpX21hcC53aW5kb3cwLnNpemUgLSAweGZmZmZmLCBTSDRfUENJTFNSMCk7Ci0JLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDAgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHNoNzc4MF9wY2lfbWFwLndpbmRvdzAuYmFzZSwgU0g0X1BDSUxBUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgc2g3NzgwX3BjaV9tYXAud2luZG93MC5iYXNlLCBTSDc3ODBfUENJTUJBUjApOworCWZvciAoaSA9IDE7IGkgPCBjaGFuLT5ucl9yZXNvdXJjZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGNoYW4tPnJlc291cmNlcyArIGk7CisJCXJlc291cmNlX3NpemVfdCBzaXplOwogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAzODBmLCBTSDRfUENJQUlOVE0pOworCQlpZiAodW5saWtlbHkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKQorCQkJY29udGludWU7CiAKLQkvKiBTZXQgdXAgc3RhbmRhcmQgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQlfX3Jhd193cml0ZXcoMHhGQjAwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTVEFUVVMpOwotCV9fcmF3X3dyaXRldygweDAwNDcsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNNRCk7Ci0JX19yYXdfd3JpdGV3KDB4MTkxMiwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU1ZJRCk7Ci0JX19yYXdfd3JpdGV3KDB4MDAwMSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU0lEKTsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHdlJ3JlIGluIHRoZSByaWdodCBwaHlzaWNhbCBhZGRyZXNzaW5nIG1vZGUKKwkJICogZm9yIGRlYWxpbmcgd2l0aCB0aGUgcmVzb3VyY2UuCisJCSAqLworCQlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV8zMkJJVCkgJiYgX19pbl8yOWJpdF9tb2RlKCkpIHsKKwkJCWNoYW4tPm5yX3Jlc291cmNlcy0tOworCQkJY29udGludWU7CisJCX0KIAotCV9fcmF3X3dyaXRlYigweDAwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lQSUYpOworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCi0JLyogQXBwbHkgYW55IGxhc3QtbWludXRlIFBDSUMgZml4dXBzICovCi0JcGNpX2ZpeHVwX3BjaWMoY2hhbik7CisJCS8qCisJCSAqIFRoZSBNQk1SIG1hc2sgaXMgY2FsY3VsYXRlZCBpbiB1bml0cyBvZiAyNTZrQiwgd2hpY2gKKwkJICoga2VlcHMgdGhpbmdzIHByZXR0eSBzaW1wbGUuCisJCSAqLworCQlfX3Jhd193cml0ZWwoKChyb3VuZHVwX3Bvd19vZl90d28oc2l6ZSkgLyBTWl8yNTZLKSAtIDEpIDw8IDE4LAorCQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lNQk1SKGkgLSAxKSk7CisJCV9fcmF3X3dyaXRlbChyZXMtPnN0YXJ0LCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lNQlIoaSAtIDEpKTsKKwl9CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ZmQwMDAwMDAsIFNINzc4MF9QQ0lNQlIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDBmYzAwMDAsIFNINzc4MF9QQ0lNQk1SMCk7CisJLyoKKwkgKiBBbmQgSS9PLgorCSAqLworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFBDSV9CQVNFX0FERFJFU1NfMCk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUlPQlIpOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lJT0JNUik7CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4YzAwMDAwMDAsIFNINzc4MF9QQ0lNQlIyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MjAwMDAwMDAgLSBTSDc3ODBfUENJX0lPX1NJWkUsIFNINzc4MF9QQ0lNQk1SMik7Ci0jZW5kaWYKKwlfX3Jhd193cml0ZXcoUENJX0NPTU1BTkRfU0VSUiAgIHwgUENJX0NPTU1BTkRfV0FJVCAgIHwgXAorCQkgICAgIFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8IFwKKwkJICAgICBQQ0lfQ09NTUFORF9NRU1PUlksIGNoYW4tPnJlZ19iYXNlICsgUENJX0NPTU1BTkQpOwogCi0JLyogU2V0IElPQlIgZm9yIHdpbmRvd3MgY29udGFpbmluZyBhcmVhIHNwZWNpZmllZCBpbiBwY2kuaCAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0ICYgfihTSDc3ODBfUENJX0lPX1NJWkUtMSksCi0JCSAgICAgIFNINzc4MF9QQ0lJT0JSKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sICgoU0g3NzgwX1BDSV9JT19TSVpFLTEpICYgKDc8PDE4KSksCi0JCSAgICAgIFNINzc4MF9QQ0lJT0JNUik7CisJLyoKKwkgKiBJbml0aWFsaXphdGlvbiBtb2RlIGNvbXBsZXRlLCByZWxlYXNlIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZAorCSAqIGVuYWJsZSByb3VuZCByb2JpbiBtb2RlIHRvIHN0b3AgZGV2aWNlIG92ZXJydW5zL3N0YXJ2YXRpb24uCisJICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfQ0ZJTiB8IFNINF9QQ0lDUl9GVE8sCisJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOwogCi0JLyogU0g3NzgwIGluaXQgZG9uZSwgc2V0IGNlbnRyYWwgZnVuY3Rpb24gaW5pdCBjb21wbGV0ZSAqLwotCS8qIHVzZSByb3VuZCByb2JpbiBtb2RlIHRvIHN0b3AgYSBkZXZpY2Ugc3RhcnZpbmcvb3ZlcnJ1bmluZyAqLwotCXdvcmQgPSBTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU4gfCBTSDRfUENJQ1JfRlRPOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSUNSKTsKKwlyZXQgPSByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnI7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKKwlzaDc3ODBfcGNpNjZfaW5pdChjaGFuKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBSdW5uaW5nIGF0ICVkTUh6LlxuIiwKKwkgICAgICAgKF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgUENJX1NUQVRVUykgJiBQQ0lfU1RBVFVTXzY2TUhaKSA/CisJICAgICAgIDY2IDogMzMpOwogCiAJcmV0dXJuIDA7CisKK2VycjoKKwlzaDc3ODBfcGNpX3RlYXJkb3duX2lycXMoY2hhbik7CisJcmV0dXJuIHJldDsKIH0KIGFyY2hfaW5pdGNhbGwoc2g3NzgwX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmgKaW5kZXggNGE1MjQ3OC4uMjA1ZGNiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmgKQEAgLTEyLDEyICsxMiwxMSBAQAogI2lmbmRlZiBfUENJX1NINzc4MF9IXwogI2RlZmluZSBfUENJX1NINzc4MF9IXwogCi0vKiBQbGF0Zm9ybSBTcGVjaWZpYyBWYWx1ZXMgKi8KLSNkZWZpbmUgU0g3NzgwX1ZFTkRPUl9JRAkweDE5MTIKLSNkZWZpbmUgU0g3NzgxX0RFVklDRV9JRAkweDAwMDEKLSNkZWZpbmUgU0g3NzgwX0RFVklDRV9JRAkweDAwMDIKLSNkZWZpbmUgU0g3NzYzX0RFVklDRV9JRAkweDAwMDQKLSNkZWZpbmUgU0g3Nzg1X0RFVklDRV9JRAkweDAwMDcKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SRU5FU0FTCQkweDE5MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MQkweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MAkweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc2MwkweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4NQkweDAwMDcKIAogLyogU0g3NzgwIENvbnRyb2wgUmVnaXN0ZXJzICovCiAjZGVmaW5lCVBDSUVDUgkJCTB4RkUwMDAwMDgKQEAgLTI3LDQ0ICsyNiw5IEBACiAjZGVmaW5lIFNINzc4MF9QQ0lfQ09ORklHX0JBU0UJMHhGRDAwMDAwMAkvKiBDb25maWcgc3BhY2UgYmFzZSBhZGRyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lfQ09ORklHX1NJWkUJMHgwMTAwMDAwMAkvKiBDb25maWcgc3BhY2Ugc2l6ZSAqLwogCi0jZGVmaW5lIFNINzc4MF9QQ0lfTUVNT1JZX0JBU0UJMHhGRDAwMDAwMAkvKiBNZW1vcnkgc3BhY2UgYmFzZSBhZGRyICovCi0jZGVmaW5lIFNINzc4MF9QQ0lfTUVNX1NJWkUJMHgwMTAwMDAwMAkvKiBTaXplIG9mIE1lbW9yeSB3aW5kb3cgKi8KLQotI2RlZmluZSBTSDc3ODBfUENJX0lPX0JBU0UJMHhGRTIwMDAwMAkvKiBJTyBzcGFjZSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSV9JT19TSVpFCTB4MDA0MDAwMDAJLyogU2l6ZSBvZiBJTyB3aW5kb3cgKi8KLQogI2RlZmluZSBTSDc3ODBfUENJUkVHX0JBU0UJMHhGRTA0MDAwMAkvKiBQQ0kgcmVncyBiYXNlIGFkZHJlc3MgKi8KIAogLyogU0g3NzgwIFBDSSBDb25maWcgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lWSUQJCTB4MDAwCQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSURJRAkJMHgwMDIJCS8qIERldmljZSBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJQ01ECQkweDAwNAkJLyogQ29tbWFuZCAqLwotI2RlZmluZSBTSDc3ODBfUENJU1RBVFVTCTB4MDA2CQkvKiBTdGF0dXMgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVJJRAkJMHgwMDgJCS8qIFJldmlzaW9uIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lQSUYJCTB4MDA5CQkvKiBQcm9ncmFtIEludGVyZmFjZSAqLwotI2RlZmluZSBTSDc3ODBfUENJU1VCCQkweDAwYQkJLyogU3ViIGNsYXNzIGNvZGUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUJDQwkJMHgwMGIJCS8qIEJhc2UgY2xhc3MgY29kZSAqLwotI2RlZmluZSBTSDc3ODBfUENJQ0xTCQkweDAwYwkJLyogQ2FjaGUgbGluZSBzaXplICovCi0jZGVmaW5lIFNINzc4MF9QQ0lMVE0JCTB4MDBkCQkvKiBsYXRlbmN5IHRpbWVyICovCi0jZGVmaW5lIFNINzc4MF9QQ0lIRFIJCTB4MDBlCQkvKiBIZWFkZXIgdHlwZSAqLwotI2RlZmluZSBTSDc3ODBfUENJQklTVAkJMHgwMGYJCS8qIEJJU1QgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUlCQVIJCTB4MDEwCQkvKiBJTyBCYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSU1CQVIwCQkweDAxNAkJLyogTWVtb3J5IGJhc2UgYWRkcmVzczAgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSU1CQVIxCQkweDAxOAkJLyogTWVtb3J5IGJhc2UgYWRkcmVzczEgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNWSUQJCTB4MDJjCQkvKiBTdWIgc3lzdGVtIHZlbmRvciBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJU0lECQkweDAyZQkJLyogU3ViIHN5c3RlbSBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJQ1AJCTB4MDM0Ci0jZGVmaW5lIFNINzc4MF9QQ0lJTlRMSU5FCTB4MDNjCQkvKiBJbnRlcnJ1cHQgbGluZSAqLwotI2RlZmluZSBTSDc3ODBfUENJSU5UUElOCTB4MDNkCQkvKiBJbnRlcnJ1cHQgcGluICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNSU5HTlQJMHgwM2UJCS8qIE1pbnVtdW0gZ3JhbmQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSU1BWExBVAkweDAzZgkJLyogTWF4bXVtIGxhdGVuY3kgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNJRAkJMHgwNDAKLSNkZWZpbmUgU0g3NzgwX1BDSU5JUAkJMHgwNDEKLSNkZWZpbmUgU0g3NzgwX1BDSVBNQwkJMHgwNDIKLSNkZWZpbmUgU0g3NzgwX1BDSVBNQ1NSCQkweDA0NAotI2RlZmluZSBTSDc3ODBfUENJUE1DU1JfQlNFCTB4MDQ2Ci0jZGVmaW5lIFNINzc4MF9QQ0lDREQJCTB4MDQ3Ci0KICNkZWZpbmUgU0g3NzgwX1BDSUlSCQkweDExNAkJLyogUENJIEludGVycnVwdCBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJSU1SCQkweDExOAkJLyogUENJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lBSVIJCTB4MTFDCQkvKiBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCkBAIC03NiwxMCArNDAsOCBAQAogI2RlZmluZSBTSDc3ODBfUENJUElOVAkJMHgxQ0MJCS8qIFBvd2VyIE1nbW50IEludC4gUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSVBJTlRNCQkweDFEMAkJLyogUG93ZXIgTWdtbnQgTWFzayBSZWdpc3RlciAqLwogCi0jZGVmaW5lIFNINzc4MF9QQ0lNQlIwCQkweDFFMAotI2RlZmluZSBTSDc3ODBfUENJTUJNUjAJCTB4MUU0Ci0jZGVmaW5lIFNINzc4MF9QQ0lNQlIyCQkweDFGMAotI2RlZmluZSBTSDc3ODBfUENJTUJNUjIJCTB4MUY0CisjZGVmaW5lIFNINzc4MF9QQ0lNQlIoeCkJKDB4MUUwICsgKCh4KSAqIDgpKQorI2RlZmluZSBTSDc3ODBfUENJTUJNUih4KQkoMHgxRTQgKyAoKHgpICogOCkpCiAjZGVmaW5lIFNINzc4MF9QQ0lJT0JSCQkweDFGOAogI2RlZmluZSBTSDc3ODBfUENJSU9CTVIJCTB4MUZDCiAjZGVmaW5lIFNINzc4MF9QQ0lDU0NSMAkJMHgyMTAJCS8qIENhY2hlIFNub29wMSBDbnQuIFJlZ2lzdGVyICovCkBAIC04NywxNiArNDksNCBAQAogI2RlZmluZSBTSDc3ODBfUENJQ1NBUjAJCTB4MjE4CS8qIENhY2hlIFNub29wMSBBZGRyLiBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJQ1NBUjEJCTB4MjFDCS8qIENhY2hlIFNub29wMiBBZGRyLiBSZWdpc3RlciAqLwogCi0vKiBHZW5lcmFsIE1lbW9yeSBDb25maWcgQWRkcmVzc2VzICovCi0jZGVmaW5lIFNINzc4MF9DUzBfQkFTRV9BRERSCTB4MAotI2RlZmluZSBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0g3NzgwX0NTMV9CQVNFX0FERFIJKFNINzc4MF9DUzBfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLSNkZWZpbmUgU0g3NzgwX0NTMl9CQVNFX0FERFIJKFNINzc4MF9DUzFfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLSNkZWZpbmUgU0g3NzgwX0NTM19CQVNFX0FERFIJKFNINzc4MF9DUzJfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLSNkZWZpbmUgU0g3NzgwX0NTNF9CQVNFX0FERFIJKFNINzc4MF9DUzNfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLSNkZWZpbmUgU0g3NzgwX0NTNV9CQVNFX0FERFIJKFNINzc4MF9DUzRfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLSNkZWZpbmUgU0g3NzgwX0NTNl9CQVNFX0FERFIJKFNINzc4MF9DUzVfQkFTRV9BRERSICsgU0g3NzgwX01FTV9SRUdJT05fU0laRSkKLQotI2RlZmluZSBTSDc3ODBfMzJCSVRfRERSX0JBU0VfQUREUgkweDQwMDAwMDAwCi0KICNlbmRpZiAvKiBfUENJX1NINzc4MF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggYzQ4MWRmNi4uOTUzYWYxMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0zMywxNSArMzMsMjIgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5idXMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQogewogCXN0YXRpYyBpbnQgbmV4dF9idXNubzsKKwlzdGF0aWMgaW50IG5lZWRfZG9tYWluX2luZm87CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKIAogCWJ1cyA9IHBjaV9zY2FuX2J1cyhuZXh0X2J1c25vLCBob3NlLT5wY2lfb3BzLCBob3NlKTsKKwlob3NlLT5idXMgPSBidXM7CisKKwluZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbyB8fCBob3NlLT5pbmRleDsKKwlob3NlLT5uZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbzsKIAlpZiAoYnVzKSB7CiAJCW5leHRfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlICsgMTsKIAkJLyogRG9uJ3QgYWxsb3cgOC1iaXQgYnVzIG51bWJlciBvdmVyZmxvdyBpbnNpZGUgdGhlIGhvc2UgLQogCQkgICByZXNlcnZlIHNvbWUgc3BhY2UgZm9yIGJyaWRnZXMuICovCi0JCWlmIChuZXh0X2J1c25vID4gMjI0KQorCQlpZiAobmV4dF9idXNubyA+IDIyNCkgewogCQkJbmV4dF9idXNubyA9IDA7CisJCQluZWVkX2RvbWFpbl9pbmZvID0gMTsKKwkJfQogCiAJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGJ1cyk7CiAJCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMpOwpAQCAtNTEsMTAgKzU4LDIxIEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgocGNpX3NjYW5fbXV0ZXgpOwogCi12b2lkIF9fZGV2aW5pdCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCitpbnQgX19kZXZpbml0IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKIHsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgaG9zZS0+bWVtX3Jlc291cmNlKTsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGhvc2UtPmlvX3Jlc291cmNlKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBob3NlLT5ucl9yZXNvdXJjZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGhvc2UtPnJlc291cmNlcyArIGk7CisKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CisJCQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCByZXMpIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKSA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CiAKIAkqaG9zZV90YWlsID0gaG9zZTsKIAlob3NlX3RhaWwgPSAmaG9zZS0+bmV4dDsKQEAgLTY4LDYgKzg2LDExIEBACiAJfQogCiAJLyoKKwkgKiBTZXR1cCB0aGUgRVJSL1BFUlIgYW5kIFNFUlIgdGltZXJzLCBpZiBhdmFpbGFibGUuCisJICovCisJcGNpYmlvc19lbmFibGVfdGltZXJzKGhvc2UpOworCisJLyoKIAkgKiBTY2FuIHRoZSBidXMgaWYgaXQgaXMgcmVnaXN0ZXIgYWZ0ZXIgdGhlIFBDSSBzdWJzeXN0ZW0KIAkgKiBpbml0aWFsaXphdGlvbi4KIAkgKi8KQEAgLTc2LDYgKzk5LDE1IEBACiAJCXBjaWJpb3Nfc2NhbmJ1cyhob3NlKTsKIAkJbXV0ZXhfdW5sb2NrKCZwY2lfc2Nhbl9tdXRleCk7CiAJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlmb3IgKC0taTsgaSA+PSAwOyBpLS0pCisJCXJlbGVhc2VfcmVzb3VyY2UoJmhvc2UtPnJlc291cmNlc1tpXSk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJTa2lwcGluZyBQQ0kgYnVzIHNjYW4gZHVlIHRvIHJlc291cmNlIGNvbmZsaWN0XG4iKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQpAQCAtMTI3LDExICsxNTksMTMgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxuOwotCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBidXMtPnN5c2RhdGE7CiAKIAlpZiAoIWRldikgewotCQlidXMtPnJlc291cmNlWzBdID0gY2hhbi0+aW9fcmVzb3VyY2U7Ci0JCWJ1cy0+cmVzb3VyY2VbMV0gPSBjaGFuLT5tZW1fcmVzb3VyY2U7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBob3NlLT5ucl9yZXNvdXJjZXM7IGkrKykKKwkJCWJ1cy0+cmVzb3VyY2VbaV0gPSBob3NlLT5yZXNvdXJjZXMgKyBpOwogCX0KIAogCWZvciAobG4gPSBidXMtPmRldmljZXMubmV4dDsgbG4gIT0gJmJ1cy0+ZGV2aWNlczsgbG4gPSBsbi0+bmV4dCkgewpAQCAtMTQ4LDM0ICsxODIsMjkgQEAKICAqIGFkZHJlc3NlcyB0byBiZSBhbGxvY2F0ZWQgaW4gdGhlIDB4MDAwLTB4MGZmIHJlZ2lvbgogICogbW9kdWxvIDB4NDAwLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gZGV2LT5zeXNkYXRhOworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldi0+c3lzZGF0YTsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCWlmIChzdGFydCA8IFBDSUJJT1NfTUlOX0lPICsgY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0KQotCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9JTyArIGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydDsKKwkJaWYgKHN0YXJ0IDwgUENJQklPU19NSU5fSU8gKyBob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQpCisJCQlzdGFydCA9IFBDSUJJT1NfTUlOX0lPICsgaG9zZS0+cmVzb3VyY2VzWzBdLnN0YXJ0OwogCiAJCS8qCiAgICAgICAgICAgICAgICAgICogUHV0IGV2ZXJ5dGhpbmcgaW50byAweDAwLTB4ZmYgcmVnaW9uIG1vZHVsbyAweDQwMC4KIAkJICovCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9IGVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewotCQlpZiAoc3RhcnQgPCBQQ0lCSU9TX01JTl9NRU0gKyBjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0KQotCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9NRU0gKyBjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0OwogCX0KIAotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIHZvaWQgcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCi0JCQkgc3RydWN0IHJlc291cmNlICpyZXMpCisJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldi0+c3lzZGF0YTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CkBAIC0xODksOSArMjE4LDggQEAKIAlyZWdpb24tPmVuZCA9IHJlcy0+ZW5kIC0gb2Zmc2V0OwogfQogCi12b2lkIF9fZGV2aW5pdAotcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKK3ZvaWQgcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkgICAgIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQogewogCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldi0+c3lzZGF0YTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CkBAIC0yNzQsNiArMzAyLDg2IEBACiAJcmV0dXJuIHN0cjsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0CitwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzX2Vhcmx5KHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwkJCQlpbnQgdG9wX2J1cywgaW50IGN1cnJlbnRfYnVzLAorCQkJCXVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pCit7CisJdW5zaWduZWQgaW50IHBjaV9kZXZmbjsKKwl1MTYgc3RhdHVzOworCWludCByZXQ7CisKKwlmb3IgKHBjaV9kZXZmbiA9IDA7IHBjaV9kZXZmbiA8IDB4ZmY7IHBjaV9kZXZmbisrKSB7CisJCWlmIChQQ0lfRlVOQyhwY2lfZGV2Zm4pKQorCQkJY29udGludWU7CisJCXJldCA9IGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCSAgICAgcGNpX2RldmZuLCBQQ0lfU1RBVFVTLCAmc3RhdHVzKTsKKwkJaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCQljb250aW51ZTsKKwkJaWYgKHN0YXR1cyA9PSAweGZmZmYpCisJCQljb250aW51ZTsKKworCQllYXJseV93cml0ZV9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJcGNpX2RldmZuLCBQQ0lfU1RBVFVTLAorCQkJCQlzdGF0dXMgJiBzdGF0dXNfbWFzayk7CisJCWlmICh3YXJuKQorCQkJcHJpbnRrKCIoJTAyeDolMDJ4OiAlMDRYKSAiLCBjdXJyZW50X2J1cywKKwkJCSAgICAgICBwY2lfZGV2Zm4sIHN0YXR1cyk7CisJfQorfQorCisvKgorICogV2UgY2FuJ3QgdXNlIHBjaV9maW5kX2RldmljZSgpIGhlcmUgc2luY2Ugd2UgYXJlCisgKiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0X3JlZm9rCitwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywKKwkJCSAgaW50IHdhcm4pCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQl1MTYgc3RhdHVzOworCisJCS8qCisJCSAqIGlnbm9yZSBob3N0IGJyaWRnZSAtIHdlIGhhbmRsZQorCQkgKiB0aGF0IHNlcGFyYXRlbHkKKwkJICovCisJCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IDAgJiYgZGV2LT5kZXZmbiA9PSAwKQorCQkJY29udGludWU7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCAmc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyA9PSAweGZmZmYpCisJCQljb250aW51ZTsKKworCQlpZiAoKHN0YXR1cyAmIHN0YXR1c19tYXNrKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogY2xlYXIgdGhlIHN0YXR1cyBlcnJvcnMgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgc3RhdHVzICYgc3RhdHVzX21hc2spOworCisJCWlmICh3YXJuKQorCQkJcHJpbnRrKCIoJXM6ICUwNFgpICIsIHBjaV9uYW1lKGRldiksIHN0YXR1cyk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCXBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoZGV2LT5zdWJvcmRpbmF0ZSwgc3RhdHVzX21hc2ssIHdhcm4pOworfQorCit2b2lkIF9faW5pdF9yZWZvayBwY2liaW9zX3JlcG9ydF9zdGF0dXModW5zaWduZWQgaW50IHN0YXR1c19tYXNrLCBpbnQgd2FybikKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2U7CisKKwlmb3IgKGhvc2UgPSBob3NlX2hlYWQ7IGhvc2U7IGhvc2UgPSBob3NlLT5uZXh0KSB7CisJCWlmICh1bmxpa2VseSghaG9zZS0+YnVzKSkKKwkJCXBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXNfZWFybHkoaG9zZSwgaG9zZV9oZWFkLT5pbmRleCwKKwkJCQkJaG9zZS0+aW5kZXgsIHN0YXR1c19tYXNrLCB3YXJuKTsKKwkJZWxzZQorCQkJcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1cyhob3NlLT5idXMsIHN0YXR1c19tYXNrLCB3YXJuKTsKKwl9Cit9CisKIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSkKIHsKQEAgLTMwMiw5ICs0MTAsMTUgQEAKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBkZXYtPnN5c2RhdGE7CiAKLQlpZiAoIWNoYW4tPmlvX21hcF9iYXNlKQorCWlmICh1bmxpa2VseSghY2hhbi0+aW9fbWFwX2Jhc2UpKSB7CiAJCWNoYW4tPmlvX21hcF9iYXNlID0gZ2VuZXJpY19pb19iYXNlOwogCisJCWlmIChwY2lfZG9tYWluc19zdXBwb3J0ZWQpCisJCQlwYW5pYygiVG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uIGlvX21hcF9iYXNlIE1VU1QgYmUgIgorCQkJICAgICAgInNldCB3aXRoIG11bHRpcGxlIFBDSSBkb21haW5zLiIpOworCX0KKworCiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoY2hhbi0+aW9fbWFwX2Jhc2UgKyBwb3J0KTsKIH0KIApAQCAtMzIxLDIwICs0MzUsOSBAQAogCiAJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9JTykKIAkJcmV0dXJuIGlvcG9ydF9tYXBfcGNpKGRldiwgc3RhcnQsIGxlbik7Ci0KLQkvKgotCSAqIFByZXNlbnRseSB0aGUgSU9SRVNPVVJDRV9NRU0gY2FzZSBpcyBhIGJpdCBzcGVjaWFsLCBtb3N0Ci0JICogU0g3NzUxIHN0eWxlIFBDSSBjb250cm9sbGVycyBoYXZlIFBDSSBtZW1vcnkgYXQgYSBmaXhlZAotCSAqIGxvY2F0aW9uIGluIHRoZSBhZGRyZXNzIHNwYWNlIHdoZXJlIG5vIHJlbWFwcGluZyBpcyBkZXNpcmVkLgotCSAqIFdpdGggdGhlIElPUkVTT1VSQ0VfTUVNIGNhc2UgbW9yZSBjYXJlIGhhcyB0byBiZSB0YWtlbgotCSAqIHRvIGluaGliaXQgcGFnZSB0YWJsZSBtYXBwaW5nIGZvciBsZWdhY3kgY29yZXMsIGJ1dCB0aGlzIGlzCi0JICogcHVudGVkIG9mZiB0byBfX2lvcmVtYXAoKS4KLQkgKgkJCQkJLS0gUEZNLgotCSAqLwogCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CiAJCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQogCQkJcmV0dXJuIGlvcmVtYXAoc3RhcnQsIGxlbik7Ci0KIAkJcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShzdGFydCwgbGVuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYwppbmRleCBhYzM3ZWU4Ny4uYWU5MWEyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBMb3ctTGV2ZWwgUENJIEV4cHJlc3MgU3VwcG9ydCBmb3IgdGhlIFNINzc4NgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTMwLDYwICszMCw4NCBAQAogCWludCAoKnBvcnRfaW5pdF9odykoc3RydWN0IHNoNzc4Nl9wY2llX3BvcnQgKnBvcnQpOwogfSAqc2g3Nzg2X3BjaWVfaHdvcHM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kwX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9tZW0iLAotCQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFQSwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBICsgU1pfNjRNIC0gMSwKKwkJLm5hbWUJPSAiUENJZTAgSU8iLAorCQkuc3RhcnQJPSAweGZkMDAwMDAwLAorCQkuZW5kCT0gMHhmZDAwMDAwMCArIFNaXzhNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHhjMDAwMDAwMCwKKwkJLmVuZAk9IDB4YzAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAxIiwKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMDAgKyBTWl82NE0gLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfbWVtIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lNRU1fQkFTRUExLAotCQkuZW5kCT0gU0g0QV9QQ0lNRU1fQkFTRUExICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkubmFtZQk9ICJwY2kyX21lbSIsCi0JCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0VBMiwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBMiArIFNaXzY0TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQk9ICJQQ0llMCBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUxMDAwMDAsCisJCS5lbmQJPSAweGZlMTAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfMjliaXRfbWVtX3Jlc291cmNlID0gewotCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0UsCi0JLmVuZAk9IFNINEFfUENJTUVNX0JBU0UgKyBTWl82NE0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBDSWUxIElPIiwKKwkJLnN0YXJ0CT0gMHhmZDgwMDAwMCwKKwkJLmVuZAk9IDB4ZmQ4MDAwMDAgKyBTWl84TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMCIsCisJCS5zdGFydAk9IDB4YTAwMDAwMDAsCisJCS5lbmQJPSAweGEwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMSIsCisJCS5zdGFydAk9IDB4MzAwMDAwMDAsCisJCS5lbmQJPSAweDMwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUzMDAwMDAsCisJCS5lbmQJPSAweGZlMzAwMDAwICsgU1pfMU0gLSAxLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfaW9fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kyX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRSwKLQkJLmVuZAk9IFNINEFfUENJSU9fQkFTRSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgSU8iLAorCQkuc3RhcnQJPSAweGZjODAwMDAwLAorCQkuZW5kCT0gMHhmYzgwMDAwMCArIFNaXzRNIC0gMSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UxLAotCQkuZW5kCT0gU0g0QV9QQ0lJT19CQVNFMSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDAiLAorCQkuc3RhcnQJPSAweDgwMDAwMDAwLAorCQkuZW5kCT0gMHg4MDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAogCX0sIHsKLQkJLm5hbWUJPSAicGNpMl9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRTIsCi0JCS5lbmQJPSBTSDRBX1BDSUlPX0JBU0UyICsgU1pfNE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCQkubmFtZQk9ICJQQ0llMiBNRU0gMSIsCisJCS5zdGFydAk9IDB4MjAwMDAwMDAsCisJCS5lbmQJPSAweDIwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMiBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmNkMDAwMDAsCisJCS5lbmQJPSAweGZjZDAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgc2g3Nzg2X3BjaV9vcHM7CiAKLSNkZWZpbmUgREVGSU5FX0NPTlRST0xMRVIoc3RhcnQsIGlkeCkJCQkJXAotewkJCQkJCQkJXAotCS5wY2lfb3BzCT0gJnNoNzc4Nl9wY2lfb3BzLAkJCVwKLQkucmVnX2Jhc2UJPSBzdGFydCwJCQkJXAotCS8qIG1lbV9yZXNvdXJjZSBmaWxsZWQgaW4gYXQgcHJvYmUgdGltZSAqLwkJXAotCS5tZW1fb2Zmc2V0CT0gMCwJCQkJCVwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3Nzg2X3BjaV9pb19yZXNvdXJjZXNbaWR4XSwJXAotCS5pb19vZmZzZXQJPSAwLAkJCQkJXAorI2RlZmluZSBERUZJTkVfQ09OVFJPTExFUihzdGFydCwgaWR4KQkJCQkJXAorewkJCQkJCQkJCVwKKwkucGNpX29wcwk9ICZzaDc3ODZfcGNpX29wcywJCQkJXAorCS5yZXNvdXJjZXMJPSBzaDc3ODZfcGNpIyNpZHgjI19yZXNvdXJjZXMsCQkJXAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4Nl9wY2kjI2lkeCMjX3Jlc291cmNlcyksCVwKKwkucmVnX2Jhc2UJPSBzdGFydCwJCQkJCVwKKwkubWVtX29mZnNldAk9IDAsCQkJCQkJXAorCS5pb19vZmZzZXQJPSAwLAkJCQkJCVwKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3ODZfcGNpX2NoYW5uZWxzW10gPSB7CkBAIC0xODAsNyArMjA0LDkgQEAKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBwb3J0LT5ob3NlOwogCXVuc2lnbmVkIGludCBkYXRhOwotCWludCByZXQ7CisJcGh5c19hZGRyX3QgbWVtcGh5czsKKwlzaXplX3QgbWVtc2l6ZTsKKwlpbnQgcmV0LCBpOwogCiAJLyogQmVnaW4gaW5pdGlhbGl6YXRpb24gKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDAsIFNINEFfUENJRVRDVExSKTsKQEAgLTIwMywxNSArMjI5LDI0IEBACiAJZGF0YSB8PSBQQ0lfQ0FQX0lEX0VYUDsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDApOwogCi0JLyogRW5hYmxlIHg0IGxpbmsgd2lkdGggYW5kIGV4dGVuZGVkIHN5bmMuICovCisJLyogRW5hYmxlIGRhdGEgbGluayBsYXllciBhY3RpdmUgc3RhdGUgcmVwb3J0aW5nICovCisJcGNpX3dyaXRlX3JlZyhjaGFuLCBQQ0lfRVhQX0xOS0NBUF9ETExMQVJDLCBTSDRBX1BDSUVFWFBDQVAzKTsKKworCS8qIEVuYWJsZSBleHRlbmRlZCBzeW5jIGFuZCBBU1BNIEwwcyBzdXBwb3J0ICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA0KTsKLQlkYXRhICY9IH4oUENJX0VYUF9MTktTVEFfTkxXIDw8IDE2KTsKLQlkYXRhIHw9ICgxIDw8IDIyKSB8IFBDSV9FWFBfTE5LQ1RMX0VTOworCWRhdGEgJj0gflBDSV9FWFBfTE5LQ1RMX0FTUE1DOworCWRhdGEgfD0gUENJX0VYUF9MTktDVExfRVMgfCAxOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgZGF0YSwgU0g0QV9QQ0lFRVhQQ0FQNCk7CiAKKwkvKiBXcml0ZSBvdXQgdGhlIHBoeXNpY2FsIHNsb3QgbnVtYmVyICovCisJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA1KTsKKwlkYXRhICY9IH5QQ0lfRVhQX1NMVENBUF9QU047CisJZGF0YSB8PSAocG9ydC0+aW5kZXggKyAxKSA8PCAxOTsKKwlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDUpOworCiAJLyogU2V0IHRoZSBjb21wbGV0aW9uIHRpbWVyIHRpbWVvdXQgdG8gdGhlIG1heGltdW0gMzJtcy4gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRMQ1RMUik7Ci0JZGF0YSAmPSB+MHhmZmZmOworCWRhdGEgJj0gfjB4M2YwMDsKIAlkYXRhIHw9IDB4MzIgPDwgODsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRVRMQ1RMUik7CiAKQEAgLTIyNCw2ICsyNTksMzMgQEAKIAlkYXRhIHw9ICgweGZmIDw8IDE2KTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRU1BQ0NUTFIpOwogCisJbWVtcGh5cyA9IF9fcGEobWVtb3J5X3N0YXJ0KTsKKwltZW1zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiA1MTJNQiBvZiBtZW1vcnksIHdlIG5lZWQgdG8gcm9sbCBvdmVyIHRvCisJICogTEFSMS9MQU1SMS4KKwkgKi8KKwlpZiAobWVtc2l6ZSA+IFNaXzUxMk0pIHsKKwkJX19yYXdfd3JpdGVsKG1lbXBoeXMgKyBTWl81MTJNLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBUjEpOworCQlfX3Jhd193cml0ZWwoKChtZW1zaXplIC0gU1pfNTEyTSkgLSBTWl8yNTYpIHwgMSwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMSk7CisJCW1lbXNpemUgPSBTWl81MTJNOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE90aGVyd2lzZSBqdXN0IHplcm8gaXQgb3V0IGFuZCBkaXNhYmxlIGl0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBTVIxKTsKKwl9CisKKwkvKgorCSAqIExBUjAvTEFNUjAgY292ZXJzIHVwIHRvIHRoZSBmaXJzdCA1MTJNQiwgd2hpY2ggaXMgZW5vdWdoIHRvCisJICogY292ZXIgYWxsIG9mIGxvd21lbSBvbiBtb3N0IHBsYXRmb3Jtcy4KKwkgKi8KKwlfX3Jhd193cml0ZWwobWVtcGh5cywgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQVIwKTsKKwlfX3Jhd193cml0ZWwoKG1lbXNpemUgLSBTWl8yNTYpIHwgMSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMCk7CisKIAkvKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRDVExSKTsKIAlkYXRhIHw9IDB4MTsKQEAgLTI0MywxMCArMzA1LDE0IEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAxMDAwMDcsIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhICY9IH4oUENJX1NUQVRVU19ERVZTRUxfTUFTSyA8PCAxNik7CisJZGF0YSB8PSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CisJCShQQ0lfU1RBVFVTX0NBUF9MSVNUIHwgUENJX1NUQVRVU19ERVZTRUxfRkFTVCkgPDwgMTY7CisJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVQQ0lDT05GMSk7CisKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODA4ODgwMDAsIFNINEFfUENJRVRYVkMwRENUTFIpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDIyMjAwMCwgU0g0QV9QQ0lFUlhWQzBEQ1RMUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDA1MEEwLCBTSDRBX1BDSUVFWFBDQVAyKTsKIAogCXdtYigpOwogCkBAIC0yNTQsMTUgKzMyMCwzMiBAQAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBQQ0llIyVkIGxpbmsgd2lkdGggJWRcbiIsCiAJICAgICAgIHBvcnQtPmluZGV4LCAoZGF0YSA+PiAyMCkgJiAweDNmKTsKIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDdjMDAwMCwgU0g0QV9QQ0lFUEFNUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSSDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSTDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHg4MDAwMDEwMCwgU0g0QV9QQ0lFUFRDVExSMCk7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDNmYzAwMDAsIFNINEFfUENJRVBBTVIyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkgyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkwyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODAwMDAwMDAsIFNINEFfUENJRVBUQ1RMUjIpOworCWZvciAoaSA9IDA7IGkgPCBjaGFuLT5ucl9yZXNvdXJjZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGNoYW4tPnJlc291cmNlcyArIGk7CisJCXJlc291cmNlX3NpemVfdCBzaXplOworCQl1MzIgZW5hYmxlX21hc2s7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQVENUTFIoaSkpOworCisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwkJLyoKKwkJICogVGhlIFBBTVIgbWFzayBpcyBjYWxjdWxhdGVkIGluIHVuaXRzIG9mIDI1NmtCLCB3aGljaAorCQkgKiBrZWVwcyB0aGluZ3MgcHJldHR5IHNpbXBsZS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgoKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzI1NkspIC0gMSkgPDwgMTgsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFUEFNUihpKSk7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJIKGkpKTsKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJMKGkpKTsKKworCQllbmFibGVfbWFzayA9IE1BU0tfUEFSRTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJZW5hYmxlX21hc2sgfD0gTUFTS19TUEM7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCBlbmFibGVfbWFzaywgU0g0QV9QQ0lFUFRDVExSKGkpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5Niw5ICszNzksNyBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJcmV0dXJuIHJldDsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoNzc4Nl9wY2llX2h3b3BzIHNoNzc4Nl82NW5tX3BjaWVfaHdvcHMgX19pbml0ZGF0YSA9IHsKQEAgLTMzMiwxNyArNDEzLDcgQEAKIAogCQlwb3J0LT5pbmRleAkJPSBpOwogCQlwb3J0LT5ob3NlCQk9IHNoNzc4Nl9wY2lfY2hhbm5lbHMgKyBpOwotCQlwb3J0LT5ob3NlLT5pb19tYXBfYmFzZQk9IHBvcnQtPmhvc2UtPmlvX3Jlc291cmNlLT5zdGFydDsKLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBhcmUgYm9vdGluZyBpbiAyOSBvciAzMi1iaXQgbW9kZQotCQkgKgotCQkgKiAzMi1iaXQgbW9kZSBwcm92aWRlcyBlYWNoIGNvbnRyb2xsZXIgd2l0aCBpdHMgb3duCi0JCSAqIG1lbW9yeSB3aW5kb3csIHdoaWxlIDI5LWJpdCBtb2RlIHVzZXMgYSBzaGFyZWQgb25lLgotCQkgKi8KLQkJcG9ydC0+aG9zZS0+bWVtX3Jlc291cmNlID0gdGVzdF9tb2RlX3BpbihNT0RFX1BJTjEwKSA/Ci0JCQkmc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW2ldIDoKLQkJCSZzaDc3ODZfcGNpXzI5Yml0X21lbV9yZXNvdXJjZTsKKwkJcG9ydC0+aG9zZS0+aW9fbWFwX2Jhc2UJPSBwb3J0LT5ob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQ7CiAKIAkJcmV0IHw9IHNoNzc4Nl9wY2llX2h3b3BzLT5wb3J0X2luaXRfaHcocG9ydCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oCmluZGV4IGM2NTUyOTAuLjkwYTY5OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmgKQEAgLTMwLDQ3ICszMCw5IEBACiAgKiBmb3Igb3RoZXIoTWF4IFBheWxvYWQgU2l6ZT00MDk2QixQQ0lJT19TSVpFPThNKQogICovCiAKLS8qIFBDSTAtMDogUENJIEkvTyBzcGFjZSAqLwotI2RlZmluZSBTSDRBX1BDSUlPX0JBU0UJCTB4RkQwMDAwMDAJLyogUENJIEkvTyBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJSU9fQkFTRTEJMHhGRDgwMDAwMAkvKiBQQ0kgSS9PIGZvciBjb250cm9sbGVyIDEgKFJldjEuMTQpKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19CQVNFMgkweEZDODAwMDAwCS8qIFBDSSBJL08gZm9yIGNvbnRyb2xsZXIgMiAoUmV2MS4xNzEpKi8KLQotI2RlZmluZSBTSDRBX1BDSUlPX1NJWkU2NAkweDAwMDEwMDAwCS8qIFBMWCBhbGxvd3Mgb25seSA2NEsgKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19TSVpFCQkweDAwODAwMDAwCS8qIDhNICovCi0jZGVmaW5lIFNINEFfUENJSU9fU0laRTIJMHgwMDQwMDAwMAkvKiA0TSAoUmV2MS4xNzEpKi8KLQotLyogUENJMC0xOiBQQ0kgbWVtb3J5IHNwYWNlIDI5LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0UJMHgxMDAwMDAwMAotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFCTB4MDQwMDAwMDAJLyogNjRNICovCi0KLS8qIFBDSTAtMjogUENJIG1lbW9yeSBzcGFjZSAzMi1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQQkweEMwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMQkweEEwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAxIChSZXYxLjE0KSovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMgkweDgwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAyIChSZXYxLjE3MSkqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFQQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KLQogLyogUENJMDogUENJIG1lbW9yeSB0YXJnZXQgdHJhbnNmZXIgMzItYml0IGFkZHJlc3MgdHJhbnNsYXRpb24gdmFsdWUoUmV2MS4xMVQpKi8KICNkZWZpbmUgU0g0QV9QQ0lCTVNUUl9UUkFOU0xBVElPTgkweDIwMDAwMDAwCiAKLSNkZWZpbmUgU0g0QV9QQ0lfREVWSUNFX0lECQkweDAwMDIKLSNkZWZpbmUgU0g0QV9QQ0lfVkVORE9SX0lECQkweDE5MTIKLQotLy8gUENJIGNvbXBhdGlibGUgMDAwLTAzZgotI2RlZmluZSBQQ0lfQ01ECQkweDAwNAotI2RlZmluZSBQQ0lfUklECQkweDAwOAotI2RlZmluZSBQQ0lfSUJBUgkweDAxMAotI2RlZmluZSBQQ0lfTUJBUjAJMHgwMTQKLSNkZWZpbmUgUENJX01CQVIxCTB4MDE4Ci0KLS8qIFBDSSBwb3dlciBtYW5hZ2VtZW50L01TSS9jYXBhYmxpdHkgMDQwLTBmZiAqLwotLyogUENJRSBleHRlbmRlZCAxMDAtZmZmICovCi0KLS8qIFNINzc4NiBkZXZpY2UgaWRlbnRpZmljYXRpb24gKi8JLy8gUmV2MS4xNzEKLSNkZWZpbmUgU0g0QV9QVlIJCSgweEZGMDAwMDMwKQotI2RlZmluZSBTSDRBX1BWUl9TSFgzCQkoMHgxMDQwMDAwMCkKLSNkZWZpbmUgU0g0QV9QUlIJCSgweEZGMDAwMDQ0KQotI2RlZmluZSBTSDRBX1BSUl9TSDc3ODYJCSgweDAwMDAwNDAwKQkvLyBSZXYxLjE3MQotCiAvKglTUFZDUjAJCSovCiAjZGVmaW5lCVNINEFfUENJRVZDUjAJCSgweDAwMDAwMCkJLyogUiAtIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1RPUF9NQgkoMjQpCkBAIC0zNTAsMjMgKzMxMiwyMyBAQAogI2RlZmluZQlTSDRBX1BDSUVDU0FSNQkJKDB4MDIwMkI0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRVNUQ1RMUjUJKDB4MDIwMkI4KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAKLS8qCVBDSUVQQVJMMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMAkJKDB4MDIwNDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSTAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJMKHgpCSgweDAyMDQwMCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUwJKDE4KQogI2RlZmluZQkJTUFTS19QQUwJKDB4M2ZmZjw8QklUU19QQUwpCiAKLS8qCVBDSUVQQVJIMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMAkJKDB4MDIwNDA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSSAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJIKHgpCSgweDAyMDQwNCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUgJKDApCiAjZGVmaW5lCQlNQVNLX1BBSAkoMHhmZmZmZmZmZjw8QklUU19QQUgpCiAKLS8qCVBDSUVQQU1SMAkgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjAJCSgweDAyMDQwOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBTVIJICovCisjZGVmaW5lCVNINEFfUENJRVBBTVIoeCkJKDB4MDIwNDA4ICsgKCh4KSAqIDB4MjApKSAvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1BBTQkoMTgpCiAjZGVmaW5lCQlNQVNLX1BBTQkoMHgzZmZmPDxCSVRTX1BBTSkKIAotLyoJUENJRVBUQ1RMUjAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMAkoMHgwMjA0MEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KKy8qCVBDSUVQVENUTFIJKi8KKyNkZWZpbmUgU0g0QV9QQ0lFUFRDVExSKHgpCSgweDAyMDQwQyArICgoeCkgKiAweDIwKSkKICNkZWZpbmUJCUJJVFNfUEFSRQkoMzEpCiAjZGVmaW5lCQlNQVNLX1BBUkUJKDB4MTw8QklUU19QQVJFKQogI2RlZmluZQkJQklUU19UQwkJKDIwKQpAQCAtMzc4LDI2ICszNDAsNiBAQAogI2RlZmluZQkJQklUU19TUEMJKDgpCiAjZGVmaW5lCQlNQVNLX1NQQwkoMHgxPDxCSVRTX1NQQykKIAotI2RlZmluZQlTSDRBX1BDSUVQQVJMMQkJKDB4MDIwNDIwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgxCQkoMHgwMjA0MjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjEJCSgweDAyMDQyOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIxCSgweDAyMDQyQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMgkJKDB4MDIwNDQwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgyCQkoMHgwMjA0NDQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjIJCSgweDAyMDQ0OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIyCSgweDAyMDQ0QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMwkJKDB4MDIwNDYwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgzCQkoMHgwMjA0NjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjMJCSgweDAyMDQ2OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIzCSgweDAyMDQ2QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNAkJKDB4MDIwNDgwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg0CQkoMHgwMjA0ODQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjQJCSgweDAyMDQ4OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI0CSgweDAyMDQ4QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNQkJKDB4MDIwNEEwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg1CQkoMHgwMjA0QTQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjUJCSgweDAyMDRBOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI1CSgweDAyMDRBQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETUFPUgkJKDB4MDIxMDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FSMAkJKDB4MDIxMTAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FIUjAJKDB4MDIxMTA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jIGIvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYwppbmRleCAzYjE0YmY4Li42ZGE2MmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKQEAgLTEzNCw4ICsxMzQsOCBAQAogCSAqCiAJICogRG8gbm90IHRydXN0IHRoZSBkb2N1bWVudGF0aW9uLCBmb3IgaXQgaXMgZXZpbC4KIAkgKi8KLQl2Y3JoID0gY3RybF9pbmwoYmFzZSk7Ci0JdmNybCA9IGN0cmxfaW5sKGJhc2UgKyBzaXplb2YodTMyKSk7CisJdmNyaCA9IF9fcmF3X3JlYWRsKGJhc2UpOworCXZjcmwgPSBfX3Jhd19yZWFkbChiYXNlICsgc2l6ZW9mKHUzMikpOwogCiAJdG1wID0gKCh1NjQpdmNyaCA8PCAzMikgfCB2Y3JsOwogCW1lbWNweSh2Y3IsICZ0bXAsIHNpemVvZih1NjQpKTsKQEAgLTE0Nyw4ICsxNDcsOCBAQAogewogCXU2NCB0bXAgPSAqKHU2NCAqKSZ2Y3I7CiAKLQljdHJsX291dGwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKLQljdHJsX291dGwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKKwlfX3Jhd193cml0ZWwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKKwlfX3Jhd193cml0ZWwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCBlMTIxYzMwLi40NmNiOTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCiAKLWhlYWRlci15ICs9IGNhY2hlY3RsLmggY3B1LWZlYXR1cmVzLmgKK2hlYWRlci15ICs9IGNhY2hlY3RsLmgKK2hlYWRlci15ICs9IGNwdS1mZWF0dXJlcy5oCitoZWFkZXIteSArPSBod19icmVha3BvaW50LmgKIAogdW5pZmRlZi15ICs9IHVuaXN0ZF8zMi5oCiB1bmlmZGVmLXkgKz0gdW5pc3RkXzY0LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDk5ZDZiM2UuLjQ0NmIzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogLyogUmV0dXJucyB0aGUgcHJpdmlsZWdlZCBzZWdtZW50IGJhc2Ugb2YgYSBnaXZlbiBhZGRyZXNzICAqLwogI2RlZmluZSBQWFNFRyhhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweGUwMDAwMDAwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKyNpZmRlZiBDT05GSUdfMjlCSVQKIC8qCiAgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4gcHJpdmlsZWdlZCBzZWdtZW50CiAgKi8KQEAgLTQwLDcgKzQwLDE1IEBACiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCiAjZGVmaW5lIFA0U0VHQUREUihhKQlcCiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQNFNFRykpCi0jZW5kaWYgLyogMjlCSVQgfHwgUE1CX0ZJWEVEICovCisjZWxzZQorLyoKKyAqIFRoZXNlIHdpbGwgbmV2ZXIgd29yayBpbiAzMi1iaXQsIGRvbid0IGV2ZW4gYm90aGVyLgorICovCisjZGVmaW5lIFAxU0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2RlZmluZSBQMlNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNkZWZpbmUgUDNTRUdBRERSKGEpCV9fZnV0aWxlX3JlbWFwcGluZ19hdHRlbXB0CisjZGVmaW5lIFA0U0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2VuZGlmCiAjZW5kaWYgLyogUDFTRUcgKi8KIAogLyogQ2hlY2sgaWYgYW4gYWRkcmVzcyBjYW4gYmUgcmVhY2hlZCBpbiAyOSBiaXRzICovCkBAIC01NywxMSArNjUsNSBAQAogI2RlZmluZSBQM19BRERSX01BWAkJUDRTRUcKICNlbmRpZgogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QTUIKLWV4dGVybiBpbnQgX19pbl8yOWJpdF9tb2RlKHZvaWQpOwotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9BRERSU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hbGlnbm1lbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyZWZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9BTElHTk1FTlRfSAorI2RlZmluZSBfX0FTTV9TSF9BTElHTk1FTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF9ieXRlX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfd29yZF9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX2R3b3JkX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF91c2VyX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfa2VybmVsX2FjY2Vzcyh2b2lkKTsKKworI2RlZmluZSBVTV9XQVJOCQkoMSA8PCAwKQorI2RlZmluZSBVTV9GSVhVUAkoMSA8PCAxKQorI2RlZmluZSBVTV9TSUdOQUwJKDEgPDwgMikKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1bmFsaWduZWRfdXNlcl9hY3Rpb24odm9pZCk7CisKK2V4dGVybiB2b2lkIHVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnNuX3NpemVfdCwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9BTElHTk1FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAppbmRleCA0YzViN2RiLi5hMjczYzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaApAQCAtMTIwLDUwICsxMjAsNCBAQAogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCWludCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICAuYWxpZ24gMgkJXG5cdCIKLQkJIiAgIG1vdmEgICAgIDFmLCAgcjAJXG5cdCIKLQkJIiAgIG5vcAkJCVxuXHQiCi0JCSIgICBtb3YgICAgIHIxNSwgIHIxCVxuXHQiCi0JCSIgICBtb3YgICAgIy04LCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgIEAlMSwgICUwCVxuXHQiCi0JCSIgICBjbXAvZXEgICAlMiwgICUwCVxuXHQiCi0JCSIgICBiZgkgICAgIDFmCQlcblx0IgotCQkiICAgbW92LmwgICAgJTMsIEAlMQlcblx0IgotCQkiMTogbW92ICAgICAgcjEsICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KQotCQk6ICJyIiAodiksICJyIiAob2xkKSwgInIiIChuZXcpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgIC5hbGlnbiAyCQlcblx0IgotCQkiICAgbW92YSAgICAxZiwgICByMAlcblx0IgotCQkiICAgbm9wCQkJXG5cdCIKLQkJIiAgIG1vdiAgICByMTUsICAgcjEJXG5cdCIKLQkJIiAgIG1vdiAgICAjLTEyLCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgQCUyLCAgICUxCVxuXHQiCi0JCSIgICBtb3YJICAgICUxLCAgICUwICAgIFxuXHQiCi0JCSIgICBjbXAvZXEgICU0LCAgICUwCVxuXHQiCi0JCSIgICBidC9zICAgIDFmCQlcblx0IgotCQkiICAgIGFkZCAgICAlMywgICAlMQlcblx0IgotCQkiICAgbW92LmwgICAlMSwgIEAlMglcblx0IgotCQkiMTogbW92ICAgICByMSwgICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KSwgIj0mciIgKHRtcCkKLQkJOiAiciIgKHYpLCAiciIgKGEpLCAiciIgKHUpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQgIT0gdTsKLX0KICNlbmRpZiAvKiBfX0FTTV9TSF9BVE9NSUNfR1JCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaAppbmRleCBiMDQwZTFlLi40YjAwYjc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtbGxzYy5oCkBAIC0xMDQsMzEgKzEwNCw0IEBACiAJOiAidCIpOwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQotCXJldHVybiBjICE9ICh1KTsKLX0KLQogI2VuZGlmIC8qIF9fQVNNX1NIX0FUT01JQ19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGIxNjM4OGQuLjI3NWE0NDhhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI1LDU4ICsyNSw0MyBAQAogI2VuZGlmCiAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJCWF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KQkJKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikJCWF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldHVybigxLCh2KSkKLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pY19pbmModikJCQlhdG9taWNfYWRkKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KQkJCWF0b21pY19zdWIoMSwgKHYpKQogCi0vKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpCQkoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pCQkoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCiAgKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksdikgKGF0b21pY19zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQotI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCi0KLSNkZWZpbmUgYXRvbWljX2luYyh2KSBhdG9taWNfYWRkKDEsKHYpKQotI2RlZmluZSBhdG9taWNfZGVjKHYpIGF0b21pY19zdWIoMSwodikpCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfR1VTQV9SQikgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXJldCA9IHYtPmNvdW50ZXI7Ci0JaWYgKGxpa2VseShyZXQgPT0gb2xkKSkKLQkJdi0+Y291bnRlciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gdi0+Y291bnRlcjsKLQlpZiAocmV0ICE9IHUpCi0JCXYtPmNvdW50ZXIgKz0gYTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0ICE9IHU7CisJcmV0dXJuIGMgIT0gKHUpOwogfQotI2VuZGlmIC8qICFDT05GSUdfR1VTQV9SQiAmJiAhQ09ORklHX0NQVV9TSDRBICovCi0KLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBkZGE5NmViLi5kYTNlYmVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNjMsNiArNjMsMTQgQEAKIAlpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzICYmIFBhZ2VBbm9uKHBhZ2UpKQogCQlfX2ZsdXNoX2Fub25fcGFnZShwYWdlLCB2bWFkZHIpOwogfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCV9fZmx1c2hfd2JhY2tfcmVnaW9uKGFkZHIsIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbihhZGRyLCBzaXplKTsKK30KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9LRVJORUxfRENBQ0hFX1BBR0UKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggOWZlN2Q3Zi4uMTFkYTRjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMTQ2LDggKzE0NiwxNyBAQAogCS5mbGFncyA9IF9mbGFncywJCQkJCQlcCiB9CiAKK3N0cnVjdCBjbGtfZGl2NF90YWJsZSB7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqZGl2X211bHRfdGFibGU7CisJdm9pZCAoKmtpY2spKHN0cnVjdCBjbGsgKmNsayk7Cit9OworCiBpbnQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAotCQkJIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlKTsKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKK2ludCBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOworaW50IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKIAogI2RlZmluZSBTSF9DTEtfRElWNihfbmFtZSwgX3BhcmVudCwgX3JlZywgX2ZsYWdzKQlcCiB7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaAppbmRleCBlMjY4MWFiLi40Njc2YmY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCkBAIC01NywxMSArNTcsMTAgQEAKIAkJIiAgIG1vdi5sICBAJTEsICAgJTAgICAgICBcblx0IiAvKiBsb2FkICBvbGQgdmFsdWUgKi8KIAkJIiAgIGNtcC9lcSAgJTAsICAgJTIgICAgICBcblx0IgogCQkiICAgYmYgICAgICAgICAgICAxZiAgICAgIFxuXHQiIC8qIGlmIG5vdCBlcXVhbCAqLwotCQkiICAgbW92LmwgICAlMiwgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLworCQkiICAgbW92LmwgICAlMywgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLwogCQkiMTogbW92ICAgICByMSwgICByMTUgICAgIFxuXHQiIC8qIExPR09VVCAqLwotCQk6ICI9JnIiIChyZXR2YWwpLAotCQkgICIrciIgIChtKQotCQk6ICJyIiAgIChuZXcpCisJCTogIj0mciIgKHJldHZhbCkKKwkJOiAgInIiICAobSksICJyIiAgKG9sZCksICJyIiAgKG5ldykKIAkJOiAibWVtb3J5IiAsICJyMCIsICJyMSIsICJ0Iik7CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDg3Y2VkMTMuLmJlYTMzMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTg5LDggKzg5LDYgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CS8qIGZvciBwb3J0YWJpbGl0eSAqLwotCiAJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAppbmRleCA3OGVlZDNlMC4uZTkzNGEyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0yMCwxNCArMjAsMTQgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCiAjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIFwKLSAgICAobiA/IGN0cmxfaW53KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAotCTogY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyAgICAobiA/IF9fcmF3X3JlYWR3KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorCTogX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKICNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIFwKLSAgICAobiA/IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKLSAgICA6IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorICAgIChuID8gX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorICAgIDogX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCiAjZWxzZSAvKiBPdGhlciBDUFUgKi8KLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKICNlbmRpZgogCiBzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdIF9fbWF5YmVfdW51c2VkID0gewpAQCAtNjQsOCArNjQsMTAgQEAKICNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAogI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAogI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAogI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAogI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAogI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCiAjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCiAjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCkBAIC04Myw3ICs4NSw3IEBACiAgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCiAgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KICAqLwotI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQorI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSkKIAogLyogRE1BIGJhc2UgYWRkcmVzcyAqLwogc3RhdGljIHUzMiBkbWFfYmFzZV9hZGRyW10gX19tYXliZV91bnVzZWQgPSB7CkBAIC0xMjMsMTAgKzEyNSw0NyBAQAogICovCiAjZGVmaW5lIFNIRE1BX01JWF9JUlEJKDEgPDwgMSkKICNkZWZpbmUgU0hETUFfRE1BT1IxCSgxIDw8IDIpCi0jZGVmaW5lIFNIRE1BX0RNQUUxCQkoMSA8PCAzKQorI2RlZmluZSBTSERNQV9ETUFFMQkoMSA8PCAzKQorCitlbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCB7CisJU0hETUFfU0xBVkVfU0NJRjBfVFgsCisJU0hETUFfU0xBVkVfU0NJRjBfUlgsCisJU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJU0hETUFfU0xBVkVfU0NJRjFfUlgsCisJU0hETUFfU0xBVkVfU0NJRjJfVFgsCisJU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJU0hETUFfU0xBVkVfU0NJRjNfVFgsCisJU0hETUFfU0xBVkVfU0NJRjNfUlgsCisJU0hETUFfU0xBVkVfU0NJRjRfVFgsCisJU0hETUFfU0xBVkVfU0NJRjRfUlgsCisJU0hETUFfU0xBVkVfU0NJRjVfVFgsCisJU0hETUFfU0xBVkVfU0NJRjVfUlgsCisJU0hETUFfU0xBVkVfU0lVQV9UWCwKKwlTSERNQV9TTEFWRV9TSVVBX1JYLAorCVNIRE1BX1NMQVZFX1NJVUJfVFgsCisJU0hETUFfU0xBVkVfU0lVQl9SWCwKKwlTSERNQV9TTEFWRV9OVU1CRVIsCS8qIE11c3Qgc3RheSBsYXN0ICovCit9OworCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgeworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkCXNsYXZlX2lkOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXUzMgkJCQljaGNyOworCWNoYXIJCQkJbWlkX3JpZDsKK307CiAKIHN0cnVjdCBzaF9kbWFlX3BkYXRhIHsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKmNvbmZpZzsKKwlpbnQgY29uZmlnX251bTsKK307CisKK3N0cnVjdCBkZXZpY2U7CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlIHsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBkZXZpY2UJCQkqZG1hX2RldjsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZwkqY29uZmlnOyAgLyogU2V0IGJ5IHRoZSBkcml2ZXIgKi8KIH07CiAKICNlbmRpZiAvKiBfX0RNQV9TSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmgKaW5kZXggYmRjY2JiZi4uZDYyYWJkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaApAQCAtMjQzLDE2ICsyNDMsMTMgQEAKIAogCXVuc2lnbmVkIGxvbmcgY2llX3BvaW50ZXI7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBEV0FSRl9DSUVfWl9BVUdNRU5UQVRJT04JKDEgPDwgMCkKIAotCS8qCi0JICogJ21vZCcgd2lsbCBiZSBub24tTlVMTCBpZiB0aGlzIENJRSBjYW1lIGZyb20gYSBtb2R1bGUncwotCSAqIC5laF9mcmFtZSBzZWN0aW9uLgotCSAqLwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwkvKiBsaW5rZWQtbGlzdCBlbnRyeSBpZiB0aGlzIENJRSBpcyBmcm9tIGEgbW9kdWxlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpAQCAtMjY2LDEzICsyNjMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3NfcmFuZ2U7CiAJdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb25zOwogCXVuc2lnbmVkIGNoYXIgKmVuZDsKKworCS8qIGxpbmtlZC1saXN0IGVudHJ5IGlmIHRoaXMgRkRFIGlzIGZyb20gYSBtb2R1bGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAKLQkvKgotCSAqICdtb2QnIHdpbGwgYmUgbm9uLU5VTEwgaWYgdGhpcyBGREUgY2FtZSBmcm9tIGEgbW9kdWxlJ3MKLQkgKiAuZWhfZnJhbWUgc2VjdGlvbi4KLQkgKi8KLQlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggNWFjMWU0MC4uNmU3Y2VhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC01NSwxNiArNTUsMjkgQEAKICNkZWZpbmUgRklYX05fQ09MT1VSUyA4CiAJRklYX0NNQVBfQkVHSU4sCiAJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIC0gMSwKLQlGSVhfVU5DQUNIRUQsCisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwogCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECisJLyoKKwkgKiBGSVhfSU9SRU1BUCBlbnRyaWVzIGFyZSB1c2VmdWwgZm9yIG1hcHBpbmcgcGh5c2ljYWwgYWRkcmVzcworCSAqIHNwYWNlIGJlZm9yZSBpb3JlbWFwKCkgaXMgdXNlYWJsZSwgZS5nLiByZWFsbHkgZWFybHkgaW4gYm9vdAorCSAqIGJlZm9yZSBrbWFsbG9jKCkgaXMgd29ya2luZy4KKwkgKi8KKyNkZWZpbmUgRklYX05fSU9SRU1BUFMJMzIKKwlGSVhfSU9SRU1BUF9CRUdJTiwKKwlGSVhfSU9SRU1BUF9FTkQgPSBGSVhfSU9SRU1BUF9CRUdJTiArIEZJWF9OX0lPUkVNQVBTLAorI2VuZGlmCisKIAlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKIH07CiAKIGV4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCiAJCQkgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CitleHRlcm4gdm9pZCBfX2NsZWFyX2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBncHJvdF90IGZsYWdzKTsKIAogI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAogCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IGZiNmJiYjkuLjA2YzQyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX19BU01fU0hfRlBVX0gKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xNiwyMiArMTYsMjMgQEAKIAlyZWdzLT5zciAmPSB+U1JfRkQ7CiB9CiAKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQogZXh0ZXJuIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpfX3Rzayk7Ci12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2spOworZXh0ZXJuIHZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgX19mcHVfc3RhdGVfcmVzdG9yZSh2b2lkKTsKICNlbHNlCi0KLSNkZWZpbmUgc2F2ZV9mcHUodHNrKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSByZWxlYXNlX2ZwdShyZWdzKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBzYXZlX2ZwdSh0c2spCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZXN0b3JlX2ZwdSh0c2spCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlbGVhc2VfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmcHVfc3RhdGVfcmVzdG9yZShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdHJ1Y3QgdXNlcl9yZWdzZXQ7CiAKIGV4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKIGV4dGVybiBpbnQgZnByZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCkBAIC02NSwxOCArNjYsNiBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0c2tfdXNlZF9tYXRoKHRzaykpIHsKLQkJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpICYmIHRzayA9PSBjdXJyZW50KQotCQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7Ci0JcmV0dXJuIDA7Ci19Ci0KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NWRkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSAorI2RlZmluZSBfX0FTTV9TSF9IV19CUkVBS1BPSU5UX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX0hXX0JSRUFLUE9JTlRfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCB7CisJY2hhcgkJKm5hbWU7IC8qIENvbnRhaW5zIG5hbWUgb2YgdGhlIHN5bWJvbCB0byBzZXQgYmtwdCAqLworCXVuc2lnbmVkIGxvbmcJYWRkcmVzczsKKwl1MTYJCWxlbjsKKwl1MTYJCXR5cGU7Cit9OworCitlbnVtIHsKKwlTSF9CUkVBS1BPSU5UX1JFQUQJPSAoMSA8PCAxKSwKKwlTSF9CUkVBS1BPSU5UX1dSSVRFCT0gKDEgPDwgMiksCisJU0hfQlJFQUtQT0lOVF9SVwk9IFNIX0JSRUFLUE9JTlRfUkVBRCB8IFNIX0JSRUFLUE9JTlRfV1JJVEUsCisKKwlTSF9CUkVBS1BPSU5UX0xFTl8xCT0gKDEgPDwgMTIpLAorCVNIX0JSRUFLUE9JTlRfTEVOXzIJPSAoMSA8PCAxMyksCisJU0hfQlJFQUtQT0lOVF9MRU5fNAk9IFNIX0JSRUFLUE9JTlRfTEVOXzEgfCBTSF9CUkVBS1BPSU5UX0xFTl8yLAorCVNIX0JSRUFLUE9JTlRfTEVOXzgJPSAoMSA8PCAxNCksCit9OworCitzdHJ1Y3Qgc2hfdWJjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAludW1fZXZlbnRzOworCXVuc2lnbmVkIGludAl0cmFwX25yOworCXZvaWQJCSgqZW5hYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCplbmFibGVfYWxsKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkCQkoKmRpc2FibGVfYWxsKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCSgqYWN0aXZlX21hc2spKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJKCp0cmlnZ2VyZWRfbWFzaykodm9pZCk7CisJdm9pZAkJKCpjbGVhcl90cmlnZ2VyZWRfbWFzaykodW5zaWduZWQgbG9uZyk7CisJc3RydWN0IGNsawkqY2xrOwkvKiBvcHRpb25hbCBpbnRlcmZhY2UgY2xvY2sgLyBNU1RQIGJpdCAqLworfTsKKworc3RydWN0IHBlcmZfZXZlbnQ7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgcG11OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBVQkMgY2hhbm5lbHMgKi8KKyNkZWZpbmUgSEJQX05VTQkJMgorCisvKiBhcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMgKi8KK2V4dGVybiBpbnQgYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTE2IGhicF9sZW4pOworZXh0ZXJuIGludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCisJCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gaW50IGh3X2JyZWFrcG9pbnRfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKKworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK2V4dGVybiB2b2lkIGFyY2hfZmlsbF9wZXJmX2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc2hfdWJjKHN0cnVjdCBzaF91YmMgKik7CisKK2V4dGVybiBzdHJ1Y3QgcG11IHBlcmZfb3BzX2JwOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDAyNmRkNjUuLjdkYWI3YjIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCiAgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC03OSwxNiArODAsNTEgQEAKICNkZWZpbmUgd3JpdGVsKHYsYSkJCSh7IF9fcmF3X3dyaXRlbCgodiksKGEpKTsgbWIoKTsgfSkKICNkZWZpbmUgd3JpdGVxKHYsYSkJCSh7IF9fcmF3X3dyaXRlcSgodiksKGEpKTsgbWIoKTsgfSkKIAotLyogU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBjdHJsX2luYgkJX19yYXdfcmVhZGIKLSNkZWZpbmUgY3RybF9pbncJCV9fcmF3X3JlYWR3Ci0jZGVmaW5lIGN0cmxfaW5sCQlfX3Jhd19yZWFkbAotI2RlZmluZSBjdHJsX2lucQkJX19yYXdfcmVhZHEKKy8qCisgKiBMZWdhY3kgU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGFyZSBhbGwgZGVwcmVjYXRlZCwgYWxsIG5ldyAoYW5kIGVzcGVjaWFsbHkgY3Jvc3MtcGxhdGZvcm0pIGNvZGUKKyAqIHNob3VsZCBiZSB1c2luZyB0aGUgX19yYXdfeHh4KCkgcm91dGluZXMgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggX19kZXByZWNhdGVkIGN0cmxfaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7Cit9CiAKLSNkZWZpbmUgY3RybF9vdXRiCQlfX3Jhd193cml0ZWIKLSNkZWZpbmUgY3RybF9vdXR3CQlfX3Jhd193cml0ZXcKLSNkZWZpbmUgY3RybF9vdXRsCQlfX3Jhd193cml0ZWwKLSNkZWZpbmUgY3RybF9vdXRxCQlfX3Jhd193cml0ZXEKK3N0YXRpYyBpbmxpbmUgdTE2IF9fZGVwcmVjYXRlZCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX2RlcHJlY2F0ZWQgY3RybF9pbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgX19kZXByZWNhdGVkIGN0cmxfaW5xKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHEoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXRiKHU4IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZWIodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXR3KHUxNiB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGV3KHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0bCh1MzIgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlbCh2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dHEodTY0IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZXEodiwgYWRkcik7Cit9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKIApAQCAtOTcsNiArMTMzLDI4IEBACiAJX19yYXdfcmVhZHcoZ2VuZXJpY19pb19iYXNlKTsKIH0KIAorI2RlZmluZSBfX0JVSUxEX1VOQ0FDSEVEX0lPKGJ3bHEsIHR5cGUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHR5cGUgcmVhZCMjYndscSMjX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcgYWRkcikJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSByZXQ7CQkJCQkJCVwKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CQkJCQkJXAorCXJldCA9IF9fcmF3X3JlYWQjI2J3bHEoYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZSMjYndscSMjX3VuY2FjaGVkKHR5cGUgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQlcCit7CQkJCQkJCQkJXAorCWp1bXBfdG9fdW5jYWNoZWQoKTsJCQkJCQlcCisJX19yYXdfd3JpdGUjI2J3bHEodiwgYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCit9CisKK19fQlVJTERfVU5DQUNIRURfSU8oYiwgdTgpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKHcsIHUxNikKK19fQlVJTERfVU5DQUNIRURfSU8obCwgdTMyKQorX19CVUlMRF9VTkNBQ0hFRF9JTyhxLCB1NjQpCisKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKQEAgLTIzNCwyOCArMjkyLDIxIEBACiAgKi8KICNpZmRlZiBDT05GSUdfTU1VCiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCQkJICAgICAgIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcik7CiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK19faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKG9mZnNldCwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIob2Zmc2V0LCBzaXplLCBwcm90LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorX19pb3JlbWFwXzI5Yml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCisjaWZkZWYgQ09ORklHXzI5QklUCiAJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBvZmZzZXQgKyBzaXplIC0gMTsKLSNlbmRpZgotCXZvaWQgX19pb21lbSAqcmV0OwogCi0JcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCiAJLyoKIAkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CiAJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgpAQCAtMjYzLDcgKzMxNCw3IEBACiAJICogbWFwcGluZyBtdXN0IGJlIGRvbmUgYnkgdGhlIFBNQiBvciBieSB1c2luZyBwYWdlIHRhYmxlcy4KIAkgKi8KIAlpZiAobGlrZWx5KFBYU0VHKG9mZnNldCkgPCBQM1NFRyAmJiBQWFNFRyhsYXN0X2FkZHIpIDwgUDNTRUcpKSB7Ci0JCWlmICh1bmxpa2VseShmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSkKKwkJaWYgKHVubGlrZWx5KHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9DQUNIQUJMRSkpCiAJCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVAxU0VHQUREUihvZmZzZXQpOwogCiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDJTRUdBRERSKG9mZnNldCk7CkBAIC0yNzQsMjYgKzMyNSw3MCBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVA0U0VHQUREUihvZmZzZXQpOwogI2VuZGlmCiAKLQlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXZvaWQgX19pb21lbSAqcmV0OworCisJcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gX19pb3JlbWFwXzI5Yml0KG9mZnNldCwgc2l6ZSwgcHJvdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBwcm90KTsKIH0KICNlbHNlCi0jZGVmaW5lIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKQkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKLSNkZWZpbmUgX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBmbGFncykJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKKyNkZWZpbmUgX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgcHJvdCkJCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCisjZGVmaW5lIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgcHJvdCkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKICNkZWZpbmUgX19pb3VubWFwKGFkZHIpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLSNkZWZpbmUgaW9yZW1hcChvZmZzZXQsIHNpemUpCQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX2NhY2hlKG9mZnNldCwgc2l6ZSkJCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCi0jZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCi0JX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKLQlfX2lvdW5tYXAoKGFkZHIpKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIFBBR0VfS0VSTkVMX05PQ0FDSEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgUEFHRV9LRVJORUwpOworfQorCisjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIF9fcGdwcm90KGZsYWdzKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCwgdW5zaWduZWQgbG9uZywKKwkJCQkgICB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CitleHRlcm4gaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKmFkZHIpIHsgcmV0dXJuIC1FSU5WQUw7IH0KKyNlbmRpZgorCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZQlpb3JlbWFwCisjZGVmaW5lIGlvdW5tYXAJCV9faW91bm1hcAogCiAjZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAogCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaAppbmRleCA5ODUyMTlmLi41ZjZkMmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTYsNiArNiw4IEBACiAJRElFX1RSQVAsCiAJRElFX05NSSwKIAlESUVfT09QUywKKwlESUVfQlJFQUtQT0lOVCwKKwlESUVfU1NURVAsCiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGM3NDI2YWQuLjE1YTA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMTEsNyArMTEsOSBAQAogCiAjZGVmaW5lIFBNQl9BRERSCQkweGY2MTAwMDAwCiAjZGVmaW5lIFBNQl9EQVRBCQkweGY3MTAwMDAwCi0jZGVmaW5lIFBNQl9FTlRSWV9NQVgJCTE2CisKKyNkZWZpbmUgTlJfUE1CX0VOVFJJRVMJCTE2CisKICNkZWZpbmUgUE1CX0VfTUFTSwkJMHgwMDAwMDAwZgogI2RlZmluZSBQTUJfRV9TSElGVAkJOAogCkBAIC0yNSwxMSArMjcsMTUgQEAKICNkZWZpbmUgUE1CX0MJCQkweDAwMDAwMDA4CiAjZGVmaW5lIFBNQl9XVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgUE1CX1VCCQkJMHgwMDAwMDIwMAorI2RlZmluZSBQTUJfQ0FDSEVfTUFTSwkJKFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCKQogI2RlZmluZSBQTUJfVgkJCTB4MDAwMDAxMDAKIAogI2RlZmluZSBQTUJfTk9fRU5UUlkJCSgtMSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90W05SX0NQVVNdOwpAQCAtNDcsMjkgKzUzLDMwIEBACiAjZW5kaWYKIH0gbW1fY29udGV4dF90OwogCi1zdHJ1Y3QgcG1iX2VudHJ5OwotCi1zdHJ1Y3QgcG1iX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHZwbjsKLQl1bnNpZ25lZCBsb25nIHBwbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiAwIC4uIE5SX1BNQl9FTlRSSUVTIGZvciBzcGVjaWZpYyBlbnRyeSBzZWxlY3Rpb24sIG9yCi0JICogUE1CX05PX0VOVFJZIHRvIHNlYXJjaCBmb3IgYSBmcmVlIG9uZQotCSAqLwotCWludCBlbnRyeTsKLQotCXN0cnVjdCBwbWJfZW50cnkgKm5leHQ7Ci0JLyogQWRqYWNlbnQgZW50cnkgbGluayBmb3IgY29udGlndW91cyBtdWx0aS1lbnRyeSBtYXBwaW5ncyAqLwotCXN0cnVjdCBwbWJfZW50cnkgKmxpbms7Ci19OwotCisjaWZkZWYgQ09ORklHX1BNQgogLyogYXJjaC9zaC9tbS9wbWIuYyAqLwogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOwotaW50IHBtYl9pbml0KHZvaWQpOwordm9pZCBwbWJfaW5pdCh2b2lkKTsKK2Jvb2wgX19pbl8yOWJpdF9tb2RlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2RlZmluZSBwbWJfdW5tYXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcG1iX2luaXQoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR18yOUJJVAorI2RlZmluZSBfX2luXzI5Yml0X21vZGUoKQkoMSkKKyNlbHNlCisjZGVmaW5lIF9faW5fMjliaXRfbW9kZSgpCSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUE1CICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNDEwODBiMS4uMzg0Yzc0NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTU4LDcgKzE1OCw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIEVuYWJsZSBNTVUgKi8KLQljdHJsX291dGwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOworCV9fcmF3X3dyaXRlbChNTVVfQ09OVFJPTF9JTklULCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAKIAlpZiAoYXNpZF9jYWNoZShjcHUpID09IE5PX0NPTlRFWFQpCkBAIC0xNzEsOSArMTcxLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNyOwogCi0JY3IgPSBjdHJsX2lubChNTVVDUik7CisJY3IgPSBfX3Jhd19yZWFkbChNTVVDUik7CiAJY3IgJj0gfk1NVV9DT05UUk9MX0lOSVQ7Ci0JY3RybF9vdXRsKGNyLCBNTVVDUik7CisJX19yYXdfd3JpdGVsKGNyLCBNTVVDUik7CiAKIAljdHJsX2JhcnJpZXIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAppbmRleCA4ZWY4MDBjLi4xMGUyZTE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCkBAIC00OSwxMSArNDksMTEgQEAKIC8qIE1NVV9UVEIgaXMgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X1RUQihwZ2RfdCAqcGdkKQogewotCWN0cmxfb3V0bCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOworCV9fcmF3X3dyaXRlbCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOwogfQogCiBzdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfVFRCKHZvaWQpCiB7Ci0JcmV0dXJuIChwZ2RfdCAqKWN0cmxfaW5sKE1NVV9UVEIpOworCXJldHVybiAocGdkX3QgKilfX3Jhd19yZWFkbChNTVVfVFRCKTsKIH0KICNlbmRpZiAvKiBfX0FTTV9TSF9NTVVfQ09OVEVYVF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCAwNjhiZjE2Li5iNzkyN2RlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsNyArMSwyMiBAQAogI2lmbmRlZiBfQVNNX1NIX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fU0hfTU9EVUxFX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21vZHVsZS5oPgorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKyNpZmRlZiBDT05GSUdfRFdBUkZfVU5XSU5ERVIKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZkZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgY2llX2xpc3Q7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgRWxmX1NoZHIgRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCisjZWxzZQorI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCiAjIGlmZGVmIENPTkZJR19DUFVfU0gyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDgxYmZmYzAuLmQ3MWZlYjM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNDUsNiArNDUsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3VuY2FjaGVkLmg+CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNobV9hbGlnbl9tYXNrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm4sIG1pbl9sb3dfcGZuOwpAQCAtNTYsNyArNTcsNiBAQAogCXJldHVybiAoYWRkcjEgXiBhZGRyMikgJiBzaG1fYWxpZ25fbWFzazsKIH0KIAotCiAjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KCh2b2lkICopKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwogCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKICNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZV9sb3cpCiAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQpAQCAtMTI3LDEyICsxMjcsNyBAQAogICogaXMgbm90IHZpc2libGUgKGl0IGlzIHBhcnQgb2YgdGhlIFBNQiBtYXBwaW5nKSBhbmQgc28gbmVlZHMgdG8gYmUKICAqIGFkZGVkIG9yIHN1YnRyYWN0ZWQgYXMgcmVxdWlyZWQuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCi0vKiBwaHlzID0gdmlydCAtIFBBR0VfT0ZGU0VUIC0gKF9fTUVNT1JZX1NUQVJUICYgMHhlMDAwMDAwMCkgKi8KLSNkZWZpbmUgUE1CX09GRlNFVAkoUEFHRV9PRkZTRVQgLSBQWFNFRyhfX01FTU9SWV9TVEFSVCkpCi0jZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBNQl9PRkZTRVQpCi0jZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBNQl9PRkZTRVQpKQotI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCisjaWZkZWYgQ09ORklHX1BNQgogI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCktUEFHRV9PRkZTRVQrX19NRU1PUllfU1RBUlQpCiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVC1fX01FTU9SWV9TVEFSVCkpCiAjZWxzZQpAQCAtMTQwLDYgKzEzNSwxNCBAQAogI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQpKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikgLSBQQUdFX09GRlNFVCArIHVuY2FjaGVkX3N0YXJ0KQorI2RlZmluZSBDQUNfQUREUihhZGRyKQkJKChhZGRyKSAtIHVuY2FjaGVkX3N0YXJ0ICsgUEFHRV9PRkZTRVQpCisjZWxzZQorI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikpCisjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpKQorI2VuZGlmCisKICNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDY3ZjM5OTliLi4xMDQyZjdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE1LDIwICsxNSw0OSBAQAogICovCiBzdHJ1Y3QgcGNpX2NoYW5uZWwgewogCXN0cnVjdCBwY2lfY2hhbm5lbAkqbmV4dDsKKwlzdHJ1Y3QgcGNpX2J1cwkJKmJ1czsKIAogCXN0cnVjdCBwY2lfb3BzCQkqcGNpX29wczsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSppb19yZXNvdXJjZTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSptZW1fcmVzb3VyY2U7CisKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXNvdXJjZXM7CisJdW5zaWduZWQgaW50CQlucl9yZXNvdXJjZXM7CiAKIAl1bnNpZ25lZCBsb25nCQlpb19vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwkJbWVtX29mZnNldDsKIAogCXVuc2lnbmVkIGxvbmcJCXJlZ19iYXNlOwotCiAJdW5zaWduZWQgbG9uZwkJaW9fbWFwX2Jhc2U7CisKKwl1bnNpZ25lZCBpbnQJCWluZGV4OworCXVuc2lnbmVkIGludAkJbmVlZF9kb21haW5faW5mbzsKKworCS8qIE9wdGlvbmFsIGVycm9yIGhhbmRsaW5nICovCisJc3RydWN0IHRpbWVyX2xpc3QJZXJyX3RpbWVyLCBzZXJyX3RpbWVyOworCXVuc2lnbmVkIGludAkJZXJyX2lycSwgc2Vycl9pcnE7CiB9OwogCi1leHRlcm4gdm9pZCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworLyogYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYyAqLworZXh0ZXJuIGludCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworZXh0ZXJuIHZvaWQgcGNpYmlvc19yZXBvcnRfc3RhdHVzKHVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pOworCisvKiBhcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jICovCitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTggKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MTYgKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUzMiAqdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV93cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTggdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV93cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTE2IHZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTMyIHZhbHVlKTsKK2V4dGVybiB2b2lkIHBjaWJpb3NfZW5hYmxlX3RpbWVycyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2hhbmRsZV9zdGF0dXNfZXJyb3JzKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgaW50IHN0YXR1cywgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiBpbnQgcGNpX2lzXzY2bWh6X2NhcGFibGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBQQ0lCSU9TX01JTl9JTywgUENJQklPU19NSU5fTUVNOwogCkBAIC05OSwyMCArMTI4LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0vKgotICogSWYgd2UncmUgb24gYW4gU0g3NzUxIG9yIFNINzc4MCBQQ0kgY29udHJvbGxlciwgUENJIG1lbW9yeSBpcyBtYXBwZWQKLSAqIGF0IHRoZSBlbmQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgaW4gYSBzcGVjaWFsIG5vbi10cmFuc2xhdGFibGUgYXJlYS4KLSAqLwotI2RlZmluZSBQQ0lfTUVNX0ZJWEVEX1NUQVJUCTB4ZmQwMDAwMDAKLSNkZWZpbmUgUENJX01FTV9GSVhFRF9FTkQJKFBDSV9NRU1fRklYRURfU1RBUlQgKyAweDAxMDAwMDAwKQotCi0jZGVmaW5lIGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UocywgZSkJXAotCSgocykgPj0gUENJX01FTV9GSVhFRF9TVEFSVCAmJiAoZSkgPCBQQ0lfTUVNX0ZJWEVEX0VORCkKLSNlbHNlCi0jZGVmaW5lIGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UocywgZSkJKDApCi0jZW5kaWYKLQogLyogQm9hcmQtc3BlY2lmaWMgZml4dXAgcm91dGluZXMuICovCiBpbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiAKQEAgLTEyMiw2ICsxMzcsMTQgQEAKIGV4dGVybiB2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCSAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbik7CiAKKyNkZWZpbmUgcGNpX2RvbWFpbl9ucihidXMpICgoc3RydWN0IHBjaV9jaGFubmVsICopKGJ1cyktPnN5c2RhdGEpLT5pbmRleAorCitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBidXMtPnN5c2RhdGE7CisJcmV0dXJuIGhvc2UtPm5lZWRfZG9tYWluX2luZm87Cit9CisKIC8qIENoYW5jZXMgYXJlIHRoaXMgaW50ZXJydXB0IGlzIHdpcmVkIFBDLXN0eWxlIC4uLiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDYzY2EzN2IuLjhjMDA3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC00LDggKzQsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9xdWlja2xpc3QuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jZGVmaW5lIFFVSUNLX1BHRCAwCS8qIFdlIHByZXNlcnZlIHNwZWNpYWwgbWFwcGluZ3Mgb3ZlciBmcmVlICovCi0jZGVmaW5lIFFVSUNLX1BUIDEJLyogT3RoZXIgcGFnZSB0YWJsZSBwYWdlcyB0aGF0IGFyZSB6ZXJvIG9uIGZyZWUgKi8KKyNkZWZpbmUgUVVJQ0tfUFQgMAkvKiBPdGhlciBwYWdlIHRhYmxlIHBhZ2VzIHRoYXQgYXJlIHplcm8gb24gZnJlZSAqLworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOworCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKK2V4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOworZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCSAgICAgICBwdGVfdCAqcHRlKQpAQCAtMjAsMjggKzI4LDkgQEAKIH0KICNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY3Rvcih2b2lkICp4KQotewotCXBnZF90ICpwZ2QgPSB4OwotCi0JbWVtY3B5KHBnZCArIFVTRVJfUFRSU19QRVJfUEdELAotCSAgICAgICBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELAotCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7Ci19Ci0KIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwotc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiBxdWlja2xpc3RfYWxsb2MoUVVJQ0tfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFULCBwZ2RfY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKLXsKLQlxdWlja2xpc3RfZnJlZShRVUlDS19QR0QsIE5VTEwsIHBnZCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTgxLDcgKzcwLDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQogewotCXF1aWNrbGlzdF90cmltKFFVSUNLX1BHRCwgTlVMTCwgMjUsIDE2KTsKIAlxdWlja2xpc3RfdHJpbShRVUlDS19QVCwgTlVMTCwgMjUsIDE2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmQ4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9ICisjZGVmaW5lIF9fQVNNX1NIX1BHVEFCTEVfMkxFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworLyoKKyAqIHRyYWRpdGlvbmFsIHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkyCisKKy8qIFBURSBiaXRzICovCisjZGVmaW5lIFBURV9NQUdOSVRVREUJCTIJLyogMzItYml0IFBURXMgKi8KKworI2RlZmluZSBQVEVfU0hJRlQJCVBBR0VfU0hJRlQKKyNkZWZpbmUgUFRFX0JJVFMJCShQVEVfU0hJRlQgLSBQVEVfTUFHTklUVURFKQorCisvKiBQR0QgYml0cyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJKFBURV9TSElGVCArIFBURV9CSVRTKQorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkJKFBBR0VfU0laRSAvICgxIDw8IFBURV9NQUdOSVRVREUpKQorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5YTk4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0gKKyNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV8zTEVWRUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCisvKgorICogU29tZSBjb3JlcyBuZWVkIGEgMy1sZXZlbCBwYWdlIHRhYmxlIGxheW91dCwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZworICogNjQtYml0IFBURXMgYW5kIDRLIHBhZ2VzLgorICovCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMworCisjZGVmaW5lIFBURV9NQUdOSVRVREUJCTMJLyogNjQtYml0IFBURXMgb24gU0gtWDIgVExCICovCisKKy8qIFBHRCBiaXRzICovCisjZGVmaW5lIFBHRElSX1NISUZUCQkzMAorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkJNAorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkyCisKKy8qIFBNRCBiaXRzICovCisjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZUIC0gUFRFX01BR05JVFVERSkpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworI2RlZmluZSBQVFJTX1BFUl9QTUQJKCgxIDw8IFBHRElSX1NISUZUKSAvIFBNRF9TSVpFKQorCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDE2bGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwbWQ7IH0gcG1kX3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQoreworCXJldHVybiBwdWRfdmFsKHB1ZCk7Cit9CisKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCSgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZnNldChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKXB1ZF9wYWdlX3ZhZGRyKCpwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOworfQorCisjZGVmaW5lIHB1ZF9ub25lKHgpCSghcHVkX3ZhbCh4KSkKKyNkZWZpbmUgcHVkX3ByZXNlbnQoeCkJKHB1ZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9jbGVhcih4cCkJZG8geyBzZXRfcHVkKHhwLCBfX3B1ZCgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lCXB1ZF9iYWQoeCkJKHB1ZF92YWwoeCkgJiB+UEFHRV9NQVNLKQorCisvKgorICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpIGRvIHsgKihwdWRwdHIpID0gKHB1ZHZhbCk7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYmEzMDQ2ZS4uMDJmNzc0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEyLDcgKzEyLDExIEBACiAjaWZuZGVmIF9fQVNNX1NIX1BHVEFCTEVfSAogI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNpZmRlZiBDT05GSUdfWDJUTEIKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3BndGFibGUtMmxldmVsLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtNTEsMjggKzU1LDEyIEBACiAjZGVmaW5lCU5QSFlTX1NJR04JKDFMTCA8PCAoTlBIWVMgLSAxKSkKICNkZWZpbmUJTlBIWVNfTUFTSwkoLTFMTCA8PCBOUEhZUykKIAotLyoKLSAqIHRyYWRpdGlvbmFsIHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlCi0gKi8KLS8qIFBURSBiaXRzICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDJUTEIpIHx8IGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotIyBkZWZpbmUgUFRFX01BR05JVFVERQkzCS8qIDY0LWJpdCBQVEVzIG9uIGV4dGVuZGVkIG1vZGUgU0gtWDIgVExCICovCi0jZWxzZQotIyBkZWZpbmUgUFRFX01BR05JVFVERQkyCS8qIDMyLWJpdCBQVEVzICovCi0jZW5kaWYKLSNkZWZpbmUgUFRFX1NISUZUCVBBR0VfU0hJRlQKLSNkZWZpbmUgUFRFX0JJVFMJKFBURV9TSElGVCAtIFBURV9NQUdOSVRVREUpCi0KLS8qIFBHRCBiaXRzICovCi0jZGVmaW5lIFBHRElSX1NISUZUCShQVEVfU0hJRlQgKyBQVEVfQklUUykKICNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQogI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCiAKIC8qIEVudHJpZXMgcGVyIGxldmVsICovCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoUEFHRV9TSVpFIC8gKDEgPDwgUFRFX01BR05JVFVERSkpCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkoUEFHRV9TSVpFIC8gc2l6ZW9mKHBnZF90KSkKIAotI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCiAKICNkZWZpbmUgUEhZU19BRERSX01BU0syOQkJMHgxZmZmZmZmZgpAQCAtMTUzLDkgKzE0MSw5IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGVfbG93ID4+IFBBR0VfU0hJRlQpKSkKIAogLyoKLSAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKKyAqIEluaXRpYWxpc2UgdGhlIHBhZ2UgdGFibGUgY2FjaGVzCiAgKi8KLSNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKQEAgLTE2NSw4ICsxNTMsOSBAQAogCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKIAogc3RhdGljIGlubGluZSB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CisJcHRlX3QgcHRlID0gKnB0ZXA7CiAJX191cGRhdGVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpOwogCV9fdXBkYXRlX3RsYih2bWEsIGFkZHJlc3MsIHB0ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDUwMDNlZTguLmUxNzJkNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC03MSw2ICs3MSw4IEBACiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1dSSVRFCTB4MTAwMAkvKiBFUFI0LWJpdDogS2VybmVsIHNwYWNlIHdyaXRhYmxlICovCiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1JFQUQJMHgyMDAwCS8qIEVQUjUtYml0OiBLZXJuZWwgc3BhY2UgcmVhZGFibGUgKi8KIAorI2RlZmluZSBfUEFHRV9FWFRfV0lSRUQJCTB4NDAwMAkvKiBzb2Z0d2FyZTogV2lyZSBUTEIgZW50cnkgKi8KKwogLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCiAjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQogCkBAIC0xNDEsMTIgKzE0MywxNCBAQAogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIpCiAjICBkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9FWFRfRVNaMiB8IF9QQUdFX0VYVF9FU1ozKQogIyBlbmRpZgorIyBkZWZpbmUgX1BBR0VfV0lSRUQJKF9QQUdFX0VYVChfUEFHRV9FWFRfV0lSRUQpKQogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQogIyAgZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfU1oxKQogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQikKICMgIGRlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMCB8IF9QQUdFX1NaMSkKICMgZW5kaWYKKyMgZGVmaW5lIF9QQUdFX1dJUkVECSgwKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDE3Y2RiZWMuLjBlZTQ2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC00MywxMSArNDMsNiBAQAogfQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcG1kX3NldChwbWRfdCAqcG1kcCxwdGVfdCAqcHRlcCkKLXsKLQlwbWRfdmFsKCpwbWRwKSA9ICh1bnNpZ25lZCBsb25nKSBwdGVwOwotfQotCiAvKgogICogUEdEIGRlZmluZXMuIFRvcCBsZXZlbC4KICAqLwpAQCAtMTI4LDggKzEyMywyMSBAQAogI2RlZmluZSBfUEFHRV9ESVJUWQkweDQwMCAgLyogc29mdHdhcmU6IHBhZ2UgYWNjZXNzZWQgaW4gd3JpdGUgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg4MDAgIC8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KIAorLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCisjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQorCisvKgorICogV2UgY2FuIHVzZSB0aGUgc2lnbi1leHRlbmRlZCBiaXRzIGluIHRoZSBQVEVMIHRvIGdldCAzMiBiaXRzIG9mCisgKiBzb2Z0d2FyZSBmbGFncy4gVGhpcyB3b3JrcyBmb3Igbm93IGJlY2F1c2Ugbm8gaW1wbGVtZW50YXRpb25zIHVzZXMKKyAqIGFueXRoaW5nIGFib3ZlIHRoZSBQUE4gZmllbGQuCisgKi8KKyNkZWZpbmUgX1BBR0VfV0lSRUQJX1BBR0VfRVhUKDB4MDAxKSAvKiBzb2Z0d2FyZTogd2lyZSB0aGUgdGxiIGVudHJ5ICovCisKKyNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9GSUxFIHwgX1BBR0VfU0hBUkVEIHwgXAorCQkJCSBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfV0lSRUQpCisKIC8qIE1hc2sgd2hpY2ggZHJvcHMgc29mdHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkweGZmZmZmZmZmZmZmZmYzZGJMTAorI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCShORUZGX01BU0sgJiB+KF9QQUdFX0NMRUFSX0ZMQUdTKSkKIAogLyoKICAqIEh1Z2VUTEIgc3VwcG9ydApAQCAtMjAzLDEyICsyMTEsNiBAQAogI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3QpIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgJiB+X1BBR0VfQ0FDSEFCTEUpCiAKIC8qCi0gKiBIYW5kbGluZyBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBwYWdlIHRhYmxlIHNldHVwLgotICovCi1leHRlcm4gdm9pZCBfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbChwbWRfdCAqIHBtZCk7Ci0jZGVmaW5lIF9faGFuZGxlX2JhZF9wbWQoeCkJX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwoeCkKLQotLyoKICAqIFBURSBsZXZlbCBhY2Nlc3Mgcm91dGluZXMuCiAgKgogICogTm90ZTE6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAwMTdlMGMxOC4uOTYwNWUwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtOTgsMTMgKzk4LDM0IEBACiAKIC8qIEZvcndhcmQgZGVjbCAqLwogc3RydWN0IHNlcV9vcGVyYXRpb25zOworc3RydWN0IHRhc2tfc3RydWN0OwogCiBleHRlcm4gc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7CiAKKy8qIGFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKK2V4dGVybiB2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKKworLyogYXJjaC9zaC9tbS9hbGlnbm1lbnQuYyAqLworZXh0ZXJuIGludCBnZXRfdW5hbGlnbl9jdGwoc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gaW50IHNldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNkZWZpbmUgR0VUX1VOQUxJR05fQ1RMKHRzaywgYWRkcikJZ2V0X3VuYWxpZ25fY3RsKCh0c2spLCAoYWRkcikpCisjZGVmaW5lIFNFVF9VTkFMSUdOX0NUTCh0c2ssIHZhbCkJc2V0X3VuYWxpZ25fY3RsKCh0c2spLCAodmFsKSkKKworLyogYXJjaC9zaC9tbS9pbml0LmMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgbWVtX2luaXRfZG9uZTsKKwogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAorLyogdGhyZWFkX3N0cnVjdCBmbGFncyAqLworI2RlZmluZSBTSF9USFJFQURfVUFDX05PUFJJTlQJKDEgPDwgMCkKKyNkZWZpbmUgU0hfVEhSRUFEX1VBQ19TSUdCVVMJKDEgPDwgMSkKKyNkZWZpbmUgU0hfVEhSRUFEX1VBQ19NQVNLCShTSF9USFJFQURfVUFDX05PUFJJTlQgfCBTSF9USFJFQURfVUFDX1NJR0JVUykKKwogLyogcHJvY2Vzc29yIGJvb3QgbW9kZSBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIE1PREVfUElOMCAoMSA8PCAwKQogI2RlZmluZSBNT0RFX1BJTjEgKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IDFmM2Q2ZmEuLjU3MmI0ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CiAKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CkBAIC05MCw5ICs5MSw5IEBACiAJdW5zaWduZWQgbG9uZyBlbnRyeV9wYzsKIH07CiAKLXVuaW9uIHNoX2ZwdV91bmlvbiB7Ci0Jc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKK3VuaW9uIHRocmVhZF94c3RhdGUgeworCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZGZwdTsKKwlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0IHNvZnRmcHU7CiB9OwogCiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CkBAIC0xMDAsMzggKzEwMSwzMCBAQAogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKIAotCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgKi8KLQl1bnNpZ25lZCBsb25nIHViY19wYzsKKwkvKiBWYXJpb3VzIHRocmVhZCBmbGFncywgc2VlIFNIX1RIUkVBRF94eHggKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLwotCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7CisJLyogU2F2ZSBtaWRkbGUgc3RhdGVzIG9mIHB0cmFjZSBicmVha3BvaW50cyAqLworCXN0cnVjdCBwZXJmX2V2ZW50ICpwdHJhY2VfYnBzW0hCUF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCS8qIERzcCBzdGF0dXMgaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3Qgc2hfZHNwX3N0cnVjdCBkc3Bfc3RhdHVzOwogI2VuZGlmCi19OwogCi0vKiBDb3VudCBvZiBhY3RpdmUgdGFza3Mgd2l0aCBVQkMgc2V0dGluZ3MgKi8KLWV4dGVybiBpbnQgdWJjX3VzZXJjbnQ7CisJLyogRXh0ZW5kZWQgcHJvY2Vzc29yIHN0YXRlICovCisJdW5pb24gdGhyZWFkX3hzdGF0ZSAqeHN0YXRlOworfTsKIAogI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCVwKIAkuc3AgPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykgJmluaXRfc3RhY2ssCQlcCisJLmZsYWdzID0gMCwJCQkJCQlcCiB9CiAKLS8qCi0gKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCi0gKi8KLSNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJIFwKLQlfcmVncy0+cHIgPSAwOwkJCQkgXAotCV9yZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKLQlfcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKLQlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKLQogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKLXN0cnVjdCBtbV9zdHJ1Y3Q7CisKK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfcGMsIHVuc2lnbmVkIGxvbmcgbmV3X3NwKTsKIAogLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCiBleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA1NzI3ZDMxLi42MjFiYzQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTg3LDI2ICs4NywzMSBAQAogCS8qIGxvbmcgc3RhdHVzOyAqIHNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogfTsKIAotI2lmIDAKIC8qIER1bW15IGZwdSBlbXVsYXRvciAgKi8KIHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbG9uZyBmcF9yZWdzWzMyXTsKKwl1bnNpZ25lZCBsb25nIGZwX3JlZ3NbNjRdOwogCXVuc2lnbmVkIGludCBmcHNjcjsKIAl1bnNpZ25lZCBjaGFyIGxvb2thaGVhZDsKIAl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOwogfTsKLSNlbmRpZgogCi11bmlvbiBzaF9mcHVfdW5pb24gewotCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZDsKLQkvKiAnaGFyZCcgaXRzZWxmIG9ubHkgcHJvZHVjZXMgMzIgYml0IGFsaWdubWVudCwgeWV0IHdlIG5lZWQKLQkgICB0byBhY2Nlc3MgaXQgdXNpbmcgNjQgYml0IGxvYWQvc3RvcmUgYXMgd2VsbC4gKi8KK3VuaW9uIHRocmVhZF94c3RhdGUgeworCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZGZwdTsKKwlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0IHNvZnRmcHU7CisJLyoKKwkgKiBUaGUgc3RydWN0dXJlIGRlZmluaXRpb25zIG9ubHkgcHJvZHVjZSAzMiBiaXQgYWxpZ25tZW50LCB5ZXQgd2UgbmVlZAorCSAqIHRvIGFjY2VzcyB0aGVtIHVzaW5nIDY0IGJpdCBsb2FkL3N0b3JlIGFzIHdlbGwuCisJICovCiAJdW5zaWduZWQgbG9uZyBsb25nIGFsaWdubWVudF9kdW1teTsKIH07CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNwOwogCXVuc2lnbmVkIGxvbmcgcGM7CisKKwkvKiBWYXJpb3VzIHRocmVhZCBmbGFncywgc2VlIFNIX1RIUkVBRF94eHggKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJLyogVGhpcyBzdG9yZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHB0X3JlZ3MgYnVpbHQgZHVyaW5nIGEgY29udGV4dAogCSAgIHN3aXRjaCwgb3Igb2YgdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSBidWlsdCBmb3IgYSBrZXJuZWwgbW9kZQogCSAgIGV4Y2VwdGlvbi4gIEl0IGlzIHVzZWQgZm9yIGJhY2t0cmFjaW5nIHRoZSBzdGFjayBvZiBhIHNsZWVwaW5nIHRhc2sKQEAgLTEyMiw3ICsxMjcsNyBAQAogCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgbWF5IGNvbWUgaGVyZSAqLwogCiAJLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLwotCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7CisJdW5pb24gdGhyZWFkX3hzdGF0ZSAqeHN0YXRlOwogfTsKIAogI2RlZmluZSBJTklUX01NQVAgXApAQCAtMTM3LDcgKzE0Miw3IEBACiAJLnRyYXBfbm8JPSAwLAkJCVwKIAkuZXJyb3JfY29kZQk9IDAsCQkJXAogCS5hZGRyZXNzCT0gMCwJCQlcCi0JLmZwdQkJPSB7IHsgeyAwLCB9IH0sIH0JXAorCS5mbGFncwkJPSAwLAkJCVwKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDFkYzEyY2IuLmUxMWIxNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTAyLDEzICsxMDIsMTUgQEAKICNkZWZpbmUJUFRSQUNFX0dFVERTUFJFR1MJNTUJLyogRFNQIHJlZ2lzdGVycyAqLwogI2RlZmluZQlQVFJBQ0VfU0VURFNQUkVHUwk1NgogCi0jZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIgCTI0MAotI2RlZmluZSBQVF9URVhUX0FERFIgCQkyNDQJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2NvZGUgKi8KLSNkZWZpbmUgUFRfREFUQV9BRERSIAkJMjQ4CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9kYXRhICovCisjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIJMjQwCisjZGVmaW5lIFBUX1RFWFRfQUREUgkJMjQ0CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9jb2RlICovCisjZGVmaW5lIFBUX0RBVEFfQUREUgkJMjQ4CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9kYXRhICovCiAjZGVmaW5lIFBUX1RFWFRfTEVOCQkyNTIKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKCh1bnNpZ25lZCBsb25nKShyZWdzKS0+cGMpCkBAIC0xMjQsNiArMTI2LDEyIEBACiBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCitzdHJ1Y3QgcGVyZl9ldmVudDsKK3N0cnVjdCBwZXJmX3NhbXBsZV9kYXRhOworCitleHRlcm4gdm9pZCBwdHJhY2VfdHJpZ2dlcmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IG5taSwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAogCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAKQEAgLTEzMSwxMCArMTM5LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBjID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAotI2lmZGVmIFAyU0VHCi0JaWYgKHBjID49IFAyU0VHICYmIHBjIDwgUDNTRUcpCi0JCXBjIC09IDB4MjAwMDAwMDA7Ci0jZW5kaWYKKwlpZiAodmlydF9hZGRyX3VuY2FjaGVkKHBjKSkKKwkJcmV0dXJuIENBQ19BRERSKHBjKTsKIAogCXJldHVybiBwYzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3JlYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3JlYm9vdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fU0hfUkVCT09UX0gKKyNkZWZpbmUgX19BU01fU0hfUkVCT09UX0gKKworI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IG1hY2hpbmVfb3BzIHsKKwl2b2lkICgqcmVzdGFydCkoY2hhciAqY21kKTsKKwl2b2lkICgqaGFsdCkodm9pZCk7CisJdm9pZCAoKnBvd2VyX29mZikodm9pZCk7CisJdm9pZCAoKnNodXRkb3duKSh2b2lkKTsKKwl2b2lkICgqY3Jhc2hfc2h1dGRvd24pKHN0cnVjdCBwdF9yZWdzICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNoaW5lX29wcyBtYWNoaW5lX29wczsKKworLyogYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jICovCit2b2lkIG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggY2UzNzQzNS4uNDc1ODMyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTgsNyArMTgsNiBAQAogLyogLi4uICovCiAjZGVmaW5lIENPTU1BTkRfTElORSAoKGNoYXIgKikgKFBBUkFNKzB4MTAwKSkKIAotaW50IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICopOwogdm9pZCBzaF9tdl9zZXR1cCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfYmlvcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmgKaW5kZXggZDljOTZkNy4uOTU3MTRjMjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfYmlvcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfYmlvcy5oCkBAIC0xLDE4ICsxLDI3IEBACiAjaWZuZGVmIF9fQVNNX1NIX0JJT1NfSAogI2RlZmluZSBfX0FTTV9TSF9CSU9TX0gKIAorI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCisKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgR3JlZyBCYW5rcywgTWl0Y2ggRGF2aXMKICAqIEMgQVBJIHRvIGludGVyZmFjZSB0byB0aGUgc3RhbmRhcmQgTGludXhTSCBCSU9TCiAgKiB1c3VhbGx5IGZyb20gd2l0aGluIHRoZSBlYXJseSBzdGFnZXMgb2Yga2VybmVsIGJvb3QuCiAgKi8KLQotCiBleHRlcm4gdm9pZCBzaF9iaW9zX2NvbnNvbGVfd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWV4dGVybiB2b2lkIHNoX2Jpb3NfY2hhcl9vdXQoY2hhciBjaCk7CiBleHRlcm4gdm9pZCBzaF9iaW9zX2dkYl9kZXRhY2godm9pZCk7CiAKIGV4dGVybiB2b2lkIHNoX2Jpb3NfZ2V0X25vZGVfYWRkcih1bnNpZ25lZCBjaGFyICpub2RlX2FkZHIpOwogZXh0ZXJuIHZvaWQgc2hfYmlvc19zaHV0ZG93bih1bnNpZ25lZCBpbnQgaG93KTsKIAorZXh0ZXJuIHZvaWQgc2hfYmlvc192YnJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNoX2Jpb3NfdmJyX3JlbG9hZCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2hfYmlvc192YnJfcmVsb2FkKHZvaWQpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgKi8KKwogI2VuZGlmIC8qIF9fQVNNX1NIX0JJT1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1NjVhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIHBsYXRmb3JtIGhlYWRlciBmb3IgdGhlIFNJVSBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBU01fU0lVX0gKKyNkZWZpbmUgQVNNX1NJVV9ICisKKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisKK3N0cnVjdCBkZXZpY2U7CisKK3N0cnVjdCBzaXVfcGxhdGZvcm0geworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3R4X2E7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3J4X2E7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3R4X2I7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3J4X2I7Cit9OworCisjZW5kaWYgLyogQVNNX1NJVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCmluZGV4IGZlOWMyYTEuLjY0ZWI0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCkBAIC05Miw1ICs5Miw2IEBACiAjZGVmaW5lIFNVU1BfU0hfVVNUQU5EQlkJKDEgPDwgMykgLyogU0gtTW9iaWxlIFUtc3RhbmRieSBtb2RlICovCiAjZGVmaW5lIFNVU1BfU0hfU0YJCSgxIDw8IDQpIC8qIEVuYWJsZSBzZWxmLXJlZnJlc2ggKi8KICNkZWZpbmUgU1VTUF9TSF9NTVUJCSgxIDw8IDUpIC8qIFNhdmUvcmVzdG9yZSBNTVUgYW5kIGNhY2hlICovCisjZGVmaW5lIFNVU1BfU0hfUkVHUwkJKDEgPDwgNikgLyogU2F2ZS9yZXN0b3JlIHJlZ2lzdGVycyAqLwogCiAjZW5kaWYgLyogX0FTTV9TSF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggNmEzODE0Mi4uYWE3Nzc3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfSAogI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMX0gKIAorZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3lzX2NhbGxfdGFibGVbXTsKKwogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogIyBpbmNsdWRlICJzeXNjYWxsXzMyLmgiCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggYzE1NDE1Yi4uMGJkN2ExNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAjZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggNSAvKiBlbnRyaWVzIGluIEFSQ0hfRExJTkZPICovCiAKQEAgLTMyLDcgKzMxLDcgQEAKICNkZWZpbmUgbWIoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jbyI6IDogOiJtZW1vcnkiKQogI2RlZmluZSBybWIoKQkJbWIoKQogI2RlZmluZSB3bWIoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jbyI6IDogOiJtZW1vcnkiKQotI2RlZmluZSBjdHJsX2JhcnJpZXIoKQlfX2ljYmkoMHhhODAwMDAwMCkKKyNkZWZpbmUgY3RybF9iYXJyaWVyKCkJX19pY2JpKFBBR0VfT0ZGU0VUKQogI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgbWIoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiOiA6IDoibWVtb3J5IikKQEAgLTExNCw2ICsxMTMsOCBAQAogCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAogICB9KQogCitzdHJ1Y3QgcHRfcmVnczsKKwogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwpAQCAtMTM3LDE0ICsxMzgsMTQgQEAKICNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBjYWNoZWRfdG9fdW5jYWNoZWQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zaXplOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqc2hfZGVidWdmc19yb290OwogCiB2b2lkIHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpOwogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CiB2b2lkIGNwdV9pZGxlX3dhaXQodm9pZCk7Ci0KLWFzbWxpbmthZ2Ugdm9pZCBicmVha19wb2ludF90cmFwKHZvaWQpOwordm9pZCBzdG9wX3RoaXNfY3B1KHZvaWQgKik7CiAKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICNkZWZpbmUgQlVJTERfVFJBUF9IQU5ETEVSKG5hbWUpCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCAwNjgxNGY1Li41MTI5NmIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fQVNNX1NIX1NZU1RFTV8zMl9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogI2lmZGVmIENPTkZJR19TSF9EU1AKIApAQCAtMTQ0LDkgKzE0NSw2IEBACiAJCV9fcmVzdG9yZV9kc3AocHJldik7CQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXAotCW5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi51bmNhY2hlZC50ZXh0IikpKQotCiAvKgogICogSnVtcCB0byB1bmNhY2hlZCBhcmVhLgogICogV2hlbiBoYW5kbGluZyBUTEIgb3IgY2FjaGVzLCB3ZSBuZWVkIHRvIGRvIGl0IGZyb20gYW4gdW5jYWNoZWQgYXJlYS4KQEAgLTIxNiw2ICsyMTQsMTcgQEAKIGludCBoYW5kbGVfdW5hbGlnbmVkX2FjY2VzcyhpbnNuX3NpemVfdCBpbnN0cnVjdGlvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkgICAgc3RydWN0IG1lbV9hY2Nlc3MgKm1hLCBpbnQpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9hZGRyZXNzX2Vycm9yKHZvaWQpCit7CisJaWYgKF9faW5fMjliaXRfbW9kZSgpKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibGRjICUwLCBzclxuXHQiCisJCQkibW92LmwgQCUxLCAlMCIKKwkJCToKKwkJCTogInIiICgweDEwMDAwMDAwKSwgInIiICgweDgwMDAwMDAxKQorCQkpOworfQorCiBhc21saW5rYWdlIHZvaWQgZG9fYWRkcmVzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IGFiMWRkOTEuLjM2MzM4NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtMTgsNiArMTgsNyBAQAogLyoKICAqCXN3aXRjaF90bygpIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdAogICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKIHN0cnVjdCB0YXNrX3N0cnVjdCAqc2g2NF9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCSAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2X3RocmVhZCwKIAkJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCkBAIC0zMyw4ICszNCw2IEBACiAJCQkgICAgICAmbmV4dC0+dGhyZWFkKTsJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkCi0KICNkZWZpbmUganVtcF90b191bmNhY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmFja190b19jYWNoZWQoKQlkbyB7IH0gd2hpbGUgKDApCiAKQEAgLTQ4LDYgKzQ3LDEzIEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpKHNpZ25lZCBsb25nIGxvbmcpKHNpZ25lZCBsb25nKXZhbDsKIH0KIAorZXh0ZXJuIHZvaWQgcGh5c19zdGV4dCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfYWRkcmVzc19lcnJvcih2b2lkKQoreworCXBoeXNfc3RleHQoKTsKK30KKwogI2RlZmluZSBTUl9CTF9MTAkweDAwMDAwMDAwMTAwMDAwMDBMTAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JsX2JpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDFmM2Q5MjcuLjU1YTM2ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTkzLDE0ICs5MywxNiBAQAogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQogCi0jZWxzZSAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCisjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKK2V4dGVybiB2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpOworI2RlZmluZSBhcmNoX3Rhc2tfY2FjaGVfaW5pdCBhcmNoX3Rhc2tfY2FjaGVfaW5pdAorZXh0ZXJuIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpOworZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWRfeHN0YXRlKHZvaWQpOwogCi0jZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBkYThmZTdhLi43NWFiYjM4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTExLDYgKzExLDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogLyoKICAqIFRMQiBoYW5kbGluZy4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBwYWdlcyBmcm9tIHRoZSBwYWdlCkBAIC05Nyw2ICs5OCwyMiBAQAogCiAjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQorZXh0ZXJuIHZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKK2V4dGVybiB2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHRsYl93aXJlX2VudHJ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hICwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKQoreworCUJVRygpOworfQorI2VuZGlmCisKICNlbHNlIC8qIENPTkZJR19NTVUgKi8KIAogI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3ViYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmOTYxNi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3ViYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL3ViYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0FTTV9TSF9VQkNfSAotI2RlZmluZSBfX0FTTV9TSF9VQkNfSAotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGNwdS91YmMuaD4KLQotLyogVXNlciBCcmVhayBDb250cm9sbGVyICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi0jZGVmaW5lIFVCQ19UWVBFX1NINzcyOQkoY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MjkpCi0jZWxzZQotI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJMAotI2VuZGlmCi0KLSNkZWZpbmUgQkFNUl9BU0lECQkoMSA8PCAyKQotI2RlZmluZSBCQU1SX05PTkUJCTAKLSNkZWZpbmUgQkFNUl8xMAkJCTB4MQotI2RlZmluZSBCQU1SXzEyCQkJMHgyCi0jZGVmaW5lIEJBTVJfQUxMCQkweDMKLSNkZWZpbmUgQkFNUl8xNgkJCTB4OAotI2RlZmluZSBCQU1SXzIwCQkJMHg5Ci0KLSNkZWZpbmUgQkJSX0lOU1QJCSgxIDw8IDQpCi0jZGVmaW5lIEJCUl9EQVRBCQkoMiA8PCA0KQotI2RlZmluZSBCQlJfUkVBRAkJKDEgPDwgMikKLSNkZWZpbmUgQkJSX1dSSVRFCQkoMiA8PCAyKQotI2RlZmluZSBCQlJfQllURQkJMHgxCi0jZGVmaW5lIEJCUl9IQUxGCQkweDIKLSNkZWZpbmUgQkJSX0xPTkcJCTB4MwotI2RlZmluZSBCQlJfUVVBRAkJKDEgPDwgNikJLyogU0g3NzUwICovCi0jZGVmaW5lIEJCUl9DUFUJCQkoMSA8PCA2KQkvKiBTSDc3MDlBLFNINzcyOSAqLwotI2RlZmluZSBCQlJfRE1BCQkJKDIgPDwgNikJLyogU0g3NzA5QSxTSDc3MjkgKi8KLQotI2RlZmluZSBCUkNSX0NNRkEJCSgxIDw8IDE1KQotI2RlZmluZSBCUkNSX0NNRkIJCSgxIDw8IDE0KQotCi0jaWYgZGVmaW5lZCBDT05GSUdfQ1BVX1NIMkEKLSNkZWZpbmUgQlJDUl9DTUZDQQkJKDEgPDwgMTUpCi0jZGVmaW5lIEJSQ1JfQ01GQ0IJCSgxIDw8IDE0KQotI2RlZmluZSBCUkNSX0NNRkRBCQkoMSA8PCAxMykKLSNkZWZpbmUgQlJDUl9DTUZEQgkJKDEgPDwgMTIpCi0jZGVmaW5lIEJSQ1JfUENCQgkJKDEgPDwgNikJLyogMTogYWZ0ZXIgZXhlY3V0aW9uICovCi0jZGVmaW5lIEJSQ1JfUENCQQkJKDEgPDwgNSkJLyogMTogYWZ0ZXIgZXhlY3V0aW9uICovCi0jZGVmaW5lIEJSQ1JfUENURQkJMAotI2Vsc2UKLSNkZWZpbmUgQlJDUl9QQ1RFCQkoMSA8PCAxMSkKLSNkZWZpbmUgQlJDUl9QQ0JBCQkoMSA8PCAxMCkJLyogMTogYWZ0ZXIgZXhlY3V0aW9uICovCi0jZGVmaW5lIEJSQ1JfREJFQgkJKDEgPDwgNykKLSNkZWZpbmUgQlJDUl9QQ0JCCQkoMSA8PCA2KQotI2RlZmluZSBCUkNSX1NFUQkJKDEgPDwgMykKLSNkZWZpbmUgQlJDUl9VQkRFCQkoMSA8PCAwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19BU01fU0hfVUJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5jYWNoZWQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5jYWNoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQxOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmNhY2hlZC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19BU01fU0hfVU5DQUNIRURfSAorI2RlZmluZSBfX0FTTV9TSF9VTkNBQ0hFRF9ICisKKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCitleHRlcm4gdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zdGFydCwgdW5jYWNoZWRfZW5kOworCitleHRlcm4gaW50IHZpcnRfYWRkcl91bmNhY2hlZCh1bnNpZ25lZCBsb25nIGthZGRyKTsKK2V4dGVybiB2b2lkIHVuY2FjaGVkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1bmNhY2hlZF9yZXNpemUodW5zaWduZWQgbG9uZyBzaXplKTsKKyNlbHNlCisjZGVmaW5lIHZpcnRfYWRkcl91bmNhY2hlZChrYWRkcikJKDApCisjZGVmaW5lIHVuY2FjaGVkX2luaXQoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5jYWNoZWRfcmVzaXplKHNpemUpCQlCVUcoKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9VTkNBQ0hFRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmgKaW5kZXggMjQ0ZWM0YS4uZDU4YWQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaApAQCAtMTQsNCArMTQsMTIgQEAKICNkZWZpbmUgRFdBUkZfRUhfRlJBTUUKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NVUEVSSDY0CisjZGVmaW5lIEVYVFJBX1RFWFQJCVwKKwkqKC50ZXh0NjQpCQlcCisJKigudGV4dC4uU0htZWRpYTMyKQorI2Vsc2UKKyNkZWZpbmUgRVhUUkFfVEVYVAorI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9TSF9WTUxJTlVYX0xEU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmgKaW5kZXggMTlkZmZmNS4uODVhN2FjYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaApAQCAtNzAsNyArNzAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTMyIHNoX3dkdF9yZWFkX2NudCh2b2lkKQogewotCXJldHVybiBjdHJsX2lubChXVENOVF9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoV1RDTlRfUik7CiB9CiAKIC8qKgpAQCAtODIsNyArODIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NudChfX3UzMiB2YWwpCiB7Ci0JY3RybF9vdXRsKChXVENOVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ05UKTsKKwlfX3Jhd193cml0ZWwoKFdUQ05UX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDTlQpOwogfQogCiAvKioKQEAgLTk0LDcgKzk0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9ic3QoX191MzIgdmFsKQogewotCWN0cmxfb3V0bCgoV1RCU1RfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVEJTVCk7CisJX19yYXdfd3JpdGVsKChXVEJTVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQlNUKTsKIH0KIC8qKgogICogCXNoX3dkdF9yZWFkX2NzciAtIFJlYWQgZnJvbSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191MzIgc2hfd2R0X3JlYWRfY3NyKHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKFdUQ1NSX1IpOworCXJldHVybiBfX3Jhd19yZWFkbChXVENTUl9SKTsKIH0KIAogLyoqCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jc3IoX191MzIgdmFsKQogewotCWN0cmxfb3V0bCgoV1RDU1JfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENTUik7CisJX19yYXdfd3JpdGVsKChXVENTUl9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ1NSKTsKIH0KICNlbHNlCiAvKioKQEAgLTEyNCw3ICsxMjQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTggc2hfd2R0X3JlYWRfY250KHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFdUQ05UX1IpOworCXJldHVybiBfX3Jhd19yZWFkYihXVENOVF9SKTsKIH0KIAogLyoqCkBAIC0xMzYsNyArMTM2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jbnQoX191OCB2YWwpCiB7Ci0JY3RybF9vdXR3KChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDTlQpOworCV9fcmF3X3dyaXRldygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ05UKTsKIH0KIAogLyoqCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3U4IHNoX3dkdF9yZWFkX2Nzcih2b2lkKQogewotCXJldHVybiBjdHJsX2luYihXVENTUl9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoV1RDU1JfUik7CiB9CiAKIC8qKgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY3NyKF9fdTggdmFsKQogewotCWN0cmxfb3V0dygoV1RDU1JfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ1NSKTsKKwlfX3Jhd193cml0ZXcoKFdUQ1NSX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENTUik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSB8fCBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3ViYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTBlODdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3ViYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0FTTV9DUFVfU0gyX1VCQ19ICi0jZGVmaW5lIF9fQVNNX0NQVV9TSDJfVUJDX0gKLQotI2RlZmluZSBVQkNfQkFSQSAgICAgICAgICAgICAgICAweGZmZmZmZjQwCi0jZGVmaW5lIFVCQ19CQU1SQSAgICAgICAgICAgICAgIDB4ZmZmZmZmNDQKLSNkZWZpbmUgVUJDX0JCUkEgICAgICAgICAgICAgICAgMHhmZmZmZmY0OAotI2RlZmluZSBVQkNfQkFSQiAgICAgICAgICAgICAgICAweGZmZmZmZjYwCi0jZGVmaW5lIFVCQ19CQU1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmNjQKLSNkZWZpbmUgVUJDX0JCUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY2OAotI2RlZmluZSBVQkNfQkRSQiAgICAgICAgICAgICAgICAweGZmZmZmZjcwCi0jZGVmaW5lIFVCQ19CRE1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmNzQKLSNkZWZpbmUgVUJDX0JSQ1IgICAgICAgICAgICAgICAgMHhmZmZmZmY3OAotCi0vKgotICogV2UgZG9uJ3QgaGF2ZSBhbnkgQVNJRCBjaGFuZ2VzIHRvIG1ha2UgaW4gdGhlIFVCQyBvbiB0aGUgU0gtMi4KLSAqCi0gKiBNYWtlIHRoZXNlIHB1cnBvc2VseSBpbnZhbGlkIHRvIHRyYWNrIG1pc3VzZS4KLSAqLwotI2RlZmluZSBVQkNfQkFTUkEJCTB4MDAwMDAwMDAKLSNkZWZpbmUgVUJDX0JBU1JCCQkweDAwMDAwMDAwCi0KLSNlbmRpZiAvKiBfX0FTTV9DUFVfU0gyX1VCQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3dhdGNoZG9nLmgKaW5kZXggMzkzMTYxYy4uMWVhYjhhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3dhdGNoZG9nLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3dhdGNoZG9nLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkvKgogCSAqIFNhbWUgcmVhZC93cml0ZSBicmFpbi1kYW1hZ2UgYXMgZm9yIFdUQ05UIGhlcmUuLgogCSAqLwotCXJldHVybiBjdHJsX2luYihSU1RDU1JfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFJTVENTUl9SKTsKIH0KIAogLyoqCkBAIC02Miw3ICs2Miw3IEBACiAJICogd2UgY2FuJ3QgcHJlc2VudGx5IHRvdWNoIHRoZSBXT1ZGIGJpdCwgc2luY2UgdGhlIHVwcGVyIGJ5dGUKIAkgKiBoYXMgdG8gYmUgc3dhcHBlZCBmb3IgdGhpcy4gU28ganVzdCBsZWF2ZSBpdCBhbG9uZS4uCiAJICovCi0JY3RybF9vdXR3KChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgUlNUQ1NSKTsKKwlfX3Jhd193cml0ZWIoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBSU1RDU1IpOwogfQogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NIMl9XQVRDSERPR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmgKaW5kZXggMDVmZGE4My4uOThmMWQxNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaApAQCAtMTcsMjUgKzE3LDI1IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNoX2RhY19lbmFibGUoaW50IGNoYW5uZWwpCiB7CiAJdW5zaWduZWQgY2hhciB2OwotCXYgPSBjdHJsX2luYihEQUNSKTsKKwl2ID0gX19yYXdfcmVhZGIoREFDUik7CiAJaWYoY2hhbm5lbCkgdiB8PSBEQUNSX0RBT0UxOwogCWVsc2UgdiB8PSBEQUNSX0RBT0UwOwotCWN0cmxfb3V0Yih2LERBQ1IpOworCV9fcmF3X3dyaXRlYih2LERBQ1IpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNoX2RhY19kaXNhYmxlKGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGNoYXIgdjsKLQl2ID0gY3RybF9pbmIoREFDUik7CisJdiA9IF9fcmF3X3JlYWRiKERBQ1IpOwogCWlmKGNoYW5uZWwpIHYgJj0gfkRBQ1JfREFPRTE7CiAJZWxzZSB2ICY9IH5EQUNSX0RBT0UwOwotCWN0cmxfb3V0Yih2LERBQ1IpOworCV9fcmF3X3dyaXRlYih2LERBQ1IpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNoX2RhY19vdXRwdXQodTggdmFsdWUsIGludCBjaGFubmVsKQogewotCWlmKGNoYW5uZWwpIGN0cmxfb3V0Yih2YWx1ZSxEQURSMSk7Ci0JZWxzZSBjdHJsX291dGIodmFsdWUsREFEUjApOworCWlmKGNoYW5uZWwpIF9fcmF3X3dyaXRlYih2YWx1ZSxEQURSMSk7CisJZWxzZSBfX3Jhd193cml0ZWIodmFsdWUsREFEUjApOwogfQogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NIM19EQUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCmluZGV4IDBlYTE1ZjMuLjIwNzgxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKQEAgLTIwLDggKzIwLDEwIEBACiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDEwCiAjZGVmaW5lIFRTXzEyOAkJMHgwMDAwMDAxOAogCi0jZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4Ci0jZGVmaW5lIENIQ1JfVFNfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAKICNkZWZpbmUgRE1BT1JfSU5JVAlETUFPUl9ETUUKIApAQCAtMzYsMTEgKzM4LDEzIEBACiAJWE1JVF9TWl8xMjhCSVQsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKLX07CisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDMpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NIM19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3ViYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTYzODFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3ViYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0FTTV9DUFVfU0gzX1VCQ19ICi0jZGVmaW5lIF9fQVNNX0NQVV9TSDNfVUJDX0gKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLSNkZWZpbmUgVUJDX0JBUkEJCTB4YTRmZmZmYjAKLSNkZWZpbmUgVUJDX0JBTVJBCQkweGE0ZmZmZmI0Ci0jZGVmaW5lIFVCQ19CQlJBCQkweGE0ZmZmZmI4Ci0jZGVmaW5lIFVCQ19CQVNSQQkJMHhmZmZmZmZlNAotI2RlZmluZSBVQkNfQkFSQgkJMHhhNGZmZmZhMAotI2RlZmluZSBVQkNfQkFNUkIJCTB4YTRmZmZmYTQKLSNkZWZpbmUgVUJDX0JCUkIJCTB4YTRmZmZmYTgKLSNkZWZpbmUgVUJDX0JBU1JCCQkweGZmZmZmZmU4Ci0jZGVmaW5lIFVCQ19CRFJCCQkweGE0ZmZmZjkwCi0jZGVmaW5lIFVCQ19CRE1SQgkJMHhhNGZmZmY5NAotI2RlZmluZSBVQkNfQlJDUgkJMHhhNGZmZmY5OAotI2Vsc2UKLSNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmZiMAotI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZmI0Ci0jZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmYjgKLSNkZWZpbmUgVUJDX0JBU1JBICAgICAgICAgICAgICAgMHhmZmZmZmZlNAotI2RlZmluZSBVQkNfQkFSQiAgICAgICAgICAgICAgICAweGZmZmZmZmEwCi0jZGVmaW5lIFVCQ19CQU1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmYTQKLSNkZWZpbmUgVUJDX0JCUkIgICAgICAgICAgICAgICAgMHhmZmZmZmZhOAotI2RlZmluZSBVQkNfQkFTUkIgICAgICAgICAgICAgICAweGZmZmZmZmU4Ci0jZGVmaW5lIFVCQ19CRFJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmOTAKLSNkZWZpbmUgVUJDX0JETVJCICAgICAgICAgICAgICAgMHhmZmZmZmY5NAotI2RlZmluZSBVQkNfQlJDUiAgICAgICAgICAgICAgICAweGZmZmZmZjk4Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfVUJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaAppbmRleCBhM2ZhNzMzLi5kNTFkYTI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oCkBAIC0yOCw2ICsyOCwxNSBAQAogI2RlZmluZSBQNFNFR19UTEJfREFUQQkweGY3MDAwMDAwCiAjZGVmaW5lIFA0U0VHX1JFR19CQVNFCTB4ZmYwMDAwMDAKIAorI2RlZmluZSBQQV9BUkVBMAkweDAwMDAwMDAwCisjZGVmaW5lIFBBX0FSRUExCTB4MDQwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTIJMHgwODAwMDAwMAorI2RlZmluZSBQQV9BUkVBMwkweDBjMDAwMDAwCisjZGVmaW5lIFBBX0FSRUE0CTB4MTAwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTUJMHgxNDAwMDAwMAorI2RlZmluZSBQQV9BUkVBNgkweDE4MDAwMDAwCisjZGVmaW5lIFBBX0FSRUE3CTB4MWMwMDAwMDAKKwogI2RlZmluZSBQQV9BUkVBNV9JTwkweGI0MDAwMDAwCS8qIEFyZWEgNSBJTyBNZW1vcnkgKi8KICNkZWZpbmUgUEFfQVJFQTZfSU8JMHhiODAwMDAwMAkvKiBBcmVhIDYgSU8gTWVtb3J5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKaW5kZXggYzRlZDY2MC4uZTczNGVhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKQEAgLTIsMjIgKzIsMzggQEAKICNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykgfHwgXAotCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzczMCkKICNkZWZpbmUgRE1URTBfSVJRCTQ4CiAjZGVmaW5lIERNVEU0X0lSUQk3NgogI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkUwMDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGRTAwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCisjZGVmaW5lIERNVEUwX0lSUQk0OAorI2RlZmluZSBETVRFNF9JUlEJNzYKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGRTAwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkweDAwMzAwMDAwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkyMAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzY0KQogI2RlZmluZSBETVRFMF9JUlEJMzQKICNkZWZpbmUgRE1URTRfSVJRCTQ0CiAjZGVmaW5lIERNQUUwX0lSUQkzOAogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkY2MDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZGNjA5MDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGRjYwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLwogI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCiAjZGVmaW5lIERNVEU2X0lSUQk0MApAQCAtMjksNyArNDUsMjkgQEAKICNkZWZpbmUgRE1BRTFfSVJRCTc0CS8qIERNQSBFcnJvciBJUlEqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZEQzA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGREMwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZEQzA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCisjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQwCisjZGVmaW5lIERNVEU4X0lSUQk0MgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTQzCisjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCisjZGVmaW5lIERNVEUxMV9JUlEJNzMKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGRTAwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMQkweEZEQzA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDA2MDAwMDAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTIxCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAjZGVmaW5lIERNVEUwX0lSUQkzNAogI2RlZmluZSBETVRFNF9JUlEJNDQKQEAgLTQxLDcgKzc5LDExIEBACiAjZGVmaW5lIERNQUUwX0lSUQkzOAkvKiBETUEgRXJyb3IgSVJRICovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkM4MTgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkM4MDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2Vsc2UgLyogU0g3Nzg1ICovCiAjZGVmaW5lIERNVEUwX0lSUQkzMwogI2RlZmluZSBETVRFNF9JUlEJMzcKQEAgLTU0LDE4ICs5NiwxNyBAQAogI2RlZmluZSBETUFFMV9JUlEJNTgJLyogRE1BIEVycm9yIElSUTEgKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQ0MwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGQzgwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAjZW5kaWYKIAotI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAotI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCi0jZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAotI2RlZmluZSBUU184CTB4MDAwMDAwMDAKLSNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAotI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCi0jZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKLSNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAorI2RlZmluZSBSRVFfSEUJCTB4MDAwMDAwQzAKKyNkZWZpbmUgUkVRX0gJCTB4MDAwMDAwODAKKyNkZWZpbmUgUkVRX0xFCQkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwMjAKIAogLyoKICAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCkBAIC03NCwyMiArMTE1LDMxIEBACiAgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgogICovCiBlbnVtIHsKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMTI4QklULAotCVhNSVRfU1pfMjU2QklULAorCVhNSVRfU1pfOEJJVAkJPSAwLAorCVhNSVRfU1pfMTZCSVQJCT0gMSwKKwlYTUlUX1NaXzMyQklUCQk9IDIsCisJWE1JVF9TWl82NEJJVAkJPSA3LAorCVhNSVRfU1pfMTI4QklUCQk9IDMsCisJWE1JVF9TWl8yNTZCSVQJCT0gNCwKKwlYTUlUX1NaXzEyOEJJVF9CTEsJPSAweGIsCisJWE1JVF9TWl8yNTZCSVRfQkxLCT0gMHhjLAogfTsKIAogLyoKICAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07CisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCVwKKwlbWE1JVF9TWl8xMjhCSVRfQkxLXQk9IDQsCVwKKwlbWE1JVF9TWl8yNTZCSVRfQkxLXQk9IDUsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpIHwgXAorCQkJICgoKChpKSA+PiAyKSAmIDMpIDw8IENIQ1JfVFNfSElHSF9TSElGVCkpCiAKICNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCmluZGV4IGJjYjMwMjQuLjExNGEzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKQEAgLTYsOCArNiw2IEBACiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCiAKICNkZWZpbmUgRE1BT1JfSU5JVAkoRE1BT1JfRE1FKQotI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAotI2RlZmluZSBDSENSX1RTX1NISUZUCTMKIAogI2luY2x1ZGUgPGNwdS9kbWEtc2g0YS5oPgogI2Vsc2UgLyogQ09ORklHX0NQVV9TSDRBICovCkBAIC0yOSw4ICsyNywxMCBAQAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAzMAogI2RlZmluZSBUU182NAkJMHgwMDAwMDAwMAogCi0jZGVmaW5lIENIQ1JfVFNfTUFTSwkweDcwCi0jZGVmaW5lIENIQ1JfVFNfU0hJRlQJNAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4NzAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJNAorI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAKICNkZWZpbmUgRE1BT1JfQ09ECTB4MDAwMDAwMDgKIApAQCAtNDEsMjMgKzQxLDI2IEBACiAgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgogICovCiBlbnVtIHsKLQlYTUlUX1NaXzY0QklULAotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCisJWE1JVF9TWl84QklUCT0gMSwKKwlYTUlUX1NaXzE2QklUCT0gMiwKKwlYTUlUX1NaXzMyQklUCT0gMywKKwlYTUlUX1NaXzY0QklUCT0gMCwKKwlYTUlUX1NaXzI1NkJJVAk9IDQsCiB9OwogCiAvKgogICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl82NEJJVF0JCT0gMywKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzY0QklUXQkJPSAzLAlcCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoaSkgJiA3KSA8PCBDSENSX1RTX0xPV19TSElGVCkKKwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCmluZGV4IDNjZTdlZjZjLi4wM2VhNzVjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTI1LDYgKzI1LDEwIEBACiAKICNkZWZpbmUgTU1VQ1JfVEkJCSgxPDwyKQogCisjZGVmaW5lIE1NVUNSX1VSQgkJMHgwMEZDMDAwMAorI2RlZmluZSBNTVVDUl9VUkJfU0hJRlQJCTE4CisjZGVmaW5lIE1NVUNSX1VSQl9ORU5UUklFUwk2NAorCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zcS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKaW5kZXggNTg2ZDY0OS4uNzQ3MTZiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX19BU01fQ1BVX1NINF9TUV9ICiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKICAqIFN0b3JlIHF1ZXVlcyByYW5nZSBmcm9tIGUwMDAwMDAwLWUzZmZmZmZjLCBhbGxvd2luZyBhcHByb3guIDY0TUIgdG8gYmUKQEAgLTI4LDcgKzI5LDcgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHBncHJvdF90IHByb3QpOwogdm9pZCBzcV91bm1hcCh1bnNpZ25lZCBsb25nIHZhZGRyKTsKIHZvaWQgc3FfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IGxlbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2ZTE3MC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoNC91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zIEluYy4gc3VwcG9ydCBTSDRBIFVCQwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDRfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NINF9VQkNfSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIFVCQ19DQlIwCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19DUlIwCQkweGZmMjAwMDA0Ci0jZGVmaW5lIFVCQ19DQVIwCQkweGZmMjAwMDA4Ci0jZGVmaW5lIFVCQ19DQU1SMAkJMHhmZjIwMDAwYwotI2RlZmluZSBVQkNfQ0JSMQkJMHhmZjIwMDAyMAotI2RlZmluZSBVQkNfQ1JSMQkJMHhmZjIwMDAyNAotI2RlZmluZSBVQkNfQ0FSMQkJMHhmZjIwMDAyOAotI2RlZmluZSBVQkNfQ0FNUjEJCTB4ZmYyMDAwMmMKLSNkZWZpbmUgVUJDX0NEUjEJCTB4ZmYyMDAwMzAKLSNkZWZpbmUgVUJDX0NETVIxCQkweGZmMjAwMDM0Ci0jZGVmaW5lIFVCQ19DRVRSMQkJMHhmZjIwMDAzOAotI2RlZmluZSBVQkNfQ0NNRlIJCTB4ZmYyMDA2MDAKLSNkZWZpbmUgVUJDX0NCQ1IJCTB4ZmYyMDA2MjAKLQotLyogQ0JSCSovCi0jZGVmaW5lIFVCQ19DQlJfQUlFCQkoMHgwMTw8MzApCi0jZGVmaW5lIFVCQ19DQlJfSURfSU5TVAkJKDB4MDE8PDQpCi0jZGVmaW5lIFVCQ19DQlJfUldfUkVBRAkJKDB4MDE8PDEpCi0jZGVmaW5lIFVCQ19DQlJfQ0UJCSgweDAxKQotCi0jZGVmaW5lCVVCQ19DQlJfQUlWX01BU0sJKDB4MDBGRjAwMDApCi0jZGVmaW5lCVVCQ19DQlJfQUlWX1NISUZUCSgxNikKLSNkZWZpbmUgVUJDX0NCUl9BSVZfU0VUKGFzaWQpCSgoKGFzaWQpPDxVQkNfQ0JSX0FJVl9TSElGVCkgJiBVQkNfQ0JSX0FJVl9NQVNLKQotCi0jZGVmaW5lIFVCQ19DQlJfSU5JVAkJMHgyMDAwMDAwMAotCi0vKiBDUlIJKi8KLSNkZWZpbmUgVUJDX0NSUl9SRVMJCSgweDAxPDwxMykKLSNkZWZpbmUgVUJDX0NSUl9QQ0IJCSgweDAxPDwxKQotI2RlZmluZSBVQkNfQ1JSX0JJRQkJKDB4MDEpCi0KLSNkZWZpbmUgVUJDX0NSUl9JTklUCQkweDAwMDAyMDAwCi0KLSNlbHNlCS8qIENPTkZJR19DUFVfU0g0ICovCi0jZGVmaW5lIFVCQ19CQVJBCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19CQU1SQQkJMHhmZjIwMDAwNAotI2RlZmluZSBVQkNfQkJSQQkJMHhmZjIwMDAwOAotI2RlZmluZSBVQkNfQkFTUkEJCTB4ZmYwMDAwMTQKLSNkZWZpbmUgVUJDX0JBUkIJCTB4ZmYyMDAwMGMKLSNkZWZpbmUgVUJDX0JBTVJCCQkweGZmMjAwMDEwCi0jZGVmaW5lIFVCQ19CQlJCCQkweGZmMjAwMDE0Ci0jZGVmaW5lIFVCQ19CQVNSQgkJMHhmZjAwMDAxOAotI2RlZmluZSBVQkNfQkRSQgkJMHhmZjIwMDAxOAotI2RlZmluZSBVQkNfQkRNUkIJCTB4ZmYyMDAwMWMKLSNkZWZpbmUgVUJDX0JSQ1IJCTB4ZmYyMDAwMjAKLSNlbmRpZgkvKiBDT05GSUdfQ1BVX1NINCAqLwotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NINF9VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCmluZGV4IGM2NDRhNzcuLjE4M2EyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCkBAIC0xOSwxMiArMTksMTIgQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCiAKLSNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBjdHJsX291dHcoY3RybF9pbncocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBjdHJsX291dGwoY3RybF9pbmwocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSAmIH5tYXNrLCByZWcpCi0jZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgY3RybF9vdXR3KGN0cmxfaW53KHJlZykgJiB+bWFzaywgcmVnKQotI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIGN0cmxfb3V0bChjdHJsX2lubChyZWcpICYgfm1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSAmIH5tYXNrLCByZWcpCisjZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KHJlZykgJiB+bWFzaywgcmVnKQorI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpICYgfm1hc2ssIHJlZykKIAogCiAjZGVmaW5lIFBBX0xFRCAgICAgICAgICBQT1JUX1BBRFIgICAgICAvKiBMRUQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaAppbmRleCBmMzM0MjY2Li41OGY3MTBlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oCkBAIC0zOSw1ICszOSwxMCBAQAogCiAjZGVmaW5lIEhXX0VWRU5UX0lSUV9NQVggKEhXX0VWRU5UX0lSUV9CQVNFICsgOTUpCiAKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jICovCitleHRlcm4gaW50IHN5c3RlbWFzaWNfaXJxX2RlbXV4KGludCk7CitleHRlcm4gdm9pZCBzeXN0ZW1hc2ljX2lycV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYWljYV90aW1lX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9EUkVBTUNBU1RfU1lTQVNJQ19IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjBkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSAorI2RlZmluZSBfX01BQ0hfU0RLNzc4Nl9GUEdBX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBTUlNUUgkJMHgwMDAKKyNkZWZpbmUgIFNSU1RSX01BR0lDCTB4MTk3MQkvKiBGaXhlZCBtYWdpY2FsIHJlYWQgdmFsdWUgKi8KKworI2RlZmluZSBJTlRBU1IJCTB4MDEwCisjZGVmaW5lIElOVEFNUgkJMHgwMjAKKyNkZWZpbmUgTU9EU1dSCQkweDAzMAorI2RlZmluZSBJTlRURVNUUgkweDA0MAorI2RlZmluZSBTWVNTUgkJMHgwNTAKKyNkZWZpbmUgTlJHUFIJCTB4MDYwCisjZGVmaW5lIE5NSVNSCQkweDA3MAorCisjZGVmaW5lIE5NSU1SCQkweDA4MAorI2RlZmluZSAgTk1JTVJfTUFOX05NSU0JQklUKDApCS8qIE1hbnVhbCBOTUkgbWFzayAqLworI2RlZmluZSAgTk1JTVJfQVVYX05NSU0JQklUKDEpCS8qIEF1eGlsaWFyeSBOTUkgbWFzayAqLworCisjZGVmaW5lIElOVEJTUgkJMHgwOTAKKyNkZWZpbmUgSU5UQk1SCQkweDBhMAorI2RlZmluZSBVU1JMRURSCQkweDBiMAorI2RlZmluZSBNQVBTV1IJCTB4MGMwCisjZGVmaW5lIEZQR0FWUgkJMHgwZDAKKyNkZWZpbmUgRlBHQURSCQkweDBlMAorI2RlZmluZSBQQ0JSUgkJMHgwZjAKKyNkZWZpbmUgUlNSCQkweDEwMAorI2RlZmluZSBFWFRBU1IJCTB4MTEwCisjZGVmaW5lIFNQQ0FSCQkweDEyMAorI2RlZmluZSBJTlRNU1IJCTB4MTMwCisjZGVmaW5lIFBDSUVDUgkJMHgxNDAKKyNkZWZpbmUgRkFFUgkJMHgxNTAKKyNkZWZpbmUgVVNSR1BJUgkJMHgxNjAKKy8qIDB4MTcwIHJlc2VydmVkICovCisjZGVmaW5lIExDTEFTUgkJMHgxODAKKworI2RlZmluZSBTQkNSCQkweDE5MAorI2RlZmluZSAgU0NCUl9JMkNNRU4JQklUKDApCS8qIEZQR0EgSTJDIG1hc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgIFNDQlJfSTJDQ0VOCUJJVCgxKQkvKiBDUFUgSTJDIG1hc3RlciBlbmFibGUgKi8KKworI2RlZmluZSBQV1JDUgkJMHgxYTAKKyNkZWZpbmUgU1BDQlIJCTB4MWIwCisjZGVmaW5lIFNQSUNSCQkweDFjMAorI2RlZmluZSBTUElEUgkJMHgxZDAKKyNkZWZpbmUgSTJDQ1IJCTB4MWUwCisjZGVmaW5lIEkyQ0RSCQkweDFmMAorI2RlZmluZSBGUEdBQ1IJCTB4MjAwCisjZGVmaW5lIElBU0VMUjEJCTB4MjEwCisjZGVmaW5lIElBU0VMUjIJCTB4MjIwCisjZGVmaW5lIElBU0VMUjMJCTB4MjMwCisjZGVmaW5lIElBU0VMUjQJCTB4MjQwCisjZGVmaW5lIElBU0VMUjUJCTB4MjUwCisjZGVmaW5lIElBU0VMUjYJCTB4MjYwCisjZGVmaW5lIElBU0VMUjcJCTB4MjcwCisjZGVmaW5lIElBU0VMUjgJCTB4MjgwCisjZGVmaW5lIElBU0VMUjkJCTB4MjkwCisjZGVmaW5lIElBU0VMUjEwCTB4MmEwCisjZGVmaW5lIElBU0VMUjExCTB4MmIwCisjZGVmaW5lIElBU0VMUjEyCTB4MmMwCisjZGVmaW5lIElBU0VMUjEzCTB4MmQwCisjZGVmaW5lIElBU0VMUjE0CTB4MmUwCisjZGVmaW5lIElBU0VMUjE1CTB4MmYwCisvKiAweDMwMCByZXNlcnZlZCAqLworI2RlZmluZSBJQlNFTFIxCQkweDMxMAorI2RlZmluZSBJQlNFTFIyCQkweDMyMAorI2RlZmluZSBJQlNFTFIzCQkweDMzMAorI2RlZmluZSBJQlNFTFI0CQkweDM0MAorI2RlZmluZSBJQlNFTFI1CQkweDM1MAorI2RlZmluZSBJQlNFTFI2CQkweDM2MAorI2RlZmluZSBJQlNFTFI3CQkweDM3MAorI2RlZmluZSBJQlNFTFI4CQkweDM4MAorI2RlZmluZSBJQlNFTFI5CQkweDM5MAorI2RlZmluZSBJQlNFTFIxMAkweDNhMAorI2RlZmluZSBJQlNFTFIxMQkweDNiMAorI2RlZmluZSBJQlNFTFIxMgkweDNjMAorI2RlZmluZSBJQlNFTFIxMwkweDNkMAorI2RlZmluZSBJQlNFTFIxNAkweDNlMAorI2RlZmluZSBJQlNFTFIxNQkweDNmMAorI2RlZmluZSBVU1JBQ1IJCTB4NDAwCisjZGVmaW5lIEJFRVBSCQkweDQxMAorI2RlZmluZSBVU1JMQ0RSCQkweDQyMAorI2RlZmluZSBTTUJDUgkJMHg0MzAKKyNkZWZpbmUgU01CRFIJCTB4NDQwCisjZGVmaW5lIFVTQkNSCQkweDQ1MAorI2RlZmluZSBBTVNSCQkweDQ2MAorI2RlZmluZSBBQ0NSCQkweDQ3MAorI2RlZmluZSBTRElGQ1IJCTB4NDgwCisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKnNkazc3ODZfZnBnYV9iYXNlOworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9mcGdhX2luaXQodm9pZCk7CisKKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX1JFR0FERFIocmVnKQkoc2RrNzc4Nl9mcGdhX2Jhc2UgKyAocmVnKSkKKworLyoKKyAqIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmcm9tIHJlZ2lzdGVyIG9mZnNldCB0byBpbnRlcm5hbCBJMkMgYWRkcmVzcywKKyAqIHdoZW4gdGhlIEZQR0EgaXMgaW4gSTJDIHNsYXZlIG1vZGUuCisgKi8KKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX0kyQ0FERFIocmVnKQkoKHJlZykgPj4gMykKKworc3RhdGljIGlubGluZSB1MTYgZnBnYV9yZWFkX3JlZyh1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQxNihzZGs3Nzg2X2ZwZ2FfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcGdhX3dyaXRlX3JlZyh1MTYgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlvd3JpdGUxNih2YWwsIHNkazc3ODZfZnBnYV9iYXNlICsgcmVnKTsKK30KKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTg0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisjZGVmaW5lIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYyAqLworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2UvbWFjaC9zZTczNDMuaAppbmRleCA3NDk5MTRiLi44ZDgxNzBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmgKQEAgLTk0LDI2ICs5NCwyNiBAQAogCiAjZGVmaW5lIFBPUlRfRFJWQ1IJMHhBNDA1MDE4MAogCi0jZGVmaW5lIFBPUlRfUEFEUiAgCTB4QTQwNTAxMjAKLSNkZWZpbmUgUE9SVF9QQkRSICAJMHhBNDA1MDEyMgotI2RlZmluZSBQT1JUX1BDRFIgIAkweEE0MDUwMTI0Ci0jZGVmaW5lIFBPUlRfUEREUiAgCTB4QTQwNTAxMjYKLSNkZWZpbmUgUE9SVF9QRURSICAJMHhBNDA1MDEyOAotI2RlZmluZSBQT1JUX1BGRFIgIAkweEE0MDUwMTJBCi0jZGVmaW5lIFBPUlRfUEdEUiAgCTB4QTQwNTAxMkMKLSNkZWZpbmUgUE9SVF9QSERSICAJMHhBNDA1MDEyRQotI2RlZmluZSBQT1JUX1BKRFIgIAkweEE0MDUwMTMwCi0jZGVmaW5lIFBPUlRfUEtEUiAgCTB4QTQwNTAxMzIKLSNkZWZpbmUgUE9SVF9QTERSICAJMHhBNDA1MDEzNAotI2RlZmluZSBQT1JUX1BNRFIgIAkweEE0MDUwMTM2Ci0jZGVmaW5lIFBPUlRfUE5EUiAgCTB4QTQwNTAxMzgKLSNkZWZpbmUgUE9SVF9QUURSICAJMHhBNDA1MDEzQQotI2RlZmluZSBQT1JUX1BSRFIgIAkweEE0MDUwMTNDCi0jZGVmaW5lIFBPUlRfUFREUiAgCTB4QTQwNTAxNjAKLSNkZWZpbmUgUE9SVF9QVURSICAJMHhBNDA1MDE2MgotI2RlZmluZSBQT1JUX1BWRFIgIAkweEE0MDUwMTY0Ci0jZGVmaW5lIFBPUlRfUFdEUiAgCTB4QTQwNTAxNjYKLSNkZWZpbmUgUE9SVF9QWURSICAJMHhBNDA1MDE2OAorI2RlZmluZSBQT1JUX1BBRFIJMHhBNDA1MDEyMAorI2RlZmluZSBQT1JUX1BCRFIJMHhBNDA1MDEyMgorI2RlZmluZSBQT1JUX1BDRFIJMHhBNDA1MDEyNAorI2RlZmluZSBQT1JUX1BERFIJMHhBNDA1MDEyNgorI2RlZmluZSBQT1JUX1BFRFIJMHhBNDA1MDEyOAorI2RlZmluZSBQT1JUX1BGRFIJMHhBNDA1MDEyQQorI2RlZmluZSBQT1JUX1BHRFIJMHhBNDA1MDEyQworI2RlZmluZSBQT1JUX1BIRFIJMHhBNDA1MDEyRQorI2RlZmluZSBQT1JUX1BKRFIJMHhBNDA1MDEzMAorI2RlZmluZSBQT1JUX1BLRFIJMHhBNDA1MDEzMgorI2RlZmluZSBQT1JUX1BMRFIJMHhBNDA1MDEzNAorI2RlZmluZSBQT1JUX1BNRFIJMHhBNDA1MDEzNgorI2RlZmluZSBQT1JUX1BORFIJMHhBNDA1MDEzOAorI2RlZmluZSBQT1JUX1BRRFIJMHhBNDA1MDEzQQorI2RlZmluZSBQT1JUX1BSRFIJMHhBNDA1MDEzQworI2RlZmluZSBQT1JUX1BURFIJMHhBNDA1MDE2MAorI2RlZmluZSBQT1JUX1BVRFIJMHhBNDA1MDE2MgorI2RlZmluZSBQT1JUX1BWRFIJMHhBNDA1MDE2NAorI2RlZmluZSBQT1JUX1BXRFIJMHhBNDA1MDE2NgorI2RlZmluZSBQT1JUX1BZRFIJMHhBNDA1MDE2OAogCiAjZGVmaW5lIEZQR0FfSU4JCTB4YjE0MDAwMDAKICNkZWZpbmUgRlBHQV9PVVQJMHhiMTQwMDAwMgpAQCAtMTMzLDE4ICsxMzMsMTAgQEAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX1VBUlRCCTExCiAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX05SCTEyCi0jZGVmaW5lIFNFNzM0M19GUEdBX0lSUV9CQVNFCTEyMAotCi0jZGVmaW5lIE1SU0hQQ19JUlEzICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMykKLSNkZWZpbmUgTVJTSFBDX0lSUTIgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMyKQotI2RlZmluZSBNUlNIUENfSVJRMSAgICAJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX01SU0hQQzEpCi0jZGVmaW5lIE1SU0hQQ19JUlEwICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMCkKLSNkZWZpbmUgU01DX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1NNQykKLSNkZWZpbmUgVVNCX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VTQikKLSNkZWZpbmUgVUFSVEFfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQSkKLSNkZWZpbmUgVUFSVEJfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQikKIAogLyogYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzZTczNDNfZnBnYV9pcnFbXTsKKwogdm9pZCBpbml0XzczNDNzZV9JUlEodm9pZCk7CiAKICNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczNDNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwZDU4N2RhLi4wMmZkM2FlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTMsOCArMTMsOSBAQAogCiBvYmoteQk6PSBkZWJ1Z3RyYXBzLm8gZG1hLW5vbW11Lm8gZHVtcHN0YWNrLm8gCQkJXAogCSAgIGlkbGUubyBpby5vIGlvX2dlbmVyaWMubyBpcnEubwkJCQlcCi0JICAgaXJxXyQoQklUUykubyBtYWNodmVjLm8gbm1pX2RlYnVnLm8gcHJvY2Vzc18kKEJJVFMpLm8gCVwKLQkgICBwdHJhY2VfJChCSVRTKS5vIHJldHVybl9hZGRyZXNzLm8JCQkJXAorCSAgIGlycV8kKEJJVFMpLm8gbWFjaHZlYy5vIG5taV9kZWJ1Zy5vIHByb2Nlc3MubwkJXAorCSAgIHByb2Nlc3NfJChCSVRTKS5vIHB0cmFjZV8kKEJJVFMpLm8JCQkJXAorCSAgIHJlYm9vdC5vIHJldHVybl9hZGRyZXNzLm8JCQkJCVwKIAkgICBzZXR1cC5vIHNpZ25hbF8kKEJJVFMpLm8gc3lzX3NoLm8gc3lzX3NoJChCSVRTKS5vCQlcCiAJICAgc3lzY2FsbHNfJChCSVRTKS5vIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8JCQlcCiAJICAgdHJhcHNfJChCSVRTKS5vIHVud2luZGVyLm8KQEAgLTIyLDcgKzIzLDcgQEAKIG9iai15CQkJCSs9IGNwdS8KIG9iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCi1vYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vIGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX1NIX0NQVV9GUkVRKQkrPSBjcHVmcmVxLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gc2hfa3N5bXNfJChCSVRTKS5vIG1vZHVsZS5vCkBAIC0zOSw2ICs0MCw3IEBACiBvYmotJChDT05GSUdfRFdBUkZfVU5XSU5ERVIpCSs9IGR3YXJmLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KIAorb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQkrPSBsb2NhbHRpbWVyLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBkOTdjODAzLi4wZTQ4YmM2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTcsNSArMTcsNyBAQAogCiBvYmotJChDT05GSUdfU0hfQURDKQkJKz0gYWRjLm8KIG9iai0kKENPTkZJR19TSF9DTEtfQ1BHKQkrPSBjbG9jay1jcGcubworb2JqLSQoQ09ORklHX1NIX0ZQVSkJCSs9IGZwdS5vCitvYmotJChDT05GSUdfU0hfRlBVX0VNVSkJKz0gZnB1Lm8KIAogb2JqLXkJKz0gaXJxLyBpbml0Lm8gY2xvY2subyBod2Jsay5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMKaW5kZXggZGEzZDY4Ny4uZDMwNzU3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYwpAQCAtMTgsMTkgKzE4LDE5IEBACiAKIAlvZmYgPSAoY2hhbm5lbCAmIDB4MDMpIDw8IDI7CiAKLQljc3IgPSBjdHJsX2luYihBRENTUik7CisJY3NyID0gX19yYXdfcmVhZGIoQURDU1IpOwogCWNzciA9IGNoYW5uZWwgfCBBRENTUl9BRFNUIHwgQURDU1JfQ0tTOwotCWN0cmxfb3V0Yihjc3IsIEFEQ1NSKTsKKwlfX3Jhd193cml0ZWIoY3NyLCBBRENTUik7CiAKIAlkbyB7Ci0JCWNzciA9IGN0cmxfaW5iKEFEQ1NSKTsKKwkJY3NyID0gX19yYXdfcmVhZGIoQURDU1IpOwogCX0gd2hpbGUgKChjc3IgJiBBRENTUl9BREYpID09IDApOwogCiAJY3NyICY9IH4oQURDU1JfQURGIHwgQURDU1JfQURTVCk7Ci0JY3RybF9vdXRiKGNzciwgQURDU1IpOworCV9fcmF3X3dyaXRlYihjc3IsIEFEQ1NSKTsKIAotCXJldHVybiAoKChjdHJsX2luYihBRERSQUggKyBvZmYpIDw8IDgpIHwKLQkJY3RybF9pbmIoQUREUkFMICsgb2ZmKSkgPj4gNik7CisJcmV0dXJuICgoKF9fcmF3X3JlYWRiKEFERFJBSCArIG9mZikgPDwgOCkgfAorCQlfX3Jhd19yZWFkYihBRERSQUwgKyBvZmYpKSA+PiA2KTsKIH0KIAogRVhQT1JUX1NZTUJPTChhZGNfc2luZ2xlKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwppbmRleCA2ZGZlMmNjLi5lZWQ1ZWFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCkBAIC0xNDksNyArMTQ5LDggQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfY2xrX2RpdjRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSA9IGNsay0+cHJpdjsKKwlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKmQ0dCA9IGNsay0+cHJpdjsKKwlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSA9IGQ0dC0+ZGl2X211bHRfdGFibGU7CiAJdW5zaWduZWQgaW50IGlkeDsKIAogCWNsa19yYXRlX3RhYmxlX2J1aWxkKGNsaywgY2xrLT5mcmVxX3RhYmxlLCB0YWJsZS0+bnJfZGl2aXNvcnMsCkBAIC0xNjAsMTcgKzE2MSw5MCBAQAogCXJldHVybiBjbGstPmZyZXFfdGFibGVbaWR4XS5mcmVxdWVuY3k7CiB9CiAKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjRfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKmQ0dCA9IGNsay0+cHJpdjsKKwlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSA9IGQ0dC0+ZGl2X211bHRfdGFibGU7CisJdTMyIHZhbHVlOworCWludCByZXQ7CisKKwlpZiAoIXN0cmNtcCgicGxsX2NsayIsIHBhcmVudC0+bmFtZSkpCisJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmIH4oMSA8PCA3KTsKKwllbHNlCisJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSB8ICgxIDw8IDcpOworCisJcmV0ID0gY2xrX3JlcGFyZW50KGNsaywgcGFyZW50KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKKworCS8qIFJlYml1bGQgdGhlIGZyZXF1ZW5jeSB0YWJsZSAqLworCWNsa19yYXRlX3RhYmxlX2J1aWxkKGNsaywgY2xrLT5mcmVxX3RhYmxlLCB0YWJsZS0+bnJfZGl2aXNvcnMsCisJCQkgICAgIHRhYmxlLCAmY2xrLT5hcmNoX2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX2Nsa19kaXY0X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYWxnb19pZCkKK3sKKwlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKmQ0dCA9IGNsay0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBpZHggPSBjbGtfcmF0ZV90YWJsZV9maW5kKGNsaywgY2xrLT5mcmVxX3RhYmxlLCByYXRlKTsKKwlpZiAoaWR4IDwgMCkKKwkJcmV0dXJuIGlkeDsKKworCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2YWx1ZSAmPSB+KDB4ZiA8PCBjbGstPmVuYWJsZV9iaXQpOworCXZhbHVlIHw9IChpZHggPDwgY2xrLT5lbmFibGVfYml0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlpZiAoZDR0LT5raWNrKQorCQlkNHQtPmtpY2soY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX2Nsa19kaXY0X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJiB+KDEgPDwgOCksIGNsay0+ZW5hYmxlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2Nsa19kaXY0X2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpIHwgKDEgPDwgOCksIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2NF9jbGtfb3BzID0gewogCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY0X3NldF9yYXRlLAogCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAogfTsKIAotaW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCi0JCQkJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUpCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2hfY2xrX2RpdjRfZW5hYmxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaF9jbGtfZGl2NF9yZWNhbGMsCisJLnNldF9yYXRlCT0gc2hfY2xrX2RpdjRfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSBzaF9jbGtfZGl2X3JvdW5kX3JhdGUsCisJLmVuYWJsZQkJPSBzaF9jbGtfZGl2NF9lbmFibGUsCisJLmRpc2FibGUJPSBzaF9jbGtfZGl2NF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoX2Nsa19kaXY0X3JlcGFyZW50X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaF9jbGtfZGl2NF9yZWNhbGMsCisJLnNldF9yYXRlCT0gc2hfY2xrX2RpdjRfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSBzaF9jbGtfZGl2X3JvdW5kX3JhdGUsCisJLmVuYWJsZQkJPSBzaF9jbGtfZGl2NF9lbmFibGUsCisJLmRpc2FibGUJPSBzaF9jbGtfZGl2NF9kaXNhYmxlLAorCS5zZXRfcGFyZW50CT0gc2hfY2xrX2RpdjRfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgY2xrX29wcyAqb3BzKQogewogCXN0cnVjdCBjbGsgKmNsa3A7CiAJdm9pZCAqZnJlcV90YWJsZTsKLQlpbnQgbnJfZGl2cyA9IHRhYmxlLT5ucl9kaXZpc29yczsKKwlpbnQgbnJfZGl2cyA9IHRhYmxlLT5kaXZfbXVsdF90YWJsZS0+bnJfZGl2aXNvcnM7CiAJaW50IGZyZXFfdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpOwogCWludCByZXQgPSAwOwogCWludCBrOwpAQCAtMTg1LDcgKzI1OSw3IEBACiAJZm9yIChrID0gMDsgIXJldCAmJiAoayA8IG5yKTsgaysrKSB7CiAJCWNsa3AgPSBjbGtzICsgazsKIAotCQljbGtwLT5vcHMgPSAmc2hfY2xrX2RpdjRfY2xrX29wczsKKwkJY2xrcC0+b3BzID0gb3BzOwogCQljbGtwLT5pZCA9IC0xOwogCQljbGtwLT5wcml2ID0gdGFibGU7CiAKQEAgLTE5OCw2ICsyNzIsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgX19pbml0IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCQlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKQoreworCXJldHVybiBzaF9jbGtfZGl2NF9yZWdpc3Rlcl9vcHMoY2xrcywgbnIsIHRhYmxlLCAmc2hfY2xrX2RpdjRfY2xrX29wcyk7Cit9CisKK2ludCBfX2luaXQgc2hfY2xrX2RpdjRfZW5hYmxlX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCQlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKQoreworCXJldHVybiBzaF9jbGtfZGl2NF9yZWdpc3Rlcl9vcHMoY2xrcywgbnIsIHRhYmxlLAorCQkJCQkmc2hfY2xrX2RpdjRfZW5hYmxlX2Nsa19vcHMpOworfQorCitpbnQgX19pbml0IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCQlzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKQoreworCXJldHVybiBzaF9jbGtfZGl2NF9yZWdpc3Rlcl9vcHMoY2xrcywgbnIsIHRhYmxlLAorCQkJCQkmc2hfY2xrX2RpdjRfcmVwYXJlbnRfY2xrX29wcyk7Cit9CisKICNpZmRlZiBDT05GSUdfU0hfQ0xLX0NQR19MRUdBQ1kKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1hc3Rlcl9jbGsgPSB7CiAJLm5hbWUJCT0gIm1hc3Rlcl9jbGsiLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2ZwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNTllZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvZnB1LmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKworaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0c2tfdXNlZF9tYXRoKHRzaykpIHsKKwkJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpICYmIHRzayA9PSBjdXJyZW50KQorCQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBNZW1vcnkgYWxsb2NhdGlvbiBhdCB0aGUgZmlyc3QgdXNhZ2Ugb2YgdGhlIEZQVSBhbmQgb3RoZXIgc3RhdGUuCisJICovCisJaWYgKCF0c2stPnRocmVhZC54c3RhdGUpIHsKKwkJdHNrLT50aHJlYWQueHN0YXRlID0ga21lbV9jYWNoZV9hbGxvYyh0YXNrX3hzdGF0ZV9jYWNoZXAsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0c2stPnRocmVhZC54c3RhdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CisJCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdTsKKwkJbWVtc2V0KGZwLCAwLCB4c3RhdGVfc2l6ZSk7CisJCWZwLT5mcHNjciA9IEZQU0NSX0lOSVQ7CisJfSBlbHNlIHsKKwkJc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnAgPSAmdHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1OworCQltZW1zZXQoZnAsIDAsIHhzdGF0ZV9zaXplKTsKKwkJZnAtPmZwc2NyID0gRlBTQ1JfSU5JVDsKKwl9CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TSF9GUFUKK3ZvaWQgX19mcHVfc3RhdGVfcmVzdG9yZSh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXJlc3RvcmVfZnB1KHRzayk7CisKKwl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOworCXRzay0+ZnB1X2NvdW50ZXIrKzsKK30KKwordm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlpZiAodW5saWtlbHkoIXVzZXJfbW9kZShyZWdzKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IEZQVSBpcyB1c2VkIGluIGtlcm5lbCBtb2RlLlxuIik7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJaWYgKCF0c2tfdXNlZF9tYXRoKHRzaykpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkvKgorCQkgKiBkb2VzIGEgc2xhYiBhbGxvYyB3aGljaCBjYW4gc2xlZXAKKwkJICovCisJCWlmIChpbml0X2ZwdSh0c2spKSB7CisJCQkvKgorCQkJICogcmFuIG91dCBvZiBtZW1vcnkhCisJCQkgKi8KKwkJCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7CisJCQlyZXR1cm47CisJCX0KKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl9CisKKwlncmFiX2ZwdShyZWdzKTsKKworCV9fZnB1X3N0YXRlX3Jlc3RvcmUoKTsKK30KKworQlVJTERfVFJBUF9IQU5ETEVSKGZwdV9zdGF0ZV9yZXN0b3JlKQoreworCVRSQVBfSEFORExFUl9ERUNMOworCisJZnB1X3N0YXRlX3Jlc3RvcmUocmVncyk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NIX0ZQVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKaW5kZXggODliNGI3Ni4uYzczNjQyMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCkBAIC0yNCwyMiArMjQsMzIgQEAKICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotI2lmZGVmIENPTkZJR19TVVBFUkgzMgotI2luY2x1ZGUgPGFzbS91YmMuaD4KKyNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQorI2RlZmluZSBjcHVfaGFzX2ZwdQkxCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX2ZwdQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSF9EU1AKKyNkZWZpbmUgY3B1X2hhc19kc3AJMQorI2Vsc2UKKyNkZWZpbmUgY3B1X2hhc19kc3AJMAogI2VuZGlmCiAKIC8qCiAgKiBHZW5lcmljIHdyYXBwZXIgZm9yIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gZGlzYWJsZSBvbi1jaGlwCiAgKiBwZXJpcGhlcmFscyAobm9mcHUsIG5vZHNwLCBhbmQgc28gZm9ydGgpLgogICovCi0jZGVmaW5lIG9uY2hpcF9zZXR1cCh4KQkJCQlcCi1zdGF0aWMgaW50IHgjI19kaXNhYmxlZCBfX2luaXRkYXRhID0gMDsJCVwKLQkJCQkJCVwKLXN0YXRpYyBpbnQgX19pbml0IHgjI19zZXR1cChjaGFyICpvcHRzKQkJXAotewkJCQkJCVwKLQl4IyNfZGlzYWJsZWQgPSAxOwkJCVwKLQlyZXR1cm4gMTsJCQkJXAotfQkJCQkJCVwKKyNkZWZpbmUgb25jaGlwX3NldHVwKHgpCQkJCQlcCitzdGF0aWMgaW50IHgjI19kaXNhYmxlZCBfX2luaXRkYXRhID0gIWNwdV9oYXNfIyN4OwlcCisJCQkJCQkJXAorc3RhdGljIGludCBfX2luaXQgeCMjX3NldHVwKGNoYXIgKm9wdHMpCQkJXAorewkJCQkJCQlcCisJeCMjX2Rpc2FibGVkID0gMTsJCQkJXAorCXJldHVybiAxOwkJCQkJXAorfQkJCQkJCQlcCiBfX3NldHVwKCJubyIgX19zdHJpbmdpZnkoeCksIHgjI19zZXR1cCk7CiAKIG9uY2hpcF9zZXR1cChmcHUpOwpAQCAtNTIsMTAgKzYyLDEwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3VsYXRpdmVfZXhlY3V0aW9uX2luaXQodm9pZCkKIHsKIAkvKiBDbGVhciBSQUJEICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKENQVU9QTSkgJiB+Q1BVT1BNX1JBQkQsIENQVU9QTSk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENQVU9QTSkgJiB+Q1BVT1BNX1JBQkQsIENQVU9QTSk7CiAKIAkvKiBGbHVzaCB0aGUgdXBkYXRlICovCi0JKHZvaWQpY3RybF9pbmwoQ1BVT1BNKTsKKwkodm9pZClfX3Jhd19yZWFkbChDUFVPUE0pOwogCWN0cmxfYmFycmllcigpOwogfQogI2Vsc2UKQEAgLTg5LDcgKzk5LDcgQEAKICNlbmRpZgogCiAvKiAybmQtbGV2ZWwgY2FjaGUgaW5pdCAqLwotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIGwyX2NhY2hlX2luaXQodm9pZCkKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBsMl9jYWNoZV9pbml0KHZvaWQpCiB7CiB9CiAKQEAgLTk3LDEyICsxMDcsMTIgQEAKICAqIEdlbmVyaWMgZmlyc3QtbGV2ZWwgY2FjaGUgaW5pdAogICovCiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBjYWNoZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBjYWNoZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjY3IsIGZsYWdzOwogCiAJanVtcF90b191bmNhY2hlZCgpOwotCWNjciA9IGN0cmxfaW5sKENDUik7CisJY2NyID0gX19yYXdfcmVhZGwoQ0NSKTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIGNhY2hlIGlzIGVuYWJsZWQgb3Igbm90IC0gYQpAQCAtMTQ2LDcgKzE1Niw3IEBACiAJCQlmb3IgKGFkZHIgPSBhZGRyc3RhcnQ7CiAJCQkgICAgIGFkZHIgPCBhZGRyc3RhcnQgKyB3YXlzaXplOwogCQkJICAgICBhZGRyICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzeikKLQkJCQljdHJsX291dGwoMCwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKDAsIGFkZHIpOwogCiAJCQlhZGRyc3RhcnQgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3I7CiAJCX0gd2hpbGUgKC0td2F5cyk7CkBAIC0xNzksNyArMTg5LDcgQEAKIAogCWwyX2NhY2hlX2luaXQoKTsKIAotCWN0cmxfb3V0bChmbGFncywgQ0NSKTsKKwlfX3Jhd193cml0ZWwoZmxhZ3MsIENDUik7CiAJYmFja190b19jYWNoZWQoKTsKIH0KICNlbHNlCkBAIC0yMDcsNiArMjE3LDE4IEBACiAJCWwyX2NhY2hlX3NoYXBlID0gLTE7IC8qIE5vIFMtY2FjaGUgKi8KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGZwdV9pbml0KHZvaWQpCit7CisJLyogRGlzYWJsZSB0aGUgRlBVICovCisJaWYgKGZwdV9kaXNhYmxlZCAmJiAoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkgeworCQlwcmludGsoIkZQVSBEaXNhYmxlZFxuIik7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRlBVOworCX0KKworCWRpc2FibGVfZnB1KCk7CisJY2xlYXJfdXNlZF9tYXRoKCk7Cit9CisKICNpZmRlZiBDT05GSUdfU0hfRFNQCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVsZWFzZV9kc3Aodm9pZCkKIHsKQEAgLTI0NCwyOCArMjY2LDM1IEBACiAJaWYgKHNyICYgU1JfRFNQKQogCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRFNQOwogCisJLyogRGlzYWJsZSB0aGUgRFNQICovCisJaWYgKGRzcF9kaXNhYmxlZCAmJiAoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRFNQKSkgeworCQlwcmludGsoIkRTUCBEaXNhYmxlZFxuIik7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRFNQOworCX0KKwogCS8qIE5vdyB0aGF0IHdlJ3ZlIGRldGVybWluZWQgdGhlIERTUCBzdGF0dXMsIGNsZWFyIHRoZSBEU1AgYml0LiAqLwogCXJlbGVhc2VfZHNwKCk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBkc3BfaW5pdCh2b2lkKSB7IH0KICNlbmRpZiAvKiBDT05GSUdfU0hfRFNQICovCiAKIC8qKgogICogc2hfY3B1X2luaXQKICAqCi0gKiBUaGlzIGlzIG91ciBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBlYWNoIENQVSwgYW5kIGlzIGludm9rZWQgb24gdGhlIGJvb3QKLSAqIENQVSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0X2tlcm5lbCgpLiBGb3IgU01QLCBhIGNvbWJpbmF0aW9uIG9mIHRoaXMgYW5kCi0gKiBzdGFydF9zZWNvbmRhcnkoKSB3aWxsIGJyaW5nIHVwIGVhY2ggcHJvY2Vzc29yIHRvIGEgcmVhZHkgc3RhdGUgcHJpb3IKLSAqIHRvIGhhbmQgZm9ya2luZyB0aGUgaWRsZSBsb29wLgorICogVGhpcyBpcyBvdXIgaW5pdGlhbCBlbnRyeSBwb2ludCBmb3IgZWFjaCBDUFUsIGFuZCBpcyBpbnZva2VkIG9uIHRoZQorICogYm9vdCBDUFUgcHJpb3IgdG8gY2FsbGluZyBzdGFydF9rZXJuZWwoKS4gRm9yIFNNUCwgYSBjb21iaW5hdGlvbiBvZgorICogdGhpcyBhbmQgc3RhcnRfc2Vjb25kYXJ5KCkgd2lsbCBicmluZyB1cCBlYWNoIHByb2Nlc3NvciB0byBhIHJlYWR5CisgKiBzdGF0ZSBwcmlvciB0byBoYW5kIGZvcmtpbmcgdGhlIGlkbGUgbG9vcC4KICAqCi0gKiBXZSBkbyBhbGwgb2YgdGhlIGJhc2ljIHByb2Nlc3NvciBpbml0IGhlcmUsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHRoZQotICogY2FjaGVzLCBGUFUsIERTUCwga2lja2luZyB0aGUgVUJDLCBldGMuIEJ5IHRoZSB0aW1lIHN0YXJ0X2tlcm5lbCgpIGlzCi0gKiBoaXQgKGFuZCBzdWJzZXF1ZW50bHkgcGxhdGZvcm1fc2V0dXAoKSkgdGhpbmdzIGxpa2UgZGV0ZXJtaW5pbmcgdGhlCi0gKiBDUFUgc3VidHlwZSBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIHdpbGwgYWxsIGJlIGRvbmUuCisgKiBXZSBkbyBhbGwgb2YgdGhlIGJhc2ljIHByb2Nlc3NvciBpbml0IGhlcmUsIGluY2x1ZGluZyBzZXR0aW5nIHVwCisgKiB0aGUgY2FjaGVzLCBGUFUsIERTUCwgZXRjLiBCeSB0aGUgdGltZSBzdGFydF9rZXJuZWwoKSBpcyBoaXQgKGFuZAorICogc3Vic2VxdWVudGx5IHBsYXRmb3JtX3NldHVwKCkpIHRoaW5ncyBsaWtlIGRldGVybWluaW5nIHRoZSBDUFUKKyAqIHN1YnR5cGUgYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbiB3aWxsIGFsbCBiZSBkb25lLgogICoKICAqIEVhY2ggcHJvY2Vzc29yIGZhbWlseSBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgZG9pbmcgaXRzIG93biBwcm9iaW5nCiAgKiBhbmQgY2FjaGUgY29uZmlndXJhdGlvbiBpbiBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0oKS4KICAqLwotCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHNoX2NwdV9pbml0KHZvaWQpCiB7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTMwMiwxOCArMzMxLDggQEAKIAkJZGV0ZWN0X2NhY2hlX3NoYXBlKCk7CiAJfQogCi0JLyogRGlzYWJsZSB0aGUgRlBVICovCi0JaWYgKGZwdV9kaXNhYmxlZCkgewotCQlwcmludGsoIkZQVSBEaXNhYmxlZFxuIik7Ci0JCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRlBVOwotCX0KLQotCS8qIEZQVSBpbml0aWFsaXphdGlvbiAqLwotCWRpc2FibGVfZnB1KCk7Ci0JaWYgKChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKSB7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19VU0VERlBVOwotCQljbGVhcl91c2VkX21hdGgoKTsKLQl9CisJZnB1X2luaXQoKTsKKwlkc3BfaW5pdCgpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBwZXItQ1BVIEFTSUQgY2FjaGUgdmVyeSBlYXJseSwgc2luY2UgdGhlCkBAIC0zMjEsMTggKzM0MCwyNCBAQAogCSAqLwogCWN1cnJlbnRfY3B1X2RhdGEuYXNpZF9jYWNoZSA9IE5PX0NPTlRFWFQ7CiAKLSNpZmRlZiBDT05GSUdfU0hfRFNQCi0JLyogUHJvYmUgZm9yIERTUCAqLwotCWRzcF9pbml0KCk7Ci0KLQkvKiBEaXNhYmxlIHRoZSBEU1AgKi8KLQlpZiAoZHNwX2Rpc2FibGVkKSB7Ci0JCXByaW50aygiRFNQIERpc2FibGVkXG4iKTsKLQkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19EU1A7Ci0JCXJlbGVhc2VfZHNwKCk7Ci0JfQotI2VuZGlmCi0KIAlzcGVjdWxhdGl2ZV9leGVjdXRpb25faW5pdCgpOwogCWV4cG1hc2tfaW5pdCgpOworCisJLyogRG8gdGhlIHJlc3Qgb2YgdGhlIGJvb3QgcHJvY2Vzc29yIHNldHVwICovCisJaWYgKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkgeworCQkvKiBTYXZlIG9mZiB0aGUgQklPUyBWQlIsIGlmIHRoZXJlIGlzIG9uZSAqLworCQlzaF9iaW9zX3Zicl9pbml0KCk7CisKKwkJLyoKKwkJICogU2V0dXAgVkJSIGZvciBib290IENQVS4gU2Vjb25kYXJ5IENQVXMgZG8gdGhpcyB0aHJvdWdoCisJCSAqIHN0YXJ0X3NlY29uZGFyeSgpLgorCQkgKi8KKwkJcGVyX2NwdV90cmFwX2luaXQoKTsKKworCQkvKgorCQkgKiBCb290IHByb2Nlc3NvciB0byBzZXR1cCB0aGUgRlAgYW5kIGV4dGVuZGVkIHN0YXRlCisJCSAqIGNvbnRleHQgaW5mby4KKwkJICovCisJCWluaXRfdGhyZWFkX3hzdGF0ZSgpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwppbmRleCAwNmU3ZTI5Li45NmEyMzk1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJYml0bWFzayA9IDEgPDwgKGlycSAtIDMyKTsKIAl9CiAKLQljdHJsX291dGwoYml0bWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwoYml0bWFzaywgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9pbnRjX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCWJpdG1hc2sgPSAxIDw8IChpcnEgLSAzMik7CiAJfQogCi0JY3RybF9vdXRsKGJpdG1hc2ssIHJlZyk7CisJX19yYXdfd3JpdGVsKGJpdG1hc2ssIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19pbnRjKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xNzAsMTEgKzE3MCwxMSBAQAogCiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBzZXQgYWxsIHByaW9yaXRpZXMgdG8gMCB0byBhdm9pZCB0cm91YmxlICovCi0JY3RybF9vdXRsKC0xLCBJTlRDX0lOVERTQl8wKTsKLQljdHJsX291dGwoLTEsIElOVENfSU5URFNCXzEpOworCV9fcmF3X3dyaXRlbCgtMSwgSU5UQ19JTlREU0JfMCk7CisJX19yYXdfd3JpdGVsKC0xLCBJTlRDX0lOVERTQl8xKTsKIAogCWZvciAocmVnID0gSU5UQ19JTlRQUklfMCwgaSA9IDA7IGkgPCBJTlRDX0lOVFBSSV9QUkVHUzsgaSsrLCByZWcgKz0gOCkKLQkJY3RybF9vdXRsKCBOT19QUklPUklUWSwgcmVnKTsKKwkJX19yYXdfd3JpdGVsKCBOT19QUklPUklUWSwgcmVnKTsKIAogCiAjaWZkZWYgQ09ORklHX1NIX0NBWU1BTgpAQCAtMTk5LDcgKzE5OSw3IEBACiAJCQlyZWcgPSBJTlRDX0lDUl9TRVQ7CiAJCQlpID0gSVJRX0lSTDA7CiAJCX0KLQkJY3RybF9vdXRsKElOVENfSUNSX0lSTE0sIHJlZyk7CisJCV9fcmF3X3dyaXRlbChJTlRDX0lDUl9JUkxNLCByZWcpOwogCiAJCS8qIFNldCBpbnRlcnJ1cHQgcHJpb3JpdGllcyBhY2NvcmRpbmcgdG8gcGxhdGZvcm0gZGVzY3JpcHRpb24gKi8KIAkJZm9yIChkYXRhID0gMCwgcmVnID0gSU5UQ19JTlRQUklfMDsgaSA8IE5SX0lOVENfSVJRUzsgaSsrKSB7CkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJCQkoKGkgJSBJTlRDX0lOVFBSSV9QUFJFRykgKiA0KTsKIAkJCWlmICgoaSAlIElOVENfSU5UUFJJX1BQUkVHKSA9PSAoSU5UQ19JTlRQUklfUFBSRUcgLSAxKSkgewogCQkJCS8qIFVwb24gdGhlIDd0aCwgc2V0IFByaW9yaXR5IFJlZ2lzdGVyICovCi0JCQkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHJlZyk7CiAJCQkJZGF0YSA9IDA7CiAJCQkJcmVnICs9IDg7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYwppbmRleCA0ZmU4NjMxLi4wYzlmMjRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gUExMMiAqIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgN107CisJY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NjE5X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDddOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc2MTlfYnVzX2Nsa19vcHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jCmluZGV4IDc4MTRjNzYuLmIyNjI2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JcmV0dXJuIDEwMDAwMDAwICogUExMMiAqIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwlyZXR1cm4gMTAwMDAwMDAgKiBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjAxX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDMsNyArNDMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Myw3ICs1Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW53KEZSRVFDUikgPj4gNCkgJiAweDAwMDcpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gNCkgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jCmluZGV4IDk0MDk4NjkuLjdlNzVkOGY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwM10gKiBQTEwyIDsKKwljbGstPnJhdGUgKj0gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogUExMMiA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDNfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4LTJdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCmluZGV4IGMyMjY4YmQuLmIyN2E1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfYnVzX2Nsa19vcHMgPSB7CkBAIC02Miw3ICs2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKaW5kZXggZDM5NWNlNS4uNDg4ZDI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKQEAgLTI2LDggKzI2LDcgQEAKIC8qCiAgKiBTYXZlIEZQVSByZWdpc3RlcnMgb250byB0YXNrIHN0cnVjdHVyZS4KICAqLwotdm9pZAotc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTUyLDcgKzUxLDcgQEAKIAkJICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgImxkcwklMywgZnBzY3Jcblx0IgogCQkgICAgIDogIj1yIiAoZHVtbXkpCi0JCSAgICAgOiAiMCIgKChjaGFyICopKCZ0c2stPnRocmVhZC5mcHUuaGFyZC5zdGF0dXMpKSwKKwkJICAgICA6ICIwIiAoKGNoYXIgKikoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5zdGF0dXMpKSwKIAkJICAgICAgICJyIiAoRlBTQ1JfUkNIRyksCiAJCSAgICAgICAiciIgKEZQU0NSX0lOSVQpCiAJCSAgICAgOiAibWVtb3J5Iik7CkBAIC02MCw4ICs1OSw3IEBACiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC04NSw0NSArODMsMTIgQEAKIAkJICAgICAibGRzLmwJQCUwKywgZnBzY3Jcblx0IgogCQkgICAgICJsZHMubAlAJTArLCBmcHVsXG5cdCIKIAkJICAgICA6ICI9ciIgKGR1bW15KQotCQkgICAgIDogIjAiICgmdHNrLT50aHJlYWQuZnB1KSwgInIiIChGUFNDUl9SQ0hHKQorCQkgICAgIDogIjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAogLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzc2lvbiByZXByZXNlbnRzIHNpZ25hbGluZyBOQU5TLgotICovCi0KLXN0YXRpYyB2b2lkCi1mcHVfaW5pdCh2b2lkKQotewotCWVuYWJsZV9mcHUoKTsKLQlhc20gdm9sYXRpbGUoImxkcwklMCwgZnB1bFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI2XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI5XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEyXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE1XG5cdCIKLQkJICAgICAibGRzCSUyLCBmcHNjclxuXHQiCi0JCSAgICAgOiAvKiBubyBvdXRwdXQgKi8KLQkJICAgICA6ICJyIiAoMCksICJyIiAoRlBTQ1JfUkNIRyksICJyIiAoRlBTQ1JfSU5JVCkpOwotCWRpc2FibGVfZnB1KCk7Ci19Ci0KLS8qCiAgKglFbXVsYXRlIGFyaXRobWV0aWMgb3BzIG9uIGRlbm9ybWFsaXplZCBudW1iZXIgZm9yIHNvbWUgRlBVIGluc25zLgogICovCiAKQEAgLTQ5MCw5ICs0NTUsOSBAQAogCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpKSB7CisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKSkgewogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgIChmaW5zbiA+PiA4KSAmIDB4Zik7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CkBAIC01MDcsOSArNDcyLDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmICgxIDw8IDE5KTsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQpAQCAtNTE5LDE1ICs0ODQsMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKSBoeCA8PCAzMikKLQkJCSAgICAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXTsKKwkJCSAgICAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZykgaHkgPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttKzFdOwogCQkJaWYgKChoeCAmIDB4N2ZmZmZmZmYpID49IDB4MDAxMDAwMDApCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHksIGxseCk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHgsIGxseSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuKzFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQogCQkgICAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJICAgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKQEAgLTUzNiw3ICs1MDEsNyBAQAogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeSwgaHgpOwogCQkJZWxzZQogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNTUwLDkgKzUxNSw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiAoMSA8PCAxOSk7CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKQEAgLTU2MiwxNSArNTI3LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZykgaHggPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpIGh5IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSsxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5KTsKIAkJCWVsc2UKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5IF4gKDFMTCA8PCA2MykpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKIAkJICAgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCSAgIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC01NzksNyArNTQ0LDcgQEAKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5KTsKIAkJCWVsc2UKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5IF4gMHg4MDAwMDAwMCk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC01OTcsNyArNTYyLDcgQEAKIAogCV9fdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCWlmIChpZWVlX2ZwZV9oYW5kbGVyKHJlZ3MpKSB7Ci0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmPQogCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CkBAIC02MDcsMzMgKzU3MiwzIEBACiAKIAlmb3JjZV9zaWcoU0lHRlBFLCB0c2spOwogfQotCi12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCWdyYWJfZnB1KHJlZ3MpOwotCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlrZWx5KHVzZWRfbWF0aCgpKSkgewotCQkvKiBVc2luZyB0aGUgRlBVIGFnYWluLiAgKi8KLQkJcmVzdG9yZV9mcHUodHNrKTsKLQl9IGVsc2UJewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnB1X2luaXQoKTsKLQkJc2V0X3VzZWRfbWF0aCgpOwotCX0KLQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwotCXRzay0+ZnB1X2NvdW50ZXIrKzsKLX0KLQotQlVJTERfVFJBUF9IQU5ETEVSKGZwdV9zdGF0ZV9yZXN0b3JlKQotewotCVRSQVBfSEFORExFUl9ERUNMOwotCi0JZnB1X3N0YXRlX3Jlc3RvcmUocmVncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYwppbmRleCAyN2I4NzM4Li5iNzgzODRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKQEAgLTY0LDcgKzY0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDQwMDApID4+IDEyKSB8ICgoZnJxY3IgJiAweDAwMGMpID4+IDIpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYwppbmRleCAwY2E4ZjJjLi4wZWNlYTE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA1X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwMzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDAzOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01MSw3ICs1MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMzApID4+IDQ7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMzApID4+IDQ7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCmluZGV4IDRiZjc4ODcuLjZmOWZmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDYuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg4MDAwKSA+PiAxMykgfCAoKGZycWNyICYgMHgwMDMwKSA+PiA0KTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHN0Y19tdWx0aXBsaWVyc1tpZHhdOwpAQCAtNjAsNyArNjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCmluZGV4IGU4NzQ5NTAuLmYzMDJiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDkuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAwODApID8KIAkJKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCkgOiAxOwogCkBAIC02MSw3ICs2MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMKaW5kZXggMDMwYTU4Yi4uMjlhODdkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IG1kX3RhYmxlW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IG1kX3RhYmxlW19fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MTBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCmluZGV4IDY0MjhlZTZjLi5iMGQwYzUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAzMDApID4+IDg7CiAKIAljbGstPnJhdGUgKj0gbXVsdGlwbGllcnNbaWR4XTsKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IGZycWNyICYgMHgwMDA3OwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZGl2aXNvcnNbaWR4XTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IChmcnFjciAmIDB4MDAzMCkgPj4gNDsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKaW5kZXggNDY2MTBjMy4uOTliNGQwMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwpAQCAtNDksNyArNDksNyBAQAogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIHJlc2VydmVkX2luc3RydWN0aW9uIChmaWxsZWQgYnkgdHJhcF9pbml0KSAvKiAxODAgKi8KIAkubG9uZwlleGNlcHRpb25fZXJyb3IJISBpbGxlZ2FsX3Nsb3RfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qMUEwKi8KIAkubG9uZwlubWlfdHJhcF9oYW5kbGVyCS8qIDFDMCAqLwkhIEFsbG93IHRyYXAgdG8gZGVidWdnZXIKLQkubG9uZwlicmVha19wb2ludF90cmFwCS8qIDFFMCAqLworCS5sb25nCWJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyCS8qIDFFMCAqLwogCiAJLyoKIAkgKiBQYWQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGFibGUgb3V0LCBleGNlcHRpb25zIHJlc2lkaW5nIGluIGZhcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCmluZGV4IGY5YzdkZjYuLjI5NWVjNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGRldGVjdF9jcHVfYW5kX2NhY2hlX3N5c3RlbSh2b2lkKQoraW50IGRldGVjdF9jcHVfYW5kX2NhY2hlX3N5c3RlbSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjAsIGFkZHIxLCBkYXRhMCwgZGF0YTEsIGRhdGEyLCBkYXRhMzsKIApAQCAtMzAsMjMgKzMwLDIzIEBACiAJYWRkcjEgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZICsgKDEgPDwgMTIpOwogCiAJLyogRmlyc3QsIHdyaXRlIGJhY2sgJiBpbnZhbGlkYXRlICovCi0JZGF0YTAgID0gY3RybF9pbmwoYWRkcjApOwotCWN0cmxfb3V0bChkYXRhMCZ+KFNIX0NBQ0hFX1ZBTElEfFNIX0NBQ0hFX1VQREFURUQpLCBhZGRyMCk7Ci0JZGF0YTEgID0gY3RybF9pbmwoYWRkcjEpOwotCWN0cmxfb3V0bChkYXRhMSZ+KFNIX0NBQ0hFX1ZBTElEfFNIX0NBQ0hFX1VQREFURUQpLCBhZGRyMSk7CisJZGF0YTAgID0gX19yYXdfcmVhZGwoYWRkcjApOworCV9fcmF3X3dyaXRlbChkYXRhMCZ+KFNIX0NBQ0hFX1ZBTElEfFNIX0NBQ0hFX1VQREFURUQpLCBhZGRyMCk7CisJZGF0YTEgID0gX19yYXdfcmVhZGwoYWRkcjEpOworCV9fcmF3X3dyaXRlbChkYXRhMSZ+KFNIX0NBQ0hFX1ZBTElEfFNIX0NBQ0hFX1VQREFURUQpLCBhZGRyMSk7CiAKIAkvKiBOZXh0LCBjaGVjayBpZiB0aGVyZSdzIHNoYWRvdyBvciBub3QgKi8KLQlkYXRhMCA9IGN0cmxfaW5sKGFkZHIwKTsKKwlkYXRhMCA9IF9fcmF3X3JlYWRsKGFkZHIwKTsKIAlkYXRhMCBePSBTSF9DQUNIRV9WQUxJRDsKLQljdHJsX291dGwoZGF0YTAsIGFkZHIwKTsKLQlkYXRhMSA9IGN0cmxfaW5sKGFkZHIxKTsKKwlfX3Jhd193cml0ZWwoZGF0YTAsIGFkZHIwKTsKKwlkYXRhMSA9IF9fcmF3X3JlYWRsKGFkZHIxKTsKIAlkYXRhMiA9IGRhdGExIF4gU0hfQ0FDSEVfVkFMSUQ7Ci0JY3RybF9vdXRsKGRhdGEyLCBhZGRyMSk7Ci0JZGF0YTMgPSBjdHJsX2lubChhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEyLCBhZGRyMSk7CisJZGF0YTMgPSBfX3Jhd19yZWFkbChhZGRyMCk7CiAKIAkvKiBMYXN0bHksIGludmFsaWF0ZSB0aGVtLiAqLwotCWN0cmxfb3V0bChkYXRhMCZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIwKTsKLQljdHJsX291dGwoZGF0YTImflNIX0NBQ0hFX1ZBTElELCBhZGRyMSk7CisJX19yYXdfd3JpdGVsKGRhdGEwJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjApOworCV9fcmF3X3dyaXRlbChkYXRhMiZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIxKTsKIAogCWJhY2tfdG9fY2FjaGVkKCk7CiAKQEAgLTk0LDkgKzk0LDkgQEAKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMyk7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2sJPSAweDFmZjA7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLnNldHMJPSA1MTI7Ci0JCWN0cmxfb3V0bChDQ1JfQ0FDSEVfMzJLQiwgQ0NSM19SRUcpOworCQlfX3Jhd193cml0ZWwoQ0NSX0NBQ0hFXzMyS0IsIENDUjNfUkVHKTsKICNlbHNlCi0JCWN0cmxfb3V0bChDQ1JfQ0FDSEVfMTZLQiwgQ0NSM19SRUcpOworCQlfX3Jhd193cml0ZWwoQ0NSX0NBQ0hFXzE2S0IsIENDUjNfUkVHKTsKICNlbmRpZgogI2VuZGlmCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMKaW5kZXggYzk4ODQ2OC4uNTNiZTcwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jCkBAIC01OCw3ICs1OCw3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQogewogCWlmIChtb2RlID09IElSUV9NT0RFX0lSUSkgewotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IxKSAmIH5JTlRDX0lDUjFfSVJRTFZMLCBJTlRDX0lDUjEpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IxKSAmIH5JTlRDX0lDUjFfSVJRTFZMLCBJTlRDX0lDUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEwMTIzKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LTIwMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMKaW5kZXggMjE0MjFlMy4uNmI4MDg1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZW1pX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSBjdHJsX2lubChDUEcyX0ZSUUNSMykgJiAweDAwMDc7CisJaW50IGlkeCA9IF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmZW1pX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbmwoQ1BHMl9GUlFDUjMpID4+IDMpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpID4+IDMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1tpZHhdOwogfQogCkBAIC05Miw3ICs5Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNob2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChDUEcyX0ZSUUNSMykgPj4gNikgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMykgPj4gNikgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTEyMiwxMCArMTIyLDEwIEBACiAKIAl0bXAgPSBmcnFjcjNfbG9va3VwKGNsaywgcmF0ZSk7CiAKLQlmcnFjcjMgPSBjdHJsX2lubChDUEcyX0ZSUUNSMyk7CisJZnJxY3IzID0gX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpOwogCWZycWNyMyAmPSB+KDB4MDAwNyA8PCA2KTsKIAlmcnFjcjMgfD0gdG1wIDw8IDY7Ci0JY3RybF9vdXRsKGZycWNyMywgQ1BHMl9GUlFDUjMpOworCV9fcmF3X3dyaXRlbChmcnFjcjMsIENQRzJfRlJRQ1IzKTsKIAogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW3RtcF07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCmluZGV4IDczMjk0ZDkuLjVhZGQ3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYwpAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3XTsKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW19fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDRfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zNyw3ICszNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSA+PiAzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSA+PiAzKSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTcsNyArNTcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgPj4gNikgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgPj4gNikgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCmluZGV4IGU5Nzg1N2EuLjQ0NzQ4MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYwpAQCAtODUsMTQgKzg1LDE0IEBACiAJCSAgICAgICJmbW92LnMJZnIxLCBALSUwXG5cdCIKIAkJICAgICAgImZtb3YucwlmcjAsIEAtJTBcblx0IgogCQkgICAgICAibGRzCSUzLCBmcHNjclxuXHQiOiI9ciIgKGR1bW15KQotCQkgICAgICA6IjAiKChjaGFyICopKCZ0c2stPnRocmVhZC5mcHUuaGFyZC5zdGF0dXMpKSwKKwkJICAgICAgOiIwIigoY2hhciAqKSgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LnN0YXR1cykpLAogCQkgICAgICAiciIoRlBTQ1JfUkNIRyksICJyIihGUFNDUl9JTklUKQogCQkgICAgICA6Im1lbW9yeSIpOwogCiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotc3RhdGljIHZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTEzNSw2MiArMTM1LDExIEBACiAJCSAgICAgICJsZHMubAlAJTArLCBmcHNjclxuXHQiCiAJCSAgICAgICJsZHMubAlAJTArLCBmcHVsXG5cdCIKIAkJICAgICAgOiI9ciIgKGR1bW15KQotCQkgICAgICA6IjAiKCZ0c2stPnRocmVhZC5mcHUpLCAiciIoRlBTQ1JfUkNIRykKKwkJICAgICAgOiIwIiAodHNrLT50aHJlYWQueHN0YXRlKSwgInIiIChGUFNDUl9SQ0hHKQogCQkgICAgICA6Im1lbW9yeSIpOwogCWRpc2FibGVfZnB1KCk7CiB9CiAKLS8qCi0gKiBMb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuIHdlJ3JlIHVzaW5nCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdldGhlciBjb25zaWRlcmVkIGFzIHNpbmdsZSBvciBhcwotICogZG91YmxlIHByZWNpc2lvbiByZXByZXNlbnRzIHNpZ25hbGluZyBOQU5TLgotICovCi0KLXN0YXRpYyB2b2lkIGZwdV9pbml0KHZvaWQpCi17Ci0JZW5hYmxlX2ZwdSgpOwotCWFzbSB2b2xhdGlsZSAoCSJsZHMJJTAsIGZwdWxcblx0IgotCQkJImxkcwklMSwgZnBzY3Jcblx0IgotCQkJImZzdHMJZnB1bCwgZnIwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjVcblx0IgotCQkJImZzdHMJZnB1bCwgZnI2XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyN1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjhcblx0IgotCQkJImZzdHMJZnB1bCwgZnI5XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTNcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE1XG5cdCIKLQkJCSJmcmNoZ1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjNcblx0IgotCQkJImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjZcblx0IgotCQkJImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjlcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTVcblx0IgotCQkJImZyY2hnXG5cdCIKLQkJCSJsZHMJJTIsIGZwc2NyXG5cdCIKLQkJCToJLyogbm8gb3V0cHV0ICovCi0JCQk6InIiICgwKSwgInIiKEZQU0NSX1JDSEcpLCAiciIoRlBTQ1JfSU5JVCkpOwotCWRpc2FibGVfZnB1KCk7Ci19Ci0KIC8qKgogICogICAgICBkZW5vcm1hbF90b19kb3VibGUgLSBHaXZlbiBkZW5vcm1hbGl6ZWQgZmxvYXQgbnVtYmVyLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3VibGUgZmxvYXQKQEAgLTI4Miw5ICsyMzEsOSBAQAogCQkvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikpCisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpKQogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUoJnRzay0+dGhyZWFkLmZwdS5oYXJkLAorCQkJZGVub3JtYWxfdG9fZG91YmxlKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkJCSAgIChmaW5zbiA+PiA4KSAmIDB4Zik7CiAJCWVsc2UKIAkJCXJldHVybiAwOwpAQCAtMzAwLDkgKzI0OSw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiBGUFNDUl9EQkxfUFJFQ0lTSU9OOwogCiAJCWlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKQEAgLTMxMiwxOCArMjYxLDE4IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChkb3VibGVzKSAqLwogCQkJbGx4ID0gKChsb25nIGxvbmcpaHggPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXTsKIAkJCWxseSA9ICgobG9uZyBsb25nKWh5IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttICsgMV07CiAJCQlsbHggPSBmbG9hdDY0X211bChsbHgsIGxseSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQogCQkJICAgJiYgKCFwcmVjICYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDAKIAkJCQkJIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZmxvYXRzKSAqLwogCQkJaHggPSBmbG9hdDMyX211bChoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtMzM4LDkgKzI4Nyw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiBGUFNDUl9EQkxfUFJFQ0lTSU9OOwogCiAJCWlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKQEAgLTM1MCwxNSArMjk5LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChkb3VibGVzKSAqLwogCQkJbGx4ID0gKChsb25nIGxvbmcpaHggPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXTsKIAkJCWxseSA9ICgobG9uZyBsb25nKWh5IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttICsgMV07CiAJCQlpZiAoKGZpbnNuICYgMHhmMDBmKSA9PSAweGYwMDApCiAJCQkJbGx4ID0gZmxvYXQ2NF9hZGQobGx4LCBsbHkpOwogCQkJZWxzZQogCQkJCWxseCA9IGZsb2F0NjRfc3ViKGxseCwgbGx5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKQEAgLTM2Nyw3ICszMTYsNyBAQAogCQkJCWh4ID0gZmxvYXQzMl9hZGQoaHgsIGh5KTsKIAkJCWVsc2UKIAkJCQloeCA9IGZsb2F0MzJfc3ViKGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC0zODIsOSArMzMxLDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzk0LDIwICszNDMsMjAgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAogCQkJbGx4ID0gZmxvYXQ2NF9kaXYobGx4LCBsbHkpOwogCi0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQogCQkJICAgJiYgKCFwcmVjICYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDAKIAkJCQkJIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZmxvYXRzKSAqLwogCQkJaHggPSBmbG9hdDMyX2RpdihoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNDIwLDE3ICszNjksMTcgQEAKIAkJdW5zaWduZWQgaW50IGh4OwogCiAJCW0gPSAoZmluc24gPj4gOCkgJiAweDc7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKIAotCQlpZiAoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwMTAwMDAwKSkgewogCQkJLyogc3Vibm9ybWFsIGRvdWJsZSB0byBmbG9hdCBjb252ZXJzaW9uICovCiAJCQlsb25nIGxvbmcgbGx4OwogCi0JCQlsbHggPSAoKGxvbmcgbG9uZyl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dIDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttICsgMV07CisJCQlsbHggPSAoKGxvbmcgbG9uZyl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXSA8PCAzMikKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwdWwgPSBmbG9hdDY0X3RvX2Zsb2F0MzIobGx4KTsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNDQ5LDcgKzM5OCw3IEBACiBpbnQgZmxvYXRfcm91bmRpbmdfbW9kZSh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlpbnQgcm91bmRpbmdNb2RlID0gRlBTQ1JfUk9VTkRJTkdfTU9ERSh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcik7CisJaW50IHJvdW5kaW5nTW9kZSA9IEZQU0NSX1JPVU5ESU5HX01PREUodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyKTsKIAlyZXR1cm4gcm91bmRpbmdNb2RlOwogfQogCkBAIC00NjEsMTYgKzQxMCwxNiBAQAogCV9fdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCWZwdV9leGNlcHRpb25fZmxhZ3MgPSAwOwogCWlmIChpZWVlX2ZwZV9oYW5kbGVyKHJlZ3MpKSB7Ci0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmPQogCQkgICAgfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKLQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgfD0gZnB1X2V4Y2VwdGlvbl9mbGFnczsKKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyIHw9IGZwdV9leGNlcHRpb25fZmxhZ3M7CiAJCS8qIFNldCB0aGUgRlBTQ1IgZmxhZyBhcyB3ZWxsIGFzIGNhdXNlIGJpdHMgLSBzaW1wbHkKIAkJICogcmVwbGljYXRlIHRoZSBjYXVzZSAqLwotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciB8PSAoZnB1X2V4Y2VwdGlvbl9mbGFncyA+PiAxMCk7CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciB8PSAoZnB1X2V4Y2VwdGlvbl9mbGFncyA+PiAxMCk7CiAJCWdyYWJfZnB1KHJlZ3MpOwogCQlyZXN0b3JlX2ZwdSh0c2spOwogCQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwotCQlpZiAoKCgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9FTkFCTEVfTUFTSykgPj4gNykgJgorCQlpZiAoKCgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfRU5BQkxFX01BU0spID4+IDcpICYKIAkJICAgICAoZnB1X2V4Y2VwdGlvbl9mbGFncyA+PiAyKSkgPT0gMCkgewogCQkJcmV0dXJuOwogCQl9CkBAIC00NzgsMzMgKzQyNywzIEBACiAKIAlmb3JjZV9zaWcoU0lHRlBFLCB0c2spOwogfQotCi12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCWdyYWJfZnB1KHJlZ3MpOwotCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlrZWx5KHVzZWRfbWF0aCgpKSkgewotCQkvKiBVc2luZyB0aGUgRlBVIGFnYWluLiAgKi8KLQkJcmVzdG9yZV9mcHUodHNrKTsKLQl9IGVsc2UgewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnB1X2luaXQoKTsKLQkJc2V0X3VzZWRfbWF0aCgpOwotCX0KLQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwotCXRzay0+ZnB1X2NvdW50ZXIrKzsKLX0KLQotQlVJTERfVFJBUF9IQU5ETEVSKGZwdV9zdGF0ZV9yZXN0b3JlKQotewotCVRSQVBfSEFORExFUl9ERUNMOwotCi0JZnB1X3N0YXRlX3Jlc3RvcmUocmVncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggZDM2ZjBjNDUuLjgyMjk3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKQEAgLTI4LDkgKzI4LDkgQEAKIAkJWzldID0gKDEgPDwgMTYpCiAJfTsKIAotCXB2ciA9IChjdHJsX2lubChDQ05fUFZSKSA+PiA4KSAmIDB4ZmZmZmZmOwotCXByciA9IChjdHJsX2lubChDQ05fUFJSKSA+PiA0KSAmIDB4ZmY7Ci0JY3ZyID0gKGN0cmxfaW5sKENDTl9DVlIpKTsKKwlwdnIgPSAoX19yYXdfcmVhZGwoQ0NOX1BWUikgPj4gOCkgJiAweGZmZmZmZjsKKwlwcnIgPSAoX19yYXdfcmVhZGwoQ0NOX1BSUikgPj4gNCkgJiAweGZmOworCWN2ciA9IChfX3Jhd19yZWFkbChDQ05fQ1ZSKSk7CiAKIAkvKgogCSAqIFNldHVwIHNvbWUgc2FuZSBTSC00IGRlZmF1bHRzIGZvciB0aGUgaWNhY2hlCkBAIC03MSwxMSArNzEsMTEgQEAKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CiAJfSBlbHNlIHsKIAkJLyogQW5kIHNvbWUgU0gtNCBkZWZhdWx0cy4uICovCi0JCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19QVEVBOworCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQSB8IENQVV9IQVNfRlBVOwogCQlib290X2NwdV9kYXRhLmZhbWlseSA9IENQVV9GQU1JTFlfU0g0OwogCX0KIAotCS8qIEZQVSBkZXRlY3Rpb24gd29ya3MgZm9yIGV2ZXJ5b25lICovCisJLyogRlBVIGRldGVjdGlvbiB3b3JrcyBmb3IgYWxtb3N0IGV2ZXJ5b25lICovCiAJaWYgKChjdnIgJiAweDIwMDAwMDAwKSkKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIApAQCAtMTI0LDYgKzEyNCw3IEBACiAJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3ODU7CiAJCWJyZWFrOwogCWNhc2UgMHg0MDA0OgorCWNhc2UgMHg0MDA1OgogCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg2OwogCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQUVYIHwgQ1BVX0hBU19MMl9DQUNIRTsKIAkJYnJlYWs7CkBAIC0xNjAsNiArMTYxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDcwMDoKIAkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINF81MDE7CisJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRlBVOwogCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gMjsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDI7CiAJCWJyZWFrOwpAQCAtMjI3LDcgKzIyOSw3IEBACiAJCQkgKiBTaXplIGNhbGN1bGF0aW9uIGlzIG11Y2ggbW9yZSBzZW5zaWJsZQogCQkJICogdGhhbiBpdCBpcyBmb3IgdGhlIEwxLgogCQkJICoKLQkJCSAqIFNpemVzIGFyZSAxMjhLQiwgMjU4S0IsIDUxMktCLCBhbmQgMU1CLgorCQkJICogU2l6ZXMgYXJlIDEyOEtCLCAyNTZLQiwgNTEyS0IsIGFuZCAxTUIuCiAJCQkgKi8KIAkJCXNpemUgPSAoY3ZyICYgMHhmKSA8PCAxNzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwppbmRleCA0YjczMzcxLi5iOWI3ZTEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6IC8qIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmxtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGIyYTlkZjEuLmZmZDc5ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTogLyogaW5kaXZpZHVhbCBpbnRlcnJ1cHQgbW9kZSBmb3IgSVJMMy0wICovCi0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybG0pOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKaW5kZXggNWI3NGNjMC4uYTE2ZWIzNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCkBAIC0zMTksNyArMzE5LDcgQEAKIHsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwppbmRleCA4YThhOTkzLi5mYzA2NWY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCkBAIC00Myw5ICs0Myw5IEBACiAKICNkZWZpbmUgc3RvcmVfcXVldWVfYmFycmllcigpCQkJXAogZG8gewkJCQkJCVwKLQkodm9pZCljdHJsX2lubChQNFNFR19TVE9SRV9RVUUpOwlcCi0JY3RybF9vdXRsKDAsIFA0U0VHX1NUT1JFX1FVRSArIDApOwlcCi0JY3RybF9vdXRsKDAsIFA0U0VHX1NUT1JFX1FVRSArIDgpOwlcCisJKHZvaWQpX19yYXdfcmVhZGwoUDRTRUdfU1RPUkVfUVVFKTsJXAorCV9fcmF3X3dyaXRlbCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsJXAorCV9fcmF3X3dyaXRlbCgwLCBQNFNFR19TVE9SRV9RVUUgKyA4KTsJXAogfSB3aGlsZSAoMCk7CiAKIC8qKgpAQCAtMTAwLDcgKzEwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZzcV9tYXBwaW5nX2xvY2spOwogfQogCi1zdGF0aWMgaW50IF9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBpbnQgX19zcV9yZW1hcChzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwLCBwZ3Byb3RfdCBwcm90KQogewogI2lmIGRlZmluZWQoQ09ORklHX01NVSkKIAlzdHJ1Y3Qgdm1fc3RydWN0ICp2bWE7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdm1hLT5hZGRyLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciArIG1hcC0+c2l6ZSwKLQkJCSAgICAgICB2bWEtPnBoeXNfYWRkciwgX19wZ3Byb3QoZmxhZ3MpKSkgeworCQkJICAgICAgIHZtYS0+cGh5c19hZGRyLCBwcm90KSkgewogCQl2dW5tYXAodm1hLT5hZGRyKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTIzLDggKzEyMyw4IEBACiAJICogc3RyYWlnaHRmb3J3YXJkLCBhcyB3ZSBjYW4ganVzdCBsb2FkIHVwIGVhY2ggcXVldWUncyBRQUNSIHdpdGgKIAkgKiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcHByb3ByaWF0ZWx5IG1hc2tlZC4KIAkgKi8KLQljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjApOwotCWN0cmxfb3V0bCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMSk7CisJX19yYXdfd3JpdGVsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IwKTsKKwlfX3Jhd193cml0ZWwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjEpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTEzNSwxNCArMTM1LDE0IEBACiAgKiBAcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiBtYXBwaW5nLgogICogQHNpemU6IExlbmd0aCBvZiBtYXBwaW5nLgogICogQG5hbWU6IFVzZXIgaW52b2tpbmcgbWFwcGluZy4KLSAqIEBmbGFnczogUHJvdGVjdGlvbiBmbGFncy4KKyAqIEBwcm90OiBQcm90ZWN0aW9uIGJpdHMuCiAgKgogICogUmVtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIEBwaHlzIHRocm91Z2ggdGhlIG5leHQgYXZhaWxhYmxlIHN0b3JlIHF1ZXVlCiAgKiBhZGRyZXNzIG9mIEBzaXplIGxlbmd0aC4gQG5hbWUgaXMgbG9nZ2VkIGF0IGJvb3QgdGltZSBhcyB3ZWxsIGFzIHRocm91Z2gKICAqIHRoZSBzeXNmcyBpbnRlcmZhY2UuCiAgKi8KIHVuc2lnbmVkIGxvbmcgc3FfcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBzcV9tYXBwaW5nICptYXA7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCW1hcC0+c3FfYWRkciA9IFA0U0VHX1NUT1JFX1FVRSArIChwYWdlIDw8IFBBR0VfU0hJRlQpOwogCi0JcmV0ID0gX19zcV9yZW1hcChtYXAsIHBncHJvdF92YWwoUEFHRV9LRVJORUxfTk9DQUNIRSkgfCBmbGFncyk7CisJcmV0ID0gX19zcV9yZW1hcChtYXAsIHByb3QpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDksOCArMzA5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAobGlrZWx5KGxlbikpIHsKLQkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsCi0JCQkJICAgcGdwcm90X3ZhbChQQUdFX1NIQVJFRCkpOworCQlpbnQgcmV0ID0gc3FfcmVtYXAoYmFzZSwgbGVuLCAiVXNlcnNwYWNlIiwgUEFHRV9TSEFSRUQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDMzYmFiNDcuLmIxNDRlOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC00MSw3ICs0MSw4IEBACiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBwaW5tdXgtc2g3Nzg1Lm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IHBpbm11eC1zaDc3ODYubwogCi1vYmoteQkJCQkrPSAkKGNsb2NrLXkpCi1vYmotJChDT05GSUdfU01QKQkJKz0gJChzbXAteSkKLW9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCi1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfZXZlbnQubworb2JqLXkJCQkJCSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19TTVApCQkJKz0gJChzbXAteSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCQkrPSAkKHBpbm11eC15KQorb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkJKz0gcGVyZl9ldmVudC5vCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSB1YmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwppbmRleCAwZWUzZWU4Li4yYzE2ZGYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwpAQCAtMTA3LDEzICsxMDcsMTcgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKIGVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCiAgICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfTlIgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwppbmRleCBhOTVlYmFiLi45MTU4OGQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwpAQCAtMTEwLDEzICsxMTAsMTcgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKIGVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCiAgICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfTlIgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYwppbmRleCBlYTM4YjU1Li4xNWRiNmQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYwpAQCAtMTEwLDE5ICsxMTAsMjIgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKLWVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCi0gICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfSVJEQSwgRElWNF9OUiB9Oworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKICAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCiAKK2VudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsIERJVjRfTlIgfTsKKwogc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CiAJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgRlJRQ1IsIDIwLCAweDFmZWYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfVV0gPSBESVY0KCJ1bWVtX2NsayIsIEZSUUNSLCAxNiwgMHgxZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLApAQCAtMTMwLDkgKzEzMywxOSBAQAogCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIEZSUUNSLCA4LCAweDFmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQjNdID0gRElWNCgiYjNfY2xrIiwgRlJRQ1IsIDQsIDB4MWZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1IsIDAsIDB4MWZmZiwgMCksCit9OworCitlbnVtIHsgRElWNF9JUkRBLCBESVY0X0VOQUJMRV9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfZW5hYmxlX2Nsa3NbRElWNF9FTkFCTEVfTlJdID0geworCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MWZmZiwgMCksCit9OworCitlbnVtIHsgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfUkVQQVJFTlRfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X3JlcGFyZW50X2Nsa3NbRElWNF9SRVBBUkVOVF9OUl0gPSB7CiAJW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MWZmZiwgMCksCiAJW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MWZmZiwgMCksCi0JW0RJVjRfSVJEQV0gPSBESVY0KCJpcmRhX2NsayIsIElSREFDTEtDUiwgMCwgMHgxZmZmLCAwKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CkBAIC0xODksNiArMjAyLDE0IEBACiAJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOwogCiAJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihkaXY0X2VuYWJsZV9jbGtzLAorCQkJCQlESVY0X0VOQUJMRV9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKGRpdjRfcmVwYXJlbnRfY2xrcywKKwkJCQkJRElWNF9SRVBBUkVOVF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCiAJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgQVJSQVlfU0laRShkaXY2X2Nsa3MpKTsKIAogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwppbmRleCAyMGEzMWMyLi41MGJhYmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwpAQCAtMTEwLDE1ICsxMTAsMTggQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKLWVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCi0gICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfSVJEQSwgRElWNF9OUiB9Oworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9VLCBESVY0X1NILCBESVY0X0IsIERJVjRfQjMsIERJVjRfUCwgRElWNF9OUiB9OwogCiAjZGVmaW5lIERJVjQoX3N0ciwgX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykgXAogICBTSF9DTEtfRElWNChfc3RyLCAmcGxsX2NsaywgX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykKQEAgLTEzMCwxMSArMTMzLDIwIEBACiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1IsIDgsIDB4MGRiZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9CM10gPSBESVY0KCJiM19jbGsiLCBGUlFDUiwgNCwgMHgwZGI0LCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCBGUlFDUiwgMCwgMHgwZGJmLCAwKSwKLQlbRElWNF9TSVVBXSA9IERJVjQoInNpdWFfY2xrIiwgU0NMS0FDUiwgMCwgMHgwZGJmLCAwKSwKLQlbRElWNF9TSVVCXSA9IERJVjQoInNpdWJfY2xrIiwgU0NMS0JDUiwgMCwgMHgwZGJmLCAwKSwKK307CisKK2VudW0geyBESVY0X0lSREEsIERJVjRfRU5BQkxFX05SIH07CisKK3N0cnVjdCBjbGsgZGl2NF9lbmFibGVfY2xrc1tESVY0X0VOQUJMRV9OUl0gPSB7CiAJW0RJVjRfSVJEQV0gPSBESVY0KCJpcmRhX2NsayIsIElSREFDTEtDUiwgMCwgMHgwZGJmLCAwKSwKIH07CiAKK2VudW0geyBESVY0X1NJVUEsIERJVjRfU0lVQiwgRElWNF9SRVBBUkVOVF9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfcmVwYXJlbnRfY2xrc1tESVY0X1JFUEFSRU5UX05SXSA9IHsKKwlbRElWNF9TSVVBXSA9IERJVjQoInNpdWFfY2xrIiwgU0NMS0FDUiwgMCwgMHgwZGJmLCAwKSwKKwlbRElWNF9TSVVCXSA9IERJVjQoInNpdWJfY2xrIiwgU0NMS0JDUiwgMCwgMHgwZGJmLCAwKSwKK307CiBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tdID0gewogCVNIX0NMS19ESVY2KCJ2aWRlb19jbGsiLCAmcGxsX2NsaywgVkNMS0NSLCAwKSwKIH07CkBAIC0yMTYsNiArMjI4LDE0IEBACiAJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOwogCiAJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihkaXY0X2VuYWJsZV9jbGtzLAorCQkJCQlESVY0X0VOQUJMRV9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKGRpdjRfcmVwYXJlbnRfY2xrcywKKwkJCQkJRElWNF9SRVBBUkVOVF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCiAJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgQVJSQVlfU0laRShkaXY2X2Nsa3MpKTsKIAogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjQuYwppbmRleCA5ZGI3NDM4MC4uNjcwNzA2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKQEAgLTEyNywxMyArMTI3LDI4IEBACiAJJmRpdjNfY2xrLAogfTsKIAorc3RhdGljIHZvaWQgZGl2NF9raWNrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJLyogc2V0IEtJQ0sgYml0IGluIEZSUUNSQSB0byB1cGRhdGUgaGFyZHdhcmUgc2V0dGluZyAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRlJRQ1JBKTsKKwl2YWx1ZSB8PSAoMSA8PCAzMSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBGUlFDUkEpOworfQorCiBzdGF0aWMgaW50IGRpdmlzb3JzW10gPSB7IDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMCwgMjQsIDMyLCAzNiwgNDgsIDAsIDcyIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfdGFibGUgPSB7CitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0gewogCS5kaXZpc29ycyA9IGRpdmlzb3JzLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKwogZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X1AsIERJVjRfTTEsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKQEAgLTE0NCw3ICsxNTksNyBAQAogCVtESVY0X1NIXSA9IERJVjQoInNoeXdheV9jbGsiLCBGUlFDUkEsIDEyLCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1JBLCA4LCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSQSwgMCwgMHgyZjdjLCAwKSwKLQlbRElWNF9NMV0gPSBESVY0KCJ2cHVfY2xrIiwgRlJRQ1JCLCA0LCAweDJmN2MsIDApLAorCVtESVY0X00xXSA9IERJVjQoInZwdV9jbGsiLCBGUlFDUkIsIDQsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCmluZGV4IGRkYzIzNWMuLjg2YWFlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHAxZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gOCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDgpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwMDAwMGY7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gMTIpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAxMikgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKaW5kZXggMzcwY2Q0Ny4uOWY0MDExNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcDBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwN107CisJY2xrLT5yYXRlICo9IHAwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiA0KSAmIDB4MDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzYzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcDBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMTYpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCmluZGV4IGUwYjg5NjcuLjllMzM1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3NzBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMGYpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKaW5kZXggYTI0OWQ4Mi4uMTUwOTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzgwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMDMpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAzKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwppbmRleCA3M2FiZmJmLi5kOTk3ZjBhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwpAQCAtNTcsMTEgKzU3LDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdjJbXSA9IHsgMSwgMiwgNCwgNiwgOCwgMTIsIDE2LCAxOCwKIAkJCSAgICAgICAyNCwgMzIsIDM2LCA0OCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXYyLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2MiksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9ERFIsIERJVjRfR0EsCiAJRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKaW5kZXggYTBlODg2OS4uYWY2OWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTMsMTEgKzMsNyBAQAogICoKICAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICoKLSAqIEJhc2VkIG9uIFNINzc4NQotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNSwxMjcgKzExLDEyNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgMSB9Owotc3RhdGljIGludCBzZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Owotc3RhdGljIGludCBiZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMTIsIDE2LCAxLAotCQkJICAgICAyNCwgMzIsIDEsIDEsIDEsIDEsIDEsIDEgfTsKLXN0YXRpYyBpbnQgbWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKLXN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLAotCQkJICAgICAgMjQsIDMyLCAxLCA0OCwgMSwgMSwgMSwgMSB9OwotCi1zdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQotewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZl07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbWFzdGVyX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfY3B1X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3Nzg2X2Nsa19vcHNbXSA9IHsKLQkmc2g3Nzg2X21hc3Rlcl9jbGtfb3BzLAotCSZzaDc3ODZfbW9kdWxlX2Nsa19vcHMsCi0JJnNoNzc4Nl9idXNfY2xrX29wcywKLQkmc2g3Nzg2X2NwdV9jbGtfb3BzLAotfTsKLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCi17Ci0JaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3Nzg2X2Nsa19vcHMpKQotCQkqb3BzID0gc2g3Nzg2X2Nsa19vcHNbaWR4XTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjApICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNoeXdheV9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7Ci0JLm5hbWUJCT0gImRkcl9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAotfTsKIAogLyoKLSAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKLSAqIGNsb2NrIGZyYW1ld29yaworICogRGVmYXVsdCByYXRlIGZvciB0aGUgcm9vdCBpbnB1dCBjbG9jaywgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpCisgKiBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKLQkmc2g3Nzg2X3NoeXdheV9jbGssCi0JJnNoNzc4Nl9kZHJfY2xrLAorc3RhdGljIHN0cnVjdCBjbGsgZXh0YWxfY2xrID0geworCS5uYW1lCQk9ICJleHRhbCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDMzMzMzMzMzLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IG11bHRpcGxpZXI7CisKKwkvKgorCSAqIENsb2NrIG1vZGVzIDAsIDEsIGFuZCAyIHVzZSBhbiB4NjQgbXVsdGlwbGllciBhZ2FpbnN0IFBMTDEsCisJICogd2hpbGUgbW9kZXMgMywgNCwgYW5kIDUgdXNlIGFuIHgzMi4KKwkgKi8KKwltdWx0aXBsaWVyID0gKHNoX212Lm12X21vZGVfcGlucygpICYgMHhmKSA8IDMgPyA2NCA6IDMyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdGlwbGllcjsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbF9jbGsgPSB7CisJLm5hbWUJCT0gInBsbF9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZwbGxfY2xrX29wcywKKwkucGFyZW50CQk9ICZleHRhbF9jbGssCisJLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gPSB7CisJJmV4dGFsX2NsaywKKwkmcGxsX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2MltdID0geyAxLCAyLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAgICAgIDI0LCAzMiwgMzYsIDQ4IH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CisJLmRpdmlzb3JzID0gZGl2MiwKKwkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdjIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0REUiwgRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfc3RyLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBGUlFNUjEsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0geworCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCAwLCAweDBiNDAsIDApLAorCVtESVY0X0RVXSA9IERJVjQoImR1X2NsayIsIDQsIDB4MDAxMCwgMCksCisJW0RJVjRfRERSXSA9IERJVjQoImRkcl9jbGsiLCAxMiwgMHgwMDAyLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIDE2LCAweDAzNjAsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfU0hdID0gRElWNCgic2h5d2F5X2NsayIsIDIwLCAweDAwMDIsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgMjgsIDB4MDAwNiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKK307CisKKyNkZWZpbmUgTVNUUENSMAkJMHhmZmM0MDAzMAorI2RlZmluZSBNU1RQQ1IxCQkweGZmYzQwMDM0CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tdID0geworCS8qIE1TVFBDUjAgKi8KKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDUsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjksIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgNCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyOCwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAzLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI3LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjYsIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI0LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMywgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMywgMCksCisJU0hfQ0xLX01TVFAzMigic3NpX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjIsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIxLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMCwgMCksCisJU0hfQ0xLX01TVFAzMigiaGFjX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTcsIDApLAorCVNIX0NMS19NU1RQMzIoImhhY19mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDE2LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJpMmNfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNSwgMCksCisJU0hfQ0xLX01TVFAzMigiaTJjX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTQsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTlfMTFfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTEsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTY3OF9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigidG11MzQ1X2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDksIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTAxMl9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCA4LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzZGlmX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2RpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImhzcGlfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMiwgMCksCisKKwkvKiBNU1RQQ1IxICovCisJU0hfQ0xLX01TVFAzMigidXNiX2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAxMiwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAyLCBOVUxMLCBNU1RQQ1IxLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAxLCBOVUxMLCBNU1RQQ1IxLCA5LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDAsIE5VTEwsIE1TVFBDUjEsIDgsIDApLAorCVNIX0NMS19NU1RQMzIoImRtYWNfMTFfNl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigiZG1hY181XzBfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImR1X2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAzLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJldGhlcl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgMiwgMCksCiB9OwogCiBpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CiAJaW50IGksIHJldCA9IDA7CiAKLQljcGdfY2xrX2luaXQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzKTsgaSsrKQorCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsa3NbaV0pOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNzc4Nl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDc3ODZfb25jaGlwX2Nsb2Nrc1tpXTsKLQotCQljbGtwLT5wYXJlbnQgPSBjbGs7Ci0JCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrcCk7Ci0JfQotCi0JY2xrX3B1dChjbGspOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIEFSUkFZX1NJWkUoZGl2NF9jbGtzKSwKKwkJCQkJICAgJmRpdjRfdGFibGUpOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfbXN0cDMyX3JlZ2lzdGVyKG1zdHBfY2xrcywgQVJSQVlfU0laRShtc3RwX2Nsa3MpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKaW5kZXggMjNjMjdkMy4uZTc1YzU3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2h4M19tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKaW5kZXggY2I5ZDA3Yi4uMDY4OGE3NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKQEAgLTI3OCw2ICsyNzgsNyBAQAogCUhJWkE4X0xDREMsIEhJWkE4X0hJWiwKIAlISVpBN19MQ0RDLCBISVpBN19ISVosCiAJSElaQTZfTENEQywgSElaQTZfSElaLAorCUhJWkI0X1NJVUEsIEhJWkI0X0hJWiwKIAlISVpCMV9WSU8sIEhJWkIxX0hJWiwKIAlISVpCMF9WSU8sIEhJWkIwX0hJWiwKIAlISVpDMTVfSVJRNywgSElaQzE1X0hJWiwKQEAgLTU0Niw3ICs1NDcsNyBAQAogCVBJTk1VWF9EQVRBKFZJT19WRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAogCQkgICAgSElaQjBfVklPLCBGT0VfVklPX1ZEMiksCiAJUElOTVVYX0RBVEEoVklPX0hEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCi0JCSAgICBISVpCMV9WSU8sIEhJWkIxX1ZJTywgRkNFX1ZJT19IRDIpLAorCQkgICAgSElaQjFfVklPLCBGQ0VfVklPX0hEMiksCiAJUElOTVVYX0RBVEEoVklPX0NMSzJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAogCQkgICAgSElaQjFfVklPLCBGUkJfVklPX0NMSzIpLAogCkBAIC02NTgsMTQgKzY1OSwxNCBAQAogCVBJTk1VWF9EQVRBKFNESElDTEtfTUFSSywgU0RISUNMSyksCiAKIAkvKiBTSVUgLSBQb3J0IEEgKi8KLQlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQzEzX1NJVUFPTFIsIFNJVUFPTFJfU0lPRjFfU1lOQyksCi0JUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0MxNF9TSVVBT0JULCBTSVVBT0JUX1NJT0YxX1NDSyksCi0JUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNDMTVfU0lVQUlTTEQsIFNJVUFJU0xEX1NJT0YxX1JYRCksCi0JUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0MxMV9TSVVBSUxSLCBTSVVBSUxSX1NJT0YxX1NTMiksCi0JUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0MxMl9TSVVBSUJULCBTSVVBSUJUX1NJT0YxX1NTMSksCi0JUElOTVVYX0RBVEEoU0lVQU9TTERfTUFSSywgUFNCMF9TSVVBT1NMRCwgU0lVQU9TTERfU0lPRjFfVFhEKSwKLQlQSU5NVVhfREFUQShTSVVNQ0tBX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBQU0IxX1NJVU1DS0EsIFBUSzApLAotCVBJTk1VWF9EQVRBKFNJVUZDS0FfTUFSSywgUFNFMTFfU0lVRkNLQSwgUFRLMCksCisJUElOTVVYX0RBVEEoU0lVQU9MUl9NQVJLLCBQU0MxM19TSVVBT0xSLCBISVpCNF9TSVVBLCBTSVVBT0xSX1NJT0YxX1NZTkMpLAorCVBJTk1VWF9EQVRBKFNJVUFPQlRfTUFSSywgUFNDMTRfU0lVQU9CVCwgSElaQjRfU0lVQSwgU0lVQU9CVF9TSU9GMV9TQ0spLAorCVBJTk1VWF9EQVRBKFNJVUFJU0xEX01BUkssIFBTQzE1X1NJVUFJU0xELCBISVpCNF9TSVVBLCBTSVVBSVNMRF9TSU9GMV9SWEQpLAorCVBJTk1VWF9EQVRBKFNJVUFJTFJfTUFSSywgUFNDMTFfU0lVQUlMUiwgSElaQjRfU0lVQSwgU0lVQUlMUl9TSU9GMV9TUzIpLAorCVBJTk1VWF9EQVRBKFNJVUFJQlRfTUFSSywgUFNDMTJfU0lVQUlCVCwgSElaQjRfU0lVQSwgU0lVQUlCVF9TSU9GMV9TUzEpLAorCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBTQjBfU0lVQU9TTEQsIEhJWkI0X1NJVUEsIFNJVUFPU0xEX1NJT0YxX1RYRCksCisJUElOTVVYX0RBVEEoU0lVTUNLQV9NQVJLLCBQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgSElaQjRfU0lVQSwgUFNCMV9TSVVNQ0tBLCBQVEswKSwKKwlQSU5NVVhfREFUQShTSVVGQ0tBX01BUkssIFBTRTExX1NJVUZDS0EsIEhJWkI0X1NJVUEsIFBUSzApLAogCiAJLyogU0lVIC0gUG9ydCBCICovCiAJUElOTVVYX0RBVEEoU0lVQk9MUl9NQVJLLCBQU0IxMV9TSVVCT0xSLCBTSU9TVFJCMV9TSVVCT0xSKSwKQEAgLTE2MTIsNyArMTYxMyw3IEBACiAJCTAsIDAsCiAJCTAsIDAsCiAJCTAsIDAsCi0JCTAsIDAsCisJCUhJWkI0X1NJVUEsIEhJWkI0X0hJWiwKIAkJMCwgMCwKIAkJMCwgMCwKIAkJSElaQjFfVklPLCBISVpCMV9ISVosCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCmluZGV4IGI1MzM1YjUuLmVmM2Y5NzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCkBAIC00NDYsNiArNDQ2LDggQEAKIAogZW51bSB7CiAJVU5VU0VEPTAsCisJRU5BQkxFRCwKKwlESVNBQkxFRCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKQEAgLTQ2MSw3ICs0NjMsNiBAQAogCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNJT0YwLCBTSU9GMSwgU0lPLAogCUZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxFTkRJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUksCiAJSTJDX0FMSSwgSTJDX1RBQ0tJLCBJMkNfV0FJVEksIEkyQ19EVEVJLAotCVNESEkwLCBTREhJMSwgU0RISTIsIFNESEkzLAogCUNNVCwgVFNJRiwgU0lVLCBUV09ERywKIAlUTVUwLCBUTVUxLCBUTVUyLAogCUlSREEsIEpQVSwgTENEQywKQEAgLTQ5NCw4ICs0OTUsOCBAQAogCUlOVENfVkVDVChGTENUTF9GTFRSRVEwSSwgMHhkYzApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUkVRMUksIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoSTJDX0FMSSwgMHhlMDApLCBJTlRDX1ZFQ1QoSTJDX1RBQ0tJLCAweGUyMCksCiAJSU5UQ19WRUNUKEkyQ19XQUlUSSwgMHhlNDApLCBJTlRDX1ZFQ1QoSTJDX0RURUksIDB4ZTYwKSwKLQlJTlRDX1ZFQ1QoU0RISTAsIDB4ZTgwKSwgSU5UQ19WRUNUKFNESEkxLCAweGVhMCksCi0JSU5UQ19WRUNUKFNESEkyLCAweGVjMCksIElOVENfVkVDVChTREhJMywgMHhlZTApLAorCUlOVENfVkVDVChTREhJLCAweGU4MCksIElOVENfVkVDVChTREhJLCAweGVhMCksCisJSU5UQ19WRUNUKFNESEksIDB4ZWMwKSwgSU5UQ19WRUNUKFNESEksIDB4ZWUwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweGYwMCksIElOVENfVkVDVChUU0lGLCAweGYyMCksCiAJSU5UQ19WRUNUKFNJVSwgMHhmODApLCBJTlRDX1ZFQ1QoVFdPREcsIDB4ZmEwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLApAQCAtNTEzLDcgKzUxNCw2IEBACiAJSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEVJLCBGTENUTF9GTEVOREksCiAJCSAgIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSksCiAJSU5UQ19HUk9VUChJMkMsIEkyQ19BTEksIEkyQ19UQUNLSSwgSTJDX1dBSVRJLCBJMkNfRFRFSSksCi0JSU5UQ19HUk9VUChTREhJLCBTREhJMCwgU0RISTEsIFNESEkyLCBTREhJMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTM1LDcgKzUzNSw3IEBACiAJICB7IEkyQ19EVEVJLCBJMkNfV0FJVEksIEkyQ19UQUNLSSwgSTJDX0FMSSwKIAkgICAgRkxDVExfRkxUUkVRMUksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTEVOREksIEZMQ1RMX0ZMU1RFSSB9IH0sCiAJeyAweGE0MDgwMGEwLCAweGE0MDgwMGUwLCA4LCAvKiBJTVI4IC8gSU1DUjggKi8KLQkgIHsgU0RISTMsIFNESEkyLCBTREhJMSwgU0RISTAsIDAsIDAsIFRXT0RHLCBTSVUgfSB9LAorCSAgeyBESVNBQkxFRCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQsIDAsIDAsIFRXT0RHLCBTSVUgfSB9LAogCXsgMHhhNDA4MDBhNCwgMHhhNDA4MDBlNCwgOCwgLyogSU1SOSAvIElNQ1I5ICovCiAJICB7IDAsIDAsIDAsIENNVCwgMCwgVVNCX1VTQkkxLCBVU0JfVVNCSTAsIH0gfSwKIAl7IDB4YTQwODAwYTgsIDB4YTQwODAwZTgsIDgsIC8qIElNUjEwIC8gSU1DUjEwICovCkBAIC01NzMsOSArNTczLDEzIEBACiAJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2MsICJzaDc3MjIiLCB2ZWN0b3JzLCBncm91cHMsCi0JCQkgICAgIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLAotCQkJICAgICBhY2tfcmVnaXN0ZXJzKTsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNfZGVzYyBfX2luaXRkYXRhID0geworCS5uYW1lID0gInNoNzcyMiIsCisJLmZvcmNlX2VuYWJsZSA9IEVOQUJMRUQsCisJLmZvcmNlX2Rpc2FibGUgPSBESVNBQkxFRCwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpLAorfTsKIAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKaW5kZXggNzcyYjkyNi4uODVjNjFmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKQEAgLTU5MiwxNCArNTkyLDE3IEBACiAjZGVmaW5lIFJBTUNSX0NBQ0hFX0wyRkMJMHgwMDAyCiAjZGVmaW5lIFJBTUNSX0NBQ0hFX0wyRQkJMHgwMDAxCiAjZGVmaW5lIEwyX0NBQ0hFX0VOQUJMRQkJKFJBTUNSX0NBQ0hFX0wyRXxSQU1DUl9DQUNIRV9MMkZDKQotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsMl9jYWNoZV9pbml0KHZvaWQpCisKK3ZvaWQgbDJfY2FjaGVfaW5pdCh2b2lkKQogewogCS8qIEVuYWJsZSBMMiBjYWNoZSAqLwotCWN0cmxfb3V0bChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKKwlfX3Jhd193cml0ZWwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CiB9CiAKIGVudW0gewogCVVOVVNFRD0wLAorCUVOQUJMRUQsCisJRElTQUJMRUQsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCkBAIC02MjIsNyArNjI1LDYgQEAKIAlTQ0lGQV9TQ0lGQTEsCiAJRkxDVExfRkxTVEVJLEZMQ1RMX0ZMVEVOREksRkxDVExfRkxUUkVRMEksRkxDVExfRkxUUkVRMUksCiAJSTJDX0FMSSxJMkNfVEFDS0ksSTJDX1dBSVRJLEkyQ19EVEVJLAotCVNESEkwX1NESElJMCxTREhJMF9TREhJSTEsU0RISTBfU0RISUkyLAogCUNNVF9DTVRJLAogCVRTSUZfVFNJRkksCiAJU0lVX1NJVUksCkBAIC02MzAsNyArNjMyLDYgQEAKIAlUTVUwX1RVTkkwLCBUTVUwX1RVTkkxLCBUTVUwX1RVTkkyLAogCUlSREFfSVJEQUksCiAJQVRBUElfQVRBUElJLAotCVNESEkxX1NESElJMCxTREhJMV9TREhJSTEsU0RISTFfU0RISUkyLAogCVZFVTJIMV9WRVUySEksCiAJTENEQ19MQ0RDSSwKIAlUTVUxX1RVTkkwLFRNVTFfVFVOSTEsVE1VMV9UVU5JMiwKQEAgLTcwMSw5ICs3MDIsOSBAQAogCUlOVENfVkVDVChJMkNfV0FJVEksMHhFNDApLAogCUlOVENfVkVDVChJMkNfRFRFSSwweEU2MCksCiAKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkwLDB4RTgwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkxLDB4RUEwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkyLDB4RUMwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RTgwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUEwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUMwKSwKIAogCUlOVENfVkVDVChDTVRfQ01USSwweEYwMCksCiAJSU5UQ19WRUNUKFRTSUZfVFNJRkksMHhGMjApLApAQCAtNzE3LDkgKzcxOCw5IEBACiAJSU5UQ19WRUNUKElSREFfSVJEQUksMHg0ODApLAogCUlOVENfVkVDVChBVEFQSV9BVEFQSUksMHg0QTApLAogCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMCwweDRFMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMSwweDUwMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMiwweDUyMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDRFMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDUwMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDUyMCksCiAKIAlJTlRDX1ZFQ1QoVkVVMkgxX1ZFVTJISSwweDU2MCksCiAJSU5UQ19WRUNUKExDRENfTENEQ0ksMHg1ODApLApAQCAtNzM4LDE1ICs3MzksMTQgQEAKIAlJTlRDX0dST1VQKEZMQ1RMLEZMQ1RMX0ZMU1RFSSxGTENUTF9GTFRFTkRJLEZMQ1RMX0ZMVFJFUTBJLEZMQ1RMX0ZMVFJFUTFJKSwKIAlJTlRDX0dST1VQKEkyQyxJMkNfQUxJLEkyQ19UQUNLSSxJMkNfV0FJVEksSTJDX0RURUkpLAogCUlOVENfR1JPVVAoXzJERywgXzJER19UUkksXzJER19JTkksXzJER19DRUkpLAotCUlOVENfR1JPVVAoU0RISTEsIFNESEkxX1NESElJMCxTREhJMV9TREhJSTEsU0RISTFfU0RISUkyKSwKIAlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSxSVENfUFJJLFJUQ19DVUkpLAogCUlOVENfR1JPVVAoRE1BQzFCLCBETUFDMUJfREVJNCxETUFDMUJfREVJNSxETUFDMUJfREFERVJSKSwKLQlJTlRDX0dST1VQKFNESEkwLFNESEkwX1NESElJMCxTREhJMF9TREhJSTEsU0RISTBfU0RISUkyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGE0MDgwMDgwLCAweGE0MDgwMGMwLCA4LCAvKiBJTVIwIC8gSU1DUjAgKi8KLQkgIHsgMCwgIFRNVTFfVFVOSTIsVE1VMV9UVU5JMSxUTVUxX1RVTkkwLDAsU0RISTFfU0RISUkyLFNESEkxX1NESElJMSxTREhJMV9TREhJSTB9IH0sCisJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCisJICAgIDAsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVEIH0gfSwKIAl7IDB4YTQwODAwODQsIDB4YTQwODAwYzQsIDgsIC8qIElNUjEgLyBJTUNSMSAqLwogCSAgeyBWSU9fVk9VSSwgVklPX1ZFVTJISSxWSU9fQkVVSSxWSU9fQ0VVSSxETUFDMEFfREVJMyxETUFDMEFfREVJMixETUFDMEFfREVJMSxETUFDMEFfREVJMCB9IH0sCiAJeyAweGE0MDgwMDg4LCAweGE0MDgwMGM4LCA4LCAvKiBJTVIyIC8gSU1DUjIgKi8KQEAgLTc2Myw3ICs3NjMsOCBAQAogCSAgeyBJMkNfRFRFSSwgSTJDX1dBSVRJLCBJMkNfVEFDS0ksIEkyQ19BTEksCiAJICAgIEZMQ1RMX0ZMVFJFUTFJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKIAl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLwotCSAgeyAwLFNESEkwX1NESElJMixTREhJMF9TREhJSTEsU0RISTBfU0RISUkwLDAsMCxTQ0lGQV9TQ0lGQTIsU0lVX1NJVUkgfSB9LAorCSAgeyAwLCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCwKKwkgICAgMCwgMCwgU0NJRkFfU0NJRkEyLCBTSVVfU0lVSSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01UX0NNVEksIDAsIDAsIFVTQl9VU0kwLDAgfSB9LAogCXsgMHhhNDA4MDBhOCwgMHhhNDA4MDBlOCwgOCwgLyogSU1SMTAgLyBJTUNSMTAgKi8KQEAgLTgwMyw5ICs4MDQsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyMyIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzIzIiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCBkMzJmOTZjLi4zMWUzNDUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtNzE0LDE0ICs3MTQsMTcgQEAKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJGQwkweDAwMDIKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJFCQkweDAwMDEKICNkZWZpbmUgTDJfQ0FDSEVfRU5BQkxFCQkoUkFNQ1JfQ0FDSEVfTDJFfFJBTUNSX0NBQ0hFX0wyRkMpCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGwyX2NhY2hlX2luaXQodm9pZCkKKwordm9pZCBsMl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJLyogRW5hYmxlIEwyIGNhY2hlICovCi0JY3RybF9vdXRsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOworCV9fcmF3X3dyaXRlbChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKIH0KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKKwlFTkFCTEVELAorCURJU0FCTEVELAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LApAQCAtNzUwLDE0ICs3NTMsMTIgQEAKIAlFVEhJLAogCUkyQzFfQUxJLCBJMkMxX1RBQ0tJLCBJMkMxX1dBSVRJLCBJMkMxX0RURUksCiAJSTJDMF9BTEksIEkyQzBfVEFDS0ksIEkyQzBfV0FJVEksIEkyQzBfRFRFSSwKLQlTREhJMF9TREhJSTAsIFNESEkwX1NESElJMSwgU0RISTBfU0RISUkyLCBTREhJMF9TREhJSTMsCiAJQ01ULAogCVRTSUYsCiAJRlNJLAogCVNDSUZBNSwKIAlUTVUwX1RVTkkwLCBUTVUwX1RVTkkxLCBUTVUwX1RVTkkyLAogCUlSREEsCi0JU0RISTFfU0RISUkwLCBTREhJMV9TREhJSTEsIFNESEkxX1NESElJMiwKIAlKUFUsCiAJXzJERE1BQywKIAlNTUNfTU1DMkksIE1NQ19NTUMzSSwKQEAgLTgzOSwxMCArODQwLDEwIEBACiAJSU5UQ19WRUNUKEkyQzBfV0FJVEksIDB4RTQwKSwKIAlJTlRDX1ZFQ1QoSTJDMF9EVEVJLCAweEU2MCksCiAKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkwLCAweEU4MCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMSwgMHhFQTApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTIsIDB4RUMwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkzLCAweEVFMCksCisJSU5UQ19WRUNUKFNESEkwLCAweEU4MCksCisJSU5UQ19WRUNUKFNESEkwLCAweEVBMCksCisJSU5UQ19WRUNUKFNESEkwLCAweEVDMCksCisJSU5UQ19WRUNUKFNESEkwLCAweEVFMCksCiAKIAlJTlRDX1ZFQ1QoQ01ULCAgICAweEYwMCksCiAJSU5UQ19WRUNUKFRTSUYsICAgMHhGMjApLApAQCAtODU1LDkgKzg1Niw5IEBACiAKIAlJTlRDX1ZFQ1QoSVJEQSwgICAgMHg0ODApLAogCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMCwgMHg0RTApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTEsIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkyLCAweDUyMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDRFMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDUwMCksCisJSU5UQ19WRUNUKFNESEkxLCAweDUyMCksCiAKIAlJTlRDX1ZFQ1QoSlBVLCAweDU2MCksCiAJSU5UQ19WRUNUKF8yRERNQUMsIDB4NEEwKSwKQEAgLTg4Myw4ICs4ODQsNiBAQAogCUlOVENfR1JPVVAoRE1BQzBCLCBETUFDMEJfREVJNCwgRE1BQzBCX0RFSTUsIERNQUMwQl9EQURFUlIpLAogCUlOVENfR1JPVVAoSTJDMCwgSTJDMF9BTEksIEkyQzBfVEFDS0ksIEkyQzBfV0FJVEksIEkyQzBfRFRFSSksCiAJSU5UQ19HUk9VUChJMkMxLCBJMkMxX0FMSSwgSTJDMV9UQUNLSSwgSTJDMV9XQUlUSSwgSTJDMV9EVEVJKSwKLQlJTlRDX0dST1VQKFNESEkwLCBTREhJMF9TREhJSTAsIFNESEkwX1NESElJMSwgU0RISTBfU0RISUkyLCBTREhJMF9TREhJSTMpLAotCUlOVENfR1JPVVAoU0RISTEsIFNESEkxX1NESElJMCwgU0RISTFfU0RISUkxLCBTREhJMV9TREhJSTIpLAogCUlOVENfR1JPVVAoU1BVLCBTUFVfU1BVSTAsIFNQVV9TUFVJMSksCiAJSU5UQ19HUk9VUChNTUNJRiwgTU1DX01NQzJJLCBNTUNfTU1DM0kpLAogfTsKQEAgLTg5Miw3ICs4OTEsNyBAQAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4YTQwODAwODAsIDB4YTQwODAwYzAsIDgsIC8qIElNUjAgLyBJTUNSMCAqLwogCSAgeyAwLCBUTVUxX1RVTkkyLCBUTVUxX1RVTkkxLCBUTVUxX1RVTkkwLAotCSAgICAwLCBTREhJMV9TREhJSTIsIFNESEkxX1NESElJMSwgU0RISTFfU0RISUkwIH0gfSwKKwkgICAgMCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQgfSB9LAogCXsgMHhhNDA4MDA4NCwgMHhhNDA4MDBjNCwgOCwgLyogSU1SMSAvIElNQ1IxICovCiAJICB7IFZJT19WT1UsIFZJT19WRVUxLCBWSU9fQkVVMCwgVklPX0NFVTAsCiAJICAgIERNQUMwQV9ERUkzLCBETUFDMEFfREVJMiwgRE1BQzBBX0RFSTEsIERNQUMwQV9ERUkwIH0gfSwKQEAgLTkxNCw3ICs5MTMsNyBAQAogCSAgeyBJMkMwX0RURUksIEkyQzBfV0FJVEksIEkyQzBfVEFDS0ksIEkyQzBfQUxJLAogCSAgICBJMkMxX0RURUksIEkyQzFfV0FJVEksIEkyQzFfVEFDS0ksIEkyQzFfQUxJIH0gfSwKIAl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLwotCSAgeyBTREhJMF9TREhJSTMsIFNESEkwX1NESElJMiwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTAsCisJICB7IERJU0FCTEVELCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCwKIAkgICAgMCwgMCwgU0NJRkE1LCBGU0kgfSB9LAogCXsgMHhhNDA4MDBhNCwgMHhhNDA4MDBlNCwgOCwgLyogSU1SOSAvIElNQ1I5ICovCiAJICB7IDAsIDAsIDAsIENNVCwgMCwgVVNCMSwgVVNCMCwgMCB9IH0sCkBAIC05NjEsOSArOTYwLDEzIEBACiAJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2MsICJzaDc3MjQiLCB2ZWN0b3JzLCBncm91cHMsCi0JCQkgICAgIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLAotCQkJICAgICBhY2tfcmVnaXN0ZXJzKTsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNfZGVzYyBfX2luaXRkYXRhID0geworCS5uYW1lID0gInNoNzcyNCIsCisJLmZvcmNlX2VuYWJsZSA9IEVOQUJMRUQsCisJLmZvcmNlX2Rpc2FibGUgPSBESVNBQkxFRCwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpLAorfTsKIAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKaW5kZXggMzdlMzJlZi4uZTc1ZWRmNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKQEAgLTQ4NywxNyArNDg3LDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC01MDcsMzIgKzUwNywzMiBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSUTMyMTA6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEwMTIzKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDAxMjMpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwppbmRleCA2YWJhMjZmLi43ZjZiMGE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwpAQCAtNTM4LDExICs1MzgsMTEgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlE3LTAgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC01NTIsMjcgKzU1MiwyNyBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lycV9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsNzY1NF9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmwzMjEwX2Rlc2MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYwppbmRleCBjMTY0M2JjLi44NmQ2ODFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYwpAQCAtNjk0LDE3ICs2OTQsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlE3LTAgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTcxNCwyNyArNzE0LDI3IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJxX2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmw3NjU0X2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDMyMTBfZGVzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IGMzMTA1NTguLmY4ZjIxNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCkBAIC00NjEsMTcgKzQ2MSwxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNDgxLDI3ICs0ODEsMjcgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcnFfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDc2NTRfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsMzIxMF9kZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKaW5kZXggZjY4NWI5Yi4uMjM0NDhkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMKQEAgLTU0MSwxNyArNTQxLDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC01NjEsMzIgKzU2MSwzMiBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSUTMyMTA6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEwMTIzKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDAxMjMpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwppbmRleCA3MTY3MzQ4Li43ZTU4NTMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpAQCAtODY3LDE0ICs4NjcsMTQgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTg4NCwzMiArODg0LDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwppbmRleCA1ODYzZTBjLi4xMWJmNGMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKQEAgLTc4LDcgKzc4LDEwIEBACiAKIHZvaWQgcGxhdF9zdGFydF9jcHUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBlbnRyeV9wb2ludCkKIHsKLQlfX3Jhd193cml0ZWwoZW50cnlfcG9pbnQsIFJFU0VUX1JFRyhjcHUpKTsKKwlpZiAoX19pbl8yOWJpdF9tb2RlKCkpCisJCV9fcmF3X3dyaXRlbChlbnRyeV9wb2ludCwgUkVTRVRfUkVHKGNwdSkpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhlbnRyeV9wb2ludCksIFJFU0VUX1JFRyhjcHUpKTsKIAogCWlmICghKF9fcmF3X3JlYWRsKFNUQkNSX1JFRyhjcHUpKSAmIFNUQkNSX01TVFApKQogCQlfX3Jhd193cml0ZWwoU1RCQ1JfTVNUUCwgU1RCQ1JfUkVHKGNwdSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvdWJjLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmIyNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvdWJjLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYworICoKKyAqIE9uLWNoaXAgVUJDIHN1cHBvcnQgZm9yIFNILTRBIENQVXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKworI2RlZmluZSBVQkNfQ0JSKGlkeCkJKDB4ZmYyMDAwMDAgKyAoMHgyMCAqIGlkeCkpCisjZGVmaW5lIFVCQ19DUlIoaWR4KQkoMHhmZjIwMDAwNCArICgweDIwICogaWR4KSkKKyNkZWZpbmUgVUJDX0NBUihpZHgpCSgweGZmMjAwMDA4ICsgKDB4MjAgKiBpZHgpKQorI2RlZmluZSBVQkNfQ0FNUihpZHgpCSgweGZmMjAwMDBjICsgKDB4MjAgKiBpZHgpKQorCisjZGVmaW5lIFVCQ19DQ01GUgkweGZmMjAwNjAwCisjZGVmaW5lIFVCQ19DQkNSCTB4ZmYyMDA2MjAKKworLyogQ1JSICovCisjZGVmaW5lIFVCQ19DUlJfUENCCSgxIDw8IDEpCisjZGVmaW5lIFVCQ19DUlJfQklFCSgxIDw8IDApCisKKy8qIENCUiAqLworI2RlZmluZSBVQkNfQ0JSX0NFCSgxIDw8IDApCisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdWJjIHNoNGFfdWJjOworCitzdGF0aWMgdm9pZCBzaDRhX3ViY19lbmFibGUoc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbywgaW50IGlkeCkKK3sKKwlfX3Jhd193cml0ZWwoVUJDX0NCUl9DRSB8IGluZm8tPmxlbiB8IGluZm8tPnR5cGUsIFVCQ19DQlIoaWR4KSk7CisJX19yYXdfd3JpdGVsKGluZm8tPmFkZHJlc3MsIFVCQ19DQVIoaWR4KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2Rpc2FibGUoc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbywgaW50IGlkeCkKK3sKKwlfX3Jhd193cml0ZWwoMCwgVUJDX0NCUihpZHgpKTsKKwlfX3Jhd193cml0ZWwoMCwgVUJDX0NBUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfZW5hYmxlX2FsbCh1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKQorCQlpZiAobWFzayAmICgxIDw8IGkpKQorCQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFVCQ19DQlIoaSkpIHwgVUJDX0NCUl9DRSwKKwkJCQkgICAgIFVCQ19DQlIoaSkpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19kaXNhYmxlX2FsbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFVCQ19DQlIoaSkpICYgflVCQ19DQlJfQ0UsCisJCQkgICAgIFVCQ19DQlIoaSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaDRhX3ViY19hY3RpdmVfbWFzayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWN0aXZlID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspCisJCWlmIChfX3Jhd19yZWFkbChVQkNfQ0JSKGkpKSAmIFVCQ19DQlJfQ0UpCisJCQlhY3RpdmUgfD0gKDEgPDwgaSk7CisKKwlyZXR1cm4gYWN0aXZlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaDRhX3ViY190cmlnZ2VyZWRfbWFzayh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkbChVQkNfQ0NNRlIpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19jbGVhcl90cmlnZ2VyZWRfbWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFVCQ19DQ01GUikgJiB+bWFzaywgVUJDX0NDTUZSKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF91YmMgc2g0YV91YmMgPSB7CisJLm5hbWUJCQk9ICJTSC00QSIsCisJLm51bV9ldmVudHMJCT0gMiwKKwkudHJhcF9ucgkJPSAweDFlMCwKKwkuZW5hYmxlCQkJPSBzaDRhX3ViY19lbmFibGUsCisJLmRpc2FibGUJCT0gc2g0YV91YmNfZGlzYWJsZSwKKwkuZW5hYmxlX2FsbAkJPSBzaDRhX3ViY19lbmFibGVfYWxsLAorCS5kaXNhYmxlX2FsbAkJPSBzaDRhX3ViY19kaXNhYmxlX2FsbCwKKwkuYWN0aXZlX21hc2sJCT0gc2g0YV91YmNfYWN0aXZlX21hc2ssCisJLnRyaWdnZXJlZF9tYXNrCQk9IHNoNGFfdWJjX3RyaWdnZXJlZF9tYXNrLAorCS5jbGVhcl90cmlnZ2VyZWRfbWFzawk9IHNoNGFfdWJjX2NsZWFyX3RyaWdnZXJlZF9tYXNrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g0YV91YmNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKnViY19pY2xrID0gY2xrX2dldChOVUxMLCAidWJjMCIpOworCWludCBpOworCisJLyoKKwkgKiBUaGUgVUJDIE1TVFAgYml0IGlzIG9wdGlvbmFsLCBhcyBub3QgYWxsIHBsYXRmb3JtcyB3aWxsIGhhdmUKKwkgKiBpdC4gSnVzdCBpZ25vcmUgaXQgaWYgd2UgY2FuJ3QgZmluZCBpdC4KKwkgKi8KKwlpZiAoSVNfRVJSKHViY19pY2xrKSkKKwkJdWJjX2ljbGsgPSBOVUxMOworCisJY2xrX2VuYWJsZSh1YmNfaWNsayk7CisKKwlfX3Jhd193cml0ZWwoMCwgVUJDX0NCQ1IpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykgeworCQlfX3Jhd193cml0ZWwoMCwgVUJDX0NBTVIoaSkpOworCQlfX3Jhd193cml0ZWwoMCwgVUJDX0NCUihpKSk7CisKKwkJX19yYXdfd3JpdGVsKFVCQ19DUlJfQklFIHwgVUJDX0NSUl9QQ0IsIFVCQ19DUlIoaSkpOworCisJCS8qIGR1bW15IHJlYWQgZm9yIHdyaXRlIHBvc3RpbmcgKi8KKwkJKHZvaWQpX19yYXdfcmVhZGwoVUJDX0NSUihpKSk7CisJfQorCisJY2xrX2Rpc2FibGUodWJjX2ljbGspOworCisJc2g0YV91YmMuY2xrID0gdWJjX2ljbGs7CisKKwlyZXR1cm4gcmVnaXN0ZXJfc2hfdWJjKCZzaDRhX3ViYyk7Cit9CithcmNoX2luaXRjYWxsKHNoNGFfdWJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMKaW5kZXggN2Y4NjRlYi4uOWNmYzE5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jCkBAIC0yNCw3ICsyNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChjcHJjX2Jhc2UgKyAweDAwKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKGNwcmNfYmFzZSArIDB4MDApID4+IDYpICYgMHgwMDA3OwogCWNsay0+cmF0ZSAqPSBpZmNfdGFibGVbaWR4XTsKIH0KIApAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhjcHJjX2Jhc2UpID4+IDEyKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY190YWJsZVtpZHhdOwogfQogCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhjcHJjX2Jhc2UpID4+IDMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY190YWJsZVtpZHhdOwogfQogCkBAIC01NCw3ICs1NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoY3ByY19iYXNlKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUwppbmRleCA4ZjEzZjczLi42YjgwMjk1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TCkBAIC0xODcsNyArMTg3LDcgQEAKIAkucmVwdCA2CiAJCS5sb25nIGRvX2V4Y2VwdGlvbl9lcnJvcgkvKiAweDg4MCAtIDB4OTIwICovCiAJLmVuZHIKLQkubG9uZwlkb19zb2Z0d2FyZV9icmVha19wb2ludAkvKiAweDk0MCAqLworCS5sb25nCWJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyCS8qIDB4OTQwICovCiAJLmxvbmcJZG9fZXhjZXB0aW9uX2Vycm9yCQkvKiAweDk2MCAqLwogCS5sb25nCWRvX3NpbmdsZV9zdGVwCQkvKiAweDk4MCAqLwogCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCXB0YQlpdHNfSVJRLCB0cjAKIAliZXFpL2wJcjQsIEVWRU5UX0lOVEVSUlVQVCwgdHIwCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQotCW1vdmkJZG9fZnB1X3N0YXRlX3Jlc3RvcmUsIHI2CisJbW92aQlmcHVfc3RhdGVfcmVzdG9yZV90cmFwX2hhbmRsZXIsIHI2CiAjZWxzZQogCW1vdmkJZG9fZXhjZXB0aW9uX2Vycm9yLCByNgogI2VuZGlmCkBAIC0xMTM1LDcgKzExMzUsNyBAQAogCXB0YQlpdHNfSVJRLCB0cjAKIAliZXFpL2wJcjQsIEVWRU5UX0lOVEVSUlVQVCwgdHIwCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQotCW1vdmkJZG9fZnB1X3N0YXRlX3Jlc3RvcmUsIHI2CisJbW92aQlmcHVfc3RhdGVfcmVzdG9yZV90cmFwX2hhbmRsZXIsIHI2CiAjZWxzZQogCW1vdmkJZG9fZXhjZXB0aW9uX2Vycm9yLCByNgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYwppbmRleCA0NjQ4Y2NlLi40YjNiYjM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKQEAgLTE1LDI0ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZnB1Lmg+Ci0KLS8qCi0gKiBJbml0aWFsbHkgbG9hZCB0aGUgRlBVIHdpdGggc2lnbmFsbGluZyBOQU5TLiAgVGhpcyBiaXQgcGF0dGVybgotICogaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG5vIG1hdHRlciB3aGV0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzaW9uLCBpdCBzdGlsbCByZXByZXNlbnRzIGEgc2lnbmFsbGluZyBOQU4uCi0gKi8KLSNkZWZpbmUgc05BTjY0CQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKLSNkZWZpbmUgc05BTjMyCQkweEZGRkZGRkZGVUwKLQotc3RhdGljIHVuaW9uIHNoX2ZwdV91bmlvbiBpbml0X2ZwdXJlZ3MgPSB7Ci0JLmhhcmQgPSB7Ci0JCS5mcF9yZWdzID0geyBbMCAuLi4gNjNdID0gc05BTjMyIH0sCi0JCS5mcHNjciA9IEZQU0NSX0lOSVQKLQl9Ci19OwogCiB2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpAQCAtNzIsMTIgKzU0LDExIEBACiAJCSAgICAgImZnZXRzY3IgICBmcjYzXG5cdCIKIAkJICAgICAiZnN0LnMgICAgICUwLCAoMzIqOCksIGZyNjNcblx0IgogCQk6IC8qIG5vIG91dHB1dCAqLwotCQk6ICJyIiAoJnRzay0+dGhyZWFkLmZwdS5oYXJkKQorCQk6ICJyIiAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSkKIAkJOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotZnBsb2FkKHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwcmVncykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJYXNtIHZvbGF0aWxlKCJmbGQucCAgICAgJTAsICgwKjgpLCBmcDBcblx0IgogCQkgICAgICJmbGQucCAgICAgJTAsICgxKjgpLCBmcDJcblx0IgpAQCAtMTE2LDE2ICs5NywxMSBAQAogCiAJCSAgICAgImZsZC5wICAgICAlMCwgKDMxKjgpLCBmcDYyXG5cdCIKIAkJOiAvKiBubyBvdXRwdXQgKi8KLQkJOiAiciIgKGZwcmVncykgKTsKKwkJOiAiciIgKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUpCisJCTogIm1lbW9yeSIpOwogfQogCi12b2lkIGZwaW5pdChzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcHJlZ3MpCi17Ci0JKmZwcmVncyA9IGluaXRfZnB1cmVncy5oYXJkOwotfQotCi1hc21saW5rYWdlIHZvaWQKLWRvX2ZwdV9lcnJvcih1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBkb19mcHVfZXJyb3IodW5zaWduZWQgbG9uZyBleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCkBAIC0xMzMsMzUgKzEwOSw2IEBACiAKIAl0c2stPnRocmVhZC50cmFwX25vID0gMTE7CiAJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IDA7CisKIAlmb3JjZV9zaWcoU0lHRlBFLCB0c2spOwogfQotCi0KLWFzbWxpbmthZ2Ugdm9pZAotZG9fZnB1X3N0YXRlX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpOwotCi0JaWYgKCEgdXNlcl9tb2RlKHJlZ3MpKQotCQlkaWUoIkZQVSB1c2VkIGluIGtlcm5lbCIsIHJlZ3MsIGV4KTsKLQotCXJlZ3MtPnNyICY9IH5TUl9GRDsKLQotCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IGN1cnJlbnQpCi0JCXJldHVybjsKLQotCWVuYWJsZV9mcHUoKTsKLQlpZiAobGFzdF90YXNrX3VzZWRfbWF0aCAhPSBOVUxMKQotCQkvKiBPdGhlciBwcm9jZXNzZXMgZnB1IHN0YXRlLCBzYXZlIGF3YXkgKi8KLQkJc2F2ZV9mcHUobGFzdF90YXNrX3VzZWRfbWF0aCk7Ci0KLSAgICAgICAgbGFzdF90YXNrX3VzZWRfbWF0aCA9IGN1cnJlbnQ7Ci0gICAgICAgIGlmICh1c2VkX21hdGgoKSkgewotICAgICAgICAgICAgICAgIGZwbG9hZCgmY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkKTsKLSAgICAgICAgfSBlbHNlIHsKLQkJLyogRmlyc3QgdGltZSBGUFUgdXNlci4gICovCi0JCWZwbG9hZCgmaW5pdF9mcHVyZWdzLmhhcmQpOwotICAgICAgICAgICAgICAgIHNldF91c2VkX21hdGgoKTsKLSAgICAgICAgfQotCWRpc2FibGVfZnB1KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCmluZGV4IGNhMDI5YTQuLmU1NTk2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCkBAIC0zMyw3ICszMyw4IEBACiAjZGVmaW5lIFNVU1BfTU9ERV9TTEVFUAkJKFNVU1BfU0hfU0xFRVApCiAjZGVmaW5lIFNVU1BfTU9ERV9TTEVFUF9TRgkoU1VTUF9TSF9TTEVFUCB8IFNVU1BfU0hfU0YpCiAjZGVmaW5lIFNVU1BfTU9ERV9TVEFOREJZX1NGCShTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGKQotI2RlZmluZSBTVVNQX01PREVfUlNUQU5EQlkJKFNVU1BfU0hfUlNUQU5EQlkgfCBTVVNQX1NIX01NVSB8IFNVU1BfU0hfU0YpCisjZGVmaW5lIFNVU1BfTU9ERV9SU1RBTkRCWV9TRiBcCisJKFNVU1BfU0hfUlNUQU5EQlkgfCBTVVNQX1NIX01NVSB8IFNVU1BfU0hfUkVHUyB8IFNVU1BfU0hfU0YpCiAgLyoKICAgKiBVLXN0YW5kYnkgbW9kZSBpcyB1bnN1cHBvcnRlZCBzaW5jZSBpdCBuZWVkcyBib290bG9hZGVyIGhhY2tzCiAgICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCmluZGV4IGU5ZGQ3ZmEuLmU2YWFjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCkBAIC00OCw4ICs0OCw0OCBAQAogCXN0YwlzciwgcjAKIAltb3YubAlyMCwgQChTSF9TTEVFUF9TUiwgcjUpCiAKLQkvKiBzYXZlIHNwICovCisJLyogc2F2ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIHRvIHN0YWNrIGlmIG5lZWRlZCAqLworCW1vdi5sCUAoU0hfU0xFRVBfTU9ERSwgcjUpLCByMAorCXRzdAkjU1VTUF9TSF9SRUdTLCByMAorCWJ0CXNraXBfcmVnc19zYXZlCisKKwlzdHMubAlwciwgQC1yMTUKKwltb3YubAlyMTQsIEAtcjE1CisJbW92LmwJcjEzLCBALXIxNQorCW1vdi5sCXIxMiwgQC1yMTUKKwltb3YubAlyMTEsIEAtcjE1CisJbW92LmwJcjEwLCBALXIxNQorCW1vdi5sCXI5LCBALXIxNQorCW1vdi5sCXI4LCBALXIxNQorCisJLyogbWFrZSBzdXJlIGJhbmswIGlzIHNlbGVjdGVkLCBzYXZlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlyYl9iaXQsIHI5CisJbm90CXI5LCByOQorCWJzcglzZXRfc3IKKwkgbW92CSMwLCByMTAKKworCWJzcglzYXZlX2xvd19yZWdzCisJIG5vcAorCisJLyogc3dpdGNoIHRvIGJhbmsgMSwgc2F2ZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJcmJfYml0LCByMTAKKwlic3IJc2V0X3NyCisJIG1vdgkjLTEsIHI5CisKKwlic3IJc2F2ZV9sb3dfcmVncworCSBub3AKKworCS8qIHN3aXRjaCBiYWNrIHRvIGJhbmsgMCAqLworCW1vdi5sCXJiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCXNldF9zcgorCSBtb3YJIzAsIHIxMAorCitza2lwX3JlZ3Nfc2F2ZToKKworCS8qIHNhdmUgc3AsIGFsc28gc2V0IHRvIGludGVybmFsIHJhbSAqLwogCW1vdi5sCXIxNSwgQChTSF9TTEVFUF9TUCwgcjUpCisJbW92CXI1LCByMTUKIAogCS8qIHNhdmUgc3RiY3IgKi8KIAlic3IgICAgIHNhdmVfcmVnaXN0ZXIKQEAgLTYwLDcgKzEwMCw3IEBACiAJdHN0CSNTVVNQX1NIX01NVSwgcjAKIAlidAlza2lwX21tdV9zYXZlX2Rpc2FibGUKIAotICAgICAgIC8qIHNhdmUgbW11IHN0YXRlICovCisJLyogc2F2ZSBtbXUgc3RhdGUgKi8KIAlic3IJc2F2ZV9yZWdpc3RlcgogCSBtb3YJI1NIX1NMRUVQX1JFR19QVEVILCByMAogCkBAIC0xNzcsNiArMjE3LDI5IEBACiAJbW92LmwJQChyMCwgcjUpLCByMAogCXJ0cwogCSBub3AKKworc2V0X3NyOgorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJb3IJcjEwLCByOAorCWxkYwlyOCwgc3IKKwlydHMKKwkgbm9wCisKK3NhdmVfbG93X3JlZ3M6CisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJcnRzCisJIG1vdi5sCXIwLCBALXIxNQorCisJLmJhbGlnbiA0CityYl9iaXQ6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCisKIEVOVFJZKHNoX21vYmlsZV9zbGVlcF9lbnRlcl9lbmQpCiAKIAkuYmFsaWduIDQKQEAgLTI3MCw2ICszMzMsNDAgQEAKIAlpY2JpCUByMAogCiBza2lwX3Jlc3RvcmVfbW11OgorCisJLyogcmVzdG9yZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGlmIG5lZWRlZCAqLworCW1vdi5sCUAoU0hfU0xFRVBfTU9ERSwgcjUpLCByMAorCXRzdAkjU1VTUF9TSF9SRUdTLCByMAorCWJ0CXNraXBfcmVzdG9yZV9yZWdzCisKKwkvKiBzd2l0Y2ggdG8gYmFuayAxLCByZXN0b3JlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlfcmJfYml0LCByMTAKKwlic3IJX3NldF9zcgorCSBtb3YJIy0xLCByOQorCisJYnNyCXJlc3RvcmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiBzd2l0Y2ggdG8gYmFuazAsIHJlc3RvcmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCV9yYl9iaXQsIHI5CisJbm90CXI5LCByOQorCWJzcglfc2V0X3NyCisJIG1vdgkjMCwgcjEwCisKKwlic3IJcmVzdG9yZV9sb3dfcmVncworCSBub3AKKworCS8qIHJlc3RvcmUgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyAqLworCW1vdi5sCUByMTUrLCByOAorCW1vdi5sCUByMTUrLCByOQorCW1vdi5sCUByMTUrLCByMTAKKwltb3YubAlAcjE1KywgcjExCisJbW92LmwJQHIxNSssIHIxMgorCW1vdi5sCUByMTUrLCByMTMKKwltb3YubAlAcjE1KywgcjE0CisJbGRzLmwJQHIxNSssIHByCisKK3NraXBfcmVzdG9yZV9yZWdzOgogCXJ0ZQogCSBub3AKIApAQCAtMjgzLDYgKzM4MCwyNiBAQAogCXJ0cwogCSBub3AKIAorX3NldF9zcjoKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCW9yCXIxMCwgcjgKKwlsZGMJcjgsIHNyCisJcnRzCisJIG5vcAorCityZXN0b3JlX2xvd19yZWdzOgorCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCXJ0cworCSBtb3YubAlAcjE1KywgcjcKKwogCS5iYWxpZ24gNAorX3JiX2JpdDoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKIDE6CS5sb25nCX4weDdmZgogRU5UUlkoc2hfbW9iaWxlX3NsZWVwX3Jlc3VtZV9lbmQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMgYi9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKaW5kZXggNTkxNzQxMzguLjdhMWI0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpZiAhZGVmaW5lZChDT05GSUdfS0dEQikKLSNkZWZpbmUgYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJCWRlYnVnX3RyYXBfaGFuZGxlcgogI2RlZmluZSBzaW5nbGVzdGVwX3RyYXBfaGFuZGxlcgkJZGVidWdfdHJhcF9oYW5kbGVyCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKaW5kZXggZTUxMTY4MC4uYmQxYzQ5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCkBAIC0zOSwxMCArMzksMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZHdhcmZfcmVnX2NhY2hlcDsKIHN0YXRpYyBtZW1wb29sX3QgKmR3YXJmX3JlZ19wb29sOwogCi1zdGF0aWMgTElTVF9IRUFEKGR3YXJmX2NpZV9saXN0KTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBjaWVfcm9vdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHdhcmZfY2llX2xvY2spOwogCi1zdGF0aWMgTElTVF9IRUFEKGR3YXJmX2ZkZV9saXN0KTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBmZGVfcm9vdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHdhcmZfZmRlX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGR3YXJmX2NpZSAqY2FjaGVkX2NpZTsKQEAgLTMwMSw3ICszMDEsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGR3YXJmX2NpZSAqZHdhcmZfbG9va3VwX2NpZSh1bnNpZ25lZCBsb25nIGNpZV9wdHIpCiB7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llOworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBkd2FyZl9jaWUgKmNpZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwpAQCAtMzE1LDE2ICszMTYsMjQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykgewotCQlpZiAoY2llLT5jaWVfcG9pbnRlciA9PSBjaWVfcHRyKSB7Ci0JCQljYWNoZWRfY2llID0gY2llOwotCQkJYnJlYWs7CisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZV90bXA7CisKKwkJY2llX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKwkJQlVHX09OKCFjaWVfdG1wKTsKKworCQlpZiAoY2llX3B0ciA9PSBjaWVfdG1wLT5jaWVfcG9pbnRlcikgeworCQkJY2llID0gY2llX3RtcDsKKwkJCWNhY2hlZF9jaWUgPSBjaWVfdG1wOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY2llX3B0ciA8IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJCXJiX25vZGUgPSAmKCpyYl9ub2RlKS0+cmJfbGVmdDsKKwkJCWVsc2UKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX3JpZ2h0OwogCQl9CiAJfQogCi0JLyogQ291bGRuJ3QgZmluZCB0aGUgZW50cnkgaW4gdGhlIGxpc3QuICovCi0JaWYgKCZjaWUtPmxpbmsgPT0gJmR3YXJmX2NpZV9saXN0KQotCQljaWUgPSBOVUxMOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGNpZTsKQEAgLTMzNiwyNSArMzQ1LDM0IEBACiAgKi8KIHN0cnVjdCBkd2FyZl9mZGUgKmR3YXJmX2xvb2t1cF9mZGUodW5zaWduZWQgbG9uZyBwYykKIHsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGU7CisJc3RydWN0IHJiX25vZGUgKipyYl9ub2RlID0gJmZkZV9yb290LnJiX25vZGU7CisJc3RydWN0IGR3YXJmX2ZkZSAqZmRlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZkZSwgJmR3YXJmX2ZkZV9saXN0LCBsaW5rKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwl3aGlsZSAoKnJiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2ZkZSAqZmRlX3RtcDsKKwkJdW5zaWduZWQgbG9uZyB0bXBfc3RhcnQsIHRtcF9lbmQ7CiAKLQkJc3RhcnQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb247Ci0JCWVuZCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZS0+YWRkcmVzc19yYW5nZTsKKwkJZmRlX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKwkJQlVHX09OKCFmZGVfdG1wKTsKIAotCQlpZiAocGMgPj0gc3RhcnQgJiYgcGMgPCBlbmQpCi0JCQlicmVhazsKKwkJdG1wX3N0YXJ0ID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbjsKKwkJdG1wX2VuZCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb24gKyBmZGVfdG1wLT5hZGRyZXNzX3JhbmdlOworCisJCWlmIChwYyA8IHRtcF9zdGFydCkgeworCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9sZWZ0OworCQl9IGVsc2UgeworCQkJaWYgKHBjIDwgdG1wX2VuZCkgeworCQkJCWZkZSA9IGZkZV90bXA7CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX3JpZ2h0OworCQl9CiAJfQogCi0JLyogQ291bGRuJ3QgZmluZCB0aGUgZW50cnkgaW4gdGhlIGxpc3QuICovCi0JaWYgKCZmZGUtPmxpbmsgPT0gJmR3YXJmX2ZkZV9saXN0KQotCQlmZGUgPSBOVUxMOwotCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBmZGU7CkBAIC01NTIsOCArNTcwLDggQEAKICAqCW9uIHRoZSBjYWxsc3RhY2suIEVhY2ggb2YgdGhlIGxvd2VyIChvbGRlcikgc3RhY2sgZnJhbWVzIGFyZQogICoJbGlua2VkIHZpYSB0aGUgInByZXYiIG1lbWJlci4KICAqLwotc3RydWN0IGR3YXJmX2ZyYW1lICogZHdhcmZfdW53aW5kX3N0YWNrKHVuc2lnbmVkIGxvbmcgcGMsCi0JCQkJCXN0cnVjdCBkd2FyZl9mcmFtZSAqcHJldikKK3N0cnVjdCBkd2FyZl9mcmFtZSAqZHdhcmZfdW53aW5kX3N0YWNrKHVuc2lnbmVkIGxvbmcgcGMsCisJCQkJICAgICAgIHN0cnVjdCBkd2FyZl9mcmFtZSAqcHJldikKIHsKIAlzdHJ1Y3QgZHdhcmZfZnJhbWUgKmZyYW1lOwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKQEAgLTcwOCw2ICs3MjYsOCBAQAogc3RhdGljIGludCBkd2FyZl9wYXJzZV9jaWUodm9pZCAqZW50cnksIHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJICAgdW5zaWduZWQgY2hhciAqZW5kLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CisJc3RydWN0IHJiX25vZGUgKipyYl9ub2RlID0gJmNpZV9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKIAlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY291bnQ7CkBAIC04MDIsMTEgKzgyMiwzMCBAQAogCWNpZS0+aW5pdGlhbF9pbnN0cnVjdGlvbnMgPSBwOwogCWNpZS0+aW5zdHJ1Y3Rpb25zX2VuZCA9IGVuZDsKIAotCWNpZS0+bW9kID0gbW9kOwotCiAJLyogQWRkIHRvIGxpc3QgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZjaWUtPmxpbmssICZkd2FyZl9jaWVfbGlzdCk7CisKKwl3aGlsZSAoKnJiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2NpZSAqY2llX3RtcDsKKworCQljaWVfdG1wID0gcmJfZW50cnkoKnJiX25vZGUsIHN0cnVjdCBkd2FyZl9jaWUsIG5vZGUpOworCisJCXBhcmVudCA9ICpyYl9ub2RlOworCisJCWlmIChjaWUtPmNpZV9wb2ludGVyIDwgY2llX3RtcC0+Y2llX3BvaW50ZXIpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY2llLT5jaWVfcG9pbnRlciA+PSBjaWVfdG1wLT5jaWVfcG9pbnRlcikKKwkJCXJiX25vZGUgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZQorCQkJV0FSTl9PTigxKTsKKwl9CisKKwlyYl9saW5rX25vZGUoJmNpZS0+bm9kZSwgcGFyZW50LCByYl9ub2RlKTsKKwlyYl9pbnNlcnRfY29sb3IoJmNpZS0+bm9kZSwgJmNpZV9yb290KTsKKworCWlmIChtb2QgIT0gTlVMTCkKKwkJbGlzdF9hZGRfdGFpbCgmY2llLT5saW5rLCAmbW9kLT5hcmNoLmNpZV9saXN0KTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNiw2ICs4NTUsOCBAQAogCQkJICAgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJICAgdW5zaWduZWQgY2hhciAqZW5kLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CisJc3RydWN0IHJiX25vZGUgKipyYl9ub2RlID0gJmZkZV9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKIAlzdHJ1Y3QgZHdhcmZfZmRlICpmZGU7CiAJc3RydWN0IGR3YXJmX2NpZSAqY2llOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NjMsMTEgKzkwNCwzOCBAQAogCWZkZS0+aW5zdHJ1Y3Rpb25zID0gcDsKIAlmZGUtPmVuZCA9IGVuZDsKIAotCWZkZS0+bW9kID0gbW9kOwotCiAJLyogQWRkIHRvIGxpc3QuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmZmRlLT5saW5rLCAmZHdhcmZfZmRlX2xpc3QpOworCisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZV90bXA7CisJCXVuc2lnbmVkIGxvbmcgdG1wX3N0YXJ0LCB0bXBfZW5kOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisKKwkJZmRlX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKworCQlzdGFydCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbjsKKwkJZW5kID0gZmRlLT5pbml0aWFsX2xvY2F0aW9uICsgZmRlLT5hZGRyZXNzX3JhbmdlOworCisJCXRtcF9zdGFydCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb247CisJCXRtcF9lbmQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uICsgZmRlX3RtcC0+YWRkcmVzc19yYW5nZTsKKworCQlwYXJlbnQgPSAqcmJfbm9kZTsKKworCQlpZiAoc3RhcnQgPCB0bXBfc3RhcnQpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoc3RhcnQgPj0gdG1wX2VuZCkKKwkJCXJiX25vZGUgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZQorCQkJV0FSTl9PTigxKTsKKwl9CisKKwlyYl9saW5rX25vZGUoJmZkZS0+bm9kZSwgcGFyZW50LCByYl9ub2RlKTsKKwlyYl9pbnNlcnRfY29sb3IoJmZkZS0+bm9kZSwgJmZkZV9yb290KTsKKworCWlmIChtb2QgIT0gTlVMTCkKKwkJbGlzdF9hZGRfdGFpbCgmZmRlLT5saW5rLCAmbW9kLT5hcmNoLmZkZV9saXN0KTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTkxMiwxOSArOTgwLDI5IEBACiAKIHN0YXRpYyB2b2lkIGR3YXJmX3Vud2luZGVyX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgZHdhcmZfY2llICpjaWUsICpjaWVfdG1wOwotCXN0cnVjdCBkd2FyZl9mZGUgKmZkZSwgKmZkZV90bXA7CisJc3RydWN0IHJiX25vZGUgKipmZGVfcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICoqY2llX3JiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKIAogCS8qCiAJICogRGVhbGxvY2F0ZSBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBEV0FSRiB1bndpbmRlci4KIAkgKiBUcmF2ZXJzZSBhbGwgdGhlIEZERS9DSUUgbGlzdHMgYW5kIHJlbW92ZSBhbmQgZnJlZSBhbGwgdGhlCiAJICogbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNpZSwgY2llX3RtcCwgJmR3YXJmX2NpZV9saXN0LCBsaW5rKQotCQlrZnJlZShjaWUpOworCXdoaWxlICgqZmRlX3JiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZkZSwgZmRlX3RtcCwgJmR3YXJmX2ZkZV9saXN0LCBsaW5rKQorCQlmZGUgPSByYl9lbnRyeSgqZmRlX3JiX25vZGUsIHN0cnVjdCBkd2FyZl9mZGUsIG5vZGUpOworCQlyYl9lcmFzZSgqZmRlX3JiX25vZGUsICZmZGVfcm9vdCk7CiAJCWtmcmVlKGZkZSk7CisJfQorCisJd2hpbGUgKCpjaWVfcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CisKKwkJY2llID0gcmJfZW50cnkoKmNpZV9yYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKwkJcmJfZXJhc2UoKmNpZV9yYl9ub2RlLCAmY2llX3Jvb3QpOworCQlrZnJlZShjaWUpOworCX0KIAogCWttZW1fY2FjaGVfZGVzdHJveShkd2FyZl9yZWdfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZHdhcmZfZnJhbWVfY2FjaGVwKTsKQEAgLTEwMjQsNiArMTEwMiw4IEBACiAKIAkvKiBEaWQgd2UgZmluZCB0aGUgLmVoX2ZyYW1lIHNlY3Rpb24/ICovCiAJaWYgKGkgIT0gaGRyLT5lX3NobnVtKSB7CisJCUlOSVRfTElTVF9IRUFEKCZtZS0+YXJjaC5jaWVfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZtZS0+YXJjaC5mZGVfbGlzdCk7CiAJCWVyciA9IGR3YXJmX3BhcnNlX3NlY3Rpb24oKGNoYXIgKilzdGFydCwgKGNoYXIgKillbmQsIG1lKTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBwYXJzZSBEV0FSRiBpbmZvXG4iLApAQCAtMTA0NCwzOCArMTEyNCwyNiBAQAogICovCiB2b2lkIG1vZHVsZV9kd2FyZl9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGU7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llOworCXN0cnVjdCBkd2FyZl9mZGUgKmZkZSwgKmZ0bXA7CisJc3RydWN0IGR3YXJmX2NpZSAqY2llLCAqY3RtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7CiAKLWFnYWluX2NpZToKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpZSwgJmR3YXJmX2NpZV9saXN0LCBsaW5rKSB7Ci0JCWlmIChjaWUtPm1vZCA9PSBtb2QpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoJmNpZS0+bGluayAhPSAmZHdhcmZfY2llX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2llLCBjdG1wLCAmbW9kLT5hcmNoLmNpZV9saXN0LCBsaW5rKSB7CiAJCWxpc3RfZGVsKCZjaWUtPmxpbmspOworCQlyYl9lcmFzZSgmY2llLT5ub2RlLCAmY2llX3Jvb3QpOwogCQlrZnJlZShjaWUpOwotCQlnb3RvIGFnYWluX2NpZTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKLWFnYWluX2ZkZToKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZkZSwgJmR3YXJmX2ZkZV9saXN0LCBsaW5rKSB7Ci0JCWlmIChmZGUtPm1vZCA9PSBtb2QpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoJmZkZS0+bGluayAhPSAmZHdhcmZfZmRlX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmRlLCBmdG1wLCAmbW9kLT5hcmNoLmZkZV9saXN0LCBsaW5rKSB7CiAJCWxpc3RfZGVsKCZmZGUtPmxpbmspOworCQlyYl9lcmFzZSgmZmRlLT5ub2RlLCAmZmRlX3Jvb3QpOwogCQlrZnJlZShmZGUpOwotCQlnb3RvIGFnYWluX2ZkZTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwpAQCAtMTA5NCw4ICsxMTYyLDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGR3YXJmX3Vud2luZGVyX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwotCUlOSVRfTElTVF9IRUFEKCZkd2FyZl9jaWVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmR3YXJmX2ZkZV9saXN0KTsKIAogCWR3YXJmX2ZyYW1lX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJkd2FyZl9mcmFtZXMiLAogCQkJc2l6ZW9mKHN0cnVjdCBkd2FyZl9mcmFtZSksIDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGJiNTBjLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93bgotICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KLQotLyoKLSAqCVByaW50IGEgc3RyaW5nIHRocm91Z2ggdGhlIEJJT1MKLSAqLwotc3RhdGljIHZvaWQgc2hfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCi0JCQkJIHVuc2lnbmVkIGNvdW50KQotewotCXNoX2Jpb3NfY29uc29sZV93cml0ZShzLCBjb3VudCk7Ci19Ci0KLS8qCi0gKglTZXR1cCBpbml0aWFsIGJhdWQvYml0cy9wYXJpdHkuIFdlIGRvIHR3byB0aGluZ3MgaGVyZToKLSAqCS0gY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZyBmb3IgdGhlIGZpcnN0IHJzX29wZW4oKQotICoJLSBpbml0aWFsaXplIHRoZSBzZXJpYWwgcG9ydAotICoJUmV0dXJuIG5vbi16ZXJvIGlmIHdlIGRpZG4ndCBmaW5kIGEgc2VyaWFsIHBvcnQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNoX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQotewotCWludAljZmxhZyA9IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0KLQkvKgotCSAqCU5vdyBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nLgotCSAqCVRPRE86IHRoaXMgaXMgYSB0b3RhbGx5IGJvZ3VzIGNmbGFnLCBhcyB3ZSBoYXZlCi0JICoJbm8gaWRlYSB3aGF0IHNlcmlhbCBzZXR0aW5ncyB0aGUgQklPUyBpcyB1c2luZywgb3IKLQkgKglldmVuIGlmIGl0cyB1c2luZyB0aGUgc2VyaWFsIHBvcnQgYXQgYWxsLgotCSAqLwotCWNmbGFnIHw9IEIxMTUyMDAgfCBDUzggfCAvKm5vIHBhcml0eSovMDsKLQotCWNvLT5jZmxhZyA9IGNmbGFnOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBiaW9zX2NvbnNvbGUgPSB7Ci0JLm5hbWUJCT0gImJpb3MiLAotCS53cml0ZQkJPSBzaF9jb25zb2xlX3dyaXRlLAotCS5zZXR1cAkJPSBzaF9jb25zb2xlX3NldHVwLAotCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCi0JLmluZGV4CQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlOwotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqYnVmKQotewotCWludCBrZWVwX2Vhcmx5ID0gMDsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gMDsKLQotCWlmIChzdHJzdHIoYnVmLCAia2VlcCIpKQotCQlrZWVwX2Vhcmx5ID0gMTsKLQotCWlmICghc3RybmNtcChidWYsICJiaW9zIiwgNCkpCi0JCWVhcmx5X2NvbnNvbGUgPSAmYmlvc19jb25zb2xlOwotCi0JaWYgKGxpa2VseShlYXJseV9jb25zb2xlKSkgewotCQlpZiAoa2VlcF9lYXJseSkKLQkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKLQkJZWxzZQotCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0JPT1Q7Ci0JCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZWFybHlwcmludGsiLCBzZXR1cF9lYXJseV9wcmludGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwppbmRleCBhNDhjZGVkLi4zMGUxMzE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwpAQCAtMzk5LDEyICszOTksMyBAQAogCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KLSNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwotfQotI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUwppbmRleCAxMTUxZWNkLi5mZTBiNzQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TCkBAIC0zLDYgKzMsNyBAQAogICogIGFyY2gvc2gva2VybmVsL2hlYWQuUwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYSAmIEtheiBLb2ppbWEKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZwogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMyw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8Y3B1L21tdV9jb250ZXh0Lmg+CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKICNkZWZpbmUgU1lOQ08oKQkJc3luY28KQEAgLTMzLDcgKzM2LDcgQEAKIAkubG9uZwkxCQkvKiBMT0FERVJfVFlQRSAqLwogCS5sb25nCTB4MDAwMDAwMDAJLyogSU5JVFJEX1NUQVJUICovCiAJLmxvbmcJMHgwMDAwMDAwMAkvKiBJTklUUkRfU0laRSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSAmJiBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCisjaWZkZWYgQ09ORklHXzMyQklUCiAJLmxvbmcJMHg1MzQ1M2YwMCArIDMyCS8qICJTRT8iID0gMzIgYml0ICovCiAjZWxzZQogCS5sb25nCTB4NTM0NTNmMDAgKyAyOQkvKiAiU0U/IiA9IDI5IGJpdCAqLwpAQCAtODIsNiArODUsMjA5IEBACiAJbGRjCXIwLCByN19iYW5rCSEgLi4uIGFuZCBpbml0aWFsIHRocmVhZF9pbmZvCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QTUIKKy8qCisgKiBSZWNvbmZpZ3VyZSB0aGUgaW5pdGlhbCBQTUIgbWFwcGluZ3Mgc2V0dXAgYnkgdGhlIGhhcmR3YXJlLgorICoKKyAqIFdoZW4gd2UgYm9vdCBpbiAzMi1iaXQgTU1VIG1vZGUgdGhlcmUgYXJlIDIgUE1CIGVudHJpZXMgYWxyZWFkeQorICogc2V0dXAgZm9yIHVzLgorICoKKyAqIEVudHJ5ICAgICAgIFZQTgkgICBQUE4JICAgIFYJU1oJQwlVQglXVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIDAJICAgIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAgIDEgIDUxMk1CCTEJMAkxCisgKiAgIDEJICAgIDB4QTAwMDAwMDAgMHgwMDAwMDAwMCAgIDEgIDUxMk1CCTAJMAkwCisgKgorICogQnV0IHdlIHJlcHJvZ3JhbSB0aGVtIGhlcmUgYmVjYXVzZSB3ZSB3YW50IGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgorICogb3VyIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZSBpbml0aWFsIG1hcHBpbmdzIG1heSBub3QgbWFwIFBBR0VfT0ZGU0VUCisgKiB0byBfX01FTU9SWV9TVEFSVCAob3IgZXZlbiBtYXAgYWxsIG9mIG91ciBSQU0pLgorICoKKyAqIE9uY2Ugd2UndmUgc2V0dXAgY2FjaGVkIGFuZCB1bmNhY2hlZCBtYXBwaW5ncyB3ZSBjbGVhciB0aGUgcmVzdCBvZiB0aGUKKyAqIFBNQiBlbnRyaWVzLiBUaGlzIGNsZWFyaW5nIGFsc28gZGVhbHMgd2l0aCB0aGUgZmFjdCB0aGF0IFBNQiBlbnRyaWVzCisgKiBjYW4gcGVyc2lzdCBhY3Jvc3MgcmVib290cy4gVGhlIFBNQiBjb3VsZCBoYXZlIGJlZW4gbGVmdCBpbiBhbnkgc3RhdGUKKyAqIHdoZW4gdGhlIHJlYm9vdCBvY2N1cnJlZCwgc28gdG8gYmUgc2FmZSB3ZSBjbGVhciBhbGwgZW50cmllcyBhbmQgc3RhcnQKKyAqIHdpdGggd2l0aCBhIGNsZWFuIHNsYXRlLgorICoKKyAqIFRoZSB1bmNhY2hlZCBtYXBwaW5nIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBzbWFsbGVzdCBwb3NzaWJsZQorICogbWFwcGluZyB3aXRoIGEgc2luZ2xlIHVuYnVmZmVyYWJsZSBwYWdlLiBPbmx5IHRoZSBrZXJuZWwgdGV4dCBuZWVkcyB0bworICogYmUgY292ZXJlZCB2aWEgdGhlIHVuY2FjaGVkIG1hcHBpbmcgc28gdGhhdCBjZXJ0YWluIGZ1bmN0aW9ucyBjYW4gYmUKKyAqIHJ1biB1bmNhY2hlZC4KKyAqCisgKiBEcml2ZXJzIGFuZCB0aGUgbGlrZSB0aGF0IGhhdmUgcHJldmlvdXNseSBhYnVzZWQgdGhlIDE6MSBpZGVudGl0eQorICogbWFwcGluZyBhcmUgdW5zdXBwb3J0ZWQgaW4gMzItYml0IG1vZGUgYW5kIG11c3Qgc3BlY2lmeSB0aGVpciBjYWNoaW5nCisgKiBwcmVmZXJlbmNlIHdoZW4gcGFnZSB0YWJsZXMgYXJlIGNvbnN0cnVjdGVkLgorICoKKyAqIFRoaXMgZnJlZXMgdXAgdGhlIFAyIHNwYWNlIGZvciBtb3JlIG5lZmFyaW91cyBwdXJwb3Nlcy4KKyAqCisgKiBSZWdpc3RlciB1dGlsaXphdGlvbiBpcyBhcyBmb2xsb3dzOgorICoKKyAqCXIwID0gUE1CX0RBVEEgZGF0YSBmaWVsZAorICoJcjEgPSBQTUJfREFUQSBhZGRyZXNzIGZpZWxkCisgKglyMiA9IFBNQl9BRERSIGRhdGEgZmllbGQKKyAqCXIzID0gUE1CX0FERFIgYWRkcmVzcyBmaWVsZAorICoJcjQgPSBQTUJfRV9TSElGVAorICoJcjUgPSByZW1haW5pbmcgYW1vdW50IG9mIFJBTSB0byBtYXAKKyAqCXI2ID0gUE1CIG1hcHBpbmcgc2l6ZSB3ZSdyZSB0cnlpbmcgdG8gdXNlCisgKglyNyA9IGNhY2hlZF90b191bmNhY2hlZAorICoJcjggPSBzY3JhdGNoIHJlZ2lzdGVyCisgKglyOSA9IHNjcmF0Y2ggcmVnaXN0ZXIKKyAqCXIxMCA9IG51bWJlciBvZiBQTUIgZW50cmllcyB3ZSd2ZSBzZXR1cAorICovCisKKwltb3YubAkuTE1NVUNSLCByMQkvKiBGbHVzaCB0aGUgVExCICovCisJbW92LmwJQHIxLCByMAorCW9yCSNNTVVDUl9USSwgcjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAkuTE1FTU9SWV9TSVpFLCByNQorCisJbW92CSNQTUJfRV9TSElGVCwgcjAKKwltb3YJIzB4MSwgcjQKKwlzaGxkCXIwLCByNAorCisJbW92LmwJLkxGSVJTVF9EQVRBX0VOVFJZLCByMAorCW1vdi5sCS5MUE1CX0RBVEEsIHIxCisJbW92LmwJLkxGSVJTVF9BRERSX0VOVFJZLCByMgorCW1vdi5sCS5MUE1CX0FERFIsIHIzCisKKwkvKgorCSAqIEZpcnN0IHdlIG5lZWQgdG8gd2FsayB0aGUgUE1CIGFuZCBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkKKwkgKiBleGlzdGluZyBtYXBwaW5ncyB0aGF0IG1hdGNoIHRoZSBpbml0aWFsIG1hcHBpbmdzIFZQTi9QUE4uCisJICogSWYgdGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgYnkgdGhlIGJvb3Rsb2FkZXIsIHdlCisJICogZG9uJ3QgYm90aGVyIHNldHRpbmcgdXAgbmV3IGVudHJpZXMgaGVyZSwgYW5kIGxldCB0aGUgbGF0ZSBQTUIKKwkgKiBpbml0aWFsaXphdGlvbiB0YWtlIGNhcmUgb2YgdGhpbmdzIGluc3RlYWQuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgbWF5IG5lZWQgdG8gY29hbGVzY2UgYW5kIG1lcmdlIGVudHJpZXMgaW4gb3JkZXIKKwkgKiB0byByZWNsYWltIG1vcmUgYXZhaWxhYmxlIFBNQiBzbG90cywgd2hpY2ggaXMgbXVjaCBtb3JlIHRoYW4KKwkgKiB3ZSB3YW50IHRvIGRvIGF0IHRoaXMgZWFybHkgc3RhZ2UuCisJICovCisJbW92CSMwLCByMTAKKwltb3YJI05SX1BNQl9FTlRSSUVTLCByOQorCisJbW92CXIxLCByNwkJLyogdGVtcG9yYXJ5IFBNQl9EQVRBIGl0ZXIgKi8KKworLkx2YWxpZGF0ZV9leGlzdGluZ19tYXBwaW5nczoKKworCW1vdi5sCUByNywgcjgKKwlhbmQJcjAsIHI4CisJY21wL2VxCXIwLCByOAkJLyogQ2hlY2sgZm9yIHZhbGlkIF9fTUVNT1JZX1NUQVJUIG1hcHBpbmdzICovCisJYnQJLkxwbWJfZG9uZQorCisJYWRkCSMxLCByMTAJCS8qIEluY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisJY21wL2VxCXI5LCByMTAKKwliZi9zCS5MdmFsaWRhdGVfZXhpc3RpbmdfbWFwcGluZ3MKKwkgYWRkCXI0LCByNwkJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9EQVRBIGVudHJ5ICovCisKKwkvKgorCSAqIElmIHdlJ3ZlIGZhbGxlbiB0aHJvdWdoLCBjb250aW51ZSB3aXRoIHNldHRpbmcgdXAgdGhlIGluaXRpYWwKKwkgKiBtYXBwaW5ncy4KKwkgKi8KKworCW1vdglyNSwgcjcJCS8qIGNhY2hlZF90b191bmNhY2hlZCAqLworCW1vdgkjMCwgcjEwCisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCS8qCisJICogVW5jYWNoZWQgbWFwcGluZworCSAqLworCW1vdgkjKFBNQl9TWl8xNk0gPj4gMiksIHI5CisJc2hsbDIJcjkKKworCW1vdgkjKFBNQl9VQiA+PiA4KSwgcjgKKwlzaGxsOAlyOAorCisJb3IJcjAsIHI4CisJb3IJcjksIHI4CisJbW92LmwJcjgsIEByMQorCW1vdglyMiwgcjgKKwlhZGQJcjcsIHI4CisJbW92LmwJcjgsIEByMworCisJYWRkCXI0LCByMQorCWFkZAlyNCwgcjMKKwlhZGQJIzEsIHIxMAorI2VuZGlmCisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBhdmFpbGFibGUgc2l6ZXMgZnJvbSBsYXJnZXN0IHRvCisgKiBzbWFsbGVzdCBmb3IgY29uc3RydWN0aW5nIHRoZSBjYWNoZWQgbWFwcGluZy4KKyAqLworI2RlZmluZSBfX1BNQl9JVEVSX0JZX1NJWkUoc2l6ZSkJCQlcCisuTCMjc2l6ZToJCQkJCQlcCisJbW92CSMoc2l6ZSA+PiA0KSwgcjY7CQkJXAorCXNobGwxNglyNjsJCQkJCVwKKwlzaGxsOAlyNjsJCQkJCVwKKwkJCQkJCQlcCisJY21wL2hpCXI1LCByNjsJCQkJCVwKKwlidAk5OTk5ZjsJCQkJCVwKKwkJCQkJCQlcCisJbW92CSMoUE1CX1NaXyMjc2l6ZSMjTSA+PiAyKSwgcjk7CQlcCisJc2hsbDIJcjk7CQkJCQlcCisJCQkJCQkJXAorCS8qCQkJCQkJXAorCSAqIENhY2hlZCBtYXBwaW5nCQkJCVwKKwkgKi8JCQkJCQlcCisJbW92CSNQTUJfQywgcjg7CQkJCVwKKwlvcglyMCwgcjg7CQkJCQlcCisJb3IJcjksIHI4OwkJCQkJXAorCW1vdi5sCXI4LCBAcjE7CQkJCVwKKwltb3YubAlyMiwgQHIzOwkJCQlcCisJCQkJCQkJXAorCS8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBQTUJfREFUQSBlbnRyeSAqLwlcCisJYWRkCXI0LCByMTsJCQkJCVwKKwkvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgUE1CX0FERFIgZW50cnkgKi8JXAorCWFkZAlyNCwgcjM7CQkJCQlcCisJLyogSW5jcmVtZW50IG51bWJlciBvZiBQTUIgZW50cmllcyAqLwkJXAorCWFkZAkjMSwgcjEwOwkJCQlcCisJCQkJCQkJXAorCXN1YglyNiwgcjU7CQkJCQlcCisJYWRkCXI2LCByMDsJCQkJCVwKKwlhZGQJcjYsIHIyOwkJCQkJXAorCQkJCQkJCVwKKwlicmEJLkwjI3NpemU7CQkJCVwKKzk5OTk6CisKKwlfX1BNQl9JVEVSX0JZX1NJWkUoNTEyKQorCV9fUE1CX0lURVJfQllfU0laRSgxMjgpCisJX19QTUJfSVRFUl9CWV9TSVpFKDY0KQorCV9fUE1CX0lURVJfQllfU0laRSgxNikKKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBjYW4gYWNjZXNzIGl0LCB1cGRhdGUgY2FjaGVkX3RvX3VuY2FjaGVkIGFuZAorCSAqIHVuY2FjaGVkX3NpemUuCisJICovCisJbW92LmwJLkxjYWNoZWRfdG9fdW5jYWNoZWQsIHIwCisJbW92LmwJcjcsIEByMAorCisJbW92LmwJLkx1bmNhY2hlZF9zaXplLCByMAorCW1vdgkjMSwgcjcKKwlzaGxsMTYJcjcKKwlzaGxsOAlyNworCW1vdi5sCXI3LCBAcjAKKyNlbmRpZgorCisJLyoKKwkgKiBDbGVhciB0aGUgcmVtYWluaW5nIFBNQiBlbnRyaWVzLgorCSAqCisJICogcjMgPSBlbnRyeSB0byBiZWdpbiBjbGVhcmluZyBmcm9tCisJICogcjEwID0gbnVtYmVyIG9mIGVudHJpZXMgd2UndmUgc2V0dXAgc28gZmFyCisJICovCisJbW92CSMwLCByMQorCW1vdgkjTlJfUE1CX0VOVFJJRVMsIHIwCisKKy5MYWdhaW46CisJbW92LmwJcjEsIEByMwkJLyogQ2xlYXIgUE1CX0FERFIgZW50cnkgKi8KKwlhZGQJIzEsIHIxMAkJLyogSW5jcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8KKwljbXAvZXEJcjAsIHIxMAorCWJmL3MJLkxhZ2FpbgorCSBhZGQJcjQsIHIzCQkvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgUE1CX0FERFIgZW50cnkgKi8KKworCW1vdi5sCTZmLCByMAorCWljYmkJQHIwCisKKy5McG1iX2RvbmU6CisjZW5kaWYgLyogQ09ORklHX1BNQiAqLworCiAjaWZuZGVmIENPTkZJR19TSF9OT19CU1NfSU5JVAogCS8qCiAJICogRG9uJ3QgY2xlYXIgQlNTIGlmIHJ1bm5pbmcgb24gc2xvdyBwbGF0Zm9ybXMgc3VjaCBhcyBhbiBSVEwgc2ltdWxhdGlvbiwKQEAgLTEzMSwzICszMzcsMTYgQEAKIDU6CS5sb25nCXN0YXJ0X2tlcm5lbAogNjoJLmxvbmcJc2hfY3B1X2luaXQKIDc6CS5sb25nCWluaXRfdGhyZWFkX3VuaW9uCisKKyNpZmRlZiBDT05GSUdfUE1CCisuTFBNQl9BRERSOgkJLmxvbmcJUE1CX0FERFIKKy5MUE1CX0RBVEE6CQkubG9uZwlQTUJfREFUQQorLkxGSVJTVF9BRERSX0VOVFJZOgkubG9uZwlQQUdFX09GRlNFVCB8IFBNQl9WCisuTEZJUlNUX0RBVEFfRU5UUlk6CS5sb25nCV9fTUVNT1JZX1NUQVJUIHwgUE1CX1YKKy5MTU1VQ1I6CQkubG9uZwlNTVVDUgorLkxNRU1PUllfU0laRToJCS5sb25nCV9fTUVNT1JZX1NJWkUKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworLkxjYWNoZWRfdG9fdW5jYWNoZWQ6CS5sb25nCWNhY2hlZF90b191bmNhY2hlZAorLkx1bmNhY2hlZF9zaXplOgkubG9uZwl1bmNhY2hlZF9zaXplCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9zaC9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDNlYTc2NTguLmRlZmQ4NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTIyMCw3ICsyMjAsNiBAQAogCWFkZC5sCXIyMiwgcjYzLCByMjIJCS8qIFNpZ24gZXh0ZW5kICovCiAJcHV0Y2ZnCXIyMSwgMCwgcjIyCQkvKiBTZXQgTU1VRFJbMF0uUFRFSCAqLwogCi0jaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwogCS8qCiAJICogU2V0dXAgYSBEVExCIHRyYW5zbGF0aW9uIGZvciBTQ0lGIHBoeXMuCiAJICovCkBAIC0yMzEsNyArMjMwLDYgQEAKIAltb3ZpICAgIDB4ZmEwMywgcjIyCS8qIDB4ZmEwMzAwMDAsIGZpeGVkIFNDSUYgdmlydCAqLwogCXNob3JpICAgMHgwMDAzLCByMjIKIAlwdXRjZmcgIHIyMSwgMCwgcjIyCS8qIFBURUggbGFzdCAqLwotI2VuZGlmCiAKIAkvKgogCSAqIFNldCBjYWNoZSBiZWhhdmlvdXJzLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjE3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMKKyAqCisgKiBVbmlmaWVkIGtlcm5lbC91c2VyLXNwYWNlIGhhcmR3YXJlIGJyZWFrcG9pbnQgZmFjaWxpdHkgZm9yIHRoZSBvbi1jaGlwIFVCQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiBTdG9yZXMgdGhlIGJyZWFrcG9pbnRzIGN1cnJlbnRseSBpbiB1c2Ugb24gZWFjaCBicmVha3BvaW50IGFkZHJlc3MKKyAqIHJlZ2lzdGVyIGZvciBlYWNoIGNwdXMKKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIGJwX3Blcl9yZWdbSEJQX05VTV0pOworCisvKgorICogQSBkdW1teSBwbGFjZWhvbGRlciBmb3IgZWFybHkgYWNjZXNzZXMgdW50aWwgdGhlIENQVXMgZ2V0IGEgY2hhbmNlIHRvCisgKiByZWdpc3RlciB0aGVpciBVQkNzIGxhdGVyIGluIHRoZSBib290IHByb2Nlc3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfdWJjIHViY19kdW1teSA9IHsgLm51bV9ldmVudHMgPSAwIH07CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdWJjICpzaF91YmMgX19yZWFkX21vc3RseSA9ICZ1YmNfZHVtbXk7CisKKy8qCisgKiBJbnN0YWxsIGEgcGVyZiBjb3VudGVyIGJyZWFrcG9pbnQuCisgKgorICogV2Ugc2VlayBhIGZyZWUgVUJDIGNoYW5uZWwgYW5kIHVzZSBpdCBmb3IgdGhpcyBicmVha3BvaW50LgorICoKKyAqIEF0b21pYzogd2UgaG9sZCB0aGUgY291bnRlci0+Y3R4LT5sb2NrIGFuZCB3ZSBvbmx5IGhhbmRsZSB2YXJpYWJsZXMKKyAqIGFuZCByZWdpc3RlcnMgbG9jYWwgdG8gdGhpcyBjcHUuCisgKi8KK2ludCBhcmNoX2luc3RhbGxfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hfdWJjLT5udW1fZXZlbnRzOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKipzbG90ID0gJl9fZ2V0X2NwdV92YXIoYnBfcGVyX3JlZ1tpXSk7CisKKwkJaWYgKCEqc2xvdCkgeworCQkJKnNsb3QgPSBicDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKFdBUk5fT05DRShpID09IHNoX3ViYy0+bnVtX2V2ZW50cywgIkNhbid0IGZpbmQgYW55IGJyZWFrcG9pbnQgc2xvdCIpKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2xrX2VuYWJsZShzaF91YmMtPmNsayk7CisJc2hfdWJjLT5lbmFibGUoaW5mbywgaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVuaW5zdGFsbCB0aGUgYnJlYWtwb2ludCBjb250YWluZWQgaW4gdGhlIGdpdmVuIGNvdW50ZXIuCisgKgorICogRmlyc3Qgd2Ugc2VhcmNoIHRoZSBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVyIGl0IHVzZXMgYW5kIHRoZW4gd2UgZGlzYWJsZQorICogaXQuCisgKgorICogQXRvbWljOiB3ZSBob2xkIHRoZSBjb3VudGVyLT5jdHgtPmxvY2sgYW5kIHdlIG9ubHkgaGFuZGxlIHZhcmlhYmxlcworICogYW5kIHJlZ2lzdGVycyBsb2NhbCB0byB0aGlzIGNwdS4KKyAqLwordm9pZCBhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaF91YmMtPm51bV9ldmVudHM7IGkrKykgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqKnNsb3QgPSAmX19nZXRfY3B1X3ZhcihicF9wZXJfcmVnW2ldKTsKKworCQlpZiAoKnNsb3QgPT0gYnApIHsKKwkJCSpzbG90ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKFdBUk5fT05DRShpID09IHNoX3ViYy0+bnVtX2V2ZW50cywgIkNhbid0IGZpbmQgYW55IGJyZWFrcG9pbnQgc2xvdCIpKQorCQlyZXR1cm47CisKKwlzaF91YmMtPmRpc2FibGUoaW5mbywgaSk7CisJY2xrX2Rpc2FibGUoc2hfdWJjLT5jbGspOworfQorCitzdGF0aWMgaW50IGdldF9oYnBfbGVuKHUxNiBoYnBfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5faW5fYnl0ZXMgPSAwOworCisJc3dpdGNoIChoYnBfbGVuKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8xOgorCQlsZW5faW5fYnl0ZXMgPSAxOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzI6CisJCWxlbl9pbl9ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fNDoKKwkJbGVuX2luX2J5dGVzID0gNDsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl84OgorCQlsZW5faW5fYnl0ZXMgPSA4OworCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbl9pbl9ieXRlczsKK30KKworLyoKKyAqIENoZWNrIGZvciB2aXJ0dWFsIGFkZHJlc3MgaW4gdXNlciBzcGFjZS4KKyAqLworaW50IGFyY2hfY2hlY2tfdmFfaW5fdXNlcnNwYWNlKHVuc2lnbmVkIGxvbmcgdmEsIHUxNiBoYnBfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBnZXRfaGJwX2xlbihoYnBfbGVuKTsKKworCXJldHVybiAodmEgPD0gVEFTS19TSVpFIC0gbGVuKTsKK30KKworLyoKKyAqIENoZWNrIGZvciB2aXJ0dWFsIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlLgorICovCitzdGF0aWMgaW50IGFyY2hfY2hlY2tfdmFfaW5fa2VybmVsc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTggaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gZ2V0X2hicF9sZW4oaGJwX2xlbik7CisKKwlyZXR1cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7Cit9CisKKy8qCisgKiBTdG9yZSBhIGJyZWFrcG9pbnQncyBlbmNvZGVkIGFkZHJlc3MsIGxlbmd0aCwgYW5kIHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgYXJjaF9zdG9yZV9pbmZvKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKworCS8qCisJICogVXNlci1zcGFjZSByZXF1ZXN0cyB3aWxsIGFsd2F5cyBoYXZlIHRoZSBhZGRyZXNzIGZpZWxkIHBvcHVsYXRlZAorCSAqIEZvciBrZXJuZWwtYWRkcmVzc2VzLCBlaXRoZXIgdGhlIGFkZHJlc3Mgb3Igc3ltYm9sIG5hbWUgY2FuIGJlCisJICogc3BlY2lmaWVkLgorCSAqLworCWlmIChpbmZvLT5uYW1lKQorCQlpbmZvLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpa2FsbHN5bXNfbG9va3VwX25hbWUoaW5mby0+bmFtZSk7CisJaWYgKGluZm8tPmFkZHJlc3MpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCBzaF9sZW4sIGludCBzaF90eXBlLAorCQkJICAgaW50ICpnZW5fbGVuLCBpbnQgKmdlbl90eXBlKQoreworCS8qIExlbiAqLworCXN3aXRjaCAoc2hfbGVuKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8xOgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzE7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMjoKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8yOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzQ6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl84OgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKHNoX3R5cGUpIHsKKwljYXNlIFNIX0JSRUFLUE9JTlRfUkVBRDoKKwkJKmdlbl90eXBlID0gSFdfQlJFQUtQT0lOVF9SOworCWNhc2UgU0hfQlJFQUtQT0lOVF9XUklURToKKwkJKmdlbl90eXBlID0gSFdfQlJFQUtQT0lOVF9XOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfUlc6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXJjaF9idWlsZF9icF9pbmZvKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKworCWluZm8tPmFkZHJlc3MgPSBicC0+YXR0ci5icF9hZGRyOworCisJLyogTGVuICovCisJc3dpdGNoIChicC0+YXR0ci5icF9sZW4pIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzE6CisJCWluZm8tPmxlbiA9IFNIX0JSRUFLUE9JTlRfTEVOXzE7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fMjoKKwkJaW5mby0+bGVuID0gU0hfQlJFQUtQT0lOVF9MRU5fMjsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl80OgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl80OworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzg6CisJCWluZm8tPmxlbiA9IFNIX0JSRUFLUE9JTlRfTEVOXzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKGJwLT5hdHRyLmJwX3R5cGUpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfUjoKKwkJaW5mby0+dHlwZSA9IFNIX0JSRUFLUE9JTlRfUkVBRDsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1c6CisJCWluZm8tPnR5cGUgPSBTSF9CUkVBS1BPSU5UX1dSSVRFOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKKwkJaW5mby0+dHlwZSA9IFNIX0JSRUFLUE9JTlRfUlc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVmFsaWRhdGUgdGhlIGFyY2gtc3BlY2lmaWMgSFcgQnJlYWtwb2ludCByZWdpc3RlciBzZXR0aW5ncworICovCitpbnQgYXJjaF92YWxpZGF0ZV9od2JrcHRfc2V0dGluZ3Moc3RydWN0IHBlcmZfZXZlbnQgKmJwLAorCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisJdW5zaWduZWQgaW50IGFsaWduOworCWludCByZXQ7CisKKwlyZXQgPSBhcmNoX2J1aWxkX2JwX2luZm8oYnApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChpbmZvLT5sZW4pIHsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzE6CisJCWFsaWduID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8yOgorCQlhbGlnbiA9IDE7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fNDoKKwkJYWxpZ24gPSAzOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzg6CisJCWFsaWduID0gNzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhcmNoX3N0b3JlX2luZm8oYnApOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBhcHByb3ByaWF0ZQorCSAqIGZvciB0aGUgYWxpZ25tZW50IGltcGxpZWQgYnkgbGVuLgorCSAqLworCWlmIChpbmZvLT5hZGRyZXNzICYgYWxpZ24pCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgdGhhdCB0aGUgdmlydHVhbCBhZGRyZXNzIGlzIGluIHRoZSBwcm9wZXIgcmFuZ2UgKi8KKwlpZiAodHNrKSB7CisJCWlmICghYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UoaW5mby0+YWRkcmVzcywgaW5mby0+bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCWlmICghYXJjaF9jaGVja192YV9pbl9rZXJuZWxzcGFjZShpbmZvLT5hZGRyZXNzLCBpbmZvLT5sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSB1c2VyIGJyZWFrcG9pbnRzIHVzZWQgYnkgcHRyYWNlCisgKi8KK3ZvaWQgZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaW50IGk7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdHNrLT50aHJlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hfdWJjLT5udW1fZXZlbnRzOyBpKyspIHsKKwkJdW5yZWdpc3Rlcl9od19icmVha3BvaW50KHQtPnB0cmFjZV9icHNbaV0pOworCQl0LT5wdHJhY2VfYnBzW2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGh3X2JyZWFrcG9pbnRfaGFuZGxlcihzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MpCit7CisJaW50IGNwdSwgaSwgcmMgPSBOT1RJRllfU1RPUDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJdW5zaWduZWQgaW50IGNtZiwgcmVzdW1lX21hc2s7CisKKwkvKgorCSAqIERvIGFuIGVhcmx5IHJldHVybiBpZiBub25lIG9mIHRoZSBjaGFubmVscyB0cmlnZ2VyZWQuCisJICovCisJY21mID0gc2hfdWJjLT50cmlnZ2VyZWRfbWFzaygpOworCWlmICh1bmxpa2VseSghY21mKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJLyoKKwkgKiBCeSBkZWZhdWx0LCByZXN1bWUgYWxsIG9mIHRoZSBhY3RpdmUgY2hhbm5lbHMuCisJICovCisJcmVzdW1lX21hc2sgPSBzaF91YmMtPmFjdGl2ZV9tYXNrKCk7CisKKwkvKgorCSAqIERpc2FibGUgYnJlYWtwb2ludHMgZHVyaW5nIGV4Y2VwdGlvbiBoYW5kbGluZy4KKwkgKi8KKwlzaF91YmMtPmRpc2FibGVfYWxsKCk7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZXZlbnRfbWFzayA9ICgxIDw8IGkpOworCisJCWlmIChsaWtlbHkoIShjbWYgJiBldmVudF9tYXNrKSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGUgY291bnRlciBtYXkgYmUgY29uY3VycmVudGx5IHJlbGVhc2VkIGJ1dCB0aGF0IGNhbiBvbmx5CisJCSAqIG9jY3VyIGZyb20gYSBjYWxsX3JjdSgpIHBhdGguIFdlIGNhbiB0aGVuIHNhZmVseSBmZXRjaAorCQkgKiB0aGUgYnJlYWtwb2ludCwgdXNlIGl0cyBjYWxsYmFjaywgdG91Y2ggaXRzIGNvdW50ZXIKKwkJICogd2hpbGUgd2UgYXJlIGluIGFuIHJjdV9yZWFkX2xvY2soKSBwYXRoLgorCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOworCisJCWJwID0gcGVyX2NwdShicF9wZXJfcmVnW2ldLCBjcHUpOworCQlpZiAoYnApCisJCQlyYyA9IE5PVElGWV9ET05FOworCisJCS8qCisJCSAqIFJlc2V0IHRoZSBjb25kaXRpb24gbWF0Y2ggZmxhZyB0byBkZW5vdGUgY29tcGxldGlvbiBvZgorCQkgKiBleGNlcHRpb24gaGFuZGxpbmcuCisJCSAqLworCQlzaF91YmMtPmNsZWFyX3RyaWdnZXJlZF9tYXNrKGV2ZW50X21hc2spOworCisJCS8qCisJCSAqIGJwIGNhbiBiZSBOVUxMIGR1ZSB0byBjb25jdXJyZW50IHBlcmYgY291bnRlcgorCQkgKiByZW1vdmluZy4KKwkJICovCisJCWlmICghYnApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBEb24ndCByZXN0b3JlIHRoZSBjaGFubmVsIGlmIHRoZSBicmVha3BvaW50IGlzIGZyb20KKwkJICogcHRyYWNlLCBhcyBpdCBhbHdheXMgb3BlcmF0ZXMgaW4gb25lLXNob3QgbW9kZS4KKwkJICovCisJCWlmIChicC0+b3ZlcmZsb3dfaGFuZGxlciA9PSBwdHJhY2VfdHJpZ2dlcmVkKQorCQkJcmVzdW1lX21hc2sgJj0gfigxIDw8IGkpOworCisJCXBlcmZfYnBfZXZlbnQoYnAsIGFyZ3MtPnJlZ3MpOworCisJCS8qIERlbGl2ZXIgdGhlIHNpZ25hbCB0byB1c2Vyc3BhY2UgKi8KKwkJaWYgKGFyY2hfY2hlY2tfdmFfaW5fdXNlcnNwYWNlKGJwLT5hdHRyLmJwX2FkZHIsCisJCQkJCSAgICAgICBicC0+YXR0ci5icF9sZW4pKSB7CisJCQlzaWdpbmZvX3QgaW5mbzsKKworCQkJaW5mby5zaV9zaWdubyA9IGFyZ3MtPnNpZ25yOworCQkJaW5mby5zaV9lcnJubyA9IG5vdGlmaWVyX3RvX2Vycm5vKHJjKTsKKwkJCWluZm8uc2lfY29kZSA9IFRSQVBfSFdCS1BUOworCisJCQlmb3JjZV9zaWdfaW5mbyhhcmdzLT5zaWduciwgJmluZm8sIGN1cnJlbnQpOworCQl9CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJaWYgKGNtZiA9PSAwKQorCQlyYyA9IE5PVElGWV9ET05FOworCisJc2hfdWJjLT5lbmFibGVfYWxsKHJlc3VtZV9tYXNrKTsKKworCXB1dF9jcHUoKTsKKworCXJldHVybiByYzsKK30KKworQlVJTERfVFJBUF9IQU5ETEVSKGJyZWFrcG9pbnQpCit7CisJdW5zaWduZWQgbG9uZyBleCA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CisJVFJBUF9IQU5ETEVSX0RFQ0w7CisKKwlub3RpZnlfZGllKERJRV9CUkVBS1BPSU5ULCAiYnJlYWtwb2ludCIsIHJlZ3MsIDAsIGV4LCBTSUdUUkFQKTsKK30KKworLyoKKyAqIEhhbmRsZSBkZWJ1ZyBleGNlcHRpb24gbm90aWZpY2F0aW9ucy4KKyAqLworaW50IF9fa3Byb2JlcyBod19icmVha3BvaW50X2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBkYXRhOworCisJaWYgKHZhbCAhPSBESUVfQlJFQUtQT0lOVCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJLyoKKwkgKiBJZiB0aGUgYnJlYWtwb2ludCBoYXNuJ3QgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFVCQywgaXQncworCSAqIHByb2JhYmx5IGZyb20gYSBkZWJ1Z2dlciwgc28gZG9uJ3QgZG8gYW55dGhpbmcgbW9yZSBoZXJlLgorCSAqCisJICogVGhpcyBhbHNvIHBlcm1pdHMgdGhlIFVCQyBpbnRlcmZhY2UgY2xvY2sgdG8gcmVtYWluIG9mZiBmb3IKKwkgKiBub24tVUJDIGJyZWFrcG9pbnRzLCBhcyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB0cmlnZ2VyZWQKKwkgKiBvciBhY3RpdmUgY2hhbm5lbCBtYXNrcy4KKwkgKi8KKwlpZiAoYXJncy0+dHJhcG5yICE9IHNoX3ViYy0+dHJhcF9ucikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJcmV0dXJuIGh3X2JyZWFrcG9pbnRfaGFuZGxlcihkYXRhKTsKK30KKwordm9pZCBod19icmVha3BvaW50X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwkvKiBUT0RPICovCit9CisKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJLyogVE9ETyAqLworfQorCitpbnQgcmVnaXN0ZXJfc2hfdWJjKHN0cnVjdCBzaF91YmMgKnViYykKK3sKKwkvKiBCYWlsIGlmIGl0J3MgYWxyZWFkeSBhc3NpZ25lZCAqLworCWlmIChzaF91YmMgIT0gJnViY19kdW1teSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlzaF91YmMgPSB1YmM7CisKKwlwcl9pbmZvKCJIVyBCcmVha3BvaW50czogJXMgVUJDIHN1cHBvcnQgcmVnaXN0ZXJlZFxuIiwgdWJjLT5uYW1lKTsKKworCVdBUk5fT04odWJjLT5udW1fZXZlbnRzID4gSEJQX05VTSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCA2YjNkNzA2Li4wZmQ3YjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC0yMCwxMCArMjAsOSBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLXN0YXRpYyBpbnQgaGx0X2NvdW50ZXI7CiB2b2lkICgqcG1faWRsZSkodm9pZCkgPSBOVUxMOwotdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7Ci1FWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CisKK3N0YXRpYyBpbnQgaGx0X2NvdW50ZXI7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vaGx0X3NldHVwKGNoYXIgKl9fdW51c2VkKQogewpAQCAtMTMxLDYgKzEzMCwxNSBAQAogewogfQogCit2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqdW51c2VkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOworCisJZm9yICg7OykKKwkJY3B1X3NsZWVwKCk7Cit9CisKIC8qCiAgKiBjcHVfaWRsZV93YWl0IC0gVXNlZCB0byBlbnN1cmUgdGhhdCBhbGwgdGhlIENQVXMgZGlzY2FyZCBvbGQgdmFsdWUgb2YKICAqIHBtX2lkbGUgYW5kIHVwZGF0ZSB0byBuZXcgcG1faWRsZSB2YWx1ZS4gUmVxdWlyZWQgd2hpbGUgY2hhbmdpbmcgcG1faWRsZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCmluZGV4IDY5YmU2MDMuLjRhOGJiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKQEAgLTE4NCwzMSArMTg0LDMxIEBACiAKIAlzd2l0Y2ggKHNyY19sZW4pIHsKIAljYXNlIDE6Ci0JCXRtcCA9IGN0cmxfaW5iKHNyY19hZGRyKTsKKwkJdG1wID0gX19yYXdfcmVhZGIoc3JjX2FkZHIpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCXRtcCA9IGN0cmxfaW53KHNyY19hZGRyKTsKKwkJdG1wID0gX19yYXdfcmVhZHcoc3JjX2FkZHIpOwogCQlicmVhazsKIAljYXNlIDQ6Ci0JCXRtcCA9IGN0cmxfaW5sKHNyY19hZGRyKTsKKwkJdG1wID0gX19yYXdfcmVhZGwoc3JjX2FkZHIpOwogCQlicmVhazsKIAljYXNlIDg6Ci0JCXRtcCA9IGN0cmxfaW5xKHNyY19hZGRyKTsKKwkJdG1wID0gX19yYXdfcmVhZHEoc3JjX2FkZHIpOwogCQlicmVhazsKIAl9CiAKIAlzd2l0Y2ggKGRzdF9sZW4pIHsKIAljYXNlIDE6Ci0JCWN0cmxfb3V0Yih0bXAsIGRzdF9hZGRyKTsKKwkJX19yYXdfd3JpdGViKHRtcCwgZHN0X2FkZHIpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWN0cmxfb3V0dyh0bXAsIGRzdF9hZGRyKTsKKwkJX19yYXdfd3JpdGV3KHRtcCwgZHN0X2FkZHIpOwogCQlicmVhazsKIAljYXNlIDQ6Ci0JCWN0cmxfb3V0bCh0bXAsIGRzdF9hZGRyKTsKKwkJX19yYXdfd3JpdGVsKHRtcCwgZHN0X2FkZHIpOwogCQlicmVhazsKIAljYXNlIDg6Ci0JCWN0cmxfb3V0cSh0bXAsIGRzdF9hZGRyKTsKKwkJX19yYXdfd3JpdGVxKHRtcCwgZHN0X2FkZHIpOwogCQlicmVhazsKIAl9CiAKQEAgLTI3MSw2ICsyNzEsOCBAQAogCWluc25fc2l6ZV90IGluc3RydWN0aW9uOwogCWludCB0bXA7CiAKKwlpZiAodHJhcHBlZF9pb19kaXNhYmxlKQorCQlyZXR1cm4gMDsKIAlpZiAoIWxvb2t1cF90aW9wKGFkZHJlc3MpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva2dkYi5jIGIvYXJjaC9zaC9rZXJuZWwva2dkYi5jCmluZGV4IDNlNTMyZDAuLjcwYzY5NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3VwZXJIIEtHREIgc3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFNpbmdsZSBzdGVwcGluZyB0YWtlbiBmcm9tIHRoZSBvbGQgc3R1YiBieSBIZW5yeSBCZWxsIGFuZCBKZXJlbXkgU2llZ2VsLgogICoKQEAgLTI1MSwyNCArMjUxLDYwIEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IF9fa2dkYl9ub3RpZnkoc3RydWN0IGRpZV9hcmdzICphcmdzLCB1bnNpZ25lZCBsb25nIGNtZCkKK3sKKwlpbnQgcmV0OwogCi1CVUlMRF9UUkFQX0hBTkRMRVIoYnJlYWtwb2ludCkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRElFX0JSRUFLUE9JTlQ6CisJCS8qCisJCSAqIFRoaXMgbWVhbnMgYSB1c2VyIHRocmVhZCBpcyBzaW5nbGUgc3RlcHBpbmcKKwkJICogYSBzeXN0ZW0gY2FsbCB3aGljaCBzaG91bGQgYmUgaWdub3JlZAorCQkgKi8KKwkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQorCQkJcmV0dXJuIE5PVElGWV9ET05FOworCisJCXJldCA9IGtnZGJfaGFuZGxlX2V4Y2VwdGlvbihhcmdzLT50cmFwbnIgJiAweGZmLCBhcmdzLT5zaWduciwKKwkJCQkJICAgIGFyZ3MtPmVyciwgYXJncy0+cmVncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9TVE9QOworfQorCitzdGF0aWMgaW50CitrZ2RiX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpwdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlUUkFQX0hBTkRMRVJfREVDTDsKKwlpbnQgcmV0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWtnZGJfaGFuZGxlX2V4Y2VwdGlvbih2ZWMgPj4gMiwgU0lHVFJBUCwgMCwgcmVncyk7CisJcmV0ID0gX19rZ2RiX25vdGlmeShwdHIsIGNtZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrZ2RiX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCT0ga2dkYl9ub3RpZnksCisKKwkvKgorCSAqIExvd2VzdC1wcmlvIG5vdGlmaWVyIHByaW9yaXR5LCB3ZSB3YW50IHRvIGJlIG5vdGlmaWVkIGxhc3Q6CisJICovCisJLnByaW9yaXR5CT0gLUlOVF9NQVgsCit9OworCiBpbnQga2dkYl9hcmNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKIH0KIAogdm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQogeworCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKIH0KIAogc3RydWN0IGtnZGJfYXJjaCBhcmNoX2tnZGJfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDc2ZjI4MDIuLjc2NzIxNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogCiB0eXBlZGVmIHZvaWQgKCpyZWxvY2F0ZV9uZXdfa2VybmVsX3QpKHVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlciwKQEAgLTI4LDE1ICszMCwxMSBAQAogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZTsKLWV4dGVybiB2b2lkICpnZGJfdmJyX3ZlY3RvcjsKIGV4dGVybiB2b2lkICp2YnJfYmFzZTsKIAotdm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCit2b2lkIG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotfQotCi12b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17CisJLyogTm90aGluZyB0byBkbyBmb3IgVVAsIGJ1dCBkZWZpbml0ZWx5IGJyb2tlbiBmb3IgU01QLi4gKi8KIH0KIAogLyoKQEAgLTExNywxMSArMTE1LDcgQEAKIAlrZXhlY19pbmZvKGltYWdlKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCi0JYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOgotCQkgICAgIDogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQotCQkgICAgIDogIm1lbW9yeSIpOwotI2VuZGlmCisJc2hfYmlvc192YnJfcmVsb2FkKCk7CiAKIAkvKiBub3cgY2FsbCBpdCAqLwogCXJuayA9IChyZWxvY2F0ZV9uZXdfa2VybmVsX3QpIHJlYm9vdF9jb2RlX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCmluZGV4IDI0ZWE4MzcuLmE5ZGQzYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtNjgsOSArNjgsNiBAQAogCiAJaXNfdXNlciA9IHVzZXJfbW9kZShyZWdzKTsKIAotCWlmICghY3VycmVudCB8fCBjdXJyZW50LT5waWQgPT0gMCkKLQkJcmV0dXJuOwotCiAJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFkZDliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMTAwIEBACisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwID0gTlVMTDsKK3Vuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKKworaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKK3sKKwkqZHN0ID0gKnNyYzsKKworCWlmIChzcmMtPnRocmVhZC54c3RhdGUpIHsKKwkJZHN0LT50aHJlYWQueHN0YXRlID0ga21lbV9jYWNoZV9hbGxvYyh0YXNrX3hzdGF0ZV9jYWNoZXAsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkc3QtPnRocmVhZC54c3RhdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtY3B5KGRzdC0+dGhyZWFkLnhzdGF0ZSwgc3JjLT50aHJlYWQueHN0YXRlLCB4c3RhdGVfc2l6ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0c2stPnRocmVhZC54c3RhdGUpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHRhc2tfeHN0YXRlX2NhY2hlcCwgdHNrLT50aHJlYWQueHN0YXRlKTsKKwkJdHNrLT50aHJlYWQueHN0YXRlID0gTlVMTDsKKwl9Cit9CisKKyNpZiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRocmVhZF9pbmZvX2NhY2hlOworCitzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisKKwl0aSA9IGttZW1fY2FjaGVfYWxsb2ModGhyZWFkX2luZm9fY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSh0aSA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCisJbWVtc2V0KHRpLCAwLCBUSFJFQURfU0laRSk7CisjZW5kaWYKKwlyZXR1cm4gdGk7Cit9CisKK3ZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQoreworCWZyZWVfdGhyZWFkX3hzdGF0ZSh0aS0+dGFzayk7CisJa21lbV9jYWNoZV9mcmVlKHRocmVhZF9pbmZvX2NhY2hlLCB0aSk7Cit9CisKK3ZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKQoreworCXRocmVhZF9pbmZvX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRocmVhZF9pbmZvIiwgVEhSRUFEX1NJWkUsCisJCQkJCSAgICAgIFRIUkVBRF9TSVpFLCBTTEFCX1BBTklDLCBOVUxMKTsKK30KKyNlbHNlCitzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTzsKKyNlbHNlCisJZ2ZwX3QgbWFzayA9IEdGUF9LRVJORUw7CisjZW5kaWYKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMobWFzaywgVEhSRUFEX1NJWkVfT1JERVIpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlmcmVlX3RocmVhZF94c3RhdGUodGktPnRhc2spOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGksIFRIUkVBRF9TSVpFX09SREVSKTsKK30KKyNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKK3ZvaWQgYXJjaF90YXNrX2NhY2hlX2luaXQodm9pZCkKK3sKKwlpZiAoIXhzdGF0ZV9zaXplKQorCQlyZXR1cm47CisKKwl0YXNrX3hzdGF0ZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGFza194c3RhdGUiLCB4c3RhdGVfc2l6ZSwKKwkJCQkJICAgICAgIF9fYWxpZ25vZl9fKHVuaW9uIHRocmVhZF94c3RhdGUpLAorCQkJCQkgICAgICAgU0xBQl9QQU5JQyB8IFNMQUJfTk9UUkFDSywgTlVMTCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQorIyBkZWZpbmUgSEFWRV9TT0ZURlAJMQorI2Vsc2UKKyMgZGVmaW5lIEhBVkVfU09GVEZQCTAKKyNlbmRpZgorCit2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKQoreworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpCisJCXhzdGF0ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QpOworCWVsc2UgaWYgKEhBVkVfU09GVEZQKQorCQl4c3RhdGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0KTsKKwllbHNlCisJCXhzdGF0ZV9zaXplID0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCBkOGFmODg5Li4zY2I4OGYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xNiw2NSArMTYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLSNpbmNsdWRlIDxsaW51eC90aWNrLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3ViYy5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KLQotaW50IHViY191c2VyY250ID0gMDsKLQotI2lmZGVmIENPTkZJR18zMkJJVAotc3RhdGljIHZvaWQgd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUodm9pZCkKLXsKLQlzaF93ZHRfd3JpdGVfY250KDB4RkYpOwotCXNoX3dkdF93cml0ZV9jc3IoMHhDMik7Ci19Ci0KLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyogVXNlIHdhdGNoZG9nIHRpbWVyIHRvIHRyaWdnZXIgcmVzZXQgKi8KLQl3YXRjaGRvZ190cmlnZ2VyX2ltbWVkaWF0ZSgpOwotCi0Jd2hpbGUgKDEpCi0JCWNwdV9zbGVlcCgpOwotfQotI2Vsc2UKLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKLXsKLQkvKiBTUi5CTD0xIGFuZCBpbnZva2UgYWRkcmVzcyBlcnJvciB0byBsZXQgQ1BVIHJlc2V0IChtYW51YWwgcmVzZXQpICovCi0JYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHNyXG5cdCIKLQkJICAgICAibW92LmwgQCUxLCAlMCIgOiA6ICJyIiAoMHgxMDAwMDAwMCksICJyIiAoMHg4MDAwMDAwMSkpOwotfQotI2VuZGlmCi0KLXZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCi17Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCXdoaWxlICgxKQotCQljcHVfc2xlZXAoKTsKLX0KLQotdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQotewotCWlmIChwbV9wb3dlcl9vZmYpCi0JCXBtX3Bvd2VyX29mZigpOwotfQogCiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CkBAIC05MSw3ICs0MSw3IEBACiAJcHJpbnRrKCJQQyAgOiAlMDhseCBTUCAgOiAlMDhseCBTUiAgOiAlMDhseCAiLAogCSAgICAgICByZWdzLT5wYywgcmVncy0+cmVnc1sxNV0sIHJlZ3MtPnNyKTsKICNpZmRlZiBDT05GSUdfTU1VCi0JcHJpbnRrKCJURUEgOiAlMDh4XG4iLCBjdHJsX2lubChNTVVfVEVBKSk7CisJcHJpbnRrKCJURUEgOiAlMDh4XG4iLCBfX3Jhd19yZWFkbChNTVVfVEVBKSk7CiAjZWxzZQogCXByaW50aygiXG4iKTsKICNlbmRpZgpAQCAtMTQ3LDIxICs5NywzNCBAQAogfQogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIAordm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X3BjLAorCQkgIHVuc2lnbmVkIGxvbmcgbmV3X3NwKQoreworCXNldF9mcyhVU0VSX0RTKTsKKworCXJlZ3MtPnByID0gMDsKKwlyZWdzLT5zciA9IFNSX0ZEOworCXJlZ3MtPnBjID0gbmV3X3BjOworCXJlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwOworCisJZnJlZV90aHJlYWRfeHN0YXRlKGN1cnJlbnQpOworfQorRVhQT1JUX1NZTUJPTChzdGFydF90aHJlYWQpOworCiAvKgogICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KICAqLwogdm9pZCBleGl0X3RocmVhZCh2b2lkKQogewotCWlmIChjdXJyZW50LT50aHJlYWQudWJjX3BjKSB7Ci0JCWN1cnJlbnQtPnRocmVhZC51YmNfcGMgPSAwOwotCQl1YmNfdXNlcmNudCAtPSAxOwotCX0KIH0KIAogdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKIAkvKiBGb3JnZXQgbGF6eSBGUFUgc3RhdGUgKi8KIAljbGVhcl9mcHUodHNrLCB0YXNrX3B0X3JlZ3ModHNrKSk7CiAJY2xlYXJfdXNlZF9tYXRoKCk7CkBAIC0yMDksMTEgKzE3MiwxMCBAQAogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOwogCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3M7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfRFNQKQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfRFNQKQorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwogCWlmIChpc19kc3BfZW5hYmxlZCh0c2spKSB7CiAJCS8qIFdlIGNhbiB1c2UgdGhlIF9fc2F2ZV9kc3Agb3IganVzdCBjb3B5IHRoZSBzdHJ1Y3Q6CiAJCSAqIF9fc2F2ZV9kc3AocCk7CkBAIC0yNDQsNTMgKzIwNiwxMSBAQAogCXAtPnRocmVhZC5zcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHJlZ3M7CiAJcC0+dGhyZWFkLnBjID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2Zvcms7CiAKLQlwLT50aHJlYWQudWJjX3BjID0gMDsKKwltZW1zZXQocC0+dGhyZWFkLnB0cmFjZV9icHMsIDAsIHNpemVvZihwLT50aHJlYWQucHRyYWNlX2JwcykpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRyYWNpbmcgYnkgdXNlciBicmVhayBjb250cm9sbGVyLiAgKi8KLXN0YXRpYyB2b2lkIHViY19zZXRfdHJhY2luZyhpbnQgYXNpZCwgdW5zaWduZWQgbG9uZyBwYykKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCXZhbCA9IChVQkNfQ0JSX0lEX0lOU1QgfCBVQkNfQ0JSX1JXX1JFQUQgfCBVQkNfQ0JSX0NFKTsKLQl2YWwgfD0gKFVCQ19DQlJfQUlFIHwgVUJDX0NCUl9BSVZfU0VUKGFzaWQpKTsKLQotCWN0cmxfb3V0bCh2YWwsIFVCQ19DQlIwKTsKLQljdHJsX291dGwocGMsICBVQkNfQ0FSMCk7Ci0JY3RybF9vdXRsKDB4MCwgVUJDX0NBTVIwKTsKLQljdHJsX291dGwoMHgwLCBVQkNfQ0JDUik7Ci0KLQl2YWwgPSAoVUJDX0NSUl9SRVMgfCBVQkNfQ1JSX1BDQiB8IFVCQ19DUlJfQklFKTsKLQljdHJsX291dGwodmFsLCBVQkNfQ1JSMCk7Ci0KLQkvKiBSZWFkIFVCQyByZWdpc3RlciB0aGF0IHdlIHdyb3RlIGxhc3QsIGZvciBjaGVja2luZyB1cGRhdGUgKi8KLQl2YWwgPSBjdHJsX2lubChVQkNfQ1JSMCk7Ci0KLSNlbHNlCS8qIENPTkZJR19DUFVfU0g0QSAqLwotCWN0cmxfb3V0bChwYywgVUJDX0JBUkEpOwotCi0jaWZkZWYgQ09ORklHX01NVQotCWN0cmxfb3V0Yihhc2lkLCBVQkNfQkFTUkEpOwotI2VuZGlmCi0KLQljdHJsX291dGwoMCwgVUJDX0JBTVJBKTsKLQotCWlmIChjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzcyOSB8fAotCSAgICBjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzcxMCB8fAotCSAgICBjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzcxMiB8fAotCSAgICBjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzIwMyl7Ci0JCWN0cmxfb3V0dyhCQlJfSU5TVCB8IEJCUl9SRUFEIHwgQkJSX0NQVSwgVUJDX0JCUkEpOwotCQljdHJsX291dGwoQlJDUl9QQ0JBIHwgQlJDUl9QQ1RFLCBVQkNfQlJDUik7Ci0JfSBlbHNlIHsKLQkJY3RybF9vdXR3KEJCUl9JTlNUIHwgQkJSX1JFQUQsIFVCQ19CQlJBKTsKLQkJY3RybF9vdXR3KEJSQ1JfUENCQSwgVUJDX0JSQ1IpOwotCX0KLSNlbmRpZgkvKiBDT05GSUdfQ1BVX1NINEEgKi8KLX0KLQogLyoKICAqCXN3aXRjaF90byh4LHkpIHNob3VsZCBzd2l0Y2ggdGFza3MgZnJvbSB4IHRvIHkuCiAgKgpAQCAtMzA0LDcgKzIyNCw3IEBACiAKIAkvKiB3ZSdyZSBnb2luZyB0byB1c2UgdGhpcyBzb29uLCBhZnRlciBhIGZldyBleHBlbnNpdmUgdGhpbmdzICovCiAJaWYgKG5leHQtPmZwdV9jb3VudGVyID4gNSkKLQkJcHJlZmV0Y2goJm5leHRfdC0+ZnB1LmhhcmQpOworCQlwcmVmZXRjaChuZXh0X3QtPnhzdGF0ZSk7CiAKICNpZmRlZiBDT05GSUdfTU1VCiAJLyoKQEAgLTMxNiwzMiArMjM2LDEzIEBACiAJCSAgICAgOiAiciIgKHRhc2tfdGhyZWFkX2luZm8obmV4dCkpKTsKICNlbmRpZgogCi0JLyogSWYgbm8gdGFza3MgYXJlIHVzaW5nIHRoZSBVQkMsIHdlJ3JlIGRvbmUgKi8KLQlpZiAodWJjX3VzZXJjbnQgPT0gMCkKLQkJLyogSWYgbm8gdGFza3MgYXJlIHVzaW5nIHRoZSBVQkMsIHdlJ3JlIGRvbmUgKi87Ci0JZWxzZSBpZiAobmV4dC0+dGhyZWFkLnViY19wYyAmJiBuZXh0LT5tbSkgewotCQlpbnQgYXNpZCA9IDA7Ci0jaWZkZWYgQ09ORklHX01NVQotCQlhc2lkIHw9IGNwdV9hc2lkKHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+bW0pOwotI2VuZGlmCi0JCXViY19zZXRfdHJhY2luZyhhc2lkLCBuZXh0LT50aHJlYWQudWJjX3BjKTsKLQl9IGVsc2UgewotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCQljdHJsX291dGwoVUJDX0NCUl9JTklULCBVQkNfQ0JSMCk7Ci0JCWN0cmxfb3V0bChVQkNfQ1JSX0lOSVQsIFVCQ19DUlIwKTsKLSNlbHNlCi0JCWN0cmxfb3V0dygwLCBVQkNfQkJSQSk7Ci0JCWN0cmxfb3V0dygwLCBVQkNfQkJSQik7Ci0jZW5kaWYKLQl9Ci0KIAkvKgogCSAqIElmIHRoZSB0YXNrIGhhcyB1c2VkIGZwdSB0aGUgbGFzdCA1IHRpbWVzbGljZXMsIGp1c3QgZG8gYSBmdWxsCiAJICogcmVzdG9yZSBvZiB0aGUgbWF0aCBzdGF0ZSBpbW1lZGlhdGVseSB0byBhdm9pZCB0aGUgdHJhcDsgdGhlCiAJICogY2hhbmNlcyBvZiBuZWVkaW5nIEZQVSBzb29uIGFyZSBvYnZpb3VzbHkgaGlnaCBub3cKIAkgKi8KIAlpZiAobmV4dC0+ZnB1X2NvdW50ZXIgPiA1KQotCQlmcHVfc3RhdGVfcmVzdG9yZSh0YXNrX3B0X3JlZ3MobmV4dCkpOworCQlfX2ZwdV9zdGF0ZV9yZXN0b3JlKCk7CiAKIAlyZXR1cm4gcHJldjsKIH0KQEAgLTQzNCwyMCArMzM1LDMgQEAKIAogCXJldHVybiBwYzsKIH0KLQotYXNtbGlua2FnZSB2b2lkIGJyZWFrX3BvaW50X3RyYXAodm9pZCkKLXsKLQkvKiBDbGVhciB0cmFjaW5nLiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLQljdHJsX291dGwoVUJDX0NCUl9JTklULCBVQkNfQ0JSMCk7Ci0JY3RybF9vdXRsKFVCQ19DUlJfSU5JVCwgVUJDX0NSUjApOwotI2Vsc2UKLQljdHJsX291dHcoMCwgVUJDX0JCUkEpOwotCWN0cmxfb3V0dygwLCBVQkNfQkJSQik7Ci0JY3RybF9vdXRsKDAsIFVCQ19CUkNSKTsKLSNlbmRpZgotCWN1cnJlbnQtPnRocmVhZC51YmNfcGMgPSAwOwotCXViY191c2VyY250IC09IDE7Ci0KLQlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggZWM3OWZhZi4uYzkwOTU3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzIsMzAgKzMyLDcgQEAKIAogc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoID0gTlVMTDsKIAotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQotewotCWV4dGVybiB2b2lkIHBoeXNfc3RleHQodm9pZCk7Ci0KLQlwaHlzX3N0ZXh0KCk7Ci19Ci0KLXZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCi17Ci0JZm9yICg7Oyk7Ci19Ci0KLXZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSJzbGVlcFxuXHQiCi0JCSJzeW5jaVxuXHQiCi0JCSJub3A7bm9wO25vcDtub3Bcblx0IgotCSk7Ci0KLQlwYW5pYygiVW5leHBlY3RlZCB3YWtldXAhXG4iKTsKLX0KLQotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKQordm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIGFoLCBhbCwgYmgsIGJsLCBjaCwgY2w7CiAKQEAgLTQxMCw3ICszODcsNyBAQAogCQkJcmVncy0+c3IgfD0gU1JfRkQ7CiAJCX0KIAotCQltZW1jcHkoZnB1LCAmdHNrLT50aHJlYWQuZnB1LmhhcmQsIHNpemVvZigqZnB1KSk7CisJCW1lbWNweShmcHUsICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIHNpemVvZigqZnB1KSk7CiAJfQogCiAJcmV0dXJuIGZwdmFsaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCmluZGV4IDliZTM1ZjMuLmM2MjVjZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCkBAIC0yLDcgKzIsNyBAQAogICogU3VwZXJIIHByb2Nlc3MgdHJhY2luZwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgS2F6IEtvamltYSAmIE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIEF1ZGl0IHN1cHBvcnQgYnkgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CiAgKgpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNjMsMzMgKzY0LDY0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgcHRyYWNlX3RyaWdnZXJlZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIGludCBubWksCisJCSAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisKKwkvKgorCSAqIERpc2FibGUgdGhlIGJyZWFrcG9pbnQgcmVxdWVzdCBoZXJlIHNpbmNlIHB0cmFjZSBoYXMgZGVmaW5lZCBhCisJICogb25lLXNob3QgYmVoYXZpb3VyIGZvciBicmVha3BvaW50IGV4Y2VwdGlvbnMuCisJICovCisJYXR0ciA9IGJwLT5hdHRyOworCWF0dHIuZGlzYWJsZWQgPSB0cnVlOworCW1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKK30KKworc3RhdGljIGludCBzZXRfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gJnRzay0+dGhyZWFkOworCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisKKwlicCA9IHRocmVhZC0+cHRyYWNlX2Jwc1swXTsKKwlpZiAoIWJwKSB7CisJCWh3X2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CisKKwkJYXR0ci5icF9hZGRyID0gYWRkcjsKKwkJYXR0ci5icF9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8yOworCQlhdHRyLmJwX3R5cGUgPSBIV19CUkVBS1BPSU5UX1I7CisKKwkJYnAgPSByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoJmF0dHIsIHB0cmFjZV90cmlnZ2VyZWQsIHRzayk7CisJCWlmIChJU19FUlIoYnApKQorCQkJcmV0dXJuIFBUUl9FUlIoYnApOworCisJCXRocmVhZC0+cHRyYWNlX2Jwc1swXSA9IGJwOworCX0gZWxzZSB7CisJCWludCBlcnI7CisKKwkJYXR0ciA9IGJwLT5hdHRyOworCQlhdHRyLmJwX2FkZHIgPSBhZGRyOworCQllcnIgPSBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7CisJCWlmICh1bmxpa2VseShlcnIpKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCS8qIE5leHQgc2NoZWR1bGluZyB3aWxsIHNldCB1cCBVQkMgKi8KLQlpZiAoY2hpbGQtPnRocmVhZC51YmNfcGMgPT0gMCkKLQkJdWJjX3VzZXJjbnQgKz0gMTsKLQotCWNoaWxkLT50aHJlYWQudWJjX3BjID0gZ2V0X3N0YWNrX2xvbmcoY2hpbGQsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CisJdW5zaWduZWQgbG9uZyBwYyA9IGdldF9zdGFja19sb25nKGNoaWxkLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKKworCXNldF9zaW5nbGVfc3RlcChjaGlsZCwgcGMpOwogfQogCiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIFVCQyBpcyBub3QgcHJvZ3JhbW1lZCBhdCB0aGUgbmV4dCBjb250ZXh0IHN3aXRjaC4KLQkgKgotCSAqIE5vcm1hbGx5IHRoaXMgaXMgbm90IG5lZWRlZCBidXQgdGhlcmUgYXJlIHNlcXVlbmNlcyBzdWNoIGFzCi0JICogc2luZ2xlc3RlcCwgc2lnbmFsIGRlbGl2ZXJ5LCBhbmQgY29udGludWUgdGhhdCBsZWF2ZSB0aGUKLQkgKiB1YmNfcGMgbm9uLXplcm8gbGVhZGluZyB0byBzcHVyaW91cyBTSUdUUkFQcy4KLQkgKi8KLQlpZiAoY2hpbGQtPnRocmVhZC51YmNfcGMgIT0gMCkgewotCQl1YmNfdXNlcmNudCAtPSAxOwotCQljaGlsZC0+dGhyZWFkLnViY19wYyA9IDA7Ci0JfQogfQogCiAvKgpAQCAtMTYzLDEwICsxOTUsMTAgQEAKIAogCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKKwkJCQkgICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTE4NCwxMCArMjE2LDEwIEBACiAKIAlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJCSAgJnRhcmdldC0+dGhyZWFkLmZwdS5oYXJkLCAwLCAtMSk7CisJCQkJCSAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworCQkJCSAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC0zMzMsNyArMzY1LDcgQEAKIAkJCQllbHNlCiAJCQkJCXRtcCA9IDA7CiAJCQl9IGVsc2UKLQkJCQl0bXAgPSAoKGxvbmcgKikmY2hpbGQtPnRocmVhZC5mcHUpCisJCQkJdG1wID0gKChsb25nICopY2hpbGQtPnRocmVhZC54c3RhdGUpCiAJCQkJCVsoYWRkciAtIChsb25nKSZkdW1teS0+ZnB1KSA+PiAyXTsKIAkJfSBlbHNlIGlmIChhZGRyID09IChsb25nKSAmZHVtbXktPnVfZnB2YWxpZCkKIAkJCXRtcCA9ICEhdHNrX3VzZWRfbWF0aChjaGlsZCk7CkBAIC0zNjIsNyArMzk0LDcgQEAKIAkJZWxzZSBpZiAoYWRkciA+PSAobG9uZykgJmR1bW15LT5mcHUgJiYKIAkJCSBhZGRyIDwgKGxvbmcpICZkdW1teS0+dV9mcHZhbGlkKSB7CiAJCQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgoY2hpbGQpOwotCQkJKChsb25nICopJmNoaWxkLT50aHJlYWQuZnB1KQorCQkJKChsb25nICopY2hpbGQtPnRocmVhZC54c3RhdGUpCiAJCQkJWyhhZGRyIC0gKGxvbmcpJmR1bW15LT5mcHUpID4+IDJdID0gZGF0YTsKIAkJCXJldCA9IDA7CiAJCX0gZWxzZSBpZiAoYWRkciA9PSAobG9uZykgJmR1bW15LT51X2ZwdmFsaWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKaW5kZXggYjA2M2ViOC4uNWZkNjQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKQEAgLTg4LDcgKzg4LDcgQEAKIAkJcmVncy0+c3IgfD0gU1JfRkQ7CiAJfQogCi0JdG1wID0gKChsb25nICopJnRhc2stPnRocmVhZC5mcHUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOworCXRtcCA9ICgobG9uZyAqKXRhc2stPnRocmVhZC54c3RhdGUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOwogCXJldHVybiB0bXA7CiB9CiAKQEAgLTExNCw4ICsxMTQsNyBAQAogCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MqKSgodW5zaWduZWQgY2hhciAqKXRhc2sgKyBUSFJFQURfU0laRSkgLSAxOwogCiAJaWYgKCF0c2tfdXNlZF9tYXRoKHRhc2spKSB7Ci0JCWZwaW5pdCgmdGFzay0+dGhyZWFkLmZwdS5oYXJkKTsKLQkJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhc2spOworCQlpbml0X2ZwdSh0YXNrKTsKIAl9IGVsc2UgaWYgKGxhc3RfdGFza191c2VkX21hdGggPT0gdGFzaykgewogCQllbmFibGVfZnB1KCk7CiAJCXNhdmVfZnB1KHRhc2spOwpAQCAtMTI0LDcgKzEyMyw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCSgobG9uZyAqKSZ0YXNrLT50aHJlYWQuZnB1KVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IGRhdGE7CisJKChsb25nICopdGFzay0+dGhyZWFkLnhzdGF0ZSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSBkYXRhOwogCXJldHVybiAwOwogfQogCkBAIC0yMjYsNyArMjI1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCSAgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtMjQzLDcgKzI0Miw3IEBACiAJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhcmdldCk7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgJnRhcmdldC0+dGhyZWFkLmZwdS5oYXJkLCAwLCAtMSk7CisJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTQ4Niw5ICs0ODUsMTAgQEAKIH0KIAogLyogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotYXNtbGlua2FnZSB2b2lkIGRvX3NvZnR3YXJlX2JyZWFrX3BvaW50KHVuc2lnbmVkIGxvbmcgbG9uZyB2ZWMsCi0JCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQorQlVJTERfVFJBUF9IQU5ETEVSKGJyZWFrcG9pbnQpCiB7CisJVFJBUF9IQU5ETEVSX0RFQ0w7CisKIAkvKiBXZSBuZWVkIHRvIGZvcndhcmQgc3RlcCB0aGUgUEMsIHRvIGNvdW50ZXJhY3QgdGhlIGJhY2tzdGVwIGRvbmUKIAkgICBpbiBzaWduYWwuYy4gKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gvc2gva2VybmVsL3JlYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmNhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9yZWJvb3QuYwpAQCAtMCwwICsxLDk4IEBACisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2luY2x1ZGUgPGFzbS93YXRjaGRvZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCitzdGF0aWMgdm9pZCB3YXRjaGRvZ190cmlnZ2VyX2ltbWVkaWF0ZSh2b2lkKQoreworCXNoX3dkdF93cml0ZV9jbnQoMHhGRik7CisJc2hfd2R0X3dyaXRlX2NzcigweEMyKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogQWRkcmVzcyBlcnJvciB3aXRoIFNSLkJMPTEgZmlyc3QuICovCisJdHJpZ2dlcl9hZGRyZXNzX2Vycm9yKCk7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKwkvKiBJZiB0aGF0IGZhaWxzIG9yIGlzIHVuc3VwcG9ydGVkLCBnbyBmb3IgdGhlIHdhdGNoZG9nIG5leHQuICovCisJd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUoKTsKKyNlbmRpZgorCisJLyoKKwkgKiBHaXZlIHVwIGFuZCBzbGVlcC4KKwkgKi8KKwl3aGlsZSAoMSkKKwkJY3B1X3NsZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX3NodXRkb3duKHZvaWQpCit7CisJc21wX3NlbmRfc3RvcCgpOworfQorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlpZiAocG1fcG93ZXJfb2ZmKQorCQlwbV9wb3dlcl9vZmYoKTsKK30KKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfaGFsdCh2b2lkKQoreworCS8qIHN0b3Agb3RoZXIgY3B1cyAqLworCW1hY2hpbmVfc2h1dGRvd24oKTsKKworCS8qIHN0b3AgdGhpcyBjcHUgKi8KKwlzdG9wX3RoaXNfY3B1KE5VTEwpOworfQorCitzdHJ1Y3QgbWFjaGluZV9vcHMgbWFjaGluZV9vcHMgPSB7CisJLnBvd2VyX29mZgk9IG5hdGl2ZV9tYWNoaW5lX3Bvd2VyX29mZiwKKwkuc2h1dGRvd24JPSBuYXRpdmVfbWFjaGluZV9zaHV0ZG93biwKKwkucmVzdGFydAk9IG5hdGl2ZV9tYWNoaW5lX3Jlc3RhcnQsCisJLmhhbHQJCT0gbmF0aXZlX21hY2hpbmVfaGFsdCwKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwkuY3Jhc2hfc2h1dGRvd24gPSBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93biwKKyNlbmRpZgorfTsKKwordm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCW1hY2hpbmVfb3BzLnBvd2VyX29mZigpOworfQorCit2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKK3sKKwltYWNoaW5lX29wcy5zaHV0ZG93bigpOworfQorCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJbWFjaGluZV9vcHMucmVzdGFydChjbWQpOworfQorCit2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQoreworCW1hY2hpbmVfb3BzLmhhbHQoKTsKK30KKworI2lmZGVmIENPTkZJR19LRVhFQwordm9pZCBtYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCW1hY2hpbmVfb3BzLmNyYXNoX3NodXRkb3duKHJlZ3MpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCA4YjBlNjk3Li4zNDU5ZTcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTQyMSw2ICs0MjEsOCBAQAogCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKIAorCXVuY2FjaGVkX2luaXQoKTsKKwogCXBsYXRfZWFybHlfZGV2aWNlX3NldHVwKCk7CiAKIAkvKiBMZXQgZWFybHlwcmludGsgb3V0cHV0IGVhcmx5IGNvbnNvbGUgbWVzc2FnZXMgKi8KQEAgLTQ0OSwxNyArNDUxLDE1IEBACiAjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKIAljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKICNlbmRpZgorCXBhZ2luZ19pbml0KCk7CisJcG1iX2luaXQoKTsKKworCWlvcmVtYXBfZml4ZWRfaW5pdCgpOwogCiAJLyogUGVyZm9ybSB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiAqLwogCWlmIChsaWtlbHkoc2hfbXYubXZfc2V0dXApKQogCQlzaF9tdi5tdl9zZXR1cChjbWRsaW5lX3ApOwogCi0JcGFnaW5nX2luaXQoKTsKLQotI2lmZGVmIENPTkZJR19QTUJfRU5BQkxFCi0JcG1iX2luaXQoKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1NNUAogCXBsYXRfc21wX3NldHVwKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYyBiL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYwppbmRleCBjODUyZjc4Li40NzQ3NWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCkBAIC0xLDE5ICsxLDMwIEBACiAvKgotICogIGxpbnV4L2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYwogICogIEMgaW50ZXJmYWNlIGZvciB0cmFwcGluZyBpbnRvIHRoZSBzdGFuZGFyZCBMaW51eFNIIEJJT1MuCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMCBHcmVnIEJhbmtzLCBNaXRjaCBEYXZpcworICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93bgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMTAgIFBhdWwgTXVuZHQKICAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAKICNkZWZpbmUgQklPU19DQUxMX0NPTlNPTEVfV1JJVEUJCTAKICNkZWZpbmUgQklPU19DQUxMX0VUSF9OT0RFX0FERFIJCTEwCiAjZGVmaW5lIEJJT1NfQ0FMTF9TSFVURE9XTgkJMTEKLSNkZWZpbmUgQklPU19DQUxMX0NIQVJfT1VUCQkweDFmCS8qIFRPRE86IGhhY2sgKi8KICNkZWZpbmUgQklPU19DQUxMX0dEQl9ERVRBQ0gJCTB4ZmYKIAordm9pZCAqZ2RiX3Zicl92ZWN0b3IgPSBOVUxMOworCiBzdGF0aWMgaW5saW5lIGxvbmcgc2hfYmlvc19jYWxsKGxvbmcgZnVuYywgbG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKIAkJCQkgICAgbG9uZyBhcmczKQogewpAQCAtMjMsNiArMzQsOSBAQAogCXJlZ2lzdGVyIGxvbmcgcjYgX19hc21fXygicjYiKSA9IGFyZzI7CiAJcmVnaXN0ZXIgbG9uZyByNyBfX2FzbV9fKCJyNyIpID0gYXJnMzsKIAorCWlmICghZ2RiX3Zicl92ZWN0b3IpCisJCXJldHVybiAtRU5PU1lTOworCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInRyYXBhCSMweDNmIjoiPXoiKHIwKQogCQkJICAgICA6IjAiKHIwKSwgInIiKHI0KSwgInIiKHI1KSwgInIiKHI2KSwgInIiKHI3KQogCQkJICAgICA6Im1lbW9yeSIpOwpAQCAtMzQsMTEgKzQ4LDYgQEAKIAlzaF9iaW9zX2NhbGwoQklPU19DQUxMX0NPTlNPTEVfV1JJVEUsIChsb25nKWJ1ZiwgKGxvbmcpbGVuLCAwLCAwKTsKIH0KIAotdm9pZCBzaF9iaW9zX2NoYXJfb3V0KGNoYXIgY2gpCi17Ci0Jc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9DSEFSX09VVCwgY2gsIDAsIDAsIDApOwotfQotCiB2b2lkIHNoX2Jpb3NfZ2RiX2RldGFjaCh2b2lkKQogewogCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfR0RCX0RFVEFDSCwgMCwgMCwgMCwgMCk7CkBAIC01NSwzICs2NCwxMDkgQEAKIHsKIAlzaF9iaW9zX2NhbGwoQklPU19DQUxMX1NIVVRET1dOLCBob3csIDAsIDAsIDApOwogfQorCisvKgorICogUmVhZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBWQlIgcmVnaXN0ZXIgdG8gaW5pdGlhbGlzZSB0aGUgdmVjdG9yCisgKiB0aHJvdWdoIHdoaWNoIGRlYnVnIGFuZCBCSU9TIHRyYXBzIGFyZSBkZWxlZ2F0ZWQgYnkgdGhlIExpbnV4IHRyYXAKKyAqIGhhbmRsZXIuCisgKi8KK3ZvaWQgc2hfYmlvc192YnJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmJyOworCisJaWYgKHVubGlrZWx5KGdkYl92YnJfdmVjdG9yKSkKKwkJcmV0dXJuOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGMgdmJyLCAlMCIgOiAiPXIiICh2YnIpKTsKKworCWlmICh2YnIpIHsKKwkJZ2RiX3Zicl92ZWN0b3IgPSAodm9pZCAqKSh2YnIgKyAweDEwMCk7CisJCXByaW50ayhLRVJOX05PVElDRSAiU2V0dGluZyBHREIgdHJhcCB2ZWN0b3IgdG8gJXBcbiIsCisJCSAgICAgICBnZGJfdmJyX3ZlY3Rvcik7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX05PVElDRSAiU0gtQklPUyBub3QgZGV0ZWN0ZWRcbiIpOworfQorCisvKioKKyAqIHNoX2Jpb3NfdmJyX3JlbG9hZCAtIFJlLWxvYWQgdGhlIHN5c3RlbSBWQlIgZnJvbSB0aGUgQklPUyB2ZWN0b3IuCisgKgorICogVGhpcyBjYW4gYmUgdXNlZCBieSBzYXZlL3Jlc3RvcmUgY29kZSB0byByZWluaXRpYWxpemUgdGhlIHN5c3RlbSBWQlIKKyAqIGZyb20gdGhlIGZpeGVkIEJJT1MgVkJSLiBBIG5vLW9wIGlmIG5vIEJJT1MgVkJSIGlzIGtub3duLgorICovCit2b2lkIHNoX2Jpb3NfdmJyX3JlbG9hZCh2b2lkKQoreworCWlmIChnZGJfdmJyX3ZlY3RvcikKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJImxkYyAlMCwgdmJyIgorCQkJOgorCQkJOiAiciIgKCgodW5zaWduZWQgbG9uZykgZ2RiX3Zicl92ZWN0b3IpIC0gMHgxMDApCisJCQk6ICJtZW1vcnkiCisJCSk7Cit9CisKKy8qCisgKglQcmludCBhIHN0cmluZyB0aHJvdWdoIHRoZSBCSU9TCisgKi8KK3N0YXRpYyB2b2lkIHNoX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAorCQkJCSB1bnNpZ25lZCBjb3VudCkKK3sKKwlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgY291bnQpOworfQorCisvKgorICoJU2V0dXAgaW5pdGlhbCBiYXVkL2JpdHMvcGFyaXR5LiBXZSBkbyB0d28gdGhpbmdzIGhlcmU6CisgKgktIGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcgZm9yIHRoZSBmaXJzdCByc19vcGVuKCkKKyAqCS0gaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQKKyAqCVJldHVybiBub24temVybyBpZiB3ZSBkaWRuJ3QgZmluZCBhIHNlcmlhbCBwb3J0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBzaF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlpbnQJY2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCisJLyoKKwkgKglOb3cgY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZy4KKwkgKglUT0RPOiB0aGlzIGlzIGEgdG90YWxseSBib2d1cyBjZmxhZywgYXMgd2UgaGF2ZQorCSAqCW5vIGlkZWEgd2hhdCBzZXJpYWwgc2V0dGluZ3MgdGhlIEJJT1MgaXMgdXNpbmcsIG9yCisJICoJZXZlbiBpZiBpdHMgdXNpbmcgdGhlIHNlcmlhbCBwb3J0IGF0IGFsbC4KKwkgKi8KKwljZmxhZyB8PSBCMTE1MjAwIHwgQ1M4IHwgLypubyBwYXJpdHkqLzA7CisKKwljby0+Y2ZsYWcgPSBjZmxhZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmlvc19jb25zb2xlID0geworCS5uYW1lCQk9ICJiaW9zIiwKKwkud3JpdGUJCT0gc2hfY29uc29sZV93cml0ZSwKKwkuc2V0dXAJCT0gc2hfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSAqZWFybHlfY29uc29sZTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKK3sKKwlpbnQga2VlcF9lYXJseSA9IDA7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSkKKwkJa2VlcF9lYXJseSA9IDE7CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQorCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKKworCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKKwkJaWYgKGtlZXBfZWFybHkpCisJCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7CisJCWVsc2UKKwkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOworCQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOworCX0KKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggMTI4MTVjZS4uNTc5Y2QyYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQlyZXR1cm4gMDsKIAogCXNldF91c2VkX21hdGgoKTsKLQlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcigmdHNrLT50aHJlYWQuZnB1LmhhcmQsICZzYy0+c2NfZnByZWdzWzBdLAorCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsICZzYy0+c2NfZnByZWdzWzBdLAogCQkJCXNpemVvZihsb25nKSooMTYqMisyKSk7CiB9CiAKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWNsZWFyX3VzZWRfbWF0aCgpOwogCiAJdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwotCXJldHVybiBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLAorCXJldHVybiBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCSAgICAgIHNpemVvZihsb25nKSooMTYqMisyKSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NIX0ZQVSAqLwpAQCAtNTI4LDcgKzUyOCw3IEBACiAJCS8qIGZhbGx0aHJvdWdoICovCiAJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgogCQkJcmVncy0+cmVnc1swXSA9IHNhdmVfcjA7Ci0JCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAkJCWJyZWFrOwogCX0KIH0KQEAgLTYyNiw5ICs2MjYsOSBAQAogCQkgICAgcmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlRTWVMgfHwKIAkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUTk9JTlRSKSB7CiAJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKLQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCQl9IGVsc2UgaWYgKHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgewotCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAJCQlyZWdzLT5yZWdzWzNdID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDU4MGU5N2QuLjVhOWYxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJcmVncy0+c3IgfD0gU1JfRkQ7CiAJfQogCi0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZCwgJnNjLT5zY19mcHJlZ3NbMF0sCisJZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsICZzYy0+c2NfZnByZWdzWzBdLAogCQkJCShzaXplb2YobG9uZyBsb25nKSAqIDMyKSArIChzaXplb2YoaW50KSAqIDEpKTsKIAogCXJldHVybiBlcnI7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJcmVncy0+c3IgfD0gU1JfRkQ7CiAJfQogCi0JZXJyIHw9IF9fY29weV90b191c2VyKCZzYy0+c2NfZnByZWdzWzBdLCAmY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLAorCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkgICAgICAoc2l6ZW9mKGxvbmcgbG9uZykgKiAzMikgKyAoc2l6ZW9mKGludCkgKiAxKSk7CiAJY2xlYXJfdXNlZF9tYXRoKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggOTgzZTA3OS4uZTEyNGNmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTE2MSwxNSArMTYxLDYgQEAKIAlwbGF0X3NlbmRfaXBpKGNwdSwgU01QX01TR19SRVNDSEVEVUxFKTsKIH0KIAotc3RhdGljIHZvaWQgc3RvcF90aGlzX2NwdSh2b2lkICp1bnVzZWQpCi17Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQlmb3IgKDs7KQotCQljcHVfcmVsYXgoKTsKLX0KLQogdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpCiB7CiAJc21wX2NhbGxfZnVuY3Rpb24oc3RvcF90aGlzX2NwdSwgMCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwppbmRleCA3YjAzNjMzLi4wODMwYzJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAlUUkFQX0hBTkRMRVJfREVDTDsKIAogCS8qIFJld2luZCAqLwotCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAogCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiZGVidWcgdHJhcCIsIHJlZ3MsIDAsIHZlYyAmIDB4ZmYsCiAJCSAgICAgICBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKQEAgLTc1LDcgKzc1LDcgQEAKIAlUUkFQX0hBTkRMRVJfREVDTDsKIAogCS8qIFJld2luZCAqLwotCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAogCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiYnVnIHRyYXAiLCByZWdzLCAwLCBUUkFQQV9CVUdfT1BDT0RFICYgMHhmZiwKIAkJICAgICAgIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggODY2MzliZS4uYzNkODZmYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC0yNCwxMSArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9hbGlnbm1lbnQuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KIApAQCAtNDcsNzMgKzQ2LDYgQEAKICNkZWZpbmUgVFJBUF9JTExFR0FMX1NMT1RfSU5TVAkxMwogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3VzZXI7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9zeXM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9oYWxmOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfd29yZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX2R3b3JkOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfbXVsdGk7Ci0vKiBiaXRmaWVsZDogMTogd2FybiAyOiBmaXh1cCA0OiBzaWduYWwgLT4gY29tYmluYXRpb25zIDJ8NCAmJiAxfDJ8NCBhcmUgbm90Ci0gICB2YWxpZCEgKi8KLXN0YXRpYyBpbnQgc2VfdXNlcm1vZGUgPSAzOwotLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwotc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBjb25zdCBjaGFyICpzZV91c2VybW9kZV9hY3Rpb25bXSA9IHsKLQkiaWdub3JlZCIsCi0JIndhcm4iLAotCSJmaXh1cCIsCi0JImZpeHVwK3dhcm4iLAotCSJzaWduYWwiLAotCSJzaWduYWwrd2FybiIKLX07Ci0KLXN0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc2VxX3ByaW50ZihtLCAiVXNlcjpcdFx0JWx1XG4iLCBzZV91c2VyKTsKLQlzZXFfcHJpbnRmKG0sICJTeXN0ZW06XHRcdCVsdVxuIiwgc2Vfc3lzKTsKLQlzZXFfcHJpbnRmKG0sICJIYWxmOlx0XHQlbHVcbiIsIHNlX2hhbGYpOwotCXNlcV9wcmludGYobSwgIldvcmQ6XHRcdCVsdVxuIiwgc2Vfd29yZCk7Ci0Jc2VxX3ByaW50ZihtLCAiRFdvcmQ6XHRcdCVsdVxuIiwgc2VfZHdvcmQpOwotCXNlcV9wcmludGYobSwgIk11bHRpOlx0XHQlbHVcbiIsIHNlX211bHRpKTsKLQlzZXFfcHJpbnRmKG0sICJVc2VyIGZhdWx0czpcdCVpICglcylcbiIsIHNlX3VzZXJtb2RlLAotCQkJc2VfdXNlcm1vZGVfYWN0aW9uW3NlX3VzZXJtb2RlXSk7Ci0Jc2VxX3ByaW50ZihtLCAiS2VybmVsIGZhdWx0czpcdCVpIChmaXh1cCVzKVxuIiwgc2Vfa2Vybm1vZGVfd2FybiwKLQkJCXNlX2tlcm5tb2RlX3dhcm4gPyAiK3dhcm4iIDogIiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFsaWdubWVudF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFsaWdubWVudF9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBhbGlnbm1lbnRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKLXsKLQlpbnQgKmRhdGEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7Ci0JY2hhciBtb2RlOwotCi0JaWYgKGNvdW50ID4gMCkgewotCQlpZiAoZ2V0X3VzZXIobW9kZSwgYnVmZmVyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAobW9kZSA+PSAnMCcgJiYgbW9kZSA8PSAnNScpCi0JCQkqZGF0YSA9IG1vZGUgLSAnMCc7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWxpZ25tZW50X3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gYWxpZ25tZW50X3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZQkJPSBhbGlnbm1lbnRfcHJvY193cml0ZSwKLX07Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJvdHRvbSwgdW5zaWduZWQgbG9uZyB0b3ApCiB7CiAJdW5zaWduZWQgbG9uZyBwOwpAQCAtMjY1LDEwICsxOTcsMTAgQEAKIAljb3VudCA9IDE8PChpbnN0cnVjdGlvbiYzKTsKIAogCXN3aXRjaCAoY291bnQpIHsKLQljYXNlIDE6IHNlX2hhbGYgICs9IDE7IGJyZWFrOwotCWNhc2UgMjogc2Vfd29yZCAgKz0gMTsgYnJlYWs7Ci0JY2FzZSA0OiBzZV9kd29yZCArPSAxOyBicmVhazsKLQljYXNlIDg6IHNlX211bHRpICs9IDE7IGJyZWFrOyAvKiA/Pz8gKi8KKwljYXNlIDE6IGluY191bmFsaWduZWRfYnl0ZV9hY2Nlc3MoKTsgYnJlYWs7CisJY2FzZSAyOiBpbmNfdW5hbGlnbmVkX3dvcmRfYWNjZXNzKCk7IGJyZWFrOworCWNhc2UgNDogaW5jX3VuYWxpZ25lZF9kd29yZF9hY2Nlc3MoKTsgYnJlYWs7CisJY2FzZSA4OiBpbmNfdW5hbGlnbmVkX211bHRpX2FjY2VzcygpOyBicmVhazsKIAl9CiAKIAlyZXQgPSAtRUZBVUxUOwpAQCAtNDUyLDE4ICszODQsOCBAQAogCXJtID0gcmVncy0+cmVnc1tpbmRleF07CiAKIAkvKiBzaG91dCBhYm91dCBmaXh1cHMgKi8KLQlpZiAoIWV4cGVjdGVkKSB7Ci0JCWlmICh1c2VyX21vZGUocmVncykgJiYgKHNlX3VzZXJtb2RlICYgMSkgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJfbm90aWNlKCJGaXhpbmcgdXAgdW5hbGlnbmVkIHVzZXJzcGFjZSBhY2Nlc3MgIgotCQkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCQkgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAotCQkJCSAgKHZvaWQgKilyZWdzLT5wYywgaW5zdHJ1Y3Rpb24pOwotCQllbHNlIGlmIChzZV9rZXJubW9kZV93YXJuICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKLQkJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkJICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKLQkJCQkgICh2b2lkICopcmVncy0+cGMsIGluc3RydWN0aW9uKTsKLQl9CisJaWYgKCFleHBlY3RlZCkKKwkJdW5hbGlnbmVkX2ZpeHVwc19ub3RpZnkoY3VycmVudCwgaW5zdHJ1Y3Rpb24sIHJlZ3MpOwogCiAJcmV0ID0gLUVGQVVMVDsKIAlzd2l0Y2ggKGluc3RydWN0aW9uJjB4RjAwMCkgewpAQCAtNjE2LDEwICs1MzgsMTAgQEAKIAogCWlmICh1c2VyX21vZGUocmVncykpIHsKIAkJaW50IHNpX2NvZGUgPSBCVVNfQURSRVJSOworCQl1bnNpZ25lZCBpbnQgdXNlcl9hY3Rpb247CiAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JCXNlX3VzZXIgKz0gMTsKKwkJaW5jX3VuYWxpZ25lZF91c2VyX2FjY2VzcygpOwogCiAJCXNldF9mcyhVU0VSX0RTKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKGluc25fc2l6ZV90ICopKHJlZ3MtPnBjICYgfjEpLApAQCAtNjMwLDE2ICs1NTIsMTIgQEAKIAkJc2V0X2ZzKG9sZGZzKTsKIAogCQkvKiBzaG91dCBhYm91dCB1c2Vyc3BhY2UgZml4dXBzICovCi0JCWlmIChzZV91c2VybW9kZSAmIDEpCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzICIKLQkJCSAgICAgICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKLQkJCSAgICAgICBpbnN0cnVjdGlvbik7CisJCXVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KGN1cnJlbnQsIGluc3RydWN0aW9uLCByZWdzKTsKIAotCQlpZiAoc2VfdXNlcm1vZGUgJiAyKQorCQl1c2VyX2FjdGlvbiA9IHVuYWxpZ25lZF91c2VyX2FjdGlvbigpOworCQlpZiAodXNlcl9hY3Rpb24gJiBVTV9GSVhVUCkKIAkJCWdvdG8gZml4dXA7Ci0KLQkJaWYgKHNlX3VzZXJtb2RlICYgNCkKKwkJaWYgKHVzZXJfYWN0aW9uICYgVU1fU0lHTkFMKQogCQkJZ290byB1c3BhY2Vfc2VndjsKIAkJZWxzZSB7CiAJCQkvKiBpZ25vcmUgKi8KQEAgLTY1OSw3ICs1NzcsNyBAQAogCQkJCQkgICAgICAmdXNlcl9tZW1fYWNjZXNzLCAwKTsKIAkJc2V0X2ZzKG9sZGZzKTsKIAotCQlpZiAodG1wPT0wKQorCQlpZiAodG1wID09IDApCiAJCQlyZXR1cm47IC8qIHNvcnRlZCAqLwogdXNwYWNlX3NlZ3Y6CiAJCXByaW50ayhLRVJOX05PVElDRSAiU2VuZGluZyBTSUdCVVMgdG8gXCIlc1wiIGR1ZSB0byB1bmFsaWduZWQgIgpAQCAtNjcyLDcgKzU5MCw3IEBACiAJCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CiAJCWZvcmNlX3NpZ19pbmZvKFNJR0JVUywgJmluZm8sIGN1cnJlbnQpOwogCX0gZWxzZSB7Ci0JCXNlX3N5cyArPSAxOworCQlpbmNfdW5hbGlnbmVkX2tlcm5lbF9hY2Nlc3MoKTsKIAogCQlpZiAocmVncy0+cGMgJiAxKQogCQkJZGllKCJ1bmFsaWduZWQgcHJvZ3JhbSBjb3VudGVyIiwgcmVncywgZXJyb3JfY29kZSk7CkBAIC02ODcsMTEgKzYwNSw3IEBACiAJCQlkaWUoImluc24gZmF1bHRpbmcgaW4gZG9fYWRkcmVzc19lcnJvciIsIHJlZ3MsIDApOwogCQl9CiAKLQkJaWYgKHNlX2tlcm5tb2RlX3dhcm4pCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKLQkJCSAgICAgICAib24gYmVoYWxmIG9mIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCi0JCQkgICAgICAgaW5zdHJ1Y3Rpb24pOworCQl1bmFsaWduZWRfZml4dXBzX25vdGlmeShjdXJyZW50LCBpbnN0cnVjdGlvbiwgcmVncyk7CiAKIAkJaGFuZGxlX3VuYWxpZ25lZF9hY2Nlc3MoaW5zdHJ1Y3Rpb24sIHJlZ3MsCiAJCQkJCSZ1c2VyX21lbV9hY2Nlc3MsIDApOwpAQCAtODc2LDM1ICs3OTAsMTAgQEAKIAlkaWVfaWZfa2VybmVsKCJleGNlcHRpb24iLCByZWdzLCBleCk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotdm9pZCAqZ2RiX3Zicl92ZWN0b3I7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZ2RiX3Zicl9pbml0KHZvaWQpCi17Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB2YnI7Ci0KLQkvKgotCSAqIFJlYWQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgVkJSIHJlZ2lzdGVyIHRvIGluaXRpYWxpc2UKLQkgKiB0aGUgdmVjdG9yIHRocm91Z2ggd2hpY2ggZGVidWcgYW5kIEJJT1MgdHJhcHMgYXJlCi0JICogZGVsZWdhdGVkIGJ5IHRoZSBMaW51eCB0cmFwIGhhbmRsZXIuCi0JICovCi0JYXNtIHZvbGF0aWxlKCJzdGMgdmJyLCAlMCIgOiAiPXIiICh2YnIpKTsKLQotCWdkYl92YnJfdmVjdG9yID0gKHZvaWQgKikodmJyICsgMHgxMDApOwotCXByaW50aygiU2V0dGluZyBHREIgdHJhcCB2ZWN0b3IgdG8gMHglMDhseFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZ2RiX3Zicl92ZWN0b3IpOwotfQotI2VuZGlmCi0KIHZvaWQgX19jcHVpbml0IHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHZvaWQgKnZicl9iYXNlOwogCi0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLQlpZiAocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKQotCQlnZGJfdmJyX2luaXQoKTsKLSNlbmRpZgotCiAJLyogTk9URTogVGhlIFZCUiB2YWx1ZSBzaG91bGQgYmUgYXQgUDEKIAkgICAob3IgUDIsIHZpcnR1cmFsICJmaXhlZCIgYWRkcmVzcyBzcGFjZSkuCiAJICAgSXQncyBkZWZpbml0ZWx5IHNob3VsZCBub3QgaW4gcGh5c2ljYWwgYWRkcmVzcy4gICovCkBAIC05NTYsMTEgKzg0NSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIFRSQVBfVUJDCi0Jc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWMoVFJBUF9VQkMsIGJyZWFrX3BvaW50X3RyYXApOworCXNldF9leGNlcHRpb25fdGFibGVfdmVjKFRSQVBfVUJDLCBicmVha3BvaW50X3RyYXBfaGFuZGxlcik7CiAjZW5kaWYKLQotCS8qIFNldHVwIFZCUiBmb3IgYm9vdCBjcHUgKi8KLQlwZXJfY3B1X3RyYXBfaW5pdCgpOwogfQogCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgKnNwKQpAQCAtOTg1LDM0ICs4NzEsMyBAQAogCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2spOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLS8qCi0gKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgc3lzY3RsX2luaXQsIG90aGVyd2lzZSBzeXMvIHdpbGwgYmUKLSAqIG92ZXJ3cml0dGVuLiAgQWN0dWFsbHksIHRoaXMgc2hvdWxkbid0IGJlIGluIHN5cy8gYXQgYWxsIHNpbmNlCi0gKiBpdCBpc24ndCBhIHN5c2N0bCwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBzeXNjdGwgaW5mb3JtYXRpb24uCi0gKiBXZSBub3cgbG9jYXRlIGl0IGluIC9wcm9jL2NwdS9hbGlnbm1lbnQgaW5zdGVhZC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYWxpZ25tZW50X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpciwgKnJlczsKLQotCWRpciA9IHByb2NfbWtkaXIoImNwdSIsIE5VTEwpOwotCWlmICghZGlyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlcyA9IHByb2NfY3JlYXRlX2RhdGEoImFsaWdubWVudCIsIFNfSVdVU1IgfCBTX0lSVUdPLCBkaXIsCi0JCQkgICAgICAgJmFsaWdubWVudF9wcm9jX2ZvcHMsICZzZV91c2VybW9kZSk7Ci0JaWYgKCFyZXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0gICAgICAgIHJlcyA9IHByb2NfY3JlYXRlX2RhdGEoImtlcm5lbF9hbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgZGlyLAotCQkJICAgICAgICZhbGlnbm1lbnRfcHJvY19mb3BzLCAmc2Vfa2Vybm1vZGVfd2Fybik7Ci0gICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWZzX2luaXRjYWxsKGFsaWdubWVudF9pbml0KTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggZDg2ZjUzMS4uZTNmOTJlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCkBAIC02MTEsMTkgKzYxMSwxOSBAQAogCiAJCXN3aXRjaCAod2lkdGhfc2hpZnQpIHsKIAkJY2FzZSAyOgotCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKKwkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCWlmIChkb19wYWlyZWRfbG9hZCkgewotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87Ci0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmaGk7CiAJCQl9IGVsc2UgewogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWddID0gYnVmaGk7Ci0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmxvOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmhpOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmbG87CiAjZWxzZQotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87Ci0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOworCQkJCWN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmaGk7CiAjZW5kaWYKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNjgxLDE5ICs2ODEsMTkgQEAKIAogCQlzd2l0Y2ggKHdpZHRoX3NoaWZ0KSB7CiAJCWNhc2UgMjoKLQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnXTsKKwkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZ107CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQkJaWYgKGRvX3BhaXJlZF9sb2FkKSB7Ci0JCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWddOwotCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnKzFdOworCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZ107CisJCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnKzFdOwogCQkJfSBlbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikKLQkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107Ci0JCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWcrMV07CisJCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnXTsKKwkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWcrMV07CiAjZWxzZQotCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnXTsKLQkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZysxXTsKKwkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOworCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZysxXTsKICNlbmRpZgogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhMWU0ZWMyLi43ZjhhNzA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTMsNyArMyw3IEBACiAgKiBXcml0dGVuIGJ5IE5paWJlIFl1dGFrYSBhbmQgUGF1bCBNdW5kdAogICovCiAjaWZkZWYgQ09ORklHX1NVUEVSSDY0Ci0jZGVmaW5lIExPQURfT0ZGU0VUCUNPTkZJR19QQUdFX09GRlNFVAorI2RlZmluZSBMT0FEX09GRlNFVAlQQUdFX09GRlNFVAogT1VUUFVUX0FSQ0goc2g6c2g1KQogI2Vsc2UKICNkZWZpbmUgTE9BRF9PRkZTRVQJMApAQCAtMTQsMTcgKzE0LDE2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3ZtbGludXgubGRzLmg+CiAKKyNpZmRlZiBDT05GSUdfUE1CCisgI2RlZmluZSBNRU1PUllfT0ZGU0VUCTAKKyNlbHNlCisgI2RlZmluZSBNRU1PUllfT0ZGU0VUCV9fTUVNT1JZX1NUQVJUCisjZW5kaWYKKwogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSNpZmRlZiBDT05GSUdfUE1CX0ZJWEVECi0JLiA9IENPTkZJR19QQUdFX09GRlNFVCArIChDT05GSUdfTUVNT1JZX1NUQVJUICYgMHgxZmZmZmZmZikgKwotCSAgICBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKLSNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQotCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKLSNlbHNlCi0JLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKLSNlbmRpZgorCS4gPSBQQUdFX09GRlNFVCArIE1FTU9SWV9PRkZTRVQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKIAogCV90ZXh0ID0gLjsJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAKQEAgLTM1LDEyICszNCw3IEBACiAJLnRleHQgOiBBVChBRERSKC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAJCUhFQURfVEVYVAogCQlURVhUX1RFWFQKLQotI2lmZGVmIENPTkZJR19TVVBFUkg2NAotCQkqKC50ZXh0NjQpCi0JCSooLnRleHQuLlNIbWVkaWEzMikKLSNlbmRpZgotCisJCUVYVFJBX1RFWFQKIAkJU0NIRURfVEVYVAogCQlMT0NLX1RFWFQKIAkJS1BST0JFU19URVhUCkBAIC01MSwyNCArNDUsMTIgQEAKIAl9ID0gMHgwMDA5CiAKIAlFWENFUFRJT05fVEFCTEUoMTYpCi0KIAlOT1RFUworCisJX3NkYXRhID0gLjsKIAlST19EQVRBKFBBR0VfU0laRSkKLQotCS8qCi0JICogQ29kZSB3aGljaCBtdXN0IGJlIGV4ZWN1dGVkIHVuY2FjaGVkIGFuZCB0aGUgYXNzb2NpYXRlZCBkYXRhCi0JICovCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLnVuY2FjaGVkIDogQVQoQUREUigudW5jYWNoZWQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX191bmNhY2hlZF9zdGFydCA9IC47Ci0JCSooLnVuY2FjaGVkLnRleHQpCi0JCSooLnVuY2FjaGVkLmRhdGEpCi0JCV9fdW5jYWNoZWRfZW5kID0gLjsKLQl9Ci0KIAlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCi0KLQlfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KKwlfZWRhdGEgPSAuOwogCiAJRFdBUkZfRUhfRlJBTUUKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3NoL21hdGgtZW11L21hdGguYwppbmRleCBkNmMxNWNhLi4xZmNkYjEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL21hdGgtZW11L21hdGguYworKysgYi9hcmNoL3NoL21hdGgtZW11L21hdGguYwpAQCAtNDcxLDEwICs0NzEsMTAgQEAKICAqCWRlbm9ybWFsX3RvX2RvdWJsZSAtIEdpdmVuIGRlbm9ybWFsaXplZCBmbG9hdCBudW1iZXIsCiAgKgkgICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3VibGUgZmxvYXQKICAqCi0gKglAZnB1OiBQb2ludGVyIHRvIHNoX2ZwdV9oYXJkIHN0cnVjdHVyZQorICoJQGZwdTogUG9pbnRlciB0byBzaF9mcHVfc29mdCBzdHJ1Y3R1cmUKICAqCUBuOiBJbmRleCB0byBGUCByZWdpc3RlcgogICovCi1zdGF0aWMgdm9pZCBkZW5vcm1hbF90b19kb3VibGUoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnB1LCBpbnQgbikKK3N0YXRpYyB2b2lkIGRlbm9ybWFsX3RvX2RvdWJsZShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcHUsIGludCBuKQogewogCXVuc2lnbmVkIGxvbmcgZHUsIGRsOwogCXVuc2lnbmVkIGxvbmcgeCA9IGZwdS0+ZnB1bDsKQEAgLTU1MiwxMSArNTUyLDExIEBACiAJaWYgKChmaW5zbiAmIDB4ZjFmZikgPT0gMHhmMGFkKSB7IC8qIGZjbnZzZCAqLwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQkJaWYgKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmICgxIDw8IDE3KSkpIHsKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHUuZnBzY3IgJiAoMSA8PCAxNykpKSB7CiAJCQkvKiBGUFUgZXJyb3IgKi8KLQkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLmZwdS5oYXJkLAorCQkJZGVub3JtYWxfdG9fZG91YmxlICgmdHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LAogCQkJCQkgICAgKGZpbnNuID4+IDgpICYgMHhmKTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCQl0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHUuZnBzY3IgJj0KIAkJCQl+KEZQU0NSX0NBVVNFX01BU0sgfCBGUFNDUl9GTEFHX01BU0spOwogCQkJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKIAkJfSBlbHNlIHsKQEAgLTYxNyw3ICs2MTcsNyBAQAogaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0IGluc3QsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcHUgPSAmKHRzay0+dGhyZWFkLmZwdS5zb2Z0KTsKKwlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcHUgPSAmKHRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSk7CiAKIAlpZiAoISh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpKSB7CiAJCS8qIGluaXRpYWxpemUgb25jZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA5ODZhNzFiLi4xNDQ1Y2E2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC03NSw1MiArNzUsMjUgQEAKIGNvbmZpZyAyOUJJVAogCWRlZl9ib29sICEzMkJJVAogCWRlcGVuZHMgb24gU1VQRVJIMzIKKwlzZWxlY3QgVU5DQUNIRURfTUFQUElORwogCiBjb25maWcgMzJCSVQKIAlib29sCiAJZGVmYXVsdCB5IGlmIENQVV9TSDUKIAotY29uZmlnIFBNQl9FTkFCTEUKK2NvbmZpZyBQTUIKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgogCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KLQkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQotCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgotCi1jaG9pY2UKLQlwcm9tcHQgIlBNQiBoYW5kbGluZyB0eXBlIgotCWRlcGVuZHMgb24gUE1CX0VOQUJMRQotCWRlZmF1bHQgUE1CX0ZJWEVECi0KLWNvbmZpZyBQTUIKLQlib29sICJQTUIiCi0JZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIENQVV9TSDRBICYmICFDUFVfU0g0QUxfRFNQCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bwotCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5Ci0JICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCi0KLWNvbmZpZyBQTUJfRklYRUQKLQlib29sICJmaXhlZCBQTUIiCi0JZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIENQVV9TSDRBICYmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IDMyQklUCisJc2VsZWN0IFVOQ0FDSEVEX01BUFBJTkcKIAloZWxwCi0JICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBmaXhlZCBQTUIgbWFwcGluZ3MgYXJlIGluaGVyaXRlZAotCSAgZnJvbSB0aGUgYm9vdCBsb2FkZXIsIGFuZCB0aGUga2VybmVsIGRvZXMgbm90IGF0dGVtcHQgZHluYW1pYwotCSAgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgY2xvc2VzdCB0byBsZWdhY3kgMjktYml0IHBoeXNpY2FsIG1vZGUsCi0JICBhbmQgYWxsb3dzIHN5c3RlbXMgdG8gc3VwcG9ydCB1cCB0byA1MTJNaUIgb2Ygc3lzdGVtIG1lbW9yeS4KLQotZW5kY2hvaWNlCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCisJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKKwkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KIAogY29uZmlnIFgyVExCCi0JYm9vbCAiRW5hYmxlIGV4dGVuZGVkIFRMQiBtb2RlIgotCWRlcGVuZHMgb24gKENQVV9TSFgyIHx8IENQVV9TSFgzKSAmJiBNTVUgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHRoZSBleHRlbmRlZCBtb2RlIG9mIHRoZSBTSC1YMgotCSAgVExCLiBGb3IgbGVnYWN5IFNILVggYmVoYXZpb3VyIGFuZCBpbnRlcm9wZXJhYmlsaXR5LCBzYXkgTi4gRm9yCi0JICBhbGwgb2YgdGhlIGZ1biBuZXcgZmVhdHVyZXMgYW5kIGEgd2lsbGluZ2xlc3MgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLAotCSAgc2F5IFkuCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gKENQVV9TSFgyIHx8IENQVV9TSFgzKSAmJiBNTVUKIAogY29uZmlnIFZTWVNDQUxMCiAJYm9vbCAiU3VwcG9ydCB2c3lzY2FsbCBwYWdlIgpAQCAtMTg4LDE0ICsxNjEsMTkgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRwogCitjb25maWcgSU9SRU1BUF9GSVhFRAorICAgICAgIGRlZl9ib29sIHkKKyAgICAgICBkZXBlbmRzIG9uIFgyVExCIHx8IFNVUEVSSDY0CisKK2NvbmZpZyBVTkNBQ0hFRF9NQVBQSU5HCisJYm9vbAorCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiCi0JZGVmYXVsdCBQQUdFX1NJWkVfOEtCIGlmIFgyVExCCiAJZGVmYXVsdCBQQUdFX1NJWkVfNEtCCiAKIGNvbmZpZyBQQUdFX1NJWkVfNEtCCiAJYm9vbCAiNGtCIgotCWRlcGVuZHMgb24gIU1NVSB8fCAhWDJUTEIKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkZWZhdWx0IHBhZ2Ugc2l6ZSB1c2VkIGJ5IGFsbCBTdXBlckggQ1BVcy4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9NYWtlZmlsZSBiL2FyY2gvc2gvbW0vTWFrZWZpbGUKaW5kZXggOGE3MDUzNS4uM2RjOGE4YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL21tL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFN1cGVySC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CQkJOj0gY2FjaGUubyBpbml0Lm8gY29uc2lzdGVudC5vIG1tYXAubworb2JqLXkJCQk6PSBhbGlnbm1lbnQubyBjYWNoZS5vIGluaXQubyBjb25zaXN0ZW50Lm8gbW1hcC5vCiAKIGNhY2hlb3BzLSQoQ09ORklHX0NQVV9TSDIpCQk6PSBjYWNoZS1zaDIubwogY2FjaGVvcHMtJChDT05GSUdfQ1BVX1NIMkEpCQk6PSBjYWNoZS1zaDJhLm8KQEAgLTE1LDcgKzE1LDcgQEAKIAogbW11LXkJCQk6PSBub21tdS5vIGV4dGFibGVfMzIubwogbW11LSQoQ09ORklHX01NVSkJOj0gZXh0YWJsZV8kKEJJVFMpLm8gZmF1bHRfJChCSVRTKS5vIFwKLQkJCSAgIGlvcmVtYXBfJChCSVRTKS5vIGttYXAubyB0bGJmbHVzaF8kKEJJVFMpLm8KKwkJCSAgIGlvcmVtYXAubyBrbWFwLm8gcGd0YWJsZS5vIHRsYmZsdXNoXyQoQklUUykubwogCiBvYmoteQkJCSs9ICQobW11LXkpCiBvYmotJChDT05GSUdfREVCVUdfRlMpCSs9IGFzaWRzLWRlYnVnZnMubwpAQCAtMjYsMTUgKzI2LDE3IEBACiAKIGlmZGVmIENPTkZJR19NTVUKIHRsYi0kKENPTkZJR19DUFVfU0gzKQkJOj0gdGxiLXNoMy5vCi10bGItJChDT05GSUdfQ1BVX1NINCkJCTo9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9TSDQpCQk6PSB0bGItc2g0Lm8gdGxiLXVyYi5vCiB0bGItJChDT05GSUdfQ1BVX1NINSkJCTo9IHRsYi1zaDUubwotdGxiLSQoQ09ORklHX0NQVV9IQVNfUFRFQUVYKQk6PSB0bGItcHRlYWV4Lm8KK3RsYi0kKENPTkZJR19DUFVfSEFTX1BURUFFWCkJOj0gdGxiLXB0ZWFleC5vIHRsYi11cmIubwogb2JqLXkJCQkJKz0gJCh0bGIteSkKIGVuZGlmCiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KLW9iai0kKENPTkZJR19QTUJfRU5BQkxFKQkrPSBwbWIubworb2JqLSQoQ09ORklHX1BNQikJCSs9IHBtYi5vCiBvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubworb2JqLSQoQ09ORklHX0lPUkVNQVBfRklYRUQpCSs9IGlvcmVtYXBfZml4ZWQubworb2JqLSQoQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcpCSs9IHVuY2FjaGVkLm8KIAogIyBTcGVjaWFsIGZsYWdzIGZvciBmYXVsdF82NC5vLiAgVGhpcyBwdXRzIHJlc3RyaWN0aW9ucyBvbiB0aGUgbnVtYmVyIG9mCiAjIGNhbGxlci1zYXZlIHJlZ2lzdGVycyB0aGF0IHRoZSBjb21waWxlciBjYW4gdGFyZ2V0IHdoZW4gYnVpbGRpbmcgdGhpcyBmaWxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvc2gvbW0vYWxpZ25tZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1OTViOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vYWxpZ25tZW50LmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBBbGlnbm1lbnQgYWNjZXNzIGNvdW50ZXJzIGFuZCBjb3JyZXNwb25kaW5nIHVzZXItc3BhY2UgaW50ZXJmYWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QgTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2FsaWdubWVudC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfdXNlcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3N5czsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX2hhbGY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV93b3JkOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfZHdvcmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9tdWx0aTsKKy8qIGJpdGZpZWxkOiAxOiB3YXJuIDI6IGZpeHVwIDQ6IHNpZ25hbCAtPiBjb21iaW5hdGlvbnMgMnw0ICYmIDF8Mnw0IGFyZSBub3QKKyAgIHZhbGlkISAqLworc3RhdGljIGludCBzZV91c2VybW9kZSA9IFVNX1dBUk4gfCBVTV9GSVhVUDsKKy8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybjsKKworY29yZV9wYXJhbShhbGlnbm1lbnQsIHNlX3VzZXJtb2RlLCBpbnQsIDA2MDApOworCit2b2lkIGluY191bmFsaWduZWRfYnl0ZV9hY2Nlc3Modm9pZCkKK3sKKwlzZV9oYWxmKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF93b3JkX2FjY2Vzcyh2b2lkKQoreworCXNlX3dvcmQrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX2R3b3JkX2FjY2Vzcyh2b2lkKQoreworCXNlX2R3b3JkKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF9tdWx0aV9hY2Nlc3Modm9pZCkKK3sKKwlzZV9tdWx0aSsrOworfQorCit2b2lkIGluY191bmFsaWduZWRfdXNlcl9hY2Nlc3Modm9pZCkKK3sKKwlzZV91c2VyKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF9rZXJuZWxfYWNjZXNzKHZvaWQpCit7CisJc2Vfc3lzKys7Cit9CisKKy8qCisgKiBUaGlzIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgcG9saWN5IHdoaWNoIGNhbiBiZSBzZXQgZnJvbSB0aGUgY29tbWFuZAorICogbGluZSwgd2hpbGUgcHJvY2Vzc2VzIGNhbiBvdmVybG9hZCB0aGVpciBwcmVmZXJlbmNlcyB2aWEgcHJjdGwoKS4KKyAqLwordW5zaWduZWQgaW50IHVuYWxpZ25lZF91c2VyX2FjdGlvbih2b2lkKQoreworCXVuc2lnbmVkIGludCBhY3Rpb24gPSBzZV91c2VybW9kZTsKKworCWlmIChjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBTSF9USFJFQURfVUFDX1NJR0JVUykgeworCQlhY3Rpb24gJj0gflVNX0ZJWFVQOworCQlhY3Rpb24gfD0gVU1fU0lHTkFMOworCX0KKworCWlmIChjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBTSF9USFJFQURfVUFDX05PUFJJTlQpCisJCWFjdGlvbiAmPSB+VU1fV0FSTjsKKworCXJldHVybiBhY3Rpb247Cit9CisKK2ludCBnZXRfdW5hbGlnbl9jdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcHV0X3VzZXIodHNrLT50aHJlYWQuZmxhZ3MgJiBTSF9USFJFQURfVUFDX01BU0ssCisJCQkodW5zaWduZWQgaW50IF9fdXNlciAqKWFkZHIpOworfQorCitpbnQgc2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXRzay0+dGhyZWFkLmZsYWdzID0gKHRzay0+dGhyZWFkLmZsYWdzICYgflNIX1RIUkVBRF9VQUNfTUFTSykgfAorCQkJICAgICh2YWwgJiBTSF9USFJFQURfVUFDX01BU0spOworCXJldHVybiAwOworfQorCit2b2lkIHVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnNuX3NpemVfdCBpbnNuLAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodXNlcl9tb2RlKHJlZ3MpICYmIChzZV91c2VybW9kZSAmIFVNX1dBUk4pICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJfbm90aWNlKCJGaXhpbmcgdXAgdW5hbGlnbmVkIHVzZXJzcGFjZSBhY2Nlc3MgIgorCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAorCQkJICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksCisJCQkgICh2b2lkICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSwgaW5zbik7CisJZWxzZSBpZiAoc2Vfa2Vybm1vZGVfd2FybiAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKKwkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCSAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLAorCQkJICAodm9pZCAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIGluc24pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2VfdXNlcm1vZGVfYWN0aW9uW10gPSB7CisJImlnbm9yZWQiLAorCSJ3YXJuIiwKKwkiZml4dXAiLAorCSJmaXh1cCt3YXJuIiwKKwkic2lnbmFsIiwKKwkic2lnbmFsK3dhcm4iCit9OworCitzdGF0aWMgaW50IGFsaWdubWVudF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXNlcV9wcmludGYobSwgIlVzZXI6XHRcdCVsdVxuIiwgc2VfdXNlcik7CisJc2VxX3ByaW50ZihtLCAiU3lzdGVtOlx0XHQlbHVcbiIsIHNlX3N5cyk7CisJc2VxX3ByaW50ZihtLCAiSGFsZjpcdFx0JWx1XG4iLCBzZV9oYWxmKTsKKwlzZXFfcHJpbnRmKG0sICJXb3JkOlx0XHQlbHVcbiIsIHNlX3dvcmQpOworCXNlcV9wcmludGYobSwgIkRXb3JkOlx0XHQlbHVcbiIsIHNlX2R3b3JkKTsKKwlzZXFfcHJpbnRmKG0sICJNdWx0aTpcdFx0JWx1XG4iLCBzZV9tdWx0aSk7CisJc2VxX3ByaW50ZihtLCAiVXNlciBmYXVsdHM6XHQlaSAoJXMpXG4iLCBzZV91c2VybW9kZSwKKwkJCXNlX3VzZXJtb2RlX2FjdGlvbltzZV91c2VybW9kZV0pOworCXNlcV9wcmludGYobSwgIktlcm5lbCBmYXVsdHM6XHQlaSAoZml4dXAlcylcbiIsIHNlX2tlcm5tb2RlX3dhcm4sCisJCQlzZV9rZXJubW9kZV93YXJuID8gIit3YXJuIiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhbGlnbm1lbnRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgYWxpZ25tZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJaW50ICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCWNoYXIgbW9kZTsKKworCWlmIChjb3VudCA+IDApIHsKKwkJaWYgKGdldF91c2VyKG1vZGUsIGJ1ZmZlcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKG1vZGUgPj0gJzAnICYmIG1vZGUgPD0gJzUnKQorCQkJKmRhdGEgPSBtb2RlIC0gJzAnOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFsaWdubWVudF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGFsaWdubWVudF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gYWxpZ25tZW50X3Byb2Nfd3JpdGUsCit9OworCisvKgorICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHN5c2N0bF9pbml0LCBvdGhlcndpc2Ugc3lzLyB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbi4gIEFjdHVhbGx5LCB0aGlzIHNob3VsZG4ndCBiZSBpbiBzeXMvIGF0IGFsbCBzaW5jZQorICogaXQgaXNuJ3QgYSBzeXNjdGwsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gc3lzY3RsIGluZm9ybWF0aW9uLgorICogV2Ugbm93IGxvY2F0ZSBpdCBpbiAvcHJvYy9jcHUvYWxpZ25tZW50IGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFsaWdubWVudF9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXIsICpyZXM7CisKKwlkaXIgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJhbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgZGlyLAorCQkJICAgICAgICZhbGlnbm1lbnRfcHJvY19mb3BzLCAmc2VfdXNlcm1vZGUpOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworICAgICAgICByZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJrZXJuZWxfYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKKwkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX2tlcm5tb2RlX3dhcm4pOworICAgICAgICBpZiAoIXJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoYWxpZ25tZW50X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwppbmRleCA1YmEwNjdiLi42OTBlZDAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwpAQCAtMjIsOCArMjIsNyBAQAogCUNBQ0hFX1RZUEVfVU5JRklFRCwKIH07CiAKLXN0YXRpYyBpbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgY2FjaGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLAotCQkJCQkJICB2b2lkICppdGVyKQorc3RhdGljIGludCBjYWNoZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXIpCiB7CiAJdW5zaWduZWQgaW50IGNhY2hlX3R5cGUgPSAodW5zaWduZWQgaW50KWZpbGUtPnByaXZhdGU7CiAJc3RydWN0IGNhY2hlX2luZm8gKmNhY2hlOwpAQCAtMzcsNyArMzYsNyBAQAogCSAqLwogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAotCWNjciA9IGN0cmxfaW5sKENDUik7CisJY2NyID0gX19yYXdfcmVhZGwoQ0NSKTsKIAlpZiAoKGNjciAmIENDUl9DQUNIRV9FTkFCTEUpID09IDApIHsKIAkJYmFja190b19jYWNoZWQoKTsKIApAQCAtOTAsNyArODksNyBAQAogCQlmb3IgKGFkZHIgPSBhZGRyc3RhcnQsIGxpbmUgPSAwOwogCQkgICAgIGFkZHIgPCBhZGRyc3RhcnQgKyB3YXlzaXplOwogCQkgICAgIGFkZHIgKz0gY2FjaGUtPmxpbmVzeiwgbGluZSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCiAJCQkvKiBDaGVjayB0aGUgViBiaXQsIGlnbm9yZSBpbnZhbGlkIGNhY2hlbGluZXMgKi8KIAkJCWlmICgoZGF0YSAmIDEpID09IDApCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoMi5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYwppbmRleCA2OTlhNzFmLi5kZWZjZjcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoMi5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gyLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwZmYwKTsKIAkJaW50IHdheTsKIAkJZm9yICh3YXkgPSAwOyB3YXkgPCA0OyB3YXkrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIGN0cmxfaW5sKGFkZHIgfCAod2F5IDw8IDEyKSk7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgX19yYXdfcmVhZGwoYWRkciB8ICh3YXkgPDwgMTIpKTsKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09ICh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMikpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMikpOwogCQkJfQogCQl9CiAJfQpAQCAtNDcsNyArNDcsNyBAQAogCQkmIH4oTDFfQ0FDSEVfQllURVMtMSk7CiAKIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpCi0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMGZmMCkgfCAweDAwMDAwMDA4KTsKIH0KIApAQCAtNjMsOSArNjMsOSBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAJY2NyIHw9IENDUl9DQUNIRV9JTlZBTElEQVRFOwotCWN0cmxfb3V0bChjY3IsIENDUik7CisJX19yYXdfd3JpdGVsKGNjciwgQ0NSKTsKIAogCWJhY2tfdG9fY2FjaGVkKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNzgsNyArNzgsNyBAQAogCQkmIH4oTDFfQ0FDSEVfQllURVMtMSk7CiAKIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpCi0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMGZmMCkgfCAweDAwMDAwMDA4KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoMmEuYwppbmRleCA5NzU4OTlkLi4xZjUxMjI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoMmEuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoMmEuYwpAQCAtMzIsMTAgKzMyLDEwIEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApOwogCQlpbnQgd2F5OwogCQlmb3IgKHdheSA9IDA7IHdheSA8IDQ7IHdheSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgY3RybF9pbmwoYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBfX3Jhd19yZWFkbChhZGRyIHwgKHdheSA8PCAxMSkpOwogCQkJaWYgKChkYXRhICYgQ0FDSEVfUEhZU0FERFJfTUFTSykgPT0gKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSkgewogCQkJCWRhdGEgJj0gflNIX0NBQ0hFX1VQREFURUQ7Ci0JCQkJY3RybF9vdXRsKGRhdGEsIGFkZHIgfCAod2F5IDw8IDExKSk7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIgfCAod2F5IDw8IDExKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC01OCw3ICs1OCw3IEBACiAJanVtcF90b191bmNhY2hlZCgpOwogCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKSB7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKIAl9CiAJYmFja190b19jYWNoZWQoKTsKQEAgLTc4LDE3ICs3OCwxNyBAQAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAogI2lmZGVmIENPTkZJR19DQUNIRV9XUklURUJBQ0sKLQljdHJsX291dGwoY3RybF9pbmwoQ0NSKSB8IENDUl9PQ0FDSEVfSU5WQUxJREFURSwgQ0NSKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoQ0NSKSB8IENDUl9PQ0FDSEVfSU5WQUxJREFURSwgQ0NSKTsKIAkvKiBJLWNhY2hlIGludmFsaWRhdGUgKi8KIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpIHsKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKSB8IDB4MDAwMDAwMDgpOwogCX0KICNlbHNlCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKSB7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKSB8IDB4MDAwMDAwMDgpOwogCX0KICNlbmRpZgpAQCAtMTE1LDE0ICsxMTUsMTQgQEAKIAkJaW50IHdheTsKIAkJLyogTy1DYWNoZSB3cml0ZWJhY2sgKi8KIAkJZm9yICh3YXkgPSAwOyB3YXkgPCA0OyB3YXkrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIGN0cmxfaW5sKENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCBhZGRyIHwgKHdheSA8PCAxMSkpOworCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIF9fcmF3X3JlYWRsKENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCBhZGRyIHwgKHdheSA8PCAxMSkpOwogCQkJaWYgKChkYXRhICYgQ0FDSEVfUEhZU0FERFJfTUFTSykgPT0gKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSkgewogCQkJCWRhdGEgJj0gflNIX0NBQ0hFX1VQREFURUQ7Ci0JCQkJY3RybF9vdXRsKGRhdGEsIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCBhZGRyIHwgKHdheSA8PCAxMSkpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCX0KIAkJfQogCQkvKiBJLUNhY2hlIGludmFsaWRhdGUgKi8KLQkJY3RybF9vdXRsKGFkZHIsCisJCV9fcmF3X3dyaXRlbChhZGRyLAogCQkJICBDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8IDB4MDAwMDAwMDgpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMKaW5kZXggZmFlZjgwYy4uZTM3NTIzZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoMy5jCkBAIC01MCwxMiArNTAsMTIgQEAKIAkJCXAgPSBfX3BhKHYpOwogCQkJYWRkciA9IGFkZHJzdGFydCB8ICh2ICYgY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzayk7CiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCQlkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CiAKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09CiAJCQkgICAgKHAgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSkgewogCQkJCWRhdGEgJj0gflNIX0NBQ0hFX1VQREFURUQ7Ci0JCQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyKTsKIAkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04Niw3ICs4Niw3IEBACiAJCWRhdGEgPSAodiAmIDB4ZmZmZmZjMDApOyAvKiBfVmlydHVhbF8gYWRkcmVzcywgflUsIH5WICovCiAJCWFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwKIAkJCSh2ICYgY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzaykgfCBTSF9DQUNIRV9BU1NPQzsKLQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCA1NjBkZGI2Li4yY2ZhZTgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqIENhbGxlZCBmcm9tIGtlcm5lbC9tb2R1bGUuYzpzeXNfaW5pdF9tb2R1bGUgYW5kIHJvdXRpbmUgZm9yIGEub3V0IGZvcm1hdCwKICAqIHNpZ25hbCBoYW5kbGVyIGNvZGUgYW5kIGtwcm9iZXMgY29kZQogICovCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCiB7CiAJc3RydWN0IGZsdXNoZXJfZGF0YSAqZGF0YSA9IGFyZ3M7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwpAQCAtMTA5LDYgKzEwOSw3IEBACiBzdGF0aWMgdm9pZCBzaDRfZmx1c2hfZGNhY2hlX3BhZ2Uodm9pZCAqYXJnKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gYXJnOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCkBAIC0xMTYsMjIgKzExNywxNCBAQAogCQlzZXRfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKIAllbHNlCiAjZW5kaWYKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWTsKLQkJaW50IGksIG47Ci0KLQkJLyogTG9vcCBhbGwgdGhlIEQtY2FjaGUgKi8KLQkJbiA9IGJvb3RfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlczsKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSBQQUdFX1NJWkUpCi0JCQlmbHVzaF9jYWNoZV9vbmUoYWRkciwgcGh5cyk7Ci0JfQorCQlmbHVzaF9jYWNoZV9vbmUoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8CisJCQkJKGFkZHIgJiBzaG1fYWxpZ25fbWFzayksIHBhZ2VfdG9fcGh5cyhwYWdlKSk7CiAKIAl3bWIoKTsKIH0KIAogLyogVE9ETzogU2VsZWN0aXZlIGljYWNoZSBpbnZhbGlkYXRpb24gdGhyb3VnaCBJQyBhZGRyZXNzIGFycmF5Li4gKi8KLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBjY3I7CiAKQEAgLTEzOSw5ICsxMzIsOSBAQAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAogCS8qIEZsdXNoIEktY2FjaGUgKi8KLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAJY2NyIHw9IENDUl9DQUNIRV9JQ0k7Ci0JY3RybF9vdXRsKGNjciwgQ0NSKTsKKwlfX3Jhd193cml0ZWwoY2NyLCBDQ1IpOwogCiAJLyoKIAkgKiBiYWNrX3RvX2NhY2hlZCgpIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBiYXJyaWVyIGZvciB1cywgZG9uJ3QgYWRkCkBAIC0zODQsOSArMzc3LDkgQEAKIHZvaWQgX19pbml0IHNoNF9jYWNoZV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJQVlI9JTA4eCBDVlI9JTA4eCBQUlI9JTA4eFxuIiwKLQkJY3RybF9pbmwoQ0NOX1BWUiksCi0JCWN0cmxfaW5sKENDTl9DVlIpLAotCQljdHJsX2lubChDQ05fUFJSKSk7CisJCV9fcmF3X3JlYWRsKENDTl9QVlIpLAorCQlfX3Jhd19yZWFkbChDQ05fQ1ZSKSwKKwkJX19yYXdfcmVhZGwoQ0NOX1BSUikpOwogCiAJbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlCT0gc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZTsKIAlsb2NhbF9mbHVzaF9kY2FjaGVfcGFnZQkJPSBzaDRfZmx1c2hfZGNhY2hlX3BhZ2U7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwppbmRleCBmNTI3ZmI3Li5mNDk4ZGExIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKQEAgLTQ4LDEwICs0OCwxMCBAQAogCQkJdW5zaWduZWQgbG9uZyBkYXRhOwogCQkJaW50IHYgPSBTSF9DQUNIRV9VUERBVEVEIHwgU0hfQ0FDSEVfVkFMSUQ7CiAKLQkJCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCQkJaWYgKChkYXRhICYgdikgPT0gdikKLQkJCQljdHJsX291dGwoZGF0YSAmIH52LCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSAmIH52LCBhZGRyKTsKIAogCQl9CiAKQEAgLTc4LDcgKzc4LDcgQEAKIC8qCiAgKiBXcml0ZWJhY2smSW52YWxpZGF0ZSB0aGUgRC1jYWNoZSBvZiB0aGUgcGFnZQogICovCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKK3N0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzKQogewogCXVuc2lnbmVkIGxvbmcgd2F5cywgd2F5c2l6ZSwgYWRkcnN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTUsMTAgKzExNSwxMCBAQAogCQkgICAgIGFkZHIgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6KSB7CiAJCQl1bnNpZ25lZCBsb25nIGRhdGE7CiAKLQkJCWRhdGEgPSBjdHJsX2lubChhZGRyKSAmICgweDFmZmZmQzAwIHwgU0hfQ0FDSEVfVkFMSUQpOworCQkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpICYgKDB4MWZmZmZDMDAgfCBTSF9DQUNIRV9WQUxJRCk7CiAJCSAgICAgICAgaWYgKGRhdGEgPT0gcGh5cykgewogCQkJCWRhdGEgJj0gfihTSF9DQUNIRV9WQUxJRCB8IFNIX0NBQ0hFX1VQREFURUQpOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJCQl9CiAJCX0KIApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCV9fZmx1c2hfZGNhY2hlX3BhZ2UoX19wYShwYWdlX2FkZHJlc3MocGFnZSkpKTsKIH0KIAotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g3NzA1X2ZsdXNoX2NhY2hlX2FsbCh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgc2g3NzA1X2ZsdXNoX2NhY2hlX2FsbCh2b2lkICphcmdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCBiODYwN2ZhLi4wZjQwOTVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0yLDcgKzIsNyBAQAogICogYXJjaC9zaC9tbS9jYWNoZS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDkgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KICAqLwpAQCAtNDEsOCArNDEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdhaXQpCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgd2FpdCk7CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGdldHMgY2FsbGVkIGVhcmx5IG9uIHdoZW4gSVJRcyBhcmUKKwkgKiBzdGlsbCBkaXNhYmxlZCBkdWUgdG8gaW9yZW1hcHBpbmcgYnkgdGhlIGJvb3QgQ1BVLCBzbyBkb24ndAorCSAqIGV2ZW4gYXR0ZW1wdCBJUElzIHVubGVzcyB0aGVyZSBhcmUgb3RoZXIgQ1BVcyBvbmxpbmUuCisJICovCisJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkKKwkJc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgd2FpdCk7CisKIAlmdW5jKGluZm8pOworCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCmluZGV4IDQ3NTMwMTAuLjhiZjc5ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYworKysgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKQEAgLTUzLDYgKzUzLDkgQEAKIAlpZiAoIXB1ZF9wcmVzZW50KCpwdWRfaykpCiAJCXJldHVybiBOVUxMOwogCisJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKKwkgICAgc2V0X3B1ZChwdWQsICpwdWRfayk7CisKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJcG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyZXNzKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWRfaykpCkBAIC0zNzEsNyArMzc0LDcgQEAKIAkJbG9jYWxfZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyZXNzICYgUEFHRV9NQVNLKTsKICNlbmRpZgogCi0JdXBkYXRlX21tdV9jYWNoZShOVUxMLCBhZGRyZXNzLCBlbnRyeSk7CisJdXBkYXRlX21tdV9jYWNoZShOVUxMLCBhZGRyZXNzLCBwdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2luaXQuYyBiL2FyY2gvc2gvbW0vaW5pdC5jCmluZGV4IDQzMmFjZDAuLjY4MDI4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2gvbW0vaW5pdC5jCkBAIC0yMSwyNSArMjEsMTMgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKIAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgotLyoKLSAqIEhhbmRsZSB0cml2aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gY2FjaGVkIGFuZCB1bmNhY2hlZAotICogc2VnbWVudHMsIG1ha2luZyB1c2Ugb2YgdGhlIDE6MSBtYXBwaW5nIHJlbGF0aW9uc2hpcCBpbgotICogNTEyTUIgbG93bWVtLgotICoKLSAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgdW5jYWNoZWQgc2VjdGlvbiBmcm9tIGl0cyBjYWNoZWQgYWxpYXMuCi0gKiBEZWZhdWx0IHZhbHVlIG9ubHkgdmFsaWQgaW4gMjkgYml0IG1vZGUsIGluIDMyYml0IG1vZGUgd2lsbCBiZQotICogb3ZlcnJpZGRlbiBpbiBwbWJfaW5pdC4KLSAqLwotdW5zaWduZWQgbG9uZyBjYWNoZWRfdG9fdW5jYWNoZWQgPSBQMlNFRyAtIFAxU0VHOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTU1VCi1zdGF0aWMgdm9pZCBzZXRfcHRlX3BoeXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCitzdGF0aWMgcHRlX3QgKl9fZ2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CkBAIC00OSwyMiArMzcsMzAgQEAKIAlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CiAJaWYgKHBnZF9ub25lKCpwZ2QpKSB7CiAJCXBnZF9FUlJPUigqcGdkKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwdWQgPSBwdWRfYWxsb2MoTlVMTCwgcGdkLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoIXB1ZCkpIHsKIAkJcHVkX0VSUk9SKCpwdWQpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCXBtZCA9IHBtZF9hbGxvYyhOVUxMLCBwdWQsIGFkZHIpOwogCWlmICh1bmxpa2VseSghcG1kKSkgewogCQlwbWRfRVJST1IoKnBtZCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHRlX3BoeXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCit7CisJcHRlX3QgKnB0ZTsKKworCXB0ZSA9IF9fZ2V0X3B0ZV9waHlzKGFkZHIpOwogCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKIAkJcHRlX0VSUk9SKCpwdGUpOwogCQlyZXR1cm47CkBAIC03MiwyMyArNjgsMjQgQEAKIAogCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOwogCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcik7CisKKwlpZiAocGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1dJUkVEKQorCQl0bGJfd2lyZV9lbnRyeShOVUxMLCBhZGRyLCAqcHRlKTsKIH0KIAotLyoKLSAqIEFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvdGhlciBwbGF0Zm9ybXMgcHJlc2VydmUgdGhlIGZpeG1hcCBtYXBwaW5nCi0gKiBhY3Jvc3MgYSBjb250ZXh0IHN3aXRjaCwgd2UgZG9uJ3QgcHJlc2VudGx5IGRvIHRoaXMsIGJ1dCB0aGlzIGNvdWxkIGJlIGRvbmUKLSAqIGluIGEgc2ltaWxhciBmYXNoaW9uIGFzIHRvIHRoZSB3aXJlZCBUTEIgaW50ZXJmYWNlIHRoYXQgc2g2NCB1c2VzIChieSB3YXkKLSAqIG9mIHRoZSBtZW1vcnkgbWFwcGVkIFVUTEIgY29uZmlndXJhdGlvbikgLS0gdGhpcyB1bmZvcnR1bmF0ZWx5IGZvcmNlcyB1cyB0bwotICogZ2l2ZSB1cCBhIFRMQiBlbnRyeSBmb3IgZWFjaCBtYXBwaW5nIHdlIHdhbnQgdG8gcHJlc2VydmUuIFdoaWxlIHRoaXMgbWF5IGJlCi0gKiB2aWFibGUgZm9yIGEgc21hbGwgbnVtYmVyIG9mIGZpeG1hcHMsIGl0J3Mgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCi0gKiBldmVyeXRoaW5nIGFuZCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgZXZhbHVhdGVkLiAoaWUsIHdlIG1heSB3YW50IHRoaXMgZm9yCi0gKiB0aGUgdnN5c2NhbGwgcGFnZSkuCi0gKgotICogWFhYOiBQZXJoYXBzIGFkZCBhIF9QQUdFX1dJUkVEIGZsYWcgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCB3ZSBjYW4gcGFzcwotICogaW4gYXQgX19zZXRfZml4bWFwKCkgdGltZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGJlaGF2aW9yIHRvIGZvbGxvdy4KLSAqCi0gKgkJCQkJIC0tIFBGTS4KLSAqLworc3RhdGljIHZvaWQgY2xlYXJfcHRlX3BoeXModW5zaWduZWQgbG9uZyBhZGRyLCBwZ3Byb3RfdCBwcm90KQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSBfX2dldF9wdGVfcGh5cyhhZGRyKTsKKworCWlmIChwZ3Byb3RfdmFsKHByb3QpICYgX1BBR0VfV0lSRUQpCisJCXRsYl91bndpcmVfZW50cnkoKTsKKworCXNldF9wdGUocHRlLCBwZm5fcHRlKDAsIF9fcGdwcm90KDApKSk7CisJbG9jYWxfZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKK30KKwogdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gX19maXhfdG9fdmlydChpZHgpOwpAQCAtMTAxLDYgKzk4LDE4IEBACiAJc2V0X3B0ZV9waHlzKGFkZHJlc3MsIHBoeXMsIHByb3QpOwogfQogCit2b2lkIF9fY2xlYXJfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBfX2ZpeF90b192aXJ0KGlkeCk7CisKKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykgeworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX3B0ZV9waHlzKGFkZHJlc3MsIHByb3QpOworfQorCiB2b2lkIF9faW5pdCBwYWdlX3RhYmxlX3JhbmdlX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCSBwZ2RfdCAqcGdkX2Jhc2UpCiB7CkBAIC0xMjAsNyArMTI5LDEzIEBACiAJZm9yICggOyAoaSA8IFBUUlNfUEVSX1BHRCkgJiYgKHZhZGRyICE9IGVuZCk7IHBnZCsrLCBpKyspIHsKIAkJcHVkID0gKHB1ZF90ICopcGdkOwogCQlmb3IgKCA7IChqIDwgUFRSU19QRVJfUFVEKSAmJiAodmFkZHIgIT0gZW5kKTsgcHVkKyssIGorKykgeworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAkJCXBtZCA9IChwbWRfdCAqKXB1ZDsKKyNlbHNlCisJCQlwbWQgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCQkJcHVkX3BvcHVsYXRlKCZpbml0X21tLCBwdWQsIHBtZCk7CisJCQlwbWQgKz0gazsKKyNlbmRpZgogCQkJZm9yICg7IChrIDwgUFRSU19QRVJfUE1EKSAmJiAodmFkZHIgIT0gZW5kKTsgcG1kKyssIGsrKykgewogCQkJCWlmIChwbWRfbm9uZSgqcG1kKSkgewogCQkJCQlwdGUgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKQEAgLTE4Miw5ICsxOTcsNiBAQAogCX0KIAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwotCi0JLyogU2V0IHVwIHRoZSB1bmNhY2hlZCBmaXhtYXAgKi8KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX1VOQ0FDSEVELCBfX3BhKCZfX3VuY2FjaGVkX3N0YXJ0KSk7CiB9CiAKIC8qCkBAIC0xOTUsNiArMjA3LDggQEAKIAlub19pb21tdV9pbml0KCk7CiB9CiAKK3Vuc2lnbmVkIGludCBtZW1faW5pdF9kb25lID0gMDsKKwogdm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKIHsKIAlpbnQgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKQEAgLTIzMSw2ICsyNDUsOCBAQAogCW1lbXNldChlbXB0eV96ZXJvX3BhZ2UsIDAsIFBBR0VfU0laRSk7CiAJX19mbHVzaF93YmFja19yZWdpb24oZW1wdHlfemVyb19wYWdlLCBQQUdFX1NJWkUpOwogCisJdnN5c2NhbGxfaW5pdCgpOworCiAJY29kZXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZXRleHQgLSAodW5zaWduZWQgbG9uZykgJl90ZXh0OwogCWRhdGFzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47CkBAIC0yNDMsOCArMjU5LDQ4IEBACiAJCWRhdGFzaXplID4+IDEwLAogCQlpbml0c2l6ZSA+PiAxMCk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSB2RFNPICovCi0JdnN5c2NhbGxfaW5pdCgpOworCXByaW50ayhLRVJOX0lORk8gInZpcnR1YWwga2VybmVsIG1lbW9yeSBsYXlvdXQ6XG4iCisJCSIgICAgZml4bWFwICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJIiAgICBwa21hcCAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKyNlbmRpZgorCQkiICAgIHZtYWxsb2MgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKVxuIgorCQkiICAgIGxvd21lbSAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKSAoY2FjaGVkKVxuIgorI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJCSIgICAgICAgICAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpICh1bmNhY2hlZClcbiIKKyNlbmRpZgorCQkiICAgICAgLmluaXQgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorCQkiICAgICAgLmRhdGEgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorCQkiICAgICAgLnRleHQgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIiwKKwkJRklYQUREUl9TVEFSVCwgRklYQUREUl9UT1AsCisJCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU1RBUlQpID4+IDEwLAorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJUEtNQVBfQkFTRSwgUEtNQVBfQkFTRStMQVNUX1BLTUFQKlBBR0VfU0laRSwKKwkJKExBU1RfUEtNQVAqUEFHRV9TSVpFKSA+PiAxMCwKKyNlbmRpZgorCisJCSh1bnNpZ25lZCBsb25nKVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCQkoVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKSA+PiAyMCwKKworCQkodW5zaWduZWQgbG9uZyltZW1vcnlfc3RhcnQsICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5LAorCQkoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSAodW5zaWduZWQgbG9uZyltZW1vcnlfc3RhcnQpID4+IDIwLAorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkJdW5jYWNoZWRfc3RhcnQsIHVuY2FjaGVkX2VuZCwgdW5jYWNoZWRfc2l6ZSA+PiAyMCwKKyNlbmRpZgorCisJCSh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4sICh1bnNpZ25lZCBsb25nKSZfX2luaXRfZW5kLAorCQkoKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQgLQorCQkgKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9iZWdpbikgPj4gMTAsCisKKwkJKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCwgKHVuc2lnbmVkIGxvbmcpJl9lZGF0YSwKKwkJKCh1bnNpZ25lZCBsb25nKSZfZWRhdGEgLSAodW5zaWduZWQgbG9uZykmX2V0ZXh0KSA+PiAxMCwKKworCQkodW5zaWduZWQgbG9uZykmX3RleHQsICh1bnNpZ25lZCBsb25nKSZfZXRleHQsCisJCSgodW5zaWduZWQgbG9uZykmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpJl90ZXh0KSA+PiAxMCk7CisKKwltZW1faW5pdF9kb25lID0gMTsKIH0KIAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKQEAgLTI3NywzNSArMzMzLDYgQEAKIH0KICNlbmRpZgogCi0jaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKLQotc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwotCi0JdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCi0JCXJldHVybiBOVUxMOwotI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOwotI2VuZGlmCi0JcmV0dXJuIHRpOwotfQotCi12b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUodGhyZWFkX2luZm9fY2FjaGUsIHRpKTsKLX0KLQotdm9pZCB0aHJlYWRfaW5mb19jYWNoZV9pbml0KHZvaWQpCi17Ci0JdGhyZWFkX2luZm9fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGhyZWFkX2luZm8iLCBUSFJFQURfU0laRSwKLQkJCQkJICAgICAgVEhSRUFEX1NJWkUsIDAsIE5VTEwpOwotCUJVR19PTih0aHJlYWRfaW5mb19jYWNoZSA9PSBOVUxMKTsKLX0KLSNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCi0KICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTMzNiwxMCArMzYzLDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCi0KLSNpZmRlZiBDT05GSUdfUE1CCi1pbnQgX19pbl8yOWJpdF9tb2RlKHZvaWQpCi17Ci0JcmV0dXJuICEoY3RybF9pbmwoUE1CX1BBU0NSKSAmIFBBU0NSX1NFKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE1CICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXAuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OGQyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIGFyY2gvc2gvbW0vaW9yZW1hcC5jCisgKgorICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSAtIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBSZS1tYXAgSU8gbWVtb3J5IHRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyBpdC4KKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBoaWdoIFBDSSBhZGRyZXNzZXMgdGhhdCBhcmVuJ3QgbWFwcGVkIGluIHRoZQorICogNjQway0xTUIgSU8gbWVtb3J5IGFyZWEgb24gUEMncworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisKKy8qCisgKiBSZW1hcCBhbiBhcmJpdHJhcnkgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAorICogYWRkcmVzcyBzcGFjZS4gTmVlZGVkIHdoZW4gdGhlIGtlcm5lbCB3YW50cyB0byBhY2Nlc3MgaGlnaCBhZGRyZXNzZXMKKyAqIGRpcmVjdGx5LgorICoKKyAqIE5PVEUhIFdlIG5lZWQgdG8gYWxsb3cgbm9uLXBhZ2UtYWxpZ25lZCBtYXBwaW5ncyB0b286IHdlIHdpbGwgb2J2aW91c2x5CisgKiBoYXZlIHRvIGNvbnZlcnQgdGhlbSBpbnRvIGFuIG9mZnNldCBpbiBhIHBhZ2UtYWxpZ25lZCBtYXBwaW5nLCBidXQgdGhlCisgKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KKyAqLwordm9pZCBfX2lvbWVtICogX19pbml0X3JlZm9rCitfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSBwZ3Byb3RfdCBwZ3Byb3QsIHZvaWQgKmNhbGxlcikKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHIsIGFkZHIsIG9yaWdfYWRkcjsKKworCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCisJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CisJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCisJICovCisJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkcisxKSAtIHBoeXNfYWRkcjsKKworCS8qCisJICogSWYgd2UgY2FuJ3QgeWV0IHVzZSB0aGUgcmVndWxhciBhcHByb2FjaCwgZ28gdGhlIGZpeG1hcCByb3V0ZS4KKwkgKi8KKwlpZiAoIW1lbV9pbml0X2RvbmUpCisJCXJldHVybiBpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkciwgb2Zmc2V0LCBzaXplLCBwZ3Byb3QpOworCisJLyoKKwkgKiBPaywgZ28gZm9yIGl0Li4KKwkgKi8KKwlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CisJaWYgKCFhcmVhKQorCQlyZXR1cm4gTlVMTDsKKwlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CisJb3JpZ19hZGRyID0gYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CisKKyNpZmRlZiBDT05GSUdfUE1CCisJLyoKKwkgKiBGaXJzdCB0cnkgdG8gcmVtYXAgdGhyb3VnaCB0aGUgUE1CIG9uY2UgYSB2YWxpZCBWTUEgaGFzIGJlZW4KKwkgKiBlc3RhYmxpc2hlZC4gU21hbGxlciBhbGxvY2F0aW9ucyAob3IgdGhlIHJlc3Qgb2YgdGhlIHNpemUKKwkgKiByZW1haW5pbmcgYWZ0ZXIgYSBQTUIgbWFwcGluZyBkdWUgdG8gdGhlIHNpemUgbm90IGJlaW5nCisJICogcGVyZmVjdGx5IGFsaWduZWQgb24gYSBQTUIgc2l6ZSBib3VuZGFyeSkgYXJlIHRoZW4gbWFwcGVkCisJICogdGhyb3VnaCB0aGUgVVRMQiB1c2luZyBjb252ZW50aW9uYWwgcGFnZSB0YWJsZXMuCisJICoKKwkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgorCSAqLworCWlmICh1bmxpa2VseShwaHlzX2FkZHIgPj0gUDFTRUcpKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFwcGVkOworCisJCW1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIHBncHJvdCk7CisJCWlmIChsaWtlbHkobWFwcGVkKSkgeworCQkJYWRkcgkJKz0gbWFwcGVkOworCQkJcGh5c19hZGRyCSs9IG1hcHBlZDsKKwkJCXNpemUJCS09IG1hcHBlZDsKKwkJfQorCX0KKyNlbmRpZgorCisJaWYgKGxpa2VseShzaXplKSkKKwkJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CisJCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldHVybiAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIChjaGFyICopb3JpZ19hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwX2NhbGxlcik7CisKKy8qCisgKiBTaW1wbGUgY2hlY2tzIGZvciBub24tdHJhbnNsYXRhYmxlIG1hcHBpbmdzLgorICovCitzdGF0aWMgaW5saW5lIGludCBpb21hcHBpbmdfbm9udHJhbnNsYXRhYmxlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworI2lmZGVmIENPTkZJR18yOUJJVAorCS8qCisJICogSW4gMjktYml0IG1vZGUgdGhpcyBpbmNsdWRlcyB0aGUgZml4ZWQgUDEvUDIgYXJlYXMsIGFzIHdlbGwgYXMKKwkgKiBwYXJ0cyBvZiBQMy4KKwkgKi8KKwlpZiAoUFhTRUcob2Zmc2V0KSA8IFAzU0VHIHx8IG9mZnNldCA+PSBQM19BRERSX01BWCkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICpwOworCisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGlzIG5vIHRyYW5zbGF0YWJsZSBtYXBwaW5nLgorCSAqLworCWlmIChpb21hcHBpbmdfbm9udHJhbnNsYXRhYmxlKHZhZGRyKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGVyZSdzIG5vIFZNQSBpZiBpdCdzIGZyb20gYW4gZWFybHkgZml4ZWQgbWFwcGluZy4KKwkgKi8KKwlpZiAoaW91bm1hcF9maXhlZChhZGRyKSA9PSAwKQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfUE1CCisJLyoKKwkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCisJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KKwkgKgorCSAqIFhYWDogTm90ZSB0aGF0IGR1ZSB0byB0aGUgd2F5IHRoYXQgcmVtb3ZlX3ZtX2FyZWEoKSBkb2VzCisJICogbWF0Y2hpbmcgb2YgdGhlIHJlc3VsdGFudCBWTUEsIHdlIGFyZW4ndCBhYmxlIHRvIGZhc3QtZm9yd2FyZAorCSAqIHRoZSBhZGRyZXNzIHBhc3QgdGhlIFBNQiBzcGFjZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBWTUEgd2hlcmUKKwkgKiB0aGUgcGFnZSB0YWJsZXMgcmVzaWRlLiBBcyBzdWNoLCB1bm1hcF92bV9hcmVhKCkgd2lsbCBiZQorCSAqIGZvcmNlZCB0byBsaW5lYXJseSBzY2FuIG92ZXIgdGhlIGFyZWEgdW50aWwgaXQgZmluZHMgdGhlIHBhZ2UKKwkgKiB0YWJsZXMgd2hlcmUgUFRFcyB0aGF0IG5lZWQgdG8gYmUgdW5tYXBwZWQgYWN0dWFsbHkgcmVzaWRlLAorCSAqIHdoaWNoIGlzIGZhciBmcm9tIG9wdGltYWwuIFBlcmhhcHMgd2UgbmVlZCB0byB1c2UgYSBzZXBhcmF0ZQorCSAqIFZNQSBmb3IgdGhlIFBNQiBtYXBwaW5ncz8KKwkgKgkJCQkJLS0gUEZNLgorCSAqLworCXBtYl91bm1hcCh2YWRkcik7CisjZW5kaWYKKworCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOworCWlmICghcCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgYWRkcmVzcyAlcFxuIiwgX19mdW5jX18sIGFkZHIpOworCQlyZXR1cm47CisJfQorCisJa2ZyZWUocCk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTQxYmVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL21tL2lvcmVtYXAuYwotICoKLSAqIFJlLW1hcCBJTyBtZW1vcnkgdG8ga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc28gdGhhdCB3ZSBjYW4gYWNjZXNzIGl0LgotICogVGhpcyBpcyBuZWVkZWQgZm9yIGhpZ2ggUENJIGFkZHJlc3NlcyB0aGF0IGFyZW4ndCBtYXBwZWQgaW4gdGhlCi0gKiA2NDBrLTFNQiBJTyBtZW1vcnkgYXJlYSBvbiBQQydzCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwNSwgMjAwNiBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKLSAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tbXUuaD4KLQotLyoKLSAqIFJlbWFwIGFuIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCi0gKiBhZGRyZXNzIHNwYWNlLiBOZWVkZWQgd2hlbiB0aGUga2VybmVsIHdhbnRzIHRvIGFjY2VzcyBoaWdoIGFkZHJlc3NlcwotICogZGlyZWN0bHkuCi0gKgotICogTk9URSEgV2UgbmVlZCB0byBhbGxvdyBub24tcGFnZS1hbGlnbmVkIG1hcHBpbmdzIHRvbzogd2Ugd2lsbCBvYnZpb3VzbHkKLSAqIGhhdmUgdG8gY29udmVydCB0aGVtIGludG8gYW4gb2Zmc2V0IGluIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIGJ1dCB0aGUKLSAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgotICovCi12b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCi17Ci0Jc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyLCBhZGRyLCBvcmlnX2FkZHI7Ci0JcGdwcm90X3QgcGdwcm90OwotCi0JLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KLQlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKLQlpZiAoIXNpemUgfHwgbGFzdF9hZGRyIDwgcGh5c19hZGRyKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qCi0JICogSWYgd2UncmUgaW4gdGhlIGZpeGVkIFBDSSBtZW1vcnkgcmFuZ2UsIG1hcHBpbmcgdGhyb3VnaCBwYWdlCi0JICogdGFibGVzIGlzIG5vdCBvbmx5IHBvaW50bGVzcywgYnV0IGFsc28gZnVuZGFtZW50YWxseSBicm9rZW4uCi0JICogSnVzdCByZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW5zdGVhZC4KLQkgKgotCSAqIEZvciBib2FyZHMgdGhhdCBtYXAgYSBzbWFsbCBQQ0kgbWVtb3J5IGFwZXJ0dXJlIHNvbWV3aGVyZSBpbgotCSAqIFAxL1AyIHNwYWNlLCBpb3JlbWFwKCkgd2lsbCBhbHJlYWR5IGRvIHRoZSByaWdodCB0aGluZywKLQkgKiBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRoaXMgZmFyLgotCSAqLwotCWlmIChpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHBoeXNfYWRkciwgc2l6ZSkpCi0JCXJldHVybiAodm9pZCBfX2lvbWVtICopcGh5c19hZGRyOwotCi0JLyoKLQkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAotCSAqLwotCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7Ci0JcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKLQlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIrMSkgLSBwaHlzX2FkZHI7Ci0KLQkvKgotCSAqIE9rLCBnbyBmb3IgaXQuLgotCSAqLwotCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKLQlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOwotCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKLQlvcmlnX2FkZHIgPSBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKLQotI2lmZGVmIENPTkZJR19QTUIKLQkvKgotCSAqIEZpcnN0IHRyeSB0byByZW1hcCB0aHJvdWdoIHRoZSBQTUIgb25jZSBhIHZhbGlkIFZNQSBoYXMgYmVlbgotCSAqIGVzdGFibGlzaGVkLiBTbWFsbGVyIGFsbG9jYXRpb25zIChvciB0aGUgcmVzdCBvZiB0aGUgc2l6ZQotCSAqIHJlbWFpbmluZyBhZnRlciBhIFBNQiBtYXBwaW5nIGR1ZSB0byB0aGUgc2l6ZSBub3QgYmVpbmcKLQkgKiBwZXJmZWN0bHkgYWxpZ25lZCBvbiBhIFBNQiBzaXplIGJvdW5kYXJ5KSBhcmUgdGhlbiBtYXBwZWQKLQkgKiB0aHJvdWdoIHRoZSBVVExCIHVzaW5nIGNvbnZlbnRpb25hbCBwYWdlIHRhYmxlcy4KLQkgKgotCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCi0JICovCi0JaWYgKHVubGlrZWx5KHBoeXNfYWRkciA+PSBQMVNFRykpIHsKLQkJdW5zaWduZWQgbG9uZyBtYXBwZWQgPSBwbWJfcmVtYXAoYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncyk7Ci0KLQkJaWYgKGxpa2VseShtYXBwZWQpKSB7Ci0JCQlhZGRyCQkrPSBtYXBwZWQ7Ci0JCQlwaHlzX2FkZHIJKz0gbWFwcGVkOwotCQkJc2l6ZQkJLT0gbWFwcGVkOwotCQl9Ci0JfQotI2VuZGlmCi0KLQlwZ3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOwotCWlmIChsaWtlbHkoc2l6ZSkpCi0JCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBoeXNfYWRkciwgcGdwcm90KSkgewotCQkJdnVubWFwKCh2b2lkICopb3JpZ19hZGRyKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShvZmZzZXQgKyAoY2hhciAqKW9yaWdfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW9yZW1hcF9jYWxsZXIpOwotCi12b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKLQl1bnNpZ25lZCBsb25nIHNlZyA9IFBYU0VHKHZhZGRyKTsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICpwOwotCi0JaWYgKHNlZyA8IFAzU0VHIHx8IHZhZGRyID49IFAzX0FERFJfTUFYKQotCQlyZXR1cm47Ci0JaWYgKGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UodmFkZHIsIDApKQotCQlyZXR1cm47Ci0KLSNpZmRlZiBDT05GSUdfUE1CCi0JLyoKLQkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCi0JICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KLQkgKgotCSAqIFhYWDogTm90ZSB0aGF0IGR1ZSB0byB0aGUgd2F5IHRoYXQgcmVtb3ZlX3ZtX2FyZWEoKSBkb2VzCi0JICogbWF0Y2hpbmcgb2YgdGhlIHJlc3VsdGFudCBWTUEsIHdlIGFyZW4ndCBhYmxlIHRvIGZhc3QtZm9yd2FyZAotCSAqIHRoZSBhZGRyZXNzIHBhc3QgdGhlIFBNQiBzcGFjZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBWTUEgd2hlcmUKLQkgKiB0aGUgcGFnZSB0YWJsZXMgcmVzaWRlLiBBcyBzdWNoLCB1bm1hcF92bV9hcmVhKCkgd2lsbCBiZQotCSAqIGZvcmNlZCB0byBsaW5lYXJseSBzY2FuIG92ZXIgdGhlIGFyZWEgdW50aWwgaXQgZmluZHMgdGhlIHBhZ2UKLQkgKiB0YWJsZXMgd2hlcmUgUFRFcyB0aGF0IG5lZWQgdG8gYmUgdW5tYXBwZWQgYWN0dWFsbHkgcmVzaWRlLAotCSAqIHdoaWNoIGlzIGZhciBmcm9tIG9wdGltYWwuIFBlcmhhcHMgd2UgbmVlZCB0byB1c2UgYSBzZXBhcmF0ZQotCSAqIFZNQSBmb3IgdGhlIFBNQiBtYXBwaW5ncz8KLQkgKgkJCQkJLS0gUEZNLgotCSAqLwotCXBtYl91bm1hcCh2YWRkcik7Ci0jZW5kaWYKLQotCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOwotCWlmICghcCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgYWRkcmVzcyAlcFxuIiwgX19mdW5jX18sIGFkZHIpOwotCQlyZXR1cm47Ci0JfQotCi0Ja2ZyZWUocCk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjQzNDY1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL21tL2lvcmVtYXBfNjQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA3ICBQYXVsIE11bmR0Ci0gKgotICogTW9zdGx5IGRlcml2ZWQgZnJvbSBhcmNoL3NoL21tL2lvcmVtYXAuYyB3aGljaCwgaW4gdHVybiBpcyBtb3N0bHkKLSAqIGRlcml2ZWQgZnJvbSBhcmNoL2kzODYvbW0vaW9yZW1hcC5jIC4KLSAqCi0gKiAgIChDKSBDb3B5cmlnaHQgMTk5NSAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vbW11Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2htZWRpYV9pb21hcCA9IHsKLQkubmFtZQk9ICJzaG1lZGlhX2lvbWFwIiwKLQkuc3RhcnQJPSBJT0JBU0VfVkFERFIgKyBQQUdFX1NJWkUsCi0JLmVuZAk9IElPQkFTRV9FTkQgLSAxLAotfTsKLQotc3RhdGljIHZvaWQgc2htZWRpYV9tYXBpb2FkZHIodW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyB2YSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotc3RhdGljIHZvaWQgc2htZWRpYV91bm1hcGlvYWRkcih1bnNpZ25lZCBsb25nIHZhZGRyKTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNobWVkaWFfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIHBhLAotCQkJCSAgICAgaW50IHN6LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQotLyoKLSAqIFdlIGhhdmUgdGhlIHNhbWUgcHJvYmxlbSBhcyB0aGUgU1BBUkMsIHNvIGxldHMgaGF2ZSB0aGUgc2FtZSBjb21tZW50OgotICogT3VyIG1pbmktYWxsb2NhdG9yLi4uCi0gKiBCb3kgdGhpcyBpcyBncm9zcyEgV2UgbmVlZCBpdCBiZWNhdXNlIHdlIG11c3QgbWFwIEkvTyBmb3IKLSAqIHRpbWVycyBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIgYmVmb3JlIHRoZSBrbWFsbG9jIGlzIGF2YWlsYWJsZS4KLSAqLwotCi0jZGVmaW5lIFhOTUxOICAxNQotI2RlZmluZSBYTlJFUyAgMTAKLQotc3RydWN0IHhyZXNvdXJjZSB7Ci0Jc3RydWN0IHJlc291cmNlIHhyZXM7ICAgLyogTXVzdCBiZSBmaXJzdCAqLwotCWludCB4ZmxhZzsgICAgICAgICAgICAgIC8qIDEgPT0gdXNlZCAqLwotCWNoYXIgeG5hbWVbWE5NTE4rMV07Ci19OwotCi1zdGF0aWMgc3RydWN0IHhyZXNvdXJjZSB4cmVzdltYTlJFU107Ci0KLXN0YXRpYyBzdHJ1Y3QgeHJlc291cmNlICp4cmVzX2FsbG9jKHZvaWQpCi17Ci0Jc3RydWN0IHhyZXNvdXJjZSAqeHJwOwotCWludCBuOwotCi0JeHJwID0geHJlc3Y7Ci0JZm9yIChuID0gMDsgbiA8IFhOUkVTOyBuKyspIHsKLQkJaWYgKHhycC0+eGZsYWcgPT0gMCkgewotCQkJeHJwLT54ZmxhZyA9IDE7Ci0JCQlyZXR1cm4geHJwOwotCQl9Ci0JCXhycCsrOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgeHJlc19mcmVlKHN0cnVjdCB4cmVzb3VyY2UgKnhycCkKLXsKLQl4cnAtPnhmbGFnID0gMDsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqc2htZWRpYV9maW5kX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyB2YWRkcikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCWZvciAocmVzID0gcm9vdC0+Y2hpbGQ7IHJlczsgcmVzID0gcmVzLT5zaWJsaW5nKQotCQlpZiAocmVzLT5zdGFydCA8PSB2YWRkciAmJiByZXMtPmVuZCA+PSB2YWRkcikKLQkJCXJldHVybiByZXM7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgX19pb21lbSAqc2htZWRpYV9hbGxvY19pbyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXN0cnVjdCB4cmVzb3VyY2UgKnhyZXM7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JY2hhciAqdGFjazsKLQlpbnQgdGxlbjsKLQotCWlmIChuYW1lID09IE5VTEwpCi0JCW5hbWUgPSAiPz8/IjsKLQotCXhyZXMgPSB4cmVzX2FsbG9jKCk7Ci0JaWYgKHhyZXMgIT0gMCkgewotCQl0YWNrID0geHJlcy0+eG5hbWU7Ci0JCXJlcyA9ICZ4cmVzLT54cmVzOwotCX0gZWxzZSB7Ci0JCXByaW50a19vbmNlKEtFUk5fTk9USUNFICIlczogZG9uZSB3aXRoIHN0YXRpY3MsICIKLQkJCSAgICAgICAic3dpdGNoaW5nIHRvIGttYWxsb2NcbiIsIF9fZnVuY19fKTsKLQkJdGxlbiA9IHN0cmxlbihuYW1lKTsKLQkJdGFjayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKyB0bGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdGFjaykKLQkJCXJldHVybiBOVUxMOwotCQltZW1zZXQodGFjaywgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwotCQlyZXMgPSAoc3RydWN0IHJlc291cmNlICopIHRhY2s7Ci0JCXRhY2sgKz0gc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSk7Ci0JfQotCi0Jc3RybmNweSh0YWNrLCBuYW1lLCBYTk1MTik7Ci0JdGFja1tYTk1MTl0gPSAwOwotCXJlcy0+bmFtZSA9IHRhY2s7Ci0KLQlyZXR1cm4gc2htZWRpYV9pb3JlbWFwKHJlcywgcGh5cywgc2l6ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzaG1lZGlhX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBwYSwgaW50IHN6LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICgodW5zaWduZWQgbG9uZykgcGEpICYgKH5QQUdFX01BU0spOwotCXVuc2lnbmVkIGxvbmcgcm91bmRfc3ogPSAob2Zmc2V0ICsgc3ogKyBQQUdFX1NJWkUtMSkgJiBQQUdFX01BU0s7Ci0JdW5zaWduZWQgbG9uZyB2YTsKLQl1bnNpZ25lZCBpbnQgcHN6OwotCi0JaWYgKGFsbG9jYXRlX3Jlc291cmNlKCZzaG1lZGlhX2lvbWFwLCByZXMsIHJvdW5kX3N6LAotCQkJICAgICAgc2htZWRpYV9pb21hcC5zdGFydCwgc2htZWRpYV9pb21hcC5lbmQsCi0JCQkgICAgICBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpICE9IDApIHsKLQkJcGFuaWMoImFsbG9jX2lvX3Jlcyglcyk6IGNhbm5vdCBvY2N1cHlcbiIsCi0JCSAgICAgIChyZXMtPm5hbWUgIT0gTlVMTCkgPyByZXMtPm5hbWUgOiAiPz8/Iik7Ci0JfQotCi0JdmEgPSByZXMtPnN0YXJ0OwotCXBhICY9IFBBR0VfTUFTSzsKLQotCXBzeiA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpIC8gUEFHRV9TSVpFOwotCi0JZm9yIChwc3ogPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOyBwc3ogIT0gMDsgcHN6IC09IFBBR0VfU0laRSkgewotCQlzaG1lZGlhX21hcGlvYWRkcihwYSwgdmEsIGZsYWdzKTsKLQkJdmEgKz0gUEFHRV9TSVpFOwotCQlwYSArPSBQQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykocmVzLT5zdGFydCArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfZnJlZV9pbyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Ci0KLQlCVUdfT04oKGxlbiAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCk7Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCWxlbiAtPSBQQUdFX1NJWkU7Ci0JCXNobWVkaWFfdW5tYXBpb2FkZHIocmVzLT5zdGFydCArIGxlbik7Ci0JfQotCi0JcmVsZWFzZV9yZXNvdXJjZShyZXMpOwotfQotCi1zdGF0aWMgX19pbml0X3JlZm9rIHZvaWQgKnNoNjRfZ2V0X3BhZ2Uodm9pZCkKLXsKLQl2b2lkICpwYWdlOwotCi0JaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCi0JCXBhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQllbHNlCi0JCXBhZ2UgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0KLQlpZiAoIXBhZ2UgfHwgKCh1bnNpZ25lZCBsb25nKXBhZ2UgJiB+UEFHRV9NQVNLKSkKLQkJcGFuaWMoInNoNjRfZ2V0X3BhZ2U6IE91dCBvZiBtZW1vcnkgYWxyZWFkeT9cbiIpOwotCi0JcmV0dXJuIHBhZ2U7Ci19Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfbWFwaW9hZGRyKHVuc2lnbmVkIGxvbmcgcGEsIHVuc2lnbmVkIGxvbmcgdmEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXBnZF90ICpwZ2RwOwotCXB1ZF90ICpwdWRwOwotCXBtZF90ICpwbWRwOwotCXB0ZV90ICpwdGVwLCBwdGU7Ci0JcGdwcm90X3QgcHJvdDsKLQotCXByX2RlYnVnKCJzaG1lZGlhX21hcGlvcGFnZSBwYSAlMDhseCB2YSAlMDhseFxuIiwgIHBhLCB2YSk7Ci0KLQlpZiAoIWZsYWdzKQotCQlmbGFncyA9IDE7IC8qIDEgPSBDQjAtMSBkZXZpY2UgKi8KLQotCXBnZHAgPSBwZ2Rfb2Zmc2V0X2sodmEpOwotCWlmIChwZ2Rfbm9uZSgqcGdkcCkgfHwgIXBnZF9wcmVzZW50KCpwZ2RwKSkgewotCQlwdWRwID0gKHB1ZF90ICopc2g2NF9nZXRfcGFnZSgpOwotCQlzZXRfcGdkKHBnZHAsIF9fcGdkKCh1bnNpZ25lZCBsb25nKXB1ZHAgfCBfS0VSTlBHX1RBQkxFKSk7Ci0JfQotCi0JcHVkcCA9IHB1ZF9vZmZzZXQocGdkcCwgdmEpOwotCWlmIChwdWRfbm9uZSgqcHVkcCkgfHwgIXB1ZF9wcmVzZW50KCpwdWRwKSkgewotCQlwbWRwID0gKHBtZF90ICopc2g2NF9nZXRfcGFnZSgpOwotCQlzZXRfcHVkKHB1ZHAsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZHAgfCBfS0VSTlBHX1RBQkxFKSk7Ci0JfQotCi0JcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgdmEpOwotCWlmIChwbWRfbm9uZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkgewotCQlwdGVwID0gKHB0ZV90ICopc2g2NF9nZXRfcGFnZSgpOwotCQlzZXRfcG1kKHBtZHAsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXB0ZXAgKyBfUEFHRV9UQUJMRSkpOwotCX0KLQotCXByb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCAgICAgfCBfUEFHRV9XUklURSAgfAotCQkJX1BBR0VfRElSVFkgICB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU0hBUkVEIHwgZmxhZ3MpOwotCi0JcHRlID0gcGZuX3B0ZShwYSA+PiBQQUdFX1NISUZULCBwcm90KTsKLQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgdmEpOwotCi0JaWYgKCFwdGVfbm9uZSgqcHRlcCkgJiYKLQkgICAgcHRlX3ZhbCgqcHRlcCkgIT0gcHRlX3ZhbChwdGUpKQotCQlwdGVfRVJST1IoKnB0ZXApOwotCi0Jc2V0X3B0ZShwdGVwLCBwdGUpOwotCi0JZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh2YSwgUEFHRV9TSVpFKTsKLX0KLQotc3RhdGljIHZvaWQgc2htZWRpYV91bm1hcGlvYWRkcih1bnNpZ25lZCBsb25nIHZhZGRyKQotewotCXBnZF90ICpwZ2RwOwotCXB1ZF90ICpwdWRwOwotCXBtZF90ICpwbWRwOwotCXB0ZV90ICpwdGVwOwotCi0JcGdkcCA9IHBnZF9vZmZzZXRfayh2YWRkcik7Ci0JaWYgKHBnZF9ub25lKCpwZ2RwKSB8fCBwZ2RfYmFkKCpwZ2RwKSkKLQkJcmV0dXJuOwotCi0JcHVkcCA9IHB1ZF9vZmZzZXQocGdkcCwgdmFkZHIpOwotCWlmIChwdWRfbm9uZSgqcHVkcCkgfHwgcHVkX2JhZCgqcHVkcCkpCi0JCXJldHVybjsKLQotCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIHZhZGRyKTsKLQlpZiAocG1kX25vbmUoKnBtZHApIHx8IHBtZF9iYWQoKnBtZHApKQotCQlyZXR1cm47Ci0KLQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgdmFkZHIpOwotCi0JaWYgKHB0ZV9ub25lKCpwdGVwKSB8fCAhcHRlX3ByZXNlbnQoKnB0ZXApKQotCQlyZXR1cm47Ci0KLQljbGVhcl9wYWdlKCh2b2lkICopcHRlcCk7Ci0JcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwgcHRlcCk7Ci19Ci0KLXZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKLXsKLQljaGFyIG5hbWVbMTRdOwotCi0Jc3ByaW50ZihuYW1lLCAicGh5c18lMDh4IiwgKHUzMilvZmZzZXQpOwotCXJldHVybiBzaG1lZGlhX2FsbG9jX2lvKG9mZnNldCwgc2l6ZSwgbmFtZSwgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChfX2lvcmVtYXBfY2FsbGVyKTsKLQotdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICp2aXJ0dWFsKQotewotCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZyl2aXJ0dWFsICYgUEFHRV9NQVNLOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXVuc2lnbmVkIGludCBwc3o7Ci0KLQlyZXMgPSBzaG1lZGlhX2ZpbmRfcmVzb3VyY2UoJnNobWVkaWFfaW9tYXAsIHZhZGRyKTsKLQlpZiAoIXJlcykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gZnJlZSAweCUwOGx4XG4iLAotCQkgICAgICAgX19mdW5jX18sIHZhZGRyKTsKLQkJcmV0dXJuOwotCX0KLQotCXBzeiA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpIC8gUEFHRV9TSVpFOwotCi0Jc2htZWRpYV9mcmVlX2lvKHJlcyk7Ci0KLQlpZiAoKGNoYXIgKilyZXMgPj0gKGNoYXIgKil4cmVzdiAmJgotCSAgICAoY2hhciAqKXJlcyA8ICAoY2hhciAqKSZ4cmVzdltYTlJFU10pIHsKLQkJeHJlc19mcmVlKChzdHJ1Y3QgeHJlc291cmNlICopcmVzKTsKLQl9IGVsc2UgewotCQlrZnJlZShyZXMpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woX19pb3VubWFwKTsKLQotc3RhdGljIGludAotaW9yZW1hcF9wcm9jX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsIGludCBsZW5ndGgsIGludCAqZW9mLAotCQkgIHZvaWQgKmRhdGEpCi17Ci0JY2hhciAqcCA9IGJ1ZiwgKmUgPSBidWYgKyBsZW5ndGg7Ci0Jc3RydWN0IHJlc291cmNlICpyOwotCWNvbnN0IGNoYXIgKm5tOwotCi0JZm9yIChyID0gKChzdHJ1Y3QgcmVzb3VyY2UgKilkYXRhKS0+Y2hpbGQ7IHIgIT0gTlVMTDsgciA9IHItPnNpYmxpbmcpIHsKLQkJaWYgKHAgKyAzMiA+PSBlKSAgICAgICAgLyogQmV0dGVyIHRoYW4gbm90aGluZyAqLwotCQkJYnJlYWs7Ci0JCW5tID0gci0+bmFtZTsKLQkJaWYgKG5tID09IE5VTEwpCi0JCQlubSA9ICI/Pz8iOwotCi0JCXAgKz0gc3ByaW50ZihwLCAiJTA4bHgtJTA4bHg6ICVzXG4iLAotCQkJICAgICAodW5zaWduZWQgbG9uZylyLT5zdGFydCwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpci0+ZW5kLCBubSk7Ci0JfQotCi0JcmV0dXJuIHAtYnVmOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9wcm9jX29uY2hpcCh2b2lkKQotewotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImlvX21hcCIsIDAsIDAsIGlvcmVtYXBfcHJvY19pbmZvLAotCQkJICAgICAgICZzaG1lZGlhX2lvbWFwKTsKLQlyZXR1cm4gMDsKLX0KLWxhdGVfaW5pdGNhbGwocmVnaXN0ZXJfcHJvY19vbmNoaXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc4YjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBSZS1tYXAgSU8gbWVtb3J5IHRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyBpdC4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBtYXAgYQorICogcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZSBiZWZvcmUgaW9yZW1hcCgpCisgKiBjYW4gYmUgdXNlZCwgZS5nLiBlYXJseSBpbiBib290IGJlZm9yZSBwYWdpbmdfaW5pdCgpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgTWF0dCBGbGVtaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3N0cnVjdCBpb3JlbWFwX21hcCB7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZpeG1hcF9hZGRyOworfTsKKworc3RhdGljIHN0cnVjdCBpb3JlbWFwX21hcCBpb3JlbWFwX21hcHNbRklYX05fSU9SRU1BUFNdOworCit2b2lkIF9faW5pdCBpb3JlbWFwX2ZpeGVkX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaW9yZW1hcF9tYXAgKm1hcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBGSVhfTl9JT1JFTUFQUzsgaSsrKSB7CisJCW1hcCA9ICZpb3JlbWFwX21hcHNbaV07CisJCW1hcC0+Zml4bWFwX2FkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9JT1JFTUFQX0JFR0lOICsgaSk7CisJfQorfQorCit2b2lkIF9faW5pdCBfX2lvbWVtICoKK2lvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDAsIGlkeDsKKwlzdHJ1Y3QgaW9yZW1hcF9tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbnJwYWdlczsKKwlpbnQgaSwgc2xvdDsKKworCXNsb3QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgRklYX05fSU9SRU1BUFM7IGkrKykgeworCQltYXAgPSAmaW9yZW1hcF9tYXBzW2ldOworCQlpZiAoIW1hcC0+YWRkcikgeworCQkJbWFwLT5zaXplID0gc2l6ZTsKKwkJCXNsb3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoc2xvdCA8IDApCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBNYXBwaW5ncyBoYXZlIHRvIGZpdCBpbiB0aGUgRklYX0lPUkVNQVAgYXJlYS4KKwkgKi8KKwlucnBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCWlmIChucnBhZ2VzID4gRklYX05fSU9SRU1BUFMpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBPaywgZ28gZm9yIGl0Li4KKwkgKi8KKwlpZHgwID0gRklYX0lPUkVNQVBfQkVHSU4gKyBzbG90OworCWlkeCA9IGlkeDA7CisJd2hpbGUgKG5ycGFnZXMgPiAwKSB7CisJCXBncHJvdF92YWwocHJvdCkgfD0gX1BBR0VfV0lSRUQ7CisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXNfYWRkciwgcHJvdCk7CisJCXBoeXNfYWRkciArPSBQQUdFX1NJWkU7CisJCWlkeCsrOworCQktLW5ycGFnZXM7CisJfQorCisJbWFwLT5hZGRyID0gKHZvaWQgX19pb21lbSAqKShvZmZzZXQgKyBtYXAtPmZpeG1hcF9hZGRyKTsKKwlyZXR1cm4gbWFwLT5hZGRyOworfQorCitpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OworCXN0cnVjdCBpb3JlbWFwX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBucnBhZ2VzOworCWludCBpLCBzbG90OworCisJc2xvdCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBGSVhfTl9JT1JFTUFQUzsgaSsrKSB7CisJCW1hcCA9ICZpb3JlbWFwX21hcHNbaV07CisJCWlmIChtYXAtPmFkZHIgPT0gYWRkcikgeworCQkJc2xvdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgbWF0Y2gsIGl0J3Mgbm90IGZvciB1cy4KKwkgKi8KKwlpZiAoc2xvdCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbnJwYWdlcyA9IG1hcC0+c2l6ZSA+PiBQQUdFX1NISUZUOworCisJaWR4ID0gRklYX0lPUkVNQVBfQkVHSU4gKyBzbG90ICsgbnJwYWdlcyAtIDE7CisJd2hpbGUgKG5ycGFnZXMgPiAwKSB7CisJCV9fY2xlYXJfZml4bWFwKGlkeCwgX19wZ3Byb3QoX1BBR0VfV0lSRUQpKTsKKwkJLS1pZHg7CisJCS0tbnJwYWdlczsKKwl9CisKKwltYXAtPnNpemUgPSAwOworCW1hcC0+YWRkciA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vbm9tbXUuYyBiL2FyY2gvc2gvbW0vbm9tbXUuYwppbmRleCBhYzE2YzA1Li43Njk0ZjUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL25vbW11LmMKKysrIGIvYXJjaC9zaC9tbS9ub21tdS5jCkBAIC05NCwzICs5NCw3IEBACiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKIHsKIH0KKwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyMWZiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jCkBAIC0wLDAgKzEsNTYgQEAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjZGVmaW5lIFBHQUxMT0NfR0ZQIEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGdkX2NhY2hlcDsKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwbWRfY2FjaGVwOworI2VuZGlmCisKK3ZvaWQgcGdkX2N0b3Iodm9pZCAqeCkKK3sKKwlwZ2RfdCAqcGdkID0geDsKKworCW1lbWNweShwZ2QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkgICAgICAgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkgICAgICAgKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOworfQorCit2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworCXBnZF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGdkX2NhY2hlIiwKKwkJCQkgICAgICAgUFRSU19QRVJfUEdEICogKDE8PFBURV9NQUdOSVRVREUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUsIFNMQUJfUEFOSUMsIHBnZF9jdG9yKTsKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgorCXBtZF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG1kX2NhY2hlIiwKKwkJCQkgICAgICAgUFRSU19QRVJfUE1EICogKDE8PFBURV9NQUdOSVRVREUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUsIFNMQUJfUEFOSUMsIE5VTEwpOworI2VuZGlmCit9CisKK3BnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGdkX2NhY2hlcCwgUEdBTExPQ19HRlApOworfQorCit2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQoreworCWttZW1fY2FjaGVfZnJlZShwZ2RfY2FjaGVwLCBwZ2QpOworfQorCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKK3ZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQoreworCXNldF9wdWQocHVkLCBfX3B1ZCgodW5zaWduZWQgbG9uZylwbWQpKTsKK30KKworcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwbWRfY2FjaGVwLCBQR0FMTE9DX0dGUCk7Cit9CisKK3ZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCit7CisJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHBtZCk7Cit9CisjZW5kaWYgLyogUEFHRVRBQkxFX0xFVkVMUyA+IDIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IDI4MGY2YTEuLjE5OGJjZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMywxMSArMyw4IEBACiAgKgogICogUHJpdmlsZWdlZCBTcGFjZSBNYXBwaW5nIEJ1ZmZlciAoUE1CKSBTdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBQYXVsIE11bmR0Ci0gKgotICogUDEvUDIgU2VjdGlvbiBtYXBwaW5nIGRlZmluaXRpb25zIGZyb20gbWFwMzIuaCwgd2hpY2ggd2FzOgotICoKLSAqCUNvcHlyaWdodCAyMDAzIChjKSBMaW5lbyBTb2x1dGlvbnMsSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjQsNDcgKzIxLDY3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd2xvY2suaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCi0jZGVmaW5lIE5SX1BNQl9FTlRSSUVTCTE2CitzdHJ1Y3QgcG1iX2VudHJ5OwogCi1zdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICopOworc3RydWN0IHBtYl9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyB2cG47CisJdW5zaWduZWQgbG9uZyBwcG47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNpemU7CiAKKwlzcGlubG9ja190IGxvY2s7CisKKwkvKgorCSAqIDAgLi4gTlJfUE1CX0VOVFJJRVMgZm9yIHNwZWNpZmljIGVudHJ5IHNlbGVjdGlvbiwgb3IKKwkgKiBQTUJfTk9fRU5UUlkgdG8gc2VhcmNoIGZvciBhIGZyZWUgb25lCisJICovCisJaW50IGVudHJ5OworCisJLyogQWRqYWNlbnQgZW50cnkgbGluayBmb3IgY29udGlndW91cyBtdWx0aS1lbnRyeSBtYXBwaW5ncyAqLworCXN0cnVjdCBwbWJfZW50cnkgKmxpbms7Cit9OworCitzdGF0aWMgdm9pZCBwbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqLCBpbnQgZGVwdGgpOworCitzdGF0aWMgREVGSU5FX1JXTE9DSyhwbWJfcndsb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgcG1iX2VudHJ5IHBtYl9lbnRyeV9saXN0W05SX1BNQl9FTlRSSUVTXTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBtYl9tYXA7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAocG1iX21hcCwgTlJfUE1CX0VOVFJJRVMpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZW50cnkodW5zaWduZWQgaW50IGVudHJ5KQogewogCXJldHVybiAoZW50cnkgJiBQTUJfRV9NQVNLKSA8PCBQTUJfRV9TSElGVDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9hZGRyKHVuc2lnbmVkIGludCBlbnRyeSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfYWRkcih1bnNpZ25lZCBpbnQgZW50cnkpCiB7CiAJcmV0dXJuIG1rX3BtYl9lbnRyeShlbnRyeSkgfCBQTUJfQUREUjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9kYXRhKHVuc2lnbmVkIGludCBlbnRyeSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZGF0YSh1bnNpZ25lZCBpbnQgZW50cnkpCiB7CiAJcmV0dXJuIG1rX3BtYl9lbnRyeShlbnRyeSkgfCBQTUJfREFUQTsKIH0KIAogc3RhdGljIGludCBwbWJfYWxsb2NfZW50cnkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcG9zOworCWludCBwb3M7CiAKLXJlcGVhdDoKLQlwb3MgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7Ci0KLQlpZiAodW5saWtlbHkocG9zID4gTlJfUE1CX0VOVFJJRVMpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBvcywgJnBtYl9tYXApKQotCQlnb3RvIHJlcGVhdDsKKwlwb3MgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHBtYl9tYXAsIE5SX1BNQl9FTlRSSUVTKTsKKwlpZiAocG9zID49IDAgJiYgcG9zIDwgTlJfUE1CX0VOVFJJRVMpCisJCV9fc2V0X2JpdChwb3MsIHBtYl9tYXApOworCWVsc2UKKwkJcG9zID0gLUVOT1NQQzsKIAogCXJldHVybiBwb3M7CiB9CkBAIC03MywyMSArOTAsMzQgQEAKIAkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgZW50cnkpCiB7CiAJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXZvaWQgKnJldCA9IE5VTEw7CiAJaW50IHBvczsKIAorCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcG1iX3J3bG9jaywgaXJxZmxhZ3MpOworCiAJaWYgKGVudHJ5ID09IFBNQl9OT19FTlRSWSkgewogCQlwb3MgPSBwbWJfYWxsb2NfZW50cnkoKTsKLQkJaWYgKHBvcyA8IDApCi0JCQlyZXR1cm4gRVJSX1BUUihwb3MpOworCQlpZiAodW5saWtlbHkocG9zIDwgMCkpIHsKKwkJCXJldCA9IEVSUl9QVFIocG9zKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHRlc3RfYml0KGVudHJ5LCAmcG1iX21hcCkpCi0JCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKKwkJaWYgKF9fdGVzdF9hbmRfc2V0X2JpdChlbnRyeSwgcG1iX21hcCkpIHsKKwkJCXJldCA9IEVSUl9QVFIoLUVOT1NQQyk7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXBvcyA9IGVudHJ5OwogCX0KIAorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwbWJfcndsb2NrLCBpcnFmbGFncyk7CisKIAlwbWJlID0gJnBtYl9lbnRyeV9saXN0W3Bvc107Ci0JaWYgKCFwbWJlKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1lbXNldChwbWJlLCAwLCBzaXplb2Yoc3RydWN0IHBtYl9lbnRyeSkpOworCisJc3Bpbl9sb2NrX2luaXQoJnBtYmUtPmxvY2spOwogCiAJcG1iZS0+dnBuCT0gdnBuOwogCXBtYmUtPnBwbgk9IHBwbjsKQEAgLTk1LDEwMSArMTI1LDExMyBAQAogCXBtYmUtPmVudHJ5CT0gcG9zOwogCiAJcmV0dXJuIHBtYmU7CisKK291dDoKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgaXJxZmxhZ3MpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHBtYl9mcmVlKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCiB7Ci0JaW50IHBvcyA9IHBtYmUtPmVudHJ5OworCV9fY2xlYXJfYml0KHBtYmUtPmVudHJ5LCBwbWJfbWFwKTsKIAotCXBtYmUtPnZwbgk9IDA7Ci0JcG1iZS0+cHBuCT0gMDsKLQlwbWJlLT5mbGFncwk9IDA7Ci0JcG1iZS0+ZW50cnkJPSAwOwotCi0JY2xlYXJfYml0KHBvcywgJnBtYl9tYXApOworCXBtYmUtPmVudHJ5CT0gUE1CX05PX0VOVFJZOworCXBtYmUtPmxpbmsJPSBOVUxMOwogfQogCiAvKgotICogTXVzdCBiZSBpbiBQMiBmb3IgX19zZXRfcG1iX2VudHJ5KCkKKyAqIEVuc3VyZSB0aGF0IHRoZSBQTUIgZW50cmllcyBtYXRjaCBvdXIgY2FjaGUgY29uZmlndXJhdGlvbi4KKyAqCisgKiBXaGVuIHdlIGFyZSBpbiAzMi1iaXQgYWRkcmVzcyBleHRlbmRlZCBtb2RlLCBDQ1IuQ0IgYmVjb21lcworICogaW52YWxpZCwgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRvIG1hbnVhbGx5IGFkanVzdCBjYWNoZWFibGUKKyAqIHRyYW5zbGF0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgX19zZXRfcG1iX2VudHJ5KHVuc2lnbmVkIGxvbmcgdnBuLCB1bnNpZ25lZCBsb25nIHBwbiwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcG9zKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHBtYl9jYWNoZV9mbGFncyh2b2lkKQogewotCWN0cmxfb3V0bCh2cG4gfCBQTUJfViwgbWtfcG1iX2FkZHIocG9zKSk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLSNpZmRlZiBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdICi0JLyoKLQkgKiBXaGVuIHdlIGFyZSBpbiAzMi1iaXQgYWRkcmVzcyBleHRlbmRlZCBtb2RlLCBDQ1IuQ0IgYmVjb21lcwotCSAqIGludmFsaWQsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBtYW51YWxseSBhZGp1c3QgY2FjaGVhYmxlCi0JICogdHJhbnNsYXRpb25zLgotCSAqLwotCWlmIChsaWtlbHkoZmxhZ3MgJiBQTUJfQykpCi0JCWZsYWdzIHw9IFBNQl9XVDsKKyNpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gpCisJZmxhZ3MgfD0gUE1CX0MgfCBQTUJfV1QgfCBQTUJfVUI7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCisJZmxhZ3MgfD0gUE1CX0M7CiAjZW5kaWYKIAotCWN0cmxfb3V0bChwcG4gfCBmbGFncyB8IFBNQl9WLCBta19wbWJfZGF0YShwb3MpKTsKKwlyZXR1cm4gZmxhZ3M7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNldF9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKKy8qCisgKiBNdXN0IGJlIHJ1biB1bmNhY2hlZC4KKyAqLworc3RhdGljIHZvaWQgX19zZXRfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCiB7Ci0JanVtcF90b191bmNhY2hlZCgpOwotCV9fc2V0X3BtYl9lbnRyeShwbWJlLT52cG4sIHBtYmUtPnBwbiwgcG1iZS0+ZmxhZ3MsIHBtYmUtPmVudHJ5KTsKLQliYWNrX3RvX2NhY2hlZCgpOworCXdyaXRlbF91bmNhY2hlZChwbWJlLT52cG4gfCBQTUJfViwgbWtfcG1iX2FkZHIocG1iZS0+ZW50cnkpKTsKKwl3cml0ZWxfdW5jYWNoZWQocG1iZS0+cHBuIHwgcG1iZS0+ZmxhZ3MgfCBQTUJfViwKKwkJCW1rX3BtYl9kYXRhKHBtYmUtPmVudHJ5KSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGNsZWFyX3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorc3RhdGljIHZvaWQgX19jbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKIHsKLQl1bnNpZ25lZCBpbnQgZW50cnkgPSBwbWJlLT5lbnRyeTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkcl92YWwsIGRhdGFfdmFsOwogCi0JaWYgKHVubGlrZWx5KGVudHJ5ID49IE5SX1BNQl9FTlRSSUVTKSkKLQkJcmV0dXJuOworCWFkZHIgPSBta19wbWJfYWRkcihwbWJlLT5lbnRyeSk7CisJZGF0YSA9IG1rX3BtYl9kYXRhKHBtYmUtPmVudHJ5KTsKIAotCWp1bXBfdG9fdW5jYWNoZWQoKTsKKwlhZGRyX3ZhbCA9IF9fcmF3X3JlYWRsKGFkZHIpOworCWRhdGFfdmFsID0gX19yYXdfcmVhZGwoZGF0YSk7CiAKIAkvKiBDbGVhciBWLWJpdCAqLwotCWFkZHIgPSBta19wbWJfYWRkcihlbnRyeSk7Ci0JY3RybF9vdXRsKGN0cmxfaW5sKGFkZHIpICYgflBNQl9WLCBhZGRyKTsKLQotCWFkZHIgPSBta19wbWJfZGF0YShlbnRyeSk7Ci0JY3RybF9vdXRsKGN0cmxfaW5sKGFkZHIpICYgflBNQl9WLCBhZGRyKTsKLQotCWJhY2tfdG9fY2FjaGVkKCk7CisJd3JpdGVsX3VuY2FjaGVkKGFkZHJfdmFsICYgflBNQl9WLCBhZGRyKTsKKwl3cml0ZWxfdW5jYWNoZWQoZGF0YV92YWwgJiB+UE1CX1YsIGRhdGEpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisJX19zZXRfcG1iX2VudHJ5KHBtYmUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKK30KIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCWludCBmbGFnOwogfSBwbWJfc2l6ZXNbXSA9IHsKLQl7IC5zaXplCT0gMHgyMDAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfNTEyTSwgfSwKLQl7IC5zaXplID0gMHgwODAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfMTI4TSwgfSwKLQl7IC5zaXplID0gMHgwNDAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfNjRNLCAgfSwKLQl7IC5zaXplID0gMHgwMTAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfMTZNLCAgfSwKKwl7IC5zaXplCT0gU1pfNTEyTSwgLmZsYWcgPSBQTUJfU1pfNTEyTSwgfSwKKwl7IC5zaXplID0gU1pfMTI4TSwgLmZsYWcgPSBQTUJfU1pfMTI4TSwgfSwKKwl7IC5zaXplID0gU1pfNjRNLCAgLmZsYWcgPSBQTUJfU1pfNjRNLCAgfSwKKwl7IC5zaXplID0gU1pfMTZNLCAgLmZsYWcgPSBQTUJfU1pfMTZNLCAgfSwKIH07CiAKIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKLQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJc3RydWN0IHBtYl9lbnRyeSAqcG1icCwgKnBtYmU7CiAJdW5zaWduZWQgbG9uZyB3YW50ZWQ7CiAJaW50IHBtYl9mbGFncywgaTsKIAlsb25nIGVycjsKKwl1NjQgZmxhZ3M7CisKKwlmbGFncyA9IHBncHJvdF92YWwocHJvdCk7CisKKwlwbWJfZmxhZ3MgPSBQTUJfV1QgfCBQTUJfVUI7CiAKIAkvKiBDb252ZXJ0IHR5cGljYWwgcGdwcm90IHZhbHVlIHRvIHRoZSBQTUIgZXF1aXZhbGVudCAqLwogCWlmIChmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSB7Ci0JCWlmIChmbGFncyAmIF9QQUdFX1dUKQotCQkJcG1iX2ZsYWdzID0gUE1CX1dUOwotCQllbHNlCi0JCQlwbWJfZmxhZ3MgPSBQTUJfQzsKLQl9IGVsc2UKLQkJcG1iX2ZsYWdzID0gUE1CX1dUIHwgUE1CX1VCOworCQlwbWJfZmxhZ3MgfD0gUE1CX0M7CisKKwkJaWYgKChmbGFncyAmIF9QQUdFX1dUKSA9PSAwKQorCQkJcG1iX2ZsYWdzICY9IH4oUE1CX1dUIHwgUE1CX1VCKTsKKwl9CiAKIAlwbWJwID0gTlVMTDsKIAl3YW50ZWQgPSBzaXplOwogCiBhZ2FpbjoKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCQlpZiAoc2l6ZSA8IHBtYl9zaXplc1tpXS5zaXplKQogCQkJY29udGludWU7CiAKQEAgLTIwMCwxOCArMjQyLDI1IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXNldF9wbWJfZW50cnkocG1iZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisKKwkJX19zZXRfcG1iX2VudHJ5KHBtYmUpOwogCiAJCXBoeXMJKz0gcG1iX3NpemVzW2ldLnNpemU7CiAJCXZhZGRyCSs9IHBtYl9zaXplc1tpXS5zaXplOwogCQlzaXplCS09IHBtYl9zaXplc1tpXS5zaXplOwogCisJCXBtYmUtPnNpemUgPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKKwogCQkvKgogCQkgKiBMaW5rIGFkamFjZW50IGVudHJpZXMgdGhhdCBzcGFuIG11bHRpcGxlIFBNQiBlbnRyaWVzCiAJCSAqIGZvciBlYXNpZXIgdGVhci1kb3duLgogCQkgKi8KLQkJaWYgKGxpa2VseShwbWJwKSkKKwkJaWYgKGxpa2VseShwbWJwKSkgeworCQkJc3Bpbl9sb2NrKCZwbWJwLT5sb2NrKTsKIAkJCXBtYnAtPmxpbmsgPSBwbWJlOworCQkJc3Bpbl91bmxvY2soJnBtYnAtPmxvY2spOworCQl9CiAKIAkJcG1icCA9IHBtYmU7CiAKQEAgLTIyMSwxNiArMjcwLDE3IEBACiAJCSAqIHBtYl9zaXplc1tpXS5zaXplIGFnYWluLgogCQkgKi8KIAkJaS0tOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAoc2l6ZSA+PSAweDEwMDAwMDApCisJaWYgKHNpemUgPj0gU1pfMTZNKQogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIHdhbnRlZCAtIHNpemU7CiAKIG91dDoKLQlpZiAocG1icCkKLQkJX19wbWJfdW5tYXAocG1icCk7CisJcG1iX3VubWFwX2VudHJ5KHBtYnAsIE5SX1BNQl9FTlRSSUVTKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNDAsMjQgKzI5MCw1MiBAQAogCXN0cnVjdCBwbWJfZW50cnkgKnBtYmUgPSBOVUxMOwogCWludCBpOwogCisJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7Ci0JCWlmICh0ZXN0X2JpdChpLCAmcG1iX21hcCkpIHsKKwkJaWYgKHRlc3RfYml0KGksIHBtYl9tYXApKSB7CiAJCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOwogCQkJaWYgKHBtYmUtPnZwbiA9PSBhZGRyKQogCQkJCWJyZWFrOwogCQl9CiAJfQogCi0JaWYgKHVubGlrZWx5KCFwbWJlKSkKLQkJcmV0dXJuOworCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKIAotCV9fcG1iX3VubWFwKHBtYmUpOworCXBtYl91bm1hcF9lbnRyeShwbWJlLCBOUl9QTUJfRU5UUklFUyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcG1iX3VubWFwKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCitzdGF0aWMgYm9vbCBwbWJfY2FuX21lcmdlKHN0cnVjdCBwbWJfZW50cnkgKmEsIHN0cnVjdCBwbWJfZW50cnkgKmIpCiB7Ci0JQlVHX09OKCF0ZXN0X2JpdChwbWJlLT5lbnRyeSwgJnBtYl9tYXApKTsKKwlyZXR1cm4gKGItPnZwbiA9PSAoYS0+dnBuICsgYS0+c2l6ZSkpICYmCisJICAgICAgIChiLT5wcG4gPT0gKGEtPnBwbiArIGEtPnNpemUpKSAmJgorCSAgICAgICAoYi0+ZmxhZ3MgPT0gYS0+ZmxhZ3MpOworfQogCitzdGF0aWMgYm9vbCBwbWJfc2l6ZV92YWxpZCh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCisJCWlmIChwbWJfc2l6ZXNbaV0uc2l6ZSA9PSBzaXplKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3NpemVfdG9fZmxhZ3ModW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQorCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKKwkJCXJldHVybiBwbWJfc2l6ZXNbaV0uZmxhZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX3BtYl91bm1hcF9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlLCBpbnQgZGVwdGgpCit7CiAJZG8gewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJsaW5rID0gcG1iZTsKIApAQCAtMjY4LDEwMiArMzQ2LDMxMiBAQAogCQkgKiB0aGlzIGVudHJ5IGluIHBtYl9hbGxvYygpIChldmVuIGlmIHdlIGhhdmVuJ3QgZmlsbGVkCiAJCSAqIGl0IHlldCkuCiAJCSAqCi0JCSAqIFRoZXJlZm9yZSwgY2FsbGluZyBjbGVhcl9wbWJfZW50cnkoKSBpcyBzYWZlIGFzIG5vCisJCSAqIFRoZXJlZm9yZSwgY2FsbGluZyBfX2NsZWFyX3BtYl9lbnRyeSgpIGlzIHNhZmUgYXMgbm8KIAkJICogb3RoZXIgbWFwcGluZyBjYW4gYmUgdXNpbmcgdGhhdCBzbG90LgogCQkgKi8KLQkJY2xlYXJfcG1iX2VudHJ5KHBtYmUpOworCQlfX2NsZWFyX3BtYl9lbnRyeShwbWJlKTsKIAogCQlwbWJlID0gcG1ibGluay0+bGluazsKIAogCQlwbWJfZnJlZShwbWJsaW5rKTsKLQl9IHdoaWxlIChwbWJlKTsKKwl9IHdoaWxlIChwbWJlICYmIC0tZGVwdGgpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNQgotaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHBtYl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBwbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSwgaW50IGRlcHRoKQogewotCXVuc2lnbmVkIGludCBpOwotCWxvbmcgc2l6ZSwgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlqdW1wX3RvX3VuY2FjaGVkKCk7CisJaWYgKHVubGlrZWx5KCFwbWJlKSkKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBJbnNlcnQgUE1CIGVudHJpZXMgZm9yIHRoZSBQMSBhbmQgUDIgYXJlYXMgc28gdGhhdCwgYWZ0ZXIKLQkgKiB3ZSd2ZSBzd2l0Y2hlZCB0aGUgTU1VIHRvIDMyLWJpdCBtb2RlLCB0aGUgc2VtYW50aWNzIG9mIFAxCi0JICogYW5kIFAyIGFyZSB0aGUgc2FtZSBhcyBpbiAyOS1iaXQgbW9kZSwgZS5nLgotCSAqCi0JICoJUDEgLSBwcm92aWRlcyBhIGNhY2hlZCB3aW5kb3cgb250byBwaHlzaWNhbCBtZW1vcnkKLQkgKglQMiAtIHByb3ZpZGVzIGFuIHVuY2FjaGVkIHdpbmRvdyBvbnRvIHBoeXNpY2FsIG1lbW9yeQotCSAqLwotCXNpemUgPSBfX01FTU9SWV9TVEFSVCArIF9fTUVNT1JZX1NJWkU7Ci0KLQlyZXQgPSBwbWJfcmVtYXAoUDFTRUcsIDB4MDAwMDAwMDAsIHNpemUsIFBNQl9DKTsKLQlCVUdfT04ocmV0ICE9IHNpemUpOwotCi0JcmV0ID0gcG1iX3JlbWFwKFAyU0VHLCAweDAwMDAwMDAwLCBzaXplLCBQTUJfV1QgfCBQTUJfVUIpOwotCUJVR19PTihyZXQgIT0gc2l6ZSk7Ci0KLQljdHJsX291dGwoMCwgUE1CX0lSTUNSKTsKLQotCS8qIFBNQi5TRSBhbmQgVUJbN10gKi8KLQljdHJsX291dGwoUEFTQ1JfU0UgfCAoMSA8PCA3KSwgUE1CX1BBU0NSKTsKLQotCS8qIEZsdXNoIG91dCB0aGUgVExCICovCi0JaSA9ICBjdHJsX2lubChNTVVDUik7Ci0JaSB8PSBNTVVDUl9USTsKLQljdHJsX291dGwoaSwgTU1VQ1IpOwotCi0JYmFja190b19jYWNoZWQoKTsKLQotCXJldHVybiAwOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcG1iX3J3bG9jaywgZmxhZ3MpOworCV9fcG1iX3VubWFwX2VudHJ5KHBtYmUsIGRlcHRoKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgZmxhZ3MpOwogfQotI2Vsc2UKLWludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBwbWJfaW5pdCh2b2lkKQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBwbWJfcHBuX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHBuKQoreworCXJldHVybiBwcG4gPj0gX19wYShtZW1vcnlfc3RhcnQpICYmIHBwbiA8IF9fcGEobWVtb3J5X2VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfbm90aWZ5KHZvaWQpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOwogCi0JanVtcF90b191bmNhY2hlZCgpOworCXByX2luZm8oIlBNQjogYm9vdCBtYXBwaW5nczpcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IFBNQl9FTlRSWV9NQVg7IGkrKykgeworCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOwotCQl1bnNpZ25lZCBsb25nIHZwbiwgcHBuLCBmbGFnczsKIAotCQlhZGRyID0gUE1CX0RBVEEgKyAoaSA8PCBQTUJfRV9TSElGVCk7Ci0JCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKLQkJaWYgKCEoZGF0YSAmIFBNQl9WKSkKKwkJaWYgKCF0ZXN0X2JpdChpLCBwbWJfbWFwKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkYXRhICYgUE1CX0MpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gpCi0JCQlkYXRhIHw9IFBNQl9XVDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFQkFDSykKLQkJCWRhdGEgJj0gflBNQl9XVDsKLSNlbHNlCi0JCQlkYXRhICY9IH4oUE1CX0MgfCBQTUJfV1QpOwotI2VuZGlmCi0JCX0KLQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOwogCi0JCXBwbiA9IGRhdGEgJiBQTUJfUEZOX01BU0s7Ci0KLQkJZmxhZ3MgPSBkYXRhICYgKFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCKTsKLQkJZmxhZ3MgfD0gZGF0YSAmIFBNQl9TWl9NQVNLOwotCi0JCWFkZHIgPSBQTUJfQUREUiArIChpIDw8IFBNQl9FX1NISUZUKTsKLQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOwotCi0JCXZwbiA9IGRhdGEgJiBQTUJfUEZOX01BU0s7Ci0KLQkJcG1iZSA9IHBtYl9hbGxvYyh2cG4sIHBwbiwgZmxhZ3MsIGkpOwotCQlXQVJOX09OKElTX0VSUihwbWJlKSk7CisJCXByX2luZm8oIiAgICAgICAweCUwOGx4IC0+IDB4JTA4bHggWyAlNGxkTUIgJTJzY2FjaGVkIF1cbiIsCisJCQlwbWJlLT52cG4gPj4gUEFHRV9TSElGVCwgcG1iZS0+cHBuID4+IFBBR0VfU0hJRlQsCisJCQlwbWJlLT5zaXplID4+IDIwLCAocG1iZS0+ZmxhZ3MgJiBQTUJfQykgPyAiIiA6ICJ1biIpOwogCX0KIAotCWJhY2tfdG9fY2FjaGVkKCk7Ci0KLQlyZXR1cm4gMDsKKwlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BNQiAqLworCisvKgorICogU3luYyBvdXIgc29mdHdhcmUgY29weSBvZiB0aGUgUE1CIG1hcHBpbmdzIHdpdGggdGhvc2UgaW4gaGFyZHdhcmUuIFRoZQorICogbWFwcGluZ3MgaW4gdGhlIGhhcmR3YXJlIFBNQiB3ZXJlIGVpdGhlciBzZXQgdXAgYnkgdGhlIGJvb3Rsb2FkZXIgb3IKKyAqIHZlcnkgZWFybHkgb24gYnkgdGhlIGtlcm5lbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHBtYl9zeW5jaHJvbml6ZSh2b2lkKQoreworCXN0cnVjdCBwbWJfZW50cnkgKnBtYnAgPSBOVUxMOworCWludCBpLCBqOworCisJLyoKKwkgKiBSdW4gdGhyb3VnaCB0aGUgaW5pdGlhbCBib290IG1hcHBpbmdzLCBsb2cgdGhlIGVzdGFibGlzaGVkCisJICogb25lcywgYW5kIGJsb3cgYXdheSBhbnl0aGluZyB0aGF0IGZhbGxzIG91dHNpZGUgb2YgdGhlIHZhbGlkCisJICogUFBOIHJhbmdlLiBTcGVjaWZpY2FsbHksIHdlIG9ubHkgY2FyZSBhYm91dCBleGlzdGluZyBtYXBwaW5ncworCSAqIHRoYXQgaW1wYWN0IHRoZSBjYWNoZWQvdW5jYWNoZWQgc2VjdGlvbnMuCisJICoKKwkgKiBOb3RlIHRoYXQgdG91Y2hpbmcgdGhlc2UgY2FuIGJlIGEgYml0IG9mIGEgbWluZWZpZWxkOyB0aGUgYm9vdAorCSAqIGxvYWRlciBjYW4gZXN0YWJsaXNoIG11bHRpLXBhZ2UgbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBjYWNoaW5nCisJICogYXR0cmlidXRlcywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBhcmVuJ3QgbW9kaWZ5aW5nIGEKKwkgKiBtYXBwaW5nIHRoYXQgd2UncmUgcHJlc2VudGx5IGV4ZWN1dGluZyBmcm9tLCBvciBtYXkgZXhlY3V0ZQorCSAqIGZyb20gaW4gdGhlIGNhc2Ugb2Ygc3RyYWRkbGluZyBwYWdlIGJvdW5kYXJpZXMuCisJICoKKwkgKiBJbiB0aGUgZnV0dXJlIHdlIHdpbGwgaGF2ZSB0byB0aWR5IHVwIGFmdGVyIHRoZSBib290IGxvYWRlciBieQorCSAqIGp1bXBpbmcgYmV0d2VlbiB0aGUgY2FjaGVkIGFuZCB1bmNhY2hlZCBtYXBwaW5ncyBhbmQgdGVhcmluZworCSAqIGRvd24gYWx0ZXJuYXRpbmcgbWFwcGluZ3Mgd2hpbGUgZXhlY3V0aW5nIGZyb20gdGhlIG90aGVyLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9QTUJfRU5UUklFUzsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKKwkJdW5zaWduZWQgbG9uZyBhZGRyX3ZhbCwgZGF0YV92YWw7CisJCXVuc2lnbmVkIGxvbmcgcHBuLCB2cG4sIGZsYWdzOworCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKworCQlhZGRyID0gbWtfcG1iX2FkZHIoaSk7CisJCWRhdGEgPSBta19wbWJfZGF0YShpKTsKKworCQlhZGRyX3ZhbCA9IF9fcmF3X3JlYWRsKGFkZHIpOworCQlkYXRhX3ZhbCA9IF9fcmF3X3JlYWRsKGRhdGEpOworCisJCS8qCisJCSAqIFNraXAgb3ZlciBhbnkgYm9ndXMgZW50cmllcworCQkgKi8KKwkJaWYgKCEoZGF0YV92YWwgJiBQTUJfVikgfHwgIShhZGRyX3ZhbCAmIFBNQl9WKSkKKwkJCWNvbnRpbnVlOworCisJCXBwbiA9IGRhdGFfdmFsICYgUE1CX1BGTl9NQVNLOworCQl2cG4gPSBhZGRyX3ZhbCAmIFBNQl9QRk5fTUFTSzsKKworCQkvKgorCQkgKiBPbmx5IHByZXNlcnZlIGluLXJhbmdlIG1hcHBpbmdzLgorCQkgKi8KKwkJaWYgKCFwbWJfcHBuX2luX3JhbmdlKHBwbikpIHsKKwkJCS8qCisJCQkgKiBJbnZhbGlkYXRlIGFueXRoaW5nIG91dCBvZiBib3VuZHMuCisJCQkgKi8KKwkJCXdyaXRlbF91bmNhY2hlZChhZGRyX3ZhbCAmIH5QTUJfViwgYWRkcik7CisJCQl3cml0ZWxfdW5jYWNoZWQoZGF0YV92YWwgJiB+UE1CX1YsIGRhdGEpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIGNhY2hpbmcgYXR0cmlidXRlcyBpZiBuZWNlc3NhcnkKKwkJICovCisJCWlmIChkYXRhX3ZhbCAmIFBNQl9DKSB7CisJCQlkYXRhX3ZhbCAmPSB+UE1CX0NBQ0hFX01BU0s7CisJCQlkYXRhX3ZhbCB8PSBwbWJfY2FjaGVfZmxhZ3MoKTsKKworCQkJd3JpdGVsX3VuY2FjaGVkKGRhdGFfdmFsLCBkYXRhKTsKKwkJfQorCisJCXNpemUgPSBkYXRhX3ZhbCAmIFBNQl9TWl9NQVNLOworCQlmbGFncyA9IHNpemUgfCAoZGF0YV92YWwgJiBQTUJfQ0FDSEVfTUFTSyk7CisKKwkJcG1iZSA9IHBtYl9hbGxvYyh2cG4sIHBwbiwgZmxhZ3MsIGkpOworCQlpZiAoSVNfRVJSKHBtYmUpKSB7CisJCQlXQVJOX09OX09OQ0UoMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBpcnFmbGFncyk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaisrKQorCQkJaWYgKHBtYl9zaXplc1tqXS5mbGFnID09IHNpemUpCisJCQkJcG1iZS0+c2l6ZSA9IHBtYl9zaXplc1tqXS5zaXplOworCisJCWlmIChwbWJwKSB7CisJCQlzcGluX2xvY2soJnBtYnAtPmxvY2spOworCisJCQkvKgorCQkJICogQ29tcGFyZSB0aGUgcHJldmlvdXMgZW50cnkgYWdhaW5zdCB0aGUgY3VycmVudCBvbmUgdG8KKwkJCSAqIHNlZSBpZiB0aGUgZW50cmllcyBzcGFuIGEgY29udGlndW91cyBtYXBwaW5nLiBJZiBzbywKKwkJCSAqIHNldHVwIHRoZSBlbnRyeSBsaW5rcyBhY2NvcmRpbmdseS4gQ29tcG91bmQgbWFwcGluZ3MKKwkJCSAqIGFyZSBsYXRlciBjb2FsZXNjZWQuCisJCQkgKi8KKwkJCWlmIChwbWJfY2FuX21lcmdlKHBtYnAsIHBtYmUpKQorCQkJCXBtYnAtPmxpbmsgPSBwbWJlOworCisJCQlzcGluX3VubG9jaygmcG1icC0+bG9jayk7CisJCX0KKworCQlwbWJwID0gcG1iZTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBpcnFmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX21lcmdlKHN0cnVjdCBwbWJfZW50cnkgKmhlYWQpCit7CisJdW5zaWduZWQgbG9uZyBzcGFuLCBuZXdzaXplOworCXN0cnVjdCBwbWJfZW50cnkgKnRhaWw7CisJaW50IGkgPSAxLCBkZXB0aCA9IDA7CisKKwlzcGFuID0gbmV3c2l6ZSA9IGhlYWQtPnNpemU7CisKKwl0YWlsID0gaGVhZC0+bGluazsKKwl3aGlsZSAodGFpbCkgeworCQlzcGFuICs9IHRhaWwtPnNpemU7CisKKwkJaWYgKHBtYl9zaXplX3ZhbGlkKHNwYW4pKSB7CisJCQluZXdzaXplID0gc3BhbjsKKwkJCWRlcHRoID0gaTsKKwkJfQorCisJCS8qIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS4uICovCisJCWlmICghdGFpbC0+bGluaykKKwkJCWJyZWFrOworCisJCXRhaWwgPSB0YWlsLT5saW5rOworCQlpKys7CisJfQorCisJLyoKKwkgKiBUaGUgbWVyZ2VkIHBhZ2Ugc2l6ZSBtdXN0IGJlIHZhbGlkLgorCSAqLworCWlmICghcG1iX3NpemVfdmFsaWQobmV3c2l6ZSkpCisJCXJldHVybjsKKworCWhlYWQtPmZsYWdzICY9IH5QTUJfU1pfTUFTSzsKKwloZWFkLT5mbGFncyB8PSBwbWJfc2l6ZV90b19mbGFncyhuZXdzaXplKTsKKworCWhlYWQtPnNpemUgPSBuZXdzaXplOworCisJX19wbWJfdW5tYXBfZW50cnkoaGVhZC0+bGluaywgZGVwdGgpOworCV9fc2V0X3BtYl9lbnRyeShoZWFkKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBtYl9jb2FsZXNjZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisKKwkJaWYgKCF0ZXN0X2JpdChpLCBwbWJfbWFwKSkKKwkJCWNvbnRpbnVlOworCisJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CisKKwkJLyoKKwkJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNvbXBvdW5kIG1hcHBpbmdzCisJCSAqLworCQlpZiAoIXBtYmUtPmxpbmspCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBOb3RoaW5nIHRvIGRvIGlmIGl0IGFscmVhZHkgdXNlcyB0aGUgbGFyZ2VzdCBwb3NzaWJsZQorCQkgKiBwYWdlIHNpemUuCisJCSAqLworCQlpZiAocG1iZS0+c2l6ZSA9PSBTWl81MTJNKQorCQkJY29udGludWU7CisKKwkJcG1iX21lcmdlKHBtYmUpOworCX0KKworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwbWJfcndsb2NrLCBmbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworc3RhdGljIHZvaWQgX19pbml0IHBtYl9yZXNpemUodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogSWYgdGhlIHVuY2FjaGVkIG1hcHBpbmcgd2FzIGNvbnN0cnVjdGVkIGJ5IHRoZSBrZXJuZWwsIGl0IHdpbGwKKwkgKiBhbHJlYWR5IGJlIGEgcmVhc29uYWJsZSBzaXplLgorCSAqLworCWlmICh1bmNhY2hlZF9zaXplID09IFNaXzE2TSkKKwkJcmV0dXJuOworCisJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKCF0ZXN0X2JpdChpLCBwbWJfbWFwKSkKKwkJCWNvbnRpbnVlOworCisJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CisKKwkJaWYgKHBtYmUtPnZwbiAhPSB1bmNhY2hlZF9zdGFydCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEZvdW5kIGl0LCBub3cgcmVzaXplIGl0LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKworCQlwbWJlLT5zaXplID0gU1pfMTZNOworCQlwbWJlLT5mbGFncyAmPSB+UE1CX1NaX01BU0s7CisJCXBtYmUtPmZsYWdzIHw9IHBtYl9zaXplX3RvX2ZsYWdzKHBtYmUtPnNpemUpOworCisJCXVuY2FjaGVkX3Jlc2l6ZShwbWJlLT5zaXplKTsKKworCQlfX3NldF9wbWJfZW50cnkocG1iZSk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCX0KKworCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7Cit9CisjZW5kaWYKKwordm9pZCBfX2luaXQgcG1iX2luaXQodm9pZCkKK3sKKwkvKiBTeW5jaHJvbml6ZSBzb2Z0d2FyZSBzdGF0ZSAqLworCXBtYl9zeW5jaHJvbml6ZSgpOworCisJLyogQXR0ZW1wdCB0byBjb21iaW5lIGNvbXBvdW5kIG1hcHBpbmdzICovCisJcG1iX2NvYWxlc2NlKCk7CisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCS8qIFJlc2l6ZSBpbml0aWFsIG1hcHBpbmdzLCBpZiBuZWNlc3NhcnkgKi8KKwlwbWJfcmVzaXplKCk7CisjZW5kaWYKKworCS8qIExvZyB0aGVtICovCisJcG1iX25vdGlmeSgpOworCisJd3JpdGVsX3VuY2FjaGVkKDAsIFBNQl9JUk1DUik7CisKKwkvKiBGbHVzaCBvdXQgdGhlIFRMQiAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNTVVDUikgfCBNTVVDUl9USSwgTU1VQ1IpOworCWN0cmxfYmFycmllcigpOworfQorCitib29sIF9faW5fMjliaXRfbW9kZSh2b2lkKQoreworICAgICAgICByZXR1cm4gKF9fcmF3X3JlYWRsKFBNQl9QQVNDUikgJiBQQVNDUl9TRSkgPT0gMDsKK30KIAogc3RhdGljIGludCBwbWJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyKQogewpAQCAtMzc4LDggKzY2Niw4IEBACiAJCXVuc2lnbmVkIGludCBzaXplOwogCQljaGFyICpzel9zdHIgPSBOVUxMOwogCi0JCWFkZHIgPSBjdHJsX2lubChta19wbWJfYWRkcihpKSk7Ci0JCWRhdGEgPSBjdHJsX2lubChta19wbWJfZGF0YShpKSk7CisJCWFkZHIgPSBfX3Jhd19yZWFkbChta19wbWJfYWRkcihpKSk7CisJCWRhdGEgPSBfX3Jhd19yZWFkbChta19wbWJfZGF0YShpKSk7CiAKIAkJc2l6ZSA9IGRhdGEgJiBQTUJfU1pfTUFTSzsKIAkJc3pfc3RyID0gKHNpemUgPT0gUE1CX1NaXzE2TSkgID8gIiAxNk1CIjoKQEAgLTQzNywxNCArNzI1LDIxIEBACiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OICYmCiAJICAgIHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CiAJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisKKwkJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgewotCQkJaWYgKHRlc3RfYml0KGksICZwbWJfbWFwKSkgeworCQkJaWYgKHRlc3RfYml0KGksIHBtYl9tYXApKSB7CiAJCQkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKIAkJCQlzZXRfcG1iX2VudHJ5KHBtYmUpOwogCQkJfQogCQl9CisKKwkJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOwogCX0KKwogCXByZXZfc3RhdGUgPSBzdGF0ZTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NjIsNiArNzU3LDUgQEAKIHsKIAlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJnBtYl9zeXNkZXZfZHJpdmVyKTsKIH0KLQogc3Vic3lzX2luaXRjYWxsKHBtYl9zeXNkZXZfaW5pdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKaW5kZXggNDA5YjdjMi4uMzJkYzY3NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKKysrIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKQEAgLTY4LDggKzY4LDcgQEAKICAqIGluIGV4dGVuZGVkIG1vZGUsIHRoZSBsZWdhY3kgOC1iaXQgQVNJRCBmaWVsZCBpbiBhZGRyZXNzIGFycmF5IDEgaGFzCiAgKiB1bmRlZmluZWQgYmVoYXZpb3VyLgogICovCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsIHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAJX19yYXdfd3JpdGVsKHBhZ2UsIE1NVV9VVExCX0FERFJFU1NfQVJSQVkgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItc2gzLmMgYi9hcmNoL3NoL21tL3RsYi1zaDMuYwppbmRleCBhY2U4ZTZkLi40ZjVmN2NiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1zaDMuYworKysgYi9hcmNoL3NoL21tL3RsYi1zaDMuYwpAQCAtNDEsMTQgKzQxLDE0IEBACiAKIAkvKiBTZXQgUFRFSCByZWdpc3RlciAqLwogCXZwbiA9IChhZGRyZXNzICYgTU1VX1ZQTl9NQVNLKSB8IGdldF9hc2lkKCk7Ci0JY3RybF9vdXRsKHZwbiwgTU1VX1BURUgpOworCV9fcmF3X3dyaXRlbCh2cG4sIE1NVV9QVEVIKTsKIAogCXB0ZXZhbCA9IHB0ZV92YWwocHRlKTsKIAogCS8qIFNldCBQVEVMIHJlZ2lzdGVyICovCiAJcHRldmFsICY9IF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0s7IC8qIGRyb3Agc29mdHdhcmUgZmxhZ3MgKi8KIAkvKiBjb252ZW5pZW50bHksIHdlIHdhbnQgYWxsIHRoZSBzb2Z0d2FyZSBmbGFncyB0byBiZSAwIGFueXdheSAqLwotCWN0cmxfb3V0bChwdGV2YWwsIE1NVV9QVEVMKTsKKwlfX3Jhd193cml0ZWwocHRldmFsLCBNTVVfUFRFTCk7CiAKIAkvKiBMb2FkIHRoZSBUTEIgKi8KIAlhc20gdm9sYXRpbGUoImxkdGxiIjogLyogbm8gb3V0cHV0ICovIDogLyogbm8gaW5wdXQgKi8gOiAibWVtb3J5Iik7CkBAIC03NSw1ICs3NSw1IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHdheXM7IGkrKykKLQkJY3RybF9vdXRsKGRhdGEsIGFkZHIgKyAoaSA8PCA4KSk7CisJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyICsgKGkgPDwgOCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItc2g0LmMgYi9hcmNoL3NoL21tL3RsYi1zaDQuYwppbmRleCA4Y2Y1NTBlLi5jY2FjNzdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1zaDQuYworKysgYi9hcmNoL3NoL21tL3RsYi1zaDQuYwpAQCAtMjksNyArMjksNyBAQAogCiAJLyogU2V0IFBURUggcmVnaXN0ZXIgKi8KIAl2cG4gPSAoYWRkcmVzcyAmIE1NVV9WUE5fTUFTSykgfCBnZXRfYXNpZCgpOwotCWN0cmxfb3V0bCh2cG4sIE1NVV9QVEVIKTsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CiAKIAlwdGV2YWwgPSBwdGUucHRlX2xvdzsKIApAQCAtNDEsMTMgKzQxLDEzIEBACiAJICogdGhlIHByb3RlY3Rpb24gYml0cyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBjb21wYXQtbW9kZSBTWgogCSAqIGFuZCBQUiBiaXRzLCB3aGljaCBhcmUgY2xlYXJlZCkgYmVpbmcgd3JpdHRlbiBvdXQgaW4gUFRFTC4KIAkgKi8KLQljdHJsX291dGwocHRlLnB0ZV9oaWdoLCBNTVVfUFRFQSk7CisJX19yYXdfd3JpdGVsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOwogI2Vsc2UKIAlpZiAoY3B1X2RhdGEtPmZsYWdzICYgQ1BVX0hBU19QVEVBKSB7CiAJCS8qIFRoZSBsYXN0IDMgYml0cyBhbmQgdGhlIGZpcnN0IG9uZSBvZiBwdGV2YWwgY29udGFpbnMKIAkJICogdGhlIFBURUEgdGltaW5nIGNvbnRyb2wgYW5kIHNwYWNlIGF0dHJpYnV0ZSBiaXRzCiAJCSAqLwotCQljdHJsX291dGwoY29weV9wdGVhX2F0dHJpYnV0ZXMocHRldmFsKSwgTU1VX1BURUEpOworCQlfX3Jhd193cml0ZWwoY29weV9wdGVhX2F0dHJpYnV0ZXMocHRldmFsKSwgTU1VX1BURUEpOwogCX0KICNlbmRpZgogCkBAIC01NywxNSArNTcsMTQgQEAKIAlwdGV2YWwgfD0gX1BBR0VfV1Q7CiAjZW5kaWYKIAkvKiBjb252ZW5pZW50bHksIHdlIHdhbnQgYWxsIHRoZSBzb2Z0d2FyZSBmbGFncyB0byBiZSAwIGFueXdheSAqLwotCWN0cmxfb3V0bChwdGV2YWwsIE1NVV9QVEVMKTsKKwlfX3Jhd193cml0ZWwocHRldmFsLCBNTVVfUFRFTCk7CiAKIAkvKiBMb2FkIHRoZSBUTEIgKi8KIAlhc20gdm9sYXRpbGUoImxkdGxiIjogLyogbm8gb3V0cHV0ICovIDogLyogbm8gaW5wdXQgKi8gOiAibWVtb3J5Iik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsIHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CiAKQEAgLTc4LDYgKzc3LDYgQEAKIAlhZGRyID0gTU1VX1VUTEJfQUREUkVTU19BUlJBWSB8IE1NVV9QQUdFX0FTU09DX0JJVDsKIAlkYXRhID0gcGFnZSB8IGFzaWQ7IC8qIFZBTElEIGJpdCBpcyBvZmYgKi8KIAlqdW1wX3RvX3VuY2FjaGVkKCk7Ci0JY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyKTsKIAliYWNrX3RvX2NhY2hlZCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItc2g1LmMgYi9hcmNoL3NoL21tL3RsYi1zaDUuYwppbmRleCBmZGI2NGU0Li5mMjdkYmUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1zaDUuYworKysgYi9hcmNoL3NoL21tL3RsYi1zaDUuYwpAQCAtMTQzLDMgKzE0Myw0MiBAQAogICovCiB2b2lkIHNoNjRfdGVhcmRvd25fdGxiX3Nsb3QodW5zaWduZWQgbG9uZyBsb25nIGNvbmZpZ19hZGRyKQogCV9fYXR0cmlidXRlX18gKChhbGlhcygiX19mbHVzaF90bGJfc2xvdCIpKSk7CisKK3N0YXRpYyBpbnQgZHRsYl9lbnRyeTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZHRsYl9lbnRyaWVzWzY0XTsKKwordm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5OworCXVuc2lnbmVkIGxvbmcgcGFkZHIsIGZsYWdzOworCisJQlVHX09OKGR0bGJfZW50cnkgPT0gQVJSQVlfU0laRShkdGxiX2VudHJpZXMpKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWVudHJ5ID0gc2g2NF9nZXRfd2lyZWRfZHRsYl9lbnRyeSgpOworCWR0bGJfZW50cmllc1tkdGxiX2VudHJ5KytdID0gZW50cnk7CisKKwlwYWRkciA9IHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0s7CisJcGFkZHIgJj0gflBBR0VfTUFTSzsKKworCXNoNjRfc2V0dXBfdGxiX3Nsb3QoZW50cnksIGFkZHIsIGdldF9hc2lkKCksIHBhZGRyKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oIWR0bGJfZW50cnkpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWVudHJ5ID0gZHRsYl9lbnRyaWVzW2R0bGJfZW50cnktLV07CisKKwlzaDY0X3RlYXJkb3duX3RsYl9zbG90KGVudHJ5KTsKKwlzaDY0X3B1dF93aXJlZF9kdGxiX2VudHJ5KGVudHJ5KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXVyYi5jIGIvYXJjaC9zaC9tbS90bGItdXJiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1YjkwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdGxiLXVyYi5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBhcmNoL3NoL21tL3RsYi11cmIuYworICoKKyAqIFRMQiBlbnRyeSB3aXJpbmcgaGVscGVycyBmb3IgVVJCLWVxdWlwcGVkIHBhcnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCisvKgorICogTG9hZCB0aGUgZW50cnkgZm9yICdhZGRyJyBpbnRvIHRoZSBUTEIgYW5kIHdpcmUgdGhlIGVudHJ5LgorICovCit2b2lkIHRsYl93aXJlX2VudHJ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXR1cywgZmxhZ3M7CisJaW50IHVyYjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIExvYWQgdGhlIGVudHJ5IGludG8gdGhlIFRMQiAqLworCV9fdXBkYXRlX3RsYih2bWEsIGFkZHIsIHB0ZSk7CisKKwkvKiAuLi4gYW5kIHdpcmUgaXQgdXAuICovCisJc3RhdHVzID0gX19yYXdfcmVhZGwoTU1VQ1IpOworCXVyYiA9IChzdGF0dXMgJiBNTVVDUl9VUkIpID4+IE1NVUNSX1VSQl9TSElGVDsKKwlzdGF0dXMgJj0gfk1NVUNSX1VSQjsKKworCS8qCisJICogTWFrZSBzdXJlIHdlJ3JlIG5vdCB0cnlpbmcgdG8gd2lyZSB0aGUgbGFzdCBUTEIgZW50cnkgc2xvdC4KKwkgKi8KKwlCVUdfT04oIS0tdXJiKTsKKworCXVyYiA9IHVyYiAlIE1NVUNSX1VSQl9ORU5UUklFUzsKKworCXN0YXR1cyB8PSAodXJiIDw8IE1NVUNSX1VSQl9TSElGVCk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgTU1VQ1IpOworCWN0cmxfYmFycmllcigpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVW53aXJlIHRoZSBsYXN0IHdpcmVkIFRMQiBlbnRyeS4KKyAqCisgKiBJdCBzaG91bGQgYWxzbyBiZSBub3RlZCB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB3aXJlIGFuZCB1bndpcmUKKyAqIFRMQiBlbnRyaWVzIGluIGFuIGFyYml0cmFyeSBvcmRlci4gSWYgeW91IHdpcmUgVExCIGVudHJ5IE4sIGZvbGxvd2VkCisgKiBieSBlbnRyeSBOKzEsIHlvdSBtdXN0IHVud2lyZSBlbnRyeSBOKzEgZmlyc3QsIHRoZW4gZW50cnkgTi4gSW4gdGhpcworICogcmVzcGVjdCwgaXQgd29ya3MgbGlrZSBhIHN0YWNrIG9yIExJRk8gcXVldWUuCisgKi8KK3ZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCBmbGFnczsKKwlpbnQgdXJiOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3RhdHVzID0gX19yYXdfcmVhZGwoTU1VQ1IpOworCXVyYiA9IChzdGF0dXMgJiBNTVVDUl9VUkIpID4+IE1NVUNSX1VSQl9TSElGVDsKKwlzdGF0dXMgJj0gfk1NVUNSX1VSQjsKKworCS8qCisJICogTWFrZSBzdXJlIHdlJ3JlIG5vdCB0cnlpbmcgdG8gdW53aXJlIGEgVExCIGVudHJ5IHdoZW4gbm9uZQorCSAqIGhhdmUgYmVlbiB3aXJlZC4KKwkgKi8KKwlCVUdfT04odXJiKysgPT0gTU1VQ1JfVVJCX05FTlRSSUVTKTsKKworCXVyYiA9IHVyYiAlIE1NVUNSX1VSQl9ORU5UUklFUzsKKworCXN0YXR1cyB8PSAodXJiIDw8IE1NVUNSX1VSQl9TSElGVCk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgTU1VQ1IpOworCWN0cmxfYmFycmllcigpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jIGIvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jCmluZGV4IDZmNDVjMWYuLjAwNGJiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYworKysgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMKQEAgLTEzMiw5ICsxMzIsOSBAQAogCSAqICAgICAgSXQncyBzYW1lIHBvc2l0aW9uLCBiaXQgIzIuCiAJICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXN0YXR1cyA9IGN0cmxfaW5sKE1NVUNSKTsKKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChNTVVDUik7CiAJc3RhdHVzIHw9IDB4MDQ7Ci0JY3RybF9vdXRsKHN0YXR1cywgTU1VQ1IpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKIAljdHJsX2JhcnJpZXIoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKaW5kZXggZGUwYjBlODguLjcwNmRhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYworKysgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHByaW50X3Byb3RzKHBncHJvdF90IHByb3QpCiB7Ci0JcHJpbnRrKCJwcm90IGlzIDB4JTA4bHhcbiIscGdwcm90X3ZhbChwcm90KSk7CisJcHJpbnRrKCJwcm90IGlzIDB4JTAxNmxseFxuIixwZ3Byb3RfdmFsKHByb3QpKTsKIAogCXByaW50aygiJXMgJXMgJXMgJXMgJXNcbiIsUFBST1QoX1BBR0VfU0hBUkVEKSxQUFJPVChfUEFHRV9SRUFEKSwKIAkgICAgICAgUFBST1QoX1BBR0VfRVhFQ1VURSksUFBST1QoX1BBR0VfV1JJVEUpLFBQUk9UKF9QQUdFX1VTRVIpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdW5jYWNoZWQuYyBiL2FyY2gvc2gvbW0vdW5jYWNoZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjIwYTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS91bmNhY2hlZC5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgdW5jYWNoZWQgc2VjdGlvbiBmcm9tIGl0cyBjYWNoZWQgYWxpYXMuCisgKgorICogTGVnYWN5IHBsYXRmb3JtcyBoYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQKKyAqIHVuY2FjaGVkIHNlZ21lbnRzIGJ5IG1ha2luZyB1c2Ugb2YgdGhlIDE6MSBtYXBwaW5nIHJlbGF0aW9uc2hpcCBpbgorICogNTEyTUIgbG93bWVtLCBvdGhlcnMgdmlhIGEgc3BlY2lhbCB1bmNhY2hlZCBtYXBwaW5nLgorICoKKyAqIERlZmF1bHQgdmFsdWUgb25seSB2YWxpZCBpbiAyOSBiaXQgbW9kZSwgaW4gMzJiaXQgbW9kZSB0aGlzIHdpbGwgYmUKKyAqIHVwZGF0ZWQgYnkgdGhlIGVhcmx5IFBNQiBpbml0aWFsaXphdGlvbiBjb2RlLgorICovCit1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IFNaXzUxMk07Cit1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3NpemUgPSBTWl81MTJNOwordW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zdGFydCwgdW5jYWNoZWRfZW5kOworCitpbnQgdmlydF9hZGRyX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcga2FkZHIpCit7CisJcmV0dXJuIChrYWRkciA+PSB1bmNhY2hlZF9zdGFydCkgJiYgKGthZGRyIDwgdW5jYWNoZWRfZW5kKTsKK30KKwordm9pZCBfX2luaXQgdW5jYWNoZWRfaW5pdCh2b2lkKQoreworCXVuY2FjaGVkX3N0YXJ0ID0gbWVtb3J5X2VuZDsKKwl1bmNhY2hlZF9lbmQgPSB1bmNhY2hlZF9zdGFydCArIHVuY2FjaGVkX3NpemU7Cit9CisKK3ZvaWQgX19pbml0IHVuY2FjaGVkX3Jlc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5jYWNoZWRfc2l6ZSA9IHNpemU7CisJdW5jYWNoZWRfZW5kID0gdW5jYWNoZWRfc3RhcnQgKyB1bmNhY2hlZF9zaXplOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDY2MzliMjUuLmIyNWFhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTMyLDYgKzMyLDcgQEAKIFNOQVBHRUFSCQlTSF9TRUNVUkVFREdFNTQxMAogRURPU0s3NzA1CQlTSF9FRE9TSzc3MDUKIEVET1NLNzc2MAkJU0hfRURPU0s3NzYwCitTREs3Nzg2CQkJU0hfU0RLNzc4NgogU0g0MjAyX01JQ1JPREVWCQlTSF9TSDQyMDJfTUlDUk9ERVYKIFNIMDMJCQlTSF9TSDAzCiBMQU5ESVNLCQkJU0hfTEFORElTSwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCBlMGNhYmU3Li43N2Y5MDZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtMzMwLDkgKzMzMCw5IEBACiAjZGVmaW5lIEZBVUxUX0NPREVfV1JJVEUgICAgMHgyCiAjZGVmaW5lIEZBVUxUX0NPREVfVVNFUiAgICAgMHg0CiAKLUJURklYVVBERUZfQ0FMTCh2b2lkLCB1cGRhdGVfbW11X2NhY2hlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgdXBkYXRlX21tdV9jYWNoZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopCiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcixwdGUpIEJURklYVVBfQ0FMTCh1cGRhdGVfbW11X2NhY2hlKSh2bWEsYWRkcixwdGUpCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHIscHRlcCkgQlRGSVhVUF9DQUxMKHVwZGF0ZV9tbXVfY2FjaGUpKHZtYSxhZGRyLHB0ZXApCiAKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBzcGFyY19tYXBpb3JhbmdlLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsCiAgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCBmM2NiNzkwZi4uZjViNWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTcwNiw3ICs3MDYsNyBAQAogI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkciwgbGVuKQkJZG8geyB9IHdoaWxlKDApCiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLWV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopOwogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIF9fc3dwX3R5cGUoZW50cnkpCSgoKGVudHJ5KS52YWwgPj4gUEFHRV9TSElGVCkgJiAweGZmVUwpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggZTU4MGY1NS4uZDExMjAyNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMSwyNyArMSw4IEBACiAjaWZuZGVmIF9TUEFSQ19TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9TUEFSQ19TQ0FUVEVSTElTVF9ICiAKLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgewotI2lmZGVmIENPTkZJR19ERUJVR19TRwotCXVuc2lnbmVkIGxvbmcJc2dfbWFnaWM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKLQl1bnNpZ25lZCBpbnQJb2Zmc2V0OwotCi0JdW5zaWduZWQgaW50CWxlbmd0aDsKLQotCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Ci0JX191MzIJCWRtYV9sZW5ndGg7Ci19OwotCi0jZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCiAjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAJKChzZyktPmRtYV9sZW5ndGgpCiAKLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCi0KLSNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCiAjZW5kaWYgLyogIShfU1BBUkNfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggNzQ4NmM2MC4uMDI1YTAyYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTUsNiArNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCisvKgorICogVGhlIHN5c2NhbGwgdGFibGUgYWx3YXlzIGNvbnRhaW5zIDMyIGJpdCBwb2ludGVycyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaXMgKHdheSkgYmVsb3cgNEdCLiAgU28gdGhlICJpbnQiCisgKiB0eXBlIGhlcmUgaXMgd2hhdCB3ZSB3YW50IFtuZWVkXSBmb3IgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBzeXN0ZW1zLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKIC8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCiBzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKaW5kZXggYjE3MWFlOC4uNjJkYzdhMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYwpAQCAtNTksNyArNTksNyBAQAogCiAJY3VyX2luc3QgPSAwOwogCWZvcl9lYWNoX25vZGVfYnlfdHlwZShkcCwgImNwdSIpIHsKLQkJaW50IGVyciA9IGNoZWNrX2NwdV9ub2RlKGRwLT5ub2RlLCAmY3VyX2luc3QsCisJCWludCBlcnIgPSBjaGVja19jcHVfbm9kZShkcC0+cGhhbmRsZSwgJmN1cl9pbnN0LAogCQkJCQkgY29tcGFyZSwgY29tcGFyZV9hcmcsCiAJCQkJCSBwcm9tX25vZGUsIG1pZCk7CiAJCWlmICghZXJyKSB7CkBAIC0xNDMsNiArMTQzLDQgQEAKIAogCWlmIChBUkNIX1NVTjRDKQogCQlzdW40Y19wcm9iZV9tZW1lcnJfcmVnKCk7Ci0KLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDI5OTczZGFhLi45MTAzYTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpAQCAtOTEsMTQgKzkxLDMgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCmluZGV4IDg3ZjE3NjAuLjA0MDlkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAkJaWYgKCEoTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+Y29uZmlnKSAmCiAJCSAgICAgICgxPDxMRU9OM19HUFRJTUVSX1NFUElSUSkpKSB7Ci0JCQlwcm9tX3ByaW50ZigiaXJxIHRpbWVyIG5vdCBjb25maWd1cmVkIHdpdGggc2VwZXJhdGUgaXJxcyBcbiIpOworCQkJcHJvbV9wcmludGYoImlycSB0aW1lciBub3QgY29uZmlndXJlZCB3aXRoIHNlcGFyYXRlIGlycXNcbiIpOwogCQkJQlVHKCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fc21wLmMKaW5kZXggMDVjMGRhZC4uODU3ODc1NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3NtcC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlpbnQgbnJjcHUgPSBsZW9uX3NtcF9ucmNwdXMoKTsKIAlpbnQgbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlZDooJWQ6JWQpIGNwdXMgbXBpcnEgYXQgMHgleCBcbiIsICh1bnNpZ25lZCBpbnQpbWUsCisJcHJpbnRrKEtFUk5fSU5GTyAiJWQ6KCVkOiVkKSBjcHVzIG1waXJxIGF0IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpbWUsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpbnJjcHUsICh1bnNpZ25lZCBpbnQpTlJfQ1BVUywKIAkgICAgICAgKHVuc2lnbmVkIGludCkmKGxlb24zX2lycWN0cmxfcmVncy0+bXBzdGF0dXMpKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJCQlicmVhazsKIAkJdWRlbGF5KDIwMCk7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIlN0YXJ0ZWQgQ1BVICVkIFxuIiwgKHVuc2lnbmVkIGludClpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTdGFydGVkIENQVSAlZFxuIiwgKHVuc2lnbmVkIGludClpKTsKIAogCWlmICghKGNwdV9jYWxsaW5fbWFwW2ldKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlByb2Nlc3NvciAlZCBpcyBzdHVjay5cbiIsIGkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwppbmRleCBkMjQyYTczLi5iMjg3YjYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvY2FsLmg+CiAjaW5jbHVkZSA8YXNtL3Bjci5oPgogCiAvKiBXZSBkb24ndCBoYXZlIGEgcmVhbCBOTUkgb24gc3BhcmM2NCwgYnV0IHdlIGNhbiBmYWtlIG9uZQpAQCAtMTEzLDEzICsxMTIsMTMgQEAKIAkJdG91Y2hlZCA9IDE7CiAJfQogCWlmICghdG91Y2hlZCAmJiBfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPT0gc3VtKSB7Ci0JCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKTsKLQkJaWYgKF9fdGhpc19jcHVfcmVhZChwZXJfY3B1X3ZhcihhbGVydF9jb3VudGVyKSkgPT0gMzAgKiBubWlfaHopCisJCV9fdGhpc19jcHVfaW5jKGFsZXJ0X2NvdW50ZXIpOworCQlpZiAoX190aGlzX2NwdV9yZWFkKGFsZXJ0X2NvdW50ZXIpID09IDMwICogbm1pX2h6KQogCQkJZGllX25taSgiQlVHOiBOTUkgV2F0Y2hkb2cgZGV0ZWN0ZWQgTE9DS1VQIiwKIAkJCQlyZWdzLCBwYW5pY19vbl90aW1lb3V0KTsKIAl9IGVsc2UgewogCQlfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPSBzdW07Ci0JCV9fdGhpc19jcHVfd3JpdGUocGVyX2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOworCQlfX3RoaXNfY3B1X3dyaXRlKGFsZXJ0X2NvdW50ZXIsIDApOwogCX0KIAlpZiAoX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSkgewogCQl3cml0ZV9waWMocGljbF92YWx1ZShubWlfaHopKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggNTNhNThiMy4uZGE1MjdiMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKLQkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5waGFuZGxlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYwppbmRleCAwYTZmMmQxLi5iM2Q0Y2I1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCWlmICghcGFyZW50KQogCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICJyb290Iik7CiAJZWxzZQotCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPm5vZGUpOworCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPnBoYW5kbGUpOwogCiAJaWYgKG9mX2RldmljZV9yZWdpc3RlcihvcCkpIHsKIAkJcHJpbnRrKCIlczogQ291bGQgbm90IHJlZ2lzdGVyIG9mIGRldmljZS5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCmluZGV4IDU5MmIwM2QuLjVhYzUzOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCkBAIC03MjIsOSArNzIyLDEwIEBACiB7CiB9CiAKLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKKwlyZXR1cm4gcmVzLT5zdGFydDsKIH0KIAogaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKQEAgLTEwOTQsMyArMTA5NSw3OCBAQAogCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsKHBjaWJpb3NfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfU1lTRlMKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfYnVzX3Nsb3RfbmFtZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwljb25zdCBzdHJ1Y3QgcGNpX3Nsb3RfbmFtZXMgeworCQl1MzIJc2xvdF9tYXNrOworCQljaGFyCW5hbWVzWzBdOworCX0gKnByb3A7CisJY29uc3QgY2hhciAqc3A7CisJaW50IGxlbiwgaTsKKwl1MzIgbWFzazsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInNsb3QtbmFtZXMiLCAmbGVuKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCW1hc2sgPSBwcm9wLT5zbG90X21hc2s7CisJc3AgPSBwcm9wLT5uYW1lczsKKworCWlmIChvZnBjaV92ZXJib3NlKQorCQlwcmludGsoIlBDSTogTWFraW5nIHNsb3RzIGZvciBbJXNdIG1hc2tbMHglMDJ4XVxuIiwKKwkJICAgICAgIG5vZGUtPmZ1bGxfbmFtZSwgbWFzayk7CisKKwlpID0gMDsKKwl3aGlsZSAobWFzaykgeworCQlzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90OworCQl1MzIgdGhpc19iaXQgPSAxIDw8IGk7CisKKwkJaWYgKCEobWFzayAmIHRoaXNfYml0KSkgeworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAob2ZwY2lfdmVyYm9zZSkKKwkJCXByaW50aygiUENJOiBNYWtpbmcgc2xvdCBbJXNdXG4iLCBzcCk7CisKKwkJcGNpX3Nsb3QgPSBwY2lfY3JlYXRlX3Nsb3QoYnVzLCBpLCBzcCwgTlVMTCk7CisJCWlmIChJU19FUlIocGNpX3Nsb3QpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IHBjaV9jcmVhdGVfc2xvdCByZXR1cm5lZCAlbGRcbiIsCisJCQkgICAgICAgUFRSX0VSUihwY2lfc2xvdCkpOworCisJCXNwICs9IHN0cmxlbihzcCkgKyAxOworCQltYXNrICY9IH50aGlzX2JpdDsKKwkJaSsrOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgb2ZfcGNpX3Nsb3RfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfYnVzICpwYnVzID0gTlVMTDsKKworCXdoaWxlICgocGJ1cyA9IHBjaV9maW5kX25leHRfYnVzKHBidXMpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlpZiAocGJ1cy0+c2VsZikgeworCQkJc3RydWN0IGRldl9hcmNoZGF0YSAqc2QgPSBwYnVzLT5zZWxmLT5zeXNkYXRhOworCisJCQkvKiBQQ0ktPlBDSSBicmlkZ2UgKi8KKwkJCW5vZGUgPSBzZC0+cHJvbV9ub2RlOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gcGJ1cy0+c3lzZGF0YTsKKworCQkJLyogSG9zdCBQQ0kgY29udHJvbGxlciAqLworCQkJbm9kZSA9IHBibS0+b3AtPm5vZGU7CisJCX0KKworCQlwY2lfYnVzX3Nsb3RfbmFtZXMobm9kZSwgcGJ1cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG9mX3BjaV9zbG90X2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKaW5kZXggNGUyNzI0ZS4uZDM2YThkMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwpAQCAtNTg1LDggKzU4NSw2IEBACiAJCQl3cml0ZXcoaXZlYywgcGNpYy0+cGNpY19yZWdzK1BDSV9JTlRfU0VMRUNUX0xPKTsKIAkJfQogIAl9Ci0KLQlyZXR1cm47CiB9CiAKIC8qCkBAIC03NjgsOSArNzY2LDEwIEBACiAJcmV0dXJuIHN0cjsKIH0KIAotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJldHVybiByZXMtPnN0YXJ0OwogfQogCiBpbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBlODU2NDU2Li45ZjJiMmJhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC05ODAsMTAgKzk4MCwxMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpCitzdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7Ci0JZXZlbnQtPm9uY3B1ID0gY3B1OworCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlldmVudC0+dHN0YW1wX3J1bm5pbmcgKz0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQogCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwpAQCAtOTkxLDcgKzk5MSw3IEBACiAKIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJCQkgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KQorCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKQEAgLTEwMTUsMTAgKzEwMTUsMTAgQEAKIAogCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CiAJbiA9IDE7Ci0JZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyLCBjcHUpOworCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlcik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAkJaWYgKHN1Yi0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKLQkJCWV2ZW50X3NjaGVkX2luKHN1YiwgY3B1KTsKKwkJCWV2ZW50X3NjaGVkX2luKHN1Yik7CiAJCQluKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKaW5kZXggNDUzMzk3Zi4uYTg1OTFlZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaApAQCAtNCw5ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLQogZXh0ZXJuIHZvaWQgKiBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBpcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKaW5kZXggZDgwYTY1ZC4uNTdhYzllMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC0zNywxOCArMzcsNiBAQAogY2hhciAqb2ZfY29uc29sZV9vcHRpb25zOwogRVhQT1JUX1NZTUJPTChvZl9jb25zb2xlX29wdGlvbnMpOwogCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBoYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQotCQlpZiAobnAtPm5vZGUgPT0gaGFuZGxlKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQogaW50IG9mX2dldGludHByb3BfZGVmYXVsdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQogewogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTg5LDcgKzc3LDcgQEAKIAkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKIAkJCWludCByZXQ7CiAKLQkJCXJldCA9IHByb21fc2V0cHJvcChkcC0+bm9kZSwgbmFtZSwgdmFsLCBsZW4pOworCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5waGFuZGxlLCBuYW1lLCB2YWwsIGxlbik7CiAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlpZiAocmV0ID49IDApIHsKQEAgLTIzNiw3ICsyMjQsNyBAQAogCiAJZHAtPm5hbWUgPSBnZXRfb25lX3Byb3BlcnR5KG5vZGUsICJuYW1lIik7CiAJZHAtPnR5cGUgPSBnZXRfb25lX3Byb3BlcnR5KG5vZGUsICJkZXZpY2VfdHlwZSIpOwotCWRwLT5ub2RlID0gbm9kZTsKKwlkcC0+cGhhbmRsZSA9IG5vZGU7CiAKIAlkcC0+cHJvcGVydGllcyA9IGJ1aWxkX3Byb3BfbGlzdChub2RlKTsKIApAQCAtMzEzLDcgKzMwMSw3IEBACiAKIAluZXh0cCA9ICZhbGxub2Rlcy0+YWxsbmV4dDsKIAlhbGxub2Rlcy0+Y2hpbGQgPSBwcm9tX2J1aWxkX3RyZWUoYWxsbm9kZXMsCi0JCQkJCSAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+bm9kZSksCisJCQkJCSAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+cGhhbmRsZSksCiAJCQkJCSAgJm5leHRwKTsKIAlvZl9jb25zb2xlX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwXzY0LlMKaW5kZXggZmQzY2VlNC4uMWRkZWM0MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF82NC5TCkBAIC0xNDksMTEgKzE0OSwxMSBAQAogcnRyYXBfaXJxOgogcnRyYXA6CiAjaWZuZGVmIENPTkZJR19TTVAKLQkJc2V0aGkJCQklaGkocGVyX2NwdV9fX19jcHVfZGF0YSksICVsMAotCQlsZHV3CQkJWyVsMCArICVsbyhwZXJfY3B1X19fX2NwdV9kYXRhKV0sICVsMQorCQlzZXRoaQkJCSVoaShfX2NwdV9kYXRhKSwgJWwwCisJCWxkdXcJCQlbJWwwICsgJWxvKF9fY3B1X2RhdGEpXSwgJWwxCiAjZWxzZQotCQlzZXRoaQkJCSVoaShwZXJfY3B1X19fX2NwdV9kYXRhKSwgJWwwCi0JCW9yCQkJJWwwLCAlbG8ocGVyX2NwdV9fX19jcHVfZGF0YSksICVsMAorCQlzZXRoaQkJCSVoaShfX2NwdV9kYXRhKSwgJWwwCisJCW9yCQkJJWwwLCAlbG8oX19jcHVfZGF0YSksICVsMAogCQlsZHV3CQkJWyVsMCArICVnNV0sICVsMQogI2VuZGlmCiAJCWNtcAkJCSVsMSwgMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggOWJlMmFmNS4uYjIyY2U2MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC05NSw4ICs5NSw2IEBACiAJCQkgICAgICJub3Bcblx0IgogCQkJICAgICAibm9wXG5cdCIgOiA6ICJyIiAocHJvbV90YnIpKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYm9vdF9mbGFncyBfX2luaXRkYXRhID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggYWEzNjIyMy4uZWIxNDg0NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvZl9maW5kX25vZGVfYnlfY3B1aWQoY3B1KTsKIAotCQlwcm9tX3N0YXJ0Y3B1KGRwLT5ub2RlLCBlbnRyeSwgY29va2llKTsKKwkJcHJvbV9zdGFydGNwdShkcC0+cGhhbmRsZSwgZW50cnksIGNvb2tpZSk7CiAJfQogCiAJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDUwMDAwOyB0aW1lb3V0KyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKaW5kZXggNjg3OTFjYS4uNDgyZjJhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkJc21wX3Blbmd1aW5fY3RhYmxlLnJlZ19zaXplID0gMDsKIAogCQkJLyogd2hpcnJyLCB3aGlycnIsIHdoaXJycnJycnJyci4uLiAqLwotCQkJU01QX1BSSU5USygoIlN0YXJ0aW5nIENQVSAlZCBhdCAlcCBcbiIsIGksIGVudHJ5KSk7CisJCQlTTVBfUFJJTlRLKCgiU3RhcnRpbmcgQ1BVICVkIGF0ICVwXG4iLCBpLCBlbnRyeSkpOwogCQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiAJCQlwcm9tX3N0YXJ0Y3B1KGNwdV9ub2RlLAogCQkJCSAgICAgICZzbXBfcGVuZ3Vpbl9jdGFibGUsIDAsIChjaGFyICopZW50cnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggZGMwYWMxOS4uZGFkZWQzYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwppbmRleCAzNzhjYTgyLi5lYmNlNDMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KIAogZW51bSBkaXJlY3Rpb24gewpAQCAtMjc0LDEzICsyNzUsOSBAQAogCiBzdGF0aWMgdm9pZCBsb2dfdW5hbGlnbmVkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50LCBsYXN0X3RpbWU7CisJc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUocmF0ZWxpbWl0LCA1ICogSFosIDUpOwogCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF90aW1lICsgNSAqIEhaKSkKLQkJY291bnQgPSAwOwotCWlmIChjb3VudCA8IDUpIHsKLQkJbGFzdF90aW1lID0gamlmZmllczsKLQkJY291bnQrKzsKKwlpZiAoX19yYXRlbGltaXQoJnJhdGVsaW1pdCkpIHsKIAkJcHJpbnRrKCJLZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBhdCBUUENbJWx4XSAlcFNcbiIsCiAJCSAgICAgICByZWdzLT50cGMsICh2b2lkICopIHJlZ3MtPnRwYyk7CiAJfQpAQCAtNjM2LDcgKzYzMyw2IEBACiAJCXJldHVybjsKIAl9CiAJYWR2YW5jZShyZWdzKTsKLQlyZXR1cm47CiB9CiAKIHZvaWQgaGFuZGxlX3N0ZGZtbmEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc2ZhciwgdW5zaWduZWQgbG9uZyBzZnNyKQpAQCAtNjg1LDUgKzY4MSw0IEBACiAJCXJldHVybjsKIAl9CiAJYWR2YW5jZShyZWdzKTsKLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKaW5kZXggYTM0MTNhYy4uYmQ4NjAxNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwpAQCAtMzUsNiArMzUsOCBAQAogCiBleHRlcm4gaW50IHByb21fbm9kZV9yb290OwogCitpbnQgc2hvd191bmhhbmRsZWRfc2lnbmFscyA9IDE7CisKIC8qIEF0IGJvb3QgdGltZSB3ZSBkZXRlcm1pbmUgdGhlc2UgdHdvIHZhbHVlcyBuZWNlc3NhcnkgZm9yIHNldHRpbmcKICAqIHVwIHRoZSBzZWdtZW50IG1hcHMgYW5kIHBhZ2UgdGFibGUgZW50cmllcyAocHRlJ3MpLgogICovCkBAIC0xNDksNiArMTUxLDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2hvd19zaWduYWxfbXNnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lnLCBpbnQgY29kZSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoIXVuaGFuZGxlZF9zaWduYWwodHNrLCBzaWcpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKCIlcyVzWyVkXTogc2VnZmF1bHQgYXQgJWx4IGlwICVwIChycGMgJXApIHNwICVwIGVycm9yICV4IiwKKwkgICAgICAgdGFza19waWRfbnIodHNrKSA+IDEgPyBLRVJOX0lORk8gOiBLRVJOX0VNRVJHLAorCSAgICAgICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIGFkZHJlc3MsCisJICAgICAgICh2b2lkICopcmVncy0+cGMsICh2b2lkICopcmVncy0+dV9yZWdzW1VSRUdfSTddLAorCSAgICAgICAodm9pZCAqKXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSwgY29kZSk7CisKKwlwcmludF92bWFfYWRkcihLRVJOX0NPTlQgIiBpbiAiLCByZWdzLT5wYyk7CisKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2RvX2ZhdWx0X3NpZ2luZm8oaW50IGNvZGUsIGludCBzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWluZm8uc2lfc2lnbm8gPSBzaWc7CisJaW5mby5zaV9jb2RlID0gY29kZTsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcjsKKwlpbmZvLnNpX3RyYXBubyA9IDA7CisKKwlpZiAodW5saWtlbHkoc2hvd191bmhhbmRsZWRfc2lnbmFscykpCisJCXNob3dfc2lnbmFsX21zZyhyZWdzLCBzaWcsIGluZm8uc2lfY29kZSwKKwkJCQlhZGRyLCBjdXJyZW50KTsKKworCWZvcmNlX3NpZ19pbmZvIChzaWcsICZpbmZvLCBjdXJyZW50KTsKK30KKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2FmZV9jb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHN0cnVjdCBwdF9yZWdzICosCiAJCQkJCQkgICAgdW5zaWduZWQgaW50KTsKIApAQCAtMTY4LDYgKzIwOSwxNCBAQAogCXJldHVybiBzYWZlX2NvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbik7CiB9CiAKK3N0YXRpYyBub2lubGluZSB2b2lkIGRvX2ZhdWx0X3NpZ2luZm8oaW50IGNvZGUsIGludCBzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgIGludCB0ZXh0X2ZhdWx0KQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNvbXB1dGVfc2lfYWRkcihyZWdzLCB0ZXh0X2ZhdWx0KTsKKworCV9fZG9fZmF1bHRfc2lnaW5mbyhjb2RlLCBzaWcsIHJlZ3MsIGFkZHIpOworfQorCiBhc21saW5rYWdlIHZvaWQgZG9fc3BhcmNfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0ZXh0X2ZhdWx0LCBpbnQgd3JpdGUsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtMTc2LDkgKzIyNSw4IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwogCXVuc2lnbmVkIGludCBmaXh1cDsKIAl1bnNpZ25lZCBsb25nIGcyOwotCXNpZ2luZm9fdCBpbmZvOwogCWludCBmcm9tX3VzZXIgPSAhKHJlZ3MtPnBzciAmIFBTUl9QUyk7Ci0JaW50IGZhdWx0OworCWludCBmYXVsdCwgY29kZTsKIAogCWlmKHRleHRfZmF1bHQpCiAJCWFkZHJlc3MgPSByZWdzLT5wYzsKQEAgLTE5NSw3ICsyNDMsNyBAQAogCWlmICghQVJDSF9TVU40QyAmJiBhZGRyZXNzID49IFRBU0tfU0laRSkKIAkJZ290byB2bWFsbG9jX2ZhdWx0OwogCi0JaW5mby5zaV9jb2RlID0gU0VHVl9NQVBFUlI7CisJY29kZSA9IFNFR1ZfTUFQRVJSOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgaGF2ZSBubyB1c2VyCkBAIC0yMjksNyArMjc3LDcgQEAKIAkgKiB3ZSBjYW4gaGFuZGxlIGl0Li4KIAkgKi8KIGdvb2RfYXJlYToKLQlpbmZvLnNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKKwljb2RlID0gU0VHVl9BQ0NFUlI7CiAJaWYod3JpdGUpIHsKIAkJaWYoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQogCQkJZ290byBiYWRfYXJlYTsKQEAgLTI3MywxOCArMzIxLDggQEAKIAogYmFkX2FyZWFfbm9zZW1hcGhvcmU6CiAJLyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovCi0JaWYoZnJvbV91c2VyKSB7Ci0jaWYgMAotCQlwcmludGsoIkZhdWx0IHdoZWUgJXMgWyVkXTogc2VnZmF1bHRzIGF0ICUwOGx4IHBjPSUwOGx4XG4iLAotCQkgICAgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgYWRkcmVzcywgcmVncy0+cGMpOwotI2VuZGlmCi0JCWluZm8uc2lfc2lnbm8gPSBTSUdTRUdWOwotCQlpbmZvLnNpX2Vycm5vID0gMDsKLQkJLyogaW5mby5zaV9jb2RlIHNldCBhYm92ZSB0byBtYWtlIGNsZWFyIHdoZXRoZXIKLQkJICAgdGhpcyB3YXMgYSBTRUdWX01BUEVSUiBvciBTRUdWX0FDQ0VSUiBmYXVsdC4gICovCi0JCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWNvbXB1dGVfc2lfYWRkcihyZWdzLCB0ZXh0X2ZhdWx0KTsKLQkJaW5mby5zaV90cmFwbm8gPSAwOwotCQlmb3JjZV9zaWdfaW5mbyAoU0lHU0VHViwgJmluZm8sIHRzayk7CisJaWYgKGZyb21fdXNlcikgeworCQlkb19mYXVsdF9zaWdpbmZvKGNvZGUsIFNJR1NFR1YsIHJlZ3MsIHRleHRfZmF1bHQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMzUsMTIgKzM3Myw3IEBACiAKIGRvX3NpZ2J1czoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWluZm8uc2lfc2lnbm8gPSBTSUdCVVM7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JaW5mby5zaV9jb2RlID0gQlVTX0FEUkVSUjsKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgY29tcHV0ZV9zaV9hZGRyKHJlZ3MsIHRleHRfZmF1bHQpOwotCWluZm8uc2lfdHJhcG5vID0gMDsKLQlmb3JjZV9zaWdfaW5mbyAoU0lHQlVTLCAmaW5mbywgdHNrKTsKKwlkb19mYXVsdF9zaWdpbmZvKEJVU19BRFJFUlIsIFNJR0JVUywgcmVncywgdGV4dF9mYXVsdCk7CiAJaWYgKCFmcm9tX3VzZXIpCiAJCWdvdG8gbm9fY29udGV4dDsKIApAQCAtMzc4LDcgKzQxMSw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCWV4dGVybiB2b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcscHRlX3QpOworCQkJCQkgICB1bnNpZ25lZCBsb25nLHB0ZV90ICopOwogCWV4dGVybiBwdGVfdCAqc3VuNGNfcHRlX29mZnNldF9rZXJuZWwocG1kX3QgKix1bnNpZ25lZCBsb25nKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwpAQCAtNDU1LDcgKzQ4OCw3IEBACiAJCSAqICAgICAgIG9uIHRoZSBDUFUgYW5kIGRvaW5nIGEgc2hyaW5rX21tYXAoKSBvbiB0aGlzIHZtYS4KIAkJICovCiAJCXN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUgKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyZXNzKSwgYWRkcmVzcywKLQkJCQkJKnB0ZXApOworCQkJCQlwdGVwKTsKIAllbHNlCiAJCWRvX3NwYXJjX2ZhdWx0KHJlZ3MsIHRleHRfZmF1bHQsIHdyaXRlLCBhZGRyZXNzKTsKIH0KQEAgLTQ2NiwxNCArNDk5LDEwIEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKLQlzaWdpbmZvX3QgaW5mbzsKKwlpbnQgY29kZTsKIAotCWluZm8uc2lfY29kZSA9IFNFR1ZfTUFQRVJSOworCWNvZGUgPSBTRUdWX01BUEVSUjsKIAotI2lmIDAKLQlwcmludGsoIndmPHBpZD0lZCx3cj0lZCxhZGRyPSUwOGx4PlxuIiwKLQkgICAgICAgdHNrLT5waWQsIHdyaXRlLCBhZGRyZXNzKTsKLSNlbmRpZgogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CiAJaWYoIXZtYSkKQEAgLTQ4NSw3ICs1MTQsNyBAQAogCWlmKGV4cGFuZF9zdGFjayh2bWEsIGFkZHJlc3MpKQogCQlnb3RvIGJhZF9hcmVhOwogZ29vZF9hcmVhOgotCWluZm8uc2lfY29kZSA9IFNFR1ZfQUNDRVJSOworCWNvZGUgPSBTRUdWX0FDQ0VSUjsKIAlpZih3cml0ZSkgewogCQlpZighKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCiAJCQlnb3RvIGJhZF9hcmVhOwpAQCAtNTAyLDI3ICs1MzEsMTIgQEAKIAlyZXR1cm47CiBiYWRfYXJlYToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotI2lmIDAKLQlwcmludGsoIldpbmRvdyB3aGVlICVzIFslZF06IHNlZ2ZhdWx0cyBhdCAlMDhseFxuIiwKLQkgICAgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgYWRkcmVzcyk7Ci0jZW5kaWYKLQlpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQkvKiBpbmZvLnNpX2NvZGUgc2V0IGFib3ZlIHRvIG1ha2UgY2xlYXIgd2hldGhlcgotCSAgIHRoaXMgd2FzIGEgU0VHVl9NQVBFUlIgb3IgU0VHVl9BQ0NFUlIgZmF1bHQuICAqLwotCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyZXNzOwotCWluZm8uc2lfdHJhcG5vID0gMDsKLQlmb3JjZV9zaWdfaW5mbyAoU0lHU0VHViwgJmluZm8sIHRzayk7CisJX19kb19mYXVsdF9zaWdpbmZvKGNvZGUsIFNJR1NFR1YsIHRzay0+dGhyZWFkLmtyZWdzLCBhZGRyZXNzKTsKIAlyZXR1cm47CiAKIGRvX3NpZ2J1czoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWluZm8uc2lfc2lnbm8gPSBTSUdCVVM7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JaW5mby5zaV9jb2RlID0gQlVTX0FEUkVSUjsKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcmVzczsKLQlpbmZvLnNpX3RyYXBubyA9IDA7Ci0JZm9yY2Vfc2lnX2luZm8gKFNJR0JVUywgJmluZm8sIHRzayk7CisJX19kb19mYXVsdF9zaWdpbmZvKEJVU19BRFJFUlIsIFNJR0JVUywgdHNrLT50aHJlYWQua3JlZ3MsIGFkZHJlc3MpOwogfQogCiB2b2lkIHdpbmRvd19vdmVyZmxvd19mYXVsdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCmluZGV4IGI5ZDRmZjAuLmY5MmNlNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAoraW50IHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgPSAxOworCiBzdGF0aWMgaW5saW5lIF9fa3Byb2JlcyBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMjgsMjIgKzEzMCw0OCBAQAogCXJldHVybiBpbnNuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3Nob3dfc2lnbmFsX21zZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZywgaW50IGNvZGUsCisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKCF1bmhhbmRsZWRfc2lnbmFsKHRzaywgc2lnKSkKKwkJcmV0dXJuOworCisJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCXJldHVybjsKKworCXByaW50aygiJXMlc1slZF06IHNlZ2ZhdWx0IGF0ICVseCBpcCAlcCAocnBjICVwKSBzcCAlcCBlcnJvciAleCIsCisJICAgICAgIHRhc2tfcGlkX25yKHRzaykgPiAxID8gS0VSTl9JTkZPIDogS0VSTl9FTUVSRywKKwkgICAgICAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCBhZGRyZXNzLAorCSAgICAgICAodm9pZCAqKXJlZ3MtPnRwYywgKHZvaWQgKilyZWdzLT51X3JlZ3NbVVJFR19JN10sCisJICAgICAgICh2b2lkICopcmVncy0+dV9yZWdzW1VSRUdfRlBdLCBjb2RlKTsKKworCXByaW50X3ZtYV9hZGRyKEtFUk5fQ09OVCAiIGluICIsIHJlZ3MtPnRwYyk7CisKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBjb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAogc3RhdGljIHZvaWQgZG9fZmF1bHRfc2lnaW5mbyhpbnQgY29kZSwgaW50IHNpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkgICAgIHVuc2lnbmVkIGludCBpbnNuLCBpbnQgZmF1bHRfY29kZSkKIHsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CiAJc2lnaW5mb190IGluZm87CiAKIAlpbmZvLnNpX2NvZGUgPSBjb2RlOwogCWluZm8uc2lfc2lnbm8gPSBzaWc7CiAJaW5mby5zaV9lcnJubyA9IDA7CiAJaWYgKGZhdWx0X2NvZGUgJiBGQVVMVF9DT0RFX0lUTEIpCi0JCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSByZWdzLT50cGM7CisJCWFkZHIgPSByZWdzLT50cGM7CiAJZWxzZQotCQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikKLQkJCWNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbiwgMCk7CisJCWFkZHIgPSBjb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHJlZ3MsIGluc24sIDApOworCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyOwogCWluZm8uc2lfdHJhcG5vID0gMDsKKworCWlmICh1bmxpa2VseShzaG93X3VuaGFuZGxlZF9zaWduYWxzKSkKKwkJc2hvd19zaWduYWxfbXNnKHJlZ3MsIHNpZywgY29kZSwgYWRkciwgY3VycmVudCk7CisKIAlmb3JjZV9zaWdfaW5mbyhzaWcsICZpbmZvLCBjdXJyZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCAxODg2ZDM3Li45MjQ1YTgyMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0yODksMTIgKzI4OSwxMyBAQAogCX0KIH0KIAotdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdHNiICp0c2I7CiAJdW5zaWduZWQgbG9uZyB0YWcsIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LCB0c2JfaGFzaF9zaGlmdDsKKwlwdGVfdCBwdGUgPSAqcHRlcDsKIAogCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9ub3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL25vc3VuNGMuYwppbmRleCAxOTYyNjNmLi40ZTYyYzI3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL25vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL25vc3VuNGMuYwpAQCAtNjIsNyArNjIsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQordm9pZCBzdW40Y191cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggMzY3MzIxYS4uZGY0OWIyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKQEAgLTY5NCw3ICs2OTQsNyBAQAogICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIGEgZGVhZHdvb2QgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHdoZW4KICAqIHdlIHN0YXJ0IHRvIG1ha2UgcHJlY2lzZSBwYWdlIGZsdXNoZXMgYWdhaW4uIC0temFpdGNldgogICovCi1zdGF0aWMgdm9pZCBzd2lmdF91cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCitzdGF0aWMgdm9pZCBzd2lmdF91cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKICNpZiAwCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdDsKQEAgLTcwMywxMCArNzAzLDEwIEBACiAKIAlpZiAoYWRkcmVzcyA9PSBsYXN0KSB7CiAJCXZhbCA9IHNybW11X2h3cHJvYmUoYWRkcmVzcyk7Ci0JCWlmICh2YWwgIT0gMCAmJiBwdGVfdmFsKHB0ZSkgIT0gdmFsKSB7CisJCWlmICh2YWwgIT0gMCAmJiBwdGVfdmFsKCpwdGVwKSAhPSB2YWwpIHsKIAkJCXByaW50aygic3dpZnRfdXBkYXRlX21tdV9jYWNoZTogIgogCQkJICAgICJhZGRyICVseCBwdXQgJTA4eCBwcm9iZWQgJTA4eCBmcm9tICVwXG4iLAotCQkJICAgIGFkZHJlc3MsIHB0ZV92YWwocHRlKSwgdmFsLAorCQkJICAgIGFkZHJlc3MsIHB0ZV92YWwoKnB0ZXApLCB2YWwsCiAJCQkgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJCXNybW11X2ZsdXNoX3dob2xlX3RsYigpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKaW5kZXggYTg5YmFmMC4uMTg2NTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwpAQCAtMTg4Nyw3ICsxODg3LDcgQEAKIC8qIEFuIGV4cGVyaW1lbnQsIHR1cm4gb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4uLiAtRGF2ZU0gKi8KICNkZWZpbmUgU1VONENfUFJFTE9BRF9QU0VHCiAKLXZvaWQgc3VuNGNfdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCit2b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcHNlZzsKQEAgLTE5MjksNyArMTkyOSw3IEBACiAJCQlzdGFydCArPSBQQUdFX1NJWkU7CiAJCX0KICNpZm5kZWYgU1VONENfUFJFTE9BRF9QU0VHCi0JCXN1bjRjX3B1dF9wdGUoYWRkcmVzcywgcHRlX3ZhbChwdGUpKTsKKwkJc3VuNGNfcHV0X3B0ZShhZGRyZXNzLCBwdGVfdmFsKCpwdGVwKSk7CiAjZW5kaWYKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCQlhZGRfbHJ1KGVudHJ5KTsKIAl9CiAKLQlzdW40Y19wdXRfcHRlKGFkZHJlc3MsIHB0ZV92YWwocHRlKSk7CisJc3VuNGNfcHV0X3B0ZShhZGRyZXNzLCBwdGVfdmFsKCpwdGVwKSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwppbmRleCBiMzA3NWQ3Li41MzQwMjY0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKQEAgLTk0LDUgKzk0LDQgQEAKIHByb21fcHV0Y2hhcihjaGFyIGMpCiB7CiAJd2hpbGUocHJvbV9uYnB1dGNoYXIoYykgPT0gLTEpIDsKLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfNjQuYwppbmRleCBlMWMzZmM4Li5mNTVkNThhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzY0LmMKQEAgLTYyLDcgKzYyLDYgQEAKIHByb21fcHV0Y2hhcihjaGFyIGMpCiB7CiAJcHJvbV9uYnB1dGNoYXIoYyk7Ci0JcmV0dXJuOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vZGV2bWFwLmMgYi9hcmNoL3NwYXJjL3Byb20vZGV2bWFwLmMKaW5kZXggMWU1MTc5MS4uNDYxNTdkMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL2Rldm1hcC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9kZXZtYXAuYwpAQCAtNTAsNSArNTAsNCBAQAogCSgqKHJvbXZlYy0+cHZfdjJkZXZvcHMudjJfZHVtYl9tdW5tYXApKSh2YWRkciwgbnVtX2J5dGVzKTsKIAlyZXN0b3JlX2N1cnJlbnQoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vZGV2b3BzXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vZGV2b3BzXzMyLmMKaW5kZXggOWYxYTk1Yy4uOWM1ZDQ2OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL2Rldm9wc18zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9kZXZvcHNfMzIuYwpAQCAtODQsNiArODQsNCBAQAogCX07CiAJcmVzdG9yZV9jdXJyZW50KCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwppbmRleCA2MTkzYzMzLi5jY2IzNmM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKQEAgLTc1LDUgKzc1LDQgQEAKIAkgICAgICAgcm9tdmVjLT5wdl9yb212ZXJzLCBwcm9tX3Jldik7CiAKIAkvKiBJbml0aWFsaXphdGlvbiBzdWNjZXNzZnVsLiAqLwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYwppbmRleCAyMGJlMzM5Li4yZTJhODhiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vcGFsbG9jLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3BhbGxvYy5jCkBAIC00MCw1ICs0MCw0IEBACiB7CiAJaWYoKHByb21fdmVycyA9PSBQUk9NX1YwKSB8fCAobnVtX2J5dGVzID09IDB4MCkpIHJldHVybjsKIAkoKihyb212ZWMtPnB2X3YyZGV2b3BzLnYyX2R1bWJfbWVtX2ZyZWUpKSh2YWRkciwgbnVtX2J5dGVzKTsKLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vcmFuZ2VzLmMgYi9hcmNoL3NwYXJjL3Byb20vcmFuZ2VzLmMKaW5kZXggY2Q1NzkwOC4uYWVmZjQzZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL3Jhbmdlcy5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9yYW5nZXMuYwpAQCAtODcsOCArODcsNiBAQAogCiAJaWYobnVtX29iaW9fcmFuZ2VzKQogCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogb2Jpb19yYW5nZXMgJWRcbiIsIG51bV9vYmlvX3Jhbmdlcyk7Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9zZWdtZW50LmMgYi9hcmNoL3NwYXJjL3Byb20vc2VnbWVudC5jCmluZGV4IDA0ZmQwM2EuLjg2YTY2M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9zZWdtZW50LmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3NlZ21lbnQuYwpAQCAtMjUsNSArMjUsNCBAQAogCSgqKHJvbXZlYy0+cHZfc2V0Y3R4dCkpKGN0eCwgKGNoYXIgKikgdmFkZHIsIHNlZ21lbnQpOwogCXJlc3RvcmVfY3VycmVudCgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV8zMi5jCmluZGV4IDY0NmQyNDQuLmIyMTU5MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3RyZWVfMzIuYwpAQCAtMTczLDcgKzE3Myw2IEBACiAJbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCBwcm9wLCB1c2VyX2J1ZiwgdWJ1Zl9zaXplKTsKIAlpZihsZW4gIT0gLTEpIHJldHVybjsKIAl1c2VyX2J1ZlswXSA9IDA7Ci0JcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldHN0cmluZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzY0LmMgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV82NC5jCmluZGV4IDhlYTczZGQuLjNjMGQyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3RyZWVfNjQuYwpAQCAtMTU0LDcgKzE1NCw2IEBACiAJbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCBwcm9wLCB1c2VyX2J1ZiwgdWJ1Zl9zaXplKTsKIAlpZihsZW4gIT0gLTEpIHJldHVybjsKIAl1c2VyX2J1ZlswXSA9IDA7Ci0JcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldHN0cmluZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggNWZmNTU0NjcuLmMxZmY2OTAzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAJdWJkX2Rldi0+ZmQgPSBmZDsKIAogCWlmKHViZF9kZXYtPmNvdy5maWxlICE9IE5VTEwpewotCQlibGtfcXVldWVfbWF4X3NlY3RvcnModWJkX2Rldi0+cXVldWUsIDggKiBzaXplb2YobG9uZykpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnModWJkX2Rldi0+cXVldWUsIDggKiBzaXplb2YobG9uZykpOwogCiAJCWVyciA9IC1FTk9NRU07CiAJCXViZF9kZXYtPmNvdy5iaXRtYXAgPSB2bWFsbG9jKHViZF9kZXYtPmNvdy5iaXRtYXBfbGVuKTsKQEAgLTg0OSw3ICs4NDksNyBAQAogCX0KIAl1YmRfZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gdWJkX2RldjsKIAotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModWJkX2Rldi0+cXVldWUsIE1BWF9TRyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyh1YmRfZGV2LT5xdWV1ZSwgTUFYX1NHKTsKIAllcnIgPSB1YmRfZGlza19yZWdpc3RlcihVQkRfTUFKT1IsIHViZF9kZXYtPnNpemUsIG4sICZ1YmRfZ2VuZGlza1tuXSk7CiAJaWYoZXJyKXsKIAkJKmVycm9yX291dCA9ICJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggOWNlM2YxNi4uYTlmNzI1MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zNDUsNyArMzQ1LDcgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiBleHRlcm4gcHRlX3QgKnZpcnRfdG9fcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyA7IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyZXNzLHB0ZXApIGRvIDsgd2hpbGUgKDApCiAKIC8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KICNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiA0KSAmIDB4M2YpCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMjIwMWU5Yy4uYzFlYTllYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIAlzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNjYWxsX3RhYmxlLm8gXAogCXN5c3JxLm8ga3N5bXMubyB0bHMubwogCi1zdWJhcmNoLW9iai15ID0gbGliL2NzdW0tcGFydGlhbF82NC5vIGxpYi9tZW1jcHlfNjQubyBsaWIvdGh1bmtfNjQubworc3ViYXJjaC1vYmoteSA9IGxpYi9jc3VtLXBhcnRpYWxfNjQubyBsaWIvbWVtY3B5XzY0Lm8gbGliL3RodW5rXzY0Lm8gXAorCQlsaWIvcndzZW1fNjQubwogc3ViYXJjaC1vYmotJChDT05GSUdfTU9EVUxFUykgKz0ga2VybmVsL21vZHVsZS5vCiAKIGxkdC15ID0gLi4vc3lzLWkzODYvbGR0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGViNDA5MjUuLjU3Y2NkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNDUsNiArNDUsNyBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJc2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgpAQCAtMTgzLDYgKzE4NCw5IEBACiBjb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBIQVZFX0VBUkxZX1JFUworCWRlZl9ib29sIHkKKwogY29uZmlnIEhBVkVfSU5URUxfVFhUCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIERNQVIgJiYgQUNQSQpAQCAtNTY4LDYgKzU3MiwxOCBAQAogCSAgRW5hYmxlIHRvIGRlYnVnIHBhcmF2aXJ0X29wcyBpbnRlcm5hbHMuICBTcGVjaWZpY2FsbHksIEJVRyBpZgogCSAgYSBwYXJhdmlydF9vcCBpcyBtaXNzaW5nIHdoZW4gaXQgaXMgY2FsbGVkLgogCitjb25maWcgTk9fQk9PVE1FTQorCWRlZmF1bHQgeQorCWJvb2wgIkRpc2FibGUgQm9vdG1lbSBjb2RlIgorCS0tLWhlbHAtLS0KKwkgIFVzZSBlYXJseV9yZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBib290bWVtIGJlZm9yZSBzbGFiIGlzIHJlYWR5LgorCQktIGFsbG9jYXRvciAoYnVkZHkpIFtnZW5lcmljXQorCQktIGVhcmx5IGFsbG9jYXRvciAoYm9vdG1lbSkgW2dlbmVyaWNdCisJCS0gdmVyeSBlYXJseSBhbGxvY2F0b3IgKHJlc2VydmVfZWFybHkqKCkpIFt4ODZdCisJCS0gdmVyeSB2ZXJ5IGVhcmx5IGFsbG9jYXRvciAoZWFybHkgYnJrIG1vZGVsKSBbeDg2XQorCSAgU28gcmVkdWNlIG9uZSBsYXllciBiZXR3ZWVuIGVhcmx5IGFsbG9jYXRvciB0byBmaW5hbCBhbGxvY2F0b3IKKworCiBjb25maWcgTUVNVEVTVAogCWJvb2wgIk1lbXRlc3QiCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBmMjBkZGY4Li5hMTk4MjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIGNvbmZpZyBYODZfWEFERAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhTTM4NgorCWRlcGVuZHMgb24gWDg2XzY0IHx8ICFNMzg2CiAKIGNvbmZpZyBYODZfUFBST19GRU5DRQogCWJvb2wgIlBlbnRpdW1Qcm8gbWVtb3J5IG9yZGVyaW5nIGVycmF0YSB3b3JrYXJvdW5kIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCA3OGIzMmJlLi4wYTQzZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTM1LDkgKzEzNSw3IEBACiAjIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uIHN1cHBvcnQKIGRyaXZlcnMtJChDT05GSUdfUE0pICs9IGFyY2gveDg2L3Bvd2VyLwogCi1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiBkcml2ZXJzLSQoQ09ORklHX0ZCKSArPSBhcmNoL3g4Ni92aWRlby8KLWVuZGlmCiAKICMjIyMKICMgYm9vdCBsb2FkZXIgc3VwcG9ydC4gU2V2ZXJhbCB0YXJnZXRzIGFyZSBrZXB0IGZvciBsZWdhY3kgcHVycG9zZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNiMjJmZTguLjUxZTI0MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTksMTEgKzE5LDYgQEAKICNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfIDEKLSNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSCAxCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgpAQCAtMTMxLDggKzEyNiw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1zdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CiAKIHN0YXRpYyB2b2lkIF9fcHV0c3RyKGludCwgY29uc3QgY2hhciAqKTsKICNkZWZpbmUgcHV0c3RyKF9feCkgIF9fcHV0c3RyKDAsIF9feCkKQEAgLTE4NSwxMSArMTgwLDkgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19tb2RlID09IDAgJiYKIAkgICAgbGluZXMgPT0gMCAmJiBjb2xzID09IDApCiAJCXJldHVybjsKLSNlbmRpZgogCiAJeCA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ194OwogCXkgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfeTsKQEAgLTIyMyw3ICsyMTYsNyBAQAogCW91dGIoMHhmZiAmIChwb3MgPj4gMSksIHZpZHBvcnQrMSk7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewogCWludCBpOwogCWNoYXIgKnNzID0gczsKQEAgLTIzMyw3ICsyMjYsNyBAQAogCXJldHVybiBzOwogfQogCi12b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7CiAJY29uc3QgY2hhciAqcyA9IHNyYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYyBiL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYwppbmRleCA4ZWY2MGYyLi45MTkyNTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21rY3B1c3RyLmMKKysrIGIvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jCkBAIC0yMiw3ICsyMiw3IEBACiAJaW50IGksIGo7CiAJY29uc3QgY2hhciAqc3RyOwogCi0JcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9IFxuIik7CisJcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQ0FQSU5UUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwppbmRleCA4MTljYWExLi5lZDdhZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKQEAgLTQyLDIyICs0MiwxNSBAQAogewogCXN0cnVjdCBiaW9zcmVncyBpcmVnLCBvcmVnOwogCXUxNiBheDsKLQl1OCByb3dzOwogCXU4IG1vZGU7CiAKIAlpbml0cmVncygmaXJlZyk7CiAKKwkvKiBRdWVyeSBjdXJyZW50IG1vZGUgKi8KIAlheCA9IDB4MGYwMDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCAmb3JlZyk7CiAJbW9kZSA9IG9yZWcuYWw7CiAKLQlzZXRfZnMoMCk7Ci0Jcm93cyA9IHJkZnM4KDB4NDg0KTsJLyogcm93cyBtaW51cyBvbmUgKi8KLQotCWlmICgob3JlZy5heCA9PSAweDUwMDMgfHwgb3JlZy5heCA9PSAweDUwMDcpICYmCi0JICAgIChyb3dzID09IDAgfHwgcm93cyA9PSAyNCkpCi0JCXJldHVybiBtb2RlOwotCiAJaWYgKG1vZGUgIT0gMyAmJiBtb2RlICE9IDcpCiAJCW1vZGUgPSAzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggZjc2NzE2NC4uNDNlZGEyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMjk4LDExICsyOTgsMTggQEAKIAl9CiAKIAkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCWlmIChzYXZlZC5jdXJ4ID49IHhzKQorCQlzYXZlZC5jdXJ4ID0geHMtMTsKKwlpZiAoc2F2ZWQuY3VyeSA+PSB5cykKKwkJc2F2ZWQuY3VyeSA9IHlzLTE7CisKIAlpbml0cmVncygmaXJlZyk7CiAJaXJlZy5haCA9IDB4MDI7CQkvKiBTZXQgY3Vyc29yIHBvc2l0aW9uICovCiAJaXJlZy5kaCA9IHNhdmVkLmN1cnk7CiAJaXJlZy5kbCA9IHNhdmVkLmN1cng7CiAJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7CisKKwlzdG9yZV9jdXJzb3JfcG9zaXRpb24oKTsKIH0KIAogdm9pZCBzZXRfdmlkZW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCmluZGV4IGY5ZjQ3MjQuLjI4MGMwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJICogc2l6ZSBsaW1pdHMgaW1wb3NlZCBvbiB0aGVtIGJ5IGNyZWF0aW5nIHByb2dyYW1zIHdpdGggbGFyZ2UKIAkgKiBhcnJheXMgaW4gdGhlIGRhdGEgb3IgYnNzLgogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKIAlpZiAoZXguYV9kYXRhICsgZXguYV9ic3MgPiBybGltKQpAQCAtMzI3LDcgKzMyNyw2IEBACiAJY3VycmVudC0+bW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKIAljdXJyZW50LT5tbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAKLQljdXJyZW50LT5tbS0+bW1hcCA9IE5VTEw7CiAJaW5zdGFsbF9leGVjX2NyZWRzKGJwcm0pOwogCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9GT1JLTk9FWEVDOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAppbmRleCA2OWI3NGE3Li5mMWUyNTNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTY1LDEyICs2NSwxNyBAQAogCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOworZXh0ZXJuIGludCBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKIAkJCQkJICAgICAgIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCiAJCQkJCSAgICAgICB2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApIHt9CitzdGF0aWMgaW5saW5lIGludCBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXJldHVybiAwOworfQogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogLyogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOiAqLwpAQCAtMTI1LDExICsxMzAsMTYgQEAKIAlhc20gdm9sYXRpbGUgKEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkJCVwKIAkJOiBvdXRwdXQgOiAiaSIgKDApLCAjIyBpbnB1dCkKIAorLyogTGlrZSBhbHRlcm5hdGl2ZV9pbywgYnV0IGZvciByZXBsYWNpbmcgYSBkaXJlY3QgY2FsbCB3aXRoIGFub3RoZXIgb25lLiAqLworI2RlZmluZSBhbHRlcm5hdGl2ZV9jYWxsKG9sZGZ1bmMsIG5ld2Z1bmMsIGZlYXR1cmUsIG91dHB1dCwgaW5wdXQuLi4pCVwKKwlhc20gdm9sYXRpbGUgKEFMVEVSTkFUSVZFKCJjYWxsICVQW29sZF0iLCAiY2FsbCAlUFtuZXddIiwgZmVhdHVyZSkgXAorCQk6IG91dHB1dCA6IFtvbGRdICJpIiAob2xkZnVuYyksIFtuZXddICJpIiAobmV3ZnVuYyksICMjIGlucHV0KQorCiAvKgogICogdXNlIHRoaXMgbWFjcm8ocykgaWYgeW91IG5lZWQgbW9yZSB0aGFuIG9uZSBvdXRwdXQgcGFyYW1ldGVyCiAgKiBpbiBhbHRlcm5hdGl2ZV9pbwogICovCi0jZGVmaW5lIEFTTV9PVVRQVVQyKGEsIGIpIGEsIGIKKyNkZWZpbmUgQVNNX09VVFBVVDIoYS4uLikgYQogCiBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZTsKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNGUxYjg4Ny4uOGY4MjE3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsNSArMSwzMDAgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgImF0b21pY18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiYXRvbWljXzY0LmgiCisjaWZuZGVmIF9BU01fWDg2X0FUT01JQ19ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqLworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KKworLyoqCisgKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCit7CisJdi0+Y291bnRlciA9IGk7Cit9CisKKy8qKgorICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucworICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgX19pOworI2lmZGVmIENPTkZJR19NMzg2CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCisJCWdvdG8gbm9feGFkZDsKICNlbmRpZgorCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLworCV9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCisJCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworCisjaWZkZWYgQ09ORklHX00zODYKK25vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2kgPSBhdG9taWNfcmVhZCh2KTsKKwlhdG9taWNfc2V0KHYsIGkgKyBfX2kpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGkgKyBfX2k7CisjZW5kaWYKK30KKworLyoqCisgKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCit7CisJcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYWxyZWFkeSBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCisKKy8qKgorICogYXRvbWljX2luY19zaG9ydCAtIGluY3JlbWVudCBvZiBhIHNob3J0IGludGVnZXIKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgaW50CisgKgorICogQXRvbWljYWxseSBhZGRzIDEgdG8gQHYKKyAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiBAdQorICovCitzdGF0aWMgaW5saW5lIHNob3J0IGludCBhdG9taWNfaW5jX3Nob3J0KHNob3J0IGludCAqdikKK3sKKwlhc20oTE9DS19QUkVGSVggImFkZHcgJDEsICUwIiA6ICIrbSIgKCp2KSk7CisJcmV0dXJuICp2OworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyoqCisgKiBhdG9taWNfb3JfbG9uZyAtIE9SIG9mIHR3byBsb25nIGludGVnZXJzCisgKiBAdjE6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCisgKiBAdjI6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCisgKgorICogQXRvbWljYWxseSBPUnMgQHYxIGFuZCBAdjIKKyAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgT1IKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19vcl9sb25nKHVuc2lnbmVkIGxvbmcgKnYxLCB1bnNpZ25lZCBsb25nIHYyKQoreworCWFzbShMT0NLX1BSRUZJWCAib3JxICUxLCAlMCIgOiAiK20iICgqdjEpIDogInIiICh2MikpOworfQorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQlcCisJCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKKworI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCVwKKwkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQlcCisJCSAgICAgOiAibWVtb3J5IikKKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGluY2x1ZGUgImF0b21pYzY0XzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJhdG9taWM2NF82NC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMtbG9uZy5oPgorI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAyN2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaApAQCAtMCwwICsxLDE2MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQzY0XzMyX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisvLyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKiBBbiA2NGJpdCBhdG9taWMgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQodmFsKQl7ICh2YWwpIH0KKworZXh0ZXJuIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZF92YWwsIHU2NCBuZXdfdmFsKTsKKworLyoqCisgKiBhdG9taWM2NF94Y2hnIC0geGNoZyBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KKyAqCisgKiBBdG9taWNhbGx5IHhjaGdzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsIGFuZCByZXR1cm5zCisgKiB0aGUgb2xkIHZhbHVlLgorICovCitleHRlcm4gdTY0IGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7CisKKy8qKgorICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbC4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOworCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHB0ciBhbmQgcmV0dXJucyBpdC4KKyAqLworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpCit7CisJdTY0IHJlczsKKworCS8qCisJICogTm90ZSwgd2UgaW5saW5lIHRoaXMgYXRvbWljNjRfdCBwcmltaXRpdmUgYmVjYXVzZQorCSAqIGl0IG9ubHkgY2xvYmJlcnMgRUFYL0VEWCBhbmQgbGVhdmVzIHRoZSBvdGhlcnMKKwkgKiB1bnRvdWNoZWQuIFdlIGFsc28gKHNvbWV3aGF0IHN1YnRseSkgcmVseSBvbiB0aGUKKwkgKiBmYWN0IHRoYXQgY21weGNoZzhiIHJldHVybnMgdGhlIGN1cnJlbnQgNjQtYml0IHZhbHVlCisJICogb2YgdGhlIG1lbW9yeSBsb2NhdGlvbiB3ZSBhcmUgdG91Y2hpbmc6CisJICovCisJYXNtIHZvbGF0aWxlKAorCQkibW92ICUlZWJ4LCAlJWVheFxuXHQiCisJCSJtb3YgJSVlY3gsICUlZWR4XG5cdCIKKwkJTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMVxuIgorCQkJOiAiPSZBIiAocmVzKQorCQkJOiAibSIgKCpwdHIpCisJCSk7CisKKwlyZXR1cm4gcmVzOworfQorCitleHRlcm4gdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgQGRlbHRhICsgKkBwdHIKKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoKKyAqIE90aGVyIHZhcmlhbnRzIHdpdGggZGlmZmVyZW50IGFyaXRobWV0aWMgb3BlcmF0b3JzOgorICovCitleHRlcm4gdTY0IGF0b21pYzY0X3N1Yl9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworZXh0ZXJuIHU2NCBhdG9taWM2NF9pbmNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7CitleHRlcm4gdTY0IGF0b21pYzY0X2RlY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ci4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfYWRkKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X3N1Yih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2luYyAtIGluY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMS4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQzY0XzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzViNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQzY0XzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKK3sKKwl2LT5jb3VudGVyID0gaTsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIF9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCit7CisJcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQoreworCWxvbmcgYywgb2xkOworCWMgPSBhdG9taWM2NF9yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVhNjY3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfQVRPTUlDXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfQVRPTUlDXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIHYtPmNvdW50ZXI7Ci19Ci0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCBpbnRlZ2VyIGZyb20gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2k7Ci0jaWZkZWYgQ09ORklHX00zODYKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmICh1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKLQkJZ290byBub194YWRkOwotI2VuZGlmCi0JLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCi0JX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0KLSNpZmRlZiBDT05GSUdfTTM4Ngotbm9feGFkZDogLyogTGVnYWN5IDM4NiBwcm9jZXNzb3IgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19pID0gYXRvbWljX3JlYWQodik7Ci0JYXRvbWljX3NldCh2LCBpICsgX19pKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQotewotCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCi0KLS8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQlcCi0JCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAobWFzayksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KLS8qIEFuIDY0Yml0IGF0b21pYyB0eXBlICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1NjQgX19hbGlnbmVkKDgpIGNvdW50ZXI7Ci19IGF0b21pYzY0X3Q7Ci0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVCh2YWwpCXsgKHZhbCkgfQotCi1leHRlcm4gdTY0IGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgb2xkX3ZhbCwgdTY0IG5ld192YWwpOwotCi0vKioKLSAqIGF0b21pYzY0X3hjaGcgLSB4Y2hnIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgotICoKLSAqIEF0b21pY2FsbHkgeGNoZ3MgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwgYW5kIHJldHVybnMKLSAqIHRoZSBvbGQgdmFsdWUuCi0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7Ci0KLS8qKgotICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAcHRyIGFuZCByZXR1cm5zIGl0LgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cikKLXsKLQl1NjQgcmVzOwotCi0JLyoKLQkgKiBOb3RlLCB3ZSBpbmxpbmUgdGhpcyBhdG9taWM2NF90IHByaW1pdGl2ZSBiZWNhdXNlCi0JICogaXQgb25seSBjbG9iYmVycyBFQVgvRURYIGFuZCBsZWF2ZXMgdGhlIG90aGVycwotCSAqIHVudG91Y2hlZC4gV2UgYWxzbyAoc29tZXdoYXQgc3VidGx5KSByZWx5IG9uIHRoZQotCSAqIGZhY3QgdGhhdCBjbXB4Y2hnOGIgcmV0dXJucyB0aGUgY3VycmVudCA2NC1iaXQgdmFsdWUKLQkgKiBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIHdlIGFyZSB0b3VjaGluZzoKLQkgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSJtb3YgJSVlYngsICUlZWF4XG5cdCIKLQkJIm1vdiAlJWVjeCwgJSVlZHhcblx0IgotCQlMT0NLX1BSRUZJWCAiY21weGNoZzhiICUxXG4iCi0JCQk6ICI9JkEiIChyZXMpCi0JCQk6ICJtIiAoKnB0cikKLQkJKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLWV4dGVybiB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyBAZGVsdGEgKyAqQHB0cgotICovCi1leHRlcm4gdTY0IGF0b21pYzY0X2FkZF9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKgotICogT3RoZXIgdmFyaWFudHMgd2l0aCBkaWZmZXJlbnQgYXJpdGhtZXRpYyBvcGVyYXRvcnM6Ci0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci1leHRlcm4gdTY0IGF0b21pYzY0X2luY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKLWV4dGVybiB1NjQgYXRvbWljNjRfZGVjX3JldHVybihhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9hZGQodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ci4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfc3ViKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ciBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwNWRjMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0FUT01JQ182NF9ICi0jZGVmaW5lIF9BU01fWDg2X0FUT01JQ182NF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLS8qCi0gKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgotICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KLSAqLwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0Jdi0+Y291bnRlciA9IGk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2kgPSBpOwotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKLQotLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLwotCi0jZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgotICovCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlsb25nIF9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQotI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IGMsIG9sZDsKLQljID0gYXRvbWljX3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCi17Ci0JbG9uZyBjLCBvbGQ7Ci0JYyA9IGF0b21pYzY0X3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0vKioKLSAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGludAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2Ci0gKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKLSAqLwotc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCi17Ci0JYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOwotCXJldHVybiAqdjsKLX0KLQotLyoqCi0gKiBhdG9taWNfb3JfbG9uZyAtIE9SIG9mIHR3byBsb25nIGludGVnZXJzCi0gKiBAdjE6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKiBAdjI6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKgotICogQXRvbWljYWxseSBPUnMgQHYxIGFuZCBAdjIKLSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgT1IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19vcl9sb25nKHVuc2lnbmVkIGxvbmcgKnYxLCB1bnNpZ25lZCBsb25nIHYyKQotewotCWFzbShMT0NLX1BSRUZJWCAib3JxICUxLCAlMCIgOiAiK20iICgqdjEpIDogInIiICh2MikpOwotfQotCi0jZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQkJXAotCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCi0KLSNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQkJXAotCQkgICAgIDogIm1lbW9yeSIpCi0KLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDYzN2UxZWMuLjBjZDgyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTE2OCw2ICsxNjgsMTAgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfRkxFWFBSSU9SSVRZICg4KjMyKyAyKSAvKiBJbnRlbCBGbGV4UHJpb3JpdHkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBUICAgICAgICAgKDgqMzIrIDMpIC8qIEludGVsIEV4dGVuZGVkIFBhZ2UgVGFibGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVlBJRCAgICAgICAgKDgqMzIrIDQpIC8qIEludGVsIFZpcnR1YWwgUHJvY2Vzc29yIElEICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05QVAkJKDgqMzIrNSkgIC8qIEFNRCBOZXN0ZWQgUGFnZSBUYWJsZSBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xCUlYJKDgqMzIrNikgIC8qIEFNRCBMQlIgVmlydHVhbGl6YXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TVk1MCSg4KjMyKzcpICAvKiAic3ZtX2xvY2siIEFNRCBTVk0gbG9ja2luZyBNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTlJJUFMJKDgqMzIrOCkgIC8qICJucmlwX3NhdmUiIEFNRCBTVk0gbmV4dF9yaXAgc2F2ZSAqLwogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCmluZGV4IDgyNDBmNzYuLmI4MTAwMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApAQCAtMTQsNiArMTQsOSBAQAogICAgd2hpY2ggZGVidWdnaW5nIHJlZ2lzdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYXAuICBUaGUgb3RoZXIgYml0cwogICAgYXJlIGVpdGhlciByZXNlcnZlZCBvciBub3Qgb2YgaW50ZXJlc3QgdG8gdXMuICovCiAKKy8qIERlZmluZSByZXNlcnZlZCBiaXRzIGluIERSNiB3aGljaCBhcmUgYWx3YXlzIHNldCB0byAxICovCisjZGVmaW5lIERSNl9SRVNFUlZFRAkoMHhGRkZGMEZGMCkKKwogI2RlZmluZSBEUl9UUkFQMAkoMHgxKQkJLyogZGIwICovCiAjZGVmaW5lIERSX1RSQVAxCSgweDIpCQkvKiBkYjEgKi8KICNkZWZpbmUgRFJfVFJBUDIJKDB4NCkJCS8qIGRiMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCmluZGV4IDc2MTI0OWUuLjBlMjIyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKQEAgLTExMSwxMSArMTExLDggQEAKIAogZXh0ZXJuIHU2NCBmaW5kX2U4MjBfYXJlYSh1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBzaXplLCB1NjQgYWxpZ24pOwogZXh0ZXJuIHU2NCBmaW5kX2U4MjBfYXJlYV9zaXplKHU2NCBzdGFydCwgdTY0ICpzaXplcCwgdTY0IGFsaWduKTsKLWV4dGVybiB2b2lkIHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpOwotZXh0ZXJuIHZvaWQgZWFybHlfcmVzX3RvX2Jvb3RtZW0odTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGV4dGVybiB1NjQgZWFybHlfcmVzZXJ2ZV9lODIwKHU2NCBzdGFydHQsIHU2NCBzaXpldCwgdTY0IGFsaWduKTsKKyNpbmNsdWRlIDxsaW51eC9lYXJseV9yZXMuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtX3Bmbih2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGU4MjBfZW5kX29mX2xvd19yYW1fcGZuKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKaW5kZXggNTMwMTg0Ni4uMjUxOWQwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCkBAIC0xMiwxMCArMTIsNiBAQAogCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQotI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDE0Zjk4OTAuLjYzNWYwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMTgsMTQgKzExOCwyMCBAQAogCSAqIDI1NiB0ZW1wb3JhcnkgYm9vdC10aW1lIG1hcHBpbmdzLCB1c2VkIGJ5IGVhcmx5X2lvcmVtYXAoKSwKIAkgKiBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCiAJICoKLQkgKiBXZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28gdGhhdCB3ZQotCSAqIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgorCSAqIElmIG5lY2Vzc2FyeSB3ZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28KKwkgKiB0aGF0IHdlIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgogCSAqLwogI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAogI2RlZmluZSBGSVhfQlRNQVBTX1NMT1RTCTQKLQlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDI1NiAtCi0JCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDI1NSksCi0JRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19TTE9UUyAtIDEsCisjZGVmaW5lIFRPVEFMX0ZJWF9CVE1BUFMJKE5SX0ZJWF9CVE1BUFMgKiBGSVhfQlRNQVBTX1NMT1RTKQorCUZJWF9CVE1BUF9FTkQgPQorCSAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyBeCisJICAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkgJgorCSAtUFRSU19QRVJfUFRFCisJID8gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLQorCSAgIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgKFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkKKwkgOiBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBUT1RBTF9GSVhfQlRNQVBTIC0gMSwKICNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAogCUZJWF9PSENJMTM5NF9CQVNFLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggMDE0YzJiODUuLmE3MjY2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTY2LDEwICs2Niw2IEBACiB2b2lkICprbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpOwogc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKTsKIAotI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKLSNkZWZpbmUga21hcF9hdG9taWNfcHRlKHBhZ2UsIHR5cGUpCWttYXBfYXRvbWljKHBhZ2UsIHR5cGUpCi0jZW5kaWYKLQogI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWRvIHsgfSB3aGlsZSAoMCkKIAogZXh0ZXJuIHZvaWQgYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCmluZGV4IGViZmI4YTkuLmRhMjkzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKQEAgLTMzLDggKzMzLDE2IEBACiBleHRlcm4gaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0ICopOwogCiBleHRlcm4gdXNlcl9yZWdzZXRfYWN0aXZlX2ZuIGZwcmVnc19hY3RpdmUsIHhmcHJlZ3NfYWN0aXZlOwotZXh0ZXJuIHVzZXJfcmVnc2V0X2dldF9mbiBmcHJlZ3NfZ2V0LCB4ZnByZWdzX2dldCwgZnByZWdzX3NvZnRfZ2V0OwotZXh0ZXJuIHVzZXJfcmVnc2V0X3NldF9mbiBmcHJlZ3Nfc2V0LCB4ZnByZWdzX3NldCwgZnByZWdzX3NvZnRfc2V0OworZXh0ZXJuIHVzZXJfcmVnc2V0X2dldF9mbiBmcHJlZ3NfZ2V0LCB4ZnByZWdzX2dldCwgZnByZWdzX3NvZnRfZ2V0LAorCQkJCXhzdGF0ZXJlZ3NfZ2V0OworZXh0ZXJuIHVzZXJfcmVnc2V0X3NldF9mbiBmcHJlZ3Nfc2V0LCB4ZnByZWdzX3NldCwgZnByZWdzX3NvZnRfc2V0LAorCQkJCSB4c3RhdGVyZWdzX3NldDsKKworLyoKKyAqIHhzdGF0ZXJlZ3NfYWN0aXZlID09IGZwcmVnc19hY3RpdmUuIFBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudAorICogYXQgdGhlIGRlZmluaXRpb24gb2YgZnByZWdzX2FjdGl2ZS4KKyAqLworI2RlZmluZSB4c3RhdGVyZWdzX2FjdGl2ZQlmcHJlZ3NfYWN0aXZlCiAKIGV4dGVybiBzdHJ1Y3QgX2ZweF9zd19ieXRlcyBmeF9zd19yZXNlcnZlZDsKICNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oCmluZGV4IDU4ZDcwOTEuLjdlYzY1YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaApAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBTTEFWRV9JQ1c0X0RFRkFVTFQJMHgwMQogI2RlZmluZSBQSUNfSUNXNF9BRU9JCQkyCiAKLWV4dGVybiBzcGlubG9ja190IGk4MjU5QV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjU5QV9sb2NrOwogCiBleHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSk7CiBleHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNzM3MzkzMi4uYTFkY2ZhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDggKzEsNDIgQEAKICNpZm5kZWYgX0FTTV9YODZfSU9fSAogI2RlZmluZSBfQVNNX1g4Nl9JT19ICiAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCisgKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0CisgKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICovCisKKy8qCisgKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCisgKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCisgKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6CisgKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCisgKgorICoJCUxpbnVzCisgKi8KKworIC8qCisgICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKKyAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCisgICoKKyAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKKyAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCisgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgICovCisKICNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwogCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzMsMTEgKzIwNywxMjYgQEAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpb18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaW9fNjQuaCIKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIHNpemVfdCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQoreworCW1lbWNweShkc3QsIChjb25zdCB2b2lkIF9fZm9yY2UgKilzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCit7CisJbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOworfQorCisvKgorICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bworICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKKyAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKKyAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCisgKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKKyAqLworI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKKworLyoKKyAqCUNhY2hlIG1hbmFnZW1lbnQKKyAqCisgKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCisgKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycworICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwogI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK2V4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKKworZXh0ZXJuIGludCBpb19kZWxheV90eXBlOworZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQoreworCW5hdGl2ZV9pb19kZWxheSgpOworI2lmZGVmIFJFQUxMWV9TTE9XX0lPCisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIJCQlcCisJCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiCQkJXAorCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCisJcmV0dXJuIHZhbHVlOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCisJCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30KKworQlVJTERJTyhiLCBiLCBjaGFyKQorQlVJTERJTyh3LCB3LCBzaG9ydCkKK0JVSUxESU8obCwgLCBpbnQpCiAKIGV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOTk5MDAuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fMzJfSAotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKLXsKLQltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKLXsKLQlfX21lbWNweSgodm9pZCBfX2ZvcmNlICopZHN0LCBzcmMsIGNvdW50KTsKLX0KLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLS8qCi0gKglDYWNoZSBtYW5hZ2VtZW50Ci0gKgotICoJVGhpcyBuZWVkZWQgZm9yIHR3byBjYXNlcwotICoJMS4gT3V0IG9mIG9yZGVyIGF3YXJlIHByb2Nlc3NvcnMKLSAqCTIuIEFjY2lkZW50YWxseSBvdXQgb2Ygb3JkZXIgcHJvY2Vzc29ycyAoUFBybyBlcnJhdGEgIzUxKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi1leHRlcm4gdm9pZCBuYXRpdmVfaW9fZGVsYXkodm9pZCk7Ci0KLWV4dGVybiBpbnQgaW9fZGVsYXlfdHlwZTsKLWV4dGVybiB2b2lkIGlvX2RlbGF5X2luaXQodm9pZCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKLXsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNpZmRlZiBSRUFMTFlfU0xPV19JTwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jZGVmaW5lIF9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJXAotfQkJCQkJCQkJXAotCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQlcCi0JcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsJCQkJXAotfQotCi0jZGVmaW5lIEJVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJXAotCQkgICAgIDogOiAiYSIodmFsdWUpLCAiTmQiKHBvcnQpKTsJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCVwKLQkJICAgICA6ICI9YSIodmFsdWUpIDogIk5kIihwb3J0KSk7CQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7CQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLV9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCQlcCi17CQkJCQkJCQkJXAotCW91dCMjYndsKHZhbHVlLCBwb3J0KTsJCQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsJCQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgb3V0cyIgI2J3bAkJCQkJXAotCQkgICAgIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgaW5zIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK0QiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19Ci0KLUJVSUxESU8oYiwgYiwgY2hhcikKLUJVSUxESU8odywgdywgc2hvcnQpCi1CVUlMRElPKGwsICwgaW50KQotCi0jZW5kaWYgLyogX0FTTV9YODZfSU9fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDA2NzguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fNjRfSAotCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucwotICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQotICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKLSAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCi0gKgotICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCi0gKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0Ci0gKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKLSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKLSAqIG1pc3Rha2Ugc29tZXdoZXJlLgotICovCi0KLS8qCi0gKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCi0gKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCi0gKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6Ci0gKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCi0gKgotICoJCUxpbnVzCi0gKi8KLQotIC8qCi0gICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKLSAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCi0gICoKLSAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKLSAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCi0gICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0gICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKgotICogVGFsayBhYm91dCBtaXN1c2luZyBtYWNyb3MuLgotICovCi0jZGVmaW5lIF9fT1VUMShzLCB4KQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNzKHVuc2lnbmVkIHggdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsKLQotI2RlZmluZSBfX09VVDIocywgczEsIHMyKQkJCQlcCi1hc20gdm9sYXRpbGUgKCJvdXQiICNzICIgJSIgczEgIjAsJSIgczIgIjEiCi0KLSNpZm5kZWYgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fT1VUKHMsIHMxLCB4KQkJCQkJCQlcCi0JX19PVVQxKHMsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsJXAotCX0JCQkJCQkJCVwKLQlfX09VVDEocyMjX3AsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgX19JTjEocykJCQkJCQkJXAotc3RhdGljIGlubGluZSBSRVRVUk5fVFlQRSBpbiMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JUkVUVVJOX1RZUEUgX3Y7Ci0KLSNkZWZpbmUgX19JTjIocywgczEsIHMyKQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJpbiIgI3MgIiAlIiBzMiAiMSwlIiBzMSAiMCIKLQotI2RlZmluZSBfX0lOKHMsIHMxLCBpLi4uKQkJCQkJCVwKLQlfX0lOMShzKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0JcmV0dXJuIF92OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCV9fSU4xKHMjI19wKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gX3Y7IH0KLQotI2lmZGVmIFVOU0VUX1JFQUxMWV9TTE9XX0lPCi0jdW5kZWYgUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fSU5TKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqYWRkciwJCVwKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBpbnMiICNzCQkJCQlcCi0JCSAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KQkJCVwKLQkJICAgICAgOiAiZCIgKHBvcnQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KSk7CQlcCi19Ci0KLSNkZWZpbmUgX19PVVRTKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsCVwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgicmVwIDsgb3V0cyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBjaGFyCi1fX0lOKGIsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIHNob3J0Ci1fX0lOKHcsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGludAotX19JTihsLCAiIikKLSN1bmRlZiBSRVRVUk5fVFlQRQotCi1fX09VVChiLCAiYiIsIGNoYXIpCi1fX09VVCh3LCAidyIsIHNob3J0KQotX19PVVQobCwgLCBpbnQpCi0KLV9fSU5TKGIpCi1fX0lOUyh3KQotX19JTlMobCkKLQotX19PVVRTKGIpCi1fX09VVFModykKLV9fT1VUUyhsKQotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X0lPXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCA3YzdjMTZjLi41ZjYxZjZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNjAsNiArMTYwLDcgQEAKIHN0cnVjdCBpb19hcGljX2lycV9hdHRyOwogZXh0ZXJuIGludCBpb19hcGljX3NldF9wY2lfcm91dGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpcnEsCiAJCSBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqaXJxX2F0dHIpOwordm9pZCBzZXR1cF9JT19BUElDX2lycV9leHRyYSh1MzIgZ3NpKTsKIGV4dGVybiBpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDU0NTgzODAuLjI2MjI5MjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCkBAIC00OCw1ICs0OCw2IEBACiBleHRlcm4gaW50IHZlY3Rvcl91c2VkX2J5X3BlcmNwdV9pcnEodW5zaWduZWQgaW50IHZlY3Rvcik7CiAKIGV4dGVybiB2b2lkIGluaXRfSVNBX2lycXModm9pZCk7CitleHRlcm4gaW50IG5yX2xlZ2FjeV9pcnFzOwogCiAjZW5kaWYgLyogX0FTTV9YODZfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDQ2MTFmMDguLjg3NjdkOTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMjgsMjggKzI4LDMzIEBACiAjZGVmaW5lIE1DRV9WRUNUT1IJCQkweDEyCiAKIC8qCi0gKiBJRFQgdmVjdG9ycyB1c2FibGUgZm9yIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIHN0YXJ0Ci0gKiBhdCAweDIwOgorICogSURUIHZlY3RvcnMgdXNhYmxlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBzdGFydCBhdCAweDIwLgorICogKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yLCAweDMwLTB4M2YgYXJlIGZvciBJU0EpCiAgKi8KICNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCQkweDIwCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJCTB4ODAKLSMgZGVmaW5lIElBMzJfU1lTQ0FMTF9WRUNUT1IJCTB4ODAKLSNlbHNlCi0jIGRlZmluZSBJQTMyX1NZU0NBTExfVkVDVE9SCQkweDgwCi0jZW5kaWYKKy8qCisgKiBXZSBzdGFydCBhbGxvY2F0aW5nIGF0IDB4MjEgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuCisgKiBwcmlvcml0eSBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKKyAqLworI2RlZmluZSBWRUNUT1JfT0ZGU0VUX1NUQVJUCQkxCiAKIC8qCi0gKiBSZXNlcnZlIHRoZSBsb3dlc3QgdXNhYmxlIHByaW9yaXR5IGxldmVsIDB4MjAgLSAweDJmIGZvciB0cmlnZ2VyaW5nCi0gKiBjbGVhbnVwIGFmdGVyIGlycSBtaWdyYXRpb24uCisgKiBSZXNlcnZlIHRoZSBsb3dlc3QgdXNhYmxlIHZlY3RvciAoYW5kIGhlbmNlIGxvd2VzdCBwcmlvcml0eSkgIDB4MjAgZm9yCisgKiB0cmlnZ2VyaW5nIGNsZWFudXAgYWZ0ZXIgaXJxIG1pZ3JhdGlvbi4gMHgyMS0weDJmIHdpbGwgc3RpbGwgYmUgdXNlZAorICogZm9yIGRldmljZSBpbnRlcnJ1cHRzLgogICovCiAjZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCQlGSVJTVF9FWFRFUk5BTF9WRUNUT1IKIAorI2RlZmluZSBJQTMyX1NZU0NBTExfVkVDVE9SCQkweDgwCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgU1lTQ0FMTF9WRUNUT1IJCQkweDgwCisjZW5kaWYKKwogLyoKICAqIFZlY3RvcnMgMHgzMC0weDNmIGFyZSB1c2VkIGZvciBJU0EgaW50ZXJydXB0cy4KKyAqICAgcm91bmQgdXAgdG8gdGhlIG5leHQgMTYtdmVjdG9yIGJvdW5kYXJ5CiAgKi8KLSNkZWZpbmUgSVJRMF9WRUNUT1IJCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMHgxMCkKKyNkZWZpbmUgSVJRMF9WRUNUT1IJCQkoKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIDE2KSAmIH4xNSkKIAogI2RlZmluZSBJUlExX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICAxKQogI2RlZmluZSBJUlEyX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICAyKQpAQCAtMTIwLDEzICsxMjUsNiBAQAogICovCiAjZGVmaW5lIE1DRV9TRUxGX1ZFQ1RPUgkJCTB4ZWIKIAotLyoKLSAqIEZpcnN0IEFQSUMgdmVjdG9yIGF2YWlsYWJsZSB0byBkcml2ZXJzOiAodmVjdG9ycyAweDMwLTB4ZWUpIHdlCi0gKiBzdGFydCBhdCAweDMxKDB4NDEpIHRvIHNwcmVhZCBvdXQgdmVjdG9ycyBldmVubHkgYmV0d2VlbiBwcmlvcml0eQotICogbGV2ZWxzLiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IpCi0gKi8KLSNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkJKElSUTE1X1ZFQ1RPUiArIDIpCi0KICNkZWZpbmUgTlJfVkVDVE9SUwkJCSAyNTYKIAogI2RlZmluZSBGUFVfSVJRCQkJCSAgMTMKQEAgLTE1NCwyMSArMTUyLDIxIEBACiAKICNkZWZpbmUgTlJfSVJRU19MRUdBQ1kJCQkgIDE2CiAKLSNkZWZpbmUgQ1BVX1ZFQ1RPUl9MSU1JVAkJKCAgOCAqIE5SX0NQVVMgICAgICApCiAjZGVmaW5lIElPX0FQSUNfVkVDVE9SX0xJTUlUCQkoIDMyICogTUFYX0lPX0FQSUNTICkKIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogIyBpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorIyAgZGVmaW5lIENQVV9WRUNUT1JfTElNSVQJCSg2NCAqIE5SX0NQVVMpCiAjICBkZWZpbmUgTlJfSVJRUwkJCQkJXAogCShDUFVfVkVDVE9SX0xJTUlUID4gSU9fQVBJQ19WRUNUT1JfTElNSVQgPwlcCiAJCShOUl9WRUNUT1JTICsgQ1BVX1ZFQ1RPUl9MSU1JVCkgIDoJXAogCQkoTlJfVkVDVE9SUyArIElPX0FQSUNfVkVDVE9SX0xJTUlUKSkKICMgZWxzZQotIyAgaWYgTlJfQ1BVUyA8IE1BWF9JT19BUElDUwotIyAgIGRlZmluZSBOUl9JUlFTIAkJCShOUl9WRUNUT1JTICsgNCpDUFVfVkVDVE9SX0xJTUlUKQotIyAgZWxzZQotIyAgIGRlZmluZSBOUl9JUlFTCQkJKE5SX1ZFQ1RPUlMgKyBJT19BUElDX1ZFQ1RPUl9MSU1JVCkKLSMgIGVuZGlmCisjICBkZWZpbmUgQ1BVX1ZFQ1RPUl9MSU1JVAkJKDMyICogTlJfQ1BVUykKKyMgIGRlZmluZSBOUl9JUlFTCQkJCQlcCisJKENQVV9WRUNUT1JfTElNSVQgPCBJT19BUElDX1ZFQ1RPUl9MSU1JVCA/CVwKKwkJKE5SX1ZFQ1RPUlMgKyBDUFVfVkVDVE9SX0xJTUlUKSAgOglcCisJCShOUl9WRUNUT1JTICsgSU9fQVBJQ19WRUNUT1JfTElNSVQpKQogIyBlbmRpZgogI2Vsc2UgLyogIUNPTkZJR19YODZfSU9fQVBJQzogKi8KICMgZGVmaW5lIE5SX0lSUVMJCQlOUl9JUlFTX0xFR0FDWQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsLmgKaW5kZXggNDdiOWI2Zi4uMmU5OTcyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sb2NhbC5oCkBAIC0xOTUsNDEgKzE5NSw0IEBACiAjZGVmaW5lIF9fbG9jYWxfYWRkKGksIGwpCWxvY2FsX2FkZCgoaSksIChsKSkKICNkZWZpbmUgX19sb2NhbF9zdWIoaSwgbCkJbG9jYWxfc3ViKChpKSwgKGwpKQogCi0vKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKLSAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQotICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCi0gKgotICogWDg2XzY0OiBUaGlzIGNvdWxkIGJlIGRvbmUgYmV0dGVyIGlmIHdlIG1vdmVkIHRoZSBwZXIgY3B1IGRhdGEgZGlyZWN0bHkKLSAqIGFmdGVyIEdTLgotICovCi0KLS8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAotICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gYXRvbWljIHdheS4gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXBfdihsKQkJXAotKHsJCQkJCVwKLQlsb2NhbF90IHJlc19fOwkJCVwKLQlwcmVlbXB0X2Rpc2FibGUoKTsgCQlcCi0JcmVzX18gPSAobCk7CQkJXAotCXByZWVtcHRfZW5hYmxlKCk7CQlcCi0JcmVzX187CQkJCVwKLX0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCi0oewkJCQkJXAotCXByZWVtcHRfZGlzYWJsZSgpOwkJXAotCShsKTsJCQkJXAotCXByZWVtcHRfZW5hYmxlKCk7CQlcCi19KQkJCQkJXAotCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcigobCkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKChsKSksIChpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkgICAgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2luYygmX19nZXRfY3B1X3ZhcigobCkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKChsKSkpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcigobCkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIoKGwpKSkpCi0KLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMoKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYygobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQljcHVfbG9jYWxfYWRkKChpKSwgKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJY3B1X2xvY2FsX3N1YigoaSksIChsKSkKLQogI2VuZGlmIC8qIF9BU01fWDg2X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKaW5kZXggYTI5ZjQ4Yy4uMjg4Yjk2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKQEAgLTM5LDExICszOSw1IEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkgICAgICAgKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiArCVwKIAkJCQkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKLQotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCi0jZW5kaWYKLQogI2VuZGlmCiAjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggMTM5ZDRjMS4uOTNkYTljMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTE5LDcgKzE5LDYgQEAKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IGM0YWU4MjIuLjgyM2UwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTM2LDYgKzM2LDExIEBACiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTY0IDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQorI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NwdV90b19ub2RlKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCmluZGV4IDlmMGE1ZjUuLjEzMzcwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKIAorI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisjZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKKwogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggNjQyZmUzNC4uYTY2N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtNDAsNyArNDAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCBkZDU5YTg1Li41NjUzZjQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTQzNSwxNSArNDM1LDYgQEAKIAlQVk9QX1ZDQUxMMShwdl9tbXVfb3BzLnJlbGVhc2VfcHVkLCBwZm4pOwogfQogCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQlyZXQgPSBQVk9QX0NBTEwyKHVuc2lnbmVkIGxvbmcsIHB2X21tdV9vcHMua21hcF9hdG9taWNfcHRlLCBwYWdlLCB0eXBlKTsKLQlyZXR1cm4gKHZvaWQgKilyZXQ7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIHB0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHB0ZV90ICpwdGVwKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggYjFlNzBkNS4uZGI5ZWY1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC0zMDQsMTAgKzMwNCw2IEBACiAjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCiAjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXZvaWQgKigqa21hcF9hdG9taWNfcHRlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotI2VuZGlmCi0KIAlzdHJ1Y3QgcHZfbGF6eV9vcHMgbGF6eV9tb2RlOwogCiAJLyogZG9tMCBvcHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYWRhOGMyMC4uYjRhMDBkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTEyNCw2ICsxMjQsOCBAQAogI2luY2x1ZGUgInBjaV82NC5oIgogI2VuZGlmCiAKK3ZvaWQgZG1hMzJfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOworCiAvKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCmluZGV4IGFlNWU0MGYuLmZlMTVjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0yMiw4ICsyMiw2IEBACiBleHRlcm4gaW50ICgqcGNpX2NvbmZpZ193cml0ZSkoaW50IHNlZywgaW50IGJ1cywgaW50IGRldiwgaW50IGZuLAogCQkJICAgICAgIGludCByZWcsIGludCBsZW4sIHUzMiB2YWx1ZSk7CiAKLWV4dGVybiB2b2lkIGRtYTMyX3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BDSV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggYjRiZjlhOS4uMDViNThjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBQQ0lfQ0hFQ0tfRU5BQkxFX0FNRF9NTUNPTkYJMHgyMDAwMAogI2RlZmluZSBQQ0lfSEFTX0lPX0VDUwkJMHg0MDAwMAogI2RlZmluZSBQQ0lfTk9BU1NJR05fUk9NUwkweDgwMDAwCisjZGVmaW5lIFBDSV9ST09UX05PX0NSUwkJMHgxMDAwMDAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfcHJvYmU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaXJxX3RhYmxlX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDBjNDQxOTZiLi42NmEyNzJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMjUsMTkgKzI1LDE4IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCQkJXAotCV9fcGVyY3B1X21vdl9vcCAlX19wZXJjcHVfc2VnOnBlcl9jcHVfX3RoaXNfY3B1X29mZiwgcmVnOwlcCi0JbGVhIHBlcl9jcHVfXyMjdmFyKHJlZyksIHJlZwotI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCSVfX3BlcmNwdV9zZWc6cGVyX2NwdV9fIyN2YXIKKwlfX3BlcmNwdV9tb3Zfb3AgJV9fcGVyY3B1X3NlZzp0aGlzX2NwdV9vZmYsIHJlZzsJCVwKKwlsZWEgdmFyKHJlZyksIHJlZworI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCSVfX3BlcmNwdV9zZWc6dmFyCiAjZWxzZSAvKiAhIFNNUCAqLwotI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCQkJCVwKLQlfX3BlcmNwdV9tb3Zfb3AgJHBlcl9jcHVfXyMjdmFyLCByZWcKLSNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQlwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQlfX3BlcmNwdV9tb3Zfb3AgJHZhciwgcmVnCisjZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJdmFyCiAjZW5kaWYJLyogU01QICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0X1NNUAogI2RlZmluZSBJTklUX1BFUl9DUFVfVkFSKHZhcikgIGluaXRfcGVyX2NwdV9fIyN2YXIKICNlbHNlCi0jZGVmaW5lIElOSVRfUEVSX0NQVV9WQVIodmFyKSAgcGVyX2NwdV9fIyN2YXIKKyNkZWZpbmUgSU5JVF9QRVJfQ1BVX1ZBUih2YXIpICB2YXIKICNlbmRpZgogCiAjZWxzZSAvKiAuLi4hQVNTRU1CTFkgKi8KQEAgLTYwLDEyICs1OSwxMiBAQAogICogVGhlcmUgYWxzbyBtdXN0IGJlIGFuIGVudHJ5IGluIHZtbGludXhfNjQubGRzLlMKICAqLwogI2RlZmluZSBERUNMQVJFX0lOSVRfUEVSX0NQVSh2YXIpIFwKLSAgICAgICBleHRlcm4gdHlwZW9mKHBlcl9jcHVfdmFyKHZhcikpIGluaXRfcGVyX2NwdV92YXIodmFyKQorICAgICAgIGV4dGVybiB0eXBlb2YodmFyKSBpbml0X3Blcl9jcHVfdmFyKHZhcikKIAogI2lmZGVmIENPTkZJR19YODZfNjRfU01QCiAjZGVmaW5lIGluaXRfcGVyX2NwdV92YXIodmFyKSAgaW5pdF9wZXJfY3B1X18jI3ZhcgogI2Vsc2UKLSNkZWZpbmUgaW5pdF9wZXJfY3B1X3Zhcih2YXIpICBwZXJfY3B1X3Zhcih2YXIpCisjZGVmaW5lIGluaXRfcGVyX2NwdV92YXIodmFyKSAgdmFyCiAjZW5kaWYKIAogLyogRm9yIGFyY2gtc3BlY2lmaWMgY29kZSwgd2UgY2FuIHVzZSBkaXJlY3Qgc2luZ2xlLWluc24gb3BzICh0aGV5CkBAIC0xMDQsNiArMTAzLDY0IEBACiAJfQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKKy8qCisgKiBHZW5lcmF0ZSBhIHBlcmNwdSBhZGQgdG8gbWVtb3J5IGluc3RydWN0aW9uIGFuZCBvcHRpbWl6ZSBjb2RlCisgKiBpZiBhIG9uZSBpcyBhZGRlZCBvciBzdWJ0cmFjdGVkLgorICovCisjZGVmaW5lIHBlcmNwdV9hZGRfb3AodmFyLCB2YWwpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl0eXBlZGVmIHR5cGVvZih2YXIpIHBhb19UX187CQkJCQlcCisJY29uc3QgaW50IHBhb19JRF9fID0gKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYJCVwKKwkJCSAgICAgICgodmFsKSA9PSAxIHx8ICh2YWwpID09IC0xKSkgPyAodmFsKSA6IDA7CVwKKwlpZiAoMCkgewkJCQkJCQlcCisJCXBhb19UX18gcGFvX3RtcF9fOwkJCQkJXAorCQlwYW9fdG1wX18gPSAodmFsKTsJCQkJCVwKKwl9CQkJCQkJCQlcCisJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCWlmIChwYW9fSURfXyA9PSAxKQkJCQkJXAorCQkJYXNtKCJpbmNiICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlIGlmIChwYW9fSURfXyA9PSAtMSkJCQkJXAorCQkJYXNtKCJkZWNiICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCWFzbSgiYWRkYiAlMSwgIl9fcGVyY3B1X2FyZygwKQkJCVwKKwkJCSAgICA6ICIrbSIgKHZhcikJCQkJXAorCQkJICAgIDogInFpIiAoKHBhb19UX18pKHZhbCkpKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlpZiAocGFvX0lEX18gPT0gMSkJCQkJCVwKKwkJCWFzbSgiaW5jdyAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZSBpZiAocGFvX0lEX18gPT0gLTEpCQkJCVwKKwkJCWFzbSgiZGVjdyAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlhc20oImFkZHcgJTEsICJfX3BlcmNwdV9hcmcoMCkJCQlcCisJCQkgICAgOiAiK20iICh2YXIpCQkJCVwKKwkJCSAgICA6ICJyaSIgKChwYW9fVF9fKSh2YWwpKSk7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJaWYgKHBhb19JRF9fID09IDEpCQkJCQlcCisJCQlhc20oImluY2wgIl9fcGVyY3B1X2FyZygwKSA6ICIrbSIgKHZhcikpOwlcCisJCWVsc2UgaWYgKHBhb19JRF9fID09IC0xKQkJCQlcCisJCQlhc20oImRlY2wgIl9fcGVyY3B1X2FyZygwKSA6ICIrbSIgKHZhcikpOwlcCisJCWVsc2UJCQkJCQkJXAorCQkJYXNtKCJhZGRsICUxLCAiX19wZXJjcHVfYXJnKDApCQkJXAorCQkJICAgIDogIittIiAodmFyKQkJCQlcCisJCQkgICAgOiAicmkiICgocGFvX1RfXykodmFsKSkpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCWlmIChwYW9fSURfXyA9PSAxKQkJCQkJXAorCQkJYXNtKCJpbmNxICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlIGlmIChwYW9fSURfXyA9PSAtMSkJCQkJXAorCQkJYXNtKCJkZWNxICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCWFzbSgiYWRkcSAlMSwgIl9fcGVyY3B1X2FyZygwKQkJCVwKKwkJCSAgICA6ICIrbSIgKHZhcikJCQkJXAorCQkJICAgIDogInJlIiAoKHBhb19UX18pKHZhbCkpKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCiAoewkJCQkJCQlcCiAJdHlwZW9mKHZhcikgcGZvX3JldF9fOwkJCQlcCkBAIC0xNDIsMTYgKzE5OSwxNCBAQAogICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKICAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCiAgKi8KLSNkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKLQkJCQkJICAgICAgICJtIiAocGVyX2NwdV9fIyN2YXIpKQotI2RlZmluZSBwZXJjcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKLQkJCQkJICAgICAgICJwIiAoJnBlcl9jcHVfXyMjdmFyKSkKLSNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHBlcmNwdV9hZGQodmFyLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKLSNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSBwZXJjcHVfYW5kKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHBlcmNwdV9vcih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHZhciwgIm0iICh2YXIpKQorI2RlZmluZSBwZXJjcHVfcmVhZF9zdGFibGUodmFyKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHZhciwgInAiICgmKHZhcikpKQorI2RlZmluZSBwZXJjcHVfd3JpdGUodmFyLCB2YWwpCQlwZXJjcHVfdG9fb3AoIm1vdiIsIHZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfYWRkKHZhciwgdmFsKQkJcGVyY3B1X2FkZF9vcCh2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJCXBlcmNwdV9hZGRfb3AodmFyLCAtKHZhbCkpCisjZGVmaW5lIHBlcmNwdV9hbmQodmFyLCB2YWwpCQlwZXJjcHVfdG9fb3AoImFuZCIsIHZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfb3IodmFyLCB2YWwpCQlwZXJjcHVfdG9fb3AoIm9yIiwgdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCQlwZXJjcHVfdG9fb3AoInhvciIsIHZhciwgdmFsKQogCiAjZGVmaW5lIF9fdGhpc19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCiAjZGVmaW5lIF9fdGhpc19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCkBAIC0xNjAsOSArMjE1LDkgQEAKICNkZWZpbmUgX190aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X3dyaXRlXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgX190aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQotI2RlZmluZSBfX3RoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIF9fdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgX190aGlzX2NwdV9hbmRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKQEAgLTE3OSw5ICsyMzQsOSBAQAogI2RlZmluZSB0aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQotI2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQotI2RlZmluZSB0aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQotI2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9hbmRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9hbmRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQpAQCAtMTkyLDkgKzI0Nyw5IEBACiAjZGVmaW5lIHRoaXNfY3B1X3hvcl8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X3hvcl80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCiAKLSNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzIocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfYW5kXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfYW5kXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfYW5kXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKQEAgLTIxMiwxOSArMjY3LDE5IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfOChwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQogI2RlZmluZSBfX3RoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgX190aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgX190aGlzX2NwdV9vcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgX190aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogCiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQogI2RlZmluZSB0aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpCQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKIAotI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV9vcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKQEAgLTIzNiw3ICsyOTEsNyBAQAogKHsJCQkJCQkJCQlcCiAJaW50IG9sZF9fOwkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlKCJidHIgJTIsIl9fcGVyY3B1X2FyZygxKSJcblx0c2JibCAlMCwlMCIJCVwKLQkJICAgICA6ICI9ciIgKG9sZF9fKSwgIittIiAocGVyX2NwdV9fIyN2YXIpCQlcCisJCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKHZhcikJCQkJXAogCQkgICAgIDogImRJciIgKGJpdCkpOwkJCQkJXAogCW9sZF9fOwkJCQkJCQkJXAogfSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCAxMzgwMzY3Li5iZWZkMTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0yNyw3ICsyNywxNCBAQAogLyoKICAqIEluY2x1ZGVzIGV2ZW50c2VsIGFuZCB1bml0IG1hc2sgYXMgd2VsbDoKICAqLwotI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSwkJCQkgICAgMHhmZmZmCisKKworI2RlZmluZSBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLCQkweDAwMDAwMEZGVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKKyNkZWZpbmUgSU5URUxfQVJDSF9DTlRfTUFTSwkJMHhGRjAwMDAwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0VWRU5UX01BU0sJKElOVEVMX0FSQ0hfVU5JVF9NQVNLfElOVEVMX0FSQ0hfRVZUU0VMX01BU0spCiAKIC8qCiAgKiBmaWx0ZXIgbWFzayB0byB2YWxpZGF0ZSBmaXhlZCBjb3VudGVyIGV2ZW50cy4KQEAgLTM4LDcgKzQ1LDEyIEBACiAgKiAgVGhlIG90aGVyIGZpbHRlcnMgYXJlIHN1cHBvcnRlZCBieSBmaXhlZCBjb3VudGVycy4KICAqICBUaGUgYW55LXRocmVhZCBvcHRpb24gaXMgc3VwcG9ydGVkIHN0YXJ0aW5nIHdpdGggdjMuCiAgKi8KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UX0ZJTFRFUl9NQVNLCQkJMHhmZjg0MDAwMAorI2RlZmluZSBJTlRFTF9BUkNIX0ZJWEVEX01BU0sgXAorCShJTlRFTF9BUkNIX0NOVF9NQVNLfCBcCisJIElOVEVMX0FSQ0hfSU5WX01BU0t8IFwKKwkgSU5URUxfQVJDSF9FREdFX01BU0t8XAorCSBJTlRFTF9BUkNIX1VOSVRfTUFTS3xcCisJIElOVEVMX0FSQ0hfRVZUU0VMX01BU0spCiAKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1NFTAkJICAgICAgMHgzYwogI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sJCSgweDAwIDw8IDgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggMGU4YzJhMC4uMjcxZGU5NGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTIzLDYgKzIzLDExIEBACiAjZW5kaWYKIAogLyoKKyAqIEZsYWdzIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgYSB1c2VyIHBhZ2UgdGFibGUgcGFnZS4KKyAqLworZXh0ZXJuIGdmcF90IF9fdXNlcnB0ZV9hbGxvY19nZnA7CisKKy8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwogZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCAwMWZkOTQ2Li40NzMzOWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC01NCwxMCArNTQsMTAgQEAKIAkgaW5faXJxKCkgPyBLTV9JUlFfUFRFIDoJXAogCSBLTV9QVEUwKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCQkJCQlcCi0JKChwdGVfdCAqKWttYXBfYXRvbWljX3B0ZShwbWRfcGFnZSgqKGRpcikpLCBfX0tNX1BURSkgKwkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pYyhwbWRfcGFnZSgqKGRpcikpLCBfX0tNX1BURSkgKwkJXAogCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKICNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykJCQkJXAotCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMSkgKwkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pYyhwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUxKSArCQlcCiAJIHB0ZV9pbmRleCgoYWRkcmVzcykpKQogI2RlZmluZSBwdGVfdW5tYXAocHRlKSBrdW5tYXBfYXRvbWljKChwdGUpLCBfX0tNX1BURSkKICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGt1bm1hcF9hdG9taWMoKHB0ZSksIEtNX1BURTEpCkBAIC04MCw3ICs4MCw3IEBACiAgKiBUaGUgaTM4NiBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKICAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApIGRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IGM1N2EzMDEuLjE4MWJlNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTEyOSw3ICsxMjksNyBAQAogI2RlZmluZSBwdGVfdW5tYXAocHRlKSAvKiBOT1AgKi8KICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIC8qIE5PUCAqLwogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApIGRvIHsgfSB3aGlsZSAoMCkKIAogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwogI2lmIF9QQUdFX0JJVF9GSUxFIDwgX1BBR0VfQklUX1BST1ROT05FCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaAppbmRleCA0MDA5ZjY1Li42ZjQxNGVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm90by5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKQEAgLTIzLDE0ICsyMyw0IEBACiAKIGxvbmcgZG9fYXJjaF9wcmN0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCi0vKgotICogVGhpcyBsb29rcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBzaG91bGQgYmUuIEJ1dCB3ZSBuZWVkIHRvCi0gKiBnZXQgdGhlIHR5cGUgZm9yIHRoZSB+IHJpZ2h0IGluIHJvdW5kX2Rvd24gKGl0IG5lZWRzIHRvIGJlCi0gKiBhcyB3aWRlIGFzIHRoZSByZXN1bHQhKSwgYW5kIHdlIHdhbnQgdG8gZXZhbHVhdGUgdGhlIG1hY3JvCi0gKiBhcmd1bWVudHMganVzdCBvbmNlIGVhY2guCi0gKi8KLSNkZWZpbmUgX19yb3VuZF9tYXNrKHgseSkgKChfX3R5cGVvZl9fKHgpKSgoeSktMSkpCi0jZGVmaW5lIHJvdW5kX3VwKHgseSkgKCgoKHgpLTEpIHwgX19yb3VuZF9tYXNrKHgseSkpKzEpCi0jZGVmaW5lIHJvdW5kX2Rvd24oeCx5KSAoKHgpICYgfl9fcm91bmRfbWFzayh4LHkpKQotCiAjZW5kaWYgLyogX0FTTV9YODZfUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA5ZDM2OWY2Li4yMDEwMjgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjc0LDEwICsyNzQsNiBAQAogCQlyZXR1cm4gMDsKIH0KIAotLyogR2V0IE50aCBhcmd1bWVudCBhdCBmdW5jdGlvbiBjYWxsICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyByZWdzX2dldF9hcmd1bWVudF9udGgoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJCSAgIHVuc2lnbmVkIGludCBuKTsKLQogLyoKICAqIFRoZXNlIGFyZSBkZWZpbmVkIGFzIHBlciBsaW51eC9wdHJhY2UuaCwgd2hpY2ggc2VlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCBjYTc1MTdkLi42MDZlZGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCiBzdHJ1Y3QgcndzZW1fd2FpdGVyOwogCkBAIC01NSwxNyArNTYsMjggQEAKIAogLyoKICAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgorICoKKyAqIFRoZSBiaWFzIHZhbHVlcyBhbmQgdGhlIGNvdW50ZXIgdHlwZSBsaW1pdHMgdGhlIG51bWJlciBvZgorICogcG90ZW50aWFsIHJlYWRlcnMvd3JpdGVycyB0byAzMjc2NyBmb3IgMzIgYml0cyBhbmQgMjE0NzQ4MzY0NworICogZm9yIDY0IGJpdHMuCiAgKi8KIAotI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMAotI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMQotI2RlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZgotI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtMHgwMDAxMDAwMCkKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjIGRlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHhmZmZmZmZmZkwKKyNlbHNlCisjIGRlZmluZSBSV1NFTV9BQ1RJVkVfTUFTSwkJMHgwMDAwZmZmZkwKKyNlbmRpZgorCisjZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwTAorI2RlZmluZSBSV1NFTV9BQ1RJVkVfQklBUwkJMHgwMDAwMDAwMUwKKyNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLVJXU0VNX0FDVElWRV9NQVNLLTEpCiAjZGVmaW5lIFJXU0VNX0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCiAjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCiAKK3R5cGVkZWYgc2lnbmVkIGxvbmcgcndzZW1fY291bnRfdDsKKwogc3RydWN0IHJ3X3NlbWFwaG9yZSB7Ci0Jc2lnbmVkIGxvbmcJCWNvdW50OworCXJ3c2VtX2NvdW50X3QJCWNvdW50OwogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwpAQCAtMTA1LDcgKzExNyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBpbmNsICAgICAgKCUlZWF4KVxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggX0FTTV9JTkMgIiglMSlcblx0IgogCQkgICAgIC8qIGFkZHMgMHgwMDAwMDAwMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkXG4iCkBAIC0xMjEsMTQgKzEzMywxNCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlfX3MzMiByZXN1bHQsIHRtcDsKKwlyd3NlbV9jb3VudF90IHJlc3VsdCwgdG1wOwogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCi0JCSAgICAgIiAgbW92bCAgICAgICUwLCUxXG5cdCIKKwkJICAgICAiICBtb3YgICAgICAgICAgJTAsJTFcblx0IgogCQkgICAgICIxOlxuXHQiCi0JCSAgICAgIiAgbW92bAkgICAgICUxLCUyXG5cdCIKLQkJICAgICAiICBhZGRsICAgICAgJTMsJTJcblx0IgorCQkgICAgICIgIG1vdiAgICAgICAgICAlMSwlMlxuXHQiCisJCSAgICAgIiAgYWRkICAgICAgICAgICUzLCUyXG5cdCIKIAkJICAgICAiICBqbGUJICAgICAyZlxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgY21weGNoZ2wgICUyLCUwXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICBjbXB4Y2hnICAlMiwlMFxuXHQiCiAJCSAgICAgIiAgam56CSAgICAgMWJcblx0IgogCQkgICAgICIyOlxuXHQiCiAJCSAgICAgIiMgZW5kaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgpAQCAtMTQzLDEzICsxNTUsMTMgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCiB7Ci0JaW50IHRtcDsKKwlyd3NlbV9jb3VudF90IHRtcDsKIAogCXRtcCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOwogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgZG93bl93cml0ZVxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiBzdWJ0cmFjdCAweDAwMDBmZmZmLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KLQkJICAgICAiICB0ZXN0bCAgICAgJSVlZHgsJSVlZHhcblx0IgorCQkgICAgICIgIHRlc3QgICAgICAlMSwlMVxuXHQiCiAJCSAgICAgLyogd2FzIHRoZSBjb3VudCAwIGJlZm9yZT8gKi8KIAkJICAgICAiICBqeiAgICAgICAgMWZcbiIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWRcbiIKQEAgLTE3MCw5ICsxODIsOSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0Jc2lnbmVkIGxvbmcgcmV0ID0gY21weGNoZygmc2VtLT5jb3VudCwKLQkJCQkgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAotCQkJCSAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOworCXJ3c2VtX2NvdW50X3QgcmV0ID0gY21weGNoZygmc2VtLT5jb3VudCwKKwkJCQkgICAgUldTRU1fVU5MT0NLRURfVkFMVUUsCisJCQkJICAgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKIAlpZiAocmV0ID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKQEAgLTE4Myw5ICsxOTUsOSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlfX3MzMiB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKKwlyd3NlbV9jb3VudF90IHRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOwogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUxLCglMilcblx0IgogCQkgICAgIC8qIHN1YnRyYWN0cyAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KIAkJICAgICAiICBqbnMgICAgICAgIDFmXG5cdCIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIgpAQCAtMjAxLDE4ICsyMTMsMTggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogeworCXJ3c2VtX2NvdW50X3QgdG1wOwogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX191cF93cml0ZVxuXHQiCi0JCSAgICAgIiAgbW92bCAgICAgICUyLCUlZWR4XG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkbCAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUxLCglMilcblx0IgogCQkgICAgIC8qIHRyaWVzIHRvIHRyYW5zaXRpb24KIAkJCTB4ZmZmZjAwMDEgLT4gMHgwMDAwMDAwMCAqLwogCQkgICAgICIgIGp6ICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKIAkJICAgICAiMTpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCi0JCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiZWR4Iik7CisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KSwgIj1kIiAodG1wKQorCQkgICAgIDogImEiIChzZW0pLCAiMSIgKC1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAogLyoKQEAgLTIyMSwzMyArMjMzLDM4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX19kb3duZ3JhZGVfd3JpdGVcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGFkZGwgICAgICAlMiwoJSVlYXgpXG5cdCIKLQkJICAgICAvKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKi8KKwkJICAgICBMT0NLX1BSRUZJWCBfQVNNX0FERCAiJTIsKCUxKVxuXHQiCisJCSAgICAgLyoKKwkJICAgICAgKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKGkzODYpCisJCSAgICAgICogICAgIDB4WlpaWlpaWlowMDAwMDAwMSAtPiAweFlZWVlZWVlZMDAwMDAwMDEgKHg4Nl82NCkKKwkJICAgICAgKi8KIAkJICAgICAiICBqbnMgICAgICAgMWZcblx0IgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duZ3JhZGVfd2FrZVxuIgogCQkgICAgICIxOlxuXHQiCiAJCSAgICAgIiMgZW5kaW5nIF9fZG93bmdyYWRlX3dyaXRlXG4iCiAJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9XQUlUSU5HX0JJQVMpCisJCSAgICAgOiAiYSIgKHNlbSksICJlciIgKC1SV1NFTV9XQUlUSU5HX0JJQVMpCiAJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCiAgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5CiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQorc3RhdGljIGlubGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQocndzZW1fY291bnRfdCBkZWx0YSwKKwkJCQkgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggX0FTTV9BREQgIiUxLCUwIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJpciIgKGRlbHRhKSk7CisJCSAgICAgOiAiZXIiIChkZWx0YSkpOwogfQogCiAvKgogICogaW1wbGVtZW50IGV4Y2hhbmdlIGFuZCBhZGQgZnVuY3Rpb25hbGl0eQogICovCi1zdGF0aWMgaW5saW5lIGludCByd3NlbV9hdG9taWNfdXBkYXRlKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQorc3RhdGljIGlubGluZSByd3NlbV9jb3VudF90IHJ3c2VtX2F0b21pY191cGRhdGUocndzZW1fY291bnRfdCBkZWx0YSwKKwkJCQkJCXN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlpbnQgdG1wID0gZGVsdGE7CisJcndzZW1fY291bnRfdCB0bXAgPSBkZWx0YTsKIAogCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZCAlMCwlMSIKIAkJICAgICA6ICIrciIgKHRtcCksICIrbSIgKHNlbS0+Y291bnQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDFlNzk2NzguLjRjZmM5MDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0xMzUsNiArMTM1LDggQEAKIHZvaWQgbmF0aXZlX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CiB2b2lkIG5hdGl2ZV9wbGF5X2RlYWQodm9pZCk7CiB2b2lkIHBsYXlfZGVhZF9jb21tb24odm9pZCk7Cit2b2lkIHdiaW52ZF9vbl9jcHUoaW50IGNwdSk7CitpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpOwogCiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19pcGkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaShpbnQgY3B1KTsKQEAgLTE0Nyw2ICsxNDksMTMgQEAKIHsKIAlyZXR1cm4gY3B1bWFza193ZWlnaHQoY3B1X2NhbGxvdXRfbWFzayk7CiB9CisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLworI2RlZmluZSB3YmludmRfb25fY3B1KGNwdSkgICAgIHdiaW52ZCgpCitzdGF0aWMgaW5saW5lIGludCB3YmludmRfb25fYWxsX2NwdXModm9pZCkKK3sKKwl3YmludmQoKTsKKwlyZXR1cm4gMDsKK30KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIGV4dGVybiB1bnNpZ25lZCBkaXNhYmxlZF9jcHVzIF9fY3B1aW5pdGRhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKaW5kZXggMzVlODkxMi4uNGRhYjc4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMyw4ICszLDYgQEAKIAogZXh0ZXJuIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7CiAKLWludCB4ODZfaXNfc3RhY2tfaWQoaW50IGlkLCBjaGFyICpuYW1lKTsKLQogc3RydWN0IHRocmVhZF9pbmZvOwogc3RydWN0IHN0YWNrdHJhY2Vfb3BzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggOGQzM2JjNS4uYzRhMzQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c19jYWxsX3RhYmxlW107CisKIC8qCiAgKiBPbmx5IHRoZSBsb3cgMzIgYml0cyBvZiBvcmlnX2F4IGFyZSBtZWFuaW5nZnVsLCBzbyB3ZSByZXR1cm4gaW50LgogICogVGhpcyBpbXBvcnRhbnRseSBpZ25vcmVzIHRoZSBoaWdoIGJpdHMgb24gNjQtYml0LCBzbyBjb21wYXJpc29ucwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBlMDQ3NDBmLi5iOGZlNDhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMzIsNyArMzIsNyBAQAogCSJtb3ZsICVQW3Rhc2tfY2FuYXJ5XSglW25leHRdKSwgJSVlYnhcblx0IgkJCVwKIAkibW92bCAlJWVieCwgIl9fcGVyY3B1X2FyZyhbc3RhY2tfY2FuYXJ5XSkiXG5cdCIKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X29wYXJhbQkJCQkJCVwKLQksIFtzdGFja19jYW5hcnldICI9bSIgKHBlcl9jcHVfdmFyKHN0YWNrX2NhbmFyeS5jYW5hcnkpKQorCSwgW3N0YWNrX2NhbmFyeV0gIj1tIiAoc3RhY2tfY2FuYXJ5LmNhbmFyeSkKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQkJCQkJCVwKIAksIFt0YXNrX2NhbmFyeV0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrX2NhbmFyeSkpCiAjZWxzZQkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLwpAQCAtMTE0LDcgKzExNCw3IEBACiAJIm1vdnEgJVBbdGFza19jYW5hcnldKCUlcnNpKSwlJXI4XG5cdCIJCQkJICBcCiAJIm1vdnEgJSVyOCwiX19wZXJjcHVfYXJnKFtnc19jYW5hcnldKSJcblx0IgogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCQkJCQkJICBcCi0JLCBbZ3NfY2FuYXJ5XSAiPW0iIChwZXJfY3B1X3ZhcihpcnFfc3RhY2tfdW5pb24uc3RhY2tfY2FuYXJ5KSkKKwksIFtnc19jYW5hcnldICI9bSIgKGlycV9zdGFja191bmlvbi5zdGFja19jYW5hcnkpCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0JCQkJCQkgIFwKIAksIFt0YXNrX2NhbmFyeV0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrX2NhbmFyeSkpCiAjZWxzZQkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJICAgICBfX3N3aXRjaF9jYW5hcnkJCQkJCQkgIFwKIAkgICAgICJtb3ZxICVQW3RocmVhZF9pbmZvXSglJXJzaSksJSVyOFxuXHQiCQkJICBcCiAJICAgICAibW92cSAlJXJheCwlJXJkaVxuXHQiIAkJCQkJICBcCi0JICAgICAidGVzdGwgICVbX3RpZl9mb3JrXSwlUFt0aV9mbGFnc10oJSVyOClcblx0IgkgIFwKKwkgICAgICJ0ZXN0bCAgJVtfdGlmX2ZvcmtdLCVQW3RpX2ZsYWdzXSglJXI4KVxuXHQiCQkgIFwKIAkgICAgICJqbnogICByZXRfZnJvbV9mb3JrXG5cdCIJCQkJCSAgXAogCSAgICAgUkVTVE9SRV9DT05URVhUCQkJCQkJICBcCiAJICAgICA6ICI9YSIgKGxhc3QpCQkJCQkgIAkgIFwKQEAgLTE0Myw3ICsxNDMsNyBAQAogCSAgICAgICBbdGlfZmxhZ3NdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpLAkgIFwKIAkgICAgICAgW190aWZfZm9ya10gImkiIChfVElGX0ZPUkspLAkJCSAgCSAgXAogCSAgICAgICBbdGhyZWFkX2luZm9dICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpLCAgIFwKLQkgICAgICAgW2N1cnJlbnRfdGFza10gIm0iIChwZXJfY3B1X3ZhcihjdXJyZW50X3Rhc2spKQkJICBcCisJICAgICAgIFtjdXJyZW50X3Rhc2tdICJtIiAoY3VycmVudF90YXNrKQkJCSAgXAogCSAgICAgICBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkgIFwKIAkgICAgIDogIm1lbW9yeSIsICJjYyIgX19FWFRSQV9DTE9CQkVSKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKaW5kZXggNTM1ZTQyMTQuLjMxNjcwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qCkBAIC0xNiw3ICsxOCwyNCBAQAogCiAvKiBIYW5kbGVzIGV4Y2VwdGlvbnMgaW4gYm90aCB0byBhbmQgZnJvbSwgYnV0IGRvZXNuJ3QgZG8gYWNjZXNzX29rICovCiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwotY29weV91c2VyX2dlbmVyaWModm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7Citjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CitfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZworY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKK2NvcHlfdXNlcl9nZW5lcmljKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pCit7CisJdW5zaWduZWQgcmV0OworCisJYWx0ZXJuYXRpdmVfY2FsbChjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCwKKwkJCSBjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcsCisJCQkgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsCisJCQkgQVNNX09VVFBVVDIoIj1hIiAocmV0KSwgIj1EIiAodG8pLCAiPVMiIChmcm9tKSwKKwkJCQkgICAgICI9ZCIgKGxlbikpLAorCQkJICIxIiAodG8pLCAiMiIgKGZyb20pLCAiMyIgKGxlbikKKwkJCSA6ICJtZW1vcnkiLCAicmN4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiKTsKKwlyZXR1cm4gcmV0OworfQogCiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwogX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyLmgKaW5kZXggOTk5ODczYi4uMjQ1MzJjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaApAQCAtMSw1ICsxLDYzIEBACisjaWZuZGVmIF9BU01fWDg2X1VTRVJfSAorI2RlZmluZSBfQVNNX1g4Nl9VU0VSX0gKKwogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaW5jbHVkZSAidXNlcl8zMi5oIgogI2Vsc2UKICMgaW5jbHVkZSAidXNlcl82NC5oIgogI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IHVzZXJfeW1taF9yZWdzIHsKKwkvKiAxNiAqIDE2IGJ5dGVzIGZvciBlYWNoIFlNTUgtcmVnICovCisJX191MzIgeW1taF9zcGFjZVs2NF07Cit9OworCitzdHJ1Y3QgdXNlcl94c2F2ZV9oZHIgeworCV9fdTY0IHhzdGF0ZV9idjsKKwlfX3U2NCByZXNlcnZlZDFbMl07CisJX191NjQgcmVzZXJ2ZWQyWzVdOworfTsKKworLyoKKyAqIFRoZSBzdHJ1Y3R1cmUgbGF5b3V0IG9mIHVzZXJfeHN0YXRlcmVncywgdXNlZCBmb3IgZXhwb3J0aW5nIHRoZQorICogZXh0ZW5kZWQgcmVnaXN0ZXIgc3RhdGUgdGhyb3VnaCBwdHJhY2UgYW5kIGNvcmUtZHVtcCAoTlRfWDg2X1hTVEFURSBub3RlKQorICogaW50ZXJmYWNlcyB3aWxsIGJlIHNhbWUgYXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgeHNhdmUgdXNlZCBieSB0aGUgcHJvY2Vzc29yCisgKiAoZXhjZXB0IGZvciB0aGUgYnl0ZXMgNDY0Li41MTEsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSkgYW5kIGhlbmNlCisgKiB0aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlCisgKiBwcm9jZXNzb3IgYW5kIE9TLiBUaGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIHRoYXQgdXNlcnMgbmVlZCB0byB1c2UgY2FuIGJlCisgKiBvYnRhaW5lZCBieSBkb2luZzoKKyAqICAgICBjcHVpZF9jb3VudCgweGQsIDAsICZlYXgsICZwdHJhY2VfeHN0YXRlcmVnc19zdHJ1Y3Rfc2l6ZSwgJmVjeCwgJmVkeCk7CisgKiBpLmUuLCBjcHVpZC4oZWF4PTB4ZCxlY3g9MCkuZWJ4IHdpbGwgYmUgdGhlIHNpemUgdGhhdCB1c2VyIChkZWJ1Z2dlcnMsIGV0Yy4pCisgKiBuZWVkIHRvIHVzZS4KKyAqCisgKiBGb3Igbm93LCBvbmx5IHRoZSBmaXJzdCA4IGJ5dGVzIG9mIHRoZSBzb2Z0d2FyZSB1c2FibGUgYnl0ZXNbNDY0Li40NzFdIHdpbGwKKyAqIGJlIHVzZWQgYW5kIHdpbGwgYmUgc2V0IHRvIE9TIGVuYWJsZWQgeHN0YXRlIG1hc2sgKHdoaWNoIGlzIHNhbWUgYXMgdGhlCisgKiA2NGJpdCBtYXNrIHJldHVybmVkIGJ5IHRoZSB4Z2V0YnYncyB4Q1IwKS4gIFVzZXJzIChhbmFseXppbmcgY29yZSBkdW1wCisgKiByZW1vdGVseSwgZXRjLikgY2FuIHVzZSB0aGlzIG1hc2sgYXMgd2VsbCBhcyB0aGUgbWFzayBzYXZlZCBpbiB0aGUKKyAqIHhzdGF0ZV9oZHIgYnl0ZXMgYW5kIGludGVycHJldCB3aGF0IHN0YXRlcyB0aGUgcHJvY2Vzc29yL09TIHN1cHBvcnRzCisgKiBhbmQgd2hhdCBzdGF0ZXMgYXJlIGluIG1vZGlmaWVkL2luaXRpYWxpemVkIGNvbmRpdGlvbnMgZm9yIHRoZQorICogcGFydGljdWxhciBwcm9jZXNzL3RocmVhZC4KKyAqCisgKiBBbHNvIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgY2VydGFpbiBzdGF0ZSBGUC9TU0UvZXRjIHRocm91Z2ggdGhlCisgKiBwdHJhY2UgaW50ZXJmYWNlLCB0aGV5IG11c3QgZW5zdXJlIHRoYXQgdGhlIHhzYXZlX2hkci54c3RhdGVfYnYKKyAqIGJ5dGVzWzUxMi4uNTE5XSBvZiB0aGUgbWVtb3J5IGxheW91dCBhcmUgdXBkYXRlZCBjb3JyZXNwb25kaW5nbHkuCisgKiBpLmUuLCBmb3IgZXhhbXBsZSB3aGVuIEZQIHN0YXRlIGlzIG1vZGlmaWVkIHRvIGEgbm9uLWluaXQgc3RhdGUsCisgKiB4c2F2ZV9oZHIueHN0YXRlX2J2J3MgYml0IDAgbXVzdCBiZSBzZXQgdG8gJzEnLCB3aGVuIFNTRSBpcyBtb2RpZmllZCB0bworICogbm9uLWluaXQgc3RhdGUsIHhzYXZlX2hkci54c3RhdGVfYnYncyBiaXQgMSBtdXN0IHRvIGJlIHNldCB0byAnMScsIGV0Yy4KKyAqLworI2RlZmluZSBVU0VSX1hTVEFURV9GWF9TV19XT1JEUyA2CisjZGVmaW5lIFVTRVJfWFNUQVRFX1hDUjBfV09SRAkwCisKK3N0cnVjdCB1c2VyX3hzdGF0ZXJlZ3MgeworCXN0cnVjdCB7CisJCV9fdTY0IGZweF9zcGFjZVs1OF07CisJCV9fdTY0IHhzdGF0ZV9meF9zd1tVU0VSX1hTVEFURV9GWF9TV19XT1JEU107CisJfSBpMzg3OworCXN0cnVjdCB1c2VyX3hzYXZlX2hkciB4c2F2ZV9oZHI7CisJc3RydWN0IHVzZXJfeW1taF9yZWdzIHltbWg7CisJLyogZnVydGhlciBwcm9jZXNzb3Igc3RhdGUgZXh0ZW5zaW9ucyBnbyBoZXJlICovCit9OworCisjZW5kaWYgLyogX0FTTV9YODZfVVNFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKaW5kZXggMjc1MWYzMC4uNzE2MDVjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaApAQCAtMTgsOCArMTgsOCBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICogIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uIDxyamFAc2dpLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CkBAIC0zNiw3ICszNiw4IEBACiAJVVZfQklPU19XQVRDSExJU1RfQUxMT0MsCiAJVVZfQklPU19XQVRDSExJU1RfRlJFRSwKIAlVVl9CSU9TX01FTVBST1RFQ1QsCi0JVVZfQklPU19HRVRfUEFSVElUSU9OX0FERFIKKwlVVl9CSU9TX0dFVF9QQVJUSVRJT05fQUREUiwKKwlVVl9CSU9TX1NFVF9MRUdBQ1lfVkdBX1RBUkdFVAogfTsKIAogLyoKQEAgLTg5LDEzICs5MCwxNCBAQAogZXh0ZXJuIHM2NCB1dl9iaW9zX2NhbGxfaXJxc2F2ZShlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiBleHRlcm4gczY0IHV2X2Jpb3NfY2FsbF9yZWVudHJhbnQoZW51bSB1dl9iaW9zX2NtZCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOwogCi1leHRlcm4gczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50LCBpbnQgKiwgbG9uZyAqLCBsb25nICosIGxvbmcgKik7CitleHRlcm4gczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50LCBpbnQgKiwgbG9uZyAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqKTsKIGV4dGVybiBzNjQgdXZfYmlvc19mcmVxX2Jhc2UodTY0LCB1NjQgKik7CiBleHRlcm4gaW50IHV2X2Jpb3NfbXFfd2F0Y2hsaXN0X2FsbG9jKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCwKIAkJCQkJdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiBpbnQgdXZfYmlvc19tcV93YXRjaGxpc3RfZnJlZShpbnQsIGludCk7CiBleHRlcm4gczY0IHV2X2Jpb3NfY2hhbmdlX21lbXByb3RlY3QodTY0LCB1NjQsIGVudW0gdXZfbWVtcHJvdGVjdCk7CiBleHRlcm4gczY0IHV2X2Jpb3NfcmVzZXJ2ZWRfcGFnZV9wYSh1NjQsIHU2NCAqLCB1NjQgKiwgdTY0ICopOworZXh0ZXJuIGludCB1dl9iaW9zX3NldF9sZWdhY3lfdmdhX3RhcmdldChib29sIGRlY29kZSwgaW50IGRvbWFpbiwgaW50IGJ1cyk7CiAKIGV4dGVybiB2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKTsKIApAQCAtMTA0LDYgKzEwNiw3IEBACiBleHRlcm4gbG9uZyBzbl9wYXJ0aXRpb25faWQ7CiBleHRlcm4gbG9uZyBzbl9jb2hlcmVuY3lfaWQ7CiBleHRlcm4gbG9uZyBzbl9yZWdpb25fc2l6ZTsKK2V4dGVybiBsb25nIHN5c3RlbV9zZXJpYWxfbnVtYmVyOwogI2RlZmluZSBwYXJ0aXRpb25fY29oZXJlbmNlX2lkKCkJKHNuX2NvaGVyZW5jeV9pZCkKIAogZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpzZ2lfdXZfa29iajsJLyogL3N5cy9maXJtd2FyZS9zZ2lfdXYgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCmluZGV4IGMwYTAxYjUuLjNiYjk0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaApAQCAtMTEsNiArMTEsNyBAQAogZXh0ZXJuIGVudW0gdXZfc3lzdGVtX3R5cGUgZ2V0X3V2X3N5c3RlbV90eXBlKHZvaWQpOwogZXh0ZXJuIGludCBpc191dl9zeXN0ZW0odm9pZCk7CiBleHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHV2X25taV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdXZfc3lzdGVtX2luaXQodm9pZCk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNwdW1hc2sgKnV2X2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCiAJCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDQwYmU4MTMuLjE0Y2M3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0zMjksNyArMzI5LDggQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dsb2JhbF9ncnVfbW1yX2FkZHJlc3MoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlyZXR1cm4gVVZfR0xPQkFMX0dSVV9NTVJfQkFTRSB8IG9mZnNldCB8IChwbm9kZSA8PCB1dl9odWJfaW5mby0+bV92YWwpOworCXJldHVybiBVVl9HTE9CQUxfR1JVX01NUl9CQVNFIHwgb2Zmc2V0IHwKKwkJKCh1bnNpZ25lZCBsb25nKXBub2RlIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yOChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IGVhMGU4ZWEuLjYwY2MzNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtMTI2LDYgKzEyNiw3IEBACiAgKiBAZ2V0X3dhbGxjbG9jazoJCWdldCB0aW1lIGZyb20gSFcgY2xvY2sgbGlrZSBSVEMgZXRjLgogICogQHNldF93YWxsY2xvY2s6CQlzZXQgdGltZSBiYWNrIHRvIEhXIGNsb2NrCiAgKiBAaXNfdW50cmFja2VkX3BhdF9yYW5nZQlleGNsdWRlIGZyb20gUEFUIGxvZ2ljCisgKiBAbm1pX2luaXQJCQllbmFibGUgTk1JIG9uIGNwdXMKICAqLwogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgewogCXVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTsKQEAgLTEzMyw2ICsxMzQsNyBAQAogCWludCAoKnNldF93YWxsY2xvY2spKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7CiAJdm9pZCAoKmlvbW11X3NodXRkb3duKSh2b2lkKTsKIAlib29sICgqaXNfdW50cmFja2VkX3BhdF9yYW5nZSkodTY0IHN0YXJ0LCB1NjQgZW5kKTsKKwl2b2lkICgqbm1pX2luaXQpKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB4ODZfaW5pdF9vcHMgeDg2X2luaXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaAppbmRleCA3MjdhY2MxLi5kZGMwNGNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKQEAgLTI3LDkgKzI3LDExIEBACiBleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOwogZXh0ZXJuIHU2NCBwY250eHRfbWFzazsKIGV4dGVybiBzdHJ1Y3QgeHNhdmVfc3RydWN0ICppbml0X3hzdGF0ZV9idWY7CitleHRlcm4gdTY0IHhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9GWF9TV19XT1JEU107CiAKIGV4dGVybiB2b2lkIHhzYXZlX2NudHh0X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB4c2F2ZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXBkYXRlX3JlZ3NldF94c3RhdGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IHhzdGF0ZV9tYXNrKTsKIGV4dGVybiBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gaW50IGNoZWNrX2Zvcl94c3RhdGUoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBfX3VzZXIgKmJ1ZiwKIAkJCSAgICB2b2lkIF9fdXNlciAqZnBzdGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBhZjFjNTgzMy4uNzM4ZmNiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtNDksNiArNDksNyBAQAogCiAjaWZkZWYJQ09ORklHX1g4Nl82NAogIyBpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyMgaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KICNlbmRpZgkJCQkvKiBYODYgKi8KIAogI2RlZmluZSBCQURfTUFEVF9FTlRSWShlbnRyeSwgZW5kKSAoCQkJCQkgICAgXApAQCAtNDQ2LDYgKzQ0NywxMiBAQAogaW50IGFjcGlfZ3NpX3RvX2lycSh1MzIgZ3NpLCB1bnNpZ25lZCBpbnQgKmlycSkKIHsKIAkqaXJxID0gZ3NpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJaWYgKGFjcGlfaXJxX21vZGVsID09IEFDUElfSVJRX01PREVMX0lPQVBJQykKKwkJc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEoZ3NpKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3Myw3ICs0ODAsOCBAQAogCQlwbGF0X2dzaSA9IG1wX3JlZ2lzdGVyX2dzaShkZXYsIGdzaSwgdHJpZ2dlciwgcG9sYXJpdHkpOwogCX0KICNlbmRpZgotCWFjcGlfZ3NpX3RvX2lycShwbGF0X2dzaSwgJmlycSk7CisJaXJxID0gcGxhdF9nc2k7CisKIAlyZXR1cm4gaXJxOwogfQogCkBAIC00ODIsNiArNDkwLDI1IEBACiAgKi8KICNpZmRlZiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVQogCitzdGF0aWMgdm9pZCBhY3BpX21hcF9jcHUybm9kZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBjcHUsIGludCBwaHlzaWQpCit7CisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQorCWludCBuaWQ7CisKKwluaWQgPSBhY3BpX2dldF9ub2RlKGhhbmRsZSk7CisJaWYgKG5pZCA9PSAtMSB8fCAhbm9kZV9vbmxpbmUobmlkKSkKKwkJcmV0dXJuOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlhcGljaWRfdG9fbm9kZVtwaHlzaWRdID0gbmlkOworCW51bWFfc2V0X25vZGUoY3B1LCBuaWQpOworI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLworCWFwaWNpZF8yX25vZGVbcGh5c2lkXSA9IG5pZDsKKwljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IG5pZDsKKyNlbmRpZgorCisjZW5kaWYKK30KKwogc3RhdGljIGludCBfX2NwdWluaXQgX2FjcGlfbWFwX2xzYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqcGNwdSkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpAQCAtNTQwLDYgKzU2Nyw3IEBACiAJfQogCiAJY3B1ID0gY3B1bWFza19maXJzdChuZXdfbWFwKTsKKwlhY3BpX21hcF9jcHUybm9kZShoYW5kbGUsIGNwdSwgcGh5c2lkKTsKIAogCSpwY3B1ID0gY3B1OwogCXJldHZhbCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IGRlNzM1M2MuLmU2ZWEwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCQkJIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKIHsKIAlzdHJ1Y3QgYWx0X2luc3RyICphOwotCWNoYXIgaW5zbmJ1ZltNQVhfUEFUQ0hfTEVOXTsKKwl1OCBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOwogCiAJRFBSSU5USygiJXM6IGFsdCB0YWJsZSAlcCAtPiAlcFxuIiwgX19mdW5jX18sIHN0YXJ0LCBlbmQpOwogCWZvciAoYSA9IHN0YXJ0OyBhIDwgZW5kOyBhKyspIHsKQEAgLTIyMyw2ICsyMjMsOCBAQAogCQl9CiAjZW5kaWYKIAkJbWVtY3B5KGluc25idWYsIGEtPnJlcGxhY2VtZW50LCBhLT5yZXBsYWNlbWVudGxlbik7CisJCWlmICgqaW5zbmJ1ZiA9PSAweGU4ICYmIGEtPnJlcGxhY2VtZW50bGVuID09IDUpCisJCSAgICAqKHMzMiAqKShpbnNuYnVmICsgMSkgKz0gYS0+cmVwbGFjZW1lbnQgLSBhLT5pbnN0cjsKIAkJYWRkX25vcHMoaW5zbmJ1ZiArIGEtPnJlcGxhY2VtZW50bGVuLAogCQkJIGEtPmluc3RybGVuIC0gYS0+cmVwbGFjZW1lbnRsZW4pOwogCQl0ZXh0X3Bva2VfZWFybHkoaW5zdHIsIGluc25idWYsIGEtPmluc3RybGVuKTsKQEAgLTM5MCw2ICszOTIsMjQgQEAKIAltdXRleF91bmxvY2soJnNtcF9hbHQpOwogfQogCisvKiBSZXR1cm4gMSBpZiB0aGUgYWRkcmVzcyByYW5nZSBpcyByZXNlcnZlZCBmb3Igc21wLWFsdGVybmF0aXZlcyAqLworaW50IGFsdGVybmF0aXZlc190ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7CisJdTggKipwdHI7CisJdTggKnRleHRfc3RhcnQgPSBzdGFydDsKKwl1OCAqdGV4dF9lbmQgPSBlbmQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkgeworCQlpZiAobW9kLT50ZXh0ID4gdGV4dF9lbmQgfHwgbW9kLT50ZXh0X2VuZCA8IHRleHRfc3RhcnQpCisJCQljb250aW51ZTsKKwkJZm9yIChwdHIgPSBtb2QtPmxvY2tzOyBwdHIgPCBtb2QtPmxvY2tzX2VuZDsgcHRyKyspCisJCQlpZiAodGV4dF9zdGFydCA8PSAqcHRyICYmIHRleHRfZW5kID49ICpwdHIpCisJCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGRmY2EyMTAuLjZlMjliMmE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAkJcmVzID0gKCgodTY0KSgqZGVsdGF0c2MpKSAqIHBtXzEwMG1zKTsKIAkJZG9fZGl2KHJlcywgZGVsdGFwbSk7CiAJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlRTQyBkZWx0YSBhZGp1c3RlZCB0byAiCi0JCQkJCSAgIlBNLVRpbWVyOiAlbHUgKCVsZCkgXG4iLAorCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpXG4iLAogCQkJCQkodW5zaWduZWQgbG9uZylyZXMsICpkZWx0YXRzYyk7CiAJCSpkZWx0YXRzYyA9IChsb25nKXJlczsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggNTMyNDNjYTcuLjE0ODYyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTczLDggKzczLDggQEAKICAqLwogaW50IHNpc19hcGljX2J1ZyA9IC0xOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvYXBpY19sb2NrKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmVjdG9yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaW9hcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodmVjdG9yX2xvY2spOwogCiAvKgogICogIyBvZiBJUlEgcm91dGluZyByZWdpc3RlcnMKQEAgLTk0LDggKzk0LDYgQEAKIC8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCiBpbnQgbXBfaXJxX2VudHJpZXM7CiAKLS8qIE51bWJlciBvZiBsZWdhY3kgaW50ZXJydXB0cyAqLwotc3RhdGljIGludCBucl9sZWdhY3lfaXJxcyBfX3JlYWRfbW9zdGx5ID0gTlJfSVJRU19MRUdBQ1k7CiAvKiBHU0kgaW50ZXJydXB0cyAqLwogc3RhdGljIGludCBucl9pcnFzX2dzaSA9IE5SX0lSUVNfTEVHQUNZOwogCkBAIC0xNDAsMjcgKzEzOCwxMCBAQAogCiAvKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwogI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCi1zdGF0aWMgc3RydWN0IGlycV9jZmcgaXJxX2NmZ3hbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTX0xFR0FDWV07CiAjZWxzZQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0geworc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdOwogI2VuZGlmCi0JWzBdICA9IHsgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKLQlbMV0gID0geyAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAotCVsyXSAgPSB7IC52ZWN0b3IgPSBJUlEyX1ZFQ1RPUiwgIH0sCi0JWzNdICA9IHsgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKLQlbNF0gID0geyAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAotCVs1XSAgPSB7IC52ZWN0b3IgPSBJUlE1X1ZFQ1RPUiwgIH0sCi0JWzZdICA9IHsgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKLQlbN10gID0geyAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAotCVs4XSAgPSB7IC52ZWN0b3IgPSBJUlE4X1ZFQ1RPUiwgIH0sCi0JWzldICA9IHsgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKLQlbMTBdID0geyAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAotCVsxMV0gPSB7IC52ZWN0b3IgPSBJUlExMV9WRUNUT1IsIH0sCi0JWzEyXSA9IHsgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKLQlbMTNdID0geyAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAotCVsxNF0gPSB7IC52ZWN0b3IgPSBJUlExNF9WRUNUT1IsIH0sCi0JWzE1XSA9IHsgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKLX07CiAKIHZvaWQgX19pbml0IGlvX2FwaWNfZGlzYWJsZV9sZWdhY3kodm9pZCkKIHsKQEAgLTE4NSw4ICsxNjYsMTQgQEAKIAkJZGVzYy0+Y2hpcF9kYXRhID0gJmNmZ1tpXTsKIAkJemFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJmNmZ1tpXS5kb21haW4sIEdGUF9OT1dBSVQsIG5vZGUpOwogCQl6YWxsb2NfY3B1bWFza192YXJfbm9kZSgmY2ZnW2ldLm9sZF9kb21haW4sIEdGUF9OT1dBSVQsIG5vZGUpOwotCQlpZiAoaSA8IG5yX2xlZ2FjeV9pcnFzKQotCQkJY3B1bWFza19zZXRhbGwoY2ZnW2ldLmRvbWFpbik7CisJCS8qCisJCSAqIEZvciBsZWdhY3kgSVJRJ3MsIHN0YXJ0IHdpdGggYXNzaWduaW5nIGlycTAgdG8gaXJxMTUgdG8KKwkJICogSVJRMF9WRUNUT1IgdG8gSVJRMTVfVkVDVE9SIG9uIGNwdSAwLgorCQkgKi8KKwkJaWYgKGkgPCBucl9sZWdhY3lfaXJxcykgeworCQkJY2ZnW2ldLnZlY3RvciA9IElSUTBfVkVDVE9SICsgaTsKKwkJCWNwdW1hc2tfc2V0X2NwdSgwLCBjZmdbaV0uZG9tYWluKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNDA2LDcgKzM5Myw3IEBACiAJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9pcnFfcGluKGVudHJ5LCBjZmctPmlycV8yX3BpbikgewogCQl1bnNpZ25lZCBpbnQgcmVnOwogCQlpbnQgcGluOwpAQCAtNDE1LDExICs0MDIsMTEgQEAKIAkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluKjIpOwogCQkvKiBJcyB0aGUgcmVtb3RlIElSUiBiaXQgc2V0PyAqLwogCQlpZiAocmVnICYgSU9fQVBJQ19SRURJUl9SRU1PVEVfSVJSKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtNDMzLDEwICs0MjAsMTAgQEAKIHsKIAl1bmlvbiBlbnRyeV91bmlvbiBldTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7CiAJZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGV1LmVudHJ5OwogfQogCkBAIC00NTksOSArNDQ2LDkgQEAKIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTQ3NCwxMCArNDYxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKIAlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02MDQsOSArNTkxLDkgQEAKIAogCUJVR19PTighY2ZnKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlfX21hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCkBAIC02MTQsOSArNjAxLDkgQEAKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJX191bm1hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMTQwLDEyICsxMTI3LDEyIEBACiAJLyogVXNlZCB0byB0aGUgb25saW5lIHNldCBvZiBjcHVzIGRvZXMgbm90IGNoYW5nZQogCSAqIGR1cmluZyBhc3NpZ25faXJxX3ZlY3Rvci4KIAkgKi8KLQlzcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7CiB9CiAKIHZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCiB7Ci0Jc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKIH0KIAogc3RhdGljIGludApAQCAtMTE2Miw3ICsxMTQ5LDggQEAKIAkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQogCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQogCSAqLwotCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBjdXJyZW50X29mZnNldCA9IDA7CisJc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIFZFQ1RPUl9PRkZTRVRfU1RBUlQ7CisJc3RhdGljIGludCBjdXJyZW50X29mZnNldCA9IFZFQ1RPUl9PRkZTRVRfU1RBUlQgJSA4OwogCXVuc2lnbmVkIGludCBvbGRfdmVjdG9yOwogCWludCBjcHUsIGVycjsKIAljcHVtYXNrX3Zhcl90IHRtcF9tYXNrOwpAQCAtMTE5OCw3ICsxMTg2LDcgQEAKIAkJaWYgKHZlY3RvciA+PSBmaXJzdF9zeXN0ZW1fdmVjdG9yKSB7CiAJCQkvKiBJZiBvdXQgb2YgdmVjdG9ycyBvbiBsYXJnZSBib3hlbiwgbXVzdCBzaGFyZSB0aGVtLiAqLwogCQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgODsKLQkJCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7CisJCQl2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyBvZmZzZXQ7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCiAJCQljb250aW51ZTsKQEAgLTEyMzIsOSArMTIyMCw5IEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCWVyciA9IF9fYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTI2OCwxMSArMTI1NiwxNiBAQAogdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKIHsKIAkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCi0JLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KIAlpbnQgaXJxLCB2ZWN0b3I7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKKwkvKgorCSAqIHZlY3Rvcl9sb2NrIHdpbGwgbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgcnVuIGludG8gaXJxIHZlY3RvcgorCSAqIGFzc2lnbm1lbnRzIHRoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIG9uIGFub3RoZXIgY3B1IGluIHBhcmFsbGVsLAorCSAqIHdoaWxlIHdlIHNldHVwIG91ciBpbml0aWFsIHZlY3RvciB0byBpcnEgbWFwcGluZ3MuCisJICovCisJcmF3X3NwaW5fbG9jaygmdmVjdG9yX2xvY2spOwogCS8qIE1hcmsgdGhlIGludXNlIHZlY3RvcnMgKi8KIAlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKIAkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwpAQCAtMTI5MSw2ICsxMjg0LDcgQEAKIAkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY2ZnLT5kb21haW4pKQogCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKIAl9CisJcmF3X3NwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7CkBAIC0xNDQwLDYgKzE0MzQsMTQgQEAKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAorCS8qCisJICogRm9yIGxlZ2FjeSBpcnFzLCBjZmctPmRvbWFpbiBzdGFydHMgd2l0aCBjcHUgMCBmb3IgbGVnYWN5CisJICogY29udHJvbGxlcnMgbGlrZSA4MjU5LiBOb3cgdGhhdCBJTy1BUElDIGNhbiBoYW5kbGUgdGhpcyBpcnEsIHVwZGF0ZQorCSAqIHRoZSBjZmctPmRvbWFpbi4KKwkgKi8KKwlpZiAoaXJxIDwgbnJfbGVnYWN5X2lycXMgJiYgY3B1bWFza190ZXN0X2NwdSgwLCBjZmctPmRvbWFpbikpCisJCWFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbigwLCBjZmctPmRvbWFpbik7CisKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpKQogCQlyZXR1cm47CiAKQEAgLTE0NzMsNyArMTQ3NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKIHsKLQlpbnQgYXBpY19pZCA9IDAsIHBpbiwgaWR4LCBpcnE7CisJaW50IGFwaWNfaWQsIHBpbiwgaWR4LCBpcnE7CiAJaW50IG5vdGNvbiA9IDA7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CkBAIC0xNDgxLDE0ICsxNDgzLDcgQEAKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwogCi0jaWZkZWYgQ09ORklHX0FDUEkKLQlpZiAoIWFjcGlfZGlzYWJsZWQgJiYgYWNwaV9pb2FwaWMpIHsKLQkJYXBpY19pZCA9IG1wX2ZpbmRfaW9hcGljKDApOwotCQlpZiAoYXBpY19pZCA8IDApCi0JCQlhcGljX2lkID0gMDsKLQl9Ci0jZW5kaWYKLQorCWZvciAoYXBpY19pZCA9IDA7IGFwaWNfaWQgPCBucl9pb2FwaWNzOyBhcGljX2lkKyspCiAJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNfaWRdOyBwaW4rKykgewogCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljX2lkLCBwaW4sIG1wX0lOVCk7CiAJCWlmIChpZHggPT0gLTEpIHsKQEAgLTE1MTAsNiArMTUwNSw5IEBACiAKIAkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpY19pZCwgcGluKTsKIAorCQlpZiAoKGFwaWNfaWQgPiAwKSAmJiAoaXJxID4gMTYpKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogU2tpcCB0aGUgdGltZXIgSVJRIGlmIHRoZXJlJ3MgYSBxdWlyayBoYW5kbGVyCiAJCSAqIGluc3RhbGxlZCBhbmQgaWYgaXQgcmV0dXJucyAxOgpAQCAtMTUzOSw2ICsxNTM3LDU2IEBACiB9CiAKIC8qCisgKiBmb3IgdGhlIGdzaXQgdGhhdCBpcyBub3QgaW4gZmlyc3QgaW9hcGljCisgKiBidXQgY291bGQgbm90IHVzZSBhY3BpX3JlZ2lzdGVyX2dzaSgpCisgKiBsaWtlIHNvbWUgc3BlY2lhbCBzY2kgaW4gSUJNIHgzMzMwCisgKi8KK3ZvaWQgc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEodTMyIGdzaSkKK3sKKwlpbnQgYXBpY19pZCA9IDAsIHBpbiwgaWR4LCBpcnE7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShib290X2NwdV9pZCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwkvKgorCSAqIENvbnZlcnQgJ2dzaScgdG8gJ2lvYXBpYy5waW4nLgorCSAqLworCWFwaWNfaWQgPSBtcF9maW5kX2lvYXBpYyhnc2kpOworCWlmIChhcGljX2lkIDwgMCkKKwkJcmV0dXJuOworCisJcGluID0gbXBfZmluZF9pb2FwaWNfcGluKGFwaWNfaWQsIGdzaSk7CisJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpY19pZCwgcGluLCBtcF9JTlQpOworCWlmIChpZHggPT0gLTEpCisJCXJldHVybjsKKworCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWNfaWQsIHBpbik7CisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoZGVzYykKKwkJcmV0dXJuOworI2VuZGlmCisJZGVzYyA9IGlycV90b19kZXNjX2FsbG9jX25vZGUoaXJxLCBub2RlKTsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWFkZF9waW5fdG9faXJxX25vZGUoY2ZnLCBub2RlLCBhcGljX2lkLCBwaW4pOworCisJaWYgKHRlc3RfYml0KHBpbiwgbXBfaW9hcGljX3JvdXRpbmdbYXBpY19pZF0ucGluX3Byb2dyYW1tZWQpKSB7CisJCXByX2RlYnVnKCJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAorCQkJIG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBwaW4pOworCQlyZXR1cm47CisJfQorCXNldF9iaXQocGluLCBtcF9pb2FwaWNfcm91dGluZ1thcGljX2lkXS5waW5fcHJvZ3JhbW1lZCk7CisKKwlzZXR1cF9JT19BUElDX2lycShhcGljX2lkLCBwaW4sIGlycSwgZGVzYywKKwkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKK30KKworLyoKICAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWNfaWQsIHVuc2lnbmVkIGludCBwaW4sCkBAIC0xNjAxLDE0ICsxNjQ5LDE0IEBACiAKIAlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKIAlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwogCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTApCiAJCXJlZ18wMi5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMik7CiAJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCkKIAkJcmVnXzAzLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcHJpbnRrKCJcbiIpOwogCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5hcGljaWQpOwpAQCAtMTY0Nyw3ICsxNjk1LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiBJUlEgcmVkaXJlY3Rpb24gdGFibGU6XG4iKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgTlIgRHN0IE1hc2sgVHJpZyBJUlIgUG9sIgotCQkJICAiIFN0YXQgRG1vZCBEZWxpIFZlY3Q6ICAgXG4iKTsKKwkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgewogCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKQEAgLTE4MzAsNyArMTg3OCw3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiXG5wcmludGluZyBQSUMgY29udGVudHNcbiIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOwpAQCAtMTg0NCw3ICsxODkyLDcgQEAKIAlvdXRiKDB4MGEsMHhhMCk7CiAJb3V0YigweDBhLDB4MjApOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJU1I6ICUwNHhcbiIsIHYpOwogCkBAIC0xOTAzLDkgKzE5NTEsOSBAQAogCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CiAJICovCiAJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKIAl9CiAKQEAgLTIwNDUsOSArMjA5Myw5IEBACiAJZm9yIChhcGljX2lkID0gMDsgYXBpY19pZCA8IG5yX2lvYXBpY3M7IGFwaWNfaWQrKykgewogCiAJCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIDAgdmFsdWUgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljX2lkLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQ7CiAKQEAgLTIxMDYsMTYgKzIxNTQsMTYgQEAKIAkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKTsKIAogCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCQlpb19hcGljX3dyaXRlKGFwaWNfaWQsIDAsIHJlZ18wMC5yYXcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCQkvKgogCQkgKiBTYW5pdHkgY2hlY2sKIAkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpY19pZCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpCiAJCQlwcmludGsoImNvdWxkIG5vdCBzZXQgSUQhXG4iKTsKIAkJZWxzZQpAQCAtMjE5OCw3ICsyMjQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA8IG5yX2xlZ2FjeV9pcnFzKSB7CiAJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CiAJCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKQEAgLTIyMDYsNyArMjI1NCw3IEBACiAJfQogCWNmZyA9IGlycV9jZmcoaXJxKTsKIAlfX3VubWFza19JT19BUElDX2lycShjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gd2FzX3BlbmRpbmc7CiB9CkBAIC0yMjE3LDkgKzIyNjUsOSBAQAogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAlhcGljLT5zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1bWFza19maXJzdChjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjMxMiwxNCArMjM2MCwxNCBAQAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmV0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpOwogCWlmICghcmV0KSB7CiAJCS8qIE9ubHkgdGhlIGhpZ2ggOCBiaXRzIGFyZSB2YWxpZC4gKi8KIAkJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7CiAJCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTU0LDkgKzI2MDIsOSBAQAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJX19lb2lfaW9hcGljX2lycShpcnEsIGNmZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYWNrX2FwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKQEAgLTMxMzgsMTMgKzMxODYsMTMgQEAKIAlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwogCWVudHJ5ID0gZGF0YS0+ZW50cnk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChkZXYtPmlkLCAwKTsKIAlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1tkZXYtPmlkXS5hcGljaWQpIHsKIAkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2Rldi0+aWRdLmFwaWNpZDsKIAkJaW9fYXBpY193cml0ZShkZXYtPmlkLCAwLCByZWdfMDAucmF3KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQogCQlpb2FwaWNfd3JpdGVfZW50cnkoZGV2LT5pZCwgaSwgZW50cnlbaV0pOwogCkBAIC0zMjA3LDcgKzMyNTUsNyBAQAogCWlmIChpcnFfd2FudCA8IG5yX2lycXNfZ3NpKQogCQlpcnFfd2FudCA9IG5yX2lycXNfZ3NpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCWZvciAobmV3ID0gaXJxX3dhbnQ7IG5ldyA8IG5yX2lycXM7IG5ldysrKSB7CiAJCWRlc2NfbmV3ID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZShuZXcsIG5vZGUpOwogCQlpZiAoIWRlc2NfbmV3KSB7CkBAIC0zMjI2LDE0ICszMjc0LDExIEBACiAJCQlpcnEgPSBuZXc7CiAJCWJyZWFrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGlycSA+IDApIHsKLQkJZHluYW1pY19pcnFfaW5pdChpcnEpOwotCQkvKiByZXN0b3JlIGl0LCBpbiBjYXNlIGR5bmFtaWNfaXJxX2luaXQgY2xlYXIgaXQgKi8KLQkJaWYgKGRlc2NfbmV3KQotCQkJZGVzY19uZXctPmNoaXBfZGF0YSA9IGNmZ19uZXc7Ci0JfQorCWlmIChpcnEgPiAwKQorCQlkeW5hbWljX2lycV9pbml0X2tlZXBfY2hpcF9kYXRhKGlycSk7CisKIAlyZXR1cm4gaXJxOwogfQogCkBAIC0zMjU1LDIwICszMzAwLDEzIEBACiB2b2lkIGRlc3Ryb3lfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCS8qIHN0b3JlIGl0LCBpbiBjYXNlIGR5bmFtaWNfaXJxX2NsZWFudXAgY2xlYXIgaXQgKi8KLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwotCS8qIGNvbm5lY3QgYmFjayBpcnFfY2ZnICovCi0JZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOworCWR5bmFtaWNfaXJxX2NsZWFudXBfa2VlcF9jaGlwX2RhdGEoaXJxKTsKIAogCWZyZWVfaXJ0ZShpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEsIGNmZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zODA1LDkgKzM4NDMsOSBAQAogCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7CiB9CkBAIC0zOTY5LDkgKzQwMDcsOSBAQAogCWlmIChwaHlzaWRzX2VtcHR5KGFwaWNfaWRfbWFwKSkKIAkJYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKCZwaHlzX2NwdV9wcmVzZW50X21hcCwgJmFwaWNfaWRfbWFwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCkBAIC00MDA1LDEwICs0MDQzLDEwIEBACiAJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKIAkJcmVnXzAwLmJpdHMuSUQgPSBhcGljX2lkOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKIAkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBTYW5pdHkgY2hlY2sgKi8KIAkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKQEAgLTQwMjksOSArNDA2Nyw5IEBACiAJdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKIH0KQEAgLTQwNjMsMjcgKzQxMDEsMjMgQEAKICNpZmRlZiBDT05GSUdfU01QCiB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQogewotCWludCBwaW4sIGlvYXBpYyA9IDAsIGlycSwgaXJxX2VudHJ5OworCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrOwogCiAJaWYgKHNraXBfaW9hcGljX3NldHVwID09IDEpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19BQ1BJCi0JaWYgKCFhY3BpX2Rpc2FibGVkICYmIGFjcGlfaW9hcGljKSB7Ci0JCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKDApOwotCQlpZiAoaW9hcGljIDwgMCkKLQkJCWlvYXBpYyA9IDA7Ci0JfQotI2VuZGlmCi0KKwlmb3IgKGlvYXBpYyA9IDA7IGlvYXBpYyA8IG5yX2lvYXBpY3M7IGlvYXBpYysrKQogCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpb2FwaWNdOyBwaW4rKykgewogCQlpcnFfZW50cnkgPSBmaW5kX2lycV9lbnRyeShpb2FwaWMsIHBpbiwgbXBfSU5UKTsKIAkJaWYgKGlycV9lbnRyeSA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlpcnEgPSBwaW5fMl9pcnEoaXJxX2VudHJ5LCBpb2FwaWMsIHBpbik7CiAKKwkJaWYgKChpb2FwaWMgPiAwKSAmJiAoaXJxID4gMTYpKQorCQkJY29udGludWU7CisKIAkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKaW5kZXggMDE1OWE2OS4uYmQ3Yzk2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKQEAgLTQxNiwxMyArNDE2LDEzIEBACiAKIAkvKiBXZSBjYW4gYmUgY2FsbGVkIGJlZm9yZSBjaGVja19ubWlfd2F0Y2hkb2csIGhlbmNlIE5VTEwgY2hlY2suICovCiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSkpIHsKLQkJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsJLyogU2VyaWFsaXNlIHRoZSBwcmludGtzICovCisJCXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGxvY2spOyAvKiBTZXJpYWxpc2UgdGhlIHByaW50a3MgKi8KIAotCQlzcGluX2xvY2soJmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZsb2NrKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOwogCQlzaG93X3JlZ3MocmVncyk7CiAJCWR1bXBfc3RhY2soKTsKLQkJc3Bpbl91bmxvY2soJmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmxvY2spOwogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKTsKIAogCQlyYyA9IDE7CkBAIC00MzgsOCArNDM4LDggQEAKIAkJICogQXlpZWUsIGxvb2tzIGxpa2UgdGhpcyBDUFUgaXMgc3R1Y2sgLi4uCiAJCSAqIHdhaXQgYSBmZXcgSVJRcyAoNSBzZWNvbmRzKSBiZWZvcmUgZG9pbmcgdGhlIG9vcHMgLi4uCiAJCSAqLwotCQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihhbGVydF9jb3VudGVyKSk7Ci0JCWlmIChfX3RoaXNfY3B1X3JlYWQocGVyX2NwdV92YXIoYWxlcnRfY291bnRlcikpID09IDUgKiBubWlfaHopCisJCV9fdGhpc19jcHVfaW5jKGFsZXJ0X2NvdW50ZXIpOworCQlpZiAoX190aGlzX2NwdV9yZWFkKGFsZXJ0X2NvdW50ZXIpID09IDUgKiBubWlfaHopCiAJCQkvKgogCQkJICogZGllX25taSB3aWxsIHJldHVybiBPTkxZIGlmIE5PVElGWV9TVE9QIGhhcHBlbnMuLgogCQkJICovCkBAIC00NDcsNyArNDQ3LDcgQEAKIAkJCQlyZWdzLCBwYW5pY19vbl90aW1lb3V0KTsKIAl9IGVsc2UgewogCQlfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPSBzdW07Ci0JCV9fdGhpc19jcHVfd3JpdGUocGVyX2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOworCQlfX3RoaXNfY3B1X3dyaXRlKGFsZXJ0X2NvdW50ZXIsIDApOwogCX0KIAogCS8qIHNlZSBpZiB0aGUgbm1pIHdhdGNoZG9nIHdlbnQgb2ZmICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwppbmRleCA5OGM0NjY1Li40N2RkODU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiAJbXBjX3JlY29yZCA9IDA7CiAJcHJpbnRrKEtFUk5fSU5GTwotCQkiRm91bmQgYW4gT0VNIE1QQyB0YWJsZSBhdCAlOHAgLSBwYXJzaW5nIGl0IC4uLiBcbiIsIG9lbXRhYmxlKTsKKwkJIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdC4uLlxuIiwgb2VtdGFibGUpOwogCiAJaWYgKG1lbWNtcChvZW10YWJsZS0+c2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMjFkYjNjYi4uMzc0MGM4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBVViBBUElDIGZ1bmN0aW9ucyAobm90ZTogbm90IGFuIEludGVsIGNvbXBhdGlibGUgQVBJQykKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CkBAIC0zNCwxMCArMzYsMTMgQEAKIAogREVGSU5FX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CiAKKyNkZWZpbmUgUFJfREVWRUwoZm10LCBhcmdzLi4uKQlwcl9kZXZlbCgiJXM6ICIgZm10LCBfX2Z1bmNfXywgYXJncykKKwogc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CiBzdGF0aWMgdTY0IGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcjsKIGludCB1dl9taW5faHViX3JldmlzaW9uX2lkOwogRVhQT1JUX1NZTUJPTF9HUEwodXZfbWluX2h1Yl9yZXZpc2lvbl9pZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHV2X25taV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBib29sIGlzX0dSVV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CkBAIC03MSw2ICs3Niw3IEBACiAJaWYgKCFzdHJjbXAob2VtX2lkLCAiU0dJIikpIHsKIAkJbm9kZWlkID0gZWFybHlfZ2V0X25vZGVpZCgpOwogCQl4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZSA9ICB1dl9pc191bnRyYWNrZWRfcGF0X3JhbmdlOworCQl4ODZfcGxhdGZvcm0ubm1pX2luaXQgPSB1dl9ubWlfaW5pdDsKIAkJaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZMIikpCiAJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX0xFR0FDWV9BUElDOwogCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWWCIpKQpAQCAtNDgyLDcgKzQ4OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB1dl9oZWFydGJlYXRfZW5hYmxlKGludCBjcHUpCiB7Ci0JaWYgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CisJd2hpbGUgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CiAJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci50aW1lcjsKIAogCQl1dl9zZXRfY3B1X3NjaXJfYml0cyhjcHUsIFNDSVJfQ1BVX0hFQVJUQkVBVHxTQ0lSX0NQVV9BQ1RJVklUWSk7CkBAIC00OTAsMTEgKzQ5NiwxMCBAQAogCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBTQ0lSX0NQVV9IQl9JTlRFUlZBTDsKIAkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMTsKLQl9CiAKLQkvKiBjaGVjayBib290IGNwdSAqLwotCWlmICghdXZfY3B1X2h1Yl9pbmZvKDApLT5zY2lyLmVuYWJsZWQpCi0JCXV2X2hlYXJ0YmVhdF9lbmFibGUoMCk7CisJCS8qIGFsc28gZW5zdXJlIHRoYXQgYm9vdCBjcHUgaXMgZW5hYmxlZCAqLworCQljcHUgPSAwOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNTUzLDYgKzU1OCwzMCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwogCisvKiBEaXJlY3QgTGVnYWN5IFZHQSBJL08gdHJhZmZpYyB0byBkZXNpZ25hdGVkIElPSCAqLworaW50IHV2X3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgZGVjb2RlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCit7CisJaW50IGRvbWFpbiwgYnVzLCByYzsKKworCVBSX0RFVkVMKCJkZXZmbiAleCBkZWNvZGUgJWQgY21kICV4IGNoZ19icmRnICVkXG4iLAorCQkJcGRldi0+ZGV2Zm4sIGRlY29kZSwgY29tbWFuZF9iaXRzLCBjaGFuZ2VfYnJpZGdlKTsKKworCWlmICghY2hhbmdlX2JyaWRnZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNvbW1hbmRfYml0cyAmIFBDSV9DT01NQU5EX0lPKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbiA9IHBjaV9kb21haW5fbnIocGRldi0+YnVzKTsKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKworCXJjID0gdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoZGVjb2RlLCBkb21haW4sIGJ1cyk7CisJUFJfREVWRUwoInZnYSBkZWNvZGUgJWQgJXg6JXgsIHJjOiAlZFxuIiwgZGVjb2RlLCBkb21haW4sIGJ1cywgcmMpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgogICogRklYTUU6IGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKQEAgLTU2OSw2ICs1OTgsNDYgQEAKIAkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7CiB9CiAKKy8qCisgKiBXaGVuIE5NSSBpcyByZWNlaXZlZCwgcHJpbnQgYSBzdGFjayB0cmFjZS4KKyAqLworaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAocmVhc29uICE9IERJRV9OTUlfSVBJKQorCQlyZXR1cm4gTk9USUZZX09LOworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQorCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICovCisJc3Bpbl9sb2NrKCZ1dl9ubWlfbG9jayk7CisJcHJfaW5mbygiTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlkdW1wX3N0YWNrKCk7CisJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1dl9kdW1wX3N0YWNrX25taV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHV2X2hhbmRsZV9ubWkKK307CisKK3ZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmdXZfZHVtcF9zdGFja19ubWlfbmIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVViBOTUkgaGFuZGxlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOworfQorCit2b2lkIHV2X25taV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyoKKwkgKiBVbm1hc2sgTk1JIG9uIGFsbCBjcHVzCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKSB8IEFQSUNfRE1fTk1JOworCXZhbHVlICY9IH5BUElDX0xWVF9NQVNLRUQ7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KIAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKQEAgLTYzNCw4ICs3MDMsOCBAQAogCX0KIAogCXV2X2Jpb3NfaW5pdCgpOwotCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCi0JCQkgICAgJnNuX2NvaGVyZW5jeV9pZCwgJnNuX3JlZ2lvbl9zaXplKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLCAmc25fY29oZXJlbmN5X2lkLAorCQkJICAgICZzbl9yZWdpb25fc2l6ZSwgJnN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIAl1dl9ydGNfaW5pdCgpOwogCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC02OTAsNSArNzU5LDkgQEAKIAogCXV2X2NwdV9pbml0KCk7CiAJdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIoKTsKKwl1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIoKTsKIAlwcm9jX21rZGlyKCJzZ2lfdXYiLCBOVUxMKTsKKworCS8qIHJlZ2lzdGVyIExlZ2FjeSBWR0EgSS9PIHJlZGlyZWN0aW9uIGhhbmRsZXIgKi8KKwlwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZSh1dl9zZXRfdmdhX3N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCBiNWI2YjIzLi4wMzFhYTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0xOTkyLDggKzE5OTIsOCBAQAogCQlhcG1faW5mby5kaXNhYmxlZCA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIG1hY2hpbmUgZGV0ZWN0ZWQuICIKIAkJICAgICAgICJEaXNhYmxpbmcgQVBNLlxuIiwgZC0+aWRlbnQpOwotCQlwcmludGsoS0VSTl9JTkZPICJUaGlzIGJ1ZyBpcyBmaXhlZCBpbiBiaW9zIFAxNSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb20gXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGhpcyBidWcgaXMgZml4ZWQgaW4gYmlvcyBQMTUgd2hpY2ggaXMgYXZhaWxhYmxlIGZvclxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb21cbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGIwMjA2YTIuLjhiYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMTUsOCArMTUsOCBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICogIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uIDxyamFAc2dpLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CkBAIC0zMCw2ICszMCw3IEBACiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewogCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisJczY0IHJldDsKIAogCWlmICghdGFiLT5mdW5jdGlvbikKIAkJLyoKQEAgLTM3LDkgKzM4LDExIEBACiAJCSAqLwogCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKIAotCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAotCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldCA9IGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksICh1NjQpd2hpY2gsCisJCQlhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2NhbGwpOwogCiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKIAkJCQkJdTY0IGE0LCB1NjQgYTUpCkBAIC03MywxMSArNzYsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuX2NvaGVyZW5jeV9pZCk7CiBsb25nIHNuX3JlZ2lvbl9zaXplOwogRVhQT1JUX1NZTUJPTF9HUEwoc25fcmVnaW9uX3NpemUpOworbG9uZyBzeXN0ZW1fc2VyaWFsX251bWJlcjsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIGludCB1dl90eXBlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfdHlwZSk7CiAKIAogczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50IGZjLCBpbnQgKnV2dHlwZSwgbG9uZyAqcGFydGlkLCBsb25nICpjb2hlciwKLQkJbG9uZyAqcmVnaW9uKQorCQlsb25nICpyZWdpb24sIGxvbmcgKnNzbikKIHsKIAlzNjQgcmV0OwogCXU2NCB2MCwgdjE7CkBAIC05Nyw4ICsxMDMsMTEgQEAKIAkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CiAJaWYgKHJlZ2lvbikKIAkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJaWYgKHNzbikKKwkJKnNzbiA9IHYxOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2dldF9zbl9pbmZvKTsKIAogaW50CiB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBtcV9zaXplLApAQCAtMTU0LDYgKzE2MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOwogCisvKgorICogdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQgLSBTZXQgTGVnYWN5IFZHQSBJL08gVGFyZ2V0CisgKiBAZGVjb2RlOiB0cnVlIHRvIGVuYWJsZSB0YXJnZXQsIGZhbHNlIHRvIGRpc2FibGUgdGFyZ2V0CisgKiBAZG9tYWluOiBQQ0kgZG9tYWluIG51bWJlcgorICogQGJ1czogUENJIGJ1cyBudW1iZXIKKyAqCisgKiBSZXR1cm5zOgorICogICAgMDogU3VjY2VzcworICogICAgLUVJTlZBTDogSW52YWxpZCBkb21haW4gb3IgYnVzIG51bWJlcgorICogICAgLUVOT1NZUzogQ2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlCisgKiAgICAtRUJVU1k6IExlZ2FjeSBWR0EgSS9PIGNhbm5vdCBiZSByZXRhcmdldGVkIGF0IHRoaXMgdGltZQorICovCitpbnQgdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoYm9vbCBkZWNvZGUsIGludCBkb21haW4sIGludCBidXMpCit7CisJcmV0dXJuIHV2X2Jpb3NfY2FsbChVVl9CSU9TX1NFVF9MRUdBQ1lfVkdBX1RBUkdFVCwKKwkJCQkodTY0KWRlY29kZSwgKHU2NClkb21haW4sICh1NjQpYnVzLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KTsKKwogCiAjaWZkZWYgQ09ORklHX0VGSQogdm9pZCB1dl9iaW9zX2luaXQodm9pZCkKQEAgLTE4NSw0ICsyMTMsMyBAQAogCiB2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKSB7IH0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNDY4NDg5Yi4uOTdhZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CiAJCXsgWDg2X0ZFQVRVUkVfSURBLCBDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKIAkJeyBYODZfRkVBVFVSRV9BUkFULCBDUl9FQVgsIDIsIDB4MDAwMDAwMDYgfSwKKwkJeyBYODZfRkVBVFVSRV9OUFQsICAgQ1JfRURYLCAwLCAweDgwMDAwMDBhIH0sCisJCXsgWDg2X0ZFQVRVUkVfTEJSViwgIENSX0VEWCwgMSwgMHg4MDAwMDAwYSB9LAorCQl7IFg4Nl9GRUFUVVJFX1NWTUwsICBDUl9FRFgsIDIsIDB4ODAwMDAwMGEgfSwKKwkJeyBYODZfRkVBVFVSRV9OUklQUywgQ1JfRURYLCAzLCAweDgwMDAwMDBhIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA2ZTQ0NTE5Li5kMzYwYjU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtODA2LDcgKzgwNiw3IEBACiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCiAJCXVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlhY3BpX2ludGVnZXIgY29udHJvbDsKKwl1NjQgY29udHJvbDsKIAogCWlmICghZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IHx8IChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpKQogCQlyZXR1cm47CkBAIC04MjQsNyArODI0LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlOwogCWludCByZXRfdmFsID0gLUVOT0RFVjsKLQlhY3BpX2ludGVnZXIgY29udHJvbCwgc3RhdHVzOworCXU2NCBjb250cm9sLCBzdGF0dXM7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KSkgewogCQlkcHJpbnRrKCJyZWdpc3RlciBwZXJmb3JtYW5jZSBmYWlsZWQ6IGJhZCBBQ1BJIGRhdGFcbiIpOwpAQCAtOTQ4LDcgKzk0OCw3IEBACiAJCXUzMiBmaWQ7CiAJCXUzMiB2aWQ7CiAJCXUzMiBmcmVxLCBpbmRleDsKLQkJYWNwaV9pbnRlZ2VyIHN0YXR1cywgY29udHJvbDsKKwkJdTY0IHN0YXR1cywgY29udHJvbDsKIAogCQlpZiAoZGF0YS0+ZXh0dHlwZSkgewogCQkJc3RhdHVzID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggZmM2YzhlZi4uZWRkYjFiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2RlZmluZSBMVkxfMV9JTlNUCTEKICNkZWZpbmUgTFZMXzFfREFUQQkyCkBAIC0zMSw2ICszMiw4IEBACiAJc2hvcnQgc2l6ZTsKIH07CiAKKyNkZWZpbmUgTUIoeCkJKCh4KSAqIDEwMjQpCisKIC8qIEFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IKICAgIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCiAKQEAgLTQ0LDkgKzQ3LDkgQEAKIAl7IDB4MGQsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjEsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIyLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjMsIExWTF8zLCAgICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjUsIExWTF8zLCAgICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MjMsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDI1LCBMVkxfMywgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHgyOSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MmMsIExWTF8xX0RBVEEsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzAsIExWTF8xX0lOU1QsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzksIExWTF8yLCAgICAgIDEyOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNTksMTYgKzYyLDE2IEBACiAJeyAweDQxLCBMVkxfMiwgICAgICAxMjggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ0LCBMVkxfMiwgICAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDUsIExWTF8yLCAgICAgIDIwNDggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NiwgTFZMXzMsICAgICAgNDA5NiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ3LCBMVkxfMywgICAgICA4MTkyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGEsIExWTF8zLCAgICAgIDYxNDQgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGIsIExWTF8zLCAgICAgIDgxOTIgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGMsIExWTF8zLCAgICAgMTIyODggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGQsIExWTF8zLCAgICAgMTYzODQgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGUsIExWTF8yLCAgICAgIDYxNDQgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDYsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDcsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGMsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0ZCwgTFZMXzMsICAgICAgTUIoMTYpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRlLCBMVkxfMiwgICAgICBNQig2KSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg2MCwgTFZMXzFfREFUQSwgMTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjYsIExWTF8xX0RBVEEsIDggfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjcsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC03NywzNCArODAsMzQgQEAKIAl7IDB4NzEsIExWTF9UUkFDRSwgIDE2IH0sCS8qIDgtd2F5IHNldCBhc3NvYyAqLwogCXsgMHg3MiwgTFZMX1RSQUNFLCAgMzIgfSwJLyogOC13YXkgc2V0IGFzc29jICovCiAJeyAweDczLCBMVkxfVFJBQ0UsICA2NCB9LAkvKiA4LXdheSBzZXQgYXNzb2MgKi8KLQl7IDB4NzgsIExWTF8yLCAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NzksIExWTF8yLCAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdhLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3YiwgTFZMXzIsICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2MsIExWTF8yLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdkLCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdmLCBMVkxfMiwgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgyLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgzLCBMVkxfMiwgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg0LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg1LCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg2LCBMVkxfMiwgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg3LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQwLCBMVkxfMywgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQxLCBMVkxfMywgICAgMTAyNCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQyLCBMVkxfMywgICAgMjA0OCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ2LCBMVkxfMywgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ3LCBMVkxfMywgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ4LCBMVkxfMywgICAgNDA5NiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkYywgTFZMXzMsICAgIDIwNDggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZGQsIExWTF8zLCAgICA0MDk2IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGRlLCBMVkxfMywgICAgODE5MiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlMiwgTFZMXzMsICAgIDIwNDggfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZTMsIExWTF8zLCAgICA0MDk2IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGU0LCBMVkxfMywgICAgODE5MiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlYSwgTFZMXzMsICAgIDEyMjg4IH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGViLCBMVkxfMywgICAgMTg0MzIgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZWMsIExWTF8zLCAgICAyNDU3NiB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OSwgTFZMXzIsICAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdhLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2IsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3YywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2QsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2YsIExWTF8yLCAgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDgyLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MywgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODYsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDg3LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQwLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMSwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMiwgTFZMXzMsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNiwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNywgTFZMXzMsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkOCwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZGMsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGRkLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkZSwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZTIsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGUzLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlNCwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZWEsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlYiwgTFZMXzMsICAgICAgTUIoMTgpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGVjLCBMVkxfMywgICAgICBNQigyNCkgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MDAsIDAsIDB9CiB9OwogCkBAIC0xNTAsNyArMTUzLDggQEAKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWJ4IGVieDsKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKKwlib29sIGNhbl9kaXNhYmxlOworCXVuc2lnbmVkIGludCBsM19pbmRpY2VzOwogCURFQ0xBUkVfQklUTUFQKHNoYXJlZF9jcHVfbWFwLCBOUl9DUFVTKTsKIH07CiAKQEAgLTE2MCw3ICsxNjQsOCBAQAogCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggZWJ4OwogCXVuaW9uIF9jcHVpZDRfbGVhZl9lY3ggZWN4OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOworCWJvb2wgY2FuX2Rpc2FibGU7CisJdW5zaWduZWQgaW50IGwzX2luZGljZXM7CiB9OwogCiB1bnNpZ25lZCBzaG9ydAkJCW51bV9jYWNoZV9sZWF2ZXM7CkBAIC0yOTAsNiArMjk1LDM2IEBACiAJCShlYngtPnNwbGl0LndheXNfb2ZfYXNzb2NpYXRpdml0eSArIDEpIC0gMTsKIH0KIAorc3RydWN0IF9jYWNoZV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworfTsKKworI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQgYW1kX2NhbGNfbDNfaW5kaWNlcyh2b2lkKQoreworCS8qCisJICogV2UncmUgY2FsbGVkIG92ZXIgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCkgYW5kIHRoZXJlZm9yZQorCSAqIGFyZSBvbiB0aGUgY29ycmVjdCBjcHUuCisJICovCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBpbnQgc2MwLCBzYzEsIHNjMiwgc2MzOworCXUzMiB2YWwgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQzQsICZ2YWwpOworCisJLyogY2FsY3VsYXRlIHN1YmNhY2hlIHNpemVzICovCisJc2MwID0gISh2YWwgJiBCSVQoMCkpOworCXNjMSA9ICEodmFsICYgQklUKDQpKTsKKwlzYzIgPSAhKHZhbCAmIEJJVCg4KSkgICsgISh2YWwgJiBCSVQoOSkpOworCXNjMyA9ICEodmFsICYgQklUKDEyKSkgKyAhKHZhbCAmIEJJVCgxMykpOworCisJcmV0dXJuIChtYXgobWF4KG1heChzYzAsIHNjMSksIHNjMiksIHNjMykgPDwgMTApIC0gMTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0CiBhbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQogewpAQCAtMjk5LDEzICszMzQsMTA0IEBACiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTEpCiAJCXJldHVybjsKIAotCS8qIHNlZSBlcnJhdHVtICMzODIgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8IDB4OCkpCisJLyogc2VlIGVycmF0YSAjMzgyIGFuZCAjMzg4ICovCisJaWYgKChib290X2NwdV9kYXRhLng4NiA9PSAweDEwKSAmJgorCSAgICAoKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDwgMHg4KSB8fAorCSAgICAgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgIDwgMHgxKSkpCiAJCXJldHVybjsKIAotCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSAxOworCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSB0cnVlOworCXRoaXNfbGVhZi0+bDNfaW5kaWNlcyAgPSBhbWRfY2FsY19sM19pbmRpY2VzKCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwlpbnQgbm9kZSA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOworCXVuc2lnbmVkIGludCByZWcgPSAwOworCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHJlZyk7Cit9CisKKyNkZWZpbmUgU0hPV19DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzaG93X2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGluZGV4KTsJCVwKK30KK1NIT1dfQ0FDSEVfRElTQUJMRSgwKQorU0hPV19DQUNIRV9ESVNBQkxFKDEpCisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CisJaW50IG5vZGUgPSBhbWRfZ2V0X25iX2lkKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisKKyNkZWZpbmUgU1VCQ0FDSEVfTUFTSwkoM1VMIDw8IDIwKQorI2RlZmluZSBTVUJDQUNIRV9JTkRFWAkweGZmZgorCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZG8gbm90IGFsbG93IHdyaXRlcyBvdXRzaWRlIG9mIGFsbG93ZWQgYml0cyAqLworCWlmICgodmFsICYgfihTVUJDQUNIRV9NQVNLIHwgU1VCQ0FDSEVfSU5ERVgpKSB8fAorCSAgICAoKHZhbCAmIFNVQkNBQ0hFX0lOREVYKSA+IHRoaXNfbGVhZi0+bDNfaW5kaWNlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIHw9IEJJVCgzMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwpOworCS8qCisJICogV2UgbmVlZCB0byBXQklOVkQgb24gYSBjb3JlIG9uIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIEwzIGNhY2hlIHdoaWNoCisJICogaW5kaWNlcyB3ZSBkaXNhYmxlIHRoZXJlZm9yZSBhIHNpbXBsZSB3YmludmQoKSBpcyBub3Qgc3VmZmljaWVudC4KKwkgKi8KKwl3YmludmRfb25fY3B1KGNwdSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwgfCBCSVQoMzEpKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgU1RPUkVfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCitzdG9yZV9jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAkJXAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAorfQorU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQorU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQorCitzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMCA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzAsIDA2NDQsCisJCXNob3dfY2FjaGVfZGlzYWJsZV8wLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzApOworc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzEgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8xLCAwNjQ0LAorCQlzaG93X2NhY2hlX2Rpc2FibGVfMSwgc3RvcmVfY2FjaGVfZGlzYWJsZV8xKTsKKworI2Vsc2UJLyogQ09ORklHX0NQVV9TVVBfQU1EICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQKK2FtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCit7Cit9OworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworCiBzdGF0aWMgaW50CiBfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGludCBpbmRleCwKIAkJCQkgICBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKQEAgLTcxMSw4MiArODM3LDYgQEAKICNkZWZpbmUgdG9fb2JqZWN0KGspCWNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgX2luZGV4X2tvYmplY3QsIGtvYmopCiAjZGVmaW5lIHRvX2F0dHIoYSkJY29udGFpbmVyX29mKGEsIHN0cnVjdCBfY2FjaGVfYXR0ciwgYXR0cikKIAotc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmLAotCQkJCSAgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGludCByZWcgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgcmVnKTsKLX0KLQotI2RlZmluZSBTSE9XX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYpICAJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2hvd19jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBpbmRleCk7CQlcCi19Ci1TSE9XX0NBQ0hFX0RJU0FCTEUoMCkKLVNIT1dfQ0FDSEVfRElTQUJMRSgxKQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwKLQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgc2NydWJiZXIgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsIHw9IDB4YzAwMDAwMDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDU4LCAmc2NydWJiZXIpOwotCXNjcnViYmVyICY9IH4weDFmMDAwMDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDU4LCBzY3J1YmJlcik7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCAmIH4weDQwMDAwMDAwKTsKLQl3YmludmQoKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi0jZGVmaW5lIFNUT1JFX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc3RvcmVfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwJICAgICAJXAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAotfQotU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQotU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQotCi1zdHJ1Y3QgX2NhY2hlX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVfdCBjb3VudCk7Ci19OwotCiAjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpIFwKIHN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgX25hbWUgPSBcCiAJX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCkBAIC04MDEsMjMgKzg1MSwyOCBAQAogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X21hcCk7CiBkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbGlzdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8wID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMCwgMDY0NCwKLQkJc2hvd19jYWNoZV9kaXNhYmxlXzAsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMCk7Ci1zdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCi0JCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOworI2RlZmluZSBERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTCVwKKwkmdHlwZS5hdHRyLAkJCVwKKwkmbGV2ZWwuYXR0ciwJCQlcCisJJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwJXAorCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAlcCisJJndheXNfb2ZfYXNzb2NpYXRpdml0eS5hdHRyLAlcCisJJm51bWJlcl9vZl9zZXRzLmF0dHIsCQlcCisJJnNpemUuYXR0ciwJCQlcCisJJnNoYXJlZF9jcHVfbWFwLmF0dHIsCQlcCisJJnNoYXJlZF9jcHVfbGlzdC5hdHRyCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7Ci0JJnR5cGUuYXR0ciwKLQkmbGV2ZWwuYXR0ciwKLQkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLAotCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAotCSZ3YXlzX29mX2Fzc29jaWF0aXZpdHkuYXR0ciwKLQkmbnVtYmVyX29mX3NldHMuYXR0ciwKLQkmc2l6ZS5hdHRyLAotCSZzaGFyZWRfY3B1X21hcC5hdHRyLAotCSZzaGFyZWRfY3B1X2xpc3QuYXR0ciwKKwlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2wzX2F0dHJzW10gPSB7CisJREVGQVVMVF9TWVNGU19DQUNIRV9BVFRSUywKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKIAkmY2FjaGVfZGlzYWJsZV8wLmF0dHIsCiAJJmNhY2hlX2Rpc2FibGVfMS5hdHRyLAorI2VuZGlmCiAJTlVMTAogfTsKIApAQCAtOTA4LDYgKzk2Myw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAlzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKnRoaXNfb2JqZWN0OworCXN0cnVjdCBfY3B1aWQ0X2luZm8gICAqdGhpc19sZWFmOwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSBjcHVpZDRfY2FjaGVfc3lzZnNfaW5pdChjcHUpOwpAQCAtOTI2LDYgKzk4MiwxNCBAQAogCQl0aGlzX29iamVjdCA9IElOREVYX0tPQkpFQ1RfUFRSKGNwdSwgaSk7CiAJCXRoaXNfb2JqZWN0LT5jcHUgPSBjcHU7CiAJCXRoaXNfb2JqZWN0LT5pbmRleCA9IGk7CisKKwkJdGhpc19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGNwdSwgaSk7CisKKwkJaWYgKHRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCisJCQlrdHlwZV9jYWNoZS5kZWZhdWx0X2F0dHJzID0gZGVmYXVsdF9sM19hdHRyczsKKwkJZWxzZQorCQkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfYXR0cnM7CisKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCiAJCQkJCSAgICAgICZrdHlwZV9jYWNoZSwKIAkJCQkJICAgICAgcGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQppbmRleCBmNDM2MWI1Li5hZDllNWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAotb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBzdGF0ZS5vIGNsZWFudXAubworb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBjbGVhbnVwLm8KIG9iai0kKENPTkZJR19YODZfMzIpICs9IGFtZC5vIGN5cml4Lm8gY2VudGF1ci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwppbmRleCAzM2FmMTQxLi45MmJhOWNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBhbWRfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGFtZF9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0FNRCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBhbWRfc2V0X210cnIsCiAJLmdldCAgICAgICAgICAgICAgID0gYW1kX2dldF9tdHJyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKaW5kZXggZGU4OWYxNC4uMzE2ZmUzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQ0VOVEFVUiwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX3NldF9tY3IsCiAJLmdldCAgICAgICAgICAgICAgID0gY2VudGF1cl9nZXRfbWNyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMDliMTY5OC4uMDYxMzBiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CkBAIC0zNCwxMSArMzQsNiBAQAogCiAjaW5jbHVkZSAibXRyci5oIgogCi1zdHJ1Y3QgcmVzX3JhbmdlIHsKLQl1bnNpZ25lZCBsb25nCXN0YXJ0OwotCXVuc2lnbmVkIGxvbmcJZW5kOwotfTsKLQogc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKIAl1bnNpZ25lZCBsb25nCWJhc2VfcGZuOwogCXVuc2lnbmVkIGxvbmcJc2l6ZV9wZm47CkBAIC01Niw3ICs1MSw3IEBACiAvKiBTaG91bGQgYmUgcmVsYXRlZCB0byBNVFJSX1ZBUl9SQU5HRVMgbnVtcyAqLwogI2RlZmluZSBSQU5HRV9OVU0JCQkJMjU2CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEJCXJhbmdlW1JBTkdFX05VTV07CitzdGF0aWMgc3RydWN0IHJhbmdlIF9faW5pdGRhdGEJCXJhbmdlW1JBTkdFX05VTV07CiBzdGF0aWMgaW50IF9faW5pdGRhdGEJCQkJbnJfcmFuZ2U7CiAKIHN0YXRpYyBzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgX19pbml0ZGF0YQlyYW5nZV9zdGF0ZVtSQU5HRV9OVU1dOwpAQCAtNjQsMTUyICs1OSwxMSBAQAogc3RhdGljIGludCBfX2luaXRkYXRhIGRlYnVnX3ByaW50OwogI2RlZmluZSBEcHJpbnRrKHguLi4pIGRvIHsgaWYgKGRlYnVnX3ByaW50KSBwcmludGsoS0VSTl9ERUJVRyB4KTsgfSB3aGlsZSAoMCkKIAotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBPdXQgb2Ygc2xvdHM6ICovCi0JaWYgKG5yX3JhbmdlID49IFJBTkdFX05VTSkKLQkJcmV0dXJuIG5yX3JhbmdlOwotCi0JcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gc3RhcnQ7Ci0JcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IGVuZDsKLQotCW5yX3JhbmdlKys7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1hZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpOwotCi0JLyogVHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZTogKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7Ci0JCXVuc2lnbmVkIGxvbmcgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOwotCi0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJY29tbW9uX3N0YXJ0ID0gbWF4KHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4ocmFuZ2VbaV0uZW5kLCBlbmQpOwotCQlpZiAoY29tbW9uX3N0YXJ0ID4gY29tbW9uX2VuZCArIDEpCi0JCQljb250aW51ZTsKLQotCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOwotCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOwotCi0JCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7Ci0JCXJldHVybiBucl9yYW5nZTsKLQl9Ci0KLQkvKiBOZWVkIHRvIGFkZCBpdDogKi8KLQlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpLCBqOwotCi0JZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7Ci0JCWlmICghcmFuZ2Vbal0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKLQkJCXJhbmdlW2pdLmVuZCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgewotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIEZpbmQgdGhlIG5ldyBzcGFyZTogKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaSA8IFJBTkdFX05VTSkgewotCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKLQkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAicnVuIG9mIHNsb3QgaW4gcmFuZ2VzXG4iKTsKLQkJCX0KLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQotewotCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIxID0geDE7Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjIgPSB4MjsKLQlsb25nIHN0YXJ0MSwgc3RhcnQyOwotCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsZWFuX3NvcnRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBheikKLXsKLQlpbnQgaSwgaiwgayA9IGF6IC0gMSwgbnJfcmFuZ2UgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGs7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0JCWZvciAoaiA9IGs7IGogPiBpOyBqLS0pIHsKLQkJCWlmIChyYW5nZVtqXS5lbmQpIHsKLQkJCQlrID0gajsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoaiA9PSBpKQotCQkJYnJlYWs7Ci0JCXJhbmdlW2ldLnN0YXJ0ID0gcmFuZ2Vba10uc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCAgID0gcmFuZ2Vba10uZW5kOwotCQlyYW5nZVtrXS5zdGFydCA9IDA7Ci0JCXJhbmdlW2tdLmVuZCAgID0gMDsKLQkJay0tOwotCX0KLQkvKiBjb3VudCBpdCAqLwotCWZvciAoaSA9IDA7IGkgPCBhejsgaSsrKSB7Ci0JCWlmICghcmFuZ2VbaV0uZW5kKSB7Ci0JCQlucl9yYW5nZSA9IGk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIHNvcnQgdGhlbSAqLwotCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KICNkZWZpbmUgQklPU19CVUdfTVNHIEtFUk5fV0FSTklORyBcCiAJIldBUk5JTkc6IEJJT1MgYnVnOiBWQVIgTVRSUiAlZCBjb250YWlucyBzdHJhbmdlIFVDIGVudHJ5IHVuZGVyIDFNLCBjaGVjayB3aXRoIHlvdXIgc3lzdGVtIHZlbmRvciFcbiIKIAogc3RhdGljIGludCBfX2luaXQKLXg4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKK3g4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX3NpemUpCiB7CkBAIC0yMjMsMTQgKzc3LDE0IEBACiAJCQljb250aW51ZTsKIAkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOwogCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCBiYXNlLAotCQkJCQkJYmFzZSArIHNpemUgLSAxKTsKKwkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgUkFOR0VfTlVNLCBucl9yYW5nZSwKKwkJCQkJCWJhc2UsIGJhc2UgKyBzaXplKTsKIAl9CiAJaWYgKGRlYnVnX3ByaW50KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBXQiBjaGVja2luZ1xuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJfQogCiAJLyogVGFrZSBvdXQgVUMgcmFuZ2VzOiAqLwpAQCAtMjUyLDE5ICsxMDYsMTkgQEAKIAkJCXNpemUgLT0gKDE8PCgyMC1QQUdFX1NISUZUKSkgLSBiYXNlOwogCQkJYmFzZSA9IDE8PCgyMC1QQUdFX1NISUZUKTsKIAkJfQotCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgYmFzZSwgYmFzZSArIHNpemUgLSAxKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgYmFzZSwgYmFzZSArIHNpemUpOwogCX0KIAlpZiAoZXh0cmFfcmVtb3ZlX3NpemUpCi0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkgZXh0cmFfcmVtb3ZlX2Jhc2UgKyBleHRyYV9yZW1vdmVfc2l6ZSAgLSAxKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCQkJIGV4dHJhX3JlbW92ZV9iYXNlICsgZXh0cmFfcmVtb3ZlX3NpemUpOwogCiAJaWYgIChkZWJ1Z19wcmludCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgVUMgY2hlY2tpbmdcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKIAkJCWlmICghcmFuZ2VbaV0uZW5kKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJCX0KIAl9CiAKQEAgLTI3MywyNiArMTI3LDIyIEBACiAJaWYgIChkZWJ1Z19wcmludCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgc29ydGluZ1xuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJfQogCi0JLyogY2xlYXIgdGhvc2UgaXMgbm90IHVzZWQgKi8KLQlmb3IgKGkgPSBucl9yYW5nZTsgaSA8IFJBTkdFX05VTTsgaSsrKQotCQltZW1zZXQoJnJhbmdlW2ldLCAwLCBzaXplb2YocmFuZ2VbaV0pKTsKLQogCXJldHVybiBucl9yYW5nZTsKIH0KIAogI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bV9yYW5nZXMoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQogewogCXVuc2lnbmVkIGxvbmcgc3VtID0gMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQlzdW0gKz0gcmFuZ2VbaV0uZW5kICsgMSAtIHJhbmdlW2ldLnN0YXJ0OworCQlzdW0gKz0gcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQ7CiAKIAlyZXR1cm4gc3VtOwogfQpAQCAtNjIxLDcgKzQ3MSw3IEBACiBlYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7CiAKIHN0YXRpYyBpbnQgX19pbml0Ci14ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCit4ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKIAkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQogewogCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7CkBAIC02MzksNyArNDg5LDcgQEAKIAkvKiBXcml0ZSB0aGUgcmFuZ2U6ICovCiAJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKIAkJc2V0X3Zhcl9tdHJyX3JhbmdlKCZ2YXJfc3RhdGUsIHJhbmdlW2ldLnN0YXJ0LAotCQkJCSAgIHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0ICsgMSk7CisJCQkJICAgcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQpOwogCX0KIAogCS8qIFdyaXRlIHRoZSBsYXN0IHJhbmdlOiAqLwpAQCAtNzQyLDcgKzU5Miw3IEBACiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgeF9yZW1vdmVfYmFzZSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyB4X3JlbW92ZV9zaXplLCBpbnQgaSkKIHsKLQlzdGF0aWMgc3RydWN0IHJlc19yYW5nZSByYW5nZV9uZXdbUkFOR0VfTlVNXTsKKwlzdGF0aWMgc3RydWN0IHJhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOwogCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7CiAJc3RhdGljIGludCBucl9yYW5nZV9uZXc7CiAJaW50IG51bV9yZWc7CkBAIC04NjksMTAgKzcxOSwxMCBAQAogCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcmVkIGJ5IHZhciBtdHJyIHdpdGggV0IKIAkgKiBhbmQgZml4ZWQgbXRycnMgc2hvdWxkIHRha2UgZWZmZWN0IGJlZm9yZSB2YXIgbXRyciBmb3IgaXQ6CiAJICovCi0JbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCi0JCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKKwlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBSQU5HRV9OVU0sIG5yX3JhbmdlLCAwLAorCQkJCQkxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSk7CiAJLyogU29ydCB0aGUgcmFuZ2VzOiAqLwotCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CisJc29ydF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UpOwogCiAJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKIAlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKQEAgLTEwODksOSArOTM5LDkgQEAKIAlucl9yYW5nZSA9IDA7CiAJaWYgKG10cnJfdG9tMikgewogCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOwotCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7Ci0JCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQotCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKKwkJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IG10cnJfdG9tMiA+PiBQQUdFX1NISUZUOworCQlpZiAoaGlnaGVzdF9wZm4gPCByYW5nZVtucl9yYW5nZV0uZW5kKQorCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kOwogCQlucl9yYW5nZSsrOwogCX0KIAlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLCAwKTsKQEAgLTExMDMsMTUgKzk1MywxNSBAQAogCiAJLyogQ2hlY2sgdGhlIGhvbGVzOiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCi0JCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAorCQlpZiAocmFuZ2VbaV0uZW5kIDwgcmFuZ2VbaSsxXS5zdGFydCkKKwkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCwKIAkJCQkJCQkgICAgcmFuZ2VbaSsxXS5zdGFydCk7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHRvcDogKi8KIAlpID0gbnJfcmFuZ2UgLSAxOwotCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgZW5kX3BmbikKLQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKKwlpZiAocmFuZ2VbaV0uZW5kIDwgZW5kX3BmbikKKwkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kLAogCQkJCQkJCSBlbmRfcGZuKTsKIAogCWlmICh0b3RhbF90cmltX3NpemUpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKaW5kZXggMjI4ZDk4Mi4uNjhhMzM0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXBvc3Rfc2V0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgY3lyaXhfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGN5cml4X210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQ1lSSVgsCiAJLnNldF9hbGwJICAgPSBjeXJpeF9zZXRfYWxsLAogCS5zZXQgICAgICAgICAgICAgICA9IGN5cml4X3NldF9hcnIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCA1NWRhMGM1Zi4uOWFhNWRjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkJdG1wIHw9IH4oKDE8PChoaSAtIDEpKSAtIDEpOwogCiAJCWlmICh0bXAgIT0gbWFza19sbykgewotCQkJV0FSTl9PTkNFKDEsIEtFUk5fSU5GTyAibXRycjogeW91ciBCSU9TIGhhcyBzZXQgdXAgYW4gaW5jb3JyZWN0IG1hc2ssIGZpeGluZyBpdCB1cC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogeW91ciBCSU9TIGhhcyBjb25maWd1cmVkIGFuIGluY29ycmVjdCBtYXNrLCBmaXhpbmcgaXQuXG4iKTsKIAkJCW1hc2tfbG8gPSB0bXA7CiAJCX0KIAl9CkBAIC01NzAsNyArNTcwLDcgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcjQ7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNldF9hdG9taWNpdHlfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzZXRfYXRvbWljaXR5X2xvY2spOwogCiAvKgogICogU2luY2Ugd2UgYXJlIGRpc2FibGluZyB0aGUgY2FjaGUgZG9uJ3QgYWxsb3cgYW55IGludGVycnVwdHMsCkBAIC01OTAsNyArNTkwLDcgQEAKIAkgKiBjaGFuZ2VzIHRvIHRoZSB3YXkgdGhlIGtlcm5lbCBib290cwogCSAqLwogCi0Jc3Bpbl9sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOworCXJhd19zcGluX2xvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CiAKIAkvKiBFbnRlciB0aGUgbm8tZmlsbCAoQ0Q9MSwgTlc9MCkgY2FjaGUgbW9kZSBhbmQgZmx1c2ggY2FjaGVzLiAqLwogCWNyMCA9IHJlYWRfY3IwKCkgfCBYODZfQ1IwX0NEOwpAQCAtNjI3LDcgKzYyNyw3IEBACiAJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KIAlpZiAoY3B1X2hhc19wZ2UpCiAJCXdyaXRlX2NyNChjcjQpOwotCXNwaW5fdW5sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOworCXJhd19zcGluX3VubG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJpY19zZXRfYWxsKHZvaWQpCkBAIC03NTIsNyArNzUyLDcgQEAKIC8qCiAgKiBHZW5lcmljIHN0cnVjdHVyZS4uLgogICovCi1zdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzID0gewogCS51c2VfaW50ZWxfaWYJCT0gMSwKIAkuc2V0X2FsbAkJPSBnZW5lcmljX3NldF9hbGwsCiAJLmdldAkJCT0gZ2VuZXJpY19nZXRfbXRyciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDg0ZTgzZGUuLmZlNDYyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNjAsMTQgKzYwLDE0IEBACiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwogc3RhdGljIGJvb2wgbXRycl9hcHNfZGVsYXllZF9pbml0OwogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzICptdHJyX29wc1tYODZfVkVORE9SX05VTV07CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzICptdHJyX29wc1tYODZfVkVORE9SX05VTV07CiAKLXN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKK2NvbnN0IHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKIAogc3RhdGljIHZvaWQgc2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpOwogCi12b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcykKK3ZvaWQgc2V0X210cnJfb3BzKGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqb3BzKQogewogCWlmIChvcHMtPnZlbmRvciAmJiBvcHMtPnZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKQogCQltdHJyX29wc1tvcHMtPnZlbmRvcl0gPSBvcHM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCBhNTAxZGVlLi5kZjVlNDFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY192YWxpZGF0ZV9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICAgIHVuc2lnbmVkIGludCB0eXBlKTsKIAotZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzOwogCiBleHRlcm4gaW50IHBvc2l0aXZlX2hhdmVfd3Jjb21iKHZvaWQpOwogCkBAIC01MywxMCArNTMsMTAgQEAKIAkJdTMyIGJhc2VfbG8sIHUzMiBiYXNlX2hpLCB1MzIgbWFza19sbywgdTMyIG1hc2tfaGkpOwogdm9pZCBnZXRfbXRycl9zdGF0ZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqb3BzKTsKK2V4dGVybiB2b2lkIHNldF9tdHJyX29wcyhjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm9wcyk7CiAKIGV4dGVybiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwotZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CiAKICNkZWZpbmUgaXNfY3B1KHZuZCkJKG10cnJfaWYgJiYgbXRycl9pZi0+dmVuZG9yID09IFg4Nl9WRU5ET1JfIyN2bmQpCiAjZGVmaW5lIHVzZV9pbnRlbCgpCShtdHJyX2lmICYmIG10cnJfaWYtPnVzZV9pbnRlbF9pZiA9PSAxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjODBiNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLQotI2luY2x1ZGUgIm10cnIuaCIKLQotLyogUHV0IHRoZSBwcm9jZXNzb3IgaW50byBhIHN0YXRlIHdoZXJlIE1UUlJzIGNhbiBiZSBzYWZlbHkgc2V0ICovCi12b2lkIHNldF9tdHJyX3ByZXBhcmVfc2F2ZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBpbnQgY3IwOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgKi8KLQlsb2NhbF9pcnFfc2F2ZShjdHh0LT5mbGFncyk7Ci0KLQlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewotCi0JCS8qIFNhdmUgdmFsdWUgb2YgQ1I0IGFuZCBjbGVhciBQYWdlIEdsb2JhbCBFbmFibGUgKGJpdCA3KSAqLwotCQlpZiAoY3B1X2hhc19wZ2UpIHsKLQkJCWN0eHQtPmNyNHZhbCA9IHJlYWRfY3I0KCk7Ci0JCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsICYgflg4Nl9DUjRfUEdFKTsKLQkJfQotCi0JCS8qCi0JCSAqIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4gTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzCi0JCSAqIGFzIGEgc2lkZS1lZmZlY3QKLQkJICovCi0JCWNyMCA9IHJlYWRfY3IwKCkgfCBYODZfQ1IwX0NEOwotCQl3YmludmQoKTsKLQkJd3JpdGVfY3IwKGNyMCk7Ci0JCXdiaW52ZCgpOwotCi0JCWlmICh1c2VfaW50ZWwoKSkgewotCQkJLyogU2F2ZSBNVFJSIHN0YXRlICovCi0JCQlyZG1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sIGN0eHQtPmRlZnR5cGVfaGkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEN5cml4IEFSUnMgLQotCQkJICogZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcAotCQkJICovCi0JCQljdHh0LT5jY3IzID0gZ2V0Q3g4NihDWDg2X0NDUjMpOwotCQl9Ci0JfQotfQotCi12b2lkIHNldF9tdHJyX2NhY2hlX2Rpc2FibGUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JaWYgKHVzZV9pbnRlbCgpKSB7Ci0JCS8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLwotCQltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbyAmIDB4ZjMwMFVMLAotCQkgICAgICBjdHh0LT5kZWZ0eXBlX2hpKTsKLQl9IGVsc2UgewotCQlpZiAoaXNfY3B1KENZUklYKSkgewotCQkJLyogQ3lyaXggQVJScyAtIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY3R4dC0+Y2NyMyAmIDB4MGYpIHwgMHgxMCk7Ci0JCX0KLQl9Ci19Ci0KLS8qIFJlc3RvcmUgdGhlIHByb2Nlc3NvciBhZnRlciBhIHNldF9tdHJyX3ByZXBhcmUgKi8KLXZvaWQgc2V0X210cnJfZG9uZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKLXsKLQlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewotCi0JCS8qIEZsdXNoIGNhY2hlcyBhbmQgVExCcyAqLwotCQl3YmludmQoKTsKLQotCQkvKiBSZXN0b3JlIE1UUlJkZWZUeXBlICovCi0JCWlmICh1c2VfaW50ZWwoKSkgewotCQkJLyogSW50ZWwgKFA2KSBzdGFuZGFyZCBNVFJScyAqLwotCQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sCi0JCQkJICAgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ3lyaXggQVJScyAtCi0JCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKLQkJCSAqLwotCQkJc2V0Q3g4NihDWDg2X0NDUjMsIGN0eHQtPmNjcjMpOwotCQl9Ci0KLQkJLyogRW5hYmxlIGNhY2hlcyAqLwotCQl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwotCi0JCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCi0JCWlmIChjcHVfaGFzX3BnZSkKLQkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwpOwotCX0KLQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyBsb2NhbGx5IChpZiBlbmFibGVkIHByZXZpb3VzbHkpICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoY3R4dC0+ZmxhZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA4YzFjMDcwLi42NDFjY2I5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtNyw2ICs3LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuLCBTdGVwaGFuZSBFcmFuaWFuCiAgKgogICogIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORwogICovCkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KQEAgLTY4LDI2ICs3MCw1OSBAQAogCXU2NAlwZWJzX2V2ZW50X3Jlc2V0W01BWF9QRUJTX0VWRU5UU107CiB9OwogCitzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCB7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nCWlkeG1za1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOworCQl1NjQJCWlkeG1zazY0WzFdOworCX07CisJaW50CWNvZGU7CisJaW50CWNtYXNrOworCWludAl3ZWlnaHQ7Cit9OworCitzdHJ1Y3QgYW1kX25iIHsKKwlpbnQgbmJfaWQ7ICAvKiBOb3J0aEJyaWRnZSBpZCAqLworCWludCByZWZjbnQ7IC8qIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCBwZXJmX2V2ZW50ICpvd25lcnNbWDg2X1BNQ19JRFhfTUFYXTsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBldmVudF9jb25zdHJhaW50c1tYODZfUE1DX0lEWF9NQVhdOworfTsKKwogc3RydWN0IGNwdV9od19ldmVudHMgewotCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbWDg2X1BNQ19JRFhfTUFYXTsKLQl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW1g4Nl9QTUNfSURYX01BWF07IC8qIGluIGNvdW50ZXIgb3JkZXIgKi8KIAl1bnNpZ25lZCBsb25nCQlhY3RpdmVfbWFza1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOwogCXVuc2lnbmVkIGxvbmcJCWludGVycnVwdHM7CiAJaW50CQkJZW5hYmxlZDsKIAlzdHJ1Y3QgZGVidWdfc3RvcmUJKmRzOworCisJaW50CQkJbl9ldmVudHM7CisJaW50CQkJbl9hZGRlZDsKKwlpbnQJCQlhc3NpZ25bWDg2X1BNQ19JRFhfTUFYXTsgLyogZXZlbnQgdG8gY291bnRlciBhc3NpZ25tZW50ICovCisJdTY0CQkJdGFnc1tYODZfUE1DX0lEWF9NQVhdOworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudF9saXN0W1g4Nl9QTUNfSURYX01BWF07IC8qIGluIGVuYWJsZWQgb3JkZXIgKi8KKwlzdHJ1Y3QgYW1kX25iCQkqYW1kX25iOwogfTsKIAotc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgewotCXVuc2lnbmVkIGxvbmcJaWR4bXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07Ci0JaW50CQljb2RlOwotfTsKKyNkZWZpbmUgX19FVkVOVF9DT05TVFJBSU5UKGMsIG4sIG0sIHcpIHtcCisJeyAuaWR4bXNrNjRbMF0gPSAobikgfSwJCVwKKwkuY29kZSA9IChjKSwJCQlcCisJLmNtYXNrID0gKG0pLAkJCVwKKwkud2VpZ2h0ID0gKHcpLAkJCVwKK30KIAotI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UKGMsIG0pIHsgLmNvZGUgPSAoYyksIC5pZHhtc2tbMF0gPSAobSkgfQotI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORCAgeyAuY29kZSA9IDAsIC5pZHhtc2tbMF0gPSAwIH0KKyNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtKQlcCisJX19FVkVOVF9DT05TVFJBSU5UKGMsIG4sIG0sIEhXRUlHSFQobikpCiAKLSNkZWZpbmUgZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChlLCBjKSBcCi0JZm9yICgoZSkgPSAoYyk7IChlKS0+aWR4bXNrWzBdOyAoZSkrKykKKyNkZWZpbmUgSU5URUxfRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCisJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCisjZGVmaW5lIEZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoYywgbikJXAorCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9GSVhFRF9NQVNLKQorCisjZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlRfRU5ECQlcCisJRVZFTlRfQ09OU1RSQUlOVCgwLCAwLCAwKQorCisjZGVmaW5lIGZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoZSwgYykJXAorCWZvciAoKGUpID0gKGMpOyAoZSktPmNtYXNrOyAoZSkrKykKIAogLyoKICAqIHN0cnVjdCB4ODZfcG11IC0gZ2VuZXJpYyB4ODYgcG11CkBAIC0xMTQsOCArMTQ5LDE0IEBACiAJdTY0CQlpbnRlbF9jdHJsOwogCXZvaWQJCSgqZW5hYmxlX2J0cykodTY0IGNvbmZpZyk7CiAJdm9pZAkJKCpkaXNhYmxlX2J0cykodm9pZCk7Ci0JaW50CQkoKmdldF9ldmVudF9pZHgpKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAotCQkJCQkgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3Yyk7CisKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCisJCQkoKmdldF9ldmVudF9jb25zdHJhaW50cykoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKworCXZvaWQJCSgqcHV0X2V2ZW50X2NvbnN0cmFpbnRzKShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50czsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSB4ODZfcG11IF9fcmVhZF9tb3N0bHk7CkBAIC0xMjQsMTExICsxNjUsOCBAQAogCS5lbmFibGVkID0gMSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludHM7Ci0KLS8qCi0gKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLSAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAotfTsKLQotc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQotCi0vKgotICogRXZlbnQgc2V0dGluZyB0aGF0IGlzIHNwZWNpZmllZCBub3QgdG8gY291bnQgYW55dGhpbmcuCi0gKiBXZSB1c2UgdGhpcyB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGEgY291bnRlci4KLSAqCi0gKiBMMl9SUVNUUyB3aXRoIDAgTUVTSSB1bml0IG1hc2suCi0gKi8KLSNkZWZpbmUgUDZfTk9QX0VWRU5UCQkJMHgwMDAwMDAyRVVMTAotCi1zdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQotewotI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCi0KLSNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAotCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCi0JIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKLQkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCi0JIFA2X0VWTlRTRUxfUkVHX01BU0spCi0KLQlyZXR1cm4gaHdfZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50c1tdID0KLXsKLQlFVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksCS8qIEZMT1BTICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MSksCS8qIEZQX0FTU0lTVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLwotCUVWRU5UX0NPTlNUUkFJTlRfRU5ECi19OwotCi0vKgotICogSW50ZWwgUGVyZk1vbiB2My4gVXNlZCBvbiBDb3JlMiBhbmQgbGF0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDAzYywKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHg0ZjJlLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4NDEyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLSAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMTNjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksCS8qIEZQX0FTU0lTVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxOCwgMHgxKSwJLyogSURMRV9EVVJJTkdfRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLAkvKiBERUxBWUVEX0JZUEFTUyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHhhMSwgMHgxKSwJLyogUlNfVU9QU19ESVNQQVRDSF9DWUNMRVMgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksCS8qIE1FTV9MT0FEX1JFVElSRUQgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweDQwLCAweDMpLAkvKiBMMURfQ0FDSEVfTEQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDEsIDB4MyksCS8qIEwxRF9DQUNIRV9TVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MiwgMHgzKSwJLyogTDFEX0NBQ0hFX0xPQ0sgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDMsIDB4MyksCS8qIEwxRF9BTExfUkVGICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDRlLCAweDMpLAkvKiBMMURfUFJFRkVUQ0ggKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NGMsIDB4MyksCS8qIExPQURfSElUX1BSRSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg1MSwgMHgzKSwJLyogTDFEICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDUyLCAweDMpLAkvKiBMMURfQ0FDSEVfUFJFRkVUQ0hfTE9DS19GQl9ISVQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NTMsIDB4MyksCS8qIEwxRF9DQUNIRV9MT0NLX0ZCX0hJVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHhjNSwgMHgzKSwJLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotc3RhdGljIHU2NCBpbnRlbF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQorc3RhdGljIGludCB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCk7CiAKIC8qCiAgKiBHZW5lcmFsaXplZCBodyBjYWNoaW5nIHJlbGF0ZWQgaHdfZXZlbnQgdGFibGUsIGZpbGxlZApAQCAtMjQ1LDQyNCArMTgzLDYgQEAKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CiAKLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLwotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgIChhbGlhcykgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgIChhbGlhcykgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgyMGM4LCAvKiBJVExCX01JU1NfUkVUSVJFRCAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgxMDRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgxMjgyLCAvKiBJVExCTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgYXRvbV9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFLkxEICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFLlNUICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDUwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MiwgLyogSVRMQi5NSVNTRVMgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgdTY0IGludGVsX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQotewotI2RlZmluZSBDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAotCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9NQVNLCQlcCi0JKENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKLQkgQ09SRV9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9JTlZfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9SRUdfTUFTSykKLQotCXJldHVybiBod19ldmVudCAmIENPUkVfRVZOVFNFTF9NQVNLOwotfQotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTQyLCAvKiBEYXRhIENhY2hlIFJlZmlsbHMgOnN5c3RlbSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmF0dGVtcHRzICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE2NywgLyogRGF0YSBQcmVmZXRjaGVyIDpjYW5jZWxsZWQgKi8KLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNEIsIC8qIFByZWZldGNoIEluc3RydWN0aW9ucyA6TG9hZCAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM3RCwgLyogUmVxdWVzdHMgdG8gTDIgQ2FjaGUgOklDK0RDICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMzdFLCAvKiBMMiBDYWNoZSBNaXNzZXMgOiBJQytEQyAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxN0YsIC8qIEwyIEZpbGwvV3JpdGViYWNrICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQ2LCAvKiBMMSBEVExCIGFuZCBMMiBETFRCIE1pc3MgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gZmVjdGhlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODUsIC8qIEluc3RyLiBmZXRjaCBJVExCIG1pc3NlcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMiwgLyogUmV0aXJlZCBCcmFuY2ggSW5zdHIuICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzMsIC8qIFJldGlyZWQgTWlzcHJlZGljdGVkIEJJICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotLyoKLSAqIEFNRCBQZXJmb3JtYW5jZSBNb25pdG9yIEs3IGFuZCBsYXRlci4KLSAqLwotc3RhdGljIGNvbnN0IHU2NCBhbWRfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3NiwKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwMDgwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDA4MSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLX07Ci0KLXN0YXRpYyB1NjQgYW1kX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQotewotCXJldHVybiBhbWRfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQotCi1zdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4NzAwMDAwMEZGVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAotCi0jZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKLQkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBLN19FVk5UU0VMX1JFR19NQVNLKQotCi0JcmV0dXJuIGh3X2V2ZW50ICYgSzdfRVZOVFNFTF9NQVNLOwotfQotCiAvKgogICogUHJvcGFnYXRlIGV2ZW50IGVsYXBzZWQgdGltZSBpbnRvIHRoZSBnZW5lcmljIGV2ZW50LgogICogQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSB3aGVyZSB0aGUgZXZlbnQgaXMgYWN0aXZlLgpAQCAtOTE0LDQyICs0MzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2J0cyh1NjQgY29uZmlnKQotewotCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7Ci0KLQlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOwotCi0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX1RSOwotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFM7Ci0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUSU5UOwotCi0JaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1M7Ci0KLQlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSOwotCi0JdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYnRzKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOwotCi0JaWYgKCFjcHVjLT5kcykKLQkJcmV0dXJuOwotCi0JZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKLQotCWRlYnVnY3RsbXNyICY9Ci0JCX4oWDg2X0RFQlVHQ1RMX1RSIHwgWDg2X0RFQlVHQ1RMX0JUUyB8IFg4Nl9ERUJVR0NUTF9CVElOVCB8Ci0JCSAgWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1MgfCBYODZfREVCVUdDVExfQlRTX09GRl9VU1IpOwotCi0JdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKLX0KLQogLyoKICAqIFNldHVwIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGF0dHJfdHlwZQogICovCkBAIC05ODgsNiArNDcyLDggQEAKIAlod2MtPmNvbmZpZyA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQ7CiAKIAlod2MtPmlkeCA9IC0xOworCWh3Yy0+bGFzdF9jcHUgPSAtMTsKKwlod2MtPmxhc3RfdGFnID0gfjBVTEw7CiAKIAkvKgogCSAqIENvdW50IHVzZXIgYW5kIE9TIGV2ZW50cyB1bmxlc3MgcmVxdWVzdGVkIG5vdCB0by4KQEAgLTEwNTYsMTI2ICs1NDIsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcDZfcG11X2Rpc2FibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1NjQgdmFsOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCi0JcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlpZiAoIWNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAwOwotCWJhcnJpZXIoKTsKLQotCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTsKLQotCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKLQlpZiAoIWNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAwOwotCS8qCi0JICogZW5zdXJlIHdlIHdyaXRlIHRoZSBkaXNhYmxlIGJlZm9yZSB3ZSBzdGFydCBkaXNhYmxpbmcgdGhlCi0JICogZXZlbnRzIHByb3Blciwgc28gdGhhdCBhbWRfcG11X2VuYWJsZV9ldmVudCgpIGRvZXMgdGhlCi0JICogcmlnaHQgdGhpbmcuCi0JICovCi0JYmFycmllcigpOwotCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXU2NCB2YWw7CiAKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwotCQlyZG1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQlyZG1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAkJaWYgKCEodmFsICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpKQogCQkJY29udGludWU7CiAJCXZhbCAmPSB+QVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0JCXdybXNybChNU1JfSzdfRVZOVFNFTDAgKyBpZHgsIHZhbCk7CisJCXdybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCB2YWwpOwogCX0KIH0KIAogdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKIHsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCiAJaWYgKCF4ODZfcG11X2luaXRpYWxpemVkKCkpCiAJCXJldHVybjsKLQlyZXR1cm4geDg2X3BtdS5kaXNhYmxlX2FsbCgpOwotfQogCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwlpZiAoIWNwdWMtPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCWNwdWMtPmVuYWJsZWQgPSAxOworCWNwdWMtPm5fYWRkZWQgPSAwOworCWNwdWMtPmVuYWJsZWQgPSAwOwogCWJhcnJpZXIoKTsKIAotCS8qIHA2IG9ubHkgaGFzIG9uZSBlbmFibGUgcmVnaXN0ZXIgKi8KLQlyZG1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOwotCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOworCXg4Nl9wbXUuZGlzYWJsZV9hbGwoKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAxOwotCWJhcnJpZXIoKTsKLQotCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCB4ODZfcG11LmludGVsX2N0cmwpOwotCi0JaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9Ci0JCQljcHVjLT5ldmVudHNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKLQotCQlpZiAoV0FSTl9PTl9PTkNFKCFldmVudCkpCi0JCQlyZXR1cm47Ci0KLQkJaW50ZWxfcG11X2VuYWJsZV9idHMoZXZlbnQtPmh3LmNvbmZpZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZW5hYmxlX2FsbCh2b2lkKQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJaW50IGlkeDsKIAotCWlmIChjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMTsKLQliYXJyaWVyKCk7Ci0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CiAJCXU2NCB2YWw7CkBAIC0xMTg1LDMyICs1OTEsMjY2IEBACiAKIAkJdmFsID0gZXZlbnQtPmh3LmNvbmZpZzsKIAkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQl3cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfeDg2X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZXZlbnQtPnBtdSA9PSAmcG11OworfQorCitzdGF0aWMgaW50IHg4Nl9zY2hlZHVsZV9ldmVudHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBuLCBpbnQgKmFzc2lnbikKK3sKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYywgKmNvbnN0cmFpbnRzW1g4Nl9QTUNfSURYX01BWF07CisJdW5zaWduZWQgbG9uZyB1c2VkX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwlpbnQgaSwgaiwgdywgd21heCwgbnVtID0gMDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJYml0bWFwX3plcm8odXNlZF9tYXNrLCBYODZfUE1DX0lEWF9NQVgpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljb25zdHJhaW50c1tpXSA9CisJCSAgeDg2X3BtdS5nZXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgY3B1Yy0+ZXZlbnRfbGlzdFtpXSk7CisJfQorCisJLyoKKwkgKiBmYXN0cGF0aCwgdHJ5IHRvIHJldXNlIHByZXZpb3VzIHJlZ2lzdGVyCisJICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlod2MgPSAmY3B1Yy0+ZXZlbnRfbGlzdFtpXS0+aHc7CisJCWMgPSBjb25zdHJhaW50c1tpXTsKKworCQkvKiBuZXZlciBhc3NpZ25lZCAqLworCQlpZiAoaHdjLT5pZHggPT0gLTEpCisJCQlicmVhazsKKworCQkvKiBjb25zdHJhaW50IHN0aWxsIGhvbm9yZWQgKi8KKwkJaWYgKCF0ZXN0X2JpdChod2MtPmlkeCwgYy0+aWR4bXNrKSkKKwkJCWJyZWFrOworCisJCS8qIG5vdCBhbHJlYWR5IHVzZWQgKi8KKwkJaWYgKHRlc3RfYml0KGh3Yy0+aWR4LCB1c2VkX21hc2spKQorCQkJYnJlYWs7CisKKwkJc2V0X2JpdChod2MtPmlkeCwgdXNlZF9tYXNrKTsKKwkJaWYgKGFzc2lnbikKKwkJCWFzc2lnbltpXSA9IGh3Yy0+aWR4OworCX0KKwlpZiAoaSA9PSBuKQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIGJlZ2luIHNsb3cgcGF0aAorCSAqLworCisJYml0bWFwX3plcm8odXNlZF9tYXNrLCBYODZfUE1DX0lEWF9NQVgpOworCisJLyoKKwkgKiB3ZWlnaHQgPSBudW1iZXIgb2YgcG9zc2libGUgY291bnRlcnMKKwkgKgorCSAqIDEgICAgPSBtb3N0IGNvbnN0cmFpbmVkLCBvbmx5IHdvcmtzIG9uIG9uZSBjb3VudGVyCisJICogd21heCA9IGxlYXN0IGNvbnN0cmFpbmVkLCB3b3JrcyBvbiBhbnkgY291bnRlcgorCSAqCisJICogYXNzaWduIGV2ZW50cyB0byBjb3VudGVycyBzdGFydGluZyB3aXRoIG1vc3QKKwkgKiBjb25zdHJhaW5lZCBldmVudHMuCisJICovCisJd21heCA9IHg4Nl9wbXUubnVtX2V2ZW50czsKKworCS8qCisJICogd2hlbiBmaXhlZCBldmVudCBjb3VudGVycyBhcmUgcHJlc2VudCwKKwkgKiB3bWF4IGlzIGluY3JlbWVudGVkIGJ5IDEgdG8gYWNjb3VudAorCSAqIGZvciBvbmUgbW9yZSBjaG9pY2UKKwkgKi8KKwlpZiAoeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkKQorCQl3bWF4Kys7CisKKwlmb3IgKHcgPSAxLCBudW0gPSBuOyBudW0gJiYgdyA8PSB3bWF4OyB3KyspIHsKKwkJLyogZm9yIGVhY2ggZXZlbnQgKi8KKwkJZm9yIChpID0gMDsgbnVtICYmIGkgPCBuOyBpKyspIHsKKwkJCWMgPSBjb25zdHJhaW50c1tpXTsKKwkJCWh3YyA9ICZjcHVjLT5ldmVudF9saXN0W2ldLT5odzsKKworCQkJaWYgKGMtPndlaWdodCAhPSB3KQorCQkJCWNvbnRpbnVlOworCisJCQlmb3JfZWFjaF9iaXQoaiwgYy0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJCQlpZiAoIXRlc3RfYml0KGosIHVzZWRfbWFzaykpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaiA9PSBYODZfUE1DX0lEWF9NQVgpCisJCQkJYnJlYWs7CisKKwkJCXNldF9iaXQoaiwgdXNlZF9tYXNrKTsKKworCQkJaWYgKGFzc2lnbikKKwkJCQlhc3NpZ25baV0gPSBqOworCQkJbnVtLS07CisJCX0KKwl9Citkb25lOgorCS8qCisJICogc2NoZWR1bGluZyBmYWlsZWQgb3IgaXMganVzdCBhIHNpbXVsYXRpb24sCisJICogZnJlZSByZXNvdXJjZXMgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKCFhc3NpZ24gfHwgbnVtKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmICh4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cykKKwkJCQl4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBjcHVjLT5ldmVudF9saXN0W2ldKTsKKwkJfQorCX0KKwlyZXR1cm4gbnVtID8gLUVOT1NQQyA6IDA7Cit9CisKKy8qCisgKiBkb2dycDogdHJ1ZSBpZiBtdXN0IGNvbGxlY3Qgc2libGluZ3MgZXZlbnRzIChncm91cCkKKyAqIHJldHVybnMgdG90YWwgbnVtYmVyIG9mIGV2ZW50cyBhbmQgZXJyb3IgY29kZQorICovCitzdGF0aWMgaW50IGNvbGxlY3RfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyLCBib29sIGRvZ3JwKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlpbnQgbiwgbWF4X2NvdW50OworCisJbWF4X2NvdW50ID0geDg2X3BtdS5udW1fZXZlbnRzICsgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkOworCisJLyogY3VycmVudCBudW1iZXIgb2YgZXZlbnRzIGFscmVhZHkgYWNjZXB0ZWQgKi8KKwluID0gY3B1Yy0+bl9ldmVudHM7CisKKwlpZiAoaXNfeDg2X2V2ZW50KGxlYWRlcikpIHsKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC1FTk9TUEM7CisJCWNwdWMtPmV2ZW50X2xpc3Rbbl0gPSBsZWFkZXI7CisJCW4rKzsKKwl9CisJaWYgKCFkb2dycCkKKwkJcmV0dXJuIG47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghaXNfeDg2X2V2ZW50KGV2ZW50KSB8fAorCQkgICAgZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC1FTk9TUEM7CisKKwkJY3B1Yy0+ZXZlbnRfbGlzdFtuXSA9IGV2ZW50OworCQluKys7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeDg2X2Fzc2lnbl9od19ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpKQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaHdjLT5pZHggPSBjcHVjLT5hc3NpZ25baV07CisJaHdjLT5sYXN0X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlod2MtPmxhc3RfdGFnID0gKytjcHVjLT50YWdzW2ldOworCisJaWYgKGh3Yy0+aWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgeworCQlod2MtPmNvbmZpZ19iYXNlID0gMDsKKwkJaHdjLT5ldmVudF9iYXNlCT0gMDsKKwl9IGVsc2UgaWYgKGh3Yy0+aWR4ID49IFg4Nl9QTUNfSURYX0ZJWEVEKSB7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMOworCQkvKgorCQkgKiBXZSBzZXQgaXQgc28gdGhhdCBldmVudF9iYXNlICsgaWR4IGluIHdybXNyL3JkbXNyIG1hcHMgdG8KKwkJICogTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC4uLiBDVFIyOgorCQkgKi8KKwkJaHdjLT5ldmVudF9iYXNlID0KKwkJCU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAtIFg4Nl9QTUNfSURYX0ZJWEVEOworCX0gZWxzZSB7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSB4ODZfcG11LmV2ZW50c2VsOworCQlod2MtPmV2ZW50X2Jhc2UgID0geDg2X3BtdS5wZXJmY3RyOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfcHJldl9hc3NpZ25tZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCQkJCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAorCQkJCQlpbnQgaSkKK3sKKwlyZXR1cm4gaHdjLT5pZHggPT0gY3B1Yy0+YXNzaWduW2ldICYmCisJCWh3Yy0+bGFzdF9jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpICYmCisJCWh3Yy0+bGFzdF90YWcgPT0gY3B1Yy0+dGFnc1tpXTsKK30KKworc3RhdGljIHZvaWQgeDg2X3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisKIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKIHsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCWludCBpOworCiAJaWYgKCF4ODZfcG11X2luaXRpYWxpemVkKCkpCiAJCXJldHVybjsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoY3B1Yy0+bl9hZGRlZCkgeworCQkvKgorCQkgKiBhcHBseSBhc3NpZ25tZW50IG9idGFpbmVkIGVpdGhlciBmcm9tCisJCSAqIGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oKSBvciB4ODZfcG11X2VuYWJsZSgpCisJCSAqCisJCSAqIHN0ZXAxOiBzYXZlIGV2ZW50cyBtb3ZpbmcgdG8gbmV3IGNvdW50ZXJzCisJCSAqIHN0ZXAyOiByZXByb2dyYW0gbW92ZWQgZXZlbnRzIGludG8gbmV3IGNvdW50ZXJzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCisJCQlldmVudCA9IGNwdWMtPmV2ZW50X2xpc3RbaV07CisJCQlod2MgPSAmZXZlbnQtPmh3OworCisJCQkvKgorCQkJICogd2UgY2FuIGF2b2lkIHJlcHJvZ3JhbW1pbmcgY291bnRlciBpZjoKKwkJCSAqIC0gYXNzaWduZWQgc2FtZSBjb3VudGVyIGFzIGxhc3QgdGltZQorCQkJICogLSBydW5uaW5nIG9uIHNhbWUgQ1BVIGFzIGxhc3QgdGltZQorCQkJICogLSBubyBvdGhlciBldmVudCBoYXMgdXNlZCB0aGUgY291bnRlciBzaW5jZQorCQkJICovCisJCQlpZiAoaHdjLT5pZHggPT0gLTEgfHwKKwkJCSAgICBtYXRjaF9wcmV2X2Fzc2lnbm1lbnQoaHdjLCBjcHVjLCBpKSkKKwkJCQljb250aW51ZTsKKworCQkJeDg2X3BtdV9zdG9wKGV2ZW50KTsKKworCQkJaHdjLT5pZHggPSAtMTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjcHVjLT5uX2V2ZW50czsgaSsrKSB7CisKKwkJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRfbGlzdFtpXTsKKwkJCWh3YyA9ICZldmVudC0+aHc7CisKKwkJCWlmIChod2MtPmlkeCA9PSAtMSkgeworCQkJCXg4Nl9hc3NpZ25faHdfZXZlbnQoZXZlbnQsIGNwdWMsIGkpOworCQkJCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworCQkJfQorCQkJLyoKKwkJCSAqIG5lZWQgdG8gbWFyayBhcyBhY3RpdmUgYmVjYXVzZSB4ODZfcG11X2Rpc2FibGUoKQorCQkJICogY2xlYXIgYWN0aXZlX21hc2sgYW5kIGV2ZW50c1tdIHlldCBpdCBwcmVzZXJ2ZXMKKwkJCSAqIGlkeAorCQkJICovCisJCQlzZXRfYml0KGh3Yy0+aWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisJCQljcHVjLT5ldmVudHNbaHdjLT5pZHhdID0gZXZlbnQ7CisKKwkJCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOworCQkJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCQl9CisJCWNwdWMtPm5fYWRkZWQgPSAwOworCQlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7CisJfQorCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCiAJeDg2X3BtdS5lbmFibGVfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCi17Ci0JdTY0IHN0YXR1czsKLQotCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKLXsKLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIF9feDg2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwKIAkJCSAgICAgIGh3Yy0+Y29uZmlnIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpOwpAQCAtMTIyMSw1MyArODYxLDYgQEAKIAkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgaHdjLT5jb25maWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKLXsKLQlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKLQl1NjQgY3RybF92YWwsIG1hc2s7Ci0KLQltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKLQotCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci0JY3RybF92YWwgJj0gfm1hc2s7Ci0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1wNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbCA9IFA2X05PUF9FVkVOVDsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0KLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgewotCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7Ci0JCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYW1kX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKLX0KLQogc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCBbWDg2X1BNQ19JRFhfTUFYXSwgcG1jX3ByZXZfbGVmdCk7CiAKIC8qCkBAIC0xMzI2LDIyMCArOTE5LDYwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKLXsKLQlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKLQl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7Ci0JaW50IGVycjsKLQotCS8qCi0JICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAotCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKLQkgKiBpZiByZXF1ZXN0ZWQ6Ci0JICovCi0JYml0cyA9IDB4OFVMTDsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQotCQliaXRzIHw9IDB4MjsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCi0JCWJpdHMgfD0gMHgxOwotCi0JLyoKLQkgKiBBTlkgYml0IGlzIHN1cHBvcnRlZCBpbiB2MyBhbmQgdXAKLQkgKi8KLQlpZiAoeDg2X3BtdS52ZXJzaW9uID4gMiAmJiBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9BTlkpCi0JCWJpdHMgfD0gMHg0OwotCi0JYml0cyA8PD0gKGlkeCAqIDQpOwotCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOwotCi0JcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLQljdHJsX3ZhbCAmPSB+bWFzazsKLQljdHJsX3ZhbCB8PSBiaXRzOwotCWVyciA9IGNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1NjQgdmFsOwotCi0JdmFsID0gaHdjLT5jb25maWc7CiAJaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQotCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LCB2YWwpOwotfQotCi0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmVuYWJsZWQpCi0JCQlyZXR1cm47Ci0KLQkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKLQkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbnQgZml4ZWRfbW9kZV9pZHgoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7Ci0KLQlod19ldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7Ci0KLQlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09Ci0JCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCi0JCSAgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVFM7Ci0KLQlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBmaXhlZCBjb3VudGVycyBkbyBub3QgdGFrZSBhbGwgcG9zc2libGUgZmlsdGVycwotCSAqLwotCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSykKLQkJcmV0dXJuIC0xOwotCi0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlM7Ci0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQ1BVX0NZQ0xFUzsKLQlpZiAodW5saWtlbHkoaHdfZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVVNfQ1lDTEVTOwotCi0JcmV0dXJuIC0xOworCQlfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKIH0KIAogLyoKLSAqIGdlbmVyaWMgY291bnRlciBhbGxvY2F0b3I6IGdldCBuZXh0IGZyZWUgY291bnRlcgotICovCi1zdGF0aWMgaW50Ci1nZW5fZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChjcHVjLT51c2VkX21hc2ssIHg4Nl9wbXUubnVtX2V2ZW50cyk7Ci0JcmV0dXJuIGlkeCA9PSB4ODZfcG11Lm51bV9ldmVudHMgPyAtMSA6IGlkeDsKLX0KLQotLyoKLSAqIGludGVsLXNwZWNpZmljIGNvdW50ZXIgYWxsb2NhdG9yOiBjaGVjayBldmVudCBjb25zdHJhaW50cwotICovCi1zdGF0aWMgaW50Ci1pbnRlbF9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQotewotCWNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50OwotCWludCBpLCBjb2RlOwotCi0JaWYgKCFldmVudF9jb25zdHJhaW50cykKLQkJZ290byBza2lwOwotCi0JY29kZSA9IGh3Yy0+Y29uZmlnICYgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0s7Ci0KLQlmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGV2ZW50X2NvbnN0cmFpbnQsIGV2ZW50X2NvbnN0cmFpbnRzKSB7Ci0JCWlmIChjb2RlID09IGV2ZW50X2NvbnN0cmFpbnQtPmNvZGUpIHsKLQkJCWZvcl9lYWNoX2JpdChpLCBldmVudF9jb25zdHJhaW50LT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgewotCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBjcHVjLT51c2VkX21hc2spKQotCQkJCQlyZXR1cm4gaTsKLQkJCX0KLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLXNraXA6Ci0JcmV0dXJuIGdlbl9nZXRfZXZlbnRfaWR4KGNwdWMsIGh3Yyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXg4Nl9zY2hlZHVsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gZml4ZWRfbW9kZV9pZHgoaHdjKTsKLQlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgewotCQkvKiBCVFMgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJaHdjLT5jb25maWdfYmFzZQk9IDA7Ci0JCWh3Yy0+ZXZlbnRfYmFzZQkJPSAwOwotCQlod2MtPmlkeAkJPSBpZHg7Ci0JfSBlbHNlIGlmIChpZHggPj0gMCkgewotCQkvKgotCQkgKiBUcnkgdG8gZ2V0IHRoZSBmaXhlZCBldmVudCwgaWYgdGhhdCBpcyBhbHJlYWR5IHRha2VuCi0JCSAqIHRoZW4gdHJ5IHRvIGdldCBhIGdlbmVyaWMgZXZlbnQ6Ci0JCSAqLwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCi0JCQlnb3RvIHRyeV9nZW5lcmljOwotCi0JCWh3Yy0+Y29uZmlnX2Jhc2UgPSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMOwotCQkvKgotCQkgKiBXZSBzZXQgaXQgc28gdGhhdCBldmVudF9iYXNlICsgaWR4IGluIHdybXNyL3JkbXNyIG1hcHMgdG8KLQkJICogTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC4uLiBDVFIyOgotCQkgKi8KLQkJaHdjLT5ldmVudF9iYXNlID0KLQkJCU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAtIFg4Nl9QTUNfSURYX0ZJWEVEOwotCQlod2MtPmlkeCA9IGlkeDsKLQl9IGVsc2UgewotCQlpZHggPSBod2MtPmlkeDsKLQkJLyogVHJ5IHRvIGdldCB0aGUgcHJldmlvdXMgZ2VuZXJpYyBldmVudCBhZ2FpbiAqLwotCQlpZiAoaWR4ID09IC0xIHx8IHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKSB7Ci10cnlfZ2VuZXJpYzoKLQkJCWlkeCA9IHg4Nl9wbXUuZ2V0X2V2ZW50X2lkeChjcHVjLCBod2MpOwotCQkJaWYgKGlkeCA9PSAtMSkKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQotCQkJc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7Ci0JCQlod2MtPmlkeCA9IGlkeDsKLQkJfQotCQlod2MtPmNvbmZpZ19iYXNlID0geDg2X3BtdS5ldmVudHNlbDsKLQkJaHdjLT5ldmVudF9iYXNlICA9IHg4Nl9wbXUucGVyZmN0cjsKLQl9Ci0KLQlyZXR1cm4gaWR4OwotfQotCi0vKgotICogRmluZCBhIFBNQyBzbG90IGZvciB0aGUgZnJlc2hseSBlbmFibGVkIC8gc2NoZWR1bGVkIGluIGV2ZW50OgorICogYWN0aXZhdGUgYSBzaW5nbGUgZXZlbnQKKyAqCisgKiBUaGUgZXZlbnQgaXMgYWRkZWQgdG8gdGhlIGdyb3VwIG9mIGVuYWJsZWQgZXZlbnRzCisgKiBidXQgb25seSBpZiBpdCBjYW4gYmUgc2NlaGR1bGVkIHdpdGggZXhpc3RpbmcgZXZlbnRzLgorICoKKyAqIENhbGxlZCB3aXRoIFBNVSBkaXNhYmxlZC4gSWYgc3VjY2Vzc2Z1bCBhbmQgcmV0dXJuIHZhbHVlIDEsCisgKiB0aGVuIGd1YXJhbnRlZWQgdG8gY2FsbCBwZXJmX2VuYWJsZSgpIGFuZCBod19wZXJmX2VuYWJsZSgpCiAgKi8KIHN0YXRpYyBpbnQgeDg2X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlpbnQgYXNzaWduW1g4Nl9QTUNfSURYX01BWF07CisJaW50IG4sIG4wLCByZXQ7CisKKwlod2MgPSAmZXZlbnQtPmh3OworCisJbjAgPSBjcHVjLT5uX2V2ZW50czsKKwluID0gY29sbGVjdF9ldmVudHMoY3B1YywgZXZlbnQsIGZhbHNlKTsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0ID0geDg2X3NjaGVkdWxlX2V2ZW50cyhjcHVjLCBuLCBhc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBjb3B5IG5ldyBhc3NpZ25tZW50LCBub3cgd2Uga25vdyBpdCBpcyBwb3NzaWJsZQorCSAqIHdpbGwgYmUgdXNlZCBieSBod19wZXJmX2VuYWJsZSgpCisJICovCisJbWVtY3B5KGNwdWMtPmFzc2lnbiwgYXNzaWduLCBuKnNpemVvZihpbnQpKTsKKworCWNwdWMtPm5fZXZlbnRzID0gbjsKKwljcHVjLT5uX2FkZGVkICA9IG4gLSBuMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHg4Nl9wbXVfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCWludCBpZHg7CiAKLQlpZHggPSB4ODZfc2NoZWR1bGVfZXZlbnQoY3B1YywgaHdjKTsKLQlpZiAoaWR4IDwgMCkKLQkJcmV0dXJuIGlkeDsKKwlpZiAoaHdjLT5pZHggPT0gLTEpCisJCXJldHVybiAtRUFHQUlOOwogCi0JcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwotCi0JeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKLQotCWNwdWMtPmV2ZW50c1tpZHhdID0gZXZlbnQ7Ci0Jc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKLQotCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKLQl4ODZfcG11LmVuYWJsZShod2MsIGlkeCk7Ci0KLQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisJeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBod2MtPmlkeCk7CisJeDg2X3BtdS5lbmFibGUoaHdjLCBod2MtPmlkeCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1ODMsNyArMTAxNiw3IEBACiAJCXByX2luZm8oIkNQVSMlZDogb3ZlcmZsb3c6ICAgJTAxNmxseFxuIiwgY3B1LCBvdmVyZmxvdyk7CiAJCXByX2luZm8oIkNQVSMlZDogZml4ZWQ6ICAgICAgJTAxNmxseFxuIiwgY3B1LCBmaXhlZCk7CiAJfQotCXByX2luZm8oIkNQVSMlZDogdXNlZDogICAgICAgJTAxNmxseFxuIiwgY3B1LCAqKHU2NCAqKWNwdWMtPnVzZWRfbWFzayk7CisJcHJfaW5mbygiQ1BVIyVkOiBhY3RpdmU6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgKih1NjQgKiljcHVjLT5hY3RpdmVfbWFzayk7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJcmRtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHBtY19jdHJsKTsKQEAgLTE2MDcsNjcgKzEwNDAsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOwotCXN0cnVjdCBidHNfcmVjb3JkIHsKLQkJdTY0CWZyb207Ci0JCXU2NAl0bzsKLQkJdTY0CWZsYWdzOwotCX07Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107Ci0Jc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOwotCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOwotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgcHRfcmVncyByZWdzOwotCi0JaWYgKCFldmVudCkKLQkJcmV0dXJuOwotCi0JaWYgKCFkcykKLQkJcmV0dXJuOwotCi0JYXQgID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZTsKLQl0b3AgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2luZGV4OwotCi0JaWYgKHRvcCA8PSBhdCkKLQkJcmV0dXJuOwotCi0JZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0KLQotCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCWRhdGEuYWRkcgk9IDA7Ci0JZGF0YS5yYXcJPSBOVUxMOwotCXJlZ3MuaXAJCT0gMDsKLQotCS8qCi0JICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCi0JICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAotCSAqIHRoZSBzYW1wbGUuCi0JICovCi0JcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKLQotCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKLQkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCi0JCXJldHVybjsKLQotCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgewotCQlkYXRhLmlwCQk9IGF0LT5mcm9tOwotCQlkYXRhLmFkZHIJPSBhdC0+dG87Ci0KLQkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7Ci0JfQotCi0JcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOwotCi0JLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCi0JZXZlbnQtPmh3LmludGVycnVwdHMrKzsKLQlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKLX0KLQotc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKQEAgLTE2ODEsNzMgKzEwNTQsMzggQEAKIAl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGNsZWFyZWQgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYmVmb3JlIHdlCi0JICogKHBvdGVudGlhbGx5KSBmcmVlIHRoZSBldmVudDoKLQkgKi8KLQliYXJyaWVyKCk7Ci0KLQkvKgogCSAqIERyYWluIHRoZSByZW1haW5pbmcgZGVsdGEgY291bnQgb3V0IG9mIGEgZXZlbnQKIAkgKiB0aGF0IHdlIGFyZSBkaXNhYmxpbmc6CiAJICovCiAJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CiAKLQkvKiBEcmFpbiB0aGUgcmVtYWluaW5nIEJUUyByZWNvcmRzLiAqLwotCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkKLQkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoY3B1Yyk7Ci0KIAljcHVjLT5ldmVudHNbaWR4XSA9IE5VTEw7Ci0JY2xlYXJfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKK30KIAorc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCWludCBpOworCisJeDg2X3BtdV9zdG9wKGV2ZW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBjcHVjLT5uX2V2ZW50czsgaSsrKSB7CisJCWlmIChldmVudCA9PSBjcHVjLT5ldmVudF9saXN0W2ldKSB7CisKKwkJCWlmICh4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cykKKwkJCQl4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBldmVudCk7CisKKwkJCXdoaWxlICgrK2kgPCBjcHVjLT5uX2V2ZW50cykKKwkJCQljcHVjLT5ldmVudF9saXN0W2ktMV0gPSBjcHVjLT5ldmVudF9saXN0W2ldOworCisJCQktLWNwdWMtPm5fZXZlbnRzOworCQkJYnJlYWs7CisJCX0KKwl9CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCi0vKgotICogU2F2ZSBhbmQgcmVzdGFydCBhbiBleHBpcmVkIGV2ZW50LiBDYWxsZWQgYnkgTk1JIGNvbnRleHRzLAotICogc28gaXQgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgcHJlZW1wdGluZyBub3JtYWwgZXZlbnQgb3BzOgotICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdjLT5pZHg7Ci0JaW50IHJldDsKLQotCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwotCXJldCA9IHg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKLQotCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCi0JCWludGVsX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaWR4OwotCi0JaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewotCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7Ci0JCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKLQl9Ci0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7Ci0JCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOwotCX0KLQlpZiAoZHMpCi0JCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHA2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCB4ODZfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKQEAgLTE3ODIsMTE3ICsxMTIwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlwNl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci0JfQotCi0JaWYgKGhhbmRsZWQpCi0JCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0KLQlyZXR1cm4gaGFuZGxlZDsKLX0KLQotLyoKLSAqIFRoaXMgaGFuZGxlciBpcyB0cmlnZ2VyZWQgYnkgdGhlIGxvY2FsIEFQSUMsIHNvIHRoZSBBUElDIElSUSBoYW5kbGluZwotICogcnVsZXMgYXBwbHk6Ci0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKLQlpbnQgYml0LCBsb29wczsKLQl1NjQgYWNrLCBzdGF0dXM7Ci0KLQlkYXRhLmFkZHIgPSAwOwotCWRhdGEucmF3ID0gTlVMTDsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCXBlcmZfZGlzYWJsZSgpOwotCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwotCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJcGVyZl9lbmFibGUoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbG9vcHMgPSAwOwotYWdhaW46Ci0JaWYgKCsrbG9vcHMgPiAxMDApIHsKLQkJV0FSTl9PTkNFKDEsICJwZXJmZXZlbnRzOiBpcnEgbG9vcCBzdHVjayFcbiIpOwotCQlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7Ci0JCWludGVsX3BtdV9yZXNldCgpOwotCQlwZXJmX2VuYWJsZSgpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCWFjayA9IHN0YXR1czsKLQlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKLQotCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKLQkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQotCQkJY29udGludWU7Ci0KLQkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0KLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7Ci0JfQotCi0JaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKLQotCS8qCi0JICogUmVwZWF0IGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOgotCSAqLwotCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBhZ2FpbjsKLQotCXBlcmZfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBhbWRfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKLQlpbnQgaWR4LCBoYW5kbGVkID0gMDsKLQl1NjQgdmFsOwotCi0JZGF0YS5hZGRyID0gMDsKLQlkYXRhLnJhdyA9IE5VTEw7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07Ci0JCWh3YyA9ICZldmVudC0+aHc7Ci0KLQkJdmFsID0geDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7Ci0JCWlmICh2YWwgJiAoMVVMTCA8PCAoeDg2X3BtdS5ldmVudF9iaXRzIC0gMSkpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogZXZlbnQgb3ZlcmZsb3cKLQkJICovCi0JCWhhbmRsZWQJCT0gMTsKLQkJZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0KLQkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJYW1kX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwkJCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7CiAJfQogCiAJaWYgKGhhbmRsZWQpCkBAIC0xOTc1LDE5NSArMTIwMywxMzggQEAKIAkucHJpb3JpdHkJCT0gMQogfTsKIAotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IHA2X3BtdSA9IHsKLQkubmFtZQkJCT0gInA2IiwKLQkuaGFuZGxlX2lycQkJPSBwNl9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gcDZfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IHA2X3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IHA2X3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gcDZfcG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50c2VsCQk9IE1TUl9QNl9FVk5UU0VMMCwKLQkucGVyZmN0cgkJPSBNU1JfUDZfUEVSRkNUUjAsCi0JLmV2ZW50X21hcAkJPSBwNl9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gcDZfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKHA2X3BlcmZtb25fZXZlbnRfbWFwKSwKLQkuYXBpYwkJCT0gMSwKLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAotCS52ZXJzaW9uCQk9IDAsCi0JLm51bV9ldmVudHMJCT0gMiwKLQkvKgotCSAqIEV2ZW50cyBoYXZlIDQwIGJpdHMgaW1wbGVtZW50ZWQuIEhvd2V2ZXIgdGhleSBhcmUgZGVzaWduZWQgc3VjaAotCSAqIHRoYXQgYml0cyBbMzItMzldIGFyZSBzaWduIGV4dGVuc2lvbnMgb2YgYml0IDMxLiBBcyBzdWNoIHRoZQotCSAqIGVmZmVjdGl2ZSB3aWR0aCBvZiBhIGV2ZW50IGZvciBQNi1saWtlIFBNVSBpcyAzMiBiaXRzIG9ubHkuCi0JICoKLQkgKiBTZWUgSUEtMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIGRldmVsb3BlciBtYW51YWwgVm9sIDNCCi0JICovCi0JLmV2ZW50X2JpdHMJCT0gMzIsCi0JLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgMzIpIC0gMSwKLQkuZ2V0X2V2ZW50X2lkeAkJPSBpbnRlbF9nZXRfZXZlbnRfaWR4LAotfTsKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCB1bmNvbnN0cmFpbmVkOworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGVtcHR5Y29uc3RyYWludDsKIAotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHsKLQkubmFtZQkJCT0gIkludGVsIiwKLQkuaGFuZGxlX2lycQkJPSBpbnRlbF9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gaW50ZWxfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IGludGVsX3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IGludGVsX3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gaW50ZWxfcG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50c2VsCQk9IE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAsCi0JLmV2ZW50X21hcAkJPSBpbnRlbF9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gaW50ZWxfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKGludGVsX3BlcmZtb25fZXZlbnRfbWFwKSwKLQkuYXBpYwkJCT0gMSwKLQkvKgotCSAqIEludGVsIFBNQ3MgY2Fubm90IGJlIGFjY2Vzc2VkIHNhbmVseSBhYm92ZSAzMiBiaXQgd2lkdGgsCi0JICogc28gd2UgaW5zdGFsbCBhbiBhcnRpZmljaWFsIDE8PDMxIHBlcmlvZCByZWdhcmRsZXNzIG9mCi0JICogdGhlIGdlbmVyaWMgZXZlbnQgcGVyaW9kOgotCSAqLwotCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCi0JLmVuYWJsZV9idHMJCT0gaW50ZWxfcG11X2VuYWJsZV9idHMsCi0JLmRpc2FibGVfYnRzCQk9IGludGVsX3BtdV9kaXNhYmxlX2J0cywKLQkuZ2V0X2V2ZW50X2lkeAkJPSBpbnRlbF9nZXRfZXZlbnRfaWR4LAotfTsKLQotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGFtZF9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJBTUQiLAotCS5oYW5kbGVfaXJxCQk9IGFtZF9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gYW1kX3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBhbWRfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gYW1kX3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gYW1kX3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfSzdfRVZOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX0s3X1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gYW1kX3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBhbWRfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKGFtZF9wZXJmbW9uX2V2ZW50X21hcCksCi0JLm51bV9ldmVudHMJCT0gNCwKLQkuZXZlbnRfYml0cwkJPSA0OCwKLQkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCA0OCkgLSAxLAotCS5hcGljCQkJPSAxLAotCS8qIHVzZSBoaWdoZXN0IGJpdCB0byBkZXRlY3Qgb3ZlcmZsb3cgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCA0NykgLSAxLAotCS5nZXRfZXZlbnRfaWR4CQk9IGdlbl9nZXRfZXZlbnRfaWR4LAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgcDZfcG11X2luaXQodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCit4ODZfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewotCWNhc2UgMToKLQljYXNlIDM6ICAvKiBQZW50aXVtIFBybyAqLwotCWNhc2UgNToKLQljYXNlIDY6ICAvKiBQZW50aXVtIElJICovCi0JY2FzZSA3OgotCWNhc2UgODoKLQljYXNlIDExOiAvKiBQZW50aXVtIElJSSAqLwotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX3A2X2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQljYXNlIDk6Ci0JY2FzZSAxMzoKLQkJLyogUGVudGl1bSBNICovCi0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2NvbnQoInVuc3VwcG9ydGVkIHA2IENQVSBtb2RlbCAlZCAiLAotCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYzsKKworCWlmICh4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzKSB7CisJCWZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoYywgeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cykgeworCQkJaWYgKChldmVudC0+aHcuY29uZmlnICYgYy0+Y21hc2spID09IGMtPmNvZGUpCisJCQkJcmV0dXJuIGM7CisJCX0KIAl9CiAKLQl4ODZfcG11ID0gcDZfcG11OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuICZ1bmNvbnN0cmFpbmVkOwogfQogCi1zdGF0aWMgX19pbml0IGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQorc3RhdGljIGludCB4ODZfZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewotCXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKLQl1bmlvbiBjcHVpZDEwX2VheCBlYXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZDsKLQl1bnNpZ25lZCBpbnQgZWJ4OwotCWludCB2ZXJzaW9uOworCWludCByZXQgPSAwOwogCi0JaWYgKCFjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKSB7Ci0JCS8qIGNoZWNrIGZvciBQNiBwcm9jZXNzb3IgZmFtaWx5ICovCi0JICAgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYpIHsKLQkJcmV0dXJuIHA2X3BtdV9pbml0KCk7Ci0JICAgfSBlbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JICAgfQotCX0KKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIEFyY2hpdGVjdHVyYWwgUGVyZk1vbiBzdXBwb3J0cwotCSAqIEJyYW5jaCBNaXNzZXMgUmV0aXJlZCBod19ldmVudCBvciBub3QuCi0JICovCi0JY3B1aWQoMTAsICZlYXguZnVsbCwgJmVieCwgJnVudXNlZCwgJmVkeC5mdWxsKTsKLQlpZiAoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDw9IEFSQ0hfUEVSRk1PTl9CUkFOQ0hfTUlTU0VTX1JFVElSRUQpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghaXNfeDg2X2V2ZW50KGV2ZW50KSkKKwkJcmV0ID0gZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKIAotCXZlcnNpb24gPSBlYXguc3BsaXQudmVyc2lvbl9pZDsKLQlpZiAodmVyc2lvbiA8IDIpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghcmV0ICYmICFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1Kys7CiAKLQl4ODZfcG11CQkJCT0gaW50ZWxfcG11OwotCXg4Nl9wbXUudmVyc2lvbgkJCT0gdmVyc2lvbjsKLQl4ODZfcG11Lm51bV9ldmVudHMJCT0gZWF4LnNwbGl0Lm51bV9ldmVudHM7Ci0JeDg2X3BtdS5ldmVudF9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7Ci0JeDg2X3BtdS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKKwlpZiAoIXJldCAmJiBldmVudC0+YXR0ci5leGNsdXNpdmUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMTsKIAotCS8qCi0JICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgZXZlbnRzLCBzbwotCSAqIGFzc3VtZSBhdCBsZWFzdCAzIGV2ZW50czoKLQkgKi8KLQl4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQJPSBtYXgoKGludCllZHguc3BsaXQubnVtX2V2ZW50c19maXhlZCwgMyk7Ci0KLQkvKgotCSAqIEluc3RhbGwgdGhlIGh3LWNhY2hlLWV2ZW50cyB0YWJsZToKLQkgKi8KLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7Ci0JY2FzZSAxNTogLyogb3JpZ2luYWwgNjUgbm0gY2VsZXJvbi9wZW50aXVtL2NvcmUyL3hlb24sICJNZXJvbSIvIkNvbnJvZSIgKi8KLQljYXNlIDIyOiAvKiBzaW5nbGUtY29yZSA2NSBubSBjZWxlcm9uL2NvcmUyc29sbyAiTWVyb20tTCIvIkNvbnJvZS1MIiAqLwotCWNhc2UgMjM6IC8qIGN1cnJlbnQgNDUgbm0gY2VsZXJvbi9jb3JlMi94ZW9uICJQZW5yeW4iLyJXb2xmZGFsZSIgKi8KLQljYXNlIDI5OiAvKiBzaXgtY29yZSA0NSBubSB4ZW9uICJEdW5uaW5ndG9uIiAqLwotCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiQ29yZTIgZXZlbnRzLCAiKTsKLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCWNhc2UgMjY6Ci0JCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50czsKLQkJcHJfY29udCgiTmVoYWxlbS9Db3JlaTcgZXZlbnRzLCAiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyODoKLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgYXRvbV9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiQXRvbSBldmVudHMsICIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewotCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCi0JCXJldHVybiAtRU5PREVWOworCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU7CisJZXZlbnQtPm9uY3B1ID0gLTE7CiAKLQl4ODZfcG11ID0gYW1kX3BtdTsKKwlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkpCisJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOwogCi0JLyogRXZlbnRzIGFyZSBjb21tb24gZm9yIGFsbCBBTURzICovCi0JbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCWV2ZW50LT50c3RhbXBfcnVubmluZyAtPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCi0JcmV0dXJuIDA7CisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1LS07CisKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOwogfQogCisvKgorICogQ2FsbGVkIHRvIGVuYWJsZSBhIHdob2xlIGdyb3VwIG9mIGV2ZW50cy4KKyAqIFJldHVybnMgMSBpZiB0aGUgZ3JvdXAgd2FzIGVuYWJsZWQsIG9yIC1FQUdBSU4gaWYgaXQgY291bGQgbm90IGJlLgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBoYXMKKyAqIGZyb3plbiB0aGUgUE1VIHdpdGggaHdfcGVyZl9zYXZlX2Rpc2FibGUuCisgKgorICogY2FsbGVkIHdpdGggUE1VIGRpc2FibGVkLiBJZiBzdWNjZXNzZnVsIGFuZCByZXR1cm4gdmFsdWUgMSwKKyAqIHRoZW4gZ3VhcmFudGVlZCB0byBjYWxsIHBlcmZfZW5hYmxlKCkgYW5kIGh3X3BlcmZfZW5hYmxlKCkKKyAqLworaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciwKKwkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKKwlpbnQgYXNzaWduW1g4Nl9QTUNfSURYX01BWF07CisJaW50IG4wLCBuMSwgcmV0OworCisJLyogbjAgPSB0b3RhbCBudW1iZXIgb2YgZXZlbnRzICovCisJbjAgPSBjb2xsZWN0X2V2ZW50cyhjcHVjLCBsZWFkZXIsIHRydWUpOworCWlmIChuMCA8IDApCisJCXJldHVybiBuMDsKKworCXJldCA9IHg4Nl9zY2hlZHVsZV9ldmVudHMoY3B1YywgbjAsIGFzc2lnbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHg4Nl9ldmVudF9zY2hlZF9pbihsZWFkZXIsIGNwdWN0eCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW4xID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoc3ViLT5zdGF0ZSA+IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7CisJCQlyZXQgPSB4ODZfZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHVjdHgpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIHVuZG87CisJCQkrK24xOworCQl9CisJfQorCS8qCisJICogY29weSBuZXcgYXNzaWdubWVudCwgbm93IHdlIGtub3cgaXQgaXMgcG9zc2libGUKKwkgKiB3aWxsIGJlIHVzZWQgYnkgaHdfcGVyZl9lbmFibGUoKQorCSAqLworCW1lbWNweShjcHVjLT5hc3NpZ24sIGFzc2lnbiwgbjAqc2l6ZW9mKGludCkpOworCisJY3B1Yy0+bl9ldmVudHMgID0gbjA7CisJY3B1Yy0+bl9hZGRlZCAgID0gbjE7CisJY3R4LT5ucl9hY3RpdmUgKz0gbjE7CisKKwkvKgorCSAqIDEgbWVhbnMgc3VjY2Vzc2Z1bCBhbmQgZXZlbnRzIGFyZSBhY3RpdmUKKwkgKiBUaGlzIGlzIG5vdCBxdWl0ZSB0cnVlIGJlY2F1c2Ugd2UgZGVmZXIKKwkgKiBhY3R1YWwgYWN0aXZhdGlvbiB1bnRpbCBod19wZXJmX2VuYWJsZSgpIGJ1dAorCSAqIHRoaXMgd2F5IHdlKiBlbnN1cmUgY2FsbGVyIHdvbid0IHRyeSB0byBlbmFibGUKKwkgKiBpbmRpdmlkdWFsIGV2ZW50cworCSAqLworCXJldHVybiAxOwordW5kbzoKKwl4ODZfZXZlbnRfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4KTsKKwluMCAgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChzdWItPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKSB7CisJCQl4ODZfZXZlbnRfc2NoZWRfb3V0KHN1YiwgY3B1Y3R4KTsKKwkJCWlmICgrK24wID09IG4xKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNpbmNsdWRlICJwZXJmX2V2ZW50X2FtZC5jIgorI2luY2x1ZGUgInBlcmZfZXZlbnRfcDYuYyIKKyNpbmNsdWRlICJwZXJmX2V2ZW50X2ludGVsLmMiCisKIHN0YXRpYyB2b2lkIF9faW5pdCBwbXVfY2hlY2tfYXBpYyh2b2lkKQogewogCWlmIChjcHVfaGFzX2FwaWMpCkBAIC0yMjIwLDYgKzEzOTEsMTAgQEAKIAlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7CiAJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwZXJmX2V2ZW50X25taV9ub3RpZmllcik7CiAKKwl1bmNvbnN0cmFpbmVkID0gKHN0cnVjdCBldmVudF9jb25zdHJhaW50KQorCQlfX0VWRU5UX0NPTlNUUkFJTlQoMCwgKDFVTEwgPDwgeDg2X3BtdS5udW1fZXZlbnRzKSAtIDEsCisJCQkJICAgMCwgeDg2X3BtdS5udW1fZXZlbnRzKTsKKwogCXByX2luZm8oIi4uLiB2ZXJzaW9uOiAgICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUudmVyc2lvbik7CiAJcHJfaW5mbygiLi4uIGJpdCB3aWR0aDogICAgICAgICAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5ldmVudF9iaXRzKTsKIAlwcl9pbmZvKCIuLi4gZ2VuZXJpYyByZWdpc3RlcnM6ICAgICAgJWRcbiIsICAgICB4ODZfcG11Lm51bV9ldmVudHMpOwpAQCAtMjIzNyw1MCArMTQxMiw3OSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0gewogCS5lbmFibGUJCT0geDg2X3BtdV9lbmFibGUsCiAJLmRpc2FibGUJPSB4ODZfcG11X2Rpc2FibGUsCisJLnN0YXJ0CQk9IHg4Nl9wbXVfc3RhcnQsCisJLnN0b3AJCT0geDg2X3BtdV9zdG9wLAogCS5yZWFkCQk9IHg4Nl9wbXVfcmVhZCwKIAkudW50aHJvdHRsZQk9IHg4Nl9wbXVfdW50aHJvdHRsZSwKIH07CiAKLXN0YXRpYyBpbnQKLXZhbGlkYXRlX2V2ZW50KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgZmFrZV9ldmVudCA9IGV2ZW50LT5odzsKLQotCWlmIChldmVudC0+cG11ICYmIGV2ZW50LT5wbXUgIT0gJnBtdSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geDg2X3NjaGVkdWxlX2V2ZW50KGNwdWMsICZmYWtlX2V2ZW50KSA+PSAwOwotfQotCisvKgorICogdmFsaWRhdGUgYSBzaW5nbGUgZXZlbnQgZ3JvdXAKKyAqCisgKiB2YWxpZGF0aW9uIGluY2x1ZGU6CisgKgktIGNoZWNrIGV2ZW50cyBhcmUgY29tcGF0aWJsZSB3aGljaCBlYWNoIG90aGVyCisgKgktIGV2ZW50cyBkbyBub3QgY29tcGV0ZSBmb3IgdGhlIHNhbWUgY291bnRlcgorICoJLSBudW1iZXIgb2YgZXZlbnRzIDw9IG51bWJlciBvZiBjb3VudGVycworICoKKyAqIHZhbGlkYXRpb24gZW5zdXJlcyB0aGUgZ3JvdXAgY2FuIGJlIGxvYWRlZCBvbnRvIHRoZQorICogUE1VIGlmIGl0IHdhcyB0aGUgb25seSBncm91cCBhdmFpbGFibGUuCisgKi8KIHN0YXRpYyBpbnQgdmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqZmFrZV9jcHVjOworCWludCByZXQsIG47CiAKLQltZW1zZXQoJmZha2VfcG11LCAwLCBzaXplb2YoZmFrZV9wbXUpKTsKKwlyZXQgPSAtRU5PTUVNOworCWZha2VfY3B1YyA9IGttYWxsb2Moc2l6ZW9mKCpmYWtlX2NwdWMpLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFmYWtlX2NwdWMpCisJCWdvdG8gb3V0OwogCi0JaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCi0JCXJldHVybiAtRU5PU1BDOworCS8qCisJICogdGhlIGV2ZW50IGlzIG5vdCB5ZXQgY29ubmVjdGVkIHdpdGggaXRzCisJICogc2libGluZ3MgdGhlcmVmb3JlIHdlIG11c3QgZmlyc3QgY29sbGVjdAorCSAqIGV4aXN0aW5nIHNpYmxpbmdzLCB0aGVuIGFkZCB0aGUgbmV3IGV2ZW50CisJICogYmVmb3JlIHdlIGNhbiBzaW11bGF0ZSB0aGUgc2NoZWR1bGluZworCSAqLworCXJldCA9IC1FTk9TUEM7CisJbiA9IGNvbGxlY3RfZXZlbnRzKGZha2VfY3B1YywgbGVhZGVyLCB0cnVlKTsKKwlpZiAobiA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNpYmxpbmcsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIHNpYmxpbmcpKQotCQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQorCWZha2VfY3B1Yy0+bl9ldmVudHMgPSBuOworCW4gPSBjb2xsZWN0X2V2ZW50cyhmYWtlX2NwdWMsIGV2ZW50LCBmYWxzZSk7CisJaWYgKG4gPCAwKQorCQlnb3RvIG91dF9mcmVlOwogCi0JaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGV2ZW50KSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJZmFrZV9jcHVjLT5uX2V2ZW50cyA9IG47CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSB4ODZfc2NoZWR1bGVfZXZlbnRzKGZha2VfY3B1YywgbiwgTlVMTCk7CisKK291dF9mcmVlOgorCWtmcmVlKGZha2VfY3B1Yyk7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwljb25zdCBzdHJ1Y3QgcG11ICp0bXA7CiAJaW50IGVycjsKIAogCWVyciA9IF9faHdfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKIAlpZiAoIWVycikgeworCQkvKgorCQkgKiB3ZSB0ZW1wb3JhcmlseSBjb25uZWN0IGV2ZW50IHRvIGl0cyBwbXUKKwkJICogc3VjaCB0aGF0IHZhbGlkYXRlX2dyb3VwKCkgY2FuIGNsYXNzaWZ5CisJCSAqIGl0IGFzIGFuIHg4NiBldmVudCB1c2luZyBpc194ODZfZXZlbnQoKQorCQkgKi8KKwkJdG1wID0gZXZlbnQtPnBtdTsKKwkJZXZlbnQtPnBtdSA9ICZwbXU7CisKIAkJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpCiAJCQllcnIgPSB2YWxpZGF0ZV9ncm91cChldmVudCk7CisKKwkJZXZlbnQtPnBtdSA9IHRtcDsKIAl9CiAJaWYgKGVycikgewogCQlpZiAoZXZlbnQtPmRlc3Ryb3kpCkBAIC0yMzA0LDcgKzE1MDgsNiBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19ubWlfZW50cnkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaW5faWdub3JlZF9mcmFtZSk7CiAKIAogc3RhdGljIHZvaWQKQEAgLTIzMjAsMTAgKzE1MjMsNiBAQAogCiBzdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQogewotCXBlcl9jcHUoaW5faWdub3JlZF9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9Ci0JCQl4ODZfaXNfc3RhY2tfaWQoTk1JX1NUQUNLLCBuYW1lKSB8fAotCQkJeDg2X2lzX3N0YWNrX2lkKERFQlVHX1NUQUNLLCBuYW1lKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMzMxLDkgKzE1MzAsNiBAQAogewogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSBkYXRhOwogCi0JaWYgKHBlcl9jcHUoaW5faWdub3JlZF9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJcmV0dXJuOwotCiAJaWYgKHJlbGlhYmxlKQogCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIGFkZHIpOwogfQpAQCAtMjQ0MCw5ICsxNjM2LDYgQEAKIAogCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CiAKLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQogCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKIAkJcmV0dXJuOwogCkBAIC0yNDcyLDQgKzE2NjUsMjUgQEAKIHZvaWQgaHdfcGVyZl9ldmVudF9zZXR1cF9vbmxpbmUoaW50IGNwdSkKIHsKIAlpbml0X2RlYnVnX3N0b3JlX29uX2NwdShjcHUpOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlhbWRfcG11X2NwdV9vbmxpbmUoY3B1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBod19wZXJmX2V2ZW50X3NldHVwX29mZmxpbmUoaW50IGNwdSkKK3sKKwlpbml0X2RlYnVnX3N0b3JlX29uX2NwdShjcHUpOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlhbWRfcG11X2NwdV9vZmZsaW5lKGNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzZGJmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKQEAgLTAsMCArMSw0MTYgQEAKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKKworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYW1kX25iX2xvY2spOworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTQyLCAvKiBEYXRhIENhY2hlIFJlZmlsbHMgOnN5c3RlbSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmF0dGVtcHRzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE2NywgLyogRGF0YSBQcmVmZXRjaGVyIDpjYW5jZWxsZWQgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNEIsIC8qIFByZWZldGNoIEluc3RydWN0aW9ucyA6TG9hZCAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM3RCwgLyogUmVxdWVzdHMgdG8gTDIgQ2FjaGUgOklDK0RDICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMzdFLCAvKiBMMiBDYWNoZSBNaXNzZXMgOiBJQytEQyAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxN0YsIC8qIEwyIEZpbGwvV3JpdGViYWNrICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQ2LCAvKiBMMSBEVExCIGFuZCBMMiBETFRCIE1pc3MgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gZmVjdGhlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODUsIC8qIEluc3RyLiBmZXRjaCBJVExCIG1pc3NlcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMiwgLyogUmV0aXJlZCBCcmFuY2ggSW5zdHIuICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzMsIC8qIFJldGlyZWQgTWlzcHJlZGljdGVkIEJJICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworLyoKKyAqIEFNRCBQZXJmb3JtYW5jZSBNb25pdG9yIEs3IGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBhbWRfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3NiwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwMDgwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDA4MSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKK307CisKK3N0YXRpYyB1NjQgYW1kX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBhbWRfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCitzdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4RjAwMDAwMEZGVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAorCisjZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKKwkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAorCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCisJIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKKwkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAorCSBLN19FVk5UU0VMX1JFR19NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgSzdfRVZOVFNFTF9NQVNLOworfQorCisvKgorICogQU1ENjQgZXZlbnRzIGFyZSBkZXRlY3RlZCBiYXNlZCBvbiB0aGVpciBldmVudCBjb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYW1kX2lzX25iX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCit7CisJcmV0dXJuIChod2MtPmNvbmZpZyAmIDB4ZTApID09IDB4ZTA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXN0cnVjdCBhbWRfbmIgKm5iID0gY3B1Yy0+YW1kX25iOworCWludCBpOworCisJLyoKKwkgKiBvbmx5IGNhcmUgYWJvdXQgTkIgZXZlbnRzCisJICovCisJaWYgKCEobmIgJiYgYW1kX2lzX25iX2V2ZW50KGh3YykpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG5lZWQgdG8gc2NhbiB3aG9sZSBsaXN0IGJlY2F1c2UgZXZlbnQgbWF5IG5vdCBoYXZlCisJICogYmVlbiBhc3NpZ25lZCBkdXJpbmcgc2NoZWR1bGluZworCSAqCisJICogbm8gcmFjZSBjb25kaXRpb24gcG9zc2libGUgYmVjYXVzZSBldmVudCBjYW4gb25seQorCSAqIGJlIHJlbW92ZWQgb24gb25lIENQVSBhdCBhIHRpbWUgQU5EIFBNVSBpcyBkaXNhYmxlZAorCSAqIHdoZW4gd2UgY29tZSBoZXJlCisJICovCisJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaSsrKSB7CisJCWlmIChuYi0+b3duZXJzW2ldID09IGV2ZW50KSB7CisJCQljbXB4Y2hnKG5iLT5vd25lcnMraSwgZXZlbnQsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKyAvKgorICAqIEFNRDY0IE5vcnRoQnJpZGdlIGV2ZW50cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGJlY2F1c2UKKyAgKiBjb3VudGVyIGFjY2VzcyBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgYWNyb3NzIGFsbCBjb3JlcworICAqIG9mIGEgcGFja2FnZS4gUmVmZXIgdG8gQktERyBzZWN0aW9uIDMuMTIKKyAgKgorICAqIE5CIGV2ZW50cyBhcmUgZXZlbnRzIG1lYXN1cmluZyBMMyBjYWNoZSwgSHlwZXJ0cmFuc3BvcnQKKyAgKiB0cmFmZmljLiBUaGV5IGFyZSBpZGVudGlmaWVkIGJ5IGFuIGV2ZW50IGNvZGUgPj0gMHhlMDAuCisgICogVGhleSBtZWFzdXJlIGV2ZW50cyBvbiB0aGUgTm9ydGhCcmlkZSB3aGljaCBpcyBzaGFyZWQKKyAgKiBieSBhbGwgY29yZXMgb24gYSBwYWNrYWdlLiBOQiBldmVudHMgYXJlIGNvdW50ZWQgb24gYQorICAqIHNoYXJlZCBzZXQgb2YgY291bnRlcnMuIFdoZW4gYSBOQiBldmVudCBpcyBwcm9ncmFtbWVkCisgICogaW4gYSBjb3VudGVyLCB0aGUgZGF0YSBhY3R1YWxseSBjb21lcyBmcm9tIGEgc2hhcmVkCisgICogY291bnRlci4gVGh1cywgYWNjZXNzIHRvIHRob3NlIGNvdW50ZXJzIG5lZWRzIHRvIGJlCisgICogc3luY2hyb25pemVkLgorICAqCisgICogV2UgaW1wbGVtZW50IHRoZSBzeW5jaHJvbml6YXRpb24gc3VjaCB0aGF0IG5vIHR3byBjb3JlcworICAqIGNhbiBiZSBtZWFzdXJpbmcgTkIgZXZlbnRzIHVzaW5nIHRoZSBzYW1lIGNvdW50ZXJzLiBUaHVzLAorICAqIHdlIG1haW50YWluIGEgcGVyLU5CIGFsbG9jYXRpb24gdGFibGUuIFRoZSBhdmFpbGFibGUgc2xvdAorICAqIGlzIHByb3BhZ2F0ZWQgdXNpbmcgdGhlIGV2ZW50X2NvbnN0cmFpbnQgc3RydWN0dXJlLgorICAqCisgICogV2UgcHJvdmlkZSBvbmx5IG9uZSBjaG9pY2UgZm9yIGVhY2ggTkIgZXZlbnQgYmFzZWQgb24KKyAgKiB0aGUgZmFjdCB0aGF0IG9ubHkgTkIgZXZlbnRzIGhhdmUgcmVzdHJpY3Rpb25zLiBDb25zZXF1ZW50bHksCisgICogaWYgYSBjb3VudGVyIGlzIGF2YWlsYWJsZSwgdGhlcmUgaXMgYSBndWFyYW50ZWUgdGhlIE5CIGV2ZW50CisgICogd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4gSWYgbm8gc2xvdCBpcyBhdmFpbGFibGUsIGFuIGVtcHR5CisgICogY29uc3RyYWludCBpcyByZXR1cm5lZCBhbmQgc2NoZWR1bGluZyB3aWxsIGV2ZW50dWFsbHkgZmFpbAorICAqIGZvciB0aGlzIGV2ZW50LgorICAqCisgICogTm90ZSB0aGF0IGFsbCBjb3JlcyBhdHRhY2hlZCB0aGUgc2FtZSBOQiBjb21wZXRlIGZvciB0aGUgc2FtZQorICAqIGNvdW50ZXJzIHRvIGhvc3QgTkIgZXZlbnRzLCB0aGlzIGlzIHdoeSB3ZSB1c2UgYXRvbWljIG9wcy4gU29tZQorICAqIG11bHRpLWNoaXAgQ1BVcyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIE5CLgorICAqCisgICogR2l2ZW4gdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCAoY21weGNoZyksIHRoZXkgbXVzdCBiZQorICAqIGV2ZW50dWFsbHkgZnJlZWQgZm9yIG90aGVycyB0byB1c2UuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5CisgICogY2FsbGluZyBhbWRfcHV0X2V2ZW50X2NvbnN0cmFpbnRzKCkuCisgICoKKyAgKiBOb24gTkIgZXZlbnRzIGFyZSBub3QgaW1wYWN0ZWQgYnkgdGhpcyByZXN0cmljdGlvbi4KKyAgKi8KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCithbWRfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBjcHVjLT5hbWRfbmI7CisJc3RydWN0IHBlcmZfZXZlbnQgKm9sZCA9IE5VTEw7CisJaW50IG1heCA9IHg4Nl9wbXUubnVtX2V2ZW50czsKKwlpbnQgaSwgaiwgayA9IC0xOworCisJLyoKKwkgKiBpZiBub3QgTkIgZXZlbnQgb3Igbm8gTkIsIHRoZW4gbm8gY29uc3RyYWludHMKKwkgKi8KKwlpZiAoIShuYiAmJiBhbWRfaXNfbmJfZXZlbnQoaHdjKSkpCisJCXJldHVybiAmdW5jb25zdHJhaW5lZDsKKworCS8qCisJICogZGV0ZWN0IGlmIGFscmVhZHkgcHJlc2VudCwgaWYgc28gcmV1c2UKKwkgKgorCSAqIGNhbm5vdCBtZXJnZSB3aXRoIGFjdHVhbCBhbGxvY2F0aW9uCisJICogYmVjYXVzZSBvZiBwb3NzaWJsZSBob2xlcworCSAqCisJICogZXZlbnQgY2FuIGFscmVhZHkgYmUgcHJlc2VudCB5ZXQgbm90IGFzc2lnbmVkIChpbiBod2MtPmlkeCkKKwkgKiBiZWNhdXNlIG9mIHN1Y2Nlc3NpdmUgY2FsbHMgdG8geDg2X3NjaGVkdWxlX2V2ZW50cygpIGZyb20KKwkgKiBod19wZXJmX2dyb3VwX3NjaGVkX2luKCkgd2l0aG91dCBod19wZXJmX2VuYWJsZSgpCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCS8qCisJCSAqIGtlZXAgdHJhY2sgb2YgZmlyc3QgZnJlZSBzbG90CisJCSAqLworCQlpZiAoayA9PSAtMSAmJiAhbmItPm93bmVyc1tpXSkKKwkJCWsgPSBpOworCisJCS8qIGFscmVhZHkgcHJlc2VudCwgcmV1c2UgKi8KKwkJaWYgKG5iLT5vd25lcnNbaV0gPT0gZXZlbnQpCisJCQlnb3RvIGRvbmU7CisJfQorCS8qCisJICogbm90IHByZXNlbnQsIHNvIGdyYWIgYSBuZXcgc2xvdAorCSAqIHN0YXJ0aW5nIGVpdGhlciBhdDoKKwkgKi8KKwlpZiAoaHdjLT5pZHggIT0gLTEpIHsKKwkJLyogcHJldmlvdXMgYXNzaWdubWVudCAqLworCQlpID0gaHdjLT5pZHg7CisJfSBlbHNlIGlmIChrICE9IC0xKSB7CisJCS8qIHN0YXJ0IGZyb20gZnJlZSBzbG90IGZvdW5kICovCisJCWkgPSBrOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGV2ZW50IG5vdCBmb3VuZCwgbm8gc2xvdCBmb3VuZCBpbgorCQkgKiBmaXJzdCBwYXNzLCB0cnkgYWdhaW4gZnJvbSB0aGUKKwkJICogYmVnaW5uaW5nCisJCSAqLworCQlpID0gMDsKKwl9CisJaiA9IGk7CisJZG8geworCQlvbGQgPSBjbXB4Y2hnKG5iLT5vd25lcnMraSwgTlVMTCwgZXZlbnQpOworCQlpZiAoIW9sZCkKKwkJCWJyZWFrOworCQlpZiAoKytpID09IG1heCkKKwkJCWkgPSAwOworCX0gd2hpbGUgKGkgIT0gaik7Citkb25lOgorCWlmICghb2xkKQorCQlyZXR1cm4gJm5iLT5ldmVudF9jb25zdHJhaW50c1tpXTsKKworCXJldHVybiAmZW1wdHljb25zdHJhaW50OworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKKwkubmFtZQkJCT0gIkFNRCIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSB4ODZfcG11X2Rpc2FibGVfYWxsLAorCS5lbmFibGVfYWxsCQk9IHg4Nl9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSB4ODZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSB4ODZfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCisJLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkubnVtX2V2ZW50cwkJPSA0LAorCS5ldmVudF9iaXRzCQk9IDQ4LAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCisJLmFwaWMJCQk9IDEsCisJLyogdXNlIGhpZ2hlc3QgYml0IHRvIGRldGVjdCBvdmVyZmxvdyAqLworCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDQ3KSAtIDEsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLnB1dF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1kX25iICphbWRfYWxsb2NfbmIoaW50IGNwdSwgaW50IG5iX2lkKQoreworCXN0cnVjdCBhbWRfbmIgKm5iOworCWludCBpOworCisJbmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kX25iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobmIsIDAsIHNpemVvZigqbmIpKTsKKwluYi0+bmJfaWQgPSBuYl9pZDsKKworCS8qCisJICogaW5pdGlhbGl6ZSBhbGwgcG9zc2libGUgTkIgY29uc3RyYWludHMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKKwkJc2V0X2JpdChpLCBuYi0+ZXZlbnRfY29uc3RyYWludHNbaV0uaWR4bXNrKTsKKwkJbmItPmV2ZW50X2NvbnN0cmFpbnRzW2ldLndlaWdodCA9IDE7CisJfQorCXJldHVybiBuYjsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdTEsICpjcHUyOworCXN0cnVjdCBhbWRfbmIgKm5iID0gTlVMTDsKKwlpbnQgaSwgbmJfaWQ7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIDwgMikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUKKwkgKiBib290IHByb2Nlc3MsIGluIHdoaWNoIGNhc2UgbmJfaWQgaXMgYm9ndXMKKwkgKi8KKwluYl9pZCA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlpZiAobmJfaWQgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuOworCisJY3B1MSA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7CisJY3B1MS0+YW1kX25iID0gTlVMTDsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQljcHUyID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgaSk7CisJCW5iID0gY3B1Mi0+YW1kX25iOworCQlpZiAoIW5iKQorCQkJY29udGludWU7CisJCWlmIChuYi0+bmJfaWQgPT0gbmJfaWQpCisJCQlnb3RvIGZvdW5kOworCX0KKworCW5iID0gYW1kX2FsbG9jX25iKGNwdSwgbmJfaWQpOworCWlmICghbmIpIHsKKwkJcHJfZXJyKCJwZXJmX2V2ZW50czogZmFpbGVkIE5CIGFsbG9jYXRpb24gZm9yIENQVSVkXG4iLCBjcHUpOworCQlyYXdfc3Bpbl91bmxvY2soJmFtZF9uYl9sb2NrKTsKKwkJcmV0dXJuOworCX0KK2ZvdW5kOgorCW5iLT5yZWZjbnQrKzsKKwljcHUxLT5hbWRfbmIgPSBuYjsKKworCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vZmZsaW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlcyA8IDIpCisJCXJldHVybjsKKworCWNwdWh3ID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWlmICgtLWNwdWh3LT5hbWRfbmItPnJlZmNudCA9PSAwKQorCQlrZnJlZShjcHVody0+YW1kX25iKTsKKworCWNwdWh3LT5hbWRfbmIgPSBOVUxMOworCisJcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCisJCXJldHVybiAtRU5PREVWOworCisJeDg2X3BtdSA9IGFtZF9wbXU7CisKKwkvKiBFdmVudHMgYXJlIGNvbW1vbiBmb3IgYWxsIEFNRHMgKi8KKwltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzLAorCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkvKgorCSAqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgYm9vdCBjcHUsIG90aGVyIGNwdXMgd2lsbCBnZXQKKwkgKiB0aGUgY3B1IGhvdHBsdWcgY2FsbGJhY2tzIGZyb20gc21wX2luaXQoKQorCSAqLworCWFtZF9wbXVfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiAwOworfQorCisjZWxzZSAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KKworc3RhdGljIGludCBhbWRfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X29mZmxpbmUoaW50IGNwdSkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtMCwwICsxLDk3MSBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBJbnRlbCBQZXJmTW9uIHYzLiBVc2VkIG9uIENvcmUyIGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDNjLAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDRmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHg0MTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCit9OworCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOSwgMHgyKSwgLyogREVMQVlFRF9CWVBBU1MgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksIC8qIEZQX0NPTVBfSU5TVFJfUkVUICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweDN8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4M3woMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLCAvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOCwgMHgxKSwgLyogSURMRV9EVVJJTkdfRElWICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLCAvKiBERUxBWUVEX0JZUEFTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhhMSwgMHgxKSwgLyogUlNfVU9QU19ESVNQQVRDSF9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksIC8qIE1FTV9MT0FEX1JFVElSRUQgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHhmfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweGZ8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0MCwgMHgzKSwgLyogTDFEX0NBQ0hFX0xEICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQxLCAweDMpLCAvKiBMMURfQ0FDSEVfU1QgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDIsIDB4MyksIC8qIEwxRF9DQUNIRV9MT0NLICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQzLCAweDMpLCAvKiBMMURfQUxMX1JFRiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0OCwgMHgzKSwgLyogTDFEX1BFTkRfTUlTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0ZSwgMHgzKSwgLyogTDFEX1BSRUZFVENIICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweGZ8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4ZnwoMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjAsIDB4MSksIC8qIE9GRkNPUkVfUkVRVUVTVFNfT1VUU1RBTkRJTkcgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHgzfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweDN8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxMGIsIC8qIE1FTV9JTlNUX1JFVElSRUQuTE9BRFMgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNTEsIC8qIEwxRC5SRVBMICAgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyMGIsIC8qIE1FTV9JTlNUX1JFVFVSRUQuU1RPUkVTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNTEsIC8qIEwxRC5NX1JFUEwgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE4NSwgLyogSVRMQl9NSVNTRVMuQU5ZICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAorCShJTlRFTF9BUkNIX0VWVFNFTF9NQVNLIHwJXAorCSBJTlRFTF9BUkNIX1VOSVRfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0VER0VfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLICAgIHwJXAorCSBJTlRFTF9BUkNIX0NOVF9NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYnRzKHU2NCBjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfVFI7CisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUUzsKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRJTlQ7CisKKwlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9PUzsKKworCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9VU1I7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9idHModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CisKKwlpZiAoIWNwdWMtPmRzKQorCQlyZXR1cm47CisKKwlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOworCisJZGVidWdjdGxtc3IgJj0KKwkJfihYODZfREVCVUdDVExfVFIgfCBYODZfREVCVUdDVExfQlRTIHwgWDg2X0RFQlVHQ1RMX0JUSU5UIHwKKwkJICBYODZfREVCVUdDVExfQlRTX09GRl9PUyB8IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUik7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIDApOworCisJaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKQorCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIHg4Nl9wbXUuaW50ZWxfY3RybCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0KKwkJCWNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOworCisJCWlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSkKKwkJCXJldHVybjsKKworCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhldmVudC0+aHcuY29uZmlnKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCit7CisJdTY0IHN0YXR1czsKKworCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKK3sKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IF9faWR4KQoreworCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOworCXU2NCBjdHJsX3ZhbCwgbWFzazsKKworCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOworCisJcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKKwljdHJsX3ZhbCAmPSB+bWFzazsKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcih2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOworCXN0cnVjdCBidHNfcmVjb3JkIHsKKwkJdTY0CWZyb207CisJCXU2NAl0bzsKKwkJdTY0CWZsYWdzOworCX07CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisJc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJaWYgKCFkcykKKwkJcmV0dXJuOworCisJYXQgID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZTsKKwl0b3AgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2luZGV4OworCisJaWYgKHRvcCA8PSBhdCkKKwkJcmV0dXJuOworCisJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisKKworCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCWRhdGEuYWRkcgk9IDA7CisJZGF0YS5yYXcJPSBOVUxMOworCXJlZ3MuaXAJCT0gMDsKKworCS8qCisJICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCisJICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAorCSAqIHRoZSBzYW1wbGUuCisJICovCisJcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKKwkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCisJCXJldHVybjsKKworCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgeworCQlkYXRhLmlwCQk9IGF0LT5mcm9tOworCQlkYXRhLmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7CisJfQorCisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworCisJLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCisJZXZlbnQtPmh3LmludGVycnVwdHMrKzsKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgeworCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKKwkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCit7CisJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOworCWludCBlcnI7CisKKwkvKgorCSAqIEVuYWJsZSBJUlEgZ2VuZXJhdGlvbiAoMHg4KSwKKwkgKiBhbmQgZW5hYmxlIHJpbmctMyBjb3VudGluZyAoMHgyKSBhbmQgcmluZy0wIGNvdW50aW5nICgweDEpCisJICogaWYgcmVxdWVzdGVkOgorCSAqLworCWJpdHMgPSAweDhVTEw7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikKKwkJYml0cyB8PSAweDI7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQorCQliaXRzIHw9IDB4MTsKKworCS8qCisJICogQU5ZIGJpdCBpcyBzdXBwb3J0ZWQgaW4gdjMgYW5kIHVwCisJICovCisJaWYgKHg4Nl9wbXUudmVyc2lvbiA+IDIgJiYgaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfQU5ZKQorCQliaXRzIHw9IDB4NDsKKworCWJpdHMgPDw9IChpZHggKiA0KTsKKwltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKKworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7CisJY3RybF92YWwgJj0gfm1hc2s7CisJY3RybF92YWwgfD0gYml0czsKKwllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9lbmFibGVfZml4ZWQoaHdjLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJX194ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKKy8qCisgKiBTYXZlIGFuZCByZXN0YXJ0IGFuIGV4cGlyZWQgZXZlbnQuIENhbGxlZCBieSBOTUkgY29udGV4dHMsCisgKiBzbyBpdCBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBwcmVlbXB0aW5nIG5vcm1hbCBldmVudCBvcHM6CisgKi8KK3N0YXRpYyBpbnQgaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKwlpbnQgcmV0OworCisJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJcmV0ID0geDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaWR4OworCisJaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKKwl9CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOworCX0KKwlpZiAoZHMpCisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVGhpcyBoYW5kbGVyIGlzIHRyaWdnZXJlZCBieSB0aGUgbG9jYWwgQVBJQywgc28gdGhlIEFQSUMgSVJRIGhhbmRsaW5nCisgKiBydWxlcyBhcHBseToKKyAqLworc3RhdGljIGludCBpbnRlbF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCWludCBiaXQsIGxvb3BzOworCXU2NCBhY2ssIHN0YXR1czsKKworCWRhdGEuYWRkciA9IDA7CisJZGF0YS5yYXcgPSBOVUxMOworCisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJcGVyZl9kaXNhYmxlKCk7CisJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmICghc3RhdHVzKSB7CisJCXBlcmZfZW5hYmxlKCk7CisJCXJldHVybiAwOworCX0KKworCWxvb3BzID0gMDsKK2FnYWluOgorCWlmICgrK2xvb3BzID4gMTAwKSB7CisJCVdBUk5fT05DRSgxLCAicGVyZmV2ZW50czogaXJxIGxvb3Agc3R1Y2shXG4iKTsKKwkJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOworCQlpbnRlbF9wbXVfcmVzZXQoKTsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKKwlhY2sgPSBzdGF0dXM7CisJZm9yX2VhY2hfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmc3RhdHVzLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2JpdF07CisKKwkJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgJnN0YXR1cyk7CisJCWlmICghdGVzdF9iaXQoYml0LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KGV2ZW50KSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCisJCQlpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCgmZXZlbnQtPmh3LCBiaXQpOworCX0KKworCWludGVsX3BtdV9hY2tfc3RhdHVzKGFjayk7CisKKwkvKgorCSAqIFJlcGVhdCBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZToKKwkgKi8KKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmIChzdGF0dXMpCisJCWdvdG8gYWdhaW47CisKKwlwZXJmX2VuYWJsZSgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBidHNfY29uc3RyYWludCA9CisJRVZFTlRfQ09OU1RSQUlOVCgwLCAxVUxMIDw8IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCitpbnRlbF9zcGVjaWFsX2NvbnN0cmFpbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7CisKKwlod19ldmVudCA9IGV2ZW50LT5ody5jb25maWcgJiBJTlRFTF9BUkNIX0VWRU5UX01BU0s7CisKKwlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09CisJCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCisJCSAgICAgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kID09IDEpKSkgeworCisJCXJldHVybiAmYnRzX2NvbnN0cmFpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgoraW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmM7CisKKwljID0gaW50ZWxfc3BlY2lhbF9jb25zdHJhaW50cyhldmVudCk7CisJaWYgKGMpCisJCXJldHVybiBjOworCisJcmV0dXJuIHg4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgZXZlbnQpOworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJjb3JlIiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHg4Nl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0geDg2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHg4Nl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHg4Nl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzCT0gaW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHMsCit9OworCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0geworCS5uYW1lCQkJPSAiSW50ZWwiLAorCS5oYW5kbGVfaXJxCQk9IGludGVsX3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBpbnRlbF9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gaW50ZWxfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gaW50ZWxfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZW5hYmxlX2J0cwkJPSBpbnRlbF9wbXVfZW5hYmxlX2J0cywKKwkuZGlzYWJsZV9idHMJCT0gaW50ZWxfcG11X2Rpc2FibGVfYnRzLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSBpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCit7CisJdW5pb24gY3B1aWQxMF9lZHggZWR4OworCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkOworCXVuc2lnbmVkIGludCBlYng7CisJaW50IHZlcnNpb247CisKKwlpZiAoIWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpIHsKKwkJLyogY2hlY2sgZm9yIFA2IHByb2Nlc3NvciBmYW1pbHkgKi8KKwkgICBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNikgeworCQlyZXR1cm4gcDZfcG11X2luaXQoKTsKKwkgICB9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKKwkgICB9CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKKwkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgorCSAqLworCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7CisJaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZlcnNpb24gPSBlYXguc3BsaXQudmVyc2lvbl9pZDsKKwlpZiAodmVyc2lvbiA8IDIpCisJCXg4Nl9wbXUgPSBjb3JlX3BtdTsKKwllbHNlCisJCXg4Nl9wbXUgPSBpbnRlbF9wbXU7CisKKwl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247CisJeDg2X3BtdS5udW1fZXZlbnRzCQk9IGVheC5zcGxpdC5udW1fZXZlbnRzOworCXg4Nl9wbXUuZXZlbnRfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOworCXg4Nl9wbXUuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCBlYXguc3BsaXQuYml0X3dpZHRoKSAtIDE7CisKKwkvKgorCSAqIFF1aXJrOiB2MiBwZXJmbW9uIGRvZXMgbm90IHJlcG9ydCBmaXhlZC1wdXJwb3NlIGV2ZW50cywgc28KKwkgKiBhc3N1bWUgYXQgbGVhc3QgMyBldmVudHM6CisJICovCisJaWYgKHZlcnNpb24gPiAxKQorCQl4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQgPSBtYXgoKGludCllZHguc3BsaXQubnVtX2V2ZW50c19maXhlZCwgMyk7CisKKwkvKgorCSAqIEluc3RhbGwgdGhlIGh3LWNhY2hlLWV2ZW50cyB0YWJsZToKKwkgKi8KKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxNDogLyogNjUgbm0gY29yZSBzb2xvL2R1bywgIllvbmFoIiAqLworCQlwcl9jb250KCJDb3JlIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAxNTogLyogb3JpZ2luYWwgNjUgbm0gY2VsZXJvbi9wZW50aXVtL2NvcmUyL3hlb24sICJNZXJvbSIvIkNvbnJvZSIgKi8KKwljYXNlIDIyOiAvKiBzaW5nbGUtY29yZSA2NSBubSBjZWxlcm9uL2NvcmUyc29sbyAiTWVyb20tTCIvIkNvbnJvZS1MIiAqLworCWNhc2UgMjM6IC8qIGN1cnJlbnQgNDUgbm0gY2VsZXJvbi9jb3JlMi94ZW9uICJQZW5yeW4iLyJXb2xmZGFsZSIgKi8KKwljYXNlIDI5OiAvKiBzaXgtY29yZSA0NSBubSB4ZW9uICJEdW5uaW5ndG9uIiAqLworCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMsCisJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2NvcmUyX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJDb3JlMiBldmVudHMsICIpOworCQlicmVhazsKKworCWNhc2UgMjY6IC8qIDQ1IG5tIG5laGFsZW0sICJCbG9vbWZpZWxkIiAqLworCWNhc2UgMzA6IC8qIDQ1IG5tIG5laGFsZW0sICJMeW5uZmllbGQiICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJOZWhhbGVtL0NvcmVpNyBldmVudHMsICIpOworCQlicmVhazsKKwljYXNlIDI4OgorCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJBdG9tIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAzNzogLyogMzIgbm0gbmVoYWxlbSwgIkNsYXJrZGFsZSIgKi8KKwljYXNlIDQ0OiAvKiAzMiBubSBuZWhhbGVtLCAiR3VsZnRvd24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHdlc3RtZXJlX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfd2VzdG1lcmVfZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIldlc3RtZXJlIGV2ZW50cywgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIGRlZmF1bHQgY29uc3RyYWludHMgZm9yIHYyIGFuZCB1cAorCQkgKi8KKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50czsKKwkJcHJfY29udCgiZ2VuZXJpYyBhcmNoaXRlY3RlZCBwZXJmbW9uLCAiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCisKK3N0YXRpYyBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTViYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYwpAQCAtMCwwICsxLDE1NyBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCisgKi8KK3N0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKKyAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAorfTsKKworc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKK3sKKwlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCisvKgorICogRXZlbnQgc2V0dGluZyB0aGF0IGlzIHNwZWNpZmllZCBub3QgdG8gY291bnQgYW55dGhpbmcuCisgKiBXZSB1c2UgdGhpcyB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGEgY291bnRlci4KKyAqCisgKiBMMl9SUVNUUyB3aXRoIDAgTUVTSSB1bml0IG1hc2suCisgKi8KKyNkZWZpbmUgUDZfTk9QX0VWRU5UCQkJMHgwMDAwMDAyRVVMTAorCitzdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCisKKyNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAorCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCisJIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKKwkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCisJIFA2X0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBwNl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksCS8qIEZMT1BTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MSksCS8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdm9pZCBwNl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwl1NjQgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWw7CisKKwl2YWwgPSBod2MtPmNvbmZpZzsKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7CisJLm5hbWUJCQk9ICJwNiIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gcDZfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBwNl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAorCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBwNl9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUocDZfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCisJLnZlcnNpb24JCT0gMCwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS8qCisJICogRXZlbnRzIGhhdmUgNDAgYml0cyBpbXBsZW1lbnRlZC4gSG93ZXZlciB0aGV5IGFyZSBkZXNpZ25lZCBzdWNoCisJICogdGhhdCBiaXRzIFszMi0zOV0gYXJlIHNpZ24gZXh0ZW5zaW9ucyBvZiBiaXQgMzEuIEFzIHN1Y2ggdGhlCisJICogZWZmZWN0aXZlIHdpZHRoIG9mIGEgZXZlbnQgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KKwkgKgorCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKKwkgKi8KKwkuZXZlbnRfYml0cwkJPSAzMiwKKwkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSB4ODZfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IHA2X2V2ZW50X2NvbnN0cmFpbnRzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgcDZfcG11X2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxOgorCWNhc2UgMzogIC8qIFBlbnRpdW0gUHJvICovCisJY2FzZSA1OgorCWNhc2UgNjogIC8qIFBlbnRpdW0gSUkgKi8KKwljYXNlIDc6CisJY2FzZSA4OgorCWNhc2UgMTE6IC8qIFBlbnRpdW0gSUlJICovCisJY2FzZSA5OgorCWNhc2UgMTM6CisJCS8qIFBlbnRpdW0gTSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKKwkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJeDg2X3BtdSA9IHA2X3BtdTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggODk4ZGY5Ny4uNzRmNGU4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTExNSwxNyArMTE1LDYgQEAKIAogCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwogfQotCi0vKiBjaGVja3MgdGhlIGFuIG1zciBmb3IgYXZhaWxhYmlsaXR5ICovCi1pbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKLXsKLQl1bnNpZ25lZCBpbnQgY291bnRlcjsKLQotCWNvdW50ZXIgPSBubWlfcGVyZmN0cl9tc3JfdG9fYml0KG1zcik7Ci0JQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7Ci0KLQlyZXR1cm4gIXRlc3RfYml0KGNvdW50ZXIsIHBlcmZjdHJfbm1pX293bmVyKTsKLX0KIEVYUE9SVF9TWU1CT0woYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KTsKIAogaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCBhZTc3NWNhLi4xMTU0MGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0xOCwxMSArMTgsNiBAQAogCiAjaW5jbHVkZSAiZHVtcHN0YWNrLmgiCiAKLS8qIEp1c3QgYSBzdHViIGZvciBub3cgKi8KLWludCB4ODZfaXNfc3RhY2tfaWQoaW50IGlkLCBjaGFyICpuYW1lKQotewotCXJldHVybiAwOwotfQogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggMGFkOTU5Ny4uZGNlOTlhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMzMsMTEgKzMzLDYgQEAKICNlbmRpZgogfTsKIAotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIHg4Nl9zdGFja19pZHNbaWQgLSAxXSA9PSBuYW1lOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqaW5fZXhjZXB0aW9uX3N0YWNrKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyBzdGFjaywKIAkJCQkJIHVuc2lnbmVkICp1c2VkcCwgY2hhciAqKmlkcCkKIHsKQEAgLTI5MSw2ICsyODYsNyBAQAogCiAJc3AgPSByZWdzLT5zcDsKIAlwcmludGsoIkNQVSAlZCAiLCBjcHUpOworCXByaW50X21vZHVsZXMoKTsKIAlfX3Nob3dfcmVncyhyZWdzLCAxKTsKIAlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHRocmVhZGluZm8gJXAsIHRhc2sgJXApXG4iLAogCQljdXItPmNvbW0sIGN1ci0+cGlkLCB0YXNrX3RocmVhZF9pbmZvKGN1ciksIGN1cik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCBhMWE3ODc2Li43NDBiNDQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTEyLDIxICsxMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLW1hcC5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KIAogLyoKICAqIFRoZSBlODIwIG1hcCBpcyB0aGUgbWFwIHRoYXQgZ2V0cyBtb2RpZmllZCBlLmcuIHdpdGggY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKQEAgLTUxNywxMSArNTA5LDE5IEBACiAJCQkgICAgIGludCBjaGVja3R5cGUpCiB7CiAJaW50IGk7CisJdTY0IGVuZDsKIAl1NjQgcmVhbF9yZW1vdmVkX3NpemUgPSAwOwogCiAJaWYgKHNpemUgPiAoVUxMT05HX01BWCAtIHN0YXJ0KSkKIAkJc2l6ZSA9IFVMTE9OR19NQVggLSBzdGFydDsKIAorCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZTgyMCByZW1vdmUgcmFuZ2U6ICUwMTZMeCAtICUwMTZMeCAiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQpOworCWU4MjBfcHJpbnRfdHlwZShvbGRfdHlwZSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOwogCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKQEAgLTcyMiwyODggKzcyMiw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEVhcmx5IHJlc2VydmVkIG1lbW9yeSBhcmVhcy4KLSAqLwotI2RlZmluZSBNQVhfRUFSTFlfUkVTIDMyCi0KLXN0cnVjdCBlYXJseV9yZXMgewotCXU2NCBzdGFydCwgZW5kOwotCWNoYXIgbmFtZVsxNl07Ci0JY2hhciBvdmVybGFwX29rOwotfTsKLXN0YXRpYyBzdHJ1Y3QgZWFybHlfcmVzIGVhcmx5X3Jlc1tNQVhfRUFSTFlfUkVTXSBfX2luaXRkYXRhID0gewotCXsgMCwgUEFHRV9TSVpFLCAiQklPUyBkYXRhIHBhZ2UiLCAxIH0sCS8qIEJJT1MgZGF0YSBwYWdlICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiBkZWZpbmVkKENPTkZJR19YODZfVFJBTVBPTElORSkKLQkvKgotCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKLQkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4Ci0JICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKLQkgKi8KLQl7IFBBR0VfU0laRSwgUEFHRV9TSVpFICsgUEFHRV9TSVpFLCAiRVggVFJBTVBPTElORSIsIDEgfSwKLSNlbmRpZgotCi0Je30KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfb3ZlcmxhcHBlZF9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGVhcmx5X3JlcyAqcjsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfRUFSTFlfUkVTICYmIGVhcmx5X3Jlc1tpXS5lbmQ7IGkrKykgewotCQlyID0gJmVhcmx5X3Jlc1tpXTsKLQkJaWYgKGVuZCA+IHItPnN0YXJ0ICYmIHN0YXJ0IDwgci0+ZW5kKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGk7Ci19Ci0KLS8qCi0gKiBEcm9wIHRoZSBpLXRoIHJhbmdlIGZyb20gdGhlIGVhcmx5IHJlc2VydmF0aW9uIG1hcCwKLSAqIGJ5IGNvcHlpbmcgYW55IGhpZ2hlciByYW5nZXMgZG93biBvbmUgb3ZlciBpdCwgYW5kCi0gKiBjbGVhcmluZyB3aGF0IGhhZCBiZWVuIHRoZSBsYXN0IHNsb3QuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBkcm9wX3JhbmdlKGludCBpKQotewotCWludCBqOwotCi0JZm9yIChqID0gaSArIDE7IGogPCBNQVhfRUFSTFlfUkVTICYmIGVhcmx5X3Jlc1tqXS5lbmQ7IGorKykKLQkJOwotCi0JbWVtbW92ZSgmZWFybHlfcmVzW2ldLCAmZWFybHlfcmVzW2kgKyAxXSwKLQkgICAgICAgKGogLSAxIC0gaSkgKiBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykpOwotCi0JZWFybHlfcmVzW2ogLSAxXS5lbmQgPSAwOwotfQotCi0vKgotICogU3BsaXQgYW55IGV4aXN0aW5nIHJhbmdlcyB0aGF0OgotICogIDEpIGFyZSBtYXJrZWQgJ292ZXJsYXBfb2snLCBhbmQKLSAqICAyKSBvdmVybGFwIHdpdGggdGhlIHN0YXRlZCByYW5nZSBbc3RhcnQsIGVuZCkKLSAqIGludG8gd2hhdGV2ZXIgcG9ydGlvbiAoaWYgYW55KSBvZiB0aGUgZXhpc3RpbmcgcmFuZ2UgaXMgZW50aXJlbHkKLSAqIGJlbG93IG9yIGVudGlyZWx5IGFib3ZlIHRoZSBzdGF0ZWQgcmFuZ2UuICBEcm9wIHRoZSBwb3J0aW9uCi0gKiBvZiB0aGUgZXhpc3RpbmcgcmFuZ2UgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBzdGF0ZWQgcmFuZ2UsCi0gKiB3aGljaCB3aWxsIGFsbG93IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHRvIHRoZW4gYWRkIHRoYXQKLSAqIHN0YXRlZCByYW5nZSB3aXRob3V0IGNvbmZsaWN0aW5nIHdpdGggYW55IGV4aXN0aW5nIHJhbmdlLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vayh1NjQgc3RhcnQsIHU2NCBlbmQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGVhcmx5X3JlcyAqcjsKLQl1NjQgbG93ZXJfc3RhcnQsIGxvd2VyX2VuZDsKLQl1NjQgdXBwZXJfc3RhcnQsIHVwcGVyX2VuZDsKLQljaGFyIG5hbWVbMTZdOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7Ci0JCXIgPSAmZWFybHlfcmVzW2ldOwotCi0JCS8qIENvbnRpbnVlIHBhc3Qgbm9uLW92ZXJsYXBwaW5nIHJhbmdlcyAqLwotCQlpZiAoZW5kIDw9IHItPnN0YXJ0IHx8IHN0YXJ0ID49IHItPmVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIExlYXZlIG5vbi1vayBvdmVybGFwcyBhcyBpczsgbGV0IGNhbGxlcgotCQkgKiBwYW5pYyAiT3ZlcmxhcHBpbmcgZWFybHkgcmVzZXJ2YXRpb25zIgotCQkgKiB3aGVuIGl0IGhpdHMgdGhpcyBvdmVybGFwLgotCQkgKi8KLQkJaWYgKCFyLT5vdmVybGFwX29rKQotCQkJcmV0dXJuOwotCi0JCS8qCi0JCSAqIFdlIGhhdmUgYW4gb2sgb3ZlcmxhcC4gIFdlIHdpbGwgZHJvcCBpdCBmcm9tIHRoZSBlYXJseQotCQkgKiByZXNlcnZhdGlvbiBtYXAsIGFuZCBhZGQgYmFjayBpbiBhbnkgbm9uLW92ZXJsYXBwaW5nCi0JCSAqIHBvcnRpb25zIChsb3dlciBvciB1cHBlcikgYXMgc2VwYXJhdGUsIG92ZXJsYXBfb2ssCi0JCSAqIG5vbi1vdmVybGFwcGluZyByYW5nZXMuCi0JCSAqLwotCi0JCS8qIDEuIE5vdGUgYW55IG5vbi1vdmVybGFwcGluZyAobG93ZXIgb3IgdXBwZXIpIHJhbmdlcy4gKi8KLQkJc3RybmNweShuYW1lLCByLT5uYW1lLCBzaXplb2YobmFtZSkgLSAxKTsKLQotCQlsb3dlcl9zdGFydCA9IGxvd2VyX2VuZCA9IDA7Ci0JCXVwcGVyX3N0YXJ0ID0gdXBwZXJfZW5kID0gMDsKLQkJaWYgKHItPnN0YXJ0IDwgc3RhcnQpIHsKLQkJIAlsb3dlcl9zdGFydCA9IHItPnN0YXJ0OwotCQkJbG93ZXJfZW5kID0gc3RhcnQ7Ci0JCX0KLQkJaWYgKHItPmVuZCA+IGVuZCkgewotCQkJdXBwZXJfc3RhcnQgPSBlbmQ7Ci0JCQl1cHBlcl9lbmQgPSByLT5lbmQ7Ci0JCX0KLQotCQkvKiAyLiBEcm9wIHRoZSBvcmlnaW5hbCBvayBvdmVybGFwcGluZyByYW5nZSAqLwotCQlkcm9wX3JhbmdlKGkpOwotCi0JCWktLTsJCS8qIHJlc3VtZSBmb3ItbG9vcCBvbiBjb3BpZWQgZG93biBlbnRyeSAqLwotCi0JCS8qIDMuIEFkZCBiYWNrIGluIGFueSBub24tb3ZlcmxhcHBpbmcgcmFuZ2VzLiAqLwotCQlpZiAobG93ZXJfZW5kKQotCQkJcmVzZXJ2ZV9lYXJseV9vdmVybGFwX29rKGxvd2VyX3N0YXJ0LCBsb3dlcl9lbmQsIG5hbWUpOwotCQlpZiAodXBwZXJfZW5kKQotCQkJcmVzZXJ2ZV9lYXJseV9vdmVybGFwX29rKHVwcGVyX3N0YXJ0LCB1cHBlcl9lbmQsIG5hbWUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IF9fcmVzZXJ2ZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUsCi0JCQkJCQlpbnQgb3ZlcmxhcF9vaykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgZWFybHlfcmVzICpyOwotCi0JaSA9IGZpbmRfb3ZlcmxhcHBlZF9lYXJseShzdGFydCwgZW5kKTsKLQlpZiAoaSA+PSBNQVhfRUFSTFlfUkVTKQotCQlwYW5pYygiVG9vIG1hbnkgZWFybHkgcmVzZXJ2YXRpb25zIik7Ci0JciA9ICZlYXJseV9yZXNbaV07Ci0JaWYgKHItPmVuZCkKLQkJcGFuaWMoIk92ZXJsYXBwaW5nIGVhcmx5IHJlc2VydmF0aW9ucyAiCi0JCSAgICAgICIlbGx4LSVsbHggJXMgdG8gJWxseC0lbGx4ICVzXG4iLAotCQkgICAgICBzdGFydCwgZW5kIC0gMSwgbmFtZT9uYW1lOiIiLCByLT5zdGFydCwKLQkJICAgICAgci0+ZW5kIC0gMSwgci0+bmFtZSk7Ci0Jci0+c3RhcnQgPSBzdGFydDsKLQlyLT5lbmQgPSBlbmQ7Ci0Jci0+b3ZlcmxhcF9vayA9IG92ZXJsYXBfb2s7Ci0JaWYgKG5hbWUpCi0JCXN0cm5jcHkoci0+bmFtZSwgbmFtZSwgc2l6ZW9mKHItPm5hbWUpIC0gMSk7Ci19Ci0KLS8qCi0gKiBBIGZldyBlYXJseSByZXNlcnZ0YXRpb25zIGNvbWUgaGVyZS4KLSAqCi0gKiBUaGUgJ292ZXJsYXBfb2snIGluIHRoZSBuYW1lIG9mIHRoaXMgcm91dGluZSBkb2VzIC1ub3QtIG1lYW4gaXQKLSAqIGlzIG9rIGZvciB0aGVzZSByZXNlcnZhdGlvbnMgdG8gb3ZlcmxhcCBhbiBlYXJsaWVyIHJlc2VydmF0aW9uLgotICogUmF0aGVyIGl0IG1lYW5zIHRoYXQgaXQgaXMgb2sgZm9yIHN1YnNlcXVlbnQgcmVzZXJ2YXRpb25zIHRvCi0gKiBvdmVybGFwIHRoaXMgb25lLgotICoKLSAqIFVzZSB0aGlzIGVudHJ5IHBvaW50IHRvIHJlc2VydmUgZWFybHkgcmFuZ2VzIHdoZW4geW91IGFyZSBkb2luZwotICogc28gb3V0IG9mICJQYXJhbm9pYSIsIHJlc2VydmluZyBwZXJoYXBzIG1vcmUgbWVtb3J5IHRoYW4geW91IG5lZWQsCi0gKiBqdXN0IGluIGNhc2UsIGFuZCBkb24ndCBtaW5kIGEgc3Vic2VxdWVudCBvdmVybGFwcGluZyByZXNlcnZhdGlvbgotICogdGhhdCBpcyBrbm93biB0byBiZSBuZWVkZWQuCi0gKgotICogVGhlIGRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soKSBjYWxsIGhlcmUgaXNuJ3QgcmVhbGx5IG5lZWRlZC4KLSAqIEl0IHdvdWxkIGJlIG5lZWRlZCBpZiB3ZSBoYWQgdHdvIGNvbGxpZGluZyAnb3ZlcmxhcF9vaycKLSAqIHJlc2VydmF0aW9ucywgc28gdGhhdCB0aGUgc2Vjb25kIHN1Y2ggd291bGQgbm90IHBhbmljIG9uIHRoZQotICogb3ZlcmxhcCB3aXRoIHRoZSBmaXJzdC4gIFdlIGRvbid0IGhhdmUgYW55IHN1Y2ggYXMgb2YgdGhpcwotICogd3JpdGluZywgYnV0IG1pZ2h0IGFzIHdlbGwgdG9sZXJhdGUgc3VjaCBpZiBpdCBoYXBwZW5zIGluCi0gKiB0aGUgZnV0dXJlLgotICovCi12b2lkIF9faW5pdCByZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKQotewotCWRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soc3RhcnQsIGVuZCk7Ci0JX19yZXNlcnZlX2Vhcmx5KHN0YXJ0LCBlbmQsIG5hbWUsIDEpOwotfQotCi0vKgotICogTW9zdCBlYXJseSByZXNlcnZhdGlvbnMgY29tZSBoZXJlLgotICoKLSAqIFdlIGZpcnN0IGhhdmUgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vaygpIGRyb3AgYW55IHByZS1leGlzdGluZwotICogJ292ZXJsYXBfb2snIHJhbmdlcywgc28gdGhhdCB3ZSBjYW4gdGhlbiByZXNlcnZlIHRoaXMgbWVtb3J5Ci0gKiByYW5nZSB3aXRob3V0IHJpc2sgb2YgcGFuaWMnaW5nIG9uIGFuIG92ZXJsYXBwaW5nIG92ZXJsYXBfb2sKLSAqIGVhcmx5IHJlc2VydmF0aW9uLgotICovCi12b2lkIF9faW5pdCByZXNlcnZlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSkKLXsKLQlpZiAoc3RhcnQgPj0gZW5kKQotCQlyZXR1cm47Ci0KLQlkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKHN0YXJ0LCBlbmQpOwotCV9fcmVzZXJ2ZV9lYXJseShzdGFydCwgZW5kLCBuYW1lLCAwKTsKLX0KLQotdm9pZCBfX2luaXQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpCi17Ci0Jc3RydWN0IGVhcmx5X3JlcyAqcjsKLQlpbnQgaTsKLQotCWkgPSBmaW5kX292ZXJsYXBwZWRfZWFybHkoc3RhcnQsIGVuZCk7Ci0JciA9ICZlYXJseV9yZXNbaV07Ci0JaWYgKGkgPj0gTUFYX0VBUkxZX1JFUyB8fCByLT5lbmQgIT0gZW5kIHx8IHItPnN0YXJ0ICE9IHN0YXJ0KQotCQlwYW5pYygiZnJlZV9lYXJseSBvbiBub3QgcmVzZXJ2ZWQgYXJlYTogJWxseC0lbGx4ISIsCi0JCQkgc3RhcnQsIGVuZCAtIDEpOwotCi0JZHJvcF9yYW5nZShpKTsKLX0KLQotdm9pZCBfX2luaXQgZWFybHlfcmVzX3RvX2Jvb3RtZW0odTY0IHN0YXJ0LCB1NjQgZW5kKQotewotCWludCBpLCBjb3VudDsKLQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKLQotCWNvdW50ICA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKQotCQljb3VudCsrOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiKCVkIGVhcmx5IHJlc2VydmF0aW9ucykgPT0+IGJvb3RtZW0gWyUwMTBsbHggLSAlMDEwbGx4XVxuIiwKLQkJCSBjb3VudCwgc3RhcnQsIGVuZCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGVhcmx5X3JlcyAqciA9ICZlYXJseV9yZXNbaV07Ci0JCXByaW50ayhLRVJOX0lORk8gIiAgIyVkIFslMDEwbGx4IC0gJTAxMGxseF0gJTE2cyIsIGksCi0JCQlyLT5zdGFydCwgci0+ZW5kLCByLT5uYW1lKTsKLQkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIHItPnN0YXJ0KTsKLQkJZmluYWxfZW5kID0gbWluKGVuZCwgci0+ZW5kKTsKLQkJaWYgKGZpbmFsX3N0YXJ0ID49IGZpbmFsX2VuZCkgewotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gWyUwMTBsbHggLSAlMDEwbGx4XVxuIiwKLQkJCWZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQpOwotCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhmaW5hbF9zdGFydCwgZmluYWxfZW5kIC0gZmluYWxfc3RhcnQsCi0JCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQl9Ci19Ci0KLS8qIENoZWNrIGZvciBhbHJlYWR5IHJlc2VydmVkIGFyZWFzICovCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYmFkX2FkZHIodTY0ICphZGRycCwgdTY0IHNpemUsIHU2NCBhbGlnbikKLXsKLQlpbnQgaTsKLQl1NjQgYWRkciA9ICphZGRycDsKLQlpbnQgY2hhbmdlZCA9IDA7Ci0Jc3RydWN0IGVhcmx5X3JlcyAqcjsKLWFnYWluOgotCWkgPSBmaW5kX292ZXJsYXBwZWRfZWFybHkoYWRkciwgYWRkciArIHNpemUpOwotCXIgPSAmZWFybHlfcmVzW2ldOwotCWlmIChpIDwgTUFYX0VBUkxZX1JFUyAmJiByLT5lbmQpIHsKLQkJKmFkZHJwID0gYWRkciA9IHJvdW5kX3VwKHItPmVuZCwgYWxpZ24pOwotCQljaGFuZ2VkID0gMTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLS8qIENoZWNrIGZvciBhbHJlYWR5IHJlc2VydmVkIGFyZWFzICovCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYmFkX2FkZHJfc2l6ZSh1NjQgKmFkZHJwLCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pCi17Ci0JaW50IGk7Ci0JdTY0IGFkZHIgPSAqYWRkcnAsIGxhc3Q7Ci0JdTY0IHNpemUgPSAqc2l6ZXA7Ci0JaW50IGNoYW5nZWQgPSAwOwotYWdhaW46Ci0JbGFzdCA9IGFkZHIgKyBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfRUFSTFlfUkVTICYmIGVhcmx5X3Jlc1tpXS5lbmQ7IGkrKykgewotCQlzdHJ1Y3QgZWFybHlfcmVzICpyID0gJmVhcmx5X3Jlc1tpXTsKLQkJaWYgKGxhc3QgPiByLT5zdGFydCAmJiBhZGRyIDwgci0+c3RhcnQpIHsKLQkJCXNpemUgPSByLT5zdGFydCAtIGFkZHI7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLQkJaWYgKGxhc3QgPiByLT5lbmQgJiYgYWRkciA8IHItPmVuZCkgewotCQkJYWRkciA9IHJvdW5kX3VwKHItPmVuZCwgYWxpZ24pOwotCQkJc2l6ZSA9IGxhc3QgLSBhZGRyOwotCQkJY2hhbmdlZCA9IDE7Ci0JCQlnb3RvIGFnYWluOwotCQl9Ci0JCWlmIChsYXN0IDw9IHItPmVuZCAmJiBhZGRyID49IHItPnN0YXJ0KSB7Ci0JCQkoKnNpemVwKSsrOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JaWYgKGNoYW5nZWQpIHsKLQkJKmFkZHJwID0gYWRkcjsKLQkJKnNpemVwID0gc2l6ZTsKLQl9Ci0JcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLS8qCiAgKiBGaW5kIGEgZnJlZSBhcmVhIHdpdGggc3BlY2lmaWVkIGFsaWdubWVudCBpbiBhIHNwZWNpZmljIHJhbmdlLgogICovCiB1NjQgX19pbml0IGZpbmRfZTgyMF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbikKQEAgLTEwMTIsMjkgKzczMCwzNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07Ci0JCXU2NCBhZGRyLCBsYXN0OwotCQl1NjQgZWlfbGFzdDsKKwkJdTY0IGFkZHI7CisJCXU2NCBlaV9zdGFydCwgZWlfbGFzdDsKIAogCQlpZiAoZWktPnR5cGUgIT0gRTgyMF9SQU0pCiAJCQljb250aW51ZTsKLQkJYWRkciA9IHJvdW5kX3VwKGVpLT5hZGRyLCBhbGlnbik7CisKIAkJZWlfbGFzdCA9IGVpLT5hZGRyICsgZWktPnNpemU7Ci0JCWlmIChhZGRyIDwgc3RhcnQpCi0JCQlhZGRyID0gcm91bmRfdXAoc3RhcnQsIGFsaWduKTsKLQkJaWYgKGFkZHIgPj0gZWlfbGFzdCkKLQkJCWNvbnRpbnVlOwotCQl3aGlsZSAoYmFkX2FkZHIoJmFkZHIsIHNpemUsIGFsaWduKSAmJiBhZGRyK3NpemUgPD0gZWlfbGFzdCkKLQkJCTsKLQkJbGFzdCA9IGFkZHIgKyBzaXplOwotCQlpZiAobGFzdCA+IGVpX2xhc3QpCi0JCQljb250aW51ZTsKLQkJaWYgKGxhc3QgPiBlbmQpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIGFkZHI7CisJCWVpX3N0YXJ0ID0gZWktPmFkZHI7CisJCWFkZHIgPSBmaW5kX2Vhcmx5X2FyZWEoZWlfc3RhcnQsIGVpX2xhc3QsIHN0YXJ0LCBlbmQsCisJCQkJCSBzaXplLCBhbGlnbik7CisKKwkJaWYgKGFkZHIgIT0gLTFVTEwpCisJCQlyZXR1cm4gYWRkcjsKIAl9CiAJcmV0dXJuIC0xVUxMOwogfQogCit1NjQgX19pbml0IGZpbmRfZndfbWVtbWFwX2FyZWEodTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgc2l6ZSwgdTY0IGFsaWduKQoreworCXJldHVybiBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBzaXplLCBhbGlnbik7Cit9CisKK3U2NCBfX2luaXQgZ2V0X21heF9tYXBwZWQodm9pZCkKK3sKKwl1NjQgZW5kID0gbWF4X3Bmbl9tYXBwZWQ7CisKKwllbmQgPDw9IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gZW5kOworfQogLyoKICAqIEZpbmQgbmV4dCBmcmVlIHJhbmdlIGFmdGVyICpzdGFydAogICovCkBAIC0xMDQ0LDI1ICs3NjksMTkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOwotCQl1NjQgYWRkciwgbGFzdDsKLQkJdTY0IGVpX2xhc3Q7CisJCXU2NCBhZGRyOworCQl1NjQgZWlfc3RhcnQsIGVpX2xhc3Q7CiAKIAkJaWYgKGVpLT50eXBlICE9IEU4MjBfUkFNKQogCQkJY29udGludWU7Ci0JCWFkZHIgPSByb3VuZF91cChlaS0+YWRkciwgYWxpZ24pOworCiAJCWVpX2xhc3QgPSBlaS0+YWRkciArIGVpLT5zaXplOwotCQlpZiAoYWRkciA8IHN0YXJ0KQotCQkJYWRkciA9IHJvdW5kX3VwKHN0YXJ0LCBhbGlnbik7Ci0JCWlmIChhZGRyID49IGVpX2xhc3QpCi0JCQljb250aW51ZTsKLQkJKnNpemVwID0gZWlfbGFzdCAtIGFkZHI7Ci0JCXdoaWxlIChiYWRfYWRkcl9zaXplKCZhZGRyLCBzaXplcCwgYWxpZ24pICYmCi0JCQlhZGRyICsgKnNpemVwIDw9IGVpX2xhc3QpCi0JCQk7Ci0JCWxhc3QgPSBhZGRyICsgKnNpemVwOwotCQlpZiAobGFzdCA+IGVpX2xhc3QpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIGFkZHI7CisJCWVpX3N0YXJ0ID0gZWktPmFkZHI7CisJCWFkZHIgPSBmaW5kX2Vhcmx5X2FyZWFfc2l6ZShlaV9zdGFydCwgZWlfbGFzdCwgc3RhcnQsCisJCQkJCSBzaXplcCwgYWxpZ24pOworCisJCWlmIChhZGRyICE9IC0xVUxMKQorCQkJcmV0dXJuIGFkZHI7CiAJfQogCiAJcmV0dXJuIC0xVUxMOwpAQCAtMTQyMSw2ICsxMTQwLDggQEAKIAkJCWVuZCA9IE1BWF9SRVNPVVJDRV9TSVpFOwogCQlpZiAoc3RhcnQgPj0gZW5kKQogCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZXNlcnZlIFJBTSBidWZmZXI6ICUwMTZsbHggLSAlMDE2bGx4ICIsCisJCQkgICAgICAgc3RhcnQsIGVuZCk7CiAJCXJlc2VydmVfcmVnaW9uX3dpdGhfc3BsaXQoJmlvbWVtX3Jlc291cmNlLCBzdGFydCwgZW5kLAogCQkJCQkgICJSQU0gYnVmZmVyIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGNkY2ZiMTIuLmMyZmE5YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgbWFwIHRoZSBmaXJtd2FyZSB2ZW5kb3IhXG4iKTsKIAllYXJseV9pb3VubWFwKHRtcCwgMik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzIFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzXG4iLAogCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gPj4gMTYsCiAJICAgICAgIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiAmIDB4ZmZmZiwgdmVuZG9yKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCmluZGV4IDMwOTY4OTIuLmNkMzc0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKQEAgLTMwLDE0ICszMCwzMiBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKKy8qCisgKiBtb2RpZnlpbmdfY29kZSBpcyBzZXQgdG8gbm90aWZ5IE5NSXMgdGhhdCB0aGV5IG5lZWQgdG8gdXNlCisgKiBtZW1vcnkgYmFycmllcnMgd2hlbiBlbnRlcmluZyBvciBleGl0aW5nLiBCdXQgd2UgZG9uJ3Qgd2FudAorICogdG8gYnVyZGVuIE5NSXMgd2l0aCB1bm5lY2Vzc2FyeSBtZW1vcnkgYmFycmllcnMgd2hlbiBjb2RlCisgKiBtb2RpZmljYXRpb24gaXMgbm90IGJlaW5nIGRvbmUgKHdoaWNoIGlzIG1vc3Qgb2YgdGhlIHRpbWUpLgorICoKKyAqIEEgbXV0ZXggaXMgYWxyZWFkeSBoZWxkIHdoZW4gZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZQorICogYW5kIHBvc3RfcHJvY2VzcyBhcmUgY2FsbGVkLiBObyBsb2NrcyBuZWVkIHRvIGJlIHRha2VuIGhlcmUuCisgKgorICogU3RvcCBtYWNoaW5lIHdpbGwgbWFrZSBzdXJlIGN1cnJlbnRseSBydW5uaW5nIE5NSXMgYXJlIGRvbmUKKyAqIGFuZCBuZXcgTk1JcyB3aWxsIHNlZSB0aGUgdXBkYXRlZCB2YXJpYWJsZSBiZWZvcmUgd2UgbmVlZAorICogdG8gd29ycnkgYWJvdXQgTk1JcyBkb2luZyBtZW1vcnkgYmFycmllcnMuCisgKi8KK3N0YXRpYyBpbnQgbW9kaWZ5aW5nX2NvZGUgX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHNhdmVfbW9kaWZ5aW5nX2NvZGUpOworCiBpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQogewogCXNldF9rZXJuZWxfdGV4dF9ydygpOworCW1vZGlmeWluZ19jb2RlID0gMTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2Vzcyh2b2lkKQogeworCW1vZGlmeWluZ19jb2RlID0gMDsKIAlzZXRfa2VybmVsX3RleHRfcm8oKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OSw2ICsxNjcsMTEgQEAKIAogdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpCiB7CisJX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSA9IG1vZGlmeWluZ19jb2RlOworCisJaWYgKCFfX2dldF9jcHVfdmFyKHNhdmVfbW9kaWZ5aW5nX2NvZGUpKQorCQlyZXR1cm47CisKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJm5taV9ydW5uaW5nKSAmIE1PRF9DT0RFX1dSSVRFX0ZMQUcpIHsKIAkJc21wX3JtYigpOwogCQlmdHJhY2VfbW9kX2NvZGUoKTsKQEAgLTE2MCw2ICsxODMsOSBAQAogCiB2b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKQogeworCWlmICghX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSkKKwkJcmV0dXJuOworCiAJLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBubWlfcnVubmluZyAqLwogCXNtcF9tYigpOwogCWF0b21pY19kZWMoJm5taV9ydW5uaW5nKTsKQEAgLTQ4NCwxMyArNTEwLDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKCZzeXNfY2FsbF90YWJsZSlbbnJdOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggNTA1MWI5NC4uYWRlZGVlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtMjksNiArMjksMTYgQEAKIAogdm9pZCBfX2luaXQgaTM4Nl9zdGFydF9rZXJuZWwodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfWDg2X1RSQU1QT0xJTkUKKwkvKgorCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKKwkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4CisJICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKKwkgKi8KKwlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2soUEFHRV9TSVpFLCBQQUdFX1NJWkUgKyBQQUdFX1NJWkUsCisJCQkJCSAiRVggVFJBTVBPTElORSIpOworI2VuZGlmCisKIAlyZXNlcnZlX2Vhcmx5KF9fcGFfc3ltYm9sKCZfdGV4dCksIF9fcGFfc3ltYm9sKCZfX2Jzc19zdG9wKSwgIlRFWFQgREFUQSBCU1MiKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggN2ZkMzE4Yi4uMzdjM2Q0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC00NDIsOCArNDQyLDggQEAKIAkgKi8KIAljbXBiICQwLHJlYWR5CiAJam5lIDFmCi0JbW92bCAkcGVyX2NwdV9fZ2R0X3BhZ2UsJWVheAotCW1vdmwgJHBlcl9jcHVfX3N0YWNrX2NhbmFyeSwlZWN4CisJbW92bCAkZ2R0X3BhZ2UsJWVheAorCW1vdmwgJHN0YWNrX2NhbmFyeSwlZWN4CiAJbW92dyAlY3gsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgMiglZWF4KQogCXNocmwgJDE2LCAlZWN4CiAJbW92YiAlY2wsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgNCglZWF4KQpAQCAtNzA2LDcgKzcwNiw3IEBACiAJLndvcmQgMAkJCQkjIDMyIGJpdCBhbGlnbiBnZHRfZGVzYy5hZGRyZXNzCiBFTlRSWShlYXJseV9nZHRfZGVzY3IpCiAJLndvcmQgR0RUX0VOVFJJRVMqOC0xCi0JLmxvbmcgcGVyX2NwdV9fZ2R0X3BhZ2UJCS8qIE92ZXJ3cml0dGVuIGZvciBzZWNvbmRhcnkgQ1BVcyAqLworCS5sb25nIGdkdF9wYWdlCQkJLyogT3ZlcndyaXR0ZW4gZm9yIHNlY29uZGFyeSBDUFVzICovCiAKIC8qCiAgKiBUaGUgYm9vdF9nZHQgbXVzdCBtaXJyb3IgdGhlIGVxdWl2YWxlbnQgaW4gc2V0dXAuUyBhbmQgaXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IGFkODBhMWMuLmVlNGZhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJZm9yY2VfaHBldF9yZXN1bWUoKTsKIH0KIAotc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfY291bnRlcih2b2lkKQorc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfY291bnRlcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWhwZXRfcmVzdW1lX2RldmljZSgpOwogCWhwZXRfcmVzdGFydF9jb3VudGVyKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCBiYjYwMDZlLi5kY2EyODAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTQ4Niw4ICs0ODYsNiBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKIAkJYnAgPSBwZXJfY3B1KGJwX3Blcl9yZWdbaV0sIGNwdSk7Ci0JCWlmIChicCkKLQkJCXJjID0gTk9USUZZX0RPTkU7CiAJCS8qCiAJCSAqIFJlc2V0IHRoZSAnaSd0aCBUUkFQIGJpdCBpbiBkcjYgdG8gZGVub3RlIGNvbXBsZXRpb24gb2YKIAkJICogZXhjZXB0aW9uIGhhbmRsaW5nCkBAIC01MDYsNyArNTA0LDEzIEBACiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQotCWlmIChkcjYgJiAofkRSX1RSQVBfQklUUykpCisJLyoKKwkgKiBGdXJ0aGVyIHByb2Nlc3NpbmcgaW4gZG9fZGVidWcoKSBpcyBuZWVkZWQgZm9yIGEpIHVzZXItc3BhY2UKKwkgKiBicmVha3BvaW50cyAodG8gZ2VuZXJhdGUgc2lnbmFscykgYW5kIGIpIHdoZW4gdGhlIHN5c3RlbSBoYXMKKwkgKiB0YWtlbiBleGNlcHRpb24gZHVlIHRvIG11bHRpcGxlIGNhdXNlcworCSAqLworCWlmICgoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNiAmIERSX1RSQVBfQklUUykgfHwKKwkgICAgKGRyNiAmICh+RFJfVFJBUF9CSVRTKSkpCiAJCXJjID0gTk9USUZZX0RPTkU7CiAKIAlzZXRfZGVidWdyZWcoZHI3LCA3KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCmluZGV4IGYyZjg1NDAuLmMwMWEyYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwpAQCAtMTY0LDYgKzE2NCwxMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhlIHhzdGF0ZXJlZ3NfYWN0aXZlKCkgcm91dGluZSBpcyB0aGUgc2FtZSBhcyB0aGUgZnByZWdzX2FjdGl2ZSgpIHJvdXRpbmUsCisgKiBhcyB0aGUgInJlZ3NldC0+biIgZm9yIHRoZSB4c3RhdGUgcmVnc2V0IHdpbGwgYmUgdXBkYXRlZCBiYXNlZCBvbiB0aGUgZmVhdHVyZQorICogY2FwYWJpbGl0ZXMgc3VwcG9ydGVkIGJ5IHRoZSB4c2F2ZS4KKyAqLwogaW50IGZwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQogewogCXJldHVybiB0c2tfdXNlZF9tYXRoKHRhcmdldCkgPyByZWdzZXQtPm4gOiAwOwpAQCAtMjA0LDggKzIwOSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwotCiAJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAogCQkJCSAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5meHNhdmUsIDAsIC0xKTsKIApAQCAtMjI0LDYgKzIyNyw2OCBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCB4c3RhdGVyZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHJldDsKKworCWlmICghY3B1X2hhc194c2F2ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIENvcHkgdGhlIDQ4Ynl0ZXMgZGVmaW5lZCBieSB0aGUgc29mdHdhcmUgZmlyc3QgaW50byB0aGUgeHN0YXRlCisJICogbWVtb3J5IGxheW91dCBpbiB0aGUgdGhyZWFkIHN0cnVjdCwgc28gdGhhdCB3ZSBjYW4gY29weSB0aGUgZW50aXJlCisJICogeHN0YXRlcmVncyB0byB0aGUgdXNlciB1c2luZyBvbmUgdXNlcl9yZWdzZXRfY29weW91dCgpLgorCSAqLworCW1lbWNweSgmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5meHNhdmUuc3dfcmVzZXJ2ZWQsCisJICAgICAgIHhzdGF0ZV9meF9zd19ieXRlcywgc2l6ZW9mKHhzdGF0ZV9meF9zd19ieXRlcykpOworCisJLyoKKwkgKiBDb3B5IHRoZSB4c3RhdGUgbWVtb3J5IGxheW91dC4KKwkgKi8KKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+eHNhdmUsIDAsIC0xKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgeHN0YXRlcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0ICp4c2F2ZV9oZHI7CisKKwlpZiAoIWNwdV9oYXNfeHNhdmUpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW5pdF9mcHUodGFyZ2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT54c2F2ZSwgMCwgLTEpOworCisJLyoKKwkgKiBteGNzciByZXNlcnZlZCBiaXRzIG11c3QgYmUgbWFza2VkIHRvIHplcm8gZm9yIHNlY3VyaXR5IHJlYXNvbnMuCisJICovCisJdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5meHNhdmUubXhjc3IgJj0gbXhjc3JfZmVhdHVyZV9tYXNrOworCisJeHNhdmVfaGRyID0gJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+eHNhdmUueHNhdmVfaGRyOworCisJeHNhdmVfaGRyLT54c3RhdGVfYnYgJj0gcGNudHh0X21hc2s7CisJLyoKKwkgKiBUaGVzZSBiaXRzIG11c3QgYmUgemVyby4KKwkgKi8KKwl4c2F2ZV9oZHItPnJlc2VydmVkMVswXSA9IHhzYXZlX2hkci0+cmVzZXJ2ZWQxWzFdID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKICNpZiBkZWZpbmVkIENPTkZJR19YODZfMzIgfHwgZGVmaW5lZCBDT05GSUdfSUEzMl9FTVVMQVRJT04KIAogLyoKQEAgLTQwNCw4ICs0NjksNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKLQogCWlmICghSEFWRV9IV0ZQKQogCQlyZXR1cm4gZnByZWdzX3NvZnRfc2V0KHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LCBrYnVmLCB1YnVmKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwppbmRleCBkZjg5MTAyLi44YzkzYTg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwpAQCAtMzIsNyArMzIsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pOwotREVGSU5FX1NQSU5MT0NLKGk4MjU5QV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soaTgyNTlBX2xvY2spOwogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrXzgyNTlBKHVuc2lnbmVkIGludCk7CiAKIHN0cnVjdCBpcnFfY2hpcCBpODI1OUFfY2hpcCA9IHsKQEAgLTY4LDEzICs2OCwxMyBAQAogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCBpcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAljYWNoZWRfaXJxX21hc2sgfD0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CiAJZWxzZQogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtODIsMTMgKzgyLDEzIEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSB+KDEgPDwgaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtOTcsMTIgKzk3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWlmIChpcnEgPCA4KQogCQlyZXQgPSBpbmIoUElDX01BU1RFUl9DTUQpICYgbWFzazsKIAllbHNlCiAJCXJldCA9IGluYihQSUNfU0xBVkVfQ01EKSAmIChtYXNrID4+IDgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUwLDcgKzE1MCw3IEBACiAJdW5zaWduZWQgaW50IGlycW1hc2sgPSAxIDw8IGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogTGlnaHR3ZWlnaHQgc3B1cmlvdXMgSVJRIGRldGVjdGlvbi4gV2UgZG8gbm90IHdhbnQKIAkgKiB0byBvdmVyZG8gc3B1cmlvdXMgSVJRIGhhbmRsaW5nIC0gaXQncyB1c3VhbGx5IGEgc2lnbgpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7CiAJCW91dGIoMHg2MCtpcnEsIFBJQ19NQVNURVJfQ01EKTsJLyogJ1NwZWNpZmljIEVPSSB0byBtYXN0ZXIgKi8KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CiAKIHNwdXJpb3VzXzgyNTlBX2lycToKQEAgLTI4NSwyNCArMjg1LDI0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCiAJb3V0YigweGZmLCBQSUNfU0xBVkVfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMiAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCB1bm1hc2tfODI1OUEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsgLyogcmVzdG9yZSBtYXN0ZXIgSVJRIG1hc2sgKi8KIAlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsJICAvKiByZXN0b3JlIHNsYXZlIElSUSBtYXNrICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGluaXRfODI1OUEoaW50IGF1dG9fZW9pKQpAQCAtMzExLDcgKzMxMSw3IEBACiAKIAlpODI1OUFfYXV0b19lb2kgPSBhdXRvX2VvaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCiAJb3V0YigweGZmLCBQSUNfU0xBVkVfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMiAqLwpAQCAtMzU2LDUgKzM1Niw1IEBACiAJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsgLyogcmVzdG9yZSBtYXN0ZXIgSVJRIG1hc2sgKi8KIAlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsJICAvKiByZXN0b3JlIHNsYXZlIElSUSBtYXNrICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKaW5kZXggZDU5MzIyMi4uZmNlNTVkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCkBAIC04NCwyNCArODQsNyBAQAogfTsKIAogREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKLQlbMCAuLi4gSVJRMF9WRUNUT1IgLSAxXSA9IC0xLAotCVtJUlEwX1ZFQ1RPUl0gPSAwLAotCVtJUlExX1ZFQ1RPUl0gPSAxLAotCVtJUlEyX1ZFQ1RPUl0gPSAyLAotCVtJUlEzX1ZFQ1RPUl0gPSAzLAotCVtJUlE0X1ZFQ1RPUl0gPSA0LAotCVtJUlE1X1ZFQ1RPUl0gPSA1LAotCVtJUlE2X1ZFQ1RPUl0gPSA2LAotCVtJUlE3X1ZFQ1RPUl0gPSA3LAotCVtJUlE4X1ZFQ1RPUl0gPSA4LAotCVtJUlE5X1ZFQ1RPUl0gPSA5LAotCVtJUlExMF9WRUNUT1JdID0gMTAsCi0JW0lSUTExX1ZFQ1RPUl0gPSAxMSwKLQlbSVJRMTJfVkVDVE9SXSA9IDEyLAotCVtJUlExM19WRUNUT1JdID0gMTMsCi0JW0lSUTE0X1ZFQ1RPUl0gPSAxNCwKLQlbSVJRMTVfVkVDVE9SXSA9IDE1LAotCVtJUlExNV9WRUNUT1IgKyAxIC4uLiBOUl9WRUNUT1JTIC0gMV0gPSAtMQorCVswIC4uLiBOUl9WRUNUT1JTIC0gMV0gPSAtMSwKIH07CiAKIGludCB2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCkBAIC0xMTYsNiArOTksOSBAQAogCXJldHVybiAwOwogfQogCisvKiBOdW1iZXIgb2YgbGVnYWN5IGludGVycnVwdHMgKi8KK2ludCBucl9sZWdhY3lfaXJxcyBfX3JlYWRfbW9zdGx5ID0gTlJfSVJRU19MRUdBQ1k7CisKIHZvaWQgX19pbml0IGluaXRfSVNBX2lycXModm9pZCkKIHsKIAlpbnQgaTsKQEAgLTE0Miw2ICsxMjgsMTkgQEAKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKKwlpbnQgaTsKKworCS8qCisJICogT24gY3B1IDAsIEFzc2lnbiBJUlEwX1ZFQ1RPUi4uSVJRMTVfVkVDVE9SJ3MgdG8gSVJRIDAuLjE1LgorCSAqIElmIHRoZXNlIElSUSdzIGFyZSBoYW5kbGVkIGJ5IGxlZ2FjeSBpbnRlcnJ1cHQtY29udHJvbGxlcnMgbGlrZSBQSUMsCisJICogdGhlbiB0aGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBsaWtlbHkgYmUgc3RhdGljIGFmdGVyIHRoZSBib290LiBJZgorCSAqIHRoZXNlIElSUSdzIGFyZSBoYW5kbGVkIGJ5IG1vcmUgbW9yZGVybiBjb250cm9sbGVycyBsaWtlIElPLUFQSUMsCisJICogdGhlbiB0aGlzIHZlY3RvciBzcGFjZSBjYW4gYmUgZnJlZWQgYW5kIHJlLXVzZWQgZHluYW1pY2FsbHkgYXMgdGhlCisJICogaXJxJ3MgbWlncmF0ZSBldGMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX2xlZ2FjeV9pcnFzOyBpKyspCisJCXBlcl9jcHUodmVjdG9yX2lycSwgMClbSVJRMF9WRUNUT1IgKyBpXSA9IGk7CisKIAl4ODZfaW5pdC5pcnFzLmludHJfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCA1YjhjNzUwLi41ZGU5ZjRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTMzNyw2ICszMzcsOSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwlpZiAoYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCiAJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwpAQCAtNDI5LDcgKzQzMiw3IEBACiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uYm9vc3RhYmxlID09IDEgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggZWJkMTkzZS4uODVhMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCSAgICAgICBjcHVfbnVtLCBtY19pbnRlbC0+aGRyLnJldik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJfaW5mbygiQ1BVJWQgdXBkYXRlZCB0byByZXZpc2lvbiAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAorCXByX2luZm8oIkNQVSVkIHVwZGF0ZWQgdG8gcmV2aXNpb24gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4XG4iLAogCQljcHVfbnVtLCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKaW5kZXggNzEyZDE1Zi4uNzE4MjU4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCkBAIC03LDYgKzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmdlLmg+CisKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTMwLDExICszMiw2IEBACiAJeyAweGZmLCAwLCBQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMjAwIH0sCiB9OwogCi1zdHJ1Y3QgcmFuZ2UgewotCXU2NCBzdGFydDsKLQl1NjQgZW5kOwotfTsKLQogc3RhdGljIGludCBfX2NwdWluaXQgY21wX3JhbmdlKGNvbnN0IHZvaWQgKngxLCBjb25zdCB2b2lkICp4MikKIHsKIAljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIxID0geDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IDFiMTczOWQuLjFkYjE4M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC00MjgsMTAgKzQyOCw2IEBACiAJLnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQsCiAJLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0ID0gX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCwKIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JLmttYXBfYXRvbWljX3B0ZSA9IGttYXBfYXRvbWljLAotI2VuZGlmCi0KICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IG5hdGl2ZV9zZXRfcHRlX2F0b21pYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDc1ZTE0ZTIuLjFhYTk2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtNjUsNyArNjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgIWRlZmluZWQoQ09ORklHX05VTUEpCiBzdGF0aWMgX19pbml0ZGF0YSB2b2lkICpkbWEzMl9ib290bWVtX3B0cjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYTMyX2Jvb3RtZW1fc2l6ZSBfX2luaXRkYXRhID0gKDEyOFVMTDw8MjApOwogCkBAIC0xMTYsMTQgKzExNiwyMSBAQAogCWRtYTMyX2Jvb3RtZW1fcHRyID0gTlVMTDsKIAlkbWEzMl9ib290bWVtX3NpemUgPSAwOwogfQorI2Vsc2UKK3ZvaWQgX19pbml0IGRtYTMyX3Jlc2VydmVfYm9vdG1lbSh2b2lkKQoreworfQorc3RhdGljIHZvaWQgX19pbml0IGRtYTMyX2ZyZWVfYm9vdG1lbSh2b2lkKQoreworfQorCiAjZW5kaWYKIAogdm9pZCBfX2luaXQgcGNpX2lvbW11X2FsbG9jKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qIGZyZWUgdGhlIHJhbmdlIHNvIGlvbW11IGNvdWxkIGdldCBzb21lIHJhbmdlIGxlc3MgdGhhbiA0RyAqLwogCWRtYTMyX2ZyZWVfYm9vdG1lbSgpOwotI2VuZGlmCisKIAlpZiAocGNpX3N3aW90bGJfZGV0ZWN0KCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjOWIzNTIyLi4wMmQ2NzgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTkyLDYgKzkyLDEzIEBACiAJfQogfQogCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaG93X3JlZ2lzdGVycyhyZWdzKTsKKwlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyksCisJCSAgIHJlZ3MtPmJwKTsKK30KKwogdm9pZCBzaG93X3JlZ3NfY29tbW9uKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqYm9hcmQsICpwcm9kdWN0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMzdhZDFlMC4uZjZjNjI2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xNzQsMTIgKzE3NCw2IEBACiAJCQlkNiwgZDcpOwogfQogCi12b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKLQlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICZyZWdzLT5zcCwgcmVncy0+YnApOwotfQotCiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQogewogCUJVR19PTihkZWFkX3Rhc2stPm1tKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDEyNmYwYjQuLmRjOTY5MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjExLDEyICsyMTEsNiBAQAogCXByaW50ayhLRVJOX0RFRkFVTFQgIkRSMzogJTAxNmx4IERSNjogJTAxNmx4IERSNzogJTAxNmx4XG4iLCBkMywgZDYsIGQ3KTsKIH0KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAodm9pZCAqKShyZWdzICsgMSksIHJlZ3MtPmJwKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlpZiAoZGVhZF90YXNrLT5tbSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDBjMTAzM2QuLjJkOTZhYWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC00OCw2ICs0OCw3IEBACiAJUkVHU0VUX0ZQLAogCVJFR1NFVF9YRlAsCiAJUkVHU0VUX0lPUEVSTTY0ID0gUkVHU0VUX1hGUCwKKwlSRUdTRVRfWFNUQVRFLAogCVJFR1NFVF9UTFMsCiAJUkVHU0VUX0lPUEVSTTMyLAogfTsKQEAgLTE0MCwzMCArMTQxLDYgQEAKICNlbmRpZgogfTsKIAotLyoqCi0gKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSAtIGdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbAotICogQHJlZ3M6CXB0X3JlZ3Mgd2hpY2ggY29udGFpbnMgcmVnaXN0ZXJzIGF0IGZ1bmN0aW9uIGVudHJ5LgotICogQG46CQlhcmd1bWVudCBudW1iZXIuCi0gKgotICogcmVnc19nZXRfYXJndW1lbnRfbnRoKCkgcmV0dXJucyBAbiB0aCBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIGNhbGwuCi0gKiBTaW5jZSB1c3VhbGx5IHRoZSBrZXJuZWwgc3RhY2sgd2lsbCBiZSBjaGFuZ2VkIHJpZ2h0IGFmdGVyIGZ1bmN0aW9uIGVudHJ5LAotICogeW91IG11c3QgdXNlIHRoaXMgYXQgZnVuY3Rpb24gZW50cnkuIElmIHRoZSBAbiB0aCBlbnRyeSBpcyBOT1QgaW4gdGhlCi0gKiBrZXJuZWwgc3RhY2sgb3IgcHRfcmVncywgdGhpcyByZXR1cm5zIDAuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlpZiAobiA8IEFSUkFZX1NJWkUoYXJnX29mZnNfdGFibGUpKQotCQlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKChjaGFyICopcmVncyArIGFyZ19vZmZzX3RhYmxlW25dKTsKLQllbHNlIHsKLQkJLyoKLQkJICogVGhlIHR5cGljYWwgY2FzZTogYXJnIG4gaXMgb24gdGhlIHN0YWNrLgotCQkgKiAoTm90ZTogc3RhY2tbMF0gPSByZXR1cm4gYWRkcmVzcywgc28gc2tpcCBpdCkKLQkJICovCi0JCW4gLT0gQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSk7Ci0JCXJldHVybiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHJlZ3MsIDEgKyBuKTsKLQl9Ci19Ci0KIC8qCiAgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCiAgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCkBAIC0xNTg3LDcgKzE1NjQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGxvbmcpLApAQCAtMTYwMCw2ICsxNTc3LDEyIEBACiAJCS5zaXplID0gc2l6ZW9mKGxvbmcpLCAuYWxpZ24gPSBzaXplb2YobG9uZyksCiAJCS5hY3RpdmUgPSB4ZnByZWdzX2FjdGl2ZSwgLmdldCA9IHhmcHJlZ3NfZ2V0LCAuc2V0ID0geGZwcmVnc19zZXQKIAl9LAorCVtSRUdTRVRfWFNUQVRFXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfWDg2X1hTVEFURSwKKwkJLnNpemUgPSBzaXplb2YodTY0KSwgLmFsaWduID0gc2l6ZW9mKHU2NCksCisJCS5hY3RpdmUgPSB4c3RhdGVyZWdzX2FjdGl2ZSwgLmdldCA9IHhzdGF0ZXJlZ3NfZ2V0LAorCQkuc2V0ID0geHN0YXRlcmVnc19zZXQKKwl9LAogCVtSRUdTRVRfSU9QRVJNNjRdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfSU9QRVJNLAogCQkubiA9IElPX0JJVE1BUF9MT05HUywKQEAgLTE2MjUsNyArMTYwOCw3IEBACiAjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwogCiAjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMikgLyBzaXplb2YodTMyKSwKQEAgLTE2NDQsNiArMTYyNywxMiBAQAogCQkuc2l6ZSA9IHNpemVvZih1MzIpLCAuYWxpZ24gPSBzaXplb2YodTMyKSwKIAkJLmFjdGl2ZSA9IHhmcHJlZ3NfYWN0aXZlLCAuZ2V0ID0geGZwcmVnc19nZXQsIC5zZXQgPSB4ZnByZWdzX3NldAogCX0sCisJW1JFR1NFVF9YU1RBVEVdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9YODZfWFNUQVRFLAorCQkuc2l6ZSA9IHNpemVvZih1NjQpLCAuYWxpZ24gPSBzaXplb2YodTY0KSwKKwkJLmFjdGl2ZSA9IHhzdGF0ZXJlZ3NfYWN0aXZlLCAuZ2V0ID0geHN0YXRlcmVnc19nZXQsCisJCS5zZXQgPSB4c3RhdGVyZWdzX3NldAorCX0sCiAJW1JFR1NFVF9UTFNdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfVExTLAogCQkubiA9IEdEVF9FTlRSWV9UTFNfRU5UUklFUywgLmJpYXMgPSBHRFRfRU5UUllfVExTX01JTiwKQEAgLTE2NjYsNiArMTY1NSwyMyBAQAogfTsKICNlbmRpZgogCisvKgorICogVGhpcyByZXByZXNlbnRzIGJ5dGVzIDQ2NC4uNTExIGluIHRoZSBtZW1vcnkgbGF5b3V0IGV4cG9ydGVkIHRocm91Z2gKKyAqIHRoZSBSRUdTRVRfWFNUQVRFIGludGVyZmFjZS4KKyAqLwordTY0IHhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9GWF9TV19XT1JEU107CisKK3ZvaWQgdXBkYXRlX3JlZ3NldF94c3RhdGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IHhzdGF0ZV9tYXNrKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwl4ODZfNjRfcmVnc2V0c1tSRUdTRVRfWFNUQVRFXS5uID0gc2l6ZSAvIHNpemVvZih1NjQpOworI2VuZGlmCisjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJeDg2XzMyX3JlZ3NldHNbUkVHU0VUX1hTVEFURV0ubiA9IHNpemUgLyBzaXplb2YodTY0KTsKKyNlbmRpZgorCXhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9YQ1IwX1dPUkRdID0geHN0YXRlX21hc2s7Cit9CisKIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDcwNGJkZGMuLjhlMWFhYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTQ2MSw2ICs0NjEsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjbWluaTMsMSIpLAogCQl9LAogCX0sCisJewkvKiBIYW5kbGUgcHJvYmxlbXMgd2l0aCByZWJvb3Rpbmcgb24gdGhlIGlNYWM5LDEuICovCisJCS5jYWxsYmFjayA9IHNldF9wY2lfcmVib290LAorCQkuaWRlbnQgPSAiQXBwbGUgaU1hYzksMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJpTWFjOSwxIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNWQ5ZTQwYy4uNWQ3YmExYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTEyMSw3ICsxMjEsOSBAQAogdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwogCisjaWZkZWYgQ09ORklHX0RNSQogUkVTRVJWRV9CUksoZG1pX2FsbG9jLCA2NTUzNik7CisjZW5kaWYKIAogdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTY2Nyw2ICs2NjksMjMgQEAKIAl7fQogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHRyaW1fYmlvc19yYW5nZSh2b2lkKQoreworCS8qCisJICogQSBzcGVjaWFsIGNhc2UgaXMgdGhlIGZpcnN0IDRLYiBvZiBtZW1vcnk7CisJICogVGhpcyBpcyBhIEJJT1Mgb3duZWQgYXJlYSwgbm90IGtlcm5lbCByYW0sIGJ1dCBnZW5lcmFsbHkKKwkgKiBub3QgbGlzdGVkIGFzIHN1Y2ggaW4gdGhlIEU4MjAgdGFibGUuCisJICovCisJZTgyMF91cGRhdGVfcmFuZ2UoMCwgUEFHRV9TSVpFLCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CisJLyoKKwkgKiBzcGVjaWFsIGNhc2U6IFNvbWUgQklPU2VuIHJlcG9ydCB0aGUgUEMgQklPUworCSAqIGFyZWEgKDY0MC0+MU1iKSBhcyByYW0gZXZlbiB0aG91Z2ggaXQgaXMgbm90LgorCSAqIHRha2UgdGhlbSBvdXQuCisJICovCisJZTgyMF9yZW1vdmVfcmFuZ2UoQklPU19CRUdJTiwgQklPU19FTkQgLSBCSU9TX0JFR0lOLCBFODIwX1JBTSwgMSk7CisJc2FuaXRpemVfZTgyMF9tYXAoZTgyMC5tYXAsIEFSUkFZX1NJWkUoZTgyMC5tYXApLCAmZTgyMC5ucl9tYXApOworfQorCiAvKgogICogRGV0ZXJtaW5lIGlmIHdlIHdlcmUgbG9hZGVkIGJ5IGFuIEVGSSBsb2FkZXIuICBJZiBzbywgdGhlbiB3ZSBoYXZlIGFsc28gYmVlbgogICogcGFzc2VkIHRoZSBlZmkgbWVtbWFwLCBzeXN0YWIsIGV0Yy4sIHNvIHdlIHNob3VsZCB1c2UgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzCkBAIC04MzAsNyArODQ5LDcgQEAKIAlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSk7CiAJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmJzc19yZXNvdXJjZSk7CiAKLQorCXRyaW1fYmlvc19yYW5nZSgpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAlpZiAocHByb193aXRoX3JhbV9idWcoKSkgewogCQllODIwX3VwZGF0ZV9yYW5nZSgweDcwMDAwMDAwVUxMLCAweDQwMDAwVUxMLCBFODIwX1JBTSwKQEAgLTk1MCwxNiArOTY5LDEyIEBACiAjZW5kaWYKIAogCWluaXRtZW1faW5pdCgwLCBtYXhfcGZuLCBhY3BpLCBrOCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyoKLQkgKiBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0oKSBhbGxvY2F0ZXMgYm9vdG1lbSB3aGljaCBtYXkgY29uZmxpY3QKLQkgKiB3aXRoIHRoZSBjcmFzaGtlcm5lbCBjb21tYW5kIGxpbmUsIHNvIGRvIHRoYXQgYWZ0ZXIKLQkgKiByZXNlcnZlX2NyYXNoa2VybmVsKCkKLQkgKi8KLQlkbWEzMl9yZXNlcnZlX2Jvb3RtZW0oKTsKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KKwllYXJseV9yZXNfdG9fYm9vdG1lbSgwLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAjZW5kaWYKIAorCWRtYTMyX3Jlc2VydmVfYm9vdG1lbSgpOworCiAJcmVzZXJ2ZV9pYmZ0X3JlZ2lvbigpOwogCiAjaWZkZWYgQ09ORklHX0tWTV9DTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDM1YWJjYjguLmVmNjM3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTEzNyw3ICsxMzcsMTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHBjcHVfZmNfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJdTY0IHN0YXJ0ID0gX19wYShwdHIpOworCXU2NCBlbmQgPSBzdGFydCArIHNpemU7CisJZnJlZV9lYXJseV9wYXJ0aWFsKHN0YXJ0LCBlbmQpOworI2Vsc2UKIAlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggYjRlODcwYy4uYTQzNWM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0yNDEsNiArMjQxLDExIEBACiAJbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpOwogCiAJbm90aWZ5X2NwdV9zdGFydGluZyhjcHVpZCk7CisKKwkvKgorCSAqIE5lZWQgdG8gc2V0dXAgdmVjdG9yIG1hcHBpbmdzIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cy4KKwkgKi8KKwlfX3NldHVwX3ZlY3Rvcl9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkvKgogCSAqIEdldCBvdXIgYm9nb21pcHMuCiAJICoKQEAgLTMxNSwxMSArMzIwLDExIEBACiAJICovCiAJaXBpX2NhbGxfbG9jaygpOwogCWxvY2tfdmVjdG9yX2xvY2soKTsKLQlfX3NldHVwX3ZlY3Rvcl9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlzZXRfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCksIHRydWUpOwogCXVubG9ja192ZWN0b3JfbG9jaygpOwogCWlwaV9jYWxsX3VubG9jaygpOwogCXBlcl9jcHUoY3B1X3N0YXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gQ1BVX09OTElORTsKKwl4ODZfcGxhdGZvcm0ubm1pX2luaXQoKTsKIAogCS8qIGVuYWJsZSBsb2NhbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMTIxMSwxMSArMTIxNiwxMiBAQAogCiAJdG90YWxfY3B1cyA9IG1heF90KGludCwgcG9zc2libGUsIG51bV9wcm9jZXNzb3JzICsgZGlzYWJsZWRfY3B1cyk7CiAKLQlpZiAocG9zc2libGUgPiBDT05GSUdfTlJfQ1BVUykgeworCS8qIG5yX2NwdV9pZHMgY291bGQgYmUgcmVkdWNlZCB2aWEgbnJfY3B1cz0gKi8KKwlpZiAocG9zc2libGUgPiBucl9jcHVfaWRzKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSIlZCBQcm9jZXNzb3JzIGV4Y2VlZHMgTlJfQ1BVUyBsaW1pdCBvZiAlZFxuIiwKLQkJCXBvc3NpYmxlLCBDT05GSUdfTlJfQ1BVUyk7Ci0JCXBvc3NpYmxlID0gQ09ORklHX05SX0NQVVM7CisJCQlwb3NzaWJsZSwgbnJfY3B1X2lkcyk7CisJCXBvc3NpYmxlID0gbnJfY3B1X2lkczsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJTTVA6IEFsbG93aW5nICVkIENQVXMsICVkIGhvdHBsdWcgQ1BVc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGJlMjU3MzQuLmZiNWNjNWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKQEAgLTcwLDExICs3MCwxMSBAQAogCQkgKiBtYW51YWxseSB0byBkZWFzc2VydCBOTUkgbGluZXMgZm9yIHRoZSB3YXRjaGRvZyBpZiBydW4KIAkJICogb24gYW4gODI0ODlEWC1iYXNlZCBzeXN0ZW0uCiAJCSAqLwotCQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwogCQlvdXRiKDB4MGMsIFBJQ19NQVNURVJfT0NXMyk7CiAJCS8qIEFjayB0aGUgSVJROyBBRU9JIHdpbGwgZW5kIGl0IGF1dG9tYXRpY2FsbHkuICovCiAJCWluYihQSUNfTUFTVEVSX1BPTEwpOwotCQlzcGluX3VubG9jaygmaTgyNTlBX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKIAl9CiAKIAlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIoZ2xvYmFsX2Nsb2NrX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzMzOTkxNy4uMTE2OGU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogCiAJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKKwkvKiBGaWx0ZXIgb3V0IGFsbCB0aGUgcmVzZXJ2ZWQgYml0cyB3aGljaCBhcmUgcHJlc2V0IHRvIDEgKi8KKwlkcjYgJj0gfkRSNl9SRVNFUlZFRDsKKwogCS8qIENhdGNoIGttZW1jaGVjayBjb25kaXRpb25zIGZpcnN0IG9mIGFsbCEgKi8KIAlpZiAoKGRyNiAmIERSX1NURVApICYmIGttZW1jaGVja190cmFwKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggNTk3NjgzYS4uMjA4YTg1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcmVzdW1lX3RzYyh2b2lkKQorc3RhdGljIHZvaWQgcmVzdW1lX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWNsb2Nrc291cmNlX3RzYy5jeWNsZV9sYXN0ID0gMDsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzX2xvdywgcmVzX2hpZ2g7CiAKIAlyZG1zcl9zYWZlKE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwLCAmcmVzX2xvdywgJnJlc19oaWdoKTsKLQkvKiBHZW9kZV9MWCAtIHRoZSBPTFBDIENQVSBoYXMgYSBwb3NzaWJseSBhIHZlcnkgcmVsaWFibGUgVFNDICovCisJLyogR2VvZGVfTFggLSB0aGUgT0xQQyBDUFUgaGFzIGEgdmVyeSByZWxpYWJsZSBUU0MgKi8KIAlpZiAocmVzX2xvdyAmIFJUU0NfU1VTUCkKIAkJdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlID0gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwppbmRleCAzNmFmYjk4Ni4uMzA5YzcwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKQEAgLTU0LDE5ICs1NCwxOSBAQAogCWlmICghc2dpX3V2X2tvYmopCiAJCXNnaV91dl9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgic2dpX3V2IiwgZmlybXdhcmVfa29iaik7CiAJaWYgKCFzZ2lfdXZfa29iaikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkIHNnaV91diBmYWlsZWQgXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZwYXJ0aXRpb25faWRfYXR0ci5hdHRyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIHBhcnRpdGlvbl9pZCBmYWlsZWQgXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgcGFydGl0aW9uX2lkIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZjb2hlcmVuY2VfaWRfYXR0ci5hdHRyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWQgXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgY29oZXJlbmNlX2lkIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKaW5kZXggMzRhMjc5YS4uYWIzOGNlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKQEAgLTU1OSw3ICs1NTksNyBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJLyogRmluZCBvdXQgd2hhdCdzIGludGVycnVwdGluZyBpbiB0aGUgUElJWDQgbWFzdGVyIDgyNTkgKi8KIAlvdXRiKDB4MGMsIDB4MjApOwkJLyogT0NXMyBQb2xsIGNvbW1hbmQgKi8KQEAgLTU5Niw3ICs1OTYsNyBAQAogCQlvdXRiKDB4NjAgKyByZWFsaXJxLCAweDIwKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJZGVzYyA9IGlycV90b19kZXNjKHJlYWxpcnEpOwogCkBAIC02MTQsNyArNjE0LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCBkNDMwZTRjLi43ZGQ1OTlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vdm1pX3RpbWUuaD4KQEAgLTI2NiwzMCArMjY3LDYgQEAKIHsKIH0KIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi1zdGF0aWMgdm9pZCAqdm1pX2ttYXBfYXRvbWljX3B0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCi17Ci0Jdm9pZCAqdmEgPSBrbWFwX2F0b21pYyhwYWdlLCB0eXBlKTsKLQotCS8qCi0JICogSW50ZXJuYWxseSwgdGhlIFZNSSBST00gbXVzdCBtYXAgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKLQkgKiBhZGRyZXNzZXMgZm9yIHByb2Nlc3NpbmcgTU1VIHVwZGF0ZXMuICBCeSB0aGUgdGltZSBNTVUgdXBkYXRlcwotCSAqIGFyZSBpc3N1ZWQsIHRoaXMgaW5mb3JtYXRpb24gaXMgdHlwaWNhbGx5IGFscmVhZHkgbG9zdC4KLQkgKiBGb3J0dW5hdGVseSwgdGhlIFZNSSBwcm92aWRlcyBhIGNhY2hlIG9mIG1hcHBpbmcgc2xvdHMgZm9yIGFjdGl2ZQotCSAqIHBhZ2UgdGFibGVzLgotCSAqCi0JICogV2UgdXNlIHNsb3QgemVybyBmb3IgdGhlIGxpbmVhciBtYXBwaW5nIG9mIHBoeXNpY2FsIG1lbW9yeSwgYW5kCi0JICogaW4gSElHSFBURSBrZXJuZWxzLCBzbG90IDEgYW5kIDIgZm9yIEtNX1BURTAgYW5kIEtNX1BURTEuCi0JICoKLQkgKiAgYXJnczogICAgICAgICAgICAgICAgIFNMT1QgICAgICAgICAgICAgICAgIFZBICAgIENPVU5UIFBGTgotCSAqLwotCUJVR19PTih0eXBlICE9IEtNX1BURTAgJiYgdHlwZSAhPSBLTV9QVEUxKTsKLQl2bWlfb3BzLnNldF9saW5lYXJfbWFwcGluZygodHlwZSAtIEtNX1BURTApKzEsIHZhLCAxLCBwYWdlX3RvX3BmbihwYWdlKSk7Ci0KLQlyZXR1cm4gdmE7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgdm1pX2FsbG9jYXRlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJdm1pX29wcy5hbGxvY2F0ZV9wYWdlKHBmbiwgVk1JX1BBR0VfTDEsIDAsIDAsIDApOwpAQCAtNjQwLDYgKzYxNywxMiBAQAogCXU2NCByZWxvYzsKIAljb25zdCBzdHJ1Y3Qgdm1pX3JlbG9jYXRpb25faW5mbyAqcmVsID0gKHN0cnVjdCB2bWlfcmVsb2NhdGlvbl9pbmZvICopJnJlbG9jOwogCisJLyoKKwkgKiBQcmV2ZW50IHBhZ2UgdGFibGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIGhpZ2htZW0sIGV2ZW4gaWYKKwkgKiBDT05GSUdfSElHSFBURSBpcyBlbmFibGVkLgorCSAqLworCV9fdXNlcnB0ZV9hbGxvY19nZnAgJj0gfl9fR0ZQX0hJR0hNRU07CisKIAlpZiAoY2FsbF92cm9tX2Z1bmModm1pX3JvbSwgdm1pX2luaXQpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWTUkgUk9NIGZhaWxlZCB0byBpbml0aWFsaXplISIpOwogCQlyZXR1cm4gMDsKQEAgLTc3OCwxMCArNzYxLDYgQEAKIAogCS8qIFNldCBsaW5lYXIgaXMgbmVlZGVkIGluIGFsbCBjYXNlcyAqLwogCXZtaV9vcHMuc2V0X2xpbmVhcl9tYXBwaW5nID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9TZXRMaW5lYXJNYXBwaW5nKTsKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCWlmICh2bWlfb3BzLnNldF9saW5lYXJfbWFwcGluZykKLQkJcHZfbW11X29wcy5rbWFwX2F0b21pY19wdGUgPSB2bWlfa21hcF9hdG9taWNfcHRlOwotI2VuZGlmCiAKIAkvKgogCSAqIFRoZXNlIE1VU1QgYWx3YXlzIGJlIHBhdGNoZWQuICBEb24ndCBzdXBwb3J0IGluZGlyZWN0IGp1bXBzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCmluZGV4IDc0YzkyYmIuLjJmMWNhNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCkBAIC03OSwxMSArNzksNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bWlfZ2V0X3RpbWVyX3ZlY3Rvcih2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXJldHVybiBGSVJTVF9ERVZJQ0VfVkVDVE9SOwotI2Vsc2UKLQlyZXR1cm4gRklSU1RfRVhURVJOQUxfVkVDVE9SOwotI2VuZGlmCisJcmV0dXJuIElSUTBfVkVDVE9SOwogfQogCiAvKiogdm1pIGNsb2NrY2hpcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmOTJhMGRhNi4uNDQ4NzlkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTM0MSw3ICszNDEsNyBAQAogICogUGVyLWNwdSBzeW1ib2xzIHdoaWNoIG5lZWQgdG8gYmUgb2Zmc2V0IGZyb20gX19wZXJfY3B1X2xvYWQKICAqIGZvciB0aGUgYm9vdCBwcm9jZXNzb3IuCiAgKi8KLSNkZWZpbmUgSU5JVF9QRVJfQ1BVKHgpIGluaXRfcGVyX2NwdV9fIyN4ID0gcGVyX2NwdV9fIyN4ICsgX19wZXJfY3B1X2xvYWQKKyNkZWZpbmUgSU5JVF9QRVJfQ1BVKHgpIGluaXRfcGVyX2NwdV9fIyN4ID0geCArIF9fcGVyX2NwdV9sb2FkCiBJTklUX1BFUl9DUFUoZ2R0X3BhZ2UpOwogSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CiAKQEAgLTM1Miw3ICszNTIsNyBAQAogCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLS4gPSBBU1NFUlQoKHBlcl9jcHVfX2lycV9zdGFja191bmlvbiA9PSAwKSwKKy4gPSBBU1NFUlQoKGlycV9zdGFja191bmlvbiA9PSAwKSwKICAgICAgICAgICAgImlycV9zdGFja191bmlvbiBpcyBub3QgYXQgc3RhcnQgb2YgcGVyLWNwdSBhcmVhIik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwppbmRleCA2MTlmN2Y4Li42OTM5MjBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwpAQCAtMjYsNyArMjYsOCBAQAogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOwogCi1FWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljKTsKK0VYUE9SVF9TWU1CT0woY29weV91c2VyX2dlbmVyaWNfc3RyaW5nKTsKK0VYUE9SVF9TWU1CT0woY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQpOwogRVhQT1JUX1NZTUJPTChfX2NvcHlfdXNlcl9ub2NhY2hlKTsKIEVYUE9SVF9TWU1CT0woX2NvcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX2NvcHlfdG9fdXNlcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGNjZDE3OWQuLmVlNTc0NmM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtNzYsMTAgKzc2LDEzIEBACiAJLnNldHVwX3BlcmNwdV9jbG9ja2V2CQk9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrLAogfTsKIAorc3RhdGljIHZvaWQgZGVmYXVsdF9ubWlfaW5pdCh2b2lkKSB7IH07CisKIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSA9IHsKIAkuY2FsaWJyYXRlX3RzYwkJCT0gbmF0aXZlX2NhbGlicmF0ZV90c2MsCiAJLmdldF93YWxsY2xvY2sJCQk9IG1hY2hfZ2V0X2Ntb3NfdGltZSwKIAkuc2V0X3dhbGxjbG9jawkJCT0gbWFjaF9zZXRfcnRjX21tc3MsCiAJLmlvbW11X3NodXRkb3duCQkJPSBpb21tdV9zaHV0ZG93bl9ub29wLAogCS5pc191bnRyYWNrZWRfcGF0X3JhbmdlCQk9IGlzX0lTQV9yYW5nZSwKKwkubm1pX2luaXQJCQk9IGRlZmF1bHRfbm1pX2luaXQKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYyBiL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCmluZGV4IGM1ZWUxN2UuLjc4MmMzYTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAl4c3RhdGVfc2l6ZSA9IGVieDsKIAorCXVwZGF0ZV9yZWdzZXRfeHN0YXRlX2luZm8oeHN0YXRlX3NpemUsIHBjbnR4dF9tYXNrKTsKIAlwcmVwYXJlX2Z4X3N3X2ZyYW1lKCk7CiAKIAlzZXR1cF94c3RhdGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCA0Y2Q0OTgzLi4zYzRkMDEwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKKysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTY1LDYgKzY1LDcgQEAKIAogIyBPSywgaXQncyBhIGxpdHRsZSBjb3VudGVyLWludHVpdGl2ZSB0byBkbyB0aGlzLCBidXQgaXQgcHV0cyBpdCBuZWF0bHkgdW5kZXIKICMgdGhlIHZpcnR1YWxpemF0aW9uIG1lbnUuCitzb3VyY2UgZHJpdmVycy92aG9zdC9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZwogc291cmNlIGRyaXZlcnMvdmlydGlvL0tjb25maWcKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IGNmZmQ3NTRmLi40MTkzODZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAKIGNsZWFuLWZpbGVzIDo9IGluYXQtdGFibGVzLmMKIAotb2JqLSQoQ09ORklHX1NNUCkgKz0gbXNyLXNtcC5vCitvYmotJChDT05GSUdfU01QKSArPSBtc3Itc21wLm8gY2FjaGUtc21wLm8KIAogbGliLXkgOj0gZGVsYXkubwogbGliLXkgKz0gdGh1bmtfJChCSVRTKS5vCkBAIC0zNCw5ICszNCwxMCBAQAogZW5kaWYKICAgICAgICAgbGliLSQoQ09ORklHX1g4Nl9VU0VfM0ROT1cpICs9IG1teF8zMi5vCiBlbHNlCi0gICAgICAgIG9iai15ICs9IGlvXzY0Lm8gaW9tYXBfY29weV82NC5vCisgICAgICAgIG9iai15ICs9IGlvbWFwX2NvcHlfNjQubwogICAgICAgICBsaWIteSArPSBjc3VtLXBhcnRpYWxfNjQubyBjc3VtLWNvcHlfNjQubyBjc3VtLXdyYXBwZXJzXzY0Lm8KICAgICAgICAgbGliLXkgKz0gdGh1bmtfNjQubyBjbGVhcl9wYWdlXzY0Lm8gY29weV9wYWdlXzY0Lm8KICAgICAgICAgbGliLXkgKz0gbWVtbW92ZV82NC5vIG1lbXNldF82NC5vCiAgICAgICAgIGxpYi15ICs9IGNvcHlfdXNlcl82NC5vIHJ3bG9ja182NC5vIGNvcHlfdXNlcl9ub2NhY2hlXzY0Lm8KKwlsaWItJChDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0pICs9IHJ3c2VtXzY0Lm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMgYi9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjNjY4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9jYWNoZS1zbXAuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0YXRpYyB2b2lkIF9fd2JpbnZkKHZvaWQgKmR1bW15KQoreworCXdiaW52ZCgpOworfQorCit2b2lkIHdiaW52ZF9vbl9jcHUoaW50IGNwdSkKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3diaW52ZCwgTlVMTCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHdiaW52ZF9vbl9jcHUpOworCitpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIG9uX2VhY2hfY3B1KF9fd2JpbnZkLCBOVUxMLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wod2JpbnZkX29uX2FsbF9jcHVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCBjZjg4OWQ0Li43MTEwMGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC05MCwxMiArOTAsNiBAQAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKF9jb3B5X2Zyb21fdXNlcikKIAotRU5UUlkoY29weV91c2VyX2dlbmVyaWMpCi0JQ0ZJX1NUQVJUUFJPQwotCUFMVEVSTkFUSVZFX0pVTVAgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsY29weV91c2VyX2dlbmVyaWNfc3RyaW5nCi0JQ0ZJX0VORFBST0MKLUVORFBST0MoY29weV91c2VyX2dlbmVyaWMpCi0KIAkuc2VjdGlvbiAuZml4dXAsImF4IgogCS8qIG11c3QgemVybyBkZXN0ICovCiBFTlRSWShiYWRfZnJvbV91c2VyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2lvXzY0LmMgYi9hcmNoL3g4Ni9saWIvaW9fNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxZWI1OWI1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2xpYi9pb182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi12b2lkIF9fbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZyBkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbGVuKQotewotCV9faW5saW5lX21lbWNweSgodm9pZCAqKWRzdCwgc3JjLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChfX21lbWNweV90b2lvKTsKLQotdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbGVuKQotewotCV9faW5saW5lX21lbWNweShkc3QsIChjb25zdCB2b2lkICopc3JjLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChfX21lbWNweV9mcm9taW8pOwotCi12b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEsIGludCBiLCBzaXplX3QgYykKLXsKLQkvKgotCSAqIFRPRE86IG1lbXNldCBjYW4gbWFuZ2xlIHRoZSBJTyBwYXR0ZXJucyBxdWl0ZSBhIGJpdC4KLQkgKiBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgYSBkdW1iIG9uZToKLQkgKi8KLQltZW1zZXQoKHZvaWQgKilhLCBiLCBjKTsKLX0KLUVYUE9SVF9TWU1CT0wobWVtc2V0X2lvKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwppbmRleCBhZDU0NDFlLi5mODJlODg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCkBAIC0yMCwxMiArMjAsMTEgQEAKIC8qCiAgKiBtZW1jcHlfYygpIC0gZmFzdCBzdHJpbmcgb3BzIChSRVAgTU9WU1EpIGJhc2VkIHZhcmlhbnQuCiAgKgotICogQ2FsbHMgdG8gdGhpcyBnZXQgcGF0Y2hlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UgdmlhIHRoZQorICogVGhpcyBnZXRzIHBhdGNoZWQgb3ZlciB0aGUgdW5yb2xsZWQgdmFyaWFudCAoYmVsb3cpIHZpYSB0aGUKICAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CiAgKi8KLQlBTElHTgotbWVtY3B5X2M6Ci0JQ0ZJX1NUQVJUUFJPQworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IiwgQHByb2diaXRzCisuTG1lbWNweV9jOgogCW1vdnEgJXJkaSwgJXJheAogCiAJbW92bCAlZWR4LCAlZWN4CkBAIC0zNSw4ICszNCw4IEBACiAJbW92bCAlZWR4LCAlZWN4CiAJcmVwIG1vdnNiCiAJcmV0Ci0JQ0ZJX0VORFBST0MKLUVORFBST0MobWVtY3B5X2MpCisuTG1lbWNweV9lOgorCS5wcmV2aW91cwogCiBFTlRSWShfX21lbWNweSkKIEVOVFJZKG1lbWNweSkKQEAgLTEyOCwxNiArMTI3LDEwIEBACiAJICogSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlOgogCSAqLwogCi0JLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCi0xOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCi0JLmJ5dGUgKG1lbWNweV9jIC0gbWVtY3B5KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KLTI6Ci0JLnByZXZpb3VzCi0KIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKIAkuYWxpZ24gOAogCS5xdWFkIG1lbWNweQotCS5xdWFkIDFiCisJLnF1YWQgLkxtZW1jcHlfYwogCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECiAKIAkvKgpAQCAtMTQ1LDYgKzEzOCw2IEBACiAJICogc28gaXQgaXMgc2lsbHkgdG8gb3ZlcndyaXRlIGl0c2VsZiB3aXRoIG5vcHMgLSByZWJvb3QgaXMgdGhlCiAJICogb25seSBvdXRjb21lLi4uCiAJICovCi0JLmJ5dGUgMmIgLSAxYgotCS5ieXRlIDJiIC0gMWIKKwkuYnl0ZSAuTG1lbWNweV9lIC0gLkxtZW1jcHlfYworCS5ieXRlIC5MbWVtY3B5X2UgLSAuTG1lbWNweV9jCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKaW5kZXggMmM1OTQ4MTEuLmU4OGQzYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKQEAgLTEyLDkgKzEyLDggQEAKICAqIAogICogcmF4ICAgb3JpZ2luYWwgZGVzdGluYXRpb24KICAqLwkKLQlBTElHTgotbWVtc2V0X2M6Ci0JQ0ZJX1NUQVJUUFJPQworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IiwgQHByb2diaXRzCisuTG1lbXNldF9jOgogCW1vdnEgJXJkaSwlcjkKIAltb3ZsICVlZHgsJXI4ZAogCWFuZGwgJDcsJXI4ZApAQCAtMjksOCArMjgsOCBAQAogCXJlcCBzdG9zYgogCW1vdnEgJXI5LCVyYXgKIAlyZXQKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhtZW1zZXRfYykKKy5MbWVtc2V0X2U6CisJLnByZXZpb3VzCiAKIEVOVFJZKG1lbXNldCkKIEVOVFJZKF9fbWVtc2V0KQpAQCAtMTE4LDE2ICsxMTcsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKLQkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgotMToJLmJ5dGUgMHhlYgkJCQkvKiBqbXAgPGRpc3A4PiAqLwotCS5ieXRlIChtZW1zZXRfYyAtIG1lbXNldCkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgotCS5wcmV2aW91cwogCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1zZXQKLQkucXVhZCAxYgorCS5xdWFkIC5MbWVtc2V0X2MKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAogCS5ieXRlIC5MZmluYWwgLSBtZW1zZXQKLQkuYnl0ZSAyYiAtIDFiCisJLmJ5dGUgLkxtZW1zZXRfZSAtIC5MbWVtc2V0X2MKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TIGIvYXJjaC94ODYvbGliL3J3c2VtXzY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhY2VjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiB4ODYtNjQgcndzZW0gd3JhcHBlcnMKKyAqCisgKiBUaGlzIGludGVyZmFjZXMgdGhlIGlubGluZSBhc20gY29kZSB0byB0aGUgc2xvdy1wYXRoCisgKiBDIHJvdXRpbmVzLiBXZSBuZWVkIHRvIHNhdmUgdGhlIGNhbGwtY2xvYmJlcmVkIHJlZ3MKKyAqIHRoYXQgdGhlIGFzbSBkb2VzIG5vdCBtYXJrIGFzIGNsb2JiZXJlZCwgYW5kIG1vdmUgdGhlCisgKiBhcmd1bWVudCBmcm9tICVyYXggdG8gJXJkaS4KKyAqCisgKiBOT1RFISBXZSBkb24ndCBuZWVkIHRvIHNhdmUgJXJheCwgYmVjYXVzZSB0aGUgZnVuY3Rpb25zCisgKiB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHNlbWFwaG9yZSBwb2ludGVyIGluICVyYXggKHdoaWNoCisgKiBpcyBhbHNvIHRoZSBpbnB1dCBhcmd1bWVudCB0byB0aGVzZSBoZWxwZXJzKQorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2FuIGNsb2JiZXIgJXJkeCBiZWNhdXNlIHRoZSBhc20gY2xvYmJlcnMgaXQ6CisgKiAgIGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQKKyAqICAgY2FsbF9yd3NlbV93YWtlCisgKiBidXQgJXJkaSwgJXJzaSwgJXJjeCwgJXI4LXIxMSBhbHdheXMgbmVlZCBzYXZpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vcndsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworI2RlZmluZSBzYXZlX2NvbW1vbl9yZWdzIFwKKwlwdXNocSAlcmRpOyBcCisJcHVzaHEgJXJzaTsgXAorCXB1c2hxICVyY3g7IFwKKwlwdXNocSAlcjg7IFwKKwlwdXNocSAlcjk7IFwKKwlwdXNocSAlcjEwOyBcCisJcHVzaHEgJXIxMQorCisjZGVmaW5lIHJlc3RvcmVfY29tbW9uX3JlZ3MgXAorCXBvcHEgJXIxMTsgXAorCXBvcHEgJXIxMDsgXAorCXBvcHEgJXI5OyBcCisJcG9wcSAlcjg7IFwKKwlwb3BxICVyY3g7IFwKKwlwb3BxICVyc2k7IFwKKwlwb3BxICVyZGkKKworLyogRml4IHVwIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9ucyAqLworRU5UUlkoY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkKQorCXNhdmVfY29tbW9uX3JlZ3MKKwlwdXNocSAlcmR4CisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZAorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKwlyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fd2FrZSkKKwlkZWN3ICVkeCAgICAvKiBkbyBub3RoaW5nIGlmIHN0aWxsIG91dHN0YW5kaW5nIGFjdGl2ZSByZWFkZXJzICovCisJam56IDFmCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV93YWtlCisJcmVzdG9yZV9jb21tb25fcmVncworMToJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX3dha2UpCisKKy8qIEZpeCB1cCBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbnMgKi8KK0VOVFJZKGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2UpCisJc2F2ZV9jb21tb25fcmVncworCXB1c2hxICVyZHgKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fZG93bmdyYWRlX3dha2UKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGQ0MDZjNTIuLmU3MWM1Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI2NiwxNiArMjY2LDkgQEAKIAlpZiAoIWFmdGVyX2Jvb3RtZW0pCiAJCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKLQkJCQkJICAgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0JcmV0ID0gZW5kOwotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQogCQlyZXQgPSBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KG1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCiAJCQkJCQkgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIAllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IDlhMGMyNTguLjVjYjNmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTI0MSw2ICsyNDEsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrKQogewogCWludCB1c2VfcHNlID0gcGFnZV9zaXplX21hc2sgPT0gKDE8PFBHX0xFVkVMXzJNKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSBlbmQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CkBAIC0zNDEsOSArMzQyLDEwIEBACiAJCQkJCXByb3QgPSBQQUdFX0tFUk5FTF9FWEVDOwogCiAJCQkJcGFnZXNfNGsrKzsKLQkJCQlpZiAobWFwcGluZ19pdGVyID09IDEpCisJCQkJaWYgKG1hcHBpbmdfaXRlciA9PSAxKSB7CiAJCQkJCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgaW5pdF9wcm90KSk7Ci0JCQkJZWxzZQorCQkJCQlsYXN0X21hcF9hZGRyID0gKHBmbiA8PCBQQUdFX1NISUZUKSArIFBBR0VfU0laRTsKKwkJCQl9IGVsc2UKIAkJCQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CiAJCQl9CiAJCX0KQEAgLTM2OCw3ICszNzAsNyBAQAogCQltYXBwaW5nX2l0ZXIgPSAyOwogCQlnb3RvIHJlcGVhdDsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKIHB0ZV90ICprbWFwX3B0ZTsKQEAgLTc0OCw2ICs3NTAsNyBAQAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsCiAJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCkBAIC03NjQsMTMgKzc2NywxNCBAQAogCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCiAJCSBub2RlaWQsIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOwogCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5vZGVpZCwgZW5kX3Bmbik7Ci0JZWFybHlfcmVzX3RvX2Jvb3RtZW0oc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKIAogCXJldHVybiBib290bWFwICsgYm9vdG1hcF9zaXplOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpCiB7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJaW50IG5vZGVpZDsKIAl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZSwgYm9vdG1hcDsKIAkvKgpAQCAtNzgyLDExICs3ODYsMTMgQEAKIAlpZiAoYm9vdG1hcCA9PSAtMUwpCiAJCXBhbmljKCJDYW5ub3QgZmluZCBib290bWVtIG1hcCBvZiBzaXplICVsZFxuIiwgYm9vdG1hcF9zaXplKTsKIAlyZXNlcnZlX2Vhcmx5KGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUsICJCT09UTUFQIik7CisjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIiAgbWFwcGVkIGxvdyByYW06IDAgLSAlMDhseFxuIiwKIAkJIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZUKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIGxvdyByYW06IDAgLSAlMDhseFxuIiwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOwogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZWlkKSB7CiAJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIApAQCAtODA0LDYgKzgxMCw3IEBACiAJCWJvb3RtYXAgPSBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkLCBzdGFydF9wZm4sIGVuZF9wZm4sCiAJCQkJCQkgYm9vdG1hcCk7CiAJfQorI2VuZGlmCiAKIAlhZnRlcl9ib290bWVtID0gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCA2OWRkZmJkLi5lOWIwNDBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01NzIsNiArNTcyLDcgQEAKIHZvaWQgX19pbml0IGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLAogCQkJCWludCBhY3BpLCBpbnQgazgpCiB7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGJvb3RtYXA7CiAKIAlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3Bmbik8PFBBR0VfU0hJRlQ7CkBAIC01NzksMTMgKzU4MCwxNSBAQAogCQkJCSBQQUdFX1NJWkUpOwogCWlmIChib290bWFwID09IC0xTCkKIAkJcGFuaWMoIkNhbm5vdCBmaW5kIGJvb3RtZW0gbWFwIG9mIHNpemUgJWxkXG4iLCBib290bWFwX3NpemUpOworCXJlc2VydmVfZWFybHkoYm9vdG1hcCwgYm9vdG1hcCArIGJvb3RtYXBfc2l6ZSwgIkJPT1RNQVAiKTsKIAkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLwogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYm9vdG1hcCA+PiBQQUdFX1NISUZULAogCQkJCQkgMCwgZW5kX3Bmbik7CiAJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucygwLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGVuZF9wZm4pOwotCWVhcmx5X3Jlc190b19ib290bWVtKDAsIGVuZF9wZm48PFBBR0VfU0hJRlQpOwotCXJlc2VydmVfYm9vdG1lbShib290bWFwLCBib290bWFwX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CisjZWxzZQorCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoMCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTk3NCw3ICs5NzcsNyBAQAogCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCQkJcHRlX3QgZW50cnk7CiAKLQkJCQlwID0gdm1lbW1hcF9hbGxvY19ibG9jayhQTURfU0laRSwgbm9kZSk7CisJCQkJcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBNRF9TSVpFLCBub2RlKTsKIAkJCQlpZiAoIXApCiAJCQkJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggYzI0NmQyNS4uNWViMWJhNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjQsNDMgKzI0LDYgQEAKIAogI2luY2x1ZGUgInBoeXNhZGRyLmgiCiAKLWludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlyZXNvdXJjZV9zaXplX3QgYWRkciwgZW5kOwotCWludCBpOwotCi0JLyoKLQkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKLQkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQotCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KLQkgKi8KLQlpZiAocGFnZW5yID09IDApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBTZWNvbmQgc3BlY2lhbCBjYXNlOiBTb21lIEJJT1NlbiByZXBvcnQgdGhlIFBDIEJJT1MKLQkgKiBhcmVhICg2NDAtPjFNYikgYXMgcmFtIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdC4KLQkgKi8KLQlpZiAocGFnZW5yID49IChCSU9TX0JFR0lOID4+IFBBR0VfU0hJRlQpICYmCi0JCSAgICBwYWdlbnIgPCAoQklPU19FTkQgPj4gUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKLQkJLyoKLQkJICogTm90IHVzYWJsZSBtZW1vcnk6Ci0JCSAqLwotCQlpZiAoZTgyMC5tYXBbaV0udHlwZSAhPSBFODIwX1JBTSkKLQkJCWNvbnRpbnVlOwotCQlhZGRyID0gKGU4MjAubWFwW2ldLmFkZHIgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQkJZW5kID0gKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplKSA+PiBQQUdFX1NISUZUOwotCi0KLQkJaWYgKChwYWdlbnIgPj0gYWRkcikgJiYgKHBhZ2VuciA8IGVuZCkpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBGaXggdXAgdGhlIGxpbmVhciBkaXJlY3QgbWFwcGluZyBvZiB0aGUga2VybmVsIHRvIGF2b2lkIGNhY2hlIGF0dHJpYnV0ZQogICogY29uZmxpY3RzLgpAQCAtNDIyLDYgKzM4NSwxMCBAQAogCSAqIFRoZSBib290LWlvcmVtYXAgcmFuZ2Ugc3BhbnMgbXVsdGlwbGUgcG1kcywgZm9yIHdoaWNoCiAJICogd2UgYXJlIG5vdCBwcmVwYXJlZDoKIAkgKi8KKyNkZWZpbmUgX19GSVhBRERSX1RPUCAoLVBBR0VfU0laRSkKKwlCVUlMRF9CVUdfT04oKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSA+PiBQTURfU0hJRlQpCisJCSAgICAgIT0gKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkgPj4gUE1EX1NISUZUKSk7CisjdW5kZWYgX19GSVhBRERSX1RPUAogCWlmIChwbWQgIT0gZWFybHlfaW9yZW1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpKSB7CiAJCVdBUk5fT04oMSk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBtZCAlcCAhPSAlcFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwppbmRleCA4Y2MxODMzNC4uYjNiNTMxYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJaWYgKCFzaGFkb3cpCiAJCXJldHVybiB0cnVlOwogCi0Jc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190ZXN0KHNoYWRvdywgc2l6ZSk7CisJc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbChzaGFkb3csIHNpemUpOwogCiAJcmV0dXJuIHN0YXR1cyA9PSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCmluZGV4IDNmNjZiODIuLmFlYzEyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKQEAgLTEyNSwxMiArMTI1LDEyIEBACiAKIGVudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfS01FTUNIRUNLX1BBUlRJQUxfT0sKIAl1aW50OF90ICp4OwogCXVuc2lnbmVkIGludCBpOwogCiAJeCA9IHNoYWRvdzsKIAotI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0tfUEFSVElBTF9PSwogCS8qCiAJICogTWFrZSBzdXJlIF9zb21lXyBieXRlcyBhcmUgaW5pdGlhbGl6ZWQuIEdjYyBmcmVxdWVudGx5IGdlbmVyYXRlcwogCSAqIGNvZGUgdG8gYWNjZXNzIG5laWdoYm9yaW5nIGJ5dGVzLgpAQCAtMTM5LDEzICsxMzksMjUgQEAKIAkJaWYgKHhbaV0gPT0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRCkKIAkJCXJldHVybiB4W2ldOwogCX0KKworCXJldHVybiB4WzBdOwogI2Vsc2UKKwlyZXR1cm4ga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbChzaGFkb3csIHNpemUpOworI2VuZGlmCit9CisKK2VudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpCit7CisJdWludDhfdCAqeDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXggPSBzaGFkb3c7CisKIAkvKiBBbGwgYnl0ZXMgbXVzdCBiZSBpbml0aWFsaXplZC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAJCWlmICh4W2ldICE9IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpCiAJCQlyZXR1cm4geFtpXTsKIAl9Ci0jZW5kaWYKIAogCXJldHVybiB4WzBdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oCmluZGV4IGFmNDZkOWEuLmZmMGIyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaAorKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKQEAgLTExLDYgKzExLDggQEAKIHZvaWQgKmttZW1jaGVja19zaGFkb3dfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIGVudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbCh2b2lkICpzaGFkb3csCisJCQkJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkIGttZW1jaGVja19zaGFkb3dfc2V0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21tYXAuYyBiL2FyY2gveDg2L21tL21tYXAuYwppbmRleCBjODE5MWRlLi4xZGFiNTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vbW1hcC5jCkBAIC03MSw3ICs3MSw3IEBACiAJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9DT01QQVRfTEFZT1VUKQogCQlyZXR1cm4gMTsKIAotCWlmIChjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorCWlmIChybGltaXQoUkxJTUlUX1NUQUNLKSA9PSBSTElNX0lORklOSVRZKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKQEAgLTk2LDcgKzk2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBnYXAgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nIGdhcCA9IHJsaW1pdChSTElNSVRfU1RBQ0spOwogCiAJaWYgKGdhcCA8IE1JTl9HQVApCiAJCWdhcCA9IE1JTl9HQVA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggYjIwNzYwYy4uODA5YmFhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtNDE4LDcgKzQxOCwxMCBAQAogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOworCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9pZCA9IG5pZDsKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KIAkJTk9ERV9EQVRBKG5pZCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhW25pZF07CisjZW5kaWYKIAl9CiAKIAlzZXR1cF9ib290bWVtX2FsbG9jYXRvcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDgzYmJjNzAuLjg5NDhmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTE2MywzMCArMTYzLDQ4IEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7Ci0JdW5zaWduZWQgbG9uZyBtZW0gPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBzaXplLCBhbGlnbik7Ci0Jdm9pZCAqcHRyOworCXVuc2lnbmVkIGxvbmcgbWVtOwogCisJLyoKKwkgKiBwdXQgaXQgb24gaGlnaCBhcyBwb3NzaWJsZQorCSAqIHNvbWV0aGluZyB3aWxsIGdvIHdpdGggTk9ERV9EQVRBCisJICovCisJaWYgKHN0YXJ0IDwgKE1BWF9ETUFfUEZOPDxQQUdFX1NISUZUKSkKKwkJc3RhcnQgPSBNQVhfRE1BX1BGTjw8UEFHRV9TSElGVDsKKwlpZiAoc3RhcnQgPCAoTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVCkgJiYKKwkgICAgZW5kID4gKE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQpKQorCQlzdGFydCA9IE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQ7CisJbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSwgYWxpZ24pOwogCWlmIChtZW0gIT0gLTFMKQogCQlyZXR1cm4gX192YShtZW0pOwogCi0JcHRyID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoc2l6ZSwgYWxpZ24sIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7Ci0JaWYgKHB0ciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgJWx1IGJ5dGVzIGluIG5vZGUgJWRcbiIsCisJLyogZXh0ZW5kIHRoZSBzZWFyY2ggc2NvcGUgKi8KKwllbmQgPSBtYXhfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZUOworCWlmIChlbmQgPiAoTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVCkpCisJCXN0YXJ0ID0gTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVDsKKwllbHNlCisJCXN0YXJ0ID0gTUFYX0RNQV9QRk48PFBBR0VfU0hJRlQ7CisJbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSwgYWxpZ24pOworCWlmIChtZW0gIT0gLTFMKQorCQlyZXR1cm4gX192YShtZW0pOworCisJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZmluZCAlbHUgYnl0ZXMgaW4gbm9kZSAlZFxuIiwKIAkJICAgICAgIHNpemUsIG5vZGVpZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gcHRyOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwogdm9pZCBfX2luaXQKIHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbGFzdF9wZm4sIGJvb3RtYXBfcGFnZXMsIGJvb3RtYXBfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbGFzdF9wZm4sIG5vZGVkYXRhX3BoeXM7CiAJY29uc3QgaW50IHBnZGF0X3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwotCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zdGFydCwgbm9kZWRhdGFfcGh5czsKLQl2b2lkICpib290bWFwOwogCWludCBuaWQ7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCisJdW5zaWduZWQgbG9uZyBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzLCBib290bWFwX3NpemU7CisJdm9pZCAqYm9vdG1hcDsKKyNlbmRpZgogCiAJaWYgKCFlbmQpCiAJCXJldHVybjsKQEAgLTIwMCw3ICsyMTgsNyBAQAogCiAJc3RhcnQgPSByb3VuZHVwKHN0YXJ0LCBaT05FX0FMSUdOKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkJvb3RtZW0gc2V0dXAgbm9kZSAlZCAlMDE2bHgtJTAxNmx4XG4iLCBub2RlaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdG1lbSBzZXR1cCBub2RlICVkICUwMTZseC0lMDE2bHhcbiIsIG5vZGVpZCwKIAkgICAgICAgc3RhcnQsIGVuZCk7CiAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwpAQCAtMjExLDE0ICsyMjksMjEgQEAKIAlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKIAkJcmV0dXJuOwogCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKKwlyZXNlcnZlX2Vhcmx5KG5vZGVkYXRhX3BoeXMsIG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCAiTk9ERV9EQVRBIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiICBOT0RFX0RBVEEgWyUwMTZseCAtICUwMTZseF1cbiIsIG5vZGVkYXRhX3BoeXMsCiAJCW5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplIC0gMSk7CisJbmlkID0gcGh5c190b19uaWQobm9kZWRhdGFfcGh5cyk7CisJaWYgKG5pZCAhPSBub2RlaWQpCisJCXByaW50ayhLRVJOX0lORk8gIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcbiIsIG5vZGVpZCwgbmlkKTsKIAogCW1lbXNldChOT0RFX0RBVEEobm9kZWlkKSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpOwotCU5PREVfREFUQShub2RlaWQpLT5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVtub2RlaWRdOworCU5PREVfREFUQShub2RlaWQpLT5ub2RlX2lkID0gbm9kZWlkOwogCU5PREVfREFUQShub2RlaWQpLT5ub2RlX3N0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKIAlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID0gbGFzdF9wZm4gLSBzdGFydF9wZm47CiAKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KKwlOT0RFX0RBVEEobm9kZWlkKS0+YmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbbm9kZWlkXTsKKwogCS8qCiAJICogRmluZCBhIHBsYWNlIGZvciB0aGUgYm9vdG1lbSBtYXAKIAkgKiBub2RlZGF0YV9waHlzIGNvdWxkIGJlIG9uIG90aGVyIG5vZGVzIGJ5IGFsbG9jX2Jvb3RtZW0sCkBAIC0yMjcsMTEgKzI1Miw3IEBACiAJICogb2YgYWxsb2NfYm9vdG1lbSwgdGhhdCBjb3VsZCBjbGFzaCB3aXRoIHJlc2VydmVkIHJhbmdlCiAJICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhsYXN0X3BmbiAtIHN0YXJ0X3Bmbik7Ci0JbmlkID0gcGh5c190b19uaWQobm9kZWRhdGFfcGh5cyk7Ci0JaWYgKG5pZCA9PSBub2RlaWQpCi0JCWJvb3RtYXBfc3RhcnQgPSByb3VuZHVwKG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCBQQUdFX1NJWkUpOwotCWVsc2UKLQkJYm9vdG1hcF9zdGFydCA9IHJvdW5kdXAoc3RhcnQsIFBBR0VfU0laRSk7CisJYm9vdG1hcF9zdGFydCA9IHJvdW5kdXAobm9kZWRhdGFfcGh5cyArIHBnZGF0X3NpemUsIFBBR0VfU0laRSk7CiAJLyoKIAkgKiBTTVBfQ0FDSEVfQllURVMgY291bGQgYmUgZW5vdWdoLCBidXQgaW5pdF9ib290bWVtX25vZGUgbGlrZQogCSAqIHRvIHVzZSB0aGF0IHRvIGFsaWduIHRvIFBBR0VfU0laRQpAQCAtMjM5LDE4ICsyNjAsMTMgQEAKIAlib290bWFwID0gZWFybHlfbm9kZV9tZW0obm9kZWlkLCBib290bWFwX3N0YXJ0LCBlbmQsCiAJCQkJIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKLQkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkgewotCQkJLyoKLQkJCSAqIG9ubHkgbmVlZCB0byBmcmVlIGl0IGlmIGl0IGlzIGZyb20gb3RoZXIgbm9kZQotCQkJICogYm9vdG1lbQotCQkJICovCi0JCQlpZiAobmlkICE9IG5vZGVpZCkKLQkJCQlmcmVlX2Jvb3RtZW0obm9kZWRhdGFfcGh5cywgcGdkYXRfc2l6ZSk7Ci0JCX0KKwkJZnJlZV9lYXJseShub2RlZGF0YV9waHlzLCBub2RlZGF0YV9waHlzICsgcGdkYXRfc2l6ZSk7CiAJCW5vZGVfZGF0YVtub2RlaWRdID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIAlib290bWFwX3N0YXJ0ID0gX19wYShib290bWFwKTsKKwlyZXNlcnZlX2Vhcmx5KGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfc3RhcnQrKGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpLAorCQkJIkJPT1RNQVAiKTsKIAogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLAogCQkJCQkgYm9vdG1hcF9zdGFydCA+PiBQQUdFX1NISUZULApAQCAtMjU5LDMxICsyNzUsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICIgIGJvb3RtYXAgWyUwMTZseCAtICAlMDE2bHhdIHBhZ2VzICVseFxuIiwKIAkJIGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfc3RhcnQgKyBib290bWFwX3NpemUgLSAxLAogCQkgYm9vdG1hcF9wYWdlcyk7Ci0KLQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhub2RlaWQsIGVuZCk7Ci0KLQkvKgotCSAqIGNvbnZlcnQgZWFybHkgcmVzZXJ2ZSB0byBib290bWVtIHJlc2VydmUgZWFybGllcgotCSAqIG90aGVyd2lzZSBlYXJseV9ub2RlX21lbSBjb3VsZCB1c2UgZWFybHkgcmVzZXJ2ZWQgbWVtCi0JICogb24gcHJldmlvdXMgbm9kZQotCSAqLwotCWVhcmx5X3Jlc190b19ib290bWVtKHN0YXJ0LCBlbmQpOwotCi0JLyoKLQkgKiBpbiBzb21lIGNhc2UgZWFybHlfbm9kZV9tZW0gY291bGQgdXNlIGFsbG9jX2Jvb3RtZW0KLQkgKiB0byBnZXQgcmFuZ2Ugb24gb3RoZXIgbm9kZSwgZG9uJ3QgcmVzZXJ2ZSB0aGF0IGFnYWluCi0JICovCi0JaWYgKG5pZCAhPSBub2RlaWQpCi0JCXByaW50ayhLRVJOX0lORk8gIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcbiIsIG5vZGVpZCwgbmlkKTsKLQllbHNlCi0JCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBub2RlZGF0YV9waHlzLAotCQkJCQlwZ2RhdF9zaXplLCBCT09UTUVNX0RFRkFVTFQpOwogCW5pZCA9IHBoeXNfdG9fbmlkKGJvb3RtYXBfc3RhcnQpOwogCWlmIChuaWQgIT0gbm9kZWlkKQogCQlwcmludGsoS0VSTl9JTkZPICIgICAgYm9vdG1hcCglZCkgb24gbm9kZSAlZFxuIiwgbm9kZWlkLCBuaWQpOwotCWVsc2UKLQkJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksIGJvb3RtYXBfc3RhcnQsCi0JCQkJIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQsIEJPT1RNRU1fREVGQVVMVCk7CisKKwlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhub2RlaWQsIGVuZCk7CisjZW5kaWYKIAogCW5vZGVfc2V0X29ubGluZShub2RlaWQpOwogfQpAQCAtNDI3LDcgKzQyNCw3IEBACiAJICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmlnIG5vZGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBhcyBhIHJlc3VsdAogCSAqIG9mIGNvbnNvbGlkYXRpbmcgdGhlIHJlbWFpbmRlci4KIAkgKi8KLQliaWcgPSAoKHNpemUgJiB+RkFLRV9OT0RFX01JTl9IQVNIX01BU0spICYgbnJfbm9kZXMpIC8KKwliaWcgPSAoKHNpemUgJiB+RkFLRV9OT0RFX01JTl9IQVNIX01BU0spICogbnJfbm9kZXMpIC8KIAkJRkFLRV9OT0RFX01JTl9TSVpFOwogCiAJc2l6ZSAmPSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKQEAgLTUwMiw3NyArNDk5LDk5IEBACiB9CiAKIC8qCi0gKiBTcGxpdHMgbnVtX25vZGVzIG5vZGVzIHVwIGVxdWFsbHkgc3RhcnRpbmcgYXQgbm9kZV9zdGFydC4gIFRoZSByZXR1cm4gdmFsdWUKLSAqIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgc3BsaXQgdXAgYW5kIGFkZHIgaXMgYWRqdXN0ZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiB0aGUKLSAqIGxhc3Qgbm9kZSBhbGxvY2F0ZWQuCisgKiBSZXR1cm5zIHRoZSBlbmQgYWRkcmVzcyBvZiBhIG5vZGUgc28gdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBgc2l6ZScgYW1vdW50IG9mCisgKiBub24tcmVzZXJ2ZWQgbWVtb3J5IG9yIGBtYXhfYWRkcicgaXMgcmVhY2hlZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfZXF1YWxseSh1NjQgKmFkZHIsIHU2NCBtYXhfYWRkciwgaW50IG5vZGVfc3RhcnQsCi0JCQkJICAgICAgaW50IG51bV9ub2RlcykKK3N0YXRpYyB1NjQgX19pbml0IGZpbmRfZW5kX29mX25vZGUodTY0IHN0YXJ0LCB1NjQgbWF4X2FkZHIsIHU2NCBzaXplKQogewotCXVuc2lnbmVkIGludCBiaWc7Ci0JdTY0IHNpemU7Ci0JaW50IGk7CisJdTY0IGVuZCA9IHN0YXJ0ICsgc2l6ZTsKIAotCWlmIChudW1fbm9kZXMgPD0gMCkKLQkJcmV0dXJuIC0xOwotCWlmIChudW1fbm9kZXMgPiBNQVhfTlVNTk9ERVMpCi0JCW51bV9ub2RlcyA9IE1BWF9OVU1OT0RFUzsKLQlzaXplID0gKG1heF9hZGRyIC0gKmFkZHIgLSBlODIwX2hvbGVfc2l6ZSgqYWRkciwgbWF4X2FkZHIpKSAvCi0JICAgICAgIG51bV9ub2RlczsKLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpZyBub2RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgYXMgYSByZXN1bHQKLQkgKiBvZiBjb25zb2xpZGF0aW5nIHRoZSBsZWZ0b3ZlcnMuCi0JICovCi0JYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAqIG51bV9ub2RlcykgLwotCSAgICAgIEZBS0VfTk9ERV9NSU5fU0laRTsKLQotCS8qIFJvdW5kIGRvd24gdG8gbmVhcmVzdCBGQUtFX05PREVfTUlOX1NJWkUuICovCi0Jc2l6ZSAmPSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQlpZiAoIXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZWFjaCBub2RlLiAgIgotCQkgICAgICAgIk5VTUEgZW11bGF0aW9uIGRpc2FibGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmb3IgKGkgPSBub2RlX3N0YXJ0OyBpIDwgbnVtX25vZGVzICsgbm9kZV9zdGFydDsgaSsrKSB7Ci0JCXU2NCBlbmQgPSAqYWRkciArIHNpemU7Ci0KLQkJaWYgKGkgPCBiaWcpCi0JCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOwotCQkvKgotCQkgKiBUaGUgZmluYWwgbm9kZSBjYW4gaGF2ZSB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0uICBPdGhlcgotCQkgKiBub2RlcyByZWNlaXZlIHJvdWdobHkgdGhlIHNhbWUgYW1vdW50IG9mIGF2YWlsYWJsZSBwYWdlcy4KLQkJICovCi0JCWlmIChpID09IG51bV9ub2RlcyArIG5vZGVfc3RhcnQgLSAxKQorCXdoaWxlIChlbmQgLSBzdGFydCAtIGU4MjBfaG9sZV9zaXplKHN0YXJ0LCBlbmQpIDwgc2l6ZSkgeworCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOworCQlpZiAoZW5kID4gbWF4X2FkZHIpIHsKIAkJCWVuZCA9IG1heF9hZGRyOwotCQllbHNlCi0JCQl3aGlsZSAoZW5kIC0gKmFkZHIgLSBlODIwX2hvbGVfc2l6ZSgqYWRkciwgZW5kKSA8Ci0JCQkgICAgICAgc2l6ZSkgewotCQkJCWVuZCArPSBGQUtFX05PREVfTUlOX1NJWkU7Ci0JCQkJaWYgKGVuZCA+IG1heF9hZGRyKSB7Ci0JCQkJCWVuZCA9IG1heF9hZGRyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCWlmIChzZXR1cF9ub2RlX3JhbmdlKGksIGFkZHIsIGVuZCAtICphZGRyLCBtYXhfYWRkcikgPCAwKQogCQkJYnJlYWs7CisJCX0KIAl9Ci0JcmV0dXJuIGkgLSBub2RlX3N0YXJ0ICsgMTsKKwlyZXR1cm4gZW5kOwogfQogCiAvKgotICogU3BsaXRzIHRoZSByZW1haW5pbmcgc3lzdGVtIFJBTSBpbnRvIGNodW5rcyBvZiBzaXplLiAgVGhlIHJlbWFpbmluZyBtZW1vcnkgaXMKLSAqIGFsd2F5cyBhc3NpZ25lZCB0byBhIGZpbmFsIG5vZGUgYW5kIGNhbiBiZSBhc3ltbWV0cmljLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gKiBub2RlcyBzcGxpdC4KKyAqIFNldHMgdXAgZmFrZSBub2RlcyBvZiBgc2l6ZScgaW50ZXJsZWF2ZWQgb3ZlciBwaHlzaWNhbCBub2RlcyByYW5naW5nIGZyb20KKyAqIGBhZGRyJyB0byBgbWF4X2FkZHInLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIG5vZGVzIGFsbG9jYXRlZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfYnlfc2l6ZSh1NjQgKmFkZHIsIHU2NCBtYXhfYWRkciwgaW50IG5vZGVfc3RhcnQsCi0JCQkJICAgICAgdTY0IHNpemUpCitzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9ub2Rlc19zaXplX2ludGVybGVhdmUodTY0IGFkZHIsIHU2NCBtYXhfYWRkciwgdTY0IHNpemUpCiB7Ci0JaW50IGkgPSBub2RlX3N0YXJ0OwotCXNpemUgPSAoc2l6ZSA8PCAyMCkgJiBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQl3aGlsZSAoIXNldHVwX25vZGVfcmFuZ2UoaSsrLCBhZGRyLCBzaXplLCBtYXhfYWRkcikpCi0JCTsKLQlyZXR1cm4gaSAtIG5vZGVfc3RhcnQ7CisJbm9kZW1hc2tfdCBwaHlzbm9kZV9tYXNrID0gTk9ERV9NQVNLX05PTkU7CisJdTY0IG1pbl9zaXplOworCWludCByZXQgPSAwOworCWludCBpOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gLTE7CisJLyoKKwkgKiBUaGUgbGltaXQgb24gZW11bGF0ZWQgbm9kZXMgaXMgTUFYX05VTU5PREVTLCBzbyB0aGUgc2l6ZSBwZXIgbm9kZSBpcworCSAqIGluY3JlYXNlZCBhY2NvcmRpbmdseSBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIHNtYWxsLiAgVGhpcworCSAqIGNyZWF0ZXMgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBub2RlIHNpemVzIGFjcm9zcyB0aGUgZW50aXJlCisJICogbWFjaGluZSAoYnV0IG5vdCBuZWNlc3NhcmlseSBvdmVyIHBoeXNpY2FsIG5vZGVzKS4KKwkgKi8KKwltaW5fc2l6ZSA9IChtYXhfYWRkciAtIGFkZHIgLSBlODIwX2hvbGVfc2l6ZShhZGRyLCBtYXhfYWRkcikpIC8KKwkJCQkJCU1BWF9OVU1OT0RFUzsKKwltaW5fc2l6ZSA9IG1heChtaW5fc2l6ZSwgRkFLRV9OT0RFX01JTl9TSVpFKTsKKwlpZiAoKG1pbl9zaXplICYgRkFLRV9OT0RFX01JTl9IQVNIX01BU0spIDwgbWluX3NpemUpCisJCW1pbl9zaXplID0gKG1pbl9zaXplICsgRkFLRV9OT0RFX01JTl9TSVpFKSAmCisJCQkJCQlGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKKwlpZiAoc2l6ZSA8IG1pbl9zaXplKSB7CisJCXByX2VycigiRmFrZSBub2RlIHNpemUgJUx1TUIgdG9vIHNtYWxsLCBpbmNyZWFzaW5nIHRvICVMdU1CXG4iLAorCQkJc2l6ZSA+PiAyMCwgbWluX3NpemUgPj4gMjApOworCQlzaXplID0gbWluX3NpemU7CisJfQorCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCisJCWlmIChwaHlzbm9kZXNbaV0uc3RhcnQgIT0gcGh5c25vZGVzW2ldLmVuZCkKKwkJCW5vZGVfc2V0KGksIHBoeXNub2RlX21hc2spOworCS8qCisJICogRmlsbCBwaHlzaWNhbCBub2RlcyB3aXRoIGZha2Ugbm9kZXMgb2Ygc2l6ZSB1bnRpbCB0aGVyZSBpcyBubyBtZW1vcnkKKwkgKiBsZWZ0IG9uIGFueSBvZiB0aGVtLgorCSAqLworCXdoaWxlIChub2Rlc193ZWlnaHQocGh5c25vZGVfbWFzaykpIHsKKwkJZm9yX2VhY2hfbm9kZV9tYXNrKGksIHBoeXNub2RlX21hc2spIHsKKwkJCXU2NCBkbWEzMl9lbmQgPSBNQVhfRE1BMzJfUEZOIDw8IFBBR0VfU0hJRlQ7CisJCQl1NjQgZW5kOworCisJCQllbmQgPSBmaW5kX2VuZF9vZl9ub2RlKHBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCXBoeXNub2Rlc1tpXS5lbmQsIHNpemUpOworCQkJLyoKKwkJCSAqIElmIHRoZXJlIHdvbid0IGJlIGF0IGxlYXN0IEZBS0VfTk9ERV9NSU5fU0laRSBvZgorCQkJICogbm9uLXJlc2VydmVkIG1lbW9yeSBpbiBaT05FX0RNQTMyIGZvciB0aGUgbmV4dCBub2RlLAorCQkJICogdGhpcyBvbmUgbXVzdCBleHRlbmQgdG8gdGhlIGJvdW5kYXJ5LgorCQkJICovCisJCQlpZiAoZW5kIDwgZG1hMzJfZW5kICYmIGRtYTMyX2VuZCAtIGVuZCAtCisJCQkgICAgZTgyMF9ob2xlX3NpemUoZW5kLCBkbWEzMl9lbmQpIDwgRkFLRV9OT0RFX01JTl9TSVpFKQorCQkJCWVuZCA9IGRtYTMyX2VuZDsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIHdvbid0IGJlIGVub3VnaCBub24tcmVzZXJ2ZWQgbWVtb3J5IGZvciB0aGUKKwkJCSAqIG5leHQgbm9kZSwgdGhpcyBvbmUgbXVzdCBleHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUKKwkJCSAqIHBoeXNpY2FsIG5vZGUuCisJCQkgKi8KKwkJCWlmIChwaHlzbm9kZXNbaV0uZW5kIC0gZW5kIC0KKwkJCSAgICBlODIwX2hvbGVfc2l6ZShlbmQsIHBoeXNub2Rlc1tpXS5lbmQpIDwgc2l6ZSkKKwkJCQllbmQgPSBwaHlzbm9kZXNbaV0uZW5kOworCisJCQkvKgorCQkJICogU2V0dXAgdGhlIGZha2Ugbm9kZSB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGFzIGJvb3RtZW0KKwkJCSAqIGxhdGVyLiAgSWYgc2V0dXBfbm9kZV9yYW5nZSgpIHJldHVybnMgbm9uLXplcm8sIHRoZXJlCisJCQkgKiBpcyBubyBtb3JlIG1lbW9yeSBhdmFpbGFibGUgb24gdGhpcyBwaHlzaWNhbCBub2RlLgorCQkJICovCisJCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShyZXQrKywgJnBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCWVuZCAtIHBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCXBoeXNub2Rlc1tpXS5lbmQpIDwgMCkKKwkJCQlub2RlX2NsZWFyKGksIHBoeXNub2RlX21hc2spOworCQl9CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01ODIsODcgKzYwMSwzMiBAQAogc3RhdGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCQl1bnNpZ25lZCBsb25nIGxhc3RfcGZuLCBpbnQgYWNwaSwgaW50IGs4KQogewotCXU2NCBzaXplLCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJdTY0IGFkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKIAl1NjQgbWF4X2FkZHIgPSBsYXN0X3BmbiA8PCBQQUdFX1NISUZUOwotCWludCBudW1fbm9kZXMgPSAwLCBudW0gPSAwLCBjb2VmZl9mbGFnLCBjb2VmZiA9IC0xLCBpOwogCWludCBudW1fcGh5c19ub2RlczsKKwlpbnQgbnVtX25vZGVzOworCWludCBpOwogCiAJbnVtX3BoeXNfbm9kZXMgPSBzZXR1cF9waHlzbm9kZXMoYWRkciwgbWF4X2FkZHIsIGFjcGksIGs4KTsKIAkvKgotCSAqIElmIHRoZSBudW1hPWZha2UgY29tbWFuZC1saW5lIGlzIGp1c3QgYSBzaW5nbGUgbnVtYmVyIE4sIHNwbGl0IHRoZQotCSAqIHN5c3RlbSBSQU0gaW50byBOIGZha2Ugbm9kZXMuCisJICogSWYgdGhlIG51bWE9ZmFrZSBjb21tYW5kLWxpbmUgY29udGFpbnMgYSAnTScgb3IgJ0cnLCBpdCByZXByZXNlbnRzCisJICogdGhlIGZpeGVkIG5vZGUgc2l6ZS4gIE90aGVyd2lzZSwgaWYgaXQgaXMganVzdCBhIHNpbmdsZSBudW1iZXIgTiwKKwkgKiBzcGxpdCB0aGUgc3lzdGVtIFJBTSBpbnRvIE4gZmFrZSBub2Rlcy4KIAkgKi8KLQlpZiAoIXN0cmNocihjbWRsaW5lLCAnKicpICYmICFzdHJjaHIoY21kbGluZSwgJywnKSkgewotCQlsb25nIG4gPSBzaW1wbGVfc3RydG9sKGNtZGxpbmUsIE5VTEwsIDApOworCWlmIChzdHJjaHIoY21kbGluZSwgJ00nKSB8fCBzdHJjaHIoY21kbGluZSwgJ0cnKSkgeworCQl1NjQgc2l6ZTsKIAotCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLAotCQkJCQkJCW51bV9waHlzX25vZGVzLCBuKTsKLQkJaWYgKG51bV9ub2RlcyA8IDApCi0JCQlyZXR1cm4gbnVtX25vZGVzOwotCQlnb3RvIG91dDsKKwkJc2l6ZSA9IG1lbXBhcnNlKGNtZGxpbmUsICZjbWRsaW5lKTsKKwkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfc2l6ZV9pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLCBzaXplKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIG47CisKKwkJbiA9IHNpbXBsZV9zdHJ0b3VsKGNtZGxpbmUsIE5VTEwsIDApOworCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLCBudW1fcGh5c19ub2Rlcywgbik7CiAJfQogCi0JLyogUGFyc2UgdGhlIGNvbW1hbmQgbGluZS4gKi8KLQlmb3IgKGNvZWZmX2ZsYWcgPSAwOyA7IGNtZGxpbmUrKykgewotCQlpZiAoKmNtZGxpbmUgJiYgaXNkaWdpdCgqY21kbGluZSkpIHsKLQkJCW51bSA9IG51bSAqIDEwICsgKmNtZGxpbmUgLSAnMCc7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKmNtZGxpbmUgPT0gJyonKSB7Ci0JCQlpZiAobnVtID4gMCkKLQkJCQljb2VmZiA9IG51bTsKLQkJCWNvZWZmX2ZsYWcgPSAxOwotCQl9Ci0JCWlmICghKmNtZGxpbmUgfHwgKmNtZGxpbmUgPT0gJywnKSB7Ci0JCQlpZiAoIWNvZWZmX2ZsYWcpCi0JCQkJY29lZmYgPSAxOwotCQkJLyoKLQkJCSAqIFJvdW5kIGRvd24gdG8gdGhlIG5lYXJlc3QgRkFLRV9OT0RFX01JTl9TSVpFLgotCQkJICogQ29tbWFuZC1saW5lIGNvZWZmaWNpZW50cyBhcmUgaW4gbWVnYWJ5dGVzLgotCQkJICovCi0JCQlzaXplID0gKCh1NjQpbnVtIDw8IDIwKSAmIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOwotCQkJaWYgKHNpemUpCi0JCQkJZm9yIChpID0gMDsgaSA8IGNvZWZmOyBpKyssIG51bV9ub2RlcysrKQotCQkJCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShudW1fbm9kZXMsICZhZGRyLAotCQkJCQkJc2l6ZSwgbWF4X2FkZHIpIDwgMCkKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCWlmICghKmNtZGxpbmUpCi0JCQkJYnJlYWs7Ci0JCQljb2VmZl9mbGFnID0gMDsKLQkJCWNvZWZmID0gLTE7Ci0JCX0KLQkJbnVtID0gMDsKLQl9Ci1kb25lOgotCWlmICghbnVtX25vZGVzKQotCQlyZXR1cm4gLTE7Ci0JLyogRmlsbCByZW1haW5kZXIgb2Ygc3lzdGVtIFJBTSwgaWYgYXBwcm9wcmlhdGUuICovCi0JaWYgKGFkZHIgPCBtYXhfYWRkcikgewotCQlpZiAoY29lZmZfZmxhZyAmJiBjb2VmZiA8IDApIHsKLQkJCS8qIFNwbGl0IHJlbWFpbmluZyBub2RlcyBpbnRvIG51bS1zaXplZCBjaHVua3MgKi8KLQkJCW51bV9ub2RlcyArPSBzcGxpdF9ub2Rlc19ieV9zaXplKCZhZGRyLCBtYXhfYWRkciwKLQkJCQkJCQkgbnVtX25vZGVzLCBudW0pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3dpdGNoICgqKGNtZGxpbmUgLSAxKSkgewotCQljYXNlICcqJzoKLQkJCS8qIFNwbGl0IHJlbWFpbmluZyBub2RlcyBpbnRvIGNvZWZmIGNodW5rcyAqLwotCQkJaWYgKGNvZWZmIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQludW1fbm9kZXMgKz0gc3BsaXRfbm9kZXNfZXF1YWxseSgmYWRkciwgbWF4X2FkZHIsCi0JCQkJCQkJIG51bV9ub2RlcywgY29lZmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJywnOgotCQkJLyogRG8gbm90IGFsbG9jYXRlIHJlbWFpbmluZyBzeXN0ZW0gUkFNICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIEdpdmUgb25lIGZpbmFsIG5vZGUgKi8KLQkJCXNldHVwX25vZGVfcmFuZ2UobnVtX25vZGVzLCAmYWRkciwgbWF4X2FkZHIgLSBhZGRyLAotCQkJCQkgbWF4X2FkZHIpOwotCQkJbnVtX25vZGVzKys7Ci0JCX0KLQl9Ci1vdXQ6CisJaWYgKG51bV9ub2RlcyA8IDApCisJCXJldHVybiBudW1fbm9kZXM7CiAJbWVtbm9kZV9zaGlmdCA9IGNvbXB1dGVfaGFzaF9zaGlmdChub2RlcywgbnVtX25vZGVzLCBOVUxMKTsKIAlpZiAobWVtbm9kZV9zaGlmdCA8IDApIHsKIAkJbWVtbm9kZV9zaGlmdCA9IDA7CkBAIC03NDIsNiArNzA2LDEwIEBACiAJZm9yX2VhY2hfb25saW5lX25vZGUoaSkKIAkJcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbV9ub2RlKE5PREVfREFUQShpKSk7CiAKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXBhZ2VzICs9IGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KE1BWF9OVU1OT0RFUyk7CisjZW5kaWYKKwogCXJldHVybiBwYWdlczsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IGVkMzRmNWUuLmM5YmE5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKQEAgLTYsNiArNiwxNCBAQAogCiAjZGVmaW5lIFBHQUxMT0NfR0ZQIEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTwogCisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKyNkZWZpbmUgUEdBTExPQ19VU0VSX0dGUCBfX0dGUF9ISUdITUVNCisjZWxzZQorI2RlZmluZSBQR0FMTE9DX1VTRVJfR0ZQIDAKKyNlbmRpZgorCitnZnBfdCBfX3VzZXJwdGVfYWxsb2NfZ2ZwID0gUEdBTExPQ19HRlAgfCBQR0FMTE9DX1VTRVJfR0ZQOworCiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKFBHQUxMT0NfR0ZQKTsKQEAgLTE1LDE2ICsyMywyOSBAQAogewogCXN0cnVjdCBwYWdlICpwdGU7CiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQIHwgX19HRlBfSElHSE1FTSwgMCk7Ci0jZWxzZQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQLCAwKTsKLSNlbmRpZgorCXB0ZSA9IGFsbG9jX3BhZ2VzKF9fdXNlcnB0ZV9hbGxvY19nZnAsIDApOwogCWlmIChwdGUpCiAJCXBndGFibGVfcGFnZV9jdG9yKHB0ZSk7CiAJcmV0dXJuIHB0ZTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgc2V0dXBfdXNlcnB0ZShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiAidXNlcnB0ZT1ub2hpZ2giIGRpc2FibGVzIGFsbG9jYXRpb24gb2YgdXNlciBwYWdldGFibGVzIGluCisJICogaGlnaCBtZW1vcnkuCisJICovCisJaWYgKHN0cmNtcChhcmcsICJub2hpZ2giKSA9PSAwKQorCQlfX3VzZXJwdGVfYWxsb2NfZ2ZwICY9IH5fX0dGUF9ISUdITUVNOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgidXNlcnB0ZSIsIHNldHVwX3VzZXJwdGUpOworCiB2b2lkIF9fX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlKQogewogCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IDY1YjU4ZTQuLjQyNmYzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07CiAJCXVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7Ci0JCXNwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKKwkJcmF3X3NwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKIAkJREVDTEFSRV9CSVRNQVAoZmx1c2hfY3B1bWFzaywgTlJfQ1BVUyk7CiAJfTsKIAljaGFyIHBhZFtJTlRFUk5PREVfQ0FDSEVfQllURVNdOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJICogbnVtX29ubGluZV9jcHVzKCkgPD0gTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMsIGJ1dCBpdCBpcwogCSAqIHByb2JhYmx5IG5vdCB3b3J0aCBjaGVja2luZyB0aGlzIGZvciBhIGNhY2hlLWhvdCBsb2NrLgogCSAqLwotCXNwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiAKIAlmLT5mbHVzaF9tbSA9IG1tOwogCWYtPmZsdXNoX3ZhID0gdmE7CkBAIC0xOTksNyArMTk5LDcgQEAKIAogCWYtPmZsdXNoX21tID0gTlVMTDsKIAlmLT5mbHVzaF92YSA9IDA7Ci0Jc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOworCXJhd19zcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiB9CiAKIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsdXNoX3N0YXRlKTsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwppbmRleCAzMzQ3ZjY5Li4yYzUwNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCA9Ci0JCQlrbWFsbG9jKG11bHRpcGxleF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWt6YWxsb2MobXVsdGlwbGV4X3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTE3OSw3ICsxNzksNiBAQAogCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgewogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gLSh1NjQpY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCX0gZWxzZSB7Ci0JCQltdWx0aXBsZXhbaV0uYWRkciAgPSAwOwogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gMDsKIAkJfQogCX0KQEAgLTE4OSwyNSArMTg4LDI3IEBACiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc2F2ZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXJkbXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQlyZG1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfcmVzdG9yZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXdybXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQl3cm1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKQEAgLTMwMywxMSArMzA0LDExIEBACiAKIAlpbnQgaTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMgPSBremFsbG9jKGNvdW50ZXJzX3NpemUsCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpCiAJCQlyZXR1cm4gMDsKLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsCisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzID0ga3phbGxvYyhjb250cm9sc19zaXplLAogCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDM5Njg2YzIuLjZhNTgyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKQEAgLTQzLDE1ICs0NiwxMyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtOVU1fVklSVF9DT1VOVEVSU107CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIC8qIElic0ZldGNoQ3RsIGJpdHMvbWFza3MgKi8KICNkZWZpbmUgSUJTX0ZFVENIX1JBTkRfRU4JCSgxVUxMPDw1NykKICNkZWZpbmUgSUJTX0ZFVENIX1ZBTAkJCSgxVUxMPDw0OSkKICNkZWZpbmUgSUJTX0ZFVENIX0VOQUJMRQkJKDFVTEw8PDQ4KQogI2RlZmluZSBJQlNfRkVUQ0hfQ05UX01BU0sJCTB4RkZGRjAwMDBVTEwKIAotLypJYnNPcEN0bCBiaXRzICovCisvKiBJYnNPcEN0bCBiaXRzICovCiAjZGVmaW5lIElCU19PUF9DTlRfQ1RMCQkJKDFVTEw8PDE5KQogI2RlZmluZSBJQlNfT1BfVkFMCQkJKDFVTEw8PDE4KQogI2RlZmluZSBJQlNfT1BfRU5BQkxFCQkJKDFVTEw8PDE3KQpAQCAtNTksNyArNjAsNyBAQAogI2RlZmluZSBJQlNfRkVUQ0hfU0laRQkJCTYKICNkZWZpbmUgSUJTX09QX1NJWkUJCQkxMgogCi1zdGF0aWMgaW50IGhhc19pYnM7CS8qIEFNRCBGYW1pbHkxMGggYW5kIGxhdGVyICovCitzdGF0aWMgdTMyIGlic19jYXBzOwogCiBzdHJ1Y3Qgb3BfaWJzX2NvbmZpZyB7CiAJdW5zaWduZWQgbG9uZyBvcF9lbmFibGVkOwpAQCAtNzEsMjQgKzcyLDUyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9wX2lic19jb25maWcgaWJzX2NvbmZpZzsKK3N0YXRpYyB1NjQgaWJzX29wX2N0bDsKIAotI2VuZGlmCisvKgorICogSUJTIGNwdWlkIGZlYXR1cmUgZGV0ZWN0aW9uCisgKi8KKworI2RlZmluZSBJQlNfQ1BVSURfRkVBVFVSRVMgICAgICAweDgwMDAwMDFiCisKKy8qCisgKiBTYW1lIGJpdCBtYXNrIGFzIGZvciBJQlMgY3B1aWQgZmVhdHVyZSBmbGFncyAoRm44MDAwXzAwMUJfRUFYKSwgYnV0CisgKiBiaXQgMCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBleGlzdGVuY2Ugb2YgSUJTLgorICovCisjZGVmaW5lIElCU19DQVBTX0FWQUlMCQkJKDFMTDw8MCkKKyNkZWZpbmUgSUJTX0NBUFNfUkRXUk9QQ05UCQkoMUxMPDwzKQorI2RlZmluZSBJQlNfQ0FQU19PUENOVAkJCSgxTEw8PDQpCisKKy8qCisgKiBJQlMgcmFuZG9taXphdGlvbiBtYWNyb3MKKyAqLworI2RlZmluZSBJQlNfUkFORE9NX0JJVFMJCQkxMgorI2RlZmluZSBJQlNfUkFORE9NX01BU0sJCQkoKDFVTEwgPDwgSUJTX1JBTkRPTV9CSVRTKSAtIDEpCisjZGVmaW5lIElCU19SQU5ET01fTUFYQ05UX09GRlNFVAkoMVVMTCA8PCAoSUJTX1JBTkRPTV9CSVRTIC0gNSkpCisKK3N0YXRpYyB1MzIgZ2V0X2lic19jYXBzKHZvaWQpCit7CisJdTMyIGlic19jYXBzOworCXVuc2lnbmVkIGludCBtYXhfbGV2ZWw7CisKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlMpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIElCUyBjcHVpZCBmZWF0dXJlIGZsYWdzICovCisJbWF4X2xldmVsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOworCWlmIChtYXhfbGV2ZWwgPCBJQlNfQ1BVSURfRkVBVFVSRVMpCisJCXJldHVybiBJQlNfQ0FQU19BVkFJTDsKKworCWlic19jYXBzID0gY3B1aWRfZWF4KElCU19DUFVJRF9GRUFUVVJFUyk7CisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19BVkFJTCkpCisJCS8qIGNwdWlkIGZsYWdzIG5vdCB2YWxpZCAqLworCQlyZXR1cm4gSUJTX0NBUFNfQVZBSUw7CisKKwlyZXR1cm4gaWJzX2NhcHM7Cit9CiAKICNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCiAKLXN0YXRpYyB2b2lkIG9wX211eF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1ZJUlRfQ09VTlRFUlM7IGkrKykgewotCQlpbnQgaHdfY291bnRlciA9IG9wX3g4Nl92aXJ0X3RvX3BoeXMoaSk7Ci0JCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQotCQkJbXNycy0+bXVsdGlwbGV4W2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBod19jb3VudGVyOwotCQllbHNlCi0JCQltc3JzLT5tdWx0aXBsZXhbaV0uYWRkciA9IDA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBvcF9tdXhfc3dpdGNoX2N0cmwoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKIAkJCSAgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC05OCw3ICsxMjcsNyBAQAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAoIWNvdW50ZXJfY29uZmlnW3ZpcnRdLmVuYWJsZWQpCisJCWlmICghcmVzZXRfdmFsdWVbdmlydF0pCiAJCQljb250aW51ZTsKIAkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CkBAIC0xMDcsMTAgKzEzNiw2IEBACiAJfQogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykgeyB9Ci0KICNlbmRpZgogCiAvKiBmdW5jdGlvbnMgZm9yIG9wX2FtZF9zcGVjICovCkBAIC0xMjIsMTggKzE0NywxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfSzdfUEVSRkNUUjAgKyBpKSkKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7CiAJfQotCi0Jb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOwogfQogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLApAQCAtMTQ0LDcgKzE2Myw4IEBACiAKIAkvKiBzZXR1cCByZXNldF92YWx1ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKQorCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZAorCQkgICAgJiYgbXNycy0+Y291bnRlcnNbb3BfeDg2X3ZpcnRfdG9fcGh5cyhpKV0uYWRkcikKIAkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCWVsc2UKIAkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKQEAgLTE1Miw5ICsxNzIsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CkBAIC0xNjksOSArMTk4LDcgQEAKIAkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKCFjb3VudGVyX2NvbmZpZ1t2aXJ0XS5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCWlmICghbXNycy0+Y291bnRlcnNbaV0uYWRkcikKKwkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIHNldHVwIGNvdW50ZXIgcmVnaXN0ZXJzICovCkBAIC0xODUsNyArMjEyLDYwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUworLyoKKyAqIDE2LWJpdCBMaW5lYXIgRmVlZGJhY2sgU2hpZnQgUmVnaXN0ZXIgKExGU1IpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgIDE2ICAgMTQgICAxMyAgICAxMQorICogRmVlZGJhY2sgcG9seW5vbWlhbCA9IFggICsgWCAgKyBYICArICBYICArIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsZnNyX3JhbmRvbSh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGZzcl92YWx1ZSA9IDB4RjAwRDsKKwl1bnNpZ25lZCBpbnQgYml0OworCisJLyogQ29tcHV0ZSBuZXh0IGJpdCB0byBzaGlmdCBpbiAqLworCWJpdCA9ICgobGZzcl92YWx1ZSA+PiAwKSBeCisJICAgICAgIChsZnNyX3ZhbHVlID4+IDIpIF4KKwkgICAgICAgKGxmc3JfdmFsdWUgPj4gMykgXgorCSAgICAgICAobGZzcl92YWx1ZSA+PiA1KSkgJiAweDAwMDE7CisKKwkvKiBBZHZhbmNlIHRvIG5leHQgcmVnaXN0ZXIgdmFsdWUgKi8KKwlsZnNyX3ZhbHVlID0gKGxmc3JfdmFsdWUgPj4gMSkgfCAoYml0IDw8IDE1KTsKKworCXJldHVybiBsZnNyX3ZhbHVlOworfQorCisvKgorICogSUJTIHNvZnR3YXJlIHJhbmRvbWl6YXRpb24KKyAqCisgKiBUaGUgSUJTIHBlcmlvZGljIG9wIGNvdW50ZXIgaXMgcmFuZG9taXplZCBpbiBzb2Z0d2FyZS4gVGhlIGxvd2VyIDEyCisgKiBiaXRzIG9mIHRoZSAyMCBiaXQgY291bnRlciBhcmUgcmFuZG9taXplZC4gSWJzT3BDdXJDbnQgaXMKKyAqIGluaXRpYWxpemVkIHdpdGggYSAxMiBiaXQgcmFuZG9tIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHU2NCBvcF9hbWRfcmFuZG9taXplX2lic19vcCh1NjQgdmFsKQoreworCXVuc2lnbmVkIGludCByYW5kb20gPSBsZnNyX3JhbmRvbSgpOworCisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19SRFdST1BDTlQpKQorCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBpZiB0aGUgaHcgY2FuIG5vdCB3cml0ZSB0byBJYnNPcEN1ckNudAorCQkgKgorCQkgKiBSYW5kb21pemUgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgMTYgYml0CisJCSAqIElic09wTWF4Q250IFsxNTowXSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgLTEyOCB0bworCQkgKiArMTI3IGJ5IGFkZGluZy9zdWJ0cmFjdGluZyBhbiBvZmZzZXQgdG8gdGhlCisJCSAqIG1heGltdW0gY291bnQgKElic09wTWF4Q250KS4KKwkJICoKKwkJICogVG8gYXZvaWQgb3ZlciBvciB1bmRlcmZsb3dzIGFuZCBwcm90ZWN0IHVwcGVyIGJpdHMKKwkJICogc3RhcnRpbmcgYXQgYml0IDE2LCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IKKwkJICogSWJzT3BNYXhDbnQgbXVzdCBmaXQgaW4gdGhlIHJhbmdlIGZyb20gMHgwMDgxIHRvCisJCSAqIDB4ZmY4MC4KKwkJICovCisJCXZhbCArPSAoczgpKHJhbmRvbSA+PiA0KTsKKwllbHNlCisJCXZhbCB8PSAodTY0KShyYW5kb20gJiBJQlNfUkFORE9NX01BU0spIDw8IDMyOworCisJcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIGlubGluZSB2b2lkCiBvcF9hbWRfaGFuZGxlX2licyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCkBAIC0xOTQsNyArMjc0LDcgQEAKIAl1NjQgdmFsLCBjdGw7CiAJc3RydWN0IG9wX2VudHJ5IGVudHJ5OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKQEAgLTIzNiw4ICszMTYsNyBAQAogCQkJb3Byb2ZpbGVfd3JpdGVfY29tbWl0KCZlbnRyeSk7CiAKIAkJCS8qIHJlZW5hYmxlIHRoZSBJUlEgKi8KLQkJCWN0bCAmPSB+SUJTX09QX1ZBTCAmIDB4RkZGRkZGRkY7Ci0JCQljdGwgfD0gSUJTX09QX0VOQUJMRTsKKwkJCWN0bCA9IG9wX2FtZF9yYW5kb21pemVfaWJzX29wKGlic19vcF9jdGwpOwogCQkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgY3RsKTsKIAkJfQogCX0KQEAgLTI0Niw0MSArMzI1LDU3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0YXJ0X2licyh2b2lkKQogewogCXU2NCB2YWw7Ci0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CisKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CiAJCXZhbCA9IChpYnNfY29uZmlnLm1heF9jbnRfZmV0Y2ggPj4gNCkgJiAweEZGRkY7CiAJCXZhbCB8PSBpYnNfY29uZmlnLnJhbmRfZW4gPyBJQlNfRkVUQ0hfUkFORF9FTiA6IDA7CiAJCXZhbCB8PSBJQlNfRkVUQ0hfRU5BQkxFOwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCB2YWwpOwogCX0KIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQl2YWwgPSAoaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQpICYgMHhGRkZGOwotCQl2YWwgfD0gaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA/IElCU19PUF9DTlRfQ1RMIDogMDsKLQkJdmFsIHw9IElCU19PUF9FTkFCTEU7CisJaWYgKGlic19jb25maWcub3BfZW5hYmxlZCkgeworCQlpYnNfb3BfY3RsID0gaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQ7CisJCWlmICghKGlic19jYXBzICYgSUJTX0NBUFNfUkRXUk9QQ05UKSkgeworCQkJLyoKKwkJCSAqIElic09wQ3VyQ250IG5vdCBzdXBwb3J0ZWQuICBTZWUKKwkJCSAqIG9wX2FtZF9yYW5kb21pemVfaWJzX29wKCkgZm9yIGRldGFpbHMuCisJCQkgKi8KKwkJCWlic19vcF9jdGwgPSBjbGFtcChpYnNfb3BfY3RsLCAweDAwODFVTEwsIDB4RkY4MFVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIHN0YXJ0IHZhbHVlIGlzIHJhbmRvbWl6ZWQgd2l0aCBhCisJCQkgKiBwb3NpdGl2ZSBvZmZzZXQsIHdlIG5lZWQgdG8gY29tcGVuc2F0ZSBpdAorCQkJICogd2l0aCB0aGUgaGFsZiBvZiB0aGUgcmFuZG9taXplZCByYW5nZS4gQWxzbworCQkJICogYXZvaWQgdW5kZXJmbG93cy4KKwkJCSAqLworCQkJaWJzX29wX2N0bCA9IG1pbihpYnNfb3BfY3RsICsgSUJTX1JBTkRPTV9NQVhDTlRfT0ZGU0VULAorCQkJCQkgMHhGRkZGVUxMKTsKKwkJfQorCQlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19PUENOVCAmJiBpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKQorCQkJaWJzX29wX2N0bCB8PSBJQlNfT1BfQ05UX0NUTDsKKwkJaWJzX29wX2N0bCB8PSBJQlNfT1BfRU5BQkxFOworCQl2YWwgPSBvcF9hbWRfcmFuZG9taXplX2lic19vcChpYnNfb3BfY3RsKTsKIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgdmFsKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKQogewotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCAwKTsKIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkKKwlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCAwKTsKIH0KIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9oYW5kbGVfaWJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKLQkJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RhcnRfaWJzKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKSB7IH0KLQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgb3BfYW1kX2NoZWNrX2N0cnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkJICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC0zNTUsOCArNDUwLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIHN0YXRpYyB1OCBpYnNfZWlsdnRfb2ZmOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbml0X2lic19ubWlfcGVyX2NwdSh2b2lkICphcmcpCkBAIC00MDUsNDUgKzQ5OCwzNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotCS8qIFNhbml0eSBjaGVjayAqLwotCS8qIFdvcmtzIG9ubHkgZm9yIDY0Yml0IHdpdGggcHJvcGVyIG51bWEgaW1wbGVtZW50YXRpb24uICovCi0JaWYgKG5vZGVzICE9IG51bV9wb3NzaWJsZV9ub2RlcygpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gc2V0dXAgQ1BVIG5vZGUocykgZm9yIElCUywgIgotCQkJImZvdW5kOiAlZCwgZXhwZWN0ZWQgJWQiLAotCQkJbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHVuaW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIG5lZWRlZCAqLwogc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKQogewotCWlmIChoYXNfaWJzKQorCWlmIChpYnNfY2FwcykKIAkJb25fZWFjaF9jcHUoYXBpY19jbGVhcl9pYnNfbm1pX3Blcl9jcHUsIE5VTEwsIDEpOwogfQogCiAvKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgYXZhaWxhYmxlICovCiBzdGF0aWMgdm9pZCBpYnNfaW5pdCh2b2lkKQogewotCWhhc19pYnMgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJTKTsKKwlpYnNfY2FwcyA9IGdldF9pYnNfY2FwcygpOwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpbml0X2lic19ubWkoKSkgewotCQloYXNfaWJzID0gMDsKKwkJaWJzX2NhcHMgPSAwOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IEFNRCBJQlMgZGV0ZWN0ZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBTUQgSUJTIGRldGVjdGVkICgweCUwOHgpXG4iLAorCSAgICAgICAodW5zaWduZWQpaWJzX2NhcHMpOwogfQogCiBzdGF0aWMgdm9pZCBpYnNfZXhpdCh2b2lkKQogewotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm47CiAKIAljbGVhcl9pYnNfbm1pKCk7CkBAIC00NjMsNyArNTQ3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBtb2RlbCBzcGVjaWZpYyBmaWxlcyAqLwpAQCAtNDczLDcgKzU1Nyw3IEBACiAJaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkID0gMDsKIAlpYnNfY29uZmlnLm1heF9jbnRfb3AgPSAyNTAwMDA7CiAJaWJzX2NvbmZpZy5vcF9lbmFibGVkID0gMDsKLQlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMTsKKwlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMDsKIAogCWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIHJvb3QsICJpYnNfZmV0Y2giKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZW5hYmxlIiwKQEAgLTQ4OCw4ICs1NzIsOSBAQAogCQkJCSZpYnNfY29uZmlnLm9wX2VuYWJsZWQpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAogCQkJCSZpYnNfY29uZmlnLm1heF9jbnRfb3ApOwotCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJkaXNwYXRjaGVkX29wcyIsCi0JCQkJJmlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMpOworCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX09QQ05UKQorCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZGlzcGF0Y2hlZF9vcHMiLAorCQkJCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNywxOSArNTkyLDYgQEAKIAlpYnNfZXhpdCgpOwogfQogCi0jZWxzZQotCi0vKiBubyBJQlMgc3VwcG9ydCAqLwotCi1zdGF0aWMgaW50IG9wX2FtZF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpIHt9Ci0KLSNlbmRpZiAvKiBDT05GSUdfT1BST0ZJTEVfSUJTICovCi0KIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hbWRfc3BlYyA9IHsKIAkubnVtX2NvdW50ZXJzCQk9IE5VTV9DT1VOVEVSUywKIAkubnVtX2NvbnRyb2xzCQk9IE5VTV9DT05UUk9MUywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IGFjNmIzNTQuLmU2YTE2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtMzk0LDEyICszOTQsNiBAQAogCXNldHVwX251bV9jb3VudGVycygpOwogCXN0YWcgPSBnZXRfc3RhZ2dlcigpOwogCi0JLyogaW5pdGlhbGl6ZSBzb21lIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkKLQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgKytpKQotCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gMDsKLQogCS8qIHRoZSBjb3VudGVyICYgY2NjciByZWdpc3RlcnMgd2UgcGF5IGF0dGVudGlvbiB0byAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlhZGRyID0gcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywgaSldLmNvdW50ZXJfYWRkcmVzczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwppbmRleCA4ZWIwNTg3Li41ZDE3MjdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCkBAIC0zNywxNSArMzcsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSkpCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX1A2X1BFUkZDVFIwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX2V2bnRzZWxfbm1pKE1TUl9QNl9FVk5UU0VMMCArIGkpKQogCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IE1TUl9QNl9FVk5UU0VMMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOwogCX0KIH0KIApAQCAtNTcsNyArNTMsNyBAQAogCWludCBpOwogCiAJaWYgKCFyZXNldF92YWx1ZSkgewotCQlyZXNldF92YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHJlc2V0X3ZhbHVlWzBdKSAqIG51bV9jb3VudGVycywKKwkJcmVzZXRfdmFsdWUgPSBremFsbG9jKHNpemVvZihyZXNldF92YWx1ZVswXSkgKiBudW1fY291bnRlcnMsCiAJCQkJCUdGUF9BVE9NSUMpOwogCQlpZiAoIXJlc2V0X3ZhbHVlKQogCQkJcmV0dXJuOwpAQCAtODIsOSArNzgsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaCBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCmluZGV4IDdiOGU3NWQuLmZmODJhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCkBAIC01Nyw2ICs1NywyNiBAQAogCiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWc7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcF94ODZfd2Fybl9pbl91c2UoaW50IGNvdW50ZXIpCit7CisJLyoKKwkgKiBUaGUgd2FybmluZyBpbmRpY2F0ZXMgYW4gYWxyZWFkeSBydW5uaW5nIGNvdW50ZXIuIElmCisJICogb3Byb2ZpbGUgZG9lc24ndCBjb2xsZWN0IGRhdGEsIHRoZW4gdHJ5IHVzaW5nIGEgZGlmZmVyZW50CisJICogcGVyZm9ybWFuY2UgY291bnRlciBvbiB5b3VyIHBsYXRmb3JtIHRvIG1vbml0b3IgdGhlIGRlc2lyZWQKKwkgKiBldmVudC4gRGVsZXRlIGNvdW50ZXIgIyVkIGZyb20gdGhlIGRlc2lyZWQgZXZlbnQgYnkgZWRpdGluZworCSAqIHRoZSAvdXNyL3NoYXJlL29wcm9maWxlLyVzLzxjcHU+L2V2ZW50cyBmaWxlLiBJZiB0aGUgZXZlbnQKKwkgKiBjYW5ub3QgYmUgbW9uaXRvcmVkIGJ5IGFueSBvdGhlciBjb3VudGVyLCBjb250YWN0IHlvdXIKKwkgKiBoYXJkd2FyZSBvciBCSU9TIHZlbmRvci4KKwkgKi8KKwlwcl93YXJuaW5nKCJvcHJvZmlsZTogY291bnRlciAjJWQgb24gY3B1ICMlZCBtYXkgYWxyZWFkeSBiZSB1c2VkXG4iLAorCQkgICBjb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaW50IGNvdW50ZXIpCit7CisJcHJfd2FybmluZygib3Byb2ZpbGU6IGNvdW50ZXIgIyVkIGlzIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIGNvdW50ZXIpOworfQorCiBleHRlcm4gdTY0IG9wX3g4Nl9nZXRfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAogCQkJICAgc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjb3VudGVyX2NvbmZpZyk7CiBleHRlcm4gaW50IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaW50IHBoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL01ha2VmaWxlIGIvYXJjaC94ODYvcGNpL01ha2VmaWxlCmluZGV4IDM5ZmJhMzcuLjBiN2QzZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wY2kvTWFrZWZpbGUKQEAgLTE0LDggKzE0LDcgQEAKIG9iai0kKENPTkZJR19YODZfTlVNQVEpCQkrPSBudW1hcV8zMi5vCiAKIG9iai15CQkJCSs9IGNvbW1vbi5vIGVhcmx5Lm8KLW9iai15CQkJCSs9IGFtZF9idXMubwotb2JqLSQoQ09ORklHX1g4Nl82NCkJCSs9IGJ1c19udW1hLm8KK29iai15CQkJCSs9IGFtZF9idXMubyBidXNfbnVtYS5vCiAKIGlmZXEgKCQoQ09ORklHX1BDSV9ERUJVRykseSkKIEVYVFJBX0NGTEFHUyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYWNwaS5jIGIvYXJjaC94ODYvcGNpL2FjcGkuYwppbmRleCA5NTllNTQ4Li41ZjExZmY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYWNwaS5jCisrKyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKQEAgLTE1LDYgKzE1LDUxIEBACiAJaW50IGJ1c251bTsKIH07CiAKK3N0YXRpYyBib29sIHBjaV91c2VfY3JzID0gdHJ1ZTsKKworc3RhdGljIGludCBfX2luaXQgc2V0X3VzZV9jcnMoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXBjaV91c2VfY3JzID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHBjaV91c2VfY3JzX3RhYmxlW10gX19pbml0Y29uc3QgPSB7CisJLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTgzICovCisJeworCQkuY2FsbGJhY2sgPSBzZXRfdXNlX2NycywKKwkJLmlkZW50ID0gIklCTSBTeXN0ZW0geDM4MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIklCTSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJ4MzgwMCIpLAorCQl9LAorCX0sCisJe30KK307CisKK3ZvaWQgX19pbml0IHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCkKK3sKKwlpbnQgeWVhcjsKKworCWlmIChkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsIE5VTEwsIE5VTEwpICYmIHllYXIgPCAyMDA4KQorCQlwY2lfdXNlX2NycyA9IGZhbHNlOworCisJZG1pX2NoZWNrX3N5c3RlbShwY2lfdXNlX2Nyc190YWJsZSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIHNwZWNpZmllcyAicGNpPXVzZV9jcnMiIG9yICJwY2k9bm9jcnMiIGV4cGxpY2l0bHksIHRoYXQKKwkgKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55dGhpbmcgd2UgZmlndXJlZCBvdXQgYWJvdmUuCisJICovCisJaWYgKHBjaV9wcm9iZSAmIFBDSV9ST09UX05PX0NSUykKKwkJcGNpX3VzZV9jcnMgPSBmYWxzZTsKKwllbHNlIGlmIChwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpCisJCXBjaV91c2VfY3JzID0gdHJ1ZTsKKworCXByaW50ayhLRVJOX0lORk8gIlBDSTogJXMgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEk7ICIKKwkgICAgICAgImlmIG5lY2Vzc2FyeSwgdXNlIFwicGNpPSVzXCIgYW5kIHJlcG9ydCBhIGJ1Z1xuIiwKKwkgICAgICAgcGNpX3VzZV9jcnMgPyAiVXNpbmciIDogIklnbm9yaW5nIiwKKwkgICAgICAgcGNpX3VzZV9jcnMgPyAibm9jcnMiIDogInVzZV9jcnMiKTsKK30KKwogc3RhdGljIGFjcGlfc3RhdHVzCiByZXNvdXJjZV90b19hZGRyKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKIAkJCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqYWRkcikKQEAgLTQ1LDIwICs5MCw2IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgaW50Ci1idXNfaGFzX3RyYW5zcGFyZW50X2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OwotCi0JCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBkZXYtPnRyYW5zcGFyZW50KQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQKIGFsaWduX3Jlc291cmNlKHN0cnVjdCBhY3BpX2RldmljZSAqYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKQEAgLTkyLDEyICsxMjMsOCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXNvdXJjZSAqcm9vdDsKLQlpbnQgbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyA9IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsKIAl1NjQgc3RhcnQsIGVuZDsKIAotCWlmIChidXNfaGFzX3RyYW5zcGFyZW50X2JyaWRnZShpbmZvLT5idXMpKQotCQltYXhfcm9vdF9idXNfcmVzb3VyY2VzIC09IDM7Ci0KIAlzdGF0dXMgPSByZXNvdXJjZV90b19hZGRyKGFjcGlfcmVzLCAmYWRkcik7CiAJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJcmV0dXJuIEFFX09LOwpAQCAtMTE1LDE1ICsxNDIsNiBAQAogCiAJc3RhcnQgPSBhZGRyLm1pbmltdW0gKyBhZGRyLnRyYW5zbGF0aW9uX29mZnNldDsKIAllbmQgPSBzdGFydCArIGFkZHIuYWRkcmVzc19sZW5ndGggLSAxOwotCWlmIChpbmZvLT5yZXNfbnVtID49IG1heF9yb290X2J1c19yZXNvdXJjZXMpIHsKLQkJaWYgKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogRmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCSAgICAgICAiMHglbHgtMHglbHggZnJvbSAlcyBmb3IgJXMgZHVlIHRvIF9DUlMgIgotCQkJICAgICAgICJyZXR1cm5pbmcgbW9yZSB0aGFuICVkIHJlc291cmNlIGRlc2NyaXB0b3JzXG4iLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBzdGFydCwgKHVuc2lnbmVkIGxvbmcpIGVuZCwKLQkJCSAgICAgICByb290LT5uYW1lLCBpbmZvLT5uYW1lLCBtYXhfcm9vdF9idXNfcmVzb3VyY2VzKTsKLQkJcmV0dXJuIEFFX09LOwotCX0KIAogCXJlcyA9ICZpbmZvLT5yZXNbaW5mby0+cmVzX251bV07CiAJcmVzLT5uYW1lID0gaW5mby0+bmFtZTsKQEAgLTEzMyw3ICsxNTEsNyBAQAogCXJlcy0+Y2hpbGQgPSBOVUxMOwogCWFsaWduX3Jlc291cmNlKGluZm8tPmJyaWRnZSwgcmVzKTsKIAotCWlmICghKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykpIHsKKwlpZiAoIXBjaV91c2VfY3JzKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmluZm8tPmJyaWRnZS0+ZGV2LAogCQkJICAgImhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKGlnbm9yZWQpXG4iLCByZXMpOwogCQlyZXR1cm4gQUVfT0s7CkBAIC0xNDMsNyArMTYxLDcgQEAKIAkJZGV2X2VycigmaW5mby0+YnJpZGdlLT5kZXYsCiAJCQkiY2FuJ3QgYWxsb2NhdGUgaG9zdCBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKIAl9IGVsc2UgewotCQlpbmZvLT5idXMtPnJlc291cmNlW2luZm8tPnJlc19udW1dID0gcmVzOworCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShpbmZvLT5idXMsIHJlcywgMCk7CiAJCWluZm8tPnJlc19udW0rKzsKIAkJaWYgKGFkZHIudHJhbnNsYXRpb25fb2Zmc2V0KQogCQkJZGV2X2luZm8oJmluZm8tPmJyaWRnZS0+ZGV2LCAiaG9zdCBicmlkZ2Ugd2luZG93ICVwUiAiCkBAIC0xNjQsMTAgKzE4Miw4IEBACiAJc3RydWN0IHBjaV9yb290X2luZm8gaW5mbzsKIAlzaXplX3Qgc2l6ZTsKIAotCWlmICghKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykpCi0JCWRldl9pbmZvKCZkZXZpY2UtPmRldiwKLQkJCSAiaWdub3JpbmcgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEk7ICIKLQkJCSAiYm9vdCB3aXRoIFwicGNpPXVzZV9jcnNcIiB0byB1c2UgdGhlbVxuIik7CisJaWYgKHBjaV91c2VfY3JzKQorCQlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoYnVzKTsKIAogCWluZm8uYnJpZGdlID0gZGV2aWNlOwogCWluZm8uYnVzID0gYnVzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FtZF9idXMuYyBiL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMKaW5kZXggOTVlY2JkNC4uZmMxZThmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FtZF9idXMuYworKysgYi9hcmNoL3g4Ni9wY2kvYW1kX2J1cy5jCkBAIC0yLDExICsyLDExIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgorCiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJidXNfbnVtYS5oIgogCkBAIC0xNSw2MCArMTUsNiBAQAogICogYWxzbyBnZXQgcGVlciByb290IGJ1cyByZXNvdXJjZSBmb3IgaW8sbW1pbwogICovCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KLSNkZWZpbmUgUkFOR0VfTlVNIDE2Ci0KLXN0cnVjdCByZXNfcmFuZ2UgewotCXNpemVfdCBzdGFydDsKLQlzaXplX3QgZW5kOwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgc2l6ZV90IHN0YXJ0LAotCQkJCXNpemVfdCBlbmQpCi17Ci0JaW50IGk7Ci0JaW50IGo7Ci0KLQlmb3IgKGogPSAwOyBqIDwgUkFOR0VfTlVNOyBqKyspIHsKLQkJaWYgKCFyYW5nZVtqXS5lbmQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kID49IHJhbmdlW2pdLmVuZCkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSAwOwotCQkJcmFuZ2Vbal0uZW5kID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCAmJiByYW5nZVtqXS5zdGFydCA8IGVuZCArIDEpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gZW5kICsgMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kICYmIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgewotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7Ci0JCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpIDwgUkFOR0VfTlVNKSB7Ci0JCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOwotCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kICsgMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOwotCQkJfQotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci19Ci0KIHN0cnVjdCBwY2lfaG9zdGJyaWRnZV9wcm9iZSB7CiAJdTMyIGJ1czsKIAl1MzIgc2xvdDsKQEAgLTExMSw2ICs1Nyw4IEBACiAJZmFtMTBoX21tY29uZl9lbmQgPSBiYXNlICsgKDFVTEw8PChzZWduX2J1c25fYml0cyArIDIwKSkgLSAxOwogfQogCisjZGVmaW5lIFJBTkdFX05VTSAxNgorCiAvKioKICAqIGVhcmx5X2ZpbGxfbXBfYnVzX3RvX25vZGUoKQogICogY2FsbGVkIGJlZm9yZSBwY2liaW9zX3NjYW5fcm9vdCBhbmQgcGNpX3NjYW5fYnVzCkBAIC0xMzAsMTYgKzc4LDE3IEBACiAJc3RydWN0IHBjaV9yb290X2luZm8gKmluZm87CiAJdTMyIHJlZzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzaXplX3Qgc3RhcnQ7Ci0Jc2l6ZV90IGVuZDsKLQlzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlW1JBTkdFX05VTV07CisJdTY0IHN0YXJ0OworCXU2NCBlbmQ7CisJc3RydWN0IHJhbmdlIHJhbmdlW1JBTkdFX05VTV07CiAJdTY0IHZhbDsKIAl1MzIgYWRkcmVzczsKKwlib29sIGZvdW5kOwogCiAJaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQogCQlyZXR1cm4gLTE7CiAKLQlmb3VuZF9hbGxfbnVtYV9lYXJseSA9IDA7CisJZm91bmQgPSBmYWxzZTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfcHJvYmVzKTsgaSsrKSB7CiAJCXUzMiBpZDsKIAkJdTE2IGRldmljZTsKQEAgLTE1MywxMiArMTAyLDEyIEBACiAJCWRldmljZSA9IChpZD4+MTYpICYgMHhmZmZmOwogCQlpZiAocGNpX3Byb2Jlc1tpXS52ZW5kb3IgPT0gdmVuZG9yICYmCiAJCSAgICBwY2lfcHJvYmVzW2ldLmRldmljZSA9PSBkZXZpY2UpIHsKLQkJCWZvdW5kX2FsbF9udW1hX2Vhcmx5ID0gMTsKKwkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JaWYgKCFmb3VuZF9hbGxfbnVtYV9lYXJseSkKKwlpZiAoIWZvdW5kKQogCQlyZXR1cm4gMDsKIAogCXBjaV9yb290X251bSA9IDA7CkBAIC0xOTYsNyArMTQ1LDcgQEAKIAlkZWZfbGluayA9IChyZWcgPj4gOCkgJiAweDAzOwogCiAJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlyYW5nZVswXS5lbmQgPSAweGZmZmY7CisJYWRkX3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIDAsIDAsIDB4ZmZmZiArIDEpOwogCS8qIGlvIHBvcnQgcmVzb3VyY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXJlZyA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDEsIDB4YzAgKyAoaSA8PCAzKSk7CkBAIC0yMjAsMTMgKzE2OSwxMyBAQAogCiAJCWluZm8gPSAmcGNpX3Jvb3RfaW5mb1tqXTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIm5vZGUgJWQgbGluayAlZDogaW8gcG9ydCBbJWxseCwgJWxseF1cbiIsCi0JCSAgICAgICBub2RlLCBsaW5rLCAodTY0KXN0YXJ0LCAodTY0KWVuZCk7CisJCSAgICAgICBub2RlLCBsaW5rLCBzdGFydCwgZW5kKTsKIAogCQkvKiBrZXJuZWwgb25seSBoYW5kbGUgMTYgYml0IG9ubHkgKi8KIAkJaWYgKGVuZCA+IDB4ZmZmZikKIAkJCWVuZCA9IDB4ZmZmZjsKIAkJdXBkYXRlX3JlcyhpbmZvLCBzdGFydCwgZW5kLCBJT1JFU09VUkNFX0lPLCAxKTsKLQkJdXBkYXRlX3JhbmdlKHJhbmdlLCBzdGFydCwgZW5kKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgc3RhcnQsIGVuZCArIDEpOwogCX0KIAkvKiBhZGQgbGVmdCBvdmVyIGlvIHBvcnQgcmFuZ2UgdG8gZGVmIG5vZGUvbGluaywgWzAsIDB4ZmZmZl0gKi8KIAkvKiBmaW5kIHRoZSBwb3NpdGlvbiAqLwpAQCAtMjQxLDI5ICsxOTAsMzIgQEAKIAkJCWlmICghcmFuZ2VbaV0uZW5kKQogCQkJCWNvbnRpbnVlOwogCi0JCQl1cGRhdGVfcmVzKGluZm8sIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQsCisJCQl1cGRhdGVfcmVzKGluZm8sIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgLSAxLAogCQkJCSAgIElPUkVTT1VSQ0VfSU8sIDEpOwogCQl9CiAJfQogCiAJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKIAkvKiAweGZkMDAwMDAwMDAtMHhmZmZmZmZmZmZmIGZvciBIVCAqLwotCXJhbmdlWzBdLmVuZCA9ICgweGZkVUxMPDwzMikgLSAxOworCWVuZCA9IGNhcF9yZXNvdXJjZSgoMHhmZFVMTDw8MzIpIC0gMSk7CisJZW5kKys7CisJYWRkX3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIDAsIDAsIGVuZCk7CiAKIAkvKiBuZWVkIHRvIHRha2Ugb3V0IFswLCBUT00pIGZvciBSQU0qLwogCWFkZHJlc3MgPSBNU1JfSzhfVE9QX01FTTE7CiAJcmRtc3JsKGFkZHJlc3MsIHZhbCk7CiAJZW5kID0gKHZhbCAmIDB4ZmZmZmZmODAwMDAwVUxMKTsKLQlwcmludGsoS0VSTl9JTkZPICJUT006ICUwMTZseCBha2EgJWxkTVxuIiwgZW5kLCBlbmQ+PjIwKTsKKwlwcmludGsoS0VSTl9JTkZPICJUT006ICUwMTZsbHggYWthICVsbGRNXG4iLCBlbmQsIGVuZD4+MjApOwogCWlmIChlbmQgPCAoMVVMTDw8MzIpKQotCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIDAsIGVuZCAtIDEpOworCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgUkFOR0VfTlVNLCAwLCBlbmQpOwogCiAJLyogZ2V0IG1tY29uZmlnICovCiAJZ2V0X3BjaV9tbWNmZ19hbWRfZmFtMTBoX3JhbmdlKCk7CiAJLyogbmVlZCB0byB0YWtlIG91dCBtbWNvbmYgcmFuZ2UgKi8KIAlpZiAoZmFtMTBoX21tY29uZl9lbmQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkZhbSAxMGggbW1jb25mIFslbGx4LCAlbGx4XVxuIiwgZmFtMTBoX21tY29uZl9zdGFydCwgZmFtMTBoX21tY29uZl9lbmQpOwotCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIGZhbTEwaF9tbWNvbmZfc3RhcnQsIGZhbTEwaF9tbWNvbmZfZW5kKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgZmFtMTBoX21tY29uZl9zdGFydCwKKwkJCQkgZmFtMTBoX21tY29uZl9lbmQgKyAxKTsKIAl9CiAKIAkvKiBtbWlvIHJlc291cmNlICovCkBAIC0yOTMsNyArMjQ1LDcgQEAKIAkJaW5mbyA9ICZwY2lfcm9vdF9pbmZvW2pdOwogCiAJCXByaW50ayhLRVJOX0RFQlVHICJub2RlICVkIGxpbmsgJWQ6IG1taW8gWyVsbHgsICVsbHhdIiwKLQkJICAgICAgIG5vZGUsIGxpbmssICh1NjQpc3RhcnQsICh1NjQpZW5kKTsKKwkJICAgICAgIG5vZGUsIGxpbmssIHN0YXJ0LCBlbmQpOwogCQkvKgogCQkgKiBzb21lIHNpY2sgYWxsb2NhdGlvbiB3b3VsZCBoYXZlIHJhbmdlIG92ZXJsYXAgd2l0aCBmYW0xMGgKIAkJICogbW1jb25mIHJhbmdlLCBzbyBuZWVkIHRvIHVwZGF0ZSBzdGFydCBhbmQgZW5kLgpAQCAtMzE4LDE0ICsyNzAsMTUgQEAKIAkJCQkvKiB3ZSBnb3QgYSBob2xlICovCiAJCQkJZW5keCA9IGZhbTEwaF9tbWNvbmZfc3RhcnQgLSAxOwogCQkJCXVwZGF0ZV9yZXMoaW5mbywgc3RhcnQsIGVuZHgsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQkJCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIHN0YXJ0LCBlbmR4KTsKLQkJCQlwcmludGsoS0VSTl9DT05UICIgPT0+IFslbGx4LCAlbGx4XSIsICh1NjQpc3RhcnQsIGVuZHgpOworCQkJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIHN0YXJ0LAorCQkJCQkJIGVuZHggKyAxKTsKKwkJCQlwcmludGsoS0VSTl9DT05UICIgPT0+IFslbGx4LCAlbGx4XSIsIHN0YXJ0LCBlbmR4KTsKIAkJCQlzdGFydCA9IGZhbTEwaF9tbWNvbmZfZW5kICsgMTsKIAkJCQljaGFuZ2VkID0gMTsKIAkJCX0KIAkJCWlmIChjaGFuZ2VkKSB7CiAJCQkJaWYgKHN0YXJ0IDw9IGVuZCkgewotCQkJCQlwcmludGsoS0VSTl9DT05UICIgJXMgWyVsbHgsICVsbHhdIiwgZW5keD8iYW5kIjoiPT0+IiwgKHU2NClzdGFydCwgKHU2NCllbmQpOworCQkJCQlwcmludGsoS0VSTl9DT05UICIgJXMgWyVsbHgsICVsbHhdIiwgZW5keCA/ICJhbmQiIDogIj09PiIsIHN0YXJ0LCBlbmQpOwogCQkJCX0gZWxzZSB7CiAJCQkJCXByaW50ayhLRVJOX0NPTlQgIiVzXG4iLCBlbmR4PyIiOiIgPT0+IG5vbmUiKTsKIAkJCQkJY29udGludWU7CkBAIC0zMzMsOCArMjg2LDkgQEAKIAkJCX0KIAkJfQogCi0JCXVwZGF0ZV9yZXMoaW5mbywgc3RhcnQsIGVuZCwgSU9SRVNPVVJDRV9NRU0sIDEpOwotCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIHN0YXJ0LCBlbmQpOworCQl1cGRhdGVfcmVzKGluZm8sIGNhcF9yZXNvdXJjZShzdGFydCksIGNhcF9yZXNvdXJjZShlbmQpLAorCQkJCSBJT1JFU09VUkNFX01FTSwgMSk7CisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIHN0YXJ0LCBlbmQgKyAxKTsKIAkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAl9CiAKQEAgLTM0OCw4ICszMDIsOCBAQAogCQlhZGRyZXNzID0gTVNSX0s4X1RPUF9NRU0yOwogCQlyZG1zcmwoYWRkcmVzcywgdmFsKTsKIAkJZW5kID0gKHZhbCAmIDB4ZmZmZmZmODAwMDAwVUxMKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVE9NMjogJTAxNmx4IGFrYSAlbGRNXG4iLCBlbmQsIGVuZD4+MjApOwotCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIDFVTEw8PDMyLCBlbmQgLSAxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsIGVuZCwgZW5kPj4yMCk7CisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIDFVTEw8PDMyLCBlbmQpOwogCX0KIAogCS8qCkBAIC0zNjgsNyArMzIyLDggQEAKIAkJCWlmICghcmFuZ2VbaV0uZW5kKQogCQkJCWNvbnRpbnVlOwogCi0JCQl1cGRhdGVfcmVzKGluZm8sIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQsCisJCQl1cGRhdGVfcmVzKGluZm8sIGNhcF9yZXNvdXJjZShyYW5nZVtpXS5zdGFydCksCisJCQkJICAgY2FwX3Jlc291cmNlKHJhbmdlW2ldLmVuZCAtIDEpLAogCQkJCSAgIElPUkVTT1VSQ0VfTUVNLCAxKTsKIAkJfQogCX0KQEAgLTM4NCwyNCArMzM5LDE0IEBACiAJCSAgICAgICBpbmZvLT5idXNfbWluLCBpbmZvLT5idXNfbWF4LCBpbmZvLT5ub2RlLCBpbmZvLT5saW5rKTsKIAkJZm9yIChqID0gMDsgaiA8IHJlc19udW07IGorKykgewogCQkJcmVzID0gJmluZm8tPnJlc1tqXTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJidXM6ICUwMnggaW5kZXggJXggJXM6IFslbGx4LCAlbGx4XVxuIiwKLQkJCSAgICAgICBidXNudW0sIGosCi0JCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKT8iaW8gcG9ydCI6Im1taW8iLAotCQkJICAgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJidXM6ICUwMnggaW5kZXggJXggJXBSXG4iLAorCQkJCSAgICAgICBidXNudW0sIGosIHJlcyk7CiAJCX0KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UgIC8qICFDT05GSUdfWDg2XzY0ICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2ZpbGxfbXBfYnVzX2luZm8odm9pZCkgeyByZXR1cm4gMDsgfQotCi0jZW5kaWYgLyogIUNPTkZJR19YODZfNjQgKi8KLQotLyogY29tbW9uIDMyLzY0IGJpdCBjb2RlICovCi0KICNkZWZpbmUgRU5BQkxFX0NGOF9FWFRfQ0ZHICAgICAgKDFVTEwgPDwgNDYpCiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9wY2lfaW9fZWNzKHZvaWQgKnVudXNlZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKaW5kZXggZjkzOWQ2MC4uNjRhMTIyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKKysrIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKQEAgLTEsMTEgKzEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KIAogI2luY2x1ZGUgImJ1c19udW1hLmgiCiAKIGludCBwY2lfcm9vdF9udW07CiBzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyBwY2lfcm9vdF9pbmZvW1BDSV9ST09UX05SXTsKLWludCBmb3VuZF9hbGxfbnVtYV9lYXJseTsKIAogdm9pZCB4ODZfcGNpX3Jvb3RfYnVzX3Jlc19xdWlya3Moc3RydWN0IHBjaV9idXMgKmIpCiB7CkBAIC0yMSwxMCArMjEsNiBAQAogCWlmICghcGNpX3Jvb3RfbnVtKQogCQlyZXR1cm47CiAKLQkvKiBmb3IgYW1kLCBpZiBvbmx5IG9uZSByb290IGJ1cywgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLwotCWlmIChwY2lfcm9vdF9udW0gPCAyICYmIGZvdW5kX2FsbF9udW1hX2Vhcmx5KQotCQlyZXR1cm47Ci0KIAlmb3IgKGkgPSAwOyBpIDwgcGNpX3Jvb3RfbnVtOyBpKyspIHsKIAkJaWYgKHBjaV9yb290X2luZm9baV0uYnVzX21pbiA9PSBiLT5udW1iZXIpCiAJCQlicmVhazsKQEAgLTM2LDEzICszMiwxNCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBlZXIgcm9vdCBidXMgJTAyeCByZXMgdXBkYXRlZCBmcm9tIHBjaSBjb25mXG4iLAogCQkJYi0+bnVtYmVyKTsKIAorCXBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhiKTsKIAlpbmZvID0gJnBjaV9yb290X2luZm9baV07CiAJZm9yIChqID0gMDsgaiA8IGluZm8tPnJlc19udW07IGorKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAkJc3RydWN0IHJlc291cmNlICpyb290OwogCiAJCXJlcyA9ICZpbmZvLT5yZXNbal07Ci0JCWItPnJlc291cmNlW2pdID0gcmVzOworCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShiLCByZXMsIDApOwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJZWxzZQpAQCAtNTEsOCArNDgsOCBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgdXBkYXRlX3JlcyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc2l6ZV90IHN0YXJ0LAotCQkJICAgICAgc2l6ZV90IGVuZCwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG1lcmdlKQordm9pZCBfX2RldmluaXQgdXBkYXRlX3JlcyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkJICByZXNvdXJjZV9zaXplX3QgZW5kLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbWVyZ2UpCiB7CiAJaW50IGk7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC02MCwyNSArNTcsMjggQEAKIAlpZiAoc3RhcnQgPiBlbmQpCiAJCXJldHVybjsKIAorCWlmIChzdGFydCA9PSBNQVhfUkVTT1VSQ0UpCisJCXJldHVybjsKKwogCWlmICghbWVyZ2UpCiAJCWdvdG8gYWRkaXQ7CiAKIAkvKiB0cnkgdG8gbWVyZ2UgaXQgd2l0aCBvbGQgb25lICovCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPnJlc19udW07IGkrKykgewotCQlzaXplX3QgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKLQkJc2l6ZV90IGNvbW1vbl9zdGFydCwgY29tbW9uX2VuZDsKKwkJcmVzb3VyY2Vfc2l6ZV90IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCXJlc291cmNlX3NpemVfdCBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CiAKIAkJcmVzID0gJmluZm8tPnJlc1tpXTsKIAkJaWYgKHJlcy0+ZmxhZ3MgIT0gZmxhZ3MpCiAJCQljb250aW51ZTsKIAotCQljb21tb25fc3RhcnQgPSBtYXgoKHNpemVfdClyZXMtPnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4oKHNpemVfdClyZXMtPmVuZCwgZW5kKTsKKwkJY29tbW9uX3N0YXJ0ID0gbWF4KHJlcy0+c3RhcnQsIHN0YXJ0KTsKKwkJY29tbW9uX2VuZCA9IG1pbihyZXMtPmVuZCwgZW5kKTsKIAkJaWYgKGNvbW1vbl9zdGFydCA+IGNvbW1vbl9lbmQgKyAxKQogCQkJY29udGludWU7CiAKLQkJZmluYWxfc3RhcnQgPSBtaW4oKHNpemVfdClyZXMtPnN0YXJ0LCBzdGFydCk7Ci0JCWZpbmFsX2VuZCA9IG1heCgoc2l6ZV90KXJlcy0+ZW5kLCBlbmQpOworCQlmaW5hbF9zdGFydCA9IG1pbihyZXMtPnN0YXJ0LCBzdGFydCk7CisJCWZpbmFsX2VuZCA9IG1heChyZXMtPmVuZCwgZW5kKTsKIAogCQlyZXMtPnN0YXJ0ID0gZmluYWxfc3RhcnQ7CiAJCXJlcy0+ZW5kID0gZmluYWxfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmggYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAppbmRleCBhZGJjMjNmZS4uODA0YTRiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmgKKysrIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmgKQEAgLTEsOSArMSw4IEBACi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCisjaWZuZGVmIF9fQlVTX05VTUFfSAorI2RlZmluZSBfX0JVU19OVU1BX0gKIC8qCiAgKiBzdWIgYnVzICh0cmFuc3BhcmVudCkgd2lsbCB1c2UgZW50cmVzIGZyb20gMyB0byBzdG9yZSBleHRyYSBmcm9tCi0gKiByb290LCBzbyBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzbG90IHRoZXJlLCBTaG91bGQgd2UKLSAqIGluY3JlYXNlIFBDSV9CVVNfTlVNX1JFU09VUkNFUz8KKyAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUuCiAgKi8KICNkZWZpbmUgUkVTX05VTSAxNgogc3RydWN0IHBjaV9yb290X2luZm8gewpAQCAtMjAsOCArMTksNyBAQAogI2RlZmluZSBQQ0lfUk9PVF9OUiA0CiBleHRlcm4gaW50IHBjaV9yb290X251bTsKIGV4dGVybiBzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyBwY2lfcm9vdF9pbmZvW1BDSV9ST09UX05SXTsKLWV4dGVybiBpbnQgZm91bmRfYWxsX251bWFfZWFybHk7CiAKLWV4dGVybiB2b2lkIHVwZGF0ZV9yZXMoc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8sIHNpemVfdCBzdGFydCwKLQkJCSAgICAgIHNpemVfdCBlbmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBtZXJnZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCisJCSAgICAgIHJlc291cmNlX3NpemVfdCBlbmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBtZXJnZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jb21tb24uYyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwppbmRleCBkMjU1MmM2Li4zNzM2MTc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCkBAIC01MjAsNiArNTIwLDkgQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAidXNlX2NycyIpKSB7CiAJCXBjaV9wcm9iZSB8PSBQQ0lfVVNFX19DUlM7CiAJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJub2NycyIpKSB7CisJCXBjaV9wcm9iZSB8PSBQQ0lfUk9PVF9OT19DUlM7CisJCXJldHVybiBOVUxMOwogCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJlYXJseWR1bXAiKSkgewogCQlwY2lfZWFybHlfZHVtcF9yZWdzID0gMTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCA1ZGM5ZThjLi5kZWNlM2ViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTYwLDIyICs2MCwyMCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwotCiAJCWlmIChza2lwX2lzYV9pb3Jlc291cmNlX2FsaWduKGRldikpCi0JCQlyZXR1cm47Ci0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCQlyZXR1cm4gc3RhcnQ7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisJcmV0dXJuIHN0YXJ0OwogfQogRVhQT1JUX1NZTUJPTChwY2liaW9zX2FsaWduX3Jlc291cmNlKTsKIApAQCAtMjU3LDEwICsyNTUsNiBAQAogICovCiBmc19pbml0Y2FsbChwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZXMpOwogCi12b2lkIF9fd2VhayB4ODZfcGNpX3Jvb3RfYnVzX3Jlc19xdWlya3Moc3RydWN0IHBjaV9idXMgKmIpCi17Ci19Ci0KIC8qCiAgKiAgSWYgd2Ugc2V0IHVwIGEgZGV2aWNlIGZvciBidXMgbWFzdGVyaW5nLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBsYXRlbmN5CiAgKiAgdGltZXIgYXMgY2VydGFpbiBjcmFwcHkgQklPU2VzIGZvcmdldCB0byBzZXQgaXQgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggMDY5NmQ1MC4uYjAyZjZkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtNTkwLDYgKzU5MCw4IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzE6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzI6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMxOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfTFBDMjoKIAkJci0+bmFtZSA9ICJQSUlYL0lDSCI7CiAJCXItPmdldCA9IHBpcnFfcGlpeF9nZXQ7CiAJCXItPnNldCA9IHBpcnFfcGlpeF9zZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggYjE5ZDFlNTQuLjhmM2Y5YTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYworKysgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKQEAgLTMwMywyMiArMzAzLDE3IEBACiB7CiAJc3RydWN0IHBjaV9tbWNmZ19yZWdpb24gKmNmZywgKmNmZ3g7CiAKLQkvKiBsYXN0IG9uZSovCi0JY2ZnID0gbGlzdF9lbnRyeShwY2lfbW1jZmdfbGlzdC5wcmV2LCB0eXBlb2YoKmNmZyksIGxpc3QpOwotCWlmIChjZmcpCi0JCWlmIChjZmctPmVuZF9idXMgPCBjZmctPnN0YXJ0X2J1cykKLQkJCWNmZy0+ZW5kX2J1cyA9IDI1NTsKLQotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZwY2lfbW1jZmdfbGlzdCkpCi0JCXJldHVybjsKLQotCS8qIGRvbid0IG92ZXJsYXAgcGxlYXNlICovCisJLyogRml4dXAgb3ZlcmxhcHMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNmZywgJnBjaV9tbWNmZ19saXN0LCBsaXN0KSB7CiAJCWlmIChjZmctPmVuZF9idXMgPCBjZmctPnN0YXJ0X2J1cykKIAkJCWNmZy0+ZW5kX2J1cyA9IDI1NTsKIAorCQkvKiBEb24ndCBhY2Nlc3MgdGhlIGxpc3QgaGVhZCAhICovCisJCWlmIChjZmctPmxpc3QubmV4dCA9PSAmcGNpX21tY2ZnX2xpc3QpCisJCQlicmVhazsKKwogCQljZmd4ID0gbGlzdF9lbnRyeShjZmctPmxpc3QubmV4dCwgdHlwZW9mKCpjZmcpLCBsaXN0KTsKLQkJaWYgKGNmZyAhPSBjZmd4ICYmIGNmZy0+ZW5kX2J1cyA+PSBjZmd4LT5zdGFydF9idXMpCisJCWlmIChjZmctPmVuZF9idXMgPj0gY2ZneC0+c3RhcnRfYnVzKQogCQkJY2ZnLT5lbmRfYnVzID0gY2ZneC0+c3RhcnRfYnVzIC0gMTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCmluZGV4IDhlYjI5NWUuLjg4ODRhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC04LDkgKzgsNyBAQAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+Ci0KLSNkZWZpbmUgWFFVQURfUE9SVElPX0JBU0UgMHhmZTQwMDAwMAotI2RlZmluZSBYUVVBRF9QT1JUSU9fUVVBRCAweDQwMDAwICAvKiAyNTZrIHBlciBxdWFkLiAqLworI2luY2x1ZGUgPGFzbS9udW1hcS5oPgogCiAjZGVmaW5lIEJVUzJRVUFEKGdsb2JhbCkgKG1wX2J1c19pZF90b19ub2RlW2dsb2JhbF0pCiAKQEAgLTE4LDggKzE2LDYgQEAKIAogI2RlZmluZSBRVUFETE9DQUwyQlVTKHF1YWQsbG9jYWwpIChxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtxdWFkXVtsb2NhbF0pCiAKLSNkZWZpbmUgWFFVQURfUE9SVF9BRERSKHBvcnQsIHF1YWQpICh4cXVhZF9wb3J0aW8gKyAoWFFVQURfUE9SVElPX1FVQUQqcXVhZCkgKyBwb3J0KQotCiAjZGVmaW5lIFBDSV9DT05GMV9NUV9BRERSRVNTKGJ1cywgZGV2Zm4sIHJlZykgXAogCSgweDgwMDAwMDAwIHwgKEJVUzJMT0NBTChidXMpIDw8IDE2KSB8IChkZXZmbiA8PCA4KSB8IChyZWcgJiB+MykpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKaW5kZXggYmVlOGQ2YS4uMTM0MDNmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJZnByaW50ZihzdGRlcnIsICJVc2FnZTogb2JqZHVtcCAtZCBhLm91dCB8IGF3ayAtZiBkaXN0aWxsLmF3ayB8IgotCQkiICVzIFsteXwtbl0gWy12XSBcbiIsIHByb2cpOworCQkiICVzIFsteXwtbl0gWy12XVxuIiwgcHJvZyk7CiAJZnByaW50ZihzdGRlcnIsICJcdC15CTY0Yml0IG1vZGVcbiIpOwogCWZwcmludGYoc3RkZXJyLCAiXHQtbgkzMmJpdCBtb2RlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LXYJdmVyYm9zZSBtb2RlXG4iKTsKQEAgLTY5LDcgKzY5LDcgQEAKIAogc3RhdGljIHZvaWQgZHVtcF9pbnNuKEZJTEUgKmZwLCBzdHJ1Y3QgaW5zbiAqaW5zbikKIHsKLQlmcHJpbnRmKGZwLCAiSW5zdHJ1Y3Rpb24gPSB7IFxuIik7CisJZnByaW50ZihmcCwgIkluc3RydWN0aW9uID0ge1xuIik7CiAJZHVtcF9maWVsZChmcCwgInByZWZpeGVzIiwgIlx0IiwJJmluc24tPnByZWZpeGVzKTsKIAlkdW1wX2ZpZWxkKGZwLCAicmV4X3ByZWZpeCIsICJcdCIsCSZpbnNuLT5yZXhfcHJlZml4KTsKIAlkdW1wX2ZpZWxkKGZwLCAidmV4X3ByZWZpeCIsICJcdCIsCSZpbnNuLT52ZXhfcHJlZml4KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAzNmRhY2NiNi4uYjYwNzIzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KQEAgLTEwOTQsNiArMTA5NSwxMiBAQAogCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfSU9NQVA7CiAKKwkvKgorCSAqIFByZXZlbnQgcGFnZSB0YWJsZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgaW4gaGlnaG1lbSwgZXZlbgorCSAqIGlmIENPTkZJR19ISUdIUFRFIGlzIGVuYWJsZWQuCisJICovCisJX191c2VycHRlX2FsbG9jX2dmcCAmPSB+X19HRlBfSElHSE1FTTsKKwogCS8qIFdvcmsgb3V0IGlmIHdlIHN1cHBvcnQgTlggKi8KIAl4ODZfY29uZmlndXJlX254KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBiZjRjZDZiLi5mOWViN2RlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNDI3LDIzICsxNDI3LDYgQEAKICNlbmRpZgogfQogCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLXN0YXRpYyB2b2lkICp4ZW5fa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKLXsKLQlwZ3Byb3RfdCBwcm90ID0gUEFHRV9LRVJORUw7Ci0KLQlpZiAoUGFnZVBpbm5lZChwYWdlKSkKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX1JPOwotCi0JaWYgKDAgJiYgUGFnZUhpZ2hNZW0ocGFnZSkpCi0JCXByaW50aygibWFwcGluZyBoaWdocHRlICVseCB0eXBlICVkIHByb3QgJXNcbiIsCi0JCSAgICAgICBwYWdlX3RvX3BmbihwYWdlKSwgdHlwZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9SVyA/ICJXUklURSIgOiAiUkVBRCIpOwotCi0JcmV0dXJuIGttYXBfYXRvbWljX3Byb3QocGFnZSwgdHlwZSwgcHJvdCk7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKQEAgLTE5MDIsMTAgKzE4ODUsNiBAQAogCS5hbGxvY19wbWRfY2xvbmUgPSBwYXJhdmlydF9ub3AsCiAJLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcG1kX2luaXQsCiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCS5rbWFwX2F0b21pY19wdGUgPSB4ZW5fa21hcF9hdG9taWNfcHRlLAotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnNldF9wdGUgPSB4ZW5fc2V0X3B0ZSwKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TIGIvYXJjaC94ODYveGVuL3hlbi1hc21fMzIuUwppbmRleCA4OGUxNWRlLi4yMmEyMDkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtXzMyLlMKQEAgLTkwLDkgKzkwLDkgQEAKIAlHRVRfVEhSRUFEX0lORk8oJWVheCkKIAltb3ZsIFRJX2NwdSglZWF4KSwgJWVheAogCW1vdmwgX19wZXJfY3B1X29mZnNldCgsJWVheCw0KSwgJWVheAotCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwgJWVheAorCW1vdiB4ZW5fdmNwdSglZWF4KSwgJWVheAogI2Vsc2UKLQltb3ZsIHBlcl9jcHVfX3hlbl92Y3B1LCAlZWF4CisJbW92bCB4ZW5fdmNwdSwgJWVheAogI2VuZGlmCiAKIAkvKiBjaGVjayBJRiBzdGF0ZSB3ZSdyZSByZXN0b3JpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhMTM4NzcwLi43NmJmMzU1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zOTQsNyArMzk0LDcgQEAKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQogCiBleHRlcm4gIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKIAogLyoKICAqIHJlbWFwIGEgcGh5c2ljYWwgcGFnZSBgcGZuJyBvZiBzaXplIGBzaXplJyB3aXRoIHBhZ2UgcHJvdGVjdGlvbiBgcHJvdCcKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYwppbmRleCBiN2MwNzM0Li5jZDEwMjY5IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCkBAIC02OSwyNiArNjksMjUgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzaXplLAotICAgIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwotCiAJCWlmIChzaXplID4gMHgxMDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBJL08gUmVnaW9uICVzLyVkIHRvbyBsYXJnZSIKIAkJCSAgICAgICAiICglbGQgYnl0ZXMpXG4iLCBwY2lfbmFtZShkZXYpLAogCQkJICAgICAgIGRldi0+cmVzb3VyY2UgLSByZXMsIHNpemUpOwogCQl9CiAKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQogCX0KKworCXJldHVybiBzdGFydDsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jIGIvYXJjaC94dGVuc2EvbW0vY2FjaGUuYwppbmRleCAzYmE5OTBjLi44NWRmNDY1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jCisrKyBiL2FyY2gveHRlbnNhL21tL2NhY2hlLmMKQEAgLTE0Nyw5ICsxNDcsOSBAQAogI2VuZGlmCiAKIHZvaWQKLXVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbigqcHRlcCk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoIXBmbl92YWxpZChwZm4pKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwppbmRleCAyZjBiODZiMy4uODdlMjE4ZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogI2lmIDAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQlyZXR1cm47Ci0JZWxzZSBpZiAoZGV2LT5tY19jb3VudCkKKwllbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCWRldi0+ZmxhZ3MgfD0gSUZGX0FMTE1VTFRJOwogCWVsc2UKIAkJZGV2LT5mbGFncyAmPSB+SUZGX0FMTE1VTFRJOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGU3ZGJiYWYuLmM4NWQ3NGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTIzLDIwICsyMyw2IEBACiBzdHJ1Y3QgYmxraW9fY2dyb3VwIGJsa2lvX3Jvb3RfY2dyb3VwID0geyAud2VpZ2h0ID0gMipCTEtJT19XRUlHSFRfREVGQVVMVCB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9fcm9vdF9jZ3JvdXApOwogCi1ib29sIGJsa2lvY2dfY3NzX3RyeWdldChzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZykKLXsKLQlpZiAoIWNzc190cnlnZXQoJmJsa2NnLT5jc3MpKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChibGtpb2NnX2Nzc190cnlnZXQpOwotCi12b2lkIGJsa2lvY2dfY3NzX3B1dChzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZykKLXsKLQljc3NfcHV0KCZibGtjZy0+Y3NzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa2lvY2dfY3NzX3B1dCk7Ci0KIHN0cnVjdCBibGtpb19jZ3JvdXAgKmNncm91cF90b19ibGtpb19jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwKQogewogCXJldHVybiBjb250YWluZXJfb2YoY2dyb3VwX3N1YnN5c19zdGF0ZShjZ3JvdXAsIGJsa2lvX3N1YnN5c19pZCksCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmggYi9ibG9jay9ibGstY2dyb3VwLmgKaW5kZXggNGQzMTZkZi4uODRiZjc0NSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5oCisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuaApAQCAtNDMsOSArNDMsNiBAQAogCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsKIH07CiAKLWV4dGVybiBib29sIGJsa2lvY2dfY3NzX3RyeWdldChzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZyk7Ci1leHRlcm4gdm9pZCBibGtpb2NnX2Nzc19wdXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpOwotCiB0eXBlZGVmIHZvaWQgKGJsa2lvX3VubGlua19ncm91cF9mbikgKHZvaWQgKmtleSwgc3RydWN0IGJsa2lvX2dyb3VwICpibGtnKTsKIHR5cGVkZWYgdm9pZCAoYmxraW9fdXBkYXRlX2dyb3VwX3dlaWdodF9mbikgKHN0cnVjdCBibGtpb19ncm91cCAqYmxrZywKIAkJCQkJCXVuc2lnbmVkIGludCB3ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggZDFhOWEwYS4uOWZlMTc0ZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xNDkwLDkgKzE0OTAsOSBAQAogLyoKICAqIFdlIG9ubHkgd2FudCBvbmUgLT5tYWtlX3JlcXVlc3RfZm4gdG8gYmUgYWN0aXZlIGF0IGEgdGltZSwKICAqIGVsc2Ugc3RhY2sgdXNhZ2Ugd2l0aCBzdGFja2VkIGRldmljZXMgY291bGQgYmUgYSBwcm9ibGVtLgotICogU28gdXNlIGN1cnJlbnQtPmJpb197bGlzdCx0YWlsfSB0byBrZWVwIGEgbGlzdCBvZiByZXF1ZXN0cworICogU28gdXNlIGN1cnJlbnQtPmJpb19saXN0IHRvIGtlZXAgYSBsaXN0IG9mIHJlcXVlc3RzCiAgKiBzdWJtaXRlZCBieSBhIG1ha2VfcmVxdWVzdF9mbiBmdW5jdGlvbi4KLSAqIGN1cnJlbnQtPmJpb190YWlsIGlzIGFsc28gdXNlZCBhcyBhIGZsYWcgdG8gc2F5IGlmCisgKiBjdXJyZW50LT5iaW9fbGlzdCBpcyBhbHNvIHVzZWQgYXMgYSBmbGFnIHRvIHNheSBpZgogICogZ2VuZXJpY19tYWtlX3JlcXVlc3QgaXMgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGlzIHRhc2sgb3Igbm90LgogICogSWYgaXQgaXMgTlVMTCwgdGhlbiBubyBtYWtlX3JlcXVlc3QgaXMgYWN0aXZlLiAgSWYgaXQgaXMgbm9uLU5VTEwsCiAgKiB0aGVuIGEgbWFrZV9yZXF1ZXN0IGlzIGFjdGl2ZSwgYW5kIG5ldyByZXF1ZXN0cyBzaG91bGQgYmUgYWRkZWQKQEAgLTE1MDAsMTEgKzE1MDAsMTEgQEAKICAqLwogdm9pZCBnZW5lcmljX21ha2VfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaWYgKGN1cnJlbnQtPmJpb190YWlsKSB7CisJc3RydWN0IGJpb19saXN0IGJpb19saXN0X29uX3N0YWNrOworCisJaWYgKGN1cnJlbnQtPmJpb19saXN0KSB7CiAJCS8qIG1ha2VfcmVxdWVzdCBpcyBhY3RpdmUgKi8KLQkJKihjdXJyZW50LT5iaW9fdGFpbCkgPSBiaW87Ci0JCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JCWN1cnJlbnQtPmJpb190YWlsID0gJmJpby0+YmlfbmV4dDsKKwkJYmlvX2xpc3RfYWRkKGN1cnJlbnQtPmJpb19saXN0LCBiaW8pOwogCQlyZXR1cm47CiAJfQogCS8qIGZvbGxvd2luZyBsb29wIG1heSBiZSBhIGJpdCBub24tb2J2aW91cywgYW5kIHNvIGRlc2VydmVzIHNvbWUKQEAgLTE1MTIsMzAgKzE1MTIsMjcgQEAKIAkgKiBCZWZvcmUgZW50ZXJpbmcgdGhlIGxvb3AsIGJpby0+YmlfbmV4dCBpcyBOVUxMIChhcyBhbGwgY2FsbGVycwogCSAqIGVuc3VyZSB0aGF0KSBzbyB3ZSBoYXZlIGEgbGlzdCB3aXRoIGEgc2luZ2xlIGJpby4KIAkgKiBXZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBqdXN0IHRha2VuIGl0IG9mZiBhIGxvbmdlciBsaXN0LCBzbwotCSAqIHdlIGFzc2lnbiBiaW9fbGlzdCB0byB0aGUgbmV4dCAod2hpY2ggaXMgTlVMTCkgYW5kIGJpb190YWlsCi0JICogdG8gJmJpb19saXN0LCB0aHVzIGluaXRpYWxpc2luZyB0aGUgYmlvX2xpc3Qgb2YgbmV3IGJpb3MgdG8gYmUKKwkgKiB3ZSBhc3NpZ24gYmlvX2xpc3QgdG8gYSBwb2ludGVyIHRvIHRoZSBiaW9fbGlzdF9vbl9zdGFjaywKKwkgKiB0aHVzIGluaXRpYWxpc2luZyB0aGUgYmlvX2xpc3Qgb2YgbmV3IGJpb3MgdG8gYmUKIAkgKiBhZGRlZC4gIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgbWF5IGluZGVlZCBhZGQgc29tZSBtb3JlIGJpb3MKIAkgKiB0aHJvdWdoIGEgcmVjdXJzaXZlIGNhbGwgdG8gZ2VuZXJpY19tYWtlX3JlcXVlc3QuICBJZiBpdAogCSAqIGRpZCwgd2UgZmluZCBhIG5vbi1OVUxMIHZhbHVlIGluIGJpb19saXN0IGFuZCByZS1lbnRlciB0aGUgbG9vcAogCSAqIGZyb20gdGhlIHRvcC4gIEluIHRoaXMgY2FzZSB3ZSByZWFsbHkgZGlkIGp1c3QgdGFrZSB0aGUgYmlvCi0JICogb2YgdGhlIHRvcCBvZiB0aGUgbGlzdCAobm8gcHJldGVuZGluZykgYW5kIHNvIGZpeHVwIGJpb19saXN0IGFuZAotCSAqIGJpb190YWlsIG9yIGJpX25leHQsIGFuZCBjYWxsIGludG8gX19nZW5lcmljX21ha2VfcmVxdWVzdCBhZ2Fpbi4KKwkgKiBvZiB0aGUgdG9wIG9mIHRoZSBsaXN0IChubyBwcmV0ZW5kaW5nKSBhbmQgc28gcmVtb3ZlIGl0IGZyb20KKwkgKiBiaW9fbGlzdCwgYW5kIGNhbGwgaW50byBfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0IGFnYWluLgogCSAqCiAJICogVGhlIGxvb3Agd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzIHRvIG1ha2Ugb25seSBvbmUgY2FsbCB0bwogCSAqIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgKHdoaWNoIGlzIGltcG9ydGFudCBhcyBpdCBpcyBsYXJnZSBhbmQKIAkgKiBpbmxpbmVkKSBhbmQgdG8ga2VlcCB0aGUgc3RydWN0dXJlIHNpbXBsZS4KIAkgKi8KIAlCVUdfT04oYmlvLT5iaV9uZXh0KTsKKwliaW9fbGlzdF9pbml0KCZiaW9fbGlzdF9vbl9zdGFjayk7CisJY3VycmVudC0+YmlvX2xpc3QgPSAmYmlvX2xpc3Rfb25fc3RhY2s7CiAJZG8gewotCQljdXJyZW50LT5iaW9fbGlzdCA9IGJpby0+YmlfbmV4dDsKLQkJaWYgKGJpby0+YmlfbmV4dCA9PSBOVUxMKQotCQkJY3VycmVudC0+YmlvX3RhaWwgPSAmY3VycmVudC0+YmlvX2xpc3Q7Ci0JCWVsc2UKLQkJCWJpby0+YmlfbmV4dCA9IE5VTEw7CiAJCV9fZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKLQkJYmlvID0gY3VycmVudC0+YmlvX2xpc3Q7CisJCWJpbyA9IGJpb19saXN0X3BvcChjdXJyZW50LT5iaW9fbGlzdCk7CiAJfSB3aGlsZSAoYmlvKTsKLQljdXJyZW50LT5iaW9fdGFpbCA9IE5VTEw7IC8qIGRlYWN0aXZhdGUgKi8KKwljdXJyZW50LT5iaW9fbGlzdCA9IE5VTEw7IC8qIGRlYWN0aXZhdGUgKi8KIH0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19tYWtlX3JlcXVlc3QpOwogCkBAIC0xNjE3LDggKzE2MTQsNyBAQAogCSAqIGxpbWl0YXRpb24uCiAJICovCiAJYmxrX3JlY2FsY19ycV9zZWdtZW50cyhycSk7Ci0JaWYgKHJxLT5ucl9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkgfHwKLQkgICAgcnEtPm5yX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkpIHsKKwlpZiAocnEtPm5yX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb3ZlciBtYXggc2VnbWVudHMgbGltaXQuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2MuYyBiL2Jsb2NrL2Jsay1pb2MuYwppbmRleCA5OGU2YmY2Li4zZjY1YzhhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9jLmMKKysrIGIvYmxvY2svYmxrLWlvYy5jCkBAIC05MSw3ICs5MSw3IEBACiAJCXNwaW5fbG9ja19pbml0KCZyZXQtPmxvY2spOwogCQlyZXQtPmlvcHJpb19jaGFuZ2VkID0gMDsKIAkJcmV0LT5pb3ByaW8gPSAwOwotCQlyZXQtPmxhc3Rfd2FpdGVkID0gamlmZmllczsgLyogZG9lc24ndCBtYXR0ZXIuLi4gKi8KKwkJcmV0LT5sYXN0X3dhaXRlZCA9IDA7IC8qIGRvZXNuJ3QgbWF0dGVyLi4uICovCiAJCXJldC0+bnJfYmF0Y2hfcmVxdWVzdHMgPSAwOyAvKiBiZWNhdXNlIHRoaXMgaXMgMCAqLwogCQlJTklUX1JBRElYX1RSRUUoJnJldC0+cmFkaXhfcm9vdCwgR0ZQX0FUT01JQyB8IF9fR0ZQX0hJR0gpOwogCQlJTklUX0hMSVNUX0hFQUQoJnJldC0+Y2ljX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA5OWNiNWNmLi41ZTdkYzk5IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMjA2LDggKzIwNiw3IEBACiB7CiAJaW50IG5yX3BoeXNfc2VncyA9IGJpb19waHlzX3NlZ21lbnRzKHEsIGJpbyk7CiAKLQlpZiAocmVxLT5ucl9waHlzX3NlZ21lbnRzICsgbnJfcGh5c19zZWdzID4gcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpIHx8Ci0JICAgIHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKSB7CisJaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkgewogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfTk9NRVJHRTsKIAkJaWYgKHJlcSA9PSBxLT5sYXN0X21lcmdlKQogCQkJcS0+bGFzdF9tZXJnZSA9IE5VTEw7CkBAIC0zMDAsMTAgKzI5OSw3IEBACiAJCXRvdGFsX3BoeXNfc2VnbWVudHMtLTsKIAl9CiAKLQlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKQotCQlyZXR1cm4gMDsKLQotCWlmICh0b3RhbF9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpKQorCWlmICh0b3RhbF9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3NlZ21lbnRzKHEpKQogCQlyZXR1cm4gMDsKIAogCS8qIE1lcmdlIGlzIE9LLi4uICovCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IDVlZWI5ZTAuLjMxZTdhOTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC05MSwxMCArOTEsOSBAQAogICovCiB2b2lkIGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewotCWxpbS0+bWF4X3BoeXNfc2VnbWVudHMgPSBNQVhfUEhZU19TRUdNRU5UUzsKLQlsaW0tPm1heF9od19zZWdtZW50cyA9IE1BWF9IV19TRUdNRU5UUzsKKwlsaW0tPm1heF9zZWdtZW50cyA9IEJMS19NQVhfU0VHTUVOVFM7CiAJbGltLT5zZWdfYm91bmRhcnlfbWFzayA9IEJMS19TRUdfQk9VTkRBUllfTUFTSzsKLQlsaW0tPm1heF9zZWdtZW50X3NpemUgPSBNQVhfU0VHTUVOVF9TSVpFOworCWxpbS0+bWF4X3NlZ21lbnRfc2l6ZSA9IEJMS19NQVhfU0VHTUVOVF9TSVpFOwogCWxpbS0+bWF4X3NlY3RvcnMgPSBCTEtfREVGX01BWF9TRUNUT1JTOwogCWxpbS0+bWF4X2h3X3NlY3RvcnMgPSBJTlRfTUFYOwogCWxpbS0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IDA7CkBAIC0xNTQsNyArMTUzLDcgQEAKIAlxLT51bnBsdWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXE7CiAKIAlibGtfc2V0X2RlZmF1bHRfbGltaXRzKCZxLT5saW1pdHMpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBTQUZFX01BWF9TRUNUT1JTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgQkxLX1NBRkVfTUFYX1NFQ1RPUlMpOwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgYSBsb2NrLCBmYWxsIGJhY2sgdG8gb3VyIGVtYmVkZGVkCkBAIC0yMTAsMzcgKzIwOSwzMiBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfYm91bmNlX2xpbWl0KTsKIAogLyoqCi0gKiBibGtfcXVldWVfbWF4X3NlY3RvcnMgLSBzZXQgbWF4IHNlY3RvcnMgZm9yIGEgcmVxdWVzdCBmb3IgdGhpcyBxdWV1ZQorICogYmxrX3F1ZXVlX21heF9od19zZWN0b3JzIC0gc2V0IG1heCBzZWN0b3JzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKICAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKLSAqIEBtYXhfc2VjdG9yczogIG1heCBzZWN0b3JzIGluIHRoZSB1c3VhbCA1MTJiIHVuaXQKKyAqIEBtYXhfaHdfc2VjdG9yczogIG1heCBoYXJkd2FyZSBzZWN0b3JzIGluIHRoZSB1c3VhbCA1MTJiIHVuaXQKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgIEVuYWJsZXMgYSBsb3cgbGV2ZWwgZHJpdmVyIHRvIHNldCBhbiB1cHBlciBsaW1pdCBvbiB0aGUgc2l6ZSBvZgotICogICAgcmVjZWl2ZWQgcmVxdWVzdHMuCisgKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYSBoYXJkIHVwcGVyIGxpbWl0LAorICogICAgbWF4X2h3X3NlY3RvcnMsIG9uIHRoZSBzaXplIG9mIHJlcXVlc3RzLiAgbWF4X2h3X3NlY3RvcnMgaXMgc2V0IGJ5CisgKiAgICB0aGUgZGV2aWNlIGRyaXZlciBiYXNlZCB1cG9uIHRoZSBjb21iaW5lZCBjYXBhYmlsaXRpZXMgb2YgSS9PCisgKiAgICBjb250cm9sbGVyIGFuZCBzdG9yYWdlIGRldmljZS4KKyAqCisgKiAgICBtYXhfc2VjdG9ycyBpcyBhIHNvZnQgbGltaXQgaW1wb3NlZCBieSB0aGUgYmxvY2sgbGF5ZXIgZm9yCisgKiAgICBmaWxlc3lzdGVtIHR5cGUgcmVxdWVzdHMuICBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIG9uIGEKKyAqICAgIHBlci1kZXZpY2UgYmFzaXMgaW4gL3N5cy9ibG9jay88ZGV2aWNlPi9xdWV1ZS9tYXhfc2VjdG9yc19rYi4KKyAqICAgIFRoZSBzb2Z0IGxpbWl0IGNhbiBub3QgZXhjZWVkIG1heF9od19zZWN0b3JzLgogICoqLwotdm9pZCBibGtfcXVldWVfbWF4X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtYXhfc2VjdG9ycykKK3ZvaWQgYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbWF4X2h3X3NlY3RvcnMpCiB7Ci0JaWYgKChtYXhfc2VjdG9ycyA8PCA5KSA8IFBBR0VfQ0FDSEVfU0laRSkgewotCQltYXhfc2VjdG9ycyA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSA5KTsKKwlpZiAoKG1heF9od19zZWN0b3JzIDw8IDkpIDwgUEFHRV9DQUNIRV9TSVpFKSB7CisJCW1heF9od19zZWN0b3JzID0gMSA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIDkpOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0IHRvIG1pbmltdW0gJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgbWF4X3NlY3RvcnMpOworCQkgICAgICAgX19mdW5jX18sIG1heF9od19zZWN0b3JzKTsKIAl9CiAKLQlpZiAoQkxLX0RFRl9NQVhfU0VDVE9SUyA+IG1heF9zZWN0b3JzKQotCQlxLT5saW1pdHMubWF4X2h3X3NlY3RvcnMgPSBxLT5saW1pdHMubWF4X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKLQllbHNlIHsKLQkJcS0+bGltaXRzLm1heF9zZWN0b3JzID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKLQkJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gbWF4X3NlY3RvcnM7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X3NlY3RvcnMpOwotCi12b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heF9zZWN0b3JzKQotewotCWlmIChCTEtfREVGX01BWF9TRUNUT1JTID4gbWF4X3NlY3RvcnMpCi0JCXEtPmxpbWl0cy5tYXhfaHdfc2VjdG9ycyA9IEJMS19ERUZfTUFYX1NFQ1RPUlM7Ci0JZWxzZQotCQlxLT5saW1pdHMubWF4X2h3X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKKwlxLT5saW1pdHMubWF4X2h3X3NlY3RvcnMgPSBtYXhfaHdfc2VjdG9yczsKKwlxLT5saW1pdHMubWF4X3NlY3RvcnMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9od19zZWN0b3JzLAorCQkJCSAgICAgIEJMS19ERUZfTUFYX1NFQ1RPUlMpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMpOwogCkBAIC0yNTcsMTcgKzI1MSwxNSBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyk7CiAKIC8qKgotICogYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzIC0gc2V0IG1heCBwaHlzIHNlZ21lbnRzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKKyAqIGJsa19xdWV1ZV9tYXhfc2VnbWVudHMgLSBzZXQgbWF4IGh3IHNlZ21lbnRzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKICAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKICAqIEBtYXhfc2VnbWVudHM6ICBtYXggbnVtYmVyIG9mIHNlZ21lbnRzCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZgotICogICAgcGh5c2ljYWwgZGF0YSBzZWdtZW50cyBpbiBhIHJlcXVlc3QuICBUaGlzIHdvdWxkIGJlIHRoZSBsYXJnZXN0IHNpemVkCi0gKiAgICBzY2F0dGVyIGxpc3QgdGhlIGRyaXZlciBjb3VsZCBoYW5kbGUuCisgKiAgICBodyBkYXRhIHNlZ21lbnRzIGluIGEgcmVxdWVzdC4KICAqKi8KLXZvaWQgYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSB1bnNpZ25lZCBzaG9ydCBtYXhfc2VnbWVudHMpCit2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIHNob3J0IG1heF9zZWdtZW50cykKIHsKIAlpZiAoIW1heF9zZWdtZW50cykgewogCQltYXhfc2VnbWVudHMgPSAxOwpAQCAtMjc1LDMzICsyNjcsOSBAQAogCQkgICAgICAgX19mdW5jX18sIG1heF9zZWdtZW50cyk7CiAJfQogCi0JcS0+bGltaXRzLm1heF9waHlzX3NlZ21lbnRzID0gbWF4X3NlZ21lbnRzOworCXEtPmxpbWl0cy5tYXhfc2VnbWVudHMgPSBtYXhfc2VnbWVudHM7CiB9Ci1FWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyk7Ci0KLS8qKgotICogYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyAtIHNldCBtYXggaHcgc2VnbWVudHMgZm9yIGEgcmVxdWVzdCBmb3IgdGhpcyBxdWV1ZQotICogQHE6ICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQotICogQG1heF9zZWdtZW50czogIG1heCBudW1iZXIgb2Ygc2VnbWVudHMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIEVuYWJsZXMgYSBsb3cgbGV2ZWwgZHJpdmVyIHRvIHNldCBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mCi0gKiAgICBodyBkYXRhIHNlZ21lbnRzIGluIGEgcmVxdWVzdC4gIFRoaXMgd291bGQgYmUgdGhlIGxhcmdlc3QgbnVtYmVyIG9mCi0gKiAgICBhZGRyZXNzL2xlbmd0aCBwYWlycyB0aGUgaG9zdCBhZGFwdGVyIGNhbiBhY3R1YWxseSBnaXZlIGF0IG9uY2UKLSAqICAgIHRvIHRoZSBkZXZpY2UuCi0gKiovCi12b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3NlZ21lbnRzKQotewotCWlmICghbWF4X3NlZ21lbnRzKSB7Ci0JCW1heF9zZWdtZW50cyA9IDE7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgdG8gbWluaW11bSAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBtYXhfc2VnbWVudHMpOwotCX0KLQotCXEtPmxpbWl0cy5tYXhfaHdfc2VnbWVudHMgPSBtYXhfc2VnbWVudHM7Ci19Ci1FWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMpOworRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X3NlZ21lbnRzKTsKIAogLyoqCiAgKiBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSAtIHNldCBtYXggc2VnbWVudCBzaXplIGZvciBibGtfcnFfbWFwX3NnCkBAIC01MDcsNyArNDc1LDcgQEAKICAqIGJsa19zdGFja19saW1pdHMgLSBhZGp1c3QgcXVldWVfbGltaXRzIGZvciBzdGFja2VkIGRldmljZXMKICAqIEB0Ogl0aGUgc3RhY2tpbmcgZHJpdmVyIGxpbWl0cyAodG9wIGRldmljZSkKICAqIEBiOiAgdGhlIHVuZGVybHlpbmcgcXVldWUgbGltaXRzIChib3R0b20sIGNvbXBvbmVudCBkZXZpY2UpCi0gKiBAb2Zmc2V0OiAgb2Zmc2V0IHRvIGJlZ2lubmluZyBvZiBkYXRhIHdpdGhpbiBjb21wb25lbnQgZGV2aWNlCisgKiBAc3RhcnQ6ICBmaXJzdCBkYXRhIHNlY3RvciB3aXRoaW4gY29tcG9uZW50IGRldmljZQogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHN0YWNraW5nIGRyaXZlcnMgbGlrZSBNRCBhbmQgRE0gdG8gZW5zdXJlCkBAIC01MjUsMTAgKzQ5Myw5IEBACiAgKiAgICB0aGUgYWxpZ25tZW50X29mZnNldCBpcyB1bmRlZmluZWQuCiAgKi8KIGludCBibGtfc3RhY2tfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKnQsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmIsCi0JCSAgICAgc2VjdG9yX3Qgb2Zmc2V0KQorCQkgICAgIHNlY3Rvcl90IHN0YXJ0KQogewotCXNlY3Rvcl90IGFsaWdubWVudDsKLQl1bnNpZ25lZCBpbnQgdG9wLCBib3R0b20sIHJldCA9IDA7CisJdW5zaWduZWQgaW50IHRvcCwgYm90dG9tLCBhbGlnbm1lbnQsIHJldCA9IDA7CiAKIAl0LT5tYXhfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VjdG9ycywgYi0+bWF4X3NlY3RvcnMpOwogCXQtPm1heF9od19zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9od19zZWN0b3JzLCBiLT5tYXhfaHdfc2VjdG9ycyk7CkBAIC01MzcsMTggKzUwNCwxNCBAQAogCXQtPnNlZ19ib3VuZGFyeV9tYXNrID0gbWluX25vdF96ZXJvKHQtPnNlZ19ib3VuZGFyeV9tYXNrLAogCQkJCQkgICAgYi0+c2VnX2JvdW5kYXJ5X21hc2spOwogCi0JdC0+bWF4X3BoeXNfc2VnbWVudHMgPSBtaW5fbm90X3plcm8odC0+bWF4X3BoeXNfc2VnbWVudHMsCi0JCQkJCSAgICBiLT5tYXhfcGh5c19zZWdtZW50cyk7Ci0KLQl0LT5tYXhfaHdfc2VnbWVudHMgPSBtaW5fbm90X3plcm8odC0+bWF4X2h3X3NlZ21lbnRzLAotCQkJCQkgIGItPm1heF9od19zZWdtZW50cyk7CisJdC0+bWF4X3NlZ21lbnRzID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWdtZW50cywgYi0+bWF4X3NlZ21lbnRzKTsKIAogCXQtPm1heF9zZWdtZW50X3NpemUgPSBtaW5fbm90X3plcm8odC0+bWF4X3NlZ21lbnRfc2l6ZSwKIAkJCQkJICAgYi0+bWF4X3NlZ21lbnRfc2l6ZSk7CiAKIAl0LT5taXNhbGlnbmVkIHw9IGItPm1pc2FsaWduZWQ7CiAKLQlhbGlnbm1lbnQgPSBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KGIsIG9mZnNldCk7CisJYWxpZ25tZW50ID0gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldChiLCBzdGFydCk7CiAKIAkvKiBCb3R0b20gZGV2aWNlIGhhcyBkaWZmZXJlbnQgYWxpZ25tZW50LiAgQ2hlY2sgdGhhdCBpdCBpcwogCSAqIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB0b3AgYWxpZ25tZW50LgpAQCAtNjExLDExICs1NzQsNyBAQAogCiAJLyogRGlzY2FyZCBhbGlnbm1lbnQgYW5kIGdyYW51bGFyaXR5ICovCiAJaWYgKGItPmRpc2NhcmRfZ3JhbnVsYXJpdHkpIHsKLQkJdW5zaWduZWQgaW50IGdyYW51bGFyaXR5ID0gYi0+ZGlzY2FyZF9ncmFudWxhcml0eTsKLQkJb2Zmc2V0ICY9IGdyYW51bGFyaXR5IC0gMTsKLQotCQlhbGlnbm1lbnQgPSAoZ3JhbnVsYXJpdHkgKyBiLT5kaXNjYXJkX2FsaWdubWVudCAtIG9mZnNldCkKLQkJCSYgKGdyYW51bGFyaXR5IC0gMSk7CisJCWFsaWdubWVudCA9IHF1ZXVlX2xpbWl0X2Rpc2NhcmRfYWxpZ25tZW50KGIsIHN0YXJ0KTsKIAogCQlpZiAodC0+ZGlzY2FyZF9ncmFudWxhcml0eSAhPSAwICYmCiAJCSAgICB0LT5kaXNjYXJkX2FsaWdubWVudCAhPSBhbGlnbm1lbnQpIHsKQEAgLTY1Nyw3ICs2MTYsNyBAQAogCiAJc3RhcnQgKz0gZ2V0X3N0YXJ0X3NlY3QoYmRldik7CiAKLQlyZXR1cm4gYmxrX3N0YWNrX2xpbWl0cyh0LCAmYnEtPmxpbWl0cywgc3RhcnQgPDwgOSk7CisJcmV0dXJuIGJsa19zdGFja19saW1pdHModCwgJmJxLT5saW1pdHMsIHN0YXJ0KTsKIH0KIEVYUE9SVF9TWU1CT0woYmRldl9zdGFja19saW1pdHMpOwogCkBAIC02NjgsOSArNjI3LDggQEAKICAqIEBvZmZzZXQ6ICBvZmZzZXQgdG8gYmVnaW5uaW5nIG9mIGRhdGEgd2l0aGluIGNvbXBvbmVudCBkZXZpY2UKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgIE1lcmdlcyB0aGUgbGltaXRzIGZvciB0d28gcXVldWVzLiAgUmV0dXJucyAwIGlmIGFsaWdubWVudAotICogICAgZGlkbid0IGNoYW5nZS4gIFJldHVybnMgLTEgaWYgYWRkaW5nIHRoZSBib3R0b20gZGV2aWNlIGNhdXNlZAotICogICAgbWlzYWxpZ25tZW50LgorICogICAgTWVyZ2VzIHRoZSBsaW1pdHMgZm9yIGEgdG9wIGxldmVsIGdlbmRpc2sgYW5kIGEgYm90dG9tIGxldmVsCisgKiAgICBibG9ja19kZXZpY2UuCiAgKi8KIHZvaWQgZGlza19zdGFja19saW1pdHMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCSAgICAgICBzZWN0b3JfdCBvZmZzZXQpCkBAIC02NzgsOSArNjM2LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqdCA9IGRpc2stPnF1ZXVlOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpiID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAKLQlvZmZzZXQgKz0gZ2V0X3N0YXJ0X3NlY3QoYmRldikgPDwgOTsKLQotCWlmIChibGtfc3RhY2tfbGltaXRzKCZ0LT5saW1pdHMsICZiLT5saW1pdHMsIG9mZnNldCkgPCAwKSB7CisJaWYgKGJkZXZfc3RhY2tfbGltaXRzKCZ0LT5saW1pdHMsIGJkZXYsIG9mZnNldCA+PiA5KSA8IDApIHsKIAkJY2hhciB0b3BbQkRFVk5BTUVfU0laRV0sIGJvdHRvbVtCREVWTkFNRV9TSVpFXTsKIAogCQlkaXNrX25hbWUoZGlzaywgMCwgdG9wKTsKQEAgLTc1MiwyMiArNzA4LDE5IEBACiAgKiBkb2VzIGlzIGFkanVzdCB0aGUgcXVldWUgc28gdGhhdCB0aGUgYnVmIGlzIGFsd2F5cyBhcHBlbmRlZAogICogc2lsZW50bHkgdG8gdGhlIHNjYXR0ZXJsaXN0LgogICoKLSAqIE5vdGU6IFRoaXMgcm91dGluZSBhZGp1c3RzIG1heF9od19zZWdtZW50cyB0byBtYWtlIHJvb20gZm9yCi0gKiBhcHBlbmRpbmcgdGhlIGRyYWluIGJ1ZmZlci4gIElmIHlvdSBjYWxsCi0gKiBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKCkgb3IgYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKCkgYWZ0ZXIKLSAqIGNhbGxpbmcgdGhpcyByb3V0aW5lLCB5b3UgbXVzdCBzZXQgdGhlIGxpbWl0IHRvIG9uZSBmZXdlciB0aGFuIHlvdXIKLSAqIGRldmljZSBjYW4gc3VwcG9ydCBvdGhlcndpc2UgdGhlcmUgd29uJ3QgYmUgcm9vbSBmb3IgdGhlIGRyYWluCi0gKiBidWZmZXIuCisgKiBOb3RlOiBUaGlzIHJvdXRpbmUgYWRqdXN0cyBtYXhfaHdfc2VnbWVudHMgdG8gbWFrZSByb29tIGZvciBhcHBlbmRpbmcKKyAqIHRoZSBkcmFpbiBidWZmZXIuICBJZiB5b3UgY2FsbCBibGtfcXVldWVfbWF4X3NlZ21lbnRzKCkgYWZ0ZXIgY2FsbGluZworICogdGhpcyByb3V0aW5lLCB5b3UgbXVzdCBzZXQgdGhlIGxpbWl0IHRvIG9uZSBmZXdlciB0aGFuIHlvdXIgZGV2aWNlCisgKiBjYW4gc3VwcG9ydCBvdGhlcndpc2UgdGhlcmUgd29uJ3QgYmUgcm9vbSBmb3IgdGhlIGRyYWluIGJ1ZmZlci4KICAqLwogaW50IGJsa19xdWV1ZV9kbWFfZHJhaW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkgICAgICAgZG1hX2RyYWluX25lZWRlZF9mbiAqZG1hX2RyYWluX25lZWRlZCwKIAkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKQogewotCWlmIChxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkgPCAyIHx8IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpIDwgMikKKwlpZiAocXVldWVfbWF4X3NlZ21lbnRzKHEpIDwgMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogbWFrZSByb29tIGZvciBhcHBlbmRpbmcgdGhlIGRyYWluICovCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkgLSAxKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkgLSAxKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIHF1ZXVlX21heF9zZWdtZW50cyhxKSAtIDEpOwogCXEtPmRtYV9kcmFpbl9uZWVkZWQgPSBkbWFfZHJhaW5fbmVlZGVkOwogCXEtPmRtYV9kcmFpbl9idWZmZXIgPSBidWY7CiAJcS0+ZG1hX2RyYWluX3NpemUgPSBzaXplOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCA4NjA2Yzk1Li5lODU0NDI0MSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTE4OSw3ICsxODksOCBAQAogCiBzdGF0aWMgc3NpemVfdCBxdWV1ZV9ub21lcmdlc19zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQogewotCXJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfbm9tZXJnZXMocSksIHBhZ2UpOworCXJldHVybiBxdWV1ZV92YXJfc2hvdygoYmxrX3F1ZXVlX25vbWVyZ2VzKHEpIDw8IDEpIHwKKwkJCSAgICAgICBibGtfcXVldWVfbm94bWVyZ2VzKHEpLCBwYWdlKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcXVldWVfbm9tZXJnZXNfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2UsCkBAIC0xOTksMTAgKzIwMCwxMiBAQAogCXNzaXplX3QgcmV0ID0gcXVldWVfdmFyX3N0b3JlKCZubSwgcGFnZSwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlpZiAobm0pCisJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX05PTUVSR0VTLCBxKTsKKwlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9YTUVSR0VTLCBxKTsKKwlpZiAobm0gPT0gMikKIAkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19OT01FUkdFUywgcSk7Ci0JZWxzZQotCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9NRVJHRVMsIHEpOworCWVsc2UgaWYgKG5tKQorCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX05PWE1FUkdFUywgcSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDAyM2Y0ZTYuLmRlZTlkOTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTksNyArMTksNyBAQAogICogdHVuYWJsZXMKICAqLwogLyogbWF4IHF1ZXVlIGluIG9uZSByb3VuZCBvZiBzZXJ2aWNlICovCi1zdGF0aWMgY29uc3QgaW50IGNmcV9xdWFudHVtID0gNDsKK3N0YXRpYyBjb25zdCBpbnQgY2ZxX3F1YW50dW0gPSA4Owogc3RhdGljIGNvbnN0IGludCBjZnFfZmlmb19leHBpcmVbMl0gPSB7IEhaIC8gNCwgSFogLyA4IH07CiAvKiBtYXhpbXVtIGJhY2t3YXJkcyBzZWVrLCBpbiBLaUIgKi8KIHN0YXRpYyBjb25zdCBpbnQgY2ZxX2JhY2tfbWF4ID0gMTYgKiAxMDI0OwpAQCAtNDYsOCArNDYsOSBAQAogI2RlZmluZSBDRlFfSFdfUVVFVUVfTUlOCSg1KQogI2RlZmluZSBDRlFfU0VSVklDRV9TSElGVCAgICAgICAxMgogCi0jZGVmaW5lIENGUVFfU0VFS19USFIJCTggKiAxMDI0Ci0jZGVmaW5lIENGUVFfU0VFS1koY2ZxcSkJKChjZnFxKS0+c2Vla19tZWFuID4gQ0ZRUV9TRUVLX1RIUikKKyNkZWZpbmUgQ0ZRUV9TRUVLX1RIUgkJKHNlY3Rvcl90KSg4ICogMTAwKQorI2RlZmluZSBDRlFRX1NFQ1RfVEhSX05PTlJPVAkoc2VjdG9yX3QpKDIgKiAzMikKKyNkZWZpbmUgQ0ZRUV9TRUVLWShjZnFxKQkoaHdlaWdodDMyKGNmcXEtPnNlZWtfaGlzdG9yeSkgPiAzMi84KQogCiAjZGVmaW5lIFJRX0NJQyhycSkJCVwKIAkoKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqKSAocnEpLT5lbGV2YXRvcl9wcml2YXRlKQpAQCAtNzcsMTEgKzc4LDEyIEBACiAJc3RydWN0IHJiX3Jvb3QgcmI7CiAJc3RydWN0IHJiX25vZGUgKmxlZnQ7CiAJdW5zaWduZWQgY291bnQ7CisJdW5zaWduZWQgdG90YWxfd2VpZ2h0OwogCXU2NCBtaW5fdmRpc2t0aW1lOwogCXN0cnVjdCByYl9ub2RlICphY3RpdmU7Ci0JdW5zaWduZWQgdG90YWxfd2VpZ2h0OwogfTsKLSNkZWZpbmUgQ0ZRX1JCX1JPT1QJKHN0cnVjdCBjZnFfcmJfcm9vdCkgeyBSQl9ST09ULCBOVUxMLCAwLCAwLCB9CisjZGVmaW5lIENGUV9SQl9ST09UCShzdHJ1Y3QgY2ZxX3JiX3Jvb3QpIHsgLnJiID0gUkJfUk9PVCwgLmxlZnQgPSBOVUxMLCBcCisJCQkuY291bnQgPSAwLCAubWluX3ZkaXNrdGltZSA9IDAsIH0KIAogLyoKICAqIFBlciBwcm9jZXNzLWdyb3VwaW5nIHN0cnVjdHVyZQpAQCAtMTE1LDExICsxMTcsMTEgQEAKIAkvKiB0aW1lIHdoZW4gcXVldWUgZ290IHNjaGVkdWxlZCBpbiB0byBkaXNwYXRjaCBmaXJzdCByZXF1ZXN0LiAqLwogCXVuc2lnbmVkIGxvbmcgZGlzcGF0Y2hfc3RhcnQ7CiAJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9zbGljZTsKKwl1bnNpZ25lZCBpbnQgc2xpY2VfZGlzcGF0Y2g7CiAJLyogdGltZSB3aGVuIGZpcnN0IHJlcXVlc3QgZnJvbSBxdWV1ZSBjb21wbGV0ZWQgYW5kIHNsaWNlIHN0YXJ0ZWQuICovCiAJdW5zaWduZWQgbG9uZyBzbGljZV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHNsaWNlX2VuZDsKIAlsb25nIHNsaWNlX3Jlc2lkOwotCXVuc2lnbmVkIGludCBzbGljZV9kaXNwYXRjaDsKIAogCS8qIHBlbmRpbmcgbWV0YWRhdGEgcmVxdWVzdHMgKi8KIAlpbnQgbWV0YV9wZW5kaW5nOwpAQCAtMTMwLDEzICsxMzIsMTEgQEAKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW8sIG9yZ19pb3ByaW87CiAJdW5zaWduZWQgc2hvcnQgaW9wcmlvX2NsYXNzLCBvcmdfaW9wcmlvX2NsYXNzOwogCi0JdW5zaWduZWQgaW50IHNlZWtfc2FtcGxlczsKLQl1NjQgc2Vla190b3RhbDsKLQlzZWN0b3JfdCBzZWVrX21lYW47Ci0Jc2VjdG9yX3QgbGFzdF9yZXF1ZXN0X3BvczsKLQogCXBpZF90IHBpZDsKIAorCXUzMiBzZWVrX2hpc3Rvcnk7CisJc2VjdG9yX3QgbGFzdF9yZXF1ZXN0X3BvczsKKwogCXN0cnVjdCBjZnFfcmJfcm9vdCAqc2VydmljZV90cmVlOwogCXN0cnVjdCBjZnFfcXVldWUgKm5ld19jZnFxOwogCXN0cnVjdCBjZnFfZ3JvdXAgKmNmcWc7CkBAIC0yMjMsOCArMjIzLDggQEAKIAogCXVuc2lnbmVkIGludCBidXN5X3F1ZXVlczsKIAotCWludCBycV9pbl9kcml2ZXJbMl07Ci0JaW50IHN5bmNfZmxpZ2h0OworCWludCBycV9pbl9kcml2ZXI7CisJaW50IHJxX2luX2ZsaWdodFsyXTsKIAogCS8qCiAJICogcXVldWUtZGVwdGggZGV0ZWN0aW9uCkBAIC00MTcsMTEgKzQxNyw2IEBACiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjZnFfY2ljX2xvb2t1cChzdHJ1Y3QgY2ZxX2RhdGEgKiwKIAkJCQkJCXN0cnVjdCBpb19jb250ZXh0ICopOwogCi1zdGF0aWMgaW5saW5lIGludCBycV9pbl9kcml2ZXIoc3RydWN0IGNmcV9kYXRhICpjZnFkKQotewotCXJldHVybiBjZnFkLT5ycV9pbl9kcml2ZXJbMF0gKyBjZnFkLT5ycV9pbl9kcml2ZXJbMV07Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9xdWV1ZSAqY2ljX3RvX2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCiAJCQkJCSAgICBib29sIGlzX3N5bmMpCiB7CkBAIC05NTEsMTAgKzk0Niw2IEBACiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9ICZjZnFkLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mbzsKIAl1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yOwogCi0JLyogRG8gd2UgbmVlZCB0byB0YWtlIHRoaXMgcmVmZXJlbmNlICovCi0JaWYgKCFibGtpb2NnX2Nzc190cnlnZXQoYmxrY2cpKQotCQlyZXR1cm4gTlVMTDs7Ci0KIAljZnFnID0gY2ZxZ19vZl9ibGtnKGJsa2lvY2dfbG9va3VwX2dyb3VwKGJsa2NnLCBrZXkpKTsKIAlpZiAoY2ZxZyB8fCAhY3JlYXRlKQogCQlnb3RvIGRvbmU7CkBAIC05ODUsNyArOTc2LDYgQEAKIAlobGlzdF9hZGRfaGVhZCgmY2ZxZy0+Y2ZxZF9ub2RlLCAmY2ZxZC0+Y2ZxZ19saXN0KTsKIAogZG9uZToKLQlibGtpb2NnX2Nzc19wdXQoYmxrY2cpOwogCXJldHVybiBjZnFnOwogfQogCkBAIC0xNDIwLDkgKzE0MTAsOSBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCi0JY2ZxZC0+cnFfaW5fZHJpdmVyW3JxX2lzX3N5bmMocnEpXSsrOworCWNmcWQtPnJxX2luX2RyaXZlcisrOwogCWNmcV9sb2dfY2ZxcShjZnFkLCBSUV9DRlFRKHJxKSwgImFjdGl2YXRlIHJxLCBkcnY9JWQiLAotCQkJCQkJcnFfaW5fZHJpdmVyKGNmcWQpKTsKKwkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CiAKIAljZnFkLT5sYXN0X3Bvc2l0aW9uID0gYmxrX3JxX3BvcyhycSkgKyBibGtfcnFfc2VjdG9ycyhycSk7CiB9CkBAIC0xNDMwLDEyICsxNDIwLDExIEBACiBzdGF0aWMgdm9pZCBjZnFfZGVhY3RpdmF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0JY29uc3QgaW50IHN5bmMgPSBycV9pc19zeW5jKHJxKTsKIAotCVdBUk5fT04oIWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXSk7Ci0JY2ZxZC0+cnFfaW5fZHJpdmVyW3N5bmNdLS07CisJV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKKwljZnFkLT5ycV9pbl9kcml2ZXItLTsKIAljZnFfbG9nX2NmcXEoY2ZxZCwgUlFfQ0ZRUShycSksICJkZWFjdGl2YXRlIHJxLCBkcnY9JWQiLAotCQkJCQkJcnFfaW5fZHJpdmVyKGNmcWQpKTsKKwkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCkBAIC0xNjczLDE2ICsxNjYyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGNmcV9ycV9jbG9zZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCiAJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGZvcl9wcmVlbXB0KQogewotCXNlY3Rvcl90IHNkaXN0ID0gY2ZxcS0+c2Vla19tZWFuOwotCi0JaWYgKCFzYW1wbGVfdmFsaWQoY2ZxcS0+c2Vla19zYW1wbGVzKSkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JLyogaWYgc2Vla19tZWFuIGlzIGJpZywgdXNpbmcgaXQgYXMgY2xvc2UgY3JpdGVyaWEgaXMgbWVhbmluZ2xlc3MgKi8KLQlpZiAoc2Rpc3QgPiBDRlFRX1NFRUtfVEhSICYmICFmb3JfcHJlZW1wdCkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gc2Rpc3Q7CisJcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gQ0ZRUV9TRUVLX1RIUjsKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcXFfY2xvc2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLApAQCAtMTg3OCw4ICsxODU4LDcgQEAKIAljZnFxLT5kaXNwYXRjaGVkKys7CiAJZWx2X2Rpc3BhdGNoX3NvcnQocSwgcnEpOwogCi0JaWYgKGNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCWNmcWQtPnN5bmNfZmxpZ2h0Kys7CisJY2ZxZC0+cnFfaW5fZmxpZ2h0W2NmcV9jZnFxX3N5bmMoY2ZxcSldKys7CiAJY2ZxcS0+bnJfc2VjdG9ycyArPSBibGtfcnFfc2VjdG9ycyhycSk7CiB9CiAKQEAgLTIyMTksNiArMjE5OCwxOSBAQAogCXJldHVybiBkaXNwYXRjaGVkOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX3NsaWNlX3VzZWRfc29vbihzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3sKKwkvKiB0aGUgcXVldWUgaGFzbid0IGZpbmlzaGVkIGFueSByZXF1ZXN0LCBjYW4ndCBlc3RpbWF0ZSAqLworCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCisJCXJldHVybiAxOworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMgKyBjZnFkLT5jZnFfc2xpY2VfaWRsZSAqIGNmcXEtPmRpc3BhdGNoZWQsCisJCWNmcXEtPnNsaWNlX2VuZCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBib29sIGNmcV9tYXlfZGlzcGF0Y2goc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXVuc2lnbmVkIGludCBtYXhfZGlzcGF0Y2g7CkBAIC0yMjI2LDE2ICsyMjE4LDE2IEBACiAJLyoKIAkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTwogCSAqLwotCWlmIChjZnFfc2hvdWxkX2lkbGUoY2ZxZCwgY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJaWYgKGNmcV9zaG91bGRfaWRsZShjZnFkLCBjZnFxKSAmJiBjZnFkLT5ycV9pbl9mbGlnaHRbQkxLX1JXX0FTWU5DXSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAogCSAqLwotCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwlpZiAoY2ZxZC0+cnFfaW5fZmxpZ2h0W0JMS19SV19TWU5DXSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CisJbWF4X2Rpc3BhdGNoID0gbWF4X3QodW5zaWduZWQgaW50LCBjZnFkLT5jZnFfcXVhbnR1bSAvIDIsIDEpOwogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKIAkJbWF4X2Rpc3BhdGNoID0gMTsKIApAQCAtMjI1MiwxMyArMjI0NCwyMiBAQAogCQkvKgogCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCiAJCSAqLwotCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQorCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxICYmIGNmcV9zbGljZV91c2VkX3Nvb24oY2ZxZCwgY2ZxcSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJLyoKIAkJICogU29sZSBxdWV1ZSB1c2VyLCBubyBsaW1pdAogCQkgKi8KLQkJbWF4X2Rpc3BhdGNoID0gLTE7CisJCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA9PSAxKQorCQkJbWF4X2Rpc3BhdGNoID0gLTE7CisJCWVsc2UKKwkJCS8qCisJCQkgKiBOb3JtYWxseSB3ZSBzdGFydCB0aHJvdHRsaW5nIGNmcXEgd2hlbiBjZnFfcXVhbnR1bS8yCisJCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZC4gQnV0IHdlIGNhbiBkcml2ZQorCQkJICogZGVlcGVyIHF1ZXVlIGRlcHRocyBhdCB0aGUgYmVnaW5uaW5nIG9mIHNsaWNlCisJCQkgKiBzdWJqZWN0ZWQgdG8gdXBwZXIgbGltaXQgb2YgY2ZxX3F1YW50dW0uCisJCQkgKiAqLworCQkJbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CiAJfQogCiAJLyoKQEAgLTI5ODAsMzAgKzI5ODEsMjAgQEAKIGNmcV91cGRhdGVfaW9fc2Vla3RpbWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAogCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXNlY3Rvcl90IHNkaXN0OwotCXU2NCB0b3RhbDsKKwlzZWN0b3JfdCBzZGlzdCA9IDA7CisJc2VjdG9yX3Qgbl9zZWMgPSBibGtfcnFfc2VjdG9ycyhycSk7CisJaWYgKGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MpIHsKKwkJaWYgKGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgPCBibGtfcnFfcG9zKHJxKSkKKwkJCXNkaXN0ID0gYmxrX3JxX3BvcyhycSkgLSBjZnFxLT5sYXN0X3JlcXVlc3RfcG9zOworCQllbHNlCisJCQlzZGlzdCA9IGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgLSBibGtfcnFfcG9zKHJxKTsKKwl9CiAKLQlpZiAoIWNmcXEtPmxhc3RfcmVxdWVzdF9wb3MpCi0JCXNkaXN0ID0gMDsKLQllbHNlIGlmIChjZnFxLT5sYXN0X3JlcXVlc3RfcG9zIDwgYmxrX3JxX3BvcyhycSkpCi0JCXNkaXN0ID0gYmxrX3JxX3BvcyhycSkgLSBjZnFxLT5sYXN0X3JlcXVlc3RfcG9zOworCWNmcXEtPnNlZWtfaGlzdG9yeSA8PD0gMTsKKwlpZiAoYmxrX3F1ZXVlX25vbnJvdChjZnFkLT5xdWV1ZSkpCisJCWNmcXEtPnNlZWtfaGlzdG9yeSB8PSAobl9zZWMgPCBDRlFRX1NFQ1RfVEhSX05PTlJPVCk7CiAJZWxzZQotCQlzZGlzdCA9IGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgLSBibGtfcnFfcG9zKHJxKTsKLQotCS8qCi0JICogRG9uJ3QgYWxsb3cgdGhlIHNlZWsgZGlzdGFuY2UgdG8gZ2V0IHRvbyBsYXJnZSBmcm9tIHRoZQotCSAqIG9kZCBmcmFnbWVudCwgcGFnZWluLCBldGMKLQkgKi8KLQlpZiAoY2ZxcS0+c2Vla19zYW1wbGVzIDw9IDYwKSAvKiBzZWNvbmQmdGhpcmQgc2VlayAqLwotCQlzZGlzdCA9IG1pbihzZGlzdCwgKGNmcXEtPnNlZWtfbWVhbiAqIDQpICsgMioxMDI0KjEwMjQpOwotCWVsc2UKLQkJc2Rpc3QgPSBtaW4oc2Rpc3QsIChjZnFxLT5zZWVrX21lYW4gKiA0KSArIDIqMTAyNCo2NCk7Ci0KLQljZnFxLT5zZWVrX3NhbXBsZXMgPSAoNypjZnFxLT5zZWVrX3NhbXBsZXMgKyAyNTYpIC8gODsKLQljZnFxLT5zZWVrX3RvdGFsID0gKDcqY2ZxcS0+c2Vla190b3RhbCArICh1NjQpMjU2KnNkaXN0KSAvIDg7Ci0JdG90YWwgPSBjZnFxLT5zZWVrX3RvdGFsICsgKGNmcXEtPnNlZWtfc2FtcGxlcy8yKTsKLQlkb19kaXYodG90YWwsIGNmcXEtPnNlZWtfc2FtcGxlcyk7Ci0JY2ZxcS0+c2Vla19tZWFuID0gKHNlY3Rvcl90KXRvdGFsOworCQljZnFxLT5zZWVrX2hpc3RvcnkgfD0gKHNkaXN0ID4gQ0ZRUV9TRUVLX1RIUik7CiB9CiAKIC8qCkBAIC0zMDI4LDggKzMwMTksNyBAQAogCQljZnFfbWFya19jZnFxX2RlZXAoY2ZxcSk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZjaWMtPmlvYy0+bnJfdGFza3MpIHx8ICFjZnFkLT5jZnFfc2xpY2VfaWRsZSB8fAotCSAgICAoIWNmcV9jZnFxX2RlZXAoY2ZxcSkgJiYgc2FtcGxlX3ZhbGlkKGNmcXEtPnNlZWtfc2FtcGxlcykKLQkgICAgICYmIENGUVFfU0VFS1koY2ZxcSkpKQorCSAgICAoIWNmcV9jZnFxX2RlZXAoY2ZxcSkgJiYgQ0ZRUV9TRUVLWShjZnFxKSkpCiAJCWVuYWJsZV9pZGxlID0gMDsKIAllbHNlIGlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSkgewogCQlpZiAoY2ljLT50dGltZV9tZWFuID4gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCkBAIC0zMjE1LDE0ICszMjA1LDE0IEBACiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIAotCWlmIChycV9pbl9kcml2ZXIoY2ZxZCkgPiBjZnFkLT5od190YWdfZXN0X2RlcHRoKQotCQljZnFkLT5od190YWdfZXN0X2RlcHRoID0gcnFfaW5fZHJpdmVyKGNmcWQpOworCWlmIChjZnFkLT5ycV9pbl9kcml2ZXIgPiBjZnFkLT5od190YWdfZXN0X2RlcHRoKQorCQljZnFkLT5od190YWdfZXN0X2RlcHRoID0gY2ZxZC0+cnFfaW5fZHJpdmVyOwogCiAJaWYgKGNmcWQtPmh3X3RhZyA9PSAxKQogCQlyZXR1cm47CiAKIAlpZiAoY2ZxZC0+cnFfcXVldWVkIDw9IENGUV9IV19RVUVVRV9NSU4gJiYKLQkgICAgcnFfaW5fZHJpdmVyKGNmcWQpIDw9IENGUV9IV19RVUVVRV9NSU4pCisJICAgIGNmcWQtPnJxX2luX2RyaXZlciA8PSBDRlFfSFdfUVVFVUVfTUlOKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMzIzMiw3ICszMjIyLDcgQEAKIAkgKi8KIAlpZiAoY2ZxcSAmJiBjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJgogCSAgICBjZnFxLT5kaXNwYXRjaGVkICsgY2ZxcS0+cXVldWVkWzBdICsgY2ZxcS0+cXVldWVkWzFdIDwKLQkgICAgQ0ZRX0hXX1FVRVVFX01JTiAmJiBycV9pbl9kcml2ZXIoY2ZxZCkgPCBDRlFfSFdfUVVFVUVfTUlOKQorCSAgICBDRlFfSFdfUVVFVUVfTUlOICYmIGNmcWQtPnJxX2luX2RyaXZlciA8IENGUV9IV19RVUVVRV9NSU4pCiAJCXJldHVybjsKIAogCWlmIChjZnFkLT5od190YWdfc2FtcGxlcysrIDwgNTApCkBAIC0zMjg1LDEzICszMjc1LDEyIEBACiAKIAljZnFfdXBkYXRlX2h3X3RhZyhjZnFkKTsKIAotCVdBUk5fT04oIWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXSk7CisJV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKIAlXQVJOX09OKCFjZnFxLT5kaXNwYXRjaGVkKTsKLQljZnFkLT5ycV9pbl9kcml2ZXJbc3luY10tLTsKKwljZnFkLT5ycV9pbl9kcml2ZXItLTsKIAljZnFxLT5kaXNwYXRjaGVkLS07CiAKLQlpZiAoY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJY2ZxZC0+c3luY19mbGlnaHQtLTsKKwljZnFkLT5ycV9pbl9mbGlnaHRbY2ZxX2NmcXFfc3luYyhjZnFxKV0tLTsKIAogCWlmIChzeW5jKSB7CiAJCVJRX0NJQyhycSktPmxhc3RfZW5kX3JlcXVlc3QgPSBub3c7CkBAIC0zMzQ1LDcgKzMzMzQsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFycV9pbl9kcml2ZXIoY2ZxZCkpCisJaWYgKCFjZnFkLT5ycV9pbl9kcml2ZXIpCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggOWFkNWNjYy4uZWUzYTg4MyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC00NzQsNiArNDc0LDE1IEBACiAJaW50IHJldDsKIAogCS8qCisJICogTGV2ZWxzIG9mIG1lcmdlczoKKwkgKiAJbm9tZXJnZXM6ICBObyBtZXJnZXMgYXQgYWxsIGF0dGVtcHRlZAorCSAqIAlub3htZXJnZXM6IE9ubHkgc2ltcGxlIG9uZS1oaXQgY2FjaGUgdHJ5CisJICogCW1lcmdlczoJICAgQWxsIG1lcmdlIHRyaWVzIGF0dGVtcHRlZAorCSAqLworCWlmIChibGtfcXVldWVfbm9tZXJnZXMocSkpCisJCXJldHVybiBFTEVWQVRPUl9OT19NRVJHRTsKKworCS8qCiAJICogRmlyc3QgdHJ5IG9uZS1oaXQgY2FjaGUuCiAJICovCiAJaWYgKHEtPmxhc3RfbWVyZ2UpIHsKQEAgLTQ4NCw3ICs0OTMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub21lcmdlcyhxKSkKKwlpZiAoYmxrX3F1ZXVlX25veG1lcmdlcyhxKSkKIAkJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwogCiAJLyoKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggODFjMTg1YTYuLjZhMmUyOTUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC0xMTQsNiArMTE0LDE2IEBACiAJaGVscAogCSAgVGhlc2UgYXJlICdOdWxsJyBhbGdvcml0aG1zLCB1c2VkIGJ5IElQc2VjLCB3aGljaCBkbyBub3RoaW5nLgogCitjb25maWcgQ1JZUFRPX1BDUllQVAorCXRyaXN0YXRlICJQYXJhbGxlbCBjcnlwdG8gZW5naW5lIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gU01QICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBQQURBVEEKKwlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwlzZWxlY3QgQ1JZUFRPX0FFQUQKKwloZWxwCisJICBUaGlzIGNvbnZlcnRzIGFuIGFyYml0cmFyeSBjcnlwdG8gYWxnb3JpdGhtIGludG8gYSBwYXJhbGxlbAorCSAgYWxnb3JpdGhtIHRoYXQgZXhlY3V0ZXMgaW4ga2VybmVsIHRocmVhZHMuCisKIGNvbmZpZyBDUllQVE9fV09SS1FVRVVFCiAgICAgICAgdHJpc3RhdGUKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDllOGY2MTkuLmQ3ZTY0NDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTU2LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fQ1RSKSArPSBjdHIubwogb2JqLSQoQ09ORklHX0NSWVBUT19HQ00pICs9IGdjbS5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NDTSkgKz0gY2NtLm8KK29iai0kKENPTkZJR19DUllQVE9fUENSWVBUKSArPSBwY3J5cHQubwogb2JqLSQoQ09ORklHX0NSWVBUT19DUllQVEQpICs9IGNyeXB0ZC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFUykgKz0gZGVzX2dlbmVyaWMubwogb2JqLSQoQ09ORklHX0NSWVBUT19GQ1JZUFQpICs9IGZjcnlwdC5vCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCBmNmYwODMzLi5mZTk4MGRhIDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQXN5bmNocm9ub3VzIGJsb2NrIGNoYWluaW5nIGNpcGhlciBvcGVyYXRpb25zLgotICogCisgKgogICogVGhpcyBpcyB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gb2YgYmxrY2lwaGVyLmMgaW5kaWNhdGluZyBjb21wbGV0aW9uCiAgKiB2aWEgYSBjYWxsYmFjay4KICAqCkBAIC04LDcgKzgsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FlYWQuYyBiL2NyeXB0by9hZWFkLmMKaW5kZXggMGE1NWRhNy4uNjcyOWU4ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FlYWQuYworKysgYi9jcnlwdG8vYWVhZC5jCkBAIC0xLDEzICsxLDEzIEBACiAvKgogICogQUVBRDogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0gKiAKKyAqCiAgKiBUaGlzIGZpbGUgcHJvdmlkZXMgQVBJIHN1cHBvcnQgZm9yIEFFQUQgYWxnb3JpdGhtcy4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flc19nZW5lcmljLmMgYi9jcnlwdG8vYWVzX2dlbmVyaWMuYwppbmRleCBlNzhiN2VlLi5hNjhjNzNkIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzX2dlbmVyaWMuYworKysgYi9jcnlwdG8vYWVzX2dlbmVyaWMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIEFFUyBDaXBoZXIgQWxnb3JpdGhtLgpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKIAogI2RlZmluZSBzdGFyX3goeCkgKCgoeCkgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeICgoKCh4KSAmIDB4ODA4MDgwODApID4+IDcpICogMHgxYikKIAotI2RlZmluZSBpbWl4X2NvbCh5LHgpCWRvIHsJCVwKKyNkZWZpbmUgaW1peF9jb2woeSwgeCkJZG8gewkJXAogCXUJPSBzdGFyX3goeCk7CQlcCiAJdgk9IHN0YXJfeCh1KTsJCVwKIAl3CT0gc3Rhcl94KHYpOwkJXApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FsZ2FwaS5jIGIvY3J5cHRvL2FsZ2FwaS5jCmluZGV4IGYxNDliMWM4Li4zZTQ1MjRlIDEwMDY0NAotLS0gYS9jcnlwdG8vYWxnYXBpLmMKKysrIGIvY3J5cHRvL2FsZ2FwaS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlsaXN0X2FkZCgmYWxnLT5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CiAJbGlzdF9hZGQoJmxhcnZhbC0+YWxnLmNyYV9saXN0LCAmY3J5cHRvX2FsZ19saXN0KTsKIAotb3V0OgkKK291dDoKIAlyZXR1cm4gbGFydmFsOwogCiBmcmVlX2xhcnZhbDoKQEAgLTM4OCw3ICszODgsNyBAQAogewogCWludCByZXQ7CiAJTElTVF9IRUFEKGxpc3QpOwotCQorCiAJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwogCXJldCA9IGNyeXB0b19yZW1vdmVfYWxnKGFsZywgJmxpc3QpOwogCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYW51YmlzLmMgYi9jcnlwdG8vYW51YmlzLmMKaW5kZXggZTQyYzNhOC4uNzc1MzBkNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FudWJpcy5jCisrKyBiL2NyeXB0by9hbnViaXMuYwpAQCAtNDY5LDE0ICs0NjksMTMgQEAKIAl1MzIga2FwcGFbQU5VQklTX01BWF9OXTsKIAl1MzIgaW50ZXJbQU5VQklTX01BWF9OXTsKIAotCXN3aXRjaCAoa2V5X2xlbikKLQl7CisJc3dpdGNoIChrZXlfbGVuKSB7CiAJCWNhc2UgMTY6IGNhc2UgMjA6IGNhc2UgMjQ6IGNhc2UgMjg6CiAJCWNhc2UgMzI6IGNhc2UgMzY6IGNhc2UgNDA6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKLQkJCXJldHVybiAtIEVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWN0eC0+a2V5X2xlbiA9IGtleV9sZW4gKiA4OwpAQCAtNTMwLDIzICs1MjksMjQgQEAKIAkJLyoKIAkJICogY29tcHV0ZSBrYXBwYV57cisxfSBmcm9tIGthcHBhXnI6CiAJCSAqLwotCQlpZiAociA9PSBSKSB7CisJCWlmIChyID09IFIpCiAJCQlicmVhazsKLQkJfQogCQlmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAJCQlpbnQgaiA9IGk7CiAJCQlpbnRlcltpXSAgPSBUMFsoa2FwcGFbai0tXSA+PiAyNCkgICAgICAgXTsKLQkJCWlmIChqIDwgMCkgaiA9IE4gLSAxOworCQkJaWYgKGogPCAwKQorCQkJCWogPSBOIC0gMTsKIAkJCWludGVyW2ldIF49IFQxWyhrYXBwYVtqLS1dID4+IDE2KSAmIDB4ZmZdOwotCQkJaWYgKGogPCAwKSBqID0gTiAtIDE7CisJCQlpZiAoaiA8IDApCisJCQkJaiA9IE4gLSAxOwogCQkJaW50ZXJbaV0gXj0gVDJbKGthcHBhW2otLV0gPj4gIDgpICYgMHhmZl07Ci0JCQlpZiAoaiA8IDApIGogPSBOIC0gMTsKKwkJCWlmIChqIDwgMCkKKwkJCQlqID0gTiAtIDE7CiAJCQlpbnRlcltpXSBePSBUM1soa2FwcGFbaiAgXSAgICAgICkgJiAweGZmXTsKIAkJfQogCQlrYXBwYVswXSA9IGludGVyWzBdIF4gcmNbcl07Ci0JCWZvciAoaSA9IDE7IGkgPCBOOyBpKyspIHsKKwkJZm9yIChpID0gMTsgaSA8IE47IGkrKykKIAkJCWthcHBhW2ldID0gaW50ZXJbaV07Ci0JCX0KIAl9CiAKIAkvKgpAQCAtNjkwLDcgKzY5MCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbnViaXNfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFudWJpc19hbGcpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXBpLmMgYi9jcnlwdG8vYXBpLmMKaW5kZXggNzk4NTI2ZC4uMDMzYTcxNDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTI4OCwxMSArMjg4LDExIEBACiAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX29wcyh0Zm0pOwotCQorCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCQorCiAJQlVHKCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTUsMTAgKzMxNSw5IEBACiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1M6CiAJCWNyeXB0b19leGl0X2NvbXByZXNzX29wcyh0Zm0pOwogCQlicmVhazsKLQkKKwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQkKIAl9CiB9CiAKQEAgLTU5MywxMiArNTkyLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKLQkKKwogCWlmICghSVNfRVJSKGFsZykpIHsKIAkJY3J5cHRvX21vZF9wdXQoYWxnKTsKIAkJcmV0ID0gMTsKIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2hhc19hbGcpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2F1dGhlbmMuYyBiL2NyeXB0by9hdXRoZW5jLmMKaW5kZXggNGQ2ZjQ5YS4uMTg4NzA5MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2F1dGhlbmMuYworKysgYi9jcnlwdG8vYXV0aGVuYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlpaGFzaCA9IG9oYXNoICsgYXV0aHNpemU7CiAJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGloYXNoLCBhcmVxX2N0eC0+c2csIGFyZXFfY3R4LT5jcnlwdGxlbiwKIAkJCQkgYXV0aHNpemUsIDApOwotCXJldHVybiBtZW1jbXAoaWhhc2gsIG9oYXNoLCBhdXRoc2l6ZSkgPyAtRUJBRE1TRzogMDsKKwlyZXR1cm4gbWVtY21wKGloYXNoLCBvaGFzaCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogfQogCiBzdGF0aWMgaW50IGNyeXB0b19hdXRoZW5jX2l2ZXJpZnkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1OCAqaXYsCkBAIC01NTcsMTEgKzU1NywxMSBAQAogCiAJY3R4LT5hdXRoID0gYXV0aDsKIAljdHgtPmVuYyA9IGVuYzsKLQkKKwogCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IG1heF90KHVuc2lnbmVkIGludCwKIAkJCQljcnlwdG9fYWhhc2hfcmVxc2l6ZShhdXRoKSArIGN0eC0+cmVxb2ZmICsKIAkJCQlzaXplb2Yoc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHgpICsKLQkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLCAKKwkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc2tjaXBoZXJfZ2l2Y3J5cHRfcmVxdWVzdCkgKwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoZW5jKSArCiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKGVuYykpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCA2ZjViNDg3Li5hNjdkNTJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIEJsb3dmaXNoIENpcGhlciBBbGdvcml0aG0sIGJ5IEJydWNlIFNjaG5laWVyLgpAQCAtMjk5LDcgKzI5OSw3IEBACiAJMHhiNzRlNjEzMiwgMHhjZTc3ZTI1YiwgMHg1NzhmZGZlMywgMHgzYWMzNzJlNiwKIH07CiAKLS8qIAorLyoKICAqIFJvdW5kIGxvb3AgdW5yb2xsaW5nIG1hY3JvcywgUyBpcyBhIHBvaW50ZXIgdG8gYSBTLUJveCBhcnJheQogICogb3JnYW5pemVkIGluIDQgdW5zaWduZWQgbG9uZ3MgYXQgYSByb3cuCiAgKi8KQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKgogICogVGhlIGJsb3dmaXNoIGVuY2lwaGVyLCBwcm9jZXNzZXMgNjQtYml0IGJsb2Nrcy4KLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcyAKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcwogICovCiBzdGF0aWMgdm9pZCBlbmNyeXB0X2Jsb2NrKHN0cnVjdCBiZl9jdHggKmJjdHgsIHUzMiAqZHN0LCB1MzIgKnNyYykKIHsKQEAgLTM5NSw3ICszOTUsNyBAQAogCW91dF9ibGtbMV0gPSBjcHVfdG9fYmUzMih5bCk7CiB9CiAKLS8qIAorLyoKICAqIENhbGN1bGF0ZXMgdGhlIGJsb3dmaXNoIFMgYW5kIFAgYm94ZXMgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmZfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCkBAIC00MTcsMTAgKzQxNywxMCBAQAogCiAJLyogQWN0dWFsIHN1YmtleSBnZW5lcmF0aW9uICovCiAJZm9yIChqID0gMCwgaSA9IDA7IGkgPCAxNiArIDI7IGkrKykgewotCQl0ZW1wID0gKCgodTMyIClrZXlbal0gPDwgMjQpIHwKLQkJCSgodTMyIClrZXlbKGogKyAxKSAlIGtleWxlbl0gPDwgMTYpIHwKLQkJCSgodTMyIClrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAotCQkJKCh1MzIgKWtleVsoaiArIDMpICUga2V5bGVuXSkpOworCQl0ZW1wID0gKCgodTMyKWtleVtqXSA8PCAyNCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMSkgJSBrZXlsZW5dIDw8IDE2KSB8CisJCQkoKHUzMilrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMykgJSBrZXlsZW5dKSk7CiAKIAkJUFtpXSA9IFBbaV0gXiB0ZW1wOwogCQlqID0gKGogKyA0KSAlIGtleWxlbjsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJU1tjb3VudCArIDFdID0gZGF0YVsxXTsKIAkJfQogCX0KLQkKKwogCS8qIEJydWNlIHNheXMgbm90IHRvIGJvdGhlciB3aXRoIHRoZSB3ZWFrIGtleSBjaGVjay4gKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS5jIGIvY3J5cHRvL2NhbWVsbGlhLmMKaW5kZXggOTY0NjM1ZC4uNjRjZmY0NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhLmMKKysrIGIvY3J5cHRvL2NhbWVsbGlhLmMKQEAgLTM5LDI3MSArMzksMjcxIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwMTExMFsyNTZdID0gewotCTB4NzA3MDcwMDAsMHg4MjgyODIwMCwweDJjMmMyYzAwLDB4ZWNlY2VjMDAsCi0JMHhiM2IzYjMwMCwweDI3MjcyNzAwLDB4YzBjMGMwMDAsMHhlNWU1ZTUwMCwKLQkweGU0ZTRlNDAwLDB4ODU4NTg1MDAsMHg1NzU3NTcwMCwweDM1MzUzNTAwLAotCTB4ZWFlYWVhMDAsMHgwYzBjMGMwMCwweGFlYWVhZTAwLDB4NDE0MTQxMDAsCi0JMHgyMzIzMjMwMCwweGVmZWZlZjAwLDB4NmI2YjZiMDAsMHg5MzkzOTMwMCwKLQkweDQ1NDU0NTAwLDB4MTkxOTE5MDAsMHhhNWE1YTUwMCwweDIxMjEyMTAwLAotCTB4ZWRlZGVkMDAsMHgwZTBlMGUwMCwweDRmNGY0ZjAwLDB4NGU0ZTRlMDAsCi0JMHgxZDFkMWQwMCwweDY1NjU2NTAwLDB4OTI5MjkyMDAsMHhiZGJkYmQwMCwKLQkweDg2ODY4NjAwLDB4YjhiOGI4MDAsMHhhZmFmYWYwMCwweDhmOGY4ZjAwLAotCTB4N2M3YzdjMDAsMHhlYmViZWIwMCwweDFmMWYxZjAwLDB4Y2VjZWNlMDAsCi0JMHgzZTNlM2UwMCwweDMwMzAzMDAwLDB4ZGNkY2RjMDAsMHg1ZjVmNWYwMCwKLQkweDVlNWU1ZTAwLDB4YzVjNWM1MDAsMHgwYjBiMGIwMCwweDFhMWExYTAwLAotCTB4YTZhNmE2MDAsMHhlMWUxZTEwMCwweDM5MzkzOTAwLDB4Y2FjYWNhMDAsCi0JMHhkNWQ1ZDUwMCwweDQ3NDc0NzAwLDB4NWQ1ZDVkMDAsMHgzZDNkM2QwMCwKLQkweGQ5ZDlkOTAwLDB4MDEwMTAxMDAsMHg1YTVhNWEwMCwweGQ2ZDZkNjAwLAotCTB4NTE1MTUxMDAsMHg1NjU2NTYwMCwweDZjNmM2YzAwLDB4NGQ0ZDRkMDAsCi0JMHg4YjhiOGIwMCwweDBkMGQwZDAwLDB4OWE5YTlhMDAsMHg2NjY2NjYwMCwKLQkweGZiZmJmYjAwLDB4Y2NjY2NjMDAsMHhiMGIwYjAwMCwweDJkMmQyZDAwLAotCTB4NzQ3NDc0MDAsMHgxMjEyMTIwMCwweDJiMmIyYjAwLDB4MjAyMDIwMDAsCi0JMHhmMGYwZjAwMCwweGIxYjFiMTAwLDB4ODQ4NDg0MDAsMHg5OTk5OTkwMCwKLQkweGRmZGZkZjAwLDB4NGM0YzRjMDAsMHhjYmNiY2IwMCwweGMyYzJjMjAwLAotCTB4MzQzNDM0MDAsMHg3ZTdlN2UwMCwweDc2NzY3NjAwLDB4MDUwNTA1MDAsCi0JMHg2ZDZkNmQwMCwweGI3YjdiNzAwLDB4YTlhOWE5MDAsMHgzMTMxMzEwMCwKLQkweGQxZDFkMTAwLDB4MTcxNzE3MDAsMHgwNDA0MDQwMCwweGQ3ZDdkNzAwLAotCTB4MTQxNDE0MDAsMHg1ODU4NTgwMCwweDNhM2EzYTAwLDB4NjE2MTYxMDAsCi0JMHhkZWRlZGUwMCwweDFiMWIxYjAwLDB4MTExMTExMDAsMHgxYzFjMWMwMCwKLQkweDMyMzIzMjAwLDB4MGYwZjBmMDAsMHg5YzljOWMwMCwweDE2MTYxNjAwLAotCTB4NTM1MzUzMDAsMHgxODE4MTgwMCwweGYyZjJmMjAwLDB4MjIyMjIyMDAsCi0JMHhmZWZlZmUwMCwweDQ0NDQ0NDAwLDB4Y2ZjZmNmMDAsMHhiMmIyYjIwMCwKLQkweGMzYzNjMzAwLDB4YjViNWI1MDAsMHg3YTdhN2EwMCwweDkxOTE5MTAwLAotCTB4MjQyNDI0MDAsMHgwODA4MDgwMCwweGU4ZThlODAwLDB4YThhOGE4MDAsCi0JMHg2MDYwNjAwMCwweGZjZmNmYzAwLDB4Njk2OTY5MDAsMHg1MDUwNTAwMCwKLQkweGFhYWFhYTAwLDB4ZDBkMGQwMDAsMHhhMGEwYTAwMCwweDdkN2Q3ZDAwLAotCTB4YTFhMWExMDAsMHg4OTg5ODkwMCwweDYyNjI2MjAwLDB4OTc5Nzk3MDAsCi0JMHg1NDU0NTQwMCwweDViNWI1YjAwLDB4MWUxZTFlMDAsMHg5NTk1OTUwMCwKLQkweGUwZTBlMDAwLDB4ZmZmZmZmMDAsMHg2NDY0NjQwMCwweGQyZDJkMjAwLAotCTB4MTAxMDEwMDAsMHhjNGM0YzQwMCwweDAwMDAwMDAwLDB4NDg0ODQ4MDAsCi0JMHhhM2EzYTMwMCwweGY3ZjdmNzAwLDB4NzU3NTc1MDAsMHhkYmRiZGIwMCwKLQkweDhhOGE4YTAwLDB4MDMwMzAzMDAsMHhlNmU2ZTYwMCwweGRhZGFkYTAwLAotCTB4MDkwOTA5MDAsMHgzZjNmM2YwMCwweGRkZGRkZDAwLDB4OTQ5NDk0MDAsCi0JMHg4Nzg3ODcwMCwweDVjNWM1YzAwLDB4ODM4MzgzMDAsMHgwMjAyMDIwMCwKLQkweGNkY2RjZDAwLDB4NGE0YTRhMDAsMHg5MDkwOTAwMCwweDMzMzMzMzAwLAotCTB4NzM3MzczMDAsMHg2NzY3NjcwMCwweGY2ZjZmNjAwLDB4ZjNmM2YzMDAsCi0JMHg5ZDlkOWQwMCwweDdmN2Y3ZjAwLDB4YmZiZmJmMDAsMHhlMmUyZTIwMCwKLQkweDUyNTI1MjAwLDB4OWI5YjliMDAsMHhkOGQ4ZDgwMCwweDI2MjYyNjAwLAotCTB4YzhjOGM4MDAsMHgzNzM3MzcwMCwweGM2YzZjNjAwLDB4M2IzYjNiMDAsCi0JMHg4MTgxODEwMCwweDk2OTY5NjAwLDB4NmY2ZjZmMDAsMHg0YjRiNGIwMCwKLQkweDEzMTMxMzAwLDB4YmViZWJlMDAsMHg2MzYzNjMwMCwweDJlMmUyZTAwLAotCTB4ZTllOWU5MDAsMHg3OTc5NzkwMCwweGE3YTdhNzAwLDB4OGM4YzhjMDAsCi0JMHg5ZjlmOWYwMCwweDZlNmU2ZTAwLDB4YmNiY2JjMDAsMHg4ZThlOGUwMCwKLQkweDI5MjkyOTAwLDB4ZjVmNWY1MDAsMHhmOWY5ZjkwMCwweGI2YjZiNjAwLAotCTB4MmYyZjJmMDAsMHhmZGZkZmQwMCwweGI0YjRiNDAwLDB4NTk1OTU5MDAsCi0JMHg3ODc4NzgwMCwweDk4OTg5ODAwLDB4MDYwNjA2MDAsMHg2YTZhNmEwMCwKLQkweGU3ZTdlNzAwLDB4NDY0NjQ2MDAsMHg3MTcxNzEwMCwweGJhYmFiYTAwLAotCTB4ZDRkNGQ0MDAsMHgyNTI1MjUwMCwweGFiYWJhYjAwLDB4NDI0MjQyMDAsCi0JMHg4ODg4ODgwMCwweGEyYTJhMjAwLDB4OGQ4ZDhkMDAsMHhmYWZhZmEwMCwKLQkweDcyNzI3MjAwLDB4MDcwNzA3MDAsMHhiOWI5YjkwMCwweDU1NTU1NTAwLAotCTB4ZjhmOGY4MDAsMHhlZWVlZWUwMCwweGFjYWNhYzAwLDB4MGEwYTBhMDAsCi0JMHgzNjM2MzYwMCwweDQ5NDk0OTAwLDB4MmEyYTJhMDAsMHg2ODY4NjgwMCwKLQkweDNjM2MzYzAwLDB4MzgzODM4MDAsMHhmMWYxZjEwMCwweGE0YTRhNDAwLAotCTB4NDA0MDQwMDAsMHgyODI4MjgwMCwweGQzZDNkMzAwLDB4N2I3YjdiMDAsCi0JMHhiYmJiYmIwMCwweGM5YzljOTAwLDB4NDM0MzQzMDAsMHhjMWMxYzEwMCwKLQkweDE1MTUxNTAwLDB4ZTNlM2UzMDAsMHhhZGFkYWQwMCwweGY0ZjRmNDAwLAotCTB4Nzc3Nzc3MDAsMHhjN2M3YzcwMCwweDgwODA4MDAwLDB4OWU5ZTllMDAsCisJMHg3MDcwNzAwMCwgMHg4MjgyODIwMCwgMHgyYzJjMmMwMCwgMHhlY2VjZWMwMCwKKwkweGIzYjNiMzAwLCAweDI3MjcyNzAwLCAweGMwYzBjMDAwLCAweGU1ZTVlNTAwLAorCTB4ZTRlNGU0MDAsIDB4ODU4NTg1MDAsIDB4NTc1NzU3MDAsIDB4MzUzNTM1MDAsCisJMHhlYWVhZWEwMCwgMHgwYzBjMGMwMCwgMHhhZWFlYWUwMCwgMHg0MTQxNDEwMCwKKwkweDIzMjMyMzAwLCAweGVmZWZlZjAwLCAweDZiNmI2YjAwLCAweDkzOTM5MzAwLAorCTB4NDU0NTQ1MDAsIDB4MTkxOTE5MDAsIDB4YTVhNWE1MDAsIDB4MjEyMTIxMDAsCisJMHhlZGVkZWQwMCwgMHgwZTBlMGUwMCwgMHg0ZjRmNGYwMCwgMHg0ZTRlNGUwMCwKKwkweDFkMWQxZDAwLCAweDY1NjU2NTAwLCAweDkyOTI5MjAwLCAweGJkYmRiZDAwLAorCTB4ODY4Njg2MDAsIDB4YjhiOGI4MDAsIDB4YWZhZmFmMDAsIDB4OGY4ZjhmMDAsCisJMHg3YzdjN2MwMCwgMHhlYmViZWIwMCwgMHgxZjFmMWYwMCwgMHhjZWNlY2UwMCwKKwkweDNlM2UzZTAwLCAweDMwMzAzMDAwLCAweGRjZGNkYzAwLCAweDVmNWY1ZjAwLAorCTB4NWU1ZTVlMDAsIDB4YzVjNWM1MDAsIDB4MGIwYjBiMDAsIDB4MWExYTFhMDAsCisJMHhhNmE2YTYwMCwgMHhlMWUxZTEwMCwgMHgzOTM5MzkwMCwgMHhjYWNhY2EwMCwKKwkweGQ1ZDVkNTAwLCAweDQ3NDc0NzAwLCAweDVkNWQ1ZDAwLCAweDNkM2QzZDAwLAorCTB4ZDlkOWQ5MDAsIDB4MDEwMTAxMDAsIDB4NWE1YTVhMDAsIDB4ZDZkNmQ2MDAsCisJMHg1MTUxNTEwMCwgMHg1NjU2NTYwMCwgMHg2YzZjNmMwMCwgMHg0ZDRkNGQwMCwKKwkweDhiOGI4YjAwLCAweDBkMGQwZDAwLCAweDlhOWE5YTAwLCAweDY2NjY2NjAwLAorCTB4ZmJmYmZiMDAsIDB4Y2NjY2NjMDAsIDB4YjBiMGIwMDAsIDB4MmQyZDJkMDAsCisJMHg3NDc0NzQwMCwgMHgxMjEyMTIwMCwgMHgyYjJiMmIwMCwgMHgyMDIwMjAwMCwKKwkweGYwZjBmMDAwLCAweGIxYjFiMTAwLCAweDg0ODQ4NDAwLCAweDk5OTk5OTAwLAorCTB4ZGZkZmRmMDAsIDB4NGM0YzRjMDAsIDB4Y2JjYmNiMDAsIDB4YzJjMmMyMDAsCisJMHgzNDM0MzQwMCwgMHg3ZTdlN2UwMCwgMHg3Njc2NzYwMCwgMHgwNTA1MDUwMCwKKwkweDZkNmQ2ZDAwLCAweGI3YjdiNzAwLCAweGE5YTlhOTAwLCAweDMxMzEzMTAwLAorCTB4ZDFkMWQxMDAsIDB4MTcxNzE3MDAsIDB4MDQwNDA0MDAsIDB4ZDdkN2Q3MDAsCisJMHgxNDE0MTQwMCwgMHg1ODU4NTgwMCwgMHgzYTNhM2EwMCwgMHg2MTYxNjEwMCwKKwkweGRlZGVkZTAwLCAweDFiMWIxYjAwLCAweDExMTExMTAwLCAweDFjMWMxYzAwLAorCTB4MzIzMjMyMDAsIDB4MGYwZjBmMDAsIDB4OWM5YzljMDAsIDB4MTYxNjE2MDAsCisJMHg1MzUzNTMwMCwgMHgxODE4MTgwMCwgMHhmMmYyZjIwMCwgMHgyMjIyMjIwMCwKKwkweGZlZmVmZTAwLCAweDQ0NDQ0NDAwLCAweGNmY2ZjZjAwLCAweGIyYjJiMjAwLAorCTB4YzNjM2MzMDAsIDB4YjViNWI1MDAsIDB4N2E3YTdhMDAsIDB4OTE5MTkxMDAsCisJMHgyNDI0MjQwMCwgMHgwODA4MDgwMCwgMHhlOGU4ZTgwMCwgMHhhOGE4YTgwMCwKKwkweDYwNjA2MDAwLCAweGZjZmNmYzAwLCAweDY5Njk2OTAwLCAweDUwNTA1MDAwLAorCTB4YWFhYWFhMDAsIDB4ZDBkMGQwMDAsIDB4YTBhMGEwMDAsIDB4N2Q3ZDdkMDAsCisJMHhhMWExYTEwMCwgMHg4OTg5ODkwMCwgMHg2MjYyNjIwMCwgMHg5Nzk3OTcwMCwKKwkweDU0NTQ1NDAwLCAweDViNWI1YjAwLCAweDFlMWUxZTAwLCAweDk1OTU5NTAwLAorCTB4ZTBlMGUwMDAsIDB4ZmZmZmZmMDAsIDB4NjQ2NDY0MDAsIDB4ZDJkMmQyMDAsCisJMHgxMDEwMTAwMCwgMHhjNGM0YzQwMCwgMHgwMDAwMDAwMCwgMHg0ODQ4NDgwMCwKKwkweGEzYTNhMzAwLCAweGY3ZjdmNzAwLCAweDc1NzU3NTAwLCAweGRiZGJkYjAwLAorCTB4OGE4YThhMDAsIDB4MDMwMzAzMDAsIDB4ZTZlNmU2MDAsIDB4ZGFkYWRhMDAsCisJMHgwOTA5MDkwMCwgMHgzZjNmM2YwMCwgMHhkZGRkZGQwMCwgMHg5NDk0OTQwMCwKKwkweDg3ODc4NzAwLCAweDVjNWM1YzAwLCAweDgzODM4MzAwLCAweDAyMDIwMjAwLAorCTB4Y2RjZGNkMDAsIDB4NGE0YTRhMDAsIDB4OTA5MDkwMDAsIDB4MzMzMzMzMDAsCisJMHg3MzczNzMwMCwgMHg2NzY3NjcwMCwgMHhmNmY2ZjYwMCwgMHhmM2YzZjMwMCwKKwkweDlkOWQ5ZDAwLCAweDdmN2Y3ZjAwLCAweGJmYmZiZjAwLCAweGUyZTJlMjAwLAorCTB4NTI1MjUyMDAsIDB4OWI5YjliMDAsIDB4ZDhkOGQ4MDAsIDB4MjYyNjI2MDAsCisJMHhjOGM4YzgwMCwgMHgzNzM3MzcwMCwgMHhjNmM2YzYwMCwgMHgzYjNiM2IwMCwKKwkweDgxODE4MTAwLCAweDk2OTY5NjAwLCAweDZmNmY2ZjAwLCAweDRiNGI0YjAwLAorCTB4MTMxMzEzMDAsIDB4YmViZWJlMDAsIDB4NjM2MzYzMDAsIDB4MmUyZTJlMDAsCisJMHhlOWU5ZTkwMCwgMHg3OTc5NzkwMCwgMHhhN2E3YTcwMCwgMHg4YzhjOGMwMCwKKwkweDlmOWY5ZjAwLCAweDZlNmU2ZTAwLCAweGJjYmNiYzAwLCAweDhlOGU4ZTAwLAorCTB4MjkyOTI5MDAsIDB4ZjVmNWY1MDAsIDB4ZjlmOWY5MDAsIDB4YjZiNmI2MDAsCisJMHgyZjJmMmYwMCwgMHhmZGZkZmQwMCwgMHhiNGI0YjQwMCwgMHg1OTU5NTkwMCwKKwkweDc4Nzg3ODAwLCAweDk4OTg5ODAwLCAweDA2MDYwNjAwLCAweDZhNmE2YTAwLAorCTB4ZTdlN2U3MDAsIDB4NDY0NjQ2MDAsIDB4NzE3MTcxMDAsIDB4YmFiYWJhMDAsCisJMHhkNGQ0ZDQwMCwgMHgyNTI1MjUwMCwgMHhhYmFiYWIwMCwgMHg0MjQyNDIwMCwKKwkweDg4ODg4ODAwLCAweGEyYTJhMjAwLCAweDhkOGQ4ZDAwLCAweGZhZmFmYTAwLAorCTB4NzI3MjcyMDAsIDB4MDcwNzA3MDAsIDB4YjliOWI5MDAsIDB4NTU1NTU1MDAsCisJMHhmOGY4ZjgwMCwgMHhlZWVlZWUwMCwgMHhhY2FjYWMwMCwgMHgwYTBhMGEwMCwKKwkweDM2MzYzNjAwLCAweDQ5NDk0OTAwLCAweDJhMmEyYTAwLCAweDY4Njg2ODAwLAorCTB4M2MzYzNjMDAsIDB4MzgzODM4MDAsIDB4ZjFmMWYxMDAsIDB4YTRhNGE0MDAsCisJMHg0MDQwNDAwMCwgMHgyODI4MjgwMCwgMHhkM2QzZDMwMCwgMHg3YjdiN2IwMCwKKwkweGJiYmJiYjAwLCAweGM5YzljOTAwLCAweDQzNDM0MzAwLCAweGMxYzFjMTAwLAorCTB4MTUxNTE1MDAsIDB4ZTNlM2UzMDAsIDB4YWRhZGFkMDAsIDB4ZjRmNGY0MDAsCisJMHg3Nzc3NzcwMCwgMHhjN2M3YzcwMCwgMHg4MDgwODAwMCwgMHg5ZTllOWUwMCwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AwMjIyWzI1Nl0gPSB7Ci0JMHgwMGUwZTBlMCwweDAwMDUwNTA1LDB4MDA1ODU4NTgsMHgwMGQ5ZDlkOSwKLQkweDAwNjc2NzY3LDB4MDA0ZTRlNGUsMHgwMDgxODE4MSwweDAwY2JjYmNiLAotCTB4MDBjOWM5YzksMHgwMDBiMGIwYiwweDAwYWVhZWFlLDB4MDA2YTZhNmEsCi0JMHgwMGQ1ZDVkNSwweDAwMTgxODE4LDB4MDA1ZDVkNWQsMHgwMDgyODI4MiwKLQkweDAwNDY0NjQ2LDB4MDBkZmRmZGYsMHgwMGQ2ZDZkNiwweDAwMjcyNzI3LAotCTB4MDA4YThhOGEsMHgwMDMyMzIzMiwweDAwNGI0YjRiLDB4MDA0MjQyNDIsCi0JMHgwMGRiZGJkYiwweDAwMWMxYzFjLDB4MDA5ZTllOWUsMHgwMDljOWM5YywKLQkweDAwM2EzYTNhLDB4MDBjYWNhY2EsMHgwMDI1MjUyNSwweDAwN2I3YjdiLAotCTB4MDAwZDBkMGQsMHgwMDcxNzE3MSwweDAwNWY1ZjVmLDB4MDAxZjFmMWYsCi0JMHgwMGY4ZjhmOCwweDAwZDdkN2Q3LDB4MDAzZTNlM2UsMHgwMDlkOWQ5ZCwKLQkweDAwN2M3YzdjLDB4MDA2MDYwNjAsMHgwMGI5YjliOSwweDAwYmViZWJlLAotCTB4MDBiY2JjYmMsMHgwMDhiOGI4YiwweDAwMTYxNjE2LDB4MDAzNDM0MzQsCi0JMHgwMDRkNGQ0ZCwweDAwYzNjM2MzLDB4MDA3MjcyNzIsMHgwMDk1OTU5NSwKLQkweDAwYWJhYmFiLDB4MDA4ZThlOGUsMHgwMGJhYmFiYSwweDAwN2E3YTdhLAotCTB4MDBiM2IzYjMsMHgwMDAyMDIwMiwweDAwYjRiNGI0LDB4MDBhZGFkYWQsCi0JMHgwMGEyYTJhMiwweDAwYWNhY2FjLDB4MDBkOGQ4ZDgsMHgwMDlhOWE5YSwKLQkweDAwMTcxNzE3LDB4MDAxYTFhMWEsMHgwMDM1MzUzNSwweDAwY2NjY2NjLAotCTB4MDBmN2Y3ZjcsMHgwMDk5OTk5OSwweDAwNjE2MTYxLDB4MDA1YTVhNWEsCi0JMHgwMGU4ZThlOCwweDAwMjQyNDI0LDB4MDA1NjU2NTYsMHgwMDQwNDA0MCwKLQkweDAwZTFlMWUxLDB4MDA2MzYzNjMsMHgwMDA5MDkwOSwweDAwMzMzMzMzLAotCTB4MDBiZmJmYmYsMHgwMDk4OTg5OCwweDAwOTc5Nzk3LDB4MDA4NTg1ODUsCi0JMHgwMDY4Njg2OCwweDAwZmNmY2ZjLDB4MDBlY2VjZWMsMHgwMDBhMGEwYSwKLQkweDAwZGFkYWRhLDB4MDA2ZjZmNmYsMHgwMDUzNTM1MywweDAwNjI2MjYyLAotCTB4MDBhM2EzYTMsMHgwMDJlMmUyZSwweDAwMDgwODA4LDB4MDBhZmFmYWYsCi0JMHgwMDI4MjgyOCwweDAwYjBiMGIwLDB4MDA3NDc0NzQsMHgwMGMyYzJjMiwKLQkweDAwYmRiZGJkLDB4MDAzNjM2MzYsMHgwMDIyMjIyMiwweDAwMzgzODM4LAotCTB4MDA2NDY0NjQsMHgwMDFlMWUxZSwweDAwMzkzOTM5LDB4MDAyYzJjMmMsCi0JMHgwMGE2YTZhNiwweDAwMzAzMDMwLDB4MDBlNWU1ZTUsMHgwMDQ0NDQ0NCwKLQkweDAwZmRmZGZkLDB4MDA4ODg4ODgsMHgwMDlmOWY5ZiwweDAwNjU2NTY1LAotCTB4MDA4Nzg3ODcsMHgwMDZiNmI2YiwweDAwZjRmNGY0LDB4MDAyMzIzMjMsCi0JMHgwMDQ4NDg0OCwweDAwMTAxMDEwLDB4MDBkMWQxZDEsMHgwMDUxNTE1MSwKLQkweDAwYzBjMGMwLDB4MDBmOWY5ZjksMHgwMGQyZDJkMiwweDAwYTBhMGEwLAotCTB4MDA1NTU1NTUsMHgwMGExYTFhMSwweDAwNDE0MTQxLDB4MDBmYWZhZmEsCi0JMHgwMDQzNDM0MywweDAwMTMxMzEzLDB4MDBjNGM0YzQsMHgwMDJmMmYyZiwKLQkweDAwYThhOGE4LDB4MDBiNmI2YjYsMHgwMDNjM2MzYywweDAwMmIyYjJiLAotCTB4MDBjMWMxYzEsMHgwMGZmZmZmZiwweDAwYzhjOGM4LDB4MDBhNWE1YTUsCi0JMHgwMDIwMjAyMCwweDAwODk4OTg5LDB4MDAwMDAwMDAsMHgwMDkwOTA5MCwKLQkweDAwNDc0NzQ3LDB4MDBlZmVmZWYsMHgwMGVhZWFlYSwweDAwYjdiN2I3LAotCTB4MDAxNTE1MTUsMHgwMDA2MDYwNiwweDAwY2RjZGNkLDB4MDBiNWI1YjUsCi0JMHgwMDEyMTIxMiwweDAwN2U3ZTdlLDB4MDBiYmJiYmIsMHgwMDI5MjkyOSwKLQkweDAwMGYwZjBmLDB4MDBiOGI4YjgsMHgwMDA3MDcwNywweDAwMDQwNDA0LAotCTB4MDA5YjliOWIsMHgwMDk0OTQ5NCwweDAwMjEyMTIxLDB4MDA2NjY2NjYsCi0JMHgwMGU2ZTZlNiwweDAwY2VjZWNlLDB4MDBlZGVkZWQsMHgwMGU3ZTdlNywKLQkweDAwM2IzYjNiLDB4MDBmZWZlZmUsMHgwMDdmN2Y3ZiwweDAwYzVjNWM1LAotCTB4MDBhNGE0YTQsMHgwMDM3MzczNywweDAwYjFiMWIxLDB4MDA0YzRjNGMsCi0JMHgwMDkxOTE5MSwweDAwNmU2ZTZlLDB4MDA4ZDhkOGQsMHgwMDc2NzY3NiwKLQkweDAwMDMwMzAzLDB4MDAyZDJkMmQsMHgwMGRlZGVkZSwweDAwOTY5Njk2LAotCTB4MDAyNjI2MjYsMHgwMDdkN2Q3ZCwweDAwYzZjNmM2LDB4MDA1YzVjNWMsCi0JMHgwMGQzZDNkMywweDAwZjJmMmYyLDB4MDA0ZjRmNGYsMHgwMDE5MTkxOSwKLQkweDAwM2YzZjNmLDB4MDBkY2RjZGMsMHgwMDc5Nzk3OSwweDAwMWQxZDFkLAotCTB4MDA1MjUyNTIsMHgwMGViZWJlYiwweDAwZjNmM2YzLDB4MDA2ZDZkNmQsCi0JMHgwMDVlNWU1ZSwweDAwZmJmYmZiLDB4MDA2OTY5NjksMHgwMGIyYjJiMiwKLQkweDAwZjBmMGYwLDB4MDAzMTMxMzEsMHgwMDBjMGMwYywweDAwZDRkNGQ0LAotCTB4MDBjZmNmY2YsMHgwMDhjOGM4YywweDAwZTJlMmUyLDB4MDA3NTc1NzUsCi0JMHgwMGE5YTlhOSwweDAwNGE0YTRhLDB4MDA1NzU3NTcsMHgwMDg0ODQ4NCwKLQkweDAwMTExMTExLDB4MDA0NTQ1NDUsMHgwMDFiMWIxYiwweDAwZjVmNWY1LAotCTB4MDBlNGU0ZTQsMHgwMDBlMGUwZSwweDAwNzM3MzczLDB4MDBhYWFhYWEsCi0JMHgwMGYxZjFmMSwweDAwZGRkZGRkLDB4MDA1OTU5NTksMHgwMDE0MTQxNCwKLQkweDAwNmM2YzZjLDB4MDA5MjkyOTIsMHgwMDU0NTQ1NCwweDAwZDBkMGQwLAotCTB4MDA3ODc4NzgsMHgwMDcwNzA3MCwweDAwZTNlM2UzLDB4MDA0OTQ5NDksCi0JMHgwMDgwODA4MCwweDAwNTA1MDUwLDB4MDBhN2E3YTcsMHgwMGY2ZjZmNiwKLQkweDAwNzc3Nzc3LDB4MDA5MzkzOTMsMHgwMDg2ODY4NiwweDAwODM4MzgzLAotCTB4MDAyYTJhMmEsMHgwMGM3YzdjNywweDAwNWI1YjViLDB4MDBlOWU5ZTksCi0JMHgwMGVlZWVlZSwweDAwOGY4ZjhmLDB4MDAwMTAxMDEsMHgwMDNkM2QzZCwKKwkweDAwZTBlMGUwLCAweDAwMDUwNTA1LCAweDAwNTg1ODU4LCAweDAwZDlkOWQ5LAorCTB4MDA2NzY3NjcsIDB4MDA0ZTRlNGUsIDB4MDA4MTgxODEsIDB4MDBjYmNiY2IsCisJMHgwMGM5YzljOSwgMHgwMDBiMGIwYiwgMHgwMGFlYWVhZSwgMHgwMDZhNmE2YSwKKwkweDAwZDVkNWQ1LCAweDAwMTgxODE4LCAweDAwNWQ1ZDVkLCAweDAwODI4MjgyLAorCTB4MDA0NjQ2NDYsIDB4MDBkZmRmZGYsIDB4MDBkNmQ2ZDYsIDB4MDAyNzI3MjcsCisJMHgwMDhhOGE4YSwgMHgwMDMyMzIzMiwgMHgwMDRiNGI0YiwgMHgwMDQyNDI0MiwKKwkweDAwZGJkYmRiLCAweDAwMWMxYzFjLCAweDAwOWU5ZTllLCAweDAwOWM5YzljLAorCTB4MDAzYTNhM2EsIDB4MDBjYWNhY2EsIDB4MDAyNTI1MjUsIDB4MDA3YjdiN2IsCisJMHgwMDBkMGQwZCwgMHgwMDcxNzE3MSwgMHgwMDVmNWY1ZiwgMHgwMDFmMWYxZiwKKwkweDAwZjhmOGY4LCAweDAwZDdkN2Q3LCAweDAwM2UzZTNlLCAweDAwOWQ5ZDlkLAorCTB4MDA3YzdjN2MsIDB4MDA2MDYwNjAsIDB4MDBiOWI5YjksIDB4MDBiZWJlYmUsCisJMHgwMGJjYmNiYywgMHgwMDhiOGI4YiwgMHgwMDE2MTYxNiwgMHgwMDM0MzQzNCwKKwkweDAwNGQ0ZDRkLCAweDAwYzNjM2MzLCAweDAwNzI3MjcyLCAweDAwOTU5NTk1LAorCTB4MDBhYmFiYWIsIDB4MDA4ZThlOGUsIDB4MDBiYWJhYmEsIDB4MDA3YTdhN2EsCisJMHgwMGIzYjNiMywgMHgwMDAyMDIwMiwgMHgwMGI0YjRiNCwgMHgwMGFkYWRhZCwKKwkweDAwYTJhMmEyLCAweDAwYWNhY2FjLCAweDAwZDhkOGQ4LCAweDAwOWE5YTlhLAorCTB4MDAxNzE3MTcsIDB4MDAxYTFhMWEsIDB4MDAzNTM1MzUsIDB4MDBjY2NjY2MsCisJMHgwMGY3ZjdmNywgMHgwMDk5OTk5OSwgMHgwMDYxNjE2MSwgMHgwMDVhNWE1YSwKKwkweDAwZThlOGU4LCAweDAwMjQyNDI0LCAweDAwNTY1NjU2LCAweDAwNDA0MDQwLAorCTB4MDBlMWUxZTEsIDB4MDA2MzYzNjMsIDB4MDAwOTA5MDksIDB4MDAzMzMzMzMsCisJMHgwMGJmYmZiZiwgMHgwMDk4OTg5OCwgMHgwMDk3OTc5NywgMHgwMDg1ODU4NSwKKwkweDAwNjg2ODY4LCAweDAwZmNmY2ZjLCAweDAwZWNlY2VjLCAweDAwMGEwYTBhLAorCTB4MDBkYWRhZGEsIDB4MDA2ZjZmNmYsIDB4MDA1MzUzNTMsIDB4MDA2MjYyNjIsCisJMHgwMGEzYTNhMywgMHgwMDJlMmUyZSwgMHgwMDA4MDgwOCwgMHgwMGFmYWZhZiwKKwkweDAwMjgyODI4LCAweDAwYjBiMGIwLCAweDAwNzQ3NDc0LCAweDAwYzJjMmMyLAorCTB4MDBiZGJkYmQsIDB4MDAzNjM2MzYsIDB4MDAyMjIyMjIsIDB4MDAzODM4MzgsCisJMHgwMDY0NjQ2NCwgMHgwMDFlMWUxZSwgMHgwMDM5MzkzOSwgMHgwMDJjMmMyYywKKwkweDAwYTZhNmE2LCAweDAwMzAzMDMwLCAweDAwZTVlNWU1LCAweDAwNDQ0NDQ0LAorCTB4MDBmZGZkZmQsIDB4MDA4ODg4ODgsIDB4MDA5ZjlmOWYsIDB4MDA2NTY1NjUsCisJMHgwMDg3ODc4NywgMHgwMDZiNmI2YiwgMHgwMGY0ZjRmNCwgMHgwMDIzMjMyMywKKwkweDAwNDg0ODQ4LCAweDAwMTAxMDEwLCAweDAwZDFkMWQxLCAweDAwNTE1MTUxLAorCTB4MDBjMGMwYzAsIDB4MDBmOWY5ZjksIDB4MDBkMmQyZDIsIDB4MDBhMGEwYTAsCisJMHgwMDU1NTU1NSwgMHgwMGExYTFhMSwgMHgwMDQxNDE0MSwgMHgwMGZhZmFmYSwKKwkweDAwNDM0MzQzLCAweDAwMTMxMzEzLCAweDAwYzRjNGM0LCAweDAwMmYyZjJmLAorCTB4MDBhOGE4YTgsIDB4MDBiNmI2YjYsIDB4MDAzYzNjM2MsIDB4MDAyYjJiMmIsCisJMHgwMGMxYzFjMSwgMHgwMGZmZmZmZiwgMHgwMGM4YzhjOCwgMHgwMGE1YTVhNSwKKwkweDAwMjAyMDIwLCAweDAwODk4OTg5LCAweDAwMDAwMDAwLCAweDAwOTA5MDkwLAorCTB4MDA0NzQ3NDcsIDB4MDBlZmVmZWYsIDB4MDBlYWVhZWEsIDB4MDBiN2I3YjcsCisJMHgwMDE1MTUxNSwgMHgwMDA2MDYwNiwgMHgwMGNkY2RjZCwgMHgwMGI1YjViNSwKKwkweDAwMTIxMjEyLCAweDAwN2U3ZTdlLCAweDAwYmJiYmJiLCAweDAwMjkyOTI5LAorCTB4MDAwZjBmMGYsIDB4MDBiOGI4YjgsIDB4MDAwNzA3MDcsIDB4MDAwNDA0MDQsCisJMHgwMDliOWI5YiwgMHgwMDk0OTQ5NCwgMHgwMDIxMjEyMSwgMHgwMDY2NjY2NiwKKwkweDAwZTZlNmU2LCAweDAwY2VjZWNlLCAweDAwZWRlZGVkLCAweDAwZTdlN2U3LAorCTB4MDAzYjNiM2IsIDB4MDBmZWZlZmUsIDB4MDA3ZjdmN2YsIDB4MDBjNWM1YzUsCisJMHgwMGE0YTRhNCwgMHgwMDM3MzczNywgMHgwMGIxYjFiMSwgMHgwMDRjNGM0YywKKwkweDAwOTE5MTkxLCAweDAwNmU2ZTZlLCAweDAwOGQ4ZDhkLCAweDAwNzY3Njc2LAorCTB4MDAwMzAzMDMsIDB4MDAyZDJkMmQsIDB4MDBkZWRlZGUsIDB4MDA5Njk2OTYsCisJMHgwMDI2MjYyNiwgMHgwMDdkN2Q3ZCwgMHgwMGM2YzZjNiwgMHgwMDVjNWM1YywKKwkweDAwZDNkM2QzLCAweDAwZjJmMmYyLCAweDAwNGY0ZjRmLCAweDAwMTkxOTE5LAorCTB4MDAzZjNmM2YsIDB4MDBkY2RjZGMsIDB4MDA3OTc5NzksIDB4MDAxZDFkMWQsCisJMHgwMDUyNTI1MiwgMHgwMGViZWJlYiwgMHgwMGYzZjNmMywgMHgwMDZkNmQ2ZCwKKwkweDAwNWU1ZTVlLCAweDAwZmJmYmZiLCAweDAwNjk2OTY5LCAweDAwYjJiMmIyLAorCTB4MDBmMGYwZjAsIDB4MDAzMTMxMzEsIDB4MDAwYzBjMGMsIDB4MDBkNGQ0ZDQsCisJMHgwMGNmY2ZjZiwgMHgwMDhjOGM4YywgMHgwMGUyZTJlMiwgMHgwMDc1NzU3NSwKKwkweDAwYTlhOWE5LCAweDAwNGE0YTRhLCAweDAwNTc1NzU3LCAweDAwODQ4NDg0LAorCTB4MDAxMTExMTEsIDB4MDA0NTQ1NDUsIDB4MDAxYjFiMWIsIDB4MDBmNWY1ZjUsCisJMHgwMGU0ZTRlNCwgMHgwMDBlMGUwZSwgMHgwMDczNzM3MywgMHgwMGFhYWFhYSwKKwkweDAwZjFmMWYxLCAweDAwZGRkZGRkLCAweDAwNTk1OTU5LCAweDAwMTQxNDE0LAorCTB4MDA2YzZjNmMsIDB4MDA5MjkyOTIsIDB4MDA1NDU0NTQsIDB4MDBkMGQwZDAsCisJMHgwMDc4Nzg3OCwgMHgwMDcwNzA3MCwgMHgwMGUzZTNlMywgMHgwMDQ5NDk0OSwKKwkweDAwODA4MDgwLCAweDAwNTA1MDUwLCAweDAwYTdhN2E3LCAweDAwZjZmNmY2LAorCTB4MDA3Nzc3NzcsIDB4MDA5MzkzOTMsIDB4MDA4Njg2ODYsIDB4MDA4MzgzODMsCisJMHgwMDJhMmEyYSwgMHgwMGM3YzdjNywgMHgwMDViNWI1YiwgMHgwMGU5ZTllOSwKKwkweDAwZWVlZWVlLCAweDAwOGY4ZjhmLCAweDAwMDEwMTAxLCAweDAwM2QzZDNkLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDMwMzNbMjU2XSA9IHsKLQkweDM4MDAzODM4LDB4NDEwMDQxNDEsMHgxNjAwMTYxNiwweDc2MDA3Njc2LAotCTB4ZDkwMGQ5ZDksMHg5MzAwOTM5MywweDYwMDA2MDYwLDB4ZjIwMGYyZjIsCi0JMHg3MjAwNzI3MiwweGMyMDBjMmMyLDB4YWIwMGFiYWIsMHg5YTAwOWE5YSwKLQkweDc1MDA3NTc1LDB4MDYwMDA2MDYsMHg1NzAwNTc1NywweGEwMDBhMGEwLAotCTB4OTEwMDkxOTEsMHhmNzAwZjdmNywweGI1MDBiNWI1LDB4YzkwMGM5YzksCi0JMHhhMjAwYTJhMiwweDhjMDA4YzhjLDB4ZDIwMGQyZDIsMHg5MDAwOTA5MCwKLQkweGY2MDBmNmY2LDB4MDcwMDA3MDcsMHhhNzAwYTdhNywweDI3MDAyNzI3LAotCTB4OGUwMDhlOGUsMHhiMjAwYjJiMiwweDQ5MDA0OTQ5LDB4ZGUwMGRlZGUsCi0JMHg0MzAwNDM0MywweDVjMDA1YzVjLDB4ZDcwMGQ3ZDcsMHhjNzAwYzdjNywKLQkweDNlMDAzZTNlLDB4ZjUwMGY1ZjUsMHg4ZjAwOGY4ZiwweDY3MDA2NzY3LAotCTB4MWYwMDFmMWYsMHgxODAwMTgxOCwweDZlMDA2ZTZlLDB4YWYwMGFmYWYsCi0JMHgyZjAwMmYyZiwweGUyMDBlMmUyLDB4ODUwMDg1ODUsMHgwZDAwMGQwZCwKLQkweDUzMDA1MzUzLDB4ZjAwMGYwZjAsMHg5YzAwOWM5YywweDY1MDA2NTY1LAotCTB4ZWEwMGVhZWEsMHhhMzAwYTNhMywweGFlMDBhZWFlLDB4OWUwMDllOWUsCi0JMHhlYzAwZWNlYywweDgwMDA4MDgwLDB4MmQwMDJkMmQsMHg2YjAwNmI2YiwKLQkweGE4MDBhOGE4LDB4MmIwMDJiMmIsMHgzNjAwMzYzNiwweGE2MDBhNmE2LAotCTB4YzUwMGM1YzUsMHg4NjAwODY4NiwweDRkMDA0ZDRkLDB4MzMwMDMzMzMsCi0JMHhmZDAwZmRmZCwweDY2MDA2NjY2LDB4NTgwMDU4NTgsMHg5NjAwOTY5NiwKLQkweDNhMDAzYTNhLDB4MDkwMDA5MDksMHg5NTAwOTU5NSwweDEwMDAxMDEwLAotCTB4NzgwMDc4NzgsMHhkODAwZDhkOCwweDQyMDA0MjQyLDB4Y2MwMGNjY2MsCi0JMHhlZjAwZWZlZiwweDI2MDAyNjI2LDB4ZTUwMGU1ZTUsMHg2MTAwNjE2MSwKLQkweDFhMDAxYTFhLDB4M2YwMDNmM2YsMHgzYjAwM2IzYiwweDgyMDA4MjgyLAotCTB4YjYwMGI2YjYsMHhkYjAwZGJkYiwweGQ0MDBkNGQ0LDB4OTgwMDk4OTgsCi0JMHhlODAwZThlOCwweDhiMDA4YjhiLDB4MDIwMDAyMDIsMHhlYjAwZWJlYiwKLQkweDBhMDAwYTBhLDB4MmMwMDJjMmMsMHgxZDAwMWQxZCwweGIwMDBiMGIwLAotCTB4NmYwMDZmNmYsMHg4ZDAwOGQ4ZCwweDg4MDA4ODg4LDB4MGUwMDBlMGUsCi0JMHgxOTAwMTkxOSwweDg3MDA4Nzg3LDB4NGUwMDRlNGUsMHgwYjAwMGIwYiwKLQkweGE5MDBhOWE5LDB4MGMwMDBjMGMsMHg3OTAwNzk3OSwweDExMDAxMTExLAotCTB4N2YwMDdmN2YsMHgyMjAwMjIyMiwweGU3MDBlN2U3LDB4NTkwMDU5NTksCi0JMHhlMTAwZTFlMSwweGRhMDBkYWRhLDB4M2QwMDNkM2QsMHhjODAwYzhjOCwKLQkweDEyMDAxMjEyLDB4MDQwMDA0MDQsMHg3NDAwNzQ3NCwweDU0MDA1NDU0LAotCTB4MzAwMDMwMzAsMHg3ZTAwN2U3ZSwweGI0MDBiNGI0LDB4MjgwMDI4MjgsCi0JMHg1NTAwNTU1NSwweDY4MDA2ODY4LDB4NTAwMDUwNTAsMHhiZTAwYmViZSwKLQkweGQwMDBkMGQwLDB4YzQwMGM0YzQsMHgzMTAwMzEzMSwweGNiMDBjYmNiLAotCTB4MmEwMDJhMmEsMHhhZDAwYWRhZCwweDBmMDAwZjBmLDB4Y2EwMGNhY2EsCi0JMHg3MDAwNzA3MCwweGZmMDBmZmZmLDB4MzIwMDMyMzIsMHg2OTAwNjk2OSwKLQkweDA4MDAwODA4LDB4NjIwMDYyNjIsMHgwMDAwMDAwMCwweDI0MDAyNDI0LAotCTB4ZDEwMGQxZDEsMHhmYjAwZmJmYiwweGJhMDBiYWJhLDB4ZWQwMGVkZWQsCi0JMHg0NTAwNDU0NSwweDgxMDA4MTgxLDB4NzMwMDczNzMsMHg2ZDAwNmQ2ZCwKLQkweDg0MDA4NDg0LDB4OWYwMDlmOWYsMHhlZTAwZWVlZSwweDRhMDA0YTRhLAotCTB4YzMwMGMzYzMsMHgyZTAwMmUyZSwweGMxMDBjMWMxLDB4MDEwMDAxMDEsCi0JMHhlNjAwZTZlNiwweDI1MDAyNTI1LDB4NDgwMDQ4NDgsMHg5OTAwOTk5OSwKLQkweGI5MDBiOWI5LDB4YjMwMGIzYjMsMHg3YjAwN2I3YiwweGY5MDBmOWY5LAotCTB4Y2UwMGNlY2UsMHhiZjAwYmZiZiwweGRmMDBkZmRmLDB4NzEwMDcxNzEsCi0JMHgyOTAwMjkyOSwweGNkMDBjZGNkLDB4NmMwMDZjNmMsMHgxMzAwMTMxMywKLQkweDY0MDA2NDY0LDB4OWIwMDliOWIsMHg2MzAwNjM2MywweDlkMDA5ZDlkLAotCTB4YzAwMGMwYzAsMHg0YjAwNGI0YiwweGI3MDBiN2I3LDB4YTUwMGE1YTUsCi0JMHg4OTAwODk4OSwweDVmMDA1ZjVmLDB4YjEwMGIxYjEsMHgxNzAwMTcxNywKLQkweGY0MDBmNGY0LDB4YmMwMGJjYmMsMHhkMzAwZDNkMywweDQ2MDA0NjQ2LAotCTB4Y2YwMGNmY2YsMHgzNzAwMzczNywweDVlMDA1ZTVlLDB4NDcwMDQ3NDcsCi0JMHg5NDAwOTQ5NCwweGZhMDBmYWZhLDB4ZmMwMGZjZmMsMHg1YjAwNWI1YiwKLQkweDk3MDA5Nzk3LDB4ZmUwMGZlZmUsMHg1YTAwNWE1YSwweGFjMDBhY2FjLAotCTB4M2MwMDNjM2MsMHg0YzAwNGM0YywweDAzMDAwMzAzLDB4MzUwMDM1MzUsCi0JMHhmMzAwZjNmMywweDIzMDAyMzIzLDB4YjgwMGI4YjgsMHg1ZDAwNWQ1ZCwKLQkweDZhMDA2YTZhLDB4OTIwMDkyOTIsMHhkNTAwZDVkNSwweDIxMDAyMTIxLAotCTB4NDQwMDQ0NDQsMHg1MTAwNTE1MSwweGM2MDBjNmM2LDB4N2QwMDdkN2QsCi0JMHgzOTAwMzkzOSwweDgzMDA4MzgzLDB4ZGMwMGRjZGMsMHhhYTAwYWFhYSwKLQkweDdjMDA3YzdjLDB4NzcwMDc3NzcsMHg1NjAwNTY1NiwweDA1MDAwNTA1LAotCTB4MWIwMDFiMWIsMHhhNDAwYTRhNCwweDE1MDAxNTE1LDB4MzQwMDM0MzQsCi0JMHgxZTAwMWUxZSwweDFjMDAxYzFjLDB4ZjgwMGY4ZjgsMHg1MjAwNTI1MiwKLQkweDIwMDAyMDIwLDB4MTQwMDE0MTQsMHhlOTAwZTllOSwweGJkMDBiZGJkLAotCTB4ZGQwMGRkZGQsMHhlNDAwZTRlNCwweGExMDBhMWExLDB4ZTAwMGUwZTAsCi0JMHg4YTAwOGE4YSwweGYxMDBmMWYxLDB4ZDYwMGQ2ZDYsMHg3YTAwN2E3YSwKLQkweGJiMDBiYmJiLDB4ZTMwMGUzZTMsMHg0MDAwNDA0MCwweDRmMDA0ZjRmLAorCTB4MzgwMDM4MzgsIDB4NDEwMDQxNDEsIDB4MTYwMDE2MTYsIDB4NzYwMDc2NzYsCisJMHhkOTAwZDlkOSwgMHg5MzAwOTM5MywgMHg2MDAwNjA2MCwgMHhmMjAwZjJmMiwKKwkweDcyMDA3MjcyLCAweGMyMDBjMmMyLCAweGFiMDBhYmFiLCAweDlhMDA5YTlhLAorCTB4NzUwMDc1NzUsIDB4MDYwMDA2MDYsIDB4NTcwMDU3NTcsIDB4YTAwMGEwYTAsCisJMHg5MTAwOTE5MSwgMHhmNzAwZjdmNywgMHhiNTAwYjViNSwgMHhjOTAwYzljOSwKKwkweGEyMDBhMmEyLCAweDhjMDA4YzhjLCAweGQyMDBkMmQyLCAweDkwMDA5MDkwLAorCTB4ZjYwMGY2ZjYsIDB4MDcwMDA3MDcsIDB4YTcwMGE3YTcsIDB4MjcwMDI3MjcsCisJMHg4ZTAwOGU4ZSwgMHhiMjAwYjJiMiwgMHg0OTAwNDk0OSwgMHhkZTAwZGVkZSwKKwkweDQzMDA0MzQzLCAweDVjMDA1YzVjLCAweGQ3MDBkN2Q3LCAweGM3MDBjN2M3LAorCTB4M2UwMDNlM2UsIDB4ZjUwMGY1ZjUsIDB4OGYwMDhmOGYsIDB4NjcwMDY3NjcsCisJMHgxZjAwMWYxZiwgMHgxODAwMTgxOCwgMHg2ZTAwNmU2ZSwgMHhhZjAwYWZhZiwKKwkweDJmMDAyZjJmLCAweGUyMDBlMmUyLCAweDg1MDA4NTg1LCAweDBkMDAwZDBkLAorCTB4NTMwMDUzNTMsIDB4ZjAwMGYwZjAsIDB4OWMwMDljOWMsIDB4NjUwMDY1NjUsCisJMHhlYTAwZWFlYSwgMHhhMzAwYTNhMywgMHhhZTAwYWVhZSwgMHg5ZTAwOWU5ZSwKKwkweGVjMDBlY2VjLCAweDgwMDA4MDgwLCAweDJkMDAyZDJkLCAweDZiMDA2YjZiLAorCTB4YTgwMGE4YTgsIDB4MmIwMDJiMmIsIDB4MzYwMDM2MzYsIDB4YTYwMGE2YTYsCisJMHhjNTAwYzVjNSwgMHg4NjAwODY4NiwgMHg0ZDAwNGQ0ZCwgMHgzMzAwMzMzMywKKwkweGZkMDBmZGZkLCAweDY2MDA2NjY2LCAweDU4MDA1ODU4LCAweDk2MDA5Njk2LAorCTB4M2EwMDNhM2EsIDB4MDkwMDA5MDksIDB4OTUwMDk1OTUsIDB4MTAwMDEwMTAsCisJMHg3ODAwNzg3OCwgMHhkODAwZDhkOCwgMHg0MjAwNDI0MiwgMHhjYzAwY2NjYywKKwkweGVmMDBlZmVmLCAweDI2MDAyNjI2LCAweGU1MDBlNWU1LCAweDYxMDA2MTYxLAorCTB4MWEwMDFhMWEsIDB4M2YwMDNmM2YsIDB4M2IwMDNiM2IsIDB4ODIwMDgyODIsCisJMHhiNjAwYjZiNiwgMHhkYjAwZGJkYiwgMHhkNDAwZDRkNCwgMHg5ODAwOTg5OCwKKwkweGU4MDBlOGU4LCAweDhiMDA4YjhiLCAweDAyMDAwMjAyLCAweGViMDBlYmViLAorCTB4MGEwMDBhMGEsIDB4MmMwMDJjMmMsIDB4MWQwMDFkMWQsIDB4YjAwMGIwYjAsCisJMHg2ZjAwNmY2ZiwgMHg4ZDAwOGQ4ZCwgMHg4ODAwODg4OCwgMHgwZTAwMGUwZSwKKwkweDE5MDAxOTE5LCAweDg3MDA4Nzg3LCAweDRlMDA0ZTRlLCAweDBiMDAwYjBiLAorCTB4YTkwMGE5YTksIDB4MGMwMDBjMGMsIDB4NzkwMDc5NzksIDB4MTEwMDExMTEsCisJMHg3ZjAwN2Y3ZiwgMHgyMjAwMjIyMiwgMHhlNzAwZTdlNywgMHg1OTAwNTk1OSwKKwkweGUxMDBlMWUxLCAweGRhMDBkYWRhLCAweDNkMDAzZDNkLCAweGM4MDBjOGM4LAorCTB4MTIwMDEyMTIsIDB4MDQwMDA0MDQsIDB4NzQwMDc0NzQsIDB4NTQwMDU0NTQsCisJMHgzMDAwMzAzMCwgMHg3ZTAwN2U3ZSwgMHhiNDAwYjRiNCwgMHgyODAwMjgyOCwKKwkweDU1MDA1NTU1LCAweDY4MDA2ODY4LCAweDUwMDA1MDUwLCAweGJlMDBiZWJlLAorCTB4ZDAwMGQwZDAsIDB4YzQwMGM0YzQsIDB4MzEwMDMxMzEsIDB4Y2IwMGNiY2IsCisJMHgyYTAwMmEyYSwgMHhhZDAwYWRhZCwgMHgwZjAwMGYwZiwgMHhjYTAwY2FjYSwKKwkweDcwMDA3MDcwLCAweGZmMDBmZmZmLCAweDMyMDAzMjMyLCAweDY5MDA2OTY5LAorCTB4MDgwMDA4MDgsIDB4NjIwMDYyNjIsIDB4MDAwMDAwMDAsIDB4MjQwMDI0MjQsCisJMHhkMTAwZDFkMSwgMHhmYjAwZmJmYiwgMHhiYTAwYmFiYSwgMHhlZDAwZWRlZCwKKwkweDQ1MDA0NTQ1LCAweDgxMDA4MTgxLCAweDczMDA3MzczLCAweDZkMDA2ZDZkLAorCTB4ODQwMDg0ODQsIDB4OWYwMDlmOWYsIDB4ZWUwMGVlZWUsIDB4NGEwMDRhNGEsCisJMHhjMzAwYzNjMywgMHgyZTAwMmUyZSwgMHhjMTAwYzFjMSwgMHgwMTAwMDEwMSwKKwkweGU2MDBlNmU2LCAweDI1MDAyNTI1LCAweDQ4MDA0ODQ4LCAweDk5MDA5OTk5LAorCTB4YjkwMGI5YjksIDB4YjMwMGIzYjMsIDB4N2IwMDdiN2IsIDB4ZjkwMGY5ZjksCisJMHhjZTAwY2VjZSwgMHhiZjAwYmZiZiwgMHhkZjAwZGZkZiwgMHg3MTAwNzE3MSwKKwkweDI5MDAyOTI5LCAweGNkMDBjZGNkLCAweDZjMDA2YzZjLCAweDEzMDAxMzEzLAorCTB4NjQwMDY0NjQsIDB4OWIwMDliOWIsIDB4NjMwMDYzNjMsIDB4OWQwMDlkOWQsCisJMHhjMDAwYzBjMCwgMHg0YjAwNGI0YiwgMHhiNzAwYjdiNywgMHhhNTAwYTVhNSwKKwkweDg5MDA4OTg5LCAweDVmMDA1ZjVmLCAweGIxMDBiMWIxLCAweDE3MDAxNzE3LAorCTB4ZjQwMGY0ZjQsIDB4YmMwMGJjYmMsIDB4ZDMwMGQzZDMsIDB4NDYwMDQ2NDYsCisJMHhjZjAwY2ZjZiwgMHgzNzAwMzczNywgMHg1ZTAwNWU1ZSwgMHg0NzAwNDc0NywKKwkweDk0MDA5NDk0LCAweGZhMDBmYWZhLCAweGZjMDBmY2ZjLCAweDViMDA1YjViLAorCTB4OTcwMDk3OTcsIDB4ZmUwMGZlZmUsIDB4NWEwMDVhNWEsIDB4YWMwMGFjYWMsCisJMHgzYzAwM2MzYywgMHg0YzAwNGM0YywgMHgwMzAwMDMwMywgMHgzNTAwMzUzNSwKKwkweGYzMDBmM2YzLCAweDIzMDAyMzIzLCAweGI4MDBiOGI4LCAweDVkMDA1ZDVkLAorCTB4NmEwMDZhNmEsIDB4OTIwMDkyOTIsIDB4ZDUwMGQ1ZDUsIDB4MjEwMDIxMjEsCisJMHg0NDAwNDQ0NCwgMHg1MTAwNTE1MSwgMHhjNjAwYzZjNiwgMHg3ZDAwN2Q3ZCwKKwkweDM5MDAzOTM5LCAweDgzMDA4MzgzLCAweGRjMDBkY2RjLCAweGFhMDBhYWFhLAorCTB4N2MwMDdjN2MsIDB4NzcwMDc3NzcsIDB4NTYwMDU2NTYsIDB4MDUwMDA1MDUsCisJMHgxYjAwMWIxYiwgMHhhNDAwYTRhNCwgMHgxNTAwMTUxNSwgMHgzNDAwMzQzNCwKKwkweDFlMDAxZTFlLCAweDFjMDAxYzFjLCAweGY4MDBmOGY4LCAweDUyMDA1MjUyLAorCTB4MjAwMDIwMjAsIDB4MTQwMDE0MTQsIDB4ZTkwMGU5ZTksIDB4YmQwMGJkYmQsCisJMHhkZDAwZGRkZCwgMHhlNDAwZTRlNCwgMHhhMTAwYTFhMSwgMHhlMDAwZTBlMCwKKwkweDhhMDA4YThhLCAweGYxMDBmMWYxLCAweGQ2MDBkNmQ2LCAweDdhMDA3YTdhLAorCTB4YmIwMGJiYmIsIDB4ZTMwMGUzZTMsIDB4NDAwMDQwNDAsIDB4NGYwMDRmNGYsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwNDQwNFsyNTZdID0gewotCTB4NzA3MDAwNzAsMHgyYzJjMDAyYywweGIzYjMwMGIzLDB4YzBjMDAwYzAsCi0JMHhlNGU0MDBlNCwweDU3NTcwMDU3LDB4ZWFlYTAwZWEsMHhhZWFlMDBhZSwKLQkweDIzMjMwMDIzLDB4NmI2YjAwNmIsMHg0NTQ1MDA0NSwweGE1YTUwMGE1LAotCTB4ZWRlZDAwZWQsMHg0ZjRmMDA0ZiwweDFkMWQwMDFkLDB4OTI5MjAwOTIsCi0JMHg4Njg2MDA4NiwweGFmYWYwMGFmLDB4N2M3YzAwN2MsMHgxZjFmMDAxZiwKLQkweDNlM2UwMDNlLDB4ZGNkYzAwZGMsMHg1ZTVlMDA1ZSwweDBiMGIwMDBiLAotCTB4YTZhNjAwYTYsMHgzOTM5MDAzOSwweGQ1ZDUwMGQ1LDB4NWQ1ZDAwNWQsCi0JMHhkOWQ5MDBkOSwweDVhNWEwMDVhLDB4NTE1MTAwNTEsMHg2YzZjMDA2YywKLQkweDhiOGIwMDhiLDB4OWE5YTAwOWEsMHhmYmZiMDBmYiwweGIwYjAwMGIwLAotCTB4NzQ3NDAwNzQsMHgyYjJiMDAyYiwweGYwZjAwMGYwLDB4ODQ4NDAwODQsCi0JMHhkZmRmMDBkZiwweGNiY2IwMGNiLDB4MzQzNDAwMzQsMHg3Njc2MDA3NiwKLQkweDZkNmQwMDZkLDB4YTlhOTAwYTksMHhkMWQxMDBkMSwweDA0MDQwMDA0LAotCTB4MTQxNDAwMTQsMHgzYTNhMDAzYSwweGRlZGUwMGRlLDB4MTExMTAwMTEsCi0JMHgzMjMyMDAzMiwweDljOWMwMDljLDB4NTM1MzAwNTMsMHhmMmYyMDBmMiwKLQkweGZlZmUwMGZlLDB4Y2ZjZjAwY2YsMHhjM2MzMDBjMywweDdhN2EwMDdhLAotCTB4MjQyNDAwMjQsMHhlOGU4MDBlOCwweDYwNjAwMDYwLDB4Njk2OTAwNjksCi0JMHhhYWFhMDBhYSwweGEwYTAwMGEwLDB4YTFhMTAwYTEsMHg2MjYyMDA2MiwKLQkweDU0NTQwMDU0LDB4MWUxZTAwMWUsMHhlMGUwMDBlMCwweDY0NjQwMDY0LAotCTB4MTAxMDAwMTAsMHgwMDAwMDAwMCwweGEzYTMwMGEzLDB4NzU3NTAwNzUsCi0JMHg4YThhMDA4YSwweGU2ZTYwMGU2LDB4MDkwOTAwMDksMHhkZGRkMDBkZCwKLQkweDg3ODcwMDg3LDB4ODM4MzAwODMsMHhjZGNkMDBjZCwweDkwOTAwMDkwLAotCTB4NzM3MzAwNzMsMHhmNmY2MDBmNiwweDlkOWQwMDlkLDB4YmZiZjAwYmYsCi0JMHg1MjUyMDA1MiwweGQ4ZDgwMGQ4LDB4YzhjODAwYzgsMHhjNmM2MDBjNiwKLQkweDgxODEwMDgxLDB4NmY2ZjAwNmYsMHgxMzEzMDAxMywweDYzNjMwMDYzLAotCTB4ZTllOTAwZTksMHhhN2E3MDBhNywweDlmOWYwMDlmLDB4YmNiYzAwYmMsCi0JMHgyOTI5MDAyOSwweGY5ZjkwMGY5LDB4MmYyZjAwMmYsMHhiNGI0MDBiNCwKLQkweDc4NzgwMDc4LDB4MDYwNjAwMDYsMHhlN2U3MDBlNywweDcxNzEwMDcxLAotCTB4ZDRkNDAwZDQsMHhhYmFiMDBhYiwweDg4ODgwMDg4LDB4OGQ4ZDAwOGQsCi0JMHg3MjcyMDA3MiwweGI5YjkwMGI5LDB4ZjhmODAwZjgsMHhhY2FjMDBhYywKLQkweDM2MzYwMDM2LDB4MmEyYTAwMmEsMHgzYzNjMDAzYywweGYxZjEwMGYxLAotCTB4NDA0MDAwNDAsMHhkM2QzMDBkMywweGJiYmIwMGJiLDB4NDM0MzAwNDMsCi0JMHgxNTE1MDAxNSwweGFkYWQwMGFkLDB4Nzc3NzAwNzcsMHg4MDgwMDA4MCwKLQkweDgyODIwMDgyLDB4ZWNlYzAwZWMsMHgyNzI3MDAyNywweGU1ZTUwMGU1LAotCTB4ODU4NTAwODUsMHgzNTM1MDAzNSwweDBjMGMwMDBjLDB4NDE0MTAwNDEsCi0JMHhlZmVmMDBlZiwweDkzOTMwMDkzLDB4MTkxOTAwMTksMHgyMTIxMDAyMSwKLQkweDBlMGUwMDBlLDB4NGU0ZTAwNGUsMHg2NTY1MDA2NSwweGJkYmQwMGJkLAotCTB4YjhiODAwYjgsMHg4ZjhmMDA4ZiwweGViZWIwMGViLDB4Y2VjZTAwY2UsCi0JMHgzMDMwMDAzMCwweDVmNWYwMDVmLDB4YzVjNTAwYzUsMHgxYTFhMDAxYSwKLQkweGUxZTEwMGUxLDB4Y2FjYTAwY2EsMHg0NzQ3MDA0NywweDNkM2QwMDNkLAotCTB4MDEwMTAwMDEsMHhkNmQ2MDBkNiwweDU2NTYwMDU2LDB4NGQ0ZDAwNGQsCi0JMHgwZDBkMDAwZCwweDY2NjYwMDY2LDB4Y2NjYzAwY2MsMHgyZDJkMDAyZCwKLQkweDEyMTIwMDEyLDB4MjAyMDAwMjAsMHhiMWIxMDBiMSwweDk5OTkwMDk5LAotCTB4NGM0YzAwNGMsMHhjMmMyMDBjMiwweDdlN2UwMDdlLDB4MDUwNTAwMDUsCi0JMHhiN2I3MDBiNywweDMxMzEwMDMxLDB4MTcxNzAwMTcsMHhkN2Q3MDBkNywKLQkweDU4NTgwMDU4LDB4NjE2MTAwNjEsMHgxYjFiMDAxYiwweDFjMWMwMDFjLAotCTB4MGYwZjAwMGYsMHgxNjE2MDAxNiwweDE4MTgwMDE4LDB4MjIyMjAwMjIsCi0JMHg0NDQ0MDA0NCwweGIyYjIwMGIyLDB4YjViNTAwYjUsMHg5MTkxMDA5MSwKLQkweDA4MDgwMDA4LDB4YThhODAwYTgsMHhmY2ZjMDBmYywweDUwNTAwMDUwLAotCTB4ZDBkMDAwZDAsMHg3ZDdkMDA3ZCwweDg5ODkwMDg5LDB4OTc5NzAwOTcsCi0JMHg1YjViMDA1YiwweDk1OTUwMDk1LDB4ZmZmZjAwZmYsMHhkMmQyMDBkMiwKLQkweGM0YzQwMGM0LDB4NDg0ODAwNDgsMHhmN2Y3MDBmNywweGRiZGIwMGRiLAotCTB4MDMwMzAwMDMsMHhkYWRhMDBkYSwweDNmM2YwMDNmLDB4OTQ5NDAwOTQsCi0JMHg1YzVjMDA1YywweDAyMDIwMDAyLDB4NGE0YTAwNGEsMHgzMzMzMDAzMywKLQkweDY3NjcwMDY3LDB4ZjNmMzAwZjMsMHg3ZjdmMDA3ZiwweGUyZTIwMGUyLAotCTB4OWI5YjAwOWIsMHgyNjI2MDAyNiwweDM3MzcwMDM3LDB4M2IzYjAwM2IsCi0JMHg5Njk2MDA5NiwweDRiNGIwMDRiLDB4YmViZTAwYmUsMHgyZTJlMDAyZSwKLQkweDc5NzkwMDc5LDB4OGM4YzAwOGMsMHg2ZTZlMDA2ZSwweDhlOGUwMDhlLAotCTB4ZjVmNTAwZjUsMHhiNmI2MDBiNiwweGZkZmQwMGZkLDB4NTk1OTAwNTksCi0JMHg5ODk4MDA5OCwweDZhNmEwMDZhLDB4NDY0NjAwNDYsMHhiYWJhMDBiYSwKLQkweDI1MjUwMDI1LDB4NDI0MjAwNDIsMHhhMmEyMDBhMiwweGZhZmEwMGZhLAotCTB4MDcwNzAwMDcsMHg1NTU1MDA1NSwweGVlZWUwMGVlLDB4MGEwYTAwMGEsCi0JMHg0OTQ5MDA0OSwweDY4NjgwMDY4LDB4MzgzODAwMzgsMHhhNGE0MDBhNCwKLQkweDI4MjgwMDI4LDB4N2I3YjAwN2IsMHhjOWM5MDBjOSwweGMxYzEwMGMxLAotCTB4ZTNlMzAwZTMsMHhmNGY0MDBmNCwweGM3YzcwMGM3LDB4OWU5ZTAwOWUsCisJMHg3MDcwMDA3MCwgMHgyYzJjMDAyYywgMHhiM2IzMDBiMywgMHhjMGMwMDBjMCwKKwkweGU0ZTQwMGU0LCAweDU3NTcwMDU3LCAweGVhZWEwMGVhLCAweGFlYWUwMGFlLAorCTB4MjMyMzAwMjMsIDB4NmI2YjAwNmIsIDB4NDU0NTAwNDUsIDB4YTVhNTAwYTUsCisJMHhlZGVkMDBlZCwgMHg0ZjRmMDA0ZiwgMHgxZDFkMDAxZCwgMHg5MjkyMDA5MiwKKwkweDg2ODYwMDg2LCAweGFmYWYwMGFmLCAweDdjN2MwMDdjLCAweDFmMWYwMDFmLAorCTB4M2UzZTAwM2UsIDB4ZGNkYzAwZGMsIDB4NWU1ZTAwNWUsIDB4MGIwYjAwMGIsCisJMHhhNmE2MDBhNiwgMHgzOTM5MDAzOSwgMHhkNWQ1MDBkNSwgMHg1ZDVkMDA1ZCwKKwkweGQ5ZDkwMGQ5LCAweDVhNWEwMDVhLCAweDUxNTEwMDUxLCAweDZjNmMwMDZjLAorCTB4OGI4YjAwOGIsIDB4OWE5YTAwOWEsIDB4ZmJmYjAwZmIsIDB4YjBiMDAwYjAsCisJMHg3NDc0MDA3NCwgMHgyYjJiMDAyYiwgMHhmMGYwMDBmMCwgMHg4NDg0MDA4NCwKKwkweGRmZGYwMGRmLCAweGNiY2IwMGNiLCAweDM0MzQwMDM0LCAweDc2NzYwMDc2LAorCTB4NmQ2ZDAwNmQsIDB4YTlhOTAwYTksIDB4ZDFkMTAwZDEsIDB4MDQwNDAwMDQsCisJMHgxNDE0MDAxNCwgMHgzYTNhMDAzYSwgMHhkZWRlMDBkZSwgMHgxMTExMDAxMSwKKwkweDMyMzIwMDMyLCAweDljOWMwMDljLCAweDUzNTMwMDUzLCAweGYyZjIwMGYyLAorCTB4ZmVmZTAwZmUsIDB4Y2ZjZjAwY2YsIDB4YzNjMzAwYzMsIDB4N2E3YTAwN2EsCisJMHgyNDI0MDAyNCwgMHhlOGU4MDBlOCwgMHg2MDYwMDA2MCwgMHg2OTY5MDA2OSwKKwkweGFhYWEwMGFhLCAweGEwYTAwMGEwLCAweGExYTEwMGExLCAweDYyNjIwMDYyLAorCTB4NTQ1NDAwNTQsIDB4MWUxZTAwMWUsIDB4ZTBlMDAwZTAsIDB4NjQ2NDAwNjQsCisJMHgxMDEwMDAxMCwgMHgwMDAwMDAwMCwgMHhhM2EzMDBhMywgMHg3NTc1MDA3NSwKKwkweDhhOGEwMDhhLCAweGU2ZTYwMGU2LCAweDA5MDkwMDA5LCAweGRkZGQwMGRkLAorCTB4ODc4NzAwODcsIDB4ODM4MzAwODMsIDB4Y2RjZDAwY2QsIDB4OTA5MDAwOTAsCisJMHg3MzczMDA3MywgMHhmNmY2MDBmNiwgMHg5ZDlkMDA5ZCwgMHhiZmJmMDBiZiwKKwkweDUyNTIwMDUyLCAweGQ4ZDgwMGQ4LCAweGM4YzgwMGM4LCAweGM2YzYwMGM2LAorCTB4ODE4MTAwODEsIDB4NmY2ZjAwNmYsIDB4MTMxMzAwMTMsIDB4NjM2MzAwNjMsCisJMHhlOWU5MDBlOSwgMHhhN2E3MDBhNywgMHg5ZjlmMDA5ZiwgMHhiY2JjMDBiYywKKwkweDI5MjkwMDI5LCAweGY5ZjkwMGY5LCAweDJmMmYwMDJmLCAweGI0YjQwMGI0LAorCTB4Nzg3ODAwNzgsIDB4MDYwNjAwMDYsIDB4ZTdlNzAwZTcsIDB4NzE3MTAwNzEsCisJMHhkNGQ0MDBkNCwgMHhhYmFiMDBhYiwgMHg4ODg4MDA4OCwgMHg4ZDhkMDA4ZCwKKwkweDcyNzIwMDcyLCAweGI5YjkwMGI5LCAweGY4ZjgwMGY4LCAweGFjYWMwMGFjLAorCTB4MzYzNjAwMzYsIDB4MmEyYTAwMmEsIDB4M2MzYzAwM2MsIDB4ZjFmMTAwZjEsCisJMHg0MDQwMDA0MCwgMHhkM2QzMDBkMywgMHhiYmJiMDBiYiwgMHg0MzQzMDA0MywKKwkweDE1MTUwMDE1LCAweGFkYWQwMGFkLCAweDc3NzcwMDc3LCAweDgwODAwMDgwLAorCTB4ODI4MjAwODIsIDB4ZWNlYzAwZWMsIDB4MjcyNzAwMjcsIDB4ZTVlNTAwZTUsCisJMHg4NTg1MDA4NSwgMHgzNTM1MDAzNSwgMHgwYzBjMDAwYywgMHg0MTQxMDA0MSwKKwkweGVmZWYwMGVmLCAweDkzOTMwMDkzLCAweDE5MTkwMDE5LCAweDIxMjEwMDIxLAorCTB4MGUwZTAwMGUsIDB4NGU0ZTAwNGUsIDB4NjU2NTAwNjUsIDB4YmRiZDAwYmQsCisJMHhiOGI4MDBiOCwgMHg4ZjhmMDA4ZiwgMHhlYmViMDBlYiwgMHhjZWNlMDBjZSwKKwkweDMwMzAwMDMwLCAweDVmNWYwMDVmLCAweGM1YzUwMGM1LCAweDFhMWEwMDFhLAorCTB4ZTFlMTAwZTEsIDB4Y2FjYTAwY2EsIDB4NDc0NzAwNDcsIDB4M2QzZDAwM2QsCisJMHgwMTAxMDAwMSwgMHhkNmQ2MDBkNiwgMHg1NjU2MDA1NiwgMHg0ZDRkMDA0ZCwKKwkweDBkMGQwMDBkLCAweDY2NjYwMDY2LCAweGNjY2MwMGNjLCAweDJkMmQwMDJkLAorCTB4MTIxMjAwMTIsIDB4MjAyMDAwMjAsIDB4YjFiMTAwYjEsIDB4OTk5OTAwOTksCisJMHg0YzRjMDA0YywgMHhjMmMyMDBjMiwgMHg3ZTdlMDA3ZSwgMHgwNTA1MDAwNSwKKwkweGI3YjcwMGI3LCAweDMxMzEwMDMxLCAweDE3MTcwMDE3LCAweGQ3ZDcwMGQ3LAorCTB4NTg1ODAwNTgsIDB4NjE2MTAwNjEsIDB4MWIxYjAwMWIsIDB4MWMxYzAwMWMsCisJMHgwZjBmMDAwZiwgMHgxNjE2MDAxNiwgMHgxODE4MDAxOCwgMHgyMjIyMDAyMiwKKwkweDQ0NDQwMDQ0LCAweGIyYjIwMGIyLCAweGI1YjUwMGI1LCAweDkxOTEwMDkxLAorCTB4MDgwODAwMDgsIDB4YThhODAwYTgsIDB4ZmNmYzAwZmMsIDB4NTA1MDAwNTAsCisJMHhkMGQwMDBkMCwgMHg3ZDdkMDA3ZCwgMHg4OTg5MDA4OSwgMHg5Nzk3MDA5NywKKwkweDViNWIwMDViLCAweDk1OTUwMDk1LCAweGZmZmYwMGZmLCAweGQyZDIwMGQyLAorCTB4YzRjNDAwYzQsIDB4NDg0ODAwNDgsIDB4ZjdmNzAwZjcsIDB4ZGJkYjAwZGIsCisJMHgwMzAzMDAwMywgMHhkYWRhMDBkYSwgMHgzZjNmMDAzZiwgMHg5NDk0MDA5NCwKKwkweDVjNWMwMDVjLCAweDAyMDIwMDAyLCAweDRhNGEwMDRhLCAweDMzMzMwMDMzLAorCTB4Njc2NzAwNjcsIDB4ZjNmMzAwZjMsIDB4N2Y3ZjAwN2YsIDB4ZTJlMjAwZTIsCisJMHg5YjliMDA5YiwgMHgyNjI2MDAyNiwgMHgzNzM3MDAzNywgMHgzYjNiMDAzYiwKKwkweDk2OTYwMDk2LCAweDRiNGIwMDRiLCAweGJlYmUwMGJlLCAweDJlMmUwMDJlLAorCTB4Nzk3OTAwNzksIDB4OGM4YzAwOGMsIDB4NmU2ZTAwNmUsIDB4OGU4ZTAwOGUsCisJMHhmNWY1MDBmNSwgMHhiNmI2MDBiNiwgMHhmZGZkMDBmZCwgMHg1OTU5MDA1OSwKKwkweDk4OTgwMDk4LCAweDZhNmEwMDZhLCAweDQ2NDYwMDQ2LCAweGJhYmEwMGJhLAorCTB4MjUyNTAwMjUsIDB4NDI0MjAwNDIsIDB4YTJhMjAwYTIsIDB4ZmFmYTAwZmEsCisJMHgwNzA3MDAwNywgMHg1NTU1MDA1NSwgMHhlZWVlMDBlZSwgMHgwYTBhMDAwYSwKKwkweDQ5NDkwMDQ5LCAweDY4NjgwMDY4LCAweDM4MzgwMDM4LCAweGE0YTQwMGE0LAorCTB4MjgyODAwMjgsIDB4N2I3YjAwN2IsIDB4YzljOTAwYzksIDB4YzFjMTAwYzEsCisJMHhlM2UzMDBlMywgMHhmNGY0MDBmNCwgMHhjN2M3MDBjNywgMHg5ZTllMDA5ZSwKIH07CiAKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJbHIgPSAobHIgPDwgYml0cykgKyAocmwgPj4gKDMyIC0gYml0cykpOwlcCiAJcmwgPSAocmwgPDwgYml0cykgKyAocnIgPj4gKDMyIC0gYml0cykpOwlcCiAJcnIgPSAocnIgPDwgYml0cykgKyAodzAgPj4gKDMyIC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUk9MRFFvMzIobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJCVwKICAgICBkbyB7CQkJCQkJXApAQCAtMzU0LDcgKzM1NCw3IEBACiAJbHIgPSAocmwgPDwgKGJpdHMgLSAzMikpICsgKHJyID4+ICg2NCAtIGJpdHMpKTsJXAogCXJsID0gKHJyIDw8IChiaXRzIC0gMzIpKSArICh3MCA+PiAoNjQgLSBiaXRzKSk7CVwKIAlyciA9ICh3MCA8PCAoYml0cyAtIDMyKSkgKyAodzEgPj4gKDY0IC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0FNRUxMSUFfRih4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIsIHQwLCB0MSkJXAogICAgIGRvIHsJCQkJCQkJXApAQCAtMzczLDcgKzM3Myw3IEBACiAJeWwgXj0geXI7CQkJCQkJXAogCXlyID0gcm9yMzIoeXIsIDgpOwkJCQkJXAogCXlyIF49IHlsOwkJCQkJCVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTVUJLRVlfTChJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjJdKQogI2RlZmluZSBTVUJLRVlfUihJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjIgKyAxXSkKQEAgLTgzNSw3ICs4MzUsNyBAQAogc3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAxOTIoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSkKIHsKIAl1bnNpZ25lZCBjaGFyIGtrWzMyXTsKLQl1MzIga3JsbCwga3Jsciwga3JybCxrcnJyOworCXUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOwogCiAJbWVtY3B5KGtrLCBrZXksIDI0KTsKIAltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikma3JsbCwga2V5KzE2LCA0KTsKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXQxIHw9IGxyOwkJCQkJCQlcCiAJbGwgXj0gdDE7CQkJCQkJCVwKIAlyciBePSByb2wzMih0MywgMSk7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENBTUVMTElBX1JPVU5EU00oeGwsIHhyLCBrbCwga3IsIHlsLCB5ciwgaWwsIGlyKQkJXAogICAgIGRvIHsJCQkJCQkJCVwKQEAgLTg4MSwxMiArODgxLDEyIEBACiAJaXIgXj0gaWwgXiBrcjsJCQkJCQkJXAogCXlsIF49IGlyOwkJCQkJCQlcCiAJeXIgXj0gcm9yMzIoaWwsIDgpIF4gaXI7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAvKiBtYXggPSAyNDogMTI4Yml0IGVuY3J5cHQsIG1heCA9IDMyOiAyNTZiaXQgZW5jcnlwdCAqLwogc3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KQogewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovCisJdTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KIAogCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIgKi8KIAlpb1swXSBePSBTVUJLRVlfTCgwKTsKQEAgLTg5NCwzMCArODk0LDMwIEBACiAKIAkvKiBtYWluIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBST1VORFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDMpLFNVQktFWV9SKGkgKyAzKSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNCksU1VCS0VZX1IoaSArIDQpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDYpLFNVQktFWV9SKGkgKyA2KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNyksU1VCS0VZX1IoaSArIDcpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMiksIFNVQktFWV9SKGkgKyAyKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDMpLCBTVUJLRVlfUihpICsgMyksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNSksIFNVQktFWV9SKGkgKyA1KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDYpLCBTVUJLRVlfUihpICsgNiksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogI2RlZmluZSBGTFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIFNVQktFWV9MKGkgKyAxKSxTVUJLRVlfUihpICsgMSksIFwKLQkJICAgICB0MCx0MSxpbCxpcik7IFwKKwlDQU1FTExJQV9GTFMoaW9bMF0sIGlvWzFdLCBpb1syXSwgaW9bM10sIFwKKwkJICAgICBTVUJLRVlfTChpICsgMCksIFNVQktFWV9SKGkgKyAwKSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgdDAsIHQxLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogCiAJUk9VTkRTKDApOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGNhbWVsbGlhX2RvX2RlY3J5cHQoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8sIHVuc2lnbmVkIGkpCiB7Ci0JdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KKwl1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLwogCiAJLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiAqLwogCWlvWzBdIF49IFNVQktFWV9MKGkpOwpAQCAtOTQ5LDMwICs5NDksMzAgQEAKIAogCS8qIG1haW4gaXRlcmF0aW9uICovCiAjZGVmaW5lIFJPVU5EUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDcpLFNVQktFWV9SKGkgKyA3KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNiksU1VCS0VZX1IoaSArIDYpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDQpLFNVQktFWV9SKGkgKyA0KSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgMyksU1VCS0VZX1IoaSArIDMpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNiksIFNVQktFWV9SKGkgKyA2KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDUpLCBTVUJLRVlfUihpICsgNSksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMyksIFNVQktFWV9SKGkgKyAzKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDIpLCBTVUJLRVlfUihpICsgMiksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEZMUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sIFwKLQkJICAgICBTVUJLRVlfTChpICsgMSksU1VCS0VZX1IoaSArIDEpLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIHQwLHQxLGlsLGlyKTsgXAorCUNBTUVMTElBX0ZMUyhpb1swXSwgaW9bMV0sIGlvWzJdLCBpb1szXSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDApLCBTVUJLRVlfUihpICsgMCksIFwKKwkJICAgICB0MCwgdDEsIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAKIAlpZiAoaSA9PSAzMikgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCA4Y2JlMjhmLi5hMWQyMjk0IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtNTY5LDEyICs1NjksMTIgQEAKIAkweGVhZWU2ODAxLCAweDhkYjJhMjgzLCAweGVhOGJmNTllCiB9OwogCi0jZGVmaW5lIEYxKEQsbSxyKSAgKCAgKEkgPSAoKG0pICsgKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkgKQotI2RlZmluZSBGMihELG0scikgICggIChJID0gKChtKSBeIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjMoRCxtLHIpICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYxKEQsIG0sIHIpICAoKEkgPSAoKG0pICsgKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkpCisjZGVmaW5lIEYyKEQsIG0sIHIpICAoKEkgPSAoKG0pIF4gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkpCisjZGVmaW5lIEYzKEQsIG0sIHIpICAoKEkgPSAoKG0pIC0gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkpCiAKIAogc3RhdGljIHZvaWQgY2FzdDVfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCkBAIC02OTQsNyArNjk0LDcgQEAKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihsKTsKIH0KIAotc3RhdGljIHZvaWQga2V5X3NjaGVkdWxlKHUzMiAqIHgsIHUzMiAqIHosIHUzMiAqIGspCitzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICp4LCB1MzIgKnosIHUzMiAqaykKIHsKIAogI2RlZmluZSB4aShpKSAgICgoeFsoaSkvNF0gPj4gKDgqKDMtKChpKSU0KSkpKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDYuYyBiL2NyeXB0by9jYXN0Ni5jCmluZGV4IDAwN2QwMmIuLmUwYzE1YTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0Ni5jCisrKyBiL2NyeXB0by9jYXN0Ni5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQpAQCAtMzUsMTIgKzM1LDEyIEBACiAJdTggS3JbMTJdWzRdOwogfTsKIAotI2RlZmluZSBGMShELHIsbSkgICggIChJID0gKChtKSArIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjIoRCxyLG0pICAoICAoSSA9ICgobSkgXiAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gLSBzMlsoST4+MTYpJjB4ZmZdKSArIHMzWyhJPj44KSYweGZmXSkgXiBzNFtJJjB4ZmZdKSApCi0jZGVmaW5lIEYzKEQscixtKSAgKCAgKEkgPSAoKG0pIC0gKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkgKQorI2RlZmluZSBGMShELCByLCBtKSAgKChJID0gKChtKSArIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMihELCByLCBtKSAgKChJID0gKChtKSBeIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMyhELCByLCBtKSAgKChJID0gKChtKSAtIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSArIHMyWyhJPj4xNikmMHhmZl0pIF4gczNbKEk+PjgpJjB4ZmZdKSAtIHM0W0kmMHhmZl0pKQogCiBzdGF0aWMgY29uc3QgdTMyIHMxWzI1Nl0gPSB7CiAJMHgzMGZiNDBkNCwgMHg5ZmEwZmYwYiwgMHg2YmVjY2QyZiwgMHgzZjI1OGM3YSwgMHgxZTIxM2YyZiwKQEAgLTMxMiw3ICszMTIsNyBAQAogCiBzdGF0aWMgY29uc3QgdTMyIFRtWzI0XVs4XSA9IHsKIAl7IDB4NWE4Mjc5OTksIDB4Yzk1YzY1M2EsIDB4MzgzNjUwZGIsIDB4YTcxMDNjN2MsIDB4MTVlYTI4MWQsCi0JCTB4ODRjNDEzYmUsIDB4ZjM5ZGZmNWYsIDB4NjI3N2ViMDAgfSAsIAorCQkweDg0YzQxM2JlLCAweGYzOWRmZjVmLCAweDYyNzdlYjAwIH0gLAogCXsgMHhkMTUxZDZhMSwgMHg0MDJiYzI0MiwgMHhhZjA1YWRlMywgMHgxZGRmOTk4NCwgMHg4Y2I5ODUyNSwKIAkJMHhmYjkzNzBjNiwgMHg2YTZkNWM2NywgMHhkOTQ3NDgwOCB9ICwKIAl7IDB4NDgyMTMzYTksIDB4YjZmYjFmNGEsIDB4MjVkNTBhZWIsIDB4OTRhZWY2OGMsIDB4MDM4OGUyMmQsCkBAIC0zNjksNyArMzY5LDggQEAKIH07CiAKIC8qIGZvcndhcmQgb2N0YXZlICovCi1zdGF0aWMgdm9pZCBXKHUzMiAqa2V5LCB1bnNpZ25lZCBpbnQgaSkgeworc3RhdGljIHZvaWQgVyh1MzIgKmtleSwgdW5zaWduZWQgaW50IGkpCit7CiAJdTMyIEk7CiAJa2V5WzZdIF49IEYxKGtleVs3XSwgVHJbaSAlIDRdWzBdLCBUbVtpXVswXSk7CiAJa2V5WzVdIF49IEYyKGtleVs2XSwgVHJbaSAlIDRdWzFdLCBUbVtpXVsxXSk7CkBAIC0zNzcsNyArMzc4LDcgQEAKIAlrZXlbM10gXj0gRjEoa2V5WzRdLCBUcltpICUgNF1bM10sIFRtW2ldWzNdKTsKIAlrZXlbMl0gXj0gRjIoa2V5WzNdLCBUcltpICUgNF1bNF0sIFRtW2ldWzRdKTsKIAlrZXlbMV0gXj0gRjMoa2V5WzJdLCBUcltpICUgNF1bNV0sIFRtW2ldWzVdKTsKLQlrZXlbMF0gXj0gRjEoa2V5WzFdLCBUcltpICUgNF1bNl0sIFRtW2ldWzZdKTsJCisJa2V5WzBdIF49IEYxKGtleVsxXSwgVHJbaSAlIDRdWzZdLCBUbVtpXVs2XSk7CiAJa2V5WzddIF49IEYyKGtleVswXSwgVHJbaSAlIDRdWzddLCBUbVtpXVs3XSk7CiB9CiAKQEAgLTM5MywxMSArMzk0LDExIEBACiAJaWYgKGtleV9sZW4gJSA0ICE9IDApIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CQorCX0KIAotCW1lbXNldCAocF9rZXksIDAsIDMyKTsKLQltZW1jcHkgKHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOwotCQorCW1lbXNldChwX2tleSwgMCwgMzIpOworCW1lbWNweShwX2tleSwgaW5fa2V5LCBrZXlfbGVuKTsKKwogCWtleVswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsJCS8qIEEgKi8KIAlrZXlbMV0gPSBiZTMyX3RvX2NwdShwX2tleVsxXSk7CQkvKiBCICovCiAJa2V5WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOwkJLyogQyAqLwpAQCAtNDA2LDE4ICs0MDcsMTYgQEAKIAlrZXlbNV0gPSBiZTMyX3RvX2NwdShwX2tleVs1XSk7CQkvKiBGICovCiAJa2V5WzZdID0gYmUzMl90b19jcHUocF9rZXlbNl0pOwkJLyogRyAqLwogCWtleVs3XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzddKTsJCS8qIEggKi8KLQkKLQogCiAJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLQkJVyAoa2V5LCAyICogaSk7Ci0JCVcgKGtleSwgMiAqIGkgKyAxKTsKLQkJCisJCVcoa2V5LCAyICogaSk7CisJCVcoa2V5LCAyICogaSArIDEpOworCiAJCWMtPktyW2ldWzBdID0ga2V5WzBdICYgMHgxZjsKIAkJYy0+S3JbaV1bMV0gPSBrZXlbMl0gJiAweDFmOwogCQljLT5LcltpXVsyXSA9IGtleVs0XSAmIDB4MWY7CiAJCWMtPktyW2ldWzNdID0ga2V5WzZdICYgMHgxZjsKLQkJCisKIAkJYy0+S21baV1bMF0gPSBrZXlbN107CiAJCWMtPkttW2ldWzFdID0ga2V5WzVdOwogCQljLT5LbVtpXVsyXSA9IGtleVszXTsKQEAgLTQyOCwyMSArNDI3LDIzIEBACiB9CiAKIC8qZm9yd2FyZCBxdWFkIHJvdW5kKi8KLXN0YXRpYyB2b2lkIFEgKHUzMiAqIGJsb2NrLCB1OCAqIEtyLCB1MzIgKiBLbSkgeworc3RhdGljIHZvaWQgUSh1MzIgKmJsb2NrLCB1OCAqS3IsIHUzMiAqS20pCit7CiAJdTMyIEk7CiAJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiAJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CiAJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7Ci0JYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CQkKKwlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKIH0KIAogLypyZXZlcnNlIHF1YWQgcm91bmQqLwotc3RhdGljIHZvaWQgUUJBUiAodTMyICogYmxvY2ssIHU4ICogS3IsIHUzMiAqIEttKSB7CitzdGF0aWMgdm9pZCBRQkFSKHUzMiAqYmxvY2ssIHU4ICpLciwgdTMyICpLbSkKK3sKIAl1MzIgSTsKLSAgICAgICAgYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7Ci0gICAgICAgIGJsb2NrWzBdIF49IEYzKGJsb2NrWzFdLCBLclsyXSwgS21bMl0pOwotICAgICAgICBibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKLSAgICAgICAgYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CisJYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CisJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7CisJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CisJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc3Q2X2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKQpAQCAtNDUxLDY0ICs0NTIsNjUgQEAKIAljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwotCXUzMiAqIEttOyAKLQl1OCAqIEtyOworCXUzMiAqS207CisJdTggKktyOwogCiAJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOwogCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CiAJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCi0JS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUUJBUihibG9jaywgS3IsIEttKTsKIAogCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CiAJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOwogCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKLX0JCit9CiAKLXN0YXRpYyB2b2lkIGNhc3Q2X2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKSB7Ci0Jc3RydWN0IGNhc3Q2X2N0eCAqIGMgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworc3RhdGljIHZvaWQgY2FzdDZfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCit7CisJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CiAJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKLQl1MzIgKiBLbTsgCi0JdTggKiBLcjsKKwl1MzIgKkttOworCXU4ICpLcjsKIAogCWJsb2NrWzBdID0gYmUzMl90b19jcHUoc3JjWzBdKTsKIAlibG9ja1sxXSA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CiAJYmxvY2tbMl0gPSBiZTMyX3RvX2NwdShzcmNbMl0pOwogCWJsb2NrWzNdID0gYmUzMl90b19jcHUoc3JjWzNdKTsKIAotCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzldOyBLciA9IGMtPktyWzldOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzZdOyBLciA9IGMtPktyWzZdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzNdOyBLciA9IGMtPktyWzNdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQkKKwlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisKIAlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CiAJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOwogCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKIAlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7Ci19CQorfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewogCS5jcmFfbmFtZSA9ICJjYXN0NiIsCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyLmMgYi9jcnlwdG8vY2lwaGVyLmMKaW5kZXggOWExYTczMS4uMzk1NDFlMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci5jCisrKyBiL2NyeXB0by9jaXBoZXIuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wcmVzcy5jIGIvY3J5cHRvL2NvbXByZXNzLmMKaW5kZXggMWVlMzU3MC4uYzMzZjA3NjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jb21wcmVzcy5jCisrKyBiL2NyeXB0by9jb21wcmVzcy5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpAQCAtMzksNyArMzksNyBAQAogCiAJb3BzLT5jb3RfY29tcHJlc3MgPSBjcnlwdG9fY29tcHJlc3M7CiAJb3BzLT5jb3RfZGVjb21wcmVzcyA9IGNyeXB0b19kZWNvbXByZXNzOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jcmMzMmMuYyBiL2NyeXB0by9jcmMzMmMuYwppbmRleCA5NzNiYzJjLi5kZTllNTVjIDEwMDY0NAotLS0gYS9jcnlwdG8vY3JjMzJjLmMKKysrIGIvY3J5cHRvL2NyYzMyYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQ1JDMzJDIGNoa3N1bQpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpAQCAtMTQyLDcgKzE0Miw3IEBACiB9CiAKIC8qCi0gKiBTdGVwcyB0aHJvdWdoIGJ1ZmZlciBvbmUgYnl0ZSBhdCBhdCB0aW1lLCBjYWxjdWxhdGVzIHJlZmxlY3RlZCAKKyAqIFN0ZXBzIHRocm91Z2ggYnVmZmVyIG9uZSBieXRlIGF0IGF0IHRpbWUsIGNhbGN1bGF0ZXMgcmVmbGVjdGVkCiAgKiBjcmMgdXNpbmcgdGFibGUuCiAgKi8KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0ZC5jIGIvY3J5cHRvL2NyeXB0ZC5jCmluZGV4IDcwNGMxNDEuLmVmNzEzMTggMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdGQuYworKysgYi9jcnlwdG8vY3J5cHRkLmMKQEAgLTMxLDcgKzMxLDcgQEAKIH07CiAKIHN0cnVjdCBjcnlwdGRfcXVldWUgewotCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgX19wZXJjcHUgKmNwdV9xdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4IHsKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdG9fbnVsbC5jIGIvY3J5cHRvL2NyeXB0b19udWxsLmMKaW5kZXggY2I3MWM5MS4uMDdhOGE5NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0b19udWxsLmMKKysrIGIvY3J5cHRvL2NyeXB0b19udWxsLmMKQEAgLTEsMTEgKzEsMTEgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIE51bGwgYWxnb3JpdGhtcywgYWthIE11Y2ggQWRvIEFib3V0IE5vdGhpbmcuCiAgKgogICogVGhlc2UgYXJlIG5lZWRlZCBmb3IgSVBzZWMsIGFuZCBtYXkgYmUgdXNlZnVsIGluIGdlbmVyYWwgZm9yCiAgKiB0ZXN0aW5nICYgZGVidWdnaW5nLgotICogCisgKgogICogVGhlIG51bGwgY2lwaGVyIGlzIGNvbXBsaWFudCB3aXRoIFJGQzI0MTAuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgpAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fbnVsbF9tb2RfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwotCQorCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY2lwaGVyX251bGwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTE4MCw3ICsxODAsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2RpZ2VzdDsKIAotb3V0OgkKK291dDoKIAlyZXR1cm4gcmV0OwogCiBvdXRfdW5yZWdpc3Rlcl9kaWdlc3Q6CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVmbGF0ZS5jIGIvY3J5cHRvL2RlZmxhdGUuYwppbmRleCA5MTI4ZGE0Li40NjNkYzg1IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVmbGF0ZS5jCisrKyBiL2NyeXB0by9kZWZsYXRlLmMKQEAgLTEsMTQgKzEsMTQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIERlZmxhdGUgYWxnb3JpdGhtIChSRkMgMTk1MSksIGltcGxlbWVudGVkIGhlcmUgcHJpbWFyaWx5IGZvciB1c2UKICAqIGJ5IElQQ09NUCAoUkZDIDMxNzMgJiBSRkMgMjM5NCkuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogRklYTUU6IGRlZmxhdGUgdHJhbnNmb3JtcyB3aWxsIHJlcXVpcmUgdXAgdG8gYSB0b3RhbCBvZiBhYm91dCA0MzZrIG9mIGtlcm5lbApAQCAtNDksNyArNDksNyBAQAogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKIAogCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKLQlpZiAoIXN0cmVhbS0+d29ya3NwYWNlICkgeworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjEsNyArNjEsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLW91dDoJCitvdXQ6CiAJcmV0dXJuIHJldDsKIG91dF9mcmVlOgogCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKQEAgLTc0LDcgKzc0LDcgQEAKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+ZGVjb21wX3N0cmVhbTsKIAogCXN0cmVhbS0+d29ya3NwYWNlID0ga3phbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0cmVhbS0+d29ya3NwYWNlICkgeworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAJc3RydWN0IGRlZmxhdGVfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBkZWZsYXRlX2NvbXBfaW5pdChjdHgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtMTUzLDExICsxNTMsMTEgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQotIAorCiBzdGF0aWMgaW50IGRlZmxhdGVfZGVjb21wcmVzcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqc3JjLAogCQkJICAgICAgdW5zaWduZWQgaW50IHNsZW4sIHU4ICpkc3QsIHVuc2lnbmVkIGludCAqZGxlbikKIHsKLQkKKwogCWludCByZXQgPSAwOwogCXN0cnVjdCBkZWZsYXRlX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKHJldCA9PSBaX09LICYmICFzdHJlYW0tPmF2YWlsX2luICYmIHN0cmVhbS0+YXZhaWxfb3V0KSB7CiAJCXU4IHplcm9zdHVmZiA9IDA7CiAJCXN0cmVhbS0+bmV4dF9pbiA9ICZ6ZXJvc3R1ZmY7Ci0JCXN0cmVhbS0+YXZhaWxfaW4gPSAxOyAKKwkJc3RyZWFtLT5hdmFpbF9pbiA9IDE7CiAJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKIAl9CiAJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKaW5kZXggNWJkM2VlMy4uMjQ5ZjkwMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlc19nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKQEAgLTg2OSw4ICs4NjksNyBAQAogCiAJaWYgKHVubGlrZWx5KCEoKEtbMF0gXiBLWzJdKSB8IChLWzFdIF4gS1szXSkpIHx8CiAJCSAgICAgISgoS1syXSBeIEtbNF0pIHwgKEtbM10gXiBLWzVdKSkpICYmCi0JCSAgICAgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkKLQl7CisJCSAgICAgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9lY2IuYyBiL2NyeXB0by9lY2IuYwppbmRleCBhNDY4MzhlLi45MzVjZmVmNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjYi5jCisrKyBiL2NyeXB0by9lY2IuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAJCWRvIHsKIAkJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHdkc3QsIHdzcmMpOwotCQorCiAJCQl3c3JjICs9IGJzaXplOwogCQkJd2RzdCArPSBic2l6ZTsKIAkJfSB3aGlsZSAoKG5ieXRlcyAtPSBic2l6ZSkgPj0gYnNpemUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZjcnlwdC5jIGIvY3J5cHRvL2ZjcnlwdC5jCmluZGV4IGI4MmQ2MWYuLmMzMzEwN2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9mY3J5cHQuYworKysgYi9jcnlwdG8vZmNyeXB0LmMKQEAgLTYwLDEzICs2MCwxMyBAQAogCXUzMiB0ID0gbG8gJiAoKDEgPDwgbikgLSAxKTsJCQkJXAogCWxvID0gKGxvID4+IG4pIHwgKChoaSAmICgoMSA8PCBuKSAtIDEpKSA8PCAoMzIgLSBuKSk7CVwKIAloaSA9IChoaSA+PiBuKSB8ICh0IDw8ICgyNC1uKSk7CQkJCVwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIC8qIFJvdGF0ZSByaWdodCBvbmUgNjQgYml0IG51bWJlciBhcyBhIDU2IGJpdCBudW1iZXIgKi8KICNkZWZpbmUgcm9yNTZfNjQoaywgbikJCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJayA9IChrID4+IG4pIHwgKChrICYgKCgxIDw8IG4pIC0gMSkpIDw8ICg1NiAtIG4pKTsJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogLyoKICAqIFNib3hlcyBmb3IgRmVpc3RlbCBuZXR3b3JrIGRlcml2ZWQgZnJvbQpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdW5pb24gbGM0IHsgX19iZTMyIGw7IHU4IGNbNF07IH0gdTsJCQkJXAogCXUubCA9IHNjaGVkIF4gUjsJCQkJCQlcCiAJTCBePSBzYm94MFt1LmNbMF1dIF4gc2JveDFbdS5jWzFdXSBeIHNib3gyW3UuY1syXV0gXiBzYm94M1t1LmNbM11dOyBcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAvKgogICogZW5jcnlwdG9yCmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggYzY1NDcxMy4uMmY1ZmJiYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMzcsNiArMzcsMTkgQEAKIAl1OCBub25jZVs0XTsKIH07CiAKK3N0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdTggbm9uY2VbNF07Cit9OworCitzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCB7CisJdTggYXV0aF90YWdbMTZdOworCXN0cnVjdCBzY2F0dGVybGlzdCBjaXBoZXJbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHBheWxvYWRbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGFzc29jWzJdOworCXN0cnVjdCBhZWFkX3JlcXVlc3Qgc3VicmVxOworfTsKKwogc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IHsKIAl1bnNpZ25lZCBpbnQgY3J5cHRsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7CkBAIC0xMDQ3LDYgKzEwNjAsMjcyIEBACiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCAqY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KAorCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX2FlYWRfYWxpZ25tYXNrKGNyeXB0b19hZWFkX3JlcXRmbShyZXEpKTsKKworCXJldHVybiAodm9pZCAqKVBUUl9BTElHTigodTggKilhZWFkX3JlcXVlc3RfY3R4KHJlcSksIGFsaWduICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWVhZCAqcGFyZW50LCBjb25zdCB1OCAqa2V5LAorCQkJCSB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQgPSBjdHgtPmNoaWxkOworCWludCBlcnI7CisKKwlpZiAoa2V5bGVuIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXlsZW4gLT0gNDsKKwltZW1jcHkoY3R4LT5ub25jZSwga2V5ICsga2V5bGVuLCA0KTsKKworCWNyeXB0b19hZWFkX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoY2hpbGQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleShjaGlsZCwga2V5LCBrZXlsZW4pOworCWNyeXB0b19hZWFkX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgIENSWVBUT19URk1fUkVTX01BU0spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlpZiAoYXV0aHNpemUgIT0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworLyogdGhpcyBpcyB0aGUgc2FtZSBhcyBjcnlwdG9fYXV0aGVuY19jaGFpbiAqLworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgY2hhaW4pCit7CisJaWYgKGNoYWluKSB7CisJCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KKworCWlmIChzZykKKwkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgMiwgc2cpOworCWVsc2UKKwkJc2dfbWFya19lbmQoaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcnlwdG9fcmZjNDU0M19jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCQkJCQkgaW50IGVuYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX3JlcV9jdHggKnJjdHggPSBjcnlwdG9fcmZjNDU0M19yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0eC0+c3VicmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0ID0gcmVxLT5kc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjaXBoZXIgPSByY3R4LT5jaXBoZXI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwYXlsb2FkID0gcmN0eC0+cGF5bG9hZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzc29jID0gcmN0eC0+YXNzb2M7CisJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCk7CisJdW5zaWduZWQgaW50IGFzc29jbGVuID0gcmVxLT5hc3NvY2xlbjsKKwlzdHJ1Y3QgcGFnZSAqZHN0cDsKKwl1OCAqdmRzdDsKKwl1OCAqaXYgPSBQVFJfQUxJR04oKHU4ICopKHJjdHggKyAxKSArIGNyeXB0b19hZWFkX3JlcXNpemUoY3R4LT5jaGlsZCksCisJCQkgICBjcnlwdG9fYWVhZF9hbGlnbm1hc2soY3R4LT5jaGlsZCkgKyAxKTsKKworCW1lbWNweShpdiwgY3R4LT5ub25jZSwgNCk7CisJbWVtY3B5KGl2ICsgNCwgcmVxLT5pdiwgOCk7CisKKwkvKiBjb25zdHJ1Y3QgY2lwaGVyL3BsYWludGV4dCAqLworCWlmIChlbmMpCisJCW1lbXNldChyY3R4LT5hdXRoX3RhZywgMCwgYXV0aHNpemUpOworCWVsc2UKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCBkc3QsCisJCQkJCSByZXEtPmNyeXB0bGVuIC0gYXV0aHNpemUsCisJCQkJCSBhdXRoc2l6ZSwgMCk7CisKKwlzZ19pbml0X29uZShjaXBoZXIsIHJjdHgtPmF1dGhfdGFnLCBhdXRoc2l6ZSk7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIGFhZCAqLworCWRzdHAgPSBzZ19wYWdlKGRzdCk7CisJdmRzdCA9IFBhZ2VIaWdoTWVtKGRzdHApID8gTlVMTCA6IHBhZ2VfYWRkcmVzcyhkc3RwKSArIGRzdC0+b2Zmc2V0OworCisJc2dfaW5pdF90YWJsZShwYXlsb2FkLCAyKTsKKwlzZ19zZXRfYnVmKHBheWxvYWQsIHJlcS0+aXYsIDgpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKHBheWxvYWQsIGRzdCwgdmRzdCA9PSByZXEtPml2ICsgOCk7CisJYXNzb2NsZW4gKz0gOCArIHJlcS0+Y3J5cHRsZW4gLSAoZW5jID8gMCA6IGF1dGhzaXplKTsKKworCXNnX2luaXRfdGFibGUoYXNzb2MsIDIpOworCXNnX3NldF9wYWdlKGFzc29jLCBzZ19wYWdlKHJlcS0+YXNzb2MpLCByZXEtPmFzc29jLT5sZW5ndGgsCisJCSAgICByZXEtPmFzc29jLT5vZmZzZXQpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKGFzc29jLCBwYXlsb2FkLCAwKTsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhzdWJyZXEsIHJlcS0+YmFzZS5mbGFncywgcmVxLT5iYXNlLmNvbXBsZXRlLAorCQkJCSAgcmVxLT5iYXNlLmRhdGEpOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoc3VicmVxLCBjaXBoZXIsIGNpcGhlciwgZW5jID8gMCA6IGF1dGhzaXplLCBpdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhzdWJyZXEsIGFzc29jLCBhc3NvY2xlbik7CisKKwlyZXR1cm4gc3VicmVxOworfQorCitzdGF0aWMgaW50IGNyeXB0b19yZmM0NTQzX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4ICpyY3R4ID0gY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KHJlcSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqc3VicmVxOworCWludCBlcnI7CisKKwlzdWJyZXEgPSBjcnlwdG9fcmZjNDU0M19jcnlwdChyZXEsIDEpOworCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoc3VicmVxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCByZXEtPmRzdCwgcmVxLT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJcmVxID0gY3J5cHRvX3JmYzQ1NDNfY3J5cHQocmVxLCAwKTsKKworCXJldHVybiBjcnlwdG9fYWVhZF9kZWNyeXB0KHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDsKKwl1bnNpZ25lZCBsb25nIGFsaWduOworCisJYWVhZCA9IGNyeXB0b19zcGF3bl9hZWFkKHNwYXduKTsKKwlpZiAoSVNfRVJSKGFlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihhZWFkKTsKKworCWN0eC0+Y2hpbGQgPSBhZWFkOworCisJYWxpZ24gPSBjcnlwdG9fYWVhZF9hbGlnbm1hc2soYWVhZCk7CisJYWxpZ24gJj0gfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpOworCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCkgKworCQkJCUFMSUdOKGNyeXB0b19hZWFkX3JlcXNpemUoYWVhZCksCisJCQkJICAgICAgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpICsKKwkJCQlhbGlnbiArIDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19yZmM0NTQzX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0b19mcmVlX2FlYWQoY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fcmZjNDU0M19hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJc3RydWN0IGNyeXB0b19hdHRyX3R5cGUgKmFsZ3Q7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduOworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJY29uc3QgY2hhciAqY2NtX25hbWU7CisJaW50IGVycjsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJZXJyID0gUFRSX0VSUihhbGd0KTsKKwlpZiAoSVNfRVJSKGFsZ3QpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKChhbGd0LT50eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0FFQUQpICYgYWxndC0+bWFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljY21fbmFtZSA9IGNyeXB0b19hdHRyX2FsZ19uYW1lKHRiWzFdKTsKKwllcnIgPSBQVFJfRVJSKGNjbV9uYW1lKTsKKwlpZiAoSVNfRVJSKGNjbV9uYW1lKSkKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKnNwYXduKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwljcnlwdG9fc2V0X2FlYWRfc3Bhd24oc3Bhd24sIGluc3QpOworCWVyciA9IGNyeXB0b19ncmFiX2FlYWQoc3Bhd24sIGNjbV9uYW1lLCAwLAorCQkJICAgICAgIGNyeXB0b19yZXF1aXJlc19zeW5jKGFsZ3QtPnR5cGUsIGFsZ3QtPm1hc2spKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlhbGcgPSBjcnlwdG9fYWVhZF9zcGF3bl9hbGcoc3Bhd24pOworCisJZXJyID0gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCAxNi1ieXRlIGJsb2Nrcy4gKi8KKwlpZiAoYWxnLT5jcmFfYWVhZC5pdnNpemUgIT0gMTYpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJLyogTm90IGEgc3RyZWFtIGNpcGhlcj8gKi8KKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplICE9IDEpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJyZmM0NTQzKCVzKSIsIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUgfHwKKwkgICAgc25wcmludGYoaW5zdC0+YWxnLmNyYV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAicmZjNDU0MyglcykiLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0KKwkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FFQUQ7CisJaW5zdC0+YWxnLmNyYV9mbGFncyB8PSBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gMTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX25pdmFlYWRfdHlwZTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5pdnNpemUgPSA4OworCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IDE2OworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gY3J5cHRvX3JmYzQ1NDNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gY3J5cHRvX3JmYzQ1NDNfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IGNyeXB0b19yZmM0NTQzX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gY3J5cHRvX3JmYzQ1NDNfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IGNyeXB0b19yZmM0NTQzX2RlY3J5cHQ7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2VuaXYgPSAic2VxaXYiOworCitvdXQ6CisJcmV0dXJuIGluc3Q7CisKK291dF9kcm9wX2FsZzoKKwljcnlwdG9fZHJvcF9hZWFkKHNwYXduKTsKK291dF9mcmVlX2luc3Q6CisJa2ZyZWUoaW5zdCk7CisJaW5zdCA9IEVSUl9QVFIoZXJyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fcmZjNDU0M190bXBsID0geworCS5uYW1lID0gInJmYzQ1NDMiLAorCS5hbGxvYyA9IGNyeXB0b19yZmM0NTQzX2FsbG9jLAorCS5mcmVlID0gY3J5cHRvX3JmYzQ1NDNfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZ2NtX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTEwNjcsOCArMTM0NiwxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuZG9fZ2NtOwogCisJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDU0M190bXBsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmRvX3JmYzQxMDY7CisKIAlyZXR1cm4gMDsKIAorb3V0X3VuZG9fcmZjNDEwNjoKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX3JmYzQxMDZfdG1wbCk7CiBvdXRfdW5kb19nY206CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19nY21fdG1wbCk7CiBvdXRfdW5kb19iYXNlOgpAQCAtMTA4MSw2ICsxMzY2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fZ2NtX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJa2ZyZWUoZ2NtX3plcm9lcyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0NTQzX3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV9iYXNlX3RtcGwpOwpAQCAtMTA5NCwzICsxMzgwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2tvIEhlcnJhbmVuIDxtaDFAaWtpLmZpPiIpOwogTU9EVUxFX0FMSUFTKCJnY21fYmFzZSIpOwogTU9EVUxFX0FMSUFTKCJyZmM0MTA2Iik7CitNT0RVTEVfQUxJQVMoInJmYzQ1NDMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCA4M2ViNTI5Li45ZmRhMjEzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0xNiwxNyArMTYsMTMgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9tZDUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgotI2RlZmluZSBNRDVfSE1BQ19CTE9DS19TSVpFCTY0Ci0jZGVmaW5lIE1ENV9CTE9DS19XT1JEUwkJMTYKLSNkZWZpbmUgTUQ1X0hBU0hfV09SRFMJCTQKLQogI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCiAjZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCiAjZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCkBAIC0zNSwxMiArMzEsNiBAQAogI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGluLCBzKSBcCiAJKHcgKz0gZih4LCB5LCB6KSArIGluLCB3ID0gKHc8PHMgfCB3Pj4oMzItcykpICsgeCkKIAotc3RydWN0IG1kNV9jdHggewotCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKLQl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKLQl1NjQgYnl0ZV9jb3VudDsKLX07Ci0KIHN0YXRpYyB2b2lkIG1kNV90cmFuc2Zvcm0odTMyICpoYXNoLCB1MzIgY29uc3QgKmluKQogewogCXUzMiBhLCBiLCBjLCBkOwpAQCAtMTQxLDcgKzEzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWQ1X3RyYW5zZm9ybV9oZWxwZXIoc3RydWN0IG1kNV9jdHggKmN0eCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZDVfdHJhbnNmb3JtX2hlbHBlcihzdHJ1Y3QgbWQ1X3N0YXRlICpjdHgpCiB7CiAJbGUzMl90b19jcHVfYXJyYXkoY3R4LT5ibG9jaywgc2l6ZW9mKGN0eC0+YmxvY2spIC8gc2l6ZW9mKHUzMikpOwogCW1kNV90cmFuc2Zvcm0oY3R4LT5oYXNoLCBjdHgtPmJsb2NrKTsKQEAgLTE0OSw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW50IG1kNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJbWN0eC0+aGFzaFswXSA9IDB4Njc0NTIzMDE7CiAJbWN0eC0+aGFzaFsxXSA9IDB4ZWZjZGFiODk7CkBAIC0xNjIsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBtZDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbWQ1X2N0eCAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBtZDVfc3RhdGUgKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAljb25zdCB1MzIgYXZhaWwgPSBzaXplb2YobWN0eC0+YmxvY2spIC0gKG1jdHgtPmJ5dGVfY291bnQgJiAweDNmKTsKIAogCW1jdHgtPmJ5dGVfY291bnQgKz0gbGVuOwpAQCAtMTk0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgbWQ1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCWNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQgPSBtY3R4LT5ieXRlX2NvdW50ICYgMHgzZjsKIAljaGFyICpwID0gKGNoYXIgKiltY3R4LT5ibG9jayArIG9mZnNldDsKIAlpbnQgcGFkZGluZyA9IDU2IC0gKG9mZnNldCArIDEpOwpAQCAtMjIwLDEyICsyMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtZDVfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkob3V0LCBjdHgsIHNpemVvZigqY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWQ1X2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkoY3R4LCBpbiwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JTUQ1X0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CW1kNV9pbml0LAogCS51cGRhdGUJCT0JbWQ1X3VwZGF0ZSwKIAkuZmluYWwJCT0JbWQ1X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X2N0eCksCisJLmV4cG9ydAkJPQltZDVfZXhwb3J0LAorCS5pbXBvcnQJCT0JbWQ1X2ltcG9ydCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IG1kNV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkibWQ1IiwKIAkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKZGlmZiAtLWdpdCBhL2NyeXB0by9wY3J5cHQuYyBiL2NyeXB0by9wY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3BjcnlwdC5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogcGNyeXB0IC0gUGFyYWxsZWwgY3J5cHRvIHdyYXBwZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3BjcnlwdC5oPgorCitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2VuY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2RlY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVuY3dxOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZWN3cTsKKworc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggeworCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247CisJdW5zaWduZWQgaW50IHRmbV9jb3VudDsKK307CisKK3N0cnVjdCBwY3J5cHRfYWVhZF9jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdW5zaWduZWQgaW50IGNiX2NwdTsKK307CisKK3N0YXRpYyBpbnQgcGNyeXB0X2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCB1bnNpZ25lZCBpbnQgKmNiX2NwdSwKKwkJCSAgICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXVuc2lnbmVkIGludCBjcHVfaW5kZXgsIGNwdSwgaTsKKworCWNwdSA9ICpjYl9jcHU7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpCisJCQlnb3RvIG91dDsKKworCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzayk7CisKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9hY3RpdmVfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IGNwdV9pbmRleDsgaSsrKQorCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfYWN0aXZlX21hc2spOworCisJKmNiX2NwdSA9IGNwdTsKKworb3V0OgorCXJldHVybiBwYWRhdGFfZG9fcGFyYWxsZWwocGluc3QsIHBhZGF0YSwgY3B1KTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGtleShjdHgtPmNoaWxkLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEtPmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2X3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLT5hcmVxLmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBlcnI7CisJcmVxLT5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjcnlwdF9hZWFkX2VuYyhzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBjcnlwdG9fYWVhZF9lbmNyeXB0KHJlcSk7CisKKwlpZiAocGFkYXRhLT5pbmZvID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJcGFkYXRhX2RvX3NlcmlhbChwYWRhdGEpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCWludCBlcnI7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXUzMiBmbGFncyA9IGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2VuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX3NlcmlhbDsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyZXEsIGN0eC0+Y2hpbGQpOworCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgcGNyeXB0X2FlYWRfZG9uZSwgcmVxKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCSAgICAgICByZXEtPmNyeXB0bGVuLCByZXEtPml2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGNyZXEsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZW5jX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9kZWMoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJcGFkYXRhLT5pbmZvID0gY3J5cHRvX2FlYWRfZGVjcnlwdChyZXEpOworCisJaWYgKHBhZGF0YS0+aW5mbyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhID0gcGNyeXB0X3JlcXVlc3RfcGFkYXRhKHByZXEpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwl1MzIgZmxhZ3MgPSBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKTsKKworCW1lbXNldChwYWRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGFkYXRhX3ByaXYpKTsKKworCXBhZGF0YS0+cGFyYWxsZWwgPSBwY3J5cHRfYWVhZF9kZWM7CisJcGFkYXRhLT5zZXJpYWwgPSBwY3J5cHRfYWVhZF9zZXJpYWw7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShjcmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGNyZXEsIGZsYWdzICYgfkNSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkgIHBjcnlwdF9hZWFkX2RvbmUsIHJlcSk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjcmVxLCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2RlY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9kZWNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2ZW5jKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQocmVxKTsKKworCWlmIChwYWRhdGEtPmluZm8gPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfZ2l2ZW5jcnlwdChzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gJnJlcS0+YXJlcTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KGFyZXEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gYWVhZF9naXZjcnlwdF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJdTMyIGZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKGFyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2dpdmVuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX2dpdl9zZXJpYWw7CisKKwlhZWFkX2dpdmNyeXB0X3NldF90Zm0oY3JlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9naXZjcnlwdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgIHBjcnlwdF9hZWFkX2RvbmUsIGFyZXEpOworCWFlYWRfZ2l2Y3J5cHRfc2V0X2NyeXB0KGNyZXEsIGFyZXEtPnNyYywgYXJlcS0+ZHN0LAorCQkJCWFyZXEtPmNyeXB0bGVuLCBhcmVxLT5pdik7CisJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MoY3JlcSwgYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuKTsKKwlhZWFkX2dpdmNyeXB0X3NldF9naXYoY3JlcSwgcmVxLT5naXYsIHJlcS0+c2VxKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9naXZlbmNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWludCBjcHUsIGNwdV9pbmRleDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UodGZtKTsKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqaWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpcGhlcjsKKworCWljdHgtPnRmbV9jb3VudCsrOworCisJY3B1X2luZGV4ID0gaWN0eC0+dGZtX2NvdW50ICUgY3B1bWFza193ZWlnaHQoY3B1X2FjdGl2ZV9tYXNrKTsKKworCWN0eC0+Y2JfY3B1ID0gY3B1bWFza19maXJzdChjcHVfYWN0aXZlX21hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJY3R4LT5jYl9jcHUgPSBjcHVtYXNrX25leHQoY3R4LT5jYl9jcHUsIGNwdV9hY3RpdmVfbWFzayk7CisKKwljaXBoZXIgPSBjcnlwdG9fc3Bhd25fYWVhZChjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKworCWlmIChJU19FUlIoY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKKworCWN0eC0+Y2hpbGQgPSBjaXBoZXI7CisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfcmVxdWVzdCkKKwkJKyBzaXplb2Yoc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCkKKwkJKyBjcnlwdG9fYWVhZF9yZXFzaXplKGNpcGhlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKnBjcnlwdF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggKmN0eDsKKwlpbnQgZXJyOworCisJaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnN0KSArIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KSB7CisJCWluc3QgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJwY3J5cHQoJXMpIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOworCisJY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwllcnIgPSBjcnlwdG9faW5pdF9zcGF3bigmY3R4LT5zcGF3biwgYWxnLCBpbnN0LAorCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHkgKyAxMDA7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7CisKK291dDoKKwlyZXR1cm4gaW5zdDsKKworb3V0X2ZyZWVfaW5zdDoKKwlrZnJlZShpbnN0KTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jX2FlYWQoc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBhbGd0LT50eXBlLAorCQkJCSAgKGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CisKKwlpbnN0ID0gcGNyeXB0X2FsbG9jX2luc3RhbmNlKGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19hZWFkX3R5cGU7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuaXZzaXplID0gYWxnLT5jcmFfYWVhZC5pdnNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdlbml2ID0gYWxnLT5jcmFfYWVhZC5nZW5pdjsKKwlpbnN0LT5hbGcuY3JhX2FlYWQubWF4YXV0aHNpemUgPSBhbGctPmNyYV9hZWFkLm1heGF1dGhzaXplOworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfYWVhZF9jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gcGNyeXB0X2FlYWRfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gcGNyeXB0X2FlYWRfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gcGNyeXB0X2FlYWRfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IHBjcnlwdF9hZWFkX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gcGNyeXB0X2FlYWRfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IHBjcnlwdF9hZWFkX2RlY3J5cHQ7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdpdmVuY3J5cHQgPSBwY3J5cHRfYWVhZF9naXZlbmNyeXB0OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJaWYgKElTX0VSUihhbGd0KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZ3QpOworCisJc3dpdGNoIChhbGd0LT50eXBlICYgYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUVBRDoKKwkJcmV0dXJuIHBjcnlwdF9hbGxvY19hZWFkKHRiKTsKKwl9CisKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKworCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKKwlrZnJlZShpbnN0KTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgcGNyeXB0X3RtcGwgPSB7CisJLm5hbWUgPSAicGNyeXB0IiwKKwkuYWxsb2MgPSBwY3J5cHRfYWxsb2MsCisJLmZyZWUgPSBwY3J5cHRfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY3J5cHRfaW5pdCh2b2lkKQoreworCWVuY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGVuY3J5cHQiKTsKKwlpZiAoIWVuY3dxKQorCQlnb3RvIGVycjsKKworCWRlY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGRlY3J5cHQiKTsKKwlpZiAoIWRlY3dxKQorCQlnb3RvIGVycl9kZXN0cm95X2VuY3dxOworCisKKwlwY3J5cHRfZW5jX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZW5jd3EpOworCWlmICghcGNyeXB0X2VuY19wYWRhdGEpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfZGVjd3E7CisKKwlwY3J5cHRfZGVjX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZGVjd3EpOworCWlmICghcGNyeXB0X2RlY19wYWRhdGEpCisJCWdvdG8gZXJyX2ZyZWVfcGFkYXRhOworCisJcGFkYXRhX3N0YXJ0KHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfc3RhcnQocGNyeXB0X2RlY19wYWRhdGEpOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworCitlcnJfZnJlZV9wYWRhdGE6CisJcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOworCitlcnJfZGVzdHJveV9kZWN3cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7CisKK2Vycl9kZXN0cm95X2VuY3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKKworZXJyOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGNyeXB0X2V4aXQodm9pZCkKK3sKKwlwYWRhdGFfc3RvcChwY3J5cHRfZW5jX3BhZGF0YSk7CisJcGFkYXRhX3N0b3AocGNyeXB0X2RlY19wYWRhdGEpOworCisJZGVzdHJveV93b3JrcXVldWUoZW5jd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRlY3dxKTsKKworCXBhZGF0YV9mcmVlKHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfZnJlZShwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworfQorCittb2R1bGVfaW5pdChwY3J5cHRfaW5pdCk7Cittb2R1bGVfZXhpdChwY3J5cHRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcmFsbGVsIGNyeXB0byB3cmFwcGVyIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCA3NjIwYmZjLi5jNDk0ZDc2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTE0NzcsOSArMTQ3Nyw1NCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYWxnX3Rlc3RfbnVsbChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBzb3J0ZWQgYnkgYWxnb3JpdGhtIG5hbWUuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsKIAl7CisJCS5hbGcgPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKKwkJLmFsZyA9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gIl9fZ2hhc2gtcGNsbXVscWRxbmkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5oYXNoID0geworCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkuY291bnQgPSAwCisJCQl9CisJCX0KKwl9LCB7CiAJCS5hbGcgPSAiYW5zaV9jcHJuZyIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfY3BybmcsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTYyMyw2ICsxNjY4LDMwIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiY3J5cHRkKF9fZHJpdmVyLWVjYi1hZXMtYWVzbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gImNyeXB0ZChfX2doYXNoLXBjbG11bHFkcW5pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBOVUxMLAorCQkJCS5jb3VudCA9IDAKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJjdHIoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTY2OSw2ICsxNzM4LDIxIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiZWNiKF9fYWVzLWFlc25pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJlY2IoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggNmVlNTNjNy4uODFlMzY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0xMDYsNiArMTA2LDcgQEAKIG9iai0kKENPTkZJR19QUENfUFMzKQkJKz0gcHMzLwogb2JqLSQoQ09ORklHX09GKQkJKz0gb2YvCiBvYmotJChDT05GSUdfU1NCKQkJKz0gc3NiLworb2JqLSQoQ09ORklHX1ZIT1NUX05FVCkJCSs9IHZob3N0Lwogb2JqLSQoQ09ORklHX1ZJUlRJTykJCSs9IHZpcnRpby8KIG9iai0kKENPTkZJR19WTFlOUSkJCSs9IHZseW5xLwogb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oCmluZGV4IDNiMjA3ODYuLjNlNTBjNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29tbW9uLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKaW5kZXggYTQ0NzFlMy4uMzMxODFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKaW5kZXggYTRmYjAwMS4uNDhmYWYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmgKaW5kZXggNjI5MTkwNC4uODk0YTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2Rpc3BhdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkaXNwYXQuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaAppbmRleCAwYmJhMTQ4Li4zZTZiYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzYsMTIgKzc2LDkgQEAKICAqIGV2Z3BlIC0gR1BFIGhhbmRsaW5nIGFuZCBkaXNwYXRjaAogICovCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSk7CithY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSk7CithY3BpX3N0YXR1cyBhY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9ldl9kaXNhYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCkBAIC0xMjIsOSArMTE5LDYgQEAKIHUzMiBhY3BpX2V2X2dwZV9kZXRlY3Qoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0KTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZXZfc2V0X2dwZV90eXBlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywgdTggdHlwZSk7Ci0KLWFjcGlfc3RhdHVzCiBhY3BpX2V2X2NoZWNrX2Zvcl93YWtlX29ubHlfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfZXZfZ3BlX2luaXRpYWxpemUodm9pZCk7CkBAIC0xMzksOCArMTMzLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2godW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iaiwKIAkJCSAgICAgICB1MzIgZnVuY3Rpb24sCi0JCQkgICAgICAgdTMyIHJlZ2lvbl9vZmZzZXQsCi0JCQkgICAgICAgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICogdmFsdWUpOworCQkJICAgICAgIHUzMiByZWdpb25fb2Zmc2V0LCB1MzIgYml0X3dpZHRoLCB1NjQgKnZhbHVlKTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXZfYXR0YWNoX3JlZ2lvbih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpoYW5kbGVyX29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAppbmRleCAyOWJhNjZkLi5mOGRkOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCAzNjE5MmYxLi41OTAwZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaAppbmRleCA1ZGI5ZjI5Li42ZGYzZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI5LDE4ICsxMjksMTcgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgbWFzaywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgZmllbGRfdmFsdWUsCi0JCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0KTsKKwkJCSAgICAgICB1NjQgbWFzaywKKwkJCSAgICAgICB1NjQgZmllbGRfdmFsdWUsIHUzMiBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIHZvaWQKLWFjcGlfZXhfZ2V0X2J1ZmZlcl9kYXR1bShhY3BpX2ludGVnZXIgKiBkYXR1bSwKK2FjcGlfZXhfZ2V0X2J1ZmZlcl9kYXR1bSh1NjQgKmRhdHVtLAogCQkJIHZvaWQgKmJ1ZmZlciwKIAkJCSB1MzIgYnVmZmVyX2xlbmd0aCwKIAkJCSB1MzIgYnl0ZV9ncmFudWxhcml0eSwgdTMyIGJ1ZmZlcl9vZmZzZXQpOwogCiB2b2lkCi1hY3BpX2V4X3NldF9idWZmZXJfZGF0dW0oYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bSwKK2FjcGlfZXhfc2V0X2J1ZmZlcl9kYXR1bSh1NjQgbWVyZ2VkX2RhdHVtLAogCQkJIHZvaWQgKmJ1ZmZlciwKIAkJCSB1MzIgYnVmZmVyX2xlbmd0aCwKIAkJCSB1MzIgYnl0ZV9ncmFudWxhcml0eSwgdTMyIGJ1ZmZlcl9vZmZzZXQpOwpAQCAtMTY4LDggKzE2Nyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2FjY2Vzc19yZWdpb24odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCSAgICAgIHUzMiBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCwKLQkJICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsIHUzMiByZWFkX3dyaXRlKTsKKwkJICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LCB1NjQgKnZhbHVlLCB1MzIgcmVhZF93cml0ZSk7CiAKIC8qCiAgKiBleG1pc2MgLSBtaXNjIHN1cHBvcnQgcm91dGluZXMKQEAgLTE5MywxNiArMTkxLDE0IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2RvX2xvZ2ljYWxfbnVtZXJpY19vcCh1MTYgb3Bjb2RlLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIwLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIxLCB1OCAqIGxvZ2ljYWxfcmVzdWx0KTsKKwkJCSAgICAgIHU2NCBpbnRlZ2VyMCwgdTY0IGludGVnZXIxLCB1OCAqbG9naWNhbF9yZXN1bHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9kb19sb2dpY2FsX29wKHUxNiBvcGNvZGUsCiAJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9wZXJhbmQwLAotCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcGVyYW5kMSwgdTggKiBsb2dpY2FsX3Jlc3VsdCk7CisJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9wZXJhbmQxLCB1OCAqbG9naWNhbF9yZXN1bHQpOwogCi1hY3BpX2ludGVnZXIKLWFjcGlfZXhfZG9fbWF0aF9vcCh1MTYgb3Bjb2RlLCBhY3BpX2ludGVnZXIgb3BlcmFuZDAsIGFjcGlfaW50ZWdlciBvcGVyYW5kMSk7Cit1NjQgYWNwaV9leF9kb19tYXRoX29wKHUxNiBvcGNvZGUsIHU2NCBvcGVyYW5kMCwgdTY0IG9wZXJhbmQxKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9leF9jcmVhdGVfbXV0ZXgoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CiAKQEAgLTI3OCw3ICsyNzQsNyBAQAogYWNwaV9leF9zeXN0ZW1fZG9fbm90aWZ5X29wKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnZhbHVlLAogCQkJICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3VzcGVuZChhY3BpX2ludGVnZXIgdGltZSk7CithY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV9kb19zdXNwZW5kKHU2NCB0aW1lKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3RhbGwodTMyIHRpbWUpOwogCkBAIC00NjEsOSArNDU3LDkgQEAKIAogdm9pZCBhY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sodTMyIHJ1bGUpOwogCi12b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqZGVzdCwgYWNwaV9pbnRlZ2VyIGNvbXByZXNzZWRfaWQpOwordm9pZCBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKGNoYXIgKmRlc3QsIHU2NCBjb21wcmVzc2VkX2lkKTsKIAotdm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKmRlc3QsIGFjcGlfaW50ZWdlciB2YWx1ZSk7Cit2b2lkIGFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcoY2hhciAqZGVzdCwgdTY0IHZhbHVlKTsKIAogLyoKICAqIGV4cmVnaW9uIC0gZGVmYXVsdCBvcF9yZWdpb24gaGFuZGxlcnMKQEAgLTQ3Miw3ICs0NjgsNyBAQAogYWNwaV9leF9zeXN0ZW1fbWVtb3J5X3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgICAgdTMyIGJpdF93aWR0aCwKLQkJCQkgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJICAgIHU2NCAqdmFsdWUsCiAJCQkJICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwKIAkJCQkgICAgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCkBAIC00ODAsMzUgKzQ3NiwzNSBAQAogYWNwaV9leF9zeXN0ZW1faW9fc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkJYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkJdTMyIGJpdF93aWR0aCwKLQkJCQlhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCQl1NjQgKnZhbHVlLAogCQkJCXZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9jbW9zX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkgICB1MzIgYml0X3dpZHRoLAotCQkJICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICB1NjQgKnZhbHVlLAogCQkJICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X3BjaV9iYXJfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkgICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCSAgICAgIHUzMiBiaXRfd2lkdGgsCi0JCQkgICAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCSAgICAgIHU2NCAqdmFsdWUsCiAJCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfZW1iZWRkZWRfY29udHJvbGxlcl9zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCQkJICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkJICB1MzIgYml0X3dpZHRoLAotCQkJCQkgIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJCQkgIHU2NCAqdmFsdWUsCiAJCQkJCSAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LAogCQkJCQkgIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIApAQCAtNTE2LDE0ICs1MTIsMTQgQEAKIGFjcGlfZXhfc21fYnVzX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCSAgICAgdTMyIGJpdF93aWR0aCwKLQkJCSAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICAgIHU2NCAqdmFsdWUsCiAJCQkgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9kYXRhX3RhYmxlX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiAjZW5kaWYJCQkJLyogX19JTlRFUlBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCmluZGV4IDgxZTY0ZjQ3Li4yNGI4ZmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3NCw2ICszNzQsNyBAQAogc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhIHsKIAljaGFyICpwYXRobmFtZTsKIAljb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcHJlZGVmaW5lZDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwYXJlbnRfcGFja2FnZTsKIAl1MzIgZmxhZ3M7CiAJdTggbm9kZV9mbGFnczsKIH07CkBAIC00MjYsNiArNDI3LDggQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqcmVnaXN0ZXJfaW5mbzsJLyogQmFja3BvaW50ZXIgdG8gcmVnaXN0ZXIgaW5mbyAqLwogCXU4IGZsYWdzOwkJLyogTWlzYyBpbmZvIGFib3V0IHRoaXMgR1BFICovCiAJdTggZ3BlX251bWJlcjsJCS8qIFRoaXMgR1BFICovCisJdTggcnVudGltZV9jb3VudDsKKwl1OCB3YWtldXBfY291bnQ7CiB9OwogCiAvKiBJbmZvcm1hdGlvbiBhYm91dCBhIEdQRSByZWdpc3RlciBwYWlyLCBvbmUgcGVyIGVhY2ggc3RhdHVzL2VuYWJsZSBwYWlyIGluIGFuIGFycmF5ICovCkBAIC02NDksOCArNjUyLDcgQEAKIH07CiAKIHVuaW9uIGFjcGlfcGFyc2VfdmFsdWUgewotCWFjcGlfaW50ZWdlciBpbnRlZ2VyOwkvKiBJbnRlZ2VyIGNvbnN0YW50IChVcCB0byA2NCBiaXRzKSAqLwotCXN0cnVjdCB1aW50NjRfc3RydWN0IGludGVnZXI2NDsJLyogU3RydWN0dXJlIG92ZXJsYXkgZm9yIDIgMzItYml0IER3b3JkcyAqLworCXU2NCBpbnRlZ2VyOwkJLyogSW50ZWdlciBjb25zdGFudCAoVXAgdG8gNjQgYml0cykgKi8KIAl1MzIgc2l6ZTsJCS8qIGJ5dGVsaXN0IG9yIGZpZWxkIHNpemUgKi8KIAljaGFyICpzdHJpbmc7CQkvKiBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nICovCiAJdTggKmJ1ZmZlcjsJCS8qIGJ1ZmZlciBvciBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA3ZDliYTZlLi45ODk0OTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcyLDggKzI3Miw4IEBACiAgKiBNQVNLX0JJVFNfQUJPVkUgY3JlYXRlcyBhIG1hc2sgc3RhcnRpbmcgQVQgdGhlIHBvc2l0aW9uIGFuZCBhYm92ZQogICogTUFTS19CSVRTX0JFTE9XIGNyZWF0ZXMgYSBtYXNrIHN0YXJ0aW5nIG9uZSBiaXQgQkVMT1cgdGhlIHBvc2l0aW9uCiAgKi8KLSNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQUJPVkUocG9zaXRpb24pICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCi0jZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICgoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQorI2RlZmluZSBBQ1BJX01BU0tfQklUU19BQk9WRShwb3NpdGlvbikgICAgICAofigoQUNQSV9VSU5UNjRfTUFYKSA8PCAoKHUzMikgKHBvc2l0aW9uKSkpKQorI2RlZmluZSBBQ1BJX01BU0tfQklUU19CRUxPVyhwb3NpdGlvbikgICAgICAoKEFDUElfVUlOVDY0X01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQogCiAvKiBCaXRmaWVsZHMgd2l0aGluIEFDUEkgcmVnaXN0ZXJzICovCiAKQEAgLTQxNCwxNiArNDE0LDE2IEBACiAJCQkJCQkJCQkJCWFjcGlfdXRfcHRyX2V4aXQgKEFDUElfREVCVUdfUEFSQU1FVEVSUywgKHU4ICopIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNkZWZpbmUgcmV0dXJuX1ZBTFVFKHMpICAgICAgICAgICAgICAgICBBQ1BJX0RPX1dISUxFMCAoeyBcCi0JCQkJCQkJCQkJCXJlZ2lzdGVyIGFjcGlfaW50ZWdlciBfcyA9IChzKTsgXAorCQkJCQkJCQkJCQlyZWdpc3RlciB1NjQgX3MgPSAocyk7IFwKIAkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNkZWZpbmUgcmV0dXJuX1VJTlQ4KHMpICAgICAgICAgICAgICAgICBBQ1BJX0RPX1dISUxFMCAoeyBcCiAJCQkJCQkJCQkJCXJlZ2lzdGVyIHU4IF9zID0gKHU4KSAocyk7IFwKLQkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIChhY3BpX2ludGVnZXIpIF9zKTsgXAorCQkJCQkJCQkJCQlhY3BpX3V0X3ZhbHVlX2V4aXQgKEFDUElfREVCVUdfUEFSQU1FVEVSUywgKHU2NCkgX3MpOyBcCiAJCQkJCQkJCQkJCXJldHVybiAoX3MpOyB9KQogI2RlZmluZSByZXR1cm5fVUlOVDMyKHMpICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7IFwKIAkJCQkJCQkJCQkJcmVnaXN0ZXIgdTMyIF9zID0gKHUzMikgKHMpOyBcCi0JCQkJCQkJCQkJCWFjcGlfdXRfdmFsdWVfZXhpdCAoQUNQSV9ERUJVR19QQVJBTUVURVJTLCAoYWNwaV9pbnRlZ2VyKSBfcyk7IFwKKwkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1NjQpIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNlbHNlCQkJCS8qIFVzZSBvcmlnaW5hbCBsZXNzLXNhZmUgbWFjcm9zICovCiAKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQkJCQkJCQkJCQlhY3BpX3V0X3B0cl9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1OCAqKSAocykpOyBcCiAJCQkJCQkJCQkJCXJldHVybigocykpOyB9KQogI2RlZmluZSByZXR1cm5fVkFMVUUocykgICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7IFwKLQkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIChhY3BpX2ludGVnZXIpIChzKSk7IFwKKwkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1NjQpIChzKSk7IFwKIAkJCQkJCQkJCQkJcmV0dXJuKChzKSk7IH0pCiAjZGVmaW5lIHJldHVybl9VSU5UOChzKSAgICAgICAgICAgICAgICAgcmV0dXJuX1ZBTFVFKHMpCiAjZGVmaW5lIHJldHVybl9VSU5UMzIocykgICAgICAgICAgICAgICAgcmV0dXJuX1ZBTFVFKHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKaW5kZXggNjFlZGIxNS4uMjU4MTU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4Niw2ICsyODYsMTcgQEAKIGFjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9ial9kZXNjX3B0cik7CiAKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9udWxsX2VsZW1lbnQoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHUzMiBleHBlY3RlZF9idHlwZXMsCisJCQkgICAgdTMyIHBhY2thZ2VfaW5kZXgsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKKwordm9pZAorYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKKwkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOworCiAvKgogICogbnNyZXBhaXIyIC0gUmV0dXJuIG9iamVjdCByZXBhaXIgZm9yIHNwZWNpZmljCiAgKiBwcmVkZWZpbmVkIG1ldGhvZHMvb2JqZWN0cwpAQCAtMjk2LDExICszMDcsNiBAQAogCQkJYWNwaV9zdGF0dXMgdmFsaWRhdGVfc3RhdHVzLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKIAotdm9pZAotYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCi0JCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKLQkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOwotCiAvKgogICogbnNzZWFyY2ggLSBOYW1lc3BhY2Ugc2VhcmNoaW5nIGFuZCBlbnRyeQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggNjQwNjJiMS4uY2RlMThlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfaW50ZWdlciB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBmaWxsWzNdOwkvKiBQcmV2ZW50IHdhcm5pbmcgb24gc29tZSBjb21waWxlcnMgKi8KLQlhY3BpX2ludGVnZXIgdmFsdWU7CisJdTY0IHZhbHVlOwogfTsKIAogLyoKQEAgLTI4Nyw4ICsyODcsMTAgQEAKIAogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyIHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBQYXJlbnQgZGV2aWNlICovCisJdTMyIGhhbmRsZXJfdHlwZTsKIAlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXI7CiAJdm9pZCAqY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQ7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfYWRkcl9oYW5kbGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaAppbmRleCBkZmRmNjMzLi44YzE1ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb3Bjb2RlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29wY29kZS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCmluZGV4IDIyODgxZTguLmQwYmIwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKaW5kZXggNTdiZGFmNi4uOTcxMTYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKaW5kZXggZWVmNWJkNy4uNTI4YmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmgKaW5kZXggNzk4MGEyNi4uMTYxYmMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaAppbmRleCAwMWM3NmI4Li44ZmYzYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAppbmRleCAzYTQ1MWEyLi4zNWRmNzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBjaGFyICphY3BpX3V0X2dldF9ldmVudF9uYW1lKHUzMiBldmVudF9pZCk7CiAKLWNoYXIgYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcihhY3BpX2ludGVnZXIgaW50ZWdlciwgdTMyIHBvc2l0aW9uKTsKK2NoYXIgYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcih1NjQgaW50ZWdlciwgdTMyIHBvc2l0aW9uKTsKIAogdTggYWNwaV91dF92YWxpZF9vYmplY3RfdHlwZShhY3BpX29iamVjdF90eXBlIHR5cGUpOwogCkBAIC0yNzksOCArMjc5LDcgQEAKIHZvaWQKIGFjcGlfdXRfdmFsdWVfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUsCi0JCSAgIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLAotCQkgICB1MzIgY29tcG9uZW50X2lkLCBhY3BpX2ludGVnZXIgdmFsdWUpOworCQkgICBjb25zdCBjaGFyICptb2R1bGVfbmFtZSwgdTMyIGNvbXBvbmVudF9pZCwgdTY0IHZhbHVlKTsKIAogdm9pZAogYWNwaV91dF9wdHJfZXhpdCh1MzIgbGluZV9udW1iZXIsCkBAIC0zMjQsNyArMzIzLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KGNoYXIgKm9iamVjdF9uYW1lLAogCQkJCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJCQlhY3BpX2ludGVnZXIgKnZhbHVlKTsKKwkJCQl1NjQgKnZhbHVlKTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfZXhlY3V0ZV9TVEEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLCB1MzIgKnN0YXR1c19mbGFncyk7CkBAIC00MzcsMTQgKzQzNiwxMiBAQAogICogdXRtYXRoCiAgKi8KIGFjcGlfc3RhdHVzCi1hY3BpX3V0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JICAgICAgIGFjcGlfaW50ZWdlciBpbl9kaXZpc29yLAotCSAgICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIGFjcGlfaW50ZWdlciAqIG91dF9yZW1haW5kZXIpOworYWNwaV91dF9kaXZpZGUodTY0IGluX2RpdmlkZW5kLAorCSAgICAgICB1NjQgaW5fZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHU2NCAqb3V0X3JlbWFpbmRlcik7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3Nob3J0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JCSAgICAgdTMyIGRpdmlzb3IsCi0JCSAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCB1MzIgKiBvdXRfcmVtYWluZGVyKTsKK2FjcGlfdXRfc2hvcnRfZGl2aWRlKHU2NCBpbl9kaXZpZGVuZCwKKwkJICAgICB1MzIgZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHUzMiAqb3V0X3JlbWFpbmRlcik7CiAKIC8qCiAgKiB1dG1pc2MKQEAgLTQ3NCw4ICs0NzEsNyBAQAogCiB1OCBhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcihjaGFyIGNoYXJhY3RlciwgdTMyIHBvc2l0aW9uKTsKIAotYWNwaV9zdGF0dXMKLWFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIGFjcGlfaW50ZWdlciAqIHJldF9pbnRlZ2VyKTsKK2FjcGlfc3RhdHVzIGFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIHU2NCAqIHJldF9pbnRlZ2VyKTsKIAogdm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQogYWNwaV91dF9wcmVkZWZpbmVkX3dhcm5pbmcoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCmluZGV4IDQ5NDAyNDkuLjFmNDg0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oCmluZGV4IDdiMDcwZTQuLjBlNTc5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1scmVzcmMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbHJlc3JjLmgKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCmluZGV4IDU0YTIyNWUuLmJiMTM4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIwLDcgKzIyMCw3IEBACiAJCQl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2ludGVnZXIgcG9zaXRpb247CisJdTY0IHBvc2l0aW9uOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X2ZpZWxkX25hbWVzLCBpbmZvKTsKIApAQCAtMjQwLDggKzI0MCw4IEBACiAJCXN3aXRjaCAoYXJnLT5jb21tb24uYW1sX29wY29kZSkgewogCQljYXNlIEFNTF9JTlRfUkVTRVJWRURGSUVMRF9PUDoKIAotCQkJcG9zaXRpb24gPSAoYWNwaV9pbnRlZ2VyKSBpbmZvLT5maWVsZF9iaXRfcG9zaXRpb24KLQkJCSAgICArIChhY3BpX2ludGVnZXIpIGFyZy0+Y29tbW9uLnZhbHVlLnNpemU7CisJCQlwb3NpdGlvbiA9ICh1NjQpIGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbgorCQkJICAgICsgKHU2NCkgYXJnLT5jb21tb24udmFsdWUuc2l6ZTsKIAogCQkJaWYgKHBvc2l0aW9uID4gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKQEAgLTMwNSw4ICszMDUsOCBAQAogCiAJCQkvKiBLZWVwIHRyYWNrIG9mIGJpdCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZmllbGQgKi8KIAotCQkJcG9zaXRpb24gPSAoYWNwaV9pbnRlZ2VyKSBpbmZvLT5maWVsZF9iaXRfcG9zaXRpb24KLQkJCSAgICArIChhY3BpX2ludGVnZXIpIGFyZy0+Y29tbW9uLnZhbHVlLnNpemU7CisJCQlwb3NpdGlvbiA9ICh1NjQpIGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbgorCQkJICAgICsgKHU2NCkgYXJnLT5jb21tb24udmFsdWUuc2l6ZTsKIAogCQkJaWYgKHBvc2l0aW9uID4gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCmluZGV4IGYyM2ZhMGIuLmFiZTE0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCBlNzg2ZjlmLi43MjEwMzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IDBiYTE5ZjguLmNjMzQzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCmluZGV4IDliYzFiYTAuLjg5MWUwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02ODQsNyArNjg0LDcgQEAKIAogCQkJY2FzZSBBTUxfT05FU19PUDoKIAotCQkJCW9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9JTlRFR0VSX01BWDsKKwkJCQlvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSA9IEFDUElfVUlOVDY0X01BWDsKIAogCQkJCS8qIFRydW5jYXRlIHZhbHVlIGlmIHdlIGFyZSBleGVjdXRpbmcgZnJvbSBhIDMyLWJpdCBBQ1BJIHRhYmxlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYwppbmRleCBiNzk5NzhmNy4uYmY5ODBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKaW5kZXggZGZhMTA0MS4uMzA2YzYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dleGVjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYwppbmRleCBmMDI4MDg1Li42Yjc2YzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKaW5kZXggYjQwNTEzZC4uMTQwYTlkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzY29wZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzY29wZS5jCmluZGV4IDkwODY0NWUuLmQxZTcwMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3Njb3BlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3N0YXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3N0YXRlLmMKaW5kZXggZTQ2YzgyMS4uMDUwZGY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c3RhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKaW5kZXggY2Q1NWM3Ny4uYzFlNmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggYWZhY2Y0NC4uODM3ZGU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU0LDU0ICs1NCw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfZXZfc2V0X2dwZV90eXBlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHNldAotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgIC0gTmV3IHR5cGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFNldHMgdGhlIG5ldyB0eXBlIGZvciB0aGUgR1BFICh3YWtlLCBydW4sIG9yIHdha2UvcnVuKQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX2V2X3NldF9ncGVfdHlwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sIHU4IHR5cGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRShldl9zZXRfZ3BlX3R5cGUpOwotCi0JLyogVmFsaWRhdGUgdHlwZSBhbmQgdXBkYXRlIHJlZ2lzdGVyIGVuYWJsZSBtYXNrcyAqLwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9Ci0KLQkvKiBEaXNhYmxlIHRoZSBHUEUgaWYgY3VycmVudGx5IGVuYWJsZWQgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCi0JLyogQ2xlYXIgdGhlIHR5cGUgYml0cyBhbmQgaW5zZXJ0IHRoZSBuZXcgVHlwZSAqLwotCi0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9IH5BQ1BJX0dQRV9UWVBFX01BU0s7Ci0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IHR5cGU7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2V2ZW50X2luZm8gICAgICAgICAgLSBHUEUgdG8gdXBkYXRlCi0gKiAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgLSBXaGF0IHRvIGRvOiBBQ1BJX0dQRV9ESVNBQkxFIG9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0dQRV9FTkFCTEUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMTEwLDggKzY1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywKLQkJCQl1OCB0eXBlKQorYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOwogCXU4IHJlZ2lzdGVyX2JpdDsKQEAgLTEyNywzNyArODEsMTQgQEAKIAkgICAgKDEgPDwKIAkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtIGdwZV9yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKIAotCS8qIDEpIERpc2FibGUgY2FzZS4gU2ltcGx5IGNsZWFyIGFsbCBlbmFibGUgYml0cyAqLworCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsIHJlZ2lzdGVyX2JpdCk7CisJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3JfcnVuLCByZWdpc3Rlcl9iaXQpOwogCi0JaWYgKHR5cGUgPT0gQUNQSV9HUEVfRElTQUJMRSkgewotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLAotCQkJICAgICAgIHJlZ2lzdGVyX2JpdCk7Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiAyKSBFbmFibGUgY2FzZS4gU2V0L0NsZWFyIHRoZSBhcHByb3ByaWF0ZSBlbmFibGUgYml0cyAqLwotCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsIHJlZ2lzdGVyX2JpdCk7Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfR1BFX1RZUEVfUlVOVElNRToKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwKLQkJCSAgICAgICByZWdpc3Rlcl9iaXQpOworCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkKIAkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7CiAKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRV9SVU46CisJaWYgKGdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQpCiAJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3JfcnVuLCByZWdpc3Rlcl9iaXQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtMTY3LDggKzk4LDYgQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X2VuYWJsZV9ncGUKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2V2ZW50X2luZm8gICAgICAgICAgLSBHUEUgdG8gZW5hYmxlCi0gKiAgICAgICAgICAgICAgd3JpdGVfdG9faGFyZHdhcmUgICAgICAgLSBFbmFibGUgbm93LCBvciBqdXN0IG1hcmsgZGF0YSBzdHJ1Y3RzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV0FLRSBHUEVzIHNob3VsZCBiZSBkZWZlcnJlZCkKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMTc2LDkgKzEwNSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMKLWFjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCSAgIHU4IHdyaXRlX3RvX2hhcmR3YXJlKQorYWNwaV9zdGF0dXMgYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKQEAgLTE4Niw0NyArMTEzLDIwIEBACiAKIAkvKiBNYWtlIHN1cmUgSFcgZW5hYmxlIG1hc2tzIGFyZSB1cGRhdGVkICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9FTkFCTEUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCXN0YXR1cyA9IGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQogCiAJLyogTWFyayB3YWtlLWVuYWJsZWQgb3IgSFcgZW5hYmxlLCBvciBib3RoICovCiAKLQlzd2l0Y2ggKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfTUFTSykgewotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFOgorCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgeworCQkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpLCB0aGVuIGVuYWJsZSBpdCAqLworCQlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1dBS0VfRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgotCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1dBS0VfRU5BQkxFRCk7Ci0KLQkJLypsaW50IC1mYWxsdGhyb3VnaCAqLwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0KLQkJQUNQSV9TRVRfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfUlVOX0VOQUJMRUQpOwotCi0JCWlmICh3cml0ZV90b19oYXJkd2FyZSkgewotCi0JCQkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpLCB0aGVuIGVuYWJsZSBpdCAqLwotCi0JCQlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJCX0KLQotCQkJLyogRW5hYmxlIHRoZSByZXF1ZXN0ZWQgcnVudGltZSBHUEUgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9od193cml0ZV9ncGVfZW5hYmxlX3JlZyhncGVfZXZlbnRfaW5mbyk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCS8qIEVuYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoZ3BlX2V2ZW50X2luZm8pOwogCX0KIAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0yNTIsMzQgKzE1Miw5IEBACiAKIAkvKiBNYWtlIHN1cmUgSFcgZW5hYmxlIG1hc2tzIGFyZSB1cGRhdGVkICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9ESVNBQkxFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCS8qIENsZWFyIHRoZSBhcHByb3ByaWF0ZSBlbmFibGVkIGZsYWdzIGZvciB0aGlzIEdQRSAqLwotCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCi0JCS8qIGZhbGx0aHJvdWdoICovCi0KLQljYXNlIEFDUElfR1BFX1RZUEVfUlVOVElNRToKLQotCQkvKiBEaXNhYmxlIHRoZSByZXF1ZXN0ZWQgcnVudGltZSBHUEUgKi8KLQotCQlBQ1BJX0NMRUFSX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKIAkvKgogCSAqIEV2ZW4gaWYgd2UgZG9uJ3Qga25vdyB0aGUgR1BFIHR5cGUsIG1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cwpAQCAtNTIxLDcgKzM5Niw3IEBACiAKIAkvKiBTZXQgdGhlIEdQRSBmbGFncyBmb3IgcmV0dXJuIHRvIGVuYWJsZWQgc3RhdGUgKi8KIAotCSh2b2lkKWFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgRkFMU0UpOworCSh2b2lkKWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOwogCiAJLyoKIAkgKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIEdQRSBpbmZvIGZvciB0aGlzIGxldmVsIC0gd2UgY29weSB0aGUgaW5mbyB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCmluZGV4IDI0NzkyMDkuLmZlZjcyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNTgsNyArMjU4LDYgQEAKIAl1MzIgZ3BlX251bWJlcjsKIAljaGFyIG5hbWVbQUNQSV9OQU1FX1NJWkUgKyAxXTsKIAl1OCB0eXBlOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2F2ZV9tZXRob2RfaW5mbyk7CiAKQEAgLTMyNSwyNiArMzI0LDIwIEBACiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gYWRkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGdwZV9ldmVudF9pbmZvIGJsb2NrIGZvciB1c2UKLQkgKiBkdXJpbmcgZGlzcGF0Y2ggb2YgdGhpcyBHUEUuIERlZmF1bHQgdHlwZSBpcyBSVU5USU1FLCBhbHRob3VnaCB0aGlzIG1heQotCSAqIGNoYW5nZSB3aGVuIHRoZSBfUFJXIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIGxhdGVyLgorCSAqIGR1cmluZyBkaXNwYXRjaCBvZiB0aGlzIEdQRS4KIAkgKi8KIAlncGVfZXZlbnRfaW5mbyA9CiAJICAgICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX251bWJlciAtIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXJdOwogCi0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KQotCSAgICAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCB8IEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KSAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCk7CiAKIAlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGUgPQogCSAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKilvYmpfaGFuZGxlOwogCi0JLyogVXBkYXRlIGVuYWJsZSBtYXNrLCBidXQgZG9uJ3QgZW5hYmxlIHRoZSBIVyBHUEUgYXMgb2YgeWV0ICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKLQogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKIAkJCSAgIlJlZ2lzdGVyZWQgR1BFIG1ldGhvZCAlcyBhcyBHUEUgbnVtYmVyIDB4JS4yWFxuIiwKIAkJCSAgbmFtZSwgZ3BlX251bWJlcikpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NTQsMjAgKzQ0Nyw3IEBACiAJCQkJCQkJZ3BlX2Jsb2NrLT4KIAkJCQkJCQlibG9ja19iYXNlX251bWJlcl07CiAKLQkJLyogTWFyayBHUEUgZm9yIFdBS0UtT05MWSBidXQgV0FLRV9ESVNBQkxFRCAqLwotCi0JCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPQotCQkgICAgfihBQ1BJX0dQRV9XQUtFX0VOQUJMRUQgfCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZfc2V0X2dwZV90eXBlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9UWVBFX1dBS0UpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLAotCQkJCQkJICAgIEFDUElfR1BFX0RJU0FCTEUpOworCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gQUNQSV9HUEVfQ0FOX1dBS0U7CiAJfQogCiAgICAgICBjbGVhbnVwOgpAQCAtOTg5LDcgKzk2OSw2IEBACiBhY3BpX2V2X2luaXRpYWxpemVfZ3BlX2Jsb2NrKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpncGVfZGV2aWNlLAogCQkJICAgICBzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfZ3BlX3dhbGtfaW5mbyBncGVfaW5mbzsKIAl1MzIgd2FrZV9ncGVfY291bnQ7CkBAIC0xMDE5LDQyICs5OTgsNTAgQEAKIAkJZ3BlX2luZm8uZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrOwogCQlncGVfaW5mby5ncGVfZGV2aWNlID0gZ3BlX2RldmljZTsKIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQlhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkJCSAgIEFDUElfVUlOVDMyX01BWCwgQUNQSV9OU19XQUxLX1VOTE9DSywKIAkJCQkJICAgYWNwaV9ldl9tYXRjaF9wcndfYW5kX2dwZSwgTlVMTCwKIAkJCQkJICAgJmdwZV9pbmZvLCBOVUxMKTsKIAl9CiAKIAkvKgotCSAqIEVuYWJsZSBhbGwgR1BFcyBpbiB0aGlzIGJsb2NrIHRoYXQgaGF2ZSB0aGVzZSBhdHRyaWJ1dGVzOgotCSAqIDEpIGFyZSAicnVudGltZSIgb3IgInJ1bi93YWtlIiBHUEVzLCBhbmQKLQkgKiAyKSBoYXZlIGEgY29ycmVzcG9uZGluZyBfTHh4IG9yIF9FeHggbWV0aG9kCi0JICoKLQkgKiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jayBtdXN0IGJlIGVuYWJsZWQgdmlhIHRoZQotCSAqIGFjcGlfZW5hYmxlX2dwZSgpIGV4dGVybmFsIGludGVyZmFjZS4KKwkgKiBFbmFibGUgYWxsIEdQRXMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBtZXRob2QgYW5kIGFyZW4ndAorCSAqIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB3YWtldXBzLiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jaworCSAqIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlIGFjcGlfZW5hYmxlX2dwZSgpIGludGVyZmFjZS4KIAkgKi8KIAl3YWtlX2dwZV9jb3VudCA9IDA7CiAJZ3BlX2VuYWJsZWRfY291bnQgPSAwOworCWlmIChncGVfZGV2aWNlID09IGFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZSkKKwkJZ3BlX2RldmljZSA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIOyBqKyspIHsKKwkJCWFjcGlfc3RhdHVzIHN0YXR1czsKKwkJCWFjcGlfc2l6ZSBncGVfaW5kZXg7CisJCQlpbnQgZ3BlX251bWJlcjsKIAogCQkJLyogR2V0IHRoZSBpbmZvIGJsb2NrIGZvciB0aGlzIHBhcnRpY3VsYXIgR1BFICovCisJCQlncGVfaW5kZXggPSAoYWNwaV9zaXplKWkgKiBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCArIGo7CisJCQlncGVfZXZlbnRfaW5mbyA9ICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX2luZGV4XTsKIAotCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKLQkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQotCQkJCQkJCQkrIGpdOwotCi0JCQlpZiAoKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpICYmCi0JCQkgICAgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkpIHsKLQkJCQlncGVfZW5hYmxlZF9jb3VudCsrOwotCQkJfQotCi0JCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpIHsKIAkJCQl3YWtlX2dwZV9jb3VudCsrOworCQkJCWlmIChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQpCisJCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpKQorCQkJCWNvbnRpbnVlOworCisJCQlncGVfbnVtYmVyID0gZ3BlX2luZGV4ICsgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcjsKKwkJCXN0YXR1cyA9IGFjcGlfZW5hYmxlX2dwZShncGVfZGV2aWNlLCBncGVfbnVtYmVyLAorCQkJCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJCQkJIkZhaWxlZCB0byBlbmFibGUgR1BFICUwMlhcbiIsCisJCQkJCQlncGVfbnVtYmVyKSk7CisJCQllbHNlCisJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJfQogCX0KIApAQCAtMTA2MiwxNSArMTA0OSw3IEBACiAJCQkgICJGb3VuZCAldSBXYWtlLCBFbmFibGVkICV1IFJ1bnRpbWUgR1BFcyBpbiB0aGlzIGJsb2NrXG4iLAogCQkJICB3YWtlX2dwZV9jb3VudCwgZ3BlX2VuYWJsZWRfY291bnQpKTsKIAotCS8qIEVuYWJsZSBhbGwgdmFsaWQgcnVudGltZSBHUEVzIGZvdW5kIGFib3ZlICovCi0KLQlzdGF0dXMgPSBhY3BpX2h3X2VuYWJsZV9ydW50aW1lX2dwZV9ibG9jayhOVUxMLCBncGVfYmxvY2ssIE5VTEwpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGVuYWJsZSBHUEVzIGluIEdwZUJsb2NrICVwIiwKLQkJCSAgICBncGVfYmxvY2spKTsKLQl9Ci0KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKaW5kZXggY2UyMjRlMS4uOWEzY2I3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjU5LDkgKzI1OSwxNSBAQAogCiAJaGFuZGxlcl9vYmogPSBub3RpZnlfaW5mby0+bm90aWZ5LmhhbmRsZXJfb2JqOwogCWlmIChoYW5kbGVyX29iaikgewotCQloYW5kbGVyX29iai0+bm90aWZ5LmhhbmRsZXIobm90aWZ5X2luZm8tPm5vdGlmeS5ub2RlLAotCQkJCQkgICAgbm90aWZ5X2luZm8tPm5vdGlmeS52YWx1ZSwKLQkJCQkJICAgIGhhbmRsZXJfb2JqLT5ub3RpZnkuY29udGV4dCk7CisJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqbm90aWZpZXI7CisKKwkJbm90aWZpZXIgPSAmaGFuZGxlcl9vYmotPm5vdGlmeTsKKwkJd2hpbGUgKG5vdGlmaWVyKSB7CisJCQlub3RpZmllci0+aGFuZGxlcihub3RpZnlfaW5mby0+bm90aWZ5Lm5vZGUsCisJCQkJCSAgbm90aWZ5X2luZm8tPm5vdGlmeS52YWx1ZSwKKwkJCQkJICBub3RpZmllci0+Y29udGV4dCk7CisJCQlub3RpZmllciA9IG5vdGlmaWVyLT5uZXh0OworCQl9CiAJfQogCiAJLyogQWxsIGRvbmUgd2l0aCB0aGUgaW5mbyBvYmplY3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwppbmRleCA1MzM2ZDkxLi45OGZkMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzI5LDcgKzMyOSw3IEBACiAgKiAgICAgICAgICAgICAgcmVnaW9uX29mZnNldCAgICAgICAtIFdoZXJlIGluIHRoZSByZWdpb24gdG8gcmVhZCBvciB3cml0ZQogICogICAgICAgICAgICAgIGJpdF93aWR0aCAgICAgICAgICAgLSBGaWVsZCB3aWR0aCBpbiBiaXRzICg4LCAxNiwgMzIsIG9yIDY0KQogICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGluIG9yIG91dCB2YWx1ZSwgbXVzdCBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIDY0LWJpdCBhY3BpX2ludGVnZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmdWxsIDY0LWJpdCBpbnRlZ2VyCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTM0MSw4ICszNDEsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfZXZfYWRkcmVzc19zcGFjZV9kaXNwYXRjaCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqLAogCQkJICAgICAgIHUzMiBmdW5jdGlvbiwKLQkJCSAgICAgICB1MzIgcmVnaW9uX29mZnNldCwKLQkJCSAgICAgICB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKiB2YWx1ZSkKKwkJCSAgICAgICB1MzIgcmVnaW9uX29mZnNldCwgdTMyIGJpdF93aWR0aCwgdTY0ICp2YWx1ZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9hZHJfc3BhY2VfaGFuZGxlciBoYW5kbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCmluZGV4IGZmMTY4MDUyLi4yZTNiMDMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJCXZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqKnJlZ2lvbl9jb250ZXh0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCWFjcGlfaW50ZWdlciBwY2lfdmFsdWU7CisJdTY0IHBjaV92YWx1ZTsKIAlzdHJ1Y3QgYWNwaV9wY2lfaWQgKnBjaV9pZCA9ICpyZWdpb25fY29udGV4dDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpoYW5kbGVyX29iajsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGFyZW50X25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMKaW5kZXggNTY3YjM1Ni4uOGRmYmFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnNjaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCmluZGV4IDJmZTA4MDkuLmI0MDc1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjE4LDYgKzIxOCw3MiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0CisgKgorICogUEFSQU1FVEVSUzogIGhhbmRsZXJfb2JqICAgICAgICAtIEhhbmRsZXIgb2JqZWN0IHRvIHBvcHVsYXRlCisgKiAgICAgICAgICAgICAgaGFuZGxlcl90eXBlICAgICAgIC0gVGhlIHR5cGUgb2YgaGFuZGxlcjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfU1lTVEVNX05PVElGWTogc3lzdGVtX2hhbmRsZXIgKDAwLTdmKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9ERVZJQ0VfTk9USUZZOiBkcml2ZXJfaGFuZGxlciAoODAtZmYpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0FMTF9OT1RJRlk6ICBib3RoIHN5c3RlbSBhbmQgZGV2aWNlCisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICogICAgICAgICAgICAgIG5leHQgICAgICAgICAgICAgICAtIEFkZHJlc3Mgb2YgYSBoYW5kbGVyIG9iamVjdCB0byBsaW5rIHRvCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogUG9wdWxhdGUgYSBoYW5kbGVyIG9iamVjdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2FjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3Qoc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iaiwKKwkJCSAgICAgdTMyIGhhbmRsZXJfdHlwZSwKKwkJCSAgICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLCB2b2lkICpjb250ZXh0LAorCQkJICAgICBzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQpCit7CisJaGFuZGxlcl9vYmotPmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZTsKKwloYW5kbGVyX29iai0+aGFuZGxlciA9IGhhbmRsZXI7CisJaGFuZGxlcl9vYmotPmNvbnRleHQgPSBjb250ZXh0OworCWhhbmRsZXJfb2JqLT5uZXh0ID0gbmV4dDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgcGFyZW50X29iaiAgICAgICAgIC0gUGFyZW50IG9mIHRoZSBuZXcgb2JqZWN0CisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ3JlYXRlIGEgbmV3IGhhbmRsZXIgb2JqZWN0IGFuZCBwb3B1bGF0ZSBpdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2FkZF9oYW5kbGVyX29iamVjdChzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmosCisJCQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iajsKKworCS8qIFRoZSBwYXJlbnQgbXVzdCBub3QgYmUgYSBkZWZpY2Ugbm90aWZ5IGhhbmRsZXIgb2JqZWN0LiAqLworCWlmIChwYXJlbnRfb2JqLT5oYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJaGFuZGxlcl9vYmogPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2YoKmhhbmRsZXJfb2JqKSk7CisJaWYgKCFoYW5kbGVyX29iaikKKwkJcmV0dXJuIEFFX05PX01FTU9SWTsKKworCWFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QoaGFuZGxlcl9vYmosCisJCQkJCUFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJaGFuZGxlciwgY29udGV4dCwKKwkJCQkJcGFyZW50X29iai0+bmV4dCk7CisJcGFyZW50X29iai0+bmV4dCA9IGhhbmRsZXJfb2JqOworCisJcmV0dXJuIEFFX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIKICAqCiAgKiBQQVJBTUVURVJTOiAgRGV2aWNlICAgICAgICAgIC0gVGhlIGRldmljZSBmb3Igd2hpY2ggbm90aWZpZXMgd2lsbCBiZSBoYW5kbGVkCkBAIC0zMTYsMTUgKzM4MiwzMiBAQAogCQlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAkJaWYgKG9ial9kZXNjKSB7CiAKLQkJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyICovCisJCQkvKiBPYmplY3QgZXhpc3RzLiAqLwogCi0JCQlpZiAoKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkpIHx8Ci0JCQkgICAgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpKSB7CisJCQkvKiBGb3IgYSBkZXZpY2Ugbm90aWZ5LCBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyLiAqLworCQkJaWYgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCisJCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpIHsKIAkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KKworCQkJLyogU3lzdGVtIG5vdGlmaWVzIG1heSBoYXZlIG1vcmUgaGFuZGxlcnMgaW5zdGFsbGVkLiAqLworCQkJbm90aWZ5X29iaiA9IG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnk7CisKKwkJCWlmICgoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSAmJiBub3RpZnlfb2JqKSB7CisJCQkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpwYXJlbnRfb2JqOworCisJCQkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgeworCQkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKwkJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQkJfQorCisJCQkJcGFyZW50X29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQkJc3RhdHVzID0gYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QocGFyZW50X29iaiwKKwkJCQkJCQkJIGhhbmRsZXIsCisJCQkJCQkJCSBjb250ZXh0KTsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIENyZWF0ZSBhIG5ldyBvYmplY3QgKi8KIApAQCAtMzU2LDkgKzQzOSwxMCBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQlub3RpZnlfb2JqLT5ub3RpZnkubm9kZSA9IG5vZGU7Ci0JCW5vdGlmeV9vYmotPm5vdGlmeS5oYW5kbGVyID0gaGFuZGxlcjsKLQkJbm90aWZ5X29iai0+bm90aWZ5LmNvbnRleHQgPSBjb250ZXh0OworCQlhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0KCZub3RpZnlfb2JqLT5ub3RpZnksCisJCQkJCQloYW5kbGVyX3R5cGUsCisJCQkJCQloYW5kbGVyLCBjb250ZXh0LAorCQkJCQkJTlVMTCk7CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IG5vdGlmeV9vYmo7CkBAIC00MTgsNiArNTAyLDEwIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKworCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLworCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7CisKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBleGl0OwpAQCAtNDQ1LDE1ICs1MzMsNiBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9Ci0KIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJYWNwaV9nYmxfc3lzdGVtX25vdGlmeS5ub2RlID0gTlVMTDsKIAkJCWFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlciA9IE5VTEw7CkBAIC00ODgsMjggKzU2Nyw2MCBAQAogCQkvKiBPYmplY3QgZXhpc3RzIC0gbWFrZSBzdXJlIHRoZXJlJ3MgYW4gZXhpc3RpbmcgaGFuZGxlciAqLwogCiAJCWlmIChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpIHsKKwkJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqaGFuZGxlcl9vYmo7CisJCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmo7CisKIAkJCW5vdGlmeV9vYmogPSBvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5OwogCQkJaWYgKCFub3RpZnlfb2JqKSB7CiAJCQkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQogCi0JCQlpZiAobm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJaGFuZGxlcl9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJcGFyZW50X29iaiA9IE5VTEw7CisJCQl3aGlsZSAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJCWlmIChoYW5kbGVyX29iai0+bmV4dCkgeworCQkJCQlwYXJlbnRfb2JqID0gaGFuZGxlcl9vYmo7CisJCQkJCWhhbmRsZXJfb2JqID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgewogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KIAotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7CisJCQkvKgorCQkJICogUmVtb3ZlIHRoZSBoYW5kbGVyLiAgVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzLgorCQkJICogRmlyc3QsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSBhIG5vbi1lbWJlZGRlZCBvYmplY3QuCisJCQkgKiBTZWNvbmQsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgZW1iZWRkZWQgb2JqZWN0J3MKKwkJCSAqIGhhbmRsZXIgZGF0YSwgd2hpbGUgbm9uLWVtYmVkZGVkIG9iamVjdHMgZXhpc3QuCisJCQkgKiBGaW5hbGx5LCB3ZSBtYXkgbmVlZCB0byByZW1vdmUgdGhlIGVtYmVkZGVkIG9iamVjdAorCQkJICogZW50aXJlbHkgYWxvbmcgd2l0aCBpdHMgY29udGFpbmVyLgorCQkJICovCisJCQlpZiAocGFyZW50X29iaikgeworCQkJCS8qIE5vbi1lbWJlZGRlZCBvYmplY3QgaXMgYmVpbmcgcmVtb3ZlZC4gKi8KKwkJCQlwYXJlbnRfb2JqLT5uZXh0ID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSBpZiAobm90aWZ5X29iai0+bm90aWZ5Lm5leHQpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBoYW5kbGVyIG1hdGNoZXMgdGhlIGVtYmVkZGVkIG9iamVjdCwgYnV0CisJCQkJICogdGhlcmUgYXJlIG1vcmUgaGFuZGxlciBvYmplY3RzIGluIHRoZSBsaXN0LgorCQkJCSAqIFJlcGxhY2UgdGhlIGVtYmVkZGVkIG9iamVjdCdzIGRhdGEgd2l0aCB0aGUKKwkJCQkgKiBmaXJzdCBuZXh0IG9iamVjdCdzIGRhdGEgYW5kIHJlbW92ZSB0aGF0CisJCQkJICogb2JqZWN0LgorCQkJCSAqLworCQkJCXBhcmVudF9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJCWhhbmRsZXJfb2JqID0gbm90aWZ5X29iai0+bm90aWZ5Lm5leHQ7CisJCQkJKnBhcmVudF9vYmogPSAqaGFuZGxlcl9vYmo7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gbW9yZSBoYW5kbGVyIG9iamVjdHMgaW4gdGhlIGxpc3QuICovCisJCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IE5VTEw7CisJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQkJfQotCi0JCQkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KLQkJCW9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkgPSBOVUxMOwotCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQl9CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgewpAQCAtNTIzLDE0ICs2MzQsNiBAQAogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9CiAKIAkJCS8qIFJlbW92ZSB0aGUgaGFuZGxlciAqLwogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSA9IE5VTEw7CkBAIC02MTcsMTMgKzcyMCw2IEBACiAJaGFuZGxlci0+Y29udGV4dCA9IGNvbnRleHQ7CiAJaGFuZGxlci0+bWV0aG9kX25vZGUgPSBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGU7CiAKLQkvKiBEaXNhYmxlIHRoZSBHUEUgYmVmb3JlIGluc3RhbGxpbmcgdGhlIGhhbmRsZXIgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KIAkvKiBJbnN0YWxsIHRoZSBoYW5kbGVyICovCiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKQEAgLTcwNywxMyArODAzLDYgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogRGlzYWJsZSB0aGUgR1BFIGJlZm9yZSByZW1vdmluZyB0aGUgaGFuZGxlciAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQogCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggZWVkN2EzOC4uNWZmMzJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwMSw2NyArMjAxLDI1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfc2V0X2dwZV90eXBlCisgKiBGVU5DVElPTjogICAgYWNwaV9zZXRfZ3BlCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCiAgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCi0gKiAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIC0gTmV3IEdQRSB0eXBlCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBTZXQgdGhlIHR5cGUgb2YgYW4gaW5kaXZpZHVhbCBHUEUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlX3R5cGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3NldF9ncGVfdHlwZSk7Ci0KLQkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLwotCi0JZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKLQlpZiAoIWdwZV9ldmVudF9pbmZvKSB7Ci0JCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQotCWlmICgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSA9PSB0eXBlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JfQotCi0JLyogU2V0IHRoZSBuZXcgdHlwZSAod2lsbCBkaXNhYmxlIEdQRSBpZiBjdXJyZW50bHkgZW5hYmxlZCkgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfc2V0X2dwZV90eXBlKGdwZV9ldmVudF9pbmZvLCB0eXBlKTsKLQotICAgICAgdW5sb2NrX2FuZF9leGl0OgotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi1BQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9zZXRfZ3BlX3R5cGUpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX2dwZQotICoKLSAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBQYXJlbnQgR1BFIERldmljZQotICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jawotICogICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAtIEp1c3QgZW5hYmxlLCBvciBhbHNvIHdha2UgZW5hYmxlPworICogICAgICAgICAgICAgIGFjdGlvbiAgICAgICAgICAtIEVuYWJsZSBvciBkaXNhYmxlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGZyb20gSVNSIG9yIG5vdAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogRW5hYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKKyAqIERFU0NSSVBUSU9OOiBFbmFibGUgb3IgZGlzYWJsZSBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcikKK2FjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggYWN0aW9uKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbmFibGVfZ3BlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2dwZSk7CiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKIApAQCAtMjczLDE1ICsyMzEsOTAgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogUGVyZm9ybSB0aGUgZW5hYmxlICovCisJLyogUGVyZm9ybSB0aGUgYWN0aW9uICovCiAKLQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIFRSVUUpOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBBQ1BJX0dQRV9FTkFCTEU6CisJCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX0dQRV9ESVNBQkxFOgorCQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhY3Rpb25cbiIpKTsKKwkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJYnJlYWs7CisJfQogCiAgICAgICB1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2dwZSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9lbmFibGVfZ3BlCisgKgorICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCisgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCisgKiAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgIC0gUHVycG9zZSB0aGUgR1BFIHdpbGwgYmUgdXNlZCBmb3IKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFRha2UgYSByZWZlcmVuY2UgdG8gYSBHUEUgYW5kIGVuYWJsZSBpdCBpZiBuZWNlc3NhcnkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbmFibGVfZ3BlKTsKKworCWlmICh0eXBlICYgfkFDUElfR1BFX1RZUEVfV0FLRV9SVU4pCisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKworCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOworCisJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KKworCWdwZV9ldmVudF9pbmZvID0gYWNwaV9ldl9nZXRfZ3BlX2V2ZW50X2luZm8oZ3BlX2RldmljZSwgZ3BlX251bWJlcik7CisJaWYgKCFncGVfZXZlbnRfaW5mbykgeworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwl9CisKKwlpZiAodHlwZSAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkgeworCQlpZiAoKytncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAxKSB7CisJCQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJCWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50LS07CisJCX0KKwl9CisKKwlpZiAodHlwZSAmIEFDUElfR1BFX1RZUEVfV0FLRSkgeworCQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9DQU5fV0FLRSkpIHsKKwkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJfQorCisJCS8qCisJCSAqIFdha2UtdXAgR1BFcyBhcmUgb25seSBlbmFibGVkIHJpZ2h0IHByaW9yIHRvIHB1dHRpbmcgdGhlCisJCSAqIHN5c3RlbSBpbnRvIGEgc2xlZXAgc3RhdGUuCisJCSAqLworCQlpZiAoKytncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50ID09IDEpCisJCQlhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwl9CisKK3VubG9ja19hbmRfZXhpdDoKKwlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZW5hYmxlX2dwZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5MCwxNSArMzIzLDE0IEBACiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCiAgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCi0gKiAgICAgICAgICAgICAgRmxhZ3MgICAgICAgICAgIC0gSnVzdCBkaXNhYmxlLCBvciBhbHNvIHdha2UgZGlzYWJsZT8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgZnJvbSBJU1Igb3Igbm90CisgKiAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgIC0gUHVycG9zZSB0aGUgR1BFIHdvbid0IGJlIHVzZWQgZm9yIGFueSBtb3JlCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBEaXNhYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKKyAqIERFU0NSSVBUSU9OOiBSZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgR1BFIGFuZCBkaXNhYmxlIGl0IGlmIG5lY2Vzc2FyeQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKQorYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKQEAgLTMwNiw2ICszMzgsOSBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2Rpc2FibGVfZ3BlKTsKIAorCWlmICh0eXBlICYgfkFDUElfR1BFX1RZUEVfV0FLRV9SVU4pCisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCiAKQEAgLTMxNSwxMyArMzUwLDI0IEBACiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCWlmICgodHlwZSAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkgJiYgZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKKwkJaWYgKC0tZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQgPT0gMCkKKwkJCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCX0KKworCWlmICgodHlwZSAmIEFDUElfR1BFX1RZUEVfV0FLRSkgJiYgZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCkgeworCQkvKgorCQkgKiBXYWtlLXVwIEdQRXMgYXJlIG5vdCBlbmFibGVkIGFmdGVyIGxlYXZpbmcgc3lzdGVtIHNsZWVwCisJCSAqIHN0YXRlcywgc28gd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHRoZW0gaGVyZS4KKwkJICovCisJCWlmICgtLWdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQgPT0gMCkKKwkJCWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCX0KIAogdW5sb2NrX2FuZF9leGl0OgogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9Ci0KIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2Rpc2FibGVfZ3BlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCmluZGV4IGM5OGFhN2MuLjU0MWNiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKaW5kZXggNDZhZGZhNS4uN2U4YjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4NCw3ICsyODQsNyBAQAogYWNwaV9leF9yZWdpb25fcmVhZCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywgdTMyIGxlbmd0aCwgdTggKmJ1ZmZlcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JYWNwaV9pbnRlZ2VyIHZhbHVlOworCXU2NCB2YWx1ZTsKIAl1MzIgcmVnaW9uX29mZnNldCA9IDA7CiAJdTMyIGk7CiAKQEAgLTQ5MCw3ICs0OTAsMTEgQEAKIAogCXN0YXR1cyA9IGFjcGlfdGJfYWRkX3RhYmxlKCZ0YWJsZV9kZXNjLCAmdGFibGVfaW5kZXgpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIGNsZWFudXA7CisKKwkJLyogRGVsZXRlIGFsbG9jYXRlZCB0YWJsZSBidWZmZXIgKi8KKworCQlhY3BpX3RiX2RlbGV0ZV90YWJsZSgmdGFibGVfZGVzYyk7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAogCS8qCkBAIC01MzMsMTMgKzUzNyw2IEBACiAJCQkJCSAgICAgYWNwaV9nYmxfdGFibGVfaGFuZGxlcl9jb250ZXh0KTsKIAl9CiAKLSAgICAgIGNsZWFudXA6Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0KLQkJLyogRGVsZXRlIGFsbG9jYXRlZCB0YWJsZSBidWZmZXIgKi8KLQotCQlhY3BpX3RiX2RlbGV0ZV90YWJsZSgmdGFibGVfZGVzYyk7Ci0JfQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKaW5kZXggNTFkNWYyMi4uYmRhN2FlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUxLDggKzUxLDcgQEAKIAogLyogTG9jYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIHUzMgotYWNwaV9leF9jb252ZXJ0X3RvX2FzY2lpKGFjcGlfaW50ZWdlciBpbnRlZ2VyLAotCQkJIHUxNiBiYXNlLCB1OCAqIHN0cmluZywgdTggbWF4X2xlbmd0aCk7CithY3BpX2V4X2NvbnZlcnRfdG9fYXNjaWkodTY0IGludGVnZXIsIHUxNiBiYXNlLCB1OCAqc3RyaW5nLCB1OCBtYXhfbGVuZ3RoKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC03NSw3ICs3NCw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2M7CiAJdTggKnBvaW50ZXI7Ci0JYWNwaV9pbnRlZ2VyIHJlc3VsdDsKKwl1NjQgcmVzdWx0OwogCXUzMiBpOwogCXUzMiBjb3VudDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC0xNTUsNyArMTU0LDcgQEAKIAkJCSAqIExpdHRsZSBlbmRpYW4gaXMgdXNlZCwgbWVhbmluZyB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBidWZmZXIKIAkJCSAqIGlzIHRoZSBMU0Igb2YgdGhlIGludGVnZXIKIAkJCSAqLwotCQkJcmVzdWx0IHw9ICgoKGFjcGlfaW50ZWdlcikgcG9pbnRlcltpXSkgPDwgKGkgKiA4KSk7CisJCQlyZXN1bHQgfD0gKCgodTY0KSBwb2ludGVyW2ldKSA8PCAoaSAqIDgpKTsKIAkJfQogCQlicmVhazsKIApAQCAtMjg1LDEwICsyODQsOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHUzMgotYWNwaV9leF9jb252ZXJ0X3RvX2FzY2lpKGFjcGlfaW50ZWdlciBpbnRlZ2VyLAotCQkJIHUxNiBiYXNlLCB1OCAqIHN0cmluZywgdTggZGF0YV93aWR0aCkKK2FjcGlfZXhfY29udmVydF90b19hc2NpaSh1NjQgaW50ZWdlciwgdTE2IGJhc2UsIHU4ICpzdHJpbmcsIHU4IGRhdGFfd2lkdGgpCiB7Ci0JYWNwaV9pbnRlZ2VyIGRpZ2l0OworCXU2NCBkaWdpdDsKIAl1MzIgaTsKIAl1MzIgajsKIAl1MzIgayA9IDA7CkBAIC01MzEsMTAgKzUyOSw5IEBACiAJCSAqIChzZXBhcmF0ZWQgYnkgY29tbWFzIG9yIHNwYWNlcykKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBvYmpfZGVzYy0+YnVmZmVyLmxlbmd0aDsgaSsrKSB7Ci0JCQluZXdfYnVmICs9IGFjcGlfZXhfY29udmVydF90b19hc2NpaSgoYWNwaV9pbnRlZ2VyKQotCQkJCQkJCSAgICBvYmpfZGVzYy0+YnVmZmVyLgotCQkJCQkJCSAgICBwb2ludGVyW2ldLCBiYXNlLAotCQkJCQkJCSAgICBuZXdfYnVmLCAxKTsKKwkJCW5ld19idWYgKz0gYWNwaV9leF9jb252ZXJ0X3RvX2FzY2lpKCh1NjQpIG9ial9kZXNjLT4KKwkJCQkJCQkgICAgYnVmZmVyLnBvaW50ZXJbaV0sCisJCQkJCQkJICAgIGJhc2UsIG5ld19idWYsIDEpOwogCQkJKm5ld19idWYrKyA9IHNlcGFyYXRvcjsJLyogZWFjaCBzZXBhcmF0ZWQgYnkgYSBjb21tYSBvciBzcGFjZSAqLwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYwppbmRleCAwMmIyNWQyLi4wYWE1N2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKaW5kZXggZGUzNDQ2My4uZDM5ZDQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwppbmRleCAxNTg4YTJkLi42Yzc5ZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEzMCw3ICsxMzAsNyBAQAogCQkvKiBDYWxsIHRoZSByZWdpb24gaGFuZGxlciBmb3IgdGhlIHJlYWQgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2V4X2FjY2Vzc19yZWdpb24ob2JqX2Rlc2MsIDAsCi0JCQkJCSAgICAgICBBQ1BJX0NBU1RfUFRSKGFjcGlfaW50ZWdlciwKKwkJCQkJICAgICAgIEFDUElfQ0FTVF9QVFIodTY0LAogCQkJCQkJCSAgICAgYnVmZmVyX2Rlc2MtPgogCQkJCQkJCSAgICAgYnVmZmVyLnBvaW50ZXIpLAogCQkJCQkgICAgICAgZnVuY3Rpb24pOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZC4KIAkgKgotCSAqIElmIHRoZSBmaWVsZCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiBhbiBhY3BpX2ludGVnZXIsIGNyZWF0ZQorCSAqIElmIHRoZSBmaWVsZCBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlZ2VyIHdpZHRoLCBjcmVhdGUKIAkgKiBhIEJVRkZFUiB0byBob2xkIGl0LiAgT3RoZXJ3aXNlLCB1c2UgYW4gSU5URUdFUi4gIFRoaXMgYWxsb3dzCiAJICogdGhlIHVzZSBvZiBhcml0aG1ldGljIG9wZXJhdG9ycyBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgaWYgdGhlCiAJICogZmllbGQgc2l6ZSBpcyBlcXVhbCBvciBzbWFsbGVyIHRoYW4gYW4gSW50ZWdlci4KQEAgLTMwNiw4ICszMDYsNyBAQAogCQkgKiBzYW1lIGJ1ZmZlcikKIAkJICovCiAJCXN0YXR1cyA9IGFjcGlfZXhfYWNjZXNzX3JlZ2lvbihvYmpfZGVzYywgMCwKLQkJCQkJICAgICAgIChhY3BpX2ludGVnZXIgKikgYnVmZmVyLAotCQkJCQkgICAgICAgZnVuY3Rpb24pOworCQkJCQkgICAgICAgKHU2NCAqKSBidWZmZXIsIGZ1bmN0aW9uKTsKIAkJYWNwaV9leF9yZWxlYXNlX2dsb2JhbF9sb2NrKG9ial9kZXNjLT5jb21tb25fZmllbGQuZmllbGRfZmxhZ3MpOwogCiAJCSpyZXN1bHRfZGVzYyA9IGJ1ZmZlcl9kZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZsZGlvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwppbmRleCBkN2IzYjQxLi5mNjhhMjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU1LDExICs1NSwxMCBAQAogc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2ZpZWxkX2RhdHVtX2lvKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAogCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LAotCQkgICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsIHUzMiByZWFkX3dyaXRlKTsKKwkJICAgICAgIHU2NCAqdmFsdWUsIHUzMiByZWFkX3dyaXRlKTsKIAogc3RhdGljIHU4Ci1hY3BpX2V4X3JlZ2lzdGVyX292ZXJmbG93KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkJICBhY3BpX2ludGVnZXIgdmFsdWUpOworYWNwaV9leF9yZWdpc3Rlcl9vdmVyZmxvdyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywgdTY0IHZhbHVlKTsKIAogc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX2V4X3NldHVwX3JlZ2lvbih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKQEAgLTIxMiw3ICsyMTEsNyBAQAogICogICAgICAgICAgICAgIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0IC0gQnl0ZSBvZmZzZXQgb2YgdGhpcyBkYXR1bSB3aXRoaW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgZmllbGQKICAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAtIFdoZXJlIHRvIHN0b3JlIHZhbHVlIChtdXN0IGF0IGxlYXN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiBhY3BpX2ludGVnZXIpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCBiaXRzKQogICogICAgICAgICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgIC0gUmVhZCBvciBXcml0ZSBmbGFnIHBsdXMgb3RoZXIgcmVnaW9uLQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IGZsYWdzCiAgKgpAQCAtMjI0LDggKzIyMyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2FjY2Vzc19yZWdpb24odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCSAgICAgIHUzMiBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCwKLQkJICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsIHUzMiBmdW5jdGlvbikKKwkJICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LCB1NjQgKnZhbHVlLCB1MzIgZnVuY3Rpb24pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJnbl9kZXNjOwpAQCAtMzE3LDggKzMxNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdTgKLWFjcGlfZXhfcmVnaXN0ZXJfb3ZlcmZsb3codW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCQkgIGFjcGlfaW50ZWdlciB2YWx1ZSkKK2FjcGlfZXhfcmVnaXN0ZXJfb3ZlcmZsb3codW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsIHU2NCB2YWx1ZSkKIHsKIAogCWlmIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJpdF9sZW5ndGggPj0gQUNQSV9JTlRFR0VSX0JJVF9TSVpFKSB7CkBAIC0zMjksNyArMzI2LDcgQEAKIAkJcmV0dXJuIChGQUxTRSk7CiAJfQogCi0JaWYgKHZhbHVlID49ICgoYWNwaV9pbnRlZ2VyKSAxIDw8IG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCkpIHsKKwlpZiAodmFsdWUgPj0gKCh1NjQpIDEgPDwgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoKSkgewogCQkvKgogCQkgKiBUaGUgVmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgdGhhdCBjYW4gZml0IGludG8KIAkJICogdGhlIHJlZ2lzdGVyLgpAQCAtMzYyLDExICszNTksMTAgQEAKIAogc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2ZpZWxkX2RhdHVtX2lvKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LAotCQkgICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsIHUzMiByZWFkX3dyaXRlKQorCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LCB1NjQgKnZhbHVlLCB1MzIgcmVhZF93cml0ZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JYWNwaV9pbnRlZ2VyIGxvY2FsX3ZhbHVlOworCXU2NCBsb2NhbF92YWx1ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X2ZpZWxkX2RhdHVtX2lvLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKQEAgLTQzOSw4ICs0MzUsOCBAQAogCQkgKiB0aGUgcmVnaXN0ZXIKIAkJICovCiAJCWlmIChhY3BpX2V4X3JlZ2lzdGVyX292ZXJmbG93KG9ial9kZXNjLT5iYW5rX2ZpZWxkLmJhbmtfb2JqLAotCQkJCQkgICAgICAoYWNwaV9pbnRlZ2VyKSBvYmpfZGVzYy0+Ci0JCQkJCSAgICAgIGJhbmtfZmllbGQudmFsdWUpKSB7CisJCQkJCSAgICAgICh1NjQpIG9ial9kZXNjLT5iYW5rX2ZpZWxkLgorCQkJCQkgICAgICB2YWx1ZSkpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfUkVHSVNURVJfTElNSVQpOwogCQl9CiAKQEAgLTQ4MSw4ICs0NzcsOCBAQAogCQkgKiB0aGUgcmVnaXN0ZXIKIAkJICovCiAJCWlmIChhY3BpX2V4X3JlZ2lzdGVyX292ZXJmbG93KG9ial9kZXNjLT5pbmRleF9maWVsZC5pbmRleF9vYmosCi0JCQkJCSAgICAgIChhY3BpX2ludGVnZXIpIG9ial9kZXNjLT4KLQkJCQkJICAgICAgaW5kZXhfZmllbGQudmFsdWUpKSB7CisJCQkJCSAgICAgICh1NjQpIG9ial9kZXNjLT5pbmRleF9maWVsZC4KKwkJCQkJICAgICAgdmFsdWUpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX1JFR0lTVEVSX0xJTUlUKTsKIAkJfQogCkBAIC01MTIsNyArNTA4LDcgQEAKIAkJCXN0YXR1cyA9CiAJCQkgICAgYWNwaV9leF9leHRyYWN0X2Zyb21fZmllbGQob2JqX2Rlc2MtPmluZGV4X2ZpZWxkLgogCQkJCQkJICAgICAgIGRhdGFfb2JqLCB2YWx1ZSwKLQkJCQkJCSAgICAgICBzaXplb2YoYWNwaV9pbnRlZ2VyKSk7CisJCQkJCQkgICAgICAgc2l6ZW9mKHU2NCkpOwogCQl9IGVsc2UgewogCQkJLyogV3JpdGUgdGhlIGRhdHVtIHRvIHRoZSBkYXRhX3JlZ2lzdGVyICovCiAKQEAgLTUyMyw3ICs1MTksNyBAQAogCQkJc3RhdHVzID0KIAkJCSAgICBhY3BpX2V4X2luc2VydF9pbnRvX2ZpZWxkKG9ial9kZXNjLT5pbmRleF9maWVsZC4KIAkJCQkJCSAgICAgIGRhdGFfb2JqLCB2YWx1ZSwKLQkJCQkJCSAgICAgIHNpemVvZihhY3BpX2ludGVnZXIpKTsKKwkJCQkJCSAgICAgIHNpemVvZih1NjQpKTsKIAkJfQogCQlicmVhazsKIApAQCAtNTcxLDEzICs1NjcsMTIgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgbWFzaywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgZmllbGRfdmFsdWUsCi0JCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0KQorCQkJICAgICAgIHU2NCBtYXNrLAorCQkJICAgICAgIHU2NCBmaWVsZF92YWx1ZSwgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCWFjcGlfaW50ZWdlciBtZXJnZWRfdmFsdWU7Ci0JYWNwaV9pbnRlZ2VyIGN1cnJlbnRfdmFsdWU7CisJdTY0IG1lcmdlZF92YWx1ZTsKKwl1NjQgY3VycmVudF92YWx1ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X3dyaXRlX3dpdGhfdXBkYXRlX3J1bGUsIG1hc2spOwogCkBAIC01ODcsNyArNTgyLDcgQEAKIAogCS8qIElmIHRoZSBtYXNrIGlzIGFsbCBvbmVzLCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSB1cGRhdGUgcnVsZSAqLwogCi0JaWYgKG1hc2sgIT0gQUNQSV9JTlRFR0VSX01BWCkgeworCWlmIChtYXNrICE9IEFDUElfVUlOVDY0X01BWCkgewogCiAJCS8qIERlY29kZSB0aGUgdXBkYXRlIHJ1bGUgKi8KIApAQCAtNjc4LDggKzY3Myw4IEBACiAJCQkgICB2b2lkICpidWZmZXIsIHUzMiBidWZmZXJfbGVuZ3RoKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2ludGVnZXIgcmF3X2RhdHVtOwotCWFjcGlfaW50ZWdlciBtZXJnZWRfZGF0dW07CisJdTY0IHJhd19kYXR1bTsKKwl1NjQgbWVyZ2VkX2RhdHVtOwogCXUzMiBmaWVsZF9vZmZzZXQgPSAwOwogCXUzMiBidWZmZXJfb2Zmc2V0ID0gMDsKIAl1MzIgYnVmZmVyX3RhaWxfYml0czsKQEAgLTgwNCwxMCArNzk5LDEwIEBACiAJCQkgIHZvaWQgKmJ1ZmZlciwgdTMyIGJ1ZmZlcl9sZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaW50ZWdlciBtYXNrOwotCWFjcGlfaW50ZWdlciB3aWR0aF9tYXNrOwotCWFjcGlfaW50ZWdlciBtZXJnZWRfZGF0dW07Ci0JYWNwaV9pbnRlZ2VyIHJhd19kYXR1bSA9IDA7CisJdTY0IG1hc2s7CisJdTY0IHdpZHRoX21hc2s7CisJdTY0IG1lcmdlZF9kYXR1bTsKKwl1NjQgcmF3X2RhdHVtID0gMDsKIAl1MzIgZmllbGRfb2Zmc2V0ID0gMDsKIAl1MzIgYnVmZmVyX29mZnNldCA9IDA7CiAJdTMyIGJ1ZmZlcl90YWlsX2JpdHM7CkBAIC04NTUsNyArODUwLDcgQEAKIAkgKiBzaGlmdCBvcGVyYXRvcgogCSAqLwogCWlmIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmFjY2Vzc19iaXRfd2lkdGggPT0gQUNQSV9JTlRFR0VSX0JJVF9TSVpFKSB7Ci0JCXdpZHRoX21hc2sgPSBBQ1BJX0lOVEVHRVJfTUFYOworCQl3aWR0aF9tYXNrID0gQUNQSV9VSU5UNjRfTUFYOwogCX0gZWxzZSB7CiAJCXdpZHRoX21hc2sgPQogCQkgICAgQUNQSV9NQVNLX0JJVFNfQUJPVkUob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCmluZGV4IDk5OGVhYzMuLmM1YmIxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwOSw4ICs0MDksNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfaW50ZWdlcgotYWNwaV9leF9kb19tYXRoX29wKHUxNiBvcGNvZGUsIGFjcGlfaW50ZWdlciBpbnRlZ2VyMCwgYWNwaV9pbnRlZ2VyIGludGVnZXIxKQordTY0IGFjcGlfZXhfZG9fbWF0aF9vcCh1MTYgb3Bjb2RlLCB1NjQgaW50ZWdlcjAsIHU2NCBpbnRlZ2VyMSkKIHsKIAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKQEAgLTQ5OCw4ICs0OTcsNyBAQAogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9kb19sb2dpY2FsX251bWVyaWNfb3AodTE2IG9wY29kZSwKLQkJCSAgICAgIGFjcGlfaW50ZWdlciBpbnRlZ2VyMCwKLQkJCSAgICAgIGFjcGlfaW50ZWdlciBpbnRlZ2VyMSwgdTggKiBsb2dpY2FsX3Jlc3VsdCkKKwkJCSAgICAgIHU2NCBpbnRlZ2VyMCwgdTY0IGludGVnZXIxLCB1OCAqbG9naWNhbF9yZXN1bHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTggbG9jYWxfcmVzdWx0ID0gRkFMU0U7CkBAIC01NjQsOCArNTYyLDggQEAKIAkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb3BlcmFuZDEsIHU4ICogbG9naWNhbF9yZXN1bHQpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbG9jYWxfb3BlcmFuZDEgPSBvcGVyYW5kMTsKLQlhY3BpX2ludGVnZXIgaW50ZWdlcjA7Ci0JYWNwaV9pbnRlZ2VyIGludGVnZXIxOworCXU2NCBpbnRlZ2VyMDsKKwl1NjQgaW50ZWdlcjE7CiAJdTMyIGxlbmd0aDA7CiAJdTMyIGxlbmd0aDE7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCmluZGV4IDNjNDU2YmQuLmNjOGExMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bmFtZXMuYwppbmRleCBmZmRhZTEyLi42NzlmMzA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKaW5kZXggNzUyZmU0OC4uOTlhZGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI2MSw4ICsyNjEsOCBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjMiA9IE5VTEw7CiAJdTMyIHRlbXAzMjsKIAl1MzIgaTsKLQlhY3BpX2ludGVnZXIgcG93ZXJfb2ZfdGVuOwotCWFjcGlfaW50ZWdlciBkaWdpdDsKKwl1NjQgcG93ZXJfb2ZfdGVuOworCXU2NCBkaWdpdDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV8xQV8xVF8xUiwKIAkJCQlhY3BpX3BzX2dldF9vcGNvZGVfbmFtZSh3YWxrX3N0YXRlLT5vcGNvZGUpKTsKQEAgLTM2Miw3ICszNjIsNyBAQAogCQkJCS8qIFN1bSB0aGUgZGlnaXQgaW50byB0aGUgcmVzdWx0IHdpdGggdGhlIGN1cnJlbnQgcG93ZXIgb2YgMTAgKi8KIAogCQkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlICs9Ci0JCQkJICAgICgoKGFjcGlfaW50ZWdlcikgdGVtcDMyKSAqIHBvd2VyX29mX3Rlbik7CisJCQkJICAgICgoKHU2NCkgdGVtcDMyKSAqIHBvd2VyX29mX3Rlbik7CiAKIAkJCQkvKiBTaGlmdCB0byBuZXh0IEJDRCBkaWdpdCAqLwogCkBAIC0zOTIsNyArMzkyLDcgQEAKIAkJCQkgKiByZW1haW5kZXIgZnJvbSBhYm92ZQogCQkJCSAqLwogCQkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlIHw9Ci0JCQkJICAgICgoKGFjcGlfaW50ZWdlcikgdGVtcDMyKSA8PCBBQ1BJX01VTF80KGkpKTsKKwkJCQkgICAgKCgodTY0KSB0ZW1wMzIpIDw8IEFDUElfTVVMXzQoaSkpOwogCQkJfQogCiAJCQkvKiBPdmVyZmxvdyBpZiB0aGVyZSBpcyBhbnkgZGF0YSBsZWZ0IGluIERpZ2l0ICovCkBAIC00MzksNyArNDM5LDcgQEAKIAogCQkJLyogVGhlIG9iamVjdCBleGlzdHMgaW4gdGhlIG5hbWVzcGFjZSwgcmV0dXJuIFRSVUUgKi8KIAotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX0lOVEVHRVJfTUFYOworCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQ2NF9NQVg7CiAJCQlnb3RvIGNsZWFudXA7CiAKIAkJZGVmYXVsdDoKQEAgLTU4OSw3ICs1ODksNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1MzIgdHlwZTsKLQlhY3BpX2ludGVnZXIgdmFsdWU7CisJdTY0IHZhbHVlOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzFBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwpAQCAtNjEwLDcgKzYxMCw3IEBACiAJCSAqIHJldHVybl9kZXNjLT5JbnRlZ2VyLlZhbHVlIGlzIGluaXRpYWxseSA9PSAwIChGQUxTRSkgZnJvbSBhYm92ZS4KIAkJICovCiAJCWlmICghb3BlcmFuZFswXS0+aW50ZWdlci52YWx1ZSkgewotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX0lOVEVHRVJfTUFYOworCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQ2NF9NQVg7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYwppbmRleCA4NWQ5NWM5Li4yMjg0MWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgyLDcgKzI4Miw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9wZXJhbmQgPSAmd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF07CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MgPSBOVUxMOwotCWFjcGlfaW50ZWdlciBpbmRleDsKKwl1NjQgaW5kZXg7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9zaXplIGxlbmd0aDsKIApAQCAtNTg0LDcgKzU4NCw3IEBACiAJICogRGVmYXVsdCBpcyBGQUxTRSAoemVybykKIAkgKi8KIAlpZiAobG9naWNhbF9yZXN1bHQpIHsKLQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX0lOVEVHRVJfTUFYOworCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9IEFDUElfVUlOVDY0X01BWDsKIAl9CiAKICAgICAgIGNsZWFudXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKaW5kZXggMjUzZjllMS4uOGJiMTAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0OCw3ICsxNDgsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjID0gTlVMTDsKIAljaGFyICpidWZmZXIgPSBOVUxMOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCWFjcGlfaW50ZWdlciBpbmRleDsKKwl1NjQgaW5kZXg7CiAJYWNwaV9zaXplIGxlbmd0aDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV8zQV8xVF8xUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYwppbmRleCAyOTU1NDJlLi5mMjU2YjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnNi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjE4LDcgKzIxOCw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9wZXJhbmQgPSAmd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF07CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MgPSBOVUxMOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCWFjcGlfaW50ZWdlciBpbmRleDsKKwl1NjQgaW5kZXg7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqdGhpc19lbGVtZW50OwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzZBXzBUXzFSLApAQCAtMjUzLDkgKzI1Myw5IEBACiAJCX0KIAogCQkvKiBDcmVhdGUgYW4gaW50ZWdlciBmb3IgdGhlIHJldHVybiB2YWx1ZSAqLwotCQkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSBpcyBBQ1BJX0lOVEVHRVJfTUFYIGlmIG5vIG1hdGNoIGZvdW5kICovCisJCS8qIERlZmF1bHQgcmV0dXJuIHZhbHVlIGlzIEFDUElfVUlOVDY0X01BWCBpZiBubyBtYXRjaCBmb3VuZCAqLwogCi0JCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZWdlcl9vYmplY3QoQUNQSV9JTlRFR0VSX01BWCk7CisJCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZWdlcl9vYmplY3QoQUNQSV9VSU5UNjRfTUFYKTsKIAkJaWYgKCFyZXR1cm5fZGVzYykgewogCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQkJZ290byBjbGVhbnVwOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCSAqCiAJCSAqIFVwb24gZmluZGluZyBhIG1hdGNoLCB0aGUgbG9vcCB3aWxsIHRlcm1pbmF0ZSB2aWEgImJyZWFrIiBhdAogCQkgKiB0aGUgYm90dG9tLiAgSWYgaXQgdGVybWluYXRlcyAibm9ybWFsbHkiLCBtYXRjaF92YWx1ZSB3aWxsIGJlCi0JCSAqIEFDUElfSU5URUdFUl9NQVggKE9uZXMpIChpdHMgaW5pdGlhbCB2YWx1ZSkgaW5kaWNhdGluZyB0aGF0IG5vCisJCSAqIEFDUElfVUlOVDY0X01BWCAoT25lcykgKGl0cyBpbml0aWFsIHZhbHVlKSBpbmRpY2F0aW5nIHRoYXQgbm8KIAkJICogbWF0Y2ggd2FzIGZvdW5kLgogCQkgKi8KIAkJZm9yICg7IGluZGV4IDwgb3BlcmFuZFswXS0+cGFja2FnZS5jb3VudDsgaW5kZXgrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKaW5kZXggNTJmZWMwNy4uZWRmNjJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IDJiZDgzYWMuLjQ4NmIyZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MCw3ICs3MCw3IEBACiBhY3BpX2V4X3N5c3RlbV9tZW1vcnlfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkJICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJCSAgICB1MzIgYml0X3dpZHRoLAotCQkJCSAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCQkgICAgdTY0ICp2YWx1ZSwKIAkJCQkgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTExNSw4ICsxMTUsNyBAQAogCSAqIEhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgbm9uLWFsaWduZWQgZGF0YSB0cmFuc2ZlcnMsIHdlIG11c3QgdmVyaWZ5CiAJICogdGhlIHJlcXVlc3QuCiAJICovCi0JKHZvaWQpYWNwaV91dF9zaG9ydF9kaXZpZGUoKGFjcGlfaW50ZWdlcikgYWRkcmVzcywgbGVuZ3RoLCBOVUxMLAotCQkJCSAgICZyZW1haW5kZXIpOworCSh2b2lkKWFjcGlfdXRfc2hvcnRfZGl2aWRlKCh1NjQpIGFkZHJlc3MsIGxlbmd0aCwgTlVMTCwgJnJlbWFpbmRlcik7CiAJaWYgKHJlbWFpbmRlciAhPSAwKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfQUxJR05NRU5UKTsKIAl9CkBAIC0xMjgsMTAgKzEyNyw5IEBACiAJICogICAgMikgQWRkcmVzcyBiZXlvbmQgdGhlIGN1cnJlbnQgbWFwcGluZz8KIAkgKi8KIAlpZiAoKGFkZHJlc3MgPCBtZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MpIHx8Ci0JICAgICgoKGFjcGlfaW50ZWdlcikgYWRkcmVzcyArIGxlbmd0aCkgPiAoKGFjcGlfaW50ZWdlcikKLQkJCQkJCSAgbWVtX2luZm8tPgotCQkJCQkJICBtYXBwZWRfcGh5c2ljYWxfYWRkcmVzcyArCi0JCQkJCQkgIG1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoKSkpIHsKKwkgICAgKCgodTY0KSBhZGRyZXNzICsgbGVuZ3RoKSA+ICgodTY0KQorCQkJCQkgbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzICsKKwkJCQkJIG1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoKSkpIHsKIAkJLyoKIAkJICogVGhlIHJlcXVlc3QgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHRoZSBjdXJyZW50IG1lbW9yeSBtYXBwaW5nOwogCQkgKiBEZWxldGUgdGhlIGV4aXN0aW5nIG1hcHBpbmcgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuCkBAIC0xOTMsOCArMTkxLDcgQEAKIAkgKiBhY2Nlc3MKIAkgKi8KIAlsb2dpY2FsX2FkZHJfcHRyID0gbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MgKwotCSAgICAoKGFjcGlfaW50ZWdlcikgYWRkcmVzcyAtCi0JICAgICAoYWNwaV9pbnRlZ2VyKSBtZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MpOworCSAgICAoKHU2NCkgYWRkcmVzcyAtICh1NjQpIG1lbV9pbmZvLT5tYXBwZWRfcGh5c2ljYWxfYWRkcmVzcyk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJTeXN0ZW0tTWVtb3J5ICh3aWR0aCAlZCkgUi9XICVkIEFkZHJlc3M9JTguOFglOC44WFxuIiwKQEAgLTIxNSwxOSArMjEyLDE5IEBACiAJCSp2YWx1ZSA9IDA7CiAJCXN3aXRjaCAoYml0X3dpZHRoKSB7CiAJCWNhc2UgODoKLQkJCSp2YWx1ZSA9IChhY3BpX2ludGVnZXIpIEFDUElfR0VUOChsb2dpY2FsX2FkZHJfcHRyKTsKKwkJCSp2YWx1ZSA9ICh1NjQpIEFDUElfR0VUOChsb2dpY2FsX2FkZHJfcHRyKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMTY6Ci0JCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSBBQ1BJX0dFVDE2KGxvZ2ljYWxfYWRkcl9wdHIpOworCQkJKnZhbHVlID0gKHU2NCkgQUNQSV9HRVQxNihsb2dpY2FsX2FkZHJfcHRyKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMzI6Ci0JCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSBBQ1BJX0dFVDMyKGxvZ2ljYWxfYWRkcl9wdHIpOworCQkJKnZhbHVlID0gKHU2NCkgQUNQSV9HRVQzMihsb2dpY2FsX2FkZHJfcHRyKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgNjQ6Ci0JCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSBBQ1BJX0dFVDY0KGxvZ2ljYWxfYWRkcl9wdHIpOworCQkJKnZhbHVlID0gKHU2NCkgQUNQSV9HRVQ2NChsb2dpY2FsX2FkZHJfcHRyKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yOTEsNyArMjg4LDcgQEAKIGFjcGlfZXhfc3lzdGVtX2lvX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJCXUzMiBiaXRfd2lkdGgsCi0JCQkJYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJdTY0ICp2YWx1ZSwKIAkJCQl2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwpAQCAtMzUwLDcgKzM0Nyw3IEBACiBhY3BpX2V4X3BjaV9jb25maWdfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkJIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJCSB1MzIgYml0X3dpZHRoLAotCQkJCSBhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCQkgdTY0ICp2YWx1ZSwKIAkJCQkgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTQyNSw3ICs0MjIsNyBAQAogYWNwaV9leF9jbW9zX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkgICB1MzIgYml0X3dpZHRoLAotCQkJICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICB1NjQgKnZhbHVlLAogCQkJICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTQ1Nyw3ICs0NTQsNyBAQAogYWNwaV9leF9wY2lfYmFyX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkgICAgICB1MzIgYml0X3dpZHRoLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICAgICB1NjQgKnZhbHVlLAogCQkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTQ4OSw3ICs0ODYsNyBAQAogYWNwaV9leF9kYXRhX3RhYmxlX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJQUNQSV9GVU5DVElPTl9UUkFDRShleF9kYXRhX3RhYmxlX3NwYWNlX2hhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCmluZGV4IDYwNzk1OGYuLmZkYzFiMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKaW5kZXggYzkzYjU0Yy4uZmRkNmE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29wLmMKaW5kZXggNWM3MjlhOS4uYzVlY2Q2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29wLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jCmluZGV4IDZlZmQwN2EuLjcwMmI5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCmluZGV4IDYwOGU4MzguLmQ0YWY2ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKQEAgLTcsNyArNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3Rvcm9iLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3Rvcm9iLmMKaW5kZXggMjU3NzA2ZS4uZTk3MmI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yb2IuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzeXN0ZW0uYwppbmRleCAzZDAwYjkzLi5lMTFiNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN5c3RlbS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTkzLDcgKzE5Myw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3VzcGVuZChhY3BpX2ludGVnZXIgaG93X2xvbmcpCithY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV9kb19zdXNwZW5kKHU2NCBob3dfbG9uZykKIHsKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKaW5kZXggN2Q0MWY5OS4uNzRjMjRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Nyw3ICs2Nyw3IEBACiBBQ1BJX01PRFVMRV9OQU1FKCJleHV0aWxzIikKIAogLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHUzMiBhY3BpX2V4X2RpZ2l0c19uZWVkZWQoYWNwaV9pbnRlZ2VyIHZhbHVlLCB1MzIgYmFzZSk7CitzdGF0aWMgdTMyIGFjcGlfZXhfZGlnaXRzX25lZWRlZCh1NjQgdmFsdWUsIHUzMiBiYXNlKTsKIAogI2lmbmRlZiBBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJICogV2UgYXJlIHJ1bm5pbmcgYSBtZXRob2QgdGhhdCBleGlzdHMgaW4gYSAzMi1iaXQgQUNQSSB0YWJsZS4KIAkJICogVHJ1bmNhdGUgdGhlIHZhbHVlIHRvIDMyIGJpdHMgYnkgemVyb2luZyBvdXQgdGhlIHVwcGVyIDMyLWJpdCBmaWVsZAogCQkgKi8KLQkJb2JqX2Rlc2MtPmludGVnZXIudmFsdWUgJj0gKGFjcGlfaW50ZWdlcikgQUNQSV9VSU5UMzJfTUFYOworCQlvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSAmPSAodTY0KSBBQ1BJX1VJTlQzMl9NQVg7CiAJfQogfQogCkBAIC0zMjcsMTQgKzMyNywxNCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB1MzIgYWNwaV9leF9kaWdpdHNfbmVlZGVkKGFjcGlfaW50ZWdlciB2YWx1ZSwgdTMyIGJhc2UpCitzdGF0aWMgdTMyIGFjcGlfZXhfZGlnaXRzX25lZWRlZCh1NjQgdmFsdWUsIHUzMiBiYXNlKQogewogCXUzMiBudW1fZGlnaXRzOwotCWFjcGlfaW50ZWdlciBjdXJyZW50X3ZhbHVlOworCXU2NCBjdXJyZW50X3ZhbHVlOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShleF9kaWdpdHNfbmVlZGVkKTsKIAotCS8qIGFjcGlfaW50ZWdlciBpcyB1bnNpZ25lZCwgc28gd2UgZG9uJ3Qgd29ycnkgYWJvdXQgYSAnLScgcHJlZml4ICovCisJLyogdTY0IGlzIHVuc2lnbmVkLCBzbyB3ZSBkb24ndCB3b3JyeSBhYm91dCBhICctJyBwcmVmaXggKi8KIAogCWlmICh2YWx1ZSA9PSAwKSB7CiAJCXJldHVybl9VSU5UMzIoMSk7CkBAIC0zNzAsNyArMzcwLDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqb3V0X3N0cmluZywgYWNwaV9pbnRlZ2VyIGNvbXByZXNzZWRfaWQpCit2b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqb3V0X3N0cmluZywgdTY0IGNvbXByZXNzZWRfaWQpCiB7CiAJdTMyIHN3YXBwZWRfaWQ7CiAKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAJICAgIChjaGFyKSgweDQwICsgKCgodW5zaWduZWQgbG9uZylzd2FwcGVkX2lkID4+IDI2KSAmIDB4MUYpKTsKIAlvdXRfc3RyaW5nWzFdID0gKGNoYXIpKDB4NDAgKyAoKHN3YXBwZWRfaWQgPj4gMjEpICYgMHgxRikpOwogCW91dF9zdHJpbmdbMl0gPSAoY2hhcikoMHg0MCArICgoc3dhcHBlZF9pZCA+PiAxNikgJiAweDFGKSk7Ci0Jb3V0X3N0cmluZ1szXSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcilzd2FwcGVkX2lkLCAxMik7Ci0Jb3V0X3N0cmluZ1s0XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcilzd2FwcGVkX2lkLCA4KTsKLQlvdXRfc3RyaW5nWzVdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKXN3YXBwZWRfaWQsIDQpOwotCW91dF9zdHJpbmdbNl0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgMCk7CisJb3V0X3N0cmluZ1szXSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKHU2NCkgc3dhcHBlZF9pZCwgMTIpOworCW91dF9zdHJpbmdbNF0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKCh1NjQpIHN3YXBwZWRfaWQsIDgpOworCW91dF9zdHJpbmdbNV0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKCh1NjQpIHN3YXBwZWRfaWQsIDQpOworCW91dF9zdHJpbmdbNl0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKCh1NjQpIHN3YXBwZWRfaWQsIDApOwogCW91dF9zdHJpbmdbN10gPSAwOwogfQogCkBAIC00MTgsNyArNDE4LDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcoY2hhciAqb3V0X3N0cmluZywgYWNwaV9pbnRlZ2VyIHZhbHVlKQordm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKm91dF9zdHJpbmcsIHU2NCB2YWx1ZSkKIHsKIAl1MzIgY291bnQ7CiAJdTMyIGRpZ2l0c19uZWVkZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYwppbmRleCA5YWYzNjFhLi42NzlhMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKaW5kZXggYzI4YzQxYi4uYmQ3MjMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9od19yZWFkKCZpbl9ieXRlLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPnN0YXR1c19hZGRyZXNzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKIAlpZiAocmVnaXN0ZXJfYml0ICYgaW5fYnl0ZSkgewpAQCAtMjM0LDkgKzIzNCw3IEBACiAJLyogU2V0IHJldHVybiB2YWx1ZSAqLwogCiAJKCpldmVudF9zdGF0dXMpID0gbG9jYWxfZXZlbnRfc3RhdHVzOwotCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Ci0JcmV0dXJuIChzdGF0dXMpOworCXJldHVybiAoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYwppbmRleCAxNWM5ZWQyLi5lYzdmYzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKQEAgLTcsNyArNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwppbmRleCBjYzIyZjlhLi41ZTZkNGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKaW5kZXggNmIyODJlOC4uMWVmOGUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDAsNyArMTQwLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIGRlbHRhX3RpY2tzOwotCWFjcGlfaW50ZWdlciBxdW90aWVudDsKKwl1NjQgcXVvdGllbnQ7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3RpbWVyX2R1cmF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYwppbmRleCBlYzMzZjI3Li5lMjZjMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKaW5kZXggNjQ3YzdiNi4uNTBjYzNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKaW5kZXggZDYyMmJhNy4uYWEyYjgwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCmluZGV4IDhhNThhMWIuLjk4MjI2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCmluZGV4IGUzNzgzNmUuLjA2ODlkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYwppbmRleCAzNmJlN2YwLi5kMmE5NzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKaW5kZXggYWY5ZmU5MS4uZjUyODI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCmluZGV4IDRmOGFiYWMuLjliZDZmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCmluZGV4IGE3MjM0ZTYuLmRmMThiZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCmluZGV4IDhmOWE0ODcuLjk1OTM3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCA2MGYzYWYwLi40MWE5MjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKaW5kZXggNjYyYTRiZC4uMjdjZGE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKaW5kZXggZDM0ZmE1OS4uNzA5NmJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIzMSw2ICsyMzEsNyBAQAogCSAqIE5vdGU6IFBhY2thZ2UgbWF5IGhhdmUgYmVlbiBuZXdseSBjcmVhdGVkIGJ5IGNhbGwgYWJvdmUuCiAJICovCiAJaWYgKCgqcmV0dXJuX29iamVjdF9wdHIpLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlkYXRhLT5wYXJlbnRfcGFja2FnZSA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKIAkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CkBAIC03MTAsNiArNzExLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlzdWJfcGFja2FnZSA9ICplbGVtZW50czsKIAkJc3ViX2VsZW1lbnRzID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHM7CisJCWRhdGEtPnBhcmVudF9wYWNrYWdlID0gc3ViX3BhY2thZ2U7CiAKIAkJLyogRWFjaCBzdWItb2JqZWN0IG11c3QgYmUgb2YgdHlwZSBQYWNrYWdlICovCiAKQEAgLTcyMSw2ICs3MjMsNyBAQAogCiAJCS8qIEV4YW1pbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBleHBlY3RlZCBzdWItcGFja2FnZXMgKi8KIAorCQlkYXRhLT5wYXJlbnRfcGFja2FnZSA9IHN1Yl9wYWNrYWdlOwogCQlzd2l0Y2ggKHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1BUWVBFMjoKIAkJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CkBAIC04MDAsNyArODAzLDcgQEAKIAogCQkJLyoKIAkJCSAqIEZpcnN0IGVsZW1lbnQgaXMgdGhlIChJbnRlZ2VyKSBjb3VudCBvZiBlbGVtZW50cywgaW5jbHVkaW5nCi0JCQkgKiB0aGUgY291bnQgZmllbGQuCisJCQkgKiB0aGUgY291bnQgZmllbGQgKHRoZSBBQ1BJIG5hbWUgaXMgbnVtX2VsZW1lbnRzKQogCQkJICovCiAJCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIHN1Yl9lbGVtZW50cywKIAkJCQkJCQkgICBBQ1BJX1JUWVBFX0lOVEVHRVIsCkBAIC04MjIsNiArODI1LDE2IEBACiAJCQkJZXhwZWN0ZWRfY291bnQgPSBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDE7CiAJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKIAkJCX0KKwkJCWlmIChleHBlY3RlZF9jb3VudCA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBFaXRoZXIgdGhlIG51bV9lbnRyaWVzIGVsZW1lbnQgd2FzIG9yaWdpbmFsbHkgemVybyBvciBpdCB3YXMKKwkJCQkgKiBhIE5VTEwgZWxlbWVudCBhbmQgcmVwYWlyZWQgdG8gYW4gSW50ZWdlciBvZiB2YWx1ZSB6ZXJvLgorCQkJCSAqIEluIGVpdGhlciBjYXNlLCByZXBhaXIgaXQgYnkgc2V0dGluZyBudW1fZW50cmllcyB0byBiZSB0aGUKKwkJCQkgKiBhY3R1YWwgc2l6ZSBvZiB0aGUgc3VicGFja2FnZS4KKwkJCQkgKi8KKwkJCQlleHBlY3RlZF9jb3VudCA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50OworCQkJCSgqc3ViX2VsZW1lbnRzKS0+aW50ZWdlci52YWx1ZSA9IGV4cGVjdGVkX2NvdW50OworCQkJfQogCiAJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KIApAQCAtOTQ1LDEwICs5NTgsMTggQEAKIAljaGFyIHR5cGVfYnVmZmVyWzQ4XTsJLyogUm9vbSBmb3IgNSB0eXBlcyAqLwogCiAJLyoKLQkgKiBJZiB3ZSBnZXQgYSBOVUxMIHJldHVybl9vYmplY3QgaGVyZSwgaXQgaXMgYSBOVUxMIHBhY2thZ2UgZWxlbWVudCwKLQkgKiBhbmQgdGhpcyBpcyBhbHdheXMgYW4gZXJyb3IuCisJICogSWYgd2UgZ2V0IGEgTlVMTCByZXR1cm5fb2JqZWN0IGhlcmUsIGl0IGlzIGEgTlVMTCBwYWNrYWdlIGVsZW1lbnQuCisJICogU2luY2UgYWxsIGV4dHJhbmVvdXMgTlVMTCBwYWNrYWdlIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCBlYXJsaWVyIGJ5IGEKKwkgKiBjYWxsIHRvIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMsIHRoaXMgaXMgYW4gdW5leHBlY3RlZCBOVUxMIGVsZW1lbnQuCisJICogV2Ugd2lsbCBhdHRlbXB0IHRvIHJlcGFpciBpdC4KIAkgKi8KIAlpZiAoIXJldHVybl9vYmplY3QpIHsKKwkJc3RhdHVzID0gYWNwaV9uc19yZXBhaXJfbnVsbF9lbGVtZW50KGRhdGEsIGV4cGVjdGVkX2J0eXBlcywKKwkJCQkJCSAgICAgcGFja2FnZV9pbmRleCwKKwkJCQkJCSAgICAgcmV0dXJuX29iamVjdF9wdHIpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCXJldHVybiAoQUVfT0spOwkvKiBSZXBhaXIgd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJfQogCQlnb3RvIHR5cGVfZXJyb3JfZXhpdDsKIAl9CiAKQEAgLTEwMDAsMjcgKzEwMjEsMjUgQEAKIAogCS8qIElzIHRoZSBvYmplY3Qgb25lIG9mIHRoZSBleHBlY3RlZCB0eXBlcz8gKi8KIAotCWlmICghKHJldHVybl9idHlwZSAmIGV4cGVjdGVkX2J0eXBlcykpIHsKKwlpZiAocmV0dXJuX2J0eXBlICYgZXhwZWN0ZWRfYnR5cGVzKSB7CiAKLQkJLyogVHlwZSBtaXNtYXRjaCAtLSBhdHRlbXB0IHJlcGFpciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCisJCS8qIEZvciByZWZlcmVuY2Ugb2JqZWN0cywgY2hlY2sgdGhhdCB0aGUgcmVmZXJlbmNlIHR5cGUgaXMgY29ycmVjdCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfbnNfcmVwYWlyX29iamVjdChkYXRhLCBleHBlY3RlZF9idHlwZXMsCi0JCQkJCSAgICAgICBwYWNrYWdlX2luZGV4LAotCQkJCQkgICAgICAgcmV0dXJuX29iamVjdF9wdHIpOwotCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCXJldHVybiAoQUVfT0spOwkvKiBSZXBhaXIgd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJaWYgKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGRhdGEsIHJldHVybl9vYmplY3QpOwogCQl9Ci0JCWdvdG8gdHlwZV9lcnJvcl9leGl0OworCisJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKLQkvKiBGb3IgcmVmZXJlbmNlIG9iamVjdHMsIGNoZWNrIHRoYXQgdGhlIHJlZmVyZW5jZSB0eXBlIGlzIGNvcnJlY3QgKi8KKwkvKiBUeXBlIG1pc21hdGNoIC0tIGF0dGVtcHQgcmVwYWlyIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KIAotCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7Ci0JCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGRhdGEsIHJldHVybl9vYmplY3QpOworCXN0YXR1cyA9IGFjcGlfbnNfcmVwYWlyX29iamVjdChkYXRhLCBleHBlY3RlZF9idHlwZXMsCisJCQkJICAgICAgIHBhY2thZ2VfaW5kZXgsIHJldHVybl9vYmplY3RfcHRyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJcmV0dXJuIChBRV9PSyk7CS8qIFJlcGFpciB3YXMgc3VjY2Vzc2Z1bCAqLwogCX0KIAotCXJldHVybiAoc3RhdHVzKTsKLQogICAgICAgdHlwZV9lcnJvcl9leGl0OgogCiAJLyogQ3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIGV4cGVjdGVkIHR5cGVzIGZvciB0aGlzIHByZWRlZmluZWQgb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKaW5kZXggNGZkMWJkYi4uZDRiZTM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJhY2NvbW1vbi5oIgogI2luY2x1ZGUgImFjbmFtZXNwLmgiCiAjaW5jbHVkZSAiYWNpbnRlcnAuaCIKKyNpbmNsdWRlICJhY3ByZWRlZi5oIgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zcmVwYWlyIikKQEAgLTcxLDYgKzcyLDEyIEBACiAgKiBCdWZmZXIgIC0+IFBhY2thZ2Ugb2YgSW50ZWdlcnMKICAqIFBhY2thZ2UgLT4gUGFja2FnZSBvZiBvbmUgUGFja2FnZQogICoKKyAqIEFkZGl0aW9uYWwgcG9zc2libGUgcmVwYWlyczoKKyAqCisgKiBPcHRpb25hbC91bm5lY2Vzc2FyeSBOVUxMIHBhY2thZ2UgZWxlbWVudHMgcmVtb3ZlZAorICogUmVxdWlyZWQgcGFja2FnZSBlbGVtZW50cyB0aGF0IGFyZSBOVUxMIHJlcGxhY2VkIGJ5IEludGVnZXIvU3RyaW5nL0J1ZmZlcgorICogSW5jb3JyZWN0IHN0YW5kYWxvbmUgcGFja2FnZSB3cmFwcGVkIHdpdGggcmVxdWlyZWQgb3V0ZXIgcGFja2FnZQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTUwNiw2ICs1MTMsMTcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVwYWlyX251bGxfZWxlbWVudAorICoKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzICAgICAtIE9iamVjdCB0eXBlcyBleHBlY3RlZAorICogICAgICAgICAgICAgIHBhY2thZ2VfaW5kZXggICAgICAgLSBJbmRleCBvZiBvYmplY3Qgd2l0aGluIHBhcmVudCBwYWNrYWdlIChpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRV9FTEVNRU5UCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSkKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAgIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cy4gQUVfT0sgaWYgcmVwYWlyIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIERFU0NSSVBUSU9OOiBBdHRlbXB0IHRvIHJlcGFpciBhIE5VTEwgZWxlbWVudCBvZiBhIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9udWxsX2VsZW1lbnQoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHUzMiBleHBlY3RlZF9idHlwZXMsCisJCQkgICAgdTMyIHBhY2thZ2VfaW5kZXgsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKKworCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZXBhaXJfbnVsbF9lbGVtZW50KTsKKworCS8qIE5vIHJlcGFpciBuZWVkZWQgaWYgcmV0dXJuIG9iamVjdCBpcyBub24tTlVMTCAqLworCisJaWYgKHJldHVybl9vYmplY3QpIHsKKwkJcmV0dXJuIChBRV9PSyk7CisJfQorCisJLyoKKwkgKiBBdHRlbXB0IHRvIHJlcGFpciBhIE5VTEwgZWxlbWVudCBvZiBhIFBhY2thZ2Ugb2JqZWN0LiBUaGlzIGFwcGxpZXMgdG8KKwkgKiBwcmVkZWZpbmVkIG5hbWVzIHRoYXQgcmV0dXJuIGEgZml4ZWQtbGVuZ3RoIHBhY2thZ2UgYW5kIGVhY2ggZWxlbWVudAorCSAqIGlzIHJlcXVpcmVkLiBJdCBkb2VzIG5vdCBhcHBseSB0byB2YXJpYWJsZS1sZW5ndGggcGFja2FnZXMgd2hlcmUgTlVMTAorCSAqIGVsZW1lbnRzIGFyZSBhbGxvd2VkLCBlc3BlY2lhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBhY2thZ2UuCisJICovCisJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfSU5URUdFUikgeworCisJCS8qIE5lZWQgYW4gSW50ZWdlciAtIGNyZWF0ZSBhIHplcm8tdmFsdWUgaW50ZWdlciAqLworCisJCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlZ2VyX29iamVjdCgwKTsKKwl9IGVsc2UgaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfU1RSSU5HKSB7CisKKwkJLyogTmVlZCBhIFN0cmluZyAtIGNyZWF0ZSBhIE5VTEwgc3RyaW5nICovCisKKwkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoMCk7CisJfSBlbHNlIGlmIChleHBlY3RlZF9idHlwZXMgJiBBQ1BJX1JUWVBFX0JVRkZFUikgeworCisJCS8qIE5lZWQgYSBCdWZmZXIgLSBjcmVhdGUgYSB6ZXJvLWxlbmd0aCBidWZmZXIgKi8KKworCQluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdCgwKTsKKwl9IGVsc2UgeworCQkvKiBFcnJvciBmb3IgYWxsIG90aGVyIGV4cGVjdGVkIHR5cGVzICovCisKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwlpZiAoIW5ld19vYmplY3QpIHsKKwkJcmV0dXJuIChBRV9OT19NRU1PUlkpOworCX0KKworCS8qIFNldCB0aGUgcmVmZXJlbmNlIGNvdW50IGFjY29yZGluZyB0byB0aGUgcGFyZW50IFBhY2thZ2Ugb2JqZWN0ICovCisKKwluZXdfb2JqZWN0LT5jb21tb24ucmVmZXJlbmNlX2NvdW50ID0KKwkgICAgZGF0YS0+cGFyZW50X3BhY2thZ2UtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQ7CisKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1JFUEFJUiwKKwkJCSAgIiVzOiBDb252ZXJ0ZWQgTlVMTCBwYWNrYWdlIGVsZW1lbnQgdG8gZXhwZWN0ZWQgJXMgYXQgaW5kZXggJXVcbiIsCisJCQkgIGRhdGEtPnBhdGhuYW1lLAorCQkJICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKG5ld19vYmplY3QpLAorCQkJICBwYWNrYWdlX2luZGV4KSk7CisKKwkqcmV0dXJuX29iamVjdF9wdHIgPSBuZXdfb2JqZWN0OworCWRhdGEtPmZsYWdzIHw9IEFDUElfT0JKRUNUX1JFUEFJUkVEOworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMKKyAqCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdmFsaWRhdGlvbiBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICAgIHBhY2thZ2VfdHlwZSAgICAgICAgLSBBbiBhY3BpX3JldHVybl9wYWNrYWdlX3R5cGVzIHZhbHVlCisgKiAgICAgICAgICAgICAgb2JqX2Rlc2MgICAgICAgICAgICAtIEEgUGFja2FnZSBvYmplY3QKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4KKyAqCisgKiBERVNDUklQVElPTjogUmVtb3ZlIGFsbCBOVUxMIHBhY2thZ2UgZWxlbWVudHMgZnJvbSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4KKyAqICAgICAgICAgICAgICBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIEZvciB0aGVzZSB0eXBlcyBvZgorICogICAgICAgICAgICAgIHBhY2thZ2VzLCBOVUxMIGVsZW1lbnRzIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK2FjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgICB1OCBwYWNrYWdlX3R5cGUsCisJCQkgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzb3VyY2U7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmRlc3Q7CisJdTMyIGNvdW50OworCXUzMiBuZXdfY291bnQ7CisJdTMyIGk7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfcmVtb3ZlX251bGxfZWxlbWVudHMpOworCisJLyoKKwkgKiBQVFlQRTEgcGFja2FnZXMgY29udGFpbiBubyBzdWJwYWNrYWdlcy4KKwkgKiBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIFdlIGNhbgorCSAqIHNhZmVseSByZW1vdmUgYWxsIE5VTEwgZWxlbWVudHMgZnJvbSB0aGUgUFRZUEUyIHBhY2thZ2VzLgorCSAqLworCXN3aXRjaCAocGFja2FnZV90eXBlKSB7CisJY2FzZSBBQ1BJX1BUWVBFMV9GSVhFRDoKKwljYXNlIEFDUElfUFRZUEUxX1ZBUjoKKwljYXNlIEFDUElfUFRZUEUxX09QVElPTjoKKwkJcmV0dXJuOworCisJY2FzZSBBQ1BJX1BUWVBFMjoKKwljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgorCWNhc2UgQUNQSV9QVFlQRTJfUEtHX0NPVU5UOgorCWNhc2UgQUNQSV9QVFlQRTJfRklYRUQ6CisJY2FzZSBBQ1BJX1BUWVBFMl9NSU46CisJY2FzZSBBQ1BJX1BUWVBFMl9SRVZfRklYRUQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQ7CisJbmV3X2NvdW50ID0gY291bnQ7CisKKwlzb3VyY2UgPSBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50czsKKwlkZXN0ID0gc291cmNlOworCisJLyogRXhhbWluZSBhbGwgZWxlbWVudHMgb2YgdGhlIHBhY2thZ2Ugb2JqZWN0LCByZW1vdmUgbnVsbHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghKnNvdXJjZSkgeworCQkJbmV3X2NvdW50LS07CisJCX0gZWxzZSB7CisJCQkqZGVzdCA9ICpzb3VyY2U7CisJCQlkZXN0Kys7CisJCX0KKwkJc291cmNlKys7CisJfQorCisJLyogVXBkYXRlIHBhcmVudCBwYWNrYWdlIGlmIGFueSBudWxsIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCAqLworCisJaWYgKG5ld19jb3VudCA8IGNvdW50KSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCSAgIiVzOiBGb3VuZCBhbmQgcmVtb3ZlZCAldSBOVUxMIGVsZW1lbnRzXG4iLAorCQkJCSAgZGF0YS0+cGF0aG5hbWUsIChjb3VudCAtIG5ld19jb3VudCkpKTsKKworCQkvKiBOVUxMIHRlcm1pbmF0ZSBsaXN0IGFuZCB1cGRhdGUgdGhlIHBhY2thZ2UgY291bnQgKi8KKworCQkqZGVzdCA9IE5VTEw7CisJCW9ial9kZXNjLT5wYWNrYWdlLmNvdW50ID0gbmV3X2NvdW50OworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfcGFja2FnZV9saXN0CiAgKgogICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCmluZGV4IGYxMzY5MWMuLjYxYmQwZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA5LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSAiYWNjb21tb24uaCIKICNpbmNsdWRlICJhY25hbWVzcC5oIgotI2luY2x1ZGUgImFjcHJlZGVmLmgiCiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnNyZXBhaXIyIikKQEAgLTkzLDcgKzkyLDcgQEAKIAkJCSAgdTMyIHNvcnRfaW5kZXgsCiAJCQkgIHU4IHNvcnRfZGlyZWN0aW9uLCBjaGFyICpzb3J0X2tleV9uYW1lKTsKIAotc3RhdGljIGFjcGlfc3RhdHVzCitzdGF0aWMgdm9pZAogYWNwaV9uc19zb3J0X2xpc3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzLAogCQkgIHUzMiBjb3VudCwgdTMyIGluZGV4LCB1OCBzb3J0X2RpcmVjdGlvbik7CiAKQEAgLTQ0Myw3ICs0NDIsNiBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCXUzMiBpOwogCXUzMiBwcmV2aW91c192YWx1ZTsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfY2hlY2tfc29ydGVkX2xpc3QpOwogCkBAIC00OTQsMTkgKzQ5MiwxNSBAQAogCiAJCS8qCiAJCSAqIFRoZSBsaXN0IG11c3QgYmUgc29ydGVkIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuIElmIHdlIGRldGVjdCBhCi0JCSAqIGRpc2NyZXBhbmN5LCBpc3N1ZSBhIHdhcm5pbmcgYW5kIHNvcnQgdGhlIGVudGlyZSBsaXN0CisJCSAqIGRpc2NyZXBhbmN5LCBzb3J0IHRoZSBlbnRpcmUgbGlzdC4KIAkJICovCiAJCWlmICgoKHNvcnRfZGlyZWN0aW9uID09IEFDUElfU09SVF9BU0NFTkRJTkcpICYmCiAJCSAgICAgKG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlIDwgcHJldmlvdXNfdmFsdWUpKSB8fAogCQkgICAgKChzb3J0X2RpcmVjdGlvbiA9PSBBQ1BJX1NPUlRfREVTQ0VORElORykgJiYKIAkJICAgICAob2JqX2Rlc2MtPmludGVnZXIudmFsdWUgPiBwcmV2aW91c192YWx1ZSkpKSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIGFjcGlfbnNfc29ydF9saXN0KHJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMsCi0JCQkJCSAgICAgIG91dGVyX2VsZW1lbnRfY291bnQsIHNvcnRfaW5kZXgsCi0JCQkJCSAgICAgIHNvcnRfZGlyZWN0aW9uKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCXJldHVybiAoc3RhdHVzKTsKLQkJCX0KKwkJCWFjcGlfbnNfc29ydF9saXN0KHJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMsCisJCQkJCSAgb3V0ZXJfZWxlbWVudF9jb3VudCwgc29ydF9pbmRleCwKKwkJCQkJICBzb3J0X2RpcmVjdGlvbik7CiAKIAkJCWRhdGEtPmZsYWdzIHw9IEFDUElfT0JKRUNUX1JFUEFJUkVEOwogCkBAIC01MjUsODkgKzUxOSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cwotICoKLSAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCi0gKiAgICAgICAgICAgICAgcGFja2FnZV90eXBlICAgICAgICAtIEFuIGFjcGlfcmV0dXJuX3BhY2thZ2VfdHlwZXMgdmFsdWUKLSAqICAgICAgICAgICAgICBvYmpfZGVzYyAgICAgICAgICAgIC0gQSBQYWNrYWdlIG9iamVjdAotICoKLSAqIFJFVFVSTjogICAgICBOb25lLgotICoKLSAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYWxsIE5VTEwgcGFja2FnZSBlbGVtZW50cyBmcm9tIHBhY2thZ2VzIHRoYXQgY29udGFpbgotICogICAgICAgICAgICAgIGEgdmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQKLWFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAotCQkJICAgICB1OCBwYWNrYWdlX3R5cGUsCi0JCQkgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQotewotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzb3VyY2U7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmRlc3Q7Ci0JdTMyIGNvdW50OwotCXUzMiBuZXdfY291bnQ7Ci0JdTMyIGk7Ci0KLQlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfcmVtb3ZlX251bGxfZWxlbWVudHMpOwotCi0JLyoKLQkgKiBQVFlQRTEgcGFja2FnZXMgY29udGFpbiBubyBzdWJwYWNrYWdlcy4KLQkgKiBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIFdlIGNhbgotCSAqIHNhZmVseSByZW1vdmUgYWxsIE5VTEwgZWxlbWVudHMgZnJvbSB0aGUgUFRZUEUyIHBhY2thZ2VzLgotCSAqLwotCXN3aXRjaCAocGFja2FnZV90eXBlKSB7Ci0JY2FzZSBBQ1BJX1BUWVBFMV9GSVhFRDoKLQljYXNlIEFDUElfUFRZUEUxX1ZBUjoKLQljYXNlIEFDUElfUFRZUEUxX09QVElPTjoKLQkJcmV0dXJuOwotCi0JY2FzZSBBQ1BJX1BUWVBFMjoKLQljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgotCWNhc2UgQUNQSV9QVFlQRTJfUEtHX0NPVU5UOgotCWNhc2UgQUNQSV9QVFlQRTJfRklYRUQ6Ci0JY2FzZSBBQ1BJX1BUWVBFMl9NSU46Ci0JY2FzZSBBQ1BJX1BUWVBFMl9SRVZfRklYRUQ6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCWNvdW50ID0gb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQ7Ci0JbmV3X2NvdW50ID0gY291bnQ7Ci0KLQlzb3VyY2UgPSBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50czsKLQlkZXN0ID0gc291cmNlOwotCi0JLyogRXhhbWluZSBhbGwgZWxlbWVudHMgb2YgdGhlIHBhY2thZ2Ugb2JqZWN0LCByZW1vdmUgbnVsbHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWlmICghKnNvdXJjZSkgewotCQkJbmV3X2NvdW50LS07Ci0JCX0gZWxzZSB7Ci0JCQkqZGVzdCA9ICpzb3VyY2U7Ci0JCQlkZXN0Kys7Ci0JCX0KLQkJc291cmNlKys7Ci0JfQotCi0JLyogVXBkYXRlIHBhcmVudCBwYWNrYWdlIGlmIGFueSBudWxsIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCAqLwotCi0JaWYgKG5ld19jb3VudCA8IGNvdW50KSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAotCQkJCSAgIiVzOiBGb3VuZCBhbmQgcmVtb3ZlZCAldSBOVUxMIGVsZW1lbnRzXG4iLAotCQkJCSAgZGF0YS0+cGF0aG5hbWUsIChjb3VudCAtIG5ld19jb3VudCkpKTsKLQotCQkvKiBOVUxMIHRlcm1pbmF0ZSBsaXN0IGFuZCB1cGRhdGUgdGhlIHBhY2thZ2UgY291bnQgKi8KLQotCQkqZGVzdCA9IE5VTEw7Ci0JCW9ial9kZXNjLT5wYWNrYWdlLmNvdW50ID0gbmV3X2NvdW50OwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3NvcnRfbGlzdAogICoKICAqIFBBUkFNRVRFUlM6ICBFbGVtZW50cyAgICAgICAgICAgIC0gUGFja2FnZSBvYmplY3QgZWxlbWVudCBsaXN0CkBAIC02MTUsMTUgKzUyNiwxNiBAQAogICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSBTb3J0IGJ5IHdoaWNoIHBhY2thZ2UgZWxlbWVudAogICogICAgICAgICAgICAgIHNvcnRfZGlyZWN0aW9uICAgICAgLSBBc2NlbmRpbmcgb3IgRGVzY2VuZGluZyBzb3J0CiAgKgotICogUkVUVVJOOiAgICAgIFN0YXR1cworICogUkVUVVJOOiAgICAgIE5vbmUKICAqCiAgKiBERVNDUklQVElPTjogU29ydCB0aGUgb2JqZWN0cyB0aGF0IGFyZSBpbiBhIHBhY2thZ2UgZWxlbWVudCBsaXN0LgogICoKLSAqIE5PVEU6IEFzc3VtZXMgdGhhdCBhbGwgTlVMTCBlbGVtZW50cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWNrYWdlLgorICogTk9URTogQXNzdW1lcyB0aGF0IGFsbCBOVUxMIGVsZW1lbnRzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBhY2thZ2UsCisgKiAgICAgICBhbmQgdGhhdCBhbGwgZWxlbWVudHMgaGF2ZSBiZWVuIHZlcmlmaWVkIHRvIGJlIG9mIHR5cGUgSW50ZWdlci4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBhY3BpX3N0YXR1cworc3RhdGljIHZvaWQKIGFjcGlfbnNfc29ydF9saXN0KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKIAkJICB1MzIgY291bnQsIHUzMiBpbmRleCwgdTggc29ydF9kaXJlY3Rpb24pCiB7CkBAIC02NTIsNiArNTY0LDQgQEAKIAkJCX0KIAkJfQogCX0KLQotCXJldHVybiAoQUVfT0spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCmluZGV4IDdlODY1NjMuLjA4ZjhiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwppbmRleCA0N2Q5MWU2Li4yNGQwNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCmluZGV4IGQ3ZTZiNTIuLjAwZTc5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYwppbmRleCBmMGMwODkyLi5lYmVmOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU2MiwyNSArNTYyLDIwIEBACiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogUnVuIF9TVEEgdG8gZGV0ZXJtaW5lIGlmIGRldmljZSBpcyBwcmVzZW50ICovCi0KLQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfU1RBKG5vZGUsICZmbGFncyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoQUVfQ1RSTF9ERVBUSCk7Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJiBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCkgJiYKLQkgICAgIShmbGFncyAmIEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORykpIHsKLQkJLyoKLQkJICogRG9uJ3QgZXhhbWluZSB0aGUgY2hpbGRyZW4gb2YgdGhlIGRldmljZSBvbmx5IHdoZW4gdGhlCi0JCSAqIGRldmljZSBpcyBuZWl0aGVyIHByZXNlbnQgbm9yIGZ1bmN0aW9uYWwuIFNlZSBBQ1BJIHNwZWMsCi0JCSAqIGRlc2NyaXB0aW9uIG9mIF9TVEEgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0JCSAqLwotCQlyZXR1cm4gKEFFX0NUUkxfREVQVEgpOwotCX0KLQotCS8qIEZpbHRlciBiYXNlZCBvbiBkZXZpY2UgSElEICYgQ0lEICovCi0KKwkvKgorCSAqIEZpcnN0LCBmaWx0ZXIgYmFzZWQgb24gdGhlIGRldmljZSBISUQgYW5kIENJRC4KKwkgKgorCSAqIDAxLzIwMTA6IEZvciB0aGlzIGNhc2Ugd2hlcmUgYSBzcGVjaWZpYyBISUQgaXMgcmVxdWVzdGVkLCB3ZSBkb24ndAorCSAqIHdhbnQgdG8gcnVuIF9TVEEgdW50aWwgd2UgaGF2ZSBhbiBhY3R1YWwgSElEIG1hdGNoLiBUaHVzLCB3ZSB3aWxsCisJICogbm90IHVubmVjZXNzYXJpbHkgZXhlY3V0ZSBfU1RBIG9uIGRldmljZXMgZm9yIHdoaWNoIHRoZSBjYWxsZXIKKwkgKiBkb2Vzbid0IGNhcmUgYWJvdXQuIFByZXZpb3VzbHksIF9TVEEgd2FzIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseQorCSAqIG9uIGFsbCBkZXZpY2VzIGZvdW5kIGhlcmUuCisJICoKKwkgKiBBIHNpZGUtZWZmZWN0IG9mIHRoaXMgY2hhbmdlIGlzIHRoYXQgbm93IHdlIHdpbGwgY29udGludWUgdG8gc2VhcmNoCisJICogZm9yIGEgbWF0Y2hpbmcgSElEIGV2ZW4gdW5kZXIgZGV2aWNlIHRyZWVzIHdoZXJlIHRoZSBwYXJlbnQgZGV2aWNlCisJICogd291bGQgaGF2ZSByZXR1cm5lZCBhIF9TVEEgdGhhdCBpbmRpY2F0ZXMgaXQgaXMgbm90IHByZXNlbnQgb3IKKwkgKiBub3QgZnVuY3Rpb25pbmcgKHRodXMgYWJvcnRpbmcgdGhlIHNlYXJjaCBvbiB0aGF0IGJyYW5jaCkuCisJICovCiAJaWYgKGluZm8tPmhpZCAhPSBOVUxMKSB7CiAJCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9ISUQobm9kZSwgJmhpZCk7CiAJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CkBAIC02MjAsNiArNjE1LDI1IEBACiAJCX0KIAl9CiAKKwkvKiBSdW4gX1NUQSB0byBkZXRlcm1pbmUgaWYgZGV2aWNlIGlzIHByZXNlbnQgKi8KKworCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9TVEEobm9kZSwgJmZsYWdzKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChBRV9DVFJMX0RFUFRIKTsKKwl9CisKKwlpZiAoIShmbGFncyAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSAmJgorCSAgICAhKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSkgeworCQkvKgorCQkgKiBEb24ndCBleGFtaW5lIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGV2aWNlIG9ubHkgd2hlbiB0aGUKKwkJICogZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbC4gU2VlIEFDUEkgc3BlYywKKwkJICogZGVzY3JpcHRpb24gb2YgX1NUQSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwkJICovCisJCXJldHVybiAoQUVfQ1RSTF9ERVBUSCk7CisJfQorCisJLyogV2UgaGF2ZSBhIHZhbGlkIGRldmljZSwgaW52b2tlIHRoZSB1c2VyIGZ1bmN0aW9uICovCisKIAlzdGF0dXMgPSBpbmZvLT51c2VyX2Z1bmN0aW9uKG9ial9oYW5kbGUsIG5lc3RpbmdfbGV2ZWwsIGluZm8tPmNvbnRleHQsCiAJCQkJICAgICByZXR1cm5fdmFsdWUpOwogCXJldHVybiAoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYwppbmRleCBlNjExZGQ5Li5iMDFlNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmb2JqLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwppbmRleCAwY2M2YmEwLi5lYWZlZjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2FyZ3MuYwppbmRleCBiMTYxZjM1Li4wMDQ5M2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MDMsNyArNDAzLDcgQEAKIAkJLyogR2V0IDEgYnl0ZSBmcm9tIHRoZSBBTUwgc3RyZWFtICovCiAKIAkJb3Bjb2RlID0gQU1MX0JZVEVfT1A7Ci0JCWFyZy0+Y29tbW9uLnZhbHVlLmludGVnZXIgPSAoYWNwaV9pbnRlZ2VyKSAqIGFtbDsKKwkJYXJnLT5jb21tb24udmFsdWUuaW50ZWdlciA9ICh1NjQpICphbWw7CiAJCWxlbmd0aCA9IDE7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYwppbmRleCAwOTg4ZTRhLi41OWFhYmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMKaW5kZXggM2JjM2E2MC4uMmIwYzNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGNvZGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKaW5kZXggNGRmOGYxMy4uOGQ4MTU0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzc2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCmluZGV4IDJmZWNhNWMuLjQwZTJiMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN0cmVlLmMKaW5kZXggNGQzMzg5MS4uZDRiOTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdHJlZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYwppbmRleCBlNjM2ZTA3Li5mZTI5ZWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzd2Fsay5jCmluZGV4IDc4YjhiNzkuLjhhYmI5NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3dhbGsuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKaW5kZXggZDBjMWI5MS4uNjA2NGRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2FkZHIuYwppbmRleCAxZTQzN2JmLi4yMjZjODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNhZGRyLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKaW5kZXggM2M0ZGNjM2QuLmQ2ZWJmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKaW5kZXggYTNjMjNkNi4uZjJlZTNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODIsNyArMTgyLDcgQEAKIAogCS8qCiAJICogTG9vcCB0aHJvdWdoIHRoZSBBQ1BJX0lOVEVSTkFMX09CSkVDVFMgLSBFYWNoIG9iamVjdCBzaG91bGQgYmUgYQotCSAqIHBhY2thZ2UgdGhhdCBpbiB0dXJuIGNvbnRhaW5zIGFuIGFjcGlfaW50ZWdlciBBZGRyZXNzLCBhIHU4IFBpbiwKKwkgKiBwYWNrYWdlIHRoYXQgaW4gdHVybiBjb250YWlucyBhbiB1NjQgQWRkcmVzcywgYSB1OCBQaW4sCiAJICogYSBOYW1lLCBhbmQgYSB1OCBzb3VyY2VfaW5kZXguCiAJICovCiAJdG9wX29iamVjdF9saXN0ID0gcGFja2FnZV9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2R1bXAuYwppbmRleCAzZjBjYTVhLi5mODU5YjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2luZm8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMKaW5kZXggNzdiMjVmZC4uMWZkODY4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2luZm8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW5mby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lvLmMKaW5kZXggMzVhNDlhYS4uMzNiZmYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lvLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lvLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lycS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lycS5jCmluZGV4IDJlMDI1NjkuLjU0NWRhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaXJxLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2xpc3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMKaW5kZXggMWIxZGJjNi4uZmQwNTdjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2xpc3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbGlzdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtZW1vcnkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtZW1vcnkuYwppbmRleCBkZGM3NmNlLi44ODdiOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc21lbW9yeS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jCmluZGV4IDViYzQ5YTUuLjA3ZGUzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc21pc2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN1dGlscy5jCmluZGV4IGJjMDNkNTkuLjIyY2ZjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN1dGlscy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKaW5kZXggZjI3ZmViNC4uOWY2YTZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKaW5kZXggYzAxNjMzNS4uZjQzZmJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZpbmQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMKaW5kZXggMTA1NGRmZC4uZTI1MjE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZpbmQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmluZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCmluZGV4IDYzZTgyMzIuLjdlYzAyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCmluZGV4IDFmMTU0OTcuLjAyNzIzYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYwppbmRleCBhODhmMDJiLi41MjE3YTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYwppbmRleCA4NWVhODM0Li5kZGE2ZThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YWxsb2MuYwppbmRleCA3NTgwZjZiLi4zZDcwNmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YWxsb2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCmluZGV4IGY4NTdjNWUuLjk3ZWMzNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlYnVnLmMKaW5kZXggNTI3ZDcyOS4uOTgzNTEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlYnVnLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NjAsOCArNDYwLDcgQEAKIHZvaWQKIGFjcGlfdXRfdmFsdWVfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUsCi0JCSAgIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLAotCQkgICB1MzIgY29tcG9uZW50X2lkLCBhY3BpX2ludGVnZXIgdmFsdWUpCisJCSAgIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCB1MzIgY29tcG9uZW50X2lkLCB1NjQgdmFsdWUpCiB7CiAKIAlhY3BpX2RlYnVnX3ByaW50KEFDUElfTFZfRlVOQ1RJT05TLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCmluZGV4IDk2ZTI2ZTcuLjE2YjUxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKaW5kZXggNWQ1NGUzNi4uN2Y1ZTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzQ4LDcgKzM0OCw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdChjaGFyICpvYmplY3RfbmFtZSwKIAkJCQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCi0JCQkJYWNwaV9pbnRlZ2VyICp2YWx1ZSkKKwkJCQl1NjQgKnZhbHVlKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYwppbmRleCAzZjJjNjhmLi5lZGEzZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjM0LDcgKzIzNCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotY2hhciBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKGFjcGlfaW50ZWdlciBpbnRlZ2VyLCB1MzIgcG9zaXRpb24pCitjaGFyIGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIodTY0IGludGVnZXIsIHUzMiBwb3NpdGlvbikKIHsKIAogCXJldHVybiAoYWNwaV9nYmxfaGV4X3RvX2FzY2lpWyhpbnRlZ2VyID4+IHBvc2l0aW9uKSAmIDB4Rl0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jCmluZGV4IDUyZWFhZTQuLjEzOTdmYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA5LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYwppbmRleCA5ZDA5MTllYi4uYTM5YzkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGxvY2suYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMKaW5kZXggMjVlMDMxMi4uYjA4MWNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGxvY2suYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1hdGguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMKaW5kZXggYzlmNjgyZC4uMzUwNTlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1hdGguYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWF0aC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcwLDkgKzcwLDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKLWFjcGlfdXRfc2hvcnRfZGl2aWRlKGFjcGlfaW50ZWdlciBkaXZpZGVuZCwKLQkJICAgICB1MzIgZGl2aXNvciwKLQkJICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIHUzMiAqIG91dF9yZW1haW5kZXIpCithY3BpX3V0X3Nob3J0X2RpdmlkZSh1NjQgZGl2aWRlbmQsCisJCSAgICAgdTMyIGRpdmlzb3IsIHU2NCAqb3V0X3F1b3RpZW50LCB1MzIgKm91dF9yZW1haW5kZXIpCiB7CiAJdW5pb24gdWludDY0X292ZXJsYXkgZGl2aWRlbmRfb3ZsOwogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IHF1b3RpZW50OwpAQCAtMTI2LDkgKzEyNSw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV91dF9kaXZpZGUoYWNwaV9pbnRlZ2VyIGluX2RpdmlkZW5kLAotCSAgICAgICBhY3BpX2ludGVnZXIgaW5fZGl2aXNvciwKLQkgICAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCBhY3BpX2ludGVnZXIgKiBvdXRfcmVtYWluZGVyKQorYWNwaV91dF9kaXZpZGUodTY0IGluX2RpdmlkZW5kLAorCSAgICAgICB1NjQgaW5fZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHU2NCAqb3V0X3JlbWFpbmRlcikKIHsKIAl1bmlvbiB1aW50NjRfb3ZlcmxheSBkaXZpZGVuZDsKIAl1bmlvbiB1aW50NjRfb3ZlcmxheSBkaXZpc29yOwpAQCAtMTk5LDkgKzE5Nyw4IEBACiAJCSAqIFRoZSA2NC1iaXQgcmVtYWluZGVyIG11c3QgYmUgZ2VuZXJhdGVkLgogCQkgKi8KIAkJcGFydGlhbDEgPSBxdW90aWVudC5wYXJ0LmxvICogZGl2aXNvci5wYXJ0LmhpOwotCQlwYXJ0aWFsMi5mdWxsID0KLQkJICAgIChhY3BpX2ludGVnZXIpIHF1b3RpZW50LnBhcnQubG8gKiBkaXZpc29yLnBhcnQubG87Ci0JCXBhcnRpYWwzLmZ1bGwgPSAoYWNwaV9pbnRlZ2VyKSBwYXJ0aWFsMi5wYXJ0LmhpICsgcGFydGlhbDE7CisJCXBhcnRpYWwyLmZ1bGwgPSAodTY0KSBxdW90aWVudC5wYXJ0LmxvICogZGl2aXNvci5wYXJ0LmxvOworCQlwYXJ0aWFsMy5mdWxsID0gKHU2NCkgcGFydGlhbDIucGFydC5oaSArIHBhcnRpYWwxOwogCiAJCXJlbWFpbmRlci5wYXJ0LmhpID0gcGFydGlhbDMucGFydC5sbzsKIAkJcmVtYWluZGVyLnBhcnQubG8gPSBwYXJ0aWFsMi5wYXJ0LmxvOwpAQCAtMjU3LDkgKzI1NCw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3Nob3J0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JCSAgICAgdTMyIGRpdmlzb3IsCi0JCSAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCB1MzIgKiBvdXRfcmVtYWluZGVyKQorYWNwaV91dF9zaG9ydF9kaXZpZGUodTY0IGluX2RpdmlkZW5kLAorCQkgICAgIHUzMiBkaXZpc29yLCB1NjQgKm91dF9xdW90aWVudCwgdTMyICpvdXRfcmVtYWluZGVyKQogewogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9zaG9ydF9kaXZpZGUpOwpAQCAtMjg0LDkgKzI4MCw4IEBACiB9CiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JICAgICAgIGFjcGlfaW50ZWdlciBpbl9kaXZpc29yLAotCSAgICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIGFjcGlfaW50ZWdlciAqIG91dF9yZW1haW5kZXIpCithY3BpX3V0X2RpdmlkZSh1NjQgaW5fZGl2aWRlbmQsCisJICAgICAgIHU2NCBpbl9kaXZpc29yLCB1NjQgKm91dF9xdW90aWVudCwgdTY0ICpvdXRfcmVtYWluZGVyKQogewogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZGl2aWRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKaW5kZXggNmM2YTUxMy4uMzI5ODJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTcyNCwxMyArNzI0LDEyIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMKLWFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIGFjcGlfaW50ZWdlciAqIHJldF9pbnRlZ2VyKQorYWNwaV9zdGF0dXMgYWNwaV91dF9zdHJ0b3VsNjQoY2hhciAqc3RyaW5nLCB1MzIgYmFzZSwgdTY0ICogcmV0X2ludGVnZXIpCiB7CiAJdTMyIHRoaXNfZGlnaXQgPSAwOwotCWFjcGlfaW50ZWdlciByZXR1cm5fdmFsdWUgPSAwOwotCWFjcGlfaW50ZWdlciBxdW90aWVudDsKLQlhY3BpX2ludGVnZXIgZGl2aWRlbmQ7CisJdTY0IHJldHVybl92YWx1ZSA9IDA7CisJdTY0IHF1b3RpZW50OworCXU2NCBkaXZpZGVuZDsKIAl1MzIgdG9faW50ZWdlcl9vcCA9IChiYXNlID09IEFDUElfQU5ZX0JBU0UpOwogCXUzMiBtb2RlMzIgPSAoYWNwaV9nYmxfaW50ZWdlcl9ieXRlX3dpZHRoID09IDQpOwogCXU4IHZhbGlkX2RpZ2l0cyA9IDA7CkBAIC04NDQsOSArODQzLDggQEAKIAogCQkvKiBEaXZpZGUgdGhlIGRpZ2l0IGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gKi8KIAotCQkodm9pZCkKLQkJICAgIGFjcGlfdXRfc2hvcnRfZGl2aWRlKChkaXZpZGVuZCAtIChhY3BpX2ludGVnZXIpIHRoaXNfZGlnaXQpLAotCQkJCQkgYmFzZSwgJnF1b3RpZW50LCBOVUxMKTsKKwkJKHZvaWQpYWNwaV91dF9zaG9ydF9kaXZpZGUoKGRpdmlkZW5kIC0gKHU2NCkgdGhpc19kaWdpdCksCisJCQkJCSAgIGJhc2UsICZxdW90aWVudCwgTlVMTCk7CiAKIAkJaWYgKHJldHVybl92YWx1ZSA+IHF1b3RpZW50KSB7CiAJCQlpZiAodG9faW50ZWdlcl9vcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bXV0ZXguYwppbmRleCA4MGJiNjUxLi41NWQwMTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bXV0ZXguYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MCw3ICs1MCw3IEBACiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfbXV0ZXgoYWNwaV9tdXRleF9oYW5kbGUgbXV0ZXhfaWQpOwogCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV91dF9kZWxldGVfbXV0ZXgoYWNwaV9tdXRleF9oYW5kbGUgbXV0ZXhfaWQpOworc3RhdGljIHZvaWQgYWNwaV91dF9kZWxldGVfbXV0ZXgoYWNwaV9tdXRleF9oYW5kbGUgbXV0ZXhfaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTExNCw3ICsxMTQsNyBAQAogCS8qIERlbGV0ZSBlYWNoIHByZWRlZmluZWQgbXV0ZXggb2JqZWN0ICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fTVVURVg7IGkrKykgewotCQkodm9pZClhY3BpX3V0X2RlbGV0ZV9tdXRleChpKTsKKwkJYWNwaV91dF9kZWxldGVfbXV0ZXgoaSk7CiAJfQogCiAJLyogRGVsZXRlIHRoZSBzcGlubG9ja3MgKi8KQEAgLTE0NiwxMCArMTQ2LDYgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHV0X2NyZWF0ZV9tdXRleCwgbXV0ZXhfaWQpOwogCi0JaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCWlmICghYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXgpIHsKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfb3NfY3JlYXRlX211dGV4KCZhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS5tdXRleCk7CkBAIC0xNzMsMjEgKzE2OSwxNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3V0X2RlbGV0ZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKK3N0YXRpYyB2b2lkIGFjcGlfdXRfZGVsZXRlX211dGV4KGFjcGlfbXV0ZXhfaGFuZGxlIG11dGV4X2lkKQogewogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfZGVsZXRlX211dGV4LCBtdXRleF9pZCk7CiAKLQlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCiAJYWNwaV9vc19kZWxldGVfbXV0ZXgoYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXgpOwogCiAJYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXggPSBOVUxMOwogCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLnRocmVhZF9pZCA9IEFDUElfTVVURVhfTk9UX0FDUVVJUkVEOwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYwppbmRleCA0MmU2NThiLi4zMzU2ZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwppbmRleCA5MWI3YzAwLi43OTY1OTE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRyZXNyYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRyZXNyYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0YXRlLmMKaW5kZXggMDQ0MGM5NS4uZDM1ZDEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0YXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0YXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYwppbmRleCBiMWY1ZjY4Li5kYjlkOGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IGNhZGE3M2YuLjU4ZDJjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtMzI0LDggKzMyNCw4IEBACiAJCQkJc3RybmNweShwdHIsIGVsZW1lbnQtPnN0cmluZy5wb2ludGVyLCAzMik7CiAJCQllbHNlIGlmIChlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQkJc3RybmNweShwdHIsICh1OCAqKSZlbGVtZW50LT5pbnRlZ2VyLnZhbHVlLAotCQkJCQlzaXplb2YoYWNwaV9pbnRlZ2VyKSk7Ci0JCQkJcHRyW3NpemVvZihhY3BpX2ludGVnZXIpXSA9IDA7CisJCQkJCXNpemVvZih1NjQpKTsKKwkJCQlwdHJbc2l6ZW9mKHU2NCldID0gMDsKIAkJCX0gZWxzZQogCQkJCSpwdHIgPSAwOyAvKiBkb24ndCBoYXZlIHZhbHVlICovCiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOGE5NWU4My4uZjUzZmJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtNDIyLDExICs0MjIsMTAgQEAKIAogCWlmIChkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCkgewogCQkvKiBCdXR0b24ncyBHUEUgaXMgcnVuLXdha2UgR1BFICovCi0JCWFjcGlfc2V0X2dwZV90eXBlKGRldmljZS0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICBkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CiAJCWFjcGlfZW5hYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIpOworCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CisJCWRldmljZS0+d2FrZXVwLnJ1bl93YWtlX2NvdW50Kys7CiAJCWRldmljZS0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAxOwogCX0KIApAQCAtNDQ2LDYgKzQ0NSwxNCBAQAogewogCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CisJCWFjcGlfZGlzYWJsZV9ncGUoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQlkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOworCQlkZXZpY2UtPndha2V1cC5ydW5fd2FrZV9jb3VudC0tOworCQlkZXZpY2UtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMDsKKwl9CisKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidXR0b24tPmlucHV0KTsKIAlrZnJlZShidXR0b24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCBkNjQ3MWJiLi5kN2E2YmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMzA3LDcgKzMwNywxMSBAQAogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gc3RhcnRcbiIpOwogCS8qIGRpc2FibGUgR1BFIGR1cmluZyB0cmFuc2FjdGlvbiBpZiBzdG9ybSBpcyBkZXRlY3RlZCAqLwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7Ci0JCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJCS8qCisJCSAqIEl0IGhhcyB0byBiZSBkaXNhYmxlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgcmVnYXJkbGVzcyBvZiB0aGUKKwkJICogR1BFIHJlZmVyZW5jZSBjb3VudGluZywgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRElTQUJMRSk7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgdCk7CkBAIC0zMTYsOCArMzIwLDEyIEBACiAJZWNfY2hlY2tfc2NpX3N5bmMoZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewogCQltc2xlZXAoMSk7Ci0JCS8qIGl0IGlzIHNhZmUgdG8gZW5hYmxlIEdQRSBvdXRzaWRlIG9mIHRyYW5zYWN0aW9uICovCi0JCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkJLyoKKwkJICogSXQgaXMgc2FmZSB0byBlbmFibGUgdGhlIEdQRSBvdXRzaWRlIG9mIHRoZSB0cmFuc2FjdGlvbi4gIFVzZQorCQkgKiBhY3BpX3NldF9ncGUoKSBmb3IgdGhhdCwgc2luY2Ugd2UgdXNlZCBpdCB0byBkaXNhYmxlIHRoZSBHUEUKKwkJICogYWJvdmUuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEKSB7CiAJCXByX2luZm8oUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsICIKIAkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iKTsKQEAgLTU4OSw3ICs1OTcsNyBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfZWNfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkgICAgICB1MzIgYml0cywgYWNwaV9pbnRlZ2VyICp2YWx1ZSwKKwkJICAgICAgdTMyIGJpdHMsIHU2NCAqdmFsdWUsCiAJCSAgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gaGFuZGxlcl9jb250ZXh0OwpAQCAtNjIwLDcgKzYyOCw3IEBACiAJCSsrYWRkcmVzczsKIAkJaWYgKGZ1bmN0aW9uID09IEFDUElfUkVBRCkgewogCQkJcmVzdWx0ID0gYWNwaV9lY19yZWFkKGVjLCBhZGRyZXNzLCAmdGVtcCk7Ci0JCQkoKnZhbHVlKSB8PSAoKGFjcGlfaW50ZWdlcil0ZW1wKSA8PCBpOworCQkJKCp2YWx1ZSkgfD0gKCh1NjQpdGVtcCkgPDwgaTsKIAkJfSBlbHNlIHsKIAkJCXRlbXAgPSAweGZmICYgKCgqdmFsdWUpID4+IGkpOwogCQkJcmVzdWx0ID0gYWNwaV9lY193cml0ZShlYywgYWRkcmVzcywgdGVtcCk7CkBAIC03ODgsOCArNzk2LDggQEAKIAkJCQkgICZhY3BpX2VjX2dwZV9oYW5kbGVyLCBlYyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX3NldF9ncGVfdHlwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwotCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKworCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQkJCSAgICBBQ1BJX0FEUl9TUEFDRV9FQywKIAkJCQkJCSAgICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyLApAQCAtODA2LDYgKzgxNCw3IEBACiAJCX0gZWxzZSB7CiAJCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlYy0+Z3BlLAogCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKTsKKwkJCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtODE2LDYgKzgyNSw3IEBACiAKIHN0YXRpYyB2b2lkIGVjX3JlbW92ZV9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7CisJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCiAJCQkJQUNQSV9BRFJfU1BBQ0VfRUMsICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpKSkKIAkJcHJfZXJyKFBSRUZJWCAiZmFpbGVkIHRvIHJlbW92ZSBzcGFjZSBoYW5kbGVyXG4iKTsKQEAgLTEwNTcsMTYgKzEwNjcsMTYgQEAKIHN0YXRpYyBpbnQgYWNwaV9lY19zdXNwZW5kKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCS8qIFN0b3AgdXNpbmcgR1BFICovCi0JYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkvKiBTdG9wIHVzaW5nIHRoZSBHUEUsIGJ1dCBrZWVwIGl0IHJlZmVyZW5jZSBjb3VudGVkLiAqLworCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9ESVNBQkxFKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JLyogRW5hYmxlIHVzZSBvZiBHUEUgYmFjayAqLwotCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkvKiBFbmFibGUgdGhlIEdQRSBhZ2FpbiwgYnV0IGRvbid0IHJlZmVyZW5jZSBjb3VudCBpdCBvbmNlIG1vcmUuICovCisJYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0VOQUJMRSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDRjOGZjZmYuLjZkNWI2NGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZ2x1ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKQEAgLTg3LDcgKzg3LDcgQEAKIC8qIEdldCBkZXZpY2UncyBoYW5kbGVyIHBlciBpdHMgYWRkcmVzcyB1bmRlciBpdHMgcGFyZW50ICovCiBzdHJ1Y3QgYWNwaV9maW5kX2NoaWxkIHsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7Ci0JYWNwaV9pbnRlZ2VyIGFkZHJlc3M7CisJdTY0IGFkZHJlc3M7CiB9OwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotYWNwaV9oYW5kbGUgYWNwaV9nZXRfY2hpbGQoYWNwaV9oYW5kbGUgcGFyZW50LCBhY3BpX2ludGVnZXIgYWRkcmVzcykKK2FjcGlfaGFuZGxlIGFjcGlfZ2V0X2NoaWxkKGFjcGlfaGFuZGxlIHBhcmVudCwgdTY0IGFkZHJlc3MpCiB7CiAJc3RydWN0IGFjcGlfZmluZF9jaGlsZCBmaW5kID0geyBOVUxMLCBhZGRyZXNzIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKaW5kZXggY2IyOGUwNS4uOWM0Yzk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKQEAgLTM2LDggKzM2LDYgQEAKIGludCBhY3BpX3Bvd2VyX2luaXQodm9pZCk7CiBpbnQgYWNwaV9kZXZpY2Vfc2xlZXBfd2FrZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGUsIGludCBzbGVlcF9zdGF0ZSwgaW50IGRldl9zdGF0ZSk7Ci1pbnQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHNsZWVwX3N0YXRlKTsKLWludCBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CiBpbnQgYWNwaV9wb3dlcl9nZXRfaW5mZXJyZWRfc3RhdGUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogaW50IGFjcGlfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKTsKIGV4dGVybiBpbnQgYWNwaV9wb3dlcl9ub2NoZWNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggN2FkNDhkZi4uYjg3MjU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0yNzksOSArMjc5LDkgQEAKIAkvKiBTUkFUOiBTdGF0aWMgUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUgKi8KIAlpZiAoIWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfU1JBVCwgYWNwaV9wYXJzZV9zcmF0KSkgewogCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWSwKLQkJCQkgICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgTlJfQ1BVUyk7CisJCQkJICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgbnJfY3B1X2lkcyk7CiAJCWFjcGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfVFlQRV9DUFVfQUZGSU5JVFksCi0JCQkJICAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIE5SX0NQVVMpOworCQkJCSAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIG5yX2NwdV9pZHMpOwogCQlyZXQgPSBhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfTUVNT1JZX0FGRklOSVRZLAogCQkJCQkgICAgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHksCiAJCQkJCSAgICBOUl9OT0RFX01FTUJMS1MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDAyZTg0NjQuLjhlNmQ4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTQzNiw3ICs0MzYsNyBAQAogICogUnVubmluZyBpbiBpbnRlcnByZXRlciB0aHJlYWQgY29udGV4dCwgc2FmZSB0byBzbGVlcAogICovCiAKLXZvaWQgYWNwaV9vc19zbGVlcChhY3BpX2ludGVnZXIgbXMpCit2b2lkIGFjcGlfb3Nfc2xlZXAodTY0IG1zKQogewogCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKG1zKSk7CiB9CkBAIC02MDMsNyArNjAzLDcgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfb3Nfd3JpdGVfcGNpX2NvbmZpZ3VyYXRpb24oc3RydWN0IGFjcGlfcGNpX2lkICogcGNpX2lkLCB1MzIgcmVnLAotCQkJCWFjcGlfaW50ZWdlciB2YWx1ZSwgdTMyIHdpZHRoKQorCQkJCXU2NCB2YWx1ZSwgdTMyIHdpZHRoKQogewogCWludCByZXN1bHQsIHNpemU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKaW5kZXggYTVhNzdiNy4uMmVmMDQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIApAQCAtMzgsNyArNDAsMTMgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCiAJZGV2ID0gYWNwaV9nZXRfcGNpX2RldihkZXZpY2UtPmhhbmRsZSk7Ci0JaWYgKCFkZXYgfHwgIWRldi0+c3Vib3JkaW5hdGUpCisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIGZhbHNlKTsKKwlwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoZGV2aWNlKTsKKworCWlmICghZGV2LT5zdWJvcmRpbmF0ZSkKIAkJZ290byBvdXQ7CiAKIAlhY3BpX3BjaV9pcnFfZGVsX3BydChkZXYtPnN1Ym9yZGluYXRlKTsKQEAgLTYyLDYgKzcwLDEwIEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAwOwogCisJcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKGRldmljZSwgZGV2KTsKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCisJCWRldmljZV9zZXRfcnVuX3dha2UoJmRldi0+ZGV2LCB0cnVlKTsKKwogCS8qCiAJICogSW5zdGFsbCB0aGUgJ2JpbmQnIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgY2FsbGJhY2tzIGZvcgogCSAqIGNoaWxkcmVuIG9mIHRoZSBQMlAgYnJpZGdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA2NGY1NWI2Li5kNzI0NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtNTI4LDYgKzUyOSwxMCBAQAogCWlmIChmbGFncyAhPSBiYXNlX2ZsYWdzKQogCQlhY3BpX3BjaV9vc2Nfc3VwcG9ydChyb290LCBmbGFncyk7CiAKKwlwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKGRldmljZSwgcm9vdC0+YnVzKTsKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCisJCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIHRydWUpOworCiAJcmV0dXJuIDA7CiAKIGVuZDoKQEAgLTU0OSw2ICs1NTQsOSBAQAogewogCXN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCisJZGV2aWNlX3NldF9ydW5fd2FrZShyb290LT5idXMtPmJyaWRnZSwgZmFsc2UpOworCXBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIoZGV2aWNlKTsKKwogCWtmcmVlKHJvb3QpOwogCXJldHVybiAwOwogfQpAQCAtNTU4LDYgKzU2Niw3IEBACiAJaWYgKGFjcGlfcGNpX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKIAorCXBjaV9hY3BpX2Nyc19xdWlya3MoKTsKIAlpZiAoYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9yb290X2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwppbmRleCBkYzRmZmFkLi44MzRjNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwpAQCAtNzEsMTcgKzcxLDE3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHBvd2VyX21ldGVyX2lkcyk7CiAKIHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX2NhcGFiaWxpdGllcyB7Ci0JYWNwaV9pbnRlZ2VyCQlmbGFnczsKLQlhY3BpX2ludGVnZXIJCXVuaXRzOwotCWFjcGlfaW50ZWdlcgkJdHlwZTsKLQlhY3BpX2ludGVnZXIJCWFjY3VyYWN5OwotCWFjcGlfaW50ZWdlcgkJc2FtcGxpbmdfdGltZTsKLQlhY3BpX2ludGVnZXIJCW1pbl9hdmdfaW50ZXJ2YWw7Ci0JYWNwaV9pbnRlZ2VyCQltYXhfYXZnX2ludGVydmFsOwotCWFjcGlfaW50ZWdlcgkJaHlzdGVyZXNpczsKLQlhY3BpX2ludGVnZXIJCWNvbmZpZ3VyYWJsZV9jYXA7Ci0JYWNwaV9pbnRlZ2VyCQltaW5fY2FwOwotCWFjcGlfaW50ZWdlcgkJbWF4X2NhcDsKKwl1NjQJCWZsYWdzOworCXU2NAkJdW5pdHM7CisJdTY0CQl0eXBlOworCXU2NAkJYWNjdXJhY3k7CisJdTY0CQlzYW1wbGluZ190aW1lOworCXU2NAkJbWluX2F2Z19pbnRlcnZhbDsKKwl1NjQJCW1heF9hdmdfaW50ZXJ2YWw7CisJdTY0CQloeXN0ZXJlc2lzOworCXU2NAkJY29uZmlndXJhYmxlX2NhcDsKKwl1NjQJCW1pbl9jYXA7CisJdTY0CQltYXhfY2FwOwogfTsKIAogc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgewpAQCAtOTMsOSArOTMsOSBAQAogCWFjcGlfc3RyaW5nCQltb2RlbF9udW1iZXI7CiAJYWNwaV9zdHJpbmcJCXNlcmlhbF9udW1iZXI7CiAJYWNwaV9zdHJpbmcJCW9lbV9pbmZvOwotCWFjcGlfaW50ZWdlcgkJcG93ZXI7Ci0JYWNwaV9pbnRlZ2VyCQljYXA7Ci0JYWNwaV9pbnRlZ2VyCQlhdmdfaW50ZXJ2YWw7CisJdTY0CQlwb3dlcjsKKwl1NjQJCWNhcDsKKwl1NjQJCWF2Z19pbnRlcnZhbDsKIAlpbnQJCQlzZW5zb3JzX3ZhbGlkOwogCXVuc2lnbmVkIGxvbmcJCXNlbnNvcnNfbGFzdF91cGRhdGVkOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZQlzZW5zb3JzW05VTV9TRU5TT1JTXTsKQEAgLTQwMiw3ICs0MDIsNyBAQAogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7Ci0JYWNwaV9pbnRlZ2VyIHZhbCA9IDA7CisJdTY0IHZhbCA9IDA7CiAKIAlzd2l0Y2ggKGF0dHItPmluZGV4KSB7CiAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBjYzk3OGE4Li4zN2RmY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2NzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JYWNwaV9pbnRlZ2VyIGNvdW50OworCXU2NCBjb3VudDsKIAlpbnQgY3VycmVudF9jb3VudDsKIAlpbnQgaTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCBhOTU5ZjZhLi5kNjQ4YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtNTYxLDcgKzU2MSw3IEBACiB9CiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZSgKLQkJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmb3JtYW5jZSkKKwkJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlIF9fcGVyY3B1ICpwZXJmb3JtYW5jZSkKIHsKIAlpbnQgY291bnQsIGNvdW50X3RhcmdldDsKIAlpbnQgcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggMWM1ZDdhOC4uN2RlZDc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Ngogc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfcmRtc3Ioc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKLQkJCQkJYWNwaV9pbnRlZ2VyICogdmFsdWUpCisJCQkJCXU2NCAqdmFsdWUpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjOwogCXU2NCBtc3JfaGlnaCwgbXNyX2xvdzsKQEAgLTY4MSwxMyArNjgxLDEzIEBACiAJCXJkbXNyX3NhZmUoTVNSX0lBMzJfVEhFUk1fQ09OVFJPTCwKIAkJCSh1MzIgKikmbXNyX2xvdyAsICh1MzIgKikgJm1zcl9oaWdoKTsKIAkJbXNyID0gKG1zcl9oaWdoIDw8IDMyKSB8IG1zcl9sb3c7Ci0JCSp2YWx1ZSA9IChhY3BpX2ludGVnZXIpIG1zcjsKKwkJKnZhbHVlID0gKHU2NCkgbXNyOwogCQlyZXQgPSAwOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBhY3BpX2ludGVnZXIgdmFsdWUpCitzdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCB1NjQgdmFsdWUpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjOwogCXVuc2lnbmVkIGludCBjcHU7CkBAIC03MTEsMTQgKzcxMSwxNCBAQAogfQogI2Vsc2UKIHN0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3JkbXNyKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQkJYWNwaV9pbnRlZ2VyICogdmFsdWUpCisJCQkJdTY0ICp2YWx1ZSkKIHsKIAlwcmludGsoS0VSTl9FUlIgUFJFRklYCiAJCSJIQVJEV0FSRSBhZGRyIHNwYWNlLE5PVCBzdXBwb3J0ZWQgeWV0XG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3dybXNyKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIGFjcGlfaW50ZWdlciB2YWx1ZSkKK3N0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3dybXNyKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIHU2NCB2YWx1ZSkKIHsKIAlwcmludGsoS0VSTl9FUlIgUFJFRklYCiAJCSJIQVJEV0FSRSBhZGRyIHNwYWNlLE5PVCBzdXBwb3J0ZWQgeWV0XG4iKTsKQEAgLTcyNyw3ICs3MjcsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgYWNwaV9yZWFkX3Rocm90dGxpbmdfc3RhdHVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQkJCWFjcGlfaW50ZWdlciAqdmFsdWUpCisJCQkJCXU2NCAqdmFsdWUpCiB7CiAJdTMyIGJpdF93aWR0aCwgYml0X29mZnNldDsKIAl1NjQgcHRjX3ZhbHVlOwpAQCAtNzQ2LDcgKzc0Niw3IEBACiAJCQkJICBhZGRyZXNzLCAodTMyICopICZwdGNfdmFsdWUsCiAJCQkJICAodTMyKSAoYml0X3dpZHRoICsgYml0X29mZnNldCkpOwogCQlwdGNfbWFzayA9ICgxIDw8IGJpdF93aWR0aCkgLSAxOwotCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSAoKHB0Y192YWx1ZSA+PiBiaXRfb2Zmc2V0KSAmIHB0Y19tYXNrKTsKKwkJKnZhbHVlID0gKHU2NCkgKChwdGNfdmFsdWUgPj4gYml0X29mZnNldCkgJiBwdGNfbWFzayk7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkU6CkBAIC03NjAsNyArNzYwLDcgQEAKIH0KIAogc3RhdGljIGludCBhY3BpX3dyaXRlX3Rocm90dGxpbmdfc3RhdGUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKLQkJCQlhY3BpX2ludGVnZXIgdmFsdWUpCisJCQkJdTY0IHZhbHVlKQogewogCXUzMiBiaXRfd2lkdGgsIGJpdF9vZmZzZXQ7CiAJdTY0IHB0Y192YWx1ZTsKQEAgLTc5Myw3ICs3OTMsNyBAQAogfQogCiBzdGF0aWMgaW50IGFjcGlfZ2V0X3Rocm90dGxpbmdfc3RhdGUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKLQkJCQlhY3BpX2ludGVnZXIgdmFsdWUpCisJCQkJdTY0IHZhbHVlKQogewogCWludCBpOwogCkBAIC04MDgsNyArODA4LDcgQEAKIH0KIAogc3RhdGljIGludCBhY3BpX2dldF90aHJvdHRsaW5nX3ZhbHVlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQlpbnQgc3RhdGUsIGFjcGlfaW50ZWdlciAqdmFsdWUpCisJCQlpbnQgc3RhdGUsIHU2NCAqdmFsdWUpCiB7CiAJaW50IHJldCA9IC0xOwogCkBAIC04MjYsNyArODI2LDcgQEAKIHsKIAlpbnQgc3RhdGUgPSAwOwogCWludCByZXQ7Ci0JYWNwaV9pbnRlZ2VyIHZhbHVlOworCXU2NCB2YWx1ZTsKIAogCWlmICghcHIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTkzLDcgKzk5Myw3IEBACiAJCQkJCSAgICAgaW50IHN0YXRlLCBib29sIGZvcmNlKQogewogCWludCByZXQ7Ci0JYWNwaV9pbnRlZ2VyIHZhbHVlOworCXU2NCB2YWx1ZTsKIAogCWlmICghcHIpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggM2UwMDk2Ny4uZmI3ZmMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC03NDEsMTkgKzc0MSw0MCBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotc3RhdGljIGludCBhY3BpX2J1c19nZXRfd2FrZXVwX2RldmljZV9mbGFncyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIGFjcGlfYnVzX3NldF9ydW5fd2FrZV9mbGFncyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07Ci0JdW5pb24gYWNwaV9vYmplY3QgKnBhY2thZ2UgPSBOVUxMOwotCWludCBwc3dfZXJyb3I7Ci0KIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgYnV0dG9uX2RldmljZV9pZHNbXSA9IHsKIAkJeyJQTlAwQzBEIiwgMH0sCiAJCXsiUE5QMEMwQyIsIDB9LAogCQl7IlBOUDBDMEUiLCAwfSwKIAkJeyIiLCAwfSwKIAl9OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2V2ZW50X3N0YXR1cyBldmVudF9zdGF0dXM7CisKKwlkZXZpY2UtPndha2V1cC5ydW5fd2FrZV9jb3VudCA9IDA7CisJZGV2aWNlLT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCA9IDA7CisKKwkvKiBQb3dlciBidXR0b24sIExpZCBzd2l0Y2ggYWx3YXlzIGVuYWJsZSB3YWtldXAgKi8KKwlpZiAoIWFjcGlfbWF0Y2hfZGV2aWNlX2lkcyhkZXZpY2UsIGJ1dHRvbl9kZXZpY2VfaWRzKSkgeworCQlkZXZpY2UtPndha2V1cC5mbGFncy5ydW5fd2FrZSA9IDE7CisJCWRldmljZS0+d2FrZXVwLmZsYWdzLmFsd2F5c19lbmFibGVkID0gMTsKKwkJcmV0dXJuOworCX0KKworCXN0YXR1cyA9IGFjcGlfZ2V0X2dwZV9zdGF0dXMoTlVMTCwgZGV2aWNlLT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9OT1RfSVNSLCAmZXZlbnRfc3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IEFFX09LKQorCQlkZXZpY2UtPndha2V1cC5mbGFncy5ydW5fd2FrZSA9CisJCQkJISEoZXZlbnRfc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0hBTkRMRSk7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3dha2V1cF9kZXZpY2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKKwlpbnQgcHN3X2Vycm9yOwogCiAJLyogX1BSVyAqLwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGRldmljZS0+aGFuZGxlLCAiX1BSVyIsIE5VTEwsICZidWZmZXIpOwpAQCAtNzczLDYgKzc5NCw3IEBACiAKIAlkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCA9IDE7CiAJZGV2aWNlLT53YWtldXAucHJlcGFyZV9jb3VudCA9IDA7CisJYWNwaV9idXNfc2V0X3J1bl93YWtlX2ZsYWdzKGRldmljZSk7CiAJLyogQ2FsbCBfUFNXL19EU1cgb2JqZWN0IHRvIGRpc2FibGUgaXRzIGFiaWxpdHkgdG8gd2FrZSB0aGUgc2xlZXBpbmcKIAkgKiBzeXN0ZW0gZm9yIHRoZSBBQ1BJIGRldmljZSB3aXRoIHRoZSBfUFJXIG9iamVjdC4KIAkgKiBUaGUgX1BTVyBvYmplY3QgaXMgZGVwcmVjaWF0ZWQgaW4gQUNQSSAzLjAgYW5kIGlzIHJlcGxhY2VkIGJ5IF9EU1cuCkBAIC03ODQsMTAgKzgwNiw2IEBACiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkiZXJyb3IgaW4gX0RTVyBvciBfUFNXIGV2YWx1YXRpb25cbiIpKTsKIAotCS8qIFBvd2VyIGJ1dHRvbiwgTGlkIHN3aXRjaCBhbHdheXMgZW5hYmxlIHdha2V1cCAqLwotCWlmICghYWNwaV9tYXRjaF9kZXZpY2VfaWRzKGRldmljZSwgYnV0dG9uX2RldmljZV9pZHMpKQotCQlkZXZpY2UtPndha2V1cC5mbGFncy5ydW5fd2FrZSA9IDE7Ci0KIGVuZDoKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCWRldmljZS0+ZmxhZ3Mud2FrZV9jYXBhYmxlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggNzlkMzNkOS4uM2JkZTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTc0NSw5ICs3NDUsMTggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZXJyb3IgPSBlbmFibGUgPwotCQlhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYsIGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlKSA6Ci0JCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOworCWlmIChlbmFibGUpIHsKKwkJZXJyb3IgPSBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYsCisJCQkJCQlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSk7CisJCWlmICghZXJyb3IpCisJCQlhY3BpX2VuYWJsZV9ncGUoYWRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCWFkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOworCX0gZWxzZSB7CisJCWFjcGlfZGlzYWJsZV9ncGUoYWRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGFkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX1RZUEVfV0FLRSk7CisJCWVycm9yID0gYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoYWRldik7CisJfQogCWlmICghZXJyb3IpCiAJCWRldl9pbmZvKGRldiwgIndha2UtdXAgY2FwYWJpbGl0eSAlcyBieSBBQ1BJXG4iLAogCQkJCWVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IGQxMTI4MjkuLmEyMDZhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTM4NywxMCArMzg3LDEwIEBACiAJaWYgKGluZGV4IDwgbnVtX2dwZXMpIHsKIAkJaWYgKCFzdHJjbXAoYnVmLCAiZGlzYWJsZVxuIikgJiYKIAkJCQkoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9kaXNhYmxlX2dwZShoYW5kbGUsIGluZGV4KTsKKwkJCXJlc3VsdCA9IGFjcGlfc2V0X2dwZShoYW5kbGUsIGluZGV4LCBBQ1BJX0dQRV9ESVNBQkxFKTsKIAkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJlbmFibGVcbiIpICYmCiAJCQkJIShzdGF0dXMgJiBBQ1BJX0VWRU5UX0ZMQUdfRU5BQkxFRCkpCi0JCQlyZXN1bHQgPSBhY3BpX2VuYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CisJCQlyZXN1bHQgPSBhY3BpX3NldF9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9HUEVfRU5BQkxFKTsKIAkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJjbGVhclxuIikgJiYKIAkJCQkoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX1NFVCkpCiAJCQlyZXN1bHQgPSBhY3BpX2NsZWFyX2dwZShoYW5kbGUsIGluZGV4LCBBQ1BJX05PVF9JU1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwppbmRleCA4MTFmZWMxLi4xMTg4MmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJCXN3aXRjaCAoZm9ybWF0X3N0cmluZ1tpXSkgewogCQkJY2FzZSAnTic6Ci0JCQkJc2l6ZV9yZXF1aXJlZCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyKTsKLQkJCQl0YWlsX29mZnNldCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyKTsKKwkJCQlzaXplX3JlcXVpcmVkICs9IHNpemVvZih1NjQpOworCQkJCXRhaWxfb2Zmc2V0ICs9IHNpemVvZih1NjQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnUyc6CiAJCQkJc2l6ZV9yZXF1aXJlZCArPQotCQkJCSAgICBzaXplb2YoY2hhciAqKSArIHNpemVvZihhY3BpX2ludGVnZXIpICsKKwkJCQkgICAgc2l6ZW9mKGNoYXIgKikgKyBzaXplb2YodTY0KSArCiAJCQkJICAgIHNpemVvZihjaGFyKTsKIAkJCQl0YWlsX29mZnNldCArPSBzaXplb2YoY2hhciAqKTsKIAkJCQlicmVhazsKQEAgLTE5MywxNyArMTkzLDE3IEBACiAJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAJCQlzd2l0Y2ggKGZvcm1hdF9zdHJpbmdbaV0pIHsKIAkJCWNhc2UgJ04nOgotCQkJCSooKGFjcGlfaW50ZWdlciAqKSBoZWFkKSA9CisJCQkJKigodTY0ICopIGhlYWQpID0KIAkJCQkgICAgZWxlbWVudC0+aW50ZWdlci52YWx1ZTsKLQkJCQloZWFkICs9IHNpemVvZihhY3BpX2ludGVnZXIpOworCQkJCWhlYWQgKz0gc2l6ZW9mKHU2NCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdTJzoKIAkJCQlwb2ludGVyID0gKHU4ICoqKSBoZWFkOwogCQkJCSpwb2ludGVyID0gdGFpbDsKLQkJCQkqKChhY3BpX2ludGVnZXIgKikgdGFpbCkgPQorCQkJCSooKHU2NCAqKSB0YWlsKSA9CiAJCQkJICAgIGVsZW1lbnQtPmludGVnZXIudmFsdWU7Ci0JCQkJaGVhZCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyICopOwotCQkJCXRhaWwgKz0gc2l6ZW9mKGFjcGlfaW50ZWdlcik7CisJCQkJaGVhZCArPSBzaXplb2YodTY0ICopOworCQkJCXRhaWwgKz0gc2l6ZW9mKHU2NCk7CiAJCQkJLyogTlVMTCB0ZXJtaW5hdGUgc3RyaW5nICovCiAJCQkJKnRhaWwgPSAoY2hhcikwOwogCQkJCXRhaWwgKz0gc2l6ZW9mKGNoYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBiNzY1NzkwLi42ZTliNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNzU5LDcgKzc1OSw3IEBACiBzdGF0aWMgaW50CiBhY3BpX3ZpZGVvX2J1c19ET1Moc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbywgaW50IGJpb3NfZmxhZywgaW50IGxjZF9mbGFnKQogewotCWFjcGlfaW50ZWdlciBzdGF0dXMgPSAwOworCXU2NCBzdGF0dXMgPSAwOwogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMSwgJmFyZzAgfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IGUwZWUwYzAuLjRiOWQzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTIxLDEyICsyMSwxMiBAQAogQUNQSV9NT0RVTEVfTkFNRSgid2FrZXVwX2RldmljZXMiKQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCAtIHByZXBhcmUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzIHBvd2VyIGlmIHRoZSBkZXZpY2VzJyB3YWtldXAgbGV2ZWwKLSAqIGlzIGhpZ2hlciB0aGFuIHJlcXVlc3RlZCBzbGVlcCBsZXZlbAorICogYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwIC0gUHJlcGFyZSB3YWtlLXVwIGRldmljZXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBwb3dlciwgdW5sZXNzIHRoZSByZXF1ZXN0ZWQgc3lzdGVtIHNsZWVwIHN0YXRlIGlzCisgKiB0b28gZGVlcC4KICAqLwotCiB2b2lkIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCh1OCBzbGVlcF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKQEAgLTM2LDkgKzM2LDggQEAKIAkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCiAJCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwKLQkJICAgICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkIHx8Ci0JCSAgICAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBzbGVlcF9zdGF0ZSk7CkBAIC00Niw5ICs0NSwxMiBAQAogfQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UgLSBlbmFibGUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzJ3MgR1BFCisgKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlIC0gRW5hYmxlIHdha2UtdXAgZGV2aWNlIEdQRXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBHUEVzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQKKyAqIGFjcGlfZGlzYWJsZV9hbGxfZ3BlcygpIHdhcyBleGVjdXRlZCBiZWZvcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBhbnkKKyAqIEdQRXMgaGVyZS4KICAqLwogdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKQogewpAQCAtNjUsMjkgKzY3LDIyIEBACiAJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCiAJCQljb250aW51ZTsKIAotCQkvKiBJZiB1c2VycyB3YW50IHRvIGRpc2FibGUgcnVuLXdha2UgR1BFLAotCQkgKiB3ZSBvbmx5IGRpc2FibGUgaXQgZm9yIHdha2UgYW5kIGxlYXZlIGl0IGZvciBydW50aW1lCi0JCSAqLwogCQlpZiAoKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkICYmICFkZXYtPndha2V1cC5wcmVwYXJlX2NvdW50KQotCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkgewotCQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQkJLyogc2V0X2dwZV90eXBlIHdpbGwgZGlzYWJsZSBHUEUsIGxlYXZlIGl0IGxpa2UgdGhhdCAqLwotCQkJCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCQkgIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JCQl9CisJCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKQogCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkKLQkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKworCQkvKiBUaGUgd2FrZS11cCBwb3dlciBzaG91bGQgaGF2ZSBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gKi8KKwkJYWNwaV9zZXRfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfRU5BQkxFKTsKIAl9CiB9CiAKIC8qKgotICogYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UgLSBkaXNhYmxlIGRldmljZXMnIHdha2V1cCBjYXBhYmlsaXR5Ci0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIERpc2FibGUgYWxsIHdha3VwIGRldmljZXMncyBHUEUgYW5kIHdha2V1cCBjYXBhYmlsaXR5CisgKiBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZSAtIERpc2FibGUgZGV2aWNlcycgd2FrZXVwIGNhcGFiaWxpdHkuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBhZmZlY3RzIGRldmljZXMgd2l0aCB3YWtldXAuc3RhdGUuZW5hYmxlZCBzZXQsIHdoaWNoIG1lYW5zCisgKiB0aGF0IGl0IHJldmVyc2VzIHRoZSBjaGFuZ2VzIG1hZGUgYnkgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwKCkuCiAgKi8KIHZvaWQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UodTggc2xlZXBfc3RhdGUpCiB7CkBAIC05NywzMCArOTIsMTEgQEAKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPQogCQkJY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX2RldmljZSwgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgJiYgIWRldi0+d2FrZXVwLnByZXBhcmVfY291bnQpCi0JCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSB7Ci0JCQlpZiAoZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpIHsKLQkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKLQkJCQkvKiBSZS1lbmFibGUgaXQsIHNpbmNlIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgaXQgKi8KLQkJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIpOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQogCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOwotCQkvKiBOZXZlciBkaXNhYmxlIHJ1bi13YWtlIEdQRSAqLwotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKLQkJCWFjcGlfY2xlYXJfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICAgICAgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsIEFDUElfTk9UX0lTUik7Ci0JCX0KIAl9CiB9CiAKQEAgLTEzNCwxMyArMTEwLDExIEBACiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKIAkJLyogSW4gY2FzZSB1c2VyIGRvZXNuJ3QgbG9hZCBidXR0b24gZHJpdmVyICovCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UgfHwgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKKwkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCB8fAorCQkgICAgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKIAkJCWNvbnRpbnVlOwotCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkgIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOwotCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKyAJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorIAkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOwogCQlkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDU2YzYzNzQuLjAxYzUyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtNDQ2LDkgKzQ0Niw5IEBACiAKIGNvbmZpZyBQQVRBX0xFR0FDWQogCXRyaXN0YXRlICJMZWdhY3kgSVNBIFBBVEEgc3VwcG9ydCAoRXhwZXJpbWVudGFsKSIKLQlkZXBlbmRzIG9uIElTQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIChJU0EgfHwgUENJKSAgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJU0EvVkxCIGJ1cyBsZWdhY3kgUEFUQQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJU0EvVkxCL1BDSSBidXMgbGVnYWN5IFBBVEEKIAkgIHBvcnRzIGFuZCBhbGxvd3MgdGhlbSB0byBiZSBhY2Nlc3NlZCB2aWEgdGhlIG5ldyBBVEEgbGF5ZXIuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYjM0MzkwMy4uNmJkOTMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtOTMsNiArOTMsOSBAQAogCUFIQ0lfQ01EX1RCTF9BUl9TWgk9IEFIQ0lfQ01EX1RCTF9TWiAqIEFIQ0lfTUFYX0NNRFMsCiAJQUhDSV9QT1JUX1BSSVZfRE1BX1NaCT0gQUhDSV9DTURfU0xPVF9TWiArIEFIQ0lfQ01EX1RCTF9BUl9TWiArCiAJCQkJICBBSENJX1JYX0ZJU19TWiwKKwlBSENJX1BPUlRfUFJJVl9GQlNfRE1BX1NaCT0gQUhDSV9DTURfU0xPVF9TWiArCisJCQkJCSAgQUhDSV9DTURfVEJMX0FSX1NaICsKKwkJCQkJICAoQUhDSV9SWF9GSVNfU1ogKiAxNiksCiAJQUhDSV9JUlFfT05fU0cJCT0gKDEgPDwgMzEpLAogCUFIQ0lfQ01EX0FUQVBJCQk9ICgxIDw8IDUpLAogCUFIQ0lfQ01EX1dSSVRFCQk9ICgxIDw8IDYpLApAQCAtMTcwLDYgKzE3Myw3IEBACiAJUE9SVF9TQ1JfRVJSCQk9IDB4MzAsIC8qIFNBVEEgcGh5IHJlZ2lzdGVyOiBTRXJyb3IgKi8KIAlQT1JUX1NDUl9BQ1QJCT0gMHgzNCwgLyogU0FUQSBwaHkgcmVnaXN0ZXI6IFNBY3RpdmUgKi8KIAlQT1JUX1NDUl9OVEYJCT0gMHgzYywgLyogU0FUQSBwaHkgcmVnaXN0ZXI6IFNOb3RpZmljYXRpb24gKi8KKwlQT1JUX0ZCUwkJPSAweDQwLCAvKiBGSVMtYmFzZWQgU3dpdGNoaW5nICovCiAKIAkvKiBQT1JUX0lSUV97U1RBVCxNQVNLfSBiaXRzICovCiAJUE9SVF9JUlFfQ09MRF9QUkVTCT0gKDEgPDwgMzEpLCAvKiBjb2xkIHByZXNlbmNlIGRldGVjdCAqLwpAQCAtMjA4LDYgKzIxMiw3IEBACiAJUE9SVF9DTURfQVNQCQk9ICgxIDw8IDI3KSwgLyogQWdncmVzc2l2ZSBTbHVtYmVyL1BhcnRpYWwgKi8KIAlQT1JUX0NNRF9BTFBFCQk9ICgxIDw8IDI2KSwgLyogQWdncmVzc2l2ZSBMaW5rIFBNIGVuYWJsZSAqLwogCVBPUlRfQ01EX0FUQVBJCQk9ICgxIDw8IDI0KSwgLyogRGV2aWNlIGlzIEFUQVBJICovCisJUE9SVF9DTURfRkJTQ1AJCT0gKDEgPDwgMjIpLCAvKiBGQlMgQ2FwYWJsZSBQb3J0ICovCiAJUE9SVF9DTURfUE1QCQk9ICgxIDw8IDE3KSwgLyogUE1QIGF0dGFjaGVkICovCiAJUE9SVF9DTURfTElTVF9PTgk9ICgxIDw8IDE1KSwgLyogY21kIGxpc3QgRE1BIGVuZ2luZSBydW5uaW5nICovCiAJUE9SVF9DTURfRklTX09OCQk9ICgxIDw8IDE0KSwgLyogRklTIERNQSBlbmdpbmUgcnVubmluZyAqLwpAQCAtMjIyLDYgKzIyNywxNCBAQAogCVBPUlRfQ01EX0lDQ19QQVJUSUFMCT0gKDB4MiA8PCAyOCksIC8qIFB1dCBpL2YgaW4gcGFydGlhbCBzdGF0ZSAqLwogCVBPUlRfQ01EX0lDQ19TTFVNQkVSCT0gKDB4NiA8PCAyOCksIC8qIFB1dCBpL2YgaW4gc2x1bWJlciBzdGF0ZSAqLwogCisJUE9SVF9GQlNfRFdFX09GRlNFVAk9IDE2LCAvKiBGQlMgZGV2aWNlIHdpdGggZXJyb3Igb2Zmc2V0ICovCisJUE9SVF9GQlNfQURPX09GRlNFVAk9IDEyLCAvKiBGQlMgYWN0aXZlIGRldiBvcHRpbWl6YXRpb24gb2Zmc2V0ICovCisJUE9SVF9GQlNfREVWX09GRlNFVAk9IDgsICAvKiBGQlMgZGV2aWNlIHRvIGlzc3VlIG9mZnNldCAqLworCVBPUlRfRkJTX0RFVl9NQVNLCT0gKDB4ZiA8PCBQT1JUX0ZCU19ERVZfT0ZGU0VUKSwgIC8qIEZCUy5ERVYgKi8KKwlQT1JUX0ZCU19TREUJCT0gKDEgPDwgMiksIC8qIEZCUyBzaW5nbGUgZGV2aWNlIGVycm9yICovCisJUE9SVF9GQlNfREVDCQk9ICgxIDw8IDEpLCAvKiBGQlMgZGV2aWNlIGVycm9yIGNsZWFyICovCisJUE9SVF9GQlNfRU4JCT0gKDEgPDwgMCksIC8qIEVuYWJsZSBGQlMgKi8KKwogCS8qIGhwcml2LT5mbGFncyBiaXRzICovCiAJQUhDSV9IRkxBR19OT19OQ1EJCT0gKDEgPDwgMCksCiAJQUhDSV9IRkxBR19JR05fSVJRX0lGX0VSUgk9ICgxIDw8IDEpLCAvKiBpZ25vcmUgSVJRX0lGX0VSUiAqLwpAQCAtMzA0LDYgKzMxNyw5IEBACiAJdW5zaWduZWQgaW50CQluY3Ffc2F3X2RtYXM6MTsKIAl1bnNpZ25lZCBpbnQJCW5jcV9zYXdfc2RiOjE7CiAJdTMyIAkJCWludHJfbWFzazsJLyogaW50ZXJydXB0cyB0byBlbmFibGUgKi8KKwlib29sCQkJZmJzX3N1cHBvcnRlZDsJLyogc2V0IGlmZiBGQlMgaXMgc3VwcG9ydGVkICovCisJYm9vbAkJCWZic19lbmFibGVkOwkvKiBzZXQgaWZmIEZCUyBpcyBlbmFibGVkICovCisJaW50CQkJZmJzX2xhc3RfZGV2OwkvKiBzYXZlIEZCUy5ERVYgb2YgbGFzdCBGSVMgKi8KIAkvKiBlbmNsb3N1cmUgbWFuYWdlbWVudCBpbmZvIHBlciBQTSBzbG90ICovCiAJc3RydWN0IGFoY2lfZW1fcHJpdgllbV9wcml2W0VNX01BWF9TTE9UU107CiB9OwpAQCAtMzE1LDkgKzMzMSwxMiBAQAogc3RhdGljIGJvb2wgYWhjaV9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgYWhjaV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wb3J0X3N0b3Aoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IGFoY2lfcG1wX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgYWhjaV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgYWhjaV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhaGNpX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBhaGNpX2VuYWJsZV9mYnMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBhaGNpX2Rpc2FibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wbXBfZGV0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBhaGNpX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC0zNTYsMTAgKzM3NSwxMCBAQAogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X3BvcnRfY21kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCi1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfdmVyc2lvbiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfdmVyc2lvbiwgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9ob3N0X3ZlcnNpb24sIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X3ZlcnNpb24sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFoY2lfcG9ydF9jbWQsIFNfSVJVR08sIGFoY2lfc2hvd19wb3J0X2NtZCwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LApAQCAtMzkwLDcgKzQwOSw3IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWhjaV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZzYXRhX3BtcF9wb3J0X29wcywKIAotCS5xY19kZWZlcgkJPSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoLAorCS5xY19kZWZlcgkJPSBhaGNpX3BtcF9xY19kZWZlciwKIAkucWNfcHJlcAkJPSBhaGNpX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFoY2lfcWNfaXNzdWUsCiAJLnFjX2ZpbGxfcnRmCQk9IGFoY2lfcWNfZmlsbF9ydGYsCkBAIC01NzAsNiArNTg5LDEyIEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgzYjJiKSwgYm9hcmRfYWhjaSB9LCAvKiBQQ0ggUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4M2IyYyksIGJvYXJkX2FoY2kgfSwgLyogUENIIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDNiMmYpLCBib2FyZF9haGNpIH0sIC8qIFBDSCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxYzAyKSwgYm9hcmRfYWhjaSB9LCAvKiBDUFQgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWMwMyksIGJvYXJkX2FoY2kgfSwgLyogQ1BUIEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFjMDQpLCBib2FyZF9haGNpIH0sIC8qIENQVCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxYzA1KSwgYm9hcmRfYWhjaSB9LCAvKiBDUFQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWMwNiksIGJvYXJkX2FoY2kgfSwgLyogQ1BUIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFjMDcpLCBib2FyZF9haGNpIH0sIC8qIENQVCBSQUlEICovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKQEAgLTIwNDUsNiArMjA3MCwxNyBAQAogCXJldHVybiBzaTsKIH0KIAorc3RhdGljIGludCBhaGNpX3BtcF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSB8fCBwcC0+ZmJzX2VuYWJsZWQpCisJCXJldHVybiBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwllbHNlCisJCXJldHVybiBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoKHFjKTsKK30KKwogc3RhdGljIHZvaWQgYWhjaV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKQEAgLTIwODMsNiArMjExOSwzMSBAQAogCWFoY2lfZmlsbF9jbWRfc2xvdChwcCwgcWMtPnRhZywgb3B0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFoY2lfZmJzX2RlY19pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlpbnQgcmV0cmllcyA9IDM7CisKKwlEUFJJTlRLKCJFTlRFUlxuIik7CisJQlVHX09OKCFwcC0+ZmJzX2VuYWJsZWQpOworCisJLyogdGltZSB0byB3YWl0IGZvciBERUMgaXMgbm90IHNwZWNpZmllZCBieSBBSENJIHNwZWMsCisJICogYWRkIGEgcmV0cnkgbG9vcCBmb3Igc2FmZXR5LgorCSAqLworCXdyaXRlbChmYnMgfCBQT1JUX0ZCU19ERUMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJd2hpbGUgKChmYnMgJiBQT1JUX0ZCU19ERUMpICYmIHJldHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCWZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwl9CisKKwlpZiAoZmJzICYgUE9SVF9GQlNfREVDKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBhcC0+aG9zdC0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBjbGVhciBkZXZpY2UgZXJyb3JcbiIpOworfQorCiBzdGF0aWMgdm9pZCBhaGNpX2Vycm9yX2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyIGlycV9zdGF0KQogewogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwpAQCAtMjA5MSwxMiArMjE1MiwyNiBAQAogCXN0cnVjdCBhdGFfbGluayAqbGluayA9IE5VTEw7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICphY3RpdmVfcWM7CiAJc3RydWN0IGF0YV9laF9pbmZvICphY3RpdmVfZWhpOworCWJvb2wgZmJzX25lZWRfZGVjID0gZmFsc2U7CiAJdTMyIHNlcnJvcjsKIAotCS8qIGRldGVybWluZSBhY3RpdmUgbGluayAqLwotCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQotCQlpZiAoYXRhX2xpbmtfYWN0aXZlKGxpbmspKQotCQkJYnJlYWs7CisJLyogZGV0ZXJtaW5lIGFjdGl2ZSBsaW5rIHdpdGggZXJyb3IgKi8KKwlpZiAocHAtPmZic19lbmFibGVkKSB7CisJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOworCQl1MzIgZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQlpbnQgcG1wID0gZmJzID4+IFBPUlRfRkJTX0RXRV9PRkZTRVQ7CisKKwkJaWYgKChmYnMgJiBQT1JUX0ZCU19TREUpICYmIChwbXAgPCBhcC0+bnJfcG1wX2xpbmtzKSAmJgorCQkgICAgYXRhX2xpbmtfb25saW5lKCZhcC0+cG1wX2xpbmtbcG1wXSkpIHsKKwkJCWxpbmsgPSAmYXAtPnBtcF9saW5rW3BtcF07CisJCQlmYnNfbmVlZF9kZWMgPSB0cnVlOworCQl9CisKKwl9IGVsc2UKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpCisJCQlpZiAoYXRhX2xpbmtfYWN0aXZlKGxpbmspKQorCQkJCWJyZWFrOworCiAJaWYgKCFsaW5rKQogCQlsaW5rID0gJmFwLT5saW5rOwogCkBAIC0yMTUzLDggKzIyMjgsMTMgQEAKIAl9CiAKIAlpZiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9JRl9FUlIpIHsKLQkJaG9zdF9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwotCQlob3N0X2VoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKKwkJaWYgKGZic19uZWVkX2RlYykKKwkJCWFjdGl2ZV9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9ERVY7CisJCWVsc2UgeworCQkJaG9zdF9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOworCQkJaG9zdF9laGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CisJCX0KKwogCQlhdGFfZWhpX3B1c2hfZGVzYyhob3N0X2VoaSwgImludGVyZmFjZSBmYXRhbCBlcnJvciIpOwogCX0KIApAQCAtMjE2OSw3ICsyMjQ5LDEwIEBACiAKIAlpZiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9GUkVFWkUpCiAJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7Ci0JZWxzZQorCWVsc2UgaWYgKGZic19uZWVkX2RlYykgeworCQlhdGFfbGlua19hYm9ydChsaW5rKTsKKwkJYWhjaV9mYnNfZGVjX2ludHIoYXApOworCX0gZWxzZQogCQlhdGFfcG9ydF9hYm9ydChhcCk7CiB9CiAKQEAgLTIyMjIsMTIgKzIzMDUsMTkgQEAKIAkJCS8qIElmIHRoZSAnTicgYml0IGluIHdvcmQgMCBvZiB0aGUgRklTIGlzIHNldCwKIAkJCSAqIHdlIGp1c3QgcmVjZWl2ZWQgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbi4KIAkJCSAqIFRlbGwgbGliYXRhIGFib3V0IGl0LgorCQkJICoKKwkJCSAqIExhY2sgb2YgU05vdGlmaWNhdGlvbiBzaG91bGQgbm90IGFwcGVhciBpbgorCQkJICogYWhjaSAxLjIsIHNvIHRoZSB3b3JrYXJvdW5kIGlzIHVubmVjZXNzYXJ5CisJCQkgKiB3aGVuIEZCUyBpcyBlbmFibGVkLgogCQkJICovCi0JCQljb25zdCBfX2xlMzIgKmYgPSBwcC0+cnhfZmlzICsgUlhfRklTX1NEQjsKLQkJCXUzMiBmMCA9IGxlMzJfdG9fY3B1KGZbMF0pOwotCi0JCQlpZiAoZjAgJiAoMSA8PCAxNSkpCi0JCQkJc2F0YV9hc3luY19ub3RpZmljYXRpb24oYXApOworCQkJaWYgKHBwLT5mYnNfZW5hYmxlZCkKKwkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQllbHNlIHsKKwkJCQljb25zdCBfX2xlMzIgKmYgPSBwcC0+cnhfZmlzICsgUlhfRklTX1NEQjsKKwkJCQl1MzIgZjAgPSBsZTMyX3RvX2NwdShmWzBdKTsKKwkJCQlpZiAoZjAgJiAoMSA8PCAxNSkpCisJCQkJCXNhdGFfYXN5bmNfbm90aWZpY2F0aW9uKGFwKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjMyMSw2ICsyNDExLDE1IEBACiAKIAlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX05DUSkKIAkJd3JpdGVsKDEgPDwgcWMtPnRhZywgcG9ydF9tbWlvICsgUE9SVF9TQ1JfQUNUKTsKKworCWlmIChwcC0+ZmJzX2VuYWJsZWQgJiYgcHAtPmZic19sYXN0X2RldiAhPSBxYy0+ZGV2LT5saW5rLT5wbXApIHsKKwkJdTMyIGZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJZmJzICY9IH4oUE9SVF9GQlNfREVWX01BU0sgfCBQT1JUX0ZCU19ERUMpOworCQlmYnMgfD0gcWMtPmRldi0+bGluay0+cG1wIDw8IFBPUlRfRkJTX0RFVl9PRkZTRVQ7CisJCXdyaXRlbChmYnMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJcHAtPmZic19sYXN0X2RldiA9IHFjLT5kZXYtPmxpbmstPnBtcDsKKwl9CisKIAl3cml0ZWwoMSA8PCBxYy0+dGFnLCBwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CiAKIAlhaGNpX3N3X2FjdGl2aXR5KHFjLT5kZXYtPmxpbmspOwpAQCAtMjMzMyw2ICsyNDMyLDkgQEAKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CiAJdTggKmQyaF9maXMgPSBwcC0+cnhfZmlzICsgUlhfRklTX0QySF9SRUc7CiAKKwlpZiAocHAtPmZic19lbmFibGVkKQorCQlkMmhfZmlzICs9IHFjLT5kZXYtPmxpbmstPnBtcCAqIEFIQ0lfUlhfRklTX1NaOworCiAJYXRhX3RmX2Zyb21fZmlzKGQyaF9maXMsICZxYy0+cmVzdWx0X3RmKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzODEsNiArMjQ4Myw3MSBAQAogCQlhaGNpX2tpY2tfZW5naW5lKGFwKTsKIH0KIAorc3RhdGljIHZvaWQgYWhjaV9lbmFibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZiczsKKwlpbnQgcmM7CisKKwlpZiAoIXBwLT5mYnNfc3VwcG9ydGVkKQorCQlyZXR1cm47CisKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKGZicyAmIFBPUlRfRkJTX0VOKSB7CisJCXBwLT5mYnNfZW5hYmxlZCA9IHRydWU7CisJCXBwLT5mYnNfbGFzdF9kZXYgPSAtMTsgLyogaW5pdGlhbGl6YXRpb24gKi8KKwkJcmV0dXJuOworCX0KKworCXJjID0gYWhjaV9zdG9wX2VuZ2luZShhcCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwl3cml0ZWwoZmJzIHwgUE9SVF9GQlNfRU4sIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKGZicyAmIFBPUlRfRkJTX0VOKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCBhcC0+aG9zdC0+ZGV2LCAiRkJTIGlzIGVuYWJsZWQuXG4iKTsKKwkJcHAtPmZic19lbmFibGVkID0gdHJ1ZTsKKwkJcHAtPmZic19sYXN0X2RldiA9IC0xOyAvKiBpbml0aWFsaXphdGlvbiAqLworCX0gZWxzZQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBhcC0+aG9zdC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBGQlNcbiIpOworCisJYWhjaV9zdGFydF9lbmdpbmUoYXApOworfQorCitzdGF0aWMgdm9pZCBhaGNpX2Rpc2FibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZiczsKKwlpbnQgcmM7CisKKwlpZiAoIXBwLT5mYnNfc3VwcG9ydGVkKQorCQlyZXR1cm47CisKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKChmYnMgJiBQT1JUX0ZCU19FTikgPT0gMCkgeworCQlwcC0+ZmJzX2VuYWJsZWQgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKworCXJjID0gYWhjaV9zdG9wX2VuZ2luZShhcCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwl3cml0ZWwoZmJzICYgflBPUlRfRkJTX0VOLCBwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCWlmIChmYnMgJiBQT1JUX0ZCU19FTikKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgYXAtPmhvc3QtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIEZCU1xuIik7CisJZWxzZSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCBhcC0+aG9zdC0+ZGV2LCAiRkJTIGlzIGRpc2FibGVkLlxuIik7CisJCXBwLT5mYnNfZW5hYmxlZCA9IGZhbHNlOworCX0KKworCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKK30KKwogc3RhdGljIHZvaWQgYWhjaV9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CkBAIC0yMzkxLDYgKzI1NTgsOCBAQAogCWNtZCB8PSBQT1JUX0NNRF9QTVA7CiAJd3JpdGVsKGNtZCwgcG9ydF9tbWlvICsgUE9SVF9DTUQpOwogCisJYWhjaV9lbmFibGVfZmJzKGFwKTsKKwogCXBwLT5pbnRyX21hc2sgfD0gUE9SVF9JUlFfQkFEX1BNUDsKIAl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CkBAIC0yNDAxLDYgKzI1NzAsOCBAQAogCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiBjbWQ7CiAKKwlhaGNpX2Rpc2FibGVfZmJzKGFwKTsKKwogCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKIAljbWQgJj0gflBPUlRfQ01EX1BNUDsKIAl3cml0ZWwoY21kLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CkBAIC0yNDkyLDIwICsyNjYzLDQwIEBACiAKIHN0YXRpYyBpbnQgYWhjaV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmhvc3QtPmRldjsKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwOwogCXZvaWQgKm1lbTsKIAlkbWFfYWRkcl90IG1lbV9kbWE7CisJc2l6ZV90IGRtYV9zeiwgcnhfZmlzX3N6OwogCiAJcHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW0gPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUhDSV9QT1JUX1BSSVZfRE1BX1NaLCAmbWVtX2RtYSwKLQkJCQkgIEdGUF9LRVJORUwpOworCS8qIGNoZWNrIEZCUyBjYXBhYmlsaXR5ICovCisJaWYgKChocHJpdi0+Y2FwICYgSE9TVF9DQVBfRkJTKSAmJiBzYXRhX3BtcF9zdXBwb3J0ZWQoYXApKSB7CisJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOworCQl1MzIgY21kID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOworCQlpZiAoY21kICYgUE9SVF9DTURfRkJTQ1ApCisJCQlwcC0+ZmJzX3N1cHBvcnRlZCA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBkZXYsCisJCQkJICAgIlRoZSBwb3J0IGlzIG5vdCBjYXBhYmxlIG9mIEZCU1xuIik7CisJfQorCisJaWYgKHBwLT5mYnNfc3VwcG9ydGVkKSB7CisJCWRtYV9zeiA9IEFIQ0lfUE9SVF9QUklWX0ZCU19ETUFfU1o7CisJCXJ4X2Zpc19zeiA9IEFIQ0lfUlhfRklTX1NaICogMTY7CisJfSBlbHNlIHsKKwkJZG1hX3N6ID0gQUhDSV9QT1JUX1BSSVZfRE1BX1NaOworCQlyeF9maXNfc3ogPSBBSENJX1JYX0ZJU19TWjsKKwl9CisKKwltZW0gPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgZG1hX3N6LCAmbWVtX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChtZW0sIDAsIEFIQ0lfUE9SVF9QUklWX0RNQV9TWik7CisJbWVtc2V0KG1lbSwgMCwgZG1hX3N6KTsKIAogCS8qCiAJICogRmlyc3QgaXRlbSBpbiBjaHVuayBvZiBETUEgbWVtb3J5OiAzMi1zbG90IGNvbW1hbmQgdGFibGUsCkBAIC0yNTIzLDggKzI3MTQsOCBAQAogCXBwLT5yeF9maXMgPSBtZW07CiAJcHAtPnJ4X2Zpc19kbWEgPSBtZW1fZG1hOwogCi0JbWVtICs9IEFIQ0lfUlhfRklTX1NaOwotCW1lbV9kbWEgKz0gQUhDSV9SWF9GSVNfU1o7CisJbWVtICs9IHJ4X2Zpc19zejsKKwltZW1fZG1hICs9IHJ4X2Zpc19zejsKIAogCS8qCiAJICogVGhpcmQgaXRlbTogZGF0YSBhcmVhIGZvciBzdG9yaW5nIGEgc2luZ2xlIGNvbW1hbmQKQEAgLTMwODIsOCArMzI3MywxNiBAQAogCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyhwZGV2LCBocHJpdik7CiAKIAkvKiBwcmVwYXJlIGhvc3QgKi8KLQlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX05DUSkKLQkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfTkNRIHwgQVRBX0ZMQUdfRlBETUFfQUE7CisJaWYgKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9OQ1EpIHsKKwkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfTkNROworCQkvKiBBdXRvLWFjdGl2YXRlIG9wdGltaXphdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBzdXBwb3J0ZWQgb24KKwkJICAgYWxsIEFIQ0kgY29udHJvbGxlcnMgaW5kaWNhdGluZyBOQ1Egc3VwcG9ydCwgYnV0IGl0IHNlZW1zCisJCSAgIHRvIGJlIGJyb2tlbiBhdCBsZWFzdCBvbiBzb21lIE5WSURJQSBNQ1A3OSBjaGlwc2V0cy4KKwkJICAgVW50aWwgd2UgZ2V0IGluZm8gb24gd2hpY2ggTlZJRElBIGNoaXBzZXRzIGRvbid0IGhhdmUgdGhpcworCQkgICBpc3N1ZSwgaWYgYW55LCBkaXNhYmxlIEFBIG9uIGFsbCBOVklESUEgQUhDSXMuICovCisJCWlmIChwZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9OVklESUEpCisJCQlwaS5mbGFncyB8PSBBVEFfRkxBR19GUERNQV9BQTsKKwl9CiAKIAlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX1BNUCkKIAkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfUE1QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggMTJlMjZjMy4uMzNmYjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCXJldHVybiByYzsKIAkJcGNpbV9waW5fZGV2aWNlKGRldik7CiAJfQotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmdlbmVyaWNfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZnZW5lcmljX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNmYzZjIyNS4uYzMzODA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0xNzMsNiArMTczLDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7CiBzdGF0aWMgaW50IHBpaXhfc2lkcHJfc2NyX3dyaXRlKHN0cnVjdCBhdGFfbGluayAqbGluaywKIAkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKTsKK3N0YXRpYyBib29sIHBpaXhfaXJxX2NoZWNrKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwaWl4X3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOwogc3RhdGljIGludCBwaWl4X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKQEAgLTI5MSw2ICsyOTIsMTQgQEAKIAl7IDB4ODA4NiwgMHgzYjJkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQQ0gpICovCiAJeyAweDgwODYsIDB4M2IyZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoQ1BUKSAqLworCXsgMHg4MDg2LCAweDFjMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKENQVCkgKi8KKwl7IDB4ODA4NiwgMHgxYzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChDUFQpICovCisJeyAweDgwODYsIDB4MWMwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoQ1BUKSAqLworCXsgMHg4MDg2LCAweDFjMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfMnBvcnRfc2F0YSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApAQCAtMzA5LDggKzMxOCwxMyBAQAogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfcGF0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGlpeF9zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYTMyX3BvcnRfb3BzLAorCS5zZmZfaXJxX2NoZWNrCQk9IHBpaXhfaXJxX2NoZWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfcGF0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZwaWl4X3NhdGFfb3BzLAogCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJCT0gcGlpeF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gcGlpeF9zZXRfZG1hbW9kZSwKQEAgLTMyOCwxMCArMzQyLDYgQEAKIAkuc2V0X2RtYW1vZGUJCT0gaWNoX3NldF9kbWFtb2RlLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfc2F0YV9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfYm1kbWEzMl9wb3J0X29wcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3NpZHByX3NhdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmcGlpeF9zYXRhX29wcywKIAkuaGFyZHJlc2V0CQk9IHNhdGFfc3RkX2hhcmRyZXNldCwKQEAgLTk2Miw2ICs5NzIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgcGlpeF9pcnFfY2hlY2soc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpZiAodW5saWtlbHkoIWFwLT5pb2FkZHIuYm1kbWFfYWRkcikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBhcC0+b3BzLT5ibWRtYV9zdGF0dXMoYXApICYgQVRBX0RNQV9JTlRSOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBpaXhfYnJva2VuX3N1c3BlbmQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDEyNDU4MzguLjI5MmZkYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlXQVJOX09OKCEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfQUNQSV9TQVRBKSk7CiAKIAlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSkgewotCQlhY3BpX2ludGVnZXIgYWRyID0gU0FUQV9BRFIoYXAtPnBvcnRfbm8sIE5PX1BPUlRfTVVMVCk7CisJCXU2NCBhZHIgPSBTQVRBX0FEUihhcC0+cG9ydF9ubywgTk9fUE9SVF9NVUxUKTsKIAogCQlhcC0+bGluay5kZXZpY2UtPmFjcGlfaGFuZGxlID0KIAkJCWFjcGlfZ2V0X2NoaWxkKGFwLT5ob3N0LT5hY3BpX2hhbmRsZSwgYWRyKTsKQEAgLTc0LDcgKzc0LDcgQEAKIAkJYXAtPmxpbmsuZGV2aWNlLT5hY3BpX2hhbmRsZSA9IE5VTEw7CiAKIAkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKLQkJCWFjcGlfaW50ZWdlciBhZHIgPSBTQVRBX0FEUihhcC0+cG9ydF9ubywgbGluay0+cG1wKTsKKwkJCXU2NCBhZHIgPSBTQVRBX0FEUihhcC0+cG9ydF9ubywgbGluay0+cG1wKTsKIAogCQkJbGluay0+ZGV2aWNlLT5hY3BpX2hhbmRsZSA9CiAJCQkJYWNwaV9nZXRfY2hpbGQoYXAtPmhvc3QtPmFjcGlfaGFuZGxlLCBhZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggNjcyODMyOC4uOWM3N2IwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC0zMjExLDYgKzMyMTEsNyBAQAogaW50IGF0YV90aW1pbmdfY29tcHV0ZShzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgc2hvcnQgc3BlZWQsCiAJCSAgICAgICBzdHJ1Y3QgYXRhX3RpbWluZyAqdCwgaW50IFQsIGludCBVVCkKIHsKKwljb25zdCB1MTYgKmlkID0gYWRldi0+aWQ7CiAJY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKnM7CiAJc3RydWN0IGF0YV90aW1pbmcgcDsKIApAQCAtMzIyOCwxNCArMzIyOSwxOCBAQAogCSAqIFBJTy9NV19ETUEgY3ljbGUgdGltaW5nLgogCSAqLwogCi0JaWYgKGFkZXYtPmlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CS8qIEVJREUgZHJpdmUgKi8KKwlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJLyogRUlERSBkcml2ZSAqLwogCQltZW1zZXQoJnAsIDAsIHNpemVvZihwKSk7CisKIAkJaWYgKHNwZWVkID49IFhGRVJfUElPXzAgJiYgc3BlZWQgPD0gWEZFUl9TV19ETUFfMCkgewotCQkJaWYgKHNwZWVkIDw9IFhGRVJfUElPXzIpIHAuY3ljbGUgPSBwLmN5YzhiID0gYWRldi0+aWRbQVRBX0lEX0VJREVfUElPXTsKLQkJCQkJICAgIGVsc2UgcC5jeWNsZSA9IHAuY3ljOGIgPSBhZGV2LT5pZFtBVEFfSURfRUlERV9QSU9fSU9SRFldOwotCQl9IGVsc2UgaWYgKHNwZWVkID49IFhGRVJfTVdfRE1BXzAgJiYgc3BlZWQgPD0gWEZFUl9NV19ETUFfMikgewotCQkJcC5jeWNsZSA9IGFkZXYtPmlkW0FUQV9JRF9FSURFX0RNQV9NSU5dOwotCQl9CisJCQlpZiAoc3BlZWQgPD0gWEZFUl9QSU9fMikKKwkJCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT107CisJCQllbHNlIGlmICgoc3BlZWQgPD0gWEZFUl9QSU9fNCkgfHwKKwkJCQkgKHNwZWVkID09IFhGRVJfUElPXzUgJiYgIWF0YV9pZF9pc19jZmEoaWQpKSkKKwkJCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT19JT1JEWV07CisJCX0gZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKQorCQkJcC5jeWNsZSA9IGlkW0FUQV9JRF9FSURFX0RNQV9NSU5dOworCiAJCWF0YV90aW1pbmdfbWVyZ2UoJnAsIHQsIHQsIEFUQV9USU1JTkdfQ1lDTEUgfCBBVEFfVElNSU5HX0NZQzhCKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IGQwOTZmYmMuLmJlYTAwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfTk9fVU5MT0FEOwogCiAJLyogY29uZmlndXJlIG1heCBzZWN0b3JzICovCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIGRldi0+bWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBkZXYtPm1heF9zZWN0b3JzKTsKIAogCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkpIHsKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IDczMGVmM2MuLjAyNDQxZmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC0xNzYzLDI0ICsxNzYzLDUwIEBACiB7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMDsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIHBvbGxpbmcgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUT0RPOiBtYWtlIF9pcnFzYXZlIGNvbmRpdGlvbmFsIG9uIHg4NiBQQ0kgSURFIGxlZ2FjeSBtb2RlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKLQkJc3RydWN0IGF0YV9wb3J0ICphcDsKKwkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOworCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCi0JCWFwID0gaG9zdC0+cG9ydHNbaV07Ci0JCWlmIChhcCAmJgotCQkgICAgIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpIHsKLQkJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisJCWlmICh1bmxpa2VseShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpCisJCQljb250aW51ZTsKIAotCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwotCQkJaWYgKHFjICYmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkgJiYKLQkJCSAgICAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisJCWlmIChxYykgeworCQkJaWYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKQogCQkJCWhhbmRsZWQgfD0gYXRhX3NmZl9ob3N0X2ludHIoYXAsIHFjKTsKKwkJCWVsc2UKKwkJCQlwb2xsaW5nIHw9IDEgPDwgaTsKKwkJfQorCX0KKworCS8qCisJICogSWYgbm8gcG9ydCB3YXMgZXhwZWN0aW5nIElSUSBidXQgdGhlIGNvbnRyb2xsZXIgaXMgYWN0dWFsbHkKKwkgKiBhc3NlcnRpbmcgSVJRIGxpbmUsIG5vYm9keSBjYXJlZCB3aWxsIGVuc3VlLiAgQ2hlY2sgSVJRCisJICogcGVuZGluZyBzdGF0dXMgaWYgYXZhaWxhYmxlIGFuZCBjbGVhciBzcHVyaW91cyBJUlEuCisJICovCisJaWYgKCFoYW5kbGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKKwkJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKKworCQkJaWYgKHBvbGxpbmcgJiAoMSA8PCBpKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFhcC0+b3BzLT5zZmZfaXJxX2NoZWNrIHx8CisJCQkgICAgIWFwLT5vcHMtPnNmZl9pcnFfY2hlY2soYXApKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLAorCQkJCQkJImNsZWFyaW5nIHNwdXJpb3VzIElSUVxuIik7CisKKwkJCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCQkJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CiAJCX0KIAl9CiAKQEAgLTMwMTEsNiArMzAzNyw3IEBACiAgKglAcHBpOiBhcnJheSBvZiBwb3J0X2luZm8sIG11c3QgYmUgZW5vdWdoIGZvciB0d28gcG9ydHMKICAqCUBzaHQ6IHNjc2lfaG9zdF90ZW1wbGF0ZSB0byB1c2Ugd2hlbiByZWdpc3RlcmluZyB0aGUgaG9zdAogICoJQGhvc3RfcHJpdjogaG9zdCBwcml2YXRlX2RhdGEKKyAqCUBoZmxhZzogaG9zdCBmbGFncwogICoKICAqCVRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIGEgZHJpdmVyJ3MKICAqCXh4eF9pbml0X29uZSgpIHByb2JlIGZ1bmN0aW9uIGlmIHRoZSBoYXJkd2FyZSB1c2VzIHRyYWRpdGlvbmFsCkBAIC0zMDMxLDggKzMwNTgsOCBAQAogICoJWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJuby1iYXNlZCB2YWx1ZSBvbiBlcnJvci4KICAqLwogaW50IGF0YV9wY2lfc2ZmX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICogY29uc3QgKnBwaSwKLQkJCSBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQsIHZvaWQgKmhvc3RfcHJpdikKKwkJIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICogY29uc3QgKnBwaSwKKwkJIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2LCBpbnQgaGZsYWcpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcGkgPSBOVUxMOwpAQCAtMzA2Nyw2ICszMDk0LDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhvc3RfcHJpdjsKKwlob3N0LT5mbGFncyB8PSBoZmxhZzsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXJjID0gYXRhX3BjaV9zZmZfYWN0aXZhdGVfaG9zdChob3N0LCBhdGFfc2ZmX2ludGVycnVwdCwgc2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKaW5kZXggZDhmMzVmZS4uMjk0ZjMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCQkJcmV0dXJuIHJjOwogCQlwY2ltX3Bpbl9kZXZpY2UocGRldik7CiAJfQotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwYWNwaV9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwYWNwaV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGFjcGlfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggOTQzNDExNC4uZGM2MWI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0xNTksOCArMTU5LDcgQEAKICAqCWFsaV9wcm9ncmFtX21vZGVzCS0JbG9hZCBtb2RlIHJlZ2lzdGVycwogICoJQGFwOiBBTGkgY2hhbm5lbCB0byBsb2FkCiAgKglAYWRldjogRGV2aWNlIHRoZSB0aW1pbmcgaXMgZm9yCi0gKglAY21kOiBDb21tYW5kIHRpbWluZwotICoJQGRhdGE6IERhdGEgdGltaW5nCisgKglAdDogdGltaW5nIGRhdGEKICAqCUB1bHRyYTogVURNQSB0aW1pbmcgb3IgemVybyBmb3Igb2ZmCiAgKgogICoJTG9hZHMgdGhlIHRpbWluZyByZWdpc3RlcnMgZm9yIGNtZC9kYXRhIGFuZCBkaXNhYmxlIFVETUEgaWYKQEAgLTIwMiw4ICsyMDEsNyBAQAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCiAgKglAYWRldjogQVRBIGRldmljZQogICoKLSAqCVByb2dyYW0gdGhlIEFMaSByZWdpc3RlcnMgZm9yIFBJTyBtb2RlLiBGSVhNRTogYWRkIHRpbWluZ3MgZm9yCi0gKglQSU81LgorICoJUHJvZ3JhbSB0aGUgQUxpIHJlZ2lzdGVycyBmb3IgUElPIG1vZGUuCiAgKi8KIAogc3RhdGljIHZvaWQgYWxpX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQpAQCAtMjM3LDcgKzIzNSw3IEBACiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKICAqCUBhZGV2OiBBVEEgZGV2aWNlCiAgKgotICoJRklYTUU6IE1XRE1BIHRpbWluZ3MKKyAqCVByb2dyYW0gdGhlIEFMaSByZWdpc3RlcnMgZm9yIERNQSBtb2RlLgogICovCiAKIHN0YXRpYyB2b2lkIGFsaV9zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKQEAgLTU4NSw3ICs1ODMsNyBAQAogCSAgICAgICAgCXBwaVswXSA9ICZpbmZvXzIwX3VkbWE7CiAJfQogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFsaV9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhbGlfc2h0LCBOVUxMLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggNTY3ZjNmNy4uZDk1ZWNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAl9CiAKIAkvKiBBbmQgZmlyZSBpdCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhbWRfc2h0LCBocHJpdik7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFtZF9zaHQsIGhwcml2LCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCmluZGV4IGQzMzJjZmQuLjRkMDY2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCiAJQlVHX09OKHBwaVswXSA9PSBOVUxMKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhcnRvcF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhcnRvcF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXJ0b3BfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdDkxLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYwppbmRleCA0MWM5NGIxLi4zNzZkZDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYwpAQCAtMTUzLDggKzE1Myw4IEBACiAJLyogQ29tcHV0ZSBBVEEgdGltaW5nIGFuZCBzZXQgaXQgdG8gU01DICovCiAJcmV0ID0gYXRhX3RpbWluZ19jb21wdXRlKGFkZXYsIGFkZXYtPnBpb19tb2RlLCAmdGltaW5nLCAxMDAwLCAwKTsKIAlpZiAocmV0KSB7Ci0JCWRldl93YXJuKGFwLT5kZXYsICJGYWlsZWQgdG8gY29tcHV0ZSBBVEEgdGltaW5nICVkLCBcCi0JCQkJc2V0IFBJT18wIHRpbWluZ1xuIiwgcmV0KTsKKwkJZGV2X3dhcm4oYXAtPmRldiwgIkZhaWxlZCB0byBjb21wdXRlIEFUQSB0aW1pbmcgJWQsICIKKwkJCSAic2V0IFBJT18wIHRpbWluZ1xuIiwgcmV0KTsKIAkJc2V0X3NtY190aW1pbmcoYXAtPmRldiwgaW5mbywgJmluaXRpYWxfdGltaW5nKTsKIAl9IGVsc2UgewogCQlzZXRfc21jX3RpbWluZyhhcC0+ZGV2LCBpbmZvLCAmdGltaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IGFlNDQ1NGQuLmNiYWYyZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBwYXRhX2F0aWl4cC5jIAktIEFUSSBQQVRBIGZvciBuZXcgQVRBIGxheWVyCiAgKgkJCSAgKEMpIDIwMDUgUmVkIEhhdCBJbmMKLSAqCQkJICAoQykgMjAwOSBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKgkJCSAgKEMpIDIwMDktMjAxMCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogQmFzZWQgb24KICAqCkBAIC00Niw2ICs0Niw4IEBACiAJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOwogfQogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGF0aWl4cF9sb2NrKTsKKwogLyoqCiAgKglhdGlpeHBfc2V0X3Bpb190aW1pbmcJLQlzZXQgaW5pdGlhbCBQSU8gbW9kZSBkYXRhCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTg4LDcgKzkwLDEwIEBACiAKIHN0YXRpYyB2b2lkIGF0aWl4cF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogCWF0aWl4cF9zZXRfcGlvX3RpbWluZyhhcCwgYWRldiwgYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTEwOCw2ICsxMTMsOSBAQAogCWludCBkbWEgPSBhZGV2LT5kbWFfbW9kZTsKIAlpbnQgZG4gPSAyICogYXAtPnBvcnRfbm8gKyBhZGV2LT5kZXZubzsKIAlpbnQgd2FudGVkX3BpbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoYWRldi0+ZG1hX21vZGUgPj0gWEZFUl9VRE1BXzApIHsKIAkJdTE2IHVkbWFfbW9kZV9kYXRhOwpAQCAtMTQ1LDYgKzE1Myw3IEBACiAKIAlpZiAoYWRldi0+cGlvX21vZGUgIT0gd2FudGVkX3BpbykKIAkJYXRpaXhwX3NldF9waW9fdGltaW5nKGFwLCBhZGV2LCB3YW50ZWRfcGlvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTIzNyw3ICsyNDYsOCBAQAogCQlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhdGlpeHBfZW5hYmxlX2JpdHNbaV0pKQogCQkJcHBpW2ldID0gJmF0YV9kdW1teV9wb3J0X2luZm87CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmYXRpaXhwX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmF0aWl4cF9zaHQsIE5VTEwsCisJCQkJCQlBVEFfSE9TVF9QQVJBTExFTF9TQ0FOKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aWl4cFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKaW5kZXggNWFjZjlmYS4uNmNkNWQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCWNtZDY0MF9oYXJkd2FyZV9pbml0KHBkZXYpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0MF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjbWQ2NDBfc2h0LCBOVUxMLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggMGVmYjFmNS4uNGM4MWE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC0yLDYgKzIsNyBAQAogICogcGF0YV9jbWQ2NHguYyAJLSBDTUQ2NHggUEFUQSBmb3IgbmV3IEFUQSBsYXllcgogICoJCQkgIChDKSAyMDA1IFJlZCBIYXQgSW5jCiAgKgkJCSAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KKyAqCQkJICAoQykgMjAwOS0yMDEwIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBCYXNlZCB1cG9uCiAgKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMJCVZlcnNpb24gMS4zMAlTZXB0IDEwLCAyMDAyCkBAIC0zOSwxMSArNDAsNyBAQAogCiBlbnVtIHsKIAlDRlIgCQk9IDB4NTAsCi0JCUNGUl9JTlRSX0NIMCAgPSAweDAyLAotCUNOVFJMIAkJPSAweDUxLAotCQlDTlRSTF9ESVNfUkEwID0gMHg0MCwKLQkJQ05UUkxfRElTX1JBMSA9IDB4ODAsCi0JCUNOVFJMX0VOQV8yTkQgPSAweDA4LAorCQlDRlJfSU5UUl9DSDAgID0gMHgwNCwKIAlDTURUSU0gCQk9IDB4NTIsCiAJQVJUVElNMCAJPSAweDUzLAogCURSV1RJTTAgCT0gMHg1NCwKQEAgLTUzLDkgKzUwLDYgQEAKIAkJQVJUVElNMjNfRElTX1JBMiAgPSAweDA0LAogCQlBUlRUSU0yM19ESVNfUkEzICA9IDB4MDgsCiAJCUFSVFRJTTIzX0lOVFJfQ0gxID0gMHgxMCwKLQlBUlRUSU0yIAk9IDB4NTcsCi0JQVJUVElNMyAJPSAweDU3LAotCURSV1RJTTIzCT0gMHg1OCwKIAlEUldUSU0yIAk9IDB4NTgsCiAJQlJTVCAJCT0gMHg1OSwKIAlEUldUSU0zIAk9IDB4NWIsCkBAIC02MywxNCArNTcsMTEgQEAKIAlNUkRNT0RFCQk9IDB4NzEsCiAJCU1SRE1PREVfSU5UUl9DSDAgPSAweDA0LAogCQlNUkRNT0RFX0lOVFJfQ0gxID0gMHgwOCwKLQkJTVJETU9ERV9CTEtfQ0gwICA9IDB4MTAsCi0JCU1SRE1PREVfQkxLX0NIMQkgPSAweDIwLAogCUJNSURFU1IwCT0gMHg3MiwKIAlVRElERVRDUjAJPSAweDczLAogCURUUFIwCQk9IDB4NzQsCiAJQk1JREVDUjEJPSAweDc4LAogCUJNSURFQ1NSCT0gMHg3OSwKLQlCTUlERVNSMQk9IDB4N0EsCiAJVURJREVUQ1IxCT0gMHg3QiwKIAlEVFBSMQkJPSAweDdDCiB9OwpAQCAtMTMwLDggKzEyMSwxNCBAQAogCiAJCWlmIChwYWlyKSB7CiAJCQlzdHJ1Y3QgYXRhX3RpbWluZyB0cDsKKwogCQkJYXRhX3RpbWluZ19jb21wdXRlKHBhaXIsIHBhaXItPnBpb19tb2RlLCAmdHAsIFQsIDApOwogCQkJYXRhX3RpbWluZ19tZXJnZSgmdCwgJnRwLCAmdCwgQVRBX1RJTUlOR19TRVRVUCk7CisJCQlpZiAocGFpci0+ZG1hX21vZGUpIHsKKwkJCQlhdGFfdGltaW5nX2NvbXB1dGUocGFpciwgcGFpci0+ZG1hX21vZGUsCisJCQkJCQkmdHAsIFQsIDApOworCQkJCWF0YV90aW1pbmdfbWVyZ2UoJnRwLCAmdCwgJnQsIEFUQV9USU1JTkdfU0VUVVApOworCQkJfQogCQl9CiAJfQogCkBAIC0xNDcsNyArMTQ0LDkgQEAKIAkvKiBOb3cgY29udmVydCB0aGUgY2xvY2tzIGludG8gdmFsdWVzIHdlIGNhbiBhY3R1YWxseSBzdHVmZiBpbnRvCiAJICAgdGhlIGNoaXAgKi8KIAotCWlmICh0LnJlY292ZXIgPiAxKQorCWlmICh0LnJlY292ZXIgPT0gMTYpCisJCXQucmVjb3ZlciA9IDA7CisJZWxzZSBpZiAodC5yZWNvdmVyID4gMSkKIAkJdC5yZWNvdmVyLS07CiAJZWxzZQogCQl0LnJlY292ZXIgPSAxNTsKQEAgLTI0NSw3ICsyNDQsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAl1OCBkbWFfaW50cjsKIAlpbnQgZG1hX21hc2sgPSBhcC0+cG9ydF9ubyA/IEFSVFRJTTIzX0lOVFJfQ0gxIDogQ0ZSX0lOVFJfQ0gwOwotCWludCBkbWFfcmVnID0gYXAtPnBvcnRfbm8gPyBBUlRUSU0yIDogQ0ZSOworCWludCBkbWFfcmVnID0gYXAtPnBvcnRfbm8gPyBBUlRUSU0yMyA6IENGUjsKIAogCWF0YV9ibWRtYV9zdG9wKHFjKTsKIApAQCAtMzY4LDcgKzM2Nyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVESURFVENSMCwgMHhGMCk7CiAjZW5kaWYKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjbWQ2NHhfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY21kNjR4X3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IGM5NzRiMDUuLjczOGFkMmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlwcGlbMV0gPSAmaW5mb19wYWxtYXhfc2Vjb25kYXJ5OwogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY3M1NTMwX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNzNTUzMF9zaHQsIE5VTEwsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwppbmRleCA3MWNlZjlhLi5hMDJlNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RhdGljIHZvaWQgY3M1NTM1X3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0YXRpYyBjb25zdCB1MTYgcGlvX3RpbWluZ3NbNV0gPSB7Ci0JCTB4RjdGNCwgMHg1M0YzLCAweDEzRjEsIDB4NTEzMSwgMHgxMTMxCisJCTB4RjdGNCwgMHhGMTczLCAweDgxNDEsIDB4NTEzMSwgMHgxMTMxCiAJfTsKIAlzdGF0aWMgY29uc3QgdTE2IHBpb19jbWRfdGltaW5nc1s1XSA9IHsKIAkJMHhGN0Y0LCAweDUzRjMsIDB4MTNGMSwgMHg1MTMxLCAweDExMzEKQEAgLTE5OCw3ICsxOTgsNyBAQAogCXJkbXNyKEFUQUNfQ0gwRDFfUElPLCB0aW1pbmdzLCBkdW1teSk7CiAJaWYgKENTNTUzNV9CQURfUElPKHRpbWluZ3MpKQogCQl3cm1zcihBVEFDX0NIMEQxX1BJTywgMHhGN0Y0RjdGNFVMLCAwKTsKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZjczU1MzVfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZjczU1MzVfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNzNTUzNVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKaW5kZXggZmZlZTM5NzguLjkxNGFlMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNl9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNl9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3M1NTM2W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCmluZGV4IDhmYjA0MGIuLjBmY2MwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCkBAIC02MiwxNCArNjIsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAotCXRpbWVfMTYgPSBjbGFtcF92YWwodC5yZWNvdmVyLCAwLCAxNSkgfCAoY2xhbXBfdmFsKHQuYWN0aXZlLCAwLCAxNSkgPDwgNCk7Ci0JdGltZV84ID0gY2xhbXBfdmFsKHQuYWN0OGIsIDAsIDE1KSB8IChjbGFtcF92YWwodC5yZWM4YiwgMCwgMTUpIDw8IDQpOworCXRpbWVfMTYgPSBjbGFtcF92YWwodC5yZWNvdmVyIC0gMSwgMCwgMTUpIHwKKwkJICAoY2xhbXBfdmFsKHQuYWN0aXZlIC0gMSwgMCwgMTUpIDw8IDQpOworCXRpbWVfOCA9IGNsYW1wX3ZhbCh0LmFjdDhiIC0gMSwgMCwgMTUpIHwKKwkJIChjbGFtcF92YWwodC5yZWM4YiAtIDEsIDAsIDE1KSA8PCA0KTsKIAogCWlmIChhZGV2LT5kZXZubyA9PSAwKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBDWTgyX0lERV9BRERSU0VUVVAsICZhZGRyKTsKIAogCQlhZGRyICY9IH4weDBGOwkvKiBNYXNrIGJpdHMgKi8KLQkJYWRkciB8PSBjbGFtcF92YWwodC5zZXR1cCwgMCwgMTUpOworCQlhZGRyIHw9IGNsYW1wX3ZhbCh0LnNldHVwIC0gMSwgMCwgMTUpOwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCBhZGRyKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIENZODJfSURFX01BU1RFUl9JT1IsIHRpbWVfMTYpOwpAQCAtNzksNyArODEsNyBAQAogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCAmYWRkcik7CiAKIAkJYWRkciAmPSB+MHhGMDsJLyogTWFzayBiaXRzICovCi0JCWFkZHIgfD0gKGNsYW1wX3ZhbCh0LnNldHVwLCAwLCAxNSkgPDwgNCk7CisJCWFkZHIgfD0gKGNsYW1wX3ZhbCh0LnNldHVwIC0gMSwgMCwgMTUpIDw8IDQpOwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCBhZGRyKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIENZODJfSURFX1NMQVZFX0lPUiwgdGltZV8xNik7CkBAIC0xMzYsNyArMTM4LDcgQEAKIAlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pICE9IDEpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmN5ODJjNjkzX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmN5ODJjNjkzX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeTgyYzY5M1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBiMmU3MWU2Li4zYmFjMGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMiw3ICsyLDcgQEAKICAqICAgIHBhdGFfZWZhci5jIC0gRUZBUiBQSUlYIGNsb25lIGNvbnRyb2xsZXIgZHJpdmVyCiAgKgogICoJKEMpIDIwMDUgUmVkIEhhdAotICoJKEMpIDIwMDkgQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICoJKEMpIDIwMDktMjAxMCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogICAgU29tZSBwYXJ0cyBiYXNlZCBvbiBhdGFfcGlpeC5jIGJ5IEplZmYgR2FyemlrIGFuZCBvdGhlcnMuCiAgKgpAQCAtNjgsNiArNjgsOCBAQAogCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKIH0KIAorc3RhdGljIERFRklORV9TUElOTE9DSyhlZmFyX2xvY2spOworCiAvKioKICAqCWVmYXJfc2V0X3Bpb21vZGUgLSBJbml0aWFsaXplIGhvc3QgY29udHJvbGxlciBQQVRBIFBJTyB0aW1pbmdzCiAgKglAYXA6IFBvcnQgd2hvc2UgdGltaW5ncyB3ZSBhcmUgY29uZmlndXJpbmcKQEAgLTg0LDcgKzg2LDkgQEAKIAl1bnNpZ25lZCBpbnQgcGlvCT0gYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXVuc2lnbmVkIGludCBpZGV0bV9wb3J0PSBhcC0+cG9ydF9ubyA/IDB4NDIgOiAweDQwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGlkZXRtX2RhdGE7CisJdTggdWRtYV9lbmFibGU7CiAJaW50IGNvbnRyb2wgPSAwOwogCiAJLyoKQEAgLTEwNyw2ICsxMTEsOCBAQAogCWlmIChhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkKIAkJY29udHJvbCB8PSA0OwkvKiBQUEUgKi8KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlZmFyX2xvY2ssIGZsYWdzKTsKKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaWRldG1fcG9ydCwgJmlkZXRtX2RhdGEpOwogCiAJLyogU2V0IFBQRSwgSUUsIGFuZCBUSU1FIGFzIGFwcHJvcHJpYXRlICovCkBAIC0xMzEsNiArMTM3LDExIEBACiAKIAlpZGV0bV9kYXRhIHw9IDB4NDAwMDsJLyogRW5zdXJlIFNJVFJFIGlzIHNldCAqLwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGlkZXRtX3BvcnQsIGlkZXRtX2RhdGEpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCAmdWRtYV9lbmFibGUpOworCXVkbWFfZW5hYmxlICY9IH4oMSA8PCAoMiAqIGFwLT5wb3J0X25vICsgYWRldi0+ZGV2bm8pKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCB1ZG1hX2VuYWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZhcl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTUxLDYgKzE2Miw3IEBACiAJdTE2IG1hc3Rlcl9kYXRhOwogCXU4IHNwZWVkCQk9IGFkZXYtPmRtYV9tb2RlOwogCWludCBkZXZpZAkJPSBhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHVkbWFfZW5hYmxlOwogCiAJc3RhdGljIGNvbnN0CSAvKiBJU1AgIFJUQyAqLwpAQCAtMTYwLDYgKzE3Miw4IEBACiAJCQkgICAgeyAyLCAxIH0sCiAJCQkgICAgeyAyLCAzIH0sIH07CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWZhcl9sb2NrLCBmbGFncyk7CisKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1hc3Rlcl9wb3J0LCAmbWFzdGVyX2RhdGEpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgJnVkbWFfZW5hYmxlKTsKIApAQCAtMjE3LDYgKzIzMSw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1hc3Rlcl9wb3J0LCBtYXN0ZXJfZGF0YSk7CiAJfQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDgsIHVkbWFfZW5hYmxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZmFyX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZWZhcl9zaHQgPSB7CkBAIC0yNTYsMTMgKzI3MSwxNCBAQAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmVmYXJfb3BzLAogCX07Ci0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sICZpbmZvIH07CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmVmYXJfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmZWZhcl9zaHQsIE5VTEwsCisJCQkJCUFUQV9IT1NUX1BBUkFMTEVMX1NDQU4pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZhcl9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwppbmRleCAwYmQ0OGU4Li5hZjQ5YmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKQEAgLTExLDkgKzExLDcgQEAKICAqCiAgKgogICogVE9ETwotICoJTWF5YmUgUExMIG1vZGUKLSAqCUxvb2sgaW50byBlbmdpbmUgcmVzZXQgb24gdGltZW91dCBlcnJvcnMuIFNob3VsZCBub3QgYmUKLSAqCQlyZXF1aXJlZC4KKyAqCUxvb2sgaW50byBlbmdpbmUgcmVzZXQgb24gdGltZW91dCBlcnJvcnMuIFNob3VsZCBub3QgYmUgcmVxdWlyZWQuCiAgKi8KIAogCkBAIC0yNyw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0MzY2IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuOCIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9tb2RlOwpAQCAtMjA3LDE3ICsyMDUsOCBAQAogewogCXN0cnVjdCBocHRfY2xvY2sgKmNsb2NrcyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQl1MzIgYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOworCXUzMiBhZGRyID0gMHg0MCArIDQgKiBhZGV2LT5kZXZubzsKIAl1MzIgbWFzaywgcmVnOwotCXU4IGZhc3Q7Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlpZiAoZmFzdCAmIDB4ODApIHsKLQkJZmFzdCAmPSB+MHg4MDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKLQl9CiAKIAkvKiBkZXRlcm1pbmUgdGltaW5nIG1hc2sgYW5kIGZpbmQgbWF0Y2hpbmcgY2xvY2sgZW50cnkgKi8KIAlpZiAobW9kZSA8IFhGRVJfTVdfRE1BXzApCkBAIC0yNDAsOSArMjI5LDkgQEAKIAkgKiBvbi1jaGlwIFBJTyBGSUZPL2J1ZmZlciAoYW5kIFBJTyBNU1QgbW9kZSBhcyB3ZWxsKSB0byBhdm9pZAogCSAqIHByb2JsZW1zIGhhbmRsaW5nIEkvTyBlcnJvcnMgbGF0ZXIuCiAJICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkciwgJnJlZyk7CiAJcmVnID0gKChyZWcgJiB+bWFzaykgfCAoY2xvY2tzLT50aW1pbmcgJiBtYXNrKSkgJiB+MHhjMDAwMDAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkciwgcmVnKTsKIH0KIAogLyoqCkBAIC0zNzIsNyArMzYxLDcgQEAKIAkJCWJyZWFrOwogCX0KIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmhwdDM2eF9zaHQsIGhwcml2KTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZocHQzNnhfc2h0LCBocHJpdiwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IDQyMjRjZmMuLjg4MzkzMDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzN3giCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMTQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMTUiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfc3BlZWQ7CkBAIC0zOSwyNSArMzksMjQgQEAKIAogLyoga2V5IGZvciBidXMgY2xvY2sgdGltaW5ncwogICogYml0Ci0gKiAwOjMgICAgZGF0YV9oaWdoX3RpbWUuIGluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcKLSAqICAgICAgICBETUEuIGN5Y2xlcyA9IHZhbHVlICsgMQotICogNDo4ICAgIGRhdGFfbG93X3RpbWUuIGFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XCi0gKiAgICAgICAgRE1BLiBjeWNsZXMgPSB2YWx1ZSArIDEKLSAqIDk6MTIgICBjbWRfaGlnaF90aW1lLiBpbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKKyAqIDA6MyAgICBkYXRhX2hpZ2hfdGltZS4gSW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVyBETUEuCisgKiAgICAgICAgY3ljbGVzID0gdmFsdWUgKyAxCisgKiA0OjggICAgZGF0YV9sb3dfdGltZS4gQWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcgRE1BLgorICogICAgICAgIGN5Y2xlcyA9IHZhbHVlICsgMQorICogOToxMiAgIGNtZF9oaWdoX3RpbWUuIEluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZHVyaW5nIHRhc2sgZmlsZQogICogICAgICAgIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDEzOjE3ICBjbWRfbG93X3RpbWUuIGFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKKyAqIDEzOjE3ICBjbWRfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKICAqICAgICAgICByZWdpc3RlciBhY2Nlc3MuCi0gKiAxODoyMSAgdWRtYV9jeWNsZV90aW1lLiBjbG9jayBmcmVxIGFuZCBjbG9jayBjeWNsZXMgZm9yIFVETUEgeGZlci4KLSAqICAgICAgICBkdXJpbmcgdGFzayBmaWxlIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDIyOjI0ICBwcmVfaGlnaF90aW1lLiB0aW1lIHRvIGluaXRpYWxpemUgMXN0IGN5Y2xlIGZvciBQSU8gYW5kIE1XIERNQQotICogICAgICAgIHhmZXIuCi0gKiAyNToyNyAgY21kX3ByZV9oaWdoX3RpbWUuIHRpbWUgdG8gaW5pdGlhbGl6ZSAxc3QgUElPIGN5Y2xlIGZvciB0YXNrCisgKiAxODoyMCAgdWRtYV9jeWNsZV90aW1lLiBDbG9jayBjeWNsZXMgZm9yIFVETUEgeGZlci4KKyAqIDIxICAgICBDTEsgZnJlcXVlbmN5IGZvciBVRE1BOiAwPUFUQSBjbG9jaywgMT1kdWFsIEFUQSBjbG9jay4KKyAqIDIyOjI0ICBwcmVfaGlnaF90aW1lLiBUaW1lIHRvIGluaXRpYWxpemUgMXN0IGN5Y2xlIGZvciBQSU8gYW5kIE1XIERNQSB4ZmVyLgorICogMjU6MjcgIGNtZF9wcmVfaGlnaF90aW1lLiBUaW1lIHRvIGluaXRpYWxpemUgMXN0IFBJTyBjeWNsZSBmb3IgdGFzayBmaWxlCiAgKiAgICAgICAgcmVnaXN0ZXIgYWNjZXNzLgotICogMjggICAgIFVETUEgZW5hYmxlCi0gKiAyOSAgICAgRE1BIGVuYWJsZQotICogMzAgICAgIFBJT19NU1QgZW5hYmxlLiBpZiBzZXQsIHRoZSBjaGlwIGlzIGluIGJ1cyBtYXN0ZXIgbW9kZSBkdXJpbmcKLSAqICAgICAgICBQSU8uCi0gKiAzMSAgICAgRklGTyBlbmFibGUuCisgKiAyOCAgICAgVURNQSBlbmFibGUuCisgKiAyOSAgICAgRE1BICBlbmFibGUuCisgKiAzMCAgICAgUElPX01TVCBlbmFibGUuIElmIHNldCwgdGhlIGNoaXAgaXMgaW4gYnVzIG1hc3RlciBtb2RlIGR1cmluZworICogICAgICAgIFBJTyB4ZmVyLgorICogMzEgICAgIEZJRk8gZW5hYmxlLiBPbmx5IGZvciBQSU8uCiAgKi8KIAogc3RhdGljIHN0cnVjdCBocHRfY2xvY2sgaHB0Mzd4X3RpbWluZ3NfMzNbXSA9IHsKQEAgLTM4NCw2ICszODMsMzcgQEAKIAlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwdDM3MF9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwKKwkJCSAgICB1OCBtb2RlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKwl1MzIgYWRkcjEsIGFkZHIyOworCXUzMiByZWcsIHRpbWluZywgbWFzazsKKwl1OCBmYXN0OworCisJYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7CisJYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOworCisJLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7CisJZmFzdCAmPSB+MHgwMjsKKwlmYXN0IHw9IDB4MDE7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKKworCS8qIERldGVybWluZSB0aW1pbmcgbWFzayBhbmQgZmluZCBtYXRjaGluZyBtb2RlIGVudHJ5ICovCisJaWYgKG1vZGUgPCBYRkVSX01XX0RNQV8wKQorCQltYXNrID0gMHhjZmMzZmZmZjsKKwllbHNlIGlmIChtb2RlIDwgWEZFUl9VRE1BXzApCisJCW1hc2sgPSAweDMxYzAwMWZmOworCWVsc2UKKwkJbWFzayA9IDB4MzAzYzAwMDA7CisKKwl0aW1pbmcgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBtb2RlKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7CisJcmVnID0gKHJlZyAmIH5tYXNrKSB8ICh0aW1pbmcgJiBtYXNrKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcpOworfQogLyoqCiAgKglocHQzNzBfc2V0X3Bpb21vZGUJCS0JUElPIHNldHVwCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTM5NCwyNiArNDI0LDcgQEAKIAogc3RhdGljIHZvaWQgaHB0MzcwX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQl1MzIgYWRkcjEsIGFkZHIyOwotCXUzMiByZWc7Ci0JdTMyIG1vZGU7Ci0JdTggZmFzdDsKLQotCWFkZHIxID0gMHg0MCArIDQgKiAoYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm8pOwotCWFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKLQotCS8qIEZhc3QgaW50ZXJydXB0IHByZWRpY3Rpb24gZGlzYWJsZSwgaG9sZCBvZmYgaW50ZXJydXB0IGRpc2FibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgJmZhc3QpOwotCWZhc3QgJj0gfjB4MDI7Ci0JZmFzdCB8PSAweDAxOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOwotCW1vZGUgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBhZGV2LT5waW9fbW9kZSk7Ci0JbW9kZSAmPSAweENGQzNGRkZGOwkvKiBMZWF2ZSBETUEgYml0cyBhbG9uZSAqLwotCXJlZyAmPSB+MHhDRkMzRkZGRjsJLyogU3RyaXAgdGltaW5nIGJpdHMgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcgfCBtb2RlKTsKKwlocHQzNzBfc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPnBpb19tb2RlKTsKIH0KIAogLyoqCkBAIC00MjEsMzMgKzQzMiwxMiBAQAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCiAgKglAYWRldjogRGV2aWNlIGJlaW5nIGNvbmZpZ3VyZWQKICAqCi0gKglTZXQgdXAgdGhlIGNoYW5uZWwgZm9yIE1XRE1BIG9yIFVETUEgbW9kZXMuIE11Y2ggdGhlIHNhbWUgYXMgd2l0aAotICoJUElPLCBsb2FkIHRoZSBtb2RlIG51bWJlciBhbmQgdGhlbiBzZXQgTVdETUEgb3IgVURNQSBmbGFnLgorICoJU2V0IHVwIHRoZSBjaGFubmVsIGZvciBNV0RNQSBvciBVRE1BIG1vZGVzLgogICovCiAKIHN0YXRpYyB2b2lkIGhwdDM3MF9zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTMyIGFkZHIxLCBhZGRyMjsKLQl1MzIgcmVnLCBtb2RlLCBtYXNrOwotCXU4IGZhc3Q7Ci0KLQlhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQlhZGRyMiA9IDB4NTEgKyA0ICogYXAtPnBvcnRfbm87Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlmYXN0ICY9IH4weDAyOwotCWZhc3QgfD0gMHgwMTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JbWFzayA9IGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzAgPyAweDMxQzAwMUZGIDogMHgzMDNDMDAwMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7Ci0JbW9kZSA9IGhwdDM3eF9maW5kX21vZGUoYXAsIGFkZXYtPmRtYV9tb2RlKTsKLQltb2RlICY9IG1hc2s7Ci0JcmVnICY9IH5tYXNrOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyB8IG1vZGUpOworCWhwdDM3MF9zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+ZG1hX21vZGUpOwogfQogCiAvKioKQEAgLTQ2MSwyNCArNDUxLDI1IEBACiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTggZG1hX3N0YXQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIDIpOwotCXU4IGRtYV9jbWQ7CiAJdm9pZCBfX2lvbWVtICpibWRtYSA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKwl1OCBkbWFfc3RhdCA9IGlvcmVhZDgoYm1kbWEgKyBBVEFfRE1BX1NUQVRVUyk7CisJdTggZG1hX2NtZDsKIAotCWlmIChkbWFfc3RhdCAmIDB4MDEpIHsKKwlpZiAoZG1hX3N0YXQgJiBBVEFfRE1BX0FDVElWRSkgewogCQl1ZGVsYXkoMjApOwotCQlkbWFfc3RhdCA9IGlvcmVhZDgoYm1kbWEgKyAyKTsKKwkJZG1hX3N0YXQgPSBpb3JlYWQ4KGJtZG1hICsgQVRBX0RNQV9TVEFUVVMpOwogCX0KLQlpZiAoZG1hX3N0YXQgJiAweDAxKSB7CisJaWYgKGRtYV9zdGF0ICYgQVRBX0RNQV9BQ1RJVkUpIHsKIAkJLyogQ2xlYXIgdGhlIGVuZ2luZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJCXVkZWxheSgxMCk7CiAJCS8qIFN0b3AgRE1BICovCi0JCWRtYV9jbWQgPSBpb3JlYWQ4KGJtZG1hICk7Ci0JCWlvd3JpdGU4KGRtYV9jbWQgJiAweEZFLCBibWRtYSk7CisJCWRtYV9jbWQgPSBpb3JlYWQ4KGJtZG1hICsgQVRBX0RNQV9DTUQpOworCQlpb3dyaXRlOChkbWFfY21kICYgfkFUQV9ETUFfU1RBUlQsIGJtZG1hICsgQVRBX0RNQV9DTUQpOwogCQkvKiBDbGVhciBFcnJvciAqLwotCQlkbWFfc3RhdCA9IGlvcmVhZDgoYm1kbWEgKyAyKTsKLQkJaW93cml0ZTgoZG1hX3N0YXQgfCAweDA2ICwgYm1kbWEgKyAyKTsKKwkJZG1hX3N0YXQgPSBpb3JlYWQ4KGJtZG1hICsgQVRBX0RNQV9TVEFUVVMpOworCQlpb3dyaXRlOChkbWFfc3RhdCB8IEFUQV9ETUFfSU5UUiB8IEFUQV9ETUFfRVJSLAorCQkJIGJtZG1hICsgQVRBX0RNQV9TVEFUVVMpOwogCQkvKiBDbGVhciB0aGUgZW5naW5lICovCiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDUwICsgNCAqIGFwLT5wb3J0X25vLCAweDM3KTsKIAkJdWRlbGF5KDEwKTsKQEAgLTQ4Niw2ICs0NzcsMzcgQEAKIAlhdGFfYm1kbWFfc3RvcChxYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwdDM3Ml9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwKKwkJCSAgICB1OCBtb2RlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKwl1MzIgYWRkcjEsIGFkZHIyOworCXUzMiByZWcsIHRpbWluZywgbWFzazsKKwl1OCBmYXN0OworCisJYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7CisJYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOworCisJLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7CisJZmFzdCAmPSB+MHgwNzsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOworCisJLyogRGV0ZXJtaW5lIHRpbWluZyBtYXNrIGFuZCBmaW5kIG1hdGNoaW5nIG1vZGUgZW50cnkgKi8KKwlpZiAobW9kZSA8IFhGRVJfTVdfRE1BXzApCisJCW1hc2sgPSAweGNmYzNmZmZmOworCWVsc2UgaWYgKG1vZGUgPCBYRkVSX1VETUFfMCkKKwkJbWFzayA9IDB4MzFjMDAxZmY7CisJZWxzZQorCQltYXNrID0gMHgzMDNjMDAwMDsKKworCXRpbWluZyA9IGhwdDM3eF9maW5kX21vZGUoYXAsIG1vZGUpOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKKwlyZWcgPSAocmVnICYgfm1hc2spIHwgKHRpbWluZyAmIG1hc2spOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyk7Cit9CisKIC8qKgogICoJaHB0MzcyX3NldF9waW9tb2RlCQktCVBJTyBzZXR1cAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCkBAIC00OTYsMjcgKzUxOCw3IEBACiAKIHN0YXRpYyB2b2lkIGhwdDM3Ml9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTMyIGFkZHIxLCBhZGRyMjsKLQl1MzIgcmVnOwotCXUzMiBtb2RlOwotCXU4IGZhc3Q7Ci0KLQlhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQlhZGRyMiA9IDB4NTEgKyA0ICogYXAtPnBvcnRfbm87Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlmYXN0ICY9IH4weDA3OwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOwotCW1vZGUgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBhZGV2LT5waW9fbW9kZSk7Ci0KLQlwcmludGsoIkZpbmQgbW9kZSBmb3IgJWQgcmVwb3J0cyAlWFxuIiwgYWRldi0+cGlvX21vZGUsIG1vZGUpOwotCW1vZGUgJj0gMHhDRkMzRkZGRjsJLyogTGVhdmUgRE1BIGJpdHMgYWxvbmUgKi8KLQlyZWcgJj0gfjB4Q0ZDM0ZGRkY7CS8qIFN0cmlwIHRpbWluZyBiaXRzICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnIHwgbW9kZSk7CisJaHB0MzcyX3NldF9tb2RlKGFwLCBhZGV2LCBhZGV2LT5waW9fbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTI0LDMzICs1MjYsMTIgQEAKICAqCUBhcDogQVRBIGludGVyZmFjZQogICoJQGFkZXY6IERldmljZSBiZWluZyBjb25maWd1cmVkCiAgKgotICoJU2V0IHVwIHRoZSBjaGFubmVsIGZvciBNV0RNQSBvciBVRE1BIG1vZGVzLiBNdWNoIHRoZSBzYW1lIGFzIHdpdGgKLSAqCVBJTywgbG9hZCB0aGUgbW9kZSBudW1iZXIgYW5kIHRoZW4gc2V0IE1XRE1BIG9yIFVETUEgZmxhZy4KKyAqCVNldCB1cCB0aGUgY2hhbm5lbCBmb3IgTVdETUEgb3IgVURNQSBtb2Rlcy4KICAqLwogCiBzdGF0aWMgdm9pZCBocHQzNzJfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSwgYWRkcjI7Ci0JdTMyIHJlZywgbW9kZSwgbWFzazsKLQl1OCBmYXN0OwotCi0JYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JZmFzdCAmPSB+MHgwNzsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JbWFzayA9IGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzAgPyAweDMxQzAwMUZGIDogMHgzMDNDMDAwMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7Ci0JbW9kZSA9IGhwdDM3eF9maW5kX21vZGUoYXAsIGFkZXYtPmRtYV9tb2RlKTsKLQlwcmludGsoIkZpbmQgbW9kZSBmb3IgRE1BICVkIHJlcG9ydHMgJVhcbiIsIGFkZXYtPmRtYV9tb2RlLCBtb2RlKTsKLQltb2RlICY9IG1hc2s7Ci0JcmVnICY9IH5tYXNrOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyB8IG1vZGUpOworCWhwdDM3Ml9zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+ZG1hX21vZGUpOwogfQogCiAvKioKQEAgLTEwMDYsNyArOTg3LDcgQEAKIAl9CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmhwdDM3eF9zaHQsIHByaXZhdGVfZGF0YSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmaHB0Mzd4X3NodCwgcHJpdmF0ZV9kYXRhLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDM3eFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCBkZDI2YmM3Li4wMTQ1N2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy4xMCIKIAogZW51bSB7CiAJSFBUX1BDSV9GQVNUCT0JKDEgPDwgMzEpLApAQCAtNDUsMjUgKzQ1LDI0IEBACiAKIC8qIGtleSBmb3IgYnVzIGNsb2NrIHRpbWluZ3MKICAqIGJpdAotICogMDozICAgIGRhdGFfaGlnaF90aW1lLiBpbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XCi0gKiAgICAgICAgRE1BLiBjeWNsZXMgPSB2YWx1ZSArIDEKLSAqIDQ6OCAgICBkYXRhX2xvd190aW1lLiBhY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVwotICogICAgICAgIERNQS4gY3ljbGVzID0gdmFsdWUgKyAxCi0gKiA5OjEyICAgY21kX2hpZ2hfdGltZS4gaW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKiAwOjMgICAgZGF0YV9oaWdoX3RpbWUuIEluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcgRE1BLgorICogICAgICAgIGN5Y2xlcyA9IHZhbHVlICsgMQorICogNDo4ICAgIGRhdGFfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KKyAqICAgICAgICBjeWNsZXMgPSB2YWx1ZSArIDEKKyAqIDk6MTIgICBjbWRfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKICAqICAgICAgICByZWdpc3RlciBhY2Nlc3MuCi0gKiAxMzoxNyAgY21kX2xvd190aW1lLiBhY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKiAxMzoxNyAgY21kX2xvd190aW1lLiBBY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCiAgKiAgICAgICAgcmVnaXN0ZXIgYWNjZXNzLgotICogMTg6MjEgIHVkbWFfY3ljbGVfdGltZS4gY2xvY2sgZnJlcSBhbmQgY2xvY2sgY3ljbGVzIGZvciBVRE1BIHhmZXIuCi0gKiAgICAgICAgZHVyaW5nIHRhc2sgZmlsZSByZWdpc3RlciBhY2Nlc3MuCi0gKiAyMjoyNCAgcHJlX2hpZ2hfdGltZS4gdGltZSB0byBpbml0aWFsaXplIDFzdCBjeWNsZSBmb3IgUElPIGFuZCBNVyBETUEKLSAqICAgICAgICB4ZmVyLgotICogMjU6MjcgIGNtZF9wcmVfaGlnaF90aW1lLiB0aW1lIHRvIGluaXRpYWxpemUgMXN0IFBJTyBjeWNsZSBmb3IgdGFzaworICogMTg6MjAgIHVkbWFfY3ljbGVfdGltZS4gQ2xvY2sgY3ljbGVzIGZvciBVRE1BIHhmZXIuCisgKiAyMSAgICAgQ0xLIGZyZXF1ZW5jeSBmb3IgVURNQTogMD1BVEEgY2xvY2ssIDE9ZHVhbCBBVEEgY2xvY2suCisgKiAyMjoyNCAgcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIDFzdCBjeWNsZSBmb3IgUElPIGFuZCBNVyBETUEgeGZlci4KKyAqIDI1OjI3ICBjbWRfcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIDFzdCBQSU8gY3ljbGUgZm9yIHRhc2sgZmlsZQogICogICAgICAgIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDI4ICAgICBVRE1BIGVuYWJsZQotICogMjkgICAgIERNQSBlbmFibGUKLSAqIDMwICAgICBQSU9fTVNUIGVuYWJsZS4gaWYgc2V0LCB0aGUgY2hpcCBpcyBpbiBidXMgbWFzdGVyIG1vZGUgZHVyaW5nCi0gKiAgICAgICAgUElPLgotICogMzEgICAgIEZJRk8gZW5hYmxlLgorICogMjggICAgIFVETUEgZW5hYmxlLgorICogMjkgICAgIERNQSAgZW5hYmxlLgorICogMzAgICAgIFBJT19NU1QgZW5hYmxlLiBJZiBzZXQsIHRoZSBjaGlwIGlzIGluIGJ1cyBtYXN0ZXIgbW9kZSBkdXJpbmcKKyAqICAgICAgICBQSU8geGZlci4KKyAqIDMxICAgICBGSUZPIGVuYWJsZS4gT25seSBmb3IgUElPLgogICovCiAKIC8qIDY2TUh6IERQTEwgY2xvY2tzICovCkBAIC0xNjEsNiArMTYwLDM3IEBACiAJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCitzdGF0aWMgdm9pZCBocHQzeDJuX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LAorCQkJICAgICB1OCBtb2RlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKwl1MzIgYWRkcjEsIGFkZHIyOworCXUzMiByZWcsIHRpbWluZywgbWFzazsKKwl1OCBmYXN0OworCisJYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7CisJYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOworCisJLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7CisJZmFzdCAmPSB+MHgwNzsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOworCisJLyogRGV0ZXJtaW5lIHRpbWluZyBtYXNrIGFuZCBmaW5kIG1hdGNoaW5nIG1vZGUgZW50cnkgKi8KKwlpZiAobW9kZSA8IFhGRVJfTVdfRE1BXzApCisJCW1hc2sgPSAweGNmYzNmZmZmOworCWVsc2UgaWYgKG1vZGUgPCBYRkVSX1VETUFfMCkKKwkJbWFzayA9IDB4MzFjMDAxZmY7CisJZWxzZQorCQltYXNrID0gMHgzMDNjMDAwMDsKKworCXRpbWluZyA9IGhwdDN4Mm5fZmluZF9tb2RlKGFwLCBtb2RlKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7CisJcmVnID0gKHJlZyAmIH5tYXNrKSB8ICh0aW1pbmcgJiBtYXNrKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcpOworfQorCiAvKioKICAqCWhwdDN4Mm5fc2V0X3Bpb21vZGUJCS0JUElPIHNldHVwCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTE3MSwyNSArMjAxLDcgQEAKIAogc3RhdGljIHZvaWQgaHB0M3gybl9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTMyIGFkZHIxLCBhZGRyMjsKLQl1MzIgcmVnOwotCXUzMiBtb2RlOwotCXU4IGZhc3Q7Ci0KLQlhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQlhZGRyMiA9IDB4NTEgKyA0ICogYXAtPnBvcnRfbm87Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlmYXN0ICY9IH4weDA3OwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOwotCW1vZGUgPSBocHQzeDJuX2ZpbmRfbW9kZShhcCwgYWRldi0+cGlvX21vZGUpOwotCW1vZGUgJj0gMHhDRkMzRkZGRjsJLyogTGVhdmUgRE1BIGJpdHMgYWxvbmUgKi8KLQlyZWcgJj0gfjB4Q0ZDM0ZGRkY7CS8qIFN0cmlwIHRpbWluZyBiaXRzICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnIHwgbW9kZSk7CisJaHB0M3gybl9zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+cGlvX21vZGUpOwogfQogCiAvKioKQEAgLTE5NywzMiArMjA5LDEyIEBACiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKICAqCUBhZGV2OiBEZXZpY2UgYmVpbmcgY29uZmlndXJlZAogICoKLSAqCVNldCB1cCB0aGUgY2hhbm5lbCBmb3IgTVdETUEgb3IgVURNQSBtb2Rlcy4gTXVjaCB0aGUgc2FtZSBhcyB3aXRoCi0gKglQSU8sIGxvYWQgdGhlIG1vZGUgbnVtYmVyIGFuZCB0aGVuIHNldCBNV0RNQSBvciBVRE1BIGZsYWcuCisgKglTZXQgdXAgdGhlIGNoYW5uZWwgZm9yIE1XRE1BIG9yIFVETUEgbW9kZXMuCiAgKi8KIAogc3RhdGljIHZvaWQgaHB0M3gybl9zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTMyIGFkZHIxLCBhZGRyMjsKLQl1MzIgcmVnLCBtb2RlLCBtYXNrOwotCXU4IGZhc3Q7Ci0KLQlhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQlhZGRyMiA9IDB4NTEgKyA0ICogYXAtPnBvcnRfbm87Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlmYXN0ICY9IH4weDA3OwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7Ci0KLQltYXNrID0gYWRldi0+ZG1hX21vZGUgPCBYRkVSX1VETUFfMCA/IDB4MzFDMDAxRkYgOiAweDMwM0MwMDAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKLQltb2RlID0gaHB0M3gybl9maW5kX21vZGUoYXAsIGFkZXYtPmRtYV9tb2RlKTsKLQltb2RlICY9IG1hc2s7Ci0JcmVnICY9IH5tYXNrOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyB8IG1vZGUpOworCWhwdDN4Mm5fc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPmRtYV9tb2RlKTsKIH0KIAogLyoqCkBAIC01NDQsMTkgKzUzNiwxOSBAQAogCSAgICAgICBwY2lfbWh6KTsKIAkvKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzIHNvIHdlIHVzZQogCSAgIGl0IGRpcmVjdGx5ICovCi0JaWYgKHBjaV9taHogPiA2MCkgeworCWlmIChwY2lfbWh6ID4gNjApCiAJCWhwcml2ID0gKHZvaWQgKikoUENJNjYgfCBVU0VfRFBMTCk7Ci0JCS8qCi0JCSAqIE9uICBIUFQzNzFOLCBpZiBBVEEgY2xvY2sgaXMgNjYgTUh6IHdlIG11c3Qgc2V0IGJpdCAyIGluCi0JCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgotCQkgKiBOT1RFOiBUaGlzIHJlZ2lzdGVyIGlzIG9ubHkgd3JpdGVhYmxlIHZpYSBJL08gc3BhY2UuCi0JCSAqLwotCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9UVElfSFBUMzcxKQotCQkJb3V0YihpbmIoaW9iYXNlICsgMHg5YykgfCAweDA0LCBpb2Jhc2UgKyAweDljKTsKLQl9CisKKwkvKgorCSAqIE9uICBIUFQzNzFOLCBpZiBBVEEgY2xvY2sgaXMgNjYgTUh6IHdlIG11c3Qgc2V0IGJpdCAyIGluCisJICogdGhlIE1JU0MuIHJlZ2lzdGVyIHRvIHN0cmV0Y2ggdGhlIFVsdHJhRE1BIFRzcyB0aW1pbmcuCisJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IHdyaXRlYWJsZSB2aWEgSS9PIHNwYWNlLgorCSAqLworCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzEpCisJCW91dGIoaW5iKGlvYmFzZSArIDB4OWMpIHwgMHgwNCwgaW9iYXNlICsgMHg5Yyk7CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmhwdDN4Mm5fc2h0LCBocHJpdik7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmaHB0M3gybl9zaHQsIGhwcml2LCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDN4Mm5bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCmluZGV4IDhmMzMyNWFkYy4uZjk3MWYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZpdDgyMTNfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmaXQ4MjEzX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpdDgyMTNfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKaW5kZXggZWRjNWMxZi4uOWJkZTFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCkBAIC05MzIsNyArOTMyLDcgQEAKIAkJZWxzZQogCQkJcHBpWzBdID0gJmluZm9fc21hcnQ7CiAJfQotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZpdDgyMXhfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmaXQ4MjF4X3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggM2ExNDc0YS4uNTY1ZTAxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmptaWNyb25fc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmam1pY3Jvbl9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgam1pY3Jvbl9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDk1MGRhMzljLi5lOGNhMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYwpAQCAtMTQ3LDEzICsxNDcsMTMgQEAKIAlpZiAocGRldi0+ZGV2aWNlID09IDB4NjEwMSkKIAkJcHBpWzFdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BSENJKSB8fCBkZWZpbmVkKENPTkZJR19BSENJX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19TQVRBX0FIQ0kpIHx8IGRlZmluZWQoQ09ORklHX1NBVEFfQUhDSV9NT0RVTEUpCiAJaWYgKCFtYXJ2ZWxsX3BhdGFfYWN0aXZlKHBkZXYpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogUEFUQSBwb3J0IG5vdCBhY3RpdmUsIGRlZmVycmluZyB0byBBSENJIGRyaXZlci5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmbWFydmVsbF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZtYXJ2ZWxsX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYXJ2ZWxsX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKaW5kZXggZjBkNTJmNy4uOTRmOTc5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlhdGFfcGNpX2JtZG1hX2NsZWFyX3NpbXBsZXgocGRldik7CiAKIAkvKiBBbmQgbGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gdGhlIHdvcmsgKi8KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCAmbmV0Y2VsbF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sICZuZXRjZWxsX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjZWxsX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggY2E1M2ZhYy4uMjExMDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkucG9ydF9vcHMgPSAmbnM4NzQxMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJm5zODc0MTBfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZuczg3NDEwX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuczg3NDEwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCmluZGV4IDA2MWFhMWMuLjgzMDQzMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAogCW5zODc0MTVfZml4dXAocGRldik7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmbnM4NzQxNV9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZuczg3NDE1X3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuczg3NDE1X3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggOWE4Njg3ZGIuLjVmNmFiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZvbGRwaWl4X3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJm9sZHBpaXhfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9sZHBpaXhfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwppbmRleCA5OWVkZGRhLi4wMGM1YTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZvcHRpX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmb3B0aV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3B0aVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwppbmRleCA4Njg4NWE0Li43NmI3ZDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJaWYgKG9wdGlwbHVzX3dpdGhfdWRtYShkZXYpKQogCQlwcGlbMF0gPSAmaW5mb184MmM3MDBfdWRtYTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJm9wdGlkbWFfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZvcHRpZG1hX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcHRpZG1hW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwppbmRleCAxYjM5MmM5Li4zNjEwMzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogICoKICAqLwogIAotdm9pZCBwY21jaWFfOGJpdF9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdm9pZCBwY21jaWFfOGJpdF9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJaW50IGNvdW50OwogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYwppbmRleCAyZjNjOWJlLi45YWMwODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKQEAgLTIsNyArMiw3IEBACiAgKiBwYXRhX3BkYzIwMnh4X29sZC5jIAktIFByb21pc2UgUERDMjAyeHggUEFUQSBmb3IgbmV3IEFUQSBsYXllcgogICoJCQkgIChDKSAyMDA1IFJlZCBIYXQgSW5jCiAgKgkJCSAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqCQkJICAoQykgMjAwNywyMDA5IEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqCQkJICAoQykgMjAwNywyMDA5LDIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIEJhc2VkIGluIHBhcnQgb24gbGludXgvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCiAgKgpAQCAtMzUsNiArMzUsMTUgQEAKIAlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CiB9CiAKK3N0YXRpYyB2b2lkIHBkYzIwMnh4X2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCSAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJRFBSSU5USygiYXRhJXU6IGNtZCAweCVYXG4iLCBhcC0+cHJpbnRfaWQsIHRmLT5jb21tYW5kKTsKKworCWlvd3JpdGU4KHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJbmRlbGF5KDQwMCk7Cit9CisKIC8qKgogICoJcGRjMjAyeHhfY29uZmlndXJlX3Bpb21vZGUJLQlzZXQgY2hpcCBQSU8gdGltaW5nCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTI3MSw2ICsyODAsOCBAQAogCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJCT0gcGRjMjAyeHhfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHBkYzIwMnh4X3NldF9kbWFtb2RlLAorCisJLnNmZl9leGVjX2NvbW1hbmQJPSBwZGMyMDJ4eF9leGVjX2NvbW1hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjMjAyNnhfcG9ydF9vcHMgPSB7CkBAIC0yODQsNiArMjk1LDggQEAKIAkuZGV2X2NvbmZpZwkJPSBwZGMyMDI2eF9kZXZfY29uZmlnLAogCiAJLnBvcnRfc3RhcnQJCT0gcGRjMjAyNnhfcG9ydF9zdGFydCwKKworCS5zZmZfZXhlY19jb21tYW5kCT0gcGRjMjAyeHhfZXhlY19jb21tYW5kLAogfTsKIAogc3RhdGljIGludCBwZGMyMDJ4eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC0zMjQsNyArMzM3LDcgQEAKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZwZGMyMDJ4eF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnBkYzIwMnh4X3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGMyMDJ4eFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9waWNjb2xvLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYwppbmRleCBiZmUwMTgwLi45ODE2MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYwpAQCAtOTUsNyArOTUsNyBAQAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKIAkvKiBKdXN0IG9uZSBwb3J0IGZvciB0aGUgbW9tZW50ICovCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmdG9zaF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnRvc2hfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0YV90b3NoW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCmluZGV4IDRmZDI1ZTcuLmZjOTYwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZyYWRpc3lzX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJhZGlzeXNfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhZGlzeXNfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggMjkzMjk5OC4uNGE0NTRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcHJpbnRrX29uY2UoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCWlmIChyejEwMDBfZmlmb19kaXNhYmxlKHBkZXYpID09IDApCi0JCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZyejEwMDBfc2h0LCBOVUxMKTsKKwkJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJ6MTAwMF9zaHQsIE5VTEwsIDApOwogCiAJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBkaXNhYmxlIHJlYWQtYWhlYWQgb24gY2hpcHNldC4uXG4iKTsKIAkvKiBOb3Qgc2FmZSB0byB1c2Ugc28gc2tpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggM2JiZWQ4My4uZGZlY2M2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2MxMjAwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKaW5kZXggYmVhZWQxMi4uOTUyNGQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBwYXRhX3NlcnZlcndvcmtzLmMgCS0gU2VydmVyd29ya3MgUEFUQSBmb3IgbmV3IEFUQSBsYXllcgogICoJCQkgIChDKSAyMDA1IFJlZCBIYXQgSW5jCisgKgkJCSAgKEMpIDIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIGJhc2VkIHVwb24KICAqCkBAIC0yNTMsNyArMjU0LDcgQEAKIAlpZiAoc2VydmVyd29ya3NfaXNfY3NiKHBkZXYpKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NEEsICZjc2I1X3Bpbyk7CiAJCWNzYjVfcGlvICY9IH4oMHgwRiA8PCBkZXZiaXRzKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NEEsIGNzYjVfcGlvIHwgKHBpbyA8PCBkZXZiaXRzKSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDRBLCBjc2I1X3BpbyB8IChwaW8gPDwgZGV2Yml0cykpOwogCX0KIH0KIApAQCAtMzI3LDcgKzMyOCw3IEBACiAJCXBjaV9kZXZfcHV0KGlzYV9kZXYpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhX3NlcnZlcndvcmtzOiBVbmFibGUgdG8gZmluZCBicmlkZ2UuXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFVuYWJsZSB0byBmaW5kIGJyaWRnZS5cbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC00NTksNyArNDYwLDcgQEAKIAlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSkKIAkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNlcnZlcndvcmtzX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNlcnZlcndvcmtzX3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IGEyYWNlNDguLmM2YzU4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCQkJIElSUUZfU0hBUkVELCAmc2lsNjgwX3NodCk7CiAKIHVzZV9pb3BvcnRzOgotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZzaWw2ODBfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmc2lsNjgwX3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IDVjMzBkNTYuLmI2NzA4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtODI2LDcgKzgyNiw3IEBACiAKIAlzaXNfZml4dXAocGRldiwgY2hpcHNldCk7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmc2lzX3NodCwgY2hpcHNldCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNpc19zaHQsIGNoaXBzZXQsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMjlmNzMzYy4uNzMzYjA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2w4MmMxMDVfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzbDgyYzEwNV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2w4MmMxMDVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKaW5kZXggZjFmMTNmZi4uNDhmNTA2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnRyaWZsZXhfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZ0cmlmbGV4X3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0cmlmbGV4W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwppbmRleCAwZDk3ODkwLi4zMDU5ZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqCVZJQSBWVDgyMzNjCS0JVURNQTEwMAogICoJVklBIFZUODIzNQktCVVETUExMzMKICAqCVZJQSBWVDgyMzcJLQlVRE1BMTMzCisgKglWSUEgVlQ4MjM3QQktCVVETUExMzMKICAqCVZJQSBWVDgyMzdTCS0JVURNQTEzMwogICoJVklBIFZUODI1MQktCVVETUExMzMKICAqCkBAIC02NCwyNiArNjUsMTUgQEAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfdmlhIgogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjQiCiAKLS8qCi0gKglUaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gVm9qdGVjaCBQYXZsaWsncyBpZGUvcGNpL3ZpYTgyY3h4eAotICoJZHJpdmVyLgotICovCi0KIGVudW0gewotCVZJQV9VRE1BCT0gMHgwMDcsCi0JVklBX1VETUFfTk9ORQk9IDB4MDAwLAotCVZJQV9VRE1BXzMzCT0gMHgwMDEsCi0JVklBX1VETUFfNjYJPSAweDAwMiwKLQlWSUFfVURNQV8xMDAJPSAweDAwMywKLQlWSUFfVURNQV8xMzMJPSAweDAwNCwKLQlWSUFfQkFEX1BSRVEJPSAweDAxMCwgLyogQ3Jhc2hlcyBpZiBQUkVRIyB0aWxsIEREQUNLIyBzZXQgKi8KLQlWSUFfQkFEX0NMSzY2CT0gMHgwMjAsIC8qIDY2IE1IeiBjbG9jayBkb2Vzbid0IHdvcmsgY29ycmVjdGx5ICovCi0JVklBX1NFVF9GSUZPCT0gMHgwNDAsIC8qIE5lZWRzIHRvIGhhdmUgRklGTyBzcGxpdCBzZXQgKi8KLQlWSUFfTk9fVU5NQVNLCT0gMHgwODAsIC8qIERvZXNuJ3Qgd29yayB3aXRoIElSUSB1bm1hc2tpbmcgb24gKi8KLQlWSUFfQkFEX0lECT0gMHgxMDAsIC8qIEhhcyB3cm9uZyB2ZW5kb3IgSUQgKDB4MTEwNykgKi8KLQlWSUFfQkFEX0FTVAk9IDB4MjAwLCAvKiBEb24ndCB0b3VjaCBBZGRyZXNzIFNldHVwIFRpbWluZyAqLwotCVZJQV9OT19FTkFCTEVTCT0gMHg0MDAsIC8qIEhhcyBubyBlbmFibGViaXRzICovCi0JVklBX1NBVEFfUEFUQQk9IDB4ODAwLCAvKiBTQVRBL1BBVEEgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworCVZJQV9CQURfUFJFUQk9IDB4MDEsIC8qIENyYXNoZXMgaWYgUFJFUSMgdGlsbCBEREFDSyMgc2V0ICovCisJVklBX0JBRF9DTEs2Ngk9IDB4MDIsIC8qIDY2IE1IeiBjbG9jayBkb2Vzbid0IHdvcmsgY29ycmVjdGx5ICovCisJVklBX1NFVF9GSUZPCT0gMHgwNCwgLyogTmVlZHMgdG8gaGF2ZSBGSUZPIHNwbGl0IHNldCAqLworCVZJQV9OT19VTk1BU0sJPSAweDA4LCAvKiBEb2Vzbid0IHdvcmsgd2l0aCBJUlEgdW5tYXNraW5nIG9uICovCisJVklBX0JBRF9JRAk9IDB4MTAsIC8qIEhhcyB3cm9uZyB2ZW5kb3IgSUQgKDB4MTEwNykgKi8KKwlWSUFfQkFEX0FTVAk9IDB4MjAsIC8qIERvbid0IHRvdWNoIEFkZHJlc3MgU2V0dXAgVGltaW5nICovCisJVklBX05PX0VOQUJMRVMJPSAweDQwLCAvKiBIYXMgbm8gZW5hYmxlYml0cyAqLworCVZJQV9TQVRBX1BBVEEJPSAweDgwLCAvKiBTQVRBL1BBVEEgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLwogfTsKIAogZW51bSB7CkBAIC05OSw0MCArODksMzcgQEAKIAl1MTYgaWQ7CiAJdTggcmV2X21pbjsKIAl1OCByZXZfbWF4OwotCXUxNiBmbGFnczsKKwl1OCB1ZG1hX21hc2s7CisJdTggZmxhZ3M7CiB9IHZpYV9pc2FfYnJpZGdlc1tdID0gewotCXsgInZ4ODU1IiwJUENJX0RFVklDRV9JRF9WSUFfVlg4NTUsICAgIDB4MDAsIDB4MmYsCi0JICBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKLQl7ICJ2eDgwMCIsCVBDSV9ERVZJQ0VfSURfVklBX1ZYODAwLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfAotCVZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAotCXsgInZ0ODI2MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNjEsICAgICAweDAwLCAweDJmLAotCSAgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyMzdzIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN1MsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCi0JeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCi0JeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCi0JeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHhmZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAotCXsgInZ0ODIzN2EiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QSwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyMzciLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyMzUiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyMzNhIiwJUENJX0RFVklDRV9JRF9WSUFfODIzM0EsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCi0JeyAidnQ4MjMzYyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAsICAweDAwLCAweDJmLCBWSUFfVURNQV8xMDAgfSwKLQl7ICJ2dDgyMzMiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMzXzAsICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTAwIH0sCi0JeyAidnQ4MjMxIiwJUENJX0RFVklDRV9JRF9WSUFfODIzMSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEwMCB9LAotCXsgInZ0ODJjNjg2YiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDQwLCAweDRmLCBWSUFfVURNQV8xMDAgfSwKLQl7ICJ2dDgyYzY4NmEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODYsICAgMHgxMCwgMHgyZiwgVklBX1VETUFfNjYgfSwKLQl7ICJ2dDgyYzY4NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDAwLCAweDBmLCBWSUFfVURNQV8zMyB8IFZJQV9CQURfQ0xLNjYgfSwKLQl7ICJ2dDgyYzU5NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTYsICAgMHgxMCwgMHgyZiwgVklBX1VETUFfNjYgfSwKLQl7ICJ2dDgyYzU5NmEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTYsICAgMHgwMCwgMHgwZiwgVklBX1VETUFfMzMgfCBWSUFfQkFEX0NMSzY2IH0sCi0JeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4NDcsIDB4NGYsIFZJQV9VRE1BXzMzIHwgVklBX1NFVF9GSUZPIH0sCi0JeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4NDAsIDB4NDYsIFZJQV9VRE1BXzMzIHwgVklBX1NFVF9GSUZPIHwgVklBX0JBRF9QUkVRIH0sCi0JeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4MzAsIDB4M2YsIFZJQV9VRE1BXzMzIHwgVklBX1NFVF9GSUZPIH0sCi0JeyAidnQ4MmM1ODZhIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4MjAsIDB4MmYsIFZJQV9VRE1BXzMzIHwgVklBX1NFVF9GSUZPIH0sCi0JeyAidnQ4MmM1ODYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgwMCwgMHgwZiwgVklBX1VETUFfTk9ORSB8IFZJQV9TRVRfRklGTyB9LAotCXsgInZ0ODJjNTc2IiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTc2LCAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BX05PTkUgfCBWSUFfU0VUX0ZJRk8gfCBWSUFfTk9fVU5NQVNLIH0sCi0JeyAidnQ4MmM1NzYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzYsICAgMHgwMCwgMHgyZiwgVklBX1VETUFfTk9ORSB8IFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfCBWSUFfQkFEX0lEIH0sCi0JeyAidnR4eHh4IiwJUENJX0RFVklDRV9JRF9WSUFfQU5PTiwgICAgMHgwMCwgMHgyZiwKLQkgIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCisJeyAidng4NTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV9WWDg1NSwgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKKwl7ICJ2eDgwMCIsCVBDSV9ERVZJQ0VfSURfVklBX1ZYODAwLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAorCXsgInZ0ODI2MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNjEsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ4MjM3cyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdTLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJjeDcwMCIsCVBDSV9ERVZJQ0VfSURfVklBX0NYNzAwLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAorCXsgInZ0NjQxMCIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKKwl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHhmZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCisJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ4MjM3IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2dDgyMzUiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAorCXsgInZ0ODIzM2EiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQSwgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAorCXsgInZ0ODIzM2MiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQ18wLCAgMHgwMCwgMHgyZiwgQVRBX1VETUE1LCB9LAorCXsgInZ0ODIzMyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMCwgICAweDAwLCAweDJmLCBBVEFfVURNQTUsIH0sCisJeyAidnQ4MjMxIiwJUENJX0RFVklDRV9JRF9WSUFfODIzMSwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNSwgfSwKKwl7ICJ2dDgyYzY4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODYsICAgMHg0MCwgMHg0ZiwgQVRBX1VETUE1LCB9LAorCXsgInZ0ODJjNjg2YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDEwLCAweDJmLCBBVEFfVURNQTQsIH0sCisJeyAidnQ4MmM2ODYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODYsICAgMHgwMCwgMHgwZiwgQVRBX1VETUEyLCBWSUFfQkFEX0NMSzY2IH0sCisJeyAidnQ4MmM1OTZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTk2LCAgIDB4MTAsIDB4MmYsIEFUQV9VRE1BNCwgfSwKKwl7ICJ2dDgyYzU5NmEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTYsICAgMHgwMCwgMHgwZiwgQVRBX1VETUEyLCBWSUFfQkFEX0NMSzY2IH0sCisJeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4NDcsIDB4NGYsIEFUQV9VRE1BMiwgVklBX1NFVF9GSUZPIH0sCisJeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4NDAsIDB4NDYsIEFUQV9VRE1BMiwgVklBX1NFVF9GSUZPIHwgVklBX0JBRF9QUkVRIH0sCisJeyAidnQ4MmM1ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4MzAsIDB4M2YsIEFUQV9VRE1BMiwgVklBX1NFVF9GSUZPIH0sCisJeyAidnQ4MmM1ODZhIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsIDB4MjAsIDB4MmYsIEFUQV9VRE1BMiwgVklBX1NFVF9GSUZPIH0sCisJeyAidnQ4MmM1ODYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgwMCwgMHgwZiwgICAgICAweDAwLCBWSUFfU0VUX0ZJRk8gfSwKKwl7ICJ2dDgyYzU3NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiwgICAweDAwLCAweDJmLCAgICAgIDB4MDAsIFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfSwKKwl7ICJ2dDgyYzU3NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiwgICAweDAwLCAweDJmLCAgICAgIDB4MDAsIFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfCBWSUFfQkFEX0lEIH0sCisJeyAidnR4eHh4IiwJUENJX0RFVklDRV9JRF9WSUFfQU5PTiwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7IE5VTEwgfQogfTsKIApAQCAtMTkxLDEwICsxNzgsMTAgQEAKIAkJcmV0dXJuIEFUQV9DQkxfU0FUQTsKIAogCS8qIEVhcmx5IGNoaXBzIGFyZSA0MCB3aXJlICovCi0JaWYgKChjb25maWctPmZsYWdzICYgVklBX1VETUEpIDwgVklBX1VETUFfNjYpCisJaWYgKGNvbmZpZy0+dWRtYV9tYXNrIDwgQVRBX1VETUE0KQogCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7CiAJLyogVURNQSA2NiBjaGlwcyBoYXZlIG9ubHkgZHJpdmUgc2lkZSBsb2dpYyAqLwotCWVsc2UgaWYgKChjb25maWctPmZsYWdzICYgVklBX1VETUEpIDwgVklBX1VETUFfMTAwKQorCWVsc2UgaWYgKGNvbmZpZy0+dWRtYV9tYXNrIDwgQVRBX1VETUE1KQogCQlyZXR1cm4gQVRBX0NCTF9QQVRBX1VOSzsKIAkvKiBVRE1BIDEwMCBvciBsYXRlciAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDUwLCAmYXRhNjYpOwpAQCAtMjI5LDExICsyMTYsMTAgQEAKIAogCiAvKioKLSAqCXZpYV9kb19zZXRfbW9kZQktCXNldCBpbml0aWFsIFBJTyBtb2RlIGRhdGEKKyAqCXZpYV9kb19zZXRfbW9kZQktCXNldCB0cmFuc2ZlciBtb2RlIGRhdGEKICAqCUBhcDogQVRBIGludGVyZmFjZQogICoJQGFkZXY6IEFUQSBkZXZpY2UKICAqCUBtb2RlOiBBVEEgbW9kZSBiZWluZyBwcm9ncmFtbWVkCi0gKglAdGRpdjogQ2xvY2tzIHBlciBQQ0kgY2xvY2sKICAqCUBzZXRfYXN0OiBTZXQgdG8gcHJvZ3JhbSBhZGRyZXNzIHNldHVwCiAgKglAdWRtYV90eXBlOiBVRE1BIG1vZGUvZm9ybWF0IG9mIHJlZ2lzdGVycwogICoKQEAgLTI0NCwxNyArMjMwLDI3IEBACiAgKglvbiB0aGUgdHdvIGNoYW5uZWxzLgogICovCiAKLXN0YXRpYyB2b2lkIHZpYV9kb19zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgaW50IG1vZGUsIGludCB0ZGl2LCBpbnQgc2V0X2FzdCwgaW50IHVkbWFfdHlwZSkKK3N0YXRpYyB2b2lkIHZpYV9kb19zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwKKwkJCSAgICBpbnQgbW9kZSwgaW50IHNldF9hc3QsIGludCB1ZG1hX3R5cGUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0cnVjdCBhdGFfZGV2aWNlICpwZWVyID0gYXRhX2Rldl9wYWlyKGFkZXYpOwogCXN0cnVjdCBhdGFfdGltaW5nIHQsIHA7Ci0Jc3RhdGljIGludCB2aWFfY2xvY2sgPSAzMzMzMzsJLyogQnVzIGNsb2NrIGluIGtIWiAtIG91Z2h0IHRvIGJlIHR1bmFibGUgb25lIGRheSAqLworCXN0YXRpYyBpbnQgdmlhX2Nsb2NrID0gMzMzMzM7CS8qIEJ1cyBjbG9jayBpbiBrSFogKi8KIAl1bnNpZ25lZCBsb25nIFQgPSAgMTAwMDAwMDAwMCAvIHZpYV9jbG9jazsKLQl1bnNpZ25lZCBsb25nIFVUID0gVC90ZGl2OworCXVuc2lnbmVkIGxvbmcgVVQgPSBUOwogCWludCB1dDsKIAlpbnQgb2Zmc2V0ID0gMyAtICgyKmFwLT5wb3J0X25vKSAtIGFkZXYtPmRldm5vOwogCisJc3dpdGNoICh1ZG1hX3R5cGUpIHsKKwljYXNlIEFUQV9VRE1BNDoKKwkJVVQgPSBUIC8gMjsgYnJlYWs7CisJY2FzZSBBVEFfVURNQTU6CisJCVVUID0gVCAvIDM7IGJyZWFrOworCWNhc2UgQVRBX1VETUE2OgorCQlVVCA9IFQgLyA0OyBicmVhazsKKwl9CisKIAkvKiBDYWxjdWxhdGUgdGhlIHRpbWluZyB2YWx1ZXMgd2UgcmVxdWlyZSAqLwogCWF0YV90aW1pbmdfY29tcHV0ZShhZGV2LCBtb2RlLCAmdCwgVCwgVVQpOwogCkBAIC0yNzMsNyArMjY5LDcgQEAKIAogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDRDLCAmc2V0dXApOwogCQlzZXR1cCAmPSB+KDMgPDwgc2hpZnQpOwotCQlzZXR1cCB8PSBjbGFtcF92YWwodC5zZXR1cCwgMSwgNCkgPDwgc2hpZnQ7CS8qIDEsNCBvciAxLDQgLSAxICBGSVhNRSAqLworCQlzZXR1cCB8PSAoY2xhbXBfdmFsKHQuc2V0dXAsIDEsIDQpIC0gMSkgPDwgc2hpZnQ7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDRDLCBzZXR1cCk7CiAJfQogCkBAIC0yODQsMjIgKzI4MCwyMCBAQAogCQkoKGNsYW1wX3ZhbCh0LmFjdGl2ZSwgMSwgMTYpIC0gMSkgPDwgNCkgfCAoY2xhbXBfdmFsKHQucmVjb3ZlciwgMSwgMTYpIC0gMSkpOwogCiAJLyogTG9hZCB0aGUgVURNQSBiaXRzIGFjY29yZGluZyB0byB0eXBlICovCi0Jc3dpdGNoKHVkbWFfdHlwZSkgewotCQlkZWZhdWx0OgotCQkJLyogQlVHKCkgPyAqLwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgMzM6Ci0JCQl1dCA9IHQudWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDUpIC0gMikpIDogMHgwMzsKLQkJCWJyZWFrOwotCQljYXNlIDY2OgotCQkJdXQgPSB0LnVkbWEgPyAoMHhlOCB8IChjbGFtcF92YWwodC51ZG1hLCAyLCA5KSAtIDIpKSA6IDB4MGY7Ci0JCQlicmVhazsKLQkJY2FzZSAxMDA6Ci0JCQl1dCA9IHQudWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDkpIC0gMikpIDogMHgwNzsKLQkJCWJyZWFrOwotCQljYXNlIDEzMzoKLQkJCXV0ID0gdC51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgOSkgLSAyKSkgOiAweDA3OwotCQkJYnJlYWs7CisJc3dpdGNoICh1ZG1hX3R5cGUpIHsKKwljYXNlIEFUQV9VRE1BMjoKKwlkZWZhdWx0OgorCQl1dCA9IHQudWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDUpIC0gMikpIDogMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBBVEFfVURNQTQ6CisJCXV0ID0gdC51ZG1hID8gKDB4ZTggfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgOSkgLSAyKSkgOiAweDBmOworCQlicmVhazsKKwljYXNlIEFUQV9VRE1BNToKKwkJdXQgPSB0LnVkbWEgPyAoMHhlMCB8IChjbGFtcF92YWwodC51ZG1hLCAyLCA5KSAtIDIpKSA6IDB4MDc7CisJCWJyZWFrOworCWNhc2UgQVRBX1VETUE2OgorCQl1dCA9IHQudWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDkpIC0gMikpIDogMHgwNzsKKwkJYnJlYWs7CiAJfQogCiAJLyogU2V0IFVETUEgdW5sZXNzIGRldmljZSBpcyBub3QgVURNQSBjYXBhYmxlICovCkBAIC0zMjUsMjIgKzMxOSwxNiBAQAogewogCWNvbnN0IHN0cnVjdCB2aWFfaXNhX2JyaWRnZSAqY29uZmlnID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlpbnQgc2V0X2FzdCA9IChjb25maWctPmZsYWdzICYgVklBX0JBRF9BU1QpID8gMCA6IDE7Ci0JaW50IG1vZGUgPSBjb25maWctPmZsYWdzICYgVklBX1VETUE7Ci0Jc3RhdGljIHU4IHRjbG9ja1s1XSA9IHsgMSwgMSwgMiwgMywgNCB9OwotCXN0YXRpYyB1OCB1ZG1hWzVdID0geyAwLCAzMywgNjYsIDEwMCwgMTMzIH07CiAKLQl2aWFfZG9fc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPnBpb19tb2RlLCB0Y2xvY2tbbW9kZV0sIHNldF9hc3QsIHVkbWFbbW9kZV0pOworCXZpYV9kb19zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+cGlvX21vZGUsIHNldF9hc3QsIGNvbmZpZy0+dWRtYV9tYXNrKTsKIH0KIAogc3RhdGljIHZvaWQgdmlhX3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCWNvbnN0IHN0cnVjdCB2aWFfaXNhX2JyaWRnZSAqY29uZmlnID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlpbnQgc2V0X2FzdCA9IChjb25maWctPmZsYWdzICYgVklBX0JBRF9BU1QpID8gMCA6IDE7Ci0JaW50IG1vZGUgPSBjb25maWctPmZsYWdzICYgVklBX1VETUE7Ci0Jc3RhdGljIHU4IHRjbG9ja1s1XSA9IHsgMSwgMSwgMiwgMywgNCB9OwotCXN0YXRpYyB1OCB1ZG1hWzVdID0geyAwLCAzMywgNjYsIDEwMCwgMTMzIH07CiAKLQl2aWFfZG9fc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPmRtYV9tb2RlLCB0Y2xvY2tbbW9kZV0sIHNldF9hc3QsIHVkbWFbbW9kZV0pOworCXZpYV9kb19zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+ZG1hX21vZGUsIHNldF9hc3QsIGNvbmZpZy0+dWRtYV9tYXNrKTsKIH0KIAogLyoqCkBAIC02MDQsMzMgKzU5MiwyOSBAQAogCXZpYV9jb25maWdfZmlmbyhwZGV2LCBjb25maWctPmZsYWdzKTsKIAogCS8qIENsb2NrIHNldCB1cCAqLwotCXN3aXRjaChjb25maWctPmZsYWdzICYgVklBX1VETUEpIHsKLQkJY2FzZSBWSUFfVURNQV9OT05FOgotCQkJaWYgKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKQotCQkJCXBwaVswXSA9ICZ2aWFfbXdkbWFfaW5mb19ib3JrZWQ7Ci0JCQllbHNlCi0JCQkJcHBpWzBdID0gJnZpYV9td2RtYV9pbmZvOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1VETUFfMzM6Ci0JCQlwcGlbMF0gPSAmdmlhX3VkbWEzM19pbmZvOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1VETUFfNjY6Ci0JCQlwcGlbMF0gPSAmdmlhX3VkbWE2Nl9pbmZvOwotCQkJLyogVGhlIDY2IE1IeiBkZXZpY2VzIHJlcXVpcmUgd2UgZW5hYmxlIHRoZSBjbG9jayAqLwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsICZ0aW1pbmcpOwotCQkJdGltaW5nIHw9IDB4ODAwMDg7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsIHRpbWluZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfVURNQV8xMDA6Ci0JCQlwcGlbMF0gPSAmdmlhX3VkbWExMDBfaW5mbzsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9VRE1BXzEzMzoKLQkJCXBwaVswXSA9ICZ2aWFfdWRtYTEzM19pbmZvOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09OKDEpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXN3aXRjaCAoY29uZmlnLT51ZG1hX21hc2spIHsKKwljYXNlIDB4MDA6CisJCWlmIChjb25maWctPmZsYWdzICYgVklBX05PX1VOTUFTSykKKwkJCXBwaVswXSA9ICZ2aWFfbXdkbWFfaW5mb19ib3JrZWQ7CisJCWVsc2UKKwkJCXBwaVswXSA9ICZ2aWFfbXdkbWFfaW5mbzsKKwkJYnJlYWs7CisJY2FzZSBBVEFfVURNQTI6CisJCXBwaVswXSA9ICZ2aWFfdWRtYTMzX2luZm87CisJCWJyZWFrOworCWNhc2UgQVRBX1VETUE0OgorCQlwcGlbMF0gPSAmdmlhX3VkbWE2Nl9pbmZvOworCQlicmVhazsKKwljYXNlIEFUQV9VRE1BNToKKwkJcHBpWzBdID0gJnZpYV91ZG1hMTAwX2luZm87CisJCWJyZWFrOworCWNhc2UgQVRBX1VETUE2OgorCQlwcGlbMF0gPSAmdmlhX3VkbWExMzNfaW5mbzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisgCX0KIAogCWlmIChjb25maWctPmZsYWdzICYgVklBX0JBRF9DTEs2NikgewogCQkvKiBEaXNhYmxlIHRoZSA2Nk1IeiBjbG9jayBvbiBwcm9ibGVtIGRldmljZXMgKi8KQEAgLTY0MCw3ICs2MjQsNyBAQAogCX0KIAogCS8qIFdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGRldmljZSB0eXBlLCBub3cgZmlyZSBpdCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZ2aWFfc2h0LCAodm9pZCAqKWNvbmZpZyk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnZpYV9zaHQsICh2b2lkICopY29uZmlnLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNjY3LDcgKzY1MSw3IEBACiAKIAl2aWFfY29uZmlnX2ZpZm8ocGRldiwgY29uZmlnLT5mbGFncyk7CiAKLQlpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgPT0gVklBX1VETUFfNjYpIHsKKwlpZiAoY29uZmlnLT51ZG1hX21hc2sgPT0gQVRBX1VETUE0KSB7CiAJCS8qIFRoZSA2NiBNSHogZGV2aWNlcyByZXF1aXJlIHdlIGVuYWJsZSB0aGUgY2xvY2sgKi8KIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsICZ0aW1pbmcpOwogCQl0aW1pbmcgfD0gMHg4MDAwODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCAwYzgyZDMzLi42ODRmZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAl9CiAKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBzZWdtZW50X2JvdW5kYXJ5KTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHNkZXYtPnJlcXVlc3RfcXVldWUsIHNnX3RhYmxlc2l6ZSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBzZ190YWJsZXNpemUpOwogCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLAogCQkiRE1BIG1hc2sgMHglbGxYLCBzZWdtZW50IGJvdW5kYXJ5IDB4JWxYLCBodyBzZWdzICVodVxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZykqYXAtPmhvc3QtPmRldi0+ZG1hX21hc2ssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCAwMmVmZDlhLi4wOGY2NTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTQwLDExICs0MCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX3ZpYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNiIKIAogLyoKICAqIHZ0ODI1MSBpcyBkaWZmZXJlbnQgZnJvbSBvdGhlciBzYXRhIGNvbnRyb2xsZXJzIG9mIFZJQS4gIEl0IGhhcyB0d28KQEAgLTgwLDYgKzgyLDcgQEAKIHN0YXRpYyB2b2lkIHN2aWFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBzdGF0aWMgdm9pZCBzdmlhX25vb3BfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyB2b2lkIHZ0NjQyMF9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgdnQ2NDIxX3BhdGFfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgdnQ2NDIxX3NldF9waW9fbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCB2dDY0MjFfc2V0X2RtYV9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKQEAgLTEyMSw2ICsxMjQsNyBAQAogCS5pbmhlcml0cwkJPSAmc3ZpYV9iYXNlX29wcywKIAkuZnJlZXplCQkJPSBzdmlhX25vb3BfZnJlZXplLAogCS5wcmVyZXNldAkJPSB2dDY0MjBfcHJlcmVzZXQsCisJLmJtZG1hX3N0YXJ0CQk9IHZ0NjQyMF9ibWRtYV9zdGFydCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfcGF0YV9vcHMgPSB7CkBAIC0zNzcsNiArMzgxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZ0NjQyMF9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJaWYgKChxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX1BBQ0tFVCkgJiYKKwkgICAgKHFjLT5zY3NpY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSkgeworCQkvKiBQcmV2ZW50cyBjb3JydXB0aW9uIG9uIHNvbWUgQVRBUEkgYnVybmVycyAqLworCQlhdGFfc2ZmX3BhdXNlKGFwKTsKKwl9CisJYXRhX2JtZG1hX3N0YXJ0KHFjKTsKK30KKwogc3RhdGljIGludCB2dDY0MjFfcGF0YV9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CkBAIC0zOTIsMTQgKzQwNywxNiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlzdGF0aWMgY29uc3QgdTggcGlvX2JpdHNbXSA9IHsgMHhBOCwgMHg2NSwgMHg2NSwgMHgzMSwgMHgyMCB9OwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQVRBX1BJT19USU1JTkcsIHBpb19iaXRzW2FkZXYtPnBpb19tb2RlIC0gWEZFUl9QSU9fMF0pOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQVRBX1BJT19USU1JTkcgLSBhZGV2LT5kZXZubywKKwkJCSAgICAgIHBpb19iaXRzW2FkZXYtPnBpb19tb2RlIC0gWEZFUl9QSU9fMF0pOwogfQogCiBzdGF0aWMgdm9pZCB2dDY0MjFfc2V0X2RtYV9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlzdGF0aWMgY29uc3QgdTggdWRtYV9iaXRzW10gPSB7IDB4RUUsIDB4RTgsIDB4RTYsIDB4RTQsIDB4RTIsIDB4RTEsIDB4RTAsIDB4RTAgfTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUEFUQV9VRE1BX1RJTUlORywgdWRtYV9iaXRzW2FkZXYtPmRtYV9tb2RlIC0gWEZFUl9VRE1BXzBdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUEFUQV9VRE1BX1RJTUlORyAtIGFkZXYtPmRldm5vLAorCQkJICAgICAgdWRtYV9iaXRzW2FkZXYtPmRtYV9tb2RlIC0gWEZFUl9VRE1BXzBdKTsKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdmlhX2Jhcl9zaXplc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggYmM1M2ZlZC4uZjdkNmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yMDY0LDEyICsyMDY0LDEwIEBACiAJcmV0dXJuIC1FQlVTWTsKICAgICB9CiAJCi0gICAgcHJpbnRrKEZPUkUyMDBFICJkZXZpY2UgJXMsIHJldi4gJWMsIFMvTjogJWQsIEVTSTogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAorICAgIHByaW50ayhGT1JFMjAwRSAiZGV2aWNlICVzLCByZXYuICVjLCBTL046ICVkLCBFU0k6ICVwTVxuIiwKIAkgICBmb3JlMjAwZS0+bmFtZSwgCiAJICAgKHByb20tPmh3X3JldmlzaW9uICYgMHhGRikgKyAnQCcsICAgIC8qIHByb2JhYmx5IG1lYW5pbmdsZXNzIHdpdGggU0JBIGJvYXJkcyAqLwotCSAgIHByb20tPnNlcmlhbF9udW1iZXIgJiAweEZGRkYsCi0JICAgcHJvbS0+bWFjX2FkZHJbIDIgXSwgcHJvbS0+bWFjX2FkZHJbIDMgXSwgcHJvbS0+bWFjX2FkZHJbIDQgXSwKLQkgICBwcm9tLT5tYWNfYWRkclsgNSBdLCBwcm9tLT5tYWNfYWRkclsgNiBdLCBwcm9tLT5tYWNfYWRkclsgNyBdKTsKKwkgICBwcm9tLT5zZXJpYWxfbnVtYmVyICYgMHhGRkZGLCAmcHJvbS0+bWFjX2FkZHJbMl0pOwogCQogICAgIGZvciAoaSA9IDA7IGkgPCBFU0lfTEVOOyBpKyspIHsKIAlmb3JlMjAwZS0+ZXNpWyBpIF0gPSBmb3JlMjAwZS0+YXRtX2Rldi0+ZXNpWyBpIF0gPSBwcm9tLT5tYWNfYWRkclsgaSArIDIgXTsKQEAgLTI4NDUsMTMgKzI4NDMsMTIgQEAKIAkJIiAgIGludGVycnVwdCBsaW5lOlx0XHQlc1xuIgogCQkiICAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzOlx0MHglcFxuIgogCQkiICAgdmlydHVhbCBiYXNlIGFkZHJlc3M6XHQweCVwXG4iCi0JCSIgICBmYWN0b3J5IGFkZHJlc3MgKEVTSSk6XHQlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIgorCQkiICAgZmFjdG9yeSBhZGRyZXNzIChFU0kpOlx0JXBNXG4iCiAJCSIgICBib2FyZCBzZXJpYWwgbnVtYmVyOlx0XHQlZFxuXG4iLAogCQlmb3JlMjAwZV9pcnFfaXRvYShmb3JlMjAwZS0+aXJxKSwKIAkJKHZvaWQqKWZvcmUyMDBlLT5waHlzX2Jhc2UsCiAJCWZvcmUyMDBlLT52aXJ0X2Jhc2UsCi0JCWZvcmUyMDBlLT5lc2lbMF0sIGZvcmUyMDBlLT5lc2lbMV0sIGZvcmUyMDBlLT5lc2lbMl0sCi0JCWZvcmUyMDBlLT5lc2lbM10sIGZvcmUyMDBlLT5lc2lbNF0sIGZvcmUyMDBlLT5lc2lbNV0sCisJCWZvcmUyMDBlLT5lc2ksCiAJCWZvcmUyMDBlLT5lc2lbNF0gKiAyNTYgKyBmb3JlMjAwZS0+ZXNpWzVdKTsKIAogCXJldHVybiBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwppbmRleCBlMzNhZTAwLi4wMWYzNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKQEAgLTM1NTcsMTAgKzM1NTcsNyBAQAogCWlmICh0bXApIHsKIAkJbWVtY3B5KGNhcmQtPmF0bWRldi0+ZXNpLCB0bXAtPmRldl9hZGRyLCA2KTsKIAotCQlwcmludGsoIiVzOiBFU0kgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSAgICAgICBjYXJkLT5uYW1lLCBjYXJkLT5hdG1kZXYtPmVzaVswXSwgY2FyZC0+YXRtZGV2LT5lc2lbMV0sCi0JCSAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVsyXSwgY2FyZC0+YXRtZGV2LT5lc2lbM10sCi0JCSAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVs0XSwgY2FyZC0+YXRtZGV2LT5lc2lbNV0pOworCQlwcmludGsoIiVzOiBFU0kgJXBNXG4iLCBjYXJkLT5uYW1lLCBjYXJkLT5hdG1kZXYtPmVzaSk7CiAJfQogCS8qCiAJICogWFhYOiA8L2hhY2s+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9sYW5haS5jIGIvZHJpdmVycy9hdG0vbGFuYWkuYwppbmRleCBjZjk3YzM0Li43ZmU3YzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9sYW5haS5jCisrKyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKQEAgLTk5OCw5ICs5OTgsNyBAQAogCQkJICAgICh1bnNpZ25lZCBpbnQpIGVbRUVQUk9NX01BQ19SRVYgKyBpXSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCURQUklOVEsoImVlcHJvbTogTUFDIGFkZHJlc3MgPSAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkJZVtFRVBST01fTUFDICsgMF0sIGVbRUVQUk9NX01BQyArIDFdLCBlW0VFUFJPTV9NQUMgKyAyXSwKLQkJZVtFRVBST01fTUFDICsgM10sIGVbRUVQUk9NX01BQyArIDRdLCBlW0VFUFJPTV9NQUMgKyA1XSk7CisJRFBSSU5USygiZWVwcm9tOiBNQUMgYWRkcmVzcyA9ICVwTVxuIiwgJmVbRUVQUk9NX01BQ10pOwogCS8qIFZlcmlmeSBzZXJpYWwgbnVtYmVyICovCiAJbGFuYWktPnNlcmlhbG5vID0gZWVwcm9tX2JlNChsYW5haSwgRUVQUk9NX1NFUklBTCk7CiAJdiA9IGVlcHJvbV9iZTQobGFuYWksIEVFUFJPTV9TRVJJQUxfUkVWKTsKQEAgLTI0ODMsMTQgKzI0ODEsOCBAQAogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAicmV2aXNpb246IGJvYXJkPSVkLCBwY2lfaWY9JWRcbiIsCiAJCSAgICBsYW5haS0+Ym9hcmRfcmV2LCAoaW50KSBsYW5haS0+cGNpLT5yZXZpc2lvbik7CiAJaWYgKGxlZnQtLSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiRUVQUk9NIEVTSTogIgotCQkgICAgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgMF0sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyAxXSwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDJdLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgM10sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyA0XSwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDVdKTsKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIkVFUFJPTSBFU0k6ICVwTVxuIiwKKwkJICAgICZsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUNdKTsKIAlpZiAobGVmdC0tID09IDApCiAJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJzdGF0dXM6IFNPT0w9JWQsIExPQ0Q9JWQsIExFRD0lZCwgIgogCQkgICAgIkdQSU49JWRcbiIsIChsYW5haS0+c3RhdHVzICYgU1RBVFVTX1NPT0wpID8gMSA6IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmMgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKaW5kZXggM2RhODA0Yi4uNTA4Mzg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhci5jCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuYwpAQCAtODA3LDkgKzgwNyw3IEBACiAgICAgICB9CiAgICB9CiAKLSAgIHByaW50aygibmljc3RhciVkOiBNQUMgYWRkcmVzcyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwgaSwKLSAgICAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVswXSwgY2FyZC0+YXRtZGV2LT5lc2lbMV0sIGNhcmQtPmF0bWRldi0+ZXNpWzJdLAotICAgICAgICAgIGNhcmQtPmF0bWRldi0+ZXNpWzNdLCBjYXJkLT5hdG1kZXYtPmVzaVs0XSwgY2FyZC0+YXRtZGV2LT5lc2lbNV0pOworICAgcHJpbnRrKCJuaWNzdGFyJWQ6IE1BQyBhZGRyZXNzICVwTVxuIiwgaSwgY2FyZC0+YXRtZGV2LT5lc2kpOwogCiAgICBjYXJkLT5hdG1kZXYtPmRldl9kYXRhID0gY2FyZDsKICAgIGNhcmQtPmF0bWRldi0+Y2lfcmFuZ2UudnBpX2JpdHMgPSBjYXJkLT52cGliaXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggYTUxNDJiZC4uMGUyNmE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogCiAjaW5jbHVkZSAiLi4vYmFzZS5oIgogI2luY2x1ZGUgInBvd2VyLmgiCkBAIC00Miw2ICs0Myw3IEBACiBMSVNUX0hFQUQoZHBtX2xpc3QpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGRwbV9saXN0X210eCk7CitzdGF0aWMgcG1fbWVzc2FnZV90IHBtX3RyYW5zaXRpb247CiAKIC8qCiAgKiBTZXQgb25jZSB0aGUgcHJlcGFyYXRpb24gb2YgZGV2aWNlcyBmb3IgYSBQTSB0cmFuc2l0aW9uIGhhcyBzdGFydGVkLCByZXNldApAQCAtNTYsNiArNTgsNyBAQAogdm9pZCBkZXZpY2VfcG1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT047CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCXBtX3J1bnRpbWVfaW5pdChkZXYpOwogfQogCkBAIC0xMTEsNiArMTE0LDcgQEAKIAlwcl9kZWJ1ZygiUE06IFJlbW92aW5nIGluZm8gZm9yICVzOiVzXG4iLAogCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAogCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKKwljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPnBvd2VyLmVudHJ5KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CkBAIC0xODgsNiArMTkyLDMxIEBACiB9CiAKIC8qKgorICogZHBtX3dhaXQgLSBXYWl0IGZvciBhIFBNIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KKyAqIEBkZXY6IERldmljZSB0byB3YWl0IGZvci4KKyAqIEBhc3luYzogSWYgdW5zZXQsIHdhaXQgb25seSBpZiB0aGUgZGV2aWNlJ3MgcG93ZXIuYXN5bmNfc3VzcGVuZCBmbGFnIGlzIHNldC4KKyAqLworc3RhdGljIHZvaWQgZHBtX3dhaXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGFzeW5jKQoreworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZiAoYXN5bmMgfHwgKHBtX2FzeW5jX2VuYWJsZWQgJiYgZGV2LT5wb3dlci5hc3luY19zdXNwZW5kKSkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIGludCBkcG1fd2FpdF9mbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFzeW5jX3B0cikKK3sKKwlkcG1fd2FpdChkZXYsICooKGJvb2wgKilhc3luY19wdHIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHBtX3dhaXRfZm9yX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBhc3luYykKK3sKKyAgICAgICBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCAmYXN5bmMsIGRwbV93YWl0X2ZuKTsKK30KKworLyoqCiAgKiBwbV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQG9wczogUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KQEAgLTI3MSw4ICszMDAsOSBAQAogCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOwogCiAJaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCXByX2luZm8oImNhbGxpbmcgICVzX2krIEAgJWlcbiIsCi0JCQkJZGV2X25hbWUoZGV2KSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQlwcl9pbmZvKCJjYWxsaW5nICAlcysgQCAlaSwgcGFyZW50OiAlc1xuIiwKKwkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCQlkZXYtPnBhcmVudCA/IGRldl9uYW1lKGRldi0+cGFyZW50KSA6ICJub25lIik7CiAJCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CiAJfQogCkBAIC00NjgsMTYgKzQ5OCwyMCBAQAogICogZGV2aWNlX3Jlc3VtZSAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBnaXZlbiBkZXZpY2UuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBAYXN5bmM6IElmIHRydWUsIHRoZSBkZXZpY2UgaXMgYmVpbmcgcmVzdW1lZCBhc3luY2hyb25vdXNseS4KICAqLwotc3RhdGljIGludCBkZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCBib29sIGFzeW5jKQogewogCWludCBlcnJvciA9IDA7CiAKIAlUUkFDRV9ERVZJQ0UoZGV2KTsKIAlUUkFDRV9SRVNVTUUoMCk7CiAKKwlkcG1fd2FpdChkZXYtPnBhcmVudCwgYXN5bmMpOwogCWRvd24oJmRldi0+c2VtKTsKIAorCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1JFU1VNSU5HOworCiAJaWYgKGRldi0+YnVzKSB7CiAJCWlmIChkZXYtPmJ1cy0+cG0pIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIiIpOwpAQCAtNTEwLDExICs1NDQsMjkgQEAKIAl9CiAgRW5kOgogCXVwKCZkZXYtPnNlbSk7CisJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCiAJVFJBQ0VfUkVTVU1FKGVycm9yKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGFzeW5jX3Jlc3VtZSh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHBtX3RyYW5zaXRpb24sIHRydWUpOworCWlmIChlcnJvcikKKwkJcG1fZGV2X2VycihkZXYsIHBtX3RyYW5zaXRpb24sICIgYXN5bmMiLCBlcnJvcik7CisJcHV0X2RldmljZShkZXYpOworfQorCitzdGF0aWMgYm9vbCBpc19hc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZCAmJiBwbV9hc3luY19lbmFibGVkCisJCSYmICFwbV90cmFjZV9pc19lbmFibGVkKCk7Cit9CisKIC8qKgogICogZHBtX3Jlc3VtZSAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBub24tc3lzZGV2IGRldmljZXMuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTUyNSwyMSArNTc3LDMzIEBACiBzdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZSAqZGV2OwogCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QubmV4dCk7CisJcG1fdHJhbnNpdGlvbiA9IHN0YXRlOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZkcG1fbGlzdCwgcG93ZXIuZW50cnkpIHsKKwkJaWYgKGRldi0+cG93ZXIuc3RhdHVzIDwgRFBNX09GRikKKwkJCWNvbnRpbnVlOworCisJCUlOSVRfQ09NUExFVElPTihkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworCQlpZiAoaXNfYXN5bmMoZGV2KSkgeworCQkJZ2V0X2RldmljZShkZXYpOworCQkJYXN5bmNfc2NoZWR1bGUoYXN5bmNfcmVzdW1lLCBkZXYpOworCQl9CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKKwkJZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOwogCQlnZXRfZGV2aWNlKGRldik7Ci0JCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+PSBEUE1fT0ZGKSB7CisJCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+PSBEUE1fT0ZGICYmICFpc19hc3luYyhkZXYpKSB7CiAJCQlpbnQgZXJyb3I7CiAKLQkJCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1JFU1VNSU5HOwogCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCi0JCQllcnJvciA9IGRldmljZV9yZXN1bWUoZGV2LCBzdGF0ZSk7CisJCQllcnJvciA9IGRldmljZV9yZXN1bWUoZGV2LCBzdGF0ZSwgZmFsc2UpOwogCiAJCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQkJaWYgKGVycm9yKQpAQCAtNTU0LDYgKzYxOCw3IEBACiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CiAJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKIH0KIApAQCAtNzMxLDE3ICs3OTYsMjQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgYXN5bmNfZXJyb3I7CisKIC8qKgogICogZGV2aWNlX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIEBhc3luYzogSWYgdHJ1ZSwgdGhlIGRldmljZSBpcyBiZWluZyBzdXNwZW5kZWQgYXN5bmNocm9ub3VzbHkuCiAgKi8KLXN0YXRpYyBpbnQgZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IF9fZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGJvb2wgYXN5bmMpCiB7CiAJaW50IGVycm9yID0gMDsKIAorCWRwbV93YWl0X2Zvcl9jaGlsZHJlbihkZXYsIGFzeW5jKTsKIAlkb3duKCZkZXYtPnNlbSk7CiAKKwlpZiAoYXN5bmNfZXJyb3IpCisJCWdvdG8gRW5kOworCiAJaWYgKGRldi0+Y2xhc3MpIHsKIAkJaWYgKGRldi0+Y2xhc3MtPnBtKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJjbGFzcyAiKTsKQEAgLTc3MiwxMiArODQ0LDQ0IEBACiAJCQllcnJvciA9IGxlZ2FjeV9zdXNwZW5kKGRldiwgc3RhdGUsIGRldi0+YnVzLT5zdXNwZW5kKTsKIAkJfQogCX0KKworCWlmICghZXJyb3IpCisJCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09GRjsKKwogIEVuZDoKIAl1cCgmZGV2LT5zZW0pOworCWNvbXBsZXRlX2FsbCgmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgYXN5bmNfc3VzcGVuZCh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCWludCBlcnJvcjsKKworCWVycm9yID0gX19kZXZpY2Vfc3VzcGVuZChkZXYsIHBtX3RyYW5zaXRpb24sIHRydWUpOworCWlmIChlcnJvcikgeworCQlwbV9kZXZfZXJyKGRldiwgcG1fdHJhbnNpdGlvbiwgIiBhc3luYyIsIGVycm9yKTsKKwkJYXN5bmNfZXJyb3IgPSBlcnJvcjsKKwl9CisKKwlwdXRfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCUlOSVRfQ09NUExFVElPTihkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworCisJaWYgKHBtX2FzeW5jX2VuYWJsZWQgJiYgZGV2LT5wb3dlci5hc3luY19zdXNwZW5kKSB7CisJCWdldF9kZXZpY2UoZGV2KTsKKwkJYXN5bmNfc2NoZWR1bGUoYXN5bmNfc3VzcGVuZCwgZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIF9fZGV2aWNlX3N1c3BlbmQoZGV2LCBwbV90cmFuc2l0aW9uLCBmYWxzZSk7Cit9CisKIC8qKgogICogZHBtX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGFsbCBub24tc3lzZGV2IGRldmljZXMuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTc5MCwxMyArODk0LDE1IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwlwbV90cmFuc2l0aW9uID0gc3RhdGU7CisJYXN5bmNfZXJyb3IgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5wcmV2KTsKIAogCQlnZXRfZGV2aWNlKGRldik7CiAJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAotCQllcnJvciA9IGRldmljZV9zdXNwZW5kKGRldiwgc3RhdGUpOworCQllcnJvciA9IGRldmljZV9zdXNwZW5kKGRldik7CiAKIAkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJaWYgKGVycm9yKSB7CkBAIC04MDQsMTMgKzkxMCwxNyBAQAogCQkJcHV0X2RldmljZShkZXYpOwogCQkJYnJlYWs7CiAJCX0KLQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOwogCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQogCQkJbGlzdF9tb3ZlKCZkZXYtPnBvd2VyLmVudHJ5LCAmbGlzdCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKKwkJaWYgKGFzeW5jX2Vycm9yKQorCQkJYnJlYWs7CiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCBkcG1fbGlzdC5wcmV2KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CisJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gYXN5bmNfZXJyb3I7CiAJaWYgKCFlcnJvcikKIAkJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05MzYsMyArMTA0NiwxNCBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICVwRiByZXR1cm5zICVkXG4iLCBmdW5jdGlvbiwgZm4sIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdCk7CisKKy8qKgorICogZGV2aWNlX3BtX3dhaXRfZm9yX2RldiAtIFdhaXQgZm9yIHN1c3BlbmQvcmVzdW1lIG9mIGEgZGV2aWNlIHRvIGNvbXBsZXRlLgorICogQGRldjogRGV2aWNlIHRvIHdhaXQgZm9yLgorICogQHN1Ym9yZGluYXRlOiBEZXZpY2UgdGhhdCBuZWVkcyB0byB3YWl0IGZvciBAZGV2LgorICovCit2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqc3Vib3JkaW5hdGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkcG1fd2FpdChkZXYsIHN1Ym9yZGluYXRlLT5wb3dlci5hc3luY19zdXNwZW5kKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wbV93YWl0X2Zvcl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCBiOGZhMWFhLi5jMGJkMDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTIsMTAgKzEyLDEwIEBACiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAotLyoKLSAqIG1haW4uYwotICovCisvKiBrZXJuZWwvcG93ZXIvbWFpbi5jICovCitleHRlcm4gaW50IHBtX2FzeW5jX2VuYWJsZWQ7CiAKKy8qIGRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRwbV9saXN0OwkvKiBUaGUgYWN0aXZlIGRldmljZSBsaXN0ICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdG9fZGV2aWNlKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggZjhiMDQ0ZS4uNjI2ZGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0xMDExLDYgKzEwMTEsNTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfZW5hYmxlKTsKIAogLyoqCisgKiBwbV9ydW50aW1lX2ZvcmJpZCAtIEJsb2NrIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBJbmNyZWFzZSB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnQgYW5kIGNsZWFyIGl0cyBwb3dlci5ydW50aW1lX2F1dG8gZmxhZywKKyAqIHNvIHRoYXQgaXQgY2Fubm90IGJlIHN1c3BlbmRlZCBhdCBydW4gdGltZSB1bnRpbCBwbV9ydW50aW1lX2FsbG93KCkgaXMgY2FsbGVkCisgKiBmb3IgaXQuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJaWYgKCFkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0bykKKwkJZ290byBvdXQ7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IGZhbHNlOworCWF0b21pY19pbmMoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpOworCV9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9mb3JiaWQpOworCisvKioKKyAqIHBtX3J1bnRpbWVfYWxsb3cgLSBVbmJsb2NrIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBEZWNyZWFzZSB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnQgYW5kIHNldCBpdHMgcG93ZXIucnVudGltZV9hdXRvIGZsYWcuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2F1dG8pCisJCWdvdG8gb3V0OworCisJZGV2LT5wb3dlci5ydW50aW1lX2F1dG8gPSB0cnVlOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSkKKwkJX19wbV9ydW50aW1lX2lkbGUoZGV2KTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2FsbG93KTsKKworLyoqCiAgKiBwbV9ydW50aW1lX2luaXQgLSBJbml0aWFsaXplIHJ1bi10aW1lIFBNIGZpZWxkcyBpbiBnaXZlbiBkZXZpY2Ugb2JqZWN0LgogICogQGRldjogRGV2aWNlIG9iamVjdCB0byBpbml0aWFsaXplLgogICovCkBAIC0xMDI4LDYgKzEwNzIsNyBAQAogCiAJYXRvbWljX3NldCgmZGV2LT5wb3dlci5jaGlsZF9jb3VudCwgMCk7CiAJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJZGV2LT5wb3dlci5ydW50aW1lX2F1dG8gPSB0cnVlOwogCiAJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKIAlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3lzZnMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCmluZGV4IDU5NmFlZWMuLjg2ZmQ5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCkBAIC00LDkgKzQsMjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlICJwb3dlci5oIgogCiAvKgorICoJY29udHJvbCAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCBydW50aW1lIFBNIHNldHRpbmcgb2YgdGhlIGRldmljZQorICoKKyAqCVJ1bnRpbWUgcG93ZXIgbWFuYWdlbWVudCBvZiBhIGRldmljZSBjYW4gYmUgYmxvY2tlZCB3aXRoIHRoZSBoZWxwIG9mCisgKgl0aGlzIGF0dHJpYnV0ZS4gIEFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IKKyAqCXRoZSBwb3dlci9jb250cm9sIGZpbGU6CisgKgorICoJICsgImF1dG9cbiIgdG8gYWxsb3cgdGhlIGRldmljZSB0byBiZSBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lOworICoJICsgIm9uXG4iIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisgKgorICoJVGhlIGRlZmF1bHQgZm9yIGFsbCBkZXZpY2VzIGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdGhhdCBkZXZpY2VzIG1heSBiZQorICoJc3ViamVjdCB0byBhdXRvbWF0aWMgcG93ZXIgbWFuYWdlbWVudCwgZGVwZW5kaW5nIG9uIHRoZWlyIGRyaXZlcnMuCisgKglDaGFuZ2luZyB0aGlzIGF0dHJpYnV0ZSB0byAib24iIHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBwb3dlciBtYW5hZ2luZworICoJdGhlIGRldmljZSBhdCBydW4gdGltZS4gIERvaW5nIHRoYXQgd2hpbGUgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQgY2F1c2VzCisgKglpdCB0byBiZSB3b2tlbiB1cC4KKyAqCiAgKgl3YWtldXAgLSBSZXBvcnQvY2hhbmdlIGN1cnJlbnQgd2FrZXVwIG9wdGlvbiBmb3IgZGV2aWNlCiAgKgogICoJU29tZSBkZXZpY2VzIHN1cHBvcnQgIndha2V1cCIgZXZlbnRzLCB3aGljaCBhcmUgaGFyZHdhcmUgc2lnbmFscwpAQCAtMzgsMTEgKzU0LDYxIEBACiAgKgl3YWtldXAgZXZlbnRzIGludGVybmFsbHkgKHVubGVzcyB0aGV5IGFyZSBkaXNhYmxlZCksIGtlZXBpbmcKICAqCXRoZWlyIGhhcmR3YXJlIGluIGxvdyBwb3dlciBtb2RlcyB3aGVuZXZlciB0aGV5J3JlIHVudXNlZC4gIFRoaXMKICAqCXNhdmVzIHJ1bnRpbWUgcG93ZXIsIHdpdGhvdXQgcmVxdWlyaW5nIHN5c3RlbS13aWRlIHNsZWVwIHN0YXRlcy4KKyAqCisgKglhc3luYyAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCBhc3luYyBzdXNwZW5kIHNldHRpbmcgZm9yIHRoZSBkZXZpY2UKKyAqCisgKglBc3luY2hyb25vdXMgc3VzcGVuZCBhbmQgcmVzdW1lIG9mIHRoZSBkZXZpY2UgZHVyaW5nIHN5c3RlbS13aWRlIHBvd2VyCisgKglzdGF0ZSB0cmFuc2l0aW9ucyBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nICJlbmFibGVkIiB0byB0aGlzIGZpbGUuCisgKglBbmFsb2dvdXNseSwgaWYgImRpc2FibGVkIiBpcyB3cml0dGVuIHRvIHRoaXMgZmlsZSwgdGhlIGRldmljZSB3aWxsIGJlCisgKglzdXNwZW5kZWQgYW5kIHJlc3VtZWQgc3luY2hyb25vdXNseS4KKyAqCisgKglBbGwgZGV2aWNlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHBvd2VyL2FzeW5jOgorICoKKyAqCSArICJlbmFibGVkXG4iIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lIG9mIHRoZSBkZXZpY2U7CisgKgkgKyAiZGlzYWJsZWRcbiIgdG8gZm9yYmlkIGl0OworICoKKyAqCU5PVEU6IEl0IGdlbmVyYWxseSBpcyB1bnNhZmUgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWUKKyAqCW9mIGEgZGV2aWNlIHVubGVzcyBpdCBpcyBjZXJ0YWluIHRoYXQgYWxsIG9mIHRoZSBQTSBkZXBlbmRlbmNpZXMgb2YgdGhlCisgKglkZXZpY2UgYXJlIGtub3duIHRvIHRoZSBQTSBjb3JlLiAgSG93ZXZlciwgZm9yIHNvbWUgZGV2aWNlcyB0aGlzCisgKglhdHRyaWJ1dGUgaXMgc2V0IHRvICJlbmFibGVkIiBieSBidXMgdHlwZSBjb2RlIG9yIGRldmljZSBkcml2ZXJzIGFuZCBpbgorICoJdGhhdCBjYXNlcyBpdCBzaG91bGQgYmUgc2FmZSB0byBsZWF2ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KICAqLwogCiBzdGF0aWMgY29uc3QgY2hhciBlbmFibGVkW10gPSAiZW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBkaXNhYmxlZFtdID0gImRpc2FibGVkIjsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgY29uc3QgY2hhciBjdHJsX2F1dG9bXSA9ICJhdXRvIjsKK3N0YXRpYyBjb25zdCBjaGFyIGN0cmxfb25bXSA9ICJvbiI7CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyb2xfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwKKwkJCQlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA/IGN0cmxfYXV0byA6IGN0cmxfb24pOworfQorCitzdGF0aWMgc3NpemVfdCBjb250cm9sX3N0b3JlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgbikKK3sKKwljaGFyICpjcDsKKwlpbnQgbGVuID0gbjsKKworCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJaWYgKGNwKQorCQlsZW4gPSBjcCAtIGJ1ZjsKKwlpZiAobGVuID09IHNpemVvZiBjdHJsX2F1dG8gLSAxICYmIHN0cm5jbXAoYnVmLCBjdHJsX2F1dG8sIGxlbikgPT0gMCkKKwkJcG1fcnVudGltZV9hbGxvdyhkZXYpOworCWVsc2UgaWYgKGxlbiA9PSBzaXplb2YgY3RybF9vbiAtIDEgJiYgc3RybmNtcChidWYsIGN0cmxfb24sIGxlbikgPT0gMCkKKwkJcG1fcnVudGltZV9mb3JiaWQoZGV2KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJvbCwgMDY0NCwgY29udHJvbF9zaG93LCBjb250cm9sX3N0b3JlKTsKKyNlbmRpZgorCiBzdGF0aWMgc3NpemVfdAogd2FrZV9zaG93KHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICogYnVmKQogewpAQCAtNzcsOSArMTQzLDQzIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih3YWtldXAsIDA2NDQsIHdha2Vfc2hvdywgd2FrZV9zdG9yZSk7CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcKK3N0YXRpYyBzc2l6ZV90IGFzeW5jX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJZGV2aWNlX2FzeW5jX3N1c3BlbmRfZW5hYmxlZChkZXYpID8gZW5hYmxlZCA6IGRpc2FibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgYXN5bmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJY2hhciAqY3A7CisJaW50IGxlbiA9IG47CisKKwljcCA9IG1lbWNocihidWYsICdcbicsIG4pOworCWlmIChjcCkKKwkJbGVuID0gY3AgLSBidWY7CisJaWYgKGxlbiA9PSBzaXplb2YgZW5hYmxlZCAtIDEgJiYgc3RybmNtcChidWYsIGVuYWJsZWQsIGxlbikgPT0gMCkKKwkJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGRldik7CisJZWxzZSBpZiAobGVuID09IHNpemVvZiBkaXNhYmxlZCAtIDEgJiYgc3RybmNtcChidWYsIGRpc2FibGVkLCBsZW4pID09IDApCisJCWRldmljZV9kaXNhYmxlX2FzeW5jX3N1c3BlbmQoZGV2KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYXN5bmMsIDA2NDQsIGFzeW5jX3Nob3csIGFzeW5jX3N0b3JlKTsKKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcgKi8KIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBwb3dlcl9hdHRyc1tdID0geworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJJmRldl9hdHRyX2NvbnRyb2wuYXR0ciwKKyNlbmRpZgogCSZkZXZfYXR0cl93YWtldXAuYXR0ciwKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcKKwkmZGV2X2F0dHJfYXN5bmMuYXR0ciwKKyNlbmRpZgogCU5VTEwsCiB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG1fYXR0cl9ncm91cCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IGNlMWZhOTIuLjQ1OWYxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtMjUzNCw4ICsyNTM0LDggQEAKICAgCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Cb3VuY2VCdWZmZXJMaW1pdCk7CiAgIAlSZXF1ZXN0UXVldWUtPnF1ZXVlZGF0YSA9IENvbnRyb2xsZXI7CiAgIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKFJlcXVlc3RRdWV1ZSwgQ29udHJvbGxlci0+RHJpdmVyU2NhdHRlckdhdGhlckxpbWl0KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Ecml2ZXJTY2F0dGVyR2F0aGVyTGltaXQpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPk1heEJsb2Nrc1BlckNvbW1hbmQpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Ecml2ZXJTY2F0dGVyR2F0aGVyTGltaXQpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPk1heEJsb2Nrc1BlckNvbW1hbmQpOwogCWRpc2stPnF1ZXVlID0gUmVxdWVzdFF1ZXVlOwogCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAicmQvYyVkZCVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlciwgbik7CiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKQEAgLTcxMzQsNyArNzEzNCw3IEBACiAJLk1lbW9yeVdpbmRvd1NpemUgPQlEQUM5NjBfUERfUmVnaXN0ZXJXaW5kb3dTaXplLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIERBQzk2MF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIERBQzk2MF9pZF90YWJsZVtdID0gewogCXsKIAkJLnZlbmRvciAJPSBQQ0lfVkVORE9SX0lEX01ZTEVYLAogCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0dFTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggYTVhZjFkNi4uZTM1Y2Y1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE0NzAsOCArMTQ3MCw2IEBACiAKIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCiB7Ci0gCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlEUFJJTlQoKCJkb19mZF9yZXF1ZXN0IGZvciBwaWQgJWRcbiIsY3VycmVudC0+cGlkKSk7CiAJd2hpbGUoIGZkY19idXN5ICkgc2xlZXBfb24oICZmZGNfd2FpdCApOwogCWZkY19idXN5ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYnJkLmMgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCmluZGV4IDRmNjg4NDM0Li5jNmRkZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2JyZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYnJkLmMKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQlnb3RvIG91dF9mcmVlX2RldjsKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KGJyZC0+YnJkX3F1ZXVlLCBicmRfbWFrZV9yZXF1ZXN0KTsKIAlibGtfcXVldWVfb3JkZXJlZChicmQtPmJyZF9xdWV1ZSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhicmQtPmJyZF9xdWV1ZSwgMTAyNCk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGJyZC0+YnJkX3F1ZXVlLCAxMDI0KTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJyZC0+YnJkX3F1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAKIAlkaXNrID0gYnJkLT5icmRfZGlzayA9IGFsbG9jX2Rpc2soMSA8PCBwYXJ0X3NoaWZ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA5MjkxNjE0Li45ZTNhZjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0yNTcsNiArMjU3LDc5IEBACiAJaGxpc3RfZGVsX2luaXQoJmMtPmxpc3QpOwogfQogCitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3QsCisJaW50IG5yX2NtZHMpCit7CisJaW50IGk7CisKKwlpZiAoIWNtZF9zZ19saXN0KQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG5yX2NtZHM7IGkrKykgeworCQlrZnJlZShjbWRfc2dfbGlzdFtpXSk7CisJCWNtZF9zZ19saXN0W2ldID0gTlVMTDsKKwl9CisJa2ZyZWUoY21kX3NnX2xpc3QpOworfQorCitzdGF0aWMgU0dEZXNjcmlwdG9yX3N0cnVjdCAqKmNjaXNzX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcygKKwljdGxyX2luZm9fdCAqaCwgaW50IGNoYWluc2l6ZSwgaW50IG5yX2NtZHMpCit7CisJaW50IGo7CisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqKmNtZF9zZ19saXN0OworCisJaWYgKGNoYWluc2l6ZSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWNtZF9zZ19saXN0ID0ga21hbGxvYyhzaXplb2YoKmNtZF9zZ19saXN0KSAqIG5yX2NtZHMsIEdGUF9LRVJORUwpOworCWlmICghY21kX3NnX2xpc3QpCisJCXJldHVybiBOVUxMOworCisJLyogQnVpbGQgdXAgY2hhaW4gYmxvY2tzIGZvciBlYWNoIGNvbW1hbmQgKi8KKwlmb3IgKGogPSAwOyBqIDwgbnJfY21kczsgaisrKSB7CisJCS8qIE5lZWQgYSBibG9jayBvZiBjaGFpbnNpemVkIHMvZyBlbGVtZW50cy4gKi8KKwkJY21kX3NnX2xpc3Rbal0gPSBrbWFsbG9jKChjaGFpbnNpemUgKgorCQkJc2l6ZW9mKCpjbWRfc2dfbGlzdFtqXSkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjbWRfc2dfbGlzdFtqXSkgeworCQkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiQ2Fubm90IGdldCBtZW1vcnkgIgorCQkJCSJmb3Igcy9nIGNoYWlucy5cbiIpOworCQkJZ290byBjbGVhbjsKKwkJfQorCX0KKwlyZXR1cm4gY21kX3NnX2xpc3Q7CitjbGVhbjoKKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhjbWRfc2dfbGlzdCwgbnJfY21kcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGNjaXNzX3VubWFwX3NnX2NoYWluX2Jsb2NrKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCit7CisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqY2hhaW5fc2c7CisJdTY0Yml0IHRlbXA2NDsKKworCWlmIChjLT5IZWFkZXIuU0dUb3RhbCA8PSBoLT5tYXhfY21kX3NnZW50cmllcykKKwkJcmV0dXJuOworCisJY2hhaW5fc2cgPSAmYy0+U0dbaC0+bWF4X2NtZF9zZ2VudHJpZXMgLSAxXTsKKwl0ZW1wNjQudmFsMzIubG93ZXIgPSBjaGFpbl9zZy0+QWRkci5sb3dlcjsKKwl0ZW1wNjQudmFsMzIudXBwZXIgPSBjaGFpbl9zZy0+QWRkci51cHBlcjsKKwlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNoYWluX3NnLT5MZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworfQorCitzdGF0aWMgdm9pZCBjY2lzc19tYXBfc2dfY2hhaW5fYmxvY2soY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYywKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjaGFpbl9ibG9jaywgaW50IGxlbikKK3sKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjaGFpbl9zZzsKKwl1NjRiaXQgdGVtcDY0OworCisJY2hhaW5fc2cgPSAmYy0+U0dbaC0+bWF4X2NtZF9zZ2VudHJpZXMgLSAxXTsKKwljaGFpbl9zZy0+RXh0ID0gQ0NJU1NfU0dfQ0hBSU47CisJY2hhaW5fc2ctPkxlbiA9IGxlbjsKKwl0ZW1wNjQudmFsID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgY2hhaW5fYmxvY2ssIGxlbiwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwljaGFpbl9zZy0+QWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKKwljaGFpbl9zZy0+QWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKK30KKwogI2luY2x1ZGUgImNjaXNzX3Njc2kuYyIJCS8qIEZvciBTQ1NJIHRhcGUgc3VwcG9ydCAqLwogCiBzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLApAQCAtMTM0NCwyNiArMTQxNywyNyBAQAogCQkJCWtmcmVlKGJ1ZmYpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQotCQkJLy8gRmlsbCBpbiB0aGUgY29tbWFuZCB0eXBlCisJCQkvKiBGaWxsIGluIHRoZSBjb21tYW5kIHR5cGUgKi8KIAkJCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7Ci0JCQkvLyBGaWxsIGluIENvbW1hbmQgSGVhZGVyCi0JCQljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CS8vIHVudXNlZCBpbiBzaW1wbGUgbW9kZQotCQkJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApCS8vIGJ1ZmZlciB0byBmaWxsCisJCQkvKiBGaWxsIGluIENvbW1hbmQgSGVhZGVyICovCisJCQljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCisJCQlpZiAoaW9jb21tYW5kLmJ1Zl9zaXplID4gMCkgLyogYnVmZmVyIHRvIGZpbGwgKi8KIAkJCXsKIAkJCQljLT5IZWFkZXIuU0dMaXN0ID0gMTsKIAkJCQljLT5IZWFkZXIuU0dUb3RhbCA9IDE7Ci0JCQl9IGVsc2UJLy8gbm8gYnVmZmVycyB0byBmaWxsCisJCQl9IGVsc2UgLyogbm8gYnVmZmVycyB0byBmaWxsICovCiAJCQl7CiAJCQkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7CiAJCQkJYy0+SGVhZGVyLlNHVG90YWwgPSAwOwogCQkJfQogCQkJYy0+SGVhZGVyLkxVTiA9IGlvY29tbWFuZC5MVU5faW5mbzsKLQkJCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOwkvLyB1c2UgdGhlIGtlcm5lbCBhZGRyZXNzIHRoZSBjbWQgYmxvY2sgZm9yIHRhZworCQkJLyogdXNlIHRoZSBrZXJuZWwgYWRkcmVzcyB0aGUgY21kIGJsb2NrIGZvciB0YWcgKi8KKwkJCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOwogCi0JCQkvLyBGaWxsIGluIFJlcXVlc3QgYmxvY2sKKwkJCS8qIEZpbGwgaW4gUmVxdWVzdCBibG9jayAqLwogCQkJYy0+UmVxdWVzdCA9IGlvY29tbWFuZC5SZXF1ZXN0OwogCi0JCQkvLyBGaWxsIGluIHRoZSBzY2F0dGVyIGdhdGhlciBpbmZvcm1hdGlvbgorCQkJLyogRmlsbCBpbiB0aGUgc2NhdHRlciBnYXRoZXIgaW5mb3JtYXRpb24gKi8KIAkJCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7CiAJCQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGhvc3QtPnBkZXYsIGJ1ZmYsCiAJCQkJCWlvY29tbWFuZC5idWZfc2l6ZSwKQEAgLTEzNzEsNyArMTQ0NSw3IEBACiAJCQkJYy0+U0dbMF0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKIAkJCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCQkJCWMtPlNHWzBdLkxlbiA9IGlvY29tbWFuZC5idWZfc2l6ZTsKLQkJCQljLT5TR1swXS5FeHQgPSAwOwkvLyB3ZSBhcmUgbm90IGNoYWluaW5nCisJCQkJYy0+U0dbMF0uRXh0ID0gMDsgIC8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KIAkJCX0KIAkJCWMtPndhaXRpbmcgPSAmd2FpdDsKIApAQCAtMTY3MCwxNCArMTc0NCw5IEBACiAJLyogdW5tYXAgdGhlIERNQSBtYXBwaW5nIGZvciBhbGwgdGhlIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzICovCiAJZm9yIChpID0gMDsgaSA8IGNtZC0+SGVhZGVyLlNHTGlzdDsgaSsrKSB7CiAJCWlmIChjdXJyX3NnW3NnX2luZGV4XS5FeHQgPT0gQ0NJU1NfU0dfQ0hBSU4pIHsKLQkJCXRlbXA2NC52YWwzMi5sb3dlciA9IGNtZC0+U0dbaV0uQWRkci5sb3dlcjsKLQkJCXRlbXA2NC52YWwzMi51cHBlciA9IGNtZC0+U0dbaV0uQWRkci51cHBlcjsKLQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShoLT5wZGV2LCB0ZW1wNjQudmFsLAotCQkJCQkJY21kLT5TR1tpXS5MZW4sIGRkaXIpOwotCQkJcGNpX3VubWFwX3NpbmdsZShoLT5wZGV2LCB0ZW1wNjQudmFsLAotCQkJCQkJY21kLT5TR1tpXS5MZW4sIGRkaXIpOworCQkJY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soaCwgY21kKTsKIAkJCS8qIFBvaW50IHRvIHRoZSBuZXh0IGJsb2NrICovCi0JCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbY21kLT5jbWRpbmRleF0tPnNnY2hhaW47CisJCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbY21kLT5jbWRpbmRleF07CiAJCQlzZ19pbmRleCA9IDA7CiAJCX0KIAkJdGVtcDY0LnZhbDMyLmxvd2VyID0gY3Vycl9zZ1tzZ19pbmRleF0uQWRkci5sb3dlcjsKQEAgLTE3OTYsMTIgKzE4NjUsOSBAQAogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGlzay0+cXVldWUsIGgtPnBkZXYtPmRtYV9tYXNrKTsKIAogCS8qIFRoaXMgaXMgYSBoYXJkd2FyZSBpbXBvc2VkIGxpbWl0LiAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoZGlzay0+cXVldWUsIGgtPm1heHNnZW50cmllcyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhkaXNrLT5xdWV1ZSwgaC0+bWF4c2dlbnRyaWVzKTsKIAotCS8qIFRoaXMgaXMgYSBsaW1pdCBpbiB0aGUgZHJpdmVyIGFuZCBjb3VsZCBiZSBlbGltaW5hdGVkLiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhkaXNrLT5xdWV1ZSwgaC0+bWF4c2dlbnRyaWVzKTsKLQotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgaC0+Y2Npc3NfbWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgaC0+Y2Npc3NfbWF4X3NlY3RvcnMpOwogCiAJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShkaXNrLT5xdWV1ZSwgY2Npc3Nfc29mdGlycV9kb25lKTsKIApAQCAtMjQyNSw3ICsyNDkxLDcgQEAKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBjbWQ7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IChzaXplID4+IDI0KSAmIDB4RkY7CS8vTVNCCisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IChzaXplID4+IDI0KSAmIDB4RkY7IC8qIE1TQiAqLwogCQkJYy0+UmVxdWVzdC5DREJbN10gPSAoc2l6ZSA+PiAxNikgJiAweEZGOwogCQkJYy0+UmVxdWVzdC5DREJbOF0gPSAoc2l6ZSA+PiA4KSAmIDB4RkY7CiAJCQljLT5SZXF1ZXN0LkNEQls5XSA9IHNpemUgJiAweEZGOwpAQCAtMjY5NCw3ICsyNzYwLDcgQEAKIAkJCSAgICAgICAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkLCB2b2x1bWUgIgogCQkJICAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgZ2VvbWV0cnlcbiIpOwogCQkJZHJ2LT5oZWFkcyA9IDI1NTsKLQkJCWRydi0+c2VjdG9ycyA9IDMyOwkvLyBTZWN0b3JzIHBlciB0cmFjaworCQkJZHJ2LT5zZWN0b3JzID0gMzI7CS8qIFNlY3RvcnMgcGVyIHRyYWNrICovCiAJCQlkcnYtPmN5bGluZGVycyA9IHRvdGFsX3NpemUgKyAxOwogCQkJZHJ2LT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOwogCQl9IGVsc2UgewpAQCAtMzA4Miw3ICszMTQ4LDYgQEAKIAlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjdXJyX3NnOwogCWRyaXZlX2luZm9fc3RydWN0ICpkcnY7CiAJaW50IGksIGRpcjsKLQlpbnQgbnNlZyA9IDA7CiAJaW50IHNnX2luZGV4ID0gMDsKIAlpbnQgY2hhaW5lZCA9IDA7CiAKQEAgLTMxMTIsMTkgKzMxNzcsMTkgQEAKIAogCS8qIGZpbGwgaW4gdGhlIHJlcXVlc3QgKi8KIAlkcnYgPSBjcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOwkvLyB1bnVzZWQgaW4gc2ltcGxlIG1vZGUKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CS8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLwogCS8qIGdvdCBjb21tYW5kIGZyb20gcG9vbCwgc28gdXNlIHRoZSBjb21tYW5kIGJsb2NrIGluZGV4IGluc3RlYWQgKi8KIAkvKiBmb3IgZGlyZWN0IGxvb2t1cHMuICovCiAJLyogVGhlIGZpcnN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGNvbnRyb2xsZXIgZXJyb3IgcmVwb3J0aW5nLiAqLwogCWMtPkhlYWRlci5UYWcubG93ZXIgPSAoYy0+Y21kaW5kZXggPDwgMyk7CiAJYy0+SGVhZGVyLlRhZy5sb3dlciB8PSAweDA0OwkvKiBmbGFnIGZvciBkaXJlY3QgbG9va3VwLiAqLwogCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGRydi0+THVuSUQpKTsKLQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvLyAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7Ci0JYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgorCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTA7CS8qIDEyIGJ5dGUgY29tbWFuZHMgbm90IGluIEZXIHlldDsgKi8KKwljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOwkvKiBJdCBpcyBhIGNvbW1hbmQuICovCiAJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwogCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPQogCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBYRkVSX1JFQUQgOiBYRkVSX1dSSVRFOwotCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CS8vIERvbid0IHRpbWUgb3V0CisJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsJLyogRG9uJ3QgdGltZSBvdXQgKi8KIAljLT5SZXF1ZXN0LkNEQlswXSA9CiAJICAgIChycV9kYXRhX2RpcihjcmVxKSA9PSBSRUFEKSA/IGgtPmNjaXNzX3JlYWQgOiBoLT5jY2lzc193cml0ZTsKIAlzdGFydF9ibGsgPSBibGtfcnFfcG9zKGNyZXEpOwpAQCAtMzE0OSwxMyArMzIxNCw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNlZzsgaSsrKSB7CiAJCWlmICgoKHNnX2luZGV4KzEpID09IChoLT5tYXhfY21kX3NnZW50cmllcykpICYmCiAJCQkhY2hhaW5lZCAmJiAoKHNlZyAtIGkpID4gMSkpIHsKLQkJCW5zZWcgPSBzZWcgLSBpOwotCQkJY3Vycl9zZ1tzZ19pbmRleF0uTGVuID0gKG5zZWcpICoKLQkJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpOwotCQkJY3Vycl9zZ1tzZ19pbmRleF0uRXh0ID0gQ0NJU1NfU0dfQ0hBSU47Ci0KIAkJCS8qIFBvaW50IHRvIG5leHQgY2hhaW4gYmxvY2suICovCi0JCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ2NoYWluOworCQkJY3Vycl9zZyA9IGgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XTsKIAkJCXNnX2luZGV4ID0gMDsKIAkJCWNoYWluZWQgPSAxOwogCQl9CkBAIC0zMTY2LDMxICszMjI2LDEyIEBACiAJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CiAJCWN1cnJfc2dbc2dfaW5kZXhdLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCi0KIAkJKytzZ19pbmRleDsKIAl9Ci0KLQlpZiAoY2hhaW5lZCkgewotCQlpbnQgbGVuOwotCQljdXJyX3NnID0gYy0+U0c7Ci0JCXNnX2luZGV4ID0gaC0+bWF4X2NtZF9zZ2VudHJpZXMgLSAxOwotCQlsZW4gPSBjdXJyX3NnW3NnX2luZGV4XS5MZW47Ci0JCS8qIFNldHVwIHBvaW50ZXIgdG8gbmV4dCBjaGFpbiBibG9jay4KLQkJICogRmlsbCBvdXQgbGFzdCBlbGVtZW50IGluIGN1cnJlbnQgY2hhaW4KLQkJICogYmxvY2sgd2l0aCBhZGRyZXNzIG9mIG5leHQgY2hhaW4gYmxvY2suCi0JCSAqLwotCQl0ZW1wNjQudmFsID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwKLQkJCQkJaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ2NoYWluLAotCQkJCQlsZW4sIGRpcik7Ci0KLQkJaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ19jaGFpbl9kbWEgPSB0ZW1wNjQudmFsOwotCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoLT5wZGV2LAotCQkJCWgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XS0+c2dfY2hhaW5fZG1hLAotCQkJCWxlbiwgZGlyKTsKLQl9CisJaWYgKGNoYWluZWQpCisJCWNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhoLCBjLCBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF0sCisJCQkoc2VnIC0gKGgtPm1heF9jbWRfc2dlbnRyaWVzIC0gMSkpICoKKwkJCQlzaXplb2YoU0dEZXNjcmlwdG9yX3N0cnVjdCkpOwogCiAJLyogdHJhY2sgaG93IG1hbnkgU0cgZW50cmllcyB3ZSBhcmUgdXNpbmcgKi8KIAlpZiAoc2VnID4gaC0+bWF4U0cpCkBAIC0zMjA5LDExICszMjUwLDExIEBACiAJaWYgKGxpa2VseShibGtfZnNfcmVxdWVzdChjcmVxKSkpIHsKIAkJaWYoaC0+Y2Npc3NfcmVhZCA9PSBDQ0lTU19SRUFEXzEwKSB7CiAJCQljLT5SZXF1ZXN0LkNEQlsxXSA9IDA7Ci0JCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsJLy9NU0IKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOyAvKiBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdID0gKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbNF0gPSAoc3RhcnRfYmxrID4+IDgpICYgMHhmZjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gc3RhcnRfYmxrICYgMHhmZjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gMDsJLy8gKHNlY3QgPj4gMjQpICYgMHhmZjsgTVNCCisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IDA7IC8qIChzZWN0ID4+IDI0KSAmIDB4ZmY7IE1TQiAqLwogCQkJYy0+UmVxdWVzdC5DREJbN10gPSAoYmxrX3JxX3NlY3RvcnMoY3JlcSkgPj4gOCkgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbOF0gPSBibGtfcnFfc2VjdG9ycyhjcmVxKSAmIDB4ZmY7CiAJCQljLT5SZXF1ZXN0LkNEQls5XSA9IGMtPlJlcXVlc3QuQ0RCWzExXSA9IGMtPlJlcXVlc3QuQ0RCWzEyXSA9IDA7CkBAIC0zMjIyLDcgKzMyNjMsNyBAQAogCiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDE2OwogCQkJYy0+UmVxdWVzdC5DREJbMV09IDA7Ci0JCQljLT5SZXF1ZXN0LkNEQlsyXT0gKHVwcGVyMzIgPj4gMjQpICYgMHhmZjsJLy9NU0IKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdPSAodXBwZXIzMiA+PiAyNCkgJiAweGZmOyAvKiBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdPSAodXBwZXIzMiA+PiAxNikgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbNF09ICh1cHBlcjMyID4+ICA4KSAmIDB4ZmY7CiAJCQljLT5SZXF1ZXN0LkNEQls1XT0gdXBwZXIzMiAmIDB4ZmY7CkBAIC00MjQwLDM3ICs0MjgxLDEwIEBACiAJCQlnb3RvIGNsZWFuNDsKIAkJfQogCX0KLQloYmFbaV0tPmNtZF9zZ19saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IENtZF9zZ19saXN0ICopICoKLQkJCQkJCWhiYVtpXS0+bnJfY21kcywKLQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzJWQ6IENhbm5vdCBnZXQgbWVtb3J5IGZvciAiCi0JCQkicy9nIGNoYWluaW5nLlxuIiwgaSk7CisJaGJhW2ldLT5jbWRfc2dfbGlzdCA9IGNjaXNzX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0sCisJCWhiYVtpXS0+Y2hhaW5zaXplLCBoYmFbaV0tPm5yX2NtZHMpOworCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdCAmJiBoYmFbaV0tPmNoYWluc2l6ZSA+IDApCiAJCWdvdG8gY2xlYW40OwotCX0KLQkvKiBCdWlsZCB1cCBjaGFpbiBibG9ja3MgZm9yIGVhY2ggY29tbWFuZCAqLwotCWlmIChoYmFbaV0tPmNoYWluc2l6ZSA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IGhiYVtpXS0+bnJfY21kczsgaisrKSB7Ci0JCQloYmFbaV0tPmNtZF9zZ19saXN0W2pdID0KLQkJCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IENtZF9zZ19saXN0KSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogQ2Fubm90IGdldCBtZW1vcnkgIgotCQkJCQkiZm9yIGNoYWluIGJsb2NrLlxuIiwgaSk7Ci0JCQkJZ290byBjbGVhbjQ7Ci0JCQl9Ci0JCQkvKiBOZWVkIGEgYmxvY2sgb2YgY2hhaW5zaXplZCBzL2cgZWxlbWVudHMuICovCi0JCQloYmFbaV0tPmNtZF9zZ19saXN0W2pdLT5zZ2NoYWluID0KLQkJCQkJa21hbGxvYygoaGJhW2ldLT5jaGFpbnNpemUgKgotCQkJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFoYmFbaV0tPmNtZF9zZ19saXN0W2pdLT5zZ2NoYWluKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzcyVkOiBDYW5ub3QgZ2V0IG1lbW9yeSAiCi0JCQkJCSJmb3Igcy9nIGNoYWluc1xuIiwgaSk7Ci0JCQkJZ290byBjbGVhbjQ7Ci0JCQl9Ci0JCX0KLQl9CiAKIAlzcGluX2xvY2tfaW5pdCgmaGJhW2ldLT5sb2NrKTsKIApAQCAtNDMyOSwxNiArNDM0Myw3IEBACiAJZm9yIChrID0gMDsgayA8IGhiYVtpXS0+bnJfY21kczsgaysrKQogCQlrZnJlZShoYmFbaV0tPnNjYXR0ZXJfbGlzdFtrXSk7CiAJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3QpOwotCS8qIE9ubHkgZnJlZSB1cCBleHRyYSBzL2cgbGlzdHMgaWYgY29udHJvbGxlciBzdXBwb3J0cyB0aGVtICovCi0JaWYgKGhiYVtpXS0+Y2hhaW5zaXplID4gMCkgewotCQlmb3IgKGogPSAwOyBqIDwgaGJhW2ldLT5ucl9jbWRzOyBqKyspIHsKLQkJCWlmIChoYmFbaV0tPmNtZF9zZ19saXN0W2pdKSB7Ci0JCQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXS0+c2djaGFpbik7Ci0JCQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSk7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdCk7Ci0JfQorCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKGhiYVtpXS0+Y21kX3NnX2xpc3QsIGhiYVtpXS0+bnJfY21kcyk7CiAJaWYgKGhiYVtpXS0+Y21kX3Bvb2wpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wZGV2LAogCQkJCSAgICBoYmFbaV0tPm5yX2NtZHMgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwKQEAgLTQ0NTYsMTYgKzQ0NjEsNyBAQAogCWZvciAoaiA9IDA7IGogPCBoYmFbaV0tPm5yX2NtZHM7IGorKykKIAkJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3Rbal0pOwogCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0KTsKLQkvKiBPbmx5IGZyZWUgdXAgZXh0cmEgcy9nIGxpc3RzIGlmIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlbSAqLwotCWlmIChoYmFbaV0tPmNoYWluc2l6ZSA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IGhiYVtpXS0+bnJfY21kczsgaisrKSB7Ci0JCQlpZiAoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSkgewotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0tPnNnY2hhaW4pOwotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0pOwotCQkJfQotCQl9Ci0JCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3QpOwotCX0KKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0tPmNtZF9zZ19saXN0LCBoYmFbaV0tPm5yX2NtZHMpOwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCkBAIC00NDk4LDcgKzQ0OTQsNyBAQAogCSAqIGJvdW5kYXJ5LiBHaXZlbiB0aGF0IHdlIHVzZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIHRvIGFsbG9jYXRlIGFuCiAJICogYXJyYXkgb2YgdGhlbSwgdGhlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYnl0ZXMuCiAJICovCi0JQlVJTERfQlVHX09OKHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpICUgOCk7CisJQlVJTERfQlVHX09OKHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpICUgQ09NTUFORExJU1RfQUxJR05NRU5UKTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaAppbmRleCAxZDk1ZGIyLi5jNWQ0MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCkBAIC01NSwxOCArNTUsMTIgQEAKIAljaGFyIGRldmljZV9pbml0aWFsaXplZDsgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGRldiBpcyBpbml0aWFsaXplZCAqLwogfSBkcml2ZV9pbmZvX3N0cnVjdDsKIAotc3RydWN0IENtZF9zZ19saXN0IHsKLQlTR0Rlc2NyaXB0b3Jfc3RydWN0CSpzZ2NoYWluOwotCWRtYV9hZGRyX3QJCXNnX2NoYWluX2RtYTsKLQlpbnQJCQljaGFpbl9ibG9ja19zaXplOwotfTsKLQogc3RydWN0IGN0bHJfaW5mbwogewogCWludAljdGxyOwogCWNoYXIJZGV2bmFtZVs4XTsKIAljaGFyICAgICpwcm9kdWN0X25hbWU7Ci0JY2hhcglmaXJtX3Zlcls0XTsgLy8gRmlybXdhcmUgdmVyc2lvbiAKKwljaGFyCWZpcm1fdmVyWzRdOyAvKiBGaXJtd2FyZSB2ZXJzaW9uICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJX191MzIJYm9hcmRfaWQ7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKQEAgLTg5LDcgKzgzLDcgQEAKIAlpbnQJbWF4c2dlbnRyaWVzOwogCWludAljaGFpbnNpemU7CiAJaW50CW1heF9jbWRfc2dlbnRyaWVzOwotCXN0cnVjdCBDbWRfc2dfbGlzdCAqKmNtZF9zZ19saXN0OworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjbWRfc2dfbGlzdDsKIAogIwlkZWZpbmUgRE9PUkJFTExfSU5UCTAKICMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMQpAQCAtMTAzLDcgKzk3LDcgQEAKIAlCWVRFCWNjaXNzX3dyaXRlOwogCUJZVEUJY2Npc3NfcmVhZF9jYXBhY2l0eTsKIAotCS8vIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggbG9naWNhbCB2b2x1bWUKKwkvKiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxvZ2ljYWwgdm9sdW1lICovCiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydltDSVNTX01BWF9MVU5dOwogCiAJc3RydWN0IGFjY2Vzc19tZXRob2QgYWNjZXNzOwpAQCAtMTE2LDcgKzExMCw3IEBACiAJdW5zaWduZWQgaW50IG1heFNHOwogCXNwaW5sb2NrX3QgbG9jazsKIAotCS8vKiBwb2ludGVycyB0byBjb21tYW5kIGFuZCBlcnJvciBpbmZvIHBvb2wgKi8gCisJLyogcG9pbnRlcnMgdG8gY29tbWFuZCBhbmQgZXJyb3IgaW5mbyBwb29sICovCiAJQ29tbWFuZExpc3Rfc3RydWN0IAkqY21kX3Bvb2w7CiAJZG1hX2FkZHJfdAkJY21kX3Bvb2xfZGhhbmRsZTsgCiAJRXJyb3JJbmZvX3N0cnVjdCAJKmVycmluZm9fcG9vbDsKQEAgLTEzNCwxMiArMTI4LDEwIEBACiAJKi8KIAlpbnQJCQluZXh0X3RvX3J1bjsKIAotCS8vIERpc2sgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHBhc3MgYmFjaworCS8qIERpc2sgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHBhc3MgYmFjayAqLwogCXN0cnVjdCBnZW5kaXNrICAgKmdlbmRpc2tbQ0lTU19NQVhfTFVOXTsKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQl2b2lkICpzY3NpX2N0bHI7IC8qIHB0ciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBzY3NpIHJlbGF0ZWQgc3R1ZmYgKi8KLQkvKiBsaXN0IG9mIGJsb2NrIHNpZGUgY29tbWFuZHMgdGhlIHNjc2kgZXJyb3IgaGFuZGxpbmcgc3Vja2VkIHVwICovCi0JLyogYW5kIHNhdmVkIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNjc2lfY3RscjsKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgYWxpdmU7CiAJc3RydWN0IGxpc3RfaGVhZCBzY2FuX2xpc3Q7CkBAIC0zMTUsNCArMzA3LDMgQEAKICNkZWZpbmUgQ0NJU1NfTE9DSyhpKQkoJmhiYVtpXS0+bG9jaykKIAogI2VuZGlmIC8qIENDSVNTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKaW5kZXggNmFmYTcwMC4uZTYyNGZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCkBAIC0xLDMxICsxLDE2IEBACiAjaWZuZGVmIENDSVNTX0NNRF9ICiAjZGVmaW5lIENDSVNTX0NNRF9ICi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotLy9ERUZJTkVTCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaW5jbHVkZSA8bGludXgvY2Npc3NfZGVmcy5oPgorCisvKiBERUZJTkVTICovCiAjZGVmaW5lIENJU1NfVkVSU0lPTiAiMS4wMCIKIAotLy9nZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zCi0jZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyLy9ub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgdmFyeSBiZXR3ZWVuIGhvc3QgaW1wbGVtZW50YXRpb25zCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1BWFNHRU5UUklFUyAgICAgICAgICAgIDMyCiAjZGVmaW5lIENDSVNTX1NHX0NIQUlOICAgICAgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgTUFYUkVQTFlRUyAgICAgICAgICAgICAgMjU2CiAKLS8vQ29tbWFuZCBTdGF0dXMgdmFsdWUKLSNkZWZpbmUgQ01EX1NVQ0NFU1MgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIENNRF9UQVJHRVRfU1RBVFVTICAgICAgIDB4MDAwMQotI2RlZmluZSBDTURfREFUQV9VTkRFUlJVTiAgICAgICAweDAwMDIKLSNkZWZpbmUgQ01EX0RBVEFfT1ZFUlJVTiAgICAgICAgMHgwMDAzCi0jZGVmaW5lIENNRF9JTlZBTElEICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBDTURfUFJPVE9DT0xfRVJSICAgICAgICAweDAwMDUKLSNkZWZpbmUgQ01EX0hBUkRXQVJFX0VSUiAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIENNRF9DT05ORUNUSU9OX0xPU1QgICAgIDB4MDAwNwotI2RlZmluZSBDTURfQUJPUlRFRCAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUgQ01EX0FCT1JUX0ZBSUxFRCAgICAgICAgMHgwMDA5Ci0jZGVmaW5lIENNRF9VTlNPTElDSVRFRF9BQk9SVCAgIDB4MDAwQQotI2RlZmluZSBDTURfVElNRU9VVCAgICAgICAgICAgICAweDAwMEIKLSNkZWZpbmUgQ01EX1VOQUJPUlRBQkxFCQkweDAwMEMKLQogLyogVW5pdCBBdHRlbnRpb25zIEFTQydzIGFzIGRlZmluZWQgZm9yIHRoZSBNU0EyMDEyc2EgKi8KICNkZWZpbmUgUE9XRVJfT1JfUkVTRVQJCQkweDI5CiAjZGVmaW5lIFNUQVRFX0NIQU5HRUQJCQkweDJhCkBAIC00OSwzMCArMzQsMTMgQEAKICNkZWZpbmUgQVNZTV9BQ0NFU1NfQ0hBTkdFRAkJMHgwNgogI2RlZmluZSBMVU5fQ0FQQUNJVFlfQ0hBTkdFRAkJMHgwOQogCi0vL3RyYW5zZmVyIGRpcmVjdGlvbgotI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCi0KLS8vdGFzayBhdHRyaWJ1dGUKLSNkZWZpbmUgQVRUUl9VTlRBR0dFRCAgICAgICAgICAgMHgwMAotI2RlZmluZSBBVFRSX1NJTVBMRSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUVFJfSEVBRE9GUVVFVUUgICAgICAgIDB4MDUKLSNkZWZpbmUgQVRUUl9PUkRFUkVEICAgICAgICAgICAgMHgwNgotI2RlZmluZSBBVFRSX0FDQSAgICAgICAgICAgICAgICAweDA3Ci0KLS8vY2RiIHR5cGUKLSNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAotI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCi0KLS8vY29uZmlnIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKy8qIGNvbmZpZyBzcGFjZSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIENGR19WRU5ET1JJRCAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQ0ZHX0RFVklDRUlEICAgICAgICAgICAgMHgwMgogI2RlZmluZSBDRkdfSTJPQkFSICAgICAgICAgICAgICAweDEwCiAjZGVmaW5lIENGR19NRU0xQkFSICAgICAgICAgICAgIDB4MTQKIAotLy9pMm8gc3BhY2UgcmVnaXN0ZXIgb2Zmc2V0cworLyogaTJvIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgSTJPX0lCREJfU0VUICAgICAgICAgICAgMHgyMAogI2RlZmluZSBJMk9fSUJEQl9DTEVBUiAgICAgICAgICAweDcwCiAjZGVmaW5lIEkyT19JTlRfU1RBVFVTICAgICAgICAgIDB4MzAKQEAgLTgxLDcgKzQ5LDcgQEAKICNkZWZpbmUgSTJPX09CUE9TVF9RICAgICAgICAgICAgMHg0NAogI2RlZmluZSBJMk9fRE1BMV9DRkcJCTB4MjE0CiAKLS8vQ29uZmlndXJhdGlvbiBUYWJsZQorLyogQ29uZmlndXJhdGlvbiBUYWJsZSAqLwogI2RlZmluZSBDRkdUQkxfQ2hhbmdlUmVxICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQWNjQ21kcyAgICAgICAgICAweDAwMDAwMDAxbAogCkBAIC0xMDMsMjQgKzcxLDE3IEBACiAgICBfX3U2NAl2YWw7CiB9IHU2NGJpdDsKIAotLy8gVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzCi0jZGVmaW5lIEJZVEUgX191OAotI2RlZmluZSBXT1JEIF9fdTE2Ci0jZGVmaW5lIEhXT1JEIF9fdTE2Ci0jZGVmaW5lIERXT1JEIF9fdTMyCisvKiBUeXBlIGRlZnMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHN0cnVjdHMgKi8KICNkZWZpbmUgUVdPUkQgdmFsczMyIAogCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotLy9TVFJVQ1RVUkVTCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotI2RlZmluZSBDSVNTX01BWF9MVU4JMTAyNAorLyogU1RSVUNUVVJFUyAqLwogI2RlZmluZSBDSVNTX01BWF9QSFlTX0xVTgkxMDI0Ci0vLyBTQ1NJLTMgQ21tYW5kcyAKKy8qIFNDU0ktMyBDbW1hbmRzICovCiAKICNwcmFnbWEgcGFjaygxKQkKIAogI2RlZmluZSBDSVNTX0lOUVVJUlkgMHgxMgotLy9EYXRlIHJldHVybmVkCisvKiBEYXRlIHJldHVybmVkICovCiB0eXBlZGVmIHN0cnVjdCBfSW5xdWlyeURhdGFfc3RydWN0CiB7CiAgIEJZVEUgZGF0YV9ieXRlWzM2XTsKQEAgLTEyOCw3ICs4OSw3IEBACiAKICNkZWZpbmUgQ0lTU19SRVBPUlRfTE9HIDB4YzIgICAgLyogUmVwb3J0IExvZ2ljYWwgTFVOcyAqLwogI2RlZmluZSBDSVNTX1JFUE9SVF9QSFlTIDB4YzMgICAvKiBSZXBvcnQgUGh5c2ljYWwgTFVOcyAqLwotLy8gRGF0YSByZXR1cm5lZAorLyogRGF0YSByZXR1cm5lZCAqLwogdHlwZWRlZiBzdHJ1Y3QgX1JlcG9ydExVTmRhdGFfc3RydWN0CiB7CiAgIEJZVEUgTFVOTGlzdExlbmd0aFs0XTsKQEAgLTEzOSw4ICsxMDAsOCBAQAogI2RlZmluZSBDQ0lTU19SRUFEX0NBUEFDSVRZIDB4MjUgLyogUmVhZCBDYXBhY2l0eSAqLyAKIHR5cGVkZWYgc3RydWN0IF9SZWFkQ2FwZGF0YV9zdHJ1Y3QKIHsKLSAgQllURSB0b3RhbF9zaXplWzRdOwkvLyBUb3RhbCBzaXplIGluIGJsb2NrcwotICBCWVRFIGJsb2NrX3NpemVbNF07CS8vIFNpemUgb2YgYmxvY2tzIGluIGJ5dGVzCisgIEJZVEUgdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KKyAgQllURSBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLwogfSBSZWFkQ2FwZGF0YV9zdHJ1Y3Q7CiAKICNkZWZpbmUgQ0NJU1NfUkVBRF9DQVBBQ0lUWV8xNiAweDllIC8qIFJlYWQgQ2FwYWNpdHkgMTYgKi8KQEAgLTE3Miw1MiArMTMzLDEzIEBACiAjZGVmaW5lIENEQl9MRU4xMAkxMAogI2RlZmluZSBDREJfTEVOMTYJMTYKIAotLy8gQk1JQyBjb21tYW5kcyAKKy8qIEJNSUMgY29tbWFuZHMgKi8KICNkZWZpbmUgQk1JQ19SRUFEIDB4MjYKICNkZWZpbmUgQk1JQ19XUklURSAweDI3CiAjZGVmaW5lIEJNSUNfQ0FDSEVfRkxVU0ggMHhjMgotI2RlZmluZSBDQ0lTU19DQUNIRV9GTFVTSCAweDAxCS8vQzIgd2FzIGFscmVhZHkgYmVpbmcgdXNlZCBieSBDQ0lTUworI2RlZmluZSBDQ0lTU19DQUNIRV9GTFVTSCAweDAxCS8qIEMyIHdhcyBhbHJlYWR5IGJlaW5nIHVzZWQgYnkgQ0NJU1MgKi8KIAotLy9Db21tYW5kIExpc3QgU3RydWN0dXJlCi10eXBlZGVmIHVuaW9uIF9TQ1NJM0FkZHJfc3RydWN0IHsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXY7Ci0gICAgQllURSBCdXM6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMAotICB9IFBlcmlwRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldkxTQjsKLSAgICBCWVRFIERldk1TQjo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjAxCi0gIH0gTG9nRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldjo1OwotICAgIEJZVEUgQnVzOjM7Ci0gICAgQllURSBUYXJnOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMTAKLSAgfSBMb2dVbml0OwotfSBTQ1NJM0FkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUGh5c0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0gIERXT1JEICAgICAgICAgICAgIEJ1czo2OwotICBEV09SRCAgICAgICAgICAgICBNb2RlOjI7Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgIFRhcmdldFsyXTsgLy8yIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkcgotfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7Ci0gIAotdHlwZWRlZiBzdHJ1Y3QgX0xvZ0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICBWb2xJZDozMDsKLSAgRFdPUkQgICAgICAgICAgICBNb2RlOjI7Ci0gIEJZVEUgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Ci19IExvZ0RldkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHVuaW9uIF9MVU5BZGRyX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgICBTQ1NJM0x1bls0XTsKLSAgUGh5c0RldkFkZHJfc3RydWN0IFBoeXNEZXY7Ci0gIExvZ0RldkFkZHJfc3RydWN0ICBMb2dEZXY7Ci19IExVTkFkZHJfc3RydWN0OwotCisvKiBDb21tYW5kIExpc3QgU3RydWN0dXJlICovCiAjZGVmaW5lIENUTFJfTFVOSUQgIlwwXDBcMFwwXDBcMFwwXDAiCiAKIHR5cGVkZWYgc3RydWN0IF9Db21tYW5kTGlzdEhlYWRlcl9zdHJ1Y3QgewpAQCAtMjI3LDE2ICsxNDksNiBAQAogICBRV09SRCAgICAgICAgICAgICBUYWc7CiAgIExVTkFkZHJfc3RydWN0ICAgIExVTjsKIH0gQ29tbWFuZExpc3RIZWFkZXJfc3RydWN0OwotdHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgewotICBCWVRFICAgQ0RCTGVuOwotICBzdHJ1Y3QgewotICAgIEJZVEUgVHlwZTozOwotICAgIEJZVEUgQXR0cmlidXRlOjM7Ci0gICAgQllURSBEaXJlY3Rpb246MjsKLSAgfSBUeXBlOwotICBIV09SRCAgVGltZW91dDsKLSAgQllURSAgIENEQlsxNl07Ci19IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CiB0eXBlZGVmIHN0cnVjdCBfRXJyRGVzY3JpcHRvcl9zdHJ1Y3QgewogICBRV09SRCAgQWRkcjsKICAgRFdPUkQgIExlbjsKQEAgLTI0NywyOCArMTU5LDYgQEAKICAgRFdPUkQgIEV4dDsKIH0gU0dEZXNjcmlwdG9yX3N0cnVjdDsKIAotdHlwZWRlZiB1bmlvbiBfTW9yZUVyckluZm9fc3RydWN0ewotICBzdHJ1Y3QgewotICAgIEJZVEUgIFJlc2VydmVkWzNdOwotICAgIEJZVEUgIFR5cGU7Ci0gICAgRFdPUkQgRXJyb3JJbmZvOwotICB9Q29tbW9uX0luZm87Ci0gIHN0cnVjdHsKLSAgICBCWVRFICBSZXNlcnZlZFsyXTsKLSAgICBCWVRFICBvZmZlbnNlX3NpemU7Ly9zaXplIG9mIG9mZmVuZGluZyBlbnRyeQotICAgIEJZVEUgIG9mZmVuc2VfbnVtOyAvL2J5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZQotICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7Ci0gIH1JbnZhbGlkX0NtZDsKLX1Nb3JlRXJySW5mb19zdHJ1Y3Q7Ci10eXBlZGVmIHN0cnVjdCBfRXJyb3JJbmZvX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0gIEhXT1JEICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOwotICBEV09SRCAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7Ci0gIE1vcmVFcnJJbmZvX3N0cnVjdCBNb3JlRXJySW5mbzsKLSAgQllURSAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107Ci19IEVycm9ySW5mb19zdHJ1Y3Q7Ci0KIC8qIENvbW1hbmQgdHlwZXMgKi8KICNkZWZpbmUgQ01EX1JXUkVRICAgICAgIDB4MDAKICNkZWZpbmUgQ01EX0lPQ1RMX1BFTkQgIDB4MDEKQEAgLTI3NywxMCArMTY3LDE4IEBACiAjZGVmaW5lIENNRF9NU0dfVElNRU9VVCAweDA1CiAjZGVmaW5lIENNRF9NU0dfU1RBTEUJMHhmZgogCi0vKiBUaGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgOCBmb3IgbmV3Ci0gKiBpbmRleGluZyBtZXRob2QuCisvKiBUaGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgQ09NTUFORExJU1RfQUxJR05NRU5UCisgKiBiZWNhdXNlIGxvdyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSB1c2VkIHRvIHRvIGluZGljYXRlIHRoYXQKKyAqIHdoZXRoZXIgdGhlIHRhZyBjb250YWlucyBhbiBpbmRleCBvciBhbiBhZGRyZXNzLiAgUEFEXzMyIGFuZAorICogUEFEXzY0IGNhbiBiZSBhZGp1c3RlZCBpbmRlcGVuZGVudGx5IGFzIG5lZWRlZCBmb3IgMzItYml0CisgKiBhbmQgNjQtYml0cyBzeXN0ZW1zLgogICovCi0jZGVmaW5lIFBBRFNJWkUgKHNpemVvZihsb25nKSAtIDQpCisjZGVmaW5lIENPTU1BTkRMSVNUX0FMSUdOTUVOVCAoOCkKKyNkZWZpbmUgSVNfNjRfQklUICgoc2l6ZW9mKGxvbmcpIC0gNCkvNCkKKyNkZWZpbmUgSVNfMzJfQklUICghSVNfNjRfQklUKQorI2RlZmluZSBQQURfMzIgKDApCisjZGVmaW5lIFBBRF82NCAoNCkKKyNkZWZpbmUgUEFEU0laRSAoSVNfMzJfQklUICogUEFEXzMyICsgSVNfNjRfQklUICogUEFEXzY0KQogdHlwZWRlZiBzdHJ1Y3QgX0NvbW1hbmRMaXN0X3N0cnVjdCB7CiAgIENvbW1hbmRMaXN0SGVhZGVyX3N0cnVjdCBIZWFkZXI7CiAgIFJlcXVlc3RCbG9ja19zdHJ1Y3QgICAgICBSZXF1ZXN0OwpAQCAtMzAwLDcgKzE5OCw3IEBACiAgIGNoYXIgICBwYWRbUEFEU0laRV07CiB9IENvbW1hbmRMaXN0X3N0cnVjdDsKIAotLy9Db25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZQorLyogQ29uZmlndXJhdGlvbiBUYWJsZSBTdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IF9Ib3N0V3JpdGVfc3RydWN0IHsKICAgRFdPUkQgVHJhbnNwb3J0UmVxdWVzdDsKICAgRFdPUkQgUmVzZXJ2ZWQ7CkBAIC0zMjYsNCArMjI0LDQgQEAKICAgRFdPUkQgICAgICAgICAgICBNYXhQaHlzaWNhbERyaXZlc1BlckxvZ2ljYWxVbml0OwogfSBDZmdUYWJsZV9zdHJ1Y3Q7CiAjcHJhZ21hIHBhY2soKQkgCi0jZW5kaWYgLy8gQ0NJU1NfQ01EX0gKKyNlbmRpZiAvKiBDQ0lTU19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwppbmRleCA1ZDBlNDZkLi5lMWQwZTJjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCkBAIC04NCw3ICs4NCw2IEBACiAJLnF1ZXVlY29tbWFuZAkJPSBjY2lzc19zY3NpX3F1ZXVlX2NvbW1hbmQsCiAJLmNhbl9xdWV1ZQkJPSBTQ1NJX0NDSVNTX0NBTl9RVUVVRSwKIAkudGhpc19pZAkJPSA3LAotCS5zZ190YWJsZXNpemUJCT0gTUFYU0dFTlRSSUVTLAogCS5jbWRfcGVyX2x1bgkJPSAxLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLyogQ2FuJ3QgaGF2ZSBlaF9idXNfcmVzZXRfaGFuZGxlciBvciBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgZm9yIGNjaXNzICovCkBAIC05MywxMSArOTIsMTYgQEAKIH07CiAKICNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIFNDU0lfUEFEXzMyIDAKKyNkZWZpbmUgU0NTSV9QQURfNjQgMAorCiBzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90IHsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgY21kOwogCUVycm9ySW5mb19zdHJ1Y3QgRXJyOwogCV9fdTMyIGJ1c2FkZHI7Ci0JX191MzIgcGFkOworCWludCBjbWRpbmRleDsKKwl1OCBwYWRbSVNfMzJfQklUICogU0NTSV9QQURfMzIgKyBJU182NF9CSVQgKiBTQ1NJX1BBRF82NF07CiB9OwogCiAjcHJhZ21hIHBhY2soKQpAQCAtMTE4LDE2ICsxMjIsMTUgQEAKIHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90IHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7CiAJc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX3QgY21kX3N0YWNrOworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjbWRfc2dfbGlzdDsKIAlpbnQgcmVnaXN0ZXJlZDsKIAlzcGlubG9ja190IGxvY2s7IC8vIHRvIHByb3RlY3QgY2Npc3NzY3NpW2N0bHJdOyAKIH07CiAKICNkZWZpbmUgQ1BRX1RBUEVfTE9DSyhjdGxyLCBmbGFncykgc3Bpbl9sb2NrX2lycXNhdmUoIFwKLQkmKCgoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgXAotCWhiYVtjdGxyXS0+c2NzaV9jdGxyKS0+bG9jayksIGZsYWdzKTsKKwkmaGJhW2N0bHJdLT5zY3NpX2N0bHItPmxvY2ssIGZsYWdzKTsKICNkZWZpbmUgQ1BRX1RBUEVfVU5MT0NLKGN0bHIsIGZsYWdzKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCBcCi0JJigoKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIFwKLQloYmFbY3Rscl0tPnNjc2lfY3RsciktPmxvY2spLCBmbGFncyk7CisJJmhiYVtjdGxyXS0+c2NzaV9jdGxyLT5sb2NrLCBmbGFncyk7CiAKIHN0YXRpYyBDb21tYW5kTGlzdF9zdHJ1Y3QgKgogc2NzaV9jbWRfYWxsb2MoY3Rscl9pbmZvX3QgKmgpCkBAIC0xNDMsNyArMTQ2LDcgQEAKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCXU2NGJpdCB0ZW1wNjQ7CiAKLQlzYSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBoLT5zY3NpX2N0bHI7CisJc2EgPSBoLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCiAJaWYgKHN0ay0+dG9wIDwgMCkgCkBAIC0xNTQsNiArMTU3LDcgQEAKIAltZW1zZXQoJmMtPkVyciwgMCwgc2l6ZW9mKGMtPkVycikpOwogCS8qIHNldCBwaHlzaWNhbCBhZGRyIG9mIGNtZCBhbmQgYWRkciBvZiBzY3NpIHBhcmFtZXRlcnMgKi8KIAljLT5jbWQuYnVzYWRkciA9IGMtPmJ1c2FkZHI7IAorCWMtPmNtZC5jbWRpbmRleCA9IGMtPmNtZGluZGV4OwogCS8qIChfX3UzMikgKHN0ay0+Y21kX3Bvb2xfaGFuZGxlICsgCiAJCShzaXplb2Yoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCkqc3RrLT50b3ApKTsgKi8KIApAQCAtMTgyLDcgKzE4Niw3IEBACiAJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNhOwogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CiAKLQlzYSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBoLT5zY3NpX2N0bHI7CisJc2EgPSBoLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCWlmIChzdGstPnRvcCA+PSBDTURfU1RBQ0tfU0laRSkgewogCQlwcmludGsoImNjaXNzOiBzY3NpX2NtZF9mcmVlIGNhbGxlZCB0b28gbWFueSB0aW1lcy5cbiIpOwpAQCAtMTk5LDI0ICsyMDMsMzEgQEAKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCXNpemVfdCBzaXplOwogCisJc2EtPmNtZF9zZ19saXN0ID0gY2Npc3NfYWxsb2NhdGVfc2dfY2hhaW5fYmxvY2tzKGhiYVtjdGxyXSwKKwkJaGJhW2N0bHJdLT5jaGFpbnNpemUsIENNRF9TVEFDS19TSVpFKTsKKwlpZiAoIXNhLT5jbWRfc2dfbGlzdCAmJiBoYmFbY3Rscl0tPmNoYWluc2l6ZSA+IDApCisJCXJldHVybiAtRU5PTUVNOworCiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCkgKiBDTURfU1RBQ0tfU0laRTsKIAotCS8vIHBjaV9hbGxvY19jb25zaXN0ZW50IGd1YXJhbnRlZXMgMzItYml0IERNQSBhZGRyZXNzIHdpbGwKLQkvLyBiZSB1c2VkCi0KKwkvKiBDaGVjayBhbGlnbm1lbnQsIHNlZSBjY2lzc19jbWQuaCBuZWFyIENvbW1hbmRMaXN0X3N0cnVjdCBkZWYuICovCisJQlVJTERfQlVHX09OKChzaXplb2YoKnN0ay0+cG9vbCkgJSBDT01NQU5ETElTVF9BTElHTk1FTlQpICE9IDApOworCS8qIHBjaV9hbGxvY19jb25zaXN0ZW50IGd1YXJhbnRlZXMgMzItYml0IERNQSBhZGRyZXNzIHdpbGwgYmUgdXNlZCAqLwogCXN0ay0+cG9vbCA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90ICopCiAJCXBjaV9hbGxvY19jb25zaXN0ZW50KGhiYVtjdGxyXS0+cGRldiwgc2l6ZSwgJnN0ay0+Y21kX3Bvb2xfaGFuZGxlKTsKIAogCWlmIChzdGstPnBvb2wgPT0gTlVMTCkgewotCQlwcmludGsoInN0ay0+cG9vbCBpcyBudWxsXG4iKTsKLQkJcmV0dXJuIC0xOworCQljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhzYS0+Y21kX3NnX2xpc3QsIENNRF9TVEFDS19TSVpFKTsKKwkJc2EtPmNtZF9zZ19saXN0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpPTA7IGk8Q01EX1NUQUNLX1NJWkU7IGkrKykgewogCQlzdGstPmVsZW1baV0gPSAmc3RrLT5wb29sW2ldOwogCQlzdGstPmVsZW1baV0tPmJ1c2FkZHIgPSAoX191MzIpIChzdGstPmNtZF9wb29sX2hhbmRsZSArIAogCQkJKHNpemVvZihzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90KSAqIGkpKTsKKwkJc3RrLT5lbGVtW2ldLT5jbWRpbmRleCA9IGk7CiAJfQogCXN0ay0+dG9wID0gQ01EX1NUQUNLX1NJWkUtMTsKIAlyZXR1cm4gMDsKQEAgLTIyOSw3ICsyNDAsNyBAQAogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CiAJc2l6ZV90IHNpemU7CiAKLQlzYSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKKwlzYSA9IGhiYVtjdGxyXS0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAlpZiAoc3RrLT50b3AgIT0gQ01EX1NUQUNLX1NJWkUtMSkgewogCQlwcmludGsoICJjY2lzczogJWQgc2NzaSBjb21tYW5kcyBhcmUgc3RpbGwgb3V0c3RhbmRpbmcuXG4iLApAQCAtMjQxLDYgKzI1Miw3IEBACiAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtjdGxyXS0+cGRldiwgc2l6ZSwgc3RrLT5wb29sLCBzdGstPmNtZF9wb29sX2hhbmRsZSk7CiAJc3RrLT5wb29sID0gTlVMTDsKKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhzYS0+Y21kX3NnX2xpc3QsIENNRF9TVEFDS19TSVpFKTsKIH0KIAogI2lmIDAKQEAgLTUzMCw4ICs1NDIsNyBAQAogCUNQUV9UQVBFX0xPQ0soY3RsciwgZmxhZ3MpOwogCiAJaWYgKGhvc3RubyAhPSAtMSkgIC8qIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCB0aW1lLi4uICovCi0JCXNoID0gKChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKQotCQkJaGJhW2N0bHJdLT5zY3NpX2N0bHIpLT5zY3NpX2hvc3Q7CisJCXNoID0gaGJhW2N0bHJdLT5zY3NpX2N0bHItPnNjc2lfaG9zdDsKIAogCS8qIGZpbmQgYW55IGRldmljZXMgaW4gY2Npc3NzY3NpW10gdGhhdCBhcmUgbm90IGluIAogCSAgIHNkW10gYW5kIHJlbW92ZSB0aGVtIGZyb20gY2Npc3NzY3NpW10gKi8KQEAgLTcwMiw3ICs3MTMsNyBAQAogCQlrZnJlZShzaGJhKTsKIAkJc2hiYSA9IE5VTEw7CiAJfQotCWhiYVtjbnRsX251bV0tPnNjc2lfY3RsciA9ICh2b2lkICopIHNoYmE7CisJaGJhW2NudGxfbnVtXS0+c2NzaV9jdGxyID0gc2hiYTsKIAlyZXR1cm47CiB9CiAKQEAgLTcyNSw2ICs3MzYsOCBAQAogCWN0bHIgPSBoYmFbY3AtPmN0bHJdOwogCiAJc2NzaV9kbWFfdW5tYXAoY21kKTsKKwlpZiAoY3AtPkhlYWRlci5TR1RvdGFsID4gY3Rsci0+bWF4X2NtZF9zZ2VudHJpZXMpCisJCWNjaXNzX3VubWFwX3NnX2NoYWluX2Jsb2NrKGN0bHIsIGNwKTsKIAogCWNtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNik7IAkJLyogaG9zdCBieXRlICovCiAJY21kLT5yZXN1bHQgfD0gKENPTU1BTkRfQ09NUExFVEUgPDwgOCk7CS8qIG1zZyBieXRlICovCkBAIC04NDcsOSArODYwLDEwIEBACiAJc2gtPmlvX3BvcnQgPSAwOwkvLyBnb29kIGVub3VnaD8gIEZJWE1FLCAKIAlzaC0+bl9pb19wb3J0ID0gMDsJLy8gSSBkb24ndCB0aGluayB3ZSB1c2UgdGhlc2UgdHdvLi4uCiAJc2gtPnRoaXNfaWQgPSBTRUxGX1NDU0lfSUQ7ICAKKwlzaC0+c2dfdGFibGVzaXplID0gaGJhW2N0bHJdLT5tYXhzZ2VudHJpZXM7CiAKIAkoKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIAotCQloYmFbY3Rscl0tPnNjc2lfY3RsciktPnNjc2lfaG9zdCA9ICh2b2lkICopIHNoOworCQloYmFbY3Rscl0tPnNjc2lfY3RsciktPnNjc2lfaG9zdCA9IHNoOwogCXNoLT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKSBoYmFbY3Rscl07CiAJc2gtPmlycSA9IGhiYVtjdGxyXS0+aW50cltTSU1QTEVfTU9ERV9JTlRdOwogCXNoLT51bmlxdWVfaWQgPSBzaC0+aXJxOwpAQCAtMTM2NCwzNCArMTM3OCw1NCBAQAogICAgZG1hIG1hcHBpbmcgIGFuZCBmaWxscyBpbiB0aGUgc2NhdHRlciBnYXRoZXIgZW50cmllcyBvZiB0aGUgCiAgICBjY2lzcyBjb21tYW5kLCBjcC4gKi8KIAotc3RhdGljIHZvaWQKLWNjaXNzX3NjYXR0ZXJfZ2F0aGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCAKLQkJQ29tbWFuZExpc3Rfc3RydWN0ICpjcCwJCi0JCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIGNjaXNzX3NjYXR0ZXJfZ2F0aGVyKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmNwLAorCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJX191NjQgYWRkcjY0OwotCWludCB1c2Vfc2csIGk7CisJaW50IHJlcXVlc3RfbnNncywgaSwgY2hhaW5lZCwgc2dfaW5kZXg7CisJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNhID0gaC0+c2NzaV9jdGxyOworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKmN1cnJfc2c7CiAKLQlCVUdfT04oc2NzaV9zZ19jb3VudChjbWQpID4gTUFYU0dFTlRSSUVTKTsKKwlCVUdfT04oc2NzaV9zZ19jb3VudChjbWQpID4gaC0+bWF4c2dlbnRyaWVzKTsKIAotCXVzZV9zZyA9IHNjc2lfZG1hX21hcChjbWQpOwotCWlmICh1c2Vfc2cpIHsJLyogbm90IHRvbyBtYW55IGFkZHJzPyAqLwotCQlzY3NpX2Zvcl9lYWNoX3NnKGNtZCwgc2csIHVzZV9zZywgaSkgeworCWNoYWluZWQgPSAwOworCXNnX2luZGV4ID0gMDsKKwljdXJyX3NnID0gY3AtPlNHOworCXJlcXVlc3RfbnNncyA9IHNjc2lfZG1hX21hcChjbWQpOworCWlmIChyZXF1ZXN0X25zZ3MpIHsKKwkJc2NzaV9mb3JfZWFjaF9zZyhjbWQsIHNnLCByZXF1ZXN0X25zZ3MsIGkpIHsKKwkJCWlmIChzZ19pbmRleCArIDEgPT0gaC0+bWF4X2NtZF9zZ2VudHJpZXMgJiYKKwkJCQkhY2hhaW5lZCAmJiByZXF1ZXN0X25zZ3MgLSBpID4gMSkgeworCQkJCWNoYWluZWQgPSAxOworCQkJCXNnX2luZGV4ID0gMDsKKwkJCQljdXJyX3NnID0gc2EtPmNtZF9zZ19saXN0W2NwLT5jbWRpbmRleF07CisJCQl9CiAJCQlhZGRyNjQgPSAoX191NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKIAkJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKLQkJCWNwLT5TR1tpXS5BZGRyLmxvd2VyID0KLQkJCQkoX191MzIpIChhZGRyNjQgJiAoX191NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7Ci0JCQljcC0+U0dbaV0uQWRkci51cHBlciA9Ci0JCQkJKF9fdTMyKSAoKGFkZHI2NCA+PiAzMikgJiAoX191NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7Ci0JCQljcC0+U0dbaV0uTGVuID0gbGVuOwotCQkJY3AtPlNHW2ldLkV4dCA9IDA7ICAvLyB3ZSBhcmUgbm90IGNoYWluaW5nCisJCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLmxvd2VyID0KKwkJCQkoX191MzIpIChhZGRyNjQgJiAweDBGRkZGRkZGRlVMTCk7CisJCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLnVwcGVyID0KKwkJCQkoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIDB4MEZGRkZGRkZGVUxMKTsKKwkJCWN1cnJfc2dbc2dfaW5kZXhdLkxlbiA9IGxlbjsKKwkJCWN1cnJfc2dbc2dfaW5kZXhdLkV4dCA9IDA7CisJCQkrK3NnX2luZGV4OwogCQl9CisJCWlmIChjaGFpbmVkKQorCQkJY2Npc3NfbWFwX3NnX2NoYWluX2Jsb2NrKGgsIGNwLAorCQkJCXNhLT5jbWRfc2dfbGlzdFtjcC0+Y21kaW5kZXhdLAorCQkJCShyZXF1ZXN0X25zZ3MgLSAoaC0+bWF4X2NtZF9zZ2VudHJpZXMgLSAxKSkgKgorCQkJCQlzaXplb2YoU0dEZXNjcmlwdG9yX3N0cnVjdCkpOwogCX0KLQotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKF9fdTgpIHVzZV9zZzsgICAvKiBuby4gU0dzIGNvbnRpZyBpbiB0aGlzIGNtZCAqLwotCWNwLT5IZWFkZXIuU0dUb3RhbCA9IChfX3UxNikgdXNlX3NnOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLworCS8qIHRyYWNrIGhvdyBtYW55IFNHIGVudHJpZXMgd2UgYXJlIHVzaW5nICovCisJaWYgKHJlcXVlc3RfbnNncyA+IGgtPm1heFNHKQorCQloLT5tYXhTRyA9IHJlcXVlc3RfbnNnczsKKwljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191OCkgcmVxdWVzdF9uc2dzICsgY2hhaW5lZDsKKwlpZiAocmVxdWVzdF9uc2dzID4gaC0+bWF4X2NtZF9zZ2VudHJpZXMpCisJCWNwLT5IZWFkZXIuU0dMaXN0ID0gaC0+bWF4X2NtZF9zZ2VudHJpZXM7CisJZWxzZQorCQljcC0+SGVhZGVyLlNHTGlzdCA9IGNwLT5IZWFkZXIuU0dUb3RhbDsKIAlyZXR1cm47CiB9CiAKQEAgLTEzOTksNyArMTQzMyw3IEBACiBzdGF0aWMgaW50CiBjY2lzc19zY3NpX3F1ZXVlX2NvbW1hbmQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKiBkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogewotCWN0bHJfaW5mb190ICoqYzsKKwljdGxyX2luZm9fdCAqYzsKIAlpbnQgY3RsciwgcmM7CiAJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07CiAJQ29tbWFuZExpc3Rfc3RydWN0ICpjcDsKQEAgLTE0MDcsOCArMTQ0MSw4IEBACiAKIAkvLyBHZXQgdGhlIHB0ciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUgKGhiYVtpXSkgb3V0IG9mIGNtZC0+aG9zdC4KIAkvLyBXZSB2aW9sYXRlIGNtZC0+aG9zdCBwcml2YWN5IGhlcmUuICAoSXMgdGhlcmUgYW5vdGhlciB3YXk/KQotCWMgPSAoY3Rscl9pbmZvX3QgKiopICZjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CQotCWN0bHIgPSAoKmMpLT5jdGxyOworCWMgPSAoY3Rscl9pbmZvX3QgKikgY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCWN0bHIgPSBjLT5jdGxyOwogCiAJcmMgPSBsb29rdXBfc2NzaTNhZGRyKGN0bHIsIGNtZC0+ZGV2aWNlLT5jaGFubmVsLCBjbWQtPmRldmljZS0+aWQsIAogCQkJY21kLT5kZXZpY2UtPmx1biwgc2NzaTNhZGRyKTsKQEAgLTE0MzEsNyArMTQ2NSw3IEBACiAgICAgICAgICAgIHNlZSB3aGF0IHRoZSBkZXZpY2UgdGhpbmtzIG9mIGl0LiAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCWNwID0gc2NzaV9jbWRfYWxsb2MoKmMpOworCWNwID0gc2NzaV9jbWRfYWxsb2MoYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CiAJaWYgKGNwID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCiAJCXByaW50aygic2NzaV9jbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwpAQCAtMTQ4OSwxNSArMTUyMywxNCBAQAogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQotCi0JY2Npc3Nfc2NhdHRlcl9nYXRoZXIoKCpjKS0+cGRldiwgY3AsIGNtZCk7IC8vIEZpbGwgdGhlIFNHIGxpc3QKKwljY2lzc19zY2F0dGVyX2dhdGhlcihjLCBjcCwgY21kKTsKIAogCS8qIFB1dCB0aGUgcmVxdWVzdCBvbiB0aGUgdGFpbCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCWFkZFEoJigqYyktPnJlcVEsIGNwKTsKLQkoKmMpLT5RZGVwdGgrKzsKLQlzdGFydF9pbygqYyk7CisJYWRkUSgmYy0+cmVxUSwgY3ApOworCWMtPlFkZXB0aCsrOworCXN0YXJ0X2lvKGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogCiAJLyogdGhlIGNtZCdsbCBjb21lIGJhY2sgdmlhIGludHIgaGFuZGxlciBpbiBjb21wbGV0ZV9zY3NpX2NvbW1hbmQoKSAgKi8KQEAgLTE1MTQsNyArMTU0Nyw3IEBACiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0Jc2EgPSAoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgaGJhW2N0bHJdLT5zY3NpX2N0bHI7CisJc2EgPSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAKIAkvKiBpZiB3ZSB3ZXJlbid0IGV2ZXIgYWN0dWFsbHkgcmVnaXN0ZXJlZCwgZG9uJ3QgdW5yZWdpc3RlciAqLyAKQEAgLTE1NDEsNyArMTU3NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQlzYSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKKwlzYSA9IGhiYVtjdGxyXS0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAogCWlmIChzYS0+cmVnaXN0ZXJlZCkgewpAQCAtMTY1NCwxNCArMTY4NywxNCBAQAogCWludCByYzsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZF9pbl90cm91YmxlOwogCXVuc2lnbmVkIGNoYXIgbHVuYWRkcls4XTsKLQljdGxyX2luZm9fdCAqKmM7CisJY3Rscl9pbmZvX3QgKmM7CiAJaW50IGN0bHI7CiAKIAkvKiBmaW5kIHRoZSBjb250cm9sbGVyIHRvIHdoaWNoIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgd2FzIHNlbnQgKi8KLQljID0gKGN0bHJfaW5mb190ICoqKSAmc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsJCisJYyA9IChjdGxyX2luZm9fdCAqKSBzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCWlmIChjID09IE5VTEwpIC8qIHBhcmFub2lhICovCiAJCXJldHVybiBGQUlMRUQ7Ci0JY3RsciA9ICgqYyktPmN0bHI7CisJY3RsciA9IGMtPmN0bHI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVzZXR0aW5nIHRhcGUgZHJpdmUgb3IgbWVkaXVtIGNoYW5nZXIuXG4iLCBjdGxyKTsKIAkvKiBmaW5kIHRoZSBjb21tYW5kIHRoYXQncyBnaXZpbmcgdXMgdHJvdWJsZSAqLwogCWNtZF9pbl90cm91YmxlID0gKENvbW1hbmRMaXN0X3N0cnVjdCAqKSBzY3NpY21kLT5ob3N0X3NjcmliYmxlOwpAQCAtMTY3MSw3ICsxNzA0LDcgQEAKIAkvKiBzZW5kIGEgcmVzZXQgdG8gdGhlIFNDU0kgTFVOIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBzZW50IHRvICovCiAJcmMgPSBzZW5kY21kX3dpdGhpcnEoQ0NJU1NfUkVTRVRfTVNHLCBjdGxyLCBOVUxMLCAwLCAwLCBsdW5hZGRyLAogCQlUWVBFX01TRyk7Ci0JaWYgKHJjID09IDAgJiYgd2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeSgqYywgbHVuYWRkcikgPT0gMCkKKwlpZiAocmMgPT0gMCAmJiB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KGMsIGx1bmFkZHIpID09IDApCiAJCXJldHVybiBTVUNDRVNTOwogCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHJlc2V0dGluZyBkZXZpY2UgZmFpbGVkLlxuIiwgY3Rscik7CiAJcmV0dXJuIEZBSUxFRDsKQEAgLTE2ODIsMTQgKzE3MTUsMTQgQEAKIAlpbnQgcmM7CiAJQ29tbWFuZExpc3Rfc3RydWN0ICpjbWRfdG9fYWJvcnQ7CiAJdW5zaWduZWQgY2hhciBsdW5hZGRyWzhdOwotCWN0bHJfaW5mb190ICoqYzsKKwljdGxyX2luZm9fdCAqYzsKIAlpbnQgY3RscjsKIAogCS8qIGZpbmQgdGhlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgc2VudCAqLwotCWMgPSAoY3Rscl9pbmZvX3QgKiopICZzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwkKKwljID0gKGN0bHJfaW5mb190ICopIHNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJaWYgKGMgPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KIAkJcmV0dXJuIEZBSUxFRDsKLQljdGxyID0gKCpjKS0+Y3RscjsKKwljdGxyID0gYy0+Y3RscjsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBhYm9ydGluZyB0YXJkeSBTQ1NJIGNtZFxuIiwgY3Rscik7CiAKIAkvKiBmaW5kIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5oIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmgKaW5kZXggN2I3NTAyNC4uNmQ1ODIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmgKQEAgLTI1LDE2ICsyNSwxNiBAQAogCiAjaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+IC8qIHBvc3NpYmx5IGlycmVsZXZhbnQsIHNpbmNlIHdlIGRvbid0IHNob3cgZGlza3MgKi8KIAotCQkvLyB0aGUgc2NzaSBpZCBvZiB0aGUgYWRhcHRlci4uLgorCQkvKiB0aGUgc2NzaSBpZCBvZiB0aGUgYWRhcHRlci4uLiAqLwogI2RlZmluZSBTRUxGX1NDU0lfSUQgMTUKLQkJLy8gMTUgaXMgc29tZXdoYXQgYXJiaXRyYXJ5LCBzaW5jZSB0aGUgc2NzaS0yIGJ1cwotCQkvLyB0aGF0J3MgcHJlc2VudGVkIGJ5IHRoZSBkcml2ZXIgdG8gdGhlIE9TIGlzCi0JCS8vIGZhYnJpY2F0ZWQuICBUaGUgInJlYWwiIHNjc2ktMyBidXMgdGhlIAotCQkvLyBoYXJkd2FyZSBwcmVzZW50cyBpcyBmYWJyaWNhdGVkIHRvby4KLQkJLy8gVGhlIGFjdHVhbCwgaG9uZXN0LXRvLWdvb2RuZXNzIHBoeXNpY2FsCi0JCS8vIGJ1cyB0aGF0IHRoZSBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byBpcyBub3QgCi0JCS8vIGFkZHJlc3NpYmxlIG5hdGl2ZWx5LCBhbmQgbWF5IGluIGZhY3QgdHVybgotCQkvLyBvdXQgdG8gYmUgbm90IHNjc2kgYXQgYWxsLgorCQkvKiAxNSBpcyBzb21ld2hhdCBhcmJpdHJhcnksIHNpbmNlIHRoZSBzY3NpLTIgYnVzCisJCSAgIHRoYXQncyBwcmVzZW50ZWQgYnkgdGhlIGRyaXZlciB0byB0aGUgT1MgaXMKKwkJICAgZmFicmljYXRlZC4gIFRoZSAicmVhbCIgc2NzaS0zIGJ1cyB0aGUKKwkJICAgaGFyZHdhcmUgcHJlc2VudHMgaXMgZmFicmljYXRlZCB0b28uCisJCSAgIFRoZSBhY3R1YWwsIGhvbmVzdC10by1nb29kbmVzcyBwaHlzaWNhbAorCQkgICBidXMgdGhhdCB0aGUgZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gaXMgbm90CisJCSAgIGFkZHJlc3NpYmxlIG5hdGl2ZWx5LCBhbmQgbWF5IGluIGZhY3QgdHVybgorCQkgICBvdXQgdG8gYmUgbm90IHNjc2kgYXQgYWxsLiAqLwogCiAjZGVmaW5lIFNDU0lfQ0NJU1NfQ0FOX1FVRVVFIDIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IDY0MjI2NTEuLjkxZDExNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTQ0OCwxMSArNDQ4LDggQEAKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxLCBoYmFbaV0tPnBjaV9kZXYtPmRtYV9tYXNrKTsKIAogCS8qIFRoaXMgaXMgYSBoYXJkd2FyZSBpbXBvc2VkIGxpbWl0LiAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgU0dfTUFYKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIFNHX01BWCk7CiAKLQkvKiBUaGlzIGlzIGEgZHJpdmVyIGxpbWl0IGFuZCBjb3VsZCBiZSBlbGltaW5hdGVkLiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBTR19NQVgpOwotCQogCWluaXRfdGltZXIoJmhiYVtpXS0+dGltZXIpOwogCWhiYVtpXS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBJREFfVElNRVI7CiAJaGJhW2ldLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGJhW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKaW5kZXggMTI5MmUwNi4uNGRmM2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCkBAIC03MDksOSArNzA5LDggQEAKIAogCW1heF9zZWdfcyA9IG1pbihxdWV1ZV9tYXhfc2VjdG9ycyhiKSAqIHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShiKSwgbWF4X3NlZ19zKTsKIAotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfc2VnX3MgPj4gOSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IE1BWF9QSFlTX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IE1BWF9IV19TRUdNRU5UUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIG1heF9zZWdfcyA+PiA5KTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IEJMS19NQVhfU0VHTUVOVFMpOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIG1heF9zZWdfcyk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCA1MTIpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIFBBR0VfU0laRS0xKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDMyNjZiNGYuLmI5YjExNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDIzNCw3ICs0MjM0LDcgQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5yZWdfZHJpdmVyOwogCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoZmxvcHB5X3F1ZXVlLCA2NCk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGZsb3BweV9xdWV1ZSwgNjQpOwogCiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihGTE9QUFlfTUFKT1IsIDApLCAyNTYsIFRISVNfTU9EVUxFLAogCQkJICAgIGZsb3BweV9maW5kLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svaGQuYyBiL2RyaXZlcnMvYmxvY2svaGQuYwppbmRleCBkNWNkY2UwLi41MTE2YzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2hkLmMKKysrIGIvZHJpdmVycy9ibG9jay9oZC5jCkBAIC03MTksNyArNzE5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKGhkX3F1ZXVlLCAyNTUpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhoZF9xdWV1ZSwgMjU1KTsKIAlpbml0X3RpbWVyKCZkZXZpY2VfdGltZXIpOwogCWRldmljZV90aW1lci5mdW5jdGlvbiA9IGhkX3RpbWVzX291dDsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGhkX3F1ZXVlLCA1MTIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMgYi9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYwppbmRleCAwMmIyNTgzZC4uNTQxNmM5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC05ODAsNyArOTgwLDcgQEAKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIHByb2JlX2Vycl82OwogCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGhvc3QtPmJyZXEsIE1HX1NFQ1RPUl9TSVpFKTsKIAogCWluaXRfdGltZXIoJmhvc3QtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IDU2OWUzOWUuLmU3MTJjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJaWYgKCFwZF9xdWV1ZSkKIAkJZ290byBvdXQxOwogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHBkX3F1ZXVlLCBjbHVzdGVyKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocGRfcXVldWUsIGNsdXN0ZXIpOwogCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihtYWpvciwgbmFtZSkpCiAJCWdvdG8gb3V0MjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCmluZGV4IGVhNTRlYTMuLmRkYjRmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwpAQCAtOTU2LDggKzk1Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CiAKIAlmb3IgKHBmID0gdW5pdHMsIHVuaXQgPSAwOyB1bml0IDwgUEZfVU5JVFM7IHBmKyssIHVuaXQrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBmLT5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCA2OGI1OTU3Li5iNzI5MzViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKQEAgLTU2OSw2ICs1NjksNyBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZwa3QtPmxvY2spOworCWJpb19saXN0X2luaXQoJnBrdC0+b3JpZ19iaW9zKTsKIAogCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykgewogCQlzdHJ1Y3QgYmlvICpiaW8gPSBwa3RfYmlvX2FsbG9jKDEpOwpAQCAtNzIxLDQzICs3MjIsNiBAQAogfQogCiAvKgotICogQWRkIGEgYmlvIHRvIGEgc2luZ2xlIGxpbmtlZCBsaXN0IGRlZmluZWQgYnkgaXRzIGhlYWQgYW5kIHRhaWwgcG9pbnRlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIHBrdF9hZGRfbGlzdF9sYXN0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqKmxpc3RfaGVhZCwgc3RydWN0IGJpbyAqKmxpc3RfdGFpbCkKLXsKLQliaW8tPmJpX25leHQgPSBOVUxMOwotCWlmICgqbGlzdF90YWlsKSB7Ci0JCUJVR19PTigoKmxpc3RfaGVhZCkgPT0gTlVMTCk7Ci0JCSgqbGlzdF90YWlsKS0+YmlfbmV4dCA9IGJpbzsKLQkJKCpsaXN0X3RhaWwpID0gYmlvOwotCX0gZWxzZSB7Ci0JCUJVR19PTigoKmxpc3RfaGVhZCkgIT0gTlVMTCk7Ci0JCSgqbGlzdF9oZWFkKSA9IGJpbzsKLQkJKCpsaXN0X3RhaWwpID0gYmlvOwotCX0KLX0KLQotLyoKLSAqIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBiaW8gZnJvbSBhIHNpbmdsZSBsaW5rZWQgbGlzdCBkZWZpbmVkIGJ5IGl0cwotICogaGVhZCBhbmQgdGFpbCBwb2ludGVycy4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgYmlvICpwa3RfZ2V0X2xpc3RfZmlyc3Qoc3RydWN0IGJpbyAqKmxpc3RfaGVhZCwgc3RydWN0IGJpbyAqKmxpc3RfdGFpbCkKLXsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0KLQlpZiAoKmxpc3RfaGVhZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWJpbyA9ICpsaXN0X2hlYWQ7Ci0JKmxpc3RfaGVhZCA9IGJpby0+YmlfbmV4dDsKLQlpZiAoKmxpc3RfaGVhZCA9PSBOVUxMKQotCQkqbGlzdF90YWlsID0gTlVMTDsKLQotCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JcmV0dXJuIGJpbzsKLX0KLQotLyoKICAqIFNlbmQgYSBwYWNrZXRfY29tbWFuZCB0byB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kCiAgKiB3YWl0IGZvciBjb21wbGV0aW9uLgogICovCkBAIC04NzYsMTMgKzg0MCwxMCBAQAogc3RhdGljIHZvaWQgcGt0X3F1ZXVlX2JpbyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3Bpbl9sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkgewotCQlwa3RfYWRkX2xpc3RfbGFzdChiaW8sICZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlLAotCQkJCSAgJnBkLT5pb3NjaGVkLnJlYWRfcXVldWVfdGFpbCk7Ci0JfSBlbHNlIHsKLQkJcGt0X2FkZF9saXN0X2xhc3QoYmlvLCAmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUsCi0JCQkJICAmcGQtPmlvc2NoZWQud3JpdGVfcXVldWVfdGFpbCk7Ci0JfQorCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKQorCQliaW9fbGlzdF9hZGQoJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUsIGJpbyk7CisJZWxzZQorCQliaW9fbGlzdF9hZGQoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlLCBiaW8pOwogCXNwaW5fdW5sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKIAogCWF0b21pY19zZXQoJnBkLT5pb3NjaGVkLmF0dGVudGlvbiwgMSk7CkBAIC05MTcsOCArODc4LDggQEAKIAkJaW50IHJlYWRzX3F1ZXVlZCwgd3JpdGVzX3F1ZXVlZDsKIAogCQlzcGluX2xvY2soJnBkLT5pb3NjaGVkLmxvY2spOwotCQlyZWFkc19xdWV1ZWQgPSAocGQtPmlvc2NoZWQucmVhZF9xdWV1ZSAhPSBOVUxMKTsKLQkJd3JpdGVzX3F1ZXVlZCA9IChwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSAhPSBOVUxMKTsKKwkJcmVhZHNfcXVldWVkID0gIWJpb19saXN0X2VtcHR5KCZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlKTsKKwkJd3JpdGVzX3F1ZXVlZCA9ICFiaW9fbGlzdF9lbXB0eSgmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUpOwogCQlzcGluX3VubG9jaygmcGQtPmlvc2NoZWQubG9jayk7CiAKIAkJaWYgKCFyZWFkc19xdWV1ZWQgJiYgIXdyaXRlc19xdWV1ZWQpCkBAIC05MjcsNyArODg4LDcgQEAKIAkJaWYgKHBkLT5pb3NjaGVkLndyaXRpbmcpIHsKIAkJCWludCBuZWVkX3dyaXRlX3NlZWsgPSAxOwogCQkJc3Bpbl9sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKLQkJCWJpbyA9IHBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlOworCQkJYmlvID0gYmlvX2xpc3RfcGVlaygmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUpOwogCQkJc3Bpbl91bmxvY2soJnBkLT5pb3NjaGVkLmxvY2spOwogCQkJaWYgKGJpbyAmJiAoYmlvLT5iaV9zZWN0b3IgPT0gcGQtPmlvc2NoZWQubGFzdF93cml0ZSkpCiAJCQkJbmVlZF93cml0ZV9zZWVrID0gMDsKQEAgLTk1MCwxMyArOTExLDEwIEBACiAJCX0KIAogCQlzcGluX2xvY2soJnBkLT5pb3NjaGVkLmxvY2spOwotCQlpZiAocGQtPmlvc2NoZWQud3JpdGluZykgewotCQkJYmlvID0gcGt0X2dldF9saXN0X2ZpcnN0KCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSwKLQkJCQkJCSAmcGQtPmlvc2NoZWQud3JpdGVfcXVldWVfdGFpbCk7Ci0JCX0gZWxzZSB7Ci0JCQliaW8gPSBwa3RfZ2V0X2xpc3RfZmlyc3QoJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUsCi0JCQkJCQkgJnBkLT5pb3NjaGVkLnJlYWRfcXVldWVfdGFpbCk7Ci0JCX0KKwkJaWYgKHBkLT5pb3NjaGVkLndyaXRpbmcpCisJCQliaW8gPSBiaW9fbGlzdF9wb3AoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlKTsKKwkJZWxzZQorCQkJYmlvID0gYmlvX2xpc3RfcG9wKCZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlKTsKIAkJc3Bpbl91bmxvY2soJnBkLT5pb3NjaGVkLmxvY2spOwogCiAJCWlmICghYmlvKQpAQCAtOTkyLDE0ICs5NTAsMTQgQEAKIHN0YXRpYyBpbnQgcGt0X3NldF9zZWdtZW50X21lcmdpbmcoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJaWYgKChwZC0+c2V0dGluZ3Muc2l6ZSA8PCA5KSAvIENEX0ZSQU1FU0laRQotCSAgICA8PSBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkgeworCSAgICA8PSBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJLyoKIAkJICogVGhlIGNkcm9tIGRldmljZSBjYW4gaGFuZGxlIG9uZSBzZWdtZW50L2ZyYW1lCiAJCSAqLwogCQljbGVhcl9iaXQoUEFDS0VUX01FUkdFX1NFR1MsICZwZC0+ZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKChwZC0+c2V0dGluZ3Muc2l6ZSA8PCA5KSAvIFBBR0VfU0laRQotCQkgICA8PSBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkgeworCQkgICA8PSBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJLyoKIAkJICogV2UgY2FuIGhhbmRsZSB0aGlzIGNhc2UgYXQgdGhlIGV4cGVuc2Ugb2Ygc29tZSBleHRyYSBtZW1vcnkKIAkJICogY29waWVzIGR1cmluZyB3cml0ZSBvcGVyYXRpb25zCkBAIC0xMTE0LDcgKzEwNzIsNyBAQAogCWludCBmOwogCWNoYXIgd3JpdHRlbltQQUNLRVRfTUFYX1NJWkVdOwogCi0JQlVHX09OKCFwa3QtPm9yaWdfYmlvcyk7CisJQlVHX09OKGJpb19saXN0X2VtcHR5KCZwa3QtPm9yaWdfYmlvcykpOwogCiAJYXRvbWljX3NldCgmcGt0LT5pb193YWl0LCAwKTsKIAlhdG9taWNfc2V0KCZwa3QtPmlvX2Vycm9ycywgMCk7CkBAIC0xMTI0LDcgKzEwODIsNyBAQAogCSAqLwogCW1lbXNldCh3cml0dGVuLCAwLCBzaXplb2Yod3JpdHRlbikpOwogCXNwaW5fbG9jaygmcGt0LT5sb2NrKTsKLQlmb3IgKGJpbyA9IHBrdC0+b3JpZ19iaW9zOyBiaW87IGJpbyA9IGJpby0+YmlfbmV4dCkgeworCWJpb19saXN0X2Zvcl9lYWNoKGJpbywgJnBrdC0+b3JpZ19iaW9zKSB7CiAJCWludCBmaXJzdF9mcmFtZSA9IChiaW8tPmJpX3NlY3RvciAtIHBrdC0+c2VjdG9yKSAvIChDRF9GUkFNRVNJWkUgPj4gOSk7CiAJCWludCBudW1fZnJhbWVzID0gYmlvLT5iaV9zaXplIC8gQ0RfRlJBTUVTSVpFOwogCQlwZC0+c3RhdHMuc2Vjc193ICs9IG51bV9mcmFtZXMgKiAoQ0RfRlJBTUVTSVpFID4+IDkpOwpAQCAtMTM2Myw3ICsxMzIxLDcgQEAKIAkJCWJyZWFrOwogCQlwa3RfcmJ0cmVlX2VyYXNlKHBkLCBub2RlKTsKIAkJc3Bpbl9sb2NrKCZwa3QtPmxvY2spOwotCQlwa3RfYWRkX2xpc3RfbGFzdChiaW8sICZwa3QtPm9yaWdfYmlvcywgJnBrdC0+b3JpZ19iaW9zX3RhaWwpOworCQliaW9fbGlzdF9hZGQoJnBrdC0+b3JpZ19iaW9zLCBiaW8pOwogCQlwa3QtPndyaXRlX3NpemUgKz0gYmlvLT5iaV9zaXplIC8gQ0RfRlJBTUVTSVpFOwogCQlzcGluX3VubG9jaygmcGt0LT5sb2NrKTsKIAl9CkBAIC0xNDA5LDcgKzEzNjcsNyBAQAogCSAqLwogCWZyYW1lc193cml0ZSA9IDA7CiAJc3Bpbl9sb2NrKCZwa3QtPmxvY2spOwotCWZvciAoYmlvID0gcGt0LT5vcmlnX2Jpb3M7IGJpbzsgYmlvID0gYmlvLT5iaV9uZXh0KSB7CisJYmlvX2xpc3RfZm9yX2VhY2goYmlvLCAmcGt0LT5vcmlnX2Jpb3MpIHsKIAkJaW50IHNlZ21lbnQgPSBiaW8tPmJpX2lkeDsKIAkJaW50IHNyY19vZmZzID0gMDsKIAkJaW50IGZpcnN0X2ZyYW1lID0gKGJpby0+Ymlfc2VjdG9yIC0gcGt0LT5zZWN0b3IpIC8gKENEX0ZSQU1FU0laRSA+PiA5KTsKQEAgLTE0NzIsMjAgKzE0MzAsMTQgQEAKIAogc3RhdGljIHZvaWQgcGt0X2ZpbmlzaF9wYWNrZXQoc3RydWN0IHBhY2tldF9kYXRhICpwa3QsIGludCB1cHRvZGF0ZSkKIHsKLQlzdHJ1Y3QgYmlvICpiaW8sICpuZXh0OworCXN0cnVjdCBiaW8gKmJpbzsKIAogCWlmICghdXB0b2RhdGUpCiAJCXBrdC0+Y2FjaGVfdmFsaWQgPSAwOwogCiAJLyogRmluaXNoIGFsbCBiaW9zIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwYWNrZXQgKi8KLQliaW8gPSBwa3QtPm9yaWdfYmlvczsKLQl3aGlsZSAoYmlvKSB7Ci0JCW5leHQgPSBiaW8tPmJpX25leHQ7Ci0JCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJnBrdC0+b3JpZ19iaW9zKSkpCiAJCWJpb19lbmRpbyhiaW8sIHVwdG9kYXRlID8gMCA6IC1FSU8pOwotCQliaW8gPSBuZXh0OwotCX0KLQlwa3QtPm9yaWdfYmlvcyA9IHBrdC0+b3JpZ19iaW9zX3RhaWwgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwa3RfcnVuX3N0YXRlX21hY2hpbmUoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgc3RydWN0IHBhY2tldF9kYXRhICpwa3QpCkBAIC0yMzYwLDcgKzIzMTIsNyBAQAogCQkgKiBldmVuIGlmIHRoZSBzaXplIGlzIGEgbXVsdGlwbGUgb2YgdGhlIHBhY2tldCBzaXplLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIHBkLT5zZXR0aW5ncy5zaXplKTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIHBkLT5zZXR0aW5ncy5zaXplKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQlzZXRfYml0KFBBQ0tFVF9XUklUQUJMRSwgJnBkLT5mbGFncyk7CiAJfSBlbHNlIHsKQEAgLTI1NjcsOCArMjUxOSw3IEBACiAJCQlzcGluX2xvY2soJnBrdC0+bG9jayk7CiAJCQlpZiAoKHBrdC0+c3RhdGUgPT0gUEFDS0VUX1dBSVRJTkdfU1RBVEUpIHx8CiAJCQkgICAgKHBrdC0+c3RhdGUgPT0gUEFDS0VUX1JFQURfV0FJVF9TVEFURSkpIHsKLQkJCQlwa3RfYWRkX2xpc3RfbGFzdChiaW8sICZwa3QtPm9yaWdfYmlvcywKLQkJCQkJCSAgJnBrdC0+b3JpZ19iaW9zX3RhaWwpOworCQkJCWJpb19saXN0X2FkZCgmcGt0LT5vcmlnX2Jpb3MsIGJpbyk7CiAJCQkJcGt0LT53cml0ZV9zaXplICs9IGJpby0+Ymlfc2l6ZSAvIENEX0ZSQU1FU0laRTsKIAkJCQlpZiAoKHBrdC0+d3JpdGVfc2l6ZSA+PSBwa3QtPmZyYW1lcykgJiYKIAkJCQkgICAgKHBrdC0+c3RhdGUgPT0gUEFDS0VUX1dBSVRJTkdfU1RBVEUpKSB7CkBAIC0yNjYyLDcgKzI2MTMsNyBAQAogCiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxLCBwa3RfbWFrZV9yZXF1ZXN0KTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHEsIENEX0ZSQU1FU0laRSk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIFBBQ0tFVF9NQVhfU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIFBBQ0tFVF9NQVhfU0VDVE9SUyk7CiAJYmxrX3F1ZXVlX21lcmdlX2J2ZWMocSwgcGt0X21lcmdlX2J2ZWMpOwogCXEtPnF1ZXVlZGF0YSA9IHBkOwogfQpAQCAtMjg5OCw2ICsyODQ5LDggQEAKIAogCXNwaW5fbG9ja19pbml0KCZwZC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBkLT5pb3NjaGVkLmxvY2spOworCWJpb19saXN0X2luaXQoJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUpOworCWJpb19saXN0X2luaXQoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlKTsKIAlzcHJpbnRmKHBkLT5uYW1lLCBEUklWRVJfTkFNRSIlZCIsIGlkeCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGQtPndxdWV1ZSk7CiAJcGQtPmJpb19xdWV1ZSA9IFJCX1JPT1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCmluZGV4IDAzYTEzMGQuLmJjOTU0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocXVldWUsIEJMS19CT1VOQ0VfSElHSCk7CiAKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocXVldWUsIGRldi0+Ym91bmNlX3NpemUgPj4gOSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHF1ZXVlLCBkZXYtPmJvdW5jZV9zaXplID4+IDkpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHF1ZXVlLCAtMVVMKTsKIAlibGtfcXVldWVfZG1hX2FsaWdubWVudChxdWV1ZSwgZGV2LT5ibGtfc2l6ZS0xKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHF1ZXVlLCBkZXYtPmJsa19zaXplKTsKQEAgLTQ4Miw4ICs0ODIsNyBAQAogCWJsa19xdWV1ZV9vcmRlcmVkKHF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAogCQkJICBwczNkaXNrX3ByZXBhcmVfZmx1c2gpOwogCi0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHF1ZXVlLCAtMSk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxdWV1ZSwgLTEpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocXVldWUsIC0xKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxdWV1ZSwgZGV2LT5ib3VuY2Vfc2l6ZSk7CiAKIAlnZW5kaXNrID0gYWxsb2NfZGlzayhQUzNESVNLX01JTk9SUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCmluZGV4IDFmYjZjMzEuLmU0NDYwODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCkBAIC03NTEsMTAgKzc1MSw5IEBACiAJcHJpdi0+cXVldWUgPSBxdWV1ZTsKIAlxdWV1ZS0+cXVldWVkYXRhID0gZGV2OwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocXVldWUsIHBzM3ZyYW1fbWFrZV9yZXF1ZXN0KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocXVldWUsIE1BWF9QSFlTX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHF1ZXVlLCBNQVhfSFdfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHF1ZXVlLCBNQVhfU0VHTUVOVF9TSVpFKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocXVldWUsIFNBRkVfTUFYX1NFQ1RPUlMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocXVldWUsIEJMS19NQVhfU0VHTUVOVFMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHF1ZXVlLCBCTEtfTUFYX1NFR01FTlRfU0laRSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHF1ZXVlLCBCTEtfU0FGRV9NQVhfU0VDVE9SUyk7CiAKIAlnZW5kaXNrID0gYWxsb2NfZGlzaygxKTsKIAlpZiAoIWdlbmRpc2spIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3VudmRjLmMgYi9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jCmluZGV4IDQxMWYwNjQuLjQ4ZThmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3VudmRjLmMKKysrIGIvZHJpdmVycy9ibG9jay9zdW52ZGMuYwpAQCAtNjkxLDkgKzY5MSw4IEBACiAKIAlwb3J0LT5kaXNrID0gZzsKIAotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgcG9ydC0+cmluZ19jb29raWVzKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgcG9ydC0+cmluZ19jb29raWVzKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgcG9ydC0+bWF4X3hmZXJfc2l6ZSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBwb3J0LT5yaW5nX2Nvb2tpZXMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBwb3J0LT5tYXhfeGZlcl9zaXplKTsKIAlnLT5tYWpvciA9IHZkY19tYWpvcjsKIAlnLT5maXJzdF9taW5vciA9IHBvcnQtPnZpby52ZGV2LT5kZXZfbm8gPDwgUEFSVElUSU9OX1NISUZUOwogCXN0cmNweShnLT5kaXNrX25hbWUsIHBvcnQtPmRpc2tfbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCmluZGV4IDhmNTY5ZTMuLjgyMWMyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCkBAIC04NjQsNyArODY0LDcgQEAKIAlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7CiAJaW50IHJldDsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICs5NDIsNyBAQAogCiAJaW91bm1hcChzd2QtPmJhc2UpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMpCiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N4OC5jIGIvZHJpdmVycy9ibG9jay9zeDguYwppbmRleCBhN2M0MTg0Li5iNzBmMGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N4OC5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKQEAgLTQwOSw3ICs0MDksNyBAQAogc3RhdGljIHZvaWQgY2FybV9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgaW50IGNhcm1fYmRldl9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FybV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FybV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4ODAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg4MDAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwpAQCAtMTUxOCw4ICsxNTE4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWRpc2stPnF1ZXVlID0gcTsKLQkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBDQVJNX01BWF9SRVFfU0cpOwotCQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgQ0FSTV9NQVhfUkVRX1NHKTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBDQVJNX01BWF9SRVFfU0cpOwogCQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBDQVJNX1NHX0JPVU5EQVJZKTsKIAogCQlxLT5xdWV1ZWRhdGEgPSBwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IGM3MzliMjAuLjJlODg5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogI2RlZmluZSB1Yl91c2JfaWRzICB1c2Jfc3RvcmFnZV91c2JfaWRzCiAjZWxzZQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWJfdXNiX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHViX3VzYl9pZHNbXSA9IHsKIAl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9CVUxLKSB9LAogCXsgfQogfTsKQEAgLTIzMjAsMTAgKzIzMjAsOSBAQAogCWRpc2stPnF1ZXVlID0gcTsKIAogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgQkxLX0JPVU5DRV9ISUdIKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIFVCX01BWF9SRVFfU0cpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBVQl9NQVhfUkVRX1NHKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIFVCX01BWF9SRVFfU0cpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIDB4ZmZmZmZmZmYpOwkvKiBEdWJpb3VzLiAqLwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBVQl9NQVhfU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIFVCX01BWF9TRUNUT1JTKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHEsIGx1bi0+Y2FwYWNpdHkuYnNpemUpOwogCiAJbHVuLT5kaXNrID0gZGlzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggYThjOGI1Ni4uNzg4ZDkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTI4LDYgKzI4LDkgQEAKICAqIEFsbCBkaXNrIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBieSBzZW5kaW5nIG1lc3NhZ2VzIGJhY2sgYW5kIGZvcnRoIHRvCiAgKiB0aGUgT1MvNDAwIHBhcnRpdGlvbi4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJ2aW9kOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjMsOSArNjYsNiBAQAogCiAjZGVmaW5lIFZJT0RfVkVSUwkJIjEuNjQiCiAKLSNkZWZpbmUgVklPRF9LRVJOX1dBUk5JTkcJS0VSTl9XQVJOSU5HICJ2aW9kOiAiCi0jZGVmaW5lIFZJT0RfS0VSTl9JTkZPCQlLRVJOX0lORk8gInZpb2Q6ICIKLQogZW51bSB7CiAJUEFSVElUSU9OX1NISUZUID0gMywKIAlNQVhfRElTS05PID0gSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxESVNLUywKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJKCh1NjQpREVWSUNFX05PKGQpIDw8IDQ4KSB8ICgodTY0KWZsYWdzIDw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJIViBvcGVuIGZhaWxlZCAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiSFYgb3BlbiBmYWlsZWQgJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTY3LDkgKzE2Nyw4IEBACiAJCWNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkgKmVyciA9CiAJCQl2aW9fbG9va3VwX3JjKHZpb2Rhc2RfZXJyX3RhYmxlLCB3ZS5zdWJfcmVzdWx0KTsKIAotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiYmFkIHJjIG9wZW5pbmcgZGlzazogJWQ6MHglMDR4ICglcylcbiIsCi0JCQkJKGludCl3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb3BlbmluZyBkaXNrOiAlZDoweCUwNHggKCVzKVxuIiwKKwkJCSAgIChpbnQpd2UucmMsIHdlLnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xOTUsOCArMTk0LDcgQEAKIAkJCSgodTY0KURFVklDRV9OTyhkKSA8PCA0OCkgLyogfCAoKHU2NClmbGFncyA8PCAzMikgKi8sCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKQotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgIkhWIGNsb3NlIGNhbGwgZmFpbGVkICVkXG4iLAotCQkJCShpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoIkhWIGNsb3NlIGNhbGwgZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOwogCXJldHVybiAwOwogfQogCkBAIC0yODgsOCArMjg2LDcgQEAKIAkJYmV2ZW50ID0gKHN0cnVjdCB2aW9ibG9ja2xwZXZlbnQgKikKIAkJCXZpb19nZXRfZXZlbnRfYnVmZmVyKHZpb21ham9yc3VidHlwZV9ibG9ja2lvKTsKIAkJaWYgKGJldmVudCA9PSBOVUxMKSB7Ci0JCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiZXJyb3IgYWxsb2NhdGluZyBkaXNrIGV2ZW50IGJ1ZmZlclxuIik7CisJCQlwcl93YXJuaW5nKCJlcnJvciBhbGxvY2F0aW5nIGRpc2sgZXZlbnQgYnVmZmVyXG4iKTsKIAkJCWdvdG8gZXJyb3JfcmV0OwogCQl9CiAKQEAgLTMzMyw5ICszMzAsOCBAQAogCX0KIAogCWlmIChodnJjICE9IEh2THBFdmVudF9SY19Hb29kKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImVycm9yIHNlbmRpbmcgZGlzayBldmVudCB0byBPUy80MDAgKHJjICVkKVxuIiwKLQkJICAgICAgIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImVycm9yIHNlbmRpbmcgZGlzayBldmVudCB0byBPUy80MDAgKHJjICVkKVxuIiwKKwkJCSAgIChpbnQpaHZyYyk7CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW9kYXNkX3NwaW5sb2NrLCBmbGFncyk7CkBAIC00MDIsNyArMzk4LDcgQEAKIAkJCSgodTY0KWRldl9ubyA8PCA0OCkgfCAoKHU2NClmbGFnczw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJiYWQgcmMgb24gSFYgb3BlbiAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiYmFkIHJjIG9uIEhWIG9wZW4gJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDE2LDkgKzQxMiw4IEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmICh3ZS5tYXhfZGlzayA+IChNQVhfRElTS05PIC0gMSkpIHsKLQkJcHJpbnRrX29uY2UoVklPRF9LRVJOX0lORk8KLQkJCSJPbmx5IGV4YW1pbmluZyB0aGUgZmlyc3QgJWQgb2YgJWQgZGlza3MgY29ubmVjdGVkXG4iLAotCQkJTUFYX0RJU0tOTywgd2UubWF4X2Rpc2sgKyAxKTsKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPIHByX2ZtdCgiT25seSBleGFtaW5pbmcgdGhlIGZpcnN0ICVkIG9mICVkIGRpc2tzIGNvbm5lY3RlZFxuIiksCisJCQkgICAgTUFYX0RJU0tOTywgd2UubWF4X2Rpc2sgKyAxKTsKIAl9CiAKIAkvKiBTZW5kIHRoZSBjbG9zZSBldmVudCB0byBPUy80MDAuICBXZSBET04nVCBleHBlY3QgYSByZXNwb25zZSAqLwpAQCAtNDMyLDE3ICs0MjcsMTUgQEAKIAkJCSgodTY0KWRldl9ubyA8PCA0OCkgfCAoKHU2NClmbGFncyA8PCAzMiksCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImJhZCByYyBzZW5kaW5nIGV2ZW50IHRvIE9TLzQwMCAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiYmFkIHJjIHNlbmRpbmcgZXZlbnQgdG8gT1MvNDAwICVkXG4iLCAoaW50KWh2cmMpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZC0+ZGV2ID09IE5VTEwpIHsKIAkJLyogdGhpcyBpcyB3aGVuIHdlIHJlcHJvYmUgZm9yIG5ldyBkaXNrcyAqLwogCQlpZiAodmlvX2NyZWF0ZV92aW9kYXNkKGRldl9ubykgPT0gTlVMTCkgewotCQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJImNhbm5vdCBhbGxvY2F0ZSB2aXJ0dWFsIGRldmljZSBmb3IgZGlzayAlZFxuIiwKLQkJCQlkZXZfbm8pOworCQkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIHZpcnR1YWwgZGV2aWNlIGZvciBkaXNrICVkXG4iLAorCQkJCSAgIGRldl9ubyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKgpAQCAtNDU3LDIzICs0NTAsMjAgQEAKIAlzcGluX2xvY2tfaW5pdCgmZC0+cV9sb2NrKTsKIAlxID0gYmxrX2luaXRfcXVldWUoZG9fdmlvZGFzZF9yZXF1ZXN0LCAmZC0+cV9sb2NrKTsKIAlpZiAocSA9PSBOVUxMKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiY2Fubm90IGFsbG9jYXRlIHF1ZXVlIGZvciBkaXNrICVkXG4iLAotCQkJCWRldl9ubyk7CisJCXByX3dhcm5pbmcoImNhbm5vdCBhbGxvY2F0ZSBxdWV1ZSBmb3IgZGlzayAlZFxuIiwgZGV2X25vKTsKIAkJcmV0dXJuIDA7CiAJfQogCWcgPSBhbGxvY19kaXNrKDEgPDwgUEFSVElUSU9OX1NISUZUKTsKIAlpZiAoZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJjYW5ub3QgYWxsb2NhdGUgZGlzayBzdHJ1Y3R1cmUgZm9yIGRpc2sgJWRcbiIsCi0JCQkJZGV2X25vKTsKKwkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIGRpc2sgc3RydWN0dXJlIGZvciBkaXNrICVkXG4iLAorCQkJICAgZGV2X25vKTsKIAkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCXJldHVybiAwOwogCX0KIAogCWQtPmRpc2sgPSBnOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgVklPTUFYQkxPQ0tETUEpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBWSU9NQVhCTE9DS0RNQSk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIFZJT0RBU0RfTUFYU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBWSU9NQVhCTE9DS0RNQSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIFZJT0RBU0RfTUFYU0VDVE9SUyk7CiAJZy0+bWFqb3IgPSBWSU9EQVNEX01BSk9SOwogCWctPmZpcnN0X21pbm9yID0gZGV2X25vIDw8IFBBUlRJVElPTl9TSElGVDsKIAlpZiAoZGV2X25vID49IDI2KQpAQCAtNDg5LDEzICs0NzksMTIgQEAKIAlnLT5kcml2ZXJmc19kZXYgPSBkLT5kZXY7CiAJc2V0X2NhcGFjaXR5KGcsIGQtPnNpemUgPj4gOSk7CiAKLQlwcmludGsoVklPRF9LRVJOX0lORk8gImRpc2sgJWQ6ICVsdSBzZWN0b3JzICglbHUgTUIpICIKLQkJCSJDSFM9JWQvJWQvJWQgc2VjdG9yIHNpemUgJWQlc1xuIiwKLQkJCWRldl9ubywgKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gOSksCi0JCQkodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiAyMCksCi0JCQkoaW50KWQtPmN5bGluZGVycywgKGludClkLT50cmFja3MsCi0JCQkoaW50KWQtPnNlY3RvcnMsIChpbnQpZC0+Ynl0ZXNfcGVyX3NlY3RvciwKLQkJCWQtPnJlYWRfb25seSA/ICIgKFJPKSIgOiAiIik7CisJcHJfaW5mbygiZGlzayAlZDogJWx1IHNlY3RvcnMgKCVsdSBNQikgQ0hTPSVkLyVkLyVkIHNlY3RvciBzaXplICVkJXNcbiIsCisJCWRldl9ubywgKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gOSksCisJCSh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDIwKSwKKwkJKGludClkLT5jeWxpbmRlcnMsIChpbnQpZC0+dHJhY2tzLAorCQkoaW50KWQtPnNlY3RvcnMsIChpbnQpZC0+Ynl0ZXNfcGVyX3NlY3RvciwKKwkJZC0+cmVhZF9vbmx5ID8gIiAoUk8pIiA6ICIiKTsKIAogCS8qIHJlZ2lzdGVyIHVzIGluIHRoZSBnbG9iYWwgbGlzdCAqLwogCWFkZF9kaXNrKGcpOwpAQCAtNTgwLDggKzU2OSw4IEBACiAJaWYgKGVycm9yKSB7CiAJCWNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkgKmVycjsKIAkJZXJyID0gdmlvX2xvb2t1cF9yYyh2aW9kYXNkX2Vycl90YWJsZSwgYmV2ZW50LT5zdWJfcmVzdWx0KTsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJyZWFkL3dyaXRlIGVycm9yICVkOjB4JTA0eCAoJXMpXG4iLAotCQkJCWV2ZW50LT54UmMsIGJldmVudC0+c3ViX3Jlc3VsdCwgZXJyLT5tc2cpOworCQlwcl93YXJuaW5nKCJyZWFkL3dyaXRlIGVycm9yICVkOjB4JTA0eCAoJXMpXG4iLAorCQkJICAgZXZlbnQtPnhSYywgYmV2ZW50LT5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CiAJCW51bV9zZWN0ID0gYmxrX3JxX3NlY3RvcnMocmVxKTsKIAl9CiAJcWxvY2sgPSByZXEtPnEtPnF1ZXVlX2xvY2s7CkBAIC02MDYsOCArNTk1LDcgQEAKIAkJcmV0dXJuOwogCS8qIEZpcnN0LCB3ZSBzaG91bGQgTkVWRVIgZ2V0IGFuIGludCBoZXJlLi4ub25seSBhY2tzICovCiAJaWYgKGh2bHBldmVudF9pc19pbnQoZXZlbnQpKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgIllpa2VzISBnb3QgYW4gaW50IGluIHZpb2Rhc2QgZXZlbnQgaGFuZGxlciFcbiIpOworCQlwcl93YXJuaW5nKCJZaWtlcyEgZ290IGFuIGludCBpbiB2aW9kYXNkIGV2ZW50IGhhbmRsZXIhXG4iKTsKIAkJaWYgKGh2bHBldmVudF9uZWVkX2FjayhldmVudCkpIHsKIAkJCWV2ZW50LT54UmMgPSBIdkxwRXZlbnRfUmNfSW52YWxpZFN1YnR5cGU7CiAJCQlIdkNhbGxFdmVudF9hY2tMcEV2ZW50KGV2ZW50KTsKQEAgLTY1MCw3ICs2MzgsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiaW52YWxpZCBzdWJ0eXBlISIpOworCQlwcl93YXJuaW5nKCJpbnZhbGlkIHN1YnR5cGUhIik7CiAJCWlmIChodmxwZXZlbnRfbmVlZF9hY2soZXZlbnQpKSB7CiAJCQlldmVudC0+eFJjID0gSHZMcEV2ZW50X1JjX0ludmFsaWRTdWJ0eXBlOwogCQkJSHZDYWxsRXZlbnRfYWNrTHBFdmVudChldmVudCk7CkBAIC03MzksMjkgKzcyNywyNiBAQAogCQl2aW9fc2V0X2hvc3RscCgpOwogCiAJaWYgKHZpb3BhdGhfaG9zdExwID09IEh2THBJbmRleEludmFsaWQpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJpbnZhbGlkIGhvc3RpbmcgcGFydGl0aW9uXG4iKTsKKwkJcHJfd2FybmluZygiaW52YWxpZCBob3N0aW5nIHBhcnRpdGlvblxuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBlYXJseV9mYWlsOwogCX0KIAotCXByaW50ayhWSU9EX0tFUk5fSU5GTyAidmVycyAiIFZJT0RfVkVSUyAiLCBob3N0aW5nIHBhcnRpdGlvbiAlZFxuIiwKLQkJCXZpb3BhdGhfaG9zdExwKTsKKwlwcl9pbmZvKCJ2ZXJzICIgVklPRF9WRVJTICIsIGhvc3RpbmcgcGFydGl0aW9uICVkXG4iLCB2aW9wYXRoX2hvc3RMcCk7CiAKICAgICAgICAgLyogcmVnaXN0ZXIgdGhlIGJsb2NrIGRldmljZSAqLwogCXJjID0gIHJlZ2lzdGVyX2Jsa2RldihWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOwogCWlmIChyYykgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXIgJWQgZm9yICVzXG4iLAotCQkJCVZJT0RBU0RfTUFKT1IsIFZJT0RfR0VOSERfTkFNRSk7CisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyICVkIGZvciAlc1xuIiwKKwkJCSAgIFZJT0RBU0RfTUFKT1IsIFZJT0RfR0VOSERfTkFNRSk7CiAJCWdvdG8gZWFybHlfZmFpbDsKIAl9CiAJLyogQWN0dWFsbHkgb3BlbiB0aGUgcGF0aCB0byB0aGUgaG9zdGluZyBwYXJ0aXRpb24gKi8KIAlyYyA9IHZpb3BhdGhfb3Blbih2aW9wYXRoX2hvc3RMcCwgdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8sCiAJCQkJVklPTUFYUkVRICsgMik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImVycm9yIG9wZW5pbmcgcGF0aCB0byBob3N0IHBhcnRpdGlvbiAlZFxuIiwKLQkJICAgICAgIHZpb3BhdGhfaG9zdExwKTsKKwkJcHJfd2FybmluZygiZXJyb3Igb3BlbmluZyBwYXRoIHRvIGhvc3QgcGFydGl0aW9uICVkXG4iLAorCQkJICAgdmlvcGF0aF9ob3N0THApOwogCQlnb3RvIHVucmVnaXN0ZXJfYmxrOwogCX0KIApAQCAtNzcwLDcgKzc1NSw3IEBACiAKIAlyYyA9IHZpb19yZWdpc3Rlcl9kcml2ZXIoJnZpb2Rhc2RfZHJpdmVyKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJ2aW9fcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZFxuIik7CisJCXByX3dhcm5pbmcoInZpb19yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iKTsKIAkJZ290byB1bnNldF9oYW5kbGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCA1MTA0MmYwYmE3Li4zYzY0YWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtMjQzLDEwICsyNDMsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19ibGsgKnZibGs7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAJaW50IGVycjsKIAl1NjQgY2FwOwotCXUzMiB2OwotCXUzMiBibGtfc2l6ZSwgc2dfZWxlbXM7CisJdTMyIHYsIGJsa19zaXplLCBzZ19lbGVtcywgb3B0X2lvX3NpemU7CisJdTE2IG1pbl9pb19zaXplOworCXU4IHBoeXNpY2FsX2Jsb2NrX2V4cCwgYWxpZ25tZW50X29mZnNldDsKIAogCWlmIChpbmRleF90b19taW5vcihpbmRleCkgPj0gMSA8PCBNSU5PUkJJVFMpCiAJCXJldHVybiAtRU5PU1BDOwpAQCAtMjkzLDEzICsyOTUsMTMgQEAKIAkJZ290byBvdXRfbWVtcG9vbDsKIAl9CiAKLQl2YmxrLT5kaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3ZpcnRibGtfcmVxdWVzdCwgJnZibGstPmxvY2spOwotCWlmICghdmJsay0+ZGlzay0+cXVldWUpIHsKKwlxID0gdmJsay0+ZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb192aXJ0YmxrX3JlcXVlc3QsICZ2YmxrLT5sb2NrKTsKKwlpZiAoIXEpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHV0X2Rpc2s7CiAJfQogCi0JdmJsay0+ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7CisJcS0+cXVldWVkYXRhID0gdmJsazsKIAogCWlmIChpbmRleCA8IDI2KSB7CiAJCXNwcmludGYodmJsay0+ZGlzay0+ZGlza19uYW1lLCAidmQlYyIsICdhJyArIGluZGV4ICUgMjYpOwpAQCAtMzIzLDEwICszMjUsMTAgQEAKIAogCS8qIElmIGJhcnJpZXJzIGFyZSBzdXBwb3J0ZWQsIHRlbGwgYmxvY2sgbGF5ZXIgdGhhdCBxdWV1ZSBpcyBvcmRlcmVkICovCiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfRkxVU0gpKQotCQlibGtfcXVldWVfb3JkZXJlZCh2YmxrLT5kaXNrLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKKwkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKIAkJCQkgIHZpcnRibGtfcHJlcGFyZV9mbHVzaCk7CiAJZWxzZSBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9CQVJSSUVSKSkKLQkJYmxrX3F1ZXVlX29yZGVyZWQodmJsay0+ZGlzay0+cXVldWUsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKKwkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOwogCiAJLyogSWYgZGlzayBpcyByZWFkLW9ubHkgaW4gdGhlIGhvc3QsIHRoZSBndWVzdCBzaG91bGQgb2JleSAqLwogCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX1JPKSkKQEAgLTM0NSwxNCArMzQ3LDE0IEBACiAJc2V0X2NhcGFjaXR5KHZibGstPmRpc2ssIGNhcCk7CiAKIAkvKiBXZSBjYW4gaGFuZGxlIHdoYXRldmVyIHRoZSBob3N0IHRvbGQgdXMgdG8gaGFuZGxlLiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7CisJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIHZibGstPnNnX2VsZW1zLTIpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgdmJsay0+c2dfZWxlbXMtMik7CiAKIAkvKiBObyBuZWVkIHRvIGJvdW5jZSBhbnkgcmVxdWVzdHMgKi8KLQlibGtfcXVldWVfYm91bmNlX2xpbWl0KHZibGstPmRpc2stPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CisJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxLCBCTEtfQk9VTkNFX0FOWSk7CiAKIAkvKiBObyByZWFsIHNlY3RvciBsaW1pdC4gKi8KLQlibGtfcXVldWVfbWF4X3NlY3RvcnModmJsay0+ZGlzay0+cXVldWUsIC0xVSk7CisJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIC0xVSk7CiAKIAkvKiBIb3N0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgbWF4aW11bSBzZWdtZW50IHNpemUgYW5kIG51bWJlciBvZgogCSAqIHNlZ21lbnRzLiAqLwpAQCAtMzYwLDE2ICszNjIsNDUgQEAKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIHNpemVfbWF4KSwKIAkJCQkmdik7CiAJaWYgKCFlcnIpCi0JCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHZibGstPmRpc2stPnF1ZXVlLCB2KTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgdik7CiAJZWxzZQotCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSh2YmxrLT5kaXNrLT5xdWV1ZSwgLTFVKTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgLTFVKTsKIAogCS8qIEhvc3QgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgZGV2aWNlICovCiAJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX0JMS19TSVpFLAogCQkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgYmxrX3NpemUpLAogCQkJCSZibGtfc2l6ZSk7CiAJaWYgKCFlcnIpCi0JCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUodmJsay0+ZGlzay0+cXVldWUsIGJsa19zaXplKTsKKwkJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCBibGtfc2l6ZSk7CisJZWxzZQorCQlibGtfc2l6ZSA9IHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxKTsKKworCS8qIFVzZSB0b3BvbG9neSBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGUgKi8KKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIHBoeXNpY2FsX2Jsb2NrX2V4cCksCisJCQkmcGh5c2ljYWxfYmxvY2tfZXhwKTsKKwlpZiAoIWVyciAmJiBwaHlzaWNhbF9ibG9ja19leHApCisJCWJsa19xdWV1ZV9waHlzaWNhbF9ibG9ja19zaXplKHEsCisJCQkJYmxrX3NpemUgKiAoMSA8PCBwaHlzaWNhbF9ibG9ja19leHApKTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgYWxpZ25tZW50X29mZnNldCksCisJCQkmYWxpZ25tZW50X29mZnNldCk7CisJaWYgKCFlcnIgJiYgYWxpZ25tZW50X29mZnNldCkKKwkJYmxrX3F1ZXVlX2FsaWdubWVudF9vZmZzZXQocSwgYmxrX3NpemUgKiBhbGlnbm1lbnRfb2Zmc2V0KTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgbWluX2lvX3NpemUpLAorCQkJJm1pbl9pb19zaXplKTsKKwlpZiAoIWVyciAmJiBtaW5faW9fc2l6ZSkKKwkJYmxrX3F1ZXVlX2lvX21pbihxLCBibGtfc2l6ZSAqIG1pbl9pb19zaXplKTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgb3B0X2lvX3NpemUpLAorCQkJJm9wdF9pb19zaXplKTsKKwlpZiAoIWVyciAmJiBvcHRfaW9fc2l6ZSkKKwkJYmxrX3F1ZXVlX2lvX29wdChxLCBibGtfc2l6ZSAqIG9wdF9pb19zaXplKTsKKwogCiAJYWRkX2Rpc2sodmJsay0+ZGlzayk7CiAJcmV0dXJuIDA7CkBAIC00MDQsNyArNDM1LDcgQEAKIAlrZnJlZSh2YmxrKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFZJUlRJT19JRF9CTE9DSywgVklSVElPX0RFVl9BTllfSUQgfSwKIAl7IDAgfSwKIH07CkBAIC00MTIsNyArNDQzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fQkxLX0ZfQkFSUklFUiwgVklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwKIAlWSVJUSU9fQkxLX0ZfR0VPTUVUUlksIFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLAotCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfRkxVU0gKKwlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hkLmMgYi9kcml2ZXJzL2Jsb2NrL3hkLmMKaW5kZXggZDFmZDAzMi4uMWEzMjVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGQuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJfQogCiAJLyogeGRfbWF4c2VjdG9ycyBkZXBlbmRzIG9uIGNvbnRyb2xsZXIgLSBzbyBzZXQgYWZ0ZXIgZGV0ZWN0aW9uICovCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHhkX3F1ZXVlLCB4ZF9tYXhzZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoeGRfcXVldWUsIHhkX21heHNlY3RvcnMpOwogCiAJZm9yIChpID0gMDsgaSA8IHhkX2RyaXZlczsgaSsrKQogCQlhZGRfZGlzayh4ZF9nZW5kaXNrW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCmluZGV4IDA1YTMxZTU1ZDIuLjljMDk2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwpAQCAtMzQ2LDE1ICszNDYsMTQgQEAKIAogCS8qIEhhcmQgc2VjdG9yIHNpemUgYW5kIG1heCBzZWN0b3JzIGltcGVyc29uYXRlIHRoZSBlcXVpdi4gaGFyZHdhcmUuICovCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShycSwgc2VjdG9yX3NpemUpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhycSwgNTEyKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocnEsIDUxMik7CiAKIAkvKiBFYWNoIHNlZ21lbnQgaW4gYSByZXF1ZXN0IGlzIHVwIHRvIGFuIGFsaWduZWQgcGFnZSBpbiBzaXplLiAqLwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHJxLCBQQUdFX1NJWkUgLSAxKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShycSwgUEFHRV9TSVpFKTsKIAogCS8qIEVuc3VyZSBhIG1lcmdlZCByZXF1ZXN0IHdpbGwgZml0IGluIGEgc2luZ2xlIEkvTyByaW5nIHNsb3QuICovCi0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHJxLCBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocnEsIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhycSwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKIAogCS8qIE1ha2Ugc3VyZSBidWZmZXIgYWRkcmVzc2VzIGFyZSBzZWN0b3ItYWxpZ25lZC4gKi8KIAlibGtfcXVldWVfZG1hX2FsaWdubWVudChycSwgNTExKTsKQEAgLTEwNTAsNyArMTA0OSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCBibGtmcm9udF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCBibGtmcm9udF9pZHNbXSA9IHsKIAl7ICJ2YmQiIH0sCiAJeyAiIiB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwppbmRleCBlNWM1NDE1Li5lMWM5NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtMTIyNyw3ICsxMjI3LDcgQEAKIH0KIAogLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFjZV9vZl9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhY2Vfb2ZfbWF0Y2hbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IC5jb21wYXRpYmxlID0gInhsbngsb3BiLXN5c2FjZS0xLjAwLmIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAieGxueCxvcGItc3lzYWNlLTEuMDAuYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zeXNhY2UtMS4wMC5hIiwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCmluZGV4IGFkZDk0ODUuLjEyOGNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwpAQCAtMTQzLDYgKzE0Myw4IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKIAlpZiAoYXRoM2tfbG9hZF9maXJtd2FyZShkYXRhLCBkYXRhLT5md19kYXRhLCBkYXRhLT5md19zaXplKSkgewogCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCQlrZnJlZShkYXRhLT5md19kYXRhKTsKKwkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jCmluZGV4IGVhZmQ0YWYuLmIwYzg0YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogI2RlZmluZSBWRVJTSU9OICIxLjIiCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBiY20yMDN4X3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYmNtMjAzeF90YWJsZVtdID0gewogCS8qIEJyb2FkY29tIEJsdXRvbml1bSAoQkNNMjAzMykgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzMpIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCmluZGV4IDJhMDA3MDcuLjAwNTkxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlkYXRhLT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfVVNCOworCWhkZXYtPmJ1cyA9IEhDSV9VU0I7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbnRmLT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCBjMmNmODExLi5kOWJmODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTczNiw3ICs3MzYsNyBAQAogCiAJaW5mby0+aGRldiA9IGhkZXY7CiAKLQloZGV2LT50eXBlID0gSENJX1BDQ0FSRDsKKwloZGV2LT5idXMgPSBIQ0lfUENDQVJEOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gaW5mbzsKIAlTRVRfSENJREVWX0RFVihoZGV2LCAmaW5mby0+cF9kZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKaW5kZXggYzExNTI4NS4uZDk0NWNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloZGV2LT50eXBlID0gSENJX1VTQjsKKwloZGV2LT5idXMgPSBIQ0lfVVNCOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIAogCWRhdGEtPmhkZXYgPSBoZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IDlmNTkyNmEuLjAyN2NiOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogCiAJaW5mby0+aGRldiA9IGhkZXY7CiAKLQloZGV2LT50eXBlID0gSENJX1BDQ0FSRDsKKwloZGV2LT5idXMgPSBIQ0lfUENDQVJEOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gaW5mbzsKIAlTRVRfSENJREVWX0RFVihoZGV2LCAmaW5mby0+cF9kZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCmluZGV4IGQ0M2I1Y2IuLjMxMjZhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYwpAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgImJ0bXJ2bF9kcnYuaCIKIAogc3RydWN0IGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEgewotCXN0cnVjdCBkZW50cnkgKnJvb3RfZGlyLCAqY29uZmlnX2RpciwgKnN0YXR1c19kaXI7CisJc3RydWN0IGRlbnRyeSAqY29uZmlnX2RpcjsKKwlzdHJ1Y3QgZGVudHJ5ICpzdGF0dXNfZGlyOwogCiAJLyogY29uZmlnICovCiAJc3RydWN0IGRlbnRyeSAqcHNtb2RlOwpAQCAtMzYzLDYgKzM2NCw5IEBACiAJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gaGRldi0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEgKmRiZzsKIAorCWlmICghaGRldi0+ZGVidWdmcykKKwkJcmV0dXJuOworCiAJZGJnID0ga3phbGxvYyhzaXplb2YoKmRiZyksIEdGUF9LRVJORUwpOwogCXByaXYtPmRlYnVnZnNfZGF0YSA9IGRiZzsKIApAQCAtMzcxLDkgKzM3NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlkYmctPnJvb3RfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJidG1ydmwiLCBOVUxMKTsKLQotCWRiZy0+Y29uZmlnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY29uZmlnIiwgZGJnLT5yb290X2Rpcik7CisJZGJnLT5jb25maWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJjb25maWciLCBoZGV2LT5kZWJ1Z2ZzKTsKIAogCWRiZy0+cHNtb2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHNtb2RlIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAogCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX3BzbW9kZV9mb3BzKTsKQEAgLTM4OCw3ICszOTAsNyBAQAogCWRiZy0+aHNjZmdjbWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJoc2NmZ2NtZCIsIDA2NDQsIGRiZy0+Y29uZmlnX2RpciwKIAkJCQloZGV2LT5kcml2ZXJfZGF0YSwgJmJ0bXJ2bF9oc2NmZ2NtZF9mb3BzKTsKIAotCWRiZy0+c3RhdHVzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic3RhdHVzIiwgZGJnLT5yb290X2Rpcik7CisJZGJnLT5zdGF0dXNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0dXMiLCBoZGV2LT5kZWJ1Z2ZzKTsKIAlkYmctPmN1cnBzbW9kZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnBzbW9kZSIsIDA0NDQsCiAJCQkJCQlkYmctPnN0YXR1c19kaXIsCiAJCQkJCQloZGV2LT5kcml2ZXJfZGF0YSwKQEAgLTQyNSw3ICs0MjcsNSBAQAogCWRlYnVnZnNfcmVtb3ZlKGRiZy0+dHhkbmxkcmVhZHkpOwogCWRlYnVnZnNfcmVtb3ZlKGRiZy0+c3RhdHVzX2Rpcik7CiAKLQlkZWJ1Z2ZzX3JlbW92ZShkYmctPnJvb3RfZGlyKTsKLQogCWtmcmVlKGRiZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYwppbmRleCBmOTc3NzFjLi41M2E0M2FkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCkBAIC01NjMsNyArNTYzLDcgQEAKIAogCXByaXYtPmJ0bXJ2bF9kZXYudHhfZG5sZF9yZHkgPSB0cnVlOwogCi0JaGRldi0+dHlwZSA9IEhDSV9TRElPOworCWhkZXYtPmJ1cyA9IEhDSV9TRElPOwogCWhkZXYtPm9wZW4gPSBidG1ydmxfb3BlbjsKIAloZGV2LT5jbG9zZSA9IGJ0bXJ2bF9jbG9zZTsKIAloZGV2LT5mbHVzaCA9IGJ0bXJ2bF9mbHVzaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCmluZGV4IDU3ZDk2NWIuLjk0ZjFmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYwpAQCAtOTc2LDcgKzk3Niw3IEBACiAJLnJlbW92ZQkJPSBidG1ydmxfc2Rpb19yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidG1ydmxfc2Rpb19pbml0X21vZHVsZSh2b2lkKQogewogCWlmIChzZGlvX3JlZ2lzdGVyX2RyaXZlcigmYnRfbXJ2bF9zZGlvKSAhPSAwKSB7CiAJCUJUX0VSUigiU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uIEZhaWxlZCIpOwpAQCAtOTg5LDcgKzk4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0bXJ2bF9zZGlvX2V4aXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYnRtcnZsX3NkaW9fZXhpdF9tb2R1bGUodm9pZCkKIHsKIAkvKiBTZXQgdGhlIGZsYWcgYXMgdXNlciBpcyByZW1vdmluZyB0aGlzIG1vZHVsZS4gKi8KIAl1c2VyX3JtbW9kID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0c2Rpby5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRzZGlvLmMKaW5kZXggN2UyOTgyNy4uNzZlNTEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRzZGlvLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRzZGlvLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloZGV2LT50eXBlID0gSENJX1NESU87CisJaGRldi0+YnVzID0gSENJX1NESU87CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogCiAJZGF0YS0+aGRldiA9IGhkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IDkxYzUyMzAuLjYwYzA5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC01MDAsNyArNTAwLDcgQEAKIAogCWluZm8tPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9QQ0NBUkQ7CisJaGRldi0+YnVzID0gSENJX1BDQ0FSRDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGluZm87CiAJU0VUX0hDSURFVl9ERVYoaGRldiwgJmluZm8tPnBfZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCBhNjk5ZjA5Li41ZDljYzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTkzOSw3ICs5MzksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloZGV2LT50eXBlID0gSENJX1VTQjsKKwloZGV2LT5idXMgPSBIQ0lfVVNCOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIAogCWRhdGEtPmhkZXYgPSBoZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IDY5NzU5MTkuLjE3Nzg4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCiAJaW5mby0+aGRldiA9IGhkZXY7CiAKLQloZGV2LT50eXBlID0gSENJX1BDQ0FSRDsKKwloZGV2LT5idXMgPSBIQ0lfUENDQVJEOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gaW5mbzsKIAlTRVRfSENJREVWX0RFVihoZGV2LCAmaW5mby0+cF9kZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKaW5kZXggYWEwOTE5My4uNzZhMWFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKQEAgLTM4Myw3ICszODMsNyBAQAogCiAJaHUtPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9VQVJUOworCWhkZXYtPmJ1cyA9IEhDSV9VQVJUOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gaHU7CiAKIAloZGV2LT5vcGVuICA9IGhjaV91YXJ0X29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdmhjaS5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYwppbmRleCA3NTk1Mjc0MS4uYmIwYWVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdmhjaS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCWRhdGEtPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9WSVJUVUFMOworCWhkZXYtPmJ1cyA9IEhDSV9WSVJUVUFMOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIAogCWhkZXYtPm9wZW4gICAgID0gdmhjaV9vcGVuX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBlNzg5ZTZjLi4wM2M3MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC03NDEsNyArNzQxLDcgQEAKIHsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGdkLmdkcm9tX3JxLCBHRFJPTV9IQVJEX1NFQ1RPUik7CiAJLyogdXNpbmcgRE1BIHNvIG1lbW9yeSB3aWxsIG5lZWQgdG8gYmUgY29udGlndW91cyAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoZ2QuZ2Ryb21fcnEsIDEpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoZ2QuZ2Ryb21fcnEsIDEpOwogCS8qIHNldCBhIGxhcmdlIG1heCBzaXplIHRvIGdldCBtb3N0IGZyb20gRE1BICovCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoZ2QuZ2Ryb21fcnEsIDB4NDAwMDApOwogCWdkLmRpc2stPnF1ZXVlID0gZ2QuZ2Ryb21fcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggNTdjYTY5ZTAuLmNjNDM1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYworKysgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKQEAgLTYxNiw5ICs2MTYsOCBAQAogCWdlbmRpc2stPmZpcnN0X21pbm9yID0gZGV2aWNlbm87CiAJc3RybmNweShnZW5kaXNrLT5kaXNrX25hbWUsIGMtPm5hbWUsCiAJCQlzaXplb2YoZ2VuZGlzay0+ZGlza19uYW1lKSk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCAxKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgMSk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIDQwOTYgLyA1MTIpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgMSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIDQwOTYgLyA1MTIpOwogCWdlbmRpc2stPnF1ZXVlID0gcTsKIAlnZW5kaXNrLT5mb3BzID0gJnZpb2NkX2ZvcHM7CiAJZ2VuZGlzay0+ZmxhZ3MgPSBHRU5IRF9GTF9DRHxHRU5IRF9GTF9SRU1PVkFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGUwMjM2ODIuLjMxNDFkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC02NjYsNiArNjY2LDE0IEBACiAJaGVscAogCSAgVmlydGlvIGNvbnNvbGUgZm9yIHVzZSB3aXRoIGxndWVzdCBhbmQgb3RoZXIgaHlwZXJ2aXNvcnMuCiAKKwkgIEFsc28gc2VydmVzIGFzIGEgZ2VuZXJhbC1wdXJwb3NlIHNlcmlhbCBkZXZpY2UgZm9yIGRhdGEKKwkgIHRyYW5zZmVyIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0LiAgQ2hhcmFjdGVyIGRldmljZXMgYXQKKwkgIC9kZXYvdnBvcnROcG4gd2lsbCBiZSBjcmVhdGVkIHdoZW4gY29ycmVzcG9uZGluZyBwb3J0cyBhcmUKKwkgIGZvdW5kLCB3aGVyZSBOIGlzIHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBuIGlzIHRoZSBwb3J0IG51bWJlcgorCSAgd2l0aGluIHRoYXQgZGV2aWNlLiAgSWYgc3BlY2lmaWVkIGJ5IHRoZSBob3N0LCBhIHN5c2ZzCisJICBhdHRyaWJ1dGUgY2FsbGVkICduYW1lJyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgbmFtZSBmb3IKKwkgIHRoZSBwb3J0IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHVkZXYgc2NyaXB0cyB0byBjcmVhdGUgYQorCSAgc3ltbGluayB0byB0aGUgZGV2aWNlLgogCiBjb25maWcgSFZDUwogCXRyaXN0YXRlICJJQk0gSHlwZXJ2aXNvciBWaXJ0dWFsIENvbnNvbGUgU2VydmVyIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCAzOTk5YTVmLi45MTlhMjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTgsOCArOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlICJhZ3AuaCIKIAoraW50IGludGVsX2FncF9lbmFibGVkOworRVhQT1JUX1NZTUJPTChpbnRlbF9hZ3BfZW5hYmxlZCk7CisKIC8qCiAgKiBJZiB3ZSBoYXZlIEludGVsIGdyYXBoaWNzLCB3ZSdyZSBub3QgZ29pbmcgdG8gaGF2ZSBhbnl0aGluZyBvdGhlciB0aGFuCiAgKiBhbiBJbnRlbCBJT01NVS4gU28gbWFrZSB0aGUgY29ycmVjdCB1c2Ugb2YgdGhlIFBDSSBETUEgQVBJIGNvbnRpbmdlbnQKQEAgLTY0LDYgKzY4LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIJICAgIDB4MDA2MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQiAgICAweDAwNmEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0lHCSAgICAweDAwNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQiAgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSUcgIDB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSEIgIDB4MDEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSUcgIDB4MDEwNgogCiAvKiBjb3ZlciA5MTUgYW5kIDk0NSB2YXJpYW50cyAqLwogI2RlZmluZSBJU19JOTE1IChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3MjIxX0hCIHx8IFwKQEAgLTk4LDcgKzEwNiw5IEBACiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfRF9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIgfHwgXAotCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQikKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NQzJfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCKQogCiBleHRlcm4gaW50IGFncF9tZW1vcnlfcmVzZXJ2ZWQ7CiAKQEAgLTE0Nyw2ICsxNTcsMjUgQEAKICNkZWZpbmUgSU5URUxfSTc1MDVfQUdQQ1RSTAkweDcwCiAjZGVmaW5lIElOVEVMX0k3NTA1X01DSENGRwkweDUwCiAKKyNkZWZpbmUgU05CX0dNQ0hfQ1RSTAkweDUwCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fTUFTSwkweEY4CisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzJNCQkoMSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzY0TQkJKDIgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl85Nk0JCSgzIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMTI4TQkoNCA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzE2ME0JKDUgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8xOTJNCSg2IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMjI0TQkoNyA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzI1Nk0JKDggPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8yODhNCSg5IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzIwTQkoMHhhIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzUyTQkoMHhiIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzg0TQkoMHhjIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDE2TQkoMHhkIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDQ4TQkoMHhlIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDgwTQkoMHhmIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNTEyTQkoMHgxMCA8PCAzKQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFwZXJfc2l6ZV9pbmZvX2ZpeGVkIGludGVsX2k4MTBfc2l6ZXNbXSA9CiB7CiAJezY0LCAxNjM4NCwgNH0sCkBAIC0yOTMsNiArMzIyLDEzIEBACiAJCQkJCW9mZl90IHBnX3N0YXJ0LCBpbnQgbWFza190eXBlKQogewogCWludCBpLCBqOworCXUzMiBjYWNoZV9iaXRzID0gMDsKKworCWlmIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCIHx8CisJICAgIGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9IQikKKwl7CisJCWNhY2hlX2JpdHMgPSBJODMwX1BURV9TWVNURU1fQ0FDSEVEOworCX0KIAogCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYWdwX2JyaWRnZSwKQEAgLTYxMyw3ICs2NDksNyBAQAogc3RhdGljIHZvaWQgaW50ZWxfaTgzMF9pbml0X2d0dF9lbnRyaWVzKHZvaWQpCiB7CiAJdTE2IGdtY2hfY3RybDsKLQlpbnQgZ3R0X2VudHJpZXM7CisJaW50IGd0dF9lbnRyaWVzID0gMDsKIAl1OCByZGN0OwogCWludCBsb2NhbCA9IDA7CiAJc3RhdGljIGNvbnN0IGludCBkZHRbNF0gPSB7IDAsIDE2LCAzMiwgNjQgfTsKQEAgLTcwNSw2ICs3NDEsNjMgQEAKIAkJCWd0dF9lbnRyaWVzID0gMDsKIAkJCWJyZWFrOwogCQl9CisJfSBlbHNlIGlmIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCIHx8CisJCSAgIGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9IQikgeworCQkvKgorCQkgKiBTYW5keUJyaWRnZSBoYXMgbmV3IG1lbW9yeSBjb250cm9sIHJlZyBhdCAweDUwLncKKwkJICovCisJCXUxNiBzbmJfZ21jaF9jdGw7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGludGVsX3ByaXZhdGUucGNpZGV2LCBTTkJfR01DSF9DVFJMLCAmc25iX2dtY2hfY3RsKTsKKwkJc3dpdGNoIChzbmJfZ21jaF9jdGwgJiBTTkJfR01DSF9HTVNfU1RPTEVOX01BU0spIHsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyTToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMzIpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzY0TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoNjQpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzk2TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoOTYpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzEyOE06CisJCQlndHRfZW50cmllcyA9IE1CKDEyOCkgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMTYwTToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMTYwKSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8xOTJNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigxOTIpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzIyNE06CisJCQlndHRfZW50cmllcyA9IE1CKDIyNCkgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMjU2TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMjU2KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8yODhNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigyODgpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyME06CisJCQlndHRfZW50cmllcyA9IE1CKDMyMCkgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMzUyTToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMzUyKSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8zODRNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigzODQpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQxNk06CisJCQlndHRfZW50cmllcyA9IE1CKDQxNikgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNDQ4TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoNDQ4KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl80ODBNOgorCQkJZ3R0X2VudHJpZXMgPSBNQig0ODApIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzUxMk06CisJCQlndHRfZW50cmllcyA9IE1CKDUxMikgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChnbWNoX2N0cmwgJiBJODU1X0dNQ0hfR01TX01BU0spIHsKIAkJY2FzZSBJODU1X0dNQ0hfR01TX1NUT0xFTl8xTToKQEAgLTgxNSwxMiArOTA4LDYgQEAKIAkJaW50ZWxfaTgzMF9maW5pX2ZsdXNoKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb193YmludmQodm9pZCAqbnVsbCkKLXsKLQl3YmludmQoKTsKLX0KLQogLyogVGhlIGNoaXBzZXRfZmx1c2ggaW50ZXJmYWNlIG5lZWRzIHRvIGdldCBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbgogICogZmx1c2hlZCBvdXQgb2YgdGhlIENQVSBhbGwgdGhlIHdheSBvdXQgdG8gbWFpbiBtZW1vcnksIGJlY2F1c2UgdGhlIEdQVQogICogZG9lc24ndCBzbm9vcCB0aG9zZSBidWZmZXJzLgpAQCAtODM3LDEyICs5MjQsMTAgQEAKIAogCW1lbXNldChwZywgMCwgMTAyNCk7CiAKLQlpZiAoY3B1X2hhc19jbGZsdXNoKSB7CisJaWYgKGNwdV9oYXNfY2xmbHVzaCkKIAkJY2xmbHVzaF9jYWNoZV9yYW5nZShwZywgMTAyNCk7Ci0JfSBlbHNlIHsKLQkJaWYgKG9uX2VhY2hfY3B1KGRvX3diaW52ZCwgTlVMTCwgMSkgIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7Ci0JfQorCWVsc2UgaWYgKHdiaW52ZF9vbl9hbGxfY3B1cygpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7CiB9CiAKIC8qIFRoZSBpbnRlbCBpODMwIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZXMgdGhlIGFncCBhcGVydHVyZSBkdXJpbmcgUE9TVC4KQEAgLTEzNjQsNiArMTQ0OSw4IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01fSEI6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01BX0hCOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NQzJfSEI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCOgogCQkqZ3R0X29mZnNldCA9ICpndHRfc2l6ZSA9IE1CKDIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjM0NSw5ICsyNDMyLDkgQEAKIAkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19JRywgMCwgIlEzMyIsCiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX01fSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfTV9JRywgMCwgIlBpbmV2aWV3IiwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfTV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19NX0lHLCAwLCAiR01BMzE1MCIsCiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX0lHLCAwLCAiUGluZXZpZXciLAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19JRywgMCwgIkdNQTMxNTAiLAogCQlOVUxMLCAmaW50ZWxfZzMzX2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSUcsIDAsCiAJICAgICJHTTQ1IiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCkBAIC0yMzYyLDEzICsyNDQ5LDE3IEBACiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0c0MV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9HNDFfSUcsIDAsCiAJICAgICJHNDEiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfRF9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9EX0lHLCAwLAotCSAgICAiSXJvbmxha2UvRCIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0lHLCAwLAotCSAgICAiSXJvbmxha2UvTSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9JRywgMCwKLQkgICAgIklyb25sYWtlL01BIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCisJICAgICJIRCBHcmFwaGljcyIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NQzJfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9JRywgMCwKLQkgICAgIklyb25sYWtlL01DMiIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSUcsIDAsCisJICAgICJTYW5keWJyaWRnZSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSUcsIDAsCisJICAgICJTYW5keWJyaWRnZSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAogCXsgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9CiB9OwogCkBAIC0yMzc4LDcgKzI0NjksNyBAQAogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKIAl1OCBjYXBfcHRyID0gMDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAogCWNhcF9wdHIgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfQUdQKTsKIApAQCAtMjQ3MCw3ICsyNTYxLDEwIEBACiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJyaWRnZSk7Ci0JcmV0dXJuIGFncF9hZGRfYnJpZGdlKGJyaWRnZSk7CisJZXJyID0gYWdwX2FkZF9icmlkZ2UoYnJpZGdlKTsKKwlpZiAoIWVycikKKwkJaW50ZWxfYWdwX2VuYWJsZWQgPSAxOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhZ3BfaW50ZWxfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMjU3NSw2ICsyNjY5LDggQEAKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01fSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUMyX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSEIpLAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCA0MjU0NDU3ZDMuLmI4NjFjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC0xNTgsMTMgKzE1OCwxMSBAQAogCiAjZGVmaW5lIE5SX0lTQV9BRERSUyBBUlJBWV9TSVpFKGN5X2lzYV9hZGRyZXNzZXMpCiAKLSNpZmRlZiBNT0RVTEUKIHN0YXRpYyBsb25nIG1hZGRyW05SX0NBUkRTXTsKIHN0YXRpYyBpbnQgaXJxW05SX0NBUkRTXTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KG1hZGRyLCBsb25nLCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMCk7Ci0jZW5kaWYKIAogI2VuZGlmCQkJCS8qIENPTkZJR19JU0EgKi8KIApAQCAtNTk4LDEyICs1OTYsNiBAQAogCXNhdmVfY2FyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSk7CiAJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAotCS8qIHZhbGlkYXRlIHRoZSBwb3J0IyAoYXMgY29uZmlndXJlZCBhbmQgb3BlbikgKi8KLQlpZiAoY2hhbm5lbCArIGNoaXAgKiA0ID49IGNpbmZvLT5ucG9ydHMpIHsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lUeFJkeSk7Ci0JCWdvdG8gZW5kOwotCX0KIAlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOwogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOwogCWlmICh0dHkgPT0gTlVMTCkgewpAQCAtMzMxNiwxMyArMzMwOCwxMCBAQAogCXVuc2lnbmVkIHNob3J0IGN5X2lzYV9pcnEsIG5ib2FyZDsKIAl2b2lkIF9faW9tZW0gKmN5X2lzYV9hZGRyZXNzOwogCXVuc2lnbmVkIHNob3J0IGksIGosIGN5X2lzYV9uY2hhbjsKLSNpZmRlZiBNT0RVTEUKIAlpbnQgaXNwYXJhbSA9IDA7Ci0jZW5kaWYKIAogCW5ib2FyZCA9IDA7CiAKLSNpZmRlZiBNT0RVTEUKIAkvKiBDaGVjayBmb3IgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgewogCQlpZiAobWFkZHJbaV0gfHwgaSkgewpAQCAtMzMzMiw3ICszMzIxLDYgQEAKIAkJaWYgKCFtYWRkcltpXSkKIAkJCWJyZWFrOwogCX0KLSNlbmRpZgogCiAJLyogc2NhbiB0aGUgYWRkcmVzcyB0YWJsZSBwcm9iaW5nIGZvciBDeWNsb20tWS9JU0EgYm9hcmRzICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0lTQV9BRERSUzsgaSsrKSB7CkBAIC0zMzUzLDExICszMzQxLDEwIEBACiAJCQlpb3VubWFwKGN5X2lzYV9hZGRyZXNzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0jaWZkZWYgTU9EVUxFCisKIAkJaWYgKGlzcGFyYW0gJiYgaSA8IE5SX0NBUkRTICYmIGlycVtpXSkKIAkJCWN5X2lzYV9pcnEgPSBpcnFbaV07CiAJCWVsc2UKLSNlbmRpZgogCQkJLyogZmluZCBvdXQgdGhlIGJvYXJkJ3MgaXJxIGJ5IHByb2JpbmcgKi8KIAkJCWN5X2lzYV9pcnEgPSBkZXRlY3RfaXNhX2lycShjeV9pc2FfYWRkcmVzcyk7CiAJCWlmIChjeV9pc2FfaXJxID09IDApIHsKQEAgLTQyMDgsMyArNDE5NSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihDWV9WRVJTSU9OKTsKIE1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKENZQ0xBREVTX01BSk9SKTsKK01PRFVMRV9GSVJNV0FSRSgiY3l6ZmlybS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfYmVhdC5jIGIvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKaW5kZXggMGFmYzhiOC4uNWZlNDYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfYmVhdF9nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19iZWF0X2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfYmVhdF9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19iZWF0X3B1dF9jaGFycywKIH07CkBAIC05OSw3ICs5OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGh2Y19iZWF0X2NvbnNvbGVfaW5pdCh2b2lkKQogewotCWlmIChodmNfYmVhdF91c2VpdCAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkJlYXQiKSkgeworCWlmIChodmNfYmVhdF91c2VpdCAmJiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkJlYXQiKSkgewogCQlodmNfaW5zdGFudGlhdGUoMCwgMCwgJmh2Y19iZWF0X2dldF9wdXRfb3BzKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IDQxNmQzNDIuLjQ2NTE4NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKICAqIGNvbnNvbGUgaW50ZXJmYWNlcyBidXQgY2FuIHN0aWxsIGJlIHVzZWQgYXMgYSB0dHkgZGV2aWNlLiAgVGhpcyBoYXMgdG8gYmUKICAqIHN0YXRpYyBiZWNhdXNlIGttYWxsb2Mgd2lsbCBub3Qgd29yayBkdXJpbmcgZWFybHkgY29uc29sZSBpbml0LgogICovCi1zdGF0aWMgc3RydWN0IGh2X29wcyAqY29uc19vcHNbTUFYX05SX0hWQ19DT05TT0xFU107CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyAqY29uc19vcHNbTUFYX05SX0hWQ19DT05TT0xFU107CiBzdGF0aWMgdWludDMyX3QgdnRlcm1ub3NbTUFYX05SX0hWQ19DT05TT0xFU10gPQogCXtbMCAuLi4gTUFYX05SX0hWQ19DT05TT0xFUyAtIDFdID0gLTF9OwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJcmV0dXJuOwogCiAJLyogVGhpcyBjb25zb2xlIGFkYXB0ZXIgd2FzIHJlbW92ZWQgc28gaXQgaXMgbm90IHVzYWJsZS4gKi8KLQlpZiAodnRlcm1ub3NbaW5kZXhdIDwgMCkKKwlpZiAodnRlcm1ub3NbaW5kZXhdID09IC0xKQogCQlyZXR1cm47CiAKIAl3aGlsZSAoY291bnQgPiAwIHx8IGkgPiAwKSB7CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqIHZ0eSBhZGFwdGVycyBkbyBOT1QgZ2V0IGFuIGh2Y19pbnN0YW50aWF0ZSgpIGNhbGxiYWNrIHNpbmNlIHRoZXkKICAqIGFwcGVhciBhZnRlciBlYXJseSBjb25zb2xlIGluaXQuCiAgKi8KLWludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBzdHJ1Y3QgaHZfb3BzICpvcHMpCitpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzKQogewogCXN0cnVjdCBodmNfc3RydWN0ICpocDsKIApAQCAtNzQ4LDggKzc0OCw5IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9IGh2Y19jaGFyc19pbl9idWZmZXIsCiB9OwogCi1zdHJ1Y3QgaHZjX3N0cnVjdCBfX2RldmluaXQgKmh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKLQkJCQkJc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpCitzdHJ1Y3QgaHZjX3N0cnVjdCAqaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMsCisJCQkgICAgIGludCBvdXRidWZfc2l6ZSkKIHsKIAlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaCBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCmluZGV4IDEwOTUwY2EuLjU0MzgxZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtNTUsNyArNTUsNyBAQAogCWludCBvdXRidWZfc2l6ZTsKIAlpbnQgbl9vdXRidWY7CiAJdWludDMyX3QgdnRlcm1ubzsKLQlzdHJ1Y3QgaHZfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzOwogCWludCBpcnFfcmVxdWVzdGVkOwogCWludCBkYXRhOwogCXN0cnVjdCB3aW5zaXplIHdzOwpAQCAtNzYsMTEgKzc2LDEyIEBACiB9OwogCiAvKiBSZWdpc3RlciBhIHZ0ZXJtIGFuZCBhIHNsb3QgaW5kZXggZm9yIHVzZSBhcyBhIGNvbnNvbGUgKGNvbnNvbGVfaW5pdCkgKi8KLWV4dGVybiBpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwgc3RydWN0IGh2X29wcyAqb3BzKTsKK2V4dGVybiBpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcyk7CiAKIC8qIHJlZ2lzdGVyIGEgdnRlcm0gZm9yIGh2YyB0dHkgb3BlcmF0aW9uIChtb2R1bGVfaW5pdCBvciBob3RwbHVnIGFkZCkgKi8KLWV4dGVybiBzdHJ1Y3QgaHZjX3N0cnVjdCAqIF9fZGV2aW5pdCBodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCi0JCQkJc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpOworZXh0ZXJuIHN0cnVjdCBodmNfc3RydWN0ICogaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpOwogLyogcmVtb3ZlIGEgdnRlcm0gZnJvbSBodmMgdHR5IG9wZXJhdGlvbiAobW9kdWxlX2V4aXQgb3IgaG90cGx1ZyByZW1vdmUpICovCiBleHRlcm4gaW50IGh2Y19yZW1vdmUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwppbmRleCA5MzZkMDViLi5mZDAyNDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCiAJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IGZlNjJiZDAuLjIxNjgxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAogCiAvKiBIVkMgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2l1Y3Zfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2l1Y3Zfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfaXVjdl9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19pdWN2X3B1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gaHZjX2l1Y3Zfbm90aWZpZXJfYWRkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwppbmRleCA4ODU5MGQwLi42MWM0YTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwpAQCAtNzEsNyArNzEsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfcnRhc19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19ydGFzX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfcnRhc19yZWFkX2NvbnNvbGUsCiAJLnB1dF9jaGFycyA9IGh2Y19ydGFzX3dyaXRlX2NvbnNvbGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYwppbmRleCBiZDYzYmE4Li5iMDk1N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYwpAQCAtNTgsNyArNTgsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfdWRiZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfdWRiZ19vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y191ZGJnX2dldCwKIAkucHV0X2NoYXJzID0gaHZjX3VkYmdfcHV0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfdmlvLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCmluZGV4IDEwYmUzNDMuLjI3MzcwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwpAQCAtNzcsNyArNzcsNyBAQAogCXJldHVybiBnb3Q7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gZmlsdGVyZWRfZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBodmNfcHV0X2NoYXJzLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKaW5kZXggYjFhNzE2My4uNjA0NDZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlyZXR1cm4gcmVjdjsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19vcHMgPSB7CiAJLmdldF9jaGFycyA9IHJlYWRfY29uc29sZSwKIAkucHV0X2NoYXJzID0gd3JpdGVfY29uc29sZSwKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwppbmRleCA4NzA2MDI2Li5kMzE0ODNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogY29uZmlnIEhXX1JBTkRPTV9PTUFQCiAJdHJpc3RhdGUgIk9NQVAgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiAoQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYKQorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDIpCiAJZGVmYXVsdCBIV19SQU5ET00KICAJLS0taGVscC0tLQogIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIHRoZSBSYW5kb20gTnVtYmVyCkBAIC0xODYsMyArMTg2LDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXhjLXJuZ2EuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBIV19SQU5ET01fTk9NQURJSworCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBOb21hZGlrIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgUExBVF9OT01BRElLCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsLXNpZGUgc3VwcG9ydCBmb3IgdGhlIFJhbmRvbSBOdW1iZXIKKwkgIEdlbmVyYXRvciBoYXJkd2FyZSBmb3VuZCBvbiBTVC1Fcmljc3NvbiBTb0NzICg4ODE1IGFuZCA4NTAwKS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbm9tYWRpay1ybmcuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCA1ZWViMTMwLi40MjczMzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTE4LDMgKzE4LDQgQEAKIG9iai0kKENPTkZJR19IV19SQU5ET01fVFg0OTM5KSArPSB0eDQ5Mzktcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fTVhDX1JOR0EpICs9IG14Yy1ybmdhLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fT0NURU9OKSArPSBvY3Rlb24tcm5nLm8KK29iai0kKENPTkZJR19IV19SQU5ET01fTk9NQURJSykgKz0gbm9tYWRpay1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9ub21hZGlrLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9ub21hZGlrLXJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjRjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBOb21hZGlrIFJORyBzdXBwb3J0CisgKiAgQ29weXJpZ2h0IDIwMDkgQWxlc3NhbmRybyBSdWJpbmkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RhdGljIGludCBubWtfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHZvaWQgKmRhdGEsIHNpemVfdCBtYXgsIGJvb2wgd2FpdCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopcm5nLT5wcml2OworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgaXMgMzIgYml0cyBhbmQgZ2l2ZXMgMTYgcmFuZG9tIGJpdHMgKGxvdyBoYWxmKS4KKwkgKiBBIHN1YnNlcXVlbnQgcmVhZCB3aWxsIGRlbGF5IHRoZSBjb3JlIGZvciA0MDBucywgc28gd2UganVzdCByZWFkCisJICogb25jZSBhbmQgYWNjZXB0IHRoZSB2ZXJ5IHVubGlrZWx5IHZlcnkgc21hbGwgZGVsYXksIGV2ZW4gaWYgd2FpdD09MC4KKwkgKi8KKwkqKHUxNiAqKWRhdGEgPSBfX3Jhd19yZWFkbChiYXNlICsgOCkgJiAweGZmZmY7CisJcmV0dXJuIDI7Cit9CisKKy8qIHdlIGhhdmUgYXQgbW9zdCBvbmUgUk5HIHBlciBtYWNoaW5lLCBncmFudGVkICovCitzdGF0aWMgc3RydWN0IGh3cm5nIG5ta19ybmcgPSB7CisJLm5hbWUJCT0gIm5vbWFkaWsiLAorCS5yZWFkCQk9IG5ta19ybmdfcmVhZCwKK307CisKK3N0YXRpYyBpbnQgbm1rX3JuZ19wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IGFtYmFfaWQgKmlkKQoreworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgcmV0OworCisJcmV0ID0gYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBkZXYtPmRldi5pbml0X25hbWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gLUVOT01FTTsKKwliYXNlID0gaW9yZW1hcChkZXYtPnJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpKTsKKwlpZiAoIWJhc2UpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJbm1rX3JuZy5wcml2ID0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwlyZXQgPSBod3JuZ19yZWdpc3Rlcigmbm1rX3JuZyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5tYXA7CisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlpb3VubWFwKGJhc2UpOworb3V0X3JlbGVhc2U6CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5ta19ybmdfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilubWtfcm5nLnByaXY7CisJaHdybmdfdW5yZWdpc3Rlcigmbm1rX3JuZyk7CisJaW91bm1hcChiYXNlKTsKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFtYmFfaWQgbm1rX3JuZ19pZHNbXSA9IHsKKwl7CisJCS5pZAk9IDB4MDAwODA1ZTEsCisJCS5tYXNrCT0gMHgwMDBmZmZmZiwgLyogdG9wIGJpdHMgYXJlIHJldiBhbmQgY2ZnOiBhY2NlcHQgYWxsICovCisJfSwKKwl7MCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZHJpdmVyIG5ta19ybmdfZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJybmciLAorCQl9LAorCS5wcm9iZSA9IG5ta19ybmdfcHJvYmUsCisJLnJlbW92ZSA9IG5ta19ybmdfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG5ta19ybmdfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm1rX3JuZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGFtYmFfZHJpdmVyX3JlZ2lzdGVyKCZubWtfcm5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBubWtfcm5nX2V4aXQodm9pZCkKK3sKKwlhbWJhX2RyaXZlcl91bnJlZ2lzdGVyKCZubWtfcm5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5ta19ybmdfaW5pdCk7Cittb2R1bGVfZXhpdChubWtfcm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCmluZGV4IDUxNzI3MWMuLjkxMWUxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCkBAIC0yMDgsNiArMjA4LDcgQEAKIAogc3RhdGljIHZvaWQgaXAyX2luaXRfYm9hcmQoaW50LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZmluZF9laXNhX2JvYXJkKGludCk7CitzdGF0aWMgaW50IGlwMl9zZXR1cChjaGFyICpzdHIpOwogCiAvKioqKioqKioqKioqKioqLwogLyogU3RhdGljIERhdGEgKi8KQEAgLTI2Myw3ICsyNjQsNyBAQAogLyogTWFjcm9zICovCiAvKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKElQMkRFQlVHX09QRU4pCisjaWZkZWYgSVAyREVCVUdfT1BFTgogI2RlZmluZSBEQkdfQ05UKHMpIHByaW50ayhLRVJOX0RFQlVHICIoJXMpOiBbJXhdIHR0eWM9JWQsIG1vZGM9JXggLT4gJXNcbiIsIFwKIAkJICAgIHR0eS0+bmFtZSwocENoLT5mbGFncyksIFwKIAkJICAgIHR0eS0+Y291bnQsLypHRVRfVVNFX0NPVU5UKG1vZHVsZSkqLzAscykKQEAgLTI4NSw3ICsyODYsMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ29tcHV0b25lIEludGVsbGlQb3J0IFBsdXMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNkZWZpbmUJTUFYX0NNRF9TVFIJNTAKKwogc3RhdGljIGludCBwb2xsX29ubHk7CitzdGF0aWMgY2hhciBjbWRbTUFYX0NNRF9TVFJdOwogCiBzdGF0aWMgaW50IEVpc2FfaXJxOwogc3RhdGljIGludCBFaXNhX3Nsb3Q7CkBAIC0zMDksNiArMzEzLDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gcG9ydHMgZm9yIEludGVsbGlQb3J0IENhcmRzIik7CiBtb2R1bGVfcGFyYW0ocG9sbF9vbmx5LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9sbF9vbmx5LCAiRG8gbm90IHVzZSBjYXJkIGludGVycnVwdHMiKTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoaXAyLCBjbWQsIE1BWF9DTURfU1RSLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXAyLCAiQ29udGFpbnMgbW9kdWxlIHBhcmFtZXRlciBwYXNzZWQgd2l0aCAnaXAyPSciKTsKIAogLyogZm9yIHN5c2ZzIGNsYXNzIHN1cHBvcnQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlwMl9jbGFzczsKQEAgLTQ4Nyw3ICs0OTMsNiBAQAogCXJldHVybiBmdzsKIH0KIAotI2lmbmRlZiBNT0RVTEUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCWlwMl9zZXR1cDoKICAqCQlzdHI6IGtlcm5lbCBjb21tYW5kIGxpbmUgc3RyaW5nCkBAIC01MzEsNyArNTM2LDYgQEAKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImlwMj0iLCBpcDJfc2V0dXApOwotI2VuZGlmIC8qICFNT0RVTEUgKi8KIAogc3RhdGljIGludCBfX2luaXQgaXAyX2xvYWRtYWluKHZvaWQpCiB7CkBAIC01MzksMTQgKzU0MywyMCBAQAogCWludCBlcnIgPSAwOwogCWkyZUJvcmRTdHJQdHIgcEIgPSBOVUxMOwogCWludCByYyA9IC0xOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwljaGFyICpzdHI7CisKKwlzdHIgPSBjbWQ7CiAKIAlpZiAocG9sbF9vbmx5KSB7CiAJCS8qIEhhcmQgbG9jayB0aGUgaW50ZXJydXB0cyB0byB6ZXJvICovCiAJCWlycVswXSA9IGlycVsxXSA9IGlycVsyXSA9IGlycVszXSA9IHBvbGxfb25seSA9IDA7CiAJfQogCisJLyogQ2hlY2sgbW9kdWxlIHBhcmFtZXRlciB3aXRoICdpcDI9JyBoYXMgYmVlbiBwYXNzZWQgb3Igbm90ICovCisJaWYgKCFwb2xsX29ubHkgJiYgKCFzdHJuY21wKHN0ciwgImlwMj0iLCA0KSkpCisJCWlwMl9zZXR1cChzdHIpOworCiAJaXAydHJhY2UoSVRSQ19OT19QT1JULCBJVFJDX0lOSVQsIElUUkNfRU5URVIsIDApOwogCiAJLyogcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIG1vZHByb2JlIG9yCkBAIC02MTIsNiArNjIyLDcgQEAKIAkJY2FzZSBQQ0k6CiAjaWZkZWYgQ09ORklHX1BDSQogCQl7CisJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJCQl1MzIgYWRkcjsKIAkJCWludCBzdGF0dXM7CiAKQEAgLTYyNiw3ICs2MzcsNyBAQAogCiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgZGV2aWNlXG4iKTsKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWlwMmNvbmZpZy50eXBlW2ldID0gUENJOwogCQkJaXAyY29uZmlnLnBjaV9kZXZbaV0gPSBwY2lfZGV2X2dldChwZGV2KTsKQEAgLTYzOCw2ICs2NDksOCBAQAogCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkvTyBhZGRyZXNzIGVycm9yXG4iKTsKIAogCQkJaXAyY29uZmlnLmlycVtpXSA9IHBkZXYtPmlycTsKK291dDoKKwkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQl9CiAjZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IFBDSSBjYXJkIHNwZWNpZmllZCBidXQgUENJICIKQEAgLTY1Niw3ICs2NjksNiBAQAogCQkJYnJlYWs7CiAJCX0JLyogc3dpdGNoICovCiAJfQkvKiBmb3IgKi8KLQlwY2lfZGV2X3B1dChwZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CiAJCWlmIChpcDJjb25maWcuYWRkcltpXSkgewpAQCAtMzE5NywzICszMjA5LDUgQEAKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpcDJtYWluX3BjaV90YmwpOworCitNT0RVTEVfRklSTVdBUkUoImludGVsbGlwb3J0Mi5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pc2ljb20uYyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwppbmRleCAzMDBkNWJkLi5iZTJlOGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCkBAIC0xMTMsNiArMTEzLDggQEAKICAqCQk2NC1iaXQgdmVyaWZpY2F0aW9uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0MCw3ICsxNDIsNiBAQAogI2RlZmluZSBJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpIG91dHcoMCwgKGJhc2UpICsgMHhjKQogI2RlZmluZSBDbGVhckludGVycnVwdChiYXNlKSBpbncoKGJhc2UpICsgMHgwYSkKIAotI2RlZmluZSBwcl9kYmcoc3RyLi4uKSBwcl9kZWJ1ZygiSVNJQ09NOiAiIHN0cikKICNpZmRlZiBERUJVRwogI2RlZmluZSBpc2ljb21fcGFyYW5vaWFfY2hlY2soYSwgYiwgYykgX19pc2ljb21fcGFyYW5vaWFfY2hlY2soKGEpLCAoYiksIChjKSkKICNlbHNlCkBAIC0yNDksOCArMjUwLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBjYXJkLT5mbGFncyk7CiAJCW1zbGVlcCgxMCk7CiAJfQotCXByaW50ayhLRVJOX1dBUk5JTkcgIklTSUNPTTogRmFpbGVkIHRvIGxvY2sgQ2FyZCAoMHglbHgpXG4iLAotCQljYXJkLT5iYXNlKTsKKwlwcl93YXJuaW5nKCJGYWlsZWQgdG8gbG9jayBDYXJkICgweCVseClcbiIsIGNhcmQtPmJhc2UpOwogCiAJcmV0dXJuIDA7CS8qIEZhaWxlZCB0byBhY3F1aXJlIHRoZSBjYXJkISAqLwogfQpAQCAtMzc5LDEzICszNzksMTMgQEAKIAljaGFyICpuYW1lLCBjb25zdCBjaGFyICpyb3V0aW5lKQogewogCWlmICghcG9ydCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJU0lDT006IFdhcm5pbmc6IGJhZCBpc2ljb20gbWFnaWMgZm9yICIKLQkJCSJkZXYgJXMgaW4gJXMuXG4iLCBuYW1lLCByb3V0aW5lKTsKKwkJcHJfd2FybmluZygiV2FybmluZzogYmFkIGlzaWNvbSBtYWdpYyBmb3IgZGV2ICVzIGluICVzLlxuIiwKKwkJCSAgIG5hbWUsIHJvdXRpbmUpOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKHBvcnQtPm1hZ2ljICE9IElTSUNPTV9NQUdJQykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJU0lDT006IFdhcm5pbmc6IE5VTEwgaXNpY29tIHBvcnQgZm9yICIKLQkJCSJkZXYgJXMgaW4gJXMuXG4iLCBuYW1lLCByb3V0aW5lKTsKKwkJcHJfd2FybmluZygiV2FybmluZzogTlVMTCBpc2ljb20gcG9ydCBmb3IgZGV2ICVzIGluICVzLlxuIiwKKwkJCSAgIG5hbWUsIHJvdXRpbmUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTQ1MCw4ICs0NTAsOCBAQAogCQlpZiAoIShpbncoYmFzZSArIDB4MDIpICYgKDEgPDwgcG9ydC0+Y2hhbm5lbCkpKQogCQkJY29udGludWU7CiAKLQkJcHJfZGJnKCJ0eGluZyAlZCBieXRlcywgcG9ydCVkLlxuIiwgdHhjb3VudCwKLQkJCXBvcnQtPmNoYW5uZWwgKyAxKTsKKwkJcHJfZGVidWcoInR4aW5nICVkIGJ5dGVzLCBwb3J0JWQuXG4iLAorCQkJIHR4Y291bnQsIHBvcnQtPmNoYW5uZWwgKyAxKTsKIAkJb3V0dygocG9ydC0+Y2hhbm5lbCA8PCBpc2lfY2FyZFtjYXJkXS5zaGlmdF9jb3VudCkgfCB0eGNvdW50LAogCQkJYmFzZSk7CiAJCXJlc2lkdWUgPSBOTzsKQEAgLTU0Nyw4ICs1NDcsOCBAQAogCWJ5dGVfY291bnQgPSBoZWFkZXIgJiAweGZmOwogCiAJaWYgKGNoYW5uZWwgKyAxID4gY2FyZC0+cG9ydF9jb3VudCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJU0lDT006IGlzaWNvbV9pbnRlcnJ1cHQoMHglbHgpOiAiCi0JCQkiJWQoY2hhbm5lbCkgPiBwb3J0X2NvdW50LlxuIiwgYmFzZSwgY2hhbm5lbCsxKTsKKwkJcHJfd2FybmluZygiJXMoMHglbHgpOiAlZChjaGFubmVsKSA+IHBvcnRfY291bnQuXG4iLAorCQkJICAgX19mdW5jX18sIGJhc2UsIGNoYW5uZWwrMSk7CiAJCW91dHcoMHgwMDAwLCBiYXNlKzB4MDQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQlzcGluX3VubG9jaygmY2FyZC0+Y2FyZF9sb2NrKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNTgyLDE0ICs1ODIsMTUgQEAKIAkJCQlpZiAocG9ydC0+c3RhdHVzICYgSVNJX0RDRCkgewogCQkJCQlpZiAoIShoZWFkZXIgJiBJU0lfRENEKSkgewogCQkJCQkvKiBDYXJyaWVyIGhhcyBiZWVuIGxvc3QgICovCi0JCQkJCQlwcl9kYmcoImludGVycnVwdDogRENELT5sb3cuXG4iCi0JCQkJCQkJKTsKKwkJCQkJCXByX2RlYnVnKCIlczogRENELT5sb3cuXG4iLAorCQkJCQkJCSBfX2Z1bmNfXyk7CiAJCQkJCQlwb3J0LT5zdGF0dXMgJj0gfklTSV9EQ0Q7CiAJCQkJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKGhlYWRlciAmIElTSV9EQ0QpIHsKIAkJCQkvKiBDYXJyaWVyIGhhcyBiZWVuIGRldGVjdGVkICovCi0JCQkJCXByX2RiZygiaW50ZXJydXB0OiBEQ0QtPmhpZ2guXG4iKTsKKwkJCQkJcHJfZGVidWcoIiVzOiBEQ0QtPmhpZ2guXG4iLAorCQkJCQkJX19mdW5jX18pOwogCQkJCQlwb3J0LT5zdGF0dXMgfD0gSVNJX0RDRDsKIAkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiAJCQkJfQpAQCAtNjQxLDE3ICs2NDIsMTkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMjoJLyogU3RhdGlzdGljcwkJICovCi0JCQlwcl9kYmcoImlzaWNvbV9pbnRlcnJ1cHQ6IHN0YXRzISEhLlxuIik7CisJCQlwcl9kZWJ1ZygiJXM6IHN0YXRzISEhXG4iLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJfZGJnKCJJbnRyOiBVbmtub3duIGNvZGUgaW4gc3RhdHVzIHBhY2tldC5cbiIpOworCQkJcHJfZGVidWcoIiVzOiBVbmtub3duIGNvZGUgaW4gc3RhdHVzIHBhY2tldC5cbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsJCQkJLyogRGF0YSAgIFBhY2tldCAqLwogCiAJCWNvdW50ID0gdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcodHR5LCAmcnAsIGJ5dGVfY291bnQgJiB+MSk7Ci0JCXByX2RiZygiSW50cjogQ2FuIHJ4ICVkIG9mICVkIGJ5dGVzLlxuIiwgY291bnQsIGJ5dGVfY291bnQpOworCQlwcl9kZWJ1ZygiJXM6IENhbiByeCAlZCBvZiAlZCBieXRlcy5cbiIsCisJCQkgX19mdW5jX18sIGNvdW50LCBieXRlX2NvdW50KTsKIAkJd29yZF9jb3VudCA9IGNvdW50ID4+IDE7CiAJCWluc3coYmFzZSwgcnAsIHdvcmRfY291bnQpOwogCQlieXRlX2NvdW50IC09ICh3b3JkX2NvdW50IDw8IDEpOwpAQCAtNjYxLDggKzY2NCw4IEBACiAJCQlieXRlX2NvdW50IC09IDI7CiAJCX0KIAkJaWYgKGJ5dGVfY291bnQgPiAwKSB7Ci0JCQlwcl9kYmcoIkludHIoMHglbHg6JWQpOiBGbGlwIGJ1ZmZlciBvdmVyZmxvdyEgZHJvcHBpbmcgIgotCQkJCSJieXRlcy4uLlxuIiwgYmFzZSwgY2hhbm5lbCArIDEpOworCQkJcHJfZGVidWcoIiVzKDB4JWx4OiVkKTogRmxpcCBidWZmZXIgb3ZlcmZsb3chIGRyb3BwaW5nIGJ5dGVzLi4uXG4iLAorCQkJCSBfX2Z1bmNfXywgYmFzZSwgY2hhbm5lbCArIDEpOwogCQkvKiBkcmFpbiBvdXQgdW5yZWFkIHh0cmEgZGF0YSAqLwogCQl3aGlsZSAoYnl0ZV9jb3VudCA+IDApIHsKIAkJCQlpbncoYmFzZSk7CkBAIC04ODgsOCArODkxLDggQEAKIAlzdHJ1Y3QgaXNpX2JvYXJkICpjYXJkID0gcG9ydC0+Y2FyZDsKIAogCWlmICgtLWNhcmQtPmNvdW50IDwgMCkgewotCQlwcl9kYmcoImlzaWNvbV9zaHV0ZG93bl9wb3J0OiBiYWQgYm9hcmQoMHglbHgpIGNvdW50ICVkLlxuIiwKLQkJCWNhcmQtPmJhc2UsIGNhcmQtPmNvdW50KTsKKwkJcHJfZGVidWcoIiVzOiBiYWQgYm9hcmQoMHglbHgpIGNvdW50ICVkLlxuIiwKKwkJCSBfX2Z1bmNfXywgY2FyZC0+YmFzZSwgY2FyZC0+Y291bnQpOwogCQljYXJkLT5jb3VudCA9IDA7CiAJfQogCS8qIGxhc3QgcG9ydCB3YXMgY2xvc2VkLCBzaHV0ZG93biB0aGF0IGJvYXJkIHRvbyAqLwpAQCAtMTY4MSwxMyArMTY4NCwxMyBAQAogCiAJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihpc2ljb21fbm9ybWFsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByX2RiZygiQ291bGRuJ3QgcmVnaXN0ZXIgdGhlIGRpYWxpbiBkcml2ZXJcbiIpOworCQlwcl9kZWJ1ZygiQ291bGRuJ3QgcmVnaXN0ZXIgdGhlIGRpYWxpbiBkcml2ZXJcbiIpOwogCQlnb3RvIGVycl9wdXR0dHk7CiAJfQogCiAJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXNpY29tX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJU0lDT006IFVuYWJsZSB0byByZWdpc3RlciBwY2kgZHJpdmVyLlxuIik7CisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIHBjaSBkcml2ZXIuXG4iKTsKIAkJZ290byBlcnJfdW5ydHR5OwogCX0KIApAQCAtMTcxNywzICsxNzIwLDggQEAKIE1PRFVMRV9BVVRIT1IoIk11bHRpVGVjaCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBJU0kgc2VyaWVzIG9mIGNhcmRzIGJ5IE11bHRpVGVjaCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJpc2k2MDguYmluIik7CitNT0RVTEVfRklSTVdBUkUoImlzaTYwOGVtLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJpc2k2MTZlbS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiaXNpNDYwOC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiaXNpNDYxNi5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggZjcwNmIxZC4uYWRhMjViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTExODUsMTEgKzExODUsNiBAQAogCiAJcmVwID0gKGRvd24gPT0gMik7CiAKLSNpZmRlZiBDT05GSUdfTUFDX0VNVU1PVVNFQlROCi0JaWYgKG1hY19oaWRfbW91c2VfZW11bGF0ZV9idXR0b25zKDEsIGtleWNvZGUsIGRvd24pKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogQ09ORklHX01BQ19FTVVNT1VTRUJUTiAqLwotCiAJaWYgKChyYXdfbW9kZSA9IChrYmQtPmtiZG1vZGUgPT0gVkNfUkFXKSkgJiYgIWh3X3JhdykKIAkJaWYgKGVtdWxhdGVfcmF3KHZjLCBrZXljb2RlLCAhZG93biA8PCA3KSkKIAkJCWlmIChrZXljb2RlIDwgQlROX01JU0MgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQpAQCAtMTMyOCw2ICsxMzIzLDIxIEBACiAJc2NoZWR1bGVfY29uc29sZV9jYWxsYmFjaygpOwogfQogCitzdGF0aWMgYm9vbCBrYmRfbWF0Y2goc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlpbnQgaTsKKworCWlmICh0ZXN0X2JpdChFVl9TTkQsIGRldi0+ZXZiaXQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICh0ZXN0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpKQorCQlmb3IgKGkgPSBLRVlfUkVTRVJWRUQ7IGkgPCBCVE5fTUlTQzsgaSsrKQorCQkJaWYgKHRlc3RfYml0KGksIGRldi0+a2V5Yml0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIFdoZW4gYSBrZXlib2FyZCAob3Igb3RoZXIgaW5wdXQgZGV2aWNlKSBpcyBmb3VuZCwgdGhlIGtiZF9jb25uZWN0CiAgKiBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBmdW5jdGlvbiB0aGVuIGxvb2tzIGF0IHRoZSBkZXZpY2UsIGFuZCBpZiBpdApAQCAtMTMzOSwxNCArMTM0OSw2IEBACiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwogCWludCBlcnJvcjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IEtFWV9SRVNFUlZFRDsgaSA8IEJUTl9NSVNDOyBpKyspCi0JCWlmICh0ZXN0X2JpdChpLCBkZXYtPmtleWJpdCkpCi0JCQlicmVhazsKLQotCWlmIChpID09IEJUTl9NSVNDICYmICF0ZXN0X2JpdChFVl9TTkQsIGRldi0+ZXZiaXQpKQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhhbmRsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9oYW5kbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhhbmRsZSkKQEAgLTE0MTIsNiArMTQxNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfaGFuZGxlciBrYmRfaGFuZGxlciA9IHsKIAkuZXZlbnQJCT0ga2JkX2V2ZW50LAorCS5tYXRjaAkJPSBrYmRfbWF0Y2gsCiAJLmNvbm5lY3QJPSBrYmRfY29ubmVjdCwKIAkuZGlzY29ubmVjdAk9IGtiZF9kaXNjb25uZWN0LAogCS5zdGFydAkJPSBrYmRfc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCA2M2VlM2JiLi4xNjY0OTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTE2NCwyNCArMTY0LDI1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1veGFMb3dXYXRlckNoazsKIHN0YXRpYyBERUZJTkVfTVVURVgobW94YV9vcGVubG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1veGFfbG9jayk7Ci0vKiBWYXJpYWJsZXMgZm9yIGluc21vZCAqLwotI2lmZGVmIE1PRFVMRQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBiYXNlYWRkcltNQVhfQk9BUkRTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZVtNQVhfQk9BUkRTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtcG9ydHNbTUFYX0JPQVJEU107Ci0jZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiV2lsbGlhbSBDaGVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1PWEEgSW50ZWxsaW8gRmFtaWx5IE11bHRpcG9ydCBCb2FyZCBEZXZpY2UgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0jaWZkZWYgTU9EVUxFCitNT0RVTEVfRklSTVdBUkUoImMyMTh0dW54LmNvZCIpOworTU9EVUxFX0ZJUk1XQVJFKCJjcDIwNHVueC5jb2QiKTsKK01PRFVMRV9GSVJNV0FSRSgiYzMyMHR1bnguY29kIik7CisKIG1vZHVsZV9wYXJhbV9hcnJheSh0eXBlLCB1aW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModHlwZSwgImNhcmQgdHlwZTogQzIxOD0yLCBDMzIwPTQiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShiYXNlYWRkciwgdWxvbmcsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhiYXNlYWRkciwgImJhc2UgYWRkcmVzcyIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG51bXBvcnRzLCB1aW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobnVtcG9ydHMsICJudW1wb3J0cyAoaWdub3JlZCBmb3IgQzIxOCkiKTsKLSNlbmRpZgorCiBtb2R1bGVfcGFyYW0odHR5bWFqb3IsIGludCwgMCk7CiAKIC8qCkBAIC0xMDI0LDYgKzEwMjUsOCBAQAogewogCXVuc2lnbmVkIGludCBpc2FicmRzID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgbW94YV9ib2FyZF9jb25mICpicmQgPSBtb3hhX2JvYXJkczsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1PWEEgSW50ZWxsaW8gZmFtaWx5IGRyaXZlciB2ZXJzaW9uICVzXG4iLAogCQkJTU9YQV9WRVJTSU9OKTsKQEAgLTEwNTEsMTAgKzEwNTQsNyBAQAogCX0KIAogCS8qIEZpbmQgdGhlIGJvYXJkcyBkZWZpbmVkIGZyb20gbW9kdWxlIGFyZ3MuICovCi0jaWZkZWYgTU9EVUxFCi0JewotCXN0cnVjdCBtb3hhX2JvYXJkX2NvbmYgKmJyZCA9IG1veGFfYm9hcmRzOwotCXVuc2lnbmVkIGludCBpOworCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CT0FSRFM7IGkrKykgewogCQlpZiAoIWJhc2VhZGRyW2ldKQogCQkJYnJlYWs7CkBAIC0xMDg3LDggKzEwODcsNiBAQAogCQkJaXNhYnJkcysrOwogCQl9CiAJfQotCX0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSQogCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1veGFfcGNpX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IDNkOTIzMDYuLmUwYzVkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC04OTUsOCArODk1LDcgQEAKIAlpZiAoaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSA9PSAweGZmKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCQlpZiAodHR5KQotCQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CisJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbm96b21pLmMgYi9kcml2ZXJzL2NoYXIvbm96b21pLmMKaW5kZXggMmFkN2QzNy4uYTNmMzJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25vem9taS5jCisrKyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwpAQCAtMTM2LDEwICsxMzYsNiBAQAogI2RlZmluZSBSRUNFSVZFX0JVRl9NQVgJCTQKIAogCi0vKiBEZWZpbmUgYWxsIHR5cGVzIG9mIHZlbmRvcnMgYW5kIGRldmljZXMgdG8gc3VwcG9ydCAqLwotI2RlZmluZSBWRU5ET1IxCQkweDE5MzEJLyogVmVuZG9yIE9wdGlvbiAqLwotI2RlZmluZSBERVZJQ0UxCQkweDAwMGMJLyogSFNEUEEgY2FyZCAqLwotCiAjZGVmaW5lIFJfSUlSCQkweDAwMDAJLyogSW50ZXJydXB0IElkZW50aXR5IFJlZ2lzdGVyICovCiAjZGVmaW5lIFJfRkNSCQkweDAwMDAJLyogRmxvdyBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFJfSUVSCQkweDAwMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwpAQCAtMzcxLDYgKzM2Nyw4IEBACiAJc3RydWN0IG11dGV4IHR0eV9zZW07CiAJd2FpdF9xdWV1ZV9oZWFkX3QgdHR5X3dhaXQ7CiAJc3RydWN0IGFzeW5jX2ljb3VudCB0dHlfaWNvdW50OworCisJc3RydWN0IG5vem9taSAqZGM7CiB9OwogCiAvKiBQcml2YXRlIGRhdGEgb25lIGZvciBlYWNoIGNhcmQgaW4gdGhlIHN5c3RlbSAqLwpAQCAtNDA1LDcgKzQwMyw3IEBACiAKIC8qICAgIEdsb2JhbCB2YXJpYWJsZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBub3pvbWlfcGNpX3RibFtdIF9fZGV2aW5pdGNvbnN0ID0gewotCXtQQ0lfREVWSUNFKFZFTkRPUjEsIERFVklDRTEpfSwKKwl7UENJX0RFVklDRSgweDE5MzEsIDB4MDAwYyl9LAkvKiBOb3pvbWkgSFNEUEEgKi8KIAl7fSwKIH07CiAKQEAgLTQxNCw2ICs0MTIsOCBAQAogc3RhdGljIHN0cnVjdCBub3pvbWkgKm5kZXZzW05PWk9NSV9NQVhfQ0FSRFNdOwogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpudHR5X2RyaXZlcjsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIG5vel90dHlfcG9ydF9vcHM7CisKIC8qCiAgKiBmaW5kIGNhcmQgYnkgdHR5X2luZGV4CiAgKi8KQEAgLTg1Myw4ICs4NTMsNiBAQAogCQlnb3RvIHB1dDsKIAl9CiAKLQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUpOwotCiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCXJlYWRfbWVtMzIoKHUzMiAqKSBidWYsIGFkZHIgKyBvZmZzZXQsIFJFQ0VJVkVfQlVGX01BWCk7CiAKQEAgLTE0NzMsOSArMTQ3MSwxMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspIHsKIAkJc3RydWN0IGRldmljZSAqdHR5X2RldjsKLQotCQltdXRleF9pbml0KCZkYy0+cG9ydFtpXS50dHlfc2VtKTsKLQkJdHR5X3BvcnRfaW5pdCgmZGMtPnBvcnRbaV0ucG9ydCk7CisJCXN0cnVjdCBwb3J0ICpwb3J0ID0gJmRjLT5wb3J0W2ldOworCQlwb3J0LT5kYyA9IGRjOworCQltdXRleF9pbml0KCZwb3J0LT50dHlfc2VtKTsKKwkJdHR5X3BvcnRfaW5pdCgmcG9ydC0+cG9ydCk7CisJCXBvcnQtPnBvcnQub3BzID0gJm5vel90dHlfcG9ydF9vcHM7CiAJCXR0eV9kZXYgPSB0dHlfcmVnaXN0ZXJfZGV2aWNlKG50dHlfZHJpdmVyLCBkYy0+aW5kZXhfc3RhcnQgKyBpLAogCQkJCQkJCSZwZGV2LT5kZXYpOwogCkBAIC0xNjAwLDY3ICsxNjAwLDc0IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogQ2FsbGVkIHdoZW4gdGhlIHVzZXJzcGFjZSBwcm9jZXNzIG9wZW5zIHRoZSB0dHksIC9kZXYvbm96Ki4gICovCi1zdGF0aWMgaW50IG50dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbnR0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHBvcnQgKnBvcnQgPSBnZXRfcG9ydF9ieV90dHkodHR5KTsKIAlzdHJ1Y3Qgbm96b21pICpkYyA9IGdldF9kY19ieV90dHkodHR5KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJaW50IHJldDsKIAlpZiAoIXBvcnQgfHwgIWRjIHx8IGRjLT5zdGF0ZSAhPSBOT1pPTUlfU1RBVEVfUkVBRFkpCiAJCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+dHR5X3NlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlwb3J0LT5wb3J0LmNvdW50Kys7Ci0JZGMtPm9wZW5fdHR5cysrOwotCi0JLyogRW5hYmxlIGludGVycnVwdCBkb3dubGluayBmb3IgY2hhbm5lbCAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEpIHsKLQkJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7Ci0JCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7Ci0JCURCRzEoIm9wZW46ICVkIiwgcG9ydC0+dG9rZW5fZGwpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKLQkJZGMtPmxhc3RfaWVyID0gZGMtPmxhc3RfaWVyIHwgcG9ydC0+dG9rZW5fZGw7Ci0JCXdyaXRldyhkYy0+bGFzdF9pZXIsIGRjLT5yZWdfaWVyKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKKwlyZXQgPSB0dHlfaW5pdF90ZXJtaW9zKHR0eSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXR0eV9kcml2ZXJfa3JlZl9nZXQoZHJpdmVyKTsKKwkJZHJpdmVyLT50dHlzW3R0eS0+aW5kZXhdID0gdHR5OwogCX0KLQltdXRleF91bmxvY2soJnBvcnQtPnR0eV9zZW0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG50dHlfY2xlYW51cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworfQorCitzdGF0aWMgaW50IG50dHlfYWN0aXZhdGUoc3RydWN0IHR0eV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZih0cG9ydCwgc3RydWN0IHBvcnQsIHBvcnQpOworCXN0cnVjdCBub3pvbWkgKmRjID0gcG9ydC0+ZGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRzEoIm9wZW46ICVkIiwgcG9ydC0+dG9rZW5fZGwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOworCWRjLT5sYXN0X2llciA9IGRjLT5sYXN0X2llciB8IHBvcnQtPnRva2VuX2RsOworCXdyaXRldyhkYy0+bGFzdF9pZXIsIGRjLT5yZWdfaWVyKTsKKwlkYy0+b3Blbl90dHlzKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKKwlwcmludGsoIm5vejogYWN0aXZhdGVkICVkOiAlcFxuIiwgdHR5LT5pbmRleCwgdHBvcnQpOwogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgd2hlbiB0aGUgdXNlcnNwYWNlIHByb2Nlc3MgY2xvc2UgdGhlIHR0eSwgL2Rldi9ub3oqLiBBbHNvCi0gICBjYWxsZWQgaW1tZWRpYXRlbHkgaWYgbnR0eV9vcGVuIGZhaWxzIGluIHdoaWNoIGNhc2UgdHR5LT5kcml2ZXJfZGF0YQotICAgd2lsbCBiZSBOVUxMIGFuIHdlIGV4aXQgYnkgdGhlIGZpcnN0IHJldHVybiAqLwotCi1zdGF0aWMgdm9pZCBudHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBudHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IG5vem9taSAqZGMgPSBnZXRfZGNfYnlfdHR5KHR0eSk7Ci0Jc3RydWN0IHBvcnQgKm5wb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmbnBvcnQtPnBvcnQ7CisJc3RydWN0IHBvcnQgKnBvcnQgPSBnZXRfcG9ydF9ieV90dHkodHR5KTsKKwlyZXR1cm4gdHR5X3BvcnRfb3BlbigmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKTsKK30KKworc3RhdGljIHZvaWQgbnR0eV9zaHV0ZG93bihzdHJ1Y3QgdHR5X3BvcnQgKnRwb3J0KQoreworCXN0cnVjdCBwb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHRwb3J0LCBzdHJ1Y3QgcG9ydCwgcG9ydCk7CisJc3RydWN0IG5vem9taSAqZGMgPSBwb3J0LT5kYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFkYyB8fCAhbnBvcnQpCi0JCXJldHVybjsKLQotCS8qIFVzZXJzIGNhbm5vdCBpbnRlcnJ1cHQgYSBjbG9zZSAqLwotCW11dGV4X2xvY2soJm5wb3J0LT50dHlfc2VtKTsKLQotCVdBUk5fT04oIXBvcnQtPmNvdW50KTsKLQorCURCRzEoImNsb3NlOiAlZCIsIHBvcnQtPnRva2VuX2RsKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKKwlkYy0+bGFzdF9pZXIgJj0gfihwb3J0LT50b2tlbl9kbCk7CisJd3JpdGV3KGRjLT5sYXN0X2llciwgZGMtPnJlZ19pZXIpOwogCWRjLT5vcGVuX3R0eXMtLTsKLQlwb3J0LT5jb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5zcGluX211dGV4LCBmbGFncyk7CisJcHJpbnRrKCJub3o6IHNodXRkb3duICVwXG4iLCB0cG9ydCk7Cit9CiAKLQlpZiAocG9ydC0+Y291bnQgPT0gMCkgewotCQlEQkcxKCJjbG9zZTogJWQiLCBucG9ydC0+dG9rZW5fZGwpOwotCQl0dHlfcG9ydF90dHlfc2V0KHBvcnQsIE5VTEwpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKLQkJZGMtPmxhc3RfaWVyICY9IH4obnBvcnQtPnRva2VuX2RsKTsKLQkJd3JpdGV3KGRjLT5sYXN0X2llciwgZGMtPnJlZ19pZXIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOwotCX0KLQltdXRleF91bmxvY2soJm5wb3J0LT50dHlfc2VtKTsKK3N0YXRpYyB2b2lkIG50dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHBvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWlmIChwb3J0KQorCQl0dHlfcG9ydF9jbG9zZSgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKTsKK30KKworc3RhdGljIHZvaWQgbnR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdHR5X3BvcnRfaGFuZ3VwKCZwb3J0LT5wb3J0KTsKIH0KIAogLyoKQEAgLTE2ODAsMTUgKzE2ODcsNyBAQAogCWlmICghZGMgfHwgIXBvcnQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHVubGlrZWx5KCFtdXRleF90cnlsb2NrKCZwb3J0LT50dHlfc2VtKSkpIHsKLQkJLyoKLQkJICogbXVzdCB0ZXN0IGxvY2sgYXMgdHR5IGxheWVyIHdyYXBzIGNhbGxzCi0JCSAqIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCBCS0wKLQkJICovCi0JCWRldl9lcnIoJmRjLT5wZGV2LT5kZXYsICJXb3VsZCBoYXZlIGRlYWRsb2NrZWQgLSAiCi0JCQkicmV0dXJuIEVBR0FJTlxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KKwltdXRleF9sb2NrKCZwb3J0LT50dHlfc2VtKTsKIAogCWlmICh1bmxpa2VseSghcG9ydC0+cG9ydC5jb3VudCkpIHsKIAkJREJHMSgiICIpOwpAQCAtMTcyOCwyNSArMTcyNywyMyBAQAogICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB1cHBlciB0dHkgbGF5ZXIuCiAgKiAgICNhY2NvcmRpbmcgdG8gc291cmNlcyBOX1RUWS5jIGl0IGV4cGVjdHMgYSB2YWx1ZSA+PSAwIGFuZAogICogICAgZG9lcyBub3QgY2hlY2sgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKyAqCisgKiBJZiB0aGUgcG9ydCBpcyB1bnBsdWdnZWQgcmVwb3J0IGxvdHMgb2Ygcm9vbSBhbmQgbGV0IHRoZSBiaXRzCisgKiBkcmliYmxlIGF3YXkgc28gd2UgZG9uJ3QgYmxvY2sgYW55dGhpbmcuCiAgKi8KIHN0YXRpYyBpbnQgbnR0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHBvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCWludCByb29tID0gMDsKKwlpbnQgcm9vbSA9IDQwOTY7CiAJY29uc3Qgc3RydWN0IG5vem9taSAqZGMgPSBnZXRfZGNfYnlfdHR5KHR0eSk7CiAKLQlpZiAoIWRjIHx8ICFwb3J0KQotCQlyZXR1cm4gMDsKLQlpZiAoIW11dGV4X3RyeWxvY2soJnBvcnQtPnR0eV9zZW0pKQotCQlyZXR1cm4gMDsKLQotCWlmICghcG9ydC0+cG9ydC5jb3VudCkKLQkJZ290byBleGl0OwotCi0Jcm9vbSA9IHBvcnQtPmZpZm9fdWwuc2l6ZSAtIGtmaWZvX2xlbigmcG9ydC0+Zmlmb191bCk7Ci0KLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwb3J0LT50dHlfc2VtKTsKKwlpZiAoZGMpIHsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+dHR5X3NlbSk7CisJCWlmIChwb3J0LT5wb3J0LmNvdW50KQorCQkJcm9vbSA9IHBvcnQtPmZpZm9fdWwuc2l6ZSAtCisJCQkJCWtmaWZvX2xlbigmcG9ydC0+Zmlmb191bCk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CisJfQogCXJldHVybiByb29tOwogfQogCkBAIC0xOTA2LDEwICsxOTAzLDE2IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBub3pfdHR5X3BvcnRfb3BzID0geworCS5hY3RpdmF0ZSA9IG50dHlfYWN0aXZhdGUsCisJLnNodXRkb3duID0gbnR0eV9zaHV0ZG93biwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgdHR5X29wcyA9IHsKIAkuaW9jdGwgPSBudHR5X2lvY3RsLAogCS5vcGVuID0gbnR0eV9vcGVuLAogCS5jbG9zZSA9IG50dHlfY2xvc2UsCisJLmhhbmd1cCA9IG50dHlfaGFuZ3VwLAogCS53cml0ZSA9IG50dHlfd3JpdGUsCiAJLndyaXRlX3Jvb20gPSBudHR5X3dyaXRlX3Jvb20sCiAJLnVudGhyb3R0bGUgPSBudHR5X3VudGhyb3R0bGUsCkBAIC0xOTE3LDYgKzE5MjAsOCBAQAogCS5jaGFyc19pbl9idWZmZXIgPSBudHR5X2NoYXJzX2luX2J1ZmZlciwKIAkudGlvY21nZXQgPSBudHR5X3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IG50dHlfdGlvY21zZXQsCisJLmluc3RhbGwgPSBudHR5X2luc3RhbGwsCisJLmNsZWFudXAgPSBudHR5X2NsZWFudXAsCiB9OwogCiAvKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9udnJhbS5jIGIvZHJpdmVycy9jaGFyL252cmFtLmMKaW5kZXggZmRiY2M5Zi4uNWViODNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL252cmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL252cmFtLmMKQEAgLTMzNiwxNCArMzM2LDEyIEBACiAKIHN0YXRpYyBpbnQgbnZyYW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlsb2NrX2tlcm5lbCgpOwogCXNwaW5fbG9jaygmbnZyYW1fc3RhdGVfbG9jayk7CiAKIAlpZiAoKG52cmFtX29wZW5fY250ICYmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKSkgfHwKIAkgICAgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX0VYQ0wpIHx8CiAJICAgICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIChudnJhbV9vcGVuX21vZGUgJiBOVlJBTV9XUklURSkpKSB7CiAJCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzU0LDcgKzM1Miw2IEBACiAJbnZyYW1fb3Blbl9jbnQrKzsKIAogCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDJkYjRjMGEuLmM5YmM4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNtbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA0NTIzNzBhLi45ODZhYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC02NTgsOCArNjU4LDcgQEAKIAkJCWluZm8tPm1vbi5jaGFyX21heCA9IGNoYXJfY291bnQ7CiAJCWluZm8tPm1vbi5jaGFyX2xhc3QgPSBjaGFyX2NvdW50OwogI2VuZGlmCi0JCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7Ci0JCXdoaWxlIChsZW4tLSkgeworCQl3aGlsZSAoY2hhcl9jb3VudC0tKSB7CiAJCQlkYXRhID0gYmFzZV9hZGRyW0N5UkRSXTsKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YSwgVFRZX05PUk1BTCk7CiAjaWZkZWYgQ1lDTE9NXzE2WV9IQUNLCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggMjY4ZTE3Zi4uMDdhYzE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtNjQ2LDggKzY0Niw2IEBACiAJZHByaW50ayhTWF9ERUJVR19SWCwgInBvcnQ6ICVwOiBjb3VudDogJWRcbiIsIHBvcnQsIGNvdW50KTsKIAlwb3J0LT5oaXRzW2NvdW50ID4gOCA/IDkgOiBjb3VudF0rKzsKIAotCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOwotCiAJd2hpbGUgKGNvdW50LS0pCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgc3hfaW4oYnAsIENEMTg2eF9SRFIpLCBUVFlfTk9STUFMKTsKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCA0ODQ2YjczLi4wNjU4ZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtMjAzMSw3ICsyMDMxLDcgQEAKIAlpZiAobWdzbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtZ3NsX3B1dF9jaGFyIikpCiAJCXJldHVybiAwOwogCi0JaWYgKCF0dHkgfHwgIWluZm8tPnhtaXRfYnVmKQorCWlmICghaW5mby0+eG1pdF9idWYpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmlycV9zcGlubG9jaywgZmxhZ3MpOwpAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAlpZiAobWdzbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtZ3NsX3dyaXRlIikpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmICghdHR5IHx8ICFpbmZvLT54bWl0X2J1ZikKKwlpZiAoIWluZm8tPnhtaXRfYnVmKQogCQlnb3RvIGNsZWFudXA7CiAKIAlpZiAoIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9IRExDIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDg2NzhmMGMuLjQ1NjFjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC00NjgsNyArNDY4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGJ1Zl9ieXRlcyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHJlc2V0X3RidWZzKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgdGRtYV9yZXNldChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkIHR4X2xvYWQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIGJvb2wgdHhfbG9hZChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCk7CiAKIHN0YXRpYyB2b2lkIGdldF9zaWduYWxzKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgc2V0X3NpZ25hbHMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CkBAIC04MTMsNTkgKzgxMywzMiBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBzbGd0X2luZm8gKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGJ1ZnNfbmVlZGVkOwogCiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJ3cml0ZSIpKQotCQlnb3RvIGNsZWFudXA7CisJCXJldHVybiAtRUlPOworCiAJREJHSU5GTygoIiVzIHdyaXRlIGNvdW50PSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgY291bnQpKTsKIAotCWlmICghaW5mby0+dHhfYnVmKQotCQlnb3RvIGNsZWFudXA7CisJaWYgKCFpbmZvLT50eF9idWYgfHwgKGNvdW50ID4gaW5mby0+bWF4X2ZyYW1lX3NpemUpKQorCQlyZXR1cm4gLUVJTzsKIAotCWlmIChjb3VudCA+IGluZm8tPm1heF9mcmFtZV9zaXplKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gY2xlYW51cDsKLQl9CisJaWYgKCFjb3VudCB8fCB0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKQorCQlyZXR1cm4gMDsKIAotCWlmICghY291bnQpCi0JCWdvdG8gY2xlYW51cDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCFpbmZvLT50eF9hY3RpdmUgJiYgaW5mby0+dHhfY291bnQpIHsKKwlpZiAoaW5mby0+dHhfY291bnQpIHsKIAkJLyogc2VuZCBhY2N1bXVsYXRlZCBkYXRhIGZyb20gc2VuZF9jaGFyKCkgKi8KLQkJdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KTsKLQkJZ290byBzdGFydDsKKwkJaWYgKCF0eF9sb2FkKGluZm8sIGluZm8tPnR4X2J1ZiwgaW5mby0+dHhfY291bnQpKQorCQkJZ290byBjbGVhbnVwOworCQlpbmZvLT50eF9jb3VudCA9IDA7CiAJfQotCWJ1ZnNfbmVlZGVkID0gKGNvdW50L0RNQUJVRlNJWkUpOwotCWlmIChjb3VudCAlIERNQUJVRlNJWkUpCi0JCSsrYnVmc19uZWVkZWQ7Ci0JaWYgKGJ1ZnNfbmVlZGVkID4gZnJlZV90YnVmX2NvdW50KGluZm8pKQotCQlnb3RvIGNsZWFudXA7CiAKLQlyZXQgPSBpbmZvLT50eF9jb3VudCA9IGNvdW50OwotCXR4X2xvYWQoaW5mbywgYnVmLCBjb3VudCk7Ci0JZ290byBzdGFydDsKLQotc3RhcnQ6Ci0gCWlmIChpbmZvLT50eF9jb3VudCAmJiAhdHR5LT5zdG9wcGVkICYmICF0dHktPmh3X3N0b3BwZWQpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotCQlpZiAoIWluZm8tPnR4X2FjdGl2ZSkKLQkJIAl0eF9zdGFydChpbmZvKTsKLQkJZWxzZSBpZiAoIShyZF9yZWczMihpbmZvLCBURENTUikgJiBCSVQwKSkgewotCQkJLyogdHJhbnNtaXQgc3RpbGwgYWN0aXZlIGJ1dCB0cmFuc21pdCBETUEgc3RvcHBlZCAqLwotCQkJdW5zaWduZWQgaW50IGkgPSBpbmZvLT50YnVmX2N1cnJlbnQ7Ci0JCQlpZiAoIWkpCi0JCQkJaSA9IGluZm8tPnRidWZfY291bnQ7Ci0JCQlpLS07Ci0JCQkvKiBpZiBETUEgYnVmIHVuc2VudCBtdXN0IHRyeSBsYXRlciBhZnRlciB0eCBpZGxlICovCi0JCQlpZiAoZGVzY19jb3VudChpbmZvLT50YnVmc1tpXSkpCi0JCQkJcmV0ID0gMDsKLQkJfQotCQlpZiAocmV0ID4gMCkKLQkJCXVwZGF0ZV90eF90aW1lcihpbmZvKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7Ci0gCX0KKwlpZiAodHhfbG9hZChpbmZvLCBidWYsIGNvdW50KSkKKwkJcmV0ID0gY291bnQ7CiAKIGNsZWFudXA6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCURCR0lORk8oKCIlcyB3cml0ZSByYz0lZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIHJldCkpOwogCXJldHVybiByZXQ7CiB9CkBAIC04ODIsNyArODU1LDcgQEAKIAlpZiAoIWluZm8tPnR4X2J1ZikKIAkJcmV0dXJuIDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotCWlmICghaW5mby0+dHhfYWN0aXZlICYmIChpbmZvLT50eF9jb3VudCA8IGluZm8tPm1heF9mcmFtZV9zaXplKSkgeworCWlmIChpbmZvLT50eF9jb3VudCA8IGluZm8tPm1heF9mcmFtZV9zaXplKSB7CiAJCWluZm8tPnR4X2J1ZltpbmZvLT50eF9jb3VudCsrXSA9IGNoOwogCQlyZXQgPSAxOwogCX0KQEAgLTk4MSwxMCArOTU0LDggQEAKIAlEQkdJTkZPKCgiJXMgZmx1c2hfY2hhcnMgc3RhcnQgdHJhbnNtaXRcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7Ci0JaWYgKCFpbmZvLT50eF9hY3RpdmUgJiYgaW5mby0+dHhfY291bnQpIHsKLQkJdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsaW5mby0+dHhfY291bnQpOwotCSAJdHhfc3RhcnQoaW5mbyk7Ci0JfQorCWlmIChpbmZvLT50eF9jb3VudCAmJiB0eF9sb2FkKGluZm8sIGluZm8tPnR4X2J1ZiwgaW5mby0+dHhfY291bnQpKQorCQlpbmZvLT50eF9jb3VudCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiB9CiAKQEAgLTk5NywxMCArOTY4LDkgQEAKIAkJcmV0dXJuOwogCURCR0lORk8oKCIlcyBmbHVzaF9idWZmZXJcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7Ci0JaWYgKCFpbmZvLT50eF9hY3RpdmUpCi0JCWluZm8tPnR4X2NvdW50ID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWluZm8tPnR4X2NvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAKIAl0dHlfd2FrZXVwKHR0eSk7CiB9CkBAIC0xMDMzLDEyICsxMDAzLDEwIEBACiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJ0eF9yZWxlYXNlIikpCiAJCXJldHVybjsKIAlEQkdJTkZPKCgiJXMgdHhfcmVsZWFzZVxuIiwgaW5mby0+ZGV2aWNlX25hbWUpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7Ci0JaWYgKCFpbmZvLT50eF9hY3RpdmUgJiYgaW5mby0+dHhfY291bnQpIHsKLQkJdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KTsKLQkgCXR4X3N0YXJ0KGluZm8pOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWlmIChpbmZvLT50eF9jb3VudCAmJiB0eF9sb2FkKGluZm8sIGluZm8tPnR4X2J1ZiwgaW5mby0+dHhfY291bnQpKQorCQlpbmZvLT50eF9jb3VudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTUwNiwyNyArMTQ3NCwyNSBAQAogCiAJREJHSU5GTygoIiVzIGhkbGNfeG1pdFxuIiwgZGV2LT5uYW1lKSk7CiAKKwlpZiAoIXNrYi0+bGVuKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCiAJLyogc3RvcCBzZW5kaW5nIHVudGlsIHRoaXMgZnJhbWUgY29tcGxldGVzICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JLyogY29weSBkYXRhIHRvIGRldmljZSBidWZmZXJzICovCi0JaW5mby0+dHhfY291bnQgPSBza2ItPmxlbjsKLQl0eF9sb2FkKGluZm8sIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCiAJLyogdXBkYXRlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQkvKiBkb25lIHdpdGggc29ja2V0IGJ1ZmZlciwgc28gZnJlZSBpdCAqLwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQogCS8qIHNhdmUgc3RhcnQgdGltZSBmb3IgdHJhbnNtaXQgdGltZW91dCBkZXRlY3Rpb24gKi8KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKLQl0eF9zdGFydChpbmZvKTsKLQl1cGRhdGVfdHhfdGltZXIoaW5mbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwl0eF9sb2FkKGluZm8sIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCS8qIGRvbmUgd2l0aCBzb2NrZXQgYnVmZmVyLCBzbyBmcmVlIGl0ICovCisJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTIxODAsNyArMjE0Niw3IEBACiAKIAlpZiAoaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX0FTWU5DKSB7CiAJCWlmIChzdGF0dXMgJiBJUlFfVFhJRExFKSB7Ci0JCQlpZiAoaW5mby0+dHhfY291bnQpCisJCQlpZiAoaW5mby0+dHhfYWN0aXZlKQogCQkJCWlzcl90eGVvbShpbmZvLCBzdGF0dXMpOwogCQl9CiAJCWlmIChpbmZvLT5yeF9waW8gJiYgKHN0YXR1cyAmIElSUV9SWERBVEEpKQpAQCAtMjI3NiwxMyArMjI0Miw0MiBAQAogCX0KIH0KIAorLyoKKyAqIHJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSB1bnNlbnQgdHggRE1BIGJ1ZmZlcnMsIG90aGVyd2lzZSBmYWxzZQorICoKKyAqIGlmIHRoZXJlIGFyZSB1bnNlbnQgYnVmZmVycyB0aGVuIGluZm8tPnRidWZfc3RhcnQKKyAqIGlzIHNldCB0byBpbmRleCBvZiBmaXJzdCB1bnNlbnQgYnVmZmVyCisgKi8KK3N0YXRpYyBib29sIHVuc2VudF90YnVmcyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBpID0gaW5mby0+dGJ1Zl9jdXJyZW50OworCWJvb2wgcmMgPSBmYWxzZTsKKworCS8qCisJICogc2VhcmNoIGJhY2t3YXJkcyBmcm9tIGxhc3QgbG9hZGVkIGJ1ZmZlciAocHJlY2VkZXMgdGJ1Zl9jdXJyZW50KQorCSAqIGZvciBmaXJzdCB1bnNlbnQgYnVmZmVyIChkZXNjX2NvdW50ID4gMCkKKwkgKi8KKworCWRvIHsKKwkJaWYgKGkpCisJCQlpLS07CisJCWVsc2UKKwkJCWkgPSBpbmZvLT50YnVmX2NvdW50IC0gMTsKKwkJaWYgKCFkZXNjX2NvdW50KGluZm8tPnRidWZzW2ldKSkKKwkJCWJyZWFrOworCQlpbmZvLT50YnVmX3N0YXJ0ID0gaTsKKwkJcmMgPSB0cnVlOworCX0gd2hpbGUgKGkgIT0gaW5mby0+dGJ1Zl9jdXJyZW50KTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIHZvaWQgaXNyX3R4ZW9tKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIHVuc2lnbmVkIHNob3J0IHN0YXR1cykKIHsKIAlEQkdJU1IoKCIlcyB0eGVvbSBzdGF0dXM9JTA0eFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIHN0YXR1cykpOwogCiAJc2xndF9pcnFfb2ZmKGluZm8sIElSUV9UWERBVEEgKyBJUlFfVFhJRExFICsgSVJRX1RYVU5ERVIpOwogCXRkbWFfcmVzZXQoaW5mbyk7Ci0JcmVzZXRfdGJ1ZnMoaW5mbyk7CiAJaWYgKHN0YXR1cyAmIElSUV9UWFVOREVSKSB7CiAJCXVuc2lnbmVkIHNob3J0IHZhbCA9IHJkX3JlZzE2KGluZm8sIFRDUik7CiAJCXdyX3JlZzE2KGluZm8sIFRDUiwgKHVuc2lnbmVkIHNob3J0KSh2YWwgfCBCSVQyKSk7IC8qIHNldCByZXNldCBiaXQgKi8KQEAgLTIyOTcsOCArMjI5MiwxMiBAQAogCQkJCWluZm8tPmljb3VudC50eG9rKys7CiAJCX0KIAorCQlpZiAodW5zZW50X3RidWZzKGluZm8pKSB7CisJCQl0eF9zdGFydChpbmZvKTsKKwkJCXVwZGF0ZV90eF90aW1lcihpbmZvKTsKKwkJCXJldHVybjsKKwkJfQogCQlpbmZvLT50eF9hY3RpdmUgPSBmYWxzZTsKLQkJaW5mby0+dHhfY291bnQgPSAwOwogCiAJCWRlbF90aW1lcigmaW5mby0+dHhfdGltZXIpOwogCkBAIC0zOTQ5LDcgKzM5NDgsNyBAQAogCQlpbmZvLT50eF9lbmFibGVkID0gdHJ1ZTsKIAl9CiAKLQlpZiAoaW5mby0+dHhfY291bnQpIHsKKwlpZiAoZGVzY19jb3VudChpbmZvLT50YnVmc1tpbmZvLT50YnVmX3N0YXJ0XSkpIHsKIAkJaW5mby0+ZHJvcF9ydHNfb25fdHhfZG9uZSA9IGZhbHNlOwogCiAJCWlmIChpbmZvLT5wYXJhbXMubW9kZSAhPSBNR1NMX01PREVfQVNZTkMpIHsKQEAgLTQ3NzIsMjUgKzQ3NzEsMzYgQEAKIH0KIAogLyoKLSAqIGxvYWQgdHJhbnNtaXQgRE1BIGJ1ZmZlcihzKSB3aXRoIGRhdGEKKyAqIGxvYWQgZGF0YSBpbnRvIHRyYW5zbWl0IERNQSBidWZmZXIgcmluZyBhbmQgc3RhcnQgdHJhbnNtaXR0ZXIgaWYgbmVlZGVkCisgKiByZXR1cm4gdHJ1ZSBpZiBkYXRhIGFjY2VwdGVkLCBvdGhlcndpc2UgZmFsc2UgKGJ1ZmZlcnMgZnVsbCkKICAqLwotc3RhdGljIHZvaWQgdHhfbG9hZChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGJvb2wgdHhfbG9hZChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQogewogCXVuc2lnbmVkIHNob3J0IGNvdW50OwogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBzbGd0X2Rlc2MgKmQ7CiAKLQlpZiAoc2l6ZSA9PSAwKQotCQlyZXR1cm47CisJLyogY2hlY2sgcmVxdWlyZWQgYnVmZmVyIHNwYWNlICovCisJaWYgKERJVl9ST1VORF9VUChzaXplLCBETUFCVUZTSVpFKSA+IGZyZWVfdGJ1Zl9jb3VudChpbmZvKSkKKwkJcmV0dXJuIGZhbHNlOwogCiAJREJHREFUQShpbmZvLCBidWYsIHNpemUsICJ0eCIpOwogCisJLyoKKwkgKiBjb3B5IGRhdGEgdG8gb25lIG9yIG1vcmUgRE1BIGJ1ZmZlcnMgaW4gY2lyY3VsYXIgcmluZworCSAqIHRidWZfc3RhcnQgICA9IGZpcnN0IGJ1ZmZlciBmb3IgdGhpcyBkYXRhCisJICogdGJ1Zl9jdXJyZW50ID0gbmV4dCBmcmVlIGJ1ZmZlcgorCSAqCisJICogQ29weSBhbGwgZGF0YSBiZWZvcmUgbWFraW5nIGRhdGEgdmlzaWJsZSB0byBETUEgY29udHJvbGxlciBieQorCSAqIHNldHRpbmcgZGVzY3JpcHRvciBjb3VudCBvZiB0aGUgZmlyc3QgYnVmZmVyLgorCSAqIFRoaXMgcHJldmVudHMgYW4gYWN0aXZlIERNQSBjb250cm9sbGVyIGZyb20gcmVhZGluZyB0aGUgZmlyc3QgRE1BCisJICogYnVmZmVycyBvZiBhIGZyYW1lIGFuZCBzdG9wcGluZyBiZWZvcmUgdGhlIGZpbmFsIGJ1ZmZlcnMgYXJlIGZpbGxlZC4KKwkgKi8KKwogCWluZm8tPnRidWZfc3RhcnQgPSBpID0gaW5mby0+dGJ1Zl9jdXJyZW50OwogCiAJd2hpbGUgKHNpemUpIHsKIAkJZCA9ICZpbmZvLT50YnVmc1tpXTsKLQkJaWYgKCsraSA9PSBpbmZvLT50YnVmX2NvdW50KQotCQkJaSA9IDA7CiAKIAkJY291bnQgPSAodW5zaWduZWQgc2hvcnQpKChzaXplID4gRE1BQlVGU0laRSkgPyBETUFCVUZTSVpFIDogc2l6ZSk7CiAJCW1lbWNweShkLT5idWYsIGJ1ZiwgY291bnQpOwpAQCAtNDgwOCwxMSArNDgxOCwyNyBAQAogCQllbHNlCiAJCQlzZXRfZGVzY19lb2YoKmQsIDApOwogCi0JCXNldF9kZXNjX2NvdW50KCpkLCBjb3VudCk7CisJCS8qIHNldCBkZXNjcmlwdG9yIGNvdW50IGZvciBhbGwgYnV0IGZpcnN0IGJ1ZmZlciAqLworCQlpZiAoaSAhPSBpbmZvLT50YnVmX3N0YXJ0KQorCQkJc2V0X2Rlc2NfY291bnQoKmQsIGNvdW50KTsKIAkJZC0+YnVmX2NvdW50ID0gY291bnQ7CisKKwkJaWYgKCsraSA9PSBpbmZvLT50YnVmX2NvdW50KQorCQkJaSA9IDA7CiAJfQogCiAJaW5mby0+dGJ1Zl9jdXJyZW50ID0gaTsKKworCS8qIHNldCBmaXJzdCBidWZmZXIgY291bnQgdG8gbWFrZSBuZXcgZGF0YSB2aXNpYmxlIHRvIERNQSBjb250cm9sbGVyICovCisJZCA9ICZpbmZvLT50YnVmc1tpbmZvLT50YnVmX3N0YXJ0XTsKKwlzZXRfZGVzY19jb3VudCgqZCwgZC0+YnVmX2NvdW50KTsKKworCS8qIHN0YXJ0IHRyYW5zbWl0dGVyIGlmIG5lZWRlZCBhbmQgdXBkYXRlIHRyYW5zbWl0IHRpbWVvdXQgKi8KKwlpZiAoIWluZm8tPnR4X2FjdGl2ZSkKKwkJdHhfc3RhcnQoaW5mbyk7CisJdXBkYXRlX3R4X3RpbWVyKGluZm8pOworCisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfdGVzdChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQpAQCAtNDkzNCw5ICs0OTYwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7CiAJYXN5bmNfbW9kZShpbmZvKTsKIAlyeF9zdGFydChpbmZvKTsKLQlpbmZvLT50eF9jb3VudCA9IGNvdW50OwogCXR4X2xvYWQoaW5mbywgYnVmLCBjb3VudCk7Ci0JdHhfc3RhcnQoaW5mbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCiAJLyogd2FpdCBmb3IgcmVjZWl2ZSBjb21wbGV0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKaW5kZXggNjZmYTRlMS4uYWY4ZDk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCkBAIC0yMzEsOSArMjMxLDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSk7CiAKIC8qKgotICoJdHR5X2luc2VydF9mbGlwX3N0cmluZwktCUFkZCBjaGFyYWN0ZXJzIHRvIHRoZSB0dHkgYnVmZmVyCisgKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcgLSBBZGQgY2hhcmFjdGVycyB0byB0aGUgdHR5IGJ1ZmZlcgogICoJQHR0eTogdHR5IHN0cnVjdHVyZQogICoJQGNoYXJzOiBjaGFyYWN0ZXJzCisgKglAZmxhZzogZmxhZyB2YWx1ZSBmb3IgZWFjaCBjaGFyYWN0ZXIKICAqCUBzaXplOiBzaXplCiAgKgogICoJUXVldWUgYSBzZXJpZXMgb2YgYnl0ZXMgdG8gdGhlIHR0eSBidWZmZXJpbmcuIEFsbCB0aGUgY2hhcmFjdGVycwpAQCAtMjQyLDE4ICsyNDMsMTkgQEAKICAqCUxvY2tpbmc6IENhbGxlZCBmdW5jdGlvbnMgbWF5IHRha2UgdHR5LT5idWYubG9jawogICovCiAKLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLAotCQkJCXNpemVfdCBzaXplKQoraW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZml4ZWRfZmxhZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY2hhciBmbGFnLCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgY29waWVkID0gMDsKIAlkbyB7Ci0JCWludCBzcGFjZSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgc2l6ZSAtIGNvcGllZCk7CisJCWludCBnb2FsID0gbWluKHNpemUgLSBjb3BpZWQsIFRUWV9CVUZGRVJfUEFHRSk7CisJCWludCBzcGFjZSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgZ29hbCk7CiAJCXN0cnVjdCB0dHlfYnVmZmVyICp0YiA9IHR0eS0+YnVmLnRhaWw7CiAJCS8qIElmIHRoZXJlIGlzIG5vIHNwYWNlIHRoZW4gdGIgbWF5IGJlIE5VTEwgKi8KIAkJaWYgKHVubGlrZWx5KHNwYWNlID09IDApKQogCQkJYnJlYWs7CiAJCW1lbWNweSh0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQsIGNoYXJzLCBzcGFjZSk7Ci0JCW1lbXNldCh0Yi0+ZmxhZ19idWZfcHRyICsgdGItPnVzZWQsIFRUWV9OT1JNQUwsIHNwYWNlKTsKKwkJbWVtc2V0KHRiLT5mbGFnX2J1Zl9wdHIgKyB0Yi0+dXNlZCwgZmxhZywgc3BhY2UpOwogCQl0Yi0+dXNlZCArPSBzcGFjZTsKIAkJY29waWVkICs9IHNwYWNlOwogCQljaGFycyArPSBzcGFjZTsKQEAgLTI2Miw3ICsyNjQsNyBAQAogCX0gd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKIAlyZXR1cm4gY29waWVkOwogfQotRVhQT1JUX1NZTUJPTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKTsKK0VYUE9SVF9TWU1CT0wodHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKTsKIAogLyoqCiAgKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzCS0JQWRkIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBidWZmZXIKQEAgLTI4Myw3ICsyODUsOCBAQAogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKLQkJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplIC0gY29waWVkKTsKKwkJaW50IGdvYWwgPSBtaW4oc2l6ZSAtIGNvcGllZCwgVFRZX0JVRkZFUl9QQUdFKTsKKwkJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBnb2FsKTsKIAkJc3RydWN0IHR0eV9idWZmZXIgKnRiID0gdHR5LT5idWYudGFpbDsKIAkJLyogSWYgdGhlcmUgaXMgbm8gc3BhY2UgdGhlbiB0YiBtYXkgYmUgTlVMTCAqLwogCQlpZiAodW5saWtlbHkoc3BhY2UgPT0gMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKaW5kZXggM2Y2NTNmNy4uNTAwZTc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwpAQCAtNzA2LDEyICs3MDYsMTMgQEAKIC8qKgogICoJdHR5X2xkaXNjX3JlaW5pdAktCXJlaW5pdGlhbGlzZSB0aGUgdHR5IGxkaXNjCiAgKglAdHR5OiB0dHkgdG8gcmVpbml0CisgKglAbGRpc2M6IGxpbmUgZGlzY2lwbGluZSB0byByZWluaXRpYWxpemUKICAqCi0gKglTd2l0Y2ggdGhlIHR0eSBiYWNrIHRvIE5fVFRZIGxpbmUgZGlzY2lwbGluZSBhbmQgbGVhdmUgdGhlCi0gKglsZGlzYyBzdGF0ZSBjbG9zZWQKKyAqCVN3aXRjaCB0aGUgdHR5IHRvIGEgbGluZSBkaXNjaXBsaW5lIGFuZCBsZWF2ZSB0aGUgbGRpc2MKKyAqCXN0YXRlIGNsb3NlZAogICovCiAKLXN0YXRpYyB2b2lkIHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkaXNjKQogewogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCkBAIC03MjEsMTAgKzcyMiwxMCBAQAogCS8qCiAJICoJU3dpdGNoIHRoZSBsaW5lIGRpc2NpcGxpbmUgYmFjawogCSAqLwotCWxkID0gdHR5X2xkaXNjX2dldChOX1RUWSk7CisJbGQgPSB0dHlfbGRpc2NfZ2V0KGxkaXNjKTsKIAlCVUdfT04oSVNfRVJSKGxkKSk7CiAJdHR5X2xkaXNjX2Fzc2lnbih0dHksIGxkKTsKLQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBOX1RUWSk7CisJdHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgbGRpc2MpOwogfQogCiAvKioKQEAgLTc0NSw2ICs3NDYsOCBAQAogdm9pZCB0dHlfbGRpc2NfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaW50IHJlc2V0ID0gdHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TOworCWludCBlcnIgPSAwOwogCiAJLyoKIAkgKiBGSVhNRSEgV2hhdCBhcmUgdGhlIGxvY2tpbmcgaXNzdWVzIGhlcmU/IFRoaXMgbWF5IG1lIG92ZXJkb2luZwpAQCAtNzcyLDI1ICs3NzUsMzIgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHR5LT5yZWFkX3dhaXQsIFBPTExJTik7CiAJLyoKIAkgKiBTaHV0ZG93biB0aGUgY3VycmVudCBsaW5lIGRpc2NpcGxpbmUsIGFuZCByZXNldCBpdCB0bwotCSAqIE5fVFRZLgorCSAqIE5fVFRZIGlmIG5lZWQgYmUuCisJICoKKwkgKiBBdm9pZCByYWNpbmcgc2V0X2xkaXNjIG9yIHR0eV9sZGlzY19yZWxlYXNlCiAJICovCi0JaWYgKHR0eS0+ZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUykgewotCQkvKiBBdm9pZCByYWNpbmcgc2V0X2xkaXNjIG9yIHR0eV9sZGlzY19yZWxlYXNlICovCi0JCW11dGV4X2xvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOwotCQl0dHlfbGRpc2NfaGFsdCh0dHkpOwotCQlpZiAodHR5LT5sZGlzYykgewkvKiBOb3QgeWV0IGNsb3NlZCAqLwotCQkJLyogU3dpdGNoIGJhY2sgdG8gTl9UVFkgKi8KLQkJCXR0eV9sZGlzY19yZWluaXQodHR5KTsKLQkJCS8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGNsb3NlZCBsZGlzYyBhbmQgd2Ugd2FudCB0bwotCQkJICAgcmVvcGVuIGl0LiBXZSBjb3VsZCBkZWZlciB0aGlzIHRvIHRoZSBuZXh0IG9wZW4gYnV0Ci0JCQkgICBpdCBtZWFucyBhdWRpdGluZyBhIGxvdCBvZiBvdGhlciBwYXRocyBzbyB0aGlzIGlzCi0JCQkgICBhIEZJWE1FICovCi0JCQlXQVJOX09OKHR0eV9sZGlzY19vcGVuKHR0eSwgdHR5LT5sZGlzYykpOwotCQkJdHR5X2xkaXNjX2VuYWJsZSh0dHkpOworCW11dGV4X2xvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOworCXR0eV9sZGlzY19oYWx0KHR0eSk7CisJLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgY2xvc2VkIGxkaXNjIGFuZCB3ZSB3YW50IHRvCisJICAgcmVvcGVuIGl0LiBXZSBjb3VsZCBkZWZlciB0aGlzIHRvIHRoZSBuZXh0IG9wZW4gYnV0CisJICAgaXQgbWVhbnMgYXVkaXRpbmcgYSBsb3Qgb2Ygb3RoZXIgcGF0aHMgc28gdGhpcyBpcworCSAgIGEgRklYTUUgKi8KKwlpZiAodHR5LT5sZGlzYykgewkvKiBOb3QgeWV0IGNsb3NlZCAqLworCQlpZiAocmVzZXQgPT0gMCkgeworCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHksIHR0eS0+dGVybWlvcy0+Y19saW5lKTsKKwkJCWVyciA9IHR0eV9sZGlzY19vcGVuKHR0eSwgdHR5LT5sZGlzYyk7CiAJCX0KLQkJbXV0ZXhfdW5sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKLQkJdHR5X3Jlc2V0X3Rlcm1pb3ModHR5KTsKKwkJLyogSWYgdGhlIHJlLW9wZW4gZmFpbHMgb3Igd2UgcmVzZXQgdGhlbiBnbyB0byBOX1RUWS4gVGhlCisJCSAgIE5fVFRZIG9wZW4gY2Fubm90IGZhaWwgKi8KKwkJaWYgKHJlc2V0IHx8IGVycikgeworCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fVFRZKTsKKwkJCVdBUk5fT04odHR5X2xkaXNjX29wZW4odHR5LCB0dHktPmxkaXNjKSk7CisJCX0KKwkJdHR5X2xkaXNjX2VuYWJsZSh0dHkpOwogCX0KKwltdXRleF91bmxvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOworCWlmIChyZXNldCkKKwkJdHR5X3Jlc2V0X3Rlcm1pb3ModHR5KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IGEwMzVhZTMuLjIxMzM3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xLDE4ICsxLDYgQEAKLS8qRDozMDAKLSAqIFRoZSBHdWVzdCBjb25zb2xlIGRyaXZlcgotICoKLSAqIFdyaXRpbmcgY29uc29sZSBkcml2ZXJzIGlzIG9uZSBvZiB0aGUgZmV3IHJlbWFpbmluZyBEYXJrIEFydHMgaW4gTGludXguCi0gKiBGb3J0dW5hdGVseSBmb3IgdXMsIHRoZSBwYXRoIG9mIHZpcnR1YWwgY29uc29sZXMgaGFzIGJlZW4gd2VsbC10cm9kZGVuIGJ5Ci0gKiB0aGUgUG93ZXJQQyBmb2xrcywgd2hvIHdyb3RlICJodmNfY29uc29sZS5jIiB0byBnZW5lcmljYWxseSBzdXBwb3J0IGFueQotICogdmlydHVhbCBjb25zb2xlLiAgV2UgdXNlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgd2hpY2ggb25seSByZXF1aXJlcyB1cyB0byB3cml0ZQotICogdGhlIGJhc2ljIHB1dF9jaGFycyBhbmQgZ2V0X2NoYXJzIGZ1bmN0aW9ucyBhbmQgY2FsbCB0aGUgcmlnaHQgcmVnaXN0ZXIKLSAqIGZ1bmN0aW9ucy4KLSA6Ki8KLQotLypNOjAwMiBUaGUgY29uc29sZSBjYW4gYmUgZmxvb2RlZDogd2hpbGUgdGhlIEd1ZXN0IGlzIHByb2Nlc3NpbmcgaW5wdXQgdGhlCi0gKiBIb3N0IGNhbiBzZW5kIG1vcmUuICBCdWZmZXJpbmcgaW4gdGhlIEhvc3QgY291bGQgYWxsZXZpYXRlIHRoaXMsIGJ1dCBpdCBpcyBhCi0gKiBkaWZmaWN1bHQgcHJvYmxlbSBpbiBnZW5lcmFsLiA6Ki8KLS8qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsMTQyICsxNiw2OTQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKLS8qRDozNDAgVGhlc2UgcmVwcmVzZW50IG91ciBpbnB1dCBhbmQgb3V0cHV0IGNvbnNvbGUgcXVldWVzLCBhbmQgdGhlIHZpcnRpbwotICogb3BlcmF0aW9ucyBmb3IgdGhlbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQotLyogVGhpcyBpcyBvdXIgaW5wdXQgYnVmZmVyLCBhbmQgaG93IG11Y2ggZGF0YSBpcyBsZWZ0IGluIGl0LiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbl9sZW47Ci1zdGF0aWMgY2hhciAqaW4sICppbmJ1ZjsKLQotLyogVGhlIG9wZXJhdGlvbnMgZm9yIG91ciBjb25zb2xlLiAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgdmlydGlvX2NvbnM7Ci0KLS8qIFRoZSBodmMgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IGh2Y19zdHJ1Y3QgKmh2YzsKLQotLypEOjMxMCBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKy8qCisgKiBUaGlzIGlzIGEgZ2xvYmFsIHN0cnVjdCBmb3Igc3RvcmluZyBjb21tb24gZGF0YSBmb3IgYWxsIHRoZSBkZXZpY2VzCisgKiB0aGlzIGRyaXZlciBoYW5kbGVzLgogICoKLSAqIFdlIHR1cm4gdGhlIGNoYXJhY3RlcnMgaW50byBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGFkZCBpdCB0byB0aGUgb3V0cHV0Ci0gKiBxdWV1ZSBhbmQgdGhlbiBraWNrIHRoZSBIb3N0LiAgVGhlbiB3ZSBzaXQgaGVyZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2g6Ci0gKiBpbmVmZmljaWVudCBpbiB0aGVvcnksIGJ1dCBpbiBwcmFjdGljZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBkbyBpdAotICogaW1tZWRpYXRlbHkgKGxndWVzdCdzIExhdW5jaGVyIGRvZXMpLiAqLwotc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorICogTWFpbmx5LCBpdCBoYXMgYSBsaW5rZWQgbGlzdCBmb3IgYWxsIHRoZSBjb25zb2xlcyBpbiBvbmUgcGxhY2Ugc28KKyAqIHRoYXQgY2FsbGJhY2tzIGZyb20gaHZjIGZvciBnZXRfY2hhcnMoKSwgcHV0X2NoYXJzKCkgd29yayBwcm9wZXJseQorICogYWNyb3NzIG11bHRpcGxlIGRldmljZXMgYW5kIG11bHRpcGxlIHBvcnRzIHBlciBkZXZpY2UuCisgKi8KK3N0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSB7CisJLyogVXNlZCBmb3IgcmVnaXN0ZXJpbmcgY2hhcmRldnMgKi8KKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCisJLyogVXNlZCBmb3IgZXhwb3J0aW5nIHBlci1wb3J0IGluZm9ybWF0aW9uIHRvIGRlYnVnZnMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsKKworCS8qIE51bWJlciBvZiBkZXZpY2VzIHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nICovCisJdW5zaWduZWQgaW50IGluZGV4OworCisJLyoKKwkgKiBUaGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGh2YyBjb25zb2xlcworCSAqIHNwYXduZWQgYnkgdGhpcyBkcml2ZXIuICBUaGlzIG51bWJlciBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKKwkgKiBhcmd1bWVudCB0byBodmNfYWxsb2MoKS4gIFRvIGNvcnJlY3RseSBtYXAgYW4gaW5pdGlhbAorCSAqIGNvbnNvbGUgc3Bhd25lZCB2aWEgaHZjX2luc3RhbnRpYXRlIHRvIHRoZSBjb25zb2xlIGJlaW5nCisJICogaG9va2VkIHVwIHZpYSBodmNfYWxsb2MsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2FtZSB2dGVybW5vLgorCSAqCisJICogV2UgYWxzbyBqdXN0IGFzc3VtZSB0aGUgZmlyc3QgY29uc29sZSBiZWluZyBpbml0aWFsaXNlZCB3YXMKKwkgKiB0aGUgZmlyc3Qgb25lIHRoYXQgZ290IHVzZWQgYXMgdGhlIGluaXRpYWwgY29uc29sZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF92dGVybW5vOworCisJLyogQWxsIHRoZSBjb25zb2xlIGRldmljZXMgaGFuZGxlZCBieSB0aGlzIGRyaXZlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc29sZXM7Cit9Oworc3RhdGljIHN0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSBwZHJ2ZGF0YTsKKworREVGSU5FX1NQSU5MT0NLKHBkcnZkYXRhX2xvY2spOworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBpbmZvcm1hdGlvbiB0aGF0J3MgcmVsZXZhbnQgb25seSBmb3IgY29uc29sZSBwb3J0cyAqLworc3RydWN0IGNvbnNvbGUgeworCS8qIFdlJ2xsIHBsYWNlIGFsbCBjb25zb2xlcyBpbiBhIGxpc3QgaW4gdGhlIHBkcnZkYXRhIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFRoZSBodmMgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnNvbGUgcG9ydCAqLworCXN0cnVjdCBodmNfc3RydWN0ICpodmM7CisKKwkvKgorCSAqIFRoaXMgbnVtYmVyIGlkZW50aWZpZXMgdGhlIG51bWJlciB0aGF0IHdlIHVzZWQgdG8gcmVnaXN0ZXIKKwkgKiB3aXRoIGh2YyBpbiBodmNfaW5zdGFudGlhdGUoKSBhbmQgaHZjX2FsbG9jKCk7IHRoaXMgaXMgdGhlCisJICogbnVtYmVyIHBhc3NlZCBvbiBieSB0aGUgaHZjIGNhbGxiYWNrcyB0byB1cyB0bworCSAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgb3RoZXIgY29uc29sZSBwb3J0cyBoYW5kbGVkIGJ5CisJICogdGhpcyBkcml2ZXIKKwkgKi8KKwl1MzIgdnRlcm1ubzsKK307CisKK3N0cnVjdCBwb3J0X2J1ZmZlciB7CisJY2hhciAqYnVmOworCisJLyogc2l6ZSBvZiB0aGUgYnVmZmVyIGluICpidWYgYWJvdmUgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qIHVzZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKi8KKwlzaXplX3QgbGVuOworCS8qIG9mZnNldCBpbiB0aGUgYnVmIGZyb20gd2hpY2ggdG8gY29uc3VtZSBkYXRhICovCisJc2l6ZV90IG9mZnNldDsKK307CisKKy8qCisgKiBUaGlzIGlzIGEgcGVyLWRldmljZSBzdHJ1Y3QgdGhhdCBzdG9yZXMgZGF0YSBjb21tb24gdG8gYWxsIHRoZQorICogcG9ydHMgZm9yIHRoYXQgZGV2aWNlICh2ZGV2LT5wcml2KS4KKyAqLworc3RydWN0IHBvcnRzX2RldmljZSB7CisJLyoKKwkgKiBXb3JrcXVldWUgaGFuZGxlcnMgd2hlcmUgd2UgcHJvY2VzcyBkZWZlcnJlZCB3b3JrIGFmdGVyCisJICogbm90aWZpY2F0aW9uCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbnRyb2xfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOworCisJLyogVG8gcHJvdGVjdCB0aGUgbGlzdCBvZiBwb3J0cyAqLworCXNwaW5sb2NrX3QgcG9ydHNfbG9jazsKKworCS8qIFRvIHByb3RlY3QgdGhlIHZxIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKwlzcGlubG9ja190IGN2cV9sb2NrOworCisJLyogVGhlIGN1cnJlbnQgY29uZmlnIHNwYWNlIGlzIHN0b3JlZCBoZXJlICovCisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyBjb25maWc7CisKKwkvKiBUaGUgdmlydGlvIGRldmljZSB3ZSdyZSBhc3NvY2lhdGVkIHdpdGggKi8KKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKworCS8qCisJICogQSBjb3VwbGUgb2YgdmlydHF1ZXVlcyBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbDogb25lIGZvcgorCSAqIGd1ZXN0LT5ob3N0IHRyYW5zZmVycywgb25lIGZvciBob3N0LT5ndWVzdCB0cmFuc2ZlcnMKKwkgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICpjX2l2cSwgKmNfb3ZxOworCisJLyogQXJyYXkgb2YgcGVyLXBvcnQgSU8gdmlydHF1ZXVlcyAqLworCXN0cnVjdCB2aXJ0cXVldWUgKippbl92cXMsICoqb3V0X3ZxczsKKworCS8qIFVzZWQgZm9yIG51bWJlcmluZyBkZXZpY2VzIGZvciBzeXNmcyBhbmQgZGVidWdmcyAqLworCXVuc2lnbmVkIGludCBkcnZfaW5kZXg7CisKKwkvKiBNYWpvciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlLiAgUG9ydHMgd2lsbCBiZSBjcmVhdGVkIGFzIG1pbm9ycy4gKi8KKwlpbnQgY2hyX21ham9yOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIHBlci1wb3J0IGRhdGEgKi8KK3N0cnVjdCBwb3J0IHsKKwkvKiBOZXh0IHBvcnQgaW4gdGhlIGxpc3QsIGhlYWQgaXMgaW4gdGhlIHBvcnRzX2RldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIHBhcmVudCB2aXJ0aW9fY29uc29sZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2OworCisJLyogVGhlIGN1cnJlbnQgYnVmZmVyIGZyb20gd2hpY2ggZGF0YSBoYXMgdG8gYmUgZmVkIHRvIHJlYWRlcnMgKi8KKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmluYnVmOworCisJLyoKKwkgKiBUbyBwcm90ZWN0IHRoZSBvcGVyYXRpb25zIG9uIHRoZSBpbl92cSBhc3NvY2lhdGVkIHdpdGggdGhpcworCSAqIHBvcnQuICBIYXMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIGludGVycnVwdCBjb250ZXh0IChnZXRfY2hhcigpKS4KKwkgKi8KKwlzcGlubG9ja190IGluYnVmX2xvY2s7CisKKwkvKiBUaGUgSU8gdnFzIGZvciB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKKworCS8qIEZpbGUgaW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5IHRoYXQgZXhwb3NlcyB0aGlzIHBvcnQncyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZmlsZTsKKworCS8qCisJICogVGhlIGVudHJpZXMgaW4gdGhpcyBzdHJ1Y3Qgd2lsbCBiZSB2YWxpZCBpZiB0aGlzIHBvcnQgaXMKKwkgKiBob29rZWQgdXAgdG8gYW4gaHZjIGNvbnNvbGUKKwkgKi8KKwlzdHJ1Y3QgY29uc29sZSBjb25zOworCisJLyogRWFjaCBwb3J0IGFzc29jaWF0ZXMgd2l0aCBhIHNlcGFyYXRlIGNoYXIgZGV2aWNlICovCisJc3RydWN0IGNkZXYgY2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiBBIHdhaXRxdWV1ZSBmb3IgcG9sbCgpIG9yIGJsb2NraW5nIHJlYWQgb3BlcmF0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKKworCS8qIFRoZSAnbmFtZScgb2YgdGhlIHBvcnQgdGhhdCB3ZSBleHBvc2UgdmlhIHN5c2ZzIHByb3BlcnRpZXMgKi8KKwljaGFyICpuYW1lOworCisJLyogVGhlICdpZCcgdG8gaWRlbnRpZnkgdGhlIHBvcnQgd2l0aCB0aGUgSG9zdCAqLworCXUzMiBpZDsKKworCS8qIElzIHRoZSBob3N0IGRldmljZSBvcGVuICovCisJYm9vbCBob3N0X2Nvbm5lY3RlZDsKKworCS8qIFdlIHNob3VsZCBhbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwb3J0ICovCisJYm9vbCBndWVzdF9jb25uZWN0ZWQ7Cit9OworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGVhcmx5IGFyY2gtc3BlY2lmaWVkIHB1dCBjaGFycyBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgKCplYXJseV9wdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpOworCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV92dGVybW5vKHUzMiB2dGVybW5vKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnMsICZwZHJ2ZGF0YS5jb25zb2xlcywgbGlzdCkgeworCQlpZiAoY29ucy0+dnRlcm1ubyA9PSB2dGVybW5vKSB7CisJCQlwb3J0ID0gY29udGFpbmVyX29mKGNvbnMsIHN0cnVjdCBwb3J0LCBjb25zKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfaWQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwgdTMyIGlkKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRldi0+cG9ydHNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlpZiAocG9ydC0+aWQgPT0gaWQpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfdnEoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwKKwkJCQkgICAgc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCWlmIChwb3J0LT5pbl92cSA9PSB2cSB8fCBwb3J0LT5vdXRfdnEgPT0gdnEpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvcnQ7Cit9CisKK3N0YXRpYyBib29sIGlzX2NvbnNvbGVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+Y29ucy5odmMpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHVzZV9tdWx0aXBvcnQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldikKK3sKKwkvKgorCSAqIFRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlIHdoZW4gcHV0X2NoYXJzIGlzIGNhbGxlZCBmcm9tCisJICogZWFybHlfaW5pdAorCSAqLworCWlmICghcG9ydGRldi0+dmRldikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBvcnRkZXYtPnZkZXYtPmZlYXR1cmVzWzBdICYgKDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZihzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZikKK3sKKwlrZnJlZShidWYtPmJ1Zik7CisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0X2J1ZmZlciAqYWxsb2NfYnVmKHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBmYWlsOworCWJ1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmJ1ZikKKwkJZ290byBmcmVlX2J1ZjsKKwlidWYtPmxlbiA9IDA7CisJYnVmLT5vZmZzZXQgPSAwOworCWJ1Zi0+c2l6ZSA9IGJ1Zl9zaXplOworCXJldHVybiBidWY7CisKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitmYWlsOgorCXJldHVybiBOVUxMOworfQorCisvKiBDYWxsZXJzIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGxvY2tzICovCitzdGF0aWMgdm9pZCAqZ2V0X2luYnVmKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQkvKiBUaGlzIGlzIGEgY29udmVuaWVudCByb3V0aW5lIHRvIGluaXRpYWxpemUgYSBzaW5nbGUtZWxlbSBzZyBsaXN0ICovCi0Jc2dfaW5pdF9vbmUoc2csIGJ1ZiwgY291bnQpOwotCi0JLyogYWRkX2J1ZiB3YW50cyBhIHRva2VuIHRvIGlkZW50aWZ5IHRoaXMgYnVmZmVyOiB3ZSBoYW5kIGl0IGFueQotCSAqIG5vbi1OVUxMIHBvaW50ZXIsIHNpbmNlIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBidWZmZXIuICovCi0JaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPj0gMCkgewotCQkvKiBUZWxsIEhvc3QgdG8gZ28hICovCi0JCW91dF92cS0+dnFfb3BzLT5raWNrKG91dF92cSk7Ci0JCS8qIENoaWxsIG91dCB1bnRpbCBpdCdzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLiAqLwotCQl3aGlsZSAoIW91dF92cS0+dnFfb3BzLT5nZXRfYnVmKG91dF92cSwgJmxlbikpCi0JCQljcHVfcmVsYXgoKTsKKwl2cSA9IHBvcnQtPmluX3ZxOworCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmIChidWYpIHsKKwkJYnVmLT5sZW4gPSBsZW47CisJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAl9Ci0KLQkvKiBXZSdyZSBleHBlY3RlZCB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdyb3RlOiBhbGwgb2YgaXQuICovCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBidWY7CiB9CiAKLS8qIENyZWF0ZSBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgcmVwcmVzZW50aW5nIG91ciBpbnB1dCBidWZmZXIgYW5kIHB1dCBpdCBpbiB0aGUKLSAqIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQgYWRkX2luYnVmKHZvaWQpCisvKgorICogQ3JlYXRlIGEgc2NhdHRlci1nYXRoZXIgbGlzdCByZXByZXNlbnRpbmcgb3VyIGlucHV0IGJ1ZmZlciBhbmQgcHV0CisgKiBpdCBpbiB0aGUgcXVldWUuCisgKgorICogQ2FsbGVycyBzaG91bGQgdGFrZSBhcHByb3ByaWF0ZSBsb2Nrcy4KKyAqLworc3RhdGljIGludCBhZGRfaW5idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKLQlzZ19pbml0X29uZShzZywgaW5idWYsIFBBR0VfU0laRSk7CisJaW50IHJldDsKIAotCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSA8IDApCi0JCUJVRygpOwotCWluX3ZxLT52cV9vcHMtPmtpY2soaW5fdnEpOworCXNnX2luaXRfb25lKHNnLCBidWYtPmJ1ZiwgYnVmLT5zaXplKTsKKworCXJldCA9IHZxLT52cV9vcHMtPmFkZF9idWYodnEsIHNnLCAwLCAxLCBidWYpOworCXZxLT52cV9vcHMtPmtpY2sodnEpOworCXJldHVybiByZXQ7CiB9CiAKLS8qRDozNTAgZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlIHdoZW4KLSAqIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKy8qIERpc2NhcmQgYW55IHVucmVhZCBkYXRhIHRoaXMgcG9ydCBoYXMuIENhbGxlcnMgbG9ja2Vycy4gKi8KK3N0YXRpYyB2b2lkIGRpc2NhcmRfcG9ydF9kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKKworCXZxID0gcG9ydC0+aW5fdnE7CisJaWYgKHBvcnQtPmluYnVmKQorCQlidWYgPSBwb3J0LT5pbmJ1ZjsKKwllbHNlCisJCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCisJcmV0ID0gMDsKKwl3aGlsZSAoYnVmKSB7CisJCWlmIChhZGRfaW5idWYodnEsIGJ1ZikgPCAwKSB7CisJCQlyZXQrKzsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwkJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJfQorCXBvcnQtPmluYnVmID0gTlVMTDsKKwlpZiAocmV0KQorCQlkZXZfd2Fybihwb3J0LT5kZXYsICJFcnJvcnMgYWRkaW5nICVkIGJ1ZmZlcnMgYmFjayB0byB2cVxuIiwKKwkJCSByZXQpOworfQorCitzdGF0aWMgYm9vbCBwb3J0X2hhc19kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT5pbmJ1ZikgeworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisJcG9ydC0+aW5idWYgPSBnZXRfaW5idWYocG9ydCk7CisJaWYgKHBvcnQtPmluYnVmKSB7CisJCXJldCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBmYWxzZTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGV2ZW50LAorCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgY3BrdDsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlpbnQgbGVuOworCisJaWYgKCF1c2VfbXVsdGlwb3J0KHBvcnQtPnBvcnRkZXYpKQorCQlyZXR1cm4gMDsKKworCWNwa3QuaWQgPSBwb3J0LT5pZDsKKwljcGt0LmV2ZW50ID0gZXZlbnQ7CisJY3BrdC52YWx1ZSA9IHZhbHVlOworCisJdnEgPSBwb3J0LT5wb3J0ZGV2LT5jX292cTsKKworCXNnX2luaXRfb25lKHNnLCAmY3BrdCwgc2l6ZW9mKGNwa3QpKTsKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgc2csIDEsIDAsICZjcGt0KSA+PSAwKSB7CisJCXZxLT52cV9vcHMtPmtpY2sodnEpOworCQl3aGlsZSAoIXZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pKQorCQkJY3B1X3JlbGF4KCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2J1ZihzdHJ1Y3QgcG9ydCAqcG9ydCwgdm9pZCAqaW5fYnVmLCBzaXplX3QgaW5fY291bnQpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXN0cnVjdCB2aXJ0cXVldWUgKm91dF92cTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJb3V0X3ZxID0gcG9ydC0+b3V0X3ZxOworCisJc2dfaW5pdF9vbmUoc2csIGluX2J1ZiwgaW5fY291bnQpOworCXJldCA9IG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsIGluX2J1Zik7CisKKwkvKiBUZWxsIEhvc3QgdG8gZ28hICovCisJb3V0X3ZxLT52cV9vcHMtPmtpY2sob3V0X3ZxKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWxlbiA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAqIFdhaXQgdGlsbCB0aGUgaG9zdCBhY2tub3dsZWRnZXMgaXQgcHVzaGVkIG91dCB0aGUgZGF0YSB3ZQorCSAqIHNlbnQuIEFsc28gZW5zdXJlIHdlIHJldHVybiB0byB1c2Vyc3BhY2UgdGhlIG51bWJlciBvZgorCSAqIGJ5dGVzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgYnkgdGhlIGhvc3QuCisJICovCisJd2hpbGUgKCFvdXRfdnEtPnZxX29wcy0+Z2V0X2J1ZihvdXRfdnEsICZsZW4pKQorCQljcHVfcmVsYXgoKTsKK2ZhaWw6CisJLyogV2UncmUgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3cm90ZSAqLworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBHaXZlIG91dCB0aGUgZGF0YSB0aGF0J3MgcmVxdWVzdGVkIGZyb20gdGhlIGJ1ZmZlciB0aGF0IHdlIGhhdmUKKyAqIHF1ZXVlZCB1cC4KKyAqLworc3RhdGljIHNzaXplX3QgZmlsbF9yZWFkYnVmKHN0cnVjdCBwb3J0ICpwb3J0LCBjaGFyICpvdXRfYnVmLCBzaXplX3Qgb3V0X2NvdW50LAorCQkJICAgIGJvb2wgdG9fdXNlcikKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvdXRfY291bnQgfHwgIXBvcnRfaGFzX2RhdGEocG9ydCkpCisJCXJldHVybiAwOworCisJYnVmID0gcG9ydC0+aW5idWY7CisJb3V0X2NvdW50ID0gbWluKG91dF9jb3VudCwgYnVmLT5sZW4gLSBidWYtPm9mZnNldCk7CisKKwlpZiAodG9fdXNlcikgeworCQlzc2l6ZV90IHJldDsKKworCQlyZXQgPSBjb3B5X3RvX3VzZXIob3V0X2J1ZiwgYnVmLT5idWYgKyBidWYtPm9mZnNldCwgb3V0X2NvdW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCW1lbWNweShvdXRfYnVmLCBidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0LCBvdXRfY291bnQpOworCX0KKworCWJ1Zi0+b2Zmc2V0ICs9IG91dF9jb3VudDsKKworCWlmIChidWYtPm9mZnNldCA9PSBidWYtPmxlbikgeworCQkvKgorCQkgKiBXZSdyZSBkb25lIHVzaW5nIGFsbCB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlci4KKwkJICogUmUtcXVldWUgc28gdGhhdCB0aGUgSG9zdCBjYW4gc2VuZCB1cyBtb3JlIGRhdGEuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCQlwb3J0LT5pbmJ1ZiA9IE5VTEw7CisKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0LT5pbl92cSwgYnVmKSA8IDApCisJCQlkZXZfd2Fybihwb3J0LT5kZXYsICJmYWlsZWQgYWRkX2J1ZlxuIik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCX0KKwkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3BpZWQgKi8KKwlyZXR1cm4gb3V0X2NvdW50OworfQorCisvKiBUaGUgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSB0cnVlIGZvciBwb2xsaW5nIHRvIGVuZCAqLworc3RhdGljIGJvb2wgd2FpdF9pc19vdmVyKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0X2hhc19kYXRhKHBvcnQpIHx8ICFwb3J0LT5ob3N0X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpKSB7CisJCS8qCisJCSAqIElmIG5vdGhpbmcncyBjb25uZWN0ZWQgb24gdGhlIGhvc3QganVzdCByZXR1cm4gMCBpbgorCQkgKiBjYXNlIG9mIGxpc3RfZW1wdHk7IHRoaXMgdGVsbHMgdGhlIHVzZXJzcGFjZSBhcHAKKwkJICogdGhhdCB0aGVyZSdzIG5vIGNvbm5lY3Rpb24KKwkJICovCisJCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnQtPndhaXRxdWV1ZSwKKwkJCQkJICAgICAgIHdhaXRfaXNfb3Zlcihwb3J0KSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJLyoKKwkgKiBXZSBjb3VsZCd2ZSByZWNlaXZlZCBhIGRpc2Nvbm5lY3Rpb24gbWVzc2FnZSB3aGlsZSB3ZSB3ZXJlCisJICogd2FpdGluZyBmb3IgbW9yZSBkYXRhLgorCSAqCisJICogVGhpcyBjaGVjayBpcyBub3QgY2x1YmJlZCBpbiB0aGUgaWYoKSBzdGF0ZW1lbnQgYWJvdmUgYXMgd2UKKwkgKiBtaWdodCByZWNlaXZlIHNvbWUgZGF0YSBhcyB3ZWxsIGFzIHRoZSBob3N0IGNvdWxkIGdldAorCSAqIGRpc2Nvbm5lY3RlZCBhZnRlciB3ZSBnb3Qgd29rZW4gdXAgZnJvbSBvdXIgd2FpdC4gIFNvIHdlCisJICogcmVhbGx5IHdhbnQgdG8gZ2l2ZSBvZmYgd2hhdGV2ZXIgZGF0YSB3ZSBoYXZlIGFuZCBvbmx5IHRoZW4KKwkgKiBjaGVjayBmb3IgaG9zdF9jb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpICYmICFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmlsbF9yZWFkYnVmKHBvcnQsIHVidWYsIGNvdW50LCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwljaGFyICpidWY7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJY291bnQgPSBtaW4oKHNpemVfdCkoMzIgKiAxMDI0KSwgY291bnQpOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjb3VudCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfYnVmOworCX0KKworCXJldCA9IHNlbmRfYnVmKHBvcnQsIGJ1ZiwgY291bnQpOworZnJlZV9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxwLCAmcG9ydC0+d2FpdHF1ZXVlLCB3YWl0KTsKKworCXJldCA9IDA7CisJaWYgKHBvcnQtPmluYnVmKQorCQlyZXQgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAocG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMT1VUOworCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMSFVQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3J0X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIGNsb3NlZCAqLworCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAwKTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IGZhbHNlOworCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9ydF9mb3BzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNkZXYgKmNkZXYgPSBpbm9kZS0+aV9jZGV2OworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG9ydCwgY2Rldik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcG9ydDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgb3BlbmluZyBvZiBjb25zb2xlIHBvcnQgZGV2aWNlcyAtLSB0aGF0J3MgZG9uZQorCSAqIHZpYSAvZGV2L2h2YworCSAqLworCWlmIChpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBBbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHBvcnQgYXQgYSB0aW1lICovCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJaWYgKHBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCkgeworCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCQlyZXR1cm4gLUVNRklMRTsKKwl9CisKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIG9wZW5lZCAqLworCXNlbmRfY29udHJvbF9tc2coZmlscC0+cHJpdmF0ZV9kYXRhLCBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgZmlsZSBvcGVyYXRpb25zIHRoYXQgd2Ugc3VwcG9ydDogcHJvZ3JhbXMgaW4gdGhlIGd1ZXN0IGNhbiBvcGVuCisgKiBhIGNvbnNvbGUgZGV2aWNlLCByZWFkIGZyb20gaXQsIHdyaXRlIHRvIGl0LCBwb2xsIGZvciBkYXRhIGFuZAorICogY2xvc2UgaXQuICBUaGUgZGV2aWNlcyBhcmUgYXQKKyAqICAgL2Rldi92cG9ydDxkZXZpY2UgbnVtYmVyPnA8cG9ydCBudW1iZXI+CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgPSBwb3J0X2ZvcHNfb3BlbiwKKwkucmVhZCAgPSBwb3J0X2ZvcHNfcmVhZCwKKwkud3JpdGUgPSBwb3J0X2ZvcHNfd3JpdGUsCisJLnBvbGwgID0gcG9ydF9mb3BzX3BvbGwsCisJLnJlbGVhc2UgPSBwb3J0X2ZvcHNfcmVsZWFzZSwKK307CisKKy8qCisgKiBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KICAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgaHZjX2NvbnNvbGUoKSBpbmZyYXN0cnVjdHVyZQotICogb25seSBhc2tzIHVzIGZvciAxNiBieXRlcyBhdCBhIHRpbWUuICBXZSBrZWVwIGluX29mZnNldCBhbmQgaW5fdXNlZCBmaWVsZHMKLSAqIGZvciBwYXJ0aWFsbHktZmlsbGVkIGJ1ZmZlcnMuICovCisgKiBXZSB0dXJuIHRoZSBjaGFyYWN0ZXJzIGludG8gYSBzY2F0dGVyLWdhdGhlciBsaXN0LCBhZGQgaXQgdG8gdGhlCisgKiBvdXRwdXQgcXVldWUgYW5kIHRoZW4ga2ljayB0aGUgSG9zdC4gIFRoZW4gd2Ugc2l0IGhlcmUgd2FpdGluZyBmb3IKKyAqIGl0IHRvIGZpbmlzaDogaW5lZmZpY2llbnQgaW4gdGhlb3J5LCBidXQgaW4gcHJhY3RpY2UKKyAqIGltcGxlbWVudGF0aW9ucyB3aWxsIGRvIGl0IGltbWVkaWF0ZWx5IChsZ3Vlc3QncyBMYXVuY2hlciBkb2VzKS4KKyAqLworc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoZWFybHlfcHV0X2NoYXJzKSkKKwkJcmV0dXJuIGVhcmx5X3B1dF9jaGFycyh2dGVybW5vLCBidWYsIGNvdW50KTsKKworCXJldHVybiBzZW5kX2J1Zihwb3J0LCAodm9pZCAqKWJ1ZiwgY291bnQpOworfQorCisvKgorICogZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlCisgKiB3aGVuIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKyAqCisgKiBXZSBjYWxsIG91dCB0byBmaWxsX3JlYWRidWYgdGhhdCBnZXRzIHVzIHRoZSByZXF1aXJlZCBkYXRhIGZyb20gdGhlCisgKiBidWZmZXJzIHRoYXQgYXJlIHF1ZXVlZCB1cC4KKyAqLwogc3RhdGljIGludCBnZXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGlucHV0IHF1ZXVlIHlldCwgd2UgY2FuJ3QgZ2V0IGlucHV0LiAqLwotCUJVR19PTighaW5fdnEpOworCUJVR19PTighcG9ydC0+aW5fdnEpOwogCi0JLyogTm8gYnVmZmVyPyAgVHJ5IHRvIGdldCBvbmUuICovCi0JaWYgKCFpbl9sZW4pIHsKLQkJaW4gPSBpbl92cS0+dnFfb3BzLT5nZXRfYnVmKGluX3ZxLCAmaW5fbGVuKTsKLQkJaWYgKCFpbikKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIFlvdSB3YW50IG1vcmUgdGhhbiB3ZSBoYXZlIHRvIGdpdmU/ICBXZWxsLCB0cnkgd2FudGluZyBsZXNzISAqLwotCWlmIChpbl9sZW4gPCBjb3VudCkKLQkJY291bnQgPSBpbl9sZW47Ci0KLQkvKiBDb3B5IGFjcm9zcyB0byB0aGVpciBidWZmZXIgYW5kIGluY3JlbWVudCBvZmZzZXQuICovCi0JbWVtY3B5KGJ1ZiwgaW4sIGNvdW50KTsKLQlpbiArPSBjb3VudDsKLQlpbl9sZW4gLT0gY291bnQ7Ci0KLQkvKiBGaW5pc2hlZD8gIFJlLXJlZ2lzdGVyIGJ1ZmZlciBzbyBIb3N0IHdpbGwgdXNlIGl0IGFnYWluLiAqLwotCWlmIChpbl9sZW4gPT0gMCkKLQkJYWRkX2luYnVmKCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0vKjoqLwotCi0vKkQ6MzIwIENvbnNvbGUgZHJpdmVycyBhcmUgaW5pdGlhbGl6ZWQgdmVyeSBlYXJseSBzbyBib290IG1lc3NhZ2VzIGNhbiBnbyBvdXQsCi0gKiBzbyB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgZ2VuZXJpYyB2aXJ0aW8gaW5pdGlhbGl6YXRpb24KLSAqIG9mIHRoZSBuZXQgYW5kIGJsb2NrIGRyaXZlcnMuCi0gKgotICogQXQgdGhpcyBzdGFnZSwgdGhlIGNvbnNvbGUgaXMgb3V0cHV0LW9ubHkuICBJdCdzIHRvbyBlYXJseSB0byBzZXQgdXAgYQotICogdmlydHF1ZXVlLCBzbyB3ZSBsZXQgdGhlIGRyaXZlcnMgZG8gc29tZSBib3V0aXF1ZSBlYXJseS1vdXRwdXQgdGhpbmcuICovCi1pbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSkKLXsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JcmV0dXJuIGh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmdmlydGlvX2NvbnMpOworCXJldHVybiBmaWxsX3JlYWRidWYocG9ydCwgYnVmLCBjb3VudCwgZmFsc2UpOwogfQogCi0vKgotICogdmlydGlvIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gVGhpcyBzdXBwb3J0czoKLSAqIC0gY29uc29sZSByZXNpemUKLSAqLwotc3RhdGljIHZvaWQgdmlydGNvbnNfYXBwbHlfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByZXNpemVfY29uc29sZShzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3Qgd2luc2l6ZSB3czsKIAotCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fQ09OU09MRV9GX1NJWkUpKSB7Ci0JCWRldi0+Y29uZmlnLT5nZXQoZGV2LAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCBjb2xzKSwKLQkJCQkgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOwotCQlkZXYtPmNvbmZpZy0+Z2V0KGRldiwKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCi0JCQkJICZ3cy53c19yb3csIHNpemVvZih1MTYpKTsKLQkJaHZjX3Jlc2l6ZShodmMsIHdzKTsKKwl2ZGV2ID0gcG9ydC0+cG9ydGRldi0+dmRldjsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfU0laRSkpIHsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCQkgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIGNvbHMpLAorCQkJCSAgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCisJCQkJICAmd3Mud3Nfcm93LCBzaXplb2YodTE2KSk7CisJCWh2Y19yZXNpemUocG9ydC0+Y29ucy5odmMsIHdzKTsKIAl9CiB9CiAKLS8qCi0gKiB3ZSBzdXBwb3J0IG9ubHkgb25lIGNvbnNvbGUsIHRoZSBodmMgc3RydWN0IGlzIGEgZ2xvYmFsIHZhcgotICogV2Ugc2V0IHRoZSBjb25maWd1cmF0aW9uIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlIG5vdyBoYXZlIGEgdHR5Ci0gKi8KKy8qIFdlIHNldCB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGlzIHBvaW50LCBzaW5jZSB3ZSBub3cgaGF2ZSBhIHR0eSAqLwogc3RhdGljIGludCBub3RpZmllcl9hZGRfdmlvKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpCiB7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8oaHAtPnZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDE7Ci0JdmlydGNvbnNfYXBwbHlfY29uZmlnKHZkZXYpOworCXJlc2l6ZV9jb25zb2xlKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNzkgKzcxMyw3OTcgQEAKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh2Y19oYW5kbGVfaW5wdXQoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCisvKiBUaGUgb3BlcmF0aW9ucyBmb3IgY29uc29sZSBwb3J0cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2X29wcyA9IHsKKwkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCisJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF92aW8sCisJLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW8sCisJLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW8sCit9OworCisvKgorICogQ29uc29sZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IHNvIGJvb3QgbWVzc2FnZXMgY2FuIGdvCisgKiBvdXQsIHNvIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBnZW5lcmljIHZpcnRpbworICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldCBhbmQgYmxvY2sgZHJpdmVycy4KKyAqCisgKiBBdCB0aGlzIHN0YWdlLCB0aGUgY29uc29sZSBpcyBvdXRwdXQtb25seS4gIEl0J3MgdG9vIGVhcmx5IHRvIHNldAorICogdXAgYSB2aXJ0cXVldWUsIHNvIHdlIGxldCB0aGUgZHJpdmVycyBkbyBzb21lIGJvdXRpcXVlIGVhcmx5LW91dHB1dAorICogdGhpbmcuCisgKi8KK2ludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKQogewotCWlmIChodmNfcG9sbChodmMpKQorCWVhcmx5X3B1dF9jaGFycyA9IHB1dF9jaGFyczsKKwlyZXR1cm4gaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodl9vcHMpOworfQorCitpbnQgaW5pdF9wb3J0X2NvbnNvbGUoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIEhvc3QncyB0ZWxsaW5nIHVzIHRoaXMgcG9ydCBpcyBhIGNvbnNvbGUgcG9ydC4gIEhvb2sgaXQKKwkgKiB1cCB3aXRoIGFuIGh2YyBjb25zb2xlLgorCSAqCisJICogVG8gc2V0IHVwIGFuZCBtYW5hZ2Ugb3VyIHZpcnR1YWwgY29uc29sZSwgd2UgY2FsbAorCSAqIGh2Y19hbGxvYygpLgorCSAqCisJICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGh2Y19hbGxvYygpIGlzIHRoZSB2aXJ0dWFsIGNvbnNvbGUKKwkgKiBudW1iZXIuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZQorCSAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gKGxpa2UgaXJxIG51bWJlcikuICBXZSBjdXJyZW50bHkKKwkgKiBsZWF2ZSB0aGlzIGFzIHplcm8sIHZpcnRxdWV1ZXMgaGF2ZSBpbXBsaWNpdCBub3RpZmljYXRpb25zLgorCSAqCisJICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgInN0cnVjdCBodl9vcHMiIGNvbnRhaW5pbmcgdGhlCisJICogcHV0X2NoYXJzKCkgZ2V0X2NoYXJzKCksIG5vdGlmaWVyX2FkZCgpIGFuZCBub3RpZmllcl9kZWwoKQorCSAqIHBvaW50ZXJzLiAgVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlCisJICogY2FuIGRvIGFueSBzaXplLCBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuCisJICovCisJcG9ydC0+Y29ucy52dGVybW5vID0gcGRydmRhdGEubmV4dF92dGVybW5vOworCisJcG9ydC0+Y29ucy5odmMgPSBodmNfYWxsb2MocG9ydC0+Y29ucy52dGVybW5vLCAwLCAmaHZfb3BzLCBQQUdFX1NJWkUpOworCWlmIChJU19FUlIocG9ydC0+Y29ucy5odmMpKSB7CisJCXJldCA9IFBUUl9FUlIocG9ydC0+Y29ucy5odmMpOworCQlkZXZfZXJyKHBvcnQtPmRldiwKKwkJCSJlcnJvciAlZCBhbGxvY2F0aW5nIGh2YyBmb3IgcG9ydFxuIiwgcmV0KTsKKwkJcG9ydC0+Y29ucy5odmMgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwZHJ2ZGF0YS5uZXh0X3Z0ZXJtbm8rKzsKKwlsaXN0X2FkZF90YWlsKCZwb3J0LT5jb25zLmxpc3QsICZwZHJ2ZGF0YS5jb25zb2xlcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCisJLyogTm90aWZ5IGhvc3Qgb2YgcG9ydCBiZWluZyBvcGVuZWQgKi8KKwlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfcG9ydF9uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG9ydF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogcHV0IGluIGRldmljZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBwb3J0X3N5c2ZzX2VudHJpZXMsCit9OworCitzdGF0aWMgaW50IGRlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJldCwgb3V0X29mZnNldCwgb3V0X2NvdW50OworCisJb3V0X2NvdW50ID0gMTAyNDsKKwlidWYgPSBrbWFsbG9jKG91dF9jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlvdXRfb2Zmc2V0ID0gMDsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCwKKwkJCSAgICAgICAibmFtZTogJXNcbiIsIHBvcnQtPm5hbWUgPyBwb3J0LT5uYW1lIDogIiIpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiZ3Vlc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+Z3Vlc3RfY29ubmVjdGVkKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImhvc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+aG9zdF9jb25uZWN0ZWQpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiaXNfY29uc29sZTogJXNcbiIsCisJCQkgICAgICAgaXNfY29uc29sZV9wb3J0KHBvcnQpID8gInllcyIgOiAibm8iKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImNvbnNvbGVfdnRlcm1ubzogJXVcbiIsIHBvcnQtPmNvbnMudnRlcm1ubyk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgb2ZmcCwgYnVmLCBvdXRfb2Zmc2V0KTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZGVidWdmc19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gID0gZGVidWdmc19vcGVuLAorCS5yZWFkICA9IGRlYnVnZnNfcmVhZCwKK307CisKKy8qIFJlbW92ZSBhbGwgcG9ydC1zcGVjaWZpYyBkYXRhLiAqLworc3RhdGljIGludCByZW1vdmVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkgeworCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOworCX0KKwlpZiAocG9ydC0+Z3Vlc3RfY29ubmVjdGVkKQorCQlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMCk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvcnQtPmRldi0+a29iaiwgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwlkZXZpY2VfZGVzdHJveShwZHJ2ZGF0YS5jbGFzcywgcG9ydC0+ZGV2LT5kZXZ0KTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisKKwkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBSZW1vdmUgYnVmZmVycyB3ZSBxdWV1ZWQgdXAgZm9yIHRoZSBIb3N0IHRvIHNlbmQgdXMgZGF0YSBpbi4gKi8KKwl3aGlsZSAoKGJ1ZiA9IHBvcnQtPmluX3ZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnQtPmluX3ZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwlrZnJlZShwb3J0LT5uYW1lKTsKKworCWRlYnVnZnNfcmVtb3ZlKHBvcnQtPmRlYnVnZnNfZmlsZSk7CisKKwlrZnJlZShwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworLyogQW55IHByaXZhdGUgbWVzc2FnZXMgdGhhdCB0aGUgSG9zdCBhbmQgR3Vlc3Qgd2FudCB0byBzaGFyZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LAorCQkJCSAgIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sICpjcGt0OworCXN0cnVjdCBwb3J0ICpwb3J0OworCXNpemVfdCBuYW1lX3NpemU7CisJaW50IGVycjsKKworCWNwa3QgPSAoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgKikoYnVmLT5idWYgKyBidWYtPm9mZnNldCk7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIGNwa3QtPmlkKTsKKwlpZiAoIXBvcnQpIHsKKwkJLyogTm8gdmFsaWQgaGVhZGVyIGF0IHN0YXJ0IG9mIGJ1ZmZlci4gIERyb3AgaXQuICovCisJCWRldl9kYmcoJnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGluZGV4ICV1IGluIGNvbnRyb2wgcGFja2V0XG4iLCBjcGt0LT5pZCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNwa3QtPmV2ZW50KSB7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQ6CisJCWlmICghY3BrdC0+dmFsdWUpCisJCQlicmVhazsKKwkJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJCWJyZWFrOworCisJCWluaXRfcG9ydF9jb25zb2xlKHBvcnQpOworCQkvKgorCQkgKiBDb3VsZCByZW1vdmUgdGhlIHBvcnQgaGVyZSBpbiBjYXNlIGluaXQgZmFpbHMgLSBidXQKKwkJICogaGF2ZSB0byBub3RpZnkgdGhlIGhvc3QgZmlyc3QuCisJCSAqLworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1JFU0laRToKKwkJaWYgKCFpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCQlicmVhazsKKwkJcG9ydC0+Y29ucy5odmMtPmlycV9yZXF1ZXN0ZWQgPSAxOworCQlyZXNpemVfY29uc29sZShwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU46CisJCXBvcnQtPmhvc3RfY29ubmVjdGVkID0gY3BrdC0+dmFsdWU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d2FpdHF1ZXVlKTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUU6CisJCS8qCisJCSAqIFNraXAgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGNwa3QgdG8gZ2V0IHRoZSBzaXplCisJCSAqIG9mIHRoZSBuYW1lIHRoYXQgd2FzIHNlbnQKKwkJICovCisJCW5hbWVfc2l6ZSA9IGJ1Zi0+bGVuIC0gYnVmLT5vZmZzZXQgLSBzaXplb2YoKmNwa3QpICsgMTsKKworCQlwb3J0LT5uYW1lID0ga21hbGxvYyhuYW1lX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPm5hbWUpIHsKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJOb3QgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHBvcnQgbmFtZVxuIik7CisJCQlicmVhazsKKwkJfQorCQlzdHJuY3B5KHBvcnQtPm5hbWUsIGJ1Zi0+YnVmICsgYnVmLT5vZmZzZXQgKyBzaXplb2YoKmNwa3QpLAorCQkJbmFtZV9zaXplIC0gMSk7CisJCXBvcnQtPm5hbWVbbmFtZV9zaXplIC0gMV0gPSAwOworCisJCS8qCisJCSAqIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgc3lzZnMgYXR0cmlidXRlLCAnbmFtZScsCisJCSAqIGNyZWF0ZSBpdCBvbmx5IGlmIHdlIGhhdmUgYSBuYW1lIGZvciB0aGUgcG9ydC4KKwkJICovCisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LT5rb2JqLAorCQkJCQkgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJFcnJvciAlZCBjcmVhdGluZyBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIiwKKwkJCQllcnIpOworCisJCWJyZWFrOworCWNhc2UgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkU6CisJCS8qCisJCSAqIEhvdCB1bnBsdWcgdGhlIHBvcnQuICBXZSBkb24ndCBkZWNyZW1lbnQgbnJfcG9ydHMKKwkJICogc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZXh0cmEgY29tcGxleGl0aWVzCisJCSAqIG9mIHVzaW5nIHRoZSBsb3dlc3QtYXZhaWxhYmxlIHBvcnQgaWQ6IFdlIGNhbiBqdXN0CisJCSAqIHBpY2sgdXAgdGhlIG5yX3BvcnRzIG51bWJlciBhcyB0aGUgaWQgYW5kIG5vdCBoYXZlCisJCSAqIHVzZXJzcGFjZSBzZW5kIGl0IHRvIHVzLiAgVGhpcyBoZWxwcyB1cyBpbiB0d28KKwkJICogd2F5czoKKwkJICoKKwkJICogLSBXZSBkb24ndCBuZWVkIHRvIGhhdmUgYSAncG9ydF9pZCcgZmllbGQgaW4gdGhlCisJCSAqICAgY29uZmlnIHNwYWNlIHdoZW4gYSBwb3J0IGlzIGhvdC1hZGRlZC4gIFRoaXMgaXMgYQorCQkgKiAgIGdvb2QgdGhpbmcgYXMgd2UgbWlnaHQgcXVldWUgdXAgbXVsdGlwbGUgaG90cGx1ZworCQkgKiAgIHJlcXVlc3RzIGlzc3VlZCBpbiBvdXIgd29ya3F1ZXVlLgorCQkgKgorCQkgKiAtIEFub3RoZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0bworCQkgKiAgIHVzZSBhIGJpdG1hcCBvZiB0aGUgYWN0aXZlIHBvcnRzIGFuZCBzZWxlY3QgdGhlCisJCSAqICAgbG93ZXN0IG5vbi1hY3RpdmUgcG9ydCBmcm9tIHRoYXQgbWFwLiAgVGhhdAorCQkgKiAgIGJsb2F0cyB0aGUgYWxyZWFkeSB0aWdodCBjb25maWcgc3BhY2UgYW5kIHdlCisJCSAqICAgd291bGQgZW5kIHVwIGFydGlmaWNpYWxseSBsaW1pdGluZyB0aGUKKwkJICogICBtYXguIG51bWJlciBvZiBwb3J0cyB0byBzaXplb2YoYml0bWFwKS4gIFJpZ2h0CisJCSAqICAgbm93IHdlIGNhbiBzdXBwb3J0IDJeMzIgcG9ydHMgKGFzIHRoZSBwb3J0IGlkIGlzCisJCSAqICAgc3RvcmVkIGluIGEgdTMyIHR5cGUpLgorCQkgKgorCQkgKi8KKwkJcmVtb3ZlX3BvcnQocG9ydCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29udHJvbF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29udHJvbF93b3JrKTsKKwl2cSA9IHBvcnRkZXYtPmNfaXZxOworCisJc3Bpbl9sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CisJd2hpbGUgKChidWYgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKSkpIHsKKwkJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKworCQlidWYtPmxlbiA9IGxlbjsKKwkJYnVmLT5vZmZzZXQgPSAwOworCisJCWhhbmRsZV9jb250cm9sX21lc3NhZ2UocG9ydGRldiwgYnVmKTsKKworCQlzcGluX2xvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0ZGV2LT5jX2l2cSwgYnVmKSA8IDApIHsKKwkJCWRldl93YXJuKCZwb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkJICJFcnJvciBhZGRpbmcgYnVmZmVyIHRvIHF1ZXVlXG4iKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaW5faW50cihzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmluYnVmX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXBvcnQtPmluYnVmKQorCQlwb3J0LT5pbmJ1ZiA9IGdldF9pbmJ1Zihwb3J0KTsKKworCS8qCisJICogRG9uJ3QgcXVldWUgdXAgZGF0YSB3aGVuIHBvcnQgaXMgY2xvc2VkLiAgVGhpcyBjb25kaXRpb24KKwkgKiBjYW4gYmUgcmVhY2hlZCB3aGVuIGEgY29uc29sZSBwb3J0IGlzIG5vdCB5ZXQgY29ubmVjdGVkIChubworCSAqIHR0eSBpcyBzcGF3bmVkKSBhbmQgdGhlIGhvc3Qgc2VuZHMgb3V0IGRhdGEgdG8gY29uc29sZQorCSAqIHBvcnRzLiAgRm9yIGdlbmVyaWMgc2VyaWFsIHBvcnRzLCB0aGUgaG9zdCB3b24ndAorCSAqIChzaG91bGRuJ3QpIHNlbmQgZGF0YSB0aWxsIHRoZSBndWVzdCBpcyBjb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0LT5ndWVzdF9jb25uZWN0ZWQpCisJCWRpc2NhcmRfcG9ydF9kYXRhKHBvcnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSAmJiBodmNfcG9sbChwb3J0LT5jb25zLmh2YykpCiAJCWh2Y19raWNrKCk7CiB9CiAKLS8qRDozNzAgT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvIGRldmljZS4KLSAqIEF0IHRoaXMgc3RhZ2Ugd2Ugc2V0IHVwIHRoZSBvdXRwdXQgdmlydHF1ZXVlLgotICoKLSAqIFRvIHNldCB1cCBhbmQgbWFuYWdlIG91ciB2aXJ0dWFsIGNvbnNvbGUsIHdlIGNhbGwgaHZjX2FsbG9jKCkuICBTaW5jZSB3ZQotICogbmV2ZXIgcmVtb3ZlIHRoZSBjb25zb2xlIGRldmljZSB3ZSBuZXZlciBuZWVkIHRoaXMgcG9pbnRlciBhZ2Fpbi4KLSAqCi0gKiBGaW5hbGx5IHdlIHB1dCBvdXIgaW5wdXQgYnVmZmVyIGluIHRoZSBpbnB1dCBxdWV1ZSwgcmVhZHkgdG8gcmVjZWl2ZS4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjb250cm9sX2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGh2Y19oYW5kbGVfaW5wdXQsIE5VTEx9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbnB1dCIsICJvdXRwdXQiIH07Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisKKwlwb3J0ZGV2ID0gdnEtPnZkZXYtPnByaXY7CisJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29udHJvbF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2ludHIoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKworCXBvcnRkZXYgPSB2ZGV2LT5wcml2OworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCS8qIEhhbmRsZSBwb3J0IGhvdC1hZGQgKi8KKwkJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29uZmlnX3dvcmspOworCX0KKwkvKgorCSAqIFdlJ2xsIHVzZSB0aGlzIHdheSBvZiByZXNpemluZyBvbmx5IGZvciBsZWdhY3kgc3VwcG9ydC4KKwkgKiBGb3IgbmV3ZXIgdXNlcnNwYWNlIChWSVJUSU9fQ09OU09MRV9GX01VTFRQT1JUKyksIHVzZQorCSAqIGNvbnRyb2wgbWVzc2FnZXMgdG8gaW5kaWNhdGUgY29uc29sZSBzaXplIGNoYW5nZXMgc28gdGhhdAorCSAqIGl0IGNhbiBiZSBkb25lIHBlci1wb3J0CisJICovCisJcmVzaXplX2NvbnNvbGUoZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWxsX3F1ZXVlKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCByZXQ7CiAJaW50IGVycjsKIAotCXZkZXYgPSBkZXY7CisJcmV0ID0gMDsKKwlkbyB7CisJCWJ1ZiA9IGFsbG9jX2J1ZihQQUdFX1NJWkUpOworCQlpZiAoIWJ1ZikKKwkJCWJyZWFrOwogCi0JLyogVGhpcyBpcyB0aGUgc2NyYXRjaCBwYWdlIHdlIHVzZSB0byByZWNlaXZlIGNvbnNvbGUgaW5wdXQgKi8KLQlpbmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluYnVmKSB7CisJCXNwaW5fbG9ja19pcnEobG9jayk7CisJCWVyciA9IGFkZF9pbmJ1Zih2cSwgYnVmKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCQlyZXQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworCX0gd2hpbGUgKGVyciA+IDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCit7CisJY2hhciBkZWJ1Z2ZzX25hbWVbMTZdOworCXN0cnVjdCBwb3J0ICpwb3J0OworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCWRldl90IGRldnQ7CisJaW50IGVycjsKKworCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghcG9ydCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JLyogRmluZCB0aGUgcXVldWVzLiAqLwotCS8qIEZJWE1FOiBUaGlzIGlzIHdoeSB3ZSB3YW50IHRvIHdlYW4gb2ZmIGh2Yzogd2UgZG8gbm90aGluZwotCSAqIHdoZW4gaW5wdXQgY29tZXMgaW4uICovCi0JZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCAyLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKKwlwb3J0LT5wb3J0ZGV2ID0gcG9ydGRldjsKKwlwb3J0LT5pZCA9IGlkOwogCi0JaW5fdnEgPSB2cXNbMF07Ci0Jb3V0X3ZxID0gdnFzWzFdOworCXBvcnQtPm5hbWUgPSBOVUxMOworCXBvcnQtPmluYnVmID0gTlVMTDsKKwlwb3J0LT5jb25zLmh2YyA9IE5VTEw7CiAKLQkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLwotCXZpcnRpb19jb25zLmdldF9jaGFycyA9IGdldF9jaGFyczsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JdmlydGlvX2NvbnMubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX3ZpbzsKLQl2aXJ0aW9fY29ucy5ub3RpZmllcl9kZWwgPSBub3RpZmllcl9kZWxfdmlvOwotCXZpcnRpb19jb25zLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW87CisJcG9ydC0+aG9zdF9jb25uZWN0ZWQgPSBwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSBmYWxzZTsKIAotCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBodmNfYWxsb2MoKSBpcyB0aGUgdmlydHVhbCBjb25zb2xlIG51bWJlciwgc28KLQkgKiB3ZSB1c2UgemVyby4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCi0JICogbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAobGlrZSBpcnEgbnVtYmVyKS4gV2UgY3VycmVudGx5IGxlYXZlIHRoaXMKLQkgKiBhcyB6ZXJvLCB2aXJ0cXVldWVzIGhhdmUgaW1wbGljaXQgbm90aWZpY2F0aW9ucy4KLQkgKgotCSAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhICJzdHJ1Y3QgaHZfb3BzIiBjb250YWluaW5nIHRoZSBwdXRfY2hhcnMoKQotCSAqIGdldF9jaGFycygpLCBub3RpZmllcl9hZGQoKSBhbmQgbm90aWZpZXJfZGVsKCkgcG9pbnRlcnMuCi0JICogVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlIGNhbiBkbyBhbnkgc2l6ZSwKLQkgKiBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuICovCi0JaHZjID0gaHZjX2FsbG9jKDAsIDAsICZ2aXJ0aW9fY29ucywgUEFHRV9TSVpFKTsKLQlpZiAoSVNfRVJSKGh2YykpIHsKLQkJZXJyID0gUFRSX0VSUihodmMpOwotCQlnb3RvIGZyZWVfdnFzOworCXBvcnQtPmluX3ZxID0gcG9ydGRldi0+aW5fdnFzW3BvcnQtPmlkXTsKKwlwb3J0LT5vdXRfdnEgPSBwb3J0ZGV2LT5vdXRfdnFzW3BvcnQtPmlkXTsKKworCWNkZXZfaW5pdCgmcG9ydC0+Y2RldiwgJnBvcnRfZm9wcyk7CisKKwlkZXZ0ID0gTUtERVYocG9ydGRldi0+Y2hyX21ham9yLCBpZCk7CisJZXJyID0gY2Rldl9hZGQoJnBvcnQtPmNkZXYsIGRldnQsIDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCBhZGRpbmcgY2RldiBmb3IgcG9ydCAldVxuIiwgZXJyLCBpZCk7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBkcnZkYXRhLmNsYXNzLCAmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJCSAgZGV2dCwgcG9ydCwgInZwb3J0JXVwJXUiLAorCQkJCSAgcG9ydC0+cG9ydGRldi0+ZHJ2X2luZGV4LCBpZCk7CisJaWYgKElTX0VSUihwb3J0LT5kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocG9ydC0+ZGV2KTsKKwkJZGV2X2VycigmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkVycm9yICVkIGNyZWF0aW5nIGRldmljZSBmb3IgcG9ydCAldVxuIiwKKwkJCWVyciwgaWQpOworCQlnb3RvIGZyZWVfY2RldjsKIAl9CiAKLQkvKiBSZWdpc3RlciB0aGUgaW5wdXQgYnVmZmVyIHRoZSBmaXJzdCB0aW1lLiAqLwotCWFkZF9pbmJ1ZigpOworCXNwaW5fbG9ja19pbml0KCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOworCisJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCisJZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOworCWlmICghZXJyKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBpbmJ1ZnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKworCS8qCisJICogSWYgd2UncmUgbm90IHVzaW5nIG11bHRpcG9ydCBzdXBwb3J0LCB0aGlzIGhhcyB0byBiZSBhIGNvbnNvbGUgcG9ydAorCSAqLworCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkgeworCQllcnIgPSBpbml0X3BvcnRfY29uc29sZShwb3J0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9pbmJ1ZnM7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmcG9ydGRldi0+cG9ydHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bGlzdCwgJnBvcnQtPnBvcnRkZXYtPnBvcnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJLyoKKwkgKiBUZWxsIHRoZSBIb3N0IHdlJ3JlIHNldCBzbyB0aGF0IGl0IGNhbiBzZW5kIHVzIHZhcmlvdXMKKwkgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydCAoZWcsIHBvcnQgbmFtZSwKKwkgKiBjYWNoaW5nLCB3aGV0aGVyIHRoaXMgaXMgYSBjb25zb2xlIHBvcnQsIGV0Yy4pCisJICovCisJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKworCWlmIChwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQkvKgorCQkgKiBGaW5hbGx5LCBjcmVhdGUgdGhlIGRlYnVnZnMgZmlsZSB0aGF0IHdlIGNhbiB1c2UgdG8KKwkJICogaW5zcGVjdCBhIHBvcnQncyBzdGF0ZSBhdCBhbnkgdGltZQorCQkgKi8KKwkJc3ByaW50ZihkZWJ1Z2ZzX25hbWUsICJ2cG9ydCV1cCV1IiwKKwkJCXBvcnQtPnBvcnRkZXYtPmRydl9pbmRleCwgaWQpOworCQlwb3J0LT5kZWJ1Z2ZzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRlYnVnZnNfbmFtZSwgMDQ0NCwKKwkJCQkJCQkgcGRydmRhdGEuZGVidWdmc19kaXIsCisJCQkJCQkJIHBvcnQsCisJCQkJCQkJICZwb3J0X2RlYnVnZnNfb3BzKTsKKwl9CisJcmV0dXJuIDA7CisKK2ZyZWVfaW5idWZzOgorCXdoaWxlICgoYnVmID0gcG9ydC0+aW5fdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydC0+aW5fdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKK2ZyZWVfZGV2aWNlOgorCWRldmljZV9kZXN0cm95KHBkcnZkYXRhLmNsYXNzLCBwb3J0LT5kZXYtPmRldnQpOworZnJlZV9jZGV2OgorCWNkZXZfZGVsKCZwb3J0LT5jZGV2KTsKK2ZyZWVfcG9ydDoKKwlrZnJlZShwb3J0KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSB3b3JraGFuZGxlciBmb3IgY29uZmlnLXNwYWNlIHVwZGF0ZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiBwb3J0cyBhcmUgaG90LWFkZGVkLgorICovCitzdGF0aWMgdm9pZCBjb25maWdfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHZpcnRjb25jb25mOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7CisJaW50IGVycjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29uZmlnX3dvcmspOworCisJdmRldiA9IHBvcnRkZXYtPnZkZXY7CisJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgbnJfcG9ydHMpLAorCQkJICAmdmlydGNvbmNvbmYubnJfcG9ydHMsCisJCQkgIHNpemVvZih2aXJ0Y29uY29uZi5ucl9wb3J0cykpOworCisJaWYgKHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyA9PSB2aXJ0Y29uY29uZi5ucl9wb3J0cykgeworCQkvKgorCQkgKiBQb3J0IDAgZ290IGhvdC1hZGRlZC4gIFNpbmNlIHdlIGFscmVhZHkgZGlkIGFsbCB0aGUKKwkJICogb3RoZXIgaW5pdGlhbGlzYXRpb24gZm9yIGl0LCBqdXN0IHRlbGwgdGhlIEhvc3QKKwkJICogdGhhdCB0aGUgcG9ydCBpcyByZWFkeSBpZiB3ZSBmaW5kIHRoZSBwb3J0LiAgSW4KKwkJICogY2FzZSB0aGUgcG9ydCB3YXMgaG90LXJlbW92ZWQgZWFybGllciwgd2UgY2FsbAorCQkgKiBhZGRfcG9ydCB0byBhZGQgdGhlIHBvcnQuCisJCSAqLworCQlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCQlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApOworCQlpZiAoIXBvcnQpCisJCQlhZGRfcG9ydChwb3J0ZGV2LCAwKTsKKwkJZWxzZQorCQkJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodmlydGNvbmNvbmYubnJfcG9ydHMgPiBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSB7CisJCWRldl93YXJuKCZ2ZGV2LT5kZXYsCisJCQkgIk1vcmUgcG9ydHMgc3BlY2lmaWVkICgldSkgdGhhbiBhbGxvd2VkICgldSkiLAorCQkJIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyArIDEsCisJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHZpcnRjb25jb25mLm5yX3BvcnRzIDwgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKQorCQlyZXR1cm47CisKKwkvKiBIb3QtYWRkIHBvcnRzICovCisJd2hpbGUgKHZpcnRjb25jb25mLm5yX3BvcnRzIC0gcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKSB7CisJCWVyciA9IGFkZF9wb3J0KHBvcnRkZXYsIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKys7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfdnFzKHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYpCit7CisJdnFfY2FsbGJhY2tfdCAqKmlvX2NhbGxiYWNrczsKKwljaGFyICoqaW9fbmFtZXM7CisJc3RydWN0IHZpcnRxdWV1ZSAqKnZxczsKKwl1MzIgaSwgaiwgbnJfcG9ydHMsIG5yX3F1ZXVlczsKKwlpbnQgZXJyOworCisJbnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCW5yX3F1ZXVlcyA9IHVzZV9tdWx0aXBvcnQocG9ydGRldikgPyAobnJfcG9ydHMgKyAxKSAqIDIgOiAyOworCisJdnFzID0ga21hbGxvYyhucl9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IHZpcnRxdWV1ZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpb19jYWxsYmFja3MgPSBrbWFsbG9jKG5yX3F1ZXVlcyAqIHNpemVvZih2cV9jYWxsYmFja190ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvX2NhbGxiYWNrcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdnFzOworCX0KKwlpb19uYW1lcyA9IGttYWxsb2MobnJfcXVldWVzICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICghaW9fbmFtZXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2NhbGxiYWNrczsKKwl9CisJcG9ydGRldi0+aW5fdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2LT5pbl92cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25hbWVzOworCX0KKwlwb3J0ZGV2LT5vdXRfdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldi0+b3V0X3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaW52cXM7CisJfQorCisJLyoKKwkgKiBGb3IgYmFja3dhcmQgY29tcGF0IChuZXdlciBob3N0IGJ1dCBvbGRlciBndWVzdCksIHRoZSBob3N0CisJICogc3Bhd25zIGEgY29uc29sZSBwb3J0IGZpcnN0IGFuZCBhbHNvIGluaXRzIHRoZSB2cXMgZm9yIHBvcnQKKwkgKiAwIGJlZm9yZSBvdGhlcnMuCisJICovCisJaiA9IDA7CisJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKKwlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CisJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CisJaiArPSAyOworCisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJaW9fY2FsbGJhY2tzW2pdID0gY29udHJvbF9pbnRyOworCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJaW9fbmFtZXNbal0gPSAiY29udHJvbC1pIjsKKwkJaW9fbmFtZXNbaiArIDFdID0gImNvbnRyb2wtbyI7CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7CisJCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKKwkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOworCQl9CisJfQorCS8qIEZpbmQgdGhlIHF1ZXVlcy4gKi8KKwllcnIgPSBwb3J0ZGV2LT52ZGV2LT5jb25maWctPmZpbmRfdnFzKHBvcnRkZXYtPnZkZXYsIG5yX3F1ZXVlcywgdnFzLAorCQkJCQkgICAgICBpb19jYWxsYmFja3MsCisJCQkJCSAgICAgIChjb25zdCBjaGFyICoqKWlvX25hbWVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfb3V0dnFzOworCisJaiA9IDA7CisJcG9ydGRldi0+aW5fdnFzWzBdID0gdnFzWzBdOworCXBvcnRkZXYtPm91dF92cXNbMF0gPSB2cXNbMV07CisJaiArPSAyOworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCXBvcnRkZXYtPmNfaXZxID0gdnFzW2pdOworCQlwb3J0ZGV2LT5jX292cSA9IHZxc1tqICsgMV07CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCXBvcnRkZXYtPmluX3Zxc1tpXSA9IHZxc1tqXTsKKwkJCXBvcnRkZXYtPm91dF92cXNbaV0gPSB2cXNbaiArIDFdOworCQl9CisJfQorCWtmcmVlKGlvX2NhbGxiYWNrcyk7CisJa2ZyZWUoaW9fbmFtZXMpOworCWtmcmVlKHZxcyk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9uYW1lczoKKwlrZnJlZShpb19uYW1lcyk7CitmcmVlX2NhbGxiYWNrczoKKwlrZnJlZShpb19jYWxsYmFja3MpOworZnJlZV9vdXR2cXM6CisJa2ZyZWUocG9ydGRldi0+b3V0X3Zxcyk7CitmcmVlX2ludnFzOgorCWtmcmVlKHBvcnRkZXYtPmluX3Zxcyk7CitmcmVlX3ZxczoKKwlrZnJlZSh2cXMpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0ZGV2X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvCisgKiBkZXZpY2UuCisgKgorICogSWYgdGhlIGhvc3QgYWxzbyBzdXBwb3J0cyBtdWx0aXBsZSBjb25zb2xlIHBvcnRzLCB3ZSBjaGVjayB0aGUKKyAqIGNvbmZpZyBzcGFjZSB0byBzZWUgaG93IG1hbnkgcG9ydHMgdGhlIGhvc3QgaGFzIHNwYXduZWQuICBXZQorICogaW5pdGlhbGl6ZSBlYWNoIHBvcnQgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJdTMyIGk7CisJaW50IGVycjsKKwlib29sIG11bHRpcG9ydDsKKworCXBvcnRkZXYgPSBrbWFsbG9jKHNpemVvZigqcG9ydGRldiksIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogQXR0YWNoIHRoaXMgcG9ydGRldiB0byB0aGlzIHZpcnRpb19kZXZpY2UsIGFuZCB2aWNlLXZlcnNhLiAqLworCXBvcnRkZXYtPnZkZXYgPSB2ZGV2OworCXZkZXYtPnByaXYgPSBwb3J0ZGV2OworCisJc3Bpbl9sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJcG9ydGRldi0+ZHJ2X2luZGV4ID0gcGRydmRhdGEuaW5kZXgrKzsKKwlzcGluX3VubG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCisJcG9ydGRldi0+Y2hyX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJ2aXJ0aW8tcG9ydHNkZXYiLAorCQkJCQkgICAgICZwb3J0ZGV2X2ZvcHMpOworCWlmIChwb3J0ZGV2LT5jaHJfbWFqb3IgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCByZWdpc3RlcmluZyBjaHJkZXYgZm9yIGRldmljZSAldVxuIiwKKwkJCXBvcnRkZXYtPmNocl9tYWpvciwgcG9ydGRldi0+ZHJ2X2luZGV4KTsKKwkJZXJyID0gcG9ydGRldi0+Y2hyX21ham9yOworCQlnb3RvIGZyZWU7CisJfQorCisJbXVsdGlwb3J0ID0gZmFsc2U7CisJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID0gMTsKKwlwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzID0gMTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUKSkgeworCQltdWx0aXBvcnQgPSB0cnVlOworCQl2ZGV2LT5mZWF0dXJlc1swXSB8PSAxIDw8IFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUOworCisJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsCisJCQkJCQkgbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cywKKwkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpKTsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKKwkJCQkJCSBtYXhfbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJICBzaXplb2YocG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykpOworCQlpZiAocG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID4gcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykgeworCQkJZGV2X3dhcm4oJnZkZXYtPmRldiwKKwkJCQkgIk1vcmUgcG9ydHMgKCV1KSBzcGVjaWZpZWQgdGhhbiBhbGxvd2VkICgldSkuIFdpbGwgaW5pdCAldSBwb3J0cy4iLAorCQkJCSBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMpOworCisJCQlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCQl9CisJfQorCisJLyogTGV0IHRoZSBIb3N0IGtub3cgd2Ugc3VwcG9ydCBtdWx0aXBsZSBwb3J0cy4qLworCXZkZXYtPmNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXModmRldik7CisKKwllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJFcnJvciAlZCBpbml0aWFsaXppbmcgdnFzXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfY2hyZGV2OworCX0KKworCXNwaW5fbG9ja19pbml0KCZwb3J0ZGV2LT5wb3J0c19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydGRldi0+cG9ydHMpOworCisJaWYgKG11bHRpcG9ydCkgeworCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRldi0+Y3ZxX2xvY2spOworCQlJTklUX1dPUksoJnBvcnRkZXYtPmNvbnRyb2xfd29yaywgJmNvbnRyb2xfd29ya19oYW5kbGVyKTsKKwkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb25maWdfd29yaywgJmNvbmZpZ193b3JrX2hhbmRsZXIpOworCisJCWVyciA9IGZpbGxfcXVldWUocG9ydGRldi0+Y19pdnEsICZwb3J0ZGV2LT5jdnFfbG9jayk7CisJCWlmICghZXJyKSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCisJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3ZxczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHM7IGkrKykKKwkJYWRkX3BvcnQocG9ydGRldiwgaSk7CisKKwkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLworCWVhcmx5X3B1dF9jaGFycyA9IE5VTEw7CiAJcmV0dXJuIDA7CiAKIGZyZWVfdnFzOgogCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKKwlrZnJlZShwb3J0ZGV2LT5pbl92cXMpOworCWtmcmVlKHBvcnRkZXYtPm91dF92cXMpOworZnJlZV9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXYocG9ydGRldi0+Y2hyX21ham9yLCAidmlydGlvLXBvcnRzZGV2Iik7CiBmcmVlOgotCWtmcmVlKGluYnVmKTsKKwlrZnJlZShwb3J0ZGV2KTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdmlydGNvbnNfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHBvcnQgKnBvcnQsICpwb3J0MjsKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJcG9ydGRldiA9IHZkZXYtPnByaXY7CisKKwljYW5jZWxfd29ya19zeW5jKCZwb3J0ZGV2LT5jb250cm9sX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnBvcnRkZXYtPmNvbmZpZ193b3JrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwb3J0MiwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlyZW1vdmVfcG9ydChwb3J0KTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KHBvcnRkZXYtPmNocl9tYWpvciwgInZpcnRpby1wb3J0c2RldiIpOworCisJd2hpbGUgKChidWYgPSBwb3J0ZGV2LT5jX2l2cS0+dnFfb3BzLT5nZXRfYnVmKHBvcnRkZXYtPmNfaXZxLCAmbGVuKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl3aGlsZSAoKGJ1ZiA9IHBvcnRkZXYtPmNfaXZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnRkZXYtPmNfaXZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisJa2ZyZWUocG9ydGRldi0+aW5fdnFzKTsKKwlrZnJlZShwb3J0ZGV2LT5vdXRfdnFzKTsKKworCWtmcmVlKHBvcnRkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFZJUlRJT19JRF9DT05TT0xFLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApAQCAtMjUzLDYgKzE1MTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0NPTlNPTEVfRl9TSVpFLAorCVZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAogfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19jb25zb2xlID0gewpAQCAtMjYyLDE0ICsxNTIxLDQxIEBACiAJLmRyaXZlci5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXZpcnRjb25zX3Byb2JlLAotCS5jb25maWdfY2hhbmdlZCA9IHZpcnRjb25zX2FwcGx5X2NvbmZpZywKKwkucmVtb3ZlID0JdmlydGNvbnNfcmVtb3ZlLAorCS5jb25maWdfY2hhbmdlZCA9IGNvbmZpZ19pbnRyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKKwlwZHJ2ZGF0YS5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZpcnRpby1wb3J0cyIpOworCWlmIChJU19FUlIocGRydmRhdGEuY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIocGRydmRhdGEuY2xhc3MpOworCQlwcl9lcnIoIkVycm9yICVkIGNyZWF0aW5nIHZpcnRpby1wb3J0cyBjbGFzc1xuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidmlydGlvLXBvcnRzIiwgTlVMTCk7CisJaWYgKCFwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQlwcl93YXJuaW5nKCJFcnJvciAlbGQgY3JlYXRpbmcgZGVidWdmcyBkaXIgZm9yIHZpcnRpby1wb3J0c1xuIiwKKwkJCSAgIFBUUl9FUlIocGRydmRhdGEuZGVidWdmc19kaXIpKTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnBkcnZkYXRhLmNvbnNvbGVzKTsKKwogCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CisKKwljbGFzc19kZXN0cm95KHBkcnZkYXRhLmNsYXNzKTsKKwlpZiAocGRydmRhdGEuZGVidWdmc19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZHJ2ZGF0YS5kZWJ1Z2ZzX2Rpcik7Cit9CiBtb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gY29uc29sZSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IDk5NGUxYTUuLjhiMjQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKiB2bWVfc2NjX2luaXQoKSBhbmQgc3VwcG9ydCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8qIHBvcnRzW10gYXJyYXkgaXMgaW5kZXhlZCBieSBsaW5lIG5vIChpLmUuIFswXSBmb3IgdHR5UzAsIFsxXSBmb3IgdHR5UzEpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19pbml0X3BvcnRzdHJ1Y3RzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc2NjX2luaXRfcG9ydHN0cnVjdHModm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX01WTUUxNDdfU0NDCi1zdGF0aWMgaW50IG12bWUxNDdfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG12bWUxNDdfc2NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGVycm9yOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19NVk1FMTYyX1NDQwotc3RhdGljIGludCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0OwogCWludCBlcnJvcjsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfQlZNRTYwMDBfU0NDCi1zdGF0aWMgaW50IGJ2bWU2MDAwX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgZXJyb3I7CkBAIC01MDMsNyArNTAzLDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBpbnQgdm1lX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2bWVfc2NjX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCA2YWExMDI4Li44Nzc3OGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtODg4LDcgKzg4OCw3IEBACiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKHRtcC5tb2RlICE9IFZUX0FVVE8gJiYgdG1wLm1vZGUgIT0gVlRfUFJPQ0VTUykgeworCQlpZiAodG1wLm1vZGUgIT0gVlRfQVVUTyAmJiB0bXAubW9kZSAhPSBWVF9QUk9DRVNTICYmIHRtcC5tb2RlICE9IFZUX1BST0NFU1NfQVVUTykgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogCSAqIHRlbGxpbmcgaXQgdGhhdCBpdCBoYXMgYWNxdWlyZWQuIEFsc28gY2hlY2sgaWYgaXQgaGFzIGRpZWQgYW5kCiAJICogY2xlYW4gdXAgKHNpbWlsYXIgdG8gbG9naWMgZW1wbG95ZWQgaW4gY2hhbmdlX2NvbnNvbGUoKSkKIAkgKi8KLQlpZiAodmMtPnZ0X21vZGUubW9kZSA9PSBWVF9QUk9DRVNTKSB7CisJaWYgKHZjLT52dF9tb2RlLm1vZGUgPT0gVlRfUFJPQ0VTUyB8fCB2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1NfQVVUTykgewogCQkvKgogCQkgKiBTZW5kIHRoZSBzaWduYWwgYXMgcHJpdmlsZWdlZCAtIGtpbGxfcGlkKCkgd2lsbAogCQkgKiB0ZWxsIHVzIGlmIHRoZSBwcm9jZXNzIGhhcyBnb25lIG9yIHNvbWV0aGluZyBlbHNlCkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCSAqIHZ0IHRvIGF1dG8gY29udHJvbC4KIAkgKi8KIAl2YyA9IHZjX2NvbnNbZmdfY29uc29sZV0uZDsKLQlpZiAodmMtPnZ0X21vZGUubW9kZSA9PSBWVF9QUk9DRVNTKSB7CisJaWYgKHZjLT52dF9tb2RlLm1vZGUgPT0gVlRfUFJPQ0VTUyB8fCB2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1NfQVVUTykgewogCQkvKgogCQkgKiBTZW5kIHRoZSBzaWduYWwgYXMgcHJpdmlsZWdlZCAtIGtpbGxfcGlkKCkgd2lsbAogCQkgKiB0ZWxsIHVzIGlmIHRoZSBwcm9jZXNzIGhhcyBnb25lIG9yIHNvbWV0aGluZyBlbHNlCkBAIC0xNjkzLDI3ICsxNjkzLDI4IEBACiAJCSAqLwogCQl2Yy0+dnRfbmV3dnQgPSBuZXdfdmMtPnZjX251bTsKIAkJaWYgKGtpbGxfcGlkKHZjLT52dF9waWQsIHZjLT52dF9tb2RlLnJlbHNpZywgMSkgPT0gMCkgeworCQkJaWYodmMtPnZ0X21vZGUubW9kZSA9PSBWVF9QUk9DRVNTKQorCQkJCS8qCisJCQkJICogSXQgd29ya2VkLiBNYXJrIHRoZSB2dCB0byBzd2l0Y2ggdG8gYW5kCisJCQkJICogcmV0dXJuLiBUaGUgcHJvY2VzcyBuZWVkcyB0byBzZW5kIHVzIGEKKwkJCQkgKiBWVF9SRUxESVNQIGlvY3RsIHRvIGNvbXBsZXRlIHRoZSBzd2l0Y2guCisJCQkJICovCisJCQkJcmV0dXJuOworCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIEl0IHdvcmtlZC4gTWFyayB0aGUgdnQgdG8gc3dpdGNoIHRvIGFuZAotCQkJICogcmV0dXJuLiBUaGUgcHJvY2VzcyBuZWVkcyB0byBzZW5kIHVzIGEKLQkJCSAqIFZUX1JFTERJU1AgaW9jdGwgdG8gY29tcGxldGUgdGhlIHN3aXRjaC4KKwkJCSAqIFRoZSBjb250cm9sbGluZyBwcm9jZXNzIGhhcyBkaWVkLCBzbyB3ZSByZXZlcnQgYmFjayB0bworCQkJICogbm9ybWFsIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB3ZSdsbCBhbHNvIGNoYW5nZSBiYWNrCisJCQkgKiB0byBLRF9URVhUIG1vZGUuIEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IGNvcnJlY3QKKwkJCSAqIGJ1dCBpdCBzYXZlcyB0aGUgYWdvbnkgd2hlbiB0aGUgWCBzZXJ2ZXIgZGllcyBhbmQgdGhlIHNjcmVlbgorCQkJICogcmVtYWlucyBibGFua2VkIGR1ZSB0byBLRF9HUkFQSElDUyEgSXQgd291bGQgYmUgbmljZSB0byBkbworCQkJICogdGhpcyBvdXRzaWRlIG9mIFZUX1BST0NFU1MgYnV0IHRoZXJlIGlzIG5vIHNpbmdsZSBwcm9jZXNzCisJCQkgKiB0byBhY2NvdW50IGZvciBhbmQgdHJhY2tpbmcgdHR5IGNvdW50IG1heSBiZSB1bmRlc2lyYWJsZS4KIAkJCSAqLwotCQkJcmV0dXJuOworCQkJcmVzZXRfdmModmMpOwogCQl9CiAKIAkJLyoKLQkJICogVGhlIGNvbnRyb2xsaW5nIHByb2Nlc3MgaGFzIGRpZWQsIHNvIHdlIHJldmVydCBiYWNrIHRvCi0JCSAqIG5vcm1hbCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgd2UnbGwgYWxzbyBjaGFuZ2UgYmFjawotCQkgKiB0byBLRF9URVhUIG1vZGUuIEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IGNvcnJlY3QKLQkJICogYnV0IGl0IHNhdmVzIHRoZSBhZ29ueSB3aGVuIHRoZSBYIHNlcnZlciBkaWVzIGFuZCB0aGUgc2NyZWVuCi0JCSAqIHJlbWFpbnMgYmxhbmtlZCBkdWUgdG8gS0RfR1JBUEhJQ1MhIEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8KLQkJICogdGhpcyBvdXRzaWRlIG9mIFZUX1BST0NFU1MgYnV0IHRoZXJlIGlzIG5vIHNpbmdsZSBwcm9jZXNzCi0JCSAqIHRvIGFjY291bnQgZm9yIGFuZCB0cmFja2luZyB0dHkgY291bnQgbWF5IGJlIHVuZGVzaXJhYmxlLgotCQkgKi8KLQkJcmVzZXRfdmModmMpOwotCi0JCS8qCi0JCSAqIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgKFZUX0FVVE8pIGhhbmRsaW5nIG9mIHRoZSBzd2l0Y2guLi4KKwkJICogRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCAoVlRfQVVUTyBhbmQgVlRfUFJPQ0VTU19BVVRPKSBoYW5kbGluZyBvZiB0aGUgc3dpdGNoLi4uCiAJCSAqLwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKaW5kZXggNmIzZTBjMi4uNTc4NTk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCkBAIC00MCw3ICs0MCw2IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19zdXNwZW5kOwogCXVuc2lnbmVkIGxvbmcgbWF0Y2hfdmFsdWU7CiAJdW5zaWduZWQgbG9uZyBuZXh0X21hdGNoX3ZhbHVlOwogCXVuc2lnbmVkIGxvbmcgbWF4X21hdGNoX3ZhbHVlOwpAQCAtNDMyLDYgKzQzMSwxMSBAQAogCXNoX2NtdF9zdG9wKGNzX3RvX3NoX2NtdChjcyksIEZMQUdfQ0xPQ0tTT1VSQ0UpOwogfQogCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJc2hfY210X3N0YXJ0KGNzX3RvX3NoX2NtdChjcyksIEZMQUdfQ0xPQ0tTT1VSQ0UpOworfQorCiBzdGF0aWMgaW50IHNoX2NtdF9yZWdpc3Rlcl9jbG9ja3NvdXJjZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCiAJCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQogewpAQCAtNDQyLDYgKzQ0Niw4IEBACiAJY3MtPnJlYWQgPSBzaF9jbXRfY2xvY2tzb3VyY2VfcmVhZDsKIAljcy0+ZW5hYmxlID0gc2hfY210X2Nsb2Nrc291cmNlX2VuYWJsZTsKIAljcy0+ZGlzYWJsZSA9IHNoX2NtdF9jbG9ja3NvdXJjZV9kaXNhYmxlOworCWNzLT5zdXNwZW5kID0gc2hfY210X2Nsb2Nrc291cmNlX2Rpc2FibGU7CisJY3MtPnJlc3VtZSA9IHNoX2NtdF9jbG9ja3NvdXJjZV9yZXN1bWU7CiAJY3MtPm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpOwogCWNzLT5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOwogCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBhcyBjbG9jayBzb3VyY2VcbiIsIGNzLT5uYW1lKTsKQEAgLTYwMywxOCArNjA5LDEzIEBACiAJcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF9jbXRfaW50ZXJydXB0OwogCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOwogCXAtPmlycWFjdGlvbi5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMOwotCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKLQkJZ290byBlcnIxOwotCX0KIAogCS8qIGdldCBob2xkIG9mIGNsb2NrICovCiAJcC0+Y2xrID0gY2xrX2dldCgmcC0+cGRldi0+ZGV2LCBjZmctPmNsayk7CiAJaWYgKElTX0VSUihwLT5jbGspKSB7CiAJCXByX2Vycigic2hfY210OiBjYW5ub3QgZ2V0IGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOwogCQlyZXQgPSBQVFJfRVJSKHAtPmNsayk7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIxOwogCX0KIAogCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPT0gNikgewpAQCAtNjI3LDE0ICs2MjgsMjUgQEAKIAkJcC0+Y2xlYXJfYml0cyA9IH4weGMwMDA7CiAJfQogCi0JcmV0dXJuIHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCi0JCQkgICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKLQkJCSAgICAgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyk7Ci0gZXJyMjoKLQlyZW1vdmVfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7Ci0gZXJyMToKKwlyZXQgPSBzaF9jbXRfcmVnaXN0ZXIocCwgY2ZnLT5uYW1lLAorCQkJICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKKwkJCSAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnIxOworCX0KKworCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKKwkJZ290byBlcnIxOworCX0KKworCXJldHVybiAwOworCitlcnIxOgogCWlvdW5tYXAocC0+bWFwYmFzZSk7Ci0gZXJyMDoKK2VycjA6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY4LDM4ICs2ODAsMTEgQEAKIAlyZXR1cm4gLUVCVVNZOyAvKiBjYW5ub3QgdW5yZWdpc3RlciBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZSAqLwogfQogCi1zdGF0aWMgaW50IHNoX2NtdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiBzYXZlIGZsYWcgc3RhdGUgYW5kIHN0b3AgQ01UIGNoYW5uZWwgKi8KLQlwLT5mbGFnc19zdXNwZW5kID0gcC0+ZmxhZ3M7Ci0Jc2hfY210X3N0b3AocCwgcC0+ZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoX2NtdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCS8qIHN0YXJ0IENNVCBjaGFubmVsIGZyb20gc2F2ZWQgc3RhdGUgKi8KLQlzaF9jbXRfc3RhcnQocCwgcC0+ZmxhZ3Nfc3VzcGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9jbXRfZGV2X3BtX29wcyA9IHsKLQkuc3VzcGVuZCA9IHNoX2NtdF9zdXNwZW5kLAotCS5yZXN1bWUgPSBzaF9jbXRfcmVzdW1lLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfY210X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2NtdF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2NtdF9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzaF9jbXQiLAotCQkucG0JPSAmc2hfY210X2Rldl9wbV9vcHMsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYwppbmRleCA5NzNlNzE0Li40YzhhNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYwpAQCAtMjIxLDE1ICsyMjEsMTUgQEAKIAljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCWNlZC0+c2V0X21vZGUgPSBzaF9tdHUyX2Nsb2NrX2V2ZW50X21vZGU7CiAKKwlwcl9pbmZvKCJzaF9tdHUyOiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CisKIAlyZXQgPSBzZXR1cF9pcnEocC0+aXJxYWN0aW9uLmlycSwgJnAtPmlycWFjdGlvbik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInNoX210dTI6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwKIAkJICAgICAgIHAtPmlycWFjdGlvbi5pcnEpOwogCQlyZXR1cm47CiAJfQotCi0JcHJfaW5mbygic2hfbXR1MjogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOwogfQogCiBzdGF0aWMgaW50IHNoX210dTJfcmVnaXN0ZXIoc3RydWN0IHNoX210dTJfcHJpdiAqcCwgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCmluZGV4IDkzYzIzMjIuLjk2MWY1YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwpAQCAtMzIzLDE1ICszMjMsMTUgQEAKIAljZWQtPnNldF9uZXh0X2V2ZW50ID0gc2hfdG11X2Nsb2NrX2V2ZW50X25leHQ7CiAJY2VkLT5zZXRfbW9kZSA9IHNoX3RtdV9jbG9ja19ldmVudF9tb2RlOwogCisJcHJfaW5mbygic2hfdG11OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CisKIAlyZXQgPSBzZXR1cF9pcnEocC0+aXJxYWN0aW9uLmlycSwgJnAtPmlycWFjdGlvbik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInNoX3RtdTogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAogCQkgICAgICAgcC0+aXJxYWN0aW9uLmlycSk7CiAJCXJldHVybjsKIAl9Ci0KLQlwcl9pbmZvKCJzaF90bXU6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKIH0KIAogc3RhdGljIGludCBzaF90bXVfcmVnaXN0ZXIoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCmluZGV4IDQ2ZTg5OWEuLjFjMzg0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYworKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNyeXB0bzR4eF9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSAgICAgID0gImFtY2MscHBjNHh4LWNyeXB0byIsfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYwppbmRleCA0ODAxMTYyOS4uYzdhNWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMKQEAgLTEzNSwxMyArMTM1LDEzIEBACiAJLyoKIAkgKiBUaGUgcmVxdWVzdGVkIGtleSBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFcsIGRvIGEgZmFsbGJhY2sKIAkgKi8KLQlvcC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKLQlvcC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwlvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKKwlvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVNLKTsKIAogCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KG9wLT5mYWxsYmFjay5jaXAsIGtleSwgbGVuKTsKIAlpZiAocmV0KSB7CiAJCXRmbS0+Y3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFU19NQVNLOwotCQl0Zm0tPmNydF9mbGFncyB8PSAob3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFU19NQVNLKTsKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gKG9wLT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNjMsNyArMjYzLDcgQEAKIAogCWlmIChJU19FUlIob3AtPmZhbGxiYWNrLmNpcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhbGxvY2F0aW5nIGZhbGxiYWNrIGFsZ28gJXNcbiIsIG5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihvcC0+ZmFsbGJhY2suYmxrKTsKKwkJcmV0dXJuIFBUUl9FUlIob3AtPmZhbGxiYWNrLmNpcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKaW5kZXggYzQ3ZmZlOGEuLmZkNTI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYworKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKQEAgLTE5NTgsNyArMTk1OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLHNlYzIuMCIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKaW5kZXggZTdhMzIzMC4uODczOTljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKKysrIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogLyoqCiAgKiBjaGFubmVsX3RhYmxlIC0gcGVyY3B1IGxvb2t1cCB0YWJsZSBmb3IgbWVtb3J5LXRvLW1lbW9yeSBvZmZsb2FkIHByb3ZpZGVycwogICovCi1zdGF0aWMgc3RydWN0IGRtYV9jaGFuX3RibF9lbnQgKmNoYW5uZWxfdGFibGVbRE1BX1RYX1RZUEVfRU5EXTsKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5fdGJsX2VudCBfX3BlcmNwdSAqY2hhbm5lbF90YWJsZVtETUFfVFhfVFlQRV9FTkRdOwogCiBzdGF0aWMgaW50IF9faW5pdCBkbWFfY2hhbm5lbF90YWJsZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCBkMTBjYzg5Li5iNzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTQ4LDIzICs0OCwyMCBAQAogICovCiAjZGVmaW5lIFJTX0RFRkFVTFQgIChSU19EVUFMKQogCisvKiBBIGJpdG1hc2sgd2l0aCBiaXRzIGVub3VnaCBmb3IgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2RtYWVfc2xhdmVfdXNlZFtCSVRTX1RPX0xPTkdTKFNIRE1BX1NMQVZFX05VTUJFUildOworCiBzdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCk7CiAKICNkZWZpbmUgU0hfRE1BQ19DSEFOX0JBU0UoaWQpIChkbWFfYmFzZV9hZGRyW2lkXSkKIHN0YXRpYyB2b2lkIHNoX2RtYWVfd3JpdGVsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSwgdTMyIHJlZykKIHsKLQljdHJsX291dGwoZGF0YSwgKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKKwljdHJsX291dGwoZGF0YSwgU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgc2hfZG1hZV9yZWFkbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCi17Ci0JdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXJldHVybiBjdHJsX2lubChTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKIH0KIAogLyoKQEAgLTk1LDI3ICs5MiwzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtYWVfaXNfYnVzeShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIGJvb2wgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7CiAJdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCWlmIChjaGNyICYgQ0hDUl9ERSkgewotCQlpZiAoIShjaGNyICYgQ0hDUl9URSkpCi0JCQlyZXR1cm4gLUVCVVNZOyAvKiB3b3JraW5nICovCi0JfQotCXJldHVybiAwOyAvKiB3YWl0aW5nICovCisKKwlpZiAoKGNoY3IgJiAoQ0hDUl9ERSB8IENIQ1JfVEUpKSA9PSBDSENSX0RFKQorCQlyZXR1cm4gdHJ1ZTsgLyogd29ya2luZyAqLworCisJcmV0dXJuIGZhbHNlOyAvKiB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQodTMyIGNoY3IpCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOworCisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzICpodykKIHsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOwogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBzaF9jaGFuLT54bWl0X3NoaWZ0LCBUQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBkbWFlX3N0YXJ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAKIAljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IgJiB+Q0hDUl9URSwgQ0hDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfaGFsdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQpAQCAtMTM0LDU1ICsxMzQsNTAgQEAKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKIH0KIAorc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCit7CisJdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoY2hjcik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7Cit9CisKIHN0YXRpYyBpbnQgZG1hZV9zZXRfY2hjcihzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgdmFsKQogewotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7CiAJLyogV2hlbiBETUEgd2FzIHdvcmtpbmcsIGNhbiBub3Qgc2V0IGRhdGEgdG8gQ0hDUiAqLwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAorCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQodmFsKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCB2YWwsIENIQ1IpOworCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRE1BUlMxX0FERFIJMHgwNAotI2RlZmluZSBETUFSUzJfQUREUgkweDA4Ci0jZGVmaW5lIERNQVJTX1NISUZUIDgKLSNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sgMHgwMQorI2RlZmluZSBETUFSU19TSElGVAk4CisjZGVmaW5lIERNQVJTX0NIQU5fTVNLCTB4MDEKIHN0YXRpYyBpbnQgZG1hZV9zZXRfZG1hcnMoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHZhbCkKIHsKIAl1MzIgYWRkcjsKIAlpbnQgc2hpZnQgPSAwOwotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKworCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc2hfY2hhbi0+aWQgJiBETUFSU19DSEFOX01TSykKIAkJc2hpZnQgPSBETUFSU19TSElGVDsKIAotCXN3aXRjaCAoc2hfY2hhbi0+aWQpIHsKLQkvKiBETUFSUzAgKi8KLQljYXNlIDA6Ci0JY2FzZSAxOgotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTsKLQkJYnJlYWs7Ci0JLyogRE1BUlMxICovCi0JY2FzZSAyOgotCWNhc2UgMzoKLQkJYWRkciA9IChTSF9ETUFSU19CQVNFICsgRE1BUlMxX0FERFIpOwotCQlicmVhazsKLQkvKiBETUFSUzIgKi8KLQljYXNlIDQ6Ci0JY2FzZSA1OgotCQlhZGRyID0gKFNIX0RNQVJTX0JBU0UgKyBETUFSUzJfQUREUik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKHNoX2NoYW4tPmlkIDwgNikKKwkJLyogRE1BMFJTMCAtIERNQTBSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UwICsgKHNoX2NoYW4tPmlkIC8gMikgKiA0OworI2lmZGVmIFNIX0RNQVJTX0JBU0UxCisJZWxzZSBpZiAoc2hfY2hhbi0+aWQgPCAxMikKKwkJLyogRE1BMVJTMCAtIERNQTFSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UxICsgKChzaF9jaGFuLT5pZCAtIDYpIC8gMikgKiA0OworI2VuZGlmCisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQljdHJsX291dHcoKHZhbCA8PCBzaGlmdCkgfAotCQkoY3RybF9pbncoYWRkcikgJiAoc2hpZnQgPyAweEZGMDAgOiAweDAwRkYpKSwKLQkJYWRkcik7CisJY3RybF9vdXR3KCh2YWwgPDwgc2hpZnQpIHwgKGN0cmxfaW53KGFkZHIpICYgKDB4RkYwMCA+PiBzaGlmdCkpLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUwLDEwICsyNDUsNTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqc2hfZG1hZV9maW5kX3NsYXZlKAorCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHNsYXZlX2lkKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gc2hfY2hhbi0+Y29tbW9uLmRldmljZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKGRtYV9kZXYsCisJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSAmc2hkZXYtPnBkYXRhOworCWludCBpOworCisJaWYgKCh1bnNpZ25lZClzbGF2ZV9pZCA+PSBTSERNQV9TTEFWRV9OVU1CRVIpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jb25maWdfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+Y29uZmlnW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQorCQkJcmV0dXJuIHBkYXRhLT5jb25maWcgKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2hfZG1hZV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKworCS8qCisJICogVGhpcyByZWxpZXMgb24gdGhlIGd1YXJhbnRlZSBmcm9tIGRtYWVuZ2luZSB0aGF0IGFsbG9jX2NoYW5fcmVzb3VyY2VzCisJICogbmV2ZXIgcnVucyBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgZnJlZV9jaGFuX3Jlc291cmNlcy4KKwkgKi8KKwlpZiAocGFyYW0pIHsKKwkJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjZmc7CisKKwkJY2ZnID0gc2hfZG1hZV9maW5kX3NsYXZlKHNoX2NoYW4sIHBhcmFtLT5zbGF2ZV9pZCk7CisJCWlmICghY2ZnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFyYW0tPnNsYXZlX2lkLCBzaF9kbWFlX3NsYXZlX3VzZWQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlwYXJhbS0+Y29uZmlnID0gY2ZnOworCisJCWRtYWVfc2V0X2RtYXJzKHNoX2NoYW4sIGNmZy0+bWlkX3JpZCk7CisJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgY2ZnLT5jaGNyKTsKKwl9IGVsc2UgeworCQlpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweDcwMCkgIT0gMHg0MDApCisJCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIFJTX0RFRkFVTFQpOworCX0KIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAl3aGlsZSAoc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkIDwgTlJfREVTQ1NfUEVSX0NIQU5ORUwpIHsKQEAgLTI4NiwxMCArMzI0LDE4IEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKKwlkbWFlX2hhbHQoc2hfY2hhbik7CisKIAkvKiBQcmVwYXJlZCBhbmQgbm90IHN1Ym1pdHRlZCBkZXNjcmlwdG9ycyBjYW4gc3RpbGwgYmUgb24gdGhlIHF1ZXVlICovCiAJaWYgKCFsaXN0X2VtcHR5KCZzaF9jaGFuLT5sZF9xdWV1ZSkpCiAJCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogCisJaWYgKGNoYW4tPnByaXZhdGUpIHsKKwkJLyogVGhlIGNhbGxlciBpcyBob2xkaW5nIGRtYV9saXN0X211dGV4ICovCisJCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisJCWNsZWFyX2JpdChwYXJhbS0+c2xhdmVfaWQsIHNoX2RtYWVfc2xhdmVfdXNlZCk7CisJfQorCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hfY2hhbi0+bGRfZnJlZSwgJmxpc3QpOwpAQCAtMzAxLDIzICszNDcsOTcgQEAKIAkJa2ZyZWUoZGVzYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCi0Jc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKKy8qKgorICogc2hfZG1hZV9hZGRfZGVzYyAtIGdldCwgc2V0IHVwIGFuZCByZXR1cm4gb25lIHRyYW5zZmVyIGRlc2NyaXB0b3IKKyAqIEBzaF9jaGFuOglETUEgY2hhbm5lbAorICogQGZsYWdzOglETUEgdHJhbnNmZXIgZmxhZ3MKKyAqIEBkZXN0OglkZXN0aW5hdGlvbiBETUEgYWRkcmVzcywgaW5jcmVtZW50ZWQgd2hlbiBkaXJlY3Rpb24gZXF1YWxzCisgKgkJRE1BX0ZST01fREVWSUNFIG9yIERNQV9CSURJUkVDVElPTkFMCisgKiBAc3JjOglzb3VyY2UgRE1BIGFkZHJlc3MsIGluY3JlbWVudGVkIHdoZW4gZGlyZWN0aW9uIGVxdWFscworICoJCURNQV9UT19ERVZJQ0Ugb3IgRE1BX0JJRElSRUNUSU9OQUwKKyAqIEBsZW46CURNQSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBmaXJzdDoJaWYgTlVMTCwgc2V0IHRvIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgYW5kIGNvb2tpZSBzZXQgdG8gLUVCVVNZCisgKiBAZGlyZWN0aW9uOgluZWVkZWQgZm9yIHNsYXZlIERNQSB0byBkZWNpZGUgd2hpY2ggYWRkcmVzcyB0byBrZWVwIGNvbnN0YW50LAorICoJCWVxdWFscyBETUFfQklESVJFQ1RJT05BTCBmb3IgTUVNQ1BZCisgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IKKyAqIExvY2tzOiBjYWxsZWQgd2l0aCBkZXNjX2xvY2sgaGVsZAorICovCitzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfYWRkX2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBkbWFfYWRkcl90ICpkZXN0LCBkbWFfYWRkcl90ICpzcmMsIHNpemVfdCAqbGVuLAorCXN0cnVjdCBzaF9kZXNjICoqZmlyc3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOwotCXN0cnVjdCBzaF9kZXNjICpmaXJzdCA9IE5VTEwsICpwcmV2ID0gTlVMTCwgKm5ldzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisKKwlpZiAoISpsZW4pCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOworCWlmICghbmV3KSB7CisJCWRldl9lcnIoc2hfY2hhbi0+ZGV2LCAiTm8gZnJlZSBsaW5rIGRlc2NyaXB0b3IgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29weV9zaXplID0gbWluKCpsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKworCW5ldy0+aHcuc2FyID0gKnNyYzsKKwluZXctPmh3LmRhciA9ICpkZXN0OworCW5ldy0+aHcudGNyID0gY29weV9zaXplOworCisJaWYgKCEqZmlyc3QpIHsKKwkJLyogRmlyc3QgZGVzYyAqLworCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJKmZpcnN0ID0gbmV3OworCX0gZWxzZSB7CisJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOworCX0KKworCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkiY2hhaW5pbmcgKCV1LyV1KUAleCAtPiAleCB3aXRoICVwLCBjb29raWUgJWQsIHNoaWZ0ICVkXG4iLAorCQljb3B5X3NpemUsICpsZW4sICpzcmMsICpkZXN0LCAmbmV3LT5hc3luY190eCwKKwkJbmV3LT5hc3luY190eC5jb29raWUsIHNoX2NoYW4tPnhtaXRfc2hpZnQpOworCisJbmV3LT5tYXJrID0gREVTQ19QUkVQQVJFRDsKKwluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJbmV3LT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwkqbGVuIC09IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkqc3JjICs9IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCSpkZXN0ICs9IGNvcHlfc2l6ZTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qCisgKiBzaF9kbWFlX3ByZXBfc2cgLSBwcmVwYXJlIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGZyb20gYW4gU0cgbGlzdAorICoKKyAqIENvbW1vbiByb3V0aW5lIGZvciBwdWJsaWMgKE1FTUNQWSkgYW5kIHNsYXZlIERNQS4gVGhlIE1FTUNQWSBjYXNlIGlzIGFsc28KKyAqIGNvbnZlcnRlZCB0byBzY2F0dGVyLWdhdGhlciB0byBndWFyYW50ZWUgY29uc2lzdGVudCBsb2NraW5nIGFuZCBhIGNvcnJlY3QKKyAqIGxpc3QgbWFuaXB1bGF0aW9uLiBGb3Igc2xhdmUgRE1BIGRpcmVjdGlvbiBjYXJyaWVzIHRoZSB1c3VhbCBtZWFuaW5nLCBhbmQsCisgKiBsb2dpY2FsbHksIHRoZSBTRyBsaXN0IGlzIFJBTSBhbmQgdGhlIGFkZHIgdmFyaWFibGUgY29udGFpbnMgc2xhdmUgYWRkcmVzcywKKyAqIGUuZy4sIHRoZSBGSUZPIEkvTyByZWdpc3Rlci4gRm9yIE1FTUNQWSBkaXJlY3Rpb24gZXF1YWxzIERNQV9CSURJUkVDVElPTkFMCisgKiBhbmQgdGhlIFNHIGxpc3QgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgcG9pbnRzIGF0IHRoZSBzb3VyY2UgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpzaF9kbWFlX3ByZXBfc2coc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwgZG1hX2FkZHJfdCAqYWRkciwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZmlyc3QgPSBOVUxMLCAqbmV3ID0gTlVMTCAvKiBjb21waWxlci4uLiAqLzsKIAlMSVNUX0hFQUQodHhfbGlzdCk7Ci0JaW50IGNodW5rcyA9IChsZW4gKyBTSF9ETUFfVENSX01BWCkgLyAoU0hfRE1BX1RDUl9NQVggKyAxKTsKKwlpbnQgY2h1bmtzID0gMDsKKwlpbnQgaTsKIAotCWlmICghY2hhbikKKwlpZiAoIXNnX2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWxlbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpCisJCWNodW5rcyArPSAoc2dfZG1hX2xlbihzZykgKyBTSF9ETUFfVENSX01BWCkgLworCQkJKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTMzMyw0OSArNDUzLDMyIEBACiAJICoJb25seSBkdXJpbmcgdGhpcyBmdW5jdGlvbiwgdGhlbiB0aGV5IGFyZSBpbW1lZGlhdGVseSBzcGxpY2VkCiAJICoJYmFjayBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gZm9ybSBvZiBhIGNoYWluCiAJICovCi0JZG8gewotCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gdGhlIGZyZWUgbGlzdCAqLwotCQluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOwotCQlpZiAoIW5ldykgewotCQkJZGV2X2VycihzaF9jaGFuLT5kZXYsCi0JCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQotCQkJCW5ldy0+bWFyayA9IERFU0NfSURMRTsKLQkJCWxpc3Rfc3BsaWNlKCZ0eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKwkJaWYgKCFsZW4pCisJCQlnb3RvIGVycl9nZXRfZGVzYzsKIAotCQluZXctPmh3LnNhciA9IGRtYV9zcmM7Ci0JCW5ldy0+aHcuZGFyID0gZG1hX2Rlc3Q7Ci0JCW5ldy0+aHcudGNyID0gY29weV9zaXplOwotCQlpZiAoIWZpcnN0KSB7Ci0JCQkvKiBGaXJzdCBkZXNjICovCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKLQkJCWZpcnN0ID0gbmV3OwotCQl9IGVsc2UgewotCQkJLyogT3RoZXIgZGVzYyAtIGludmlzaWJsZSB0byB0aGUgdXNlciAqLwotCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOwotCQl9CisJCWRvIHsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiQWRkIFNHICMlZEAlcFslZF0sIGRtYSAlbGx4XG4iLAorCQkJCWksIHNnLCBsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2dfYWRkcik7CiAKLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsCi0JCQkiY2hhaW5pbmcgJXUgb2YgJXUgd2l0aCAlcCwgZHN0ICV4LCBjb29raWUgJWRcbiIsCi0JCQljb3B5X3NpemUsIGxlbiwgJm5ldy0+YXN5bmNfdHgsIGRtYV9kZXN0LAotCQkJbmV3LT5hc3luY190eC5jb29raWUpOworCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQkJbmV3ID0gc2hfZG1hZV9hZGRfZGVzYyhzaF9jaGFuLCBmbGFncywKKwkJCQkJCSZzZ19hZGRyLCBhZGRyLCAmbGVuLCAmZmlyc3QsCisJCQkJCQlkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCW5ldyA9IHNoX2RtYWVfYWRkX2Rlc2Moc2hfY2hhbiwgZmxhZ3MsCisJCQkJCQlhZGRyLCAmc2dfYWRkciwgJmxlbiwgJmZpcnN0LAorCQkJCQkJZGlyZWN0aW9uKTsKKwkJCWlmICghbmV3KQorCQkJCWdvdG8gZXJyX2dldF9kZXNjOwogCi0JCW5ldy0+bWFyayA9IERFU0NfUFJFUEFSRUQ7Ci0JCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKLQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKLQotCQlwcmV2ID0gbmV3OwotCQlsZW4gLT0gY29weV9zaXplOwotCQlkbWFfc3JjICs9IGNvcHlfc2l6ZTsKLQkJZG1hX2Rlc3QgKz0gY29weV9zaXplOwotCQkvKiBJbnNlcnQgdGhlIGxpbmsgZGVzY3JpcHRvciB0byB0aGUgTEQgcmluZyAqLwotCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKLQl9IHdoaWxlIChsZW4pOworCQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJnR4X2xpc3QpOworCQl9IHdoaWxlIChsZW4pOworCX0KIAogCWlmIChuZXcgIT0gZmlyc3QpCiAJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVOT1NQQzsKQEAgLTM4Niw2ICs0ODksNzcgQEAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiAmZmlyc3QtPmFzeW5jX3R4OworCitlcnJfZ2V0X2Rlc2M6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQorCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJbGlzdF9zcGxpY2UoJnR4X2xpc3QsICZzaF9jaGFuLT5sZF9mcmVlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICghY2hhbiB8fCAhbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4tPnByaXZhdGUgPSBOVUxMOworCisJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihkbWFfc3JjKSksIGxlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGRtYV9zcmMpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gZG1hX3NyYzsKKwlzZ19kbWFfbGVuKCZzZykgPSBsZW47CisKKwlyZXR1cm4gc2hfZG1hZV9wcmVwX3NnKHNoX2NoYW4sICZzZywgMSwgJmRtYV9kZXN0LCBETUFfQklESVJFQ1RJT05BTCwKKwkJCSAgICAgICBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9zbGF2ZV9zZygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW07CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbjsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisKKwkvKiBTb21lb25lIGNhbGxpbmcgc2xhdmUgRE1BIG9uIGEgcHVibGljIGNoYW5uZWw/ICovCisJaWYgKCFwYXJhbSB8fCAhc2dfbGVuKSB7CisJCWRldl93YXJuKHNoX2NoYW4tPmRldiwgIiVzOiBiYWQgcGFyYW1ldGVyOiAlcCwgJWQsICVkXG4iLAorCQkJIF9fZnVuY19fLCBwYXJhbSwgc2dfbGVuLCBwYXJhbSA/IHBhcmFtLT5zbGF2ZV9pZCA6IC0xKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBpZiAocGFyYW0gIT0gTlVMTCksIHRoaXMgaXMgYSBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIHNsYXZlIGNoYW5uZWwsCisJICogdGhlcmVmb3JlIHBhcmFtLT5jb25maWcgIT0gTlVMTCB0b28uCisJICovCisJcmV0dXJuIHNoX2RtYWVfcHJlcF9zZyhzaF9jaGFuLCBzZ2wsIHNnX2xlbiwgJnBhcmFtLT5jb25maWctPmFkZHIsCisJCQkgICAgICAgZGlyZWN0aW9uLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2RtYWVfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogfQogCiBzdGF0aWMgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIF9fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCkKQEAgLTQxOSw3ICs1OTMsMTEgQEAKIAkJCWNvb2tpZSA9IHR4LT5jb29raWU7CiAKIAkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKLQkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJaWYgKHNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgIT0gZGVzYy0+Y29va2llIC0gMSkKKwkJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwKKwkJCQkJIkNvbXBsZXRpbmcgY29va2llICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkJZGVzYy0+Y29va2llLAorCQkJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICsgMSk7CiAJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gZGVzYy0+Y29va2llOwogCQl9CiAKQEAgLTQ5Miw3ICs2NzAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogRmluZCB0aGUgZmlyc3QgdW4tdHJhbnNmZXIgZGVzY2lwdG9yICovCisJLyogRmluZCB0aGUgZmlyc3Qgbm90IHRyYW5zZmVycmVkIGRlc2NpcHRvciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKIAkJaWYgKHNkLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CiAJCQkvKiBHZXQgdGhlIGxkIHN0YXJ0IGFkZHJlc3MgZnJvbSBsZF9xdWV1ZSAqLwpAQCAtNTU5LDcgKzczNyw3IEBACiAKIAkvKiBJUlEgTXVsdGkgKi8KIAlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSB7Ci0JCWludCBjbnQgPSAwOworCQlpbnQgX19tYXliZV91bnVzZWQgY250ID0gMDsKIAkJc3dpdGNoIChpcnEpIHsKICNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCiAJCWNhc2UgRE1URTZfSVJROgpAQCAtNTk2LDExICs3NzQsMTQgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gKHN0cnVjdCBzaF9kbWFlX2NoYW4gKilkYXRhOwogCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCXUzMiBzYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBTQVIpOworCXUzMiBkYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBEQVIpOwogCiAJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCi0JCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCWlmIChkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAoKGRlc2MtPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgJiYKKwkJICAgICAgKGRlc2MtPmh3LmRhciArIGRlc2MtPmh3LnRjcikgPT0gZGFyX2J1ZikgfHwKKwkJICAgICAoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSkgewogCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJkb25lICMlZEAlcCBkc3QgJXVcbiIsCiAJCQkJZGVzYy0+YXN5bmNfdHguY29va2llLCAmZGVzYy0+YXN5bmNfdHgsCiAJCQkJZGVzYy0+aHcuZGFyKTsKQEAgLTY3Myw3ICs4NTQsNyBAQAogCX0KIAogCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKLQkJCSJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOworCQkgInNoLWRtYWUlZCIsIG5ld19zaF9jaGFuLT5pZCk7CiAKIAkvKiBzZXQgdXAgY2hhbm5lbCBpcnEgKi8KIAllcnIgPSByZXF1ZXN0X2lycShpcnEsICZzaF9kbWFlX2ludGVycnVwdCwgaXJxZmxhZ3MsCkBAIC02ODQsMTEgKzg2NSw2IEBACiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQkvKiBDSENSIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2NoY3IgPSBkbWFlX3NldF9jaGNyOwotCS8qIERNQVJTIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2RtYXJzID0gZG1hZV9zZXRfZG1hcnM7Ci0KIAlzaGRldi0+Y2hhbltpZF0gPSBuZXdfc2hfY2hhbjsKIAlyZXR1cm4gMDsKIApAQCAtNzU5LDEyICs5MzUsMTkgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMKIAkJPSBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCXNoZGV2LT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBzaF9kbWFlX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gc2hfZG1hZV9wcmVwX21lbWNweTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IHNoX2RtYWVfaXNfY29tcGxldGU7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHNoX2RtYWVfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CisKKwkvKiBDb21wdWxzb3J5IGZvciBETUFfU0xBVkUgZmllbGRzICovCisJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHNoX2RtYWVfcHJlcF9zbGF2ZV9zZzsKKwlzaGRldi0+Y29tbW9uLmRldmljZV90ZXJtaW5hdGVfYWxsID0gc2hfZG1hZV90ZXJtaW5hdGVfYWxsOworCiAJc2hkZXYtPmNvbW1vbi5kZXYgPSAmcGRldi0+ZGV2OwogCS8qIERlZmF1bHQgdHJhbnNmZXIgc2l6ZSBvZiAzMiBieXRlcyByZXF1aXJlcyAzMi1ieXRlIGFsaWdubWVudCAqLwogCXNoZGV2LT5jb21tb24uY29weV9hbGlnbiA9IDU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCAxMDhmMWNmLi43ZTIyN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAJaW50IGNodW5rczsKIAlpbnQgbWFyazsKQEAgLTQ1LDEzICs0Niw5IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsJLyogVGFza2xldCAqLwogCWludCBkZXNjc19hbGxvY2F0ZWQ7CQkvKiBkZXNjIGNvdW50ICovCisJaW50IHhtaXRfc2hpZnQ7CQkJLyogbG9nXzIoYnl0ZXNfcGVyX3hmZXIpICovCiAJaW50IGlkOwkJCQkvKiBSYXcgaWQgb2YgdGhpcyBjaGFubmVsICovCiAJY2hhciBkZXZfaWRbMTZdOwkJLyogdW5pcXVlIG5hbWUgcGVyIERNQUMgb2YgY2hhbm5lbCAqLwotCi0JLyogU2V0IGNoY3IgKi8KLQlpbnQgKCpzZXRfY2hjcikoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIHJlZ3MpOwotCS8qIFNldCBETUEgcmVzb3VyY2UgKi8KLQlpbnQgKCpzZXRfZG1hcnMpKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUxNiByZXMpOwogfTsKIAogc3RydWN0IHNoX2RtYWVfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDMzOTFlNjcuLmNmMTdkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMTMsNyArMTMsNyBAQAogc3RhdGljIGludCBlY2NfZW5hYmxlX292ZXJyaWRlOwogbW9kdWxlX3BhcmFtKGVjY19lbmFibGVfb3ZlcnJpZGUsIGludCwgMDY0NCk7CiAKLXN0YXRpYyBzdHJ1Y3QgbXNyICptc3JzOworc3RhdGljIHN0cnVjdCBtc3IgX19wZXJjcHUgKm1zcnM7CiAKIC8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCiBzdHJ1Y3QgYW1kNjRfcHZ0OwpAQCAtMjU1MywxNCArMjU1MywxNCBAQAogCiAJCWlmIChvbikgewogCQkJaWYgKHJlZy0+bCAmIEs4X01TUl9NQ0dDVExfTkJFKQotCQkJCXB2dC0+ZmxhZ3MuZWNjX3JlcG9ydCA9IDE7CisJCQkJcHZ0LT5mbGFncy5uYl9tY2VfZW5hYmxlID0gMTsKIAogCQkJcmVnLT5sIHw9IEs4X01TUl9NQ0dDVExfTkJFOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIFR1cm4gb2ZmIEVDQyByZXBvcnRpbmcgb25seSB3aGVuIGl0IHdhcyBvZmYgYmVmb3JlCisJCQkgKiBUdXJuIG9mZiBOQiBNQ0UgcmVwb3J0aW5nIG9ubHkgd2hlbiBpdCB3YXMgb2ZmIGJlZm9yZQogCQkJICovCi0JCQlpZiAoIXB2dC0+ZmxhZ3MuZWNjX3JlcG9ydCkKKwkJCWlmICghcHZ0LT5mbGFncy5uYl9tY2VfZW5hYmxlKQogCQkJCXJlZy0+bCAmPSB+SzhfTVNSX01DR0NUTF9OQkU7CiAJCX0KIAl9CkBAIC0yNTcxLDIyICsyNTcxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBPbmx5IGlmICdlY2NfZW5hYmxlX292ZXJyaWRlJyBpcyBzZXQgQU5EIEJJT1MgaGFkIEVDQyBkaXNhYmxlZCwgZG8gIndlIgotICogZW5hYmxlIGl0LgotICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9lbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAl1MzIgdmFsdWUsIG1hc2sgPSBLOF9OQkNUTF9DRUNDRW4gfCBLOF9OQkNUTF9VRUNDRW47CiAKLQlpZiAoIWVjY19lbmFibGVfb3ZlcnJpZGUpCi0JCXJldHVybjsKLQotCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCSInZWNjX2VuYWJsZV9vdmVycmlkZScgcGFyYW1ldGVyIGlzIGFjdGl2ZSwgIgotCQkiRW5hYmxpbmcgQU1EIEVDQyBoYXJkd2FyZSBub3c6IENBVVRJT05cbiIpOwotCiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+bWlzY19mM19jdGwsIEs4X05CQ1RMLCAmdmFsdWUpOwogCiAJLyogdHVybiBvbiBVRUNDbiBhbmQgQ0VDQ0VuIGJpdHMgKi8KQEAgLTI2MTEsNiArMjYwMCw4IEBACiAJCQkiVGhpcyBub2RlIHJlcG9ydHMgdGhhdCBEUkFNIEVDQyBpcyAiCiAJCQkiY3VycmVudGx5IERpc2FibGVkOyBFTkFCTElORyBub3dcbiIpOwogCisJCXB2dC0+ZmxhZ3MubmJfZWNjX3ByZXYgPSAwOworCiAJCS8qIEF0dGVtcHQgdG8gdHVybiBvbiBEUkFNIEVDQyBFbmFibGUgKi8KIAkJdmFsdWUgfD0gSzhfTkJDRkdfRUNDX0VOQUJMRTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNGRywgdmFsdWUpOwpAQCAtMjYyNSw3ICsyNjE2LDEwIEBACiAJCQlhbWQ2NF9wcmludGsoS0VSTl9ERUJVRywKIAkJCQkiSGFyZHdhcmUgYWNjZXB0ZWQgRFJBTSBFQ0MgRW5hYmxlXG4iKTsKIAkJfQorCX0gZWxzZSB7CisJCXB2dC0+ZmxhZ3MubmJfZWNjX3ByZXYgPSAxOwogCX0KKwogCWRlYnVnZjAoIk5CQ0ZHKDIpPSAweCV4ICBDSElQS0lMTD0gJXMgRUNDX0VOQUJMRT0gJXNcbiIsIHZhbHVlLAogCQkodmFsdWUgJiBLOF9OQkNGR19DSElQS0lMTCkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiLAogCQkodmFsdWUgJiBLOF9OQkNGR19FQ0NfRU5BQkxFKSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOwpAQCAtMjY0NCwxMiArMjYzOCwxOCBAQAogCXZhbHVlICY9IH5tYXNrOwogCXZhbHVlIHw9IHB2dC0+b2xkX25iY3RsOwogCi0JLyogcmVzdG9yZSB0aGUgTkIgRW5hYmxlIE1DR0NUTCBiaXQgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+bWlzY19mM19jdGwsIEs4X05CQ1RMLCB2YWx1ZSk7CiAKKwkvKiByZXN0b3JlIHByZXZpb3VzIEJJT1MgRFJBTSBFQ0MgIm9mZiIgc2V0dGluZyB3aGljaCB3ZSBmb3JjZS1lbmFibGVkICovCisJaWYgKCFwdnQtPmZsYWdzLm5iX2VjY19wcmV2KSB7CisJCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNGRywgJnZhbHVlKTsKKwkJdmFsdWUgJj0gfks4X05CQ0ZHX0VDQ19FTkFCTEU7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsIHZhbHVlKTsKKwl9CisKKwkvKiByZXN0b3JlIHRoZSBOQiBFbmFibGUgTUNHQ1RMIGJpdCAqLwogCWlmIChhbWQ2NF90b2dnbGVfZWNjX2Vycl9yZXBvcnRpbmcocHZ0LCBPRkYpKQotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiRXJyb3IgcmVzdG9yaW5nIEVDQyByZXBvcnRpbmcgb3ZlciAiCi0JCQkJCSAgICJNQ0dDVEwhXG4iKTsKKwkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIkVycm9yIHJlc3RvcmluZyBOQiBNQ0dDVEwgc2V0dGluZ3MhXG4iKTsKIH0KIAogLyoKQEAgLTI2OTAsOCArMjY5MCw5IEBACiAJCWlmICghZWNjX2VuYWJsZV9vdmVycmlkZSkgewogCQkJYW1kNjRfcHJpbnRrKEtFUk5fTk9USUNFLCAiJXMiLCBlY2NfbXNnKTsKIAkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIkZvcmNpbmcgRUNDIGNoZWNraW5nIG9uIVxuIik7CiAJCX0KLQkJZWNjX2VuYWJsZV9vdmVycmlkZSA9IDA7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCA0MWJjNTYxZS4uMGQ0YmY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC00ODcsNyArNDg3LDggQEAKIAkvKiBtaXNjIHNldHRpbmdzICovCiAJc3RydWN0IGZsYWdzIHsKIAkJdW5zaWduZWQgbG9uZyBjZjhfZXh0Y2ZnOjE7Ci0JCXVuc2lnbmVkIGxvbmcgZWNjX3JlcG9ydDoxOworCQl1bnNpZ25lZCBsb25nIG5iX21jZV9lbmFibGU6MTsKKwkJdW5zaWduZWQgbG9uZyBuYl9lY2NfcHJldjoxOwogCX0gZmxhZ3M7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCA0ZWVhZWQ1Li44YmU3MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJld2lyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CkBAIC0zMiw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTM2OCwzOSArMzY4LDU2IEBACiAJZm9yX2VhY2hfY2xpZW50KGRldmljZSwgd2FrZV91cF9jbGllbnQpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2dldF9pbmZvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQordW5pb24gaW9jdGxfYXJnIHsKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbwkJCWdldF9pbmZvOworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdAkJc2VuZF9yZXF1ZXN0OworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlCQkJYWxsb2NhdGU7CisJc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZQkJZGVhbGxvY2F0ZTsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlCQlzZW5kX3Jlc3BvbnNlOworCXN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldAlpbml0aWF0ZV9idXNfcmVzZXQ7CisJc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IJCWFkZF9kZXNjcmlwdG9yOworCXN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yCXJlbW92ZV9kZXNjcmlwdG9yOworCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dAljcmVhdGVfaXNvX2NvbnRleHQ7CisJc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvCQlxdWV1ZV9pc287CisJc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvCQlzdGFydF9pc287CisJc3RydWN0IGZ3X2NkZXZfc3RvcF9pc28JCQlzdG9wX2lzbzsKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIJCWdldF9jeWNsZV90aW1lcjsKKwlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UJYWxsb2NhdGVfaXNvX3Jlc291cmNlOworCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldAlzZW5kX3N0cmVhbV9wYWNrZXQ7CisJc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyMgkJZ2V0X2N5Y2xlX3RpbWVyMjsKK307CisKK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X2luZm8oc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAqZ2V0X2luZm8gPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8gKmEgPSAmYXJnLT5nZXRfaW5mbzsKIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgYnVzX3Jlc2V0OwogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAotCWNsaWVudC0+dmVyc2lvbiA9IGdldF9pbmZvLT52ZXJzaW9uOwotCWdldF9pbmZvLT52ZXJzaW9uID0gRldfQ0RFVl9WRVJTSU9OOwotCWdldF9pbmZvLT5jYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmluZGV4OworCWNsaWVudC0+dmVyc2lvbiA9IGEtPnZlcnNpb247CisJYS0+dmVyc2lvbiA9IEZXX0NERVZfVkVSU0lPTjsKKwlhLT5jYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmluZGV4OwogCiAJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCi0JaWYgKGdldF9pbmZvLT5yb20gIT0gMCkgewotCQl2b2lkIF9fdXNlciAqdXB0ciA9IHU2NF90b191cHRyKGdldF9pbmZvLT5yb20pOwotCQlzaXplX3Qgd2FudCA9IGdldF9pbmZvLT5yb21fbGVuZ3RoOworCWlmIChhLT5yb20gIT0gMCkgeworCQlzaXplX3Qgd2FudCA9IGEtPnJvbV9sZW5ndGg7CiAJCXNpemVfdCBoYXZlID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKIAotCQlyZXQgPSBjb3B5X3RvX3VzZXIodXB0ciwgY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb20sCi0JCQkJICAgbWluKHdhbnQsIGhhdmUpKTsKKwkJcmV0ID0gY29weV90b191c2VyKHU2NF90b191cHRyKGEtPnJvbSksCisJCQkJICAgY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb20sIG1pbih3YW50LCBoYXZlKSk7CiAJfQotCWdldF9pbmZvLT5yb21fbGVuZ3RoID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKKwlhLT5yb21fbGVuZ3RoID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKIAogCXVwX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCi0JY2xpZW50LT5idXNfcmVzZXRfY2xvc3VyZSA9IGdldF9pbmZvLT5idXNfcmVzZXRfY2xvc3VyZTsKLQlpZiAoZ2V0X2luZm8tPmJ1c19yZXNldCAhPSAwKSB7Ci0JCXZvaWQgX191c2VyICp1cHRyID0gdTY0X3RvX3VwdHIoZ2V0X2luZm8tPmJ1c19yZXNldCk7Ci0KKwljbGllbnQtPmJ1c19yZXNldF9jbG9zdXJlID0gYS0+YnVzX3Jlc2V0X2Nsb3N1cmU7CisJaWYgKGEtPmJ1c19yZXNldCAhPSAwKSB7CiAJCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZidXNfcmVzZXQsIGNsaWVudCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIodXB0ciwgJmJ1c19yZXNldCwgc2l6ZW9mKGJ1c19yZXNldCkpKQorCQlpZiAoY29weV90b191c2VyKHU2NF90b191cHRyKGEtPmJ1c19yZXNldCksCisJCQkJICZidXNfcmVzZXQsIHNpemVvZihidXNfcmVzZXQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtNTcxLDExICs1ODgsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfc2VuZF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9zZW5kX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlzd2l0Y2ggKHJlcXVlc3QtPnRjb2RlKSB7CisJc3dpdGNoIChhcmctPnNlbmRfcmVxdWVzdC50Y29kZSkgewogCWNhc2UgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUOgogCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKIAljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgpAQCAtNTkyLDcgKzYwNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBjbGllbnQtPmRldmljZS0+bm9kZV9pZCwKKwlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgJmFyZy0+c2VuZF9yZXF1ZXN0LCBjbGllbnQtPmRldmljZS0+bm9kZV9pZCwKIAkJCSAgICBjbGllbnQtPmRldmljZS0+bWF4X3NwZWVkKTsKIH0KIApAQCAtNjgzLDkgKzY5OCw5IEBACiAJa2ZyZWUocik7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGUoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgKmEgPSAmYXJnLT5hbGxvY2F0ZTsKIAlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpyOwogCXN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiByZWdpb247CiAJaW50IHJldDsKQEAgLTY5NCwxMyArNzA5LDEzIEBACiAJaWYgKHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZWdpb24uc3RhcnQgPSByZXF1ZXN0LT5vZmZzZXQ7Ci0JcmVnaW9uLmVuZCA9IHJlcXVlc3QtPm9mZnNldCArIHJlcXVlc3QtPmxlbmd0aDsKLQlyLT5oYW5kbGVyLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKKwlyZWdpb24uc3RhcnQgPSBhLT5vZmZzZXQ7CisJcmVnaW9uLmVuZCAgID0gYS0+b2Zmc2V0ICsgYS0+bGVuZ3RoOworCXItPmhhbmRsZXIubGVuZ3RoICAgICAgICAgICA9IGEtPmxlbmd0aDsKIAlyLT5oYW5kbGVyLmFkZHJlc3NfY2FsbGJhY2sgPSBoYW5kbGVfcmVxdWVzdDsKLQlyLT5oYW5kbGVyLmNhbGxiYWNrX2RhdGEgPSByOwotCXItPmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOwotCXItPmNsaWVudCA9IGNsaWVudDsKKwlyLT5oYW5kbGVyLmNhbGxiYWNrX2RhdGEgICAgPSByOworCXItPmNsb3N1cmUgICA9IGEtPmNsb3N1cmU7CisJci0+Y2xpZW50ICAgID0gY2xpZW50OwogCiAJcmV0ID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyLT5oYW5kbGVyLCAmcmVnaW9uKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzE0LDI3ICs3MjksMjUgQEAKIAkJcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIoY2xpZW50LCAmci0+cmVzb3VyY2UpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyZXF1ZXN0LT5oYW5kbGUgPSByLT5yZXNvdXJjZS5oYW5kbGU7CisJYS0+aGFuZGxlID0gci0+cmVzb3VyY2UuaGFuZGxlOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfZGVhbGxvY2F0ZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfZGVhbGxvY2F0ZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgYXJnLT5kZWFsbG9jYXRlLmhhbmRsZSwKIAkJCQkgICAgICAgcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX3NlbmRfcmVzcG9uc2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX3NlbmRfcmVzcG9uc2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UgKmEgPSAmYXJnLT5zZW5kX3Jlc3BvbnNlOwogCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlOwogCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlICpyOwogCWludCByZXQgPSAwOwogCi0JaWYgKHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCWlmIChyZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIGEtPmhhbmRsZSwKIAkJCQkgICAgcmVsZWFzZV9yZXF1ZXN0LCAmcmVzb3VyY2UpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc0MywyOCArNzU2LDI0IEBACiAJaWYgKGlzX2ZjcF9yZXF1ZXN0KHItPnJlcXVlc3QpKQogCQlnb3RvIG91dDsKIAotCWlmIChyZXF1ZXN0LT5sZW5ndGggPCByLT5sZW5ndGgpCi0JCXItPmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIocmVxdWVzdC0+ZGF0YSksIHItPmxlbmd0aCkpIHsKKwlpZiAoYS0+bGVuZ3RoIDwgci0+bGVuZ3RoKQorCQlyLT5sZW5ndGggPSBhLT5sZW5ndGg7CisJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsIHU2NF90b191cHRyKGEtPmRhdGEpLCByLT5sZW5ndGgpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWtmcmVlKHItPnJlcXVlc3QpOwogCQlnb3RvIG91dDsKIAl9Ci0JZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwgcmVxdWVzdC0+cmNvZGUpOworCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsIGEtPnJjb2RlKTsKICBvdXQ6CiAJa2ZyZWUocik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0ICpyZXF1ZXN0ID0gYnVmZmVyOwotCWludCBzaG9ydF9yZXNldDsKLQotCXNob3J0X3Jlc2V0ID0gKHJlcXVlc3QtPnR5cGUgPT0gRldfQ0RFVl9TSE9SVF9SRVNFVCk7Ci0KLQlyZXR1cm4gZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHNob3J0X3Jlc2V0KTsKKwlyZXR1cm4gZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2xpZW50LT5kZXZpY2UtPmNhcmQsCisJCQlhcmctPmluaXRpYXRlX2J1c19yZXNldC50eXBlID09IEZXX0NERVZfU0hPUlRfUkVTRVQpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LApAQCAtNzc3LDkgKzc4Niw5IEBACiAJa2ZyZWUocik7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfYWRkX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IgKnJlcXVlc3QgPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IgKmEgPSAmYXJnLT5hZGRfZGVzY3JpcHRvcjsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl9yZXNvdXJjZSAqcjsKIAlpbnQgcmV0OwogCkBAIC03ODcsMjIgKzc5NiwyMSBAQAogCWlmICghY2xpZW50LT5kZXZpY2UtPmlzX2xvY2FsKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCWlmIChyZXF1ZXN0LT5sZW5ndGggPiAyNTYpCisJaWYgKGEtPmxlbmd0aCA+IDI1NikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyID0ga21hbGxvYyhzaXplb2YoKnIpICsgcmVxdWVzdC0+bGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSArIGEtPmxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwogCWlmIChyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsCi0JCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoICogNCkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIoYS0+ZGF0YSksIGEtPmxlbmd0aCAqIDQpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCXItPmRlc2NyaXB0b3IubGVuZ3RoICAgID0gcmVxdWVzdC0+bGVuZ3RoOwotCXItPmRlc2NyaXB0b3IuaW1tZWRpYXRlID0gcmVxdWVzdC0+aW1tZWRpYXRlOwotCXItPmRlc2NyaXB0b3Iua2V5ICAgICAgID0gcmVxdWVzdC0+a2V5OworCXItPmRlc2NyaXB0b3IubGVuZ3RoICAgID0gYS0+bGVuZ3RoOworCXItPmRlc2NyaXB0b3IuaW1tZWRpYXRlID0gYS0+aW1tZWRpYXRlOworCXItPmRlc2NyaXB0b3Iua2V5ICAgICAgID0gYS0+a2V5OwogCXItPmRlc2NyaXB0b3IuZGF0YSAgICAgID0gci0+ZGF0YTsKIAogCXJldCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJnItPmRlc2NyaXB0b3IpOwpAQCAtODE1LDcgKzgyMyw3IEBACiAJCWZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3IoJnItPmRlc2NyaXB0b3IpOwogCQlnb3RvIGZhaWxlZDsKIAl9Ci0JcmVxdWVzdC0+aGFuZGxlID0gci0+cmVzb3VyY2UuaGFuZGxlOworCWEtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKIAogCXJldHVybiAwOwogIGZhaWxlZDoKQEAgLTgyNCwxMSArODMyLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvY3RsX3JlbW92ZV9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yICpyZXF1ZXN0ID0gYnVmZmVyOwotCi0JcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIGFyZy0+cmVtb3ZlX2Rlc2NyaXB0b3IuaGFuZGxlLAogCQkJCSAgICAgICByZWxlYXNlX2Rlc2NyaXB0b3IsIE5VTEwpOwogfQogCkBAIC04NTEsNDkgKzg1Nyw0NCBAQAogCQkgICAgc2l6ZW9mKGUtPmludGVycnVwdCkgKyBoZWFkZXJfbGVuZ3RoLCBOVUxMLCAwKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9jcmVhdGVfaXNvX2NvbnRleHQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2NyZWF0ZV9pc29fY29udGV4dChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQgKmEgPSAmYXJnLT5jcmVhdGVfaXNvX2NvbnRleHQ7CiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0OwogCiAJLyogV2Ugb25seSBzdXBwb3J0IG9uZSBjb250ZXh0IGF0IHRoaXMgdGltZS4gKi8KIAlpZiAoY2xpZW50LT5pc29fY29udGV4dCAhPSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKHJlcXVlc3QtPmNoYW5uZWwgPiA2MykKKwlpZiAoYS0+Y2hhbm5lbCA+IDYzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN3aXRjaCAocmVxdWVzdC0+dHlwZSkgeworCXN3aXRjaCAoYS0+dHlwZSkgewogCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRToKLQkJaWYgKHJlcXVlc3QtPmhlYWRlcl9zaXplIDwgNCB8fCAocmVxdWVzdC0+aGVhZGVyX3NpemUgJiAzKSkKKwkJaWYgKGEtPmhlYWRlcl9zaXplIDwgNCB8fCAoYS0+aGVhZGVyX3NpemUgJiAzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCWJyZWFrOwogCiAJY2FzZSBGV19JU09fQ09OVEVYVF9UUkFOU01JVDoKLQkJaWYgKHJlcXVlc3QtPnNwZWVkID4gU0NPREVfMzIwMCkKKwkJaWYgKGEtPnNwZWVkID4gU0NPREVfMzIwMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY29udGV4dCA9ICBmd19pc29fY29udGV4dF9jcmVhdGUoY2xpZW50LT5kZXZpY2UtPmNhcmQsCi0JCQkJCSByZXF1ZXN0LT50eXBlLAotCQkJCQkgcmVxdWVzdC0+Y2hhbm5lbCwKLQkJCQkJIHJlcXVlc3QtPnNwZWVkLAotCQkJCQkgcmVxdWVzdC0+aGVhZGVyX3NpemUsCi0JCQkJCSBpc29fY2FsbGJhY2ssIGNsaWVudCk7CisJY29udGV4dCA9IGZ3X2lzb19jb250ZXh0X2NyZWF0ZShjbGllbnQtPmRldmljZS0+Y2FyZCwgYS0+dHlwZSwKKwkJCQkJYS0+Y2hhbm5lbCwgYS0+c3BlZWQsIGEtPmhlYWRlcl9zaXplLAorCQkJCQlpc29fY2FsbGJhY2ssIGNsaWVudCk7CiAJaWYgKElTX0VSUihjb250ZXh0KSkKIAkJcmV0dXJuIFBUUl9FUlIoY29udGV4dCk7CiAKLQljbGllbnQtPmlzb19jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKwljbGllbnQtPmlzb19jbG9zdXJlID0gYS0+Y2xvc3VyZTsKIAljbGllbnQtPmlzb19jb250ZXh0ID0gY29udGV4dDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCBvbmUgY29udGV4dCBhdCB0aGlzIHRpbWUuICovCi0JcmVxdWVzdC0+aGFuZGxlID0gMDsKKwlhLT5oYW5kbGUgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MDYsOSArOTA3LDkgQEAKICNkZWZpbmUgR0VUX1NZKHYpCQkoKCh2KSA+PiAyMCkgJiAweDBmKQogI2RlZmluZSBHRVRfSEVBREVSX0xFTkdUSCh2KQkoKCh2KSA+PiAyNCkgJiAweGZmKQogCi1zdGF0aWMgaW50IGlvY3RsX3F1ZXVlX2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfcXVldWVfaXNvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbyAqYSA9ICZhcmctPnF1ZXVlX2lzbzsKIAlzdHJ1Y3QgZndfY2Rldl9pc29fcGFja2V0IF9fdXNlciAqcCwgKmVuZCwgKm5leHQ7CiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHggPSBjbGllbnQtPmlzb19jb250ZXh0OwogCXVuc2lnbmVkIGxvbmcgcGF5bG9hZCwgYnVmZmVyX2VuZCwgaGVhZGVyX2xlbmd0aDsKQEAgLTkxOSw3ICs5MjAsNyBAQAogCQl1OCBoZWFkZXJbMjU2XTsKIAl9IHU7CiAKLQlpZiAoY3R4ID09IE5VTEwgfHwgcmVxdWVzdC0+aGFuZGxlICE9IDApCisJaWYgKGN0eCA9PSBOVUxMIHx8IGEtPmhhbmRsZSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC05MjksMjMgKzkzMCwyMyBAQAogCSAqIHNldCB0aGVtIGJvdGggdG8gMCwgd2hpY2ggd2lsbCBzdGlsbCBsZXQgcGFja2V0cyB3aXRoCiAJICogcGF5bG9hZF9sZW5ndGggPT0gMCB0aHJvdWdoLiAgSW4gb3RoZXIgd29yZHMsIGlmIG5vIHBhY2tldHMKIAkgKiB1c2UgdGhlIGluZGlyZWN0IHBheWxvYWQsIHRoZSBpc28gYnVmZmVyIG5lZWQgbm90IGJlIG1hcHBlZAotCSAqIGFuZCB0aGUgcmVxdWVzdC0+ZGF0YSBwb2ludGVyIGlzIGlnbm9yZWQuCisJICogYW5kIHRoZSBhLT5kYXRhIHBvaW50ZXIgaXMgaWdub3JlZC4KIAkgKi8KIAotCXBheWxvYWQgPSAodW5zaWduZWQgbG9uZylyZXF1ZXN0LT5kYXRhIC0gY2xpZW50LT52bV9zdGFydDsKKwlwYXlsb2FkID0gKHVuc2lnbmVkIGxvbmcpYS0+ZGF0YSAtIGNsaWVudC0+dm1fc3RhcnQ7CiAJYnVmZmVyX2VuZCA9IGNsaWVudC0+YnVmZmVyLnBhZ2VfY291bnQgPDwgUEFHRV9TSElGVDsKLQlpZiAocmVxdWVzdC0+ZGF0YSA9PSAwIHx8IGNsaWVudC0+YnVmZmVyLnBhZ2VzID09IE5VTEwgfHwKKwlpZiAoYS0+ZGF0YSA9PSAwIHx8IGNsaWVudC0+YnVmZmVyLnBhZ2VzID09IE5VTEwgfHwKIAkgICAgcGF5bG9hZCA+PSBidWZmZXJfZW5kKSB7CiAJCXBheWxvYWQgPSAwOwogCQlidWZmZXJfZW5kID0gMDsKIAl9CiAKLQlwID0gKHN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICopdTY0X3RvX3VwdHIocmVxdWVzdC0+cGFja2V0cyk7CisJcCA9IChzdHJ1Y3QgZndfY2Rldl9pc29fcGFja2V0IF9fdXNlciAqKXU2NF90b191cHRyKGEtPnBhY2tldHMpOwogCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHAsIHJlcXVlc3QtPnNpemUpKQorCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBwLCBhLT5zaXplKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllbmQgPSAodm9pZCBfX3VzZXIgKilwICsgcmVxdWVzdC0+c2l6ZTsKKwllbmQgPSAodm9pZCBfX3VzZXIgKilwICsgYS0+c2l6ZTsKIAljb3VudCA9IDA7CiAJd2hpbGUgKHAgPCBlbmQpIHsKIAkJaWYgKGdldF91c2VyKGNvbnRyb2wsICZwLT5jb250cm9sKSkKQEAgLTk5NSw2MSArOTk2LDc4IEBACiAJCWNvdW50Kys7CiAJfQogCi0JcmVxdWVzdC0+c2l6ZSAgICAtPSB1cHRyX3RvX3U2NChwKSAtIHJlcXVlc3QtPnBhY2tldHM7Ci0JcmVxdWVzdC0+cGFja2V0cyAgPSB1cHRyX3RvX3U2NChwKTsKLQlyZXF1ZXN0LT5kYXRhICAgICA9IGNsaWVudC0+dm1fc3RhcnQgKyBwYXlsb2FkOworCWEtPnNpemUgICAgLT0gdXB0cl90b191NjQocCkgLSBhLT5wYWNrZXRzOworCWEtPnBhY2tldHMgID0gdXB0cl90b191NjQocCk7CisJYS0+ZGF0YSAgICAgPSBjbGllbnQtPnZtX3N0YXJ0ICsgcGF5bG9hZDsKIAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBpb2N0bF9zdGFydF9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX3N0YXJ0X2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbyAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28gKmEgPSAmYXJnLT5zdGFydF9pc287CiAKLQlpZiAoY2xpZW50LT5pc29fY29udGV4dCA9PSBOVUxMIHx8IHJlcXVlc3QtPmhhbmRsZSAhPSAwKQorCWlmIChjbGllbnQtPmlzb19jb250ZXh0ID09IE5VTEwgfHwgYS0+aGFuZGxlICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNsaWVudC0+aXNvX2NvbnRleHQtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfUkVDRUlWRSkgewotCQlpZiAocmVxdWVzdC0+dGFncyA9PSAwIHx8IHJlcXVlc3QtPnRhZ3MgPiAxNSkKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChjbGllbnQtPmlzb19jb250ZXh0LT50eXBlID09IEZXX0lTT19DT05URVhUX1JFQ0VJVkUgJiYKKwkgICAgKGEtPnRhZ3MgPT0gMCB8fCBhLT50YWdzID4gMTUgfHwgYS0+c3luYyA+IDE1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHJlcXVlc3QtPnN5bmMgPiAxNSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBmd19pc29fY29udGV4dF9zdGFydChjbGllbnQtPmlzb19jb250ZXh0LCByZXF1ZXN0LT5jeWNsZSwKLQkJCQkgICAgcmVxdWVzdC0+c3luYywgcmVxdWVzdC0+dGFncyk7CisJcmV0dXJuIGZ3X2lzb19jb250ZXh0X3N0YXJ0KGNsaWVudC0+aXNvX2NvbnRleHQsCisJCQkJICAgIGEtPmN5Y2xlLCBhLT5zeW5jLCBhLT50YWdzKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9zdG9wX2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfc3RvcF9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbyAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbyAqYSA9ICZhcmctPnN0b3BfaXNvOwogCi0JaWYgKGNsaWVudC0+aXNvX2NvbnRleHQgPT0gTlVMTCB8fCByZXF1ZXN0LT5oYW5kbGUgIT0gMCkKKwlpZiAoY2xpZW50LT5pc29fY29udGV4dCA9PSBOVUxMIHx8IGEtPmhhbmRsZSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBmd19pc29fY29udGV4dF9zdG9wKGNsaWVudC0+aXNvX2NvbnRleHQpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2dldF9jeWNsZV90aW1lcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyMihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lciAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyICphID0gJmFyZy0+Z2V0X2N5Y2xlX3RpbWVyMjsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNsaWVudC0+ZGV2aWNlLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBidXNfdGltZTsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0aW1lc3BlYyB0cyA9IHswLCAwfTsKKwl1MzIgY3ljbGVfdGltZTsKKwlpbnQgcmV0ID0gMDsKIAotCXByZWVtcHRfZGlzYWJsZSgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JYnVzX3RpbWUgPSBjYXJkLT5kcml2ZXItPmdldF9idXNfdGltZShjYXJkKTsKLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKwljeWNsZV90aW1lID0gY2FyZC0+ZHJpdmVyLT5nZXRfY3ljbGVfdGltZShjYXJkKTsKIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCXN3aXRjaCAoYS0+Y2xrX2lkKSB7CisJY2FzZSBDTE9DS19SRUFMVElNRTogICAgICBnZXRuc3RpbWVvZmRheSgmdHMpOyAgICAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIENMT0NLX01PTk9UT05JQzogICAgIGRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ0cyk7IGJyZWFrOworCWNhc2UgQ0xPQ0tfTU9OT1RPTklDX1JBVzogZ2V0cmF3bW9ub3RvbmljKCZ0cyk7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CiAKLQlyZXF1ZXN0LT5sb2NhbF90aW1lID0gdHYudHZfc2VjICogMTAwMDAwMFVMTCArIHR2LnR2X3VzZWM7Ci0JcmVxdWVzdC0+Y3ljbGVfdGltZXIgPSBidXNfdGltZSAmIDB4ZmZmZmZmZmY7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJYS0+dHZfc2VjICAgICAgPSB0cy50dl9zZWM7CisJYS0+dHZfbnNlYyAgICAgPSB0cy50dl9uc2VjOworCWEtPmN5Y2xlX3RpbWVyID0gY3ljbGVfdGltZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCit7CisJc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyICphID0gJmFyZy0+Z2V0X2N5Y2xlX3RpbWVyOworCXN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIgY3QyOworCisJY3QyLmNsa19pZCA9IENMT0NLX1JFQUxUSU1FOworCWlvY3RsX2dldF9jeWNsZV90aW1lcjIoY2xpZW50LCAodW5pb24gaW9jdGxfYXJnICopJmN0Mik7CisKKwlhLT5sb2NhbF90aW1lID0gY3QyLnR2X3NlYyAqIFVTRUNfUEVSX1NFQyArIGN0Mi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKwlhLT5jeWNsZV90aW1lciA9IGN0Mi5jeWNsZV90aW1lcjsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMjIwLDMzICsxMjM4LDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQotCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QsIElTT19SRVNfQUxMT0MpOworCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsCisJCQkmYXJnLT5hbGxvY2F0ZV9pc29fcmVzb3VyY2UsIElTT19SRVNfQUxMT0MpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJCSB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOwotCi0JcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAotCQkJCSAgICAgICByZWxlYXNlX2lzb19yZXNvdXJjZSwgTlVMTCk7CisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwKKwkJCWFyZy0+ZGVhbGxvY2F0ZS5oYW5kbGUsIHJlbGVhc2VfaXNvX3Jlc291cmNlLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCQkgICAgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0ID0gYnVmZmVyOwotCi0JcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdCwgSVNPX1JFU19BTExPQ19PTkNFKTsKKwlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LAorCQkJJmFyZy0+YWxsb2NhdGVfaXNvX3Jlc291cmNlLCBJU09fUkVTX0FMTE9DX09OQ0UpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCQkgICAgICB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LCBJU09fUkVTX0RFQUxMT0NfT05DRSk7CisJcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwKKwkJCSZhcmctPmFsbG9jYXRlX2lzb19yZXNvdXJjZSwgSVNPX1JFU19ERUFMTE9DX09OQ0UpOwogfQogCiAvKgpAQCAtMTI1NCwxNiArMTI3MSwxNyBAQAogICogbGltaXRlZCBieSB0aGUgZGV2aWNlJ3MgbGluayBzcGVlZCwgdGhlIGxvY2FsIG5vZGUncyBsaW5rIHNwZWVkLAogICogYW5kIGFsbCBQSFkgcG9ydCBzcGVlZHMgYmV0d2VlbiB0aGUgdHdvIGxpbmtzLgogICovCi1zdGF0aWMgaW50IGlvY3RsX2dldF9zcGVlZChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X3NwZWVkKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7CiAJcmV0dXJuIGNsaWVudC0+ZGV2aWNlLT5tYXhfc3BlZWQ7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfc2VuZF9icm9hZGNhc3RfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9icm9hZGNhc3RfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJCXVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgKmEgPSAmYXJnLT5zZW5kX3JlcXVlc3Q7CiAKLQlzd2l0Y2ggKHJlcXVlc3QtPnRjb2RlKSB7CisJc3dpdGNoIChhLT50Y29kZSkgewogCWNhc2UgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUOgogCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKIAkJYnJlYWs7CkBAIC0xMjcyLDM2ICsxMjkwLDM2IEBACiAJfQogCiAJLyogU2VjdXJpdHkgcG9saWN5OiBPbmx5IGFsbG93IGFjY2Vzc2VzIHRvIFVuaXRzIFNwYWNlLiAqLwotCWlmIChyZXF1ZXN0LT5vZmZzZXQgPCBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DT05GSUdfUk9NX0VORCkKKwlpZiAoYS0+b2Zmc2V0IDwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ09ORklHX1JPTV9FTkQpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIExPQ0FMX0JVUyB8IDB4M2YsIFNDT0RFXzEwMCk7CisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIGEsIExPQ0FMX0JVUyB8IDB4M2YsIFNDT0RFXzEwMCk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfc2VuZF9zdHJlYW1fcGFja2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9zZW5kX3N0cmVhbV9wYWNrZXQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgKnAgPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0ICphID0gJmFyZy0+c2VuZF9zdHJlYW1fcGFja2V0OwogCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCByZXF1ZXN0OwogCWludCBkZXN0OwogCi0JaWYgKHAtPnNwZWVkID4gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmxpbmtfc3BlZWQgfHwKLQkgICAgcC0+bGVuZ3RoID4gMTAyNCA8PCBwLT5zcGVlZCkKKwlpZiAoYS0+c3BlZWQgPiBjbGllbnQtPmRldmljZS0+Y2FyZC0+bGlua19zcGVlZCB8fAorCSAgICBhLT5sZW5ndGggPiAxMDI0IDw8IGEtPnNwZWVkKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChwLT50YWcgPiAzIHx8IHAtPmNoYW5uZWwgPiA2MyB8fCBwLT5zeSA+IDE1KQorCWlmIChhLT50YWcgPiAzIHx8IGEtPmNoYW5uZWwgPiA2MyB8fCBhLT5zeSA+IDE1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRlc3QgPSBmd19zdHJlYW1fcGFja2V0X2Rlc3RpbmF0aW9uX2lkKHAtPnRhZywgcC0+Y2hhbm5lbCwgcC0+c3kpOworCWRlc3QgPSBmd19zdHJlYW1fcGFja2V0X2Rlc3RpbmF0aW9uX2lkKGEtPnRhZywgYS0+Y2hhbm5lbCwgYS0+c3kpOwogCXJlcXVlc3QudGNvZGUJCT0gVENPREVfU1RSRUFNX0RBVEE7Ci0JcmVxdWVzdC5sZW5ndGgJCT0gcC0+bGVuZ3RoOwotCXJlcXVlc3QuY2xvc3VyZQkJPSBwLT5jbG9zdXJlOwotCXJlcXVlc3QuZGF0YQkJPSBwLT5kYXRhOwotCXJlcXVlc3QuZ2VuZXJhdGlvbgk9IHAtPmdlbmVyYXRpb247CisJcmVxdWVzdC5sZW5ndGgJCT0gYS0+bGVuZ3RoOworCXJlcXVlc3QuY2xvc3VyZQkJPSBhLT5jbG9zdXJlOworCXJlcXVlc3QuZGF0YQkJPSBhLT5kYXRhOworCXJlcXVlc3QuZ2VuZXJhdGlvbgk9IGEtPmdlbmVyYXRpb247CiAKLQlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgJnJlcXVlc3QsIGRlc3QsIHAtPnNwZWVkKTsKKwlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgJnJlcXVlc3QsIGRlc3QsIGEtPnNwZWVkKTsKIH0KIAotc3RhdGljIGludCAoKiBjb25zdCBpb2N0bF9oYW5kbGVyc1tdKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikgPSB7CitzdGF0aWMgaW50ICgqIGNvbnN0IGlvY3RsX2hhbmRsZXJzW10pKHN0cnVjdCBjbGllbnQgKiwgdW5pb24gaW9jdGxfYXJnICopID0gewogCWlvY3RsX2dldF9pbmZvLAogCWlvY3RsX3NlbmRfcmVxdWVzdCwKIAlpb2N0bF9hbGxvY2F0ZSwKQEAgLTEzMjIsNDcgKzEzNDAsMzUgQEAKIAlpb2N0bF9nZXRfc3BlZWQsCiAJaW9jdGxfc2VuZF9icm9hZGNhc3RfcmVxdWVzdCwKIAlpb2N0bF9zZW5kX3N0cmVhbV9wYWNrZXQsCisJaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyMiwKIH07CiAKIHN0YXRpYyBpbnQgZGlzcGF0Y2hfaW9jdGwoc3RydWN0IGNsaWVudCAqY2xpZW50LAogCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewotCWNoYXIgYnVmZmVyW3NpemVvZih1bmlvbiB7Ci0JCXN0cnVjdCBmd19jZGV2X2dldF9pbmZvCQkJXzAwOwotCQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QJCV8wMTsKLQkJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUJCQlfMDI7Ci0JCXN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUJCV8wMzsKLQkJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZQkJXzA0OwotCQlzdHJ1Y3QgZndfY2Rldl9pbml0aWF0ZV9idXNfcmVzZXQJXzA1OwotCQlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcgkJXzA2OwotCQlzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvcglfMDc7Ci0JCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dAlfMDg7Ci0JCXN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbwkJXzA5OwotCQlzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28JCV8wYTsKLQkJc3RydWN0IGZ3X2NkZXZfc3RvcF9pc28JCQlfMGI7Ci0JCXN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcgkJXzBjOwotCQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UJXzBkOwotCQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQJXzEzOwotCX0pXTsKKwl1bmlvbiBpb2N0bF9hcmcgYnVmZmVyOwogCWludCByZXQ7CiAKKwlpZiAoZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJyMnIHx8CiAJICAgIF9JT0NfTlIoY21kKSA+PSBBUlJBWV9TSVpFKGlvY3RsX2hhbmRsZXJzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpIHsKIAkJaWYgKF9JT0NfU0laRShjbWQpID4gc2l6ZW9mKGJ1ZmZlcikgfHwKLQkJICAgIGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCSAgICBjb3B5X2Zyb21fdXNlcigmYnVmZmVyLCBhcmcsIF9JT0NfU0laRShjbWQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldCA9IGlvY3RsX2hhbmRsZXJzW19JT0NfTlIoY21kKV0oY2xpZW50LCBidWZmZXIpOworCXJldCA9IGlvY3RsX2hhbmRsZXJzW19JT0NfTlIoY21kKV0oY2xpZW50LCAmYnVmZmVyKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSB7CiAJCWlmIChfSU9DX1NJWkUoY21kKSA+IHNpemVvZihidWZmZXIpIHx8Ci0JCSAgICBjb3B5X3RvX3VzZXIoYXJnLCBidWZmZXIsIF9JT0NfU0laRShjbWQpKSkKKwkJICAgIGNvcHlfdG9fdXNlcihhcmcsICZidWZmZXIsIF9JT0NfU0laRShjbWQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMTM3MiwyNCArMTM3OCwxNCBAQAogc3RhdGljIGxvbmcgZndfZGV2aWNlX29wX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiBkaXNwYXRjaF9pb2N0bChjbGllbnQsIGNtZCwgKHZvaWQgX191c2VyICopIGFyZyk7CisJcmV0dXJuIGRpc3BhdGNoX2lvY3RsKGZpbGUtPnByaXZhdGVfZGF0YSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogc3RhdGljIGxvbmcgZndfZGV2aWNlX29wX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gZGlzcGF0Y2hfaW9jdGwoY2xpZW50LCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7CisJcmV0dXJuIGRpc3BhdGNoX2lvY3RsKGZpbGUtPnByaXZhdGVfZGF0YSwgY21kLCBjb21wYXRfcHRyKGFyZykpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYwppbmRleCA5ZDBkZmNiLi4wMTRjYWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC00Myw3ICs0NCw3IEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAKLXZvaWQgZndfY3NyX2l0ZXJhdG9yX2luaXQoc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciAqY2ksIHUzMiAqIHApCit2b2lkIGZ3X2Nzcl9pdGVyYXRvcl9pbml0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLCBjb25zdCB1MzIgKnApCiB7CiAJY2ktPnAgPSBwICsgMTsKIAljaS0+ZW5kID0gY2ktPnAgKyAocFswXSA+PiAxNik7CkBAIC01OSw5ICs2MCw3NiBAQAogfQogRVhQT1JUX1NZTUJPTChmd19jc3JfaXRlcmF0b3JfbmV4dCk7CiAKK3N0YXRpYyBjb25zdCB1MzIgKnNlYXJjaF9sZWFmKGNvbnN0IHUzMiAqZGlyZWN0b3J5LCBpbnQgc2VhcmNoX2tleSkKK3sKKwlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOworCWludCBsYXN0X2tleSA9IDAsIGtleSwgdmFsdWU7CisKKwlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcmVjdG9yeSk7CisJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgeworCQlpZiAobGFzdF9rZXkgPT0gc2VhcmNoX2tleSAmJgorCQkgICAga2V5ID09IChDU1JfREVTQ1JJUFRPUiB8IENTUl9MRUFGKSkKKwkJCXJldHVybiBjaS5wIC0gMSArIHZhbHVlOworCisJCWxhc3Rfa2V5ID0ga2V5OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRleHR1YWxfbGVhZl90b19zdHJpbmcoY29uc3QgdTMyICpibG9jaywgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcXVhZGxldHMsIGk7CisJY2hhciBjOworCisJaWYgKCFzaXplIHx8ICFidWYpCisJCXJldHVybiAtRUlOVkFMOworCisJcXVhZGxldHMgPSBtaW4oYmxvY2tbMF0gPj4gMTYsIDI1NlUpOworCWlmIChxdWFkbGV0cyA8IDIpCisJCXJldHVybiAtRU5PREFUQTsKKworCWlmIChibG9ja1sxXSAhPSAwIHx8IGJsb2NrWzJdICE9IDApCisJCS8qIHVua25vd24gbGFuZ3VhZ2UvY2hhcmFjdGVyIHNldCAqLworCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlibG9jayArPSAzOworCXF1YWRsZXRzIC09IDI7CisJZm9yIChpID0gMDsgaSA8IHF1YWRsZXRzICogNCAmJiBpIDwgc2l6ZSAtIDE7IGkrKykgeworCQljID0gYmxvY2tbaSAvIDRdID4+ICgyNCAtIDggKiAoaSAlIDQpKTsKKwkJaWYgKGMgPT0gJ1wwJykKKwkJCWJyZWFrOworCQlidWZbaV0gPSBjOworCX0KKwlidWZbaV0gPSAnXDAnOworCisJcmV0dXJuIGk7Cit9CisKKy8qKgorICogZndfY3NyX3N0cmluZyAtIHJlYWRzIGEgc3RyaW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gUk9NCisgKiBAZGlyZWN0b3J5OiBlLmcuIHJvb3QgZGlyZWN0b3J5IG9yIHVuaXQgZGlyZWN0b3J5CisgKiBAa2V5OiB0aGUga2V5IG9mIHRoZSBwcmVjZWRpbmcgZGlyZWN0b3J5IGVudHJ5CisgKiBAYnVmOiB3aGVyZSB0byBwdXQgdGhlIHN0cmluZworICogQHNpemU6IHNpemUgb2YgQGJ1ZiwgaW4gYnl0ZXMKKyAqCisgKiBUaGUgc3RyaW5nIGlzIHRha2VuIGZyb20gYSBtaW5pbWFsIEFTQ0lJIHRleHQgZGVzY3JpcHRvciBsZWFmIGFmdGVyCisgKiB0aGUgaW1tZWRpYXRlIGVudHJ5IHdpdGggQGtleS4gIFRoZSBzdHJpbmcgaXMgemVyby10ZXJtaW5hdGVkLgorICogUmV0dXJucyBzdHJsZW4oYnVmKSBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBmd19jc3Jfc3RyaW5nKGNvbnN0IHUzMiAqZGlyZWN0b3J5LCBpbnQga2V5LCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWNvbnN0IHUzMiAqbGVhZiA9IHNlYXJjaF9sZWFmKGRpcmVjdG9yeSwga2V5KTsKKwlpZiAoIWxlYWYpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIHRleHR1YWxfbGVhZl90b19zdHJpbmcobGVhZiwgYnVmLCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woZndfY3NyX3N0cmluZyk7CisKIHN0YXRpYyBib29sIGlzX2Z3X3VuaXQoc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGludCBtYXRjaF91bml0X2RpcmVjdG9yeSh1MzIgKmRpcmVjdG9yeSwgdTMyIG1hdGNoX2ZsYWdzLAorc3RhdGljIGludCBtYXRjaF91bml0X2RpcmVjdG9yeShjb25zdCB1MzIgKmRpcmVjdG9yeSwgdTMyIG1hdGNoX2ZsYWdzLAogCQkJCWNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CkBAIC0xOTUsNyArMjYzLDcgQEAKIAlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQogCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CiAJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKLQl1MzIgKmRpcjsKKwljb25zdCB1MzIgKmRpcjsKIAlpbnQga2V5LCB2YWx1ZSwgcmV0ID0gLUVOT0VOVDsKIAogCWRvd25fcmVhZCgmZndfZGV2aWNlX3J3c2VtKTsKQEAgLTIyNiwxMCArMjk0LDEwIEBACiB7CiAJc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlICphdHRyID0KIAkJY29udGFpbmVyX29mKGRhdHRyLCBzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUsIGF0dHIpOwotCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7Ci0JdTMyICpkaXIsICpibG9jayA9IE5VTEwsICpwLCAqZW5kOwotCWludCBsZW5ndGgsIGtleSwgdmFsdWUsIGxhc3Rfa2V5ID0gMCwgcmV0ID0gLUVOT0VOVDsKLQljaGFyICpiOworCWNvbnN0IHUzMiAqZGlyOworCXNpemVfdCBidWZzaXplOworCWNoYXIgZHVtbXlfYnVmWzJdOworCWludCByZXQ7CiAKIAlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKQEAgLTIzOCw0MCArMzA2LDIzIEBACiAJZWxzZQogCQlkaXIgPSBmd19kZXZpY2UoZGV2KS0+Y29uZmlnX3JvbSArIDU7CiAKLQlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcik7Ci0Jd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgewotCQlpZiAoYXR0ci0+a2V5ID09IGxhc3Rfa2V5ICYmCi0JCSAgICBrZXkgPT0gKENTUl9ERVNDUklQVE9SIHwgQ1NSX0xFQUYpKQotCQkJYmxvY2sgPSBjaS5wIC0gMSArIHZhbHVlOwotCQlsYXN0X2tleSA9IGtleTsKKwlpZiAoYnVmKSB7CisJCWJ1ZnNpemUgPSBQQUdFX1NJWkUgLSAxOworCX0gZWxzZSB7CisJCWJ1ZiA9IGR1bW15X2J1ZjsKKwkJYnVmc2l6ZSA9IDE7CiAJfQogCi0JaWYgKGJsb2NrID09IE5VTEwpCi0JCWdvdG8gb3V0OworCXJldCA9IGZ3X2Nzcl9zdHJpbmcoZGlyLCBhdHRyLT5rZXksIGJ1ZiwgYnVmc2l6ZSk7CiAKLQlsZW5ndGggPSBtaW4oYmxvY2tbMF0gPj4gMTYsIDI1NlUpOwotCWlmIChsZW5ndGggPCAzKQotCQlnb3RvIG91dDsKLQotCWlmIChibG9ja1sxXSAhPSAwIHx8IGJsb2NrWzJdICE9IDApCi0JCS8qIFVua25vd24gZW5jb2RpbmcuICovCi0JCWdvdG8gb3V0OwotCi0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCXJldCA9IGxlbmd0aCAqIDQ7Ci0JCWdvdG8gb3V0OworCWlmIChyZXQgPj0gMCkgeworCQkvKiBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBhZGQgbmV3bGluZS4gKi8KKwkJd2hpbGUgKHJldCA+IDAgJiYgaXNzcGFjZShidWZbcmV0IC0gMV0pKQorCQkJcmV0LS07CisJCXN0cmNweShidWYgKyByZXQsICJcbiIpOworCQlyZXQrKzsKIAl9CiAKLQliID0gYnVmOwotCWVuZCA9ICZibG9ja1tsZW5ndGggKyAxXTsKLQlmb3IgKHAgPSAmYmxvY2tbM107IHAgPCBlbmQ7IHArKywgYiArPSA0KQotCQkqICh1MzIgKikgYiA9IChfX2ZvcmNlIHUzMikgX19jcHVfdG9fYmUzMigqcCk7Ci0KLQkvKiBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBhZGQgbmV3bGluZS4gKi8KLQl3aGlsZSAoYi0tLCAoaXNzcGFjZSgqYikgfHwgKmIgPT0gJ1wwJykgJiYgYiA+IGJ1Zik7Ci0Jc3RyY3B5KGIgKyAxLCAiXG4iKTsKLQlyZXQgPSBiICsgMiAtIGJ1ZjsKLSBvdXQ6CiAJdXBfcmVhZCgmZndfZGV2aWNlX3J3c2VtKTsKIAogCXJldHVybiByZXQ7CkBAIC0zNzEsNyArNDIyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHVuaXRzX3NwcmludGYoY2hhciAqYnVmLCB1MzIgKmRpcmVjdG9yeSkKK3N0YXRpYyBpbnQgdW5pdHNfc3ByaW50ZihjaGFyICpidWYsIGNvbnN0IHUzMiAqZGlyZWN0b3J5KQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJaW50IGtleSwgdmFsdWU7CkBAIC00NDEsMjggKzQ5MiwyOSBAQAogCXJldHVybiByY29kZTsKIH0KIAotI2RlZmluZSBSRUFEX0JJQl9ST01fU0laRQkyNTYKLSNkZWZpbmUgUkVBRF9CSUJfU1RBQ0tfU0laRQkxNgorI2RlZmluZSBNQVhfQ09ORklHX1JPTV9TSVpFIDI1NgogCiAvKgogICogUmVhZCB0aGUgYnVzIGluZm8gYmxvY2ssIHBlcmZvcm0gYSBzcGVlZCBwcm9iZSwgYW5kIHJlYWQgYWxsIG9mIHRoZSByZXN0IG9mCiAgKiB0aGUgY29uZmlnIFJPTS4gIFdlIGRvIGFsbCB0aGlzIHdpdGggYSBjYWNoZWQgYnVzIGdlbmVyYXRpb24uICBJZiB0aGUgYnVzCi0gKiBnZW5lcmF0aW9uIGNoYW5nZXMgdW5kZXIgdXMsIHJlYWRfYnVzX2luZm9fYmxvY2sgd2lsbCBmYWlsIGFuZCBnZXQgcmV0cmllZC4KKyAqIGdlbmVyYXRpb24gY2hhbmdlcyB1bmRlciB1cywgcmVhZF9jb25maWdfcm9tIHdpbGwgZmFpbCBhbmQgZ2V0IHJldHJpZWQuCiAgKiBJdCdzIGJldHRlciB0byBzdGFydCBhbGwgb3ZlciBpbiB0aGlzIGNhc2UgYmVjYXVzZSB0aGUgbm9kZSBmcm9tIHdoaWNoIHdlCiAgKiBhcmUgcmVhZGluZyB0aGUgUk9NIG1heSBoYXZlIGNoYW5nZWQgdGhlIFJPTSBkdXJpbmcgdGhlIHJlc2V0LgogICovCi1zdGF0aWMgaW50IHJlYWRfYnVzX2luZm9fYmxvY2soc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBpbnQgcmVhZF9jb25maWdfcm9tKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgaW50IGdlbmVyYXRpb24pCiB7Ci0JdTMyICpyb20sICpzdGFjaywgKm9sZF9yb20sICpuZXdfcm9tOworCWNvbnN0IHUzMiAqb2xkX3JvbSwgKm5ld19yb207CisJdTMyICpyb20sICpzdGFjazsKIAl1MzIgc3AsIGtleTsKIAlpbnQgaSwgZW5kLCBsZW5ndGgsIHJldCA9IC0xOwogCi0Jcm9tID0ga21hbGxvYyhzaXplb2YoKnJvbSkgKiBSRUFEX0JJQl9ST01fU0laRSArCi0JCSAgICAgIHNpemVvZigqc3RhY2spICogUkVBRF9CSUJfU1RBQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJcm9tID0ga21hbGxvYyhzaXplb2YoKnJvbSkgKiBNQVhfQ09ORklHX1JPTV9TSVpFICsKKwkJICAgICAgc2l6ZW9mKCpzdGFjaykgKiBNQVhfQ09ORklHX1JPTV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAocm9tID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3RhY2sgPSAmcm9tW1JFQURfQklCX1JPTV9TSVpFXTsKKwlzdGFjayA9ICZyb21bTUFYX0NPTkZJR19ST01fU0laRV07CisJbWVtc2V0KHJvbSwgMCwgc2l6ZW9mKCpyb20pICogTUFYX0NPTkZJR19ST01fU0laRSk7CiAKIAlkZXZpY2UtPm1heF9zcGVlZCA9IFNDT0RFXzEwMDsKIApAQCAtNTI5LDQwICs1ODEsNTQgQEAKIAkJICovCiAJCWtleSA9IHN0YWNrWy0tc3BdOwogCQlpID0ga2V5ICYgMHhmZmZmZmY7Ci0JCWlmIChpID49IFJFQURfQklCX1JPTV9TSVpFKQotCQkJLyoKLQkJCSAqIFRoZSByZWZlcmVuY2UgcG9pbnRzIG91dHNpZGUgdGhlIHN0YW5kYXJkCi0JCQkgKiBjb25maWcgcm9tIGFyZWEsIHNvbWV0aGluZydzIGZpc2h5LgotCQkJICovCisJCWlmIChXQVJOX09OKGkgPj0gTUFYX0NPTkZJR19ST01fU0laRSkpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBSZWFkIGhlYWRlciBxdWFkbGV0IGZvciB0aGUgYmxvY2sgdG8gZ2V0IHRoZSBsZW5ndGguICovCiAJCWlmIChyZWFkX3JvbShkZXZpY2UsIGdlbmVyYXRpb24sIGksICZyb21baV0pICE9IFJDT0RFX0NPTVBMRVRFKQogCQkJZ290byBvdXQ7CiAJCWVuZCA9IGkgKyAocm9tW2ldID4+IDE2KSArIDE7Ci0JCWkrKzsKLQkJaWYgKGVuZCA+IFJFQURfQklCX1JPTV9TSVpFKQorCQlpZiAoZW5kID4gTUFYX0NPTkZJR19ST01fU0laRSkgewogCQkJLyoKLQkJCSAqIFRoaXMgYmxvY2sgZXh0ZW5kcyBvdXRzaWRlIHN0YW5kYXJkIGNvbmZpZwotCQkJICogYXJlYSAoYW5kIHRoZSBhcnJheSB3ZSdyZSByZWFkaW5nIGl0Ci0JCQkgKiBpbnRvKS4gIFRoYXQncyBicm9rZW4sIHNvIGlnbm9yZSB0aGlzCi0JCQkgKiBkZXZpY2UuCisJCQkgKiBUaGlzIGJsb2NrIGV4dGVuZHMgb3V0c2lkZSB0aGUgY29uZmlnIFJPTSB3aGljaCBpcworCQkJICogYSBmaXJtd2FyZSBidWcuICBJZ25vcmUgdGhpcyB3aG9sZSBibG9jaywgaS5lLgorCQkJICogc2ltcGx5IHNldCBhIGZha2UgYmxvY2sgbGVuZ3RoIG9mIDAuCiAJCQkgKi8KLQkJCWdvdG8gb3V0OworCQkJZndfZXJyb3IoInNraXBwZWQgaW52YWxpZCBST00gYmxvY2sgJXggYXQgJWxseFxuIiwKKwkJCQkgcm9tW2ldLAorCQkJCSBpICogNCB8IENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00pOworCQkJcm9tW2ldID0gMDsKKwkJCWVuZCA9IGk7CisJCX0KKwkJaSsrOwogCiAJCS8qCiAJCSAqIE5vdyByZWFkIGluIHRoZSBibG9jay4gIElmIHRoaXMgaXMgYSBkaXJlY3RvcnkKIAkJICogYmxvY2ssIGNoZWNrIHRoZSBlbnRyaWVzIGFzIHdlIHJlYWQgdGhlbSB0byBzZWUgaWYKIAkJICogaXQgcmVmZXJlbmNlcyBhbm90aGVyIGJsb2NrLCBhbmQgcHVzaCBpdCBpbiB0aGF0IGNhc2UuCiAJCSAqLwotCQl3aGlsZSAoaSA8IGVuZCkgeworCQlmb3IgKDsgaSA8IGVuZDsgaSsrKSB7CiAJCQlpZiAocmVhZF9yb20oZGV2aWNlLCBnZW5lcmF0aW9uLCBpLCAmcm9tW2ldKSAhPQogCQkJICAgIFJDT0RFX0NPTVBMRVRFKQogCQkJCWdvdG8gb3V0OwotCQkJaWYgKChrZXkgPj4gMzApID09IDMgJiYgKHJvbVtpXSA+PiAzMCkgPiAxICYmCi0JCQkgICAgc3AgPCBSRUFEX0JJQl9TVEFDS19TSVpFKQotCQkJCXN0YWNrW3NwKytdID0gaSArIHJvbVtpXTsKLQkJCWkrKzsKKworCQkJaWYgKChrZXkgPj4gMzApICE9IDMgfHwgKHJvbVtpXSA+PiAzMCkgPCAyKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIE9mZnNldCBwb2ludHMgb3V0c2lkZSB0aGUgUk9NLiAgTWF5IGJlIGEgZmlybXdhcmUKKwkJCSAqIGJ1ZyBvciBhbiBFeHRlbmRlZCBST00gZW50cnkgKElFRUUgMTIxMi0yMDAxIGNsYXVzZQorCQkJICogNy43LjE4KS4gIFNpbXBseSBvdmVyd3JpdGUgdGhpcyBwb2ludGVyIGhlcmUgYnkgYQorCQkJICogZmFrZSBpbW1lZGlhdGUgZW50cnkgc28gdGhhdCBsYXRlciBpdGVyYXRvcnMgb3ZlcgorCQkJICogdGhlIFJPTSBkb24ndCBoYXZlIHRvIGNoZWNrIG9mZnNldHMgYWxsIHRoZSB0aW1lLgorCQkJICovCisJCQlpZiAoaSArIChyb21baV0gJiAweGZmZmZmZikgPj0gTUFYX0NPTkZJR19ST01fU0laRSkgeworCQkJCWZ3X2Vycm9yKCJza2lwcGVkIHVuc3VwcG9ydGVkIFJPTSBlbnRyeSAleCBhdCAlbGx4XG4iLAorCQkJCQkgcm9tW2ldLAorCQkJCQkgaSAqIDQgfCBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9DT05GSUdfUk9NKTsKKwkJCQlyb21baV0gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RhY2tbc3ArK10gPSBpICsgcm9tW2ldOwogCQl9CiAJCWlmIChsZW5ndGggPCBpKQogCQkJbGVuZ3RoID0gaTsKQEAgLTkwNSw3ICs5NzEsNyBAQAogCSAqIGRldmljZS4KIAkgKi8KIAotCWlmIChyZWFkX2J1c19pbmZvX2Jsb2NrKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSA8IDApIHsKKwlpZiAocmVhZF9jb25maWdfcm9tKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSA8IDApIHsKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwpAQCAtMTAyMiw3ICsxMDg4LDcgQEAKIH07CiAKIC8qIFJlcmVhZCBhbmQgY29tcGFyZSBidXMgaW5mbyBibG9jayBhbmQgaGVhZGVyIG9mIHJvb3QgZGlyZWN0b3J5ICovCi1zdGF0aWMgaW50IHJlcmVhZF9idXNfaW5mb19ibG9jayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCByZXJlYWRfY29uZmlnX3JvbShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKQogewogCXUzMiBxOwogCWludCBpOwpAQCAtMTA0OCw3ICsxMTE0LDcgQEAKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKIAlpbnQgbm9kZV9pZCA9IGRldmljZS0+bm9kZV9pZDsKIAotCXN3aXRjaCAocmVyZWFkX2J1c19pbmZvX2Jsb2NrKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSkgeworCXN3aXRjaCAocmVyZWFkX2NvbmZpZ19yb20oZGV2aWNlLCBkZXZpY2UtPmdlbmVyYXRpb24pKSB7CiAJY2FzZSBSRVJFQURfQklCX0VSUk9SOgogCQlpZiAoZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPCBNQVhfUkVUUklFUyAvIDIgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CkBAIC0xMDgyLDcgKzExNDgsNyBAQAogCSAqLwogCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHNodXRkb3duX3VuaXQpOwogCi0JaWYgKHJlYWRfYnVzX2luZm9fYmxvY2soZGV2aWNlLCBkZXZpY2UtPmdlbmVyYXRpb24pIDwgMCkgeworCWlmIChyZWFkX2NvbmZpZ19yb20oZGV2aWNlLCBkZXZpY2UtPmdlbmVyYXRpb24pIDwgMCkgewogCQlpZiAoZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPCBNQVhfUkVUUklFUyAmJgogCQkgICAgYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9JTklUSUFMSVpJTkcpIHsKIAkJCWRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCmluZGV4IDQ5NTg0OWUuLjY3M2IwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCkBAIC05MjEsMjMgKzkyMSwxNSBAQAogCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewogCWludCByZWcgPSBvZmZzZXQgJiB+Q1NSX1JFR0lTVEVSX0JBU0U7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGJ1c190aW1lOwogCV9fYmUzMiAqZGF0YSA9IHBheWxvYWQ7CiAJaW50IHJjb2RlID0gUkNPREVfQ09NUExFVEU7CiAKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgQ1NSX0NZQ0xFX1RJTUU6Ci0JY2FzZSBDU1JfQlVTX1RJTUU6Ci0JCWlmICghVENPREVfSVNfUkVBRF9SRVFVRVNUKHRjb2RlKSB8fCBsZW5ndGggIT0gNCkgewotCQkJcmNvZGUgPSBSQ09ERV9UWVBFX0VSUk9SOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlidXNfdGltZSA9IGNhcmQtPmRyaXZlci0+Z2V0X2J1c190aW1lKGNhcmQpOwotCQlpZiAocmVnID09IENTUl9DWUNMRV9USU1FKQotCQkJKmRhdGEgPSBjcHVfdG9fYmUzMihidXNfdGltZSk7CisJCWlmIChUQ09ERV9JU19SRUFEX1JFUVVFU1QodGNvZGUpICYmIGxlbmd0aCA9PSA0KQorCQkJKmRhdGEgPSBjcHVfdG9fYmUzMihjYXJkLT5kcml2ZXItPmdldF9jeWNsZV90aW1lKGNhcmQpKTsKIAkJZWxzZQotCQkJKmRhdGEgPSBjcHVfdG9fYmUzMihidXNfdGltZSA+PiAyNSk7CisJCQlyY29kZSA9IFJDT0RFX1RZUEVfRVJST1I7CiAJCWJyZWFrOwogCiAJY2FzZSBDU1JfQlJPQURDQVNUX0NIQU5ORUw6CkBAIC05NjgsNiArOTYwLDkgQEAKIAljYXNlIENTUl9CVVNZX1RJTUVPVVQ6CiAJCS8qIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gKi8KIAorCWNhc2UgQ1NSX0JVU19USU1FOgorCQkvKiBVc2VsZXNzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gYnkgdGhlIGJ1cyBtYW5hZ2VyLiAqLworCiAJZGVmYXVsdDoKIAkJcmNvZGUgPSBSQ09ERV9BRERSRVNTX0VSUk9SOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKaW5kZXggZWQzYjFhNy4uZmIwMzIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKQEAgLTcwLDcgKzcwLDcgQEAKIAlpbnQgKCplbmFibGVfcGh5c19kbWEpKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkJICAgICAgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbik7CiAKLQl1NjQgKCpnZXRfYnVzX3RpbWUpKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKKwl1MzIgKCpnZXRfY3ljbGVfdGltZSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwogCiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKIAkoKmFsbG9jYXRlX2lzb19jb250ZXh0KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKaW5kZXggNDNlYmYzMzcuLjc1ZGM2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC03MywyMCArNzIsNiBAQAogCV9fbGUxNiB0cmFuc2Zlcl9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CiAKLXN0cnVjdCBkYl9kZXNjcmlwdG9yIHsKLQlfX2xlMTYgZmlyc3Rfc2l6ZTsKLQlfX2xlMTYgY29udHJvbDsKLQlfX2xlMTYgc2Vjb25kX3JlcV9jb3VudDsKLQlfX2xlMTYgZmlyc3RfcmVxX2NvdW50OwotCV9fbGUzMiBicmFuY2hfYWRkcmVzczsKLQlfX2xlMTYgc2Vjb25kX3Jlc19jb3VudDsKLQlfX2xlMTYgZmlyc3RfcmVzX2NvdW50OwotCV9fbGUzMiByZXNlcnZlZDA7Ci0JX19sZTMyIGZpcnN0X2J1ZmZlcjsKLQlfX2xlMzIgc2Vjb25kX2J1ZmZlcjsKLQlfX2xlMzIgcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotCiAjZGVmaW5lIENPTlRST0xfU0VUKHJlZ3MpCShyZWdzKQogI2RlZmluZSBDT05UUk9MX0NMRUFSKHJlZ3MpCSgocmVncykgKyA0KQogI2RlZmluZSBDT01NQU5EX1BUUihyZWdzKQkoKHJlZ3MpICsgMTIpCkBAIC0xODEsMzEgKzE2NiwxNiBAQAogCXN0cnVjdCBmd19jYXJkIGNhcmQ7CiAKIAlfX2lvbWVtIGNoYXIgKnJlZ2lzdGVyczsKLQlkbWFfYWRkcl90IHNlbGZfaWRfYnVzOwotCV9fbGUzMiAqc2VsZl9pZF9jcHU7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJ1c19yZXNldF90YXNrbGV0OwogCWludCBub2RlX2lkOwogCWludCBnZW5lcmF0aW9uOwogCWludCByZXF1ZXN0X2dlbmVyYXRpb247CS8qIGZvciB0aW1lc3RhbXBpbmcgaW5jb21pbmcgcmVxdWVzdHMgKi8KLQlhdG9taWNfdCBidXNfc2Vjb25kczsKLQotCWJvb2wgdXNlX2R1YWxidWZmZXI7Ci0JYm9vbCBvbGRfdW5pbm9ydGg7Ci0JYm9vbCBidXNfcmVzZXRfcGFja2V0X3F1aXJrOworCXVuc2lnbmVkIHF1aXJrczsKIAogCS8qCiAJICogU3BpbmxvY2sgZm9yIGFjY2Vzc2luZyBmd19vaGNpIGRhdGEuICBOZXZlciBjYWxsIG91dCBvZgogCSAqIHRoaXMgZHJpdmVyIHdpdGggdGhpcyBsb2NrIGhlbGQuCiAJICovCiAJc3BpbmxvY2tfdCBsb2NrOwotCXUzMiBzZWxmX2lkX2J1ZmZlcls1MTJdOwotCi0JLyogQ29uZmlnIHJvbSBidWZmZXJzICovCi0JX19iZTMyICpjb25maWdfcm9tOwotCWRtYV9hZGRyX3QgY29uZmlnX3JvbV9idXM7Ci0JX19iZTMyICpuZXh0X2NvbmZpZ19yb207Ci0JZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOwotCV9fYmUzMiBuZXh0X2hlYWRlcjsKIAogCXN0cnVjdCBhcl9jb250ZXh0IGFyX3JlcXVlc3RfY3R4OwogCXN0cnVjdCBhcl9jb250ZXh0IGFyX3Jlc3BvbnNlX2N0eDsKQEAgLTIxNyw2ICsxODcsMTggQEAKIAl1NjQgaXJfY29udGV4dF9jaGFubmVsczsKIAl1MzIgaXJfY29udGV4dF9tYXNrOwogCXN0cnVjdCBpc29fY29udGV4dCAqaXJfY29udGV4dF9saXN0OworCisJX19iZTMyICAgICpjb25maWdfcm9tOworCWRtYV9hZGRyX3QgY29uZmlnX3JvbV9idXM7CisJX19iZTMyICAgICpuZXh0X2NvbmZpZ19yb207CisJZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOworCV9fYmUzMiAgICAgbmV4dF9oZWFkZXI7CisKKwlfX2xlMzIgICAgKnNlbGZfaWRfY3B1OworCWRtYV9hZGRyX3Qgc2VsZl9pZF9idXM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJ1c19yZXNldF90YXNrbGV0OworCisJdTMyIHNlbGZfaWRfYnVmZmVyWzUxMl07CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19vaGNpICpmd19vaGNpKHN0cnVjdCBmd19jYXJkICpjYXJkKQpAQCAtMjQ5LDYgKzIzMSwzMCBAQAogCiBzdGF0aWMgY2hhciBvaGNpX2RyaXZlcl9uYW1lW10gPSBLQlVJTERfTU9ETkFNRTsKIAorI2RlZmluZSBRVUlSS19DWUNMRV9USU1FUgkJMQorI2RlZmluZSBRVUlSS19SRVNFVF9QQUNLRVQJCTIKKyNkZWZpbmUgUVVJUktfQkVfSEVBREVSUwkJNAorCisvKiBJbiBjYXNlIG9mIG11bHRpcGxlIG1hdGNoZXMgaW4gb2hjaV9xdWlya3NbXSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIHVzZWQuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIGRldmljZSwgZmxhZ3M7Cit9IG9oY2lfcXVpcmtzW10gPSB7CisJe1BDSV9WRU5ET1JfSURfVEksCVBDSV9BTllfSUQsCVFVSVJLX1JFU0VUX1BBQ0tFVH0sCisJe1BDSV9WRU5ET1JfSURfQUwsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9ORUMsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9BUFBMRSwJUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9GVywgUVVJUktfQkVfSEVBREVSU30sCit9OworCisvKiBUaGlzIG92ZXJyaWRlcyBhbnl0aGluZyB0aGF0IHdhcyBmb3VuZCBpbiBvaGNpX3F1aXJrc1tdLiAqLworc3RhdGljIGludCBwYXJhbV9xdWlya3M7Cittb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCBwYXJhbV9xdWlya3MsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHF1aXJrcywgIkNoaXAgcXVpcmtzIChkZWZhdWx0ID0gMCIKKwkiLCBub25hdG9taWMgY3ljbGUgdGltZXIgPSAiCV9fc3RyaW5naWZ5KFFVSVJLX0NZQ0xFX1RJTUVSKQorCSIsIHJlc2V0IHBhY2tldCBnZW5lcmF0aW9uID0gIglfX3N0cmluZ2lmeShRVUlSS19SRVNFVF9QQUNLRVQpCisJIiwgQVIvc2VsZklEIGVuZGlhbmVzcyA9ICIJX19zdHJpbmdpZnkoUVVJUktfQkVfSEVBREVSUykKKwkiKSIpOworCiAjaWZkZWYgQ09ORklHX0ZJUkVXSVJFX09IQ0lfREVCVUcKIAogI2RlZmluZSBPSENJX1BBUkFNX0RFQlVHX0FUX0FSCQkxCkBAIC0yNzUsNyArMjgxLDcgQEAKIAkgICAgIShldnQgJiBPSENJMTM5NF9idXNSZXNldCkpCiAJCXJldHVybjsKIAotCWZ3X25vdGlmeSgiSVJRICUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCisJZndfbm90aWZ5KCJJUlEgJTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlCT8gIiBzZWxmSUQiCQk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9SUVBrdAkJPyAiIEFSX3JlcSIJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X1JTUGt0CQk/ICIgQVJfcmVzcCIJCTogIiIsCkBAIC0yODUsNyArMjkxLDYgQEAKIAkgICAgZXZ0ICYgT0hDSTEzOTRfaXNvY2hUeAkJPyAiIElUIgkJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyCT8gIiBwb3N0ZWRXcml0ZUVyciIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGVUb29Mb25nCQk/ICIgY3ljbGVUb29Mb25nIgk6ICIiLAotCSAgICBldnQgJiBPSENJMTM5NF9jeWNsZTY0U2Vjb25kcwk/ICIgY3ljbGU2NFNlY29uZHMiCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50CT8gIiBjeWNsZUluY29uc2lzdGVudCIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbAk/ICIgcmVnQWNjZXNzRmFpbCIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfYnVzUmVzZXQJCT8gIiBidXNSZXNldCIJCTogIiIsCkBAIC0yOTMsOCArMjk4LDcgQEAKIAkJICAgIE9IQ0kxMzk0X1JTUGt0IHwgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZSB8CiAJCSAgICBPSENJMTM5NF9yZXNwVHhDb21wbGV0ZSB8IE9IQ0kxMzk0X2lzb2NoUnggfAogCQkgICAgT0hDSTEzOTRfaXNvY2hUeCB8IE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyIHwKLQkJICAgIE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8IE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwKLQkJICAgIE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50IHwKKwkJICAgIE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8IE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50IHwKIAkJICAgIE9IQ0kxMzk0X3JlZ0FjY2Vzc0ZhaWwgfCBPSENJMTM5NF9idXNSZXNldCkKIAkJCQkJCT8gIiA/IgkJCTogIiIpOwogfQpAQCAtNTI0LDcgKzUyOCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAjZGVmaW5lIGNvbmRfbGUzMl90b19jcHUodikgXAotCShvaGNpLT5vbGRfdW5pbm9ydGggPyAoX19mb3JjZSBfX3UzMikodikgOiBsZTMyX3RvX2NwdSh2KSkKKwkob2hjaS0+cXVpcmtzICYgUVVJUktfQkVfSEVBREVSUyA/IChfX2ZvcmNlIF9fdTMyKSh2KSA6IGxlMzJfdG9fY3B1KHYpKQogI2Vsc2UKICNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBsZTMyX3RvX2NwdSh2KQogI2VuZGlmCkBAIC02MDUsNyArNjA5LDcgQEAKIAkgKiBhdCBhIHNsaWdodGx5IGluY29ycmVjdCB0aW1lIChpbiBidXNfcmVzZXRfdGFza2xldCkuCiAJICovCiAJaWYgKGV2dCA9PSBPSENJMTM5NF9ldnRfYnVzX3Jlc2V0KSB7Ci0JCWlmICghb2hjaS0+YnVzX3Jlc2V0X3BhY2tldF9xdWlyaykKKwkJaWYgKCEob2hjaS0+cXVpcmtzICYgUVVJUktfUkVTRVRfUEFDS0VUKSkKIAkJCW9oY2ktPnJlcXVlc3RfZ2VuZXJhdGlvbiA9IChwLmhlYWRlclsyXSA+PiAxNikgJiAweGZmOwogCX0gZWxzZSBpZiAoY3R4ID09ICZvaGNpLT5hcl9yZXF1ZXN0X2N0eCkgewogCQlmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KCZvaGNpLT5jYXJkLCAmcCk7CkBAIC0xMzI5LDcgKzEzMzMsNyBAQAogCWNvbnRleHRfc3RvcCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwgT0hDSTEzOTRfYnVzUmVzZXQpOwogCi0JaWYgKG9oY2ktPmJ1c19yZXNldF9wYWNrZXRfcXVpcmspCisJaWYgKG9oY2ktPnF1aXJrcyAmIFFVSVJLX1JFU0VUX1BBQ0tFVCkKIAkJb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAogCS8qCkBAIC0xMzg0LDcgKzEzODgsNyBAQAogc3RhdGljIGlycXJldHVybl90IGlycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBkYXRhOwotCXUzMiBldmVudCwgaXNvX2V2ZW50LCBjeWNsZV90aW1lOworCXUzMiBldmVudCwgaXNvX2V2ZW50OwogCWludCBpOwogCiAJZXZlbnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyKTsKQEAgLTE0NTQsMTIgKzE0NTgsNiBAQAogCQkJZndfbm90aWZ5KCJpc29jaHJvbm91cyBjeWNsZSBpbmNvbnNpc3RlbnRcbiIpOwogCX0KIAotCWlmIChldmVudCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzKSB7Ci0JCWN5Y2xlX3RpbWUgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOwotCQlpZiAoKGN5Y2xlX3RpbWUgJiAweDgwMDAwMDAwKSA9PSAwKQotCQkJYXRvbWljX2luYygmb2hjaS0+YnVzX3NlY29uZHMpOwotCX0KLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTU1Myw4ICsxNTUxLDcgQEAKIAkJICBPSENJMTM5NF9yZXFUeENvbXBsZXRlIHwgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfAogCQkgIE9IQ0kxMzk0X2lzb2NoUnggfCBPSENJMTM5NF9pc29jaFR4IHwKIAkJICBPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8IE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8Ci0JCSAgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfAotCQkgIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8CisJCSAgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfCBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsIHwKIAkJICBPSENJMTM5NF9tYXN0ZXJJbnRFbmFibGUpOwogCWlmIChwYXJhbV9kZWJ1ZyAmIE9IQ0lfUEFSQU1fREVCVUdfQlVTUkVTRVRTKQogCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza1NldCwgT0hDSTEzOTRfYnVzUmVzZXQpOwpAQCAtMTc5NCwxNiArMTc5MSw2MSBAQAogI2VuZGlmIC8qIENPTkZJR19GSVJFV0lSRV9PSENJX1JFTU9URV9ETUEgKi8KIH0KIAotc3RhdGljIHU2NCBvaGNpX2dldF9idXNfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3N0YXRpYyB1MzIgY3ljbGVfdGltZXJfdGlja3ModTMyIGN5Y2xlX3RpbWVyKQoreworCXUzMiB0aWNrczsKKworCXRpY2tzID0gY3ljbGVfdGltZXIgJiAweGZmZjsKKwl0aWNrcyArPSAzMDcyICogKChjeWNsZV90aW1lciA+PiAxMikgJiAweDFmZmYpOworCXRpY2tzICs9ICgzMDcyICogODAwMCkgKiAoY3ljbGVfdGltZXIgPj4gMjUpOworCisJcmV0dXJuIHRpY2tzOworfQorCisvKgorICogU29tZSBjb250cm9sbGVycyBleGhpYml0IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgYnVncyB3aGVuIHVwZGF0aW5nIHRoZQorICogaXNvIGN5Y2xlIHRpbWVyIHJlZ2lzdGVyOgorICogIC0gV2hlbiB0aGUgbG93ZXN0IHNpeCBiaXRzIGFyZSB3cmFwcGluZyBhcm91bmQgdG8gemVybywgYSByZWFkIHRoYXQgaGFwcGVucworICogICAgYXQgdGhlIHNhbWUgdGltZSB3aWxsIHJldHVybiBnYXJiYWdlIGluIHRoZSBsb3dlc3QgdGVuIGJpdHMuCisgKiAgLSBXaGVuIHRoZSBjeWNsZU9mZnNldCBmaWVsZCB3cmFwcyBhcm91bmQgdG8gemVybywgdGhlIGN5Y2xlQ291bnQgZmllbGQgaXMKKyAqICAgIG5vdCBpbmNyZW1lbnRlZCBmb3IgYWJvdXQgNjAgbnMuCisgKiAgLSBPY2Nhc2lvbmFsbHksIHRoZSBlbnRpcmUgcmVnaXN0ZXIgcmVhZHMgemVyby4KKyAqCisgKiBUbyBjYXRjaCB0aGVzZSwgd2UgcmVhZCB0aGUgcmVnaXN0ZXIgdGhyZWUgdGltZXMgYW5kIGVuc3VyZSB0aGF0IHRoZQorICogZGlmZmVyZW5jZSBiZXR3ZWVuIGVhY2ggdHdvIGNvbnNlY3V0aXZlIHJlYWRzIGlzIGFwcHJveGltYXRlbHkgdGhlIHNhbWUsIGkuZS4KKyAqIGxlc3MgdGhhbiB0d2ljZSB0aGUgb3RoZXIuICBGdXJ0aGVybW9yZSwgYW55IG5lZ2F0aXZlIGRpZmZlcmVuY2UgaW5kaWNhdGVzIGFuCisgKiBlcnJvci4gIChBIFBDSSByZWFkIHNob3VsZCB0YWtlIGF0IGxlYXN0IDIwIHRpY2tzIG9mIHRoZSAyNC41NzYgTUh6IHRpbWVyIHRvCisgKiBleGVjdXRlLCBzbyB3ZSBoYXZlIGVub3VnaCBwcmVjaXNpb24gdG8gY29tcHV0ZSB0aGUgcmF0aW8gb2YgdGhlIGRpZmZlcmVuY2VzLikKKyAqLworc3RhdGljIHUzMiBvaGNpX2dldF9jeWNsZV90aW1lKHN0cnVjdCBmd19jYXJkICpjYXJkKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKLQl1MzIgY3ljbGVfdGltZTsKLQl1NjQgYnVzX3RpbWU7CisJdTMyIGMwLCBjMSwgYzI7CisJdTMyIHQwLCB0MSwgdDI7CisJczMyIGRpZmYwMSwgZGlmZjEyOworCWludCBpOwogCi0JY3ljbGVfdGltZSA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lcik7Ci0JYnVzX3RpbWUgPSAoKHU2NClhdG9taWNfcmVhZCgmb2hjaS0+YnVzX3NlY29uZHMpIDw8IDMyKSB8IGN5Y2xlX3RpbWU7CisJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOwogCi0JcmV0dXJuIGJ1c190aW1lOworCWlmIChvaGNpLT5xdWlya3MgJiBRVUlSS19DWUNMRV9USU1FUikgeworCQlpID0gMDsKKwkJYzEgPSBjMjsKKwkJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOworCQlkbyB7CisJCQljMCA9IGMxOworCQkJYzEgPSBjMjsKKwkJCWMyID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvY2hyb25vdXNDeWNsZVRpbWVyKTsKKwkJCXQwID0gY3ljbGVfdGltZXJfdGlja3MoYzApOworCQkJdDEgPSBjeWNsZV90aW1lcl90aWNrcyhjMSk7CisJCQl0MiA9IGN5Y2xlX3RpbWVyX3RpY2tzKGMyKTsKKwkJCWRpZmYwMSA9IHQxIC0gdDA7CisJCQlkaWZmMTIgPSB0MiAtIHQxOworCQl9IHdoaWxlICgoZGlmZjAxIDw9IDAgfHwgZGlmZjEyIDw9IDAgfHwKKwkJCSAgZGlmZjAxIC8gZGlmZjEyID49IDIgfHwgZGlmZjEyIC8gZGlmZjAxID49IDIpCisJCQkgJiYgaSsrIDwgMjApOworCX0KKworCXJldHVybiBjMjsKIH0KIAogc3RhdGljIHZvaWQgY29weV9pc29faGVhZGVycyhzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwgdm9pZCAqcCkKQEAgLTE4MjgsNTIgKzE4NzAsNiBAQAogCWN0eC0+aGVhZGVyX2xlbmd0aCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX2lyX2R1YWxidWZmZXJfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKLQkJCQkgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmxhc3QpCi17Ci0Jc3RydWN0IGlzb19jb250ZXh0ICpjdHggPQotCQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IGlzb19jb250ZXh0LCBjb250ZXh0KTsKLQlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSAoc3RydWN0IGRiX2Rlc2NyaXB0b3IgKikgZDsKLQlfX2xlMzIgKmlyX2hlYWRlcjsKLQlzaXplX3QgaGVhZGVyX2xlbmd0aDsKLQl2b2lkICpwLCAqZW5kOwotCi0JaWYgKGRiLT5maXJzdF9yZXNfY291bnQgIT0gMCAmJiBkYi0+c2Vjb25kX3Jlc19jb3VudCAhPSAwKSB7Ci0JCWlmIChjdHgtPmV4Y2Vzc19ieXRlcyA8PSBsZTE2X3RvX2NwdShkYi0+c2Vjb25kX3JlcV9jb3VudCkpIHsKLQkJCS8qIFRoaXMgZGVzY3JpcHRvciBpc24ndCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24uICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljdHgtPmV4Y2Vzc19ieXRlcyAtPSBsZTE2X3RvX2NwdShkYi0+c2Vjb25kX3JlcV9jb3VudCk7Ci0JfQotCi0JaGVhZGVyX2xlbmd0aCA9IGxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXFfY291bnQpIC0KLQkJbGUxNl90b19jcHUoZGItPmZpcnN0X3Jlc19jb3VudCk7Ci0KLQlwID0gZGIgKyAxOwotCWVuZCA9IHAgKyBoZWFkZXJfbGVuZ3RoOwotCXdoaWxlIChwIDwgZW5kKSB7Ci0JCWNvcHlfaXNvX2hlYWRlcnMoY3R4LCBwKTsKLQkJY3R4LT5leGNlc3NfYnl0ZXMgKz0KLQkJCShsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShwICsgNCkpID4+IDE2KSAmIDB4ZmZmZjsKLQkJcCArPSBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwotCX0KLQotCWN0eC0+ZXhjZXNzX2J5dGVzIC09IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSAtCi0JCWxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVzX2NvdW50KTsKLQotCWlmIChsZTE2X3RvX2NwdShkYi0+Y29udHJvbCkgJiBERVNDUklQVE9SX0lSUV9BTFdBWVMpIHsKLQkJaXJfaGVhZGVyID0gKF9fbGUzMiAqKSAoZGIgKyAxKTsKLQkJY3R4LT5iYXNlLmNhbGxiYWNrKCZjdHgtPmJhc2UsCi0JCQkJICAgbGUzMl90b19jcHUoaXJfaGVhZGVyWzBdKSAmIDB4ZmZmZiwKLQkJCQkgICBjdHgtPmhlYWRlcl9sZW5ndGgsIGN0eC0+aGVhZGVyLAotCQkJCSAgIGN0eC0+YmFzZS5jYWxsYmFja19kYXRhKTsKLQkJY3R4LT5oZWFkZXJfbGVuZ3RoID0gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfaXJfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkJICAgICAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLAogCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKQEAgLTE5NjAsMTAgKzE5NTYsNyBAQAogCQljaGFubmVscyA9ICZvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzOwogCQltYXNrID0gJm9oY2ktPmlyX2NvbnRleHRfbWFzazsKIAkJbGlzdCA9IG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKLQkJaWYgKG9oY2ktPnVzZV9kdWFsYnVmZmVyKQotCQkJY2FsbGJhY2sgPSBoYW5kbGVfaXJfZHVhbGJ1ZmZlcl9wYWNrZXQ7Ci0JCWVsc2UKLQkJCWNhbGxiYWNrID0gaGFuZGxlX2lyX3BhY2tldF9wZXJfYnVmZmVyOworCQljYWxsYmFjayA9IGhhbmRsZV9pcl9wYWNrZXRfcGVyX2J1ZmZlcjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMjAyNiw4ICsyMDE5LDYgQEAKIAl9IGVsc2UgewogCQlpbmRleCA9IGN0eCAtIG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKIAkJY29udHJvbCA9IElSX0NPTlRFWFRfSVNPQ0hfSEVBREVSOwotCQlpZiAob2hjaS0+dXNlX2R1YWxidWZmZXIpCi0JCQljb250cm9sIHw9IElSX0NPTlRFWFRfRFVBTF9CVUZGRVJfTU9ERTsKIAkJbWF0Y2ggPSAodGFncyA8PCAyOCkgfCAoc3luYyA8PCA4KSB8IGN0eC0+YmFzZS5jaGFubmVsOwogCQlpZiAoY3ljbGUgPj0gMCkgewogCQkJbWF0Y2ggfD0gKGN5Y2xlICYgMHgwN2ZmZikgPDwgMTI7CkBAIC0yMTg4LDkyICsyMTc5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQkJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCi17Ci0Jc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKLQlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSBOVUxMOwotCXN0cnVjdCBkZXNjcmlwdG9yICpkOwotCXN0cnVjdCBmd19pc29fcGFja2V0ICpwOwotCWRtYV9hZGRyX3QgZF9idXMsIHBhZ2VfYnVzOwotCXUzMiB6LCBoZWFkZXJfeiwgbGVuZ3RoLCByZXN0OwotCWludCBwYWdlLCBvZmZzZXQsIHBhY2tldF9jb3VudCwgaGVhZGVyX3NpemU7Ci0KLQkvKgotCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKLQkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KLQkgKi8KLQotCXAgPSBwYWNrZXQ7Ci0JeiA9IDI7Ci0KLQkvKgotCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyIGFuZCB0cmFpbGVyIGluIHRoZQotCSAqIGJ1ZmZlciwgc28gd2UgbmVlZCBhdCBsZWFzdCA4IGJ5dGVzLgotCSAqLwotCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JaGVhZGVyX3NpemUgPSBwYWNrZXRfY291bnQgKiBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwotCi0JLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KLQloZWFkZXJfeiA9IERJVl9ST1VORF9VUChoZWFkZXJfc2l6ZSwgc2l6ZW9mKCpkKSk7Ci0JcGFnZSAgICAgPSBwYXlsb2FkID4+IFBBR0VfU0hJRlQ7Ci0Jb2Zmc2V0ICAgPSBwYXlsb2FkICYgflBBR0VfTUFTSzsKLQlyZXN0ICAgICA9IHAtPnBheWxvYWRfbGVuZ3RoOwotCS8qCi0JICogVGhlIGNvbnRyb2xsZXJzIEkndmUgdGVzdGVkIGhhdmUgbm90IHdvcmtlZCBjb3JyZWN0bHkgd2hlbgotCSAqIHNlY29uZF9yZXFfY291bnQgaXMgemVyby4gIFJhdGhlciB0aGFuIGRvIHNvbWV0aGluZyB3ZSBrbm93IHdvbid0Ci0JICogd29yaywgcmV0dXJuIGFuIGVycm9yCi0JICovCi0JaWYgKHJlc3QgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3aGlsZSAocmVzdCA+IDApIHsKLQkJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKCZjdHgtPmNvbnRleHQsCi0JCQkJCSAgICB6ICsgaGVhZGVyX3osICZkX2J1cyk7Ci0JCWlmIChkID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlkYiA9IChzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqKSBkOwotCQlkYi0+Y29udHJvbCA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfU1RBVFVTIHwKLQkJCQkJICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpOwotCQlkYi0+Zmlyc3Rfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNihtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpKTsKLQkJaWYgKHAtPnNraXAgJiYgcmVzdCA9PSBwLT5wYXlsb2FkX2xlbmd0aCkgewotCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9XQUlUKTsKLQkJCWRiLT5maXJzdF9yZXFfY291bnQgPSBkYi0+Zmlyc3Rfc2l6ZTsKLQkJfSBlbHNlIHsKLQkJCWRiLT5maXJzdF9yZXFfY291bnQgPSBjcHVfdG9fbGUxNihoZWFkZXJfc2l6ZSk7Ci0JCX0KLQkJZGItPmZpcnN0X3Jlc19jb3VudCA9IGRiLT5maXJzdF9yZXFfY291bnQ7Ci0JCWRiLT5maXJzdF9idWZmZXIgPSBjcHVfdG9fbGUzMihkX2J1cyArIHNpemVvZigqZGIpKTsKLQotCQlpZiAocC0+c2tpcCAmJiByZXN0ID09IHAtPnBheWxvYWRfbGVuZ3RoKQotCQkJbGVuZ3RoID0gNDsKLQkJZWxzZSBpZiAob2Zmc2V0ICsgcmVzdCA8IFBBR0VfU0laRSkKLQkJCWxlbmd0aCA9IHJlc3Q7Ci0JCWVsc2UKLQkJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKLQotCQlkYi0+c2Vjb25kX3JlcV9jb3VudCA9IGNwdV90b19sZTE2KGxlbmd0aCk7Ci0JCWRiLT5zZWNvbmRfcmVzX2NvdW50ID0gZGItPnNlY29uZF9yZXFfY291bnQ7Ci0JCXBhZ2VfYnVzID0gcGFnZV9wcml2YXRlKGJ1ZmZlci0+cGFnZXNbcGFnZV0pOwotCQlkYi0+c2Vjb25kX2J1ZmZlciA9IGNwdV90b19sZTMyKHBhZ2VfYnVzICsgb2Zmc2V0KTsKLQotCQlpZiAocC0+aW50ZXJydXB0ICYmIGxlbmd0aCA9PSByZXN0KQotCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9JUlFfQUxXQVlTKTsKLQotCQljb250ZXh0X2FwcGVuZCgmY3R4LT5jb250ZXh0LCBkLCB6LCBoZWFkZXJfeik7Ci0JCW9mZnNldCA9IChvZmZzZXQgKyBsZW5ndGgpICYgflBBR0VfTUFTSzsKLQkJcmVzdCAtPSBsZW5ndGg7Ci0JCWlmIChvZmZzZXQgPT0gMCkKLQkJCXBhZ2UrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX3BhY2tldF9wZXJfYnVmZmVyKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKIAkJCQkJc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKIAkJCQkJc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKQEAgLTIzNjQsOSArMjI2OSw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y29udGV4dC5vaGNpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGJhc2UtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpCiAJCXJldCA9IG9oY2lfcXVldWVfaXNvX3RyYW5zbWl0KGJhc2UsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKLQllbHNlIGlmIChjdHgtPmNvbnRleHQub2hjaS0+dXNlX2R1YWxidWZmZXIpCi0JCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfZHVhbGJ1ZmZlcihiYXNlLCBwYWNrZXQsCi0JCQkJCQkJYnVmZmVyLCBwYXlsb2FkKTsKIAllbHNlCiAJCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoYmFzZSwgcGFja2V0LAogCQkJCQkJCWJ1ZmZlciwgcGF5bG9hZCk7CkBAIC0yMzgzLDcgKzIyODUsNyBAQAogCS5zZW5kX3Jlc3BvbnNlCQk9IG9oY2lfc2VuZF9yZXNwb25zZSwKIAkuY2FuY2VsX3BhY2tldAkJPSBvaGNpX2NhbmNlbF9wYWNrZXQsCiAJLmVuYWJsZV9waHlzX2RtYQk9IG9oY2lfZW5hYmxlX3BoeXNfZG1hLAotCS5nZXRfYnVzX3RpbWUJCT0gb2hjaV9nZXRfYnVzX3RpbWUsCisJLmdldF9jeWNsZV90aW1lCQk9IG9oY2lfZ2V0X2N5Y2xlX3RpbWUsCiAKIAkuYWxsb2NhdGVfaXNvX2NvbnRleHQJPSBvaGNpX2FsbG9jYXRlX2lzb19jb250ZXh0LAogCS5mcmVlX2lzb19jb250ZXh0CT0gb2hjaV9mcmVlX2lzb19jb250ZXh0LApAQCAtMjQyMSwxNyArMjMyMywxMyBAQAogI2RlZmluZSBvaGNpX3BtYWNfb2ZmKGRldikKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FHRVJFCQlQQ0lfVkVORE9SX0lEX0FUVAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FHRVJFX0ZXNjQzCTB4NTkwMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMwkweDgwMjQKLQogc3RhdGljIGludCBfX2RldmluaXQgcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1MzIgYnVzX29wdGlvbnMsIG1heF9yZWNlaXZlLCBsaW5rX3NwZWVkLCB2ZXJzaW9uOwogCXU2NCBndWlkOwotCWludCBlcnI7CisJaW50IGksIGVyciwgbl9pciwgbl9pdDsKIAlzaXplX3Qgc2l6ZTsKIAogCW9oY2kgPSBremFsbG9jKHNpemVvZigqb2hjaSksIEdGUF9LRVJORUwpOwpAQCAtMjQ3MiwzNiArMjM3MCwxNSBAQAogCQlnb3RvIGZhaWxfaW9tZW07CiAJfQogCi0JdmVyc2lvbiA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1ZlcnNpb24pICYgMHgwMGZmMDBmZjsKLSNpZiAwCi0JLyogRklYTUU6IG1ha2UgaXQgYSBjb250ZXh0IG9wdGlvbiBvciByZW1vdmUgZHVhbC1idWZmZXIgbW9kZSAqLwotCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gdmVyc2lvbiA+PSBPSENJX1ZFUlNJT05fMV8xOwotI2VuZGlmCi0KLQkvKiBkdWFsLWJ1ZmZlciBtb2RlIGlzIGJyb2tlbiBpZiBtb3JlIHRoYW4gb25lIElSIGNvbnRleHQgaXMgYWN0aXZlICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQUdFUkUgJiYKLQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BR0VSRV9GVzY0MykKLQkJb2hjaS0+dXNlX2R1YWxidWZmZXIgPSBmYWxzZTsKLQotCS8qIGR1YWwtYnVmZmVyIG1vZGUgaXMgYnJva2VuICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUklDT0ggJiYKLQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MzIpCi0JCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gZmFsc2U7Ci0KLS8qIHg4Ni0zMiBjdXJyZW50bHkgZG9lc24ndCB1c2UgaGlnaG1lbSBmb3IgZG1hX2FsbG9jX2NvaGVyZW50ICovCi0jaWYgIWRlZmluZWQoQ09ORklHX1g4Nl8zMikKLQkvKiBkdWFsLWJ1ZmZlciBtb2RlIGlzIGJyb2tlbiB3aXRoIGRlc2NyaXB0b3IgYWRkcmVzc2VzIGFib3ZlIDJHICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfVEkgJiYKLQkgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElfVFNCNDNBQjIyIHx8Ci0JICAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMykpCi0JCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLQlvaGNpLT5vbGRfdW5pbm9ydGggPSBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFICYmCi0JCQkgICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlc7Ci0jZW5kaWYKLQlvaGNpLT5idXNfcmVzZXRfcGFja2V0X3F1aXJrID0gZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9USTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvaGNpX3F1aXJrcyk7IGkrKykKKwkJaWYgKG9oY2lfcXVpcmtzW2ldLnZlbmRvciA9PSBkZXYtPnZlbmRvciAmJgorCQkgICAgKG9oY2lfcXVpcmtzW2ldLmRldmljZSA9PSBkZXYtPmRldmljZSB8fAorCQkgICAgIG9oY2lfcXVpcmtzW2ldLmRldmljZSA9PSAodW5zaWduZWQgc2hvcnQpUENJX0FOWV9JRCkpIHsKKwkJCW9oY2ktPnF1aXJrcyA9IG9oY2lfcXVpcmtzW2ldLmZsYWdzOworCQkJYnJlYWs7CisJCX0KKwlpZiAocGFyYW1fcXVpcmtzKQorCQlvaGNpLT5xdWlya3MgPSBwYXJhbV9xdWlya3M7CiAKIAlhcl9jb250ZXh0X2luaXQoJm9oY2ktPmFyX3JlcXVlc3RfY3R4LCBvaGNpLAogCQkJT0hDSTEzOTRfQXNSZXFSY3ZDb250ZXh0Q29udHJvbFNldCk7CkBAIC0yNTE2LDE3ICsyMzkzLDE5IEBACiAJCSAgICAgT0hDSTEzOTRfQXNSc3BUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCwgfjApOwotCW9oY2ktPml0X2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0KTsKKwlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzID0gfjBVTEw7CisJb2hjaS0+aXJfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludE1hc2tTZXQpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza0NsZWFyLCB+MCk7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogaHdlaWdodDMyKG9oY2ktPml0X2NvbnRleHRfbWFzayk7Ci0Jb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwluX2lyID0gaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogbl9pcjsKKwlvaGNpLT5pcl9jb250ZXh0X2xpc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0LCB+MCk7Ci0Jb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyA9IH4wVUxMOwotCW9oY2ktPmlyX2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0KTsKKwlvaGNpLT5pdF9jb250ZXh0X21hc2sgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrQ2xlYXIsIH4wKTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBpc29fY29udGV4dCkgKiBod2VpZ2h0MzIob2hjaS0+aXJfY29udGV4dF9tYXNrKTsKLQlvaGNpLT5pcl9jb250ZXh0X2xpc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCW5faXQgPSBod2VpZ2h0MzIob2hjaS0+aXRfY29udGV4dF9tYXNrKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBpc29fY29udGV4dCkgKiBuX2l0OworCW9oY2ktPml0X2NvbnRleHRfbGlzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAob2hjaS0+aXRfY29udGV4dF9saXN0ID09IE5VTEwgfHwgb2hjaS0+aXJfY29udGV4dF9saXN0ID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTI1NTMsOCArMjQzMiwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9zZWxmX2lkOwogCi0JZndfbm90aWZ5KCJBZGRlZCBmdy1vaGNpIGRldmljZSAlcywgT0hDSSB2ZXJzaW9uICV4LiV4XG4iLAotCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmKTsKKwl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOworCWZ3X25vdGlmeSgiQWRkZWQgZnctb2hjaSBkZXZpY2UgJXMsIE9IQ0kgdiV4LiV4LCAiCisJCSAgIiVkIElSICsgJWQgSVQgY29udGV4dHMsIHF1aXJrcyAweCV4XG4iLAorCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmLAorCQkgIG5faXIsIG5faXQsIG9oY2ktPnF1aXJrcyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjY2Miw3ICsyNTQ0LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfRklSRVdJUkVfT0hDSSwgfjApIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCBkNDg1Y2RkLi5jYTI2NGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTAxNCw3ICsxMDE0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYnAyX3NjYW5fbG9naWNhbF91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgdTMyICpkaXJlY3RvcnkpCitzdGF0aWMgaW50IHNicDJfc2Nhbl9sb2dpY2FsX3VuaXRfZGlyKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LAorCQkJCSAgICAgIGNvbnN0IHUzMiAqZGlyZWN0b3J5KQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJaW50IGtleSwgdmFsdWU7CkBAIC0xMDI3LDcgKzEwMjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNicDJfc2Nhbl91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgdTMyICpkaXJlY3RvcnksCitzdGF0aWMgaW50IHNicDJfc2Nhbl91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgY29uc3QgdTMyICpkaXJlY3RvcnksCiAJCQkgICAgICB1MzIgKm1vZGVsLCB1MzIgKmZpcm13YXJlX3JldmlzaW9uKQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CkBAIC0xNTcxLDcgKzE1NzIsNyBAQAogCQlzZGV2LT5zdGFydF9zdG9wX3B3cl9jb25kID0gMTsKIAogCWlmIChsdS0+dGd0LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBTQlAyX01BWF9TRUdfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggMDUxZDFlYi4uYTM2MDBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTM4MCw4ICszODAsNyBAQAogCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gZW50cnktPm5pYzsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CiAJY2hhciAqc3RyID0gYnVmOwotCWNoYXIgKm1hYzsKLQlpbnQgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAoIW5pYykKIAkJcmV0dXJuIDA7CkBAIC0zOTcsMTAgKzM5Niw4IEBACiAJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+aXBfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgaWJmdF9ldGhfc3VibmV0X21hc2s6Ci0JCXZhbCA9IH4oKDEgPDwgKDMyLW5pYy0+c3VibmV0X21hc2tfcHJlZml4KSktMSk7Ci0JCXN0ciArPSBzcHJpbnRmKHN0ciwgTklQUVVBRF9GTVQsCi0JCQkgICAgICAgKHU4KSh2YWwgPj4gMjQpLCAodTgpKHZhbCA+PiAxNiksCi0JCQkgICAgICAgKHU4KSh2YWwgPj4gOCksICh1OCkodmFsKSk7CisJCXZhbCA9IGNwdV90b19iZTMyKH4oKDEgPDwgKDMyLW5pYy0+c3VibmV0X21hc2tfcHJlZml4KSktMSkpOworCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcEk0IiwgJnZhbCk7CiAJCWJyZWFrOwogCWNhc2UgaWJmdF9ldGhfb3JpZ2luOgogCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT5vcmlnaW4pOwpAQCAtNDIxLDEwICs0MTgsNyBAQAogCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT52bGFuKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9tYWM6Ci0JCW1hYyA9IG5pYy0+bWFjOwotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCSAgICAgICAodTgpbWFjWzBdLCAodTgpbWFjWzFdLCAodTgpbWFjWzJdLAotCQkJICAgICAgICh1OCltYWNbM10sICh1OCltYWNbNF0sICh1OCltYWNbNV0pOworCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcE1cbiIsIG5pYy0+bWFjKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9ob3N0bmFtZToKIAkJc3RyICs9IHNwcmludGZfc3RyaW5nKHN0ciwgbmljLT5ob3N0bmFtZV9sZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggMzljNWFhNy4uYWJlM2Y0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIAotZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKK2RybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZmZlci5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAogCQlkcm1fY29udGV4dC5vIGRybV9kbWEubyBkcm1fZHJhd2FibGUubyBcCiAJCWRybV9kcnYubyBkcm1fZm9wcy5vIGRybV9nZW0ubyBkcm1faW9jdGwubyBkcm1faXJxLm8gXAogCQlkcm1fbG9jay5vIGRybV9tZW1vcnkubyBkcm1fcHJvYy5vIGRybV9zdHViLm8gZHJtX3ZtLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkMDNlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmZmVyLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDEwIFBhdWxpIE5pZW1pbmVuLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBNdWx0aXBhcnQgYnVmZmVyIGZvciBjb3BpbmcgZGF0YSB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgcGFnZSBzaXplLgorICoKKyAqIEF1dGhvcnM6CisgKiBQYXVsaSBOaWVtaW5lbiA8c3Vva2tvcy1hdC1nbWFpbC1kb3QtY29tPgorICovCisKKyNpbmNsdWRlICJkcm1fYnVmZmVyLmgiCisKKy8qKgorICogQWxsb2NhdGUgdGhlIGRybSBidWZmZXIgb2JqZWN0LgorICoKKyAqICAgYnVmOiBQb2ludGVyIHRvIGEgcG9pbnRlciB3aGVyZSB0aGUgb2JqZWN0IGlzIHN0b3JlZC4KKyAqICAgc2l6ZTogVGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KKyAqLworaW50IGRybV9idWZmZXJfYWxsb2Moc3RydWN0IGRybV9idWZmZXIgKipidWYsIGludCBzaXplKQoreworCWludCBucl9wYWdlcyA9IHNpemUgLyBQQUdFX1NJWkUgKyAxOworCWludCBpZHg7CisKKwkvKiBBbGxvY2F0aW5nIHBvaW50ZXIgdGFibGUgdG8gZW5kIG9mIHN0cnVjdHVyZSBtYWtlcyBkcm1fYnVmZmVyCisJICogdmFyaWFibGUgc2l6ZWQgKi8KKwkqYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9idWZmZXIpICsgbnJfcGFnZXMqc2l6ZW9mKGNoYXIgKiksCisJCQlHRlBfS0VSTkVMKTsKKworCWlmICgqYnVmID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZHJtIGJ1ZmZlciBvYmplY3QgdG8gaG9sZCIKKwkJCQkiICVkIGJ5dGVzIGluICVkIHBhZ2VzLlxuIiwKKwkJCQlzaXplLCBucl9wYWdlcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCSgqYnVmKS0+c2l6ZSA9IHNpemU7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX3BhZ2VzOyArK2lkeCkgeworCisJCSgqYnVmKS0+ZGF0YVtpZHhdID0KKwkJCWttYWxsb2MobWluKFBBR0VfU0laRSwgc2l6ZSAtIGlkeCAqIFBBR0VfU0laRSksCisJCQkJR0ZQX0tFUk5FTCk7CisKKworCQlpZiAoKCpidWYpLT5kYXRhW2lkeF0gPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgJWR0aCBwYWdlIGZvciBkcm0iCisJCQkJCSIgYnVmZmVyIHdpdGggJWQgYnl0ZXMgYW5kICVkIHBhZ2VzLlxuIiwKKwkJCQkJaWR4ICsgMSwgc2l6ZSwgbnJfcGFnZXMpOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKworCX0KKworCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisKKwkvKiBPbmx5IGxhc3QgZWxlbWVudCBjYW4gYmUgbnVsbCBwb2ludGVyIHNvIGNoZWNrIGZvciBpdCBmaXJzdC4gKi8KKwlpZiAoKCpidWYpLT5kYXRhW2lkeF0pCisJCWtmcmVlKCgqYnVmKS0+ZGF0YVtpZHhdKTsKKworCWZvciAoLS1pZHg7IGlkeCA+PSAwOyAtLWlkeCkKKwkJa2ZyZWUoKCpidWYpLT5kYXRhW2lkeF0pOworCisJa2ZyZWUoKmJ1Zik7CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MKGRybV9idWZmZXJfYWxsb2MpOworCisvKioKKyAqIENvcHkgdGhlIHVzZXIgZGF0YSB0byB0aGUgYmVnaW4gb2YgdGhlIGJ1ZmZlciBhbmQgcmVzZXQgdGhlIHByb2Nlc3NpbmcKKyAqIGl0ZXJhdG9yLgorICoKKyAqICAgdXNlcl9kYXRhOiBBIHBvaW50ZXIgdGhlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdGhlIGJ1ZmZlci4KKyAqICAgc2l6ZTogVGhlIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICovCitleHRlcm4gaW50IGRybV9idWZmZXJfY29weV9mcm9tX3VzZXIoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJdm9pZCBfX3VzZXIgKnVzZXJfZGF0YSwgaW50IHNpemUpCit7CisJaW50IG5yX3BhZ2VzID0gc2l6ZSAvIFBBR0VfU0laRSArIDE7CisJaW50IGlkeDsKKworCWlmIChzaXplID4gYnVmLT5zaXplKSB7CisJCURSTV9FUlJPUigiUmVxdWVzdGluZyB0byBjb3B5ICVkIGJ5dGVzIHRvIGEgZHJtIGJ1ZmZlciB3aXRoIgorCQkJCSIgJWQgYnl0ZXMgc3BhY2VcbiIsCisJCQkJc2l6ZSwgYnVmLT5zaXplKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZm9yIChpZHggPSAwOyBpZHggPCBucl9wYWdlczsgKytpZHgpIHsKKworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGJ1Zi0+ZGF0YVtpZHhdLAorCQkJdXNlcl9kYXRhICsgaWR4ICogUEFHRV9TSVpFLAorCQkJbWluKFBBR0VfU0laRSwgc2l6ZSAtIGlkeCAqIFBBR0VfU0laRSkpKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb3B5IHVzZXIgZGF0YSAoJXApIHRvIGRybSBidWZmZXIiCisJCQkJCSIgKCVwKSAlZHRoIHBhZ2UuXG4iLAorCQkJCQl1c2VyX2RhdGEsIGJ1ZiwgaWR4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCisJCX0KKwl9CisJYnVmLT5pdGVyYXRvciA9IDA7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9idWZmZXJfY29weV9mcm9tX3VzZXIpOworCisvKioKKyAqIEZyZWUgdGhlIGRybSBidWZmZXIgb2JqZWN0CisgKi8KK3ZvaWQgZHJtX2J1ZmZlcl9mcmVlKHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCit7CisKKwlpZiAoYnVmICE9IE5VTEwpIHsKKworCQlpbnQgbnJfcGFnZXMgPSBidWYtPnNpemUgLyBQQUdFX1NJWkUgKyAxOworCQlpbnQgaWR4OworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX3BhZ2VzOyArK2lkeCkKKwkJCWtmcmVlKGJ1Zi0+ZGF0YVtpZHhdKTsKKworCQlrZnJlZShidWYpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHJtX2J1ZmZlcl9mcmVlKTsKKworLyoqCisgKiBSZWFkIGFuIG9iamVjdCBmcm9tIGJ1ZmZlciB0aGF0IG1heSBiZSBzcGxpdCB0byBtdWx0aXBsZSBwYXJ0cy4gSWYgb2JqZWN0CisgKiBpcyBub3Qgc3BsaXQgZnVuY3Rpb24ganVzdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIG9iamVjdCBpbiBidWZmZXIuIEJ1dCBpbgorICogY2FzZSBvZiBzcGxpdCBvYmplY3QgZGF0YSBpcyBjb3BpZWQgdG8gZ2l2ZW4gc3RhY2sgb2JqZWN0IHRoYXQgaXMgc3VwbGllZAorICogYnkgY2FsbGVyLgorICoKKyAqIFRoZSBwcm9jZXNzaW5nIGxvY2F0aW9uIG9mIHRoZSBidWZmZXIgaXMgYWxzbyBhZHZhbmNlZCB0byB0aGUgbmV4dCBieXRlCisgKiBhZnRlciB0aGUgb2JqZWN0LgorICoKKyAqICAgb2Jqc2l6ZTogVGhlIHNpemUgb2YgdGhlIG9iamV0IGluIGJ5dGVzLgorICogICBzdGFja19vYmo6IEEgcG9pbnRlciB0byBhIG1lbW9yeSBsb2NhdGlvbiB3aGVyZSBvYmplY3QgY2FuIGJlIGNvcGllZC4KKyAqLwordm9pZCAqZHJtX2J1ZmZlcl9yZWFkX29iamVjdChzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmLAorCQlpbnQgb2Jqc2l6ZSwgdm9pZCAqc3RhY2tfb2JqKQoreworCWludCBpZHggPSBkcm1fYnVmZmVyX2luZGV4KGJ1Zik7CisJaW50IHBhZ2UgPSBkcm1fYnVmZmVyX3BhZ2UoYnVmKTsKKwl2b2lkICpvYmogPSAwOworCisJaWYgKGlkeCArIG9ianNpemUgPD0gUEFHRV9TSVpFKSB7CisJCW9iaiA9ICZidWYtPmRhdGFbcGFnZV1baWR4XTsKKwl9IGVsc2UgeworCQkvKiBUaGUgb2JqZWN0IGlzIHNwbGl0IHdoaWNoIGZvcmNlcyBjb3B5IHRvIHRlbXBvcmFyeSBvYmplY3QuKi8KKwkJaW50IGJlZ2luc3ogPSBQQUdFX1NJWkUgLSBpZHg7CisJCW1lbWNweShzdGFja19vYmosICZidWYtPmRhdGFbcGFnZV1baWR4XSwgYmVnaW5zeik7CisKKwkJbWVtY3B5KHN0YWNrX29iaiArIGJlZ2luc3osICZidWYtPmRhdGFbcGFnZSArIDFdWzBdLAorCQkJCW9ianNpemUgLSBiZWdpbnN6KTsKKworCQlvYmogPSBzdGFja19vYmo7CisJfQorCisJZHJtX2J1ZmZlcl9hZHZhbmNlKGJ1Ziwgb2Jqc2l6ZSk7CisJcmV0dXJuIG9iajsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2J1ZmZlcl9yZWFkX29iamVjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggN2QwZjAwYS4uZjJhYWYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtODM2LDExICs4MzYsNyBAQAogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAkJfSBlbHNlIGlmIChzZXQtPmZiID09IE5VTEwpIHsKIAkJCW1vZGVfY2hhbmdlZCA9IHRydWU7Ci0JCX0gZWxzZSBpZiAoKHNldC0+ZmItPmJpdHNfcGVyX3BpeGVsICE9Ci0JCQkgc2V0LT5jcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHx8Ci0JCQkgc2V0LT5mYi0+ZGVwdGggIT0gc2V0LT5jcnRjLT5mYi0+ZGVwdGgpCi0JCQlmYl9jaGFuZ2VkID0gdHJ1ZTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCWZiX2NoYW5nZWQgPSB0cnVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggNzY2YzQ2OC4uZjNjNThlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0xMjUsMjggKzEyNSwyOCBAQAogCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfVVBEQVRFX0RSQVcsIGRybV91cGRhdGVfZHJhd2FibGVfaW5mbywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9DTE9TRSwgZHJtX2dlbV9jbG9zZV9pb2N0bCwgMCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0ZMSU5LLCBkcm1fZ2VtX2ZsaW5rX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX09QRU4sIGRybV9nZW1fb3Blbl9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9DTE9TRSwgZHJtX2dlbV9jbG9zZV9pb2N0bCwgRFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fRkxJTkssIGRybV9nZW1fZmxpbmtfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX09QRU4sIGRybV9nZW1fb3Blbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKIAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUUkVTT1VSQ0VTLCBkcm1fbW9kZV9nZXRyZXNvdXJjZXMsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUQ1JUQywgZHJtX21vZGVfZ2V0Y3J0YywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9TRVRDUlRDLCBkcm1fbW9kZV9zZXRjcnRjLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0NVUlNPUiwgZHJtX21vZGVfY3Vyc29yX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEdBTU1BLCBkcm1fbW9kZV9nYW1tYV9nZXRfaW9jdGwsIERSTV9NQVNURVIpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEsIGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bCwgRFJNX01BU1RFUiksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRFTkNPREVSLCBkcm1fbW9kZV9nZXRlbmNvZGVyLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVENPTk5FQ1RPUiwgZHJtX21vZGVfZ2V0Y29ubmVjdG9yLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0FUVEFDSE1PREUsIGRybV9tb2RlX2F0dGFjaG1vZGVfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfREVUQUNITU9ERSwgZHJtX21vZGVfZGV0YWNobW9kZV9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRQUk9QRVJUWSwgZHJtX21vZGVfZ2V0cHJvcGVydHlfaW9jdGwsIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9TRVRQUk9QRVJUWSwgZHJtX21vZGVfY29ubmVjdG9yX3Byb3BlcnR5X3NldF9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRQUk9QQkxPQiwgZHJtX21vZGVfZ2V0YmxvYl9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRGQiwgZHJtX21vZGVfZ2V0ZmIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQURERkIsIGRybV9tb2RlX2FkZGZiLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1JNRkIsIGRybV9tb2RlX3JtZmIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfUEFHRV9GTElQLCBkcm1fbW9kZV9wYWdlX2ZsaXBfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfRElSVFlGQiwgZHJtX21vZGVfZGlydHlmYl9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVykKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFJFU09VUkNFUywgZHJtX21vZGVfZ2V0cmVzb3VyY2VzLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRDUlRDLCBkcm1fbW9kZV9nZXRjcnRjLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9TRVRDUlRDLCBkcm1fbW9kZV9zZXRjcnRjLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9DVVJTT1IsIGRybV9tb2RlX2N1cnNvcl9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUR0FNTUEsIGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bCwgRFJNX01BU1RFUnxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEsIGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bCwgRFJNX01BU1RFUnxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VURU5DT0RFUiwgZHJtX21vZGVfZ2V0ZW5jb2RlciwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUQ09OTkVDVE9SLCBkcm1fbW9kZV9nZXRjb25uZWN0b3IsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0FUVEFDSE1PREUsIGRybV9tb2RlX2F0dGFjaG1vZGVfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0RFVEFDSE1PREUsIGRybV9tb2RlX2RldGFjaG1vZGVfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFBST1BFUlRZLCBkcm1fbW9kZV9nZXRwcm9wZXJ0eV9pb2N0bCwgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9TRVRQUk9QRVJUWSwgZHJtX21vZGVfY29ubmVjdG9yX3Byb3BlcnR5X3NldF9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUUFJPUEJMT0IsIGRybV9tb2RlX2dldGJsb2JfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEZCLCBkcm1fbW9kZV9nZXRmYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQURERkIsIGRybV9tb2RlX2FkZGZiLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9STUZCLCBkcm1fbW9kZV9ybWZiLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9QQUdFX0ZMSVAsIGRybV9tb2RlX3BhZ2VfZmxpcF9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfRElSVFlGQiwgZHJtX21vZGVfZGlydHlmYl9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpCiB9OwogCiAjZGVmaW5lIERSTV9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCBhYjZjOTczLi5mOTdlN2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtNjAsOCArNjAsNyBAQAogI2RlZmluZSBFRElEX1FVSVJLX0ZJUlNUX0RFVEFJTEVEX1BSRUZFUlJFRAkoMSA8PCA1KQogLyogdXNlICtoc3luYyArdnN5bmMgZm9yIGRldGFpbGVkIG1vZGUgKi8KICNkZWZpbmUgRURJRF9RVUlSS19ERVRBSUxFRF9TWU5DX1BQCQkoMSA8PCA2KQotLyogZGVmaW5lIHRoZSBudW1iZXIgb2YgRXh0ZW5zaW9uIEVESUQgYmxvY2sgKi8KLSNkZWZpbmUgTUFYX0VESURfRVhUX05VTSA0CisKIAogI2RlZmluZSBMRVZFTF9ETVQJMAogI2RlZmluZSBMRVZFTF9HVEYJMQpAQCAtMTE0LDE0ICsxMTMsMTQgQEAKIH07CiAKIC8qKgotICogZWRpZF9pc192YWxpZCAtIHNhbml0eSBjaGVjayBFRElEIGRhdGEKKyAqIGRybV9lZGlkX2lzX3ZhbGlkIC0gc2FuaXR5IGNoZWNrIEVESUQgZGF0YQogICogQGVkaWQ6IEVESUQgZGF0YQogICoKICAqIFNhbml0eSBjaGVjayB0aGUgRURJRCBibG9jayBieSBsb29raW5nIGF0IHRoZSBoZWFkZXIsIHRoZSB2ZXJzaW9uIG51bWJlcgogICogYW5kIHRoZSBjaGVja3N1bS4gIFJldHVybiAwIGlmIHRoZSBFRElEIGRvZXNuJ3QgY2hlY2sgb3V0LCBvciAxIGlmIGl0J3MKICAqIHZhbGlkLgogICovCi1zdGF0aWMgYm9vbCBlZGlkX2lzX3ZhbGlkKHN0cnVjdCBlZGlkICplZGlkKQorYm9vbCBkcm1fZWRpZF9pc192YWxpZChzdHJ1Y3QgZWRpZCAqZWRpZCkKIHsKIAlpbnQgaSwgc2NvcmUgPSAwOwogCXU4IGNzdW0gPSAwOwpAQCAtMTYzLDYgKzE2Miw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChkcm1fZWRpZF9pc192YWxpZCk7CiAKIC8qKgogICogZWRpZF92ZW5kb3IgLSBtYXRjaCBhIHN0cmluZyBhZ2FpbnN0IEVESUQncyBvYmZ1c2NhdGVkIHZlbmRvciBmaWVsZApAQCAtMTExMiw4ICsxMTEyLDggQEAKIAl9CiAKIAkvKiBDaG9zZSByZWFsIEVESUQgZXh0ZW5zaW9uIG51bWJlciAqLwotCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBNQVhfRURJRF9FWFRfTlVNID8KLQkJICAgICAgIE1BWF9FRElEX0VYVF9OVU0gOiBlZGlkLT5leHRlbnNpb25zOworCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBEUk1fTUFYX0VESURfRVhUX05VTSA/CisJCURSTV9NQVhfRURJRF9FWFRfTlVNIDogZWRpZC0+ZXh0ZW5zaW9uczsKIAogCS8qIEZpbmQgQ0VBIGV4dGVuc2lvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBlZGlkX2V4dF9udW07IGkrKykgewpAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChkcm1fZG9fcHJvYmVfZGRjX2VkaWQoYWRhcHRlciwgYnVmLCBsZW4pKQogCQkJcmV0dXJuIC0xOwotCQlpZiAoZWRpZF9pc192YWxpZCgoc3RydWN0IGVkaWQgKilidWYpKQorCQlpZiAoZHJtX2VkaWRfaXNfdmFsaWQoKHN0cnVjdCBlZGlkICopYnVmKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMTIyMCw3ICsxMjIwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBlZGlkICplZGlkOwogCi0JZWRpZCA9IGttYWxsb2MoRURJRF9MRU5HVEggKiAoTUFYX0VESURfRVhUX05VTSArIDEpLAorCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKERSTV9NQVhfRURJRF9FWFRfTlVNICsgMSksCiAJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoZWRpZCA9PSBOVUxMKSB7CiAJCWRldl93YXJuKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LApAQCAtMTIzOCwxNCArMTIzOCwxNCBAQAogCWlmIChlZGlkLT5leHRlbnNpb25zICE9IDApIHsKIAkJaW50IGVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnM7CiAKLQkJaWYgKGVkaWRfZXh0X251bSA+IE1BWF9FRElEX0VYVF9OVU0pIHsKKwkJaWYgKGVkaWRfZXh0X251bSA+IERSTV9NQVhfRURJRF9FWFRfTlVNKSB7CiAJCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwKIAkJCQkgIlRoZSBudW1iZXIgb2YgZXh0ZW5zaW9uKCVkKSBpcyAiCiAJCQkJICJvdmVyIG1heCAoJWQpLCBhY3R1YWxseSByZWFkIG51bWJlciAoJWQpXG4iLAotCQkJCSBlZGlkX2V4dF9udW0sIE1BWF9FRElEX0VYVF9OVU0sCi0JCQkJIE1BWF9FRElEX0VYVF9OVU0pOworCQkJCSBlZGlkX2V4dF9udW0sIERSTV9NQVhfRURJRF9FWFRfTlVNLAorCQkJCSBEUk1fTUFYX0VESURfRVhUX05VTSk7CiAJCQkvKiBSZXNldCBFRElEIGV4dGVuc2lvbiBudW1iZXIgdG8gYmUgcmVhZCAqLwotCQkJZWRpZF9leHRfbnVtID0gTUFYX0VESURfRVhUX05VTTsKKwkJCWVkaWRfZXh0X251bSA9IERSTV9NQVhfRURJRF9FWFRfTlVNOwogCQl9CiAJCS8qIFJlYWQgRURJRCBpbmNsdWRpbmcgZXh0ZW5zaW9ucyB0b28gKi8KIAkJcmV0ID0gZHJtX2RkY19yZWFkX2VkaWQoY29ubmVjdG9yLCBhZGFwdGVyLCAoY2hhciAqKWVkaWQsCkBAIC0xMjg4LDggKzEyODgsOCBAQAogCQlnb3RvIGVuZDsKIAogCS8qIENob3NlIHJlYWwgRURJRCBleHRlbnNpb24gbnVtYmVyICovCi0JZWRpZF9leHRfbnVtID0gZWRpZC0+ZXh0ZW5zaW9ucyA+IE1BWF9FRElEX0VYVF9OVU0gPwotCQkgICAgICAgTUFYX0VESURfRVhUX05VTSA6IGVkaWQtPmV4dGVuc2lvbnM7CisJZWRpZF9leHRfbnVtID0gZWRpZC0+ZXh0ZW5zaW9ucyA+IERSTV9NQVhfRURJRF9FWFRfTlVNID8KKwkJICAgICAgIERSTV9NQVhfRURJRF9FWFRfTlVNIDogZWRpZC0+ZXh0ZW5zaW9uczsKIAogCS8qIEZpbmQgQ0VBIGV4dGVuc2lvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBlZGlkX2V4dF9udW07IGkrKykgewpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAKIAlpZiAoZWRpZCA9PSBOVUxMKSB7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIWVkaWRfaXNfdmFsaWQoZWRpZCkpIHsKKwlpZiAoIWRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKSB7CiAJCWRldl93YXJuKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IEVESUQgaW52YWxpZC5cbiIsCiAJCQkgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAwZjllOTA1NS4uNTA1NDk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC0yNyw2ICsyNyw3IEBACiAgKiAgICAgIERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgogICogICAgICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtNTAsMjEgKzUxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9hZGRfY29ubmVjdG9yKTsKIAotc3RhdGljIGludCBteV9hdG9pKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHZhbCA9IDA7Ci0KLQlmb3IgKDs7IG5hbWUrKykgewotCQlzd2l0Y2ggKCpuYW1lKSB7Ci0JCWNhc2UgJzAnIC4uLiAnOSc6Ci0JCQl2YWwgPSAxMCp2YWwrKCpuYW1lLScwJyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiB2YWw7Ci0JCX0KLQl9Ci19Ci0KIC8qKgogICogZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lIC0gcGFyc2UgY29tbWFuZCBsaW5lIGZvciBjb25uZWN0b3IKICAqIEBjb25uZWN0b3IgLSBjb25uZWN0b3IgdG8gcGFyc2UgbGluZSBmb3IKQEAgLTExMSw3ICs5Nyw3IEBACiAJCQluYW1lbGVuID0gaTsKIAkJCWlmICghcmVmcmVzaF9zcGVjaWZpZWQgJiYgIWJwcF9zcGVjaWZpZWQgJiYKIAkJCSAgICAheXJlc19zcGVjaWZpZWQpIHsKLQkJCQlyZWZyZXNoID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQlyZWZyZXNoID0gc2ltcGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7CiAJCQkJcmVmcmVzaF9zcGVjaWZpZWQgPSAxOwogCQkJCWlmIChjdnQgfHwgcmIpCiAJCQkJCWN2dCA9IDA7CkBAIC0xMjEsNyArMTA3LDcgQEAKIAkJY2FzZSAnLSc6CiAJCQluYW1lbGVuID0gaTsKIAkJCWlmICghYnBwX3NwZWNpZmllZCAmJiAheXJlc19zcGVjaWZpZWQpIHsKLQkJCQlicHAgPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJCWJwcCA9IHNpbXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwgMTApOwogCQkJCWJwcF9zcGVjaWZpZWQgPSAxOwogCQkJCWlmIChjdnQgfHwgcmIpCiAJCQkJCWN2dCA9IDA7CkBAIC0xMzAsNyArMTE2LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlICd4JzoKIAkJCWlmICgheXJlc19zcGVjaWZpZWQpIHsKLQkJCQl5cmVzID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQl5cmVzID0gc2ltcGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7CiAJCQkJeXJlc19zcGVjaWZpZWQgPSAxOwogCQkJfSBlbHNlCiAJCQkJZ290byBkb25lOwpAQCAtMTcwLDcgKzE1Niw3IEBACiAJCX0KIAl9CiAJaWYgKGkgPCAwICYmIHlyZXNfc3BlY2lmaWVkKSB7Ci0JCXhyZXMgPSBteV9hdG9pKG5hbWUpOworCQl4cmVzID0gc2ltcGxlX3N0cnRvbChuYW1lLCBOVUxMLCAxMCk7CiAJCXJlc19zcGVjaWZpZWQgPSAxOwogCX0KIGRvbmU6CkBAIC02OTQsNyArNjgwLDcgQEAKIAlpbnQgaTsKIAogCWlmICh2YXItPnBpeGNsb2NrICE9IDApIHsKLQkJRFJNX0VSUk9SKCJQSVhFTCBDTENPSyBTRVRcbiIpOworCQlEUk1fRVJST1IoIlBJWEVMIENMT0NLIFNFVFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKaW5kZXggOGJmMzc3MC4uYWE4OWQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCkBAIC0xOTIsOSArMTkyLDcgQEAKIAlpZHJfcmVtb3ZlKCZmaWxwLT5vYmplY3RfaWRyLCBoYW5kbGUpOwogCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKIAotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI1LDkgKzMyMyw3IEBACiAJfQogCiBlcnI6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNTgsOSArMzU0LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzkwLDcgKzM4NCw3IEBACiB7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7CiAKLQlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDAzLDE2ICszOTcsMjUgQEAKIHZvaWQKIGRybV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKIHsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJaWRyX2Zvcl9lYWNoKCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIsCiAJCSAgICAgJmRybV9nZW1fb2JqZWN0X3JlbGVhc2VfaGFuZGxlLCBOVUxMKTsKIAogCWlkcl9kZXN0cm95KCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAorZHJtX2dlbV9vYmplY3RfZnJlZV9jb21tb24oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWZwdXQob2JqLT5maWxwKTsKKwlhdG9taWNfZGVjKCZkZXYtPm9iamVjdF9jb3VudCk7CisJYXRvbWljX3N1YihvYmotPnNpemUsICZkZXYtPm9iamVjdF9tZW1vcnkpOworCWtmcmVlKG9iaik7CiB9CiAKIC8qKgogICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGxvc3QuCisgKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHN0cnVjdF8gbXV0ZXgKICAqCiAgKiBGcmVlcyB0aGUgb2JqZWN0CiAgKi8KQEAgLTQyNywxNCArNDMwLDQwIEBACiAJaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QgIT0gTlVMTCkKIAkJZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdChvYmopOwogCi0JZnB1dChvYmotPmZpbHApOwotCWF0b21pY19kZWMoJmRldi0+b2JqZWN0X2NvdW50KTsKLQlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+b2JqZWN0X21lbW9yeSk7Ci0Ja2ZyZWUob2JqKTsKKwlkcm1fZ2VtX29iamVjdF9mcmVlX2NvbW1vbihvYmopOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9mcmVlKTsKIAogLyoqCisgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gbG9zdC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyBzdHJ1Y3RfbXV0ZXgKKyAqCisgKiBGcmVlcyB0aGUgb2JqZWN0CisgKi8KK3ZvaWQKK2RybV9nZW1fb2JqZWN0X2ZyZWVfdW5sb2NrZWQoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopIGtyZWY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgIT0gTlVMTCkKKwkJZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdF91bmxvY2tlZChvYmopOworCWVsc2UgaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QgIT0gTlVMTCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3Qob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJfQorCisJZHJtX2dlbV9vYmplY3RfZnJlZV9jb21tb24ob2JqKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfZnJlZV91bmxvY2tlZCk7CisKK3N0YXRpYyB2b2lkIGRybV9nZW1fb2JqZWN0X3JlZl9idWcoc3RydWN0IGtyZWYgKmxpc3Rfa3JlZikKK3sKKwlCVUcoKTsKK30KKworLyoqCiAgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgaGFuZGxlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gY2xvc2VkCiAgKgogICogUmVtb3ZlcyBhbnkgbmFtZSBmb3IgdGhlIG9iamVjdC4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZQpAQCAtNDU4LDggKzQ4NywxMCBAQAogCQkvKgogCQkgKiBUaGUgb2JqZWN0IG5hbWUgaGVsZCBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCwgZHJvcAogCQkgKiB0aGF0IG5vdy4KKwkJKgorCQkqIFRoaXMgY2Fubm90IGJlIHRoZSBsYXN0IHJlZmVyZW5jZSwgc2luY2UgdGhlIGhhbmRsZSBob2xkcyBvbmUgdG9vLgogCQkgKi8KLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJa3JlZl9wdXQoJm9iai0+cmVmY291bnQsIGRybV9nZW1fb2JqZWN0X3JlZl9idWcpOwogCX0gZWxzZQogCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKIApAQCAtNDc3LDExICs1MDgsOCBAQAogdm9pZCBkcm1fZ2VtX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92bV9jbG9zZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggYTg5NGFkZS4uMTM3NmRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKIAkJCSAgIEk5MTVfUkVBRChJRVIpKTsKIAkJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IGlkZW50aXR5OiAgJTA4eFxuIiwKQEAgLTM1MCw2ICszNTAsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKnBpbl9mbGFnKGludCBwaW5uZWQpCit7CisJaWYgKHBpbm5lZCA+IDApCisJCXJldHVybiAiIFAiOworCWVsc2UgaWYgKHBpbm5lZCA8IDApCisJCXJldHVybiAiIHAiOworCWVsc2UKKwkJcmV0dXJuICIiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGlsaW5nX2ZsYWcoaW50IHRpbGluZykKK3sKKwlzd2l0Y2ggKHRpbGluZykgeworCWRlZmF1bHQ6CisJY2FzZSBJOTE1X1RJTElOR19OT05FOiByZXR1cm4gIiI7CisJY2FzZSBJOTE1X1RJTElOR19YOiByZXR1cm4gIiBYIjsKKwljYXNlIEk5MTVfVElMSU5HX1k6IHJldHVybiAiIFkiOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRpcnR5X2ZsYWcoaW50IGRpcnR5KQoreworCXJldHVybiBkaXJ0eSA/ICIgZGlydHkiIDogIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwdXJnZWFibGVfZmxhZyhpbnQgcHVyZ2VhYmxlKQoreworCXJldHVybiBwdXJnZWFibGUgPyAiIHB1cmdlYWJsZSIgOiAiIjsKK30KKwogc3RhdGljIGludCBpOTE1X2Vycm9yX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CkBAIC0zNTcsNiArMzg3LDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgKmVycm9yOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHBhZ2UsIG9mZnNldCwgZWx0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CiAJaWYgKCFkZXZfcHJpdi0+Zmlyc3RfZXJyb3IpIHsKQEAgLTM2OCw2ICszOTksNyBAQAogCiAJc2VxX3ByaW50ZihtLCAiVGltZTogJWxkIHMgJWxkIHVzXG4iLCBlcnJvci0+dGltZS50dl9zZWMsCiAJCSAgIGVycm9yLT50aW1lLnR2X3VzZWMpOworCXNlcV9wcmludGYobSwgIlBDSSBJRDogMHglMDR4XG4iLCBkZXYtPnBjaV9kZXZpY2UpOwogCXNlcV9wcmludGYobSwgIkVJUjogMHglMDh4XG4iLCBlcnJvci0+ZWlyKTsKIAlzZXFfcHJpbnRmKG0sICIgIFBHVEJMX0VSOiAweCUwOHhcbiIsIGVycm9yLT5wZ3RibF9lcik7CiAJc2VxX3ByaW50ZihtLCAiICBJTlNUUE06IDB4JTA4eFxuIiwgZXJyb3ItPmluc3RwbSk7CkBAIC0zNzksNiArNDExLDU5IEBACiAJCXNlcV9wcmludGYobSwgIiAgSU5TVFBTOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0cHMpOwogCQlzZXFfcHJpbnRmKG0sICIgIElOU1RET05FMTogMHglMDh4XG4iLCBlcnJvci0+aW5zdGRvbmUxKTsKIAl9CisJc2VxX3ByaW50ZihtLCAic2Vxbm86IDB4JTA4eFxuIiwgZXJyb3ItPnNlcW5vKTsKKworCWlmIChlcnJvci0+YWN0aXZlX2JvX2NvdW50KSB7CisJCXNlcV9wcmludGYobSwgIkJ1ZmZlcnMgWyVkXTpcbiIsIGVycm9yLT5hY3RpdmVfYm9fY291bnQpOworCisJCWZvciAoaSA9IDA7IGkgPCBlcnJvci0+YWN0aXZlX2JvX2NvdW50OyBpKyspIHsKKwkJCXNlcV9wcmludGYobSwgIiAgJTA4eCAlOHpkICUwOHggJTA4eCAlMDh4JXMlcyVzJXMiLAorCQkJCSAgIGVycm9yLT5hY3RpdmVfYm9baV0uZ3R0X29mZnNldCwKKwkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLnNpemUsCisJCQkJICAgZXJyb3ItPmFjdGl2ZV9ib1tpXS5yZWFkX2RvbWFpbnMsCisJCQkJICAgZXJyb3ItPmFjdGl2ZV9ib1tpXS53cml0ZV9kb21haW4sCisJCQkJICAgZXJyb3ItPmFjdGl2ZV9ib1tpXS5zZXFubywKKwkJCQkgICBwaW5fZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLnBpbm5lZCksCisJCQkJICAgdGlsaW5nX2ZsYWcoZXJyb3ItPmFjdGl2ZV9ib1tpXS50aWxpbmcpLAorCQkJCSAgIGRpcnR5X2ZsYWcoZXJyb3ItPmFjdGl2ZV9ib1tpXS5kaXJ0eSksCisJCQkJICAgcHVyZ2VhYmxlX2ZsYWcoZXJyb3ItPmFjdGl2ZV9ib1tpXS5wdXJnZWFibGUpKTsKKworCQkJaWYgKGVycm9yLT5hY3RpdmVfYm9baV0ubmFtZSkKKwkJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIGVycm9yLT5hY3RpdmVfYm9baV0ubmFtZSk7CisJCQlpZiAoZXJyb3ItPmFjdGl2ZV9ib1tpXS5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKKwkJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBlcnJvci0+YWN0aXZlX2JvW2ldLmZlbmNlX3JlZyk7CisKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlcnJvci0+YmF0Y2hidWZmZXIpOyBpKyspIHsKKwkJaWYgKGVycm9yLT5iYXRjaGJ1ZmZlcltpXSkgeworCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqb2JqID0gZXJyb3ItPmJhdGNoYnVmZmVyW2ldOworCisJCQlzZXFfcHJpbnRmKG0sICItLS0gZ3R0X29mZnNldCA9IDB4JTA4eFxuIiwgb2JqLT5ndHRfb2Zmc2V0KTsKKwkJCW9mZnNldCA9IDA7CisJCQlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgb2JqLT5wYWdlX2NvdW50OyBwYWdlKyspIHsKKwkJCQlmb3IgKGVsdCA9IDA7IGVsdCA8IFBBR0VfU0laRS80OyBlbHQrKykgeworCQkJCQlzZXFfcHJpbnRmKG0sICIlMDh4IDogICUwOHhcbiIsIG9mZnNldCwgb2JqLT5wYWdlc1twYWdlXVtlbHRdKTsKKwkJCQkJb2Zmc2V0ICs9IDQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKGVycm9yLT5yaW5nYnVmZmVyKSB7CisJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKm9iaiA9IGVycm9yLT5yaW5nYnVmZmVyOworCisJCXNlcV9wcmludGYobSwgIi0tLSByaW5nYnVmZmVyID0gMHglMDh4XG4iLCBvYmotPmd0dF9vZmZzZXQpOworCQlvZmZzZXQgPSAwOworCQlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgb2JqLT5wYWdlX2NvdW50OyBwYWdlKyspIHsKKwkJCWZvciAoZWx0ID0gMDsgZWx0IDwgUEFHRV9TSVpFLzQ7IGVsdCsrKSB7CisJCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBvZmZzZXQsIG9iai0+cGFnZXNbcGFnZV1bZWx0XSk7CisJCQkJb2Zmc2V0ICs9IDQ7CisJCQl9CisJCX0KKwl9CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZXJyb3JfbG9jaywgZmxhZ3MpOwpAQCAtMzg2LDYgKzQ3MSwxNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpOTE1X3JzdGRieV9kZWxheXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MTYgY3JzdGFuZGRlbGF5ID0gSTkxNV9SRUFEMTYoQ1JTVEFORFZJRCk7CisKKwlzZXFfcHJpbnRmKG0sICJ3L2N0eDogJWQsIHcvbyBjdHg6ICVkXG4iLCAoY3JzdGFuZGRlbGF5ID4+IDgpICYgMHgzZiwgKGNyc3RhbmRkZWxheSAmIDB4M2YpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfY3VyX2RlbGF5aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUxNiByZ3Zzd2N0bCA9IEk5MTVfUkVBRDE2KE1FTVNXQ1RMKTsKKworCXNlcV9wcmludGYobSwgIkxhc3QgY29tbWFuZDogMHglMDF4XG4iLCAocmd2c3djdGwgPj4gMTMpICYgMHgzKTsKKwlzZXFfcHJpbnRmKG0sICJDb21tYW5kIHN0YXR1czogJWRcbiIsIChyZ3Zzd2N0bCA+PiAxMikgJiAxKTsKKwlzZXFfcHJpbnRmKG0sICJQJWQgREVMQVkgMHglMDJ4XG4iLCAocmd2c3djdGwgPj4gOCkgJiAweGYsCisJCSAgIHJndnN3Y3RsICYgMHgzZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2RlbGF5ZnJlcV90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkZWxheWZyZXE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlkZWxheWZyZXEgPSBJOTE1X1JFQUQoUFhWRlJFUV9CQVNFICsgaSAqIDQpOworCQlzZXFfcHJpbnRmKG0sICJQJTAyZFZJREZSRVE6IDB4JTA4eFxuIiwgaSwgZGVsYXlmcmVxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgTUFQX1RPX01WKGludCBtYXApCit7CisJcmV0dXJuIDEyNTAgLSAobWFwICogMjUpOworfQorCitzdGF0aWMgaW50IGk5MTVfaW50dG9leHRfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgaW50dG9leHQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDMyOyBpKyspIHsKKwkJaW50dG9leHQgPSBJOTE1X1JFQUQoSU5UVE9FWFRfQkFTRV9JTEsgKyBpICogNCk7CisJCXNlcV9wcmludGYobSwgIklOVFRPRVhUJTAyZDogMHglMDh4XG4iLCBpLCBpbnR0b2V4dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9kcnBjX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgcmd2bW9kZWN0bCA9IEk5MTVfUkVBRChNRU1NT0RFQ1RMKTsKKworCXNlcV9wcmludGYobSwgIkhEIGJvb3N0OiAlc1xuIiwgKHJndm1vZGVjdGwgJiBNRU1NT0RFX0JPT1NUX0VOKSA/CisJCSAgICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiQm9vc3QgZnJlcTogJWRcbiIsCisJCSAgIChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9CT09TVF9GUkVRX01BU0spID4+CisJCSAgIE1FTU1PREVfQk9PU1RfRlJFUV9TSElGVCk7CisJc2VxX3ByaW50ZihtLCAiSFcgY29udHJvbCBlbmFibGVkOiAlc1xuIiwKKwkJICAgcmd2bW9kZWN0bCAmIE1FTU1PREVfSFdJRExFX0VOID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJTVyBjb250cm9sIGVuYWJsZWQ6ICVzXG4iLAorCQkgICByZ3Ztb2RlY3RsICYgTUVNTU9ERV9TV01PREVfRU4gPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIkdhdGVkIHZvbHRhZ2UgY2hhbmdlOiAlc1xuIiwKKwkJICAgcmd2bW9kZWN0bCAmIE1FTU1PREVfUkNMS19HQVRFID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJTdGFydGluZyBmcmVxdWVuY3k6IFAlZFxuIiwKKwkJICAgKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+PiBNRU1NT0RFX0ZTVEFSVF9TSElGVCk7CisJc2VxX3ByaW50ZihtLCAiTWF4IGZyZXF1ZW5jeTogUCVkXG4iLAorCQkgICAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1BWF9NQVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJRlQpOworCXNlcV9wcmludGYobSwgIk1pbiBmcmVxdWVuY3k6IFAlZFxuIiwgKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNSU5fTUFTSykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9mYmNfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWJvb2wgZmJjX2VuYWJsZWQgPSBmYWxzZTsKKworCWlmICghZGV2X3ByaXYtPmRpc3BsYXkuZmJjX2VuYWJsZWQpIHsKKwkJc2VxX3ByaW50ZihtLCAiRkJDIHVuc3VwcG9ydGVkIG9uIHRoaXMgY2hpcHNldFxuIik7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWlmICghY3J0Yy0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGV2X3ByaXYtPmRpc3BsYXkuZmJjX2VuYWJsZWQoY3J0YykpCisJCQlmYmNfZW5hYmxlZCA9IHRydWU7CisJfQorCisJaWYgKGZiY19lbmFibGVkKSB7CisJCXNlcV9wcmludGYobSwgIkZCQyBlbmFibGVkXG4iKTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKG0sICJGQkMgZGlzYWJsZWQ6ICIpOworCQlzd2l0Y2ggKGRldl9wcml2LT5ub19mYmNfcmVhc29uKSB7CisJCWNhc2UgRkJDX1NUT0xFTl9UT09fU01BTEw6CisJCQlzZXFfcHJpbnRmKG0sICJub3QgZW5vdWdoIHN0b2xlbiBtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIEZCQ19VTlNVUFBPUlRFRF9NT0RFOgorCQkJc2VxX3ByaW50ZihtLCAibW9kZSBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJY2FzZSBGQkNfTU9ERV9UT09fTEFSR0U6CisJCQlzZXFfcHJpbnRmKG0sICJtb2RlIHRvbyBsYXJnZSIpOworCQkJYnJlYWs7CisJCWNhc2UgRkJDX0JBRF9QTEFORToKKwkJCXNlcV9wcmludGYobSwgIkZCQyB1bnN1cHBvcnRlZCBvbiBwbGFuZSIpOworCQkJYnJlYWs7CisJCWNhc2UgRkJDX05PVF9USUxFRDoKKwkJCXNlcV9wcmludGYobSwgInNjYW5vdXQgYnVmZmVyIG5vdCB0aWxlZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzZXFfcHJpbnRmKG0sICJ1bmtub3duIHJlYXNvbiIpOworCQl9CisJCXNlcV9wcmludGYobSwgIlxuIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJYm9vbCBzcl9lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoSVNfSTk2NUcoZGV2KSB8fCBJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpKQorCQlzcl9lbmFibGVkID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGKSAmIEZXX0JMQ19TRUxGX0VOOworCWVsc2UgaWYgKElTX0k5MTVHTShkZXYpKQorCQlzcl9lbmFibGVkID0gSTkxNV9SRUFEKElOU1RQTSkgJiBJTlNUUE1fU0VMRl9FTjsKKwllbHNlIGlmIChJU19QSU5FVklFVyhkZXYpKQorCQlzcl9lbmFibGVkID0gSTkxNV9SRUFEKERTUEZXMykgJiBQSU5FVklFV19TRUxGX1JFRlJFU0hfRU47CisKKwlzZXFfcHJpbnRmKG0sICJzZWxmLXJlZnJlc2g6ICVzXG4iLCBzcl9lbmFibGVkID8gImVuYWJsZWQiIDoKKwkJICAgImRpc2FibGVkIik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogaTkxNV93ZWRnZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgc3RydWN0IGZpbGUgKmZpbHApCkBAIC01MDMsNiArNzQ3LDEzIEBACiAJeyJpOTE1X3JpbmdidWZmZXJfaW5mbyIsIGk5MTVfcmluZ2J1ZmZlcl9pbmZvLCAwfSwKIAl7Imk5MTVfYmF0Y2hidWZmZXJzIiwgaTkxNV9iYXRjaGJ1ZmZlcl9pbmZvLCAwfSwKIAl7Imk5MTVfZXJyb3Jfc3RhdGUiLCBpOTE1X2Vycm9yX3N0YXRlLCAwfSwKKwl7Imk5MTVfcnN0ZGJ5X2RlbGF5cyIsIGk5MTVfcnN0ZGJ5X2RlbGF5cywgMH0sCisJeyJpOTE1X2N1cl9kZWxheWluZm8iLCBpOTE1X2N1cl9kZWxheWluZm8sIDB9LAorCXsiaTkxNV9kZWxheWZyZXFfdGFibGUiLCBpOTE1X2RlbGF5ZnJlcV90YWJsZSwgMH0sCisJeyJpOTE1X2ludHRvZXh0X3RhYmxlIiwgaTkxNV9pbnR0b2V4dF90YWJsZSwgMH0sCisJeyJpOTE1X2RycGNfaW5mbyIsIGk5MTVfZHJwY19pbmZvLCAwfSwKKwl7Imk5MTVfZmJjX3N0YXR1cyIsIGk5MTVfZmJjX3N0YXR1cywgMH0sCisJeyJpOTE1X3NyX3N0YXR1cyIsIGk5MTVfc3Jfc3RhdHVzLCAwfSwKIH07CiAjZGVmaW5lIEk5MTVfREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9kZWJ1Z2ZzX2xpc3QpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDIzMDdmOTguLjhiZmMwYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMzUsNiArMzUsOSBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogCiAvKiBSZWFsbHkgd2FudCBhbiBPUy1pbmRlcGVuZGVudCByZXNldHRhYmxlIHRpbWVyLiAgV291bGQgbGlrZSB0byBoYXZlCiAgKiB0aGlzIGxvb3AgcnVuIGZvciAoZWcpIDMgc2VjLCBidXQgaGF2ZSB0aGUgdGltZXIgcmVzZXQgZXZlcnkgdGltZQpAQCAtOTMzLDYgKzkzNiwxMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBNQ0hCQVJfSTkxNSAweDQ0CisjZGVmaW5lIE1DSEJBUl9JOTY1IDB4NDgKKyNkZWZpbmUgTUNIQkFSX1NJWkUgKDQqNDA5NikKKworI2RlZmluZSBERVZFTl9SRUcgMHg1NAorI2RlZmluZSAgIERFVkVOX01DSEJBUl9FTiAoMSA8PCAyOCkKKworLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBNQ0ggcmVncyBpZiBuZWVkZWQsIHJldHVybiBub256ZXJvIG9uIGVycm9yICovCitzdGF0aWMgaW50CitpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CisJdTMyIHRlbXBfbG8sIHRlbXBfaGkgPSAwOworCXU2NCBtY2hiYXJfYWRkcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChJU19JOTY1RyhkZXYpKQorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsICZ0ZW1wX2hpKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOworCW1jaGJhcl9hZGRyID0gKCh1NjQpdGVtcF9oaSA8PCAzMikgfCB0ZW1wX2xvOworCisJLyogSWYgQUNQSSBkb2Vzbid0IGhhdmUgaXQsIGFzc3VtZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGl0IG91cnNlbHZlcyAqLworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAobWNoYmFyX2FkZHIgJiYKKwkgICAgcG5wX3JhbmdlX3Jlc2VydmVkKG1jaGJhcl9hZGRyLCBtY2hiYXJfYWRkciArIE1DSEJBUl9TSVpFKSkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisjZW5kaWYKKworCS8qIEdldCBzb21lIHNwYWNlIGZvciBpdCAqLworCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoZGV2X3ByaXYtPmJyaWRnZV9kZXYtPmJ1cywgJmRldl9wcml2LT5tY2hfcmVzLAorCQkJCSAgICAgTUNIQkFSX1NJWkUsIE1DSEJBUl9TSVpFLAorCQkJCSAgICAgUENJQklPU19NSU5fTUVNLAorCQkJCSAgICAgMCwgICBwY2liaW9zX2FsaWduX3Jlc291cmNlLAorCQkJCSAgICAgZGV2X3ByaXYtPmJyaWRnZV9kZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZmFpbGVkIGJ1cyBhbGxvYzogJWRcbiIsIHJldCk7CisJCWRldl9wcml2LT5tY2hfcmVzLnN0YXJ0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKElTX0k5NjVHKGRldikpCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsCisJCQkJICAgICAgIHVwcGVyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywKKwkJCSAgICAgICBsb3dlcl8zMl9iaXRzKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0dXAgTUNIQkFSIGlmIHBvc3NpYmxlLCByZXR1cm4gdHJ1ZSBpZiB3ZSBzaG91bGQgZGlzYWJsZSBpdCBhZ2FpbiAqLworc3RhdGljIHZvaWQKK2ludGVsX3NldHVwX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CisJdTMyIHRlbXA7CisJYm9vbCBlbmFibGVkOworCisJZGV2X3ByaXYtPm1jaGJhcl9uZWVkX2Rpc2FibGUgPSBmYWxzZTsKKworCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLCAmdGVtcCk7CisJCWVuYWJsZWQgPSAhISh0ZW1wICYgREVWRU5fTUNIQkFSX0VOKTsKKwl9IGVsc2UgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJZW5hYmxlZCA9IHRlbXAgJiAxOworCX0KKworCS8qIElmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nICovCisJaWYgKGVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2UoZGV2KSkKKwkJcmV0dXJuOworCisJZGV2X3ByaXYtPm1jaGJhcl9uZWVkX2Rpc2FibGUgPSB0cnVlOworCisJLyogU3BhY2UgaXMgYWxsb2NhdGVkIG9yIHJlc2VydmVkLCBzbyBlbmFibGUgaXQuICovCisJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLAorCQkJCSAgICAgICB0ZW1wIHwgREVWRU5fTUNIQkFSX0VOKTsKKwl9IGVsc2UgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCB8IDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2ludGVsX3RlYXJkb3duX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7CisJdTMyIHRlbXA7CisKKwlpZiAoZGV2X3ByaXYtPm1jaGJhcl9uZWVkX2Rpc2FibGUpIHsKKwkJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLCAmdGVtcCk7CisJCQl0ZW1wICY9IH5ERVZFTl9NQ0hCQVJfRU47CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsIHRlbXApOworCQl9IGVsc2UgeworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CisJCQl0ZW1wICY9IH4xOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCk7CisJCX0KKwl9CisKKwlpZiAoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpCisJCXJlbGVhc2VfcmVzb3VyY2UoJmRldl9wcml2LT5tY2hfcmVzKTsKK30KKwogLyoqCiAgKiBpOTE1X3Byb2JlX2FncCAtIGdldCBBR1AgYm9vdHVwIGNvbmZpZ3VyYXRpb24KICAqIEBwZGV2OiBQQ0kgZGV2aWNlCkBAIC05NzgsNTkgKzEwOTUsMTIzIEBACiAJICogU29tZSBvZiB0aGUgcHJlYWxsb2NhdGVkIHNwYWNlIGlzIHRha2VuIGJ5IHRoZSBHVFQKIAkgKiBhbmQgcG9wdXAuICBHVFQgaXMgMUsgcGVyIE1CIG9mIGFwZXJ0dXJlIHNpemUsIGFuZCBwb3B1cCBpcyA0Sy4KIAkgKi8KLQlpZiAoSVNfRzRYKGRldikgfHwgSVNfUElORVZJRVcoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpKQorCWlmIChJU19HNFgoZGV2KSB8fCBJU19QSU5FVklFVyhkZXYpIHx8IElTX0lST05MQUtFKGRldikgfHwgSVNfR0VONihkZXYpKQogCQlvdmVyaGVhZCA9IDQwOTY7CiAJZWxzZQogCQlvdmVyaGVhZCA9ICgqYXBlcnR1cmVfc2l6ZSAvIDEwMjQpICsgNDA5NjsKIAotCXN3aXRjaCAodG1wICYgSU5URUxfR01DSF9HTVNfTUFTSykgewotCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVEOgotCQlEUk1fRVJST1IoInZpZGVvIG1lbW9yeSBpcyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU06Ci0JCXN0b2xlbiA9IDEgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNOgotCQlzdG9sZW4gPSA0ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TToKLQkJc3RvbGVuID0gOCAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNOgotCQlzdG9sZW4gPSAxNiAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMzJNOgotCQlzdG9sZW4gPSAzMiAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzQ4TToKLQkJc3RvbGVuID0gNDggKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF85MTVHX0dNQ0hfR01TX1NUT0xFTl82NE06Ci0JCXN0b2xlbiA9IDY0ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzEyOE06Ci0JCXN0b2xlbiA9IDEyOCAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8yNTZNOgotCQlzdG9sZW4gPSAyNTYgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fOTZNOgotCQlzdG9sZW4gPSA5NiAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8xNjBNOgotCQlzdG9sZW4gPSAxNjAgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMjI0TToKLQkJc3RvbGVuID0gMjI0ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzM1Mk06Ci0JCXN0b2xlbiA9IDM1MiAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInVuZXhwZWN0ZWQgR01DSF9HTVMgdmFsdWU6IDB4JTAyeFxuIiwKLQkJCXRtcCAmIElOVEVMX0dNQ0hfR01TX01BU0spOwotCQlyZXR1cm4gLTE7CisJaWYgKElTX0dFTjYoZGV2KSkgeworCQkvKiBTTkIgaGFzIG1lbW9yeSBjb250cm9sIHJlZyBhdCAweDUwLncgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBTTkJfR01DSF9DVFJMLCAmdG1wKTsKKworCQlzd2l0Y2ggKHRtcCAmIFNOQl9HTUNIX0dNU19TVE9MRU5fTUFTSykgeworCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19ESVNBQkxFRDoKKwkJCURSTV9FUlJPUigidmlkZW8gbWVtb3J5IGlzIGRpc2FibGVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyTToKKwkJCXN0b2xlbiA9IDMyICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzY0TToKKwkJCXN0b2xlbiA9IDY0ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzk2TToKKwkJCXN0b2xlbiA9IDk2ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzEyOE06CisJCQlzdG9sZW4gPSAxMjggKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMTYwTToKKwkJCXN0b2xlbiA9IDE2MCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8xOTJNOgorCQkJc3RvbGVuID0gMTkyICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzIyNE06CisJCQlzdG9sZW4gPSAyMjQgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMjU2TToKKwkJCXN0b2xlbiA9IDI1NiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8yODhNOgorCQkJc3RvbGVuID0gMjg4ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyME06CisJCQlzdG9sZW4gPSAzMjAgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMzUyTToKKwkJCXN0b2xlbiA9IDM1MiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8zODRNOgorCQkJc3RvbGVuID0gMzg0ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQxNk06CisJCQlzdG9sZW4gPSA0MTYgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNDQ4TToKKwkJCXN0b2xlbiA9IDQ0OCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl80ODBNOgorCQkJc3RvbGVuID0gNDgwICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzUxMk06CisJCQlzdG9sZW4gPSA1MTIgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmV4cGVjdGVkIEdNQ0hfR01TIHZhbHVlOiAweCUwMnhcbiIsCisJCQkJICB0bXAgJiBTTkJfR01DSF9HTVNfU1RPTEVOX01BU0spOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoICh0bXAgJiBJTlRFTF9HTUNIX0dNU19NQVNLKSB7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVEOgorCQkJRFJNX0VSUk9SKCJ2aWRlbyBtZW1vcnkgaXMgZGlzYWJsZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU06CisJCQlzdG9sZW4gPSAxICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNOgorCQkJc3RvbGVuID0gNCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TToKKwkJCXN0b2xlbiA9IDggKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNOgorCQkJc3RvbGVuID0gMTYgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMzJNOgorCQkJc3RvbGVuID0gMzIgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzQ4TToKKwkJCXN0b2xlbiA9IDQ4ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF85MTVHX0dNQ0hfR01TX1NUT0xFTl82NE06CisJCQlzdG9sZW4gPSA2NCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzEyOE06CisJCQlzdG9sZW4gPSAxMjggKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8yNTZNOgorCQkJc3RvbGVuID0gMjU2ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fOTZNOgorCQkJc3RvbGVuID0gOTYgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8xNjBNOgorCQkJc3RvbGVuID0gMTYwICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMjI0TToKKwkJCXN0b2xlbiA9IDIyNCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzM1Mk06CisJCQlzdG9sZW4gPSAzNTIgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmV4cGVjdGVkIEdNQ0hfR01TIHZhbHVlOiAweCUwMnhcbiIsCisJCQkJICB0bXAgJiBJTlRFTF9HTUNIX0dNU19NQVNLKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KKwogCSpwcmVhbGxvY2F0ZWRfc2l6ZSA9IHN0b2xlbiAtIG92ZXJoZWFkOwogCSpzdGFydCA9IG92ZXJoZWFkOwogCkBAIC0xMDY0LDcgKzEyNDUsNyBAQAogCWludCBndHRfb2Zmc2V0LCBndHRfc2l6ZTsKIAogCWlmIChJU19JOTY1RyhkZXYpKSB7Ci0JCWlmIChJU19HNFgoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpKSB7CisJCWlmIChJU19HNFgoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpIHx8IElTX0dFTjYoZGV2KSkgewogCQkJZ3R0X29mZnNldCA9IDIqMTAyNCoxMDI0OwogCQkJZ3R0X3NpemUgPSAyKjEwMjQqMTAyNDsKIAkJfSBlbHNlIHsKQEAgLTExMzMsNiArMTMxNCw3IEBACiAJLyogTGVhdmUgMU0gZm9yIGxpbmUgbGVuZ3RoIGJ1ZmZlciAmIG1pc2MuICovCiAJY29tcHJlc3NlZF9mYiA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPnZyYW0sIHNpemUsIDQwOTYsIDApOwogCWlmICghY29tcHJlc3NlZF9mYikgeworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19TVE9MRU5fVE9PX1NNQUxMOwogCQlpOTE1X3dhcm5fc3RvbGVuKGRldik7CiAJCXJldHVybjsKIAl9CkBAIC0xMTQwLDYgKzEzMjIsNyBAQAogCWNvbXByZXNzZWRfZmIgPSBkcm1fbW1fZ2V0X2Jsb2NrKGNvbXByZXNzZWRfZmIsIHNpemUsIDQwOTYpOwogCWlmICghY29tcHJlc3NlZF9mYikgewogCQlpOTE1X3dhcm5fc3RvbGVuKGRldik7CisJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX1NUT0xFTl9UT09fU01BTEw7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExOTksNiArMTM4MiwzMiBAQAogCQlyZXR1cm4gVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKIH0KIAorc3RhdGljIHZvaWQgaTkxNV9zd2l0Y2hlcm9vX3NldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQgfTsKKwlpZiAoc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaTkxNTogc3dpdGNoZWQgb2ZmXG4iKTsKKwkJLyogaTkxNSByZXN1bWUgaGFuZGxlciBkb2Vzbid0IHNldCB0byBEMCAqLworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKKwkJaTkxNV9yZXN1bWUoZGV2KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImk5MTU6IHN3aXRjaGVkIG9mZlxuIik7CisJCWk5MTVfc3VzcGVuZChkZXYsIHBtbSk7CisJfQorfQorCitzdGF0aWMgYm9vbCBpOTE1X3N3aXRjaGVyb29fY2FuX3N3aXRjaChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWJvb2wgY2FuX3N3aXRjaDsKKworCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKKwljYW5fc3dpdGNoID0gKGRldi0+b3Blbl9jb3VudCA9PSAwKTsKKwlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKKwlyZXR1cm4gY2FuX3N3aXRjaDsKK30KKwogc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBsb25nIHByZWFsbG9jX3N0YXJ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBwcmVhbGxvY19zaXplLApAQCAtMTI2MCw2ICsxNDY5LDEyIEBACiAJaWYgKHJldCkKIAkJZ290byBkZXN0cm95X3JpbmdidWZmZXI7CiAKKwlyZXQgPSB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LAorCQkJCQkgICAgIGk5MTVfc3dpdGNoZXJvb19zZXRfc3RhdGUsCisJCQkJCSAgICAgaTkxNV9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZGVzdHJveV9yaW5nYnVmZmVyOworCiAJaW50ZWxfbW9kZXNldF9pbml0KGRldik7CiAKIAlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKQEAgLTEyODEsNyArMTQ5Niw5IEBACiAJcmV0dXJuIDA7CiAKIGRlc3Ryb3lfcmluZ2J1ZmZlcjoKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0NDUsMTEgKzE2NjIsMTQgQEAKIAogCWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlcjsKIAlkZXYtPm1heF92YmxhbmtfY291bnQgPSAweGZmZmZmZjsgLyogb25seSAyNCBiaXRzIG9mIGZyYW1lIGNvdW50ICovCi0JaWYgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSVNfRzRYKGRldikgfHwgSVNfSVJPTkxBS0UoZGV2KSB8fCBJU19HRU42KGRldikpIHsKIAkJZGV2LT5tYXhfdmJsYW5rX2NvdW50ID0gMHhmZmZmZmZmZjsgLyogZnVsbCAzMiBiaXQgY291bnRlciAqLwogCQlkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3VudGVyID0gZ200NV9nZXRfdmJsYW5rX2NvdW50ZXI7CiAJfQogCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSBNQ0hCQVIgaXMgZW5hYmxlZCBiZWZvcmUgcG9raW5nIGF0IGl0ICovCisJaW50ZWxfc2V0dXBfbWNoYmFyKGRldik7CisKIAlpOTE1X2dlbV9sb2FkKGRldik7CiAKIAkvKiBJbml0IEhXUyAqLwpAQCAtMTUyMyw2ICsxNzQzLDggQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaTkxNV9kZXN0cm95X2Vycm9yX3N0YXRlKGRldik7CisKIAlkZXN0cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOwogCWRlbF90aW1lcl9zeW5jKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyKTsKIApAQCAtMTU0NCw2ICsxNzY2LDcgQEAKIAkJCWRldl9wcml2LT5jaGlsZF9kZXZfbnVtID0gMDsKIAkJfQogCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCQl2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChkZXYtPnBkZXYpOwogCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJfQogCkBAIC0xNTY5LDYgKzE3OTIsOCBAQAogCQlpbnRlbF9jbGVhbnVwX292ZXJsYXkoZGV2KTsKIAl9CiAKKwlpbnRlbF90ZWFyZG93bl9tY2hiYXIoZGV2KTsKKwogCXBjaV9kZXZfcHV0KGRldl9wcml2LT5icmlkZ2VfZGV2KTsKIAlrZnJlZShkZXYtPmRldl9wcml2YXRlKTsKIApAQCAtMTYxMSw2ICsxODM2LDcgQEAKIAogCWlmICghZGV2X3ByaXYgfHwgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewogCQlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKKwkJdmdhX3N3aXRjaGVyb29fcHJvY2Vzc19kZWxheWVkX3N3aXRjaCgpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBjZjRjYjNlLi4xYjJlOTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChsdmRzX2Rvd25jbG9jaywgaTkxNV9sdmRzX2Rvd25jbG9jaywgaW50LCAwNDAwKTsKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKK2V4dGVybiBpbnQgaW50ZWxfYWdwX2VuYWJsZWQ7CiAKICNkZWZpbmUgSU5URUxfVkdBX0RFVklDRShpZCwgaW5mbykgewkJXAogCS5jbGFzcyA9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LAlcCkBAIC0xMzYsNiArMTM3LDE2IEBACiAJLmhhc19ob3RwbHVnID0gMSwKIH07CiAKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2FuZHlicmlkZ2VfZF9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19pOXh4ID0gMSwgLm5lZWRfZ2Z4X2h3cyA9IDEsCisJLmhhc19ob3RwbHVnID0gMSwKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2FuZHlicmlkZ2VfbV9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTl4eCA9IDEsIC5uZWVkX2dmeF9od3MgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCiBjb25zdCBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJSU5URUxfVkdBX0RFVklDRSgweDM1NzcsICZpbnRlbF9pODMwX2luZm8pLAogCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTYyLCAmaW50ZWxfODQ1Z19pbmZvKSwKQEAgLTE2Nyw2ICsxNzgsOCBAQAogCUlOVEVMX1ZHQV9ERVZJQ0UoMHhhMDExLCAmaW50ZWxfcGluZXZpZXdfaW5mbyksCiAJSU5URUxfVkdBX0RFVklDRSgweDAwNDIsICZpbnRlbF9pcm9ubGFrZV9kX2luZm8pLAogCUlOVEVMX1ZHQV9ERVZJQ0UoMHgwMDQ2LCAmaW50ZWxfaXJvbmxha2VfbV9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MDEwMiwgJmludGVsX3NhbmR5YnJpZGdlX2RfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDAxMDYsICZpbnRlbF9zYW5keWJyaWRnZV9tX2luZm8pLAogCXswLCAwLCAwfQogfTsKIApAQCAtMjAxLDcgKzIxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2ludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnJvcjsKIApAQCAtMjU1LDcgKzI2OCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkKIAkJcmV0dXJuIC1FSU87CkBAIC01NDYsNiArNTU5LDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGk5MTVfaW5pdCh2b2lkKQogeworCWlmICghaW50ZWxfYWdwX2VuYWJsZWQpIHsKKwkJRFJNX0VSUk9SKCJkcm0vaTkxNSBjYW4ndCB3b3JrIHdpdGhvdXQgaW50ZWxfYWdwIG1vZHVsZSFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlkcml2ZXIubnVtX2lvY3RscyA9IGk5MTVfbWF4X2lvY3RsOwogCiAJaTkxNV9nZW1fc2hyaW5rZXJfaW5pdCgpOwpAQCAtNTcxLDYgKzU4OSwxMSBAQAogCQlkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICY9IH5EUklWRVJfTU9ERVNFVDsKICNlbmRpZgogCisJaWYgKCEoZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9NT0RFU0VUKSkgeworCQlkcml2ZXIuc3VzcGVuZCA9IGk5MTVfc3VzcGVuZDsKKwkJZHJpdmVyLnJlc3VtZSA9IGk5MTVfcmVzdW1lOworCX0KKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYjk5YjZhOC4uOTc5NDM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNTAsNyArMTUwLDI3IEBACiAJdTMyIGluc3RwczsKIAl1MzIgaW5zdGRvbmUxOwogCXUzMiBzZXFubzsKKwl1NjQgYmJhZGRyOwogCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCB7CisJCWludCBwYWdlX2NvdW50OworCQl1MzIgZ3R0X29mZnNldDsKKwkJdTMyICpwYWdlc1swXTsKKwl9ICpyaW5nYnVmZmVyLCAqYmF0Y2hidWZmZXJbMl07CisJc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciB7CisJCXNpemVfdCBzaXplOworCQl1MzIgbmFtZTsKKwkJdTMyIHNlcW5vOworCQl1MzIgZ3R0X29mZnNldDsKKwkJdTMyIHJlYWRfZG9tYWluczsKKwkJdTMyIHdyaXRlX2RvbWFpbjsKKwkJdTMyIGZlbmNlX3JlZzsKKwkJczMyIHBpbm5lZDoyOworCQl1MzIgdGlsaW5nOjI7CisJCXUzMiBkaXJ0eToxOworCQl1MzIgcHVyZ2VhYmxlOjE7CisJfSAqYWN0aXZlX2JvOworCXUzMiBhY3RpdmVfYm9fY291bnQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyB7CkBAIC0xOTIsNiArMjEyLDE0IEBACiAJdTggY3Vyc29yX25lZWRzX3BoeXNpY2FsIDogMTsKIH07CiAKK2VudW0gbm9fZmJjX3JlYXNvbiB7CisJRkJDX1NUT0xFTl9UT09fU01BTEwsIC8qIG5vdCBlbm91Z2ggc3BhY2UgdG8gaG9sZCBjb21wcmVzc2VkIGJ1ZmZlcnMgKi8KKwlGQkNfVU5TVVBQT1JURURfTU9ERSwgLyogaW50ZXJsYWNlIG9yIGRvdWJsZXNjYW5uZWQgbW9kZSAqLworCUZCQ19NT0RFX1RPT19MQVJHRSwgLyogbW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9uICovCisJRkJDX0JBRF9QTEFORSwgLyogZmJjIG5vdCBzdXBwb3J0ZWQgb24gcGxhbmUgKi8KKwlGQkNfTk9UX1RJTEVELCAvKiBidWZmZXIgbm90IHRpbGVkICovCit9OworCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCkBAIC00NTIsNiArNDgwLDcgQEAKIAl1MzIgc2F2ZVBJUEVCX0RBVEFfTjE7CiAJdTMyIHNhdmVQSVBFQl9MSU5LX00xOwogCXUzMiBzYXZlUElQRUJfTElOS19OMTsKKwl1MzIgc2F2ZU1DSEJBUl9SRU5ERVJfU1RBTkRCWTsKIAogCXN0cnVjdCB7CiAJCXN0cnVjdCBkcm1fbW0gZ3R0X3NwYWNlOwpAQCAtNTkwLDYgKzYxOSwxNCBAQAogCWludCBjaGlsZF9kZXZfbnVtOwogCXN0cnVjdCBjaGlsZF9kZXZpY2VfY29uZmlnICpjaGlsZF9kZXY7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmludF9sdmRzX2Nvbm5lY3RvcjsKKworCWJvb2wgbWNoYmFyX25lZWRfZGlzYWJsZTsKKworCXU4IGN1cl9kZWxheTsKKwl1OCBtaW5fZGVsYXk7CisJdTggbWF4X2RlbGF5OworCisJZW51bSBub19mYmNfcmVhc29uIG5vX2ZiY19yZWFzb247CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAogLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCkBAIC03MzYsNiArNzczLDggQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmU7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfbHZkc19kb3duY2xvY2s7CiAKK2V4dGVybiBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9zYXZlX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpOTE1X3Jlc3RvcmVfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgaTkxNV9tYXN0ZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwpAQCAtNzYxLDYgKzgwMCw3IEBACiAKIC8qIGk5MTVfaXJxLmMgKi8KIHZvaWQgaTkxNV9oYW5nY2hlY2tfZWxhcHNlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGk5MTVfaXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfaXJxX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTg5Nyw3ICs5MzcsOCBAQAogdm9pZCBpOTE1X2dlbV9vYmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBib29sIGk5MTVfdGlsaW5nX29rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdHJpZGUsIGludCBzaXplLAogCQkgICAgaW50IHRpbGluZ19tb2RlKTsKLWJvb2wgaTkxNV9vYmpfZmVuY2VhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2Jvb2wgaTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29mZnNldF9vayhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIGludCB0aWxpbmdfbW9kZSk7CiAKIC8qIGk5MTVfZ2VtX2RlYnVnLmMgKi8KIHZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCkBAIC0xMDI2LDcgKzEwNjcsNyBAQAogI2RlZmluZSBJU184NDVHKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCiAjZGVmaW5lIElTX0k4NVgoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU4MikKICNkZWZpbmUgSVNfSTg2NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU3MikKLSNkZWZpbmUgSVNfSThYWChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOHh4KQorI2RlZmluZSBJU19HRU4yKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k4eHgpCiAjZGVmaW5lIElTX0k5MTVHKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5MTVnKQogI2RlZmluZSBJU19JOTE1R00oZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU5MikKICNkZWZpbmUgSVNfSTk0NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjc3MikKQEAgLTEwNDUsOCArMTA4NiwyOSBAQAogI2RlZmluZSBJU19JOVhYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5eHgpCiAjZGVmaW5lIElTX01PQklMRShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19tb2JpbGUpCiAKKyNkZWZpbmUgSVNfR0VOMyhkZXYpCShJU19JOTE1RyhkZXYpIHx8CQkJXAorCQkJIElTX0k5MTVHTShkZXYpIHx8CQkJXAorCQkJIElTX0k5NDVHKGRldikgfHwJCQlcCisJCQkgSVNfSTk0NUdNKGRldikgfHwJCQlcCisJCQkgSVNfRzMzKGRldikgfHwgXAorCQkJIElTX1BJTkVWSUVXKGRldikpCisjZGVmaW5lIElTX0dFTjQoZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTcyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTgyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTkyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUEyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTEyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTAyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTEyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTIyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTMyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyIHx8CQlcCisJCQkgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTQyKQorCiAjZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikJKElOVEVMX0lORk8oZGV2KS0+bmVlZF9nZnhfaHdzKQogCisjZGVmaW5lIElTX0dFTjYoZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgwMTAyKQorCiAvKiBXaXRoIHRoZSA5NDUgYW5kIGxhdGVyLCBZIHRpbGluZyBnb3QgYWRqdXN0ZWQgc28gdGhhdCBpdCB3YXMgMzIgMTI4LWJ5dGUKICAqIHJvd3MsIHdoaWNoIGNoYW5nZWQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMgYW5kIGZlbmNlIHByb2dyYW1taW5nLgogICovCkBAIC0xMDY3LDYgKzExMjksOSBAQAogI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfZmJjKQogI2RlZmluZSBJOTE1X0hBU19SQzYoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfcmM2KQogCisjZGVmaW5lIEhBU19QQ0hfU1BMSVQoZGV2KSAoSVNfSVJPTkxBS0UoZGV2KSB8fAlcCisJCQkgICAgSVNfR0VONihkZXYpKQorCiAjZGVmaW5lIFBSSU1BUllfUklOR0JVRkZFUl9TSVpFICAgICAgICAgKDEyOCoxMDI0KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGVjOGEwZDcuLmZiYTM3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTI4LDkgKzEyOCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNDg4LDcgKzQ4Niw3IEBACiAJICovCiAJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CiAJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01MDEsNyArNDk5LDcgQEAKIAkJCQkJCQlmaWxlX3ByaXYpOwogCX0KIAotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC05NjEsNyArOTU5LDcgQEAKIAkgKi8KIAlpZiAoYXJncy0+b2Zmc2V0ID4gb2JqLT5zaXplIHx8IGFyZ3MtPnNpemUgPiBvYmotPnNpemUgfHwKIAkgICAgYXJncy0+b2Zmc2V0ICsgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSkgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTk5NSw3ICs5OTMsNyBAQAogCQlEUk1fSU5GTygicHdyaXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKICNlbmRpZgogCi0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMzgsOSArMTEzNiw3IEBACiAJCSAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAogCQkgICAgICAgYXJncy0+b2Zmc2V0KTsKIAl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCWlmIChJU19FUlIoKHZvaWQgKilhZGRyKSkKIAkJcmV0dXJuIGFkZHI7CiAKQEAgLTE1NjIsNiArMTU1OCwzOCBAQAogCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKIH0KIAorc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3Byb2Nlc3NfZmx1c2hpbmdfbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMsIHVpbnQzMl90IHNlcW5vKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqX3ByaXYsIG5leHQsCisJCQkJICZkZXZfcHJpdi0+bW0uZ3B1X3dyaXRlX2xpc3QsCisJCQkJIGdwdV93cml0ZV9saXN0KSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgZmx1c2hfZG9tYWlucykgPT0KKwkJICAgIG9iai0+d3JpdGVfZG9tYWluKSB7CisJCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CisKKwkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCk7CisJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqLCBzZXFubyk7CisKKwkJCS8qIHVwZGF0ZSB0aGUgZmVuY2UgbHJ1IGxpc3QgKi8KKwkJCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCisJCQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5mZW5jZV9saXN0LAorCQkJCQkJJmRldl9wcml2LT5tbS5mZW5jZV9saXN0KTsKKworCQkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAorCQkJCQkJCSAgICBvYmotPnJlYWRfZG9tYWlucywKKwkJCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7CisJCX0KKwl9Cit9CisKIC8qKgogICogQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBudW1iZXIsIGVtaXR0aW5nIGEgd3JpdGUgb2YgaXQgdG8gdGhlIHN0YXR1cyBwYWdlCiAgKiBwbHVzIGFuIGludGVycnVwdCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGk5MTVfdXNlcl9pbnRlcnJ1cHRfaGFuZGxlci4KQEAgLTE2MjAsMjkgKzE2NDgsOCBAQAogCS8qIEFzc29jaWF0ZSBhbnkgb2JqZWN0cyBvbiB0aGUgZmx1c2hpbmcgbGlzdCBtYXRjaGluZyB0aGUgd3JpdGUKIAkgKiBkb21haW4gd2UncmUgZmx1c2hpbmcgd2l0aCBvdXIgZmx1c2guCiAJICovCi0JaWYgKGZsdXNoX2RvbWFpbnMgIT0gMCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0OwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKLQkJCQkJICZkZXZfcHJpdi0+bW0uZ3B1X3dyaXRlX2xpc3QsCi0JCQkJCSBncHVfd3JpdGVfbGlzdCkgewotCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOwotCi0JCQlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgZmx1c2hfZG9tYWlucykgPT0KLQkJCSAgICBvYmotPndyaXRlX2RvbWFpbikgewotCQkJCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKLQotCQkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKLQkJCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpOwotCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmosIHNlcW5vKTsKLQotCQkJCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKLQkJCQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAotCQkJCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7Ci0JCQl9Ci0JCX0KLQotCX0KKwlpZiAoZmx1c2hfZG9tYWlucyAhPSAwKSAKKwkJaTkxNV9nZW1fcHJvY2Vzc19mbHVzaGluZ19saXN0KGRldiwgZmx1c2hfZG9tYWlucywgc2Vxbm8pOwogCiAJaWYgKCFkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKSB7CiAJCW1vZF90aW1lcigmZGV2X3ByaXYtPmhhbmdjaGVja190aW1lciwgamlmZmllcyArIERSTV9JOTE1X0hBTkdDSEVDS19QRVJJT0QpOwpAQCAtMTgyMiw3ICsxODI5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpLCBzZXFubykpIHsKLQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCQlpZXIgPSBJOTE1X1JFQUQoREVJRVIpIHwgSTkxNV9SRUFEKEdUSUVSKTsKIAkJZWxzZQogCQkJaWVyID0gSTkxNV9SRUFEKElFUik7CkBAIC0xOTkxLDYgKzE5OTgsNyBAQAogaTkxNV9nZW1fb2JqZWN0X3VuYmluZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjA0Niw4ICsyMDU0LDEwIEBACiAJfQogCiAJLyogUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBMUlUgbGlzdCBpZiBwcmVzZW50LiAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmb2JqX3ByaXYtPmxpc3QpKQogCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAogCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfcHVyZ2VhYmxlKG9ial9wcml2KSkKIAkJaTkxNV9nZW1fb2JqZWN0X3RydW5jYXRlKG9iaik7CkBAIC0yMDg1LDExICsyMDk1LDM0IEBACiB9CiAKIHN0YXRpYyBpbnQKK2k5MTVfZ3B1X2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlib29sIGxpc3RzX2VtcHR5OworCXVpbnQzMl90IHNlcW5vOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisJbGlzdHNfZW1wdHkgPSBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkgJiYKKwkJICAgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOworCisJaWYgKGxpc3RzX2VtcHR5KQorCQlyZXR1cm4gMDsKKworCS8qIEZsdXNoIGV2ZXJ5dGhpbmcgb250byB0aGUgaW5hY3RpdmUgbGlzdC4gKi8KKwlpOTE1X2dlbV9mbHVzaChkZXYsIEk5MTVfR0VNX0dQVV9ET01BSU5TLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7CisJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOworCWlmIChzZXFubyA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIHNlcW5vKTsKK30KKworc3RhdGljIGludAogaTkxNV9nZW1fZXZpY3RfZXZlcnl0aGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCByZXQ7Ci0JdWludDMyX3Qgc2Vxbm87CiAJYm9vbCBsaXN0c19lbXB0eTsKIAogCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwpAQCAtMjEwMiwxMiArMjEzNSw3IEBACiAJCXJldHVybiAtRU5PU1BDOwogCiAJLyogRmx1c2ggZXZlcnl0aGluZyAob24gdG8gdGhlIGluYWN0aXZlIGxpc3RzKSBhbmQgZXZpY3QgKi8KLQlpOTE1X2dlbV9mbHVzaChkZXYsIEk5MTVfR0VNX0dQVV9ET01BSU5TLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0Jc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwotCWlmIChzZXFubyA9PSAwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworCXJldCA9IGk5MTVfZ3B1X2lkbGUoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMjY1LDYgKzIyOTMsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2FuZHlicmlkZ2Vfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHJlZy0+b2JqOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZWdudW0gPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOworCXVpbnQ2NF90IHZhbDsKKworCXZhbCA9ICh1aW50NjRfdCkoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgb2JqLT5zaXplIC0gNDA5NikgJgorCQkgICAgMHhmZmZmZjAwMCkgPDwgMzI7CisJdmFsIHw9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgMHhmZmZmZjAwMDsKKwl2YWwgfD0gKHVpbnQ2NF90KSgob2JqX3ByaXYtPnN0cmlkZSAvIDEyOCkgLSAxKSA8PAorCQlTQU5EWUJSSURHRV9GRU5DRV9QSVRDSF9TSElGVDsKKworCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKKwkJdmFsIHw9IDEgPDwgSTk2NV9GRU5DRV9USUxJTkdfWV9TSElGVDsKKwl2YWwgfD0gSTk2NV9GRU5DRV9SRUdfVkFMSUQ7CisKKwlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHX1NBTkRZQlJJREdFXzAgKyAocmVnbnVtICogOCksIHZhbCk7Cit9CisKIHN0YXRpYyB2b2lkIGk5NjVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZykKIHsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHJlZy0+b2JqOwpAQCAtMjM2MSw2ICsyNDExLDU4IEBACiAJSTkxNV9XUklURShGRU5DRV9SRUdfODMwXzAgKyAocmVnbnVtICogNCksIHZhbCk7CiB9CiAKK3N0YXRpYyBpbnQgaTkxNV9maW5kX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyA9IE5VTEw7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKKwlpbnQgaSwgYXZhaWwsIHJldDsKKworCS8qIEZpcnN0IHRyeSB0byBmaW5kIGEgZnJlZSByZWcgKi8KKwlhdmFpbCA9IDA7CisJZm9yIChpID0gZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CisJCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKKwkJaWYgKCFyZWctPm9iaikKKwkJCXJldHVybiBpOworCisJCW9ial9wcml2ID0gcmVnLT5vYmotPmRyaXZlcl9wcml2YXRlOworCQlpZiAoIW9ial9wcml2LT5waW5fY291bnQpCisJCSAgICBhdmFpbCsrOworCX0KKworCWlmIChhdmFpbCA9PSAwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCS8qIE5vbmUgYXZhaWxhYmxlLCB0cnkgdG8gc3RlYWwgb25lIG9yIHdhaXQgZm9yIGEgdXNlciB0byBmaW5pc2ggKi8KKwlpID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QsCisJCQkgICAgZmVuY2VfbGlzdCkgeworCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCWlmIChvYmpfcHJpdi0+cGluX2NvdW50KQorCQkJY29udGludWU7CisKKwkJLyogZm91bmQgb25lISAqLworCQlpID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKKwkJYnJlYWs7CisJfQorCisJQlVHX09OKGkgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSk7CisKKwkvKiBXZSBvbmx5IGhhdmUgYSByZWZlcmVuY2Ugb24gb2JqIGZyb20gdGhlIGFjdGl2ZSBsaXN0LiBwdXRfZmVuY2VfcmVnCisJICogbWlnaHQgZHJvcCB0aGF0IG9uZSwgY2F1c2luZyBhIHVzZS1hZnRlci1mcmVlIGluIGl0LiBTbyBob2xkIGEKKwkgKiBwcml2YXRlIHJlZmVyZW5jZSB0byBvYmogbGlrZSB0aGUgb3RoZXIgY2FsbGVycyBvZiBwdXRfZmVuY2VfcmVnCisJICogKHNldF90aWxpbmcgaW9jdGwpIGRvLiAqLworCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2VfcmVnKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaTsKK30KKwogLyoqCiAgKiBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyAtIHNldCB1cCBhIGZlbmNlIHJlZyBmb3IgYW4gb2JqZWN0CiAgKiBAb2JqOiBvYmplY3QgdG8gbWFwIHRocm91Z2ggYSBmZW5jZSByZWcKQEAgLTIzODEsOCArMjQ4Myw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyA9IE5VTEw7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmpfcHJpdiA9IE5VTEw7Ci0JaW50IGksIHJldCwgYXZhaWw7CisJaW50IHJldDsKIAogCS8qIEp1c3QgdXBkYXRlIG91ciBwbGFjZSBpbiB0aGUgTFJVIGlmIG91ciBmZW5jZSBpcyBnZXR0aW5nIHVzZWQuICovCiAJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkgewpAQCAtMjQxMCw4NiArMjUxMSwyNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBGaXJzdCB0cnkgdG8gZmluZCBhIGZyZWUgcmVnICovCi0JYXZhaWwgPSAwOwotCWZvciAoaSA9IGRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQ7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykgewotCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV07Ci0JCWlmICghcmVnLT5vYmopCi0JCQlicmVhazsKKwlyZXQgPSBpOTE1X2ZpbmRfZmVuY2VfcmVnKGRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLQkJb2xkX29ial9wcml2ID0gcmVnLT5vYmotPmRyaXZlcl9wcml2YXRlOwotCQlpZiAoIW9sZF9vYmpfcHJpdi0+cGluX2NvdW50KQotCQkgICAgYXZhaWwrKzsKLQl9Ci0KLQkvKiBOb25lIGF2YWlsYWJsZSwgdHJ5IHRvIHN0ZWFsIG9uZSBvciB3YWl0IGZvciBhIHVzZXIgdG8gZmluaXNoICovCi0JaWYgKGkgPT0gZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2xkX29iaiA9IE5VTEw7Ci0KLQkJaWYgKGF2YWlsID09IDApCi0JCQlyZXR1cm4gLUVOT1NQQzsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9sZF9vYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0LAotCQkJCSAgICBmZW5jZV9saXN0KSB7Ci0JCQlvbGRfb2JqID0gb2xkX29ial9wcml2LT5vYmo7Ci0KLQkJCWlmIChvbGRfb2JqX3ByaXYtPnBpbl9jb3VudCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogVGFrZSBhIHJlZmVyZW5jZSwgYXMgb3RoZXJ3aXNlIHRoZSB3YWl0X3JlbmRlcmluZwotCQkJICogYmVsb3cgbWF5IGNhdXNlIHRoZSBvYmplY3QgdG8gZ2V0IGZyZWVkIG91dCBmcm9tCi0JCQkgKiB1bmRlciB1cy4KLQkJCSAqLwotCQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9sZF9vYmopOwotCi0JCQkvKiBpOTE1IHVzZXMgZmVuY2VzIGZvciBHUFUgYWNjZXNzIHRvIHRpbGVkIGJ1ZmZlcnMgKi8KLQkJCWlmIChJU19JOTY1RyhkZXYpIHx8ICFvbGRfb2JqX3ByaXYtPmFjdGl2ZSkKLQkJCQlicmVhazsKLQotCQkJLyogVGhpcyBicmluZ3MgdGhlIG9iamVjdCB0byB0aGUgaGVhZCBvZiB0aGUgTFJVIGlmIGl0Ci0JCQkgKiBoYWQgYmVlbiB3cml0dGVuIHRvLiAgVGhlIG9ubHkgd2F5IHRoaXMgc2hvdWxkCi0JCQkgKiByZXN1bHQgaW4gdXMgd2FpdGluZyBsb25nZXIgdGhhbiB0aGUgZXhwZWN0ZWQKLQkJCSAqIG9wdGltYWwgYW1vdW50IG9mIHRpbWUgaXMgaWYgdGhlcmUgd2FzIGEKLQkJCSAqIGZlbmNlLXVzaW5nIGJ1ZmZlciBsYXRlciB0aGF0IHdhcyByZWFkLW9ubHkuCi0JCQkgKi8KLQkJCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9sZF9vYmopOwotCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9sZF9vYmopOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2xkX29iaik7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBaYXAgdGhpcyB2aXJ0dWFsIG1hcHBpbmcgc28gd2UgY2FuIHNldCB1cCBhIGZlbmNlIGFnYWluCi0JCSAqIGZvciB0aGlzIG9iamVjdCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4KLQkJICovCi0JCWk5MTVfZ2VtX3JlbGVhc2VfbW1hcChvbGRfb2JqKTsKLQotCQlpID0gb2xkX29ial9wcml2LT5mZW5jZV9yZWc7Ci0JCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKLQotCQlvbGRfb2JqX3ByaXYtPmZlbmNlX3JlZyA9IEk5MTVfRkVOQ0VfUkVHX05PTkU7Ci0JCWxpc3RfZGVsX2luaXQoJm9sZF9vYmpfcHJpdi0+ZmVuY2VfbGlzdCk7Ci0KLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2xkX29iaik7Ci0JfQotCi0Jb2JqX3ByaXYtPmZlbmNlX3JlZyA9IGk7CisJb2JqX3ByaXYtPmZlbmNlX3JlZyA9IHJldDsKKwlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ107CiAJbGlzdF9hZGRfdGFpbCgmb2JqX3ByaXYtPmZlbmNlX2xpc3QsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CiAKIAlyZWctPm9iaiA9IG9iajsKIAotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19HRU42KGRldikpCisJCXNhbmR5YnJpZGdlX3dyaXRlX2ZlbmNlX3JlZyhyZWcpOworCWVsc2UgaWYgKElTX0k5NjVHKGRldikpCiAJCWk5NjVfd3JpdGVfZmVuY2VfcmVnKHJlZyk7CiAJZWxzZSBpZiAoSVNfSTlYWChkZXYpKQogCQlpOTE1X3dyaXRlX2ZlbmNlX3JlZyhyZWcpOwogCWVsc2UKIAkJaTgzMF93cml0ZV9mZW5jZV9yZWcocmVnKTsKIAotCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2Uob2JqLCBpLCBvYmpfcHJpdi0+dGlsaW5nX21vZGUpOworCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2Uob2JqLCBvYmpfcHJpdi0+ZmVuY2VfcmVnLAorCQkJb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUwOCw5ICsyNTUwLDEyIEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19HRU42KGRldikpIHsKKwkJSTkxNV9XUklURTY0KEZFTkNFX1JFR19TQU5EWUJSSURHRV8wICsKKwkJCSAgICAgKG9ial9wcml2LT5mZW5jZV9yZWcgKiA4KSwgMCk7CisJfSBlbHNlIGlmIChJU19JOTY1RyhkZXYpKSB7CiAJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfOTY1XzAgKyAob2JqX3ByaXYtPmZlbmNlX3JlZyAqIDgpLCAwKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQl1aW50MzJfdCBmZW5jZV9yZWc7CiAKIAkJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgPCA4KQpAQCAtMjU0NCw2ICsyNTg5LDEyIEBACiAJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBJZiB3ZSd2ZSBjaGFuZ2VkIHRpbGluZywgR1RULW1hcHBpbmdzIG9mIHRoZSBvYmplY3QKKwkgKiBuZWVkIHRvIHJlLWZhdWx0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZlbmNlIHJlZ2lzdGVyCisJICogc2V0dXAgaXMgaW4gcGxhY2UuCisJICovCisJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7CisKIAkvKiBPbiB0aGUgaTkxNSwgR1BVIGFjY2VzcyB0byB0aWxlZCBidWZmZXJzIGlzIHZpYSBhIGZlbmNlLAogCSAqIHRoZXJlZm9yZSB3ZSBtdXN0IHdhaXQgZm9yIGFueSBvdXRzdGFuZGluZyBhY2Nlc3MgdG8gY29tcGxldGUKIAkgKiBiZWZvcmUgY2xlYXJpbmcgdGhlIGZlbmNlLgpAQCAtMjU1MiwxMiArMjYwMywxMiBAQAogCQlpbnQgcmV0OwogCiAJCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7Ci0JCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKG9iaik7CiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KIAorCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKG9iaik7CiAJaTkxNV9nZW1fY2xlYXJfZmVuY2VfcmVnIChvYmopOwogCiAJcmV0dXJuIDA7CkBAIC0yNjk3LDcgKzI3NDgsNiBAQAogaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXVpbnQzMl90IHNlcW5vOwogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW47CiAKIAlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpID09IDApCkBAIC0yNzA2LDkgKzI3NTYsOCBAQAogCS8qIFF1ZXVlIHRoZSBHUFUgd3JpdGUgY2FjaGUgZmx1c2hpbmcgd2UgbmVlZC4gKi8KIAlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CiAJaTkxNV9nZW1fZmx1c2goZGV2LCAwLCBvYmotPndyaXRlX2RvbWFpbik7Ci0Jc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgb2JqLT53cml0ZV9kb21haW4pOworCSh2b2lkKSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgb2JqLT53cml0ZV9kb21haW4pOwogCUJVR19PTihvYmotPndyaXRlX2RvbWFpbik7Ci0JaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaiwgc2Vxbm8pOwogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAogCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCkBAIC0zMjQ3LDcgKzMyOTYsOCBAQAogCSAgICAgICAgICAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORTsKIAogCS8qIENoZWNrIGZlbmNlIHJlZyBjb25zdHJhaW50cyBhbmQgcmViaW5kIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChuZWVkX2ZlbmNlICYmICFpOTE1X29ial9mZW5jZWFibGUoZGV2LCBvYmopKQorCWlmIChuZWVkX2ZlbmNlICYmICFpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2Zmc2V0X29rKG9iaiwKKwkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlKSkKIAkJaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwogCiAJLyogQ2hvb3NlIHRoZSBHVFQgb2Zmc2V0IGZvciBvdXIgYnVmZmVyIGFuZCBwdXQgaXQgdGhlcmUuICovCkBAIC0zMzE3LDYgKzMzNjcsMTYgQEAKIAkJfQogCiAJCS8qIFZhbGlkYXRlIHRoYXQgdGhlIHRhcmdldCBpcyBpbiBhIHZhbGlkIHIvdyBHUFUgZG9tYWluICovCisJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluICYgKHJlbG9jLT53cml0ZV9kb21haW4gLSAxKSkgeworCQkJRFJNX0VSUk9SKCJyZWxvYyB3aXRoIG11bHRpcGxlIHdyaXRlIGRvbWFpbnM6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkJICAicmVhZCAlMDh4IHdyaXRlICUwOHgiLAorCQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkJICByZWxvYy0+cmVhZF9kb21haW5zLAorCQkJCSAgcmVsb2MtPndyaXRlX2RvbWFpbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlpZiAocmVsb2MtPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKIAkJICAgIHJlbG9jLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CiAJCQlEUk1fRVJST1IoInJlbG9jIHdpdGggcmVhZC93cml0ZSBDUFUgZG9tYWluczogIgpAQCAtNDQ0NSw4ICs0NTA1LDcgQEAKIGk5MTVfZ2VtX2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCBzZXFubywgY3VyX3NlcW5vLCBsYXN0X3NlcW5vOwotCWludCBzdHVjaywgcmV0OworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKQEAgLTQ0NTUsMTE1ICs0NTE0LDM2IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIEhhY2shICBEb24ndCBsZXQgYW55Ym9keSBkbyBleGVjYnVmIHdoaWxlIHdlIGRvbid0IGNvbnRyb2wgdGhlIGNoaXAuCi0JICogV2UgbmVlZCB0byByZXBsYWNlIHRoaXMgd2l0aCBhIHNlbWFwaG9yZSwgb3Igc29tZXRoaW5nLgotCSAqLwotCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAxOwotCWRlbF90aW1lcigmZGV2X3ByaXYtPmhhbmdjaGVja190aW1lcik7Ci0KLQkvKiBDYW5jZWwgdGhlIHJldGlyZSB3b3JrIGhhbmRsZXIsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBpZiBydW5uaW5nCi0JICovCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmspOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwotCi0JLyogRmx1c2ggdGhlIEdQVSBhbG9uZyB3aXRoIGFsbCBub24tQ1BVIHdyaXRlIGRvbWFpbnMKLQkgKi8KLQlpOTE1X2dlbV9mbHVzaChkZXYsIEk5MTVfR0VNX0dQVV9ET01BSU5TLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0Jc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwotCi0JaWYgKHNlcW5vID09IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IHNlcW5vOwotCWxhc3Rfc2Vxbm8gPSAwOwotCXN0dWNrID0gMDsKLQlmb3IgKDs7KSB7Ci0JCWN1cl9zZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwotCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoY3VyX3NlcW5vLCBzZXFubykpCi0JCQlicmVhazsKLQkJaWYgKGxhc3Rfc2Vxbm8gPT0gY3VyX3NlcW5vKSB7Ci0JCQlpZiAoc3R1Y2srKyA+IDEwMCkgewotCQkJCURSTV9FUlJPUigiaGFyZHdhcmUgd2VkZ2VkXG4iKTsKLQkJCQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+bW0ud2VkZ2VkLCAxKTsKLQkJCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+aXJxX3F1ZXVlKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQltc2xlZXAoMTApOwotCQlsYXN0X3NlcW5vID0gY3VyX3NlcW5vOwotCX0KLQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSAwOwotCi0JaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7Ci0KLQlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKLQlpZiAoIWF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSkgewotCQkvKiBBY3RpdmUgYW5kIGZsdXNoaW5nIHNob3VsZCBub3cgYmUgZW1wdHkgYXMgd2UndmUKLQkJICogd2FpdGVkIGZvciBhIHNlcXVlbmNlIGhpZ2hlciB0aGFuIGFueSBwZW5kaW5nIGV4ZWNidWZmZXIKLQkJICovCi0JCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOwotCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpOwotCQkvKiBSZXF1ZXN0IHNob3VsZCBub3cgYmUgZW1wdHkgYXMgd2UndmUgYWxzbyB3YWl0ZWQKLQkJICogZm9yIHRoZSBsYXN0IHJlcXVlc3QgaW4gdGhlIGxpc3QKLQkJICovCi0JCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKTsKLQl9Ci0KLQkvKiBFbXB0eSB0aGUgYWN0aXZlIGFuZCBmbHVzaGluZyBsaXN0cyB0byBpbmFjdGl2ZS4gIElmIHRoZXJlJ3MKLQkgKiBhbnl0aGluZyBsZWZ0IGF0IHRoaXMgcG9pbnQsIGl0IG1lYW5zIHRoYXQgd2UncmUgd2VkZ2VkIGFuZAotCSAqIG5vdGhpbmcgZ29vZCdzIGdvaW5nIHRvIGhhcHBlbiBieSBsZWF2aW5nIHRoZW0gdGhlcmUuICBTbyBzdHJpcAotCSAqIHRoZSBHUFUgZG9tYWlucyBhbmQganVzdCBzdHVmZiB0aGVtIG9udG8gaW5hY3RpdmUuCi0JICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluOwotCi0JCW9iaiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKLQkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCi0JCQkJICAgICAgIGxpc3QpLT5vYmo7Ci0JCW9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKLQkJb2JqLT53cml0ZV9kb21haW4gJj0gfkk5MTVfR0VNX0dQVV9ET01BSU5TOwotCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwotCi0JCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKLQkJCQkJCSAgICBvYmotPnJlYWRfZG9tYWlucywKLQkJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluOwotCi0JCW9iaiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkgICAgICAgbGlzdCktPm9iajsKLQkJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwotCQlvYmotPndyaXRlX2RvbWFpbiAmPSB+STkxNV9HRU1fR1BVX0RPTUFJTlM7Ci0JCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7Ci0KLQkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAotCQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAotCQkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwotCX0KLQotCi0JLyogTW92ZSBhbGwgaW5hY3RpdmUgYnVmZmVycyBvdXQgb2YgdGhlIEdUVC4gKi8KLQlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2luYWN0aXZlX2xpc3QoZGV2KTsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCXJldCA9IGk5MTVfZ3B1X2lkbGUoZGV2KTsKIAlpZiAocmV0KSB7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIFVuZGVyIFVNUywgYmUgcGFyYW5vaWQgYW5kIGV2aWN0LiAqLworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2luYWN0aXZlX2xpc3QoZGV2KTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogSGFjayEgIERvbid0IGxldCBhbnlib2R5IGRvIGV4ZWNidWYgd2hpbGUgd2UgZG9uJ3QgY29udHJvbCB0aGUgY2hpcC4KKwkgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhpcyB3aXRoIGEgc2VtYXBob3JlLCBvciBzb21ldGhpbmcuCisJICogQW5kIG5vdCBjb25mb3VuZCBtbS5zdXNwZW5kZWQhCisJICovCisJZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCA9IDE7CisJZGVsX3RpbWVyKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyKTsKKworCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCWk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihkZXYpOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwkvKiBDYW5jZWwgdGhlIHJldGlyZSB3b3JrIGhhbmRsZXIsIHdoaWNoIHNob3VsZCBiZSBpZGxlIG5vdy4gKi8KKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYwNyw4ICs0NTg3LDEzIEBACiAJfQogCWRldl9wcml2LT5od3Nfb2JqID0gb2JqOwogCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKLQlJOTE1X1JFQUQoSFdTX1BHQSk7IC8qIHBvc3RpbmcgcmVhZCAqLworCWlmIChJU19HRU42KGRldikpIHsKKwkJSTkxNV9XUklURShIV1NfUEdBX0dFTjYsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCQlJOTE1X1JFQUQoSFdTX1BHQV9HRU42KTsgLyogcG9zdGluZyByZWFkICovCisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwkJSTkxNV9SRUFEKEhXU19QR0EpOyAvKiBwb3N0aW5nIHJlYWQgKi8KKwl9CiAJRFJNX0RFQlVHX0RSSVZFUigiaHdzIG9mZnNldDogMHglMDh4XG4iLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKIAogCXJldHVybiAwOwpAQCAtNDg1MCw3ICs0ODM1LDggQEAKIAlzcGluX3VubG9jaygmc2hyaW5rX2xpc3RfbG9jayk7CiAKIAkvKiBPbGQgWCBkcml2ZXJzIHdpbGwgdGFrZSAwLTIgZm9yIGZyb250LCBiYWNrLCBkZXB0aCBidWZmZXJzICovCi0JZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCA9IDM7CisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0ID0gMzsKIAogCWlmIChJU19JOTY1RyhkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfRzMzKGRldikpCiAJCWRldl9wcml2LT5udW1fZmVuY2VfcmVncyA9IDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCBkZjI3OGIyLi5iNWM1NWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMjUsOCArMjUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgImxpbnV4L3N0cmluZy5oIgogI2luY2x1ZGUgImxpbnV4L2JpdG9wcy5oIgogI2luY2x1ZGUgImRybVAuaCIKQEAgLTgzLDEyMCArODEsNiBAQAogICogdG8gbWF0Y2ggd2hhdCB0aGUgR1BVIGV4cGVjdHMuCiAgKi8KIAotI2RlZmluZSBNQ0hCQVJfSTkxNSAweDQ0Ci0jZGVmaW5lIE1DSEJBUl9JOTY1IDB4NDgKLSNkZWZpbmUgTUNIQkFSX1NJWkUgKDQqNDA5NikKLQotI2RlZmluZSBERVZFTl9SRUcgMHg1NAotI2RlZmluZSAgIERFVkVOX01DSEJBUl9FTiAoMSA8PCAyOCkKLQotLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBNQ0ggcmVncyBpZiBuZWVkZWQsIHJldHVybiBub256ZXJvIG9uIGVycm9yICovCi1zdGF0aWMgaW50Ci1pbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Ci0JdTMyIHRlbXBfbG8sIHRlbXBfaGkgPSAwOwotCXU2NCBtY2hiYXJfYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChJU19JOTY1RyhkZXYpKQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsICZ0ZW1wX2hpKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOwotCW1jaGJhcl9hZGRyID0gKCh1NjQpdGVtcF9oaSA8PCAzMikgfCB0ZW1wX2xvOwotCi0JLyogSWYgQUNQSSBkb2Vzbid0IGhhdmUgaXQsIGFzc3VtZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGl0IG91cnNlbHZlcyAqLwotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAobWNoYmFyX2FkZHIgJiYKLQkgICAgcG5wX3JhbmdlX3Jlc2VydmVkKG1jaGJhcl9hZGRyLCBtY2hiYXJfYWRkciArIE1DSEJBUl9TSVpFKSkgewotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKLQotCS8qIEdldCBzb21lIHNwYWNlIGZvciBpdCAqLwotCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoZGV2X3ByaXYtPmJyaWRnZV9kZXYtPmJ1cywgJmRldl9wcml2LT5tY2hfcmVzLAotCQkJCSAgICAgTUNIQkFSX1NJWkUsIE1DSEJBUl9TSVpFLAotCQkJCSAgICAgUENJQklPU19NSU5fTUVNLAotCQkJCSAgICAgMCwgICBwY2liaW9zX2FsaWduX3Jlc291cmNlLAotCQkJCSAgICAgZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiZmFpbGVkIGJ1cyBhbGxvYzogJWRcbiIsIHJldCk7Ci0JCWRldl9wcml2LT5tY2hfcmVzLnN0YXJ0ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKElTX0k5NjVHKGRldikpCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsCi0JCQkJICAgICAgIHVwcGVyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywKLQkJCSAgICAgICBsb3dlcl8zMl9iaXRzKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogU2V0dXAgTUNIQkFSIGlmIHBvc3NpYmxlLCByZXR1cm4gdHJ1ZSBpZiB3ZSBzaG91bGQgZGlzYWJsZSBpdCBhZ2FpbiAqLwotc3RhdGljIGJvb2wKLWludGVsX3NldHVwX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Ci0JdTMyIHRlbXA7Ci0JYm9vbCBuZWVkX2Rpc2FibGUgPSBmYWxzZSwgZW5hYmxlZDsKLQotCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLCAmdGVtcCk7Ci0JCWVuYWJsZWQgPSAhISh0ZW1wICYgREVWRU5fTUNIQkFSX0VOKTsKLQl9IGVsc2UgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKLQkJZW5hYmxlZCA9IHRlbXAgJiAxOwotCX0KLQotCS8qIElmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nICovCi0JaWYgKGVuYWJsZWQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGludGVsX2FsbG9jX21jaGJhcl9yZXNvdXJjZShkZXYpKQotCQlnb3RvIG91dDsKLQotCW5lZWRfZGlzYWJsZSA9IHRydWU7Ci0KLQkvKiBTcGFjZSBpcyBhbGxvY2F0ZWQgb3IgcmVzZXJ2ZWQsIHNvIGVuYWJsZSBpdC4gKi8KLQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsCi0JCQkJICAgICAgIHRlbXAgfCBERVZFTl9NQ0hCQVJfRU4pOwotCX0gZWxzZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wIHwgMSk7Ci0JfQotb3V0OgotCXJldHVybiBuZWVkX2Rpc2FibGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF90ZWFyZG93bl9tY2hiYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBkaXNhYmxlKQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBtY2hiYXJfcmVnID0gSVNfSTk2NUcoZGV2KSA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Ci0JdTMyIHRlbXA7Ci0KLQlpZiAoZGlzYWJsZSkgewotCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKLQkJCXRlbXAgJj0gfkRFVkVOX01DSEJBUl9FTjsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywgdGVtcCk7Ci0JCX0gZWxzZSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKLQkJCXRlbXAgJj0gfjE7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wKTsKLQkJfQotCX0KLQotCWlmIChkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkKLQkJcmVsZWFzZV9yZXNvdXJjZSgmZGV2X3ByaXYtPm1jaF9yZXMpOwotfQotCiAvKioKICAqIERldGVjdHMgYml0IDYgc3dpenpsaW5nIG9mIGFkZHJlc3MgbG9va3VwIGJldHdlZW4gSUdEIGFjY2VzcyBhbmQgQ1BVCiAgKiBhY2Nlc3MgdGhyb3VnaCBtYWluIG1lbW9yeS4KQEAgLTIwNyw5ICs5MSw4IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3Qgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJdWludDMyX3Qgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047Ci0JYm9vbCBuZWVkX2Rpc2FibGU7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChJU19JUk9OTEFLRShkZXYpIHx8IElTX0dFTjYoZGV2KSkgewogCQkvKiBPbiBJcm9ubGFrZSB3aGF0ZXZlciBEUkFNIGNvbmZpZywgR1BVIGFsd2F5cyBkbwogCQkgKiBzYW1lIHN3aXp6bGluZyBzZXR1cC4KIAkJICovCkBAIC0yMjQsOSArMTA3LDYgQEAKIAl9IGVsc2UgaWYgKElTX01PQklMRShkZXYpKSB7CiAJCXVpbnQzMl90IGRjYzsKIAotCQkvKiBUcnkgdG8gbWFrZSBzdXJlIE1DSEJBUiBpcyBlbmFibGVkIGJlZm9yZSBwb2tpbmcgYXQgaXQgKi8KLQkJbmVlZF9kaXNhYmxlID0gaW50ZWxfc2V0dXBfbWNoYmFyKGRldik7Ci0KIAkJLyogT24gbW9iaWxlIDl4eCBjaGlwc2V0cywgY2hhbm5lbCBpbnRlcmxlYXZlIGJ5IHRoZSBDUFUgaXMKIAkJICogZGV0ZXJtaW5lZCBieSBEQ0MuICBGb3Igc2luZ2xlLWNoYW5uZWwsIG5laXRoZXIgdGhlIENQVQogCQkgKiBub3IgdGhlIEdQVSBkbyBzd2l6emxpbmcuICBGb3IgZHVhbCBjaGFubmVsIGludGVybGVhdmVkLApAQCAtMjY2LDggKzE0Niw2IEBACiAJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKIAkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCQl9Ci0KLQkJaW50ZWxfdGVhcmRvd25fbWNoYmFyKGRldiwgbmVlZF9kaXNhYmxlKTsKIAl9IGVsc2UgewogCQkvKiBUaGUgOTY1LCBHMzMsIGFuZCBuZXdlciwgaGF2ZSBhIHZlcnkgZmxleGlibGUgbWVtb3J5CiAJCSAqIGNvbmZpZ3VyYXRpb24uICBJdCB3aWxsIGVuYWJsZSBkdWFsLWNoYW5uZWwgbW9kZQpAQCAtMzAyLDM5ICsxODAsNiBAQAogCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3kgPSBzd2l6emxlX3k7CiB9CiAKLQotLyoqCi0gKiBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGN1cnJlbnRseSBmZW5jZWFibGUuICBJZiBub3QsIGl0IG1heSBuZWVkCi0gKiB0byBiZSB1bmJvdW5kIGFuZCBoYXZlIGl0cyBwaXRjaCBhZGp1c3RlZC4KLSAqLwotYm9vbAotaTkxNV9vYmpfZmVuY2VhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7Ci0KLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQkvKiBUaGUgOTY1IGNhbiBoYXZlIGZlbmNlcyBhdCBhbnkgcGFnZSBib3VuZGFyeS4gKi8KLQkJaWYgKG9iai0+c2l6ZSAmIDQwOTUpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSBpZiAoSVNfSTlYWChkZXYpKSB7Ci0JCWlmIChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIH5JOTE1X0ZFTkNFX1NUQVJUX01BU0spCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk4MzBfRkVOQ0VfU1RBUlRfTUFTSykKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKiBQb3dlciBvZiB0d28gc2l6ZWQuLi4gKi8KLQlpZiAob2JqLT5zaXplICYgKG9iai0+c2l6ZSAtIDEpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBPYmplY3RzIG11c3QgYmUgc2l6ZSBhbGlnbmVkIGFzIHdlbGwgKi8KLQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAob2JqLT5zaXplIC0gMSkpCi0JCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyogQ2hlY2sgcGl0Y2ggY29uc3RyaWFudHMgZm9yIGFsbCBjaGlwcyAmIHRpbGluZyBmb3JtYXRzICovCiBib29sCiBpOTE1X3RpbGluZ19vayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3RyaWRlLCBpbnQgc2l6ZSwgaW50IHRpbGluZ19tb2RlKQpAQCAtMzkxLDcgKzIzNiw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sCitib29sCiBpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2Zmc2V0X29rKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgdGlsaW5nX21vZGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwpAQCAtNDM4LDkgKzI4Myw3IEBACiAJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCiAJaWYgKCFpOTE1X3RpbGluZ19vayhkZXYsIGFyZ3MtPnN0cmlkZSwgb2JqLT5zaXplLCBhcmdzLT50aWxpbmdfbW9kZSkpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OTMsMTIgKzMzNiw2IEBACiAJCQlnb3RvIGVycjsKIAkJfQogCi0JCS8qIElmIHdlJ3ZlIGNoYW5nZWQgdGlsaW5nLCBHVFQtbWFwcGluZ3Mgb2YgdGhlIG9iamVjdAotCQkgKiBuZWVkIHRvIHJlLWZhdWx0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZlbmNlIHJlZ2lzdGVyCi0JCSAqIHNldHVwIGlzIGluIHBsYWNlLgotCQkgKi8KLQkJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7Ci0KIAkJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CiAJCW9ial9wcml2LT5zdHJpZGUgPSBhcmdzLT5zdHJpZGU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYTE3ZDZiZGYuLjUzODgzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgREVfR1NFKTsKIAllbHNlCiAJCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAxLApAQCAtMjY5LDYgKzI2OSw1NyBAQAogCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIGk5MTVfaGFuZGxlX3Jwc19jaGFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYnVzeV91cCwgYnVzeV9kb3duLCBtYXhfYXZnLCBtaW5fYXZnOworCXUxNiByZ3Zzd2N0bDsKKwl1OCBuZXdfZGVsYXkgPSBkZXZfcHJpdi0+Y3VyX2RlbGF5OworCisJSTkxNV9XUklURShNRU1JTlRSU1RTLCBJOTE1X1JFQUQoTUVNSU5UUlNUUykgJiB+TUVNSU5UX0VWQUxfQ0hHKTsKKwlidXN5X3VwID0gSTkxNV9SRUFEKFJDUFJFVkJTWVRVUEFWRyk7CisJYnVzeV9kb3duID0gSTkxNV9SRUFEKFJDUFJFVkJTWVRETkFWRyk7CisJbWF4X2F2ZyA9IEk5MTVfUkVBRChSQ0JNQVhBVkcpOworCW1pbl9hdmcgPSBJOTE1X1JFQUQoUkNCTUlOQVZHKTsKKworCS8qIEhhbmRsZSBSQ1MgY2hhbmdlIHJlcXVlc3QgZnJvbSBodyAqLworCWlmIChidXN5X3VwID4gbWF4X2F2ZykgeworCQlpZiAoZGV2X3ByaXYtPmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+bWF4X2RlbGF5KQorCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmN1cl9kZWxheSAtIDE7CisJCWlmIChuZXdfZGVsYXkgPCBkZXZfcHJpdi0+bWF4X2RlbGF5KQorCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPm1heF9kZWxheTsKKwl9IGVsc2UgaWYgKGJ1c3lfZG93biA8IG1pbl9hdmcpIHsKKwkJaWYgKGRldl9wcml2LT5jdXJfZGVsYXkgIT0gZGV2X3ByaXYtPm1pbl9kZWxheSkKKwkJCW5ld19kZWxheSA9IGRldl9wcml2LT5jdXJfZGVsYXkgKyAxOworCQlpZiAobmV3X2RlbGF5ID4gZGV2X3ByaXYtPm1pbl9kZWxheSkKKwkJCW5ld19kZWxheSA9IGRldl9wcml2LT5taW5fZGVsYXk7CisJfQorCisJRFJNX0RFQlVHKCJycHMgY2hhbmdlIHJlcXVlc3RlZDogJWQgLT4gJWRcbiIsCisJCSAgZGV2X3ByaXYtPmN1cl9kZWxheSwgbmV3X2RlbGF5KTsKKworCXJndnN3Y3RsID0gSTkxNV9SRUFEKE1FTVNXQ1RMKTsKKwlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01EX1NUUykgeworCQlEUk1fRVJST1IoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsKKwkJcmV0dXJuOyAvKiBzdGlsbCBidXN5IHdpdGggYW5vdGhlciBjb21tYW5kICovCisJfQorCisJLyogUHJvZ3JhbSB0aGUgbmV3IHN0YXRlICovCisJcmd2c3djdGwgPSAoTUVNQ1RMX0NNRF9DSEZSRVEgPDwgTUVNQ1RMX0NNRF9TSElGVCkgfAorCQkobmV3X2RlbGF5IDw8IE1FTUNUTF9GUkVRX1NISUZUKSB8IE1FTUNUTF9TRkNBVk07CisJSTkxNV9XUklURShNRU1TV0NUTCwgcmd2c3djdGwpOworCVBPU1RJTkdfUkVBRChNRU1TV0NUTCk7CisKKwlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsKKwlJOTE1X1dSSVRFKE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisKKwlkZXZfcHJpdi0+Y3VyX2RlbGF5ID0gbmV3X2RlbGF5OworCisJRFJNX0RFQlVHKCJycHMgY2hhbmdlZFxuIik7CisKKwlyZXR1cm47Cit9CisKIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTMzMSw2ICszODIsMTEgQEAKIAkJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aG90cGx1Z193b3JrKTsKIAl9CiAKKwlpZiAoZGVfaWlyICYgREVfUENVX0VWRU5UKSB7CisJCUk5MTVfV1JJVEUoTUVNSU5UUlNUUywgSTkxNV9SRUFEKE1FTUlOVFJTVFMpKTsKKwkJaTkxNV9oYW5kbGVfcnBzX2NoYW5nZShkZXYpOworCX0KKwogCS8qIHNob3VsZCBjbGVhciBQQ0ggaG90cGx1ZyBldmVudCBiZWZvcmUgY2xlYXIgQ1BVIGlycSAqLwogCUk5MTVfV1JJVEUoU0RFSUlSLCBwY2hfaWlyKTsKIAlJOTE1X1dSSVRFKEdUSUlSLCBndF9paXIpOwpAQCAtMzc2LDYgKzQzMiwxMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICoKK2k5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqc3JjKQoreworCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKmRzdDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc3JjX3ByaXY7CisJaW50IHBhZ2UsIHBhZ2VfY291bnQ7CisKKwlpZiAoc3JjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJc3JjX3ByaXYgPSBzcmMtPmRyaXZlcl9wcml2YXRlOworCWlmIChzcmNfcHJpdi0+cGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdlX2NvdW50ID0gc3JjLT5zaXplIC8gUEFHRV9TSVpFOworCisJZHN0ID0ga21hbGxvYyhzaXplb2YoKmRzdCkgKyBwYWdlX2NvdW50ICogc2l6ZW9mICh1MzIgKiksIEdGUF9BVE9NSUMpOworCWlmIChkc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgcGFnZV9jb3VudDsgcGFnZSsrKSB7CisJCXZvaWQgKnMsICpkID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCQlpZiAoZCA9PSBOVUxMKQorCQkJZ290byB1bndpbmQ7CisJCXMgPSBrbWFwX2F0b21pYyhzcmNfcHJpdi0+cGFnZXNbcGFnZV0sIEtNX1VTRVIwKTsKKwkJbWVtY3B5KGQsIHMsIFBBR0VfU0laRSk7CisJCWt1bm1hcF9hdG9taWMocywgS01fVVNFUjApOworCQlkc3QtPnBhZ2VzW3BhZ2VdID0gZDsKKwl9CisJZHN0LT5wYWdlX2NvdW50ID0gcGFnZV9jb3VudDsKKwlkc3QtPmd0dF9vZmZzZXQgPSBzcmNfcHJpdi0+Z3R0X29mZnNldDsKKworCXJldHVybiBkc3Q7CisKK3Vud2luZDoKKwl3aGlsZSAocGFnZS0tKQorCQlrZnJlZShkc3QtPnBhZ2VzW3BhZ2VdKTsKKwlrZnJlZShkc3QpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9lcnJvcl9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpvYmopCit7CisJaW50IHBhZ2U7CisKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBvYmotPnBhZ2VfY291bnQ7IHBhZ2UrKykKKwkJa2ZyZWUob2JqLT5wYWdlc1twYWdlXSk7CisKKwlrZnJlZShvYmopOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9lcnJvcl9zdGF0ZV9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3IpCit7CisJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+YmF0Y2hidWZmZXJbMF0pOworCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPmJhdGNoYnVmZmVyWzFdKTsKKwlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5yaW5nYnVmZmVyKTsKKwlrZnJlZShlcnJvci0+YWN0aXZlX2JvKTsKKwlrZnJlZShlcnJvcik7Cit9CisKK3N0YXRpYyB1MzIKK2k5MTVfZ2V0X2JiYWRkcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKnJpbmcpCit7CisJdTMyIGNtZDsKKworCWlmIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpKQorCQljbWQgPSBNSV9CQVRDSF9CVUZGRVI7CisJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKKwkJY21kID0gKE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8ICgyIDw8IDYpIHwKKwkJICAgICAgIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CisJZWxzZQorCQljbWQgPSAoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikpOworCisJcmV0dXJuIHJpbmdbMF0gPT0gY21kID8gcmluZ1sxXSA6IDA7Cit9CisKK3N0YXRpYyB1MzIKK2k5MTVfcmluZ2J1ZmZlcl9sYXN0X2JhdGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgaGVhZCwgYmJhZGRyOworCXUzMiAqcmluZzsKKworCS8qIExvY2F0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBhbmQgd2FsayBiYWNrCisJICogdG8gZmluZCB0aGUgbW9zdCByZWNlbnRseSBkaXNwYXRjaGVkIGJhdGNoIGJ1ZmZlci4KKwkgKi8KKwliYmFkZHIgPSAwOworCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKwlyaW5nID0gKHUzMiAqKShkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ICsgaGVhZCk7CisKKwl3aGlsZSAoLS1yaW5nID49ICh1MzIgKilkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CisJCWJiYWRkciA9IGk5MTVfZ2V0X2JiYWRkcihkZXYsIHJpbmcpOworCQlpZiAoYmJhZGRyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGJiYWRkciA9PSAwKSB7CisJCXJpbmcgPSAodTMyICopKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgKyBkZXZfcHJpdi0+cmluZy5TaXplKTsKKwkJd2hpbGUgKC0tcmluZyA+PSAodTMyICopZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCkgeworCQkJYmJhZGRyID0gaTkxNV9nZXRfYmJhZGRyKGRldiwgcmluZyk7CisJCQlpZiAoYmJhZGRyKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGJiYWRkcjsKK30KKwogLyoqCiAgKiBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUgLSBjYXB0dXJlIGFuIGVycm9yIHJlY29yZCBmb3IgbGF0ZXIgYW5hbHlzaXMKICAqIEBkZXY6IGRybSBkZXZpY2UKQEAgLTM4OCwxOSArNTU5LDI2IEBACiBzdGF0aWMgdm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKIAlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgKmVycm9yOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYmF0Y2hidWZmZXJbMl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYmJhZGRyOworCWludCBjb3VudDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ZXJyb3JfbG9jaywgZmxhZ3MpOwotCWlmIChkZXZfcHJpdi0+Zmlyc3RfZXJyb3IpCi0JCWdvdG8gb3V0OworCWVycm9yID0gZGV2X3ByaXYtPmZpcnN0X2Vycm9yOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm47CiAKIAllcnJvciA9IGttYWxsb2Moc2l6ZW9mKCplcnJvciksIEdGUF9BVE9NSUMpOwogCWlmICghZXJyb3IpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigib3V0IG90IG1lbW9yeSwgbm90IGNhcHR1cmluZyBlcnJvciBzdGF0ZVxuIik7Ci0JCWdvdG8gb3V0OworCQlEUk1fREVCVUdfRFJJVkVSKCJvdXQgb2YgbWVtb3J5LCBub3QgY2FwdHVyaW5nIGVycm9yIHN0YXRlXG4iKTsKKwkJcmV0dXJuOwogCX0KIAorCWVycm9yLT5zZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwogCWVycm9yLT5laXIgPSBJOTE1X1JFQUQoRUlSKTsKIAllcnJvci0+cGd0YmxfZXIgPSBJOTE1X1JFQUQoUEdUQkxfRVIpOwogCWVycm9yLT5waXBlYXN0YXQgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKQEAgLTQxMSw2ICs1ODksNyBAQAogCQllcnJvci0+aXBlaHIgPSBJOTE1X1JFQUQoSVBFSFIpOwogCQllcnJvci0+aW5zdGRvbmUgPSBJOTE1X1JFQUQoSU5TVERPTkUpOwogCQllcnJvci0+YWN0aGQgPSBJOTE1X1JFQUQoQUNUSEQpOworCQllcnJvci0+YmJhZGRyID0gMDsKIAl9IGVsc2UgewogCQllcnJvci0+aXBlaXIgPSBJOTE1X1JFQUQoSVBFSVJfSTk2NSk7CiAJCWVycm9yLT5pcGVociA9IEk5MTVfUkVBRChJUEVIUl9JOTY1KTsKQEAgLTQxOCwxNCArNTk3LDEwMSBAQAogCQllcnJvci0+aW5zdHBzID0gSTkxNV9SRUFEKElOU1RQUyk7CiAJCWVycm9yLT5pbnN0ZG9uZTEgPSBJOTE1X1JFQUQoSU5TVERPTkUxKTsKIAkJZXJyb3ItPmFjdGhkID0gSTkxNV9SRUFEKEFDVEhEX0k5NjUpOworCQllcnJvci0+YmJhZGRyID0gSTkxNV9SRUFENjQoQkJfQUREUik7CisJfQorCisJYmJhZGRyID0gaTkxNV9yaW5nYnVmZmVyX2xhc3RfYmF0Y2goZGV2KTsKKworCS8qIEdyYWIgdGhlIGN1cnJlbnQgYmF0Y2hidWZmZXIsIG1vc3QgbGlrZWx5IHRvIGhhdmUgY3Jhc2hlZC4gKi8KKwliYXRjaGJ1ZmZlclswXSA9IE5VTEw7CisJYmF0Y2hidWZmZXJbMV0gPSBOVUxMOworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlpZiAoYmF0Y2hidWZmZXJbMF0gPT0gTlVMTCAmJgorCQkgICAgYmJhZGRyID49IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYmCisJCSAgICBiYmFkZHIgPCBvYmpfcHJpdi0+Z3R0X29mZnNldCArIG9iai0+c2l6ZSkKKwkJCWJhdGNoYnVmZmVyWzBdID0gb2JqOworCisJCWlmIChiYXRjaGJ1ZmZlclsxXSA9PSBOVUxMICYmCisJCSAgICBlcnJvci0+YWN0aGQgPj0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgJiYKKwkJICAgIGVycm9yLT5hY3RoZCA8IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgb2JqLT5zaXplICYmCisJCSAgICBiYXRjaGJ1ZmZlclswXSAhPSBvYmopCisJCQliYXRjaGJ1ZmZlclsxXSA9IG9iajsKKworCQljb3VudCsrOworCX0KKworCS8qIFdlIG5lZWQgdG8gY29weSB0aGVzZSB0byBhbiBhbm9ueW1vdXMgYnVmZmVyIGFzIHRoZSBzaW1wbGVzdAorCSAqIG1ldGhvZCB0byBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB1c2VycGFjZS4KKwkgKi8KKwllcnJvci0+YmF0Y2hidWZmZXJbMF0gPSBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2LCBiYXRjaGJ1ZmZlclswXSk7CisJZXJyb3ItPmJhdGNoYnVmZmVyWzFdID0gaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldiwgYmF0Y2hidWZmZXJbMV0pOworCisJLyogUmVjb3JkIHRoZSByaW5nYnVmZmVyICovCisJZXJyb3ItPnJpbmdidWZmZXIgPSBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2LCBkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisKKwkvKiBSZWNvcmQgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGxpc3QuICovCisJZXJyb3ItPmFjdGl2ZV9ibyA9IE5VTEw7CisJZXJyb3ItPmFjdGl2ZV9ib19jb3VudCA9IDA7CisKKwlpZiAoY291bnQpCisJCWVycm9yLT5hY3RpdmVfYm8gPSBrbWFsbG9jKHNpemVvZigqZXJyb3ItPmFjdGl2ZV9ibykqY291bnQsCisJCQkJCSAgIEdGUF9BVE9NSUMpOworCisJaWYgKGVycm9yLT5hY3RpdmVfYm8pIHsKKwkJaW50IGkgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0uc2l6ZSA9IG9iai0+c2l6ZTsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0ubmFtZSA9IG9iai0+bmFtZTsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0uc2Vxbm8gPSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm87CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLmd0dF9vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0ucmVhZF9kb21haW5zID0gb2JqLT5yZWFkX2RvbWFpbnM7CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLndyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5mZW5jZV9yZWcgPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5waW5uZWQgPSAwOworCQkJaWYgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQkJCWVycm9yLT5hY3RpdmVfYm9baV0ucGlubmVkID0gMTsKKwkJCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPiAwKQorCQkJCWVycm9yLT5hY3RpdmVfYm9baV0ucGlubmVkID0gLTE7CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLnRpbGluZyA9IG9ial9wcml2LT50aWxpbmdfbW9kZTsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0uZGlydHkgPSBvYmpfcHJpdi0+ZGlydHk7CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLnB1cmdlYWJsZSA9IG9ial9wcml2LT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRDsKKworCQkJaWYgKCsraSA9PSBjb3VudCkKKwkJCQlicmVhazsKKwkJfQorCQllcnJvci0+YWN0aXZlX2JvX2NvdW50ID0gaTsKIAl9CiAKIAlkb19nZXR0aW1lb2ZkYXkoJmVycm9yLT50aW1lKTsKIAotCWRldl9wcml2LT5maXJzdF9lcnJvciA9IGVycm9yOwotCi1vdXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CisJaWYgKGRldl9wcml2LT5maXJzdF9lcnJvciA9PSBOVUxMKSB7CisJCWRldl9wcml2LT5maXJzdF9lcnJvciA9IGVycm9yOworCQllcnJvciA9IE5VTEw7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoZXJyb3IpCisJCWk5MTVfZXJyb3Jfc3RhdGVfZnJlZShkZXYsIGVycm9yKTsKK30KKwordm9pZCBpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3I7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5lcnJvcl9sb2NrKTsKKwllcnJvciA9IGRldl9wcml2LT5maXJzdF9lcnJvcjsKKwlkZXZfcHJpdi0+Zmlyc3RfZXJyb3IgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CisKKwlpZiAoZXJyb3IpCisJCWk5MTVfZXJyb3Jfc3RhdGVfZnJlZShkZXYsIGVycm9yKTsKIH0KIAogLyoqCkBAIC01NzYsNyArODQyLDcgQEAKIAogCWF0b21pY19pbmMoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmV0dXJuIGlyb25sYWtlX2lycV9oYW5kbGVyKGRldik7CiAKIAlpaXIgPSBJOTE1X1JFQUQoSUlSKTsKQEAgLTczNyw3ICsxMDAzLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogCWlmIChkZXYtPmlycV9lbmFibGVkICYmICgrK2Rldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA9PSAxKSkgewotCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCWlyb25sYWtlX2VuYWJsZV9ncmFwaGljc19pcnEoZGV2X3ByaXYsIEdUX1VTRVJfSU5URVJSVVBUKTsKIAkJZWxzZQogCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKQEAgLTc1Myw3ICsxMDE5LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKIAlCVUdfT04oZGV2LT5pcnFfZW5hYmxlZCAmJiBkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPD0gMCk7CiAJaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKC0tZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID09IDApKSB7Ci0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJaXJvbmxha2VfZGlzYWJsZV9ncmFwaGljc19pcnEoZGV2X3ByaXYsIEdUX1VTRVJfSU5URVJSVVBUKTsKIAkJZWxzZQogCQkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CkBAIC04NjEsNyArMTEyNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJaXJvbmxha2VfZW5hYmxlX2Rpc3BsYXlfaXJxKGRldl9wcml2LCAocGlwZSA9PSAwKSA/IAogCQkJCQkgICAgREVfUElQRUFfVkJMQU5LOiBERV9QSVBFQl9WQkxBTkspOwogCWVsc2UgaWYgKElTX0k5NjVHKGRldikpCkBAIC04ODMsNyArMTE0OSw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWlyb25sYWtlX2Rpc2FibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIChwaXBlID09IDApID8gCiAJCQkJCSAgICAgREVfUElQRUFfVkJMQU5LOiBERV9QSVBFQl9WQkxBTkspOwogCWVsc2UKQEAgLTg5Nyw3ICsxMTYzLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKQorCWlmICghSEFTX1BDSF9TUExJVChkZXYpKQogCQlvcHJlZ2lvbl9lbmFibGVfYXNsZShkZXYpOwogCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDE7CiB9CkBAIC05NzMsNyArMTIzOSwxMSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilkYXRhOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGFjdGhkOwotICAgICAgIAorCisJLyogTm8gcmVzZXQgc3VwcG9ydCBvbiB0aGlzIGNoaXAgeWV0LiAqLworCWlmIChJU19HRU42KGRldikpCisJCXJldHVybjsKKwogCWlmICghSVNfSTk2NUcoZGV2KSkKIAkJYWN0aGQgPSBJOTE1X1JFQUQoQUNUSEQpOwogCWVsc2UKQEAgLTEwNjQsNiArMTMzNCwxMyBAQAogCUk5MTVfV1JJVEUoU0RFSUVSLCBkZXZfcHJpdi0+cGNoX2lycV9lbmFibGVfcmVnKTsKIAkodm9pZCkgSTkxNV9SRUFEKFNERUlFUik7CiAKKwlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKSB7CisJCS8qIENsZWFyICYgZW5hYmxlIFBDVSBldmVudCBpbnRlcnJ1cHRzICovCisJCUk5MTVfV1JJVEUoREVJSVIsIERFX1BDVV9FVkVOVCk7CisJCUk5MTVfV1JJVEUoREVJRVIsIEk5MTVfUkVBRChERUlFUikgfCBERV9QQ1VfRVZFTlQpOworCQlpcm9ubGFrZV9lbmFibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIERFX1BDVV9FVkVOVCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzYsNyArMTM1Myw3IEBACiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Z193b3JrLCBpOTE1X2hvdHBsdWdfd29ya19mdW5jKTsKIAlJTklUX1dPUksoJmRldl9wcml2LT5lcnJvcl93b3JrLCBpOTE1X2Vycm9yX3dvcmtfZnVuYyk7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaXJvbmxha2VfaXJxX3ByZWluc3RhbGwoZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTExMDgsNyArMTM4NSw3IEBACiAKIAlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwoZGV2KTsKIAogCS8qIFVubWFzayB0aGUgaW50ZXJydXB0cyB0aGF0IHdlIGFsd2F5cyB3YW50IG9uLiAqLwpAQCAtMTE5Niw3ICsxNDczLDcgQEAKIAogCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IDA7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaXJvbmxha2VfaXJxX3VuaW5zdGFsbChkZXYpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggYWIxYmQyZC4uM2Q1OTg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC01Myw2ICs1MywyNSBAQAogI2RlZmluZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMjI0TQkoMHhjIDw8IDQpCiAjZGVmaW5lIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8zNTJNCSgweGQgPDwgNCkKIAorI2RlZmluZSBTTkJfR01DSF9DVFJMCTB4NTAKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl9NQVNLCTB4RjgKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8zMk0JCSgxIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNjRNCQkoMiA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzk2TQkJKDMgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8xMjhNCSg0IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMTYwTQkoNSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzE5Mk0JKDYgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8yMjRNCSg3IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMjU2TQkoOCA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzI4OE0JKDkgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8zMjBNCSgweGEgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8zNTJNCSgweGIgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8zODRNCSgweGMgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl80MTZNCSgweGQgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl80NDhNCSgweGUgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl80ODBNCSgweGYgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl81MTJNCSgweDEwIDw8IDMpCisKIC8qIFBDSSBjb25maWcgc3BhY2UgKi8KIAogI2RlZmluZSBIUExMQ0MJMHhjMCAvKiA4NTUgb25seSAqLwpAQCAtNjEsNiArODAsNyBAQAogI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8yMDAJCSgxIDw8IDApCiAjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzEzMwkJKDIgPDwgMCkKICNkZWZpbmUgICBHQ19DTE9DS18xNjZfMjUwCQkoMyA8PCAwKQorI2RlZmluZSBHQ0ZHQzIJMHhkYQogI2RlZmluZSBHQ0ZHQwkweGYwIC8qIDkxNSsgb25seSAqLwogI2RlZmluZSAgIEdDX0xPV19GUkVRVUVOQ1lfRU5BQkxFCSgxIDw8IDcpCiAjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQpAQCAtMjM0LDYgKzI1NCw5IEBACiAjZGVmaW5lICAgSTk2NV9GRU5DRV9SRUdfVkFMSUQJCSgxPDwwKQogI2RlZmluZSAgIEk5NjVfRkVOQ0VfTUFYX1BJVENIX1ZBTAkweDA0MDAKIAorI2RlZmluZSBGRU5DRV9SRUdfU0FORFlCUklER0VfMAkJMHgxMDAwMDAKKyNkZWZpbmUgICBTQU5EWUJSSURHRV9GRU5DRV9QSVRDSF9TSElGVAkzMgorCiAvKgogICogSW5zdHJ1Y3Rpb24gYW5kIGludGVycnVwdCBjb250cm9sIHJlZ3MKICAqLwpAQCAtMjY1LDYgKzI4OCw3IEBACiAjZGVmaW5lIElOU1RET05FMQkweDAyMDdjIC8qIDk2NSsgb25seSAqLwogI2RlZmluZSBBQ1RIRF9JOTY1CTB4MDIwNzQKICNkZWZpbmUgSFdTX1BHQQkJMHgwMjA4MAorI2RlZmluZSBIV1NfUEdBX0dFTjYJMHgwNDA4MAogI2RlZmluZSBIV1NfQUREUkVTU19NQVNLCTB4ZmZmZmYwMDAKICNkZWZpbmUgSFdTX1NUQVJUX0FERFJFU1NfU0hJRlQJNAogI2RlZmluZSBQV1JDVFhBCQkweDIwODggLyogOTY1R00rIG9ubHkgKi8KQEAgLTI4Miw3ICszMDYsNyBAQAogI2RlZmluZSAgIEk5MTVfUElQRV9DT05UUk9MX05PVElGWV9JTlRFUlJVUFQJCSgxPDwxOCkKICNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQJCQkoMTw8MTcpCiAjZGVmaW5lICAgSTkxNV9SRU5ERVJfQ09NTUFORF9QQVJTRVJfRVJST1JfSU5URVJSVVBUCSgxPDwxNSkKLSNkZWZpbmUgICBJOTE1X0dNQ0hfVEhFUk1BTF9TRU5TT1JfRVZFTlRfSU5URVJSVVBUCSgxPDwxNCkKKyNkZWZpbmUgICBJOTE1X0dNQ0hfVEhFUk1BTF9TRU5TT1JfRVZFTlRfSU5URVJSVVBUCSgxPDwxNCkgLyogcC1zdGF0ZSAqLwogI2RlZmluZSAgIEk5MTVfSFdCX09PTV9JTlRFUlJVUFQJCQkoMTw8MTMpCiAjZGVmaW5lICAgSTkxNV9TWU5DX1NUQVRVU19JTlRFUlJVUFQJCQkoMTw8MTIpCiAjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0FfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8MTEpCkBAIC0zMDYsMTEgKzMzMCwxNCBAQAogI2RlZmluZSAgIEk5MTVfRVJST1JfTUVNT1JZX1JFRlJFU0gJCQkoMTw8MSkKICNkZWZpbmUgICBJOTE1X0VSUk9SX0lOU1RSVUNUSU9OCQkJKDE8PDApCiAjZGVmaW5lIElOU1RQTQkgICAgICAgIDB4MDIwYzAKKyNkZWZpbmUgICBJTlNUUE1fU0VMRl9FTiAoMTw8MTIpIC8qIDkxNUdNIG9ubHkgKi8KICNkZWZpbmUgQUNUSEQJICAgICAgICAweDAyMGM4CiAjZGVmaW5lIEZXX0JMQwkJMHgwMjBkOAogI2RlZmluZSBGV19CTEMyCSAJMHgwMjBkYwogI2RlZmluZSBGV19CTENfU0VMRgkweDAyMGUwIC8qIDkxNSsgb25seSAqLwotI2RlZmluZSAgIEZXX0JMQ19TRUxGX0VOICgxPDwxNSkKKyNkZWZpbmUgICBGV19CTENfU0VMRl9FTl9NQVNLICAgICAgKDE8PDMxKQorI2RlZmluZSAgIEZXX0JMQ19TRUxGX0ZJRk9fTUFTSyAgICAoMTw8MTYpIC8qIDk0NSBvbmx5ICovCisjZGVmaW5lICAgRldfQkxDX1NFTEZfRU4gICAgICAgICAgICgxPDwxNSkgLyogOTQ1IG9ubHkgKi8KICNkZWZpbmUgTU1fQlVSU1RfTEVOR1RIICAgICAweDAwNzAwMDAwCiAjZGVmaW5lIE1NX0ZJRk9fV0FURVJNQVJLICAgMHgwMDAxRjAwMAogI2RlZmluZSBMTV9CVVJTVF9MRU5HVEggICAgIDB4MDAwMDA3MDAKQEAgLTMyNCw2ICszNTEsNyBAQAogI2RlZmluZSAgIENNMF9DT0xPUl9FVklDVF9ESVNBQkxFICgxPDwzKQogI2RlZmluZSAgIENNMF9ERVBUSF9XUklURV9ESVNBQkxFICgxPDwxKQogI2RlZmluZSAgIENNMF9SQ19PUF9GTFVTSF9ESVNBQkxFICgxPDwwKQorI2RlZmluZSBCQl9BRERSCQkweDAyMTQwIC8qIDggYnl0ZXMgKi8KICNkZWZpbmUgR0ZYX0ZMU0hfQ05UTAkweDAyMTcwIC8qIDkxNSsgb25seSAqLwogCiAKQEAgLTc4NCwxMCArODEyLDE0NCBAQAogI2RlZmluZSBDTEtDRkdfTUVNXzgwMAkJCQkJKDMgPDwgNCkKICNkZWZpbmUgQ0xLQ0ZHX01FTV9NQVNLCQkJCQkoNyA8PCA0KQogCi0vKiogR005NjUgR000NSByZW5kZXIgc3RhbmRieSByZWdpc3RlciAqLwotI2RlZmluZSBNQ0hCQVJfUkVOREVSX1NUQU5EQlkJMHgxMTFCOAorI2RlZmluZSBDUlNUQU5EVklECQkweDExMTAwCisjZGVmaW5lIFBYVkZSRVFfQkFTRQkJMHgxMTExMCAvKiBQWzAtMTVdVklERlJFUSAoMHgxMTE0YykgKElyb25sYWtlKSAqLworI2RlZmluZSAgIFBYVkZSRVFfUFhfTUFTSwkweDdmMDAwMDAwCisjZGVmaW5lICAgUFhWRlJFUV9QWF9TSElGVAkyNAorI2RlZmluZSBWSURGUkVRX0JBU0UJCTB4MTExMTAKKyNkZWZpbmUgVklERlJFUTEJCTB4MTExMTAgLyogVklERlJFUTEtNCAoMHgxMTExYykgKENhbnRpZ2EpICovCisjZGVmaW5lIFZJREZSRVEyCQkweDExMTE0CisjZGVmaW5lIFZJREZSRVEzCQkweDExMTE4CisjZGVmaW5lIFZJREZSRVE0CQkweDExMTFjCisjZGVmaW5lICAgVklERlJFUV9QMF9NQVNLCTB4MWYwMDAwMDAKKyNkZWZpbmUgICBWSURGUkVRX1AwX1NISUZUCTI0CisjZGVmaW5lICAgVklERlJFUV9QMF9DU0NMS19NQVNLCTB4MDBmMDAwMDAKKyNkZWZpbmUgICBWSURGUkVRX1AwX0NTQ0xLX1NISUZUIDIwCisjZGVmaW5lICAgVklERlJFUV9QMF9DUkNMS19NQVNLCTB4MDAwZjAwMDAKKyNkZWZpbmUgICBWSURGUkVRX1AwX0NSQ0xLX1NISUZUIDE2CisjZGVmaW5lICAgVklERlJFUV9QMV9NQVNLCTB4MDAwMDFmMDAKKyNkZWZpbmUgICBWSURGUkVRX1AxX1NISUZUCTgKKyNkZWZpbmUgICBWSURGUkVRX1AxX0NTQ0xLX01BU0sJMHgwMDAwMDBmMAorI2RlZmluZSAgIFZJREZSRVFfUDFfQ1NDTEtfU0hJRlQgNAorI2RlZmluZSAgIFZJREZSRVFfUDFfQ1JDTEtfTUFTSwkweDAwMDAwMDBmCisjZGVmaW5lIElOVFRPRVhUX0JBU0VfSUxLCTB4MTEzMDAKKyNkZWZpbmUgSU5UVE9FWFRfQkFTRQkJMHgxMTEyMCAvKiBJTlRUT0VYVDEtOCAoMHgxMTEzYykgKi8KKyNkZWZpbmUgICBJTlRUT0VYVF9NQVAzX1NISUZUCTI0CisjZGVmaW5lICAgSU5UVE9FWFRfTUFQM19NQVNLCSgweDFmIDw8IElOVFRPRVhUX01BUDNfU0hJRlQpCisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMl9TSElGVAkxNgorI2RlZmluZSAgIElOVFRPRVhUX01BUDJfTUFTSwkoMHgxZiA8PCBJTlRUT0VYVF9NQVAyX1NISUZUKQorI2RlZmluZSAgIElOVFRPRVhUX01BUDFfU0hJRlQJOAorI2RlZmluZSAgIElOVFRPRVhUX01BUDFfTUFTSwkoMHgxZiA8PCBJTlRUT0VYVF9NQVAxX1NISUZUKQorI2RlZmluZSAgIElOVFRPRVhUX01BUDBfU0hJRlQJMAorI2RlZmluZSAgIElOVFRPRVhUX01BUDBfTUFTSwkoMHgxZiA8PCBJTlRUT0VYVF9NQVAwX1NISUZUKQorI2RlZmluZSBNRU1TV0NUTAkJMHgxMTE3MCAvKiBJcm9ubGFrZSBvbmx5ICovCisjZGVmaW5lICAgTUVNQ1RMX0NNRF9NQVNLCTB4ZTAwMAorI2RlZmluZSAgIE1FTUNUTF9DTURfU0hJRlQJMTMKKyNkZWZpbmUgICBNRU1DVExfQ01EX1JDTEtfT0ZGCTAKKyNkZWZpbmUgICBNRU1DVExfQ01EX1JDTEtfT04JMQorI2RlZmluZSAgIE1FTUNUTF9DTURfQ0hGUkVRCTIKKyNkZWZpbmUgICBNRU1DVExfQ01EX0NIVklECTMKKyNkZWZpbmUgICBNRU1DVExfQ01EX1ZNTU9GRgk0CisjZGVmaW5lICAgTUVNQ1RMX0NNRF9WTU1PTgk1CisjZGVmaW5lICAgTUVNQ1RMX0NNRF9TVFMJKDE8PDEyKSAvKiB3cml0ZSAxIHRyaWdnZXJzIGNvbW1hbmQsIGNsZWFycworCQkJCQkgICB3aGVuIGNvbW1hbmQgY29tcGxldGUgKi8KKyNkZWZpbmUgICBNRU1DVExfRlJFUV9NQVNLCTB4MGYwMCAvKiBqaXR0ZXIsIGZyb20gMC0xNSAqLworI2RlZmluZSAgIE1FTUNUTF9GUkVRX1NISUZUCTgKKyNkZWZpbmUgICBNRU1DVExfU0ZDQVZNCQkoMTw8NykKKyNkZWZpbmUgICBNRU1DVExfVEdUX1ZJRF9NQVNLCTB4MDA3ZgorI2RlZmluZSBNRU1JSFlTVAkJMHgxMTE3YworI2RlZmluZSBNRU1JTlRSRU4JCTB4MTExODAgLyogMTYgYml0cyAqLworI2RlZmluZSAgIE1FTUlOVF9SU0VYSVRfRU4JKDE8PDgpCisjZGVmaW5lICAgTUVNSU5UX0NYX1NVUFJfRU4JKDE8PDcpCisjZGVmaW5lICAgTUVNSU5UX0NPTlRfQlVTWV9FTgkoMTw8NikKKyNkZWZpbmUgICBNRU1JTlRfQVZHX0JVU1lfRU4JKDE8PDUpCisjZGVmaW5lICAgTUVNSU5UX0VWQUxfQ0hHX0VOCSgxPDw0KQorI2RlZmluZSAgIE1FTUlOVF9NT05fSURMRV9FTgkoMTw8MykKKyNkZWZpbmUgICBNRU1JTlRfVVBfRVZBTF9FTgkoMTw8MikKKyNkZWZpbmUgICBNRU1JTlRfRE9XTl9FVkFMX0VOCSgxPDwxKQorI2RlZmluZSAgIE1FTUlOVF9TV19DTURfRU4JKDE8PDApCisjZGVmaW5lIE1FTUlOVFJTVFIJCTB4MTExODIgLyogMTYgYml0cyAqLworI2RlZmluZSAgIE1FTV9SU0VYSVRfTUFTSwkweGMwMDAKKyNkZWZpbmUgICBNRU1fUlNFWElUX1NISUZUCTE0CisjZGVmaW5lICAgTUVNX0NPTlRfQlVTWV9NQVNLCTB4MzAwMAorI2RlZmluZSAgIE1FTV9DT05UX0JVU1lfU0hJRlQJMTIKKyNkZWZpbmUgICBNRU1fQVZHX0JVU1lfTUFTSwkweDBjMDAKKyNkZWZpbmUgICBNRU1fQVZHX0JVU1lfU0hJRlQJMTAKKyNkZWZpbmUgICBNRU1fRVZBTF9DSEdfTUFTSwkweDAzMDAKKyNkZWZpbmUgICBNRU1fRVZBTF9CVVNZX1NISUZUCTgKKyNkZWZpbmUgICBNRU1fTU9OX0lETEVfTUFTSwkweDAwYzAKKyNkZWZpbmUgICBNRU1fTU9OX0lETEVfU0hJRlQJNgorI2RlZmluZSAgIE1FTV9VUF9FVkFMX01BU0sJMHgwMDMwCisjZGVmaW5lICAgTUVNX1VQX0VWQUxfU0hJRlQJNAorI2RlZmluZSAgIE1FTV9ET1dOX0VWQUxfTUFTSwkweDAwMGMKKyNkZWZpbmUgICBNRU1fRE9XTl9FVkFMX1NISUZUCTIKKyNkZWZpbmUgICBNRU1fU1dfQ01EX01BU0sJMHgwMDAzCisjZGVmaW5lICAgTUVNX0lOVF9TVEVFUl9HRlgJMAorI2RlZmluZSAgIE1FTV9JTlRfU1RFRVJfQ01SCTEKKyNkZWZpbmUgICBNRU1fSU5UX1NURUVSX1NNSQkyCisjZGVmaW5lICAgTUVNX0lOVF9TVEVFUl9TQ0kJMworI2RlZmluZSBNRU1JTlRSU1RTCQkweDExMTg0CisjZGVmaW5lICAgTUVNSU5UX1JTRVhJVAkJKDE8PDcpCisjZGVmaW5lICAgTUVNSU5UX0NPTlRfQlVTWQkoMTw8NikKKyNkZWZpbmUgICBNRU1JTlRfQVZHX0JVU1kJKDE8PDUpCisjZGVmaW5lICAgTUVNSU5UX0VWQUxfQ0hHCSgxPDw0KQorI2RlZmluZSAgIE1FTUlOVF9NT05fSURMRQkoMTw8MykKKyNkZWZpbmUgICBNRU1JTlRfVVBfRVZBTAkoMTw8MikKKyNkZWZpbmUgICBNRU1JTlRfRE9XTl9FVkFMCSgxPDwxKQorI2RlZmluZSAgIE1FTUlOVF9TV19DTUQJCSgxPDwwKQorI2RlZmluZSBNRU1NT0RFQ1RMCQkweDExMTkwCisjZGVmaW5lICAgTUVNTU9ERV9CT09TVF9FTgkoMTw8MzEpCisjZGVmaW5lICAgTUVNTU9ERV9CT09TVF9GUkVRX01BU0sgMHgwZjAwMDAwMCAvKiBqaXR0ZXIgZm9yIGJvb3N0LCAwLTE1ICovCisjZGVmaW5lICAgTUVNTU9ERV9CT09TVF9GUkVRX1NISUZUIDI0CisjZGVmaW5lICAgTUVNTU9ERV9JRExFX01PREVfTUFTSyAweDAwMDMwMDAwCisjZGVmaW5lICAgTUVNTU9ERV9JRExFX01PREVfU0hJRlQgMTYKKyNkZWZpbmUgICBNRU1NT0RFX0lETEVfTU9ERV9FVkFMIDAKKyNkZWZpbmUgICBNRU1NT0RFX0lETEVfTU9ERV9DT05UIDEKKyNkZWZpbmUgICBNRU1NT0RFX0hXSURMRV9FTgkoMTw8MTUpCisjZGVmaW5lICAgTUVNTU9ERV9TV01PREVfRU4JKDE8PDE0KQorI2RlZmluZSAgIE1FTU1PREVfUkNMS19HQVRFCSgxPDwxMykKKyNkZWZpbmUgICBNRU1NT0RFX0hXX1VQREFURQkoMTw8MTIpCisjZGVmaW5lICAgTUVNTU9ERV9GU1RBUlRfTUFTSwkweDAwMDAwZjAwIC8qIHN0YXJ0aW5nIGppdHRlciwgMC0xNSAqLworI2RlZmluZSAgIE1FTU1PREVfRlNUQVJUX1NISUZUCTgKKyNkZWZpbmUgICBNRU1NT0RFX0ZNQVhfTUFTSwkweDAwMDAwMGYwIC8qIG1heCBqaXR0ZXIsIDAtMTUgKi8KKyNkZWZpbmUgICBNRU1NT0RFX0ZNQVhfU0hJRlQJNAorI2RlZmluZSAgIE1FTU1PREVfRk1JTl9NQVNLCTB4MDAwMDAwMGYgLyogbWluIGppdHRlciwgMC0xNSAqLworI2RlZmluZSBSQ0JNQVhBVkcJCTB4MTExOWMKKyNkZWZpbmUgTUVNU1dDVEwyCQkweDExMTllIC8qIENhbnRpZ2Egb25seSAqLworI2RlZmluZSAgIFNXTUVNQ01EX1JFTkRFUl9PRkYJKDAgPDwgMTMpCisjZGVmaW5lICAgU1dNRU1DTURfUkVOREVSX09OCSgxIDw8IDEzKQorI2RlZmluZSAgIFNXTUVNQ01EX1NXRlJFUQkoMiA8PCAxMykKKyNkZWZpbmUgICBTV01FTUNNRF9UQVJWSUQJKDMgPDwgMTMpCisjZGVmaW5lICAgU1dNRU1DTURfVlJNX09GRgkoNCA8PCAxMykKKyNkZWZpbmUgICBTV01FTUNNRF9WUk1fT04JKDUgPDwgMTMpCisjZGVmaW5lICAgQ01EU1RTCQkoMTw8MTIpCisjZGVmaW5lICAgU0ZDQVZNCQkoMTw8MTEpCisjZGVmaW5lICAgU1dGUkVRX01BU0sJCTB4MDM4MCAvKiBQMC03ICovCisjZGVmaW5lICAgU1dGUkVRX1NISUZUCQk3CisjZGVmaW5lICAgVEFSVklEX01BU0sJCTB4MDAxZgorI2RlZmluZSBNRU1TVEFUX0NURwkJMHgxMTFhMAorI2RlZmluZSBSQ0JNSU5BVkcJCTB4MTExYTAKKyNkZWZpbmUgUkNVUEVJCQkJMHgxMTFiMAorI2RlZmluZSBSQ0RORUkJCQkweDExMWI0CisjZGVmaW5lIE1DSEJBUl9SRU5ERVJfU1RBTkRCWQkJMHgxMTFiOAogI2RlZmluZSAgIFJDWF9TV19FWElUCQkoMTw8MjMpCiAjZGVmaW5lICAgUlNYX1NUQVRVU19NQVNLCTB4MDA3MDAwMDAKKyNkZWZpbmUgVklEQ1RMCQkJMHgxMTFjMAorI2RlZmluZSBWSURTVFMJCQkweDExMWM4CisjZGVmaW5lIFZJRFNUQVJUCQkweDExMWNjIC8qIDggYml0cyAqLworI2RlZmluZSBNRU1TVEFUX0lMSwkJCTB4MTExZjgKKyNkZWZpbmUgICBNRU1TVEFUX1ZJRF9NQVNLCTB4N2YwMAorI2RlZmluZSAgIE1FTVNUQVRfVklEX1NISUZUCTgKKyNkZWZpbmUgICBNRU1TVEFUX1BTVEFURV9NQVNLCTB4MDBmOAorI2RlZmluZSAgIE1FTVNUQVRfUFNUQVRFX1NISUZUICAzCisjZGVmaW5lICAgTUVNU1RBVF9NT05fQUNUVgkoMTw8MikKKyNkZWZpbmUgICBNRU1TVEFUX1NSQ19DVExfTUFTSwkweDAwMDMKKyNkZWZpbmUgICBNRU1TVEFUX1NSQ19DVExfQ09SRQkwCisjZGVmaW5lICAgTUVNU1RBVF9TUkNfQ1RMX1RSQgkxCisjZGVmaW5lICAgTUVNU1RBVF9TUkNfQ1RMX1RITQkyCisjZGVmaW5lICAgTUVNU1RBVF9TUkNfQ1RMX1NUREJZIDMKKyNkZWZpbmUgUkNQUkVWQlNZVFVQQVZHCQkweDExM2I4CisjZGVmaW5lIFJDUFJFVkJTWVRETkFWRwkJMHgxMTNiYwogI2RlZmluZSBQRUdfQkFORF9HQVBfREFUQQkweDE0ZDY4CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCmluZGV4IGEzYjkwYzkuLmFjMGQxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC02ODIsNiArNjgyLDggQEAKIAkJSTkxNV9XUklURShQQ0hfUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKIAkJSTkxNV9XUklURShQQ0hfUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKIAkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKwkJSTkxNV9XUklURShNQ0hCQVJfUkVOREVSX1NUQU5EQlksCisJCQkgICBkZXZfcHJpdi0+c2F2ZU1DSEJBUl9SRU5ERVJfU1RBTkRCWSk7CiAJfSBlbHNlIHsKIAkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKIAkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CkBAIC03NDUsMTEgKzc0NywxNiBAQAogCQlkZXZfcHJpdi0+c2F2ZUdUSU1SID0gSTkxNV9SRUFEKEdUSU1SKTsKIAkJZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUiA9IEk5MTVfUkVBRChGRElfUlhBX0lNUik7CiAJCWRldl9wcml2LT5zYXZlRkRJX1JYQl9JTVIgPSBJOTE1X1JFQUQoRkRJX1JYQl9JTVIpOworCQlkZXZfcHJpdi0+c2F2ZU1DSEJBUl9SRU5ERVJfU1RBTkRCWSA9CisJCQlJOTE1X1JFQUQoTUNIQkFSX1JFTkRFUl9TVEFOREJZKTsKIAl9IGVsc2UgewogCQlkZXZfcHJpdi0+c2F2ZUlFUiA9IEk5MTVfUkVBRChJRVIpOwogCQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOwogCX0KIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2Rpc2FibGVfZHJwcyhkZXYpOworCiAJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwogCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CiAKQEAgLTgyMCw2ICs4MjcsOSBAQAogCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwogCWludGVsX2luaXRfY2xvY2tfZ2F0aW5nKGRldik7CiAKKwlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKQorCQlpcm9ubGFrZV9lbmFibGVfZHJwcyhkZXYpOworCiAJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwogCUk5MTVfV1JJVEUgKENBQ0hFX01PREVfMCwgZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgfCAweGZmZmYwMDAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCmluZGV4IDE1ZmJjMWIuLjcwYzlkNGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0yNDcsNiArMjQ3LDcgQEAKIHBhcnNlX2dlbmVyYWxfZmVhdHVyZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgICAgc3RydWN0IGJkYl9oZWFkZXIgKmJkYikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAlzdHJ1Y3QgYmRiX2dlbmVyYWxfZmVhdHVyZXMgKmdlbmVyYWw7CiAKIAkvKiBTZXQgc2Vuc2libGUgZGVmYXVsdHMgaW4gY2FzZSB3ZSBjYW4ndCBmaW5kIHRoZSBnZW5lcmFsIGJsb2NrICovCkBAIC0yNjMsNyArMjY0LDcgQEAKIAkJCWlmIChJU19JODVYKGRldl9wcml2LT5kZXYpKQogCQkJCWRldl9wcml2LT5sdmRzX3NzY19mcmVxID0KIAkJCQkJZ2VuZXJhbC0+c3NjX2ZyZXEgPyA2NiA6IDQ4OwotCQkJZWxzZSBpZiAoSVNfSVJPTkxBS0UoZGV2X3ByaXYtPmRldikpCisJCQllbHNlIGlmIChJU19JUk9OTEFLRShkZXZfcHJpdi0+ZGV2KSB8fCBJU19HRU42KGRldikpCiAJCQkJZGV2X3ByaXYtPmx2ZHNfc3NjX2ZyZXEgPQogCQkJCQlnZW5lcmFsLT5zc2NfZnJlcSA/IDEwMCA6IDEyMDsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKaW5kZXggNzlkZDQwMi4uZmNjZjA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiB0ZW1wLCByZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZWcgPSBQQ0hfQURQQTsKIAllbHNlCiAJCXJlZyA9IEFEUEE7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAllbHNlCiAJCWRwbGxfbWRfcmVnID0gRFBMTF9CX01EOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJYWRwYV9yZWcgPSBQQ0hfQURQQTsKIAllbHNlCiAJCWFkcGFfcmVnID0gQURQQTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCSAqIERpc2FibGUgc2VwYXJhdGUgbW9kZSBtdWx0aXBsaWVyIHVzZWQgd2hlbiBjbG9uaW5nIFNEVk8gdG8gQ1JUCiAJICogWFhYIHRoaXMgbmVlZHMgdG8gYmUgYWRqdXN0ZWQgd2hlbiB3ZSByZWFsbHkgYXJlIGNsb25pbmcKIAkgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChJU19JOTY1RyhkZXYpICYmICFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJZHBsbF9tZCA9IEk5MTVfUkVBRChkcGxsX21kX3JlZyk7CiAJCUk5MTVfV1JJVEUoZHBsbF9tZF9yZWcsCiAJCQkgICBkcGxsX21kICYgfkRQTExfTURfVURJX01VTFRJUExJRVJfTUFTSyk7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogCiAJaWYgKGludGVsX2NydGMtPnBpcGUgPT0gMCkgewogCQlhZHBhIHw9IEFEUEFfUElQRV9BX1NFTEVDVDsKLQkJaWYgKCFJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoIUhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCAwKTsKIAl9IGVsc2UgewogCQlhZHBhIHw9IEFEUEFfUElQRV9CX1NFTEVDVDsKLQkJaWYgKCFJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoIUhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCAwKTsKIAl9CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXUzMiBob3RwbHVnX2VuOwogCWludCBpLCB0cmllcyA9IDA7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm4gaW50ZWxfaXJvbmxha2VfY3J0X2RldGVjdF9ob3RwbHVnKGNvbm5lY3Rvcik7CiAKIAkvKgpAQCAtNTI0LDcgKzUyNCw3IEBACiAJCQkJCSAgJmludGVsX291dHB1dC0+ZW5jKTsKIAogCS8qIFNldCB1cCB0aGUgRERDIGJ1cy4gKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlpMmNfcmVnID0gUENIX0dQSU9BOwogCWVsc2UgewogCQlpMmNfcmVnID0gR1BJT0E7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggYjI3MjAyZDIuLjljZDZkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogI2RlZmluZSBHNFhfUDJfRElTUExBWV9QT1JUX0ZBU1QgICAgICAgICAgIDEwCiAjZGVmaW5lIEc0WF9QMl9ESVNQTEFZX1BPUlRfTElNSVQgICAgICAgICAgMAogCi0vKiBJcm9ubGFrZSAqLworLyogSXJvbmxha2UgLyBTYW5keWJyaWRnZSAqLwogLyogYXMgd2UgY2FsY3VsYXRlIGNsb2NrIHVzaW5nIChyZWdpc3Rlcl92YWx1ZSArIDIpIGZvcgogICAgTi9NMS9NMiwgc28gaGVyZSB0aGUgcmFuZ2UgdmFsdWUgZm9yIHRoZW0gaXMgKGFjdHVhbF92YWx1ZS0yKS4KICAqLwpAQCAtNjkwLDcgKzY5MCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWxpbWl0ID0gaW50ZWxfaXJvbmxha2VfbGltaXQoY3J0Yyk7CiAJZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJbGltaXQgPSBpbnRlbF9nNHhfbGltaXQoY3J0Yyk7CkBAIC04ODYsNyArODg2LDcgQEAKIAlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJaW50IGx2ZHNfcmVnOwogCi0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJbHZkc19yZWcgPSBQQ0hfTFZEUzsKIAkJZWxzZQogCQkJbHZkc19yZWcgPSBMVkRTOwpAQCAtMTE4OCwyNSArMTE4OCwzMCBAQAogCWlmIChpbnRlbF9mYi0+b2JqLT5zaXplID4gZGV2X3ByaXYtPmNmYl9zaXplKSB7CiAJCURSTV9ERUJVR19LTVMoImZyYW1lYnVmZmVyIHRvbyBsYXJnZSwgZGlzYWJsaW5nICIKIAkJCQkiY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19TVE9MRU5fVE9PX1NNQUxMOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIHx8CiAJICAgIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpIHsKIAkJRFJNX0RFQlVHX0tNUygibW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb21wcmVzc2lvbiwgIgogCQkJCSJkaXNhYmxpbmdcbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19VTlNVUFBPUlRFRF9NT0RFOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gMjA0OCkgfHwKIAkgICAgKG1vZGUtPnZkaXNwbGF5ID4gMTUzNikpIHsKIAkJRFJNX0RFQlVHX0tNUygibW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9uLCBkaXNhYmxpbmdcbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19NT0RFX1RPT19MQVJHRTsKIAkJZ290byBvdXRfZGlzYWJsZTsKIAl9CiAJaWYgKChJU19JOTE1R00oZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgJiYgcGxhbmUgIT0gMCkgewogCQlEUk1fREVCVUdfS01TKCJwbGFuZSBub3QgMCwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKKwkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfQkFEX1BMQU5FOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX1gpIHsKIAkJRFJNX0RFQlVHX0tNUygiZnJhbWVidWZmZXIgbm90IHRpbGVkLCBkaXNhYmxpbmcgY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19OT1RfVElMRUQ7CiAJCWdvdG8gb3V0X2Rpc2FibGU7CiAJfQogCkBAIC0xMzY2LDcgKzEzNzEsNyBAQAogCQkJZHNwY250ciAmPSB+RElTUFBMQU5FX1RJTEVEOwogCX0KIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCS8qIG11c3QgZGlzYWJsZSAqLwogCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKIApAQCAtMTQyNyw3ICsxNDMyLDcgQEAKIAl1OCBzcjE7CiAJdTMyIHZnYV9yZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQl2Z2FfcmVnID0gQ1BVX1ZHQUNOVFJMOwogCWVsc2UKIAkJdmdhX3JlZyA9IFZHQUNOVFJMOwpAQCAtMjExMSw3ICsyMTE2LDcgQEAKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCS8qIEZESSBsaW5rIGNsb2NrIGlzIGZpeGVkIGF0IDIuN0cgKi8KIAkJaWYgKG1vZGUtPmNsb2NrICogMyA+IDI3MDAwICogNCkKIAkJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CkBAIC0yNzU3LDExICsyNzYyLDIyIEBACiAJCXNyd20gPSB0b3RhbF9zaXplIC0gc3JfZW50cmllczsKIAkJaWYgKHNyd20gPCAwKQogCQkJc3J3bSA9IDE7Ci0JCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOIHwgKHNyd20gJiAweDNmKSk7CisKKwkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpCisJCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBGV19CTENfU0VMRl9GSUZPX01BU0sgfCAoc3J3bSAmIDB4ZmYpKTsKKwkJZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKKwkJCS8qIDkxNU0gaGFzIGEgc21hbGxlciBTUldNIGZpZWxkICovCisJCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBzcndtICYgMHgzZik7CisJCQlJOTE1X1dSSVRFKElOU1RQTSwgSTkxNV9SRUFEKElOU1RQTSkgfCBJTlNUUE1fU0VMRl9FTik7CisJCX0KIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBzZWxmIHJlZnJlc2ggaWYgYm90aCBwaXBlcyBhcmUgZW5hYmxlZCAqLwotCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBJOTE1X1JFQUQoRldfQkxDX1NFTEYpCi0JCQkJCSYgfkZXX0JMQ19TRUxGX0VOKTsKKwkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEk5MTVfUkVBRChGV19CTENfU0VMRikKKwkJCQkgICAmIH5GV19CTENfU0VMRl9FTik7CisJCX0gZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKKwkJCUk5MTVfV1JJVEUoSU5TVFBNLCBJOTE1X1JFQUQoSU5TVFBNKSAmIH5JTlNUUE1fU0VMRl9FTik7CisJCX0KIAl9CiAKIAlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZCwgQzogJWQsIFNSICVkXG4iLApAQCAtMjk2Nyw3ICsyOTgzLDcgQEAKIAkJCQkJcmVmY2xrIC8gMTAwMCk7CiAJfSBlbHNlIGlmIChJU19JOVhYKGRldikpIHsKIAkJcmVmY2xrID0gOTYwMDA7Ci0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJcmVmY2xrID0gMTIwMDAwOyAvKiAxMjBNaHogcmVmY2xrICovCiAJfSBlbHNlIHsKIAkJcmVmY2xrID0gNDgwMDA7CkBAIC0zMDI1LDcgKzMwNDEsNyBAQAogCX0KIAogCS8qIEZESSBsaW5rICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWludCBsYW5lLCBsaW5rX2J3LCBicHA7CiAJCS8qIGVEUCBkb2Vzbid0IHJlcXVpcmUgRkRJIGxpbmssIHNvIGp1c3Qgc2V0IERQIE0vTgogCQkgICBhY2NvcmRpbmcgdG8gY3VycmVudCBsaW5rIGNvbmZpZyAqLwpAQCAtMzEwMiw3ICszMTE4LDcgQEAKIAkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKIAkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCiAJICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCXRlbXAgPSBJOTE1X1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CiAJCS8qIEFsd2F5cyBlbmFibGUgbm9uc3ByZWFkIHNvdXJjZSAqLwogCQl0ZW1wICY9IH5EUkVGX05PTlNQUkVBRF9TT1VSQ0VfTUFTSzsKQEAgLTMxNDksNyArMzE2NSw3IEBACiAJCQkJcmVkdWNlZF9jbG9jay5tMjsKIAl9CiAKLQlpZiAoIUlTX0lST05MQUtFKGRldikpCisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpCiAJCWRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKIAogCWlmIChJU19JOVhYKGRldikpIHsKQEAgLTMxNjIsNyArMzE3OCw3IEBACiAJCQlzZHZvX3BpeGVsX211bHRpcGx5ID0gYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgLyBtb2RlLT5jbG9jazsKIAkJCWlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0czMyhkZXYpKQogCQkJCWRwbGwgfD0gKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVM7Ci0JCQllbHNlIGlmIChJU19JUk9OTEFLRShkZXYpKQorCQkJZWxzZSBpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCWRwbGwgfD0gKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBQTExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NISUZUOwogCQl9CiAJCWlmIChpc19kcCkKQEAgLTMxNzQsNyArMzE5MCw3IEBACiAJCWVsc2UgewogCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJCS8qIGFsc28gRlBBMSAqLwotCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJCWlmIChJU19HNFgoZGV2KSAmJiBoYXNfcmVkdWNlZF9jbG9jaykKIAkJCQlkcGxsIHw9ICgxIDw8IChyZWR1Y2VkX2Nsb2NrLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKQEAgLTMxOTMsNyArMzIwOSw3IEBACiAJCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lST05MQUtFKGRldikpCisJCWlmIChJU19JOTY1RyhkZXYpICYmICFIQVNfUENIX1NQTElUKGRldikpCiAJCQlkcGxsIHw9ICg2IDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKTsKIAl9IGVsc2UgewogCQlpZiAoaXNfbHZkcykgewpAQCAtMzIyNyw3ICszMjQzLDcgQEAKIAogCS8qIElyb25sYWtlJ3MgcGxhbmUgaXMgZm9yY2VkIHRvIHBpcGUsIGJpdCAyNCBpcyB0bwogCSAgIGVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKHBpcGUgPT0gMCkKIAkJCWRzcGNudHIgJj0gfkRJU1BQTEFORV9TRUxfUElQRV9NQVNLOwogCQllbHNlCkBAIC0zMjU0LDE0ICszMjcwLDE0IEBACiAKIAogCS8qIERpc2FibGUgdGhlIHBhbmVsIGZpdHRlciBpZiBpdCB3YXMgb24gb3VyIHBpcGUgKi8KLQlpZiAoIUlTX0lST05MQUtFKGRldikgJiYgaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUoZGV2KSA9PSBwaXBlKQorCWlmICghSEFTX1BDSF9TUExJVChkZXYpICYmIGludGVsX3BhbmVsX2ZpdHRlcl9waXBlKGRldikgPT0gcGlwZSkKIAkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIDApOwogCiAJRFJNX0RFQlVHX0tNUygiTW9kZSBmb3IgcGlwZSAlYzpcbiIsIHBpcGUgPT0gMCA/ICdBJyA6ICdCJyk7CiAJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKIAogCS8qIGFzc2lnbiB0byBJcm9ubGFrZSByZWdpc3RlcnMgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJZnBfcmVnID0gcGNoX2ZwX3JlZzsKIAkJZHBsbF9yZWcgPSBwY2hfZHBsbF9yZWc7CiAJfQpAQCAtMzI4Miw3ICszMjk4LDcgQEAKIAlpZiAoaXNfbHZkcykgewogCQl1MzIgbHZkczsKIAotCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCWx2ZHNfcmVnID0gUENIX0xWRFM7CiAKIAkJbHZkcyA9IEk5MTVfUkVBRChsdmRzX3JlZyk7CkBAIC0zMzA0LDEyICszMzIwLDEyIEBACiAJCS8qIHNldCB0aGUgZGl0aGVyaW5nIGZsYWcgKi8KIAkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCWlmIChkZXZfcHJpdi0+bHZkc19kaXRoZXIpIHsKLQkJCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCQlwaXBlY29uZiB8PSBQSVBFX0VOQUJMRV9ESVRIRVI7CiAJCQkJZWxzZQogCQkJCQlsdmRzIHw9IExWRFNfRU5BQkxFX0RJVEhFUjsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCQkJcGlwZWNvbmYgJj0gflBJUEVfRU5BQkxFX0RJVEhFUjsKIAkJCQllbHNlCiAJCQkJCWx2ZHMgJj0gfkxWRFNfRU5BQkxFX0RJVEhFUjsKQEAgLTMzMjgsNyArMzM0NCw3IEBACiAJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLwogCQl1ZGVsYXkoMTUwKTsKIAotCQlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSVJPTkxBS0UoZGV2KSkgeworCQlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCQlpZiAoaXNfc2R2bykgewogCQkJCXNkdm9fcGl4ZWxfbXVsdGlwbHkgPSBhZGp1c3RlZF9tb2RlLT5jbG9jayAvIG1vZGUtPmNsb2NrOwogCQkJCUk5MTVfV1JJVEUoZHBsbF9tZF9yZWcsICgwIDw8IERQTExfTURfVURJX0RJVklERVJfU0hJRlQpIHwKQEAgLTMzNzUsMTQgKzMzOTEsMTQgQEAKIAkvKiBwaXBlc3JjIGFuZCBkc3BzaXplIGNvbnRyb2wgdGhlIHNpemUgdGhhdCBpcyBzY2FsZWQgZnJvbSwgd2hpY2ggc2hvdWxkCiAJICogYWx3YXlzIGJlIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHNpemUuCiAJICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShkc3BzaXplX3JlZywgKChtb2RlLT52ZGlzcGxheSAtIDEpIDw8IDE2KSB8CiAJCQkJKG1vZGUtPmhkaXNwbGF5IC0gMSkpOwogCQlJOTE1X1dSSVRFKGRzcHBvc19yZWcsIDApOwogCX0KIAlJOTE1X1dSSVRFKHBpcGVzcmNfcmVnLCAoKG1vZGUtPmhkaXNwbGF5IC0gMSkgPDwgMTYpIHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCUk5MTVfV1JJVEUoZGF0YV9tMV9yZWcsIFRVX1NJWkUobV9uLnR1KSB8IG1fbi5nbWNoX20pOwogCQlJOTE1X1dSSVRFKGRhdGFfbjFfcmVnLCBUVV9TSVpFKG1fbi50dSkgfCBtX24uZ21jaF9uKTsKIAkJSTkxNV9XUklURShsaW5rX20xX3JlZywgbV9uLmxpbmtfbSk7CkBAIC0zNDM4LDcgKzM0NTQsNyBAQAogCQlyZXR1cm47CiAKIAkvKiB1c2UgbGVnYWN5IHBhbGV0dGUgZm9yIElyb25sYWtlICovCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcGFscmVnID0gKGludGVsX2NydGMtPnBpcGUgPT0gMCkgPyBMR0NfUEFMRVRURV9BIDoKIAkJCQkJCSAgIExHQ19QQUxFVFRFX0I7CiAKQEAgLTM1NTMsMTEgKzM1NjksMTAgQEAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYm8gPSBibzsKIAogCXJldHVybiAwOwotZmFpbDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiBmYWlsX2xvY2tlZDoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShibyk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitmYWlsOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGJvKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTIyLDcgKzM5MzcsNyBAQAogCWludCBkcGxsX3JlZyA9IChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9COwogCWludCBkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybjsKIAogCWlmICghZGV2X3ByaXYtPmx2ZHNfZG93bmNsb2NrX2F2YWlsKQpAQCAtMzk2MSw3ICszOTc2LDcgQEAKIAlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKIAlpbnQgZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAoIWRldl9wcml2LT5sdmRzX2Rvd25jbG9ja19hdmFpbCkKQEAgLTQwMTEsNiArNDAyNiwxMSBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZW5hYmxlIG1lbW9yeSBzZWxmIHJlZnJlc2ggb24gOTQ1XG4iKTsKKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU5fTUFTSyB8IEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQkvKiBTa2lwIGluYWN0aXZlIENSVENzICovCiAJCWlmICghY3J0Yy0+ZmIpCkBAIC00MDQ0LDkgKzQwNjQsMTcgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCXJldHVybjsKIAotCWlmICghZGV2X3ByaXYtPmJ1c3kpCisJaWYgKCFkZXZfcHJpdi0+YnVzeSkgeworCQlpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgeworCQkJdTMyIGZ3X2JsY19zZWxmOworCisJCQlEUk1fREVCVUdfRFJJVkVSKCJkaXNhYmxlIG1lbW9yeSBzZWxmIHJlZnJlc2ggb24gOTQ1XG4iKTsKKwkJCWZ3X2JsY19zZWxmID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGKTsKKwkJCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKKwkJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmIHwgRldfQkxDX1NFTEZfRU5fTUFTSyk7CisJCX0KIAkJZGV2X3ByaXYtPmJ1c3kgPSB0cnVlOwotCWVsc2UKKwl9IGVsc2UKIAkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aWRsZV90aW1lciwgamlmZmllcyArCiAJCQkgIG1zZWNzX3RvX2ppZmZpZXMoR1BVX0lETEVfVElNRU9VVCkpOwogCkBAIC00MDU4LDYgKzQwODYsMTQgQEAKIAkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CiAJCWlmIChpbnRlbF9mYi0+b2JqID09IG9iaikgewogCQkJaWYgKCFpbnRlbF9jcnRjLT5idXN5KSB7CisJCQkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJCQkJdTMyIGZ3X2JsY19zZWxmOworCisJCQkJCURSTV9ERUJVR19EUklWRVIoImRpc2FibGUgbWVtb3J5IHNlbGYgcmVmcmVzaCBvbiA5NDVcbiIpOworCQkJCQlmd19ibGNfc2VsZiA9IEk5MTVfUkVBRChGV19CTENfU0VMRik7CisJCQkJCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKKwkJCQkJSTkxNV9XUklURShGV19CTENfU0VMRiwgZndfYmxjX3NlbGYgfCBGV19CTENfU0VMRl9FTl9NQVNLKTsKKwkJCQl9CiAJCQkJLyogTm9uLWJ1c3kgLT4gYnVzeSwgdXBjbG9jayAqLwogCQkJCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGNydGMsIHRydWUpOwogCQkJCWludGVsX2NydGMtPmJ1c3kgPSB0cnVlOwpAQCAtNDM4Miw3ICs0NDE4LDcgQEAKIAlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKIAkJaW50ZWxfbHZkc19pbml0KGRldik7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaW50IGZvdW5kOwogCiAJCWlmIChJU19NT0JJTEUoZGV2KSAmJiAoSTkxNV9SRUFEKERQX0EpICYgRFBfREVURUNURUQpKQpAQCAtNDQ1MSw3ICs0NDg3LDcgQEAKIAkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgRFBfRFxuIik7CiAJCQlpbnRlbF9kcF9pbml0KGRldiwgRFBfRCk7CiAJCX0KLQl9IGVsc2UgaWYgKElTX0k4WFgoZGV2KSkKKwl9IGVsc2UgaWYgKElTX0dFTjIoZGV2KSkKIAkJaW50ZWxfZHZvX2luaXQoZGV2KTsKIAogCWlmIChTVVBQT1JUU19UVihkZXYpKQpAQCAtNDQ3Niw5ICs0NTEyLDcgQEAKIAkJaW50ZWxmYl9yZW1vdmUoZGV2LCBmYik7CiAKIAlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGludGVsX2ZiLT5vYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGludGVsX2ZiLT5vYmopOwogCiAJa2ZyZWUoaW50ZWxfZmIpOwogfQpAQCAtNDU0MSw5ICs0NTc1LDcgQEAKIAogCXJldCA9IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShkZXYsIG1vZGVfY21kLCAmZmIsIG9iaik7CiAJaWYgKHJldCkgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQ1OTEsNiArNDYyMyw5MSBAQAogCXJldHVybiBOVUxMOwogfQogCit2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgcmd2bW9kZWN0bCA9IEk5MTVfUkVBRChNRU1NT0RFQ1RMKSwgcmd2c3djdGw7CisJdTggZm1heCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7CisJaW50IGkgPSAwOworCisJLyogMTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMgKi8KKwlJOTE1X1dSSVRFKFJDVVBFSSwgMTAwMDAwKTsKKwlJOTE1X1dSSVRFKFJDRE5FSSwgMTAwMDAwKTsKKworCS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyByZXNwZWN0aXZlbHkgKi8KKwlJOTE1X1dSSVRFKFJDQk1BWEFWRywgOTAwMDApOworCUk5MTVfV1JJVEUoUkNCTUlOQVZHLCA4MDAwMCk7CisKKwlJOTE1X1dSSVRFKE1FTUlIWVNULCAxKTsKKworCS8qIFNldCB1cCBtaW4sIG1heCwgYW5kIGN1ciBmb3IgaW50ZXJydXB0IGhhbmRsaW5nICovCisJZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1PREVfRk1BWF9TSElGVDsKKwlmbWluID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNSU5fTUFTSyk7CisJZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+PgorCQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKKwl2c3RhcnQgPSAoSTkxNV9SRUFEKFBYVkZSRVFfQkFTRSArIChmc3RhcnQgKiA0KSkgJiBQWFZGUkVRX1BYX01BU0spID4+CisJCVBYVkZSRVFfUFhfU0hJRlQ7CisKKwlkZXZfcHJpdi0+bWF4X2RlbGF5ID0gZnN0YXJ0OyAvKiBjYW4ndCBnbyB0byBmbWF4IHcvbyBJUFMgKi8KKwlkZXZfcHJpdi0+bWluX2RlbGF5ID0gZm1pbjsKKwlkZXZfcHJpdi0+Y3VyX2RlbGF5ID0gZnN0YXJ0OworCisJSTkxNV9XUklURShNRU1JTlRSRU4sIE1FTUlOVF9DWF9TVVBSX0VOIHwgTUVNSU5UX0VWQUxfQ0hHX0VOKTsKKworCS8qCisJICogSW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgaW4gaXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsCisJICovCisKKwlJOTE1X1dSSVRFKFZJRFNUQVJULCB2c3RhcnQpOworCVBPU1RJTkdfUkVBRChWSURTVEFSVCk7CisKKwlyZ3Ztb2RlY3RsIHw9IE1FTU1PREVfU1dNT0RFX0VOOworCUk5MTVfV1JJVEUoTUVNTU9ERUNUTCwgcmd2bW9kZWN0bCk7CisKKwl3aGlsZSAoSTkxNV9SRUFEKE1FTVNXQ1RMKSAmIE1FTUNUTF9DTURfU1RTKSB7CisJCWlmIChpKysgPiAxMDApIHsKKwkJCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKwltc2xlZXAoMSk7CisKKwlyZ3Zzd2N0bCA9IChNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExfQ01EX1NISUZUKSB8CisJCShmc3RhcnQgPDwgTUVNQ1RMX0ZSRVFfU0hJRlQpIHwgTUVNQ1RMX1NGQ0FWTTsKKwlJOTE1X1dSSVRFKE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisJUE9TVElOR19SRUFEKE1FTVNXQ1RMKTsKKworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOworCUk5MTVfV1JJVEUoTUVNU1dDVEwsIHJndnN3Y3RsKTsKK30KKwordm9pZCBpcm9ubGFrZV9kaXNhYmxlX2RycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZ3Zzd2N0bDsKKwl1OCBmc3RhcnQ7CisKKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0ICovCisJSTkxNV9XUklURShNRU1JTlRSRU4sIEk5MTVfUkVBRChNRU1JTlRSRU4pICYgfk1FTUlOVF9FVkFMX0NIR19FTik7CisJSTkxNV9XUklURShNRU1JTlRSU1RTLCBNRU1JTlRfRVZBTF9DSEcpOworCUk5MTVfV1JJVEUoREVJRVIsIEk5MTVfUkVBRChERUlFUikgJiB+REVfUENVX0VWRU5UKTsKKwlJOTE1X1dSSVRFKERFSUlSLCBERV9QQ1VfRVZFTlQpOworCUk5MTVfV1JJVEUoREVJTVIsIEk5MTVfUkVBRChERUlNUikgfCBERV9QQ1VfRVZFTlQpOworCisJLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcgZnJlcXVlbmN5ICovCisJZnN0YXJ0ID0gKEk5MTVfUkVBRChNRU1NT0RFQ1RMKSAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+CisJCU1FTU1PREVfRlNUQVJUX1NISUZUOworCXJndnN3Y3RsID0gKE1FTUNUTF9DTURfQ0hGUkVRIDw8IE1FTUNUTF9DTURfU0hJRlQpIHwKKwkJKGZzdGFydCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBNRU1DVExfU0ZDQVZNOworCUk5MTVfV1JJVEUoTUVNU1dDVEwsIHJndnN3Y3RsKTsKKwltc2xlZXAoMSk7CisJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7CisJSTkxNV9XUklURShNRU1TV0NUTCwgcmd2c3djdGwpOworCW1zbGVlcCgxKTsKKworfQorCiB2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTQ1OTksNyArNDcxNiw3IEBACiAJICogRGlzYWJsZSBjbG9jayBnYXRpbmcgcmVwb3J0ZWQgdG8gd29yayBpbmNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlCiAJICogc3BlY3MsIGJ1dCBlbmFibGUgYXMgbXVjaCBlbHNlIGFzIHdlIGNhbi4KIAkgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJdWludDMyX3QgZHNwY2xrX2dhdGU7CkBAIC00NjcyLDcgKzQ3ODksNyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBXZSBhbHdheXMgd2FudCBhIERQTVMgZnVuY3Rpb24gKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS5kcG1zID0gaXJvbmxha2VfY3J0Y19kcG1zOwogCWVsc2UKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZHBtcyA9IGk5eHhfY3J0Y19kcG1zOwpAQCAtNDcxNSw3ICs0ODMyLDcgQEAKIAkJCWk4MzBfZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQ7CiAKIAkvKiBGb3IgRklGTyB3YXRlcm1hcmsgdXBkYXRlcyAqLwotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CiAJZWxzZSBpZiAoSVNfRzRYKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CkBAIC00Nzc0LDExICs0ODkxLDYgQEAKIAlEUk1fREVCVUdfS01TKCIlZCBkaXNwbGF5IHBpcGUlcyBhdmFpbGFibGUuXG4iLAogCQkgIG51bV9waXBlLCBudW1fcGlwZSA+IDEgPyAicyIgOiAiIik7CiAKLQlpZiAoSVNfSTg1WChkZXYpKQotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgJmRldl9wcml2LT5vcmlnX2Nsb2NrKTsKLQllbHNlIGlmIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikpCi0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZkZXZfcHJpdi0+b3JpZ19jbG9jayk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGU7IGkrKykgewogCQlpbnRlbF9jcnRjX2luaXQoZGV2LCBpKTsKIAl9CkBAIC00Nzg3LDYgKzQ4OTksOSBAQAogCiAJaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2VuYWJsZV9kcnBzKGRldik7CisKIAlJTklUX1dPUksoJmRldl9wcml2LT5pZGxlX3dvcmssIGludGVsX2lkbGVfdXBkYXRlKTsKIAlzZXR1cF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGludGVsX2dwdV9pZGxlX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKQEAgLTQ4MzQsNiArNDk0OSw5IEBACiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGRldl9wcml2LT5wd3JjdHgpOwogCX0KIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2Rpc2FibGVfZHJwcyhkZXYpOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggNDM5NTA2Yy4uM2VmM2EwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkgKi8KIAlpZiAoSVNfZURQKGludGVsX291dHB1dCkpCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gMjI1OyAvKiBlRFAgaW5wdXQgY2xvY2sgYXQgNDUwTWh6ICovCi0JZWxzZSBpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwllbHNlIGlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gNjI7IC8qIElSTCBpbnB1dCBjbG9jayBmaXhlZCBhdCAxMjVNaHogKi8KIAllbHNlCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gaW50ZWxfaHJhd2NsayhkZXYpIC8gMjsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCWludGVsX2RwX2NvbXB1dGVfbV9uKDMsIGxhbmVfY291bnQsCiAJCQkgICAgIG1vZGUtPmNsb2NrLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgJm1fbik7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKGludGVsX2NydGMtPnBpcGUgPT0gMCkgewogCQkJSTkxNV9XUklURShUUkFOU0FfREFUQV9NMSwKIAkJCQkgICAoKG1fbi50dSAtIDEpIDw8IFBJUEVfR01DSF9EQVRBX01fVFVfU0laRV9TSElGVCkgfApAQCAtMTE3Niw3ICsxMTc2LDcgQEAKIAogCWRwX3ByaXYtPmhhc19hdWRpbyA9IGZhbHNlOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmV0dXJuIGlyb25sYWtlX2RwX2RldGVjdChjb25uZWN0b3IpOwogCiAJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCBhNTE1NzNkLi4zYTQ2N2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMjA5LDYgKzIwOSw4IEBACiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiBleHRlcm4gdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gaW50IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IGFhYWJiY2IuLjhjZDc5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTIzNSw2ICsyMzYsNyBAQAogCQkJb2JqX3ByaXYtPmd0dF9vZmZzZXQsIGZibyk7CiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KGRldi0+cGRldiwgaW5mbyk7CiAJcmV0dXJuIDA7CiAKIG91dF91bnBpbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCAwZTI2OGRlLi5hMzBmOGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogSFcgd29ya2Fyb3VuZCwgbmVlZCB0byB0b2dnbGUgZW5hYmxlIGJpdCBvZmYgYW5kIG9uIGZvciAxMmJwYywgYnV0CiAJICogd2UgZG8gdGhpcyBhbnl3YXkgd2hpY2ggc2hvd3MgbW9yZSBzdGFibGUgaW4gdGVzdGluZy4KIAkgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShoZG1pX3ByaXYtPnNkdm94X3JlZywgdGVtcCAmIH5TRFZPX0VOQUJMRSk7CiAJCVBPU1RJTkdfUkVBRChoZG1pX3ByaXYtPnNkdm94X3JlZyk7CiAJfQpAQCAtOTksNyArOTksNyBAQAogCS8qIEhXIHdvcmthcm91bmQsIG5lZWQgdG8gd3JpdGUgdGhpcyB0d2ljZSBmb3IgaXNzdWUgdGhhdCBtYXkgcmVzdWx0CiAJICogaW4gZmlyc3Qgd3JpdGUgZ2V0dGluZyBtYXNrZWQuCiAJICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCUk5MTVfV1JJVEUoaGRtaV9wcml2LT5zZHZveF9yZWcsIHRlbXApOwogCQlQT1NUSU5HX1JFQUQoaGRtaV9wcml2LT5zZHZveF9yZWcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKaW5kZXggODY3M2M3My4uZmNjNzUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShQQ0hfR01CVVMwLCAwKTsKIAl9IGVsc2UgewogCQlJOTE1X1dSSVRFKEdNQlVTMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYzJlOGE0NS4uMTRlNTE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNTYsNyArNTYsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIGJsY19wd21fY3RsLCByZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZWcgPSBCTENfUFdNX0NQVV9DVEw7CiAJZWxzZQogCQlyZWcgPSBCTENfUFdNX0NUTDsKQEAgLTc0LDcgKzc0LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiByZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZWcgPSBCTENfUFdNX1BDSF9DVEwyOwogCWVsc2UKIAkJcmVnID0gQkxDX1BXTV9DVEw7CkBAIC04OSwxNyArODksMjIgQEAKIHN0YXRpYyB2b2lkIGludGVsX2x2ZHNfc2V0X3Bvd2VyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgb24pCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgcHBfc3RhdHVzLCBjdGxfcmVnLCBzdGF0dXNfcmVnOworCXUzMiBwcF9zdGF0dXMsIGN0bF9yZWcsIHN0YXR1c19yZWcsIGx2ZHNfcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWN0bF9yZWcgPSBQQ0hfUFBfQ09OVFJPTDsKIAkJc3RhdHVzX3JlZyA9IFBDSF9QUF9TVEFUVVM7CisJCWx2ZHNfcmVnID0gUENIX0xWRFM7CiAJfSBlbHNlIHsKIAkJY3RsX3JlZyA9IFBQX0NPTlRST0w7CiAJCXN0YXR1c19yZWcgPSBQUF9TVEFUVVM7CisJCWx2ZHNfcmVnID0gTFZEUzsKIAl9CiAKIAlpZiAob24pIHsKKwkJSTkxNV9XUklURShsdmRzX3JlZywgSTkxNV9SRUFEKGx2ZHNfcmVnKSB8IExWRFNfUE9SVF9FTik7CisJCVBPU1RJTkdfUkVBRChsdmRzX3JlZyk7CisKIAkJSTkxNV9XUklURShjdGxfcmVnLCBJOTE1X1JFQUQoY3RsX3JlZykgfAogCQkJICAgUE9XRVJfVEFSR0VUX09OKTsKIAkJZG8gewpAQCAtMTE1LDYgKzEyMCw5IEBACiAJCWRvIHsKIAkJCXBwX3N0YXR1cyA9IEk5MTVfUkVBRChzdGF0dXNfcmVnKTsKIAkJfSB3aGlsZSAocHBfc3RhdHVzICYgUFBfT04pOworCisJCUk5MTVfV1JJVEUobHZkc19yZWcsIEk5MTVfUkVBRChsdmRzX3JlZykgJiB+TFZEU19QT1JUX0VOKTsKKwkJUE9TVElOR19SRUFEKGx2ZHNfcmVnKTsKIAl9CiB9CiAKQEAgLTEzNyw3ICsxNDUsNyBAQAogCXUzMiBwcF9vbl9yZWcsIHBwX29mZl9yZWcsIHBwX2N0bF9yZWcsIHBwX2Rpdl9yZWc7CiAJdTMyIHB3bV9jdGxfcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCXBwX29uX3JlZyA9IFBDSF9QUF9PTl9ERUxBWVM7CiAJCXBwX29mZl9yZWcgPSBQQ0hfUFBfT0ZGX0RFTEFZUzsKIAkJcHBfY3RsX3JlZyA9IFBDSF9QUF9DT05UUk9MOwpAQCAtMTc0LDcgKzE4Miw3IEBACiAJdTMyIHBwX29uX3JlZywgcHBfb2ZmX3JlZywgcHBfY3RsX3JlZywgcHBfZGl2X3JlZzsKIAl1MzIgcHdtX2N0bF9yZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJcHBfb25fcmVnID0gUENIX1BQX09OX0RFTEFZUzsKIAkJcHBfb2ZmX3JlZyA9IFBDSF9QUF9PRkZfREVMQVlTOwogCQlwcF9jdGxfcmVnID0gUENIX1BQX0NPTlRST0w7CkBAIC0yOTcsNyArMzA1LDcgQEAKIAl9CiAKIAkvKiBmdWxsIHNjcmVlbiBzY2FsZSBmb3Igbm93ICovCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiA5NjUrIHdhbnRzIGZ1enp5IGZpdHRpbmcgKi8KQEAgLTMyNyw3ICszMzUsNyBAQAogCSAqIHRvIHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGFuZCBQUk0uCiAJICogQ2hhbmdlIHRoZSB2YWx1ZSBoZXJlIHRvIHNlZSB0aGUgYm9yZGVycyBmb3IgZGVidWdnaW5nCiAJICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShCQ0xSUEFUX0EsIDApOwogCQlJOTE1X1dSSVRFKEJDTFJQQVRfQiwgMCk7CiAJfQpAQCAtNTQ4LDcgKzU1Niw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmVnID0gQkxDX1BXTV9DUFVfQ1RMOwogCWVsc2UKIAkJcmVnID0gQkxDX1BXTV9DVEw7CkBAIC01ODcsNyArNTk1LDcgQEAKIAkgKiBzZXR0aW5ncy4KIAkgKi8KIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybjsKIAogCS8qCkBAIC02NTUsOCArNjYzLDE1IEBACiAgKi8KIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGludGVsX2x2ZHNfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKKwkvKiBBQ1BJIGxpZCBtZXRob2RzIHdlcmUgZ2VuZXJhbGx5IHVucmVsaWFibGUgaW4gdGhpcyBnZW5lcmF0aW9uLCBzbworCSAqIGRvbid0IGV2ZW4gYm90aGVyLgorCSAqLworCWlmIChJU19HRU4yKGRldikpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwogCWlmICghZG1pX2NoZWNrX3N5c3RlbShiYWRfbGlkX3N0YXR1cykgJiYgIWFjcGlfbGlkX29wZW4oKSkKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKQEAgLTEwMjAsNyArMTAzNSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKChJOTE1X1JFQUQoUENIX0xWRFMpICYgTFZEU19ERVRFQ1RFRCkgPT0gMCkKIAkJCXJldHVybjsKIAkJaWYgKGRldl9wcml2LT5lZHBfc3VwcG9ydCkgewpAQCAtMTEyMyw3ICsxMTM4LDcgQEAKIAkgKi8KIAogCS8qIElyb25sYWtlOiBGSVhNRSBpZiBzdGlsbCBmYWlsLCBub3QgdHJ5IHBpcGUgbW9kZSBub3cgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlnb3RvIGZhaWxlZDsKIAogCWx2ZHMgPSBJOTE1X1JFQUQoTFZEUyk7CkBAIC0xMTQ0LDcgKzExNTksNyBAQAogCQlnb3RvIGZhaWxlZDsKIAogb3V0OgotCWlmIChJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQl1MzIgcHdtOwogCQkvKiBtYWtlIHN1cmUgUFdNIGlzIGVuYWJsZWQgKi8KIAkJcHdtID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCmluZGV4IDI2Mzk1OTEuLmQzNTVkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogI2RlZmluZSBPRkNfVVBEQVRFCQkweDEKIAogI2RlZmluZSBPVkVSTEFZX05PTlBIWVNJQ0FMKGRldikgKElTX0czMyhkZXYpIHx8IElTX0k5NjVHKGRldikpCi0jZGVmaW5lIE9WRVJMQVlfRVhJU1RTKGRldikgKCFJU19HNFgoZGV2KSAmJiAhSVNfSVJPTkxBS0UoZGV2KSkKKyNkZWZpbmUgT1ZFUkxBWV9FWElTVFMoZGV2KSAoIUlTX0c0WChkZXYpICYmICFJU19JUk9OTEFLRShkZXYpICYmICFJU19HRU42KGRldikpCiAKIAogc3RhdGljIHN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycyAqaW50ZWxfb3ZlcmxheV9tYXBfcmVnc19hdG9taWMoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkpCkBAIC0xOTksMTYgKzE5OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X3VubWFwX3JlZ3NfYXRvbWljKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvdmVybGF5LT5kZXY7Ci0gICAgICAgIGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCiAJaWYgKE9WRVJMQVlfTk9OUEhZU0lDQUwob3ZlcmxheS0+ZGV2KSkKIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMob3ZlcmxheS0+dmlydF9hZGRyKTsKIAogCW92ZXJsYXktPnZpcnRfYWRkciA9IE5VTEw7CiAKLQlJOTE1X1JFQUQoT1ZBREQpOyAvKiBmbHVzaCB3YyBjYXNoZXMgKi8KLQogCXJldHVybjsKIH0KIApAQCAtMjI1LDkgKzIyMCw3IEBACiAJb3ZlcmxheS0+YWN0aXZlID0gMTsKIAlvdmVybGF5LT5od193ZWRnZWQgPSBORUVEU19XQUlUX0ZPUl9GTElQOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhNSV9GTFVTSCk7Ci0JT1VUX1JJTkcoTUlfTk9PUCk7CisJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX09OKTsKIAlPVVRfUklORyhvdmVybGF5LT5mbGlwX2FkZHIgfCBPRkNfVVBEQVRFKTsKIAlPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0yNjcsOSArMjYwLDcgQEAKIAlpZiAodG1wICYgKDEgPDwgMTcpKQogCQlEUk1fREVCVUcoIm92ZXJsYXkgdW5kZXJydW4sIERPVlNUQTogJXhcbiIsIHRtcCk7CiAKLQlCRUdJTl9MUF9SSU5HKDQpOwotCU9VVF9SSU5HKE1JX0ZMVVNIKTsKLQlPVVRfUklORyhNSV9OT09QKTsKKwlCRUdJTl9MUF9SSU5HKDIpOwogCU9VVF9SSU5HKE1JX09WRVJMQVlfRkxJUCB8IE1JX09WRVJMQVlfQ09OVElOVUUpOwogCU9VVF9SSU5HKGZsaXBfYWRkcik7CiAgICAgICAgIEFEVkFOQ0VfTFBfUklORygpOwpAQCAtMzM4LDkgKzMyOSw3IEBACiAJLyogd2FpdCBmb3Igb3ZlcmxheSB0byBnbyBpZGxlICovCiAJb3ZlcmxheS0+aHdfd2VkZ2VkID0gU1dJVENIX09GRl9TVEFHRV8xOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhNSV9GTFVTSCk7Ci0JT1VUX1JJTkcoTUlfTk9PUCk7CisJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX0NPTlRJTlVFKTsKIAlPVVRfUklORyhmbGlwX2FkZHIpOwogICAgICAgICBPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0zNTgsOSArMzQ3LDcgQEAKIAkvKiB0dXJuIG92ZXJsYXkgb2ZmICovCiAJb3ZlcmxheS0+aHdfd2VkZ2VkID0gU1dJVENIX09GRl9TVEFHRV8yOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLSAgICAgICAgT1VUX1JJTkcoTUlfRkxVU0gpOwotICAgICAgICBPVVRfUklORyhNSV9OT09QKTsKKwlCRUdJTl9MUF9SSU5HKDQpOwogICAgICAgICBPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX09GRik7CiAJT1VUX1JJTkcoZmxpcF9hZGRyKTsKICAgICAgICAgT1VUX1JJTkcoTUlfV0FJVF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9PVkVSTEFZX0ZMSVApOwpAQCAtNDM1LDkgKzQyMiw3IEBACiAKIAkJCW92ZXJsYXktPmh3X3dlZGdlZCA9IFNXSVRDSF9PRkZfU1RBR0VfMjsKIAotCQkJQkVHSU5fTFBfUklORyg2KTsKLQkJCU9VVF9SSU5HKE1JX0ZMVVNIKTsKLQkJCU9VVF9SSU5HKE1JX05PT1ApOworCQkJQkVHSU5fTFBfUklORyg0KTsKIAkJCU9VVF9SSU5HKE1JX09WRVJMQVlfRkxJUCB8IE1JX09WRVJMQVlfT0ZGKTsKIAkJCU9VVF9SSU5HKGZsaXBfYWRkcik7CiAJCQlPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0xMTc5LDcgKzExNjQsNyBAQAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG5ld19ibyk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobmV3X2JvKTsKIAlrZnJlZShwYXJhbXMpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA4MjY3OGQzLi40OGRhZWU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpbnRlbF9zZHZvX3JlZ3MuaCIKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogc3RhdGljIGNoYXIgKnR2X2Zvcm1hdF9uYW1lc1tdID0gewogCSJOVFNDX00iICAgLCAiTlRTQ19KIiAgLCAiTlRTQ180NDMiLApAQCAtMjI4Myw2ICsyMjg0LDI1IEBACiAJCXJldHVybiAweDcyOwogfQogCitzdGF0aWMgaW50IGludGVsX3Nkdm9fYmFkX3R2X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlEUk1fREVCVUdfS01TKCJJZ25vcmluZyBiYWQgU0RWTyBUViBjb25uZWN0b3IgZm9yICVzXG4iLCBpZC0+aWRlbnQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgaW50ZWxfc2R2b19iYWRfdHZbXSA9IHsKKwl7CisJCS5jYWxsYmFjayA9IGludGVsX3Nkdm9fYmFkX3R2X2NhbGxiYWNrLAorCQkuaWRlbnQgPSAiSW50ZWxHNDUvSUNIMTBSL0RNRTE3MzciLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIklCTSBDT1JQT1JBVElPTiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICI0ODAwNzg0IiksCisJCX0sCisJfSwKKworCXsgfQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKwogc3RhdGljIGJvb2wKIGludGVsX3Nkdm9fb3V0cHV0X3NldHVwKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgdWludDE2X3QgZmxhZ3MpCiB7CkBAIC0yMzIzLDcgKzIzNDMsOCBAQAogCQkJCQkoMSA8PCBJTlRFTF9TRFZPX05PTl9UVl9DTE9ORV9CSVQpIHwKIAkJCQkJKDEgPDwgSU5URUxfQU5BTE9HX0NMT05FX0JJVCk7CiAJCX0KLQl9IGVsc2UgaWYgKGZsYWdzICYgU0RWT19PVVRQVVRfU1ZJRDApIHsKKwl9IGVsc2UgaWYgKChmbGFncyAmIFNEVk9fT1VUUFVUX1NWSUQwKSAmJgorCQkgICAhZG1pX2NoZWNrX3N5c3RlbShpbnRlbF9zZHZvX2JhZF90dikpIHsKIAogCQlzZHZvX3ByaXYtPmNvbnRyb2xsZWRfb3V0cHV0ID0gU0RWT19PVVRQVVRfU1ZJRDA7CiAJCWVuY29kZXItPmVuY29kZXJfdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfVFZEQUM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCmluZGV4IDQ4YzI5MGIuLjMyZGI4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiAgICAgICAgICAgICAgbnYwNF9maWZvLm8gbnYxMF9maWZvLm8gbnY0MF9maWZvLm8gbnY1MF9maWZvLm8gXAogICAgICAgICAgICAgIG52MDRfZ3JhcGgubyBudjEwX2dyYXBoLm8gbnYyMF9ncmFwaC5vIFwKICAgICAgICAgICAgICBudjQwX2dyYXBoLm8gbnY1MF9ncmFwaC5vIFwKLSAgICAgICAgICAgICBudjQwX2dyY3R4Lm8gXAorICAgICAgICAgICAgIG52NDBfZ3JjdHgubyBudjUwX2dyY3R4Lm8gXAogICAgICAgICAgICAgIG52MDRfaW5zdG1lbS5vIG52NTBfaW5zdG1lbS5vIFwKICAgICAgICAgICAgICBudjUwX2NydGMubyBudjUwX2RhYy5vIG52NTBfc29yLm8gXAogICAgICAgICAgICAgIG52NTBfY3Vyc29yLm8gbnY1MF9kaXNwbGF5Lm8gbnY1MF9mYmNvbi5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKaW5kZXggNDgyMjdlNy4uMGUwNzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm52NTBfZGlzcGxheS5oIgogCisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KKwogI2RlZmluZSBOT1VWRUFVX0RTTV9TVVBQT1JURUQgMHgwMAogI2RlZmluZSBOT1VWRUFVX0RTTV9TVVBQT1JURURfRlVOQ1RJT05TIDB4MDAKIApAQCAtMjgsMzEgKzMwLDMwIEBACiAjZGVmaW5lIE5PVVZFQVVfRFNNX1BPV0VSX1NQRUVEIDB4MDEKICNkZWZpbmUgTk9VVkVBVV9EU01fUE9XRVJfU1RBTUlOQSAweDAyCiAKLXN0YXRpYyBpbnQgbm91dmVhdV9kc20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGZ1bmMsIGludCBhcmcsIGludCAqcmVzdWx0KQotewotCXN0YXRpYyBjaGFyIG11aWRbXSA9IHsKLQkJMHhBMCwgMHhBMCwgMHg5NSwgMHg5RCwgMHg2MCwgMHgwMCwgMHg0OCwgMHg0RCwKLQkJMHhCMywgMHg0RCwgMHg3RSwgMHg1RiwgMHhFQSwgMHgxMiwgMHg5RiwgMHhENCwKLQl9Oworc3RhdGljIHN0cnVjdCBub3V2ZWF1X2RzbV9wcml2IHsKKwlib29sIGRzbV9kZXRlY3RlZDsKKwlhY3BpX2hhbmRsZSBkaGFuZGxlOworCWFjcGlfaGFuZGxlIGRzbV9oYW5kbGU7Cit9IG5vdXZlYXVfZHNtX3ByaXY7CiAKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsKLQlzdHJ1Y3QgYWNwaV9oYW5kbGUgKmhhbmRsZTsKK3N0YXRpYyBjb25zdCBjaGFyIG5vdXZlYXVfZHNtX211aWRbXSA9IHsKKwkweEEwLCAweEEwLCAweDk1LCAweDlELCAweDYwLCAweDAwLCAweDQ4LCAweDRELAorCTB4QjMsIDB4NEQsIDB4N0UsIDB4NUYsIDB4RUEsIDB4MTIsIDB4OUYsIDB4RDQsCit9OworCitzdGF0aWMgaW50IG5vdXZlYXVfZHNtKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGZ1bmMsIGludCBhcmcsIGludCAqcmVzdWx0KQorewogCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CiAJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1zWzRdOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJaW50IGVycjsKIAotCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KTsKLQotCWlmICghaGFuZGxlKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCWlucHV0LmNvdW50ID0gNDsKIAlpbnB1dC5wb2ludGVyID0gcGFyYW1zOwogCXBhcmFtc1swXS50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKLQlwYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCA9IHNpemVvZihtdWlkKTsKLQlwYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIgPSAoY2hhciAqKW11aWQ7CisJcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggPSBzaXplb2Yobm91dmVhdV9kc21fbXVpZCk7CisJcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyID0gKGNoYXIgKilub3V2ZWF1X2RzbV9tdWlkOwogCXBhcmFtc1sxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CiAJcGFyYW1zWzFdLmludGVnZXIudmFsdWUgPSAweDAwMDAwMTAyOwogCXBhcmFtc1syXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CkBAIC02Miw3ICs2Myw3IEBACiAKIAllcnIgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfRFNNIiwgJmlucHV0LCAmb3V0cHV0KTsKIAlpZiAoZXJyKSB7Ci0JCU5WX0lORk8oZGV2LCAiZmFpbGVkIHRvIGV2YWx1YXRlIF9EU006ICVkXG4iLCBlcnIpOworCQlwcmludGsoS0VSTl9JTkZPICJmYWlsZWQgdG8gZXZhbHVhdGUgX0RTTTogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC04Niw0MCArODcsMTE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBub3V2ZWF1X2h5YnJpZF9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBub3V2ZWF1X2RzbV9zd2l0Y2hfbXV4KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IG11eF9pZCkKIHsKLQlpbnQgcmVzdWx0OworCXJldHVybiBub3V2ZWF1X2RzbShoYW5kbGUsIE5PVVZFQVVfRFNNX0xFRCwgbXV4X2lkLCBOVUxMKTsKK30KIAotCWlmIChub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX1BPV0VSLCBOT1VWRUFVX0RTTV9QT1dFUl9TVEFURSwKLQkJCQkJCQkJJnJlc3VsdCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JTlZfSU5GTyhkZXYsICJfRFNNIGhhcmR3YXJlIHN0YXR1cyBnYXZlIDB4JXhcbiIsIHJlc3VsdCk7Ci0KLQlpZiAocmVzdWx0KSB7IC8qIEVuc3VyZSB0aGF0IHRoZSBleHRlcm5hbCBHUFUgaXMgZW5hYmxlZCAqLwotCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX0xFRCwgTk9VVkVBVV9EU01fTEVEX1NQRUVELCBOVUxMKTsKLQkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9QT1dFUiwgTk9VVkVBVV9EU01fUE9XRVJfU1BFRUQsCi0JCQkJCQkJCQlOVUxMKTsKLQl9IGVsc2UgeyAvKiBTdGFtaW5hIG1vZGUgLSBkaXNhYmxlIHRoZSBleHRlcm5hbCBHUFUgKi8KLQkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9MRUQsIE5PVVZFQVVfRFNNX0xFRF9TVEFNSU5BLAotCQkJCQkJCQkJTlVMTCk7Ci0JCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NUQU1JTkEsCi0JCQkJCQkJCQlOVUxMKTsKLQl9Ci0KK3N0YXRpYyBpbnQgbm91dmVhdV9kc21fc2V0X2Rpc2NyZXRlX3N0YXRlKGFjcGlfaGFuZGxlIGhhbmRsZSwgZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSBzdGF0ZSkKK3sKKwlpbnQgYXJnOworCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikKKwkJYXJnID0gTk9VVkVBVV9EU01fUE9XRVJfU1BFRUQ7CisJZWxzZQorCQlhcmcgPSBOT1VWRUFVX0RTTV9QT1dFUl9TVEFNSU5BOworCW5vdXZlYXVfZHNtKGhhbmRsZSwgTk9VVkVBVV9EU01fUE9XRVIsIGFyZywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgbm91dmVhdV9kc21fcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbm91dmVhdV9kc21fc3dpdGNodG8oZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQpCiB7Ci0JaW50IHN1cHBvcnQgPSAwOworCWlmIChpZCA9PSBWR0FfU1dJVENIRVJPT19JR0QpCisJCXJldHVybiBub3V2ZWF1X2RzbV9zd2l0Y2hfbXV4KG5vdXZlYXVfZHNtX3ByaXYuZHNtX2hhbmRsZSwgTk9VVkVBVV9EU01fTEVEX1NUQU1JTkEpOworCWVsc2UKKwkJcmV0dXJuIG5vdXZlYXVfZHNtX3N3aXRjaF9tdXgobm91dmVhdV9kc21fcHJpdi5kc21faGFuZGxlLCBOT1VWRUFVX0RTTV9MRURfU1BFRUQpOworfQogCi0JaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fU1VQUE9SVEVELAotCQkJCU5PVVZFQVVfRFNNX1NVUFBPUlRFRF9GVU5DVElPTlMsICZzdXBwb3J0KSkKK3N0YXRpYyBpbnQgbm91dmVhdV9kc21fcG93ZXJfc3RhdGUoZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQsCisJCQkJICAgZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSBzdGF0ZSkKK3sKKwlpZiAoaWQgPT0gVkdBX1NXSVRDSEVST09fSUdEKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBub3V2ZWF1X2RzbV9zZXRfZGlzY3JldGVfc3RhdGUobm91dmVhdV9kc21fcHJpdi5kc21faGFuZGxlLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbm91dmVhdV9kc21faW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vdXZlYXVfZHNtX2dldF9jbGllbnRfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKG5vdXZlYXVfZHNtX3ByaXYuZGhhbmRsZSA9PSBERVZJQ0VfQUNQSV9IQU5ETEUoJnBkZXYtPmRldikpCisJCXJldHVybiBWR0FfU1dJVENIRVJPT19JR0Q7CisJZWxzZQorCQlyZXR1cm4gVkdBX1NXSVRDSEVST09fRElTOworfQorCitzdGF0aWMgc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2hhbmRsZXIgbm91dmVhdV9kc21faGFuZGxlciA9IHsKKwkuc3dpdGNodG8gPSBub3V2ZWF1X2RzbV9zd2l0Y2h0bywKKwkucG93ZXJfc3RhdGUgPSBub3V2ZWF1X2RzbV9wb3dlcl9zdGF0ZSwKKwkuaW5pdCA9IG5vdXZlYXVfZHNtX2luaXQsCisJLmdldF9jbGllbnRfaWQgPSBub3V2ZWF1X2RzbV9nZXRfY2xpZW50X2lkLAorfTsKKworc3RhdGljIGJvb2wgbm91dmVhdV9kc21fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWFjcGlfaGFuZGxlIGRoYW5kbGUsIG52aWRpYV9oYW5kbGU7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXQ7CisJdWludDMyX3QgcmVzdWx0OworCisJZGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KTsKKwlpZiAoIWRoYW5kbGUpCisJCXJldHVybiBmYWxzZTsKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGhhbmRsZSwgIl9EU00iLCAmbnZpZGlhX2hhbmRsZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXQ9IG5vdXZlYXVfZHNtKG52aWRpYV9oYW5kbGUsIE5PVVZFQVVfRFNNX1NVUFBPUlRFRCwKKwkJCSBOT1VWRUFVX0RTTV9TVVBQT1JURURfRlVOQ1RJT05TLCAmcmVzdWx0KTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFzdXBwb3J0KQotCQlyZXR1cm4gZmFsc2U7Ci0KKwlub3V2ZWF1X2RzbV9wcml2LmRoYW5kbGUgPSBkaGFuZGxlOworCW5vdXZlYXVfZHNtX3ByaXYuZHNtX2hhbmRsZSA9IG52aWRpYV9oYW5kbGU7CiAJcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyBib29sIG5vdXZlYXVfZHNtX2RldGVjdCh2b2lkKQoreworCWNoYXIgYWNwaV9tZXRob2RfbmFtZVsyNTVdID0geyAwIH07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtzaXplb2YoYWNwaV9tZXRob2RfbmFtZSksIGFjcGlfbWV0aG9kX25hbWV9OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwlpbnQgaGFzX2RzbSA9IDA7CisJaW50IHZnYV9jb3VudCA9IDA7CisJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgcGRldikpICE9IE5VTEwpIHsKKwkJdmdhX2NvdW50Kys7CisKKwkJaGFzX2RzbSB8PSAobm91dmVhdV9kc21fcGNpX3Byb2JlKHBkZXYpID09IHRydWUpOworCX0KKworCWlmICh2Z2FfY291bnQgPT0gMiAmJiBoYXNfZHNtKSB7CisJCWFjcGlfZ2V0X25hbWUobm91dmVhdV9kc21fcHJpdi5kc21faGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOworCQlwcmludGsoS0VSTl9JTkZPICJWR0Egc3dpdGNoZXJvbzogZGV0ZWN0ZWQgRFNNIHN3aXRjaGluZyBtZXRob2QgJXMgaGFuZGxlXG4iLAorCQkgICAgICAgYWNwaV9tZXRob2RfbmFtZSk7CisJCW5vdXZlYXVfZHNtX3ByaXYuZHNtX2RldGVjdGVkID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBub3V2ZWF1X3JlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpCit7CisJYm9vbCByOworCisJciA9IG5vdXZlYXVfZHNtX2RldGVjdCgpOworCWlmICghcikKKwkJcmV0dXJuOworCisJdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfaGFuZGxlcigmbm91dmVhdV9kc21faGFuZGxlcik7Cit9CisKK3ZvaWQgbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpCit7CisJdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9oYW5kbGVyKCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDBlOWNkMWQuLjcxMjQ3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC0zMTEsMTEgKzMxMSwxMSBAQAogCiAJLyogQzUxIGhhcyBtaXNhbGlnbmVkIHJlZ3Mgb24gcHVycG9zZS4gTWFydmVsbG91cyAqLwogCWlmIChyZWcgJiAweDIgfHwKLQkgICAgKHJlZyAmIDB4MSAmJiBkZXZfcHJpdi0+VkJJT1MucHViLmNoaXBfdmVyc2lvbiAhPSAweDUxKSkKKwkgICAgKHJlZyAmIDB4MSAmJiBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uICE9IDB4NTEpKQogCQlOVl9FUlJPUihkZXYsICI9PT09PT09IG1pc2FsaWduZWQgcmVnIDB4JTA4WCA9PT09PT09XG4iLCByZWcpOwogCiAJLyogd2FybiBvbiBDNTEgcmVncyB0aGF0IGhhdmVuJ3QgYmVlbiB2ZXJpZmllZCBhY2Nlc3NpYmxlIGluIHRyYWNpbmcgKi8KLQlpZiAocmVnICYgMHgxICYmIGRldl9wcml2LT5WQklPUy5wdWIuY2hpcF92ZXJzaW9uID09IDB4NTEgJiYKKwlpZiAocmVnICYgMHgxICYmIGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb24gPT0gMHg1MSAmJgogCSAgICByZWcgIT0gMHgxMzBkICYmIHJlZyAhPSAweDEzMTEgJiYgcmVnICE9IDB4NjAwODFkKQogCQlOVl9XQVJOKGRldiwgIj09PSBDNTEgbWlzYWxpZ25lZCByZWcgMHglMDhYIG5vdCB2ZXJpZmllZCA9PT1cbiIsCiAJCQlyZWcpOwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJTE9HX09MRF9WQUxVRShiaW9zX3JkMzIoYmlvcywgcmVnKSk7CiAJQklPU0xPRyhiaW9zLCAiCVdyaXRlOiBSZWc6IDB4JTA4WCwgRGF0YTogMHglMDhYXG4iLCByZWcsIGRhdGEpOwogCi0JaWYgKGRldl9wcml2LT5WQklPUy5leGVjdXRlKSB7CisJaWYgKGRldl9wcml2LT52Ymlvcy5leGVjdXRlKSB7CiAJCXN0aWxsX2FsaXZlKCk7CiAJCW52X3dyMzIoYmlvcy0+ZGV2LCByZWcsIGRhdGEpOwogCX0KQEAgLTY0Nyw3ICs2NDcsNyBAQAogCXJlZzAgPSAocmVnMCAmIDB4ZmZmOGZmZmYpIHwgKHBsbC5sb2cyUCA8PCAxNik7CiAJcmVnMSA9IChyZWcxICYgMHhmZmZmMDAwMCkgfCAocGxsLk4xIDw8IDgpIHwgcGxsLk0xOwogCi0JaWYgKGRldl9wcml2LT5WQklPUy5leGVjdXRlKSB7CisJaWYgKGRldl9wcml2LT52Ymlvcy5leGVjdXRlKSB7CiAJCXN0aWxsX2FsaXZlKCk7CiAJCW52X3dyMzIoZGV2LCByZWcgKyA0LCByZWcxKTsKIAkJbnZfd3IzMihkZXYsIHJlZyArIDAsIHJlZzApOwpAQCAtNjg5LDcgKzY4OSw3IEBACiBzdGF0aWMgaW50IGRjYl9lbnRyeV9pZHhfZnJvbV9jcnRjaGVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAKIAkvKgogCSAqIEZvciB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNvcnJlY3QsIENSNDQgbXVzdCBoYXZlIGJlZW4KQEAgLTcwMCw3ICs3MDAsNyBAQAogCiAJdWludDhfdCBkY2JfZW50cnkgPSBOVlJlYWRWZ2FDcnRjNTc1OChkZXYsIGJpb3MtPnN0YXRlLmNydGNoZWFkLCAwKTsKIAotCWlmIChkY2JfZW50cnkgPiBiaW9zLT5iZGNiLmRjYi5lbnRyaWVzKSB7CisJaWYgKGRjYl9lbnRyeSA+IGJpb3MtPmRjYi5lbnRyaWVzKSB7CiAJCU5WX0VSUk9SKGRldiwgIkNSNTggZG9lc24ndCBoYXZlIGEgdmFsaWQgRENCIGVudHJ5IGN1cnJlbnRseSAiCiAJCQkJIiglMDJYKVxuIiwgZGNiX2VudHJ5KTsKIAkJZGNiX2VudHJ5ID0gMHg3ZjsJLyogdW51c2VkIC8gaW52YWxpZCBtYXJrZXIgKi8KQEAgLTcxMywyNSArNzEzLDI2IEBACiBpbml0X2kyY19kZXZpY2VfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaTJjX2luZGV4KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGJpb3NfcGFyc2VkX2RjYiAqYmRjYiA9ICZkZXZfcHJpdi0+VkJJT1MuYmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKIAogCWlmIChpMmNfaW5kZXggPT0gMHhmZikgewogCQkvKiBub3RlOiBkY2JfZW50cnlfaWR4X2Zyb21fY3J0Y2hlYWQgbmVlZHMgcHJlLXNjcmlwdCBzZXQtdXAgKi8KIAkJaW50IGlkeCA9IGRjYl9lbnRyeV9pZHhfZnJvbV9jcnRjaGVhZChkZXYpLCBzaGlmdCA9IDA7Ci0JCWludCBkZWZhdWx0X2luZGljZXMgPSBiZGNiLT5pMmNfZGVmYXVsdF9pbmRpY2VzOworCQlpbnQgZGVmYXVsdF9pbmRpY2VzID0gZGNiLT5pMmNfZGVmYXVsdF9pbmRpY2VzOwogCi0JCWlmIChpZHggIT0gMHg3ZiAmJiBiZGNiLT5kY2IuZW50cnlbaWR4XS5pMmNfdXBwZXJfZGVmYXVsdCkKKwkJaWYgKGlkeCAhPSAweDdmICYmIGRjYi0+ZW50cnlbaWR4XS5pMmNfdXBwZXJfZGVmYXVsdCkKIAkJCXNoaWZ0ID0gNDsKIAogCQlpMmNfaW5kZXggPSAoZGVmYXVsdF9pbmRpY2VzID4+IHNoaWZ0KSAmIDB4ZjsKIAl9CiAJaWYgKGkyY19pbmRleCA9PSAweDgwKQkvKiBnODArICovCi0JCWkyY19pbmRleCA9IGJkY2ItPmkyY19kZWZhdWx0X2luZGljZXMgJiAweGY7CisJCWkyY19pbmRleCA9IGRjYi0+aTJjX2RlZmF1bHRfaW5kaWNlcyAmIDB4ZjsKIAogCXJldHVybiBub3V2ZWF1X2kyY19maW5kKGRldiwgaTJjX2luZGV4KTsKIH0KIAotc3RhdGljIHVpbnQzMl90IGdldF90bWRzX2luZGV4X3JlZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50OF90IG1sdikKK3N0YXRpYyB1aW50MzJfdAorZ2V0X3RtZHNfaW5kZXhfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ4X3QgbWx2KQogewogCS8qCiAJICogRm9yIG1sdiA8IDB4ODAsIGl0IGlzIGFuIGluZGV4IGludG8gYSB0YWJsZSBvZiBUTURTIGJhc2UgYWRkcmVzc2VzLgpAQCAtNzQ0LDYgKzc0NSw3IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCWNvbnN0IGludCBwcmFtZGFjX29mZnNldFsxM10gPSB7CiAJCTAsIDAsIDB4OCwgMCwgMHgyMDAwLCAwLCAwLCAwLCAweDIwMDgsIDAsIDAsIDAsIDB4MjAwMCB9OwogCWNvbnN0IHVpbnQzMl90IHByYW1kYWNfdGFibGVbNF0gPSB7CkBAIC03NTYsMTMgKzc1OCwxMiBAQAogCQlkY2JfZW50cnkgPSBkY2JfZW50cnlfaWR4X2Zyb21fY3J0Y2hlYWQoZGV2KTsKIAkJaWYgKGRjYl9lbnRyeSA9PSAweDdmKQogCQkJcmV0dXJuIDA7Ci0JCWRhY29mZnNldCA9IHByYW1kYWNfb2Zmc2V0WwotCQkJCWRldl9wcml2LT5WQklPUy5iZGNiLmRjYi5lbnRyeVtkY2JfZW50cnldLm9yXTsKKwkJZGFjb2Zmc2V0ID0gcHJhbWRhY19vZmZzZXRbYmlvcy0+ZGNiLmVudHJ5W2RjYl9lbnRyeV0ub3JdOwogCQlpZiAobWx2ID09IDB4ODEpCiAJCQlkYWNvZmZzZXQgXj0gODsKIAkJcmV0dXJuIDB4NjgwOGIwICsgZGFjb2Zmc2V0OwogCX0gZWxzZSB7Ci0JCWlmIChtbHYgPiBBUlJBWV9TSVpFKHByYW1kYWNfdGFibGUpKSB7CisJCWlmIChtbHYgPj0gQVJSQVlfU0laRShwcmFtZGFjX3RhYmxlKSkgewogCQkJTlZfRVJST1IoZGV2LCAiTWFnaWMgTG9va3VwIFZhbHVlIHRvbyBiaWcgKCUwMlgpXG4iLAogCQkJCQkJCQkJbWx2KTsKIAkJCXJldHVybiAwOwpAQCAtMjU3NCwxOSArMjU3NSwxOSBAQAogCiAJY29uc3QgdWludDMyX3QgbnY1MF9ncGlvX3JlZ1s0XSA9IHsgMHhlMTA0LCAweGUxMDgsIDB4ZTI4MCwgMHhlMjg0IH07CiAJY29uc3QgdWludDMyX3QgbnY1MF9ncGlvX2N0bFsyXSA9IHsgMHhlMTAwLCAweGUyOGMgfTsKLQljb25zdCB1aW50OF90ICpncGlvX3RhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cl07CisJY29uc3QgdWludDhfdCAqZ3Bpb190YWJsZSA9ICZiaW9zLT5kYXRhW2Jpb3MtPmRjYi5ncGlvX3RhYmxlX3B0cl07CiAJY29uc3QgdWludDhfdCAqZ3Bpb19lbnRyeTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCiAJCXJldHVybiAxOwogCi0JaWYgKGJpb3MtPmJkY2IudmVyc2lvbiAhPSAweDQwKSB7CisJaWYgKGJpb3MtPmRjYi52ZXJzaW9uICE9IDB4NDApIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LCAiRENCIHRhYmxlIG5vdCB2ZXJzaW9uIDQuMFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCWlmICghYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cikgeworCWlmICghYmlvcy0+ZGNiLmdwaW9fdGFibGVfcHRyKSB7CiAJCU5WX1dBUk4oYmlvcy0+ZGV2LCAiSW52YWxpZCBwb2ludGVyIHRvIElOSVRfOEUgdGFibGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMTIzLDcgKzMxMjQsNyBAQAogCQkgICAgICBzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQsIGludCBoZWFkLCBib29sIGRsKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJc3RydWN0IGluaXRfZXhlYyBpZXhlYyA9IHt0cnVlLCBmYWxzZX07CiAKIAlOVl9UUkFDRShkZXYsICIweCUwNFg6IFBhcnNpbmcgZGlnaXRhbCBvdXRwdXQgc2NyaXB0IHRhYmxlXG4iLApAQCAtMzE0MCw3ICszMTQxLDcgQEAKIHN0YXRpYyBpbnQgY2FsbF9sdmRzX21hbnVmYWN0dXJlcl9zY3JpcHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50LCBpbnQgaGVhZCwgZW51bSBMVkRTX3NjcmlwdCBzY3JpcHQpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50OF90IHN1YiA9IGJpb3MtPmRhdGFbYmlvcy0+ZnAueGxhdGVkX2VudHJ5ICsgc2NyaXB0XSArIChiaW9zLT5mcC5saW5rX2NfaW5jcmVtZW50ICYmIGRjYmVudC0+b3IgJiBPVVRQVVRfQyA/IDEgOiAwKTsKIAl1aW50MTZfdCBzY3JpcHRvZnMgPSBST00xNihiaW9zLT5kYXRhW2Jpb3MtPmluaXRfc2NyaXB0X3RibHNfcHRyICsgc3ViICogMl0pOwogCkBAIC0zMTk0LDcgKzMxOTUsNyBAQAogCSAqIG9mIGEgbGlzdCBvZiBweGNsa3MgYW5kIHNjcmlwdCBwb2ludGVycy4KIAkgKi8KIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXVuc2lnbmVkIGludCBvdXRwdXRzZXQgPSAoZGNiZW50LT5vciA9PSA0KSA/IDEgOiAwOwogCXVpbnQxNl90IHNjcmlwdHB0ciA9IDAsIGNsa3RhYmxlOwogCXVpbnQ4X3QgY2xrdGFibGVwdHIgPSAwOwpAQCAtMzI2MSw3ICszMjYyLDcgQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDhfdCBsdmRzX3ZlciA9IGJpb3MtPmRhdGFbYmlvcy0+ZnAubHZkc21hbnVmYWN0dXJlcnBvaW50ZXJdOwogCXVpbnQzMl90IHNlbF9jbGtfYmluZGluZywgc2VsX2NsazsKIAlpbnQgcmV0OwpAQCAtMzM5NSw3ICszMzk2LDcgQEAKICNpZm5kZWYgX19wb3dlcnBjX18KIAkJTlZfRVJST1IoZGV2LCAiUG9pbnRlciB0byBmbGF0IHBhbmVsIHRhYmxlIGludmFsaWRcbiIpOwogI2VuZGlmCi0JCWJpb3MtPnB1Yi5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IDB4NGI7CisJCWJpb3MtPmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoID0gMHg0YjsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDI4LDcgKzM0MjksNyBAQAogCQkgKiBmcHRhYmxlWzRdIGlzIHRoZSBtaW5pbXVtCiAJCSAqIFJBTURBQ19GUF9IQ1JUQyAtPiBSQU1EQUNfRlBfSFNZTkNfU1RBUlQgZ2FwCiAJCSAqLwotCQliaW9zLT5wdWIuZGlnaXRhbF9taW5fZnJvbnRfcG9yY2ggPSBmcHRhYmxlWzRdOworCQliaW9zLT5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IGZwdGFibGVbNF07CiAJCW9mcyA9IC03OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzQ2Nyw3ICszNDY4LDcgQEAKIAogCS8qIG52NHggY2FyZHMgbmVlZCBib3RoIGEgc3RyYXAgdmFsdWUgYW5kIGZwaW5kZXggb2YgMHhmIHRvIHVzZSBEREMgKi8KIAlpZiAobHRoLmx2ZHNfdmVyID4gMHgxMCkKLQkJYmlvcy0+cHViLmZwX25vX2RkYyA9IGZwc3RyYXBwaW5nICE9IDB4ZiB8fCBmcGluZGV4ICE9IDB4ZjsKKwkJYmlvcy0+ZnBfbm9fZGRjID0gZnBzdHJhcHBpbmcgIT0gMHhmIHx8IGZwaW5kZXggIT0gMHhmOwogCiAJLyoKIAkgKiBJZiBlaXRoZXIgdGhlIHN0cmFwIG9yIHhsYXRlZCBmcGluZGV4IHZhbHVlIGFyZSAweGYgdGhlcmUgaXMgbm8KQEAgLTM0OTEsNyArMzQ5Miw3IEBACiBib29sIG5vdXZlYXVfYmlvc19mcF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDhfdCAqbW9kZV9lbnRyeSA9ICZiaW9zLT5kYXRhW2Jpb3MtPmZwLm1vZGVfcHRyXTsKIAogCWlmICghbW9kZSkJLyoganVzdCBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiBwcm9kdWNlIGEgbW9kZSAqLwpAQCAtMzU2MiwxMSArMzU2MywxMSBAQAogCSAqIHVudGlsIGxhdGVyLCB3aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG5vbi16ZXJvIHB4Y2xrCiAJICovCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlpbnQgZnBzdHJhcHBpbmcgPSBnZXRfZnBfc3RyYXAoZGV2LCBiaW9zKSwgbHZkc21hbnVmYWN0dXJlcmluZGV4ID0gMDsKIAlzdHJ1Y3QgbHZkc3RhYmxlaGVhZGVyIGx0aDsKIAl1aW50MTZfdCBsdmRzb2ZzOwotCWludCByZXQsIGNoaXBfdmVyc2lvbiA9IGJpb3MtPnB1Yi5jaGlwX3ZlcnNpb247CisJaW50IHJldCwgY2hpcF92ZXJzaW9uID0gYmlvcy0+Y2hpcF92ZXJzaW9uOwogCiAJcmV0ID0gcGFyc2VfbHZkc19tYW51ZmFjdHVyZXJfdGFibGVfaGVhZGVyKGRldiwgYmlvcywgJmx0aCk7CiAJaWYgKHJldCkKQEAgLTM2ODIsNyArMzY4Myw3IEBACiAJCQkgdWludDE2X3QgcmVjb3JkLCBpbnQgcmVjb3JkX2xlbiwgaW50IHJlY29yZF9ucikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXVpbnQzMl90IGVudHJ5OwogCXVpbnQxNl90IHRhYmxlOwogCWludCBpLCB2OwpAQCAtMzcxNiw3ICszNzE3LDcgQEAKIAkJICAgICAgaW50ICpsZW5ndGgpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50OF90ICp0YWJsZTsKIAogCWlmICghYmlvcy0+ZGlzcGxheS5kcF90YWJsZV9wdHIpIHsKQEAgLTM3MjUsNyArMzcyNiw3IEBACiAJfQogCXRhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+ZGlzcGxheS5kcF90YWJsZV9wdHJdOwogCi0JaWYgKHRhYmxlWzBdICE9IDB4MjEpIHsKKwlpZiAodGFibGVbMF0gIT0gMHgyMCAmJiB0YWJsZVswXSAhPSAweDIxKSB7CiAJCU5WX0VSUk9SKGRldiwgIkRpc3BsYXlQb3J0IHRhYmxlIHZlcnNpb24gMHglMDJ4IHVua25vd25cbiIsCiAJCQkgdGFibGVbMF0pOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM3NjUsNyArMzc2Niw3IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXVpbnQ4X3QgKnRhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+ZGlzcGxheS5zY3JpcHRfdGFibGVfcHRyXTsKIAl1aW50OF90ICpvdGFibGUgPSBOVUxMOwogCXVpbnQxNl90IHNjcmlwdDsKQEAgLTM5MTgsOCArMzkxOSw4IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOwotCWludCBjdiA9IGJpb3MtPnB1Yi5jaGlwX3ZlcnNpb247CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CisJaW50IGN2ID0gYmlvcy0+Y2hpcF92ZXJzaW9uOwogCXVpbnQxNl90IGNsa3RhYmxlID0gMCwgc2NyaXB0cHRyOwogCXVpbnQzMl90IHNlbF9jbGtfYmluZGluZywgc2VsX2NsazsKIApAQCAtMzk3OCw4ICszOTc5LDggQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7Ci0JaW50IGN2ID0gYmlvcy0+cHViLmNoaXBfdmVyc2lvbiwgcGxsaW5kZXggPSAwOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOworCWludCBjdiA9IGJpb3MtPmNoaXBfdmVyc2lvbiwgcGxsaW5kZXggPSAwOwogCXVpbnQ4X3QgcGxsX2xpbV92ZXIgPSAwLCBoZWFkZXJsZW4gPSAwLCByZWNvcmRsZW4gPSAwLCBlbnRyaWVzID0gMDsKIAl1aW50MzJfdCBjcnlzdGFsX3N0cmFwX21hc2ssIGNyeXN0YWxfc3RyYXBzOwogCkBAIC00MzMyLDcgKzQzMzMsNyBAQAogCSAqLwogCiAJYmlvcy0+bWFqb3JfdmVyc2lvbiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107Ci0JYmlvcy0+cHViLmNoaXBfdmVyc2lvbiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CisJYmlvcy0+Y2hpcF92ZXJzaW9uID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAlOVl9UUkFDRShkZXYsICJCaW9zIHZlcnNpb24gJTAyeC4lMDJ4LiUwMnguJTAyeFxuIiwKIAkJIGJpb3MtPmRhdGFbb2Zmc2V0ICsgM10sIGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl0sCiAJCSBiaW9zLT5kYXRhW29mZnNldCArIDFdLCBiaW9zLT5kYXRhW29mZnNldF0pOwpAQCAtNDQwMiw3ICs0NDAzLDcgQEAKIAl9CiAKIAkvKiBGaXJzdCBlbnRyeSBpcyBub3JtYWwgZGFjLCAybmQgdHYtb3V0IHBlcmhhcHM/ICovCi0JYmlvcy0+cHViLmRhY3Rlc3R2YWwgPSBST00zMihiaW9zLT5kYXRhW2xvYWRfdGFibGVfcHRyICsgaGVhZGVybGVuXSkgJiAweDNmZjsKKwliaW9zLT5kYWN0ZXN0dmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtsb2FkX3RhYmxlX3B0ciArIGhlYWRlcmxlbl0pICYgMHgzZmY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MjYsOCArNDUyNyw4IEBACiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAotCWJpb3MtPnB1Yi5kYWN0ZXN0dmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtkYWNjbXBvZmZzZXQgKyBkYWNoZWFkZXJsZW5dKTsKLQliaW9zLT5wdWIudHZkYWN0ZXN0dmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtkYWNjbXBvZmZzZXQgKyBkYWNoZWFkZXJsZW4gKyA0XSk7CisJYmlvcy0+ZGFjdGVzdHZhbCA9IFJPTTMyKGJpb3MtPmRhdGFbZGFjY21wb2Zmc2V0ICsgZGFjaGVhZGVybGVuXSk7CisJYmlvcy0+dHZkYWN0ZXN0dmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtkYWNjbXBvZmZzZXQgKyBkYWNoZWFkZXJsZW4gKyA0XSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3OTYsMTEgKzQ3OTcsMTEgQEAKIAl1aW50MTZfdCBsZWdhY3lfc2NyaXB0c19vZmZzZXQsIGxlZ2FjeV9pMmNfb2Zmc2V0OwogCiAJLyogbG9hZCBuZWVkZWQgZGVmYXVsdHMgaW4gY2FzZSB3ZSBjYW4ndCBwYXJzZSB0aGlzIGluZm8gKi8KLQliaW9zLT5iZGNiLmRjYi5pMmNbMF0ud3JpdGUgPSBOVl9DSU9fQ1JFX0REQ19XUl9fSU5ERVg7Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzBdLnJlYWQgPSBOVl9DSU9fQ1JFX0REQ19TVEFUVVNfX0lOREVYOwotCWJpb3MtPmJkY2IuZGNiLmkyY1sxXS53cml0ZSA9IE5WX0NJT19DUkVfRERDMF9XUl9fSU5ERVg7Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzFdLnJlYWQgPSBOVl9DSU9fQ1JFX0REQzBfU1RBVFVTX19JTkRFWDsKLQliaW9zLT5wdWIuZGlnaXRhbF9taW5fZnJvbnRfcG9yY2ggPSAweDRiOworCWJpb3MtPmRjYi5pMmNbMF0ud3JpdGUgPSBOVl9DSU9fQ1JFX0REQ19XUl9fSU5ERVg7CisJYmlvcy0+ZGNiLmkyY1swXS5yZWFkID0gTlZfQ0lPX0NSRV9ERENfU1RBVFVTX19JTkRFWDsKKwliaW9zLT5kY2IuaTJjWzFdLndyaXRlID0gTlZfQ0lPX0NSRV9EREMwX1dSX19JTkRFWDsKKwliaW9zLT5kY2IuaTJjWzFdLnJlYWQgPSBOVl9DSU9fQ1JFX0REQzBfU1RBVFVTX19JTkRFWDsKKwliaW9zLT5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IDB4NGI7CiAJYmlvcy0+Zm1heHZjbyA9IDI1NjAwMDsKIAliaW9zLT5mbWludmNvID0gMTI4MDAwOwogCWJpb3MtPmZwLmR1YWxsaW5rX3RyYW5zaXRpb25fY2xrID0gOTAwMDA7CkBAIC00OTA3LDEwICs0OTA4LDEwIEBACiAJYmlvcy0+bGVnYWN5LmkyY19pbmRpY2VzLmNydCA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXRdOwogCWJpb3MtPmxlZ2FjeS5pMmNfaW5kaWNlcy50diA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyAxXTsKIAliaW9zLT5sZWdhY3kuaTJjX2luZGljZXMucGFuZWwgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgMl07Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzBdLndyaXRlID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDRdOwotCWJpb3MtPmJkY2IuZGNiLmkyY1swXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDVdOwotCWJpb3MtPmJkY2IuZGNiLmkyY1sxXS53cml0ZSA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA2XTsKLQliaW9zLT5iZGNiLmRjYi5pMmNbMV0ucmVhZCA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA3XTsKKwliaW9zLT5kY2IuaTJjWzBdLndyaXRlID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDRdOworCWJpb3MtPmRjYi5pMmNbMF0ucmVhZCA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA1XTsKKwliaW9zLT5kY2IuaTJjWzFdLndyaXRlID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDZdOworCWJpb3MtPmRjYi5pMmNbMV0ucmVhZCA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA3XTsKIAogCWlmIChibXBsZW5ndGggPiA3NCkgewogCQliaW9zLT5mbWF4dmNvID0gUk9NMzIoYm1wWzY3XSk7CkBAIC00OTg0LDcgKzQ5ODUsOCBAQAogCQllbHNlCiAJCQlOVl9XQVJOKGRldiwKIAkJCQkiRENCIEkyQyB0YWJsZSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gaW5kZXhhYmxlICIKLQkJCQkiKCVkIGVudHJpZXMsIG1heCBpbmRleCAxNSlcbiIsIGkyY3RhYmxlWzJdKTsKKwkJCQkiKCVkIGVudHJpZXMsIG1heCAlZClcbiIsIGkyY3RhYmxlWzJdLAorCQkJCURDQl9NQVhfTlVNX0kyQ19FTlRSSUVTKTsKIAkJZW50cnlfbGVuID0gaTJjdGFibGVbM107CiAJCS8qIFs0XSBpcyBpMmNfZGVmYXVsdF9pbmRpY2VzLCByZWFkIGluIHBhcnNlX2RjYl90YWJsZSgpICovCiAJfQpAQCAtNTAwMCw4ICs1MDAyLDggQEAKIAogCWlmIChpbmRleCA9PSAweGYpCiAJCXJldHVybiAwOwotCWlmIChpbmRleCA+IGkyY19lbnRyaWVzKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkRDQiBJMkMgaW5kZXggdG9vIGJpZyAoJWQgPiAlZClcbiIsCisJaWYgKGluZGV4ID49IGkyY19lbnRyaWVzKSB7CisJCU5WX0VSUk9SKGRldiwgIkRDQiBJMkMgaW5kZXggdG9vIGJpZyAoJWQgPj0gJWQpXG4iLAogCQkJIGluZGV4LCBpMmN0YWJsZVsyXSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KQEAgLTUwMzYsNyArNTAzOCw3IEBACiBzdGF0aWMgc3RydWN0IGRjYl9ncGlvX2VudHJ5ICoKIG5ld19ncGlvX2VudHJ5KHN0cnVjdCBudmJpb3MgKmJpb3MpCiB7Ci0Jc3RydWN0IHBhcnNlZF9kY2JfZ3BpbyAqZ3BpbyA9ICZiaW9zLT5iZGNiLmdwaW87CisJc3RydWN0IGRjYl9ncGlvX3RhYmxlICpncGlvID0gJmJpb3MtPmRjYi5ncGlvOwogCiAJcmV0dXJuICZncGlvLT5lbnRyeVtncGlvLT5lbnRyaWVzKytdOwogfQpAQCAtNTA0NSwxNCArNTA0NywxNCBAQAogbm91dmVhdV9iaW9zX2dwaW9fZW50cnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYmlvcy0+YmRjYi5ncGlvLmVudHJpZXM7IGkrKykgewotCQlpZiAoYmlvcy0+YmRjYi5ncGlvLmVudHJ5W2ldLnRhZyAhPSB0YWcpCisJZm9yIChpID0gMDsgaSA8IGJpb3MtPmRjYi5ncGlvLmVudHJpZXM7IGkrKykgeworCQlpZiAoYmlvcy0+ZGNiLmdwaW8uZW50cnlbaV0udGFnICE9IHRhZykKIAkJCWNvbnRpbnVlOwogCi0JCXJldHVybiAmYmlvcy0+YmRjYi5ncGlvLmVudHJ5W2ldOworCQlyZXR1cm4gJmJpb3MtPmRjYi5ncGlvLmVudHJ5W2ldOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtNTEwMCw3ICs1MTAyLDcgQEAKIHBhcnNlX2RjYl9ncGlvX3RhYmxlKHN0cnVjdCBudmJpb3MgKmJpb3MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKLQl1aW50MTZfdCBncGlvX3RhYmxlX3B0ciA9IGJpb3MtPmJkY2IuZ3Bpb190YWJsZV9wdHI7CisJdWludDE2X3QgZ3Bpb190YWJsZV9wdHIgPSBiaW9zLT5kY2IuZ3Bpb190YWJsZV9wdHI7CiAJdWludDhfdCAqZ3Bpb190YWJsZSA9ICZiaW9zLT5kYXRhW2dwaW9fdGFibGVfcHRyXTsKIAlpbnQgaGVhZGVyX2xlbiA9IGdwaW9fdGFibGVbMV0sCiAJICAgIGVudHJpZXMgPSBncGlvX3RhYmxlWzJdLApAQCAtNTEwOCw3ICs1MTEwLDcgQEAKIAl2b2lkICgqcGFyc2VfZW50cnkpKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QpID0gTlVMTDsKIAlpbnQgaTsKIAotCWlmIChiaW9zLT5iZGNiLnZlcnNpb24gPj0gMHg0MCkgeworCWlmIChiaW9zLT5kY2IudmVyc2lvbiA+PSAweDQwKSB7CiAJCWlmIChncGlvX3RhYmxlX3B0ciAmJiBlbnRyeV9sZW4gIT0gNCkgewogCQkJTlZfV0FSTihkZXYsICJJbnZhbGlkIERDQiBHUElPIHRhYmxlIGVudHJ5IGxlbmd0aC5cbiIpOwogCQkJcmV0dXJuOwpAQCAtNTExNiw3ICs1MTE4LDcgQEAKIAogCQlwYXJzZV9lbnRyeSA9IHBhcnNlX2RjYjQwX2dwaW9fZW50cnk7CiAKLQl9IGVsc2UgaWYgKGJpb3MtPmJkY2IudmVyc2lvbiA+PSAweDMwKSB7CisJfSBlbHNlIGlmIChiaW9zLT5kY2IudmVyc2lvbiA+PSAweDMwKSB7CiAJCWlmIChncGlvX3RhYmxlX3B0ciAmJiBlbnRyeV9sZW4gIT0gMikgewogCQkJTlZfV0FSTihkZXYsICJJbnZhbGlkIERDQiBHUElPIHRhYmxlIGVudHJ5IGxlbmd0aC5cbiIpOwogCQkJcmV0dXJuOwpAQCAtNTEyNCw3ICs1MTI2LDcgQEAKIAogCQlwYXJzZV9lbnRyeSA9IHBhcnNlX2RjYjMwX2dwaW9fZW50cnk7CiAKLQl9IGVsc2UgaWYgKGJpb3MtPmJkY2IudmVyc2lvbiA+PSAweDIyKSB7CisJfSBlbHNlIGlmIChiaW9zLT5kY2IudmVyc2lvbiA+PSAweDIyKSB7CiAJCS8qCiAJCSAqIERDQnMgb2xkZXIgdGhhbiB2My4wIGRvbid0IHJlYWxseSBoYXZlIGEgR1BJTwogCQkgKiB0YWJsZSwgaW5zdGVhZCB0aGV5IGtlZXAgc29tZSBHUElPIGluZm8gYXQgZml4ZWQKQEAgLTUxNTgsMzAgKzUxNjAsNjcgQEAKIG5vdXZlYXVfYmlvc19jb25uZWN0b3JfZW50cnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGluZGV4KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgKmN0ZTsKIAotCWlmIChpbmRleCA+PSBiaW9zLT5iZGNiLmNvbm5lY3Rvci5lbnRyaWVzKQorCWlmIChpbmRleCA+PSBiaW9zLT5kY2IuY29ubmVjdG9yLmVudHJpZXMpCiAJCXJldHVybiBOVUxMOwogCi0JY3RlID0gJmJpb3MtPmJkY2IuY29ubmVjdG9yLmVudHJ5W2luZGV4XTsKKwljdGUgPSAmYmlvcy0+ZGNiLmNvbm5lY3Rvci5lbnRyeVtpbmRleF07CiAJaWYgKGN0ZS0+dHlwZSA9PSAweGZmKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBjdGU7CiB9CiAKK3N0YXRpYyBlbnVtIGRjYl9jb25uZWN0b3JfdHlwZQorZGl2aW5lX2Nvbm5lY3Rvcl90eXBlKHN0cnVjdCBudmJpb3MgKmJpb3MsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmYmlvcy0+ZGNiOworCXVuc2lnbmVkIGVuY29kZXJzID0gMCwgdHlwZSA9IERDQl9DT05ORUNUT1JfTk9ORTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkY2ItPmVudHJpZXM7IGkrKykgeworCQlpZiAoZGNiLT5lbnRyeVtpXS5jb25uZWN0b3IgPT0gaW5kZXgpCisJCQllbmNvZGVycyB8PSAoMSA8PCBkY2ItPmVudHJ5W2ldLnR5cGUpOworCX0KKworCWlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9EUCkpIHsKKwkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX1RNRFMpKQorCQkJdHlwZSA9IERDQl9DT05ORUNUT1JfRFA7CisJCWVsc2UKKwkJCXR5cGUgPSBEQ0JfQ09OTkVDVE9SX2VEUDsKKwl9IGVsc2UKKwlpZiAoZW5jb2RlcnMgJiAoMSA8PCBPVVRQVVRfVE1EUykpIHsKKwkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0FOQUxPRykpCisJCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9EVklfSTsKKwkJZWxzZQorCQkJdHlwZSA9IERDQl9DT05ORUNUT1JfRFZJX0Q7CisJfSBlbHNlCisJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0FOQUxPRykpIHsKKwkJdHlwZSA9IERDQl9DT05ORUNUT1JfVkdBOworCX0gZWxzZQorCWlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9MVkRTKSkgeworCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9MVkRTOworCX0gZWxzZQorCWlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9UVikpIHsKKwkJdHlwZSA9IERDQl9DT05ORUNUT1JfVFZfMDsKKwl9CisKKwlyZXR1cm4gdHlwZTsKK30KKwogc3RhdGljIHZvaWQKIHBhcnNlX2RjYl9jb25uZWN0b3JfdGFibGUoc3RydWN0IG52YmlvcyAqYmlvcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwotCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlICpjdCA9ICZiaW9zLT5iZGNiLmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZSAqY3QgPSAmYmlvcy0+ZGNiLmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSAqY3RlOwotCXVpbnQ4X3QgKmNvbm50YWIgPSAmYmlvcy0+ZGF0YVtiaW9zLT5iZGNiLmNvbm5lY3Rvcl90YWJsZV9wdHJdOworCXVpbnQ4X3QgKmNvbm50YWIgPSAmYmlvcy0+ZGF0YVtiaW9zLT5kY2IuY29ubmVjdG9yX3RhYmxlX3B0cl07CiAJdWludDhfdCAqZW50cnk7CiAJaW50IGk7CiAKLQlpZiAoIWJpb3MtPmJkY2IuY29ubmVjdG9yX3RhYmxlX3B0cikgeworCWlmICghYmlvcy0+ZGNiLmNvbm5lY3Rvcl90YWJsZV9wdHIpIHsKIAkJTlZfREVCVUdfS01TKGRldiwgIk5vIERDQiBjb25uZWN0b3IgdGFibGUgcHJlc2VudFxuIik7CiAJCXJldHVybjsKIAl9CkBAIC01MjAzLDYgKzUyNDIsNyBAQAogCQkJY3RlLT5lbnRyeSA9IFJPTTE2KGVudHJ5WzBdKTsKIAkJZWxzZQogCQkJY3RlLT5lbnRyeSA9IFJPTTMyKGVudHJ5WzBdKTsKKwogCQljdGUtPnR5cGUgID0gKGN0ZS0+ZW50cnkgJiAweDAwMDAwMGZmKSA+PiAwOwogCQljdGUtPmluZGV4ID0gKGN0ZS0+ZW50cnkgJiAweDAwMDAwZjAwKSA+PiA4OwogCQlzd2l0Y2ggKGN0ZS0+ZW50cnkgJiAweDAwMDMzMDAwKSB7CkBAIC01MjI4LDEwICs1MjY4LDMzIEBACiAKIAkJTlZfSU5GTyhkZXYsICIgICVkOiAweCUwOHg6IHR5cGUgMHglMDJ4IGlkeCAlZCB0YWcgMHglMDJ4XG4iLAogCQkJaSwgY3RlLT5lbnRyeSwgY3RlLT50eXBlLCBjdGUtPmluZGV4LCBjdGUtPmdwaW9fdGFnKTsKKworCQkvKiBjaGVjayBmb3Iga25vd24gdHlwZXMsIGZhbGxiYWNrIHRvIGd1ZXNzaW5nIHRoZSB0eXBlCisJCSAqIGZyb20gYXR0YWNoZWQgZW5jb2RlcnMgaWYgd2UgaGl0IGFuIHVua25vd24uCisJCSAqLworCQlzd2l0Y2ggKGN0ZS0+dHlwZSkgeworCQljYXNlIERDQl9DT05ORUNUT1JfVkdBOgorCQljYXNlIERDQl9DT05ORUNUT1JfVFZfMDoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX1RWXzE6CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8zOgorCQljYXNlIERDQl9DT05ORUNUT1JfRFZJX0k6CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9EVklfRDoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX0xWRFM6CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9EUDoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX2VEUDoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX0hETUlfMDoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX0hETUlfMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3RlLT50eXBlID0gZGl2aW5lX2Nvbm5lY3Rvcl90eXBlKGJpb3MsIGN0ZS0+aW5kZXgpOworCQkJTlZfV0FSTihkZXYsICJ1bmtub3duIHR5cGUsIHVzaW5nIDB4JTAyeCIsIGN0ZS0+dHlwZSk7CisJCQlicmVhazsKKwkJfQorCiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGRjYl9lbnRyeSAqbmV3X2RjYl9lbnRyeShzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiKQorc3RhdGljIHN0cnVjdCBkY2JfZW50cnkgKm5ld19kY2JfZW50cnkoc3RydWN0IGRjYl90YWJsZSAqZGNiKQogewogCXN0cnVjdCBkY2JfZW50cnkgKmVudHJ5ID0gJmRjYi0+ZW50cnlbZGNiLT5lbnRyaWVzXTsKIApAQCAtNTI0MSw3ICs1MzA0LDcgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXN0YXRpYyB2b2lkIGZhYnJpY2F0ZV92Z2Ffb3V0cHV0KHN0cnVjdCBwYXJzZWRfZGNiICpkY2IsIGludCBpMmMsIGludCBoZWFkcykKK3N0YXRpYyB2b2lkIGZhYnJpY2F0ZV92Z2Ffb3V0cHV0KHN0cnVjdCBkY2JfdGFibGUgKmRjYiwgaW50IGkyYywgaW50IGhlYWRzKQogewogCXN0cnVjdCBkY2JfZW50cnkgKmVudHJ5ID0gbmV3X2RjYl9lbnRyeShkY2IpOwogCkBAIC01MjUyLDcgKzUzMTUsNyBAQAogCS8qICJvciIgbW9zdGx5IHVudXNlZCBpbiBlYXJseSBnZW4gY3J0IG1vZGVzZXR0aW5nLCAwIGlzIGZpbmUgKi8KIH0KIAotc3RhdGljIHZvaWQgZmFicmljYXRlX2R2aV9pX291dHB1dChzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiLCBib29sIHR3b0hlYWRzKQorc3RhdGljIHZvaWQgZmFicmljYXRlX2R2aV9pX291dHB1dChzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsIGJvb2wgdHdvSGVhZHMpCiB7CiAJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSBuZXdfZGNiX2VudHJ5KGRjYik7CiAKQEAgLTUyNzksNyArNTM0Miw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgZmFicmljYXRlX3R2X291dHB1dChzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiLCBib29sIHR3b0hlYWRzKQorc3RhdGljIHZvaWQgZmFicmljYXRlX3R2X291dHB1dChzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsIGJvb2wgdHdvSGVhZHMpCiB7CiAJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSBuZXdfZGNiX2VudHJ5KGRjYik7CiAKQEAgLTUyOTAsMTMgKzUzNTMsMTMgQEAKIH0KIAogc3RhdGljIGJvb2wKLXBhcnNlX2RjYjIwX2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBiaW9zX3BhcnNlZF9kY2IgKmJkY2IsCitwYXJzZV9kY2IyMF9lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsCiAJCSAgdWludDMyX3QgY29ubiwgdWludDMyX3QgY29uZiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpCiB7CiAJZW50cnktPnR5cGUgPSBjb25uICYgMHhmOwogCWVudHJ5LT5pMmNfaW5kZXggPSAoY29ubiA+PiA0KSAmIDB4ZjsKIAllbnRyeS0+aGVhZHMgPSAoY29ubiA+PiA4KSAmIDB4ZjsKLQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDQwKQorCWlmIChkY2ItPnZlcnNpb24gPj0gMHg0MCkKIAkJZW50cnktPmNvbm5lY3RvciA9IChjb25uID4+IDEyKSAmIDB4ZjsKIAllbnRyeS0+YnVzID0gKGNvbm4gPj4gMTYpICYgMHhmOwogCWVudHJ5LT5sb2NhdGlvbiA9IChjb25uID4+IDIwKSAmIDB4MzsKQEAgLTUzMTQsNyArNTM3Nyw3IEBACiAJCSAqIEFsdGhvdWdoIHRoZSByZXN0IG9mIGEgQ1JUIGNvbmYgZHdvcmQgaXMgdXN1YWxseQogCQkgKiB6ZXJvcywgbWFjIGJpb3NlbiBoYXZlIHN0dWZmIHRoZXJlIHNvIHdlIG11c3QgbWFzawogCQkgKi8KLQkJZW50cnktPmNydGNvbmYubWF4ZnJlcSA9IChiZGNiLT52ZXJzaW9uIDwgMHgzMCkgPworCQllbnRyeS0+Y3J0Y29uZi5tYXhmcmVxID0gKGRjYi0+dmVyc2lvbiA8IDB4MzApID8KIAkJCQkJIChjb25mICYgMHhmZmZmKSAqIDEwIDoKIAkJCQkJIChjb25mICYgMHhmZikgKiAxMDAwMDsKIAkJYnJlYWs7CkBAIC01MzIzLDcgKzUzODYsNyBAQAogCQl1aW50MzJfdCBtYXNrOwogCQlpZiAoY29uZiAmIDB4MSkKIAkJCWVudHJ5LT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlID0gdHJ1ZTsKLQkJaWYgKGJkY2ItPnZlcnNpb24gPCAweDIyKSB7CisJCWlmIChkY2ItPnZlcnNpb24gPCAweDIyKSB7CiAJCQltYXNrID0gfjB4ZDsKIAkJCS8qCiAJCQkgKiBUaGUgbGFwdG9wIGluIGJ1ZyAxNDU2NyBsaWVzIGFuZCBjbGFpbXMgdG8gbm90IHVzZQpAQCAtNTM0Nyw3ICs1NDEwLDcgQEAKIAkJCSAqIFVudGlsIHdlIGV2ZW4gdHJ5IHRvIHVzZSB0aGVzZSBvbiBHOHgsIGl0J3MKIAkJCSAqIHVzZWxlc3MgcmVwb3J0aW5nIHVua25vd24gYml0cy4gIFRoZXkgYWxsIGFyZS4KIAkJCSAqLwotCQkJaWYgKGJkY2ItPnZlcnNpb24gPj0gMHg0MCkKKwkJCWlmIChkY2ItPnZlcnNpb24gPj0gMHg0MCkKIAkJCQlicmVhazsKIAogCQkJTlZfRVJST1IoZGV2LCAiVW5rbm93biBMVkRTIGNvbmZpZ3VyYXRpb24gYml0cywgIgpAQCAtNTM1Nyw3ICs1NDIwLDcgQEAKIAkJfQogCWNhc2UgT1VUUFVUX1RWOgogCXsKLQkJaWYgKGJkY2ItPnZlcnNpb24gPj0gMHgzMCkKKwkJaWYgKGRjYi0+dmVyc2lvbiA+PSAweDMwKQogCQkJZW50cnktPnR2Y29uZi5oYXNfY29tcG9uZW50X291dHB1dCA9IGNvbmYgJiAoMHg4IDw8IDQpOwogCQllbHNlCiAJCQllbnRyeS0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0ID0gZmFsc2U7CkBAIC01Mzg0LDggKzU0NDcsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSAweGU6CiAJCS8qIHdlaXJkIGc4MCBtb2JpbGUgdHlwZSB0aGF0ICJudiIgdHJlYXRzIGFzIGEgdGVybWluYXRvciAqLwotCQliZGNiLT5kY2IuZW50cmllcy0tOworCQlkY2ItPmVudHJpZXMtLTsKIAkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qIHVuc3VyZSB3aGF0IERDQiB2ZXJzaW9uIGludHJvZHVjZXMgdGhpcywgMy4wPyAqLwpAQCAtNTM5Niw3ICs1NDYxLDcgQEAKIH0KIAogc3RhdGljIGJvb2wKLXBhcnNlX2RjYjE1X2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBwYXJzZWRfZGNiICpkY2IsCitwYXJzZV9kY2IxNV9lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsCiAJCSAgdWludDMyX3QgY29ubiwgdWludDMyX3QgY29uZiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpCiB7CiAJc3dpdGNoIChjb25uICYgMHgwMDAwMDAwZikgewpAQCAtNTQ2MiwyNyArNTUyNywyNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZV9kY2JfZW50cnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGJpb3NfcGFyc2VkX2RjYiAqYmRjYiwKK3N0YXRpYyBib29sIHBhcnNlX2RjYl9lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsCiAJCQkgICAgdWludDMyX3QgY29ubiwgdWludDMyX3QgY29uZikKIHsKLQlzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSA9IG5ld19kY2JfZW50cnkoJmJkY2ItPmRjYik7CisJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSBuZXdfZGNiX2VudHJ5KGRjYik7CiAJYm9vbCByZXQ7CiAKLQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDIwKQotCQlyZXQgPSBwYXJzZV9kY2IyMF9lbnRyeShkZXYsIGJkY2IsIGNvbm4sIGNvbmYsIGVudHJ5KTsKKwlpZiAoZGNiLT52ZXJzaW9uID49IDB4MjApCisJCXJldCA9IHBhcnNlX2RjYjIwX2VudHJ5KGRldiwgZGNiLCBjb25uLCBjb25mLCBlbnRyeSk7CiAJZWxzZQotCQlyZXQgPSBwYXJzZV9kY2IxNV9lbnRyeShkZXYsICZiZGNiLT5kY2IsIGNvbm4sIGNvbmYsIGVudHJ5KTsKKwkJcmV0ID0gcGFyc2VfZGNiMTVfZW50cnkoZGV2LCBkY2IsIGNvbm4sIGNvbmYsIGVudHJ5KTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJlYWRfZGNiX2kyY19lbnRyeShkZXYsIGJkY2ItPnZlcnNpb24sIGJkY2ItPmkyY190YWJsZSwKLQkJCSAgIGVudHJ5LT5pMmNfaW5kZXgsICZiZGNiLT5kY2IuaTJjW2VudHJ5LT5pMmNfaW5kZXhdKTsKKwlyZWFkX2RjYl9pMmNfZW50cnkoZGV2LCBkY2ItPnZlcnNpb24sIGRjYi0+aTJjX3RhYmxlLAorCQkJICAgZW50cnktPmkyY19pbmRleCwgJmRjYi0+aTJjW2VudHJ5LT5pMmNfaW5kZXhdKTsKIAogCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMKLXZvaWQgbWVyZ2VfbGlrZV9kY2JfZW50cmllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiKQordm9pZCBtZXJnZV9saWtlX2RjYl9lbnRyaWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfdGFibGUgKmRjYikKIHsKIAkvKgogCSAqIERDQiB2Mi4wIGxpc3RzIGVhY2ggb3V0cHV0IGNvbWJpbmF0aW9uIHNlcGFyYXRlbHkuCkBAIC01NTM0LDggKzU1OTksNyBAQAogcGFyc2VfZGNiX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBudmJpb3MgKmJpb3MsIGJvb2wgdHdvSGVhZHMpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgYmlvc19wYXJzZWRfZGNiICpiZGNiID0gJmJpb3MtPmJkY2I7Ci0Jc3RydWN0IHBhcnNlZF9kY2IgKmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmYmlvcy0+ZGNiOwogCXVpbnQxNl90IGRjYnB0ciA9IDAsIGkyY3RhYnB0ciA9IDA7CiAJdWludDhfdCAqZGNidGFibGU7CiAJdWludDhfdCBoZWFkZXJsZW4gPSAweDQsIGVudHJpZXMgPSBEQ0JfTUFYX05VTV9FTlRSSUVTOwpAQCAtNTU0Myw5ICs1NjA3LDYgQEAKIAlpbnQgcmVjb3JkbGVuZ3RoID0gOCwgY29uZm9mcyA9IDQ7CiAJaW50IGk7CiAKLQlkY2IgPSBiaW9zLT5wdWIuZGNiID0gJmJkY2ItPmRjYjsKLQlkY2ItPmVudHJpZXMgPSAwOwotCiAJLyogZ2V0IHRoZSBvZmZzZXQgZnJvbSAweDM2ICovCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPiBOVl8wNCkgewogCQlkY2JwdHIgPSBST00xNihiaW9zLT5kYXRhWzB4MzZdKTsKQEAgLTU1NjcsMjEgKzU2MjgsMjEgQEAKIAlkY2J0YWJsZSA9ICZiaW9zLT5kYXRhW2RjYnB0cl07CiAKIAkvKiBnZXQgRENCIHZlcnNpb24gKi8KLQliZGNiLT52ZXJzaW9uID0gZGNidGFibGVbMF07CisJZGNiLT52ZXJzaW9uID0gZGNidGFibGVbMF07CiAJTlZfVFJBQ0UoZGV2LCAiRm91bmQgRGlzcGxheSBDb25maWd1cmF0aW9uIEJsb2NrIHZlcnNpb24gJWQuJWRcbiIsCi0JCSBiZGNiLT52ZXJzaW9uID4+IDQsIGJkY2ItPnZlcnNpb24gJiAweGYpOworCQkgZGNiLT52ZXJzaW9uID4+IDQsIGRjYi0+dmVyc2lvbiAmIDB4Zik7CiAKLQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDIwKSB7IC8qIE5WMTcrICovCisJaWYgKGRjYi0+dmVyc2lvbiA+PSAweDIwKSB7IC8qIE5WMTcrICovCiAJCXVpbnQzMl90IHNpZzsKIAotCQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDMwKSB7IC8qIE5WNDArICovCisJCWlmIChkY2ItPnZlcnNpb24gPj0gMHgzMCkgeyAvKiBOVjQwKyAqLwogCQkJaGVhZGVybGVuID0gZGNidGFibGVbMV07CiAJCQllbnRyaWVzID0gZGNidGFibGVbMl07CiAJCQlyZWNvcmRsZW5ndGggPSBkY2J0YWJsZVszXTsKIAkJCWkyY3RhYnB0ciA9IFJPTTE2KGRjYnRhYmxlWzRdKTsKIAkJCXNpZyA9IFJPTTMyKGRjYnRhYmxlWzZdKTsKLQkJCWJkY2ItPmdwaW9fdGFibGVfcHRyID0gUk9NMTYoZGNidGFibGVbMTBdKTsKLQkJCWJkY2ItPmNvbm5lY3Rvcl90YWJsZV9wdHIgPSBST00xNihkY2J0YWJsZVsyMF0pOworCQkJZGNiLT5ncGlvX3RhYmxlX3B0ciA9IFJPTTE2KGRjYnRhYmxlWzEwXSk7CisJCQlkY2ItPmNvbm5lY3Rvcl90YWJsZV9wdHIgPSBST00xNihkY2J0YWJsZVsyMF0pOwogCQl9IGVsc2UgewogCQkJaTJjdGFicHRyID0gUk9NMTYoZGNidGFibGVbMl0pOwogCQkJc2lnID0gUk9NMzIoZGNidGFibGVbNF0pOwpAQCAtNTU5Myw3ICs1NjU0LDcgQEAKIAkJCQkJInNpZ25hdHVyZSAoJTA4WClcbiIsIHNpZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSBpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDE1KSB7IC8qIHNvbWUgTlYxMSBhbmQgTlYyMCAqLworCX0gZWxzZSBpZiAoZGNiLT52ZXJzaW9uID49IDB4MTUpIHsgLyogc29tZSBOVjExIGFuZCBOVjIwICovCiAJCWNoYXIgc2lnWzhdID0geyAwIH07CiAKIAkJc3RybmNweShzaWcsIChjaGFyICopJmRjYnRhYmxlWy03XSwgNyk7CkBAIC01NjQxLDE0ICs1NzAyLDExIEBACiAJaWYgKCFpMmN0YWJwdHIpCiAJCU5WX1dBUk4oZGV2LCAiTm8gcG9pbnRlciB0byBEQ0IgSTJDIHBvcnQgdGFibGVcbiIpOwogCWVsc2UgewotCQliZGNiLT5pMmNfdGFibGUgPSAmYmlvcy0+ZGF0YVtpMmN0YWJwdHJdOwotCQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDMwKQotCQkJYmRjYi0+aTJjX2RlZmF1bHRfaW5kaWNlcyA9IGJkY2ItPmkyY190YWJsZVs0XTsKKwkJZGNiLT5pMmNfdGFibGUgPSAmYmlvcy0+ZGF0YVtpMmN0YWJwdHJdOworCQlpZiAoZGNiLT52ZXJzaW9uID49IDB4MzApCisJCQlkY2ItPmkyY19kZWZhdWx0X2luZGljZXMgPSBkY2ItPmkyY190YWJsZVs0XTsKIAl9CiAKLQlwYXJzZV9kY2JfZ3Bpb190YWJsZShiaW9zKTsKLQlwYXJzZV9kY2JfY29ubmVjdG9yX3RhYmxlKGJpb3MpOwotCiAJaWYgKGVudHJpZXMgPiBEQ0JfTUFYX05VTV9FTlRSSUVTKQogCQllbnRyaWVzID0gRENCX01BWF9OVU1fRU5UUklFUzsKIApAQCAtNTY3Myw3ICs1NzMxLDcgQEAKIAkJTlZfVFJBQ0VXQVJOKGRldiwgIlJhdyBEQ0IgZW50cnkgJWQ6ICUwOHggJTA4eFxuIiwKIAkJCSAgICAgZGNiLT5lbnRyaWVzLCBjb25uZWN0aW9uLCBjb25maWcpOwogCi0JCWlmICghcGFyc2VfZGNiX2VudHJ5KGRldiwgYmRjYiwgY29ubmVjdGlvbiwgY29uZmlnKSkKKwkJaWYgKCFwYXJzZV9kY2JfZW50cnkoZGV2LCBkY2IsIGNvbm5lY3Rpb24sIGNvbmZpZykpCiAJCQlicmVhazsKIAl9CiAKQEAgLTU2ODEsMTggKzU3MzksMjIgQEAKIAkgKiBhcGFydCBmb3IgdjIuMSsgbm90IGJlaW5nIGtub3duIGZvciByZXF1aXJpbmcgbWVyZ2luZywgdGhpcwogCSAqIGd1YXJhbnRlZXMgZGNiZW50LT5pbmRleCBpcyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSByb20gaW1hZ2UKIAkgKi8KLQlpZiAoYmRjYi0+dmVyc2lvbiA8IDB4MjEpCisJaWYgKGRjYi0+dmVyc2lvbiA8IDB4MjEpCiAJCW1lcmdlX2xpa2VfZGNiX2VudHJpZXMoZGV2LCBkY2IpOwogCi0JcmV0dXJuIGRjYi0+ZW50cmllcyA/IDAgOiAtRU5YSU87CisJaWYgKCFkY2ItPmVudHJpZXMpCisJCXJldHVybiAtRU5YSU87CisKKwlwYXJzZV9kY2JfZ3Bpb190YWJsZShiaW9zKTsKKwlwYXJzZV9kY2JfY29ubmVjdG9yX3RhYmxlKGJpb3MpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAogZml4dXBfbGVnYWN5X2Nvbm5lY3RvcihzdHJ1Y3QgbnZiaW9zICpiaW9zKQogewotCXN0cnVjdCBiaW9zX3BhcnNlZF9kY2IgKmJkY2IgPSAmYmlvcy0+YmRjYjsKLQlzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiID0gJmJkY2ItPmRjYjsKLQlpbnQgaGlnaCA9IDAsIGk7CisJc3RydWN0IGRjYl90YWJsZSAqZGNiID0gJmJpb3MtPmRjYjsKKwlpbnQgaSwgaTJjLCBpMmNfY29ubltEQ0JfTUFYX05VTV9JMkNfRU5UUklFU10gPSB7IH07CiAKIAkvKgogCSAqIERDQiAzLjAgYWxzbyBoYXMgdGhlIHRhYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCB0aGVyZSBhcmUgc29tZSBjYXJkcwpAQCAtNTcwMCw5ICs1NzYyLDExIEBACiAJICogaW5kaWNlcyBhcmUgYWxsIDAuICBXZSBkb24ndCBuZWVkIHRoZSBjb25uZWN0b3IgaW5kaWNlcyBvbiBwcmUtRzgwCiAJICogY2hpcHMgKHlldD8pIHNvIGxpbWl0IHRoZSB1c2UgdG8gRENCIDQuMCBhbmQgYWJvdmUuCiAJICovCi0JaWYgKGJkY2ItPnZlcnNpb24gPj0gMHg0MCkKKwlpZiAoZGNiLT52ZXJzaW9uID49IDB4NDApCiAJCXJldHVybjsKIAorCWRjYi0+Y29ubmVjdG9yLmVudHJpZXMgPSAwOworCiAJLyoKIAkgKiBObyBrbm93biBjb25uZWN0b3IgaW5mbyBiZWZvcmUgdjMuMCwgc28gbWFrZSBpdCB1cC4gIHRoZSBydWxlIGhlcmUKIAkgKiBpczogYW55dGhpbmcgb24gdGhlIHNhbWUgaTJjIGJ1cyBpcyBjb25zaWRlcmVkIHRvIGJlIG9uIHRoZSBzYW1lCkBAIC01NzEwLDM3ICs1Nzc0LDM4IEBACiAJICogaXRzIG93biB1bmlxdWUgY29ubmVjdG9yIGluZGV4LgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkY2ItPmVudHJpZXM7IGkrKykgewotCQlpZiAoZGNiLT5lbnRyeVtpXS5pMmNfaW5kZXggPT0gMHhmKQotCQkJY29udGludWU7Ci0KIAkJLyoKIAkJICogSWdub3JlIHRoZSBJMkMgaW5kZXggZm9yIG9uLWNoaXAgVFYtb3V0LCBhcyB0aGVyZQogCQkgKiBhcmUgY2FyZHMgd2l0aCBib2d1cyB2YWx1ZXMgKG52MzFtIGluIGJ1ZyAyMzIxMiksCiAJCSAqIGFuZCBpdCdzIG90aGVyd2lzZSB1c2VsZXNzLgogCQkgKi8KIAkJaWYgKGRjYi0+ZW50cnlbaV0udHlwZSA9PSBPVVRQVVRfVFYgJiYKLQkJICAgIGRjYi0+ZW50cnlbaV0ubG9jYXRpb24gPT0gRENCX0xPQ19PTl9DSElQKSB7CisJCSAgICBkY2ItPmVudHJ5W2ldLmxvY2F0aW9uID09IERDQl9MT0NfT05fQ0hJUCkKIAkJCWRjYi0+ZW50cnlbaV0uaTJjX2luZGV4ID0gMHhmOworCQlpMmMgPSBkY2ItPmVudHJ5W2ldLmkyY19pbmRleDsKKworCQlpZiAoaTJjX2Nvbm5baTJjXSkgeworCQkJZGNiLT5lbnRyeVtpXS5jb25uZWN0b3IgPSBpMmNfY29ubltpMmNdIC0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZGNiLT5lbnRyeVtpXS5jb25uZWN0b3IgPSBkY2ItPmVudHJ5W2ldLmkyY19pbmRleDsKLQkJaWYgKGRjYi0+ZW50cnlbaV0uY29ubmVjdG9yID4gaGlnaCkKLQkJCWhpZ2ggPSBkY2ItPmVudHJ5W2ldLmNvbm5lY3RvcjsKKwkJZGNiLT5lbnRyeVtpXS5jb25uZWN0b3IgPSBkY2ItPmNvbm5lY3Rvci5lbnRyaWVzKys7CisJCWlmIChpMmMgIT0gMHhmKQorCQkJaTJjX2Nvbm5baTJjXSA9IGRjYi0+Y29ubmVjdG9yLmVudHJpZXM7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGRjYi0+ZW50cmllczsgaSsrKSB7Ci0JCWlmIChkY2ItPmVudHJ5W2ldLmkyY19pbmRleCAhPSAweGYpCi0JCQljb250aW51ZTsKLQotCQlkY2ItPmVudHJ5W2ldLmNvbm5lY3RvciA9ICsraGlnaDsKKwkvKiBGYWtlIHRoZSBjb25uZWN0b3IgdGFibGUgYXMgd2VsbCBhcyBqdXN0IGNvbm5lY3RvciBpbmRpY2VzICovCisJZm9yIChpID0gMDsgaSA8IGRjYi0+Y29ubmVjdG9yLmVudHJpZXM7IGkrKykgeworCQlkY2ItPmNvbm5lY3Rvci5lbnRyeVtpXS5pbmRleCA9IGk7CisJCWRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldLnR5cGUgPSBkaXZpbmVfY29ubmVjdG9yX3R5cGUoYmlvcywgaSk7CisJCWRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldLmdwaW9fdGFnID0gMHhmZjsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkCiBmaXh1cF9sZWdhY3lfaTJjKHN0cnVjdCBudmJpb3MgKmJpb3MpCiB7Ci0Jc3RydWN0IHBhcnNlZF9kY2IgKmRjYiA9ICZiaW9zLT5iZGNiLmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmYmlvcy0+ZGNiOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRjYi0+ZW50cmllczsgaSsrKSB7CkBAIC01ODI2LDcgKzU4OTEsNyBAQAogdWludDhfdCAqbm91dmVhdV9iaW9zX2VtYmVkZGVkX2VkaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCWNvbnN0IHVpbnQ4X3QgZWRpZF9zaWdbXSA9IHsKIAkJCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfTsKIAl1aW50MTZfdCBvZmZzZXQgPSAwOwpAQCAtNTg1OSw3ICs1OTI0LDcgQEAKIAkJCSAgICBzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlzdHJ1Y3QgaW5pdF9leGVjIGlleGVjID0geyB0cnVlLCBmYWxzZSB9OwogCiAJbXV0ZXhfbG9jaygmYmlvcy0+bG9jayk7CkBAIC01ODcyLDcgKzU5MzcsNyBAQAogc3RhdGljIGJvb2wgTlZJbml0VkJJT1Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCiAJbWVtc2V0KGJpb3MsIDAsIHNpemVvZihzdHJ1Y3QgbnZiaW9zKSk7CiAJbXV0ZXhfaW5pdCgmYmlvcy0+bG9jayk7CkBAIC01ODg4LDcgKzU5NTMsNyBAQAogc3RhdGljIGludCBub3V2ZWF1X3BhcnNlX3ZiaW9zX3N0cnVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJY29uc3QgdWludDhfdCBiaXRfc2lnbmF0dXJlW10gPSB7IDB4ZmYsIDB4YjgsICdCJywgJ0knLCAnVCcgfTsKIAljb25zdCB1aW50OF90IGJtcF9zaWduYXR1cmVbXSA9IHsgMHhmZiwgMHg3ZiwgJ04nLCAnVicsIDB4MCB9OwogCWludCBvZmZzZXQ7CkBAIC01OTE1LDcgKzU5ODAsNyBAQAogbm91dmVhdV9ydW5fdmJpb3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJaW50IGksIHJldCA9IDA7CiAKIAlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKQEAgLTU5NDYsOSArNjAxMSw5IEBACiAJfQogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKLQkJZm9yIChpID0gMDsgaSA8IGJpb3MtPmJkY2IuZGNiLmVudHJpZXM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgYmlvcy0+ZGNiLmVudHJpZXM7IGkrKykgewogCQkJbm91dmVhdV9iaW9zX3J1bl9kaXNwbGF5X3RhYmxlKGRldiwKLQkJCQkJCSAgICAgICAmYmlvcy0+YmRjYi5kY2IuZW50cnlbaV0sCisJCQkJCQkgICAgICAgJmJpb3MtPmRjYi5lbnRyeVtpXSwKIAkJCQkJCSAgICAgICAwLCAwKTsKIAkJfQogCX0KQEAgLTU5NjIsMTEgKzYwMjcsMTEgQEAKIG5vdXZlYXVfYmlvc19pMmNfZGV2aWNlc190YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJc3RydWN0IGRjYl9pMmNfZW50cnkgKmVudHJ5OwogCWludCBpOwogCi0JZW50cnkgPSAmYmlvcy0+YmRjYi5kY2IuaTJjWzBdOworCWVudHJ5ID0gJmJpb3MtPmRjYi5pMmNbMF07CiAJZm9yIChpID0gMDsgaSA8IERDQl9NQVhfTlVNX0kyQ19FTlRSSUVTOyBpKyssIGVudHJ5KyspCiAJCW5vdXZlYXVfaTJjX2ZpbmkoZGV2LCBlbnRyeSk7CiB9CkBAIC01OTc1LDEzICs2MDQwLDExIEBACiBub3V2ZWF1X2Jpb3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDMyX3Qgc2F2ZWRfbnZfcGV4dGRldl9ib290XzA7CiAJYm9vbCB3YXNfbG9ja2VkOwogCWludCByZXQ7CiAKLQlkZXZfcHJpdi0+dmJpb3MgPSAmYmlvcy0+cHViOwotCiAJaWYgKCFOVkluaXRWQklPUyhkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjAyMywxMCArNjA4Niw4IEBACiAJYmlvc193cjMyKGJpb3MsIE5WX1BFWFRERVZfQk9PVF8wLCBzYXZlZF9udl9wZXh0ZGV2X2Jvb3RfMCk7CiAKIAlyZXQgPSBub3V2ZWF1X3J1bl92Ymlvc19pbml0KGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfcHJpdi0+dmJpb3MgPSBOVUxMOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JfQogCiAJLyogZmVhdHVyZV9ieXRlIG9uIEJNUCBpcyBwb29yLCBidXQgaW5pdCBhbHdheXMgc2V0cyBDUjRCICovCiAJd2FzX2xvY2tlZCA9IE5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaAppbmRleCBmZDk0YmQ2Li45ZjY4OGFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKQEAgLTM0LDkgKzM0LDY3IEBACiAKICNkZWZpbmUgRENCX0xPQ19PTl9DSElQIDAKIAorc3RydWN0IGRjYl9pMmNfZW50cnkgeworCXVpbnQ4X3QgcG9ydF90eXBlOworCXVpbnQ4X3QgcmVhZCwgd3JpdGU7CisJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmNoYW47Cit9OworCitlbnVtIGRjYl9ncGlvX3RhZyB7CisJRENCX0dQSU9fVFZEQUMwID0gMHhjLAorCURDQl9HUElPX1RWREFDMSA9IDB4MmQsCit9OworCitzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgeworCWVudW0gZGNiX2dwaW9fdGFnIHRhZzsKKwlpbnQgbGluZTsKKwlib29sIGludmVydDsKK307CisKK3N0cnVjdCBkY2JfZ3Bpb190YWJsZSB7CisJaW50IGVudHJpZXM7CisJc3RydWN0IGRjYl9ncGlvX2VudHJ5IGVudHJ5W0RDQl9NQVhfTlVNX0dQSU9fRU5UUklFU107Cit9OworCitlbnVtIGRjYl9jb25uZWN0b3JfdHlwZSB7CisJRENCX0NPTk5FQ1RPUl9WR0EgPSAweDAwLAorCURDQl9DT05ORUNUT1JfVFZfMCA9IDB4MTAsCisJRENCX0NPTk5FQ1RPUl9UVl8xID0gMHgxMSwKKwlEQ0JfQ09OTkVDVE9SX1RWXzMgPSAweDEzLAorCURDQl9DT05ORUNUT1JfRFZJX0kgPSAweDMwLAorCURDQl9DT05ORUNUT1JfRFZJX0QgPSAweDMxLAorCURDQl9DT05ORUNUT1JfTFZEUyA9IDB4NDAsCisJRENCX0NPTk5FQ1RPUl9EUCA9IDB4NDYsCisJRENCX0NPTk5FQ1RPUl9lRFAgPSAweDQ3LAorCURDQl9DT05ORUNUT1JfSERNSV8wID0gMHg2MCwKKwlEQ0JfQ09OTkVDVE9SX0hETUlfMSA9IDB4NjEsCisJRENCX0NPTk5FQ1RPUl9OT05FID0gMHhmZgorfTsKKworc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgeworCXVpbnQzMl90IGVudHJ5OworCWVudW0gZGNiX2Nvbm5lY3Rvcl90eXBlIHR5cGU7CisJdWludDhfdCBpbmRleDsKKwl1aW50OF90IGdwaW9fdGFnOworfTsKKworc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGUgeworCWludCBlbnRyaWVzOworCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5IGVudHJ5W0RDQl9NQVhfTlVNX0NPTk5FQ1RPUl9FTlRSSUVTXTsKK307CisKK2VudW0gZGNiX3R5cGUgeworCU9VVFBVVF9BTkFMT0cgPSAwLAorCU9VVFBVVF9UViA9IDEsCisJT1VUUFVUX1RNRFMgPSAyLAorCU9VVFBVVF9MVkRTID0gMywKKwlPVVRQVVRfRFAgPSA2LAorCU9VVFBVVF9BTlkgPSAtMQorfTsKKwogc3RydWN0IGRjYl9lbnRyeSB7CiAJaW50IGluZGV4OwkvKiBtYXkgbm90IGJlIHJhdyBkY2IgaW5kZXggaWYgbWVyZ2luZyBoYXMgaGFwcGVuZWQgKi8KLQl1aW50OF90IHR5cGU7CisJZW51bSBkY2JfdHlwZSB0eXBlOwogCXVpbnQ4X3QgaTJjX2luZGV4OwogCXVpbnQ4X3QgaGVhZHM7CiAJdWludDhfdCBjb25uZWN0b3I7CkBAIC03MSw2OSArMTI5LDIyIEBACiAJYm9vbCBpMmNfdXBwZXJfZGVmYXVsdDsKIH07CiAKLXN0cnVjdCBkY2JfaTJjX2VudHJ5IHsKLQl1aW50OF90IHBvcnRfdHlwZTsKLQl1aW50OF90IHJlYWQsIHdyaXRlOwotCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwotfTsKLQotc3RydWN0IHBhcnNlZF9kY2IgewotCWludCBlbnRyaWVzOwotCXN0cnVjdCBkY2JfZW50cnkgZW50cnlbRENCX01BWF9OVU1fRU5UUklFU107Ci0Jc3RydWN0IGRjYl9pMmNfZW50cnkgaTJjW0RDQl9NQVhfTlVNX0kyQ19FTlRSSUVTXTsKLX07Ci0KLWVudW0gZGNiX2dwaW9fdGFnIHsKLQlEQ0JfR1BJT19UVkRBQzAgPSAweGMsCi0JRENCX0dQSU9fVFZEQUMxID0gMHgyZCwKLX07Ci0KLXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSB7Ci0JZW51bSBkY2JfZ3Bpb190YWcgdGFnOwotCWludCBsaW5lOwotCWJvb2wgaW52ZXJ0OwotfTsKLQotc3RydWN0IHBhcnNlZF9kY2JfZ3BpbyB7Ci0JaW50IGVudHJpZXM7Ci0Jc3RydWN0IGRjYl9ncGlvX2VudHJ5IGVudHJ5W0RDQl9NQVhfTlVNX0dQSU9fRU5UUklFU107Ci19OwotCi1zdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSB7Ci0JdWludDMyX3QgZW50cnk7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQ4X3QgaW5kZXg7Ci0JdWludDhfdCBncGlvX3RhZzsKLX07Ci0KLXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlIHsKLQlpbnQgZW50cmllczsKLQlzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSBlbnRyeVtEQ0JfTUFYX05VTV9DT05ORUNUT1JfRU5UUklFU107Ci19OwotCi1zdHJ1Y3QgYmlvc19wYXJzZWRfZGNiIHsKK3N0cnVjdCBkY2JfdGFibGUgewogCXVpbnQ4X3QgdmVyc2lvbjsKIAotCXN0cnVjdCBwYXJzZWRfZGNiIGRjYjsKKwlpbnQgZW50cmllczsKKwlzdHJ1Y3QgZGNiX2VudHJ5IGVudHJ5W0RDQl9NQVhfTlVNX0VOVFJJRVNdOwogCiAJdWludDhfdCAqaTJjX3RhYmxlOwogCXVpbnQ4X3QgaTJjX2RlZmF1bHRfaW5kaWNlczsKKwlzdHJ1Y3QgZGNiX2kyY19lbnRyeSBpMmNbRENCX01BWF9OVU1fSTJDX0VOVFJJRVNdOwogCiAJdWludDE2X3QgZ3Bpb190YWJsZV9wdHI7Ci0Jc3RydWN0IHBhcnNlZF9kY2JfZ3BpbyBncGlvOworCXN0cnVjdCBkY2JfZ3Bpb190YWJsZSBncGlvOwogCXVpbnQxNl90IGNvbm5lY3Rvcl90YWJsZV9wdHI7CiAJc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGUgY29ubmVjdG9yOwogfTsKIAotZW51bSBub3V2ZWF1X2VuY29kZXJfdHlwZSB7Ci0JT1VUUFVUX0FOQUxPRyA9IDAsCi0JT1VUUFVUX1RWID0gMSwKLQlPVVRQVVRfVE1EUyA9IDIsCi0JT1VUUFVUX0xWRFMgPSAzLAotCU9VVFBVVF9EUCA9IDYsCi0JT1VUUFVUX0FOWSA9IC0xCi19OwotCiBlbnVtIG5vdXZlYXVfb3IgewogCU9VVFBVVF9BID0gKDEgPDwgMCksCiAJT1VUUFVUX0IgPSAoMSA8PCAxKSwKQEAgLTE5MCw4ICsyMDEsOCBAQAogCWludCByZWZjbGs7CiB9OwogCi1zdHJ1Y3Qgbm91dmVhdV9iaW9zX2luZm8gewotCXN0cnVjdCBwYXJzZWRfZGNiICpkY2I7CitzdHJ1Y3QgbnZiaW9zIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCiAJdWludDhfdCBjaGlwX3ZlcnNpb247CiAKQEAgLTE5OSwxMSArMjEwLDYgQEAKIAl1aW50MzJfdCB0dmRhY3Rlc3R2YWw7CiAJdWludDhfdCBkaWdpdGFsX21pbl9mcm9udF9wb3JjaDsKIAlib29sIGZwX25vX2RkYzsKLX07Ci0KLXN0cnVjdCBudmJpb3MgewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5vdXZlYXVfYmlvc19pbmZvIHB1YjsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwogCkBAIC0yMzQsNyArMjQwLDcgQEAKIAl1aW50MTZfdCBzb21lX3NjcmlwdF9wdHI7IC8qIEJJVCBJICsgMTQgKi8KIAl1aW50MTZfdCBpbml0OTZfdGJsX3B0cjsgLyogQklUIEkgKyAxNiAqLwogCi0Jc3RydWN0IGJpb3NfcGFyc2VkX2RjYiBiZGNiOworCXN0cnVjdCBkY2JfdGFibGUgZGNiOwogCiAJc3RydWN0IHsKIAkJaW50IGNydGNoZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NhbGMuYwppbmRleCBlZTJiODQ1Li44OGY5YmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NhbGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NhbGMuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJICogcmV0dXJucyBjYWxjdWxhdGVkIGNsb2NrCiAJICovCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgY3YgPSBkZXZfcHJpdi0+dmJpb3MtPmNoaXBfdmVyc2lvbjsKKwlpbnQgY3YgPSBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uOwogCWludCBtaW52Y28gPSBwbGxfbGltLT52Y28xLm1pbmZyZXEsIG1heHZjbyA9IHBsbF9saW0tPnZjbzEubWF4ZnJlcTsKIAlpbnQgbWluTSA9IHBsbF9saW0tPnZjbzEubWluX20sIG1heE0gPSBwbGxfbGltLT52Y28xLm1heF9tOwogCWludCBtaW5OID0gcGxsX2xpbS0+dmNvMS5taW5fbiwgbWF4TiA9IHBsbF9saW0tPnZjbzEubWF4X247CkBAIC0zNzMsNyArMzczLDcgQEAKIAkgKiByZXR1cm5zIGNhbGN1bGF0ZWQgY2xvY2sKIAkgKi8KIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBjaGlwX3ZlcnNpb24gPSBkZXZfcHJpdi0+dmJpb3MtPmNoaXBfdmVyc2lvbjsKKwlpbnQgY2hpcF92ZXJzaW9uID0gZGV2X3ByaXYtPnZiaW9zLmNoaXBfdmVyc2lvbjsKIAlpbnQgbWludmNvMSA9IHBsbF9saW0tPnZjbzEubWluZnJlcSwgbWF4dmNvMSA9IHBsbF9saW0tPnZjbzEubWF4ZnJlcTsKIAlpbnQgbWludmNvMiA9IHBsbF9saW0tPnZjbzIubWluZnJlcSwgbWF4dmNvMiA9IHBsbF9saW0tPnZjbzIubWF4ZnJlcTsKIAlpbnQgbWluVTEgPSBwbGxfbGltLT52Y28xLm1pbl9pbnB1dGZyZXEsIG1pblUyID0gcGxsX2xpbS0+dmNvMi5taW5faW5wdXRmcmVxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwppbmRleCAyMjgxZjk5Li42ZGZiNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwpAQCAtMzUsMjIgKzM1LDI3IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqcGIgPSBjaGFuLT5wdXNoYnVmX2JvOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHVzaGJ1ZiA9IE5VTEw7Ci0JdWludDMyX3Qgc3RhcnQgPSBwYi0+Ym8ubWVtLm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKIAorCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwgMCwKKwkJCQkJICAgICBkZXZfcHJpdi0+dm1fZW5kLCBOVl9ETUFfQUNDRVNTX1JPLAorCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfQUdQLCAmcHVzaGJ1Zik7CisJCWNoYW4tPnB1c2hidWZfYmFzZSA9IHBiLT5iby5vZmZzZXQ7CisJfSBlbHNlCiAJaWYgKHBiLT5iby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BMX1RUKSB7CiAJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dhcnRfZG1hX25ldyhjaGFuLCAwLAogCQkJCQkJICBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKIAkJCQkJCSAgTlZfRE1BX0FDQ0VTU19STywgJnB1c2hidWYsCiAJCQkJCQkgIE5VTEwpOwotCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBzdGFydDsKKwkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm1lbS5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwogCX0gZWxzZQogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlICE9IE5WXzA0KSB7CiAJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwgMCwKIAkJCQkJICAgICBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUsCiAJCQkJCSAgICAgTlZfRE1BX0FDQ0VTU19STywKIAkJCQkJICAgICBOVl9ETUFfVEFSR0VUX1ZJRE1FTSwgJnB1c2hidWYpOwotCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBzdGFydDsKKwkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm1lbS5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwogCX0gZWxzZSB7CiAJCS8qIE5WMDQgY21kYnVmIGhhY2ssIGZyb20gb3JpZ2luYWwgZGR4Li4gbm90IHN1cmUgb2YgaXQncwogCQkgKiBleGFjdCByZWFzb24gZm9yIGV4aXN0aW5nIDopICBQQ0kgYWNjZXNzIHRvIGNtZGJ1ZiBpbgpAQCAtNjEsNyArNjYsNyBAQAogCQkJCQkgICAgIGRldl9wcml2LT5mYl9hdmFpbGFibGVfc2l6ZSwKIAkJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JPLAogCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfUENJLCAmcHVzaGJ1Zik7Ci0JCWNoYW4tPnB1c2hidWZfYmFzZSA9IHN0YXJ0OworCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBwYi0+Ym8ubWVtLm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJfQogCiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfcmVmX2FkZChkZXYsIGNoYW4sIDAsIHB1c2hidWYsICZjaGFuLT5wdXNoYnVmKTsKQEAgLTI3NSw5ICsyODAsMTggQEAKIAkgKi8KIAlub3V2ZWF1X2ZlbmNlX2ZpbmkoY2hhbik7CiAKLQkvKiBFbnN1cmUgdGhlIGNoYW5uZWwgaXMgbm8gbG9uZ2VyIGFjdGl2ZSBvbiB0aGUgR1BVICovCisJLyogVGhpcyB3aWxsIHByZXZlbnQgcGZpZm8gZnJvbSBzd2l0Y2hpbmcgY2hhbm5lbHMuICovCiAJcGZpZm8tPnJlYXNzaWduKGRldiwgZmFsc2UpOwogCisJLyogV2Ugd2FudCB0byBnaXZlIHBncmFwaCBhIGNoYW5jZSB0byBpZGxlIGFuZCBnZXQgcmlkIG9mIGFsbCBwb3RlbnRpYWwKKwkgKiBlcnJvcnMuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIGxvY2ssIG90aGVyd2lzZSB0aGUgaXJxIGhhbmRsZXIKKwkgKiBpcyB1bmFibGUgdG8gcHJvY2VzcyB0aGVtLgorCSAqLworCWlmIChwZ3JhcGgtPmNoYW5uZWwoZGV2KSA9PSBjaGFuKQorCQlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKIAkJcGdyYXBoLT51bmxvYWRfY29udGV4dChkZXYpOwpAQCAtMjkzLDYgKzMwNyw4IEBACiAKIAlwZmlmby0+cmVhc3NpZ24oZGV2LCB0cnVlKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAkvKiBSZWxlYXNlIHRoZSBjaGFubmVsJ3MgcmVzb3VyY2VzICovCiAJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT5wdXNoYnVmKTsKIAlpZiAoY2hhbi0+cHVzaGJ1Zl9ibykgewpAQCAtMzY5LDYgKzM4NSwxNCBAQAogCQlyZXR1cm4gcmV0OwogCWluaXQtPmNoYW5uZWwgID0gY2hhbi0+aWQ7CiAKKwlpZiAoY2hhbi0+ZG1hLmliX21heCkKKwkJaW5pdC0+cHVzaGJ1Zl9kb21haW5zID0gTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU0gfAorCQkJCQlOT1VWRUFVX0dFTV9ET01BSU5fR0FSVDsKKwllbHNlIGlmIChjaGFuLT5wdXNoYnVmX2JvLT5iby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BMX1ZSQU0pCisJCWluaXQtPnB1c2hidWZfZG9tYWlucyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNOworCWVsc2UKKwkJaW5pdC0+cHVzaGJ1Zl9kb21haW5zID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisKIAlpbml0LT5zdWJjaGFuWzBdLmhhbmRsZSA9IE52TTJNRjsKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKQogCQlpbml0LT5zdWJjaGFuWzBdLmdyY2xhc3MgPSAweDAwMzk7CkBAIC00MDgsNyArNDMyLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGRybV9pb2N0bF9kZXNjIG5vdXZlYXVfaW9jdGxzW10gPSB7Ci0JRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9DQVJEX0lOSVQsIG5vdXZlYXVfaW9jdGxfY2FyZF9pbml0LCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRVRQQVJBTSwgbm91dmVhdV9pb2N0bF9nZXRwYXJhbSwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfU0VUUEFSQU0sIG5vdXZlYXVfaW9jdGxfc2V0cGFyYW0sIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9DSEFOTkVMX0FMTE9DLCBub3V2ZWF1X2lvY3RsX2ZpZm9fYWxsb2MsIERSTV9BVVRIKSwKQEAgLTQxOCwxMyArNDQxLDkgQEAKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dQVU9CSl9GUkVFLCBub3V2ZWF1X2lvY3RsX2dwdW9ial9mcmVlLCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRU1fTkVXLCBub3V2ZWF1X2dlbV9pb2N0bF9uZXcsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGLCBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRU1fUFVTSEJVRl9DQUxMLCBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmX2NhbGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9QSU4sIG5vdXZlYXVfZ2VtX2lvY3RsX3BpbiwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX1VOUElOLCBub3V2ZWF1X2dlbV9pb2N0bF91bnBpbiwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX0NQVV9QUkVQLCBub3V2ZWF1X2dlbV9pb2N0bF9jcHVfcHJlcCwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX0NQVV9GSU5JLCBub3V2ZWF1X2dlbV9pb2N0bF9jcHVfZmluaSwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX0lORk8sIG5vdXZlYXVfZ2VtX2lvY3RsX2luZm8sIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGX0NBTEwyLCBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmX2NhbGwyLCBEUk1fQVVUSCksCiB9OwogCiBpbnQgbm91dmVhdV9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShub3V2ZWF1X2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCBkMmY2MzM1Li4yNDMyN2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQkJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CiAJfQogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHsKKwlpZiAobnZfY29ubmVjdG9yLT5kY2ItPnR5cGUgPT0gRENCX0NPTk5FQ1RPUl9EVklfSSkgewogCQlkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92YWx1ZShjb25uZWN0b3IsCiAJCQlkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwKIAkJCW52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfVE1EUyA/CkBAIC0yMzYsMTUgKzIzNiwxNyBAQAogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICppMmM7CiAJaW50IHR5cGUsIGZsYWdzOwogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpCisJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUykKIAkJbnZfZW5jb2RlciA9IGZpbmRfZW5jb2Rlcl9ieV90eXBlKGNvbm5lY3RvciwgT1VUUFVUX0xWRFMpOwogCWlmIChudl9lbmNvZGVyICYmIG52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKKwkJdW5zaWduZWQgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKICNpZmRlZiBDT05GSUdfQUNQSQogCQlpZiAoIW5vdXZlYXVfaWdub3JlbGlkICYmICFhY3BpX2xpZF9vcGVuKCkpCi0JCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CiAjZW5kaWYKIAkJbm91dmVhdV9jb25uZWN0b3Jfc2V0X2VuY29kZXIoY29ubmVjdG9yLCBudl9lbmNvZGVyKTsKLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIENsZWFudXAgdGhlIHByZXZpb3VzIEVESUQgYmxvY2suICovCkBAIC0yNzksNyArMjgxLDcgQEAKIAkJICogc2FtZSBpMmMgY2hhbm5lbCBzbyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBkZGNfZGV0ZWN0CiAJCSAqIGlzbid0IG5lY2Vzc2FyaWx5IGNvcnJlY3QuCiAJCSAqLwotCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgeworCQlpZiAobnZfY29ubmVjdG9yLT5kY2ItPnR5cGUgPT0gRENCX0NPTk5FQ1RPUl9EVklfSSkgewogCQkJaWYgKG52X2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQogCQkJCXR5cGUgPSBPVVRQVVRfVE1EUzsKIAkJCWVsc2UKQEAgLTMyMSwxMSArMzIzLDExIEBACiBzdGF0aWMgdm9pZAogbm91dmVhdV9jb25uZWN0b3JfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXI7CiAJaW50IHR5cGU7CiAKLQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgeworCWlmIChudl9jb25uZWN0b3ItPmRjYi0+dHlwZSA9PSBEQ0JfQ09OTkVDVE9SX0RWSV9JKSB7CiAJCWlmIChjb25uZWN0b3ItPmZvcmNlID09IERSTV9GT1JDRV9PTl9ESUdJVEFMKQogCQkJdHlwZSA9IE9VVFBVVF9UTURTOwogCQllbHNlCkBAIC0zMzUsNyArMzM3LDcgQEAKIAogCW52X2VuY29kZXIgPSBmaW5kX2VuY29kZXJfYnlfdHlwZShjb25uZWN0b3IsIHR5cGUpOwogCWlmICghbnZfZW5jb2RlcikgewotCQlOVl9FUlJPUihkZXYsICJjYW4ndCBmaW5kIGVuY29kZXIgdG8gZm9yY2UgJXMgb24hXG4iLAorCQlOVl9FUlJPUihjb25uZWN0b3ItPmRldiwgImNhbid0IGZpbmQgZW5jb2RlciB0byBmb3JjZSAlcyBvbiFcbiIsCiAJCQkgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAkJY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAkJcmV0dXJuOwpAQCAtMzY5LDcgKzM3MSw3IEBACiAJCX0KIAogCQkvKiBMVkRTIGFsd2F5cyBuZWVkcyBncHUgc2NhbGluZyAqLwotCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyAmJgorCQlpZiAobnZfY29ubmVjdG9yLT5kY2ItPnR5cGUgPT0gRENCX0NPTk5FQ1RPUl9MVkRTICYmCiAJCSAgICB2YWx1ZSA9PSBEUk1fTU9ERV9TQ0FMRV9OT05FKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTUzNSw3ICs1MzcsNyBAQAogCS8qIElmIHdlJ3JlIG5vdCBMVkRTLCBkZXN0cm95IHRoZSBwcmV2aW91cyBuYXRpdmUgbW9kZSwgdGhlIGF0dGFjaGVkCiAJICogbW9uaXRvciBjb3VsZCBoYXZlIGNoYW5nZWQuCiAJICovCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMgJiYKKwlpZiAobnZfY29ubmVjdG9yLT5kY2ItPnR5cGUgIT0gRENCX0NPTk5FQ1RPUl9MVkRTICYmCiAJICAgIG52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKIAkJZHJtX21vZGVfZGVzdHJveShkZXYsIG52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpOwogCQludl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlID0gTlVMTDsKQEAgLTU2Myw3ICs1NjUsNyBAQAogCQlyZXQgPSBnZXRfc2xhdmVfZnVuY3MobnZfZW5jb2RlciktPgogCQkJZ2V0X21vZGVzKHRvX2RybV9lbmNvZGVyKG52X2VuY29kZXIpLCBjb25uZWN0b3IpOwogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpCisJaWYgKG52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfTFZEUykKIAkJcmV0ICs9IG5vdXZlYXVfY29ubmVjdG9yX3NjYWxlcl9tb2Rlc19hZGQoY29ubmVjdG9yKTsKIAogCXJldHVybiByZXQ7CkBAIC02MTMsNiArNjE1LDkgQEAKIAogCQljbG9jayAqPSAzOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCXJldHVybiBNT0RFX0JBRDsKIAl9CiAKIAlpZiAoY2xvY2sgPCBtaW5fY2xvY2spCkBAIC02ODAsNyArNjg1LDcgQEAKIAkvKiBGaXJzdGx5IHRyeSBnZXR0aW5nIEVESUQgb3ZlciBEREMsIGlmIGFsbG93ZWQgYW5kIEkyQyBjaGFubmVsCiAJICogaXMgYXZhaWxhYmxlLgogCSAqLwotCWlmICghZGV2X3ByaXYtPlZCSU9TLnB1Yi5mcF9ub19kZGMgJiYgbnZfZW5jb2Rlci0+ZGNiLT5pMmNfaW5kZXggPCAweGYpCisJaWYgKCFkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjICYmIG52X2VuY29kZXItPmRjYi0+aTJjX2luZGV4IDwgMHhmKQogCQlpMmMgPSBub3V2ZWF1X2kyY19maW5kKGRldiwgbnZfZW5jb2Rlci0+ZGNiLT5pMmNfaW5kZXgpOwogCiAJaWYgKGkyYykgewpAQCAtNjk1LDcgKzcwMCw3IEBACiAJICovCiAJaWYgKCFudl9jb25uZWN0b3ItPmVkaWQgJiYgbm91dmVhdV9iaW9zX2ZwX21vZGUoZGV2LCAmbmF0aXZlKSAmJgogCSAgICAgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX3N0cmFwc19mb3JfbW9kZSB8fAotCSAgICAgIGRldl9wcml2LT5WQklPUy5wdWIuZnBfbm9fZGRjKSkgeworCSAgICAgIGRldl9wcml2LT52Ymlvcy5mcF9ub19kZGMpKSB7CiAJCW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCAmbmF0aXZlKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzA0LDcgKzcwOSw3IEBACiAJICogc3RvcmVkIGZvciB0aGUgcGFuZWwgc3RvcmVkIGluIHRoZW0uCiAJICovCiAJaWYgKCFudl9jb25uZWN0b3ItPmVkaWQgJiYgIW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUgJiYKLQkgICAgIWRldl9wcml2LT5WQklPUy5wdWIuZnBfbm9fZGRjKSB7CisJICAgICFkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSB7CiAJCXN0cnVjdCBlZGlkICplZGlkID0KIAkJCShzdHJ1Y3QgZWRpZCAqKW5vdXZlYXVfYmlvc19lbWJlZGRlZF9lZGlkKGRldik7CiAJCWlmIChlZGlkKSB7CkBAIC03MzksNDYgKzc0NCw2NiBAQAogfQogCiBpbnQKLW5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGludCB0eXBlKQorbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgKmRjYikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlpbnQgcmV0OworCWludCByZXQsIHR5cGU7CiAKIAlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAorCXN3aXRjaCAoZGNiLT50eXBlKSB7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX05PTkU6CisJCXJldHVybiAwOworCWNhc2UgRENCX0NPTk5FQ1RPUl9WR0E6CisJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBWR0EgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8wOgorCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8xOgorCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8zOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgVFYgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9UVjsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX0RWSV9JOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRFZJLUkgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOworCQlicmVhazsKKwljYXNlIERDQl9DT05ORUNUT1JfRFZJX0Q6CisJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEVkktRCBjb25uZWN0b3JcbiIpOworCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9IRE1JXzA6CisJY2FzZSBEQ0JfQ09OTkVDVE9SX0hETUlfMToKKwkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIEhETUkgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQTsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX0xWRFM6CisJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBMVkRTIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX0RQOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRGlzcGxheVBvcnQgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX2VEUDoKKwkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhbiBlRFAgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU5WX0VSUk9SKGRldiwgInVua25vd24gY29ubmVjdG9yIHR5cGU6IDB4JTAyeCEhXG4iLCBkY2ItPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAludl9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZigqbnZfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jb25uZWN0b3IpCiAJCXJldHVybiAtRU5PTUVNOwotCW52X2Nvbm5lY3Rvci0+ZGNiID0gbm91dmVhdV9iaW9zX2Nvbm5lY3Rvcl9lbnRyeShkZXYsIGluZGV4KTsKKwludl9jb25uZWN0b3ItPmRjYiA9IGRjYjsKIAljb25uZWN0b3IgPSAmbnZfY29ubmVjdG9yLT5iYXNlOwogCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgVkdBIGNvbm5lY3RvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEVkktRCBjb25uZWN0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRFZJLUkgY29ubmVjdG9yXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIExWRFMgY29ubmVjdG9yXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVFY6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBUViBjb25uZWN0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERpc3BsYXlQb3J0IGNvbm5lY3RvclxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU5WX0VSUk9SKGRldiwgIlVua25vd24gY29ubmVjdG9yLCB0aGlzIGlzIG5vdCBnb29kLlxuIik7Ci0JCWJyZWFrOwotCX0KLQogCS8qIGRlZmF1bHRzLCB3aWxsIGdldCBvdmVycmlkZGVuIGluIGRldGVjdCgpICovCiAJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IGZhbHNlOwogCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CkBAIC03ODYsNDQgKzgxMSwxMSBAQAogCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJm5vdXZlYXVfY29ubmVjdG9yX2Z1bmNzLCB0eXBlKTsKIAlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmbm91dmVhdV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKIAotCS8qIEluaXQgRFZJLUkgc3BlY2lmaWMgcHJvcGVydGllcyAqLwotCWlmICh0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB7Ci0JCWRybV9tb2RlX2NyZWF0ZV9kdmlfaV9wcm9wZXJ0aWVzKGRldik7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgZGV2LT5tb2RlX2NvbmZpZy5kdmlfaV9zdWJjb25uZWN0b3JfcHJvcGVydHksIDApOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwgMCk7Ci0JfQotCi0JaWYgKHR5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpCi0JCW52X2Nvbm5lY3Rvci0+dXNlX2RpdGhlcmluZyA9IGZhbHNlOwotCi0JaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQgfHwKLQkgICAgdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSB8fAotCSAgICB0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTIHx8Ci0JICAgIHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB7Ci0JCW52X2Nvbm5lY3Rvci0+c2NhbGluZ19tb2RlID0gRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTjsKLQotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAotCQkJCQkgICAgICBudl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSk7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgZGV2LT5tb2RlX2NvbmZpZy5kaXRoZXJpbmdfbW9kZV9wcm9wZXJ0eSwKLQkJCQkJICAgICAgbnZfY29ubmVjdG9yLT51c2VfZGl0aGVyaW5nID8gRFJNX01PREVfRElUSEVSSU5HX09OCi0JCQkJCSAgICAgIDogRFJNX01PREVfRElUSEVSSU5HX09GRik7Ci0KLQl9IGVsc2UgewotCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSA9IERSTV9NT0RFX1NDQUxFX05PTkU7Ci0KLQkJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQSAgJiYKLQkJCQlkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7Ci0JCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAotCQkJCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSk7Ci0JCX0KLQl9Ci0KIAkvKiBhdHRhY2ggZW5jb2RlcnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCi0JCWlmIChudl9lbmNvZGVyLT5kY2ItPmNvbm5lY3RvciAhPSBpbmRleCkKKwkJaWYgKG52X2VuY29kZXItPmRjYi0+Y29ubmVjdG9yICE9IGRjYi0+aW5kZXgpCiAJCQljb250aW51ZTsKIAogCQlpZiAoZ2V0X3NsYXZlX2Z1bmNzKG52X2VuY29kZXIpKQpAQCAtODMyLDkgKzgyNCw1MiBAQAogCQlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKIAl9CiAKKwlpZiAoIWNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF0pIHsKKwkJTlZfV0FSTihkZXYsICIgIG5vIGVuY29kZXJzLCBpZ25vcmluZ1xuIik7CisJCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCQlrZnJlZShjb25uZWN0b3IpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJbml0IERWSS1JIHNwZWNpZmljIHByb3BlcnRpZXMgKi8KKwlpZiAoZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfRFZJX0kpIHsKKwkJZHJtX21vZGVfY3JlYXRlX2R2aV9pX3Byb3BlcnRpZXMoZGV2KTsKKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwgMCk7CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgZGV2LT5tb2RlX2NvbmZpZy5kdmlfaV9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5LCAwKTsKKwl9CisKKwlpZiAoZGNiLT50eXBlICE9IERDQl9DT05ORUNUT1JfTFZEUykKKwkJbnZfY29ubmVjdG9yLT51c2VfZGl0aGVyaW5nID0gZmFsc2U7CisKKwlzd2l0Y2ggKGRjYi0+dHlwZSkgeworCWNhc2UgRENCX0NPTk5FQ1RPUl9WR0E6CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAorCQkJCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSk7CisJCX0KKwkJLyogZmFsbC10aHJvdWdoICovCisJY2FzZSBEQ0JfQ09OTkVDVE9SX1RWXzA6CisJY2FzZSBEQ0JfQ09OTkVDVE9SX1RWXzE6CisJY2FzZSBEQ0JfQ09OTkVDVE9SX1RWXzM6CisJCW52X2Nvbm5lY3Rvci0+c2NhbGluZ19tb2RlID0gRFJNX01PREVfU0NBTEVfTk9ORTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUgPSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOOworCisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSk7CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQlkZXYtPm1vZGVfY29uZmlnLmRpdGhlcmluZ19tb2RlX3Byb3BlcnR5LAorCQkJCW52X2Nvbm5lY3Rvci0+dXNlX2RpdGhlcmluZyA/CisJCQkJRFJNX01PREVfRElUSEVSSU5HX09OIDogRFJNX01PREVfRElUSEVSSU5HX09GRik7CisJCWJyZWFrOworCX0KKwogCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CiAKLQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykgeworCWlmIChkY2ItPnR5cGUgPT0gRENCX0NPTk5FQ1RPUl9MVkRTKSB7CiAJCXJldCA9IG5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZV9sdmRzKGRldiwgY29ubmVjdG9yKTsKIAkJaWYgKHJldCkgewogCQkJY29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25uZWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmgKaW5kZXggNzI4YjgwOS4uNGVmMzhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5oCkBAIC00OSw2ICs0OSw3IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjb24sIHN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciwgYmFzZSk7CiB9CiAKLWludCBub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGkyY19pbmRleCwgaW50IHR5cGUpOworaW50IG5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJICAgICBzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSAqKTsKIAogI2VuZGlmIC8qIF9fTk9VVkVBVV9DT05ORUNUT1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGVidWdmcy5jCmluZGV4IGQ3OWRiMzYuLjhmZjllZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGVidWdmcy5jCkBAIC00NywxMiArNDcsMjMgQEAKIAlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgIGN1cjogMHglMDh4XG4iLCBjaGFuLT5kbWEuY3VyIDw8IDIpOwogCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgcHV0OiAweCUwOHhcbiIsIGNoYW4tPmRtYS5wdXQgPDwgMik7CiAJc2VxX3ByaW50ZihtLCAiICAgICAgICAgIGZyZWU6IDB4JTA4eFxuIiwgY2hhbi0+ZG1hLmZyZWUgPDwgMik7CisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpIHsKKwkJc2VxX3ByaW50ZihtLCAiICAgICAgICBpYiBtYXg6IDB4JTA4eFxuIiwgY2hhbi0+ZG1hLmliX21heCk7CisJCXNlcV9wcmludGYobSwgIiAgICAgICAgaWIgcHV0OiAweCUwOHhcbiIsIGNoYW4tPmRtYS5pYl9wdXQpOworCQlzZXFfcHJpbnRmKG0sICIgICAgICAgaWIgZnJlZTogMHglMDh4XG4iLCBjaGFuLT5kbWEuaWJfZnJlZSk7CisJfQogCiAJc2VxX3ByaW50ZihtLCAiZ3B1IGZpZm8gc3RhdGU6XG4iKTsKIAlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgIGdldDogMHglMDh4XG4iLAogCQkJCQludmNoYW5fcmQzMihjaGFuLCBjaGFuLT51c2VyX2dldCkpOwogCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgcHV0OiAweCUwOHhcbiIsCiAJCQkJCW52Y2hhbl9yZDMyKGNoYW4sIGNoYW4tPnVzZXJfcHV0KSk7CisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpIHsKKwkJc2VxX3ByaW50ZihtLCAiICAgICAgICBpYiBnZXQ6IDB4JTA4eFxuIiwKKwkJCSAgIG52Y2hhbl9yZDMyKGNoYW4sIDB4ODgpKTsKKwkJc2VxX3ByaW50ZihtLCAiICAgICAgICBpYiBwdXQ6IDB4JTA4eFxuIiwKKwkJCSAgIG52Y2hhbl9yZDMyKGNoYW4sIDB4OGMpKTsKKwl9CiAKIAlzZXFfcHJpbnRmKG0sICJsYXN0IGZlbmNlICAgIDogJWRcbiIsIGNoYW4tPmZlbmNlLnNlcXVlbmNlKTsKIAlzZXFfcHJpbnRmKG0sICJsYXN0IHNpZ25hbGxlZDogJWRcbiIsIGNoYW4tPmZlbmNlLnNlcXVlbmNlX2Fjayk7CkBAIC0xMzMsOSArMTQ0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25vdXZlYXVfZGVidWdmc192Ymlvc19pbWFnZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlLT5taW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dmJpb3MubGVuZ3RoOyBpKyspCisJCXNlcV9wcmludGYobSwgIiVjIiwgZGV2X3ByaXYtPnZiaW9zLmRhdGFbaV0pOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3Qgbm91dmVhdV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKIAl7ICJjaGlwc2V0Iiwgbm91dmVhdV9kZWJ1Z2ZzX2NoaXBzZXRfaW5mbywgMCwgTlVMTCB9LAogCXsgIm1lbW9yeSIsIG5vdXZlYXVfZGVidWdmc19tZW1vcnlfaW5mbywgMCwgTlVMTCB9LAorCXsgInZiaW9zLnJvbSIsIG5vdXZlYXVfZGVidWdmc192Ymlvc19pbWFnZSwgMCwgTlVMTCB9LAogfTsKICNkZWZpbmUgTk9VVkVBVV9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShub3V2ZWF1X2RlYnVnZnNfbGlzdCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rpc3BsYXkuYwppbmRleCBkZmM5NDM5Li5jZjFjNWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rpc3BsYXkuYwpAQCAtMzksMTEgKzM5LDggQEAKIAlpZiAoZHJtX2ZiLT5mYmRldikKIAkJbm91dmVhdV9mYmNvbl9yZW1vdmUoZGV2LCBkcm1fZmIpOwogCi0JaWYgKGZiLT5udmJvKSB7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZmItPm52Ym8tPmdlbSk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCX0KKwlpZiAoZmItPm52Ym8pCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGZiLT5udmJvLT5nZW0pOwogCiAJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZHJtX2ZiKTsKIAlrZnJlZShmYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCA1MGQ5ZTY3Li5jODQ4MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTMyLDcgKzMyLDIyIEBACiB2b2lkCiBub3V2ZWF1X2RtYV9wcmVfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewotCWNoYW4tPmRtYS5tYXggID0gKGNoYW4tPnB1c2hidWZfYm8tPmJvLm1lbS5zaXplID4+IDIpIC0gMjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2JvICpwdXNoYnVmID0gY2hhbi0+cHVzaGJ1Zl9ibzsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7CisJCWNvbnN0IGludCBpYl9zaXplID0gcHVzaGJ1Zi0+Ym8ubWVtLnNpemUgLyAyOworCisJCWNoYW4tPmRtYS5pYl9iYXNlID0gKHB1c2hidWYtPmJvLm1lbS5zaXplIC0gaWJfc2l6ZSkgPj4gMjsKKwkJY2hhbi0+ZG1hLmliX21heCA9IChpYl9zaXplIC8gOCkgLSAxOworCQljaGFuLT5kbWEuaWJfcHV0ID0gMDsKKwkJY2hhbi0+ZG1hLmliX2ZyZWUgPSBjaGFuLT5kbWEuaWJfbWF4IC0gY2hhbi0+ZG1hLmliX3B1dDsKKworCQljaGFuLT5kbWEubWF4ID0gKHB1c2hidWYtPmJvLm1lbS5zaXplIC0gaWJfc2l6ZSkgPj4gMjsKKwl9IGVsc2UgeworCQljaGFuLT5kbWEubWF4ICA9IChwdXNoYnVmLT5iby5tZW0uc2l6ZSA+PiAyKSAtIDI7CisJfQorCiAJY2hhbi0+ZG1hLnB1dCAgPSAwOwogCWNoYW4tPmRtYS5jdXIgID0gY2hhbi0+ZG1hLnB1dDsKIAljaGFuLT5kbWEuZnJlZSA9IGNoYW4tPmRtYS5tYXggLSBjaGFuLT5kbWEuY3VyOwpAQCAtMTYyLDEyICsxNzcsMTAxIEBACiAJcmV0dXJuICh2YWwgLSBjaGFuLT5wdXNoYnVmX2Jhc2UpID4+IDI7CiB9CiAKK3ZvaWQKK252NTBfZG1hX3B1c2goc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgc3RydWN0IG5vdXZlYXVfYm8gKmJvLAorCSAgICAgIGludCBkZWx0YSwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9ibyAqcGIgPSBjaGFuLT5wdXNoYnVmX2JvOworCXVpbnQ2NF90IG9mZnNldCA9IGJvLT5iby5vZmZzZXQgKyBkZWx0YTsKKwlpbnQgaXAgPSAoY2hhbi0+ZG1hLmliX3B1dCAqIDIpICsgY2hhbi0+ZG1hLmliX2Jhc2U7CisKKwlCVUdfT04oY2hhbi0+ZG1hLmliX2ZyZWUgPCAxKTsKKwlub3V2ZWF1X2JvX3dyMzIocGIsIGlwKyssIGxvd2VyXzMyX2JpdHMob2Zmc2V0KSk7CisJbm91dmVhdV9ib193cjMyKHBiLCBpcCsrLCB1cHBlcl8zMl9iaXRzKG9mZnNldCkgfCBsZW5ndGggPDwgOCk7CisKKwljaGFuLT5kbWEuaWJfcHV0ID0gKGNoYW4tPmRtYS5pYl9wdXQgKyAxKSAmIGNoYW4tPmRtYS5pYl9tYXg7CisJbnZjaGFuX3dyMzIoY2hhbiwgMHg4YywgY2hhbi0+ZG1hLmliX3B1dCk7CisJY2hhbi0+ZG1hLmliX2ZyZWUtLTsKK30KKworc3RhdGljIGludAorbnY1MF9kbWFfcHVzaF93YWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBjb3VudCkKK3sKKwl1aW50MzJfdCBjbnQgPSAwLCBwcmV2X2dldCA9IDA7CisKKwl3aGlsZSAoY2hhbi0+ZG1hLmliX2ZyZWUgPCBjb3VudCkgeworCQl1aW50MzJfdCBnZXQgPSBudmNoYW5fcmQzMihjaGFuLCAweDg4KTsKKwkJaWYgKGdldCAhPSBwcmV2X2dldCkgeworCQkJcHJldl9nZXQgPSBnZXQ7CisJCQljbnQgPSAwOworCQl9CisKKwkJaWYgKCgrK2NudCAmIDB4ZmYpID09IDApIHsKKwkJCURSTV9VREVMQVkoMSk7CisJCQlpZiAoY250ID4gMTAwMDAwKQorCQkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQljaGFuLT5kbWEuaWJfZnJlZSA9IGdldCAtIGNoYW4tPmRtYS5pYl9wdXQ7CisJCWlmIChjaGFuLT5kbWEuaWJfZnJlZSA8PSAwKQorCQkJY2hhbi0+ZG1hLmliX2ZyZWUgKz0gY2hhbi0+ZG1hLmliX21heCArIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK252NTBfZG1hX3dhaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IHNsb3RzLCBpbnQgY291bnQpCit7CisJdWludDMyX3QgY250ID0gMCwgcHJldl9nZXQgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBudjUwX2RtYV9wdXNoX3dhaXQoY2hhbiwgc2xvdHMgKyAxKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldDsKKworCXdoaWxlIChjaGFuLT5kbWEuZnJlZSA8IGNvdW50KSB7CisJCWludCBnZXQgPSBSRUFEX0dFVChjaGFuLCAmcHJldl9nZXQsICZjbnQpOworCQlpZiAodW5saWtlbHkoZ2V0IDwgMCkpIHsKKwkJCWlmIChnZXQgPT0gLUVJTlZBTCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0dXJuIGdldDsKKwkJfQorCisJCWlmIChnZXQgPD0gY2hhbi0+ZG1hLmN1cikgeworCQkJY2hhbi0+ZG1hLmZyZWUgPSBjaGFuLT5kbWEubWF4IC0gY2hhbi0+ZG1hLmN1cjsKKwkJCWlmIChjaGFuLT5kbWEuZnJlZSA+PSBjb3VudCkKKwkJCQlicmVhazsKKworCQkJRklSRV9SSU5HKGNoYW4pOworCQkJZG8geworCQkJCWdldCA9IFJFQURfR0VUKGNoYW4sICZwcmV2X2dldCwgJmNudCk7CisJCQkJaWYgKHVubGlrZWx5KGdldCA8IDApKSB7CisJCQkJCWlmIChnZXQgPT0gLUVJTlZBTCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlyZXR1cm4gZ2V0OworCQkJCX0KKwkJCX0gd2hpbGUgKGdldCA9PSAwKTsKKwkJCWNoYW4tPmRtYS5jdXIgPSAwOworCQkJY2hhbi0+ZG1hLnB1dCA9IDA7CisJCX0KKworCQljaGFuLT5kbWEuZnJlZSA9IGdldCAtIGNoYW4tPmRtYS5jdXIgLSAxOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQKLW5vdXZlYXVfZG1hX3dhaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IHNpemUpCitub3V2ZWF1X2RtYV93YWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBzbG90cywgaW50IHNpemUpCiB7CiAJdWludDMyX3QgcHJldl9nZXQgPSAwLCBjbnQgPSAwOwogCWludCBnZXQ7CiAKKwlpZiAoY2hhbi0+ZG1hLmliX21heCkKKwkJcmV0dXJuIG52NTBfZG1hX3dhaXQoY2hhbiwgc2xvdHMsIHNpemUpOworCiAJd2hpbGUgKGNoYW4tPmRtYS5mcmVlIDwgc2l6ZSkgewogCQlnZXQgPSBSRUFEX0dFVChjaGFuLCAmcHJldl9nZXQsICZjbnQpOwogCQlpZiAodW5saWtlbHkoZ2V0ID09IC1FQlVTWSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuaAppbmRleCBkYWJmZDY1Li44YjA1YzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmgKQEAgLTMxLDYgKzMxLDkgQEAKICNkZWZpbmUgTk9VVkVBVV9ETUFfREVCVUcgMAogI2VuZGlmCiAKK3ZvaWQgbnY1MF9kbWFfcHVzaChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHN0cnVjdCBub3V2ZWF1X2JvICosCisJCSAgIGludCBkZWx0YSwgaW50IGxlbmd0aCk7CisKIC8qCiAgKiBUaGVyZSdzIGEgaHcgcmFjZSBjb25kaXRpb24gd2hlcmUgeW91IGNhbid0IGp1bXAgdG8geW91ciBQVVQgb2Zmc2V0LAogICogdG8gYXZvaWQgdGhpcyB3ZSBqdW1wIHRvIG9mZnNldCArIFNLSVBTIGFuZCBmaWxsIHRoZSBkaWZmZXJlbmNlIHdpdGgKQEAgLTk2LDEzICs5OSwxMSBAQAogc3RhdGljIF9fbXVzdF9jaGVjayBpbmxpbmUgaW50CiBSSU5HX1NQQUNFKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBzaXplKQogewotCWlmIChjaGFuLT5kbWEuZnJlZSA8IHNpemUpIHsKLQkJaW50IHJldDsKKwlpbnQgcmV0OwogCi0JCXJldCA9IG5vdXZlYXVfZG1hX3dhaXQoY2hhbiwgc2l6ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBub3V2ZWF1X2RtYV93YWl0KGNoYW4sIDEsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAljaGFuLT5kbWEuZnJlZSAtPSBzaXplOwogCXJldHVybiAwOwpAQCAtMTQ2LDcgKzE0NywxMyBAQAogCQlyZXR1cm47CiAJY2hhbi0+YWNjZWxfZG9uZSA9IHRydWU7CiAKLQlXUklURV9QVVQoY2hhbi0+ZG1hLmN1cik7CisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpIHsKKwkJbnY1MF9kbWFfcHVzaChjaGFuLCBjaGFuLT5wdXNoYnVmX2JvLCBjaGFuLT5kbWEucHV0IDw8IDIsCisJCQkgICAgICAoY2hhbi0+ZG1hLmN1ciAtIGNoYW4tPmRtYS5wdXQpIDw8IDIpOworCX0gZWxzZSB7CisJCVdSSVRFX1BVVChjaGFuLT5kbWEuY3VyKTsKKwl9CisKIAljaGFuLT5kbWEucHV0ID0gY2hhbi0+ZG1hLmN1cjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKaW5kZXggZGEzYjkzYi4uMzBjYzA5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCkBAIC03NSwxMSArNzUsMTEgQEAKIGludCBub3V2ZWF1X2lnbm9yZWxpZCA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlbGlkLCBub3V2ZWF1X2lnbm9yZWxpZCwgaW50LCAwNDAwKTsKIAotTU9EVUxFX1BBUk1fREVTQyhub2FncCwgIkRpc2FibGUgYWxsIGFjY2VsZXJhdGlvbiIpOworTU9EVUxFX1BBUk1fREVTQyhub2FjY2VsLCAiRGlzYWJsZSBhbGwgYWNjZWxlcmF0aW9uIik7CiBpbnQgbm91dmVhdV9ub2FjY2VsID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2FjY2VsLCBub3V2ZWF1X25vYWNjZWwsIGludCwgMDQwMCk7CiAKLU1PRFVMRV9QQVJNX0RFU0Mobm9hZ3AsICJEaXNhYmxlIGZiY29uIGFjY2VsZXJhdGlvbiIpOworTU9EVUxFX1BBUk1fREVTQyhub2ZiYWNjZWwsICJEaXNhYmxlIGZiY29uIGFjY2VsZXJhdGlvbiIpOwogaW50IG5vdXZlYXVfbm9mYmFjY2VsID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2ZiYWNjZWwsIG5vdXZlYXVfbm9mYmFjY2VsLCBpbnQsIDA0MDApOwogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlkcm1fcHV0X2RldihkZXYpOwogfQogCi1zdGF0aWMgaW50CitpbnQKIG5vdXZlYXVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBwbV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAoraW50CiBub3V2ZWF1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTQwMiw4ICs0MDIsMTAgQEAKIAkJCW5vdXZlYXVfbW9kZXNldCA9IDE7CiAJfQogCi0JaWYgKG5vdXZlYXVfbW9kZXNldCA9PSAxKQorCWlmIChub3V2ZWF1X21vZGVzZXQgPT0gMSkgewogCQlkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzIHw9IERSSVZFUl9NT0RFU0VUOworCQlub3V2ZWF1X3JlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7CisJfQogCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQpAQCAtNDExLDYgKzQxMyw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbm91dmVhdV9leGl0KHZvaWQpCiB7CiAJZHJtX2V4aXQoJmRyaXZlcik7CisJbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7CiB9CiAKIG1vZHVsZV9pbml0KG5vdXZlYXVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCAxYzE1ZWYzLi41ZjhkOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2RlZmluZSBEUklWRVJfTUFKT1IJCTAKICNkZWZpbmUgRFJJVkVSX01JTk9SCQkwCi0jZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTE1CisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTE2CiAKICNkZWZpbmUgTk9VVkVBVV9GQU1JTFkgICAweDAwMDBGRkZGCiAjZGVmaW5lIE5PVVZFQVVfRkxBR1MgICAgMHhGRkZGMDAwMApAQCAtODMsNiArODMsNyBAQAogCXN0cnVjdCBkcm1fZmlsZSAqcmVzZXJ2ZWRfYnk7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKIAlpbnQgcGJib19pbmRleDsKKwlib29sIHZhbGlkYXRlX21hcHBlZDsKIAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW5uZWw7CiAKQEAgLTIzOSw2ICsyNDAsMTEgQEAKIAkJaW50IGN1cjsKIAkJaW50IHB1dDsKIAkJLyogYWNjZXNzIHZpYSBwdXNoYnVmX2JvICovCisKKwkJaW50IGliX2Jhc2U7CisJCWludCBpYl9tYXg7CisJCWludCBpYl9mcmVlOworCQlpbnQgaWJfcHV0OwogCX0gZG1hOwogCiAJdWludDMyX3Qgc3dfc3ViY2hhbm5lbFs4XTsKQEAgLTUzMyw2ICs1MzksOSBAQAogCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSBlbmdpbmU7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbm5lbDsKIAorCS8qIEZvciBQRklGTyBhbmQgUEdSQVBILiAqLworCXNwaW5sb2NrX3QgY29udGV4dF9zd2l0Y2hfbG9jazsKKwogCS8qIFJBTUlOIGNvbmZpZ3VyYXRpb24sIFJBTUZDLCBSQU1IVCBhbmQgUkFNUk8gb2Zmc2V0cyAqLwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaHQ7CiAJdWludDMyX3QgcmFtaW5fcnN2ZF92cmFtOwpAQCAtNTk2LDggKzYwNSw3IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdwdW9ial9saXN0OwogCi0Jc3RydWN0IG52YmlvcyBWQklPUzsKLQlzdHJ1Y3Qgbm91dmVhdV9iaW9zX2luZm8gKnZiaW9zOworCXN0cnVjdCBudmJpb3MgdmJpb3M7CiAKIAlzdHJ1Y3QgbnYwNF9tb2RlX3N0YXRlIG1vZGVfcmVnOwogCXN0cnVjdCBudjA0X21vZGVfc3RhdGUgc2F2ZWRfcmVnOwpAQCAtNjE0LDcgKzYyMiw2IEBACiAJfSBzdXNyZXM7CiAKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OwotCWJvb2wgYWNwaV9kc207CiAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm87CiAKQEAgLTY4Miw2ICs2ODksOSBAQAogZXh0ZXJuIGludCBub3V2ZWF1X25vZmJhY2NlbDsKIGV4dGVybiBpbnQgbm91dmVhdV9ub2FjY2VsOwogCitleHRlcm4gaW50IG5vdXZlYXVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBwbV9zdGF0ZSk7CitleHRlcm4gaW50IG5vdXZlYXVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKIC8qIG5vdXZlYXVfc3RhdGUuYyAqLwogZXh0ZXJuIHZvaWQgbm91dmVhdV9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC02OTYsMTIgKzcwNiw2IEBACiAJCQkgICAgICAgdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB2YWwpOwogZXh0ZXJuIGJvb2wgbm91dmVhdV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2lvY3RsX2NhcmRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICpkYXRhLAotCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2lvY3RsX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqZGF0YSwKLQkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqKTsKLWV4dGVybiBpbnQgIG5vdXZlYXVfaW9jdGxfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKmRhdGEsCi0JCQkJIHN0cnVjdCBkcm1fZmlsZSAqKTsKIAogLyogbm91dmVhdV9tZW0uYyAqLwogZXh0ZXJuIGludCAgbm91dmVhdV9tZW1faW5pdF9oZWFwKHN0cnVjdCBtZW1fYmxvY2sgKiosIHVpbnQ2NF90IHN0YXJ0LApAQCAtODQ1LDIxICs4NDksMTUgQEAKIC8qIG5vdXZlYXVfZG1hLmMgKi8KIGV4dGVybiB2b2lkIG5vdXZlYXVfZG1hX3ByZV9pbml0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2RtYV9pbml0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2RtYV93YWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwgaW50IHNpemUpOworZXh0ZXJuIGludCAgbm91dmVhdV9kbWFfd2FpdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBzbG90cywgaW50IHNpemUpOwogCiAvKiBub3V2ZWF1X2FjcGkuYyAqLwotI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gaW50IG5vdXZlYXVfaHlicmlkX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIGJvb2wgbm91dmVhdV9kc21fcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkKK3ZvaWQgbm91dmVhdV9yZWdpc3Rlcl9kc21faGFuZGxlcih2b2lkKTsKK3ZvaWQgbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5vdXZlYXVfaHlicmlkX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGJvb2wgbm91dmVhdV9kc21fcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZmFsc2U7Ci19CitzdGF0aWMgaW5saW5lIHZvaWQgbm91dmVhdV9yZWdpc3Rlcl9kc21faGFuZGxlcih2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5vdXZlYXVfdW5yZWdpc3Rlcl9kc21faGFuZGxlcih2b2lkKSB7fQogI2VuZGlmCiAKIC8qIG5vdXZlYXVfYmFja2xpZ2h0LmMgKi8KQEAgLTEwMjcsNiArMTAyNSw3IEBACiBleHRlcm4gaW50ICBudjUwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gaW50ICBudjUwX2dyY3R4X2luaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKik7CiAKIC8qIG5vdXZlYXVfZ3JjdHguYyAqLwogZXh0ZXJuIGludCAgbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC0xMTUyLDE2ICsxMTUxLDYgQEAKIAkJCQkgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqKTsKLWV4dGVybiBpbnQgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1Zl9jYWxsKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKLQkJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWZfY2FsbDIoc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqLAotCQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX3BpbihzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCi0JCQkJIHN0cnVjdCBkcm1fZmlsZSAqKTsKLWV4dGVybiBpbnQgbm91dmVhdV9nZW1faW9jdGxfdW5waW4oc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqLAotCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqKTsKLWV4dGVybiBpbnQgbm91dmVhdV9nZW1faW9jdGxfdGlsZShzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCi0JCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKik7CiBleHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX2NwdV9wcmVwKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7CiBleHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX2NwdV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwppbmRleCBlYTg3OWEyLi42OGNlZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgpAQCAtMzcwLDYgKzM3MSw3IEBACiAJCQkJCQludmJvLT5iby5vZmZzZXQsIG52Ym8pOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChkZXYtPnBkZXYsIGluZm8pOwogCXJldHVybiAwOwogCiBvdXRfdW5yZWY6CkBAIC00MDEsMTAgKzQwMyw4IEBACiAKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJbm91dmVhdV9ib191bm1hcChub3V2ZWF1X2ZiLT5udmJvKTsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShub3V2ZWF1X2ZiLT5udmJvLT5nZW0pOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChub3V2ZWF1X2ZiLT5udmJvLT5nZW0pOwogCQlub3V2ZWF1X2ZiLT5udmJvID0gTlVMTDsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWlmIChwYXIpCiAJCQlkcm1fZmJfaGVscGVyX2ZyZWUoJnBhci0+aGVscGVyKTsKIAkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCmluZGV4IDcwY2MzMDguLjBkMjJmNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwpAQCAtMTY3LDEyICsxNjcsMTAgQEAKIAogCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG52Ym8tPmdlbSwgJnJlcS0+aW5mby5oYW5kbGUpOwogb3V0OgotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2UobnZiby0+Z2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQobnZiby0+Z2VtKTsKIAogCWlmIChyZXQpCi0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG52Ym8tPmdlbSk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG52Ym8tPmdlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQzLDYgKzI0MSwxMSBAQAogCQkJbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCAqKSZwcmV2X2ZlbmNlKTsKIAkJfQogCisJCWlmICh1bmxpa2VseShudmJvLT52YWxpZGF0ZV9tYXBwZWQpKSB7CisJCQl0dG1fYm9fa3VubWFwKCZudmJvLT5rbWFwKTsKKwkJCW52Ym8tPnZhbGlkYXRlX21hcHBlZCA9IGZhbHNlOworCQl9CisKIAkJbGlzdF9kZWwoJm52Ym8tPmVudHJ5KTsKIAkJbnZiby0+cmVzZXJ2ZWRfYnkgPSBOVUxMOwogCQl0dG1fYm9fdW5yZXNlcnZlKCZudmJvLT5ibyk7CkBAIC0zMDIsMTEgKzMwNSwxNCBAQAogCQkJaWYgKHJldCA9PSAtRUFHQUlOKQogCQkJCXJldCA9IHR0bV9ib193YWl0X3VucmVzZXJ2ZWQoJm52Ym8tPmJvLCBmYWxzZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCQkJaWYgKHJldCkKKwkJCWlmIChyZXQpIHsKKwkJCQlOVl9FUlJPUihkZXYsICJmYWlsIHJlc2VydmVcbiIpOwogCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCQlnb3RvIHJldHJ5OwogCQl9CiAKKwkJYi0+dXNlcl9wcml2ID0gKHVpbnQ2NF90KSh1bnNpZ25lZCBsb25nKW52Ym87CiAJCW52Ym8tPnJlc2VydmVkX2J5ID0gZmlsZV9wcml2OwogCQludmJvLT5wYmJvX2luZGV4ID0gaTsKIAkJaWYgKChiLT52YWxpZF9kb21haW5zICYgTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU0pICYmCkBAIC0zMzYsOCArMzQyLDEwIEBACiAJCQl9CiAKIAkJCXJldCA9IHR0bV9ib193YWl0X2NwdSgmbnZiby0+Ym8sIGZhbHNlKTsKLQkJCWlmIChyZXQpCisJCQlpZiAocmV0KSB7CisJCQkJTlZfRVJST1IoZGV2LCAiZmFpbCB3YWl0X2NwdVxuIik7CiAJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9CkBAIC0zNTEsNiArMzU5LDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gX191c2VyICp1cGJibyA9CiAJCQkJKHZvaWQgX19mb3JjZSBfX3VzZXIgKikodWludHB0cl90KXVzZXJfcGJib19wdHI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibzsKIAlpbnQgcmV0LCByZWxvY3MgPSAwOwogCkBAIC0zNjIsMzkgKzM3MSw0NiBAQAogCQkJc3Bpbl9sb2NrKCZudmJvLT5iby5sb2NrKTsKIAkJCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJCQlzcGluX3VubG9jaygmbnZiby0+Ym8ubG9jayk7Ci0JCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkJTlZfRVJST1IoZGV2LCAiZmFpbCB3YWl0IG90aGVyIGNoYW5cbiIpOwogCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAogCQlyZXQgPSBub3V2ZWF1X2dlbV9zZXRfZG9tYWluKG52Ym8tPmdlbSwgYi0+cmVhZF9kb21haW5zLAogCQkJCQkgICAgIGItPndyaXRlX2RvbWFpbnMsCiAJCQkJCSAgICAgYi0+dmFsaWRfZG9tYWlucyk7Ci0JCWlmICh1bmxpa2VseShyZXQpKQorCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJTlZfRVJST1IoZGV2LCAiZmFpbCBzZXRfZG9tYWluXG4iKTsKIAkJCXJldHVybiByZXQ7CisJCX0KIAogCQludmJvLT5jaGFubmVsID0gY2hhbjsKIAkJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZudmJvLT5ibywgJm52Ym8tPnBsYWNlbWVudCwKIAkJCQkgICAgICBmYWxzZSwgZmFsc2UpOwogCQludmJvLT5jaGFubmVsID0gTlVMTDsKLQkJaWYgKHVubGlrZWx5KHJldCkpCisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJmYWlsIHR0bV92YWxpZGF0ZVxuIik7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAKLQkJaWYgKG52Ym8tPmJvLm9mZnNldCA9PSBiLT5wcmVzdW1lZF9vZmZzZXQgJiYKKwkJaWYgKG52Ym8tPmJvLm9mZnNldCA9PSBiLT5wcmVzdW1lZC5vZmZzZXQgJiYKIAkJICAgICgobnZiby0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9WUkFNICYmCi0JCSAgICAgIGItPnByZXN1bWVkX2RvbWFpbiAmIE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNKSB8fAorCQkgICAgICBiLT5wcmVzdW1lZC5kb21haW4gJiBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTSkgfHwKIAkJICAgICAobnZiby0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9UVCAmJgotCQkgICAgICBiLT5wcmVzdW1lZF9kb21haW4gJiBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVCkpKQorCQkgICAgICBiLT5wcmVzdW1lZC5kb21haW4gJiBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVCkpKQogCQkJY29udGludWU7CiAKIAkJaWYgKG52Ym8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVFQpCi0JCQliLT5wcmVzdW1lZF9kb21haW4gPSBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVDsKKwkJCWItPnByZXN1bWVkLmRvbWFpbiA9IE5PVVZFQVVfR0VNX0RPTUFJTl9HQVJUOwogCQllbHNlCi0JCQliLT5wcmVzdW1lZF9kb21haW4gPSBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTTsKLQkJYi0+cHJlc3VtZWRfb2Zmc2V0ID0gbnZiby0+Ym8ub2Zmc2V0OwotCQliLT5wcmVzdW1lZF9vayA9IDA7CisJCQliLT5wcmVzdW1lZC5kb21haW4gPSBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTTsKKwkJYi0+cHJlc3VtZWQub2Zmc2V0ID0gbnZiby0+Ym8ub2Zmc2V0OworCQliLT5wcmVzdW1lZC52YWxpZCA9IDA7CiAJCXJlbG9jcysrOwogCi0JCWlmIChEUk1fQ09QWV9UT19VU0VSKCZ1cGJib1tudmJvLT5wYmJvX2luZGV4XSwgYiwgc2l6ZW9mKCpiKSkpCisJCWlmIChEUk1fQ09QWV9UT19VU0VSKCZ1cGJib1tudmJvLT5wYmJvX2luZGV4XS5wcmVzdW1lZCwKKwkJCQkgICAgICZiLT5wcmVzdW1lZCwgc2l6ZW9mKGItPnByZXN1bWVkKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTQwOCw2ICs0MjQsNyBAQAogCQkJICAgICB1aW50NjRfdCB1c2VyX2J1ZmZlcnMsIGludCBucl9idWZmZXJzLAogCQkJICAgICBzdHJ1Y3QgdmFsaWRhdGVfb3AgKm9wLCBpbnQgKmFwcGx5X3JlbG9jcykKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCWludCByZXQsIHJlbG9jcyA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmb3AtPnZyYW1fbGlzdCk7CkBAIC00MTgsMTEgKzQzNSwxNCBAQAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZhbGlkYXRlX2luaXQoY2hhbiwgZmlsZV9wcml2LCBwYmJvLCBucl9idWZmZXJzLCBvcCk7Ci0JaWYgKHVubGlrZWx5KHJldCkpCisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGVfaW5pdFxuIik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0gdmFsaWRhdGVfbGlzdChjaGFuLCAmb3AtPnZyYW1fbGlzdCwgcGJibywgdXNlcl9idWZmZXJzKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGUgdnJhbV9saXN0XG4iKTsKIAkJdmFsaWRhdGVfZmluaShvcCwgTlVMTCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNDMwLDYgKzQ1MCw3IEBACiAKIAlyZXQgPSB2YWxpZGF0ZV9saXN0KGNoYW4sICZvcC0+Z2FydF9saXN0LCBwYmJvLCB1c2VyX2J1ZmZlcnMpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZSBnYXJ0X2xpc3RcbiIpOwogCQl2YWxpZGF0ZV9maW5pKG9wLCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00MzcsNiArNDU4LDcgQEAKIAogCXJldCA9IHZhbGlkYXRlX2xpc3QoY2hhbiwgJm9wLT5ib3RoX2xpc3QsIHBiYm8sIHVzZXJfYnVmZmVycyk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlIGJvdGhfbGlzdFxuIik7CiAJCXZhbGlkYXRlX2Zpbmkob3AsIE5VTEwpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTQ2NSw1OSArNDg3LDgyIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2NfYXBwbHkoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IG5yX2JvLAotCQkJCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9ibyAqYm8sCi0JCQkJdW5zaWduZWQgbnJfcmVsb2NzLCB1aW50NjRfdCBwdHJfcmVsb2NzLAotCQkJCXVuc2lnbmVkIG5yX2R3b3JkcywgdW5zaWduZWQgZmlyc3RfZHdvcmQsCi0JCQkJdWludDMyX3QgKnB1c2hidWYsIGJvb2wgaXNfaW9tZW0pCitub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jX2FwcGx5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmICpyZXEsCisJCQkJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpibykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2MgKnJlbG9jID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGk7CiAKLQlyZWxvYyA9IHVfbWVtY3B5YShwdHJfcmVsb2NzLCBucl9yZWxvY3MsIHNpemVvZigqcmVsb2MpKTsKKwlyZWxvYyA9IHVfbWVtY3B5YShyZXEtPnJlbG9jcywgcmVxLT5ucl9yZWxvY3MsIHNpemVvZigqcmVsb2MpKTsKIAlpZiAoSVNfRVJSKHJlbG9jKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVsb2MpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3JlbG9jczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHJlcS0+bnJfcmVsb2NzOyBpKyspIHsKIAkJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jICpyID0gJnJlbG9jW2ldOwogCQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmI7CisJCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvOwogCQl1aW50MzJfdCBkYXRhOwogCi0JCWlmIChyLT5ib19pbmRleCA+PSBucl9ibyB8fCByLT5yZWxvY19pbmRleCA8IGZpcnN0X2R3b3JkIHx8Ci0JCSAgICByLT5yZWxvY19pbmRleCA+PSBmaXJzdF9kd29yZCArIG5yX2R3b3JkcykgewotCQkJTlZfRVJST1IoZGV2LCAiQmFkIHJlbG9jYXRpb24gJWRcbiIsIGkpOwotCQkJTlZfRVJST1IoZGV2LCAiICBibzogJWQgbWF4ICVkXG4iLCByLT5ib19pbmRleCwgbnJfYm8pOwotCQkJTlZfRVJST1IoZGV2LCAiICBpZDogJWQgbWF4ICVkXG4iLCByLT5yZWxvY19pbmRleCwgbnJfZHdvcmRzKTsKKwkJaWYgKHVubGlrZWx5KHItPmJvX2luZGV4ID4gcmVxLT5ucl9idWZmZXJzKSkgeworCQkJTlZfRVJST1IoZGV2LCAicmVsb2MgYm8gaW5kZXggaW52YWxpZFxuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIAogCQliID0gJmJvW3ItPmJvX2luZGV4XTsKLQkJaWYgKGItPnByZXN1bWVkX29rKQorCQlpZiAoYi0+cHJlc3VtZWQudmFsaWQpCiAJCQljb250aW51ZTsKIAorCQlpZiAodW5saWtlbHkoci0+cmVsb2NfYm9faW5kZXggPiByZXEtPm5yX2J1ZmZlcnMpKSB7CisJCQlOVl9FUlJPUihkZXYsICJyZWxvYyBjb250YWluZXIgYm8gaW5kZXggaW52YWxpZFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJbnZibyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYm9bci0+cmVsb2NfYm9faW5kZXhdLnVzZXJfcHJpdjsKKworCQlpZiAodW5saWtlbHkoci0+cmVsb2NfYm9fb2Zmc2V0ICsgNCA+CisJCQkgICAgIG52Ym8tPmJvLm1lbS5udW1fcGFnZXMgPDwgUEFHRV9TSElGVCkpIHsKKwkJCU5WX0VSUk9SKGRldiwgInJlbG9jIG91dHNpZGUgb2YgYm9cbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFudmJvLT5rbWFwLnZpcnR1YWwpIHsKKwkJCXJldCA9IHR0bV9ib19rbWFwKCZudmJvLT5ibywgMCwgbnZiby0+Ym8ubWVtLm51bV9wYWdlcywKKwkJCQkJICAmbnZiby0+a21hcCk7CisJCQlpZiAocmV0KSB7CisJCQkJTlZfRVJST1IoZGV2LCAiZmFpbGVkIGttYXAgZm9yIHJlbG9jXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW52Ym8tPnZhbGlkYXRlX21hcHBlZCA9IHRydWU7CisJCX0KKwogCQlpZiAoci0+ZmxhZ3MgJiBOT1VWRUFVX0dFTV9SRUxPQ19MT1cpCi0JCQlkYXRhID0gYi0+cHJlc3VtZWRfb2Zmc2V0ICsgci0+ZGF0YTsKKwkJCWRhdGEgPSBiLT5wcmVzdW1lZC5vZmZzZXQgKyByLT5kYXRhOwogCQllbHNlCiAJCWlmIChyLT5mbGFncyAmIE5PVVZFQVVfR0VNX1JFTE9DX0hJR0gpCi0JCQlkYXRhID0gKGItPnByZXN1bWVkX29mZnNldCArIHItPmRhdGEpID4+IDMyOworCQkJZGF0YSA9IChiLT5wcmVzdW1lZC5vZmZzZXQgKyByLT5kYXRhKSA+PiAzMjsKIAkJZWxzZQogCQkJZGF0YSA9IHItPmRhdGE7CiAKIAkJaWYgKHItPmZsYWdzICYgTk9VVkVBVV9HRU1fUkVMT0NfT1IpIHsKLQkJCWlmIChiLT5wcmVzdW1lZF9kb21haW4gPT0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQpCisJCQlpZiAoYi0+cHJlc3VtZWQuZG9tYWluID09IE5PVVZFQVVfR0VNX0RPTUFJTl9HQVJUKQogCQkJCWRhdGEgfD0gci0+dG9yOwogCQkJZWxzZQogCQkJCWRhdGEgfD0gci0+dm9yOwogCQl9CiAKLQkJaWYgKGlzX2lvbWVtKQotCQkJaW93cml0ZTMyX25hdGl2ZShkYXRhLCAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQkJCSZwdXNoYnVmW3ItPnJlbG9jX2luZGV4XSk7Ci0JCWVsc2UKLQkJCXB1c2hidWZbci0+cmVsb2NfaW5kZXhdID0gZGF0YTsKKwkJc3Bpbl9sb2NrKCZudmJvLT5iby5sb2NrKTsKKwkJcmV0ID0gdHRtX2JvX3dhaXQoJm52Ym8tPmJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJc3Bpbl91bmxvY2soJm52Ym8tPmJvLmxvY2spOworCQlpZiAocmV0KSB7CisJCQlOVl9FUlJPUihkZXYsICJyZWxvYyB3YWl0X2lkbGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJbm91dmVhdV9ib193cjMyKG52Ym8sIHItPnJlbG9jX2JvX29mZnNldCA+PiAyLCBkYXRhKTsKIAl9CiAKIAlrZnJlZShyZWxvYyk7CkBAIC01MjgsMzcgKzU3Myw0OCBAQAogbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1ZiAqcmVxID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmJvID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfcHVzaCAqcHVzaDsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmJvOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAJc3RydWN0IHZhbGlkYXRlX29wIG9wOwotCXN0cnVjdCBub3V2ZWF1X2ZlbmNlKiBmZW5jZSA9IDA7Ci0JdWludDMyX3QgKnB1c2hidWYgPSBOVUxMOwotCWludCByZXQgPSAwLCBkb19yZWxvYyA9IDAsIGk7CisJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlID0gMDsKKwlpbnQgaSwgaiwgcmV0ID0gMCwgZG9fcmVsb2MgPSAwOwogCiAJTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKIAlOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4ocmVxLT5jaGFubmVsLCBmaWxlX3ByaXYsIGNoYW4pOwogCi0JaWYgKHJlcS0+bnJfZHdvcmRzID49IGNoYW4tPmRtYS5tYXggfHwKLQkgICAgcmVxLT5ucl9idWZmZXJzID4gTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMgfHwKLQkgICAgcmVxLT5ucl9yZWxvY3MgPiBOT1VWRUFVX0dFTV9NQVhfUkVMT0NTKSB7Ci0JCU5WX0VSUk9SKGRldiwgIlB1c2hidWYgY29uZmlnIGV4Y2VlZHMgbGltaXRzOlxuIik7Ci0JCU5WX0VSUk9SKGRldiwgIiAgZHdvcmRzIDogJWQgbWF4ICVkXG4iLCByZXEtPm5yX2R3b3JkcywKLQkJCSBjaGFuLT5kbWEubWF4IC0gMSk7Ci0JCU5WX0VSUk9SKGRldiwgIiAgYnVmZmVyczogJWQgbWF4ICVkXG4iLCByZXEtPm5yX2J1ZmZlcnMsCi0JCQkgTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMpOwotCQlOVl9FUlJPUihkZXYsICIgIHJlbG9jcyA6ICVkIG1heCAlZFxuIiwgcmVxLT5ucl9yZWxvY3MsCi0JCQkgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyk7CisJcmVxLT52cmFtX2F2YWlsYWJsZSA9IGRldl9wcml2LT5mYl9hcGVyX2ZyZWU7CisJcmVxLT5nYXJ0X2F2YWlsYWJsZSA9IGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9mcmVlOworCWlmICh1bmxpa2VseShyZXEtPm5yX3B1c2ggPT0gMCkpCisJCWdvdG8gb3V0X25leHQ7CisKKwlpZiAodW5saWtlbHkocmVxLT5ucl9wdXNoID4gTk9VVkVBVV9HRU1fTUFYX1BVU0gpKSB7CisJCU5WX0VSUk9SKGRldiwgInB1c2hidWYgcHVzaCBjb3VudCBleGNlZWRzIGxpbWl0OiAlZCBtYXggJWRcbiIsCisJCQkgcmVxLT5ucl9wdXNoLCBOT1VWRUFVX0dFTV9NQVhfUFVTSCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXB1c2hidWYgPSB1X21lbWNweWEocmVxLT5kd29yZHMsIHJlcS0+bnJfZHdvcmRzLCBzaXplb2YodWludDMyX3QpKTsKLQlpZiAoSVNfRVJSKHB1c2hidWYpKQotCQlyZXR1cm4gUFRSX0VSUihwdXNoYnVmKTsKKwlpZiAodW5saWtlbHkocmVxLT5ucl9idWZmZXJzID4gTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMpKSB7CisJCU5WX0VSUk9SKGRldiwgInB1c2hidWYgYm8gY291bnQgZXhjZWVkcyBsaW1pdDogJWQgbWF4ICVkXG4iLAorCQkJIHJlcS0+bnJfYnVmZmVycywgTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkocmVxLT5ucl9yZWxvY3MgPiBOT1VWRUFVX0dFTV9NQVhfUkVMT0NTKSkgeworCQlOVl9FUlJPUihkZXYsICJwdXNoYnVmIHJlbG9jIGNvdW50IGV4Y2VlZHMgbGltaXQ6ICVkIG1heCAlZFxuIiwKKwkJCSByZXEtPm5yX3JlbG9jcywgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXB1c2ggPSB1X21lbWNweWEocmVxLT5wdXNoLCByZXEtPm5yX3B1c2gsIHNpemVvZigqcHVzaCkpOworCWlmIChJU19FUlIocHVzaCkpCisJCXJldHVybiBQVFJfRVJSKHB1c2gpOwogCiAJYm8gPSB1X21lbWNweWEocmVxLT5idWZmZXJzLCByZXEtPm5yX2J1ZmZlcnMsIHNpemVvZigqYm8pKTsKIAlpZiAoSVNfRVJSKGJvKSkgewotCQlrZnJlZShwdXNoYnVmKTsKKwkJa2ZyZWUocHVzaCk7CiAJCXJldHVybiBQVFJfRVJSKGJvKTsKIAl9CiAKQEAgLTU2NywyMTUgKzYyMyw4OSBAQAogCS8qIFZhbGlkYXRlIGJ1ZmZlciBsaXN0ICovCiAJcmV0ID0gbm91dmVhdV9nZW1fcHVzaGJ1Zl92YWxpZGF0ZShjaGFuLCBmaWxlX3ByaXYsIGJvLCByZXEtPmJ1ZmZlcnMsCiAJCQkJCSAgIHJlcS0+bnJfYnVmZmVycywgJm9wLCAmZG9fcmVsb2MpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JLyogQXBwbHkgYW55IHJlbG9jYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkICovCi0JaWYgKGRvX3JlbG9jKSB7Ci0JCXJldCA9IG5vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2NfYXBwbHkoY2hhbiwgcmVxLT5ucl9idWZmZXJzLAotCQkJCQkJICAgICAgYm8sIHJlcS0+bnJfcmVsb2NzLAotCQkJCQkJICAgICAgcmVxLT5yZWxvY3MsCi0JCQkJCQkgICAgICByZXEtPm5yX2R3b3JkcywgMCwKLQkJCQkJCSAgICAgIHB1c2hidWYsIGZhbHNlKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCS8qIEVtaXQgcHVzaCBidWZmZXIgdG8gdGhlIGh3Ci0JICovCi0JcmV0ID0gUklOR19TUEFDRShjaGFuLCByZXEtPm5yX2R3b3Jkcyk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlPVVRfUklOR3AoY2hhbiwgcHVzaGJ1ZiwgcmVxLT5ucl9kd29yZHMpOwotCi0JcmV0ID0gbm91dmVhdV9mZW5jZV9uZXcoY2hhbiwgJmZlbmNlLCB0cnVlKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgImVycm9yIGZlbmNpbmcgcHVzaGJ1ZjogJWRcbiIsIHJldCk7Ci0JCVdJTkRfUklORyhjaGFuKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKG5vdXZlYXVfZ2VtX3B1c2hidWZfc3luYyhjaGFuKSkgewotCQlyZXQgPSBub3V2ZWF1X2ZlbmNlX3dhaXQoZmVuY2UsIE5VTEwsIGZhbHNlLCBmYWxzZSk7Ci0JCWlmIChyZXQpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCByZXEtPm5yX2R3b3JkczsgaSsrKQotCQkJCU5WX0VSUk9SKGRldiwgIjB4JTA4eFxuIiwgcHVzaGJ1ZltpXSk7Ci0JCQlOVl9FUlJPUihkZXYsICJeXiBhYm92ZSBwdXNoIGJ1ZmZlciBpcyBmYWlsIDooXG4iKTsKLQkJfQotCX0KLQotb3V0OgotCXZhbGlkYXRlX2ZpbmkoJm9wLCBmZW5jZSk7Ci0Jbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCoqKSZmZW5jZSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0Ja2ZyZWUocHVzaGJ1Zik7Ci0Ja2ZyZWUoYm8pOwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgUFVTSEJVRl9DQUwgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfMjApCi0KLWludAotbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1Zl9jYWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfY2FsbCAqcmVxID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmJvID0gTlVMTDsKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwotCXN0cnVjdCBub3V2ZWF1X2JvICpwYmJvOwotCXN0cnVjdCB2YWxpZGF0ZV9vcCBvcDsKLQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSogZmVuY2UgPSAwOwotCWludCBpLCByZXQgPSAwLCBkb19yZWxvYyA9IDA7Ci0KLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwotCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihyZXEtPmNoYW5uZWwsIGZpbGVfcHJpdiwgY2hhbik7Ci0KLQlpZiAodW5saWtlbHkocmVxLT5oYW5kbGUgPT0gMCkpCi0JCWdvdG8gb3V0X25leHQ7Ci0KLQlpZiAocmVxLT5ucl9idWZmZXJzID4gTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMgfHwKLQkgICAgcmVxLT5ucl9yZWxvY3MgPiBOT1VWRUFVX0dFTV9NQVhfUkVMT0NTKSB7Ci0JCU5WX0VSUk9SKGRldiwgIlB1c2hidWYgY29uZmlnIGV4Y2VlZHMgbGltaXRzOlxuIik7Ci0JCU5WX0VSUk9SKGRldiwgIiAgYnVmZmVyczogJWQgbWF4ICVkXG4iLCByZXEtPm5yX2J1ZmZlcnMsCi0JCQkgTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMpOwotCQlOVl9FUlJPUihkZXYsICIgIHJlbG9jcyA6ICVkIG1heCAlZFxuIiwgcmVxLT5ucl9yZWxvY3MsCi0JCQkgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJvID0gdV9tZW1jcHlhKHJlcS0+YnVmZmVycywgcmVxLT5ucl9idWZmZXJzLCBzaXplb2YoKmJvKSk7Ci0JaWYgKElTX0VSUihibykpCi0JCXJldHVybiBQVFJfRVJSKGJvKTsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCS8qIFZhbGlkYXRlIGJ1ZmZlciBsaXN0ICovCi0JcmV0ID0gbm91dmVhdV9nZW1fcHVzaGJ1Zl92YWxpZGF0ZShjaGFuLCBmaWxlX3ByaXYsIGJvLCByZXEtPmJ1ZmZlcnMsCi0JCQkJCSAgIHJlcS0+bnJfYnVmZmVycywgJm9wLCAmZG9fcmVsb2MpOwogCWlmIChyZXQpIHsKIAkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGU6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBWYWxpZGF0ZSBETUEgcHVzaCBidWZmZXIgKi8KLQlnZW0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIHJlcS0+aGFuZGxlKTsKLQlpZiAoIWdlbSkgewotCQlOVl9FUlJPUihkZXYsICJVbmtub3duIHBiIGhhbmRsZSAweCUwOHhcbiIsIHJlcS0+aGFuZGxlKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCXBiYm8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKLQotCWlmICgocmVxLT5vZmZzZXQgJiAzKSB8fCByZXEtPm5yX2R3b3JkcyA8IDIgfHwKLQkgICAgKHVuc2lnbmVkIGxvbmcpcmVxLT5vZmZzZXQgPiAodW5zaWduZWQgbG9uZylwYmJvLT5iby5tZW0uc2l6ZSB8fAotCSAgICAodW5zaWduZWQgbG9uZylyZXEtPm5yX2R3b3JkcyA+Ci0JICAgICAoKHVuc2lnbmVkIGxvbmcpKHBiYm8tPmJvLm1lbS5zaXplIC0gcmVxLT5vZmZzZXQgKSA+PiAyKSkgewotCQlOVl9FUlJPUihkZXYsICJwYiBjYWxsIG1pc2FsaWduZWQgb3Igb3V0IG9mIGJvdW5kczogIgotCQkJICAgICAgIiVkICsgJWQgKiA0ID4gJWxkXG4iLAotCQkJIHJlcS0+b2Zmc2V0LCByZXEtPm5yX2R3b3JkcywgcGJiby0+Ym8ubWVtLnNpemUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmcGJiby0+Ym8sIGZhbHNlLCBmYWxzZSwgdHJ1ZSwKLQkJCSAgICAgY2hhbi0+ZmVuY2Uuc2VxdWVuY2UpOwotCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAicmVzdiBwYjogJWRcbiIsIHJldCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5vdXZlYXVfYm9fcGxhY2VtZW50X3NldChwYmJvLCAxIDw8IGNoYW4tPnB1c2hidWZfYm8tPmJvLm1lbS5tZW1fdHlwZSk7Ci0JcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZwYmJvLT5ibywgJnBiYm8tPnBsYWNlbWVudCwgZmFsc2UsIGZhbHNlKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlIHBiOiAlZFxuIiwgcmV0KTsKLQkJdHRtX2JvX3VucmVzZXJ2ZSgmcGJiby0+Ym8pOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZwYmJvLT5lbnRyeSwgJm9wLmJvdGhfbGlzdCk7Ci0KLQkvKiBJZiBwcmVzdW1lZCByZXR1cm4gYWRkcmVzcyBkb2Vzbid0IG1hdGNoLCB3ZSBuZWVkIHRvIG1hcCB0aGUKLQkgKiBwdXNoIGJ1ZmZlciBhbmQgZml4IGl0Li4KLQkgKi8KLQlpZiAoIVBVU0hCVUZfQ0FMKSB7Ci0JCXVpbnQzMl90IHJldGFkZHk7Ci0KLQkJaWYgKGNoYW4tPmRtYS5mcmVlIDwgNCArIE5PVVZFQVVfRE1BX1NLSVBTKSB7Ci0JCQlyZXQgPSBub3V2ZWF1X2RtYV93YWl0KGNoYW4sIDQgKyBOT1VWRUFVX0RNQV9TS0lQUyk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJTlZfRVJST1IoZGV2LCAiam1wX3NwYWNlOiAlZFxuIiwgcmV0KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCi0JCXJldGFkZHkgID0gY2hhbi0+cHVzaGJ1Zl9iYXNlICsgKChjaGFuLT5kbWEuY3VyICsgMikgPDwgMik7Ci0JCXJldGFkZHkgfD0gMHgyMDAwMDAwMDsKLQkJaWYgKHJldGFkZHkgIT0gcmVxLT5zdWZmaXgwKSB7Ci0JCQlyZXEtPnN1ZmZpeDAgPSByZXRhZGR5OwotCQkJZG9fcmVsb2MgPSAxOwotCQl9Ci0JfQotCiAJLyogQXBwbHkgYW55IHJlbG9jYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkICovCiAJaWYgKGRvX3JlbG9jKSB7Ci0JCXZvaWQgKnBidmlydDsKLQkJYm9vbCBpc19pb21lbTsKLQkJcmV0ID0gdHRtX2JvX2ttYXAoJnBiYm8tPmJvLCAwLCBwYmJvLT5iby5tZW0ubnVtX3BhZ2VzLAotCQkJCSAgJnBiYm8tPmttYXApOwotCQlpZiAocmV0KSB7Ci0JCQlOVl9FUlJPUihkZXYsICJrbWFwIHBiOiAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJcGJ2aXJ0ID0gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJnBiYm8tPmttYXAsICZpc19pb21lbSk7Ci0JCXJldCA9IG5vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2NfYXBwbHkoY2hhbiwgcmVxLT5ucl9idWZmZXJzLCBibywKLQkJCQkJCSAgICAgIHJlcS0+bnJfcmVsb2NzLAotCQkJCQkJICAgICAgcmVxLT5yZWxvY3MsCi0JCQkJCQkgICAgICByZXEtPm5yX2R3b3JkcywKLQkJCQkJCSAgICAgIHJlcS0+b2Zmc2V0IC8gNCwKLQkJCQkJCSAgICAgIHBidmlydCwgaXNfaW9tZW0pOwotCi0JCWlmICghUFVTSEJVRl9DQUwpIHsKLQkJCW5vdXZlYXVfYm9fd3IzMihwYmJvLAotCQkJCQlyZXEtPm9mZnNldCAvIDQgKyByZXEtPm5yX2R3b3JkcyAtIDIsCi0JCQkJCXJlcS0+c3VmZml4MCk7Ci0JCX0KLQotCQl0dG1fYm9fa3VubWFwKCZwYmJvLT5rbWFwKTsKKwkJcmV0ID0gbm91dmVhdV9nZW1fcHVzaGJ1Zl9yZWxvY19hcHBseShkZXYsIHJlcSwgYm8pOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJyZWxvYyBhcHBseTogJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChQVVNIQlVGX0NBTCkgewotCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDIpOworCWlmIChjaGFuLT5kbWEuaWJfbWF4KSB7CisJCXJldCA9IG5vdXZlYXVfZG1hX3dhaXQoY2hhbiwgcmVxLT5ucl9wdXNoICsgMSwgNik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0lORk8oZGV2LCAibnY1MGNhbF9zcGFjZTogJWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCByZXEtPm5yX3B1c2g7IGkrKykgeworCQkJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKQorCQkJCWJvW3B1c2hbaV0uYm9faW5kZXhdLnVzZXJfcHJpdjsKKworCQkJbnY1MF9kbWFfcHVzaChjaGFuLCBudmJvLCBwdXNoW2ldLm9mZnNldCwKKwkJCQkgICAgICBwdXNoW2ldLmxlbmd0aCk7CisJCX0KKwl9IGVsc2UKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8yMCkgeworCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIHJlcS0+bnJfcHVzaCAqIDIpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJjYWxfc3BhY2U6ICVkXG4iLCByZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJT1VUX1JJTkcoY2hhbiwgKChwYmJvLT5iby5tZW0ubW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVCkgKwotCQkJCSAgcmVxLT5vZmZzZXQpIHwgMik7Ci0JCU9VVF9SSU5HKGNoYW4sIDApOworCisJCWZvciAoaSA9IDA7IGkgPCByZXEtPm5yX3B1c2g7IGkrKykgeworCQkJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKQorCQkJCWJvW3B1c2hbaV0uYm9faW5kZXhdLnVzZXJfcHJpdjsKKwkJCXN0cnVjdCBkcm1fbW1fbm9kZSAqbWVtID0gbnZiby0+Ym8ubWVtLm1tX25vZGU7CisKKwkJCU9VVF9SSU5HKGNoYW4sICgobWVtLT5zdGFydCA8PCBQQUdFX1NISUZUKSArCisJCQkJCXB1c2hbaV0ub2Zmc2V0KSB8IDIpOworCQkJT1VUX1JJTkcoY2hhbiwgMCk7CisJCX0KIAl9IGVsc2UgewotCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDIgKyBOT1VWRUFVX0RNQV9TS0lQUyk7CisJCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgcmVxLT5ucl9wdXNoICogKDIgKyBOT1VWRUFVX0RNQV9TS0lQUykpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJqbXBfc3BhY2U6ICVkXG4iLCByZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJT1VUX1JJTkcoY2hhbiwgKChwYmJvLT5iby5tZW0ubW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVCkgKwotCQkJCSAgcmVxLT5vZmZzZXQpIHwgMHgyMDAwMDAwMCk7Ci0JCU9VVF9SSU5HKGNoYW4sIDApOwogCi0JCS8qIFNwYWNlIHRoZSBqdW1wcyBhcGFydCB3aXRoIE5PUHMuICovCi0JCWZvciAoaSA9IDA7IGkgPCBOT1VWRUFVX0RNQV9TS0lQUzsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucl9wdXNoOyBpKyspIHsKKwkJCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykKKwkJCQlib1twdXNoW2ldLmJvX2luZGV4XS51c2VyX3ByaXY7CisJCQlzdHJ1Y3QgZHJtX21tX25vZGUgKm1lbSA9IG52Ym8tPmJvLm1lbS5tbV9ub2RlOworCQkJdWludDMyX3QgY21kOworCisJCQljbWQgPSBjaGFuLT5wdXNoYnVmX2Jhc2UgKyAoKGNoYW4tPmRtYS5jdXIgKyAyKSA8PCAyKTsKKwkJCWNtZCB8PSAweDIwMDAwMDAwOworCQkJaWYgKHVubGlrZWx5KGNtZCAhPSByZXEtPnN1ZmZpeDApKSB7CisJCQkJaWYgKCFudmJvLT5rbWFwLnZpcnR1YWwpIHsKKwkJCQkJcmV0ID0gdHRtX2JvX2ttYXAoJm52Ym8tPmJvLCAwLAorCQkJCQkJCSAgbnZiby0+Ym8ubWVtLgorCQkJCQkJCSAgbnVtX3BhZ2VzLAorCQkJCQkJCSAgJm52Ym8tPmttYXApOworCQkJCQlpZiAocmV0KSB7CisJCQkJCQlXSU5EX1JJTkcoY2hhbik7CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCQkJCQludmJvLT52YWxpZGF0ZV9tYXBwZWQgPSB0cnVlOworCQkJCX0KKworCQkJCW5vdXZlYXVfYm9fd3IzMihudmJvLCAocHVzaFtpXS5vZmZzZXQgKworCQkJCQkJcHVzaFtpXS5sZW5ndGggLSA4KSAvIDQsIGNtZCk7CisJCQl9CisKKwkJCU9VVF9SSU5HKGNoYW4sICgobWVtLT5zdGFydCA8PCBQQUdFX1NISUZUKSArCisJCQkJCXB1c2hbaV0ub2Zmc2V0KSB8IDB4MjAwMDAwMDApOwogCQkJT1VUX1JJTkcoY2hhbiwgMCk7CisJCQlmb3IgKGogPSAwOyBqIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGorKykKKwkJCQlPVVRfUklORyhjaGFuLCAwKTsKKwkJfQogCX0KIAogCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sICZmZW5jZSwgdHJ1ZSk7CkBAIC03OTAsOSArNzIwLDE0IEBACiAJbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCoqKSZmZW5jZSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJa2ZyZWUoYm8pOworCWtmcmVlKHB1c2gpOwogCiBvdXRfbmV4dDoKLQlpZiAoUFVTSEJVRl9DQUwpIHsKKwlpZiAoY2hhbi0+ZG1hLmliX21heCkgeworCQlyZXEtPnN1ZmZpeDAgPSAweDAwMDAwMDAwOworCQlyZXEtPnN1ZmZpeDEgPSAweDAwMDAwMDAwOworCX0gZWxzZQorCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzIwKSB7CiAJCXJlcS0+c3VmZml4MCA9IDB4MDAwMjAwMDA7CiAJCXJlcS0+c3VmZml4MSA9IDB4MDAwMDAwMDA7CiAJfSBlbHNlIHsKQEAgLTgwNCwxOSArNzM5LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKLW5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWZfY2FsbDIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9jYWxsICpyZXEgPSBkYXRhOwotCi0JcmVxLT52cmFtX2F2YWlsYWJsZSA9IGRldl9wcml2LT5mYl9hcGVyX2ZyZWU7Ci0JcmVxLT5nYXJ0X2F2YWlsYWJsZSA9IGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9mcmVlOwotCi0JcmV0dXJuIG5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWZfY2FsbChkZXYsIGRhdGEsIGZpbGVfcHJpdik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdWludDMyX3QKIGRvbWFpbl90b190dG0oc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHVpbnQzMl90IGRvbWFpbikKIHsKQEAgLTgzMSw3NCArNzUzLDYgQEAKIH0KIAogaW50Ci1ub3V2ZWF1X2dlbV9pb2N0bF9waW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9waW4gKnJlcSA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07Ci0Jc3RydWN0IG5vdXZlYXVfYm8gKm52Ym87Ci0JaW50IHJldCA9IDA7Ci0KLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJTlZfRVJST1IoZGV2LCAicGluIG9ubHkgYWxsb3dlZCB3aXRob3V0IGtlcm5lbCBtb2Rlc2V0dGluZ1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghRFJNX1NVU0VSKERSTV9DVVJQUk9DKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgcmVxLT5oYW5kbGUpOwotCWlmICghZ2VtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQludmJvID0gbm91dmVhdV9nZW1fb2JqZWN0KGdlbSk7Ci0KLQlyZXQgPSBub3V2ZWF1X2JvX3BpbihudmJvLCBkb21haW5fdG9fdHRtKG52Ym8sIHJlcS0+ZG9tYWluKSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXEtPm9mZnNldCA9IG52Ym8tPmJvLm9mZnNldDsKLQlpZiAobnZiby0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9UVCkKLQkJcmVxLT5kb21haW4gPSBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVDsKLQllbHNlCi0JCXJlcS0+ZG9tYWluID0gTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU07Ci0KLW91dDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotbm91dmVhdV9nZW1faW9jdGxfdW5waW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcGluICpyZXEgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwotCWludCByZXQ7Ci0KLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCByZXEtPmhhbmRsZSk7Ci0JaWYgKCFnZW0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gbm91dmVhdV9ib191bnBpbihub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKSk7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAogbm91dmVhdV9nZW1faW9jdGxfY3B1X3ByZXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewpAQCAtOTM1LDkgKzc4OSw3IEBACiAJfQogCiBvdXQ6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NjUsOSArODE3LDcgQEAKIAlyZXQgPSAwOwogCiBvdXQ6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05ODYsOSArODM2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBub3V2ZWF1X2dlbV9pbmZvKGdlbSwgcmVxKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwppbmRleCBkYzQ2NzkyLi43ODU1YjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIHNldFBMTF9zaW5nbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgcmVnLCBzdHJ1Y3Qgbm91dmVhdV9wbGxfdmFscyAqcHYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgY2hpcF92ZXJzaW9uID0gZGV2X3ByaXYtPnZiaW9zLT5jaGlwX3ZlcnNpb247CisJaW50IGNoaXBfdmVyc2lvbiA9IGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb247CiAJdWludDMyX3Qgb2xkcGxsID0gTlZSZWFkUkFNREFDKGRldiwgMCwgcmVnKTsKIAlpbnQgb2xkTiA9IChvbGRwbGwgPj4gOCkgJiAweGZmLCBvbGRNID0gb2xkcGxsICYgMHhmZjsKIAl1aW50MzJfdCBwbGwgPSAob2xkcGxsICYgMHhmZmY4MDAwMCkgfCBwdi0+bG9nMlAgPDwgMTYgfCBwdi0+Tk0xOwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCSAgICAgICBzdHJ1Y3Qgbm91dmVhdV9wbGxfdmFscyAqcHYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgY2hpcF92ZXJzaW9uID0gZGV2X3ByaXYtPnZiaW9zLT5jaGlwX3ZlcnNpb247CisJaW50IGNoaXBfdmVyc2lvbiA9IGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb247CiAJYm9vbCBudjMwMzUgPSBjaGlwX3ZlcnNpb24gPT0gMHgzMCB8fCBjaGlwX3ZlcnNpb24gPT0gMHgzNTsKIAl1aW50MzJfdCByZWcyID0gcmVnMSArICgocmVnMSA9PSBOVl9SQU1EQUNfVlBMTDIpID8gMHg1YyA6IDB4NzApOwogCXVpbnQzMl90IG9sZHBsbDEgPSBOVlJlYWRSQU1EQUMoZGV2LCAwLCByZWcxKTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCQkgIHN0cnVjdCBub3V2ZWF1X3BsbF92YWxzICpwdikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBjdiA9IGRldl9wcml2LT52Ymlvcy0+Y2hpcF92ZXJzaW9uOworCWludCBjdiA9IGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb247CiAKIAlpZiAoY3YgPT0gMHgzMCB8fCBjdiA9PSAweDMxIHx8IGN2ID09IDB4MzUgfHwgY3YgPT0gMHgzNiB8fAogCSAgICBjdiA+PSAweDQwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuYwppbmRleCA3MGU5OTRkLi44ODU4M2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaTJjLmMKQEAgLTI1NCwxNiArMjU0LDE2IEBACiBub3V2ZWF1X2kyY19maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCi0JaWYgKGluZGV4ID4gRENCX01BWF9OVU1fSTJDX0VOVFJJRVMpCisJaWYgKGluZGV4ID49IERDQl9NQVhfTlVNX0kyQ19FTlRSSUVTKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghYmlvcy0+YmRjYi5kY2IuaTJjW2luZGV4XS5jaGFuKSB7Ci0JCWlmIChub3V2ZWF1X2kyY19pbml0KGRldiwgJmJpb3MtPmJkY2IuZGNiLmkyY1tpbmRleF0sIGluZGV4KSkKKwlpZiAoIWJpb3MtPmRjYi5pMmNbaW5kZXhdLmNoYW4pIHsKKwkJaWYgKG5vdXZlYXVfaTJjX2luaXQoZGV2LCAmYmlvcy0+ZGNiLmkyY1tpbmRleF0sIGluZGV4KSkKIAkJCXJldHVybiBOVUxMOwogCX0KIAotCXJldHVybiBiaW9zLT5iZGNiLmRjYi5pMmNbaW5kZXhdLmNoYW47CisJcmV0dXJuIGJpb3MtPmRjYi5pMmNbaW5kZXhdLmNoYW47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCmluZGV4IDQ0N2Y5ZjYuLjk1MjIwZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYwpAQCAtNjkxLDExICs2OTEsMTQgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopYXJnOwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3Qgc3RhdHVzLCBmYmRldl9mbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN0YXR1cyA9IG52X3JkMzIoZGV2LCBOVjAzX1BNQ19JTlRSXzApOwogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwogCWlmIChkZXZfcHJpdi0+ZmJkZXZfaW5mbykgewogCQlmYmRldl9mbGFncyA9IGRldl9wcml2LT5mYmRldl9pbmZvLT5mbGFnczsKIAkJZGV2X3ByaXYtPmZiZGV2X2luZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOwpAQCAtNzMzLDUgKzczNiw3IEBACiAJaWYgKGRldl9wcml2LT5mYmRldl9pbmZvKQogCQlkZXZfcHJpdi0+ZmJkZXZfaW5mby0+ZmxhZ3MgPSBmYmRldl9mbGFnczsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggZDk5ZGMwOC4uOTUzN2YzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtNjEsMTEgKzYxLDggQEAKIAogCWNoYW4tPm5vdGlmaWVyX2JvID0gbnRmeTsKIG91dF9lcnI6Ci0JaWYgKHJldCkgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG50ZnktPmdlbSk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCX0KKwlpZiAocmV0KQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChudGZ5LT5nZW0pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTgxLDggKzc4LDggQEAKIAlub3V2ZWF1X2JvX3VubWFwKGNoYW4tPm5vdGlmaWVyX2JvKTsKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJbm91dmVhdV9ib191bnBpbihjaGFuLT5ub3RpZmllcl9ibyk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoY2hhbi0+bm90aWZpZXJfYm8tPmdlbSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoY2hhbi0+bm90aWZpZXJfYm8tPmdlbSk7CiAJbm91dmVhdV9tZW1fdGFrZWRvd24oJmNoYW4tPm5vdGlmaWVyX2hlYXApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKaW5kZXggYTQ4NTFhZi4uZWI4ZjA4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImRybV9zYXJlYS5oIgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgogI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CiAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCkBAIC0zNzEsNiArMzcyLDMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgbm91dmVhdV9zd2l0Y2hlcm9vX3NldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCit7CisJcG1fbWVzc2FnZV90IHBtbSA9IHsgLmV2ZW50ID0gUE1fRVZFTlRfU1VTUEVORCB9OworCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgeworCQlwcmludGsoS0VSTl9FUlIgIlZHQSBzd2l0Y2hlcm9vOiBzd2l0Y2hlZCBub3V2ZWF1IG9uXG4iKTsKKwkJbm91dmVhdV9wY2lfcmVzdW1lKHBkZXYpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkdBIHN3aXRjaGVyb286IHN3aXRjaGVkIG5vdXZlYXUgb2ZmXG4iKTsKKwkJbm91dmVhdV9wY2lfc3VzcGVuZChwZGV2LCBwbW0pOworCX0KK30KKworc3RhdGljIGJvb2wgbm91dmVhdV9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlib29sIGNhbl9zd2l0Y2g7CisKKwlzcGluX2xvY2soJmRldi0+Y291bnRfbG9jayk7CisJY2FuX3N3aXRjaCA9IChkZXYtPm9wZW5fY291bnQgPT0gMCk7CisJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CisJcmV0dXJuIGNhbl9zd2l0Y2g7Cit9CisKIGludAogbm91dmVhdV9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKQEAgLTM4NCw2ICs0MDksOCBAQAogCQlyZXR1cm4gMDsKIAogCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBkZXYsIE5VTEwsIG5vdXZlYXVfdmdhX3NldF9kZWNvZGUpOworCXZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChkZXYtPnBkZXYsIG5vdXZlYXVfc3dpdGNoZXJvb19zZXRfc3RhdGUsCisJCQkJICAgICAgIG5vdXZlYXVfc3dpdGNoZXJvb19jYW5fc3dpdGNoKTsKIAogCS8qIEluaXRpYWxpc2UgaW50ZXJuYWwgZHJpdmVyIEFQSSBob29rcyAqLwogCXJldCA9IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhkZXYpOwpAQCAtMzkxLDYgKzQxOCw3IEBACiAJCWdvdG8gb3V0OwogCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwogCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jayk7CiAKIAkvKiBQYXJzZSBCSU9TIHRhYmxlcyAvIFJ1biBpbml0IHRhYmxlcyBpZiBjYXJkIG5vdCBQT1NUZWQgKi8KIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewpAQCAtNjE3LDExICs2NDUsNiBAQAogCU5WX0RFQlVHKGRldiwgInZlbmRvcjogMHglWCBkZXZpY2U6IDB4JVggY2xhc3M6IDB4JVhcbiIsCiAJCSBkZXYtPnBjaV92ZW5kb3IsIGRldi0+cGNpX2RldmljZSwgZGV2LT5wZGV2LT5jbGFzcyk7CiAKLQlkZXZfcHJpdi0+YWNwaV9kc20gPSBub3V2ZWF1X2RzbV9wcm9iZShkZXYpOwotCi0JaWYgKGRldl9wcml2LT5hY3BpX2RzbSkKLQkJbm91dmVhdV9oeWJyaWRfc2V0dXAoZGV2KTsKLQogCWRldl9wcml2LT53cSA9IGNyZWF0ZV93b3JrcXVldWUoIm5vdXZlYXUiKTsKIAlpZiAoIWRldl9wcml2LT53cSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NzYsMTMgKzc5OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAotbm91dmVhdV9pb2N0bF9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXJldHVybiBub3V2ZWF1X2NhcmRfaW5pdChkZXYpOwotfQotCiBpbnQgbm91dmVhdV9pb2N0bF9nZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCmluZGV4IGQyZjE0M2UuLmExZDFlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC05MjYsOSArOTI2LDcgQEAKIAludl9jcnRjLT5jdXJzb3Iuc2V0X29mZnNldChudl9jcnRjLCBudl9jcnRjLT5jdXJzb3Iub2Zmc2V0KTsKIAludl9jcnRjLT5jdXJzb3Iuc2hvdyhudl9jcnRjLCB0cnVlKTsKIG91dDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCmluZGV4IDFkNzNiMTUuLjFjYjE5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYwpAQCAtMjMwLDEzICsyMzAsMTMgQEAKIAlpZiAoZGNiLT50eXBlID09IE9VVFBVVF9UVikgewogCQl0ZXN0dmFsID0gUkdCX1RFU1RfREFUQSgweGEwLCAweGEwLCAweGEwKTsKIAotCQlpZiAoZGV2X3ByaXYtPnZiaW9zLT50dmRhY3Rlc3R2YWwpCi0JCQl0ZXN0dmFsID0gZGV2X3ByaXYtPnZiaW9zLT50dmRhY3Rlc3R2YWw7CisJCWlmIChkZXZfcHJpdi0+dmJpb3MudHZkYWN0ZXN0dmFsKQorCQkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy50dmRhY3Rlc3R2YWw7CiAJfSBlbHNlIHsKIAkJdGVzdHZhbCA9IFJHQl9URVNUX0RBVEEoMHgxNDAsIDB4MTQwLCAweDE0MCk7IC8qIDB4OTQwNTAxNDAgKi8KIAotCQlpZiAoZGV2X3ByaXYtPnZiaW9zLT5kYWN0ZXN0dmFsKQotCQkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbDsKKwkJaWYgKGRldl9wcml2LT52Ymlvcy5kYWN0ZXN0dmFsKQorCQkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy5kYWN0ZXN0dmFsOwogCX0KIAogCXNhdmVkX3J0ZXN0X2N0cmwgPSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX1RFU1RfQ09OVFJPTCArIHJlZ29mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCA0ODNmODc1Li40MTYzNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTI2OSwxMCArMjY5LDEwIEBACiAJcmVncC0+ZnBfaG9yaXpfcmVnc1tGUF9UT1RBTF0gPSBvdXRwdXRfbW9kZS0+aHRvdGFsIC0gMTsKIAlpZiAoIW52X2dmNF9kaXNwX2FyY2goZGV2KSB8fAogCSAgICAob3V0cHV0X21vZGUtPmhzeW5jX3N0YXJ0IC0gb3V0cHV0X21vZGUtPmhkaXNwbGF5KSA+PQotCQkJCQlkZXZfcHJpdi0+dmJpb3MtPmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoKQorCQkJCQlkZXZfcHJpdi0+dmJpb3MuZGlnaXRhbF9taW5fZnJvbnRfcG9yY2gpCiAJCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfQ1JUQ10gPSBvdXRwdXRfbW9kZS0+aGRpc3BsYXk7CiAJZWxzZQotCQlyZWdwLT5mcF9ob3Jpel9yZWdzW0ZQX0NSVENdID0gb3V0cHV0X21vZGUtPmhzeW5jX3N0YXJ0IC0gZGV2X3ByaXYtPnZiaW9zLT5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCAtIDE7CisJCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfQ1JUQ10gPSBvdXRwdXRfbW9kZS0+aHN5bmNfc3RhcnQgLSBkZXZfcHJpdi0+dmJpb3MuZGlnaXRhbF9taW5fZnJvbnRfcG9yY2ggLSAxOwogCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfU1lOQ19TVEFSVF0gPSBvdXRwdXRfbW9kZS0+aHN5bmNfc3RhcnQgLSAxOwogCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfU1lOQ19FTkRdID0gb3V0cHV0X21vZGUtPmhzeW5jX2VuZCAtIDE7CiAJcmVncC0+ZnBfaG9yaXpfcmVnc1tGUF9WQUxJRF9TVEFSVF0gPSBvdXRwdXRfbW9kZS0+aHNrZXc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCmluZGV4IGVmNzcyMTUuLmM3ODk4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCkBAIC05MywxMCArOTMsOSBAQAogbnYwNF9kaXNwbGF5X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBhcnNlZF9kY2IgKmRjYiA9IGRldl9wcml2LT52Ymlvcy0+ZGNiOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JdWludDE2X3QgY29ubmVjdG9yWzE2XSA9IHsgMCB9OwogCWludCBpLCByZXQ7CiAKIAlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKQEAgLTE1NCw1MiArMTUzLDEwIEBACiAKIAkJaWYgKHJldCkKIAkJCWNvbnRpbnVlOwotCi0JCWNvbm5lY3RvcltkY2JlbnQtPmNvbm5lY3Rvcl0gfD0gKDEgPDwgZGNiZW50LT50eXBlKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50ID0gJmRjYi0+ZW50cnlbaV07Ci0JCXVpbnQxNl90IGVuY29kZXJzOwotCQlpbnQgdHlwZTsKLQotCQllbmNvZGVycyA9IGNvbm5lY3RvcltkY2JlbnQtPmNvbm5lY3Rvcl07Ci0JCWlmICghKGVuY29kZXJzICYgKDEgPDwgZGNiZW50LT50eXBlKSkpCi0JCQljb250aW51ZTsKLQkJY29ubmVjdG9yW2RjYmVudC0+Y29ubmVjdG9yXSA9IDA7Ci0KLQkJc3dpdGNoIChkY2JlbnQtPnR5cGUpIHsKLQkJY2FzZSBPVVRQVVRfQU5BTE9HOgotCQkJaWYgKCFNVUxUSVBMRV9FTkNPREVSUyhlbmNvZGVycykpCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7Ci0JCQllbHNlCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1VUUFVUX1RNRFM6Ci0JCQlpZiAoIU1VTFRJUExFX0VOQ09ERVJTKGVuY29kZXJzKSkKLQkJCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7Ci0JCQllbHNlCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1VUUFVUX0xWRFM6Ci0JCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFM7Ci0jaWYgMAotCQkJLyogZG9uJ3QgY3JlYXRlIGkyYyBhZGFwdGVyIHdoZW4gbHZkcyBkZGMgbm90IGFsbG93ZWQgKi8KLQkJCWlmIChkY2JlbnQtPmx2ZHNjb25mLnVzZV9zdHJhcHNfZm9yX21vZGUgfHwKLQkJCSAgICBkZXZfcHJpdi0+dmJpb3MtPmZwX25vX2RkYykKLQkJCQlpMmNfaW5kZXggPSAweGY7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIE9VVFBVVF9UVjoKLQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVFY7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKGRldiwgZGNiZW50LT5jb25uZWN0b3IsIHR5cGUpOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgZGNiLT5jb25uZWN0b3IuZW50cmllczsgaSsrKQorCQlub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoZGV2LCAmZGNiLT5jb25uZWN0b3IuZW50cnlbaV0pOwogCiAJLyogU2F2ZSBwcmV2aW91cyBzdGF0ZSAqLwogCU5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCmluZGV4IGZkMDFjYWEuLjNkYTkwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0Jd2lkdGggPSAoaW1hZ2UtPndpZHRoICsgMzEpICYgfjMxOworCXdpZHRoID0gQUxJR04oaW1hZ2UtPndpZHRoLCAzMik7CiAJZHNpemUgPSAod2lkdGggKiBpbWFnZS0+aGVpZ2h0KSA+PiA1OwogCiAJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYwppbmRleCBmMzEzNDdiLi42NmZlNTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYwpAQCAtMTE3LDYgKzExNyw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19mYWtlKGRldiwgTlYwNF9SQU1GQyhjaGFuLT5pZCksIH4wLApAQCAtMTI3LDYgKzEyOCw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCiAJLyogU2V0dXAgaW5pdGlhbCBzdGF0ZSAqLwogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCVJBTUZDX1dSKERNQV9QVVQsIGNoYW4tPnB1c2hidWZfYmFzZSk7CkBAIC0xNDQsNiArMTQ3LDggQEAKIAkvKiBlbmFibGUgdGhlIGZpZm8gZG1hIG9wZXJhdGlvbiAqLwogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX01PREUsCiAJCW52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX01PREUpIHwgKDEgPDwgY2hhbi0+aWQpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfdHYuYwppbmRleCA5YzYzMDk5Li5jNGUzNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF90di5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAludl9lbmNvZGVyLT5vciA9IGZmcyhlbnRyeS0+b3IpIC0gMTsKIAogCS8qIFJ1biB0aGUgc2xhdmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQlhZGFwID0gJmRldl9wcml2LT52Ymlvcy0+ZGNiLT5pMmNbaTJjX2luZGV4XS5jaGFuLT5hZGFwdGVyOworCWFkYXAgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYi5pMmNbaTJjX2luZGV4XS5jaGFuLT5hZGFwdGVyOwogCiAJd2FzX2xvY2tlZCA9IE5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKaW5kZXggMjFhYzZlNC4uNzRjODgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwpAQCAtNDUsOCArNDUsOCBAQAogCiAjZGVmaW5lIFJHQl9URVNUX0RBVEEociwgZywgYikgKHIgPDwgMCB8IGcgPDwgMTAgfCBiIDw8IDIwKQogCXRlc3R2YWwgPSBSR0JfVEVTVF9EQVRBKDB4ODIsIDB4ZWIsIDB4ODIpOwotCWlmIChkZXZfcHJpdi0+dmJpb3MtPnR2ZGFjdGVzdHZhbCkKLQkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy0+dHZkYWN0ZXN0dmFsOworCWlmIChkZXZfcHJpdi0+dmJpb3MudHZkYWN0ZXN0dmFsKQorCQl0ZXN0dmFsID0gZGV2X3ByaXYtPnZiaW9zLnR2ZGFjdGVzdHZhbDsKIAogCWRhY2NsayA9IE5WUmVhZFJBTURBQyhkZXYsIDAsIE5WX1BSQU1EQUNfREFDQ0xLICsgcmVnb2Zmc2V0KTsKIAloZWFkID0gKGRhY2NsayAmIDB4MTAwKSA+PiA4OwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCQkgICAgICFlbmMtPmNydGMgJiYKIAkJCSAgICAgbnYwNF9kZnBfZ2V0X2JvdW5kX2hlYWQoZGV2LCBkY2IpID09IGhlYWQpIHsKIAkJCQludjA0X2RmcF9iaW5kX2hlYWQoZGV2LCBkY2IsIGhlYWQgXiAxLAotCQkJCQkJZGV2X3ByaXYtPlZCSU9TLmZwLmR1YWxfbGluayk7CisJCQkJCQlkZXZfcHJpdi0+dmJpb3MuZnAuZHVhbF9saW5rKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmlmby5jCmluZGV4IGI0ZjE5Y2MuLjZiMmVmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmlmby5jCkBAIC0zNyw2ICszNyw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGZjID0gTlY0MF9SQU1GQyhjaGFuLT5pZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X2Zha2UoZGV2LCBOVjQwX1JBTUZDKGNoYW4tPmlkKSwgfjAsCkBAIC00NSw2ICs0Niw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDAsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDQsIGNoYW4tPnB1c2hidWZfYmFzZSk7CkBAIC02Myw2ICs2Niw4IEBACiAJLyogZW5hYmxlIHRoZSBmaWZvIGRtYSBvcGVyYXRpb24gKi8KIAludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLAogCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19NT0RFKSB8ICgxIDw8IGNoYW4tPmlkKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCmluZGV4IGQxYTY1MWUuLmNmYWJlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCkBAIC0zNTgsOSArMzU4LDcgQEAKIAludl9jcnRjLT5jdXJzb3Iuc2hvdyhudl9jcnRjLCB0cnVlKTsKIAogb3V0OgotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKaW5kZXggZjA4ZjA0MmEuLjFmZDk1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNzksOCArNzksOCBAQAogCX0KIAogCS8qIFVzZSBiaW9zIHByb3ZpZGVkIHZhbHVlIGlmIHBvc3NpYmxlLiAqLwotCWlmIChkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWwpIHsKLQkJbG9hZF9wYXR0ZXJuID0gZGV2X3ByaXYtPnZiaW9zLT5kYWN0ZXN0dmFsOworCWlmIChkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbCkgeworCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbDsKIAkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJICBsb2FkX3BhdHRlcm4pOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCmluZGV4IDkwZjBiZjUuLjYxYTg5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCkBAIC0zNzAsOSArMzcwLDcgQEAKIAkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAkJc3RydWN0IGRjYl9ncGlvX2VudHJ5ICpncGlvOwogCi0JCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJICYmCi0JCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEICYmCi0JCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwkJaWYgKGNvbm4tPmRjYi0+Z3Bpb190YWcgPT0gMHhmZikKIAkJCWNvbnRpbnVlOwogCiAJCWdwaW8gPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIGNvbm4tPmRjYi0+Z3Bpb190YWcpOwpAQCAtNDY1LDggKzQ2Myw3IEBACiBpbnQgbnY1MF9kaXNwbGF5X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBhcnNlZF9kY2IgKmRjYiA9IGRldl9wcml2LT52Ymlvcy0+ZGNiOwotCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKIAlpbnQgcmV0LCBpOwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CkBAIC01MjIsNDQgKzUxOSwxMyBAQAogCQkJTlZfV0FSTihkZXYsICJEQ0IgZW5jb2RlciAlZCB1bmtub3duXG4iLCBlbnRyeS0+dHlwZSk7CiAJCQljb250aW51ZTsKIAkJfQotCi0JCWNvbm5lY3RvcltlbnRyeS0+Y29ubmVjdG9yXSB8PSAoMSA8PCBlbnRyeS0+dHlwZSk7CiAJfQogCi0JLyogSXQgYXBwZWFycyB0aGF0IERDQiAzLjArIFZCSU9TIGhhcyBhIGNvbm5lY3RvciB0YWJsZSwgaG93ZXZlciwKLQkgKiBJJ20gbm90IDEwMCUgY2VydGFpbiBob3cgdG8gZGVjb2RlIGl0IGNvcnJlY3RseSB5ZXQgc28ganVzdAotCSAqIGxvb2sgYXQgd2hhdCBlbmNvZGVycyBhcmUgcHJlc2VudCBvbiBlYWNoIGNvbm5lY3RvciBpbmRleCBhbmQKLQkgKiBhdHRlbXB0IHRvIGRlcml2ZSB0aGUgY29ubmVjdG9yIHR5cGUgZnJvbSB0aGF0LgotCSAqLwotCWZvciAoaSA9IDAgOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSAmZGNiLT5lbnRyeVtpXTsKLQkJdWludDE2X3QgZW5jb2RlcnM7Ci0JCWludCB0eXBlOwotCi0JCWVuY29kZXJzID0gY29ubmVjdG9yW2VudHJ5LT5jb25uZWN0b3JdOwotCQlpZiAoIShlbmNvZGVycyAmICgxIDw8IGVudHJ5LT50eXBlKSkpCisJZm9yIChpID0gMCA7IGkgPCBkY2ItPmNvbm5lY3Rvci5lbnRyaWVzOyBpKyspIHsKKwkJaWYgKGkgIT0gMCAmJiBkY2ItPmNvbm5lY3Rvci5lbnRyeVtpXS5pbmRleCA9PQorCQkJICAgICAgZGNiLT5jb25uZWN0b3IuZW50cnlbaSAtIDFdLmluZGV4KQogCQkJY29udGludWU7Ci0JCWNvbm5lY3RvcltlbnRyeS0+Y29ubmVjdG9yXSA9IDA7Ci0KLQkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0RQKSkgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9UTURTKSkgewotCQkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0FOQUxPRykpCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJZWxzZQotCQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9BTkFMT0cpKSB7Ci0JCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9MVkRTKSkgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOwotCQl9IGVsc2UgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOwotCQl9Ci0KLQkJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCi0JCQljb250aW51ZTsKLQotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoZGV2LCBlbnRyeS0+Y29ubmVjdG9yLCB0eXBlKTsKKwkJbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKGRldiwgJmRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldKTsKIAl9CiAKIAlyZXQgPSBudjUwX2Rpc3BsYXlfaW5pdChkZXYpOwpAQCAtNjY3LDggKzYzMyw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnZiaW9zLT5kY2ItPmVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQgPSAmZGV2X3ByaXYtPnZiaW9zLT5kY2ItPmVudHJ5W2ldOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dmJpb3MuZGNiLmVudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYi5lbnRyeVtpXTsKIAogCQlpZiAoZGNiZW50LT50eXBlICE9IHR5cGUpCiAJCQljb250aW51ZTsKQEAgLTY5Miw3ICs2NTgsNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBOVUxMOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50MzJfdCBtYywgc2NyaXB0ID0gMCwgb3I7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNzEwLDcgKzY3Niw3IEBACiAJc3dpdGNoIChkY2JlbnQtPnR5cGUpIHsKIAljYXNlIE9VVFBVVF9MVkRTOgogCQlzY3JpcHQgPSAobWMgPj4gOCkgJiAweGY7Ci0JCWlmIChiaW9zLT5wdWIuZnBfbm9fZGRjKSB7CisJCWlmIChiaW9zLT5mcF9ub19kZGMpIHsKIAkJCWlmIChiaW9zLT5mcC5kdWFsX2xpbmspCiAJCQkJc2NyaXB0IHw9IDB4MDEwMDsKIAkJCWlmIChiaW9zLT5mcC5pZl9pc18yNGJpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwppbmRleCAwZjU3Y2RmLi45OTNjNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXdpZHRoID0gKGltYWdlLT53aWR0aCArIDMxKSAmIH4zMTsKKwl3aWR0aCA9IEFMSUdOKGltYWdlLT53aWR0aCwgMzIpOwogCWR3b3JkcyA9ICh3aWR0aCAqIGltYWdlLT5oZWlnaHQpID4+IDU7CiAKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDgxNCwgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCmluZGV4IDIwNGE3OWYuLmUyMGMwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCkBAIC0yNDMsNiArMjQzLDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1mYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbi0+aWQpOwpAQCAtMjc4LDE5ICsyNzksMjEgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAotCW52X3dvMzIoZGV2LCByYW1mYywgMHgwOC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwotCW52X3dvMzIoZGV2LCByYW1mYywgMHgxMC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg0OC80LCBjaGFuLT5wdXNoYnVmLT5pbnN0YW5jZSA+PiA0KTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4ODAvNCwgKDB4YyA8PCAyNCkgfCAoY2hhbi0+cmFtaHQtPmluc3RhbmNlID4+IDQpKTsKLQludl93bzMyKGRldiwgcmFtZmMsIDB4M2MvNCwgMHgwMDA4NjA3OCk7CiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDQ0LzQsIDB4MjEwMWZmZmYpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg2MC80LCAweDdmZmZmZmZmKTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4NDAvNCwgMHgwMDAwMDAwMCk7CiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDdjLzQsIDB4MzAwMDAwMDEpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg3OC80LCAweDAwMDAwMDAwKTsKLQludl93bzMyKGRldiwgcmFtZmMsIDB4NGMvNCwgMHhmZmZmZmZmZik7CisJbnZfd28zMihkZXYsIHJhbWZjLCAweDNjLzQsIDB4NDAzZjYwNzgpOworCW52X3dvMzIoZGV2LCByYW1mYywgMHg1MC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UgKworCQkJCSAgICBjaGFuLT5kbWEuaWJfYmFzZSAqIDQpOworCW52X3dvMzIoZGV2LCByYW1mYywgMHg1NC80LCBkcm1fb3JkZXIoY2hhbi0+ZG1hLmliX21heCArIDEpIDw8IDE2KTsKIAogCWlmICghSVNfRzgwKSB7CiAJCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbi0+Z3B1b2JqLCAwLCBjaGFuLT5pZCk7CkBAIC0zMDYsMTAgKzMwOSwxMiBAQAogCXJldCA9IG52NTBfZmlmb19jaGFubmVsX2VuYWJsZShkZXYsIGNoYW4tPmlkLCBmYWxzZSk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJlcnJvciBlbmFibGluZyBjaCVkOiAlZFxuIiwgY2hhbi0+aWQsIHJldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+cmFtZmMpOwogCQlyZXR1cm4gcmV0OwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCA2ZDUwNDgwLi44NTdhMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0yOCwzMCArMjgsNyBAQAogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjUwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjUwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjkyLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjkyLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk4LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk4LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmEwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmEwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE1LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE1LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE4LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE4LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFhLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFhLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFjLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFjLmN0eHZhbHMiKTsKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKICNkZWZpbmUgSVNfRzgwICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDUwKQogCkBAIC0xMTEsOSArODgsMzQgQEAKIAogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKLQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOwotCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKQotCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOworCWlmIChub3V2ZWF1X2N0eGZ3KSB7CisJCW5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKGRldik7CisJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjdHhfc2l6ZSA9IDB4NzAwMDA7CisJfQorCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OworCQl1aW50MzJfdCAqY3AgPSBrbWFsbG9jKDUxMiAqIDQsIEdGUF9LRVJORUwpOworCQlpbnQgaTsKKwkJaWYgKCFjcCkgeworCQkJTlZfRVJST1IoZGV2LCAiQ291bGRuJ3QgYWxsb2MgY3R4cHJvZyEgRGlzYWJsaW5nIGFjY2VsZXJhdGlvbi5cbiIpOworCQkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKKwkJCXJldHVybiAwOworCQl9CisJCWN0eC5kZXYgPSBkZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCQljdHguZGF0YSA9IGNwOworCQljdHguY3R4cHJvZ19tYXggPSA1MTI7CisJCWlmICghbnY1MF9ncmN0eF9pbml0KCZjdHgpKSB7CisJCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSBjdHguY3R4dmFsc19wb3MgKiA0OworCisJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjdHguY3R4cHJvZ19sZW47IGkrKykKKwkJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0RBVEEsIGNwW2ldKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguYWNjZWxfYmxvY2tlZCA9IHRydWU7CisJCX0KKwkJa2ZyZWUoY3ApOworCX0KIAogCW52X3dyMzIoZGV2LCAweDQwMDMyMCwgNCk7CiAJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9DVVIsIDApOwpAQCAtMTkzLDEzICsxOTUsMTMgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaW4gPSBjaGFuLT5yYW1pbi0+Z3B1b2JqOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqY3R4OwotCXVpbnQzMl90IGdyY3R4X3NpemUgPSAweDcwMDAwOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCWludCBoZHIsIHJldDsKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW4tPmlkKTsKIAotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBncmN0eF9zaXplLCAweDEwMDAsCi0JCQkJICAgICBOVk9CSl9GTEFHX1pFUk9fQUxMT0MgfAorCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwZ3JhcGgtPmdyY3R4X3NpemUsCisJCQkJICAgICAweDEwMDAsIE5WT0JKX0ZMQUdfWkVST19BTExPQyB8CiAJCQkJICAgICBOVk9CSl9GTEFHX1pFUk9fRlJFRSwgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjA5LDcgKzIxMSw3IEBACiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwMCkvNCwgMHgwMDE5MDAwMik7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwNCkvNCwgY2hhbi0+cmFtaW5fZ3JjdHgtPmluc3RhbmNlICsKLQkJCQkJICAgZ3JjdHhfc2l6ZSAtIDEpOworCQkJCQkgICBwZ3JhcGgtPmdyY3R4X3NpemUgLSAxKTsKIAludl93bzMyKGRldiwgcmFtaW4sIChoZHIgKyAweDA4KS80LCBjaGFuLT5yYW1pbl9ncmN0eC0+aW5zdGFuY2UpOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MGMpLzQsIDApOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MTApLzQsIDApOwpAQCAtMjE3LDcgKzIxOSwxNSBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7CisJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CisJCWN0eC5kZXYgPSBjaGFuLT5kZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCQljdHguZGF0YSA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJCW52NTBfZ3JjdHhfaW5pdCgmY3R4KTsKKwl9IGVsc2UgeworCQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7CisJfQogCW52X3dvMzIoZGV2LCBjdHgsIDB4MDAwMDAvNCwgY2hhbi0+cmFtaW4tPmluc3RhbmNlID4+IDEyKTsKIAlpZiAoKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHhhMCkKIAkJbnZfd28zMihkZXYsIGN0eCwgMHgwMDAwNC80LCAweDAwMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA1ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmN0eC5jCkBAIC0wLDAgKzEsMjM2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IE1hcmNpbiBLb8WbY2llbG5pY2tpCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2RlZmluZSBDUF9GTEFHX0NMRUFSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfU0VUICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTiAgICAgICAgKCgwICogMzIpICsgMCkKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9MT0FEICAgMAorI2RlZmluZSBDUF9GTEFHX1NXQVBfRElSRUNUSU9OX1NBVkUgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LMDEgICAgICAgICAgICAgICAgICgoMCAqIDMyKSArIDEpCisjZGVmaW5lIENQX0ZMQUdfVU5LMDFfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTkswMV9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzAzICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAzKQorI2RlZmluZSBDUF9GTEFHX1VOSzAzX0NMRUFSICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfVU5LMDNfU0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX1NBVkUgICAgICAgICAgICAgKCgwICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX1NBVkVfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9MT0FEICAgICAgICAgICAgICgoMCAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9MT0FEX05PVF9QRU5ESU5HIDAKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfUEVORElORyAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzBCICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAweGIpCisjZGVmaW5lIENQX0ZMQUdfVU5LMEJfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTkswQl9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzFEICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAweDFkKQorI2RlZmluZSBDUF9GTEFHX1VOSzFEX0NMRUFSICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfVU5LMURfU0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTksyMCAgICAgICAgICAgICAgICAgKCgxICogMzIpICsgMCkKKyNkZWZpbmUgQ1BfRkxBR19VTksyMF9DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzIwX1NFVCAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMiAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0JVU1kgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfSURMRSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDIgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgyICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfWEZFUiAgICAgICAgICAgICAgICAgICgoMiAqIDMyKSArIDExKQorI2RlZmluZSBDUF9GTEFHX1hGRVJfSURMRSAgICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfWEZFUl9CVVNZICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19ORVdDVFggICAgICAgICAgICAgICAgKCgyICogMzIpICsgMTIpCisjZGVmaW5lIENQX0ZMQUdfTkVXQ1RYX0JVU1kgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19ORVdDVFhfRE9ORSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDIgKiAzMikgKyAxMykKKyNkZWZpbmUgQ1BfRkxBR19BTFdBWVNfRkFMU0UgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19UUlVFICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMWZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVXQ1RYICAgICAgICAgICAgICAgIDB4MDA2MDAwMDQKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDUKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMDYKKyNkZWZpbmUgQ1BfU0VUX1hGRVJfUE9JTlRFUiAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGMKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMGQKKyNkZWZpbmUgQ1BfRElTQUJMRTEgICAgICAgICAgICAgIDB4MDA5MGZmZmYKKyNkZWZpbmUgQ1BfRElTQUJMRTIgICAgICAgICAgICAgIDB4MDA5MWZmZmYKKyNkZWZpbmUgQ1BfWEZFUl8xICAgICAgMHgwMDgwMDBmZgorI2RlZmluZSBDUF9YRkVSXzIgICAgICAweDAwODgwMGZmCisjZGVmaW5lIENQX1NFRUtfMSAgICAgIDB4MDBjMDAwZmYKKyNkZWZpbmUgQ1BfU0VFS18yICAgICAgMHgwMGM4MDBmZgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9ncmN0eC5oIgorCisvKgorICogVGhpcyBjb2RlIGRlYWxzIHdpdGggUEdSQVBIIGNvbnRleHRzIG9uIE5WNTAgZmFtaWx5IGNhcmRzLiBMaWtlIE5WNDAsIGl0J3MKKyAqIHRoZSBHUFUgaXRzZWxmIHRoYXQgZG9lcyBjb250ZXh0LXN3aXRjaGluZywgYnV0IGl0IG5lZWRzIGEgc3BlY2lhbAorICogbWljcm9jb2RlIHRvIGRvIGl0LiBBbmQgaXQncyB0aGUgZHJpdmVyJ3MgdGFzayB0byBzdXBwbHkgdGhpcyBtaWNyb2NvZGUsCisgKiBmdXJ0aGVyIGtub3duIGFzIGN0eHByb2csIGFzIHdlbGwgYXMgdGhlIGluaXRpYWwgY29udGV4dCB2YWx1ZXMsIGtub3duCisgKiBhcyBjdHh2YWxzLgorICoKKyAqIFdpdGhvdXQgY3R4cHJvZywgeW91IGNhbm5vdCBzd2l0Y2ggY29udGV4dHMuIE5vdCBldmVuIGluIHNvZnR3YXJlLCBzaW5jZQorICogdGhlIG1ham9yaXR5IG9mIGNvbnRleHQgW3hmZXIgc3RyYW5kc10gaXNuJ3QgYWNjZXNzaWJsZSBkaXJlY3RseS4gWW91J3JlCisgKiBzdHVjayB3aXRoIGEgc2luZ2xlIGNoYW5uZWwsIGFuZCB5b3UgYWxzbyBzdWZmZXIgYWxsIHRoZSBwcm9ibGVtcyByZXN1bHRpbmcKKyAqIGZyb20gbWlzc2luZyBjdHh2YWxzLCBzaW5jZSB5b3UgY2Fubm90IGxvYWQgdGhlbS4KKyAqCisgKiBXaXRob3V0IGN0eHZhbHMsIHlvdSdyZSBzdHVjayB3aXRoIFBHUkFQSCdzIGRlZmF1bHQgY29udGV4dC4gSXQncyBlbm91Z2ggdG8KKyAqIHJ1biAyZCBvcGVyYXRpb25zLCBidXQgdHJ5aW5nIHRvIHV0aWxpc2UgM2Qgb3IgQ1VEQSB3aWxsIGp1c3QgbG9jayB5b3UgdXAsCisgKiBzaW5jZSB5b3UgZG9uJ3QgaGF2ZS4uLiBzb21lIHNvcnQgb2YgbmVlZGVkIHNldHVwLgorICoKKyAqIE5vdXZlYXUgd2lsbCBqdXN0IGRpc2FibGUgYWNjZWxlcmF0aW9uIGlmIG5vdCBnaXZlbiBjdHhwcm9nICsgY3R4dmFscywgc2luY2UKKyAqIGl0J3MgdG9vIG11Y2ggaGFzc2xlIHRvIGhhbmRsZSBuby1jdHhwcm9nIGFzIGEgc3BlY2lhbCBjYXNlLgorICovCisKKy8qCisgKiBIb3cgY3R4cHJvZ3Mgd29yay4KKyAqCisgKiBUaGUgY3R4cHJvZyBpcyB3cml0dGVuIGluIGl0cyBvd24ga2luZCBvZiBtaWNyb2NvZGUsIHdpdGggdmVyeSBzbWFsbCBhbmQKKyAqIGNyYXBweSBzZXQgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiBZb3UgdXBsb2FkIGl0IHRvIGEgc21hbGwgWzUxMiBpbnNuc10KKyAqIGFyZWEgb2YgbWVtb3J5IG9uIFBHUkFQSCwgYW5kIGl0J2xsIGJlIHJ1biB3aGVuIFBGSUZPIHdhbnRzIFBHUkFQSCB0bworICogc3dpdGNoIGNoYW5uZWwuIG9yIHdoZW4gdGhlIGRyaXZlciBleHBsaWNpdGVseSByZXF1ZXN0cyBpdC4gU3R1ZmYgdmlzaWJsZQorICogdG8gY3R4cHJvZyBjb25zaXN0cyBvZjogUEdSQVBIIE1NSU8gcmVnaXN0ZXJzLCBQR1JBUEggY29udGV4dCBzdHJhbmRzLAorICogdGhlIHBlci1jaGFubmVsIGNvbnRleHQgc2F2ZSBhcmVhIGluIFZSQU0gW2tub3duIGFzIGN0eHZhbHMgb3IgZ3JjdHhdLAorICogNCBmbGFncyByZWdpc3RlcnMsIGEgc2NyYXRjaCByZWdpc3RlciwgdHdvIGdyY3R4IHBvaW50ZXJzLCBwbHVzIG1hbnkKKyAqIHJhbmRvbSBwb29ybHktdW5kZXJzdG9vZCBkZXRhaWxzLgorICoKKyAqIFdoZW4gY3R4cHJvZyBydW5zLCBpdCdzIHN1cHBvc2VkIHRvIGNoZWNrIHdoYXQgb3BlcmF0aW9ucyBhcmUgYXNrZWQgb2YgaXQsCisgKiBzYXZlIG9sZCBjb250ZXh0IGlmIHJlcXVlc3RlZCwgb3B0aW9uYWxseSByZXNldCBQR1JBUEggYW5kIHN3aXRjaCB0byB0aGUKKyAqIG5ldyBjaGFubmVsLCBhbmQgbG9hZCB0aGUgbmV3IGNvbnRleHQuIENvbnRleHQgY29uc2lzdHMgb2YgdGhyZWUgbWFqb3IKKyAqIHBhcnRzOiBzdWJzZXQgb2YgTU1JTyByZWdpc3RlcnMgYW5kIHR3byAieGZlciBhcmVhcyIuCisgKi8KKworLyogVE9ETzoKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAtIE5WQXg6IG1ha2UgYSBUUCBzdWJyb3V0aW5lLCB1c2UgaXQuCisgKiAgLSB1c2UgMHg0MDA4ZmMgaW5zdGVhZCBvZiAweDE1NDA/CisgKi8KKworZW51bSBjcF9sYWJlbCB7CisJY3BfY2hlY2tfbG9hZCA9IDEsCisJY3Bfc2V0dXBfYXV0b19sb2FkLAorCWNwX3NldHVwX2xvYWQsCisJY3Bfc2V0dXBfc2F2ZSwKKwljcF9zd2FwX3N0YXRlLAorCWNwX3ByZXBhcmVfZXhpdCwKKwljcF9leGl0LAorfTsKKworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfbW1pbyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KTsKK3N0YXRpYyB2b2lkIG52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcjIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CisKKy8qIE1haW4gZnVuY3Rpb246IGNvbnN0cnVjdCB0aGUgY3R4cHJvZyBza2VsZXRvbiwgY2FsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLiAqLworCitpbnQKK252NTBfZ3JjdHhfaW5pdChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NTA6CisJY2FzZSAweDg0OgorCWNhc2UgMHg4NjoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJY2FzZSAweGEwOgorCWNhc2UgMHhhNToKKwljYXNlIDB4YTg6CisJY2FzZSAweGFhOgorCWNhc2UgMHhhYzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTlZfRVJST1IoY3R4LT5kZXYsICJJIGRvbid0IGtub3cgaG93IHRvIG1ha2UgYSBjdHhwcm9nIGZvciAiCisJCQkJICAgInlvdXIgTlYleCBjYXJkLlxuIiwgZGV2X3ByaXYtPmNoaXBzZXQpOworCQlOVl9FUlJPUihjdHgtPmRldiwgIkRpc2FibGluZyBhY2NlbGVyYXRpb24uIFBsZWFzZSBjb250YWN0ICIKKwkJCQkgICAidGhlIGRldnMuXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCS8qIGRlY2lkZSB3aGV0aGVyIHdlJ3JlIGxvYWRpbmcvdW5sb2FkaW5nIHRoZSBjb250ZXh0ICovCisJY3BfYnJhIChjdHgsIEFVVE9fU0FWRSwgUEVORElORywgY3Bfc2V0dXBfc2F2ZSk7CisJY3BfYnJhIChjdHgsIFVTRVJfU0FWRSwgUEVORElORywgY3Bfc2V0dXBfc2F2ZSk7CisKKwljcF9uYW1lKGN0eCwgY3BfY2hlY2tfbG9hZCk7CisJY3BfYnJhIChjdHgsIEFVVE9fTE9BRCwgUEVORElORywgY3Bfc2V0dXBfYXV0b19sb2FkKTsKKwljcF9icmEgKGN0eCwgVVNFUl9MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9sb2FkKTsKKwljcF9icmEgKGN0eCwgQUxXQVlTLCBUUlVFLCBjcF9leGl0KTsKKworCS8qIHNldHVwIGZvciBjb250ZXh0IGxvYWQgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc2V0dXBfYXV0b19sb2FkKTsKKwljcF9vdXQgKGN0eCwgQ1BfRElTQUJMRTEpOworCWNwX291dCAoY3R4LCBDUF9ESVNBQkxFMik7CisJY3Bfb3V0IChjdHgsIENQX0VOQUJMRSk7CisJY3Bfb3V0IChjdHgsIENQX05FWFRfVE9fU1dBUCk7CisJY3Bfc2V0IChjdHgsIFVOSzAxLCBTRVQpOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF9vdXQgKGN0eCwgQ1BfTkVXQ1RYKTsKKwljcF93YWl0KGN0eCwgTkVXQ1RYLCBCVVNZKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX2JyYSAoY3R4LCBVTkswQiwgU0VULCBjcF9wcmVwYXJlX2V4aXQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIFNFVCk7CisJY3Bfd2FpdChjdHgsIFNUQVRVUywgQlVTWSk7CisJY3Bfc2V0IChjdHgsIFVOSzAxLCBTRVQpOworCWNwX3NldCAoY3R4LCBTV0FQX0RJUkVDVElPTiwgU0FWRSk7CisKKwkvKiBnZW5lcmFsIFBHUkFQSCBzdGF0ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlKTsKKwljcF9zZXQgKGN0eCwgVU5LMDMsIFNFVCk7CisJY3BfcG9zIChjdHgsIDB4MDAwMDQvNCk7CisJY3BfY3R4IChjdHgsIDB4NDAwODI4LCAxKTsgLyogbmVlZGVkLiBvdGhlcndpc2UsIGZsaWNrZXJpbmcgaGFwcGVucy4gKi8KKwljcF9wb3MgKGN0eCwgMHgwMDEwMC80KTsKKwludjUwX2dyYXBoX2NvbnN0cnVjdF9tbWlvKGN0eCk7CisJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcjEoY3R4KTsKKwludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyMihjdHgpOworCisJY3BfYnJhIChjdHgsIFNXQVBfRElSRUNUSU9OLCBTQVZFLCBjcF9jaGVja19sb2FkKTsKKworCWNwX3NldCAoY3R4LCBVTksyMCwgU0VUKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOyAvKiBubyBpZGVhIHdoeSB0aGlzIGlzIG5lZWRlZCwgYnV0IGZpeGVzIGF0IGxlYXN0IG9uZSBsb2NrdXAuICovCisJY3BfbHNyIChjdHgsIGN0eC0+Y3R4dmFsc19iYXNlKTsKKwljcF9vdXQgKGN0eCwgQ1BfU0VUX1hGRVJfUE9JTlRFUik7CisJY3BfbHNyIChjdHgsIDQpOworCWNwX291dCAoY3R4LCBDUF9TRUVLXzEpOworCWNwX291dCAoY3R4LCBDUF9YRkVSXzEpOworCWNwX3dhaXQoY3R4LCBYRkVSLCBCVVNZKTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9zZXQgKGN0eCwgVU5LMDEsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgVU5LMDMsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIENMRUFSKTsKKworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAweDQwMDsgLyogcGFkZGluZy4uLiBubyBpZGVhIHdoeSB5b3UgbmVlZCBpdCAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3RzIE1NSU8gcGFydCBvZiBjdHhwcm9nIGFuZCBjdHh2YWxzLiBKdXN0IGEgbWF0dGVyIG9mIGtub3dpbmcgd2hpY2gKKyAqIHJlZ2lzdGVycyB0byBzYXZlL3Jlc3RvcmUgYW5kIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlbS4KKyAqLworCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfbW1pbyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSwgajsKKwlpbnQgb2Zmc2V0LCBiYXNlOworCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMiAoY3R4LT5kZXYsIDB4MTU0MCk7CisKKwkvKiAwODAwICovCisJY3BfY3R4KGN0eCwgMHg0MDA4MDgsIDcpOworCWdyX2RlZihjdHgsIDB4NDAwODE0LCAweDAwMDAwMDMwKTsKKwljcF9jdHgoY3R4LCAweDQwMDgzNCwgMHgzMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4MzQsIDB4ZmY0MDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDgzOCwgMHhmZmYwMDA4MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODNjLCAweGZmZjcwMDkwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NDAsIDB4ZmZlODA2YTgpOworCX0KKwlncl9kZWYoY3R4LCAweDQwMDg0NCwgMHgwMDAwMDAwMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCWdyX2RlZihjdHgsIDB4NDAwODk0LCAweDAwMDAxMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDhlOCwgMHgwMDAwMDAwMyk7CisJZ3JfZGVmKGN0eCwgMHg0MDA4ZWMsIDB4MDAwMDEwMDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQljcF9jdHgoY3R4LCAweDQwMDkwOCwgMHhiKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCWNwX2N0eChjdHgsIDB4NDAwOTA4LCAweGMpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDA5MDgsIDB4ZSk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMDAsIDB4MSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMTAsIDB4MSk7CisJCWdyX2RlZihjdHgsIDB4NDAwYjEwLCAweDAwMDE2MjlkKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMjAsIDB4MSk7CisJCWdyX2RlZihjdHgsIDB4NDAwYjIwLCAweDAwMDE2MjlkKTsKKwl9CisKKwkvKiAwQzAwICovCisJY3BfY3R4KGN0eCwgMHg0MDBjMDgsIDB4Mik7CisJZ3JfZGVmKGN0eCwgMHg0MDBjMDgsIDB4MDAwMGZlMGMpOworCisJLyogMTAwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDEwMDgsIDB4NCk7CisJCWdyX2RlZihjdHgsIDB4NDAxMDE0LCAweDAwMDAxMDAwKTsKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkgeworCQljcF9jdHgoY3R4LCAweDQwMTAwOCwgMHg1KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDEwMTgsIDB4MDAwMDEwMDApOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxMDA4LCAweDUpOworCQlncl9kZWYoY3R4LCAweDQwMTAxOCwgMHgwMDAwNDAwMCk7CisJfQorCisJLyogMTQwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxNDAwLCAweDgpOworCWNwX2N0eChjdHgsIDB4NDAxNDI0LCAweDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlncl9kZWYoY3R4LCAweDQwMTQyYywgMHgwMDAxZmQ4Nyk7CisJZWxzZQorCQlncl9kZWYoY3R4LCAweDQwMTQyYywgMHgwMDAwMDE4Nyk7CisJY3BfY3R4KGN0eCwgMHg0MDE1NDAsIDB4NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE1NTAsIDB4MDAwMDEwMTgpOworCisJLyogMTgwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxODE0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDAxODE0LCAweDAwMDAwMGZmKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTgxYywgMHhlKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDE4NTAsIDB4MDAwMDAwMDQpOworCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAxODFjLCAweGYpOworCQlncl9kZWYoY3R4LCAweDQwMTg1NCwgMHgwMDAwMDAwNCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4MWMsIDB4MTMpOworCQlncl9kZWYoY3R4LCAweDQwMTg2NCwgMHgwMDAwMDAwNCk7CisJfQorCisJLyogMUMwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxYzAwLCAweDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NTA6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDAwMDEwMDVmKTsKKwkJYnJlYWs7CisJY2FzZSAweDg0OgorCWNhc2UgMHg4NjoKKwljYXNlIDB4OTQ6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDA0NGQwMGRmKTsKKwkJYnJlYWs7CisJY2FzZSAweDkyOgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJY2FzZSAweGEwOgorCWNhc2UgMHhhYToKKwljYXNlIDB4YWM6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDA0MjUwMGRmKTsKKwkJYnJlYWs7CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwkJZ3JfZGVmKGN0eCwgMHg0MDFjMDAsIDB4MTQyNTAwZGYpOworCQlicmVhazsKKwl9CisKKwkvKiAyNDAwICovCisJY3BfY3R4KGN0eCwgMHg0MDI0MDAsIDB4MSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDAyNDA4LCAweDEpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDI0MDgsIDB4Mik7CisJZ3JfZGVmKGN0eCwgMHg0MDI0MDgsIDB4MDAwMDA2MDApOworCisJLyogMjgwMCAqLworCWNwX2N0eChjdHgsIDB4NDAyODAwLCAweDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwNik7CisKKwkvKiAyQzAwICovCisJY3BfY3R4KGN0eCwgMHg0MDJjMDgsIDB4Nik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApCisJCWdyX2RlZihjdHgsIDB4NDAyYzE0LCAweDAxMDAwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMmMxOCwgMHgwMDAwMDBmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDAyY2EwLCAweDEpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDJjYTAsIDB4Mik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA0MDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA4MDApOworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA0MDApOworCWNwX2N0eChjdHgsIDB4NDAyY2FjLCAweDQpOworCisJLyogMzAwMCAqLworCWNwX2N0eChjdHgsIDB4NDAzMDA0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDAzMDA0LCAweDAwMDAwMDAxKTsKKworCS8qIDM0MDQgKi8KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQljcF9jdHgoY3R4LCAweDQwMzQwNCwgMHgxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0MDQsIDB4MDAwMDAwMDEpOworCX0KKworCS8qIDUwMDAgKi8KKwljcF9jdHgoY3R4LCAweDQwNTAwMCwgMHgxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDUwOgorCQlncl9kZWYoY3R4LCAweDQwNTAwMCwgMHgwMDMwMDA4MCk7CisJCWJyZWFrOworCWNhc2UgMHg4NDoKKwljYXNlIDB4YTA6CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwljYXNlIDB4YWE6CisJY2FzZSAweGFjOgorCQlncl9kZWYoY3R4LCAweDQwNTAwMCwgMHgwMDBlMDA4MCk7CisJCWJyZWFrOworCWNhc2UgMHg4NjoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJCWdyX2RlZihjdHgsIDB4NDA1MDAwLCAweDAwMDAwMDgwKTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDA1MDE0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDA1MDE0LCAweDAwMDAwMDA0KTsKKwljcF9jdHgoY3R4LCAweDQwNTAxYywgMHgxKTsKKwljcF9jdHgoY3R4LCAweDQwNTAyNCwgMHgxKTsKKwljcF9jdHgoY3R4LCAweDQwNTAyYywgMHgxKTsKKworCS8qIDU0MDAgb3IgbWF5YmUgNDgwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCW9mZnNldCA9IDB4NDA1NDAwOworCQljcF9jdHgoY3R4LCAweDQwNTQwMCwgMHhlYSk7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTQpIHsKKwkJb2Zmc2V0ID0gMHg0MDU0MDA7CisJCWNwX2N0eChjdHgsIDB4NDA1NDAwLCAweGNiKTsKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlvZmZzZXQgPSAweDQwNTQwMDsKKwkJY3BfY3R4KGN0eCwgMHg0MDU0MDAsIDB4Y2MpOworCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQlvZmZzZXQgPSAweDQwNDgwMDsKKwkJY3BfY3R4KGN0eCwgMHg0MDQ4MDAsIDB4ZGEpOworCX0gZWxzZSB7CisJCW9mZnNldCA9IDB4NDA1NDAwOworCQljcF9jdHgoY3R4LCAweDQwNTQwMCwgMHhkNCk7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MGMsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTAsIDB4MDAwMDAwMDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDk0KQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIwLCAweDAwMDAwMTAwKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDM4LCAweDAwMDAwMDAyKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDNjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDUwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU0LCAweDAwM2ZmZmZmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU4LCAweDAwMDAxZmZmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDYwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDY0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDZjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDcwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDc0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDc4LCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDdjLCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJb2Zmc2V0ICs9IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4MCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4NCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4OCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4YywgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5MCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5NCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5YywgMHgwMDAwMDAwMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4YjAsIDB4MDAwMDAwMDEpOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhiNCwgMHgwMDAwMDAwMSk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGJjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4YzAsIDB4MDAwMDAwMGEpOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhkMCwgMHgwMDAwMDA0MCk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGQ4LCAweDAwMDAwMDAyKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4ZGMsIDB4MDAwMDAxMDApOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhlMCwgMHgwMDAwMDAwMSk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGU0LCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTAwLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTI0LCAweDAwMDAwMDA0KTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTNjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTQwLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTQ4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTU0LCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTU4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTVjLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTY0LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTcwLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTc0LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTdjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTg4LCAweDAwMDAwMDAyKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTkwLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTk4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MWFjLCAweDAwMDAwMDAzKTsKKwkJIG9mZnNldCArPSAweGQwOworCX0gZWxzZSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YjAsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGI0LCAweDAwMDAwMTAwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhiYywgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YzgsIDB4MDAwMDAxMDApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGNjLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhkMCwgMHgwMDAwMDEwMCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4ZDgsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGU0LCAweDAwMDAwMTAwKTsKKwl9CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhmOCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhmYywgMHgwMDAwMDA3MCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMDAsIDB4MDAwMDAwODApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDExNCwgMHgwMDAwMDAwYyk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW9mZnNldCAtPSA0OworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTFjLCAweDAwMDAwMDA4KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEyMCwgMHgwMDAwMDAxNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMjQsIDB4MDAwMDAwMjYpOworCQlvZmZzZXQgLT0gMHgxODsKKwl9IGVsc2UgeworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEyOCwgMHgwMDAwMDAyOSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTJjLCAweDAwMDAwMDI3KTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMzAsIDB4MDAwMDAwMjYpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEzNCwgMHgwMDAwMDAwOCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTM4LCAweDAwMDAwMDA0KTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxM2MsIDB4MDAwMDAwMjcpOworCX0KKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE0OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNGMsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTUwLCAweDAwMDAwMDAzKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE1NCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNTgsIDB4MDAwMDAwMDUpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTVjLCAweDAwMDAwMDA2KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE2MCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNjQsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWE4LCAweDAwMDAwMGNmKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZDgsIDB4MDAwMDAwODApOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWRjLCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFlMCwgMHgwMDAwMDAwNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW9mZnNldCAtPSA0OworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZTQsIDB4MDAwMDAwMDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWVjLCAweDAwMDAwMDAzKTsKKwkJb2Zmc2V0ICs9IDg7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWU4LCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZjQsIDB4MDAwMDAwMTIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWY4LCAweDAwMDAwMDEwKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFmYywgMHgwMDAwMDAwYyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMDAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjEwLCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIxNCwgMHgwMDAwMDAwMik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMTgsIDB4MDAwMDAwMDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIyNCwgMHgwMDNmZmZmZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMjgsIDB4MDAwMDFmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlvZmZzZXQgLT0gMHgyMDsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjUwLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNTQsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI1OCwgMHgwMDAwMDAwMik7CisJCW9mZnNldCArPSAweDEwOworCX0KKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI1MCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNTQsIDB4MDAwMDAwMTQpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjU4LCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJb2Zmc2V0ICs9IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNjQsIDB4MDAwMDAwMDIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQlvZmZzZXQgKz0gODsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI3MCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNzgsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjdjLCAweDAwMDAxMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDB4YzsKKwllbHNlIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyODAsIDB4MDAwMDBlMDApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI4NCwgMHgwMDAwMTAwMCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4Mjg4LCAweDAwMDAxZTAwKTsKKwl9CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyOTAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4Mjk0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI5OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyOWMsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmEwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJiMCwgMHgwMDAwMDIwMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYjQsIDB4MDAwMDAyMDApOworCQlvZmZzZXQgKz0gNDsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJiOCwgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmJjLCAweDAwMDAwMDcwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYzAsIDB4MDAwMDAwODApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJjYywgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmQwLCAweDAwMDAwMDcwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZDQsIDB4MDAwMDAwODApOworCX0gZWxzZSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmI4LCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYmMsIDB4MDAwMDAwZjApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJjMCwgMHgwMDAwMDBmZik7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmNjLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZDAsIDB4MDAwMDAwZjApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJkNCwgMHgwMDAwMDBmZik7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmRjLCAweDAwMDAwMDA5KTsKKwkJb2Zmc2V0ICs9IDQ7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmU0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJlOCwgMHgwMDAwMDBjZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZjAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzAwLCAweDAwMDAwMGNmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDMwOCwgMHgwMDAwMDAwMik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgzMTAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzE4LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDMyMCwgMHgwMDAwMDBjZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgzMjQsIDB4MDAwMDAwY2YpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzI4LCAweDAwMDAwMDAxKTsKKworCS8qIDYwMDA/ICovCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDA2M2UwLCAweDEpOworCisJLyogNjgwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDY4MTQsIDB4MmIpOworCQlncl9kZWYoY3R4LCAweDQwNjgxOCwgMHgwMDAwMGY4MCk7CisJCWdyX2RlZihjdHgsIDB4NDA2ODYwLCAweDAwN2YwMDgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDY4OWMsIDB4MDA3ZjAwODApOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDA2ODE0LCAweDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5OCkKKwkJCWdyX2RlZihjdHgsIDB4NDA2ODE4LCAweDAwMDAwZjgwKTsKKwkJZWxzZQorCQkJZ3JfZGVmKGN0eCwgMHg0MDY4MTgsIDB4MDAwMDFmODApOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJCWdyX2RlZihjdHgsIDB4NDA2ODFjLCAweDAwMDAwMDMwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDY4MzAsIDB4Myk7CisJfQorCisJLyogNzAwMDogcGVyLVJPUCBncm91cCBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHVuaXRzICYgKDE8PChpKzE2KSkpIHsKKwkJCWNwX2N0eChjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAzKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAweDFiNzRmODIwKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YTUpCisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMDAgKyAoaTw8OCksIDB4M2I3NGY4MjEpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAweDdiNzRmODIxKTsKKwkJCWdyX2RlZihjdHgsIDB4NDA3MDA0ICsgKGk8PDgpLCAweDg5MDU4MDAxKTsKKworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMSk7CisJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQkJCWNwX2N0eChjdHgsIDB4NDA3MDEwICsgKGk8PDgpLCAyKTsKKwkJCQlncl9kZWYoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMHgwMDAwMTAwMCk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMTQgKyAoaTw8OCksIDB4MDAwMDAwMWYpOworCQkJfSBlbHNlIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMyk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMTAgKyAoaTw8OCksIDB4MDAwMDEwMDApOworCQkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGE1KQorCQkJCQlncl9kZWYoY3R4LCAweDQwNzAxNCArIChpPDw4KSwgMHgwMDAwMDBmZik7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCAweDQwNzAxNCArIChpPDw4KSwgMHgwMDAwMDFmZik7CisJCQl9CisKKwkJCWNwX2N0eChjdHgsIDB4NDA3MDgwICsgKGk8PDgpLCA0KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGE1KQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDgwICsgKGk8PDgpLCAweDAyN2MxMGZhKTsKKwkJCWVsc2UKKwkJCQlncl9kZWYoY3R4LCAweDQwNzA4MCArIChpPDw4KSwgMHg4MjdjMTBmYSk7CisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQlncl9kZWYoY3R4LCAweDQwNzA4NCArIChpPDw4KSwgMHgwMDAwMDBjMCk7CisJCQllbHNlCisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwODQgKyAoaTw8OCksIDB4NDAwMDAwYzApOworCQkJZ3JfZGVmKGN0eCwgMHg0MDcwODggKyAoaTw8OCksIDB4Yjc4OTIwODApOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCWNwX2N0eChjdHgsIDB4NDA3MDk0ICsgKGk8PDgpLCAxKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQljcF9jdHgoY3R4LCAweDQwNzA5NCArIChpPDw4KSwgMyk7CisJCQllbHNlIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzA5NCArIChpPDw4KSwgNCk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwYTAgKyAoaTw8OCksIDEpOworCQkJfQorCQl9CisJfQorCisJY3BfY3R4KGN0eCwgMHg0MDdjMDAsIDB4Myk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg5MCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAwMTAwNDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAzOTAwNDApOworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAzZDAwNDApOworCWdyX2RlZihjdHgsIDB4NDA3YzA4LCAweDAwMDAwMDIyKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQljcF9jdHgoY3R4LCAweDQwN2MxMCwgMHgzKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDdjMjAsIDB4MSk7CisJCWNwX2N0eChjdHgsIDB4NDA3YzJjLCAweDEpOworCX0KKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDdkMDAsIDB4OSk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDdkMDAsIDB4MTUpOworCX0KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5OCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdkMDgsIDB4MDAzODAwNDApOworCWVsc2UgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDkwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDdkMDgsIDB4MDAwMTAwNDApOworCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQlncl9kZWYoY3R4LCAweDQwN2QwOCwgMHgwMDM5MDA0MCk7CisJCWVsc2UKKwkJCWdyX2RlZihjdHgsIDB4NDA3ZDA4LCAweDAwM2QwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDdkMGMsIDB4MDAwMDAwMjIpOworCX0KKworCS8qIDgwMDArOiBwZXItVFAgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAodW5pdHMgJiAoMTw8aSkpIHsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJYmFzZSA9IDB4NDA4MDAwICsgKGk8PDEyKTsKKwkJCWVsc2UKKwkJCQliYXNlID0gMHg0MDgwMDAgKyAoaTw8MTEpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHhjMDA7CisJCQllbHNlCisJCQkJb2Zmc2V0ID0gYmFzZSArIDB4ODA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDAwLCAxKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDAsIDB4MDAwMGZmMGEpOworCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHgwOCwgMSk7CisKKwkJCS8qIHBlci1NUCBzdGF0ZSAqLworCQkJZm9yIChqID0gMDsgaiA8IChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTAgPyAyIDogNCk7IGorKykgeworCQkJCWlmICghKHVuaXRzICYgKDEgPDwgKGorMjQpKSkpIGNvbnRpbnVlOworCQkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJCW9mZnNldCA9IGJhc2UgKyAweDIwMCArIChqPDw3KTsKKwkJCQllbHNlCisJCQkJCW9mZnNldCA9IGJhc2UgKyAweDEwMCArIChqPDw3KTsKKwkJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDB4MjApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDAsIDB4MDE4MDAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDQsIDB4MDAxNjAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDgsIDB4MDE4MDAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTgsIDB4MDAwM2ZmZmYpOworCQkJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJCQljYXNlIDB4NTA6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwODAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4ODQ6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDA4ODAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4ODY6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDA4YzAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4OTI6CisJCQkJY2FzZSAweDk2OgorCQkJCWNhc2UgMHg5ODoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgxMThjMDAwMCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHg5NDoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgxMDg4MDAwMCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHhhMDoKKwkJCQljYXNlIDB4YTU6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MzEwYzAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4YTg6CisJCQkJY2FzZSAweGFhOgorCQkJCWNhc2UgMHhhYzoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgzMDBjMDAwMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQwLCAweDAwMDEwNDAxKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0OCwgMHgwMDAwMDA0MCk7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQ4LCAweDAwMDAwMDc4KTsKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDUwLCAweDAwMDAwMGJmKTsKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU4LCAweDAwMDAxMjEwKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1YywgMHgwMDAwMDA4MCk7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDVjLCAweDA4MDAwMDgwKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2OCwgMHgwMDAwMDAzZSk7CisJCQl9CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzAwLCAweDQpOworCQkJZWxzZQorCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMwMCwgMHg1KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMwNCwgMHgwMDAwNzA3MCk7CisJCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4MzA0LCAweDAwMDI3MDcwKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHgzMDQsIDB4MDExMjcwNzApOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMwNCwgMHgwNTEyNzA3MCk7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzE4LCAxKTsKKwkJCWVsc2UKKwkJCQljcF9jdHgoY3R4LCBiYXNlICsgMHgzMjAsIDEpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4MzE4LCAweDAwMDNmZmZmKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHgzMTgsIDB4MDNmZmZmZmYpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMyMCwgMHgwN2ZmZmZmZik7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzI0LCA1KTsKKwkJCWVsc2UKKwkJCQljcF9jdHgoY3R4LCBiYXNlICsgMHgzMjgsIDQpOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzQwLCA5KTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDA7CisJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkgeworCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMzYywgMHhiKTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDQ7CisJCQl9IGVsc2UgeworCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMzYywgMHhkKTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDQ7CisJCQl9CisJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDAsIDB4MDAxMjA0MDcpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0LCAweDA1MDkxNTA3KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg0KQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4OCwgMHgwNTEwMDIwMik7CisJCQllbHNlCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4LCAweDA1MDEwMjAyKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YywgMHgwMDAzMDIwMSk7CisKKwkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDQwMCwgMik7CisJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg0MDQsIDB4MDAwMDAwNDApOworCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4NDBjLCAyKTsKKwkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDQwYywgMHgwZDBjMGIwYSk7CisJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg0MTAsIDB4MDAxNDEyMTApOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCW9mZnNldCA9IGJhc2UgKyAweDgwMDsKKwkJCWVsc2UKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHg1MDA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDYpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgwLCAweDAwMDAwMWYwKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4NCwgMHgwMDAwMDAwMSk7CisJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDgsIDB4MDAwMDAwMDMpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGMsIDB4MDAwMDgwMDApOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNCwgMHgwMDAzOWUwMCk7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDFjLCAyKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwMDAwNDApOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwMDAxMDApOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMCwgMHgwMDAwMzgwMCk7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4NTRjLCAyKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPD0gMHhhMCB8fCBkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGFhKQorCQkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg1NGMsIDB4MDAzZmUwMDYpOworCQkJCWVsc2UKKwkJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4NTRjLCAweDAwM2ZlMDA3KTsKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg1NTAsIDB4MDAzZmUwMDApOworCQkJfQorCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCW9mZnNldCA9IGJhc2UgKyAweGEwMDsKKwkJCWVsc2UKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHg2ODA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDEpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDAwNDA0MDQwKTsKKworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHhlMDA7CisJCQllbHNlCisJCQkJb2Zmc2V0ID0gYmFzZSArIDB4NzAwOworCQkJY3BfY3R4KGN0eCwgb2Zmc2V0LCAyKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDAwNzdmMDA1KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTUpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDZjZjdmMDA3KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDZjZmZmMDA3KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWMpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDBjZmZmMDA3KTsKKwkJCWVsc2UKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQsIDB4MGNmN2YwMDcpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0LCAweDAwMDA3ZmZmKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQsIDB4MDAzZjdmZmYpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4NCwgMHgwMmJmN2ZmZik7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDJjLCAxKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg1MCwgOSk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1NCwgMHgwMDAwMDNmZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1OCwgMHgwMDAwMDAwMyk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1YywgMHgwMDAwMDAwMyk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2MCwgMHgwMDAwMDFmZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2NCwgMHgwMDAwMDAxZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2OCwgMHgwMDAwMDAwZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2YywgMHgwMDAwMDAwZik7CisJCQl9IGVsc2UgaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg1MCwgMSk7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg3MCwgMSk7CisJCQl9IGVsc2UgeworCQkJCWNwX2N0eChjdHgsIG9mZnNldCArIDB4NTAsIDEpOworCQkJCWNwX2N0eChjdHgsIG9mZnNldCArIDB4NjAsIDUpOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogeGZlciBhcmVhcy4gVGhlc2UgYXJlIGEgcGFpbi4KKyAqCisgKiBUaGVyZSBhcmUgMiB4ZmVyIGFyZWFzOiB0aGUgZmlyc3Qgb25lIGlzIGJpZyBhbmQgY29udGFpbnMgYWxsIHNvcnRzIG9mCisgKiBzdHVmZiwgdGhlIHNlY29uZCBpcyBzbWFsbCBhbmQgY29udGFpbnMgc29tZSBwZXItVFAgY29udGV4dC4KKyAqCisgKiBFYWNoIGFyZWEgaXMgc3BsaXQgaW50byA4ICJzdHJhbmRzIi4gVGhlIGFyZWFzLCB3aGVuIHNhdmVkIHRvIGdyY3R4LAorICogYXJlIG1hZGUgb2YgOC13b3JkIGJsb2Nrcy4gRWFjaCBibG9jayBjb250YWlucyBhIHNpbmdsZSB3b3JkIGZyb20KKyAqIGVhY2ggc3RyYW5kLiBUaGUgc3RyYW5kcyBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciwgdGhlaXIKKyAqIGFkZHJlc3NlcyBhcmUgdW5yZWxhdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCBkYXRhIGluIHRoZW0gaXMgY2xvc2VseQorICogcGFja2VkIHRvZ2V0aGVyLiBUaGUgc3RyYW5kIGxheW91dCB2YXJpZXMgYSBiaXQgYmV0d2VlbiBjYXJkczogaGVyZQorICogYW5kIHRoZXJlLCBhIHNpbmdsZSB3b3JkIGlzIHRocm93biBvdXQgaW4gdGhlIG1pZGRsZSBhbmQgdGhlIHdob2xlCisgKiBzdHJhbmQgaXMgb2Zmc2V0IGJ5IGEgYml0IGZyb20gY29ycmVzcG9uZGluZyBvbmUgb24gYW5vdGhlciBjaGlwc2V0LgorICogRm9yIHRoaXMgcmVhc29uLCBhZGRyZXNzZXMgb2Ygc3R1ZmYgaW4gc3RyYW5kcyBhcmUgYWxtb3N0IHVzZWxlc3MuCisgKiBLbm93aW5nIHNlcXVlbmNlIG9mIHN0dWZmIGFuZCBzaXplIG9mIGdhcHMgYmV0d2VlbiB0aGVtIGlzIG11Y2ggbW9yZQorICogdXNlZnVsLCBhbmQgdGhhdCdzIGhvdyB3ZSBidWlsZCB0aGUgc3RyYW5kcyBpbiBvdXIgZ2VuZXJhdG9yLgorICoKKyAqIE5WQTAgdGFrZXMgdGhpcyBtZXNzIHRvIGEgd2hvbGUgbmV3IGxldmVsIGJ5IGN1dHRpbmcgdGhlIG9sZCBzdHJhbmRzCisgKiBpbnRvIGEgZmV3IGRvemVuIHBpZWNlcyBba25vd24gYXMgZ2VuZXNdLCByZWFycmFuZ2luZyB0aGVtIHJhbmRvbWx5LAorICogYW5kIHB1dHRpbmcgdGhlbSBiYWNrIHRvZ2V0aGVyIHRvIG1ha2UgbmV3IHN0cmFuZHMuIEhvcGVmdWxseSB0aGVzZQorICogZ2VuZXMgY29ycmVzcG9uZCBtb3JlIG9yIGxlc3MgZGlyZWN0bHkgdG8gdGhlIHNhbWUgUEdSQVBIIHN1YnVuaXRzCisgKiBhcyBpbiA0MDAwNDAgcmVnaXN0ZXIuCisgKgorICogVGhlIG1vc3QgY29tbW9uIHZhbHVlIGluIGRlZmF1bHQgY29udGV4dCBpcyAwLCBhbmQgd2hlbiB0aGUgZ2VuZXMKKyAqIGFyZSBzZXBhcmF0ZWQgYnkgMCdzLCBnZW5lIGJvdW5kdWFyaWVzIGFyZSBxdWl0ZSBzcGVjdWxhdGl2ZS4uLgorICogc29tZSBvZiB0aGVtIGNhbiBiZSBjbGVhcmx5IGRlZHVjZWQsIG90aGVycyBjYW4gYmUgZ3Vlc3NlZCwgYW5kIHlldAorICogb3RoZXJzIHdvbid0IGJlIHJlc29sdmVkIHdpdGhvdXQgZmlndXJpbmcgb3V0IHRoZSByZWFsIG1lYW5pbmcgb2YKKyAqIGdpdmVuIGN0eHZhbC4gRm9yIHRoZSBzYW1lIHJlYXNvbiwgZW5kaW5nIHBvaW50IG9mIGVhY2ggc3RyYW5kCisgKiBpcyB1bmtub3duLiBFeGNlcHQgZm9yIHN0cmFuZCAwLCB3aGljaCBpcyB0aGUgbG9uZ2VzdCBzdHJhbmQgYW5kCisgKiBpdHMgZW5kIGNvcnJlc3BvbmRzIHRvIGVuZCBvZiB0aGUgd2hvbGUgeGZlci4KKyAqCisgKiBBbiB1bnNvbHZlZCBteXN0ZXJ5IGlzIHRoZSBzZWVrIGluc3RydWN0aW9uOiBpdCB0YWtlcyBhbiBhcmd1bWVudAorICogaW4gYml0cyA4LTE4LCBhbmQgdGhhdCBhcmd1bWVudCBpcyBjbGVhcmx5IHRoZSBwbGFjZSBpbiBzdHJhbmRzIHRvCisgKiBzZWVrIHRvLi4uIGJ1dCB0aGUgb2Zmc2V0cyBkb24ndCBzZWVtIHRvIGNvcnJlc3BvbmQgdG8gb2Zmc2V0cyBhcworICogc2VlbiBpbiBncmN0eC4gUGVyaGFwcyB0aGVyZSdzIGFub3RoZXIsIHJlYWwsIG5vdCByYW5kb21seS1jaGFuZ2luZworICogYWRkcmVzc2luZyBpbiBzdHJhbmRzLCBhbmQgdGhlIHhmZXIgaW5zbiBqdXN0IGhhcHBlbnMgdG8gc2tpcCBvdmVyCisgKiB0aGUgdW51c2VkIGJpdHM/IE5WMTAtTlYzMCBQSVBFIGNvbWVzIHRvIG1pbmQuLi4KKyAqCisgKiBBcyBmYXIgYXMgSSBrbm93LCB0aGVyZSdzIG5vIHdheSB0byBhY2Nlc3MgdGhlIHhmZXIgYXJlYXMgZGlyZWN0bHkKKyAqIHdpdGhvdXQgdGhlIGhlbHAgb2YgY3R4cHJvZy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3hmX2VtaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IG51bSwgdWludDMyX3QgdmFsKSB7CisJaW50IGk7CisJaWYgKHZhbCAmJiBjdHgtPm1vZGUgPT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCQludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIGN0eC0+Y3R4dmFsc19wb3MgKyAoaSA8PCAzKSwgdmFsKTsKKwljdHgtPmN0eHZhbHNfcG9zICs9IG51bSA8PCAzOworfQorCisvKiBHZW5lIGRlY2xhcmF0aW9ucy4uLiAqLworCitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX20ybWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazMoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazUoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazcoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazkoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV9yb3BjKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KTsKKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCWludCBvZmZzZXQ7CisJaW50IHNpemUgPSAwOworCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMiAoY3R4LT5kZXYsIDB4MTU0MCk7CisKKwlvZmZzZXQgPSAoY3R4LT5jdHh2YWxzX3BvcysweDNmKSZ+MHgzZjsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IG9mZnNldDsKKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJLyogU3RyYW5kIDAgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQljYXNlIDB4NTA6CisJCQl4Zl9lbWl0KGN0eCwgMHg5OSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCQl4Zl9lbWl0KGN0eCwgMHgzODQsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHg5ODoKKwkJCXhmX2VtaXQoY3R4LCAweDM4MCwgMCk7CisJCQlicmVhazsKKwkJfQorCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX20ybWYgKGN0eCk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDUwOgorCQljYXNlIDB4ODQ6CisJCWNhc2UgMHg4NjoKKwkJY2FzZSAweDk4OgorCQkJeGZfZW1pdChjdHgsIDB4NGM0LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDB4OTI6CisJCWNhc2UgMHg5NDoKKwkJY2FzZSAweDk2OgorCQkJeGZfZW1pdChjdHgsIDB4OTg0LCAwKTsKKwkJCWJyZWFrOworCQl9CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNShjdHgpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCXhmX2VtaXQoY3R4LCAweGEsIDApOworCQllbHNlCisJCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms0KGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMyhjdHgpOworCQlpZiAoKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84ID4gc2l6ZSkKKwkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisKKwkJLyogU3RyYW5kIDEgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDB4MTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms2KGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNyhjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazgoY3R4KTsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQljYXNlIDB4NTA6CisJCWNhc2UgMHg5MjoKKwkJCXhmX2VtaXQoY3R4LCAweGZiLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDB4ODQ6CisJCQl4Zl9lbWl0KGN0eCwgMHhkMywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCQl4Zl9lbWl0KGN0eCwgMHhhYiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDg2OgorCQljYXNlIDB4OTg6CisJCQl4Zl9lbWl0KGN0eCwgMHg2YiwgMCk7CisJCQlicmVhazsKKwkJfQorCQl4Zl9lbWl0KGN0eCwgMiwgMHg0ZTNiZmRmKTsKKwkJeGZfZW1pdChjdHgsIDQsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJCXhmX2VtaXQoY3R4LCAweGIsIDApOworCQl4Zl9lbWl0KGN0eCwgMiwgMHg0ZTNiZmRmKTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCAyICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyAweDI7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDUwOgorCQljYXNlIDB4OTI6CisJCQl4Zl9lbWl0KGN0eCwgMHhhODAsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg4NDoKKwkJCXhmX2VtaXQoY3R4LCAweGE3ZSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCQl4Zl9lbWl0KGN0eCwgMHhhN2MsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg4NjoKKwkJY2FzZSAweDk4OgorCQkJeGZfZW1pdChjdHgsIDB4YTdhLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCXhmX2VtaXQoY3R4LCAxLCAweDNmZmZmZik7CisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MWZmZik7CisJCXhmX2VtaXQoY3R4LCAweGUsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazkoY3R4KTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bmsyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMShjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMzogcGVyLVJPUCBncm91cCBzdGF0ZSAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMzsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCWlmICh1bml0cyAmICgxIDw8IChpICsgMTYpKSkKKwkJCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3JvcGMoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZHMgNC03OiBwZXItVFAgc3RhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDQgKyBpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgKDIgKiBpKSkpCisJCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChjdHgpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgKDIgKiBpICsgMSkpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTdHJhbmQgMCAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0OworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJCXhmX2VtaXQoY3R4LCAweDM4NSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDM4NCwgMCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfbTJtZihjdHgpOworCQl4Zl9lbWl0KGN0eCwgMHg5NTAsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKGN0eCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwkJfQorCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazgoY3R4KTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMHgxODksIDApOworCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTgpCisJCQl4Zl9lbWl0KGN0eCwgMHg5OSwgMCk7CisJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCQl4Zl9lbWl0KGN0eCwgMHg2NSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDZkLCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms5KGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMSAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bmsxKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMiAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMjsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApIHsKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMihjdHgpOworCQl9CisJCXhmX2VtaXQoY3R4LCAweDM2LCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms1KGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMzsKKwkJeGZfZW1pdChjdHgsIDEsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNihjdHgpOworCQlpZiAoKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84ID4gc2l6ZSkKKwkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisKKwkJLyogU3RyYW5kIDQgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDQ7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKQorCQkJeGZfZW1pdChjdHgsIDB4YTgwLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4YTdhLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmZmZmKTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgxZmZmKTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCA1ICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyA1OworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCAweDRlM2JmZGYpOworCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCAweDRlM2JmZGYpOworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlpZiAodW5pdHMgJiAoMTw8KGkrMTYpKSkKKwkJCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3JvcGMoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCA2ICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyA2OworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazMoY3R4KTsKKwkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNChjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazcoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMCkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKGN0eCk7CisJCWlmICh1bml0cyAmICgxIDw8IDEpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCAyKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMykpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgNyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgNzsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApIHsKKwkJCWlmICh1bml0cyAmICgxIDw8IDQpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDUpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDYpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDcpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDgpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDkpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJfSBlbHNlIHsKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMihjdHgpOworCQl9CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKwl9CisKKwljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgc2l6ZSAqIDg7CisJY3R4LT5jdHh2YWxzX3BvcyA9IChjdHgtPmN0eHZhbHNfcG9zKzB4M2YpJn4weDNmOworCWNwX2xzciAoY3R4LCBvZmZzZXQpOworCWNwX291dCAoY3R4LCBDUF9TRVRfWEZFUl9QT0lOVEVSKTsKKwljcF9sc3IgKGN0eCwgc2l6ZSk7CisJY3Bfb3V0IChjdHgsIENQX1NFRUtfMSk7CisJY3Bfb3V0IChjdHgsIENQX1hGRVJfMSk7CisJY3Bfd2FpdChjdHgsIFhGRVIsIEJVU1kpOworfQorCisvKgorICogbm9uLXRyaXZpYWwgZGVtYWdpY2VkIHBhcnRzIG9mIGN0eCBpbml0IGdvIGhlcmUKKyAqLworCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV9tMm1mKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogbTJtZiBzdGF0ZSAqLworCXhmX2VtaXQgKGN0eCwgMSwgMCk7CQkvKiBETUFfTk9USUZZIGluc3RhbmNlID4+IDQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogRE1BX0JVRkZFUl9JTiBpbnN0YW5jZSA+PiA0ICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIERNQV9CVUZGRVJfT1VUIGluc3RhbmNlID4+IDQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIE9GRlNFVF9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogUElUQ0hfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogUElUQ0hfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIExJTkVfTEVOR1RIICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIExJTkVfQ09VTlQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4MjEpOwkJLyogRk9STUFUOiBiaXRzIDAtNCBJTlBVVF9JTkMsIGJpdHMgNS05IE9VVFBVVF9JTkMgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDEpOwkJLyogTElORUFSX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAweDIpOwkJLyogVElMSU5HX01PREVfSU46IGJpdHMgMC0yIHkgdGlsaW5nLCBiaXRzIDMtNSB6IHRpbGluZyAqLworCXhmX2VtaXQgKGN0eCwgMSwgMHgxMDApOwkvKiBUSUxJTkdfUElUQ0hfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4MTAwKTsJLyogVElMSU5HX0hFSUdIVF9JTiAqLworCXhmX2VtaXQgKGN0eCwgMSwgMSk7CQkvKiBUSUxJTkdfREVQVEhfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX0lOX1ogKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAxKTsJCS8qIExJTkVBUl9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4Mik7CQkvKiBUSUxJTkdfTU9ERV9PVVQ6IGJpdHMgMC0yIHkgdGlsaW5nLCBiaXRzIDMtNSB6IHRpbGluZyAqLworCXhmX2VtaXQgKGN0eCwgMSwgMHgxMDApOwkvKiBUSUxJTkdfUElUQ0hfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAweDEwMCk7CS8qIFRJTElOR19IRUlHSFRfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAxKTsJCS8qIFRJTElOR19ERVBUSF9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX09VVF9aICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIFRJTElOR19QT1NJVElPTl9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX0lOX0hJR0ggKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX09VVF9ISUdIICovCit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogZW5kIG9mIGFyZWEgMiBvbiBwcmUtTlZBMCwgYXJlYSAxIG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg1MDoKKwljYXNlIDB4ODY6CisJY2FzZSAweDk4OgorCWNhc2UgMHhhYToKKwljYXNlIDB4YWM6CisJCXhmX2VtaXQoY3R4LCAweDU0MiwgMCk7CisJCWJyZWFrOworCWNhc2UgMHg4NDoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwkJeGZfZW1pdChjdHgsIDB4OTQyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweGEwOgorCQl4Zl9lbWl0KGN0eCwgMHgyMDQyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwkJeGZfZW1pdChjdHgsIDB4ODQyLCAwKTsKKwkJYnJlYWs7CisJfQorCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDI3KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjYpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMTAoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwkvKiBlbmQgb2YgYXJlYSAyIG9uIHByZS1OVkEwLCBhcmVhIDEgb24gTlZBeCAqLworCXhmX2VtaXQoY3R4LCAweDEwLCAweDA0MDAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMHgyNCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDB4MDRlM2JmZGYpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxZmUyMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogbWlkZGxlIG9mIGFyZWEgMiBvbiBwcmUtTlZBMCwgYmVnaW5uaW5nIG9mIGFyZWEgMiBvbiBOVkEwLCBhcmVhIDcgb24gPk5WQTAgKi8KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkgeworCQl4Zl9lbWl0KGN0eCwgNSwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDgwYzE0KTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg4MDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJfQorCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwNCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDFhKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4N2YpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAweDM4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgzOCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDB4ODgpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDB4MTYsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDI2KTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4M2Y4MDAwMDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MWEpOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDB4MjgsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MjUsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDUyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjYpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDFhKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDBmZmZmMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBlbmQgb2YgYXJlYSAwIG9uIHByZS1OVkEwLCBiZWdpbm5pbmcgb2YgYXJlYSA2IG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMSwgMHgzZik7CisJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAweDA0MDAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCXhmX2VtaXQoY3R4LCAweDEwLCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAweDExLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAwMSk7CisJeGZfZW1pdChjdHgsIDQsIDB4ZmZmZik7CisJeGZfZW1pdChjdHgsIDB4MjAsIDApOworCXhmX2VtaXQoY3R4LCAweDEwLCAweDNmODAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDIsIDApOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogbWlkZGxlIG9mIGFyZWEgMCBvbiBwcmUtTlZBMCwgbWlkZGxlIG9mIGFyZWEgNiBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDIsIDB4MDQwMDAwMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MCk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazUoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogbWlkZGxlIG9mIGFyZWEgMCBvbiBwcmUtTlZBMCBbYWZ0ZXIgbTJtZl0sIGVuZCBvZiBhcmVhIDIgb24gTlZBeCAqLworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDB4MWM0ZCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgxYzRiLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApCisJCXhmX2VtaXQoY3R4LCAxLCAzKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwYzE0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MGMxNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCAxLCAweDI3KTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDNjMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDE2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogYmVnaW5uaW5nIG9mIGFyZWEgMSBvbiBwcmUtTlZBMCBbYWZ0ZXIgbTJtZl0sIGFyZWEgMyBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHgxMSwgMCk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4ZiwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHhlLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJeGZfZW1pdChjdHgsIDB4ZCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDgpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpCisJCXhmX2VtaXQoY3R4LCAxLCAweDFlMDApOworCXhmX2VtaXQoY3R4LCAweGMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMHgxMjUsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MTI2LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDEyNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgxZjcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHhhMSwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHg1YSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4ODM0LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMHgxODczLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHg4YmEsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4ODMzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBtaWRkbGUgb2YgYXJlYSAxIG9uIHByZS1OVkEwIFthZnRlciBtMm1mXSwgbWlkZGxlIG9mIGFyZWEgNiBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDIsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDgpOworCXhmX2VtaXQoY3R4LCA1LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAzLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhjZik7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAzLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTUpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg0NDQ0NDgwKTsKKwl4Zl9lbWl0KGN0eCwgMHgzNywgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwkvKiBtaWRkbGUgb2YgYXJlYSAxIG9uIHByZS1OVkEwIFthZnRlciBtMm1mXSwgbWlkZGxlIG9mIGFyZWEgMCBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCA0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDAwMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMDAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAwMDEpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms5KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCS8qIG1pZGRsZSBvZiBhcmVhIDIgb24gcHJlLU5WQTAgW2FmdGVyIG0ybWZdLCBlbmQgb2YgYXJlYSAwIG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMSwgMHgzZjgwMDAwMCk7CisJeGZfZW1pdChjdHgsIDYsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHgxMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDBmZmZmMDApOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MGZhYzY4ODEpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDIsIDB4MDQwMDAwMDApOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNSk7CisJeGZfZW1pdChjdHgsIDEsIDB4NTIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCXhmX2VtaXQoY3R4LCAweDEzLCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCQl4Zl9lbWl0KGN0eCwgMHgxMSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDEwLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDB4MTAsIDB4M2Y4MDAwMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgyNiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJeGZfZW1pdChjdHgsIDEsIDUpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCA0LCAweGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MWYsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweGMsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDAwZmZmZjAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCXhmX2VtaXQoY3R4LCAweDI2LCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAweDNjLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDIpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgNCwgNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCXhmX2VtaXQoY3R4LCA4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgzZmYpOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDB4N2ZmKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAyKTsKKwl4Zl9lbWl0KGN0eCwgOSwgMCk7CisJeGZfZW1pdChjdHgsIDQsIDQpOworCXhmX2VtaXQoY3R4LCAweDJjLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfcm9wYyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbWFnaWMyOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCW1hZ2ljMiA9IDB4MDAwMDNlNjA7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpIHsKKwkJbWFnaWMyID0gMHgwMDFmZmU2NzsKKwl9IGVsc2UgeworCQltYWdpYzIgPSAweDAwMDg3ZTY3OworCX0KKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgbWFnaWMyKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgxNSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4ODYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5MiB8fCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg0MDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgzMDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgxMDAxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YTApIHsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJCWVsc2UKKwkJCQl4Zl9lbWl0KGN0eCwgMSwgMHgxNSk7CisJCX0KKwkJeGZfZW1pdChjdHgsIDMsIDApOworCX0KKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCA4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDB4MTMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgxMCwgMCk7CisJeGZfZW1pdChjdHgsIDB4MTAsIDB4M2Y4MDAwMDApOworCXhmX2VtaXQoY3R4LCAweDE5LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDNmKTsKKwl4Zl9lbWl0KGN0eCwgNiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDEwMDEpOworCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgMHhjLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgNiwgMCk7CisJeGZfZW1pdChjdHgsIDMsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAweDE4LCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCA4LCAyKTsKKwkJeGZfZW1pdChjdHgsIDgsIDEpOworCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJeGZfZW1pdChjdHgsIDUsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAweDE2LCAwKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJCXhmX2VtaXQoY3R4LCAweDFiLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCX0KKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDB4MTAsIDEpOworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCAweDEwLCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHg1YiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBtYWdpYzM7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW1hZ2ljMyA9IDB4MTAwMDsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg2IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkKKwkJbWFnaWMzID0gMHgxZTAwOworCWVsc2UKKwkJbWFnaWMzID0gMDsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHgyNCwgMCk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MTQsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDMwMjAxMDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDA2MDgwODApOworCXhmX2VtaXQoY3R4LCA0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MCk7CisJaWYgKG1hZ2ljMykKKwkJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMyk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAweDI0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMzAyMDEwMCk7CisJeGZfZW1pdChjdHgsIDEsIDMpOworCWlmIChtYWdpYzMpCisJCXhmX2VtaXQoY3R4LCAxLCBtYWdpYzMpOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAzKTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk0IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTYpCisJCXhmX2VtaXQoY3R4LCAweDEwMjQsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4YTI0LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDIxNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHg0MTQsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDIsIDApOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MihzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbWFnaWMxLCBtYWdpYzI7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJbWFnaWMxID0gMHgzZmY7CisJCW1hZ2ljMiA9IDB4MDAwMDNlNjA7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpIHsKKwkJbWFnaWMxID0gMHg3ZmY7CisJCW1hZ2ljMiA9IDB4MDAxZmZlNjc7CisJfSBlbHNlIHsKKwkJbWFnaWMxID0gMHg3ZmY7CisJCW1hZ2ljMiA9IDB4MDAwODdlNjc7CisJfQorCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweGMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCXhmX2VtaXQoY3R4LCAweGIsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgNCwgMHhmZmZmKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDUsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDEsIDMpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKSB7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDB4MTgsIDEpOworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCA4LCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMywgMHhjZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHhhLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCBtYWdpYzIpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZihkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCA1LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MGZhYzY4ODEpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDI4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgOCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDgsIDB4NDAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMHgzMDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDQwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDksIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4NDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgzMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9IGVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MTcsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gzKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDJhNzEyNDg4KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4NDA4NWMwMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDQwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMTAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMjgwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3g0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCXhmX2VtaXQoY3R4LCAyLCAweDA0ZTNiZmRmKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDAwZmZmZjAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDIsIDEpOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMGZmZmYwMCk7CisJeGZfZW1pdChjdHgsIDgsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDMwMjAxMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg3MDYwNTA0MCk7CisJeGZfZW1pdChjdHgsIDEsIDB4YjhhODk4ODgpOworCXhmX2VtaXQoY3R4LCAxLCAweGY4ZThkOGM4KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MWEpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94NShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweGIsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDgsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDYsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MShjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHBfeDMoY3R4KTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4MTIsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3g0KGN0eCk7CisJfSBlbHNlIHsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MyhjdHgpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDB4YywgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweGEsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHBfeDUoY3R4KTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94NChjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gxKGN0eCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGksIG1wY250OworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCW1wY250ID0gMTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkKKwkJbXBjbnQgPSAyOworCWVsc2UKKwkJbXBjbnQgPSAzOworCWZvciAoaSA9IDA7IGkgPCBtcGNudDsgaSsrKSB7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg4MDAwNzAwNCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDA0MDAwNDAwKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMSwgMHhjMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDEwMDApOworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg2IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkgeworCQkJeGZfZW1pdChjdHgsIDEsIDB4ZTAwKTsKKwkJCXhmX2VtaXQoY3R4LCAxLCAweDFlMDApOworCQl9CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCXhmX2VtaXQoY3R4LCAyLCAweDEwMDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMik7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGFhKQorCQkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMHhjLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJfQorCXhmX2VtaXQoY3R4LCAxLCAweDA4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MWZlMjEpOworCX0KKwl4Zl9lbWl0KGN0eCwgNSwgMCk7CisJeGZfZW1pdChjdHgsIDQsIDB4ZmZmZik7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAweDEwMDAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDFmZTIxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgOSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDMsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCAweDEwLCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgMHgxOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMHgzYTAsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg5NCkKKwkJeGZfZW1pdChjdHgsIDB4M2EyLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDM5ZiwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgzYTMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDJkLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCB1bml0cyA9IG52X3JkMzIgKGN0eC0+ZGV2LCAweDE1NDApOworCWludCBzaXplID0gMDsKKworCW9mZnNldCA9IChjdHgtPmN0eHZhbHNfcG9zKzB4M2YpJn4weDNmOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgaTsKKwkJCWlmIChpID09IDApCisJCQkJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgaSkpCisJCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTdHJhbmQgMDogVFBzIDAsIDEgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCQlpZiAodW5pdHMgJiAoMSA8PCAwKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICh1bml0cyAmICgxIDw8IDEpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCAwOiBUUHMgMiwgMyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMikpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCAzKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMDogVFBzIDQsIDUsIDYgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDI7CisJCWlmICh1bml0cyAmICgxIDw8IDQpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgNSkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCA2KSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMDogVFBzIDcsIDgsIDkgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDM7CisJCWlmICh1bml0cyAmICgxIDw8IDcpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgOCkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCA5KSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKwl9CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIHNpemUgKiA4OworCWN0eC0+Y3R4dmFsc19wb3MgPSAoY3R4LT5jdHh2YWxzX3BvcysweDNmKSZ+MHgzZjsKKwljcF9sc3IgKGN0eCwgb2Zmc2V0KTsKKwljcF9vdXQgKGN0eCwgQ1BfU0VUX1hGRVJfUE9JTlRFUik7CisJY3BfbHNyIChjdHgsIHNpemUpOworCWNwX291dCAoY3R4LCBDUF9TRUVLXzIpOworCWNwX291dCAoY3R4LCBDUF9YRkVSXzIpOworCWNwX3dhaXQoY3R4LCBYRkVSLCBCVVNZKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKaW5kZXggZjBkYzRlMy4uZGUxZjViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCWlmIChncHVvYmotPmltX2JhY2tpbmcpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKnN6ID0gKCpzeiArIChOVjUwX0lOU1RNRU1fUEFHRV9TSVpFLTEpKSAmIH4oTlY1MF9JTlNUTUVNX1BBR0VfU0laRS0xKTsKKwkqc3ogPSBBTElHTigqc3osIE5WNTBfSU5TVE1FTV9QQUdFX1NJWkUpOwogCWlmICgqc3ogPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCmluZGV4IDFjYzdiOTMuLmVkMzgyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtMzAsNiArMzAsOSBAQAogJChvYmopL3JzNjAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yczYwMCAkKG9iaikvbWtyZWd0YWJsZQogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCiAKKyQob2JqKS9yNjAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yNjAwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKwogJChvYmopL3IxMDAubzogJChvYmopL3IxMDBfcmVnX3NhZmUuaCAkKG9iaikvcm41MF9yZWdfc2FmZS5oCiAKICQob2JqKS9yMjAwLm86ICQob2JqKS9yMjAwX3JlZ19zYWZlLmgKQEAgLTQyLDYgKzQ1LDggQEAKIAogJChvYmopL3JzNjAwLm86ICQob2JqKS9yczYwMF9yZWdfc2FmZS5oCiAKKyQob2JqKS9yNjAwX2NzLm86ICQob2JqKS9yNjAwX3JlZ19zYWZlLmgKKwogcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyBcCiAJcmFkZW9uX2lycS5vIHIzMDBfY21kYnVmLm8gcjYwMF9jcC5vCiAjIGFkZCBLTVMgZHJpdmVyCkBAIC01NCw4ICs1OSwxMCBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8gYXRvbWJpb3NfZHAubyByNjAwX2F1ZGlvLm8gcjYwMF9oZG1pLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8gYXRvbWJpb3NfZHAubyByNjAwX2F1ZGlvLm8gcjYwMF9oZG1pLm8gXAorCWV2ZXJncmVlbi5vCiAKIHJhZGVvbi0kKENPTkZJR19DT01QQVQpICs9IHJhZGVvbl9pb2MzMi5vCityYWRlb24tJChDT05GSUdfVkdBX1NXSVRDSEVST08pICs9IHJhZGVvbl9hdHB4X2hhbmRsZXIubwogCiBvYmotJChDT05GSUdfRFJNX1JBREVPTikrPSByYWRlb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwppbmRleCA3ZjE1MmY2Li5kNzU3ODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwpAQCAtODgxLDggKzg4MSw2IEBACiAJdWludDhfdCBhdHRyID0gVTgoKCpwdHIpKyspLCBzaGlmdDsKIAl1aW50MzJfdCBzYXZlZCwgZHN0OwogCWludCBkcHRyID0gKnB0cjsKLQlhdHRyICY9IDB4Mzg7Ci0JYXR0ciB8PSBhdG9tX2RlZl9kc3RbYXR0ciA+PiAzXSA8PCA2OwogCVNERUJVRygiICAgZHN0OiAiKTsKIAlkc3QgPSBhdG9tX2dldF9kc3QoY3R4LCBhcmcsIGF0dHIsIHB0ciwgJnNhdmVkLCAxKTsKIAlzaGlmdCA9IGF0b21fZ2V0X3NyYyhjdHgsIGF0dHIsIHB0cik7CkBAIC04OTcsOCArODk1LDYgQEAKIAl1aW50OF90IGF0dHIgPSBVOCgoKnB0cikrKyksIHNoaWZ0OwogCXVpbnQzMl90IHNhdmVkLCBkc3Q7CiAJaW50IGRwdHIgPSAqcHRyOwotCWF0dHIgJj0gMHgzODsKLQlhdHRyIHw9IGF0b21fZGVmX2RzdFthdHRyID4+IDNdIDw8IDY7CiAJU0RFQlVHKCIgICBkc3Q6ICIpOwogCWRzdCA9IGF0b21fZ2V0X2RzdChjdHgsIGFyZywgYXR0ciwgcHRyLCAmc2F2ZWQsIDEpOwogCXNoaWZ0ID0gYXRvbV9nZXRfc3JjKGN0eCwgYXR0ciwgcHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCA5MWFkMGQxLi42NzMyYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAKICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTIwLDEwICsyMCwxMiBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAvKlBvcnRpb24gSTogRGVmaW5pdGlvbnMgIHNoYXJlZCBiZXR3ZWVuIFZCSU9TIGFuZCBEcml2ZXIgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisKICNpZm5kZWYgX0FUT01CSU9TX0gKICNkZWZpbmUgX0FUT01CSU9TX0gKIApAQCAtNDAsMzkgKzQyLDQ2IEBACiAjZW5kaWYKIAogI2lmZGVmIF9IMklOQwotI2lmbmRlZiBVTE9ORwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HOwotI2VuZGlmCisgICNpZm5kZWYgVUxPTkcgCisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HOworICAjZW5kaWYKIAotI2lmbmRlZiBVQ0hBUgotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVDSEFSOwotI2VuZGlmCisgICNpZm5kZWYgVUNIQVIKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUNIQVI7CisgICNlbmRpZgogCi0jaWZuZGVmIFVTSE9SVAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVU0hPUlQ7CisgICNpZm5kZWYgVVNIT1JUIAorICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNIT1JUOworICAjZW5kaWYKICNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQVRPTV9EQUNfQSAgICAgICAgICAgIDAKKyAgICAgIAorI2RlZmluZSBBVE9NX0RBQ19BICAgICAgICAgICAgMCAKICNkZWZpbmUgQVRPTV9EQUNfQiAgICAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9FWFRfREFDICAgICAgICAgIDIKIAogI2RlZmluZSBBVE9NX0NSVEMxICAgICAgICAgICAgMAogI2RlZmluZSBBVE9NX0NSVEMyICAgICAgICAgICAgMQorI2RlZmluZSBBVE9NX0NSVEMzICAgICAgICAgICAgMgorI2RlZmluZSBBVE9NX0NSVEM0ICAgICAgICAgICAgMworI2RlZmluZSBBVE9NX0NSVEM1ICAgICAgICAgICAgNAorI2RlZmluZSBBVE9NX0NSVEM2ICAgICAgICAgICAgNQorI2RlZmluZSBBVE9NX0NSVENfSU5WQUxJRCAgICAgMHhGRgogCiAjZGVmaW5lIEFUT01fRElHQSAgICAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fRElHQiAgICAgICAgICAgICAxCiAKICNkZWZpbmUgQVRPTV9QUExMMSAgICAgICAgICAgIDAKICNkZWZpbmUgQVRPTV9QUExMMiAgICAgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9EQ1BMTCAgICAgICAgICAgIDIKKyNkZWZpbmUgQVRPTV9QUExMX0lOVkFMSUQgICAgIDB4RkYKIAogI2RlZmluZSBBVE9NX1NDQUxFUjEgICAgICAgICAgMAogI2RlZmluZSBBVE9NX1NDQUxFUjIgICAgICAgICAgMQogCi0jZGVmaW5lIEFUT01fU0NBTEVSX0RJU0FCTEUgICAwCi0jZGVmaW5lIEFUT01fU0NBTEVSX0NFTlRFUiAgICAxCi0jZGVmaW5lIEFUT01fU0NBTEVSX0VYUEFOU0lPTiAyCi0jZGVmaW5lIEFUT01fU0NBTEVSX01VTFRJX0VYICAzCisjZGVmaW5lIEFUT01fU0NBTEVSX0RJU0FCTEUgICAwICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX0NFTlRFUiAgICAxICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX0VYUEFOU0lPTiAyICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX01VTFRJX0VYICAzICAgCiAKICNkZWZpbmUgQVRPTV9ESVNBQkxFICAgICAgICAgIDAKICNkZWZpbmUgQVRPTV9FTkFCTEUgICAgICAgICAgIDEKQEAgLTgyLDYgKzkxLDcgQEAKICNkZWZpbmUgQVRPTV9MQ0RfU0VMRlRFU1RfU1RBUlQJCQkJCQkJCQkoQVRPTV9ESVNBQkxFKzUpCiAjZGVmaW5lIEFUT01fTENEX1NFTEZURVNUX1NUT1AJCQkJCQkJCQkoQVRPTV9FTkFCTEUrNSkKICNkZWZpbmUgQVRPTV9FTkNPREVSX0lOSVQJCQkgICAgICAgICAgICAgICAgICAoQVRPTV9ESVNBQkxFKzcpCisjZGVmaW5lIEFUT01fR0VUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ESVNBQkxFKzgpCiAKICNkZWZpbmUgQVRPTV9CTEFOS0lORyAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9CTEFOS0lOR19PRkYgICAgIDAKQEAgLTExNCw3ICsxMjQsNyBAQAogI2RlZmluZSBBVE9NX0RBQzJfQ1YgICAgICAgICAgQVRPTV9EQUMxX0NWCiAjZGVmaW5lIEFUT01fREFDMl9OVFNDICAgICAgICBBVE9NX0RBQzFfTlRTQwogI2RlZmluZSBBVE9NX0RBQzJfUEFMICAgICAgICAgQVRPTV9EQUMxX1BBTAotCisgCiAjZGVmaW5lIEFUT01fUE1fT04gICAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fUE1fU1RBTkRCWSAgICAgICAxCiAjZGVmaW5lIEFUT01fUE1fU1VTUEVORCAgICAgICAyCkBAIC0xMzQsNiArMTQ0LDcgQEAKICNkZWZpbmUgQVRPTV9QQU5FTF9NSVNDX1RFTVBPUkFMICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19BUElfRU5BQkxFRCAgICAgICAgMHgwMDAwMDA4MAogCisKICNkZWZpbmUgTUVNVFlQRV9ERFIxICAgICAgICAgICAgICAiRERSMSIKICNkZWZpbmUgTUVNVFlQRV9ERFIyICAgICAgICAgICAgICAiRERSMiIKICNkZWZpbmUgTUVNVFlQRV9ERFIzICAgICAgICAgICAgICAiRERSMyIKQEAgLTE0NSwxOSArMTU2LDE5IEBACiAKIC8qIE1heGltdW0gc2l6ZSBvZiB0aGF0IEZpcmVHTCBmbGFnIHN0cmluZyAqLwogCi0jZGVmaW5lIEFUT01fRklSRUdMX0ZMQUdfU1RSSU5HICAgICAiRkdMIgkvKiBGbGFnIHVzZWQgdG8gZW5hYmxlIEZpcmVHTCBTdXBwb3J0ICovCi0jZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfRklSRUdMX0ZMQUdfU1RSSU5HICAzCS8qIHNpemVvZiggQVRPTV9GSVJFR0xfRkxBR19TVFJJTkcgKSAqLworI2RlZmluZSBBVE9NX0ZJUkVHTF9GTEFHX1NUUklORyAgICAgIkZHTCIgICAgICAgICAgICAgLy9GbGFnIHVzZWQgdG8gZW5hYmxlIEZpcmVHTCBTdXBwb3J0CisjZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfRklSRUdMX0ZMQUdfU1RSSU5HICAzICAgICAgICAvL3NpemVvZiggQVRPTV9GSVJFR0xfRkxBR19TVFJJTkcgKQogCi0jZGVmaW5lIEFUT01fRkFLRV9ERVNLVE9QX1NUUklORyAgICAiRFNLIgkvKiBGbGFnIHVzZWQgdG8gZW5hYmxlIG1vYmlsZSBBU0lDIG9uIERlc2t0b3AgKi8KLSNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9GQUtFX0RFU0tUT1BfU1RSSU5HICBBVE9NX01BWF9TSVpFX09GX0ZJUkVHTF9GTEFHX1NUUklORworI2RlZmluZSBBVE9NX0ZBS0VfREVTS1RPUF9TVFJJTkcgICAgIkRTSyIgICAgICAgICAgICAgLy9GbGFnIHVzZWQgdG8gZW5hYmxlIG1vYmlsZSBBU0lDIG9uIERlc2t0b3AKKyNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9GQUtFX0RFU0tUT1BfU1RSSU5HICBBVE9NX01BWF9TSVpFX09GX0ZJUkVHTF9GTEFHX1NUUklORyAKIAotI2RlZmluZSBBVE9NX001NFRfRkxBR19TVFJJTkcgICAgICAgIk01NFQiCS8qIEZsYWcgdXNlZCB0byBlbmFibGUgTTU0VCBTdXBwb3J0ICovCi0jZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfTTU0VF9GTEFHX1NUUklORyAgICA0CS8qIHNpemVvZiggQVRPTV9NNTRUX0ZMQUdfU1RSSU5HICkgKi8KKyNkZWZpbmUgQVRPTV9NNTRUX0ZMQUdfU1RSSU5HICAgICAgICJNNTRUIiAgICAgICAgICAgIC8vRmxhZyB1c2VkIHRvIGVuYWJsZSBNNTRUIFN1cHBvcnQKKyNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9NNTRUX0ZMQUdfU1RSSU5HICAgIDQgICAgICAgIC8vc2l6ZW9mKCBBVE9NX001NFRfRkxBR19TVFJJTkcgKQogCiAjZGVmaW5lIEhXX0FTU0lTVEVEX0kyQ19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAyCiAjZGVmaW5lIEhXX0FTU0lTVEVEX0kyQ19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAxCiAKLSNwcmFnbWEgcGFjaygxKQkJCS8qIEJJT1MgZGF0YSBtdXN0IHVzZSBieXRlIGFsaWdtZW50ICovCisjcHJhZ21hIHBhY2soMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCSU9TIGRhdGEgbXVzdCB1c2UgYnl0ZSBhbGlnbWVudCAqLwogCiAvKiAgRGVmaW5lIG9mZnNldCB0byBsb2NhdGlvbiBvZiBST00gaGVhZGVyLiAqLwogCkBAIC0xNjUsMzY3ICsxNzYsNDEwIEBACiAjZGVmaW5lIE9GRlNFVF9UT19BVE9NX1JPTV9JTUFHRV9TSVpFCQkJCSAgICAweDAwMDAwMDAyTAogCiAjZGVmaW5lIE9GRlNFVF9UT19BVE9NQklPU19BU0lDX0JVU19NRU1fVFlQRSAgICAweDk0Ci0jZGVmaW5lIE1BWFNJWkVfT0ZfQVRPTUJJT1NfQVNJQ19CVVNfTUVNX1RZUEUgICAyMAkvKiBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IgMHgwISAqLworI2RlZmluZSBNQVhTSVpFX09GX0FUT01CSU9TX0FTSUNfQlVTX01FTV9UWVBFICAgMjAgICAgLyogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yIDB4MCEgKi8KICNkZWZpbmUJT0ZGU0VUX1RPX0dFVF9BVE9NQklPU19TVFJJTkdTX05VTUJFUgkJMHgwMDJmCiAjZGVmaW5lCU9GRlNFVF9UT19HRVRfQVRPTUJJT1NfU1RSSU5HU19TVEFSVAkJMHgwMDZlCiAKIC8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBST00gRGF0YSB0YWJsZXMuCi0gIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgIF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuCisgIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgIF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuIAogICBBbmQgdGhlIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIHRoaXMgaGVhZGVyLiAqLwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHsKLQlVU0hPUlQgdXNTdHJ1Y3R1cmVTaXplOwotCVVDSEFSIHVjVGFibGVGb3JtYXRSZXZpc2lvbjsJLypDaGFuZ2UgaXQgd2hlbiB0aGUgUGFyc2VyIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlICovCi0JVUNIQVIgdWNUYWJsZUNvbnRlbnRSZXZpc2lvbjsJLypDaGFuZ2UgaXQgb25seSB3aGVuIHRoZSB0YWJsZSBuZWVkcyB0byBjaGFuZ2UgYnV0IHRoZSBmaXJtd2FyZSAqLwotCS8qSW1hZ2UgY2FuJ3QgYmUgdXBkYXRlZCwgd2hpbGUgRHJpdmVyIG5lZWRzIHRvIGNhcnJ5IHRoZSBuZXcgdGFibGUhICovCi19IEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIKK3sKKyAgVVNIT1JUIHVzU3RydWN0dXJlU2l6ZTsKKyAgVUNIQVIgIHVjVGFibGVGb3JtYXRSZXZpc2lvbjsgICAvKkNoYW5nZSBpdCB3aGVuIHRoZSBQYXJzZXIgaXMgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUgKi8KKyAgVUNIQVIgIHVjVGFibGVDb250ZW50UmV2aXNpb247ICAvKkNoYW5nZSBpdCBvbmx5IHdoZW4gdGhlIHRhYmxlIG5lZWRzIHRvIGNoYW5nZSBidXQgdGhlIGZpcm13YXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypJbWFnZSBjYW4ndCBiZSB1cGRhdGVkLCB3aGlsZSBEcml2ZXIgbmVlZHMgdG8gY2FycnkgdGhlIG5ldyB0YWJsZSEgKi8KK31BVE9NX0NPTU1PTl9UQUJMRV9IRUFERVI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1JPTV9IRUFERVIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVhRmlybVdhcmVTaWduYXR1cmVbNF07CS8qU2lnbmF0dXJlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gQXRvbWJpb3MgYW5kIG5vbi1hdG9tYmlvcywKLQkJCQkJICAgYXRvbWJpb3Mgc2hvdWxkIGluaXQgaXQgYXMgIkFUT00iLCBkb24ndCBjaGFuZ2UgdGhlIHBvc2l0aW9uICovCi0JVVNIT1JUIHVzQmlvc1J1bnRpbWVTZWdtZW50QWRkcmVzczsKLQlVU0hPUlQgdXNQcm90ZWN0ZWRNb2RlSW5mb09mZnNldDsKLQlVU0hPUlQgdXNDb25maWdGaWxlbmFtZU9mZnNldDsKLQlVU0hPUlQgdXNDUkNfQmxvY2tPZmZzZXQ7Ci0JVVNIT1JUIHVzQklPU19Cb290dXBNZXNzYWdlT2Zmc2V0OwotCVVTSE9SVCB1c0ludDEwT2Zmc2V0OwotCVVTSE9SVCB1c1BjaUJ1c0RldkluaXRDb2RlOwotCVVTSE9SVCB1c0lvQmFzZUFkZHJlc3M7Ci0JVVNIT1JUIHVzU3Vic3lzdGVtVmVuZG9ySUQ7Ci0JVVNIT1JUIHVzU3Vic3lzdGVtSUQ7Ci0JVVNIT1JUIHVzUENJX0luZm9PZmZzZXQ7Ci0JVVNIT1JUIHVzTWFzdGVyQ29tbWFuZFRhYmxlT2Zmc2V0OwkvKk9mZnNldCBmb3IgU1cgdG8gZ2V0IGFsbCBjb21tYW5kIHRhYmxlIG9mZnNldHMsIERvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KLQlVU0hPUlQgdXNNYXN0ZXJEYXRhVGFibGVPZmZzZXQ7CS8qT2Zmc2V0IGZvciBTVyB0byBnZXQgYWxsIGRhdGEgdGFibGUgb2Zmc2V0cywgRG9uJ3QgY2hhbmdlIHRoZSBwb3NpdGlvbiAqLwotCVVDSEFSIHVjRXh0ZW5kZWRGdW5jdGlvbkNvZGU7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9ST01fSEVBREVSOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9NX0hFQURFUgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJCXNIZWFkZXI7CisgIFVDSEFSCSB1YUZpcm1XYXJlU2lnbmF0dXJlWzRdOyAgICAvKlNpZ25hdHVyZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIEF0b21iaW9zIGFuZCBub24tYXRvbWJpb3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tYmlvcyBzaG91bGQgaW5pdCBpdCBhcyAiQVRPTSIsIGRvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KKyAgVVNIT1JUIHVzQmlvc1J1bnRpbWVTZWdtZW50QWRkcmVzczsKKyAgVVNIT1JUIHVzUHJvdGVjdGVkTW9kZUluZm9PZmZzZXQ7CisgIFVTSE9SVCB1c0NvbmZpZ0ZpbGVuYW1lT2Zmc2V0OworICBVU0hPUlQgdXNDUkNfQmxvY2tPZmZzZXQ7CisgIFVTSE9SVCB1c0JJT1NfQm9vdHVwTWVzc2FnZU9mZnNldDsKKyAgVVNIT1JUIHVzSW50MTBPZmZzZXQ7CisgIFVTSE9SVCB1c1BjaUJ1c0RldkluaXRDb2RlOworICBVU0hPUlQgdXNJb0Jhc2VBZGRyZXNzOworICBVU0hPUlQgdXNTdWJzeXN0ZW1WZW5kb3JJRDsKKyAgVVNIT1JUIHVzU3Vic3lzdGVtSUQ7CisgIFVTSE9SVCB1c1BDSV9JbmZvT2Zmc2V0OyAKKyAgVVNIT1JUIHVzTWFzdGVyQ29tbWFuZFRhYmxlT2Zmc2V0OyAvKk9mZnNldCBmb3IgU1cgdG8gZ2V0IGFsbCBjb21tYW5kIHRhYmxlIG9mZnNldHMsIERvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KKyAgVVNIT1JUIHVzTWFzdGVyRGF0YVRhYmxlT2Zmc2V0OyAgIC8qT2Zmc2V0IGZvciBTVyB0byBnZXQgYWxsIGRhdGEgdGFibGUgb2Zmc2V0cywgRG9uJ3QgY2hhbmdlIHRoZSBwb3NpdGlvbiAqLworICBVQ0hBUiAgdWNFeHRlbmRlZEZ1bmN0aW9uQ29kZTsKKyAgVUNIQVIgIHVjUmVzZXJ2ZWQ7Cit9QVRPTV9ST01fSEVBREVSOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNvbW1hbmQgVGFibGUgUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiAjaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVVEVNUAlVU0hPUlQKLSNkZWZpbmUJVVNIT1JUCXZvaWQqCisJI2RlZmluZQlVVEVNUAlVU0hPUlQKKwkjZGVmaW5lCVVTSE9SVAl2b2lkKgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTIHsKLQlVU0hPUlQgQVNJQ19Jbml0OwkvKiBGdW5jdGlvbiBUYWJsZSwgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEdldERpc3BsYXlTdXJmYWNlU2l6ZTsJLyogQXRvbWljIFRhYmxlLCAgVXNlZCBieSBCaW9zIHdoZW4gZW5hYmxpbmcgSFcgSUNPTiAqLwotCVVTSE9SVCBBU0lDX1JlZ2lzdGVyc0luaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIFZSQU1fQmxvY2tWZW5kZXJEZXRlY3Rpb247CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIERJR3hFbmNvZGVyQ29udHJvbDsJLyogT25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgTWVtb3J5Q29udHJvbGxlckluaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIEVuYWJsZUNSVENNZW1SZXE7CS8qIEZ1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDIuMSAqLwotCVVTSE9SVCBNZW1vcnlQYXJhbUFkanVzdDsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayBpZiBuZWVkZWQgKi8KLQlVU0hPUlQgRFZPRW5jb2RlckNvbnRyb2w7CS8qIEZ1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAqLwotCVVTSE9SVCBHUElPUGluQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgU2V0RW5naW5lQ2xvY2s7CS8qRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldE1lbW9yeUNsb2NrOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgU2V0UGl4ZWxDbG9jazsJLypGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgKi8KLQlVU0hPUlQgRHluYW1pY0Nsb2NrR2F0aW5nOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEFTSUNfSW5pdCAqLwotCVVTSE9SVCBSZXNldE1lbW9yeURMTDsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBSZXNldE1lbW9yeURldmljZTsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBNZW1vcnlQTExJbml0OwotCVVTSE9SVCBBZGp1c3REaXNwbGF5UGxsOwkvKiBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBBZGp1c3RNZW1vcnlDb250cm9sbGVyOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeUNsb2NrICovCi0JVVNIT1JUIEVuYWJsZUFTSUNfU3RhdGljUHdyTWd0OwkvKiBBdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBBU0lDX1N0YXRpY1B3ck1ndFN0YXR1c0NoYW5nZTsJLyogT2Jzb2xldGUsIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIERBQ19Mb2FkRGV0ZWN0aW9uOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgKi8KLQlVU0hPUlQgTFZUTUFFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMyAqLwotCVVTSE9SVCBMQ0QxT3V0cHV0Q29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERBQzFFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERBQzJFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERWT091dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBDVjFPdXRwdXRDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgR2V0Q29uZGl0aW9uYWxHb2xkZW5TZXR0aW5nOwkvKiBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBUVkVuY29kZXJDb250cm9sOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgVE1EU0FFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIExWRFNFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIFRWMU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBFbmFibGVTY2FsZXI7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIEJsYW5rQ1JUQzsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEVuYWJsZUNSVEM7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBHZXRQaXhlbENsb2NrOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRW5hYmxlVkdBX1JlbmRlcjsJLyogRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEVuYWJsZVZHQV9BY2Nlc3M7CS8qIE9ic29sZXRlICwgICAgIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFNldENSVENfVGltaW5nOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgU2V0Q1JUQ19PdmVyU2NhbjsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldENSVENfUmVwbGljYXRpb247CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIFNlbGVjdENSVENfU291cmNlOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRW5hYmxlR3JhcGhTdXJmYWNlczsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MgKi8KLQlVU0hPUlQgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnM7Ci0JVVNIT1JUIExVVF9BdXRvRmlsbDsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgRW5hYmxlSFdfSWNvbkN1cnNvcjsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgR2V0TWVtb3J5Q2xvY2s7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBHZXRFbmdpbmVDbG9jazsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldENSVENfVXNpbmdEVERUaW1pbmc7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBFeHRlcm5hbEVuY29kZXJDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgKi8KLQlVU0hPUlQgTFZUTUFPdXRwdXRDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgVlJBTV9CbG9ja0RldGVjdGlvbkJ5U3RyYXA7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIE1lbW9yeUNsZWFuVXA7CS8qIEF0b21pYyBUYWJsZSwgIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFByb2Nlc3NJMmNDaGFubmVsVHJhbnNhY3Rpb247CS8qIEZ1bmN0aW9uIFRhYmxlLG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFdyaXRlT25lQnl0ZVRvSFdBc3Npc3RlZEkyQzsJLyogRnVuY3Rpb24gVGFibGUsaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBSZWFkSFdBc3Npc3RlZEkyQ1N0YXR1czsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBTcGVlZEZhbkNvbnRyb2w7CS8qIEZ1bmN0aW9uIFRhYmxlLGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgTUNfU3luY2hyb25pemF0aW9uOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeUNsb2NrICovCi0JVVNIT1JUIENvbXB1dGVNZW1vcnlFbmdpbmVQTEw7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5L0VuZ2luZUNsb2NrICovCi0JVVNIT1JUIE1lbW9yeVJlZnJlc2hDb252ZXJzaW9uOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeSBvciBTZXRFbmdpbmVDbG9jayAqLwotCVVTSE9SVCBWUkFNX0dldEN1cnJlbnRJbmZvQmxvY2s7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIER5bmFtaWNNZW1vcnlTZXR0aW5nczsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBNZW1vcnlUcmFpbmluZzsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MgKi8KLQlVU0hPUlQgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTEw7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAqLwotCVVTSE9SVCBUTURTQU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBTZXRWb2x0YWdlOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSBhbmQvb3IgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgREFDMU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBEQUMyT3V0cHV0Q29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldHVwSFdBc3Npc3RlZEkyQ1N0YXR1czsJLyogRnVuY3Rpb24gVGFibGUsb25seSB1c2VkIGJ5IEJpb3MsIG9ic29sZXRlIHNvb24uU3dpdGNoIHRvIHVzZSAiUmVhZEVESURGcm9tSFdBc3Npc3RlZEkyQyIgKi8KLQlVU0hPUlQgQ2xvY2tTb3VyY2U7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIE1lbW9yeURldmljZUluaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sgKi8KLQlVU0hPUlQgRW5hYmxlWVVWOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEVuYWJsZVZHQVJlbmRlciAqLwotCVVTSE9SVCBESUcxRW5jb2RlckNvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRElHMkVuY29kZXJDb250cm9sOwkvKiBBdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERJRzFUcmFuc21pdHRlckNvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRElHMlRyYW5zbWl0dGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBQcm9jZXNzQXV4Q2hhbm5lbFRyYW5zYWN0aW9uOwkvKiBGdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBEUEVuY29kZXJTZXJ2aWNlOwkvKiBGdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcyAqLwotfSBBVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVN7CisgIFVTSE9SVCBBU0lDX0luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSwgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBHZXREaXNwbGF5U3VyZmFjZVNpemU7ICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBVc2VkIGJ5IEJpb3Mgd2hlbiBlbmFibGluZyBIVyBJQ09OCisgIFVTSE9SVCBBU0lDX1JlZ2lzdGVyc0luaXQ7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEFTSUNfSW5pdAorICBVU0hPUlQgVlJBTV9CbG9ja1ZlbmRlckRldGVjdGlvbjsgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MKKyAgVVNIT1JUIERJR3hFbmNvZGVyQ29udHJvbDsJCQkJCQkJCQkJIC8vT25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIE1lbW9yeUNvbnRyb2xsZXJJbml0OyAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0CisgIFVTSE9SVCBFbmFibGVDUlRDTWVtUmVxOyAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEKKyAgVVNIT1JUIE1lbW9yeVBhcmFtQWRqdXN0OyAJCQkJCQkJCQkJIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayBpZiBuZWVkZWQKKyAgVVNIT1JUIERWT0VuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMgorICBVU0hPUlQgR1BJT1BpbkNvbnRyb2w7CQkJCQkJCQkJCQkJIC8vQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIFNldEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgU2V0TWVtb3J5Q2xvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXRQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgIAorICBVU0hPUlQgRHluYW1pY0Nsb2NrR2F0aW5nOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIFJlc2V0TWVtb3J5RExMOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIFJlc2V0TWVtb3J5RGV2aWNlOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIE1lbW9yeVBMTEluaXQ7CisgIFVTSE9SVCBBZGp1c3REaXNwbGF5UGxsOwkJCQkJCQkJCQkJCS8vb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIEFkanVzdE1lbW9yeUNvbnRyb2xsZXI7ICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sgICAgICAgICAgICAgICAgCisgIFVTSE9SVCBFbmFibGVBU0lDX1N0YXRpY1B3ck1ndDsgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgQVNJQ19TdGF0aWNQd3JNZ3RTdGF0dXNDaGFuZ2U7ICAgICAgICAgIC8vT2Jzb2xldGUgLCAgICAgb25seSB1c2VkIGJ5IEJpb3MgICAKKyAgVVNIT1JUIERBQ19Mb2FkRGV0ZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAgCisgIFVTSE9SVCBMVlRNQUVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zCisgIFVTSE9SVCBMQ0QxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBEQUMxRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgIAorICBVU0hPUlQgREFDMkVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xIAorICBVU0hPUlQgRFZPT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xIAorICBVU0hPUlQgQ1YxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgQXRvbWljIFRhYmxlLCAgT2Jzb2xldGUgZnJvbSBSeTZ4eCwgdXNlIERBQzIgT3V0cHV0IGluc3RlYWQgCisgIFVTSE9SVCBHZXRDb25kaXRpb25hbEdvbGRlblNldHRpbmc7ICAgICAgICAgICAgLy9vbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgVFZFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBUTURTQUVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjMKKyAgVVNIT1JUIExWRFNFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMworICBVU0hPUlQgVFYxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgT2Jzb2xldGUgZnJvbSBSeTZ4eCwgdXNlIERBQzIgT3V0cHV0IGluc3RlYWQKKyAgVVNIT1JUIEVuYWJsZVNjYWxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBCbGFua0NSVEM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVDUlRDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBHZXRQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVWR0FfUmVuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIEdldFNDTEtPdmVyTUNMS1JhdGlvOyAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIG9ubHkgdXNlZCBieSBCaW9zCisgIFVTSE9SVCBTZXRDUlRDX1RpbWluZzsgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIFNldENSVENfT3ZlclNjYW47ICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIFNldENSVENfUmVwbGljYXRpb247ICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBTZWxlY3RDUlRDX1NvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVHcmFwaFN1cmZhY2VzOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICB1c2VkIG9ubHkgYnkgQmlvcworICBVU0hPUlQgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnM7CisgIFVTSE9SVCBMVVRfQXV0b0ZpbGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgRW5hYmxlSFdfSWNvbkN1cnNvcjsgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIEdldE1lbW9yeUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIEdldEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIFNldENSVENfVXNpbmdEVERUaW1pbmc7ICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgRXh0ZXJuYWxFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMi4xCisgIFVTSE9SVCBMVlRNQU91dHB1dENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIFZSQU1fQmxvY2tEZXRlY3Rpb25CeVN0cmFwOyAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBNZW1vcnlDbGVhblVwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcyAgICAKKyAgVVNIT1JUIFByb2Nlc3NJMmNDaGFubmVsVHJhbnNhY3Rpb247ICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLG9ubHkgdXNlZCBieSBCaW9zCisgIFVTSE9SVCBXcml0ZU9uZUJ5dGVUb0hXQXNzaXN0ZWRJMkM7ICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzIAorICBVU0hPUlQgUmVhZEhXQXNzaXN0ZWRJMkNTdGF0dXM7ICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cworICBVU0hPUlQgU3BlZWRGYW5Db250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uOyAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgTUNfU3luY2hyb25pemF0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jaworICBVU0hPUlQgQ29tcHV0ZU1lbW9yeUVuZ2luZVBMTDsgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnkvRW5naW5lQ2xvY2sKKyAgVVNIT1JUIE1lbW9yeVJlZnJlc2hDb252ZXJzaW9uOyAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5IG9yIFNldEVuZ2luZUNsb2NrCisgIFVTSE9SVCBWUkFNX0dldEN1cnJlbnRJbmZvQmxvY2s7ICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICB1c2VkIG9ubHkgYnkgQmlvcworICBVU0hPUlQgRHluYW1pY01lbW9yeVNldHRpbmdzOyAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jaworICBVU0hPUlQgTWVtb3J5VHJhaW5pbmc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MKKyAgVVNIT1JUIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMOyAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMgorICBVU0hPUlQgVE1EU0FPdXRwdXRDb250cm9sOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXRWb2x0YWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSBhbmQvb3IgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIERBQzFPdXRwdXRDb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgREFDMk91dHB1dENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXR1cEhXQXNzaXN0ZWRJMkNTdGF0dXM7ICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcywgb2Jzb2xldGUgc29vbi5Td2l0Y2ggdG8gdXNlICJSZWFkRURJREZyb21IV0Fzc2lzdGVkSTJDIgorICBVU0hPUlQgQ2xvY2tTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIE1lbW9yeURldmljZUluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIEVuYWJsZVlVVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gRW5hYmxlVkdBUmVuZGVyCisgIFVTSE9SVCBESUcxRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcyRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcxVHJhbnNtaXR0ZXJDb250cm9sOyAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcyVHJhbnNtaXR0ZXJDb250cm9sOwkgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBQcm9jZXNzQXV4Q2hhbm5lbFRyYW5zYWN0aW9uOwkJCQkJIC8vRnVuY3Rpb24gVGFibGUsb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIERQRW5jb2RlclNlcnZpY2U7CQkJCQkJCQkJCQkgLy9GdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcworfUFUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVM7ICAgCiAKLS8qICBGb3IgYmFja3dhcmQgY29tcGF0aWJsZSAqLworLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgCiAjZGVmaW5lIFJlYWRFRElERnJvbUhXQXNzaXN0ZWRJMkMgICAgICAgICAgICAgICAgUHJvY2Vzc0kyY0NoYW5uZWxUcmFuc2FjdGlvbgogI2RlZmluZSBVTklQSFlUcmFuc21pdHRlckNvbnRyb2wJCQkJCQkgICAgIERJRzFUcmFuc21pdHRlckNvbnRyb2wKICNkZWZpbmUgTFZUTUFUcmFuc21pdHRlckNvbnRyb2wJCQkJCQkJICAgICBESUcyVHJhbnNtaXR0ZXJDb250cm9sCiAjZGVmaW5lIFNldENSVENfRFBNX1N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q29uZGl0aW9uYWxHb2xkZW5TZXR0aW5nCiAjZGVmaW5lIFNldFVuaXBoeUluc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgQVNJQ19TdGF0aWNQd3JNZ3RTdGF0dXNDaGFuZ2UKKyNkZWZpbmUgSFBESW50ZXJydXB0U2VydmljZSAgICAgICAgICAgICAgICAgICAgICBSZWFkSFdBc3Npc3RlZEkyQ1N0YXR1cworI2RlZmluZSBFbmFibGVWR0FfQWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNDTEtPdmVyTUNMS1JhdGlvCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTIExpc3RPZkNvbW1hbmRUYWJsZXM7Ci19IEFUT01fTUFTVEVSX0NPTU1BTkRfVEFCTEU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQVNURVJfQ09NTUFORF9UQUJMRQoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICAgICAgICAgIHNIZWFkZXI7CisgIEFUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVMgTGlzdE9mQ29tbWFuZFRhYmxlczsKK31BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgaW4gZXZlcnkgY29tbWFuZCB0YWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UQUJMRV9BVFRSSUJVVEUgeworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGluIGV2ZXJ5IGNvbW1hbmQgdGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1RBQkxFX0FUVFJJQlVURQorewogI2lmIEFUT01fQklHX0VORElBTgotCVVTSE9SVCBVcGRhdGVkQnlVdGlsaXR5OjE7CS8qIFsxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcgKi8KLQlVU0hPUlQgUFNfU2l6ZUluQnl0ZXM6NzsJLyogWzE0OjhdPVNpemUgb2YgcGFyYW1ldGVyIHNwYWNlIGluIEJ5dGVzIChtdWx0aXBsZSBvZiBhIGR3b3JkKSwgKi8KLQlVU0hPUlQgV1NfU2l6ZUluQnl0ZXM6ODsJLyogWzc6MF09U2l6ZSBvZiB3b3Jrc3BhY2UgaW4gQnl0ZXMgKGluIG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLworICBVU0hPUlQgIFVwZGF0ZWRCeVV0aWxpdHk6MTsgICAgICAgICAvL1sxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcKKyAgVVNIT1JUICBQU19TaXplSW5CeXRlczo3OyAgICAgICAgICAgLy9bMTQ6OF09U2l6ZSBvZiBwYXJhbWV0ZXIgc3BhY2UgaW4gQnl0ZXMgKG11bHRpcGxlIG9mIGEgZHdvcmQpLCAKKyAgVVNIT1JUICBXU19TaXplSW5CeXRlczo4OyAgICAgICAgICAgLy9bNzowXT1TaXplIG9mIHdvcmtzcGFjZSBpbiBCeXRlcyAoaW4gbXVsdGlwbGUgb2YgYSBkd29yZCksIAogI2Vsc2UKLQlVU0hPUlQgV1NfU2l6ZUluQnl0ZXM6ODsJLyogWzc6MF09U2l6ZSBvZiB3b3Jrc3BhY2UgaW4gQnl0ZXMgKGluIG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLwotCVVTSE9SVCBQU19TaXplSW5CeXRlczo3OwkvKiBbMTQ6OF09U2l6ZSBvZiBwYXJhbWV0ZXIgc3BhY2UgaW4gQnl0ZXMgKG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLwotCVVTSE9SVCBVcGRhdGVkQnlVdGlsaXR5OjE7CS8qIFsxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcgKi8KKyAgVVNIT1JUICBXU19TaXplSW5CeXRlczo4OyAgICAgICAgICAgLy9bNzowXT1TaXplIG9mIHdvcmtzcGFjZSBpbiBCeXRlcyAoaW4gbXVsdGlwbGUgb2YgYSBkd29yZCksIAorICBVU0hPUlQgIFBTX1NpemVJbkJ5dGVzOjc7ICAgICAgICAgICAvL1sxNDo4XT1TaXplIG9mIHBhcmFtZXRlciBzcGFjZSBpbiBCeXRlcyAobXVsdGlwbGUgb2YgYSBkd29yZCksIAorICBVU0hPUlQgIFVwZGF0ZWRCeVV0aWxpdHk6MTsgICAgICAgICAvL1sxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcKICNlbmRpZgotfSBBVE9NX1RBQkxFX0FUVFJJQlVURTsKK31BVE9NX1RBQkxFX0FUVFJJQlVURTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTIHsKLQlBVE9NX1RBQkxFX0FUVFJJQlVURSBzYmZBY2Nlc3M7Ci0JVVNIT1JUIHN1c0FjY2VzczsKLX0gQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTCit7CisgIEFUT01fVEFCTEVfQVRUUklCVVRFIHNiZkFjY2VzczsKKyAgVVNIT1JUICAgICAgICAgICAgICAgc3VzQWNjZXNzOworfUFUT01fVEFCTEVfQVRUUklCVVRFX0FDQ0VTUzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQ29tbW9uIGhlYWRlciBmb3IgYWxsIGNvbW1hbmQgdGFibGVzLiAqLwotLyogIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgYnkgX0FUT01fTUFTVEVSX0NPTU1BTkRfVEFCTEUgaGFzIHRoaXMgY29tbW9uIGhlYWRlci4gKi8KLS8qICBBbmQgdGhlIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIHRoaXMgaGVhZGVyLiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUk9NX0NPTU1BTkRfVEFCTEVfSEVBREVSIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgQ29tbW9uSGVhZGVyOwotCUFUT01fVEFCTEVfQVRUUklCVVRFIFRhYmxlQXR0cmlidXRlOwotfSBBVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBDb21tb24gaGVhZGVyIGZvciBhbGwgY29tbWFuZCB0YWJsZXMuCisvLyBFdmVyeSB0YWJsZSBwb2ludGVkIGJ5IF9BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuIAorLy8gQW5kIHRoZSBwb2ludGVyIGFjdHVhbGx5IHBvaW50cyB0byB0aGlzIGhlYWRlci4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIENvbW1vbkhlYWRlcjsKKyAgQVRPTV9UQUJMRV9BVFRSSUJVVEUgICAgIFRhYmxlQXR0cmlidXRlOwkKK31BVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBDb21wdXRlTWVtb3J5RW5naW5lUExMVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IENvbXB1dGVNZW1vcnlFbmdpbmVQTExUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogI2RlZmluZSBDT01QVVRFX01FTU9SWV9QTExfUEFSQU0gICAgICAgIDEKICNkZWZpbmUgQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNICAgICAgICAyCiAKLXR5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlMgewotCVVMT05HIHVsQ2xvY2s7CQkvKiBXaGVuIHJldHVyZW4sIGl0J3MgdGhlIHJlLWNhbGN1bGF0ZWQgY2xvY2sgYmFzZWQgb24gZ2l2ZW4gRmJfZGl2IFBvc3RfRGl2IGFuZCByZWZfZGl2ICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiAwOnJlc2VydmVkIC8vMTpNZW1vcnkgLy8yOkVuZ2luZSAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQ7CS8qIG1heSBleHBhbmQgdG8gcmV0dXJuIGxhcmdlciBGYmRpdiBsYXRlciAqLwotCVVDSEFSIHVjRmJEaXY7CQkvKiByZXR1cm4gdmFsdWUgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qIHJldHVybiB2YWx1ZSAqLwotfSBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTCit7CisgIFVMT05HICAgdWxDbG9jazsgICAgICAgIC8vV2hlbiByZXR1cmVuLCBpdCdzIHRoZSByZS1jYWxjdWxhdGVkIGNsb2NrIGJhc2VkIG9uIGdpdmVuIEZiX2RpdiBQb3N0X0RpdiBhbmQgcmVmX2RpdgorICBVQ0hBUiAgIHVjQWN0aW9uOyAgICAgICAvLzA6cmVzZXJ2ZWQgLy8xOk1lbW9yeSAvLzI6RW5naW5lICAKKyAgVUNIQVIgICB1Y1Jlc2VydmVkOyAgICAgLy9tYXkgZXhwYW5kIHRvIHJldHVybiBsYXJnZXIgRmJkaXYgbGF0ZXIKKyAgVUNIQVIgICB1Y0ZiRGl2OyAgICAgICAgLy9yZXR1cm4gdmFsdWUKKyAgVUNIQVIgICB1Y1Bvc3REaXY7ICAgICAgLy9yZXR1cm4gdmFsdWUKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjIgewotCVVMT05HIHVsQ2xvY2s7CQkvKiBXaGVuIHJldHVybiwgWzIzOjBdIHJldHVybiByZWFsIGNsb2NrICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiAwOnJlc2VydmVkO0NPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTTpNZW1vcnk7Q09NUFVURV9FTkdJTkVfUExMX1BBUkFNOkVuZ2luZS4gaXQgcmV0dXJuIHJlZl9kaXYgdG8gYmUgd3JpdHRlbiB0byByZWdpc3RlciAqLwotCVVTSE9SVCB1c0ZiRGl2OwkJLyogcmV0dXJuIEZlZWRiYWNrIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gcmVnaXN0ZXIgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qIHJldHVybiBwb3N0IGRpdiB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyICovCi19IENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WMjsKK3R5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjIKK3sKKyAgVUxPTkcgICB1bENsb2NrOyAgICAgICAgLy9XaGVuIHJldHVybiwgWzIzOjBdIHJldHVybiByZWFsIGNsb2NrIAorICBVQ0hBUiAgIHVjQWN0aW9uOyAgICAgICAvLzA6cmVzZXJ2ZWQ7Q09NUFVURV9NRU1PUllfUExMX1BBUkFNOk1lbW9yeTtDT01QVVRFX0VOR0lORV9QTExfUEFSQU06RW5naW5lLiBpdCByZXR1cm4gcmVmX2RpdiB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyCisgIFVTSE9SVCAgdXNGYkRpdjsJCSAgICAvL3JldHVybiBGZWVkYmFjayB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyCisgIFVDSEFSICAgdWNQb3N0RGl2OyAgICAgIC8vcmV0dXJuIHBvc3QgZGl2IHRvIGJlIHdyaXR0ZW4gdG8gcmVnaXN0ZXIKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjI7CiAjZGVmaW5lIENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OICAgQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTCiAKLSNkZWZpbmUgU0VUX0NMT0NLX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYJLyogQ2xvY2sgY2hhbmdlIHRhYmxlcyBvbmx5IHRha2UgYml0IFsyMzowXSBhcyB0aGUgcmVxdWVzdGVkIGNsb2NrIHZhbHVlICovCi0jZGVmaW5lIFVTRV9OT05fQlVTX0NMT0NLX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCB1c2VzIGFub3RoZXIgY2xvY2sgYXMgdGhlIHRlbXBvcmFyeSBjbG9jayAoZW5naW5lIHVzZXMgbWVtb3J5IGFuZCB2aWNlIHZlcnNhKSAqLwotI2RlZmluZSBVU0VfTUVNT1JZX1NFTEZfUkVGUkVTSF9NQVNLICAgICAgICAgICAgMHgwMjAwMDAwMAkvKiBPbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHVzaW5nIG1lbW9yeSBzZWxmIHJlZnJlc2ggZHVyaW5nIGNsb2NrIHRyYW5zaXRpb24gKi8KLSNkZWZpbmUgU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQwMDAwMDAJLyogT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB0aGUgdGFibGUgd2lsbCBza2lwIHByZWRlZmluZWQgaW50ZXJuYWwgbWVtb3J5IHBhcmFtZXRlciBjaGFuZ2UgKi8KLSNkZWZpbmUgRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4MDAwMDAwCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwICovCi0jZGVmaW5lIFNLSVBfU1dfUFJPR1JBTV9QTEwJCQkJCQkJCQkJCTB4MTAwMDAwMDAJLyogQXBwbGljYWJsZSB0byBib3RoIG1lbW9yeSBhbmQgZW5naW5lIGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIGl0IG1lYW5zIHRoZSB0YWJsZSB3aWxsIG5vdCBwcm9ncmFtIFNQTEwvTVBMTCAqLworCisjZGVmaW5lIFNFVF9DTE9DS19GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGICAvL0Nsb2NrIGNoYW5nZSB0YWJsZXMgb25seSB0YWtlIGJpdCBbMjM6MF0gYXMgdGhlIHJlcXVlc3RlZCBjbG9jayB2YWx1ZQorI2RlZmluZSBVU0VfTk9OX0JVU19DTE9DS19NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLy9BcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgdXNlcyBhbm90aGVyIGNsb2NrIGFzIHRoZSB0ZW1wb3JhcnkgY2xvY2sgKGVuZ2luZSB1c2VzIG1lbW9yeSBhbmQgdmljZSB2ZXJzYSkKKyNkZWZpbmUgVVNFX01FTU9SWV9TRUxGX1JFRlJFU0hfTUFTSyAgICAgICAgICAgIDB4MDIwMDAwMDAJLy9Pbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHVzaW5nIG1lbW9yeSBzZWxmIHJlZnJlc2ggZHVyaW5nIGNsb2NrIHRyYW5zaXRpb24KKyNkZWZpbmUgU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQwMDAwMDAgIC8vT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB0aGUgdGFibGUgd2lsbCBza2lwIHByZWRlZmluZWQgaW50ZXJuYWwgbWVtb3J5IHBhcmFtZXRlciBjaGFuZ2UKKyNkZWZpbmUgRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4MDAwMDAwCS8vQXBwbGljYWJsZSB0byBib3RoIG1lbW9yeSBhbmQgZW5naW5lIGNsb2NrIGNoYW5nZSx3aGVuIHNldCwgaXQgbWVhbnMgdGhpcyBpcyAxc3QgdGltZSB0byBjaGFuZ2UgY2xvY2sgYWZ0ZXIgQVNJQyBib290dXAKKyNkZWZpbmUgU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMDAwMDAwMAkvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCBtZWFucyB0aGUgdGFibGUgd2lsbCBub3QgcHJvZ3JhbSBTUExML01QTEwKICNkZWZpbmUgVVNFX1NTX0VOQUJMRURfUElYRUxfQ0xPQ0sgIFVTRV9OT05fQlVTX0NMT0NLX01BU0sKIAotI2RlZmluZSBiM1VTRV9OT05fQlVTX0NMT0NLX01BU0sgICAgICAgICAgICAgICAgICAweDAxCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCB1c2VzIGFub3RoZXIgY2xvY2sgYXMgdGhlIHRlbXBvcmFyeSBjbG9jayAoZW5naW5lIHVzZXMgbWVtb3J5IGFuZCB2aWNlIHZlcnNhKSAqLwotI2RlZmluZSBiM1VTRV9NRU1PUllfU0VMRl9SRUZSRVNIICAgICAgICAgICAgICAgICAweDAyCS8qIE9ubHkgYXBwbGljYWJsZSB0byBtZW1vcnkgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgdXNpbmcgbWVtb3J5IHNlbGYgcmVmcmVzaCBkdXJpbmcgY2xvY2sgdHJhbnNpdGlvbiAqLwotI2RlZmluZSBiM1NLSVBfSU5URVJOQUxfTUVNT1JZX1BBUkFNRVRFUl9DSEFOR0UgICAweDA0CS8qIE9ubHkgYXBwbGljYWJsZSB0byBtZW1vcnkgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgdGhlIHRhYmxlIHdpbGwgc2tpcCBwcmVkZWZpbmVkIGludGVybmFsIG1lbW9yeSBwYXJhbWV0ZXIgY2hhbmdlICovCi0jZGVmaW5lIGIzRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4CS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwICovCi0jZGVmaW5lIGIzU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMAkvKiBBcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgbWVhbnMgdGhlIHRhYmxlIHdpbGwgbm90IHByb2dyYW0gU1BMTC9NUExMICovCisjZGVmaW5lIGIzVVNFX05PTl9CVVNfQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEgICAgICAgLy9BcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgdXNlcyBhbm90aGVyIGNsb2NrIGFzIHRoZSB0ZW1wb3JhcnkgY2xvY2sgKGVuZ2luZSB1c2VzIG1lbW9yeSBhbmQgdmljZSB2ZXJzYSkKKyNkZWZpbmUgYjNVU0VfTUVNT1JZX1NFTEZfUkVGUkVTSCAgICAgICAgICAgICAgICAgMHgwMgkgICAgIC8vT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB1c2luZyBtZW1vcnkgc2VsZiByZWZyZXNoIGR1cmluZyBjbG9jayB0cmFuc2l0aW9uCisjZGVmaW5lIGIzU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQgICAgICAgLy9Pbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHRoZSB0YWJsZSB3aWxsIHNraXAgcHJlZGVmaW5lZCBpbnRlcm5hbCBtZW1vcnkgcGFyYW1ldGVyIGNoYW5nZQorI2RlZmluZSBiM0ZJUlNUX1RJTUVfQ0hBTkdFX0NMT0NLCQkJCQkJCQkJMHgwOCAgICAgICAvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwCisjZGVmaW5lIGIzU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMAkJCSAvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCBtZWFucyB0aGUgdGFibGUgd2lsbCBub3QgcHJvZ3JhbSBTUExML01QTEwKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUFVURV9DTE9DS19GUkVRIHsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUQorewogI2lmIEFUT01fQklHX0VORElBTgotCVVMT05HIHVsQ29tcHV0ZUNsb2NrRmxhZzo4OwkvKiAgPTE6IENPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTSwgPTI6IENPTVBVVEVfRU5HSU5FX1BMTF9QQVJBTSAqLwotCVVMT05HIHVsQ2xvY2tGcmVxOjI0OwkvKiAgaW4gdW5pdCBvZiAxMGtIeiAqLworICBVTE9ORyB1bENvbXB1dGVDbG9ja0ZsYWc6ODsgICAgICAgICAgICAgICAgIC8vID0xOiBDT01QVVRFX01FTU9SWV9QTExfUEFSQU0sID0yOiBDT01QVVRFX0VOR0lORV9QTExfUEFSQU0KKyAgVUxPTkcgdWxDbG9ja0ZyZXE6MjQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB1bml0IG9mIDEwa0h6CiAjZWxzZQotCVVMT05HIHVsQ2xvY2tGcmVxOjI0OwkvKiAgaW4gdW5pdCBvZiAxMGtIeiAqLwotCVVMT05HIHVsQ29tcHV0ZUNsb2NrRmxhZzo4OwkvKiAgPTE6IENPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTSwgPTI6IENPTVBVVEVfRU5HSU5FX1BMTF9QQVJBTSAqLworICBVTE9ORyB1bENsb2NrRnJlcToyNDsgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMTBrSHoKKyAgVUxPTkcgdWxDb21wdXRlQ2xvY2tGbGFnOjg7ICAgICAgICAgICAgICAgICAvLyA9MTogQ09NUFVURV9NRU1PUllfUExMX1BBUkFNLCA9MjogQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNCiAjZW5kaWYKLX0gQVRPTV9DT01QVVRFX0NMT0NLX0ZSRVE7Cit9QVRPTV9DT01QVVRFX0NMT0NLX0ZSRVE7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NfTVBMTF9GQl9ESVZJREVSIHsKLQlVU0hPUlQgdXNGYkRpdkZyYWM7Ci0JVVNIT1JUIHVzRmJEaXY7Ci19IEFUT01fU19NUExMX0ZCX0RJVklERVI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TX01QTExfRkJfRElWSURFUgoreworICBVU0hPUlQgdXNGYkRpdkZyYWM7ICAKKyAgVVNIT1JUIHVzRmJEaXY7ICAKK31BVE9NX1NfTVBMTF9GQl9ESVZJREVSOwogCi10eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzIHsKLQl1bmlvbiB7Ci0JCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7CS8qIElucHV0IFBhcmFtZXRlciAqLwotCQlBVE9NX1NfTVBMTF9GQl9ESVZJREVSIHVsRmJEaXY7CS8qIE91dHB1dCBQYXJhbWV0ZXIgKi8KLQl9OwotCVVDSEFSIHVjUmVmRGl2OwkJLyogT3V0cHV0IFBhcmFtZXRlciAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogT3V0cHV0IFBhcmFtZXRlciAqLwotCVVDSEFSIHVjQ250bEZsYWc7CS8qIE91dHB1dCBQYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOwotfSBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjM7Cit0eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzCit7CisgIHVuaW9uCisgIHsKKyAgICBBVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUSAgdWxDbG9jazsgICAgICAgICAvL0lucHV0IFBhcmFtZXRlcgorICAgIEFUT01fU19NUExMX0ZCX0RJVklERVIgICB1bEZiRGl2OyAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlcgorICB9OworICBVQ0hBUiAgIHVjUmVmRGl2OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjUG9zdERpdjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjQ250bEZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjUmVzZXJ2ZWQ7Cit9Q09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzOwogCi0vKiAgdWNDbnRsRmxhZyAqLworLy8gdWNDbnRsRmxhZwogI2RlZmluZSBBVE9NX1BMTF9DTlRMX0ZMQUdfUExMX1BPU1RfRElWX0VOICAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9QTExfQ05UTF9GTEFHX01QTExfVkNPX01PREUgICAgICAgICAgICAyCiAjZGVmaW5lIEFUT01fUExMX0NOVExfRkxBR19GUkFDVElPTl9ESVNBQkxFICAgICAgICAgNAorI2RlZmluZSBBVE9NX1BMTF9DTlRMX0ZMQUdfU1BMTF9JU1BBUkVfOQkJCQkJCTgKIAotdHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX01FTU9SWV9TRVRUSU5HU19QQVJBTUVURVIgewotCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7Ci0JVUxPTkcgdWxSZXNlcnZlZFsyXTsKLX0gRFlOQU1JQ0VfTUVNT1JZX1NFVFRJTkdTX1BBUkFNRVRFUjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX0VOR0lORV9TRVRUSU5HU19QQVJBTUVURVIgewotCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7Ci0JVUxPTkcgdWxNZW1vcnlDbG9jazsKLQlVTE9ORyB1bFJlc2VydmVkOwotfSBEWU5BTUlDRV9FTkdJTkVfU0VUVElOR1NfUEFSQU1FVEVSOworLy8gVjQgYXJlIG9ubHkgdXNlZCBmb3IgQVBVIHdoaWNoIFBMTCBvdXRzaWRlIEdQVQordHlwZWRlZiBzdHJ1Y3QgX0NPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WNAoreworI2lmIEFUT01fQklHX0VORElBTgorICBVTE9ORyAgdWNQb3N0RGl2OyAgICAgICAgICAvL3JldHVybiBwYXJhbWV0ZXI6IHBvc3QgZGl2aWRlciB3aGljaCBpcyB1c2VkIHRvIHByb2dyYW0gdG8gcmVnaXN0ZXIgZGlyZWN0bHkKKyAgVUxPTkcgIHVsQ2xvY2s6MjQ7ICAgICAgICAgLy9JbnB1dD0gdGFyZ2V0IGNsb2NrLCBvdXRwdXQgPSBhY3R1YWwgY2xvY2sgCisjZWxzZQorICBVTE9ORyAgdWxDbG9jazoyNDsgICAgICAgICAvL0lucHV0PSB0YXJnZXQgY2xvY2ssIG91dHB1dCA9IGFjdHVhbCBjbG9jayAKKyAgVUxPTkcgIHVjUG9zdERpdjsgICAgICAgICAgLy9yZXR1cm4gcGFyYW1ldGVyOiBwb3N0IGRpdmlkZXIgd2hpY2ggaXMgdXNlZCB0byBwcm9ncmFtIHRvIHJlZ2lzdGVyIGRpcmVjdGx5CisjZW5kaWYKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjQ7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRFbmdpbmVDbG9ja1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9TRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gU0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTOwordHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX01FTU9SWV9TRVRUSU5HU19QQVJBTUVURVIKK3sKKyAgQVRPTV9DT01QVVRFX0NMT0NLX0ZSRVEgdWxDbG9jazsKKyAgVUxPTkcgdWxSZXNlcnZlZFsyXTsKK31EWU5BTUlDRV9NRU1PUllfU0VUVElOR1NfUEFSQU1FVEVSOwogCi10eXBlZGVmIHN0cnVjdCBfU0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlVTE9ORyB1bFRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfRU5HSU5FX0NMT0NLX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfRFlOQU1JQ0VfRU5HSU5FX1NFVFRJTkdTX1BBUkFNRVRFUgoreworICBBVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUSB1bENsb2NrOworICBVTE9ORyB1bE1lbW9yeUNsb2NrOworICBVTE9ORyB1bFJlc2VydmVkOworfURZTkFNSUNFX0VOR0lORV9TRVRUSU5HU19QQVJBTUVURVI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRNZW1vcnlDbG9ja1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9TRVRfTUVNT1JZX0NMT0NLX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gU0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IFNldEVuZ2luZUNsb2NrVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9TRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgdWxUYXJnZXRFbmdpbmVDbG9jazsgICAgICAgICAgLy9JbiAxMEtoeiB1bml0Cit9U0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfU0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfU0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OCit7CisgIFVMT05HIHVsVGFyZ2V0RW5naW5lQ2xvY2s7ICAgICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7Cit9U0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgQVNJQ19Jbml0LmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVNJQ19JTklUX1BBUkFNRVRFUlMgewotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gQVNJQ19JTklUX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0TWVtb3J5Q2xvY2tUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUworeworICBVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOyAgICAgICAgICAvL0luIDEwS2h6IHVuaXQKK31TRVRfTUVNT1JZX0NMT0NLX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUFNfQUxMT0NBVElPTiB7Ci0JQVNJQ19JTklUX1BBUkFNRVRFUlMgc0FTSUNJbml0Q2xvY2tzOwotCVNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qIENhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHN0cnVjdHVyZSAqLwotfSBBU0lDX0lOSVRfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9TRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04KK3sKKyAgVUxPTkcgdWxUYXJnZXRNZW1vcnlDbG9jazsgICAgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsKK31TRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGJ5IER5bmFtaWNDbG9ja0dhdGluZ1RhYmxlLmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRFlOQU1JQ19DTE9DS19HQVRJTkdfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFICovCi0JVUNIQVIgdWNQYWRkaW5nWzNdOwotfSBEWU5BTUlDX0NMT0NLX0dBVElOR19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEFTSUNfSW5pdC5jdGIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUEFSQU1FVEVSUworeworICBVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsgICAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7ICAgICAgICAgLy9JbiAxMEtoeiB1bml0Cit9QVNJQ19JTklUX1BBUkFNRVRFUlM7CisKK3R5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUFNfQUxMT0NBVElPTgoreworICBBU0lDX0lOSVRfUEFSQU1FVEVSUyBzQVNJQ0luaXRDbG9ja3M7CisgIFNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7IC8vQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgc3RydWN0dXJlCit9QVNJQ19JTklUX1BTX0FMTE9DQVRJT047CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGJ5IER5bmFtaWNDbG9ja0dhdGluZ1RhYmxlLmN0YgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BBUkFNRVRFUlMgCit7CisgIFVDSEFSIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorICBVQ0hBUiB1Y1BhZGRpbmdbM107Cit9RFlOQU1JQ19DTE9DS19HQVRJTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgIERZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BTX0FMTE9DQVRJT04gIERZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgYnkgRW5hYmxlQVNJQ19TdGF0aWNQd3JNZ3RUYWJsZS5jdGIgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjRW5hYmxlOwkJLyogIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gRU5BQkxFX0FTSUNfU1RBVElDX1BXUl9NR1RfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGJ5IEVuYWJsZUFTSUNfU3RhdGljUHdyTWd0VGFibGUuY3RiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0FTSUNfU1RBVElDX1BXUl9NR1RfUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUKKyAgVUNIQVIgdWNQYWRkaW5nWzNdOworfUVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BTX0FMTE9DQVRJT04gIEVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IERBQ19Mb2FkRGV0ZWN0aW9uVGFibGUuY3RiICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9EQUNfTE9BRF9ERVRFQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzRGV2aWNlSUQ7CS8qIHtBVE9NX0RFVklDRV9DUlR4X1NVUFBPUlQsQVRPTV9ERVZJQ0VfVFZ4X1NVUFBPUlQsQVRPTV9ERVZJQ0VfQ1Z4X1NVUFBPUlR9ICovCi0JVUNIQVIgdWNEYWNUeXBlOwkvKiB7QVRPTV9EQUNfQSxBVE9NX0RBQ19CLCBBVE9NX0VYVF9EQUN9ICovCi0JVUNIQVIgdWNNaXNjOwkJLyogVmFsaWQgb25seSB3aGVuIHRhYmxlIHJldmlzaW9uID0xLjMgYW5kIGFib3ZlICovCi19IERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IERBQ19Mb2FkRGV0ZWN0aW9uVGFibGUuY3RiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfREFDX0xPQURfREVURUNUSU9OX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzRGV2aWNlSUQ7ICAgICAgICAgICAgICAgICAgLy97QVRPTV9ERVZJQ0VfQ1JUeF9TVVBQT1JULEFUT01fREVWSUNFX1RWeF9TVVBQT1JULEFUT01fREVWSUNFX0NWeF9TVVBQT1JUfQorICBVQ0hBUiAgdWNEYWNUeXBlOyAgICAgICAgICAgICAgICAgICAvL3tBVE9NX0RBQ19BLEFUT01fREFDX0IsIEFUT01fRVhUX0RBQ30KKyAgVUNIQVIgIHVjTWlzYzsJCQkJCQkJCQkJCS8vVmFsaWQgb25seSB3aGVuIHRhYmxlIHJldmlzaW9uID0xLjMgYW5kIGFib3ZlCit9REFDX0xPQURfREVURUNUSU9OX1BBUkFNRVRFUlM7CiAKLS8qICBEQUNfTE9BRF9ERVRFQ1RJT05fUEFSQU1FVEVSUy51Y01pc2MgKi8KKy8vIERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTLnVjTWlzYwogI2RlZmluZSBEQUNfTE9BRF9NSVNDX1lQclBiCQkJCQkJMHgwMQogCi10eXBlZGVmIHN0cnVjdCBfREFDX0xPQURfREVURUNUSU9OX1BTX0FMTE9DQVRJT04gewotCURBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTIHNEYWNsb2FkOwotCVVMT05HIFJlc2VydmVkWzJdOwkvKiAgRG9uJ3Qgc2V0IHRoaXMgb25lLCBhbGxvY2F0aW9uIGZvciBFWFQgREFDICovCi19IERBQ19MT0FEX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX0RBQ19MT0FEX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OCit7CisgIERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTICAgICAgICAgICAgc0RhY2xvYWQ7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRbMl07Ly8gRG9uJ3Qgc2V0IHRoaXMgb25lLCBhbGxvY2F0aW9uIGZvciBFWFQgREFDCit9REFDX0xPQURfREVURUNUSU9OX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBEQUMxRW5jb2RlckNvbnRyb2xUYWJsZS5jdGIgYW5kIERBQzJFbmNvZGVyQ29udHJvbFRhYmxlLmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y0RhY1N0YW5kYXJkOwkvKiAgU2VlIGRlZmluaXRpb24gb2YgQVRPTV9EQUN4X3h4eCwgRm9yIERFQzMuMCwgYml0IDcgdXNlZCBhcyBpbnRlcm5hbCBmbGFnIHRvIGluZGljYXRlIERBQzIgKD09MSkgb3IgREFDMSAoPT0wKSAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogIDA6IHR1cm4gb2ZmIGVuY29kZXIgKi8KLQkvKiAgMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlciAqLwotCS8qICA3OiBBVE9NX0VOQ09ERVJfSU5JVCBJbml0aWFsaXplIERBQyAqLwotfSBEQUNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgREFDMUVuY29kZXJDb250cm9sVGFibGUuY3RiIGFuZCBEQUMyRW5jb2RlckNvbnRyb2xUYWJsZS5jdGIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9EQUNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgICAgICAgICAgIC8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgIFVDSEFSICB1Y0RhY1N0YW5kYXJkOyAgICAgICAgICAgICAgIC8vIFNlZSBkZWZpbml0aW9uIG9mIEFUT01fREFDeF94eHgsIEZvciBERUMzLjAsIGJpdCA3IHVzZWQgYXMgaW50ZXJuYWwgZmxhZyB0byBpbmRpY2F0ZSBEQUMyICg9PTEpIG9yIERBQzEgKD09MCkKKyAgVUNIQVIgIHVjQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgLy8gMDogdHVybiBvZmYgZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOiBzZXR1cCBhbmQgdHVybiBvbiBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDc6IEFUT01fRU5DT0RFUl9JTklUIEluaXRpYWxpemUgREFDCit9REFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCiAjZGVmaW5lIERBQ19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBESUcxRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBESUcyRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbEVuY29kZXJDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0RJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsJLyogIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50ICovCi0JVUNIQVIgdWNDb25maWc7Ci0JLyogIFsyXSBMaW5rIFNlbGVjdDogKi8KLQkvKiAgPTA6IFBIWSBsaW5rQSBpZiBiZkxhbmU8MyAqLwotCS8qICA9MTogUEhZIGxpbmtCIGlmIGJmTGFuZXM8MyAqLwotCS8qICA9MDogUEhZIGxpbmtBK0IgaWYgYmZMYW5lcz0zICovCi0JLyogIFszXSBUcmFuc21pdHRlciBTZWwgKi8KLQkvKiAgPTA6IFVOSVBIWSBvciBQQ0lFUEhZICovCi0JLyogID0xOiBMVlRNQSAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogID0wOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogID0xOiB0dXJuIG9uIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y0VuY29kZXJNb2RlOwotCS8qICA9MDogRFAgICBlbmNvZGVyICovCi0JLyogID0xOiBMVkRTIGVuY29kZXIgKi8KLQkvKiAgPTI6IERWSSAgZW5jb2RlciAqLwotCS8qICA9MzogSERNSSBlbmNvZGVyICovCi0JLyogID00OiBTRFZPIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y0xhbmVOdW07CS8qICBob3cgbWFueSBsYW5lcyB0byBlbmFibGUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRElHMUVuY29kZXJDb250cm9sVGFibGUKKy8vICAgICAgICAgICAgICAgICAgICBESUcyRW5jb2RlckNvbnRyb2xUYWJsZQorLy8gICAgICAgICAgICAgICAgICAgIEV4dGVybmFsRW5jb2RlckNvbnRyb2xUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0RJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUworeworICBVU0hPUlQgdXNQaXhlbENsb2NrOwkJLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgVUNIQVIgIHVjQ29uZmlnOwkJICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbMl0gTGluayBTZWxlY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IFBIWSBsaW5rQSBpZiBiZkxhbmU8MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBQSFkgbGlua0IgaWYgYmZMYW5lczwzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IFBIWSBsaW5rQStCIGlmIGJmTGFuZXM9MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFszXSBUcmFuc21pdHRlciBTZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MDogVU5JUEhZIG9yIFBDSUVQSFkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZUTUEgCQkJCQkKKyAgVUNIQVIgdWNBY3Rpb247ICAgICAgICAgICAvLyA9MDogdHVybiBvZmYgZW5jb2RlcgkJCQkJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTE6IHR1cm4gb24gZW5jb2RlcgkJCQorICBVQ0hBUiB1Y0VuY29kZXJNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0wOiBEUCAgIGVuY29kZXIgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZEUyBlbmNvZGVyICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0yOiBEVkkgIGVuY29kZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBIRE1JIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9NDogU0RWTyBlbmNvZGVyCisgIFVDSEFSIHVjTGFuZU51bTsgICAgICAgICAgLy8gaG93IG1hbnkgbGFuZXMgdG8gZW5hYmxlCisgIFVDSEFSIHVjUmVzZXJ2ZWRbMl07Cit9RElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogI2RlZmluZSBESUdfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04JCQkgIERJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBFWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSCQkJRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAKLS8qIHVjQ29uZmlnICovCisvL3VjQ29uZmlnCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV9NQVNLCQkJCTB4MDEKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzFfNjJHSFoJCTB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzJfNzBHSFoJCTB4MDEKQEAgLTUzOSw1MiArNTkzLDU3IEBACiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfTFZUTUEJCQkJCQkJCSAgMHgwOAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1RSQU5TTUlUVEVSMQkJCQkgIDB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19UUkFOU01JVFRFUjIJCQkJICAweDA4Ci0jZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfRElHQgkJCQkJCQkJICAweDgwCS8qICBWQklPUyBJbnRlcm5hbCB1c2UsIG91dHNpZGUgU1cgc2hvdWxkIHNldCB0aGlzIGJpdD0wICovCi0vKiAgdWNBY3Rpb24gKi8KLS8qICBBVE9NX0VOQUJMRTogIEVuYWJsZSBFbmNvZGVyICovCi0vKiAgQVRPTV9ESVNBQkxFOiBEaXNhYmxlIEVuY29kZXIgKi8KKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19ESUdCCQkJCQkJCQkgIDB4ODAJCQkvLyBWQklPUyBJbnRlcm5hbCB1c2UsIG91dHNpZGUgU1cgc2hvdWxkIHNldCB0aGlzIGJpdD0wCisvLyB1Y0FjdGlvbgorLy8gQVRPTV9FTkFCTEU6ICBFbmFibGUgRW5jb2RlcgorLy8gQVRPTV9ESVNBQkxFOiBEaXNhYmxlIEVuY29kZXIKIAotLyogdWNFbmNvZGVyTW9kZSAqLworLy91Y0VuY29kZXJNb2RlCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQCQkJCQkJCQkJCQkwCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0xWRFMJCQkJCQkJCQkJMQogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9EVkkJCQkJCQkJCQkJCTIKICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfSERNSQkJCQkJCQkJCQkzCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1NEVk8JCQkJCQkJCQkJNAorI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9EUF9BVURJTyAgICAgICAgICAgICAgICA1CiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWCQkJCQkJCQkJCQkxMwogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DVgkJCQkJCQkJCQkJMTQKICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1JUCQkJCQkJCQkJCQkxNQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjIgewordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRElHX0VOQ09ERVJfQ09ORklHX1YyCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVUNIQVIgdWNSZXNlcnZlZDE6MjsKLQlVQ0hBUiB1Y1RyYW5zbWl0dGVyU2VsOjI7CS8qICA9MDogVW5pcGh5QUIsID0xOiBVbmlwaHlDRCAgPTI6IFVuaXBoeUVGICovCi0JVUNIQVIgdWNMaW5rU2VsOjE7CS8qICA9MDogbGlua0EvQy9FID0xOiBsaW5rQi9EL0YgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgdWNEUExpbmtSYXRlOjE7CS8qICA9MDogMS42MkdoeiwgPTE6IDIuN0doeiAqLworICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjI7CisgICAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgLy8gPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRgorICAgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgIC8vID0wOiBsaW5rQS9DL0UgPTE6IGxpbmtCL0QvRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MTsKKyAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogI2Vsc2UKLQlVQ0hBUiB1Y0RQTGlua1JhdGU6MTsJLyogID0wOiAxLjYyR2h6LCA9MTogMi43R2h6ICovCi0JVUNIQVIgdWNSZXNlcnZlZDoxOwotCVVDSEFSIHVjTGlua1NlbDoxOwkvKiAgPTA6IGxpbmtBL0MvRSA9MTogbGlua0IvRC9GICovCi0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiAgPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRiAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQxOjI7CisgICAgVUNIQVIgdWNEUExpbmtSYXRlOjE7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHoKKyAgICBVQ0hBUiB1Y1Jlc2VydmVkOjE7CisgICAgVUNIQVIgdWNMaW5rU2VsOjE7ICAgICAgICAgICAgLy8gPTA6IGxpbmtBL0MvRSA9MTogbGlua0IvRC9GCisgICAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgLy8gPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjI7CiAjZW5kaWYKLX0gQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjI7Cit9QVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjI7CiAKLXR5cGVkZWYgc3RydWN0IF9ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudCAqLwotCUFUT01fRElHX0VOQ09ERVJfQ09ORklHX1YyIGFjQ29uZmlnOwotCVVDSEFSIHVjQWN0aW9uOwotCVVDSEFSIHVjRW5jb2Rlck1vZGU7Ci0JLyogID0wOiBEUCAgIGVuY29kZXIgKi8KLQkvKiAgPTE6IExWRFMgZW5jb2RlciAqLwotCS8qICA9MjogRFZJICBlbmNvZGVyICovCi0JLyogID0zOiBIRE1JIGVuY29kZXIgKi8KLQkvKiAgPTQ6IFNEVk8gZW5jb2RlciAqLwotCVVDSEFSIHVjTGFuZU51bTsJLyogIGhvdyBtYW55IGxhbmVzIHRvIGVuYWJsZSAqLwotCVVDSEFSIHVjUmVzZXJ2ZWRbMl07Ci19IERJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKIAotLyogdWNDb25maWcgKi8KK3R5cGVkZWYgc3RydWN0IF9ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorICBBVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMiBhY0NvbmZpZzsKKyAgVUNIQVIgdWNBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFVDSEFSIHVjRW5jb2Rlck1vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IERQICAgZW5jb2RlciAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBMVkRTIGVuY29kZXIgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTI6IERWSSAgZW5jb2RlciAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTM6IEhETUkgZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID00OiBTRFZPIGVuY29kZXIKKyAgVUNIQVIgdWNMYW5lTnVtOyAgICAgICAgICAvLyBob3cgbWFueSBsYW5lcyB0byBlbmFibGUKKyAgVUNIQVIgdWNTdGF0dXM7ICAgICAgICAgICAvLyA9IERQX0xJTktfVFJBSU5JTkdfQ09NUExFVEUgb3IgRFBfTElOS19UUkFJTklOR19JTkNPTVBMRVRFLCBvbmx5IHVzZWQgYnkgVkJJT1Mgd2l0aCBjb21tYW5kIEFUT01fRU5DT0RFUl9DTURfUVVFUllfRFBfTElOS19UUkFJTklOR19TVEFUVVMKKyAgVUNIQVIgdWNSZXNlcnZlZDsKK31ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CisKKy8vdWNDb25maWcKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WMl9EUExJTktSQVRFX01BU0sJCQkJMHgwMQogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX0RQTElOS1JBVEVfMV82MkdIWgkJICAweDAwCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjJfRFBMSU5LUkFURV8yXzcwR0haCQkgIDB4MDEKQEAgLTU5Niw1OCArNjU1LDEyMiBAQAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMgkJCQkgICAgMHgwOAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMwkJCQkgICAgMHgxMAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgVU5JUEhZVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgTFZUTUFUcmFuc21pdHRlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBEVk9PdXRwdXRDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRFBfVlNfTU9ERSB7Ci0JVUNIQVIgdWNMYW5lU2VsOwotCVVDSEFSIHVjTGFuZVNldDsKLX0gQVRPTV9EUF9WU19NT0RFOworLy8gdWNBY3Rpb246CisvLyBBVE9NX0RJU0FCTEUKKy8vIEFUT01fRU5BQkxFCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19TVEFSVCAgICAgICAweDA4CisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19QQVRURVJOMSAgICAweDA5CisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19QQVRURVJOMiAgICAweDBhCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19DT01QTEVURSAgICAweDBiCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfVklERU9fT0ZGICAgICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfVklERU9fT04gICAgICAgICAgICAgICAgICAweDBkCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfUVVFUllfRFBfTElOS19UUkFJTklOR19TVEFUVVMgICAgMHgwZQorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgMHgwZgogCi10eXBlZGVmIHN0cnVjdCBfRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JdW5pb24gewotCQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQkJVVNIT1JUIHVzSW5pdEluZm87CS8qICB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oICovCi0JCUFUT01fRFBfVlNfTU9ERSBhc01vZGU7CS8qICBEUCBWb2x0YWdlIHN3aW5nIG1vZGUgKi8KKy8vIHVjU3RhdHVzCisjZGVmaW5lIEFUT01fRU5DT0RFUl9TVEFUVVNfTElOS19UUkFJTklOR19DT01QTEVURSAgICAweDEwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9TVEFUVVNfTElOS19UUkFJTklOR19JTkNPTVBMRVRFICAweDAwCisKKy8vIEZvbGxvd2luZyBmdW5jdGlvbiBFTkFCTEUgc3ViLWZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIgd2hlbiBUTURTL0hETUkvTFZEUyBpcyB1c2VkLCBkaXNhYmxlIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMworeworI2lmIEFUT01fQklHX0VORElBTgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTA6IERJR0EvQi9DL0QvRS9GCisgICAgVUNIQVIgdWNSZXNlcnZlZDozOworICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CisjZWxzZQorICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CisgICAgVUNIQVIgdWNSZXNlcnZlZDozOworICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wOiBESUdBL0IvQy9EL0UvRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CisjZW5kaWYKK31BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMzsKKworI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVJfU0VMCQkJCQkgIDB4NzAKKworCit0eXBlZGVmIHN0cnVjdCBfRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjMgYWNDb25maWc7CisgIFVDSEFSIHVjQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBVQ0hBUiB1Y0VuY29kZXJNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0wOiBEUCAgIGVuY29kZXIgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZEUyBlbmNvZGVyICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0yOiBEVkkgIGVuY29kZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBIRE1JIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9NDogU0RWTyBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTU6IERQIGF1ZGlvCisgIFVDSEFSIHVjTGFuZU51bTsgICAgICAgICAgLy8gaG93IG1hbnkgbGFuZXMgdG8gZW5hYmxlCisgIFVDSEFSIHVjQml0UGVyQ29sb3I7ICAgICAgLy8gb25seSB2YWxpZCBmb3IgRFAgbW9kZSB3aGVuIHVjQWN0aW9uID0gQVRPTV9FTkNPREVSX0NNRF9TRVRVUAorICBVQ0hBUiB1Y1Jlc2VydmVkOworfURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMzsKKworCisvLyBkZWZpbmUgdWNCaXRQZXJDb2xvcjogCisjZGVmaW5lIFBBTkVMX0JQQ19VTkRFRklORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBBTkVMXzZCSVRfUEVSX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIAorI2RlZmluZSBQQU5FTF84QklUX1BFUl9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBQQU5FTF8xMEJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBQQU5FTF8xMkJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBQQU5FTF8xNkJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgVU5JUEhZVHJhbnNtaXR0ZXJDb250cm9sVGFibGUKKy8vICAgICAgICAgICAgICAgICAgICBMVlRNQVRyYW5zbWl0dGVyQ29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgRFZPT3V0cHV0Q29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9EUF9WU19NT0RFCit7CisgIFVDSEFSIHVjTGFuZVNlbDsKKyAgVUNIQVIgdWNMYW5lU2V0OworfUFUT01fRFBfVlNfTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QgX0RJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKwl1bmlvbgorCXsKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsJCS8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisJVVNIT1JUIHVzSW5pdEluZm87CQkJLy8gd2hlbiBpbml0IHVuaXBoeSxsb3dlciA4Yml0IGlzIHVzZWQgZm9yIGNvbm5lY3RvciB0eXBlIGRlZmluZWQgaW4gb2JqZWN0aWQuaAorICBBVE9NX0RQX1ZTX01PREUgYXNNb2RlOyAvLyBEUCBWb2x0YWdlIHN3aW5nIG1vZGUKIAl9OwotCVVDSEFSIHVjQ29uZmlnOwotCS8qICBbMF09MDogNCBsYW5lIExpbmssICovCi0JLyogICAgID0xOiA4IGxhbmUgTGluayAoIER1YWwgTGlua3MgVE1EUyApICovCi0JLyogIFsxXT0wOiBJbkNvaGVyZW50IG1vZGUgKi8KLQkvKiAgICAgPTE6IENvaGVyZW50IE1vZGUgKi8KLQkvKiAgWzJdIExpbmsgU2VsZWN0OiAqLwotCS8qICA9MDogUEhZIGxpbmtBICAgaWYgYmZMYW5lPDMgKi8KLQkvKiAgPTE6IFBIWSBsaW5rQiAgIGlmIGJmTGFuZXM8MyAqLwotCS8qICA9MDogUEhZIGxpbmtBK0IgaWYgYmZMYW5lcz0zICovCi0JLyogIFs1OjRdUENJRSBsYW5lIFNlbCAqLwotCS8qICA9MDogbGFuZSAwfjMgb3IgMH43ICovCi0JLyogID0xOiBsYW5lIDR+NyAqLwotCS8qICA9MjogbGFuZSA4fjExIG9yIDh+MTUgKi8KLQkvKiAgPTM6IGxhbmUgMTJ+MTUgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICA9MDogdHVybiBvZmYgZW5jb2RlciAqLwotCS8qICA9MTogdHVybiBvbiBlbmNvZGVyICovCi0JVUNIQVIgdWNSZXNlcnZlZFs0XTsKLX0gRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUzsKKyAgVUNIQVIgdWNDb25maWc7CisJCQkJCQkJCQkJCQkJLy8gWzBdPTA6IDQgbGFuZSBMaW5rLCAgICAgIAorCQkJCQkJCQkJCQkJCS8vICAgID0xOiA4IGxhbmUgTGluayAoIER1YWwgTGlua3MgVE1EUyApIAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbMV09MDogSW5Db2hlcmVudCBtb2RlICAgCisJCQkJCQkJCQkJCQkJLy8gICAgPTE6IENvaGVyZW50IE1vZGUJCQkJCQkJCQkJCisJCQkJCQkJCQkJCQkJLy8gWzJdIExpbmsgU2VsZWN0OgorICAJCQkJCQkJCQkJCQkvLyA9MDogUEhZIGxpbmtBICAgaWYgYmZMYW5lPDMKKwkJCQkJCQkJCQkJCQkvLyA9MTogUEhZIGxpbmtCICAgaWYgYmZMYW5lczwzCisJCSAgCQkJCQkJCQkJCS8vID0wOiBQSFkgbGlua0ErQiBpZiBiZkxhbmVzPTMJCQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbNTo0XVBDSUUgbGFuZSBTZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IGxhbmUgMH4zIG9yIDB+NworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogbGFuZSA0fjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTI6IGxhbmUgOH4xMSBvciA4fjE1CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBsYW5lIDEyfjE1IAorCVVDSEFSIHVjQWN0aW9uOwkJCQkgIC8vID0wOiB0dXJuIG9mZiBlbmNvZGVyCQkJCQkKKwkgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogdHVybiBvbiBlbmNvZGVyCQkJCisgIFVDSEFSIHVjUmVzZXJ2ZWRbNF07Cit9RElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUzsKIAotI2RlZmluZSBESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCQlESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTCisjZGVmaW5lIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04JCURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMJCQkJCQogCi0vKiB1Y0luaXRJbmZvICovCi0jZGVmaW5lIEFUT01fVFJBTUlUVEVSX0lOSVRJTkZPX0NPTk5FQ1RPUl9NQVNLCTB4MDBmZgorLy91Y0luaXRJbmZvCisjZGVmaW5lIEFUT01fVFJBTUlUVEVSX0lOSVRJTkZPX0NPTk5FQ1RPUl9NQVNLCTB4MDBmZgkJCQogCi0vKiB1Y0NvbmZpZyAqLworLy91Y0NvbmZpZyAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfOExBTkVfTElOSwkJCTB4MDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ09IRVJFTlQJCQkJMHgwMgogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LX1NFTF9NQVNLCQkweDA0CiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xJTktBCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LQgkJCQkJCTB4MDQKLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfTElOS0FfQgkJCQkJMHgwMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LQV9CCQkJCQkweDAwCQkJCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xJTktCX0EJCQkJCTB4MDQKIAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19FTkNPREVSX1NFTF9NQVNLCTB4MDgJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLwotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVIJCTB4MDAJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLwotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVIJCTB4MDgJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19FTkNPREVSX1NFTF9NQVNLCTB4MDgJCQkvLyBvbmx5IHVzZWQgd2hlbiBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMV9FTkNPREVSCQkweDAwCQkJCS8vIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVIJCTB4MDgJCQkJLy8gb25seSB1c2VkIHdoZW4gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFCiAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX01BU0sJCQkweDMwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMCQkJMHgwMApAQCAtNjYxLDcgKzc4NCw3IEBACiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xBTkVfOF8xNQkJCQkweDgwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xBTkVfMTJfMTUJCQkweGMwCiAKLS8qIHVjQWN0aW9uICovCisvL3VjQWN0aW9uCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0RJU0FCTEUJCQkJCSAgICAgICAwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRQkJCQkJICAgICAgIDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fTENEX0JMT0ZGCQkJCSAgICAgICAyCkBAIC02NzQsOTMgKzc5NywxNjggQEAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFX09VVFBVVAkJICAgICAgIDkKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAJCQkJCQkgICAgICAgMTAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVBfVlNFTVBIICAgICAgICAgICAxMQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTiAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09GRiAgICAgICAgICAgICAgMTMKIAotLyogIEZvbGxvd2luZyBhcmUgdXNlZCBmb3IgRGlnVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgdmVyMS4yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyIHsKKy8vIEZvbGxvd2luZyBhcmUgdXNlZCBmb3IgRGlnVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgdmVyMS4yCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiBiaXQ3OjY6ID0wIERpZyBUcmFuc21pdHRlciAxICggVW5pcGh5IEFCICkgKi8KLQkvKiAgICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkgKi8KLQkvKiAgICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgZkRQQ29ubmVjdG9yOjE7CS8qIGJpdDQ9MDogRFAgY29ubmVjdG9yICA9MTogTm9uZSBEUCBjb25uZWN0b3IgKi8KLQlVQ0hBUiB1Y0VuY29kZXJTZWw6MTsJLyogYml0Mz0wOiBEYXRhL0NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0EoIERJRyBpbnN0MCApLiA9MTogRGF0YS9jbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdCICggRElHIGluc3QxICkgKi8KLQlVQ0hBUiB1Y0xpbmtTZWw6MTsJLyogYml0Mj0wOiBVbmlwaHkgTElOS0Egb3IgQyBvciBFIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBBIG9yIEMgb3IgRSAqLwotCS8qICAgICA9MTogVW5pcGh5IExJTktCIG9yIEQgb3IgRiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQiBvciBEIG9yIEYgKi8KKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKKyAgVUNIQVIgdWNSZXNlcnZlZDoxOyAgICAgICAgICAgICAgIAorICBVQ0hBUiBmRFBDb25uZWN0b3I6MTsgICAgICAgICAgICAgLy9iaXQ0PTA6IERQIGNvbm5lY3RvciAgPTE6IE5vbmUgRFAgY29ubmVjdG9yCisgIFVDSEFSIHVjRW5jb2RlclNlbDoxOyAgICAgICAgICAgICAvL2JpdDM9MDogRGF0YS9DbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdBKCBESUcgaW5zdDAgKS4gPTE6IERhdGEvY2xrIHBhdGggc291cmNlIGZyb20gRElHQiAoIERJRyBpbnN0MSApCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgogCi0JVUNIQVIgZkNvaGVyZW50TW9kZToxOwkvKiBiaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApICovCi0JVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7CS8qIGJpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IgKi8KKyAgVUNIQVIgZkNvaGVyZW50TW9kZToxOyAgICAgICAgICAgIC8vYml0MT0xOiBDb2hlcmVudCBNb2RlICggZm9yIERWSS9IRE1JIG1vZGUgKQorICBVQ0hBUiBmRHVhbExpbmtDb25uZWN0b3I6MTsgICAgICAgLy9iaXQwPTE6IER1YWwgTGluayBEVkkgY29ubmVjdG9yCiAjZWxzZQotCVVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOwkvKiBiaXQwPTE6IER1YWwgTGluayBEVkkgY29ubmVjdG9yICovCi0JVUNIQVIgZkNvaGVyZW50TW9kZToxOwkvKiBiaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApICovCi0JVUNIQVIgdWNMaW5rU2VsOjE7CS8qIGJpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUgKi8KLQkvKiAgICAgPTE6IFVuaXBoeSBMSU5LQiBvciBEIG9yIEYgd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MC4gd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MSwgaXQgbWVhbnMgbWFzdGVyIGxpbmsgb2YgZHVhbCBsaW5rIGlzIEIgb3IgRCBvciBGICovCi0JVUNIQVIgdWNFbmNvZGVyU2VsOjE7CS8qIGJpdDM9MDogRGF0YS9DbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdBKCBESUcgaW5zdDAgKS4gPTE6IERhdGEvY2xrIHBhdGggc291cmNlIGZyb20gRElHQiAoIERJRyBpbnN0MSApICovCi0JVUNIQVIgZkRQQ29ubmVjdG9yOjE7CS8qIGJpdDQ9MDogRFAgY29ubmVjdG9yICA9MTogTm9uZSBEUCBjb25uZWN0b3IgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiBiaXQ3OjY6ID0wIERpZyBUcmFuc21pdHRlciAxICggVW5pcGh5IEFCICkgKi8KLQkvKiAgICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkgKi8KLQkvKiAgICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkgKi8KKyAgVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7ICAgICAgIC8vYml0MD0xOiBEdWFsIExpbmsgRFZJIGNvbm5lY3RvcgorICBVQ0hBUiBmQ29oZXJlbnRNb2RlOjE7ICAgICAgICAgICAgLy9iaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgorICBVQ0hBUiB1Y0VuY29kZXJTZWw6MTsgICAgICAgICAgICAgLy9iaXQzPTA6IERhdGEvQ2xrIHBhdGggc291cmNlIGZyb20gRElHQSggRElHIGluc3QwICkuID0xOiBEYXRhL2NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0IgKCBESUcgaW5zdDEgKQorICBVQ0hBUiBmRFBDb25uZWN0b3I6MTsgICAgICAgICAgICAgLy9iaXQ0PTA6IERQIGNvbm5lY3RvciAgPTE6IE5vbmUgRFAgY29ubmVjdG9yCisgIFVDSEFSIHVjUmVzZXJ2ZWQ6MTsgICAgICAgICAgICAgICAKKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKICNlbmRpZgotfSBBVE9NX0RJR19UUkFOU01JVFRFUl9DT05GSUdfVjI7Cit9QVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyOwogCi0vKiB1Y0NvbmZpZyAqLwotLyogQml0MCAqLworLy91Y0NvbmZpZyAKKy8vQml0MAogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9EVUFMX0xJTktfQ09OTkVDVE9SCQkJMHgwMQogCi0vKiBCaXQxICovCisvL0JpdDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfQ09IRVJFTlQJCQkJICAgICAgICAgIDB4MDIKIAotLyogQml0MiAqLworLy9CaXQyCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0xJTktfU0VMX01BU0sJCSAgICAgICAgMHgwNAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9MSU5LQQkJCSAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfTElOS0EgIAkJCSAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfTElOS0IJCQkJICAgICAgICAgICAgMHgwNAogCi0vKiAgQml0MyAqLworLy8gQml0MwogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9FTkNPREVSX1NFTF9NQVNLCSAgICAgICAgMHgwOAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9ESUcxX0VOQ09ERVIJCSAgICAgICAgICAweDAwCS8qICBvbmx5IHVzZWQgd2hlbiB1Y0FjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUgb3IgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAgKi8KLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfRElHMl9FTkNPREVSCQkgICAgICAgICAgMHgwOAkvKiAgb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQICovCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0RJRzFfRU5DT0RFUgkJICAgICAgICAgIDB4MDAJCQkJLy8gb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0RJRzJfRU5DT0RFUgkJICAgICAgICAgIDB4MDgJCQkJLy8gb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQCiAKLS8qICBCaXQ0ICovCisvLyBCaXQ0CiAjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjJfRFBfQ09OTkVDVE9SCQkJICAgICAgICAweDEwCiAKLS8qICBCaXQ3OjYgKi8KKy8vIEJpdDc6NgogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUl9TRUxfTUFTSyAgICAgMHhDMAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjEJCQkweDAwCS8qIEFCICovCi0jZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMgkJCTB4NDAJLyogQ0QgKi8KLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIzCQkJMHg4MAkvKiBFRiAqLworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjEgICAgICAgICAgIAkweDAwCS8vQUIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIyICAgICAgICAgICAJMHg0MAkvL0NECisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMyAgICAgICAgICAgCTB4ODAJLy9FRgogCi10eXBlZGVmIHN0cnVjdCBfRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WMiB7Ci0JdW5pb24gewotCQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQkJVVNIT1JUIHVzSW5pdEluZm87CS8qICB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oICovCi0JCUFUT01fRFBfVlNfTU9ERSBhc01vZGU7CS8qICBEUCBWb2x0YWdlIHN3aW5nIG1vZGUgKi8KK3R5cGVkZWYgc3RydWN0IF9ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCit7CisJdW5pb24KKwl7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7CQkvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorCVVTSE9SVCB1c0luaXRJbmZvOwkJCS8vIHdoZW4gaW5pdCB1bmlwaHksbG93ZXIgOGJpdCBpcyB1c2VkIGZvciBjb25uZWN0b3IgdHlwZSBkZWZpbmVkIGluIG9iamVjdGlkLmgKKyAgQVRPTV9EUF9WU19NT0RFIGFzTW9kZTsgLy8gRFAgVm9sdGFnZSBzd2luZyBtb2RlCiAJfTsKLQlBVE9NX0RJR19UUkFOU01JVFRFUl9DT05GSUdfVjIgYWNDb25maWc7Ci0JVUNIQVIgdWNBY3Rpb247CQkvKiAgZGVmaW5lIGFzIEFUT01fVFJBTlNNSVRFUl9BQ1RJT05fWFhYICovCi0JVUNIQVIgdWNSZXNlcnZlZFs0XTsKLX0gRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKKyAgQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyIGFjQ29uZmlnOworCVVDSEFSIHVjQWN0aW9uOwkJCQkgIC8vIGRlZmluZSBhcyBBVE9NX1RSQU5TTUlURVJfQUNUSU9OX1hYWAorICBVQ0hBUiB1Y1Jlc2VydmVkWzRdOworfURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBEQUMxT3VwdXRDb250cm9sVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgREFDMk91cHV0Q29udHJvbFRhYmxlICovCi0vKiAgICAgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbFRhYmxlICAoQmVmb3JlIERFQzMwKSAqLwotLyogICAgICAgICAgICAgICAgICAgICBUTURTQU91dHB1dENvbnRyb2xUYWJsZSAgKEJlZm9yZSBERUMzMCkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0RJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQWN0aW9uOwkJLyogIFBvc3NpYmxlIGlucHV0OkFUT01fRU5BQkxFfHxBVE9NRElTQUJMRSAqLwotCS8qICBXaGVuIHRoZSBkaXNwbGF5IGlzIExDRCwgaW4gYWRkaXRpb24gdG8gYWJvdmU6ICovCi0JLyogIEFUT01fTENEX0JMT0ZGfHwgQVRPTV9MQ0RfQkxPTiB8fEFUT01fTENEX0JMX0JSSUdIVE5FU1NfQ09OVFJPTHx8QVRPTV9MQ0RfU0VMRlRFU1RfU1RBUlR8fCAqLwotCS8qICBBVE9NX0xDRF9TRUxGVEVTVF9TVE9QICovCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YzCit7CisjaWYgQVRPTV9CSUdfRU5ESUFOCisgIFVDSEFSIHVjVHJhbnNtaXR0ZXJTZWw6MjsgICAgICAgICAvL2JpdDc6NjogPTAgRGlnIFRyYW5zbWl0dGVyIDEgKCBVbmlwaHkgQUIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICA9MiBEaWcgVHJhbnNtaXR0ZXIgMyAoIFVuaXBoeSBFRiApCisgIFVDSEFSIHVjUmVmQ2xrU291cmNlOjI7ICAgICAgICAgICAvL2JpdDU6NDogUFBMTDEgPTAsIFBQTEwyPTEsIEVYVF9DTEs9MgorICBVQ0hBUiB1Y0VuY29kZXJTZWw6MTsgICAgICAgICAgICAgLy9iaXQzPTA6IERhdGEvQ2xrIHBhdGggc291cmNlIGZyb20gRElHQS9DL0UuID0xOiBEYXRhL2NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0IvRC9GCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgorICBVQ0hBUiBmQ29oZXJlbnRNb2RlOjE7ICAgICAgICAgICAgLy9iaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApCisgIFVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOyAgICAgICAvL2JpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IKKyNlbHNlCisgIFVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOyAgICAgICAvL2JpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IKKyAgVUNIQVIgZkNvaGVyZW50TW9kZToxOyAgICAgICAgICAgIC8vYml0MT0xOiBDb2hlcmVudCBNb2RlICggZm9yIERWSS9IRE1JIG1vZGUgKQorICBVQ0hBUiB1Y0xpbmtTZWw6MTsgICAgICAgICAgICAgICAgLy9iaXQyPTA6IFVuaXBoeSBMSU5LQSBvciBDIG9yIEUgd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MC4gd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MSwgaXQgbWVhbnMgbWFzdGVyIGxpbmsgb2YgZHVhbCBsaW5rIGlzIEEgb3IgQyBvciBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICA9MTogVW5pcGh5IExJTktCIG9yIEQgb3IgRiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQiBvciBEIG9yIEYKKyAgVUNIQVIgdWNFbmNvZGVyU2VsOjE7ICAgICAgICAgICAgIC8vYml0Mz0wOiBEYXRhL0NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0EvQy9FLiA9MTogRGF0YS9jbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdCL0QvRgorICBVQ0hBUiB1Y1JlZkNsa1NvdXJjZToyOyAgICAgICAgICAgLy9iaXQ1OjQ6IFBQTEwxID0wLCBQUExMMj0xLCBFWFRfQ0xLPTIKKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKKyNlbmRpZgorfUFUT01fRElHX1RSQU5TTUlUVEVSX0NPTkZJR19WMzsKIAotCVVDSEFSIGF1Y1BhZGRpbmdbM107CS8qICBwYWRkaW5nIHRvIERXT1JEIGFsaWduZWQgKi8KLX0gRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisJdW5pb24KKwl7CisgICAgVVNIT1JUIHVzUGl4ZWxDbG9jazsJCS8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisJICBVU0hPUlQgdXNJbml0SW5mbzsJCQkvLyB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oCisgICAgQVRPTV9EUF9WU19NT0RFIGFzTW9kZTsgLy8gRFAgVm9sdGFnZSBzd2luZyBtb2RlCisJfTsKKyAgQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YzIGFjQ29uZmlnOworCVVDSEFSIHVjQWN0aW9uOwkJCQkgICAgLy8gZGVmaW5lIGFzIEFUT01fVFJBTlNNSVRFUl9BQ1RJT05fWFhYCisgIFVDSEFSIHVjTGFuZU51bTsKKyAgVUNIQVIgdWNSZXNlcnZlZFszXTsKK31ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzOworCisvL3VjQ29uZmlnIAorLy9CaXQwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0RVQUxfTElOS19DT05ORUNUT1IJCQkweDAxCisKKy8vQml0MQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19DT0hFUkVOVAkJCQkgICAgICAgICAgMHgwMgorCisvL0JpdDIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjNfTElOS19TRUxfTUFTSwkJICAgICAgICAweDA0CisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0xJTktBICAJCQkgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0xJTktCCQkJCSAgICAgICAgICAgIDB4MDQKKworLy8gQml0MworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19FTkNPREVSX1NFTF9NQVNLCSAgICAgICAgMHgwOAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19ESUcxX0VOQ09ERVIJCSAgICAgICAgICAweDAwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0RJRzJfRU5DT0RFUgkJICAgICAgICAgIDB4MDgKKworLy8gQml0NTo0CisjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjNfUkVGQ0xLX1NFTF9NQVNLIAkgICAgICAgIDB4MzAKKyNkZWZpbmUgQVRPTV9UUkFTTUlUVEVSX0NPTkZJR19WM19QMVBMTCAgICAgICAgICAJCSAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX1RSQVNNSVRURVJfQ09ORklHX1YzX1AyUExMCQkgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjNfUkVGQ0xLX1NSQ19FWFQgICAgICAgICAgICAweDIwCisKKy8vIEJpdDc6NgorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19UUkFOU01JVFRFUl9TRUxfTUFTSyAgICAgMHhDMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19UUkFOU01JVFRFUjEgICAgICAgICAgIAkweDAwCS8vQUIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjNfVFJBTlNNSVRURVIyICAgICAgICAgICAJMHg0MAkvL0NECisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX1RSQU5TTUlUVEVSMyAgICAgICAgICAgCTB4ODAJLy9FRgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgREFDMU91cHV0Q29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgREFDMk91cHV0Q29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgTFZUTUFPdXRwdXRDb250cm9sVGFibGUgIChCZWZvcmUgREVDMzApCisvLyAgICAgICAgICAgICAgICAgICAgVE1EU0FPdXRwdXRDb250cm9sVGFibGUgIChCZWZvcmUgREVDMzApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUworeworICBVQ0hBUiAgdWNBY3Rpb247ICAgICAgICAgICAgICAgICAgICAvLyBQb3NzaWJsZSBpbnB1dDpBVE9NX0VOQUJMRXx8QVRPTURJU0FCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGlzcGxheSBpcyBMQ0QsIGluIGFkZGl0aW9uIHRvIGFib3ZlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0xDRF9CTE9GRnx8IEFUT01fTENEX0JMT04gfHxBVE9NX0xDRF9CTF9CUklHSFRORVNTX0NPTlRST0x8fEFUT01fTENEX1NFTEZURVNUX1NUQVJUfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9MQ0RfU0VMRlRFU1RfU1RPUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVUNIQVIgIGF1Y1BhZGRpbmdbM107ICAgICAgICAgICAgICAgLy8gcGFkZGluZyB0byBEV09SRCBhbGlnbmVkCit9RElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUzsKIAogI2RlZmluZSBESVNQTEFZX0RFVklDRV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKIAotI2RlZmluZSBDUlQxX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKKworI2RlZmluZSBDUlQxX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgCiAjZGVmaW5lIENSVDFfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCi0jZGVmaW5lIENSVDJfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUyAgICAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUworI2RlZmluZSBDUlQyX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgCiAjZGVmaW5lIENSVDJfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCiAjZGVmaW5lIENWMV9PVVRQVVRfQ09OVFJPTF9QQVJBTUVURVJTICAgICAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUwpAQCAtNzgyLDM5NyArOTgwLDU1MCBAQAogI2RlZmluZSBEVk9fT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KICNkZWZpbmUgRFZPX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlNfVjMJIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IEJsYW5rQ1JUQ1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9CTEFOS19DUlRDX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0JsYW5raW5nOwkvKiAgQVRPTV9CTEFOS0lORyBvciBBVE9NX0JMQU5LSU5HT0ZGICovCi0JVVNIT1JUIHVzQmxhY2tDb2xvclJDcjsKLQlVU0hPUlQgdXNCbGFja0NvbG9yR1k7Ci0JVVNIT1JUIHVzQmxhY2tDb2xvckJDYjsKLX0gQkxBTktfQ1JUQ19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEJsYW5rQ1JUQ1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQkxBTktfQ1JUQ19QQVJBTUVURVJTCit7CisgIFVDSEFSICB1Y0NSVEM7ICAgICAgICAgICAgICAgICAgICAJLy8gQVRPTV9DUlRDMSBvciBBVE9NX0NSVEMyCisgIFVDSEFSICB1Y0JsYW5raW5nOyAgICAgICAgICAgICAgICAgIC8vIEFUT01fQkxBTktJTkcgb3IgQVRPTV9CTEFOS0lOR09GRgorICBVU0hPUlQgdXNCbGFja0NvbG9yUkNyOworICBVU0hPUlQgdXNCbGFja0NvbG9yR1k7CisgIFVTSE9SVCB1c0JsYWNrQ29sb3JCQ2I7Cit9QkxBTktfQ1JUQ19QQVJBTUVURVJTOwogI2RlZmluZSBCTEFOS19DUlRDX1BTX0FMTE9DQVRJT04gICAgQkxBTktfQ1JUQ19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBFbmFibGVDUlRDVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgRW5hYmxlQ1JUQ01lbVJlcVRhYmxlICovCi0vKiAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZUNSVENfRG91YmxlQnVmZmVyUmVnaXN0ZXJzVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9DUlRDX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbMl07Ci19IEVOQUJMRV9DUlRDX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlQ1JUQ1RhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgRW5hYmxlQ1JUQ01lbVJlcVRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnNUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9DUlRDX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgCSAgLy8gQVRPTV9DUlRDMSBvciBBVE9NX0NSVEMyCisgIFVDSEFSIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAKKyAgVUNIQVIgdWNQYWRkaW5nWzJdOworfUVOQUJMRV9DUlRDX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9DUlRDX1BTX0FMTE9DQVRJT04gICBFTkFCTEVfQ1JUQ19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX092ZXJTY2FuVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX09WRVJTQ0FOX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c092ZXJzY2FuUmlnaHQ7CS8qICByaWdodCAqLwotCVVTSE9SVCB1c092ZXJzY2FuTGVmdDsJLyogIGxlZnQgKi8KLQlVU0hPUlQgdXNPdmVyc2NhbkJvdHRvbTsJLyogIGJvdHRvbSAqLwotCVVTSE9SVCB1c092ZXJzY2FuVG9wOwkvKiAgdG9wICovCi0JVUNIQVIgdWNDUlRDOwkJLyogIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMiAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gU0VUX0NSVENfT1ZFUlNDQU5fUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX092ZXJTY2FuVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9TRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTCit7CisgIFVTSE9SVCB1c092ZXJzY2FuUmlnaHQ7ICAgICAgICAgICAgIC8vIHJpZ2h0CisgIFVTSE9SVCB1c092ZXJzY2FuTGVmdDsgICAgICAgICAgICAgIC8vIGxlZnQKKyAgVVNIT1JUIHVzT3ZlcnNjYW5Cb3R0b207ICAgICAgICAgICAgLy8gYm90dG9tCisgIFVTSE9SVCB1c092ZXJzY2FuVG9wOyAgICAgICAgICAgICAgIC8vIHRvcAorICBVQ0hBUiAgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIKKyAgVUNIQVIgIHVjUGFkZGluZ1szXTsKK31TRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTOwogI2RlZmluZSBTRVRfQ1JUQ19PVkVSU0NBTl9QU19BTExPQ0FUSU9OICBTRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX1JlcGxpY2F0aW9uVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1JFUExJQ0FUSU9OX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjSF9SZXBsaWNhdGlvbjsJLyogIGhvcml6b250YWwgcmVwbGljYXRpb24gKi8KLQlVQ0hBUiB1Y1ZfUmVwbGljYXRpb247CS8qICB2ZXJ0aWNhbCByZXBsaWNhdGlvbiAqLwotCVVDSEFSIHVzQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFNFVF9DUlRDX1JFUExJQ0FUSU9OX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0Q1JUQ19SZXBsaWNhdGlvblRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y0hfUmVwbGljYXRpb247ICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHJlcGxpY2F0aW9uCisgIFVDSEFSIHVjVl9SZXBsaWNhdGlvbjsgICAgICAgICAgICAgIC8vIHZlcnRpY2FsIHJlcGxpY2F0aW9uCisgIFVDSEFSIHVzQ1JUQzsgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y1BhZGRpbmc7Cit9U0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUzsKICNkZWZpbmUgU0VUX0NSVENfUkVQTElDQVRJT05fUFNfQUxMT0NBVElPTiAgU0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2VsZWN0Q1JUQ19Tb3VyY2VUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0RldmljZTsJCS8qICBBVE9NX0RFVklDRV9DUlQxfEFUT01fREVWSUNFX0NSVDJ8Li4uLiAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2VsZWN0Q1JUQ19Tb3VyY2VUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTCit7CisgIFVDSEFSIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgIAkgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y0RldmljZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0RFVklDRV9DUlQxfEFUT01fREVWSUNFX0NSVDJ8Li4uLgorICBVQ0hBUiB1Y1BhZGRpbmdbMl07Cit9U0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlM7CiAjZGVmaW5lIFNFTEVDVF9DUlRDX1NPVVJDRV9QU19BTExPQ0FUSU9OICBTRUxFQ1RfQ1JUQ19TT1VSQ0VfUEFSQU1FVEVSUwogCi10eXBlZGVmIHN0cnVjdCBfU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlNfVjIgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0VuY29kZXJJRDsJLyogIERBQzEvREFDMi9UVk9VVC9ESUcxL0RJRzIvRFZPICovCi0JVUNIQVIgdWNFbmNvZGVNb2RlOwkvKiAgRW5jb2RpbmcgbW9kZSwgb25seSB2YWxpZCB3aGVuIHVzaW5nIERJRzEvRElHMi9EVk8gKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFNFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyOwordHlwZWRlZiBzdHJ1Y3QgX1NFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyCit7CisgIFVDSEFSIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgIAkgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y0VuY29kZXJJRDsgICAgICAgICAgICAgICAgICAvLyBEQUMxL0RBQzIvVFZPVVQvRElHMS9ESUcyL0RWTworICBVQ0hBUiB1Y0VuY29kZU1vZGU7CQkJCQkJCQkJLy8gRW5jb2RpbmcgbW9kZSwgb25seSB2YWxpZCB3aGVuIHVzaW5nIERJRzEvRElHMi9EVk8KKyAgVUNIQVIgdWNQYWRkaW5nOworfVNFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyOwogCi0vKiB1Y0VuY29kZXJJRCAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9EQUMxX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgKi8KLS8qICNkZWZpbmUgQVNJQ19JTlRfREFDMl9FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ICovCi0vKiAjZGVmaW5lIEFTSUNfRVhUX1RWX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2ICovCi0vKiAjZGVmaW5lIEFTSUNfSU5UX0RWT19FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ICovCi0vKiAjZGVmaW5lIEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSAqLwotLyogI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSAqLworLy91Y0VuY29kZXJJRAorLy8jZGVmaW5lIEFTSUNfSU5UX0RBQzFfRU5DT0RFUl9JRCAgICAJCQkJCQkweDAwIAorLy8jZGVmaW5lIEFTSUNfSU5UX1RWX0VOQ09ERVJfSUQJCQkJCQkJCQkweDAyCisvLyNkZWZpbmUgQVNJQ19JTlRfRElHMV9FTkNPREVSX0lECQkJCQkJCQkweDAzCisvLyNkZWZpbmUgQVNJQ19JTlRfREFDMl9FTkNPREVSX0lECQkJCQkJCQkweDA0CisvLyNkZWZpbmUgQVNJQ19FWFRfVFZfRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDYKKy8vI2RlZmluZSBBU0lDX0lOVF9EVk9fRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDcKKy8vI2RlZmluZSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCTB4MDkKKy8vI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDUKIAotLyogdWNFbmNvZGVNb2RlICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0xWRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RWSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0hETUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1NEVk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyAqLwotLyogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQgKi8KLS8qICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICovCisvL3VjRW5jb2RlTW9kZQorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQCQkJCQkJCQkJCTAKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTCQkJCQkJCQkJMQorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RWSQkJCQkJCQkJCQkyCisvLyNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfSERNSQkJCQkJCQkJCTMKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9TRFZPCQkJCQkJCQkJNAorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWCQkJCQkJCQkJCTEzCisvLyNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1YJCQkJCQkJCQkJMTQKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DUlQJCQkJCQkJCQkJMTUKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IFNldFBpeGVsQ2xvY2tUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBHZXRQaXhlbENsb2NrVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWFqb3IgcmV2aXNpb249MS4sIE1pbm9yIHJldmlzaW9uPTEgKi8KLXR5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBrSHogdW5pdDsgZm9yIGJpb3MgY29udmVuaWVudCA9IChSZWZDbGsqRkJfRGl2KS8oUmVmX0RpdipQb3N0X0RpdikgKi8KLQkvKiAgMCBtZWFucyBkaXNhYmxlIFBQTEwgKi8KLQlVU0hPUlQgdXNSZWZEaXY7CS8qICBSZWZlcmVuY2UgZGl2aWRlciAqLwotCVVTSE9SVCB1c0ZiRGl2OwkJLyogIGZlZWRiYWNrIGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qICBwb3N0IGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y0ZyYWNGYkRpdjsJLyogIGZyYWN0aW9uYWwgZmVlZGJhY2sgZGl2aWRlciAqLwotCVVDSEFSIHVjUHBsbDsJCS8qICBBVE9NX1BQTEwxIG9yIEFUT01fUFBMMiAqLwotCVVDSEFSIHVjUmVmRGl2U3JjOwkvKiAgQVRPTV9QSklUVEVSIG9yIEFUT19OT05QSklUVEVSICovCi0JVUNIQVIgdWNDUlRDOwkJLyogIFdoaWNoIENSVEMgdXNlcyB0aGlzIFBwbGwgKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0UGl4ZWxDbG9ja1RhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgR2V0UGl4ZWxDbG9ja1RhYmxlIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy9NYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgX1BJWEVMX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgLy8gaW4gMTBrSHogdW5pdDsgZm9yIGJpb3MgY29udmVuaWVudCA9IChSZWZDbGsqRkJfRGl2KS8oUmVmX0RpdipQb3N0X0RpdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCBtZWFucyBkaXNhYmxlIFBQTEwKKyAgVVNIT1JUIHVzUmVmRGl2OyAgICAgICAgICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGRpdmlkZXIKKyAgVVNIT1JUIHVzRmJEaXY7ICAgICAgICAgICAgICAgICAgICAgLy8gZmVlZGJhY2sgZGl2aWRlcgorICBVQ0hBUiAgdWNQb3N0RGl2OyAgICAgICAgICAgICAgICAgICAvLyBwb3N0IGRpdmlkZXIJCisgIFVDSEFSICB1Y0ZyYWNGYkRpdjsgICAgICAgICAgICAgICAgIC8vIGZyYWN0aW9uYWwgZmVlZGJhY2sgZGl2aWRlcgorICBVQ0hBUiAgdWNQcGxsOyAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX1BQTEwxIG9yIEFUT01fUFBMMgorICBVQ0hBUiAgdWNSZWZEaXZTcmM7ICAgICAgICAgICAgICAgICAvLyBBVE9NX1BKSVRURVIgb3IgQVRPX05PTlBKSVRURVIKKyAgVUNIQVIgIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgICAgLy8gV2hpY2ggQ1JUQyB1c2VzIHRoaXMgUHBsbAorICBVQ0hBUiAgdWNQYWRkaW5nOworfVBJWEVMX0NMT0NLX1BBUkFNRVRFUlM7CiAKLS8qIE1ham9yIHJldmlzaW9uPTEuLCBNaW5vciByZXZpc2lvbj0yLCBhZGQgdWNNaXNjSWZubyAqLwotLyogdWNNaXNjSW5mbzogKi8KKy8vTWFqb3IgcmV2aXNpb249MS4sIE1pbm9yIHJldmlzaW9uPTIsIGFkZCB1Y01pc2NJZm5vCisvL3VjTWlzY0luZm86CiAjZGVmaW5lIE1JU0NfRk9SQ0VfUkVQUk9HX1BJWEVMX0NMT0NLIDB4MQogI2RlZmluZSBNSVNDX0RFVklDRV9JTkRFWF9NQVNLICAgICAgICAweEYwCiAjZGVmaW5lIE1JU0NfREVWSUNFX0lOREVYX1NISUZUICAgICAgIDQKIAotdHlwZWRlZiBzdHJ1Y3QgX1BJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMGtIeiB1bml0OyBmb3IgYmlvcyBjb252ZW5pZW50ID0gKFJlZkNsaypGQl9EaXYpLyhSZWZfRGl2KlBvc3RfRGl2KSAqLwotCS8qICAwIG1lYW5zIGRpc2FibGUgUFBMTCAqLwotCVVTSE9SVCB1c1JlZkRpdjsJLyogIFJlZmVyZW5jZSBkaXZpZGVyICovCi0JVVNIT1JUIHVzRmJEaXY7CQkvKiAgZmVlZGJhY2sgZGl2aWRlciAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogIHBvc3QgZGl2aWRlciAqLwotCVVDSEFSIHVjRnJhY0ZiRGl2OwkvKiAgZnJhY3Rpb25hbCBmZWVkYmFjayBkaXZpZGVyICovCi0JVUNIQVIgdWNQcGxsOwkJLyogIEFUT01fUFBMTDEgb3IgQVRPTV9QUEwyICovCi0JVUNIQVIgdWNSZWZEaXZTcmM7CS8qICBBVE9NX1BKSVRURVIgb3IgQVRPX05PTlBKSVRURVIgKi8KLQlVQ0hBUiB1Y0NSVEM7CQkvKiAgV2hpY2ggQ1JUQyB1c2VzIHRoaXMgUHBsbCAqLwotCVVDSEFSIHVjTWlzY0luZm87CS8qICBEaWZmZXJlbnQgYml0cyBmb3IgZGlmZmVyZW50IHB1cnBvc2UsIGJpdCBbNzo0XSBhcyBkZXZpY2UgaW5kZXgsIGJpdFswXT1Gb3JjZSBwcm9nICovCi19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjI7Cit0eXBlZGVmIHN0cnVjdCBfUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMgoreworICBVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAvLyBpbiAxMGtIeiB1bml0OyBmb3IgYmlvcyBjb252ZW5pZW50ID0gKFJlZkNsaypGQl9EaXYpLyhSZWZfRGl2KlBvc3RfRGl2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIG1lYW5zIGRpc2FibGUgUFBMTAorICBVU0hPUlQgdXNSZWZEaXY7ICAgICAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2UgZGl2aWRlcgorICBVU0hPUlQgdXNGYkRpdjsgICAgICAgICAgICAgICAgICAgICAvLyBmZWVkYmFjayBkaXZpZGVyCisgIFVDSEFSICB1Y1Bvc3REaXY7ICAgICAgICAgICAgICAgICAgIC8vIHBvc3QgZGl2aWRlcgkKKyAgVUNIQVIgIHVjRnJhY0ZiRGl2OyAgICAgICAgICAgICAgICAgLy8gZnJhY3Rpb25hbCBmZWVkYmFjayBkaXZpZGVyCisgIFVDSEFSICB1Y1BwbGw7ICAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fUFBMTDEgb3IgQVRPTV9QUEwyCisgIFVDSEFSICB1Y1JlZkRpdlNyYzsgICAgICAgICAgICAgICAgIC8vIEFUT01fUEpJVFRFUiBvciBBVE9fTk9OUEpJVFRFUgorICBVQ0hBUiAgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAvLyBXaGljaCBDUlRDIHVzZXMgdGhpcyBQcGxsCisgIFVDSEFSICB1Y01pc2NJbmZvOyAgICAgICAgICAgICAgICAgIC8vIERpZmZlcmVudCBiaXRzIGZvciBkaWZmZXJlbnQgcHVycG9zZSwgYml0IFs3OjRdIGFzIGRldmljZSBpbmRleCwgYml0WzBdPUZvcmNlIHByb2cKK31QSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyOwogCi0vKiBNYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249Mywgc3RydWN0dXJlL2RlZmluaXRpb24gY2hhbmdlICovCi0vKiB1Y0VuY29kZXJNb2RlOiAqLwotLyogQVRPTV9FTkNPREVSX01PREVfRFAgKi8KLS8qIEFUT01fRU5PQ0RFUl9NT0RFX0xWRFMgKi8KLS8qIEFUT01fRU5PQ0RFUl9NT0RFX0RWSSAqLwotLyogQVRPTV9FTk9DREVSX01PREVfSERNSSAqLwotLyogQVRPTV9FTk9DREVSX01PREVfU0RWTyAqLwotLyogQVRPTV9FTkNPREVSX01PREVfVFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICovCi0vKiBBVE9NX0VOQ09ERVJfTU9ERV9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQgKi8KLS8qIEFUT01fRU5DT0RFUl9NT0RFX0NSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSAqLworLy9NYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249Mywgc3RydWN0dXJlL2RlZmluaXRpb24gY2hhbmdlCisvL3VjRW5jb2Rlck1vZGU6CisvL0FUT01fRU5DT0RFUl9NT0RFX0RQCisvL0FUT01fRU5PQ0RFUl9NT0RFX0xWRFMKKy8vQVRPTV9FTk9DREVSX01PREVfRFZJCisvL0FUT01fRU5PQ0RFUl9NT0RFX0hETUkKKy8vQVRPTV9FTk9DREVSX01PREVfU0RWTworLy9BVE9NX0VOQ09ERVJfTU9ERV9UVgkJCQkJCQkJCQkxMworLy9BVE9NX0VOQ09ERVJfTU9ERV9DVgkJCQkJCQkJCQkxNAorLy9BVE9NX0VOQ09ERVJfTU9ERV9DUlQJCQkJCQkJCQkJMTUKIAotLyogdWNEVk9Db25maWcgKi8KLS8qICNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX1JBVEVfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfRERSX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfU0RSX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfT1VUUFVUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYyAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfTE9XMTJCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwICovCi0vKiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19VUFBFUjEyQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ICovCi0vKiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR18yNEJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCAqLworLy91Y0RWT0NvbmZpZworLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19SQVRFX1NFTAkJCQkJCQkweDAxCisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX0REUl9TUEVFRAkJCQkJCTB4MDAKKy8vI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfU0RSX1NQRUVECQkJCQkJMHgwMQorLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19PVVRQVVRfU0VMCQkJCQkJMHgwYworLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19MT1cxMkJJVAkJCQkJCQkweDAwCisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX1VQUEVSMTJCSVQJCQkJCQkweDA0CisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHXzI0QklUCQkJCQkJCQkweDA4CiAKLS8qIHVjTWlzY0luZm86IGFsc28gY2hhbmdlZCwgc2VlIGJlbG93ICovCisvL3VjTWlzY0luZm86IGFsc28gY2hhbmdlZCwgc2VlIGJlbG93CiAjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfRk9SQ0VfUFJPR19QUExMCQkJCQkJMHgwMQogI2RlZmluZSBQSVhFTF9DTE9DS19NSVNDX1ZHQV9NT0RFCQkJCQkJCQkJCTB4MDIKICNkZWZpbmUgUElYRUxfQ0xPQ0tfTUlTQ19DUlRDX1NFTF9NQVNLCQkJCQkJCTB4MDQKICNkZWZpbmUgUElYRUxfQ0xPQ0tfTUlTQ19DUlRDX1NFTF9DUlRDMQkJCQkJCQkweDAwCiAjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfQ1JUQ19TRUxfQ1JUQzIJCQkJCQkJMHgwNAogI2RlZmluZSBQSVhFTF9DTE9DS19NSVNDX1VTRV9FTkdJTkVfRk9SX0RJU1BDTEsJCQkweDA4CisjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfUkVGX0RJVl9TUkMgICAgICAgICAgICAgICAgICAgIDB4MTAKKy8vIFYxLjQgZm9yIFJvYWRSdW5uZXIKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjRfTUlTQ19TU19FTkFCTEUgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y0X01JU0NfQ09IRVJFTlRfTU9ERSAgICAgICAgICAgMHgyMAogCi10eXBlZGVmIHN0cnVjdCBfUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsJLyogIGluIDEwa0h6IHVuaXQ7IGZvciBiaW9zIGNvbnZlbmllbnQgPSAoUmVmQ2xrKkZCX0RpdikvKFJlZl9EaXYqUG9zdF9EaXYpICovCi0JLyogIDAgbWVhbnMgZGlzYWJsZSBQUExMLiBGb3IgVkdBIFBQTEwsbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgbm90IDAuICovCi0JVVNIT1JUIHVzUmVmRGl2OwkvKiAgUmVmZXJlbmNlIGRpdmlkZXIgKi8KLQlVU0hPUlQgdXNGYkRpdjsJCS8qICBmZWVkYmFjayBkaXZpZGVyICovCi0JVUNIQVIgdWNQb3N0RGl2OwkvKiAgcG9zdCBkaXZpZGVyICovCi0JVUNIQVIgdWNGcmFjRmJEaXY7CS8qICBmcmFjdGlvbmFsIGZlZWRiYWNrIGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y1BwbGw7CQkvKiAgQVRPTV9QUExMMSBvciBBVE9NX1BQTDIgKi8KLQlVQ0hBUiB1Y1RyYW5zbWl0dGVySWQ7CS8qICBncmFwaGljIGVuY29kZXIgaWQgZGVmaW5lZCBpbiBvYmplY3RJZC5oICovCi0JdW5pb24gewotCQlVQ0hBUiB1Y0VuY29kZXJNb2RlOwkvKiAgZW5jb2RlciB0eXBlIGRlZmluZWQgYXMgQVRPTV9FTkNPREVSX01PREVfRFAvRFZJL0hETUkvICovCi0JCVVDSEFSIHVjRFZPQ29uZmlnOwkvKiAgd2hlbiB1c2UgRFZPLCBuZWVkIHRvIGtub3cgU0RSL0REUiwgMTJiaXQgb3IgMjRiaXQgKi8KK3R5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgICAgICAgICAgIC8vIGluIDEwa0h6IHVuaXQ7IGZvciBiaW9zIGNvbnZlbmllbnQgPSAoUmVmQ2xrKkZCX0RpdikvKFJlZl9EaXYqUG9zdF9EaXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgbWVhbnMgZGlzYWJsZSBQUExMLiBGb3IgVkdBIFBQTEwsbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgbm90IDAuCisgIFVTSE9SVCB1c1JlZkRpdjsgICAgICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBkaXZpZGVyCisgIFVTSE9SVCB1c0ZiRGl2OyAgICAgICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrIGRpdmlkZXIKKyAgVUNIQVIgIHVjUG9zdERpdjsgICAgICAgICAgICAgICAgICAgLy8gcG9zdCBkaXZpZGVyCQorICBVQ0hBUiAgdWNGcmFjRmJEaXY7ICAgICAgICAgICAgICAgICAvLyBmcmFjdGlvbmFsIGZlZWRiYWNrIGRpdmlkZXIKKyAgVUNIQVIgIHVjUHBsbDsgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9QUExMMSBvciBBVE9NX1BQTDIKKyAgVUNIQVIgIHVjVHJhbnNtaXR0ZXJJZDsgICAgICAgICAgICAgLy8gZ3JhcGhpYyBlbmNvZGVyIGlkIGRlZmluZWQgaW4gb2JqZWN0SWQuaAorCXVuaW9uCisJeworICBVQ0hBUiAgdWNFbmNvZGVyTW9kZTsgICAgICAgICAgICAgICAvLyBlbmNvZGVyIHR5cGUgZGVmaW5lZCBhcyBBVE9NX0VOQ09ERVJfTU9ERV9EUC9EVkkvSERNSS8KKwlVQ0hBUiAgdWNEVk9Db25maWc7CQkJCQkJCQkJLy8gd2hlbiB1c2UgRFZPLCBuZWVkIHRvIGtub3cgU0RSL0REUiwgMTJiaXQgb3IgMjRiaXQKIAl9OwotCVVDSEFSIHVjTWlzY0luZm87CS8qICBiaXRbMF09Rm9yY2UgcHJvZ3JhbSwgYml0WzFdPSBzZXQgcGNsayBmb3IgVkdBLCBiWzJdPSBDUlRDIHNlbCAqLwotCS8qICBiaXRbM109MDp1c2UgUFBMTCBmb3IgZGlzcGNsayBzb3VyY2UsID0xOiB1c2UgZW5naW5lIGNsb2NrIGZvciBkaXNwY2xvY2sgc291cmNlICovCi19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjM7CisgIFVDSEFSICB1Y01pc2NJbmZvOyAgICAgICAgICAgICAgICAgIC8vIGJpdFswXT1Gb3JjZSBwcm9ncmFtLCBiaXRbMV09IHNldCBwY2xrIGZvciBWR0EsIGJbMl09IENSVEMgc2VsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFszXT0wOnVzZSBQUExMIGZvciBkaXNwY2xrIHNvdXJjZSwgPTE6IHVzZSBlbmdpbmUgY2xvY2sgZm9yIGRpc3BjbG9jayBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0WzRdPTA6dXNlIFhUQUxJTiBhcyB0aGUgc291cmNlIG9mIHJlZmVyZW5jZSBkaXZpZGVyLD0xIHVzZSB0aGUgcHJlLWRlZmluZWQgY2xvY2sgYXMgdGhlIHNvdXJjZSBvZiByZWZlcmVuY2UgZGl2aWRlcgorfVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjM7CiAKICNkZWZpbmUgUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19MQVNUCQkJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMgogI2RlZmluZSBHRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgkJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19MQVNUCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBBZGp1c3REaXNwbGF5UGxsVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FESlVTVF9ESVNQTEFZX1BMTF9QQVJBTUVURVJTIHsKK3R5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y1Cit7CisgIFVDSEFSICB1Y0NSVEM7ICAgICAgICAgICAgIC8vIEFUT01fQ1JUQzF+NiwgaW5kaWNhdGUgdGhlIENSVEMgY29udHJvbGxlciB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJpdmUgdGhlIHBpeGVsIGNsb2NrLiBub3QgdXNlZCBmb3IgRENQTEwgY2FzZS4KKyAgdW5pb257CisgIFVDSEFSICB1Y1Jlc2VydmVkOworICBVQ0hBUiAgdWNGcmFjRmJEaXY7ICAgICAgICAvLyBbZ3BoYW5dIHRlbXBvcmFyeSB0byBwcmV2ZW50IGJ1aWxkIHByb2JsZW0uICByZW1vdmUgaXQgYWZ0ZXIgZHJpdmVyIGNvZGUgaXMgY2hhbmdlZC4KKyAgfTsKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgLy8gdGFyZ2V0IHRoZSBwaXhlbCBjbG9jayB0byBkcml2ZSB0aGUgQ1JUQyB0aW1pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCBtZWFucyBkaXNhYmxlIFBQTEwvRENQTEwuIAorICBVU0hPUlQgdXNGYkRpdjsgICAgICAgICAgICAvLyBmZWVkYmFjayBkaXZpZGVyIGludGVnZXIgcGFydC4gCisgIFVDSEFSICB1Y1Bvc3REaXY7ICAgICAgICAgIC8vIHBvc3QgZGl2aWRlci4gCisgIFVDSEFSICB1Y1JlZkRpdjsgICAgICAgICAgIC8vIFJlZmVyZW5jZSBkaXZpZGVyCisgIFVDSEFSICB1Y1BwbGw7ICAgICAgICAgICAgIC8vIEFUT01fUFBMTDEvQVRPTV9QUExMMi9BVE9NX0RDUExMCisgIFVDSEFSICB1Y1RyYW5zbWl0dGVySUQ7ICAgIC8vIEFTSUMgZW5jb2RlciBpZCBkZWZpbmVkIGluIG9iamVjdElkLmgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB3aGljaCBncmFwaGljIGVuY29kZXIgd2lsbCBiZSB1c2VkLiAKKyAgVUNIQVIgIHVjRW5jb2Rlck1vZGU7ICAgICAgLy8gRW5jb2RlciBtb2RlOiAKKyAgVUNIQVIgIHVjTWlzY0luZm87ICAgICAgICAgLy8gYml0WzBdPSBGb3JjZSBwcm9ncmFtIFBQTEwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFsxXT0gd2hlbiBWR0EgdGltaW5nIGlzIHVzZWQuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbMzoyXT0gSERNSSBwYW5lbCBiaXQgZGVwdGg6ID0wOiAyNGJwcCA9MTozMGJwcCwgPTI6MzJicHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0WzRdPSBSZWZDbG9jayBzb3VyY2UgZm9yIFBQTEwuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MDogWFRMQUlOKCBkZWZhdWx0IG1vZGUgKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBvdGhlciBleHRlcm5hbCBjbG9jayBzb3VyY2UsIHdoaWNoIGlzIHByZS1kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBieSBWQklPUyBkZXBlbmQgb24gdGhlIGZlYXR1cmUgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFs3OjVdOiByZXNlcnZlZC4KKyAgVUxPTkcgIHVsRmJEaXZEZWNGcmFjOyAgICAgLy8gMjAgYml0IGZlZWRiYWNrIGRpdmlkZXIgZGVjaW1hbCBmcmFjdGlvbiBwYXJ0LCByYW5nZSBmcm9tIDF+OTk5OTk5ICggMC4wMDAwMDEgdG8gMC45OTk5OTkgKQorCit9UElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WNTsKKworI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX0ZPUkNFX1BST0dfUFBMTAkJCQkJMHgwMQorI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX1ZHQV9NT0RFCQkJCQkJCQkweDAyCisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y1X01JU0NfSERNSV9CUFBfTUFTSyAgICAgICAgICAgMHgwYworI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX0hETUlfMjRCUFAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjVfTUlTQ19IRE1JXzMwQlBQICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y1X01JU0NfSERNSV8zMkJQUCAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX1JFRl9ESVZfU1JDICAgICAgICAgICAgIDB4MTAKKwordHlwZWRlZiBzdHJ1Y3QgX0dFVF9ESVNQX1BMTF9TVEFUVVNfSU5QVVRfUEFSQU1FVEVSU19WMgoreworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzIHNEaXNwQ2xrSW5wdXQ7Cit9R0VUX0RJU1BfUExMX1NUQVRVU19JTlBVVF9QQVJBTUVURVJTX1YyOworCit0eXBlZGVmIHN0cnVjdCBfR0VUX0RJU1BfUExMX1NUQVRVU19PVVRQVVRfUEFSQU1FVEVSU19WMgoreworICBVQ0hBUiAgdWNTdGF0dXM7CisgIFVDSEFSICB1Y1JlZkRpdlNyYzsgICAgICAgICAgICAgICAgIC8vID0xOiByZWZlcmVuY2UgY2xvY2sgc291cmNlIGZyb20gWFRBTElOLCA9MDogc291cmNlIGZyb20gUENJRSByZWYgY2xvY2sKKyAgVUNIQVIgIHVjUmVzZXJ2ZWRbMl07Cit9R0VUX0RJU1BfUExMX1NUQVRVU19PVVRQVVRfUEFSQU1FVEVSU19WMjsKKwordHlwZWRlZiBzdHJ1Y3QgX0dFVF9ESVNQX1BMTF9TVEFUVVNfSU5QVVRfUEFSQU1FVEVSU19WMworeworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y1IHNEaXNwQ2xrSW5wdXQ7Cit9R0VUX0RJU1BfUExMX1NUQVRVU19JTlBVVF9QQVJBTUVURVJTX1YzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgQWRqdXN0RGlzcGxheVBsbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlMKK3sKIAlVU0hPUlQgdXNQaXhlbENsb2NrOwogCVVDSEFSIHVjVHJhbnNtaXR0ZXJJRDsKIAlVQ0hBUiB1Y0VuY29kZU1vZGU7Ci0JdW5pb24gewotCQlVQ0hBUiB1Y0RWT0NvbmZpZzsJLyogaWYgRFZPLCBuZWVkIHBhc3NpbmcgbGluayByYXRlIGFuZCBvdXRwdXQgMTJiaXRsb3cgb3IgMjRiaXQgKi8KLQkJVUNIQVIgdWNDb25maWc7CS8qIGlmIG5vbmUgRFZPLCBub3QgZGVmaW5lZCB5ZXQgKi8KKwl1bmlvbgorCXsKKwkJVUNIQVIgdWNEVk9Db25maWc7CQkJCQkJCQkJLy9pZiBEVk8sIG5lZWQgcGFzc2luZyBsaW5rIHJhdGUgYW5kIG91dHB1dCAxMmJpdGxvdyBvciAyNGJpdAorCQlVQ0hBUiB1Y0NvbmZpZzsJCQkJCQkJCQkJCS8vaWYgbm9uZSBEVk8sIG5vdCBkZWZpbmVkIHlldAogCX07CiAJVUNIQVIgdWNSZXNlcnZlZFszXTsKLX0gQURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlM7Cit9QURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRSAgICAgICAweDEwCi0KICNkZWZpbmUgQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04JCQlBREpVU1RfRElTUExBWV9QTExfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlWVVWVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9ZVVZfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEU6RW5hYmxlIFlVViBvciBBVE9NX0RJU0FCTEU6RGlzYWJsZSBZVVYgKFJHQikgKi8KLQlVQ0hBUiB1Y0NSVEM7CQkvKiAgV2hpY2ggQ1JUQyBuZWVkcyB0aGlzIFlVViBvciBSR0IgZm9ybWF0ICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBFTkFCTEVfWVVWX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfQURKVVNUX0RJU1BMQVlfUExMX0lOUFVUX1BBUkFNRVRFUlNfVjMKK3sKKwlVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IHBpeGVsIGNsb2NrCisJVUNIQVIgdWNUcmFuc21pdHRlcklEOyAgICAgICAgICAgICAgICAgIC8vIHRyYW5zbWl0dGVyIGlkIGRlZmluZWQgaW4gb2JqZWN0aWQuaAorCVVDSEFSIHVjRW5jb2RlTW9kZTsgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGVyIG1vZGU6IENSVCwgTFZEUywgRFAsIFRNRFMgb3IgSERNSQorICBVQ0hBUiB1Y0Rpc3BQbGxDb25maWc7ICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5IHBsbCBjb25maWd1cmUgcGFyYW1ldGVyIGRlZmluZWQgYXMgZm9sbG93aW5nIERJU1BQTExfQ09ORklHX1hYWFgKKwlVQ0hBUiB1Y1Jlc2VydmVkWzNdOworfUFESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzOworCisvLyB1c0Rpc3BQbGxDb25maWcgdjEuMiBmb3IgUm9hZFJ1bm5lcgorI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fUkFURV9TRUwgICAgICAgICAgICAgICAgMHgwMDAxICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfRFZPX0REUl9TUEVFRCAgICAgICAgICAgICAgIDB4MDAwMCAgICAgLy8gbmVlZCBvbmx5IHdoZW4gdWNUcmFuc21pdHRlcklEID0gRFZPCisjZGVmaW5lIERJU1BQTExfQ09ORklHX0RWT19TRFJfU1BFRUQgICAgICAgICAgICAgICAweDAwMDEgICAgIC8vIG5lZWQgb25seSB3aGVuIHVjVHJhbnNtaXR0ZXJJRCA9IERWTworI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fT1VUUFVUX1NFTCAgICAgICAgICAgICAgMHgwMDBjICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfRFZPX0xPVzEyQklUICAgICAgICAgICAgICAgIDB4MDAwMCAgICAgLy8gbmVlZCBvbmx5IHdoZW4gdWNUcmFuc21pdHRlcklEID0gRFZPCisjZGVmaW5lIERJU1BQTExfQ09ORklHX0RWT19VUFBFUjEyQklUICAgICAgICAgICAgICAweDAwMDQgICAgIC8vIG5lZWQgb25seSB3aGVuIHVjVHJhbnNtaXR0ZXJJRCA9IERWTworI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fMjRCSVQgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgICAgLy8gT25seSB1c2VkIHdoZW4gdWNFbmNvZGVyTW9kZSA9IERQIG9yIExWRFMKKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERSAgICAgICAgICAgICAgIDB4MDAyMCAgICAgLy8gT25seSB1c2VkIHdoZW4gdWNFbmNvZGVyTW9kZSA9IFRNRFMgb3IgSERNSQorI2RlZmluZSBESVNQUExMX0NPTkZJR19EVUFMX0xJTksgICAgICAgICAgICAgICAgICAgMHgwMDQwICAgICAvLyBPbmx5IHVzZWQgd2hlbiB1Y0VuY29kZXJNb2RlID0gVE1EUyBvciBMVkRTCisKKwordHlwZWRlZiBzdHJ1Y3QgX0FESlVTVF9ESVNQTEFZX1BMTF9PVVRQVVRfUEFSQU1FVEVSU19WMworeworICBVTE9ORyB1bERpc3BQbGxGcmVxOyAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRpc3BsYXkgUFBMTCBmcmVxIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBpeGNsb2NrLCBhbmQgcmVsYXRlZCBpZGNsaywgc3ltY2xrIGV0YworICBVQ0hBUiB1Y1JlZkRpdjsgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm9uZS16ZXJvLCBpdCBpcyB1c2VkIHRvIGJlIGNhbGN1bGF0ZWQgdGhlIG90aGVyIHBwbGwgcGFyYW1ldGVyIGZiX2RpdmlkZXIgYW5kIHBvc3RfZGl2ICggaWYgaXQgaXMgbm90IGdpdmVuICkKKyAgVUNIQVIgdWNQb3N0RGl2OyAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGl0IGlzIG5vbmUtemVybywgaXQgaXMgdXNlZCB0byBiZSBjYWxjdWxhdGVkIHRoZSBvdGhlciBwcGxsIHBhcmFtZXRlciBmYl9kaXZpZGVyCisgIFVDSEFSIHVjUmVzZXJ2ZWRbMl07ICAKK31BREpVU1RfRElTUExBWV9QTExfT1VUUFVUX1BBUkFNRVRFUlNfVjM7CisKK3R5cGVkZWYgc3RydWN0IF9BREpVU1RfRElTUExBWV9QTExfUFNfQUxMT0NBVElPTl9WMworeworICB1bmlvbiAKKyAgeworICAgIEFESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzICBzSW5wdXQ7CisgICAgQURKVVNUX0RJU1BMQVlfUExMX09VVFBVVF9QQVJBTUVURVJTX1YzIHNPdXRwdXQ7CisgIH07Cit9IEFESlVTVF9ESVNQTEFZX1BMTF9QU19BTExPQ0FUSU9OX1YzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlWVVWVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfWVVWX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEU6RW5hYmxlIFlVViBvciBBVE9NX0RJU0FCTEU6RGlzYWJsZSBZVVYgKFJHQikKKyAgVUNIQVIgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hpY2ggQ1JUQyBuZWVkcyB0aGlzIFlVViBvciBSR0IgZm9ybWF0CisgIFVDSEFSIHVjUGFkZGluZ1syXTsKK31FTkFCTEVfWVVWX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9ZVVZfUFNfQUxMT0NBVElPTiBFTkFCTEVfWVVWX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IEdldE1lbW9yeUNsb2NrVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0dFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUyB7Ci0JVUxPTkcgdWxSZXR1cm5NZW1vcnlDbG9jazsJLyogIGN1cnJlbnQgbWVtb3J5IHNwZWVkIGluIDEwS0h6IHVuaXQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBHZXRNZW1vcnlDbG9ja1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfR0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTCit7CisgIFVMT05HIHVsUmV0dXJuTWVtb3J5Q2xvY2s7ICAgICAgICAgIC8vIGN1cnJlbnQgbWVtb3J5IHNwZWVkIGluIDEwS0h6IHVuaXQKIH0gR0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTOwogI2RlZmluZSBHRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04gIEdFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgR2V0RW5naW5lQ2xvY2tUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfR0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTIHsKLQlVTE9ORyB1bFJldHVybkVuZ2luZUNsb2NrOwkvKiAgY3VycmVudCBlbmdpbmUgc3BlZWQgaW4gMTBLSHogdW5pdCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEdldEVuZ2luZUNsb2NrVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9HRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgdWxSZXR1cm5FbmdpbmVDbG9jazsgICAgICAgICAgLy8gY3VycmVudCBlbmdpbmUgc3BlZWQgaW4gMTBLSHogdW5pdAogfSBHRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiAgR0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIEZvbGxvd2luZyBTdHJ1Y3R1cmVzIGFuZCBjb25zdGFudCBtYXkgYmUgb2Jzb2xldGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWF4aXVtIDggYnl0ZXMsdGhlIGRhdGEgcmVhZCBpbiB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlLiAqLwotLyogUmVhZCBvcGVyYWlvbiBzdWNjZXNzZWZ1bCB3aGVuIHRoZSBwYXJhbXRlciBzcGFjZSBpcyBub24temVybywgb3RoZXJ3aXNlIHJlYWQgb3BlcmF0aW9uIGZhaWxlZCAqLwotdHlwZWRlZiBzdHJ1Y3QgX1JFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c1ByZXNjYWxlOwkvKiBSYXRpbyBiZXR3ZWVuIEVuZ2luZSBjbG9jayBhbmQgSTJDIGNsb2NrICovCi0JVVNIT1JUIHVzVlJBTUFkZHJlc3M7CS8qIEFkcmVzcyBpbiBGcmFtZSBCdWZmZXIgd2hlcmUgdG8gcGFjZSByYXcgRURJRCAqLwotCVVTSE9SVCB1c1N0YXR1czsJLyogV2hlbiB1c2Ugb3V0cHV0OiBsb3dlciBieXRlIEVESUQgY2hlY2tzdW0sIGhpZ2ggYnl0ZSBoYXJkd2FyZSBzdGF0dXMgKi8KLQkvKiBXSGVuIHVzZSBpbnB1dDogIGxvd2VyIGJ5dGUgYXMgJ2J5dGUgdG8gcmVhZCc6Y3VycmVudGx5IGxpbWl0ZWQgdG8gMTI4Ynl0ZSBvciAxYnl0ZSAqLwotCVVDSEFSIHVjU2xhdmVBZGRyOwkvKiBSZWFkIGZyb20gd2hpY2ggc2xhdmUgKi8KLQlVQ0hBUiB1Y0xpbmVOdW1iZXI7CS8qIFJlYWQgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lICovCi19IFJFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBGb2xsb3dpbmcgU3RydWN0dXJlcyBhbmQgY29uc3RhbnQgbWF5IGJlIG9ic29sZXRlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL01heGl1bSA4IGJ5dGVzLHRoZSBkYXRhIHJlYWQgaW4gd2lsbCBiZSBwbGFjZWQgaW4gdGhlIHBhcmFtZXRlciBzcGFjZS4KKy8vUmVhZCBvcGVyYWlvbiBzdWNjZXNzZWZ1bCB3aGVuIHRoZSBwYXJhbXRlciBzcGFjZSBpcyBub24temVybywgb3RoZXJ3aXNlIHJlYWQgb3BlcmF0aW9uIGZhaWxlZAordHlwZWRlZiBzdHJ1Y3QgX1JFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICAgIHVzUHJlc2NhbGU7ICAgICAgICAgLy9SYXRpbyBiZXR3ZWVuIEVuZ2luZSBjbG9jayBhbmQgSTJDIGNsb2NrCisgIFVTSE9SVCAgICB1c1ZSQU1BZGRyZXNzOyAgICAgIC8vQWRyZXNzIGluIEZyYW1lIEJ1ZmZlciB3aGVyZSB0byBwYWNlIHJhdyBFRElECisgIFVTSE9SVCAgICB1c1N0YXR1czsgICAgICAgICAgIC8vV2hlbiB1c2Ugb3V0cHV0OiBsb3dlciBieXRlIEVESUQgY2hlY2tzdW0sIGhpZ2ggYnl0ZSBoYXJkd2FyZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9XSGVuIHVzZSBpbnB1dDogIGxvd2VyIGJ5dGUgYXMgJ2J5dGUgdG8gcmVhZCc6Y3VycmVudGx5IGxpbWl0ZWQgdG8gMTI4Ynl0ZSBvciAxYnl0ZQorICBVQ0hBUiAgICAgdWNTbGF2ZUFkZHI7ICAgICAgICAvL1JlYWQgZnJvbSB3aGljaCBzbGF2ZQorICBVQ0hBUiAgICAgdWNMaW5lTnVtYmVyOyAgICAgICAvL1JlYWQgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lCit9UkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKICNkZWZpbmUgUkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiAgUkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUEFSQU1FVEVSUwogCisKICNkZWZpbmUgIEFUT01fV1JJVEVfSTJDX0ZPUk1BVF9QU09GRlNFVF9QU0RBVEFCWVRFICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSAgQVRPTV9XUklURV9JMkNfRk9STUFUX1BTT0ZGU0VUX1BTVFdPREFUQUJZVEVTICAgICAgICAgICAgICAxCiAjZGVmaW5lICBBVE9NX1dSSVRFX0kyQ19GT1JNQVRfUFNDT1VOVEVSX1BTT0ZGU0VUX0lEREFUQUJMT0NLICAgICAgIDIKICNkZWZpbmUgIEFUT01fV1JJVEVfSTJDX0ZPUk1BVF9QU0NPVU5URVJfSURPRkZTRVRfUExVU19JRERBVEFCTE9DSyAgMwogI2RlZmluZSAgQVRPTV9XUklURV9JMkNfRk9STUFUX0lEQ09VTlRFUl9JRE9GRlNFVF9JRERBVEFCTE9DSyAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9XUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQcmVzY2FsZTsJLyogUmF0aW8gYmV0d2VlbiBFbmdpbmUgY2xvY2sgYW5kIEkyQyBjbG9jayAqLwotCVVTSE9SVCB1c0J5dGVPZmZzZXQ7CS8qIFdyaXRlIHRvIHdoaWNoIGJ5dGUgKi8KLQkvKiBVcHBlciBwb3J0aW9uIG9mIHVzQnl0ZU9mZnNldCBpcyBGb3JtYXQgb2YgZGF0YSAqLwotCS8qIDFieXRlUFMrb2Zmc2V0UFMgKi8KLQkvKiAyYnl0ZXNQUytvZmZzZXRQUyAqLwotCS8qIGJsb2NrSUQrb2Zmc2V0UFMgKi8KLQkvKiBibG9ja0lEK29mZnNldElEICovCi0JLyogYmxvY2tJRCtjb3VudGVySUQrb2Zmc2V0SUQgKi8KLQlVQ0hBUiB1Y0RhdGE7CQkvKiBQUyBkYXRhMSAqLwotCVVDSEFSIHVjU3RhdHVzOwkJLyogU3RhdHVzIGJ5dGUgMT1zdWNjZXNzLCAyPWZhaWx1cmUsIEFsc28gaXMgdXNlZCBhcyBQUyBkYXRhMiAqLwotCVVDSEFSIHVjU2xhdmVBZGRyOwkvKiBXcml0ZSB0byB3aGljaCBzbGF2ZSAqLwotCVVDSEFSIHVjTGluZU51bWJlcjsJLyogV3JpdGUgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lICovCi19IFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUworeworICBVU0hPUlQgICAgdXNQcmVzY2FsZTsgICAgICAgICAvL1JhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sKKyAgVVNIT1JUICAgIHVzQnl0ZU9mZnNldDsgICAgICAgLy9Xcml0ZSB0byB3aGljaCBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVXBwZXIgcG9ydGlvbiBvZiB1c0J5dGVPZmZzZXQgaXMgRm9ybWF0IG9mIGRhdGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMWJ5dGVQUytvZmZzZXRQUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzJieXRlc1BTK29mZnNldFBTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmxvY2tJRCtvZmZzZXRQUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jsb2NrSUQrb2Zmc2V0SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ibG9ja0lEK2NvdW50ZXJJRCtvZmZzZXRJRAorICBVQ0hBUiAgICAgdWNEYXRhOyAgICAgICAgICAgICAvL1BTIGRhdGExCisgIFVDSEFSICAgICB1Y1N0YXR1czsgICAgICAgICAgIC8vU3RhdHVzIGJ5dGUgMT1zdWNjZXNzLCAyPWZhaWx1cmUsIEFsc28gaXMgdXNlZCBhcyBQUyBkYXRhMgorICBVQ0hBUiAgICAgdWNTbGF2ZUFkZHI7ICAgICAgICAvL1dyaXRlIHRvIHdoaWNoIHNsYXZlCisgIFVDSEFSICAgICB1Y0xpbmVOdW1iZXI7ICAgICAgIC8vV3JpdGUgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lCit9V1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKIAogI2RlZmluZSBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OICBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9TRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzUHJlc2NhbGU7CS8qIFJhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sgKi8KLQlVQ0hBUiB1Y1NsYXZlQWRkcjsJLyogV3JpdGUgdG8gd2hpY2ggc2xhdmUgKi8KLQlVQ0hBUiB1Y0xpbmVOdW1iZXI7CS8qIFdyaXRlIGZyb20gd2hpY2ggSFcgYXNzaXN0ZWQgbGluZSAqLwotfSBTRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9TRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUworeworICBVU0hPUlQgICAgdXNQcmVzY2FsZTsgICAgICAgICAvL1JhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sKKyAgVUNIQVIgICAgIHVjU2xhdmVBZGRyOyAgICAgICAgLy9Xcml0ZSB0byB3aGljaCBzbGF2ZQorICBVQ0hBUiAgICAgdWNMaW5lTnVtYmVyOyAgICAgICAvL1dyaXRlIGZyb20gd2hpY2ggSFcgYXNzaXN0ZWQgbGluZQorfVNFVF9VUF9IV19JMkNfREFUQV9QQVJBTUVURVJTOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgU1BFRURfRkFOX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1BPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNQb3dlckNvbm5lY3RvclN0YXR1czsJLyogVXNlZCBmb3IgcmV0dXJuIHZhbHVlIDA6IGRldGVjdGVkLCAxOm5vdCBkZXRlY3RlZCAqLwotCVVDSEFSIHVjUHdyQmVoYXZpb3JJZDsKLQlVU0hPUlQgdXNQd3JCdWRnZXQ7CS8qIGhvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dCAqLwotfSBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgUG93ZXJDb25uZWN0b3JEZXRlY3Rpb25UYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QJX1BPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUworeworICBVQ0hBUiAgIHVjUG93ZXJDb25uZWN0b3JTdGF0dXM7ICAgICAgLy9Vc2VkIGZvciByZXR1cm4gdmFsdWUgMDogZGV0ZWN0ZWQsIDE6bm90IGRldGVjdGVkCisJVUNIQVIgICB1Y1B3ckJlaGF2aW9ySWQ7CQkJCQkJCQorCVVTSE9SVAl1c1B3ckJ1ZGdldDsJCQkJCQkJCSAvL2hvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dAorfVBPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUzsKIAotdHlwZWRlZiBzdHJ1Y3QgUE9XRVJfQ09OTkVDVE9SX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OIHsKLQlVQ0hBUiB1Y1Bvd2VyQ29ubmVjdG9yU3RhdHVzOwkvKiBVc2VkIGZvciByZXR1cm4gdmFsdWUgMDogZGV0ZWN0ZWQsIDE6bm90IGRldGVjdGVkICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLQlVU0hPUlQgdXNQd3JCdWRnZXQ7CS8qIGhvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dCAqLwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BTX0FMTE9DQVRJT04KK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFVDSEFSICAgdWNQb3dlckNvbm5lY3RvclN0YXR1czsgICAgICAvL1VzZWQgZm9yIHJldHVybiB2YWx1ZSAwOiBkZXRlY3RlZCwgMTpub3QgZGV0ZWN0ZWQKKwlVQ0hBUiAgIHVjUmVzZXJ2ZWQ7CisJVVNIT1JUCXVzUHdyQnVkZ2V0OwkJCQkJCQkJIC8vaG93IG11Y2ggcG93ZXIgY3VycmVudGx5IGJvb3QgdG8gaW4gdW5pdCBvZiB3YXR0CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgc1Jlc2VydmVkOworfVBPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUFNfQUxMT0NBVElPTjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipMVkRTIFNTIENvbW1hbmQgVGFibGUgRGVmaW5pdGlvbnMqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTExUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1UeXBlOwkvKiBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJEICovCi0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5OwkvKiBiaXRzMzoyIFNTX1NURVBfU0laRTsgYml0IDY6NCBTU19ERUxBWSAqLwotCVVDSEFSIHVjRW5hYmxlOwkJLyogQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFICovCi0JVUNIQVIgdWNQYWRkaW5nWzNdOwotfSBFTkFCTEVfTFZEU19TU19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0CV9FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTCit7CisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7ICAgICAgIAorICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1UeXBlOyAgICAgICAgICAgLy9CaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJECisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5OyAvL2JpdHMzOjIgU1NfU1RFUF9TSVpFOyBiaXQgNjo0IFNTX0RFTEFZCisgIFVDSEFSICAgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgICAvL0FUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorICBVQ0hBUiAgIHVjUGFkZGluZ1szXTsKK31FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTX1YyIHsKLQlVU0hPUlQgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CS8qIEJpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIE90aGVyczpUQkQgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtU3RlcDsJLyogICovCi0JVUNIQVIgdWNFbmFibGU7CQkvKiBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtRGVsYXk7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVJhbmdlOwotCVVDSEFSIHVjUGFkZGluZzsKLX0gRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMjsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEsdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yCit0eXBlZGVmIHN0cnVjdAlfRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMgoreworICBVU0hPUlQgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOyAgICAgICAKKyAgVUNIQVIgICB1Y1NwcmVhZFNwZWN0cnVtVHlwZTsgICAgICAgICAgIC8vQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuIEJpdDE9MSBFeHQuID0wIEludC4gT3RoZXJzOlRCRAorICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1TdGVwOyAgICAgICAgICAgLy8KKyAgVUNIQVIgICB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgIC8vQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bURlbGF5OworICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1SYW5nZTsKKyAgVUNIQVIgICB1Y1BhZGRpbmc7Cit9RU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMjsKIAotLyogVGhpcyBuZXcgc3RydWN0dXJlIGlzIGJhc2VkIG9uIEVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgYnV0IGV4cGFuZHMgdG8gU1Mgb24gUFBMTCwgc28gb3RoZXIgZGV2aWNlcyBjYW4gdXNlIFNTLiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCB7Ci0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1UeXBlOwkvKiAgQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuIEJpdDE9MSBFeHQuID0wIEludC4gT3RoZXJzOlRCRCAqLwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1TdGVwOwkvKiAgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtRGVsYXk7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVJhbmdlOwotCVVDSEFSIHVjUHBsbDsJCS8qICBBVE9NX1BQTEwxL0FUT01fUFBMTDIgKi8KLX0gRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMOworLy9UaGlzIG5ldyBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSUyBidXQgZXhwYW5kcyB0byBTUyBvbiBQUExMLCBzbyBvdGhlciBkZXZpY2VzIGNhbiB1c2UgU1MuCit0eXBlZGVmIHN0cnVjdAlfRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCit7CisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7CisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7ICAgICAgICAgICAvLyBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJECisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVN0ZXA7ICAgICAgICAgICAvLworICBVQ0hBUiAgIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bURlbGF5OworICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1SYW5nZTsKKyAgVUNIQVIgICB1Y1BwbGw7CQkJCQkJCQkJCQkJICAvLyBBVE9NX1BQTEwxL0FUT01fUFBMTDIKK31FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTEw7CisKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfVjIKK3sKKyAgVVNIT1JUICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsKKyAgVUNIQVIgICB1Y1NwcmVhZFNwZWN0cnVtVHlwZTsJICAgICAgICAvLyBCaXRbMF06IDAtRG93biBTcHJlYWQsMS1DZW50ZXIgU3ByZWFkLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRbMV06IDEtRXh0LiAwLUludC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0WzM6Ml06ID0wIFAxUExMID0xIFAyUExMID0yIERDUExMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0c1s3OjRdIHJlc2VydmVkCisgIFVDSEFSICAgdWNFbmFibGU7CSAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bUFtb3VudDsgICAgICAJLy8gSW5jbHVkZXMgU1NfQU1PVU5UX0ZCRElWWzc6MF0gYW5kIFNTX0FNT1VOVF9ORlJBQ19TTElQWzExOjhdICAgIAorICBVU0hPUlQgIHVzU3ByZWFkU3BlY3RydW1TdGVwOwkgICAgICAgIC8vIFNTX1NURVBfU0laRV9EU0ZSQUMKK31FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfVjI7CisKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfRE9XTl9TUFJFQUQgICAgICAweDAwCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YyX0NFTlRSRV9TUFJFQUQgICAgMHgwMQorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WMl9FWFRfU1BSRUFEICAgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfUFBMTF9TRUxfTUFTSyAgICAweDBjCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YyX1AxUExMICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WMl9QMlBMTCAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEwgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjJfRkJESVZfTUFTSyAgICAgMHgwMEZGCisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjJfRkJESVZfU0hJRlQgICAgMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YyX05GUkFDX01BU0sgICAgIDB4MEYwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YyX05GUkFDX1NISUZUICAgIDgKIAogI2RlZmluZSBFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiAgRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9QSVhFTF9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlQSVhFTF9DTE9DS19QQVJBTUVURVJTIHNQQ0xLSW5wdXQ7Ci0JRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMIHNSZXNlcnZlZDsJLyogQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgcG9ydGlvbiAqLwotfSBTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9TRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgoreworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTIHNQQ0xLSW5wdXQ7CisgIEVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCBzUmVzZXJ2ZWQ7Ly9DYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uIAorfVNFVF9QSVhFTF9DTE9DS19QU19BTExPQ0FUSU9OOwogCiAjZGVmaW5lIEVOQUJMRV9WR0FfUkVOREVSX1BTX0FMTE9DQVRJT04gICBTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgIyMjICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUyB7Ci0JVUxPTkcgdWxUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotfSBNRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSAjIyMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0CV9NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUworeworICBVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOyAgICAgICAgICAvL0luIDEwS2h6IHVuaXQKK31NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgTUVNT1JZX1RSQUlOSU5HX1BTX0FMTE9DQVRJT04gTUVNT1JZX1RSQUlOSU5HX1BBUkFNRVRFUlMKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKkxWRFMgYW5kIG90aGVyIGVuY29kZXIgY29tbWFuZCB0YWJsZSBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgTFZEU0VuY29kZXJDb250cm9sVGFibGUgICAoQmVmb3JlIERDRTMwKSAqLwotLyogICAgICAgICAgICAgICAgICAgICBMVlRNQUVuY29kZXJDb250cm9sVGFibGUgIChCZWZvcmUgRENFMzApICovCi0vKiAgICAgICAgICAgICAgICAgICAgIFRNRFNBRW5jb2RlckNvbnRyb2xUYWJsZSAgKEJlZm9yZSBEQ0UzMCkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0xWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudCAqLwotCVVDSEFSIHVjTWlzYzsJCS8qICBiaXQwPTA6IEVuYWJsZSBzaW5nbGUgbGluayAqLwotCS8qICAgICAgPTE6IEVuYWJsZSBkdWFsIGxpbmsgKi8KLQkvKiAgQml0MT0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICAwOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIgKi8KLX0gTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IExWRFNFbmNvZGVyQ29udHJvbFRhYmxlICAgKEJlZm9yZSBEQ0UzMCkKKy8vICAgICAgICAgICAgICAgICAgICBMVlRNQUVuY29kZXJDb250cm9sVGFibGUgIChCZWZvcmUgRENFMzApCisvLyAgICAgICAgICAgICAgICAgICAgVE1EU0FFbmNvZGVyQ29udHJvbFRhYmxlICAoQmVmb3JlIERDRTMwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0xWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgIC8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgIFVDSEFSICB1Y01pc2M7ICAgICAgICAvLyBiaXQwPTA6IEVuYWJsZSBzaW5nbGUgbGluaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgZHVhbCBsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQxPTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgVUNIQVIgIHVjQWN0aW9uOyAgICAgIC8vIDA6IHR1cm4gb2ZmIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIKK31MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCiAjZGVmaW5lIExWRFNfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKLQorICAgCiAjZGVmaW5lIFRNRFMxX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTICAgIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKICNkZWZpbmUgVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKIAogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyAgICBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y01pc2M7CQkvKiAgc2VlIFBBTkVMX0VOQ09ERVJfTUlTQ194eCBkZWZpbml0aW9ucyBiZWxvdyAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogIDA6IHR1cm4gb2ZmIGVuY29kZXIgKi8KLQkvKiAgMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlciAqLwotCVVDSEFSIHVjVHJ1bmNhdGU7CS8qICBiaXQwPTA6IERpc2FibGUgdHJ1bmNhdGUgKi8KLQkvKiAgICAgID0xOiBFbmFibGUgdHJ1bmNhdGUgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y1NwYXRpYWw7CS8qICBiaXQwPTA6IERpc2FibGUgc3BhdGlhbCBkaXRoZXJpbmcgKi8KLQkvKiAgICAgID0xOiBFbmFibGUgc3BhdGlhbCBkaXRoZXJpbmcgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y1RlbXBvcmFsOwkvKiAgYml0MD0wOiBEaXNhYmxlIHRlbXBvcmFsIGRpdGhlcmluZyAqLwotCS8qICAgICAgPTE6IEVuYWJsZSB0ZW1wb3JhbCBkaXRoZXJpbmcgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQkvKiAgYml0NT0wOiBHcmF5IGxldmVsIDIgKi8KLQkvKiAgICAgID0xOiBHcmF5IGxldmVsIDQgKi8KLQlVQ0hBUiB1Y0ZSQzsJCS8qICBiaXQ0PTA6IDI1RlJDX1NFTCBwYXR0ZXJuIEUgKi8KLQkvKiAgICAgID0xOiAyNUZSQ19TRUwgcGF0dGVybiBGICovCi0JLyogIGJpdDY6NT0wOiA1MEZSQ19TRUwgcGF0dGVybiBBICovCi0JLyogICAgICAgID0xOiA1MEZSQ19TRUwgcGF0dGVybiBCICovCi0JLyogICAgICAgID0yOiA1MEZSQ19TRUwgcGF0dGVybiBDICovCi0JLyogICAgICAgID0zOiA1MEZSQ19TRUwgcGF0dGVybiBEICovCi0JLyogIGJpdDc9MDogNzVGUkNfU0VMIHBhdHRlcm4gRSAqLwotCS8qICAgICAgPTE6IDc1RlJDX1NFTCBwYXR0ZXJuIEYgKi8KLX0gTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKKworLy91Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIKK3R5cGVkZWYgc3RydWN0IF9MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorICBVQ0hBUiAgdWNNaXNjOyAgICAgICAgLy8gc2VlIFBBTkVMX0VOQ09ERVJfTUlTQ194eCBkZWZpbnRpb25zIGJlbG93CisgIFVDSEFSICB1Y0FjdGlvbjsgICAgICAvLyAwOiB0dXJuIG9mZiBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOiBzZXR1cCBhbmQgdHVybiBvbiBlbmNvZGVyCisgIFVDSEFSICB1Y1RydW5jYXRlOyAgICAvLyBiaXQwPTA6IERpc2FibGUgdHJ1bmNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA9MTogRW5hYmxlIHRydW5jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ0PTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgVUNIQVIgIHVjU3BhdGlhbDsgICAgIC8vIGJpdDA9MDogRGlzYWJsZSBzcGF0aWFsIGRpdGhlcmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgc3BhdGlhbCBkaXRoZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDQ9MDogNjY2UkdCCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IDg4OFJHQgorICBVQ0hBUiAgdWNUZW1wb3JhbDsgICAgLy8gYml0MD0wOiBEaXNhYmxlIHRlbXBvcmFsIGRpdGhlcmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgdGVtcG9yYWwgZGl0aGVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ0PTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDU9MDogR3JheSBsZXZlbCAyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IEdyYXkgbGV2ZWwgNAorICBVQ0hBUiAgdWNGUkM7ICAgICAgICAgLy8gYml0ND0wOiAyNUZSQ19TRUwgcGF0dGVybiBFCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IDI1RlJDX1NFTCBwYXR0ZXJuIEYKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDY6NT0wOiA1MEZSQ19TRUwgcGF0dGVybiBBCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICA9MTogNTBGUkNfU0VMIHBhdHRlcm4gQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgPTI6IDUwRlJDX1NFTCBwYXR0ZXJuIEMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgID0zOiA1MEZSQ19TRUwgcGF0dGVybiBECisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ3PTA6IDc1RlJDX1NFTCBwYXR0ZXJuIEUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA9MTogNzVGUkNfU0VMIHBhdHRlcm4gRgorfUxWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CiAKICNkZWZpbmUgTFZEU19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgotCisgICAKICNkZWZpbmUgVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgICAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogI2RlZmluZSBUTURTMV9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgotCisgIAogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMiAgICBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogCkBAIC0xMTg1LDM4ICsxNTM2LDQyIEBACiAjZGVmaW5lIFRNRFMyX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzICAgIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKICNkZWZpbmUgVE1EUzJfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT05fVjMgVE1EUzJfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5ICMjIyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTIHsKLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBFbmFibGUgb3IgRGlzYWJsZSBFeHRlcm5hbCBUTURTIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y01pc2M7CQkvKiAgQml0MD0wOkVuYWJsZSBTaW5nbGUgbGluazs9MTpFbmFibGUgRHVhbCBsaW5rO0JpdDEgez0wOjY2NlJHQiwgPTE6ODg4UkdCfSAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5ICMjIworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSUworeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVUNIQVIgICAgdWNFbmFibGU7ICAgICAgICAgICAgLy8gRW5hYmxlIG9yIERpc2FibGUgRXh0ZXJuYWwgVE1EUyBlbmNvZGVyCisgIFVDSEFSICAgIHVjTWlzYzsgICAgICAgICAgICAgIC8vIEJpdDA9MDpFbmFibGUgU2luZ2xlIGxpbms7PTE6RW5hYmxlIER1YWwgbGluaztCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0KKyAgVUNIQVIgICAgdWNQYWRkaW5nWzJdOworfUVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSUzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTiB7Ci0JRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTIHNYVG1kc0VuY29kZXI7Ci0JV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qIENhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24gKi8KLX0gRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTgoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTICAgIHNYVG1kc0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICBzUmVzZXJ2ZWQ7ICAgICAvL0NhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24KK31FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT047CiAKICNkZWZpbmUgRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTX1YyICBMVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT05fVjIgewotCUVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSU19WMiBzWFRtZHNFbmNvZGVyOwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwkvKiBDYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uICovCi19IEVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTl9WMjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT05fVjIKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSU19WMiAgICBzWFRtZHNFbmNvZGVyOworICBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OICAgICAgc1Jlc2VydmVkOyAgICAgLy9DYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uCit9RU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QU19BTExPQ0FUSU9OX1YyOwogCi10eXBlZGVmIHN0cnVjdCBfRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyBzRGlnRW5jb2RlcjsKLQlXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsKLX0gRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KK3sKKyAgRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTICAgICAgICAgICAgc0RpZ0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOworfUVYVEVSTkFMX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRFZPRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBEVk9FbmNvZGVyQ29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xLHVjVGFibGVDb250ZW50UmV2aXNpb249MwogCi0vKiB1Y0RWT0NvbmZpZzogKi8KKy8vdWNEVk9Db25maWc6CiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19SQVRFX1NFTAkJCQkJCQkweDAxCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19ERFJfU1BFRUQJCQkJCQkweDAwCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19TRFJfU1BFRUQJCQkJCQkweDAxCkBAIC0xMjI1LDIxICsxNTgwLDIyIEBACiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19VUFBFUjEyQklUCQkJCQkJMHgwNAogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfMjRCSVQJCQkJCQkJCTB4MDgKIAotdHlwZWRlZiBzdHJ1Y3QgX0RWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsKLQlVQ0hBUiB1Y0RWT0NvbmZpZzsKLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qIEFUT01fRU5BQkxFL0FUT01fRElTQUJMRS9BVE9NX0hQRF9JTklUICovCi0JVUNIQVIgdWNSZXNldmVkWzRdOwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjM7Cit0eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7IAorICBVQ0hBUiAgdWNEVk9Db25maWc7CisgIFVDSEFSICB1Y0FjdGlvbjsJCQkJCQkJCQkJCQkJCS8vQVRPTV9FTkFCTEUvQVRPTV9ESVNBQkxFL0FUT01fSFBEX0lOSVQKKyAgVUNIQVIgIHVjUmVzZXZlZFs0XTsKK31EVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjM7CiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMwlEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MyBzdHJ1Y3R1cmUgaXMgbm90IGNoYW5nZWQgYnV0IHVzTWlzYyBhZGQgYml0IDEgYXMgYW5vdGhlciBpbnB1dCBmb3IgKi8KLS8qICBiaXQxPTA6IG5vbi1jb2hlcmVudCBtb2RlICovCi0vKiAgICAgID0xOiBjb2hlcmVudCBtb2RlICovCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MyBzdHJ1Y3R1cmUgaXMgbm90IGNoYW5nZWQgYnV0IHVzTWlzYyBhZGQgYml0IDEgYXMgYW5vdGhlciBpbnB1dCBmb3IgCisvLyBiaXQxPTA6IG5vbi1jb2hlcmVudCBtb2RlCisvLyAgICAgPTE6IGNvaGVyZW50IG1vZGUKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBPbmx5IGNoYW5nZSBpcyBoZXJlIG5leHQgdGltZSB3aGVuIGNoYW5naW5nIGVuY29kZXIgcGFyYW1ldGVyIGRlZmluaXRpb25zIGFnYWluISAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vT25seSBjaGFuZ2UgaXMgaGVyZSBuZXh0IHRpbWUgd2hlbiBjaGFuZ2luZyBlbmNvZGVyIHBhcmFtZXRlciBkZWZpbml0aW9ucyBhZ2FpbiEKICNkZWZpbmUgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUICAgICBMVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCiAjZGVmaW5lIExWRFNfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT05fTEFTVCAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUCiAKQEAgLTEyNTIsNyArMTYwOCw3IEBACiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUICAgICAgRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9MQVNUICAgRFZPX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNkZWZpbmUgUEFORUxfRU5DT0RFUl9NSVNDX0RVQUwgICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQgICAgICAgICAgICAweDAyCiAjZGVmaW5lCVBBTkVMX0VOQ09ERVJfTUlTQ19UTURTX0xJTktCCQkJCQkgMHgwNApAQCAtMTI4MSwxNTkgKzE2MzcsMTU5IEBACiAjZGVmaW5lIFBBTkVMX0VOQ09ERVJfNzVGUkNfRSAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgUEFORUxfRU5DT0RFUl83NUZSQ19GICAgICAgICAgICAgICAgICAgMHg4MAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0Vm9sdGFnZVRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRWb2x0YWdlVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKICNkZWZpbmUgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREMgICAgICAgICAgICAgMQogI2RlZmluZSBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfTVZEREMgICAgICAgICAgICAyCiAjZGVmaW5lIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19NVkREUSAgICAgICAgICAgIDMKICNkZWZpbmUgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJICAgICAgICAgICAgNAogI2RlZmluZSBTRVRfVk9MVEFHRV9JTklUX01PREUgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNFVF9WT0xUQUdFX0dFVF9NQVhfVk9MVEFHRSAgICAgICAgICAgIDYJLyogR2V0cyB0aGUgTWF4LiB2b2x0YWdlIGZvciB0aGUgc29sZGVyZWQgQXNpYyAqLworI2RlZmluZSBTRVRfVk9MVEFHRV9HRVRfTUFYX1ZPTFRBR0UgICAgICAgICAgICA2CQkJCQkvL0dldHMgdGhlIE1heC4gdm9sdGFnZSBmb3IgdGhlIHNvbGRlcmVkIEFzaWMKIAogI2RlZmluZSBTRVRfQVNJQ19WT0xUQUdFX01PREVfQUxMX1NPVVJDRSAgICAgICAweDEKICNkZWZpbmUgU0VUX0FTSUNfVk9MVEFHRV9NT0RFX1NPVVJDRV9BICAgICAgICAgMHgyCiAjZGVmaW5lIFNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9TT1VSQ0VfQiAgICAgICAgIDB4NAogCiAjZGVmaW5lCVNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9TRVRfVk9MVEFHRSAgICAgIDB4MAotI2RlZmluZQlTRVRfQVNJQ19WT0xUQUdFX01PREVfR0VUX0dQSU9WQUwgICAgICAweDEKKyNkZWZpbmUJU0VUX0FTSUNfVk9MVEFHRV9NT0RFX0dFVF9HUElPVkFMICAgICAgMHgxCQogI2RlZmluZQlTRVRfQVNJQ19WT0xUQUdFX01PREVfR0VUX0dQSU9NQVNLICAgICAweDIKIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjVm9sdGFnZVR5cGU7CS8qICBUbyB0ZWxsIHdoaWNoIHZvbHRhZ2UgdG8gc2V0IHVwLCBWRERDL01WRERDL01WRERRICovCi0JVUNIQVIgdWNWb2x0YWdlTW9kZTsJLyogIFRvIHNldCBhbGwsIHRvIHNldCBzb3VyY2UgQSBvciBzb3VyY2UgQiBvciAuLi4gKi8KLQlVQ0hBUiB1Y1ZvbHRhZ2VJbmRleDsJLyogIEFuIGluZGV4IHRvIHRlbGwgd2hpY2ggdm9sdGFnZSBsZXZlbCAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci19IFNFVF9WT0xUQUdFX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdAlfU0VUX1ZPTFRBR0VfUEFSQU1FVEVSUworeworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VUeXBlOyAgICAgICAgICAgICAgIC8vIFRvIHRlbGwgd2hpY2ggdm9sdGFnZSB0byBzZXQgdXAsIFZEREMvTVZEREMvTVZERFEKKyAgVUNIQVIgICAgdWNWb2x0YWdlTW9kZTsgICAgICAgICAgICAgICAvLyBUbyBzZXQgYWxsLCB0byBzZXQgc291cmNlIEEgb3Igc291cmNlIEIgb3IgLi4uCisgIFVDSEFSICAgIHVjVm9sdGFnZUluZGV4OyAgICAgICAgICAgICAgLy8gQW4gaW5kZXggdG8gdGVsbCB3aGljaCB2b2x0YWdlIGxldmVsCisgIFVDSEFSICAgIHVjUmVzZXJ2ZWQ7ICAgICAgICAgIAorfVNFVF9WT0xUQUdFX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9TRVRfVk9MVEFHRV9QQVJBTUVURVJTX1YyIHsKLQlVQ0hBUiB1Y1ZvbHRhZ2VUeXBlOwkvKiAgVG8gdGVsbCB3aGljaCB2b2x0YWdlIHRvIHNldCB1cCwgVkREQy9NVkREQy9NVkREUSAqLwotCVVDSEFSIHVjVm9sdGFnZU1vZGU7CS8qICBOb3QgdXNlZCwgbWF5YmUgdXNlIGZvciBzdGF0ZSBtYWNoaW5lIGZvciBkaWZmZXJlbiBwb3dlciBtb2RlICovCi0JVVNIT1JUIHVzVm9sdGFnZUxldmVsOwkvKiAgcmVhbCB2b2x0YWdlIGxldmVsICovCi19IFNFVF9WT0xUQUdFX1BBUkFNRVRFUlNfVjI7Cit0eXBlZGVmIHN0cnVjdAlfU0VUX1ZPTFRBR0VfUEFSQU1FVEVSU19WMgoreworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VUeXBlOyAgICAgICAgICAgICAgIC8vIFRvIHRlbGwgd2hpY2ggdm9sdGFnZSB0byBzZXQgdXAsIFZEREMvTVZEREMvTVZERFEKKyAgVUNIQVIgICAgdWNWb2x0YWdlTW9kZTsgICAgICAgICAgICAgICAvLyBOb3QgdXNlZCwgbWF5YmUgdXNlIGZvciBzdGF0ZSBtYWNoaW5lIGZvciBkaWZmZXJlbiBwb3dlciBtb2RlCisgIFVTSE9SVCAgIHVzVm9sdGFnZUxldmVsOyAgICAgICAgICAgICAgLy8gcmVhbCB2b2x0YWdlIGxldmVsCit9U0VUX1ZPTFRBR0VfUEFSQU1FVEVSU19WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT04gewotCVNFVF9WT0xUQUdFX1BBUkFNRVRFUlMgc0FTSUNTZXRWb2x0YWdlOwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfVk9MVEFHRV9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT04KK3sKKyAgU0VUX1ZPTFRBR0VfUEFSQU1FVEVSUyBzQVNJQ1NldFZvbHRhZ2U7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOworfVNFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBUVkVuY29kZXJDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1RWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y1R2U3RhbmRhcmQ7CS8qICBTZWUgZGVmaW5pdGlvbiAiQVRPTV9UVl9OVFNDIC4uLiIgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICAwOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIgKi8KLX0gVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgVFZFbmNvZGVyQ29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgVUNIQVIgIHVjVHZTdGFuZGFyZDsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gIkFUT01fVFZfTlRTQyAuLi4iCisgIFVDSEFSICB1Y0FjdGlvbjsgICAgICAgICAgICAgICAgICAgIC8vIDA6IHR1cm4gb2ZmIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlcgorfVRWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCVRWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHNUVkVuY29kZXI7Ci0JV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qICBEb24ndCBzZXQgdGhpcyBvbmUgKi8KLX0gVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KK3sKKyAgVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgc1RWRW5jb2RlcjsgICAgICAgICAgCisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgc1Jlc2VydmVkOyAvLyBEb24ndCBzZXQgdGhpcyBvbmUKK31UVl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTjsKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09RGF0YSBUYWJsZSBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PURhdGEgVGFibGUgUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0jaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVVEVNUAlVU0hPUlQKLSNkZWZpbmUJVVNIT1JUCXZvaWQqCi0jZW5kaWYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIERhdGEubXRiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQVNURVJfTElTVF9PRl9EQVRBX1RBQkxFUworeworICBVU0hPUlQgICAgICAgIFV0aWxpdHlQaXBlTGluZTsJICAgICAgICAvLyBPZmZlc3QgZm9yIHRoZSB1dGlsaXR5IHRvIGdldCBwYXJzZXIgaW5mbyxEb24ndCBjaGFuZ2UgdGhpcyBwb3NpdGlvbiEKKyAgVVNIT1JUICAgICAgICBNdWx0aW1lZGlhQ2FwYWJpbGl0eUluZm87IC8vIE9ubHkgdXNlZCBieSBNTSBMaWIsbGF0ZXN0IHZlcnNpb24gMS4xLCBub3QgY29uZmlndWFibGUgZnJvbSBCaW9zLCBuZWVkIHRvIGluY2x1ZGUgdGhlIHRhYmxlIHRvIGJ1aWxkIEJpb3MgCisgIFVTSE9SVCAgICAgICAgTXVsdGltZWRpYUNvbmZpZ0luZm87ICAgICAvLyBPbmx5IHVzZWQgYnkgTU0gTGliLGxhdGVzdCB2ZXJzaW9uIDIuMSwgbm90IGNvbmZpZ3VhYmxlIGZyb20gQmlvcywgbmVlZCB0byBpbmNsdWRlIHRoZSB0YWJsZSB0byBidWlsZCBCaW9zCisgIFVTSE9SVCAgICAgICAgU3RhbmRhcmRWRVNBX1RpbWluZzsgICAgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIEZpcm13YXJlSW5mbzsgICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjQKKyAgVVNIT1JUICAgICAgICBEQUNfSW5mbzsgICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgTFZEU19JbmZvOyAgICAgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUICAgICAgICBUTURTX0luZm87ICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgQW5hbG9nVFZfSW5mbzsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUICAgICAgICBTdXBwb3J0ZWREZXZpY2VzSW5mbzsgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgR1BJT19JMkNfSW5mbzsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiB3aWxsIGJlIHVzZWQgZnJvbSBSNjAwICAgICAgICAgICAKKyAgVVNIT1JUICAgICAgICBWUkFNX1VzYWdlQnlGaXJtd2FyZTsgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zIHdpbGwgYmUgdXNlZCBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBHUElPX1Bpbl9MVVQ7ICAgICAgICAgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCAgICAgICAgVkVTQV9Ub0ludGVybmFsTW9kZUxVVDsgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIENvbXBvbmVudFZpZGVvSW5mbzsgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgd2lsbCBiZSB1c2VkIGZyb20gUjYwMAorICBVU0hPUlQgICAgICAgIFBvd2VyUGxheUluZm87ICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEsbmV3IGRlc2lnbiBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBDb21wYXNzaW9uYXRlRGF0YTsgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgU2F2ZVJlc3RvcmVJbmZvOyAgICAgICAgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIFBQTExfU1NfSW5mbzsgICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIsIHVzZWQgdG8gY2FsbCBTU19JbmZvLCBjaGFuZ2UgdG8gbmV3IG5hbWUgYmVjYXVzZSBvZiBpbnQgQVNJQyBTUyBpbmZvCisgIFVTSE9SVCAgICAgICAgT2VtSW5mbzsgICAgICAgICAgICAgICAgICAvLyBEZWZpbmVkIGFuZCB1c2VkIGJ5IGV4dGVybmFsIFNXLCBzaG91bGQgYmUgb2Jzb2xldGUgc29vbgorICBVU0hPUlQgICAgICAgIFhUTURTX0luZm87ICAgICAgICAgICAgICAgLy8gV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBNY2xrU1NfSW5mbzsgICAgICAgICAgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xLCBvbmx5IGVuYWJsZWQgd2hlbiBleHQgU1MgY2hpcCBpcyB1c2VkCisgIFVTSE9SVCAgICAgICAgT2JqZWN0X0hlYWRlcjsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgICAgICAgIEluZGlyZWN0SU9BY2Nlc3M7ICAgICAgICAgLy8gT25seSB1c2VkIGJ5IEJpb3MsdGhpcyB0YWJsZSBwb3NpdGlvbiBjYW4ndCBjaGFuZ2UgYXQgYWxsISEKKyAgVVNIT1JUICAgICAgICBNQ19Jbml0UGFyYW1ldGVyOyAgICAgICAgIC8vIE9ubHkgdXNlZCBieSBjb21tYW5kIHRhYmxlCisgIFVTSE9SVCAgICAgICAgQVNJQ19WRERDX0luZm87CQkJCQkJLy8gV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBBU0lDX0ludGVybmFsU1NfSW5mbzsJCQkvLyBOZXcgdGFiZWwgbmFtZSBmcm9tIFI2MDAsIHVzZWQgdG8gYmUgY2FsbGVkICJBU0lDX01WRERDX0luZm8iCisgIFVTSE9SVCAgICAgICAgVFZfVmlkZW9Nb2RlOwkJCQkJCQkvLyBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZQorICBVU0hPUlQgICAgICAgIFZSQU1fSW5mbzsJCQkJCQkJCS8vIE9ubHkgdXNlZCBieSBjb21tYW5kIHRhYmxlLCBsYXRlc3QgdmVyc2lvbiAxLjMKKyAgVVNIT1JUICAgICAgICBNZW1vcnlUcmFpbmluZ0luZm87CQkJCS8vIFVzZWQgZm9yIFZCSU9TIGFuZCBEaWFnIHV0aWxpdHkgZm9yIG1lbW9yeSB0cmFpbmluZyBwdXJwb3NlIHNpbmNlIFI2MDAuIHRoZSBuZXcgdGFibGUgcmV2IHN0YXJ0IGZyb20gMi4xCisgIFVTSE9SVCAgICAgICAgSW50ZWdyYXRlZFN5c3RlbUluZm87CQkJLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cworICBVU0hPUlQgICAgICAgIEFTSUNfUHJvZmlsaW5nSW5mbzsJCQkJLy8gTmV3IHRhYmxlIG5hbWUgZnJvbSBSNjAwLCB1c2VkIHRvIGJlIGNhbGxlZCAiQVNJQ19WRERDSV9JbmZvIiBmb3IgcHJlLVI2MDAKKyAgVVNIT1JUICAgICAgICBWb2x0YWdlT2JqZWN0SW5mbzsJCQkJLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cywgbGF0ZXN0IHZlcnNpb24gMS4xCisJVVNIT1JUCQkJCVBvd2VyU291cmNlSW5mbzsJCQkJCS8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsIGxhdGVzdCB2ZXJzb2luIDEuMQorfUFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVM7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIERhdGEubXRiICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9MSVNUX09GX0RBVEFfVEFCTEVTIHsKLQlVU0hPUlQgVXRpbGl0eVBpcGVMaW5lOwkvKiAgT2ZmZXN0IGZvciB0aGUgdXRpbGl0eSB0byBnZXQgcGFyc2VyIGluZm8sRG9uJ3QgY2hhbmdlIHRoaXMgcG9zaXRpb24hICovCi0JVVNIT1JUIE11bHRpbWVkaWFDYXBhYmlsaXR5SW5mbzsJLyogIE9ubHkgdXNlZCBieSBNTSBMaWIsbGF0ZXN0IHZlcnNpb24gMS4xLCBub3QgY29uZmlndWFibGUgZnJvbSBCaW9zLCBuZWVkIHRvIGluY2x1ZGUgdGhlIHRhYmxlIHRvIGJ1aWxkIEJpb3MgKi8KLQlVU0hPUlQgTXVsdGltZWRpYUNvbmZpZ0luZm87CS8qICBPbmx5IHVzZWQgYnkgTU0gTGliLGxhdGVzdCB2ZXJzaW9uIDIuMSwgbm90IGNvbmZpZ3VhYmxlIGZyb20gQmlvcywgbmVlZCB0byBpbmNsdWRlIHRoZSB0YWJsZSB0byBidWlsZCBCaW9zICovCi0JVVNIT1JUIFN0YW5kYXJkVkVTQV9UaW1pbmc7CS8qICBPbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBGaXJtd2FyZUluZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuNCAqLwotCVVTSE9SVCBEQUNfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIExWRFNfSW5mbzsJLyogIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFRNRFNfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEFuYWxvZ1RWX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBTdXBwb3J0ZWREZXZpY2VzSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEdQSU9fSTJDX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiB3aWxsIGJlIHVzZWQgZnJvbSBSNjAwICovCi0JVVNIT1JUIFZSQU1fVXNhZ2VCeUZpcm13YXJlOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjMgd2lsbCBiZSB1c2VkIGZyb20gUjYwMCAqLwotCVVTSE9SVCBHUElPX1Bpbl9MVVQ7CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBWRVNBX1RvSW50ZXJuYWxNb2RlTFVUOwkvKiAgT25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgQ29tcG9uZW50VmlkZW9JbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgd2lsbCBiZSB1c2VkIGZyb20gUjYwMCAqLwotCVVTSE9SVCBQb3dlclBsYXlJbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEsbmV3IGRlc2lnbiBmcm9tIFI2MDAgKi8KLQlVU0hPUlQgQ29tcGFzc2lvbmF0ZURhdGE7CS8qICBXaWxsIGJlIG9ic29sZXRlIGZyb20gUjYwMCAqLwotCVVTSE9SVCBTYXZlUmVzdG9yZUluZm87CS8qICBPbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBQUExMX1NTX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiwgdXNlZCB0byBjYWxsIFNTX0luZm8sIGNoYW5nZSB0byBuZXcgbmFtZSBiZWNhdXNlIG9mIGludCBBU0lDIFNTIGluZm8gKi8KLQlVU0hPUlQgT2VtSW5mbzsJCS8qICBEZWZpbmVkIGFuZCB1c2VkIGJ5IGV4dGVybmFsIFNXLCBzaG91bGQgYmUgb2Jzb2xldGUgc29vbiAqLwotCVVTSE9SVCBYVE1EU19JbmZvOwkvKiAgV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAgKi8KLQlVU0hPUlQgTWNsa1NTX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSwgb25seSBlbmFibGVkIHdoZW4gZXh0IFNTIGNoaXAgaXMgdXNlZCAqLwotCVVTSE9SVCBPYmplY3RfSGVhZGVyOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgSW5kaXJlY3RJT0FjY2VzczsJLyogIE9ubHkgdXNlZCBieSBCaW9zLHRoaXMgdGFibGUgcG9zaXRpb24gY2FuJ3QgY2hhbmdlIGF0IGFsbCEhICovCi0JVVNIT1JUIE1DX0luaXRQYXJhbWV0ZXI7CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSAqLwotCVVTSE9SVCBBU0lDX1ZERENfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEFTSUNfSW50ZXJuYWxTU19JbmZvOwkvKiAgTmV3IHRhYmVsIG5hbWUgZnJvbSBSNjAwLCB1c2VkIHRvIGJlIGNhbGxlZCAiQVNJQ19NVkREQ19JbmZvIiAqLwotCVVTSE9SVCBUVl9WaWRlb01vZGU7CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSAqLwotCVVTSE9SVCBWUkFNX0luZm87CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSwgbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIE1lbW9yeVRyYWluaW5nSW5mbzsJLyogIFVzZWQgZm9yIFZCSU9TIGFuZCBEaWFnIHV0aWxpdHkgZm9yIG1lbW9yeSB0cmFpbmluZyBwdXJwb3NlIHNpbmNlIFI2MDAuIHRoZSBuZXcgdGFibGUgcmV2IHN0YXJ0IGZyb20gMi4xICovCi0JVVNIT1JUIEludGVncmF0ZWRTeXN0ZW1JbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBBU0lDX1Byb2ZpbGluZ0luZm87CS8qICBOZXcgdGFibGUgbmFtZSBmcm9tIFI2MDAsIHVzZWQgdG8gYmUgY2FsbGVkICJBU0lDX1ZERENJX0luZm8iIGZvciBwcmUtUjYwMCAqLwotCVVTSE9SVCBWb2x0YWdlT2JqZWN0SW5mbzsJLyogIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsIGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBQb3dlclNvdXJjZUluZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLCBsYXRlc3QgdmVyc29pbiAxLjEgKi8KLX0gQVRPTV9NQVNURVJfTElTVF9PRl9EQVRBX1RBQkxFUzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX01BU1RFUl9MSVNUX09GX0RBVEFfVEFCTEVTICAgTGlzdE9mRGF0YVRhYmxlczsKK31BVE9NX01BU1RFUl9EQVRBX1RBQkxFOwogCi0jaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVU0hPUlQJVVRFTVAKLSNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gTXVsdGltZWRpYUNhcGFiaWxpdHlJbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01VTFRJTUVESUFfQ0FQQUJJTElUWV9JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICB1bFNpZ25hdHVyZTsgICAgICAvLyBIVyBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdHJpbmcgIiRBVEkiCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0kyQ19UeXBlOyAgICAgICAvLyBJMkMgdHlwZSAobm9ybWFsIEdQX0lPLCBJbXBhY3RUViBHUF9JTywgRGVkaWNhdGVkIEkyQyBwaW4sIGV0YykKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfT3V0SW5mbzsgICAgIC8vIFR5cGUgb2YgVFYgb3V0IHN1cHBvcnRlZCAoMzowKSBhbmQgdmlkZW8gb3V0IGNyeXN0YWwgZnJlcXVlbmN5ICg2OjQpIGFuZCBUViBkYXRhIHBvcnQgKDcpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1ZpZGVvUG9ydEluZm87ICAvLyBQcm92aWRlcyB0aGUgdmlkZW8gcG9ydCBjYXBhYmlsaXRpZXMKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjSG9zdFBvcnRJbmZvOyAgIC8vIFByb3ZpZGVzIGhvc3QgcG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCit9QVRPTV9NVUxUSU1FRElBX0NBUEFCSUxJVFlfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUFTVEVSX0RBVEFfVEFCTEUgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVMgTGlzdE9mRGF0YVRhYmxlczsKLX0gQVRPTV9NQVNURVJfREFUQV9UQUJMRTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIE11bHRpbWVkaWFDb25maWdJbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01VTFRJTUVESUFfQ09ORklHX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICB1bFNpZ25hdHVyZTsgICAgICAvLyBNTSBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdGluZyAiJE1NVCIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVHVuZXJJbmZvOyAgICAgIC8vIFR5cGUgb2YgdHVuZXIgaW5zdGFsbGVkIG9uIHRoZSBhZGFwdGVyICg0OjApIGFuZCB2aWRlbyBpbnB1dCBmb3IgdHVuZXIgKDc6NSkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjQXVkaW9DaGlwSW5mbzsgIC8vIExpc3QgdGhlIGF1ZGlvIGNoaXAgdHlwZSAoMzowKSBwcm9kdWN0IHR5cGUgKDQpIGFuZCBPRU0gcmV2aXNpb24gKDc6NSkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjUHJvZHVjdElEOyAgICAgIC8vIERlZmluZXMgYXMgT0VNIElEIG9yIEFUSSBib2FyZCBJRCBkZXBlbmRlbnQgb24gcHJvZHVjdCB0eXBlIHNldHRpbmcKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjTWlzY0luZm8xOyAgICAgIC8vIFR1bmVyIHZvbHRhZ2UgKDE6MCkgSFcgdGVsZXRleHQgc3VwcG9ydCAoMzoyKSBGTSBhdWRpbyBkZWNvZGVyICg1OjQpIHJlc2VydmVkICg2KSBhdWRpbyBzY3JhbWJsaW5nICg3KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNNaXNjSW5mbzI7ICAgICAgLy8gSTJTIGlucHV0IGNvbmZpZyAoMCkgSTJTIG91dHB1dCBjb25maWcgKDEpIEkyUyBBdWRpbyBDaGlwICg0OjIpIFNQRElGIE91dHB1dCBDb25maWcgKDUpIHJlc2VydmVkICg3OjYpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y01pc2NJbmZvMzsgICAgICAvLyBWaWRlbyBEZWNvZGVyIFR5cGUgKDM6MCkgVmlkZW8gSW4gU3RhbmRhcmQvQ3J5c3RhbCAoNzo0KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNNaXNjSW5mbzQ7ICAgICAgLy8gVmlkZW8gRGVjb2RlciBIb3N0IENvbmZpZyAoMjowKSByZXNlcnZlZCAoNzozKQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNWaWRlb0lucHV0MEluZm87Ly8gVmlkZW8gSW5wdXQgMCBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVmlkZW9JbnB1dDFJbmZvOy8vIFZpZGVvIElucHV0IDEgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1ZpZGVvSW5wdXQySW5mbzsvLyBWaWRlbyBJbnB1dCAyIFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNWaWRlb0lucHV0M0luZm87Ly8gVmlkZW8gSW5wdXQgMyBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVmlkZW9JbnB1dDRJbmZvOy8vIFZpZGVvIElucHV0IDQgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpCit9QVRPTV9NVUxUSU1FRElBX0NPTkZJR19JTkZPOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBNdWx0aW1lZGlhQ2FwYWJpbGl0eUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NVUxUSU1FRElBX0NBUEFCSUxJVFlfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxTaWduYXR1cmU7CS8qICBIVyBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdHJpbmcgIiRBVEkiICovCi0JVUNIQVIgdWNJMkNfVHlwZTsJLyogIEkyQyB0eXBlIChub3JtYWwgR1BfSU8sIEltcGFjdFRWIEdQX0lPLCBEZWRpY2F0ZWQgSTJDIHBpbiwgZXRjKSAqLwotCVVDSEFSIHVjVFZfT3V0SW5mbzsJLyogIFR5cGUgb2YgVFYgb3V0IHN1cHBvcnRlZCAoMzowKSBhbmQgdmlkZW8gb3V0IGNyeXN0YWwgZnJlcXVlbmN5ICg2OjQpIGFuZCBUViBkYXRhIHBvcnQgKDcpICovCi0JVUNIQVIgdWNWaWRlb1BvcnRJbmZvOwkvKiAgUHJvdmlkZXMgdGhlIHZpZGVvIHBvcnQgY2FwYWJpbGl0aWVzICovCi0JVUNIQVIgdWNIb3N0UG9ydEluZm87CS8qICBQcm92aWRlcyBob3N0IHBvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAqLwotfSBBVE9NX01VTFRJTUVESUFfQ0FQQUJJTElUWV9JTkZPOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGluIEZpcm13YXJlSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIE11bHRpbWVkaWFDb25maWdJbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTVVMVElNRURJQV9DT05GSUdfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxTaWduYXR1cmU7CS8qICBNTSBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdGluZyAiJE1NVCIgKi8KLQlVQ0hBUiB1Y1R1bmVySW5mbzsJLyogIFR5cGUgb2YgdHVuZXIgaW5zdGFsbGVkIG9uIHRoZSBhZGFwdGVyICg0OjApIGFuZCB2aWRlbyBpbnB1dCBmb3IgdHVuZXIgKDc6NSkgKi8KLQlVQ0hBUiB1Y0F1ZGlvQ2hpcEluZm87CS8qICBMaXN0IHRoZSBhdWRpbyBjaGlwIHR5cGUgKDM6MCkgcHJvZHVjdCB0eXBlICg0KSBhbmQgT0VNIHJldmlzaW9uICg3OjUpICovCi0JVUNIQVIgdWNQcm9kdWN0SUQ7CS8qICBEZWZpbmVzIGFzIE9FTSBJRCBvciBBVEkgYm9hcmQgSUQgZGVwZW5kZW50IG9uIHByb2R1Y3QgdHlwZSBzZXR0aW5nICovCi0JVUNIQVIgdWNNaXNjSW5mbzE7CS8qICBUdW5lciB2b2x0YWdlICgxOjApIEhXIHRlbGV0ZXh0IHN1cHBvcnQgKDM6MikgRk0gYXVkaW8gZGVjb2RlciAoNTo0KSByZXNlcnZlZCAoNikgYXVkaW8gc2NyYW1ibGluZyAoNykgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvMjsJLyogIEkyUyBpbnB1dCBjb25maWcgKDApIEkyUyBvdXRwdXQgY29uZmlnICgxKSBJMlMgQXVkaW8gQ2hpcCAoNDoyKSBTUERJRiBPdXRwdXQgQ29uZmlnICg1KSByZXNlcnZlZCAoNzo2KSAqLwotCVVDSEFSIHVjTWlzY0luZm8zOwkvKiAgVmlkZW8gRGVjb2RlciBUeXBlICgzOjApIFZpZGVvIEluIFN0YW5kYXJkL0NyeXN0YWwgKDc6NCkgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvNDsJLyogIFZpZGVvIERlY29kZXIgSG9zdCBDb25maWcgKDI6MCkgcmVzZXJ2ZWQgKDc6MykgKi8KLQlVQ0hBUiB1Y1ZpZGVvSW5wdXQwSW5mbzsJLyogIFZpZGVvIElucHV0IDAgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpICovCi0JVUNIQVIgdWNWaWRlb0lucHV0MUluZm87CS8qICBWaWRlbyBJbnB1dCAxIFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KSAqLwotCVVDSEFSIHVjVmlkZW9JbnB1dDJJbmZvOwkvKiAgVmlkZW8gSW5wdXQgMiBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikgKi8KLQlVQ0hBUiB1Y1ZpZGVvSW5wdXQzSW5mbzsJLyogIFZpZGVvIElucHV0IDMgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpICovCi0JVUNIQVIgdWNWaWRlb0lucHV0NEluZm87CS8qICBWaWRlbyBJbnB1dCA0IFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KSAqLwotfSBBVE9NX01VTFRJTUVESUFfQ09ORklHX0lORk87Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBpbiBGaXJtd2FyZUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICB1c0JJT1NDYXBhYmlsaXR5IERlZmluaXRpb246ICovCi0vKiAgQml0IDAgPSAwOiBCaW9zIGltYWdlIGlzIG5vdCBQb3N0ZWQsID0xOkJpb3MgaW1hZ2UgaXMgUG9zdGVkOyAqLwotLyogIEJpdCAxID0gMDogRHVhbCBDUlRDIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBEdWFsIENSVEMgaXMgc3VwcG9ydGVkOyAqLwotLyogIEJpdCAyID0gMDogRXh0ZW5kZWQgRGVza3RvcCBpcyBub3Qgc3VwcG9ydGVkLCA9MTogRXh0ZW5kZWQgRGVza3RvcCBpcyBzdXBwb3J0ZWQ7ICovCi0vKiAgT3RoZXJzOiBSZXNlcnZlZCAqLworLy8gdXNCSU9TQ2FwYWJpbGl0eSBEZWZpbnRpb246CisvLyBCaXQgMCA9IDA6IEJpb3MgaW1hZ2UgaXMgbm90IFBvc3RlZCwgPTE6QmlvcyBpbWFnZSBpcyBQb3N0ZWQ7IAorLy8gQml0IDEgPSAwOiBEdWFsIENSVEMgaXMgbm90IHN1cHBvcnRlZCwgPTE6IER1YWwgQ1JUQyBpcyBzdXBwb3J0ZWQ7IAorLy8gQml0IDIgPSAwOiBFeHRlbmRlZCBEZXNrdG9wIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBFeHRlbmRlZCBEZXNrdG9wIGlzIHN1cHBvcnRlZDsgCisvLyBPdGhlcnM6IFJlc2VydmVkCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0FUT01fRklSTVdBUkVfUE9TVEVEICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0RVQUxfQ1JUQ19TVVBQT1JUICAgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0VYVEVOREVEX0RFU0tUT1BfU1VQUE9SVCAgICAgMHgwMDA0Ci0jZGVmaW5lIEFUT01fQklPU19JTkZPX01FTU9SWV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDA4Ci0jZGVmaW5lIEFUT01fQklPU19JTkZPX0VOR0lORV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDEwCisjZGVmaW5lIEFUT01fQklPU19JTkZPX01FTU9SWV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDA4CQkvLyAodmFsaWQgZnJvbSB2MS4xIH52MS40KTo9MTogbWVtY2xrIFNTIGVuYWJsZSwgPTAgbWVtY2xrIFNTIGRpc2FibGUuIAorI2RlZmluZSBBVE9NX0JJT1NfSU5GT19FTkdJTkVfQ0xPQ0tfU1NfU1VQUE9SVCAgICAgIDB4MDAxMAkJLy8gKHZhbGlkIGZyb20gdjEuMSB+djEuNCk6PTE6IGVuZ2NsayBTUyBlbmFibGUsID0wIGVuZ2NsayBTUyBkaXNhYmxlLiAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fQkxfQ09OVFJPTExFRF9CWV9HUFUgICAgICAgICAweDAwMjAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fV01JX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwNDAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fUFBNT0RFX0FTU0lHTkdFRF9CWV9TWVNURU0gICAweDAwODAKQEAgLTE0NDEsMjQyICsxNzk3LDI5MiBAQAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19IWVBFUk1FTU9SWV9TSVpFX01BU0sgICAgICAgIDB4MUUwMAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19WUE9TVF9XSVRIT1VUX0ZJUlNUX01PREVfU0VUIDB4MjAwMAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19CSU9TX1NDUkFUQ0g2X1NDTDJfUkVERUZJTkUgIDB4NDAwMAorI2RlZmluZSBBVE9NX0JJT1NfSU5GT19NRU1PUllfQ0xPQ0tfRVhUX1NTX1NVUFBPUlQgIDB4MDAwOAkJLy8gKHZhbGlkIGZyb20gdjIuMSApOiA9MTogbWVtY2xrIHNzIGVuYWJsZSB3aXRoIGV4dGVybmFsIHNzIGNoaXAKKyNkZWZpbmUgQVRPTV9CSU9TX0lORk9fRU5HSU5FX0NMT0NLX0VYVF9TU19TVVBQT1JUICAweDAwMTAJCS8vICh2YWxpZCBmcm9tIHYyLjEgKTogPTE6IGVuZ2NsayBzcyBlbmFibGUgd2l0aCBleHRlcm5hbCBzcyBjaGlwCiAKICNpZm5kZWYgX0gySU5DCiAKLS8qIFBsZWFzZSBkb24ndCBhZGQgb3IgZXhwYW5kIHRoaXMgYml0ZmllbGQgc3RydWN0dXJlIGJlbG93LCB0aGlzIG9uZSB3aWxsIHJldGlyZSBzb29uLiEgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFkgeworLy9QbGVhc2UgZG9uJ3QgYWRkIG9yIGV4cGFuZCB0aGlzIGJpdGZpZWxkIHN0cnVjdHVyZSBiZWxvdywgdGhpcyBvbmUgd2lsbCByZXRpcmUgc29vbi4hCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVVNIT1JUIFJlc2VydmVkOjM7Ci0JVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKLQlVU0hPUlQgSHlwZXJNZW1vcnlfU3VwcG9ydDoxOwotCVVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKLQlVU0hPUlQgV01JX1NVUFBPUlQ6MTsKLQlVU0hPUlQgR1BVQ29udHJvbHNCTDoxOwotCVVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKLQlVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7Ci0JVVNIT1JUIEV4dGVuZGVkRGVza3RvcFN1cHBvcnQ6MTsKLQlVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOwotCVVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOworICBVU0hPUlQgUmVzZXJ2ZWQ6MzsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1N1cHBvcnQ6MTsKKyAgVVNIT1JUIFBQTW9kZV9Bc3NpZ25lZDoxOworICBVU0hPUlQgV01JX1NVUFBPUlQ6MTsKKyAgVVNIT1JUIEdQVUNvbnRyb2xzQkw6MTsKKyAgVVNIT1JUIEVuZ2luZUNsb2NrU1NfU3VwcG9ydDoxOworICBVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7CisgIFVTSE9SVCBFeHRlbmRlZERlc2t0b3BTdXBwb3J0OjE7CisgIFVTSE9SVCBEdWFsQ1JUQ19TdXBwb3J0OjE7CisgIFVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOwogI2Vsc2UKLQlVU0hPUlQgRmlybXdhcmVQb3N0ZWQ6MTsKLQlVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOwotCVVTSE9SVCBFeHRlbmRlZERlc2t0b3BTdXBwb3J0OjE7Ci0JVVNIT1JUIE1lbW9yeUNsb2NrU1NfU3VwcG9ydDoxOwotCVVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKLQlVU0hPUlQgR1BVQ29udHJvbHNCTDoxOwotCVVTSE9SVCBXTUlfU1VQUE9SVDoxOwotCVVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKLQlVU0hPUlQgSHlwZXJNZW1vcnlfU3VwcG9ydDoxOwotCVVTSE9SVCBIeXBlck1lbW9yeV9TaXplOjQ7Ci0JVVNIT1JUIFJlc2VydmVkOjM7CisgIFVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOworICBVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOworICBVU0hPUlQgRXh0ZW5kZWREZXNrdG9wU3VwcG9ydDoxOworICBVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7CisgIFVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKKyAgVVNIT1JUIEdQVUNvbnRyb2xzQkw6MTsKKyAgVVNIT1JUIFdNSV9TVVBQT1JUOjE7CisgIFVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1N1cHBvcnQ6MTsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKKyAgVVNIT1JUIFJlc2VydmVkOjM7CiAjZW5kaWYKLX0gQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZOworfUFUT01fRklSTVdBUkVfQ0FQQUJJTElUWTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB7Ci0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZIHNiZkFjY2VzczsKLQlVU0hPUlQgc3VzQWNjZXNzOwotfSBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUworeworICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFkgc2JmQWNjZXNzOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgc3VzQWNjZXNzOworfUFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1M7CiAKICNlbHNlCiAKLXR5cGVkZWYgdW5pb24gX0FUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1MgewotCVVTSE9SVCBzdXNBY2Nlc3M7Ci19IEFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1M7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTCit7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICBzdXNBY2Nlc3M7Cit9QVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUzsKIAogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsRmlybXdhcmVSZXZpc2lvbjsKLQlVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRGVmYXVsdE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsQVNJQ01heEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgYXVsUmVzZXJ2ZWRGb3JCSU9TWzNdOwkvKiBEb24ndCB1c2UgdGhlbSAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQsIHRoZSBkZWZpbml0aW9ucyBhYm92ZSBjYW4ndCBjaGFuZ2UhISEgKi8KLQlBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OwotCVVTSE9SVCB1c1JlZmVyZW5jZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzUE1fUlRTX0xvY2F0aW9uOwkvKiBSVFMgUE00IHN0YXJ0aW5nIGxvY2F0aW9uIGluIFJPTSBpbiAxS2IgdW5pdCAqLwotCVVDSEFSIHVjUE1fUlRTX1N0cmVhbVNpemU7CS8qIFJUUyBQTTQgcGFja2V0cyBpbiBLYiB1bml0ICovCi0JVUNIQVIgdWNEZXNpZ25fSUQ7CS8qIEluZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbiAqLwotCVVDSEFSIHVjTWVtb3J5TW9kdWxlX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLX0gQVRPTV9GSVJNV0FSRV9JTkZPOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICAgICAgIHNIZWFkZXI7IAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRmlybXdhcmVSZXZpc2lvbjsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0RW5naW5lQ2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERyaXZlclRhcmdldE1lbW9yeUNsb2NrOyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhFbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4RW5naW5lQ2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsQVNJQ01heE1lbW9yeUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbM107ICAgICAgICAgICAgICAgLy9Eb24ndCB1c2UgdGhlbQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1bFJlc2VydmVkRm9yQklPU1szXTsgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4TWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrOyAgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsaworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdCwgdGhlIGRlZmluaXRpb25zIGFib3ZlIGNhbid0IGNoYW5nZSEhIQorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUmVmZXJlbmNlQ2xvY2s7ICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNQTV9SVFNfTG9jYXRpb247ICAgICAgICAgIC8vUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNQTV9SVFNfU3RyZWFtU2l6ZTsgICAgICAgIC8vUlRTIFBNNCBwYWNrZXRzIGluIEtiIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0Rlc2lnbl9JRDsgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeU1vZHVsZV9JRDsgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KK31BVE9NX0ZJUk1XQVJFX0lORk87CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk9fVjFfMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxGaXJtd2FyZVJldmlzaW9uOwotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bERyaXZlclRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4RW5naW5lQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bEFTSUNNYXhNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVDSEFSIHVjQVNJQ01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTWluQWxsb3dlZEJMX0xldmVsOwotCVVDSEFSIHVjUGFkZGluZ1syXTsJLyogRG9uJ3QgdXNlIHRoZW0gKi8KLQlVTE9ORyBhdWxSZXNlcnZlZEZvckJJT1NbMl07CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV8yCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsgICAgICAgICAgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVsUmVzZXJ2ZWRGb3JCSU9TWzJdOyAgICAgIC8vRG9uJ3QgdXNlIHRoZW0KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4TWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrOyAgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsaworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdCAtIGxvd2VyIDE2Yml0IG9mIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQKKyAgQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1JlZmVyZW5jZUNsb2NrOyAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0CQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUE1fUlRTX0xvY2F0aW9uOyAgICAgICAgICAvL1JUUyBQTTQgc3RhcnRpbmcgbG9jYXRpb24gaW4gUk9NIGluIDFLYiB1bml0IAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUE1fUlRTX1N0cmVhbVNpemU7ICAgICAgICAvL1JUUyBQTTQgcGFja2V0cyBpbiBLYiB1bml0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNEZXNpZ25fSUQ7ICAgICAgICAgICAgICAgIC8vSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlNb2R1bGVfSUQ7ICAgICAgICAgIC8vSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduCit9QVRPTV9GSVJNV0FSRV9JTkZPX1YxXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk9fVjFfMyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxGaXJtd2FyZVJldmlzaW9uOwotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bERyaXZlclRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4RW5naW5lQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bEFTSUNNYXhNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVDSEFSIHVjQVNJQ01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTWluQWxsb3dlZEJMX0xldmVsOwotCVVDSEFSIHVjUGFkZGluZ1syXTsJLyogRG9uJ3QgdXNlIHRoZW0gKi8KLQlVTE9ORyBhdWxSZXNlcnZlZEZvckJJT1M7CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV8zOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV8zCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsgICAgICAgICAgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVsUmVzZXJ2ZWRGb3JCSU9TOyAgICAgICAgIC8vRG9uJ3QgdXNlIHRoZW0KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bDNEQWNjZWxlcmF0aW9uRW5naW5lQ2xvY2s7Ly9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heEVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9jazsgICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQsIE1heC4gIFBjbGsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0CisgIEFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1MgdXNGaXJtd2FyZUNhcGFiaWxpdHk7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNSZWZlcmVuY2VDbG9jazsgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdAkKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1BNX1JUU19Mb2NhdGlvbjsgICAgICAgICAgLy9SVFMgUE00IHN0YXJ0aW5nIGxvY2F0aW9uIGluIFJPTSBpbiAxS2IgdW5pdCAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1BNX1JUU19TdHJlYW1TaXplOyAgICAgICAgLy9SVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjRGVzaWduX0lEOyAgICAgICAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5TW9kdWxlX0lEOyAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorfUFUT01fRklSTVdBUkVfSU5GT19WMV8zOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsRmlybXdhcmVSZXZpc2lvbjsKLQlVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRGVmYXVsdE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsQVNJQ01heEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01pbkFsbG93ZWRCTF9MZXZlbDsKLQlVU0hPUlQgdXNCb290VXBWRERDVm9sdGFnZTsJLyogSW4gTVYgdW5pdCAqLwotCVVTSE9SVCB1c0xjZE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiAgSW4gTUh6IHVuaXQgKi8KLQlVU0hPUlQgdXNMY2RNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogIEluIE1IeiB1bml0ICovCi0JVUxPTkcgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV80OwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV80Cit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQm9vdFVwVkREQ1ZvbHRhZ2U7ICAgICAgICAvL0luIE1WIHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0xjZE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAvLyBJbiBNSHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTGNkTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7IC8vIEluIE1IeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOy8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhFbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhNZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2s7ICAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0LCBNYXguICBQY2xrCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0IC0gbG93ZXIgMTZiaXQgb2YgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dAorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUmVmZXJlbmNlQ2xvY2s7ICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNQTV9SVFNfTG9jYXRpb247ICAgICAgICAgIC8vUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNQTV9SVFNfU3RyZWFtU2l6ZTsgICAgICAgIC8vUlRTIFBNNCBwYWNrZXRzIGluIEtiIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0Rlc2lnbl9JRDsgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeU1vZHVsZV9JRDsgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KK31BVE9NX0ZJUk1XQVJFX0lORk9fVjFfNDsKIAotI2RlZmluZSBBVE9NX0ZJUk1XQVJFX0lORk9fTEFTVCAgQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQKKy8vdGhlIHN0cnVjdHVyZSBiZWxvdyB0byBiZSB1c2VkIGZyb20gQ3lwcmVzcwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMl8xCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDE7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhFbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxCaW5hcnlBbHRlcmVkSW5mbzsgICAgICAgIC8vV2FzIHVsQVNJQ01heEVuZ2luZUNsb2NrCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEZWZhdWx0RGlzcEVuZ2luZUNsa0ZyZXE7IC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAvL1dhcyB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01pbkFsbG93ZWRCTF9MZXZlbDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0Jvb3RVcFZERENWb2x0YWdlOyAgICAgICAgLy9JbiBNViB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNMY2RNaW5QaXhlbENsb2NrUExMX091dHB1dDsgLy8gSW4gTUh6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0xjZE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAvLyBJbiBNSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAvL1dhcyB1bEFzaWNNYXhpbXVtVm9sdGFnZQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhFbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhNZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2s7ICAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0LCBNYXguICBQY2xrCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0IC0gbG93ZXIgMTZiaXQgb2YgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dAorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQ29yZVJlZmVyZW5jZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNZW1vcnlSZWZlcmVuY2VDbG9jazsgICAgIC8vSW4gMTBLaHogdW5pdAkKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1VuaXBoeURQTW9kZUV4dENsa0ZyZXE7ICAgLy9JbiAxMEtoeiB1bml0LCBpZiBpdCBpcyAwLCBJbiBEUCBNb2RlIFVuaXBoeSBJbnB1dCBjbG9jayBmcm9tIGludGVybmFsIFBQTEwsIG90aGVyd2lzZSBJbnB1dCBjbG9jayBmcm9tIGV4dGVybmFsIFNwcmVhZCBjbG9jaworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5TW9kdWxlX0lEOyAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWQ0WzNdOworfUFUT01fRklSTVdBUkVfSU5GT19WMl8xOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgaW4gSW50ZWdyYXRlZFN5c3RlbUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVRPTV9GSVJNV0FSRV9JTkZPX0xBU1QgIEFUT01fRklSTVdBUkVfSU5GT19WMl8xCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBpbiBJbnRlZ3JhdGVkU3lzdGVtSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAjZGVmaW5lIElHUF9DQVBfRkxBR19EWU5BTUlDX0NMT0NLX0VOICAgICAgMHgyCiAjZGVmaW5lIElHUF9DQVBfRkxBR19BQ19DQVJEICAgICAgICAgICAgICAgMHg0CiAjZGVmaW5lIElHUF9DQVBfRkxBR19TRFZPX0NBUkQgICAgICAgICAgICAgMHg4CiAjZGVmaW5lIElHUF9DQVBfRkxBR19QT1NURElWX0JZXzJfTU9ERSAgICAgMHgxMAogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVTE9ORyB1bEJvb3RVcEVuZ2luZUNsb2NrOwkvKiBpbiAxMGtIeiB1bml0ICovCi0JVUxPTkcgdWxCb290VXBNZW1vcnlDbG9jazsJLyogaW4gMTBrSHogdW5pdCAqLwotCVVMT05HIHVsTWF4U3lzdGVtTWVtb3J5Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bE1pblN5c3RlbU1lbW9yeUNsb2NrOwkvKiBpbiAxMGtIeiB1bml0ICovCi0JVUNIQVIgdWNOdW1iZXJPZkN5Y2xlc0luUGVyaW9kSGk7Ci0JVUNIQVIgdWNMQ0RUaW1pbmdTZWw7CS8qID0wOm5vdCB2YWxpZC4hPTAgc2VsIHRoaXMgdGltaW5nIGRlc2NyaXB0b3IgZnJvbSBMQ0QgRURJRC4gKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDE7Ci0JVVNIT1JUIHVzSW50ZXJOQlZvbHRhZ2VMb3c7CS8qIEFuIGludGVybWlkaWF0ZSBQTVcgdmFsdWUgdG8gc2V0IHRoZSB2b2x0YWdlICovCi0JVVNIT1JUIHVzSW50ZXJOQlZvbHRhZ2VIaWdoOwkvKiBBbm90aGVyIGludGVybWlkaWF0ZSBQTVcgdmFsdWUgdG8gc2V0IHRoZSB2b2x0YWdlICovCi0JVUxPTkcgdWxSZXNlcnZlZFsyXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgICAgICBzSGVhZGVyOyAKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgICAgICB1bEJvb3RVcEVuZ2luZUNsb2NrOwkJICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwTWVtb3J5Q2xvY2s7CQkgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhTeXN0ZW1NZW1vcnlDbG9jazsJICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluU3lzdGVtTWVtb3J5Q2xvY2s7CSAgICAvL2luIDEwa0h6IHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bWJlck9mQ3ljbGVzSW5QZXJpb2RIaTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0xDRFRpbWluZ1NlbDsgICAgICAgICAgICAgLy89MDpub3QgdmFsaWQuIT0wIHNlbCB0aGlzIHRpbWluZyBkZXNjcmlwdG9yIGZyb20gTENEIEVESUQuCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNSZXNlcnZlZDE7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNJbnRlck5CVm9sdGFnZUxvdzsgICAgICAgIC8vQW4gaW50ZXJtaWRpYXRlIFBNVyB2YWx1ZSB0byBzZXQgdGhlIHZvbHRhZ2UgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNJbnRlck5CVm9sdGFnZUhpZ2g7ICAgICAgIC8vQW5vdGhlciBpbnRlcm1pZGlhdGUgUE1XIHZhbHVlIHRvIHNldCB0aGUgdm9sdGFnZSAKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkWzJdOwogCi0JVVNIT1JUIHVzRlNCQ2xvY2s7CS8qIEluIE1IeiB1bml0ICovCi0JVVNIT1JUIHVzQ2FwYWJpbGl0eUZsYWc7CS8qIEJpdDA9MSBpbmRpY2F0ZXMgdGhlIGZha2UgSERNSSBzdXBwb3J0LEJpdDE9MC8xIGZvciBEeW5hbWljIGNsb2NraW5nIGRpcy9lbmFibGUgKi8KLQkvKiBCaXRbMzoyXT09IDA6Tm8gUENJRSBjYXJkLCAxOkFDIGNhcmQsIDI6U0RWTyBjYXJkICovCi0JLyogQml0WzRdPT0xOiBQLzIgbW9kZSwgPT0wOiBQLzEgbW9kZSAqLwotCVVTSE9SVCB1c1BDSUVOQkNmZ1JlZzc7CS8qIGJpdFs3OjBdPU1VWF9TZWwsIGJpdFs5OjhdPU1VWF9TRUxfTEVWRUwyLCBiaXRbMTBdPUxhbmVfUmV2ZXJzYWwgKi8KLQlVU0hPUlQgdXNLOE1lbW9yeUNsb2NrOwkvKiBpbiBNSHogdW5pdCAqLwotCVVTSE9SVCB1c0s4U3luY1N0YXJ0RGVsYXk7CS8qIGluIDAuMDEgdXMgdW5pdCAqLwotCVVTSE9SVCB1c0s4RGF0YVJldHVyblRpbWU7CS8qIGluIDAuMDEgdXMgdW5pdCAqLwotCVVDSEFSIHVjTWF4TkJWb2x0YWdlOwotCVVDSEFSIHVjTWluTkJWb2x0YWdlOwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogWzc6NF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bMzowXSBpcyByZXNlcnZlZCAqLwotCVVDSEFSIHVjTnVtYmVyT2ZDeWNsZXNJblBlcmlvZDsJLyogQ0cuRlZUSFJPVF9QV01fQ1RSTF9SRUcwLk51bWJlck9mQ3ljbGVzSW5QZXJpb2QgKi8KLQlVQ0hBUiB1Y1N0YXJ0aW5nUFdNX0hpZ2hUaW1lOwkvKiBDRy5GVlRIUk9UX1BXTV9DVFJMX1JFRzAuU3RhcnRpbmdQV01fSGlnaFRpbWUgKi8KLQlVQ0hBUiB1Y0hUTGlua1dpZHRoOwkvKiAxNiBiaXQgdnMuIDggYml0ICovCi0JVUNIQVIgdWNNYXhOQlZvbHRhZ2VIaWdoOwotCVVDSEFSIHVjTWluTkJWb2x0YWdlSGlnaDsKLX0gQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPOworICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNGU0JDbG9jazsJCQkgICAgICAgICAgICAvL0luIE1IeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDYXBhYmlsaXR5RmxhZzsJCSAgICAgICAgLy9CaXQwPTEgaW5kaWNhdGVzIHRoZSBmYWtlIEhETUkgc3VwcG9ydCxCaXQxPTAvMSBmb3IgRHluYW1pYyBjbG9ja2luZyBkaXMvZW5hYmxlCisJCQkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9CaXRbMzoyXT09IDA6Tm8gUENJRSBjYXJkLCAxOkFDIGNhcmQsIDI6U0RWTyBjYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQml0WzRdPT0xOiBQLzIgbW9kZSwgPT0wOiBQLzEgbW9kZQorICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNQQ0lFTkJDZmdSZWc3OwkJCQkgICAgLy9iaXRbNzowXT1NVVhfU2VsLCBiaXRbOTo4XT1NVVhfU0VMX0xFVkVMMiwgYml0WzEwXT1MYW5lX1JldmVyc2FsCisgIFVTSE9SVAkgICAgICAgICAgICAgICAgICAgICAgICB1c0s4TWVtb3J5Q2xvY2s7ICAgICAgICAgICAgLy9pbiBNSHogdW5pdAorICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNLOFN5bmNTdGFydERlbGF5OyAgICAgICAgIC8vaW4gMC4wMSB1cyB1bml0CisgIFVTSE9SVAkgICAgICAgICAgICAgICAgICAgICAgICB1c0s4RGF0YVJldHVyblRpbWU7ICAgICAgICAgLy9pbiAwLjAxIHVzIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01heE5CVm9sdGFnZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01pbk5CVm9sdGFnZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeVR5cGU7CQkJCQkgICAgICAvL1s3OjRdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzM6MF0gaXMgcmVzZXJ2ZWQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7CQkvL0NHLkZWVEhST1RfUFdNX0NUUkxfUkVHMC5OdW1iZXJPZkN5Y2xlc0luUGVyaW9kIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjU3RhcnRpbmdQV01fSGlnaFRpbWU7ICAgICAvL0NHLkZWVEhST1RfUFdNX0NUUkxfUkVHMC5TdGFydGluZ1BXTV9IaWdoVGltZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjSFRMaW5rV2lkdGg7ICAgICAgICAgICAgICAvLzE2IGJpdCB2cy4gOCBiaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01heE5CVm9sdGFnZUhpZ2g7ICAgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluTkJWb2x0YWdlSGlnaDsKK31BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk87CiAKIC8qIEV4cGxhbmF0aW9uIG9uIGVudHJpZXMgaW4gQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPCi11bEJvb3RVcE1lbW9yeUNsb2NrOiAgICBGb3IgSW50ZWwgSUdQLGl0J3MgdGhlIFVNQSBzeXN0ZW0gbWVtb3J5IGNsb2NrCit1bEJvb3RVcE1lbW9yeUNsb2NrOiAgICBGb3IgSW50ZWwgSUdQLGl0J3MgdGhlIFVNQSBzeXN0ZW0gbWVtb3J5IGNsb2NrIAogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFNRCBJR1AsaXQncyAwIGlmIG5vIFNpZGVQb3J0IG1lbW9yeSBpbnN0YWxsZWQgb3IgaXQncyB0aGUgYm9vdC11cCBTaWRlUG9ydCBtZW1vcnkgY2xvY2sKIHVsTWF4U3lzdGVtTWVtb3J5Q2xvY2s6IEZvciBJbnRlbCBJR1AsaXQncyB0aGUgTWF4IGZyZXEgZnJvbSBtZW1vcnkgU1BEIGlmIG1lbW9yeSBydW5zIGluIEFTWU5DIG1vZGUgb3Igb3RoZXJ3aXNlIChTWU5DIG1vZGUpIGl0J3MgMAogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFNRCBJR1AsZm9yIG5vdyB0aGlzIGNhbiBiZSAwCi11bE1pblN5c3RlbU1lbW9yeUNsb2NrOiBGb3IgSW50ZWwgSUdQLGl0J3MgMTMzTUh6IGlmIG1lbW9yeSBydW5zIGluIEFTWU5DIG1vZGUgb3Igb3RoZXJ3aXNlIChTWU5DIG1vZGUpIGl0J3MgMAordWxNaW5TeXN0ZW1NZW1vcnlDbG9jazogRm9yIEludGVsIElHUCxpdCdzIDEzM01IeiBpZiBtZW1vcnkgcnVucyBpbiBBU1lOQyBtb2RlIG9yIG90aGVyd2lzZSAoU1lOQyBtb2RlKSBpdCdzIDAgCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQU1EIElHUCxmb3Igbm93IHRoaXMgY2FuIGJlIDAKIAotdXNGU0JDbG9jazogICAgICAgICAgICAgRm9yIEludGVsIElHUCxpdCdzIEZTQiBGcmVxCit1c0ZTQkNsb2NrOiAgICAgICAgICAgICBGb3IgSW50ZWwgSUdQLGl0J3MgRlNCIEZyZXEgCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQU1EIElHUCxpdCdzIEhUIExpbmsgU3BlZWQKIAogdXNLOE1lbW9yeUNsb2NrOiAgICAgICAgRm9yIEFNRCBJR1Agb25seS4gRm9yIFJldkYgQ1BVLCBzZXQgaXQgdG8gMjAwCkBAIC0xNjg3LDk4ICsyMDkzLDExMyBAQAogdWNNYXhOQlZvbHRhZ2U6ICAgICAgICAgVm9sdGFnZSByZWd1bGF0b3IgZGVwZW5kZW50IFBXTSB2YWx1ZS4gTG93IDggYml0cyBvZiB0aGUgdmFsdWUgZm9yIHRoZSBtYXggdm9sdGFnZS5TZXQgdGhpcyBvbmUgdG8gMHhGRiBpZiBWQyB3aXRob3V0IFBXTS4gU2V0IHRoaXMgdG8gMHgwIGlmIG5vIFZDIGF0IGFsbC4KIHVjTWluTkJWb2x0YWdlOiAgICAgICAgIFZvbHRhZ2UgcmVndWxhdG9yIGRlcGVuZGVudCBQV00gdmFsdWUuIExvdyA4IGJpdHMgb2YgdGhlIHZhbHVlIGZvciB0aGUgbWluIHZvbHRhZ2UuU2V0IHRoaXMgb25lIHRvIDB4MDAgaWYgVkMgd2l0aG91dCBQV00gb3Igbm8gVkMgYXQgYWxsLgogCi11Y051bWJlck9mQ3ljbGVzSW5QZXJpb2Q6ICAgSW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4gbG93IDggYml0cyBvZiB0aGUgdmFsdWUuCi11Y051bWJlck9mQ3ljbGVzSW5QZXJpb2RIaTogSW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4gaGlnaCA4IGJpdHMgb2YgdGhlIHZhbHVlLklmIHRoZSBQV00gaGFzIGFuIGludmVydGVyLHNldCBiaXQgWzddPT0xLG90aGVyd2lzZSBzZXQgaXQgMAordWNOdW1iZXJPZkN5Y2xlc0luUGVyaW9kOiAgIEluZGljYXRlIGhvdyBtYW55IGN5Y2xlcyB3aGVuIFBXTSBkdXR5IGlzIDEwMCUuIGxvdyA4IGJpdHMgb2YgdGhlIHZhbHVlLiAKK3VjTnVtYmVyT2ZDeWNsZXNJblBlcmlvZEhpOiBJbmRpY2F0ZSBob3cgbWFueSBjeWNsZXMgd2hlbiBQV00gZHV0eSBpcyAxMDAlLiBoaWdoIDggYml0cyBvZiB0aGUgdmFsdWUuSWYgdGhlIFBXTSBoYXMgYW4gaW52ZXJ0ZXIsc2V0IGJpdCBbN109PTEsb3RoZXJ3aXNlIHNldCBpdCAwIAogCiB1Y01heE5CVm9sdGFnZUhpZ2g6ICAgICBWb2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLiBIaWdoIDggYml0cyBvZiAgdGhlIHZhbHVlIGZvciB0aGUgbWF4IHZvbHRhZ2UuU2V0IHRoaXMgb25lIHRvIDB4RkYgaWYgVkMgd2l0aG91dCBQV00uIFNldCB0aGlzIHRvIDB4MCBpZiBubyBWQyBhdCBhbGwuCiB1Y01pbk5CVm9sdGFnZUhpZ2g6ICAgICBWb2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLiBIaWdoIDggYml0cyBvZiB0aGUgdmFsdWUgZm9yIHRoZSBtaW4gdm9sdGFnZS5TZXQgdGhpcyBvbmUgdG8gMHgwMCBpZiBWQyB3aXRob3V0IFBXTSBvciBubyBWQyBhdCBhbGwuCiAKKwogdXNJbnRlck5CVm9sdGFnZUxvdzogICAgVm9sdGFnZSByZWd1bGF0b3IgZGVwZW5kZW50IFBXTSB2YWx1ZS4gVGhlIHZhbHVlIG1ha2VzIHRoZSB0aGUgdm9sdGFnZSA+PU1pbiBOQiB2b2x0YWdlIGJ1dCA8PUludGVyTkJWb2x0YWdlSGlnaC4gU2V0IHRoaXMgdG8gMHgwMDAwIGlmIFZDIHdpdGhvdXQgUFdNIG9yIG5vIFZDIGF0IGFsbC4KIHVzSW50ZXJOQlZvbHRhZ2VIaWdoOiAgIFZvbHRhZ2UgcmVndWxhdG9yIGRlcGVuZGVudCBQV00gdmFsdWUuIFRoZSB2YWx1ZSBtYWtlcyB0aGUgdGhlIHZvbHRhZ2UgPj1JbnRlck5CVm9sdGFnZUxvdyBidXQgPD1NYXggTkIgdm9sdGFnZS5TZXQgdGhpcyB0byAweDAwMDAgaWYgVkMgd2l0aG91dCBQV00gb3Igbm8gVkMgYXQgYWxsLgogKi8KIAorCiAvKgogVGhlIGZvbGxvd2luZyBJR1AgdGFibGUgaXMgaW50cm9kdWNlZCBmcm9tIFJTNzgwLCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBwdXQgYnkgU0JJT1MgaW4gRkIgYmVmb3JlIElHUCBWQklPUyBzdGFydHMgVlBPU1Q7Ci1UaGVuIFZCSU9TIHdpbGwgY29weSB0aGUgd2hvbGUgc3RydWN0dXJlIHRvIGl0cyBpbWFnZSBzbyBhbGwgR1BVIFNXIGNvbXBvbmVudHMgY2FuIGFjY2VzcyB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGdldCB3aGF0ZXZlciB0aGV5IG5lZWQuCitUaGVuIFZCSU9TIHdpbGwgY29weSB0aGUgd2hvbGUgc3RydWN0dXJlIHRvIGl0cyBpbWFnZSBzbyBhbGwgR1BVIFNXIGNvbXBvbmVudHMgY2FuIGFjY2VzcyB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGdldCB3aGF0ZXZlciB0aGV5IG5lZWQuIAogVGhlIGVub3VnaCByZXNlcnZhdGlvbiBzaG91bGQgYWxsb3cgdXMgdG8gbmV2ZXIgY2hhbmdlIHRhYmxlIHJldmlzaW9ucy4gV2hlbmV2ZXIgbmVlZGVkLCBhIEdQVSBTVyBjb21wb25lbnQgY2FuIHVzZSByZXNlcnZlZCBwb3J0aW9uIGZvciBuZXcgZGF0YSBlbnRyaWVzLgogCiBTVyBjb21wb25lbnRzIGNhbiBhY2Nlc3MgdGhlIElHUCBzeXN0ZW0gaW5mb3Igc3RydWN0dXJlIGluIHRoZSBzYW1lIHdheSBhcyBiZWZvcmUKICovCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsQm9vdFVwRW5naW5lQ2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bFJlc2VydmVkMVsyXTsJLyogbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZCAqLwotCVVMT05HIHVsQm9vdFVwVU1BQ2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bEJvb3RVcFNpZGVQb3J0Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bE1pblNpZGVQb3J0Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bFJlc2VydmVkMls2XTsJLyogbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZCAqLwotCVVMT05HIHVsU3lzdGVtQ29uZmlnOwkvKiBzZWUgZXhwbGFuYXRpb24gYmVsb3cgKi8KLQlVTE9ORyB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7Ci0JVUxPTkcgdWxPdGhlckRpc3BsYXlNaXNjOwotCVVMT05HIHVsRERJU2xvdDFDb25maWc7Ci0JVUxPTkcgdWxERElTbG90MkNvbmZpZzsKLQlVQ0hBUiB1Y01lbW9yeVR5cGU7CS8qIFszOjBdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzc6NF0gaXMgcmVzZXJ2ZWQgKi8KLQlVQ0hBUiB1Y1VNQUNoYW5uZWxOdW1iZXI7Ci0JVUNIQVIgdWNEb2NraW5nUGluQml0OwotCVVDSEFSIHVjRG9ja2luZ1BpblBvbGFyaXR5OwotCVVMT05HIHVsRG9ja2luZ1BpbkNGR0luZm87Ci0JVUxPTkcgdWxDUFVDYXBJbmZvOwotCVVTSE9SVCB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7Ci0JVVNIT1JUIHVzTWF4TkJWb2x0YWdlOwotCVVTSE9SVCB1c01pbk5CVm9sdGFnZTsKLQlVU0hPUlQgdXNCb290VXBOQlZvbHRhZ2U7Ci0JVUxPTkcgdWxIVExpbmtGcmVxOwkvKiBpbiAxMEtoeiAqLwotCVVTSE9SVCB1c01pbkhUTGlua1dpZHRoOwotCVVTSE9SVCB1c01heEhUTGlua1dpZHRoOwotCVVTSE9SVCB1c1VNQVN5bmNTdGFydERlbGF5OwotCVVTSE9SVCB1c1VNQURhdGFSZXR1cm5UaW1lOwotCVVTSE9SVCB1c0xpbmtTdGF0dXNaZXJvVGltZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVTE9ORyB1bEhpZ2hWb2x0YWdlSFRMaW5rRnJlcTsJLyogIGluIDEwS2h6ICovCi0JVUxPTkcgdWxMb3dWb2x0YWdlSFRMaW5rRnJlcTsJLyogIGluIDEwS2h6ICovCi0JVVNIT1JUIHVzTWF4VXBTdHJlYW1IVExpbmtXaWR0aDsKLQlVU0hPUlQgdXNNYXhEb3duU3RyZWFtSFRMaW5rV2lkdGg7Ci0JVVNIT1JUIHVzTWluVXBTdHJlYW1IVExpbmtXaWR0aDsKLQlVU0hPUlQgdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg7Ci0JVUxPTkcgdWxSZXNlcnZlZDNbOTddOwkvKiBtdXN0IGJlIDB4MCAqLwotfSBBVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjI7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBFbmdpbmVDbG9jazsgICAgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCQkJICAgICB1bFJlc2VydmVkMVsyXTsgICAgICAgICAgICAvL211c3QgYmUgMHgwIGZvciB0aGUgcmVzZXJ2ZWQKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBVTUFDbG9jazsgICAgICAgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwU2lkZVBvcnRDbG9jazsgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICB1bE1pblNpZGVQb3J0Q2xvY2s7ICAgICAgICAvL2luIDEwa0h6IHVuaXQKKyAgVUxPTkcJCQkgICAgIHVsUmVzZXJ2ZWQyWzZdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFN5c3RlbUNvbmZpZzsgICAgICAgICAgICAvL3NlZSBleHBsYW5hdGlvbiBiZWxvdworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsT3RoZXJEaXNwbGF5TWlzYzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MUNvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MkNvbmZpZzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlUeXBlOyAgICAgICAgICAgICAgLy9bMzowXT0xOkREUjE7PTI6RERSMjs9MzpERFIzLls3OjRdIGlzIHJlc2VydmVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjVU1BQ2hhbm5lbE51bWJlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEb2NraW5nUGluQml0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0RvY2tpbmdQaW5Qb2xhcml0eTsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxEb2NraW5nUGluQ0ZHSW5mbzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDUFVDYXBJbmZvOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWF4TkJWb2x0YWdlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01pbk5CVm9sdGFnZTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNCb290VXBOQlZvbHRhZ2U7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsSFRMaW5rRnJlcTsgICAgICAgICAgICAgIC8vaW4gMTBLaHoKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNaW5IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNYXhIVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNVTUFTeW5jU3RhcnREZWxheTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNVTUFEYXRhUmV0dXJuVGltZTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNMaW5rU3RhdHVzWmVyb1RpbWU7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzREFDRWZ1c2U7CQkJCS8vZm9yIHN0b3JpbmcgYmFkZ2FwIHZhbHVlIChmb3IgUlM4ODAgb25seSkKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxIaWdoVm9sdGFnZUhUTGlua0ZyZXE7ICAgICAvLyBpbiAxMEtoegorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bExvd1ZvbHRhZ2VIVExpbmtGcmVxOyAgICAgIC8vIGluIDEwS2h6CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWF4VXBTdHJlYW1IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNYXhEb3duU3RyZWFtSFRMaW5rV2lkdGg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWluVXBTdHJlYW1IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRmlybXdhcmVWZXJzaW9uOyAgICAgICAgIC8vMCBtZWFucyBGVyBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UgaXQncyB0aGUgRlcgdmVyc2lvbiBsb2FkZWQgYnkgU0JJT1MgYW5kIGRyaXZlciBzaG91bGQgZW5hYmxlIEZXLgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0Z1bGxUMFRpbWU7ICAgICAgICAgICAgIC8vIElucHV0IHRvIGNhbGN1bGF0ZSBtaW5pbXVtIEhUIGxpbmsgY2hhbmdlIHRpbWUgcmVxdWlyZWQgYnkgTkIgUC1TdGF0ZS4gVW5pdCBpcyAwLjAxdXMuCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQzWzk2XTsgICAgICAgICAgLy9tdXN0IGJlIDB4MAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WMjsgICAKIAogLyoKIHVsQm9vdFVwRW5naW5lQ2xvY2s6ICAgQm9vdC11cCBFbmdpbmUgQ2xvY2sgaW4gMTBLaHo7CiB1bEJvb3RVcFVNQUNsb2NrOiAgICAgIEJvb3QtdXAgVU1BIENsb2NrIGluIDEwS2h6OyBpdCBtdXN0IGJlIDB4MCB3aGVuIFVNQSBpcyBub3QgcHJlc2VudAogdWxCb290VXBTaWRlUG9ydENsb2NrOiBCb290LXVwIFNpZGVQb3J0IENsb2NrIGluIDEwS2h6OyBpdCBtdXN0IGJlIDB4MCB3aGVuIFNpZGVQb3J0IE1lbW9yeSBpcyBub3QgcHJlc2VudCx0aGlzIGNvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCBTaWRlcG9ydCBtZW1vcnkgY2xvY2sKIAotdWxTeXN0ZW1Db25maWc6Ci1CaXRbMF09MTogUG93ZXJFeHByZXNzIG1vZGUgPTAgTm9uLVBvd2VyRXhwcmVzcyBtb2RlOwordWxTeXN0ZW1Db25maWc6ICAKK0JpdFswXT0xOiBQb3dlckV4cHJlc3MgbW9kZSA9MCBOb24tUG93ZXJFeHByZXNzIG1vZGU7IAogQml0WzFdPTE6IHN5c3RlbSBib290cyB1cCBhdCBBTUQgb3ZlcmRyaXZlZCBzdGF0ZSBvciB1c2VyIGN1c3RvbWl6ZWQgIG1vZGUuIEluIHRoaXMgY2FzZSwgZHJpdmVyIHdpbGwganVzdCBzdGljayB0byB0aGlzIGJvb3QtdXAgbW9kZS4gTm8gb3RoZXIgUG93ZXJQbGF5IHN0YXRlCiAgICAgICA9MDogc3lzdGVtIGJvb3RzIHVwIGF0IGRyaXZlciBjb250cm9sIHN0YXRlLiBQb3dlciBzdGF0ZSBkZXBlbmRzIG9uIFBvd2VyUGxheSB0YWJsZS4KIEJpdFsyXT0xOiBQV00gbWV0aG9kIGlzIHVzZWQgb24gTkIgdm9sdGFnZSBjb250cm9sLiA9MDogR1BJTyBtZXRob2QgaXMgdXNlZC4KIEJpdFszXT0xOiBPbmx5IG9uZSBwb3dlciBzdGF0ZShQZXJmb3JtYW5jZSkgd2lsbCBiZSBzdXBwb3J0ZWQuCiAgICAgICA9MDogTXVsdGlwbGUgcG93ZXIgc3RhdGVzIHN1cHBvcnRlZCBmcm9tIFBvd2VyUGxheSB0YWJsZS4KLUJpdFs0XT0xOiBDTE1DIGlzIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBvbiBjdXJyZW50IHN5c3RlbS4KLSAgICAgID0wOiBDTE1DIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCBvbiBjdXJyZW50IHN5c3RlbS4gU0JJT1MgbmVlZCB0byBzdXBwb3J0IEhUIGxpbmsvZnJlcSBjaGFuZ2UgdGhyb3VnaCBBVElGIGludGVyZmFjZS4KLUJpdFs1XT0xOiBFbmFibGUgQ0RMVyBmb3IgYWxsIGRyaXZlciBjb250cm9sIHBvd2VyIHN0YXRlcy4gTWF4IEhUIHdpZHRoIGlzIGZyb20gU0JJT1MsIHdoaWxlIE1pbiBIVCB3aWR0aCBpcyBkZXRlcm1pbmVkIGJ5IGRpc3BsYXkgcmVxdWlyZW1lbnQuCitCaXRbNF09MTogQ0xNQyBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uIAorICAgICAgPTA6IENMTUMgaXMgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkIG9uIGN1cnJlbnQgc3lzdGVtLiBTQklPUyBuZWVkIHRvIHN1cHBvcnQgSFQgbGluay9mcmVxIGNoYW5nZSB0aHJvdWdoIEFUSUYgaW50ZXJmYWNlLiAgCitCaXRbNV09MTogRW5hYmxlIENETFcgZm9yIGFsbCBkcml2ZXIgY29udHJvbCBwb3dlciBzdGF0ZXMuIE1heCBIVCB3aWR0aCBpcyBmcm9tIFNCSU9TLCB3aGlsZSBNaW4gSFQgd2lkdGggaXMgZGV0ZXJtaW5lZCBieSBkaXNwbGF5IHJlcXVpcmVtZW50LiAgCiAgICAgICA9MDogQ0RMVyBpcyBkaXNhYmxlZC4gSWYgQ0xNQyBpcyBlbmFibGVkIGNhc2UsIE1pbiBIVCB3aWR0aCB3aWxsIGJlIHNldCBlcXVhbCB0byBNYXggSFQgd2lkdGguIElmIENMTUMgZGlzYWJsZWQgY2FzZSwgTWF4IEhUIHdpZHRoIHdpbGwgYmUgYXBwbGllZC4KIEJpdFs2XT0xOiBIaWdoIFZvbHRhZ2UgcmVxdWVzdGVkIGZvciBhbGwgcG93ZXIgc3RhdGVzLiBJbiB0aGlzIGNhc2UsIHZvbHRhZ2Ugd2lsbCBiZSBmb3JjZWQgYXQgMS4xdiBhbmQgcG93ZXJwbGF5IHRhYmxlIHZvbHRhZ2UgZHJvcC90aHJvdHRsaW5nIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkLgogICAgICAgPTA6IFZvbHRhZ2Ugc2V0dGluZ3MgaXMgZGV0ZXJtaW5lZCBieSBwb3dlcnBsYXkgdGFibGUuCiBCaXRbN109MTogRW5hYmxlIENMTUMgYXMgaHlicmlkIE1vZGUuIENETEQgYW5kIENJTFIgd2lsbCBiZSBkaXNhYmxlZCBpbiB0aGlzIGNhc2UgYW5kIHdlJ3JlIHVzaW5nIGxlZ2FjeSBDMUUuIFRoaXMgaXMgd29ya2Fyb3VuZCBmb3IgQ1BVKEdyaWZmaW4pIHBlcmZvcm1hbmNlIGlzc3VlLgogICAgICAgPTA6IEVuYWJsZSBDTE1DIGFzIHJlZ3VsYXIgbW9kZSwgQ0RMRCBhbmQgQ0lMUiB3aWxsIGJlIGVuYWJsZWQuCitCaXRbOF09MTogQ0RMRiBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCisgICAgICA9MDogQ0RMRiBpcyBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCitCaXRbOV09MTogRExMIFNodXQgRG93biBmZWF0dXJlIGlzIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCisgICAgICA9MDogRExMIFNodXQgRG93biBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIG9yIHN1cHBvcnRlZCBvbiBjdXJyZW50IHN5c3RlbS4KIAogdWxCb290VXBSZXFEaXNwbGF5VmVjdG9yOiBUaGlzIGR3b3JkIGlzIGEgYml0IHZlY3RvciBpbmRpY2F0ZXMgd2hhdCBkaXNwbGF5IGRldmljZXMgYXJlIHJlcXVlc3RlZCBkdXJpbmcgYm9vdC11cC4gUmVmZXIgdG8gQVRPTV9ERVZJQ0VfeHh4X1NVUFBPUlQgZm9yIHRoZSBiaXQgdmVjdG9yIGRlZmluaXRpb25zLgogCiB1bE90aGVyRGlzcGxheU1pc2M6IFsxNTo4XS0gQm9vdHVwIExDRCBFeHBhbnNpb24gc2VsZWN0aW9uOyAwLWNlbnRlciwgMS1mdWxsIHBhbmVsIHNpemUgZXhwYW5zaW9uOwotCQkJICAgICAgICAgICAgICBbNzowXSAtIEJvb3R1cFRWIHN0YW5kYXJkIHNlbGVjdGlvbjsgVGhpcyBpcyBhIGJpdCB2ZWN0b3IgdG8gaW5kaWNhdGUgd2hhdCBUViBzdGFuZGFyZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLiBSZWZlciB0byB1Y1RWU3VwcHBvcnRlZFN0ZCBkZWZpbml0aW9uOworCQkJICAgICAgICAgICAgICBbNzowXSAtIEJvb3R1cFRWIHN0YW5kYXJkIHNlbGVjdGlvbjsgVGhpcyBpcyBhIGJpdCB2ZWN0b3IgdG8gaW5kaWNhdGUgd2hhdCBUViBzdGFuZGFyZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLiBSZWZlciB0byB1Y1RWU3VwcG9ydGVkU3RkIGRlZmluaXRpb247CiAKIHVsRERJU2xvdDFDb25maWc6IERlc2NyaWJlcyB0aGUgUENJRSBsYW5lIGNvbmZpZ3VyYXRpb24gb24gdGhpcyBEREkgUENJRSBzbG90IChBREQyIGNhcmQpIG9yIGNvbm5lY3RvciAoTW9iaWxlIGRlc2lnbikuCiAgICAgICBbMzowXSAgLSBCaXQgdmVjdG9yIHRvIGluZGljYXRlIFBDSUUgbGFuZSBjb25maWcgb2YgdGhlIERESSBzbG90L2Nvbm5lY3RvciBvbiBjaGFzc2lzIChiaXQgMD0xIGxhbmUgMzowOyBiaXQgMT0xIGxhbmUgNzo0OyBiaXQgMj0xIGxhbmUgMTE6ODsgYml0IDM9MSBsYW5lIDE1OjEyKQotCQkJWzc6NF0gIC0gQml0IHZlY3RvciB0byBpbmRpY2F0ZSBQQ0lFIGxhbmUgY29uZmlnIG9mIHRoZSBzYW1lIERESSBzbG90L2Nvbm5lY3RvciBvbiBkb2NraW5nIHN0YXRpb24gKGJpdCAwPTEgbGFuZSAzOjA7IGJpdCAxPTEgbGFuZSA3OjQ7IGJpdCAyPTEgbGFuZSAxMTo4OyBiaXQgMz0xIGxhbmUgMTU6MTIpCi0JCQlbMTU6OF0gLSBMYW5lIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlOworCQkJWzc6NF0gIC0gQml0IHZlY3RvciB0byBpbmRpY2F0ZSBQQ0lFIGxhbmUgY29uZmlnIG9mIHRoZSBzYW1lIERESSBzbG90L2Nvbm5lY3RvciBvbiBkb2NraW5nIHN0YXRpb24gKGJpdCA0PTEgbGFuZSAzOjA7IGJpdCA1PTEgbGFuZSA3OjQ7IGJpdCA2PTEgbGFuZSAxMTo4OyBiaXQgNz0xIGxhbmUgMTU6MTIpCisgICAgICBXaGVuIGEgRERJIGNvbm5lY3RvciBpcyBub3QgInBhaXJlZCIgKG1lYW1pbmcgdHdvIGNvbm5lY3Rpb25zIG11dHVhbGV4Y2x1c2l2ZSBvbiBjaGFzc2lzIG9yIGRvY2tpbmcsIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbm5lY3RlZCBhdCBvbmUgdGltZS4KKyAgICAgIGluIGJvdGggY2hhc3NpcyBhbmQgZG9ja2luZywgU0JJT1MgaGFzIHRvIGR1cGxpY2F0ZSB0aGUgc2FtZSBQQ0lFIGxhbmUgaW5mbyBmcm9tIGNoYXNzaXMgdG8gZG9ja2luZyBvciB2aWNlIHZlcnNhLiBGb3IgZXhhbXBsZToKKyAgICAgIG9uZSBEREkgY29ubmVjdG9yIGlzIG9ubHkgcG9wdWxhdGVkIGluIGRvY2tpbmcgd2l0aCBQQ0lFIGxhbmUgOC0xMSwgYnV0IHRoZXJlIGlzIG5vIHBhaXJlZCBjb25uZWN0aW9uIG9uIGNoYXNzaXMsIFNCSU9TIGhhcyB0byBjb3B5IGJpdCA2IHRvIGJpdCAyLgorCisJCQlbMTU6OF0gLSBMYW5lIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlOyAKICAgICAgIFsyMzoxNl0tIENvbm5lY3RvciB0eXBlLCBwb3NzaWJsZSB2YWx1ZToKICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QKICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9ECiAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9BCiAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUCisgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUAogCQkJWzMxOjI0XS0gUmVzZXJ2ZWQKIAogdWxERElTbG90MkNvbmZpZzogU2FtZSBhcyBTbG90MS4KQEAgLTE3ODcsMjkgKzIyMDgsMzEgQEAKIAogdWNVTUFDaGFubmVsTnVtYmVyOiAgaG93IG1hbnkgY2hhbm5lbHMgZm9yIHRoZSBVTUE7CiAKLXVsRG9ja2luZ1BpbkNGR0luZm86IFsxNTowXS1CdXMvRGV2aWNlL0Z1bmN0aW9uICMgdG8gQ0ZHIHRvIHJlYWQgdGhpcyBEb2NraW5nIFBpbjsgWzMxOjE2XS1yZWcgb2Zmc2V0IGluIENGRyB0byByZWFkIHRoaXMgcGluCit1bERvY2tpbmdQaW5DRkdJbmZvOiBbMTU6MF0tQnVzL0RldmljZS9GdW5jdGlvbiAjIHRvIENGRyB0byByZWFkIHRoaXMgRG9ja2luZyBQaW47IFszMToxNl0tcmVnIG9mZnNldCBpbiBDRkcgdG8gcmVhZCB0aGlzIHBpbiAKIHVjRG9ja2luZ1BpbkJpdDogICAgIHdoaWNoIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHRvIHJlYWQgdGhlIHBpbiBzdGF0dXM7CiB1Y0RvY2tpbmdQaW5Qb2xhcml0eTpQb2xhcml0eSBvZiB0aGUgcGluIHdoZW4gZG9ja2VkOwogCiB1bENQVUNhcEluZm86ICAgICAgICBbNzowXT0xOkdyaWZmaW47Wzc6MF09MjpHcmV5aG91bmQ7Wzc6MF09MzpLOCwgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igbm93IGFuZCBtdXN0IGJlIDB4MAogCiB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q6SW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4KLXVzTWF4TkJWb2x0YWdlOk1heC4gdm9sdGFnZSBjb250cm9sIHZhbHVlIGluIGVpdGhlciBQV00gb3IgR1BJTyBtb2RlLgorCit1c01heE5CVm9sdGFnZTpNYXguIHZvbHRhZ2UgY29udHJvbCB2YWx1ZSBpbiBlaXRoZXIgUFdNIG9yIEdQSU8gbW9kZS4gCiB1c01pbk5CVm9sdGFnZTpNaW4uIHZvbHRhZ2UgY29udHJvbCB2YWx1ZSBpbiBlaXRoZXIgUFdNIG9yIEdQSU8gbW9kZS4KICAgICAgICAgICAgICAgICAgICAgR1BJTyBtb2RlOiBib3RoIHVzTWF4TkJWb2x0YWdlICYgdXNNaW5OQlZvbHRhZ2UgaGF2ZSBhIHZhbGlkIHZhbHVlIHVsU3lzdGVtQ29uZmlnLlNZU1RFTV9DT05GSUdfVVNFX1BXTV9PTl9WT0xUQUdFPTAKICAgICAgICAgICAgICAgICAgICAgUFdNIG1vZGU6IGJvdGggdXNNYXhOQlZvbHRhZ2UgJiB1c01pbk5CVm9sdGFnZSBoYXZlIGEgdmFsaWQgdmFsdWUgdWxTeXN0ZW1Db25maWcuU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0U9MQogICAgICAgICAgICAgICAgICAgICBHUFUgU1cgZG9uJ3QgY29udHJvbCBtb2RlOiB1c01heE5CVm9sdGFnZSAmIHVzTWluTkJWb2x0YWdlPTAgYW5kIG5vIGNhcmUgYWJvdXQgdWxTeXN0ZW1Db25maWcuU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0UKKwogdXNCb290VXBOQlZvbHRhZ2U6Qm9vdC11cCB2b2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLgogCiB1bEhUTGlua0ZyZXE6ICAgICAgIEJvb3R1cCBIVCBsaW5rIEZyZXF1ZW5jeSBpbiAxMEtoei4KLXVzTWluSFRMaW5rV2lkdGg6ICAgQm9vdHVwIG1pbmltdW0gSFQgbGluayB3aWR0aC4gSWYgQ0RMVyBkaXNhYmxlZCwgdGhpcyBpcyBlcXVhbCB0byB1c01heEhUTGlua1dpZHRoLgordXNNaW5IVExpbmtXaWR0aDogICBCb290dXAgbWluaW11bSBIVCBsaW5rIHdpZHRoLiBJZiBDRExXIGRpc2FibGVkLCB0aGlzIGlzIGVxdWFsIHRvIHVzTWF4SFRMaW5rV2lkdGguIAogICAgICAgICAgICAgICAgICAgICBJZiBDRExXIGVuYWJsZWQsIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gd2lkdGggc2hvdWxkIGJlIHRoZSBzYW1lIGR1cmluZyBib290dXAuCi11c01heEhUTGlua1dpZHRoOiAgIEJvb3R1cCBtYXhpbXVtIEhUIGxpbmsgd2lkdGguIElmIENETFcgZGlzYWJsZWQsIHRoaXMgaXMgZXF1YWwgdG8gdXNNaW5IVExpbmtXaWR0aC4KLSAgICAgICAgICAgICAgICAgICAgSWYgQ0RMVyBlbmFibGVkLCBib3RoIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIHdpZHRoIHNob3VsZCBiZSB0aGUgc2FtZSBkdXJpbmcgYm9vdHVwLgordXNNYXhIVExpbmtXaWR0aDogICBCb290dXAgbWF4aW11bSBIVCBsaW5rIHdpZHRoLiBJZiBDRExXIGRpc2FibGVkLCB0aGlzIGlzIGVxdWFsIHRvIHVzTWluSFRMaW5rV2lkdGguIAorICAgICAgICAgICAgICAgICAgICBJZiBDRExXIGVuYWJsZWQsIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gd2lkdGggc2hvdWxkIGJlIHRoZSBzYW1lIGR1cmluZyBib290dXAuICAKIAotdXNVTUFTeW5jU3RhcnREZWxheTogTWVtb3J5IGFjY2VzcyBsYXRlbmN5LCByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uCit1c1VNQVN5bmNTdGFydERlbGF5OiBNZW1vcnkgYWNjZXNzIGxhdGVuY3ksIHJlcXVpcmVkIGZvciB3YXRlcm1hcmsgY2FsY3VsYXRpb24gCiB1c1VNQURhdGFSZXR1cm5UaW1lOiBNZW1vcnkgYWNjZXNzIGxhdGVuY3ksIHJlcXVpcmVkIGZvciB3YXRlcm1hcmsgY2FsY3VsYXRpb24KLXVzTGlua1N0YXR1c1plcm9UaW1lOk1lbW9yeSBhY2Nlc3MgbGF0ZW5jeSByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uLCBzZXQgdGhpcyB0byAweDAgZm9yIEs4IENQVSwgc2V0IGEgcHJvcGVyIHZhbHVlIGluIDAuMDEgdGhlIHVuaXQgb2YgdXMKK3VzTGlua1N0YXR1c1plcm9UaW1lOk1lbW9yeSBhY2Nlc3MgbGF0ZW5jeSByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uLCBzZXQgdGhpcyB0byAweDAgZm9yIEs4IENQVSwgc2V0IGEgcHJvcGVyIHZhbHVlIGluIDAuMDEgdGhlIHVuaXQgb2YgdXMgCiBmb3IgR3JpZmZpbiBvciBHcmV5aG91bmQuIFNCSU9TIG5lZWRzIHRvIGNvbnZlcnQgdG8gYWN0dWFsIHRpbWUgYnk6CiAgICAgICAgICAgICAgICAgICAgICBpZiBUMFR0aW1lIFs1OjRdPTAwYiwgdGhlbiB1c0xpbmtTdGF0dXNaZXJvVGltZT1UMFR0aW1lIFszOjBdKjAuMXVzICgwLjAgdG8gMS41dXMpCiAgICAgICAgICAgICAgICAgICAgICBpZiBUMFR0aW1lIFs1OjRdPTAxYiwgdGhlbiB1c0xpbmtTdGF0dXNaZXJvVGltZT1UMFR0aW1lIFszOjBdKjAuNXVzICgwLjAgdG8gNy41dXMpCkBAIC0xODE3LDcgKzIyNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgaWYgVDBUdGltZSBbNTo0XT0xMWIsIGFuZCBUMFR0aW1lIFszOjBdPTB4MCB0byAweGEsIHRoZW4gdXNMaW5rU3RhdHVzWmVyb1RpbWU9VDBUdGltZSBbMzowXSoyMHVzICgwLjAgdG8gMjAwdXMpCiAKIHVsSGlnaFZvbHRhZ2VIVExpbmtGcmVxOiAgICAgSFQgbGluayBmcmVxdWVuY3kgZm9yIHBvd2VyIHN0YXRlIHdpdGggbG93IHZvbHRhZ2UuIElmIGJvb3QgdXAgcnVucyBpbiBIVDEsIHRoaXMgbXVzdCBiZSAwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHVsSFRMaW5rRnJlcShib290dXAgZnJlcXVlbmN5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB1bEhUTGlua0ZyZXEoYm9vdHVwIGZyZXF1ZW5jeSkuIAogdWxMb3dWb2x0YWdlSFRMaW5rRnJlcTogICAgICBIVCBsaW5rIGZyZXF1ZW5jeSBmb3IgcG93ZXIgc3RhdGUgd2l0aCBsb3cgdm9sdGFnZSBvciB2b2x0YWdlIHNjYWxpbmcgMS4wdn4xLjF2LiBJZiBib290IHVwIHJ1bnMgaW4gSFQxLCB0aGlzIG11c3QgYmUgMC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB1bEhpZ2hWb2x0YWdlSFRMaW5rRnJlcS4KIApAQCAtMTgyNywxNCArMjI1MCwxNyBAQAogdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg6ICBzYW1lIGFzIGFib3ZlLgogKi8KIAorCiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfUE9XRVJFWFBSRVNTX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBTWVNURU1fQ09ORklHX1JVTl9BVF9PVkVSRFJJVkVfRU5HSU5FICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNZU1RFTV9DT05GSUdfVVNFX1BXTV9PTl9WT0xUQUdFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAKICNkZWZpbmUgU1lTVEVNX0NPTkZJR19QRVJGT1JNQU5DRV9QT1dFUlNUQVRFX09OTFkgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfQ0xNQ19FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAogI2RlZmluZSBTWVNURU1fQ09ORklHX0NETFdfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgU1lTVEVNX0NPTkZJR19ISUdIX1ZPTFRBR0VfUkVRVUVTVEVEICAgICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfQ0xNQ19IWUJSSURfTU9ERV9FTkFCTEVEICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTWVNURU1fQ09ORklHX0NETEZfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1lTVEVNX0NPTkZJR19ETExfU0hVVERPV05fRU5BQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCiAKICNkZWZpbmUgSUdQX0RESV9TTE9UX0xBTkVfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCiAKQEAgLTE4NTEsNiArMjI3Nyw0MSBAQAogCiAjZGVmaW5lIElHUF9ERElfU0xPVF9DT05ORUNUT1JfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAogCisvLyBJbnRlZ3JhdGVkU3lzdGVtSW5mb1RhYmxlIG5ldyBSZXYgaXMgVjUgYWZ0ZXIgVjIsIGJlY2F1c2Ugb2YgdGhlIHJlYWwgcmV2IG9mIFYyIGlzIHYxLjQuIFRoaXMgcmV2IGlzIHVzZWQgZm9yIFJSCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Y1Cit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwRW5naW5lQ2xvY2s7ICAgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bERlbnRpc3RWQ09GcmVxOyAgICAgICAgICAvL0RlbnRpc3QgVkNPIGNsb2NrIGluIDEwa0h6IHVuaXQsIHRoZSBzb3VyY2Ugb2YgR1BVIFNDTEssIExDTEssIFVDTEsgYW5kIFZDTEsuIAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bExDbG9ja0ZyZXE7ICAgICAgICAgICAgICAvL0dQVSBMY2xrIGZyZXEgaW4gMTBrSHogdW5pdCwgaGF2ZSByZWxhdGlvbnNoaXAgd2l0aCBOQ0xLIGluIE5vcnRoQnJpZGdlCisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwVU1BQ2xvY2s7ICAgICAgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkMVs4XTsgICAgICAgICAgICAvL211c3QgYmUgMHgwIGZvciB0aGUgcmVzZXJ2ZWQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBSZXFEaXNwbGF5VmVjdG9yOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE90aGVyRGlzcGxheU1pc2M7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQyWzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFN5c3RlbUNvbmZpZzsgICAgICAgICAgICAvL1RCRAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bENQVUNhcEluZm87ICAgICAgICAgICAgICAvL1RCRAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01heE5CVm9sdGFnZTsgICAgICAgICAgICAvL2hpZ2ggTkIgdm9sdGFnZSwgY2FsY3VsYXRlZCB1c2luZyBjdXJyZW50IFZERE5CIChEMjRGMnhEQykgYW5kIFZERE5CIG9mZnNldCBmdXNlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01pbk5CVm9sdGFnZTsgICAgICAgICAgICAvL2xvdyBOQiB2b2x0YWdlLCBjYWxjdWxhdGVkIHVzaW5nIGN1cnJlbnQgVkRETkIgKEQyNEYyeERDKSBhbmQgVkRETkIgb2Zmc2V0IGZ1c2U7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzQm9vdFVwTkJWb2x0YWdlOyAgICAgICAgIC8vYm9vdCB1cCBOQiB2b2x0YWdlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjSHRjVG1wTG10OyAgICAgICAgICAgICAgIC8vYml0IFsyMjoxNl0gb2YgRDI0RjN4NjQgSGFyZHdhcmUgVGhlcm1hbCBDb250cm9sIChIVEMpIFJlZ2lzdGVyLCBtYXkgbm90IGJlIG5lZWRlZCwgVEJECisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjVGpPZmZzZXQ7ICAgICAgICAgICAgICAgIC8vYml0IFsyODoyMl0gb2YgRDI0RjN4RTQgVGhlcm10cmlwIFN0YXR1cyBSZWdpc3RlcixtYXkgbm90IGJlIG5lZWRlZCwgVEJECisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQzWzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bERESVNsb3QxQ29uZmlnOyAgICAgICAgICAvL3NlZSBhYm92ZSB1bERESVNsb3QxQ29uZmlnIGRlZmluaXRpb24KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MkNvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90M0NvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90NENvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDRbNF07ICAgICAgICAgICAgLy9tdXN0IGJlIDB4MCBmb3IgdGhlIHJlc2VydmVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgIC8vWzM6MF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bNzo0XSBpcyByZXNlcnZlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1VNQUNoYW5uZWxOdW1iZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQ1WzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bENTUl9NM19BUkJfQ05UTF9ERUZBVUxUWzEwXTsvL2FycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDU1JfTTNfQVJCX0NOVExfVVZEWzEwXTsgLy9hcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBVVkQgcGxheWJhY2sKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDU1JfTTNfQVJCX0NOVExfRlMzRFsxMF07Ly9hcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBGdWxsIFNjcmVlbiAzRCBhcHBsaWNhdGlvbnMKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDZbNjFdOyAgICAgICAgICAgLy9tdXN0IGJlIDB4MAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNTsgICAKKwogI2RlZmluZSBBVE9NX0NSVF9JTlRfRU5DT0RFUjFfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgQVRPTV9MQ0RfSU5UX0VOQ09ERVIxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEFUT01fVFZfSU5UX0VOQ09ERVIxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgpAQCAtMTg2Niw4ICsyMzI3LDggQEAKICNkZWZpbmUgQVRPTV9ERlBfSU5UX0VOQ09ERVIzX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCiAjZGVmaW5lIEFUT01fREZQX0lOVF9FTkNPREVSNF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAogCi0vKiAgZGVmaW5lIEFTSUMgaW50ZXJuYWwgZW5jb2RlciBpZCAoIGJpdCB2ZWN0b3IgKSAqLwotI2RlZmluZSBBU0lDX0lOVF9EQUMxX0VOQ09ERVJfSUQJCQkJCQkJCQkJCTB4MDAKKy8vIGRlZmluZSBBU0lDIGludGVybmFsIGVuY29kZXIgaWQgKCBiaXQgdmVjdG9yICksIHVzZWQgZm9yIENSVENfU291cmNlU2VsVGFibGUKKyNkZWZpbmUgQVNJQ19JTlRfREFDMV9FTkNPREVSX0lEICAgIAkJCQkJCQkJCQkJMHgwMCAKICNkZWZpbmUgQVNJQ19JTlRfVFZfRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwMgogI2RlZmluZSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwMwogI2RlZmluZSBBU0lDX0lOVF9EQUMyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwNApAQCAtMTg3NSwxMCArMjMzNiwyNCBAQAogI2RlZmluZSBBU0lDX0lOVF9EVk9fRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwNwogI2RlZmluZSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwOQogI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwNQorI2RlZmluZSBBU0lDX0VYVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwOAorI2RlZmluZSBBU0lDX0lOVF9ESUczX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYQorI2RlZmluZSBBU0lDX0lOVF9ESUc0X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYgorI2RlZmluZSBBU0lDX0lOVF9ESUc1X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYworI2RlZmluZSBBU0lDX0lOVF9ESUc2X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwZAogCi0vKiBkZWZpbmUgRW5jb2RlciBhdHRyaWJ1dGUgKi8KKy8vZGVmaW5lIEVuY29kZXIgYXR0cmlidXRlCiAjZGVmaW5lIEFUT01fQU5BTE9HX0VOQ09ERVIJCQkJCQkJCQkJCQkJCQkJMAotI2RlZmluZSBBVE9NX0RJR0lUQUxfRU5DT0RFUgkJCQkJCQkJCQkJCQkJCTEKKyNkZWZpbmUgQVRPTV9ESUdJVEFMX0VOQ09ERVIJCQkJCQkJCQkJCQkJCQkxCQkKKyNkZWZpbmUgQVRPTV9EUF9FTkNPREVSCQkJCQkJCQkJCQkJCQkJICAgICAgMgkJCisKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0VOVU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfRU5VTV9JRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0VOVU1fSUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfRU5VTV9JRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAgCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MAogCiAjZGVmaW5lIEFUT01fREVWSUNFX0NSVDFfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTE4ODYsNDUgKzIzNjEsNDAgQEAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCiAjZGVmaW5lIEFUT01fREVWSUNFX0NSVDJfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFUT01fREVWSUNFX0RGUDZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgogI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ1ZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfSU5ERVgJCQkJCQkJCQkJCQkJCTB4MDAwMDAwMDkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQNF9JTkRFWAkJCQkJCQkJCQkJCQkJMHgwMDAwMDAwQQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlA1X0lOREVYCQkJCQkJCQkJCQkJCQkweDAwMDAwMDBCCisjZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQNV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKICNkZWZpbmUgQVRPTV9ERVZJQ0VfUkVTRVJWRURDX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCiAjZGVmaW5lIEFUT01fREVWSUNFX1JFU0VSVkVERF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAogI2RlZmluZSBBVE9NX0RFVklDRV9SRVNFUlZFREVfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKICNkZWZpbmUgQVRPTV9ERVZJQ0VfUkVTRVJWRURGX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GTyAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0RGUDNfSU5ERVgrMSkKICNkZWZpbmUgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXzIgICAgICAgICAgICAgICAgICBBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk8KLSNkZWZpbmUgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXzMgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfREZQNV9JTkRFWCArIDEpCisjZGVmaW5lIEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT18zICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0RGUDVfSU5ERVggKyAxICkKIAogI2RlZmluZSBBVE9NX01BWF9TVVBQT1JURURfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIChBVE9NX0RFVklDRV9SRVNFUlZFREZfSU5ERVgrMSkKIAotI2RlZmluZSBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDFfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfTENEMV9JTkRFWCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxTCA8PCBBVE9NX0RFVklDRV9UVjFfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQMV9JTkRFWCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxTCA8PCBBVE9NX0RFVklDRV9DUlQyX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDJfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX1RWMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfVFYyX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDJfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0NWX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfQ1ZfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfU1VQUE9SVAkJCQkJCQkJCQkJCQkoMHgxTCA8PCBBVE9NX0RFVklDRV9ERlAzX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQJCQkJCQkJCQkJCQkJKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQNF9JTkRFWCApCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVAkJCQkJCQkJCQkJCQkoMHgxTCA8PCBBVE9NX0RFVklDRV9ERlA1X0lOREVYKQorI2RlZmluZSBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX1RWMV9JTkRFWCAgKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA2X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDZfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9DVl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NWX0lOREVYICAgKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDNfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDRfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA1X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDVfSU5ERVggKQogCi0jZGVmaW5lIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUIFwKLQkoQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCBcCi0JKEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8IFwKLQkgQVRPTV9ERVZJQ0VfREZQM19TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfREZQNF9TVVBQT1JUIHwgXAotCSBBVE9NX0RFVklDRV9ERlA1X1NVUFBPUlQpCi0jZGVmaW5lIEFUT01fREVWSUNFX1RWX1NVUFBPUlQgXAotCShBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCAgfCBBVE9NX0RFVklDRV9UVjJfU1VQUE9SVCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQgXAotCShBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQpCisjZGVmaW5lIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwgIEFUT01fREVWSUNFX0RGUDNfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDRfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDZfU1VQUE9SVCkKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpCisjZGVmaW5lIEFUT01fREVWSUNFX0xDRF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0xDRDJfU1VQUE9SVCkKIAogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUT1JfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ09OTkVDVE9SX1RZUEVfU0hJRlQgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CkBAIC0xOTQyLDYgKzI0MTIsNyBAQAogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUT1JfQ0FTRV8xICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ09OTkVDVE9SX0RJU1BMQVlQT1JUICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCiAKKwogI2RlZmluZSBBVE9NX0RFVklDRV9EQUNfSU5GT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREFDX0lORk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFUT01fREVWSUNFX0RBQ19JTkZPX05PREFDICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMApAQCAtMTk1OCwxMzkgKzI0MjksMTUwIEBACiAjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBBVE9NX0RFVklDRV9JMkNfSURfSVNfRk9SX05PTl9NTV9VU0UgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVRPTV9ERVZJQ0VfSTJDX0lEX0lTX0ZPUl9NTV9VU0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfU0RWT19VU0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwkvKiBGb3IgSUdQIFJTNjAwICovCi0jZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfREFDX1NDTCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBGb3IgSUdQIFJTNjkwICovCisjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfU0RWT19VU0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgICAvL0ZvciBJR1AgUlM2MDAKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfSTJDX0lEX0lTX0ZPUl9EQUNfU0NMICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAgIC8vRm9yIElHUCBSUzY5MAogCiAjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19IQVJEV0FSRV9DQVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBBVE9NX0RFVklDRV9JMkNfSEFSRFdBUkVfQ0FQX1NISUZUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKICNkZWZpbmUJQVRPTV9ERVZJQ0VfVVNFU19TT0ZUV0FSRV9BU1NJU1RFRF9JMkMgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lCUFUT01fREVWSUNFX1VTRVNfSEFSRFdBUkVfQVNTSVNURURfSTJDICAgICAgICAgICAgMHgwMDAwMDAwMQogCi0vKiAgIHVzRGV2aWNlU3VwcG9ydDogKi8KLS8qICAgQml0czAgICAgICAgPSAwIC0gbm8gQ1JUMSBzdXBwb3J0PSAxLSBDUlQxIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgMSAgICAgICA9IDAgLSBubyBMQ0QxIHN1cHBvcnQ9IDEtIExDRDEgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCAyICAgICAgID0gMCAtIG5vIFRWMSAgc3VwcG9ydD0gMS0gVFYxICBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDMgICAgICAgPSAwIC0gbm8gREZQMSBzdXBwb3J0PSAxLSBERlAxIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgNCAgICAgICA9IDAgLSBubyBDUlQyIHN1cHBvcnQ9IDEtIENSVDIgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCA1ICAgICAgID0gMCAtIG5vIExDRDIgc3VwcG9ydD0gMS0gTENEMiBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDYgICAgICAgPSAwIC0gbm8gVFYyICBzdXBwb3J0PSAxLSBUVjIgIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgNyAgICAgICA9IDAgLSBubyBERlAyIHN1cHBvcnQ9IDEtIERGUDIgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCA4ICAgICAgID0gMCAtIG5vIENWICAgc3VwcG9ydD0gMS0gQ1YgICBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDkgICAgICAgPSAwIC0gbm8gREZQMyBzdXBwb3J0PSAxLSBERlAzIGlzIHN1cHBvcnRlZCAqLwotLyogICBCeXRlMSAoU3VwcG9ydGVkIERldmljZSBJbmZvKSAqLwotLyogICBCaXQgMCAgICAgICA9ID0gMCAtIG5vIENWIHN1cHBvcnQ9IDEtIENWIGlzIHN1cHBvcnRlZCAqLwotLyogICovCi0vKiAgKi8KKy8vICB1c0RldmljZVN1cHBvcnQ6CisvLyAgQml0czAJPSAwIC0gbm8gQ1JUMSBzdXBwb3J0PSAxLSBDUlQxIGlzIHN1cHBvcnRlZAorLy8gIEJpdCAxCT0gMCAtIG5vIExDRDEgc3VwcG9ydD0gMS0gTENEMSBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgMgk9IDAgLSBubyBUVjEgIHN1cHBvcnQ9IDEtIFRWMSAgaXMgc3VwcG9ydGVkCisvLyAgQml0IDMJPSAwIC0gbm8gREZQMSBzdXBwb3J0PSAxLSBERlAxIGlzIHN1cHBvcnRlZAorLy8gIEJpdCA0CT0gMCAtIG5vIENSVDIgc3VwcG9ydD0gMS0gQ1JUMiBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgNQk9IDAgLSBubyBMQ0QyIHN1cHBvcnQ9IDEtIExDRDIgaXMgc3VwcG9ydGVkCisvLyAgQml0IDYJPSAwIC0gbm8gREZQNiBzdXBwb3J0PSAxLSBERlA2IGlzIHN1cHBvcnRlZAorLy8gIEJpdCA3CT0gMCAtIG5vIERGUDIgc3VwcG9ydD0gMS0gREZQMiBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgOAk9IDAgLSBubyBDViAgIHN1cHBvcnQ9IDEtIENWICAgaXMgc3VwcG9ydGVkCisvLyAgQml0IDkJPSAwIC0gbm8gREZQMyBzdXBwb3J0PSAxLSBERlAzIGlzIHN1cHBvcnRlZAorLy8gIEJpdCAxMCAgICAgID0gMCAtIG5vIERGUDQgc3VwcG9ydD0gMS0gREZQNCBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgMTEgICAgICA9IDAgLSBubyBERlA1IHN1cHBvcnQ9IDEtIERGUDUgaXMgc3VwcG9ydGVkCisvLyAgIAorLy8gIAogCi0vKiAgICAgICAgICAgICAgIHVjSTJDX0NvbmZpZ0lEICovCi0vKiAgICAgWzc6MF0gLSBJMkMgTElORSBBc3NvY2lhdGUgSUQgKi8KLS8qICAgICAgICAgICA9IDAgICAtIG5vIEkyQyAqLwotLyogICAgIFs3XSAgICAgICAgICAgICAgIC0gICAgICAgSFdfQ2FwICAgICAgICA9IDEsICBbNjowXT1IVyBhc3Npc3RlZCBJMkMgSUQoSFcgbGluZSBzZWxlY3Rpb24pICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gICAwLCAgWzY6MF09U1cgYXNzaXN0ZWQgSTJDIElEICovCi0vKiAgICAgWzYtNF0gICAgIC0gSFdfRU5HSU5FX0lEICA9ICAgICAgIDEsICBIVyBlbmdpbmUgZm9yIE5PTiBtdWx0aW1lZGlhIHVzZSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAgMiwgICAgICBIVyBlbmdpbmUgZm9yIE11bHRpbWVkaWEgdXNlICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gICAzLTcgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgSTJDIGVuZ2luZXMgKi8KLS8qICAgICAgICAgICAgICAgWzMtMF0gLSBJMkNfTElORV9NVVggID0gQSBNdXggbnVtYmVyIHdoZW4gaXQncyBIVyBhc3Npc3RlZCBJMkMgb3IgR1BJTyBJRCB3aGVuIGl0J3MgU1cgSTJDICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN0cnVjdHVyZSB1c2VkIGluIE1jbGtTU19JbmZvVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLwkJdWNJMkNfQ29uZmlnSUQKKy8vICAgIFs3OjBdIC0gSTJDIExJTkUgQXNzb2NpYXRlIElECisvLyAgICAgICAgICA9IDAgICAtIG5vIEkyQworLy8gICAgWzddCQktCUhXX0NhcCAgICAgICAgPQkxLCAgWzY6MF09SFcgYXNzaXN0ZWQgSTJDIElEKEhXIGxpbmUgc2VsZWN0aW9uKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgID0JMCwgIFs2OjBdPVNXIGFzc2lzdGVkIEkyQyBJRAorLy8gICAgWzYtNF0JLSBIV19FTkdJTkVfSUQgID0JMSwgIEhXIGVuZ2luZSBmb3IgTk9OIG11bHRpbWVkaWEgdXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgPQkyLAlIVyBlbmdpbmUgZm9yIE11bHRpbWVkaWEgdXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgPQkzLTcJUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBJMkMgZW5naW5lcworLy8JCVszLTBdIC0gSTJDX0xJTkVfTVVYICA9IEEgTXV4IG51bWJlciB3aGVuIGl0J3MgSFcgYXNzaXN0ZWQgSTJDIG9yIEdQSU8gSUQgd2hlbiBpdCdzIFNXIEkyQwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JMkNfSURfQ09ORklHIHsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0kyQ19JRF9DT05GSUcKK3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVQ0hBUiBiZkhXX0NhcGFibGU6MTsKLQlVQ0hBUiBiZkhXX0VuZ2luZUlEOjM7Ci0JVUNIQVIgYmZJMkNfTGluZU11eDo0OworICBVQ0hBUiAgIGJmSFdfQ2FwYWJsZToxOworICBVQ0hBUiAgIGJmSFdfRW5naW5lSUQ6MzsKKyAgVUNIQVIgICBiZkkyQ19MaW5lTXV4OjQ7CiAjZWxzZQotCVVDSEFSIGJmSTJDX0xpbmVNdXg6NDsKLQlVQ0hBUiBiZkhXX0VuZ2luZUlEOjM7Ci0JVUNIQVIgYmZIV19DYXBhYmxlOjE7CisgIFVDSEFSICAgYmZJMkNfTGluZU11eDo0OworICBVQ0hBUiAgIGJmSFdfRW5naW5lSUQ6MzsKKyAgVUNIQVIgICBiZkhXX0NhcGFibGU6MTsKICNlbmRpZgotfSBBVE9NX0kyQ19JRF9DT05GSUc7Cit9QVRPTV9JMkNfSURfQ09ORklHOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHsKLQlBVE9NX0kyQ19JRF9DT05GSUcgc2JmQWNjZXNzOwotCVVDSEFSIHVjQWNjZXNzOwotfSBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUworeworICBBVE9NX0kyQ19JRF9DT05GSUcgc2JmQWNjZXNzOworICBVQ0hBUiAgICAgICAgICAgICAgdWNBY2Nlc3M7Cit9QVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUzsKKyAgIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBHUElPX0kyQ19JbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JMkNfQVNTSUdNRU5UIHsKLQlVU0hPUlQgdXNDbGtNYXNrUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNDbGtFblJlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzQ2xrWV9SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0Nsa0FfUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNEYXRhTWFza1JlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzRGF0YUVuUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNEYXRhWV9SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0RhdGFBX1JlZ2lzdGVySW5kZXg7Ci0JQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKLQlVQ0hBUiB1Y0Nsa01hc2tTaGlmdDsKLQlVQ0hBUiB1Y0Nsa0VuU2hpZnQ7Ci0JVUNIQVIgdWNDbGtZX1NoaWZ0OwotCVVDSEFSIHVjQ2xrQV9TaGlmdDsKLQlVQ0hBUiB1Y0RhdGFNYXNrU2hpZnQ7Ci0JVUNIQVIgdWNEYXRhRW5TaGlmdDsKLQlVQ0hBUiB1Y0RhdGFZX1NoaWZ0OwotCVVDSEFSIHVjRGF0YUFfU2hpZnQ7Ci0JVUNIQVIgdWNSZXNlcnZlZDE7Ci0JVUNIQVIgdWNSZXNlcnZlZDI7Ci19IEFUT01fR1BJT19JMkNfQVNTSUdNRU5UOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gR1BJT19JMkNfSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9HUElPX0kyQ19BU1NJR01FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nsa01hc2tSZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrRW5SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrWV9SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrQV9SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGF0YU1hc2tSZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGF0YUVuUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0RhdGFZX1JlZ2lzdGVySW5kZXg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNEYXRhQV9SZWdpc3RlckluZGV4OworICBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjQ2xrTWFza1NoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjQ2xrRW5TaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y0Nsa1lfU2hpZnQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgdWNDbGtBX1NoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjRGF0YU1hc2tTaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y0RhdGFFblNoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjRGF0YVlfU2hpZnQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgdWNEYXRhQV9TaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMjsKK31BVE9NX0dQSU9fSTJDX0FTU0lHTUVOVDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JMkNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9HUElPX0kyQ19BU1NJR01FTlQgYXNHUElPX0luZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV07Ci19IEFUT01fR1BJT19JMkNfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fSTJDX0lORk8KK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBBVE9NX0dQSU9fSTJDX0FTU0lHTUVOVCAgIGFzR1BJT19JbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOworfUFUT01fR1BJT19JMkNfSU5GTzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQ29tbW9uIFN0cnVjdHVyZSB1c2VkIGluIG90aGVyIHN0cnVjdHVyZXMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gQ29tbW9uIFN0cnVjdHVyZSB1c2VkIGluIG90aGVyIHN0cnVjdHVyZXMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIAogI2lmbmRlZiBfSDJJTkMKLQotLyogUGxlYXNlIGRvbid0IGFkZCBvciBleHBhbmQgdGhpcyBiaXRmaWVsZCBzdHJ1Y3R1cmUgYmVsb3csIHRoaXMgb25lIHdpbGwgcmV0aXJlIHNvb24uISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTU9ERV9NSVNDX0lORk8geworICAKKy8vUGxlYXNlIGRvbid0IGFkZCBvciBleHBhbmQgdGhpcyBiaXRmaWVsZCBzdHJ1Y3R1cmUgYmVsb3csIHRoaXMgb25lIHdpbGwgcmV0aXJlIHNvb24uIQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTU9ERV9NSVNDX0lORk8KK3sgCiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVVNIT1JUIFJlc2VydmVkOjY7Ci0JVVNIT1JUIFJHQjg4ODoxOwotCVVTSE9SVCBEb3VibGVDbG9jazoxOwotCVVTSE9SVCBJbnRlcmxhY2U6MTsKLQlVU0hPUlQgQ29tcG9zaXRlU3luYzoxOwotCVVTSE9SVCBWX1JlcGxpY2F0aW9uQnkyOjE7Ci0JVVNIT1JUIEhfUmVwbGljYXRpb25CeTI6MTsKLQlVU0hPUlQgVmVydGljYWxDdXRPZmY6MTsKLQlVU0hPUlQgVlN5bmNQb2xhcml0eToxOwkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLQlVU0hPUlQgSFN5bmNQb2xhcml0eToxOwkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLQlVU0hPUlQgSG9yaXpvbnRhbEN1dE9mZjoxOworICBVU0hPUlQgUmVzZXJ2ZWQ6NjsKKyAgVVNIT1JUIFJHQjg4ODoxOworICBVU0hPUlQgRG91YmxlQ2xvY2s6MTsKKyAgVVNIT1JUIEludGVybGFjZToxOworICBVU0hPUlQgQ29tcG9zaXRlU3luYzoxOworICBVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgSF9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgVmVydGljYWxDdXRPZmY6MTsKKyAgVVNIT1JUIFZTeW5jUG9sYXJpdHk6MTsgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworICBVU0hPUlQgSFN5bmNQb2xhcml0eToxOyAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CisgIFVTSE9SVCBIb3Jpem9udGFsQ3V0T2ZmOjE7CiAjZWxzZQotCVVTSE9SVCBIb3Jpem9udGFsQ3V0T2ZmOjE7Ci0JVVNIT1JUIEhTeW5jUG9sYXJpdHk6MTsJLyogMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93ICovCi0JVVNIT1JUIFZTeW5jUG9sYXJpdHk6MTsJLyogMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93ICovCi0JVVNIT1JUIFZlcnRpY2FsQ3V0T2ZmOjE7Ci0JVVNIT1JUIEhfUmVwbGljYXRpb25CeTI6MTsKLQlVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOwotCVVTSE9SVCBDb21wb3NpdGVTeW5jOjE7Ci0JVVNIT1JUIEludGVybGFjZToxOwotCVVTSE9SVCBEb3VibGVDbG9jazoxOwotCVVTSE9SVCBSR0I4ODg6MTsKLQlVU0hPUlQgUmVzZXJ2ZWQ6NjsKKyAgVVNIT1JUIEhvcml6b250YWxDdXRPZmY6MTsKKyAgVVNIT1JUIEhTeW5jUG9sYXJpdHk6MTsgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworICBVU0hPUlQgVlN5bmNQb2xhcml0eToxOyAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CisgIFVTSE9SVCBWZXJ0aWNhbEN1dE9mZjoxOworICBVU0hPUlQgSF9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgQ29tcG9zaXRlU3luYzoxOworICBVU0hPUlQgSW50ZXJsYWNlOjE7CisgIFVTSE9SVCBEb3VibGVDbG9jazoxOworICBVU0hPUlQgUkdCODg4OjE7CisgIFVTSE9SVCBSZXNlcnZlZDo2OyAgICAgICAgICAgCiAjZW5kaWYKLX0gQVRPTV9NT0RFX01JU0NfSU5GTzsKLQotdHlwZWRlZiB1bmlvbiBfQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgewotCUFUT01fTU9ERV9NSVNDX0lORk8gc2JmQWNjZXNzOwotCVVTSE9SVCB1c0FjY2VzczsKLX0gQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1M7Ci0KK31BVE9NX01PREVfTUlTQ19JTkZPOworICAKK3R5cGVkZWYgdW5pb24gX0FUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTCit7IAorICBBVE9NX01PREVfTUlTQ19JTkZPIHNiZkFjY2VzczsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0FjY2VzczsKK31BVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUzsKKyAgCiAjZWxzZQotCi10eXBlZGVmIHVuaW9uIF9BVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyB7Ci0JVVNIT1JUIHVzQWNjZXNzOwotfSBBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUzsKLQorICAKK3R5cGVkZWYgdW5pb24gX0FUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTCit7IAorICBVU0hPUlQgICAgICAgICAgICAgIHVzQWNjZXNzOworfUFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTOworICAgCiAjZW5kaWYKIAotLyogIHVzTW9kZU1pc2NJbmZvLSAqLworLy8gdXNNb2RlTWlzY0luZm8tCiAjZGVmaW5lIEFUT01fSF9DVVRPRkYgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9IU1lOQ19QT0xBUklUWSAgICAgMHgwMgkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLSNkZWZpbmUgQVRPTV9WU1lOQ19QT0xBUklUWSAgICAgMHgwNAkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KKyNkZWZpbmUgQVRPTV9IU1lOQ19QT0xBUklUWSAgICAgMHgwMiAgICAgICAgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworI2RlZmluZSBBVE9NX1ZTWU5DX1BPTEFSSVRZICAgICAweDA0ICAgICAgICAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CiAjZGVmaW5lIEFUT01fVl9DVVRPRkYgICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9IX1JFUExJQ0FUSU9OQlkyICAgMHgxMAogI2RlZmluZSBBVE9NX1ZfUkVQTElDQVRJT05CWTIgICAweDIwCkBAIC0yMDk5LDEwICsyNTgxLDEwIEBACiAjZGVmaW5lIEFUT01fRE9VQkxFX0NMT0NLX01PREUgIDB4MTAwCiAjZGVmaW5lIEFUT01fUkdCODg4X01PREUgICAgICAgIDB4MjAwCiAKLS8qIHVzUmVmcmVzaFJhdGUtICovCisvL3VzUmVmcmVzaFJhdGUtCiAjZGVmaW5lIEFUT01fUkVGUkVTSF80MyAgICAgICAgIDQzCiAjZGVmaW5lIEFUT01fUkVGUkVTSF80NyAgICAgICAgIDQ3Ci0jZGVmaW5lIEFUT01fUkVGUkVTSF81NiAgICAgICAgIDU2CisjZGVmaW5lIEFUT01fUkVGUkVTSF81NiAgICAgICAgIDU2CQogI2RlZmluZSBBVE9NX1JFRlJFU0hfNjAgICAgICAgICA2MAogI2RlZmluZSBBVE9NX1JFRlJFU0hfNjUgICAgICAgICA2NQogI2RlZmluZSBBVE9NX1JFRlJFU0hfNzAgICAgICAgICA3MApAQCAtMjExMCwxOTIgKzI1OTIsMjMzIEBACiAjZGVmaW5lIEFUT01fUkVGUkVTSF83NSAgICAgICAgIDc1CiAjZGVmaW5lIEFUT01fUkVGUkVTSF84NSAgICAgICAgIDg1CiAKLS8qICBBVE9NX01PREVfVElNSU5HIGRhdGEgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgVkVTQSB0aW1pbmcgZGF0YS4gKi8KLS8qICBUcmFuc2xhdGlvbiBmcm9tIEVESUQgdG8gQVRPTV9NT0RFX1RJTUlORywgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybXVsYS4gKi8KLS8qICAqLwotLyogICAgICAgVkVTQV9IVE9UQUwgICAgICAgICAgICAgICAgICAgICA9ICAgICAgIFZFU0FfQUNUSVZFICsgMiogVkVTQV9CT1JERVIgKyBWRVNBX0JMQU5LICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBFRElEX0hBICsgRURJRF9IQkwgKi8KLS8qICAgICAgIFZFU0FfSERJU1AgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBWRVNBX0FDVElWRSAgICAgPSAgICAgICBFRElEX0hBICovCi0vKiAgICAgICBWRVNBX0hTWU5DX1NUQVJUICAgICAgICA9ICAgICAgIFZFU0FfQUNUSVZFICsgVkVTQV9CT1JERVIgKyBWRVNBX0ZST05UX1BPUkNIICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBFRElEX0hBICsgRURJRF9IU08gKi8KLS8qICAgICAgIFZFU0FfSFNZTkNfV0lEVEggICAgICAgID0gICAgICAgVkVTQV9IU1lOQ19USU1FID0gICAgICAgRURJRF9IU1BXICovCi0vKiAgICAgICBWRVNBX0JPUkRFUiAgICAgICAgICAgICAgICAgICAgID0gICAgICAgRURJRF9CT1JERVIgKi8KKy8vIEFUT01fTU9ERV9USU1JTkcgZGF0YSBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyBWRVNBIHRpbWluZyBkYXRhLgorLy8gVHJhbnNsYXRpb24gZnJvbSBFRElEIHRvIEFUT01fTU9ERV9USU1JTkcsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm11bGEuCisvLworLy8JVkVTQV9IVE9UQUwJCQk9CVZFU0FfQUNUSVZFICsgMiogVkVTQV9CT1JERVIgKyBWRVNBX0JMQU5LCisvLwkJCQkJCT0JRURJRF9IQSArIEVESURfSEJMCisvLwlWRVNBX0hESVNQCQkJPQlWRVNBX0FDVElWRQk9CUVESURfSEEKKy8vCVZFU0FfSFNZTkNfU1RBUlQJPQlWRVNBX0FDVElWRSArIFZFU0FfQk9SREVSICsgVkVTQV9GUk9OVF9QT1JDSAorLy8JCQkJCQk9CUVESURfSEEgKyBFRElEX0hTTworLy8JVkVTQV9IU1lOQ19XSURUSAk9CVZFU0FfSFNZTkNfVElNRQk9CUVESURfSFNQVworLy8JVkVTQV9CT1JERVIJCQk9CUVESURfQk9SREVSCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVXNpbmdEVERUaW1pbmdUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNIX1NpemU7Ci0JVVNIT1JUIHVzSF9CbGFua2luZ19UaW1lOwotCVVTSE9SVCB1c1ZfU2l6ZTsKLQlVU0hPUlQgdXNWX0JsYW5raW5nX1RpbWU7Ci0JVVNIT1JUIHVzSF9TeW5jT2Zmc2V0OwotCVVTSE9SVCB1c0hfU3luY1dpZHRoOwotCVVTSE9SVCB1c1ZfU3luY09mZnNldDsKLQlVU0hPUlQgdXNWX1N5bmNXaWR0aDsKLQlBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyBzdXNNb2RlTWlzY0luZm87Ci0JVUNIQVIgdWNIX0JvcmRlcjsJLyogIEZyb20gREZQIEVESUQgKi8KLQlVQ0hBUiB1Y1ZfQm9yZGVyOwotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci19IFNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVXNpbmdEVERUaW1pbmdUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUworeworICBVU0hPUlQgIHVzSF9TaXplOworICBVU0hPUlQgIHVzSF9CbGFua2luZ19UaW1lOworICBVU0hPUlQgIHVzVl9TaXplOworICBVU0hPUlQgIHVzVl9CbGFua2luZ19UaW1lOwkJCQorICBVU0hPUlQgIHVzSF9TeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzSF9TeW5jV2lkdGg7CisgIFVTSE9SVCAgdXNWX1N5bmNPZmZzZXQ7CisgIFVTSE9SVCAgdXNWX1N5bmNXaWR0aDsKKyAgQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgIHN1c01vZGVNaXNjSW5mbzsgIAorICBVQ0hBUiAgIHVjSF9Cb3JkZXI7ICAgICAgICAgLy8gRnJvbSBERlAgRURJRAorICBVQ0hBUiAgIHVjVl9Cb3JkZXI7CisgIFVDSEFSICAgdWNDUlRDOyAgICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgIAorICBVQ0hBUiAgIHVjUGFkZGluZ1szXTsKK31TRVRfQ1JUQ19VU0lOR19EVERfVElNSU5HX1BBUkFNRVRFUlM7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVGltaW5nVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNIX1RvdGFsOwkvKiAgaG9yaXpvbnRhbCB0b3RhbCAqLwotCVVTSE9SVCB1c0hfRGlzcDsJLyogIGhvcml6b250YWwgZGlzcGxheSAqLwotCVVTSE9SVCB1c0hfU3luY1N0YXJ0OwkvKiAgaG9yb3pvbnRhbCBTeW5jIHN0YXJ0ICovCi0JVVNIT1JUIHVzSF9TeW5jV2lkdGg7CS8qICBob3Jpem9udGFsIFN5bmMgd2lkdGggKi8KLQlVU0hPUlQgdXNWX1RvdGFsOwkvKiAgdmVydGljYWwgdG90YWwgKi8KLQlVU0hPUlQgdXNWX0Rpc3A7CS8qICB2ZXJ0aWNhbCBkaXNwbGF5ICovCi0JVVNIT1JUIHVzVl9TeW5jU3RhcnQ7CS8qICB2ZXJ0aWNhbCBTeW5jIHN0YXJ0ICovCi0JVVNIT1JUIHVzVl9TeW5jV2lkdGg7CS8qICB2ZXJ0aWNhbCBTeW5jIHdpZHRoICovCi0JQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1Mgc3VzTW9kZU1pc2NJbmZvOwotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y092ZXJzY2FuUmlnaHQ7CS8qICByaWdodCAqLwotCVVDSEFSIHVjT3ZlcnNjYW5MZWZ0OwkvKiAgbGVmdCAqLwotCVVDSEFSIHVjT3ZlcnNjYW5Cb3R0b207CS8qICBib3R0b20gKi8KLQlVQ0hBUiB1Y092ZXJzY2FuVG9wOwkvKiAgdG9wICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBTZXRDUlRDX1RpbWluZ1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzSF9Ub3RhbDsgICAgICAgIC8vIGhvcml6b250YWwgdG90YWwKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzSF9EaXNwOyAgICAgICAgIC8vIGhvcml6b250YWwgZGlzcGxheQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNIX1N5bmNTdGFydDsgICAgLy8gaG9yb3pvbnRhbCBTeW5jIHN0YXJ0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c0hfU3luY1dpZHRoOyAgICAvLyBob3Jpem9udGFsIFN5bmMgd2lkdGgKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzVl9Ub3RhbDsgICAgICAgIC8vIHZlcnRpY2FsIHRvdGFsCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfRGlzcDsgICAgICAgICAvLyB2ZXJ0aWNhbCBkaXNwbGF5CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfU3luY1N0YXJ0OyAgICAvLyB2ZXJ0aWNhbCBTeW5jIHN0YXJ0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfU3luY1dpZHRoOyAgICAvLyB2ZXJ0aWNhbCBTeW5jIHdpZHRoCisgIEFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTICBzdXNNb2RlTWlzY0luZm87CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NSVEM7ICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjT3ZlcnNjYW5SaWdodDsgIC8vIHJpZ2h0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y092ZXJzY2FuTGVmdDsgICAvLyBsZWZ0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y092ZXJzY2FuQm90dG9tOyAvLyBib3R0b20KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjT3ZlcnNjYW5Ub3A7ICAgIC8vIHRvcAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNSZXNlcnZlZDsKK31TRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBTdGFuZGFyZFZFU0FfVGltaW5nVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICBBbmFsb2dUVl9JbmZvVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRWaWRlb0luZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NT0RFX1RJTUlORyB7Ci0JVVNIT1JUIHVzQ1JUQ19IX1RvdGFsOwotCVVTSE9SVCB1c0NSVENfSF9EaXNwOwotCVVTSE9SVCB1c0NSVENfSF9TeW5jU3RhcnQ7Ci0JVVNIT1JUIHVzQ1JUQ19IX1N5bmNXaWR0aDsKLQlVU0hPUlQgdXNDUlRDX1ZfVG90YWw7Ci0JVVNIT1JUIHVzQ1JUQ19WX0Rpc3A7Ci0JVVNIT1JUIHVzQ1JUQ19WX1N5bmNTdGFydDsKLQlVU0hPUlQgdXNDUlRDX1ZfU3luY1dpZHRoOwotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qIGluIDEwS2h6IHVuaXQgKi8KLQlBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyBzdXNNb2RlTWlzY0luZm87Ci0JVVNIT1JUIHVzQ1JUQ19PdmVyc2NhblJpZ2h0OwotCVVTSE9SVCB1c0NSVENfT3ZlcnNjYW5MZWZ0OwotCVVTSE9SVCB1c0NSVENfT3ZlcnNjYW5Cb3R0b207Ci0JVVNIT1JUIHVzQ1JUQ19PdmVyc2NhblRvcDsKLQlVU0hPUlQgdXNSZXNlcnZlOwotCVVDSEFSIHVjSW50ZXJuYWxNb2RlTnVtYmVyOwotCVVDSEFSIHVjUmVmcmVzaFJhdGU7Ci19IEFUT01fTU9ERV9USU1JTkc7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBTdGFuZGFyZFZFU0FfVGltaW5nVGFibGUKKy8vICAgICAgICAgICAgICAgICAgIEFuYWxvZ1RWX0luZm9UYWJsZSAKKy8vICAgICAgICAgICAgICAgICAgIENvbXBvbmVudFZpZGVvSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NT0RFX1RJTUlORworeworICBVU0hPUlQgIHVzQ1JUQ19IX1RvdGFsOworICBVU0hPUlQgIHVzQ1JUQ19IX0Rpc3A7CisgIFVTSE9SVCAgdXNDUlRDX0hfU3luY1N0YXJ0OworICBVU0hPUlQgIHVzQ1JUQ19IX1N5bmNXaWR0aDsKKyAgVVNIT1JUICB1c0NSVENfVl9Ub3RhbDsKKyAgVVNIT1JUICB1c0NSVENfVl9EaXNwOworICBVU0hPUlQgIHVzQ1JUQ19WX1N5bmNTdGFydDsKKyAgVVNIT1JUICB1c0NSVENfVl9TeW5jV2lkdGg7CisgIFVTSE9SVCAgdXNQaXhlbENsb2NrOwkJCQkJICAgICAgICAgICAgICAgICAvL2luIDEwS2h6IHVuaXQKKyAgQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgIHN1c01vZGVNaXNjSW5mbzsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5SaWdodDsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5MZWZ0OworICBVU0hPUlQgIHVzQ1JUQ19PdmVyc2NhbkJvdHRvbTsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5Ub3A7CisgIFVTSE9SVCAgdXNSZXNlcnZlOworICBVQ0hBUiAgIHVjSW50ZXJuYWxNb2RlTnVtYmVyOworICBVQ0hBUiAgIHVjUmVmcmVzaFJhdGU7Cit9QVRPTV9NT0RFX1RJTUlORzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRFREX0ZPUk1BVCB7Ci0JVVNIT1JUIHVzUGl4Q2xrOwotCVVTSE9SVCB1c0hBY3RpdmU7Ci0JVVNIT1JUIHVzSEJsYW5raW5nX1RpbWU7Ci0JVVNIT1JUIHVzVkFjdGl2ZTsKLQlVU0hPUlQgdXNWQmxhbmtpbmdfVGltZTsKLQlVU0hPUlQgdXNIU3luY09mZnNldDsKLQlVU0hPUlQgdXNIU3luY1dpZHRoOwotCVVTSE9SVCB1c1ZTeW5jT2Zmc2V0OwotCVVTSE9SVCB1c1ZTeW5jV2lkdGg7Ci0JVVNIT1JUIHVzSW1hZ2VIU2l6ZTsKLQlVU0hPUlQgdXNJbWFnZVZTaXplOwotCVVDSEFSIHVjSEJvcmRlcjsKLQlVQ0hBUiB1Y1ZCb3JkZXI7Ci0JQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1Mgc3VzTW9kZU1pc2NJbmZvOwotCVVDSEFSIHVjSW50ZXJuYWxNb2RlTnVtYmVyOwotCVVDSEFSIHVjUmVmcmVzaFJhdGU7Ci19IEFUT01fRFREX0ZPUk1BVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RURF9GT1JNQVQKK3sKKyAgVVNIT1JUICB1c1BpeENsazsKKyAgVVNIT1JUICB1c0hBY3RpdmU7CisgIFVTSE9SVCAgdXNIQmxhbmtpbmdfVGltZTsKKyAgVVNIT1JUICB1c1ZBY3RpdmU7CisgIFVTSE9SVCAgdXNWQmxhbmtpbmdfVGltZTsJCQkKKyAgVVNIT1JUICB1c0hTeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzSFN5bmNXaWR0aDsKKyAgVVNIT1JUICB1c1ZTeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzVlN5bmNXaWR0aDsKKyAgVVNIT1JUICB1c0ltYWdlSFNpemU7CisgIFVTSE9SVCAgdXNJbWFnZVZTaXplOworICBVQ0hBUiAgIHVjSEJvcmRlcjsKKyAgVUNIQVIgICB1Y1ZCb3JkZXI7CisgIEFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTIHN1c01vZGVNaXNjSW5mbzsKKyAgVUNIQVIgICB1Y0ludGVybmFsTW9kZU51bWJlcjsKKyAgVUNIQVIgICB1Y1JlZnJlc2hSYXRlOworfUFUT01fRFREX0ZPUk1BVDsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gTFZEU19JbmZvVGFibGUgKi8KLS8qICAgKiBOZWVkIGEgZG9jdW1lbnQgdG8gZGVzY3JpYmUgdGhpcyB0YWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBMVkRTX0luZm9UYWJsZSAKKy8vICAqIE5lZWQgYSBkb2N1bWVudCB0byBkZXNjcmliZSB0aGlzIHRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAjZGVmaW5lIFNVUFBPUlRFRF9MQ0RfUkVGUkVTSFJBVEVfMzBIeiAgICAgICAgICAweDAwMDQKICNkZWZpbmUgU1VQUE9SVEVEX0xDRF9SRUZSRVNIUkFURV80MEh6ICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBTVVBQT1JURURfTENEX1JFRlJFU0hSQVRFXzUwSHogICAgICAgICAgMHgwMDEwCiAjZGVmaW5lIFNVUFBPUlRFRF9MQ0RfUkVGUkVTSFJBVEVfNjBIeiAgICAgICAgICAweDAwMjAKIAotLyogT25jZSBEQUwgc2VlcyB0aGlzIENBUCBpcyBzZXQsIGl0IHdpbGwgcmVhZCBFRElEIGZyb20gTENEIG9uIGl0cyBvd24gaW5zdGVhZCBvZiB1c2luZyBzTENEVGltaW5nIGluIEFUT01fTFZEU19JTkZPX1YxMi4gKi8KLS8qIE90aGVyIGVudHJpZXMgaW4gQVRPTV9MVkRTX0lORk9fVjEyIGFyZSBzdGlsbCB2YWxpZC91c2VmdWwgdG8gREFMICovCi0jZGVmaW5lCUxDRFBBTkVMX0NBUF9SRUFEX0VESUQJCQkJCQkJCQkweDEKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9MVkRTX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9EVERfRk9STUFUICAgICBzTENEVGltaW5nOworICBVU0hPUlQgICAgICAgICAgICAgIHVzTW9kZVBhdGNoVGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsgICAgIC8vUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4KKyAgVVNIT1JUICAgICAgICAgICAgICB1c09mZkRlbGF5SW5NczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VEaWdPbnRvREVpbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlREV0b0JMT25pbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNMVkRTX01pc2M7ICAgICAgICAgICAgICAgLy8gQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDQ6ez0wOkxESSBmb3JtYXQgZm9yIFJHQjg4OCwgPTEgRlBESSBmb3JtYXQgZm9yIFJHQjg4OH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1BhbmVsSWRlbnRpZmljYXRpb247CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKK31BVE9NX0xWRFNfSU5GTzsKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgc0xDRFRpbWluZzsKLQlVU0hPUlQgdXNNb2RlUGF0Y2hUYWJsZU9mZnNldDsKLQlVU0hPUlQgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsJLyogUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4gKi8KLQlVU0hPUlQgdXNPZmZEZWxheUluTXM7Ci0JVUNIQVIgdWNQb3dlclNlcXVlbmNlRGlnT250b0RFaW4xME1zOwotCVVDSEFSIHVjUG93ZXJTZXF1ZW5jZURFdG9CTE9uaW4xME1zOwotCVVDSEFSIHVjTFZEU19NaXNjOwkvKiAgQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfSAqLwotCS8qICBCaXQ0Ons9MDpMREkgZm9ybWF0IGZvciBSR0I4ODgsID0xIEZQREkgZm9ybWF0IGZvciBSR0I4ODh9ICovCi0JLyogIEJpdDU6ez0wOlNwYXRpYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgU3BhdGlhbCBEaXRoZXJpbmcgZW5hYmxlZH0gKi8KLQkvKiAgQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9ICovCi0JVUNIQVIgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKLQlVQ0hBUiB1Y1BhbmVsSWRlbnRpZmljYXRpb247Ci0JVUNIQVIgdWNTU19JZDsKLX0gQVRPTV9MVkRTX0lORk87CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTFZEU19JTkZPX1YxMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX0RURF9GT1JNQVQgICAgIHNMQ0RUaW1pbmc7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNFeHRJbmZvVGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsgICAgIC8vUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4KKyAgVVNIT1JUICAgICAgICAgICAgICB1c09mZkRlbGF5SW5NczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VEaWdPbnRvREVpbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlREV0b0JMT25pbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNMVkRTX01pc2M7ICAgICAgICAgICAgICAgLy8gQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDQ6ez0wOkxESSBmb3JtYXQgZm9yIFJHQjg4OCwgPTEgRlBESSBmb3JtYXQgZm9yIFJHQjg4OH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1BhbmVsSWRlbnRpZmljYXRpb247CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0xDRFZlbmRlcklEOworICBVU0hPUlQgICAgICAgICAgICAgIHVzTENEUHJvZHVjdElEOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwOyAKKwlVQ0hBUgkJCQkJCQkJdWNQYW5lbEluZm9TaXplOwkJCQkJLy8gIHN0YXJ0IGZyb20gQVRPTV9EVERfRk9STUFUIHRvIGVuZCBvZiBwYW5lbCBpbmZvLCBpbmNsdWRlIEV4dEluZm9UYWJsZQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9MVkRTX0lORk9fVjEyOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9MVkRTX0lORk9fVjEyIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgc0xDRFRpbWluZzsKLQlVU0hPUlQgdXNFeHRJbmZvVGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzU3VwcG9ydGVkUmVmcmVzaFJhdGU7CS8qIFJlZmVyIHRvIHBhbmVsIGluZm8gdGFibGUgaW4gQVRPTUJJT1MgZXh0ZW5zaW9uIFNwZWMuICovCi0JVVNIT1JUIHVzT2ZmRGVsYXlJbk1zOwotCVVDSEFSIHVjUG93ZXJTZXF1ZW5jZURpZ09udG9ERWluMTBNczsKLQlVQ0hBUiB1Y1Bvd2VyU2VxdWVuY2VERXRvQkxPbmluMTBNczsKLQlVQ0hBUiB1Y0xWRFNfTWlzYzsJLyogIEJpdDA6ez0wOnNpbmdsZSwgPTE6ZHVhbH0sQml0MSB7PTA6NjY2UkdCLCA9MTo4ODhSR0J9LEJpdDI6Mzp7R3JleSBsZXZlbH0gKi8KLQkvKiAgQml0NDp7PTA6TERJIGZvcm1hdCBmb3IgUkdCODg4LCA9MSBGUERJIGZvcm1hdCBmb3IgUkdCODg4fSAqLwotCS8qICBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9ICovCi0JLyogIEJpdDY6ez0wOlRlbXBvcmFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFRlbXBvcmFsIERpdGhlcmluZyBlbmFibGVkfSAqLwotCVVDSEFSIHVjUGFuZWxEZWZhdWx0UmVmcmVzaFJhdGU7Ci0JVUNIQVIgdWNQYW5lbElkZW50aWZpY2F0aW9uOwotCVVDSEFSIHVjU1NfSWQ7Ci0JVVNIT1JUIHVzTENEVmVuZGVySUQ7Ci0JVVNIT1JUIHVzTENEUHJvZHVjdElEOwotCVVDSEFSIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwOwotCVVDSEFSIHVjUGFuZWxJbmZvU2l6ZTsJLyogICBzdGFydCBmcm9tIEFUT01fRFREX0ZPUk1BVCB0byBlbmQgb2YgcGFuZWwgaW5mbywgaW5jbHVkZSBFeHRJbmZvVGFibGUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBBVE9NX0xWRFNfSU5GT19WMTI7CisvL0RlZmluaXRpb25zIGZvciB1Y0xDRFBhbmVsX1NwZWNpYWxIYW5kbGluZ0NhcDoKKworLy9PbmNlIERBTCBzZWVzIHRoaXMgQ0FQIGlzIHNldCwgaXQgd2lsbCByZWFkIEVESUQgZnJvbSBMQ0Qgb24gaXRzIG93biBpbnN0ZWFkIG9mIHVzaW5nIHNMQ0RUaW1pbmcgaW4gQVRPTV9MVkRTX0lORk9fVjEyLiAKKy8vT3RoZXIgZW50cmllcyBpbiBBVE9NX0xWRFNfSU5GT19WMTIgYXJlIHN0aWxsIHZhbGlkL3VzZWZ1bCB0byBEQUwgCisjZGVmaW5lCUxDRFBBTkVMX0NBUF9SRUFEX0VESUQgICAgICAgICAgICAgICAgICAweDEKKworLy9JZiBhIGRlc2lnbiBzdXBwb3J0cyBEUlIgKGR5bmFtaWMgcmVmcmVzaCByYXRlKSBvbiBpbnRlcm5hbCBwYW5lbHMgKExWRFMgb3IgRURQKSwgdGhpcyBjYXAgaXMgc2V0IGluIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwIHRvZ2V0aGVyCisvL3dpdGggbXVsdGlwbGUgc3VwcG9ydGVkIHJlZnJlc2ggcmF0ZXNAdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZS4gVGhpcyBjYXAgc2hvdWxkIG5vdCBiZSBzZXQgd2hlbiBvbmx5IHNsb3cgcmVmcmVzaCByYXRlIGlzIHN1cHBvcnRlZCAoc3RhdGljCisvL3JlZnJlc2ggcmF0ZSBzd2l0Y2ggYnkgU1cuIFRoaXMgaXMgb25seSB2YWxpZCBmcm9tIEFUT01fTFZEU19JTkZPX1YxMgorI2RlZmluZQlMQ0RQQU5FTF9DQVBfRFJSX1NVUFBPUlRFRCAgICAgICAgICAgICAgMHgyCisKKy8vVXNlIHRoaXMgY2FwIGJpdCBmb3IgYSBxdWljayByZWZlcmVuY2Ugd2hldGhlciBhbiBlbWJhZGRlZCBwYW5lbCAoTENEMSApIGlzIExWRFMgb3IgZURQLgorI2RlZmluZQlMQ0RQQU5FTF9DQVBfZURQICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisKKworLy9Db2xvciBCaXQgRGVwdGggZGVmaW5pdGlvbiBpbiBFRElEIFYxLjQgQEJZVEUgMTRoCisvL0JpdCA2ICA1ICA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDAgIDAgIDAgIC0gIENvbG9yIGJpdCBkZXB0aCBpcyB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMCAgMCAgMSAgLSAgNiBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDAgIDEgIDAgIC0gIDggQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAwICAxICAxICAtIDEwIEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMSAgMCAgMCAgLSAxMiBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDEgIDAgIDEgIC0gMTQgQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAxICAxICAwICAtIDE2IEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMSAgMSAgMSAgLSBSZXNlcnZlZAorCisjZGVmaW5lIFBBTkVMX0NPTE9SX0JJVF9ERVBUSF9NQVNLICAgIDB4NzAKKworLy8gQml0Nzp7PTA6UmFuZG9tIERpdGhlcmluZyBkaXNhYmxlZDsxIFJhbmRvbSBEaXRoZXJpbmcgZW5hYmxlZH0gICAKKyNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUiAgIDB4ODAKKyNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUl9NQVNLICAgMHg4MAorCiAKICNkZWZpbmUgQVRPTV9MVkRTX0lORk9fTEFTVCAgQVRPTV9MVkRTX0lORk9fVjEyCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BBVENIX1JFQ09SRF9NT0RFIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7Ci0JVVNIT1JUIHVzSERpc3A7Ci0JVVNIT1JUIHVzVkRpc3A7Ci19IEFUT01fUEFUQ0hfUkVDT1JEX01PREU7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUEFUQ0hfUkVDT1JEX01PREUKK3sKKyAgVUNIQVIgICAgIHVjUmVjb3JkVHlwZTsKKyAgVVNIT1JUICAgIHVzSERpc3A7CisgIFVTSE9SVCAgICB1c1ZEaXNwOworfUFUT01fUEFUQ0hfUkVDT1JEX01PREU7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0xDRF9SVFNfUkVDT1JEIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7Ci0JVUNIQVIgdWNSVFNWYWx1ZTsKLX0gQVRPTV9MQ0RfUlRTX1JFQ09SRDsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9MQ0RfUlRTX1JFQ09SRAoreworICBVQ0hBUiAgICAgdWNSZWNvcmRUeXBlOworICBVQ0hBUiAgICAgdWNSVFNWYWx1ZTsKK31BVE9NX0xDRF9SVFNfUkVDT1JEOwogCi0vKiAhISBJZiB0aGUgcmVjb3JkIGJlbG93IGV4aXRzLCBpdCBzaG91ZCBhbHdheXMgYmUgdGhlIGZpcnN0IHJlY29yZCBmb3IgZWFzeSB1c2UgaW4gY29tbWFuZCB0YWJsZSEhISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTENEX01PREVfQ09OVFJPTF9DQVAgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVU0hPUlQgdXNMQ0RDYXA7Ci19IEFUT01fTENEX01PREVfQ09OVFJPTF9DQVA7CisvLyEhIElmIHRoZSByZWNvcmQgYmVsb3cgZXhpdHMsIGl0IHNob3VkIGFsd2F5cyBiZSB0aGUgZmlyc3QgcmVjb3JkIGZvciBlYXN5IHVzZSBpbiBjb21tYW5kIHRhYmxlISEhIAorLy8gVGhlIHJlY29yZCBiZWxvdyBpcyBvbmx5IHVzZWQgd2hlbiBMVkRTX0luZm8gaXMgcHJlc2VudC4gRnJvbSBBVE9NX0xWRFNfSU5GT19WMTIsIHVzZSB1Y0xDRFBhbmVsX1NwZWNpYWxIYW5kbGluZ0NhcCBpbnN0ZWFkLgordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0xDRF9NT0RFX0NPTlRST0xfQ0FQCit7CisgIFVDSEFSICAgICB1Y1JlY29yZFR5cGU7CisgIFVTSE9SVCAgICB1c0xDRENhcDsKK31BVE9NX0xDRF9NT0RFX0NPTlRST0xfQ0FQOwogCiAjZGVmaW5lIExDRF9NT0RFX0NBUF9CTF9PRkYgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBMQ0RfTU9ERV9DQVBfQ1JUQ19PRkYgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTENEX01PREVfQ0FQX1BBTkVMX09GRiAgICAgICAgICAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZBS0VfRURJRF9QQVRDSF9SRUNPUkQgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVQ0hBUiB1Y0Zha2VFRElETGVuZ3RoOwotCVVDSEFSIHVjRmFrZUVESURTdHJpbmdbMV07CS8qICBUaGlzIGFjdHVhbGx5IGhhcyB1Y0Zha2VFZGlkTGVuZ3RoIGVsZW1lbnRzLiAqLwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRAoreworICBVQ0hBUiB1Y1JlY29yZFR5cGU7CisgIFVDSEFSIHVjRmFrZUVESURMZW5ndGg7CisgIFVDSEFSIHVjRmFrZUVESURTdHJpbmdbMV07ICAgIC8vIFRoaXMgYWN0dWFsbHkgaGFzIHVjRmFrZUVkaWRMZW5ndGggZWxlbWVudHMuCiB9IEFUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVU0hPUlQgdXNIU2l6ZTsKLQlVU0hPUlQgdXNWU2l6ZTsKLX0gQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRDsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRAoreworICAgVUNIQVIgICAgdWNSZWNvcmRUeXBlOworICAgVVNIT1JUCQl1c0hTaXplOworICAgVVNIT1JUCQl1c1ZTaXplOworfUFUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQ7CiAKICNkZWZpbmUgTENEX01PREVfUEFUQ0hfUkVDT1JEX01PREVfVFlQRSAgICAgICAxCiAjZGVmaW5lIExDRF9SVFNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgMgpAQCAtMjMwNiwyMSArMjgyOSwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKlNwcmVhZCBTcGVjdHJ1bSBJbmZvIFRhYmxlIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHVjVGFibGVGb3JtYXRSZXZpc2lvbj0xICovCi0vKiB1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UIHsKLQlVU0hPUlQgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CS8qIEJpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIE90aGVyczpUQkQgKi8KLQlVQ0hBUiB1Y1NTX1N0ZXA7Ci0JVUNIQVIgdWNTU19EZWxheTsKLQlVQ0hBUiB1Y1NTX0lkOwotCVVDSEFSIHVjUmVjb21tZW5kZWRSZWZfRGl2OwotCVVDSEFSIHVjU1NfUmFuZ2U7CS8qIGl0IHdhcyByZXNlcnZlZCBmb3IgVjExICovCi19IEFUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQ7CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsgCisgIFVDSEFSICAgICAgICAgICAgICAgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CSAgICAvL0JpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIEJpdDI9MTogUENJRSBSRUZDTEsgU1MgPTAgaXRlcm5hbCBQUExMIFNTICBPdGhlcnM6VEJECisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19TdGVwOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjU1NfRGVsYXk7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1NTX1JhbmdlOyAgICAgICAgICAgICAgIC8vaXQgd2FzIHJlc2VydmVkIGZvciBWMTEKK31BVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCiAjZGVmaW5lIEFUT01fTUFYX1NTX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUT01fRFBfU1NfSUQxCQkJCQkJCQkJCQkJIDB4MGYxCS8qICBTUyBtb2R1bGF0aW9uIGZyZXE9MzBrICovCi0jZGVmaW5lIEFUT01fRFBfU1NfSUQyCQkJCQkJCQkJCQkJIDB4MGYyCS8qICBTUyBtb2R1bGF0aW9uIGZyZXE9MzNrICovCisjZGVmaW5lIEFUT01fRFBfU1NfSUQxCQkJCQkJCQkJCQkJIDB4MGYxCQkJLy8gU1MgSUQgZm9yIGludGVybmFsIERQIHN0cmVhbSBhdCAyLjdHaHouIGlmIEFUT01fRFBfU1NfSUQyIGRvZXMgbm90IGV4aXN0IGluIFNTX0luZm9UYWJsZSwgaXQgaXMgdXNlZCBmb3IgaW50ZXJuYWwgRFAgc3RyZWFtIGF0IDEuNjJHaHogYXMgd2VsbC4gCisjZGVmaW5lIEFUT01fRFBfU1NfSUQyCQkJCQkJCQkJCQkJIDB4MGYyCQkJLy8gU1MgSUQgZm9yIGludGVybmFsIERQIHN0cmVhbSBhdCAxLjYyR2h6LCBpZiBpdCBleGlzdHMgaW4gU1NfSW5mb1RhYmxlLiAKKyNkZWZpbmUgQVRPTV9MVkxJTktfMjcwME1Iel9TU19JRCAgICAgICAgICAgICAgMHgwZjMgICAgICAvLyBTUyBJRCBmb3IgTFYgbGluayB0cmFuc2xhdG9yIGNoaXAgYXQgMi43R2h6CisjZGVmaW5lIEFUT01fTFZMSU5LXzE2MjBNSHpfU1NfSUQgICAgICAgICAgICAgIDB4MGY0ICAgICAgLy8gU1MgSUQgZm9yIExWIGxpbmsgdHJhbnNsYXRvciBjaGlwIGF0IDEuNjJHaHoKKwogCiAjZGVmaW5lIEFUT01fU1NfRE9XTl9TUFJFQURfTU9ERV9NQVNLICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgQVRPTV9TU19ET1dOX1NQUkVBRF9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMApAQCAtMjMyOSwyOSArMjg1NiwzMCBAQAogI2RlZmluZSBBVE9NX0lOVEVSTkFMX1NTX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFUT01fRVhURVJOQUxfU1NfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgRVhFQ19TU19TVEVQX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgMgotI2RlZmluZSBFWEVDX1NTX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEVYRUNfU1NfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgICAgCiAjZGVmaW5lIEFDVElWRURBVEFfVE9fQkxPTl9ERUxBWV9TSElGVCAgICAgICAgIDQKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQgYXNTU19JbmZvW0FUT01fTUFYX1NTX0VOVFJZXTsKLX0gQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1NQUkVBRF9TUEVDVFJVTV9JTkZPCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsKKyAgQVRPTV9TUFJFQURfU1BFQ1RSVU1fQVNTSUdOTUVOVCAgIGFzU1NfSW5mb1tBVE9NX01BWF9TU19FTlRSWV07Cit9QVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gQW5hbG9nVFZfSW5mb1RhYmxlIChUb3AgbGV2ZWwpICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHVjVFZCb290VXBEZWZhdWx0U3RkIGRlZmluaXRvbjogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIEFuYWxvZ1RWX0luZm9UYWJsZSAoVG9wIGxldmVsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy91Y1RWQm9vdFVwRGVmYXVsdFN0ZCBkZWZpbml0b246CiAKLS8qIEFUT01fVFZfTlRTQyAgICAgICAgICAgICAgICAxICovCi0vKiBBVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMiAqLwotLyogQVRPTV9UVl9QQUwgICAgICAgICAgICAgICAgIDMgKi8KLS8qIEFUT01fVFZfUEFMTSAgICAgICAgICAgICAgICA0ICovCi0vKiBBVE9NX1RWX1BBTENOICAgICAgICAgICAgICAgNSAqLwotLyogQVRPTV9UVl9QQUxOICAgICAgICAgICAgICAgIDYgKi8KLS8qIEFUT01fVFZfUEFMNjAgICAgICAgICAgICAgICA3ICovCi0vKiBBVE9NX1RWX1NFQ0FNICAgICAgICAgICAgICAgOCAqLworLy9BVE9NX1RWX05UU0MgICAgICAgICAgICAgICAgMQorLy9BVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMgorLy9BVE9NX1RWX1BBTCAgICAgICAgICAgICAgICAgMworLy9BVE9NX1RWX1BBTE0gICAgICAgICAgICAgICAgNAorLy9BVE9NX1RWX1BBTENOICAgICAgICAgICAgICAgNQorLy9BVE9NX1RWX1BBTE4gICAgICAgICAgICAgICAgNgorLy9BVE9NX1RWX1BBTDYwICAgICAgICAgICAgICAgNworLy9BVE9NX1RWX1NFQ0FNICAgICAgICAgICAgICAgOAogCi0vKiB1Y1RWU3VwcHBvcnRlZFN0ZCBkZWZpbml0aW9uOiAqLworLy91Y1RWU3VwcG9ydGVkU3RkIGRlZmluaXRpb246CiAjZGVmaW5lIE5UU0NfU1VQUE9SVCAgICAgICAgICAweDEKICNkZWZpbmUgTlRTQ0pfU1VQUE9SVCAgICAgICAgIDB4MgogCkBAIC0yMzY0LDQ2ICsyODkyLDU4IEBACiAKICNkZWZpbmUgTUFYX1NVUFBPUlRFRF9UVl9USU1JTkcgICAgMgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNUVl9TdXBwb3J0ZWRTdGFuZGFyZDsKLQlVQ0hBUiB1Y1RWX0Jvb3RVcERlZmF1bHRTdGFuZGFyZDsKLQlVQ0hBUiB1Y0V4dF9UVl9BU0lDX0lEOwotCVVDSEFSIHVjRXh0X1RWX0FTSUNfU2xhdmVBZGRyOwotCS8qQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107ICovCi0JQVRPTV9NT0RFX1RJTUlORyBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9UVl9USU1JTkddOwotfSBBVE9NX0FOQUxPR19UVl9JTkZPOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfU3VwcG9ydGVkU3RhbmRhcmQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1RWX0Jvb3RVcERlZmF1bHRTdGFuZGFyZDsgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNFeHRfVFZfQVNJQ19TbGF2ZUFkZHI7CisgIC8qQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Ki8KKyAgQVRPTV9NT0RFX1RJTUlORyAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Cit9QVRPTV9BTkFMT0dfVFZfSU5GTzsKIAogI2RlZmluZSBNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR19WMV8yICAgIDMKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk9fVjFfMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfU3VwcG9ydGVkU3RhbmRhcmQ7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkOwotCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX0lEOwotCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX1NsYXZlQWRkcjsKLQlBVE9NX0RURF9GT1JNQVQgICAgICAgICAgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfVFZfVElNSU5HXTsKLX0gQVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk9fVjFfMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNUVl9TdXBwb3J0ZWRTdGFuZGFyZDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjRXh0X1RWX0FTSUNfSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX1NsYXZlQWRkcjsKKyAgQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Cit9QVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9EUENEX0lORk8KK3sKKyAgVUNIQVIgICB1Y1JldmlzaW9uTnVtYmVyOyAgICAgICAgLy8xMGggOiBSZXZpc2lvbiAxLjA7IDExaCA6IFJldmlzaW9uIDEuMSAgIAorICBVQ0hBUiAgIHVjTWF4TGlua1JhdGU7ICAgICAgICAgICAvLzA2aCA6IDEuNjJHYnBzIHBlciBsYW5lOyAwQWggPSAyLjdHYnBzIHBlciBsYW5lCisgIFVDSEFSICAgdWNNYXhMYW5lOyAgICAgICAgICAgICAgIC8vQml0cyA0OjAgPSBNQVhfTEFORV9DT1VOVCAoMS8yLzQpLiBCaXQgNyA9IEVOSEFOQ0VEX0ZSQU1FX0NBUCAKKyAgVUNIQVIgICB1Y01heERvd25TcHJlYWQ7ICAgICAgICAgLy9CaXQwID0gMDogTm8gRG93biBzcHJlYWQ7IEJpdDAgPSAxOiAwLjUlIChTdWJqZWN0IHRvIGNoYW5nZSBhY2NvcmRpbmcgdG8gRFAgc3BlYykKK31BVE9NX0RQQ0RfSU5GTzsKKworI2RlZmluZSBBVE9NX0RQQ0RfTUFYX0xBTkVfTUFTSyAgICAweDFGCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBWUkFNIHVzYWdlIGFuZCB0aGVpciBkZWZpbml0aW9ucyAqLworLy8gVlJBTSB1c2FnZSBhbmQgdGhlaXIgZGVmaW50aW9ucwogCi0vKiAgT25lIGNodW5rIG9mIFZSQU0gdXNlZCBieSBCaW9zIGFyZSBmb3IgSFdJQ09OIHN1cmZhY2VzLEVESUQgZGF0YS4gKi8KLS8qICBDdXJyZW50IE1vZGUgdGltaW5nIGFuZCBEYWlsIFRpbWluZyBhbmQvb3IgU1REIHRpbWluZyBkYXRhIEVBQ0ggZGV2aWNlLiBUaGV5IGNhbiBiZSBicm9rZW4gZG93biBhcyBiZWxvdy4gKi8KLS8qICBBbGwgdGhlIGFkZHJlc3NlcyBiZWxvdyBhcmUgdGhlIG9mZnNldHMgZnJvbSB0aGUgZnJhbWUgYnVmZmVyIHN0YXJ0LlRoZXkgYWxsIE1VU1QgYmUgRHdvcmQgYWxpZ25lZCEgKi8KLS8qICBUbyBkcml2ZXI6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5IHBvcnRpb249bW1GQl9TVEFSVCg0SyBhbGlnbmVkKStBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFIgKi8KLS8qICBUbyBCaW9zOiAgQVRPTUJJT1NfVlJBTV9VU0FHRV9TVEFSVF9BRERSK0FUT01feF9BRERSLT5NTV9JTkRFWCAqLworLy8gT25lIGNodW5rIG9mIFZSQU0gdXNlZCBieSBCaW9zIGFyZSBmb3IgSFdJQ09OIHN1cmZhY2VzLEVESUQgZGF0YS4KKy8vIEN1cnJlbnQgTW9kZSB0aW1pbmcgYW5kIERhaWwgVGltaW5nIGFuZC9vciBTVEQgdGltaW5nIGRhdGEgRUFDSCBkZXZpY2UuIFRoZXkgY2FuIGJlIGJyb2tlbiBkb3duIGFzIGJlbG93LgorLy8gQWxsIHRoZSBhZGRyZXNzZXMgYmVsb3cgYXJlIHRoZSBvZmZzZXRzIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBzdGFydC5UaGV5IGFsbCBNVVNUIGJlIER3b3JkIGFsaWduZWQhCisvLyBUbyBkcml2ZXI6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5IHBvcnRpb249bW1GQl9TVEFSVCg0SyBhbGlnbmVkKStBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFIKKy8vIFRvIEJpb3M6ICBBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFItPk1NX0lOREVYIAogCiAjaWZuZGVmIFZFU0FfTUVNT1JZX0lOXzY0S19CTE9DSwotI2RlZmluZSBWRVNBX01FTU9SWV9JTl82NEtfQkxPQ0sgICAgICAgIDB4MTAwCS8qIDI1Nio2NEs9MTZNYiAoTWF4LiBWRVNBIG1lbW9yeSBpcyAxNk1iISkgKi8KKyNkZWZpbmUgVkVTQV9NRU1PUllfSU5fNjRLX0JMT0NLICAgICAgICAweDEwMCAgICAgICAvLzI1Nio2NEs9MTZNYiAoTWF4LiBWRVNBIG1lbW9yeSBpcyAxNk1iISkKICNlbmRpZgogCi0jZGVmaW5lIEFUT01fRURJRF9SQVdfREFUQVNJWkUgICAgICAgICAgMjU2CS8qIEluIEJ5dGVzICovCi0jZGVmaW5lIEFUT01fSFdJQ09OX1NVUkZBQ0VfU0laRSAgICAgICAgNDA5NgkvKiBJbiBCeXRlcyAqLworI2RlZmluZSBBVE9NX0VESURfUkFXX0RBVEFTSVpFICAgICAgICAgIDI1NiAgICAgICAgIC8vSW4gQnl0ZXMKKyNkZWZpbmUgQVRPTV9IV0lDT05fU1VSRkFDRV9TSVpFICAgICAgICA0MDk2ICAgICAgICAvL0luIEJ5dGVzCiAjZGVmaW5lIEFUT01fSFdJQ09OX0lORk9UQUJMRV9TSVpFICAgICAgMzIKICNkZWZpbmUgTUFYX0RURF9NT0RFX0lOX1ZSQU0gICAgICAgICAgICA2Ci0jZGVmaW5lIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKE1BWF9EVERfTU9ERV9JTl9WUkFNKjI4KQkvKiAyOD0gKFNJWkVPRiBBVE9NX0RURF9GT1JNQVQpICovCi0jZGVmaW5lIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKDMyKjgpCS8qIDMyIGlzIGEgcHJlZGVmaW5lZCBudW1iZXIsOD0gKFNJWkVPRiBBVE9NX1NURF9GT1JNQVQpICovCisjZGVmaW5lIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKE1BWF9EVERfTU9ERV9JTl9WUkFNKjI4KSAgICAvLzI4PSAoU0laRU9GIEFUT01fRFREX0ZPUk1BVCkgCisjZGVmaW5lIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSAgMzIqOCAgICAgICAgICAgICAgICAgICAgICAgICAvLzMyIGlzIGEgcHJlZGVmaW5lZCBudW1iZXIsOD0gKFNJWkVPRiBBVE9NX1NURF9GT1JNQVQpCiAjZGVmaW5lIERGUF9FTkNPREVSX1RZUEVfT0ZGU0VUCQkJCQkweDgwCiAjZGVmaW5lIERQX0VOQ09ERVJfTEFORV9OVU1fT0ZGU0VUCQkJMHg4NAogI2RlZmluZSBEUF9FTkNPREVSX0xJTktfUkFURV9PRkZTRVQJCQkweDg4CkBAIC0yNDE3LDcgKzI5NTcsNyBAQAogCiAjZGVmaW5lIEFUT01fTENEMV9FRElEX0FERFIgICAgICAgICAgICAgKEFUT01fQ1JUMV9TVERfTU9ERV9UQkxfQUREUiArIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSkKICNkZWZpbmUgQVRPTV9MQ0QxX0RURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9MQ0QxX0VESURfQUREUiArIEFUT01fRURJRF9SQVdfREFUQVNJWkUpCi0jZGVmaW5lIEFUT01fTENEMV9TVERfTU9ERV9UQkxfQUREUgkoQVRPTV9MQ0QxX0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0xDRDFfU1REX01PREVfVEJMX0FERFIgICAJKEFUT01fTENEMV9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKIAogI2RlZmluZSBBVE9NX1RWMV9EVERfTU9ERV9UQkxfQUREUiAgICAgIChBVE9NX0xDRDFfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKQEAgLTI0MzEsMTMgKzI5NzEsMTMgQEAKIAogI2RlZmluZSBBVE9NX0xDRDJfRURJRF9BRERSICAgICAgICAgICAgIChBVE9NX0NSVDJfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAjZGVmaW5lIEFUT01fTENEMl9EVERfTU9ERV9UQkxfQUREUiAgICAgKEFUT01fTENEMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQotI2RlZmluZSBBVE9NX0xDRDJfU1REX01PREVfVEJMX0FERFIJKEFUT01fTENEMl9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKKyNkZWZpbmUgQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICAgCShBVE9NX0xDRDJfRFREX01PREVfVEJMX0FERFIgKyBBVE9NX0RURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKLSNkZWZpbmUgQVRPTV9UVjJfRURJRF9BRERSICAgICAgICAgICAgICAoQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQotI2RlZmluZSBBVE9NX1RWMl9EVERfTU9ERV9UQkxfQUREUiAgICAgIChBVE9NX1RWMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQotI2RlZmluZSBBVE9NX1RWMl9TVERfTU9ERV9UQkxfQUREUgkgIChBVE9NX1RWMl9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKKyNkZWZpbmUgQVRPTV9ERlA2X0VESURfQUREUiAgICAgICAgICAgICAoQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0RGUDZfRFREX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDZfRURJRF9BRERSICsgQVRPTV9FRElEX1JBV19EQVRBU0laRSkKKyNkZWZpbmUgQVRPTV9ERlA2X1NURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9ERlA2X0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQogCi0jZGVmaW5lIEFUT01fREZQMl9FRElEX0FERFIgICAgICAgICAgICAgKEFUT01fVFYyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0RGUDJfRURJRF9BRERSICAgICAgICAgICAgIChBVE9NX0RGUDZfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAjZGVmaW5lIEFUT01fREZQMl9EVERfTU9ERV9UQkxfQUREUiAgICAgKEFUT01fREZQMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQogI2RlZmluZSBBVE9NX0RGUDJfU1REX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDJfRFREX01PREVfVEJMX0FERFIgKyBBVE9NX0RURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKQEAgLTI0NTcsNTMzICsyOTk3LDg1MCBAQAogI2RlZmluZSBBVE9NX0RGUDVfRFREX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDVfRURJRF9BRERSICsgQVRPTV9FRElEX1JBV19EQVRBU0laRSkKICNkZWZpbmUgQVRPTV9ERlA1X1NURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9ERlA1X0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQogCi0jZGVmaW5lIEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIJKEFUT01fREZQNV9TVERfTU9ERV9UQkxfQUREUitBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCisjZGVmaW5lIEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIJCQkJKEFUT01fREZQNV9TVERfTU9ERV9UQkxfQUREUitBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpICAgICAgIAogCi0jZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCAgICAgICAgKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAyNTYpCi0jZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9FTkQgICAgICAgICAgKEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCArIDUxMikKKyNkZWZpbmUgQVRPTV9TVEFDS19TVE9SQUdFX1NUQVJUICAgICAgICAoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUisyNTYpICAgICAgIAorI2RlZmluZSBBVE9NX1NUQUNLX1NUT1JBR0VfRU5EICAgICAgICAgIEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCs1MTIgICAgICAgIAogCi0vKiBUaGUgc2l6ZSBiZWxvdyBpcyBpbiBLYiEgKi8KKy8vVGhlIHNpemUgYmVsb3cgaXMgaW4gS2IhCiAjZGVmaW5lIEFUT01fVlJBTV9SRVNFUlZFX1NJWkUgICAgICAgICAoKCgoQVRPTV9TVEFDS19TVE9SQUdFX0VORCAtIEFUT01fSFdJQ09OMV9TVVJGQUNFX0FERFIpPj4xMCkrNCkmMHhGRkZDKQotCisgICAKICNkZWZpbmUJQVRPTV9WUkFNX09QRVJBVElPTl9GTEFHU19NQVNLICAgICAgICAgMHhDMDAwMDAwMEwKICNkZWZpbmUgQVRPTV9WUkFNX09QRVJBVElPTl9GTEFHU19TSElGVCAgICAgICAgMzAKICNkZWZpbmUJQVRPTV9WUkFNX0JMT0NLX05FRURTX05PX1JFU0VSVkFUSU9OICAgMHgxCiAjZGVmaW5lCUFUT01fVlJBTV9CTE9DS19ORUVEU19SRVNFUlZBVElPTiAgICAgIDB4MAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gVlJBTV9Vc2FnZUJ5RmlybXdhcmVUYWJsZSAqLwotLyogIE5vdGUxOiBUaGlzIHRhYmxlIGlzIGZpbGxlZCBieSBTZXRCaW9zUmVzZXJ2YXRpb25TdGFydEluRkIgaW4gQ29yZUNvbW1TdWJzLmFzbSAqLwotLyogICAgICAgICBhdCBydW5uaW5nIHRpbWUuICovCi0vKiAgbm90ZTI6IEZyb20gUlY3NzAsIHRoZSBtZW1vcnkgaXMgbW9yZSB0aGFuIDMyYml0IGFkZHJlc3NhYmxlLCBzbyB3ZSB3aWxsIGNoYW5nZSAqLwotLyogICAgICAgICB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTQsIHRoZSBzdHJjdXR1cmUgcmVtYWlucyAqLwotLyogICAgICAgICBleGFjdGx5IHNhbWUgYXMgMS4xIGFuZCAxLjIgKDEuMyBpcyBuZXZlciBpbiB1c2UpLCBidXQgdWxTdGFydEFkZHJVc2VkQnlGaXJtd2FyZSAqLwotLyogICAgICAgICAoaW4gb2Zmc2V0IHRvIHN0YXJ0IG9mIG1lbW9yeSBhZGRyZXNzKSBpcyBLQiBhbGlnbmVkIGluc3RlYWQgb2YgYnl0ZSBhbGlnZW5kLiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIFZSQU1fVXNhZ2VCeUZpcm13YXJlVGFibGUKKy8vIE5vdGUxOiBUaGlzIHRhYmxlIGlzIGZpbGxlZCBieSBTZXRCaW9zUmVzZXJ2YXRpb25TdGFydEluRkIgaW4gQ29yZUNvbW1TdWJzLmFzbQorLy8gICAgICAgIGF0IHJ1bm5pbmcgdGltZS4gICAKKy8vIG5vdGUyOiBGcm9tIFJWNzcwLCB0aGUgbWVtb3J5IGlzIG1vcmUgdGhhbiAzMmJpdCBhZGRyZXNzYWJsZSwgc28gd2Ugd2lsbCBjaGFuZ2UgCisvLyAgICAgICAgdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEsdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj00LCB0aGUgc3RyY3V0dXJlIHJlbWFpbnMgCisvLyAgICAgICAgZXhhY3RseSBzYW1lIGFzIDEuMSBhbmQgMS4yICgxLjMgaXMgbmV2ZXIgaW4gdXNlKSwgYnV0IHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUgCisvLyAgICAgICAgKGluIG9mZnNldCB0byBzdGFydCBvZiBtZW1vcnkgYWRkcmVzcykgaXMgS0IgYWxpZ25lZCBpbnN0ZWFkIG9mIGJ5dGUgYWxpZ2VuZC4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBOb3RlMzoKKy8qIElmIHdlIGNoYW5nZSB1c1Jlc2VydmVkIHRvICJ1c0ZCVXNlZGJ5RHJ2SW5LQiIsIHRoZW4gdG8gVkJJT1MgdGhpcyB1c0ZCVXNlZGJ5RHJ2SW5LQiBpcyBhIHByZWRlZmluZWQsIHVuY2hhbmdlZCBjb25zdGFudCBhY3Jvc3MgVkdBIG9yIG5vbiBWR0EgYWRhcHRlciwKK2ZvciBDQUlMLCBUaGUgc2l6ZSBvZiBGQiBhY2Nlc3MgYXJlYSBpcyBrbm93biwgb25seSB0aGluZyBtaXNzaW5nIGlzIHRoZSBPZmZzZXQgb2YgRkIgQWNjZXNzIGFyZWEsIHNvIHdlIGNhbiAgaGF2ZToKKworSWYgKHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUhPTApCitGQkFjY2Vzc0FyZWFPZmZzZXQ9IHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUgLSB1c0ZCVXNlZGJ5RHJ2SW5LQjsKK1Jlc2VydmVkIGFyZWEgaGFzIGJlZW4gY2xhaW1lZCBieSBWQklPUyBpbmNsdWRpbmcgdGhpcyBGQiBhY2Nlc3MgYXJlYTsgQ0FJTCBkb2Vzbid0IG5lZWQgdG8gcmVzZXJ2ZSBhbnkgZXh0cmEgYXJlYSBmb3IgdGhpcyBwdXJwb3NlCitlbHNlCS8vTm9uIFZHQSBjYXNlCisgaWYgKEZCX1NpemU8PTJHYikKKyAgICBGQkFjY2Vzc0FyZWFPZmZzZXQ9IEZCX1NpemUgLSB1c0ZCVXNlZGJ5RHJ2SW5LQjsKKyBlbHNlCisJICBGQkFjY2Vzc0FyZWFPZmZzZXQ9IEFwZXJfU2l6ZSAtIHVzRkJVc2VkYnlEcnZJbktCCisKK0NBSUwgbmVlZHMgdG8gY2xhaW0gYW4gcmVzZXJ2ZWQgYXJlYSBkZWZpbmVkIGJ5IEZCQWNjZXNzQXJlYU9mZnNldCBhbmQgdXNGQlVzZWRieURydkluS0IgaW4gbm9uIFZHQSBjYXNlLiovCisKICNkZWZpbmUgQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPCQkJMQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GTyB7Ci0JVUxPTkcgdWxTdGFydEFkZHJVc2VkQnlGaXJtd2FyZTsKLQlVU0hPUlQgdXNGaXJtd2FyZVVzZUluS2I7Ci0JVVNIT1JUIHVzUmVzZXJ2ZWQ7Ci19IEFUT01fRklSTVdBUkVfVlJBTV9SRVNFUlZFX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GTworeworICBVTE9ORyAgIHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmU7CisgIFVTSE9SVCAgdXNGaXJtd2FyZVVzZUluS2I7CisgIFVTSE9SVCAgdXNSZXNlcnZlZDsKK31BVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPCi0JICAgIGFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKLX0gQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9VU0FHRV9CWV9GSVJNV0FSRQoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPCWFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKK31BVE9NX1ZSQU1fVVNBR0VfQllfRklSTVdBUkU7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIEdQSU9fUGluX0xVVFRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQgewotCVVTSE9SVCB1c0dwaW9QaW5fQUluZGV4OwotCVVDSEFSIHVjR3Bpb1BpbkJpdFNoaWZ0OwotCVVDSEFSIHVjR1BJT19JRDsKLX0gQVRPTV9HUElPX1BJTl9BU1NJR05NRU5UOworLy8gY2hhbmdlIHZlcmlvbiB0byAxLjUsIHdoZW4gYWxsb3cgZHJpdmVyIHRvIGFsbG9jYXRlIHRoZSB2cmFtIGFyZWEgZm9yIGNvbW1hbmQgdGFibGUgYWNjZXNzLiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPX1YxXzUKK3sKKyAgVUxPTkcgICB1bFN0YXJ0QWRkclVzZWRCeUZpcm13YXJlOworICBVU0hPUlQgIHVzRmlybXdhcmVVc2VJbktiOworICBVU0hPUlQgIHVzRkJVc2VkQnlEcnZJbktiOworfUFUT01fRklSTVdBUkVfVlJBTV9SRVNFUlZFX0lORk9fVjFfNTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19QSU5fTFVUIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQgYXNHUElPX1BpblsxXTsKLX0gQVRPTV9HUElPX1BJTl9MVVQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFX1YxXzUKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GT19WMV81CWFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKK31BVE9NX1ZSQU1fVVNBR0VfQllfRklSTVdBUkVfVjFfNTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gQ29tcG9uZW50VmlkZW9JbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gR1BJT19QaW5fTFVUVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgIHVzR3Bpb1Bpbl9BSW5kZXg7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0dwaW9QaW5CaXRTaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjR1BJT19JRDsKK31BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQ7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0xVVAoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgIHNIZWFkZXI7CisgIEFUT01fR1BJT19QSU5fQVNTSUdOTUVOVAlhc0dQSU9fUGluWzFdOworfUFUT01fR1BJT19QSU5fTFVUOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBDb21wb25lbnRWaWRlb0luZm9UYWJsZQkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKICNkZWZpbmUgR1BJT19QSU5fQUNUSVZFX0hJR0ggICAgICAgICAgMHgxCiAKICNkZWZpbmUgTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFMgICAgNQogCi0vKiAgZGVmaW5pdGlvbnMgZm9yIEFUT01fRF9JTkZPLnVjU2V0dGluZ3MgKi8KLSNkZWZpbmUgQVRPTV9HUElPX1NFVFRJTkdTX0JJVFNISUZUX01BU0sgIDB4MUYJLyogIFs0OjBdICovCi0jZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HU19SRVNFUlZFRF9NQVNLICAweDYwCS8qICBbNjo1XSA9IG11c3QgYmUgemVyb2VkIG91dCAqLwotI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQUNUSVZFX01BU0sgICAgMHg4MAkvKiAgWzddICovCisvLyBkZWZpbml0aW9ucyBmb3IgQVRPTV9EX0lORk8udWNTZXR0aW5ncworI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQklUU0hJRlRfTUFTSyAgMHgxRiAgICAvLyBbNDowXQorI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfUkVTRVJWRURfTUFTSyAgMHg2MCAgICAvLyBbNjo1XSA9IG11c3QgYmUgemVyb2VkIG91dAorI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQUNUSVZFX01BU0sgICAgMHg4MCAgICAvLyBbN10KIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JTkZPIHsKLQlVU0hPUlQgdXNBT2Zmc2V0OwotCVVDSEFSIHVjU2V0dGluZ3M7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9HUElPX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9HUElPX0lORk8KK3sKKyAgVVNIT1JUICB1c0FPZmZzZXQ7CisgIFVDSEFSICAgdWNTZXR0aW5nczsKKyAgVUNIQVIgICB1Y1Jlc2VydmVkOworfUFUT01fR1BJT19JTkZPOwogCi0vKiAgZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWNNaXNjSW5mbyAoYml0IHZlY3RvcikgKi8KKy8vIGRlZmluaXRpb25zIGZvciBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPLnVjTWlzY0luZm8gKGJpdCB2ZWN0b3IpCiAjZGVmaW5lIEFUT01fQ1ZfUkVTVFJJQ1RfRk9STUFUX1NFTEVDVElPTiAgICAgICAgICAgMHgyCiAKLS8qICBkZWZpbml0aW9ucyBmb3IgQVRPTV9DT01QT05FTlRfVklERU9fSU5GTy51YzQ4MGkvdWM0ODBwL3VjNzIwcC91YzEwODBpICovCi0jZGVmaW5lIEFUT01fR1BJT19ERUZBVUxUX01PREVfRU4gICAgICAgICAgICAgICAgICAgMHg4MAkvKiBbN107ICovCi0jZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HX1BFUk1PREVfTUFTSyAgICAgICAgICAgICAgMHg3RgkvKiBbNjowXSAqLworLy8gZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaQorI2RlZmluZSBBVE9NX0dQSU9fREVGQVVMVF9NT0RFX0VOICAgICAgICAgICAgICAgICAgIDB4ODAgLy9bN107CisjZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HX1BFUk1PREVfTUFTSyAgICAgICAgICAgICAgMHg3RiAvL1s2OjBdCiAKLS8qICBkZWZpbml0aW9ucyBmb3IgQVRPTV9DT01QT05FTlRfVklERU9fSU5GTy51Y0xldHRlckJveE1vZGUgKi8KLS8qIExpbmUgMyBvdXQgcHV0IDVWLiAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19BICAgICAgIDB4MDEJLyogcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgMTY6OSAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19CICAgICAgIDB4MDIJLyogcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgMTY6OSAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19TSElGVCAgIDB4MAorLy8gZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWNMZXR0ZXJCb3hNb2RlCisvL0xpbmUgMyBvdXQgcHV0IDVWLgorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19BICAgICAgIDB4MDEgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgMTY6OQorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19CICAgICAgIDB4MDIgICAgIC8vcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgMTY6OQorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19TSElGVCAgIDB4MCAgIAogCi0vKiBMaW5lIDMgb3V0IHB1dCAyLjJWICovCi0jZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0xFVEJPWF9HUElPX0EgMHgwNAkvKiByZXByZXNlbnQgZ3BpbyAzIHN0YXRlIGZvciA0OjMgTGV0dGVyIGJveCAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19MRVRCT1hfR1BJT19CIDB4MDgJLyogcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgNDozIExldHRlciBib3ggKi8KLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfTEVUQk9YX0dQSU9fU0hJRlQgMHgyCisvL0xpbmUgMyBvdXQgcHV0IDIuMlYgICAgICAgICAgICAgIAorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19MRVRCT1hfR1BJT19BIDB4MDQgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgNDozIExldHRlciBib3gKKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfTEVUQk9YX0dQSU9fQiAweDA4ICAgICAvL3JlcHJlc2VudCBncGlvIDQgc3RhdGUgZm9yIDQ6MyBMZXR0ZXIgYm94CisjZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0xFVEJPWF9HUElPX1NISUZUIDB4MiAgICAgCiAKLS8qIExpbmUgMyBvdXQgcHV0IDBWICovCi0jZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0dQSU9fQSAgICAgICAgMHgxMAkvKiByZXByZXNlbnQgZ3BpbyAzIHN0YXRlIGZvciA0OjMgKi8KLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfR1BJT19CICAgICAgICAweDIwCS8qIHJlcHJlc2VudCBncGlvIDQgc3RhdGUgZm9yIDQ6MyAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19HUElPX1NISUZUICAgIDB4NAorLy9MaW5lIDMgb3V0IHB1dCAwVgorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19HUElPX0EgICAgICAgIDB4MTAgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgNDozCisjZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0dQSU9fQiAgICAgICAgMHgyMCAgICAgLy9yZXByZXNlbnQgZ3BpbyA0IHN0YXRlIGZvciA0OjMKKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfR1BJT19TSElGVCAgICAweDQgCiAKLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19NQVNLICAgICAgICAgICAgICAweDNGCS8qICBiaXQgWzU6MF0gKi8KKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19NQVNLICAgICAgICAgICAgICAweDNGICAgICAvLyBiaXQgWzU6MF0KIAotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPX0VYSVNUICAgICAgICAgICAgIDB4ODAJLyogYml0IDcgKi8KKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19FWElTVCAgICAgICAgICAgICAweDgwICAgICAvL2JpdCA3CiAKLS8qIEdQSU8gYml0IGluZGV4IGluIGdwaW8gc2V0dGluZyBwZXIgbW9kZSB2YWx1ZSwgYWxzbyByZXByZXNlbmQgdGhlIGJsb2NrIG5vLiBpbiBncGlvIGJsb2Nrcy4gKi8KLSNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0xJTkUzX0FTUEVDUkFUSU9fR1BJT19BICAgMwkvKiBiaXQgMyBpbiB1YzQ4MGkvdWM0ODBwL3VjNzIwcC91YzEwODBpLCB3aGljaCByZXByZXNlbmQgdGhlIGRlZmF1bHQgZ3BpbyBiaXQgc2V0dGluZyBmb3IgdGhlIG1vZGUuICovCi0jZGVmaW5lIEFUT01fR1BJT19JTkRFWF9MSU5FM19BU1BFQ1JBVElPX0dQSU9fQiAgIDQJLyogYml0IDQgaW4gdWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaSwgd2hpY2ggcmVwcmVzZW5kIHRoZSBkZWZhdWx0IGdwaW8gYml0IHNldHRpbmcgZm9yIHRoZSBtb2RlLiAqLworLy9HUElPIGJpdCBpbmRleCBpbiBncGlvIHNldHRpbmcgcGVyIG1vZGUgdmFsdWUsIGFsc28gcmVwcmVzZW5kIHRoZSBibG9jayBuby4gaW4gZ3BpbyBibG9ja3MuCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9MSU5FM19BU1BFQ1JBVElPX0dQSU9fQSAgIDMgICAvL2JpdCAzIGluIHVjNDgwaS91YzQ4MHAvdWM3MjBwL3VjMTA4MGksIHdoaWNoIHJlcHJlc2VuZCB0aGUgZGVmYXVsdCBncGlvIGJpdCBzZXR0aW5nIGZvciB0aGUgbW9kZS4KKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0xJTkUzX0FTUEVDUkFUSU9fR1BJT19CICAgNCAgIC8vYml0IDQgaW4gdWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaSwgd2hpY2ggcmVwcmVzZW5kIHRoZSBkZWZhdWx0IGdwaW8gYml0IHNldHRpbmcgZm9yIHRoZSBtb2RlLgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01QT05FTlRfVklERU9fSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzTWFza19QaW5SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0VOX1BpblJlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzWV9QaW5SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0FfUGluUmVnaXN0ZXJJbmRleDsKLQlVQ0hBUiB1Y0JpdFNoaWZ0OwotCVVDSEFSIHVjUGluQWN0aXZlU3RhdGU7CS8qIHVjUGluQWN0aXZlU3RhdGU6IEJpdDA9MSBhY3RpdmUgaGlnaCwgPTAgYWN0aXZlIGxvdyAqLwotCUFUT01fRFREX0ZPUk1BVCBzUmVzZXJ2ZWQ7CS8qICBtdXN0IGJlIHplcm9lZCBvdXQgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvOwotCVVDSEFSIHVjNDgwaTsKLQlVQ0hBUiB1YzQ4MHA7Ci0JVUNIQVIgdWM3MjBwOwotCVVDSEFSIHVjMTA4MGk7Ci0JVUNIQVIgdWNMZXR0ZXJCb3hNb2RlOwotCVVDSEFSIHVjUmVzZXJ2ZWRbM107Ci0JVUNIQVIgdWNOdW1PZldiR3Bpb0Jsb2NrczsJLyogRm9yIENvbXBvbmVudCB2aWRlbyBELUNvbm5lY3RvciBzdXBwb3J0LiBJZiB6ZXJlLCBOVFNDIHR5cGUgY29ubmVjdG9yICovCi0JQVRPTV9HUElPX0lORk8gYVdiR3Bpb1N0YXRlQmxvY2tbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOwotCUFUT01fRFREX0ZPUk1BVCBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOwotfSBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MiAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01QT05FTlRfVklERU9fSU5GT19WMjEgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjTWlzY0luZm87Ci0JVUNIQVIgdWM0ODBpOwotCVVDSEFSIHVjNDgwcDsKLQlVQ0hBUiB1YzcyMHA7Ci0JVUNIQVIgdWMxMDgwaTsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCVVDSEFSIHVjTGV0dGVyQm94TW9kZTsKLQlVQ0hBUiB1Y051bU9mV2JHcGlvQmxvY2tzOwkvKiBGb3IgQ29tcG9uZW50IHZpZGVvIEQtQ29ubmVjdG9yIHN1cHBvcnQuIElmIHplcmUsIE5UU0MgdHlwZSBjb25uZWN0b3IgKi8KLQlBVE9NX0dQSU9fSU5GTyBhV2JHcGlvU3RhdGVCbG9ja1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Ci0JQVRPTV9EVERfRk9STUFUIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Ci19IEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk9fVjIxOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICB1c01hc2tfUGluUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgIHVzRU5fUGluUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgIHVzWV9QaW5SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgdXNBX1BpblJlZ2lzdGVySW5kZXg7CisgIFVDSEFSICAgICAgICAgICAgICB1Y0JpdFNoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgdWNQaW5BY3RpdmVTdGF0ZTsgIC8vdWNQaW5BY3RpdmVTdGF0ZTogQml0MD0xIGFjdGl2ZSBoaWdoLCA9MCBhY3RpdmUgbG93CisgIEFUT01fRFREX0ZPUk1BVCAgICBzUmVzZXJ2ZWQ7ICAgICAgICAgLy8gbXVzdCBiZSB6ZXJvZWQgb3V0CisgIFVDSEFSICAgICAgICAgICAgICB1Y01pc2NJbmZvOworICBVQ0hBUiAgICAgICAgICAgICAgdWM0ODBpOworICBVQ0hBUiAgICAgICAgICAgICAgdWM0ODBwOworICBVQ0hBUiAgICAgICAgICAgICAgdWM3MjBwOworICBVQ0hBUiAgICAgICAgICAgICAgdWMxMDgwaTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjTGV0dGVyQm94TW9kZTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbM107CisgIFVDSEFSICAgICAgICAgICAgICB1Y051bU9mV2JHcGlvQmxvY2tzOyAvL0ZvciBDb21wb25lbnQgdmlkZW8gRC1Db25uZWN0b3Igc3VwcG9ydC4gSWYgemVyZSwgTlRTQyB0eXBlIGNvbm5lY3RvcgorICBBVE9NX0dQSU9fSU5GTyAgICAgYVdiR3Bpb1N0YXRlQmxvY2tbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOworICBBVE9NX0RURF9GT1JNQVQgICAgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfQ1ZfU1RBTkRBUkRTXTsKK31BVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPOworCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0yCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUE9ORU5UX1ZJREVPX0lORk9fVjIxCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgdWNNaXNjSW5mbzsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNDgwaTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNDgwcDsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNzIwcDsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjMTA4MGk7CisgIFVDSEFSICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworICBVQ0hBUiAgICAgICAgICAgICAgdWNMZXR0ZXJCb3hNb2RlOworICBVQ0hBUiAgICAgICAgICAgICAgdWNOdW1PZldiR3Bpb0Jsb2NrczsgLy9Gb3IgQ29tcG9uZW50IHZpZGVvIEQtQ29ubmVjdG9yIHN1cHBvcnQuIElmIHplcmUsIE5UU0MgdHlwZSBjb25uZWN0b3IKKyAgQVRPTV9HUElPX0lORk8gICAgIGFXYkdwaW9TdGF0ZUJsb2NrW01BWF9TVVBQT1JURURfQ1ZfU1RBTkRBUkRTXTsKKyAgQVRPTV9EVERfRk9STUFUICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Cit9QVRPTV9DT01QT05FTlRfVklERU9fSU5GT19WMjE7CiAKICNkZWZpbmUgQVRPTV9DT01QT05FTlRfVklERU9fSU5GT19MQVNUICBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPX1YyMQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBvYmplY3RfSW5mb1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c0RldmljZVN1cHBvcnQ7Ci0JVVNIT1JUIHVzQ29ubmVjdG9yT2JqZWN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzRW5jb2Rlck9iamVjdFRhYmxlT2Zmc2V0OwotCVVTSE9SVCB1c1Byb3RlY3Rpb25PYmplY3RUYWJsZU9mZnNldDsJLyogb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LiAqLwotCVVTSE9SVCB1c0Rpc3BsYXlQYXRoVGFibGVPZmZzZXQ7Ci19IEFUT01fT0JKRUNUX0hFQURFUjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIG9iamVjdF9JbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVIKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nvbm5lY3Rvck9iamVjdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNFbmNvZGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNQcm90ZWN0aW9uT2JqZWN0VGFibGVPZmZzZXQ7IC8vb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGlzcGxheVBhdGhUYWJsZU9mZnNldDsKK31BVE9NX09CSkVDVF9IRUFERVI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEggewotCVVTSE9SVCB1c0RldmljZVRhZzsJLyogc3VwcG9ydGVkIGRldmljZSAqLwotCVVTSE9SVCB1c1NpemU7CQkvKiB0aGUgc2l6ZSBvZiBBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEggKi8KLQlVU0hPUlQgdXNDb25uT2JqZWN0SWQ7CS8qIENvbm5lY3RvciBPYmplY3QgSUQgKi8KLQlVU0hPUlQgdXNHUFVPYmplY3RJZDsJLyogR1BVIElEICovCi0JVVNIT1JUIHVzR3JhcGhpY09iaklkc1sxXTsJLyogMXN0IEVuY29kZXIgT2JqIHNvdXJjZSBmcm9tIEdQVSB0byBsYXN0IEdyYXBoaWMgT2JqIGRlc3RpbmF0ZSB0byBjb25uZWN0b3IuICovCi19IEFUT01fRElTUExBWV9PQkpFQ1RfUEFUSDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVJfVjMKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nvbm5lY3Rvck9iamVjdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNFbmNvZGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNQcm90ZWN0aW9uT2JqZWN0VGFibGVPZmZzZXQ7IC8vb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGlzcGxheVBhdGhUYWJsZU9mZnNldDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c01pc2NPYmplY3RUYWJsZU9mZnNldDsKK31BVE9NX09CSkVDVF9IRUFERVJfVjM7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEUgewotCVVDSEFSIHVjTnVtT2ZEaXNwUGF0aDsKLQlVQ0hBUiB1Y1ZlcnNpb247Ci0JVUNIQVIgdWNQYWRkaW5nWzJdOwotCUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSCBhc0Rpc3BQYXRoWzFdOwotfSBBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEU7Ci0KLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVAkvKiBlYWNoIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRICiB7Ci0JVVNIT1JUIHVzT2JqZWN0SUQ7Ci0JVVNIT1JUIHVzU3JjRHN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzUmVjb3JkT2Zmc2V0OwkvKiB0aGlzIHBvaW50aW5nIHRvIGEgYnVuY2ggb2YgcmVjb3JkcyBkZWZpbmVkIGJlbG93ICovCi0JVVNIT1JUIHVzUmVzZXJ2ZWQ7Ci19IEFUT01fT0JKRUNUOworICBVU0hPUlQgICAgdXNEZXZpY2VUYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnRlZCBkZXZpY2UgCisgIFVTSE9SVCAgICB1c1NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIHNpemUgb2YgQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRICisgIFVTSE9SVCAgICB1c0Nvbm5PYmplY3RJZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ29ubmVjdG9yIE9iamVjdCBJRCAKKyAgVVNIT1JUICAgIHVzR1BVT2JqZWN0SWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9HUFUgSUQgCisgIFVTSE9SVCAgICB1c0dyYXBoaWNPYmpJZHNbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzFzdCBFbmNvZGVyIE9iaiBzb3VyY2UgZnJvbSBHUFUgdG8gbGFzdCBHcmFwaGljIE9iaiBkZXN0aW5hdGUgdG8gY29ubmVjdG9yLgorfUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fT0JKRUNUX1RBQkxFCS8qIEFib3ZlIDQgb2JqZWN0IHRhYmxlIG9mZnNldCBwb2ludGluZyB0byBhIGJ1bmNoIG9mIG9iamVjdHMgYWxsIGhhdmUgdGhpcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEUKIHsKLQlVQ0hBUiB1Y051bWJlck9mT2JqZWN0czsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci0JQVRPTV9PQkpFQ1QgYXNPYmplY3RzWzFdOwotfSBBVE9NX09CSkVDVF9UQUJMRTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bU9mRGlzcFBhdGg7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNWZXJzaW9uOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsKKyAgQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRIICAgICAgICBhc0Rpc3BQYXRoWzFdOworfUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSF9UQUJMRTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1JDX0RTVF9UQUJMRV9GT1JfT05FX09CSkVDVAkvKiB1c1NyY0RzdFRhYmxlT2Zmc2V0IHBvaW50aW5nIHRvIHRoaXMgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lYWNoIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmUgICAgCiB7Ci0JVUNIQVIgdWNOdW1iZXJPZlNyYzsKLQlVU0hPUlQgdXNTcmNPYmplY3RJRFsxXTsKLQlVQ0hBUiB1Y051bWJlck9mRHN0OwotCVVTSE9SVCB1c0RzdE9iamVjdElEWzFdOwotfSBBVE9NX1NSQ19EU1RfVEFCTEVfRk9SX09ORV9PQkpFQ1Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNPYmplY3RJRDsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NyY0RzdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgIHVzUmVjb3JkT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBwb2ludGluZyB0byBhIGJ1bmNoIG9mIHJlY29yZHMgZGVmaW5lZCBiZWxvdworICBVU0hPUlQgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7Cit9QVRPTV9PQkpFQ1Q7CiAKLS8qIFJlbGF0ZWQgZGVmaW5pdGlvbnMsIGFsbCByZWNvcmRzIGFyZSBkaWZmZXJudCBidXQgdGhleSBoYXZlIGEgY29tbW9uZCBoZWFkZXIgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7CS8qIEFuIGVtdW4gdG8gaW5kaWNhdGUgdGhlIHJlY29yZCB0eXBlICovCi0JVUNIQVIgdWNSZWNvcmRTaXplOwkvKiBUaGUgc2l6ZSBvZiB0aGUgd2hvbGUgcmVjb3JkIGluIGJ5dGUgKi8KLX0gQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAvL0Fib3ZlIDQgb2JqZWN0IHRhYmxlIG9mZnNldCBwb2ludGluZyB0byBhIGJ1bmNoIG9mIG9iamVjdHMgYWxsIGhhdmUgdGhpcyBzdHJ1Y3R1cmUgICAgIAoreworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZPYmplY3RzOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUGFkZGluZ1szXTsKKyAgQVRPTV9PQkpFQ1QgICAgICAgICBhc09iamVjdHNbMV07Cit9QVRPTV9PQkpFQ1RfVEFCTEU7CiAKLSNkZWZpbmUgQVRPTV9JMkNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TUkNfRFNUX1RBQkxFX0ZPUl9PTkVfT0JKRUNUICAgICAgICAgLy91c1NyY0RzdFRhYmxlT2Zmc2V0IHBvaW50aW5nIHRvIHRoaXMgc3RydWN0dXJlCit7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNOdW1iZXJPZlNyYzsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NyY09iamVjdElEWzFdOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZEc3Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNEc3RPYmplY3RJRFsxXTsKK31BVE9NX1NSQ19EU1RfVEFCTEVfRk9SX09ORV9PQkpFQ1Q7CisKKworLy9Ud28gZGVmaW5pdGlvbnMgYmVsb3cgYXJlIGZvciBPUE0gb24gTVhNIG1vZHVsZSBkZXNpZ25zCisKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8wICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8xICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8yICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8zICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF80ICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF81ICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF82ICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF83ICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9FWFRfSFBEUElOX0xVVF9FTlRSSUVTICAgKEVYVF9IUERQSU5fTFVUSU5ERVhfNysxKQorCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMiAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMyAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNCAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfRVhUX0FVWEREQ19MVVRfRU5UUklFUyAgIChFWFRfQVVYRERDX0xVVElOREVYXzcrMSkKKwordHlwZWRlZiBzdHJ1Y3QgX0VYVF9ESVNQTEFZX1BBVEgKK3sKKyAgVVNIT1JUICB1c0RldmljZVRhZzsgICAgICAgICAgICAgICAgICAgIC8vQSBiaXQgdmVjdG9yIHRvIHNob3cgd2hhdCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgCisgIFVTSE9SVCAgdXNEZXZpY2VBQ1BJRW51bTsgICAgICAgICAgICAgICAvLzE2Yml0IGRldmljZSBBQ1BJIGlkLiAKKyAgVVNIT1JUICB1c0RldmljZUNvbm5lY3RvcjsgICAgICAgICAgICAgIC8vQSBwaHlzaWNhbCBjb25uZWN0b3IgZm9yIGRpc3BsYXlzIHRvIHBsdWcgaW4sIHVzaW5nIG9iamVjdCBjb25uZWN0b3IgZGVmaW5pdGlvbnMKKyAgVUNIQVIgICB1Y0V4dEFVWEREQ0x1dEluZGV4OyAgICAgICAgICAgIC8vQW4gaW5kZXggaW50byBleHRlcm5hbCBBVVgvRERDIGNoYW5uZWwgTFVUCisgIFVDSEFSICAgdWNFeHRIUERQSU5MdXRJbmRleDsgICAgICAgICAgICAvL0FuIGluZGV4IGludG8gZXh0ZXJuYWwgSFBEIHBpbiBMVVQKKyAgVVNIT1JUICB1c0V4dEVuY29kZXJPYmpJZDsgICAgICAgICAgICAgIC8vZXh0ZXJuYWwgZW5jb2RlciBvYmplY3QgaWQKKyAgVVNIT1JUICB1c1Jlc2VydmVkWzNdOyAKK31FWFRfRElTUExBWV9QQVRIOworICAgCisjZGVmaW5lIE5VTUJFUl9PRl9VQ0hBUl9GT1JfR1VJRCAgICAgICAgICAxNgorI2RlZmluZSBNQVhfTlVNQkVSX09GX0VYVF9ESVNQTEFZX1BBVEggICAgNworCit0eXBlZGVmICBzdHJ1Y3QgX0FUT01fRVhURVJOQUxfRElTUExBWV9DT05ORUNUSU9OX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0d1aWQgW05VTUJFUl9PRl9VQ0hBUl9GT1JfR1VJRF07ICAgICAvLyBhIEdVSUQgaXMgYSAxNiBieXRlIGxvbmcgc3RyaW5nCisgIEVYVF9ESVNQTEFZX1BBVEggICAgICAgICBzUGF0aFtNQVhfTlVNQkVSX09GX0VYVF9ESVNQTEFZX1BBVEhdOyAvLyB0b3RhbCBvZiBmaXhlZCA3IGVudHJpZXMuCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0NoZWNrc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhICBzaW1wbGUgQ2hlY2tzdW0gb2YgdGhlIHN1bSBvZiB3aG9sZSBzdHJ1Y3R1cmUgZXF1YWwgdG8gMHgwLiAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIFs3XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBwb3RlbnRpYWwgZXhwYW5zaW9uCit9QVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTzsKKworLy9SZWxhdGVkIGRlZmluaXRpb25zLCBhbGwgcmVjb3JkcyBhcmUgZGlmZmVybnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUgoreworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgLy9BbiBlbXVuIHRvIGluZGljYXRlIHRoZSByZWNvcmQgdHlwZQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgd2hvbGUgcmVjb3JkIGluIGJ5dGUKK31BVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSOworCisKKyNkZWZpbmUgQVRPTV9JMkNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgCiAjZGVmaW5lIEFUT01fSFBEX0lOVF9SRUNPUkRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBBVE9NX09VVFBVVF9QUk9URUNUSU9OX1JFQ09SRF9UWVBFICAgICAgICAgICAgIDMKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkRfVFlQRSAgICAgICAgICA0Ci0jZGVmaW5lCUFUT01fQ09OTkVDVE9SX0RWSV9FWFRfSU5QVVRfUkVDT1JEX1RZUEUJICAgICA1CS8qIE9ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRSAqLwotI2RlZmluZSBBVE9NX0VOQ09ERVJfRlBHQV9DT05UUk9MX1JFQ09SRF9UWVBFICAgICAgICAgIDYJLyogT2Jzb2xldGUsIHN3aXRjaCB0byB1c2UgR1BJT19DTlRMX1JFQ09SRF9UWVBFICovCisjZGVmaW5lCUFUT01fQ09OTkVDVE9SX0RWSV9FWFRfSU5QVVRfUkVDT1JEX1RZUEUJICAgICA1IC8vT2Jzb2xldGUsIHN3aXRjaCB0byB1c2UgR1BJT19DTlRMX1JFQ09SRF9UWVBFCisjZGVmaW5lIEFUT01fRU5DT0RFUl9GUEdBX0NPTlRST0xfUkVDT1JEX1RZUEUgICAgICAgICAgNiAvL09ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRQogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkRfVFlQRSAgICAgIDcKLSNkZWZpbmUgQVRPTV9KVEFHX1JFQ09SRF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIE9ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRSAqLworI2RlZmluZSBBVE9NX0pUQUdfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgIDggLy9PYnNvbGV0ZSwgc3dpdGNoIHRvIHVzZSBHUElPX0NOVExfUkVDT1JEX1RZUEUKICNkZWZpbmUgQVRPTV9PQkpFQ1RfR1BJT19DTlRMX1JFQ09SRF9UWVBFICAgICAgICAgICAgICA5CiAjZGVmaW5lIEFUT01fRU5DT0RFUl9EVk9fQ0ZfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAxMAogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkRfVFlQRSAgICAgICAgICAgICAgICAgMTEKICNkZWZpbmUJQVRPTV9DT05ORUNUT1JfSEFSRENPREVfRFREX1JFQ09SRF9UWVBFCSAgICAgIDEyCiAjZGVmaW5lIEFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRF9UWVBFICAxMwotI2RlZmluZSBBVE9NX1JPVVRFUl9ERENfUEFUSF9TRUxFQ1RfUkVDT1JEX1RZUEUJCQkJMTQKLSNkZWZpbmUgQVRPTV9ST1VURVJfREFUQV9DTE9DS19QQVRIX1NFTEVDVF9SRUNPUkRfVFlQRQkJCQkJMTUKKyNkZWZpbmUgQVRPTV9ST1VURVJfRERDX1BBVEhfU0VMRUNUX1JFQ09SRF9UWVBFCSAgICAgIDE0CisjZGVmaW5lIEFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEX1RZUEUJMTUKKyNkZWZpbmUgQVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkRfVFlQRSAgICAgICAgICAxNiAvL1RoaXMgaXMgZm9yIHRoZSBjYXNlIHdoZW4gY29ubmVjdG9ycyBhcmUgbm90IGtub3duIHRvIG9iamVjdCB0YWJsZQorI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRF9UWVBFICAgICAgICAgIDE3IC8vVGhpcyBpcyBmb3IgdGhlIGNhc2Ugd2hlbiBjb25uZWN0b3JzIGFyZSBub3Qga25vd24gdG8gb2JqZWN0IHRhYmxlCisjZGVmaW5lIEFUT01fT0JKRUNUX0xJTktfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgMTggLy9PbmNlIHRoaXMgcmVjb3JkIGlzIHByZXNlbnQgdW5kZXIgb25lIG9iamVjdCwgaXQgaW5kaWNhdHMgdGhlIG9vYmplY3QgaXMgbGlua2VkIHRvIGFub3RoZXIgb2JqIGRlc2NyaWJlZCBieSB0aGUgcmVjb3JkCisjZGVmaW5lIEFUT01fQ09OTkVDVE9SX1JFTU9URV9DQVBfUkVDT1JEX1RZUEUgICAgICAgICAgMTkKIAotLyogTXVzdCBiZSB1cGRhdGVkIHdoZW4gbmV3IHJlY29yZCB0eXBlIGlzIGFkZGVkLGVxdWFsIHRvIHRoYXQgcmVjb3JkIGRlZmluaXRpb24hICovCi0jZGVmaW5lIEFUT01fTUFYX09CSkVDVF9SRUNPUkRfTlVNQkVSICAgICAgICAgICAgIEFUT01fQ09OTkVDVE9SX0NGX1JFQ09SRF9UWVBFCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0kyQ19SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlBVE9NX0kyQ19JRF9DT05GSUcgc3VjSTJjSWQ7Ci0JVUNIQVIgdWNJMkNBZGRyOwkvKiBUaGUgc2xhdmUgYWRkcmVzcywgaXQncyAwIHdoZW4gdGhlIHJlY29yZCBpcyBhdHRhY2hlZCB0byBjb25uZWN0b3IgZm9yIEREQyAqLwotfSBBVE9NX0kyQ19SRUNPUkQ7CisvL011c3QgYmUgdXBkYXRlZCB3aGVuIG5ldyByZWNvcmQgdHlwZSBpcyBhZGRlZCxlcXVhbCB0byB0aGF0IHJlY29yZCBkZWZpbml0aW9uIQorI2RlZmluZSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUiAgICAgICAgICAgICBBVE9NX0NPTk5FQ1RPUl9SRU1PVEVfQ0FQX1JFQ09SRF9UWVBFCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0hQRF9JTlRfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNIUERJbnRHUElPSUQ7CS8qIENvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gKi8KLQlVQ0hBUiB1Y1BsdWdnZWRfUGluU3RhdGU7Ci19IEFUT01fSFBEX0lOVF9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fSTJDX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgQVRPTV9JMkNfSURfQ09ORklHICAgICAgICAgIHN1Y0kyY0lkOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjSTJDQWRkcjsgICAgICAgICAgICAgIC8vVGhlIHNsYXZlIGFkZHJlc3MsIGl0J3MgMCB3aGVuIHRoZSByZWNvcmQgaXMgYXR0YWNoZWQgdG8gY29ubmVjdG9yIGZvciBEREMKK31BVE9NX0kyQ19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX09VVFBVVF9QUk9URUNUSU9OX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjUHJvdGVjdGlvbkZsYWc7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9PVVRQVVRfUFJPVEVDVElPTl9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fSFBEX0lOVF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0hQREludEdQSU9JRDsgICAgICAgICAvL0NvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gICAgICAgICAgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNQbHVnZ2VkX1BpblN0YXRlOworfUFUT01fSFBEX0lOVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHIHsKLQlVTE9ORyB1bEFDUElEZXZpY2VFbnVtOwkvKiBSZXNlcnZlZCBmb3Igbm93ICovCi0JVVNIT1JUIHVzRGV2aWNlSUQ7CS8qIFRoaXMgSWQgaXMgc2FtZSBhcyAiQVRPTV9ERVZJQ0VfWFhYX1NVUFBPUlQiICovCi0JVVNIT1JUIHVzUGFkZGluZzsKLX0gQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBRzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0RFVklDRV9UQUdfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNOdW1iZXJPZkRldmljZTsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCUFUT01fQ09OTkVDVE9SX0RFVklDRV9UQUcgYXNEZXZpY2VUYWdbMV07CS8qIFRoaXMgSWQgaXMgc2FtZSBhcyAiQVRPTV9ERVZJQ0VfWFhYX1NVUFBPUlQiLCAxIGlzIG9ubHkgZm9yIGFsbG9jYXRpb24gKi8KLX0gQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fT1VUUFVUX1BST1RFQ1RJT05fUkVDT1JEIAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUHJvdGVjdGlvbkZsYWc7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworfUFUT01fT1VUUFVUX1BST1RFQ1RJT05fUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y0NvbmZpZ0dQSU9JRDsKLQlVQ0hBUiB1Y0NvbmZpZ0dQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoIHRvIGVuYWJsZSBleHRlcm5hbCBmbG93IGluICovCi0JVUNIQVIgdWNGbG93aW5HUElQSUQ7Ci0JVUNIQVIgdWNFeHRJbkdQSVBJRDsKLX0gQVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQ09OTkVDVE9SX0RFVklDRV9UQUcKK3sKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIHVsQUNQSURldmljZUVudW07ICAgICAgIC8vUmVzZXJ2ZWQgZm9yIG5vdworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNEZXZpY2VJRDsgICAgICAgICAgICAgLy9UaGlzIElkIGlzIHNhbWUgYXMgIkFUT01fREVWSUNFX1hYWF9TVVBQT1JUIgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNQYWRkaW5nOworfUFUT01fQ09OTkVDVE9SX0RFVklDRV9UQUc7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0VOQ09ERVJfRlBHQV9DT05UUk9MX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjQ1RMMUdQSU9fSUQ7Ci0JVUNIQVIgdWNDVEwxR1BJT1N0YXRlOwkvKiBTZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2ggKi8KLQlVQ0hBUiB1Y0NUTDJHUElPX0lEOwotCVVDSEFSIHVjQ1RMMkdQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNDVEwzR1BJT19JRDsKLQlVQ0hBUiB1Y0NUTDNHUElPU3RhdGU7CS8qIFNldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaCAqLwotCVVDSEFSIHVjQ1RMRlBHQV9JTl9JRDsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci19IEFUT01fRU5DT0RFUl9GUEdBX0NPTlRST0xfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZEZXZpY2U7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworICBBVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHICAgYXNEZXZpY2VUYWdbMV07ICAgICAgICAgLy9UaGlzIElkIGlzIHNhbWUgYXMgIkFUT01fREVWSUNFX1hYWF9TVVBQT1JUIiwgMSBpcyBvbmx5IGZvciBhbGxvY2F0aW9uCit9QVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y0dQSU9JRDsJCS8qIENvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gKi8KLQlVQ0hBUiB1Y1RWQWN0aXZlU3RhdGU7CS8qIEluZGljYXRpbmcgd2hlbiB0aGUgcGluPT0wIG9yIDEgd2hlbiBUViBpcyBjb25uZWN0ZWQgKi8KLX0gQVRPTV9DT05ORUNUT1JfQ1ZUVl9TSEFSRV9ESU5fUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9KVEFHX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjVE1TR1BJT19JRDsKLQlVQ0hBUiB1Y1RNU0dQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNUQ0tHUElPX0lEOwotCVVDSEFSIHVjVENLR1BJT1N0YXRlOwkvKiBTZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2ggKi8KLQlVQ0hBUiB1Y1RET0dQSU9fSUQ7Ci0JVUNIQVIgdWNURE9HUElPU3RhdGU7CS8qIFNldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaCAqLwotCVVDSEFSIHVjVERJR1BJT19JRDsKLQlVQ0hBUiB1Y1RESUdQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBBVE9NX0pUQUdfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9EVklfRVhUX0lOUFVUX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIJCQkJCQkgICAgICAgICAgICB1Y0NvbmZpZ0dQSU9JRDsKKyAgVUNIQVIJCQkJCQkgICAgICAgICAgICB1Y0NvbmZpZ0dQSU9TdGF0ZTsJICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoIHRvIGVuYWJsZSBleHRlcm5hbCBmbG93IGluCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0Zsb3dpbkdQSVBJRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjRXh0SW5HUElQSUQ7Cit9QVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQ7CiAKLS8qIFRoZSBmb2xsb3dpbmcgZ2VuZXJpYyBvYmplY3QgZ3BpbyBwaW4gY29udHJvbCByZWNvcmQgdHlwZSB3aWxsIHJlcGxhY2UgSlRBR19SRUNPUkQvRlBHQV9DT05UUk9MX1JFQ09SRC9EVklfRVhUX0lOUFVUX1JFQ09SRCBhYm92ZSBncmFkdWFsbHkgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUiB7Ci0JVUNIQVIgdWNHUElPSUQ7CQkvKiAgR1BJT19JRCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBJRCBpbiBHUElPX0xVVCB0YWJsZSAqLwotCVVDSEFSIHVjR1BJT19QaW5TdGF0ZTsJLyogIFBpbiBzdGF0ZSBzaG93aW5nIGhvdyB0byBzZXQtdXAgdGhlIHBpbiAqLwotfSBBVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUjsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9FTkNPREVSX0ZQR0FfQ09OVFJPTF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTDFHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNDVEwxR1BJT1N0YXRlOyAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjQ1RMMkdQSU9fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTDJHUElPU3RhdGU7ICAgICAgICAvL1NldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNDVEwzR1BJT19JRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjQ1RMM0dQSU9TdGF0ZTsgICAgICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTEZQR0FfSU5fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbM107Cit9QVRPTV9FTkNPREVSX0ZQR0FfQ09OVFJPTF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNGbGFnczsJCS8qICBGdXR1cmUgZXhwbmFkaWJpbGl0eSAqLwotCVVDSEFSIHVjTnVtYmVyT2ZQaW5zOwkvKiAgTnVtYmVyIG9mIEdQSU8gcGlucyB1c2VkIHRvIGNvbnRyb2wgdGhlIG9iamVjdCAqLwotCUFUT01fR1BJT19QSU5fQ09OVFJPTF9QQUlSIGFzR3Bpb1sxXTsJLyogIHRoZSByZWFsIGdwaW8gcGluIHBhaXIgZGV0ZXJtaW5lZCBieSBudW1iZXIgb2YgcGlucyB1Y051bWJlck9mUGlucyAqLwotfSBBVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9JRDsgICAgICAgICAgICAgICAvL0NvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RWQWN0aXZlU3RhdGU7ICAgICAgICAvL0luZGljYXRpbmcgd2hlbiB0aGUgcGluPT0wIG9yIDEgd2hlbiBUViBpcyBjb25uZWN0ZWQKK31BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQ7CiAKLS8qIERlZmluaXRpb25zIGZvciBHUElPIHBpbiBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0pUQUdfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNUTVNHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNUTVNHUElPU3RhdGU7ICAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjVENLR1BJT19JRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjVENLR1BJT1N0YXRlOyAgICAgICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RET0dQSU9fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RET0dQSU9TdGF0ZTsgICAgICAgICAvL1NldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNURElHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNURElHUElPU3RhdGU7ICAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsKK31BVE9NX0pUQUdfUkVDT1JEOworCisKKy8vVGhlIGZvbGxvd2luZyBnZW5lcmljIG9iamVjdCBncGlvIHBpbiBjb250cm9sIHJlY29yZCB0eXBlIHdpbGwgcmVwbGFjZSBKVEFHX1JFQ09SRC9GUEdBX0NPTlRST0xfUkVDT1JEL0RWSV9FWFRfSU5QVVRfUkVDT1JEIGFib3ZlIGdyYWR1YWxseQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19QSU5fQ09OVFJPTF9QQUlSCit7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9JRDsgICAgICAgICAgICAgICAvLyBHUElPX0lELCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIElEIGluIEdQSU9fTFVUIHRhYmxlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9fUGluU3RhdGU7ICAgICAgICAvLyBQaW4gc3RhdGUgc2hvd2luZyBob3cgdG8gc2V0LXVwIHRoZSBwaW4KK31BVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUjsKKwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNGbGFnczsgICAgICAgICAgICAgICAgLy8gRnV0dXJlIGV4cG5hZGliaWxpdHkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZQaW5zOyAgICAgICAgIC8vIE51bWJlciBvZiBHUElPIHBpbnMgdXNlZCB0byBjb250cm9sIHRoZSBvYmplY3QKKyAgQVRPTV9HUElPX1BJTl9DT05UUk9MX1BBSVIgIGFzR3Bpb1sxXTsgICAgICAgICAgICAgIC8vIHRoZSByZWFsIGdwaW8gcGluIHBhaXIgZGV0ZXJtaW5lZCBieSBudW1iZXIgb2YgcGlucyB1Y051bWJlck9mUGlucworfUFUT01fT0JKRUNUX0dQSU9fQ05UTF9SRUNPUkQ7CisKKy8vRGVmaW5pdGlvbnMgZm9yIEdQSU8gcGluIHN0YXRlIAogI2RlZmluZSBHUElPX1BJTl9UWVBFX0lOUFVUICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgR1BJT19QSU5fVFlQRV9PVVRQVVQgICAgICAgICAgICAweDEwCiAjZGVmaW5lIEdQSU9fUElOX1RZUEVfSFdfQ09OVFJPTCAgICAgICAgMHgyMAogCi0vKiBGb3IgR1BJT19QSU5fVFlQRV9PVVRQVVQgdGhlIGZvbGxvd2luZyBpcyBkZWZpbmVkICovCisvL0ZvciBHUElPX1BJTl9UWVBFX09VVFBVVCB0aGUgZm9sbG93aW5nIGlzIGRlZmluZWQgCiAjZGVmaW5lIEdQSU9fUElOX09VVFBVVF9TVEFURV9NQVNLICAgICAgMHgwMQogI2RlZmluZSBHUElPX1BJTl9PVVRQVVRfU1RBVEVfU0hJRlQgICAgIDAKICNkZWZpbmUgR1BJT19QSU5fU1RBVEVfQUNUSVZFX0xPVyAgICAgICAweDAKICNkZWZpbmUgR1BJT19QSU5fU1RBVEVfQUNUSVZFX0hJR0ggICAgICAweDEKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9EVk9fQ0ZfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUxPTkcgdWxTdHJlbmd0aENvbnRyb2w7CS8qICBEVk9BIHN0cmVuZ3RoIGNvbnRyb2wgZm9yIENGICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBBVE9NX0VOQ09ERVJfRFZPX0NGX1JFQ09SRDsKKy8vIEluZGV4ZXMgdG8gR1BJTyBhcnJheSBpbiBHTFN5bmMgcmVjb3JkIAorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1JFRkNMSyAgICAwCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfSFNZTkMgICAgIDEKKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0dMU1lOQ19WU1lOQyAgICAgMgorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1NXQVBfUkVRICAzCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfU1dBUF9HTlQgIDQKKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0dMU1lOQ19JTlRFUlJVUFQgNQorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1ZfUkVTRVQgICA2CisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfTUFYICAgICAgIDcKIAotLyogIHZhbHVlIGZvciBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQudWNDb25uZWN0ZWREdm9CdW5kbGUgKi8KK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9FTkNPREVSX0RWT19DRl9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICB1bFN0cmVuZ3RoQ29udHJvbDsgICAgICAvLyBEVk9BIHN0cmVuZ3RoIGNvbnRyb2wgZm9yIENGCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbMl07Cit9QVRPTV9FTkNPREVSX0RWT19DRl9SRUNPUkQ7CisKKy8vIHZhbHVlIGZvciBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQudWNDb25uZWN0ZWREdm9CdW5kbGUKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfQ0ZfUkVDT1JEX0NPTk5FQ1RFRF9VUFBFUjEyQklUQlVORExFQSAgIDEKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfQ0ZfUkVDT1JEX0NPTk5FQ1RFRF9MT1dFUjEyQklUQlVORExFQiAgIDIKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0NGX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVTSE9SVCB1c01heFBpeENsazsKLQlVQ0hBUiB1Y0Zsb3dDbnRsR3Bpb0lkOwotCVVDSEFSIHVjU3dhcENudGxHcGlvSWQ7Ci0JVUNIQVIgdWNDb25uZWN0ZWREdm9CdW5kbGU7Ci0JVUNIQVIgdWNQYWRkaW5nOwotfSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQ09OTkVDVE9SX0NGX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4Q2xrOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNGbG93Q250bEdwaW9JZDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjU3dhcENudGxHcGlvSWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0Nvbm5lY3RlZER2b0J1bmRsZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZzsKK31BVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JQVRPTV9EVERfRk9STUFUIGFzVGltaW5nOwotfSBBVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworCUFUT01fRFREX0ZPUk1BVAkJCQkJCQlhc1RpbWluZzsKK31BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfUENJRV9TVUJDT05ORUNUT1JfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7CS8qIEFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRF9UWVBFICovCi0JVUNIQVIgdWNTdWJDb25uZWN0b3JUeXBlOwkvKiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EfFhfSURfRFVBTF9MSU5LX0RWSV9EfEhETUlfVFlQRV9BICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9DT05ORUNUT1JfUENJRV9TVUJDT05ORUNUT1JfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsgICAgICAgICAgICAgICAgLy9BVE9NX0NPTk5FQ1RPUl9QQ0lFX1NVQkNPTk5FQ1RPUl9SRUNPUkRfVFlQRQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNTdWJDb25uZWN0b3JUeXBlOyAgICAgLy9DT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EfFhfSURfRFVBTF9MSU5LX0RWSV9EfEhETUlfVFlQRV9BCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworfUFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y011eFR5cGU7CS8qIGRlY2lkZSB0aGUgbnVtYmVyIG9mIHVjTXV4U3RhdGUsID0wLCBubyBwaW4gc3RhdGUsID0xOiBzaW5nbGUgc3RhdGUgd2l0aCBjb21wbGVtZW50LCA+MTogbXVsdGlwbGUgc3RhdGUgKi8KLQlVQ0hBUiB1Y011eENvbnRyb2xQaW47Ci0JVUNIQVIgdWNNdXhTdGF0ZVsyXTsJLyogZm9yIGFsbGlnbWVudCBwdXJwb3NlICovCi19IEFUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1JPVVRFUl9EQVRBX0NMT0NLX1BBVEhfU0VMRUNUX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjTXV4VHlwZTsKLQlVQ0hBUiB1Y011eENvbnRyb2xQaW47Ci0JVUNIQVIgdWNNdXhTdGF0ZVsyXTsJLyogZm9yIGFsbGlnbWVudCBwdXJwb3NlICovCi19IEFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQKK3sKKwlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsgICAgICAgICAgICAgICAgCisJVUNIQVIJCQkJCQkJCQkJCQl1Y011eFR5cGU7CQkJCQkJCS8vZGVjaWRlIHRoZSBudW1iZXIgb2YgdWNNdXhTdGF0ZSwgPTAsIG5vIHBpbiBzdGF0ZSwgPTE6IHNpbmdsZSBzdGF0ZSB3aXRoIGNvbXBsZW1lbnQsID4xOiBtdWx0aXBsZSBzdGF0ZQorCVVDSEFSCQkJCQkJCQkJCQkJdWNNdXhDb250cm9sUGluOworCVVDSEFSCQkJCQkJCQkJCQkJdWNNdXhTdGF0ZVsyXTsJCQkJCS8vZm9yIGFsbGlnbWVudCBwdXJwb3NlCit9QVRPTV9ST1VURVJfRERDX1BBVEhfU0VMRUNUX1JFQ09SRDsKIAotLyogIGRlZmluZSB1Y011eFR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX1JPVVRFUl9EQVRBX0NMT0NLX1BBVEhfU0VMRUNUX1JFQ09SRAoreworCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOyAgICAgICAgICAgICAgICAKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4VHlwZTsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4Q29udHJvbFBpbjsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4U3RhdGVbMl07CQkJCQkvL2ZvciBhbGxpZ21lbnQgcHVycG9zZQorfUFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEOworCisvLyBkZWZpbmUgdWNNdXhUeXBlCiAjZGVmaW5lIEFUT01fUk9VVEVSX01VWF9QSU5fU1RBVEVfTUFTSwkJCQkJCQkJMHgwZgogI2RlZmluZSBBVE9NX1JPVVRFUl9NVVhfUElOX1NJTkdMRV9TVEFURV9DT01QTEVNRU5UCQkweDAxCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIEFTSUMgdm9sdGFnZSBkYXRhIHRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfSU5GT19IRUFERVIgewotCVVTSE9SVCB1c1ZERENCYXNlTGV2ZWw7CS8qIEluIG51bWJlciBvZiA1MG12IHVuaXQgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsJLyogRm9yIHBvc3NpYmxlIGV4dGVuc2lvbiB0YWJsZSBvZmZzZXQgKi8KLQlVQ0hBUiB1Y051bU9mVm9sdGFnZUVudHJpZXM7Ci0JVUNIQVIgdWNCeXRlc1BlclZvbHRhZ2VFbnRyeTsKLQlVQ0hBUiB1Y1ZvbHRhZ2VTdGVwOwkvKiBJbmRpY2F0aW5nIGluIGhvdyBtYW55IG12IGluY3JlYW1lbnQgaXMgb25lIHN0ZXAsIDAuNW12IHVuaXQgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRWb2x0YWdlRW50cnk7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbEFkZHJlc3M7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbE9mZnNldDsKLX0gQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0hQRFBJTl9MVVRfUkVDT1JEICAgICAvL3JlY29yZCBmb3IgQVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkRfVFlQRQoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjSFBEUElOTWFwW01BWF9OVU1CRVJfT0ZfRVhUX0hQRFBJTl9MVVRfRU5UUklFU107ICAvL0FuIGZpeGVkIHNpemUgYXJyYXkgd2hpY2ggbWFwcyBleHRlcm5hbCBwaW5zIHRvIGludGVybmFsIEdQSU9fUElOX0lORk8gdGFibGUgCit9QVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSIHZpSGVhZGVyOwotCVVDSEFSIHVjVm9sdGFnZUVudHJpZXNbNjRdOwkvKiA2NCBpcyBmb3IgYWxsb2NhdGlvbiwgdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cnkgaXMgcHJlc2VudCBhdCB1Y051bU9mVm9sdGFnZUVudHJpZXMqdWNCeXRlc1BlclZvbHRhZ2VFbnRyeSAqLwotfSBBVE9NX1ZPTFRBR0VfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRCAgLy9yZWNvcmQgZm9yIEFUT01fQ09OTkVDVE9SX0FVWEREQ19MVVRfUkVDT1JEX1RZUEUKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIEFUT01fSTJDX0lEX0NPTkZJRyAgICAgICAgICB1Y0FVWEREQ01hcFtNQVhfTlVNQkVSX09GX0VYVF9BVVhERENfTFVUX0VOVFJJRVNdOyAgLy9BbiBmaXhlZCBzaXplIGFycmF5IHdoaWNoIG1hcHMgZXh0ZXJuYWwgcGlucyB0byBpbnRlcm5hbCBEREMgSUQKK31BVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9GT1JNVUxBIHsKLQlVU0hPUlQgdXNWb2x0YWdlQmFzZUxldmVsOwkvKiAgSW4gbnVtYmVyIG9mIDFtdiB1bml0ICovCi0JVVNIT1JUIHVzVm9sdGFnZVN0ZXA7CS8qICBJbmRpY2F0aW5nIGluIGhvdyBtYW55IG12IGluY3JlYW1lbnQgaXMgb25lIHN0ZXAsIDFtdiB1bml0ICovCi0JVUNIQVIgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzOwkvKiAgTnVtYmVyIG9mIFZvbHRhZ2UgRW50cnksIHdoaWNoIGluZGljYXRlIG1heCBWb2x0YWdlICovCi0JVUNIQVIgdWNGbGFnOwkJLyogIGJpdDA9MCA6c3RlcCBpcyAxbXYgPTEgMC41bXYgKi8KLQlVQ0hBUiB1Y0Jhc2VWSUQ7CS8qICBpZiB0aGVyZSBpcyBubyBsb29rdXAgdGFibGUsIFZJRD0gQmFzZVZJRCArICggVm9sIC0gQmFzZUxldmxlICkgL1ZvbHRhZ2VTdGVwICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLQlVQ0hBUiB1Y1ZJREFkanVzdEVudHJpZXNbMzJdOwkvKiAgMzIgaXMgZm9yIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJ5IGlzIHByZXNlbnQgYXQgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzICovCi19IEFUT01fVk9MVEFHRV9GT1JNVUxBOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fT0JKRUNUX0xJTktfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNPYmplY3RJRDsgICAgICAgICAvL2NvdWxkIGJlIGNvbm5lY3RvciwgZW5jb3JkZXIgb3Igb3RoZXIgb2JqZWN0IGluIG9iamVjdC5oCit9QVRPTV9PQkpFQ1RfTElOS19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfQ09OVFJPTCB7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbElkOwkvKiBJbmRpY2F0ZSBpdCBpcyBjb250cm9sbGVkIGJ5IEkyQyBvciBHUElPIG9yIEhXIHN0YXRlIG1hY2hpbmUgKi8KLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sSTJjTGluZTsKLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sQWRkcmVzczsKLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sT2Zmc2V0OwotCVVTSE9SVCB1c0dwaW9QaW5fQUluZGV4OwkvKiBHUElPX1BBRCByZWdpc3RlciBpbmRleCAqLwotCVVDSEFSIHVjR3Bpb1BpbkJpdFNoaWZ0WzldOwkvKiBhdCBtb3N0IDggcGluIHN1cHBvcnQgMjU1IFZJRHMsIHRlcm1pbnRhdGUgd2l0aCAweGZmICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9WT0xUQUdFX0NPTlRST0w7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfUkVNT1RFX0NBUF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworfUFUT01fQ09OTkVDVE9SX1JFTU9URV9DQVBfUkVDT1JEOwogCi0vKiAgRGVmaW5lIHVjVm9sdGFnZUNvbnRyb2xJZCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gQVNJQyB2b2x0YWdlIGRhdGEgdGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSCit7CisgICBVU0hPUlQgICB1c1ZERENCYXNlTGV2ZWw7ICAgICAgICAgICAgICAgIC8vSW4gbnVtYmVyIG9mIDUwbXYgdW5pdAorICAgVVNIT1JUICAgdXNSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgICAvL0ZvciBwb3NzaWJsZSBleHRlbnNpb24gdGFibGUgb2Zmc2V0CisgICBVQ0hBUiAgICB1Y051bU9mVm9sdGFnZUVudHJpZXM7CisgICBVQ0hBUiAgICB1Y0J5dGVzUGVyVm9sdGFnZUVudHJ5OworICAgVUNIQVIgICAgdWNWb2x0YWdlU3RlcDsgICAgICAgICAgICAgICAgICAvL0luZGljYXRpbmcgaW4gaG93IG1hbnkgbXYgaW5jcmVhbWVudCBpcyBvbmUgc3RlcCwgMC41bXYgdW5pdAorICAgVUNIQVIgICAgdWNEZWZhdWx0Vm9sdGFnZUVudHJ5OworICAgVUNIQVIgICAgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7CisgICBVQ0hBUiAgICB1Y1ZvbHRhZ2VDb250cm9sQWRkcmVzczsKKyAgIFVDSEFSICAgIHVjVm9sdGFnZUNvbnRyb2xPZmZzZXQ7Cit9QVRPTV9WT0xUQUdFX0lORk9fSEVBREVSOworCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fVk9MVEFHRV9JTkZPCit7CisgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisgICBBVE9NX1ZPTFRBR0VfSU5GT19IRUFERVIgdmlIZWFkZXI7CisgICBVQ0hBUiAgICB1Y1ZvbHRhZ2VFbnRyaWVzWzY0XTsgICAgICAgICAgICAvLzY0IGlzIGZvciBhbGxvY2F0aW9uLCB0aGUgYWN0dWFsIG51bWJlciBvZiBlbnRyeSBpcyBwcmVzZW50IGF0IHVjTnVtT2ZWb2x0YWdlRW50cmllcyp1Y0J5dGVzUGVyVm9sdGFnZUVudHJ5Cit9QVRPTV9WT0xUQUdFX0lORk87CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfRk9STVVMQQoreworICAgVVNIT1JUICAgdXNWb2x0YWdlQmFzZUxldmVsOyAgICAgICAgICAgICAvLyBJbiBudW1iZXIgb2YgMW12IHVuaXQKKyAgIFVTSE9SVCAgIHVzVm9sdGFnZVN0ZXA7ICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGluZyBpbiBob3cgbWFueSBtdiBpbmNyZWFtZW50IGlzIG9uZSBzdGVwLCAxbXYgdW5pdAorCSBVQ0hBUgkJdWNOdW1PZlZvbHRhZ2VFbnRyaWVzOwkJCQkJLy8gTnVtYmVyIG9mIFZvbHRhZ2UgRW50cnksIHdoaWNoIGluZGljYXRlIG1heCBWb2x0YWdlCisJIFVDSEFSCQl1Y0ZsYWc7CQkJCQkJCQkJCQkJCS8vIGJpdDA9MCA6c3RlcCBpcyAxbXYgPTEgMC41bXYKKwkgVUNIQVIJCXVjQmFzZVZJRDsJCQkJCQkJCQkJCS8vIGlmIHRoZXJlIGlzIG5vIGxvb2t1cCB0YWJsZSwgVklEPSBCYXNlVklEICsgKCBWb2wgLSBCYXNlTGV2bGUgKSAvVm9sdGFnZVN0ZXAKKwkgVUNIQVIJCXVjUmVzZXJ2ZWQ7CisJIFVDSEFSCQl1Y1ZJREFkanVzdEVudHJpZXNbMzJdOwkJCQkJLy8gMzIgaXMgZm9yIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJ5IGlzIHByZXNlbnQgYXQgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzCit9QVRPTV9WT0xUQUdFX0ZPUk1VTEE7CisKK3R5cGVkZWYgc3RydWN0ICBfVk9MVEFHRV9MVVRfRU5UUlkKK3sKKwkgVVNIT1JUCQl1c1ZvbHRhZ2VDb2RlOwkJCQkJCQkJCS8vIFRoZSBWb2x0YWdlIElELCBlaXRoZXIgR1BJTyBvciBJMkMgY29kZQorCSBVU0hPUlQJCXVzVm9sdGFnZVZhbHVlOwkJCQkJCQkJCS8vIFRoZSBjb3JyZXNwb25kaW5nIFZvbHRhZ2UgVmFsdWUsIGluIG1WCit9Vk9MVEFHRV9MVVRfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX0ZPUk1VTEFfVjIKK3sKKwkgVUNIQVIJCXVjTnVtT2ZWb2x0YWdlRW50cmllczsJCQkJCS8vIE51bWJlciBvZiBWb2x0YWdlIEVudHJ5LCB3aGljaCBpbmRpY2F0ZSBtYXggVm9sdGFnZQorCSBVQ0hBUgkJdWNSZXNlcnZlZFszXTsKKwkgVk9MVEFHRV9MVVRfRU5UUlkgYXNWSURBZGp1c3RFbnRyaWVzWzMyXTsvLyAzMiBpcyBmb3IgYWxsb2NhdGlvbiwgdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcyBpcyBpbiB1Y051bU9mVm9sdGFnZUVudHJpZXMKK31BVE9NX1ZPTFRBR0VfRk9STVVMQV9WMjsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9DT05UUk9MCit7CisJVUNIQVIJCSB1Y1ZvbHRhZ2VDb250cm9sSWQ7CQkJCQkJCS8vSW5kaWNhdGUgaXQgaXMgY29udHJvbGxlZCBieSBJMkMgb3IgR1BJTyBvciBIVyBzdGF0ZSBtYWNoaW5lCQkKKyAgVUNIQVIgICAgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7CisgIFVDSEFSICAgIHVjVm9sdGFnZUNvbnRyb2xBZGRyZXNzOworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VDb250cm9sT2Zmc2V0OwkgCQorICBVU0hPUlQgICB1c0dwaW9QaW5fQUluZGV4OwkJCQkJCQkJLy9HUElPX1BBRCByZWdpc3RlciBpbmRleAorICBVQ0hBUiAgICB1Y0dwaW9QaW5CaXRTaGlmdFs5XTsJCQkJCQkvL2F0IG1vc3QgOCBwaW4gc3VwcG9ydCAyNTUgVklEcywgdGVybWludGF0ZSB3aXRoIDB4ZmYKKwlVQ0hBUgkJIHVjUmVzZXJ2ZWQ7Cit9QVRPTV9WT0xUQUdFX0NPTlRST0w7CisKKy8vIERlZmluZSB1Y1ZvbHRhZ2VDb250cm9sSWQKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0hXCQkJCQkJCTB4MDAKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0kyQ19NQVNLCQkJCTB4N0YKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0dQSU8JCQkJCQkweDgwCi0jZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9MTTY0CQkJCQkJCQkweDAxCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4IENvcmUgVm9sdGFnZSAqLwotI2RlZmluZQlWT0xUQUdFX0NPTlRST0xfSURfREFDCQkJCQkJCQkweDAyCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4L1I2eHggTVZEREMsTVZERFEgb3IgVkREQ0kgKi8KLSNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX1ZUMTE2eE0JCQkJCQkweDAzCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNnh4IENvcmUgVm9sdGFnZSAqLwotI2RlZmluZSBWT0xUQUdFX0NPTlRST0xfSURfRFM0NDAyCQkJCQkJCTB4MDQKKyNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX0xNNjQJCQkJCQkJCTB4MDEJCQkJCQkJCQkvL0kyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4IENvcmUgVm9sdGFnZQorI2RlZmluZQlWT0xUQUdFX0NPTlRST0xfSURfREFDCQkJCQkJCQkweDAyCQkJCQkJCQkJLy9JMkMgY29udHJvbCwgdXNlZCBmb3IgUjV4eC9SNnh4IE1WRERDLE1WRERRIG9yIFZERENJCisjZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9WVDExNnhNCQkJCQkJMHgwMwkJCQkJCQkJCS8vSTJDIGNvbnRyb2wsIHVzZWQgZm9yIFI2eHggQ29yZSBWb2x0YWdlCisjZGVmaW5lIFZPTFRBR0VfQ09OVFJPTF9JRF9EUzQ0MDIJCQkJCQkJMHgwNAkJCQkJCQkJCQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WT0xUQUdFX09CSkVDVCB7Ci0JVUNIQVIgdWNWb2x0YWdlVHlwZTsJLyogSW5kaWNhdGUgVm9sdGFnZSBTb3VyY2U6IFZEREMsIE1WRERDLCBNVkREUSBvciBNVkREQ0kgKi8KLQlVQ0hBUiB1Y1NpemU7CQkvKiBTaXplIG9mIE9iamVjdCAqLwotCUFUT01fVk9MVEFHRV9DT05UUk9MIGFzQ29udHJvbDsJLyogZGVzY3JpYiBob3cgdG8gY29udHJvbCAqLwotCUFUT01fVk9MVEFHRV9GT1JNVUxBIGFzRm9ybXVsYTsJLyogSW5kaWNhdGUgSG93IHRvIGNvbnZlcnQgcmVhbCBWb2x0YWdlIHRvIFZJRCAqLwotfSBBVE9NX1ZPTFRBR0VfT0JKRUNUOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfT0JKRUNUCit7CisgCSBVQ0hBUgkJdWNWb2x0YWdlVHlwZTsJCQkJCQkJCQkvL0luZGljYXRlIFZvbHRhZ2UgU291cmNlOiBWRERDLCBNVkREQywgTVZERFEgb3IgTVZERENJCSAKKwkgVUNIQVIJCXVjU2l6ZTsJCQkJCQkJCQkJCQkJLy9TaXplIG9mIE9iamVjdAkKKwkgQVRPTV9WT0xUQUdFX0NPTlRST0wJCQlhc0NvbnRyb2w7CQkJLy9kZXNjcmliIGhvdyB0byBjb250cm9sIAkgCisgCSBBVE9NX1ZPTFRBR0VfRk9STVVMQQkJCWFzRm9ybXVsYTsJCQkvL0luZGljYXRlIEhvdyB0byBjb252ZXJ0IHJlYWwgVm9sdGFnZSB0byBWSUQgCit9QVRPTV9WT0xUQUdFX09CSkVDVDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9PQkpFQ1RfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9WT0xUQUdFX09CSkVDVCBhc1ZvbHRhZ2VPYmpbM107CS8qIEluZm8gZm9yIFZvbHRhZ2UgY29udHJvbCAqLwotfSBBVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk87Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fVk9MVEFHRV9PQkpFQ1RfVjIKK3sKKyAJIFVDSEFSCQl1Y1ZvbHRhZ2VUeXBlOwkJCQkJCQkJCS8vSW5kaWNhdGUgVm9sdGFnZSBTb3VyY2U6IFZEREMsIE1WRERDLCBNVkREUSBvciBNVkREQ0kJIAorCSBVQ0hBUgkJdWNTaXplOwkJCQkJCQkJCQkJCQkvL1NpemUgb2YgT2JqZWN0CQorCSBBVE9NX1ZPTFRBR0VfQ09OVFJPTAkJCWFzQ29udHJvbDsJCQkvL2Rlc2NyaWIgaG93IHRvIGNvbnRyb2wgCSAKKyAJIEFUT01fVk9MVEFHRV9GT1JNVUxBX1YyCWFzRm9ybXVsYTsJCQkvL0luZGljYXRlIEhvdyB0byBjb252ZXJ0IHJlYWwgVm9sdGFnZSB0byBWSUQgCit9QVRPTV9WT0xUQUdFX09CSkVDVF9WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTEVBS0lEX1ZPTFRBR0UgewotCVVDSEFSIHVjTGVha2FnZUlkOwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci0JVVNIT1JUIHVzVm9sdGFnZTsKLX0gQVRPTV9MRUFLSURfVk9MVEFHRTsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX09CSkVDVF9JTkZPCit7CisgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisJIEFUT01fVk9MVEFHRV9PQkpFQ1QJCQlhc1ZvbHRhZ2VPYmpbM107CS8vSW5mbyBmb3IgVm9sdGFnZSBjb250cm9sCSAgCSAKK31BVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk87CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFIHsKLQlVQ0hBUiB1Y1Byb2ZpbGVJZDsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCVVTSE9SVCB1c1NpemU7Ci0JVVNIT1JUIHVzRWZ1c2VTcGFyZVN0YXJ0QWRkcjsKLQlVU0hPUlQgdXNGdXNlSW5kZXhbOF07CS8qIGZyb20gTFNCIHRvIE1TQiwgTWF4IDhiaXQsZW5kIG9mIDB4ZmZmZiBpZiBsZXNzIHRoYW4gOCBlZnVzZSBpZCwgKi8KLQlBVE9NX0xFQUtJRF9WT0xUQUdFIGFzTGVha1ZvbFsyXTsJLyogTGVha2lkIGFuZCByZWxhdGQgdm9sdGFnZSAqLwotfSBBVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk9fVjIKK3sKKyAgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOyAKKwkgQVRPTV9WT0xUQUdFX09CSkVDVF9WMgkJCWFzVm9sdGFnZU9ialszXTsJLy9JbmZvIGZvciBWb2x0YWdlIGNvbnRyb2wJICAJIAorfUFUT01fVk9MVEFHRV9PQkpFQ1RfSU5GT19WMjsKIAotLyogdWNQcm9maWxlSWQgKi8KLSNkZWZpbmUJQVRPTV9BU0lDX1BST0ZJTEVfSURfRUZVU0VfVk9MVEFHRQkJCTEKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9MRUFLSURfVk9MVEFHRQoreworCVVDSEFSCQl1Y0xlYWthZ2VJZDsKKwlVQ0hBUgkJdWNSZXNlcnZlZDsKKwlVU0hPUlQJdXNWb2x0YWdlOworfUFUT01fTEVBS0lEX1ZPTFRBR0U7CisKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRQoreworCVVDSEFSCQl1Y1Byb2ZpbGVJZDsKKwlVQ0hBUgkJdWNSZXNlcnZlZDsKKwlVU0hPUlQJdXNTaXplOworCVVTSE9SVAl1c0VmdXNlU3BhcmVTdGFydEFkZHI7CisJVVNIT1JUCXVzRnVzZUluZGV4WzhdOwkJCQkJCQkJCQkJCS8vZnJvbSBMU0IgdG8gTVNCLCBNYXggOGJpdCxlbmQgb2YgMHhmZmZmIGlmIGxlc3MgdGhhbiA4IGVmdXNlIGlkLCAKKwlBVE9NX0xFQUtJRF9WT0xUQUdFCQkJCQlhc0xlYWtWb2xbMl07CQkJLy9MZWFraWQgYW5kIHJlbGF0ZCB2b2x0YWdlCit9QVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRTsKKworLy91Y1Byb2ZpbGVJZAorI2RlZmluZQlBVE9NX0FTSUNfUFJPRklMRV9JRF9FRlVTRV9WT0xUQUdFCQkJMQkJCiAjZGVmaW5lCUFUT01fQVNJQ19QUk9GSUxFX0lEX0VGVVNFX1BFUkZPUk1BTkNFX1ZPTFRBR0UJCQkxCiAjZGVmaW5lCUFUT01fQVNJQ19QUk9GSUxFX0lEX0VGVVNFX1RIRVJNQUxfVk9MVEFHRQkJCQkJMgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX1BST0ZJTElOR19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgYXNIZWFkZXI7Ci0JQVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRSBhc1ZvbHRhZ2U7Ci19IEFUT01fQVNJQ19QUk9GSUxJTkdfSU5GTzsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9BU0lDX1BST0ZJTElOR19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkJCWFzSGVhZGVyOyAKKwlBVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFCQkJYXNWb2x0YWdlOworfUFUT01fQVNJQ19QUk9GSUxJTkdfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJfU09VUkNFX09CSkVDVCB7Ci0JVUNIQVIgdWNQd3JTcmNJZDsJLyogIFBvd2VyIHNvdXJjZSAqLwotCVVDSEFSIHVjUHdyU2Vuc29yVHlwZTsJLyogIEdQSU8sIEkyQyBvciBub25lICovCi0JVUNIQVIgdWNQd3JTZW5zSWQ7CS8qICBpZiBHUElPIGRldGVjdCwgaXQgaXMgR1BJTyBpZCwgIGlmIEkyQyBkZXRlY3QsIGl0IGlzIEkyQyBpZCAqLwotCVVDSEFSIHVjUHdyU2Vuc1NsYXZlQWRkcjsJLyogIFNsYXZlIGFkZHJlc3MgaWYgSTJDIGRldGVjdCAqLwotCVVDSEFSIHVjUHdyU2Vuc1JlZ0luZGV4OwkvKiAgSTJDIHJlZ2lzdGVyIEluZGV4IGlmIEkyQyBkZXRlY3QgKi8KLQlVQ0hBUiB1Y1B3clNlbnNSZWdCaXRNYXNrOwkvKiAgZGV0ZWN0IHdoaWNoIGJpdCBpcyB1c2VkIGlmIEkyQyBkZXRlY3QgKi8KLQlVQ0hBUiB1Y1B3clNlbnNBY3RpdmVTdGF0ZTsJLyogIGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVbM107CS8qICByZXNlcnZlICovCi0JVVNIT1JUIHVzU2Vuc1B3cjsJLyogIGluIHVuaXQgb2Ygd2F0dCAqLwotfSBBVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1Q7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUl9TT1VSQ0VfT0JKRUNUCit7CisJVUNIQVIJdWNQd3JTcmNJZDsJCQkJCQkJCQkJCQkJLy8gUG93ZXIgc291cmNlCisJVUNIQVIJdWNQd3JTZW5zb3JUeXBlOwkJCQkJCQkJCQkvLyBHUElPLCBJMkMgb3Igbm9uZQorCVVDSEFSCXVjUHdyU2Vuc0lkOwkJCQkJCQkJCQkJICAvLyBpZiBHUElPIGRldGVjdCwgaXQgaXMgR1BJTyBpZCwgIGlmIEkyQyBkZXRlY3QsIGl0IGlzIEkyQyBpZAorCVVDSEFSCXVjUHdyU2Vuc1NsYXZlQWRkcjsJCQkJCQkJCQkvLyBTbGF2ZSBhZGRyZXNzIGlmIEkyQyBkZXRlY3QKKwlVQ0hBUiB1Y1B3clNlbnNSZWdJbmRleDsJCQkJCQkJCQkvLyBJMkMgcmVnaXN0ZXIgSW5kZXggaWYgSTJDIGRldGVjdAorCVVDSEFSIHVjUHdyU2Vuc1JlZ0JpdE1hc2s7CQkJCQkJCQkvLyBkZXRlY3Qgd2hpY2ggYml0IGlzIHVzZWQgaWYgSTJDIGRldGVjdAorCVVDSEFSCXVjUHdyU2Vuc0FjdGl2ZVN0YXRlOwkJCQkJCQkJLy8gaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZQorCVVDSEFSCXVjUmVzZXJ2ZVszXTsJCQkJCQkJCQkJCQkvLyByZXNlcnZlCQkKKwlVU0hPUlQgdXNTZW5zUHdyOwkJCQkJCQkJCQkJCQkvLyBpbiB1bml0IG9mIHdhdHQKK31BVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1Q7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSX1NPVVJDRV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgYXNIZWFkZXI7Ci0JVUNIQVIgYXNQd3JiZWhhdmVbMTZdOwotCUFUT01fUE9XRVJfU09VUkNFX09CSkVDVCBhc1B3ck9ialsxXTsKLX0gQVRPTV9QT1dFUl9TT1VSQ0VfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSX1NPVVJDRV9JTkZPCit7CisJCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkJYXNIZWFkZXI7CisJCVVDSEFSCQkJCQkJCQkJCQkJYXNQd3JiZWhhdmVbMTZdOworCQlBVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1QJCWFzUHdyT2JqWzFdOworfUFUT01fUE9XRVJfU09VUkNFX0lORk87CiAKLS8qIERlZmluZSB1Y1B3clNyY0lkICovCisKKy8vRGVmaW5lIHVjUHdyU3JjSWQKICNkZWZpbmUgUE9XRVJTT1VSQ0VfUENJRV9JRDEJCQkJCQkweDAwCiAjZGVmaW5lIFBPV0VSU09VUkNFXzZQSU5fQ09OTkVDVE9SX0lEMQkweDAxCiAjZGVmaW5lIFBPV0VSU09VUkNFXzhQSU5fQ09OTkVDVE9SX0lEMQkweDAyCiAjZGVmaW5lIFBPV0VSU09VUkNFXzZQSU5fQ09OTkVDVE9SX0lEMgkweDA0CiAjZGVmaW5lIFBPV0VSU09VUkNFXzhQSU5fQ09OTkVDVE9SX0lEMgkweDA4CiAKLS8qIGRlZmluZSB1Y1B3clNlbnNvcklkICovCisvL2RlZmluZSB1Y1B3clNlbnNvcklkCiAjZGVmaW5lIFBPV0VSX1NFTlNPUl9BTFdBWVMJCQkJCQkJMHgwMAogI2RlZmluZSBQT1dFUl9TRU5TT1JfR1BJTwkJCQkJCQkJMHgwMQogI2RlZmluZSBQT1dFUl9TRU5TT1JfSTJDCQkJCQkJCQkweDAyCiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUxPTkcgIHVsQm9vdFVwRW5naW5lQ2xvY2s7CisgIFVMT05HICB1bERlbnRpc3RWQ09GcmVxOyAgICAgICAgICAKKyAgVUxPTkcgIHVsQm9vdFVwVU1BQ2xvY2s7ICAgICAgICAgIAorICBVTE9ORyAgdWxSZXNlcnZlZDFbOF07ICAgICAgICAgICAgCisgIFVMT05HICB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7CisgIFVMT05HICB1bE90aGVyRGlzcGxheU1pc2M7CisgIFVMT05HICB1bEdQVUNhcEluZm87CisgIFVMT05HICB1bFJlc2VydmVkMlszXTsgICAgICAgICAgICAKKyAgVUxPTkcgIHVsU3lzdGVtQ29uZmlnOyAgICAgICAgICAgIAorICBVTE9ORyAgdWxDUFVDYXBJbmZvOyAgICAgICAgICAgICAgCisgIFVTSE9SVCB1c01heE5CVm9sdGFnZTsgIAorICBVU0hPUlQgdXNNaW5OQlZvbHRhZ2U7ICAKKyAgVVNIT1JUIHVzQm9vdFVwTkJWb2x0YWdlOyAgICAgICAgIAorICBVU0hPUlQgdXNFeHREaXNwQ29ubkluZm9PZmZzZXQ7ICAKKyAgVUNIQVIgIHVjSHRjVG1wTG10OyAgIAorICBVQ0hBUiAgdWNUak9mZnNldDsgICAgCisgIFVDSEFSICB1Y01lbW9yeVR5cGU7ICAKKyAgVUNIQVIgIHVjVU1BQ2hhbm5lbE51bWJlcjsKKyAgVUxPTkcgIHVsQ1NSX00zX0FSQl9DTlRMX0RFRkFVTFRbMTBdOyAgCisgIFVMT05HICB1bENTUl9NM19BUkJfQ05UTF9VVkRbMTBdOyAKKyAgVUxPTkcgIHVsQ1NSX00zX0FSQl9DTlRMX0ZTM0RbMTBdOworICBVTE9ORyAgdWxSZXNlcnZlZDNbNDJdOyAKKyAgQVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTyBzRXh0RGlzcENvbm5JbmZvOyAgIAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNjsgICAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNiBEZXNjcmlwdGlvbgorLy91bEJvb3RVcEVuZ2luZUNsb2NrOiAgICAgICAgICAgICAgVkJJT1MgYm9vdHVwIEVuZ2luZSBjbG9jayBmcmVxdWVuY3ksIGluIDEwa0h6IHVuaXQuIAorLy91bERlbnRpc3RWQ09GcmVxOiAgICAgICAgICAgICAgICAgRGVudGlzdCBWQ08gY2xvY2sgaW4gMTBrSHogdW5pdC4gCisvL3VsQm9vdFVwVU1BQ2xvY2s6ICAgICAgICAgICAgICAgICBTeXN0ZW0gbWVtb3J5IGJvb3QgdXAgY2xvY2sgZnJlcXVlbmN5IGluIDEwS2h6IHVuaXQuIAorLy91bFJlc2VydmVkMVs4XSAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQgYnkgbm93LCBtdXN0IGJlIDB4MC4gCisvL3VsQm9vdFVwUmVxRGlzcGxheVZlY3RvcgkgICAgICAgIFZCSU9TIGJvb3QgdXAgZGlzcGxheSBJRHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDAwMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDEwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwMDggCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlA2X1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwNDAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwODAgICAgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAyMDAgICAgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDA0MDAgICAgICAgIAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQNV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwODAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwMDIKKy8vdWxPdGhlckRpc3BsYXlNaXNjICAgICAgCSAgICAgICAgT3RoZXIgZGlzcGxheSByZWxhdGVkIGZsYWdzLCBub3QgZGVmaW5lZCB5ZXQuIAorLy91bEdQVUNhcEluZm8gICAgICAgICAgICAgICAgICAgICAgVEJECisvL3VsUmVzZXJ2ZWQyWzNdICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIDB4MCBmb3IgdGhlIHJlc2VydmVkLgorLy91bFN5c3RlbUNvbmZpZyAgICAgICAgICAgICAgICAgICAgVEJECisvL3VsQ1BVQ2FwSW5mbyAgICAgICAgICAgICAgICAgICAgICBUQkQKKy8vdXNNYXhOQlZvbHRhZ2UgICAgICAgICAgICAgICAgICAgIEhpZ2ggTkIgdm9sdGFnZSBpbiB1bml0IG9mIG12LCBjYWxjdWxhdGVkIHVzaW5nIGN1cnJlbnQgVkRETkIgKEQyNEYyeERDKSBhbmQgVkRETkIgb2Zmc2V0IGZ1c2UuIAorLy91c01pbk5CVm9sdGFnZSAgICAgICAgICAgICAgICAgICAgTG93IE5CIHZvbHRhZ2UgaW4gdW5pdCBvZiBtdiwgY2FsY3VsYXRlZCB1c2luZyBjdXJyZW50IFZERE5CIChEMjRGMnhEQykgYW5kIFZERE5CIG9mZnNldCBmdXNlLgorLy91c0Jvb3RVcE5CVm9sdGFnZSAgICAgICAgICAgICAgICAgQm9vdCB1cCBOQiB2b2x0YWdlIGluIHVuaXQgb2YgbXYuCisvL3VjSHRjVG1wTG10ICAgICAgICAgICAgICAgICAgICAgICBCaXQgWzIyOjE2XSBvZiBEMjRGM3g2NCBUaGVybWFsIENvbnRyb2wgKEhUQykgUmVnaXN0ZXIuCisvL3VjVGpPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICBCaXQgWzI4OjIyXSBvZiBEMjRGM3hFNCBUaGVybXRyaXAgU3RhdHVzIFJlZ2lzdGVyLG1heSBub3QgYmUgbmVlZGVkLgorLy91Y01lbW9yeVR5cGUgICAgICAgICAgICAgICAgICAgICAgWzM6MF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bNzo0XSBpcyByZXNlcnZlZC4KKy8vdWNVTUFDaGFubmVsTnVtYmVyICAgICAgCSAgICAgICAgU3lzdGVtIG1lbW9yeSBjaGFubmVsIG51bWJlcnMuIAorLy91c0V4dERpc3BDb25uZWN0aW9uSW5mb09mZnNldCAgICAgQVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTyBvZmZzZXQgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHRoaXMgdGFibGUuIAorLy91bENTUl9NM19BUkJfQ05UTF9ERUZBVUxUWzEwXSAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgZGVmYXVsdAorLy91bENTUl9NM19BUkJfQ05UTF9VVkRbMTBdICAgICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgVVZEIHBsYXliYWNrLgorLy91bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXSAgICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgRnVsbCBTY3JlZW4gM0QgYXBwbGljYXRpb25zLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFRoaXMgcG9ydGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBleHQgdGhlcm1hbCBjaGlwIG9yIGVuZ2luZS9tZW1vcnkgY2xvY2sgU1MgY2hpcCBpcyBwb3B1bGF0ZWQgb24gYSBkZXNpZ24gKi8KLS8qIE1lbW9yeSBTUyBJbmZvIFRhYmxlICovCi0vKiBEZWZpbmUgTWVtb3J5IENsb2NrIFNTIGNoaXAgSUQgKi8KKy8vIFRoaXMgcG9ydGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBleHQgdGhlcm1hbCBjaGlwIG9yIGVuZ2luZS9tZW1vcnkgY2xvY2sgU1MgY2hpcCBpcyBwb3B1bGF0ZWQgb24gYSBkZXNpZ24KKy8vTWVtb3J5IFNTIEluZm8gVGFibGUKKy8vRGVmaW5lIE1lbW9yeSBDbG9jayBTUyBjaGlwIElECiAjZGVmaW5lIElDUzkxNzE5ICAxCiAjZGVmaW5lIElDUzkxNzIwICAyCiAKLS8qIERlZmluZSBvbmUgc3RydWN0dXJlIHRvIGluZm9ybSBTVyBhICJibG9jayBvZiBkYXRhIiB3cml0aW5nIHRvIGV4dGVybmFsIFNTIGNoaXAgdmlhIEkyQyBwcm90b2NvbCAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RBVEFfUkVDT1JEIHsKLQlVQ0hBUiB1Y051bmJlck9mQnl0ZXM7CS8qIEluZGljYXRlcyBob3cgbWFueSBieXRlcyBTVyBuZWVkcyB0byB3cml0ZSB0byB0aGUgZXh0ZXJuYWwgQVNJQyBmb3Igb25lIGJsb2NrLCBiZXNpZGVzIHRvICJTdGFydCIgYW5kICJTdG9wIiAqLwotCVVDSEFSIHVjSTJDRGF0YVsxXTsJLyogSTJDIGRhdGEgaW4gYnl0ZXMsIHNob3VsZCBiZSBsZXNzIHRoYW4gMTYgYnl0ZXMgdXN1YWxseSAqLwotfSBBVE9NX0kyQ19EQVRBX1JFQ09SRDsKKy8vRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGEgImJsb2NrIG9mIGRhdGEiIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9JMkNfREFUQV9SRUNPUkQKK3sKKyAgVUNIQVIgICAgICAgICB1Y051bmJlck9mQnl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5kaWNhdGVzIGhvdyBtYW55IGJ5dGVzIFNXIG5lZWRzIHRvIHdyaXRlIHRvIHRoZSBleHRlcm5hbCBBU0lDIGZvciBvbmUgYmxvY2ssIGJlc2lkZXMgdG8gIlN0YXJ0IiBhbmQgIlN0b3AiCisgIFVDSEFSICAgICAgICAgdWNJMkNEYXRhWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0kyQyBkYXRhIGluIGJ5dGVzLCBzaG91bGQgYmUgbGVzcyB0aGFuIDE2IGJ5dGVzIHVzdWFsbHkKK31BVE9NX0kyQ19EQVRBX1JFQ09SRDsKIAotLyogRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGhvdyBtYW55IGJsb2NrcyBvZiBkYXRhIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sLCBpbiBhZGRpdGlvbiB0byBvdGhlciBpbmZvcm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPIHsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwkvKiBJMkMgbGluZSBhbmQgSFcvU1cgYXNzaXN0ZWQgY2FwLiAqLwotCVVDSEFSIHVjU1NDaGlwSUQ7CS8qIFNTIGNoaXAgYmVpbmcgdXNlZCAqLwotCVVDSEFSIHVjU1NDaGlwU2xhdmVBZGRyOwkvKiBTbGF2ZSBBZGRyZXNzIHRvIHNldCB1cCB0aGlzIFNTIGNoaXAgKi8KLQlVQ0hBUiB1Y051bU9mSTJDRGF0YVJlY29yZHM7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrICovCi0JQVRPTV9JMkNfREFUQV9SRUNPUkQgYXNJMkNEYXRhWzFdOwotfSBBVE9NX0kyQ19ERVZJQ0VfU0VUVVBfSU5GTzsKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX01WRERfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9JMkNfREVWSUNFX1NFVFVQX0lORk8gYXNJMkNTZXR1cFsxXTsKLX0gQVRPTV9BU0lDX01WRERfSU5GTzsKKy8vRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGhvdyBtYW55IGJsb2NrcyBvZiBkYXRhIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sLCBpbiBhZGRpdGlvbiB0byBvdGhlciBpbmZvcm1hdGlvbgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPCit7CisgIEFUT01fSTJDX0lEX0NPTkZJR19BQ0NFU1MgICAgICAgc3VjSTJjSWQ7ICAgICAgICAgICAgICAgLy9JMkMgbGluZSBhbmQgSFcvU1cgYXNzaXN0ZWQgY2FwLgorICBVQ0hBUgkJICAgICAgICAgICAgICAgICAgICAgICAgdWNTU0NoaXBJRDsgICAgICAgICAgICAgLy9TUyBjaGlwIGJlaW5nIHVzZWQKKyAgVUNIQVIJCSAgICAgICAgICAgICAgICAgICAgICAgIHVjU1NDaGlwU2xhdmVBZGRyOyAgICAgIC8vU2xhdmUgQWRkcmVzcyB0byBzZXQgdXAgdGhpcyBTUyBjaGlwCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNOdW1PZkkyQ0RhdGFSZWNvcmRzOyAgLy9udW1iZXIgb2YgZGF0YSBibG9jaworICBBVE9NX0kyQ19EQVRBX1JFQ09SRCAgICAgICAgICAgIGFzSTJDRGF0YVsxXTsgIAorfUFUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPOwogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQVNJQ19NVkREX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCSAgICAgIHNIZWFkZXI7IAorICBBVE9NX0kyQ19ERVZJQ0VfU0VUVVBfSU5GTyAgICAgIGFzSTJDU2V0dXBbMV07Cit9QVRPTV9BU0lDX01WRERfSU5GTzsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNkZWZpbmUgQVRPTV9NQ0xLX1NTX0lORk8gICAgICAgICBBVE9NX0FTSUNfTVZERF9JTkZPCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19TU19BU1NJR05NRU5UIHsKLQlVTE9ORyB1bFRhcmdldENsb2NrUmFuZ2U7CS8qIENsb2NrIE91dCBmcmVxdWVuY2UgKFZDTyApLCBpbiB1bml0IG9mIDEwS2h6ICovCi0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkvKiBpbiB1bml0IG9mIDAuMDElICovCi0JVVNIT1JUIHVzU3ByZWFkUmF0ZUluS2h6OwkvKiBpbiB1bml0IG9mIGtIeiwgbW9kdWxhdGlvbiBmcmVxICovCi0JVUNIQVIgdWNDbG9ja0luZGljYXRpb247CS8qIEluZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUyAqLwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1Nb2RlOwkvKiBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfU1NfQVNTSUdOTUVOVAoreworCVVMT05HCQkJCQkJCQl1bFRhcmdldENsb2NrUmFuZ2U7CQkJCQkJLy9DbG9jayBPdXQgZnJlcXVlbmNlIChWQ08gKSwgaW4gdW5pdCBvZiAxMEtoegorICBVU0hPUlQgICAgICAgICAgICAgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkJLy9pbiB1bml0IG9mIDAuMDElCisJVVNIT1JUCQkJCQkJCXVzU3ByZWFkUmF0ZUluS2h6OwkJCQkJCS8vaW4gdW5pdCBvZiBrSHosIG1vZHVsYXRpb24gZnJlcQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjQ2xvY2tJbmRpY2F0aW9uOwkJCQkJICAvL0luZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUworCVVDSEFSCQkJCQkJCQl1Y1NwcmVhZFNwZWN0cnVtTW9kZTsJCQkJCS8vQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuCisJVUNIQVIJCQkJCQkJCXVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9BU0lDX1NTX0FTU0lHTk1FTlQ7CiAKLS8qIERlZmluZSB1Y1NwcmVhZFNwZWN0cnVtVHlwZSAqLworLy9EZWZpbmUgdWNDbG9ja0luZGljYXRpb24sIFNXIHVzZXMgdGhlIElEcyBiZWxvdyB0byBzZWFyY2ggaWYgdGhlIFNTIGlzIHJlcXVyaWVkL2VuYWJsZWQgb24gYSBjbG9jayBicmFuY2gvc2lnbmFsIHR5cGUuCisvL1NTIGlzIG5vdCByZXF1aXJlZCBvciBlbmFibGVkIGlmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLgogI2RlZmluZSBBU0lDX0lOVEVSTkFMX01FTU9SWV9TUwkJCTEKICNkZWZpbmUgQVNJQ19JTlRFUk5BTF9FTkdJTkVfU1MJCQkyCi0jZGVmaW5lIEFTSUNfSU5URVJOQUxfVVZEX1NTCQkJCTMKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9VVkRfU1MgICAgICAgIDMKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9UTURTICAgIDQKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9IRE1JICAgIDUKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9MVkRTICAgIDYKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9EUCAgICAgIDcKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9EQ1BMTCAgIDgKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVCBhc1NwcmVhZFNwZWN0cnVtWzRdOwotfSBBVE9NX0FTSUNfSU5URVJOQUxfU1NfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMgoreworCVVMT05HCQkJCQkJCQl1bFRhcmdldENsb2NrUmFuZ2U7CQkJCQkJLy9Gb3IgbWVtL2VuZ2luZS91dmQsIENsb2NrIE91dCBmcmVxdWVuY2UgKFZDTyApLCBpbiB1bml0IG9mIDEwS2h6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3IgVE1EUy9IRE1JL0xWRFMsIGl0IGlzIHBpeGVsIGNsb2NrICwgZm9yIERQLCBpdCBpcyBsaW5rIGNsb2NrICggMjcwMDAgb3IgMTYyMDAgKQorICBVU0hPUlQgICAgICAgICAgICAgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkJLy9pbiB1bml0IG9mIDAuMDElCisJVVNIT1JUCQkJCQkJCXVzU3ByZWFkUmF0ZUluMTBIejsJCQkJCQkvL2luIHVuaXQgb2YgMTBIeiwgbW9kdWxhdGlvbiBmcmVxCisgIFVDSEFSICAgICAgICAgICAgICAgdWNDbG9ja0luZGljYXRpb247CQkJCQkgIC8vSW5kaWNhdGUgd2hpY2ggY2xvY2sgc291cmNlIG5lZWRzIFNTCisJVUNIQVIJCQkJCQkJCXVjU3ByZWFkU3BlY3RydW1Nb2RlOwkJCQkJLy9CaXQwPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZCwgYml0MT0wOiBpbnRlcm5hbCBTUyBiaXQxPTE6IGV4dGVybmFsIFNTCisJVUNIQVIJCQkJCQkJCXVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjI7CiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVNjcmF0Y2ggUGFkIERlZmluaXRpb24gUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vdWNTcHJlYWRTcGVjdHJ1bU1vZGUKKy8vI2RlZmluZSBBVE9NX1NTX0RPV05fU1BSRUFEX01PREVfTUFTSyAgICAgICAgICAweDAwMDAwMDAwCisvLyNkZWZpbmUgQVRPTV9TU19ET1dOX1NQUkVBRF9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorLy8jZGVmaW5lIEFUT01fU1NfQ0VOVFJFX1NQUkVBRF9NT0RFX01BU0sgICAgICAgIDB4MDAwMDAwMDEKKy8vI2RlZmluZSBBVE9NX1NTX0NFTlRSRV9TUFJFQURfTU9ERSAgICAgICAgICAgICAweDAwMDAwMDAxCisvLyNkZWZpbmUgQVRPTV9JTlRFUk5BTF9TU19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorLy8jZGVmaW5lIEFUT01fRVhURVJOQUxfU1NfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkgICAgICBzSGVhZGVyOyAKKyAgQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlQJCSAgICAgIGFzU3ByZWFkU3BlY3RydW1bNF07Cit9QVRPTV9BU0lDX0lOVEVSTkFMX1NTX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfSU5URVJOQUxfU1NfSU5GT19WMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJICAgICAgc0hlYWRlcjsgCisgIEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YyCQkgIGFzU3ByZWFkU3BlY3RydW1bMV07ICAgICAgLy90aGlzIGlzIHBvaW50IG9ubHkuIAorfUFUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPX1YyOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjMKK3sKKwlVTE9ORwkJCQkJCQkJdWxUYXJnZXRDbG9ja1JhbmdlOwkJCQkJCS8vRm9yIG1lbS9lbmdpbmUvdXZkLCBDbG9jayBPdXQgZnJlcXVlbmNlIChWQ08gKSwgaW4gdW5pdCBvZiAxMEtoegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yIFRNRFMvSERNSS9MVkRTLCBpdCBpcyBwaXhlbCBjbG9jayAsIGZvciBEUCwgaXQgaXMgbGluayBjbG9jayAoIDI3MDAwIG9yIDE2MjAwICkKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsJCS8vaW4gdW5pdCBvZiAwLjAxJQorCVVTSE9SVAkJCQkJCQl1c1NwcmVhZFJhdGVJbjEwSHo7CQkJCQkJLy9pbiB1bml0IG9mIDEwSHosIG1vZHVsYXRpb24gZnJlcQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjQ2xvY2tJbmRpY2F0aW9uOwkJCQkJICAvL0luZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUworCVVDSEFSCQkJCQkJCQl1Y1NwcmVhZFNwZWN0cnVtTW9kZTsJCQkJCS8vQml0MD0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQsIGJpdDE9MDogaW50ZXJuYWwgU1MgYml0MT0xOiBleHRlcm5hbCBTUworCVVDSEFSCQkJCQkJCQl1Y1Jlc2VydmVkWzJdOworfUFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YzOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX0lOVEVSTkFMX1NTX0lORk9fVjMKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCSAgICAgIHNIZWFkZXI7IAorICBBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMwkJICBhc1NwcmVhZFNwZWN0cnVtWzFdOyAgICAgIC8vdGhpcyBpcyBwb2ludGVyIG9ubHkuIAorfUFUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPX1YzOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09U2NyYXRjaCBQYWQgRGVmaW5pdGlvbiBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUX0lORk9fREVGICAwCiAjZGVmaW5lIEFUT01fUk9NX0xPQ0FUSU9OX0RFRiAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9UVl9TVEFOREFSRF9ERUYgICAgICAgICAgMgpAQCAtMjk5NSw3ICszODUyLDggQEAKICNkZWZpbmUgQVRPTV9JMkNfQ0hBTk5FTF9TVEFUVVNfREVGICAgOAogI2RlZmluZSBBVE9NX0kyQ19DSEFOTkVMX1NUQVRVUzFfREVGICA5CiAKLS8qICBCSU9TXzBfU0NSQVRDSCBEZWZpbml0aW9uICovCisKKy8vIEJJT1NfMF9TQ1JBVENIIERlZmluaXRpb24gCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9NT05PICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKICNkZWZpbmUgQVRPTV9TMF9DUlQxX0NPTE9SICAgICAgICAgICAgICAweDAwMDAwMDAyTAogI2RlZmluZSBBVE9NX1MwX0NSVDFfTUFTSyAgICAgICAgICAgICAgIChBVE9NX1MwX0NSVDFfTU9OTytBVE9NX1MwX0NSVDFfQ09MT1IpCkBAIC0zMDA4LDYgKzM4NjYsNyBAQAogI2RlZmluZSBBVE9NX1MwX0NWX0RJTl9BICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBMCiAjZGVmaW5lIEFUT01fUzBfQ1ZfTUFTS19BICAgICAgICAgICAgICAgKEFUT01fUzBfQ1ZfQStBVE9NX1MwX0NWX0RJTl9BKQogCisKICNkZWZpbmUgQVRPTV9TMF9DUlQyX01PTk8gICAgICAgICAgICAgICAweDAwMDAwMTAwTAogI2RlZmluZSBBVE9NX1MwX0NSVDJfQ09MT1IgICAgICAgICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUzBfQ1JUMl9NQVNLICAgICAgICAgICAgICAgKEFUT01fUzBfQ1JUMl9NT05PK0FUT01fUzBfQ1JUMl9DT0xPUikKQEAgLTMwMjUsMjggKzM4ODQsMjcgQEAKICNkZWZpbmUgQVRPTV9TMF9ERlAyICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAogI2RlZmluZSBBVE9NX1MwX0xDRDEgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBMCiAjZGVmaW5lIEFUT01fUzBfTENEMiAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKLSNkZWZpbmUgQVRPTV9TMF9UVjIgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDMJCQkweDAwMjAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDQJCQkweDAwNDAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDUJCQkweDAwODAwMDAwTAorI2RlZmluZSBBVE9NX1MwX0RGUDYgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIEFUT01fUzBfREZQMyAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMF9ERlA0ICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwTAorI2RlZmluZSBBVE9NX1MwX0RGUDUgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBMCiAKLSNkZWZpbmUgQVRPTV9TMF9ERlBfTUFTSyBcCi0JKEFUT01fUzBfREZQMSB8IEFUT01fUzBfREZQMiB8IEFUT01fUzBfREZQMyB8IEFUT01fUzBfREZQNCB8IEFUT01fUzBfREZQNSkKKyNkZWZpbmUgQVRPTV9TMF9ERlBfTUFTSyAgICAgICAgICAgICAgICBBVE9NX1MwX0RGUDEgfCBBVE9NX1MwX0RGUDIgfCBBVE9NX1MwX0RGUDMgfCBBVE9NX1MwX0RGUDQgfCBBVE9NX1MwX0RGUDUgfCBBVE9NX1MwX0RGUDYKIAotI2RlZmluZSBBVE9NX1MwX0ZBRF9SRUdJU1RFUl9CVUcgICAgICAgIDB4MDIwMDAwMDBMCS8qICBJZiBzZXQsIGluZGljYXRlcyB3ZSBhcmUgcnVubmluZyBhIFBDSUUgYXNpYyB3aXRoICovCi0JCQkJCQkgICAgLyogIHRoZSBGQUQvSERQIHJlZyBhY2Nlc3MgYnVnLiAgQml0IGlzIHJlYWQgYnkgREFMICovCisjZGVmaW5lIEFUT01fUzBfRkFEX1JFR0lTVEVSX0JVRyAgICAgICAgMHgwMjAwMDAwMEwgLy8gSWYgc2V0LCBpbmRpY2F0ZXMgd2UgYXJlIHJ1bm5pbmcgYSBQQ0lFIGFzaWMgd2l0aCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgRkFEL0hEUCByZWcgYWNjZXNzIGJ1Zy4gIEJpdCBpcyByZWFkIGJ5IERBTCwgdGhpcyBpcyBvYnNvbGV0ZSBmcm9tIFJWNXh4CiAKICNkZWZpbmUgQVRPTV9TMF9USEVSTUFMX1NUQVRFX01BU0sgICAgICAweDFDMDAwMDAwTAogI2RlZmluZSBBVE9NX1MwX1RIRVJNQUxfU1RBVEVfU0hJRlQgICAgIDI2CiAKICNkZWZpbmUgQVRPTV9TMF9TWVNURU1fUE9XRVJfU1RBVEVfTUFTSyAweEUwMDAwMDAwTAotI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9TSElGVCAyOQorI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9TSElGVCAyOSAKIAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9BQyAgICAgMQogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9EQyAgICAgMgogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVRFQUMgMwogCi0vKiBCeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZSAqLworLy9CeXRlIGFsaWduZWQgZGVmaW50aW9uIGZvciBCSU9TIHVzYWdlCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9NT05PYjAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBBVE9NX1MwX0NSVDFfQ09MT1JiMCAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TMF9DUlQxX01BU0tiMCAgICAgICAgICAgICAoQVRPTV9TMF9DUlQxX01PTk9iMCtBVE9NX1MwX0NSVDFfQ09MT1JiMCkKQEAgLTMwNzYsOCArMzkzNCwxMSBAQAogI2RlZmluZSBBVE9NX1MwX0RGUDJiMiAgICAgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TMF9MQ0QxYjIgICAgICAgICAgICAgICAgICAweDA0CiAjZGVmaW5lIEFUT01fUzBfTENEMmIyICAgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSBBVE9NX1MwX1RWMmIyICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQVRPTV9TMF9ERlAzYjIJCQkJCQkJCQkweDIwCisjZGVmaW5lIEFUT01fUzBfREZQNmIyICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBBVE9NX1MwX0RGUDNiMiAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVRPTV9TMF9ERlA0YjIgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzBfREZQNWIyICAgICAgICAgICAgICAgICAgMHg4MAorCiAKICNkZWZpbmUgQVRPTV9TMF9USEVSTUFMX1NUQVRFX01BU0tiMyAgICAweDFDCiAjZGVmaW5lIEFUT01fUzBfVEhFUk1BTF9TVEFURV9TSElGVGIzICAgMgpAQCAtMzA4NSw0MyArMzk0NiwyMCBAQAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9NQVNLYjMgMHhFMAogI2RlZmluZSBBVE9NX1MwX0xDRDFfU0hJRlQgICAgICAgICAgICAgIDE4CiAKLS8qICBCSU9TXzFfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLyBCSU9TXzFfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzFfUk9NX0xPQ0FUSU9OX01BU0sgICAgICAgMHgwMDAwRkZGRkwKICNkZWZpbmUgQVRPTV9TMV9QQ0lfQlVTX0RFVl9NQVNLICAgICAgICAweEZGRkYwMDAwTAogCi0vKiAgICAgICBCSU9TXzJfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLwlCSU9TXzJfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzJfVFYxX1NUQU5EQVJEX01BU0sgICAgICAgMHgwMDAwMDAwRkwKICNkZWZpbmUgQVRPTV9TMl9DVVJSRU5UX0JMX0xFVkVMX01BU0sgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1MyX0NVUlJFTlRfQkxfTEVWRUxfU0hJRlQgIDgKIAotI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCi0jZGVmaW5lIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFCSAgICAgICAgMHgwMDAyMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURSAgICAgICAgICAweDAwMDQwMDAwTAotI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwODAwMDBMCi0jZGVmaW5lIEFUT01fUzJfQ1JUMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDEwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEUgICAgICAgICAweDAwMjAwMDAwTAotI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFICAgICAgICAgIDB4MDA0MDAwMDBMCi0jZGVmaW5lIEFUT01fUzJfREZQMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDgwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFICAgICAgICAgICAweDAxMDAwMDAwTAotI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURQkJCQkJMHgwMjAwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUJCQkJCTB4MDQwMDAwMDBMCi0jZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFCQkJCQkweDA4MDAwMDAwTAotCi0jZGVmaW5lIEFUT01fUzJfREZQX0RQTV9TVEFURSBcCi0JKEFUT01fUzJfREZQMV9EUE1TX1NUQVRFIHwgQVRPTV9TMl9ERlAyX0RQTVNfU1RBVEUgfCBcCi0JIEFUT01fUzJfREZQM19EUE1TX1NUQVRFIHwgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUgfCBcCi0JIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFKQotCi0jZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEUgXAotCShBVE9NX1MyX0NSVDFfRFBNU19TVEFURSArIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFICsgXAotCSBBVE9NX1MyX1RWMV9EUE1TX1NUQVRFICsgQVRPTV9TMl9ERlBfRFBNU19TVEFURSArIFwKLQkgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEUgKyBBVE9NX1MyX0xDRDJfRFBNU19TVEFURSArIFwKLQkgQVRPTV9TMl9UVjJfRFBNU19TVEFURSArIEFUT01fUzJfQ1ZfRFBNU19TVEFURSkKLQogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfTUFTSyAgICAgICAweDBDMDAwMDAwTAogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfTUFTS19TSElGVCAyNgogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfQ0hBTkdFICAgICAweDEwMDAwMDAwTAogCisjZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEUgICAgICAgMHgwMDAxMDAwMEwKICNkZWZpbmUgQVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRSAgICAgICAweDIwMDAwMDAwTAogCiAjZGVmaW5lIEFUT01fUzJfRElTUExBWV9ST1RBVElPTl8wX0RFR1JFRSAgICAgMHgwCkBAIC0zMTMxLDIxICszOTY5LDExIEBACiAjZGVmaW5lIEFUT01fUzJfRElTUExBWV9ST1RBVElPTl9ERUdSRUVfU0hJRlQgMzAKICNkZWZpbmUgQVRPTV9TMl9ESVNQTEFZX1JPVEFUSU9OX0FOR0xFX01BU0sgICAweEMwMDAwMDAwTAogCi0vKiBCeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZSAqLworCisvL0J5dGUgYWxpZ25lZCBkZWZpbnRpb24gZm9yIEJJT1MgdXNhZ2UKICNkZWZpbmUgQVRPTV9TMl9UVjFfU1RBTkRBUkRfTUFTS2IwICAgICAweDBGCiAjZGVmaW5lIEFUT01fUzJfQ1VSUkVOVF9CTF9MRVZFTF9NQVNLYjEgMHhGRgotI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURWIyICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9TMl9MQ0QxX0RQTVNfU1RBVEViMiAgICAgICAweDAyCi0jZGVmaW5lIEFUT01fUzJfVFYxX0RQTVNfU1RBVEViMiAgICAgICAgMHgwNAotI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURWIyICAgICAgIDB4MDgKLSNkZWZpbmUgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEViMiAgICAgICAweDEwCi0jZGVmaW5lIEFUT01fUzJfTENEMl9EUE1TX1NUQVRFYjIgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFYjIgICAgICAgIDB4NDAKLSNkZWZpbmUgQVRPTV9TMl9ERlAyX0RQTVNfU1RBVEViMiAgICAgICAweDgwCi0jZGVmaW5lIEFUT01fUzJfQ1ZfRFBNU19TVEFURWIzICAgICAgICAgMHgwMQotI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURWIzCQkJCTB4MDIKLSNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEViMwkJCQkweDA0Ci0jZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFYjMJCQkJMHgwOAorI2RlZmluZSBBVE9NX1MyX0RFVklDRV9EUE1TX1NUQVRFYjIgICAgIDB4MDEKIAogI2RlZmluZSBBVE9NX1MyX0RFVklDRV9EUE1TX01BU0t3MSAgICAgIDB4M0ZGCiAjZGVmaW5lIEFUT01fUzJfRk9SQ0VETE9XUFdSTU9ERV9TVEFURV9NQVNLYjMgICAgIDB4MEMKQEAgLTMxNTMsMjEgKzM5ODEsMjIgQEAKICNkZWZpbmUgQVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRWIzICAgICAweDIwCiAjZGVmaW5lIEFUT01fUzJfUk9UQVRJT05fU1RBVEVfTUFTS2IzICAgMHhDMAogCi0vKiAgQklPU18zX1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworCisvLyBCSU9TXzNfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzNfQ1JUMV9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDAwMUwKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDAyTAogI2RlZmluZSBBVE9NX1MzX1RWMV9BQ1RJVkUgICAgICAgICAgICAgIDB4MDAwMDAwMDRMCiAjZGVmaW5lIEFUT01fUzNfREZQMV9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDAwOEwKICNkZWZpbmUgQVRPTV9TM19DUlQyX0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDEwTAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwMjBMCi0jZGVmaW5lIEFUT01fUzNfVFYyX0FDVElWRSAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDQwTAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwODBMCiAjZGVmaW5lIEFUT01fUzNfQ1ZfQUNUSVZFICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKICNkZWZpbmUgQVRPTV9TM19ERlAzX0FDVElWRQkJCQkJCQkweDAwMDAwMjAwTAogI2RlZmluZSBBVE9NX1MzX0RGUDRfQUNUSVZFCQkJCQkJCTB4MDAwMDA0MDBMCiAjZGVmaW5lIEFUT01fUzNfREZQNV9BQ1RJVkUJCQkJCQkJMHgwMDAwMDgwMEwKIAotI2RlZmluZSBBVE9NX1MzX0RFVklDRV9BQ1RJVkVfTUFTSyAgICAgIDB4MDAwMDAzRkZMCisjZGVmaW5lIEFUT01fUzNfREVWSUNFX0FDVElWRV9NQVNLICAgICAgMHgwMDAwMEZGRkwKIAogI2RlZmluZSBBVE9NX1MzX0xDRF9GVUxMRVhQQU5TSU9OX0FDVElWRSAgICAgICAgIDB4MDAwMDEwMDBMCiAjZGVmaW5lIEFUT01fUzNfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJT19BQ1RJVkUgMHgwMDAwMjAwMEwKQEAgLTMxNzgsNyArNDAwNyw3IEBACiAjZGVmaW5lIEFUT01fUzNfREZQMV9DUlRDX0FDVElWRSAgICAgICAgMHgwMDA4MDAwMEwKICNkZWZpbmUgQVRPTV9TM19DUlQyX0NSVENfQUNUSVZFICAgICAgICAweDAwMTAwMDAwTAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQ1JUQ19BQ1RJVkUgICAgICAgIDB4MDAyMDAwMDBMCi0jZGVmaW5lIEFUT01fUzNfVFYyX0NSVENfQUNUSVZFICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0NSVENfQUNUSVZFICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQ1JUQ19BQ1RJVkUgICAgICAgIDB4MDA4MDAwMDBMCiAjZGVmaW5lIEFUT01fUzNfQ1ZfQ1JUQ19BQ1RJVkUgICAgICAgICAgMHgwMTAwMDAwMEwKICNkZWZpbmUgQVRPTV9TM19ERlAzX0NSVENfQUNUSVZFCQkJCTB4MDIwMDAwMDBMCkBAIC0zMTg3LDE3ICs0MDE2LDE4IEBACiAKICNkZWZpbmUgQVRPTV9TM19ERVZJQ0VfQ1JUQ19BQ1RJVkVfTUFTSyAweDBGRkYwMDAwTAogI2RlZmluZSBBVE9NX1MzX0FTSUNfR1VJX0VOR0lORV9IVU5HICAgIDB4MjAwMDAwMDBMCisvL0JlbG93IHR3byBkZWZpbml0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBwcGxpYiwgYnV0IGluIHRoZSBvbGQgcG93ZXJwbGF5IGluIERBTAogI2RlZmluZSBBVE9NX1MzX0FMTE9XX0ZBU1RfUFdSX1NXSVRDSCAgIDB4NDAwMDAwMDBMCiAjZGVmaW5lIEFUT01fUzNfUlFTVF9HUFVfVVNFX01JTl9QV1IgICAgMHg4MDAwMDAwMEwKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MzX0NSVDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRWIwICAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzNfVFYxX0FDVElWRWIwICAgICAgICAgICAgMHgwNAogI2RlZmluZSBBVE9NX1MzX0RGUDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9TM19DUlQyX0FDVElWRWIwICAgICAgICAgICAweDEwCiAjZGVmaW5lIEFUT01fUzNfTENEMl9BQ1RJVkViMCAgICAgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1MzX1RWMl9BQ1RJVkViMCAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0FDVElWRWIwICAgICAgICAgICAweDQwCiAjZGVmaW5lIEFUT01fUzNfREZQMl9BQ1RJVkViMCAgICAgICAgICAgMHg4MAogI2RlZmluZSBBVE9NX1MzX0NWX0FDVElWRWIxICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19ERlAzX0FDVElWRWIxCQkJCQkJMHgwMgpAQCAtMzIxMiw3ICs0MDQyLDcgQEAKICNkZWZpbmUgQVRPTV9TM19ERlAxX0NSVENfQUNUSVZFYjIgICAgICAweDA4CiAjZGVmaW5lIEFUT01fUzNfQ1JUMl9DUlRDX0FDVElWRWIyICAgICAgMHgxMAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQ1JUQ19BQ1RJVkViMiAgICAgIDB4MjAKLSNkZWZpbmUgQVRPTV9TM19UVjJfQ1JUQ19BQ1RJVkViMiAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzNfREZQNl9DUlRDX0FDVElWRWIyICAgICAgMHg0MAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQ1JUQ19BQ1RJVkViMiAgICAgIDB4ODAKICNkZWZpbmUgQVRPTV9TM19DVl9DUlRDX0FDVElWRWIzICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzNfREZQM19DUlRDX0FDVElWRWIzCQkJMHgwMgpAQCAtMzIyMSwzNSArNDA1MSwzMSBAQAogCiAjZGVmaW5lIEFUT01fUzNfQUNUSVZFX0NSVEMydzEgICAgICAgICAgMHhGRkYKIAotI2RlZmluZSBBVE9NX1MzX0FTSUNfR1VJX0VOR0lORV9IVU5HYjMJMHgyMAotI2RlZmluZSBBVE9NX1MzX0FMTE9XX0ZBU1RfUFdSX1NXSVRDSGIzIDB4NDAKLSNkZWZpbmUgQVRPTV9TM19SUVNUX0dQVV9VU0VfTUlOX1BXUmIzICAweDgwCi0KLS8qICBCSU9TXzRfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLyBCSU9TXzRfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLICAgICAgMHgwMDAwMDBGRkwKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTSyAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9TSElGVCAgICAgIDgKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M0X0xDRDFfUEFORUxfSURfTUFTS2IwCSAgMHgwRkYKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTS2IxCQkgIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAKICNkZWZpbmUgQVRPTV9TNF9WUkFNX0lORk9fTUFTS2IyICAgICAgICBBVE9NX1M0X0xDRDFfUEFORUxfSURfTUFTS2IwCiAKLS8qICBCSU9TXzVfU0NSQVRDSCBEZWZpbml0aW9uLCBCSU9TXzVfU0NSQVRDSCBpcyB1c2VkIGJ5IEZpcm13YXJlIG9ubHkgISEhISAqLworLy8gQklPU181X1NDUkFUQ0ggRGVmaW5pdGlvbiwgQklPU181X1NDUkFUQ0ggaXMgdXNlZCBieSBGaXJtd2FyZSBvbmx5ICEhISEKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0NSVDFiMCAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9MQ0QxYjAgICAgICAgICAgMHgwMgogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfVFYxYjAgICAgICAgICAgIDB4MDQKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RGUDFiMCAgICAgICAgICAweDA4CiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9DUlQyYjAgICAgICAgICAgMHgxMAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMmIwICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX1RWMmIwICAgICAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9ERlA2YjAgICAgICAgICAgMHg0MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMmIwICAgICAgICAgIDB4ODAKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0NWYjEgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9ERlAzYjEJCQkJCTB4MDIKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RGUDRiMQkJCQkJMHgwNAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNWIxCQkJCQkweDA4CiAKLSNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RFVklDRXcwICAgICAgICAweDAzRkYKKyNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RFVklDRXcwICAgICAgICAweDBGRkYKIAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1JUMSAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMSAgICAgICAgICAgIDB4MDAwMgpAQCAtMzI1NywyMiArNDA4MywyMSBAQAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMSAgICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1JUMiAgICAgICAgICAgIDB4MDAxMAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMiAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfVFYyICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNiAgICAgICAgICAgIDB4MDA0MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMiAgICAgICAgICAgIDB4MDA4MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1YgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMwkJCQkJCTB4MDIwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNAkJCQkJCTB4MDQwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNQkJCQkJCTB4MDgwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMyAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNCAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNSAgICAgICAgICAgIDB4MDgwMAogCiAjZGVmaW5lIEFUT01fUzVfRE9TX0ZPUkNFX0NSVDFiMiAgICAgICAgQVRPTV9TNV9ET1NfUkVRX0NSVDFiMAogI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9UVjFiMiAgICAgICAgIEFUT01fUzVfRE9TX1JFUV9UVjFiMAogI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9DUlQyYjIgICAgICAgIEFUT01fUzVfRE9TX1JFUV9DUlQyYjAKICNkZWZpbmUgQVRPTV9TNV9ET1NfRk9SQ0VfQ1ZiMyAgICAgICAgICBBVE9NX1M1X0RPU19SRVFfQ1ZiMQotI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9ERVZJQ0V3MSBcCi0JKEFUT01fUzVfRE9TX0ZPUkNFX0NSVDFiMiArIEFUT01fUzVfRE9TX0ZPUkNFX1RWMWIyICsgXAotCSBBVE9NX1M1X0RPU19GT1JDRV9DUlQyYjIgKyAoQVRPTV9TNV9ET1NfRk9SQ0VfQ1ZiMyA8PCA4KSkKKyNkZWZpbmUgQVRPTV9TNV9ET1NfRk9SQ0VfREVWSUNFdzEgICAgICAoQVRPTV9TNV9ET1NfRk9SQ0VfQ1JUMWIyK0FUT01fUzVfRE9TX0ZPUkNFX1RWMWIyK0FUT01fUzVfRE9TX0ZPUkNFX0NSVDJiMitcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fUzVfRE9TX0ZPUkNFX0NWYjM8PDgpKQogCi0vKiAgQklPU182X1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworLy8gQklPU182X1NDUkFUQ0ggRGVmaW5pdGlvbgogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0UgICAgICAgICAgIDB4MDAwMDAwMDFMCiAjZGVmaW5lIEFUT01fUzZfU0NBTEVSX0NIQU5HRSAgICAgICAgICAgMHgwMDAwMDAwMkwKICNkZWZpbmUgQVRPTV9TNl9MSURfQ0hBTkdFICAgICAgICAgICAgICAweDAwMDAwMDA0TApAQCAtMzI4NSwxMSArNDExMCwxMSBAQAogI2RlZmluZSBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUzZfVEhFUk1BTF9TVEFURV9DSEFOR0UgICAgMHgwMDAwMDQwMEwKICNkZWZpbmUgQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1MgICAweDAwMDAwODAwTAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTEwgICAgICAgICAweDAwMDAxMDAwTAkvKiBOb3JtYWwgZXhwYW5zaW9uIFJlcXVlc3QgYml0IGZvciBMQ0QgKi8KLSNkZWZpbmUgQVRPTV9TNl9SRVFfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJTyAgMHgwMDAwMjAwMEwJLyogQXNwZWN0IHJhdGlvIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENEICovCisjZGVmaW5lIEFUT01fUzZfUkVRX0xDRF9FWFBBTlNJT05fRlVMTCAgICAgICAgIDB4MDAwMDEwMDBMIC8vTm9ybWFsIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENECisjZGVmaW5lIEFUT01fUzZfUkVRX0xDRF9FWFBBTlNJT05fQVNQRUNfUkFUSU8gIDB4MDAwMDIwMDBMIC8vQXNwZWN0IHJhdGlvIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENECiAKLSNkZWZpbmUgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAweDAwMDA0MDAwTAkvKiBUaGlzIGJpdCBpcyByZWN5Y2xlZCB3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfSF9leHBhbnNpb24gKi8KLSNkZWZpbmUgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFICAgICAgICAweDAwMDA4MDAwTAkvKiBUaGlzIGJpdCBpcyByZWN5Y2xlZCx3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfVl9leHBhbnNpb24gKi8KKyNkZWZpbmUgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAweDAwMDA0MDAwTCAgICAgICAgLy9UaGlzIGJpdCBpcyByZWN5Y2xlZCB3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfSF9leHBhbnNpb24KKyNkZWZpbmUgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFICAgICAgICAweDAwMDA4MDAwTCAgICAgICAgLy9UaGlzIGJpdCBpcyByZWN5Y2xlZCx3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfVl9leHBhbnNpb24KIAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfQ1JUMSAgICAgICAgICAgIDB4MDAwMTAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QxICAgICAgICAgICAgMHgwMDAyMDAwMEwKQEAgLTMyOTcsNyArNDEyMiw3IEBACiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlAxICAgICAgICAgICAgMHgwMDA4MDAwMEwKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDIgICAgICAgICAgICAweDAwMTAwMDAwTAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfTENEMiAgICAgICAgICAgIDB4MDAyMDAwMDBMCi0jZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9UVjIgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDYgICAgICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMiAgICAgICAgICAgIDB4MDA4MDAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9DViAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDMJCQkJCQkweDAyMDAwMDAwTApAQCAtMzMxMCw3ICs0MTM1LDcgQEAKICNkZWZpbmUgQVRPTV9TNl9WUklfQlJJR0hUTkVTU19DSEFOR0UgICAgICAgMHg0MDAwMDAwMEwKICNkZWZpbmUgQVRPTV9TNl9DT05GSUdfRElTUExBWV9DSEFOR0VfTUFTSyAgMHg4MDAwMDAwMEwKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0ViMCAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFYjAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzZfTElEX0NIQU5HRWIwICAgICAgICAgICAgMHgwNApAQCAtMzMyMCwxMSArNDE0NSwxMSBAQAogI2RlZmluZSBBVE9NX1M2X0xJRF9TVEFURWIwICAgICAgICAgICAgIDB4NDAKICNkZWZpbmUgQVRPTV9TNl9ET0NLX1NUQVRFYjAgICAgICAgICAgICAweDgwCiAjZGVmaW5lIEFUT01fUzZfQ1JJVElDQUxfU1RBVEViMSAgICAgICAgMHgwMQotI2RlZmluZSBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFYjEgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9TNl9IV19JMkNfQlVTWV9TVEFURWIxICAgICAweDAyICAKICNkZWZpbmUgQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRWIxICAweDA0CiAjZGVmaW5lIEFUT01fUzZfSU5URVJSVVBUX1NFVF9CWV9CSU9TYjEgMHgwOAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTExiMSAgICAgICAgMHgxMAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0FTUEVDX1JBVElPYjEgMHgyMAorI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTExiMSAgICAgICAgMHgxMCAgICAKKyNkZWZpbmUgQVRPTV9TNl9SRVFfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJT2IxIDB4MjAgCiAKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDFiMiAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QxYjIgICAgICAgICAgMHgwMgpAQCAtMzMzMiwxMiArNDE1NywxMiBAQAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMWIyICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDJiMiAgICAgICAgICAweDEwCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QyYjIgICAgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfVFYyYjIgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDZiMiAgICAgICAgICAweDQwCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlAyYjIgICAgICAgICAgMHg4MAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfQ1ZiMyAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDNiMwkJCQkJMHgwMgotI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQNGIzCQkJCQkweDA0Ci0jZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlA1YjMJCQkJCTB4MDgKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDNiMyAgICAgICAgICAweDAyCisjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlA0YjMgICAgICAgICAgMHgwNAorI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQNWIzICAgICAgICAgIDB4MDgKIAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREVWSUNFdzEgICAgICAgIEFUT01fUzVfRE9TX1JFUV9ERVZJQ0V3MAogI2RlZmluZSBBVE9NX1M2X1NZU1RFTV9QT1dFUl9NT0RFX0NIQU5HRWIzIDB4MTAKQEAgLTMzNjYsNyArNDE5MSw3IEBACiAjZGVmaW5lIEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFX1NISUZUICAgICAzMAogI2RlZmluZSBBVE9NX1M2X0NPTkZJR19ESVNQTEFZX0NIQU5HRV9TSElGVCAgICAgMzEKIAotLyogIEJJT1NfN19TQ1JBVENIIERlZmluaXRpb24sIEJJT1NfN19TQ1JBVENIIGlzIHVzZWQgYnkgRmlybXdhcmUgb25seSAhISEhICovCisvLyBCSU9TXzdfU0NSQVRDSCBEZWZpbml0aW9uLCBCSU9TXzdfU0NSQVRDSCBpcyB1c2VkIGJ5IEZpcm13YXJlIG9ubHkgISEhIQogI2RlZmluZSBBVE9NX1M3X0RPU19NT0RFX1RZUEViMCAgICAgICAgICAgICAweDAzCiAjZGVmaW5lIEFUT01fUzdfRE9TX01PREVfVkdBYjAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQVRPTV9TN19ET1NfTU9ERV9WRVNBYjAgICAgICAgICAgICAgMHgwMQpAQCAtMzM3OCwyMjAgKzQyMDMsMTk0IEBACiAKICNkZWZpbmUgQVRPTV9TN19ET1NfOEJJVF9EQUNfRU5fU0hJRlQgICAgICAgOAogCi0vKiAgQklPU184X1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworLy8gQklPU184X1NDUkFUQ0ggRGVmaW5pdGlvbgogI2RlZmluZSBBVE9NX1M4X0kyQ19DSEFOTkVMX0JVU1lfTUFTSyAgICAgICAweDAwMDAwRkZGRgotI2RlZmluZSBBVE9NX1M4X0kyQ19IV19FTkdJTkVfQlVTWV9NQVNLICAgICAweDBGRkZGMDAwMAorI2RlZmluZSBBVE9NX1M4X0kyQ19IV19FTkdJTkVfQlVTWV9NQVNLICAgICAweDBGRkZGMDAwMCAgIAogCiAjZGVmaW5lIEFUT01fUzhfSTJDX0NIQU5ORUxfQlVTWV9TSElGVCAgICAgIDAKICNkZWZpbmUgQVRPTV9TOF9JMkNfRU5HSU5FX0JVU1lfU0hJRlQgICAgICAgMTYKIAotLyogIEJJT1NfOV9TQ1JBVENIIERlZmluaXRpb24gKi8KLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfTUFTSworLy8gQklPU185X1NDUkFUQ0ggRGVmaW5pdGlvbgorI2lmbmRlZiBBVE9NX1M5X0kyQ19DSEFOTkVMX0NPTVBMRVRFRF9NQVNLIAogI2RlZmluZSBBVE9NX1M5X0kyQ19DSEFOTkVMX0NPTVBMRVRFRF9NQVNLICAweDAwMDBGRkZGCiAjZW5kaWYKLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX01BU0sKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX01BU0sgIAogI2RlZmluZSBBVE9NX1M5X0kyQ19DSEFOTkVMX0FCT1JURURfTUFTSyAgICAweEZGRkYwMDAwCiAjZW5kaWYKLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfU0hJRlQKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfU0hJRlQgCiAjZGVmaW5lIEFUT01fUzlfSTJDX0NIQU5ORUxfQ09NUExFVEVEX1NISUZUIDAKICNlbmRpZgotI2lmbmRlZiBBVE9NX1M5X0kyQ19DSEFOTkVMX0FCT1JURURfU0hJRlQKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX1NISUZUICAgCiAjZGVmaW5lIEFUT01fUzlfSTJDX0NIQU5ORUxfQUJPUlRFRF9TSElGVCAgIDE2CiAjZW5kaWYKIAorIAogI2RlZmluZSBBVE9NX0ZMQUdfU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKICNkZWZpbmUgQVRPTV9GTEFHX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIENMRUFSX0FUT01fUzZfQUNDX01PREUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0FDQ19NT0RFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQotI2RlZmluZSBTRVRfQVRPTV9TNl9ERVZJQ0VfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9ERVZJQ0VfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9WUklfQlJJR0hUTkVTU19DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBTRVRfQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfTElEX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfTElEX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCisjZGVmaW5lIENMRUFSX0FUT01fUzZfQUNDX01PREUgICAgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQUNDX01PREVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RFVklDRV9DSEFOR0UgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfREVWSUNFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCisjZGVmaW5lIFNFVF9BVE9NX1M2X1ZSSV9CUklHSFRORVNTX0NIQU5HRSAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfU0NBTEVSX0NIQU5HRSAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9TQ0FMRVJfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfTElEX0NIQU5HRSAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9MSURfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9MSURfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHxcCi0JIEFUT01fUzZfTElEX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9MSURfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0xJRF9TVEFURV9TSElGVCB8IEFUT01fRkxBR19DTEVBUikKKyNkZWZpbmUgU0VUX0FUT01fUzZfTElEX1NUQVRFICAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9MSURfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X0xJRF9TVEFURSAgICAgICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0xJRF9TVEFURV9TSElGVCB8IEFUT01fRkxBR19DTEVBUikKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9ET0NLX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCl8IFwKLQkgQVRPTV9TNl9ET0NLSU5HX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCi0jZGVmaW5lIFNFVF9BVE9NX1M2X0RPQ0tfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0RPQ0tfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1M2X0RPQ0tfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0RPQ0tfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RPQ0tfQ0hBTkdFCQkJICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0RPQ0tJTkdfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfRE9DS19TVEFURSAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9ET0NLX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9ET0NLX1NUQVRFICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9ET0NLX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1RIRVJNQUxfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1NZU1RFTV9QT1dFUl9NT0RFX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfU1lTVEVNX1BPV0VSX01PREVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfSU5URVJSVVBUX1NFVF9CWV9CSU9TIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1NfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBTRVRfQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRSAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1RIRVJNQUxfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfU1lTVEVNX1BPV0VSX01PREVfQ0hBTkdFICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9TWVNURU1fUE9XRVJfTU9ERV9DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBTRVRfQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1MgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0lOVEVSUlVQVF9TRVRfQllfQklPU19TSElGVCB8IEFUT01fRkxBR19TRVQpCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfQ1JJVElDQUxfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9DUklUSUNBTF9TVEFURSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfQ1JJVElDQUxfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQ1JJVElDQUxfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1JFUV9TQ0FMRVIgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1M2X1JFUV9TQ0FMRVIgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIgKQorI2RlZmluZSBTRVRfQVRPTV9TNl9SRVFfU0NBTEVSICAgICAgICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKSAgCisjZGVmaW5lIENMRUFSX0FUT01fUzZfUkVRX1NDQUxFUiAgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfUkVRX1NDQUxFUl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCi0jZGVmaW5lIENMRUFSX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKKyNkZWZpbmUgU0VUX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9SRVFfU0NBTEVSX0FSQVRJT19TSElGVCB8IEFUT01fRkxBR19TRVQgKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCisjZGVmaW5lIFNFVF9BVE9NX1M2X0kyQ19TVEFURV9DSEFOR0UgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfSTJDX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQgKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X0RJU1BMQVlfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQgKQorI2RlZmluZSBTRVRfQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0RJU1BMQVlfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfREVWSUNFX1JFQ09ORklHIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9DT05GSUdfRElTUExBWV9DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1MwX0xDRDEgXAotCSgoQVRPTV9ERVZJQ0VfQ09OTkVDVF9JTkZPX0RFRiA8PCA4ICkgfCBcCi0JIEFUT01fUzBfTENEMV9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCi0jZGVmaW5lIFNFVF9BVE9NX1M3X0RPU184QklUX0RBQ19FTiBcCi0JKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19TRVQgKQotI2RlZmluZSBDTEVBUl9BVE9NX1M3X0RPU184QklUX0RBQ19FTiBcCi0JKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RFVklDRV9SRUNPTkZJRyAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQ09ORklHX0RJU1BMQVlfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgQ0xFQVJfQVRPTV9TMF9MQ0QxICAgICAgICAgICAgICAgICAgICAoKEFUT01fREVWSUNFX0NPTk5FQ1RfSU5GT19ERUYgPDwgOCApfCAgQVRPTV9TMF9MQ0QxX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKKyNkZWZpbmUgU0VUX0FUT01fUzdfRE9TXzhCSVRfREFDX0VOICAgICAgICAgICAoKEFUT01fRE9TX01PREVfSU5GT19ERUYgPDwgOCApfEFUT01fUzdfRE9TXzhCSVRfREFDX0VOX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCisjZGVmaW5lIENMRUFSX0FUT01fUzdfRE9TXzhCSVRfREFDX0VOICAgICAgICAgKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDggKXxBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUG9ydGlvbiBJSTogRGVmaW5pdGlub3Mgb25seSB1c2VkIGluIERyaXZlciAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy9Qb3J0aW9uIElJOiBEZWZpbml0aW5vcyBvbmx5IHVzZWQgaW4gRHJpdmVyCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogIE1hY3JvcyB1c2VkIGJ5IGRyaXZlciAqLworLy8gTWFjcm9zIHVzZWQgYnkgZHJpdmVyCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoTWFzdGVyT3JEYXRhLCBGaWVsZE5hbWUpICgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJihzdGF0aWNfY2FzdDxBVE9NX01BU1RFUl9MSVNUX09GXyMjTWFzdGVyT3JEYXRhIyNfVEFCTEVTKj4oMCkpLT5GaWVsZE5hbWUpLXN0YXRpY19jYXN0PGNoYXIqPigwKSkvc2l6ZW9mKFVTSE9SVCkpCiAKLSNkZWZpbmUJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoTWFzdGVyT3JEYXRhLCBGaWVsZE5hbWUpICgoKGNoYXIgKikoJigoQVRPTV9NQVNURVJfTElTVF9PRl8jI01hc3Rlck9yRGF0YSMjX1RBQkxFUyAqKTApLT5GaWVsZE5hbWUpLShjaGFyICopMCkvc2l6ZW9mKFVTSE9SVCkpCisjZGVmaW5lIEdFVF9DT01NQU5EX1RBQkxFX0NPTU1BTkRTRVRfUkVWSVNJT04oVEFCTEVfSEVBREVSX09GRlNFVCkgKCgoc3RhdGljX2Nhc3Q8QVRPTV9DT01NT05fVEFCTEVfSEVBREVSKj4oVEFCTEVfSEVBREVSX09GRlNFVCkpLT51Y1RhYmxlRm9ybWF0UmV2aXNpb24gKSYweDNGKQorI2RlZmluZSBHRVRfQ09NTUFORF9UQUJMRV9QQVJBTUVURVJfUkVWSVNJT04oVEFCTEVfSEVBREVSX09GRlNFVCkgICgoKHN0YXRpY19jYXN0PEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUio+KFRBQkxFX0hFQURFUl9PRkZTRVQpKS0+dWNUYWJsZUNvbnRlbnRSZXZpc2lvbikmMHgzRikKKyNlbHNlIC8vIG5vdCBfX2NwbHVzcGx1cworI2RlZmluZQlHZXRJbmRleEludG9NYXN0ZXJUYWJsZShNYXN0ZXJPckRhdGEsIEZpZWxkTmFtZSkgKCgoY2hhciopKCYoKEFUT01fTUFTVEVSX0xJU1RfT0ZfIyNNYXN0ZXJPckRhdGEjI19UQUJMRVMqKTApLT5GaWVsZE5hbWUpLShjaGFyKikwKS9zaXplb2YoVVNIT1JUKSkKIAogI2RlZmluZSBHRVRfQ09NTUFORF9UQUJMRV9DT01NQU5EU0VUX1JFVklTSU9OKFRBQkxFX0hFQURFUl9PRkZTRVQpICgoKChBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIqKVRBQkxFX0hFQURFUl9PRkZTRVQpLT51Y1RhYmxlRm9ybWF0UmV2aXNpb24pJjB4M0YpCiAjZGVmaW5lIEdFVF9DT01NQU5EX1RBQkxFX1BBUkFNRVRFUl9SRVZJU0lPTihUQUJMRV9IRUFERVJfT0ZGU0VUKSAgKCgoKEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiopVEFCTEVfSEVBREVSX09GRlNFVCktPnVjVGFibGVDb250ZW50UmV2aXNpb24pJjB4M0YpCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKIAogI2RlZmluZSBHRVRfREFUQV9UQUJMRV9NQUpPUl9SRVZJU0lPTiBHRVRfQ09NTUFORF9UQUJMRV9DT01NQU5EU0VUX1JFVklTSU9OCiAjZGVmaW5lIEdFVF9EQVRBX1RBQkxFX01JTk9SX1JFVklTSU9OIEdFVF9DT01NQU5EX1RBQkxFX1BBUkFNRVRFUl9SRVZJU0lPTgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBvcnRpb24gSUlJOiBEZWZpbml0aW5vcyBvbmx5IHVzZWQgaW4gVkJJT1MgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vUG9ydGlvbiBJSUk6IERlZmluaXRpbm9zIG9ubHkgdXNlZCBpbiBWQklPUwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIEFUT01fREFDX1NSQwkJCQkJMHg4MAogI2RlZmluZSBBVE9NX1NSQ19EQUMxCQkJCQkwCiAjZGVmaW5lIEFUT01fU1JDX0RBQzIJCQkJCTB4ODAKIAotI2lmZGVmCVVFRklfQlVJTEQKLSNkZWZpbmUJVVNIT1JUCVVURU1QCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9QTExJTklUX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qIG5vdCBkZWZpbmUgeWV0ICovCi0JVUNIQVIgdWNGYkRpdl9IaTsJLyogRmJkaXYgSGkgYnl0ZSAqLwotCVVDSEFSIHVjRmJEaXY7CQkvKiBGQiB2YWx1ZSAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogUG9zdCBkaXYgKi8KLX0gTUVNT1JZX1BMTElOSVRfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9NRU1PUllfUExMSU5JVF9QQVJBTUVURVJTCit7CisgIFVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7IC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgIHVjQWN0aW9uOwkJCQkJIC8vbm90IGRlZmluZSB5ZXQKKyAgVUNIQVIgICB1Y0ZiRGl2X0hpOwkJCQkgLy9GYmRpdiBIaSBieXRlCisgIFVDSEFSICAgdWNGYkRpdjsJCQkJCSAvL0ZCIHZhbHVlCisgIFVDSEFSICAgdWNQb3N0RGl2OwkJCQkgLy9Qb3N0IGRpdgorfU1FTU9SWV9QTExJTklUX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgTUVNT1JZX1BMTElOSVRfUFNfQUxMT0NBVElPTiAgTUVNT1JZX1BMTElOSVRfUEFSQU1FVEVSUwogCi0jZGVmaW5lCUdQSU9fUElOX1dSSVRFCQkJCQkJCQkJCQkJCTB4MDEKKworI2RlZmluZQlHUElPX1BJTl9XUklURQkJCQkJCQkJCQkJCQkweDAxCQkJCiAjZGVmaW5lCUdQSU9fUElOX1JFQUQJCQkJCQkJCQkJCQkJCTB4MDAKIAotdHlwZWRlZiBzdHJ1Y3QgX0dQSU9fUElOX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNHUElPX0lEOwkvKiByZXR1cm4gdmFsdWUsIHJlYWQgZnJvbSBHUElPIHBpbnMgKi8KLQlVQ0hBUiB1Y0dQSU9CaXRTaGlmdDsJLyogZGVmaW5lIHdoaWNoIGJpdCBpbiB1R1BJT0JpdFZhbCBuZWVkIHRvIGJlIHVwZGF0ZSAqLwotCVVDSEFSIHVjR1BJT0JpdFZhbDsJLyogU2V0L1Jlc2V0IGNvcnJlc3BvbmRpbmcgYml0IGRlZmluZWQgaW4gdWNHUElPQml0TWFzayAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogPUdQSU9fUElOX1dSSVRFOiBSZWFkOyA9R1BJT19QSU5fUkVBRDogV3JpdGUgKi8KLX0gR1BJT19QSU5fQ09OVFJPTF9QQVJBTUVURVJTOwordHlwZWRlZiBzdHJ1Y3QgIF9HUElPX1BJTl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNHUElPX0lEOyAgICAgICAgICAgLy9yZXR1cm4gdmFsdWUsIHJlYWQgZnJvbSBHUElPIHBpbnMKKyAgVUNIQVIgdWNHUElPQml0U2hpZnQ7CSAgICAgLy9kZWZpbmUgd2hpY2ggYml0IGluIHVHUElPQml0VmFsIG5lZWQgdG8gYmUgdXBkYXRlIAorCVVDSEFSIHVjR1BJT0JpdFZhbDsJCSAgICAgLy9TZXQvUmVzZXQgY29ycmVzcG9uZGluZyBiaXQgZGVmaW5lZCBpbiB1Y0dQSU9CaXRNYXNrCisgIFVDSEFSIHVjQWN0aW9uOwkJCQkgICAgIC8vPUdQSU9fUElOX1dSSVRFOiBSZWFkOyA9R1BJT19QSU5fUkVBRDogV3JpdGUKK31HUElPX1BJTl9DT05UUk9MX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfU0NBTEVSX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjU2NhbGVyOwkJLyogIEFUT01fU0NBTEVSMSwgQVRPTV9TQ0FMRVIyICovCi0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9TQ0FMRVJfRElTQUJMRSBvciBBVE9NX1NDQUxFUl9DRU5URVIgb3IgQVRPTV9TQ0FMRVJfRVhQQU5TSU9OICovCi0JVUNIQVIgdWNUVlN0YW5kYXJkOwkvKiAgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbMV07Ci19IEVOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUzsKLSNkZWZpbmUgRU5BQkxFX1NDQUxFUl9QU19BTExPQ0FUSU9OIEVOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y1NjYWxlcjsgICAgICAgICAgICAvLyBBVE9NX1NDQUxFUjEsIEFUT01fU0NBTEVSMgorICBVQ0hBUiB1Y0VuYWJsZTsgICAgICAgICAgICAvLyBBVE9NX1NDQUxFUl9ESVNBQkxFIG9yIEFUT01fU0NBTEVSX0NFTlRFUiBvciBBVE9NX1NDQUxFUl9FWFBBTlNJT04KKyAgVUNIQVIgdWNUVlN0YW5kYXJkOyAgICAgICAgLy8gCisgIFVDSEFSIHVjUGFkZGluZ1sxXTsKK31FTkFCTEVfU0NBTEVSX1BBUkFNRVRFUlM7IAorI2RlZmluZSBFTkFCTEVfU0NBTEVSX1BTX0FMTE9DQVRJT04gRU5BQkxFX1NDQUxFUl9QQVJBTUVURVJTIAogCi0vKiB1Y0VuYWJsZTogKi8KKy8vdWNFbmFibGU6CiAjZGVmaW5lIFNDQUxFUl9CWVBBU1NfQVVUT19DRU5URVJfTk9fUkVQTElDQVRJT04gICAgMAogI2RlZmluZSBTQ0FMRVJfQllQQVNTX0FVVE9fQ0VOVEVSX0FVVE9fUkVQTElDQVRJT04gIDEKICNkZWZpbmUgU0NBTEVSX0VOQUJMRV8yVEFQX0FMUEhBX01PREUgICAgICAgICAgICAgICAyCiAjZGVmaW5lIFNDQUxFUl9FTkFCTEVfTVVMVElUQVBfTU9ERSAgICAgICAgICAgICAgICAgMwogCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlMgewotCVVMT05HIHVzSFdJY29uSG9yelZlcnRQb3NuOwkvKiAgSGFyZHdhcmUgSWNvbiBWZXJ0aWNhbCBwb3NpdGlvbiAqLwotCVVDSEFSIHVjSFdJY29uVmVydE9mZnNldDsJLyogIEhhcmR3YXJlIEljb24gVmVydGljYWwgb2Zmc2V0ICovCi0JVUNIQVIgdWNIV0ljb25Ib3J6T2Zmc2V0OwkvKiAgSGFyZHdhcmUgSWNvbiBIb3Jpem9udGFsIG9mZnNldCAqLwotCVVDSEFSIHVjU2VsZWN0aW9uOwkvKiAgQVRPTV9DVVJTT1IxIG9yIEFUT01fSUNPTjEgb3IgQVRPTV9DVVJTT1IyIG9yIEFUT01fSUNPTjIgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLX0gRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgIHVzSFdJY29uSG9yelZlcnRQb3NuOyAgICAgICAgLy8gSGFyZHdhcmUgSWNvbiBWZXJ0aWNhbCBwb3NpdGlvbgorICBVQ0hBUiAgdWNIV0ljb25WZXJ0T2Zmc2V0OyAgICAgICAgICAvLyBIYXJkd2FyZSBJY29uIFZlcnRpY2FsIG9mZnNldAorICBVQ0hBUiAgdWNIV0ljb25Ib3J6T2Zmc2V0OyAgICAgICAgICAvLyBIYXJkd2FyZSBJY29uIEhvcml6b250YWwgb2Zmc2V0CisgIFVDSEFSICB1Y1NlbGVjdGlvbjsgICAgICAgICAgICAgICAgIC8vIEFUT01fQ1VSU09SMSBvciBBVE9NX0lDT04xIG9yIEFUT01fQ1VSU09SMiBvciBBVE9NX0lDT04yCisgIFVDSEFSICB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorfUVOQUJMRV9IQVJEV0FSRV9JQ09OX0NVUlNPUl9QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BTX0FMTE9DQVRJT04gewotCUVOQUJMRV9IQVJEV0FSRV9JQ09OX0NVUlNPUl9QQVJBTUVURVJTIHNFbmFibGVJY29uOwotCUVOQUJMRV9DUlRDX1BBUkFNRVRFUlMgc1Jlc2VydmVkOwotfSBFTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTgoreworICBFTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUEFSQU1FVEVSUyAgc0VuYWJsZUljb247CisgIEVOQUJMRV9DUlRDX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICBzUmVzZXJ2ZWQ7ICAKK31FTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c0hpZ2h0OwkJLyogIEltYWdlIEhpZ2h0ICovCi0JVVNIT1JUIHVzV2lkdGg7CQkvKiAgSW1hZ2UgV2lkdGggKi8KLQlVQ0hBUiB1Y1N1cmZhY2U7CS8qICBTdXJmYWNlIDEgb3IgMiAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTCit7CisgIFVTSE9SVCB1c0hpZ2h0OyAgICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIEhpZ2h0CisgIFVTSE9SVCB1c1dpZHRoOyAgICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIFdpZHRoCisgIFVDSEFSICB1Y1N1cmZhY2U7ICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgMSBvciAyCQorICBVQ0hBUiAgdWNQYWRkaW5nWzNdOworfUVOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzIgewotCVVTSE9SVCB1c0hpZ2h0OwkJLyogIEltYWdlIEhpZ2h0ICovCi0JVVNIT1JUIHVzV2lkdGg7CQkvKiAgSW1hZ2UgV2lkdGggKi8KLQlVQ0hBUiB1Y1N1cmZhY2U7CS8qICBTdXJmYWNlIDEgb3IgMiAqLwotCVVDSEFSIHVjRW5hYmxlOwkJLyogIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSU19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlNfVjFfMgoreworICBVU0hPUlQgdXNIaWdodDsgICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZSBIaWdodAorICBVU0hPUlQgdXNXaWR0aDsgICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZSBXaWR0aAorICBVQ0hBUiAgdWNTdXJmYWNlOyAgICAgICAgICAgICAgICAgICAvLyBTdXJmYWNlIDEgb3IgMgorICBVQ0hBUiAgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUKKyAgVUNIQVIgIHVjUGFkZGluZ1syXTsKK31FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QU19BTExPQ0FUSU9OIHsKLQlFTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTIHNTZXRTdXJmYWNlOwotCUVOQUJMRV9ZVVZfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qICBEb24ndCBzZXQgdGhpcyBvbmUgKi8KLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzMKK3sKKyAgVVNIT1JUIHVzSGlnaHQ7ICAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgSGlnaHQKKyAgVVNIT1JUIHVzV2lkdGg7ICAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgV2lkdGgKKyAgVUNIQVIgIHVjU3VyZmFjZTsgICAgICAgICAgICAgICAgICAgLy8gU3VyZmFjZSAxIG9yIDIKKyAgVUNIQVIgIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVTSE9SVCB1c0RldmljZUlkOyAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZSBEZXZpY2UgSWQgZm9yIHRoaXMgc3VyZmFjZS4gSWYgbm8gZGV2aWNlLCBzZXQgdG8gMC4gCit9RU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSU19WMV8zOwogCi10eXBlZGVmIHN0cnVjdCBfTUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c01lbW9yeVN0YXJ0OwkvKiBpbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotCVVTSE9SVCB1c01lbW9yeVNpemU7CS8qIDhLYiBibG9ja3MgYWxpZ25lZCAqLwotfSBNRU1PUllfQ0xFQU5fVVBfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QU19BTExPQ0FUSU9OCit7CisgIEVOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlMgc1NldFN1cmZhY2U7ICAgICAgICAgIAorICBFTkFCTEVfWVVWX1BTX0FMTE9DQVRJT04gICAgICAgIHNSZXNlcnZlZDsgLy8gRG9uJ3Qgc2V0IHRoaXMgb25lCit9RU5BQkxFX0dSQVBIX1NVUkZBQ0VfUFNfQUxMT0NBVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCit7CisgIFVTSE9SVCAgdXNNZW1vcnlTdGFydDsgICAgICAgICAgICAgICAgLy9pbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcworICBVU0hPUlQgIHVzTWVtb3J5U2l6ZTsgICAgICAgICAgICAgICAgIC8vOEtiIGJsb2NrcyBhbGlnbmVkCit9TUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlM7CiAjZGVmaW5lIE1FTU9SWV9DTEVBTl9VUF9QU19BTExPQ0FUSU9OIE1FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9HRVRfRElTUExBWV9TVVJGQUNFX1NJWkVfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzWF9TaXplOwkvKiBXaGVuIHVzZSBhcyBpbnB1dCBwYXJhbWV0ZXIsIHVzWF9TaXplIGluZGljYXRlcyB3aGljaCBDUlRDICovCi0JVVNIT1JUIHVzWV9TaXplOwotfSBHRVRfRElTUExBWV9TVVJGQUNFX1NJWkVfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0ICBfR0VUX0RJU1BMQVlfU1VSRkFDRV9TSVpFX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICB1c1hfU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvL1doZW4gdXNlIGFzIGlucHV0IHBhcmFtZXRlciwgdXNYX1NpemUgaW5kaWNhdGVzIHdoaWNoIENSVEMgICAgICAgICAgICAgICAgIAorICBVU0hPUlQgIHVzWV9TaXplOworfUdFVF9ESVNQTEFZX1NVUkZBQ0VfU0laRV9QQVJBTUVURVJTOyAKIAotdHlwZWRlZiBzdHJ1Y3QgX0lORElSRUNUX0lPX0FDQ0VTUyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgSU9BY2Nlc3NTZXF1ZW5jZVsyNTZdOwordHlwZWRlZiBzdHJ1Y3QgX0lORElSRUNUX0lPX0FDQ0VTUworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgSU9BY2Nlc3NTZXF1ZW5jZVsyNTZdOwogfSBJTkRJUkVDVF9JT19BQ0NFU1M7CiAKICNkZWZpbmUgSU5ESVJFQ1RfUkVBRCAgICAgICAgICAgICAgMHgwMApAQCAtMzYxNSw5MyArNDQxNCwxMDggQEAKICNkZWZpbmUgSU5ESVJFQ1RfSU9fTkJNSVNDX1JFQUQgICAgSU5ESVJFQ1RfSU9fTkJNSVNDIHwgSU5ESVJFQ1RfUkVBRAogI2RlZmluZSBJTkRJUkVDVF9JT19OQk1JU0NfV1JJVEUgICBJTkRJUkVDVF9JT19OQk1JU0MgfCBJTkRJUkVDVF9XUklURQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9PRU1fSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKLX0gQVRPTV9PRU1fSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09FTV9JTkZPCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsKKyAgQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKK31BVE9NX09FTV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFIHsKLQlVQ0hBUiB1Y1ZNb2RlX051bTsJLyogVmlkZW8gbW9kZSBudW1iZXIgKi8KLQlVQ0hBUiB1Y1RWX01vZGVfTnVtOwkvKiBJbnRlcm5hbCBUViBtb2RlIG51bWJlciAqLwotfSBBVE9NX1RWX01PREU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFCit7CisgICBVQ0hBUgl1Y1ZNb2RlX051bTsJCQkgIC8vVmlkZW8gbW9kZSBudW1iZXIKKyAgIFVDSEFSCXVjVFZfTW9kZV9OdW07CQkJLy9JbnRlcm5hbCBUViBtb2RlIG51bWJlcgorfUFUT01fVFZfTU9ERTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQklPU19JTlRfVFZTVERfTU9ERSB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzVFZfTW9kZV9MVVRfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBzdGFuZGFyZCB0byBpbnRlcm5hbCBudW1iZXIgY29udmVyc2lvbiB0YWJsZSAqLwotCVVTSE9SVCB1c1RWX0ZJRk9fT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBGSUZPIGVudHJ5IHRhYmxlICovCi0JVVNIT1JUIHVzTlRTQ19UYmxfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBTRFRWX01vZGVfTlRTQyB0YWJsZSAqLwotCVVTSE9SVCB1c1BBTF9UYmxfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBTRFRWX01vZGVfUEFMIHRhYmxlICovCi0JVVNIT1JUIHVzQ1ZfVGJsX09mZnNldDsJLyogIFBvaW50ZXIgdG8gU0RUVl9Nb2RlX1BBTCB0YWJsZSAqLwotfSBBVE9NX0JJT1NfSU5UX1RWU1REX01PREU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9CSU9TX0lOVF9UVlNURF9NT0RFCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgICBVU0hPUlQJdXNUVl9Nb2RlX0xVVF9PZmZzZXQ7CS8vIFBvaW50ZXIgdG8gc3RhbmRhcmQgdG8gaW50ZXJuYWwgbnVtYmVyIGNvbnZlcnNpb24gdGFibGUKKyAgIFVTSE9SVAl1c1RWX0ZJRk9fT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIEZJRk8gZW50cnkgdGFibGUKKyAgIFVTSE9SVAl1c05UU0NfVGJsX09mZnNldDsJCS8vIFBvaW50ZXIgdG8gU0RUVl9Nb2RlX05UU0MgdGFibGUKKyAgIFVTSE9SVAl1c1BBTF9UYmxfT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIFNEVFZfTW9kZV9QQUwgdGFibGUgCisgICBVU0hPUlQJdXNDVl9UYmxfT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIFNEVFZfTW9kZV9QQUwgdGFibGUgCit9QVRPTV9CSU9TX0lOVF9UVlNURF9NT0RFOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFX1NDQUxFUl9QVFIgewotCVVTSE9SVCB1Y0ZpbHRlcjBfT2Zmc2V0OwkvKiBQb2ludGVyIHRvIGZpbHRlciBmb3JtYXQgMCBjb2VmZmljaWVudHMgKi8KLQlVU0hPUlQgdXNGaWx0ZXIxX09mZnNldDsJLyogUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzICovCi0JVUNIQVIgdWNUVl9Nb2RlX051bTsKLX0gQVRPTV9UVl9NT0RFX1NDQUxFUl9QVFI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgYU1vZGVUaW1pbmdzWzE2XTsJLyogIDE2IGlzIG5vdCB0aGUgcmVhbCBhcnJheSBudW1iZXIsIGp1c3QgZm9yIGluaXRpYWwgYWxsb2NhdGlvbiAqLwotfSBBVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVFZfTU9ERV9TQ0FMRVJfUFRSCit7CisgICBVU0hPUlQJdWNGaWx0ZXIwX09mZnNldDsJCS8vUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzCisgICBVU0hPUlQJdXNGaWx0ZXIxX09mZnNldDsJCS8vUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzCisgICBVQ0hBUgl1Y1RWX01vZGVfTnVtOworfUFUT01fVFZfTU9ERV9TQ0FMRVJfUFRSOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9TVERfRk9STUFUIHsKLQlVU0hPUlQgdXNTVERfSERpc3A7Ci0JVVNIT1JUIHVzU1REX1ZEaXNwOwotCVVTSE9SVCB1c1NURF9SZWZyZXNoUmF0ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLX0gQVRPTV9TVERfRk9STUFUOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1RBTkRBUkRfVkVTQV9USU1JTkcKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9EVERfRk9STUFUIAkJCQkgYU1vZGVUaW1pbmdzWzE2XTsgICAgICAvLyAxNiBpcyBub3QgdGhlIHJlYWwgYXJyYXkgbnVtYmVyLCBqdXN0IGZvciBpbml0aWFsIGFsbG9jYXRpb24KK31BVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WRVNBX1RPX0VYVEVOREVEX01PREUgewotCVVTSE9SVCB1c1ZFU0FfTW9kZU51bWJlcjsKLQlVU0hPUlQgdXNFeHRlbmRlZE1vZGVOdW1iZXI7Ci19IEFUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WRVNBX1RPX0lOVEVOQUxfTU9ERV9MVVQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFIGFzVkVTQV9Ub0V4dGVuZGVkTW9kZUluZm9bNzZdOwotfSBBVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1NURF9GT1JNQVQKK3sgCisgIFVTSE9SVCAgICB1c1NURF9IRGlzcDsKKyAgVVNIT1JUICAgIHVzU1REX1ZEaXNwOworICBVU0hPUlQgICAgdXNTVERfUmVmcmVzaFJhdGU7CisgIFVTSE9SVCAgICB1c1Jlc2VydmVkOworfUFUT01fU1REX0ZPUk1BVDsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFCit7CisgIFVTSE9SVCAgdXNWRVNBX01vZGVOdW1iZXI7CisgIFVTSE9SVCAgdXNFeHRlbmRlZE1vZGVOdW1iZXI7Cit9QVRPTV9WRVNBX1RPX0VYVEVOREVEX01PREU7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVAoreyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsgIAorICBBVE9NX1ZFU0FfVE9fRVhURU5ERURfTU9ERSBhc1ZFU0FfVG9FeHRlbmRlZE1vZGVJbmZvWzc2XTsKK31BVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVDsKIAogLyoqKioqKioqKioqKioqKiBBVE9NIE1lbW9yeSBSZWxhdGVkIERhdGEgU3RydWN0dXJlICoqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1ZFTkRPUl9CTE9DSyB7Ci0JVUNIQVIgdWNNZW1vcnlUeXBlOwotCVVDSEFSIHVjTWVtb3J5VmVuZG9yOwotCVVDSEFSIHVjQWRqTUNJZDsKLQlVQ0hBUiB1Y0R5bkNsa0lkOwotCVVMT05HIHVsRGxsUmVzZXRDbGtSYW5nZTsKLX0gQVRPTV9NRU1PUllfVkVORE9SX0JMT0NLOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1ZFTkRPUl9CTE9DS3sKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTWVtb3J5VHlwZTsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTWVtb3J5VmVuZG9yOworCVVDSEFSCQkJCQkJCQkJCQkJdWNBZGpNQ0lkOworCVVDSEFSCQkJCQkJCQkJCQkJdWNEeW5DbGtJZDsKKwlVTE9ORwkJCQkJCQkJCQkJCXVsRGxsUmVzZXRDbGtSYW5nZTsKK31BVE9NX01FTU9SWV9WRU5ET1JfQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJRyB7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVTE9ORyB1Y01lbUJsa0lkOjg7Ci0JVUxPTkcgdWxNZW1DbG9ja1JhbmdlOjI0OworCVVMT05HCQkJCQkJCQkJCQkJdWNNZW1CbGtJZDo4OworCVVMT05HCQkJCQkJCQkJCQkJdWxNZW1DbG9ja1JhbmdlOjI0OwogI2Vsc2UKLQlVTE9ORyB1bE1lbUNsb2NrUmFuZ2U6MjQ7Ci0JVUxPTkcgdWNNZW1CbGtJZDo4OworCVVMT05HCQkJCQkJCQkJCQkJdWxNZW1DbG9ja1JhbmdlOjI0OworCVVMT05HCQkJCQkJCQkJCQkJdWNNZW1CbGtJZDo4OwogI2VuZGlmCi19IEFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHOworfUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1MgewotCUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHIHNsQWNjZXNzOwotCVVMT05HIHVsQWNjZXNzOwotfSBBVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1M7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1MKK3sKKyAgQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUcgc2xBY2Nlc3M7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgIHVsQWNjZXNzOworfUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHX0FDQ0VTUzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1NFVFRJTkdfREFUQV9CTE9DSyB7Ci0JQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUdfQUNDRVNTIHVsTWVtb3J5SUQ7Ci0JVUxPTkcgYXVsTWVtRGF0YVsxXTsKLX0gQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JTklUX1JFR19JTkRFWF9GT1JNQVQgewotCVVTSE9SVCB1c1JlZ0luZGV4OwkvKiAgTUMgcmVnaXN0ZXIgaW5kZXggKi8KLQlVQ0hBUiB1Y1ByZVJlZ0RhdGFMZW5ndGg7CS8qICBvZmZzZXQgaW4gQVRPTV9JTklUX1JFR19EQVRBX0JMT0NLLnNhUmVnRGF0YUJ1ZiAqLwotfSBBVE9NX0lOSVRfUkVHX0lOREVYX0ZPUk1BVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0t7CisJQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUdfQUNDRVNTCQkJdWxNZW1vcnlJRDsKKwlVTE9ORwkJCQkJCQkJCQkJCQkJCSAgICAgICAgYXVsTWVtRGF0YVsxXTsKK31BVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0lOSVRfUkVHX0JMT0NLIHsKLQlVU0hPUlQgdXNSZWdJbmRleFRibFNpemU7CS8qIHNpemUgb2YgYXNSZWdJbmRleEJ1ZiAqLwotCVVTSE9SVCB1c1JlZ0RhdGFCbGtTaXplOwkvKiBzaXplIG9mIEFUT01fTUVNT1JZX1NFVFRJTkdfREFUQV9CTE9DSyAqLwotCUFUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUIGFzUmVnSW5kZXhCdWZbMV07Ci0JQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLIGFzUmVnRGF0YUJ1ZlsxXTsKLX0gQVRPTV9JTklUX1JFR19CTE9DSzsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUeworCSBVU0hPUlQJCQkJCQkJCQkJCXVzUmVnSW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DIHJlZ2lzdGVyIGluZGV4CisJIFVDSEFSCQkJCQkJCQkJCQl1Y1ByZVJlZ0RhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgaW4gQVRPTV9JTklUX1JFR19EQVRBX0JMT0NLLnNhUmVnRGF0YUJ1ZgorfUFUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOSVRfUkVHX0JMT0NLeworCVVTSE9SVAkJCQkJCQkJCQkJCQl1c1JlZ0luZGV4VGJsU2l6ZTsJCQkJCQkJCQkJCQkJLy9zaXplIG9mIGFzUmVnSW5kZXhCdWYKKwlVU0hPUlQJCQkJCQkJCQkJCQkJdXNSZWdEYXRhQmxrU2l6ZTsJCQkJCQkJCQkJCQkJCS8vc2l6ZSBvZiBBVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0sKKwlBVE9NX0lOSVRfUkVHX0lOREVYX0ZPUk1BVAkJCWFzUmVnSW5kZXhCdWZbMV07CisJQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLCWFzUmVnRGF0YUJ1ZlsxXTsKK31BVE9NX0lOSVRfUkVHX0JMT0NLOwogCiAjZGVmaW5lIEVORF9PRl9SRUdfSU5ERVhfQkxPQ0sgIDB4MGZmZmYKICNkZWZpbmUgRU5EX09GX1JFR19EQVRBX0JMT0NLICAgMHgwMDAwMDAwMApAQCAtMzcxNiwxNiArNDUzMCwxOSBAQAogI2RlZmluZSBJTkRFWF9BQ0NFU1NfUkFOR0VfRU5ECQkgICAgKElOREVYX0FDQ0VTU19SQU5HRV9CRUdJTiArIDEpCiAjZGVmaW5lIFZBTFVFX0lOREVYX0FDQ0VTU19TSU5HTEUJICAgIChJTkRFWF9BQ0NFU1NfUkFOR0VfRU5EICsgMSkKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUNfSU5JVF9QQVJBTV9UQUJMRSB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzQWRqdXN0QVJCX1NFUURhdGFPZmZzZXQ7Ci0JVVNIT1JUIHVzTUNJbml0TWVtVHlwZVRibE9mZnNldDsKLQlVU0hPUlQgdXNNQ0luaXRDb21tb25UYmxPZmZzZXQ7Ci0JVVNIT1JUIHVzTUNJbml0UG93ZXJEb3duVGJsT2Zmc2V0OwotCVVMT05HIHVsQVJCX1NFUURhdGFCdWZbMzJdOwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNQ0luaXRNZW1UeXBlOwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNQ0luaXRDb21tb247Ci19IEFUT01fTUNfSU5JVF9QQVJBTV9UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUNfSU5JVF9QQVJBTV9UQUJMRQoreyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCQlzSGVhZGVyOworICBVU0hPUlQJCQkJCQkJCQkJCXVzQWRqdXN0QVJCX1NFUURhdGFPZmZzZXQ7CisgIFVTSE9SVAkJCQkJCQkJCQkJdXNNQ0luaXRNZW1UeXBlVGJsT2Zmc2V0OworICBVU0hPUlQJCQkJCQkJCQkJCXVzTUNJbml0Q29tbW9uVGJsT2Zmc2V0OworICBVU0hPUlQJCQkJCQkJCQkJCXVzTUNJbml0UG93ZXJEb3duVGJsT2Zmc2V0OworCVVMT05HCQkJCQkJCQkJCQkJdWxBUkJfU0VRRGF0YUJ1ZlszMl07CisJQVRPTV9JTklUX1JFR19CTE9DSwkJCQkJYXNNQ0luaXRNZW1UeXBlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJCWFzTUNJbml0Q29tbW9uOworfUFUT01fTUNfSU5JVF9QQVJBTV9UQUJMRTsKKwogCiAjZGVmaW5lIF80TXgxNiAgICAgICAgICAgICAgMHgyCiAjZGVmaW5lIF80TXgzMiAgICAgICAgICAgICAgMHgzCkBAIC0zNzUxLDIyMSArNDU2OCwyNzIgQEAKIAogI2RlZmluZSBRSU1PTkRBICAgICAgICAgICAgIElORklORU9OCiAjZGVmaW5lIFBST01PUyAgICAgICAgICAgICAgTU9TRUwKKyNkZWZpbmUgS1JFVE9OICAgICAgICAgICAgICBJTkZJTkVPTgogCi0vKiAvLy8vLy8vLy8vL1N1cHBvcnQgZm9yIEdERFI1IE1DIHVDb2RlIHRvIHJlc2lkZSBpbiB1cHBlciA2NEsgb2YgUk9NLy8vLy8vLy8vLy8vLyAqLworLy8vLy8vLy8vLy8vL1N1cHBvcnQgZm9yIEdERFI1IE1DIHVDb2RlIHRvIHJlc2lkZSBpbiB1cHBlciA2NEsgb2YgUk9NLy8vLy8vLy8vLy8vLwogCiAjZGVmaW5lIFVDT0RFX1JPTV9TVEFSVF9BRERSRVNTCQkweDFjMDAwCi0jZGVmaW5lCVVDT0RFX1NJR05BVFVSRQkJCTB4NDM3NTQzNGQJLyogICdNQ3VDJyAtIE1DIHVDb2RlICovCisjZGVmaW5lCVVDT0RFX1NJR05BVFVSRQkJCTB4NDM3NTQzNGQgLy8gJ01DdUMnIC0gTUMgdUNvZGUKIAotLyogdUNvZGUgYmxvY2sgaGVhZGVyIGZvciByZWZlcmVuY2UgKi8KKy8vdUNvZGUgYmxvY2sgaGVhZGVyIGZvciByZWZlcmVuY2UKIAotdHlwZWRlZiBzdHJ1Y3QgX01DdUNvZGVIZWFkZXIgewotCVVMT05HIHVsU2lnbmF0dXJlOwotCVVDSEFSIHVjUmV2aXNpb247Ci0JVUNIQVIgdWNDaGVja3N1bTsKLQlVQ0hBUiB1Y1Jlc2VydmVkMTsKLQlVQ0hBUiB1Y1Jlc2VydmVkMjsKLQlVU0hPUlQgdXNQYXJhbWV0ZXJzTGVuZ3RoOwotCVVTSE9SVCB1c1VDb2RlTGVuZ3RoOwotCVVTSE9SVCB1c1Jlc2VydmVkMTsKLQlVU0hPUlQgdXNSZXNlcnZlZDI7Cit0eXBlZGVmIHN0cnVjdCBfTUN1Q29kZUhlYWRlcgoreworICBVTE9ORyAgdWxTaWduYXR1cmU7CisgIFVDSEFSICB1Y1JldmlzaW9uOworICBVQ0hBUiAgdWNDaGVja3N1bTsKKyAgVUNIQVIgIHVjUmVzZXJ2ZWQxOworICBVQ0hBUiAgdWNSZXNlcnZlZDI7CisgIFVTSE9SVCB1c1BhcmFtZXRlcnNMZW5ndGg7CisgIFVTSE9SVCB1c1VDb2RlTGVuZ3RoOworICBVU0hPUlQgdXNSZXNlcnZlZDE7CisgIFVTSE9SVCB1c1Jlc2VydmVkMjsKIH0gTUN1Q29kZUhlYWRlcjsKIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogI2RlZmluZSBBVE9NX01BWF9OVU1CRVJfT0ZfVlJBTV9NT0RVTEUJMTYKIAogI2RlZmluZSBBVE9NX1ZSQU1fTU9EVUxFX01FTU9SWV9WRU5ET1JfSURfTUFTSwkweEYKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1YxIHsKLQlVTE9ORyB1bFJlc2VydmVkOwotCVVTSE9SVCB1c0VNUlNWYWx1ZTsKLQlVU0hPUlQgdXNNUlNWYWx1ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIHJlc2VydmVkOyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIgKi8KLQlVQ0hBUiB1Y01lbW9yeURldmljZUNmZzsJLyogIFs3OjRdPTB4MDo0TTs9MHgxOjhNOz0weDI6MTZNOzB4MzozMk0uLi4uWzM6MF09MHgwOng0Oz0weDE6eDg7PTB4Mjp4MTY7PTB4Mzp4MzIuLi4gKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxOdW07CS8qICBOdW1iZXIgb2YgY2hhbm5lbDsgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxDb25maWc7CS8qICBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRNVkREUV9JRDsJLyogIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7ICovCi0JVUNIQVIgdWNEZWZhdWx0TVZERENfSUQ7CS8qICBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOyAqLwotCVVDSEFSIHVjUmVzZXJ2ZWRbMl07Ci19IEFUT01fVlJBTV9NT0RVTEVfVjE7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMQoreworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlNWYWx1ZTsgIAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01SU1ZhbHVlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0V4dE1lbW9yeUlEOyAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeVR5cGU7ICAgICAgLy8gWzc6NF09MHgxOkREUjE7PTB4MjpERFIyOz0weDM6RERSMzs9MHg0OkREUjQ7WzM6MF0gcmVzZXJ2ZWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VmVuZGVySUQ7ICAvLyBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5RGV2aWNlQ2ZnOyAvLyBbNzo0XT0weDA6NE07PTB4MTo4TTs9MHgyOjE2TTsweDM6MzJNLi4uLlszOjBdPTB4MDp4NDs9MHgxOng4Oz0weDI6eDE2Oz0weDM6eDMyLi4uCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUm93OyAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ29sdW1uOyAgICAgICAgICAvLyBOdW1iZXIgb2YgQ29sdW1uLGluIHBvd2VyIG9mIDI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQmFuazsgICAgICAgICAgICAvLyBOdW5iZXIgb2YgQmFuazsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNSYW5rOyAgICAgICAgICAgIC8vIE51bWJlciBvZiBSYW5rLCBpbiBwb3dlciBvZiAyCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ2hhbm5lbE51bTsgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNDaGFubmVsQ29uZmlnOyAgIC8vIFszOjBdPUluZGljYXRpb24gb2Ygd2hhdCBjaGFubmVsIGNvbWJpbmF0aW9uO1s0OjddPUNoYW5uZWwgYml0IHdpZHRoLCBpbiBudW1iZXIgb2YgMgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0RlZmF1bHRNVkREUV9JRDsgLy8gRGVmYXVsdCBNVkREUSBzZXR0aW5nIGZvciB0aGlzIG1lbW9yeSBibG9jaywgSUQgbGlua2luZyB0byBNVkREUSBpbmZvIHRhYmxlIHRvIGZpbmQgcmVhbCBzZXQtdXAgZGF0YTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEZWZhdWx0TVZERENfSUQ7IC8vIERlZmF1bHQgTVZEREMgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZEREMgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9WUkFNX01PRFVMRV9WMTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjIgewotCVVMT05HIHVsUmVzZXJ2ZWQ7Ci0JVUxPTkcgdWxGbGFnczsJCS8qICBUbyBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbmFsaXRpZXMgYmFzZWQgb24gbWVtb3J5IHR5cGUgKi8KLQlVTE9ORyB1bEVuZ2luZUNsb2NrOwkvKiAgT3ZlcnJpZGUgb2YgZGVmYXVsdCBlbmdpbmUgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUgKi8KLQlVTE9ORyB1bE1lbW9yeUNsb2NrOwkvKiAgT3ZlcnJpZGUgb2YgZGVmYXVsdCBtZW1vcnkgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUgKi8KLQlVU0hPUlQgdXNFTVJTMlZhbHVlOwkvKiAgRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JVVNIT1JUIHVzRU1SUzNWYWx1ZTsJLyogIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZSAqLwotCVVTSE9SVCB1c0VNUlNWYWx1ZTsKLQlVU0hPUlQgdXNNUlNWYWx1ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIC0gbXVzdCBub3QgYmUgdXNlZCBmb3Igbm93OyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIuIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y01lbW9yeURldmljZUNmZzsJLyogIFs3OjRdPTB4MDo0TTs9MHgxOjhNOz0weDI6MTZNOzB4MzozMk0uLi4uWzM6MF09MHgwOng0Oz0weDE6eDg7PTB4Mjp4MTY7PTB4Mzp4MzIuLi4gKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxOdW07CS8qICBOdW1iZXIgb2YgY2hhbm5lbDsgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxDb25maWc7CS8qICBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRNVkREUV9JRDsJLyogIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7ICovCi0JVUNIQVIgdWNEZWZhdWx0TVZERENfSUQ7CS8qICBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOyAqLwotCVVDSEFSIHVjUmVmcmVzaFJhdGVGYWN0b3I7Ci0JVUNIQVIgdWNSZXNlcnZlZFszXTsKLX0gQVRPTV9WUkFNX01PRFVMRV9WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQgewotCVVMT05HIHVsQ2xrUmFuZ2U7CS8qICBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgKi8KLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c01SUzsJLyogIG1vZGUgcmVnaXN0ZXIgKi8KLQkJVVNIT1JUIHVzRERSM19NUjA7Ci0JfTsKLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlM7CS8qICBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyICovCi0JCVVTSE9SVCB1c0REUjNfTVIxOwotCX07Ci0JVUNIQVIgdWNDTDsJCS8qICBDQVMgbGF0ZW5jeSAqLwotCVVDSEFSIHVjV0w7CQkvKiAgV1JJVEUgTGF0ZW5jeSAqLwotCVVDSEFSIHVjdFJBUzsJCS8qICB0UkFTICovCi0JVUNIQVIgdWN0UkM7CQkvKiAgdFJDICovCi0JVUNIQVIgdWN0UkZDOwkJLyogIHRSRkMgKi8KLQlVQ0hBUiB1Y3RSQ0RSOwkJLyogIHRSQ0RSICovCi0JVUNIQVIgdWN0UkNEVzsJCS8qICB0UkNEVyAqLwotCVVDSEFSIHVjdFJQOwkJLyogIHRSUCAqLwotCVVDSEFSIHVjdFJSRDsJCS8qICB0UlJEICovCi0JVUNIQVIgdWN0V1I7CQkvKiAgdFdSICovCi0JVUNIQVIgdWN0V1RSOwkJLyogIHRXVFIgKi8KLQlVQ0hBUiB1Y3RQRElYOwkJLyogIHRQRElYICovCi0JVUNIQVIgdWN0RkFXOwkJLyogIHRGQVcgKi8KLQlVQ0hBUiB1Y3RBT05EOwkJLyogIHRBT05EICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJVUNIQVIgdWNmbGFnOwkvKiAgZmxhZyB0byBjb250cm9sIG1lbW9yeSB0aW1pbmcgY2FsY3VsYXRpb24uIGJpdDA9IGNvbnRyb2wgRU1SUzIgSW5maW5lb24gKi8KLQkJCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci0JCX07Ci0JCVVTSE9SVCB1c0REUjNfTVIyOwotCX07Ci19IEFUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMgoreworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bEZsYWdzOyAgICAgCQkJLy8gVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsRW5naW5lQ2xvY2s7ICAgICAvLyBPdmVycmlkZSBvZiBkZWZhdWx0IGVuZ2luZSBjbG9jayBmb3IgcGFydGljdWxhciBtZW1vcnkgdHlwZQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE1lbW9yeUNsb2NrOyAgICAgLy8gT3ZlcnJpZGUgb2YgZGVmYXVsdCBtZW1vcnkgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNFTVJTMlZhbHVlOyAgICAgIC8vIEVNUlMyIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMzVmFsdWU7ICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRU1SU1ZhbHVlOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTVJTVmFsdWU7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRXh0TWVtb3J5SUQ7ICAgICAvLyBBbiBleHRlcm5hbCBpbmRpY2F0b3IgKGJ5IGhhcmRjb2RlLCBjYWxsYmFjayBvciBwaW4pIHRvIHRlbGwgd2hhdCBpcyB0aGUgY3VycmVudCBtZW1vcnkgbW9kdWxlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDtbMzowXSAtIG11c3Qgbm90IGJlIHVzZWQgZm9yIG5vdzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlWZW5kZXJJRDsgIC8vIFByZWRlZmluZWQsbmV2ZXIgY2hhbmdlIGFjcm9zcyBkZXNpZ25zIG9yIG1lbW9yeSB0eXBlL3ZlbmRlci4gSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeURldmljZUNmZzsgLy8gWzc6NF09MHgwOjRNOz0weDE6OE07PTB4MjoxNk07MHgzOjMyTS4uLi5bMzowXT0weDA6eDQ7PTB4MTp4ODs9MHgyOngxNjs9MHgzOngzMi4uLgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JvdzsgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIFJvdyxpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NvbHVtbjsgICAgICAgICAgLy8gTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0Jhbms7ICAgICAgICAgICAgLy8gTnVuYmVyIG9mIEJhbms7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmFuazsgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUmFuaywgaW4gcG93ZXIgb2YgMgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NoYW5uZWxOdW07ICAgICAgLy8gTnVtYmVyIG9mIGNoYW5uZWw7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ2hhbm5lbENvbmZpZzsgICAvLyBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEZWZhdWx0TVZERFFfSUQ7IC8vIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRGVmYXVsdE1WRERDX0lEOyAvLyBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JlZnJlc2hSYXRlRmFjdG9yOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkWzNdOworfUFUT01fVlJBTV9NT0RVTEVfVjI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxIHsKLQlVTE9ORyB1bENsa1JhbmdlOwkvKiAgbWVtb3J5IGNsb2NrIGluIDEwa0h6IHVuaXQsIHdoZW4gdGFyZ2V0IG1lbW9yeSBjbG9jayBpcyBiZWxvdyB0aGlzIGNsb2NrLCB1c2UgdGhpcyBtZW1vcnkgdGltaW5nICovCi0JVVNIT1JUIHVzTVJTOwkJLyogIG1vZGUgcmVnaXN0ZXIgKi8KLQlVU0hPUlQgdXNFTVJTOwkJLyogIGV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgKi8KLQlVQ0hBUiB1Y0NMOwkJLyogIENBUyBsYXRlbmN5ICovCi0JVUNIQVIgdWNXTDsJCS8qICBXUklURSBMYXRlbmN5ICovCi0JVUNIQVIgdWN0UkFTOwkJLyogIHRSQVMgKi8KLQlVQ0hBUiB1Y3RSQzsJCS8qICB0UkMgKi8KLQlVQ0hBUiB1Y3RSRkM7CQkvKiAgdFJGQyAqLwotCVVDSEFSIHVjdFJDRFI7CQkvKiAgdFJDRFIgKi8KLQlVQ0hBUiB1Y3RSQ0RXOwkJLyogIHRSQ0RXICovCi0JVUNIQVIgdWN0UlA7CQkvKiAgdFJQICovCi0JVUNIQVIgdWN0UlJEOwkJLyogIHRSUkQgKi8KLQlVQ0hBUiB1Y3RXUjsJCS8qICB0V1IgKi8KLQlVQ0hBUiB1Y3RXVFI7CQkvKiAgdFdUUiAqLwotCVVDSEFSIHVjdFBESVg7CQkvKiAgdFBESVggKi8KLQlVQ0hBUiB1Y3RGQVc7CQkvKiAgdEZBVyAqLwotCVVDSEFSIHVjdEFPTkQ7CQkvKiAgdEFPTkQgKi8KLQlVQ0hBUiB1Y2ZsYWc7CQkvKiAgZmxhZyB0byBjb250cm9sIG1lbW9yeSB0aW1pbmcgY2FsY3VsYXRpb24uIGJpdDA9IGNvbnRyb2wgRU1SUzIgSW5maW5lb24gKi8KLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLQlVQ0hBUiB1Y3RDQ0RMOwkJLyogICovCi0JVUNIQVIgdWN0Q1JDUkw7CQkvKiAgKi8KLQlVQ0hBUiB1Y3RDUkNXTDsJCS8qICAqLwotCVVDSEFSIHVjdENLRTsJCS8qICAqLwotCVVDSEFSIHVjdENLUlNFOwkJLyogICovCi0JVUNIQVIgdWN0Q0tSU1g7CQkvKiAgKi8KLQlVQ0hBUiB1Y3RGQVczMjsJCS8qICAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQxOwkvKiAgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkMjsJLyogICovCi0JVUNIQVIgdWNUZXJtaW5hdG9yOwotfSBBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfRk9STUFUIHsKLQlVTE9ORyB1bERsbERpc0Nsb2NrOwkvKiAgbWVtb3J5IERMTCB3aWxsIGJlIGRpc2FibGUgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2sgKi8KLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlMyVmFsdWU7CS8qICBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQkJVVNIT1JUIHVzRERSM19SZXNlcnZlZDsJLyogIE5vdCB1c2VkIGZvciBERFIzIG1lbW9yeSAqLwotCX07Ci0JdW5pb24gewotCQlVU0hPUlQgdXNFTVJTM1ZhbHVlOwkvKiAgRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JCVVTSE9SVCB1c0REUjNfTVIzOwkvKiAgVXNlZCBmb3IgRERSMyBtZW1vcnkgKi8KLQl9OwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIC0gbXVzdCBub3QgYmUgdXNlZCBmb3Igbm93OyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIuIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0J1cnN0U2l6ZTsJLyogIGJ1cnN0IHNpemUsIDA9IGJ1cnN0IHNpemU9NCAgMT0gYnVyc3Qgc2l6ZT04ICovCi0JVUNIQVIgdWNEbGxEaXNCaXQ7CS8qICBwb3NpdGlvbiBvZiBETEwgRW5hYmxlL0Rpc2FibGUgYml0IGluIEVNUlMgKCBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICkgKi8KLQlVQ0hBUiB1Y1JlZnJlc2hSYXRlRmFjdG9yOwkvKiAgbWVtb3J5IHJlZnJlc2ggcmF0ZSBpbiB1bml0IG9mIG1zICovCi0JVUNIQVIgdWNEZW5zaXR5OwkvKiAgXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2ICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUgKi8KLQlVQ0hBUiB1Y01lbUF0dHJpYjsJLyogIE1lbW9yeSBEZXZpY2UgQWRkcmlidXRlLCBsaWtlIFJEQkkvV0RCSSBldGMgKi8KLQlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUIGFzTWVtVGltaW5nWzVdOwkvKiBNZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sgKi8KLX0gQVRPTV9NRU1PUllfRk9STUFUOwordHlwZWRlZglzdHJ1Y3QgX0FUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQKK3sKKwlVTE9ORwkJCQkJCQkJCQkJIHVsQ2xrUmFuZ2U7CQkJCS8vIG1lbW9yeSBjbG9jayBpbiAxMGtIeiB1bml0LCB3aGVuIHRhcmdldCBtZW1vcnkgY2xvY2sgaXMgYmVsb3cgdGhpcyBjbG9jaywgdXNlIHRoaXMgbWVtb3J5IHRpbWluZyAJCisgIHVuaW9ueworCSAgVVNIT1JUCQkJCQkJCQkJCSB1c01SUzsJCQkJCQkJLy8gbW9kZSByZWdpc3RlcgkJCQkJCQorICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRERSM19NUjA7CisgIH07CisgIHVuaW9ueworCSAgVVNIT1JUCQkJCQkJCQkJCSB1c0VNUlM7CQkJCQkJLy8gZXh0ZW5kZWQgbW9kZSByZWdpc3RlcgorICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRERSM19NUjE7CisgIH07CisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorICB1bmlvbiAKKyAgeworICAgIHN0cnVjdCB7CisJICAgIFVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorCSAgICBVQ0hBUgkJCQkJCQkJCQkJIHVjUmVzZXJ2ZWQ7CQkJCQkJCisgICAgfTsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgdXNERFIzX01SMjsKKyAgfTsKK31BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMyB7Ci0JVUxPTkcgdWxDaGFubmVsTWFwQ2ZnOwkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZW50ZXI6Q2hhbm5lbCBjb21iaW5hdGlvbiAqLwotCVVTSE9SVCB1c1NpemU7CQkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1YzICovCi0JVVNIT1JUIHVzRGVmYXVsdE1WRERROwkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpEZWZhdWx0IE1lbW9yeSBDb3JlIFZvbHRhZ2UgKi8KLQlVU0hPUlQgdXNEZWZhdWx0TVZEREM7CS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOkRlZmF1bHQgTWVtb3J5IElPIFZvbHRhZ2UgKi8KLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjQ2hhbm5lbE51bTsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6TnVtYmVyIG9mIGNoYW5uZWw7ICovCi0JVUNIQVIgdWNDaGFubmVsU2l6ZTsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6MzJiaXQgb3IgNjRiaXQgKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZG50IHBhcmFtZXRlcjogRVhUIG9yIElOVCArMTYwbXYgdG8gLTE0MG12ICovCi0JVUNIQVIgdWNOUExfUlQ7CQkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOUEwgcm91bmQgdHJpcCBkZWxheSwgdXNlZCBmb3IgY2FsY3VsYXRlIG1lbW9yeSB0aW1pbmcgcGFyYW1ldGVycyAqLwotCVVDSEFSIHVjRmxhZzsJCS8qICBUbyBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbmFsaXRpZXMgYmFzZWQgb24gbWVtb3J5IHR5cGUgKi8KLQlBVE9NX01FTU9SWV9GT1JNQVQgYXNNZW1vcnk7CS8qICBkZXNjcmliIGFsbCBvZiB2aWRlbyBtZW1vcnkgcGFyYW1ldGVycyBmcm9tIG1lbW9yeSBzcGVjICovCi19IEFUT01fVlJBTV9NT0RVTEVfVjM7CiAKLS8qIEFUT01fVlJBTV9NT0RVTEVfVjMudWNOUExfUlQgKi8KK3R5cGVkZWYJc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENsa1JhbmdlOwkJCQkvLyBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgCQorCVVTSE9SVAkJCQkJCQkJCQkgdXNNUlM7CQkJCQkJCS8vIG1vZGUgcmVnaXN0ZXIJCQkJCQkKKwlVU0hPUlQJCQkJCQkJCQkJIHVzRU1SUzsJCQkJCQkvLyBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyCisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorCVVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENDREw7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDUkNSTDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENSQ1dMOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tFOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tSU0U7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDS1JTWDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdEZBVzMyOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNUZXJtaW5hdG9yOworfUFUT01fTUVNT1JZX1RJTUlOR19GT1JNQVRfVjE7CisKK3R5cGVkZWYJc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YyCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENsa1JhbmdlOwkJCQkvLyBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgCQorCVVTSE9SVAkJCQkJCQkJCQkgdXNNUlM7CQkJCQkJCS8vIG1vZGUgcmVnaXN0ZXIJCQkJCQkKKwlVU0hPUlQJCQkJCQkJCQkJIHVzRU1SUzsJCQkJCQkvLyBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyCisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorCVVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENDREw7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDUkNSTDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENSQ1dMOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tFOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tSU0U7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDS1JTWDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdEZBVzMyOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjRsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjRoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNUZXJtaW5hdG9yOworCVVDSEFSCQkJCQkJCQkJCQkgdWNSZXNlcnZlZDsJCit9QVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMjsKKwordHlwZWRlZglzdHJ1Y3QgX0FUT01fTUVNT1JZX0ZPUk1BVAoreworCVVMT05HCQkJCQkJCQkJCQkgdWxEbGxEaXNDbG9jazsJCQkvLyBtZW1vcnkgRExMIHdpbGwgYmUgZGlzYWJsZSB3aGVuIHRhcmdldCBtZW1vcnkgY2xvY2sgaXMgYmVsb3cgdGhpcyBjbG9jaworICB1bmlvbnsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMyVmFsdWU7ICAgICAgLy8gRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNERFIzX1Jlc2VydmVkOyAgIC8vIE5vdCB1c2VkIGZvciBERFIzIG1lbW9yeQorICB9OworICB1bmlvbnsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMzVmFsdWU7ICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNERFIzX01SMzsgICAgICAgIC8vIFVzZWQgZm9yIEREUjMgbWVtb3J5CisgIH07CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDtbMzowXSAtIG11c3Qgbm90IGJlIHVzZWQgZm9yIG5vdzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlWZW5kZXJJRDsgIC8vIFByZWRlZmluZWQsbmV2ZXIgY2hhbmdlIGFjcm9zcyBkZXNpZ25zIG9yIG1lbW9yeSB0eXBlL3ZlbmRlci4gSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JvdzsgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIFJvdyxpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NvbHVtbjsgICAgICAgICAgLy8gTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0Jhbms7ICAgICAgICAgICAgLy8gTnVuYmVyIG9mIEJhbms7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmFuazsgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUmFuaywgaW4gcG93ZXIgb2YgMgorCVVDSEFSCQkJCQkJCQkJCQkgdWNCdXJzdFNpemU7CQkJCS8vIGJ1cnN0IHNpemUsIDA9IGJ1cnN0IHNpemU9NCAgMT0gYnVyc3Qgc2l6ZT04CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRGxsRGlzQml0OwkJCQkvLyBwb3NpdGlvbiBvZiBETEwgRW5hYmxlL0Rpc2FibGUgYml0IGluIEVNUlMgKCBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNSZWZyZXNoUmF0ZUZhY3RvcjsJLy8gbWVtb3J5IHJlZnJlc2ggcmF0ZSBpbiB1bml0IG9mIG1zCQorCVVDSEFSCQkJCQkJCQkJCQkgdWNEZW5zaXR5OwkJCQkJLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJCQkJCQkJCQkJCSB1Y1ByZWFtYmxlOwkJCQkvL1s3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlCisgIFVDSEFSCQkJCQkJCQkJCQkgdWNNZW1BdHRyaWI7CQkJCS8vIE1lbW9yeSBEZXZpY2UgQWRkcmlidXRlLCBsaWtlIFJEQkkvV0RCSSBldGMKKwlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUCSBhc01lbVRpbWluZ1s1XTsJCS8vTWVtb3J5IFRpbWluZyBibG9jayBzb3J0IGZyb20gbG93ZXIgY2xvY2sgdG8gaGlnaGVyIGNsb2NrCit9QVRPTV9NRU1PUllfRk9STUFUOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1YzCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENoYW5uZWxNYXBDZmc7CQkvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1lbnRlcjpDaGFubmVsIGNvbWJpbmF0aW9uCisJVVNIT1JUCQkJCQkJCQkJCSB1c1NpemU7CQkJCQkJLy8gc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1YzCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRGVmYXVsdE1WRERROwkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpEZWZhdWx0IE1lbW9yeSBDb3JlIFZvbHRhZ2UKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNEZWZhdWx0TVZEREM7CQkvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOkRlZmF1bHQgTWVtb3J5IElPIFZvbHRhZ2UKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0V4dE1lbW9yeUlEOyAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NoYW5uZWxOdW07ICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOdW1iZXIgb2YgY2hhbm5lbDsKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjQ2hhbm5lbFNpemU7CQkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjozMmJpdCBvciA2NGJpdAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjVlJFRkk7CQkJCQkJLy8gYm9hcmQgZGVwZW5kbnQgcGFyYW1ldGVyOiBFWFQgb3IgSU5UICsxNjBtdiB0byAtMTQwbXYKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjTlBMX1JUOwkJCQkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOUEwgcm91bmQgdHJpcCBkZWxheSwgdXNlZCBmb3IgY2FsY3VsYXRlIG1lbW9yeSB0aW1pbmcgcGFyYW1ldGVycworCVVDSEFSCQkJCQkJCQkJCQkgdWNGbGFnOwkJCQkJCS8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCUFUT01fTUVNT1JZX0ZPUk1BVAkJCQkgYXNNZW1vcnk7CQkJCQkvLyBkZXNjcmliIGFsbCBvZiB2aWRlbyBtZW1vcnkgcGFyYW1ldGVycyBmcm9tIG1lbW9yeSBzcGVjCit9QVRPTV9WUkFNX01PRFVMRV9WMzsKKworCisvL0FUT01fVlJBTV9NT0RVTEVfVjMudWNOUExfUlQKICNkZWZpbmUgTlBMX1JUX01BU0sJCQkJCQkJCQkJCQkJCQkweDBmCiAjZGVmaW5lIEJBVFRFUllfT0RUX01BU0sJCQkJCQkJCQkJCQkweGMwCiAKICNkZWZpbmUgQVRPTV9WUkFNX01PRFVMRQkJIEFUT01fVlJBTV9NT0RVTEVfVjMKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjQgewotCVVMT05HIHVsQ2hhbm5lbE1hcENmZzsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6IENoYW5uZWwgY29tYmluYXRpb24gKi8KLQlVU0hPUlQgdXNNb2R1bGVTaXplOwkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1Y0LCBtYWtlIGl0IGVhc3kgZm9yIFZCSU9TIHRvIGxvb2sgZm9yIG5leHQgZW50cnkgb2YgVlJBTV9NT0RVTEUgKi8KLQlVU0hPUlQgdXNQcml2YXRlUmVzZXJ2ZWQ7CS8qICBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhICovCi0JLyogIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7ICovCi0JVUNIQVIgdWNDaGFubmVsTnVtOwkvKiAgTnVtYmVyIG9mIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgY29uZmlnICovCi0JVUNIQVIgdWNDaGFubmVsV2lkdGg7CS8qICAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMgKi8KLQlVQ0hBUiB1Y0RlbnNpdHk7CS8qICBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYgKi8KLQlVQ0hBUiB1Y0ZsYWc7CQkvKiAgVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlICovCi0JVUNIQVIgdWNNaXNjOwkJLyogIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDggKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y05QTF9SVDsJCS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogIFs3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlICovCi0JVUNIQVIgdWNNZW1vcnlTaXplOwkvKiAgQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhISAqLwotCS8qICBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zICovCi0JVUNIQVIgdWNSZXNlcnZlZFszXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1Y0Cit7CisgIFVMT05HCSAgdWxDaGFubmVsTWFwQ2ZnOwkgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjogQ2hhbm5lbCBjb21iaW5hdGlvbgorICBVU0hPUlQgIHVzTW9kdWxlU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIEFUT01fVlJBTV9NT0RVTEVfVjQsIG1ha2UgaXQgZWFzeSBmb3IgVkJJT1MgdG8gbG9vayBmb3IgbmV4dCBlbnRyeSBvZiBWUkFNX01PRFVMRQorICBVU0hPUlQgIHVzUHJpdmF0ZVJlc2VydmVkOyAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykKKyAgVVNIT1JUICB1c1Jlc2VydmVkOworICBVQ0hBUiAgIHVjRXh0TWVtb3J5SUQ7ICAgIAkJICAgICAgICAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDsgMHg1OkREUjUgWzM6MF0gLSBNdXN0IGJlIDB4MCBmb3Igbm93OworICBVQ0hBUiAgIHVjQ2hhbm5lbE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBjb25maWcKKyAgVUNIQVIgICB1Y0NoYW5uZWxXaWR0aDsgICAgICAgICAgICAgICAgICAgLy8gMCAtIDMyIGJpdHM7IDEgLSA2NCBiaXRzCisJVUNIQVIgICB1Y0RlbnNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJICB1Y0ZsYWc7CQkJCQkJICAgICAgICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCVVDSEFSCSAgdWNNaXNjOwkJCQkJCSAgICAgICAgICAgICAgICAvLyBiaXQwOiAwIC0gc2luZ2xlIHJhbms7IDEgLSBkdWFsIHJhbms7ICAgYml0MjogMCAtIGJ1cnN0bGVuZ3RoIDQsIDEgLSBidXJzdGxlbmd0aCA4CisgIFVDSEFSCQl1Y1ZSRUZJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcgorICBVQ0hBUiAgIHVjTlBMX1JUOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzCisgIFVDSEFSCQl1Y1ByZWFtYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUKKyAgVUNIQVIgICB1Y01lbW9yeVNpemU7ICAgICAgICAgICAgICAgICAgICAgLy8gQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zCisgIFVDSEFSICAgdWNSZXNlcnZlZFszXTsKIAotLyogY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsICovCi0JdW5pb24gewotCQlVU0hPUlQgdXNFTVJTMlZhbHVlOwkvKiAgRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JCVVTSE9SVCB1c0REUjNfUmVzZXJ2ZWQ7Ci0JfTsKLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlMzVmFsdWU7CS8qICBFTVJTMyBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQkJVVNIT1JUIHVzRERSM19NUjM7CS8qICBVc2VkIGZvciBERFIzIG1lbW9yeSAqLwotCX07Ci0JVUNIQVIgdWNNZW1vcnlWZW5kZXJJRDsJLyogIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y1JlZnJlc2hSYXRlRmFjdG9yOwkvKiAgWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpICovCi0JVUNIQVIgdWNSZXNlcnZlZDJbMl07Ci0JQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVCBhc01lbVRpbWluZ1s1XTsJLyogTWVtb3J5IFRpbWluZyBibG9jayBzb3J0IGZyb20gbG93ZXIgY2xvY2sgdG8gaGlnaGVyIGNsb2NrICovCi19IEFUT01fVlJBTV9NT0RVTEVfVjQ7CisvL2NvbXBhcmUgd2l0aCBWMywgd2UgZmxhdCB0aGUgc3RydWN0IGJ5IG1lcmdpbmcgQVRPTV9NRU1PUllfRk9STUFUIChhcyBpcykgaW50byBWNCBhcyB0aGUgc2FtZSBsZXZlbAorICB1bmlvbnsKKyAgICBVU0hPUlQJdXNFTVJTMlZhbHVlOyAgICAgICAgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgICBVU0hPUlQgIHVzRERSM19SZXNlcnZlZDsKKyAgfTsKKyAgdW5pb257CisgICAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAgICAgICAgICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICB1c0REUjNfTVIzOyAgICAgICAgICAgICAgICAgICAgIC8vIFVzZWQgZm9yIEREUjMgbWVtb3J5CisgIH07ICAKKyAgVUNIQVIgICB1Y01lbW9yeVZlbmRlcklEOyAgCQkgICAgICAgICAgICAvLyBQcmVkZWZpbmVkLCBJZiBub3QgcHJlZGVmaW5lZCwgdmVuZG9yIGRldGVjdGlvbiB0YWJsZSBnZXRzIGV4ZWN1dGVkCisgIFVDSEFSCSAgdWNSZWZyZXNoUmF0ZUZhY3RvcjsgICAgICAgICAgICAgIC8vIFsxOjBdPVJlZnJlc2hGYWN0b3IgKDAwPThtcywgMDE9MTZtcywgMTA9MzJtcywxMT02NG1zKQorICBVQ0hBUiAgIHVjUmVzZXJ2ZWQyWzJdOworICBBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUICBhc01lbVRpbWluZ1s1XTsvL01lbW9yeSBUaW1pbmcgYmxvY2sgc29ydCBmcm9tIGxvd2VyIGNsb2NrIHRvIGhpZ2hlciBjbG9jaworfUFUT01fVlJBTV9NT0RVTEVfVjQ7CiAKICNkZWZpbmUgVlJBTV9NT0RVTEVfVjRfTUlTQ19SQU5LX01BU0sgICAgICAgMHgzCiAjZGVmaW5lIFZSQU1fTU9EVUxFX1Y0X01JU0NfRFVBTF9SQU5LICAgICAgIDB4MQpAQCAtMzk3Myw5NiArNDg0MSwxMzkgQEAKICNkZWZpbmUgVlJBTV9NT0RVTEVfVjRfTUlTQ19CTDggICAgICAgICAgICAgMHg0CiAjZGVmaW5lIFZSQU1fTU9EVUxFX1Y0X01JU0NfRFVBTF9DUyAgICAgICAgIDB4MTAKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjUgewotCVVMT05HIHVsQ2hhbm5lbE1hcENmZzsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6IENoYW5uZWwgY29tYmluYXRpb24gKi8KLQlVU0hPUlQgdXNNb2R1bGVTaXplOwkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1Y0LCBtYWtlIGl0IGVhc3kgZm9yIFZCSU9TIHRvIGxvb2sgZm9yIG5leHQgZW50cnkgb2YgVlJBTV9NT0RVTEUgKi8KLQlVU0hPUlQgdXNQcml2YXRlUmVzZXJ2ZWQ7CS8qICBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhICovCi0JLyogIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7ICovCi0JVUNIQVIgdWNDaGFubmVsTnVtOwkvKiAgTnVtYmVyIG9mIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgY29uZmlnICovCi0JVUNIQVIgdWNDaGFubmVsV2lkdGg7CS8qICAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMgKi8KLQlVQ0hBUiB1Y0RlbnNpdHk7CS8qICBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYgKi8KLQlVQ0hBUiB1Y0ZsYWc7CQkvKiAgVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlICovCi0JVUNIQVIgdWNNaXNjOwkJLyogIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDggKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y05QTF9SVDsJCS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogIFs3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlICovCi0JVUNIQVIgdWNNZW1vcnlTaXplOwkvKiAgQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhISAqLwotCS8qICBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zICovCi0JVUNIQVIgdWNSZXNlcnZlZFszXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1Y1Cit7CisgIFVMT05HCSAgdWxDaGFubmVsTWFwQ2ZnOwkgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjogQ2hhbm5lbCBjb21iaW5hdGlvbgorICBVU0hPUlQgIHVzTW9kdWxlU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIEFUT01fVlJBTV9NT0RVTEVfVjQsIG1ha2UgaXQgZWFzeSBmb3IgVkJJT1MgdG8gbG9vayBmb3IgbmV4dCBlbnRyeSBvZiBWUkFNX01PRFVMRQorICBVU0hPUlQgIHVzUHJpdmF0ZVJlc2VydmVkOyAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykKKyAgVVNIT1JUICB1c1Jlc2VydmVkOworICBVQ0hBUiAgIHVjRXh0TWVtb3J5SUQ7ICAgIAkJICAgICAgICAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDsgMHg1OkREUjUgWzM6MF0gLSBNdXN0IGJlIDB4MCBmb3Igbm93OworICBVQ0hBUiAgIHVjQ2hhbm5lbE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBjb25maWcKKyAgVUNIQVIgICB1Y0NoYW5uZWxXaWR0aDsgICAgICAgICAgICAgICAgICAgLy8gMCAtIDMyIGJpdHM7IDEgLSA2NCBiaXRzCisJVUNIQVIgICB1Y0RlbnNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJICB1Y0ZsYWc7CQkJCQkJICAgICAgICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCVVDSEFSCSAgdWNNaXNjOwkJCQkJCSAgICAgICAgICAgICAgICAvLyBiaXQwOiAwIC0gc2luZ2xlIHJhbms7IDEgLSBkdWFsIHJhbms7ICAgYml0MjogMCAtIGJ1cnN0bGVuZ3RoIDQsIDEgLSBidXJzdGxlbmd0aCA4CisgIFVDSEFSCQl1Y1ZSRUZJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcgorICBVQ0hBUiAgIHVjTlBMX1JUOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzCisgIFVDSEFSCQl1Y1ByZWFtYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUKKyAgVUNIQVIgICB1Y01lbW9yeVNpemU7ICAgICAgICAgICAgICAgICAgICAgLy8gQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zCisgIFVDSEFSICAgdWNSZXNlcnZlZFszXTsKIAotLyogY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsICovCi0JVVNIT1JUIHVzRU1SUzJWYWx1ZTsJLyogIEVNUlMyIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZSAqLwotCVVTSE9SVCB1c0VNUlMzVmFsdWU7CS8qICBFTVJTMyBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQlVQ0hBUiB1Y01lbW9yeVZlbmRlcklEOwkvKiAgUHJlZGVmaW5lZCwgSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZCAqLwotCVVDSEFSIHVjUmVmcmVzaFJhdGVGYWN0b3I7CS8qICBbMTowXT1SZWZyZXNoRmFjdG9yICgwMD04bXMsIDAxPTE2bXMsIDEwPTMybXMsMTE9NjRtcykgKi8KLQlVQ0hBUiB1Y0ZJRk9EZXB0aDsJLyogIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoICovCi0JVUNIQVIgdWNDRFJfQmFuZHdpZHRoOwkvKiAgWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGggKi8KLQlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxIGFzTWVtVGltaW5nWzVdOwkvKiBNZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sgKi8KLX0gQVRPTV9WUkFNX01PRFVMRV9WNTsKKy8vY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsCisgIFVTSE9SVAl1c0VNUlMyVmFsdWU7ICAgICAgCQkgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAJCSAgICAgICAgICAgIC8vIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVQ0hBUiAgIHVjTWVtb3J5VmVuZGVySUQ7ICAJCSAgICAgICAgICAgIC8vIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQKKyAgVUNIQVIJICB1Y1JlZnJlc2hSYXRlRmFjdG9yOyAgICAgICAgICAgICAgLy8gWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpCisgIFVDSEFSCSAgdWNGSUZPRGVwdGg7CQkJICAgICAgICAgICAgICAgIC8vIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoCisgIFVDSEFSICAgdWNDRFJfQmFuZHdpZHRoOwkJICAgLy8gWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGgKKyAgQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMSAgYXNNZW1UaW1pbmdbNV07Ly9NZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sKK31BVE9NX1ZSQU1fTU9EVUxFX1Y1OwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjTnVtT2ZWUkFNTW9kdWxlOwotCUFUT01fVlJBTV9NT0RVTEUgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07CS8qICBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7ICovCi19IEFUT01fVlJBTV9JTkZPX1YyOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjYKK3sKKyAgVUxPTkcJICB1bENoYW5uZWxNYXBDZmc7CSAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOiBDaGFubmVsIGNvbWJpbmF0aW9uCisgIFVTSE9SVCAgdXNNb2R1bGVTaXplOyAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgQVRPTV9WUkFNX01PRFVMRV9WNCwgbWFrZSBpdCBlYXN5IGZvciBWQklPUyB0byBsb29rIGZvciBuZXh0IGVudHJ5IG9mIFZSQU1fTU9EVUxFCisgIFVTSE9SVCAgdXNQcml2YXRlUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgIC8vIEJJT1MgaW50ZXJuYWwgcmVzZXJ2ZWQgc3BhY2UgdG8gb3B0aW1pemUgY29kZSBzaXplLCB1cGRhdGVkIGJ5IHRoZSBjb21waWxlciwgc2hvdWxkbid0IGJlIG1vZGlmaWVkIG1hbnVhbGx5ISEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUNfQVJCX1JBTUNGRyAoaW5jbHVkZXMgTk9PRkJBTkssTk9PRlJBTktTLE5PT0ZST1dTLE5PT0ZDT0xTKQorICBVU0hPUlQgIHVzUmVzZXJ2ZWQ7CisgIFVDSEFSICAgdWNFeHRNZW1vcnlJRDsgICAgCQkgICAgICAgICAgICAvLyBBbiBleHRlcm5hbCBpbmRpY2F0b3IgKGJ5IGhhcmRjb2RlLCBjYWxsYmFjayBvciBwaW4pIHRvIHRlbGwgd2hhdCBpcyB0aGUgY3VycmVudCBtZW1vcnkgbW9kdWxlCisgIFVDSEFSICAgdWNNZW1vcnlUeXBlOyAgICAgICAgICAgICAgICAgICAgIC8vIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7CisgIFVDSEFSICAgdWNDaGFubmVsTnVtOyAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBjaGFubmVscyBwcmVzZW50IGluIHRoaXMgbW9kdWxlIGNvbmZpZworICBVQ0hBUiAgIHVjQ2hhbm5lbFdpZHRoOyAgICAgICAgICAgICAgICAgICAvLyAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMKKwlVQ0hBUiAgIHVjRGVuc2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYKKwlVQ0hBUgkgIHVjRmxhZzsJCQkJCQkgICAgICAgICAgICAgICAgLy8gVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlCisJVUNIQVIJICB1Y01pc2M7CQkJCQkJICAgICAgICAgICAgICAgIC8vIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDgKKyAgVUNIQVIJCXVjVlJFRkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyCisgIFVDSEFSICAgdWNOUExfUlQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6TlBMIHJvdW5kIHRyaXAgZGVsYXksIHVzZWQgZm9yIGNhbGN1bGF0ZSBtZW1vcnkgdGltaW5nIHBhcmFtZXRlcnMKKyAgVUNIQVIJCXVjUHJlYW1ibGU7ICAgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XSBXcml0ZSBQcmVhbWJsZSwgWzM6MF0gUmVhZCBQcmVhbWJsZQorICBVQ0hBUiAgIHVjTWVtb3J5U2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG1lbW9yeSBzaXplIGluIHVuaXQgb2YgMTZNQiBmb3IgQ09ORklHX01FTVNJWkUgLSBiaXRbMjM6MF0gemVyb3MKKyAgVUNIQVIgICB1Y1Jlc2VydmVkWzNdOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjMgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01lbUFkanVzdFRibE9mZnNldDsJLyogIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IHZlbmRvciBzcGVjaWZpYyBNQyBhZGp1c3Qgc2V0dGluZyAqLwotCVVTSE9SVCB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkvKiAgICAgIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcgKi8KLQlVU0hPUlQgdXNSZXJzZXZlZDsKLQlVQ0hBUiBhVklEX1BpbnNTaGlmdFs5XTsJLyogIDggYml0IHN0cmFwIG1heGltdW0rdGVybWluYXRvciAqLwotCVVDSEFSIHVjTnVtT2ZWUkFNTW9kdWxlOwotCUFUT01fVlJBTV9NT0RVTEUgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07CS8qICBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7ICovCi0JQVRPTV9JTklUX1JFR19CTE9DSyBhc01lbVBhdGNoOwkvKiAgZm9yIGFsbG9jYXRpb24gKi8KLQkvKiAgICAgIEFUT01fSU5JVF9SRUdfQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWVtQWRqdXN0OyAqLwotfSBBVE9NX1ZSQU1fSU5GT19WMzsKKy8vY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsCisgIFVTSE9SVAl1c0VNUlMyVmFsdWU7ICAgICAgCQkgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAJCSAgICAgICAgICAgIC8vIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVQ0hBUiAgIHVjTWVtb3J5VmVuZGVySUQ7ICAJCSAgICAgICAgICAgIC8vIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQKKyAgVUNIQVIJICB1Y1JlZnJlc2hSYXRlRmFjdG9yOyAgICAgICAgICAgICAgLy8gWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpCisgIFVDSEFSCSAgdWNGSUZPRGVwdGg7CQkJICAgICAgICAgICAgICAgIC8vIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoCisgIFVDSEFSICAgdWNDRFJfQmFuZHdpZHRoOwkJICAgLy8gWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGgKKyAgQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMiAgYXNNZW1UaW1pbmdbNV07Ly9NZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sKK31BVE9NX1ZSQU1fTU9EVUxFX1Y2OworCisKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9JTkZPX1YyCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTnVtT2ZWUkFNTW9kdWxlOworICBBVE9NX1ZSQU1fTU9EVUxFICAgICAgICAgICBhVnJhbUluZm9bQVRPTV9NQVhfTlVNQkVSX09GX1ZSQU1fTU9EVUxFXTsgICAgICAvLyBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7Cit9QVRPTV9WUkFNX0lORk9fVjI7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fSU5GT19WMworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICBzSGVhZGVyOworCVVTSE9SVAkJCQkJCQkJCQkgdXNNZW1BZGp1c3RUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJCSAvLyBvZmZzZXQgb2YgQVRPTV9JTklUX1JFR19CTE9DSyBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSB2ZW5kb3Igc3BlY2lmaWMgTUMgYWRqdXN0IHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzTWVtQ2xrUGF0Y2hUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJIC8vCW9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzUmVyc2V2ZWQ7CisJVUNIQVIgICAgICAgICAgIAkgICAgICAgICBhVklEX1BpbnNTaGlmdFs5XTsJCQkJCQkJCQkJCQkJCQkgLy8gOCBiaXQgc3RyYXAgbWF4aW11bSt0ZXJtaW5hdG9yCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTnVtT2ZWUkFNTW9kdWxlOworICBBVE9NX1ZSQU1fTU9EVUxFCQkgICAgICAgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07ICAgICAgLy8ganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJIGFzTWVtUGF0Y2g7CQkJCQkJCQkJCQkJCQkJCQkJIC8vIGZvciBhbGxvY2F0aW9uCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAvLwlBVE9NX0lOSVRfUkVHX0JMT0NLCQkJCSBhTWVtQWRqdXN0OworfUFUT01fVlJBTV9JTkZPX1YzOwogCiAjZGVmaW5lCUFUT01fVlJBTV9JTkZPX0xBU1QJICAgICBBVE9NX1ZSQU1fSU5GT19WMwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01lbUFkanVzdFRibE9mZnNldDsJLyogIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IHZlbmRvciBzcGVjaWZpYyBNQyBhZGp1c3Qgc2V0dGluZyAqLwotCVVTSE9SVCB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkvKiAgICAgIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcgKi8KLQlVU0hPUlQgdXNSZXJzZXZlZDsKLQlVQ0hBUiB1Y01lbURRN18wQnl0ZVJlbWFwOwkvKiAgRFEgbGluZSBieXRlIHJlbWFwLCA9MDogTWVtb3J5IERhdGEgbGluZSBCWVRFMCwgPTE6IEJZVEUxLCA9MjogQllURTIsID0zOiBCWVRFMyAqLwotCVVMT05HIHVsTWVtRFE3XzBCaXRSZW1hcDsJLyogIGVhY2ggRFEgbGluZSAoIDd+MCkgdXNlIDNiaXRzLCBsaWtlOiBEUTA9Qml0WzI6MF0sIERRMTpbNTozXSwgLi4uIERRNzpbMjM6MjFdICovCi0JVUNIQVIgdWNSZXNlcnZkZVs0XTsKLQlVQ0hBUiB1Y051bU9mVlJBTU1vZHVsZTsKLQlBVE9NX1ZSQU1fTU9EVUxFX1Y0IGFWcmFtSW5mb1tBVE9NX01BWF9OVU1CRVJfT0ZfVlJBTV9NT0RVTEVdOwkvKiAganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOyAqLwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNZW1QYXRjaDsJLyogIGZvciBhbGxvY2F0aW9uICovCi0JLyogICAgICBBVE9NX0lOSVRfUkVHX0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1lbUFkanVzdDsgKi8KLX0gQVRPTV9WUkFNX0lORk9fVjQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjQKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKwlVU0hPUlQJCQkJCQkJCQkJIHVzTWVtQWRqdXN0VGJsT2Zmc2V0OwkJCQkJCQkJCQkJCQkgLy8gb2Zmc2V0IG9mIEFUT01fSU5JVF9SRUdfQkxPQ0sgc3RydWN0dXJlIGZvciBtZW1vcnkgdmVuZG9yIHNwZWNpZmljIE1DIGFkanVzdCBzZXR0aW5nCisJVVNIT1JUCQkJCQkJCQkJCSB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkJCQkJCQkJCQkJCSAvLwlvZmZzZXQgb2YgQVRPTV9JTklUX1JFR19CTE9DSyBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSBjbG9jayBzcGVjaWZpYyBNQyBzZXR0aW5nCisJVVNIT1JUCQkJCQkJCQkJCSB1c1JlcnNldmVkOworCVVDSEFSICAgICAgICAgICAJICAgICAgICAgdWNNZW1EUTdfMEJ5dGVSZW1hcDsJCQkJCQkJCQkJCQkJICAgLy8gRFEgbGluZSBieXRlIHJlbWFwLCA9MDogTWVtb3J5IERhdGEgbGluZSBCWVRFMCwgPTE6IEJZVEUxLCA9MjogQllURTIsID0zOiBCWVRFMworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE1lbURRN18wQml0UmVtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIERRIGxpbmUgKCA3fjApIHVzZSAzYml0cywgbGlrZTogRFEwPUJpdFsyOjBdLCBEUTE6WzU6M10sIC4uLiBEUTc6WzIzOjIxXQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmRlWzRdOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNOdW1PZlZSQU1Nb2R1bGU7CisgIEFUT01fVlJBTV9NT0RVTEVfVjQJCSAgICAgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07ICAgICAgLy8ganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJIGFzTWVtUGF0Y2g7CQkJCQkJCQkJCQkJCQkJCQkJIC8vIGZvciBhbGxvY2F0aW9uCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAvLwlBVE9NX0lOSVRfUkVHX0JMT0NLCQkJCSBhTWVtQWRqdXN0OworfUFUT01fVlJBTV9JTkZPX1Y0OwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIGFWSURfUGluc1NoaWZ0WzldOwkvKiA4IGJpdCBzdHJhcCBtYXhpbXVtK3Rlcm1pbmF0b3IgKi8KLX0gQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgIAkgICAgICAgICBhVklEX1BpbnNTaGlmdFs5XTsgICAvLzggYml0IHN0cmFwIG1heGltdW0rdGVybWluYXRvcgorfUFUT01fVlJBTV9HUElPX0RFVEVDVElPTl9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNUcmFpbmluZ0xvb3A7Ci0JVUNIQVIgdWNSZXNlcnZlZFszXTsKLQlBVE9NX0lOSVRfUkVHX0JMT0NLIGFzTWVtVHJhaW5pbmdTZXR0aW5nOwotfSBBVE9NX01FTU9SWV9UUkFJTklOR19JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBTV19JMkNfQ05UTF9EQVRBX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ29udHJvbDsKLQlVQ0hBUiB1Y0RhdGE7Ci0JVUNIQVIgdWNTYXR1czsKLQlVQ0hBUiB1Y1RlbXA7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTworeworCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisJVUNIQVIJCQkJCQkJCQkJCSB1Y1RyYWluaW5nTG9vcDsKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjUmVzZXJ2ZWRbM107CisJQVRPTV9JTklUX1JFR19CTE9DSwkJCQkgYXNNZW1UcmFpbmluZ1NldHRpbmc7Cit9QVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTzsKKworCit0eXBlZGVmIHN0cnVjdCBTV19JMkNfQ05UTF9EQVRBX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgICAgdWNDb250cm9sOworICBVQ0hBUiAgICB1Y0RhdGE7IAorICBVQ0hBUiAgICB1Y1NhdHVzOyAKKyAgVUNIQVIgICAgdWNUZW1wOyAKIH0gU1dfSTJDX0NOVExfREFUQV9QQVJBTUVURVJTOwogCiAjZGVmaW5lIFNXX0kyQ19DTlRMX0RBVEFfUFNfQUxMT0NBVElPTiAgU1dfSTJDX0NOVExfREFUQV9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9TV19JMkNfSU9fREFUQV9QQVJBTUVURVJTIHsKLQlVU0hPUlQgR1BJT19JbmZvOwotCVVDSEFSIHVjQWN0OwotCVVDSEFSIHVjRGF0YTsKLX0gU1dfSTJDX0lPX0RBVEFfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9TV19JMkNfSU9fREFUQV9QQVJBTUVURVJTCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBVU0hPUlQgICBHUElPX0luZm87CisgIFVDSEFSICAgIHVjQWN0OyAKKyAgVUNIQVIgICAgdWNEYXRhOyAKKyB9IFNXX0kyQ19JT19EQVRBX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgU1dfSTJDX0lPX0RBVEFfUFNfQUxMT0NBVElPTiAgU1dfSTJDX0lPX0RBVEFfUEFSQU1FVEVSUwogCkBAIC00MDg3LDEyNyArNDk5OCwxMzYgQEAKICNkZWZpbmUgU1dfSTJDX0NOVExfQ0xPU0UgICAgIDUKICNkZWZpbmUgU1dfSTJDX0NOVExfV1JJVEUxQklUIDYKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09VkVTQSBkZWZpbml0aW9uIFBvcnRpb249PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVZFU0EgZGVmaW5pdGlvbiBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogI2RlZmluZSBWRVNBX09FTV9QUk9EVUNUX1JFVgkJCSAgICAgICAgICAgICcwMS4wMCcKLSNkZWZpbmUgVkVTQV9NT0RFX0FUVFJJQlVURV9NT0RFX1NVUFBPUlQJICAgICAweEJCCS8qIHJlZmVyIHRvIFZCRSBzcGVjIHAuMzIsIG5vIFRUWSBzdXBwb3J0ICovCisjZGVmaW5lIFZFU0FfTU9ERV9BVFRSSUJVVEVfTU9ERV9TVVBQT1JUCSAgICAgMHhCQgkvL3JlZmVyIHRvIFZCRSBzcGVjIHAuMzIsIG5vIFRUWSBzdXBwb3J0CiAjZGVmaW5lIFZFU0FfTU9ERV9XSU5fQVRUUklCVVRFCQkJCQkJICAgICA3CiAjZGVmaW5lIFZFU0FfV0lOX1NJWkUJCQkJCQkJCQkJCSAgICAgNjQKIAotdHlwZWRlZiBzdHJ1Y3QgX1BUUl8zMl9CSVRfU1RSVUNUVVJFIHsKLQlVU0hPUlQgT2Zmc2V0MTY7Ci0JVVNIT1JUIFNlZ21lbnQxNjsKK3R5cGVkZWYgc3RydWN0IF9QVFJfMzJfQklUX1NUUlVDVFVSRQoreworCVVTSE9SVAlPZmZzZXQxNjsJCQkKKwlVU0hPUlQJU2VnbWVudDE2OwkJCQkKIH0gUFRSXzMyX0JJVF9TVFJVQ1RVUkU7CiAKLXR5cGVkZWYgdW5pb24gX1BUUl8zMl9CSVRfVU5JT04gewotCVBUUl8zMl9CSVRfU1RSVUNUVVJFIFNlZ21lbnRPZmZzZXQ7Ci0JVUxPTkcgUHRyMzJfQml0OwordHlwZWRlZiB1bmlvbiBfUFRSXzMyX0JJVF9VTklPTgoreworCVBUUl8zMl9CSVRfU1RSVUNUVVJFCVNlZ21lbnRPZmZzZXQ7CisJVUxPTkcJCQkJCSAgICAgICAgUHRyMzJfQml0OwogfSBQVFJfMzJfQklUX1VOSU9OOwogCi10eXBlZGVmIHN0cnVjdCBfVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRSB7Ci0JVUNIQVIgVmJlU2lnbmF0dXJlWzRdOwotCVVTSE9SVCBWYmVWZXJzaW9uOwotCVBUUl8zMl9CSVRfVU5JT04gT2VtU3RyaW5nUHRyOwotCVVDSEFSIENhcGFiaWxpdGllc1s0XTsKLQlQVFJfMzJfQklUX1VOSU9OIFZpZGVvTW9kZVB0cjsKLQlVU0hPUlQgVG90YWxNZW1vcnk7Cit0eXBlZGVmIHN0cnVjdCBfVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRQoreworCVVDSEFSCQkJCSAgICAgIFZiZVNpZ25hdHVyZVs0XTsKKwlVU0hPUlQJCQkJICAgIFZiZVZlcnNpb247CisJUFRSXzMyX0JJVF9VTklPTglPZW1TdHJpbmdQdHI7CisJVUNIQVIJCQkJICAgICAgQ2FwYWJpbGl0aWVzWzRdOworCVBUUl8zMl9CSVRfVU5JT04JVmlkZW9Nb2RlUHRyOworCVVTSE9SVAkJCQkgICAgVG90YWxNZW1vcnk7CiB9IFZCRV8xXzJfSU5GT19CTE9DS19VUERBVEFCTEU7CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfMl8wX0lORk9fQkxPQ0tfVVBEQVRBQkxFIHsKLQlWQkVfMV8yX0lORk9fQkxPQ0tfVVBEQVRBQkxFIENvbW1vbkJsb2NrOwotCVVTSE9SVCBPZW1Tb2Z0UmV2OwotCVBUUl8zMl9CSVRfVU5JT04gT2VtVmVuZG9yTmFtZVB0cjsKLQlQVFJfMzJfQklUX1VOSU9OIE9lbVByb2R1Y3ROYW1lUHRyOwotCVBUUl8zMl9CSVRfVU5JT04gT2VtUHJvZHVjdFJldlB0cjsKKwordHlwZWRlZiBzdHJ1Y3QgX1ZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEUKK3sKKwlWQkVfMV8yX0lORk9fQkxPQ0tfVVBEQVRBQkxFCUNvbW1vbkJsb2NrOworCVVTSE9SVAkJCQkJCQkgICAgT2VtU29mdFJldjsKKwlQVFJfMzJfQklUX1VOSU9OCQkJCU9lbVZlbmRvck5hbWVQdHI7CisJUFRSXzMyX0JJVF9VTklPTgkJCQlPZW1Qcm9kdWN0TmFtZVB0cjsKKwlQVFJfMzJfQklUX1VOSU9OCQkJCU9lbVByb2R1Y3RSZXZQdHI7CiB9IFZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEU7CiAKLXR5cGVkZWYgdW5pb24gX1ZCRV9WRVJTSU9OX1VOSU9OIHsKLQlWQkVfMl8wX0lORk9fQkxPQ0tfVVBEQVRBQkxFIFZCRV8yXzBfSW5mb0Jsb2NrOwotCVZCRV8xXzJfSU5GT19CTE9DS19VUERBVEFCTEUgVkJFXzFfMl9JbmZvQmxvY2s7Cit0eXBlZGVmIHVuaW9uIF9WQkVfVkVSU0lPTl9VTklPTgoreworCVZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEUJVkJFXzJfMF9JbmZvQmxvY2s7CisJVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRQlWQkVfMV8yX0luZm9CbG9jazsKIH0gVkJFX1ZFUlNJT05fVU5JT047CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfSU5GT19CTE9DSyB7Ci0JVkJFX1ZFUlNJT05fVU5JT04gVXBkYXRhYmxlVkJFX0luZm87Ci0JVUNIQVIgUmVzZXJ2ZWRbMjIyXTsKLQlVQ0hBUiBPZW1EYXRhWzI1Nl07Cit0eXBlZGVmIHN0cnVjdCBfVkJFX0lORk9fQkxPQ0sKK3sKKwlWQkVfVkVSU0lPTl9VTklPTgkJCVVwZGF0YWJsZVZCRV9JbmZvOworCVVDSEFSCQkJCQkJICAgICAgUmVzZXJ2ZWRbMjIyXTsKKwlVQ0hBUgkJCQkJCSAgICAgIE9lbURhdGFbMjU2XTsKIH0gVkJFX0lORk9fQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfRlBfSU5GTyB7Ci0JVVNIT1JUIEhTaXplOwotCVVTSE9SVCBWU2l6ZTsKLQlVU0hPUlQgRlBUeXBlOwotCVVDSEFSIFJlZEJQUDsKLQlVQ0hBUiBHcmVlbkJQUDsKLQlVQ0hBUiBCbHVlQlBQOwotCVVDSEFSIFJlc2VydmVkQlBQOwotCVVMT05HIFJzdmRPZmZTY3JuTWVtU2l6ZTsKLQlVTE9ORyBSc3ZkT2ZmU2Nybk1FbVB0cjsKLQlVQ0hBUiBSZXNlcnZlZFsxNF07Cit0eXBlZGVmIHN0cnVjdCBfVkJFX0ZQX0lORk8KK3sKKyAgVVNIT1JUCUhTaXplOworCVVTSE9SVAlWU2l6ZTsKKwlVU0hPUlQJRlBUeXBlOworCVVDSEFSCQlSZWRCUFA7CisJVUNIQVIJCUdyZWVuQlBQOworCVVDSEFSCQlCbHVlQlBQOworCVVDSEFSCQlSZXNlcnZlZEJQUDsKKwlVTE9ORwkJUnN2ZE9mZlNjcm5NZW1TaXplOworCVVMT05HCQlSc3ZkT2ZmU2Nybk1FbVB0cjsKKwlVQ0hBUgkJUmVzZXJ2ZWRbMTRdOwogfSBWQkVfRlBfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX1ZFU0FfTU9ERV9JTkZPX0JMT0NLIHsKLS8qICBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIGFsbCBWQkUgcmV2aXNpb25zICovCi0JVVNIT1JUIE1vZGVBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IG1vZGUgYXR0cmlidXRlcyAqLwotCVVDSEFSIFdpbkFBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgd2luZG93IEEgYXR0cmlidXRlcyAqLwotCVVDSEFSIFdpbkJBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgd2luZG93IEIgYXR0cmlidXRlcyAqLwotCVVTSE9SVCBXaW5HcmFudWxhcml0eTsJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBncmFudWxhcml0eSAqLwotCVVTSE9SVCBXaW5TaXplOwkJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBzaXplICovCi0JVVNIT1JUIFdpbkFTZWdtZW50OwkvKiAgICAgICAgICAgICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgd2luZG93IEEgc3RhcnQgc2VnbWVudCAqLwotCVVTSE9SVCBXaW5CU2VnbWVudDsJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBCIHN0YXJ0IHNlZ21lbnQgKi8KLQlVTE9ORyBXaW5GdW5jUHRyOwkvKiAgICAgICAgICAgICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgcmVhbCBtb2RlIHBvaW50ZXIgdG8gd2luZG93IGZ1bmN0aW9uICovCi0JVVNIT1JUIEJ5dGVzUGVyU2NhbkxpbmU7CS8qICAgICAgICAgICAgICAgICAgICBkdyAgICAgID8gICAgICAgOyBieXRlcyBwZXIgc2NhbiBsaW5lICovCit0eXBlZGVmIHN0cnVjdCBfVkVTQV9NT0RFX0lORk9fQkxPQ0sKK3sKKy8vIE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgYWxsIFZCRSByZXZpc2lvbnMKKyAgVVNIT1JUICAgIE1vZGVBdHRyaWJ1dGVzOyAgLy8JCQlkdwk/CTsgbW9kZSBhdHRyaWJ1dGVzCisJVUNIQVIgICAgIFdpbkFBdHRyaWJ1dGVzOyAgLy8JCQlkYgk/CTsgd2luZG93IEEgYXR0cmlidXRlcworCVVDSEFSICAgICBXaW5CQXR0cmlidXRlczsgIC8vCQkJZGIJPwk7IHdpbmRvdyBCIGF0dHJpYnV0ZXMKKwlVU0hPUlQgICAgV2luR3JhbnVsYXJpdHk7ICAvLwkJCWR3CT8JOyB3aW5kb3cgZ3JhbnVsYXJpdHkKKwlVU0hPUlQgICAgV2luU2l6ZTsgICAgICAgICAvLwkJCWR3CT8JOyB3aW5kb3cgc2l6ZQorCVVTSE9SVCAgICBXaW5BU2VnbWVudDsgICAgIC8vCQkJZHcJPwk7IHdpbmRvdyBBIHN0YXJ0IHNlZ21lbnQKKwlVU0hPUlQgICAgV2luQlNlZ21lbnQ7ICAgICAvLwkJCWR3CT8JOyB3aW5kb3cgQiBzdGFydCBzZWdtZW50CisJVUxPTkcgICAgIFdpbkZ1bmNQdHI7ICAgICAgLy8JCQlkZAk/CTsgcmVhbCBtb2RlIHBvaW50ZXIgdG8gd2luZG93IGZ1bmN0aW9uCisJVVNIT1JUICAgIEJ5dGVzUGVyU2NhbkxpbmU7Ly8JCQlkdwk/CTsgYnl0ZXMgcGVyIHNjYW4gbGluZQogCi0vKiA7IE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgVkJFIDEuMiBhbmQgYWJvdmUgKi8KLQlVU0hPUlQgWFJlc29sdXRpb247CS8qICAgICAgICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycyAqLwotCVVTSE9SVCBZUmVzb2x1dGlvbjsJLyogICAgICAgICAgICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycyAqLwotCVVDSEFSIFhDaGFyU2l6ZTsJLyogICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgY2hhcmFjdGVyIGNlbGwgd2lkdGggaW4gcGl4ZWxzICovCi0JVUNIQVIgWUNoYXJTaXplOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBjaGFyYWN0ZXIgY2VsbCBoZWlnaHQgaW4gcGl4ZWxzICovCi0JVUNIQVIgTnVtYmVyT2ZQbGFuZXM7CS8qICAgICAgICAgICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBtZW1vcnkgcGxhbmVzICovCi0JVUNIQVIgQml0c1BlclBpeGVsOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXRzIHBlciBwaXhlbCAqLwotCVVDSEFSIE51bWJlck9mQmFua3M7CS8qICAgICAgICAgICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBiYW5rcyAqLwotCVVDSEFSIE1lbW9yeU1vZGVsOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBtZW1vcnkgbW9kZWwgdHlwZSAqLwotCVVDSEFSIEJhbmtTaXplOwkJLyogICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYmFuayBzaXplIGluIEtCICovCi0JVUNIQVIgTnVtYmVyT2ZJbWFnZVBhZ2VzOwkvKiAgICAgICAgICAgIGRiICAgID8gICAgICAgOyBudW1iZXIgb2YgaW1hZ2VzICovCi0JVUNIQVIgUmVzZXJ2ZWRGb3JQYWdlRnVuY3Rpb247CS8qIGRiICAxICAgICAgIDsgcmVzZXJ2ZWQgZm9yIHBhZ2UgZnVuY3Rpb24gKi8KKy8vOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAxLjIgYW5kIGFib3ZlCisgIFVTSE9SVCAgICBYUmVzb2x1dGlvbjsgICAgICAvLwkJCWR3CT8JOyBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gcGl4ZWxzIG9yIGNoYXJhY3RlcnMKKwlVU0hPUlQgICAgWVJlc29sdXRpb247ICAgICAgLy8JCQlkdwk/CTsgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycworCVVDSEFSICAgICBYQ2hhclNpemU7ICAgICAgICAvLwkJCWRiCT8JOyBjaGFyYWN0ZXIgY2VsbCB3aWR0aCBpbiBwaXhlbHMKKwlVQ0hBUiAgICAgWUNoYXJTaXplOyAgICAgICAgLy8JCQlkYgk/CTsgY2hhcmFjdGVyIGNlbGwgaGVpZ2h0IGluIHBpeGVscworCVVDSEFSICAgICBOdW1iZXJPZlBsYW5lczsgICAvLwkJCWRiCT8JOyBudW1iZXIgb2YgbWVtb3J5IHBsYW5lcworCVVDSEFSICAgICBCaXRzUGVyUGl4ZWw7ICAgICAvLwkJCWRiCT8JOyBiaXRzIHBlciBwaXhlbAorCVVDSEFSICAgICBOdW1iZXJPZkJhbmtzOyAgICAvLwkJCWRiCT8JOyBudW1iZXIgb2YgYmFua3MKKwlVQ0hBUiAgICAgTWVtb3J5TW9kZWw7ICAgICAgLy8JCQlkYgk/CTsgbWVtb3J5IG1vZGVsIHR5cGUKKwlVQ0hBUiAgICAgQmFua1NpemU7ICAgICAgICAgLy8JCQlkYgk/CTsgYmFuayBzaXplIGluIEtCCisJVUNIQVIgICAgIE51bWJlck9mSW1hZ2VQYWdlczsvLwkJICBkYgk/CTsgbnVtYmVyIG9mIGltYWdlcworCVVDSEFSICAgICBSZXNlcnZlZEZvclBhZ2VGdW5jdGlvbjsvL2RiCTEJOyByZXNlcnZlZCBmb3IgcGFnZSBmdW5jdGlvbgogCi0vKiA7IERpcmVjdCBDb2xvciBmaWVsZHMocmVxdWlyZWQgZm9yIGRpcmVjdC82IGFuZCBZVVYvNyBtZW1vcnkgbW9kZWxzKSAqLwotCVVDSEFSIFJlZE1hc2tTaXplOwkvKiAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVkIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIFJlZEZpZWxkUG9zaXRpb247CS8qICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlZCBtYXNrICovCi0JVUNIQVIgR3JlZW5NYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGdyZWVuIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIEdyZWVuRmllbGRQb3NpdGlvbjsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayAqLwotCVVDSEFSIEJsdWVNYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayBpbiBiaXRzICovCi0JVUNIQVIgQmx1ZUZpZWxkUG9zaXRpb247CS8qICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIGJsdWUgbWFzayAqLwotCVVDSEFSIFJzdmRNYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIHJlc2VydmVkIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIFJzdmRGaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiByZXNlcnZlZCBtYXNrICovCi0JVUNIQVIgRGlyZWN0Q29sb3JNb2RlSW5mbzsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGRpcmVjdCBjb2xvciBtb2RlIGF0dHJpYnV0ZXMgKi8KKy8vOyBEaXJlY3QgQ29sb3IgZmllbGRzKHJlcXVpcmVkIGZvciBkaXJlY3QvNiBhbmQgWVVWLzcgbWVtb3J5IG1vZGVscykKKwlVQ0hBUgkJCVJlZE1hc2tTaXplOyAgICAgICAgLy8JCWRiCT8JOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZWQgbWFzayBpbiBiaXRzCisJVUNIQVIJCQlSZWRGaWVsZFBvc2l0aW9uOyAgIC8vCQlkYgk/CTsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiByZWQgbWFzaworCVVDSEFSCQkJR3JlZW5NYXNrU2l6ZTsgICAgICAvLwkJZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGdyZWVuIG1hc2sgaW4gYml0cworCVVDSEFSCQkJR3JlZW5GaWVsZFBvc2l0aW9uOyAvLwkJZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzaworCVVDSEFSCQkJQmx1ZU1hc2tTaXplOyAgICAgICAvLwkJZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayBpbiBiaXRzCisJVUNIQVIJCQlCbHVlRmllbGRQb3NpdGlvbjsgIC8vCQlkYgk/CTsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiBibHVlIG1hc2sKKwlVQ0hBUgkJCVJzdmRNYXNrU2l6ZTsgICAgICAgLy8JCWRiCT8JOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZXNlcnZlZCBtYXNrIGluIGJpdHMKKwlVQ0hBUgkJCVJzdmRGaWVsZFBvc2l0aW9uOyAgLy8JCWRiCT8JOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlc2VydmVkIG1hc2sKKwlVQ0hBUgkJCURpcmVjdENvbG9yTW9kZUluZm87Ly8JCWRiCT8JOyBkaXJlY3QgY29sb3IgbW9kZSBhdHRyaWJ1dGVzCiAKLS8qIDsgTWFuZGF0b3J5IGluZm9ybWF0aW9uIGZvciBWQkUgMi4wIGFuZCBhYm92ZSAqLwotCVVMT05HIFBoeXNCYXNlUHRyOwkvKiAgICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZmxhdCBtZW1vcnkgZnJhbWUgYnVmZmVyICovCi0JVUxPTkcgUmVzZXJ2ZWRfMTsJLyogICAgICAgICAgIGRkICAgICAgMCAgICAgICA7IHJlc2VydmVkIC0gYWx3YXlzIHNldCB0byAwICovCi0JVVNIT1JUIFJlc2VydmVkXzI7CS8qICAgICBkdyAgICAwICAgICAgIDsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAgKi8KKy8vOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAyLjAgYW5kIGFib3ZlCisJVUxPTkcJCQlQaHlzQmFzZVB0cjsgICAgICAgIC8vCQlkZAk/CTsgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZmxhdCBtZW1vcnkgZnJhbWUgYnVmZmVyCisJVUxPTkcJCQlSZXNlcnZlZF8xOyAgICAgICAgIC8vCQlkZAkwCTsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAKKwlVU0hPUlQJCVJlc2VydmVkXzI7ICAgICAgICAgLy8JICBkdwkwCTsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAKIAotLyogOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAzLjAgYW5kIGFib3ZlICovCi0JVVNIT1JUIExpbkJ5dGVzUGVyU2NhbkxpbmU7CS8qICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgYnl0ZXMgcGVyIHNjYW4gbGluZSBmb3IgbGluZWFyIG1vZGVzICovCi0JVUNIQVIgQm5rTnVtYmVyT2ZJbWFnZVBhZ2VzOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBpbWFnZXMgZm9yIGJhbmtlZCBtb2RlcyAqLwotCVVDSEFSIExpbk51bWJlck9mSW1hZ1BhZ2VzOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBpbWFnZXMgZm9yIGxpbmVhciBtb2RlcyAqLwotCVVDSEFSIExpblJlZE1hc2tTaXplOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIHJlZCBtYXNrKGxpbmVhciBtb2RlcykgKi8KLQlVQ0hBUiBMaW5SZWRGaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgcmVkIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVDSEFSIExpbkdyZWVuTWFza1NpemU7CS8qICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluR3JlZW5GaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluQmx1ZU1hc2tTaXplOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluQmx1ZUZpZWxkUG9zaXRpb247CS8qICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiBibHVlIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVDSEFSIExpblJzdmRNYXNrU2l6ZTsJLyogICAgICAgICBkYiAgICAgID8gICAgICAgOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZXNlcnZlZCBtYXNrKGxpbmVhciBtb2RlcykgKi8KLQlVQ0hBUiBMaW5Sc3ZkRmllbGRQb3NpdGlvbjsJLyogICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlc2VydmVkIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVMT05HIE1heFBpeGVsQ2xvY2s7CS8qICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgbWF4aW11bSBwaXhlbCBjbG9jayhpbiBIeikgZm9yIGdyYXBoaWNzIG1vZGUgKi8KLQlVQ0hBUiBSZXNlcnZlZDsJCS8qICAgICAgICAgZGIgICAgICAxOTAgZHVwICgwKSAqLworLy87IE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgVkJFIDMuMCBhbmQgYWJvdmUKKwlVU0hPUlQJCUxpbkJ5dGVzUGVyU2NhbkxpbmU7ICAvLwlkdwk/CTsgYnl0ZXMgcGVyIHNjYW4gbGluZSBmb3IgbGluZWFyIG1vZGVzCisJVUNIQVIJCQlCbmtOdW1iZXJPZkltYWdlUGFnZXM7Ly8JZGIJPwk7IG51bWJlciBvZiBpbWFnZXMgZm9yIGJhbmtlZCBtb2RlcworCVVDSEFSCQkJTGluTnVtYmVyT2ZJbWFnUGFnZXM7IC8vCWRiCT8JOyBudW1iZXIgb2YgaW1hZ2VzIGZvciBsaW5lYXIgbW9kZXMKKwlVQ0hBUgkJCUxpblJlZE1hc2tTaXplOyAgICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVkIG1hc2sobGluZWFyIG1vZGVzKQorCVVDSEFSCQkJTGluUmVkRmllbGRQb3NpdGlvbjsgIC8vCWRiCT8JOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlZCBtYXNrKGxpbmVhciBtb2RlcykKKwlVQ0hBUgkJCUxpbkdyZWVuTWFza1NpemU7ICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5HcmVlbkZpZWxkUG9zaXRpb247Ly8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5CbHVlTWFza1NpemU7ICAgICAgLy8JZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5CbHVlRmllbGRQb3NpdGlvbjsgLy8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgYmx1ZSBtYXNrKGxpbmVhciBtb2RlcykKKwlVQ0hBUgkJCUxpblJzdmRNYXNrU2l6ZTsgICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVzZXJ2ZWQgbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5Sc3ZkRmllbGRQb3NpdGlvbjsgLy8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgcmVzZXJ2ZWQgbWFzayhsaW5lYXIgbW9kZXMpCisJVUxPTkcJCQlNYXhQaXhlbENsb2NrOyAgICAgICAgLy8JZGQJPwk7IG1heGltdW0gcGl4ZWwgY2xvY2soaW4gSHopIGZvciBncmFwaGljcyBtb2RlCisJVUNIQVIJCQlSZXNlcnZlZDsgICAgICAgICAgICAgLy8JZGIJMTkwIGR1cCAoMCkKIH0gVkVTQV9NT0RFX0lORk9fQkxPQ0s7CiAKLS8qICBCSU9TIGZ1bmN0aW9uIENBTExTICovCi0jZGVmaW5lIEFUT01fQklPU19FWFRFTkRFRF9GVU5DVElPTl9DT0RFICAgICAgICAweEEwCS8qICBBVEkgRXh0ZW5kZWQgRnVuY3Rpb24gY29kZSAqLworLy8gQklPUyBmdW5jdGlvbiBDQUxMUworI2RlZmluZSBBVE9NX0JJT1NfRVhURU5ERURfRlVOQ1RJT05fQ09ERSAgICAgICAgMHhBMAkgICAgICAgIC8vIEFUSSBFeHRlbmRlZCBGdW5jdGlvbiBjb2RlCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9DT1BfTU9ERSAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTEgICAgICAgICAweDA0CiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTIgICAgICAgICAweDA1CiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTMgICAgICAgICAweDA2Ci0jZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9HRVRfRERDICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9HRVRfRERDICAgICAgICAgICAgICAweDBCICAgCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9BU0lDX0RTVEFURSAgICAgICAgICAweDBFCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9ERUJVR19QTEFZICAgICAgICAgICAweDBGCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TVFZfU1REICAgICAgICAgICAgICAweDE2CkBAIC00MjE3LDEwMCArNTEzNywxMzUgQEAKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX1BBTkVMX0NPTlRST0wgICAgICAgIDB4ODIKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX09MRF9ERVZJQ0VfREVUICAgICAgIDB4ODMKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX09MRF9ERVZJQ0VfU1dJVENIICAgIDB4ODQKLSNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX0hXX0lDT04gICAgICAgICAgICAgIDB4OEEKKyNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX0hXX0lDT04gICAgICAgICAgICAgIDB4OEEgCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TRVRfQ01PUyAgICAgICAgICAgICAweDhCCi0jZGVmaW5lIFNVQl9GVU5DVElPTl9VUERBVEVfRElTUExBWV9JTkZPICAgICAgICAweDgwMDAJLyogIFN1YiBmdW5jdGlvbiA4MCAqLwotI2RlZmluZSBTVUJfRlVOQ1RJT05fVVBEQVRFX0VYUEFOU0lPTl9JTkZPICAgICAgMHg4MTAwCS8qICBTdWIgZnVuY3Rpb24gODAgKi8KKyNkZWZpbmUgU1VCX0ZVTkNUSU9OX1VQREFURV9ESVNQTEFZX0lORk8gICAgICAgIDB4ODAwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODAKKyNkZWZpbmUgU1VCX0ZVTkNUSU9OX1VQREFURV9FWFBBTlNJT05fSU5GTyAgICAgIDB4ODEwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODAKIAogI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fRElTUExBWV9JTkZPICAgICAgICAgMHg4RAogI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fREVWSUNFX09OX09GRiAgICAgICAgMHg4RQotI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fVklERU9fU1RBVEUgICAgICAgICAgMHg4RgotI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9HRVRfQ1JJVElDQUxfU1RBVEUgICAgMHgwMzAwCS8qICBTdWIgZnVuY3Rpb24gMDMgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0xJRFNUQVRFICAgICAgICAgIDB4MDcwMAkvKiAgU3ViIGZ1bmN0aW9uIDcgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fVEhFUk1BTF9TVEFURV9OT1RJQ0UgIDB4MTQwMAkvKiAgTm90aWZ5IGNhbGxlciB0aGUgY3VycmVudCB0aGVybWFsIHN0YXRlICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0NSSVRJQ0FMX1NUQVRFX05PVElDRSAweDgzMDAJLyogIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgY3JpdGljYWwgc3RhdGUgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fU0VUX0xJRFNUQVRFICAgICAgICAgIDB4ODUwMAkvKiAgU3ViIGZ1bmN0aW9uIDg1ICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9SRVFfRElTUExBWV9GUk9NX1NCSU9TX01PREUgMHg4OTAwCS8qICBTdWIgZnVuY3Rpb24gODkgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fSU5GT1JNX0FEQ19TVVBQT1JUICAgIDB4OTQwMAkvKiAgTm90aWZ5IGNhbGxlciB0aGF0IEFEQyBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX1ZJREVPX1NUQVRFICAgICAgICAgIDB4OEYgCisjZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9DUklUSUNBTF9TVEFURSAgICAweDAzMDAgICAgICAgICAgLy8gU3ViIGZ1bmN0aW9uIDAzICAKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0xJRFNUQVRFICAgICAgICAgIDB4MDcwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gNworI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9USEVSTUFMX1NUQVRFX05PVElDRSAgMHgxNDAwICAgICAgICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgdGhlcm1hbCBzdGF0ZQorI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9DUklUSUNBTF9TVEFURV9OT1RJQ0UgMHg4MzAwICAgICAgICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgY3JpdGljYWwgc3RhdGUKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fU0VUX0xJRFNUQVRFICAgICAgICAgIDB4ODUwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODUKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX1JFUV9ESVNQTEFZX0ZST01fU0JJT1NfTU9ERSAweDg5MDAvLyBTdWIgZnVuY3Rpb24gODkKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fSU5GT1JNX0FEQ19TVVBQT1JUICAgIDB4OTQwMCAgICAgICAgICAvLyBOb3RpZnkgY2FsbGVyIHRoYXQgQURDIGlzIHN1cHBvcnRlZAorICAgICAKIAotI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fVkVTQV9EUE1TICAgICAgICAgICAgMHg0RjEwCS8qICBTZXQgRFBNUyAqLwotI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9TRVRfRFBNUyAgICAgICAgICAgICAgMHgwMDAxCS8qICBCTDogU3ViIGZ1bmN0aW9uIDAxICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9EUE1TICAgICAgICAgICAgICAweDAwMDIJLyogIEJMOiBTdWIgZnVuY3Rpb24gMDIgKi8KLSNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX09OICAgICAgICAgICAgIDB4MDAwMAkvKiAgQkggUGFyYW1ldGVyIGZvciBEUE1TIE9OLiAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1RBTkRCWSAgICAgICAgMHgwMTAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1RBTkRCWSAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1VTUEVORCAgICAgICAgMHgwMjAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1VTUEVORCAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT0ZGICAgICAgICAgICAgMHgwNDAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgT0ZGICovCi0jZGVmaW5lIEFUT01fUEFSQU1FVEVSX1ZFU0FfRFBNU19SRURVQ0VfT04gICAgICAweDA4MDAJLyogIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBSRURVQ0UgT04gKE5PVCBTVVBQT1JURUQpICovCisjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9WRVNBX0RQTVMgICAgICAgICAgICAweDRGMTAgICAgICAgICAgLy8gU2V0IERQTVMgCisjZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX1NFVF9EUE1TICAgICAgICAgICAgICAweDAwMDEgICAgICAgICAgLy8gQkw6IFN1YiBmdW5jdGlvbiAwMSAKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0RQTVMgICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgICAvLyBCTDogU3ViIGZ1bmN0aW9uIDAyIAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT04gICAgICAgICAgICAgMHgwMDAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBPTi4gIAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1RBTkRCWSAgICAgICAgMHgwMTAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBTVEFOREJZICAKKyNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX1NVU1BFTkQgICAgICAgIDB4MDIwMCAgICAgICAgICAvLyBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1VTUEVORAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT0ZGICAgICAgICAgICAgMHgwNDAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBPRkYKKyNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX1JFRFVDRV9PTiAgICAgIDB4MDgwMCAgICAgICAgICAvLyBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgUkVEVUNFIE9OIChOT1QgU1VQUE9SVEVEKQogCiAjZGVmaW5lIEFUT01fQklPU19SRVRVUk5fQ09ERV9NQVNLICAgICAgICAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX0JJT1NfUkVHX0hJR0hfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMEwKICNkZWZpbmUgQVRPTV9CSU9TX1JFR19MT1dfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZMCiAKLS8qICBzdHJ1Y3R1cmUgdXNlZCBmb3IgVkJJT1Mgb25seSAqLworLy8gc3RydWN0dXJlIHVzZWQgZm9yIFZCSU9TIG9ubHkKIAotLyogRGlzcE91dEluZm9UYWJsZSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FTSUNfVFJBTlNNSVRURVJfSU5GTyB7CisvL0Rpc3BPdXRJbmZvVGFibGUKK3R5cGVkZWYgc3RydWN0IF9BU0lDX1RSQU5TTUlUVEVSX0lORk8KK3sKIAlVU0hPUlQgdXNUcmFuc21pdHRlck9iaklkOwogCVVTSE9SVCB1c1N1cHBvcnREZXZpY2U7Ci0JVUNIQVIgdWNUcmFuc21pdHRlckNtZFRibElkOwotCVVDSEFSIHVjQ29uZmlnOwotCVVDSEFSIHVjRW5jb2RlcklEOwkvKiBhdmFpbGFibGUgMXN0IGVuY29kZXIgKCBkZWZhdWx0ICkgKi8KLQlVQ0hBUiB1Y09wdGlvbkVuY29kZXJJRDsJLyogYXZhaWxhYmxlIDJuZCBlbmNvZGVyICggb3B0aW9uYWwgKSAqLwotCVVDSEFSIHVjMm5kRW5jb2RlcklEOwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci19IEFTSUNfVFJBTlNNSVRURVJfSU5GTzsKKyAgVUNIQVIgIHVjVHJhbnNtaXR0ZXJDbWRUYmxJZDsKKwlVQ0hBUiAgdWNDb25maWc7CisJVUNIQVIgIHVjRW5jb2RlcklEOwkJCQkJIC8vYXZhaWxhYmxlIDFzdCBlbmNvZGVyICggZGVmYXVsdCApCisJVUNIQVIgIHVjT3B0aW9uRW5jb2RlcklEOyAgICAvL2F2YWlsYWJsZSAybmQgZW5jb2RlciAoIG9wdGlvbmFsICkKKwlVQ0hBUiAgdWMybmRFbmNvZGVySUQ7CisJVUNIQVIgIHVjUmVzZXJ2ZWQ7Cit9QVNJQ19UUkFOU01JVFRFUl9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVNJQ19FTkNPREVSX0lORk8gewordHlwZWRlZiBzdHJ1Y3QgX0FTSUNfRU5DT0RFUl9JTkZPCit7CiAJVUNIQVIgdWNFbmNvZGVySUQ7CiAJVUNIQVIgdWNFbmNvZGVyQ29uZmlnOwotCVVTSE9SVCB1c0VuY29kZXJDbWRUYmxJZDsKLX0gQVNJQ19FTkNPREVSX0lORk87CisgIFVTSE9SVCB1c0VuY29kZXJDbWRUYmxJZDsKK31BU0lDX0VOQ09ERVJfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRElTUF9PVVRfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESVNQX09VVF9JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCiAJVVNIT1JUIHB0clRyYW5zbWl0dGVySW5mbzsKIAlVU0hPUlQgcHRyRW5jb2RlckluZm87Ci0JQVNJQ19UUkFOU01JVFRFUl9JTkZPIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOwotCUFTSUNfRU5DT0RFUl9JTkZPIGFzRW5jb2RlckluZm9bMV07Ci19IEFUT01fRElTUF9PVVRfSU5GTzsKKwlBU0lDX1RSQU5TTUlUVEVSX0lORk8gIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOworCUFTSUNfRU5DT0RFUl9JTkZPICAgICAgYXNFbmNvZGVySW5mb1sxXTsKK31BVE9NX0RJU1BfT1VUX0lORk87CiAKLS8qICBEaXNwRGV2aWNlUHJpb3JpdHlJbmZvICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESVNQTEFZX0RFVklDRV9QUklPUklUWV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BfT1VUX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKwlVU0hPUlQgcHRyVHJhbnNtaXR0ZXJJbmZvOworCVVTSE9SVCBwdHJFbmNvZGVySW5mbzsKKyAgVVNIT1JUIHB0ck1haW5DYWxsUGFyc2VyRmFyOyAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdCBhZGRyZXNzIG9mIG1haW4gcGFyc2VyIGNhbGwgaW4gVkJJT1MgYmluYXJ5LiAKKwlBU0lDX1RSQU5TTUlUVEVSX0lORk8gIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOworCUFTSUNfRU5DT0RFUl9JTkZPICAgICAgYXNFbmNvZGVySW5mb1sxXTsKK31BVE9NX0RJU1BfT1VUX0lORk9fVjI7CisKKy8vIERpc3BEZXZpY2VQcmlvcml0eUluZm8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfREVWSUNFX1BSSU9SSVRZX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKIAlVU0hPUlQgYXNEZXZpY2VQcmlvcml0eVsxNl07Ci19IEFUT01fRElTUExBWV9ERVZJQ0VfUFJJT1JJVFlfSU5GTzsKK31BVE9NX0RJU1BMQVlfREVWSUNFX1BSSU9SSVRZX0lORk87CiAKLS8qIFByb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb25UYWJsZSAqLwotdHlwZWRlZiBzdHJ1Y3QgX1BST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIGxwQXV4UmVxdWVzdDsKLQlVU0hPUlQgbHBEYXRhT3V0OwotCVVDSEFSIHVjQ2hhbm5lbElEOwotCXVuaW9uIHsKLQkJVUNIQVIgdWNSZXBseVN0YXR1czsKLQkJVUNIQVIgdWNEZWxheTsKKy8vUHJvY2Vzc0F1eENoYW5uZWxUcmFuc2FjdGlvblRhYmxlCit0eXBlZGVmIHN0cnVjdCBfUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTCit7CisJVVNIT1JUCWxwQXV4UmVxdWVzdDsKKwlVU0hPUlQgIGxwRGF0YU91dDsKKwlVQ0hBUgkJdWNDaGFubmVsSUQ7CisJdW5pb24KKwl7CisgIFVDSEFSICAgdWNSZXBseVN0YXR1czsKKwlVQ0hBUiAgIHVjRGVsYXk7CiAJfTsKLQlVQ0hBUiB1Y0RhdGFPdXRMZW47Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworICBVQ0hBUiAgIHVjRGF0YU91dExlbjsKKwlVQ0hBUiAgIHVjUmVzZXJ2ZWQ7Cit9UFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworCisvL1Byb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb25UYWJsZQordHlwZWRlZiBzdHJ1Y3QgX1BST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSU19WMgoreworCVVTSE9SVAlscEF1eFJlcXVlc3Q7CisJVVNIT1JUICBscERhdGFPdXQ7CisJVUNIQVIJCXVjQ2hhbm5lbElEOworCXVuaW9uCisJeworICBVQ0hBUiAgIHVjUmVwbHlTdGF0dXM7CisJVUNIQVIgICB1Y0RlbGF5OworCX07CisgIFVDSEFSICAgdWNEYXRhT3V0TGVuOworCVVDSEFSICAgdWNIUERfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89MDogSFBEMSwgPTE6IEhQRDIsID0yOiBIUEQzLCA9MzogSFBENCwgPTQ6IEhQRDUsID01OiBIUEQ2Cit9UFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTX1YyOwogCiAjZGVmaW5lIFBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUFNfQUxMT0NBVElPTgkJCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUwogCi0vKiBHZXRTaW5rVHlwZSAqLworLy9HZXRTaW5rVHlwZQogCi10eXBlZGVmIHN0cnVjdCBfRFBfRU5DT0RFUl9TRVJWSUNFX1BBUkFNRVRFUlMgewordHlwZWRlZiBzdHJ1Y3QgX0RQX0VOQ09ERVJfU0VSVklDRV9QQVJBTUVURVJTCit7CiAJVVNIT1JUIHVjTGlua0Nsb2NrOwotCXVuaW9uIHsKLQkJVUNIQVIgdWNDb25maWc7CS8qICBmb3IgRFAgdHJhaW5pbmcgY29tbWFuZCAqLwotCQlVQ0hBUiB1Y0kyY0lkOwkvKiAgdXNlIGZvciBHRVRfU0lOS19UWVBFIGNvbW1hbmQgKi8KKwl1bmlvbiAKKwl7CisJVUNIQVIgdWNDb25maWc7CQkJCS8vIGZvciBEUCB0cmFpbmluZyBjb21tYW5kCisJVUNIQVIgdWNJMmNJZDsJCQkJLy8gdXNlIGZvciBHRVRfU0lOS19UWVBFIGNvbW1hbmQKIAl9OwogCVVDSEFSIHVjQWN0aW9uOwogCVVDSEFSIHVjU3RhdHVzOwogCVVDSEFSIHVjTGFuZU51bTsKIAlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBEUF9FTkNPREVSX1NFUlZJQ0VfUEFSQU1FVEVSUzsKK31EUF9FTkNPREVSX1NFUlZJQ0VfUEFSQU1FVEVSUzsKIAotLyogIHVjQWN0aW9uICovCisvLyB1Y0FjdGlvbgogI2RlZmluZSBBVE9NX0RQX0FDVElPTl9HRVRfU0lOS19UWVBFCQkJCQkJCTB4MDEKKy8qIG9ic2VsZXRlICovCiAjZGVmaW5lIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX1NUQVJUCQkJCQkJCTB4MDIKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfQ09NUExFVEUJCQkJCTB4MDMKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwJCQkJMHgwNApAQCAtNDMxOCw3ICs1MjczLDcgQEAKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fR0VUX1ZTV0lOR19QUkVFTVAJCQkJCTB4MDYKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fQkxBTktJTkcgICAgICAgICAgICAgICAgICAgMHgwNwogCi0vKiAgdWNDb25maWcgKi8KKy8vIHVjQ29uZmlnCiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0VOQ09ERVJfU0VMX01BU0sJCQkJCQkweDAzCiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0RJRzFfRU5DT0RFUgkJCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVIJCQkJCQkJCTB4MDEKQEAgLTQzMjYsMTQgKzUyODEsMTQgQEAKICNkZWZpbmUgQVRPTV9EUF9DT05GSUdfTElOS19TRUxfTUFTSwkJCQkJCQkweDA0CiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0xJTktfQQkJCQkJCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX0RQX0NPTkZJR19MSU5LX0IJCQkJCQkJCQkJCTB4MDQKLQorLyogL29ic2VsZXRlICovCiAjZGVmaW5lIERQX0VOQ09ERVJfU0VSVklDRV9QU19BTExPQ0FUSU9OCQkJCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKIAotLyogIERQX1RSQUlOSU5HX1RBQkxFICovCi0jZGVmaW5lIERQQ0RfU0VUX0xJTktSQVRFX0xBTkVOVU1fUEFUVEVSTjFfVEJMX0FERFIJCQkJQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUgorLy8gRFBfVFJBSU5JTkdfVEFCTEUKKyNkZWZpbmUgRFBDRF9TRVRfTElOS1JBVEVfTEFORU5VTV9QQVRURVJOMV9UQkxfQUREUgkJCQlBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSCQkKICNkZWZpbmUgRFBDRF9TRVRfU1NfQ05UTF9UQkxfQUREUgkJCQkJCQkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDggKQotI2RlZmluZSBEUENEX1NFVF9MQU5FX1ZTV0lOR19QUkVFTVBfVEJMX0FERFIJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAxNikKLSNkZWZpbmUgRFBDRF9TRVRfVFJBSU5JTkdfUEFUVEVSTjBfVEJMX0FERFIJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgMjQpCisjZGVmaW5lIERQQ0RfU0VUX0xBTkVfVlNXSU5HX1BSRUVNUF9UQkxfQUREUgkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDE2ICkKKyNkZWZpbmUgRFBDRF9TRVRfVFJBSU5JTkdfUEFUVEVSTjBfVEJMX0FERFIJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgMjQgKQogI2RlZmluZSBEUENEX1NFVF9UUkFJTklOR19QQVRURVJOMl9UQkxfQUREUgkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAzMikKICNkZWZpbmUgRFBDRF9HRVRfTElOS1JBVEVfTEFORU5VTV9TU19UQkxfQUREUgkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDQwKQogI2RlZmluZQlEUENEX0dFVF9MQU5FX1NUQVRVU19BREpVU1RfVEJMX0FERFIJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA0OCkKQEAgLTQzNDEsMTgzICs1Mjk2LDI0MSBAQAogI2RlZmluZSBEUF9JMkNfQVVYX0REQ19XUklURV9UQkxfQUREUgkJCQkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA2NCkKICNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9TVEFSVF9UQkxfQUREUgkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA3MikKICNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9UQkxfQUREUgkJCQkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA3NikKLSNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9FTkRfVEJMX0FERFIJCQkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDgwKQorI2RlZmluZSBEUF9JMkNfQVVYX0REQ19XUklURV9FTkRfVEJMX0FERFIgICAgICAgICAgICAgICAgIChBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgODApIAorI2RlZmluZSBEUF9JMkNfQVVYX0REQ19SRUFEX0VORF9UQkxfQUREUgkJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgODQpCiAKLXR5cGVkZWYgc3RydWN0IF9QUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjSTJDU3BlZWQ7Ci0JdW5pb24gewotCQlVQ0hBUiB1Y1JlZ0luZGV4OwotCQlVQ0hBUiB1Y1N0YXR1czsKK3R5cGVkZWYgc3RydWN0IF9QUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BBUkFNRVRFUlMKK3sKKwlVQ0hBUiAgIHVjSTJDU3BlZWQ7CisgCXVuaW9uCisJeworICAgVUNIQVIgdWNSZWdJbmRleDsKKyAgIFVDSEFSIHVjU3RhdHVzOwogCX07Ci0JVVNIT1JUIGxwSTJDRGF0YU91dDsKLQlVQ0hBUiB1Y0ZsYWc7Ci0JVUNIQVIgdWNUcmFuc0J5dGVzOwotCVVDSEFSIHVjU2xhdmVBZGRyOwotCVVDSEFSIHVjTGluZU51bWJlcjsKLX0gUFJPQ0VTU19JMkNfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworCVVTSE9SVCAgbHBJMkNEYXRhT3V0OworICBVQ0hBUiAgIHVjRmxhZzsgICAgICAgICAgICAgICAKKyAgVUNIQVIgICB1Y1RyYW5zQnl0ZXM7CisgIFVDSEFSICAgdWNTbGF2ZUFkZHI7CisgIFVDSEFSICAgdWNMaW5lTnVtYmVyOworfVBST0NFU1NfSTJDX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUzsKIAogI2RlZmluZSBQUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BTX0FMTE9DQVRJT04gICAgICAgUFJPQ0VTU19JMkNfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTCiAKLS8qIHVjRmxhZyAqLworLy91Y0ZsYWcKICNkZWZpbmUgSFdfSTJDX1dSSVRFICAgICAgICAxCiAjZGVmaW5lIEhXX0kyQ19SRUFEICAgICAgICAgMAorI2RlZmluZSBJMkNfMkJZVEVfQUREUiAgICAgIDB4MDIKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBQb3J0aW9uIFZJOiBEZWZpbml0aW5vcyBiZWluZyBvYm9zZWxldGUgKi8KK3R5cGVkZWYgc3RydWN0IF9TRVRfSFdCTE9DS19JTlNUQU5DRV9QQVJBTUVURVJfVjIKK3sKKyAgIFVDSEFSIHVjSFdCbGtJbnN0OyAgICAgICAgICAgICAgICAvLyBIVyBibG9jayBpbnN0YW5jZSwgMCwgMSwgMiwgLi4uCisgICBVQ0hBUiB1Y1Jlc2VydmVkWzNdOyAKK31TRVRfSFdCTE9DS19JTlNUQU5DRV9QQVJBTUVURVJfVjI7CisKKyNkZWZpbmUgSFdCTEtJTlNUX0lOU1RBTkNFX01BU0sgICAgICAgMHgwNworI2RlZmluZSBIV0JMS0lOU1RfSFdCTEtfTUFTSyAgICAgICAgICAweEYwCisjZGVmaW5lIEhXQkxLSU5TVF9IV0JMS19TSElGVCAgICAgICAgIDB4MDQKKworLy91Y0hXQmxvY2sKKyNkZWZpbmUgU0VMRUNUX0RJU1BfRU5HSU5FICAgICAgICAgICAgMAorI2RlZmluZSBTRUxFQ1RfRElTUF9QTEwgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNFTEVDVF9EQ0lPX1VOSVBIWV9MSU5LMCAgICAgIDIKKyNkZWZpbmUgU0VMRUNUX0RDSU9fVU5JUEhZX0xJTksxICAgICAgMworI2RlZmluZSBTRUxFQ1RfRENJT19JTVBDQUwgICAgICAgICAgICA0CisjZGVmaW5lIFNFTEVDVF9EQ0lPX0RJRyAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU0VMRUNUX0NSVENfUElYRUxfUkFURSAgICAgICAgNworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL1BvcnRpb24gVkk6IERlZmluaXRpbm9zIGZvciB2YmlvcyBNQyBzY3JhdGNoIHJlZ2lzdGVycyB0aGF0IGRyaXZlciB1c2VkCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBSZW1vdmUgdGhlIGRlZmluaXRpb25zIGJlbG93IHdoZW4gZHJpdmVyIGlzIHJlYWR5ISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fREFDX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01heEZyZXF1ZW5jeTsJLyogIGluIDEwa0h6IHVuaXQgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLX0gQVRPTV9EQUNfSU5GTzsKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX01BU0sgICAgMHhGMDAwMDAwMAorI2RlZmluZSBNQ19NSVNDMF9fTUVNT1JZX1RZUEVfX0dERFIxICAweDEwMDAwMDAwCisjZGVmaW5lIE1DX01JU0MwX19NRU1PUllfVFlQRV9fRERSMiAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX19HRERSMyAgMHgzMDAwMDAwMAorI2RlZmluZSBNQ19NSVNDMF9fTUVNT1JZX1RZUEVfX0dERFI0ICAweDQwMDAwMDAwCisjZGVmaW5lIE1DX01JU0MwX19NRU1PUllfVFlQRV9fR0REUjUgIDB4NTAwMDAwMDAKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX19ERFIzICAgMHhCMDAwMDAwMAogCi10eXBlZGVmIHN0cnVjdCBfQ09NUEFTU0lPTkFURV9EQVRBIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vUG9ydGlvbiBWSTogRGVmaW5pdGlub3MgYmVpbmcgb2Jvc2VsZXRlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgREFDMSBwb3J0aW9uICovCi0JVUNIQVIgdWNEQUMxX0JHX0FkanVzdG1lbnQ7Ci0JVUNIQVIgdWNEQUMxX0RBQ19BZGp1c3RtZW50OwotCVVTSE9SVCB1c0RBQzFfRk9SQ0VfRGF0YTsKLQkvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzIgcG9ydGlvbiAqLwotCVVDSEFSIHVjREFDMl9DUlQyX0JHX0FkanVzdG1lbnQ7Ci0JVUNIQVIgdWNEQUMyX0NSVDJfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9DUlQyX0ZPUkNFX0RhdGE7Ci0JVVNIT1JUIHVzREFDMl9DUlQyX01VWF9SZWdpc3RlckluZGV4OwotCVVDSEFSIHVjREFDMl9DUlQyX01VWF9SZWdpc3RlckluZm87CS8qIEJpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93ICovCi0JVUNIQVIgdWNEQUMyX05UU0NfQkdfQWRqdXN0bWVudDsKLQlVQ0hBUiB1Y0RBQzJfTlRTQ19EQUNfQWRqdXN0bWVudDsKLQlVU0hPUlQgdXNEQUMyX1RWMV9GT1JDRV9EYXRhOwotCVVTSE9SVCB1c0RBQzJfVFYxX01VWF9SZWdpc3RlckluZGV4OwotCVVDSEFSIHVjREFDMl9UVjFfTVVYX1JlZ2lzdGVySW5mbzsJLyogQml0WzQ6MF09Qml0IHBvc2l0aW9uLEJpdFs3XT0xOkFjdGl2ZSBIaWdoOz0wIEFjdGl2ZSBMb3cgKi8KLQlVQ0hBUiB1Y0RBQzJfQ1ZfQkdfQWRqdXN0bWVudDsKLQlVQ0hBUiB1Y0RBQzJfQ1ZfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9DVl9GT1JDRV9EYXRhOwotCVVTSE9SVCB1c0RBQzJfQ1ZfTVVYX1JlZ2lzdGVySW5kZXg7Ci0JVUNIQVIgdWNEQUMyX0NWX01VWF9SZWdpc3RlckluZm87CS8qIEJpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93ICovCi0JVUNIQVIgdWNEQUMyX1BBTF9CR19BZGp1c3RtZW50OwotCVVDSEFSIHVjREFDMl9QQUxfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9UVjJfRk9SQ0VfRGF0YTsKLX0gQ09NUEFTU0lPTkFURV9EQVRBOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vUmVtb3ZlIHRoZSBkZWZpbml0aW9ucyBiZWxvdyB3aGVuIGRyaXZlciBpcyByZWFkeSEKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RBQ19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICB1c01heEZyZXF1ZW5jeTsgICAgICAvLyBpbiAxMGtIeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworfUFUT01fREFDX0lORk87CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9DT01QQVNTSU9OQVRFX0RBVEEgICAgICAgICAgIAoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgCisKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzEgcG9ydGlvbgorICBVQ0hBUiAgIHVjREFDMV9CR19BZGp1c3RtZW50OworICBVQ0hBUiAgIHVjREFDMV9EQUNfQWRqdXN0bWVudDsKKyAgVVNIT1JUICB1c0RBQzFfRk9SQ0VfRGF0YTsKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzIgcG9ydGlvbgorICBVQ0hBUiAgIHVjREFDMl9DUlQyX0JHX0FkanVzdG1lbnQ7CisgIFVDSEFSICAgdWNEQUMyX0NSVDJfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX0NSVDJfRk9SQ0VfRGF0YTsKKyAgVVNIT1JUICB1c0RBQzJfQ1JUMl9NVVhfUmVnaXN0ZXJJbmRleDsKKyAgVUNIQVIgICB1Y0RBQzJfQ1JUMl9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgLy9CaXRbNDowXT1CaXQgcG9zaXRpb24sQml0WzddPTE6QWN0aXZlIEhpZ2g7PTAgQWN0aXZlIExvdworICBVQ0hBUiAgIHVjREFDMl9OVFNDX0JHX0FkanVzdG1lbnQ7CisgIFVDSEFSICAgdWNEQUMyX05UU0NfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX1RWMV9GT1JDRV9EYXRhOworICBVU0hPUlQgIHVzREFDMl9UVjFfTVVYX1JlZ2lzdGVySW5kZXg7CisgIFVDSEFSICAgdWNEQUMyX1RWMV9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgIC8vQml0WzQ6MF09Qml0IHBvc2l0aW9uLEJpdFs3XT0xOkFjdGl2ZSBIaWdoOz0wIEFjdGl2ZSBMb3cKKyAgVUNIQVIgICB1Y0RBQzJfQ1ZfQkdfQWRqdXN0bWVudDsKKyAgVUNIQVIgICB1Y0RBQzJfQ1ZfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX0NWX0ZPUkNFX0RhdGE7CisgIFVTSE9SVCAgdXNEQUMyX0NWX01VWF9SZWdpc3RlckluZGV4OworICBVQ0hBUiAgIHVjREFDMl9DVl9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgICAvL0JpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93CisgIFVDSEFSICAgdWNEQUMyX1BBTF9CR19BZGp1c3RtZW50OworICBVQ0hBUiAgIHVjREFDMl9QQUxfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX1RWMl9GT1JDRV9EYXRhOworfUNPTVBBU1NJT05BVEVfREFUQTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipTdXBwb3J0ZWQgRGV2aWNlIEluZm8gVGFibGUgRGVmaW5pdGlvbnMqKioqKioqKioqKioqKioqKioqKioqLwotLyogICB1Y0Nvbm5lY3RJbmZvOiAqLwotLyogICAgIFs3OjRdIC0gY29ubmVjdG9yIHR5cGUgKi8KLS8qICAgICAgID0gMSAgIC0gVkdBIGNvbm5lY3RvciAqLwotLyogICAgICAgPSAyICAgLSBEVkktSSAqLwotLyogICAgICAgPSAzICAgLSBEVkktRCAqLwotLyogICAgICAgPSA0ICAgLSBEVkktQSAqLwotLyogICAgICAgPSA1ICAgLSBTVklERU8gKi8KLS8qICAgICAgID0gNiAgIC0gQ09NUE9TSVRFICovCi0vKiAgICAgICA9IDcgICAtIExWRFMgKi8KLS8qICAgICAgID0gOCAgIC0gRElHSVRBTCBMSU5LICovCi0vKiAgICAgICA9IDkgICAtIFNDQVJUICovCi0vKiAgICAgICA9IDB4QSAtIEhETUlfdHlwZSBBICovCi0vKiAgICAgICA9IDB4QiAtIEhETUlfdHlwZSBCICovCi0vKiAgICAgICA9IDB4RSAtIFNwZWNpYWwgY2FzZTEgKERWSStESU4pICovCi0vKiAgICAgICBPdGhlcnM9VEJEICovCi0vKiAgICAgWzM6MF0gLSBEQUMgQXNzb2NpYXRlZCAqLwotLyogICAgICAgPSAwICAgLSBubyBEQUMgKi8KLS8qICAgICAgID0gMSAgIC0gREFDQSAqLwotLyogICAgICAgPSAyICAgLSBEQUNCICovCi0vKiAgICAgICA9IDMgICAtIEV4dGVybmFsIERBQyAqLwotLyogICAgICAgT3RoZXJzPVRCRCAqLwotLyogICovCisvLyAgdWNDb25uZWN0SW5mbzoKKy8vICAgIFs3OjRdIC0gY29ubmVjdG9yIHR5cGUKKy8vICAgICAgPSAxICAgLSBWR0EgY29ubmVjdG9yICAgCisvLyAgICAgID0gMiAgIC0gRFZJLUkKKy8vICAgICAgPSAzICAgLSBEVkktRAorLy8gICAgICA9IDQgICAtIERWSS1BCisvLyAgICAgID0gNSAgIC0gU1ZJREVPCisvLyAgICAgID0gNiAgIC0gQ09NUE9TSVRFCisvLyAgICAgID0gNyAgIC0gTFZEUworLy8gICAgICA9IDggICAtIERJR0lUQUwgTElOSworLy8gICAgICA9IDkgICAtIFNDQVJUCisvLyAgICAgID0gMHhBIC0gSERNSV90eXBlIEEKKy8vICAgICAgPSAweEIgLSBIRE1JX3R5cGUgQgorLy8gICAgICA9IDB4RSAtIFNwZWNpYWwgY2FzZTEgKERWSStESU4pCisvLyAgICAgIE90aGVycz1UQkQKKy8vICAgIFszOjBdIC0gREFDIEFzc29jaWF0ZWQKKy8vICAgICAgPSAwICAgLSBubyBEQUMKKy8vICAgICAgPSAxICAgLSBEQUNBCisvLyAgICAgID0gMiAgIC0gREFDQgorLy8gICAgICA9IDMgICAtIEV4dGVybmFsIERBQworLy8gICAgICBPdGhlcnM9VEJECisvLyAgICAKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0lORk8gewordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0lORk8KK3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVQ0hBUiBiZkNvbm5lY3RvclR5cGU6NDsKLQlVQ0hBUiBiZkFzc29jaWF0ZWREQUM6NDsKKyAgVUNIQVIgICBiZkNvbm5lY3RvclR5cGU6NDsKKyAgVUNIQVIgICBiZkFzc29jaWF0ZWREQUM6NDsKICNlbHNlCi0JVUNIQVIgYmZBc3NvY2lhdGVkREFDOjQ7Ci0JVUNIQVIgYmZDb25uZWN0b3JUeXBlOjQ7CisgIFVDSEFSICAgYmZBc3NvY2lhdGVkREFDOjQ7CisgIFVDSEFSICAgYmZDb25uZWN0b3JUeXBlOjQ7CiAjZW5kaWYKLX0gQVRPTV9DT05ORUNUT1JfSU5GTzsKK31BVE9NX0NPTk5FQ1RPUl9JTkZPOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0FDQ0VTUyB7Ci0JQVRPTV9DT05ORUNUT1JfSU5GTyBzYmZBY2Nlc3M7Ci0JVUNIQVIgdWNBY2Nlc3M7Ci19IEFUT01fQ09OTkVDVE9SX0lORk9fQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1MKK3sKKyAgQVRPTV9DT05ORUNUT1JfSU5GTyBzYmZBY2Nlc3M7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNBY2Nlc3M7Cit9QVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1M7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyB7Ci0JQVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1Mgc3VjQ29ubmVjdG9ySW5mbzsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwotfSBBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQworeworICBBVE9NX0NPTk5FQ1RPUl9JTkZPX0FDQ0VTUyBzdWNDb25uZWN0b3JJbmZvOworICBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTICBzdWNJMmNJZDsKK31BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzRGV2aWNlU3VwcG9ydDsKLQlBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyBhc0Nvbm5JbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT107Ci19IEFUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTworeyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCXNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNEZXZpY2VTdXBwb3J0OworICBBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyAgIGFzQ29ubkluZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXTsKK31BVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk87CiAKICNkZWZpbmUgTk9fSU5UX1NSQ19NQVBQRUQgICAgICAgMHhGRgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgewotCVVDSEFSIHVjSW50U3JjQml0bWFwOwotfSBBVE9NX0NPTk5FQ1RPUl9JTkNfU1JDX0JJVE1BUDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkNfU1JDX0JJVE1BUAoreworICBVQ0hBUiAgIHVjSW50U3JjQml0bWFwOworfUFUT01fQ09OTkVDVE9SX0lOQ19TUkNfQklUTUFQOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c0RldmljZVN1cHBvcnQ7Ci0JQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07Ci0JQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAKLQkgICAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT18yXTsKLX0gQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzIKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgICAgICAgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07CisgIEFUT01fQ09OTkVDVE9SX0lOQ19TUkNfQklUTUFQIGFzSW50U3JjSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07Cit9QVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk9fMmQxIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVU0hPUlQgdXNEZXZpY2VTdXBwb3J0OwotCUFUT01fQ09OTkVDVE9SX0lORk9fSTJDIGFzQ29ubkluZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV07Ci0JQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOwotfSBBVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk9fMmQxOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GT18yZDEKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgICAgICAgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFXTsKKyAgQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOworfUFUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GT18yZDE7CiAKICNkZWZpbmUgQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPX0xBU1QgQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzJkMQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NSVNDX0NPTlRST0xfSU5GTyB7Ci0JVVNIT1JUIHVzRnJlcXVlbmN5OwotCVVDSEFSIHVjUExMX0NoYXJnZVB1bXA7CS8qICBQTEwgY2hhcmdlLXB1bXAgZ2FpbiBjb250cm9sICovCi0JVUNIQVIgdWNQTExfRHV0eUN5Y2xlOwkvKiAgUExMIGR1dHkgY3ljbGUgY29udHJvbCAqLwotCVVDSEFSIHVjUExMX1ZDT19HYWluOwkvKiAgUExMIFZDTyBnYWluIGNvbnRyb2wgKi8KLQlVQ0hBUiB1Y1BMTF9Wb2x0YWdlU3dpbmc7CS8qICBQTEwgZHJpdmVyIHZvbHRhZ2Ugc3dpbmcgY29udHJvbCAqLwotfSBBVE9NX01JU0NfQ09OVFJPTF9JTkZPOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01JU0NfQ09OVFJPTF9JTkZPCit7CisgICBVU0hPUlQgdXNGcmVxdWVuY3k7CisgICBVQ0hBUiAgdWNQTExfQ2hhcmdlUHVtcDsJCQkJICAgICAgICAgICAgICAgIC8vIFBMTCBjaGFyZ2UtcHVtcCBnYWluIGNvbnRyb2wKKyAgIFVDSEFSICB1Y1BMTF9EdXR5Q3ljbGU7CQkJCSAgICAgICAgICAgICAgICAvLyBQTEwgZHV0eSBjeWNsZSBjb250cm9sCisgICBVQ0hBUiAgdWNQTExfVkNPX0dhaW47CQkJCSAgICAgICAgICAgICAgICAgIC8vIFBMTCBWQ08gZ2FpbiBjb250cm9sCisgICBVQ0hBUiAgdWNQTExfVm9sdGFnZVN3aW5nOwkJCSAgICAgICAgICAgICAgICAvLyBQTEwgZHJpdmVyIHZvbHRhZ2Ugc3dpbmcgY29udHJvbAorfUFUT01fTUlTQ19DT05UUk9MX0lORk87ICAKKwogCiAjZGVmaW5lIEFUT01fTUFYX01JU0NfSU5GTyAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1RNRFNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzTWF4RnJlcXVlbmN5OwkvKiAgaW4gMTBLaHogKi8KLQlBVE9NX01JU0NfQ09OVFJPTF9JTkZPIGFzTWlzY0luZm9bQVRPTV9NQVhfTUlTQ19JTkZPXTsKLX0gQVRPTV9UTURTX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9UTURTX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgVVNIT1JUCQkJCQkJCXVzTWF4RnJlcXVlbmN5OyAgICAgICAgICAgICAvLyBpbiAxMEtoegorICBBVE9NX01JU0NfQ09OVFJPTF9JTkZPCQkJCWFzTWlzY0luZm9bQVRPTV9NQVhfTUlTQ19JTkZPXTsKK31BVE9NX1RNRFNfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFIHsKLQlVQ0hBUiB1Y1RWU3RhbmRhcmQ7CS8qIFNhbWUgYXMgVFYgc3RhbmRhcmRzIGRlZmluZWQgYWJvdmUsICovCi0JVUNIQVIgdWNQYWRkaW5nWzFdOwotfSBBVE9NX0VOQ09ERVJfQU5BTE9HX0FUVFJJQlVURTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9ESUdJVEFMX0FUVFJJQlVURSB7Ci0JVUNIQVIgdWNBdHRyaWJ1dGU7CS8qIFNhbWUgYXMgb3RoZXIgZGlnaXRhbCBlbmNvZGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBhYm92ZSAqLwotCVVDSEFSIHVjUGFkZGluZ1sxXTsKLX0gQVRPTV9FTkNPREVSX0RJR0lUQUxfQVRUUklCVVRFOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFCit7CisgIFVDSEFSIHVjVFZTdGFuZGFyZDsgICAgIC8vU2FtZSBhcyBUViBzdGFuZGFyZHMgZGVmaW5lZCBhYm92ZSwgCisgIFVDSEFSIHVjUGFkZGluZ1sxXTsKK31BVE9NX0VOQ09ERVJfQU5BTE9HX0FUVFJJQlVURTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9FTkNPREVSX0FUVFJJQlVURSB7Ci0JQVRPTV9FTkNPREVSX0FOQUxPR19BVFRSSUJVVEUgc0FsZ0F0dHJpYjsKLQlBVE9NX0VOQ09ERVJfRElHSVRBTF9BVFRSSUJVVEUgc0RpZ0F0dHJpYjsKLX0gQVRPTV9FTkNPREVSX0FUVFJJQlVURTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0VOQ09ERVJfRElHSVRBTF9BVFRSSUJVVEUKK3sKKyAgVUNIQVIgdWNBdHRyaWJ1dGU7ICAgICAgLy9TYW1lIGFzIG90aGVyIGRpZ2l0YWwgZW5jb2RlciBhdHRyaWJ1dGVzIGRlZmluZWQgYWJvdmUKKyAgVUNIQVIgdWNQYWRkaW5nWzFdOwkJCit9QVRPTV9FTkNPREVSX0RJR0lUQUxfQVRUUklCVVRFOwogCi10eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwotCVVTSE9SVCB1c0VuY29kZXJJRDsKLQlVQ0hBUiB1Y0RldmljZVR5cGU7CS8qIFVzZSBBVE9NX0RFVklDRV94eHgxX0luZGV4IHRvIGluZGljYXRlIGRldmljZSB0eXBlIG9ubHkuICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiBBVE9NX0VOQUJMRS9BVE9NX0RJU0FCTEUvQVRPTV9IUERfSU5JVCAqLwotCUFUT01fRU5DT0RFUl9BVFRSSUJVVEUgdXNEZXZBdHRyOwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX0VOQ09ERVJfQVRUUklCVVRFCit7CisgIEFUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFIHNBbGdBdHRyaWI7CisgIEFUT01fRU5DT0RFUl9ESUdJVEFMX0FUVFJJQlVURSBzRGlnQXR0cmliOworfUFUT01fRU5DT0RFUl9BVFRSSUJVVEU7CiAKLXR5cGVkZWYgc3RydWN0IF9EVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCURWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyBzRFZPRW5jb2RlcjsKLQlXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsJLyogQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgcG9ydGlvbiAqLwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047CisKK3R5cGVkZWYgc3RydWN0IF9EVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgCisgIFVTSE9SVCB1c0VuY29kZXJJRDsgCisgIFVDSEFSICB1Y0RldmljZVR5cGU7CQkJCQkJCQkJCQkJLy9Vc2UgQVRPTV9ERVZJQ0VfeHh4MV9JbmRleCB0byBpbmRpY2F0ZSBkZXZpY2UgdHlwZSBvbmx5LgkKKyAgVUNIQVIgIHVjQWN0aW9uOwkJCQkJCQkJCQkJCQkJLy9BVE9NX0VOQUJMRS9BVE9NX0RJU0FCTEUvQVRPTV9IUERfSU5JVAorICBBVE9NX0VOQ09ERVJfQVRUUklCVVRFIHVzRGV2QXR0cjsgICAgIAkJCit9RFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOworCit0eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgICAgc0RWT0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgICBzUmVzZXJ2ZWQ7ICAgICAvL0NhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24KK31EVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047CisKIAogI2RlZmluZSBBVE9NX1hUTURTX0FTSUNfU0kxNjRfSUQgICAgICAgIDEKICNkZWZpbmUgQVRPTV9YVE1EU19BU0lDX1NJMTc4X0lEICAgICAgICAyCkBAIC00NTI2LDI3ICs1NTM5LDMwIEBACiAjZGVmaW5lIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LICAgMHgwMDAwMDAwMgogI2RlZmluZSBBVE9NX1hUTURTX01WUFVfRlBHQSAgICAgICAgICAgIDB4MDAwMDAwMDQKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fWFRNRFNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzU2luZ2xlTGlua01heEZyZXF1ZW5jeTsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwkvKiBQb2ludCB0aGUgSUQgb24gd2hpY2ggSTJDIGlzIHVzZWQgdG8gY29udHJvbCBleHRlcm5hbCBjaGlwICovCi0JVUNIQVIgdWNYdHJhbnNpbWl0dGVySUQ7Ci0JVUNIQVIgdWNTdXBwb3J0ZWRMaW5rOwkvKiAgQml0IGZpZWxkLCBiaXQwPTEsIHNpbmdsZSBsaW5rIHN1cHBvcnRlZDtiaXQxPTEsZHVhbCBsaW5rIHN1cHBvcnRlZCAqLwotCVVDSEFSIHVjU2VxdW5jZUFsdGVySUQ7CS8qICBFdmVuIHdpdGggdGhlIHNhbWUgZXh0ZXJuYWwgVE1EUyBhc2ljLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHByb2dyYW0gc2VxZW5jZSBhbHRlcnMgKi8KLQkvKiAgZHVlIHRvIGRlc2lnbi4gVGhpcyBJRCBpcyB1c2VkIHRvIGFsZXJ0IGRyaXZlciB0aGF0IHRoZSBzZXF1ZW5jZSBpcyBub3QgInN0YW5kYXJkIiEgKi8KLQlVQ0hBUiB1Y01hc3RlckFkZHJlc3M7CS8qICBBZGRyZXNzIHRvIGNvbnRyb2wgTWFzdGVyIHhUTURTIENoaXAgKi8KLQlVQ0hBUiB1Y1NsYXZlQWRkcmVzczsJLyogIEFkZHJlc3MgdG8gY29udHJvbCBTbGF2ZSB4VE1EUyBDaGlwICovCi19IEFUT01fWFRNRFNfSU5GTzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiBzdHJ1Y3QgX0FUT01fWFRNRFNfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICBzSGVhZGVyOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzU2luZ2xlTGlua01heEZyZXF1ZW5jeTsgCisgIEFUT01fSTJDX0lEX0NPTkZJR19BQ0NFU1MgIHN1Y0kyY0lkOyAgICAgICAgICAgLy9Qb2ludCB0aGUgSUQgb24gd2hpY2ggSTJDIGlzIHVzZWQgdG8gY29udHJvbCBleHRlcm5hbCBjaGlwCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjWHRyYW5zaW1pdHRlcklEOyAgICAgICAgICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNTdXBwb3J0ZWRMaW5rOyAgICAvLyBCaXQgZmllbGQsIGJpdDA9MSwgc2luZ2xlIGxpbmsgc3VwcG9ydGVkO2JpdDE9MSxkdWFsIGxpbmsgc3VwcG9ydGVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjU2VxdW5jZUFsdGVySUQ7ICAgLy8gRXZlbiB3aXRoIHRoZSBzYW1lIGV4dGVybmFsIFRNRFMgYXNpYywgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ncmFtIHNlcWVuY2UgYWx0ZXJzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1ZSB0byBkZXNpZ24uIFRoaXMgSUQgaXMgdXNlZCB0byBhbGVydCBkcml2ZXIgdGhhdCB0aGUgc2VxdWVuY2UgaXMgbm90ICJzdGFuZGFyZCIhICAgICAgICAgICAgICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNYXN0ZXJBZGRyZXNzOyAgICAvLyBBZGRyZXNzIHRvIGNvbnRyb2wgTWFzdGVyIHhUTURTIENoaXAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNTbGF2ZUFkZHJlc3M7ICAgICAvLyBBZGRyZXNzIHRvIGNvbnRyb2wgU2xhdmUgeFRNRFMgQ2hpcAorfUFUT01fWFRNRFNfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0RGUF9EUE1TX1NUQVRVU19DSEFOR0VfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEU9T24gb3IgQVRPTV9ESVNBQkxFPU9mZiAqLwotCVVDSEFSIHVjRGV2aWNlOwkJLyogIEFUT01fREVWSUNFX0RGUDFfSU5ERVguLi4uICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBERlBfRFBNU19TVEFUVVNfQ0hBTkdFX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfREZQX0RQTVNfU1RBVFVTX0NIQU5HRV9QQVJBTUVURVJTCit7ICAKKyAgVUNIQVIgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEU9T24gb3IgQVRPTV9ESVNBQkxFPU9mZgorICBVQ0hBUiB1Y0RldmljZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0RFVklDRV9ERlAxX0lOREVYLi4uLgorICBVQ0hBUiB1Y1BhZGRpbmdbMl07ICAgICAgICAgICAgIAorfURGUF9EUE1TX1NUQVRVU19DSEFOR0VfUEFSQU1FVEVSUzsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipMZWdhY3kgUG93ZXIgUGxheSBUYWJsZSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBEZWZpbml0aW9ucyBmb3IgdWxQb3dlclBsYXlNaXNjSW5mbyAqLworLy9EZWZpbml0aW9ucyBmb3IgdWxQb3dlclBsYXlNaXNjSW5mbwogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX1NQTElUX0NMT0NLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19VU0lOR19NQ0xLX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fVVNJTkdfU0NMS19TUkMgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTApAQCAtNDU1OCw4ICs1NTc0LDggQEAKIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0VOR0lORV9DTE9DS19DT05UUkxfRU4gICAgICAgICAgMHgwMDAwMDAyMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19NRU1PUllfQ0xPQ0tfQ09OVFJMX0VOICAgICAgICAgIDB4MDAwMDAwNDBMCi0jZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAkvKiBXaGVuIHRoaXMgYml0IHNldCwgdWNWb2x0YWdlRHJvcEluZGV4IGlzIG5vdCBhbiBpbmRleCBmb3IgR1BJTyBwaW4sIGJ1dCBhIHZvbHRhZ2UgSUQgdGhhdCBTVyBuZWVkcyBwcm9ncmFtICovCi0KKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QUk9HUkFNX1ZPTFRBR0UgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBMICAvL1doZW4gdGhpcyBiaXQgc2V0LCB1Y1ZvbHRhZ2VEcm9wSW5kZXggaXMgbm90IGFuIGluZGV4IGZvciBHUElPIHBpbiwgYnV0IGEgdm9sdGFnZSBJRCB0aGF0IFNXIG5lZWRzIHByb2dyYW0gIAorIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0FTSUNfUkVEVUNFRF9TUEVFRF9TQ0xLX0VOICAgICAgMHgwMDAwMDEwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19BU0lDX0RZTkFNSUNfVk9MVEFHRV9FTiAgICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fQVNJQ19TTEVFUF9NT0RFX0VOICAgICAgICAgICAgICAweDAwMDAwNDAwTApAQCAtNDU2OSwyMiArNTU4NSwyMiBAQAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0xPV19MQ0RfUkVGUkVTSF9SQVRFICAgICAgICAgICAgMHgwMDAwNDAwMEwKIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUgICAgICAgICAgICAgMHgwMDAwODAwMEwKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19PVkVSX0NMT0NLX01PREUgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fT1ZFUl9DTE9DS19NT0RFICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTCAKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19PVkVSX0RSSVZFX01PREUgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUgICAgICAgICAgICAgICAweDAwMDQwMDAwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX1RIRVJNQUxfRElPREVfTU9ERSAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKIAotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0ZSQU1FX01PRFVMQVRJT05fTUFTSyAgICAgICAgICAgMHgwMDMwMDAwMEwJLyogMC1GTSBEaXNhYmxlLCAxLTIgbGV2ZWwgRk0sIDItNCBsZXZlbCBGTSwgMy1SZXNlcnZlZCAqLwotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0ZSQU1FX01PRFVMQVRJT05fU0hJRlQgICAgICAgICAgMjAKKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19GUkFNRV9NT0RVTEFUSU9OX01BU0sgICAgICAgICAgIDB4MDAzMDAwMDBMICAvLzAtRk0gRGlzYWJsZSwgMS0yIGxldmVsIEZNLCAyLTQgbGV2ZWwgRk0sIDMtUmVzZXJ2ZWQKKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19GUkFNRV9NT0RVTEFUSU9OX1NISUZUICAgICAgICAgIDIwIAogCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOX0NMS18zRF9JRExFICAgICAgICAgICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfQ0xPQ0tfRElWSURFUl9CWV8yICAgICAgMHgwMDgwMDAwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19EWU5BTUlDX0NMT0NLX0RJVklERVJfQllfNCAgICAgIDB4MDEwMDAwMDBMCi0jZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOQU1JQ19IRFBfQkxPQ0tfRU4gICAgICAgICAgICAweDAyMDAwMDAwTAkvKiBXaGVuIHNldCwgRHluYW1pYyAqLwotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfTUNfSE9TVF9CTE9DS19FTiAgICAgICAgMHgwNDAwMDAwMEwJLyogV2hlbiBzZXQsIER5bmFtaWMgKi8KLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT18zRF9BQ0NFTEVSQVRJT05fRU4gICAgICAgICAgICAgIDB4MDgwMDAwMDBMCS8qIFdoZW4gc2V0LCBUaGlzIG1vZGUgaXMgZm9yIGFjY2VsZWF0ZWQgM0QgbW9kZSAqLworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfSERQX0JMT0NLX0VOICAgICAgICAgICAgMHgwMjAwMDAwMEwgIC8vV2hlbiBzZXQsIER5bmFtaWMgCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOQU1JQ19NQ19IT1NUX0JMT0NLX0VOICAgICAgICAweDA0MDAwMDAwTCAgLy9XaGVuIHNldCwgRHluYW1pYworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTiAgICAgICAgICAgICAgMHgwODAwMDAwMEwgIC8vV2hlbiBzZXQsIFRoaXMgbW9kZSBpcyBmb3IgYWNjZWxlYXRlZCAzRCBtb2RlCiAKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QT1dFUlBMQVlfU0VUVElOR1NfR1JPVVBfTUFTSyAgIDB4NzAwMDAwMDBMCS8qIDEtT3B0aW1hbCBCYXR0ZXJ5IExpZmUgR3JvdXAsIDItSGlnaCBCYXR0ZXJ5LCAzLUJhbGFuY2VkLCA0LUhpZ2ggUGVyZm9ybWFuY2UsIDUtIE9wdGltYWwgUGVyZm9ybWFuY2UgKERlZmF1bHQgc3RhdGUgd2l0aCBEZWZhdWx0IGNsb2NrcykgKi8KKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QT1dFUlBMQVlfU0VUVElOR1NfR1JPVVBfTUFTSyAgIDB4NzAwMDAwMDBMICAvLzEtT3B0aW1hbCBCYXR0ZXJ5IExpZmUgR3JvdXAsIDItSGlnaCBCYXR0ZXJ5LCAzLUJhbGFuY2VkLCA0LUhpZ2ggUGVyZm9ybWFuY2UsIDUtIE9wdGltYWwgUGVyZm9ybWFuY2UgKERlZmF1bHQgc3RhdGUgd2l0aCBEZWZhdWx0IGNsb2NrcykgCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJQTEFZX1NFVFRJTkdTX0dST1VQX1NISUZUICAyOAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0VOQUJMRV9CQUNLX0JJQVMgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKIApAQCAtNDU5NCw1NSArNTYxMCw1OSBAQAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9GUzNEX09WRVJEUklWRV9JTkZPICAgICAgICAgICAgMHgwMDAwMDAwOEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GTzJfRk9SQ0VETE9XUFdSX01PREUgICAgICAgICAgICAgIDB4MDAwMDAwMTBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX1ZERENJX0RZTkFNSUNfVk9MVEFHRV9FTiAgICAgICAweDAwMDAwMDIwTAotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9WSURFT19QTEFZQkFDS19DQVBBQkxFICAgICAgICAgMHgwMDAwMDA0MEwJLyogSWYgdGhpcyBiaXQgaXMgc2V0IGluIG11bHRpLXBwIG1vZGUsIHRoZW4gZHJpdmVyIHdpbGwgcGFjayB1cCBvbmUgd2l0aCB0aGUgbWluaW9yIHBvd2VyIGNvbnN1bXB0aW9uLiAqLwotCQkJCQkJCQkgICAgICAvKiBJZiBpdCdzIG5vdCBzZXQgaW4gYW55IHBwIG1vZGUsIGRyaXZlciB3aWxsIHVzZSBpdHMgZGVmYXVsdCBsb2dpYyB0byBwaWNrIGEgcHAgbW9kZSBpbiB2aWRlbyBwbGF5YmFjayAqLworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9WSURFT19QTEFZQkFDS19DQVBBQkxFICAgICAgICAgMHgwMDAwMDA0MEwgIC8vSWYgdGhpcyBiaXQgaXMgc2V0IGluIG11bHRpLXBwIG1vZGUsIHRoZW4gZHJpdmVyIHdpbGwgcGFjayB1cCBvbmUgd2l0aCB0aGUgbWluaW9yIHBvd2VyIGNvbnN1bXB0aW9uLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGl0J3Mgbm90IHNldCBpbiBhbnkgcHAgbW9kZSwgZHJpdmVyIHdpbGwgdXNlIGl0cyBkZWZhdWx0IGxvZ2ljIHRvIHBpY2sgYSBwcCBtb2RlIGluIHZpZGVvIHBsYXliYWNrCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX05PVF9WQUxJRF9PTl9EQyAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9TVFVUVEVSX01PREVfRU4gICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GTzJfVVZEX1NVUFBPUlRfTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAyMDBMCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX1VWRF9TVVBQT1JUX01PREUgICAgICAgICAgICAgICAweDAwMDAwMjAwTCAKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJNT0RFX0lORk8gewotCVVMT05HIHVsTWlzY0luZm87CS8qIFRoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyICovCi0JVUxPTkcgdWxSZXNlcnZlZDE7CS8qICBtdXN0IHNldCB0byAwICovCi0JVUxPTkcgdWxSZXNlcnZlZDI7CS8qICBtdXN0IHNldCB0byAwICovCi0JVVNIT1JUIHVzRW5naW5lQ2xvY2s7Ci0JVVNIT1JUIHVzTWVtb3J5Q2xvY2s7Ci0JVUNIQVIgdWNWb2x0YWdlRHJvcEluZGV4OwkvKiAgaW5kZXggdG8gR1BJTyB0YWJsZSAqLwotCVVDSEFSIHVjU2VsZWN0ZWRQYW5lbF9SZWZyZXNoUmF0ZTsJLyogIHBhbmVsIHJlZnJlc2ggcmF0ZSAqLwotCVVDSEFSIHVjTWluVGVtcGVyYXR1cmU7Ci0JVUNIQVIgdWNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y051bVBjaUVMYW5lczsJLyogIG51bWJlciBvZiBQQ0lFIGxhbmVzICovCi19IEFUT01fUE9XRVJNT0RFX0lORk87CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1BPV0VSTU9ERV9JTkZPCit7CisgIFVMT05HICAgICB1bE1pc2NJbmZvOyAgICAgICAgICAgICAgICAgLy9UaGUgcG93ZXIgbGV2ZWwgc2hvdWxkIGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBvcmRlcgorICBVTE9ORyAgICAgdWxSZXNlcnZlZDE7ICAgICAgICAgICAgICAgIC8vIG11c3Qgc2V0IHRvIDAKKyAgVUxPTkcgICAgIHVsUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAvLyBtdXN0IHNldCB0byAwCisgIFVTSE9SVCAgICB1c0VuZ2luZUNsb2NrOworICBVU0hPUlQgICAgdXNNZW1vcnlDbG9jazsKKyAgVUNIQVIgICAgIHVjVm9sdGFnZURyb3BJbmRleDsgICAgICAgICAvLyBpbmRleCB0byBHUElPIHRhYmxlCisgIFVDSEFSICAgICB1Y1NlbGVjdGVkUGFuZWxfUmVmcmVzaFJhdGU7Ly8gcGFuZWwgcmVmcmVzaCByYXRlCisgIFVDSEFSICAgICB1Y01pblRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTnVtUGNpRUxhbmVzOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgUENJRSBsYW5lcworfUFUT01fUE9XRVJNT0RFX0lORk87CiAKLS8qIHVjVGFibGVGb3JtYXRSZXZpc2lvbj0yICovCi0vKiB1Y1RhYmxlQ29udGVudFJldmlzaW9uPTEgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSTU9ERV9JTkZPX1YyIHsKLQlVTE9ORyB1bE1pc2NJbmZvOwkvKiBUaGUgcG93ZXIgbGV2ZWwgc2hvdWxkIGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBvcmRlciAqLwotCVVMT05HIHVsTWlzY0luZm8yOwotCVVMT05HIHVsRW5naW5lQ2xvY2s7Ci0JVUxPTkcgdWxNZW1vcnlDbG9jazsKLQlVQ0hBUiB1Y1ZvbHRhZ2VEcm9wSW5kZXg7CS8qICBpbmRleCB0byBHUElPIHRhYmxlICovCi0JVUNIQVIgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOwkvKiAgcGFuZWwgcmVmcmVzaCByYXRlICovCi0JVUNIQVIgdWNNaW5UZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTnVtUGNpRUxhbmVzOwkvKiAgbnVtYmVyIG9mIFBDSUUgbGFuZXMgKi8KLX0gQVRPTV9QT1dFUk1PREVfSU5GT19WMjsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTIKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJNT0RFX0lORk9fVjIKK3sKKyAgVUxPTkcgICAgIHVsTWlzY0luZm87ICAgICAgICAgICAgICAgICAvL1RoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyCisgIFVMT05HICAgICB1bE1pc2NJbmZvMjsgICAgICAgICAgICAgICAgCisgIFVMT05HICAgICB1bEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAKKyAgVUxPTkcgICAgIHVsTWVtb3J5Q2xvY2s7CisgIFVDSEFSICAgICB1Y1ZvbHRhZ2VEcm9wSW5kZXg7ICAgICAgICAgLy8gaW5kZXggdG8gR1BJTyB0YWJsZQorICBVQ0hBUiAgICAgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOy8vIHBhbmVsIHJlZnJlc2ggcmF0ZQorICBVQ0hBUiAgICAgdWNNaW5UZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTWF4VGVtcGVyYXR1cmU7CisgIFVDSEFSICAgICB1Y051bVBjaUVMYW5lczsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIFBDSUUgbGFuZXMKK31BVE9NX1BPV0VSTU9ERV9JTkZPX1YyOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MiAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUk1PREVfSU5GT19WMyB7Ci0JVUxPTkcgdWxNaXNjSW5mbzsJLyogVGhlIHBvd2VyIGxldmVsIHNob3VsZCBiZSBhcnJhbmdlZCBpbiBhc2NlbmRpbmcgb3JkZXIgKi8KLQlVTE9ORyB1bE1pc2NJbmZvMjsKLQlVTE9ORyB1bEVuZ2luZUNsb2NrOwotCVVMT05HIHVsTWVtb3J5Q2xvY2s7Ci0JVUNIQVIgdWNWb2x0YWdlRHJvcEluZGV4OwkvKiAgaW5kZXggdG8gQ29yZSAoVkREQykgdm90YWdlIHRhYmxlICovCi0JVUNIQVIgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOwkvKiAgcGFuZWwgcmVmcmVzaCByYXRlICovCi0JVUNIQVIgdWNNaW5UZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTnVtUGNpRUxhbmVzOwkvKiAgbnVtYmVyIG9mIFBDSUUgbGFuZXMgKi8KLQlVQ0hBUiB1Y1ZERENJX1ZvbHRhZ2VEcm9wSW5kZXg7CS8qICBpbmRleCB0byBWRERDSSB2b3RhZ2UgdGFibGUgKi8KLX0gQVRPTV9QT1dFUk1PREVfSU5GT19WMzsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTIKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJNT0RFX0lORk9fVjMKK3sKKyAgVUxPTkcgICAgIHVsTWlzY0luZm87ICAgICAgICAgICAgICAgICAvL1RoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyCisgIFVMT05HICAgICB1bE1pc2NJbmZvMjsgICAgICAgICAgICAgICAgCisgIFVMT05HICAgICB1bEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAKKyAgVUxPTkcgICAgIHVsTWVtb3J5Q2xvY2s7CisgIFVDSEFSICAgICB1Y1ZvbHRhZ2VEcm9wSW5kZXg7ICAgICAgICAgLy8gaW5kZXggdG8gQ29yZSAoVkREQykgdm90YWdlIHRhYmxlCisgIFVDSEFSICAgICB1Y1NlbGVjdGVkUGFuZWxfUmVmcmVzaFJhdGU7Ly8gcGFuZWwgcmVmcmVzaCByYXRlCisgIFVDSEFSICAgICB1Y01pblRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTnVtUGNpRUxhbmVzOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgUENJRSBsYW5lcworICBVQ0hBUiAgICAgdWNWRERDSV9Wb2x0YWdlRHJvcEluZGV4OyAgIC8vIGluZGV4IHRvIFZERENJIHZvdGFnZSB0YWJsZQorfUFUT01fUE9XRVJNT0RFX0lORk9fVjM7CisKIAogI2RlZmluZSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSyAgOAogCkBAIC00NjU1LDQwICs1Njc1LDQ0IEBACiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX01VQTY2NDkgICAweDA0CiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0xNNjQgICAgICAweDA1CiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0Y3NTM3NSAgICAweDA2Ci0jZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0FTQzc1MTIgICAweDA3CS8qICBBbmRpZ2lsb2cgKi8KKyNkZWZpbmUgQVRPTV9QUF9PVkVSRFJJVkVfVEhFUk1BTENPTlRST0xMRVJfQVNDNzUxMiAgIDB4MDcJLy8gQW5kaWdpbG9nCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVQ0hBUiB1Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyOwotCVVDSEFSIHVjT3ZlcmRyaXZlSTJjTGluZTsKLQlVQ0hBUiB1Y092ZXJkcml2ZUludEJpdG1hcDsKLQlVQ0hBUiB1Y092ZXJkcml2ZUNvbnRyb2xsZXJBZGRyZXNzOwotCVVDSEFSIHVjU2l6ZU9mUG93ZXJNb2RlRW50cnk7Ci0JVUNIQVIgdWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7Ci0JQVRPTV9QT1dFUk1PREVfSU5GTyBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOwotfSBBVE9NX1BPV0VSUExBWV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GT19WMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNPdmVyZHJpdmVUaGVybWFsQ29udHJvbGxlcjsKLQlVQ0hBUiB1Y092ZXJkcml2ZUkyY0xpbmU7Ci0JVUNIQVIgdWNPdmVyZHJpdmVJbnRCaXRtYXA7Ci0JVUNIQVIgdWNPdmVyZHJpdmVDb250cm9sbGVyQWRkcmVzczsKLQlVQ0hBUiB1Y1NpemVPZlBvd2VyTW9kZUVudHJ5OwotCVVDSEFSIHVjTnVtT2ZQb3dlck1vZGVFbnRyaWVzOwotCUFUT01fUE9XRVJNT0RFX0lORk9fVjIgYXNQb3dlclBsYXlJbmZvW0FUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLXTsKLX0gQVRPTV9QT1dFUlBMQVlfSU5GT19WMjsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9QT1dFUlBMQVlfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlVGhlcm1hbENvbnRyb2xsZXI7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlSTJjTGluZTsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVJbnRCaXRtYXA7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3M7CisgIFVDSEFSICAgIHVjU2l6ZU9mUG93ZXJNb2RlRW50cnk7CisgIFVDSEFSICAgIHVjTnVtT2ZQb3dlck1vZGVFbnRyaWVzOworICBBVE9NX1BPV0VSTU9ERV9JTkZPIGFzUG93ZXJQbGF5SW5mb1tBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DS107Cit9QVRPTV9QT1dFUlBMQVlfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk9fVjMgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjT3ZlcmRyaXZlVGhlcm1hbENvbnRyb2xsZXI7Ci0JVUNIQVIgdWNPdmVyZHJpdmVJMmNMaW5lOwotCVVDSEFSIHVjT3ZlcmRyaXZlSW50Qml0bWFwOwotCVVDSEFSIHVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3M7Ci0JVUNIQVIgdWNTaXplT2ZQb3dlck1vZGVFbnRyeTsKLQlVQ0hBUiB1Y051bU9mUG93ZXJNb2RlRW50cmllczsKLQlBVE9NX1BPV0VSTU9ERV9JTkZPX1YzIGFzUG93ZXJQbGF5SW5mb1tBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DS107Ci19IEFUT01fUE9XRVJQTEFZX0lORk9fVjM7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJQTEFZX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCXNIZWFkZXI7IAorICBVQ0hBUiAgICB1Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUkyY0xpbmU7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlSW50Qml0bWFwOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUNvbnRyb2xsZXJBZGRyZXNzOworICBVQ0hBUiAgICB1Y1NpemVPZlBvd2VyTW9kZUVudHJ5OworICBVQ0hBUiAgICB1Y051bU9mUG93ZXJNb2RlRW50cmllczsKKyAgQVRPTV9QT1dFUk1PREVfSU5GT19WMiBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOworfUFUT01fUE9XRVJQTEFZX0lORk9fVjI7CisgIAordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1BPV0VSUExBWV9JTkZPX1YzCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOyAKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVUaGVybWFsQ29udHJvbGxlcjsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVJMmNMaW5lOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUludEJpdG1hcDsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVDb250cm9sbGVyQWRkcmVzczsKKyAgVUNIQVIgICAgdWNTaXplT2ZQb3dlck1vZGVFbnRyeTsKKyAgVUNIQVIgICAgdWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CisgIEFUT01fUE9XRVJNT0RFX0lORk9fVjMgYXNQb3dlclBsYXlJbmZvW0FUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLXTsKK31BVE9NX1BPV0VSUExBWV9JTkZPX1YzOwogCiAvKiBOZXcgUFBsaWIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ4NzMsNDAgKzU4OTcsNDIgQEAKICAgICAgIFVDSEFSICB1Y01heEhUTGlua1dpZHRoOyAgICAgICAgICAgIC8vIEZyb20gU0JJT1MgLSB7MiwgNCwgOCwgMTZ9CiAgICAgICBVQ0hBUiAgdWNNaW5IVExpbmtXaWR0aDsgICAgICAgICAgICAvLyBGcm9tIFNCSU9TIC0gezIsIDQsIDgsIDE2fS4gRWZmZWN0aXZlIG9ubHkgaWYgQ0RMVyBlbmFibGVkLiBNaW5pbXVtIGRvd24gc3RyZWFtIHdpZHRoIGNvdWxkIGJlIGJpZ2dlciBhcyBkaXNwbGF5IEJXIHJlcXVyaWVtZW50LgogICAgICAgVVNIT1JUIHVzSFRMaW5rRnJlcTsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX3h4eCBvciBpbiBNSHooPj0yMDApLgotICAgICAgVUxPTkcgIHVsRmxhZ3M7CisgICAgICBVTE9ORyAgdWxGbGFnczsgCiB9IEFUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTzsKIAotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfTk9ORSAgICAgICAwCi0jZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEKLSNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX0hJR0ggICAgICAgMgotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfVkFSSUFCTEUgICAzCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9OT05FICAgICAgIDAgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9ISUdIICAgICAgIDIgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9WQVJJQUJMRSAgIDMgCiAKICNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfTk9ORSAgICAgICAgMCAgIC8vIFdlIGNhbm5vdCBjaGFuZ2UgdGhlIHNpZGUgcG9ydCBtZW1vcnkgY2xvY2ssIGxlYXZlIGl0IGFzIGl0IGlzLgogI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19MT1cgICAgICAgICAxCiAjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX0hJR0ggICAgICAgIDIKIAotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwCi0jZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9MT1cgICAgICAgIDEKLSNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX0hJR0ggICAgICAgMgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwIAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTE9XICAgICAgICAxIAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfSElHSCAgICAgICAyIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qICBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBjb21wYXRpYmxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuICovCisKKy8vIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGNvbXBhdGlibGl0eSBpc3N1ZSBpbiBkaWZmZXJlbnQgU1cgY29tcG9uZW50cy4gCiAjZGVmaW5lIEFUT01fTUFTVEVSX0RBVEFfVEFCTEVfUkVWSVNJT04gICAweDAxCi0jZGVmaW5lIE9iamVjdF9JbmZvCQkJCQkJCQkJCQkJT2JqZWN0X0hlYWRlcgorI2RlZmluZSBPYmplY3RfSW5mbwkJCQkJCQkJCQkJCU9iamVjdF9IZWFkZXIJCQkKICNkZWZpbmUJQWRqdXN0QVJCX1NFUQkJCQkJCQkJCQkJTUNfSW5pdFBhcmFtZXRlcgogI2RlZmluZQlWUkFNX0dQSU9fRGV0ZWN0aW9uSW5mbwkJCQkJCVZvbHRhZ2VPYmplY3RJbmZvCi0jZGVmaW5lCUFTSUNfVkREQ0lfSW5mbyAgICAgICAgICAgICAgICAgICBBU0lDX1Byb2ZpbGluZ0luZm8KKyNkZWZpbmUJQVNJQ19WRERDSV9JbmZvICAgICAgICAgICAgICAgICAgIEFTSUNfUHJvZmlsaW5nSW5mbwkJCQkJCQkJCQkJCQkJCiAjZGVmaW5lIEFTSUNfTVZERFFfSW5mbwkJCQkJCQkJCQlNZW1vcnlUcmFpbmluZ0luZm8KLSNkZWZpbmUgU1NfSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQTExfU1NfSW5mbworI2RlZmluZSBTU19JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBMTF9TU19JbmZvICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBBU0lDX01WRERDX0luZm8gICAgICAgICAgICAgICAgICAgQVNJQ19JbnRlcm5hbFNTX0luZm8KICNkZWZpbmUgRGlzcERldmljZVByaW9yaXR5SW5mbwkJCQkJCVNhdmVSZXN0b3JlSW5mbwogI2RlZmluZSBEaXNwT3V0SW5mbwkJCQkJCQkJCQkJCVRWX1ZpZGVvTW9kZQogCisKICNkZWZpbmUgQVRPTV9FTkNPREVSX09CSkVDVF9UQUJMRSAgICAgICAgIEFUT01fT0JKRUNUX1RBQkxFCiAjZGVmaW5lIEFUT01fQ09OTkVDVE9SX09CSkVDVF9UQUJMRSAgICAgICBBVE9NX09CSkVDVF9UQUJMRQogCi0vKiBOZXcgZGV2aWNlIG5hbWluZywgcmVtb3ZlIHRoZW0gd2hlbiBib3RoIERBTC9WQklPUyBpcyByZWFkeSAqLworLy9OZXcgZGV2aWNlIG5hbWluZywgcmVtb3ZlIHRoZW0gd2hlbiBib3RoIERBTC9WQklPUyBpcyByZWFkeQogI2RlZmluZSBERlAySV9PVVRQVVRfQ09OVFJPTF9QQVJBTUVURVJTICAgIENSVDFfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBERlAySV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERGUDJJX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKIApAQCAtNDkyMSw3ICs1OTQ3LDcgQEAKIAogI2RlZmluZSBBVE9NX0RFVklDRV9ERlAxSV9JTkRFWCAgICAgICAgICAgIEFUT01fREVWSUNFX0RGUDFfSU5ERVgKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMVhfSU5ERVggICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAyX0lOREVYCi0KKyAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMklfSU5ERVggICAgICAgICAgICAweDAwMDAwMDA5CiAjZGVmaW5lIEFUT01fREVWSUNFX0RGUDJJX1NVUFBPUlQgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQMklfSU5ERVgpCiAKQEAgLTQ5MzksNyArNTk2NSw3IEBACiAKICNkZWZpbmUgQVRPTV9TM19ERlAySV9BQ1RJVkViMSAgICAgICAgICAgICAweDAyCiAKLSNkZWZpbmUgQVRPTV9TM19ERlAxSV9BQ1RJVkUgICAgICAgICAgICAgICBBVE9NX1MzX0RGUDFfQUNUSVZFCisjZGVmaW5lIEFUT01fUzNfREZQMUlfQUNUSVZFICAgICAgICAgICAgICAgQVRPTV9TM19ERlAxX0FDVElWRSAKICNkZWZpbmUgQVRPTV9TM19ERlAxWF9BQ1RJVkUgICAgICAgICAgICAgICBBVE9NX1MzX0RGUDJfQUNUSVZFCiAKICNkZWZpbmUgQVRPTV9TM19ERlAySV9BQ1RJVkUgICAgICAgICAgICAgICAweDAwMDAwMjAwTApAQCAtNDk1OCwxNCArNTk4NCwxNCBAQAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMkliMyAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDJJICAgICAgICAgICAgICAweDAyMDAwMDAwTAogCi0jZGVmaW5lIFRNRFMxWEVuY29kZXJDb250cm9sICAgICAgICAgICAgICAgRFZPRW5jb2RlckNvbnRyb2wKKyNkZWZpbmUgVE1EUzFYRW5jb2RlckNvbnRyb2wgICAgICAgICAgICAgICBEVk9FbmNvZGVyQ29udHJvbCAgICAgICAgICAgCiAjZGVmaW5lIERGUDFYT3V0cHV0Q29udHJvbCAgICAgICAgICAgICAgICAgRFZPT3V0cHV0Q29udHJvbAogCiAjZGVmaW5lIEV4dGVybmFsREZQT3V0cHV0Q29udHJvbCAgICAgICAgICAgREZQMVhPdXRwdXRDb250cm9sCiAjZGVmaW5lIEVuYWJsZUV4dGVybmFsVE1EU19FbmNvZGVyICAgICAgICAgVE1EUzFYRW5jb2RlckNvbnRyb2wKIAogI2RlZmluZSBERlAxSU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIFRNRFNBT3V0cHV0Q29udHJvbAotI2RlZmluZSBERlAySU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbAorI2RlZmluZSBERlAySU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbCAgICAgIAogCiAjZGVmaW5lIERBQzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgICAgREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAjZGVmaW5lIERBQzFfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gREFDX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCkBAIC00OTc0LDcgKzYwMDAsNyBAQAogI2RlZmluZSBEQUMyX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERBQ19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCiAjZGVmaW5lIHVjRGFjMVN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkCi0jZGVmaW5lIHVjRGFjMlN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkCisjZGVmaW5lIHVjRGFjMlN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkICAKIAogI2RlZmluZSBUTURTMUVuY29kZXJDb250cm9sIFRNRFNBRW5jb2RlckNvbnRyb2wKICNkZWZpbmUgVE1EUzJFbmNvZGVyQ29udHJvbCBMVlRNQUVuY29kZXJDb250cm9sCkBAIC00OTg0LDEyICs2MDEwLDU2IEBACiAjZGVmaW5lIENSVDFPdXRwdXRDb250cm9sICAgREFDMU91dHB1dENvbnRyb2wKICNkZWZpbmUgQ1JUMk91dHB1dENvbnRyb2wgICBEQUMyT3V0cHV0Q29udHJvbAogCi0vKiBUaGVzZSB0d28gbGluZXMgd2lsbCBiZSByZW1vdmVkIGZvciBzdXJlIGluIGEgZmV3IGRheXMsIHdpbGwgZm9sbG93IHVwIHdpdGggTWljaGFlbCBWLiAqLworLy9UaGVzZSB0d28gbGluZXMgd2lsbCBiZSByZW1vdmVkIGZvciBzdXJlIGluIGEgZmV3IGRheXMsIHdpbGwgZm9sbG93IHVwIHdpdGggTWljaGFlbCBWLgogI2RlZmluZSBFbmFibGVMVkRTX1NTICAgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTEwKLSNkZWZpbmUgRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMyAgRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCisjZGVmaW5lIEVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlNfVjMgIEVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCAgCisKKy8vI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCisvLyNkZWZpbmUgQVRPTV9TMl9MQ0QxX0RQTVNfU1RBVEUJICAgICAgICBBVE9NX1MyX0NSVDFfRFBNU19TVEFURQorLy8jZGVmaW5lIEFUT01fUzJfVFYxX0RQTVNfU1RBVEUgICAgICAgICAgQVRPTV9TMl9DUlQxX0RQTVNfU1RBVEUKKy8vI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIEFUT01fUzJfQ1JUMV9EUE1TX1NUQVRFCisvLyNkZWZpbmUgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEUgICAgICAgICBBVE9NX1MyX0NSVDFfRFBNU19TVEFURQorCisjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9UVjIgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYyX0lOREVYICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFUT01fREVWSUNFX1RWMl9TVVBQT1JUICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfVFYyX0lOREVYKQorI2RlZmluZSBBVE9NX1MwX1RWMiAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIEFUT01fUzNfVFYyX0FDVElWRSAgICAgICAgICAgICAgQVRPTV9TM19ERlA2X0FDVElWRQorI2RlZmluZSBBVE9NX1MzX1RWMl9DUlRDX0FDVElWRSAgICAgICAgIEFUT01fUzNfREZQNl9DUlRDX0FDVElWRQorCisvLworI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFCSAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURSAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwODAwMDBMCisjZGVmaW5lIEFUT01fUzJfQ1JUMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEUgICAgICAgICAweDAwMjAwMDAwTAorI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFICAgICAgICAgIDB4MDA0MDAwMDBMCisjZGVmaW5lIEFUT01fUzJfREZQMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURQkJCQkJMHgwMjAwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUJCQkJCTB4MDQwMDAwMDBMCisjZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFCQkJCQkweDA4MDAwMDAwTAorCisjZGVmaW5lIEFUT01fUzJfQ1JUMV9EUE1TX1NUQVRFYjIgICAgICAgMHgwMQorI2RlZmluZSBBVE9NX1MyX0xDRDFfRFBNU19TVEFURWIyICAgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURWIyICAgICAgICAweDA0CisjZGVmaW5lIEFUT01fUzJfREZQMV9EUE1TX1NUQVRFYjIgICAgICAgMHgwOAorI2RlZmluZSBBVE9NX1MyX0NSVDJfRFBNU19TVEFURWIyICAgICAgIDB4MTAKKyNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEViMiAgICAgICAweDIwCisjZGVmaW5lIEFUT01fUzJfVFYyX0RQTVNfU1RBVEViMiAgICAgICAgMHg0MAorI2RlZmluZSBBVE9NX1MyX0RGUDJfRFBNU19TVEFURWIyICAgICAgIDB4ODAKKyNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFYjMgICAgICAgICAweDAxCisjZGVmaW5lIEFUT01fUzJfREZQM19EUE1TX1NUQVRFYjMJCQkJMHgwMgorI2RlZmluZSBBVE9NX1MyX0RGUDRfRFBNU19TVEFURWIzCQkJCTB4MDQKKyNkZWZpbmUgQVRPTV9TMl9ERlA1X0RQTVNfU1RBVEViMwkJCQkweDA4CisKKyNkZWZpbmUgQVRPTV9TM19BU0lDX0dVSV9FTkdJTkVfSFVOR2IzCTB4MjAKKyNkZWZpbmUgQVRPTV9TM19BTExPV19GQVNUX1BXUl9TV0lUQ0hiMyAweDQwCisjZGVmaW5lIEFUT01fUzNfUlFTVF9HUFVfVVNFX01JTl9QV1JiMyAgMHg4MAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jcHJhZ21hIHBhY2soKQkJCS8qICBCSU9TIGRhdGEgbXVzdCB1c2UgYnl0ZSBhbGlnbWVudCAqLworI3ByYWdtYSBwYWNrKCkgLy8gQklPUyBkYXRhIG11c3QgdXNlIGJ5dGUgYWxpZ21lbnQKIAogI2VuZGlmIC8qIF9BVE9NQklPU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGFmNDY0ZTM1Li5kZDlmZGY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTI0NSwyMSArMjQ1LDI1IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIERSTV9NT0RFX0RQTVNfT046Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOworCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCBBVE9NX0VOQUJMRSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCi0JCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2JsYW5rX2NydGMoY3J0YywgMCk7Ci0JCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCQkJYXRvbWJpb3NfZW5hYmxlX2NydGNfbWVtcmVxKGNydGMsIEFUT01fRU5BQkxFKTsKKwkJYXRvbWJpb3NfYmxhbmtfY3J0YyhjcnRjLCBBVE9NX0RJU0FCTEUpOworCQkvKiBYWFggcmUtZW5hYmxlIHdoZW4gaW50ZXJydXB0IHN1cHBvcnQgaXMgYWRkZWQgKi8KKwkJaWYgKCFBU0lDX0lTX0RDRTQocmRldikpCisJCQlkcm1fdmJsYW5rX3Bvc3RfbW9kZXNldChkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAkJcmFkZW9uX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgogCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7Ci0JCWF0b21iaW9zX2JsYW5rX2NydGMoY3J0YywgMSk7CisJCS8qIFhYWCByZS1lbmFibGUgd2hlbiBpbnRlcnJ1cHQgc3VwcG9ydCBpcyBhZGRlZCAqLworCQlpZiAoIUFTSUNfSVNfRENFNChyZGV2KSkKKwkJCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJCWF0b21iaW9zX2JsYW5rX2NydGMoY3J0YywgQVRPTV9FTkFCTEUpOwogCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKQotCQkJYXRvbWJpb3NfZW5hYmxlX2NydGNfbWVtcmVxKGNydGMsIDApOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKKwkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCBBVE9NX0RJU0FCTEUpOworCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCBBVE9NX0RJU0FCTEUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zNDksNiArMzUzLDExIEBACiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CiAKK3VuaW9uIGF0b21fZW5hYmxlX3NzIHsKKwlFTkFCTEVfTFZEU19TU19QQVJBTUVURVJTIGxlZ2FjeTsKKwlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiB2MTsKK307CisKIHN0YXRpYyB2b2lkIGF0b21iaW9zX3NldF9zcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBlbmFibGUpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwpAQCAtMzU4LDExICszNjcsMTQgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gTlVMTDsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IE5VTEw7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTEwpOwotCUVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTF9QU19BTExPQ0FUSU9OIGFyZ3M7Ci0JRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSUyBsZWdhY3lfYXJnczsKKwl1bmlvbiBhdG9tX2VuYWJsZV9zcyBhcmdzOwogCXVpbnQxNl90IHBlcmNlbnRhZ2UgPSAwOwogCXVpbnQ4X3QgdHlwZSA9IDAsIHN0ZXAgPSAwLCBkZWxheSA9IDAsIHJhbmdlID0gMDsKIAorCS8qIFhYWCBhZGQgc3Mgc3VwcG9ydCBmb3IgRENFNCAqLworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCXJldHVybjsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CiAJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKIAkJCXJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CkBAIC0zODYsMjkgKzM5OCwyOCBAQAogCWlmICghcmFkZW9uX2VuY29kZXIpCiAJCXJldHVybjsKIAorCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewotCQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7Ci0JCWFyZ3MudXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UgPSBjcHVfdG9fbGUxNihwZXJjZW50YWdlKTsKLQkJYXJncy51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHR5cGU7Ci0JCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzdGVwOwotCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1EZWxheSA9IGRlbGF5OwotCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1SYW5nZSA9IHJhbmdlOwotCQlhcmdzLnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5jcnRjX2lkID8gQVRPTV9QUExMMiA6IEFUT01fUFBMTDE7Ci0JCWFyZ3MudWNFbmFibGUgPSBlbmFibGU7Ci0JCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworCQlhcmdzLnYxLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWFyZ3MudjEudWNTcHJlYWRTcGVjdHJ1bVR5cGUgPSB0eXBlOworCQlhcmdzLnYxLnVjU3ByZWFkU3BlY3RydW1TdGVwID0gc3RlcDsKKwkJYXJncy52MS51Y1NwcmVhZFNwZWN0cnVtRGVsYXkgPSBkZWxheTsKKwkJYXJncy52MS51Y1NwcmVhZFNwZWN0cnVtUmFuZ2UgPSByYW5nZTsKKwkJYXJncy52MS51Y1BwbGwgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZCA/IEFUT01fUFBMTDIgOiBBVE9NX1BQTEwxOworCQlhcmdzLnYxLnVjRW5hYmxlID0gZW5hYmxlOwogCX0gZWxzZSB7Ci0JCW1lbXNldCgmbGVnYWN5X2FyZ3MsIDAsIHNpemVvZihsZWdhY3lfYXJncykpOwotCQlsZWdhY3lfYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOwotCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHR5cGU7Ci0JCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1TdGVwU2l6ZV9EZWxheSA9IChzdGVwICYgMykgPDwgMjsKLQkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5IHw9IChkZWxheSAmIDcpIDw8IDQ7Ci0JCWxlZ2FjeV9hcmdzLnVjRW5hYmxlID0gZW5hYmxlOwotCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZsZWdhY3lfYXJncyk7CisJCWFyZ3MubGVnYWN5LnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWFyZ3MubGVnYWN5LnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJYXJncy5sZWdhY3kudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOworCQlhcmdzLmxlZ2FjeS51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKKwkJYXJncy5sZWdhY3kudWNFbmFibGUgPSBlbmFibGU7CiAJfQorCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCiB1bmlvbiBhZGp1c3RfcGl4ZWxfY2xvY2sgewogCUFESlVTVF9ESVNQTEFZX1BMTF9QU19BTExPQ0FUSU9OIHYxOworCUFESlVTVF9ESVNQTEFZX1BMTF9QU19BTExPQ0FUSU9OX1YzIHYzOwogfTsKIAogc3RhdGljIHUzMiBhdG9tYmlvc19hZGp1c3RfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTQyMCwxMCArNDMxLDI0IEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gTlVMTDsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gTlVMTDsKIAl1MzIgYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jazsKKwlpbnQgZW5jb2Rlcl9tb2RlID0gMDsKIAogCS8qIHJlc2V0IHRoZSBwbGwgZmxhZ3MgKi8KIAlwbGwtPmZsYWdzID0gMDsKIAorCS8qIHNlbGVjdCB0aGUgUExMIGFsZ28gKi8KKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmFkZW9uX25ld19wbGwgPT0gMCkKKwkJCXBsbC0+YWxnbyA9IFBMTF9BTEdPX0xFR0FDWTsKKwkJZWxzZQorCQkJcGxsLT5hbGdvID0gUExMX0FMR09fTkVXOworCX0gZWxzZSB7CisJCWlmIChyYWRlb25fbmV3X3BsbCA9PSAxKQorCQkJcGxsLT5hbGdvID0gUExMX0FMR09fTkVXOworCQllbHNlCisJCQlwbGwtPmFsZ28gPSBQTExfQUxHT19MRUdBQ1k7CisJfQorCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMCkgfHwKIAkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MCkgfHwKQEAgLTQ0OCwxMCArNDczLDE2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCWVuY29kZXJfbW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CiAJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQkJCS8qIERWTyB3YW50cyAyeCBwaXhlbCBjbG9jayBpZiB0aGUgRFZPIGNoaXAgaXMgaW4gMTIgYml0IG1vZGUgKi8KIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQgPT0gRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzEpCiAJCQkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOworCQkJCS8qIExWRFMgUExMIHF1aXJrcyAqLworCQkJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RFUl9MVkRTKSB7CisJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCQlwbGwtPmFsZ28gPSBkaWctPnBsbF9hbGdvOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTQ2OCwxNCArNDk5LDkgQEAKIAkgKi8KIAlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCXVuaW9uIGFkanVzdF9waXhlbF9jbG9jayBhcmdzOwotCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKIAkJdTggZnJldiwgY3JldjsKIAkJaW50IGluZGV4OwogCi0JCWlmICghcmFkZW9uX2VuY29kZXItPmVuY19wcml2KQotCQkJcmV0dXJuIGFkanVzdGVkX2Nsb2NrOwotCQlkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7Ci0KIAkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBBZGp1c3REaXNwbGF5UGxsKTsKIAkJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwKIAkJCQkgICAgICAmY3Jldik7CkBAIC00ODksMTIgKzUxNSw1MSBAQAogCQkJY2FzZSAyOgogCQkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQkJYXJncy52MS51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKLQkJCQlhcmdzLnYxLnVjRW5jb2RlTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisJCQkJYXJncy52MS51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7CiAKIAkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJCQkJYWRqdXN0ZWRfY2xvY2sgPSBsZTE2X3RvX2NwdShhcmdzLnYxLnVzUGl4ZWxDbG9jaykgKiAxMDsKIAkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlhcmdzLnYzLnNJbnB1dC51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKKwkJCQlhcmdzLnYzLnNJbnB1dC51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJCQlhcmdzLnYzLnNJbnB1dC51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7CisJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnID0gMDsKKwkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSB7CisJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCisJCQkJCWlmIChlbmNvZGVyX21vZGUgPT0gQVRPTV9FTkNPREVSX01PREVfRFApCisJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCQlESVNQUExMX0NPTkZJR19DT0hFUkVOVF9NT0RFOworCQkJCQllbHNlIHsKKwkJCQkJCWlmIChkaWctPmNvaGVyZW50X21vZGUpCisJCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CisJCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CisJCQkJCQlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCisJCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CisJCQkJCQkJCURJU1BQTExfQ09ORklHX0RVQUxfTElOSzsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJCS8qIG1heSB3YW50IHRvIGVuYWJsZSBTUyBvbiBEUC9lRFAgZXZlbnR1YWxseSAqLworCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKKwkJCQkJaWYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKQorCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CisJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOworCQkJCX0KKwkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKKwkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJCQkJYWRqdXN0ZWRfY2xvY2sgPSBsZTMyX3RvX2NwdShhcmdzLnYzLnNPdXRwdXQudWxEaXNwUGxsRnJlcSkgKiAxMDsKKwkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUmVmRGl2KSB7CisJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKKwkJCQkJcGxsLT5yZWZlcmVuY2VfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUmVmRGl2OworCQkJCX0KKwkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUG9zdERpdikgeworCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1BPU1RfRElWOworCQkJCQlwbGwtPnBvc3RfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUG9zdERpdjsKKwkJCQl9CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKIAkJCQlyZXR1cm4gYWRqdXN0ZWRfY2xvY2s7CkBAIC01MTMsOSArNTc4LDQ3IEBACiAJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSUyB2MTsKIAlQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyIHYyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgdjM7CisJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WNSB2NTsKIH07CiAKLXZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCitzdGF0aWMgdm9pZCBhdG9tYmlvc19jcnRjX3NldF9kY3BsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTggZnJldiwgY3JldjsKKwlpbnQgaW5kZXg7CisJdW5pb24gc2V0X3BpeGVsX2Nsb2NrIGFyZ3M7CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisKKwlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOworCWF0b21fcGFyc2VfY21kX2hlYWRlcihyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgJmZyZXYsCisJCQkgICAgICAmY3Jldik7CisKKwlzd2l0Y2ggKGZyZXYpIHsKKwljYXNlIDE6CisJCXN3aXRjaCAoY3JldikgeworCQljYXNlIDU6CisJCQkvKiBpZiB0aGUgZGVmYXVsdCBkY3BsbCBjbG9jayBpcyBzcGVjaWZpZWQsCisJCQkgKiBTZXRQaXhlbENsb2NrIHByb3ZpZGVzIHRoZSBkaXZpZGVycworCQkJICovCisJCQlhcmdzLnY1LnVjQ1JUQyA9IEFUT01fQ1JUQ19JTlZBTElEOworCQkJYXJncy52NS51c1BpeGVsQ2xvY2sgPSByZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGs7CisJCQlhcmdzLnY1LnVjUHBsbCA9IEFUT01fRENQTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVua25vd24gdGFibGUgdmVyc2lvbiAlZCAlZFxuIiwgZnJldiwgY3Jldik7CisJCXJldHVybjsKKwl9CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21iaW9zX2NydGNfc2V0X3BsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtNTI5LDEyICs2MzIsMTQgQEAKIAl1MzIgcmVmX2RpdiA9IDAsIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgcG9zdF9kaXYgPSAwOwogCXN0cnVjdCByYWRlb25fcGxsICpwbGw7CiAJdTMyIGFkanVzdGVkX2Nsb2NrOworCWludCBlbmNvZGVyX21vZGUgPSAwOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCWVuY29kZXJfbW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTU0MiwyNiArNjQ3LDI0IEBACiAJaWYgKCFyYWRlb25fZW5jb2RlcikKIAkJcmV0dXJuOwogCi0JaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApCisJc3dpdGNoIChyYWRlb25fY3J0Yy0+cGxsX2lkKSB7CisJY2FzZSBBVE9NX1BQTEwxOgogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7Ci0JZWxzZQorCQlicmVhazsKKwljYXNlIEFUT01fUFBMTDI6CiAJCXBsbCA9ICZyZGV2LT5jbG9jay5wMnBsbDsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX0RDUExMOgorCWNhc2UgQVRPTV9QUExMX0lOVkFMSUQ6CisJCXBsbCA9ICZyZGV2LT5jbG9jay5kY3BsbDsKKwkJYnJlYWs7CisJfQogCiAJLyogYWRqdXN0IHBpeGVsIGNsb2NrIGFzIG5lZWRlZCAqLwogCWFkanVzdGVkX2Nsb2NrID0gYXRvbWJpb3NfYWRqdXN0X3BsbChjcnRjLCBtb2RlLCBwbGwpOwogCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJaWYgKHJhZGVvbl9uZXdfcGxsKQotCQkJcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssCi0JCQkJCQkgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJCQkJICZyZWZfZGl2LCAmcG9zdF9kaXYpOwotCQllbHNlCi0JCQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywKLQkJCQkJICAgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKLQl9IGVsc2UKLQkJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJICAgJnJlZl9kaXYsICZwb3N0X2Rpdik7CiAKIAlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOwogCWF0b21fcGFyc2VfY21kX2hlYWRlcihyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgJmZyZXYsCkBAIC01NzYsOCArNjc5LDcgQEAKIAkJCWFyZ3MudjEudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7CiAJCQlhcmdzLnYxLnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CiAJCQlhcmdzLnYxLnVjUG9zdERpdiA9IHBvc3RfZGl2OwotCQkJYXJncy52MS51Y1BwbGwgPQotCQkJICAgIHJhZGVvbl9jcnRjLT5jcnRjX2lkID8gQVRPTV9QUExMMiA6IEFUT01fUFBMTDE7CisJCQlhcmdzLnYxLnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7CiAJCQlhcmdzLnYxLnVjQ1JUQyA9IHJhZGVvbl9jcnRjLT5jcnRjX2lkOwogCQkJYXJncy52MS51Y1JlZkRpdlNyYyA9IDE7CiAJCQlicmVhazsKQEAgLTU4Nyw4ICs2ODksNyBAQAogCQkJYXJncy52Mi51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCWFyZ3MudjIudWNGcmFjRmJEaXYgPSBmcmFjX2ZiX2RpdjsKIAkJCWFyZ3MudjIudWNQb3N0RGl2ID0gcG9zdF9kaXY7Ci0JCQlhcmdzLnYyLnVjUHBsbCA9Ci0JCQkgICAgcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJCWFyZ3MudjIudWNQcGxsID0gcmFkZW9uX2NydGMtPnBsbF9pZDsKIAkJCWFyZ3MudjIudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAJCQlhcmdzLnYyLnVjUmVmRGl2U3JjID0gMTsKIAkJCWJyZWFrOwpAQCAtNTk4LDEyICs2OTksMjIgQEAKIAkJCWFyZ3MudjMudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7CiAJCQlhcmdzLnYzLnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CiAJCQlhcmdzLnYzLnVjUG9zdERpdiA9IHBvc3RfZGl2OwotCQkJYXJncy52My51Y1BwbGwgPQotCQkJICAgIHJhZGVvbl9jcnRjLT5jcnRjX2lkID8gQVRPTV9QUExMMiA6IEFUT01fUFBMTDE7Ci0JCQlhcmdzLnYzLnVjTWlzY0luZm8gPSAocmFkZW9uX2NydGMtPmNydGNfaWQgPDwgMik7CisJCQlhcmdzLnYzLnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7CisJCQlhcmdzLnYzLnVjTWlzY0luZm8gPSAocmFkZW9uX2NydGMtPnBsbF9pZCA8PCAyKTsKIAkJCWFyZ3MudjMudWNUcmFuc21pdHRlcklkID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7Ci0JCQlhcmdzLnYzLnVjRW5jb2Rlck1vZGUgPQotCQkJICAgIGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisJCQlhcmdzLnYzLnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJYXJncy52NS51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKKwkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CisJCQlhcmdzLnY1LnVjUmVmRGl2ID0gcmVmX2RpdjsKKwkJCWFyZ3MudjUudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7CisJCQlhcmdzLnY1LnVsRmJEaXZEZWNGcmFjID0gY3B1X3RvX2xlMzIoZnJhY19mYl9kaXYgKiAxMDAwMDApOworCQkJYXJncy52NS51Y1Bvc3REaXYgPSBwb3N0X2RpdjsKKwkJCWFyZ3MudjUudWNNaXNjSW5mbyA9IDA7IC8qIEhETUkgZGVwdGgsIGV0Yy4gKi8KKwkJCWFyZ3MudjUudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7CisJCQlhcmdzLnY1LnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7CisJCQlhcmdzLnY1LnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKQEAgLTYxOCw2ICs3MjksMTQwIEBACiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CiAKK3N0YXRpYyBpbnQgZXZlcmdyZWVuX2NydGNfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCisJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQoreworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpyYWRlb25fZmI7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IHJhZGVvbl9ibyAqcmJvOworCXVpbnQ2NF90IGZiX2xvY2F0aW9uOworCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CisJaW50IHI7CisKKwkvKiBubyBmYiBib3VuZCAqLworCWlmICghY3J0Yy0+ZmIpIHsKKwkJRFJNX0RFQlVHKCJObyBGQiBib3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXJhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CisKKwkvKiBQaW4gZnJhbWVidWZmZXIgJiBnZXQgdGlsbGluZyBpbmZvcm1hdGlvbnMgKi8KKwlvYmogPSByYWRlb25fZmItPm9iajsKKwlyYm8gPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyYm8sIGZhbHNlKTsKKwlpZiAodW5saWtlbHkociAhPSAwKSkKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9ib19waW4ocmJvLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLCAmZmJfbG9jYXRpb24pOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCXJhZGVvbl9ib191bnJlc2VydmUocmJvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJhZGVvbl9ib19nZXRfdGlsaW5nX2ZsYWdzKHJibywgJnRpbGluZ19mbGFncywgTlVMTCk7CisJcmFkZW9uX2JvX3VucmVzZXJ2ZShyYm8pOworCisJc3dpdGNoIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWZiX2Zvcm1hdCA9IChFVkVSR1JFRU5fR1JQSF9ERVBUSChFVkVSR1JFRU5fR1JQSF9ERVBUSF84QlBQKSB8CisJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfSU5ERVhFRCkpOworCQlicmVhazsKKwljYXNlIDE1OgorCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKKwkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCMTU1NSkpOworCQlicmVhazsKKwljYXNlIDE2OgorCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKKwkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1KSk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJY2FzZSAzMjoKKwkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzMyQlBQKSB8CisJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjg4ODgpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCisJCQkgIGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocmFkZW9uX2NydGMtPmNydGNfaWQpIHsKKwljYXNlIDA6CisJCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgMCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJV1JFRzMyKEVWRVJHUkVFTl9EM1ZHQV9DT05UUk9MLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlXUkVHMzIoRVZFUkdSRUVOX0Q0VkdBX0NPTlRST0wsIDApOworCQlicmVhazsKKwljYXNlIDQ6CisJCVdSRUczMihFVkVSR1JFRU5fRDVWR0FfQ09OVFJPTCwgMCk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJV1JFRzMyKEVWRVJHUkVFTl9ENlZHQV9DT05UUk9MLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMoZmJfbG9jYXRpb24pKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICB1cHBlcl8zMl9iaXRzKGZiX2xvY2F0aW9uKSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAodTMyKWZiX2xvY2F0aW9uICYgRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9BRERSRVNTX01BU0spOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAodTMyKSBmYl9sb2NhdGlvbiAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfQUREUkVTU19NQVNLKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9YICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1hfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9ZX1NUQVJUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfWF9FTkQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGNydGMtPmZiLT53aWR0aCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1lfRU5EICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBjcnRjLT5mYi0+aGVpZ2h0KTsKKworCWZiX3BpdGNoX3BpeGVscyA9IGNydGMtPmZiLT5waXRjaCAvIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUElUQ0ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGZiX3BpdGNoX3BpeGVscyk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX0VOQUJMRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMSk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0RFU0tUT1BfSEVJR0hUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwl4ICY9IH4zOworCXkgJj0gfjE7CisJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TVEFSVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkgICAgICAgKHggPDwgMTYpIHwgeSk7CisJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKworCWlmIChjcnRjLT5tb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCSAgICAgICBFVkVSR1JFRU5fSU5URVJMRUFWRV9FTik7CisJZWxzZQorCQlXUkVHMzIoRVZFUkdSRUVOX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKworCWlmIChvbGRfZmIgJiYgb2xkX2ZiICE9IGNydGMtPmZiKSB7CisJCXJhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihvbGRfZmIpOworCQlyYm8gPSByYWRlb25fZmItPm9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyYm8sIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJCQlyZXR1cm4gcjsKKwkJcmFkZW9uX2JvX3VucGluKHJibyk7CisJCXJhZGVvbl9ib191bnJlc2VydmUocmJvKTsKKwl9CisKKwkvKiBCeXRlcyBwZXIgcGl4ZWwgbWF5IGhhdmUgY2hhbmdlZCAqLworCXJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXZpdm9fY3J0Y19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCiB7CkBAIC03NTUsNyArMTAwMCw5IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlyZXR1cm4gZXZlcmdyZWVuX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKKwllbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQogCQlyZXR1cm4gYXZpdm9fY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWVsc2UKIAkJcmV0dXJuIHJhZGVvbl9jcnRjX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CkBAIC03ODUsNiArMTAzMiw0NiBAQAogCX0KIH0KIAorc3RhdGljIGludCByYWRlb25fYXRvbV9waWNrX3BsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqdGVzdF9lbmNvZGVyOworCXN0cnVjdCBkcm1fY3J0YyAqdGVzdF9jcnRjOworCXVpbnQzMl90IHBsbF9pbl91c2UgPSAwOworCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQkvKiBpZiBjcnRjIGlzIGRyaXZpbmcgRFAgYW5kIHdlIGhhdmUgYW4gZXh0IGNsb2NrLCB1c2UgdGhhdCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3RfZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCQlpZiAodGVzdF9lbmNvZGVyLT5jcnRjICYmICh0ZXN0X2VuY29kZXItPmNydGMgPT0gY3J0YykpIHsKKwkJCQlpZiAoYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZSh0ZXN0X2VuY29kZXIpID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7CisJCQkJCWlmIChyZGV2LT5jbG9jay5kcF9leHRjbGspCisJCQkJCQlyZXR1cm4gQVRPTV9QUExMX0lOVkFMSUQ7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogb3RoZXJ3aXNlLCBwaWNrIG9uZSBvZiB0aGUgcGxscyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3RfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl90ZXN0X2NydGM7CisKKwkJCWlmIChjcnRjID09IHRlc3RfY3J0YykKKwkJCQljb250aW51ZTsKKworCQkJcmFkZW9uX3Rlc3RfY3J0YyA9IHRvX3JhZGVvbl9jcnRjKHRlc3RfY3J0Yyk7CisJCQlpZiAoKHJhZGVvbl90ZXN0X2NydGMtPnBsbF9pZCA+PSBBVE9NX1BQTEwxKSAmJgorCQkJICAgIChyYWRlb25fdGVzdF9jcnRjLT5wbGxfaWQgPD0gQVRPTV9QUExMMikpCisJCQkJcGxsX2luX3VzZSB8PSAoMSA8PCByYWRlb25fdGVzdF9jcnRjLT5wbGxfaWQpOworCQl9CisJCWlmICghKHBsbF9pbl91c2UgJiAxKSkKKwkJCXJldHVybiBBVE9NX1BQTEwxOworCQlyZXR1cm4gQVRPTV9QUExMMjsKKwl9IGVsc2UKKwkJcmV0dXJuIHJhZGVvbl9jcnRjLT5jcnRjX2lkOworCit9CisKIGludCBhdG9tYmlvc19jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsCkBAIC03OTYsMTkgKzEwODMsMjcgQEAKIAogCS8qIFRPRE8gY29sb3IgdGlsaW5nICovCiAKKwkvKiBwaWNrIHBsbCAqLworCXJhZGVvbl9jcnRjLT5wbGxfaWQgPSByYWRlb25fYXRvbV9waWNrX3BsbChjcnRjKTsKKwogCWF0b21iaW9zX3NldF9zcyhjcnRjLCAwKTsKKwkvKiBhbHdheXMgc2V0IERDUExMICovCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJYXRvbWJpb3NfY3J0Y19zZXRfZGNwbGwoY3J0Yyk7CiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWF0b21iaW9zX3NldF9zcyhjcnRjLCAxKTsKLQlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKLQkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWF0b21iaW9zX3NldF9jcnRjX2R0ZF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CisJZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWVsc2UgeworCQlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQogCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKLQkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCQlyYWRlb25fbGVnYWN5X2F0b21fZml4dXAoY3J0Yyk7CiAJfQorCWF0b21iaW9zX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7CiAJcmV0dXJuIDA7CkBAIC04MjUsMTQgKzExMjAsMTQgQEAKIAogc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKLQlhdG9tYmlvc19sb2NrX2NydGMoY3J0YywgMSk7CisJYXRvbWJpb3NfbG9ja19jcnRjKGNydGMsIEFUT01fRU5BQkxFKTsKIAlhdG9tYmlvc19jcnRjX2RwbXMoY3J0YywgRFJNX01PREVfRFBNU19PRkYpOwogfQogCiBzdGF0aWMgdm9pZCBhdG9tYmlvc19jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJYXRvbWJpb3NfY3J0Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOwotCWF0b21iaW9zX2xvY2tfY3J0YyhjcnRjLCAwKTsKKwlhdG9tYmlvc19sb2NrX2NydGMoY3J0YywgQVRPTV9ESVNBQkxFKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgYXRvbWJpb3NfaGVscGVyX2Z1bmNzID0gewpAQCAtODQ4LDggKzExNDMsMzcgQEAKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2luaXRfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMpCiB7Ci0JaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDEpCi0JCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9Ci0JCSAgICBBVklWT19EMkNSVENfSF9UT1RBTCAtIEFWSVZPX0QxQ1JUQ19IX1RPVEFMOworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJc3dpdGNoIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkgeworCQljYXNlIDA6CisJCWRlZmF1bHQ6CisJCQlyYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQgPSBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VUOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9IEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0gRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlyYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQgPSBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VUOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9IEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQ7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0gRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDEpCisJCQlyYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQgPQorCQkJCUFWSVZPX0QyQ1JUQ19IX1RPVEFMIC0gQVZJVk9fRDFDUlRDX0hfVE9UQUw7CisJCWVsc2UKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9IDA7CisJfQorCXJhZGVvbl9jcnRjLT5wbGxfaWQgPSAtMTsKIAlkcm1fY3J0Y19oZWxwZXJfYWRkKCZyYWRlb25fY3J0Yy0+YmFzZSwgJmF0b21iaW9zX2hlbHBlcl9mdW5jcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggOTk5MTVhNi4uOGExMzNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMzIxLDYgKzMyMSwxMCBAQAogCQl0cmFpbl9zZXRbbGFuZV0gPSB2IHwgcDsKIH0KIAordW5pb24gYXV4X2NoYW5uZWxfdHJhbnNhY3Rpb24geworCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUFNfQUxMT0NBVElPTiB2MTsKKwlQUk9DRVNTX0FVWF9DSEFOTkVMX1RSQU5TQUNUSU9OX1BBUkFNRVRFUlNfVjIgdjI7Cit9OwogCiAvKiByYWRlb24gYXV4IGNoYW4gZnVuY3Rpb25zICovCiBib29sIHJhZGVvbl9wcm9jZXNzX2F1eF9jaChzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICpjaGFuLCB1OCAqcmVxX2J5dGVzLApAQCAtMzI5LDcgKzMzMyw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QU19BTExPQ0FUSU9OIGFyZ3M7CisJdW5pb24gYXV4X2NoYW5uZWxfdHJhbnNhY3Rpb24gYXJnczsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBQcm9jZXNzQXV4Q2hhbm5lbFRyYW5zYWN0aW9uKTsKIAl1bnNpZ25lZCBjaGFyICpiYXNlOwogCWludCByZXRyeV9jb3VudCA9IDA7CkBAIC0zNDEsMzEgKzM0NSwzMyBAQAogcmV0cnk6CiAJbWVtY3B5KGJhc2UsIHJlcV9ieXRlcywgbnVtX2J5dGVzKTsKIAotCWFyZ3MubHBBdXhSZXF1ZXN0ID0gMDsKLQlhcmdzLmxwRGF0YU91dCA9IDE2OwotCWFyZ3MudWNEYXRhT3V0TGVuID0gMDsKLQlhcmdzLnVjQ2hhbm5lbElEID0gY2hhbi0+cmVjLmkyY19pZDsKLQlhcmdzLnVjRGVsYXkgPSBkZWxheSAvIDEwOworCWFyZ3MudjEubHBBdXhSZXF1ZXN0ID0gMDsKKwlhcmdzLnYxLmxwRGF0YU91dCA9IDE2OworCWFyZ3MudjEudWNEYXRhT3V0TGVuID0gMDsKKwlhcmdzLnYxLnVjQ2hhbm5lbElEID0gY2hhbi0+cmVjLmkyY19pZDsKKwlhcmdzLnYxLnVjRGVsYXkgPSBkZWxheSAvIDEwOworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWFyZ3MudjIudWNIUERfSUQgPSBjaGFuLT5yZWMuaHBkX2lkOwogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAKLQlpZiAoYXJncy51Y1JlcGx5U3RhdHVzICYmICFhcmdzLnVjRGF0YU91dExlbikgewotCQlpZiAoYXJncy51Y1JlcGx5U3RhdHVzID09IDB4MjAgJiYgcmV0cnlfY291bnQrKyA8IDEwKQorCWlmIChhcmdzLnYxLnVjUmVwbHlTdGF0dXMgJiYgIWFyZ3MudjEudWNEYXRhT3V0TGVuKSB7CisJCWlmIChhcmdzLnYxLnVjUmVwbHlTdGF0dXMgPT0gMHgyMCAmJiByZXRyeV9jb3VudCsrIDwgMTApCiAJCQlnb3RvIHJldHJ5OwogCQlEUk1fREVCVUcoImZhaWxlZCB0byBnZXQgYXV4Y2ggJTAyeCUwMnggJTAyeCAlMDJ4IDB4JTAyeCAlMDJ4IGFmdGVyICVkIHJldHJpZXNcbiIsCiAJCQkgIHJlcV9ieXRlc1sxXSwgcmVxX2J5dGVzWzBdLCByZXFfYnl0ZXNbMl0sIHJlcV9ieXRlc1szXSwKLQkJCSAgY2hhbi0+cmVjLmkyY19pZCwgYXJncy51Y1JlcGx5U3RhdHVzLCByZXRyeV9jb3VudCk7CisJCQkgIGNoYW4tPnJlYy5pMmNfaWQsIGFyZ3MudjEudWNSZXBseVN0YXR1cywgcmV0cnlfY291bnQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGFyZ3MudWNEYXRhT3V0TGVuICYmIHJlYWRfYnl0ZSAmJiByZWFkX2J1Zl9sZW4pIHsKLQkJaWYgKHJlYWRfYnVmX2xlbiA8IGFyZ3MudWNEYXRhT3V0TGVuKSB7CisJaWYgKGFyZ3MudjEudWNEYXRhT3V0TGVuICYmIHJlYWRfYnl0ZSAmJiByZWFkX2J1Zl9sZW4pIHsKKwkJaWYgKHJlYWRfYnVmX2xlbiA8IGFyZ3MudjEudWNEYXRhT3V0TGVuKSB7CiAJCQlEUk1fRVJST1IoIkJ1ZmZlciB0byBzbWFsbCBmb3IgcmV0dXJuIGFuc3dlciAlZCAlZFxuIiwKLQkJCQkgIHJlYWRfYnVmX2xlbiwgYXJncy51Y0RhdGFPdXRMZW4pOworCQkJCSAgcmVhZF9idWZfbGVuLCBhcmdzLnYxLnVjRGF0YU91dExlbik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJewotCQkJaW50IGxlbiA9IG1pbihyZWFkX2J1Zl9sZW4sIGFyZ3MudWNEYXRhT3V0TGVuKTsKKwkJCWludCBsZW4gPSBtaW4ocmVhZF9idWZfbGVuLCBhcmdzLnYxLnVjRGF0YU91dExlbik7CiAJCQltZW1jcHkocmVhZF9ieXRlLCBiYXNlICsgMTYsIGxlbik7CiAJCX0KIAl9CkBAIC02MjYsMTIgKzYzMiwxOSBAQAogCWRwX3NldF9saW5rX2J3X2xhbmVzKHJhZGVvbl9jb25uZWN0b3IsIGxpbmtfY29uZmlndXJhdGlvbik7CiAJLyogZGlzYWJsZSBkb3duc3ByZWFkIG9uIHRoZSBzaW5rICovCiAJZHBfc2V0X2Rvd25zcHJlYWQocmFkZW9uX2Nvbm5lY3RvciwgMCk7Ci0JLyogc3RhcnQgdHJhaW5pbmcgb24gdGhlIHNvdXJjZSAqLwotCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfU1RBUlQsCi0JCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAwKTsKLQkvKiBzZXQgdHJhaW5pbmcgcGF0dGVybiAxIG9uIHRoZSBzb3VyY2UgKi8KLQlyYWRlb25fZHBfZW5jb2Rlcl9zZXJ2aWNlKHJkZXYsIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX1BBVFRFUk5fU0VMLAotCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMCk7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQkvKiBzdGFydCB0cmFpbmluZyBvbiB0aGUgc291cmNlICovCisJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19TVEFSVCk7CisJCS8qIHNldCB0cmFpbmluZyBwYXR0ZXJuIDEgb24gdGhlIHNvdXJjZSAqLworCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfUEFUVEVSTjEpOworCX0gZWxzZSB7CisJCS8qIHN0YXJ0IHRyYWluaW5nIG9uIHRoZSBzb3VyY2UgKi8KKwkJcmFkZW9uX2RwX2VuY29kZXJfc2VydmljZShyZGV2LCBBVE9NX0RQX0FDVElPTl9UUkFJTklOR19TVEFSVCwKKwkJCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAwKTsKKwkJLyogc2V0IHRyYWluaW5nIHBhdHRlcm4gMSBvbiB0aGUgc291cmNlICovCisJCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwsCisJCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMCk7CisJfQogCiAJLyogc2V0IGluaXRpYWwgdnMvZW1waCAqLwogCW1lbXNldCh0cmFpbl9zZXQsIDAsIDQpOwpAQCAtNjkxLDggKzcwNCwxMSBAQAogCS8qIHNldCB0cmFpbmluZyBwYXR0ZXJuIDIgb24gdGhlIHNpbmsgKi8KIAlkcF9zZXRfdHJhaW5pbmcocmFkZW9uX2Nvbm5lY3RvciwgRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsKIAkvKiBzZXQgdHJhaW5pbmcgcGF0dGVybiAyIG9uIHRoZSBzb3VyY2UgKi8KLQlyYWRlb25fZHBfZW5jb2Rlcl9zZXJ2aWNlKHJkZXYsIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX1BBVFRFUk5fU0VMLAotCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMSk7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkNPREVSX0NNRF9EUF9MSU5LX1RSQUlOSU5HX1BBVFRFUk4yKTsKKwllbHNlCisJCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwsCisJCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMSk7CiAKIAkvKiBjaGFubmVsIGVxdWFsaXphdGlvbiBsb29wICovCiAJdHJpZXMgPSAwOwpAQCAtNzI5LDcgKzc0NSwxMSBAQAogCQkJICA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQpOwogCiAJLyogZGlzYWJsZSB0aGUgdHJhaW5pbmcgcGF0dGVybiBvbiB0aGUgc2luayAqLwotCWRwX3NldF90cmFpbmluZyhyYWRlb25fY29ubmVjdG9yLCBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19DT01QTEVURSk7CisJZWxzZQorCQlyYWRlb25fZHBfZW5jb2Rlcl9zZXJ2aWNlKHJkZXYsIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX0NPTVBMRVRFLAorCQkJCQkgIGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrLCBlbmNfaWQsIDApOwogCiAJcmFkZW9uX2RwX2VuY29kZXJfc2VydmljZShyZGV2LCBBVE9NX0RQX0FDVElPTl9UUkFJTklOR19DT01QTEVURSwKIAkJCQkgIGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrLCBlbmNfaWQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKaW5kZXggZDRlNmU2ZTQuLjNjMzkxZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaApAQCAtMzAsMTEgKzMwLDEzIEBACiAKICNkZWZpbmUJRDFDUlRDX0NPTlRST0wJCQkJCTB4NjA4MAogI2RlZmluZQkJQ1JUQ19FTgkJCQkJCSgxIDw8IDApCisjZGVmaW5lCUQxQ1JUQ19TVEFUVVMJCQkJCTB4NjA5YwogI2RlZmluZQlEMUNSVENfVVBEQVRFX0xPQ0sJCQkJMHg2MEU4CiAjZGVmaW5lCUQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUwkJCTB4NjExMAogI2RlZmluZQlEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUwkJMHg2MTE4CiAKICNkZWZpbmUJRDJDUlRDX0NPTlRST0wJCQkJCTB4Njg4MAorI2RlZmluZQlEMkNSVENfU1RBVFVTCQkJCQkweDY4OWMKICNkZWZpbmUJRDJDUlRDX1VQREFURV9MT0NLCQkJCTB4NjhFOAogI2RlZmluZQlEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MJCQkweDY5MTAKICNkZWZpbmUJRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MJCTB4NjkxOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyZTdhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQWxleCBEZXVjaGVyCisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicnY3NzBkLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgImF2aXZvZC5oIgorI2luY2x1ZGUgImV2ZXJncmVlbl9yZWcuaCIKKworc3RhdGljIHZvaWQgZXZlcmdyZWVuX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCitib29sIGV2ZXJncmVlbl9ocGRfc2Vuc2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpCit7CisJYm9vbCBjb25uZWN0ZWQgPSBmYWxzZTsKKwkvKiBYWFggKi8KKwlyZXR1cm4gY29ubmVjdGVkOworfQorCit2b2lkIGV2ZXJncmVlbl9ocGRfc2V0X3BvbGFyaXR5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCWVudW0gcmFkZW9uX2hwZF9pZCBocGQpCit7CisJLyogWFhYICovCit9CisKK3ZvaWQgZXZlcmdyZWVuX2hwZF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworfQorCisKK3ZvaWQgZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogWFhYICovCit9CisKK3ZvaWQgZXZlcmdyZWVuX2hwZF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworfQorCitzdGF0aWMgaW50IGV2ZXJncmVlbl9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVuc2lnbmVkIGk7CisJdTMyIHRtcDsKKworCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQkvKiByZWFkIE1DX1NUQVRVUyAqLworCQl0bXAgPSBSUkVHMzIoU1JCTV9TVEFUVVMpICYgMHgxRjAwOworCQlpZiAoIXRtcCkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIEdBUlQKKyAqLworaW50IGV2ZXJncmVlbl9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IHIsIGk7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIk5vIFZSQU0gb2JqZWN0IGZvciBQQ0lFIEdBUlQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcmFkZW9uX2dhcnRfcmVzdG9yZShyZGV2KTsKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAorCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOworCVdSRUczMihWTV9DT05URVhUMF9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUiwKKwkJCSh1MzIpKHJkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiAxMikpOworCWZvciAoaSA9IDE7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7CisKKwlyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gocmRldik7CisJcmRldi0+Z2FydC5yZWFkeSA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXZlcmdyZWVuX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGksIHI7CisKKwkvKiBEaXNhYmxlIGFsbCB0YWJsZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworCisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDcpKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDIsIDApOworCVdSRUczMihWTV9MMl9DTlRMMywgQkFOS19TRUxFQ1QoMCkgfCBDQUNIRV9VUERBVEVfTU9ERSgyKSk7CisJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmosIGZhbHNlKTsKKwkJaWYgKGxpa2VseShyID09IDApKSB7CisJCQlyYWRlb25fYm9fa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwkJCXJhZGVvbl9ib191bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKKwkJfQorCX0KK30KKwordm9pZCBldmVyZ3JlZW5fcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJZXZlcmdyZWVuX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKKwlyYWRlb25fZ2FydF9maW5pKHJkZXYpOworfQorCisKK3ZvaWQgZXZlcmdyZWVuX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCS8qIFNldHVwIEwyIGNhY2hlICovCisJV1JFRzMyKFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9DQUNIRSB8IEVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQlFTkFCTEVfTDJfUFRFX0NBQ0hFX0xSVV9VUERBVEVfQllfV1JJVEUgfAorCQkJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDcpKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDIsIDApOworCVdSRUczMihWTV9MMl9DTlRMMywgQkFOS19TRUxFQ1QoMCkgfCBDQUNIRV9VUERBVEVfTU9ERSgyKSk7CisJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFTkFCTEVfTDFfVExCIHwgRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CisJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVIHwKKwkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIyX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjNfQ05UTCwgdG1wKTsKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworfQorCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fbWNfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IGV2ZXJncmVlbl9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPnZnYV9jb250cm9sWzBdID0gUlJFRzMyKEQxVkdBX0NPTlRST0wpOworCXNhdmUtPnZnYV9jb250cm9sWzFdID0gUlJFRzMyKEQyVkdBX0NPTlRST0wpOworCXNhdmUtPnZnYV9jb250cm9sWzJdID0gUlJFRzMyKEVWRVJHUkVFTl9EM1ZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfY29udHJvbFszXSA9IFJSRUczMihFVkVSR1JFRU5fRDRWR0FfQ09OVFJPTCk7CisJc2F2ZS0+dmdhX2NvbnRyb2xbNF0gPSBSUkVHMzIoRVZFUkdSRUVOX0Q1VkdBX0NPTlRST0wpOworCXNhdmUtPnZnYV9jb250cm9sWzVdID0gUlJFRzMyKEVWRVJHUkVFTl9ENlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5jcnRjX2NvbnRyb2xbMF0gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpOworCXNhdmUtPmNydGNfY29udHJvbFsxXSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCk7CisJc2F2ZS0+Y3J0Y19jb250cm9sWzJdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VUKTsKKwlzYXZlLT5jcnRjX2NvbnRyb2xbM10gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQpOworCXNhdmUtPmNydGNfY29udHJvbFs0XSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCk7CisJc2F2ZS0+Y3J0Y19jb250cm9sWzVdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VUKTsKKworCS8qIFN0b3AgYWxsIHZpZGVvICovCisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisKKwlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOworCVdSRUczMihFVkVSR1JFRU5fRDNWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9ENFZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0Q1VkdBX0NPTlRST0wsIDApOworCVdSRUczMihFVkVSR1JFRU5fRDZWR0FfQ09OVFJPTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZXJncmVlbl9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSAqc2F2ZSkKK3sKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTX0hJR0gsIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihEMVZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFswXSk7CisJV1JFRzMyKEQyVkdBX0NPTlRST0wsIHNhdmUtPnZnYV9jb250cm9sWzFdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0QzVkdBX0NPTlRST0wsIHNhdmUtPnZnYV9jb250cm9sWzJdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0Q0VkdBX0NPTlRST0wsIHNhdmUtPnZnYV9jb250cm9sWzNdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0Q1VkdBX0NPTlRST0wsIHNhdmUtPnZnYV9jb250cm9sWzRdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0Q2VkdBX0NPTlRST0wsIHNhdmUtPnZnYV9jb250cm9sWzVdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFswXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbMV0pOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzJdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFszXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbNF0pOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzVdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCBzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgZXZlcmdyZWVuX21jX3NhdmUgc2F2ZTsKKwl1MzIgdG1wOworCWludCBpLCBqOworCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDMyOyBpKyssIGogKz0gMHgxOCkgeworCQlXUkVHMzIoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJfQorCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKKworCWV2ZXJncmVlbl9tY19zdG9wKHJkZXYsICZzYXZlKTsKKwlpZiAoZXZlcmdyZWVuX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKKwl9CisJLyogTG9ja291dCBhY2Nlc3MgdGhyb3VnaCBWR0EgYXBlcnR1cmUqLworCVdSRUczMihWR0FfSERQX0NPTlRST0wsIFZHQV9NRU1PUllfRElTQUJMRSk7CisJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7CisJdG1wID0gKChyZGV2LT5tYy52cmFtX2VuZCA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMjQpICYgMHhGRkZGKTsKKwlXUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04sIHRtcCk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0JBU0UsIChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDgpKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfSU5GTywgKDIgPDwgNykpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCAocmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkgfCAweDNGRik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKKwl9CisJaWYgKGV2ZXJncmVlbl9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CisJfQorCWV2ZXJncmVlbl9tY19yZXN1bWUocmRldiwgJnNhdmUpOworCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQorCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KKwlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7Cit9CisKKyNpZiAwCisvKgorICogQ1AuCisgKi8KK3N0YXRpYyB2b2lkIGV2ZXJncmVlbl9jcF9zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworfQorCisKK3N0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIENvcmUgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB1MzIgZXZlcmdyZWVuX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAodTMyIG51bV90aWxlX3BpcGVzLAorCQkJCQkJICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkJICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCit7CisJdTMyIGJhY2tlbmRfbWFwID0gMDsKKworCXJldHVybiBiYWNrZW5kX21hcDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogWFhYICovCit9CisKK2ludCBldmVyZ3JlZW5fbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlmaXhlZDIwXzEyIGE7CisJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CisKKwkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KKwlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKKwkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLworCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CisJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CisJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLworCS8qIHNpemUgaW4gTUIgb24gZXZlcmdyZWVuICovCisJcmRldi0+bWMubWNfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKSAqIDEwMjQgKiAxMDI0OworCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKSAqIDEwMjQgKiAxMDI0OworCXJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCS8qIEZJWE1FIHJlbW92ZSB0aGlzIG9uY2Ugd2Ugc3VwcG9ydCB1bm1hcHBhYmxlIFZSQU0gKi8KKwlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKSB7CisJCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwkJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJfQorCXI2MDBfdnJhbV9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KKwkgKiBkZWZhdWx0IHNldHVwCisJICovCisJYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwMCk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfc2Nsayk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGV2ZXJncmVlbl9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogRklYTUU6IGltcGxlbWVudCBmb3IgZXZlcmdyZWVuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXZlcmdyZWVuX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisjaWYgMAorCWludCByOworCisJaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3IHx8ICFyZGV2LT5ybGNfZncpIHsKKwkJciA9IHI2MDBfaW5pdF9taWNyb2NvZGUocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKyNlbmRpZgorCWV2ZXJncmVlbl9tY19wcm9ncmFtKHJkZXYpOworI2lmIDAKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWV2ZXJncmVlbV9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBldmVyZ3JlZW5fcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisjZW5kaWYKKwlldmVyZ3JlZW5fZ3B1X2luaXQocmRldik7CisjaWYgMAorCWlmICghcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopIHsKKwkJciA9IHI2MDBfYmxpdF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKKwkJCXJldHVybiByOworCQl9CisJfQorCisJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBmYWxzZSk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJCXJldHVybiByOworCXIgPSByYWRlb25fYm9fcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJJnJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIpOworCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBibGl0IG9iamVjdCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCS8qIEVuYWJsZSBJUlEgKi8KKwlyID0gcjYwMF9pcnFfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogSUggaW5pdCBmYWlsZWQgKCVkKS5cbiIsIHIpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZXR1cm4gcjsKKwl9CisJcjYwMF9pcnFfc2V0KHJkZXYpOworCisJciA9IHJhZGVvbl9yaW5nX2luaXQocmRldiwgcmRldi0+Y3AucmluZ19zaXplKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IGV2ZXJncmVlbl9jcF9sb2FkX21pY3JvY29kZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiB3cml0ZSBiYWNrIGJ1ZmZlciBhcmUgbm90IHZpdGFsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGZhaWx1cmUgKi8KKwlyNjAwX3diX2VuYWJsZShyZGV2KTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitpbnQgZXZlcmdyZWVuX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIERvIG5vdCByZXNldCBHUFUgYmVmb3JlIHBvc3RpbmcsIG9uIHJ2NzcwIGh3IHVubGlrZSBvbiByNTAwIGh3LAorCSAqIHBvc3Rpbmcgd2lsbCBwZXJmb3JtIG5lY2Vzc2FyeSB0YXNrIHRvIGJyaW5nIGJhY2sgR1BVIGludG8gZ29vZAorCSAqIHNoYXBlLgorCSAqLworCS8qIHBvc3QgY2FyZCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gZXZlcmdyZWVuX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyNjAwIHN0YXJ0dXAgZmFpbGVkIG9uIHJlc3VtZVxuIik7CisJCXJldHVybiByOworCX0KKyNpZiAwCisJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorI2VuZGlmCisJcmV0dXJuIHI7CisKK30KKworaW50IGV2ZXJncmVlbl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIDAKKwlpbnQgcjsKKworCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLworCXI3MDBfY3Bfc3RvcChyZGV2KTsKKwlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOworCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKKwlldmVyZ3JlZW5fcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogdW5waW4gc2hhZGVycyBibyAqLworCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOworCWlmIChsaWtlbHkociA9PSAwKSkgeworCQlyYWRlb25fYm9fdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgZXZlcmdyZWVuX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiByZWc7CisKKwkvKiBmaXJzdCBjaGVjayBDUlRDcyAqLworCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAorCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VUKSB8CisJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCkgfAorCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VUKTsKKwlpZiAocmVnICYgRVZFUkdSRUVOX0NSVENfTUFTVEVSX0VOKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHRoZW4gY2hlY2sgTUVNX1NJWkUsIGluIGNhc2UgdGhlIGNydGNzIGFyZSBvZmYgKi8KKwlpZiAoUlJFRzMyKENPTkZJR19NRU1TSVpFKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFBsYW4gaXMgdG8gbW92ZSBpbml0aWFsaXphdGlvbiBpbiB0aGF0IGZ1bmN0aW9uIGFuZCB1c2UKKyAqIGhlbHBlciBmdW5jdGlvbiBzbyB0aGF0IHJhZGVvbl9kZXZpY2VfaW5pdCBwcmV0dHkgbXVjaAorICogZG8gbm90aGluZyBtb3JlIHRoYW4gY2FsbGluZyBhc2ljIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzCisgKiBzaG91bGQgYWxzbyBhbGxvdyB0byByZW1vdmUgYSBidW5jaCBvZiBjYWxsYmFjayBmdW5jdGlvbgorICogbGlrZSB2cmFtX2luZm8uCisgKi8KK2ludCBldmVyZ3JlZW5faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBUaGlzIGRvbid0IGRvIG11Y2ggKi8KKwlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBSZWFkIEJJT1MgKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFI2MDAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUG9zdCBjYXJkIGlmIG5lY2Vzc2FyeSAqLworCWlmICghZXZlcmdyZWVuX2NhcmRfcG9zdGVkKHJkZXYpKSB7CisJCWlmICghcmRldi0+YmlvcykgeworCQkJZGV2X2VycihyZGV2LT5kZXYsICJDYXJkIG5vdCBwb3N0ZWQgYW5kIG5vIEJJT1MgLSBpZ25vcmluZ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyNjAwX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBpbml0aWFsaXplIEFHUCAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJfQorCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyID0gZXZlcmdyZWVuX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9ib19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKyNpZiAwCisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmRldi0+Y3AucmluZ19vYmogPSBOVUxMOworCXI2MDBfcmluZ19pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKworCXJkZXYtPmloLnJpbmdfb2JqID0gTlVMTDsKKwlyNjAwX2loX3JpbmdfaW5pdChyZGV2LCA2NCAqIDEwMjQpOworCisJciA9IHI2MDBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworI2VuZGlmCisJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCXIgPSBldmVyZ3JlZW5fc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQlldmVyZ3JlZW5fc3VzcGVuZChyZGV2KTsKKwkJLypyNjAwX3diX2ZpbmkocmRldik7Ki8KKwkJLypyYWRlb25fcmluZ19maW5pKHJkZXYpOyovCisJCS8qZXZlcmdyZWVuX3BjaWVfZ2FydF9maW5pKHJkZXYpOyovCisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJaWYgKHJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJciA9IHJhZGVvbl9pYl9wb29sX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCQlyID0gcjYwMF9pYl90ZXN0KHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBldmVyZ3JlZW5fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlldmVyZ3JlZW5fc3VzcGVuZChyZGV2KTsKKyNpZiAwCisJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJcjYwMF9pcnFfZmluaShyZGV2KTsKKwlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJcjYwMF93Yl9maW5pKHJkZXYpOworCWV2ZXJncmVlbl9wY2llX2dhcnRfZmluaShyZGV2KTsKKyNlbmRpZgorCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOworCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwlyYWRlb25fYm9fZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M3Yzk2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX3JlZy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFsZXggRGV1Y2hlcgorICovCisjaWZuZGVmIF9fRVZFUkdSRUVOX1JFR19IX18KKyNkZWZpbmUgX19FVkVSR1JFRU5fUkVHX0hfXworCisvKiBldmVyZ3JlZW4gKi8KKyNkZWZpbmUgRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgMHgzMTAKKyNkZWZpbmUgRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTX0hJR0ggICAgICAgICAgMHgzMjQKKyNkZWZpbmUgRVZFUkdSRUVOX0QzVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTAKKyNkZWZpbmUgRVZFUkdSRUVOX0Q0VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTQKKyNkZWZpbmUgRVZFUkdSRUVOX0Q1VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTgKKyNkZWZpbmUgRVZFUkdSRUVOX0Q2VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZWMKKworI2RlZmluZSBFVkVSR1JFRU5fUDFQTExfU1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDQxNAorI2RlZmluZSBFVkVSR1JFRU5fUDJQTExfU1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDQ1NAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX1B4UExMX1NTX0VOICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKy8qIEdSUEggYmxvY2tzIGF0IDB4NjgwMCwgMHg3NDAwLCAweDEwMDAwLCAweDEwYzAwLCAweDExODAwLCAweDEyNDAwICovCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgwMAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4MDQKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9ERVBUSF84QlBQICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0RFUFRIXzE2QlBQICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfREVQVEhfMzJCUFAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA4KQorLyogOCBCUFAgKi8KKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9JTkRFWEVEICAgICAgICAgICAgMAorLyogMTYgQlBQICovCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjE1NTUgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1ICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0I0NDQ0ICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQUk4OCAgICAgICAgICAgICAgIDMKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9NT05PMTYgICAgICAgICAgICAgNAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUkE1NTUxICAgICAgICAgICA1CisvKiAzMiBCUFAgKi8KKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCODg4OCAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0IyMTAxMDEwICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfMzJCUFBfRElHICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF84Ql9BUkdCMjEwMTAxMCAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUkExMDEwMTAyICAgICAgICA0CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfOEJfQkdSQTEwMTAxMDIgICAgIDUKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9SR0IxMTExMTAgICAgICAgICAgNgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUjEwMTExMSAgICAgICAgICA3CisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NjgwYworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRU5ESUFOXzhJTjE2ICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMzIgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU42NCAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUkVEX0NST1NTQkFSKHgpICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1JFRF9TRUxfUiAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUkVEX1NFTF9HICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9SRURfU0VMX0IgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1JFRF9TRUxfQSAgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfR1JFRU5fQ1JPU1NCQVIoeCkgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNikKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0dSRUVOX1NFTF9HICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfR1JFRU5fU0VMX0IgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9HUkVFTl9TRUxfQSAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0dSRUVOX1NFTF9SICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQkxVRV9DUk9TU0JBUih4KSAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgOCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0JMVUVfU0VMX0IgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQkxVRV9TRUxfQSAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9CTFVFX1NFTF9SICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0JMVUVfU0VMX0cgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQUxQSEFfQ1JPU1NCQVIoeCkgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMTApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9BTFBIQV9TRUxfQSAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0FMUEhBX1NFTF9SICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQUxQSEFfU0VMX0cgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9BTFBIQV9TRUxfQiAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgMHg2ODEwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgIDB4NjgxNAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfREZRX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9BRERSRVNTX01BU0sgICAgICAweGZmZmZmZjAwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgxOAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAweDY4MWMKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgMHg2ODIwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggICAgICAgICAgICAgICAgIDB4NjgyNAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9ZICAgICAgICAgICAgICAgICAweDY4MjgKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfWF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODJjCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1lfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgzMAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9YX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4MzQKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfWV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODM4CisKKy8qIENVUiBibG9ja3MgYXQgMHg2OTk4LCAweDc1OTgsIDB4MTAxOTgsIDB4MTBkOTgsIDB4MTE5OTgsIDB4MTI1OTggKi8KKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OTk4CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX0VOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX01PREUoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9NT05PICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SXzI0XzEgICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfMjRfOF9QUkVfTVVMVCAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl8yNF84X1VOUFJFX01VTFQgICAgICAgICAzCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SXzJYX01BR05JRlkgICAgICAgICAgICAgICgxIDw8IDE2KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9GT1JDRV9NQ19PTiAgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfVVJHRU5UX0NPTlRST0woeCkgICAgICAgKCgoeCkgJiAweDcpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9VUkdFTlRfQUxXQVlTICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VSR0VOVF8xXzggICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfVVJHRU5UXzFfNCAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9VUkdFTlRfM184ICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VSR0VOVF8xXzIgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHg2OTljCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSX1NVUkZBQ0VfQUREUkVTU19NQVNLICAgICAgIDB4ZmZmZmYwMDAKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWEwCisjZGVmaW5lIEVWRVJHUkVFTl9DVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjlhNAorI2RlZmluZSBFVkVSR1JFRU5fQ1VSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDY5YTgKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9IT1RfU1BPVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWFjCisjZGVmaW5lIEVWRVJHUkVFTl9DVVJfQ09MT1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjliMAorI2RlZmluZSBFVkVSR1JFRU5fQ1VSX0NPTE9SMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY5YjQKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWI4CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9QRU5ESU5HICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9UQUtFTiAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9MT0NLICAgICAgICAgICAgICgxIDw8IDE2KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9ESVNBQkxFX01VTFRJUExFX1VQREFURSAoMSA8PCAyNCkKKworLyogTFVUIGJsb2NrcyBhdCAweDY5ZTAsIDB4NzVlMCwgMHgxMDFlMCwgMHgxMGRlMCwgMHgxMTllMCwgMHgxMjVlMCAqLworI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1JXX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDY5ZTAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9SV19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHg2OWU0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfU0VRX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4NjllOAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1BXTF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAweDY5ZWMKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF8zMF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgMHg2OWYwCisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfVkdBX0FDQ0VTU19FTkFCTEUgICAgICAgICAgICAgIDB4NjlmNAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1dSSVRFX0VOX01BU0sgICAgICAgICAgICAgICAgICAweDY5ZjgKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9BVVRPRklMTCAgICAgICAgICAgICAgICAgICAgICAgMHg2OWZjCisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4NmEwMAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9CTFVFICAgICAgICAgICAgICAweDZhMDQKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9CTEFDS19PRkZTRVRfR1JFRU4gICAgICAgICAgICAgMHg2YTA4CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX1JFRCAgICAgICAgICAgICAgIDB4NmEwYworI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1dISVRFX09GRlNFVF9CTFVFICAgICAgICAgICAgICAweDZhMTAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfR1JFRU4gICAgICAgICAgICAgMHg2YTE0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX1JFRCAgICAgICAgICAgICAgIDB4NmExOAorCisjZGVmaW5lIEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmIwMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0lOVEVSTEVBVkVfRU4gICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBFVkVSR1JFRU5fREVTS1RPUF9IRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAweDZiMDQKKworI2RlZmluZSBFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweDZkNzAKKyNkZWZpbmUgRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ZDc0CisKKy8qIGRpc3BsYXkgY29udHJvbGxlciBvZmZzZXRzIHVzZWQgZm9yIGNydGMvY3VyL2x1dC9ncnBoL3ZpZXdwb3J0L2V0Yy4gKi8KKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4NmRmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4NzlmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MTA1ZjAgLSAweDZkZjApCisjZGVmaW5lIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQgICAgICAgICAgICAgICAgICgweDExMWYwIC0gMHg2ZGYwKQorI2RlZmluZSBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgxMWRmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MTI5ZjAgLSAweDZkZjApCisKKy8qIENSVEMgYmxvY2tzIGF0IDB4NmRmMCwgMHg3OWYwLCAweDEwNWYwLCAweDExMWYwLCAweDExZGYwLCAweDEyOWYwICovCisjZGVmaW5lIEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmU3MAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgICAgICAweDZlZDQKKworI2RlZmluZSBFVkVSR1JFRU5fRENfR1BJT19IUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDY0YjAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0dQSU9fSFBEX0EgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NGI0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19HUElPX0hQRF9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4NjRiOAorI2RlZmluZSBFVkVSR1JFRU5fRENfR1BJT19IUERfWSAgICAgICAgICAgICAgICAgICAgICAgICAweDY0YmMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IGMwZDQ2NTAuLjkxZWI3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0xOTcsMTMgKzE5NywxMyBAQAogewogCXVpbnQzMl90IHRtcDsKIAorCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CiAJLyogZGlzY2FyZCBtZW1vcnkgcmVxdWVzdCBvdXRzaWRlIG9mIGNvbmZpZ3VyZWQgcmFuZ2UgKi8KIAl0bXAgPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSB8IFJBREVPTl9ESVNfT1VUX09GX1BDSV9HQVJUX0FDQ0VTUzsKIAlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCB0bXApOwogCS8qIHNldCBhZGRyZXNzIHJhbmdlIGZvciBQQ0kgYWRkcmVzcyB0cmFuc2xhdGUgKi8KLQlXUkVHMzIoUkFERU9OX0FJQ19MT19BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzIoUkFERU9OX0FJQ19ISV9BRERSLCB0bXApOworCVdSRUczMihSQURFT05fQUlDX0xPX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCk7CisJV1JFRzMyKFJBREVPTl9BSUNfSElfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAJLyogc2V0IFBDSSBHQVJUIHBhZ2UtdGFibGUgYmFzZSBhZGRyZXNzICovCiAJV1JFRzMyKFJBREVPTl9BSUNfUFRfQkFTRSwgcmRldi0+Z2FydC50YWJsZV9hZGRyKTsKIAl0bXAgPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSB8IFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTjsKQEAgLTMxMiw5ICszMTIsMTEgQEAKIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwogCQlpZiAoc3RhdHVzICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpIHsKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDApOworCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkgewogCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKIAkJfQogCQlpZiAoc3RhdHVzICYgUkFERU9OX0ZQX0RFVEVDVF9TVEFUKSB7CiAJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKQEAgLTM2Niw4ICszNjgsOCBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1JCM0RfWkNBQ0hFX0NUTFNUQVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fUkIzRF9aQ19GTFVTSF9BTEwpOwogCS8qIFdhaXQgdW50aWwgSURMRSAmIENMRUFOICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDE3MjAsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCAxNikgfCAoMSA8PCAxNykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fV0FJVF8yRF9JRExFQ0xFQU4gfCBSQURFT05fV0FJVF8zRF9JRExFQ0xFQU4pOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnIxMDAuaGRwX2NudGwgfAogCQkJCVJBREVPTl9IRFBfUkVBRF9CVUZGRVJfSU5WQUxJREFURSk7CkBAIC0xNzAxLDcgKzE3MDMsNyBAQAogCX0KIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9SQkJNX1NUQVRVUyk7Ci0JCWlmICghKHRtcCAmICgxIDw8IDMxKSkpIHsKKwkJaWYgKCEodG1wICYgUkFERU9OX1JCQk1fQUNUSVZFKSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTE3MTYsOCArMTcxOCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJLyogcmVhZCBNQ19TVEFUVVMgKi8KLQkJdG1wID0gUlJFRzMyKDB4MDE1MCk7Ci0JCWlmICh0bXAgJiAoMSA8PCAyKSkgeworCQl0bXAgPSBSUkVHMzIoUkFERU9OX01DX1NUQVRVUyk7CisJCWlmICh0bXAgJiBSQURFT05fTUNfSURMRSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTE3OTAsNyArMTc5Miw3IEBACiAJfQogCS8qIENoZWNrIGlmIEdQVSBpcyBpZGxlICovCiAJc3RhdHVzID0gUlJFRzMyKFJBREVPTl9SQkJNX1NUQVRVUyk7Ci0JaWYgKHN0YXR1cyAmICgxIDw8IDMxKSkgeworCWlmIChzdGF0dXMgJiBSQURFT05fUkJCTV9BQ1RJVkUpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzZXQgR1BVIChSQkJNX1NUQVRVUz0weCUwOFgpXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTgwMCw2ICsxODAyLDkgQEAKIAogdm9pZCByMTAwX3NldF9jb21tb25fcmVncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmRldi0+ZGRldjsKKwlib29sIGZvcmNlX2RhYzIgPSBmYWxzZTsKKwogCS8qIHNldCB0aGVzZSBzbyB0aGV5IGRvbid0IGludGVyZmVyZSB3aXRoIGFueXRoaW5nICovCiAJV1JFRzMyKFJBREVPTl9PVjBfU0NBTEVfQ05UTCwgMCk7CiAJV1JFRzMyKFJBREVPTl9TVUJQSUNfQ05UTCwgMCk7CkBAIC0xODA4LDYgKzE4MTMsNjggQEAKIAlXUkVHMzIoUkFERU9OX0RWSV9JMkNfQ05UTF8xLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NBUDBfVFJJR19DTlRMLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NBUDFfVFJJR19DTlRMLCAwKTsKKworCS8qIGFsd2F5cyBzZXQgdXAgZGFjMiBvbiBybjUwIGFuZCBzb21lIHJ2MTAwIGFzIGxvdHMKKwkgKiBvZiBzZXJ2ZXJzIHNlZW0gdG8gd2lyZSBpdCB1cCB0byBhIFZHQSBwb3J0IGJ1dAorCSAqIGRvbid0IHJlcG9ydCBpdCBpbiB0aGUgYmlvcyBjb25uZWN0b3IKKwkgKiB0YWJsZS4KKwkgKi8KKwlzd2l0Y2ggKGRldi0+cGRldi0+ZGV2aWNlKSB7CisJCS8qIFJONTAgKi8KKwljYXNlIDB4NTE1ZToKKwljYXNlIDB4NTk2OToKKwkJZm9yY2VfZGFjMiA9IHRydWU7CisJCWJyZWFrOworCQkvKiBSVjEwMCovCisJY2FzZSAweDUxNTk6CisJY2FzZSAweDUxNWE6CisJCS8qIERFTEwgdHJpcGxlIGhlYWQgc2VydmVycyAqLworCQlpZiAoKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjggLyogREVMTCAqLykgJiYKKwkJICAgICgoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2YykgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZikgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3MCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3ZCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3ZSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE4MykgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE4YSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE5YSkpKQorCQkJZm9yY2VfZGFjMiA9IHRydWU7CisJCWJyZWFrOworCX0KKworCWlmIChmb3JjZV9kYWMyKSB7CisJCXUzMiBkaXNwX2h3X2RlYnVnID0gUlJFRzMyKFJBREVPTl9ESVNQX0hXX0RFQlVHKTsKKwkJdTMyIHR2X2RhY19jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJCXUzMiBkYWMyX2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMik7CisKKwkJLyogRm9yIENSVCBvbiBEQUMyLCBkb24ndCB0dXJuIGl0IG9uIGlmIEJJT1MgZGlkbid0CisJCSAgIGVuYWJsZSBpdCwgZXZlbiBpdCdzIGRldGVjdGVkLgorCQkqLworCisJCS8qIGZvcmNlIGl0IHRvIGNydGMwICovCisJCWRhYzJfY250bCAmPSB+UkFERU9OX0RBQzJfREFDX0NMS19TRUw7CisJCWRhYzJfY250bCB8PSBSQURFT05fREFDMl9EQUMyX0NMS19TRUw7CisJCWRpc3BfaHdfZGVidWcgfD0gUkFERU9OX0NSVDJfRElTUDFfU0VMOworCisJCS8qIHNldCB1cCB0aGUgVFYgREFDICovCisJCXR2X2RhY19jbnRsICY9IH4oUkFERU9OX1RWX0RBQ19QRURFU1RBTCB8CisJCQkJIFJBREVPTl9UVl9EQUNfU1REX01BU0sgfAorCQkJCSBSQURFT05fVFZfREFDX1JEQUNQRCB8CisJCQkJIFJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkgUkFERU9OX1RWX0RBQ19CREFDUEQgfAorCQkJCSBSQURFT05fVFZfREFDX0JHQURKX01BU0sgfAorCQkJCSBSQURFT05fVFZfREFDX0RBQ0FESl9NQVNLKTsKKwkJdHZfZGFjX2NudGwgfD0gKFJBREVPTl9UVl9EQUNfTkJMQU5LIHwKKwkJCQlSQURFT05fVFZfREFDX05IT0xEIHwKKwkJCQlSQURFT05fVFZfREFDX1NURF9QUzIgfAorCQkJCSgweDU4IDw8IDE2KSk7CisKKwkJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOworCQlXUkVHMzIoUkFERU9OX0RJU1BfSFdfREVCVUcsIGRpc3BfaHdfZGVidWcpOworCQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKKwl9CiB9CiAKIC8qCkBAIC0xODg5LDE3ICsxOTU2LDIwIEBACiB2b2lkIHIxMDBfdnJhbV9pbml0X3NpemVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXU2NCBjb25maWdfYXBlcl9zaXplOwotCXUzMiBhY2Nlc3NpYmxlOwogCisJLyogd29yayBvdXQgYWNjZXNzaWJsZSBWUkFNICovCisJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHIxMDBfZ2V0X2FjY2Vzc2libGVfdnJhbShyZGV2KTsKKwkvKiBGSVhNRSB3ZSBkb24ndCB1c2UgdGhlIHNlY29uZCBhcGVydHVyZSB5ZXQgd2hlbiB3ZSBjb3VsZCB1c2UgaXQgKi8KKwlpZiAocmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJCXJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwogCWNvbmZpZ19hcGVyX3NpemUgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19BUEVSX1NJWkUpOwotCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewogCQl1aW50MzJfdCB0b207CiAJCS8qIHJlYWQgTkJfVE9NIHRvIGdldCB0aGUgYW1vdW50IG9mIHJhbSBzdG9sZW4gZm9yIHRoZSBHUFUgKi8KIAkJdG9tID0gUlJFRzMyKFJBREVPTl9OQl9UT00pOwogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9ICgoKHRvbSA+PiAxNikgLSAodG9tICYgMHhmZmZmKSArIDEpIDw8IDE2KTsKLQkJLyogZm9yIElHUHMgd2UgbmVlZCB0byBrZWVwIFZSQU0gd2hlcmUgaXQgd2FzIHB1dCBieSB0aGUgQklPUyAqLwotCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKHRvbSAmIDB4ZmZmZikgPDwgMTY7CiAJCVdSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7CiAJfSBlbHNlIHsKQEAgLTE5MTEsMzAgKzE5ODEsMTkgQEAKIAkJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gODE5MiAqIDEwMjQ7CiAJCQlXUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7CiAJCX0KLQkJLyogbGV0IGRyaXZlciBwbGFjZSBWUkFNICovCi0JCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JCSAvKiBGaXggZm9yIFJONTAsIE02LCBNNyB3aXRoIDgvMTYvMzIoPz8pIE1CcyBvZiBWUkFNIC0gCi0JCSAgKiBOb3ZlbGwgYnVnIDIwNDg4MiArIGFsb25nIHdpdGggbG90cyBvZiB1YnVudHUgb25lcyAqLworCQkvKiBGaXggZm9yIFJONTAsIE02LCBNNyB3aXRoIDgvMTYvMzIoPz8pIE1CcyBvZiBWUkFNIC0gCisJCSAqIE5vdmVsbCBidWcgMjA0ODgyICsgYWxvbmcgd2l0aCBsb3RzIG9mIHVidW50dSBvbmVzCisJCSAqLwogCQlpZiAoY29uZmlnX2FwZXJfc2l6ZSA+IHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKQogCQkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gY29uZmlnX2FwZXJfc2l6ZTsKIAkJZWxzZQogCQkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7CiAJfQotCi0JLyogd29yayBvdXQgYWNjZXNzaWJsZSBWUkFNICovCi0JYWNjZXNzaWJsZSA9IHIxMDBfZ2V0X2FjY2Vzc2libGVfdnJhbShyZGV2KTsKLQotCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7Ci0JcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7Ci0KLQlpZiAoYWNjZXNzaWJsZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKLQkJYWNjZXNzaWJsZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJLyogRklYTUUgcmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHVubWFwcGFibGUgVlJBTSAqLworCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpIHsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwl9CiB9CiAKIHZvaWQgcjEwMF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKQpAQCAtMTk1MSwxMSArMjAxMCwxOCBAQAogCVdSRUczMihSQURFT05fQ09ORklHX0NOVEwsIHRlbXApOwogfQogCi12b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcjEwMF92cmFtX2dldF90eXBlKHJkZXYpOworCXU2NCBiYXNlOwogCisJcjEwMF92cmFtX2dldF90eXBlKHJkZXYpOwogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCWJhc2UgPSByZGV2LT5tYy5hcGVyX2Jhc2U7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJYmFzZSA9IChSUkVHMzIoUkFERU9OX05CX1RPTSkgJiAweGZmZmYpIDw8IDE2OworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKKwkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogfQogCiAKQEAgLTMyMjYsMTAgKzMyOTIsOSBAQAogdm9pZCByMTAwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfbWNfc2F2ZSAqc2F2ZSkKIHsKIAkvKiBVcGRhdGUgYmFzZSBhZGRyZXNzIGZvciBjcnRjICovCi0JV1JFRzMyKFJfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKKwlXUkVHMzIoUl8wMDAyM0NfRElTUExBWV9CQVNFX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwogCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKSkgewotCQlXUkVHMzIoUl8wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIsCi0JCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbik7CisJCVdSRUczMihSXzAwMDMzQ19DUlRDMl9ESVNQTEFZX0JBU0VfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJfQogCS8qIFJlc3RvcmUgQ1JUQyByZWdpc3RlcnMgKi8KIAlXUkVHOChSXzAwMDNDMl9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOwpAQCAtMzM5MCwzMiArMzQ1NSw2IEBACiAJcmRldi0+YmlvcyA9IE5VTEw7CiB9CiAKLWludCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0JdTMyIHRtcDsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7Ci0JCXRtcCA9IEdfMDAwMTVDX01DX0ZCX1NUQVJUKFJSRUczMihSXzAwMDE1Q19OQl9UT00pKTsKLQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IHRtcCA8PCAxNjsKLQl9Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CkBAIC0zNDU4LDEyICszNDk3LDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXIxMDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBWUkFNICovCisJcjEwMF9tY19pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCmluZGV4IGZmMWUwY2QuLjExNDZjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogCisjaW5jbHVkZSAicjEwMGQuaCIKICNpbmNsdWRlICJyMjAwX3JlZ19zYWZlLmgiCiAKICNpbmNsdWRlICJyMTAwX3RyYWNrLmgiCkBAIC03OSw2ICs4MCw1MSBAQAogCXJldHVybiB2dHhfc2l6ZTsKIH0KIAoraW50IHIyMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSAgdWludDY0X3Qgc3JjX29mZnNldCwKKwkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkgIHVuc2lnbmVkIG51bV9wYWdlcywKKwkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKK3sKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IGN1cl9zaXplOworCWludCBpLCBudW1fbG9vcHM7CisJaW50IHIgPSAwOworCisJLyogcmFkZW9uIHBpdGNoIGlzIC82NCAqLworCXNpemUgPSBudW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwludW1fbG9vcHMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgMHgxRkZGRkYpOworCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIG51bV9sb29wcyAqIDQgKyA2NCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IG1vdmluZyBibyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwkvKiBNdXN0IHdhaXQgZm9yIDJEIGlkbGUgJiBjbGVhbiBiZWZvcmUgRE1BIG9yIGhhbmdzIG1pZ2h0IGhhcHBlbiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCAxNikpOworCWZvciAoaSA9IDA7IGkgPCBudW1fbG9vcHM7IGkrKykgeworCQljdXJfc2l6ZSA9IHNpemU7CisJCWlmIChjdXJfc2l6ZSA+IDB4MUZGRkZGKSB7CisJCQljdXJfc2l6ZSA9IDB4MUZGRkZGOworCQl9CisJCXNpemUgLT0gY3VyX3NpemU7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg3MjAsIDIpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3JjX29mZnNldCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGRzdF9vZmZzZXQpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBjdXJfc2l6ZSB8ICgxIDw8IDMxKSB8ICgxIDw8IDMwKSk7CisJCXNyY19vZmZzZXQgKz0gY3VyX3NpemU7CisJCWRzdF9vZmZzZXQgKz0gY3VyX3NpemU7CisJfQorCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fV0FJVF9ETUFfR1VJX0lETEUpOworCWlmIChmZW5jZSkgeworCQlyID0gcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgZmVuY2UpOworCX0KKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCXJldHVybiByOworfQorCisKIHN0YXRpYyBpbnQgcjIwMF9nZXRfdnR4X3NpemVfMSh1aW50MzJfdCB2dHhfZm10XzEpCiB7CiAJaW50IHZ0eF9zaXplLCBpLCB0ZXhfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggNDNiNTVhMC4uNGNlZjkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTExNywxOCArMTE3LDE5IEBACiAJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwlyYWRlb25fZ2FydF9yZXN0b3JlKHJkZXYpOwogCS8qIGRpc2NhcmQgbWVtb3J5IHJlcXVlc3Qgb3V0c2lkZSBvZiBjb25maWd1cmVkIHJhbmdlICovCiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7Ci0JV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9HUFVfUEFHRV9TSVpFOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfU1RBUlRfTE8sIHJkZXYtPm1jLmd0dF9zdGFydCk7CisJdG1wID0gcmRldi0+bWMuZ3R0X2VuZCAmIH5SQURFT05fR1BVX1BBR0VfTUFTSzsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CiAJdGFibGVfYWRkciA9IHJkZXYtPmdhcnQudGFibGVfYWRkcjsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0JBU0UsIHRhYmxlX2FkZHIpOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9ESVNDQVJEX1JEX0FERFJfTE8sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwogCVdSRUczMl9QQ0lFKDB4MTgsIDApOwpAQCAtMTc0LDE4ICsxNzUsMjAgQEAKIAkvKiBXaG8gZXZlciBjYWxsIHJhZGVvbl9mZW5jZV9lbWl0IHNob3VsZCBjYWxsIHJpbmdfbG9jayBhbmQgYXNrCiAJICogZm9yIGVub3VnaCBzcGFjZSAodG9kYXkgY2FsbGVyIGFyZSBpYiBzY2hlZHVsZSBhbmQgYnVmZmVyIG1vdmUpICovCiAJLyogV3JpdGUgU0MgcmVnaXN0ZXIgc28gU0MgJiBVUyBhc3NlcnQgaWRsZSAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0M0UwLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSMzAwX1JFX1NDSVNTT1JTX1RMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDQzRTQsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfUkVfU0NJU1NPUlNfQlIsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAkvKiBGbHVzaCAzRCBjYWNoZSAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0RTRDLCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKDIgPDwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0RjE4LCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKDEgPDwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9SQjNEX0RTVENBQ0hFX0NUTFNUQVQsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1JCM0RfRENfRkxVU0gpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9SQjNEX1pDQUNIRV9DVExTVEFULCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUjMwMF9aQ19GTFVTSCk7CiAJLyogV2FpdCB1bnRpbCBJRExFICYgQ0xFQU4gKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcyMCwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE3KSB8ICgxIDw8IDE2KSAgfCAoMSA8PCA5KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fV0FJVF9VTlRJTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChSQURFT05fV0FJVF8zRF9JRExFQ0xFQU4gfAorCQkJCSBSQURFT05fV0FJVF8yRF9JRExFQ0xFQU4gfAorCQkJCSBSQURFT05fV0FJVF9ETUFfR1VJX0lETEUpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5yMzAwLmhkcF9jbnRsIHwKIAkJCQlSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwpAQCAtMTk4LDUwICsyMDEsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLWludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCi0JCSAgdWludDY0X3QgZHN0X29mZnNldCwKLQkJICB1bnNpZ25lZCBudW1fcGFnZXMsCi0JCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCi17Ci0JdWludDMyX3Qgc2l6ZTsKLQl1aW50MzJfdCBjdXJfc2l6ZTsKLQlpbnQgaSwgbnVtX2xvb3BzOwotCWludCByID0gMDsKLQotCS8qIHJhZGVvbiBwaXRjaCBpcyAvNjQgKi8KLQlzaXplID0gbnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7Ci0JbnVtX2xvb3BzID0gRElWX1JPVU5EX1VQKHNpemUsIDB4MUZGRkZGKTsKLQlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCBudW1fbG9vcHMgKiA0ICsgNjQpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBtb3ZpbmcgYm8gKCVkKS5cbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0JLyogTXVzdCB3YWl0IGZvciAyRCBpZGxlICYgY2xlYW4gYmVmb3JlIERNQSBvciBoYW5ncyBtaWdodCBoYXBwZW4gKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9XQUlUX1VOVElMLCAwICkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE2KSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9sb29wczsgaSsrKSB7Ci0JCWN1cl9zaXplID0gc2l6ZTsKLQkJaWYgKGN1cl9zaXplID4gMHgxRkZGRkYpIHsKLQkJCWN1cl9zaXplID0gMHgxRkZGRkY7Ci0JCX0KLQkJc2l6ZSAtPSBjdXJfc2l6ZTsKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDcyMCwgMikpOwotCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcmNfb2Zmc2V0KTsKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHN0X29mZnNldCk7Ci0JCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGN1cl9zaXplIHwgKDEgPDwgMzEpIHwgKDEgPDwgMzApKTsKLQkJc3JjX29mZnNldCArPSBjdXJfc2l6ZTsKLQkJZHN0X29mZnNldCArPSBjdXJfc2l6ZTsKLQl9Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fV0FJVF9VTlRJTCwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9XQUlUX0RNQV9HVUlfSURMRSk7Ci0JaWYgKGZlbmNlKSB7Ci0JCXIgPSByYWRlb25fZmVuY2VfZW1pdChyZGV2LCBmZW5jZSk7Ci0JfQotCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7Ci0JcmV0dXJuIHI7Ci19Ci0KIHZvaWQgcjMwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGdiX3RpbGVfY29uZmlnOwpAQCAtMjgxLDggKzI0MCw4IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKIAkJCSAgUkFERU9OX1dBSVRfMkRfSURMRUNMRUFOIHwKIAkJCSAgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9HQl9TRUxFQ1QsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfR0JfRU5BQkxFLCAwKSk7CkBAIC0zNDksOCArMzA4LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDQpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFIzMDBfTUNfSURMRSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTM5NSw4ICszNTQsOCBAQAogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXRtcCA9IFJSRUczMigweDE3MEMpOwotCVdSRUczMigweDE3MEMsIHRtcCB8ICgxIDw8IDMxKSk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKKwlXUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcsIHRtcCB8IFIzMDBfUElQRV9BVVRPX0NPTkZJRyk7CiAKIAlXUkVHMzIoUjMwMF9SQjJEX0RTVENBQ0hFX01PREUsCiAJICAgICAgIFIzMDBfRENfQVVUT0ZMVVNIX0VOQUJMRSB8CkBAIC00MzcsOCArMzk2LDggQEAKIAkJCS8qIEdBIHN0aWxsIGJ1c3kgc29mdCByZXNldCBpdCAqLwogCQkJV1JFRzMyKDB4NDI5QywgMHgyMDApOwogCQkJV1JFRzMyKFIzMDBfVkFQX1BWU19TVEFURV9GTFVTSF9SRUcsIDApOwotCQkJV1JFRzMyKDB4NDNFMCwgMCk7Ci0JCQlXUkVHMzIoMHg0M0U0LCAwKTsKKwkJCVdSRUczMihSMzAwX1JFX1NDSVNTT1JTX1RMLCAwKTsKKwkJCVdSRUczMihSMzAwX1JFX1NDSVNTT1JTX0JSLCAwKTsKIAkJCVdSRUczMigweDI0QUMsIDApOwogCQl9CiAJCS8qIFdhaXQgdG8gcHJldmVudCByYWNlIGluIFJCQk1fU1RBVFVTICovCkBAIC00ODgsNyArNDQ3LDcgQEAKIAl9CiAJLyogQ2hlY2sgaWYgR1BVIGlzIGlkbGUgKi8KIAlzdGF0dXMgPSBSUkVHMzIoUkFERU9OX1JCQk1fU1RBVFVTKTsKLQlpZiAoc3RhdHVzICYgKDEgPDwgMzEpKSB7CisJaWYgKHN0YXR1cyAmIFJBREVPTl9SQkJNX0FDVElWRSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBHUFUgKFJCQk1fU1RBVFVTPTB4JTA4WClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC01MDAsMTMgKzQ1OSwxMyBAQAogLyoKICAqIHIzMDAscjM1MCxydjM1MCxydjM4MCBWUkFNIGluZm8KICAqLwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjMwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1NjQgYmFzZTsKKwl1MzIgdG1wOwogCiAJLyogRERSIGZvciBhbGwgY2FyZCBhZnRlciBSMzAwICYgSUdQICovCiAJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwotCiAJdG1wID0gUlJFRzMyKFJBREVPTl9NRU1fQ05UTCk7CiAJdG1wICY9IFIzMDBfTUVNX05VTV9DSEFOTkVMU19NQVNLOwogCXN3aXRjaCAodG1wKSB7CkBAIC01MTUsOCArNDc0LDEzIEBACiAJY2FzZSAyOiByZGV2LT5tYy52cmFtX3dpZHRoID0gMjU2OyBicmVhazsKIAlkZWZhdWx0OiAgcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsgYnJlYWs7CiAJfQotCiAJcjEwMF92cmFtX2luaXRfc2l6ZXMocmRldik7CisJYmFzZSA9IHJkZXYtPm1jLmFwZXJfYmFzZTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQliYXNlID0gKFJSRUczMihSQURFT05fTkJfVE9NKSAmIDB4ZmZmZikgPDwgMTY7CisJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKQorCQlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiB9CiAKIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcykKQEAgLTU3OCw2ICs1NDIsNDAgQEAKIAogfQogCitpbnQgcnYzNzBfZ2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIGxpbmtfd2lkdGhfY250bDsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJldHVybiAwOworCisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCisJCXJldHVybiAwOworCisJLyogRklYTUUgd2FpdCBmb3IgaWRsZSAqLworCisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjYwMCkKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUUoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKwllbHNlCisJCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKworCXN3aXRjaCAoKGxpbmtfd2lkdGhfY250bCAmIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfUkRfTUFTSykgPj4gUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9SRF9TSElGVCkgeworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YMDoKKwkJcmV0dXJuIDA7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1gxOgorCQlyZXR1cm4gMTsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDI6CisJCXJldHVybiAyOworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YNDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1g4OgorCQlyZXR1cm4gODsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDE2OgorCWRlZmF1bHQ6CisJCXJldHVybiAxNjsKKwl9Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC03MDcsNiArNzA1LDggQEAKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9UWE9fTUFDUk9fVElMRTsKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfVFhPX01JQ1JPX1RJTEU7CisJCWVsc2UgaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk9fU1FVQVJFKQorCQkJdGlsZV9mbGFncyB8PSBSMzAwX1RYT19NSUNST19USUxFX1NRVUFSRTsKIAogCQl0bXAgPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CkBAIC03NTcsNiArNzU3LDggQEAKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9DT0xPUl9USUxFX0VOQUJMRTsKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKKwkJZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNST19TUVVBUkUpCisJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX1NRVUFSRV9FTkFCTEU7CiAKIAkJdG1wID0gaWR4X3ZhbHVlICYgfigweDcgPDwgMTYpOwogCQl0bXAgfD0gdGlsZV9mbGFnczsKQEAgLTgyOCw3ICs4MzAsOSBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1BQ1JPVElMRV9FTkFCTEU7CiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQotCQkJdGlsZV9mbGFncyB8PSBSMzAwX0RFUFRITUlDUk9USUxFX1RJTEVEOzsKKwkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1JQ1JPVElMRV9USUxFRDsKKwkJZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNST19TUVVBUkUpCisJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfREVQVEhNSUNST1RJTEVfVElMRURfU1FVQVJFOwogCiAJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CkBAIC0xMzg3LDEyICsxMzkxLDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXIzMDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXIzMDBfbWNfaW5pdChyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwogCWlmIChyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IDM0YmZmYTAuLmVhNDZkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fYnVmZmVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKICNpbmNsdWRlICJyMzAwX3JlZy5oIgpAQCAtMjk5LDQ2ICszMDAsNDIgQEAKIAlpbnQgcmVnOwogCWludCBzejsKIAlpbnQgaTsKLQlpbnQgdmFsdWVzWzY0XTsKKwl1MzIgKnZhbHVlOwogCVJJTkdfTE9DQUxTOwogCiAJc3ogPSBoZWFkZXIucGFja2V0MC5jb3VudDsKIAlyZWcgPSAoaGVhZGVyLnBhY2tldDAucmVnaGkgPDwgOCkgfCBoZWFkZXIucGFja2V0MC5yZWdsbzsKIAogCWlmICgoc3ogPiA2NCkgfHwgKHN6IDwgMCkpIHsKLQkJRFJNX0VSUk9SCi0JCSAgICAoIkNhbm5vdCBlbWl0IG1vcmUgdGhhbiA2NCB2YWx1ZXMgYXQgYSB0aW1lIChyZWc9JTA0eCBzej0lZClcbiIsCi0JCSAgICAgcmVnLCBzeik7CisJCURSTV9FUlJPUigiQ2Fubm90IGVtaXQgbW9yZSB0aGFuIDY0IHZhbHVlcyBhdCBhIHRpbWUgKHJlZz0lMDR4IHN6PSVkKVxuIiwKKwkJCSByZWcsIHN6KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCiAJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKLQkJdmFsdWVzW2ldID0gKChpbnQgKiljbWRidWYtPmJ1ZilbaV07CiAJCXN3aXRjaCAocjMwMF9yZWdfZmxhZ3NbKHJlZyA+PiAyKSArIGldKSB7CiAJCWNhc2UgTUFSS19TQUZFOgogCQkJYnJlYWs7CiAJCWNhc2UgTUFSS19DSEVDS19PRkZTRVQ6Ci0JCQlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsICh1MzIpIHZhbHVlc1tpXSkpIHsKLQkJCQlEUk1fRVJST1IKLQkJCQkgICAgKCJPZmZzZXQgZmFpbGVkIHJhbmdlIGNoZWNrIChyZWc9JTA0eCBzej0lZClcbiIsCi0JCQkJICAgICByZWcsIHN6KTsKKwkJCXZhbHVlID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgKnZhbHVlKSkgeworCQkJCURSTV9FUlJPUigiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAocmVnPSUwNHggc3o9JWQpXG4iLAorCQkJCQkgcmVnLCBzeik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiUmVnaXN0ZXIgJTA0eCBmYWlsZWQgY2hlY2sgYXMgZmxhZz0lMDJ4XG4iLAotCQkJCSAgcmVnICsgaSAqIDQsIHIzMDBfcmVnX2ZsYWdzWyhyZWcgPj4gMikgKyBpXSk7CisJCQkJcmVnICsgaSAqIDQsIHIzMDBfcmVnX2ZsYWdzWyhyZWcgPj4gMikgKyBpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCUJFR0lOX1JJTkcoMSArIHN6KTsKIAlPVVRfUklORyhDUF9QQUNLRVQwKHJlZywgc3ogLSAxKSk7Ci0JT1VUX1JJTkdfVEFCTEUodmFsdWVzLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3ogKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiA0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Miw3ICszNTksNyBAQAogCWlmICghc3opCiAJCXJldHVybiAwOwogCi0JaWYgKHN6ICogNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZWcgKyBzeiAqIDQgPj0gMHgxMDAwMCkgewpAQCAtMzgwLDEyICszNzcsOSBAQAogCiAJQkVHSU5fUklORygxICsgc3opOwogCU9VVF9SSU5HKENQX1BBQ0tFVDAocmVnLCBzeiAtIDEpKTsKLQlPVVRfUklOR19UQUJMRSgoaW50ICopY21kYnVmLT5idWYsIHN6KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBzeik7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSBzeiAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIDQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA3LDcgKzQwMSw3IEBACiAKIAlpZiAoIXN6KQogCQlyZXR1cm4gMDsKLQlpZiAoc3ogKiAxNiA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogMTYgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBWQVAgaXMgdmVyeSBzZW5zaXRpdmUgc28gd2UgcHVyZ2UgY2FjaGUgYmVmb3JlIHdlIHByb2dyYW0gaXQKQEAgLTQyNiw3ICs0MjAsNyBAQAogCUJFR0lOX1JJTkcoMyArIHN6ICogNCk7CiAJT1VUX1JJTkdfUkVHKFIzMDBfVkFQX1BWU19VUExPQURfQUREUkVTUywgYWRkcik7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMF9UQUJMRShSMzAwX1ZBUF9QVlNfVVBMT0FEX0RBVEEsIHN6ICogNCAtIDEpKTsKLQlPVVRfUklOR19UQUJMRSgoaW50ICopY21kYnVmLT5idWYsIHN6ICogNCk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3ogKiA0KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAogCUJFR0lOX1JJTkcoMik7CkBAIC00MzQsOSArNDI4LDYgQEAKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6ICogMTY7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIDE2OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0OSwxNCArNDQwLDE0IEBACiB7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoOCAqIDQgPiBjbWRidWYtPmJ1ZnN6KQorCWlmICg4ICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUJFR0lOX1JJTkcoMTApOwogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjIwMF8zRF9EUkFXX0lNTURfMiwgOCkpOwogCU9VVF9SSU5HKFIzMDBfUFJJTV9UWVBFX1BPSU5UIHwgUjMwMF9QUklNX1dBTEtfUklORyB8CiAJCSAoMSA8PCBSMzAwX1BSSU1fTlVNX1ZFUlRJQ0VTX1NISUZUKSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKWNtZGJ1Zi0+YnVmLCA4KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCA4KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAogCUJFR0lOX1JJTkcoNCk7CkBAIC00NjgsOSArNDU5LDYgQEAKIAkvKiBzZXQgZmx1c2ggZmxhZyAqLwogCWRldl9wcml2LT50cmFja19mbHVzaCB8PSBSQURFT05fRkxVU0hfRU1JVEVEOwogCi0JY21kYnVmLT5idWYgKz0gOCAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSA4ICogNDsKLQogCXJldHVybiAwOwogfQogCkBAIC00ODAsMjggKzQ2OCwyOSBAQAogewogCWludCBjb3VudCwgaSwgazsKICNkZWZpbmUgTUFYX0FSUkFZX1BBQ0tFVCAgNjQKLQl1MzIgcGF5bG9hZFtNQVhfQVJSQVlfUEFDS0VUXTsKKwl1MzIgKmRhdGE7CiAJdTMyIG5hcnJheXM7CiAJUklOR19MT0NBTFM7CiAKLQljb3VudCA9IChoZWFkZXIgPj4gMTYpICYgMHgzZmZmOworCWNvdW50ID0gKGhlYWRlciAmIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSykgPj4gMTY7CiAKIAlpZiAoKGNvdW50ICsgMSkgPiBNQVhfQVJSQVlfUEFDS0VUKSB7CiAJCURSTV9FUlJPUigiVG9vIGxhcmdlIHBheWxvYWQgaW4gM0RfTE9BRF9WQlBOVFIgKGNvdW50PSVkKVxuIiwKIAkJCSAgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JbWVtc2V0KHBheWxvYWQsIDAsIE1BWF9BUlJBWV9QQUNLRVQgKiA0KTsKLQltZW1jcHkocGF5bG9hZCwgY21kYnVmLT5idWYgKyA0LCAoY291bnQgKyAxKSAqIDQpOwotCiAJLyogY2FyZWZ1bGx5IGNoZWNrIHBhY2tldCBjb250ZW50cyAqLwogCi0JbmFycmF5cyA9IHBheWxvYWRbMF07CisJLyogV2UgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGhlYWRlciBzbyBhZHZhbmNlIHRoZSBidWZmZXIuICovCisJZHJtX2J1ZmZlcl9hZHZhbmNlKGNtZGJ1Zi0+YnVmZmVyLCA0KTsKKworCW5hcnJheXMgPSAqKHUzMiAqKWRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMCk7CiAJayA9IDA7CiAJaSA9IDE7CiAJd2hpbGUgKChrIDwgbmFycmF5cykgJiYgKGkgPCAoY291bnQgKyAxKSkpIHsKIAkJaSsrOwkJLyogc2tpcCBhdHRyaWJ1dGUgZmllbGQgKi8KLQkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgeworCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCAqZGF0YSkpIHsKIAkJCURSTV9FUlJPUgogCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCiAJCQkgICAgIGssIGkpOwpAQCAtNTEyLDcgKzUwMSw4IEBACiAJCWlmIChrID09IG5hcnJheXMpCiAJCQlicmVhazsKIAkJLyogaGF2ZSBvbmUgbW9yZSB0byBwcm9jZXNzLCB0aGV5IGNvbWUgaW4gcGFpcnMgKi8KLQkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgeworCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCAqZGF0YSkpIHsKIAkJCURSTV9FUlJPUgogCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCiAJCQkgICAgIGssIGkpOwpAQCAtNTMzLDMwICs1MjMsMzAgQEAKIAogCUJFR0lOX1JJTkcoY291bnQgKyAyKTsKIAlPVVRfUklORyhoZWFkZXIpOwotCU9VVF9SSU5HX1RBQkxFKHBheWxvYWQsIGNvdW50ICsgMSk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgY291bnQgKyAxKTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IChjb3VudCArIDIpICogNDsKLQljbWRidWYtPmJ1ZnN6IC09IChjb3VudCArIDIpICogNDsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X2JpdGJsdF9tdWx0aShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyICpjbWQgPSAodTMyICopIGNtZGJ1Zi0+YnVmOworCXUzMiAqY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKIAlpbnQgY291bnQsIHJldDsKIAlSSU5HX0xPQ0FMUzsKIAotCWNvdW50PShjbWRbMF0+PjE2KSAmIDB4M2ZmZjsKIAotCWlmIChjbWRbMF0gJiAweDgwMDApIHsKKwljb3VudCA9ICgqY21kICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLKSA+PiAxNjsKKworCWlmICgqY21kICYgMHg4MDAwKSB7CiAJCXUzMiBvZmZzZXQ7Ci0KLQkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAorCQl1MzIgKmNtZDEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCQlpZiAoKmNtZDEgJiAoUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwKIAkJCSAgICAgIHwgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7Ci0JCQlvZmZzZXQgPSBjbWRbMl0gPDwgMTA7CisKKwkJCXUzMiAqY21kMiA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMik7CisJCQlvZmZzZXQgPSAqY21kMiA8PCAxMDsKIAkJCXJldCA9ICFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmZzZXQpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBiaXRibHQgZmlyc3Qgb2Zmc2V0IGlzICUwOFhcbiIsIG9mZnNldCk7CkBAIC01NjQsOSArNTU0LDEwIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoKGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgotCQkgICAgKGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgewotCQkJb2Zmc2V0ID0gY21kWzNdIDw8IDEwOworCQlpZiAoKCpjbWQxICYgUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwpICYmCisJCSAgICAoKmNtZDEgJiBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKKwkJCXUzMiAqY21kMyA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMyk7CisJCQlvZmZzZXQgPSAqY21kMyA8PCAxMDsKIAkJCXJldCA9ICFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmZzZXQpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBiaXRibHQgc2Vjb25kIG9mZnNldCBpcyAlMDhYXG4iLCBvZmZzZXQpOwpAQCAtNTc3LDI4ICs1NjgsMjUgQEAKIAl9CiAKIAlCRUdJTl9SSU5HKGNvdW50KzIpOwotCU9VVF9SSU5HKGNtZFswXSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKShjbWRidWYtPmJ1ZiArIDQpLCBjb3VudCArIDEpOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIGNvdW50ICsgMik7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSAoY291bnQrMikqNDsKLQljbWRidWYtPmJ1ZnN6IC09IChjb3VudCsyKSo0OwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfZHJhd19pbmR4XzIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJCQkgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyICpjbWQ7CisJdTMyICpjbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDApOworCXUzMiAqY21kMSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMSk7CiAJaW50IGNvdW50OwogCWludCBleHBlY3RlZF9jb3VudDsKIAlSSU5HX0xPQ0FMUzsKIAotCWNtZCA9ICh1MzIgKikgY21kYnVmLT5idWY7Ci0JY291bnQgPSAoY21kWzBdPj4xNikgJiAweDNmZmY7Ci0JZXhwZWN0ZWRfY291bnQgPSBjbWRbMV0gPj4gMTY7Ci0JaWYgKCEoY21kWzFdICYgUjMwMF9WQVBfVkZfQ05UTF9fSU5ERVhfU0laRV8zMmJpdCkpCisJY291bnQgPSAoKmNtZCAmIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSykgPj4gMTY7CisKKwlleHBlY3RlZF9jb3VudCA9ICpjbWQxID4+IDE2OworCWlmICghKCpjbWQxICYgUjMwMF9WQVBfVkZfQ05UTF9fSU5ERVhfU0laRV8zMmJpdCkpCiAJCWV4cGVjdGVkX2NvdW50ID0gKGV4cGVjdGVkX2NvdW50KzEpLzI7CiAKIAlpZiAoY291bnQgJiYgY291bnQgIT0gZXhwZWN0ZWRfY291bnQpIHsKQEAgLTYwOCw1NSArNTk2LDUzIEBACiAJfQogCiAJQkVHSU5fUklORyhjb3VudCsyKTsKLQlPVVRfUklORyhjbWRbMF0pOwotCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBjb3VudCArIDIpOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gKGNvdW50KzIpKjQ7Ci0JY21kYnVmLT5idWZzeiAtPSAoY291bnQrMikqNDsKLQogCWlmICghY291bnQpIHsKLQkJZHJtX3IzMDBfY21kX2hlYWRlcl90IGhlYWRlcjsKKwkJZHJtX3IzMDBfY21kX2hlYWRlcl90IHN0YWNrX2hlYWRlciwgKmhlYWRlcjsKKwkJdTMyICpjbWQxLCAqY21kMiwgKmNtZDM7CiAKLQkJaWYgKGNtZGJ1Zi0+YnVmc3ogPCA0KjQgKyBzaXplb2YoaGVhZGVyKSkgeworCQlpZiAoZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChjbWRidWYtPmJ1ZmZlcikKKwkJCQk8IDQqNCArIHNpemVvZihzdGFja19oZWFkZXIpKSB7CiAJCQlEUk1fRVJST1IoIjNEX0RSQVdfSU5EWF8yOiBleHBlY3Qgc3Vic2VxdWVudCBJTkRYX0JVRkZFUiwgYnV0IHN0cmVhbSBpcyB0b28gc2hvcnQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaGVhZGVyLnUgPSAqKHVuc2lnbmVkIGludCAqKWNtZGJ1Zi0+YnVmOworCQloZWFkZXIgPSBkcm1fYnVmZmVyX3JlYWRfb2JqZWN0KGNtZGJ1Zi0+YnVmZmVyLAorCQkJCXNpemVvZihzdGFja19oZWFkZXIpLCAmc3RhY2tfaGVhZGVyKTsKIAotCQljbWRidWYtPmJ1ZiArPSBzaXplb2YoaGVhZGVyKTsKLQkJY21kYnVmLT5idWZzeiAtPSBzaXplb2YoaGVhZGVyKTsKLQkJY21kID0gKHUzMiAqKSBjbWRidWYtPmJ1ZjsKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKKwkJY21kMSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMSk7CisJCWNtZDIgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDIpOworCQljbWQzID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAzKTsKIAotCQlpZiAoaGVhZGVyLmhlYWRlci5jbWRfdHlwZSAhPSBSMzAwX0NNRF9QQUNLRVQzIHx8Ci0JCSAgICBoZWFkZXIucGFja2V0My5wYWNrZXQgIT0gUjMwMF9DTURfUEFDS0VUM19SQVcgfHwKLQkJICAgIGNtZFswXSAhPSBDUF9QQUNLRVQzKFJBREVPTl9DUF9JTkRYX0JVRkZFUiwgMikpIHsKKwkJaWYgKGhlYWRlci0+aGVhZGVyLmNtZF90eXBlICE9IFIzMDBfQ01EX1BBQ0tFVDMgfHwKKwkJICAgIGhlYWRlci0+cGFja2V0My5wYWNrZXQgIT0gUjMwMF9DTURfUEFDS0VUM19SQVcgfHwKKwkJICAgICpjbWQgIT0gQ1BfUEFDS0VUMyhSQURFT05fQ1BfSU5EWF9CVUZGRVIsIDIpKSB7CiAJCQlEUk1fRVJST1IoIjNEX0RSQVdfSU5EWF8yOiBleHBlY3Qgc3Vic2VxdWVudCBJTkRYX0JVRkZFUi5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAoKGNtZFsxXSAmIDB4ODAwMGZmZmYpICE9IDB4ODAwMDA4MTApIHsKLQkJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciByZWcgYWRkcmVzcyAlMDhYXG4iLCBjbWRbMV0pOworCQlpZiAoKCpjbWQxICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIHJlZyBhZGRyZXNzICUwOFhcbiIsCisJCQkJCSpjbWQxKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgY21kWzJdKSkgewotCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIG9mZnNldCBpcyAlMDhYXG4iLCBjbWRbMl0pOworCQlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsICpjbWQyKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIG9mZnNldCBpcyAlMDhYXG4iLAorCQkJCQkqY21kMik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoY21kWzNdICE9IGV4cGVjdGVkX2NvdW50KSB7CisJCWlmICgqY21kMyAhPSBleHBlY3RlZF9jb3VudCkgewogCQkJRFJNX0VSUk9SKCJJTkRYX0JVRkZFUjogYnVmZmVyIHNpemUgJWksIGV4cGVjdGVkICVpXG4iLAotCQkJCWNtZFszXSwgZXhwZWN0ZWRfY291bnQpOworCQkJCSpjbWQzLCBleHBlY3RlZF9jb3VudCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCUJFR0lOX1JJTkcoNCk7Ci0JCU9VVF9SSU5HKGNtZFswXSk7Ci0JCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgMyk7CisJCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIDQpOwogCQlBRFZBTkNFX1JJTkcoKTsKLQotCQljbWRidWYtPmJ1ZiArPSA0KjQ7Ci0JCWNtZGJ1Zi0+YnVmc3ogLT0gNCo0OwogCX0KIAogCXJldHVybiAwOwpAQCAtNjY1LDM5ICs2NTEsMzkgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfcmF3X3BhY2tldDMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJCQkgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyIGhlYWRlcjsKKwl1MzIgKmhlYWRlcjsKIAlpbnQgY291bnQ7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKDQgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGaXhtZSAhISBUaGlzIHNpbXBseSBlbWl0cyBhIHBhY2tldCB3aXRob3V0IG11Y2ggY2hlY2tpbmcuCiAJICAgV2UgbmVlZCB0byBiZSBzbWFydGVyLiAqLwogCiAJLyogb2J0YWluIGZpcnN0IHdvcmQgLSBhY3R1YWwgcGFja2V0MyBoZWFkZXIgKi8KLQloZWFkZXIgPSAqKHUzMiAqKSBjbWRidWYtPmJ1ZjsKKwloZWFkZXIgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDApOwogCiAJLyogSXMgaXQgcGFja2V0IDMgPyAqLwotCWlmICgoaGVhZGVyID4+IDMwKSAhPSAweDMpIHsKLQkJRFJNX0VSUk9SKCJOb3QgYSBwYWNrZXQzIGhlYWRlciAoMHglMDh4KVxuIiwgaGVhZGVyKTsKKwlpZiAoKCpoZWFkZXIgPj4gMzApICE9IDB4MykgeworCQlEUk1fRVJST1IoIk5vdCBhIHBhY2tldDMgaGVhZGVyICgweCUwOHgpXG4iLCAqaGVhZGVyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY291bnQgPSAoaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKKwljb3VudCA9ICgqaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKIAogCS8qIENoZWNrIGFnYWluIG5vdyB0aGF0IHdlIGtub3cgaG93IG11Y2ggZGF0YSB0byBleHBlY3QgKi8KLQlpZiAoKGNvdW50ICsgMikgKiA0ID4gY21kYnVmLT5idWZzeikgeworCWlmICgoY291bnQgKyAyKSAqIDQgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkgewogCQlEUk1fRVJST1IKIAkJICAgICgiRXhwZWN0ZWQgcGFja2V0MyBvZiBsZW5ndGggJWQgYnV0IGhhdmUgb25seSAlZCBieXRlcyBsZWZ0XG4iLAotCQkgICAgIChjb3VudCArIDIpICogNCwgY21kYnVmLT5idWZzeik7CisJCSAgICAgKGNvdW50ICsgMikgKiA0LCBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElzIGl0IGEgcGFja2V0IHR5cGUgd2Uga25vdyBhYm91dCA/ICovCi0Jc3dpdGNoIChoZWFkZXIgJiAweGZmMDApIHsKKwlzd2l0Y2ggKCpoZWFkZXIgJiAweGZmMDApIHsKIAljYXNlIFJBREVPTl8zRF9MT0FEX1ZCUE5UUjoJLyogbG9hZCB2ZXJ0ZXggYXJyYXkgcG9pbnRlcnMgKi8KLQkJcmV0dXJuIHIzMDBfZW1pdF8zZF9sb2FkX3ZicG50cihkZXZfcHJpdiwgY21kYnVmLCBoZWFkZXIpOworCQlyZXR1cm4gcjMwMF9lbWl0XzNkX2xvYWRfdmJwbnRyKGRldl9wcml2LCBjbWRidWYsICpoZWFkZXIpOwogCiAJY2FzZSBSQURFT05fQ05UTF9CSVRCTFRfTVVMVEk6CiAJCXJldHVybiByMzAwX2VtaXRfYml0Ymx0X211bHRpKGRldl9wcml2LCBjbWRidWYpOwpAQCAtNzIzLDE4ICs3MDksMTQgQEAKIAkJLyogdGhlc2UgcGFja2V0cyBhcmUgc2FmZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fRVJST1IoIlVua25vd24gcGFja2V0MyBoZWFkZXIgKDB4JTA4eClcbiIsIGhlYWRlcik7CisJCURSTV9FUlJPUigiVW5rbm93biBwYWNrZXQzIGhlYWRlciAoMHglMDh4KVxuIiwgKmhlYWRlcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCUJFR0lOX1JJTkcoY291bnQgKyAyKTsKLQlPVVRfUklORyhoZWFkZXIpOwotCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBjb3VudCArIDIpOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gKGNvdW50ICsgMikgKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gKGNvdW50ICsgMikgKiA0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0OCw4ICs3MzAsNyBAQAogewogCWludCBuOwogCWludCByZXQ7Ci0JY2hhciAqb3JpZ19idWYgPSBjbWRidWYtPmJ1ZjsKLQlpbnQgb3JpZ19idWZzeiA9IGNtZGJ1Zi0+YnVmc3o7CisJaW50IG9yaWdfaXRlciA9IGNtZGJ1Zi0+YnVmZmVyLT5pdGVyYXRvcjsKIAogCS8qIFRoaXMgaXMgYSBkby13aGlsZS1sb29wIHNvIHRoYXQgd2UgcnVuIHRoZSBpbnRlcmlvciBhdCBsZWFzdCBvbmNlLAogCSAqIGV2ZW4gaWYgY21kYnVmLT5uYm94IGlzIDAuIENvbXBhcmUgcjMwMF9lbWl0X2NsaXByZWN0cyBmb3IgcmF0aW9uYWxlLgpAQCAtNzYxLDggKzc0Miw3IEBACiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAKLQkJCWNtZGJ1Zi0+YnVmID0gb3JpZ19idWY7Ci0JCQljbWRidWYtPmJ1ZnN6ID0gb3JpZ19idWZzejsKKwkJCWNtZGJ1Zi0+YnVmZmVyLT5pdGVyYXRvciA9IG9yaWdfaXRlcjsKIAkJfQogCiAJCXN3aXRjaCAoaGVhZGVyLnBhY2tldDMucGFja2V0KSB7CkBAIC03ODUsOSArNzY1LDkgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImJhZCBwYWNrZXQzIHR5cGUgJWkgYXQgJXBcbiIsCisJCQlEUk1fRVJST1IoImJhZCBwYWNrZXQzIHR5cGUgJWkgYXQgYnl0ZSAlZFxuIiwKIAkJCQkgIGhlYWRlci5wYWNrZXQzLnBhY2tldCwKLQkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOworCQkJCSAgY21kYnVmLT5idWZmZXItPml0ZXJhdG9yIC0gKGludClzaXplb2YoaGVhZGVyKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05MjMsMTIgKzkwMywxMyBAQAogCQkJZHJtX3IzMDBfY21kX2hlYWRlcl90IGhlYWRlcikKIHsKIAl1MzIgKnJlZl9hZ2VfYmFzZTsKLQl1MzIgaSwgYnVmX2lkeCwgaF9wZW5kaW5nOwotCXU2NCBwdHJfYWRkcjsKKwl1MzIgaSwgKmJ1Zl9pZHgsIGhfcGVuZGluZzsKKwl1NjQgKnB0cl9hZGRyOworCXU2NCBzdGFja19wdHJfYWRkcjsKIAlSSU5HX0xPQ0FMUzsKIAotCWlmIChjbWRidWYtPmJ1ZnN6IDwKLQkgICAgKHNpemVvZih1NjQpICsgaGVhZGVyLnNjcmF0Y2gubl9idWZzICogc2l6ZW9mKGJ1Zl9pZHgpKSkgeworCWlmIChkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSA8CisJICAgIChzaXplb2YodTY0KSArIGhlYWRlci5zY3JhdGNoLm5fYnVmcyAqIHNpemVvZigqYnVmX2lkeCkpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTM4LDM2ICs5MTksMzUgQEAKIAogCWRldl9wcml2LT5zY3JhdGNoX2FnZXNbaGVhZGVyLnNjcmF0Y2gucmVnXSsrOwogCi0JcHRyX2FkZHIgPSBnZXRfdW5hbGlnbmVkKCh1NjQgKiljbWRidWYtPmJ1Zik7Ci0JcmVmX2FnZV9iYXNlID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKXB0cl9hZGRyOwotCi0JY21kYnVmLT5idWYgKz0gc2l6ZW9mKHU2NCk7Ci0JY21kYnVmLT5idWZzeiAtPSBzaXplb2YodTY0KTsKKwlwdHJfYWRkciA9IGRybV9idWZmZXJfcmVhZF9vYmplY3QoY21kYnVmLT5idWZmZXIsCisJCQlzaXplb2Yoc3RhY2tfcHRyX2FkZHIpLCAmc3RhY2tfcHRyX2FkZHIpOworCXJlZl9hZ2VfYmFzZSA9ICh1MzIgKikodW5zaWduZWQgbG9uZykqcHRyX2FkZHI7CiAKIAlmb3IgKGk9MDsgaSA8IGhlYWRlci5zY3JhdGNoLm5fYnVmczsgaSsrKSB7Ci0JCWJ1Zl9pZHggPSAqKHUzMiAqKWNtZGJ1Zi0+YnVmOwotCQlidWZfaWR4ICo9IDI7IC8qIDggYnl0ZXMgcGVyIGJ1ZiAqLworCQlidWZfaWR4ID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKKwkJKmJ1Zl9pZHggKj0gMjsgLyogOCBieXRlcyBwZXIgYnVmICovCiAKLQkJaWYgKERSTV9DT1BZX1RPX1VTRVIocmVmX2FnZV9iYXNlICsgYnVmX2lkeCwgJmRldl9wcml2LT5zY3JhdGNoX2FnZXNbaGVhZGVyLnNjcmF0Y2gucmVnXSwgc2l6ZW9mKHUzMikpKSB7CisJCWlmIChEUk1fQ09QWV9UT19VU0VSKHJlZl9hZ2VfYmFzZSArICpidWZfaWR4LAorCQkJCSZkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10sCisJCQkJc2l6ZW9mKHUzMikpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAotCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZoX3BlbmRpbmcsIHJlZl9hZ2VfYmFzZSArIGJ1Zl9pZHggKyAxLCBzaXplb2YodTMyKSkpIHsKKwkJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmaF9wZW5kaW5nLAorCQkJCXJlZl9hZ2VfYmFzZSArICpidWZfaWR4ICsgMSwKKwkJCQlzaXplb2YodTMyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCi0JCWlmIChoX3BlbmRpbmcgPT0gMCkgeworCQlpZiAoaF9wZW5kaW5nID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCWhfcGVuZGluZy0tOwogCi0JCWlmIChEUk1fQ09QWV9UT19VU0VSKHJlZl9hZ2VfYmFzZSArIGJ1Zl9pZHggKyAxLCAmaF9wZW5kaW5nLCBzaXplb2YodTMyKSkpIHsKKwkJaWYgKERSTV9DT1BZX1RPX1VTRVIocmVmX2FnZV9iYXNlICsgKmJ1Zl9pZHggKyAxLAorCQkJCQkmaF9wZW5kaW5nLAorCQkJCQlzaXplb2YodTMyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCi0JCWNtZGJ1Zi0+YnVmICs9IHNpemVvZihidWZfaWR4KTsKLQkJY21kYnVmLT5idWZzeiAtPSBzaXplb2YoYnVmX2lkeCk7CisJCWRybV9idWZmZXJfYWR2YW5jZShjbWRidWYtPmJ1ZmZlciwgc2l6ZW9mKCpidWZfaWR4KSk7CiAJfQogCiAJQkVHSU5fUklORygyKTsKQEAgLTEwMDksMTkgKzk4OSwxNiBAQAogCURSTV9ERUJVRygicjUwMGZwICVkICVkIHR5cGU6ICVkXG4iLCBzeiwgYWRkciwgdHlwZSk7CiAJaWYgKCFzeikKIAkJcmV0dXJuIDA7Ci0JaWYgKHN6ICogc3RyaWRlICogNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogc3RyaWRlICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUJFR0lOX1JJTkcoMyArIHN6ICogc3RyaWRlKTsKIAlPVVRfUklOR19SRUcoUjUwMF9HQV9VU19WRUNUT1JfSU5ERVgsIGFkZHIpOwogCU9VVF9SSU5HKENQX1BBQ0tFVDBfVEFCTEUoUjUwMF9HQV9VU19WRUNUT1JfREFUQSwgc3ogKiBzdHJpZGUgLSAxKSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKWNtZGJ1Zi0+YnVmLCBzeiAqIHN0cmlkZSk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3ogKiBzdHJpZGUpOwogCiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSBzeiAqIHN0cmlkZSAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIHN0cmlkZSAqIDQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA1MywxOSArMTAzMCwxOCBAQAogCQkJZ290byBjbGVhbnVwOwogCX0KIAotCXdoaWxlIChjbWRidWYtPmJ1ZnN6ID49IHNpemVvZihkcm1fcjMwMF9jbWRfaGVhZGVyX3QpKSB7CisJd2hpbGUgKGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpCisJCQk+PSBzaXplb2YoZHJtX3IzMDBfY21kX2hlYWRlcl90KSkgewogCQlpbnQgaWR4OwotCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgaGVhZGVyOworCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgKmhlYWRlciwgc3RhY2tfaGVhZGVyOwogCi0JCWhlYWRlci51ID0gKih1bnNpZ25lZCBpbnQgKiljbWRidWYtPmJ1ZjsKKwkJaGVhZGVyID0gZHJtX2J1ZmZlcl9yZWFkX29iamVjdChjbWRidWYtPmJ1ZmZlciwKKwkJCQlzaXplb2Yoc3RhY2tfaGVhZGVyKSwgJnN0YWNrX2hlYWRlcik7CiAKLQkJY21kYnVmLT5idWYgKz0gc2l6ZW9mKGhlYWRlcik7Ci0JCWNtZGJ1Zi0+YnVmc3ogLT0gc2l6ZW9mKGhlYWRlcik7Ci0KLQkJc3dpdGNoIChoZWFkZXIuaGVhZGVyLmNtZF90eXBlKSB7CisJCXN3aXRjaCAoaGVhZGVyLT5oZWFkZXIuY21kX3R5cGUpIHsKIAkJY2FzZSBSMzAwX0NNRF9QQUNLRVQwOgogCQkJRFJNX0RFQlVHKCJSMzAwX0NNRF9QQUNLRVQwXG4iKTsKLQkJCXJldCA9IHIzMDBfZW1pdF9wYWNrZXQwKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CisJCQlyZXQgPSByMzAwX2VtaXRfcGFja2V0MChkZXZfcHJpdiwgY21kYnVmLCAqaGVhZGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoInIzMDBfZW1pdF9wYWNrZXQwIGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMTA3NCw3ICsxMDUwLDcgQEAKIAogCQljYXNlIFIzMDBfQ01EX1ZQVToKIAkJCURSTV9ERUJVRygiUjMwMF9DTURfVlBVXG4iKTsKLQkJCXJldCA9IHIzMDBfZW1pdF92cHUoZGV2X3ByaXYsIGNtZGJ1ZiwgaGVhZGVyKTsKKwkJCXJldCA9IHIzMDBfZW1pdF92cHUoZGV2X3ByaXYsIGNtZGJ1ZiwgKmhlYWRlcik7CiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX2VtaXRfdnB1IGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMTA4Myw3ICsxMDU5LDcgQEAKIAogCQljYXNlIFIzMDBfQ01EX1BBQ0tFVDM6CiAJCQlEUk1fREVCVUcoIlIzMDBfQ01EX1BBQ0tFVDNcbiIpOwotCQkJcmV0ID0gcjMwMF9lbWl0X3BhY2tldDMoZGV2X3ByaXYsIGNtZGJ1ZiwgaGVhZGVyKTsKKwkJCXJldCA9IHIzMDBfZW1pdF9wYWNrZXQzKGRldl9wcml2LCBjbWRidWYsICpoZWFkZXIpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigicjMwMF9lbWl0X3BhY2tldDMgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CkBAIC0xMTE3LDggKzEwOTMsOCBAQAogCQkJCWludCBpOwogCQkJCVJJTkdfTE9DQUxTOwogCi0JCQkJQkVHSU5fUklORyhoZWFkZXIuZGVsYXkuY291bnQpOwotCQkJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXIuZGVsYXkuY291bnQ7IGkrKykKKwkJCQlCRUdJTl9SSU5HKGhlYWRlci0+ZGVsYXkuY291bnQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXItPmRlbGF5LmNvdW50OyBpKyspCiAJCQkJCU9VVF9SSU5HKFJBREVPTl9DUF9QQUNLRVQyKTsKIAkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCX0KQEAgLTExMjYsNyArMTEwMiw3IEBACiAKIAkJY2FzZSBSMzAwX0NNRF9ETUFfRElTQ0FSRDoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9ETUFfRElTQ0FSRFxuIik7Ci0JCQlpZHggPSBoZWFkZXIuZG1hLmJ1Zl9pZHg7CisJCQlpZHggPSBoZWFkZXItPmRtYS5idWZfaWR4OwogCQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IGRtYS0+YnVmX2NvdW50KSB7CiAJCQkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCiAJCQkJCSAgaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwpAQCAtMTE0OSwxMiArMTEyNSwxMiBAQAogCiAJCWNhc2UgUjMwMF9DTURfV0FJVDoKIAkJCURSTV9ERUJVRygiUjMwMF9DTURfV0FJVFxuIik7Ci0JCQlyMzAwX2NtZF93YWl0KGRldl9wcml2LCBoZWFkZXIpOworCQkJcjMwMF9jbWRfd2FpdChkZXZfcHJpdiwgKmhlYWRlcik7CiAJCQlicmVhazsKIAogCQljYXNlIFIzMDBfQ01EX1NDUkFUQ0g6CiAJCQlEUk1fREVCVUcoIlIzMDBfQ01EX1NDUkFUQ0hcbiIpOwotCQkJcmV0ID0gcjMwMF9zY3JhdGNoKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CisJCQlyZXQgPSByMzAwX3NjcmF0Y2goZGV2X3ByaXYsIGNtZGJ1ZiwgKmhlYWRlcik7CiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX3NjcmF0Y2ggZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CkBAIC0xMTY4LDE2ICsxMTQ0LDE2IEBACiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQogCQkJRFJNX0RFQlVHKCJSMzAwX0NNRF9SNTAwRlBcbiIpOwotCQkJcmV0ID0gcjMwMF9lbWl0X3I1MDBmcChkZXZfcHJpdiwgY21kYnVmLCBoZWFkZXIpOworCQkJcmV0ID0gcjMwMF9lbWl0X3I1MDBmcChkZXZfcHJpdiwgY21kYnVmLCAqaGVhZGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoInIzMDBfZW1pdF9yNTAwZnAgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiYmFkIGNtZF90eXBlICVpIGF0ICVwXG4iLAotCQkJCSAgaGVhZGVyLmhlYWRlci5jbWRfdHlwZSwKLQkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOworCQkJRFJNX0VSUk9SKCJiYWQgY21kX3R5cGUgJWkgYXQgYnl0ZSAlZFxuIiwKKwkJCQkgIGhlYWRlci0+aGVhZGVyLmNtZF90eXBlLAorCQkJCSAgY21kYnVmLT5idWZmZXItPml0ZXJhdG9yIC0gKGludClzaXplb2YoKmhlYWRlcikpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDE3MzVhMmIuLjFhMGQ1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTk1Miw2ICs5NTIsNyBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fRU5ESUFOX0hBTEZEV19TV0FQICAgICAgICgzIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX1RYT19NQUNST19USUxFICAgICAgICAgICAgICAgKDEgPDwgMikKICMgICAgICAgZGVmaW5lIFIzMDBfVFhPX01JQ1JPX1RJTEUgICAgICAgICAgICAgICAoMSA8PCAzKQorIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fTUlDUk9fVElMRV9TUVVBUkUgICAgICAgICgyIDw8IDMpCiAjICAgICAgIGRlZmluZSBSMzAwX1RYT19PRkZTRVRfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZlMAogIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fT0ZGU0VUX1NISUZUICAgICAgICAgICAgIDUKIAkvKiBFTkQ6IEd1ZXNzIGZyb20gUjIwMCAqLwpAQCAtMTM2MCw2ICsxMzYxLDcgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfQ09MT1JQSVRDSF9NQVNLICAgICAgICAgICAgICAweDAwMDAxRkY4IC8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX1RJTEVfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpIC8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEUgICAgICAgKDEgPDwgMTcpIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX01JQ1JPVElMRV9TUVVBUkVfRU5BQkxFICgyIDw8IDE3KQogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fTk9fU1dBUCAgICAgICAgICgwIDw8IDE4KSAvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fV09SRF9TV0FQICAgICAgICgxIDw8IDE4KSAvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fRFdPUkRfU1dBUCAgICAgICgyIDw8IDE4KSAvKiBHVUVTUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwppbmRleCBkOTM3MzI0Li5jNzU5M2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwpAQCAtNDAsMjggKzQwLDYgQEAKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyNDIwX3JlZ19zYWZlX2JtKTsKIH0KIAotaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpbnQgcjsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgdG1wOwpAQCAtNjksNyArNDcsOCBAQAogCXVuc2lnbmVkIG51bV9waXBlczsKIAogCS8qIEdBX0VOSEFOQ0Ugd29ya2Fyb3VuZCBUQ0wgZGVhZGxvY2sgaXNzdWUgKi8KLQlXUkVHMzIoMHg0Mjc0LCAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSk7CisJV1JFRzMyKFIzMDBfR0FfRU5IQU5DRSwgUjMwMF9HQV9ERUFETE9DS19DTlRMIHwgUjMwMF9HQV9GQVNUU1lOQ19DTlRMIHwKKwkgICAgICAgKDEgPDwgMikgfCAoMSA8PCAzKSk7CiAJLyogYWRkIGlkbGUgd2FpdCBhcyBwZXIgZnJlZWRlc2t0b3Aub3JnIGJ1ZyAyNDA0MSAqLwogCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKQEAgLTk3LDE3ICs3NiwxNyBAQAogCQl0bXAgPSAoNyA8PCAxKTsKIAkJYnJlYWs7CiAJfQotCVdSRUczMigweDQyQzgsICgxIDw8IG51bV9waXBlcykgLSAxKTsKKwlXUkVHMzIoUjUwMF9TVV9SRUdfREVTVCwgKDEgPDwgbnVtX3BpcGVzKSAtIDEpOwogCS8qIFN1YiBwaXhlbCAxLzEyIHNvIHdlIGNhbiBoYXZlIDRLIHJlbmRlcmluZyBhY2NvcmRpbmcgdG8gZG9jICovCi0JdG1wIHw9ICgxIDw8IDQpIHwgKDEgPDwgMCk7Ci0JV1JFRzMyKDB4NDAxOCwgdG1wKTsKKwl0bXAgfD0gUjMwMF9USUxFX1NJWkVfMTYgfCBSMzAwX0VOQUJMRV9USUxJTkc7CisJV1JFRzMyKFIzMDBfR0JfVElMRV9DT05GSUcsIHRtcCk7CiAJaWYgKHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgR1VJIGlkbGUgd2hpbGUgIgogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXRtcCA9IFJSRUczMigweDE3MEMpOwotCVdSRUczMigweDE3MEMsIHRtcCB8ICgxIDw8IDMxKSk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKKwlXUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcsIHRtcCB8IFIzMDBfUElQRV9BVVRPX0NPTkZJRyk7CiAKIAlXUkVHMzIoUjMwMF9SQjJEX0RTVENBQ0hFX01PREUsCiAJICAgICAgIFJSRUczMihSMzAwX1JCMkRfRFNUQ0FDSEVfTU9ERSkgfApAQCAtMzQ4LDEzICszMjcsMTUgQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcjMwMF92cmFtX2luZm8ocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KLQlyID0gcjQyMF9tY19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgQUdQICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOworCQl9CiAJfQorCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyMzAwX21jX2luaXQocmRldik7CiAJcjQyMF9kZWJ1Z2ZzKHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKaW5kZXggNzRhZDg5Yi4uMGNmMmFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaApAQCAtNzE3LDU0ICs3MTcsNjIgQEAKICNkZWZpbmUgQVZJVk9fRFZPQV9CSVRfREVQVEhfQ09OVFJPTAkJCTB4Nzk4OAogCiAjZGVmaW5lIEFWSVZPX0RDX0dQSU9fSFBEX0EgICAgICAgICAgICAgICAgIDB4N2U5NAotCi0jZGVmaW5lIEFWSVZPX0dQSU9fMCAgICAgICAgICAgICAgICAgICAgICAgIDB4N2UzMAotI2RlZmluZSBBVklWT19HUElPXzEgICAgICAgICAgICAgICAgICAgICAgICAweDdlNDAKLSNkZWZpbmUgQVZJVk9fR1BJT18yICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZTUwCi0jZGVmaW5lIEFWSVZPX0dQSU9fMyAgICAgICAgICAgICAgICAgICAgICAgIDB4N2U2MAotCiAjZGVmaW5lIEFWSVZPX0RDX0dQSU9fSFBEX1kgICAgICAgICAgICAgICAgIDB4N2U5YwogCi0jZGVmaW5lIEFWSVZPX0kyQ19TVEFUVVMJCQkJCTB4N2QzMAotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19ET05FCQkJCSgxIDw8IDApCi0jCWRlZmluZSBBVklWT19JMkNfU1RBVFVTX05BQ0sJCQkJKDEgPDwgMSkKLSMJZGVmaW5lIEFWSVZPX0kyQ19TVEFUVVNfSEFMVAkJCQkoMSA8PCAyKQotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19HTwkJCQkoMSA8PCAzKQotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19NQVNLCQkJCTB4NwotLyogSWYgcmFkZW9uX21tX2kyYyBpcyB0byBiZSBiZWxpZXZlZCwgdGhpcyBpcyBIQUxULCBOQUNLLCBhbmQgbWF5YmUKLSAqIERPTkU/ICovCi0jCWRlZmluZSBBVklWT19JMkNfU1RBVFVTX0NNRF9SRVNFVAkJCTB4NwotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19DTURfV0FJVAkJCSgxIDw8IDMpCi0jZGVmaW5lIEFWSVZPX0kyQ19TVE9QCQkJCQkJMHg3ZDM0Ci0jZGVmaW5lIEFWSVZPX0kyQ19TVEFSVF9DTlRMCQkJCTB4N2QzOAotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVJUCQkJCQkJKDEgPDwgOCkKLSMJZGVmaW5lIEFWSVZPX0kyQ19DT05ORUNUT1IwCQkJCQkoMCA8PCAxNikKLSMJZGVmaW5lIEFWSVZPX0kyQ19DT05ORUNUT1IxCQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgUjUyMF9JMkNfU1RBUlQgKDE8PDApCi0jZGVmaW5lIFI1MjBfSTJDX1NUT1AgKDE8PDEpCi0jZGVmaW5lIFI1MjBfSTJDX1JYICgxPDwyKQotI2RlZmluZSBSNTIwX0kyQ19FTiAoMTw8OCkKLSNkZWZpbmUgUjUyMF9JMkNfRERDMSAoMDw8MTYpCi0jZGVmaW5lIFI1MjBfSTJDX0REQzIgKDE8PDE2KQotI2RlZmluZSBSNTIwX0kyQ19EREMzICgyPDwxNikKLSNkZWZpbmUgUjUyMF9JMkNfRERDX01BU0sgKDM8PDE2KQotI2RlZmluZSBBVklWT19JMkNfQ09OVFJPTDIJCQkJCTB4N2QzYwotIwlkZWZpbmUgQVZJVk9fSTJDXzdEM0NfU0laRV9TSElGVAkJCTgKLSMJZGVmaW5lIEFWSVZPX0kyQ183RDNDX1NJWkVfTUFTSwkJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIEFWSVZPX0kyQ19DT05UUk9MMwkJCQkJCTB4N2Q0MAotLyogUmVhZGluZyBpcyBkb25lIDQgYnl0ZXMgYXQgYSB0aW1lOiByZWFkIHRoZSBib3R0b20gOCBiaXRzIGZyb20KLSAqIDdkNDQsIGZvdXIgdGltZXMgaW4gYSByb3cuCi0gKiBXcml0aW5nIGlzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gIEZpcnN0IHdyaXRlIERBVEEgd2l0aAotICogMHhubm5ubm56eiwgdGhlbiAweG5ubm5ubnl5LCB3aGVyZSBubm5ubm4gaXMgc29tZSBub24tZGV0ZXJtaW5pc3RpYwotICogbWFnaWMgbnVtYmVyLCB6eiBpcywgSSB0aGluaywgdGhlIHNsYXZlIGFkZHJlc3MsIGFuZCB5eSBpcyB0aGUgYnl0ZQotICogeW91IHdhbnQgdG8gd3JpdGUuICovCi0jZGVmaW5lIEFWSVZPX0kyQ19EQVRBCQkJCQkJMHg3ZDQ0Ci0jZGVmaW5lIFI1MjBfSTJDX0FERFJfQ09VTlRfTUFTSyAoMHg3KQotI2RlZmluZSBSNTIwX0kyQ19EQVRBX0NPVU5UX1NISUZUICg4KQotI2RlZmluZSBSNTIwX0kyQ19EQVRBX0NPVU5UX01BU0sgKDB4RjAwKQotI2RlZmluZSBBVklWT19JMkNfQ05UTAkJCQkJCTB4N2Q1MAotIwlkZWZpbmUgQVZJVk9fSTJDX0VOCQkJCQkJCSgxIDw8IDApCi0jCWRlZmluZSBBVklWT19JMkNfUkVTRVQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBBVklWT19EQ19JMkNfU1RBVFVTMQkJCQkweDdkMzAKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19ET05FCQkJKDEgPDwgMCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19OQUNLCQkJKDEgPDwgMSkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19IQUxUCQkJKDEgPDwgMikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19HTwkJCSAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQVZJVk9fRENfSTJDX1JFU0VUIAkJCQkweDdkMzQKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19TT0ZUX1JFU0VUCQkJKDEgPDwgMCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19BQk9SVAkJCSgxIDw8IDgpCisjZGVmaW5lIEFWSVZPX0RDX0kyQ19DT05UUk9MMSAJCQkJMHg3ZDM4CisjCWRlZmluZSBBVklWT19EQ19JMkNfU1RBUlQJCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1NUT1AJCQkoMSA8PCAxKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1JFQ0VJVkUJCQkoMSA8PCAyKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0VOCQkJICAgICAgICAoMSA8PCA4KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1BJTl9TRUxFQ1QoeCkJCSgoeCkgPDwgMTYpCisjCWRlZmluZSBBVklWT19TRUxfRERDMQkJCSAgICAgICAgMAorIwlkZWZpbmUgQVZJVk9fU0VMX0REQzIJCQkgICAgICAgIDEKKyMJZGVmaW5lIEFWSVZPX1NFTF9EREMzCQkJICAgICAgICAyCisjZGVmaW5lIEFWSVZPX0RDX0kyQ19DT05UUk9MMiAJCQkJMHg3ZDNjCisjCWRlZmluZSBBVklWT19EQ19JMkNfQUREUl9DT1VOVCh4KQkJKCh4KSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0RBVEFfQ09VTlQoeCkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgQVZJVk9fRENfSTJDX0NPTlRST0wzIAkJCQkweDdkNDAKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19EQVRBX0RSSVZFX0VOCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0RBVEFfRFJJVkVfU0VMCQkoMSA8PCAxKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0NMS19EUklWRV9FTgkJKDEgPDwgNykKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19SRF9JTlRSQV9CWVRFX0RFTEFZKHgpICAgICAgKCh4KSA8PCA4KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1dSX0lOVFJBX0JZVEVfREVMQVkoeCkJKCh4KSA8PCAxNikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19USU1FX0xJTUlUKHgpCQkoKHgpIDw8IDI0KQorI2RlZmluZSBBVklWT19EQ19JMkNfREFUQSAJCQkJMHg3ZDQ0CisjZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfQ09OVFJPTCAJCQkweDdkNDgKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfU1RBVFVTCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0lOVEVSUlVQVF9BSwkJKDEgPDwgOCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfRU5BQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUgQVZJVk9fRENfSTJDX0FSQklUUkFUSU9OIAkJCTB4N2Q1MAorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1NXX1dBTlRTX1RPX1VTRV9JMkMJCSgxIDw8IDApCisjCWRlZmluZSBBVklWT19EQ19JMkNfU1dfQ0FOX1VTRV9JMkMJCSgxIDw8IDEpCisjCWRlZmluZSBBVklWT19EQ19JMkNfU1dfRE9ORV9VU0lOR19JMkMJCSgxIDw8IDgpCisjCWRlZmluZSBBVklWT19EQ19JMkNfSFdfTkVFRFNfSTJDCQkoMSA8PCA5KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0FCT1JUX0hEQ1BfSTJDCQkoMSA8PCAxNikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19IV19VU0lOR19JMkMJCSgxIDw8IDE3KQorCisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDMV9NQVNLIAkJICAgICAgICAweDdlNDAKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMxX0EgCQkgICAgICAgICAgICAgICAgMHg3ZTQ0CisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDMV9FTiAJCSAgICAgICAgICAgICAgICAweDdlNDgKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMxX1kgCQkgICAgICAgICAgICAgICAgMHg3ZTRjCisKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMyX01BU0sgCQkgICAgICAgIDB4N2U1MAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzJfQSAJCSAgICAgICAgICAgICAgICAweDdlNTQKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMyX0VOIAkJICAgICAgICAgICAgICAgIDB4N2U1OAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzJfWSAJCSAgICAgICAgICAgICAgICAweDdlNWMKKworI2RlZmluZSBBVklWT19EQ19HUElPX0REQzNfTUFTSyAJCSAgICAgICAgMHg3ZTYwCisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDM19BIAkJICAgICAgICAgICAgICAgIDB4N2U2NAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzNfRU4gCQkgICAgICAgICAgICAgICAgMHg3ZTY4CisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDM19ZIAkJICAgICAgICAgICAgICAgIDB4N2U2YwogCiAjZGVmaW5lIEFWSVZPX0RJU1BfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZWRjCiAjICAgICAgIGRlZmluZSBBVklWT19EMV9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggZGRmNTczMS4uMmI4YTVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTExOSwxMyArMTE5LDE1IEBACiAJCXJkZXYtPm1jLnZyYW1fd2lkdGggKj0gMjsKIH0KIAotdm9pZCByNTIwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjUyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKIAogCXI1MjBfdnJhbV9nZXRfdHlwZShyZGV2KTsKLQogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgMCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKKwkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTI2NywxMiArMjY5LDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXI1MjBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXI1MjBfbWNfaW5pdChyZGV2KTsKIAlydjUxNV9kZWJ1Z2ZzKHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IDJmZmNmNWEuLmM1MjI5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0zNTMsMjMgKzM1MywxNCBAQAogLyoKICAqIFI2MDAgUENJRSBHQVJUCiAgKi8KLWludCByNjAwX2dhcnRfY2xlYXJfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGkpCi17Ci0Jdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7Ci0JdTY0IHB0ZTsKLQotCWlmIChpIDwgMCB8fCBpID4gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlwdGUgPSAwOwotCXdyaXRlcShwdGUsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogOCkpOwotCXJldHVybiAwOwotfQotCiB2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwogCXUzMiB0bXA7CiAKKwkvKiBmbHVzaCBoZHAgY2FjaGUgc28gdXBkYXRlcyBoaXQgdnJhbSAqLworCVdSRUczMihSXzAwNTQ4MF9IRFBfTUVNX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAweDEpOworCiAJV1JFRzMyKFZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfSU5WQUxJREFUSU9OX0hJR0hfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UsIFJFUVVFU1RfVFlQRSgxKSk7CkBAIC00MTYsNiArNDA3LDcgQEAKIAlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CiAKIAkvKiBTZXR1cCBMMiBjYWNoZSAqLwogCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CkBAIC02MTksNiArNjExLDY4IEBACiAJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCisvKioKKyAqIHI2MDBfdnJhbV9ndHRfbG9jYXRpb24gLSB0cnkgdG8gZmluZCBWUkFNICYgR1RUIGxvY2F0aW9uCisgKiBAcmRldjogcmFkZW9uIGRldmljZSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9ucworICogQG1jOiBtZW1vcnkgY29udHJvbGxlciBzdHJ1Y3R1cmUgaG9sZGluZyBtZW1vcnkgaW5mb3JtYXRpb25zCisgKgorICogRnVuY3Rpb24gd2lsbCBwbGFjZSB0cnkgdG8gcGxhY2UgVlJBTSBhdCBzYW1lIHBsYWNlIGFzIGluIENQVSAoUENJKQorICogYWRkcmVzcyBzcGFjZSBhcyBzb21lIEdQVSBzZWVtcyB0byBoYXZlIGlzc3VlIHdoZW4gd2UgcmVwcm9ncmFtIGF0CisgKiBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIHRvIGZpdCB0aGUgdW52aXNpYmxlIFZSQU0gYWZ0ZXIgdGhlCisgKiBhcGVydHVyZSB0aGVuIHdlIGxpbWl0IHRoZSBWUkFNIHNpemUgdG8gdGhlIGFwZXJ0dXJlLgorICoKKyAqIElmIHdlIGFyZSB1c2luZyBBR1AgdGhlbiBwbGFjZSBWUkFNIGFkamFjZW50IHRvIEFHUCBhcGVydHVyZSBhcmUgd2UgbmVlZAorICogdGhlbSB0byBiZSBpbiBvbmUgZnJvbSBHUFUgcG9pbnQgb2YgdmlldyBzbyB0aGF0IHdlIGNhbiBwcm9ncmFtIEdQVSB0bworICogY2F0Y2ggYWNjZXNzIG91dHNpZGUgdGhlbSAod2VpcmQgR1BVIHBvbGljeSBzZWUgPz8pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciBmYWlscywgd29yc3QgY2FzZSBhcmUgbGltaXRpbmcgVlJBTSBvciBHVFQuCisgKgorICogTm90ZTogR1RUIHN0YXJ0LCBlbmQsIHNpemUgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIG9uIEFHUCBwbGF0Zm9ybS4KKyAqLwordm9pZCByNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYykKK3sKKwl1NjQgc2l6ZV9iZiwgc2l6ZV9hZjsKKworCWlmIChtYy0+bWNfdnJhbV9zaXplID4gMHhFMDAwMDAwMCkgeworCQkvKiBsZWF2ZSByb29tIGZvciBhdCBsZWFzdCA1MTJNIEdUVCAqLworCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBWUkFNXG4iKTsKKwkJbWMtPnJlYWxfdnJhbV9zaXplID0gMHhFMDAwMDAwMDsKKwkJbWMtPm1jX3ZyYW1fc2l6ZSA9IDB4RTAwMDAwMDA7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJc2l6ZV9iZiA9IG1jLT5ndHRfc3RhcnQ7CisJCXNpemVfYWYgPSAweEZGRkZGRkZGIC0gbWMtPmd0dF9lbmQgKyAxOworCQlpZiAoc2l6ZV9iZiA+IHNpemVfYWYpIHsKKwkJCWlmIChtYy0+bWNfdnJhbV9zaXplID4gc2l6ZV9iZikgeworCQkJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIFZSQU1cbiIpOworCQkJCW1jLT5yZWFsX3ZyYW1fc2l6ZSA9IHNpemVfYmY7CisJCQkJbWMtPm1jX3ZyYW1fc2l6ZSA9IHNpemVfYmY7CisJCQl9CisJCQltYy0+dnJhbV9zdGFydCA9IG1jLT5ndHRfc3RhcnQgLSBtYy0+bWNfdnJhbV9zaXplOworCQl9IGVsc2UgeworCQkJaWYgKG1jLT5tY192cmFtX3NpemUgPiBzaXplX2FmKSB7CisJCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAibGltaXRpbmcgVlJBTVxuIik7CisJCQkJbWMtPnJlYWxfdnJhbV9zaXplID0gc2l6ZV9hZjsKKwkJCQltYy0+bWNfdnJhbV9zaXplID0gc2l6ZV9hZjsKKwkJCX0KKwkJCW1jLT52cmFtX3N0YXJ0ID0gbWMtPmd0dF9lbmQ7CisJCX0KKwkJbWMtPnZyYW1fZW5kID0gbWMtPnZyYW1fc3RhcnQgKyBtYy0+bWNfdnJhbV9zaXplIC0gMTsKKwkJZGV2X2luZm8ocmRldi0+ZGV2LCAiVlJBTTogJWxsdU0gMHglMDhsbFggLSAweCUwOGxsWCAoJWxsdU0gdXNlZClcbiIsCisJCQkJbWMtPm1jX3ZyYW1fc2l6ZSA+PiAyMCwgbWMtPnZyYW1fc3RhcnQsCisJCQkJbWMtPnZyYW1fZW5kLCBtYy0+cmVhbF92cmFtX3NpemUgPj4gMjApOworCX0gZWxzZSB7CisJCXU2NCBiYXNlID0gMDsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJCWJhc2UgPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7CisJCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgbWMpOworCX0KK30KKwogaW50IHI2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlmaXhlZDIwXzEyIGE7CkBAIC02NTgsNzUgKzcxMiwyMSBAQAogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJLyogRklYTUUgcmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHVubWFwcGFibGUgVlJBTSAqLworCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpIHsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJLyogZ3R0X3NpemUgaXMgc2V0dXAgYnkgcmFkZW9uX2FncF9pbml0ICovCi0JCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl0bXAgPSAweEZGRkZGRkZGVUwgLSByZGV2LT5tYy5hZ3BfYmFzZSAtIHJkZXYtPm1jLmd0dF9zaXplOwotCQkvKiBUcnkgdG8gcHV0IHZyYW0gYmVmb3JlIG9yIGFmdGVyIEFHUCBiZWNhdXNlIHdlCi0JCSAqIHdlIHdhbnQgU1lTVEVNX0FQRVJUVVJFIHRvIGNvdmVyIGJvdGggVlJBTSBhbmQKLQkJICogQUdQIHNvIHRoYXQgR1BVIGNhbiBjYXRjaCBvdXQgb2YgVlJBTS9BR1AgYWNjZXNzCi0JCSAqLwotCQlpZiAocmRldi0+bWMuZ3R0X2xvY2F0aW9uID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlICovCi0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC0KLQkJCQkJCQlyZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCX0gZWxzZSBpZiAodG1wID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgKi8KLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKwotCQkJCQkJCXJkZXYtPm1jLmd0dF9zaXplOwotCQl9IGVsc2UgewotCQkJLyogVHJ5IHRvIHNldHVwIFZSQU0gdGhlbiBBR1AgbWlnaHQgbm90Ci0JCQkgKiBub3Qgd29yayBvbiBzb21lIGNhcmQKLQkJCSAqLwotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgotCQkJCQkJCTB4RkZGRikgPDwgMjQ7Ci0JCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgewotCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKLQkJCSAqIGdhcnQgc2l6ZQotCQkJICovCi0JCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7Ci0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKLQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JCQl9IGVsc2UgewotCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKLQkJCX0KLQkJfQotCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CiAJfQotCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7CisJcjYwMF92cmFtX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KIAlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTAwKTsKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwotCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKIAkJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC05ODEsNiArOTgxLDkgQEAKIHsKIAl1MzIgdGlsaW5nX2NvbmZpZzsKIAl1MzIgcmFtY2ZnOworCXUzMiBiYWNrZW5kX21hcDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlOworCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWc7CiAJdTMyIHRtcDsKIAlpbnQgaSwgajsKIAl1MzIgc3FfY29uZmlnOwpAQCAtMTA5MCw4ICsxMDkzLDExIEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCXJkZXYtPmNvbmZpZy5yNjAwLnRpbGluZ19ucGlwZXMgPSByZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlczsKKwlyZGV2LT5jb25maWcucjYwMC50aWxpbmdfbmJhbmtzID0gNCA8PCAoKHJhbWNmZyAmIE5PT0ZCQU5LX01BU0spID4+IE5PT0ZCQU5LX1NISUZUKTsKIAl0aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKChyYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAJdGlsaW5nX2NvbmZpZyB8PSBHUk9VUF9TSVpFKDApOworCXJkZXYtPmNvbmZpZy5yNjAwLnRpbGluZ19ncm91cF9zaXplID0gMjU2OwogCXRtcCA9IChyYW1jZmcgJiBOT09GUk9XU19NQVNLKSA+PiBOT09GUk9XU19TSElGVDsKIAlpZiAodG1wID4gMykgewogCQl0aWxpbmdfY29uZmlnIHw9IFJPV19USUxJTkcoMyk7CkBAIC0xMTAxLDI0ICsxMTA3LDMzIEBACiAJCXRpbGluZ19jb25maWcgfD0gU0FNUExFX1NQTElUKHRtcCk7CiAJfQogCXRpbGluZ19jb25maWcgfD0gQkFOS19TV0FQUygxKTsKLQl0bXAgPSByNjAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMsCi0JCQkJCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMsCi0JCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgMHhmZik7Ci0JdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUCh0bXApOworCisJY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSkgJiAweDAwZmYwMDAwOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSB8PQorCQlCQUNLRU5EX0RJU0FCTEUoKFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzKSAmIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gUlJFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRykgJiAweGZmZmZmZjAwOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlJTkFDVElWRV9RRF9QSVBFUygoUjZYWF9NQVhfUElQRVNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMpICYgUjZYWF9NQVhfUElQRVNfTUFTSyk7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CisJCUlOQUNUSVZFX1NJTURTKChSNlhYX01BWF9TSU1EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5yNjAwLm1heF9zaW1kcykgJiBSNlhYX01BWF9TSU1EU19NQVNLKTsKKworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCShSNlhYX01BWF9CQUNLRU5EUyAtCisJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgorCQkJCQkJCQkJICAgICAgIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA+PiAxNikpOworCisJdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAJV1JFRzMyKEdCX1RJTElOR19DT05GSUcsIHRpbGluZ19jb25maWcpOwogCVdSRUczMihEQ1BfVElMSU5HX0NPTkZJRywgdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZik7CiAJV1JFRzMyKEhEUF9USUxJTkdfQ09ORklHLCB0aWxpbmdfY29uZmlnICYgMHhmZmZmKTsKIAotCXRtcCA9IEJBQ0tFTkRfRElTQUJMRSgoUjZYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgUjZYWF9NQVhfQkFDS0VORFNfTUFTSyk7Ci0JV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgdG1wKTsKLQogCS8qIFNldHVwIHBpcGVzICovCi0JdG1wID0gSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOwotCXRtcCB8PSBJTkFDVElWRV9TSU1EUygoUjZYWF9NQVhfU0lNRFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMpICYgUjZYWF9NQVhfU0lNRFNfTUFTSyk7Ci0JV1JFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgdG1wKTsKLQlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIHRtcCk7CisJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlXUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCi0JdG1wID0gUjZYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyh0bXAgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwl0bXAgPSBSNlhYX01BWF9QSVBFUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKSA+PiA4KTsKIAlXUkVHMzIoVkdUX09VVF9ERUFMTE9DX0NOVEwsICh0bXAgKiA0KSAmIERFQUxMT0NfRElTVF9NQVNLKTsKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKHRtcCAqIDQpIC0gMikgJiBWVFhfUkVVU0VfREVQVEhfTUFTSyk7CiAKQEAgLTE3ODMsMTIgKzE3OTgsMTcgQEAKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CiAJLyogQWxzbyBjb25zaWRlciBFVkVOVF9XUklURV9FT1AuICBpdCBoYW5kbGVzIHRoZSBpbnRlcnJ1cHRzICsgdGltZXN0YW1wcyArIGV2ZW50cyAqLworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0VWRU5UX1dSSVRFLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7CisJLyogd2FpdCBmb3IgM0QgaWRsZSBjbGVhbiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChXQUlUX1VOVElMIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFdBSVRfM0RfSURMRV9iaXQgfCBXQUlUXzNEX0lETEVDTEVBTl9iaXQpOwogCS8qIEVtaXQgZmVuY2Ugc2VxdWVuY2UgJiBmaXJlIElSUSAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBmZW5jZS0+c2VxKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKIAkvKiBDUF9JTlRFUlJVUFQgcGFja2V0IDMgbm8gbG9uZ2VyIGV4aXN0cywgdXNlIHBhY2tldCAwICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChDUF9JTlRfU1RBVFVTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkJfSU5UX1NUQVQpOwpAQCAtMjc0NSw2ICsyNzY1LDcgQEAKIAkJCWNhc2UgMDogLyogRDEgdmJsYW5rICovCiAJCQkJaWYgKGRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkgewogCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKKwkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAJCQkJCWRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOwogCQkJCQlEUk1fREVCVUcoIklIOiBEMSB2YmxhbmtcbiIpOwogCQkJCX0KQEAgLTI3NjUsNiArMjc4Niw3IEBACiAJCQljYXNlIDA6IC8qIEQyIHZibGFuayAqLwogCQkJCWlmIChkaXNwX2ludCAmIExCX0QyX1ZCTEFOS19JTlRFUlJVUFQpIHsKIAkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwogCQkJCQlkaXNwX2ludCAmPSB+TEJfRDJfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDIgdmJsYW5rXG4iKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCmluZGV4IDBkY2I2OTAuLmRiOTI4MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZXR1cm4gKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDAgJiYgcmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjcxMCkKKwlyZXR1cm4gcmRldi0+ZmFtaWx5ID49IENISVBfUjYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MDsKQEAgLTE0NywxNSArMTQ3LDIzIEBACiB9CiAKIC8qCisgKiB0dXJuIG9uL29mZiBhdWRpbyBlbmdpbmUKKyAqLworc3RhdGljIHZvaWQgcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIGVuYWJsZSkKK3sKKwlEUk1fSU5GTygiJXMgYXVkaW8gc3VwcG9ydCIsIGVuYWJsZSA/ICJFbmFibGluZyIgOiAiRGlzYWJsaW5nIik7CisJV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIGVuYWJsZSA/IDB4ODEwMDAwMDAgOiAweDAsIH4weDgxMDAwMDAwKTsKK30KKworLyoKICAqIGluaXRpYWxpemUgdGhlIGF1ZGlvIHZhcnMgYW5kIHJlZ2lzdGVyIHRoZSB1cGRhdGUgdGltZXIKICAqLwogaW50IHI2MDBfYXVkaW9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAoIXI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQocmRldikpCisJaWYgKCFyYWRlb25fYXVkaW8gfHwgIXI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQocmRldikpCiAJCXJldHVybiAwOwogCi0JRFJNX0lORk8oIiVzIGF1ZGlvIHN1cHBvcnQiLCByYWRlb25fYXVkaW8gPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOwotCVdSRUczMl9QKFI2MDBfQVVESU9fRU5BQkxFLCByYWRlb25fYXVkaW8gPyAweDgxMDAwMDAwIDogMHgwLCB+MHg4MTAwMDAwMCk7CisJcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHJkZXYsIHRydWUpOwogCiAJcmRldi0+YXVkaW9fY2hhbm5lbHMgPSAtMTsKIAlyZGV2LT5hdWRpb19yYXRlID0gLTE7CkBAIC0yNTgsOSArMjY2LDEwIEBACiAgKi8KIHZvaWQgcjYwMF9hdWRpb19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmICghcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKKwlpZiAoIXJhZGVvbl9hdWRpbyB8fCAhcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKIAkJcmV0dXJuOwogCiAJZGVsX3RpbWVyKCZyZGV2LT5hdWRpb190aW1lcik7Ci0JV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOworCisJcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHJkZXYsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCmluZGV4IDVlYTQzMjMuLmY0ZmI4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpAQCAtNDksNyArNDksNyBAQAogCVJJTkdfTE9DQUxTOwogCURSTV9ERUJVRygiXG4iKTsKIAotCWggPSAoaCArIDcpICYgfjc7CisJaCA9IEFMSUdOKGgsIDgpOwogCWlmIChoIDwgOCkKIAkJaCA9IDg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggNDQ2Yjc2NS4uZjZjNmM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAl1MzIgY2JfY29sb3JfaW5mbzsKIAlpbnQgcGl0Y2gsIHNsaWNlOwogCi0JaCA9IChoICsgNykgJiB+NzsKKwloID0gQUxJR04oaCwgOCk7CiAJaWYgKGggPCA4KQogCQloID0gODsKIApAQCAtMzk2LDE1ICszOTYsMTMgQEAKIAkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKIAogCS8qIGVtaXQgYW4gSUIgcG9pbnRpbmcgYXQgZGVmYXVsdCBzdGF0ZSAqLwotCWR3b3JkcyA9IChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICsgMHhmKSAmIH4weGY7CisJZHdvcmRzID0gQUxJR04ocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiwgMHgxMCk7CiAJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4RkYpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGR3b3Jkcyk7CiAKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfRVZFTlRfV1JJVEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBDQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKIAkvKiBTUSBjb25maWcgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDYpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfQ09ORklHIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOwpAQCAtNTc4LDkgKzU3Niw5IEBACiAJcmluZ19zaXplID0gbnVtX2xvb3BzICogZHdvcmRzX3Blcl9sb29wOwogCS8qIHNldCBkZWZhdWx0ICArIHNoYWRlcnMgKi8KIAlyaW5nX3NpemUgKz0gNDA7IC8qIHNoYWRlcnMgKyBkZWYgc3RhdGUgKi8KLQlyaW5nX3NpemUgKz0gNzsgLyogZmVuY2UgZW1pdCBmb3IgVkIgSUIgKi8KKwlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIFZCIElCICovCiAJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLwotCXJpbmdfc2l6ZSArPSA3OyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KKwlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIGRvbmUgY29weSAqLwogCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIHJpbmdfc2l6ZSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtNTk0LDEzICs1OTIsNiBAQAogewogCWludCByOwogCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0VWRU5UX1dSSVRFLCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7Ci0JLyogd2FpdCBmb3IgM0QgaWRsZSBjbGVhbiAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChXQUlUX1VOVElMIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFdBSVRfM0RfSURMRV9iaXQgfCBXQUlUXzNEX0lETEVDTEVBTl9iaXQpOwotCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC52Yl9pYikKIAkJcjYwMF92Yl9pYl9wdXQocmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwppbmRleCBkNzQ1ZTgxLi5hMTEyYzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCkBAIC05LDExICs5LDYgQEAKIAkweGMwMDEyODAwLAogCTB4ODAwMDAwMDAsCiAJMHg4MDAwMDAwMCwKLQkweGMwMDA0NjAwLAotCTB4MDAwMDAwMTYsCi0JMHhjMDAxNjgwMCwKLQkweDAwMDAwMDEwLAotCTB4MDAwMjgwMDAsCiAJMHhjMDAxNjgwMCwKIAkweDAwMDAwMDEwLAogCTB4MDAwMDgwMDAsCkBAIC01MzEsMTEgKzUyNiw2IEBACiAJMHhjMDAxMjgwMCwKIAkweDgwMDAwMDAwLAogCTB4ODAwMDAwMDAsCi0JMHhjMDAwNDYwMCwKLQkweDAwMDAwMDE2LAotCTB4YzAwMTY4MDAsCi0JMHgwMDAwMDAxMCwKLQkweDAwMDI4MDAwLAogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDAxMCwKIAkweDAwMDA4MDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwppbmRleCA3NWJjZjM1Li40MDQxNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpAQCAtNzM0LDggKzczNCw4IEBACiAJdTMyIGhkcF9ob3N0X3BhdGhfY250bDsKIAl1MzIgYmFja2VuZF9tYXA7CiAJdTMyIGdiX3RpbGluZ19jb25maWcgPSAwOwotCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGUgPSAwOwotCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSAwOworCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGU7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZzsKIAl1MzIgcmFtY2ZnOwogCiAJLyogc2V0dXAgY2hpcCBzcGVjcyAqLwpAQCAtODU3LDI5ICs4NTcsNDQgQEAKIAogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQU5LX1NXQVBTKDEpOwogCi0JYmFja2VuZF9tYXAgPSByNjAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCSgweGZmIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiAweGZmKTsKLQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IFJBREVPTl9SRUFEKFI2MDBfQ0NfUkJfQkFDS0VORF9ESVNBQkxFKSAmIDB4MDBmZjAwMDA7CisJY2NfcmJfYmFja2VuZF9kaXNhYmxlIHw9CisJCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSNlhYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSNlhYX01BWF9CQUNLRU5EU19NQVNLKTsKIAotCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gUkFERU9OX1JFQUQoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcpICYgMHhmZmZmZmYwMDsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KIAkJUjYwMF9JTkFDVElWRV9RRF9QSVBFUygoUjZYWF9NQVhfUElQRVNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMpICYgUjZYWF9NQVhfUElQRVNfTUFTSyk7CiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCVI2MDBfSU5BQ1RJVkVfU0lNRFMoKFI2WFhfTUFYX1NJTURTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3NpbWRzKSAmIFI2WFhfTUFYX1NJTURTX01BU0spOwogCi0JY2NfcmJfYmFja2VuZF9kaXNhYmxlID0KLQkJUjYwMF9CQUNLRU5EX0RJU0FCTEUoKFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCShSNlhYX01BWF9CQUNLRU5EUyAtCisJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgorCQkJCQkJCQkJICAgICAgIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA+PiAxNikpOworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9HQl9USUxJTkdfQ09ORklHLCAgICAgIGdiX3RpbGluZ19jb25maWcpOwogCVJBREVPTl9XUklURShSNjAwX0RDUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOwogCVJBREVPTl9XUklURShSNjAwX0hEUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCWlmIChnYl90aWxpbmdfY29uZmlnICYgMHhjMCkgeworCQlkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplID0gNTEyOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5yNjAwX2dyb3VwX3NpemUgPSAyNTY7CisJfQorCWRldl9wcml2LT5yNjAwX25waXBlcyA9IDEgPDwgKChnYl90aWxpbmdfY29uZmlnID4+IDEpICYgMHg3KTsKKwlpZiAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4MzApIHsKKwkJZGV2X3ByaXYtPnI2MDBfbmJhbmtzID0gODsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+cjYwMF9uYmFua3MgPSA0OworCX0KIAogCVJBREVPTl9XUklURShSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSwgICAgICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOwogCVJBREVPTl9XUklURShSNjAwX0NDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgICBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCVJBREVPTl9XUklURShSNjAwX0dDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHLCBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCiAJbnVtX3FkX3BpcGVzID0KLQkJUjZYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCQlSNlhYX01BWF9QSVBFUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spID4+IDgpOwogCVJBREVPTl9XUklURShSNjAwX1ZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBSNjAwX0RFQUxMT0NfRElTVF9NQVNLKTsKIAlSQURFT05fV1JJVEUoUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0spOwogCkBAIC0xMTUxLDcgKzExNjYsOCBAQAogCiB9CiAKLXN0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKK3N0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJCQkJICAgICB1MzIgbnVtX3RpbGVfcGlwZXMsCiAJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKIAkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCiB7CkBAIC0xMTYyLDYgKzExNzgsNyBAQAogCXUzMiBzd2l6emxlX3BpcGVbUjdYWF9NQVhfUElQRVNdOwogCXUzMiBjdXJfYmFja2VuZDsKIAl1MzIgaTsKKwlib29sIGZvcmNlX25vX3N3aXp6bGU7CiAKIAlpZiAobnVtX3RpbGVfcGlwZXMgPiBSN1hYX01BWF9QSVBFUykKIAkJbnVtX3RpbGVfcGlwZXMgPSBSN1hYX01BWF9QSVBFUzsKQEAgLTExOTEsNiArMTIwOCwxOCBAQAogCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKIAkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKIAorCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCWRlZmF1bHQ6CisJCWZvcmNlX25vX3N3aXp6bGUgPSB0cnVlOworCQlicmVhazsKKwl9CisKIAltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKIAlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMTIwMSw0OSArMTIzMCwxMDAgQEAKIAkJc3dpenpsZV9waXBlWzFdID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gMzsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSA2OgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSA0OwotCQlzd2l6emxlX3BpcGVbM10gPSA1OwotCQlzd2l6emxlX3BpcGVbNF0gPSAzOwotCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbNV0gPSA1OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNzoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQl9CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNzsKLQkJc3dpenpsZV9waXBlWzddID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCQlzd2l6emxlX3BpcGVbN10gPSA3OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQkJc3dpenpsZV9waXBlWzZdID0gNzsKKwkJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0xMjY0LDggKzEzNDQsMTAgQEAKIAkJCSAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHRhX2F1eF9jbnRsOwogCXUzMiBzeF9kZWJ1Z18xOwogCXUzMiBzbXhfZGNfY3RsMDsKKwl1MzIgZGJfZGVidWczOwogCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKIAl1MzIgdmd0X2dzX3Blcl9lczsKIAl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOwpAQCAtMTI3Niw4ICsxMzU4LDggQEAKIAl1MzIgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMDsKIAl1MzIgYmFja2VuZF9tYXA7CiAJdTMyIGdiX3RpbGluZ19jb25maWcgPSAwOwotCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGUgPSAwOwotCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSAwOworCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGU7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZzsKIAl1MzIgbWNfYXJiX3JhbWNmZzsKIAl1MzIgZGJfZGVidWc0OwogCkBAIC0xNDI4LDM4ICsxNTEwLDUxIEBACiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFOS19TV0FQUygxKTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzQwKQotCQliYWNrZW5kX21hcCA9IDB4Mjg7Ci0JZWxzZQotCQliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcywKLQkJCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCQkoMHhmZiA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgMHhmZik7Ci0JZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSQURFT05fUkVBRChSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSkgJiAweDAwZmYwMDAwOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSB8PQorCQlSNjAwX0JBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CiAKLQljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJBREVPTl9SRUFEKFI2MDBfQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKSAmIDB4ZmZmZmZmMDA7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCVI2MDBfSU5BQ1RJVkVfUURfUElQRVMoKFI3WFhfTUFYX1BJUEVTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzKSAmIFI3WFhfTUFYX1BJUEVTX01BU0spOwogCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQogCQlSNjAwX0lOQUNUSVZFX1NJTURTKChSN1hYX01BWF9TSU1EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9zaW1kcykgJiBSN1hYX01BWF9TSU1EU19NQVNLKTsKIAotCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9Ci0JCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSN1hYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSN1hYX01BWF9CQUNLRU5EU19NQVNLKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYsCisJCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCQkoUjdYWF9NQVhfQkFDS0VORFMgLQorCQkJCQkJCQkgcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSAmCisJCQkJCQkJCQkJICAgICAgIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJCShjY19yYl9iYWNrZW5kX2Rpc2FibGUgPj4gMTYpKTsKKwlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfR0JfVElMSU5HX0NPTkZJRywgICAgICBnYl90aWxpbmdfY29uZmlnKTsKIAlSQURFT05fV1JJVEUoUjYwMF9EQ1BfVElMSU5HX0NPTkZJRywgICAgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKIAlSQURFT05fV1JJVEUoUjYwMF9IRFBfVElMSU5HX0NPTkZJRywgICAgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKKwlpZiAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4YzApIHsKKwkJZGV2X3ByaXYtPnI2MDBfZ3JvdXBfc2l6ZSA9IDUxMjsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplID0gMjU2OworCX0KKwlkZXZfcHJpdi0+cjYwMF9ucGlwZXMgPSAxIDw8ICgoZ2JfdGlsaW5nX2NvbmZpZyA+PiAxKSAmIDB4Nyk7CisJaWYgKGdiX3RpbGluZ19jb25maWcgJiAweDMwKSB7CisJCWRldl9wcml2LT5yNjAwX25iYW5rcyA9IDg7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnI2MDBfbmJhbmtzID0gNDsKKwl9CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKLQlSQURFT05fV1JJVEUoUjYwMF9HQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKIAogCVJBREVPTl9XUklURShSNzAwX0NDX1NZU19SQl9CQUNLRU5EX0RJU0FCTEUsIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CiAJUkFERU9OX1dSSVRFKFI3MDBfQ0dUU19TWVNfVENDX0RJU0FCTEUsIDApOwogCVJBREVPTl9XUklURShSNzAwX0NHVFNfVENDX0RJU0FCTEUsIDApOwotCVJBREVPTl9XUklURShSNzAwX0NHVFNfVVNFUl9TWVNfVENDX0RJU0FCTEUsIDApOwotCVJBREVPTl9XUklURShSNzAwX0NHVFNfVVNFUl9UQ0NfRElTQUJMRSwgMCk7CiAKIAludW1fcWRfcGlwZXMgPQotCQlSN1hYX01BWF9CQUNLRU5EUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIFI2MDBfSU5BQ1RJVkVfUURfUElQRVNfTUFTSyk7CisJCVI3WFhfTUFYX1BJUEVTIC0gcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIFI2MDBfSU5BQ1RJVkVfUURfUElQRVNfTUFTSykgPj4gOCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfVkdUX09VVF9ERUFMTE9DX0NOVEwsIChudW1fcWRfcGlwZXMgKiA0KSAmIFI2MDBfREVBTExPQ19ESVNUX01BU0spOwogCVJBREVPTl9XUklURShSNjAwX1ZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCwgKChudW1fcWRfcGlwZXMgKiA0KSAtIDIpICYgUjYwMF9WVFhfUkVVU0VfREVQVEhfTUFTSyk7CiAKQEAgLTE0NjksMTAgKzE1NjQsOCBAQAogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVRX1RIUkVTSE9MRFMsIFI3MDBfU1RRX1NQTElUKDB4MzApKTsKIAotCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCAoUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gfAotCQkJCQlSNjAwX1NZTkNfR1JBRElFTlQgfAotCQkJCQlSNjAwX1NZTkNfV0FMS0VSIHwKLQkJCQkJUjYwMF9TWU5DX0FMSUdORVIpKTsKKwl0YV9hdXhfY250bCA9IFJBREVPTl9SRUFEKFI2MDBfVEFfQ05UTF9BVVgpOworCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCB0YV9hdXhfY250bCB8IFI2MDBfRElTQUJMRV9DVUJFX0FOSVNPKTsKIAogCXN4X2RlYnVnXzEgPSBSQURFT05fUkVBRChSNzAwX1NYX0RFQlVHXzEpOwogCXN4X2RlYnVnXzEgfD0gUjcwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtMTQ4MywxNCArMTU3NiwyOCBAQAogCXNteF9kY19jdGwwIHw9IFI3MDBfQ0FDSEVfREVQVEgoKGRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzICogNjQpIC0gMSk7CiAJUkFERU9OX1dSSVRFKFI2MDBfU01YX0RDX0NUTDAsIHNteF9kY19jdGwwKTsKIAotCVJBREVPTl9XUklURShSNzAwX1NNWF9FVkVOVF9DVEwsIChSNzAwX0VTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgUjcwMF9HU19GTFVTSF9DVEwoNCkgfAotCQkJCQkgIFI3MDBfQUNLX0ZMVVNIX0NUTCgzKSB8Ci0JCQkJCSAgUjcwMF9TWU5DX0ZMVVNIX0NUTCkpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSAhPSBDSElQX1JWNzQwKQorCQlSQURFT05fV1JJVEUoUjcwMF9TTVhfRVZFTlRfQ1RMLCAoUjcwMF9FU19GTFVTSF9DVEwoNCkgfAorCQkJCQkJICBSNzAwX0dTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCQkgIFI3MDBfQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkJCQkgIFI3MDBfU1lOQ19GTFVTSF9DVEwpKTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKQotCQlSQURFT05fV1JJVEUoUjcwMF9EQl9ERUJVRzMsIFI3MDBfREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7Ci0JZWxzZSB7CisJZGJfZGVidWczID0gUkFERU9OX1JFQUQoUjcwMF9EQl9ERUJVRzMpOworCWRiX2RlYnVnMyAmPSB+UjcwMF9EQl9DTEtfT0ZGX0RFTEFZKDB4MWYpOworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJZGJfZGVidWczIHw9IFI3MDBfREJfQ0xLX09GRl9ERUxBWSgweDFmKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwlkZWZhdWx0OgorCQlkYl9kZWJ1ZzMgfD0gUjcwMF9EQl9DTEtfT0ZGX0RFTEFZKDIpOworCQlicmVhazsKKwl9CisJUkFERU9OX1dSSVRFKFI3MDBfREJfREVCVUczLCBkYl9kZWJ1ZzMpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spICE9IENISVBfUlY3NzApIHsKIAkJZGJfZGVidWc0ID0gUkFERU9OX1JFQUQoUlY3MDBfREJfREVCVUc0KTsKIAkJZGJfZGVidWc0IHw9IFJWNzAwX0RJU0FCTEVfVElMRV9DT1ZFUkVEX0ZPUl9QU19JVEVSOwogCQlSQURFT05fV1JJVEUoUlY3MDBfREJfREVCVUc0LCBkYl9kZWJ1ZzQpOwpAQCAtMTUxOSwxMCArMTYyNiwxMCBAQAogCQkJICAgIFI2MDBfQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CiAJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKIAljYXNlIENISVBfUlY3NzA6Ci0JCXNxX21zX2ZpZm9fc2l6ZXMgfD0gUjYwMF9GRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKLQkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNzMwOgogCWNhc2UgQ0hJUF9SVjcxMDoKKwkJc3FfbXNfZmlmb19zaXplcyB8PSBSNjAwX0ZFVENIX0ZJRk9fSElXQVRFUigweDEpOworCQlicmVhazsKIAljYXNlIENISVBfUlY3NDA6CiAJZGVmYXVsdDoKIAkJc3FfbXNfZmlmb19zaXplcyB8PSBSNjAwX0ZFVENIX0ZJRk9fSElXQVRFUigweDQpOwpAQCAtMjUyOSwzICsyNjM2LDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y3NfbXV0ZXgpOwogCXJldHVybiByOwogfQorCit2b2lkIHI2MDBfY3NfbGVnYWN5X2dldF90aWxpbmdfY29uZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKm5waXBlcywgdTMyICpuYmFua3MsIHUzMiAqZ3JvdXBfc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkqbnBpcGVzID0gZGV2X3ByaXYtPnI2MDBfbnBpcGVzOworCSpuYmFua3MgPSBkZXZfcHJpdi0+cjYwMF9uYmFua3M7CisJKmdyb3VwX3NpemUgPSBkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCBlNGM0NWVjLi5jZDJjNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyNjAwZC5oIgorI2luY2x1ZGUgInI2MDBfcmVnX3NhZmUuaCIKIAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwpAQCAtMzUsMTEgKzM2LDMxMyBAQAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwogdHlwZWRlZiBpbnQgKCpuZXh0X3JlbG9jX3QpKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyKiwgc3RydWN0IHJhZGVvbl9jc19yZWxvYyoqKTsKIHN0YXRpYyBuZXh0X3JlbG9jX3QgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyA9ICZyNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tOworZXh0ZXJuIHZvaWQgcjYwMF9jc19sZWdhY3lfZ2V0X3RpbGluZ19jb25mKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiAqbnBpcGVzLCB1MzIgKm5iYW5rcywgdTMyICpncm91cF9zaXplKTsKKwogCiBzdHJ1Y3QgcjYwMF9jc190cmFjayB7Ci0JdTMyCWNiX2NvbG9yMF9iYXNlX2xhc3Q7CisJLyogY29uZmlndXJhdGlvbiB3ZSBtaXJvciBzbyB0aGF0IHdlIHVzZSBzYW1lIGNvZGUgYnR3IGttcy91bXMgKi8KKwl1MzIJCQlncm91cF9zaXplOworCXUzMgkJCW5iYW5rczsKKwl1MzIJCQlucGlwZXM7CisJLyogdmFsdWUgd2UgdHJhY2sgKi8KKwl1MzIJCQluc2FtcGxlczsKKwl1MzIJCQljYl9jb2xvcl9iYXNlX2xhc3RbOF07CisJc3RydWN0IHJhZGVvbl9ibwkqY2JfY29sb3JfYm9bOF07CisJdTMyCQkJY2JfY29sb3JfYm9fb2Zmc2V0WzhdOworCXN0cnVjdCByYWRlb25fYm8JKmNiX2NvbG9yX2ZyYWdfYm9bOF07CisJc3RydWN0IHJhZGVvbl9ibwkqY2JfY29sb3JfdGlsZV9ib1s4XTsKKwl1MzIJCQljYl9jb2xvcl9pbmZvWzhdOworCXUzMgkJCWNiX2NvbG9yX3NpemVfaWR4WzhdOworCXUzMgkJCWNiX3RhcmdldF9tYXNrOworCXUzMgkJCWNiX3NoYWRlcl9tYXNrOworCXUzMgkJCWNiX2NvbG9yX3NpemVbOF07CisJdTMyCQkJdmd0X3N0cm1vdXRfZW47CisJdTMyCQkJdmd0X3N0cm1vdXRfYnVmZmVyX2VuOworCXUzMgkJCWRiX2RlcHRoX2NvbnRyb2w7CisJdTMyCQkJZGJfZGVwdGhfaW5mbzsKKwl1MzIJCQlkYl9kZXB0aF9zaXplX2lkeDsKKwl1MzIJCQlkYl9kZXB0aF92aWV3OworCXUzMgkJCWRiX2RlcHRoX3NpemU7CisJdTMyCQkJZGJfb2Zmc2V0OworCXN0cnVjdCByYWRlb25fYm8JKmRiX2JvOwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgcjYwMF9icGVfZnJvbV9mb3JtYXQodTMyICpicGUsIHUzMiBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzg6CisJY2FzZSBWXzAzODAwNF9DT0xPUl80XzQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zXzNfMjoKKwljYXNlIFZfMDM4MDA0X0ZNVF8xOgorCQkqYnBlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzE2X0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfOF84OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfNV82XzU6CisJY2FzZSBWXzAzODAwNF9DT0xPUl82XzVfNToKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzFfNV81XzU6CisJY2FzZSBWXzAzODAwNF9DT0xPUl80XzRfNF80OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfNV81XzVfMToKKwkJKmJwZSA9IDI7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UXzhfOF84OgorCQkqYnBlID0gMzsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTZfMTY6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNl8xNl9GTE9BVDoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzhfMjQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl84XzI0X0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMjRfODoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzI0XzhfRkxPQVQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xMF8xMV8xMToKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzEwXzExXzExX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTFfMTFfMTA6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xMV8xMV8xMF9GTE9BVDoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzJfMTBfMTBfMTA6CisJY2FzZSBWXzAzODAwNF9DT0xPUl84XzhfOF84OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTBfMTBfMTBfMjoKKwljYXNlIFZfMDM4MDA0X0ZNVF81XzlfOV85X1NIQVJFREVYUDoKKwljYXNlIFZfMDM4MDA0X0ZNVF8zMl9BU184OgorCWNhc2UgVl8wMzgwMDRfRk1UXzMyX0FTXzhfODoKKwkJKmJwZSA9IDQ7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfQ09MT1JfWDI0XzhfMzJfRkxPQVQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyXzMyX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTZfMTZfMTZfMTY6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNl8xNl8xNl8xNl9GTE9BVDoKKwkJKmJwZSA9IDg7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UXzE2XzE2XzE2OgorCWNhc2UgVl8wMzgwMDRfRk1UXzE2XzE2XzE2X0ZMT0FUOgorCQkqYnBlID0gNjsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9GTVRfMzJfMzJfMzI6CisJY2FzZSBWXzAzODAwNF9GTVRfMzJfMzJfMzJfRkxPQVQ6CisJCSpicGUgPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMl8zMl8zMl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyXzMyXzMyXzMyX0ZMT0FUOgorCQkqYnBlID0gMTY7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UX0dCX0dSOgorCWNhc2UgVl8wMzgwMDRfRk1UX0JHX1JHOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfSU5WQUxJRDoKKwkJKmJwZSA9IDE2OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHI2MDBfY3NfdHJhY2tfaW5pdChzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbaV0gPSAwOworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZVtpXSA9IDA7CisJCXRyYWNrLT5jYl9jb2xvcl9zaXplX2lkeFtpXSA9IDA7CisJCXRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldID0gMDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvW2ldID0gTlVMTDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFtpXSA9IDB4RkZGRkZGRkY7CisJfQorCXRyYWNrLT5jYl90YXJnZXRfbWFzayA9IDB4RkZGRkZGRkY7CisJdHJhY2stPmNiX3NoYWRlcl9tYXNrID0gMHhGRkZGRkZGRjsKKwl0cmFjay0+ZGJfYm8gPSBOVUxMOworCS8qIGFzc3VtZSB0aGUgYmlnZ2VzdCBmb3JtYXQgYW5kIHRoYXQgaHRpbGUgaXMgZW5hYmxlZCAqLworCXRyYWNrLT5kYl9kZXB0aF9pbmZvID0gNyB8ICgxIDw8IDI1KTsKKwl0cmFjay0+ZGJfZGVwdGhfdmlldyA9IDB4RkZGRkMwMDA7CisJdHJhY2stPmRiX2RlcHRoX3NpemUgPSAweEZGRkZGRkZGOworCXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCA9IDA7CisJdHJhY2stPmRiX2RlcHRoX2NvbnRyb2wgPSAweEZGRkZGRkZGOworfQorCitzdGF0aWMgaW5saW5lIGludCByNjAwX2NzX3RyYWNrX3ZhbGlkYXRlX2NiKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2sgPSBwLT50cmFjazsKKwl1MzIgYnBlID0gMCwgcGl0Y2gsIHNsaWNlX3RpbGVfbWF4LCBzaXplLCB0bXAsIGhlaWdodDsKKwl2b2xhdGlsZSB1MzIgKmliID0gcC0+aWItPnB0cjsKKworCWlmIChHXzAyODBBMF9USUxFX01PREUodHJhY2stPmNiX2NvbG9yX2luZm9baV0pKSB7CisJCWRldl93YXJuKHAtPmRldiwgIkZNQVNLIG9yIENNQVNLIGJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGtlcm5lbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzaXplID0gcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKTsKKwlpZiAocjYwMF9icGVfZnJvbV9mb3JtYXQoJmJwZSwgR18wMjgwQTBfRk9STUFUKHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKSkpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgaW52YWxpZCBmb3JtYXQgJWQgZm9yICVkICgweCUwOFgpXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgR18wMjgwQTBfRk9STUFUKHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKSwKKwkJCWksIHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBpdGNoID0gKEdfMDI4MDYwX1BJVENIX1RJTEVfTUFYKHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKSArIDEpIDw8IDM7CisJc2xpY2VfdGlsZV9tYXggPSBHXzAyODA2MF9TTElDRV9USUxFX01BWCh0cmFjay0+Y2JfY29sb3Jfc2l6ZVtpXSkgKyAxOworCWlmICghcGl0Y2gpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBmb3IgJWQgaW52YWxpZCAoMHglMDhYKVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIGksIHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWhlaWdodCA9IHNpemUgLyAocGl0Y2ggKiBicGUpOworCWlmIChoZWlnaHQgPiA4MTkyKQorCQloZWlnaHQgPSA4MTkyOworCXN3aXRjaCAoR18wMjgwQTBfQVJSQVlfTU9ERSh0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSkpIHsKKwljYXNlIFZfMDI4MEEwX0FSUkFZX0xJTkVBUl9HRU5FUkFMOgorCWNhc2UgVl8wMjgwQTBfQVJSQVlfTElORUFSX0FMSUdORUQ6CisJCWlmIChwaXRjaCAmIDB4M2YpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCB4ICVkID0gJWQpIGludmFsaWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgYnBlLCBwaXRjaCAqIGJwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKHBpdGNoICogYnBlKSAmICh0cmFjay0+Z3JvdXBfc2l6ZSAtIDEpKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFZfMDI4MEEwX0FSUkFZXzFEX1RJTEVEX1RISU4xOgorCQlpZiAoKHBpdGNoICogOCAqIGJwZSAqIHRyYWNrLT5uc2FtcGxlcykgJiAodHJhY2stPmdyb3VwX3NpemUgLSAxKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaGVpZ2h0ICY9IH4weDc7CisJCWlmICghaGVpZ2h0KQorCQkJaGVpZ2h0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBWXzAyODBBMF9BUlJBWV8yRF9USUxFRF9USElOMToKKwkJaWYgKHBpdGNoICYgKCg4ICogdHJhY2stPm5iYW5rcykgLSAxKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wID0gcGl0Y2ggKiA4ICogYnBlICogdHJhY2stPm5zYW1wbGVzOworCQl0bXAgPSB0bXAgLyB0cmFjay0+bmJhbmtzOworCQlpZiAodG1wICYgKHRyYWNrLT5ncm91cF9zaXplIC0gMSkpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWhlaWdodCAmPSB+KCgxNiAqIHRyYWNrLT5ucGlwZXMpIC0gMSk7CisJCWlmICghaGVpZ2h0KQorCQkJaGVpZ2h0ID0gMTYgKiB0cmFjay0+bnBpcGVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihwLT5kZXYsICIlcyBpbnZhbGlkIHRpbGluZyAlZCBmb3IgJWQgKDB4JTA4WClcbiIsIF9fZnVuY19fLAorCQkJR18wMjgwQTBfQVJSQVlfTU9ERSh0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSksIGksCisJCQl0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBjaGVjayBvZmZzZXQgKi8KKwl0bXAgPSBoZWlnaHQgKiBwaXRjaDsKKwlpZiAoKHRtcCArIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSkgeworCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkIHRvIGJpZ1xuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogbGltaXQgbWF4IHRpbGUgKi8KKwl0bXAgPSAoaGVpZ2h0ICogcGl0Y2gpID4+IDY7CisJaWYgKHRtcCA8IHNsaWNlX3RpbGVfbWF4KQorCQlzbGljZV90aWxlX21heCA9IHRtcDsKKwl0bXAgPSBTXzAyODA2MF9QSVRDSF9USUxFX01BWCgocGl0Y2ggPj4gMykgLSAxKSB8CisJCVNfMDI4MDYwX1NMSUNFX1RJTEVfTUFYKHNsaWNlX3RpbGVfbWF4IC0gMSk7CisJaWJbdHJhY2stPmNiX2NvbG9yX3NpemVfaWR4W2ldXSA9IHRtcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByNjAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByNjAwX2NzX3RyYWNrICp0cmFjayA9IHAtPnRyYWNrOworCXUzMiB0bXA7CisJaW50IHIsIGk7CisJdm9sYXRpbGUgdTMyICppYiA9IHAtPmliLT5wdHI7CisKKwkvKiBvbiBsZWdhY3kga2VybmVsIHdlIGRvbid0IHBlcmZvcm0gYWR2YW5jZWQgY2hlY2sgKi8KKwlpZiAocC0+cmRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBzdXBwb3J0IG91dCBidWZmZXIgeWV0ICovCisJaWYgKHRyYWNrLT52Z3Rfc3RybW91dF9lbiB8fCB0cmFjay0+dmd0X3N0cm1vdXRfYnVmZmVyX2VuKSB7CisJCWRldl93YXJuKHAtPmRldiwgInRoaXMga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBTTVggb3V0cHV0IGJ1ZmZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBjaGVjayB0aGF0IHdlIGhhdmUgYSBjYiBmb3IgZWFjaCBlbmFibGVkIHRhcmdldCwgd2UgZG9uJ3QgY2hlY2sKKwkgKiBzaGFkZXJfbWFzayBiZWNhdXNlIGl0IHNlZW1zIG1lc2EgaXNuJ3QgYWx3YXlzIHNldHRpbmcgaXQgOigKKwkgKi8KKwl0bXAgPSB0cmFjay0+Y2JfdGFyZ2V0X21hc2s7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKHRtcCA+PiAoaSAqIDQpKSAmIDB4RikgeworCQkJLyogYXQgbGVhc3Qgb25lIGNvbXBvbmVudCBpcyBlbmFibGVkICovCisJCQlpZiAodHJhY2stPmNiX2NvbG9yX2JvW2ldID09IE5VTEwpIHsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBtYXNrIDB4JTA4WCB8IDB4JTA4WCBubyBjYiBmb3IgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgdHJhY2stPmNiX3RhcmdldF9tYXNrLCB0cmFjay0+Y2Jfc2hhZGVyX21hc2ssIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJLyogcGVyZm9ybSByZXdyaXRlIG9mIENCX0NPTE9SWzAtN11fU0laRSAqLworCQkJciA9IHI2MDBfY3NfdHJhY2tfdmFsaWRhdGVfY2IocCwgaSk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKKwkJfQorCX0KKwkvKiBDaGVjayBkZXB0aCBidWZmZXIgKi8KKwlpZiAoR18wMjg4MDBfU1RFTkNJTF9FTkFCTEUodHJhY2stPmRiX2RlcHRoX2NvbnRyb2wpIHx8CisJCUdfMDI4ODAwX1pfRU5BQkxFKHRyYWNrLT5kYl9kZXB0aF9jb250cm9sKSkgeworCQl1MzIgbnZpZXdzLCBicGUsIG50aWxlczsKKwkJaWYgKHRyYWNrLT5kYl9ibyA9PSBOVUxMKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgd2l0aCBubyBkZXB0aCBidWZmZXJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKEdfMDI4MDEwX1RJTEVfU1VSRkFDRV9FTkFCTEUodHJhY2stPmRiX2RlcHRoX2luZm8pKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJ0aGlzIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgei9zdGVuY2lsIGh0aWxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXN3aXRjaCAoR18wMjgwMTBfRk9STUFUKHRyYWNrLT5kYl9kZXB0aF9pbmZvKSkgeworCQljYXNlIFZfMDI4MDEwX0RFUFRIXzE2OgorCQkJYnBlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFZfMDI4MDEwX0RFUFRIX1g4XzI0OgorCQljYXNlIFZfMDI4MDEwX0RFUFRIXzhfMjQ6CisJCWNhc2UgVl8wMjgwMTBfREVQVEhfWDhfMjRfRkxPQVQ6CisJCWNhc2UgVl8wMjgwMTBfREVQVEhfOF8yNF9GTE9BVDoKKwkJY2FzZSBWXzAyODAxMF9ERVBUSF8zMl9GTE9BVDoKKwkJCWJwZSA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSBWXzAyODAxMF9ERVBUSF9YMjRfOF8zMl9GTE9BVDoKKwkJCWJwZSA9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCB3aXRoIGludmFsaWQgZm9ybWF0ICVkXG4iLCBHXzAyODAxMF9GT1JNQVQodHJhY2stPmRiX2RlcHRoX2luZm8pKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgodHJhY2stPmRiX2RlcHRoX3NpemUgJiAweEZGRkZGQzAwKSA9PSAweEZGRkZGQzAwKSB7CisJCQlpZiAoIXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCkgeworCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgc2l6ZSBub3Qgc2V0XG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiWW91IGhhdmUgb2xkICYgYnJva2VuIHVzZXJzcGFjZSBwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYVxuIik7CisJCQl0bXAgPSByYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pIC0gdHJhY2stPmRiX29mZnNldDsKKwkJCXRtcCA9ICh0bXAgLyBicGUpID4+IDY7CisJCQlpZiAoIXRtcCkgeworCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWxkKVxuIiwKKwkJCQkJCXRyYWNrLT5kYl9kZXB0aF9zaXplLCBicGUsIHRyYWNrLT5kYl9vZmZzZXQsCisJCQkJCQlyYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW3RyYWNrLT5kYl9kZXB0aF9zaXplX2lkeF0gPSBTXzAyODAwMF9TTElDRV9USUxFX01BWCh0bXAgLSAxKSB8ICh0cmFjay0+ZGJfZGVwdGhfc2l6ZSAmIDB4M0ZGKTsKKwkJfSBlbHNlIHsKKwkJCW50aWxlcyA9IEdfMDI4MDAwX1NMSUNFX1RJTEVfTUFYKHRyYWNrLT5kYl9kZXB0aF9zaXplKSArIDE7CisJCQludmlld3MgPSBHXzAyODAwNF9TTElDRV9NQVgodHJhY2stPmRiX2RlcHRoX3ZpZXcpICsgMTsKKwkJCXRtcCA9IG50aWxlcyAqIGJwZSAqIDY0ICogbnZpZXdzOworCQkJaWYgKCh0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0KSA+IHJhZGVvbl9ib19zaXplKHRyYWNrLT5kYl9ibykpIHsKKwkJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgYnVmZmVyIHRvbyBzbWFsbCAoMHglMDhYICVkICVkICVkIC0+ICVkIGhhdmUgJWxkKVxuIiwKKwkJCQkJCXRyYWNrLT5kYl9kZXB0aF9zaXplLCBudGlsZXMsIG52aWV3cywgYnBlLCB0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0LAorCQkJCQkJcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcjYwMF9jc19wYWNrZXRfcGFyc2UoKSAtIHBhcnNlIGNwIHBhY2tldCBhbmQgcG9pbnQgaWIgaW5kZXggdG8gbmV4dCBwYWNrZXQKICAqIEBwYXJzZXI6CXBhcnNlciBzdHJ1Y3R1cmUgaG9sZGluZyBwYXJzaW5nIGNvbnRleHQuCkBAIC0zNTksNiArNjYyLDMzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfY2hlY2tfcmVnKCkgLSBjaGVjayBpZiByZWdpc3RlciBpcyBhdXRob3JpemVkIG9yIG5vdAorICogQHBhcnNlcjogcGFyc2VyIHN0cnVjdHVyZSBob2xkaW5nIHBhcnNpbmcgY29udGV4dAorICogQHJlZzogcmVnaXN0ZXIgd2UgYXJlIHRlc3RpbmcKKyAqIEBpZHg6IGluZGV4IGludG8gdGhlIGNzIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0ZXN0IGFnYWluc3QgcjYwMF9yZWdfc2FmZV9ibSBhbmQgcmV0dXJuIDAKKyAqIGlmIHJlZ2lzdGVyIGlzIHNhZmUuIElmIHJlZ2lzdGVyIGlzIG5vdCBmbGFnIGFzIHNhZmUgdGhpcyBmdW5jdGlvbgorICogd2lsbCB0ZXN0IGl0IGFnYWluc3QgYSBsaXN0IG9mIHJlZ2lzdGVyIG5lZWRpbmQgc3BlY2lhbCBoYW5kbGluZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcjYwMF9jc19jaGVja19yZWcoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHUzMiByZWcsIHUzMiBpZHgpCit7CisJc3RydWN0IHI2MDBfY3NfdHJhY2sgKnRyYWNrID0gKHN0cnVjdCByNjAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJdTMyIGxhc3RfcmVnID0gQVJSQVlfU0laRShyNjAwX3JlZ19zYWZlX2JtKTsKKwl1MzIgbSwgaSwgdG1wLCAqaWI7CisJaW50IHI7CisKKwlpID0gKHJlZyA+PiA3KTsKKwlpZiAoaSA+IGxhc3RfcmVnKSB7CisJCWRldl93YXJuKHAtPmRldiwgImZvcmJpZGRlbiByZWdpc3RlciAweCUwOHggYXQgJWRcbiIsIHJlZywgaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW0gPSAxIDw8ICgocmVnID4+IDIpICYgMzEpOworCWlmICghKHI2MDBfcmVnX3NhZmVfYm1baV0gJiBtKSkKKwkJcmV0dXJuIDA7CisJaWIgPSBwLT5pYi0+cHRyOworCXN3aXRjaCAocmVnKSB7CisJLyogZm9yY2UgZm9sbG93aW5nIHJlZyB0byAwIGluIGFuIGF0dGVtcCB0byBkaXNhYmxlIG91dCBidWZmZXIKKwkgKiB3aGljaCB3aWxsIG5lZWQgdXMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIHRvIHBlcmZvcm0KKwkgKiBzZWN1cml0eSBjaGVjayBvbiBpdCAoSmVyb21lKQorCSAqLworCWNhc2UgUl8wMjg4QThfU1FfRVNHU19SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNDRfU1FfRVNHU19SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCMF9TUV9FU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNTRfU1FfRVNUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QzBfU1FfRkJVRl9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNzRfU1FfRkJVRl9SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCNF9TUV9HU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNUNfU1FfR1NUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QUNfU1FfR1NWU19SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNENfU1FfR1NWU19SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCQ19TUV9QU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNkNfU1FfUFNUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QzRfU1FfUkVEVUNfUklOR19JVEVNU0laRToKKwljYXNlIFJfMDA4QzdDX1NRX1JFRFVDX1JJTkdfU0laRToKKwljYXNlIFJfMDI4OEI4X1NRX1ZTVE1QX1JJTkdfSVRFTVNJWkU6CisJY2FzZSBSXzAwOEM2NF9TUV9WU1RNUF9SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhDOF9TUV9HU19WRVJUX0lURU1TSVpFOgorCQkvKiBnZXQgdmFsdWUgdG8gcG9wdWxhdGUgdGhlIElCIGRvbid0IHJlbW92ZSAqLworCQl0bXAgPXJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4XSA9IDA7CisJCWJyZWFrOworCWNhc2UgUl8wMjg4MDBfREJfREVQVEhfQ09OVFJPTDoKKwkJdHJhY2stPmRiX2RlcHRoX2NvbnRyb2wgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMTBfREJfREVQVEhfSU5GTzoKKwkJdHJhY2stPmRiX2RlcHRoX2luZm8gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMDRfREJfREVQVEhfVklFVzoKKwkJdHJhY2stPmRiX2RlcHRoX3ZpZXcgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMDBfREJfREVQVEhfU0laRToKKwkJdHJhY2stPmRiX2RlcHRoX3NpemUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCA9IGlkeDsKKwkJYnJlYWs7CisJY2FzZSBSXzAyOEFCMF9WR1RfU1RSTU9VVF9FTjoKKwkJdHJhY2stPnZndF9zdHJtb3V0X2VuID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4QjIwX1ZHVF9TVFJNT1VUX0JVRkZFUl9FTjoKKwkJdHJhY2stPnZndF9zdHJtb3V0X2J1ZmZlcl9lbiA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJYnJlYWs7CisJY2FzZSBSXzAyODIzOF9DQl9UQVJHRVRfTUFTSzoKKwkJdHJhY2stPmNiX3RhcmdldF9tYXNrID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4MjNDX0NCX1NIQURFUl9NQVNLOgorCQl0cmFjay0+Y2Jfc2hhZGVyX21hc2sgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjhDMDRfUEFfU0NfQUFfQ09ORklHOgorCQl0bXAgPSBHXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSk7CisJCXRyYWNrLT5uc2FtcGxlcyA9IDEgPDwgdG1wOworCQlicmVhazsKKwljYXNlIFJfMDI4MEEwX0NCX0NPTE9SMF9JTkZPOgorCWNhc2UgUl8wMjgwQTRfQ0JfQ09MT1IxX0lORk86CisJY2FzZSBSXzAyODBBOF9DQl9DT0xPUjJfSU5GTzoKKwljYXNlIFJfMDI4MEFDX0NCX0NPTE9SM19JTkZPOgorCWNhc2UgUl8wMjgwQjBfQ0JfQ09MT1I0X0lORk86CisJY2FzZSBSXzAyODBCNF9DQl9DT0xPUjVfSU5GTzoKKwljYXNlIFJfMDI4MEI4X0NCX0NPTE9SNl9JTkZPOgorCWNhc2UgUl8wMjgwQkNfQ0JfQ09MT1I3X0lORk86CisJCXRtcCA9IChyZWcgLSBSXzAyODBBMF9DQl9DT0xPUjBfSU5GTykgLyA0OworCQl0cmFjay0+Y2JfY29sb3JfaW5mb1t0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4MDYwX0NCX0NPTE9SMF9TSVpFOgorCWNhc2UgUl8wMjgwNjRfQ0JfQ09MT1IxX1NJWkU6CisJY2FzZSBSXzAyODA2OF9DQl9DT0xPUjJfU0laRToKKwljYXNlIFJfMDI4MDZDX0NCX0NPTE9SM19TSVpFOgorCWNhc2UgUl8wMjgwNzBfQ0JfQ09MT1I0X1NJWkU6CisJY2FzZSBSXzAyODA3NF9DQl9DT0xPUjVfU0laRToKKwljYXNlIFJfMDI4MDc4X0NCX0NPTE9SNl9TSVpFOgorCWNhc2UgUl8wMjgwN0NfQ0JfQ09MT1I3X1NJWkU6CisJCXRtcCA9IChyZWcgLSBSXzAyODA2MF9DQl9DT0xPUjBfU0laRSkgLyA0OworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZVt0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZV9pZHhbdG1wXSA9IGlkeDsKKwkJYnJlYWs7CisJCS8qIFRoaXMgcmVnaXN0ZXIgd2VyZSBhZGRlZCBsYXRlLCB0aGVyZSBpcyB1c2Vyc3BhY2UKKwkJICogd2hpY2ggZG9lcyBwcm92aWRlIHJlbG9jYXRpb24gZm9yIHRob3NlIGJ1dCBzZXQKKwkJICogMCBvZmZzZXQuIEluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIG9sZCB1c2Vyc3BhY2UKKwkJICogd2UgZGV0ZWN0IHRoaXMgYW5kIHNldCBhZGRyZXNzIHRvIHBvaW50IHRvIGxhc3QKKwkJICogQ0JfQ09MT1IwX0JBU0UsIG5vdGUgdGhhdCBpZiB1c2Vyc3BhY2UgZG9lc24ndCBzZXQKKwkJICogQ0JfQ09MT1IwX0JBU0UgYmVmb3JlIHRoaXMgcmVnaXN0ZXIgd2Ugd2lsbCByZXBvcnQKKwkJICogZXJyb3IuIE9sZCB1c2Vyc3BhY2UgYWx3YXlzIHNldCBDQl9DT0xPUjBfQkFTRQorCQkgKiBiZWZvcmUgYW55IG9mIHRoaXMuCisJCSAqLworCWNhc2UgUl8wMjgwRTBfQ0JfQ09MT1IwX0ZSQUc6CisJY2FzZSBSXzAyODBFNF9DQl9DT0xPUjFfRlJBRzoKKwljYXNlIFJfMDI4MEU4X0NCX0NPTE9SMl9GUkFHOgorCWNhc2UgUl8wMjgwRUNfQ0JfQ09MT1IzX0ZSQUc6CisJY2FzZSBSXzAyODBGMF9DQl9DT0xPUjRfRlJBRzoKKwljYXNlIFJfMDI4MEY0X0NCX0NPTE9SNV9GUkFHOgorCWNhc2UgUl8wMjgwRjhfQ0JfQ09MT1I2X0ZSQUc6CisJY2FzZSBSXzAyODBGQ19DQl9DT0xPUjdfRlJBRzoKKwkJdG1wID0gKHJlZyAtIFJfMDI4MEUwX0NCX0NPTE9SMF9GUkFHKSAvIDQ7CisJCWlmICghcjYwMF9jc19wYWNrZXRfbmV4dF9pc19wa3QzX25vcChwKSkgeworCQkJaWYgKCF0cmFjay0+Y2JfY29sb3JfYmFzZV9sYXN0W3RtcF0pIHsKKwkJCQlkZXZfZXJyKHAtPmRldiwgIkJyb2tlbiBvbGQgdXNlcnNwYWNlID8gbm8gY2JfY29sb3IwX2Jhc2Ugc3VwcGxpZWQgYmVmb3JlIHRyeWluZyB0byB3cml0ZSAweCUwOFhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpYltpZHhdID0gdHJhY2stPmNiX2NvbG9yX2Jhc2VfbGFzdFt0bXBdOworCQkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJZb3UgaGF2ZSBvbGQgJiBicm9rZW4gdXNlcnNwYWNlICIKKwkJCQkJInBsZWFzZSBjb25zaWRlciB1cGRhdGluZyBtZXNhICYgeGY4Ni12aWRlby1hdGlcbiIpOworCQkJdHJhY2stPmNiX2NvbG9yX2ZyYWdfYm9bdG1wXSA9IHRyYWNrLT5jYl9jb2xvcl9ib1t0bXBdOworCQl9IGVsc2UgeworCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHIDB4JTA0WFxuIiwgcmVnKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW2lkeF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCXRyYWNrLT5jYl9jb2xvcl9mcmFnX2JvW3RtcF0gPSByZWxvYy0+cm9iajsKKwkJfQorCQlicmVhazsKKwljYXNlIFJfMDI4MEMwX0NCX0NPTE9SMF9USUxFOgorCWNhc2UgUl8wMjgwQzRfQ0JfQ09MT1IxX1RJTEU6CisJY2FzZSBSXzAyODBDOF9DQl9DT0xPUjJfVElMRToKKwljYXNlIFJfMDI4MENDX0NCX0NPTE9SM19USUxFOgorCWNhc2UgUl8wMjgwRDBfQ0JfQ09MT1I0X1RJTEU6CisJY2FzZSBSXzAyODBENF9DQl9DT0xPUjVfVElMRToKKwljYXNlIFJfMDI4MEQ4X0NCX0NPTE9SNl9USUxFOgorCWNhc2UgUl8wMjgwRENfQ0JfQ09MT1I3X1RJTEU6CisJCXRtcCA9IChyZWcgLSBSXzAyODBDMF9DQl9DT0xPUjBfVElMRSkgLyA0OworCQlpZiAoIXI2MDBfY3NfcGFja2V0X25leHRfaXNfcGt0M19ub3AocCkpIHsKKwkJCWlmICghdHJhY2stPmNiX2NvbG9yX2Jhc2VfbGFzdFt0bXBdKSB7CisJCQkJZGV2X2VycihwLT5kZXYsICJCcm9rZW4gb2xkIHVzZXJzcGFjZSA/IG5vIGNiX2NvbG9yMF9iYXNlIHN1cHBsaWVkIGJlZm9yZSB0cnlpbmcgdG8gd3JpdGUgMHglMDhYXG4iLCByZWcpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWJbaWR4XSA9IHRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbdG1wXTsKKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiWW91IGhhdmUgb2xkICYgYnJva2VuIHVzZXJzcGFjZSAiCisJCQkJCSJwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYSAmIHhmODYtdmlkZW8tYXRpXG4iKTsKKwkJCXRyYWNrLT5jYl9jb2xvcl90aWxlX2JvW3RtcF0gPSB0cmFjay0+Y2JfY29sb3JfYm9bdG1wXTsKKwkJfSBlbHNlIHsKKwkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQlpZiAocikgeworCQkJCWRldl9lcnIocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAweCUwNFhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpYltpZHhdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQl0cmFjay0+Y2JfY29sb3JfdGlsZV9ib1t0bXBdID0gcmVsb2MtPnJvYmo7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDQl9DT0xPUjBfQkFTRToKKwljYXNlIENCX0NPTE9SMV9CQVNFOgorCWNhc2UgQ0JfQ09MT1IyX0JBU0U6CisJY2FzZSBDQl9DT0xPUjNfQkFTRToKKwljYXNlIENCX0NPTE9SNF9CQVNFOgorCWNhc2UgQ0JfQ09MT1I1X0JBU0U6CisJY2FzZSBDQl9DT0xPUjZfQkFTRToKKwljYXNlIENCX0NPTE9SN19CQVNFOgorCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAiCisJCQkJCSIweCUwNFhcbiIsIHJlZyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgPSAocmVnIC0gQ0JfQ09MT1IwX0JBU0UpIC8gNDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFt0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHhdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCXRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbdG1wXSA9IGliW2lkeF07CisJCXRyYWNrLT5jYl9jb2xvcl9ib1t0bXBdID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgREJfREVQVEhfQkFTRToKKwkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgImJhZCBTRVRfQ09OVEVYVF9SRUcgIgorCQkJCQkiMHglMDRYXG4iLCByZWcpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHJhY2stPmRiX29mZnNldCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4XSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQl0cmFjay0+ZGJfYm8gPSByZWxvYy0+cm9iajsKKwkJYnJlYWs7CisJY2FzZSBEQl9IVElMRV9EQVRBX0JBU0U6CisJY2FzZSBTUV9QR01fU1RBUlRfRlM6CisJY2FzZSBTUV9QR01fU1RBUlRfRVM6CisJY2FzZSBTUV9QR01fU1RBUlRfVlM6CisJY2FzZSBTUV9QR01fU1RBUlRfR1M6CisJY2FzZSBTUV9QR01fU1RBUlRfUFM6CisJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHICIKKwkJCQkJIjB4JTA0WFxuIiwgcmVnKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWliW2lkeF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiZm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA4eCBhdCAlZFxuIiwgcmVnLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaWZ5KHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGxldmVscykKK3sKKwlzaXplID0gc2l6ZSA+PiBsZXZlbHM7CisJaWYgKHNpemUgPCAxKQorCQlzaXplID0gMTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcjYwMF90ZXh0dXJlX3NpemUodW5zaWduZWQgbmZhY2VzLCB1bnNpZ25lZCBibGV2ZWwsIHVuc2lnbmVkIG5sZXZlbHMsCisJCQkJdW5zaWduZWQgdzAsIHVuc2lnbmVkIGgwLCB1bnNpZ25lZCBkMCwgdW5zaWduZWQgYnBlLAorCQkJCXVuc2lnbmVkICpsMF9zaXplLCB1bnNpZ25lZCAqbWlwbWFwX3NpemUpCit7CisJdW5zaWduZWQgb2Zmc2V0LCBpLCBsZXZlbCwgZmFjZTsKKwl1bnNpZ25lZCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcm93c3RyaWRlLCBzaXplOworCisJdzAgPSBtaW5pZnkodzAsIDApOworCWgwID0gbWluaWZ5KGgwLCAwKTsKKwlkMCA9IG1pbmlmeShkMCwgMCk7CisJZm9yKGkgPSAwLCBvZmZzZXQgPSAwLCBsZXZlbCA9IGJsZXZlbDsgaSA8IG5sZXZlbHM7IGkrKywgbGV2ZWwrKykgeworCQl3aWR0aCA9IG1pbmlmeSh3MCwgaSk7CisJCWhlaWdodCA9IG1pbmlmeShoMCwgaSk7CisJCWRlcHRoID0gbWluaWZ5KGQwLCBpKTsKKwkJZm9yKGZhY2UgPSAwOyBmYWNlIDwgbmZhY2VzOyBmYWNlKyspIHsKKwkJCXJvd3N0cmlkZSA9ICgod2lkdGggKiBicGUpICsgMjU1KSAmIH4yNTU7CisJCQlzaXplID0gaGVpZ2h0ICogcm93c3RyaWRlICogZGVwdGg7CisJCQlvZmZzZXQgKz0gc2l6ZTsKKwkJCW9mZnNldCA9IChvZmZzZXQgKyAweDFmKSAmIH4weDFmOworCQl9CisJfQorCSpsMF9zaXplID0gKCgodzAgKiBicGUpICsgMjU1KSAmIH4yNTUpICogaDAgKiBkMDsKKwkqbWlwbWFwX3NpemUgPSBvZmZzZXQ7CisJaWYgKCFibGV2ZWwpCisJCSptaXBtYXBfc2l6ZSAtPSAqbDBfc2l6ZTsKKwlpZiAoIW5sZXZlbHMpCisJCSptaXBtYXBfc2l6ZSA9ICpsMF9zaXplOworfQorCisvKioKKyAqIHI2MDBfY2hlY2tfdGV4dHVyZV9yZXNvdXJjZSgpIC0gY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYXV0aG9yaXplZCBvciBub3QKKyAqIEBwOiBwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0CisgKiBAaWR4OiBpbmRleCBpbnRvIHRoZSBjcyBidWZmZXIKKyAqIEB0ZXh0dXJlOiB0ZXh0dXJlJ3MgYm8gc3RydWN0dXJlCisgKiBAbWlwbWFwOiBtaXBtYXAncyBibyBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhhdCB0aGUgcmVzb3VyY2UgaGFzIHZhbGlkIGZpZWxkIGFuZCB0aGF0CisgKiB0aGUgdGV4dHVyZSBhbmQgbWlwbWFwIGJvIG9iamVjdCBhcmUgYmlnIGVub3VnaCB0byBjb3ZlciB0aGlzIHJlc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByNjAwX2NoZWNrX3RleHR1cmVfcmVzb3VyY2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsICB1MzIgaWR4LAorCQkJCQkJc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwKKwkJCQkJCXN0cnVjdCByYWRlb25fYm8gKm1pcG1hcCkKK3sKKwl1MzIgbmZhY2VzLCBubGV2ZWxzLCBibGV2ZWwsIHcwLCBoMCwgZDAsIGJwZSA9IDA7CisJdTMyIHdvcmQwLCB3b3JkMSwgbDBfc2l6ZSwgbWlwbWFwX3NpemU7CisKKwkvKiBvbiBsZWdhY3kga2VybmVsIHdlIGRvbid0IHBlcmZvcm0gYWR2YW5jZWQgY2hlY2sgKi8KKwlpZiAocC0+cmRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwl3b3JkMCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMCk7CisJd29yZDEgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOworCXcwID0gR18wMzgwMDBfVEVYX1dJRFRIKHdvcmQwKSArIDE7CisJaDAgPSBHXzAzODAwNF9URVhfSEVJR0hUKHdvcmQxKSArIDE7CisJZDAgPSBHXzAzODAwNF9URVhfREVQVEgod29yZDEpOworCW5mYWNlcyA9IDE7CisJc3dpdGNoIChHXzAzODAwMF9ESU0od29yZDApKSB7CisJY2FzZSBWXzAzODAwMF9TUV9URVhfRElNXzFEOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRDoKKwljYXNlIFZfMDM4MDAwX1NRX1RFWF9ESU1fM0Q6CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV9DVUJFTUFQOgorCQluZmFjZXMgPSA2OworCQlicmVhazsKKwljYXNlIFZfMDM4MDAwX1NRX1RFWF9ESU1fMURfQVJSQVk6CisJY2FzZSBWXzAzODAwMF9TUV9URVhfRElNXzJEX0FSUkFZOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9NU0FBOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9BUlJBWV9NU0FBOgorCWRlZmF1bHQ6CisJCWRldl93YXJuKHAtPmRldiwgInRoaXMga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCAlZCB0ZXh0dXJlIGRpbVxuIiwgR18wMzgwMDBfRElNKHdvcmQwKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocjYwMF9icGVfZnJvbV9mb3JtYXQoJmJwZSwgIEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKSkpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4dHVyZSBpbnZhbGlkIGZvcm1hdCAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3b3JkMCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgNCk7CisJd29yZDEgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDUpOworCWJsZXZlbCA9IEdfMDM4MDEwX0JBU0VfTEVWRUwod29yZDApOworCW5sZXZlbHMgPSBHXzAzODAxNF9MQVNUX0xFVkVMKHdvcmQxKTsKKwlyNjAwX3RleHR1cmVfc2l6ZShuZmFjZXMsIGJsZXZlbCwgbmxldmVscywgdzAsIGgwLCBkMCwgYnBlLCAmbDBfc2l6ZSwgJm1pcG1hcF9zaXplKTsKKwkvKiB1c2luZyBnZXQgaWIgd2lsbCBnaXZlIHVzIHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dHVyZSBibyAqLworCXdvcmQwID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAyKTsKKwlpZiAoKGwwX3NpemUgKyB3b3JkMCkgPiByYWRlb25fYm9fc2l6ZSh0ZXh0dXJlKSkgeworCQlkZXZfd2FybihwLT5kZXYsICJ0ZXh0dXJlIGJvIHRvbyBzbWFsbCAoJWQgJWQgJWQgJWQgLT4gJWQgaGF2ZSAlbGQpXG4iLAorCQkJdzAsIGgwLCBicGUsIHdvcmQwLCBsMF9zaXplLCByYWRlb25fYm9fc2l6ZSh0ZXh0dXJlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiB1c2luZyBnZXQgaWIgd2lsbCBnaXZlIHVzIHRoZSBvZmZzZXQgaW50byB0aGUgbWlwbWFwIGJvICovCisJd29yZDAgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDMpOworCWlmICgobWlwbWFwX3NpemUgKyB3b3JkMCkgPiByYWRlb25fYm9fc2l6ZShtaXBtYXApKSB7CisJCWRldl93YXJuKHAtPmRldiwgIm1pcG1hcCBibyB0b28gc21hbGwgKCVkICVkICVkICVkICVkICVkIC0+ICVkIGhhdmUgJWxkKVxuIiwKKwkJCXcwLCBoMCwgYnBlLCBibGV2ZWwsIG5sZXZlbHMsIHdvcmQwLCBtaXBtYXBfc2l6ZSwgcmFkZW9uX2JvX3NpemUodGV4dHVyZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcjYwMF9wYWNrZXQzX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCiB7CkBAIC00MDgsMTIgKzEwMzksMjIgQEAKIAkJfQogCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CiAJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9BVVRPOgogCQlpZiAocGt0LT5jb3VudCAhPSAxKSB7CiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYX0FVVE9cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW0gJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgaWR4KTsKKwkJCXJldHVybiByOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19EUkFXX0lOREVYX0lNTURfQkU6CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfSU1NRDoKQEAgLTQyMSw2ICsxMDYyLDExIEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYX0lNTURcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfV0FJVF9SRUdfTUVNOgogCQlpZiAocGt0LT5jb3VudCAhPSA1KSB7CkBAIC00OTMsMzAgKzExMzksOSBAQAogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7Ci0JCQlzd2l0Y2ggKHJlZykgewotCQkJY2FzZSBTUV9FU0dTX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfR1NWU19SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX0VTVE1QX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfR1NUTVBfUklOR19CQVNFOgotCQkJY2FzZSBTUV9WU1RNUF9SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX1BTVE1QX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfRkJVRl9SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX1JFRFVDX1JJTkdfQkFTRToKLQkJCWNhc2UgU1hfTUVNT1JZX0VYUE9SVF9CQVNFOgotCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQkJaWYgKHIpIHsKLQkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTkZJR19SRUcgIgotCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDUF9DT0hFUl9CQVNFOgotCQkJCS8qIHVzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQyAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KKwkJCXIgPSByNjAwX2NzX2NoZWNrX3JlZyhwLCByZWcsIGlkeCsxK2kpOworCQkJaWYgKHIpCisJCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9DT05URVhUX1JFRzoKQEAgLTUzMCwxMDYgKzExNTUsOSBAQAogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7Ci0JCQlzd2l0Y2ggKHJlZykgewotCQkJLyogVGhpcyByZWdpc3RlciB3ZXJlIGFkZGVkIGxhdGUsIHRoZXJlIGlzIHVzZXJzcGFjZQotCQkJICogd2hpY2ggZG9lcyBwcm92aWRlIHJlbG9jYXRpb24gZm9yIHRob3NlIGJ1dCBzZXQKLQkJCSAqIDAgb2Zmc2V0LiBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBvbGQgdXNlcnNwYWNlCi0JCQkgKiB3ZSBkZXRlY3QgdGhpcyBhbmQgc2V0IGFkZHJlc3MgdG8gcG9pbnQgdG8gbGFzdAotCQkJICogQ0JfQ09MT1IwX0JBU0UsIG5vdGUgdGhhdCBpZiB1c2Vyc3BhY2UgZG9lc24ndCBzZXQKLQkJCSAqIENCX0NPTE9SMF9CQVNFIGJlZm9yZSB0aGlzIHJlZ2lzdGVyIHdlIHdpbGwgcmVwb3J0Ci0JCQkgKiBlcnJvci4gT2xkIHVzZXJzcGFjZSBhbHdheXMgc2V0IENCX0NPTE9SMF9CQVNFCi0JCQkgKiBiZWZvcmUgYW55IG9mIHRoaXMuCi0JCQkgKi8KLQkJCWNhc2UgUl8wMjgwRTBfQ0JfQ09MT1IwX0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEU0X0NCX0NPTE9SMV9GUkFHOgotCQkJY2FzZSBSXzAyODBFOF9DQl9DT0xPUjJfRlJBRzoKLQkJCWNhc2UgUl8wMjgwRUNfQ0JfQ09MT1IzX0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEYwX0NCX0NPTE9SNF9GUkFHOgotCQkJY2FzZSBSXzAyODBGNF9DQl9DT0xPUjVfRlJBRzoKLQkJCWNhc2UgUl8wMjgwRjhfQ0JfQ09MT1I2X0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEZDX0NCX0NPTE9SN19GUkFHOgotCQkJY2FzZSBSXzAyODBDMF9DQl9DT0xPUjBfVElMRToKLQkJCWNhc2UgUl8wMjgwQzRfQ0JfQ09MT1IxX1RJTEU6Ci0JCQljYXNlIFJfMDI4MEM4X0NCX0NPTE9SMl9USUxFOgotCQkJY2FzZSBSXzAyODBDQ19DQl9DT0xPUjNfVElMRToKLQkJCWNhc2UgUl8wMjgwRDBfQ0JfQ09MT1I0X1RJTEU6Ci0JCQljYXNlIFJfMDI4MEQ0X0NCX0NPTE9SNV9USUxFOgotCQkJY2FzZSBSXzAyODBEOF9DQl9DT0xPUjZfVElMRToKLQkJCWNhc2UgUl8wMjgwRENfQ0JfQ09MT1I3X1RJTEU6Ci0JCQkJaWYgKCFyNjAwX2NzX3BhY2tldF9uZXh0X2lzX3BrdDNfbm9wKHApKSB7Ci0JCQkJCWlmICghdHJhY2stPmNiX2NvbG9yMF9iYXNlX2xhc3QpIHsKLQkJCQkJCWRldl9lcnIocC0+ZGV2LCAiQnJva2VuIG9sZCB1c2Vyc3BhY2UgPyBubyBjYl9jb2xvcjBfYmFzZSBzdXBwbGllZCBiZWZvcmUgdHJ5aW5nIHRvIHdyaXRlIDB4JTA4WFxuIiwgcmVnKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCWliW2lkeCsxK2ldID0gdHJhY2stPmNiX2NvbG9yMF9iYXNlX2xhc3Q7Ci0JCQkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAicmFkZW9uOiBZb3UgaGF2ZSBvbGQgJiBicm9rZW4gdXNlcnNwYWNlICIKLQkJCQkJCSJwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYSAmIHhmODYtdmlkZW8tYXRpXG4iKTsKLQkJCQl9IGVsc2UgewotCQkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJCQlpZiAocikgewotCQkJCQkJZGV2X2VycihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHIDB4JTA0WFxuIiwgcmVnKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCWliW2lkeCsxK2ldICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBEQl9ERVBUSF9CQVNFOgotCQkJY2FzZSBEQl9IVElMRV9EQVRBX0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SMF9CQVNFOgotCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQkJaWYgKHIpIHsKLQkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTlRFWFRfUkVHICIKLQkJCQkJCQkiMHglMDRYXG4iLCByZWcpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJaWJbaWR4KzEraV0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKLQkJCQl0cmFjay0+Y2JfY29sb3IwX2Jhc2VfbGFzdCA9IGliW2lkeCsxK2ldOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDQl9DT0xPUjFfQkFTRToKLQkJCWNhc2UgQ0JfQ09MT1IyX0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SM19CQVNFOgotCQkJY2FzZSBDQl9DT0xPUjRfQkFTRToKLQkJCWNhc2UgQ0JfQ09MT1I1X0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SNl9CQVNFOgotCQkJY2FzZSBDQl9DT0xPUjdfQkFTRToKLQkJCWNhc2UgU1FfUEdNX1NUQVJUX0ZTOgotCQkJY2FzZSBTUV9QR01fU1RBUlRfRVM6Ci0JCQljYXNlIFNRX1BHTV9TVEFSVF9WUzoKLQkJCWNhc2UgU1FfUEdNX1NUQVJUX0dTOgotCQkJY2FzZSBTUV9QR01fU1RBUlRfUFM6Ci0JCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCQlpZiAocikgewotCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09OVEVYVF9SRUcgIgotCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWR1RfRE1BX0JBU0U6Ci0JCQljYXNlIFZHVF9ETUFfQkFTRV9ISToKLQkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBEUkFXX0lOREVYIHBhY2tldCAzICovCi0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMDoKLQkJCWNhc2UgVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8xOgotCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMzoKLQkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBTVFJNT1VUX0JVRkZFUiBwYWNrZXQgMyAqLwotCQkJCURSTV9FUlJPUigiYmFkIGNvbnRleHQgcmVnOiAweCUwOHhcbiIsIHJlZyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQorCQkJciA9IHI2MDBfY3NfY2hlY2tfcmVnKHAsIHJlZywgaWR4KzEraSk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX1JFU09VUkNFOgpAQCAtNjQ2LDYgKzExNzQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgeworCQkJc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwgKm1pcG1hcDsKKwkJCXUzMiBzaXplLCBvZmZzZXQ7CisKIAkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUocmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKGkqNykrNisxKSkpIHsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgogCQkJCS8qIHRleCBiYXNlICovCkBAIC02NTUsNiArMTE4Niw3IEBACiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCQlpYltpZHgrMSsoaSo3KSsyXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCXRleHR1cmUgPSByZWxvYy0+cm9iajsKIAkJCQkvKiB0ZXggbWlwIGJhc2UgKi8KIAkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwogCQkJCWlmIChyKSB7CkBAIC02NjIsNiArMTE5NCwxMSBAQAogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrM10gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQltaXBtYXAgPSByZWxvYy0+cm9iajsKKwkJCQlyID0gcjYwMF9jaGVja190ZXh0dXJlX3Jlc291cmNlKHAsICBpZHgrKGkqNykrMSwKKwkJCQkJCXRleHR1cmUsIG1pcG1hcCk7CisJCQkJaWYgKHIpCisJCQkJCXJldHVybiByOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTUV9URVhfVlRYX1ZBTElEX0JVRkZFUjoKIAkJCQkvKiB2dHggYmFzZSAqLwpAQCAtNjcwLDYgKzEyMDcsMTMgQEAKIAkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQorCQkJCW9mZnNldCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzErKGkqNykrMCk7CisJCQkJc2l6ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzErKGkqNykrMSk7CisJCQkJaWYgKHAtPnJkZXYgJiYgKHNpemUgKyBvZmZzZXQpID4gcmFkZW9uX2JvX3NpemUocmVsb2MtPnJvYmopKSB7CisJCQkJCS8qIGZvcmNlIHNpemUgdG8gc2l6ZSBvZiB0aGUgYnVmZmVyICovCisJCQkJCWRldl93YXJuKHAtPmRldiwgInZibyByZXNvdXJjZSBzZWVtcyB0b28gYmlnIGZvciB0aGUgYm9cbiIpOworCQkJCQlpYltpZHgrMSsoaSo3KSsxXSA9IHJhZGVvbl9ib19zaXplKHJlbG9jLT5yb2JqKTsKKwkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrMF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZmZmZmZmZik7CiAJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCQkJYnJlYWs7CkBAIC03NjAsMTEgKzEzMDQsMjggQEAKIAlzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2s7CiAJaW50IHI7CiAKLQl0cmFjayA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFjayksIEdGUF9LRVJORUwpOwotCXAtPnRyYWNrID0gdHJhY2s7CisJaWYgKHAtPnRyYWNrID09IE5VTEwpIHsKKwkJLyogaW5pdGlhbGl6ZSB0cmFja2VyLCB3ZSBhcmUgaW4ga21zICovCisJCXRyYWNrID0ga3phbGxvYyhzaXplb2YoKnRyYWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0cmFjayA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXI2MDBfY3NfdHJhY2tfaW5pdCh0cmFjayk7CisJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKSB7CisJCQl0cmFjay0+bnBpcGVzID0gcC0+cmRldi0+Y29uZmlnLnI2MDAudGlsaW5nX25waXBlczsKKwkJCXRyYWNrLT5uYmFua3MgPSBwLT5yZGV2LT5jb25maWcucjYwMC50aWxpbmdfbmJhbmtzOworCQkJdHJhY2stPmdyb3VwX3NpemUgPSBwLT5yZGV2LT5jb25maWcucjYwMC50aWxpbmdfZ3JvdXBfc2l6ZTsKKwkJfSBlbHNlIGlmIChwLT5yZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjc0MCkgeworCQkJdHJhY2stPm5waXBlcyA9IHAtPnJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfbnBpcGVzOworCQkJdHJhY2stPm5iYW5rcyA9IHAtPnJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfbmJhbmtzOworCQkJdHJhY2stPmdyb3VwX3NpemUgPSBwLT5yZGV2LT5jb25maWcucnY3NzAudGlsaW5nX2dyb3VwX3NpemU7CisJCX0KKwkJcC0+dHJhY2sgPSB0cmFjazsKKwl9CiAJZG8gewogCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnBrdCwgcC0+aWR4KTsKIAkJaWYgKHIpIHsKKwkJCWtmcmVlKHAtPnRyYWNrKTsKKwkJCXAtPnRyYWNrID0gTlVMTDsKIAkJCXJldHVybiByOwogCQl9CiAJCXAtPmlkeCArPSBwa3QuY291bnQgKyAyOwpAQCAtNzc5LDkgKzEzNDAsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJVbmtub3duIHBhY2tldCB0eXBlICVkICFcbiIsIHBrdC50eXBlKTsKKwkJCWtmcmVlKHAtPnRyYWNrKTsKKwkJCXAtPnRyYWNrID0gTlVMTDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChyKSB7CisJCQlrZnJlZShwLT50cmFjayk7CisJCQlwLT50cmFjayA9IE5VTEw7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0gd2hpbGUgKHAtPmlkeCA8IHAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdLmxlbmd0aF9kdyk7CkBAIC03OTEsNiArMTM1Niw4IEBACiAJCW1kZWxheSgxKTsKIAl9CiAjZW5kaWYKKwlrZnJlZShwLT50cmFjayk7CisJcC0+dHJhY2sgPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC04MzMsOSArMTQwMCwxNiBAQAogewogCXN0cnVjdCByYWRlb25fY3NfcGFyc2VyIHBhcnNlcjsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKLQlzdHJ1Y3QgcmFkZW9uX2liCWZha2VfaWI7CisJc3RydWN0IHJhZGVvbl9pYiBmYWtlX2liOworCXN0cnVjdCByNjAwX2NzX3RyYWNrICp0cmFjazsKIAlpbnQgcjsKIAorCS8qIGluaXRpYWxpemUgdHJhY2tlciAqLworCXRyYWNrID0ga3phbGxvYyhzaXplb2YoKnRyYWNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRyYWNrID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXI2MDBfY3NfdHJhY2tfaW5pdCh0cmFjayk7CisJcjYwMF9jc19sZWdhY3lfZ2V0X3RpbGluZ19jb25mKGRldiwgJnRyYWNrLT5ucGlwZXMsICZ0cmFjay0+bmJhbmtzLCAmdHJhY2stPmdyb3VwX3NpemUpOwogCS8qIGluaXRpYWxpemUgcGFyc2VyICovCiAJbWVtc2V0KCZwYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlcikpOwogCXBhcnNlci5maWxwID0gZmlscDsKQEAgLTg0Myw2ICsxNDE3LDcgQEAKIAlwYXJzZXIucmRldiA9IE5VTEw7CiAJcGFyc2VyLmZhbWlseSA9IGZhbWlseTsKIAlwYXJzZXIuaWIgPSAmZmFrZV9pYjsKKwlwYXJzZXIudHJhY2sgPSB0cmFjazsKIAlmYWtlX2liLnB0ciA9IGliOwogCXIgPSByYWRlb25fY3NfcGFyc2VyX2luaXQoJnBhcnNlciwgZGF0YSk7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCAzMDQ4MDg4Li41YjJlNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC04ODMsNiArODgzLDE2IEBACiAKICNkZWZpbmUgUl8wMDU0ODBfSERQX01FTV9DT0hFUkVOQ1lfRkxVU0hfQ05UTAkJMHg1NDgwCiAKKyNkZWZpbmUgUl8wMjhDMDRfUEFfU0NfQUFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgMHgwMjhDMDQKKyNkZWZpbmUgICBTXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKKyNkZWZpbmUgICBDXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZDCisjZGVmaW5lICAgU18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDI4QzA0X01BWF9TQU1QTEVfRElTVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxMykKKyNkZWZpbmUgICBHXzAyOEMwNF9NQVhfU0FNUExFX0RJU1QoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweEYpCisjZGVmaW5lICAgQ18wMjhDMDRfTUFYX1NBTVBMRV9ESVNUICAgICAgICAgICAgICAgICAgICAgMHhGRkZFMUZGRgogI2RlZmluZSBSXzAyODBFMF9DQl9DT0xPUjBfRlJBRyAgICAgICAgICAgICAgICAgICAgICAweDAyODBFMAogI2RlZmluZSAgIFNfMDI4MEUwX0JBU0VfMjU2Qih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAyODBFMF9CQVNFXzI1NkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCkBAIC05MDUsNiArOTE1LDQ2MSBAQAogI2RlZmluZSBSXzAyODBENF9DQl9DT0xPUjVfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBENAogI2RlZmluZSBSXzAyODBEOF9DQl9DT0xPUjZfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBEOAogI2RlZmluZSBSXzAyODBEQ19DQl9DT0xPUjdfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBEQwotCisjZGVmaW5lIFJfMDI4MEEwX0NCX0NPTE9SMF9JTkZPICAgICAgICAgICAgICAgICAgICAgIDB4MDI4MEEwCisjZGVmaW5lICAgU18wMjgwQTBfRU5ESUFOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lICAgR18wMjgwQTBfRU5ESUFOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQworI2RlZmluZSAgIFNfMDI4MEEwX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRikgPDwgMikKKyNkZWZpbmUgICBHXzAyODBBMF9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4M0YpCisjZGVmaW5lICAgQ18wMjgwQTBfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwMworI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl80XzQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfM18zXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xNl9GTE9BVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfOF84ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzVfNl81ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl82XzVfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMV81XzVfNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl81XzVfNV8xICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xNl8xNiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTZfMTZfRkxPQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzhfMjQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl84XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMjRfOCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzI0XzhfRkxPQVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMF8xMV8xMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTBfMTFfMTFfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzExXzExXzEwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMV8xMV8xMF9GTE9BVCAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMl8xMF8xMF8xMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzhfOF84XzggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMF8xMF8xMF8yICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfWDI0XzhfMzJfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzMyXzMyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8zMl8zMl9GTE9BVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTZfMTZfMTZfMTYgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzE2XzE2XzE2XzE2X0ZMT0FUICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8zMl8zMl8zMl8zMiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMzJfMzJfMzJfMzJfRkxPQVQgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgICBTXzAyODBBMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAyODBBMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODBBMF9BUlJBWV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgICBWXzAyODBBMF9BUlJBWV9MSU5FQVJfR0VORVJBTCAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgICAgVl8wMjgwQTBfQVJSQVlfTElORUFSX0FMSUdORUQgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0FSUkFZXzFEX1RJTEVEX1RISU4xICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lICAgICBWXzAyODBBMF9BUlJBWV8yRF9USUxFRF9USElOMSAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSAgIFNfMDI4MEEwX05VTUJFUl9UWVBFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxMikKKyNkZWZpbmUgICBHXzAyODBBMF9OVU1CRVJfVFlQRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDcpCisjZGVmaW5lICAgQ18wMjgwQTBfTlVNQkVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGOEZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1JFQURfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAyODBBMF9SRUFEX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfUkVBRF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0NPTVBfU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAyODBBMF9DT01QX1NXQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfQ09NUF9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAyODBBMF9USUxFX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfVElMRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkYzRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0NMQU1QKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9DTEFNUCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0NMRUFSX0NPTE9SKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAyODBBMF9DTEVBUl9DT0xPUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQ0xFQVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0JZUEFTUyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9CWVBBU1MoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfQllQQVNTICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0ZMT0FUMzIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9GTE9BVDMyKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfRkxPQVQzMiAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1NJTVBMRV9GTE9BVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAyODBBMF9TSU1QTEVfRkxPQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfU0lNUExFX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1JPVU5EX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAyODBBMF9ST1VORF9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfUk9VTkRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1RJTEVfQ09NUEFDVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAyODBBMF9USUxFX0NPTVBBQ1QoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfVElMRV9DT01QQUNUICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1NPVVJDRV9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAyODBBMF9TT1VSQ0VfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfU09VUkNFX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSBSXzAyODBBNF9DQl9DT0xPUjFfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBNAorI2RlZmluZSBSXzAyODBBOF9DQl9DT0xPUjJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBOAorI2RlZmluZSBSXzAyODBBQ19DQl9DT0xPUjNfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBQworI2RlZmluZSBSXzAyODBCMF9DQl9DT0xPUjRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCMAorI2RlZmluZSBSXzAyODBCNF9DQl9DT0xPUjVfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCNAorI2RlZmluZSBSXzAyODBCOF9DQl9DT0xPUjZfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCOAorI2RlZmluZSBSXzAyODBCQ19DQl9DT0xPUjdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCQworI2RlZmluZSBSXzAyODA2MF9DQl9DT0xPUjBfU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAyODA2MAorI2RlZmluZSAgIFNfMDI4MDYwX1BJVENIX1RJTEVfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjgwNjBfUElUQ0hfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDNGRikKKyNkZWZpbmUgICBDXzAyODA2MF9QSVRDSF9USUxFX01BWCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQzAwCisjZGVmaW5lICAgU18wMjgwNjBfU0xJQ0VfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAyODA2MF9TTElDRV9USUxFX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweEZGRkZGKQorI2RlZmluZSAgIENfMDI4MDYwX1NMSUNFX1RJTEVfTUFYICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAzRkYKKyNkZWZpbmUgUl8wMjgwNjRfQ0JfQ09MT1IxX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNjQKKyNkZWZpbmUgUl8wMjgwNjhfQ0JfQ09MT1IyX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNjgKKyNkZWZpbmUgUl8wMjgwNkNfQ0JfQ09MT1IzX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNkMKKyNkZWZpbmUgUl8wMjgwNzBfQ0JfQ09MT1I0X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzAKKyNkZWZpbmUgUl8wMjgwNzRfQ0JfQ09MT1I1X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzQKKyNkZWZpbmUgUl8wMjgwNzhfQ0JfQ09MT1I2X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzgKKyNkZWZpbmUgUl8wMjgwN0NfQ0JfQ09MT1I3X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwN0MKKyNkZWZpbmUgUl8wMjgyMzhfQ0JfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjgyMzgKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODIzOF9UQVJHRVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODIzOF9UQVJHRVQwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMjgyMzhfVEFSR0VUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgyMzhfVEFSR0VUMV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDI4MjM4X1RBUkdFVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDI4MjM4X1RBUkdFVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQzX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUM19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ0X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNF9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ1X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ2X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ3X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUN19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgUl8wMjgyM0NfQ0JfU0hBREVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjgyM0MKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODIzQ19PVVRQVVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODIzQ19PVVRQVVQwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMjgyM0NfT1VUUFVUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgyM0NfT1VUUFVUMV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDI4MjNDX09VVFBVVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDI4MjNDX09VVFBVVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQzX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUM19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ0X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNF9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ1X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ2X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ3X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUN19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgUl8wMjhBQjBfVkdUX1NUUk1PVVRfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMjhBQjAKKyNkZWZpbmUgICBTXzAyOEFCMF9TVFJFQU1PVVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEFCMF9TVFJFQU1PVVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyOEFCMF9TVFJFQU1PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDI4QjIwX1ZHVF9TVFJNT1VUX0JVRkZFUl9FTiAgICAgICAgICAgICAgIDB4MDI4QjIwCisjZGVmaW5lICAgU18wMjhCMjBfQlVGRkVSXzBfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMjhCMjBfQlVGRkVSXzBfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjhCMjBfQlVGRkVSXzBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDI4QjIwX0JVRkZFUl8xX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDI4QjIwX0JVRkZFUl8xX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDI4QjIwX0JVRkZFUl8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAyOEIyMF9CVUZGRVJfMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAyOEIyMF9CVUZGRVJfMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyOEIyMF9CVUZGRVJfMl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMjhCMjBfQlVGRkVSXzNfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMjhCMjBfQlVGRkVSXzNfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjhCMjBfQlVGRkVSXzNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDI4QjIwX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEIyMF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMjhCMjBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAzODAwMF9TUV9URVhfUkVTT1VSQ0VfV09SRDBfMCAgICAgICAgICAgICAweDAzODAwMAorI2RlZmluZSAgIFNfMDM4MDAwX0RJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSAgIEdfMDM4MDAwX0RJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3KQorI2RlZmluZSAgIENfMDM4MDAwX0RJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjgKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fMUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzJEICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgICAgVl8wMzgwMDBfU1FfVEVYX0RJTV8zRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fQ1VCRU1BUCAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzFEX0FSUkFZICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSAgICAgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9BUlJBWSAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fMkRfTVNBQSAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzJEX0FSUkFZX01TQUEgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSAgIFNfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAzKQorI2RlZmluZSAgIEdfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHhGKQorI2RlZmluZSAgIENfMDM4MDAwX1RJTEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODcKKyNkZWZpbmUgICBTXzAzODAwMF9USUxFX1RZUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAzODAwMF9USUxFX1RZUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAzODAwMF9USUxFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMzgwMDBfUElUQ0goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRikgPDwgOCkKKyNkZWZpbmUgICBHXzAzODAwMF9QSVRDSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDM4MDAwX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGODAwRkYKKyNkZWZpbmUgICBTXzAzODAwMF9URVhfV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgMTkpCisjZGVmaW5lICAgR18wMzgwMDBfVEVYX1dJRFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxRkZGKQorI2RlZmluZSAgIENfMDM4MDAwX1RFWF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0ZGRkYKKyNkZWZpbmUgUl8wMzgwMDRfU1FfVEVYX1JFU09VUkNFX1dPUkQxXzAgICAgICAgICAgICAgMHgwMzgwMDQKKyNkZWZpbmUgICBTXzAzODAwNF9URVhfSEVJR0hUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAzODAwNF9URVhfSEVJR0hUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAwNF9URVhfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFMDAwCisjZGVmaW5lICAgU18wMzgwMDRfVEVYX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFGRkYpIDw8IDEzKQorI2RlZmluZSAgIEdfMDM4MDA0X1RFWF9ERVBUSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAwNF9URVhfREVQVEggICAgICAgICAgICAgICAgICAgICAgICAgICAweEZDMDAxRkZGCisjZGVmaW5lICAgU18wMzgwMDRfREFUQV9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNGKSA8PCAyNikKKyNkZWZpbmUgICBHXzAzODAwNF9EQVRBX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDNGKQorI2RlZmluZSAgIENfMDM4MDA0X0RBVEFfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNGRkZGRkYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNF80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzNfM18yICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTZfRkxPQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzhfOCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl81XzZfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNl81XzUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzFfNV81XzUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl80XzRfNF80ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8zMl9GTE9BVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzE2XzE2X0ZMT0FUICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84XzI0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfOF8yNF9GTE9BVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzI0XzggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8yNF84X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTBfMTFfMTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzEwXzExXzExX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xMV8xMV8xMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTFfMTFfMTBfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzJfMTBfMTBfMTAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84XzhfOF84ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTBfMTBfMTBfMiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SX1gyNF84XzMyX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMzJfMzJfRkxPQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzE2XzE2XzE2XzE2ICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xNl8xNl8xNl8xNl9GTE9BVCAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMzJfMzJfMzJfMzIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzMyXzMyXzMyXzMyX0ZMT0FUICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0dCX0dSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CR19SRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMzJfQVNfOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyX0FTXzhfOCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF81XzlfOV85X1NIQVJFREVYUCAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfOF84XzggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzE2XzE2XzE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF8xNl8xNl8xNl9GTE9BVCAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMzJfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyXzMyXzMyX0ZMT0FUICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgUl8wMzgwMTBfU1FfVEVYX1JFU09VUkNFX1dPUkQ0XzAgICAgICAgICAgICAgMHgwMzgwMTAKKyNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKKyNkZWZpbmUgICBDXzAzODAxMF9GT1JNQVRfQ09NUF9YICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZDCisjZGVmaW5lICAgU18wMzgwMTBfRk9STUFUX0NPTVBfWSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgR18wMzgwMTBfRk9STUFUX0NPTVBfWSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfRk9STUFUX0NPTVBfWSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMworI2RlZmluZSAgIFNfMDM4MDEwX0ZPUk1BVF9DT01QX1ooeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA0KQorI2RlZmluZSAgIEdfMDM4MDEwX0ZPUk1BVF9DT01QX1ooeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgzKQorI2RlZmluZSAgIENfMDM4MDEwX0ZPUk1BVF9DT01QX1ogICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQ0YKKyNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9XKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9XKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgICBDXzAzODAxMF9GT1JNQVRfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjNGCisjZGVmaW5lICAgU18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDM4MDEwX1NSRl9NT0RFX0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAzODAxMF9TUkZfTU9ERV9BTEwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMzgwMTBfU1JGX01PREVfQUxMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDM4MDEwX0ZPUkNFX0RFR0FNTUEoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JDRV9ERUdBTU1BKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMzgwMTBfRk9SQ0VfREVHQU1NQSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDM4MDEwX0VORElBTl9TV0FQKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxMikKKyNkZWZpbmUgICBHXzAzODAxMF9FTkRJQU5fU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfRU5ESUFOX1NXQVAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQ0ZGRgorI2RlZmluZSAgIFNfMDM4MDEwX1JFUVVFU1RfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAzODAxMF9SRVFVRVNUX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfUkVRVUVTVF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGM0ZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxNikKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9YICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY4RkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxOSkKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkM3RkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyMikKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRTNGRkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfVyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyNSkKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1coeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMUZGRkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0JBU0VfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAzODAxMF9CQVNFX0xFVkVMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMzgwMTBfQkFTRV9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorI2RlZmluZSBSXzAzODAxNF9TUV9URVhfUkVTT1VSQ0VfV09SRDVfMCAgICAgICAgICAgICAweDAzODAxNAorI2RlZmluZSAgIFNfMDM4MDE0X0xBU1RfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDM4MDE0X0xBU1RfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDM4MDE0X0xBU1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAzODAxNF9CQVNFX0FSUkFZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAzODAxNF9CQVNFX0FSUkFZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAxNF9CQVNFX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkUwMDBGCisjZGVmaW5lICAgU18wMzgwMTRfTEFTVF9BUlJBWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFGRkYpIDw8IDE3KQorI2RlZmluZSAgIEdfMDM4MDE0X0xBU1RfQVJSQVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAxNF9MQVNUX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDFGRkZGCisjZGVmaW5lIFJfMDI4OEE4X1NRX0VTR1NfUklOR19JVEVNU0laRSAgICAgICAgICAgICAgIDB4MDI4OEE4CisjZGVmaW5lICAgU18wMjg4QThfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QThfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QThfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM0NF9TUV9FU0dTX1JJTkdfU0laRSAgICAgICAgICAgICAgICAgICAweDAwOEM0NAorI2RlZmluZSAgIFNfMDA4QzQ0X01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM0NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDNDRfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhCMF9TUV9FU1RNUF9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAweDAyODhCMAorI2RlZmluZSAgIFNfMDI4OEIwX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEIwX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEIwX0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNTRfU1FfRVNUTVBfUklOR19TSVpFICAgICAgICAgICAgICAgICAgMHgwMDhDNTQKKyNkZWZpbmUgICBTXzAwOEM1NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNTRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzU0X01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QzBfU1FfRkJVRl9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAgMHgwMjg4QzAKKyNkZWZpbmUgICBTXzAyODhDMF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhDMF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhDMF9JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDA4Qzc0X1NRX0ZCVUZfUklOR19TSVpFICAgICAgICAgICAgICAgICAgIDB4MDA4Qzc0CisjZGVmaW5lICAgU18wMDhDNzRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA4Qzc0X01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwOEM3NF9NRU1fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDI4OEI0X1NRX0dTVE1QX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgIDB4MDI4OEI0CisjZGVmaW5lICAgU18wMjg4QjRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QjRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QjRfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM1Q19TUV9HU1RNUF9SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAweDAwOEM1QworI2RlZmluZSAgIFNfMDA4QzVDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM1Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDNUNfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhBQ19TUV9HU1ZTX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgICAweDAyODhBQworI2RlZmluZSAgIFNfMDI4OEFDX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEFDX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEFDX0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNENfU1FfR1NWU19SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAgMHgwMDhDNEMKKyNkZWZpbmUgICBTXzAwOEM0Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNENfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzRDX01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QkNfU1FfUFNUTVBfUklOR19JVEVNU0laRSAgICAgICAgICAgICAgMHgwMjg4QkMKKyNkZWZpbmUgICBTXzAyODhCQ19JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhCQ19JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhCQ19JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDA4QzZDX1NRX1BTVE1QX1JJTkdfU0laRSAgICAgICAgICAgICAgICAgIDB4MDA4QzZDCisjZGVmaW5lICAgU18wMDhDNkNfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA4QzZDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwOEM2Q19NRU1fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDI4OEM0X1NRX1JFRFVDX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgIDB4MDI4OEM0CisjZGVmaW5lICAgU18wMjg4QzRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QzRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QzRfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM3Q19TUV9SRURVQ19SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAweDAwOEM3QworI2RlZmluZSAgIFNfMDA4QzdDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM3Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDN0NfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhCOF9TUV9WU1RNUF9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAweDAyODhCOAorI2RlZmluZSAgIFNfMDI4OEI4X0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEI4X0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEI4X0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNjRfU1FfVlNUTVBfUklOR19TSVpFICAgICAgICAgICAgICAgICAgMHgwMDhDNjQKKyNkZWZpbmUgICBTXzAwOEM2NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNjRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzY0X01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QzhfU1FfR1NfVkVSVF9JVEVNU0laRSAgICAgICAgICAgICAgICAgMHgwMjg4QzgKKyNkZWZpbmUgICBTXzAyODhDOF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhDOF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhDOF9JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDI4MDEwX0RCX0RFUFRIX0lORk8gICAgICAgICAgICAgICAgICAgICAgIDB4MDI4MDEwCisjZGVmaW5lICAgU18wMjgwMTBfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMjgwMTBfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMjgwMTBfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICBWXzAyODAxMF9ERVBUSF9YOF8yNCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfOF8yNCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIX1g4XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lICAgICBWXzAyODAxMF9ERVBUSF84XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfMzJfRkxPQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIX1gyNF84XzMyX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICAgU18wMjgwMTBfUkVBRF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMjgwMTBfUkVBRF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfUkVBRF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDI4MDEwX0FSUkFZX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAyODAxMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgwMTBfQVJSQVlfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY4N0ZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1RJTEVfU1VSRkFDRV9FTkFCTEUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAyODAxMF9USUxFX1NVUkZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfVElMRV9TVVJGQUNFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1RJTEVfQ09NUEFDVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAyODAxMF9USUxFX0NPTVBBQ1QoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfVElMRV9DT01QQUNUICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1pSQU5HRV9QUkVDSVNJT04oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAyODAxMF9aUkFOR0VfUFJFQ0lTSU9OKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfWlJBTkdFX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAyODAwMF9EQl9ERVBUSF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAweDAyODAwMAorI2RlZmluZSAgIFNfMDI4MDAwX1BJVENIX1RJTEVfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjgwMDBfUElUQ0hfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDNGRikKKyNkZWZpbmUgICBDXzAyODAwMF9QSVRDSF9USUxFX01BWCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQzAwCisjZGVmaW5lICAgU18wMjgwMDBfU0xJQ0VfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAyODAwMF9TTElDRV9USUxFX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweEZGRkZGKQorI2RlZmluZSAgIENfMDI4MDAwX1NMSUNFX1RJTEVfTUFYICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAzRkYKKyNkZWZpbmUgUl8wMjgwMDRfREJfREVQVEhfVklFVyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwMDQKKyNkZWZpbmUgICBTXzAyODAwNF9TTElDRV9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4MDA0X1NMSUNFX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkYpCisjZGVmaW5lICAgQ18wMjgwMDRfU0xJQ0VfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjgwMAorI2RlZmluZSAgIFNfMDI4MDA0X1NMSUNFX01BWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkYpIDw8IDEzKQorI2RlZmluZSAgIEdfMDI4MDA0X1NMSUNFX01BWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDI4MDA0X1NMSUNFX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDFGRkYKKyNkZWZpbmUgUl8wMjg4MDBfREJfREVQVEhfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHgwMjg4MDAKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMjg4MDBfWl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMjg4MDBfWl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjg4MDBfWl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDI4ODAwX1pfV1JJVEVfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDI4ODAwX1pfV1JJVEVfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDI4ODAwX1pfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAyODgwMF9aRlVOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgNCkKKyNkZWZpbmUgICBHXzAyODgwMF9aRlVOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4NykKKyNkZWZpbmUgICBDXzAyODgwMF9aRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjhGCisjZGVmaW5lICAgU18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDI4ODAwX1NURU5DSUxGVU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA4KQorI2RlZmluZSAgIEdfMDI4ODAwX1NURU5DSUxGVU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGVU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY4RkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRkFJTCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTEpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZBSUwoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGQUlMICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkM3RkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWlBBU1MoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTQpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpQQVNTKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaUEFTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRTNGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWkZBSUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTcpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpGQUlMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaRkFJTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMUZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRlVOQ19CRih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjApCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZVTkNfQkYoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGVU5DX0JGICAgICAgICAgICAgICAgICAgICAgIDB4RkY4RkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRkFJTF9CRih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjMpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZBSUxfQkYoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGQUlMX0JGICAgICAgICAgICAgICAgICAgICAgIDB4RkM3RkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWlBBU1NfQkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjYpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpQQVNTX0JGKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaUEFTU19CRiAgICAgICAgICAgICAgICAgICAgIDB4RTNGRkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWkZBSUxfQkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjkpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpGQUlMX0JGKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaRkFJTF9CRiAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCBjMDM1NmJiLi44MjllMjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTg5LDYgKzg5LDcgQEAKIGV4dGVybiBpbnQgcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZTsKIGV4dGVybiBpbnQgcmFkZW9uX3R2OwogZXh0ZXJuIGludCByYWRlb25fbmV3X3BsbDsKK2V4dGVybiBpbnQgcmFkZW9uX2R5bnBtOwogZXh0ZXJuIGludCByYWRlb25fYXVkaW87CiAKIC8qCkBAIC0xMTgsNiArMTE5LDIxIEBACiAvKgogICogQklPUy4KICAqLworI2RlZmluZSBBVFJNX0JJT1NfUEFHRSA0MDk2CisKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfU1dJVENIRVJPTykKK2Jvb2wgcmFkZW9uX2F0cm1fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCByYWRlb25fYXRybV9nZXRfYmlvc19jaHVuayh1aW50OF90ICpiaW9zLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGJvb2wgcmFkZW9uX2F0cm1fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmFkZW9uX2F0cm1fZ2V0X2Jpb3NfY2h1bmsodWludDhfdCAqYmlvcywgaW50IG9mZnNldCwgaW50IGxlbil7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKIGJvb2wgcmFkZW9uX2dldF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogCkBAIC0xMzgsMTcgKzE1NCwyMyBAQAogc3RydWN0IHJhZGVvbl9jbG9jayB7CiAJc3RydWN0IHJhZGVvbl9wbGwgcDFwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgcDJwbGw7CisJc3RydWN0IHJhZGVvbl9wbGwgZGNwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgc3BsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCBtcGxsOwogCS8qIDEwIEtoeiB1bml0cyAqLwogCXVpbnQzMl90IGRlZmF1bHRfbWNsazsKIAl1aW50MzJfdCBkZWZhdWx0X3NjbGs7CisJdWludDMyX3QgZGVmYXVsdF9kaXNwY2xrOworCXVpbnQzMl90IGRwX2V4dGNsazsKIH07CiAKIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KIGludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJhZGVvbl9wbV9jb21wdXRlX2Nsb2NrcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJhZGVvbl9jb21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJhZGVvbl9hdG9tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtMjc1LDYgKzI5Nyw3IEBACiB9OwogCiAjZGVmaW5lIFJBREVPTl9HUFVfUEFHRV9TSVpFIDQwOTYKKyNkZWZpbmUgUkFERU9OX0dQVV9QQUdFX01BU0sgKFJBREVPTl9HUFVfUEFHRV9TSVpFIC0gMSkKIAogc3RydWN0IHJhZGVvbl9nYXJ0IHsKIAlkbWFfYWRkcl90CQkJdGFibGVfYWRkcjsKQEAgLTMwOSwyMSArMzMyLDE5IEBACiAJLyogZm9yIHNvbWUgY2hpcHMgd2l0aCA8PSAzMk1CIHdlIG5lZWQgdG8gbGllCiAJICogYWJvdXQgdnJhbSBzaXplIG5lYXIgbWMgZmIgbG9jYXRpb24gKi8KIAl1NjQJCQltY192cmFtX3NpemU7Ci0JdTY0CQkJZ3R0X2xvY2F0aW9uOworCXU2NAkJCXZpc2libGVfdnJhbV9zaXplOwogCXU2NAkJCWd0dF9zaXplOwogCXU2NAkJCWd0dF9zdGFydDsKIAl1NjQJCQlndHRfZW5kOwotCXU2NAkJCXZyYW1fbG9jYXRpb247CiAJdTY0CQkJdnJhbV9zdGFydDsKIAl1NjQJCQl2cmFtX2VuZDsKIAl1bnNpZ25lZAkJdnJhbV93aWR0aDsKIAl1NjQJCQlyZWFsX3ZyYW1fc2l6ZTsKIAlpbnQJCQl2cmFtX210cnI7CiAJYm9vbAkJCXZyYW1faXNfZGRyOwotCWJvb2wgICAgICAgICAgICAgICAgICAgIGlncF9zaWRlcG9ydF9lbmFibGVkOworCWJvb2wJCQlpZ3Bfc2lkZXBvcnRfZW5hYmxlZDsKIH07CiAKLWludCByYWRlb25fbWNfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogYm9vbCByYWRlb25fY29tYmlvc19zaWRlcG9ydF9wcmVzZW50KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGJvb2wgcmFkZW9uX2F0b21iaW9zX3NpZGVwb3J0X3ByZXNlbnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCkBAIC0zNDgsNiArMzY5LDcgQEAKIAlib29sCQlzd19pbnQ7CiAJLyogRklYTUU6IHVzZSBhIGRlZmluZSBtYXggY3J0YyByYXRoZXIgdGhhbiBoYXJkY29kZSBpdCAqLwogCWJvb2wJCWNydGNfdmJsYW5rX2ludFsyXTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl2YmxhbmtfcXVldWU7CiAJLyogRklYTUU6IHVzZSBkZWZpbmVzIGZvciBtYXggaHBkL2RhY3MgKi8KIAlib29sICAgICAgICAgICAgaHBkWzZdOwogCXNwaW5sb2NrX3Qgc3dfbG9jazsKQEAgLTM3OSw2ICs0MDEsNyBAQAogc3RydWN0IHJhZGVvbl9pYl9wb29sIHsKIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwogCXN0cnVjdCByYWRlb25fYm8JKnJvYmo7CisJc3RydWN0IGxpc3RfaGVhZAlib2d1c19pYjsKIAlzdHJ1Y3QgcmFkZW9uX2liCWlic1tSQURFT05fSUJfUE9PTF9TSVpFXTsKIAlib29sCQkJcmVhZHk7CiAJdW5zaWduZWQJCWhlYWRfaWQ7CkBAIC00MzMsNiArNDU2LDcgQEAKIGludCByYWRlb25faWJfcG9vbF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2liX3Bvb2xfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcmFkZW9uX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2liX2JvZ3VzX2FkZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwogLyogUmluZyBhY2Nlc3MgYmV0d2VlbiBiZWdpbiAmIGVuZCBjYW5ub3Qgc2xlZXAgKi8KIHZvaWQgcmFkZW9uX3JpbmdfZnJlZV9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByYWRlb25fcmluZ19sb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBuZHcpOwpAQCAtNTcwLDcgKzU5NCw5OSBAQAogICogRXF1YXRpb24gYmV0d2VlbiBncHUvbWVtb3J5IGNsb2NrIGFuZCBhdmFpbGFibGUgYmFuZHdpZHRoIGlzIGh3IGRlcGVuZGVudAogICogKHR5cGUgb2YgbWVtb3J5LCBidXMgc2l6ZSwgZWZmaWNpZW5jeSwgLi4uKQogICovCitlbnVtIHJhZGVvbl9wbV9zdGF0ZSB7CisJUE1fU1RBVEVfRElTQUJMRUQsCisJUE1fU1RBVEVfTUlOSU1VTSwKKwlQTV9TVEFURV9QQVVTRUQsCisJUE1fU1RBVEVfQUNUSVZFCit9OworZW51bSByYWRlb25fcG1fYWN0aW9uIHsKKwlQTV9BQ1RJT05fTk9ORSwKKwlQTV9BQ1RJT05fTUlOSU1VTSwKKwlQTV9BQ1RJT05fRE9XTkNMT0NLLAorCVBNX0FDVElPTl9VUENMT0NLCit9OworCitlbnVtIHJhZGVvbl92b2x0YWdlX3R5cGUgeworCVZPTFRBR0VfTk9ORSA9IDAsCisJVk9MVEFHRV9HUElPLAorCVZPTFRBR0VfVkREQywKKwlWT0xUQUdFX1NXCit9OworCitlbnVtIHJhZGVvbl9wbV9zdGF0ZV90eXBlIHsKKwlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQsCisJUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkUsCisJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZLAorCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQsCisJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRSwKK307CisKK2VudW0gcmFkZW9uX3BtX2Nsb2NrX21vZGVfdHlwZSB7CisJUE9XRVJfTU9ERV9UWVBFX0RFRkFVTFQsCisJUE9XRVJfTU9ERV9UWVBFX0xPVywKKwlQT1dFUl9NT0RFX1RZUEVfTUlELAorCVBPV0VSX01PREVfVFlQRV9ISUdILAorfTsKKworc3RydWN0IHJhZGVvbl92b2x0YWdlIHsKKwllbnVtIHJhZGVvbl92b2x0YWdlX3R5cGUgdHlwZTsKKwkvKiBncGlvIHZvbHRhZ2UgKi8KKwlzdHJ1Y3QgcmFkZW9uX2dwaW9fcmVjIGdwaW87CisJdTMyIGRlbGF5OyAvKiBkZWxheSBpbiB1c2VjIGZyb20gdm9sdGFnZSBkcm9wIHRvIHNjbGsgY2hhbmdlICovCisJYm9vbCBhY3RpdmVfaGlnaDsgLyogdm9sdGFnZSBkcm9wIGlzIGFjdGl2ZSB3aGVuIGJpdCBpcyBoaWdoICovCisJLyogVkREQyB2b2x0YWdlICovCisJdTggdmRkY19pZDsgLyogaW5kZXggaW50byB2ZGRjIHZvbHRhZ2UgdGFibGUgKi8KKwl1OCB2ZGRjaV9pZDsgLyogaW5kZXggaW50byB2ZGRjaSB2b2x0YWdlIHRhYmxlICovCisJYm9vbCB2ZGRjaV9lbmFibGVkOworCS8qIHI2eHgrIHN3ICovCisJdTMyIHZvbHRhZ2U7Cit9OworCitzdHJ1Y3QgcmFkZW9uX3BtX25vbl9jbG9ja19pbmZvIHsKKwkvKiBwY2llIGxhbmVzICovCisJaW50IHBjaWVfbGFuZXM7CisJLyogc3RhbmRhcmRpemVkIG5vbi1jbG9jayBmbGFncyAqLworCXUzMiBmbGFnczsKK307CisKK3N0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyB7CisJLyogbWVtb3J5IGNsb2NrICovCisJdTMyIG1jbGs7CisJLyogZW5naW5lIGNsb2NrICovCisJdTMyIHNjbGs7CisJLyogdm9sdGFnZSBpbmZvICovCisJc3RydWN0IHJhZGVvbl92b2x0YWdlIHZvbHRhZ2U7CisJLyogc3RhbmRhcmRpemVkIGNsb2NrIGZsYWdzIC0gbm90IHN1cmUgd2UnbGwgbmVlZCB0aGVzZSAqLworCXUzMiBmbGFnczsKK307CisKK3N0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgeworCWVudW0gcmFkZW9uX3BtX3N0YXRlX3R5cGUgdHlwZTsKKwkvKiBYWFg6IHVzZSBhIGRlZmluZSBmb3IgbnVtIGNsb2NrIG1vZGVzICovCisJc3RydWN0IHJhZGVvbl9wbV9jbG9ja19pbmZvIGNsb2NrX2luZm9bOF07CisJLyogbnVtYmVyIG9mIHZhbGlkIGNsb2NrIG1vZGVzIGluIHRoaXMgcG93ZXIgc3RhdGUgKi8KKwlpbnQgbnVtX2Nsb2NrX21vZGVzOworCXN0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyAqZGVmYXVsdF9jbG9ja19tb2RlOworCS8qIG5vbiBjbG9jayBpbmZvIGFib3V0IHRoaXMgc3RhdGUgKi8KKwlzdHJ1Y3QgcmFkZW9uX3BtX25vbl9jbG9ja19pbmZvIG5vbl9jbG9ja19pbmZvOworCWJvb2wgdm9sdGFnZV9kcm9wX2FjdGl2ZTsKK307CisKKy8qCisgKiBTb21lIG1vZGVzIGFyZSBvdmVyY2xvY2tlZCBieSB2ZXJ5IGxvdyB2YWx1ZSwgYWNjZXB0IHRoZW0KKyAqLworI2RlZmluZSBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOIDUwMCAvKiA1IE1IeiAqLworCiBzdHJ1Y3QgcmFkZW9uX3BtIHsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCXN0cnVjdCBkZWxheWVkX3dvcmsJaWRsZV93b3JrOworCWVudW0gcmFkZW9uX3BtX3N0YXRlCXN0YXRlOworCWVudW0gcmFkZW9uX3BtX2FjdGlvbglwbGFubmVkX2FjdGlvbjsKKwl1bnNpZ25lZCBsb25nCQlhY3Rpb25fdGltZW91dDsKKwlib29sIAkJCWRvd25jbG9ja2VkOworCWludAkJCWFjdGl2ZV9jcnRjczsKKwlpbnQJCQlyZXFfdmJsYW5rOwogCWZpeGVkMjBfMTIJCW1heF9iYW5kd2lkdGg7CiAJZml4ZWQyMF8xMgkJaWdwX3NpZGVwb3J0X21jbGs7CiAJZml4ZWQyMF8xMgkJaWdwX3N5c3RlbV9tY2xrOwpAQCAtNTgyLDYgKzY5OCwxNSBAQAogCWZpeGVkMjBfMTIJCWNvcmVfYmFuZHdpZHRoOwogCWZpeGVkMjBfMTIJCXNjbGs7CiAJZml4ZWQyMF8xMgkJbmVlZGVkX2JhbmR3aWR0aDsKKwkvKiBYWFg6IHVzZSBhIGRlZmluZSBmb3IgbnVtIHBvd2VyIG1vZGVzICovCisJc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSBwb3dlcl9zdGF0ZVs4XTsKKwkvKiBudW1iZXIgb2YgdmFsaWQgcG93ZXIgc3RhdGVzICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX3Bvd2VyX3N0YXRlczsKKwlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpjdXJyZW50X3Bvd2VyX3N0YXRlOworCXN0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyAqY3VycmVudF9jbG9ja19tb2RlOworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnJlcXVlc3RlZF9wb3dlcl9zdGF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX3BtX2Nsb2NrX2luZm8gKnJlcXVlc3RlZF9jbG9ja19tb2RlOworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKmRlZmF1bHRfcG93ZXJfc3RhdGU7CiB9OwogCiAKQEAgLTY1MSw2ICs3NzYsNyBAQAogCXZvaWQgKCpzZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKIAl1aW50MzJfdCAoKmdldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CisJaW50ICgqZ2V0X3BjaWVfbGFuZXMpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X3BjaWVfbGFuZXMpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOwogCXZvaWQgKCpzZXRfY2xvY2tfZ2F0aW5nKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAJaW50ICgqc2V0X3N1cmZhY2VfcmVnKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZywKQEAgLTcwMSw2ICs4MjcsOSBAQAogCXVuc2lnbmVkIHN4X21heF9leHBvcnRfcG9zX3NpemU7CiAJdW5zaWduZWQgc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZTsKIAl1bnNpZ25lZCBzcV9udW1fY2ZfaW5zdHM7CisJdW5zaWduZWQgdGlsaW5nX25iYW5rczsKKwl1bnNpZ25lZCB0aWxpbmdfbnBpcGVzOworCXVuc2lnbmVkIHRpbGluZ19ncm91cF9zaXplOwogfTsKIAogc3RydWN0IHJ2NzcwX2FzaWMgewpAQCAtNzIxLDYgKzg1MCw5IEBACiAJdW5zaWduZWQgc2NfcHJpbV9maWZvX3NpemU7CiAJdW5zaWduZWQgc2NfaGl6X3RpbGVfZmlmb19zaXplOwogCXVuc2lnbmVkIHNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZTsKKwl1bnNpZ25lZCB0aWxpbmdfbmJhbmtzOworCXVuc2lnbmVkIHRpbGluZ19ucGlwZXM7CisJdW5zaWduZWQgdGlsaW5nX2dyb3VwX3NpemU7CiB9OwogCiB1bmlvbiByYWRlb25fYXNpY19jb25maWcgewpAQCAtODMwLDYgKzk2Miw4IEBACiAJc3RydWN0IHI2MDBfaWggaWg7IC8qIHI2LzcwMCBpbnRlcnJ1cHQgcmluZyAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaG90cGx1Z193b3JrOworCWludCBudW1fY3J0YzsgLyogbnVtYmVyIG9mIGNydGNzICovCisJc3RydWN0IG11dGV4IGRjX2h3X2kyY19tdXRleDsgLyogZGlzcGxheSBjb250cm9sbGVyIGh3IGkyYyBtdXRleCAqLwogCiAJLyogYXVkaW8gc3R1ZmYgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAlhdWRpb190aW1lcjsKQEAgLTgzOCw2ICs5NzIsOCBAQAogCWludAkJCWF1ZGlvX2JpdHNfcGVyX3NhbXBsZTsKIAl1aW50OF90CQkJYXVkaW9fc3RhdHVzX2JpdHM7CiAJdWludDhfdAkJCWF1ZGlvX2NhdGVnb3J5X2NvZGU7CisKKwlib29sIHBvd2VyZWRfZG93bjsKIH07CiAKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC04OTUsNiArMTAzMSw4IEBACiAjZGVmaW5lIFdSRUczMl9NQyhyZWcsIHYpIHJkZXYtPm1jX3dyZWcocmRldiwgKHJlZyksICh2KSkKICNkZWZpbmUgUlJFRzMyX1BDSUUocmVnKSBydjM3MF9wY2llX3JyZWcocmRldiwgKHJlZykpCiAjZGVmaW5lIFdSRUczMl9QQ0lFKHJlZywgdikgcnYzNzBfcGNpZV93cmVnKHJkZXYsIChyZWcpLCAodikpCisjZGVmaW5lIFJSRUczMl9QQ0lFX1AocmVnKSByZGV2LT5wY2llcF9ycmVnKHJkZXYsIChyZWcpKQorI2RlZmluZSBXUkVHMzJfUENJRV9QKHJlZywgdikgcmRldi0+cGNpZXBfd3JlZyhyZGV2LCAocmVnKSwgKHYpKQogI2RlZmluZSBXUkVHMzJfUChyZWcsIHZhbCwgbWFzaykJCQkJXAogCWRvIHsJCQkJCQkJXAogCQl1aW50MzJfdCB0bXBfID0gUlJFRzMyKHJlZyk7CQkJXApAQCAtOTU2LDcgKzEwOTQsNyBAQAogI2RlZmluZSBBU0lDX0lTX0FWSVZPKHJkZXYpICgocmRldi0+ZmFtaWx5ID49IENISVBfUlM2MDApKQogI2RlZmluZSBBU0lDX0lTX0RDRTMocmRldikgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjYyMCkpCiAjZGVmaW5lIEFTSUNfSVNfRENFMzIocmRldikgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjczMCkpCi0KKyNkZWZpbmUgQVNJQ19JU19EQ0U0KHJkZXYpICgocmRldi0+ZmFtaWx5ID49IENISVBfQ0VEQVIpKQogCiAvKgogICogQklPUyBoZWxwZXJzLgpAQCAtMTAxNSw2ICsxMTUzLDcgQEAKICNkZWZpbmUgcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfZW5naW5lX2Nsb2NrKChyZGV2KSwgKGUpKQogI2RlZmluZSByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9tZW1vcnlfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X21lbW9yeV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9tZW1vcnlfY2xvY2soKHJkZXYpLCAoZSkpCisjZGVmaW5lIHJhZGVvbl9nZXRfcGNpZV9sYW5lcyhyZGV2KSAocmRldiktPmFzaWMtPmdldF9wY2llX2xhbmVzKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9wY2llX2xhbmVzKHJkZXYsIGwpIChyZGV2KS0+YXNpYy0+c2V0X3BjaWVfbGFuZXMoKHJkZXYpLCAobCkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2Nsb2NrX2dhdGluZygocmRldiksIChlKSkKICNkZWZpbmUgcmFkZW9uX3NldF9zdXJmYWNlX3JlZyhyZGV2LCByLCBmLCBwLCBvLCBzKSAoKHJkZXYpLT5hc2ljLT5zZXRfc3VyZmFjZV9yZWcoKHJkZXYpLCAociksIChmKSwgKHApLCAobyksIChzKSkpCkBAIC0xMDI5LDYgKzExNjgsNyBAQAogLyogQUdQICovCiBleHRlcm4gdm9pZCByYWRlb25fYWdwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByYWRlb25fZ2FydF9yZXN0b3JlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX21vZGVzZXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByYWRlb25fbW9kZXNldF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBib29sIHJhZGVvbl9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMDQyLDYgKzExODIsMTAgQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oc3RydWN0IHJhZGVvbl9ibyAqcmJvLCB1MzIgZG9tYWluKTsKIGV4dGVybiBib29sIHJhZGVvbl90dG1fYm9faXNfcmFkZW9uX2JvKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIHZvaWQgcmFkZW9uX3ZyYW1fbG9jYXRpb24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fbWMgKm1jLCB1NjQgYmFzZSk7CitleHRlcm4gdm9pZCByYWRlb25fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYyk7CitleHRlcm4gaW50IHJhZGVvbl9yZXN1bWVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCByYWRlb25fc3VzcGVuZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAogLyogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwICovCiBzdHJ1Y3QgcjEwMF9tY19zYXZlIHsKQEAgLTEwOTYsNyArMTI0MCw3IEBACiAvKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAgKi8KIGV4dGVybiB2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTEwNSw3ICsxMjQ5LDYgQEAKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjQyMCxyNDIzLHJ2NDEwICovCi1leHRlcm4gaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7CiBleHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKIGV4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMTQ3LDEzICsxMjkwLDEzIEBACiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7CiAKIC8qIHI2MDAsIHJ2NjEwLCBydjYzMCwgcnY2MjAsIHJ2NjM1LCBydjY3MCwgcnM3ODAsIHJzODgwICovCitleHRlcm4gdm9pZCByNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYyk7CiBleHRlcm4gYm9vbCByNjAwX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfY3Bfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3JpbmdfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKIGV4dGVybiBpbnQgcjYwMF9jcF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9jcF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjYwMF9jb3VudF9waXBlX2JpdHModWludDMyX3QgdmFsKTsKLWV4dGVybiBpbnQgcjYwMF9nYXJ0X2NsZWFyX3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpKTsKIGV4dGVybiBpbnQgcjYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjYwMF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTE4OSw2ICsxMzMyLDE0IEBACiAJCQkJCSAgICB1aW50OF90IHN0YXR1c19iaXRzLAogCQkJCQkgICAgdWludDhfdCBjYXRlZ29yeV9jb2RlKTsKIAorLyogZXZlcmdyZWVuICovCitzdHJ1Y3QgZXZlcmdyZWVuX21jX3NhdmUgeworCXUzMiB2Z2FfY29udHJvbFs2XTsKKwl1MzIgdmdhX3JlbmRlcl9jb250cm9sOworCXUzMiB2Z2FfaGRwX2NvbnRyb2w7CisJdTMyIGNydGNfY29udHJvbFs2XTsKK307CisKICNpbmNsdWRlICJyYWRlb25fb2JqZWN0LmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYwppbmRleCBjMDY4MWE1NS4uYzQ0NTc3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKQEAgLTIzNyw2ICsyMzcsMTAgQEAKIAogCXJkZXYtPm1jLmFncF9iYXNlID0gcmRldi0+ZGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX2Jhc2U7CiAJcmRldi0+bWMuZ3R0X3NpemUgPSByZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSA8PCAyMDsKKwlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5hZ3BfYmFzZTsKKwlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X3N0YXJ0ICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOworCWRldl9pbmZvKHJkZXYtPmRldiwgIkdUVDogJWxsdU0gMHglMDhsbFggLSAweCUwOGxsWFxuIiwKKwkJcmRldi0+bWMuZ3R0X3NpemUgPj4gMjAsIHJkZXYtPm1jLmd0dF9zdGFydCwgcmRldi0+bWMuZ3R0X2VuZCk7CiAKIAkvKiB3b3JrYXJvdW5kIHNvbWUgaHcgaXNzdWVzICovCiAJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjIwMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDA1ZWUxYWUuLmQzYTE1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTQzLDcgKzQzLDcgQEAKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qCi0gKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKKyAqIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAKICAqLwogZXh0ZXJuIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjEwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTEwOCw2ICsxMDgsNTIgQEAKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X3BjaWVfbGFuZXMgPSBOVUxMLAorCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCisJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLAorCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKKwkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnIxMDBfYmFuZHdpZHRoX3VwZGF0ZSwKKwkuaHBkX2luaXQgPSAmcjEwMF9ocGRfaW5pdCwKKwkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKKwkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAorCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKK307CisKKy8qCisgKiByMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCisgKi8KK2V4dGVybiBpbnQgcjIwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCXVpbnQ2NF90IHNyY19vZmZzZXQsCisJCQl1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkJdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMjAwX2FzaWMgPSB7CisJLmluaXQgPSAmcjEwMF9pbml0LAorCS5maW5pID0gJnIxMDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyMTAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyMTAwX3Jlc3VtZSwKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCisJLmdwdV9yZXNldCA9ICZyMTAwX2dwdV9yZXNldCwKKwkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCisJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAorCS5yaW5nX3N0YXJ0ID0gJnIxMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAorCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMTAwX2ZlbmNlX3JpbmdfZW1pdCwKKwkuY3NfcGFyc2UgPSAmcjEwMF9jc19wYXJzZSwKKwkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAorCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKKwkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAorCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCkBAIC0xMzgsMTEgKzE4NCw4IEBACiBleHRlcm4gdWludDMyX3QgcnYzNzBfcGNpZV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogZXh0ZXJuIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7Ci1leHRlcm4gaW50IHIzMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCi0JCQl1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkJdWludDY0X3QgZHN0X29mZnNldCwKLQkJCXVuc2lnbmVkIG51bV9wYWdlcywKLQkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKK2V4dGVybiBpbnQgcnYzNzBfZ2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIzMDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyMzAwX2luaXQsCiAJLmZpbmkgPSAmcjMwMF9maW5pLApAQCAtMTYyLDcgKzIwNSw0NiBAQAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjMwMF9mZW5jZV9yaW5nX2VtaXQsCiAJLmNzX3BhcnNlID0gJnIzMDBfY3NfcGFyc2UsCiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKLQkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKKwkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCisJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKKwkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9wY2llX2xhbmVzID0gJnJ2MzcwX2dldF9wY2llX2xhbmVzLAorCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKKwkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCisJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAorCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmcjEwMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5ocGRfaW5pdCA9ICZyMTAwX2hwZF9pbml0LAorCS5ocGRfZmluaSA9ICZyMTAwX2hwZF9maW5pLAorCS5ocGRfc2Vuc2UgPSAmcjEwMF9ocGRfc2Vuc2UsCisJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcjEwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAorfTsKKworCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIzMDBfYXNpY19wY2llID0geworCS5pbml0ID0gJnIzMDBfaW5pdCwKKwkuZmluaSA9ICZyMzAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjMwMF9yZXN1bWUsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAorCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCisJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCisJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaXJxX3NldCA9ICZyMTAwX2lycV9zZXQsCisJLmlycV9wcm9jZXNzID0gJnIxMDBfaXJxX3Byb2Nlc3MsCisJLmdldF92YmxhbmtfY291bnRlciA9ICZyMTAwX2dldF92YmxhbmtfY291bnRlciwKKwkuZmVuY2VfcmluZ19lbWl0ID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAorCS5jc19wYXJzZSA9ICZyMzAwX2NzX3BhcnNlLAorCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmNvcHlfZG1hID0gJnIyMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKQEAgLTIwNiwxMiArMjg4LDEzIEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gJnJ2MzcwX2dldF9wY2llX2xhbmVzLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTI1NSwxMiArMzM4LDEzIEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTMxNCwxNCArMzk4LDE3IEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCisJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAorCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCiAJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZSwKIAkuaHBkX2luaXQgPSAmcnM2MDBfaHBkX2luaXQsCiAJLmhwZF9maW5pID0gJnJzNjAwX2hwZF9maW5pLApAQCAtMzYwLDEyICs0NDcsMTMgQEAKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAogCS5jc19wYXJzZSA9ICZyMzAwX2NzX3BhcnNlLAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCi0JLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCi0JLmNvcHkgPSAmcjMwMF9jb3B5X2RtYSwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKKwkuY29weSA9ICZyMjAwX2NvcHlfZG1hLAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLApAQCAtNDEyLDEyICs1MDAsMTMgQEAKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAogCS5jc19wYXJzZSA9ICZyMzAwX2NzX3BhcnNlLAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCi0JLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCisJLmNvcHlfZG1hID0gJnIyMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKKwkuZ2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfZ2V0X3BjaWVfbGFuZXMsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLApAQCAtNDU1LDEyICs1NDQsMTMgQEAKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAogCS5jc19wYXJzZSA9ICZyMzAwX2NzX3BhcnNlLAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCi0JLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCisJLmNvcHlfZG1hID0gJnIyMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKKwkuZ2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfZ2V0X3BjaWVfbGFuZXMsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLApAQCAtNTM4LDggKzYyOCw5IEBACiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gJnJ2MzcwX2dldF9wY2llX2xhbmVzLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCi0JLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKKwkuc2V0X2Nsb2NrX2dhdGluZyA9IE5VTEwsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCiAJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKQEAgLTU4Myw2ICs2NzQsNyBAQAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5nZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9nZXRfcGNpZV9sYW5lcywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLApAQCAtNTk1LDQgKzY4Nyw1NCBAQAogCS5pb2N0bF93YWl0X2lkbGUgPSByNjAwX2lvY3RsX3dhaXRfaWRsZSwKIH07CiAKKy8qCisgKiBldmVyZ3JlZW4KKyAqLworaW50IGV2ZXJncmVlbl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IGV2ZXJncmVlbl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBldmVyZ3JlZW5fcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBldmVyZ3JlZW5fZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBldmVyZ3JlZW5faHBkX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBldmVyZ3JlZW5faHBkX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworYm9vbCBldmVyZ3JlZW5faHBkX3NlbnNlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBlbnVtIHJhZGVvbl9ocGRfaWQgaHBkKTsKK3ZvaWQgZXZlcmdyZWVuX2hwZF9zZXRfcG9sYXJpdHkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJZW51bSByYWRlb25faHBkX2lkIGhwZCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgZXZlcmdyZWVuX2FzaWMgPSB7CisJLmluaXQgPSAmZXZlcmdyZWVuX2luaXQsCisJLmZpbmkgPSAmZXZlcmdyZWVuX2ZpbmksCisJLnN1c3BlbmQgPSAmZXZlcmdyZWVuX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZldmVyZ3JlZW5fcmVzdW1lLAorCS5jcF9jb21taXQgPSBOVUxMLAorCS5ncHVfcmVzZXQgPSAmZXZlcmdyZWVuX2dwdV9yZXNldCwKKwkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCisJLmdhcnRfdGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAorCS5yaW5nX3Rlc3QgPSBOVUxMLAorCS5yaW5nX2liX2V4ZWN1dGUgPSBOVUxMLAorCS5pcnFfc2V0ID0gTlVMTCwKKwkuaXJxX3Byb2Nlc3MgPSBOVUxMLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBOVUxMLAorCS5mZW5jZV9yaW5nX2VtaXQgPSBOVUxMLAorCS5jc19wYXJzZSA9IE5VTEwsCisJLmNvcHlfYmxpdCA9IE5VTEwsCisJLmNvcHlfZG1hID0gTlVMTCwKKwkuY29weSA9IE5VTEwsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKKwkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCisJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKKwkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAorCS5zZXRfY2xvY2tfZ2F0aW5nID0gTlVMTCwKKwkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCisJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZldmVyZ3JlZW5fYmFuZHdpZHRoX3VwZGF0ZSwKKwkuaHBkX2luaXQgPSAmZXZlcmdyZWVuX2hwZF9pbml0LAorCS5ocGRfZmluaSA9ICZldmVyZ3JlZW5faHBkX2ZpbmksCisJLmhwZF9zZW5zZSA9ICZldmVyZ3JlZW5faHBkX3NlbnNlLAorCS5ocGRfc2V0X3BvbGFyaXR5ID0gJmV2ZXJncmVlbl9ocGRfc2V0X3BvbGFyaXR5LAorfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwppbmRleCA0ZDg4MzE1Li45Mzc4M2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKQEAgLTE1OSw4ICsxNTksMTUgQEAKIAkJCQkJCQkgICAgc3RydWN0IHJhZGVvbl9ncGlvX3JlYyAqZ3BpbykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2hwZCBocGQ7CisJdTMyIHJlZzsKKworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCXJlZyA9IEVWRVJHUkVFTl9EQ19HUElPX0hQRF9BOworCWVsc2UKKwkJcmVnID0gQVZJVk9fRENfR1BJT19IUERfQTsKKwogCWhwZC5ncGlvID0gKmdwaW87Ci0JaWYgKGdwaW8tPnJlZyA9PSBBVklWT19EQ19HUElPX0hQRF9BKSB7CisJaWYgKGdwaW8tPnJlZyA9PSByZWcpIHsKIAkJc3dpdGNoKGdwaW8tPm1hc2spIHsKIAkJY2FzZSAoMSA8PCAwKToKIAkJCWhwZC5ocGQgPSBSQURFT05fSFBEXzE7CkBAIC01NzQsNiArNTgxLDkgQEAKIAkJCQlkZGNfYnVzLnZhbGlkID0gZmFsc2U7CiAJCQl9CiAKKwkJCS8qIG5lZWRlZCBmb3IgYXV4IGNoYW4gdHJhbnNhY3Rpb25zICovCisJCQlkZGNfYnVzLmhwZF9pZCA9IGhwZC5ocGQgPyAoaHBkLmhwZCAtIDEpIDogMDsKKwogCQkJY29ubl9pZCA9IGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKTsKIAogCQkJaWYgKCFyYWRlb25fYXRvbV9hcHBseV9xdWlya3MKQEAgLTgzOCw2ICs4NDgsNyBAQAogCUFUT01fRklSTVdBUkVfSU5GT19WMV8yIGluZm9fMTI7CiAJQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzMgaW5mb18xMzsKIAlBVE9NX0ZJUk1XQVJFX0lORk9fVjFfNCBpbmZvXzE0OworCUFUT01fRklSTVdBUkVfSU5GT19WMl8xIGluZm9fMjE7CiB9OwogCiBib29sIHJhZGVvbl9hdG9tX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC04NDksNiArODYwLDcgQEAKIAl1aW50OF90IGZyZXYsIGNyZXY7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnAxcGxsID0gJnJkZXYtPmNsb2NrLnAxcGxsOwogCXN0cnVjdCByYWRlb25fcGxsICpwMnBsbCA9ICZyZGV2LT5jbG9jay5wMnBsbDsKKwlzdHJ1Y3QgcmFkZW9uX3BsbCAqZGNwbGwgPSAmcmRldi0+Y2xvY2suZGNwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnNwbGwgPSAmcmRldi0+Y2xvY2suc3BsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqbXBsbCA9ICZyZGV2LT5jbG9jay5tcGxsOwogCXVpbnQxNl90IGRhdGFfb2Zmc2V0OwpAQCAtOTUxLDggKzk2MywxOSBAQAogCQlyZGV2LT5jbG9jay5kZWZhdWx0X21jbGsgPQogCQkgICAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51bERlZmF1bHRNZW1vcnlDbG9jayk7CiAKKwkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQkJcmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrID0KKwkJCQlsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIxLnVsRGVmYXVsdERpc3BFbmdpbmVDbGtGcmVxKTsKKwkJCWlmIChyZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGsgPT0gMCkKKwkJCQlyZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGsgPSA2MDAwMDsgLyogNjAwIE1oeiAqLworCQkJcmRldi0+Y2xvY2suZHBfZXh0Y2xrID0KKwkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIxLnVzVW5pcGh5RFBNb2RlRXh0Q2xrRnJlcSk7CisJCX0KKwkJKmRjcGxsID0gKnAxcGxsOworCiAJCXJldHVybiB0cnVlOwogCX0KKwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA5MSw2ICsxMTE0LDMwIEBACiAJcmV0dXJuIHNzOwogfQogCitzdGF0aWMgdm9pZCByYWRlb25fYXRvbV9hcHBseV9sdmRzX3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqbHZkcykKK3sKKworCS8qIFRvc2hpYmEgQTMwMC0xQlUgbGFwdG9wIHBhbmVsIGRvZXNuJ3QgbGlrZSBuZXcgcGxsIGRpdmlkZXIgYWxnbyAqLworCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NWM0KSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTE3OSkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweGZmNTApKSB7CisJCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPT0gMTI4MCkgJiYKKwkJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9PSA4MDApKQorCQkJbHZkcy0+cGxsX2FsZ28gPSBQTExfQUxHT19MRUdBQ1k7CisJfQorCisJLyogRGVsbCBTdHVkaW8gMTUgbGFwdG9wIHBhbmVsIGRvZXNuJ3QgbGlrZSBuZXcgcGxsIGRpdmlkZXIgYWxnbyAqLworCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NWM0KSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTAyOCkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAyOWYpKSB7CisJCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPT0gMTI4MCkgJiYKKwkJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9PSA4MDApKQorCQkJbHZkcy0+cGxsX2FsZ28gPSBQTExfQUxHT19MRUdBQ1k7CisJfQorCit9CisKIHVuaW9uIGx2ZHNfaW5mbyB7CiAJc3RydWN0IF9BVE9NX0xWRFNfSU5GTyBpbmZvOwogCXN0cnVjdCBfQVRPTV9MVkRTX0lORk9fVjEyIGluZm9fMTI7CkBAIC0xMTYxLDYgKzEyMDgsMjEgQEAKIAogCQlsdmRzLT5zcyA9IHJhZGVvbl9hdG9tYmlvc19nZXRfc3NfaW5mbyhlbmNvZGVyLCBsdmRzX2luZm8tPmluZm8udWNTU19JZCk7CiAKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwkJCWlmIChyYWRlb25fbmV3X3BsbCA9PSAwKQorCQkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTEVHQUNZOworCQkJZWxzZQorCQkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTkVXOworCQl9IGVsc2UgeworCQkJaWYgKHJhZGVvbl9uZXdfcGxsID09IDEpCisJCQkJbHZkcy0+cGxsX2FsZ28gPSBQTExfQUxHT19ORVc7CisJCQllbHNlCisJCQkJbHZkcy0+cGxsX2FsZ28gPSBQTExfQUxHT19MRUdBQ1k7CisJCX0KKworCQkvKiBMVkRTIHF1aXJrcyAqLworCQlyYWRlb25fYXRvbV9hcHBseV9sdmRzX3F1aXJrcyhkZXYsIGx2ZHMpOworCiAJCWVuY29kZXItPm5hdGl2ZV9tb2RlID0gbHZkcy0+bmF0aXZlX21vZGU7CiAJfQogCXJldHVybiBsdmRzOwpAQCAtMTM4NSw2ICsxNDQ3LDM3MSBAQAogCXJldHVybiB0dl9kYWM7CiB9CiAKK3VuaW9uIHBvd2VyX2luZm8geworCXN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GTyBpbmZvOworCXN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GT19WMiBpbmZvXzI7CisJc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPX1YzIGluZm9fMzsKKwlzdHJ1Y3QgX0FUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgaW5mb180OworfTsKKwordm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFBvd2VyUGxheUluZm8pOworCXUxNiBkYXRhX29mZnNldDsKKwl1OCBmcmV2LCBjcmV2OworCXUzMiBtaXNjLCBtaXNjMiA9IDAsIHNjbGssIG1jbGs7CisJdW5pb24gcG93ZXJfaW5mbyAqcG93ZXJfaW5mbzsKKwlzdHJ1Y3QgX0FUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTyAqbm9uX2Nsb2NrX2luZm87CisJc3RydWN0IF9BVE9NX1BQTElCX1NUQVRFICpwb3dlcl9zdGF0ZTsKKwlpbnQgbnVtX21vZGVzID0gMCwgaSwgajsKKwlpbnQgc3RhdGVfaW5kZXggPSAwLCBtb2RlX2luZGV4ID0gMDsKKworCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGluZGV4LCBOVUxMLCAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCk7CisKKwlwb3dlcl9pbmZvID0gKHVuaW9uIHBvd2VyX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID0gTlVMTDsKKworCWlmIChwb3dlcl9pbmZvKSB7CisJCWlmIChmcmV2IDwgNCkgeworCQkJbnVtX21vZGVzID0gcG93ZXJfaW5mby0+aW5mby51Y051bU9mUG93ZXJNb2RlRW50cmllczsKKwkJCWlmIChudW1fbW9kZXMgPiBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSykKKwkJCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykgeworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwkJCQlzd2l0Y2ggKGZyZXYpIHsKKwkJCQljYXNlIDE6CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0KKwkJCQkJCWxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVzTWVtb3J5Q2xvY2spOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0KKwkJCQkJCWxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVzRW5naW5lQ2xvY2spOworCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8CisJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBza2lwIG92ZXJjbG9jayBtb2RlcyBmb3Igbm93ICovCisJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA+CisJCQkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikgfHwKKwkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID4KKwkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9CisJCQkJCQlwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51Y051bVBjaUVMYW5lczsKKwkJCQkJbWlzYyA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8pOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX1NVUFBPUlQpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9HUElPOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvID0KKwkJCQkJCQlyYWRlb25fbG9va3VwX2dwaW8ocmRldiwKKwkJCQkJCQlwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOworCQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJZmFsc2U7CisJCQkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfVkREQzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9CisJCQkJCQkJcG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udWNWb2x0YWdlRHJvcEluZGV4OworCQkJCQl9CisJCQkJCS8qIG9yZGVyIG1hdHRlcnMhICovCisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QT1dFUl9TQVZJTkdfTU9ERSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfRENfU1RBVEVfRU5UUllfVFJVRSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0xPV19EQ19TVEFURV9FTlRSWV9UUlVFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0xPQURfQkFMQU5DRV9FTikKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fM0RfQUNDRUxFUkFUSU9OX0VOKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19EUklWRVJfREVGQVVMVF9NT0RFKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQkJCQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF07CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07CisJCQkJCX0KKwkJCQkJc3RhdGVfaW5kZXgrKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9CisJCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWVtb3J5Q2xvY2spOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0KKwkJCQkJCWxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWxFbmdpbmVDbG9jayk7CisJCQkJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLworCQkJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPT0gMCkgfHwKKwkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID09IDApKQorCQkJCQkJY29udGludWU7CisJCQkJCS8qIHNraXAgb3ZlcmNsb2NrIG1vZGVzIGZvciBub3cgKi8KKwkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID4KKwkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X21jbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSB8fAorCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPgorCQkJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pKQorCQkJCQkJY29udGludWU7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0KKwkJCQkJCXBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWNOdW1QY2lFTGFuZXM7CisJCQkJCW1pc2MgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8pOworCQkJCQltaXNjMiA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWxNaXNjSW5mbzIpOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX1NVUFBPUlQpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9HUElPOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvID0KKwkJCQkJCQlyYWRlb25fbG9va3VwX2dwaW8ocmRldiwKKwkJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleCk7CisJCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX0FDVElWRV9ISUdIKQorCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJCQl0cnVlOworCQkJCQkJZWxzZQorCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJCQlmYWxzZTsKKwkJCQkJfSBlbHNlIGlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QUk9HUkFNX1ZPTFRBR0UpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9WRERDOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52ZGRjX2lkID0KKwkJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleDsKKwkJCQkJfQorCQkJCQkvKiBvcmRlciBtYXR0ZXJzISAqLworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0RDX1NUQVRFX0VOVFJZX1RSVUUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9MT1dfRENfU1RBVEVfRU5UUllfVFJVRSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19MT0FEX0JBTEFOQ0VfRU4pCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTikKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BNX01JU0NJTkZPMl9TWVNURU1fQUNfTElURV9NT0RFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19EUklWRVJfREVGQVVMVF9NT0RFKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQkJCQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF07CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07CisJCQkJCX0KKwkJCQkJc3RhdGVfaW5kZXgrKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9CisJCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWVtb3J5Q2xvY2spOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0KKwkJCQkJCWxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWxFbmdpbmVDbG9jayk7CisJCQkJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLworCQkJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPT0gMCkgfHwKKwkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID09IDApKQorCQkJCQkJY29udGludWU7CisJCQkJCS8qIHNraXAgb3ZlcmNsb2NrIG1vZGVzIGZvciBub3cgKi8KKwkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID4KKwkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X21jbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSB8fAorCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPgorCQkJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pKQorCQkJCQkJY29udGludWU7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0KKwkJCQkJCXBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWNOdW1QY2lFTGFuZXM7CisJCQkJCW1pc2MgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8pOworCQkJCQltaXNjMiA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWxNaXNjSW5mbzIpOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX1NVUFBPUlQpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9HUElPOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvID0KKwkJCQkJCQlyYWRlb25fbG9va3VwX2dwaW8ocmRldiwKKwkJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleCk7CisJCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX0FDVElWRV9ISUdIKQorCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJCQl0cnVlOworCQkJCQkJZWxzZQorCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJCQlmYWxzZTsKKwkJCQkJfSBlbHNlIGlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QUk9HUkFNX1ZPTFRBR0UpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9WRERDOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52ZGRjX2lkID0KKwkJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleDsKKwkJCQkJCWlmIChtaXNjMiAmIEFUT01fUE1fTUlTQ0lORk8yX1ZERENJX0RZTkFNSUNfVk9MVEFHRV9FTikgeworCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY2lfZW5hYmxlZCA9CisJCQkJCQkJCXRydWU7CisJCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52ZGRjaV9pZCA9CisJCQkJCQkJcG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZERENJX1ZvbHRhZ2VEcm9wSW5kZXg7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyogb3JkZXIgbWF0dGVycyEgKi8KKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BPV0VSX1NBVklOR19NT0RFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUE9XRVJTQVZFOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9EQ19TVEFURV9FTlRSWV9UUlVFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfTE9XX0RDX1NUQVRFX0VOVFJZX1RSVUUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fTE9BRF9CQUxBTkNFX0VOKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT18zRF9BQ0NFTEVSQVRJT05fRU4pCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKKwkJCQkJaWYgKG1pc2MyICYgQVRPTV9QTV9NSVNDSU5GTzJfU1lTVEVNX0FDX0xJVEVfTU9ERSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fRFJJVkVSX0RFRkFVTFRfTU9ERSkgeworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwkJCQkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPSAmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJCQl9CisJCQkJCXN0YXRlX2luZGV4Kys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChmcmV2ID09IDQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwb3dlcl9pbmZvLT5pbmZvXzQudWNOdW1TdGF0ZXM7IGkrKykgeworCQkJCW1vZGVfaW5kZXggPSAwOworCQkJCXBvd2VyX3N0YXRlID0gKHN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSAqKQorCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkgZGF0YV9vZmZzZXQgKworCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzU3RhdGVBcnJheU9mZnNldCkgKworCQkJCQkgaSAqIHBvd2VyX2luZm8tPmluZm9fNC51Y1N0YXRlRW50cnlTaXplKTsKKwkJCQlub25fY2xvY2tfaW5mbyA9IChzdHJ1Y3QgX0FUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTyAqKQorCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkgZGF0YV9vZmZzZXQgKworCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKKwkJCQkJIChwb3dlcl9zdGF0ZS0+dWNOb25DbG9ja1N0YXRlSW5kZXggKgorCQkJCQkgIHBvd2VyX2luZm8tPmluZm9fNC51Y05vbkNsb2NrU2l6ZSkpOworCQkJCWZvciAoaiA9IDA7IGogPCAocG93ZXJfaW5mby0+aW5mb180LnVjU3RhdGVFbnRyeVNpemUgLSAxKTsgaisrKSB7CisJCQkJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJCQkJCXN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPICpjbG9ja19pbmZvID0KKwkJCQkJCQkoc3RydWN0IF9BVE9NX1BQTElCX1JTNzgwX0NMT0NLX0lORk8gKikKKwkJCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJCSBkYXRhX29mZnNldCArCisJCQkJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fNC51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KSArCisJCQkJCQkJIChwb3dlcl9zdGF0ZS0+dWNDbG9ja1N0YXRlSW5kaWNlc1tqXSAqCisJCQkJCQkJICBwb3dlcl9pbmZvLT5pbmZvXzQudWNDbG9ja0luZm9TaXplKSk7CisJCQkJCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+dXNMb3dFbmdpbmVDbG9ja0xvdyk7CisJCQkJCQlzY2xrIHw9IGNsb2NrX2luZm8tPnVjTG93RW5naW5lQ2xvY2tIaWdoIDw8IDE2OworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9IHNjbGs7CisJCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCQkJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID09IDApCisJCQkJCQkJY29udGludWU7CisJCQkJCQkvKiBza2lwIG92ZXJjbG9jayBtb2RlcyBmb3Igbm93ICovCisJCQkJCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA+CisJCQkJCQkgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9TVzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9CisJCQkJCQkJY2xvY2tfaW5mby0+dXNWRERDOworCQkJCQkJbW9kZV9pbmRleCsrOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RydWN0IF9BVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTyAqY2xvY2tfaW5mbyA9CisJCQkJCQkJKHN0cnVjdCBfQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk8gKikKKwkJCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJCSBkYXRhX29mZnNldCArCisJCQkJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fNC51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KSArCisJCQkJCQkJIChwb3dlcl9zdGF0ZS0+dWNDbG9ja1N0YXRlSW5kaWNlc1tqXSAqCisJCQkJCQkJICBwb3dlcl9pbmZvLT5pbmZvXzQudWNDbG9ja0luZm9TaXplKSk7CisJCQkJCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+dXNFbmdpbmVDbG9ja0xvdyk7CisJCQkJCQlzY2xrIHw9IGNsb2NrX2luZm8tPnVjRW5naW5lQ2xvY2tIaWdoIDw8IDE2OworCQkJCQkJbWNsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnVzTWVtb3J5Q2xvY2tMb3cpOworCQkJCQkJbWNsayB8PSBjbG9ja19pbmZvLT51Y01lbW9yeUNsb2NrSGlnaCA8PCAxNjsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLm1jbGsgPSBtY2xrOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9IHNjbGs7CisJCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0ubWNsayA9PSAwKSB8fAorCQkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID09IDApKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJLyogc2tpcCBvdmVyY2xvY2sgbW9kZXMgZm9yIG5vdyAqLworCQkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5tY2xrID4KKwkJCQkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikgfHwKKwkJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA+CisJCQkJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KKwkJCQkJCQlWT0xUQUdFX1NXOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS52b2x0YWdlID0KKwkJCQkJCQljbG9ja19pbmZvLT51c1ZEREM7CisJCQkJCQltb2RlX2luZGV4Kys7CisJCQkJCX0KKwkJCQl9CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IG1vZGVfaW5kZXg7CisJCQkJaWYgKG1vZGVfaW5kZXgpIHsKKwkJCQkJbWlzYyA9IGxlMzJfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51bENhcHNBbmRTZXR0aW5ncyk7CisJCQkJCW1pc2MyID0gbGUxNl90b19jcHUobm9uX2Nsb2NrX2luZm8tPnVzQ2xhc3NpZmljYXRpb24pOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9CisJCQkJCQkoKG1pc2MgJiBBVE9NX1BQTElCX1BDSUVfTElOS19XSURUSF9NQVNLKSA+PgorCQkJCQkJQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfU0hJRlQpICsgMTsKKwkJCQkJc3dpdGNoIChtaXNjMiAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTUFTSykgeworCQkJCQljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFUVEVSWToKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX0JBTEFOQ0VEOgorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX1BFUkZPUk1BTkNFOgorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0JPT1QpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XTsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQorCQkJCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4IC0gMV07CisJCQkJCX0KKwkJCQkJc3RhdGVfaW5kZXgrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBYWFggZmlndXJlIG91dCBzb21lIGdvb2QgZGVmYXVsdCBsb3cgcG93ZXIgbW9kZSBmb3IgY2FyZHMgdy9vdXQgcG93ZXIgdGFibGVzICovCisJfQorCisJaWYgKHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPT0gTlVMTCkgeworCQkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOworCQlpZiAocmRldi0+YXNpYy0+Z2V0X3BjaWVfbGFuZXMpCisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9IHJhZGVvbl9nZXRfcGNpZV9sYW5lcyhyZGV2KTsKKwkJZWxzZQorCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPSAxNjsKKwkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF07CisJCXN0YXRlX2luZGV4Kys7CisJfQorCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSBzdGF0ZV9pbmRleDsKKworCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGUgPSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlOworCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZSA9CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUtPmRlZmF1bHRfY2xvY2tfbW9kZTsKK30KKwogdm9pZCByYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKQogewogCURZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BTX0FMTE9DQVRJT04gYXJnczsKQEAgLTEzOTUsMTYgKzE4MjIsNiBAQAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCi12b2lkIHJhZGVvbl9hdG9tX3N0YXRpY19wd3JtZ3Rfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpCi17Ci0JRU5BQkxFX0FTSUNfU1RBVElDX1BXUl9NR1RfUFNfQUxMT0NBVElPTiBhcmdzOwotCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZUFTSUNfU3RhdGljUHdyTWd0KTsKLQotCWFyZ3MudWNFbmFibGUgPSBlbmFibGU7Ci0KLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLX0KLQogdWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlHRVRfRU5HSU5FX0NMT0NLX1BTX0FMTE9DQVRJT04gYXJnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0cHhfaGFuZGxlci5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NTdjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0cHhfaGFuZGxlci5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFJlZCBIYXQgSW5jLgorICogQXV0aG9yIDogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2MgorICoKKyAqIEFUUFggc3VwcG9ydCBmb3IgYm90aCBJbnRlbC9BVEkKKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjZGVmaW5lIEFUUFhfVkVSU0lPTiAwCisjZGVmaW5lIEFUUFhfR1BVX1BXUiAyCisjZGVmaW5lIEFUUFhfTVVYX1NFTEVDVCAzCisKKyNkZWZpbmUgQVRQWF9JTlRFR1JBVEVEIDAKKyNkZWZpbmUgQVRQWF9ESVNDUkVURSAxCisKKyNkZWZpbmUgQVRQWF9NVVhfSUdEIDAKKyNkZWZpbmUgQVRQWF9NVVhfRElTQ1JFVEUgMQorCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hdHB4X3ByaXYgeworCWJvb2wgYXRweF9kZXRlY3RlZDsKKwkvKiBoYW5kbGUgZm9yIGRldmljZSAtIGFuZCBhdHB4ICovCisJYWNwaV9oYW5kbGUgZGhhbmRsZTsKKwlhY3BpX2hhbmRsZSBhdHB4X2hhbmRsZTsKKwlhY3BpX2hhbmRsZSBhdHJtX2hhbmRsZTsKK30gcmFkZW9uX2F0cHhfcHJpdjsKKworLyogcmV0cmlldmUgdGhlIFJPTSBpbiA0ayBibG9ja3MgKi8KK3N0YXRpYyBpbnQgcmFkZW9uX2F0cm1fY2FsbChhY3BpX2hhbmRsZSBhdHJtX2hhbmRsZSwgdWludDhfdCAqYmlvcywKKwkJCSAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bmlvbiBhY3BpX29iamVjdCBhdHJtX2FyZ19lbGVtZW50c1syXSwgKm9iajsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhdHJtX2FyZzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisKKwlhdHJtX2FyZy5jb3VudCA9IDI7CisJYXRybV9hcmcucG9pbnRlciA9ICZhdHJtX2FyZ19lbGVtZW50c1swXTsKKworCWF0cm1fYXJnX2VsZW1lbnRzWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhdHJtX2FyZ19lbGVtZW50c1swXS5pbnRlZ2VyLnZhbHVlID0gb2Zmc2V0OworCisJYXRybV9hcmdfZWxlbWVudHNbMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWF0cm1fYXJnX2VsZW1lbnRzWzFdLmludGVnZXIudmFsdWUgPSBsZW47CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChhdHJtX2hhbmRsZSwgTlVMTCwgJmF0cm1fYXJnLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKCJmYWlsZWQgdG8gZXZhbHVhdGUgQVRSTSBnb3QgJXNcbiIsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJbWVtY3B5KGJpb3Mrb2Zmc2V0LCBvYmotPmJ1ZmZlci5wb2ludGVyLCBsZW4pOworCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gbGVuOworfQorCitib29sIHJhZGVvbl9hdHJtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiBnZXQgdGhlIGRpc2NyZXRlIFJPTSBvbmx5IHZpYSBBVFJNICovCisJaWYgKCFyYWRlb25fYXRweF9wcml2LmF0cHhfZGV0ZWN0ZWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChyYWRlb25fYXRweF9wcml2LmRoYW5kbGUgPT0gREVWSUNFX0FDUElfSEFORExFKCZwZGV2LT5kZXYpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKKworaW50IHJhZGVvbl9hdHJtX2dldF9iaW9zX2NodW5rKHVpbnQ4X3QgKmJpb3MsIGludCBvZmZzZXQsIGludCBsZW4pCit7CisJcmV0dXJuIHJhZGVvbl9hdHJtX2NhbGwocmFkZW9uX2F0cHhfcHJpdi5hdHJtX2hhbmRsZSwgYmlvcywgb2Zmc2V0LCBsZW4pOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X2dldF92ZXJzaW9uKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgYXRweF9hcmdfZWxlbWVudHNbMl0sICpvYmo7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXRweF9hcmc7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKworCWF0cHhfYXJnLmNvdW50ID0gMjsKKwlhdHB4X2FyZy5wb2ludGVyID0gJmF0cHhfYXJnX2VsZW1lbnRzWzBdOworCisJYXRweF9hcmdfZWxlbWVudHNbMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWF0cHhfYXJnX2VsZW1lbnRzWzBdLmludGVnZXIudmFsdWUgPSBBVFBYX1ZFUlNJT047CisKKwlhdHB4X2FyZ19lbGVtZW50c1sxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJYXRweF9hcmdfZWxlbWVudHNbMV0uaW50ZWdlci52YWx1ZSA9IEFUUFhfVkVSU0lPTjsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTlVMTCwgJmF0cHhfYXJnLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGNhbGwgQVRQWDogJXNcbiIsIF9fZnVuY19fLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKwlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKKwlpZiAob2JqICYmIChvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUikpCisJCXByaW50ayhLRVJOX0lORk8gInJhZGVvbiBhdHB4OiB2ZXJzaW9uIGlzICVkXG4iLCAqKCh1OCAqKShvYmotPmJ1ZmZlci5wb2ludGVyKSArIDIpKTsKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfZXhlY3V0ZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBjbWRfaWQsIHUxNiB2YWx1ZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgYXRweF9hcmdfZWxlbWVudHNbMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXRweF9hcmc7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1aW50OF90IGJ1Zls0XSA9IHswfTsKKworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0cHhfYXJnLmNvdW50ID0gMjsKKwlhdHB4X2FyZy5wb2ludGVyID0gJmF0cHhfYXJnX2VsZW1lbnRzWzBdOworCisJYXRweF9hcmdfZWxlbWVudHNbMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWF0cHhfYXJnX2VsZW1lbnRzWzBdLmludGVnZXIudmFsdWUgPSBjbWRfaWQ7CisKKwlidWZbMl0gPSB2YWx1ZSAmIDB4ZmY7CisJYnVmWzNdID0gKHZhbHVlID4+IDgpICYgMHhmZjsKKworCWF0cHhfYXJnX2VsZW1lbnRzWzFdLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCWF0cHhfYXJnX2VsZW1lbnRzWzFdLmJ1ZmZlci5sZW5ndGggPSA0OworCWF0cHhfYXJnX2VsZW1lbnRzWzFdLmJ1ZmZlci5wb2ludGVyID0gYnVmOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBOVUxMLCAmYXRweF9hcmcsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gY2FsbCBBVFBYOiAlc1xuIiwgX19mdW5jX18sIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3NldF9kaXNjcmV0ZV9zdGF0ZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSkKK3sKKwlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfR1BVX1BXUiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3N3aXRjaF9tdXgoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgbXV4X2lkKQoreworCXJldHVybiByYWRlb25fYXRweF9leGVjdXRlKGhhbmRsZSwgQVRQWF9NVVhfU0VMRUNULCBtdXhfaWQpOworfQorCisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfc3dpdGNodG8oZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQpCit7CisJaWYgKGlkID09IFZHQV9TV0lUQ0hFUk9PX0lHRCkKKwkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAwKTsKKwllbHNlCisJCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfcG93ZXJfc3RhdGUoZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQsCisJCQkJICAgZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSBzdGF0ZSkKK3sKKwkvKiBvbiB3NTAwIEFDUEkgY2FuJ3QgY2hhbmdlIGludGVsIGdwdSBzdGF0ZSAqLworCWlmIChpZCA9PSBWR0FfU1dJVENIRVJPT19JR0QpCisJCXJldHVybiAwOworCisJcmFkZW9uX2F0cHhfc2V0X2Rpc2NyZXRlX3N0YXRlKHJhZGVvbl9hdHB4X3ByaXYuYXRweF9oYW5kbGUsIHN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgcmFkZW9uX2F0cHhfcGNpX3Byb2JlX2hhbmRsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlhY3BpX2hhbmRsZSBkaGFuZGxlLCBhdHB4X2hhbmRsZSwgYXRybV9oYW5kbGU7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJZGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KTsKKwlpZiAoIWRoYW5kbGUpCisJCXJldHVybiBmYWxzZTsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkaGFuZGxlLCAiQVRQWCIsICZhdHB4X2hhbmRsZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGhhbmRsZSwgIkFUUk0iLCAmYXRybV9oYW5kbGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmFkZW9uX2F0cHhfcHJpdi5kaGFuZGxlID0gZGhhbmRsZTsKKwlyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlID0gYXRweF9oYW5kbGU7CisJcmFkZW9uX2F0cHhfcHJpdi5hdHJtX2hhbmRsZSA9IGF0cm1faGFuZGxlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X2luaXQodm9pZCkKK3sKKwkvKiBzZXQgdXAgdGhlIEFUUFggaGFuZGxlICovCisKKwlyYWRlb25fYXRweF9nZXRfdmVyc2lvbihyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9nZXRfY2xpZW50X2lkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChyYWRlb25fYXRweF9wcml2LmRoYW5kbGUgPT0gREVWSUNFX0FDUElfSEFORExFKCZwZGV2LT5kZXYpKQorCQlyZXR1cm4gVkdBX1NXSVRDSEVST09fSUdEOworCWVsc2UKKwkJcmV0dXJuIFZHQV9TV0lUQ0hFUk9PX0RJUzsKK30KKworc3RhdGljIHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyIHJhZGVvbl9hdHB4X2hhbmRsZXIgPSB7CisJLnN3aXRjaHRvID0gcmFkZW9uX2F0cHhfc3dpdGNodG8sCisJLnBvd2VyX3N0YXRlID0gcmFkZW9uX2F0cHhfcG93ZXJfc3RhdGUsCisJLmluaXQgPSByYWRlb25fYXRweF9pbml0LAorCS5nZXRfY2xpZW50X2lkID0gcmFkZW9uX2F0cHhfZ2V0X2NsaWVudF9pZCwKK307CisKK3N0YXRpYyBib29sIHJhZGVvbl9hdHB4X2RldGVjdCh2b2lkKQoreworCWNoYXIgYWNwaV9tZXRob2RfbmFtZVsyNTVdID0geyAwIH07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtzaXplb2YoYWNwaV9tZXRob2RfbmFtZSksIGFjcGlfbWV0aG9kX25hbWV9OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwlib29sIGhhc19hdHB4ID0gZmFsc2U7CisJaW50IHZnYV9jb3VudCA9IDA7CisKKwl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBwZGV2KSkgIT0gTlVMTCkgeworCQl2Z2FfY291bnQrKzsKKworCQloYXNfYXRweCB8PSAocmFkZW9uX2F0cHhfcGNpX3Byb2JlX2hhbmRsZShwZGV2KSA9PSB0cnVlKTsKKwl9CisKKwlpZiAoaGFzX2F0cHggJiYgdmdhX2NvdW50ID09IDIpIHsKKwkJYWNwaV9nZXRfbmFtZShyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOworCQlwcmludGsoS0VSTl9JTkZPICJWR0Egc3dpdGNoZXJvbzogZGV0ZWN0ZWQgc3dpdGNoaW5nIG1ldGhvZCAlcyBoYW5kbGVcbiIsCisJCSAgICAgICBhY3BpX21ldGhvZF9uYW1lKTsKKwkJcmFkZW9uX2F0cHhfcHJpdi5hdHB4X2RldGVjdGVkID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwordm9pZCByYWRlb25fcmVnaXN0ZXJfYXRweF9oYW5kbGVyKHZvaWQpCit7CisJYm9vbCByOworCisJLyogZGV0ZWN0IGlmIHdlIGhhdmUgYW55IEFUUFggKyAyIFZHQSBpbiB0aGUgc3lzdGVtICovCisJciA9IHJhZGVvbl9hdHB4X2RldGVjdCgpOworCWlmICghcikKKwkJcmV0dXJuOworCisJdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfaGFuZGxlcigmcmFkZW9uX2F0cHhfaGFuZGxlcik7Cit9CisKK3ZvaWQgcmFkZW9uX3VucmVnaXN0ZXJfYXRweF9oYW5kbGVyKHZvaWQpCit7CisJdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9oYW5kbGVyKCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKaW5kZXggOTA2OTIxNy4uNTU3MjQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKIAorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CiAvKgogICogQklPUy4KICAqLwpAQCAtNjIsNyArNjMsNyBAQAogCQlpb3VubWFwKGJpb3MpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCW1lbWNweShyZGV2LT5iaW9zLCBiaW9zLCBzaXplKTsKKwltZW1jcHlfZnJvbWlvKHJkZXYtPmJpb3MsIGJpb3MsIHNpemUpOwogCWlvdW5tYXAoYmlvcyk7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC05Myw2ICs5NCwzOCBAQAogCXJldHVybiB0cnVlOwogfQogCisvKiBBVFJNIGlzIHVzZWQgdG8gZ2V0IHRoZSBCSU9TIG9uIHRoZSBkaXNjcmV0ZSBjYXJkcyBpbgorICogZHVhbC1ncHUgc3lzdGVtcy4KKyAqLworc3RhdGljIGJvb2wgcmFkZW9uX2F0cm1fZ2V0X2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZSA9IDY0ICogMTAyNDsKKwlpbnQgaTsKKworCWlmICghcmFkZW9uX2F0cm1fc3VwcG9ydGVkKHJkZXYtPnBkZXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZGV2LT5iaW9zID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPmJpb3MpIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgYmlvc1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIEFUUk1fQklPU19QQUdFOyBpKyspIHsKKwkJcmV0ID0gcmFkZW9uX2F0cm1fZ2V0X2Jpb3NfY2h1bmsocmRldi0+YmlvcywKKwkJCQkJCSAoaSAqIEFUUk1fQklPU19QQUdFKSwKKwkJCQkJCSBBVFJNX0JJT1NfUEFHRSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDAgfHwgcmRldi0+Ymlvc1swXSAhPSAweDU1IHx8IHJkZXYtPmJpb3NbMV0gIT0gMHhhYSkgeworCQlrZnJlZShyZGV2LT5iaW9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KIHN0YXRpYyBib29sIHI3MDBfcmVhZF9kaXNhYmxlZF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHZpcGhfY29udHJvbDsKQEAgLTM4OCwxNiArNDIxLDE2IEBACiAJCXJldHVybiBsZWdhY3lfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogfQogCisKIGJvb2wgcmFkZW9uX2dldF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWJvb2wgcjsKIAl1aW50MTZfdCB0bXA7CiAKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJciA9IHJhZGVvbl9hdHJtX2dldF9iaW9zKHJkZXYpOworCWlmIChyID09IGZhbHNlKQogCQlyID0gaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0ocmRldik7Ci0JCWlmIChyID09IGZhbHNlKQotCQkJciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7Ci0JfSBlbHNlCisJaWYgKHIgPT0gZmFsc2UpCiAJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOwogCWlmIChyID09IGZhbHNlKSB7CiAJCXIgPSByYWRlb25fcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwpAQCAtNDA4LDYgKzQ0MSwxMyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5iaW9zWzBdICE9IDB4NTUgfHwgcmRldi0+Ymlvc1sxXSAhPSAweGFhKSB7CisJCXByaW50aygiQklPUyBzaWduYXR1cmUgaW5jb3JyZWN0ICV4ICV4XG4iLCByZGV2LT5iaW9zWzBdLCByZGV2LT5iaW9zWzFdKTsKKwkJZ290byBmcmVlX2Jpb3M7CisJfQorCisJdG1wID0gUkJJT1MxNigweDE4KTsKKwlpZiAoUkJJT1M4KHRtcCArIDB4MTQpICE9IDB4MCkgeworCQlEUk1fSU5GTygiTm90IGFuIHg4NiBCSU9TIFJPTSwgbm90IHVzaW5nLlxuIik7CiAJCWdvdG8gZnJlZV9iaW9zOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwppbmRleCA3M2M0NDA1Li5mNjQ5MzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwpAQCAtOTYsNiArOTYsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcDFwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnAycGxsID0gJnJkZXYtPmNsb2NrLnAycGxsOworCXN0cnVjdCByYWRlb25fcGxsICpkY3BsbCA9ICZyZGV2LT5jbG9jay5kY3BsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqc3BsbCA9ICZyZGV2LT5jbG9jay5zcGxsOwogCXN0cnVjdCByYWRlb25fcGxsICptcGxsID0gJnJkZXYtPmNsb2NrLm1wbGw7CiAJaW50IHJldDsKQEAgLTIwNCw2ICsyMDUsMTcgQEAKIAkJcDJwbGwtPm1heF9mcmFjX2ZlZWRiYWNrX2RpdiA9IDA7CiAJfQogCisJLyogZGNwbGwgaXMgRENFNCBvbmx5ICovCisJZGNwbGwtPm1pbl9wb3N0X2RpdiA9IDI7CisJZGNwbGwtPm1heF9wb3N0X2RpdiA9IDB4N2Y7CisJZGNwbGwtPm1pbl9mcmFjX2ZlZWRiYWNrX2RpdiA9IDA7CisJZGNwbGwtPm1heF9mcmFjX2ZlZWRiYWNrX2RpdiA9IDk7CisJZGNwbGwtPm1pbl9yZWZfZGl2ID0gMjsKKwlkY3BsbC0+bWF4X3JlZl9kaXYgPSAweDNmZjsKKwlkY3BsbC0+bWluX2ZlZWRiYWNrX2RpdiA9IDQ7CisJZGNwbGwtPm1heF9mZWVkYmFja19kaXYgPSAweGZmZjsKKwlkY3BsbC0+YmVzdF92Y28gPSAwOworCiAJcDFwbGwtPm1pbl9yZWZfZGl2ID0gMjsKIAlwMXBsbC0+bWF4X3JlZl9kaXYgPSAweDNmZjsKIAlwMXBsbC0+bWluX2ZlZWRiYWNrX2RpdiA9IDQ7CkBAIC04NDYsOCArODU4LDEwIEBACiAJLyogWFhYIG1ha2Ugc3VyZSBlbmdpbmUgaXMgaWRsZSAqLwogCiAJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xKSB7Ci0JCWlmIChyYWRlb25fZHluY2xrcykKLQkJCXJhZGVvbl9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCQlpZiAocmFkZW9uX2R5bmNsa3MpIHsKKwkJCWlmIChyZGV2LT5hc2ljLT5zZXRfY2xvY2tfZ2F0aW5nKQorCQkJCXJhZGVvbl9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCQl9CiAJfQogCXJhZGVvbl9hcHBseV9jbG9ja19xdWlya3MocmRldik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggZTdiMTk0NC4uZTllYTM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtMTUwLDYgKzE1MCw5IEBACiAJaW50IHJldjsKIAl1aW50MTZfdCBvZmZzZXQgPSAwLCBjaGVja19vZmZzZXQ7CiAKKwlpZiAoIXJkZXYtPmJpb3MpCisJCXJldHVybiAwOworCiAJc3dpdGNoICh0YWJsZSkgewogCQkvKiBhYnNvbHV0ZSBvZmZzZXQgdGFibGVzICovCiAJY2FzZSBDT01CSU9TX0FTSUNfSU5JVF8xX1RBQkxFOgpAQCAtNDQzLDYgKzQ0NiwzOSBAQAogCiB9CiAKK2Jvb2wgcmFkZW9uX2NvbWJpb3NfY2hlY2tfaGFyZGNvZGVkX2VkaWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IGVkaWRfaW5mbzsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwllZGlkX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQocmRldi0+ZGRldiwgQ09NQklPU19IQVJEQ09ERURfRURJRF9UQUJMRSk7CisJaWYgKCFlZGlkX2luZm8pCisJCXJldHVybiBmYWxzZTsKKworCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKERSTV9NQVhfRURJRF9FWFRfTlVNICsgMSksCisJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoZWRpZCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKillZGlkLAorCSAgICAgICAodW5zaWduZWQgY2hhciAqKShyZGV2LT5iaW9zICsgZWRpZF9pbmZvKSwgRURJRF9MRU5HVEgpOworCisJaWYgKCFkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgeworCQlrZnJlZShlZGlkKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkID0gZWRpZDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IGVkaWQgKgorcmFkZW9uX2NvbWJpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCkKKwkJcmV0dXJuIHJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBjb21iaW9zX3NldHVwX2kyY19idXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkJCQkgICAgICAgaW50IGRkY19saW5lKQogewpAQCAtNDg2LDkgKzUyMiw2NSBAQAogCQlpMmMueV9kYXRhX3JlZyA9IGRkY19saW5lOwogCX0KIAotCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1IyMDApCi0JCWkyYy5od19jYXBhYmxlID0gZmFsc2U7Ci0JZWxzZSB7CisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUjEwMDoKKwljYXNlIENISVBfUlYxMDA6CisJY2FzZSBDSElQX1JTMTAwOgorCWNhc2UgQ0hJUF9SVjIwMDoKKwljYXNlIENISVBfUlMyMDA6CisJY2FzZSBDSElQX1JTMzAwOgorCQlzd2l0Y2ggKGRkY19saW5lKSB7CisJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJCS8qIGluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBodyBjYXBhYmxlLAorCQkJICogYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrCisJCQkgKi8KKwkJCWkyYy5od19jYXBhYmxlID0gZmFsc2U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWkyYy5od19jYXBhYmxlID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIENISVBfUjIwMDoKKwkJc3dpdGNoIChkZGNfbGluZSkgeworCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCWNhc2UgUkFERU9OX0dQSU9fTU9OSUQ6CisJCQlpMmMuaHdfY2FwYWJsZSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWkyYy5od19jYXBhYmxlID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIENISVBfUlYyNTA6CisJY2FzZSBDSElQX1JWMjgwOgorCQlzd2l0Y2ggKGRkY19saW5lKSB7CisJCWNhc2UgUkFERU9OX0dQSU9fVkdBX0REQzoKKwkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQljYXNlIFJBREVPTl9HUElPX0NSVDJfRERDOgorCQkJaTJjLmh3X2NhcGFibGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSElQX1IzMDA6CisJY2FzZSBDSElQX1IzNTA6CisJCXN3aXRjaCAoZGRjX2xpbmUpIHsKKwkJY2FzZSBSQURFT05fR1BJT19WR0FfRERDOgorCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCQlpMmMuaHdfY2FwYWJsZSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWkyYy5od19jYXBhYmxlID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIENISVBfUlYzNTA6CisJY2FzZSBDSElQX1JWMzgwOgorCWNhc2UgQ0hJUF9SUzQwMDoKKwljYXNlIENISVBfUlM0ODA6CiAJCXN3aXRjaCAoZGRjX2xpbmUpIHsKIAkJY2FzZSBSQURFT05fR1BJT19WR0FfRERDOgogCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CkBAIC01MDQsOSArNTk2LDE0IEBACiAJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaTJjLmh3X2NhcGFibGUgPSBmYWxzZTsKKwkJYnJlYWs7CiAJfQogCWkyYy5tbV9pMmMgPSBmYWxzZTsKIAlpMmMuaTJjX2lkID0gMDsKKwlpMmMuaHBkX2lkID0gMDsKIAogCWlmIChkZGNfbGluZSkKIAkJaTJjLnZhbGlkID0gdHJ1ZTsKQEAgLTUyNyw5ICs2MjQsNiBAQAogCWludDhfdCByZXY7CiAJdWludDE2X3Qgc2NsaywgbWNsazsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQogCXBsbF9pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19QTExfSU5GT19UQUJMRSk7CiAJaWYgKHBsbF9pbmZvKSB7CiAJCXJldiA9IFJCSU9TOChwbGxfaW5mbyk7CkBAIC02NTQsOSArNzQ4LDYgQEAKIAlpZiAoIXBfZGFjKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCiAJLyogY2hlY2sgQ1JUIHRhYmxlICovCiAJZGFjX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0NSVF9JTkZPX1RBQkxFKTsKIAlpZiAoZGFjX2luZm8pIHsKQEAgLTY3Myw3ICs3NjQsNiBAQAogCQlmb3VuZCA9IDE7CiAJfQogCi1vdXQ6CiAJaWYgKCFmb3VuZCkgLyogZmFsbGJhY2sgdG8gZGVmYXVsdHMgKi8KIAkJcmFkZW9uX2xlZ2FjeV9nZXRfcHJpbWFyeV9kYWNfaW5mb19mcm9tX3RhYmxlKHJkZXYsIHBfZGFjKTsKIApAQCAtNjg3LDkgKzc3Nyw2IEBACiAJdWludDE2X3QgdHZfaW5mbzsKIAllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gdHZfc3RkOwotCiAJdHZfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfVFZfSU5GT19UQUJMRSk7CiAJaWYgKHR2X2luZm8pIHsKIAkJaWYgKFJCSU9TOCh0dl9pbmZvICsgNikgPT0gJ1QnKSB7CkBAIC03OTMsOSArODgwLDYgQEAKIAlpZiAoIXR2X2RhYykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQogCS8qIGZpcnN0IGNoZWNrIFRWIHRhYmxlICovCiAJZGFjX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCWlmIChkYWNfaW5mbykgewpAQCAtODU3LDcgKzk0MSw2IEBACiAJCX0KIAl9CiAKLW91dDoKIAlpZiAoIWZvdW5kKSAvKiBmYWxsYmFjayB0byBkZWZhdWx0cyAqLwogCQlyYWRlb25fbGVnYWN5X2dldF90dl9kYWNfaW5mb19mcm9tX3RhYmxlKHJkZXYsIHR2X2RhYyk7CiAKQEAgLTk0NSwxMSArMTAyOCw2IEBACiAJaW50IHRtcCwgaTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfbHZkcyAqbHZkcyA9IE5VTEw7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7Ci0JCWx2ZHMgPSByYWRlb25fbGVnYWN5X2dldF9sdmRzX2luZm9fZnJvbV9yZWdzKHJkZXYpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlsY2RfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfTENEX0lORk9fVEFCTEUpOwogCiAJaWYgKGxjZF9pbmZvKSB7CkBAIC0xMDUwLDcgKzExMjgsNyBAQAogCQlEUk1fSU5GTygiTm8gcGFuZWwgaW5mbyBmb3VuZCBpbiBCSU9TXG4iKTsKIAkJbHZkcyA9IHJhZGVvbl9sZWdhY3lfZ2V0X2x2ZHNfaW5mb19mcm9tX3JlZ3MocmRldik7CiAJfQotb3V0OgorCiAJaWYgKGx2ZHMpCiAJCWVuY29kZXItPm5hdGl2ZV9tb2RlID0gbHZkcy0+bmF0aXZlX21vZGU7CiAJcmV0dXJuIGx2ZHM7CkBAIC0xMTAyLDkgKzExODAsNiBAQAogCWludCBpLCBuOwogCXVpbnQ4X3QgdmVyOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCiAJdG1kc19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19ERlBfSU5GT19UQUJMRSk7CiAKIAlpZiAodG1kc19pbmZvKSB7CkBAIC0xMTg0LDkgKzEyNTksNiBAQAogCWVudW0gcmFkZW9uX2NvbWJpb3NfZGRjIGdwaW87CiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBpMmNfYnVzOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCiAJdG1kcy0+aTJjX2J1cyA9IE5VTEw7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewogCQlvZmZzZXQgPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0kyQ19JTkZPX1RBQkxFKTsKQEAgLTEyNTMsNyArMTMyNSwxMCBAQAogCQkJCXRtZHMtPmkyY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsICZpMmNfYnVzLCAiRFZPIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEREQ19MQ0Q6IC8qIE1NIGkyYyAqLwotCQkJCURSTV9FUlJPUigiTU0gaTJjIHJlcXVpcmVzIGh3IGkyYyBlbmdpbmVcbiIpOworCQkJCWkyY19idXMudmFsaWQgPSB0cnVlOworCQkJCWkyY19idXMuaHdfY2FwYWJsZSA9IHRydWU7CisJCQkJaTJjX2J1cy5tbV9pMmMgPSB0cnVlOworCQkJCXRtZHMtPmkyY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsICZpMmNfYnVzLCAiRFZPIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgZ3BpbyAlZFxuIiwgZ3Bpbyk7CkBAIC0xMjc5LDQ3ICsxMzU0LDQ3IEBACiAJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CiAJaWYgKHJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPT0gQ1RfTk9ORSkgewogI2lmZGVmIENPTkZJR19QUENfUE1BQwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgeworCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggVkdBICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX1ZHQTsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19JTlRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgc2luZ2xlIGxpbmsgdG1kcyAoc2lsMTY0KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNiIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDYiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBvciBzaW5nbGUgbGluayB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX0VYVEVSTkFMOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw3IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw4IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw5IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNyIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOCIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOSIpKSB7CiAJCQkvKiBQb3dlckJvb2s2LDIgPyAqLwogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBsaW5rIHRtZHMgKHNpbDExNzg/KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNyIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDciKSkgewogCQkJLyogaWJvb2sgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JQk9PSzsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKIAkJCS8qIGVtYWMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9FTUFDOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwxIikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMSIpKSB7CiAJCQkvKiBtaW5pIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01JTklfSU5URVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEwLDIiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwyIikpIHsKIAkJCS8qIG1pbmkgd2l0aCBleHRlcm5hbCB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUlOSV9FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEyLDEiKSkgewogCQkJLyogUG93ZXJNYWM4LDEgPyAqLwogCQkJLyogaW1hYyBnNSBpc2lnaHQgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JTUFDX0c1X0lTSUdIVDsKQEAgLTE5MDksOSArMTk4NCw2IEBACiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBkZGNfaTJjOwogCXN0cnVjdCByYWRlb25faHBkIGhwZDsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQogCWNvbm5faW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfQ09OTkVDVE9SX0lORk9fVEFCTEUpOwogCWlmIChjb25uX2luZm8pIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMjI3OCw2ICsyMzUwLDExNSBAQAogCXJldHVybiB0cnVlOwogfQogCit2b2lkIHJhZGVvbl9jb21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmRldi0+ZGRldjsKKwl1MTYgb2Zmc2V0LCBtaXNjLCBtaXNjMiA9IDA7CisJdTggcmV2LCBibG9ja3MsIHRtcDsKKwlpbnQgc3RhdGVfaW5kZXggPSAwOworCisJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9IE5VTEw7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKKwkJb2Zmc2V0ID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19QT1dFUlBMQVlfSU5GT19UQUJMRSk7CisJCWlmIChvZmZzZXQpIHsKKwkJCXJldiA9IFJCSU9TOChvZmZzZXQpOworCQkJYmxvY2tzID0gUkJJT1M4KG9mZnNldCArIDB4Mik7CisJCQkvKiBwb3dlciBtb2RlIDAgdGVuZHMgdG8gYmUgdGhlIG9ubHkgdmFsaWQgb25lICovCisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSBSQklPUzMyKG9mZnNldCArIDB4NSArIDB4Mik7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gUkJJT1MzMihvZmZzZXQgKyAweDUgKyAweDYpOworCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8CisJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPT0gMCkpCisJCQkJZ290byBkZWZhdWx0X21vZGU7CisJCQkvKiBza2lwIG92ZXJjbG9jayBtb2RlcyBmb3Igbm93ICovCisJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPgorCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X21jbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSB8fAorCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID4KKwkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikpCisJCQkJZ290byBkZWZhdWx0X21vZGU7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJbWlzYyA9IFJCSU9TMTYob2Zmc2V0ICsgMHg1ICsgMHgwKTsKKwkJCWlmIChyZXYgPiA0KQorCQkJCW1pc2MyID0gUkJJT1MxNihvZmZzZXQgKyAweDUgKyAweGUpOworCQkJaWYgKG1pc2MgJiAweDQpIHsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX0dQSU87CisJCQkJaWYgKG1pc2MgJiAweDgpCisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJdHJ1ZTsKKwkJCQllbHNlCisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJZmFsc2U7CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvLnZhbGlkID0gdHJ1ZTsKKwkJCQlpZiAocmV2IDwgNikgeworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8ucmVnID0KKwkJCQkJCVJCSU9TMTYob2Zmc2V0ICsgMHg1ICsgMHhiKSAqIDQ7CisJCQkJCXRtcCA9IFJCSU9TOChvZmZzZXQgKyAweDUgKyAweGQpOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8ubWFzayA9ICgxIDw8IHRtcCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdTggZW50cmllcyA9IFJCSU9TOChvZmZzZXQgKyAweDUgKyAweGIpOworCQkJCQl1MTYgdm9sdGFnZV90YWJsZV9vZmZzZXQgPSBSQklPUzE2KG9mZnNldCArIDB4NSArIDB4Yyk7CisJCQkJCWlmIChlbnRyaWVzICYmIHZvbHRhZ2VfdGFibGVfb2Zmc2V0KSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8ucmVnID0KKwkJCQkJCQlSQklPUzE2KHZvbHRhZ2VfdGFibGVfb2Zmc2V0KSAqIDQ7CisJCQkJCQl0bXAgPSBSQklPUzgodm9sdGFnZV90YWJsZV9vZmZzZXQgKyAweDIpOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvLm1hc2sgPSAoMSA8PCB0bXApOworCQkJCQl9IGVsc2UKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3Bpby52YWxpZCA9IGZhbHNlOworCQkJCX0KKwkJCQlzd2l0Y2ggKChtaXNjMiAmIDB4NzAwKSA+PiA4KSB7CisJCQkJY2FzZSAwOgorCQkJCWRlZmF1bHQ6CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZGVsYXkgPSAwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZGVsYXkgPSAzMzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmRlbGF5ID0gNjY7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5kZWxheSA9IDk5OworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZGVsYXkgPSAxMzI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwkJCWlmIChyZXYgPiA2KQorCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0KKwkJCQkJUkJJT1M4KG9mZnNldCArIDB4NSArIDB4MTApOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIFhYWCBmaWd1cmUgb3V0IHNvbWUgZ29vZCBkZWZhdWx0IGxvdyBwb3dlciBtb2RlIGZvciBtb2JpbGl0eSBjYXJkcyB3L291dCBwb3dlciB0YWJsZXMgKi8KKwkJfQorCX0gZWxzZSB7CisJCS8qIFhYWCBmaWd1cmUgb3V0IHNvbWUgZ29vZCBkZWZhdWx0IGxvdyBwb3dlciBtb2RlIGZvciBkZXNrdG9wIGNhcmRzICovCisJfQorCitkZWZhdWx0X21vZGU6CisJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7CisJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CisJaWYgKHJkZXYtPmFzaWMtPmdldF9wY2llX2xhbmVzKQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9IHJhZGVvbl9nZXRfcGNpZV9sYW5lcyhyZGV2KTsKKwllbHNlCisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0gMTY7CisJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF07CisJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IHN0YXRlX2luZGV4ICsgMTsKKworCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGUgPSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlOworCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZSA9CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUtPmRlZmF1bHRfY2xvY2tfbW9kZTsKK30KKwogdm9pZCByYWRlb25fZXh0ZXJuYWxfdG1kc19zZXR1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwpAQCAtMjI4OSwyMyArMjQ3MCwyMSBAQAogCXN3aXRjaCAodG1kcy0+ZHZvX2NoaXApIHsKIAljYXNlIERWT19TSUwxNjQ6CiAJCS8qIHNpbCAxNjQgKi8KLQkJcmFkZW9uX2kyY19kb19sb2NrKHRtZHMtPmkyY19idXMsIDEpOwotCQlyYWRlb25faTJjX3N3X3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCi0JCQkJICAgICAgIHRtZHMtPnNsYXZlX2FkZHIsCi0JCQkJICAgICAgIDB4MDgsIDB4MzApOwotCQlyYWRlb25faTJjX3N3X3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCisJCXJhZGVvbl9pMmNfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKKwkJCQkgICAgdG1kcy0+c2xhdmVfYWRkciwKKwkJCQkgICAgMHgwOCwgMHgzMCk7CisJCXJhZGVvbl9pMmNfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKIAkJCQkgICAgICAgdG1kcy0+c2xhdmVfYWRkciwKIAkJCQkgICAgICAgMHgwOSwgMHgwMCk7Ci0JCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKLQkJCQkgICAgICAgdG1kcy0+c2xhdmVfYWRkciwKLQkJCQkgICAgICAgMHgwYSwgMHg5MCk7Ci0JCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKLQkJCQkgICAgICAgdG1kcy0+c2xhdmVfYWRkciwKLQkJCQkgICAgICAgMHgwYywgMHg4OSk7Ci0JCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKKwkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQkJCSAgICB0bWRzLT5zbGF2ZV9hZGRyLAorCQkJCSAgICAweDBhLCAweDkwKTsKKwkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQkJCSAgICB0bWRzLT5zbGF2ZV9hZGRyLAorCQkJCSAgICAweDBjLCAweDg5KTsKKwkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAogCQkJCSAgICAgICB0bWRzLT5zbGF2ZV9hZGRyLAogCQkJCSAgICAgICAweDA4LCAweDNiKTsKLQkJcmFkZW9uX2kyY19kb19sb2NrKHRtZHMtPmkyY19idXMsIDApOwogCQlicmVhazsKIAljYXNlIERWT19TSUwxMTc4OgogCQkvKiBzaWwgMTE3OCAtIHVudGVzdGVkICovCkBAIC0yMzM4LDkgKzI1MTcsNiBAQAogCXVpbnQzMl90IHJlZywgdmFsLCBhbmRfbWFzaywgb3JfbWFzazsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfZXh0X3RtZHMgKnRtZHMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAlpZiAoIXRtZHMpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMjM5MCwxMSArMjU2Niw5IEBACiAJCQkJCQlpbmRleCsrOwogCQkJCQkJdmFsID0gUkJJT1M4KGluZGV4KTsKIAkJCQkJCWluZGV4Kys7Ci0JCQkJCQlyYWRlb25faTJjX2RvX2xvY2sodG1kcy0+aTJjX2J1cywgMSk7Ci0JCQkJCQlyYWRlb25faTJjX3N3X3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCi0JCQkJCQkJCSAgICAgICBzbGF2ZV9hZGRyLAotCQkJCQkJCQkgICAgICAgcmVnLCB2YWwpOwotCQkJCQkJcmFkZW9uX2kyY19kb19sb2NrKHRtZHMtPmkyY19idXMsIDApOworCQkJCQkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQkJCQkJCQkgICAgc2xhdmVfYWRkciwKKwkJCQkJCQkJICAgIHJlZywgdmFsKTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJRFJNX0VSUk9SKCJVbmtub3duIGlkICVkXG4iLCBpZCA+PiAxMyk7CkBAIC0yNDQ3LDExICsyNjIxLDkgQEAKIAkJCQkJcmVnID0gaWQgJiAweDFmZmY7CiAJCQkJCXZhbCA9IFJCSU9TOChpbmRleCk7CiAJCQkJCWluZGV4ICs9IDE7Ci0JCQkJCXJhZGVvbl9pMmNfZG9fbG9jayh0bWRzLT5pMmNfYnVzLCAxKTsKLQkJCQkJcmFkZW9uX2kyY19zd19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAotCQkJCQkJCSAgICAgICB0bWRzLT5zbGF2ZV9hZGRyLAotCQkJCQkJCSAgICAgICByZWcsIHZhbCk7Ci0JCQkJCXJhZGVvbl9pMmNfZG9fbG9jayh0bWRzLT5pMmNfYnVzLCAwKTsKKwkJCQkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQkJCQkJCSAgICB0bWRzLT5zbGF2ZV9hZGRyLAorCQkJCQkJCSAgICByZWcsIHZhbCk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCURSTV9FUlJPUigiVW5rbm93biBpZCAlZFxuIiwgaWQgPj4gMTMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IDY1ZjgxOTQuLmVlMDA4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTQ3OSwxMCArNDc5LDggQEAKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJZWxzZSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7Ci0JCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJCSAgICAgICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKLQkJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKQogCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9CkBAIC01ODcsMTkgKzU4NSwxNCBAQAogCWlmICghZW5jb2RlcikKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKLQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgewotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMCk7Ci0JfQogCWlmIChkcmV0KSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOwogCQl9Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMCk7CiAKIAkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlEUk1fRVJST1IoIiVzOiBwcm9iZWQgYSBtb25pdG9yIGJ1dCBub3xpbnZhbGlkIEVESURcbiIsCkBAIC03NDQsMTkgKzczNywxNCBAQAogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAJYm9vbCBkcmV0ID0gZmFsc2U7CiAKLQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgewotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMCk7Ci0JfQogCWlmIChkcmV0KSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOwogCQl9Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMCk7CiAKIAkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlEUk1fRVJST1IoIiVzOiBwcm9iZWQgYSBtb25pdG9yIGJ1dCBub3xpbnZhbGlkIEVESURcbiIsCkBAIC05NTIsNyArOTQwLDcgQEAKIAlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKIAkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJaWYgKHJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzKQotCQlyYWRlb25faTJjX2Rlc3Ryb3kocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpOworCQlyYWRlb25faTJjX2Rlc3Ryb3lfZHAocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpOwogCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwpAQCAtOTg4LDEyICs5NzYsMTAgQEAKIAkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9CiAJfSBlbHNlIHsKLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDEpOwogCQlpZiAocmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKSkgewogCQkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9IHNpbmtfdHlwZTsKIAkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggMDYxMjNiYS4uZGM2ZWJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC0xNjQ0LDYgKzE2NDQsNyBAQAogCXJhZGVvbl9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CiAJcmFkZW9uX2NwX2luaXRfcmluZ19idWZmZXIoZGV2LCBkZXZfcHJpdiwgZmlsZV9wcml2KTsKIAorCWRldl9wcml2LT5oYXZlX3pfb2Zmc2V0ID0gMDsKIAlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiAJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IGU5ZDA4NTAuLjcwYmEwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtMTk0LDExICsxOTQsOCBAQAogCX0KIAlyYWRlb25fYm9fbGlzdF91bnJlc2VydmUoJnBhcnNlci0+dmFsaWRhdGVkKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5ucmVsb2NzOyBpKyspIHsKLQkJaWYgKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopIHsKLQkJCW11dGV4X2xvY2soJnBhcnNlci0+cmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKLQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopOwotCQkJbXV0ZXhfdW5sb2NrKCZwYXJzZXItPnJkZXYtPmRkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCX0KKwkJaWYgKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopCisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChwYXJzZXItPnJlbG9jc1tpXS5nb2JqKTsKIAl9CiAJa2ZyZWUocGFyc2VyLT50cmFjayk7CiAJa2ZyZWUocGFyc2VyLT5yZWxvY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCAyODc3MmEzLi5iNzAyM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMzYsNyArMzYsMTQgQEAKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAJdWludDMyX3QgY3VyX2xvY2s7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJY3VyX2xvY2sgPSBSUkVHMzIoRVZFUkdSRUVOX0NVUl9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpOworCQlpZiAobG9jaykKKwkJCWN1cl9sb2NrIHw9IEVWRVJHUkVFTl9DVVJTT1JfVVBEQVRFX0xPQ0s7CisJCWVsc2UKKwkJCWN1cl9sb2NrICY9IH5FVkVSR1JFRU5fQ1VSU09SX1VQREFURV9MT0NLOworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGN1cl9sb2NrKTsKKwl9IGVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJY3VyX2xvY2sgPSBSUkVHMzIoQVZJVk9fRDFDVVJfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKIAkJaWYgKGxvY2spCiAJCQljdXJfbG9jayB8PSBBVklWT19EMUNVUlNPUl9VUERBVEVfTE9DSzsKQEAgLTU4LDcgKzY1LDEwIEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlXUkVHMzIoUkFERU9OX01NX0lOREVYLCBFVkVSR1JFRU5fQ1VSX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpOworCQlXUkVHMzIoUkFERU9OX01NX0RBVEEsIEVWRVJHUkVFTl9DVVJTT1JfTU9ERShFVkVSR1JFRU5fQ1VSU09SXzI0XzhfUFJFX01VTFQpKTsKKwl9IGVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJV1JFRzMyKFJBREVPTl9NTV9JTkRFWCwgQVZJVk9fRDFDVVJfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CiAJCVdSRUczMihSQURFT05fTU1fREFUQSwgKEFWSVZPX0QxQ1VSU09SX01PREVfMjRCUFAgPDwgQVZJVk9fRDFDVVJTT1JfTU9ERV9TSElGVCkpOwogCX0gZWxzZSB7CkBAIC04MSwxMCArOTEsMTQgQEAKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCVdSRUczMihSQURFT05fTU1fSU5ERVgsIEVWRVJHUkVFTl9DVVJfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJCVdSRUczMihSQURFT05fTU1fREFUQSwgRVZFUkdSRUVOX0NVUlNPUl9FTiB8CisJCSAgICAgICBFVkVSR1JFRU5fQ1VSU09SX01PREUoRVZFUkdSRUVOX0NVUlNPUl8yNF84X1BSRV9NVUxUKSk7CisJfSBlbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCVdSRUczMihSQURFT05fTU1fSU5ERVgsIEFWSVZPX0QxQ1VSX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpOwogCQlXUkVHMzIoUkFERU9OX01NX0RBVEEsIEFWSVZPX0QxQ1VSU09SX0VOIHwKLQkJCSAgICAgKEFWSVZPX0QxQ1VSU09SX01PREVfMjRCUFAgPDwgQVZJVk9fRDFDVVJTT1JfTU9ERV9TSElGVCkpOworCQkgICAgICAgKEFWSVZPX0QxQ1VSU09SX01PREVfMjRCUFAgPDwgQVZJVk9fRDFDVVJTT1JfTU9ERV9TSElGVCkpOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAocmFkZW9uX2NydGMtPmNydGNfaWQpIHsKIAkJY2FzZSAwOgpAQCAtMTA5LDcgKzEyMywxMCBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGdwdV9hZGRyKTsKKwl9IGVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKSB7CiAJCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQpCiAJCQkJV1JFRzMyKFI3MDBfRDJDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOwpAQCAtMTY5LDE3ICsxODYsMTMgQEAKIHVucGluOgogCWlmIChyYWRlb25fY3J0Yy0+Y3Vyc29yX2JvKSB7CiAJCXJhZGVvbl9nZW1fb2JqZWN0X3VucGluKHJhZGVvbl9jcnRjLT5jdXJzb3JfYm8pOwotCQltdXRleF9sb2NrKCZjcnRjLT5kZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHJhZGVvbl9jcnRjLT5jdXJzb3JfYm8pOwotCQltdXRleF91bmxvY2soJmNydGMtPmRldi0+c3RydWN0X211dGV4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQocmFkZW9uX2NydGMtPmN1cnNvcl9ibyk7CiAJfQogCiAJcmFkZW9uX2NydGMtPmN1cnNvcl9ibyA9IG9iajsKIAlyZXR1cm4gMDsKIGZhaWw6Ci0JbXV0ZXhfbG9jaygmY3J0Yy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZjcnRjLT5kZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAxLDcgKzIxNCwyMCBAQAogCQl5b3JpZ2luID0gQ1VSU09SX0hFSUdIVCAtIDE7CiAKIAlyYWRlb25fbG9ja19jdXJzb3IoY3J0YywgdHJ1ZSk7Ci0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCS8qIGN1cnNvcnMgYXJlIG9mZnNldCBpbnRvIHRoZSB0b3RhbCBzdXJmYWNlICovCisJCXggKz0gY3J0Yy0+eDsKKwkJeSArPSBjcnRjLT55OworCQlEUk1fREVCVUcoInggJWQgeSAlZCBjLT54ICVkIGMtPnkgJWRcbiIsIHgsIHksIGNydGMtPngsIGNydGMtPnkpOworCisJCS8qIFhYWDogY2hlY2sgaWYgZXZlcmdyZWVuIGhhcyB0aGUgc2FtZSBpc3N1ZXMgYXMgYXZpdm8gY2hpcHMgKi8KKwkJV1JFRzMyKEVWRVJHUkVFTl9DVVJfUE9TSVRJT04gKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCSAgICAgICAoKHhvcmlnaW4gPyAwIDogeCkgPDwgMTYpIHwKKwkJICAgICAgICh5b3JpZ2luID8gMCA6IHkpKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DVVJfSE9UX1NQT1QgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsICh4b3JpZ2luIDw8IDE2KSB8IHlvcmlnaW4pOworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkgICAgICAgKChyYWRlb25fY3J0Yy0+Y3Vyc29yX3dpZHRoIC0gMSkgPDwgMTYpIHwgKHJhZGVvbl9jcnRjLT5jdXJzb3JfaGVpZ2h0IC0gMSkpOworCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlpbnQgdyA9IHJhZGVvbl9jcnRjLT5jdXJzb3Jfd2lkdGg7CiAJCWludCBpID0gMDsKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjX3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDc2OGIxNTAuLmUyOGU0ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+CiAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+CisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicmFkZW9uX2FzaWMuaCIKQEAgLTEwMCw3OSArMTAxLDEwMiBAQAogCX0KIH0KIAotLyoKLSAqIE1DIGNvbW1vbiBmdW5jdGlvbnMKKy8qKgorICogcmFkZW9uX3ZyYW1fbG9jYXRpb24gLSB0cnkgdG8gZmluZCBWUkFNIGxvY2F0aW9uCisgKiBAcmRldjogcmFkZW9uIGRldmljZSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9ucworICogQG1jOiBtZW1vcnkgY29udHJvbGxlciBzdHJ1Y3R1cmUgaG9sZGluZyBtZW1vcnkgaW5mb3JtYXRpb25zCisgKiBAYmFzZTogYmFzZSBhZGRyZXNzIGF0IHdoaWNoIHRvIHB1dCBWUkFNCisgKgorICogRnVuY3Rpb24gd2lsbCBwbGFjZSB0cnkgdG8gcGxhY2UgVlJBTSBhdCBiYXNlIGFkZHJlc3MgcHJvdmlkZWQKKyAqIGFzIHBhcmFtZXRlciAod2hpY2ggaXMgc28gZmFyIGVpdGhlciBQQ0kgYXBlcnR1cmUgYWRkcmVzcyBvcgorICogZm9yIElHUCBUT00gYmFzZSBhZGRyZXNzKS4KKyAqCisgKiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIHRvIGZpdCB0aGUgdW52aXNpYmxlIFZSQU0gaW4gdGhlIDMyYml0cworICogYWRkcmVzcyBzcGFjZSB0aGVuIHdlIGxpbWl0IHRoZSBWUkFNIHNpemUgdG8gdGhlIGFwZXJ0dXJlLgorICoKKyAqIElmIHdlIGFyZSB1c2luZyBBR1AgYW5kIGlmIHRoZSBBR1AgYXBlcnR1cmUgZG9lc24ndCBhbGxvdyB1cyB0byBoYXZlCisgKiByb29tIGZvciBhbGwgdGhlIFZSQU0gdGhhbiB3ZSByZXN0cmljdCB0aGUgVlJBTSB0byB0aGUgUENJIGFwZXJ0dXJlCisgKiBzaXplIGFuZCBwcmludCBhIHdhcm5pbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIGZhaWxzLCB3b3JzdCBjYXNlIGFyZSBsaW1pdGluZyBWUkFNLgorICoKKyAqIE5vdGU6IEdUVCBzdGFydCwgZW5kLCBzaXplIHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbiBvbiBBR1AgcGxhdGZvcm0uCisgKgorICogTm90ZTogV2UgZG9uJ3QgZXhwbGljdGx5IGVuZm9yY2UgVlJBTSBzdGFydCB0byBiZSBhbGlnbmVkIG9uIFZSQU0gc2l6ZSwKKyAqIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBhcyB3ZSBhcmUgdXNpbmcgdGhlIFBDSSBhcGVydHVyZSBhcyBhIHJlZmVyZW5jZS4KKyAqIE90aGVyd2lzZSB0aGlzIHdvdWxkIGJlIG5lZWRlZCBmb3IgcnYyODAsIGFsbCByM3h4LCBhbmQgYWxsIHI0eHgsIGJ1dAorICogbm90IElHUC4KKyAqCisgKiBOb3RlOiB3ZSB1c2UgbWNfdnJhbV9zaXplIGFzIG9uIHNvbWUgYm9hcmQgd2UgbmVlZCB0byBwcm9ncmFtIHRoZSBtYyB0bworICogY292ZXIgdGhlIHdob2xlIGFwZXJ0dXJlIGV2ZW4gaWYgVlJBTSBzaXplIGlzIGluZmVyaW9yIHRvIGFwZXJ0dXJlIHNpemUKKyAqIE5vdmVsbCBidWcgMjA0ODgyICsgYWxvbmcgd2l0aCBsb3RzIG9mIHVidW50dSBvbmVzCisgKgorICogTm90ZTogd2hlbiBsaW1pdGluZyB2cmFtIGl0J3Mgc2FmZSB0byBvdmVyd3JpdHRlIHJlYWxfdnJhbV9zaXplIGJlY2F1c2UKKyAqIHdlIGFyZSBub3QgaW4gY2FzZSB3aGVyZSByZWFsX3ZyYW1fc2l6ZSBpcyBpbmZlcmlvciB0byBtY192cmFtX3NpemUgKGllCisgKiBub3RlIGFmZWN0ZWQgYnkgYm9ndXMgaHcgb2YgTm92ZWxsIGJ1ZyAyMDQ4ODIgKyBhbG9uZyB3aXRoIGxvdHMgb2YgdWJ1bnR1CisgKiBvbmVzKQorICoKKyAqIE5vdGU6IElHUCBUT00gYWRkciBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGFwZXJ0dXJlIGFkZHIsIHdlIGRvbid0CisgKiBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGF0IHRob3VnaHQuCisgKgorICogRklYTUU6IHdoZW4gcmVkdWNpbmcgVlJBTSBzaXplIGFsaWduIG5ldyBzaXplIG9uIHBvd2VyIG9mIDIuCiAgKi8KLWludCByYWRlb25fbWNfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJhZGVvbl92cmFtX2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYywgdTY0IGJhc2UpCiB7Ci0JdWludDMyX3QgdG1wOwotCi0JLyogU29tZSBjaGlwcyBoYXZlIGFuICJpc3N1ZSIgd2l0aCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIHRoZQotCSAqIGxvY2F0aW9uIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgc2l6ZS4gV2UganVzdCBhbGlnbiBpdCBkb3duLAotCSAqIHRvbyBiYWQgaWYgd2Ugd2FsayBvdmVyIHRoZSB0b3Agb2Ygc3lzdGVtIG1lbW9yeSwgd2UgZG9uJ3QKLQkgKiB1c2UgRE1BIHdpdGhvdXQgYSByZW1hcHBlZCBhbnl3YXkuCi0JICogQWZmZWN0ZWQgY2hpcHMgYXJlIHJ2MjgwLCBhbGwgcjN4eCwgYW5kIGFsbCByNHh4LCBidXQgbm90IElHUAotCSAqLwotCS8qIEZHTFJYIHNlZW1zIHRvIHNldHVwIGxpa2UgdGhpcywgVlJBTSBhIDAsIHRoZW4gR0FSVC4KLQkgKi8KLQkvKgotCSAqIE5vdGU6IGZyb20gUjZ4eCB0aGUgYWRkcmVzcyBzcGFjZSBpcyA0MGJpdHMgYnV0IGhlcmUgd2Ugb25seQotCSAqIHVzZSAzMmJpdHMgKHN0aWxsIGhhdmUgdG8gc2VlIGEgY2FyZCB3aGljaCB3b3VsZCBleGhhdXN0IDRHCi0JICogYWRkcmVzcyBzcGFjZSkuCi0JICovCi0JaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gIT0gMHhGRkZGRkZGRlVMKSB7Ci0JCS8qIHZyYW0gbG9jYXRpb24gd2FzIGFscmVhZHkgc2V0dXAgdHJ5IHRvIHB1dCBndHQgYWZ0ZXIKLQkJICogaWYgaXQgZml0cyAqLwotCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQl0bXAgPSAodG1wICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxKSAmIH4ocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocmRldi0+bWMuZ3R0X3NpemUgPj0gcmRldi0+bWMudnJhbV9sb2NhdGlvbikgewotCQkJCXByaW50ayhLRVJOX0VSUiAiW2RybV0gR1RUIHRvbyBiaWcgdG8gZml0ICIKLQkJCQkgICAgICAgImJlZm9yZSBvciBhZnRlciB2cmFtIGxvY2F0aW9uLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQl9Ci0JfSBlbHNlIGlmIChyZGV2LT5tYy5ndHRfbG9jYXRpb24gIT0gMHhGRkZGRkZGRlVMKSB7Ci0JCS8qIGd0dCBsb2NhdGlvbiB3YXMgYWxyZWFkeSBzZXR1cCB0cnkgdG8gcHV0IHZyYW0gYmVmb3JlCi0JCSAqIGlmIGl0IGZpdHMgKi8KLQkJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA8IHJkZXYtPm1jLmd0dF9sb2NhdGlvbikgewotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKLQkJCXRtcCArPSAocmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSk7Ci0JCQl0bXAgJj0gfihyZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKTsKLQkJCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKLQkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gdG1wOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIltkcm1dIHZyYW0gdG9vIGJpZyB0byBmaXQgIgotCQkJCSAgICAgICAiYmVmb3JlIG9yIGFmdGVyIEdUVCBsb2NhdGlvbi5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDA7Ci0JCXRtcCA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJdG1wID0gKHRtcCArIHJkZXYtPm1jLmd0dF9zaXplIC0gMSkgJiB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwltYy0+dnJhbV9zdGFydCA9IGJhc2U7CisJaWYgKG1jLT5tY192cmFtX3NpemUgPiAoMHhGRkZGRkZGRiAtIGJhc2UgKyAxKSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBWUkFNIHRvIFBDSSBhcGVydHVyZSBzaXplXG4iKTsKKwkJbWMtPnJlYWxfdnJhbV9zaXplID0gbWMtPmFwZXJfc2l6ZTsKKwkJbWMtPm1jX3ZyYW1fc2l6ZSA9IG1jLT5hcGVyX3NpemU7CiAJfQotCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JRFJNX0lORk8oInJhZGVvbjogVlJBTSAldU1cbiIsICh1bnNpZ25lZCkocmRldi0+bWMubWNfdnJhbV9zaXplID4+IDIwKSk7Ci0JRFJNX0lORk8oInJhZGVvbjogVlJBTSBmcm9tIDB4JTA4WCB0byAweCUwOFhcbiIsCi0JCSAodW5zaWduZWQpcmRldi0+bWMudnJhbV9sb2NhdGlvbiwKLQkJICh1bnNpZ25lZCkocmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpKTsKLQlEUk1fSU5GTygicmFkZW9uOiBHVFQgJXVNXG4iLCAodW5zaWduZWQpKHJkZXYtPm1jLmd0dF9zaXplID4+IDIwKSk7Ci0JRFJNX0lORk8oInJhZGVvbjogR1RUIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKLQkJICh1bnNpZ25lZClyZGV2LT5tYy5ndHRfbG9jYXRpb24sCi0JCSAodW5zaWduZWQpKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMSkpOwotCXJldHVybiAwOworCW1jLT52cmFtX2VuZCA9IG1jLT52cmFtX3N0YXJ0ICsgbWMtPm1jX3ZyYW1fc2l6ZSAtIDE7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCAmJiBtYy0+dnJhbV9lbmQgPiBtYy0+Z3R0X3N0YXJ0ICYmIG1jLT52cmFtX2VuZCA8PSBtYy0+Z3R0X2VuZCkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBWUkFNIHRvIFBDSSBhcGVydHVyZSBzaXplXG4iKTsKKwkJbWMtPnJlYWxfdnJhbV9zaXplID0gbWMtPmFwZXJfc2l6ZTsKKwkJbWMtPm1jX3ZyYW1fc2l6ZSA9IG1jLT5hcGVyX3NpemU7CisJfQorCW1jLT52cmFtX2VuZCA9IG1jLT52cmFtX3N0YXJ0ICsgbWMtPm1jX3ZyYW1fc2l6ZSAtIDE7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiVlJBTTogJWxsdU0gMHglMDhsbFggLSAweCUwOGxsWCAoJWxsdU0gdXNlZClcbiIsCisJCQltYy0+bWNfdnJhbV9zaXplID4+IDIwLCBtYy0+dnJhbV9zdGFydCwKKwkJCW1jLT52cmFtX2VuZCwgbWMtPnJlYWxfdnJhbV9zaXplID4+IDIwKTsKIH0KIAorLyoqCisgKiByYWRlb25fZ3R0X2xvY2F0aW9uIC0gdHJ5IHRvIGZpbmQgR1RUIGxvY2F0aW9uCisgKiBAcmRldjogcmFkZW9uIGRldmljZSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9ucworICogQG1jOiBtZW1vcnkgY29udHJvbGxlciBzdHJ1Y3R1cmUgaG9sZGluZyBtZW1vcnkgaW5mb3JtYXRpb25zCisgKgorICogRnVuY3Rpb24gd2lsbCBwbGFjZSB0cnkgdG8gcGxhY2UgR1RUIGJlZm9yZSBvciBhZnRlciBWUkFNLgorICoKKyAqIElmIEdUVCBzaXplIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGxlZnQgdGhlbiB3ZSBhanVzdCBHVFQgc2l6ZS4KKyAqIFRodXMgZnVuY3Rpb24gd2lsbCBuZXZlciBmYWlscy4KKyAqCisgKiBGSVhNRTogd2hlbiByZWR1Y2luZyBHVFQgc2l6ZSBhbGlnbiBuZXcgc2l6ZSBvbiBwb3dlciBvZiAyLgorICovCit2b2lkIHJhZGVvbl9ndHRfbG9jYXRpb24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fbWMgKm1jKQoreworCXU2NCBzaXplX2FmLCBzaXplX2JmOworCisJc2l6ZV9hZiA9IDB4RkZGRkZGRkYgLSBtYy0+dnJhbV9lbmQ7CisJc2l6ZV9iZiA9IG1jLT52cmFtX3N0YXJ0OworCWlmIChzaXplX2JmID4gc2l6ZV9hZikgeworCQlpZiAobWMtPmd0dF9zaXplID4gc2l6ZV9iZikgeworCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAibGltaXRpbmcgR1RUXG4iKTsKKwkJCW1jLT5ndHRfc2l6ZSA9IHNpemVfYmY7CisJCX0KKwkJbWMtPmd0dF9zdGFydCA9IG1jLT52cmFtX3N0YXJ0IC0gbWMtPmd0dF9zaXplOworCX0gZWxzZSB7CisJCWlmIChtYy0+Z3R0X3NpemUgPiBzaXplX2FmKSB7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBHVFRcbiIpOworCQkJbWMtPmd0dF9zaXplID0gc2l6ZV9hZjsKKwkJfQorCQltYy0+Z3R0X3N0YXJ0ID0gbWMtPnZyYW1fZW5kICsgMTsKKwl9CisJbWMtPmd0dF9lbmQgPSBtYy0+Z3R0X3N0YXJ0ICsgbWMtPmd0dF9zaXplIC0gMTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICJHVFQ6ICVsbHVNIDB4JTA4bGxYIC0gMHglMDhsbFhcbiIsCisJCQltYy0+Z3R0X3NpemUgPj4gMjAsIG1jLT5ndHRfc3RhcnQsIG1jLT5ndHRfZW5kKTsKK30KIAogLyoKICAqIEdQVSBoZWxwZXJzIGZ1bmN0aW9uLgpAQCAtMTgyLDcgKzIwNiwxNiBAQAogCXVpbnQzMl90IHJlZzsKIAogCS8qIGZpcnN0IGNoZWNrIENSVENzICovCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOworCQlpZiAocmVnICYgRVZFUkdSRUVOX0NSVENfTUFTVEVSX0VOKQorCQkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCXJlZyA9IFJSRUczMihBVklWT19EMUNSVENfQ09OVFJPTCkgfAogCQkgICAgICBSUkVHMzIoQVZJVk9fRDJDUlRDX0NPTlRST0wpOwogCQlpZiAocmVnICYgQVZJVk9fQ1JUQ19FTikgewpAQCAtMjI5LDYgKzI2Miw4IEBACiAKIGludCByYWRlb25fZHVtbXlfcGFnZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWlmIChyZGV2LT5kdW1teV9wYWdlLnBhZ2UpCisJCXJldHVybiAwOwogCXJkZXYtPmR1bW15X3BhZ2UucGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0RNQTMyIHwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmIChyZGV2LT5kdW1teV9wYWdlLnBhZ2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMTAsNyArMzQ1LDcgQEAKIAkJcmRldi0+bWNfcnJlZyA9ICZyczYwMF9tY19ycmVnOwogCQlyZGV2LT5tY193cmVnID0gJnJzNjAwX21jX3dyZWc7CiAJfQotCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJaWYgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSAmJiAocmRldi0+ZmFtaWx5IDw9IENISVBfUlY3NDApKSB7CiAJCXJkZXYtPnBjaWVwX3JyZWcgPSAmcjYwMF9wY2llcF9ycmVnOwogCQlyZGV2LT5wY2llcF93cmVnID0gJnI2MDBfcGNpZXBfd3JlZzsKIAl9CkBAIC0zMjksMjEgKzM2NCwyMiBAQAogCWNhc2UgQ0hJUF9SUzEwMDoKIAljYXNlIENISVBfUlYyMDA6CiAJY2FzZSBDSElQX1JTMjAwOgorCQlyZGV2LT5hc2ljID0gJnIxMDBfYXNpYzsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX1IyMDA6CiAJY2FzZSBDSElQX1JWMjUwOgogCWNhc2UgQ0hJUF9SUzMwMDoKIAljYXNlIENISVBfUlYyODA6Ci0JCXJkZXYtPmFzaWMgPSAmcjEwMF9hc2ljOworCQlyZGV2LT5hc2ljID0gJnIyMDBfYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1IzMDA6CiAJY2FzZSBDSElQX1IzNTA6CiAJY2FzZSBDSElQX1JWMzUwOgogCWNhc2UgQ0hJUF9SVjM4MDoKLQkJcmRldi0+YXNpYyA9ICZyMzAwX2FzaWM7Ci0JCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOwotCQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7Ci0JCX0KKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCQlyZGV2LT5hc2ljID0gJnIzMDBfYXNpY19wY2llOworCQllbHNlCisJCQlyZGV2LT5hc2ljID0gJnIzMDBfYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1I0MjA6CiAJY2FzZSBDSElQX1I0MjM6CkBAIC0zODcsNiArNDIzLDEzIEBACiAJY2FzZSBDSElQX1JWNzQwOgogCQlyZGV2LT5hc2ljID0gJnJ2NzcwX2FzaWM7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9DRURBUjoKKwljYXNlIENISVBfUkVEV09PRDoKKwljYXNlIENISVBfSlVOSVBFUjoKKwljYXNlIENISVBfQ1lQUkVTUzoKKwljYXNlIENISVBfSEVNTE9DSzoKKwkJcmRldi0+YXNpYyA9ICZldmVyZ3JlZW5fYXNpYzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogRklYTUU6IG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjEzLDYgKzY1NiwzNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX3N3aXRjaGVyb29fc2V0X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQgfTsKKwlpZiAoc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uOiBzd2l0Y2hlZCBvblxuIik7CisJCS8qIGRvbid0IHN1c3BlbmQgb3IgcmVzdW1lIGNhcmQgbm9ybWFsbHkgKi8KKwkJcmRldi0+cG93ZXJlZF9kb3duID0gZmFsc2U7CisJCXJhZGVvbl9yZXN1bWVfa21zKGRldik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uOiBzd2l0Y2hlZCBvZmZcbiIpOworCQlyYWRlb25fc3VzcGVuZF9rbXMoZGV2LCBwbW0pOworCQkvKiBkb24ndCBzdXNwZW5kIG9yIHJlc3VtZSBjYXJkIG5vcm1hbGx5ICovCisJCXJkZXYtPnBvd2VyZWRfZG93biA9IHRydWU7CisJfQorfQorCitzdGF0aWMgYm9vbCByYWRlb25fc3dpdGNoZXJvb19jYW5fc3dpdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJYm9vbCBjYW5fc3dpdGNoOworCisJc3Bpbl9sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCWNhbl9zd2l0Y2ggPSAoZGV2LT5vcGVuX2NvdW50ID09IDApOworCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCXJldHVybiBjYW5fc3dpdGNoOworfQorCisKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKIAkJICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtNjM4LDExICs3MTEsMTQgQEAKIAltdXRleF9pbml0KCZyZGV2LT5jc19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcmRldi0+Y3AubXV0ZXgpOworCW11dGV4X2luaXQoJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCXNwaW5fbG9ja19pbml0KCZyZGV2LT5paC5sb2NrKTsKIAltdXRleF9pbml0KCZyZGV2LT5nZW0ubXV0ZXgpOworCW11dGV4X2luaXQoJnJkZXYtPnBtLm11dGV4KTsKIAlyd2xvY2tfaW5pdCgmcmRldi0+ZmVuY2VfZHJ2LmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5nZW0ub2JqZWN0cyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAKIAkvKiBzZXR1cCB3b3JrcXVldWUgKi8KIAlyZGV2LT53cSA9IGNyZWF0ZV93b3JrcXVldWUoInJhZGVvbiIpOwpAQCAtNjkyLDYgKzc2OCw5IEBACiAJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CiAJICogaWdub3JlIGl0ICovCiAJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOworCXZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChyZGV2LT5wZGV2LAorCQkJCSAgICAgICByYWRlb25fc3dpdGNoZXJvb19zZXRfc3RhdGUsCisJCQkJICAgICAgIHJhZGVvbl9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2gpOwogCiAJciA9IHJhZGVvbl9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtNzIzLDYgKzgwMiw3IEBACiAJcmRldi0+c2h1dGRvd24gPSB0cnVlOwogCXJhZGVvbl9maW5pKHJkZXYpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJkZXYtPndxKTsKKwl2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChyZGV2LT5wZGV2KTsKIAl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWlvdW5tYXAocmRldi0+cm1taW8pOwogCXJkZXYtPnJtbWlvID0gTlVMTDsKQEAgLTc0Niw2ICs4MjYsOCBAQAogCX0KIAlyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmIChyZGV2LT5wb3dlcmVkX2Rvd24pCisJCXJldHVybiAwOwogCS8qIHVucGluIHRoZSBmcm9udCBidWZmZXJzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciAqcmZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKQEAgLTc5MSw2ICs4NzMsOSBAQAogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmIChyZGV2LT5wb3dlcmVkX2Rvd24pCisJCXJldHVybiAwOworCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldi0+cGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggN2UxN2EzNi4uYmE4ZDgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtNjgsNiArNjgsMzYgQEAKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX0xVVF9TRUwgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIH0KIAorc3RhdGljIHZvaWQgZXZlcmdyZWVuX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCURSTV9ERUJVRygiJWRcbiIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9CTFVFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9CTEFDS19PRkZTRVRfR1JFRU4gKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9SRUQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX0JMVUUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4ZmZmZik7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX0dSRUVOICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAweGZmZmYpOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX1dISVRFX09GRlNFVF9SRUQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4ZmZmZik7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9SV19NT0RFLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfV1JJVEVfRU5fTUFTSywgMHgwMDAwMDAwNyk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9SV19JTkRFWCwgMCk7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCVdSRUczMihFVkVSR1JFRU5fRENfTFVUXzMwX0NPTE9SLAorCQkgICAgICAgKHJhZGVvbl9jcnRjLT5sdXRfcltpXSA8PCAyMCkgfAorCQkgICAgICAgKHJhZGVvbl9jcnRjLT5sdXRfZ1tpXSA8PCAxMCkgfAorCQkgICAgICAgKHJhZGVvbl9jcnRjLT5sdXRfYltpXSA8PCAwKSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBsZWdhY3lfY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwpAQCAtMTAwLDcgKzEzMCw5IEBACiAJaWYgKCFjcnRjLT5lbmFibGVkKQogCQlyZXR1cm47CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlldmVyZ3JlZW5fY3J0Y19sb2FkX2x1dChjcnRjKTsKKwllbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQogCQlhdml2b19jcnRjX2xvYWRfbHV0KGNydGMpOwogCWVsc2UKIAkJbGVnYWN5X2NydGNfbG9hZF9sdXQoY3J0Yyk7CkBAIC0zNjEsNiArMzkzLDggQEAKIAogaW50IHJhZGVvbl9kZGNfZ2V0X21vZGVzKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fY29ubmVjdG9yLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fApAQCAtMzczLDExICs0MDcsMTEgQEAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJldHVybiAtMTsKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAl9Ci0KKwkvKiBzb21lIHNlcnZlcnMgcHJvdmlkZSBhIGhhcmRjb2RlZCBlZGlkIGluIHJvbSBmb3IgS1ZNcyAqLworCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IHJhZGVvbl9jb21iaW9zX2dldF9oYXJkY29kZWRfZWRpZChyZGV2KTsKIAlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewogCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtMzk1LDkgKzQyOSw3IEBACiAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJldHVybiAtMTsKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CiAJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMCk7CiAJaWYgKGVkaWQpIHsKIAkJa2ZyZWUoZWRpZCk7CiAJfQpAQCAtNDE0LDEzICs0NDYsMTMgQEAKIAlyZXR1cm4gbjsKIH0KIAotdm9pZCByYWRlb25fY29tcHV0ZV9wbGwoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKLQkJCXVpbnQ2NF90IGZyZXEsCi0JCQl1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQl1aW50MzJfdCAqZmJfZGl2X3AsCi0JCQl1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQl1aW50MzJfdCAqcG9zdF9kaXZfcCkKK3N0YXRpYyB2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3koc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCQkgICAgICB1aW50NjRfdCBmcmVxLAorCQkJCSAgICAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZmJfZGl2X3AsCisJCQkJICAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCisJCQkJICAgICAgdWludDMyX3QgKnJlZl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcG9zdF9kaXZfcCkKIHsKIAl1aW50MzJfdCBtaW5fcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CiAJdWludDMyX3QgbWF4X3JlZl9kaXYgPSBwbGwtPm1heF9yZWZfZGl2OwpAQCAtNTgwLDk1ICs2MTIsMTk0IEBACiAJKnBvc3RfZGl2X3AgPSBiZXN0X3Bvc3RfZGl2OwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJICAgICAgdWludDY0X3QgZnJlcSwKLQkJCSAgICAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCSAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJICAgICAgdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKQorc3RhdGljIGJvb2wKK2NhbGNfZmJfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJICAgIHVpbnQzMl90IGZyZXEsCisgICAgICAgICAgICB1aW50MzJfdCBwb3N0X2RpdiwKKyAgICAgICAgICAgIHVpbnQzMl90IHJlZl9kaXYsCisgICAgICAgICAgICB1aW50MzJfdCAqZmJfZGl2LAorICAgICAgICAgICAgdWludDMyX3QgKmZiX2Rpdl9mcmFjKQogewotCWZpeGVkMjBfMTIgbSwgbiwgZnJhY19uLCBwLCBmX3ZjbywgZl9wY2xrLCBiZXN0X2ZyZXE7Ci0JZml4ZWQyMF8xMiBwbGxfb3V0X21heCwgcGxsX291dF9taW47Ci0JZml4ZWQyMF8xMiBwbGxfaW5fbWF4LCBwbGxfaW5fbWluOwotCWZpeGVkMjBfMTIgcmVmZXJlbmNlX2ZyZXE7Ci0JZml4ZWQyMF8xMiBlcnJvciwgZmZyZXEsIGEsIGI7CisJZml4ZWQyMF8xMiBmZWVkYmFja19kaXZpZGVyLCBhLCBiOworCXUzMiB2Y29fZnJlcTsKIAotCXBsbF9vdXRfbWF4LmZ1bGwgPSByZml4ZWRfY29uc3QocGxsLT5wbGxfb3V0X21heCk7Ci0JcGxsX291dF9taW4uZnVsbCA9IHJmaXhlZF9jb25zdChwbGwtPnBsbF9vdXRfbWluKTsKLQlwbGxfaW5fbWF4LmZ1bGwgPSByZml4ZWRfY29uc3QocGxsLT5wbGxfaW5fbWF4KTsKLQlwbGxfaW5fbWluLmZ1bGwgPSByZml4ZWRfY29uc3QocGxsLT5wbGxfaW5fbWluKTsKLQlyZWZlcmVuY2VfZnJlcS5mdWxsID0gcmZpeGVkX2NvbnN0KHBsbC0+cmVmZXJlbmNlX2ZyZXEpOwotCWRvX2RpdihmcmVxLCAxMCk7CisJdmNvX2ZyZXEgPSBmcmVxICogcG9zdF9kaXY7CisJLyogZmVlZGJhY2tfZGl2aWRlciA9IHZjb19mcmVxICogcmVmX2RpdiAvIHBsbC0+cmVmZXJlbmNlX2ZyZXE7ICovCisJYS5mdWxsID0gcmZpeGVkX2NvbnN0KHBsbC0+cmVmZXJlbmNlX2ZyZXEpOworCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9jb25zdCh2Y29fZnJlcSk7CisJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX2RpdihmZWVkYmFja19kaXZpZGVyLCBhKTsKKwlhLmZ1bGwgPSByZml4ZWRfY29uc3QocmVmX2Rpdik7CisJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX211bChmZWVkYmFja19kaXZpZGVyLCBhKTsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfRlJBQ19GQl9ESVYpIHsKKwkJLyogZmVlZGJhY2tfZGl2aWRlciA9IGZsb29yKChmZWVkYmFja19kaXZpZGVyICogMTAuMCkgKyAwLjUpICogMC4xOyAqLworCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTApOworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfbXVsKGZlZWRiYWNrX2RpdmlkZXIsIGEpOworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgKz0gcmZpeGVkX2NvbnN0X2hhbGYoMCk7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9mbG9vcihmZWVkYmFja19kaXZpZGVyKTsKKwkJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX2RpdihmZWVkYmFja19kaXZpZGVyLCBhKTsKKworCQkvKiAqZmJfZGl2ID0gZmxvb3IoZmVlZGJhY2tfZGl2aWRlcik7ICovCisJCWEuZnVsbCA9IHJmaXhlZF9mbG9vcihmZWVkYmFja19kaXZpZGVyKTsKKwkJKmZiX2RpdiA9IHJmaXhlZF90cnVuYyhhKTsKKwkJLyogKmZiX2Rpdl9mcmFjID0gZm1vZChmZWVkYmFja19kaXZpZGVyLCAxLjApICogMTAuMDsgKi8KKwkJYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwKTsKKwkJYi5mdWxsID0gcmZpeGVkX211bChmZWVkYmFja19kaXZpZGVyLCBhKTsKKworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfZmxvb3IoZmVlZGJhY2tfZGl2aWRlcik7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9tdWwoZmVlZGJhY2tfZGl2aWRlciwgYSk7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IGIuZnVsbCAtIGZlZWRiYWNrX2RpdmlkZXIuZnVsbDsKKwkJKmZiX2Rpdl9mcmFjID0gcmZpeGVkX3RydW5jKGZlZWRiYWNrX2RpdmlkZXIpOworCX0gZWxzZSB7CisJCS8qICpmYl9kaXYgPSBmbG9vcihmZWVkYmFja19kaXZpZGVyICsgMC41KTsgKi8KKwkJZmVlZGJhY2tfZGl2aWRlci5mdWxsICs9IHJmaXhlZF9jb25zdF9oYWxmKDApOworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfZmxvb3IoZmVlZGJhY2tfZGl2aWRlcik7CisKKwkJKmZiX2RpdiA9IHJmaXhlZF90cnVuYyhmZWVkYmFja19kaXZpZGVyKTsKKwkJKmZiX2Rpdl9mcmFjID0gMDsKKwl9CisKKwlpZiAoKCgqZmJfZGl2KSA8IHBsbC0+bWluX2ZlZWRiYWNrX2RpdikgfHwgKCgqZmJfZGl2KSA+IHBsbC0+bWF4X2ZlZWRiYWNrX2RpdikpCisJCXJldHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorY2FsY19mYl9yZWZfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCXVpbnQzMl90IGZyZXEsCisJCXVpbnQzMl90IHBvc3RfZGl2LAorCQl1aW50MzJfdCAqZmJfZGl2LAorICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmYl9kaXZfZnJhYywKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVmX2RpdikKK3sKKwlmaXhlZDIwXzEyIGZmcmVxLCBtYXhfZXJyb3IsIGVycm9yLCBwbGxfb3V0LCBhOworCXUzMiB2Y287CisKIAlmZnJlcS5mdWxsID0gcmZpeGVkX2NvbnN0KGZyZXEpOwotCWVycm9yLmZ1bGwgPSByZml4ZWRfY29uc3QoMTAwICogMTAwKTsKKwkvKiBtYXhfZXJyb3IgPSBmZnJlcSAqIDAuMDAyNTsgKi8KKwlhLmZ1bGwgPSByZml4ZWRfY29uc3QoNDAwKTsKKwltYXhfZXJyb3IuZnVsbCA9IHJmaXhlZF9kaXYoZmZyZXEsIGEpOwogCi0JLyogbWF4IHAgKi8KLQlwLmZ1bGwgPSByZml4ZWRfZGl2KHBsbF9vdXRfbWF4LCBmZnJlcSk7Ci0JcC5mdWxsID0gcmZpeGVkX2Zsb29yKHApOworCWZvciAoKCpyZWZfZGl2KSA9IHBsbC0+bWluX3JlZl9kaXY7ICgqcmVmX2RpdikgPCBwbGwtPm1heF9yZWZfZGl2OyArKygqcmVmX2RpdikpIHsKKwkJaWYgKGNhbGNfZmJfZGl2KHBsbCwgZnJlcSwgcG9zdF9kaXYsICgqcmVmX2RpdiksIGZiX2RpdiwgZmJfZGl2X2ZyYWMpKSB7CisJCQl2Y28gPSBwbGwtPnJlZmVyZW5jZV9mcmVxICogKCgoKmZiX2RpdikgKiAxMCkgKyAoKmZiX2Rpdl9mcmFjKSk7CisJCQl2Y28gPSB2Y28gLyAoKCpyZWZfZGl2KSAqIDEwKTsKIAotCS8qIG1pbiBtICovCi0JbS5mdWxsID0gcmZpeGVkX2RpdihyZWZlcmVuY2VfZnJlcSwgcGxsX2luX21heCk7Ci0JbS5mdWxsID0gcmZpeGVkX2NlaWwobSk7CisJCQlpZiAoKHZjbyA8IHBsbC0+cGxsX291dF9taW4pIHx8ICh2Y28gPiBwbGwtPnBsbF9vdXRfbWF4KSkKKwkJCQljb250aW51ZTsKIAotCXdoaWxlICgxKSB7Ci0JCW4uZnVsbCA9IHJmaXhlZF9kaXYoZmZyZXEsIHJlZmVyZW5jZV9mcmVxKTsKLQkJbi5mdWxsID0gcmZpeGVkX211bChuLCBtKTsKLQkJbi5mdWxsID0gcmZpeGVkX211bChuLCBwKTsKKwkJCS8qIHBsbF9vdXQgPSB2Y28gLyBwb3N0X2RpdjsgKi8KKwkJCWEuZnVsbCA9IHJmaXhlZF9jb25zdChwb3N0X2Rpdik7CisJCQlwbGxfb3V0LmZ1bGwgPSByZml4ZWRfY29uc3QodmNvKTsKKwkJCXBsbF9vdXQuZnVsbCA9IHJmaXhlZF9kaXYocGxsX291dCwgYSk7CiAKLQkJZl92Y28uZnVsbCA9IHJmaXhlZF9kaXYobiwgbSk7Ci0JCWZfdmNvLmZ1bGwgPSByZml4ZWRfbXVsKGZfdmNvLCByZWZlcmVuY2VfZnJlcSk7CisJCQlpZiAocGxsX291dC5mdWxsID49IGZmcmVxLmZ1bGwpIHsKKwkJCQllcnJvci5mdWxsID0gcGxsX291dC5mdWxsIC0gZmZyZXEuZnVsbDsKKwkJCQlpZiAoZXJyb3IuZnVsbCA8PSBtYXhfZXJyb3IuZnVsbCkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQogCi0JCWZfcGNsay5mdWxsID0gcmZpeGVkX2RpdihmX3ZjbywgcCk7CitzdGF0aWMgdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbmV3KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgdWludDY0X3QgZnJlcSwKKwkJCQkgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkJICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJCSAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkJICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCit7CisJdTMyIGZiX2RpdiA9IDAsIGZiX2Rpdl9mcmFjID0gMCwgcG9zdF9kaXYgPSAwLCByZWZfZGl2ID0gMDsKKwl1MzIgYmVzdF9mcmVxID0gMCwgdmNvX2ZyZXF1ZW5jeTsKIAotCQlpZiAoZl9wY2xrLmZ1bGwgPiBmZnJlcS5mdWxsKQotCQkJZXJyb3IuZnVsbCA9IGZfcGNsay5mdWxsIC0gZmZyZXEuZnVsbDsKLQkJZWxzZQotCQkJZXJyb3IuZnVsbCA9IGZmcmVxLmZ1bGwgLSBmX3BjbGsuZnVsbDsKLQkJZXJyb3IuZnVsbCA9IHJmaXhlZF9kaXYoZXJyb3IsIGZfcGNsayk7Ci0JCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxMDAgKiAxMDApOwotCQllcnJvci5mdWxsID0gcmZpeGVkX211bChlcnJvciwgYSk7CisJLyogZnJlcSA9IGZyZXEgLyAxMDsgKi8KKwlkb19kaXYoZnJlcSwgMTApOwogCi0JCWEuZnVsbCA9IHJmaXhlZF9tdWwobSwgcCk7Ci0JCWEuZnVsbCA9IHJmaXhlZF9kaXYobiwgYSk7Ci0JCWJlc3RfZnJlcS5mdWxsID0gcmZpeGVkX211bChyZWZlcmVuY2VfZnJlcSwgYSk7CisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9QT1NUX0RJVikgeworCQlwb3N0X2RpdiA9IHBsbC0+cG9zdF9kaXY7CisJCWlmICgocG9zdF9kaXYgPCBwbGwtPm1pbl9wb3N0X2RpdikgfHwgKHBvc3RfZGl2ID4gcGxsLT5tYXhfcG9zdF9kaXYpKQorCQkJZ290byBkb25lOwogCi0JCWlmIChyZml4ZWRfdHJ1bmMoZXJyb3IpIDwgMjUpCi0JCQlicmVhazsKKwkJdmNvX2ZyZXF1ZW5jeSA9IGZyZXEgKiBwb3N0X2RpdjsKKwkJaWYgKCh2Y29fZnJlcXVlbmN5IDwgcGxsLT5wbGxfb3V0X21pbikgfHwgKHZjb19mcmVxdWVuY3kgPiBwbGwtPnBsbF9vdXRfbWF4KSkKKwkJCWdvdG8gZG9uZTsKIAotCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMSk7Ci0JCW0uZnVsbCA9IG0uZnVsbCArIGEuZnVsbDsKLQkJYS5mdWxsID0gcmZpeGVkX2RpdihyZWZlcmVuY2VfZnJlcSwgbSk7Ci0JCWlmIChhLmZ1bGwgPj0gcGxsX2luX21pbi5mdWxsKQotCQkJY29udGludWU7CisJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUkVGX0RJVikgeworCQkJcmVmX2RpdiA9IHBsbC0+cmVmZXJlbmNlX2RpdjsKKwkJCWlmICgocmVmX2RpdiA8IHBsbC0+bWluX3JlZl9kaXYpIHx8IChyZWZfZGl2ID4gcGxsLT5tYXhfcmVmX2RpdikpCisJCQkJZ290byBkb25lOworCQkJaWYgKCFjYWxjX2ZiX2RpdihwbGwsIGZyZXEsIHBvc3RfZGl2LCByZWZfZGl2LCAmZmJfZGl2LCAmZmJfZGl2X2ZyYWMpKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAocG9zdF9kaXYgPSBwbGwtPm1heF9wb3N0X2RpdjsgcG9zdF9kaXYgPj0gcGxsLT5taW5fcG9zdF9kaXY7IC0tcG9zdF9kaXYpIHsKKwkJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9MRUdBQ1kpIHsKKwkJCQlpZiAoKHBvc3RfZGl2ID09IDUpIHx8CisJCQkJICAgIChwb3N0X2RpdiA9PSA3KSB8fAorCQkJCSAgICAocG9zdF9kaXYgPT0gOSkgfHwKKwkJCQkgICAgKHBvc3RfZGl2ID09IDEwKSB8fAorCQkJCSAgICAocG9zdF9kaXYgPT0gMTEpKQorCQkJCQljb250aW51ZTsKKwkJCX0KIAotCQltLmZ1bGwgPSByZml4ZWRfZGl2KHJlZmVyZW5jZV9mcmVxLCBwbGxfaW5fbWF4KTsKLQkJbS5mdWxsID0gcmZpeGVkX2NlaWwobSk7Ci0JCWEuZnVsbD0gcmZpeGVkX2NvbnN0KDEpOwotCQlwLmZ1bGwgPSBwLmZ1bGwgLSBhLmZ1bGw7Ci0JCWEuZnVsbCA9IHJmaXhlZF9tdWwocCwgZmZyZXEpOwotCQlpZiAoYS5mdWxsID49IHBsbF9vdXRfbWluLmZ1bGwpCi0JCQljb250aW51ZTsKLQkJZWxzZSB7Ci0JCQlEUk1fRVJST1IoIlVuYWJsZSB0byBmaW5kIHBsbCBkaXZpZGVyc1xuIik7Ci0JCQlicmVhazsKKwkJCWlmICgocGxsLT5mbGFncyAmIFJBREVPTl9QTExfTk9fT0REX1BPU1RfRElWKSAmJiAocG9zdF9kaXYgJiAxKSkKKwkJCQljb250aW51ZTsKKworCQkJdmNvX2ZyZXF1ZW5jeSA9IGZyZXEgKiBwb3N0X2RpdjsKKwkJCWlmICgodmNvX2ZyZXF1ZW5jeSA8IHBsbC0+cGxsX291dF9taW4pIHx8ICh2Y29fZnJlcXVlbmN5ID4gcGxsLT5wbGxfb3V0X21heCkpCisJCQkJY29udGludWU7CisJCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpIHsKKwkJCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCQkJCWlmICgocmVmX2RpdiA8IHBsbC0+bWluX3JlZl9kaXYpIHx8IChyZWZfZGl2ID4gcGxsLT5tYXhfcmVmX2RpdikpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlpZiAoY2FsY19mYl9kaXYocGxsLCBmcmVxLCBwb3N0X2RpdiwgcmVmX2RpdiwgJmZiX2RpdiwgJmZiX2Rpdl9mcmFjKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmIChjYWxjX2ZiX3JlZl9kaXYocGxsLCBmcmVxLCBwb3N0X2RpdiwgJmZiX2RpdiwgJmZiX2Rpdl9mcmFjLCAmcmVmX2RpdikpCisJCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCi0JYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwKTsKLQliLmZ1bGwgPSByZml4ZWRfbXVsKG4sIGEpOworCWJlc3RfZnJlcSA9IHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiAxMCAqIGZiX2RpdjsKKwliZXN0X2ZyZXEgKz0gcGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZiX2Rpdl9mcmFjOworCWJlc3RfZnJlcSA9IGJlc3RfZnJlcSAvIChyZWZfZGl2ICogcG9zdF9kaXYpOwogCi0JZnJhY19uLmZ1bGwgPSByZml4ZWRfZmxvb3Iobik7Ci0JZnJhY19uLmZ1bGwgPSByZml4ZWRfbXVsKGZyYWNfbiwgYSk7Ci0JZnJhY19uLmZ1bGwgPSBiLmZ1bGwgLSBmcmFjX24uZnVsbDsKK2RvbmU6CisJaWYgKGJlc3RfZnJlcSA9PSAwKQorCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpbmQgdmFsaWQgUExMIGRpdmlkZXJzXG4iKTsKIAotCSpkb3RfY2xvY2tfcCA9IHJmaXhlZF90cnVuYyhiZXN0X2ZyZXEpOwotCSpmYl9kaXZfcCA9IHJmaXhlZF90cnVuYyhuKTsKLQkqZnJhY19mYl9kaXZfcCA9IHJmaXhlZF90cnVuYyhmcmFjX24pOwotCSpyZWZfZGl2X3AgPSByZml4ZWRfdHJ1bmMobSk7Ci0JKnBvc3RfZGl2X3AgPSByZml4ZWRfdHJ1bmMocCk7CisJKmRvdF9jbG9ja19wID0gYmVzdF9mcmVxIC8gMTA7CisJKmZiX2Rpdl9wID0gZmJfZGl2OworCSpmcmFjX2ZiX2Rpdl9wID0gZmJfZGl2X2ZyYWM7CisJKnJlZl9kaXZfcCA9IHJlZl9kaXY7CisJKnBvc3RfZGl2X3AgPSBwb3N0X2RpdjsKIAotCURSTV9ERUJVRygiJXUgJWQuJWQsICVkLCAlZFxuIiwgKmRvdF9jbG9ja19wICogMTAsICpmYl9kaXZfcCwgKmZyYWNfZmJfZGl2X3AsICpyZWZfZGl2X3AsICpwb3N0X2Rpdl9wKTsKKwlEUk1fREVCVUcoIiV1ICVkLiVkLCAlZCwgJWRcbiIsICpkb3RfY2xvY2tfcCwgKmZiX2Rpdl9wLCAqZnJhY19mYl9kaXZfcCwgKnJlZl9kaXZfcCwgKnBvc3RfZGl2X3ApOworfQorCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJdWludDY0X3QgZnJlcSwKKwkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKKwkJCXVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKKwkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQoreworCXN3aXRjaCAocGxsLT5hbGdvKSB7CisJY2FzZSBQTExfQUxHT19ORVc6CisJCXJhZGVvbl9jb21wdXRlX3BsbF9uZXcocGxsLCBmcmVxLCBkb3RfY2xvY2tfcCwgZmJfZGl2X3AsCisJCQkJICAgICAgIGZyYWNfZmJfZGl2X3AsIHJlZl9kaXZfcCwgcG9zdF9kaXZfcCk7CisJCWJyZWFrOworCWNhc2UgUExMX0FMR09fTEVHQUNZOgorCWRlZmF1bHQ6CisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBmcmVxLCBkb3RfY2xvY2tfcCwgZmJfZGl2X3AsCisJCQkJCSAgZnJhY19mYl9kaXZfcCwgcmVmX2Rpdl9wLCBwb3N0X2Rpdl9wKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQpAQCAtNjc5LDExICs4MTAsOCBAQAogCWlmIChmYi0+ZmJkZXYpCiAJCXJhZGVvbmZiX3JlbW92ZShkZXYsIGZiKTsKIAotCWlmIChyYWRlb25fZmItPm9iaikgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHJhZGVvbl9mYi0+b2JqKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JfQorCWlmIChyYWRlb25fZmItPm9iaikKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQocmFkZW9uX2ZiLT5vYmopOwogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKIAlrZnJlZShyYWRlb25fZmIpOwogfQpAQCAtODE5LDcgKzk0Nyw3IEBACiAKIGludCByYWRlb25fbW9kZXNldF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWludCBudW1fY3J0YyA9IDIsIGk7CisJaW50IGk7CiAJaW50IHJldDsKIAogCWRybV9tb2RlX2NvbmZpZ19pbml0KHJkZXYtPmRkZXYpOwpAQCAtODQyLDExICs5NzAsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwkvKiBjaGVjayBjb21iaW9zIGZvciBhIHZhbGlkIGhhcmRjb2RlZCBFRElEIC0gU3VuIHNlcnZlcnMgKi8KKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQkvKiBjaGVjayBmb3IgaGFyZGNvZGVkIEVESUQgaW4gQklPUyAqLworCQlyYWRlb25fY29tYmlvc19jaGVja19oYXJkY29kZWRfZWRpZChyZGV2KTsKKwl9CisKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCi0JCW51bV9jcnRjID0gMTsKKwkJcmRldi0+bnVtX2NydGMgPSAxOworCWVsc2UgeworCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQkJcmRldi0+bnVtX2NydGMgPSA2OworCQllbHNlCisJCQlyZGV2LT5udW1fY3J0YyA9IDI7CisJfQogCiAJLyogYWxsb2NhdGUgY3J0Y3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NydGM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZGV2LT5udW1fY3J0YzsgaSsrKSB7CiAJCXJhZGVvbl9jcnRjX2luaXQocmRldi0+ZGRldiwgaSk7CiAJfQogCkBAIC04NjMsNiArMTAwMyw4IEBACiAKIHZvaWQgcmFkZW9uX21vZGVzZXRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlrZnJlZShyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCk7CisKIAlpZiAocmRldi0+bW9kZV9pbmZvLm1vZGVfY29uZmlnX2luaXRpYWxpemVkKSB7CiAJCXJhZGVvbl9ocGRfZmluaShyZGV2KTsKIAkJZHJtX21vZGVfY29uZmlnX2NsZWFudXAocmRldi0+ZGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDhiYTNkZTcuLjZlZWMwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC00MCw5ICs0MCwxMSBAQAogCiAvKgogICogS01TIHdyYXBwZXIuCisgKiAtIDIuMC4wIC0gaW5pdGlhbCBpbnRlcmZhY2UKKyAqIC0gMi4xLjAgLSBhZGQgc3F1YXJlIHRpbGluZyBpbnRlcmZhY2UKICAqLwogI2RlZmluZSBLTVNfRFJJVkVSX01BSk9SCTIKLSNkZWZpbmUgS01TX0RSSVZFUl9NSU5PUgkwCisjZGVmaW5lIEtNU19EUklWRVJfTUlOT1IJMQogI2RlZmluZSBLTVNfRFJJVkVSX1BBVENITEVWRUwJMAogaW50IHJhZGVvbl9kcml2ZXJfbG9hZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBpbnQgcmFkZW9uX2RyaXZlcl91bmxvYWRfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtODYsNyArODgsOCBAQAogaW50IHJhZGVvbl90ZXN0aW5nID0gMDsKIGludCByYWRlb25fY29ubmVjdG9yX3RhYmxlID0gMDsKIGludCByYWRlb25fdHYgPSAxOwotaW50IHJhZGVvbl9uZXdfcGxsID0gMTsKK2ludCByYWRlb25fbmV3X3BsbCA9IC0xOworaW50IHJhZGVvbl9keW5wbSA9IC0xOwogaW50IHJhZGVvbl9hdWRpbyA9IDE7CiAKIE1PRFVMRV9QQVJNX0RFU0Mobm9fd2IsICJEaXNhYmxlIEFHUCB3cml0ZWJhY2sgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIik7CkBAIC0xMjIsOSArMTI1LDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHR2LCAiVFYgZW5hYmxlICgwID0gZGlzYWJsZSkiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0diwgcmFkZW9uX3R2LCBpbnQsIDA0NDQpOwogCi1NT0RVTEVfUEFSTV9ERVNDKG5ld19wbGwsICJTZWxlY3QgbmV3IFBMTCBjb2RlIGZvciBBVklWTyBjaGlwcyIpOworTU9EVUxFX1BBUk1fREVTQyhuZXdfcGxsLCAiU2VsZWN0IG5ldyBQTEwgY29kZSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG5ld19wbGwsIHJhZGVvbl9uZXdfcGxsLCBpbnQsIDA0NDQpOwogCitNT0RVTEVfUEFSTV9ERVNDKGR5bnBtLCAiRGlzYWJsZS9FbmFibGUgZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50ICgxID0gZW5hYmxlKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGR5bnBtLCByYWRlb25fZHlucG0sIGludCwgMDQ0NCk7CisKIE1PRFVMRV9QQVJNX0RFU0MoYXVkaW8sICJBdWRpbyBlbmFibGUgKDAgPSBkaXNhYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGF1ZGlvLCByYWRlb25fYXVkaW8sIGludCwgMDQ0NCk7CiAKQEAgLTMzOSw2ICszNDUsNyBAQAogCQlkcml2ZXIgPSAma21zX2RyaXZlcjsKIAkJZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgfD0gRFJJVkVSX01PREVTRVQ7CiAJCWRyaXZlci0+bnVtX2lvY3RscyA9IHJhZGVvbl9tYXhfa21zX2lvY3RsOworCQlyYWRlb25fcmVnaXN0ZXJfYXRweF9oYW5kbGVyKCk7CiAJfQogCS8qIGlmIHRoZSB2Z2EgY29uc29sZSBzZXR0aW5nIGlzIGVuYWJsZWQgc3RpbGwKIAkgKiBsZXQgbW9kcHJvYmUgb3ZlcnJpZGUgaXQgKi8KQEAgLTM0OCw2ICszNTUsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHJhZGVvbl9leGl0KHZvaWQpCiB7CiAJZHJtX2V4aXQoZHJpdmVyKTsKKwlyYWRlb25fdW5yZWdpc3Rlcl9hdHB4X2hhbmRsZXIoKTsKIH0KIAogbW9kdWxlX2luaXQocmFkZW9uX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCBjNTdhZDYwLi5lYzU1ZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMjY4LDYgKzI2OCw4IEBACiAKIAl1MzIgc2NyYXRjaF9hZ2VzWzVdOwogCisJaW50IGhhdmVfel9vZmZzZXQ7CisKIAkvKiBzdGFydGluZyBmcm9tIGhlcmUgb24sIGRhdGEgaXMgcHJlc2VydmVkIGFjY3Jvc3MgYW4gb3BlbiAqLwogCXVpbnQzMl90IGZsYWdzOwkJLyogc2VlIHJhZGVvbl9jaGlwX2ZsYWdzICovCiAJcmVzb3VyY2Vfc2l6ZV90IGZiX2FwZXJfb2Zmc2V0OwpAQCAtMjk1LDYgKzI5Nyw5IEBACiAJaW50IHI3MDBfc2NfcHJpbV9maWZvX3NpemU7CiAJaW50IHI3MDBfc2NfaGl6X3RpbGVfZmlmb19zaXplOwogCWludCByNzAwX3NjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZTsKKwlpbnQgcjYwMF9ncm91cF9zaXplOworCWludCByNjAwX25waXBlczsKKwlpbnQgcjYwMF9uYmFua3M7CiAKIAlzdHJ1Y3QgbXV0ZXggY3NfbXV0ZXg7CiAJdTMyIGNzX2lkX3NjbnQ7CkBAIC0zMTAsOSArMzE1LDExIEBACiAJdTMyIGFnZTsKIH0gZHJtX3JhZGVvbl9idWZfcHJpdl90OwogCitzdHJ1Y3QgZHJtX2J1ZmZlcjsKKwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9rY21kX2J1ZmZlciB7CiAJaW50IGJ1ZnN6OwotCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmZmVyOwogCWludCBuYm94OwogCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXM7CiB9IGRybV9yYWRlb25fa2NtZF9idWZmZXJfdDsKQEAgLTQ1NSw2ICs0NjIsMTUgQEAKIAkJCSAgIGludCBzeCwgaW50IHN5LCBpbnQgZHgsIGludCBkeSwKIAkJCSAgIGludCB3LCBpbnQgaCwgaW50IHNyY19waXRjaCwgaW50IGRzdF9waXRjaCwgaW50IGNwcCk7CiAKKy8qIGF0cHggaGFuZGxlciAqLworI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9TV0lUQ0hFUk9PKQordm9pZCByYWRlb25fcmVnaXN0ZXJfYXRweF9oYW5kbGVyKHZvaWQpOwordm9pZCByYWRlb25fdW5yZWdpc3Rlcl9hdHB4X2hhbmRsZXIodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9yZWdpc3Rlcl9hdHB4X2hhbmRsZXIodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fdW5yZWdpc3Rlcl9hdHB4X2hhbmRsZXIodm9pZCkge30KKyNlbmRpZgorCiAvKiBGbGFncyBmb3Igc3RhdHMuYm94ZXMKICAqLwogI2RlZmluZSBSQURFT05fQk9YX0RNQV9JRExFICAgICAgMHgxCkBAIC0yMTIyLDQgKzIxMzgsMzIgQEAKIAl3cml0ZSAmPSBtYXNrOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKKy8qKgorICogQ29weSBnaXZlbiBudW1iZXIgb2YgZHdvcmRzIGZyb20gZHJtIGJ1ZmZlciB0byB0aGUgcmluZyBidWZmZXIuCisgKi8KKyNkZWZpbmUgT1VUX1JJTkdfRFJNX0JVRkZFUihidWYsIHN6KSBkbyB7CQkJCVwKKwlpbnQgX3NpemUgPSAoc3opICogNDsJCQkJCQlcCisJc3RydWN0IGRybV9idWZmZXIgKl9idWYgPSAoYnVmKTsJCQkJXAorCWludCBfcGFydF9zaXplOwkJCQkJCQlcCisJd2hpbGUgKF9zaXplID4gMCkgewkJCQkJCVwKKwkJX3BhcnRfc2l6ZSA9IF9zaXplOwkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAod3JpdGUgKyBfcGFydF9zaXplLzQgPiBtYXNrKQkJCVwKKwkJCV9wYXJ0X3NpemUgPSAoKG1hc2sgKyAxKSAtIHdyaXRlKSo0OwkJXAorCQkJCQkJCQkJXAorCQlpZiAoZHJtX2J1ZmZlcl9pbmRleChfYnVmKSArIF9wYXJ0X3NpemUgPiBQQUdFX1NJWkUpCVwKKwkJCV9wYXJ0X3NpemUgPSBQQUdFX1NJWkUgLSBkcm1fYnVmZmVyX2luZGV4KF9idWYpO1wKKwkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJbWVtY3B5KHJpbmcgKyB3cml0ZSwgJl9idWYtPmRhdGFbZHJtX2J1ZmZlcl9wYWdlKF9idWYpXQlcCisJCQlbZHJtX2J1ZmZlcl9pbmRleChfYnVmKV0sIF9wYXJ0X3NpemUpOwkJXAorCQkJCQkJCQkJXAorCQlfc2l6ZSAtPSBfcGFydF9zaXplOwkJCQkJXAorCQl3cml0ZSA9ICh3cml0ZSArIF9wYXJ0X3NpemUvNCkgJiBtYXNrOwkJCVwKKwkJZHJtX2J1ZmZlcl9hZHZhbmNlKF9idWYsIF9wYXJ0X3NpemUpOwkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKICNlbmRpZgkJCQkvKiBfX1JBREVPTl9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCAzYzkxNzI0Li5iYzkyNmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkvKiBEVk8gcmVxdWlyZXMgMnggcHBsbCBjbG9ja3MgZGVwZW5kaW5nIG9uIHRtZHMgY2hpcCAqLwogCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkKIAkJcmV0dXJuIGluZGV4X21hc2s7Ci0JCisKIAljb3VudCA9IC0xOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xvbmVfZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CiAJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2Nsb25lID0gdG9fcmFkZW9uX2VuY29kZXIoY2xvbmVfZW5jb2Rlcik7CkBAIC0yMjgsNiArMjI4LDMyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqCityYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX3ByaXZfZnJvbV9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpkaWdfY29ubmVjdG9yOworCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJCXJldHVybiBOVUxMOworCisJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVybiBOVUxMOworCisJcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKworCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCisJCXJldHVybiBOVUxMOworCisJZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCisJcmV0dXJuIGRpZ19jb25uZWN0b3I7Cit9CisKIHN0YXRpYyBib29sIHJhZGVvbl9hdG9tX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjM2LDYgKzI2Miw5IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwkvKiBhZGp1c3QgcG0gdG8gdXBjb21pbmcgbW9kZSBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CisKIAkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCiAJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwpAQCAtNDU4LDM0ICs0ODcsMjAgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3IgPQorCQlyYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX3ByaXZfZnJvbV9lbmNvZGVyKGVuY29kZXIpOwogCXVuaW9uIGx2ZHNfZW5jb2Rlcl9jb250cm9sIGFyZ3M7CiAJaW50IGluZGV4ID0gMDsKIAlpbnQgaGRtaV9kZXRlY3RlZCA9IDA7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAKLQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKLQlpZiAoIWNvbm5lY3RvcikKKwlpZiAoIWRpZyB8fCAhZGlnX2Nvbm5lY3RvcikKIAkJcmV0dXJuOwogCi0JcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmICghcmFkZW9uX2VuY29kZXItPmVuY19wcml2KQotCQlyZXR1cm47Ci0KLQlkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7Ci0KLQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQotCQlyZXR1cm47Ci0KLQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCisJaWYgKGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2RlcikgPT0gQVRPTV9FTkNPREVSX01PREVfSERNSSkKIAkJaGRtaV9kZXRlY3RlZCA9IDE7CiAKLQlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0KIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKIAlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CkBAIC01ODYsNyArNjAxLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwotCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpyYWRlb25fZGlnX2Nvbm5lY3RvcjsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvcjsKIAogCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKGVuY29kZXIpOwogCWlmICghY29ubmVjdG9yKQpAQCAtNjE3LDkgKzYzMiw5IEBACiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX2VEUDoKLQkJcmFkZW9uX2RpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKLQkJaWYgKChyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpIHx8Ci0JCSAgICAocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCisJCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKKwkJaWYgKChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCkgfHwKKwkJICAgIChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9lRFApKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RQOwogCQllbHNlIGlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwpAQCAtNjU2LDYgKzY3MSwxOCBAQAogICogLSAyIERJRyBlbmNvZGVyIGJsb2Nrcy4KICAqIERJRzEvMiBjYW4gZHJpdmUgVU5JUEhZMC8xLzIgbGluayBBIG9yIGxpbmsgQgogICoKKyAqIERDRSA0LjAKKyAqIC0gMyBESUcgdHJhbnNtaXR0ZXIgYmxvY2tzIFVOUEhZMC8xLzIgKGxpbmtzIEEgYW5kIEIpLgorICogU3VwcG9ydHMgdXAgdG8gNiBkaWdpdGFsIG91dHB1dHMKKyAqIC0gNiBESUcgZW5jb2RlciBibG9ja3MuCisgKiAtIERJRyB0byBQSFkgbWFwcGluZyBpcyBoYXJkY29kZWQKKyAqIERJRzEgZHJpdmVzIFVOSVBIWTAgbGluayBBLCBBK0IKKyAqIERJRzIgZHJpdmVzIFVOSVBIWTAgbGluayBCCisgKiBESUczIGRyaXZlcyBVTklQSFkxIGxpbmsgQSwgQStCCisgKiBESUc0IGRyaXZlcyBVTklQSFkxIGxpbmsgQgorICogRElHNSBkcml2ZXMgVU5JUEhZMiBsaW5rIEEsIEErQgorICogRElHNiBkcml2ZXMgVU5JUEhZMiBsaW5rIEIKKyAqCiAgKiBSb3V0aW5nCiAgKiBjcnRjIC0+IGRpZyBlbmNvZGVyIC0+IFVOSVBIWS9MVlRNQSAoMSBvciAyIGxpbmtzKQogICogRXhhbXBsZXM6CkBAIC02NjQsODggKzY5MSw3OCBAQAogICogY3J0YzAgLT4gZGlnMSAtPiBVTklQSFkyIGxpbmsgIEEgICAtPiBMVkRTCiAgKiBjcnRjMSAtPiBkaWcyIC0+IFVOSVBIWTEgbGluayAgQitBIC0+IFRNRFMvSERNSQogICovCi1zdGF0aWMgdm9pZAorCit1bmlvbiBkaWdfZW5jb2Rlcl9jb250cm9sIHsKKwlESUdfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gdjE7CisJRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyIHYyOworCURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMyB2MzsKK307CisKK3ZvaWQKIGF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IGFjdGlvbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7Ci0JRElHX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OIGFyZ3M7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3IgPQorCQlyYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX3ByaXZfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCXVuaW9uIGRpZ19lbmNvZGVyX2NvbnRyb2wgYXJnczsKIAlpbnQgaW5kZXggPSAwLCBudW0gPSAwOwogCXVpbnQ4X3QgZnJldiwgY3JldjsKLQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwotCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpkaWdfY29ubmVjdG9yOwogCi0JY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7Ci0JaWYgKCFjb25uZWN0b3IpCisJaWYgKCFkaWcgfHwgIWRpZ19jb25uZWN0b3IpCiAJCXJldHVybjsKIAotCXJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQotCQlyZXR1cm47Ci0KLQlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0KLQlpZiAoIXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdikKLQkJcmV0dXJuOwotCi0JZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JaWYgKGRpZy0+ZGlnX2VuY29kZXIpCi0JCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRElHMkVuY29kZXJDb250cm9sKTsKLQllbHNlCi0JCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRElHMUVuY29kZXJDb250cm9sKTsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJR3hFbmNvZGVyQ29udHJvbCk7CisJZWxzZSB7CisJCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOworCQllbHNlCisJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzFFbmNvZGVyQ29udHJvbCk7CisJfQogCW51bSA9IGRpZy0+ZGlnX2VuY29kZXIgKyAxOwogCiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpOwogCi0JYXJncy51Y0FjdGlvbiA9IGFjdGlvbjsKLQlhcmdzLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKKwlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOworCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOworCWFyZ3MudjEudWNFbmNvZGVyTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CiAKLQlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgewotCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgotCQkJYXJncy51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIxOwotCQkJYnJlYWs7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKLQkJCWFyZ3MudWNDb25maWcgPSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMjsKLQkJCWJyZWFrOwotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6Ci0JCQlhcmdzLnVjQ29uZmlnID0gQVRPTV9FTkNPREVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjM7Ci0JCQlicmVhazsKLQkJfQorCWlmIChhcmdzLnYxLnVjRW5jb2Rlck1vZGUgPT0gQVRPTV9FTkNPREVSX01PREVfRFApIHsKKwkJaWYgKGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrID09IDI3MDAwMCkKKwkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzJfNzBHSFo7CisJCWFyZ3MudjEudWNMYW5lTnVtID0gZGlnX2Nvbm5lY3Rvci0+ZHBfbGFuZV9jb3VudDsKKwl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJYXJncy52MS51Y0xhbmVOdW0gPSA4OworCWVsc2UKKwkJYXJncy52MS51Y0xhbmVOdW0gPSA0OworCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlhcmdzLnYzLmFjQ29uZmlnLnVjRGlnU2VsID0gZGlnLT5kaWdfZW5jb2RlcjsKKwkJYXJncy52My51Y0JpdFBlckNvbG9yID0gUEFORUxfOEJJVF9QRVJfQ09MT1I7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKLQkJCWFyZ3MudWNDb25maWcgPSBBVE9NX0VOQ09ERVJfQ09ORklHX1RSQU5TTUlUVEVSMTsKKwkJCWFyZ3MudjEudWNDb25maWcgPSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMTsKIAkJCWJyZWFrOworCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CiAJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgotCQkJYXJncy51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVFJBTlNNSVRURVIyOworCQkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIyOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJCWFyZ3MudjEudWNDb25maWcgPSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMzsKIAkJCWJyZWFrOwogCQl9CisJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKKwkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9FTkNPREVSX0NPTkZJR19MSU5LQjsKKwkJZWxzZQorCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX0xJTktBOwogCX0KIAotCWFyZ3MudWNFbmNvZGVyTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7Ci0KLQlpZiAoYXJncy51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCWlmIChkaWdfY29ubmVjdG9yLT5kcF9jbG9jayA9PSAyNzAwMDApCi0JCQlhcmdzLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV8yXzcwR0haOwotCQlhcmdzLnVjTGFuZU51bSA9IGRpZ19jb25uZWN0b3ItPmRwX2xhbmVfY291bnQ7Ci0JfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCi0JCWFyZ3MudWNMYW5lTnVtID0gODsKLQllbHNlCi0JCWFyZ3MudWNMYW5lTnVtID0gNDsKLQotCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJYXJncy51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX0xJTktCOwotCWVsc2UKLQkJYXJncy51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX0xJTktBOwotCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAKIH0KQEAgLTc1Myw2ICs3NzAsNyBAQAogdW5pb24gZGlnX3RyYW5zbWl0dGVyX2NvbnRyb2wgewogCURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gdjE7CiAJRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WMiB2MjsKKwlESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzIHYzOwogfTsKIAogdm9pZApAQCAtNzYxLDM3ICs3NzksMjkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3IgPQorCQlyYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX3ByaXZfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJdW5pb24gZGlnX3RyYW5zbWl0dGVyX2NvbnRyb2wgYXJnczsKIAlpbnQgaW5kZXggPSAwLCBudW0gPSAwOwogCXVpbnQ4X3QgZnJldiwgY3JldjsKLQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwotCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpkaWdfY29ubmVjdG9yOwogCWJvb2wgaXNfZHAgPSBmYWxzZTsKKwlpbnQgcGxsX2lkID0gMDsKKworCWlmICghZGlnIHx8ICFkaWdfY29ubmVjdG9yKQorCQlyZXR1cm47CiAKIAljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKLQlpZiAoIWNvbm5lY3RvcikKLQkJcmV0dXJuOwotCiAJcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAotCWlmICghcmFkZW9uX2VuY29kZXItPmVuY19wcml2KQotCQlyZXR1cm47Ci0KLQlkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7Ci0KLQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQotCQlyZXR1cm47Ci0KLQlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0KIAlpZiAoYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkKIAkJaXNfZHAgPSB0cnVlOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JaWYgKEFTSUNfSVNfRENFMzIocmRldikpCisJaWYgKEFTSUNfSVNfRENFMzIocmRldikgfHwgQVNJQ19JU19EQ0U0KHJkZXYpKQogCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFVOSVBIWVRyYW5zbWl0dGVyQ29udHJvbCk7CiAJZWxzZSB7CiAJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKQEAgLTgyMSw3ICs4MzEsNTQgQEAKIAkJZWxzZQogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJfQotCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlpZiAoaXNfZHApCisJCQlhcmdzLnYzLnVjTGFuZU51bSA9IGRpZ19jb25uZWN0b3ItPmRwX2xhbmVfY291bnQ7CisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjMudWNMYW5lTnVtID0gODsKKwkJZWxzZQorCQkJYXJncy52My51Y0xhbmVOdW0gPSA0OworCisJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikgeworCQkJYXJncy52My5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOworCQkJYXJncy52My5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSAxOworCQl9CisKKwkJLyogU2VsZWN0IHRoZSBQTEwgZm9yIHRoZSBQSFkKKwkJICogRFAgUEhZIHNob3VsZCBiZSBjbG9ja2VkIGZyb20gZXh0ZXJuYWwgc3JjIGlmIHRoZXJlIGlzCisJCSAqIG9uZS4KKwkJICovCisJCWlmIChlbmNvZGVyLT5jcnRjKSB7CisJCQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJCQlwbGxfaWQgPSByYWRlb25fY3J0Yy0+cGxsX2lkOworCQl9CisJCWlmIChpc19kcCAmJiByZGV2LT5jbG9jay5kcF9leHRjbGspCisJCQlhcmdzLnYzLmFjQ29uZmlnLnVjUmVmQ2xrU291cmNlID0gMjsgLyogZXh0ZXJuYWwgc3JjICovCisJCWVsc2UKKwkJCWFyZ3MudjMuYWNDb25maWcudWNSZWZDbGtTb3VyY2UgPSBwbGxfaWQ7CisKKwkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgeworCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKKwkJCWFyZ3MudjMuYWNDb25maWcudWNUcmFuc21pdHRlclNlbCA9IDA7CisJCQludW0gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKKwkJCWFyZ3MudjMuYWNDb25maWcudWNUcmFuc21pdHRlclNlbCA9IDE7CisJCQludW0gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJCWFyZ3MudjMuYWNDb25maWcudWNUcmFuc21pdHRlclNlbCA9IDI7CisJCQludW0gPSAyOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfZHApCisJCQlhcmdzLnYzLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOyAvKiBEUCByZXF1aXJlcyBjb2hlcmVudCAqLworCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpIHsKKwkJCWlmIChkaWctPmNvaGVyZW50X21vZGUpCisJCQkJYXJncy52My5hY0NvbmZpZy5mQ29oZXJlbnRNb2RlID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgewogCQlpZiAoZGlnLT5kaWdfZW5jb2RlciA9PSAxKQogCQkJYXJncy52Mi5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSAxOwogCQlpZiAoZGlnX2Nvbm5lY3Rvci0+bGlua2IpCkBAIC04NDksNyArOTA2LDYgQEAKIAkJCQlhcmdzLnYyLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOwogCQl9CiAJfSBlbHNlIHsKLQogCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX1BQTEw7CiAKIAkJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCkBAIC0xMDI0LDkgKzEwODAsMTIgQEAKIAkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJfQogCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKKworCS8qIGFkanVzdCBwbSB0byBkcG1zIGNoYW5nZSAqLworCXJhZGVvbl9wbV9jb21wdXRlX2Nsb2NrcyhyZGV2KTsKIH0KIAotdW5pb24gY3J0Y19zb3VyY19wYXJhbSB7Cit1bmlvbiBjcnRjX3NvdXJjZV9wYXJhbSB7CiAJU0VMRUNUX0NSVENfU09VUkNFX1BTX0FMTE9DQVRJT04gdjE7CiAJU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlNfVjIgdjI7CiB9OwpAQCAtMTAzOCw3ICsxMDk3LDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhlbmNvZGVyLT5jcnRjKTsKLQl1bmlvbiBjcnRjX3NvdXJjX3BhcmFtIGFyZ3M7CisJdW5pb24gY3J0Y19zb3VyY2VfcGFyYW0gYXJnczsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZWxlY3RDUlRDX1NvdXJjZSk7CiAJdWludDhfdCBmcmV2LCBjcmV2OwogCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwpAQCAtMTEwNywxMCArMTE2NiwyNiBAQAogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CiAJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJCWlmIChkaWctPmRpZ19lbmNvZGVyKQotCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHMl9FTkNPREVSX0lEOwotCQkJCWVsc2UKKwkJCQlzd2l0Y2ggKGRpZy0+ZGlnX2VuY29kZXIpIHsKKwkJCQljYXNlIDA6CiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHM19FTkNPREVSX0lEOworCQkJCQlicmVhazsKKwkJCQljYXNlIDM6CisJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUc0X0VOQ09ERVJfSUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNDoKKwkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzVfRU5DT0RFUl9JRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA1OgorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHNl9FTkNPREVSX0lEOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xOgogCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9EVk9fRU5DT0RFUl9JRDsKQEAgLTExNjcsNiArMTI0Miw3IEBACiAJfQogCiAJLyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCisJLyogWFhYIGNoZWNrIERDRTQgKi8KIAlpZiAoIShyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkpIHsKIAkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQogCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKQEAgLTExODMsNiArMTI1OSwzMyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqdGVzdF9lbmNvZGVyOwogCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwogCXVpbnQzMl90IGRpZ19lbmNfaW5fdXNlID0gMDsKKworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3IgPQorCQkJcmFkZW9uX2dldF9hdG9tX2Nvbm5lY3Rvcl9wcml2X2Zyb21fZW5jb2RlcihlbmNvZGVyKTsKKworCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgorCQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQorCQkJCXJldHVybiAxOworCQkJZWxzZQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKKwkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKKwkJCQlyZXR1cm4gMzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMjsKKwkJCWJyZWFrOworCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6CisJCQlpZiAoZGlnX2Nvbm5lY3Rvci0+bGlua2IpCisJCQkJcmV0dXJuIDU7CisJCQllbHNlCisJCQkJcmV0dXJuIDQ7CisJCQlicmVhazsKKwkJfQorCX0KKwogCS8qIG9uIERDRTMyIGFuZCBlbmNvZGVyIGNhbiBkcml2ZXIgYW55IGJsb2NrIHNvIGp1c3QgY3J0YyBpZCAqLwogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7CiAJCXJldHVybiByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKQEAgLTEyNTQsMTUgKzEzNTcsMjYgQEAKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgotCQkvKiBkaXNhYmxlIHRoZSBlbmNvZGVyIGFuZCB0cmFuc21pdHRlciAqLwotCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRElTQUJMRSwgMCwgMCk7Ci0JCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRElTQUJMRSk7CisJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJCS8qIGRpc2FibGUgdGhlIHRyYW5zbWl0dGVyICovCisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRElTQUJMRSwgMCwgMCk7CisJCQkvKiBzZXR1cCBhbmQgZW5hYmxlIHRoZSBlbmNvZGVyICovCisJCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQ09ERVJfQ01EX1NFVFVQKTsKIAotCQkvKiBzZXR1cCBhbmQgZW5hYmxlIHRoZSBlbmNvZGVyIGFuZCB0cmFuc21pdHRlciAqLwotCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQUJMRSk7Ci0JCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklULCAwLCAwKTsKLQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQLCAwLCAwKTsKLQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSwgMCwgMCk7CisJCQkvKiBpbml0IGFuZCBlbmFibGUgdGhlIHRyYW5zbWl0dGVyICovCisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCwgMCwgMCk7CisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFLCAwLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRpc2FibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRElTQUJMRSwgMCwgMCk7CisJCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0RJU0FCTEUpOworCisJCQkvKiBzZXR1cCBhbmQgZW5hYmxlIHRoZSBlbmNvZGVyIGFuZCB0cmFuc21pdHRlciAqLworCQkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkFCTEUpOworCQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQsIDAsIDApOworCQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQLCAwLCAwKTsKKwkJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUsIDAsIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfRERJOgogCQlhdG9tYmlvc19kZGlhX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKQEAgLTEyODIsNyArMTM5Niw5IEBACiAJfQogCWF0b21iaW9zX2FwcGx5X2VuY29kZXJfcXVpcmtzKGVuY29kZXIsIGFkanVzdGVkX21vZGUpOwogCi0JcjYwMF9oZG1pX3NldG1vZGUoZW5jb2RlciwgYWRqdXN0ZWRfbW9kZSk7CisJLyogWFhYICovCisJaWYgKCFBU0lDX0lTX0RDRTQocmRldikpCisJCXI2MDBfaGRtaV9zZXRtb2RlKGVuY29kZXIsIGFkanVzdGVkX21vZGUpOwogfQogCiBzdGF0aWMgYm9vbApAQCAtMTQ4MCwxMCArMTU5NiwxOCBAQAogCQlyZXR1cm47CiAKIAllbmNvZGVyID0gJnJhZGVvbl9lbmNvZGVyLT5iYXNlOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwlzd2l0Y2ggKHJkZXYtPm51bV9jcnRjKSB7CisJY2FzZSAxOgogCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MTsKLQllbHNlCisJCWJyZWFrOworCWNhc2UgMjoKKwlkZWZhdWx0OgogCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4M2Y7CisJCWJyZWFrOworCX0KIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKaW5kZXggNzk3OTcyZS4uOTNjN2Q1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCkBAIC03NSw2ICs3NSwxMSBAQAogCUNISVBfUlY3MzAsCiAJQ0hJUF9SVjcxMCwKIAlDSElQX1JWNzQwLAorCUNISVBfQ0VEQVIsCisJQ0hJUF9SRURXT09ELAorCUNISVBfSlVOSVBFUiwKKwlDSElQX0NZUFJFU1MsCisJQ0hJUF9IRU1MT0NLLAogCUNISVBfTEFTVCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IGQ3MWUzNDYuLjhmY2NiZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMzksNiArMzksOCBAQAogCiAjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgogCisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KKwogc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgewogCXN0cnVjdCBkcm1fZmJfaGVscGVyIGhlbHBlcjsKIAlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyCSpyZmI7CkBAIC0xNDgsNyArMTUwLDYgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlib29sIGZiX3RpbGVkID0gZmFsc2U7IC8qIHVzZWZ1bCBmb3IgdGVzdGluZyAqLwogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOwotCWludCBjcnRjX2NvdW50OwogCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwpAQCAtMjM5LDExICsyNDAsNyBAQAogCXJmYmRldiA9IGluZm8tPnBhcjsKIAlyZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZyYWRlb25fZmJfaGVscGVyX2Z1bmNzOwogCXJmYmRldi0+aGVscGVyLmRldiA9IGRldjsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCi0JCWNydGNfY291bnQgPSAxOwotCWVsc2UKLQkJY3J0Y19jb3VudCA9IDI7Ci0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoJnJmYmRldi0+aGVscGVyLCBjcnRjX2NvdW50LAorCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgcmRldi0+bnVtX2NydGMsCiAJCQkJCSAgICBSQURFT05GQl9DT05OX0xJTUlUKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bnJlZjsKQEAgLTI1Nyw3ICsyNTQsNyBAQAogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwogCi0JdG1wID0gZmJfZ3B1YWRkciAtIHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJdG1wID0gZmJfZ3B1YWRkciAtIHJkZXYtPm1jLnZyYW1fc3RhcnQ7CiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSByZGV2LT5tYy5hcGVyX2Jhc2UgKyB0bXA7CiAJaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGZicHRyOwpAQCAtMjkxLDYgKzI4OCw3IEBACiAJcmZiZGV2LT5yZGV2ID0gcmRldjsKIAogCW11dGV4X3VubG9jaygmcmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKKwl2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KHJkZXYtPmRkZXYtPnBkZXYsIGluZm8pOwogCXJldHVybiAwOwogCiBvdXRfdW5yZWY6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKaW5kZXggZTczZDU2ZS4uMTc3MGQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJdW5zaWduZWQgdDsKIAl1bnNpZ25lZCBwOwogCWludCBpLCBqOworCXU2NCBwYWdlX2Jhc2U7CiAKIAlpZiAoIXJkZXYtPmdhcnQucmVhZHkpIHsKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKQEAgLTE1MSw5ICsxNTIsMTEgQEAKIAkJCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7Ci0JCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSAwOworCQkJcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdID0gcmRldi0+ZHVtbXlfcGFnZS5hZGRyOworCQkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwogCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7IGorKywgdCsrKSB7Ci0JCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgMCk7CisJCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9iYXNlKTsKKwkJCQlwYWdlX2Jhc2UgKz0gUkFERU9OX0dQVV9QQUdFX1NJWkU7CiAJCQl9CiAJCX0KIAl9CkBAIC0xOTksOCArMjAyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgcmFkZW9uX2dhcnRfcmVzdG9yZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgaSwgaiwgdDsKKwl1NjQgcGFnZV9iYXNlOworCisJZm9yIChpID0gMCwgdCA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXM7IGkrKykgeworCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbaV07CisJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgeworCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9iYXNlKTsKKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKKwkJfQorCX0KKwltYigpOworCXJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKK30KKwogaW50IHJhZGVvbl9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJaW50IHIsIGk7CisKIAlpZiAocmRldi0+Z2FydC5wYWdlcykgewogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMDksNiArMjMwLDkgQEAKIAkJRFJNX0VSUk9SKCJQYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIEdQVSBwYWdlIHNpemUhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAkvKiBDb21wdXRlIHRhYmxlIHNpemUgKi8KIAlyZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFBBR0VfU0laRTsKIAlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOwpAQCAtMjI3LDYgKzI1MSwxMCBAQAogCQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJLyogc2V0IEdBUlQgZW50cnkgdG8gcG9pbnQgdG8gdGhlIGR1bW15IHBhZ2UgYnkgZGVmYXVsdCAqLworCWZvciAoaSA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXM7IGkrKykgeworCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbaV0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCmluZGV4IGRiOGU5YTMuLmVmOTJkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCkBAIC02OSw5ICs2OSw3IEBACiAJCWlmIChyICE9IC1FUkVTVEFSVFNZUykKIAkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIEdFTSBvYmplY3QgKCVkLCAlZCwgJXUsICVkKVxuIiwKIAkJCQkgIHNpemUsIGluaXRpYWxfZG9tYWluLCBhbGlnbm1lbnQsIHIpOwotCQltdXRleF9sb2NrKCZyZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAkJcmV0dXJuIHI7CiAJfQogCWdvYmotPmRyaXZlcl9wcml2YXRlID0gcm9iajsKQEAgLTIwMiwxNCArMjAwLDEwIEBACiAJfQogCXIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlscCwgZ29iaiwgJmhhbmRsZSk7CiAJaWYgKHIpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCQlyZXR1cm4gcjsKIAl9Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShnb2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJYXJncy0+aGFuZGxlID0gaGFuZGxlOwogCXJldHVybiAwOwogfQpAQCAtMjM2LDkgKzIzMCw3IEBACiAKIAlyID0gcmFkZW9uX2dlbV9zZXRfZG9tYWluKGdvYmosIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKIAotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMjU1LDkgKzI0Nyw3IEBACiAJfQogCXJvYmogPSBnb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlhcmdzLT5hZGRyX3B0ciA9IHJhZGVvbl9ib19tbWFwX29mZnNldChyb2JqKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OCw5ICsyNzgsNyBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTMxMSw5ICsyOTksNyBAQAogCS8qIGNhbGxiYWNrIGh3IHNwZWNpZmljIGZ1bmN0aW9ucyBpZiBhbnkgKi8KIAlpZiAocm9iai0+cmRldi0+YXNpYy0+aW9jdGxfd2FpdF9pZGxlKQogCQlyb2JqLT5yZGV2LT5hc2ljLT5pb2N0bF93YWl0X2lkbGUocm9iai0+cmRldiwgcm9iaik7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCXJldHVybiByOwogfQogCkBAIC0zMzEsOSArMzE3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcm9iaiA9IGdvYmotPmRyaXZlcl9wcml2YXRlOwogCXIgPSByYWRlb25fYm9fc2V0X3RpbGluZ19mbGFncyhyb2JqLCBhcmdzLT50aWxpbmdfZmxhZ3MsIGFyZ3MtPnBpdGNoKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTM1Niw4ICszNDAsNiBAQAogCXJhZGVvbl9ib19nZXRfdGlsaW5nX2ZsYWdzKHJibywgJmFyZ3MtPnRpbGluZ19mbGFncywgJmFyZ3MtPnBpdGNoKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJibyk7CiBvdXQ6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pMmMuYwppbmRleCBkYTNkYTFlLi40YWU1MGMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgImF0b20uaCIKIAogLyoqCiAgKiByYWRlb25fZGRjX3Byb2JlCkBAIC01OSw3ICs2MCw3IEBACiB9CiAKIAotdm9pZCByYWRlb25faTJjX2RvX2xvY2soc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjLCBpbnQgbG9ja19zdGF0ZSkKK3N0YXRpYyB2b2lkIHJhZGVvbl9pMmNfZG9fbG9jayhzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMsIGludCBsb2NrX3N0YXRlKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gaTJjLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKnJlYyA9ICZpMmMtPnJlYzsKQEAgLTcxLDEzICs3MiwyNSBAQAogCSAqLwogCWlmIChyZWMtPmh3X2NhcGFibGUpIHsKIAkJaWYgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SMjAwKSAmJiAhQVNJQ19JU19BVklWTyhyZGV2KSkgewotCQkJaWYgKHJlYy0+YV9jbGtfcmVnID09IFJBREVPTl9HUElPX01PTklEKSB7CisJCQl1MzIgcmVnOworCisJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzNTApCisJCQkJcmVnID0gUkFERU9OX0dQSU9fTU9OSUQ7CisJCQllbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUjMwMCkgfHwKKwkJCQkgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IzNTApKQorCQkJCXJlZyA9IFJBREVPTl9HUElPX0RWSV9EREM7CisJCQllbHNlCisJCQkJcmVnID0gUkFERU9OX0dQSU9fQ1JUMl9EREM7CisKKwkJCW11dGV4X2xvY2soJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CisJCQlpZiAocmVjLT5hX2Nsa19yZWcgPT0gcmVnKSB7CiAJCQkJV1JFRzMyKFJBREVPTl9EVklfSTJDX0NOVExfMCwgKFJBREVPTl9JMkNfU09GVF9SU1QgfAogCQkJCQkJCSAgICAgICBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMxKSkpOwogCQkJfSBlbHNlIHsKIAkJCQlXUkVHMzIoUkFERU9OX0RWSV9JMkNfQ05UTF8wLCAoUkFERU9OX0kyQ19TT0ZUX1JTVCB8CiAJCQkJCQkJICAgICAgIFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzMpKSk7CiAJCQl9CisJCQltdXRleF91bmxvY2soJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CiAJCX0KIAl9CiAKQEAgLTE2OCw2ICsxODEsNjkyIEBACiAJV1JFRzMyKHJlYy0+ZW5fZGF0YV9yZWcsIHZhbCk7CiB9CiAKK3N0YXRpYyB1MzIgcmFkZW9uX2dldF9pMmNfcHJlc2NhbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJhZGVvbl9wbGwgKnNwbGwgPSAmcmRldi0+Y2xvY2suc3BsbDsKKwl1MzIgc2NsayA9IHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpOworCXUzMiBwcmVzY2FsZSA9IDA7CisJdTMyIG4sIG07CisJdTggbG9vcDsKKwlpbnQgaTJjX2Nsb2NrOworCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUjEwMDoKKwljYXNlIENISVBfUlYxMDA6CisJY2FzZSBDSElQX1JTMTAwOgorCWNhc2UgQ0hJUF9SVjIwMDoKKwljYXNlIENISVBfUlMyMDA6CisJY2FzZSBDSElQX1IyMDA6CisJY2FzZSBDSElQX1JWMjUwOgorCWNhc2UgQ0hJUF9SUzMwMDoKKwljYXNlIENISVBfUlYyODA6CisJY2FzZSBDSElQX1IzMDA6CisJY2FzZSBDSElQX1IzNTA6CisJY2FzZSBDSElQX1JWMzUwOgorCQluID0gKHNwbGwtPnJlZmVyZW5jZV9mcmVxKSAvICg0ICogNik7CisJCWZvciAobG9vcCA9IDE7IGxvb3AgPCAyNTU7IGxvb3ArKykgeworCQkJaWYgKChsb29wICogKGxvb3AgLSAxKSkgPiBuKQorCQkJCWJyZWFrOworCQl9CisJCW0gPSBsb29wIC0gMTsKKwkJcHJlc2NhbGUgPSBtIHwgKGxvb3AgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjM4MDoKKwljYXNlIENISVBfUlM0MDA6CisJY2FzZSBDSElQX1JTNDgwOgorCWNhc2UgQ0hJUF9SNDIwOgorCWNhc2UgQ0hJUF9SNDIzOgorCWNhc2UgQ0hJUF9SVjQxMDoKKwkJc2NsayA9IHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpOworCQlwcmVzY2FsZSA9ICgoKHNjbGsgKiAxMCkvKDQgKiAxMjggKiAxMDApICsgMSkgPDwgOCkgKyAxMjg7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SUzYwMDoKKwljYXNlIENISVBfUlM2OTA6CisJY2FzZSBDSElQX1JTNzQwOgorCQkvKiB0b2RvICovCisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjUxNToKKwljYXNlIENISVBfUjUyMDoKKwljYXNlIENISVBfUlY1MzA6CisJY2FzZSBDSElQX1JWNTYwOgorCWNhc2UgQ0hJUF9SVjU3MDoKKwljYXNlIENISVBfUjU4MDoKKwkJaTJjX2Nsb2NrID0gNTA7CisJCXNjbGsgPSByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KTsKKwkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I1MjApCisJCQlwcmVzY2FsZSA9ICgxMjcgPDwgOCkgKyAoKHNjbGsgKiAxMCkgLyAoNCAqIDEyNyAqIGkyY19jbG9jaykpOworCQllbHNlCisJCQlwcmVzY2FsZSA9ICgoKHNjbGsgKiAxMCkvKDQgKiAxMjggKiAxMDApICsgMSkgPDwgOCkgKyAxMjg7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SNjAwOgorCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjcwOgorCQkvKiB0b2RvICovCisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlY2MzU6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3NDA6CisJCS8qIHRvZG8gKi8KKwkJYnJlYWs7CisJY2FzZSBDSElQX0NFREFSOgorCWNhc2UgQ0hJUF9SRURXT09EOgorCWNhc2UgQ0hJUF9KVU5JUEVSOgorCWNhc2UgQ0hJUF9DWVBSRVNTOgorCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQkvKiB0b2RvICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiaTJjOiB1bmhhbmRsZWQgcmFkZW9uIGNoaXBcbiIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHByZXNjYWxlOworfQorCisKKy8qIGh3IGkyYyBlbmdpbmUgZm9yIHIxeHgtNHh4IGhhcmR3YXJlCisgKiBodyBjYW4gYnVmZmVyIHVwIHRvIDE1IGJ5dGVzCisgKi8KK3N0YXRpYyBpbnQgcjEwMF9od19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gaTJjLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKnJlYyA9ICZpMmMtPnJlYzsKKwlzdHJ1Y3QgaTJjX21zZyAqcDsKKwlpbnQgaSwgaiwgaywgcmV0ID0gbnVtOworCXUzMiBwcmVzY2FsZTsKKwl1MzIgaTJjX2NudGxfMCwgaTJjX2NudGxfMSwgaTJjX2RhdGE7CisJdTMyIHRtcCwgcmVnOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGNfaHdfaTJjX211dGV4KTsKKwkvKiB0YWtlIHRoZSBwbSBsb2NrIHNpbmNlIHdlIG5lZWQgYSBjb25zdGFudCBzY2xrICovCisJbXV0ZXhfbG9jaygmcmRldi0+cG0ubXV0ZXgpOworCisJcHJlc2NhbGUgPSByYWRlb25fZ2V0X2kyY19wcmVzY2FsZShyZGV2KTsKKworCXJlZyA9ICgocHJlc2NhbGUgPDwgUkFERU9OX0kyQ19QUkVTQ0FMRV9TSElGVCkgfAorCSAgICAgICBSQURFT05fSTJDX1NUQVJUIHwKKwkgICAgICAgUkFERU9OX0kyQ19TVE9QIHwKKwkgICAgICAgUkFERU9OX0kyQ19HTyk7CisKKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOworCQlXUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENILCB0bXAgfCBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFKTsKKwl9CisKKwlpZiAocmVjLT5tbV9pMmMpIHsKKwkJaTJjX2NudGxfMCA9IFJBREVPTl9JMkNfQ05UTF8wOworCQlpMmNfY250bF8xID0gUkFERU9OX0kyQ19DTlRMXzE7CisJCWkyY19kYXRhID0gUkFERU9OX0kyQ19EQVRBOworCX0gZWxzZSB7CisJCWkyY19jbnRsXzAgPSBSQURFT05fRFZJX0kyQ19DTlRMXzA7CisJCWkyY19jbnRsXzEgPSBSQURFT05fRFZJX0kyQ19DTlRMXzE7CisJCWkyY19kYXRhID0gUkFERU9OX0RWSV9JMkNfREFUQTsKKworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfUjEwMDoKKwkJY2FzZSBDSElQX1JWMTAwOgorCQljYXNlIENISVBfUlMxMDA6CisJCWNhc2UgQ0hJUF9SVjIwMDoKKwkJY2FzZSBDSElQX1JTMjAwOgorCQljYXNlIENISVBfUlMzMDA6CisJCQlzd2l0Y2ggKHJlYy0+bWFza19jbGtfcmVnKSB7CisJCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCQkJLyogbm8gZ3BpbyBzZWxlY3QgYml0ICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURSTV9FUlJPUigiZ3BpbyBub3Qgc3VwcG9ydGVkIHdpdGggaHcgaTJjXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENISVBfUjIwMDoKKwkJCS8qIG9ubHkgYml0IDQgb24gcjIwMCAqLworCQkJc3dpdGNoIChyZWMtPm1hc2tfY2xrX3JlZykgeworCQkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkFERU9OX0dQSU9fTU9OSUQ6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1JWMjUwOgorCQljYXNlIENISVBfUlYyODA6CisJCQkvKiBiaXRzIDMgYW5kIDQgKi8KKwkJCXN3aXRjaCAocmVjLT5tYXNrX2Nsa19yZWcpIHsKKwkJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJBREVPTl9HUElPX1ZHQV9EREM6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzIpOworCQkJCWJyZWFrOworCQkJY2FzZSBSQURFT05fR1BJT19DUlQyX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURSTV9FUlJPUigiZ3BpbyBub3Qgc3VwcG9ydGVkIHdpdGggaHcgaTJjXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENISVBfUjMwMDoKKwkJY2FzZSBDSElQX1IzNTA6CisJCQkvKiBvbmx5IGJpdCA0IG9uIHIzMDAvcjM1MCAqLworCQkJc3dpdGNoIChyZWMtPm1hc2tfY2xrX3JlZykgeworCQkJY2FzZSBSQURFT05fR1BJT19WR0FfRERDOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURSTV9FUlJPUigiZ3BpbyBub3Qgc3VwcG9ydGVkIHdpdGggaHcgaTJjXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENISVBfUlYzNTA6CisJCWNhc2UgQ0hJUF9SVjM4MDoKKwkJY2FzZSBDSElQX1I0MjA6CisJCWNhc2UgQ0hJUF9SNDIzOgorCQljYXNlIENISVBfUlY0MTA6CisJCWNhc2UgQ0hJUF9SUzQwMDoKKwkJY2FzZSBDSElQX1JTNDgwOgorCQkJLyogYml0cyAzIGFuZCA0ICovCisJCQlzd2l0Y2ggKHJlYy0+bWFza19jbGtfcmVnKSB7CisJCQljYXNlIFJBREVPTl9HUElPX1ZHQV9EREM6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzEpOworCQkJCWJyZWFrOworCQkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkFERU9OX0dQSU9fTU9OSUQ6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigidW5zdXBwb3J0ZWQgYXNpY1xuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBkb25lOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayBmb3IgYnVzIHByb2JlICovCisJcCA9ICZtc2dzWzBdOworCWlmICgobnVtID09IDEpICYmIChwLT5sZW4gPT0gMCkpIHsKKwkJV1JFRzMyKGkyY19jbnRsXzAsIChSQURFT05fSTJDX0RPTkUgfAorCQkJCSAgICBSQURFT05fSTJDX05BQ0sgfAorCQkJCSAgICBSQURFT05fSTJDX0hBTFQgfAorCQkJCSAgICBSQURFT05fSTJDX1NPRlRfUlNUKSk7CisJCVdSRUczMihpMmNfZGF0YSwgKHAtPmFkZHIgPDwgMSkgJiAweGZmKTsKKwkJV1JFRzMyKGkyY19kYXRhLCAwKTsKKwkJV1JFRzMyKGkyY19jbnRsXzEsICgoMSA8PCBSQURFT05fSTJDX0RBVEFfQ09VTlRfU0hJRlQpIHwKKwkJCQkgICAgKDEgPDwgUkFERU9OX0kyQ19BRERSX0NPVU5UX1NISUZUKSB8CisJCQkJICAgIFJBREVPTl9JMkNfRU4gfAorCQkJCSAgICAoNDggPDwgUkFERU9OX0kyQ19USU1FX0xJTUlUX1NISUZUKSkpOworCQlXUkVHMzIoaTJjX2NudGxfMCwgcmVnKTsKKwkJZm9yIChrID0gMDsgayA8IDMyOyBrKyspIHsKKwkJCXVkZWxheSgxMCk7CisJCQl0bXAgPSBSUkVHMzIoaTJjX2NudGxfMCk7CisJCQlpZiAodG1wICYgUkFERU9OX0kyQ19HTykKKwkJCQljb250aW51ZTsKKwkJCXRtcCA9IFJSRUczMihpMmNfY250bF8wKTsKKwkJCWlmICh0bXAgJiBSQURFT05fSTJDX0RPTkUpCisJCQkJYnJlYWs7CisJCQllbHNlIHsKKwkJCQlEUk1fREVCVUcoImkyYyB3cml0ZSBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJV1JFRzMyKGkyY19jbnRsXzAsIHRtcCB8IFJBREVPTl9JMkNfQUJPUlQpOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJcCA9ICZtc2dzW2ldOworCQlmb3IgKGogPSAwOyBqIDwgcC0+bGVuOyBqKyspIHsKKwkJCWlmIChwLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkJV1JFRzMyKGkyY19jbnRsXzAsIChSQURFT05fSTJDX0RPTkUgfAorCQkJCQkJICAgIFJBREVPTl9JMkNfTkFDSyB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19IQUxUIHwKKwkJCQkJCSAgICBSQURFT05fSTJDX1NPRlRfUlNUKSk7CisJCQkJV1JFRzMyKGkyY19kYXRhLCAoKHAtPmFkZHIgPDwgMSkgJiAweGZmKSB8IDB4MSk7CisJCQkJV1JFRzMyKGkyY19jbnRsXzEsICgoMSA8PCBSQURFT05fSTJDX0RBVEFfQ09VTlRfU0hJRlQpIHwKKwkJCQkJCSAgICAoMSA8PCBSQURFT05fSTJDX0FERFJfQ09VTlRfU0hJRlQpIHwKKwkJCQkJCSAgICBSQURFT05fSTJDX0VOIHwKKwkJCQkJCSAgICAoNDggPDwgUkFERU9OX0kyQ19USU1FX0xJTUlUX1NISUZUKSkpOworCQkJCVdSRUczMihpMmNfY250bF8wLCByZWcgfCBSQURFT05fSTJDX1JFQ0VJVkUpOworCQkJCWZvciAoayA9IDA7IGsgPCAzMjsgaysrKSB7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJCXRtcCA9IFJSRUczMihpMmNfY250bF8wKTsKKwkJCQkJaWYgKHRtcCAmIFJBREVPTl9JMkNfR08pCisJCQkJCQljb250aW51ZTsKKwkJCQkJdG1wID0gUlJFRzMyKGkyY19jbnRsXzApOworCQkJCQlpZiAodG1wICYgUkFERU9OX0kyQ19ET05FKQorCQkJCQkJYnJlYWs7CisJCQkJCWVsc2UgeworCQkJCQkJRFJNX0RFQlVHKCJpMmMgcmVhZCBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJCQlXUkVHMzIoaTJjX2NudGxfMCwgdG1wIHwgUkFERU9OX0kyQ19BQk9SVCk7CisJCQkJCQlyZXQgPSAtRUlPOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJfQorCQkJCXAtPmJ1ZltqXSA9IFJSRUczMihpMmNfZGF0YSkgJiAweGZmOworCQkJfSBlbHNlIHsKKwkJCQlXUkVHMzIoaTJjX2NudGxfMCwgKFJBREVPTl9JMkNfRE9ORSB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19OQUNLIHwKKwkJCQkJCSAgICBSQURFT05fSTJDX0hBTFQgfAorCQkJCQkJICAgIFJBREVPTl9JMkNfU09GVF9SU1QpKTsKKwkJCQlXUkVHMzIoaTJjX2RhdGEsIChwLT5hZGRyIDw8IDEpICYgMHhmZik7CisJCQkJV1JFRzMyKGkyY19kYXRhLCBwLT5idWZbal0pOworCQkJCVdSRUczMihpMmNfY250bF8xLCAoKDEgPDwgUkFERU9OX0kyQ19EQVRBX0NPVU5UX1NISUZUKSB8CisJCQkJCQkgICAgKDEgPDwgUkFERU9OX0kyQ19BRERSX0NPVU5UX1NISUZUKSB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19FTiB8CisJCQkJCQkgICAgKDQ4IDw8IFJBREVPTl9JMkNfVElNRV9MSU1JVF9TSElGVCkpKTsKKwkJCQlXUkVHMzIoaTJjX2NudGxfMCwgcmVnKTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykgeworCQkJCQl1ZGVsYXkoMTApOworCQkJCQl0bXAgPSBSUkVHMzIoaTJjX2NudGxfMCk7CisJCQkJCWlmICh0bXAgJiBSQURFT05fSTJDX0dPKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcCA9IFJSRUczMihpMmNfY250bF8wKTsKKwkJCQkJaWYgKHRtcCAmIFJBREVPTl9JMkNfRE9ORSkKKwkJCQkJCWJyZWFrOworCQkJCQllbHNlIHsKKwkJCQkJCURSTV9ERUJVRygiaTJjIHdyaXRlIGVycm9yIDB4JTA4eFxuIiwgdG1wKTsKKwkJCQkJCVdSRUczMihpMmNfY250bF8wLCB0bXAgfCBSQURFT05fSTJDX0FCT1JUKTsKKwkJCQkJCXJldCA9IC1FSU87CisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJV1JFRzMyKGkyY19jbnRsXzAsIDApOworCVdSRUczMihpMmNfY250bF8xLCAwKTsKKwlXUkVHMzIoaTJjX2NudGxfMCwgKFJBREVPTl9JMkNfRE9ORSB8CisJCQkgICAgUkFERU9OX0kyQ19OQUNLIHwKKwkJCSAgICBSQURFT05fSTJDX0hBTFQgfAorCQkJICAgIFJBREVPTl9JMkNfU09GVF9SU1QpKTsKKworCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJdG1wID0gUlJFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCk7CisJCXRtcCAmPSB+QVRPTV9TNl9IV19JMkNfQlVTWV9TVEFURTsKKwkJV1JFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCwgdG1wKTsKKwl9CisKKwltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBodyBpMmMgZW5naW5lIGZvciByNXh4IGhhcmR3YXJlCisgKiBodyBjYW4gYnVmZmVyIHVwIHRvIDE1IGJ5dGVzCisgKi8KK3N0YXRpYyBpbnQgcjUwMF9od19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gaTJjLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKnJlYyA9ICZpMmMtPnJlYzsKKwlzdHJ1Y3QgaTJjX21zZyAqcDsKKwlpbnQgaSwgaiwgcmVtYWluaW5nLCBjdXJyZW50X2NvdW50LCBidWZmZXJfb2Zmc2V0LCByZXQgPSBudW07CisJdTMyIHByZXNjYWxlOworCXUzMiB0bXAsIHJlZzsKKwl1MzIgc2F2ZWQxLCBzYXZlZDI7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kY19od19pMmNfbXV0ZXgpOworCS8qIHRha2UgdGhlIHBtIGxvY2sgc2luY2Ugd2UgbmVlZCBhIGNvbnN0YW50IHNjbGsgKi8KKwltdXRleF9sb2NrKCZyZGV2LT5wbS5tdXRleCk7CisKKwlwcmVzY2FsZSA9IHJhZGVvbl9nZXRfaTJjX3ByZXNjYWxlKHJkZXYpOworCisJLyogY2xlYXIgZ3BpbyBtYXNrIGJpdHMgKi8KKwl0bXAgPSBSUkVHMzIocmVjLT5tYXNrX2Nsa19yZWcpOworCXRtcCAmPSB+cmVjLT5tYXNrX2Nsa19tYXNrOworCVdSRUczMihyZWMtPm1hc2tfY2xrX3JlZywgdG1wKTsKKwl0bXAgPSBSUkVHMzIocmVjLT5tYXNrX2Nsa19yZWcpOworCisJdG1wID0gUlJFRzMyKHJlYy0+bWFza19kYXRhX3JlZyk7CisJdG1wICY9IH5yZWMtPm1hc2tfZGF0YV9tYXNrOworCVdSRUczMihyZWMtPm1hc2tfZGF0YV9yZWcsIHRtcCk7CisJdG1wID0gUlJFRzMyKHJlYy0+bWFza19kYXRhX3JlZyk7CisKKwkvKiBjbGVhciBwaW4gdmFsdWVzICovCisJdG1wID0gUlJFRzMyKHJlYy0+YV9jbGtfcmVnKTsKKwl0bXAgJj0gfnJlYy0+YV9jbGtfbWFzazsKKwlXUkVHMzIocmVjLT5hX2Nsa19yZWcsIHRtcCk7CisJdG1wID0gUlJFRzMyKHJlYy0+YV9jbGtfcmVnKTsKKworCXRtcCA9IFJSRUczMihyZWMtPmFfZGF0YV9yZWcpOworCXRtcCAmPSB+cmVjLT5hX2RhdGFfbWFzazsKKwlXUkVHMzIocmVjLT5hX2RhdGFfcmVnLCB0bXApOworCXRtcCA9IFJSRUczMihyZWMtPmFfZGF0YV9yZWcpOworCisJLyogc2V0IHRoZSBwaW5zIHRvIGlucHV0ICovCisJdG1wID0gUlJFRzMyKHJlYy0+ZW5fY2xrX3JlZyk7CisJdG1wICY9IH5yZWMtPmVuX2Nsa19tYXNrOworCVdSRUczMihyZWMtPmVuX2Nsa19yZWcsIHRtcCk7CisJdG1wID0gUlJFRzMyKHJlYy0+ZW5fY2xrX3JlZyk7CisKKwl0bXAgPSBSUkVHMzIocmVjLT5lbl9kYXRhX3JlZyk7CisJdG1wICY9IH5yZWMtPmVuX2RhdGFfbWFzazsKKwlXUkVHMzIocmVjLT5lbl9kYXRhX3JlZywgdG1wKTsKKwl0bXAgPSBSUkVHMzIocmVjLT5lbl9kYXRhX3JlZyk7CisKKwkvKiAqLworCXRtcCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOworCVdSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gsIHRtcCB8IEFUT01fUzZfSFdfSTJDX0JVU1lfU1RBVEUpOworCXNhdmVkMSA9IFJSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDEpOworCXNhdmVkMiA9IFJSRUczMigweDQ5NCk7CisJV1JFRzMyKDB4NDk0LCBzYXZlZDIgfCAweDEpOworCisJV1JFRzMyKEFWSVZPX0RDX0kyQ19BUkJJVFJBVElPTiwgQVZJVk9fRENfSTJDX1NXX1dBTlRTX1RPX1VTRV9JMkMpOworCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKFJSRUczMihBVklWT19EQ19JMkNfQVJCSVRSQVRJT04pICYgQVZJVk9fRENfSTJDX1NXX0NBTl9VU0VfSTJDKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDUwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBpMmMgYnVzXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCisJcmVnID0gQVZJVk9fRENfSTJDX1NUQVJUIHwgQVZJVk9fRENfSTJDX1NUT1AgfCBBVklWT19EQ19JMkNfRU47CisJc3dpdGNoIChyZWMtPm1hc2tfY2xrX3JlZykgeworCWNhc2UgQVZJVk9fRENfR1BJT19EREMxX01BU0s6CisJCXJlZyB8PSBBVklWT19EQ19JMkNfUElOX1NFTEVDVChBVklWT19TRUxfRERDMSk7CisJCWJyZWFrOworCWNhc2UgQVZJVk9fRENfR1BJT19EREMyX01BU0s6CisJCXJlZyB8PSBBVklWT19EQ19JMkNfUElOX1NFTEVDVChBVklWT19TRUxfRERDMik7CisJCWJyZWFrOworCWNhc2UgQVZJVk9fRENfR1BJT19EREMzX01BU0s6CisJCXJlZyB8PSBBVklWT19EQ19JMkNfUElOX1NFTEVDVChBVklWT19TRUxfRERDMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiZ3BpbyBub3Qgc3VwcG9ydGVkIHdpdGggaHcgaTJjXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCS8qIGNoZWNrIGZvciBidXMgcHJvYmUgKi8KKwlwID0gJm1zZ3NbMF07CisJaWYgKChudW0gPT0gMSkgJiYgKHAtPmxlbiA9PSAwKSkgeworCQlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIChBVklWT19EQ19JMkNfRE9ORSB8CisJCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19OQUNLIHwKKwkJCQkJICAgICAgQVZJVk9fRENfSTJDX0hBTFQpKTsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgQVZJVk9fRENfSTJDX1NPRlRfUkVTRVQpOworCQl1ZGVsYXkoMSk7CisJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIDApOworCisJCVdSRUczMihBVklWT19EQ19JMkNfREFUQSwgKHAtPmFkZHIgPDwgMSkgJiAweGZmKTsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19EQVRBLCAwKTsKKworCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wzLCBBVklWT19EQ19JMkNfVElNRV9MSU1JVCg0OCkpOworCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wyLCAoQVZJVk9fRENfSTJDX0FERFJfQ09VTlQoMSkgfAorCQkJCQkgICAgICAgQVZJVk9fRENfSTJDX0RBVEFfQ09VTlQoMSkgfAorCQkJCQkgICAgICAgKHByZXNjYWxlIDw8IDE2KSkpOworCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wxLCByZWcpOworCQlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIEFWSVZPX0RDX0kyQ19HTyk7CisJCWZvciAoaiA9IDA7IGogPCAyMDA7IGorKykgeworCQkJdWRlbGF5KDUwKTsKKwkJCXRtcCA9IFJSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSk7CisJCQlpZiAodG1wICYgQVZJVk9fRENfSTJDX0dPKQorCQkJCWNvbnRpbnVlOworCQkJdG1wID0gUlJFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxKTsKKwkJCWlmICh0bXAgJiBBVklWT19EQ19JMkNfRE9ORSkKKwkJCQlicmVhazsKKwkJCWVsc2UgeworCQkJCURSTV9ERUJVRygiaTJjIHdyaXRlIGVycm9yIDB4JTA4eFxuIiwgdG1wKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCBBVklWT19EQ19JMkNfQUJPUlQpOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJcCA9ICZtc2dzW2ldOworCQlyZW1haW5pbmcgPSBwLT5sZW47CisJCWJ1ZmZlcl9vZmZzZXQgPSAwOworCQlpZiAocC0+ZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJd2hpbGUgKHJlbWFpbmluZykgeworCQkJCWlmIChyZW1haW5pbmcgPiAxNSkKKwkJCQkJY3VycmVudF9jb3VudCA9IDE1OworCQkJCWVsc2UKKwkJCQkJY3VycmVudF9jb3VudCA9IHJlbWFpbmluZzsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIChBVklWT19EQ19JMkNfRE9ORSB8CisJCQkJCQkJICAgICAgQVZJVk9fRENfSTJDX05BQ0sgfAorCQkJCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19IQUxUKSk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgQVZJVk9fRENfSTJDX1NPRlRfUkVTRVQpOworCQkJCXVkZWxheSgxKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCAwKTsKKworCQkJCVdSRUczMihBVklWT19EQ19JMkNfREFUQSwgKChwLT5hZGRyIDw8IDEpICYgMHhmZikgfCAweDEpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDMsIEFWSVZPX0RDX0kyQ19USU1FX0xJTUlUKDQ4KSk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMiwgKEFWSVZPX0RDX0kyQ19BRERSX0NPVU5UKDEpIHwKKwkJCQkJCQkgICAgICAgQVZJVk9fRENfSTJDX0RBVEFfQ09VTlQoY3VycmVudF9jb3VudCkgfAorCQkJCQkJCSAgICAgICAocHJlc2NhbGUgPDwgMTYpKSk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMSwgcmVnIHwgQVZJVk9fRENfSTJDX1JFQ0VJVkUpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSwgQVZJVk9fRENfSTJDX0dPKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgMjAwOyBqKyspIHsKKwkJCQkJdWRlbGF5KDUwKTsKKwkJCQkJdG1wID0gUlJFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxKTsKKwkJCQkJaWYgKHRtcCAmIEFWSVZPX0RDX0kyQ19HTykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl0bXAgPSBSUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEpOworCQkJCQlpZiAodG1wICYgQVZJVk9fRENfSTJDX0RPTkUpCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZSB7CisJCQkJCQlEUk1fREVCVUcoImkyYyByZWFkIGVycm9yIDB4JTA4eFxuIiwgdG1wKTsKKwkJCQkJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIEFWSVZPX0RDX0kyQ19BQk9SVCk7CisJCQkJCQlyZXQgPSAtRUlPOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJfQorCQkJCWZvciAoaiA9IDA7IGogPCBjdXJyZW50X2NvdW50OyBqKyspCisJCQkJCXAtPmJ1ZltidWZmZXJfb2Zmc2V0ICsgal0gPSBSUkVHMzIoQVZJVk9fRENfSTJDX0RBVEEpICYgMHhmZjsKKwkJCQlyZW1haW5pbmcgLT0gY3VycmVudF9jb3VudDsKKwkJCQlidWZmZXJfb2Zmc2V0ICs9IGN1cnJlbnRfY291bnQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQl3aGlsZSAocmVtYWluaW5nKSB7CisJCQkJaWYgKHJlbWFpbmluZyA+IDE1KQorCQkJCQljdXJyZW50X2NvdW50ID0gMTU7CisJCQkJZWxzZQorCQkJCQljdXJyZW50X2NvdW50ID0gcmVtYWluaW5nOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSwgKEFWSVZPX0RDX0kyQ19ET05FIHwKKwkJCQkJCQkgICAgICBBVklWT19EQ19JMkNfTkFDSyB8CisJCQkJCQkJICAgICAgQVZJVk9fRENfSTJDX0hBTFQpKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCBBVklWT19EQ19JMkNfU09GVF9SRVNFVCk7CisJCQkJdWRlbGF5KDEpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIDApOworCisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19EQVRBLCAocC0+YWRkciA8PCAxKSAmIDB4ZmYpOworCQkJCWZvciAoaiA9IDA7IGogPCBjdXJyZW50X2NvdW50OyBqKyspCisJCQkJCVdSRUczMihBVklWT19EQ19JMkNfREFUQSwgcC0+YnVmW2J1ZmZlcl9vZmZzZXQgKyBqXSk7CisKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wzLCBBVklWT19EQ19JMkNfVElNRV9MSU1JVCg0OCkpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDIsIChBVklWT19EQ19JMkNfQUREUl9DT1VOVCgxKSB8CisJCQkJCQkJICAgICAgIEFWSVZPX0RDX0kyQ19EQVRBX0NPVU5UKGN1cnJlbnRfY291bnQpIHwKKwkJCQkJCQkgICAgICAgKHByZXNjYWxlIDw8IDE2KSkpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDEsIHJlZyk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxLCBBVklWT19EQ19JMkNfR08pOworCQkJCWZvciAoaiA9IDA7IGogPCAyMDA7IGorKykgeworCQkJCQl1ZGVsYXkoNTApOworCQkJCQl0bXAgPSBSUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEpOworCQkJCQlpZiAodG1wICYgQVZJVk9fRENfSTJDX0dPKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcCA9IFJSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSk7CisJCQkJCWlmICh0bXAgJiBBVklWT19EQ19JMkNfRE9ORSkKKwkJCQkJCWJyZWFrOworCQkJCQllbHNlIHsKKwkJCQkJCURSTV9ERUJVRygiaTJjIHdyaXRlIGVycm9yIDB4JTA4eFxuIiwgdG1wKTsKKwkJCQkJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIEFWSVZPX0RDX0kyQ19BQk9SVCk7CisJCQkJCQlyZXQgPSAtRUlPOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJfQorCQkJCXJlbWFpbmluZyAtPSBjdXJyZW50X2NvdW50OworCQkJCWJ1ZmZlcl9vZmZzZXQgKz0gY3VycmVudF9jb3VudDsKKwkJCX0KKwkJfQorCX0KKworZG9uZToKKwlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIChBVklWT19EQ19JMkNfRE9ORSB8CisJCQkJICAgICAgQVZJVk9fRENfSTJDX05BQ0sgfAorCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19IQUxUKSk7CisJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgQVZJVk9fRENfSTJDX1NPRlRfUkVTRVQpOworCXVkZWxheSgxKTsKKwlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCAwKTsKKworCVdSRUczMihBVklWT19EQ19JMkNfQVJCSVRSQVRJT04sIEFWSVZPX0RDX0kyQ19TV19ET05FX1VTSU5HX0kyQyk7CisJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMSwgc2F2ZWQxKTsKKwlXUkVHMzIoMHg0OTQsIHNhdmVkMik7CisJdG1wID0gUlJFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCk7CisJdG1wICY9IH5BVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFOworCVdSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gsIHRtcCk7CisKKwltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJhZGVvbl9zd19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJICAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJaW50IHJldDsKKworCXJhZGVvbl9pMmNfZG9fbG9jayhpMmMsIDEpOworCXJldCA9IGkyY190cmFuc2ZlcigmaTJjLT5hbGdvLnJhZGVvbi5iaXRfYWRhcHRlciwgbXNncywgbnVtKTsKKwlyYWRlb25faTJjX2RvX2xvY2soaTJjLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGkyYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICpyZWMgPSAmaTJjLT5yZWM7CisJaW50IHJldDsKKworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1IxMDA6CisJY2FzZSBDSElQX1JWMTAwOgorCWNhc2UgQ0hJUF9SUzEwMDoKKwljYXNlIENISVBfUlYyMDA6CisJY2FzZSBDSElQX1JTMjAwOgorCWNhc2UgQ0hJUF9SMjAwOgorCWNhc2UgQ0hJUF9SVjI1MDoKKwljYXNlIENISVBfUlMzMDA6CisJY2FzZSBDSElQX1JWMjgwOgorCWNhc2UgQ0hJUF9SMzAwOgorCWNhc2UgQ0hJUF9SMzUwOgorCWNhc2UgQ0hJUF9SVjM1MDoKKwljYXNlIENISVBfUlYzODA6CisJY2FzZSBDSElQX1I0MjA6CisJY2FzZSBDSElQX1I0MjM6CisJY2FzZSBDSElQX1JWNDEwOgorCWNhc2UgQ0hJUF9SUzQwMDoKKwljYXNlIENISVBfUlM0ODA6CisJCWlmIChyZWMtPmh3X2NhcGFibGUpCisJCQlyZXQgPSByMTAwX2h3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQllbHNlCisJCQlyZXQgPSByYWRlb25fc3dfaTJjX3hmZXIoaTJjX2FkYXAsIG1zZ3MsIG51bSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SUzYwMDoKKwljYXNlIENISVBfUlM2OTA6CisJY2FzZSBDSElQX1JTNzQwOgorCQkvKiBYWFggZmlsbCBpbiBodyBpMmMgaW1wbGVtZW50YXRpb24gKi8KKwkJcmV0ID0gcmFkZW9uX3N3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQlicmVhazsKKwljYXNlIENISVBfUlY1MTU6CisJY2FzZSBDSElQX1I1MjA6CisJY2FzZSBDSElQX1JWNTMwOgorCWNhc2UgQ0hJUF9SVjU2MDoKKwljYXNlIENISVBfUlY1NzA6CisJY2FzZSBDSElQX1I1ODA6CisJCWlmIChyZWMtPmh3X2NhcGFibGUpIHsKKwkJCWlmIChyZWMtPm1tX2kyYykKKwkJCQlyZXQgPSByMTAwX2h3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQkJZWxzZQorCQkJCXJldCA9IHI1MDBfaHdfaTJjX3hmZXIoaTJjX2FkYXAsIG1zZ3MsIG51bSk7CisJCX0gZWxzZQorCQkJcmV0ID0gcmFkZW9uX3N3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQlicmVhazsKKwljYXNlIENISVBfUjYwMDoKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjY3MDoKKwkJLyogWFhYIGZpbGwgaW4gaHcgaTJjIGltcGxlbWVudGF0aW9uICovCisJCXJldCA9IHJhZGVvbl9zd19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgorCWNhc2UgQ0hJUF9SVjc3MDoKKwljYXNlIENISVBfUlY3MzA6CisJY2FzZSBDSElQX1JWNzEwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJLyogWFhYIGZpbGwgaW4gaHcgaTJjIGltcGxlbWVudGF0aW9uICovCisJCXJldCA9IHJhZGVvbl9zd19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0NFREFSOgorCWNhc2UgQ0hJUF9SRURXT09EOgorCWNhc2UgQ0hJUF9KVU5JUEVSOgorCWNhc2UgQ0hJUF9DWVBSRVNTOgorCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQkvKiBYWFggZmlsbCBpbiBodyBpMmMgaW1wbGVtZW50YXRpb24gKi8KKwkJcmV0ID0gcmFkZW9uX3N3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoImkyYzogdW5oYW5kbGVkIHJhZGVvbiBjaGlwXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByYWRlb25faTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gcmFkZW9uX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IHJhZGVvbl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IHJhZGVvbl9pMmNfZnVuYywKK307CisKIHN0cnVjdCByYWRlb25faTJjX2NoYW4gKnJhZGVvbl9pMmNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqcmVjLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xNzksMjMgKzg3OCwzNiBAQAogCWlmIChpMmMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpMmMtPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKLQlpMmMtPmRldiA9IGRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXB0ZXIsIGkyYyk7Ci0JaTJjLT5hZGFwdGVyLmFsZ29fZGF0YSA9ICZpMmMtPmFsZ28uYml0OwotCWkyYy0+YWxnby5iaXQuc2V0c2RhID0gc2V0X2RhdGE7Ci0JaTJjLT5hbGdvLmJpdC5zZXRzY2wgPSBzZXRfY2xvY2s7Ci0JaTJjLT5hbGdvLmJpdC5nZXRzZGEgPSBnZXRfZGF0YTsKLQlpMmMtPmFsZ28uYml0LmdldHNjbCA9IGdldF9jbG9jazsKLQlpMmMtPmFsZ28uYml0LnVkZWxheSA9IDIwOworCS8qIHNldCB0aGUgaW50ZXJuYWwgYml0IGFkYXB0ZXIgKi8KKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hbGdvLnJhZGVvbi5iaXRfYWRhcHRlciwgaTJjKTsKKwlzcHJpbnRmKGkyYy0+YWxnby5yYWRlb24uYml0X2FkYXB0ZXIubmFtZSwgIlJhZGVvbiBpbnRlcm5hbCBpMmMgYml0IGJ1cyAlcyIsIG5hbWUpOworCWkyYy0+YWxnby5yYWRlb24uYml0X2FkYXB0ZXIuYWxnb19kYXRhID0gJmkyYy0+YWxnby5yYWRlb24uYml0X2RhdGE7CisJaTJjLT5hbGdvLnJhZGVvbi5iaXRfZGF0YS5zZXRzZGEgPSBzZXRfZGF0YTsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhLnNldHNjbCA9IHNldF9jbG9jazsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhLmdldHNkYSA9IGdldF9kYXRhOworCWkyYy0+YWxnby5yYWRlb24uYml0X2RhdGEuZ2V0c2NsID0gZ2V0X2Nsb2NrOworCWkyYy0+YWxnby5yYWRlb24uYml0X2RhdGEudWRlbGF5ID0gMjA7CiAJLyogdmVzYSBzYXlzIDIuMiBtcyBpcyBlbm91Z2gsIDEgamlmZnkgZG9lc24ndCBzZWVtIHRvIGFsd2F5cwogCSAqIG1ha2UgdGhpcywgMiBqaWZmaWVzIGlzIGEgbG90IG1vcmUgcmVsaWFibGUgKi8KLQlpMmMtPmFsZ28uYml0LnRpbWVvdXQgPSAyOwotCWkyYy0+YWxnby5iaXQuZGF0YSA9IGkyYzsKLQlpMmMtPnJlYyA9ICpyZWM7Ci0JcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZpMmMtPmFkYXB0ZXIpOworCWkyYy0+YWxnby5yYWRlb24uYml0X2RhdGEudGltZW91dCA9IDI7CisJaTJjLT5hbGdvLnJhZGVvbi5iaXRfZGF0YS5kYXRhID0gaTJjOworCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hbGdvLnJhZGVvbi5iaXRfYWRhcHRlcik7CiAJaWYgKHJldCkgewotCQlEUk1fSU5GTygiRmFpbGVkIHRvIHJlZ2lzdGVyIGkyYyAlc1xuIiwgbmFtZSk7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGludGVybmFsIGJpdCBpMmMgJXNcbiIsIG5hbWUpOworCQlnb3RvIG91dF9mcmVlOworCX0KKwkvKiBzZXQgdGhlIHJhZGVvbiBpMmMgYWRhcHRlciAqLworCWkyYy0+ZGV2ID0gZGV2OworCWkyYy0+cmVjID0gKnJlYzsKKwlpMmMtPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXB0ZXIsIGkyYyk7CisJc3ByaW50ZihpMmMtPmFkYXB0ZXIubmFtZSwgIlJhZGVvbiBpMmMgJXMiLCBuYW1lKTsKKwlpMmMtPmFkYXB0ZXIuYWxnb19kYXRhID0gJmkyYy0+YWxnby5yYWRlb247CisJaTJjLT5hZGFwdGVyLmFsZ28gPSAmcmFkZW9uX2kyY19hbGdvOworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwdGVyKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGkyYyAlc1xuIiwgbmFtZSk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0yMzcsMTEgKzk0OSwxOSBAQAogCiB9CiAKLQogdm9pZCByYWRlb25faTJjX2Rlc3Ryb3koc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjKQogewogCWlmICghaTJjKQogCQlyZXR1cm47CisJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFsZ28ucmFkZW9uLmJpdF9hZGFwdGVyKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcHRlcik7CisJa2ZyZWUoaTJjKTsKK30KKwordm9pZCByYWRlb25faTJjX2Rlc3Ryb3lfZHAoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjKQoreworCWlmICghaTJjKQorCQlyZXR1cm47CiAKIAlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcHRlcik7CiAJa2ZyZWUoaTJjKTsKQEAgLTI1MiwxMCArOTcyLDEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgcmFkZW9uX2kyY19zd19nZXRfYnl0ZShzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzLAotCQkJICAgIHU4IHNsYXZlX2FkZHIsCi0JCQkgICAgdTggYWRkciwKLQkJCSAgICB1OCAqdmFsKQordm9pZCByYWRlb25faTJjX2dldF9ieXRlKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyY19idXMsCisJCQkgdTggc2xhdmVfYWRkciwKKwkJCSB1OCBhZGRyLAorCQkJIHU4ICp2YWwpCiB7CiAJdTggb3V0X2J1ZlsyXTsKIAl1OCBpbl9idWZbMl07CkBAIC0yODYsMTAgKzEwMDYsMTAgQEAKIAl9CiB9CiAKLXZvaWQgcmFkZW9uX2kyY19zd19wdXRfYnl0ZShzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzLAotCQkJICAgIHU4IHNsYXZlX2FkZHIsCi0JCQkgICAgdTggYWRkciwKLQkJCSAgICB1OCB2YWwpCit2b2lkIHJhZGVvbl9pMmNfcHV0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1cywKKwkJCSB1OCBzbGF2ZV9hZGRyLAorCQkJIHU4IGFkZHIsCisJCQkgdTggdmFsKQogewogCXVpbnQ4X3Qgb3V0X2J1ZlsyXTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCmluZGV4IGYyM2IwNTYuLjIwZWMyNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogCisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KKwogaW50IHJhZGVvbl9kcml2ZXJfdW5sb2FkX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTEzNiw2ICsxMzgsNyBAQAogCiB2b2lkIHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2goKTsKIH0KIAogaW50IHJhZGVvbl9kcml2ZXJfb3Blbl9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCkBAIC0yNzYsMTcgKzI3OSwxNyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9TVVJGX0FMTE9DLCByYWRlb25fc3VyZmFjZV9hbGxvY19rbXMsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9SQURFT05fU1VSRl9GUkVFLCByYWRlb25fc3VyZmFjZV9mcmVlX2ttcywgRFJNX0FVVEgpLAogCS8qIEtNUyAqLwotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fSU5GTywgcmFkZW9uX2dlbV9pbmZvX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9DUkVBVEUsIHJhZGVvbl9nZW1fY3JlYXRlX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9NTUFQLCByYWRlb25fZ2VtX21tYXBfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1NFVF9ET01BSU4sIHJhZGVvbl9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fUFJFQUQsIHJhZGVvbl9nZW1fcHJlYWRfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1BXUklURSwgcmFkZW9uX2dlbV9wd3JpdGVfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1dBSVRfSURMRSwgcmFkZW9uX2dlbV93YWl0X2lkbGVfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fQ1MsIHJhZGVvbl9jc19pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9JTkZPLCByYWRlb25faW5mb19pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fU0VUX1RJTElORywgcmFkZW9uX2dlbV9zZXRfdGlsaW5nX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9HRVRfVElMSU5HLCByYWRlb25fZ2VtX2dldF90aWxpbmdfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0JVU1ksIHJhZGVvbl9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fSU5GTywgcmFkZW9uX2dlbV9pbmZvX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fQ1JFQVRFLCByYWRlb25fZ2VtX2NyZWF0ZV9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX01NQVAsIHJhZGVvbl9nZW1fbW1hcF9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1NFVF9ET01BSU4sIHJhZGVvbl9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1BSRUFELCByYWRlb25fZ2VtX3ByZWFkX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fUFdSSVRFLCByYWRlb25fZ2VtX3B3cml0ZV9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1dBSVRfSURMRSwgcmFkZW9uX2dlbV93YWl0X2lkbGVfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0NTLCByYWRlb25fY3NfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0lORk8sIHJhZGVvbl9pbmZvX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fU0VUX1RJTElORywgcmFkZW9uX2dlbV9zZXRfdGlsaW5nX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fR0VUX1RJTElORywgcmFkZW9uX2dlbV9nZXRfdGlsaW5nX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fQlVTWSwgcmFkZW9uX2dlbV9idXN5X2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAogfTsKIGludCByYWRlb25fbWF4X2ttc19pb2N0bCA9IERSTV9BUlJBWV9TSVpFKHJhZGVvbl9pb2N0bHNfa21zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IGI2ZDgwODEuLmRmMjNkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAKIAkvKiBpZiBzY2Fub3V0IHdhcyBpbiBHVFQgdGhpcyByZWFsbHkgd291bGRuJ3Qgd29yayAqLwogCS8qIGNydGMgb2Zmc2V0IGlzIGZyb20gZGlzcGxheSBiYXNlIGFkZHIgbm90IEZCIGxvY2F0aW9uICovCi0JcmFkZW9uX2NydGMtPmxlZ2FjeV9kaXNwbGF5X2Jhc2VfYWRkciA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJcmFkZW9uX2NydGMtPmxlZ2FjeV9kaXNwbGF5X2Jhc2VfYWRkciA9IHJkZXYtPm1jLnZyYW1fc3RhcnQ7CiAKIAliYXNlIC09IHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAKQEAgLTU4MiwyOSArNTgyLDYgQEAKIAkJCQkgICA/IFJBREVPTl9DUlRDX1ZfU1lOQ19QT0wKIAkJCQkgICA6IDApKTsKIAotCS8qIFRPRE8gLT4gRGVsbCBTZXJ2ZXIgKi8KLQlpZiAoMCkgewotCQl1aW50MzJfdCBkaXNwX2h3X2RlYnVnID0gUlJFRzMyKFJBREVPTl9ESVNQX0hXX0RFQlVHKTsKLQkJdWludDMyX3QgdHZfZGFjX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKLQkJdWludDMyX3QgZGFjMl9jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTDIpOwotCQl1aW50MzJfdCBjcnRjMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwpOwotCi0JCWRhYzJfY250bCAmPSB+UkFERU9OX0RBQzJfREFDX0NMS19TRUw7Ci0JCWRhYzJfY250bCB8PSBSQURFT05fREFDMl9EQUMyX0NMS19TRUw7Ci0KLQkJLyogRm9yIENSVCBvbiBEQUMyLCBkb24ndCB0dXJuIGl0IG9uIGlmIEJJT1MgZGlkbid0Ci0JCSAgIGVuYWJsZSBpdCwgZXZlbiBpdCdzIGRldGVjdGVkLgotCQkqLwotCQlkaXNwX2h3X2RlYnVnIHw9IFJBREVPTl9DUlQyX0RJU1AxX1NFTDsKLQkJdHZfZGFjX2NudGwgJj0gfigoMTw8MikgfCAoMzw8OCkgfCAoNzw8MjQpIHwgKDB4ZmY8PDE2KSk7Ci0JCXR2X2RhY19jbnRsIHw9ICgweDAzIHwgKDI8PDgpIHwgKDB4NTg8PDE2KSk7Ci0KLQkJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOwotCQlXUkVHMzIoUkFERU9OX0RJU1BfSFdfREVCVUcsIGRpc3BfaHdfZGVidWcpOwotCQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKLQkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOwotCX0KLQogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkgewogCQl1aW50MzJfdCBjcnRjMl9nZW5fY250bDsKIAkJdWludDMyX3QgZGlzcDJfbWVyZ2VfY250bDsKQEAgLTcyNiw2ICs3MDMsMTAgQEAKIAkJcGxsID0gJnJkZXYtPmNsb2NrLnAxcGxsOwogCiAJcGxsLT5mbGFncyA9IFJBREVPTl9QTExfTEVHQUNZOworCWlmIChyYWRlb25fbmV3X3BsbCA9PSAxKQorCQlwbGwtPmFsZ28gPSBQTExfQUxHT19ORVc7CisJZWxzZQorCQlwbGwtPmFsZ28gPSBQTExfQUxHT19MRUdBQ1k7CiAKIAlpZiAobW9kZS0+Y2xvY2sgPiAyMDAwMDApIC8qIHJhbmdlIGxpbWl0cz8/PyAqLwogCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCAzOGU0NWUyLi5jZjM4OWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtMTE1LDYgKzExNSw5IEBACiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0yMTQsNiArMjE3LDExIEBACiAJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBhZGp1c3QgcG0gdG8gdXBjb21pbmcgbW9kZSBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CiAKIAkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCiAJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CkBAIC0yODUsNiArMjkzLDkgQEAKIAkJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOwogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CisKKwkvKiBhZGp1c3QgcG0gdG8gZHBtcyBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00NzAsNiArNDgxLDkgQEAKIAkJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOwogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CisKKwkvKiBhZGp1c3QgcG0gdG8gZHBtcyBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC02MzUsNiArNjQ5LDkgQEAKIAkJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOwogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CisKKwkvKiBhZGp1c3QgcG0gdG8gZHBtcyBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19leHRfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC04NDIsNiArODU5LDkgQEAKIAkJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOwogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CisKKwkvKiBhZGp1c3QgcG0gdG8gZHBtcyBjaGFuZ2UgKi8KKwlyYWRlb25fcG1fY29tcHV0ZV9jbG9ja3MocmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdHZfZGFjX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IGU4MWIyYWUuLjE3MDJiODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTgzLDYgKzgzLDggQEAKIAlib29sIHZhbGlkOwogCS8qIGlkIHVzZWQgYnkgYXRvbSAqLwogCXVpbnQ4X3QgaTJjX2lkOworCS8qIGlkIHVzZWQgYnkgYXRvbSAqLworCXVpbnQ4X3QgaHBkX2lkOwogCS8qIGNhbiBiZSB1c2VkIHdpdGggaHcgaTJjIGVuZ2luZSAqLwogCWJvb2wgaHdfY2FwYWJsZTsKIAkvKiB1c2VzIG11bHRpLW1lZGlhIGkyYyBlbmdpbmUgKi8KQEAgLTExMyw2ICsxMTUsNyBAQAogCiAjZGVmaW5lIFJBREVPTl9NQVhfQklPU19DT05ORUNUT1IgMTYKIAorLyogcGxsIGZsYWdzICovCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX0JJT1NfRElWUyAgICAgICAgKDEgPDwgMCkKICNkZWZpbmUgUkFERU9OX1BMTF9OT19PRERfUE9TVF9ESVYgICAgICAoMSA8PCAxKQogI2RlZmluZSBSQURFT05fUExMX1VTRV9SRUZfRElWICAgICAgICAgICgxIDw8IDIpCkBAIC0xMjcsNiArMTMwLDEyIEBACiAjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVIgKDEgPDwgMTEpCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX1BPU1RfRElWICAgICAgICAgKDEgPDwgMTIpCiAKKy8qIHBsbCBhbGdvICovCitlbnVtIHJhZGVvbl9wbGxfYWxnbyB7CisJUExMX0FMR09fTEVHQUNZLAorCVBMTF9BTEdPX05FVworfTsKKwogc3RydWN0IHJhZGVvbl9wbGwgewogCS8qIHJlZmVyZW5jZSBmcmVxdWVuY3kgKi8KIAl1aW50MzJfdCByZWZlcmVuY2VfZnJlcTsKQEAgLTE1Nyw2ICsxNjYsMTMgQEAKIAogCS8qIHBsbCBpZCAqLwogCXVpbnQzMl90IGlkOworCS8qIHBsbCBhbGdvICovCisJZW51bSByYWRlb25fcGxsX2FsZ28gYWxnbzsKK307CisKK3N0cnVjdCBpMmNfYWxnb19yYWRlb25fZGF0YSB7CisJc3RydWN0IGkyY19hZGFwdGVyIGJpdF9hZGFwdGVyOworCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBiaXRfZGF0YTsKIH07CiAKIHN0cnVjdCByYWRlb25faTJjX2NoYW4gewpAQCAtMTY0LDcgKzE4MCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSBkcDsKLQkJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGJpdDsKKwkJc3RydWN0IGkyY19hbGdvX3JhZGVvbl9kYXRhIHJhZGVvbjsKIAl9IGFsZ287CiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyByZWM7CiB9OwpAQCAtMTkzLDcgKzIwOSw3IEBACiAJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm87CiAJZW51bSByYWRlb25fY29ubmVjdG9yX3RhYmxlIGNvbm5lY3Rvcl90YWJsZTsKIAlib29sIG1vZGVfY29uZmlnX2luaXRpYWxpemVkOwotCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbMl07CisJc3RydWN0IHJhZGVvbl9jcnRjICpjcnRjc1s2XTsKIAkvKiBEVkktSSBwcm9wZXJ0aWVzICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqY29oZXJlbnRfbW9kZV9wcm9wZXJ0eTsKIAkvKiBEQUMgZW5hYmxlIGxvYWQgZGV0ZWN0ICovCkBAIC0yMDIsNyArMjE4LDggQEAKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9zdGRfcHJvcGVydHk7CiAJLyogbGVnYWN5IFRNRFMgUExMIGRldGVjdCAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKnRtZHNfcGxsX3Byb3BlcnR5OwotCisJLyogaGFyZGNvZGVkIERGUCBlZGlkIGZyb20gQklPUyAqLworCXN0cnVjdCBlZGlkICpiaW9zX2hhcmRjb2RlZF9lZGlkOwogfTsKIAogI2RlZmluZSBNQVhfSF9DT0RFX1RJTUlOR19MRU4gMzIKQEAgLTIzNyw2ICsyNTQsNyBAQAogCWZpeGVkMjBfMTIgdnNjOwogCWZpeGVkMjBfMTIgaHNjOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOworCWludCBwbGxfaWQ7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgewpAQCAtMzAzLDYgKzMyMSw3IEBACiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKKwllbnVtIHJhZGVvbl9wbGxfYWxnbyBwbGxfYWxnbzsKIAlzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzOwogCS8qIHBhbmVsIG1vZGUgKi8KIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKQEAgLTM5OCw2ICs0MTcsNyBAQAogCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIGV4dGVybiB1OCByYWRlb25fZHBfZ2V0c2lua3R5cGUoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2RwX2dldGRwY2Qoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOworZXh0ZXJuIHZvaWQgYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgYWN0aW9uKTsKIGV4dGVybiB2b2lkIGF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJCSAgIGludCBhY3Rpb24sIHVpbnQ4X3QgbGFuZV9udW0sCiAJCQkJCSAgIHVpbnQ4X3QgbGFuZV9zZXQpOwpAQCAtNDExLDE0ICs0MzEsMTUgQEAKIAkJCQkJCSBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICpyZWMsCiAJCQkJCQkgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCByYWRlb25faTJjX2Rlc3Ryb3koc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjKTsKLWV4dGVybiB2b2lkIHJhZGVvbl9pMmNfc3dfZ2V0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1cywKLQkJCQkgICB1OCBzbGF2ZV9hZGRyLAotCQkJCSAgIHU4IGFkZHIsCi0JCQkJICAgdTggKnZhbCk7Ci1leHRlcm4gdm9pZCByYWRlb25faTJjX3N3X3B1dF9ieXRlKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYywKLQkJCQkgICB1OCBzbGF2ZV9hZGRyLAotCQkJCSAgIHU4IGFkZHIsCi0JCQkJICAgdTggdmFsKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9pMmNfZGVzdHJveV9kcChzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2kyY19nZXRfYnl0ZShzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzLAorCQkJCXU4IHNsYXZlX2FkZHIsCisJCQkJdTggYWRkciwKKwkJCQl1OCAqdmFsKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9pMmNfcHV0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjLAorCQkJCXU4IHNsYXZlX2FkZHIsCisJCQkJdTggYWRkciwKKwkJCQl1OCB2YWwpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2RkY19wcm9iZShzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiBleHRlcm4gaW50IHJhZGVvbl9kZGNfZ2V0X21vZGVzKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKIApAQCAtNDMyLDE0ICs0NTMsNiBAQAogCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCiAJCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOwogCi1leHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8oc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKLQkJCQkgICAgIHVpbnQ2NF90IGZyZXEsCi0JCQkJICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQkJICAgICB1aW50MzJfdCAqZmJfZGl2X3AsCi0JCQkJICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKLQkJCQkgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQkJICAgICB1aW50MzJfdCAqcG9zdF9kaXZfcCk7Ci0KIGV4dGVybiB2b2lkIHJhZGVvbl9zZXR1cF9lbmNvZGVyX2Nsb25lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogc3RydWN0IGRybV9lbmNvZGVyICpyYWRlb25fZW5jb2Rlcl9sZWdhY3lfbHZkc19hZGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGJpb3NfaW5kZXgpOwpAQCAtNDczLDYgKzQ4Niw5IEBACiBleHRlcm4gaW50IHJhZGVvbl9jcnRjX2N1cnNvcl9tb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICBpbnQgeCwgaW50IHkpOwogCitleHRlcm4gYm9vbCByYWRlb25fY29tYmlvc19jaGVja19oYXJkY29kZWRfZWRpZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gc3RydWN0IGVkaWQgKgorcmFkZW9uX2NvbWJpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBib29sIHJhZGVvbl9hdG9tX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2NvbWJpb3NfZ2V0X2Nsb2NrX2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICoKQEAgLTUzMSw3ICs1NDcsNiBAQAogCQkJICAgICAgIHN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMpOwogdm9pZCByYWRlb25fbGVnYWN5X2luaXRfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjKTsKLWV4dGVybiB2b2lkIHJhZGVvbl9pMmNfZG9fbG9jayhzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMsIGludCBsb2NrX3N0YXRlKTsKIAogdm9pZCByYWRlb25fZ2V0X2Nsb2NrX2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggZjFkYTM3MC4uZmM5ZDAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTE3OCw3ICsxNzgsNiBAQAogewogCWludCByLCBpOwogCi0JcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIGRvbWFpbik7CiAJaWYgKGJvLT5waW5fY291bnQpIHsKIAkJYm8tPnBpbl9jb3VudCsrOwogCQlpZiAoZ3B1X2FkZHIpCkBAIC0xODYsNiArMTg1LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCXJhZGVvbl90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBkb21haW4pOworCS8qIGZvcmNlIHRvIHBpbiBpbnRvIHZpc2libGUgdmlkZW8gcmFtICovCisJYm8tPnBsYWNlbWVudC5scGZuID0gYm8tPnJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID4+IFBBR0VfU0hJRlQ7CiAJZm9yIChpID0gMDsgaSA8IGJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudDsgaSsrKQogCQliby0+cGxhY2VtZW50c1tpXSB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKIAlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVudCwgZmFsc2UsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDhiY2U2NGMuLmQ0ZDFjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtMTgsMjEgKzE4LDQxMyBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqIEF1dGhvcnM6IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqICAgICAgICAgIEFsZXggRGV1Y2hlciA8YWxleGRldWNoZXJAZ21haWwuY29tPgogICovCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgImF2aXZvZC5oIgogCi1pbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisjZGVmaW5lIFJBREVPTl9JRExFX0xPT1BfTVMgMTAwCisjZGVmaW5lIFJBREVPTl9SRUNMT0NLX0RFTEFZX01TIDIwMAorI2RlZmluZSBSQURFT05fV0FJVF9WQkxBTktfVElNRU9VVCAyMDAKKworc3RhdGljIHZvaWQgcmFkZW9uX3BtX3NldF9jbG9ja3NfbG9ja2VkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3N0YXRpYyB2b2lkIHJhZGVvbl9wbV9zZXRfY2xvY2tzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3N0YXRpYyB2b2lkIHJhZGVvbl9wbV9pZGxlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnBtX3N0YXRlX25hbWVzWzRdID0geworCSJQTV9TVEFURV9ESVNBQkxFRCIsCisJIlBNX1NUQVRFX01JTklNVU0iLAorCSJQTV9TVEFURV9QQVVTRUQiLAorCSJQTV9TVEFURV9BQ1RJVkUiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcG1fc3RhdGVfdHlwZXNbNV0gPSB7CisJIkRlZmF1bHQiLAorCSJQb3dlcnNhdmUiLAorCSJCYXR0ZXJ5IiwKKwkiQmFsYW5jZWQiLAorCSJQZXJmb3JtYW5jZSIsCit9OworCitzdGF0aWMgdm9pZCByYWRlb25fcHJpbnRfcG93ZXJfbW9kZV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBpLCBqOworCWJvb2wgaXNfZGVmYXVsdDsKKworCURSTV9JTkZPKCIlZCBQb3dlciBTdGF0ZShzKVxuIiwgcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyk7CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXM7IGkrKykgeworCQlpZiAocmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9PSAmcmRldi0+cG0ucG93ZXJfc3RhdGVbaV0pCisJCQlpc19kZWZhdWx0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJaXNfZGVmYXVsdCA9IGZhbHNlOworCQlEUk1fSU5GTygiU3RhdGUgJWQgJXMgJXNcbiIsIGksCisJCQkgcG1fc3RhdGVfdHlwZXNbcmRldi0+cG0ucG93ZXJfc3RhdGVbaV0udHlwZV0sCisJCQkgaXNfZGVmYXVsdCA/ICIoZGVmYXVsdCkiIDogIiIpOworCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpICYmICEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSkKKwkJCURSTV9JTkZPKCJcdCVkIFBDSUUgTGFuZXNcbiIsIHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMpOworCQlEUk1fSU5GTygiXHQlZCBDbG9jayBNb2RlKHMpXG4iLCByZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5udW1fY2xvY2tfbW9kZXMpOworCQlmb3IgKGogPSAwOyBqIDwgcmRldi0+cG0ucG93ZXJfc3RhdGVbaV0ubnVtX2Nsb2NrX21vZGVzOyBqKyspIHsKKwkJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCQkJRFJNX0lORk8oIlx0XHQlZCBlbmdpbmU6ICVkXG4iLAorCQkJCQkgaiwKKwkJCQkJIHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLmNsb2NrX2luZm9bal0uc2NsayAqIDEwKTsKKwkJCWVsc2UKKwkJCQlEUk1fSU5GTygiXHRcdCVkIGVuZ2luZS9tZW1vcnk6ICVkLyVkXG4iLAorCQkJCQkgaiwKKwkJCQkJIHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLmNsb2NrX2luZm9bal0uc2NsayAqIDEwLAorCQkJCQkgcmRldi0+cG0ucG93ZXJfc3RhdGVbaV0uY2xvY2tfaW5mb1tqXS5tY2xrICogMTApOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSAqIHJhZGVvbl9waWNrX3Bvd2VyX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJCSAgIGVudW0gcmFkZW9uX3BtX3N0YXRlX3R5cGUgdHlwZSkKK3sKKwlpbnQgaSwgajsKKwllbnVtIHJhZGVvbl9wbV9zdGF0ZV90eXBlIHdhbnRlZF90eXBlc1syXTsKKwlpbnQgd2FudGVkX2NvdW50OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGU7CisJY2FzZSBQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRToKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CisJCQl3YW50ZWRfdHlwZXNbMF0gPSBQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKKwkJCXdhbnRlZF90eXBlc1sxXSA9IFBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwkJCXdhbnRlZF9jb3VudCA9IDI7CisJCX0gZWxzZSB7CisJCQl3YW50ZWRfdHlwZXNbMF0gPSBQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQkJd2FudGVkX2NvdW50ID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWToKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CisJCQl3YW50ZWRfdHlwZXNbMF0gPSBQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQl3YW50ZWRfdHlwZXNbMV0gPSBQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKKwkJCXdhbnRlZF9jb3VudCA9IDI7CisJCX0gZWxzZSB7CisJCQl3YW50ZWRfdHlwZXNbMF0gPSBQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQkJd2FudGVkX2NvdW50ID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ6CisJY2FzZSBQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOgorCQl3YW50ZWRfdHlwZXNbMF0gPSB0eXBlOworCQl3YW50ZWRfY291bnQgPSAxOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudGVkX2NvdW50OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXM7IGorKykgeworCQkJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW2pdLnR5cGUgPT0gd2FudGVkX3R5cGVzW2ldKQorCQkJCXJldHVybiAmcmRldi0+cG0ucG93ZXJfc3RhdGVbal07CisJCX0KKwl9CisKKwlyZXR1cm4gcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZTsKK30KKworc3RhdGljIHN0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyAqIHJhZGVvbl9waWNrX2Nsb2NrX21vZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCQkJICAgIHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBvd2VyX3N0YXRlLAorCQkJCQkJCSAgICBlbnVtIHJhZGVvbl9wbV9jbG9ja19tb2RlX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBPV0VSX01PREVfVFlQRV9ERUZBVUxUOgorCWRlZmF1bHQ6CisJCXJldHVybiBwb3dlcl9zdGF0ZS0+ZGVmYXVsdF9jbG9ja19tb2RlOworCWNhc2UgUE9XRVJfTU9ERV9UWVBFX0xPVzoKKwkJcmV0dXJuICZwb3dlcl9zdGF0ZS0+Y2xvY2tfaW5mb1swXTsKKwljYXNlIFBPV0VSX01PREVfVFlQRV9NSUQ6CisJCWlmIChwb3dlcl9zdGF0ZS0+bnVtX2Nsb2NrX21vZGVzID4gMikKKwkJCXJldHVybiAmcG93ZXJfc3RhdGUtPmNsb2NrX2luZm9bMV07CisJCWVsc2UKKwkJCXJldHVybiAmcG93ZXJfc3RhdGUtPmNsb2NrX2luZm9bMF07CisJCWJyZWFrOworCWNhc2UgUE9XRVJfTU9ERV9UWVBFX0hJR0g6CisJCXJldHVybiAmcG93ZXJfc3RhdGUtPmNsb2NrX2luZm9bcG93ZXJfc3RhdGUtPm51bV9jbG9ja19tb2RlcyAtIDFdOworCX0KKworfQorCitzdGF0aWMgdm9pZCByYWRlb25fZ2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCSAgIGVudW0gcmFkZW9uX3BtX2FjdGlvbiBhY3Rpb24pCit7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIFBNX0FDVElPTl9NSU5JTVVNOgorCQlyZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGUgPSByYWRlb25fcGlja19wb3dlcl9zdGF0ZShyZGV2LCBQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlkpOworCQlyZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZSA9CisJCQlyYWRlb25fcGlja19jbG9ja19tb2RlKHJkZXYsIHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZSwgUE9XRVJfTU9ERV9UWVBFX0xPVyk7CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX0RPV05DTE9DSzoKKwkJcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlID0gcmFkZW9uX3BpY2tfcG93ZXJfc3RhdGUocmRldiwgUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkUpOworCQlyZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZSA9CisJCQlyYWRlb25fcGlja19jbG9ja19tb2RlKHJkZXYsIHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZSwgUE9XRVJfTU9ERV9UWVBFX01JRCk7CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX1VQQ0xPQ0s6CisJCXJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZSA9IHJhZGVvbl9waWNrX3Bvd2VyX3N0YXRlKHJkZXYsIFBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVCk7CisJCXJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlID0KKwkJCXJhZGVvbl9waWNrX2Nsb2NrX21vZGUocmRldiwgcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlLCBQT1dFUl9NT0RFX1RZUEVfSElHSCk7CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX05PTkU6CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgbW9kZSBmb3Igbm90IGRlZmluZWQgYWN0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKwlEUk1fSU5GTygiUmVxdWVzdGVkOiBlOiAlZCBtOiAlZCBwOiAlZFxuIiwKKwkJIHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlLT5zY2xrLAorCQkgcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGUtPm1jbGssCisJCSByZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGUtPm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMpOworfQorCitzdGF0aWMgdm9pZCByYWRlb25fc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIGlmICpfY2xvY2tfbW9kZSBhcmUgdGhlIHNhbWUsICpfcG93ZXJfc3RhdGUgYXJlIGFzIHdlbGwgKi8KKwlpZiAocmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGUgPT0gcmRldi0+cG0uY3VycmVudF9jbG9ja19tb2RlKQorCQlyZXR1cm47CisKKwlEUk1fSU5GTygiU2V0dGluZzogZTogJWQgbTogJWQgcDogJWRcbiIsCisJCSByZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZS0+c2NsaywKKwkJIHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlLT5tY2xrLAorCQkgcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlLT5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzKTsKKwkvKiBzZXQgcGNpZSBsYW5lcyAqLworCS8qIHNldCB2b2x0YWdlICovCisJLyogc2V0IGVuZ2luZSBjbG9jayAqLworCXJhZGVvbl9zZXRfZW5naW5lX2Nsb2NrKHJkZXYsIHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlLT5zY2xrKTsKKwkvKiBzZXQgbWVtb3J5IGNsb2NrICovCisKKwlyZGV2LT5wbS5jdXJyZW50X3Bvd2VyX3N0YXRlID0gcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlOworCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZSA9IHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlOworfQogCiBpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJcmRldi0+cG0uc3RhdGUgPSBQTV9TVEFURV9ESVNBQkxFRDsKKwlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9IFBNX0FDVElPTl9OT05FOworCXJkZXYtPnBtLmRvd25jbG9ja2VkID0gZmFsc2U7CisKKwlpZiAocmRldi0+YmlvcykgeworCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKQorCQkJcmFkZW9uX2F0b21iaW9zX2dldF9wb3dlcl9tb2RlcyhyZGV2KTsKKwkJZWxzZQorCQkJcmFkZW9uX2NvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHJkZXYpOworCQlyYWRlb25fcHJpbnRfcG93ZXJfbW9kZV9pbmZvKHJkZXYpOworCX0KKwogCWlmIChyYWRlb25fZGVidWdmc19wbV9pbml0KHJkZXYpKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUE0hXG4iKTsKIAl9CiAKKwlJTklUX0RFTEFZRURfV09SSygmcmRldi0+cG0uaWRsZV93b3JrLCByYWRlb25fcG1faWRsZV93b3JrX2hhbmRsZXIpOworCisJaWYgKHJhZGVvbl9keW5wbSAhPSAtMSAmJiByYWRlb25fZHlucG0pIHsKKwkJcmRldi0+cG0uc3RhdGUgPSBQTV9TVEFURV9QQVVTRUQ7CisJCURSTV9JTkZPKCJyYWRlb246IGR5bmFtaWMgcG93ZXIgbWFuYWdlbWVudCBlbmFibGVkXG4iKTsKKwl9CisKKwlEUk1fSU5GTygicmFkZW9uOiBwb3dlciBtYW5hZ2VtZW50IGluaXRpYWxpemVkXG4iKTsKKwogCXJldHVybiAwOwogfQogCit2b2lkIHJhZGVvbl9wbV9jb21wdXRlX2Nsb2NrcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHJkZXYtPmRkZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjOworCWludCBjb3VudCA9IDA7CisKKwlpZiAocmRldi0+cG0uc3RhdGUgPT0gUE1fU1RBVEVfRElTQUJMRUQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnJkZXYtPnBtLm11dGV4KTsKKworCXJkZXYtPnBtLmFjdGl2ZV9jcnRjcyA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsCisJCSZkZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyICYmCisJCQljb25uZWN0b3ItPmRwbXMgIT0gRFJNX01PREVfRFBNU19PRkYpIHsKKwkJCXJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjKTsKKwkJCXJkZXYtPnBtLmFjdGl2ZV9jcnRjcyB8PSAoMSA8PCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJCQkrK2NvdW50OworCQl9CisJfQorCisJaWYgKGNvdW50ID4gMSkgeworCQlpZiAocmRldi0+cG0uc3RhdGUgPT0gUE1fU1RBVEVfQUNUSVZFKSB7CisJCQljYW5jZWxfZGVsYXllZF93b3JrKCZyZGV2LT5wbS5pZGxlX3dvcmspOworCisJCQlyZGV2LT5wbS5zdGF0ZSA9IFBNX1NUQVRFX1BBVVNFRDsKKwkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX1VQQ0xPQ0s7CisJCQlpZiAocmRldi0+cG0uZG93bmNsb2NrZWQpCisJCQkJcmFkZW9uX3BtX3NldF9jbG9ja3MocmRldik7CisKKwkJCURSTV9ERUJVRygicmFkZW9uOiBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgZGVhY3RpdmF0ZWRcbiIpOworCQl9CisJfSBlbHNlIGlmIChjb3VudCA9PSAxKSB7CisJCS8qIFRPRE86IEluY3JlYXNlIGNsb2NrcyBpZiBuZWVkZWQgZm9yIGN1cnJlbnQgbW9kZSAqLworCisJCWlmIChyZGV2LT5wbS5zdGF0ZSA9PSBQTV9TVEFURV9NSU5JTVVNKSB7CisJCQlyZGV2LT5wbS5zdGF0ZSA9IFBNX1NUQVRFX0FDVElWRTsKKwkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX1VQQ0xPQ0s7CisJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKKworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkZXYtPndxLCAmcmRldi0+cG0uaWRsZV93b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX0lETEVfTE9PUF9NUykpOworCQl9CisJCWVsc2UgaWYgKHJkZXYtPnBtLnN0YXRlID09IFBNX1NUQVRFX1BBVVNFRCkgeworCQkJcmRldi0+cG0uc3RhdGUgPSBQTV9TVEFURV9BQ1RJVkU7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRldi0+d3EsICZyZGV2LT5wbS5pZGxlX3dvcmssCisJCQkJbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7CisJCQlEUk1fREVCVUcoInJhZGVvbjogZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGFjdGl2YXRlZFxuIik7CisJCX0KKwl9CisJZWxzZSB7IC8qIGNvdW50ID09IDAgKi8KKwkJaWYgKHJkZXYtPnBtLnN0YXRlICE9IFBNX1NUQVRFX01JTklNVU0pIHsKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJkZXYtPnBtLmlkbGVfd29yayk7CisKKwkJCXJkZXYtPnBtLnN0YXRlID0gUE1fU1RBVEVfTUlOSU1VTTsKKwkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX01JTklNVU07CisJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcmRldi0+cG0ubXV0ZXgpOworfQorCitzdGF0aWMgYm9vbCByYWRlb25fcG1fZGVidWdfY2hlY2tfaW5fdmJsKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIGZpbmlzaCkKK3sKKwl1MzIgc3RhdF9jcnRjMSA9IDAsIHN0YXRfY3J0YzIgPSAwOworCWJvb2wgaW5fdmJsID0gdHJ1ZTsKKworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCWlmIChyZGV2LT5wbS5hY3RpdmVfY3J0Y3MgJiAoMSA8PCAwKSkgeworCQkJc3RhdF9jcnRjMSA9IFJSRUczMihEMUNSVENfU1RBVFVTKTsKKwkJCWlmICghKHN0YXRfY3J0YzEgJiAxKSkKKwkJCQlpbl92YmwgPSBmYWxzZTsKKwkJfQorCQlpZiAocmRldi0+cG0uYWN0aXZlX2NydGNzICYgKDEgPDwgMSkpIHsKKwkJCXN0YXRfY3J0YzIgPSBSUkVHMzIoRDJDUlRDX1NUQVRVUyk7CisJCQlpZiAoIShzdGF0X2NydGMyICYgMSkpCisJCQkJaW5fdmJsID0gZmFsc2U7CisJCX0KKwl9CisJaWYgKGluX3ZibCA9PSBmYWxzZSkKKwkJRFJNX0lORk8oIm5vdCBpbiB2YmwgZm9yIHBtIGNoYW5nZSAlMDh4ICUwOHggYXQgJXNcbiIsIHN0YXRfY3J0YzEsCisJCQkgc3RhdF9jcnRjMiwgZmluaXNoID8gImV4aXQiIDogImVudHJ5Iik7CisJcmV0dXJuIGluX3ZibDsKK30KK3N0YXRpYyB2b2lkIHJhZGVvbl9wbV9zZXRfY2xvY2tzX2xvY2tlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKnJhZGVvbl9mZW5jZV93YWl0X2xhc3QocmRldik7Ki8KKwlzd2l0Y2ggKHJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uKSB7CisJY2FzZSBQTV9BQ1RJT05fVVBDTE9DSzoKKwkJcmRldi0+cG0uZG93bmNsb2NrZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBQTV9BQ1RJT05fRE9XTkNMT0NLOgorCQlyZGV2LT5wbS5kb3duY2xvY2tlZCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX01JTklNVU06CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX05PTkU6CisJCURSTV9FUlJPUigiJXM6IFBNX0FDVElPTl9OT05FXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGFyZSBpbiB2YmxhbmsgKi8KKwlyYWRlb25fcG1fZGVidWdfY2hlY2tfaW5fdmJsKHJkZXYsIGZhbHNlKTsKKwlyYWRlb25fc2V0X3Bvd2VyX3N0YXRlKHJkZXYpOworCXJhZGVvbl9wbV9kZWJ1Z19jaGVja19pbl92YmwocmRldiwgdHJ1ZSk7CisJcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPSBQTV9BQ1RJT05fTk9ORTsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX3BtX3NldF9jbG9ja3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmFkZW9uX2dldF9wb3dlcl9zdGF0ZShyZGV2LCByZGV2LT5wbS5wbGFubmVkX2FjdGlvbik7CisJbXV0ZXhfbG9jaygmcmRldi0+Y3AubXV0ZXgpOworCisJaWYgKHJkZXYtPnBtLmFjdGl2ZV9jcnRjcyAmICgxIDw8IDApKSB7CisJCXJkZXYtPnBtLnJlcV92YmxhbmsgfD0gKDEgPDwgMCk7CisJCWRybV92YmxhbmtfZ2V0KHJkZXYtPmRkZXYsIDApOworCX0KKwlpZiAocmRldi0+cG0uYWN0aXZlX2NydGNzICYgKDEgPDwgMSkpIHsKKwkJcmRldi0+cG0ucmVxX3ZibGFuayB8PSAoMSA8PCAxKTsKKwkJZHJtX3ZibGFua19nZXQocmRldi0+ZGRldiwgMSk7CisJfQorCWlmIChyZGV2LT5wbS5hY3RpdmVfY3J0Y3MpCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJcmRldi0+aXJxLnZibGFua19xdWV1ZSwgMCwKKwkJCW1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX1dBSVRfVkJMQU5LX1RJTUVPVVQpKTsKKwlpZiAocmRldi0+cG0ucmVxX3ZibGFuayAmICgxIDw8IDApKSB7CisJCXJkZXYtPnBtLnJlcV92YmxhbmsgJj0gfigxIDw8IDApOworCQlkcm1fdmJsYW5rX3B1dChyZGV2LT5kZGV2LCAwKTsKKwl9CisJaWYgKHJkZXYtPnBtLnJlcV92YmxhbmsgJiAoMSA8PCAxKSkgeworCQlyZGV2LT5wbS5yZXFfdmJsYW5rICY9IH4oMSA8PCAxKTsKKwkJZHJtX3ZibGFua19wdXQocmRldi0+ZGRldiwgMSk7CisJfQorCisJcmFkZW9uX3BtX3NldF9jbG9ja3NfbG9ja2VkKHJkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+Y3AubXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCByYWRlb25fcG1faWRsZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2OworCXJkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJhZGVvbl9kZXZpY2UsCisJCQkJcG0uaWRsZV93b3JrLndvcmspOworCisJbXV0ZXhfbG9jaygmcmRldi0+cG0ubXV0ZXgpOworCWlmIChyZGV2LT5wbS5zdGF0ZSA9PSBQTV9TVEFURV9BQ1RJVkUpIHsKKwkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJCWludCBub3RfcHJvY2Vzc2VkID0gMDsKKworCQlyZWFkX2xvY2tfaXJxc2F2ZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmcmRldi0+ZmVuY2VfZHJ2LmVtaXRlZCkpIHsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwkJCWxpc3RfZm9yX2VhY2gocHRyLCAmcmRldi0+ZmVuY2VfZHJ2LmVtaXRlZCkgeworCQkJCS8qIGNvdW50IHVwIHRvIDMsIHRoYXQncyBlbm91Z2h0IGluZm8gKi8KKwkJCQlpZiAoKytub3RfcHJvY2Vzc2VkID49IDMpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOworCisJCWlmIChub3RfcHJvY2Vzc2VkID49IDMpIHsgLyogc2hvdWxkIHVwY2xvY2sgKi8KKwkJCWlmIChyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9PSBQTV9BQ1RJT05fRE9XTkNMT0NLKSB7CisJCQkJcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPSBQTV9BQ1RJT05fTk9ORTsKKwkJCX0gZWxzZSBpZiAocmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPT0gUE1fQUNUSU9OX05PTkUgJiYKKwkJCQlyZGV2LT5wbS5kb3duY2xvY2tlZCkgeworCQkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0KKwkJCQkJUE1fQUNUSU9OX1VQQ0xPQ0s7CisJCQkJcmRldi0+cG0uYWN0aW9uX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQltc2Vjc190b19qaWZmaWVzKFJBREVPTl9SRUNMT0NLX0RFTEFZX01TKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChub3RfcHJvY2Vzc2VkID09IDApIHsgLyogc2hvdWxkIGRvd25jbG9jayAqLworCQkJaWYgKHJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID09IFBNX0FDVElPTl9VUENMT0NLKSB7CisJCQkJcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPSBQTV9BQ1RJT05fTk9ORTsKKwkJCX0gZWxzZSBpZiAocmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPT0gUE1fQUNUSU9OX05PTkUgJiYKKwkJCQkhcmRldi0+cG0uZG93bmNsb2NrZWQpIHsKKwkJCQlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9CisJCQkJCVBNX0FDVElPTl9ET1dOQ0xPQ0s7CisJCQkJcmRldi0+cG0uYWN0aW9uX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQltc2Vjc190b19qaWZmaWVzKFJBREVPTl9SRUNMT0NLX0RFTEFZX01TKTsKKwkJCX0KKwkJfQorCisJCWlmIChyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiAhPSBQTV9BQ1RJT05fTk9ORSAmJgorCQkgICAgamlmZmllcyA+IHJkZXYtPnBtLmFjdGlvbl90aW1lb3V0KSB7CisJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZGV2LT53cSwgJnJkZXYtPnBtLmlkbGVfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7Cit9CisKIC8qCiAgKiBEZWJ1Z2ZzIGluZm8KICAqLwpAQCAtNDQsMTEgKzQzNiwxNCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCXNlcV9wcmludGYobSwgInN0YXRlOiAlc1xuIiwgcG1fc3RhdGVfbmFtZXNbcmRldi0+cG0uc3RhdGVdKTsKIAlzZXFfcHJpbnRmKG0sICJkZWZhdWx0IGVuZ2luZSBjbG9jazogJXUwIGtIelxuIiwgcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKIAlzZXFfcHJpbnRmKG0sICJjdXJyZW50IGVuZ2luZSBjbG9jazogJXUwIGtIelxuIiwgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikpOwogCXNlcV9wcmludGYobSwgImRlZmF1bHQgbWVtb3J5IGNsb2NrOiAldTAga0h6XG4iLCByZGV2LT5jbG9jay5kZWZhdWx0X21jbGspOwogCWlmIChyZGV2LT5hc2ljLT5nZXRfbWVtb3J5X2Nsb2NrKQogCQlzZXFfcHJpbnRmKG0sICJjdXJyZW50IG1lbW9yeSBjbG9jazogJXUwIGtIelxuIiwgcmFkZW9uX2dldF9tZW1vcnlfY2xvY2socmRldikpOworCWlmIChyZGV2LT5hc2ljLT5nZXRfcGNpZV9sYW5lcykKKwkJc2VxX3ByaW50ZihtLCAiUENJRSBsYW5lczogJWRcbiIsIHJhZGVvbl9nZXRfcGNpZV9sYW5lcyhyZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4LDcgKzQ1Myw3IEBACiB9OwogI2VuZGlmCiAKLWludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX3BtX2luZm9fbGlzdCwgQVJSQVlfU0laRShyYWRlb25fcG1faW5mb19saXN0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCmluZGV4IDZkMGEwMDkuLjVjMGRjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKICNpbmNsdWRlICJyNTAwX3JlZy5oIgogI2luY2x1ZGUgInI2MDBfcmVnLmgiCi0KKyNpbmNsdWRlICJldmVyZ3JlZW5fcmVnLmgiCiAKICNkZWZpbmUgUkFERU9OX01DX0FHUF9MT0NBVElPTgkJMHgwMTRjCiAjZGVmaW5lCQlSQURFT05fTUNfQUdQX1NUQVJUX01BU0sJMHgwMDAwRkZGRgpAQCAtMTA2MCwzMiArMTA2MCwzOCBAQAogCiAgICAgICAgLyogTXVsdGltZWRpYSBJMkMgYnVzICovCiAjZGVmaW5lIFJBREVPTl9JMkNfQ05UTF8wCQkgICAgMHgwMDkwCi0jZGVmaW5lIFJBREVPTl9JMkNfRE9ORSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIFJBREVPTl9JMkNfTkFDSyAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFJBREVPTl9JMkNfSEFMVCAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFJBREVPTl9JMkNfU09GVF9SU1QgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFJBREVPTl9JMkNfRFJJVkVfRU4gICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFJBREVPTl9JMkNfRFJJVkVfU0VMICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIFJBREVPTl9JMkNfU1RBUlQgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFJBREVPTl9JMkNfU1RPUCAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFJBREVPTl9JMkNfUkVDRUlWRSAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBSQURFT05fSTJDX0FCT1JUICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgUkFERU9OX0kyQ19HTyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIFJBREVPTl9JMkNfUFJFU0NBTEVfU0hJRlQgICAgICAgICAgIDE2CisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0RPTkUgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX05BQ0sgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0hBTFQgICAgICAgICAgICAgICgxIDw8IDIpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1NPRlRfUlNUICAgICAgICAgICgxIDw8IDUpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0RSSVZFX0VOICAgICAgICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0RSSVZFX1NFTCAgICAgICAgICgxIDw8IDcpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1NUQVJUICAgICAgICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1NUT1AgICAgICAgICAgICAgICgxIDw8IDkpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1JFQ0VJVkUgICAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19BQk9SVCAgICAgICAgICAgICAoMSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfR08gICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1BSRVNDQUxFX1NISUZUICAgIDE2CiAjZGVmaW5lIFJBREVPTl9JMkNfQ05UTF8xICAgICAgICAgICAgICAgICAgIDB4MDA5NAotI2RlZmluZSBSQURFT05fSTJDX0RBVEFfQ09VTlRfU0hJRlQgICAgICAgICAwCi0jZGVmaW5lIFJBREVPTl9JMkNfQUREUl9DT1VOVF9TSElGVCAgICAgICAgIDQKLSNkZWZpbmUgUkFERU9OX0kyQ19JTlRSQV9CWVRFX0RFTEFZX1NISUZUICAgOAotI2RlZmluZSBSQURFT05fSTJDX1NFTCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgUkFERU9OX0kyQ19FTiAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIFJBREVPTl9JMkNfVElNRV9MSU1JVF9TSElGVCAgICAgICAgIDI0CisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0RBVEFfQ09VTlRfU0hJRlQgIDAKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfQUREUl9DT1VOVF9TSElGVCAgNAorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19JTlRSQV9CWVRFX0RFTEFZX1NISUZUICAgOAorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19TRUwgICAgICAgICAgICAgICAoMSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfRU4gICAgICAgICAgICAgICAgKDEgPDwgMTcpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX1RJTUVfTElNSVRfU0hJRlQgIDI0CiAjZGVmaW5lIFJBREVPTl9JMkNfREFUQQkJCSAgICAweDAwOTgKIAogI2RlZmluZSBSQURFT05fRFZJX0kyQ19DTlRMXzAJCSAgICAweDAyZTAKICMgICAgICAgZGVmaW5lIFIyMDBfRFZJX0kyQ19QSU5fU0VMKHgpICAgICAgKCh4KSA8PCAzKQotIyAgICAgICBkZWZpbmUgUjIwMF9TRUxfRERDMSAgICAgICAgICAgICAgICAwIC8qIDB4NjAgLSBWR0FfRERDICovCi0jICAgICAgIGRlZmluZSBSMjAwX1NFTF9EREMyICAgICAgICAgICAgICAgIDEgLyogMHg2NCAtIERWSV9EREMgKi8KLSMgICAgICAgZGVmaW5lIFIyMDBfU0VMX0REQzMgICAgICAgICAgICAgICAgMiAvKiAweDY4IC0gTU9OSURfRERDICovCisjICAgICAgIGRlZmluZSBSMjAwX1NFTF9EREMxICAgICAgICAgICAgICAgIDAgLyogZGVwZW5kcyBvbiBhc2ljICovCisjICAgICAgIGRlZmluZSBSMjAwX1NFTF9EREMyICAgICAgICAgICAgICAgIDEgLyogZGVwZW5kcyBvbiBhc2ljICovCisjICAgICAgIGRlZmluZSBSMjAwX1NFTF9EREMzICAgICAgICAgICAgICAgIDIgLyogZGVwZW5kcyBvbiBhc2ljICovCisjCWRlZmluZSBSQURFT05fU1dfV0FOVFNfVE9fVVNFX0RWSV9JMkMgKDEgPDwgMTMpCisjCWRlZmluZSBSQURFT05fU1dfQ0FOX1VTRV9EVklfSTJDICAgICAgKDEgPDwgMTMpCisjCWRlZmluZSBSQURFT05fU1dfRE9ORV9VU0lOR19EVklfSTJDICAgKDEgPDwgMTQpCisjCWRlZmluZSBSQURFT05fSFdfTkVFRFNfRFZJX0kyQyAgICAgICAgKDEgPDwgMTQpCisjCWRlZmluZSBSQURFT05fQUJPUlRfSFdfRFZJX0kyQyAgICAgICAgKDEgPDwgMTUpCisjCWRlZmluZSBSQURFT05fSFdfVVNJTkdfRFZJX0kyQyAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIFJBREVPTl9EVklfSTJDX0NOVExfMSAgICAgICAgICAgICAgIDB4MDJlNAogI2RlZmluZSBSQURFT05fRFZJX0kyQ19EQVRBCQkgICAgMHgwMmU4CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwppbmRleCA2NTc5ZWI0Li5lNTA1MTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCkBAIC0zNCw2ICszNCwzNiBAQAogCiBpbnQgcmFkZW9uX2RlYnVnZnNfaWJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKK3ZvaWQgcmFkZW9uX2liX2JvZ3VzX2NsZWFudXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJhZGVvbl9pYiAqaWIsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGliLCBuLCAmcmRldi0+aWJfcG9vbC5ib2d1c19pYiwgbGlzdCkgeworCQlsaXN0X2RlbCgmaWItPmxpc3QpOworCQl2ZnJlZShpYi0+cHRyKTsKKwkJa2ZyZWUoaWIpOworCX0KK30KKwordm9pZCByYWRlb25faWJfYm9ndXNfYWRkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2liICpiaWI7CisKKwliaWIgPSBrbWFsbG9jKHNpemVvZigqYmliKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJpYiA9PSBOVUxMKQorCQlyZXR1cm47CisJYmliLT5wdHIgPSB2bWFsbG9jKGliLT5sZW5ndGhfZHcgKiA0KTsKKwlpZiAoYmliLT5wdHIgPT0gTlVMTCkgeworCQlrZnJlZShiaWIpOworCQlyZXR1cm47CisJfQorCW1lbWNweShiaWItPnB0ciwgaWItPnB0ciwgaWItPmxlbmd0aF9kdyAqIDQpOworCWJpYi0+bGVuZ3RoX2R3ID0gaWItPmxlbmd0aF9kdzsKKwltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZiaWItPmxpc3QsICZyZGV2LT5pYl9wb29sLmJvZ3VzX2liKTsKKwltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworfQorCiAvKgogICogSUIuCiAgKi8KQEAgLTE0Miw2ICsxNzIsNyBAQAogCiAJaWYgKHJkZXYtPmliX3Bvb2wucm9iaikKIAkJcmV0dXJuIDA7CisJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmliX3Bvb2wuYm9ndXNfaWIpOwogCS8qIEFsbG9jYXRlIDFNIG9iamVjdCBidWZmZXIgKi8KIAlyID0gcmFkZW9uX2JvX2NyZWF0ZShyZGV2LCBOVUxMLCAgUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0LAogCQkJCXRydWUsIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKQEAgLTE5Miw2ICsyMjMsOCBAQAogCQlyZXR1cm47CiAJfQogCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCXJhZGVvbl9pYl9ib2d1c19jbGVhbnVwKHJkZXYpOworCiAJaWYgKHJkZXYtPmliX3Bvb2wucm9iaikgewogCQlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+aWJfcG9vbC5yb2JqLCBmYWxzZSk7CiAJCWlmIChsaWtlbHkociA9PSAwKSkgewpAQCAtMzQ5LDE1ICszODIsNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByYWRlb25fZGVidWdmc19pYl9ib2d1c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gbm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IHJhZGVvbl9pYiAqaWI7CisJdW5zaWduZWQgaTsKKworCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCWlmIChsaXN0X2VtcHR5KCZyZGV2LT5pYl9wb29sLmJvZ3VzX2liKSkgeworCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCQlzZXFfcHJpbnRmKG0sICJubyBib2d1cyBJQiByZWNvcmRlZFxuIik7CisJCXJldHVybiAwOworCX0KKwlpYiA9IGxpc3RfZmlyc3RfZW50cnkoJnJkZXYtPmliX3Bvb2wuYm9ndXNfaWIsIHN0cnVjdCByYWRlb25faWIsIGxpc3QpOworCWxpc3RfZGVsX2luaXQoJmliLT5saXN0KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCXNlcV9wcmludGYobSwgIklCIHNpemUgJTA1dSBkd29yZHNcbiIsIGliLT5sZW5ndGhfZHcpOworCWZvciAoaSA9IDA7IGkgPCBpYi0+bGVuZ3RoX2R3OyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiWyUwNXVdPTB4JTA4WFxuIiwgaSwgaWItPnB0cltpXSk7CisJfQorCXZmcmVlKGliLT5wdHIpOworCWtmcmVlKGliKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9kZWJ1Z2ZzX2liX2xpc3RbUkFERU9OX0lCX1BPT0xfU0laRV07CiBzdGF0aWMgY2hhciByYWRlb25fZGVidWdmc19pYl9uYW1lc1tSQURFT05fSUJfUE9PTF9TSVpFXVszMl07CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fZGVidWdmc19pYl9ib2d1c19pbmZvX2xpc3RbXSA9IHsKKwl7InJhZGVvbl9pYl9ib2d1cyIsIHJhZGVvbl9kZWJ1Z2ZzX2liX2JvZ3VzX2luZm8sIDAsIE5VTEx9LAorfTsKICNlbmRpZgogCiBpbnQgcmFkZW9uX2RlYnVnZnNfaWJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAl1bnNpZ25lZCBpOworCWludCByOwogCisJcmFkZW9uX2RlYnVnZnNfaWJfYm9ndXNfaW5mb19saXN0WzBdLmRhdGEgPSByZGV2OworCXIgPSByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX2RlYnVnZnNfaWJfYm9ndXNfaW5mb19saXN0LCAxKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAJZm9yIChpID0gMDsgaSA8IFJBREVPTl9JQl9QT09MX1NJWkU7IGkrKykgewogCQlzcHJpbnRmKHJhZGVvbl9kZWJ1Z2ZzX2liX25hbWVzW2ldLCAicmFkZW9uX2liXyUwNHUiLCBpKTsKIAkJcmFkZW9uX2RlYnVnZnNfaWJfbGlzdFtpXS5uYW1lID0gcmFkZW9uX2RlYnVnZnNfaWJfbmFtZXNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCAwNjcxNjdjLi4zYzMyZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fYnVmZmVyLmgiCiAjaW5jbHVkZSAiZHJtX3NhcmVhLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKQEAgLTkxLDIxICs5MiwyNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9jaGVja19hbmRfZml4dXBfcGFja2V0cyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqCiAJCQkJCQkgICAgIGRldl9wcml2LAogCQkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCQkJCSAgICAgaW50IGlkLCB1MzIgKmRhdGEpCisJCQkJCQkgICAgIGludCBpZCwgc3RydWN0IGRybV9idWZmZXIgKmJ1ZikKIHsKKwl1MzIgKmRhdGE7CiAJc3dpdGNoIChpZCkgewogCiAJY2FzZSBSQURFT05fRU1JVF9QUF9NSVNDOgotCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwKLQkJICAgICZkYXRhWyhSQURFT05fUkIzRF9ERVBUSE9GRlNFVCAtIFJBREVPTl9QUF9NSVNDKSAvIDRdKSkgeworCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGJ1ZiwKKwkJCShSQURFT05fUkIzRF9ERVBUSE9GRlNFVCAtIFJBREVPTl9QUF9NSVNDKSAvIDQpOworCisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LCBkYXRhKSkgewogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGRlcHRoIGJ1ZmZlciBvZmZzZXRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJZGV2X3ByaXYtPmhhdmVfel9vZmZzZXQgPSAxOwogCQlicmVhazsKIAogCWNhc2UgUkFERU9OX0VNSVRfUFBfQ05UTDoKLQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsCi0JCSAgICAmZGF0YVsoUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQgLSBSQURFT05fUFBfQ05UTCkgLyA0XSkpIHsKKwkJZGF0YSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChidWYsCisJCQkoUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQgLSBSQURFT05fUFBfQ05UTCkgLyA0KTsKKworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgZGF0YSkpIHsKIAkJCURSTV9FUlJPUigiSW52YWxpZCBjb2xvdXIgYnVmZmVyIG9mZnNldFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTE3LDggKzEyNCw4IEBACiAJY2FzZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfMzoKIAljYXNlIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF80OgogCWNhc2UgUjIwMF9FTUlUX1BQX1RYT0ZGU0VUXzU6Ci0JCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LAotCQkJCQkJICAmZGF0YVswXSkpIHsKKwkJZGF0YSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChidWYsIDApOworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgZGF0YSkpIHsKIAkJCURSTV9FUlJPUigiSW52YWxpZCBSMjAwIHRleHR1cmUgb2Zmc2V0XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMjcsOCArMTM0LDkgQEAKIAljYXNlIFJBREVPTl9FTUlUX1BQX1RYRklMVEVSXzA6CiAJY2FzZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMjoKLQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsCi0JCSAgICAmZGF0YVsoUkFERU9OX1BQX1RYT0ZGU0VUXzAgLSBSQURFT05fUFBfVFhGSUxURVJfMCkgLyA0XSkpIHsKKwkJZGF0YSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChidWYsCisJCQkoUkFERU9OX1BQX1RYT0ZGU0VUXzAgLSBSQURFT05fUFBfVFhGSUxURVJfMCkgLyA0KTsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsIGRhdGEpKSB7CiAJCQlEUk1fRVJST1IoIkludmFsaWQgUjEwMCB0ZXh0dXJlIG9mZnNldFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTQyLDkgKzE1MCwxMCBAQAogCWNhc2UgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfNTp7CiAJCQlpbnQgaTsKIAkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGJ1ZiwgaSk7CiAJCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LAogCQkJCQkJCQkgIGZpbGVfcHJpdiwKLQkJCQkJCQkJICAmZGF0YVtpXSkpIHsKKwkJCQkJCQkJICBkYXRhKSkgewogCQkJCQlEUk1fRVJST1IKIAkJCQkJICAgICgiSW52YWxpZCBSMjAwIGN1YmljIHRleHR1cmUgb2Zmc2V0XG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTgsOSArMTY3LDEwIEBACiAJY2FzZSBSQURFT05fRU1JVF9QUF9DVUJJQ19PRkZTRVRTX1QyOnsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJCWRhdGEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoYnVmLCBpKTsKIAkJCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsCiAJCQkJCQkJCSAgZmlsZV9wcml2LAotCQkJCQkJCQkgICZkYXRhW2ldKSkgeworCQkJCQkJCQkgIGRhdGEpKSB7CiAJCQkJCURSTV9FUlJPUgogCQkJCQkgICAgKCJJbnZhbGlkIFIxMDAgY3ViaWMgdGV4dHVyZSBvZmZzZXRcbiIpOwogCQkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI2OSwyMyArMjc5LDI0IEBACiAJCQkJCQkgICAgIGNtZGJ1ZiwKIAkJCQkJCSAgICAgdW5zaWduZWQgaW50ICpjbWRzeikKIHsKLQl1MzIgKmNtZCA9ICh1MzIgKikgY21kYnVmLT5idWY7CisJdTMyICpjbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDApOwogCXUzMiBvZmZzZXQsIG5hcnJheXM7CiAJaW50IGNvdW50LCBpLCBrOwogCi0JKmNtZHN6ID0gMiArICgoY21kWzBdICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLKSA+PiAxNik7CisJY291bnQgPSAoKCpjbWQgJiBSQURFT05fQ1BfUEFDS0VUX0NPVU5UX01BU0spID4+IDE2KTsKKwkqY21kc3ogPSAyICsgY291bnQ7CiAKLQlpZiAoKGNtZFswXSAmIDB4YzAwMDAwMDApICE9IFJBREVPTl9DUF9QQUNLRVQzKSB7CisJaWYgKCgqY21kICYgMHhjMDAwMDAwMCkgIT0gUkFERU9OX0NQX1BBQ0tFVDMpIHsKIAkJRFJNX0VSUk9SKCJOb3QgYSB0eXBlIDMgcGFja2V0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKDQgKiAqY21kc3ogPiBjbWRidWYtPmJ1ZnN6KSB7CisJaWYgKDQgKiAqY21kc3ogPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkgewogCQlEUk1fRVJST1IoIlBhY2tldCBzaXplIGxhcmdlciB0aGFuIHNpemUgb2YgZGF0YSBwcm92aWRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaChjbWRbMF0gJiAweGZmMDApIHsKKwlzd2l0Y2ggKCpjbWQgJiAweGZmMDApIHsKIAkvKiBYWFggQXJlIHRoZXJlIG9sZCBkcml2ZXJzIG5lZWRpbmcgb3RoZXIgcGFja2V0cz8gKi8KIAogCWNhc2UgUkFERU9OXzNEX0RSQVdfSU1NRDoKQEAgLTMxMiw3ICszMjMsNiBAQAogCQlicmVhazsKIAogCWNhc2UgUkFERU9OXzNEX0xPQURfVkJQTlRSOgotCQljb3VudCA9IChjbWRbMF0gPj4gMTYpICYgMHgzZmZmOwogCiAJCWlmIChjb3VudCA+IDE4KSB7IC8qIDEyIGFycmF5cyBtYXggKi8KIAkJCURSTV9FUlJPUigiVG9vIGxhcmdlIHBheWxvYWQgaW4gM0RfTE9BRF9WQlBOVFIgKGNvdW50PSVkKVxuIiwKQEAgLTMyMSwxMyArMzMxLDE2IEBACiAJCX0KIAogCQkvKiBjYXJlZnVsbHkgY2hlY2sgcGFja2V0IGNvbnRlbnRzICovCi0JCW5hcnJheXMgPSBjbWRbMV0gJiB+MHhjMDAwOworCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCisJCW5hcnJheXMgPSAqY21kICYgfjB4YzAwMDsKIAkJayA9IDA7CiAJCWkgPSAyOwogCQl3aGlsZSAoKGsgPCBuYXJyYXlzKSAmJiAoaSA8IChjb3VudCArIDIpKSkgewogCQkJaSsrOwkJLyogc2tpcCBhdHRyaWJ1dGUgZmllbGQgKi8KKwkJCWNtZCA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgaSk7CiAJCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwKLQkJCQkJCQkgICZjbWRbaV0pKSB7CisJCQkJCQkJICBjbWQpKSB7CiAJCQkJRFJNX0VSUk9SCiAJCQkJICAgICgiSW52YWxpZCBvZmZzZXQgKGs9JWQgaT0lZCkgaW4gM0RfTE9BRF9WQlBOVFIgcGFja2V0LlxuIiwKIAkJCQkgICAgIGssIGkpOwpAQCAtMzM4LDggKzM1MSwxMCBAQAogCQkJaWYgKGsgPT0gbmFycmF5cykKIAkJCQlicmVhazsKIAkJCS8qIGhhdmUgb25lIG1vcmUgdG8gcHJvY2VzcywgdGhleSBjb21lIGluIHBhaXJzICovCisJCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIGkpOworCiAJCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsCi0JCQkJCQkJICBmaWxlX3ByaXYsICZjbWRbaV0pKQorCQkJCQkJCSAgZmlsZV9wcml2LCBjbWQpKQogCQkJewogCQkJCURSTV9FUlJPUgogCQkJCSAgICAoIkludmFsaWQgb2Zmc2V0IChrPSVkIGk9JWQpIGluIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCkBAIC0zNjMsNyArMzc4LDkgQEAKIAkJCURSTV9FUlJPUigiSW52YWxpZCAzZCBwYWNrZXQgZm9yIHIyMDAtY2xhc3MgY2hpcFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgJmNtZFsxXSkpIHsKKworCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgY21kKSkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBybmRyX2dlbl9pbmR4IG9mZnNldFxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTM3NCwxMiArMzkxLDE1IEBACiAJCQlEUk1fRVJST1IoIkludmFsaWQgM2QgcGFja2V0IGZvciByMTAwLWNsYXNzIGNoaXBcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKChjbWRbMV0gJiAweDgwMDBmZmZmKSAhPSAweDgwMDAwODEwKSB7Ci0JCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgcmVnIGFkZHJlc3MgJTA4WFxuIiwgY21kWzFdKTsKKworCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCQlpZiAoKCpjbWQgJiAweDgwMDBmZmZmKSAhPSAweDgwMDAwODEwKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgcmVnIGFkZHJlc3MgJTA4WFxuIiwgKmNtZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgJmNtZFsyXSkpIHsKLQkJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciBvZmZzZXQgaXMgJTA4WFxuIiwgY21kWzJdKTsKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAyKTsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsIGNtZCkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciBvZmZzZXQgaXMgJTA4WFxuIiwgKmNtZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKQEAgLTM4OCwzMSArNDA4LDM0IEBACiAJY2FzZSBSQURFT05fQ05UTF9QQUlOVF9NVUxUSToKIAljYXNlIFJBREVPTl9DTlRMX0JJVEJMVF9NVUxUSToKIAkJLyogTVNCIG9mIG9wY29kZTogbmV4dCBEV09SRCBHVUlfQ05UTCAqLwotCQlpZiAoY21kWzFdICYgKFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMCisJCWNtZCA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMSk7CisJCWlmICgqY21kICYgKFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMCiAJCQkgICAgICB8IFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgewotCQkJb2Zmc2V0ID0gY21kWzJdIDw8IDEwOworCQkJdTMyICpjbWQyID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAyKTsKKwkJCW9mZnNldCA9ICpjbWQyIDw8IDEwOwogCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0CiAJCQkgICAgKGRldl9wcml2LCBmaWxlX3ByaXYsICZvZmZzZXQpKSB7CiAJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGZpcnN0IHBhY2tldCBvZmZzZXRcbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJY21kWzJdID0gKGNtZFsyXSAmIDB4ZmZjMDAwMDApIHwgb2Zmc2V0ID4+IDEwOworCQkJKmNtZDIgPSAoKmNtZDIgJiAweGZmYzAwMDAwKSB8IG9mZnNldCA+PiAxMDsKIAkJfQogCi0JCWlmICgoY21kWzFdICYgUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwpICYmCi0JCSAgICAoY21kWzFdICYgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7Ci0JCQlvZmZzZXQgPSBjbWRbM10gPDwgMTA7CisJCWlmICgoKmNtZCAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgorCQkgICAgKCpjbWQgJiBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKKwkJCXUzMiAqY21kMyA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMyk7CisJCQlvZmZzZXQgPSAqY21kIDw8IDEwOwogCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0CiAJCQkgICAgKGRldl9wcml2LCBmaWxlX3ByaXYsICZvZmZzZXQpKSB7CiAJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHNlY29uZCBwYWNrZXQgb2Zmc2V0XG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWNtZFszXSA9IChjbWRbM10gJiAweGZmYzAwMDAwKSB8IG9mZnNldCA+PiAxMDsKKwkJCSpjbWQzID0gKCpjbWQzICYgMHhmZmMwMDAwMCkgfCBvZmZzZXQgPj4gMTA7CiAJCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlEUk1fRVJST1IoIkludmFsaWQgcGFja2V0IHR5cGUgJXhcbiIsIGNtZFswXSAmIDB4ZmYwMCk7CisJCURSTV9FUlJPUigiSW52YWxpZCBwYWNrZXQgdHlwZSAleFxuIiwgKmNtZCAmIDB4ZmYwMCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODc2LDYgKzg5OSwxMSBAQAogCQlpZiAodG1wICYgUkFERU9OX0JBQ0spCiAJCQlmbGFncyB8PSBSQURFT05fRlJPTlQ7CiAJfQorCWlmIChmbGFncyAmIChSQURFT05fREVQVEh8UkFERU9OX1NURU5DSUwpKSB7CisJCWlmICghZGV2X3ByaXYtPmhhdmVfel9vZmZzZXQpCisJCQlwcmludGtfb25jZShLRVJOX0VSUiAicmFkZW9uOiBpbGxlZ2FsIGRlcHRoIGNsZWFyIHJlcXVlc3QuIEJ1Z2d5IG1lc2EgZGV0ZWN0ZWQgLSBwbGVhc2UgdXBkYXRlLlxuIik7CisJCWZsYWdzICY9IH4oUkFERU9OX0RFUFRIIHwgUkFERU9OX1NURU5DSUwpOworCX0KIAogCWlmIChmbGFncyAmIChSQURFT05fRlJPTlQgfCBSQURFT05fQkFDSykpIHsKIApAQCAtMjYxMSw3ICsyNjM5LDYgQEAKIHsKIAlpbnQgaWQgPSAoaW50KWhlYWRlci5wYWNrZXQucGFja2V0X2lkOwogCWludCBzeiwgcmVnOwotCWludCAqZGF0YSA9IChpbnQgKiljbWRidWYtPmJ1ZjsKIAlSSU5HX0xPQ0FMUzsKIAogCWlmIChpZCA+PSBSQURFT05fTUFYX1NUQVRFX1BBQ0tFVFMpCkBAIC0yNjIwLDIzICsyNjQ3LDIyIEBACiAJc3ogPSBwYWNrZXRbaWRdLmxlbjsKIAlyZWcgPSBwYWNrZXRbaWRdLnN0YXJ0OwogCi0JaWYgKHN6ICogc2l6ZW9mKGludCkgPiBjbWRidWYtPmJ1ZnN6KSB7CisJaWYgKHN6ICogc2l6ZW9mKHUzMikgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkgewogCQlEUk1fRVJST1IoIlBhY2tldCBzaXplIHByb3ZpZGVkIGxhcmdlciB0aGFuIGRhdGEgcHJvdmlkZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9wYWNrZXRzKGRldl9wcml2LCBmaWxlX3ByaXYsIGlkLCBkYXRhKSkgeworCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldHMoZGV2X3ByaXYsIGZpbGVfcHJpdiwgaWQsCisJCQkJY21kYnVmLT5idWZmZXIpKSB7CiAJCURSTV9FUlJPUigiUGFja2V0IHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlCRUdJTl9SSU5HKHN6ICsgMSk7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMChyZWcsIChzeiAtIDEpKSk7Ci0JT1VUX1JJTkdfVEFCTEUoZGF0YSwgc3opOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6ICogc2l6ZW9mKGludCk7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIHNpemVvZihpbnQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjUzLDEwICsyNjc5LDggQEAKIAlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9UQ0xfU0NBTEFSX0lORFhfUkVHLCAwKSk7CiAJT1VUX1JJTkcoc3RhcnQgfCAoc3RyaWRlIDw8IFJBREVPTl9TQ0FMX0lORFhfRFdPUkRfU1RSSURFX1NISUZUKSk7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMF9UQUJMRShSQURFT05fU0VfVENMX1NDQUxBUl9EQVRBX1JFRywgc3ogLSAxKSk7Ci0JT1VUX1JJTkdfVEFCTEUoY21kYnVmLT5idWYsIHN6KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBzeik7CiAJQURWQU5DRV9SSU5HKCk7Ci0JY21kYnVmLT5idWYgKz0gc3ogKiBzaXplb2YoaW50KTsKLQljbWRidWYtPmJ1ZnN6IC09IHN6ICogc2l6ZW9mKGludCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NzUsMTAgKzI2OTksOCBAQAogCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1NFX1RDTF9TQ0FMQVJfSU5EWF9SRUcsIDApKTsKIAlPVVRfUklORyhzdGFydCB8IChzdHJpZGUgPDwgUkFERU9OX1NDQUxfSU5EWF9EV09SRF9TVFJJREVfU0hJRlQpKTsKIAlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfU0NBTEFSX0RBVEFfUkVHLCBzeiAtIDEpKTsKLQlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1Ziwgc3opOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKLQljbWRidWYtPmJ1ZiArPSBzeiAqIHNpemVvZihpbnQpOwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiBzaXplb2YoaW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY5NiwxMSArMjcxOCw5IEBACiAJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfVENMX1ZFQ1RPUl9JTkRYX1JFRywgMCkpOwogCU9VVF9SSU5HKHN0YXJ0IHwgKHN0cmlkZSA8PCBSQURFT05fVkVDX0lORFhfT0NUV09SRF9TVFJJREVfU0hJRlQpKTsKIAlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfVkVDVE9SX0RBVEFfUkVHLCAoc3ogLSAxKSkpOwotCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3ogKiBzaXplb2YoaW50KTsKLQljbWRidWYtPmJ1ZnN6IC09IHN6ICogc2l6ZW9mKGludCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3MTQsNyArMjczNCw3IEBACiAKICAgICAgICAgaWYgKCFzeikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN6ICogNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogCiAJQkVHSU5fUklORyg1ICsgc3opOwpAQCAtMjcyMiwxMSArMjc0Miw5IEBACiAJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfVENMX1ZFQ1RPUl9JTkRYX1JFRywgMCkpOwogCU9VVF9SSU5HKHN0YXJ0IHwgKDEgPDwgUkFERU9OX1ZFQ19JTkRYX09DVFdPUkRfU1RSSURFX1NISUZUKSk7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMF9UQUJMRShSQURFT05fU0VfVENMX1ZFQ1RPUl9EQVRBX1JFRywgKHN6IC0gMSkpKTsKLQlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1Ziwgc3opOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6ICogc2l6ZW9mKGludCk7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIHNpemVvZihpbnQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzQ4LDExICsyNzY2LDkgQEAKIAl9CiAKIAlCRUdJTl9SSU5HKGNtZHN6KTsKLQlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1ZiwgY21kc3opOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIGNtZHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IGNtZHN6ICogNDsKLQljbWRidWYtPmJ1ZnN6IC09IGNtZHN6ICogNDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgwNSwxNiArMjgyMSwxNiBAQAogCQl9CiAKIAkJQkVHSU5fUklORyhjbWRzeik7Ci0JCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBjbWRzeik7CisJCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIGNtZHN6KTsKIAkJQURWQU5DRV9SSU5HKCk7CiAKIAl9IHdoaWxlICgrK2kgPCBjbWRidWYtPm5ib3gpOwogCWlmIChjbWRidWYtPm5ib3ggPT0gMSkKIAkJY21kYnVmLT5uYm94ID0gMDsKIAorCXJldHVybiAwOwogICAgICAgb3V0OgotCWNtZGJ1Zi0+YnVmICs9IGNtZHN6ICogNDsKLQljbWRidWYtPmJ1ZnN6IC09IGNtZHN6ICogNDsKKwlkcm1fYnVmZmVyX2FkdmFuY2UoY21kYnVmLT5idWZmZXIsIGNtZHN6ICogNCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NDcsMTYgKzI4NjMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorc3RhdGljIGludCByYWRlb25fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsKIAlzdHJ1Y3QgZHJtX2J1ZiAqYnVmID0gTlVMTDsKKwlkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBzdGFja19oZWFkZXI7CiAJaW50IGlkeDsKIAlkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1ZiA9IGRhdGE7Ci0JZHJtX3JhZGVvbl9jbWRfaGVhZGVyX3QgaGVhZGVyOwotCWludCBvcmlnX25ib3gsIG9yaWdfYnVmc3o7Ci0JY2hhciAqa2J1ZiA9IE5VTEw7CisJaW50IG9yaWdfbmJveDsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKQEAgLTI4NzEsMTcgKzI4ODcsMTYgQEAKIAkgKiByYWNlcyBiZXR3ZWVuIGNoZWNraW5nIHZhbHVlcyBhbmQgdXNpbmcgdGhvc2UgdmFsdWVzIGluIG90aGVyIGNvZGUsCiAJICogYW5kIHNpbXBseSB0byBhdm9pZCBhIGxvdCBvZiBmdW5jdGlvbiBjYWxscyB0byBjb3B5IGluIGRhdGEuCiAJICovCi0Jb3JpZ19idWZzeiA9IGNtZGJ1Zi0+YnVmc3o7Ci0JaWYgKG9yaWdfYnVmc3ogIT0gMCkgewotCQlrYnVmID0ga21hbGxvYyhjbWRidWYtPmJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQkJaWYgKGtidWYgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGtidWYsICh2b2lkIF9fdXNlciAqKWNtZGJ1Zi0+YnVmLAotCQkJCSAgICAgICBjbWRidWYtPmJ1ZnN6KSkgewotCQkJa2ZyZWUoa2J1Zik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQljbWRidWYtPmJ1ZiA9IGtidWY7CisJaWYgKGNtZGJ1Zi0+YnVmc3ogIT0gMCkgeworCQlpbnQgcnY7CisJCXZvaWQgX191c2VyICpidWZmZXIgPSBjbWRidWYtPmJ1ZmZlcjsKKwkJcnYgPSBkcm1fYnVmZmVyX2FsbG9jKCZjbWRidWYtPmJ1ZmZlciwgY21kYnVmLT5idWZzeik7CisJCWlmIChydikKKwkJCXJldHVybiBydjsKKwkJcnYgPSBkcm1fYnVmZmVyX2NvcHlfZnJvbV91c2VyKGNtZGJ1Zi0+YnVmZmVyLCBidWZmZXIsCisJCQkJCQljbWRidWYtPmJ1ZnN6KTsKKwkJaWYgKHJ2KQorCQkJcmV0dXJuIHJ2OwogCX0KIAogCW9yaWdfbmJveCA9IGNtZGJ1Zi0+bmJveDsKQEAgLTI4OTAsMjQgKzI5MDUsMjQgQEAKIAkJaW50IHRlbXA7CiAJCXRlbXAgPSByMzAwX2RvX2NwX2NtZGJ1ZihkZXYsIGZpbGVfcHJpdiwgY21kYnVmKTsKIAotCQlpZiAob3JpZ19idWZzeiAhPSAwKQotCQkJa2ZyZWUoa2J1Zik7CisJCWlmIChjbWRidWYtPmJ1ZnN6ICE9IDApCisJCQlkcm1fYnVmZmVyX2ZyZWUoY21kYnVmLT5idWZmZXIpOwogCiAJCXJldHVybiB0ZW1wOwogCX0KIAogCS8qIG1pY3JvY29kZV92ZXJzaW9uICE9IHIzMDAgKi8KLQl3aGlsZSAoY21kYnVmLT5idWZzeiA+PSBzaXplb2YoaGVhZGVyKSkgeworCXdoaWxlIChkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSA+PSBzaXplb2Yoc3RhY2tfaGVhZGVyKSkgewogCi0JCWhlYWRlci5pID0gKihpbnQgKiljbWRidWYtPmJ1ZjsKLQkJY21kYnVmLT5idWYgKz0gc2l6ZW9mKGhlYWRlcik7Ci0JCWNtZGJ1Zi0+YnVmc3ogLT0gc2l6ZW9mKGhlYWRlcik7CisJCWRybV9yYWRlb25fY21kX2hlYWRlcl90ICpoZWFkZXI7CisJCWhlYWRlciA9IGRybV9idWZmZXJfcmVhZF9vYmplY3QoY21kYnVmLT5idWZmZXIsCisJCQkJc2l6ZW9mKHN0YWNrX2hlYWRlciksICZzdGFja19oZWFkZXIpOwogCi0JCXN3aXRjaCAoaGVhZGVyLmhlYWRlci5jbWRfdHlwZSkgeworCQlzd2l0Y2ggKGhlYWRlci0+aGVhZGVyLmNtZF90eXBlKSB7CiAJCWNhc2UgUkFERU9OX0NNRF9QQUNLRVQ6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfUEFDS0VUXG4iKTsKIAkJCWlmIChyYWRlb25fZW1pdF9wYWNrZXRzCi0JCQkgICAgKGRldl9wcml2LCBmaWxlX3ByaXYsIGhlYWRlciwgY21kYnVmKSkgeworCQkJICAgIChkZXZfcHJpdiwgZmlsZV9wcml2LCAqaGVhZGVyLCBjbWRidWYpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9wYWNrZXRzIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yOTE1LDcgKzI5MzAsNyBAQAogCiAJCWNhc2UgUkFERU9OX0NNRF9TQ0FMQVJTOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX1NDQUxBUlNcbiIpOwotCQkJaWYgKHJhZGVvbl9lbWl0X3NjYWxhcnMoZGV2X3ByaXYsIGhlYWRlciwgY21kYnVmKSkgeworCQkJaWYgKHJhZGVvbl9lbWl0X3NjYWxhcnMoZGV2X3ByaXYsICpoZWFkZXIsIGNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3NjYWxhcnMgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTI5MjMsNyArMjkzOCw3IEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1ZFQ1RPUlM6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfVkVDVE9SU1xuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfdmVjdG9ycyhkZXZfcHJpdiwgaGVhZGVyLCBjbWRidWYpKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfdmVjdG9ycyhkZXZfcHJpdiwgKmhlYWRlciwgY21kYnVmKSkgewogCQkJCURSTV9FUlJPUigicmFkZW9uX2VtaXRfdmVjdG9ycyBmYWlsZWRcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQpAQCAtMjkzMSw3ICsyOTQ2LDcgQEAKIAogCQljYXNlIFJBREVPTl9DTURfRE1BX0RJU0NBUkQ6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfRE1BX0RJU0NBUkRcbiIpOwotCQkJaWR4ID0gaGVhZGVyLmRtYS5idWZfaWR4OworCQkJaWR4ID0gaGVhZGVyLT5kbWEuYnVmX2lkeDsKIAkJCWlmIChpZHggPCAwIHx8IGlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgewogCQkJCURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAogCQkJCQkgIGlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKQEAgLTI5NjgsNyArMjk4Myw3IEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1NDQUxBUlMyOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX1NDQUxBUlMyXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF9zY2FsYXJzMihkZXZfcHJpdiwgaGVhZGVyLCBjbWRidWYpKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfc2NhbGFyczIoZGV2X3ByaXYsICpoZWFkZXIsIGNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3NjYWxhcnMyIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yOTc2LDM3ICsyOTkxLDM3IEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1dBSVQ6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfV0FJVFxuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfd2FpdChkZXYsIGhlYWRlci53YWl0LmZsYWdzKSkgeworCQkJaWYgKHJhZGVvbl9lbWl0X3dhaXQoZGV2LCBoZWFkZXItPndhaXQuZmxhZ3MpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF93YWl0IGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ01EX1ZFQ0xJTkVBUjoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9WRUNMSU5FQVJcbiIpOwotCQkJaWYgKHJhZGVvbl9lbWl0X3ZlY2xpbmVhcihkZXZfcHJpdiwgaGVhZGVyLCBjbWRidWYpKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfdmVjbGluZWFyKGRldl9wcml2LCAqaGVhZGVyLCBjbWRidWYpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF92ZWNsaW5lYXIgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImJhZCBjbWRfdHlwZSAlZCBhdCAlcFxuIiwKLQkJCQkgIGhlYWRlci5oZWFkZXIuY21kX3R5cGUsCi0JCQkJICBjbWRidWYtPmJ1ZiAtIHNpemVvZihoZWFkZXIpKTsKKwkJCURSTV9FUlJPUigiYmFkIGNtZF90eXBlICVkIGF0IGJ5dGUgJWRcbiIsCisJCQkJICBoZWFkZXItPmhlYWRlci5jbWRfdHlwZSwKKwkJCQkgIGNtZGJ1Zi0+YnVmZmVyLT5pdGVyYXRvcik7CiAJCQlnb3RvIGVycjsKIAkJfQogCX0KIAotCWlmIChvcmlnX2J1ZnN6ICE9IDApCi0JCWtmcmVlKGtidWYpOworCWlmIChjbWRidWYtPmJ1ZnN6ICE9IDApCisJCWRybV9idWZmZXJfZnJlZShjbWRidWYtPmJ1ZmZlcik7CiAKIAlEUk1fREVCVUcoIkRPTkVcbiIpOwogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiAKICAgICAgIGVycjoKLQlpZiAob3JpZ19idWZzeiAhPSAwKQotCQlrZnJlZShrYnVmKTsKKwlpZiAoY21kYnVmLT5idWZzeiAhPSAwKQorCQlkcm1fYnVmZmVyX2ZyZWUoY21kYnVmLT5idWZmZXIpOwogCXJldHVybiAtRUlOVkFMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggOWY1ZTJmOS4uMzEzYzk2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCXJhZGVvbl9ib19rdW5tYXAoZ3R0X29ialtpXSk7CiAKIAkJRFJNX0lORk8oIlRlc3RlZCBHVFQtPlZSQU0gYW5kIFZSQU0tPkdUVCBjb3B5IGZvciBHVFQgb2Zmc2V0IDB4JWxseFxuIiwKLQkJCSBndHRfYWRkciAtIHJkZXYtPm1jLmd0dF9sb2NhdGlvbik7CisJCQkgZ3R0X2FkZHIgLSByZGV2LT5tYy5ndHRfc3RhcnQpOwogCX0KIAogb3V0X2NsZWFudXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCmluZGV4IDU4YjVhZGYuLjQzYzVhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1RUOgotCQltYW4tPmdwdV9vZmZzZXQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247CisJCW1hbi0+Z3B1X29mZnNldCA9IHJkZXYtPm1jLmd0dF9zdGFydDsKIAkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkc7CiAJCW1hbi0+ZGVmYXVsdF9jYWNoaW5nID0gVFRNX1BMX0ZMQUdfQ0FDSEVEOwogCQltYW4tPmZsYWdzID0gVFRNX01FTVRZUEVfRkxBR19NQVBQQUJMRSB8IFRUTV9NRU1UWVBFX0ZMQUdfQ01BOwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1ZSQU06CiAJCS8qICJPbi1jYXJkIiB2aWRlbyByYW0gKi8KLQkJbWFuLT5ncHVfb2Zmc2V0ID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJbWFuLT5ncHVfb2Zmc2V0ID0gcmRldi0+bWMudnJhbV9zdGFydDsKIAkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfRklYRUQgfAogCQkJICAgICBUVE1fTUVNVFlQRV9GTEFHX05FRURTX0lPUkVNQVAgfAogCQkJICAgICBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOwpAQCAtMjYyLDEwICsyNjIsMTAgQEAKIAogCXN3aXRjaCAob2xkX21lbS0+bWVtX3R5cGUpIHsKIAljYXNlIFRUTV9QTF9WUkFNOgotCQlvbGRfc3RhcnQgKz0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJb2xkX3N0YXJ0ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQ7CiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1RUOgotCQlvbGRfc3RhcnQgKz0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOworCQlvbGRfc3RhcnQgKz0gcmRldi0+bWMuZ3R0X3N0YXJ0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gcGxhY2VtZW50ICVkXG4iLCBvbGRfbWVtLT5tZW1fdHlwZSk7CkBAIC0yNzMsMTAgKzI3MywxMCBAQAogCX0KIAlzd2l0Y2ggKG5ld19tZW0tPm1lbV90eXBlKSB7CiAJY2FzZSBUVE1fUExfVlJBTToKLQkJbmV3X3N0YXJ0ICs9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJCW5ld19zdGFydCArPSByZGV2LT5tYy52cmFtX3N0YXJ0OwogCQlicmVhazsKIAljYXNlIFRUTV9QTF9UVDoKLQkJbmV3X3N0YXJ0ICs9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKKwkJbmV3X3N0YXJ0ICs9IHJkZXYtPm1jLmd0dF9zdGFydDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmtub3duIHBsYWNlbWVudCAlZFxuIiwgb2xkX21lbS0+bWVtX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDE0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKQEAgLTAsMCArMSw4MzcgQEAKK3I2MDAgMHg5NDAwCisweDAwMDI4N0EwIFI3eHhfQ0JfU0hBREVSX0NPTlRST0wKKzB4MDAwMjgyMzAgUjd4eF9QQV9TQ19FREdFUlVMRQorMHgwMDAyODZDOCBSN3h4X1NQSV9USFJFQURfR1JPVVBJTkcKKzB4MDAwMDhEOEMgUjd4eF9TUV9EWU5fR1BSX0NOVExfUFNfRkxVU0hfUkVRCisweDAwMDA4OEM0IFZHVF9DQUNIRV9JTlZBTElEQVRJT04KKzB4MDAwMjhBNTAgVkdUX0VOSEFOQ0UKKzB4MDAwMDg4Q0MgVkdUX0VTX1BFUl9HUworMHgwMDAyOEEyQyBWR1RfR1JPVVBfREVDUgorMHgwMDAyOEEyOCBWR1RfR1JPVVBfRklSU1RfREVDUgorMHgwMDAyOEEyNCBWR1RfR1JPVVBfUFJJTV9UWVBFCisweDAwMDI4QTMwIFZHVF9HUk9VUF9WRUNUXzBfQ05UTAorMHgwMDAyOEEzOCBWR1RfR1JPVVBfVkVDVF8wX0ZNVF9DTlRMCisweDAwMDI4QTM0IFZHVF9HUk9VUF9WRUNUXzFfQ05UTAorMHgwMDAyOEEzQyBWR1RfR1JPVVBfVkVDVF8xX0ZNVF9DTlRMCisweDAwMDI4QTQwIFZHVF9HU19NT0RFCisweDAwMDI4QTZDIFZHVF9HU19PVVRfUFJJTV9UWVBFCisweDAwMDA4OEM4IFZHVF9HU19QRVJfRVMKKzB4MDAwMDg4RTggVkdUX0dTX1BFUl9WUworMHgwMDAwODhENCBWR1RfR1NfVkVSVEVYX1JFVVNFCisweDAwMDI4QTE0IFZHVF9IT1NfQ05UTAorMHgwMDAyOEExOCBWR1RfSE9TX01BWF9URVNTX0xFVkVMCisweDAwMDI4QTFDIFZHVF9IT1NfTUlOX1RFU1NfTEVWRUwKKzB4MDAwMjhBMjAgVkdUX0hPU19SRVVTRV9ERVBUSAorMHgwMDAwODk1QyBWR1RfSU5ERVhfVFlQRQorMHgwMDAyODQwOCBWR1RfSU5EWF9PRkZTRVQKKzB4MDAwMjhBQTAgVkdUX0lOU1RBTkNFX1NURVBfUkFURV8wCisweDAwMDI4QUE0IFZHVF9JTlNUQU5DRV9TVEVQX1JBVEVfMQorMHgwMDAwODhDMCBWR1RfTEFTVF9DT1BZX1NUQVRFCisweDAwMDI4NDAwIFZHVF9NQVhfVlRYX0lORFgKKzB4MDAwMDg4RDggVkdUX01DX0xBVF9DTlRMCisweDAwMDI4NDA0IFZHVF9NSU5fVlRYX0lORFgKKzB4MDAwMjhBOTQgVkdUX01VTFRJX1BSSU1fSUJfUkVTRVRfRU4KKzB4MDAwMjg0MEMgVkdUX01VTFRJX1BSSU1fSUJfUkVTRVRfSU5EWAorMHgwMDAwODk3MCBWR1RfTlVNX0lORElDRVMKKzB4MDAwMDg5NzQgVkdUX05VTV9JTlNUQU5DRVMKKzB4MDAwMjhBMTAgVkdUX09VVFBVVF9QQVRIX0NOVEwKKzB4MDAwMjhDNUMgVkdUX09VVF9ERUFMTE9DX0NOVEwKKzB4MDAwMjhBODQgVkdUX1BSSU1JVElWRUlEX0VOCisweDAwMDA4OTU4IFZHVF9QUklNSVRJVkVfVFlQRQorMHgwMDAyOEFCNCBWR1RfUkVVU0VfT0ZGCisweDAwMDI4QzU4IFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTAorMHgwMDAyOEFCOCBWR1RfVlRYX0NOVF9FTgorMHgwMDAwODhCMCBWR1RfVlRYX1ZFQ1RfRUpFQ1RfUkVHCisweDAwMDI4ODEwIFBBX0NMX0NMSVBfQ05UTAorMHgwMDAwOEExNCBQQV9DTF9FTkhBTkNFCisweDAwMDI4QzE0IFBBX0NMX0dCX0hPUlpfQ0xJUF9BREoKKzB4MDAwMjhDMTggUEFfQ0xfR0JfSE9SWl9ESVNDX0FESgorMHgwMDAyOEMwQyBQQV9DTF9HQl9WRVJUX0NMSVBfQURKCisweDAwMDI4QzEwIFBBX0NMX0dCX1ZFUlRfRElTQ19BREoKKzB4MDAwMjg4MjAgUEFfQ0xfTkFOSU5GX0NOVEwKKzB4MDAwMjhFMUMgUEFfQ0xfUE9JTlRfQ1VMTF9SQUQKKzB4MDAwMjhFMTggUEFfQ0xfUE9JTlRfU0laRQorMHgwMDAyOEUxMCBQQV9DTF9QT0lOVF9YX1JBRAorMHgwMDAyOEUxNCBQQV9DTF9QT0lOVF9ZX1JBRAorMHgwMDAyOEUyQyBQQV9DTF9VQ1BfMF9XCisweDAwMDI4RTNDIFBBX0NMX1VDUF8xX1cKKzB4MDAwMjhFNEMgUEFfQ0xfVUNQXzJfVworMHgwMDAyOEU1QyBQQV9DTF9VQ1BfM19XCisweDAwMDI4RTZDIFBBX0NMX1VDUF80X1cKKzB4MDAwMjhFN0MgUEFfQ0xfVUNQXzVfVworMHgwMDAyOEUyMCBQQV9DTF9VQ1BfMF9YCisweDAwMDI4RTMwIFBBX0NMX1VDUF8xX1gKKzB4MDAwMjhFNDAgUEFfQ0xfVUNQXzJfWAorMHgwMDAyOEU1MCBQQV9DTF9VQ1BfM19YCisweDAwMDI4RTYwIFBBX0NMX1VDUF80X1gKKzB4MDAwMjhFNzAgUEFfQ0xfVUNQXzVfWAorMHgwMDAyOEUyNCBQQV9DTF9VQ1BfMF9ZCisweDAwMDI4RTM0IFBBX0NMX1VDUF8xX1kKKzB4MDAwMjhFNDQgUEFfQ0xfVUNQXzJfWQorMHgwMDAyOEU1NCBQQV9DTF9VQ1BfM19ZCisweDAwMDI4RTY0IFBBX0NMX1VDUF80X1kKKzB4MDAwMjhFNzQgUEFfQ0xfVUNQXzVfWQorMHgwMDAyOEUyOCBQQV9DTF9VQ1BfMF9aCisweDAwMDI4RTM4IFBBX0NMX1VDUF8xX1oKKzB4MDAwMjhFNDggUEFfQ0xfVUNQXzJfWgorMHgwMDAyOEU1OCBQQV9DTF9VQ1BfM19aCisweDAwMDI4RTY4IFBBX0NMX1VDUF80X1oKKzB4MDAwMjhFNzggUEFfQ0xfVUNQXzVfWgorMHgwMDAyODQ0MCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzAKKzB4MDAwMjg0NTggUEFfQ0xfVlBPUlRfWE9GRlNFVF8xCisweDAwMDI4NDcwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfMgorMHgwMDAyODQ4OCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzMKKzB4MDAwMjg0QTAgUEFfQ0xfVlBPUlRfWE9GRlNFVF80CisweDAwMDI4NEI4IFBBX0NMX1ZQT1JUX1hPRkZTRVRfNQorMHgwMDAyODREMCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzYKKzB4MDAwMjg0RTggUEFfQ0xfVlBPUlRfWE9GRlNFVF83CisweDAwMDI4NTAwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfOAorMHgwMDAyODUxOCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzkKKzB4MDAwMjg1MzAgUEFfQ0xfVlBPUlRfWE9GRlNFVF8xMAorMHgwMDAyODU0OCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzExCisweDAwMDI4NTYwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfMTIKKzB4MDAwMjg1NzggUEFfQ0xfVlBPUlRfWE9GRlNFVF8xMworMHgwMDAyODU5MCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzE0CisweDAwMDI4NUE4IFBBX0NMX1ZQT1JUX1hPRkZTRVRfMTUKKzB4MDAwMjg0M0MgUEFfQ0xfVlBPUlRfWFNDQUxFXzAKKzB4MDAwMjg0NTQgUEFfQ0xfVlBPUlRfWFNDQUxFXzEKKzB4MDAwMjg0NkMgUEFfQ0xfVlBPUlRfWFNDQUxFXzIKKzB4MDAwMjg0ODQgUEFfQ0xfVlBPUlRfWFNDQUxFXzMKKzB4MDAwMjg0OUMgUEFfQ0xfVlBPUlRfWFNDQUxFXzQKKzB4MDAwMjg0QjQgUEFfQ0xfVlBPUlRfWFNDQUxFXzUKKzB4MDAwMjg0Q0MgUEFfQ0xfVlBPUlRfWFNDQUxFXzYKKzB4MDAwMjg0RTQgUEFfQ0xfVlBPUlRfWFNDQUxFXzcKKzB4MDAwMjg0RkMgUEFfQ0xfVlBPUlRfWFNDQUxFXzgKKzB4MDAwMjg1MTQgUEFfQ0xfVlBPUlRfWFNDQUxFXzkKKzB4MDAwMjg1MkMgUEFfQ0xfVlBPUlRfWFNDQUxFXzEwCisweDAwMDI4NTQ0IFBBX0NMX1ZQT1JUX1hTQ0FMRV8xMQorMHgwMDAyODU1QyBQQV9DTF9WUE9SVF9YU0NBTEVfMTIKKzB4MDAwMjg1NzQgUEFfQ0xfVlBPUlRfWFNDQUxFXzEzCisweDAwMDI4NThDIFBBX0NMX1ZQT1JUX1hTQ0FMRV8xNAorMHgwMDAyODVBNCBQQV9DTF9WUE9SVF9YU0NBTEVfMTUKKzB4MDAwMjg0NDggUEFfQ0xfVlBPUlRfWU9GRlNFVF8wCisweDAwMDI4NDYwIFBBX0NMX1ZQT1JUX1lPRkZTRVRfMQorMHgwMDAyODQ3OCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzIKKzB4MDAwMjg0OTAgUEFfQ0xfVlBPUlRfWU9GRlNFVF8zCisweDAwMDI4NEE4IFBBX0NMX1ZQT1JUX1lPRkZTRVRfNAorMHgwMDAyODRDMCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzUKKzB4MDAwMjg0RDggUEFfQ0xfVlBPUlRfWU9GRlNFVF82CisweDAwMDI4NEYwIFBBX0NMX1ZQT1JUX1lPRkZTRVRfNworMHgwMDAyODUwOCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzgKKzB4MDAwMjg1MjAgUEFfQ0xfVlBPUlRfWU9GRlNFVF85CisweDAwMDI4NTM4IFBBX0NMX1ZQT1JUX1lPRkZTRVRfMTAKKzB4MDAwMjg1NTAgUEFfQ0xfVlBPUlRfWU9GRlNFVF8xMQorMHgwMDAyODU2OCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzEyCisweDAwMDI4NTgwIFBBX0NMX1ZQT1JUX1lPRkZTRVRfMTMKKzB4MDAwMjg1OTggUEFfQ0xfVlBPUlRfWU9GRlNFVF8xNAorMHgwMDAyODVCMCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzE1CisweDAwMDI4NDQ0IFBBX0NMX1ZQT1JUX1lTQ0FMRV8wCisweDAwMDI4NDVDIFBBX0NMX1ZQT1JUX1lTQ0FMRV8xCisweDAwMDI4NDc0IFBBX0NMX1ZQT1JUX1lTQ0FMRV8yCisweDAwMDI4NDhDIFBBX0NMX1ZQT1JUX1lTQ0FMRV8zCisweDAwMDI4NEE0IFBBX0NMX1ZQT1JUX1lTQ0FMRV80CisweDAwMDI4NEJDIFBBX0NMX1ZQT1JUX1lTQ0FMRV81CisweDAwMDI4NEQ0IFBBX0NMX1ZQT1JUX1lTQ0FMRV82CisweDAwMDI4NEVDIFBBX0NMX1ZQT1JUX1lTQ0FMRV83CisweDAwMDI4NTA0IFBBX0NMX1ZQT1JUX1lTQ0FMRV84CisweDAwMDI4NTFDIFBBX0NMX1ZQT1JUX1lTQ0FMRV85CisweDAwMDI4NTM0IFBBX0NMX1ZQT1JUX1lTQ0FMRV8xMAorMHgwMDAyODU0QyBQQV9DTF9WUE9SVF9ZU0NBTEVfMTEKKzB4MDAwMjg1NjQgUEFfQ0xfVlBPUlRfWVNDQUxFXzEyCisweDAwMDI4NTdDIFBBX0NMX1ZQT1JUX1lTQ0FMRV8xMworMHgwMDAyODU5NCBQQV9DTF9WUE9SVF9ZU0NBTEVfMTQKKzB4MDAwMjg1QUMgUEFfQ0xfVlBPUlRfWVNDQUxFXzE1CisweDAwMDI4NDUwIFBBX0NMX1ZQT1JUX1pPRkZTRVRfMAorMHgwMDAyODQ2OCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzEKKzB4MDAwMjg0ODAgUEFfQ0xfVlBPUlRfWk9GRlNFVF8yCisweDAwMDI4NDk4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfMworMHgwMDAyODRCMCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzQKKzB4MDAwMjg0QzggUEFfQ0xfVlBPUlRfWk9GRlNFVF81CisweDAwMDI4NEUwIFBBX0NMX1ZQT1JUX1pPRkZTRVRfNgorMHgwMDAyODRGOCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzcKKzB4MDAwMjg1MTAgUEFfQ0xfVlBPUlRfWk9GRlNFVF84CisweDAwMDI4NTI4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfOQorMHgwMDAyODU0MCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzEwCisweDAwMDI4NTU4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfMTEKKzB4MDAwMjg1NzAgUEFfQ0xfVlBPUlRfWk9GRlNFVF8xMgorMHgwMDAyODU4OCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzEzCisweDAwMDI4NUEwIFBBX0NMX1ZQT1JUX1pPRkZTRVRfMTQKKzB4MDAwMjg1QjggUEFfQ0xfVlBPUlRfWk9GRlNFVF8xNQorMHgwMDAyODQ0QyBQQV9DTF9WUE9SVF9aU0NBTEVfMAorMHgwMDAyODQ2NCBQQV9DTF9WUE9SVF9aU0NBTEVfMQorMHgwMDAyODQ3QyBQQV9DTF9WUE9SVF9aU0NBTEVfMgorMHgwMDAyODQ5NCBQQV9DTF9WUE9SVF9aU0NBTEVfMworMHgwMDAyODRBQyBQQV9DTF9WUE9SVF9aU0NBTEVfNAorMHgwMDAyODRDNCBQQV9DTF9WUE9SVF9aU0NBTEVfNQorMHgwMDAyODREQyBQQV9DTF9WUE9SVF9aU0NBTEVfNgorMHgwMDAyODRGNCBQQV9DTF9WUE9SVF9aU0NBTEVfNworMHgwMDAyODUwQyBQQV9DTF9WUE9SVF9aU0NBTEVfOAorMHgwMDAyODUyNCBQQV9DTF9WUE9SVF9aU0NBTEVfOQorMHgwMDAyODUzQyBQQV9DTF9WUE9SVF9aU0NBTEVfMTAKKzB4MDAwMjg1NTQgUEFfQ0xfVlBPUlRfWlNDQUxFXzExCisweDAwMDI4NTZDIFBBX0NMX1ZQT1JUX1pTQ0FMRV8xMgorMHgwMDAyODU4NCBQQV9DTF9WUE9SVF9aU0NBTEVfMTMKKzB4MDAwMjg1OUMgUEFfQ0xfVlBPUlRfWlNDQUxFXzE0CisweDAwMDI4NUI0IFBBX0NMX1ZQT1JUX1pTQ0FMRV8xNQorMHgwMDAyODgxQyBQQV9DTF9WU19PVVRfQ05UTAorMHgwMDAyODgxOCBQQV9DTF9WVEVfQ05UTAorMHgwMDAyOEM0OCBQQV9TQ19BQV9NQVNLCisweDAwMDA4QjQwIFBBX1NDX0FBX1NBTVBMRV9MT0NTXzJTCisweDAwMDA4QjQ0IFBBX1NDX0FBX1NBTVBMRV9MT0NTXzRTCisweDAwMDA4QjQ4IFBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMAorMHgwMDAwOEI0QyBQQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDEKKzB4MDAwMjhDMjAgUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QxX01DVFgKKzB4MDAwMjhDMUMgUEFfU0NfQUFfU0FNUExFX0xPQ1NfTUNUWAorMHgwMDAyODIxNCBQQV9TQ19DTElQUkVDVF8wX0JSCisweDAwMDI4MjFDIFBBX1NDX0NMSVBSRUNUXzFfQlIKKzB4MDAwMjgyMjQgUEFfU0NfQ0xJUFJFQ1RfMl9CUgorMHgwMDAyODIyQyBQQV9TQ19DTElQUkVDVF8zX0JSCisweDAwMDI4MjEwIFBBX1NDX0NMSVBSRUNUXzBfVEwKKzB4MDAwMjgyMTggUEFfU0NfQ0xJUFJFQ1RfMV9UTAorMHgwMDAyODIyMCBQQV9TQ19DTElQUkVDVF8yX1RMCisweDAwMDI4MjI4IFBBX1NDX0NMSVBSRUNUXzNfVEwKKzB4MDAwMjgyMEMgUEFfU0NfQ0xJUFJFQ1RfUlVMRQorMHgwMDAwOEJGMCBQQV9TQ19FTkhBTkNFCisweDAwMDI4MjQ0IFBBX1NDX0dFTkVSSUNfU0NJU1NPUl9CUgorMHgwMDAyODI0MCBQQV9TQ19HRU5FUklDX1NDSVNTT1JfVEwKKzB4MDAwMjhDMDAgUEFfU0NfTElORV9DTlRMCisweDAwMDI4QTBDIFBBX1NDX0xJTkVfU1RJUFBMRQorMHgwMDAwOEIxMCBQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUKKzB4MDAwMjhBNEMgUEFfU0NfTU9ERV9DTlRMCisweDAwMDI4QTQ4IFBBX1NDX01QQVNTX1BTX0NOVEwKKzB4MDAwMDhCMjAgUEFfU0NfTVVMVElfQ0hJUF9DTlRMCisweDAwMDI4MDM0IFBBX1NDX1NDUkVFTl9TQ0lTU09SX0JSCisweDAwMDI4MDMwIFBBX1NDX1NDUkVFTl9TQ0lTU09SX1RMCisweDAwMDI4MjU0IFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9CUgorMHgwMDAyODI1QyBQQV9TQ19WUE9SVF9TQ0lTU09SXzFfQlIKKzB4MDAwMjgyNjQgUEFfU0NfVlBPUlRfU0NJU1NPUl8yX0JSCisweDAwMDI4MjZDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfM19CUgorMHgwMDAyODI3NCBQQV9TQ19WUE9SVF9TQ0lTU09SXzRfQlIKKzB4MDAwMjgyN0MgUEFfU0NfVlBPUlRfU0NJU1NPUl81X0JSCisweDAwMDI4Mjg0IFBBX1NDX1ZQT1JUX1NDSVNTT1JfNl9CUgorMHgwMDAyODI4QyBQQV9TQ19WUE9SVF9TQ0lTU09SXzdfQlIKKzB4MDAwMjgyOTQgUEFfU0NfVlBPUlRfU0NJU1NPUl84X0JSCisweDAwMDI4MjlDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfOV9CUgorMHgwMDAyODJBNCBQQV9TQ19WUE9SVF9TQ0lTU09SXzEwX0JSCisweDAwMDI4MkFDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTFfQlIKKzB4MDAwMjgyQjQgUEFfU0NfVlBPUlRfU0NJU1NPUl8xMl9CUgorMHgwMDAyODJCQyBQQV9TQ19WUE9SVF9TQ0lTU09SXzEzX0JSCisweDAwMDI4MkM0IFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTRfQlIKKzB4MDAwMjgyQ0MgUEFfU0NfVlBPUlRfU0NJU1NPUl8xNV9CUgorMHgwMDAyODI1MCBQQV9TQ19WUE9SVF9TQ0lTU09SXzBfVEwKKzB4MDAwMjgyNTggUEFfU0NfVlBPUlRfU0NJU1NPUl8xX1RMCisweDAwMDI4MjYwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMl9UTAorMHgwMDAyODI2OCBQQV9TQ19WUE9SVF9TQ0lTU09SXzNfVEwKKzB4MDAwMjgyNzAgUEFfU0NfVlBPUlRfU0NJU1NPUl80X1RMCisweDAwMDI4Mjc4IFBBX1NDX1ZQT1JUX1NDSVNTT1JfNV9UTAorMHgwMDAyODI4MCBQQV9TQ19WUE9SVF9TQ0lTU09SXzZfVEwKKzB4MDAwMjgyODggUEFfU0NfVlBPUlRfU0NJU1NPUl83X1RMCisweDAwMDI4MjkwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfOF9UTAorMHgwMDAyODI5OCBQQV9TQ19WUE9SVF9TQ0lTU09SXzlfVEwKKzB4MDAwMjgyQTAgUEFfU0NfVlBPUlRfU0NJU1NPUl8xMF9UTAorMHgwMDAyODJBOCBQQV9TQ19WUE9SVF9TQ0lTU09SXzExX1RMCisweDAwMDI4MkIwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTJfVEwKKzB4MDAwMjgyQjggUEFfU0NfVlBPUlRfU0NJU1NPUl8xM19UTAorMHgwMDAyODJDMCBQQV9TQ19WUE9SVF9TQ0lTU09SXzE0X1RMCisweDAwMDI4MkM4IFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTVfVEwKKzB4MDAwMjgyRDQgUEFfU0NfVlBPUlRfWk1BWF8wCisweDAwMDI4MkRDIFBBX1NDX1ZQT1JUX1pNQVhfMQorMHgwMDAyODJFNCBQQV9TQ19WUE9SVF9aTUFYXzIKKzB4MDAwMjgyRUMgUEFfU0NfVlBPUlRfWk1BWF8zCisweDAwMDI4MkY0IFBBX1NDX1ZQT1JUX1pNQVhfNAorMHgwMDAyODJGQyBQQV9TQ19WUE9SVF9aTUFYXzUKKzB4MDAwMjgzMDQgUEFfU0NfVlBPUlRfWk1BWF82CisweDAwMDI4MzBDIFBBX1NDX1ZQT1JUX1pNQVhfNworMHgwMDAyODMxNCBQQV9TQ19WUE9SVF9aTUFYXzgKKzB4MDAwMjgzMUMgUEFfU0NfVlBPUlRfWk1BWF85CisweDAwMDI4MzI0IFBBX1NDX1ZQT1JUX1pNQVhfMTAKKzB4MDAwMjgzMkMgUEFfU0NfVlBPUlRfWk1BWF8xMQorMHgwMDAyODMzNCBQQV9TQ19WUE9SVF9aTUFYXzEyCisweDAwMDI4MzNDIFBBX1NDX1ZQT1JUX1pNQVhfMTMKKzB4MDAwMjgzNDQgUEFfU0NfVlBPUlRfWk1BWF8xNAorMHgwMDAyODM0QyBQQV9TQ19WUE9SVF9aTUFYXzE1CisweDAwMDI4MkQwIFBBX1NDX1ZQT1JUX1pNSU5fMAorMHgwMDAyODJEOCBQQV9TQ19WUE9SVF9aTUlOXzEKKzB4MDAwMjgyRTAgUEFfU0NfVlBPUlRfWk1JTl8yCisweDAwMDI4MkU4IFBBX1NDX1ZQT1JUX1pNSU5fMworMHgwMDAyODJGMCBQQV9TQ19WUE9SVF9aTUlOXzQKKzB4MDAwMjgyRjggUEFfU0NfVlBPUlRfWk1JTl81CisweDAwMDI4MzAwIFBBX1NDX1ZQT1JUX1pNSU5fNgorMHgwMDAyODMwOCBQQV9TQ19WUE9SVF9aTUlOXzcKKzB4MDAwMjgzMTAgUEFfU0NfVlBPUlRfWk1JTl84CisweDAwMDI4MzE4IFBBX1NDX1ZQT1JUX1pNSU5fOQorMHgwMDAyODMyMCBQQV9TQ19WUE9SVF9aTUlOXzEwCisweDAwMDI4MzI4IFBBX1NDX1ZQT1JUX1pNSU5fMTEKKzB4MDAwMjgzMzAgUEFfU0NfVlBPUlRfWk1JTl8xMgorMHgwMDAyODMzOCBQQV9TQ19WUE9SVF9aTUlOXzEzCisweDAwMDI4MzQwIFBBX1NDX1ZQT1JUX1pNSU5fMTQKKzB4MDAwMjgzNDggUEFfU0NfVlBPUlRfWk1JTl8xNQorMHgwMDAyODIwMCBQQV9TQ19XSU5ET1dfT0ZGU0VUCisweDAwMDI4MjA4IFBBX1NDX1dJTkRPV19TQ0lTU09SX0JSCisweDAwMDI4MjA0IFBBX1NDX1dJTkRPV19TQ0lTU09SX1RMCisweDAwMDI4QTA4IFBBX1NVX0xJTkVfQ05UTAorMHgwMDAyOEEwNCBQQV9TVV9QT0lOVF9NSU5NQVgKKzB4MDAwMjhBMDAgUEFfU1VfUE9JTlRfU0laRQorMHgwMDAyOEUwQyBQQV9TVV9QT0xZX09GRlNFVF9CQUNLX09GRlNFVAorMHgwMDAyOEUwOCBQQV9TVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFCisweDAwMDI4REZDIFBBX1NVX1BPTFlfT0ZGU0VUX0NMQU1QCisweDAwMDI4REY4IFBBX1NVX1BPTFlfT0ZGU0VUX0RCX0ZNVF9DTlRMCisweDAwMDI4RTA0IFBBX1NVX1BPTFlfT0ZGU0VUX0ZST05UX09GRlNFVAorMHgwMDAyOEUwMCBQQV9TVV9QT0xZX09GRlNFVF9GUk9OVF9TQ0FMRQorMHgwMDAyODgxNCBQQV9TVV9TQ19NT0RFX0NOVEwKKzB4MDAwMjhDMDggUEFfU1VfVlRYX0NOVEwKKzB4MDAwMDhDMDAgU1FfQ09ORklHCisweDAwMDA4QzA0IFNRX0dQUl9SRVNPVVJDRV9NR01UXzEKKzB4MDAwMDhDMDggU1FfR1BSX1JFU09VUkNFX01HTVRfMgorMHgwMDAwOEMxMCBTUV9TVEFDS19SRVNPVVJDRV9NR01UXzEKKzB4MDAwMDhDMTQgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yCisweDAwMDA4QzBDIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01UCisweDAwMDI4MzgwIFNRX1ZUWF9TRU1BTlRJQ18wCisweDAwMDI4Mzg0IFNRX1ZUWF9TRU1BTlRJQ18xCisweDAwMDI4Mzg4IFNRX1ZUWF9TRU1BTlRJQ18yCisweDAwMDI4MzhDIFNRX1ZUWF9TRU1BTlRJQ18zCisweDAwMDI4MzkwIFNRX1ZUWF9TRU1BTlRJQ180CisweDAwMDI4Mzk0IFNRX1ZUWF9TRU1BTlRJQ181CisweDAwMDI4Mzk4IFNRX1ZUWF9TRU1BTlRJQ182CisweDAwMDI4MzlDIFNRX1ZUWF9TRU1BTlRJQ183CisweDAwMDI4M0EwIFNRX1ZUWF9TRU1BTlRJQ184CisweDAwMDI4M0E0IFNRX1ZUWF9TRU1BTlRJQ185CisweDAwMDI4M0E4IFNRX1ZUWF9TRU1BTlRJQ18xMAorMHgwMDAyODNBQyBTUV9WVFhfU0VNQU5USUNfMTEKKzB4MDAwMjgzQjAgU1FfVlRYX1NFTUFOVElDXzEyCisweDAwMDI4M0I0IFNRX1ZUWF9TRU1BTlRJQ18xMworMHgwMDAyODNCOCBTUV9WVFhfU0VNQU5USUNfMTQKKzB4MDAwMjgzQkMgU1FfVlRYX1NFTUFOVElDXzE1CisweDAwMDI4M0MwIFNRX1ZUWF9TRU1BTlRJQ18xNgorMHgwMDAyODNDNCBTUV9WVFhfU0VNQU5USUNfMTcKKzB4MDAwMjgzQzggU1FfVlRYX1NFTUFOVElDXzE4CisweDAwMDI4M0NDIFNRX1ZUWF9TRU1BTlRJQ18xOQorMHgwMDAyODNEMCBTUV9WVFhfU0VNQU5USUNfMjAKKzB4MDAwMjgzRDQgU1FfVlRYX1NFTUFOVElDXzIxCisweDAwMDI4M0Q4IFNRX1ZUWF9TRU1BTlRJQ18yMgorMHgwMDAyODNEQyBTUV9WVFhfU0VNQU5USUNfMjMKKzB4MDAwMjgzRTAgU1FfVlRYX1NFTUFOVElDXzI0CisweDAwMDI4M0U0IFNRX1ZUWF9TRU1BTlRJQ18yNQorMHgwMDAyODNFOCBTUV9WVFhfU0VNQU5USUNfMjYKKzB4MDAwMjgzRUMgU1FfVlRYX1NFTUFOVElDXzI3CisweDAwMDI4M0YwIFNRX1ZUWF9TRU1BTlRJQ18yOAorMHgwMDAyODNGNCBTUV9WVFhfU0VNQU5USUNfMjkKKzB4MDAwMjgzRjggU1FfVlRYX1NFTUFOVElDXzMwCisweDAwMDI4M0ZDIFNRX1ZUWF9TRU1BTlRJQ18zMQorMHgwMDAyODhFMCBTUV9WVFhfU0VNQU5USUNfQ0xFQVIKKzB4MDAwM0NGRjQgU1FfVlRYX1NUQVJUX0lOU1RfTE9DCisweDAwMDNDMDAwIFNRX1RFWF9TQU1QTEVSX1dPUkQwXzAKKzB4MDAwM0MwMDQgU1FfVEVYX1NBTVBMRVJfV09SRDFfMAorMHgwMDAzQzAwOCBTUV9URVhfU0FNUExFUl9XT1JEMl8wCisweDAwMDMwMDAwIFNRX0FMVV9DT05TVEFOVDBfMAorMHgwMDAzMDAwNCBTUV9BTFVfQ09OU1RBTlQxXzAKKzB4MDAwMzAwMDggU1FfQUxVX0NPTlNUQU5UMl8wCisweDAwMDMwMDBDIFNRX0FMVV9DT05TVEFOVDNfMAorMHgwMDAzRTM4MCBTUV9CT09MX0NPTlNUXzAKKzB4MDAwM0UzODQgU1FfQk9PTF9DT05TVF8xCisweDAwMDNFMzg4IFNRX0JPT0xfQ09OU1RfMgorMHgwMDAzRTIwMCBTUV9MT09QX0NPTlNUXzAKKzB4MDAwM0UyMDAgU1FfTE9PUF9DT05TVF9EWDEwXzAKKzB4MDAwMjgxQzAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzAKKzB4MDAwMjgxQzQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzEKKzB4MDAwMjgxQzggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzIKKzB4MDAwMjgxQ0MgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzMKKzB4MDAwMjgxRDAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzQKKzB4MDAwMjgxRDQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzUKKzB4MDAwMjgxRDggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzYKKzB4MDAwMjgxREMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzcKKzB4MDAwMjgxRTAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzgKKzB4MDAwMjgxRTQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzkKKzB4MDAwMjgxRTggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzEwCisweDAwMDI4MUVDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9HU18xMQorMHgwMDAyODFGMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMTIKKzB4MDAwMjgxRjQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzEzCisweDAwMDI4MUY4IFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9HU18xNAorMHgwMDAyODFGQyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMTUKKzB4MDAwMjgxNDAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzAKKzB4MDAwMjgxNDQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzEKKzB4MDAwMjgxNDggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzIKKzB4MDAwMjgxNEMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzMKKzB4MDAwMjgxNTAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzQKKzB4MDAwMjgxNTQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzUKKzB4MDAwMjgxNTggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzYKKzB4MDAwMjgxNUMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzcKKzB4MDAwMjgxNjAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzgKKzB4MDAwMjgxNjQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzkKKzB4MDAwMjgxNjggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzEwCisweDAwMDI4MTZDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9QU18xMQorMHgwMDAyODE3MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMTIKKzB4MDAwMjgxNzQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzEzCisweDAwMDI4MTc4IFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9QU18xNAorMHgwMDAyODE3QyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMTUKKzB4MDAwMjgxODAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzAKKzB4MDAwMjgxODQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzEKKzB4MDAwMjgxODggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzIKKzB4MDAwMjgxOEMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzMKKzB4MDAwMjgxOTAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzQKKzB4MDAwMjgxOTQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzUKKzB4MDAwMjgxOTggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzYKKzB4MDAwMjgxOUMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzcKKzB4MDAwMjgxQTAgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzgKKzB4MDAwMjgxQTQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzkKKzB4MDAwMjgxQTggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzEwCisweDAwMDI4MUFDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9WU18xMQorMHgwMDAyODFCMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMTIKKzB4MDAwMjgxQjQgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzEzCisweDAwMDI4MUI4IFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9WU18xNAorMHgwMDAyODFCQyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMTUKKzB4MDAwMjg5QzAgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzAKKzB4MDAwMjg5QzQgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzEKKzB4MDAwMjg5QzggU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzIKKzB4MDAwMjg5Q0MgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzMKKzB4MDAwMjg5RDAgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzQKKzB4MDAwMjg5RDQgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzUKKzB4MDAwMjg5RDggU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzYKKzB4MDAwMjg5REMgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzcKKzB4MDAwMjg5RTAgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzgKKzB4MDAwMjg5RTQgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzkKKzB4MDAwMjg5RTggU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzEwCisweDAwMDI4OUVDIFNRX0FMVV9DT05TVF9DQUNIRV9HU18xMQorMHgwMDAyODlGMCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMTIKKzB4MDAwMjg5RjQgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzEzCisweDAwMDI4OUY4IFNRX0FMVV9DT05TVF9DQUNIRV9HU18xNAorMHgwMDAyODlGQyBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMTUKKzB4MDAwMjg5NDAgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzAKKzB4MDAwMjg5NDQgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzEKKzB4MDAwMjg5NDggU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzIKKzB4MDAwMjg5NEMgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzMKKzB4MDAwMjg5NTAgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzQKKzB4MDAwMjg5NTQgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzUKKzB4MDAwMjg5NTggU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzYKKzB4MDAwMjg5NUMgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzcKKzB4MDAwMjg5NjAgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzgKKzB4MDAwMjg5NjQgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzkKKzB4MDAwMjg5NjggU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzEwCisweDAwMDI4OTZDIFNRX0FMVV9DT05TVF9DQUNIRV9QU18xMQorMHgwMDAyODk3MCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMTIKKzB4MDAwMjg5NzQgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzEzCisweDAwMDI4OTc4IFNRX0FMVV9DT05TVF9DQUNIRV9QU18xNAorMHgwMDAyODk3QyBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMTUKKzB4MDAwMjg5ODAgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzAKKzB4MDAwMjg5ODQgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzEKKzB4MDAwMjg5ODggU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzIKKzB4MDAwMjg5OEMgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzMKKzB4MDAwMjg5OTAgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzQKKzB4MDAwMjg5OTQgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzUKKzB4MDAwMjg5OTggU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzYKKzB4MDAwMjg5OUMgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzcKKzB4MDAwMjg5QTAgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzgKKzB4MDAwMjg5QTQgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzkKKzB4MDAwMjg5QTggU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzEwCisweDAwMDI4OUFDIFNRX0FMVV9DT05TVF9DQUNIRV9WU18xMQorMHgwMDAyODlCMCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMTIKKzB4MDAwMjg5QjQgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzEzCisweDAwMDI4OUI4IFNRX0FMVV9DT05TVF9DQUNIRV9WU18xNAorMHgwMDAyODlCQyBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMTUKKzB4MDAwMjg4RDggU1FfUEdNX0NGX09GRlNFVF9FUworMHgwMDAyODhEQyBTUV9QR01fQ0ZfT0ZGU0VUX0ZTCisweDAwMDI4OEQ0IFNRX1BHTV9DRl9PRkZTRVRfR1MKKzB4MDAwMjg4Q0MgU1FfUEdNX0NGX09GRlNFVF9QUworMHgwMDAyODhEMCBTUV9QR01fQ0ZfT0ZGU0VUX1ZTCisweDAwMDI4ODU0IFNRX1BHTV9FWFBPUlRTX1BTCisweDAwMDI4ODkwIFNRX1BHTV9SRVNPVVJDRVNfRVMKKzB4MDAwMjg4QTQgU1FfUEdNX1JFU09VUkNFU19GUworMHgwMDAyODg3QyBTUV9QR01fUkVTT1VSQ0VTX0dTCisweDAwMDI4ODUwIFNRX1BHTV9SRVNPVVJDRVNfUFMKKzB4MDAwMjg4NjggU1FfUEdNX1JFU09VUkNFU19WUworMHgwMDAwOTEwMCBTUElfQ09ORklHX0NOVEwKKzB4MDAwMDkxM0MgU1BJX0NPTkZJR19DTlRMXzEKKzB4MDAwMjg2REMgU1BJX0ZPR19DTlRMCisweDAwMDI4NkU0IFNQSV9GT0dfRlVOQ19CSUFTCisweDAwMDI4NkUwIFNQSV9GT0dfRlVOQ19TQ0FMRQorMHgwMDAyODZEOCBTUElfSU5QVVRfWgorMHgwMDAyODZENCBTUElfSU5URVJQX0NPTlRST0xfMAorMHgwMDAyODY0NCBTUElfUFNfSU5QVVRfQ05UTF8wCisweDAwMDI4NjQ4IFNQSV9QU19JTlBVVF9DTlRMXzEKKzB4MDAwMjg2NEMgU1BJX1BTX0lOUFVUX0NOVExfMgorMHgwMDAyODY1MCBTUElfUFNfSU5QVVRfQ05UTF8zCisweDAwMDI4NjU0IFNQSV9QU19JTlBVVF9DTlRMXzQKKzB4MDAwMjg2NTggU1BJX1BTX0lOUFVUX0NOVExfNQorMHgwMDAyODY1QyBTUElfUFNfSU5QVVRfQ05UTF82CisweDAwMDI4NjYwIFNQSV9QU19JTlBVVF9DTlRMXzcKKzB4MDAwMjg2NjQgU1BJX1BTX0lOUFVUX0NOVExfOAorMHgwMDAyODY2OCBTUElfUFNfSU5QVVRfQ05UTF85CisweDAwMDI4NjZDIFNQSV9QU19JTlBVVF9DTlRMXzEwCisweDAwMDI4NjcwIFNQSV9QU19JTlBVVF9DTlRMXzExCisweDAwMDI4Njc0IFNQSV9QU19JTlBVVF9DTlRMXzEyCisweDAwMDI4Njc4IFNQSV9QU19JTlBVVF9DTlRMXzEzCisweDAwMDI4NjdDIFNQSV9QU19JTlBVVF9DTlRMXzE0CisweDAwMDI4NjgwIFNQSV9QU19JTlBVVF9DTlRMXzE1CisweDAwMDI4Njg0IFNQSV9QU19JTlBVVF9DTlRMXzE2CisweDAwMDI4Njg4IFNQSV9QU19JTlBVVF9DTlRMXzE3CisweDAwMDI4NjhDIFNQSV9QU19JTlBVVF9DTlRMXzE4CisweDAwMDI4NjkwIFNQSV9QU19JTlBVVF9DTlRMXzE5CisweDAwMDI4Njk0IFNQSV9QU19JTlBVVF9DTlRMXzIwCisweDAwMDI4Njk4IFNQSV9QU19JTlBVVF9DTlRMXzIxCisweDAwMDI4NjlDIFNQSV9QU19JTlBVVF9DTlRMXzIyCisweDAwMDI4NkEwIFNQSV9QU19JTlBVVF9DTlRMXzIzCisweDAwMDI4NkE0IFNQSV9QU19JTlBVVF9DTlRMXzI0CisweDAwMDI4NkE4IFNQSV9QU19JTlBVVF9DTlRMXzI1CisweDAwMDI4NkFDIFNQSV9QU19JTlBVVF9DTlRMXzI2CisweDAwMDI4NkIwIFNQSV9QU19JTlBVVF9DTlRMXzI3CisweDAwMDI4NkI0IFNQSV9QU19JTlBVVF9DTlRMXzI4CisweDAwMDI4NkI4IFNQSV9QU19JTlBVVF9DTlRMXzI5CisweDAwMDI4NkJDIFNQSV9QU19JTlBVVF9DTlRMXzMwCisweDAwMDI4NkMwIFNQSV9QU19JTlBVVF9DTlRMXzMxCisweDAwMDI4NkNDIFNQSV9QU19JTl9DT05UUk9MXzAKKzB4MDAwMjg2RDAgU1BJX1BTX0lOX0NPTlRST0xfMQorMHgwMDAyODZDNCBTUElfVlNfT1VUX0NPTkZJRworMHgwMDAyODYxNCBTUElfVlNfT1VUX0lEXzAKKzB4MDAwMjg2MTggU1BJX1ZTX09VVF9JRF8xCisweDAwMDI4NjFDIFNQSV9WU19PVVRfSURfMgorMHgwMDAyODYyMCBTUElfVlNfT1VUX0lEXzMKKzB4MDAwMjg2MjQgU1BJX1ZTX09VVF9JRF80CisweDAwMDI4NjI4IFNQSV9WU19PVVRfSURfNQorMHgwMDAyODYyQyBTUElfVlNfT1VUX0lEXzYKKzB4MDAwMjg2MzAgU1BJX1ZTX09VVF9JRF83CisweDAwMDI4NjM0IFNQSV9WU19PVVRfSURfOAorMHgwMDAyODYzOCBTUElfVlNfT1VUX0lEXzkKKzB4MDAwMjg0MzggU1hfQUxQSEFfUkVGCisweDAwMDI4NDEwIFNYX0FMUEhBX1RFU1RfQ09OVFJPTAorMHgwMDAyODM1MCBTWF9NSVNDCisweDAwMDBBMDIwIFNNWF9EQ19DVEwwCisweDAwMDBBMDI0IFNNWF9EQ19DVEwxCisweDAwMDBBMDI4IFNNWF9EQ19DVEwyCisweDAwMDA5NjA4IFRDX0NOVEwKKzB4MDAwMDk2MDQgVENfSU5WQUxJREFURQorMHgwMDAwOTQ5MCBURF9DTlRMCisweDAwMDA5NDAwIFREX0ZJTFRFUjQKKzB4MDAwMDk0MDQgVERfRklMVEVSNF8xCisweDAwMDA5NDA4IFREX0ZJTFRFUjRfMgorMHgwMDAwOTQwQyBURF9GSUxURVI0XzMKKzB4MDAwMDk0MTAgVERfRklMVEVSNF80CisweDAwMDA5NDE0IFREX0ZJTFRFUjRfNQorMHgwMDAwOTQxOCBURF9GSUxURVI0XzYKKzB4MDAwMDk0MUMgVERfRklMVEVSNF83CisweDAwMDA5NDIwIFREX0ZJTFRFUjRfOAorMHgwMDAwOTQyNCBURF9GSUxURVI0XzkKKzB4MDAwMDk0MjggVERfRklMVEVSNF8xMAorMHgwMDAwOTQyQyBURF9GSUxURVI0XzExCisweDAwMDA5NDMwIFREX0ZJTFRFUjRfMTIKKzB4MDAwMDk0MzQgVERfRklMVEVSNF8xMworMHgwMDAwOTQzOCBURF9GSUxURVI0XzE0CisweDAwMDA5NDNDIFREX0ZJTFRFUjRfMTUKKzB4MDAwMDk0NDAgVERfRklMVEVSNF8xNgorMHgwMDAwOTQ0NCBURF9GSUxURVI0XzE3CisweDAwMDA5NDQ4IFREX0ZJTFRFUjRfMTgKKzB4MDAwMDk0NEMgVERfRklMVEVSNF8xOQorMHgwMDAwOTQ1MCBURF9GSUxURVI0XzIwCisweDAwMDA5NDU0IFREX0ZJTFRFUjRfMjEKKzB4MDAwMDk0NTggVERfRklMVEVSNF8yMgorMHgwMDAwOTQ1QyBURF9GSUxURVI0XzIzCisweDAwMDA5NDYwIFREX0ZJTFRFUjRfMjQKKzB4MDAwMDk0NjQgVERfRklMVEVSNF8yNQorMHgwMDAwOTQ2OCBURF9GSUxURVI0XzI2CisweDAwMDA5NDZDIFREX0ZJTFRFUjRfMjcKKzB4MDAwMDk0NzAgVERfRklMVEVSNF8yOAorMHgwMDAwOTQ3NCBURF9GSUxURVI0XzI5CisweDAwMDA5NDc4IFREX0ZJTFRFUjRfMzAKKzB4MDAwMDk0N0MgVERfRklMVEVSNF8zMQorMHgwMDAwOTQ4MCBURF9GSUxURVI0XzMyCisweDAwMDA5NDg0IFREX0ZJTFRFUjRfMzMKKzB4MDAwMDk0ODggVERfRklMVEVSNF8zNAorMHgwMDAwOTQ4QyBURF9GSUxURVI0XzM1CisweDAwMDBBODBDIFREX0dTX1NBTVBMRVIwX0JPUkRFUl9BTFBIQQorMHgwMDAwQTgxQyBURF9HU19TQU1QTEVSMV9CT1JERVJfQUxQSEEKKzB4MDAwMEE4MkMgVERfR1NfU0FNUExFUjJfQk9SREVSX0FMUEhBCisweDAwMDBBODNDIFREX0dTX1NBTVBMRVIzX0JPUkRFUl9BTFBIQQorMHgwMDAwQTg0QyBURF9HU19TQU1QTEVSNF9CT1JERVJfQUxQSEEKKzB4MDAwMEE4NUMgVERfR1NfU0FNUExFUjVfQk9SREVSX0FMUEhBCisweDAwMDBBODZDIFREX0dTX1NBTVBMRVI2X0JPUkRFUl9BTFBIQQorMHgwMDAwQTg3QyBURF9HU19TQU1QTEVSN19CT1JERVJfQUxQSEEKKzB4MDAwMEE4OEMgVERfR1NfU0FNUExFUjhfQk9SREVSX0FMUEhBCisweDAwMDBBODlDIFREX0dTX1NBTVBMRVI5X0JPUkRFUl9BTFBIQQorMHgwMDAwQThBQyBURF9HU19TQU1QTEVSMTBfQk9SREVSX0FMUEhBCisweDAwMDBBOEJDIFREX0dTX1NBTVBMRVIxMV9CT1JERVJfQUxQSEEKKzB4MDAwMEE4Q0MgVERfR1NfU0FNUExFUjEyX0JPUkRFUl9BTFBIQQorMHgwMDAwQThEQyBURF9HU19TQU1QTEVSMTNfQk9SREVSX0FMUEhBCisweDAwMDBBOEVDIFREX0dTX1NBTVBMRVIxNF9CT1JERVJfQUxQSEEKKzB4MDAwMEE4RkMgVERfR1NfU0FNUExFUjE1X0JPUkRFUl9BTFBIQQorMHgwMDAwQTkwQyBURF9HU19TQU1QTEVSMTZfQk9SREVSX0FMUEhBCisweDAwMDBBOTFDIFREX0dTX1NBTVBMRVIxN19CT1JERVJfQUxQSEEKKzB4MDAwMEE4MDggVERfR1NfU0FNUExFUjBfQk9SREVSX0JMVUUKKzB4MDAwMEE4MTggVERfR1NfU0FNUExFUjFfQk9SREVSX0JMVUUKKzB4MDAwMEE4MjggVERfR1NfU0FNUExFUjJfQk9SREVSX0JMVUUKKzB4MDAwMEE4MzggVERfR1NfU0FNUExFUjNfQk9SREVSX0JMVUUKKzB4MDAwMEE4NDggVERfR1NfU0FNUExFUjRfQk9SREVSX0JMVUUKKzB4MDAwMEE4NTggVERfR1NfU0FNUExFUjVfQk9SREVSX0JMVUUKKzB4MDAwMEE4NjggVERfR1NfU0FNUExFUjZfQk9SREVSX0JMVUUKKzB4MDAwMEE4NzggVERfR1NfU0FNUExFUjdfQk9SREVSX0JMVUUKKzB4MDAwMEE4ODggVERfR1NfU0FNUExFUjhfQk9SREVSX0JMVUUKKzB4MDAwMEE4OTggVERfR1NfU0FNUExFUjlfQk9SREVSX0JMVUUKKzB4MDAwMEE4QTggVERfR1NfU0FNUExFUjEwX0JPUkRFUl9CTFVFCisweDAwMDBBOEI4IFREX0dTX1NBTVBMRVIxMV9CT1JERVJfQkxVRQorMHgwMDAwQThDOCBURF9HU19TQU1QTEVSMTJfQk9SREVSX0JMVUUKKzB4MDAwMEE4RDggVERfR1NfU0FNUExFUjEzX0JPUkRFUl9CTFVFCisweDAwMDBBOEU4IFREX0dTX1NBTVBMRVIxNF9CT1JERVJfQkxVRQorMHgwMDAwQThGOCBURF9HU19TQU1QTEVSMTVfQk9SREVSX0JMVUUKKzB4MDAwMEE5MDggVERfR1NfU0FNUExFUjE2X0JPUkRFUl9CTFVFCisweDAwMDBBOTE4IFREX0dTX1NBTVBMRVIxN19CT1JERVJfQkxVRQorMHgwMDAwQTgwNCBURF9HU19TQU1QTEVSMF9CT1JERVJfR1JFRU4KKzB4MDAwMEE4MTQgVERfR1NfU0FNUExFUjFfQk9SREVSX0dSRUVOCisweDAwMDBBODI0IFREX0dTX1NBTVBMRVIyX0JPUkRFUl9HUkVFTgorMHgwMDAwQTgzNCBURF9HU19TQU1QTEVSM19CT1JERVJfR1JFRU4KKzB4MDAwMEE4NDQgVERfR1NfU0FNUExFUjRfQk9SREVSX0dSRUVOCisweDAwMDBBODU0IFREX0dTX1NBTVBMRVI1X0JPUkRFUl9HUkVFTgorMHgwMDAwQTg2NCBURF9HU19TQU1QTEVSNl9CT1JERVJfR1JFRU4KKzB4MDAwMEE4NzQgVERfR1NfU0FNUExFUjdfQk9SREVSX0dSRUVOCisweDAwMDBBODg0IFREX0dTX1NBTVBMRVI4X0JPUkRFUl9HUkVFTgorMHgwMDAwQTg5NCBURF9HU19TQU1QTEVSOV9CT1JERVJfR1JFRU4KKzB4MDAwMEE4QTQgVERfR1NfU0FNUExFUjEwX0JPUkRFUl9HUkVFTgorMHgwMDAwQThCNCBURF9HU19TQU1QTEVSMTFfQk9SREVSX0dSRUVOCisweDAwMDBBOEM0IFREX0dTX1NBTVBMRVIxMl9CT1JERVJfR1JFRU4KKzB4MDAwMEE4RDQgVERfR1NfU0FNUExFUjEzX0JPUkRFUl9HUkVFTgorMHgwMDAwQThFNCBURF9HU19TQU1QTEVSMTRfQk9SREVSX0dSRUVOCisweDAwMDBBOEY0IFREX0dTX1NBTVBMRVIxNV9CT1JERVJfR1JFRU4KKzB4MDAwMEE5MDQgVERfR1NfU0FNUExFUjE2X0JPUkRFUl9HUkVFTgorMHgwMDAwQTkxNCBURF9HU19TQU1QTEVSMTdfQk9SREVSX0dSRUVOCisweDAwMDBBODAwIFREX0dTX1NBTVBMRVIwX0JPUkRFUl9SRUQKKzB4MDAwMEE4MTAgVERfR1NfU0FNUExFUjFfQk9SREVSX1JFRAorMHgwMDAwQTgyMCBURF9HU19TQU1QTEVSMl9CT1JERVJfUkVECisweDAwMDBBODMwIFREX0dTX1NBTVBMRVIzX0JPUkRFUl9SRUQKKzB4MDAwMEE4NDAgVERfR1NfU0FNUExFUjRfQk9SREVSX1JFRAorMHgwMDAwQTg1MCBURF9HU19TQU1QTEVSNV9CT1JERVJfUkVECisweDAwMDBBODYwIFREX0dTX1NBTVBMRVI2X0JPUkRFUl9SRUQKKzB4MDAwMEE4NzAgVERfR1NfU0FNUExFUjdfQk9SREVSX1JFRAorMHgwMDAwQTg4MCBURF9HU19TQU1QTEVSOF9CT1JERVJfUkVECisweDAwMDBBODkwIFREX0dTX1NBTVBMRVI5X0JPUkRFUl9SRUQKKzB4MDAwMEE4QTAgVERfR1NfU0FNUExFUjEwX0JPUkRFUl9SRUQKKzB4MDAwMEE4QjAgVERfR1NfU0FNUExFUjExX0JPUkRFUl9SRUQKKzB4MDAwMEE4QzAgVERfR1NfU0FNUExFUjEyX0JPUkRFUl9SRUQKKzB4MDAwMEE4RDAgVERfR1NfU0FNUExFUjEzX0JPUkRFUl9SRUQKKzB4MDAwMEE4RTAgVERfR1NfU0FNUExFUjE0X0JPUkRFUl9SRUQKKzB4MDAwMEE4RjAgVERfR1NfU0FNUExFUjE1X0JPUkRFUl9SRUQKKzB4MDAwMEE5MDAgVERfR1NfU0FNUExFUjE2X0JPUkRFUl9SRUQKKzB4MDAwMEE5MTAgVERfR1NfU0FNUExFUjE3X0JPUkRFUl9SRUQKKzB4MDAwMEE0MEMgVERfUFNfU0FNUExFUjBfQk9SREVSX0FMUEhBCisweDAwMDBBNDFDIFREX1BTX1NBTVBMRVIxX0JPUkRFUl9BTFBIQQorMHgwMDAwQTQyQyBURF9QU19TQU1QTEVSMl9CT1JERVJfQUxQSEEKKzB4MDAwMEE0M0MgVERfUFNfU0FNUExFUjNfQk9SREVSX0FMUEhBCisweDAwMDBBNDRDIFREX1BTX1NBTVBMRVI0X0JPUkRFUl9BTFBIQQorMHgwMDAwQTQ1QyBURF9QU19TQU1QTEVSNV9CT1JERVJfQUxQSEEKKzB4MDAwMEE0NkMgVERfUFNfU0FNUExFUjZfQk9SREVSX0FMUEhBCisweDAwMDBBNDdDIFREX1BTX1NBTVBMRVI3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTQ4QyBURF9QU19TQU1QTEVSOF9CT1JERVJfQUxQSEEKKzB4MDAwMEE0OUMgVERfUFNfU0FNUExFUjlfQk9SREVSX0FMUEhBCisweDAwMDBBNEFDIFREX1BTX1NBTVBMRVIxMF9CT1JERVJfQUxQSEEKKzB4MDAwMEE0QkMgVERfUFNfU0FNUExFUjExX0JPUkRFUl9BTFBIQQorMHgwMDAwQTRDQyBURF9QU19TQU1QTEVSMTJfQk9SREVSX0FMUEhBCisweDAwMDBBNERDIFREX1BTX1NBTVBMRVIxM19CT1JERVJfQUxQSEEKKzB4MDAwMEE0RUMgVERfUFNfU0FNUExFUjE0X0JPUkRFUl9BTFBIQQorMHgwMDAwQTRGQyBURF9QU19TQU1QTEVSMTVfQk9SREVSX0FMUEhBCisweDAwMDBBNTBDIFREX1BTX1NBTVBMRVIxNl9CT1JERVJfQUxQSEEKKzB4MDAwMEE1MUMgVERfUFNfU0FNUExFUjE3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTQwOCBURF9QU19TQU1QTEVSMF9CT1JERVJfQkxVRQorMHgwMDAwQTQxOCBURF9QU19TQU1QTEVSMV9CT1JERVJfQkxVRQorMHgwMDAwQTQyOCBURF9QU19TQU1QTEVSMl9CT1JERVJfQkxVRQorMHgwMDAwQTQzOCBURF9QU19TQU1QTEVSM19CT1JERVJfQkxVRQorMHgwMDAwQTQ0OCBURF9QU19TQU1QTEVSNF9CT1JERVJfQkxVRQorMHgwMDAwQTQ1OCBURF9QU19TQU1QTEVSNV9CT1JERVJfQkxVRQorMHgwMDAwQTQ2OCBURF9QU19TQU1QTEVSNl9CT1JERVJfQkxVRQorMHgwMDAwQTQ3OCBURF9QU19TQU1QTEVSN19CT1JERVJfQkxVRQorMHgwMDAwQTQ4OCBURF9QU19TQU1QTEVSOF9CT1JERVJfQkxVRQorMHgwMDAwQTQ5OCBURF9QU19TQU1QTEVSOV9CT1JERVJfQkxVRQorMHgwMDAwQTRBOCBURF9QU19TQU1QTEVSMTBfQk9SREVSX0JMVUUKKzB4MDAwMEE0QjggVERfUFNfU0FNUExFUjExX0JPUkRFUl9CTFVFCisweDAwMDBBNEM4IFREX1BTX1NBTVBMRVIxMl9CT1JERVJfQkxVRQorMHgwMDAwQTREOCBURF9QU19TQU1QTEVSMTNfQk9SREVSX0JMVUUKKzB4MDAwMEE0RTggVERfUFNfU0FNUExFUjE0X0JPUkRFUl9CTFVFCisweDAwMDBBNEY4IFREX1BTX1NBTVBMRVIxNV9CT1JERVJfQkxVRQorMHgwMDAwQTUwOCBURF9QU19TQU1QTEVSMTZfQk9SREVSX0JMVUUKKzB4MDAwMEE1MTggVERfUFNfU0FNUExFUjE3X0JPUkRFUl9CTFVFCisweDAwMDBBNDA0IFREX1BTX1NBTVBMRVIwX0JPUkRFUl9HUkVFTgorMHgwMDAwQTQxNCBURF9QU19TQU1QTEVSMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE0MjQgVERfUFNfU0FNUExFUjJfQk9SREVSX0dSRUVOCisweDAwMDBBNDM0IFREX1BTX1NBTVBMRVIzX0JPUkRFUl9HUkVFTgorMHgwMDAwQTQ0NCBURF9QU19TQU1QTEVSNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE0NTQgVERfUFNfU0FNUExFUjVfQk9SREVSX0dSRUVOCisweDAwMDBBNDY0IFREX1BTX1NBTVBMRVI2X0JPUkRFUl9HUkVFTgorMHgwMDAwQTQ3NCBURF9QU19TQU1QTEVSN19CT1JERVJfR1JFRU4KKzB4MDAwMEE0ODQgVERfUFNfU0FNUExFUjhfQk9SREVSX0dSRUVOCisweDAwMDBBNDk0IFREX1BTX1NBTVBMRVI5X0JPUkRFUl9HUkVFTgorMHgwMDAwQTRBNCBURF9QU19TQU1QTEVSMTBfQk9SREVSX0dSRUVOCisweDAwMDBBNEI0IFREX1BTX1NBTVBMRVIxMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE0QzQgVERfUFNfU0FNUExFUjEyX0JPUkRFUl9HUkVFTgorMHgwMDAwQTRENCBURF9QU19TQU1QTEVSMTNfQk9SREVSX0dSRUVOCisweDAwMDBBNEU0IFREX1BTX1NBTVBMRVIxNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE0RjQgVERfUFNfU0FNUExFUjE1X0JPUkRFUl9HUkVFTgorMHgwMDAwQTUwNCBURF9QU19TQU1QTEVSMTZfQk9SREVSX0dSRUVOCisweDAwMDBBNTE0IFREX1BTX1NBTVBMRVIxN19CT1JERVJfR1JFRU4KKzB4MDAwMEE0MDAgVERfUFNfU0FNUExFUjBfQk9SREVSX1JFRAorMHgwMDAwQTQxMCBURF9QU19TQU1QTEVSMV9CT1JERVJfUkVECisweDAwMDBBNDIwIFREX1BTX1NBTVBMRVIyX0JPUkRFUl9SRUQKKzB4MDAwMEE0MzAgVERfUFNfU0FNUExFUjNfQk9SREVSX1JFRAorMHgwMDAwQTQ0MCBURF9QU19TQU1QTEVSNF9CT1JERVJfUkVECisweDAwMDBBNDUwIFREX1BTX1NBTVBMRVI1X0JPUkRFUl9SRUQKKzB4MDAwMEE0NjAgVERfUFNfU0FNUExFUjZfQk9SREVSX1JFRAorMHgwMDAwQTQ3MCBURF9QU19TQU1QTEVSN19CT1JERVJfUkVECisweDAwMDBBNDgwIFREX1BTX1NBTVBMRVI4X0JPUkRFUl9SRUQKKzB4MDAwMEE0OTAgVERfUFNfU0FNUExFUjlfQk9SREVSX1JFRAorMHgwMDAwQTRBMCBURF9QU19TQU1QTEVSMTBfQk9SREVSX1JFRAorMHgwMDAwQTRCMCBURF9QU19TQU1QTEVSMTFfQk9SREVSX1JFRAorMHgwMDAwQTRDMCBURF9QU19TQU1QTEVSMTJfQk9SREVSX1JFRAorMHgwMDAwQTREMCBURF9QU19TQU1QTEVSMTNfQk9SREVSX1JFRAorMHgwMDAwQTRFMCBURF9QU19TQU1QTEVSMTRfQk9SREVSX1JFRAorMHgwMDAwQTRGMCBURF9QU19TQU1QTEVSMTVfQk9SREVSX1JFRAorMHgwMDAwQTUwMCBURF9QU19TQU1QTEVSMTZfQk9SREVSX1JFRAorMHgwMDAwQTUxMCBURF9QU19TQU1QTEVSMTdfQk9SREVSX1JFRAorMHgwMDAwQUEwMCBURF9QU19TQU1QTEVSMF9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTA0IFREX1BTX1NBTVBMRVIxX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMDggVERfUFNfU0FNUExFUjJfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUEwQyBURF9QU19TQU1QTEVSM19DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTEwIFREX1BTX1NBTVBMRVI0X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMTQgVERfUFNfU0FNUExFUjVfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUExOCBURF9QU19TQU1QTEVSNl9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTFDIFREX1BTX1NBTVBMRVI3X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMjAgVERfUFNfU0FNUExFUjhfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUEyNCBURF9QU19TQU1QTEVSOV9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTI4IFREX1BTX1NBTVBMRVIxMF9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTJDIFREX1BTX1NBTVBMRVIxMV9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTMwIFREX1BTX1NBTVBMRVIxMl9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTM0IFREX1BTX1NBTVBMRVIxM19DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTM4IFREX1BTX1NBTVBMRVIxNF9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTNDIFREX1BTX1NBTVBMRVIxNV9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTQwIFREX1BTX1NBTVBMRVIxNl9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTQ0IFREX1BTX1NBTVBMRVIxN19DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBNjBDIFREX1ZTX1NBTVBMRVIwX0JPUkRFUl9BTFBIQQorMHgwMDAwQTYxQyBURF9WU19TQU1QTEVSMV9CT1JERVJfQUxQSEEKKzB4MDAwMEE2MkMgVERfVlNfU0FNUExFUjJfQk9SREVSX0FMUEhBCisweDAwMDBBNjNDIFREX1ZTX1NBTVBMRVIzX0JPUkRFUl9BTFBIQQorMHgwMDAwQTY0QyBURF9WU19TQU1QTEVSNF9CT1JERVJfQUxQSEEKKzB4MDAwMEE2NUMgVERfVlNfU0FNUExFUjVfQk9SREVSX0FMUEhBCisweDAwMDBBNjZDIFREX1ZTX1NBTVBMRVI2X0JPUkRFUl9BTFBIQQorMHgwMDAwQTY3QyBURF9WU19TQU1QTEVSN19CT1JERVJfQUxQSEEKKzB4MDAwMEE2OEMgVERfVlNfU0FNUExFUjhfQk9SREVSX0FMUEhBCisweDAwMDBBNjlDIFREX1ZTX1NBTVBMRVI5X0JPUkRFUl9BTFBIQQorMHgwMDAwQTZBQyBURF9WU19TQU1QTEVSMTBfQk9SREVSX0FMUEhBCisweDAwMDBBNkJDIFREX1ZTX1NBTVBMRVIxMV9CT1JERVJfQUxQSEEKKzB4MDAwMEE2Q0MgVERfVlNfU0FNUExFUjEyX0JPUkRFUl9BTFBIQQorMHgwMDAwQTZEQyBURF9WU19TQU1QTEVSMTNfQk9SREVSX0FMUEhBCisweDAwMDBBNkVDIFREX1ZTX1NBTVBMRVIxNF9CT1JERVJfQUxQSEEKKzB4MDAwMEE2RkMgVERfVlNfU0FNUExFUjE1X0JPUkRFUl9BTFBIQQorMHgwMDAwQTcwQyBURF9WU19TQU1QTEVSMTZfQk9SREVSX0FMUEhBCisweDAwMDBBNzFDIFREX1ZTX1NBTVBMRVIxN19CT1JERVJfQUxQSEEKKzB4MDAwMEE2MDggVERfVlNfU0FNUExFUjBfQk9SREVSX0JMVUUKKzB4MDAwMEE2MTggVERfVlNfU0FNUExFUjFfQk9SREVSX0JMVUUKKzB4MDAwMEE2MjggVERfVlNfU0FNUExFUjJfQk9SREVSX0JMVUUKKzB4MDAwMEE2MzggVERfVlNfU0FNUExFUjNfQk9SREVSX0JMVUUKKzB4MDAwMEE2NDggVERfVlNfU0FNUExFUjRfQk9SREVSX0JMVUUKKzB4MDAwMEE2NTggVERfVlNfU0FNUExFUjVfQk9SREVSX0JMVUUKKzB4MDAwMEE2NjggVERfVlNfU0FNUExFUjZfQk9SREVSX0JMVUUKKzB4MDAwMEE2NzggVERfVlNfU0FNUExFUjdfQk9SREVSX0JMVUUKKzB4MDAwMEE2ODggVERfVlNfU0FNUExFUjhfQk9SREVSX0JMVUUKKzB4MDAwMEE2OTggVERfVlNfU0FNUExFUjlfQk9SREVSX0JMVUUKKzB4MDAwMEE2QTggVERfVlNfU0FNUExFUjEwX0JPUkRFUl9CTFVFCisweDAwMDBBNkI4IFREX1ZTX1NBTVBMRVIxMV9CT1JERVJfQkxVRQorMHgwMDAwQTZDOCBURF9WU19TQU1QTEVSMTJfQk9SREVSX0JMVUUKKzB4MDAwMEE2RDggVERfVlNfU0FNUExFUjEzX0JPUkRFUl9CTFVFCisweDAwMDBBNkU4IFREX1ZTX1NBTVBMRVIxNF9CT1JERVJfQkxVRQorMHgwMDAwQTZGOCBURF9WU19TQU1QTEVSMTVfQk9SREVSX0JMVUUKKzB4MDAwMEE3MDggVERfVlNfU0FNUExFUjE2X0JPUkRFUl9CTFVFCisweDAwMDBBNzE4IFREX1ZTX1NBTVBMRVIxN19CT1JERVJfQkxVRQorMHgwMDAwQTYwNCBURF9WU19TQU1QTEVSMF9CT1JERVJfR1JFRU4KKzB4MDAwMEE2MTQgVERfVlNfU0FNUExFUjFfQk9SREVSX0dSRUVOCisweDAwMDBBNjI0IFREX1ZTX1NBTVBMRVIyX0JPUkRFUl9HUkVFTgorMHgwMDAwQTYzNCBURF9WU19TQU1QTEVSM19CT1JERVJfR1JFRU4KKzB4MDAwMEE2NDQgVERfVlNfU0FNUExFUjRfQk9SREVSX0dSRUVOCisweDAwMDBBNjU0IFREX1ZTX1NBTVBMRVI1X0JPUkRFUl9HUkVFTgorMHgwMDAwQTY2NCBURF9WU19TQU1QTEVSNl9CT1JERVJfR1JFRU4KKzB4MDAwMEE2NzQgVERfVlNfU0FNUExFUjdfQk9SREVSX0dSRUVOCisweDAwMDBBNjg0IFREX1ZTX1NBTVBMRVI4X0JPUkRFUl9HUkVFTgorMHgwMDAwQTY5NCBURF9WU19TQU1QTEVSOV9CT1JERVJfR1JFRU4KKzB4MDAwMEE2QTQgVERfVlNfU0FNUExFUjEwX0JPUkRFUl9HUkVFTgorMHgwMDAwQTZCNCBURF9WU19TQU1QTEVSMTFfQk9SREVSX0dSRUVOCisweDAwMDBBNkM0IFREX1ZTX1NBTVBMRVIxMl9CT1JERVJfR1JFRU4KKzB4MDAwMEE2RDQgVERfVlNfU0FNUExFUjEzX0JPUkRFUl9HUkVFTgorMHgwMDAwQTZFNCBURF9WU19TQU1QTEVSMTRfQk9SREVSX0dSRUVOCisweDAwMDBBNkY0IFREX1ZTX1NBTVBMRVIxNV9CT1JERVJfR1JFRU4KKzB4MDAwMEE3MDQgVERfVlNfU0FNUExFUjE2X0JPUkRFUl9HUkVFTgorMHgwMDAwQTcxNCBURF9WU19TQU1QTEVSMTdfQk9SREVSX0dSRUVOCisweDAwMDBBNjAwIFREX1ZTX1NBTVBMRVIwX0JPUkRFUl9SRUQKKzB4MDAwMEE2MTAgVERfVlNfU0FNUExFUjFfQk9SREVSX1JFRAorMHgwMDAwQTYyMCBURF9WU19TQU1QTEVSMl9CT1JERVJfUkVECisweDAwMDBBNjMwIFREX1ZTX1NBTVBMRVIzX0JPUkRFUl9SRUQKKzB4MDAwMEE2NDAgVERfVlNfU0FNUExFUjRfQk9SREVSX1JFRAorMHgwMDAwQTY1MCBURF9WU19TQU1QTEVSNV9CT1JERVJfUkVECisweDAwMDBBNjYwIFREX1ZTX1NBTVBMRVI2X0JPUkRFUl9SRUQKKzB4MDAwMEE2NzAgVERfVlNfU0FNUExFUjdfQk9SREVSX1JFRAorMHgwMDAwQTY4MCBURF9WU19TQU1QTEVSOF9CT1JERVJfUkVECisweDAwMDBBNjkwIFREX1ZTX1NBTVBMRVI5X0JPUkRFUl9SRUQKKzB4MDAwMEE2QTAgVERfVlNfU0FNUExFUjEwX0JPUkRFUl9SRUQKKzB4MDAwMEE2QjAgVERfVlNfU0FNUExFUjExX0JPUkRFUl9SRUQKKzB4MDAwMEE2QzAgVERfVlNfU0FNUExFUjEyX0JPUkRFUl9SRUQKKzB4MDAwMEE2RDAgVERfVlNfU0FNUExFUjEzX0JPUkRFUl9SRUQKKzB4MDAwMEE2RTAgVERfVlNfU0FNUExFUjE0X0JPUkRFUl9SRUQKKzB4MDAwMEE2RjAgVERfVlNfU0FNUExFUjE1X0JPUkRFUl9SRUQKKzB4MDAwMEE3MDAgVERfVlNfU0FNUExFUjE2X0JPUkRFUl9SRUQKKzB4MDAwMEE3MTAgVERfVlNfU0FNUExFUjE3X0JPUkRFUl9SRUQKKzB4MDAwMDk1MDggVEFfQ05UTF9BVVgKKzB4MDAwMjgwMkMgREJfREVQVEhfQ0xFQVIKKzB4MDAwMjhEMjQgREJfSFRJTEVfU1VSRkFDRQorMHgwMDAyOEQzNCBEQl9QUkVGRVRDSF9MSU1JVAorMHgwMDAyOEQzMCBEQl9QUkVMT0FEX0NPTlRST0wKKzB4MDAwMjhEMEMgREJfUkVOREVSX0NPTlRST0wKKzB4MDAwMjhEMTAgREJfUkVOREVSX09WRVJSSURFCisweDAwMDI4ODBDIERCX1NIQURFUl9DT05UUk9MCisweDAwMDI4RDJDIERCX1NSRVNVTFRTX0NPTVBBUkVfU1RBVEUxCisweDAwMDI4NDMwIERCX1NURU5DSUxSRUZNQVNLCisweDAwMDI4NDM0IERCX1NURU5DSUxSRUZNQVNLX0JGCisweDAwMDI4MDI4IERCX1NURU5DSUxfQ0xFQVIKKzB4MDAwMjg3ODAgQ0JfQkxFTkQwX0NPTlRST0wKKzB4MDAwMjg3ODQgQ0JfQkxFTkQxX0NPTlRST0wKKzB4MDAwMjg3ODggQ0JfQkxFTkQyX0NPTlRST0wKKzB4MDAwMjg3OEMgQ0JfQkxFTkQzX0NPTlRST0wKKzB4MDAwMjg3OTAgQ0JfQkxFTkQ0X0NPTlRST0wKKzB4MDAwMjg3OTQgQ0JfQkxFTkQ1X0NPTlRST0wKKzB4MDAwMjg3OTggQ0JfQkxFTkQ2X0NPTlRST0wKKzB4MDAwMjg3OUMgQ0JfQkxFTkQ3X0NPTlRST0wKKzB4MDAwMjg4MDQgQ0JfQkxFTkRfQ09OVFJPTAorMHgwMDAyODQyMCBDQl9CTEVORF9BTFBIQQorMHgwMDAyODQxQyBDQl9CTEVORF9CTFVFCisweDAwMDI4NDE4IENCX0JMRU5EX0dSRUVOCisweDAwMDI4NDE0IENCX0JMRU5EX1JFRAorMHgwMDAyODEyQyBDQl9DTEVBUl9BTFBIQQorMHgwMDAyODEyOCBDQl9DTEVBUl9CTFVFCisweDAwMDI4MTI0IENCX0NMRUFSX0dSRUVOCisweDAwMDI4MTIwIENCX0NMRUFSX1JFRAorMHgwMDAyOEMzMCBDQl9DTFJDTVBfQ09OVFJPTAorMHgwMDAyOEMzOCBDQl9DTFJDTVBfRFNUCisweDAwMDI4QzNDIENCX0NMUkNNUF9NU0sKKzB4MDAwMjhDMzQgQ0JfQ0xSQ01QX1NSQworMHgwMDAyODEwMCBDQl9DT0xPUjBfTUFTSworMHgwMDAyODEwNCBDQl9DT0xPUjFfTUFTSworMHgwMDAyODEwOCBDQl9DT0xPUjJfTUFTSworMHgwMDAyODEwQyBDQl9DT0xPUjNfTUFTSworMHgwMDAyODExMCBDQl9DT0xPUjRfTUFTSworMHgwMDAyODExNCBDQl9DT0xPUjVfTUFTSworMHgwMDAyODExOCBDQl9DT0xPUjZfTUFTSworMHgwMDAyODExQyBDQl9DT0xPUjdfTUFTSworMHgwMDAyODA4MCBDQl9DT0xPUjBfVklFVworMHgwMDAyODA4NCBDQl9DT0xPUjFfVklFVworMHgwMDAyODA4OCBDQl9DT0xPUjJfVklFVworMHgwMDAyODA4QyBDQl9DT0xPUjNfVklFVworMHgwMDAyODA5MCBDQl9DT0xPUjRfVklFVworMHgwMDAyODA5NCBDQl9DT0xPUjVfVklFVworMHgwMDAyODA5OCBDQl9DT0xPUjZfVklFVworMHgwMDAyODA5QyBDQl9DT0xPUjdfVklFVworMHgwMDAyODgwOCBDQl9DT0xPUl9DT05UUk9MCisweDAwMDI4NDJDIENCX0ZPR19CTFVFCisweDAwMDI4NDI4IENCX0ZPR19HUkVFTgorMHgwMDAyODQyNCBDQl9GT0dfUkVECisweDAwMDA4MDQwIFdBSVRfVU5USUwKKzB4MDAwMDg5NTAgQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHCisweDAwMDA4OTU0IEdDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHCisweDAwMDA5NzE0IFZDX0VOSEFOQ0UKKzB4MDAwMDk4MzAgREJfREVCVUcKKzB4MDAwMDk4MzggREJfV0FURVJNQVJLUworMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAorMHgwMDAyOEQ0NCBEQl9BTFBIQV9UT19NQVNLCisweDAwMDA5NTA0IFRBX0NOVEwKKzB4MDAwMDk3MDAgVkNfQ05UTAorMHgwMDAwOTcxOCBWQ19DT05GSUcKKzB4MDAwMEEwMkMgU01YX0RDX01DX0lOVEZfQ1RMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggMjg3ZmNlYi4uNjI2ZDUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMTEzLDYgKzExMyw3IEBACiAJdWludDMyX3Qgc2l6ZV9yZWc7CiAJdWludDMyX3QgdG1wOwogCisJcmFkZW9uX2dhcnRfcmVzdG9yZShyZGV2KTsKIAl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfQUlDX0NUUkxfU0NSQVRDSCk7CiAJdG1wIHw9IFJTNjkwX0RJU19PVVRfT0ZfUENJX0dBUlRfQUNDRVNTOwogCVdSRUczMl9NQyhSUzY5MF9BSUNfQ1RSTF9TQ1JBVENILCB0bXApOwpAQCAtMTUwLDkgKzE1MSw4IEBACiAJCVdSRUczMihSQURFT05fQUdQX0JBU0UsIDB4RkZGRkZGRkYpOwogCQlXUkVHMzIoUlM0ODBfQUdQX0JBU0VfMiwgMCk7CiAJfQotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFJTNjkwX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2OTBfTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOworCXRtcCA9IFJFR19TRVQoUlM2OTBfTUNfQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CisJdG1wIHw9IFJFR19TRVQoUlM2OTBfTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOwogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJV1JFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9MT0NBVElPTiwgdG1wKTsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfQlVTX01BU1RFUl9ESVM7CkBAIC0yNTEsMTQgKzI1MSwxOSBAQAogCX0KIH0KIAotdm9pZCByczQwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJzNDAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJdTY0IGJhc2U7CisKIAlyczQwMF9nYXJ0X2FkanVzdF9zaXplKHJkZXYpOworCXJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID0gcmFkZW9uX2NvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKIAkvKiBERFIgZm9yIGFsbCBjYXJkIGFmdGVyIFIzMDAgJiBJR1AgKi8KIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKLQogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCWJhc2UgPSAoUlJFRzMyKFJBREVPTl9OQl9UT00pICYgMHhmZmZmKSA8PCAxNjsKKwlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIGJhc2UpOworCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKIH0KIAogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQpAQCAtMzYyLDIyICszNjcsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpbnQgcjsKLQl1MzIgdG1wOwotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXRtcCA9IFJSRUczMihSXzAwMDE1Q19OQl9UT00pOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDE1Q19NQ19GQl9TVEFSVCh0bXApIDw8IDE2OwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCXJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID0gcmFkZW9uX2NvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgcnM0MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcjEwMF9tY19zYXZlIHNhdmU7CkBAIC01MTYsMTIgKzUwNSw4IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXJzNDAwX3ZyYW1faW5mbyhyZGV2KTsKLQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwotCXIgPSByczQwMF9tY19pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiBpbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyICovCisJcnM0MDBfbWNfaW5pdChyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwogCWlmIChyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IGMzODE4NTYuLjQ3ZjA0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTQ1LDIzICs0NSw2IEBACiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotaW50IHJzNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogcmVhZCBiYWNrIHRoZSBNQyB2YWx1ZSBmcm9tIHRoZSBodyAqLwotCWludCByOwotCXUzMiB0bXA7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JdG1wID0gUlJFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OKTsKLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gR18wMDAwMDRfTUNfRkJfU1RBUlQodG1wKSA8PCAxNjsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweGZmZmZmZmZmVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlyZGV2LT5tYy5pZ3Bfc2lkZXBvcnRfZW5hYmxlZCA9IHJhZGVvbl9hdG9tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQlyZXR1cm4gMDsKLX0KLQogLyogaHBkIGZvciBkaWdpdGFsIHBhbmVsIGRldGVjdC9kaXNjb25uZWN0ICovCiBib29sIHJzNjAwX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCkKIHsKQEAgLTIxMyw2ICsxOTYsNyBAQAogCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJcmFkZW9uX2dhcnRfcmVzdG9yZShyZGV2KTsKIAkvKiBFbmFibGUgYnVzIG1hc3RlciAqLwogCXRtcCA9IFJSRUczMihSXzAwMDA0Q19CVVNfQ05UTCkgJiBDXzAwMDA0Q19CVVNfTUFTVEVSX0RJUzsKIAlXUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwsIHRtcCk7CkBAIC00MDYsMTAgKzM5MCwxNCBAQAogCQlpZiAoR18wMDAwNDRfU1dfSU5UKHN0YXR1cykpCiAJCQlyYWRlb25fZmVuY2VfcHJvY2VzcyhyZGV2KTsKIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwotCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpIHsKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDApOwotCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKKwkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQl9CisJCWlmIChHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKSB7CiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKKwkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQl9CiAJCWlmIChHXzAwN0VEQ19EQ19IT1RfUExVR19ERVRFQ1QxX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkgewogCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQlEUk1fREVCVUcoIkhQRDFcbiIpOwpAQCAtNDcwLDIyICs0NTgsMjIgQEAKIAkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CiB9CiAKLXZvaWQgcnM2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKLQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwotCi0JcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFKTsKLQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKKwl1NjQgYmFzZTsKIAogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7Ci0KLQlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQotCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7Ci0KLQlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCi0JCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKKwlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OworCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSk7CisJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7CisJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKKwliYXNlID0gUlJFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OKTsKKwliYXNlID0gR18wMDAwMDRfTUNfRkJfU1RBUlQoYmFzZSkgPDwgMTY7CisJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiB9CiAKIHZvaWQgcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTY2MSwxMiArNjQ5LDggQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcnM2MDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHJzNjAwX21jX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyczYwMF9tY19pbml0KHJkZXYpOwogCXJzNjAwX2RlYnVnZnMocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwNmUyNzcxLi44M2I5MTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC0xMjksMjcgKzEyOSwyMSBAQAogCXJkZXYtPnBtLnNpZGVwb3J0X2JhbmR3aWR0aC5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zaWRlcG9ydF9iYW5kd2lkdGgsIHRtcCk7CiB9CiAKLXZvaWQgcnM2OTBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKKwl1NjQgYmFzZTsKIAogCXJzNDAwX2dhcnRfYWRqdXN0X3NpemUocmRldik7Ci0KIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKLQogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7Ci0KIAlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwogCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOwotCi0JaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKLQkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQotCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQorCXJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCWJhc2UgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNDRkdfRkJfTE9DQVRJT04pOworCWJhc2UgPSBHXzAwMDEwMF9NQ19GQl9TVEFSVChiYXNlKSA8PCAxNjsKIAlyczY5MF9wbV9pbmZvKHJkZXYpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKQEAgLTE2MCwyMiArMTU0LDkgQEAKIAlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTYpOwogCS8qIGNvcmVfYmFuZHdpZHRoID0gc2NsayhNaHopICogMTYgKi8KIAlyZGV2LT5wbS5jb3JlX2JhbmR3aWR0aC5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKLX0KLQotc3RhdGljIGludCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCXUzMiB0bXA7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OKTsKLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gR18wMDAxMDBfTUNfRkJfU1RBUlQodG1wKSA8PCAxNjsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKIAlyZGV2LT5tYy5pZ3Bfc2lkZXBvcnRfZW5hYmxlZCA9IHJhZGVvbl9hdG9tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQlyZXR1cm4gMDsKKwlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIGJhc2UpOworCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKIH0KIAogdm9pZCByczY5MF9saW5lX2J1ZmZlcl9hZGp1c3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC03MjgsMTIgKzcwOSw4IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXJzNjkwX3ZyYW1faW5mbyhyZGV2KTsKLQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwotCXIgPSByczY5MF9tY19pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiBpbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyICovCisJcnM2OTBfbWNfaW5pdChyZGV2KTsKIAlydjUxNV9kZWJ1Z2ZzKHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggMGUxZTZiOC4uYmVhNzQ3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTI3NywxMyArMjc3LDE1IEBACiAJfQogfQogCi12b2lkIHJ2NTE1X3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlmaXhlZDIwXzEyIGE7CiAKIAlydjUxNV92cmFtX2dldF90eXBlKHJkZXYpOwotCiAJcjEwMF92cmFtX2luaXRfc2l6ZXMocmRldik7CisJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCAwKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKQorCQlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiAJLyogRklYTUU6IHdlIHNob3VsZCBlbmZvcmNlIGRlZmF1bHQgY2xvY2sgaW4gY2FzZSBHUFUgaXMgbm90IGluCiAJICogZGVmYXVsdCBzZXR1cAogCSAqLwpAQCAtNTg3LDEyICs1ODksMTUgQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcnY1MTVfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXJ2NTE1X21jX2luaXQocmRldik7CiAJcnY1MTVfZGVidWdmcyhyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IDAzMDIxNjcuLjM3ODg3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTU2LDYgKzU2LDcgQEAKIAlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CiAJLyogU2V0dXAgTDIgY2FjaGUgKi8KIAlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFIHwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAogCQkJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURSB8CkBAIC0yNzMsOSArMjc0LDEwIEBACiAvKgogICogQ29yZSBmdW5jdGlvbnMKICAqLwotc3RhdGljIHUzMiByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAodTMyIG51bV90aWxlX3BpcGVzLAotCQkJCQkJdTMyIG51bV9iYWNrZW5kcywKLQkJCQkJCXUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKK3N0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkgICAgIHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJICAgICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkgICAgIHUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKIHsKIAl1MzIgYmFja2VuZF9tYXAgPSAwOwogCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CkBAIC0yODQsNiArMjg2LDcgQEAKIAl1MzIgc3dpenpsZV9waXBlW1I3WFhfTUFYX1BJUEVTXTsKIAl1MzIgY3VyX2JhY2tlbmQ7CiAJdTMyIGk7CisJYm9vbCBmb3JjZV9ub19zd2l6emxlOwogCiAJaWYgKG51bV90aWxlX3BpcGVzID4gUjdYWF9NQVhfUElQRVMpCiAJCW51bV90aWxlX3BpcGVzID0gUjdYWF9NQVhfUElQRVM7CkBAIC0zMTMsNiArMzE2LDE4IEBACiAJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgIT0gbnVtX2JhY2tlbmRzKQogCQludW1fYmFja2VuZHMgPSBlbmFibGVkX2JhY2tlbmRzX2NvdW50OwogCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCQlmb3JjZV9ub19zd2l6emxlID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3NDA6CisJZGVmYXVsdDoKKwkJZm9yY2Vfbm9fc3dpenpsZSA9IHRydWU7CisJCWJyZWFrOworCX0KKwogCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjdYWF9NQVhfUElQRVMpOwogCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKIAljYXNlIDE6CkBAIC0zMjMsNDkgKzMzOCwxMDAgQEAKIAkJc3dpenpsZV9waXBlWzFdID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gMzsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSA2OgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSA0OwotCQlzd2l6emxlX3BpcGVbM10gPSA1OwotCQlzd2l6emxlX3BpcGVbNF0gPSAzOwotCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbNV0gPSA1OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNzoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQl9CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNzsKLQkJc3dpenpsZV9waXBlWzddID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCQlzd2l6emxlX3BpcGVbN10gPSA3OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQkJc3dpenpsZV9waXBlWzZdID0gNzsKKwkJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0zODUsOCArNDUxLDEwIEBACiBzdGF0aWMgdm9pZCBydjc3MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgaSwgaiwgbnVtX3FkX3BpcGVzOworCXUzMiB0YV9hdXhfY250bDsKIAl1MzIgc3hfZGVidWdfMTsKIAl1MzIgc214X2RjX2N0bDA7CisJdTMyIGRiX2RlYnVnMzsKIAl1MzIgbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQ7CiAJdTMyIHZndF9nc19wZXJfZXM7CiAJdTMyIGdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMDsKQEAgLTUxNSw2ICs1ODMsNyBAQAogCiAJc3dpdGNoIChyZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXMpIHsKIAljYXNlIDE6CisJZGVmYXVsdDoKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygwKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtNTI2LDE2ICs1OTUsMTcgQEAKIAljYXNlIDg6CiAJCWdiX3RpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMyk7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwogCX0KKwlyZGV2LT5jb25maWcucnY3NzAudGlsaW5nX25waXBlcyA9IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlczsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCiAJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CisJcmRldi0+Y29uZmlnLnJ2NzcwLnRpbGluZ19uYmFua3MgPSA0IDw8ICgoZ2JfdGlsaW5nX2NvbmZpZyA+PiA0KSAmIDB4Myk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CisJcmRldi0+Y29uZmlnLnJ2NzcwLnRpbGluZ19ncm91cF9zaXplID0gMjU2OwogCiAJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwpAQCAtNTQ5LDIxICs2MTksMjcgQEAKIAogCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19TV0FQUygxKTsKIAotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc0MCkKLQkJYmFja2VuZF9tYXAgPSAweDI4OwotCWVsc2UKLQkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzLAotCQkJCQkJCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzLAotCQkJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIDB4ZmYpOwotCWdiX3RpbGluZ19jb25maWcgfD0gQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IFJSRUczMihDQ19SQl9CQUNLRU5EX0RJU0FCTEUpICYgMHgwMGZmMDAwMDsKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgfD0KKwkJQkFDS0VORF9ESVNBQkxFKChSN1hYX01BWF9CQUNLRU5EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CiAKLQljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJSRUczMihDQ19HQ19TSEFERVJfUElQRV9DT05GSUcpICYgMHhmZmZmZmYwMDsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KIAkJSU5BQ1RJVkVfUURfUElQRVMoKFI3WFhfTUFYX1BJUEVTX01BU0sgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcykgJiBSN1hYX01BWF9QSVBFU19NQVNLKTsKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KIAkJSU5BQ1RJVkVfU0lNRFMoKFI3WFhfTUFYX1NJTURTX01BU0sgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9zaW1kcykgJiBSN1hYX01BWF9TSU1EU19NQVNLKTsKIAotCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9Ci0JCUJBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldiwKKwkJCQkJCQkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCQkoUjdYWF9NQVhfQkFDS0VORFMgLQorCQkJCQkJCQkgcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSAmCisJCQkJCQkJCQkJICAgICAgIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJCShjY19yYl9iYWNrZW5kX2Rpc2FibGUgPj4gMTYpKTsKKwlnYl90aWxpbmdfY29uZmlnIHw9IEJBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKwogCiAJV1JFRzMyKEdCX1RJTElOR19DT05GSUcsIGdiX3RpbGluZ19jb25maWcpOwogCVdSRUczMihEQ1BfVElMSU5HX0NPTkZJRywgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKQEAgLTU3MSwxNiArNjQ3LDEzIEBACiAKIAlXUkVHMzIoQ0NfUkJfQkFDS0VORF9ESVNBQkxFLCAgICAgIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CiAJV1JFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgICBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwotCVdSRUczMihHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKwlXUkVHMzIoQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSwgIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CiAKLQlXUkVHMzIoQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSwgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKIAlXUkVHMzIoQ0dUU19TWVNfVENDX0RJU0FCTEUsIDApOwogCVdSRUczMihDR1RTX1RDQ19ESVNBQkxFLCAwKTsKLQlXUkVHMzIoQ0dUU19VU0VSX1NZU19UQ0NfRElTQUJMRSwgMCk7Ci0JV1JFRzMyKENHVFNfVVNFUl9UQ0NfRElTQUJMRSwgMCk7CiAKIAludW1fcWRfcGlwZXMgPQotCQlSN1hYX01BWF9CQUNLRU5EUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIElOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCQlSN1hYX01BWF9QSVBFUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKSA+PiA4KTsKIAlXUkVHMzIoVkdUX09VVF9ERUFMTE9DX0NOVEwsIChudW1fcWRfcGlwZXMgKiA0KSAmIERFQUxMT0NfRElTVF9NQVNLKTsKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKG51bV9xZF9waXBlcyAqIDQpIC0gMikgJiBWVFhfUkVVU0VfREVQVEhfTUFTSyk7CiAKQEAgLTU5MCwxMCArNjYzLDggQEAKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAotCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkgICAgIFNZTkNfR1JBRElFTlQgfAotCQkJICAgICBTWU5DX1dBTEtFUiB8Ci0JCQkgICAgIFNZTkNfQUxJR05FUikpOworCXRhX2F1eF9jbnRsID0gUlJFRzMyKFRBX0NOVExfQVVYKTsKKwlXUkVHMzIoVEFfQ05UTF9BVVgsIHRhX2F1eF9jbnRsIHwgRElTQUJMRV9DVUJFX0FOSVNPKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNjA0LDE0ICs2NzUsMjggQEAKIAlzbXhfZGNfY3RsMCB8PSBDQUNIRV9ERVBUSCgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X251bV9vZl9zZXRzICogNjQpIC0gMSk7CiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKLQlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkgICAgICAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCSAgICAgICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCSAgICAgICBTWU5DX0ZMVVNIX0NUTCkpOworCWlmIChyZGV2LT5mYW1pbHkgIT0gQ0hJUF9SVjc0MCkKKwkJV1JFRzMyKFNNWF9FVkVOVF9DVEwsIChFU19GTFVTSF9DVEwoNCkgfAorCQkJCSAgICAgICBHU19GTFVTSF9DVEwoNCkgfAorCQkJCSAgICAgICBBQ0tfRkxVU0hfQ1RMKDMpIHwKKwkJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKLQkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7Ci0JZWxzZSB7CisJZGJfZGVidWczID0gUlJFRzMyKERCX0RFQlVHMyk7CisJZGJfZGVidWczICY9IH5EQl9DTEtfT0ZGX0RFTEFZKDB4MWYpOworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJZGJfZGVidWczIHw9IERCX0NMS19PRkZfREVMQVkoMHgxZik7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3MzA6CisJZGVmYXVsdDoKKwkJZGJfZGVidWczIHw9IERCX0NMS19PRkZfREVMQVkoMik7CisJCWJyZWFrOworCX0KKwlXUkVHMzIoREJfREVCVUczLCBkYl9kZWJ1ZzMpOworCisJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1JWNzcwKSB7CiAJCWRiX2RlYnVnNCA9IFJSRUczMihEQl9ERUJVRzQpOwogCQlkYl9kZWJ1ZzQgfD0gRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVI7CiAJCVdSRUczMihEQl9ERUJVRzQsIGRiX2RlYnVnNCk7CkBAIC02NDAsMTAgKzcyNSwxMCBAQAogCQkJICAgIEFMVV9VUERBVEVfRklGT19ISVdBVEVSKDB4OCkpOwogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNzcwOgotCQlzcV9tc19maWZvX3NpemVzIHw9IEZFVENIX0ZJRk9fSElXQVRFUigweDEpOwotCQlicmVhazsKIAljYXNlIENISVBfUlY3MzA6CiAJY2FzZSBDSElQX1JWNzEwOgorCQlzcV9tc19maWZvX3NpemVzIHw9IEZFVENIX0ZJRk9fSElXQVRFUigweDEpOworCQlicmVhazsKIAljYXNlIENISVBfUlY3NDA6CiAJZGVmYXVsdDoKIAkJc3FfbXNfZmlmb19zaXplcyB8PSBGRVRDSF9GSUZPX0hJV0FURVIoMHg0KTsKQEAgLTgxNiw0NSArOTAxLDEzIEBACiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwotCi0JaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwkvKiBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHdlIHN1cHBvcnQgdW5tYXBwYWJsZSBWUkFNICovCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkgewogCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7Ci0KLQlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCiAJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkvKiBndHRfc2l6ZSBpcyBzZXR1cCBieSByYWRlb25fYWdwX2luaXQgKi8KLQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCXRtcCA9IDB4RkZGRkZGRkZVTCAtIHJkZXYtPm1jLmFncF9iYXNlIC0gcmRldi0+bWMuZ3R0X3NpemU7Ci0JCS8qIFRyeSB0byBwdXQgdnJhbSBiZWZvcmUgb3IgYWZ0ZXIgQUdQIGJlY2F1c2Ugd2UKLQkJICogd2Ugd2FudCBTWVNURU1fQVBFUlRVUkUgdG8gY292ZXIgYm90aCBWUkFNIGFuZAotCQkgKiBBR1Agc28gdGhhdCBHUFUgY2FuIGNhdGNoIG91dCBvZiBWUkFNL0FHUCBhY2Nlc3MKLQkJICovCi0JCWlmIChyZGV2LT5tYy5ndHRfbG9jYXRpb24gPiByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKLQkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgKi8KLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gLQotCQkJCQkJCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJfSBlbHNlIGlmICh0bXAgPiByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKLQkJCS8qIEVub3VnaCBwbGFjZSBhZnRlciAqLwotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArCi0JCQkJCQkJcmRldi0+bWMuZ3R0X3NpemU7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBUcnkgdG8gc2V0dXAgVlJBTSB0aGVuIEFHUCBtaWdodCBub3QKLQkJCSAqIG5vdCB3b3JrIG9uIHNvbWUgY2FyZAotCQkJICovCi0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHgwMDAwMDAwMFVMOwotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKLQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKIAl9Ci0JcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247Ci0JcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKKwlyNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiAJLyogRklYTUU6IHdlIHNob3VsZCBlbmZvcmNlIGRlZmF1bHQgY2xvY2sgaW4gY2FzZSBHUFUgaXMgbm90IGluCiAJICogZGVmYXVsdCBzZXR1cAogCSAqLwpAQCAtODYzLDYgKzkxNiw3IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIAlyZXR1cm4gMDsKIH0KKwogaW50IHJ2NzcwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogaW1wbGVtZW50IGFueSBydjc3MCBzcGVjaWZpYyBiaXRzICovCkBAIC0xMDM4LDYgKzEwOTIsNyBAQAogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCS8qIGluaXRpYWxpemUgQUdQICovCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwogCQlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IGExMzY3YWIuLjk1MDZmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMzQzLDQgKzM0Myw2IEBACiAKICNkZWZpbmUJV0FJVF9VTlRJTAkJCQkJMHg4MDQwCiAKKyNkZWZpbmUJU1JCTV9TVEFUVVMJCQkJICAgICAgICAweDBFNTAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCAzZDQ3YTJjLi5hNzU5MTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXZvaWQgKmZyb21fdmlydHVhbDsKIAl2b2lkICp0b192aXJ0dWFsOwogCWludCBpOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FTk9NRU07CiAKIAlpZiAodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19VU0VSKSB7CiAJCXJldCA9IHR0bV90dF9zZXRfdXNlcih0dG0sIHR0bS0+dHNrLCB0dG0tPnN0YXJ0LApAQCAtNDk5LDggKzQ5OSwxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKIAkJZnJvbV9wYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2Uoc3dhcF9zcGFjZSwgaSwgTlVMTCk7Ci0JCWlmIChJU19FUlIoZnJvbV9wYWdlKSkKKwkJaWYgKElTX0VSUihmcm9tX3BhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGZyb21fcGFnZSk7CiAJCQlnb3RvIG91dF9lcnI7CisJCX0KIAkJdG9fcGFnZSA9IF9fdHRtX3R0X2dldF9wYWdlKHR0bSwgaSk7CiAJCWlmICh1bmxpa2VseSh0b19wYWdlID09IE5VTEwpKQogCQkJZ290byBvdXRfZXJyOwpAQCAtNTIzLDcgKzUyNSw3IEBACiAJcmV0dXJuIDA7CiBvdXRfZXJyOgogCXR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXModHRtKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgdHRtX3R0X3N3YXBvdXQoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgZmlsZSAqcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UpCkBAIC01MzUsNiArNTM3LDcgQEAKIAl2b2lkICpmcm9tX3ZpcnR1YWw7CiAJdm9pZCAqdG9fdmlydHVhbDsKIAlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAogCUJVR19PTih0dG0tPnN0YXRlICE9IHR0X3VuYm91bmQgJiYgdHRtLT5zdGF0ZSAhPSB0dF91bnBvcHVsYXRlZCk7CiAJQlVHX09OKHR0bS0+Y2FjaGluZ19zdGF0ZSAhPSB0dF9jYWNoZWQpOwpAQCAtNTU3LDcgKzU2MCw3IEBACiAJCQkJCQkwKTsKIAkJaWYgKHVubGlrZWx5KElTX0VSUihzd2FwX3N0b3JhZ2UpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgYWxsb2NhdGluZyBzd2FwIHN0b3JhZ2UuXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIFBUUl9FUlIoc3dhcF9zdG9yYWdlKTsKIAkJfQogCX0gZWxzZQogCQlzd2FwX3N0b3JhZ2UgPSBwZXJzaXN0YW50X3N3YXBfc3RvcmFnZTsKQEAgLTU2OSw5ICs1NzIsMTAgQEAKIAkJaWYgKHVubGlrZWx5KGZyb21fcGFnZSA9PSBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCQl0b19wYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2Uoc3dhcF9zcGFjZSwgaSwgTlVMTCk7Ci0JCWlmICh1bmxpa2VseSh0b19wYWdlID09IE5VTEwpKQorCQlpZiAodW5saWtlbHkoSVNfRVJSKHRvX3BhZ2UpKSkgeworCQkJcmV0ID0gUFRSX0VSUih0b19wYWdlKTsKIAkJCWdvdG8gb3V0X2VycjsKLQorCQl9CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlmcm9tX3ZpcnR1YWwgPSBrbWFwX2F0b21pYyhmcm9tX3BhZ2UsIEtNX1VTRVIwKTsKIAkJdG9fdmlydHVhbCA9IGttYXBfYXRvbWljKHRvX3BhZ2UsIEtNX1VTRVIxKTsKQEAgLTU5NSw1ICs1OTksNSBAQAogCWlmICghcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UpCiAJCWZwdXQoc3dhcF9zdG9yYWdlKTsKIAotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCmluZGV4IDc5MGU2NzUuLjYxYWI0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCkBAIC04LDMgKzgsMjIgQEAKIAkgIGFyZSBhY2Nlc3NlZCBhdCBzYW1lIHRpbWUgdGhleSBuZWVkIHNvbWUga2luZCBvZiBjb29yZGluYXRpb24uIFBsZWFzZQogCSAgc2VlIERvY3VtZW50YXRpb24vdmdhYXJiaXRlci50eHQgZm9yIG1vcmUgZGV0YWlscy4gU2VsZWN0IHRoaXMgdG8KIAkgIGVuYWJsZSBWR0EgYXJiaXRlci4KKworY29uZmlnIFZHQV9BUkJfTUFYX0dQVVMKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIEdQVXMiCisJZGVmYXVsdCAxNgorCWRlcGVuZHMgb24gVkdBX0FSQgorCWhlbHAKKwkgIFJlc2VydmVzIHNwYWNlIGluIHRoZSBrZXJuZWwgdG8gbWFpbnRhaW4gcmVzb3VyY2UgbG9ja2luZyBmb3IKKwkgIG11bHRpcGxlIEdQVVMuICBUaGUgb3ZlcmhlYWQgZm9yIGVhY2ggR1BVIGlzIHZlcnkgc21hbGwuCisKK2NvbmZpZyBWR0FfU1dJVENIRVJPTworCWJvb2wgIkxhcHRvcCBIeWJyaWQgR3JhcGljcyAtIEdQVSBzd2l0Y2hpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gQUNQSQorCWhlbHAKKwkgIE1hbnkgbGFwdG9wcyByZWxlYXNlZCBpbiAyMDA4LzkvMTAgaGF2ZSB0d28gZ3B1cyB3aXRoIGEgbXVsdGlwbHhlcgorCSAgdG8gc3dpdGNoIGJldHdlZW4gdGhlbS4gVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgc3dpdGNoaW5nIHdoZW4KKyAgICAgICAgICBYIGlzbid0IHJ1bm5pbmcgYW5kIGRlbGF5ZWQgc3dpdGNoaW5nIHVudGlsIHRoZSBuZXh0IGxvZ29mZi4gVGhpcworCSAgZmVhdHVyZXMgaXMgY2FsbGVkIGh5YnJpZCBncmFwaGljcywgQVRJIFBvd2VyWHByZXNzLCBhbmQgTnZpZGlhCisJICBIeWJyaWRQb3dlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L3ZnYS9NYWtlZmlsZQppbmRleCA3Y2M4YzFlLi4xNGNhMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvdmdhL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKIG9iai0kKENPTkZJR19WR0FfQVJCKSAgKz0gdmdhYXJiLm8KK29iai0kKENPTkZJR19WR0FfU1dJVENIRVJPTykgKz0gdmdhX3N3aXRjaGVyb28ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQxMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUmVkIEhhdCBJbmMuCisgKiBBdXRob3IgOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorICoKKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2MgorICoKKyAqIHZnYV9zd2l0Y2hlcm9vLmMgLSBTdXBwb3J0IGZvciBsYXB0b3Agd2l0aCBkdWFsIEdQVSB1c2luZyBvbmUgc2V0IG9mIG91dHB1dHMKKworIFN3aXRjaGVyIGludGVyZmFjZSAtIG1ldGhvZHMgcmVxdWlyZSBmb3IgQVRQWCBhbmQgRENNCisgLSBzd2l0Y2h0byAtIHRoaXMgdGhyb3dzIHRoZSBvdXRwdXQgTVVYIHN3aXRjaAorIC0gZGlzY3JldGVfc2V0X3Bvd2VyIC0gc2V0cyB0aGUgcG93ZXIgc3RhdGUgZm9yIHRoZSBkaXNjcmV0ZSBjYXJkCisKKyBHUFUgZHJpdmVyIGludGVyZmFjZQorIC0gc2V0X2dwdV9zdGF0ZSAtIHRoaXMgc2hvdWxkIGRvIHRoZSBlcXVpdiBvZiBzL3IgZm9yIHRoZSBjYXJkCisJCSAgLSB0aGlzIHNob3VsZCAqbm90KiBzZXQgdGhlIGRpc2NyZXRlIHBvd2VyIHN0YXRlCisgLSBzd2l0Y2hfY2hlY2sgIC0gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBpbiBhIHBvc2l0aW9uIHRvIHN3aXRjaCBub3cKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CisKK3N0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvOworCWludCBwd3Jfc3RhdGU7CisJdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlKTsKKwlib29sICgqY2FuX3N3aXRjaCkoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCWludCBpZDsKKwlib29sIGFjdGl2ZTsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgodmdhc3JfbXV0ZXgpOworCitzdHJ1Y3Qgdmdhc3JfcHJpdiB7CisKKwlib29sIGFjdGl2ZTsKKwlib29sIGRlbGF5ZWRfc3dpdGNoX2FjdGl2ZTsKKwllbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBkZWxheWVkX2NsaWVudF9pZDsKKworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpzd2l0Y2hfZmlsZTsKKworCWludCByZWdpc3RlcmVkX2NsaWVudHM7CisJc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCBjbGllbnRzW1ZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTXTsKKworCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyOworfTsKKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoc3RydWN0IHZnYXNyX3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHN0cnVjdCB2Z2Fzcl9wcml2ICpwcml2KTsKKworLyogb25seSBvbmUgc3dpdGNoZXJvbyBwZXIgc3lzdGVtICovCitzdGF0aWMgc3RydWN0IHZnYXNyX3ByaXYgdmdhc3JfcHJpdjsKKworaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2hhbmRsZXIoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2hhbmRsZXIgKmhhbmRsZXIpCit7CisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCWlmICh2Z2Fzcl9wcml2LmhhbmRsZXIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZnYXNyX3ByaXYuaGFuZGxlciA9IGhhbmRsZXI7CisJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2hhbmRsZXIpOworCit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcih2b2lkKQoreworCW11dGV4X2xvY2soJnZnYXNyX211dGV4KTsKKwl2Z2Fzcl9wcml2LmhhbmRsZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2hhbmRsZXIpOworCitzdGF0aWMgdm9pZCB2Z2Ffc3dpdGNoZXJvb19lbmFibGUodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCS8qIGNhbGwgdGhlIGhhbmRsZXIgdG8gaW5pdCAqLworCXZnYXNyX3ByaXYuaGFuZGxlci0+aW5pdCgpOworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJcmV0ID0gdmdhc3JfcHJpdi5oYW5kbGVyLT5nZXRfY2xpZW50X2lkKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm47CisKKwkJdmdhc3JfcHJpdi5jbGllbnRzW2ldLmlkID0gcmV0OworCX0KKwl2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoJnZnYXNyX3ByaXYpOworCXZnYXNyX3ByaXYuYWN0aXZlID0gdHJ1ZTsKK30KKworaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICB2b2lkICgqc2V0X2dwdV9zdGF0ZSkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCSAgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqcGRldikpCit7CisJaW50IGluZGV4OworCisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCS8qIGRvbid0IGRvIElHRCB2cyBESVMgaGVyZSAqLworCWlmICh2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyAmIDEpCisJCWluZGV4ID0gMTsKKwllbHNlCisJCWluZGV4ID0gMDsKKworCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0ucHdyX3N0YXRlID0gVkdBX1NXSVRDSEVST09fT047CisJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5wZGV2ID0gcGRldjsKKwl2Z2Fzcl9wcml2LmNsaWVudHNbaW5kZXhdLnNldF9ncHVfc3RhdGUgPSBzZXRfZ3B1X3N0YXRlOworCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0uY2FuX3N3aXRjaCA9IGNhbl9zd2l0Y2g7CisJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5pZCA9IC0xOworCWlmIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykKKwkJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5hY3RpdmUgPSB0cnVlOworCisJdmdhc3JfcHJpdi5yZWdpc3RlcmVkX2NsaWVudHMgfD0gKDEgPDwgaW5kZXgpOworCisJLyogaWYgd2UgZ2V0IHR3byBjbGllbnRzICsgaGFuZGxlciAqLworCWlmICh2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyA9PSAweDMgJiYgdmdhc3JfcHJpdi5oYW5kbGVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gInZnYV9zd2l0Y2hlcm9vOiBlbmFibGVkXG4iKTsKKwkJdmdhX3N3aXRjaGVyb29fZW5hYmxlKCk7CisJfQorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQpOworCit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CisJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldiA9PSBwZGV2KSB7CisJCQl2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyAmPSB+KDEgPDwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gInZnYV9zd2l0Y2hlcm9vOiBkaXNhYmxlZFxuIik7CisJdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKCZ2Z2Fzcl9wcml2KTsKKwl2Z2Fzcl9wcml2LmFjdGl2ZSA9IGZhbHNlOworCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudCk7CisKK3ZvaWQgdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wZGV2ID09IHBkZXYpIHsKKwkJCXZnYXNyX3ByaXYuY2xpZW50c1tpXS5mYl9pbmZvID0gaW5mbzsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KTsKKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiJWQ6JWM6JXM6JXNcbiIsIGksCisJCQkgICB2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlID8gJysnIDogJyAnLAorCQkJICAgdmdhc3JfcHJpdi5jbGllbnRzW2ldLnB3cl9zdGF0ZSA/ICJQd3IiIDogIk9mZiIsCisJCQkgICBwY2lfbmFtZSh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldikpOworCX0KKwltdXRleF91bmxvY2soJnZnYXNyX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZnYV9zd2l0Y2hlcm9vX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgaW50IHZnYV9zd2l0Y2hvbihzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldDsKKworCXJldCA9IHZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT04pOworCS8qIGNhbGwgdGhlIGRyaXZlciBjYWxsYmFjayB0byB0dXJuIG9uIGRldmljZSAqLworCWNsaWVudC0+c2V0X2dwdV9zdGF0ZShjbGllbnQtPnBkZXYsIFZHQV9TV0lUQ0hFUk9PX09OKTsKKwljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09OOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZnYV9zd2l0Y2hvZmYoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqY2xpZW50KQoreworCS8qIGNhbGwgdGhlIGRyaXZlciBjYWxsYmFjayB0byB0dXJuIG9mZiBkZXZpY2UgKi8KKwljbGllbnQtPnNldF9ncHVfc3RhdGUoY2xpZW50LT5wZGV2LCBWR0FfU1dJVENIRVJPT19PRkYpOworCXZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT0ZGKTsKKwljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09GRjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNodG8oc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqbmV3X2NsaWVudCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmFjdGl2ZSA9IE5VTEw7CisKKwlpZiAobmV3X2NsaWVudC0+YWN0aXZlID09IHRydWUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5hY3RpdmUgPT0gdHJ1ZSkgeworCQkJYWN0aXZlID0gJnZnYXNyX3ByaXYuY2xpZW50c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qIHBvd2VyIHVwIHRoZSBmaXJzdCBkZXZpY2UgKi8KKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShuZXdfY2xpZW50LT5wZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG5ld19jbGllbnQtPnB3cl9zdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PRkYpCisJCXZnYV9zd2l0Y2hvbihuZXdfY2xpZW50KTsKKworCS8qIHN3YXAgc2hhZG93IHJlc291cmNlIHRvIGRlbm90ZSBib290IFZHQSBkZXZpY2UgaGFzIGNoYW5nZWQgc28gWCBzdGFydHMgb24gbmV3IGRldmljZSAqLworCWFjdGl2ZS0+YWN0aXZlID0gZmFsc2U7CisKKwlhY3RpdmUtPnBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzICY9IH5JT1JFU09VUkNFX1JPTV9TSEFET1c7CisJbmV3X2NsaWVudC0+cGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fU0hBRE9XOworCisJaWYgKG5ld19jbGllbnQtPmZiX2luZm8pIHsKKwkJc3RydWN0IGZiX2V2ZW50IGV2ZW50OworCQlldmVudC5pbmZvID0gbmV3X2NsaWVudC0+ZmJfaW5mbzsKKwkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9SRU1BUF9BTExfQ09OU09MRSwgJmV2ZW50KTsKKwl9CisKKwlyZXQgPSB2Z2Fzcl9wcml2LmhhbmRsZXItPnN3aXRjaHRvKG5ld19jbGllbnQtPmlkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGFjdGl2ZS0+cHdyX3N0YXRlID09IFZHQV9TV0lUQ0hFUk9PX09OKQorCQl2Z2Ffc3dpdGNob2ZmKGFjdGl2ZSk7CisKKwluZXdfY2xpZW50LT5hY3RpdmUgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAordmdhX3N3aXRjaGVyb29fZGVidWdmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyIHVzZXJjbWRbNjRdOworCWNvbnN0IGNoYXIgKnBkZXZfbmFtZTsKKwlpbnQgaSwgcmV0OworCWJvb2wgZGVsYXkgPSBmYWxzZSwgY2FuX3N3aXRjaDsKKwlpbnQgY2xpZW50X2lkID0gLTE7CisJc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqY2xpZW50ID0gTlVMTDsKKworCWlmIChjbnQgPiA2MykKKwkJY250ID0gNjM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodXNlcmNtZCwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisKKwlpZiAoIXZnYXNyX3ByaXYuYWN0aXZlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHB3ciBvZmYgdGhlIGRldmljZSBub3QgaW4gdXNlICovCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIk9GRiIsIDMpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wd3Jfc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pCisJCQkJdmdhX3N3aXRjaG9mZigmdmdhc3JfcHJpdi5jbGllbnRzW2ldKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisJLyogcHdyIG9uIHRoZSBkZXZpY2Ugbm90IGluIHVzZSAqLworCWlmIChzdHJuY21wKHVzZXJjbWQsICJPTiIsIDIpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wd3Jfc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT0ZGKQorCQkJCXZnYV9zd2l0Y2hvbigmdmdhc3JfcHJpdi5jbGllbnRzW2ldKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiByZXF1ZXN0IGEgZGVsYXllZCBzd2l0Y2ggLSB0ZXN0IGNhbiB3ZSBzd2l0Y2ggbm93ICovCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIkRJR0QiLCA0KSA9PSAwKSB7CisJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0lHRDsKKwkJZGVsYXkgPSB0cnVlOworCX0KKworCWlmIChzdHJuY21wKHVzZXJjbWQsICJERElTIiwgNCkgPT0gMCkgeworCQljbGllbnRfaWQgPSBWR0FfU1dJVENIRVJPT19ESVM7CisJCWRlbGF5ID0gdHJ1ZTsKKwl9CisKKwlpZiAoc3RybmNtcCh1c2VyY21kLCAiSUdEIiwgMykgPT0gMCkKKwkJY2xpZW50X2lkID0gVkdBX1NXSVRDSEVST09fSUdEOworCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIkRJUyIsIDMpID09IDApCisJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0RJUzsKKworCWlmIChjbGllbnRfaWQgPT0gLTEpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5pZCA9PSBjbGllbnRfaWQpIHsKKwkJCWNsaWVudCA9ICZ2Z2Fzcl9wcml2LmNsaWVudHNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCXZnYXNyX3ByaXYuZGVsYXllZF9zd2l0Y2hfYWN0aXZlID0gZmFsc2U7CisJLyogb2theSB3ZSB3YW50IGEgc3dpdGNoIC0gdGVzdCBpZiBkZXZpY2VzIGFyZSB3aWxsaW5nIHRvIHN3aXRjaCAqLworCWNhbl9zd2l0Y2ggPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CisJCWNhbl9zd2l0Y2ggPSB2Z2Fzcl9wcml2LmNsaWVudHNbaV0uY2FuX3N3aXRjaCh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldik7CisJCWlmIChjYW5fc3dpdGNoID09IGZhbHNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBjbGllbnQgJWQgcmVmdXNlZCBzd2l0Y2hcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2FuX3N3aXRjaCA9PSBmYWxzZSAmJiBkZWxheSA9PSBmYWxzZSkKKwkJZ290byBvdXQ7CisKKwlpZiAoY2FuX3N3aXRjaCA9PSB0cnVlKSB7CisJCXBkZXZfbmFtZSA9IHBjaV9uYW1lKGNsaWVudC0+cGRldik7CisJCXJldCA9IHZnYV9zd2l0Y2h0byhjbGllbnQpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogc3dpdGNoaW5nIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJ2Z2Ffc3dpdGNoZXJvbzogc2V0dGluZyBkZWxheWVkIHN3aXRjaCB0byBjbGllbnQgJWRcbiIsIGNsaWVudC0+aWQpOworCQl2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSA9IHRydWU7CisJCXZnYXNyX3ByaXYuZGVsYXllZF9jbGllbnRfaWQgPSBjbGllbnRfaWQ7CisKKwkJLyogd2Ugc2hvdWxkIGF0IGxlYXN0IHBvd2VyIHVwIHRoZSBjYXJkIHRvCisJCSAgIG1ha2UgdGhlIHN3aXRjaCBmYXN0ZXIgKi8KKwkJaWYgKGNsaWVudC0+cHdyX3N0YXRlID09IFZHQV9TV0lUQ0hFUk9PX09GRikKKwkJCXZnYV9zd2l0Y2hvbihjbGllbnQpOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfb3BlbiwKKwkud3JpdGUgPSB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX3dyaXRlLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHN0cnVjdCB2Z2Fzcl9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5zd2l0Y2hfZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5zd2l0Y2hfZmlsZSk7CisJCXByaXYtPnN3aXRjaF9maWxlID0gTlVMTDsKKwl9CisJaWYgKHByaXYtPmRlYnVnZnNfcm9vdCkgeworCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Z2ZzX3Jvb3QpOworCQlwcml2LT5kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoc3RydWN0IHZnYXNyX3ByaXYgKnByaXYpCit7CisJLyogYWxyZWFkeSBpbml0aWFsaXNlZCAqLworCWlmIChwcml2LT5kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAwOworCXByaXYtPmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigidmdhc3dpdGNoZXJvbyIsIE5VTEwpOworCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3Jvb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogQ2Fubm90IGNyZWF0ZSAvc3lzL2tlcm5lbC9kZWJ1Zy92Z2Fzd2l0Y2hlcm9vXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaXYtPnN3aXRjaF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3dpdGNoIiwgMDY0NCwKKwkJCQkJCXByaXYtPmRlYnVnZnNfcm9vdCwgTlVMTCwgJnZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFwcml2LT5zd2l0Y2hfZmlsZSkgeworCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBjYW5ub3QgY3JlYXRlIC9zeXMva2VybmVsL2RlYnVnL3ZnYXN3aXRjaGVyb28vc3dpdGNoXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gMDsKK2ZhaWw6CisJdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHByaXYpOworCXJldHVybiAtMTsKK30KKworaW50IHZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2godm9pZCkKK3sKKwlzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICpjbGllbnQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnBkZXZfbmFtZTsKKwlib29sIGNhbl9zd2l0Y2ggPSB0cnVlOworCWludCBpOworCWludCByZXQ7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJaWYgKCF2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSkKKwkJZ290byBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPICJ2Z2Ffc3dpdGNoZXJvbzogcHJvY2Vzc2luZyBkZWxheWVkIHN3aXRjaCB0byAlZFxuIiwgdmdhc3JfcHJpdi5kZWxheWVkX2NsaWVudF9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgeworCQlpZiAodmdhc3JfcHJpdi5jbGllbnRzW2ldLmlkID09IHZnYXNyX3ByaXYuZGVsYXllZF9jbGllbnRfaWQpCisJCQljbGllbnQgPSAmdmdhc3JfcHJpdi5jbGllbnRzW2ldOworCQljYW5fc3dpdGNoID0gdmdhc3JfcHJpdi5jbGllbnRzW2ldLmNhbl9zd2l0Y2godmdhc3JfcHJpdi5jbGllbnRzW2ldLnBkZXYpOworCQlpZiAoY2FuX3N3aXRjaCA9PSBmYWxzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogY2xpZW50ICVkIHJlZnVzZWQgc3dpdGNoXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNhbl9zd2l0Y2ggPT0gZmFsc2UgfHwgY2xpZW50ID09IE5VTEwpCisJCWdvdG8gZXJyOworCisJcGRldl9uYW1lID0gcGNpX25hbWUoY2xpZW50LT5wZGV2KTsKKwlyZXQgPSB2Z2Ffc3dpdGNodG8oY2xpZW50KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBkZWxheWVkIHN3aXRjaGluZyBmYWlsZWQgJWRcbiIsIHJldCk7CisKKwl2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSA9IGZhbHNlOworCWVyciA9IDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wodmdhX3N3aXRjaGVyb29fcHJvY2Vzc19kZWxheWVkX3N3aXRjaCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAyZjZjZjY5Li44ODI3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC02ODgsNyArNjg4LDcgQEAKICAqIHRoZSBhcmJpdGVyLgogICovCiAKLSNkZWZpbmUgTUFYX1VTRVJfQ0FSRFMgICAgICAgICAxNgorI2RlZmluZSBNQVhfVVNFUl9DQVJEUyAgICAgICAgIENPTkZJR19WR0FfQVJCX01BWF9HUFVTCiAjZGVmaW5lIFBDSV9JTlZBTElEX0NBUkQgICAgICAgKChzdHJ1Y3QgcGNpX2RldiAqKS0xVUwpCiAKIC8qCkBAIC05NTQsNiArOTU0LDcgQEAKIAkJfQogCiAJfSBlbHNlIGlmIChzdHJuY21wKGN1cnJfcG9zLCAidGFyZ2V0ICIsIDcpID09IDApIHsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CiAJCXVuc2lnbmVkIGludCBkb21haW4sIGJ1cywgZGV2Zm47CiAJCXN0cnVjdCB2Z2FfZGV2aWNlICp2Z2FkZXY7CiAKQEAgLTk2OSwxOCArOTcwLDMxIEBACiAJCQkJcmV0X3ZhbCA9IC1FUFJPVE87CiAJCQkJZ290byBkb25lOwogCQkJfQorCQkJcHJfZGV2ZWwoInZnYWFyYjogJXMgPT0+ICV4OiV4OiV4LiV4XG4iLCBjdXJyX3BvcywKKwkJCQlkb21haW4sIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOwogCi0JCQlwZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYnVzLCBkZXZmbik7CisJCQlwYnVzID0gcGNpX2ZpbmRfYnVzKGRvbWFpbiwgYnVzKTsKKwkJCXByX2RldmVsKCJ2Z2FhcmI6IHBidXMgJXBcbiIsIHBidXMpOworCQkJaWYgKHBidXMgPT0gTlVMTCkgeworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBkb21haW4gYW5kL29yIGJ1cyBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlkb21haW4sIGJ1cyk7CisJCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcGRldiA9IHBjaV9nZXRfc2xvdChwYnVzLCBkZXZmbik7CisJCQlwcl9kZXZlbCgidmdhYXJiOiBwZGV2ICVwXG4iLCBwZGV2KTsKIAkJCWlmICghcGRldikgewotCQkJCXByX2luZm8oInZnYWFyYjogaW52YWxpZCBQQ0kgYWRkcmVzcyFcbiIpOworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlidXMsIGRldmZuKTsKIAkJCQlyZXRfdmFsID0gLUVOT0RFVjsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KIAogCQl2Z2FkZXYgPSB2Z2FkZXZfZmluZChwZGV2KTsKKwkJcHJfZGV2ZWwoInZnYWFyYjogdmdhZGV2ICVwXG4iLCB2Z2FkZXYpOwogCQlpZiAodmdhZGV2ID09IE5VTEwpIHsKLQkJCXByX2luZm8oInZnYWFyYjogdGhpcyBwY2kgZGV2aWNlIGlzIG5vdCBhIHZnYSBkZXZpY2VcbiIpOworCQkJcHJfZXJyKCJ2Z2FhcmI6IHRoaXMgcGNpIGRldmljZSBpcyBub3QgYSB2Z2EgZGV2aWNlXG4iKTsKIAkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CiAJCQlnb3RvIGRvbmU7CkBAIC05OTgsNyArMTAxMiw4IEBACiAJCQl9CiAJCX0KIAkJaWYgKGkgPT0gTUFYX1VTRVJfQ0FSRFMpIHsKLQkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgbnVtYmVyIHJlYWNoZWQhXG4iKTsKKwkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgKCVkKSBudW1iZXIgcmVhY2hlZCFcbiIsCisJCQkJTUFYX1VTRVJfQ0FSRFMpOwogCQkJcGNpX2Rldl9wdXQocGRldik7CiAJCQkvKiBYWFg6IHdoaWNoIHZhbHVlIHRvIHJldHVybj8gKi8KIAkJCXJldF92YWwgPSAgLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDI0ZDkwZWEuLjcxZDRjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTIgQEAKIG1lbnUgIlNwZWNpYWwgSElEIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBISUQKIAorY29uZmlnIEhJRF8zTV9QQ1QKKwl0cmlzdGF0ZSAiM00gUENUIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciAzTSBQQ1QgdG91Y2ggc2NyZWVucy4KKwogY29uZmlnIEhJRF9BNFRFQ0gKIAl0cmlzdGF0ZSAiQTQgdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE4Myw2ICsxODksMjMgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCiAJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgogCitjb25maWcgTE9HSUc5NDBfRkYKKwlib29sICJMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9MT0dJVEVDSAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKKwkgIEZsaWdodCBTeXN0ZW0gRzk0MCBkZXZpY2VzLgorCitjb25maWcgSElEX01BR0lDTU9VU0UKKwl0cmlzdGF0ZSAiQXBwbGUgTWFnaWNNb3VzZSBtdWx0aS10b3VjaCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlRfSElEUAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciB0aGUgQXBwbGUgTWFnaWMgTW91c2UgbXVsdGktdG91Y2guCisKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBtdWx0aS10b3VjaCBmZWF0dXJlcyBvZiB0aGUKKwlBcHBsZSBXaXJlbGVzcyAiTWFnaWMiIE1vdXNlLgorCiBjb25maWcgSElEX01JQ1JPU09GVAogCXRyaXN0YXRlICJNaWNyb3NvZnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xOTAsNiArMjEzLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIE1pY3Jvc29mdCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCiAKK2NvbmZpZyBISURfTU9TQVJUCisJdHJpc3RhdGUgIk1vc0FydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgTW9zQXJ0IGR1YWwtdG91Y2ggcGFuZWxzLgorCiBjb25maWcgSElEX01PTlRFUkVZCiAJdHJpc3RhdGUgIk1vbnRlcmV5IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTk4LDExICsyMjcsMTcgQEAKIAlTdXBwb3J0IGZvciBNb250ZXJleSBHZW5pdXMgS0IyOUUuCiAKIGNvbmZpZyBISURfTlRSSUcKLQl0cmlzdGF0ZSAiTlRyaWciIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIk5UcmlnIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBOLVRyaWcgdG91Y2ggc2NyZWVuLgorCitjb25maWcgSElEX09SVEVLCisJdHJpc3RhdGUgIk9ydGVrIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAogCWRlZmF1bHQgIUVNQkVEREVECiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCisJU3VwcG9ydCBmb3IgT3J0ZWsgV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZC4KIAogY29uZmlnIEhJRF9QQU5USEVSTE9SRAogCXRyaXN0YXRlICJQYW50aGVybG9yZCBzdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtMjI3LDYgKzI2MiwxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBQZXRhbHlueCBNYXh0ZXIgcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfUVVBTlRBCisJdHJpc3RhdGUgIlF1YW50YSBPcHRpY2FsIFRvdWNoIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBRdWFudGEgT3B0aWNhbCBUb3VjaCBkdWFsLXRvdWNoIHBhbmVscy4KKwogY29uZmlnIEhJRF9TQU1TVU5HCiAJdHJpc3RhdGUgIlNhbXN1bmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0yNDEsNiArMjgyLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFNvbnkgUFMzIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBISURfU1RBTlRVTQorCXRyaXN0YXRlICJTdGFudHVtIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWwuCisKIGNvbmZpZyBISURfU1VOUExVUwogCXRyaXN0YXRlICJTdW5wbHVzIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMzA1LDkgKzM1Miw4IEBACiAJICBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwuCiAKIGNvbmZpZyBISURfV0FDT00KLQl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJUX0hJRFAKLQlkZWZhdWx0ICFFTUJFRERFRAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBXYWNvbSBHcmFwaGlyZSBCbHVldG9vdGggdGFibGV0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDBkZTJkZmYuLjBiMjYxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0xOCw3ICsxOCwxMSBAQAogaWZkZWYgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGCiAJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnMmZmLm8KIGVuZGlmCitpZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKKwloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGczZmYubworZW5kaWYKIAorb2JqLSQoQ09ORklHX0hJRF8zTV9QQ1QpCSs9IGhpZC0zbS1wY3Qubwogb2JqLSQoQ09ORklHX0hJRF9BNFRFQ0gpCSs9IGhpZC1hNHRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9BUFBMRSkJCSs9IGhpZC1hcHBsZS5vCiBvYmotJChDT05GSUdfSElEX0JFTEtJTikJKz0gaGlkLWJlbGtpbi5vCkBAIC0zMSwxNCArMzUsMTkgQEAKIG9iai0kKENPTkZJR19ISURfS0VOU0lOR1RPTikJKz0gaGlkLWtlbnNpbmd0b24ubwogb2JqLSQoQ09ORklHX0hJRF9LWUUpCQkrPSBoaWQta3llLm8KIG9iai0kKENPTkZJR19ISURfTE9HSVRFQ0gpCSs9IGhpZC1sb2dpdGVjaC5vCitvYmotJChDT05GSUdfSElEX01BR0lDTU9VU0UpICAgICs9IGhpZC1tYWdpY21vdXNlLm8KIG9iai0kKENPTkZJR19ISURfTUlDUk9TT0ZUKQkrPSBoaWQtbWljcm9zb2Z0Lm8KIG9iai0kKENPTkZJR19ISURfTU9OVEVSRVkpCSs9IGhpZC1tb250ZXJleS5vCitvYmotJChDT05GSUdfSElEX01PU0FSVCkJKz0gaGlkLW1vc2FydC5vCiBvYmotJChDT05GSUdfSElEX05UUklHKQkJKz0gaGlkLW50cmlnLm8KK29iai0kKENPTkZJR19ISURfT1JURUspCQkrPSBoaWQtb3J0ZWsubworb2JqLSQoQ09ORklHX0hJRF9RVUFOVEEpCSs9IGhpZC1xdWFudGEubwogb2JqLSQoQ09ORklHX0hJRF9QQU5USEVSTE9SRCkJKz0gaGlkLXBsLm8KIG9iai0kKENPTkZJR19ISURfUEVUQUxZTlgpCSs9IGhpZC1wZXRhbHlueC5vCiBvYmotJChDT05GSUdfSElEX1NBTVNVTkcpCSs9IGhpZC1zYW1zdW5nLm8KIG9iai0kKENPTkZJR19ISURfU01BUlRKT1lQTFVTKQkrPSBoaWQtc2pveS5vCiBvYmotJChDT05GSUdfSElEX1NPTlkpCQkrPSBoaWQtc29ueS5vCitvYmotJChDT05GSUdfSElEX1NUQU5UVU0pCSs9IGhpZC1zdGFudHVtLm8KIG9iai0kKENPTkZJR19ISURfU1VOUExVUykJKz0gaGlkLXN1bnBsdXMubwogb2JqLSQoQ09ORklHX0hJRF9HUkVFTkFTSUEpCSs9IGhpZC1nYWZmLm8KIG9iai0kKENPTkZJR19ISURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMgYi9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MGFlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciAzTSBQQ1QgbXVsdGl0b3VjaCBwYW5lbHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiM00gUENUIG11bHRpdG91Y2ggcGFuZWxzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBtbW1fZmluZ2VyIHsKKwlfX3MzMiB4LCB5OworCV9fdTggcmFuazsKKwlib29sIHRvdWNoLCB2YWxpZDsKK307CisKK3N0cnVjdCBtbW1fZGF0YSB7CisJc3RydWN0IG1tbV9maW5nZXIgZlsxMF07CisJX191OCBjdXJpZCwgbnVtOworCWJvb2wgdG91Y2gsIHZhbGlkOworfTsKKworc3RhdGljIGludCBtbW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0JVVFRPTjoKKwkJcmV0dXJuIC0xOworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJY2FzZSAweDE0OgorCQljYXNlIDB4MjM6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCQl9CisJCS8qIGxldCBoaWQtaW5wdXQgZGVjaWRlIGZvciB0aGUgb3RoZXJzICovCisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tbV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgbW1tX2ZpbHRlcl9ldmVudChzdHJ1Y3QgbW1tX2RhdGEgKm1kLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgbW1tX2ZpbmdlciAqb2xkZXN0ID0gMDsKKwlib29sIHByZXNzZWQgPSBmYWxzZSwgcmVsZWFzZWQgPSBmYWxzZTsKKwlpbnQgaTsKKworCS8qCisJICogd2UgbmVlZCB0byBpdGVyYXRlIG9uIGFsbCBmaW5nZXJzIHRvIGRlY2lkZSBpZiB3ZSBoYXZlIGEgcHJlc3MKKwkgKiBvciBhIHJlbGVhc2UgZXZlbnQgaW4gb3VyIHRvdWNoc2NyZWVuIGVtdWxhdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlzdHJ1Y3QgbW1tX2ZpbmdlciAqZiA9ICZtZC0+ZltpXTsKKwkJaWYgKCFmLT52YWxpZCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMganVzdCBwbGFjZWhvbGRlciBkYXRhLCBpZ25vcmUgKi8KKwkJfSBlbHNlIGlmIChmLT50b3VjaCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMgb24gdGhlIHNjcmVlbiAqLworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCBpKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBmLT54KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBmLT55KTsKKwkJCWlucHV0X210X3N5bmMoaW5wdXQpOworCQkJLyoKKwkJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogbWFpbnRhaW4gdGhlIGFnZSByYW5rCisJCQkgKiBvZiB0aGlzIGZpbmdlciwgZGVjaWRlIGlmIHdlIGhhdmUgYSBwcmVzcworCQkJICovCisJCQlpZiAoZi0+cmFuayA9PSAwKSB7CisJCQkJZi0+cmFuayA9ICsrKG1kLT5udW0pOworCQkJCWlmIChmLT5yYW5rID09IDEpCisJCQkJCXByZXNzZWQgPSB0cnVlOworCQkJfQorCQkJaWYgKGYtPnJhbmsgPT0gMSkKKwkJCQlvbGRlc3QgPSBmOworCQl9IGVsc2UgeworCQkJLyogdGhpcyBmaW5nZXIgdG9vayBvZmYgdGhlIHNjcmVlbiAqLworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBtYWludGFpbiBhZ2UgcmFuayBvZiBvdGhlcnMgKi8KKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgMTA7ICsraikgeworCQkJCXN0cnVjdCBtbW1fZmluZ2VyICpnID0gJm1kLT5mW2pdOworCQkJCWlmIChnLT5yYW5rID4gZi0+cmFuaykgeworCQkJCQlnLT5yYW5rLS07CisJCQkJCWlmIChnLT5yYW5rID09IDEpCisJCQkJCQlvbGRlc3QgPSBnOworCQkJCX0KKwkJCX0KKwkJCWYtPnJhbmsgPSAwOworCQkJLS0obWQtPm51bSk7CisJCQlpZiAobWQtPm51bSA9PSAwKQorCQkJCXJlbGVhc2VkID0gdHJ1ZTsKKwkJfQorCQlmLT52YWxpZCA9IDA7CisJfQorCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJaWYgKG9sZGVzdCkgeworCQlpZiAocHJlc3NlZCkKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBvbGRlc3QtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgb2xkZXN0LT55KTsKKwl9IGVsc2UgaWYgKHJlbGVhc2VkKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJfQorfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBhbGwgcmVwb3J0cworICogc28gdGhhdCB3ZSBjYW4gYWNjdW11bGF0ZSBjb250YWN0IHBvaW50IGluZm9ybWF0aW9uLAorICogYW5kIGNhbGwgaW5wdXRfbXRfc3luYyBhZnRlciBlYWNoIHBvaW50LgorICovCitzdGF0aWMgaW50IG1tbV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IG1tbV9kYXRhICptZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCS8qCisJICogc3RyYW5nZWx5LCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlCisJICogZmllbGQtPmhpZGlucHV0IGlzIGluaXRpYWxpemVkIQorCSAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQltZC0+dG91Y2ggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJbWQtPnZhbGlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaWYgKG1kLT52YWxpZCkgeworCQkJCW1kLT5jdXJpZCA9IHZhbHVlOworCQkJCW1kLT5mW3ZhbHVlXS50b3VjaCA9IG1kLT50b3VjaDsKKwkJCQltZC0+Zlt2YWx1ZV0udmFsaWQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCW1tbV9maWx0ZXJfZXZlbnQobWQsIGlucHV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtbW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtbW1fZGF0YSAqbWQ7CisKKwltZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbW1fZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghbWQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIDNNIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1kKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUobWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1tbV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtbW1fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTE5NjgpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1tbV9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW1tX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1tbV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiM20tcGN0IiwKKwkuaWRfdGFibGUgPSBtbW1fZGV2aWNlcywKKwkucHJvYmUgPSBtbW1fcHJvYmUsCisJLnJlbW92ZSA9IG1tbV9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtbW1faW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gbW1tX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBtbW1fZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gbW1tX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW1tX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtbW1fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1tbV9pbml0KTsKK21vZHVsZV9leGl0KG1tbV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwppbmRleCA1YjRkNjZkLi43ODI4NmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtNDAsNiArNDAsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZm5tb2RlLCAiTW9kZSBvZiBmbiBrZXkgb24gQXBwbGUga2V5Ym9hcmRzICgwID0gZGlzYWJsZWQsICIKIAkJIlsxXSA9IGZrZXlzbGFzdCwgMiA9IGZrZXlzZmlyc3QpIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNvX2xheW91dCA9IDE7Cittb2R1bGVfcGFyYW0oaXNvX2xheW91dCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzb19sYXlvdXQsICJFbmFibGUvRGlzYWJsZSBoYXJkY29kZWQgSVNPLWxheW91dCBvZiB0aGUga2V5Ym9hcmQuICIKKwkJIigwID0gZGlzYWJsZWQsIFsxXSA9IGVuYWJsZWQpIik7CisKIHN0cnVjdCBhcHBsZV9zYyB7CiAJdW5zaWduZWQgbG9uZyBxdWlya3M7CiAJdW5zaWduZWQgaW50IGZuX29uOwpAQCAtMTk5LDExICsyMDQsMTMgQEAKIAkJfQogCX0KIAotCWlmIChhc2MtPnF1aXJrcyAmIEFQUExFX0lTT19LRVlCT0FSRCkgewotCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7Ci0JCWlmICh0cmFucykgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQkJCXJldHVybiAxOworICAgICAgICBpZiAoaXNvX2xheW91dCkgeworCQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKKwkJCXRyYW5zID0gYXBwbGVfZmluZF90cmFuc2xhdGlvbihhcHBsZV9pc29fa2V5Ym9hcmQsIHVzYWdlLT5jb2RlKTsKKwkJCWlmICh0cmFucykgeworCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGVhYmU1ZjguLjM2OGZiYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtNTEsNyArNTEsNyBAQAogICogUmVnaXN0ZXIgYSBuZXcgcmVwb3J0IGZvciBhIGRldmljZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpCitzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyB0eXBlOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CkBAIC03NSw2ICs3NSw3IEBACiAKIAlyZXR1cm4gcmVwb3J0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3JlZ2lzdGVyX3JlcG9ydCk7CiAKIC8qCiAgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCkBAIC0zODcsNyArMzg4LDggQEAKIAlfX3UzMiBkYXRhOwogCXVuc2lnbmVkIG47CiAKLQlpZiAoaXRlbS0+c2l6ZSA9PSAwKSB7CisJLyogTG9jYWwgZGVsaW1pdGVyIGNvdWxkIGhhdmUgdmFsdWUgMCwgd2hpY2ggYWxsb3dzIHNpemUgdG8gYmUgMCAqLworCWlmIChpdGVtLT5zaXplID09IDAgJiYgaXRlbS0+dGFnICE9IEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVIpIHsKIAkJZGJnX2hpZCgiaXRlbSBkYXRhIGV4cGVjdGVkIGZvciBsb2NhbCBpdGVtXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEyNDgsMTEgKzEyNTAsMTMgQEAKIAogLyogYSBsaXN0IG9mIGRldmljZXMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3BlY2lhbGl6ZWQgZHJpdmVyIG9uIEhJRCBidXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmxhY2tsaXN0W10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEXzNNLCBVU0JfREVWSUNFX0lEXzNNMTk2OCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSB9LApAQCAtMTMyNCw2ICsxMzI4LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRkZHICkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRk9SQ0UzRF9QUk8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZMSUdIVF9TWVNURU1fRzk0MCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTCkgfSwKQEAgLTEzMzcsMTAgKzEzNDIsMTUgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PTlRFUkVZLCBVU0JfREVWSUNFX0lEX0dFTklVU19LQjI5RSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVU5QTFVTLCBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1ApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwNCkgfSwKQEAgLTE1NDMsOCArMTU1Myw5IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUkNBQkxFLCBVU0JfREVWSUNFX0lEX0FJUkNBQkxFMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00pfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIpfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKX0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVNURUssIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00pfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVU1RFSywgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIpfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVZFUk1FRElBLCBVU0JfREVWSUNFX0lEX0FWRVJfRk1fTVI4MDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0lEQywgMHgwMTAzKSB9LApAQCAtMTY2MSw4ICsxNjcyLDYgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BISUxJUFMsIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUE9XRVJDT00sIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMSkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCA2YWJkMDM2Li5jZDRlY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtODY0LDEzICs4NjQsMTMgQEAKIAlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCiB9OwogCi12b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpIHsKLQorc3RhdGljIHZvaWQgaGlkX3Jlc29sdl9ldmVudChfX3U4IHR5cGUsIF9fdTE2IGNvZGUsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3sKIAlzZXFfcHJpbnRmKGYsICIlcy4lcyIsIGV2ZW50c1t0eXBlXSA/IGV2ZW50c1t0eXBlXSA6ICI/IiwKIAkJbmFtZXNbdHlwZV0gPyAobmFtZXNbdHlwZV1bY29kZV0gPyBuYW1lc1t0eXBlXVtjb2RlXSA6ICI/IikgOiAiPyIpOwogfQogCi12b2lkIGhpZF9kdW1wX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IHNlcV9maWxlICpmKQorc3RhdGljIHZvaWQgaGlkX2R1bXBfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCiB7CiAJaW50IGksIGosIGs7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCAwMTAzNjhlLi43MmMwNWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0xOCw2ICsxOCw5IEBACiAjaWZuZGVmIEhJRF9JRFNfSF9GSUxFCiAjZGVmaW5lIEhJRF9JRFNfSF9GSUxFCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF8zTQkJMHgwNTk2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfM00xOTY4CQkweDA1MDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0E0VEVDSAkJMHgwOWRhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUJMHgwMDA2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQJMHgwMDBhCkBAIC01Niw2ICs1OSw3IEBACiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRQkweDAzMGQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJCTB4MDIwZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0lTTwkweDAyMGYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfQU5TSQkweDAyMTQKQEAgLTk2LDkgKzEwMCwxMiBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wJMHg4MjQxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKIAotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MGIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNCQkweDE3MjYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIJCTB4MTc1YgorI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MDQ4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQJMHgwMTg1CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BU1VTVEVLCQkweDBiMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTQkweDE3MjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIJMHgxNzViCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BVEVOCQkweDA1NTcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00JMHgyMDA0CkBAIC0xNjksNiArMTc2LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNICTB4MjJiOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNICTB4MDAwNgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVRUCQkweDA2NjQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQzVVSAkJMHgwMzA5CiAKQEAgLTMwMyw2ICszMTMsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDJfMgkweGMyMTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRAkweGMyODMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTwkweGMyODYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDAJMHhjMjg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GRkcJMHhjMjkzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTAkweGMyOTUKQEAgLTM2NSw2ICszNzYsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX09SVEVLCQkweDA1YTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwCTB4MjAwMAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMApAQCAtMzgyLDkgKzM5NiwxNiBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BPV0VSQ09NCQkweDBkOWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QT1dFUkNPTV9VUFMJMHgwMDAyCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QUk9ESUdFCQkweDA1YWYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QUk9ESUdFX0NPUkRMRVNTCTB4MzA2MgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNwogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUVVBTlRBCQkweDA0MDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSAkweDMwMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4JMHgzMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDA0MTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URQkweDAwMDEKIApAQCAtMzk2LDE4ICs0MTcsMjAgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fRklSU1QJMHgwMDM0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xBU1QJMHgwMDQ2CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVEFOVFVNCQkweDFmODcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NVFAJCTB4MDAwMgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOCQkweDA0MzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUJMHhjZGFiCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU5QTFVTCQkweDA0ZmMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QCTB4MDVkOAogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVEVOWAkJMHgxMTMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxCTB4MDAwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMgkweDAwMDIKLQogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUgkweDA0NGYKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSwkJMHgxYmZkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUwkweDE2ODgKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUE1BWAkJMHgwNjYzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFECTB4MDEwMwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IDU4NjJiMGYuLjc5ZDllZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqCiAgKiAgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKICAqLwpAQCAtMTkzLDEyICsxOTMsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEhJRF9VUF9CVVRUT046Ci0JCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIDB4Zik7CisJCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIEhJRF9VU0FHRSk7CiAKIAkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKIAkJY2FzZSBISURfR0RfTU9VU0U6CiAJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKLQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQljYXNlIEhJRF9HRF9KT1lTVElDSzoKKwkJCQkgICAgICBpZiAoY29kZSA8PSAweGYpCisJCQkJCSAgICAgIGNvZGUgKz0gQlROX0pPWVNUSUNLOworCQkJCSAgICAgIGVsc2UKKwkJCQkJICAgICAgY29kZSArPSBCVE5fVFJJR0dFUl9IQVBQWTsKKwkJCQkgICAgICBicmVhazsKIAkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKQEAgLTQwMCw2ICs0MDUsNyBAQAogCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOwogCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOwogCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgxOTk6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQVQpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKIAkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOwogCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCA5ZmNkM2QwLi4zNjc3YzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBMR19GRgkJCTB4MjAwCiAjZGVmaW5lIExHX0ZGMgkJCTB4NDAwCiAjZGVmaW5lIExHX1JERVNDX1JFTF9BQlMJMHg4MDAKKyNkZWZpbmUgTEdfRkYzCQkJMHgxMDAwCiAKIC8qCiAgKiBDZXJ0YWluIExvZ2l0ZWNoIGtleWJvYXJkcyBzZW5kIGluIHJlcG9ydCAjMyBrZXlzIHdoaWNoIGFyZSBmYXIKQEAgLTI2Niw3ICsyNjcsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIpKQorCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIgfCBMR19GRjMpKQogCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0ZGOwogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIGNvbm5lY3RfbWFzayk7CkBAIC0yNzksNiArMjgwLDggQEAKIAkJbGdmZl9pbml0KGhkZXYpOwogCWlmIChxdWlya3MgJiBMR19GRjIpCiAJCWxnMmZmX2luaXQoaGRldik7CisJaWYgKHF1aXJrcyAmIExHX0ZGMykKKwkJbGczZmZfaW5pdChoZGV2KTsKIAogCXJldHVybiAwOwogZXJyX2ZyZWU6CkBAIC0zMzEsNiArMzM0LDggQEAKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMiksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGMiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRjMgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VOQVZJR0FUT1IpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQ19SRUxfQUJTIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1NQQUNFVFJBVkVMTEVSKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKaW5kZXggYmYzMTU5MmUuLmNlMmFjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCkBAIC0xMyw0ICsxMywxMCBAQAogc3RhdGljIGlubGluZSBpbnQgbGcyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikgeyByZXR1cm4gLTE7IH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPR0lHOTQwX0ZGCitpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZzNmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwMjgzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZzNmZi5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoIEZsaWdodCBTeXN0ZW0gRzk0MAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgR2FyeSBTdGVpbiA8TG9yZENuaWRhcmlhbkBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKyNpbmNsdWRlICJoaWQtbGcuaCIKKworLyoKKyAqIEc5NDAgVGhlb3J5IG9mIE9wZXJhdGlvbiAoZnJvbSBleHBlcmltZW50YXRpb24pCisgKgorICogVGhlcmUgYXJlIDYzIGZpZWxkcyAob25seSAzIG9mIHRoZW0gY3VycmVudGx5IHVzZWQpCisgKiAwIC0gc2VlbXMgdG8gYmUgY29tbWFuZCBmaWVsZAorICogMSAtIDMwIGRlYWwgd2l0aCB0aGUgeCBheGlzCisgKiAzMSAtNjAgZGVhbCB3aXRoIHRoZSB5IGF4aXMKKyAqCisgKiBGaWVsZCAxIGlzIHggYXhpcyBjb25zdGFudCBmb3JjZQorICogRmllbGQgMzEgaXMgeSBheGlzIGNvbnN0YW50IGZvcmNlCisgKgorICogb3RoZXIgaW50ZXJlc3RpbmcgZmllbGRzIDEsMiwzLDQgb24geCBheGlzCisgKiAoc2FtZSBmb3IgMzEsMzIsMzMsMzQgb24geSBheGlzKQorICoKKyAqIDAgMCAxMjcgMTI3IG1ha2VzIHRoZSBqb3lzdGljayBhdXRvY2VudGVyIGhhcmQKKyAqCisgKiAxMjcgMCAxMjcgMTI3IG1ha2VzIHRoZSBqb3lzdGljayBsb29zZSBvbiB0aGUgcmlnaHQsCisgKiBidXQgc3RvcHMgYWxsIG1vdmVtbnQgbGVmdAorICoKKyAqIC0xMjcgMCAtMTI3IC0xMjcgbWFrZXMgdGhlIGpveXN0aWNrIGxvb3NlIG9uIHRoZSBsZWZ0LAorICogYnV0IHN0b3BzIGFsbCBtb3ZlbWVudCByaWdodAorICoKKyAqIDAgMCAtMTI3IC0xMjcgbWFrZXMgdGhlIGpveXN0aWNrIHJhdHRsZSB2ZXJ5IGhhcmQKKyAqCisgKiBJJ20gc3VyZSB0aGVzZSBhcmUgZWZmZWN0cyB0aGF0IEkgZG9uJ3Qga25vdyBlbm91Z2ggYWJvdXQgdGhlbQorICovCisKK3N0cnVjdCBsZzNmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGhpZF9sZzNmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpbnQgeCwgeTsKKworLyoKKyAqIE1heHVzYWdlIHNob3VsZCBhbHdheXMgYmUgNjMgKG1heGltdW0gZmllbGRzKQorICogbGlrZWx5IGEgYmV0dGVyIHdheSB0byBlbnN1cmUgdGhpcyBkYXRhIGlzIGNsZWFuCisgKi8KKwltZW1zZXQocmVwb3J0LT5maWVsZFswXS0+dmFsdWUsIDAsIHNpemVvZihfX3MzMikqcmVwb3J0LT5maWVsZFswXS0+bWF4dXNhZ2UpOworCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX0NPTlNUQU5UOgorLyoKKyAqIEFscmVhZHkgY2xhbXBlZCBpbiBmZl9tZW1sZXNzCisgKiAwIGlzIGNlbnRlciAoZGlmZmVyZW50IHRoZW4gb3RoZXIgbG9naXRlY2gpCisgKi8KKwkJeCA9IGVmZmVjdC0+dS5yYW1wLnN0YXJ0X2xldmVsOworCQl5ID0gZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsOworCisJCS8qIHNlbmQgY29tbWFuZCBieXRlICovCisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKworLyoKKyAqIFNpZ24gYmFja3dhcmRzIGZyb20gb3RoZXIgRm9yY2UzZCBwcm8KKyAqIHdoaWNoIGdldCByZWNhc3QgaGVyZSBpbiB0d28ncyBjb21wbGVtZW50IDggYml0cworICovCisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gKHVuc2lnbmVkIGNoYXIpKC14KTsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzFdID0gKHVuc2lnbmVkIGNoYXIpKC15KTsKKworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBoaWRfbGczZmZfc2V0X2F1dG9jZW50ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgbWFnbml0dWRlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisKKy8qCisgKiBBdXRvIENlbnRlcmluZyBwcm9iZWQgZnJvbSBkZXZpY2UKKyAqIE5PVEU6IGRlYWRtYW4ncyBzd2l0Y2ggb24gRzk0MCBtdXN0IGJlIGNvdmVyZWQKKyAqIGZvciBlZmZlY3RzIHRvIHdvcmsKKyAqLworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4N0Y7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzFdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMzXSA9IDB4N0Y7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzRdID0gMHg3RjsKKworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7Cit9CisKKworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZjNfam95c3RpY2tfYWNbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwlGRl9BVVRPQ0VOVEVSLAorCS0xCit9OworCitpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9lbnRyeShoaWQtPmlucHV0cy5uZXh0LCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwljb25zdCBzaWduZWQgc2hvcnQgKmZmX2JpdHMgPSBmZjNfam95c3RpY2tfYWM7CisJaW50IGVycm9yOworCWludCBpOworCisJLyogRmluZCB0aGUgcmVwb3J0IHRvIHVzZSAqLworCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgeworCQllcnJfaGlkKCJObyBvdXRwdXQgcmVwb3J0IGZvdW5kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KKwlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJaWYgKCFyZXBvcnQpIHsKKwkJZXJyX2hpZCgiTlVMTCBvdXRwdXQgcmVwb3J0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CisJaWYgKCFmaWVsZCkgeworCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBBc3N1bWUgc2luZ2xlIGZpeGVkIGRldmljZSBHOTQwICovCisJZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCisJCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnM2ZmX3BsYXkpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKHRlc3RfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpKQorCQlkZXYtPmZmLT5zZXRfYXV0b2NlbnRlciA9IGhpZF9sZzNmZl9zZXRfYXV0b2NlbnRlcjsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgYnkgIgorCQkJIkdhcnkgU3RlaW4gPExvcmRDbmlkYXJpYW5AZ21haWwuY29tPlxuIik7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCmluZGV4IDk4N2FiZWIuLjYxMTQyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwpAQCAtNjcsNiArNjcsNyBAQAogCXsgMHgwNDZkLCAweGMyMTksIGZmX3J1bWJsZSB9LAogCXsgMHgwNDZkLCAweGMyODMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI4NiwgZmZfam95c3RpY2tfYWMgfSwKKwl7IDB4MDQ2ZCwgMHhjMjg3LCBmZl9qb3lzdGlja19hYyB9LAogCXsgMHgwNDZkLCAweGMyOTMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI5NCwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzYTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiAgIEFwcGxlICJNYWdpYyIgV2lyZWxlc3MgTW91c2UgZHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTAgTWljaGFlbCBQb29sZSA8bWRwb29sZUB0cm9pbHVzLm9yZz4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBib29sIGVtdWxhdGVfM2J1dHRvbiA9IHRydWU7Cittb2R1bGVfcGFyYW0oZW11bGF0ZV8zYnV0dG9uLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW11bGF0ZV8zYnV0dG9uLCAiRW11bGF0ZSBhIG1pZGRsZSBidXR0b24iKTsKKworc3RhdGljIGludCBtaWRkbGVfYnV0dG9uX3N0YXJ0ID0gLTM1MDsKK3N0YXRpYyBpbnQgbWlkZGxlX2J1dHRvbl9zdG9wID0gKzM1MDsKKworc3RhdGljIGJvb2wgZW11bGF0ZV9zY3JvbGxfd2hlZWwgPSB0cnVlOworbW9kdWxlX3BhcmFtKGVtdWxhdGVfc2Nyb2xsX3doZWVsLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW11bGF0ZV9zY3JvbGxfd2hlZWwsICJFbXVsYXRlIGEgc2Nyb2xsIHdoZWVsIik7CisKK3N0YXRpYyBib29sIHJlcG9ydF90b3VjaGVzID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShyZXBvcnRfdG91Y2hlcywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlcG9ydF90b3VjaGVzLCAiRW1pdCB0b3VjaCByZWNvcmRzIChvdGhlcndpc2UsIG9ubHkgdXNlIHRoZW0gZm9yIGVtdWxhdGlvbikiKTsKKworc3RhdGljIGJvb2wgcmVwb3J0X3VuZGVjaXBoZXJlZDsKK21vZHVsZV9wYXJhbShyZXBvcnRfdW5kZWNpcGhlcmVkLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVwb3J0X3VuZGVjaXBoZXJlZCwgIlJlcG9ydCB1bmRlY2lwaGVyZWQgbXVsdGktdG91Y2ggc3RhdGUgZmllbGQgdXNpbmcgYSBNU0NfUkFXIGV2ZW50Iik7CisKKyNkZWZpbmUgVE9VQ0hfUkVQT1JUX0lEICAgMHgyOQorLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vdCBwcmVjaXNlLCBidXQgdGhleSdyZSBjbG9zZSBlbm91Z2guICAoQml0cworICogMHgwMyBzZWVtIHRvIGluZGljYXRlIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIHRvdWNoLCBiaXRzIDB4NzAgc2VlbQorICogdG8gYmUgc29tZSBraW5kIG9mIGJpdCBtYXNrIC0tIDB4MjAgbWF5IGJlIGEgbmVhci1maWVsZCByZWFkaW5nLAorICogYW5kIDB4NDAgaXMgYWN0dWFsIGNvbnRhY3QsIGFuZCAweDEwIG1heSBiZSBhIHN0YXJ0L3N0b3Agb3IgY2hhbmdlCisgKiBpbmRpY2F0aW9uLikKKyAqLworI2RlZmluZSBUT1VDSF9TVEFURV9NQVNLICAweGYwCisjZGVmaW5lIFRPVUNIX1NUQVRFX05PTkUgIDB4MDAKKyNkZWZpbmUgVE9VQ0hfU1RBVEVfU1RBUlQgMHgzMAorI2RlZmluZSBUT1VDSF9TVEFURV9EUkFHICAweDQwCisKKy8qKgorICogc3RydWN0IG1hZ2ljbW91c2Vfc2MgLSBUcmFja3MgTWFnaWMgTW91c2Utc3BlY2lmaWMgZGF0YS4KKyAqIEBpbnB1dDogSW5wdXQgZGV2aWNlIHRocm91Z2ggd2hpY2ggd2UgcmVwb3J0IGV2ZW50cy4KKyAqIEBxdWlya3M6IEN1cnJlbnRseSB1bnVzZWQuCisgKiBAbGFzdF90aW1lc3RhbXA6IFRpbWVzdGFtcCBmcm9tIG1vc3QgcmVjZW50ICgxOC1iaXQpIHRvdWNoIHJlcG9ydAorICogICAgICh1bml0cyBvZiBtaWxsaXNlY29uZHMgb3ZlciBzaG9ydCB3aW5kb3dzLCBidXQgc2VlbXMgdG8KKyAqICAgICBpbmNyZWFzZSBmYXN0ZXIgd2hlbiB0aGVyZSBhcmUgbm8gdG91Y2hlcykuCisgKiBAZGVsdGFfdGltZTogMTgtYml0IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG1vc3QgcmVjZW50IHRvdWNoCisgKiAgICAgcmVwb3J0cyBmcm9tIHRoZSBtb3VzZS4KKyAqIEBudG91Y2hlczogTnVtYmVyIG9mIHRvdWNoZXMgaW4gbW9zdCByZWNlbnQgdG91Y2ggcmVwb3J0LgorICogQHNjcm9sbF9hY2NlbDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNjcm9sbCBtb3Rpb25zLgorICogQHNjcm9sbF9qaWZmaWVzOiBUaW1lIG9mIGxhc3Qgc2Nyb2xsIG1vdGlvbi4KKyAqIEB0b3VjaGVzOiBNb3N0IHJlY2VudCBkYXRhIGZvciBhIHRvdWNoLCBpbmRleGVkIGJ5IHRyYWNraW5nIElELgorICogQHRyYWNraW5nX2lkczogTWFwcGluZyBvZiBjdXJyZW50IHRvdWNoIGlucHV0IGRhdGEgdG8gQHRvdWNoZXMuCisgKi8KK3N0cnVjdCBtYWdpY21vdXNlX3NjIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKworCWludCBsYXN0X3RpbWVzdGFtcDsKKwlpbnQgZGVsdGFfdGltZTsKKwlpbnQgbnRvdWNoZXM7CisJaW50IHNjcm9sbF9hY2NlbDsKKwl1bnNpZ25lZCBsb25nIHNjcm9sbF9qaWZmaWVzOworCisJc3RydWN0IHsKKwkJc2hvcnQgeDsKKwkJc2hvcnQgeTsKKwkJc2hvcnQgc2Nyb2xsX3k7CisJCXU4IHNpemU7CisJfSB0b3VjaGVzWzE2XTsKKwlpbnQgdHJhY2tpbmdfaWRzWzE2XTsKK307CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9maXJtX3RvdWNoKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MpCit7CisJaW50IHRvdWNoID0gLTE7CisJaW50IGlpOworCisJLyogSWYgdGhlcmUgaXMgb25seSBvbmUgImZpcm0iIHRvdWNoLCBzZXQgdG91Y2ggdG8gaXRzCisJICogdHJhY2tpbmcgSUQuCisJICovCisJZm9yIChpaSA9IDA7IGlpIDwgbXNjLT5udG91Y2hlczsgaWkrKykgeworCQlpbnQgaWR4ID0gbXNjLT50cmFja2luZ19pZHNbaWldOworCQlpZiAobXNjLT50b3VjaGVzW2lkeF0uc2l6ZSA8IDgpIHsKKwkJCS8qIElnbm9yZSB0aGlzIHRvdWNoLiAqLworCQl9IGVsc2UgaWYgKHRvdWNoID49IDApIHsKKwkJCXRvdWNoID0gLTE7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXRvdWNoID0gaWR4OworCQl9CisJfQorCisJcmV0dXJuIHRvdWNoOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2VtaXRfYnV0dG9ucyhzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjLCBpbnQgc3RhdGUpCit7CisJaW50IGxhc3Rfc3RhdGUgPSB0ZXN0X2JpdChCVE5fTEVGVCwgbXNjLT5pbnB1dC0+a2V5KSA8PCAwIHwKKwkJdGVzdF9iaXQoQlROX1JJR0hULCBtc2MtPmlucHV0LT5rZXkpIDw8IDEgfAorCQl0ZXN0X2JpdChCVE5fTUlERExFLCBtc2MtPmlucHV0LT5rZXkpIDw8IDI7CisKKwlpZiAoZW11bGF0ZV8zYnV0dG9uKSB7CisJCWludCBpZDsKKworCQkvKiBJZiBzb21lIGJ1dHRvbiB3YXMgcHJlc3NlZCBiZWZvcmUsIGtlZXAgaXQgaGVsZAorCQkgKiBkb3duLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSdzIGV4YWN0bHkgb25lIGZpcm0KKwkJICogdG91Y2gsIHVzZSB0aGF0IHRvIG92ZXJyaWRlIHRoZSBtb3VzZSdzIGd1ZXNzLgorCQkgKi8KKwkJaWYgKHN0YXRlID09IDApIHsKKwkJCS8qIFRoZSBidXR0b24gd2FzIHJlbGVhc2VkLiAqLworCQl9IGVsc2UgaWYgKGxhc3Rfc3RhdGUgIT0gMCkgeworCQkJc3RhdGUgPSBsYXN0X3N0YXRlOworCQl9IGVsc2UgaWYgKChpZCA9IG1hZ2ljbW91c2VfZmlybV90b3VjaChtc2MpKSA+PSAwKSB7CisJCQlpbnQgeCA9IG1zYy0+dG91Y2hlc1tpZF0ueDsKKwkJCWlmICh4IDwgbWlkZGxlX2J1dHRvbl9zdGFydCkKKwkJCQlzdGF0ZSA9IDE7CisJCQllbHNlIGlmICh4ID4gbWlkZGxlX2J1dHRvbl9zdG9wKQorCQkJCXN0YXRlID0gMjsKKwkJCWVsc2UKKwkJCQlzdGF0ZSA9IDQ7CisJCX0gLyogZWxzZTogd2Uga2VlcCB0aGUgbW91c2UncyBndWVzcyAqLworCisJCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX01JRERMRSwgc3RhdGUgJiA0KTsKKwl9CisKKwlpbnB1dF9yZXBvcnRfa2V5KG1zYy0+aW5wdXQsIEJUTl9MRUZULCBzdGF0ZSAmIDEpOworCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX1JJR0hULCBzdGF0ZSAmIDIpOworCisJaWYgKHN0YXRlICE9IGxhc3Rfc3RhdGUpCisJCW1zYy0+c2Nyb2xsX2FjY2VsID0gMDsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9lbWl0X3RvdWNoKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MsIGludCByYXdfaWQsIHU4ICp0ZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IG1zYy0+aW5wdXQ7CisJX19zMzIgeF95ID0gdGRhdGFbMF0gPDwgOCB8IHRkYXRhWzFdIDw8IDE2IHwgdGRhdGFbMl0gPDwgMjQ7CisJaW50IG1pc2MgPSB0ZGF0YVs1XSB8IHRkYXRhWzZdIDw8IDg7CisJaW50IGlkID0gKG1pc2MgPj4gNikgJiAxNTsKKwlpbnQgeCA9IHhfeSA8PCAxMiA+PiAyMDsKKwlpbnQgeSA9IC0oeF95ID4+IDIwKTsKKworCS8qIFN0b3JlIHRyYWNraW5nIElEIGFuZCBvdGhlciBmaWVsZHMuICovCisJbXNjLT50cmFja2luZ19pZHNbcmF3X2lkXSA9IGlkOworCW1zYy0+dG91Y2hlc1tpZF0ueCA9IHg7CisJbXNjLT50b3VjaGVzW2lkXS55ID0geTsKKwltc2MtPnRvdWNoZXNbaWRdLnNpemUgPSBtaXNjICYgNjM7CisKKwkvKiBJZiByZXF1ZXN0ZWQsIGVtdWxhdGUgYSBzY3JvbGwgd2hlZWwgYnkgZGV0ZWN0aW5nIHNtYWxsCisJICogdmVydGljYWwgdG91Y2ggbW90aW9ucyBhbG9uZyB0aGUgbWlkZGxlIG9mIHRoZSBtb3VzZS4KKwkgKi8KKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwgJiYKKwkgICAgbWlkZGxlX2J1dHRvbl9zdGFydCA8IHggJiYgeCA8IG1pZGRsZV9idXR0b25fc3RvcCkgeworCQlzdGF0aWMgY29uc3QgaW50IGFjY2VsX3Byb2ZpbGVbXSA9IHsKKwkJCTI1NiwgMjI4LCAxOTIsIDE2MCwgMTI4LCA5NiwgNjQsIDMyLAorCQl9OworCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJCWludCBzdGVwID0gbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSAtIHk7CisKKwkJLyogUmVzZXQgYWNjZWxlcmF0aW9uIGFmdGVyIGhhbGYgYSBzZWNvbmQuICovCisJCWlmICh0aW1lX2FmdGVyKG5vdywgbXNjLT5zY3JvbGxfamlmZmllcyArIEhaIC8gMikpCisJCQltc2MtPnNjcm9sbF9hY2NlbCA9IDA7CisKKwkJLyogQ2FsY3VsYXRlIGFuZCBhcHBseSB0aGUgc2Nyb2xsIG1vdGlvbi4gKi8KKwkJc3dpdGNoICh0ZGF0YVs3XSAmIFRPVUNIX1NUQVRFX01BU0spIHsKKwkJY2FzZSBUT1VDSF9TVEFURV9TVEFSVDoKKwkJCW1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgPSB5OworCQkJbXNjLT5zY3JvbGxfYWNjZWwgPSBtaW5fdChpbnQsIG1zYy0+c2Nyb2xsX2FjY2VsICsgMSwKKwkJCQkJCUFSUkFZX1NJWkUoYWNjZWxfcHJvZmlsZSkgLSAxKTsKKwkJCWJyZWFrOworCQljYXNlIFRPVUNIX1NUQVRFX0RSQUc6CisJCQlzdGVwID0gc3RlcCAvIGFjY2VsX3Byb2ZpbGVbbXNjLT5zY3JvbGxfYWNjZWxdOworCQkJaWYgKHN0ZXAgIT0gMCkgeworCQkJCW1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgPSB5OworCQkJCW1zYy0+c2Nyb2xsX2ppZmZpZXMgPSBub3c7CisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1dIRUVMLCBzdGVwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogR2VuZXJhdGUgdGhlIGlucHV0IGV2ZW50cyBmb3IgdGhpcyB0b3VjaC4gKi8KKwlpZiAocmVwb3J0X3RvdWNoZXMpIHsKKwkJaW50IG9yaWVudGF0aW9uID0gKG1pc2MgPj4gMTApIC0gMzI7CisKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RSQUNLSU5HX0lELCBpZCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgdGRhdGFbM10pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUlOT1IsIHRkYXRhWzRdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLCBvcmllbnRhdGlvbik7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIHkpOworCisJCWlmIChyZXBvcnRfdW5kZWNpcGhlcmVkKQorCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1JBVywgdGRhdGFbN10pOworCisJCWlucHV0X210X3N5bmMoaW5wdXQpOworCX0KK30KKworc3RhdGljIGludCBtYWdpY21vdXNlX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBtc2MtPmlucHV0OworCWludCB4LCB5LCB0cywgaWksIGNsaWNrczsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMHgxMDoKKwkJaWYgKHNpemUgIT0gNikKKwkJCXJldHVybiAwOworCQl4ID0gKF9fczE2KShkYXRhWzJdIHwgZGF0YVszXSA8PCA4KTsKKwkJeSA9IChfX3MxNikoZGF0YVs0XSB8IGRhdGFbNV0gPDwgOCk7CisJCWNsaWNrcyA9IGRhdGFbMV07CisJCWJyZWFrOworCWNhc2UgVE9VQ0hfUkVQT1JUX0lEOgorCQkvKiBFeHBlY3Qgc2l4IGJ5dGVzIG9mIHByZWZpeCwgYW5kIE4qOCBieXRlcyBvZiB0b3VjaCBkYXRhLiAqLworCQlpZiAoc2l6ZSA8IDYgfHwgKChzaXplIC0gNikgJSA4KSAhPSAwKQorCQkJcmV0dXJuIDA7CisJCXRzID0gZGF0YVszXSA+PiA2IHwgZGF0YVs0XSA8PCAyIHwgZGF0YVs1XSA8PCAxMDsKKwkJbXNjLT5kZWx0YV90aW1lID0gKHRzIC0gbXNjLT5sYXN0X3RpbWVzdGFtcCkgJiAweDNmZmZmOworCQltc2MtPmxhc3RfdGltZXN0YW1wID0gdHM7CisJCW1zYy0+bnRvdWNoZXMgPSAoc2l6ZSAtIDYpIC8gODsKKwkJZm9yIChpaSA9IDA7IGlpIDwgbXNjLT5udG91Y2hlczsgaWkrKykKKwkJCW1hZ2ljbW91c2VfZW1pdF90b3VjaChtc2MsIGlpLCBkYXRhICsgaWkgKiA4ICsgNik7CisJCS8qIFdoZW4gZW11bGF0aW5nIHRocmVlLWJ1dHRvbiBtb2RlLCBpdCBpcyBpbXBvcnRhbnQKKwkJICogdG8gaGF2ZSB0aGUgY3VycmVudCB0b3VjaCBpbmZvcm1hdGlvbiBiZWZvcmUKKwkJICogZ2VuZXJhdGluZyBhIGNsaWNrIGV2ZW50LgorCQkgKi8KKwkJeCA9IChzaWduZWQgY2hhcilkYXRhWzFdOworCQl5ID0gKHNpZ25lZCBjaGFyKWRhdGFbMl07CisJCWNsaWNrcyA9IGRhdGFbM107CisJCWJyZWFrOworCWNhc2UgMHgyMDogLyogVGhlb3JldGljYWxseSBiYXR0ZXJ5IHN0YXR1cyAoMC0xMDApLCBidXQgSSBoYXZlCisJCSAgICAqIG5ldmVyIHNlZW4gaXQgLS0gbWF5YmUgaXQgaXMgb25seSB1cG9uIHJlcXVlc3QuCisJCSAgICAqLworCWNhc2UgMHg2MDogLyogVW5rbm93biwgbWF5YmUgbGFzZXIgb24vb2ZmLiAqLworCWNhc2UgMHg2MTogLyogTGFzZXIgcmVmbGVjdGlvbiBzdGF0dXMgY2hhbmdlLgorCQkgICAgKiBkYXRhWzFdOiAwID0gc3BvdHRlZCwgMSA9IGxvc3QKKwkJICAgICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJbWFnaWNtb3VzZV9lbWl0X2J1dHRvbnMobXNjLCBjbGlja3MgJiAzKTsKKwlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWCwgeCk7CisJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1ksIHkpOworCWlucHV0X3N5bmMoaW5wdXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gaGlkLT5sbF9kcml2ZXItPm9wZW4oaGlkKTsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwloaWQtPmxsX2RyaXZlci0+Y2xvc2UoaGlkKTsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9zZXR1cF9pbnB1dChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGhkZXYpOworCWlucHV0LT5ldmVudCA9IGhkZXYtPmxsX2RyaXZlci0+aGlkaW5wdXRfaW5wdXRfZXZlbnQ7CisJaW5wdXQtPm9wZW4gPSBtYWdpY21vdXNlX2lucHV0X29wZW47CisJaW5wdXQtPmNsb3NlID0gbWFnaWNtb3VzZV9pbnB1dF9jbG9zZTsKKworCWlucHV0LT5uYW1lID0gaGRldi0+bmFtZTsKKwlpbnB1dC0+cGh5cyA9IGhkZXYtPnBoeXM7CisJaW5wdXQtPnVuaXEgPSBoZGV2LT51bmlxOworCWlucHV0LT5pZC5idXN0eXBlID0gaGRldi0+YnVzOworCWlucHV0LT5pZC52ZW5kb3IgPSBoZGV2LT52ZW5kb3I7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSBoZGV2LT5wcm9kdWN0OworCWlucHV0LT5pZC52ZXJzaW9uID0gaGRldi0+dmVyc2lvbjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9IGhkZXYtPmRldi5wYXJlbnQ7CisKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fTEVGVCwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9SSUdIVCwgaW5wdXQtPmtleWJpdCk7CisJaWYgKGVtdWxhdGVfM2J1dHRvbikKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGlucHV0LT5rZXliaXQpOworCisJX19zZXRfYml0KEVWX1JFTCwgaW5wdXQtPmV2Yml0KTsKKwlfX3NldF9iaXQoUkVMX1gsIGlucHV0LT5yZWxiaXQpOworCV9fc2V0X2JpdChSRUxfWSwgaW5wdXQtPnJlbGJpdCk7CisJaWYgKGVtdWxhdGVfc2Nyb2xsX3doZWVsKQorCQlfX3NldF9iaXQoUkVMX1dIRUVMLCBpbnB1dC0+cmVsYml0KTsKKworCWlmIChyZXBvcnRfdG91Y2hlcykgeworCQlfX3NldF9iaXQoRVZfQUJTLCBpbnB1dC0+ZXZiaXQpOworCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIDAsIDE1LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgMCwgMjU1LCA0LCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgMCwgMjU1LCA0LCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgLTMyLCAzMSwgMSwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgLTExMDAsIDEzNTgsCisJCQkJNCwgMCk7CisJCS8qIE5vdGU6IFRvdWNoIFkgcG9zaXRpb24gZnJvbSB0aGUgZGV2aWNlIGlzIGludmVydGVkIHJlbGF0aXZlCisJCSAqIHRvIGhvdyBwb2ludGVyIG1vdGlvbiBpcyByZXBvcnRlZCAoYW5kIHJlbGF0aXZlIHRvIGhvdyBVU0IKKwkJICogSElEIHJlY29tbWVuZHMgdGhlIGNvb3JkaW5hdGVzIHdvcmspLiAgVGhpcyBkcml2ZXIga2VlcHMKKwkJICogdGhlIG9yaWdpbiBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgYW5kIGp1c3QgdXNlcyB0aGUgYWRkaXRpdmUKKwkJICogaW52ZXJzZSBvZiB0aGUgcmVwb3J0ZWQgWS4KKwkJICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgLTE1ODksIDIwNDcsCisJCQkJNCwgMCk7CisJfQorCisJaWYgKHJlcG9ydF91bmRlY2lwaGVyZWQpIHsKKwkJX19zZXRfYml0KEVWX01TQywgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KE1TQ19SQVcsIGlucHV0LT5tc2NiaXQpOworCX0KK30KKworc3RhdGljIGludCBtYWdpY21vdXNlX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlfX3U4IGZlYXR1cmVfMVtdID0geyAweGQ3LCAweDAxIH07CisJX191OCBmZWF0dXJlXzJbXSA9IHsgMHhmOCwgMHgwMSwgMHgzMiB9OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBtYWdpY21vdXNlX3NjICptc2M7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgcmV0OworCisJbXNjID0ga3phbGxvYyhzaXplb2YoKm1zYyksIEdGUF9LRVJORUwpOworCWlmIChtc2MgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBtYWdpY21vdXNlIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltc2MtPnF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgbXNjKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgIm1hZ2ljbW91c2UgaGlkIHBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAibWFnaWNtb3VzZSBodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJlcG9ydCA9IGhpZF9yZWdpc3Rlcl9yZXBvcnQoaGRldiwgSElEX0lOUFVUX1JFUE9SVCwgVE9VQ0hfUkVQT1JUX0lEKTsKKwlpZiAoIXJlcG9ydCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdG91Y2ggcmVwb3J0XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJcmVwb3J0LT5zaXplID0gNjsKKworCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBmZWF0dXJlXzEsIHNpemVvZihmZWF0dXJlXzEpLAorCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwlpZiAocmV0ICE9IHNpemVvZihmZWF0dXJlXzEpKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IHRvdWNoIGRhdGEgKDE6JWQpXG4iLAorCQkJCXJldCk7CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBmZWF0dXJlXzIsCisJCQlzaXplb2YoZmVhdHVyZV8yKSwgSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwlpZiAocmV0ICE9IHNpemVvZihmZWF0dXJlXzIpKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IHRvdWNoIGRhdGEgKDI6JWQpXG4iLAorCQkJCXJldCk7CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCisJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGlucHV0IGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCW1hZ2ljbW91c2Vfc2V0dXBfaW5wdXQoaW5wdXQsIGhkZXYpOworCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImlucHV0IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfaW5wdXQ7CisJfQorCW1zYy0+aW5wdXQgPSBpbnB1dDsKKworCXJldHVybiAwOworZXJyX2lucHV0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKK2Vycl9zdG9wX2h3OgorCWhpZF9od19zdG9wKGhkZXYpOworZXJyX2ZyZWU6CisJa2ZyZWUobXNjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbWFnaWNfbWljZVtdID0geworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFKSwKKwkJLmRyaXZlcl9kYXRhID0gMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtYWdpY19taWNlKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1hZ2ljbW91c2VfZHJpdmVyID0geworCS5uYW1lID0gIm1hZ2ljbW91c2UiLAorCS5pZF90YWJsZSA9IG1hZ2ljX21pY2UsCisJLnByb2JlID0gbWFnaWNtb3VzZV9wcm9iZSwKKwkucmVtb3ZlID0gbWFnaWNtb3VzZV9yZW1vdmUsCisJLnJhd19ldmVudCA9IG1hZ2ljbW91c2VfcmF3X2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWFnaWNtb3VzZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1hZ2ljbW91c2VfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlZ2lzdGVyIG1hZ2ljbW91c2UgZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYWdpY21vdXNlX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1hZ2ljbW91c2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWFnaWNtb3VzZV9pbml0KTsKK21vZHVsZV9leGl0KG1hZ2ljbW91c2VfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3MTgxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciB0aGUgbXVsdGl0b3VjaCBwYW5lbCBvbiB0aGUgQVNVUyBFZWVQQyBUOTFNVAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICogIENvcHlyaWdodCAoYykgMjAxMCBUZWVtdSBUdW9taW5lbiA8dGVlbXUudHVvbWluZW5AY3liZXJjb20uY29tPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3NBcnQgZHVhbC10b3VjaCBwYW5lbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3QgbW9zYXJ0X2RhdGEgeworCV9fdTE2IHgsIHk7CisJX191OCBpZDsKKwlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCisJYm9vbCBmaXJzdDsJCS8qIGlzIHRoaXMgdGhlIGZpcnN0IGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHlfbm93OwkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBwcmV2aW91c2x5PyAqLworfTsKKworc3RhdGljIGludCBtb3NhcnRfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CisJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgorCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQljYXNlIEhJRF9ER19XSURUSDoKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJcmV0dXJuIC0xOworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogaWdub3JlIEhJRCBmZWF0dXJlcyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9zYXJ0X2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG1vc2FydF9maWx0ZXJfZXZlbnQoc3RydWN0IG1vc2FydF9kYXRhICp0ZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJdGQtPmZpcnN0ID0gIXRkLT5maXJzdDsgLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisKKwlpZiAoIXRkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIG5vIGZpbmdlciBpbiB0aGlzIGZyYW1lIGlzIHZhbGlkCisJCSAqIGFuZCB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLyAKKwkJaWYgKCF0ZC0+Zmlyc3QgJiYgIXRkLT5hY3Rpdml0eV9ub3cgJiYgdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgdGQtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCB0ZC0+eSk7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgZmlyc3QgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lLi4uICovCisJaWYgKCF0ZC0+YWN0aXZpdHlfbm93KSB7CisJCS8qIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhY3Rpdml0eSwgZW1pdCB0b3VjaCBldmVudCAqLworCQlpZiAoIXRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXRkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJdGQtPmFjdGl2aXR5X25vdyA9IHRydWU7CisJCS8qIGFuZCBpbiBhbnkgY2FzZSB0aGlzIGlzIG91ciBwcmVmZXJyZWQgZmluZ2VyICovCisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCB0ZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCB0ZC0+eSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgbW9zYXJ0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCXRkLT52YWxpZCA9ICEhdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXRkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXRkLT55ID0gdmFsdWU7CisJCQltb3NhcnRfZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJdGQtPmlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQkJLyogdG91Y2ggZW11bGF0aW9uOiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZnJhbWUgKi8KKwkJCXRkLT5maXJzdCA9IGZhbHNlOworCQkJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBmYWxsYmFjayB0byB0aGUgZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1vc2FydF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IG1vc2FydF9kYXRhICp0ZDsKKworCisJdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zYXJ0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBNb3NBcnQgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJdGQtPmZpcnN0ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkKTsKKworCS8qIGN1cnJlbnRseSwgaXQncyBiZXR0ZXIgdG8gaGF2ZSBvbmUgZXZkZXYgZGV2aWNlIG9ubHkgKi8KKyNpZiAwCisJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19NVUxUSV9JTlBVVDsKKyNlbmRpZgorCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCA9PSAwKSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlID0gaGRldi0+cmVwb3J0X2VudW0KKwkJCQkJCSsgSElEX0ZFQVRVUkVfUkVQT1JUOworCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqciA9IHJlLT5yZXBvcnRfaWRfaGFzaFs3XTsKKworCQlyLT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDAyOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByLCBVU0JfRElSX09VVCk7CisJfSBlbHNlIAorCQlrZnJlZSh0ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtb3NhcnRfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbW9zYXJ0X2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtb3NhcnRfZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIG1vc2FydF9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBtb3NhcnRfZHJpdmVyID0geworCS5uYW1lID0gIm1vc2FydCIsCisJLmlkX3RhYmxlID0gbW9zYXJ0X2RldmljZXMsCisJLnByb2JlID0gbW9zYXJ0X3Byb2JlLAorCS5yZW1vdmUgPSBtb3NhcnRfcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gbW9zYXJ0X2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IG1vc2FydF9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gbW9zYXJ0X2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IG1vc2FydF9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1vc2FydF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW9zYXJ0X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtb3NhcnRfaW5pdCk7Cittb2R1bGVfZXhpdChtb3NhcnRfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggNDljZTY5ZC4uMzIzNGM3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCkBAIC0yNSwxMSArMjUsMTYgQEAKIAkJCQkJRVZfS0VZLCAoYykpCiAKIHN0cnVjdCBudHJpZ19kYXRhIHsKLQlfX3MzMiB4LCB5LCBpZCwgdywgaDsKLQljaGFyIHJlYWRpbmdfYV9wb2ludCwgZm91bmRfY29udGFjdF9pZDsKLQljaGFyIHBlbl9hY3RpdmU7Ci0JY2hhciBmaW5nZXJfYWN0aXZlOwotCWNoYXIgaW52ZXJ0ZWQ7CisJLyogSW5jb21pbmcgcmF3IHZhbHVlcyBmb3IgYSBzaW5nbGUgY29udGFjdCAqLworCV9fdTE2IHgsIHksIHcsIGg7CisJX191MTYgaWQ7CisJX191OCBjb25maWRlbmNlOworCisJYm9vbCByZWFkaW5nX210OworCV9fdTggZmlyc3RfY29udGFjdF9jb25maWRlbmNlOworCisJX191OCBtdF9mb290ZXJbNF07CisJX191OCBtdF9mb290X2NvdW50OwogfTsKIAogLyoKQEAgLTQyLDggKzQ3LDExIEBACiAJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKIAkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCiB7Ci0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKwkvKiBObyBzcGVjaWFsIG1hcHBpbmdzIG5lZWRlZCBmb3IgdGhlIHBlbiBhbmQgc2luZ2xlIHRvdWNoICovCisJaWYgKGZpZWxkLT5waHlzaWNhbCkKKwkJcmV0dXJuIDA7CiAKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgewogCWNhc2UgSElEX1VQX0dFTkRFU0s6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9HRF9YOgpAQCAtNjYsMTggKzc0LDEyIEBACiAJY2FzZSBISURfVVBfRElHSVRJWkVSOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKIAkJLyogd2UgZG8gbm90IHdhbnQgdG8gbWFwIHRoZXNlIGZvciBub3cgKi8KLQkJY2FzZSBISURfREdfQ09OVEFDVElEOiAvKiB2YWx1ZSBpcyB1c2VsZXNzICovCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDogLyogTm90IHRydXN0d29ydGh5LCBzcXVlbGNoIGZvciBub3cgKi8KIAkJY2FzZSBISURfREdfSU5QVVRNT0RFOgogCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKLQkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgogCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgogCQkJcmV0dXJuIC0xOwogCi0JCS8qIG9yaWdpbmFsIG1hcHBpbmcgYnkgUmFmaSBSdWJpbiAqLwotCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgotCQkJbnRfbWFwX2tleV9jbGVhcihCVE5fVE9PTF9ET1VCTEVUQVApOwotCQkJcmV0dXJuIDE7Ci0KIAkJLyogd2lkdGgvaGVpZ2h0IG1hcHBlZCBvbiBUb3VjaE1ham9yL1RvdWNoTWlub3IvT3JpZW50YXRpb24gKi8KIAkJY2FzZSBISURfREdfV0lEVEg6CiAJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCkBAIC0xMDQsNiArMTA2LDEwIEBACiAJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKIAkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCiB7CisJLyogTm8gc3BlY2lhbCBtYXBwaW5ncyBuZWVkZWQgZm9yIHRoZSBwZW4gYW5kIHNpbmdsZSB0b3VjaCAqLworCWlmIChmaWVsZC0+cGh5c2ljYWwpCisJCXJldHVybiAwOworCiAJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9SRUwKIAkJCXx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKIAkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKQEAgLTEyMywzMSArMTI5LDMwIEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OwogCXN0cnVjdCBudHJpZ19kYXRhICpuZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwogCisJLyogTm8gc3BlY2lhbCBoYW5kbGluZyBuZWVkZWQgZm9yIHRoZSBwZW4gKi8KKwlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9ER19QRU4pCisJCXJldHVybiAwOworCiAgICAgICAgIGlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgewogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQotCQljYXNlIEhJRF9ER19JTlJBTkdFOgotCQkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiAmIDB4MykKLQkJCQluZC0+cGVuX2FjdGl2ZSA9ICh2YWx1ZSAhPSAwKTsKLQkJCWVsc2UKLQkJCQluZC0+ZmluZ2VyX2FjdGl2ZSA9ICh2YWx1ZSAhPSAwKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0RHX0lOVkVSVDoKLQkJCW5kLT5pbnZlcnRlZCA9IHZhbHVlOwotCQkJcmV0dXJuIDA7Ci0KKwkJY2FzZSAweGZmMDAwMDAxOgorCQkJLyogVGFnIGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGEgbXVsdGl0b3VjaCBncm91cCAqLworCQkJbmQtPnJlYWRpbmdfbXQgPSAxOworCQkJbmQtPmZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCW5kLT5jb25maWRlbmNlID0gdmFsdWU7CisJCQlicmVhazsKIAkJY2FzZSBISURfR0RfWDoKIAkJCW5kLT54ID0gdmFsdWU7Ci0JCQluZC0+cmVhZGluZ19hX3BvaW50ID0gMTsKKwkJCS8qIENsZWFyIHRoZSBjb250YWN0IGZvb3RlciAqLworCQkJbmQtPm10X2Zvb3RfY291bnQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0dEX1k6CiAJCQluZC0+eSA9IHZhbHVlOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKIAkJCW5kLT5pZCA9IHZhbHVlOwotCQkJLyogd2UgcmVjZWl2ZSB0aGlzIG9ubHkgd2hlbiBpbiBtdWx0aXRvdWNoIG1vZGUgKi8KLQkJCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19XSURUSDoKIAkJCW5kLT53ID0gdmFsdWU7CkBAIC0xNTksMzUgKzE2NCwxMyBAQAogCQkJICogcmVwb3J0IHJlY2VpdmVkIGluIGEgZmluZ2VyIGV2ZW50LiBXZSB3YW50CiAJCQkgKiB0byBlbWl0IGEgbm9ybWFsIChYLCBZKSBwb3NpdGlvbgogCQkJICovCi0JCQlpZiAoIW5kLT5mb3VuZF9jb250YWN0X2lkKSB7Ci0JCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMCk7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7Ci0JCQkJfQorCQkJaWYgKCFuZC0+cmVhZGluZ19tdCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwKKwkJCQkJCSAobmQtPmNvbmZpZGVuY2UgIT0gMCkpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKLQkJCS8qCi0JCQkgKiB3aGVuIGluIHNpbmdsZSB0b3VjaCBtb2RlLCB0aGlzIGlzIHRoZSBsYXN0Ci0JCQkgKiByZXBvcnQgcmVjZWl2ZWQgaW4gYSBwZW4gZXZlbnQuIFdlIHdhbnQKLQkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCi0JCQkgKi8KLQkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7Ci0JCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCi0JCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCi0JCQkJCQkJLCAwKTsKLQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKLQkJCQkJCQluZC0+aW52ZXJ0ZWQgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU4KLQkJCQkJCQksIDEpOwotCQkJCX0KLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCB2YWx1ZSk7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2FzZSAweGZmMDAwMDAyOgogCQkJLyoKIAkJCSAqIHdlIHJlY2VpdmUgdGhpcyB3aGVuIHRoZSBkZXZpY2UgaXMgaW4gbXVsdGl0b3VjaApAQCAtMTk1LDEwICsxNzgsMzQgQEAKIAkJCSAqIHRoaXMgdXNhZ2UgdGVsbHMgaWYgdGhlIGNvbnRhY3QgcG9pbnQgaXMgcmVhbAogCQkJICogb3IgYSBwbGFjZWhvbGRlcgogCQkJICovCi0JCQlpZiAoIW5kLT5yZWFkaW5nX2FfcG9pbnQgfHwgdmFsdWUgIT0gMSkKKworCQkJLyogU2hvdWxkbid0IGdldCBtb3JlIHRoYW4gNCBmb290ZXIgcGFja2V0cywgc28gc2tpcCAqLworCQkJaWYgKG5kLT5tdF9mb290X2NvdW50ID49IDQpCiAJCQkJYnJlYWs7CisKKwkJCW5kLT5tdF9mb290ZXJbbmQtPm10X2Zvb3RfY291bnQrK10gPSB2YWx1ZTsKKworCQkJLyogaWYgdGhlIGZvb3RlciBpc24ndCBjb21wbGV0ZSBicmVhayAqLworCQkJaWYgKG5kLT5tdF9mb290X2NvdW50ICE9IDQpCisJCQkJYnJlYWs7CisKKwkJCS8qIFBlbiBhY3Rpdml0eSBzaWduYWwsIHRyaWdnZXIgZW5kIG9mIHRvdWNoLiAqLworCQkJaWYgKG5kLT5tdF9mb290ZXJbMl0pIHsKKwkJCQluZC0+Y29uZmlkZW5jZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIElmIHRoZSBjb250YWN0IHdhcyBpbnZhbGlkICovCisJCQlpZiAoIShuZC0+Y29uZmlkZW5jZSAmJiBuZC0+bXRfZm9vdGVyWzBdKQorCQkJCQl8fCBuZC0+dyA8PSAyNTAKKwkJCQkJfHwgbmQtPmggPD0gMTkwKSB7CisJCQkJbmQtPmNvbmZpZGVuY2UgPSAwOworCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBlbWl0IGEgbm9ybWFsIChYLCBZKSBmb3IgdGhlIGZpcnN0IHBvaW50IG9ubHkgKi8KIAkJCWlmIChuZC0+aWQgPT0gMCkgeworCQkJCW5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UgPSBuZC0+Y29uZmlkZW5jZTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQl9CkBAIC0yMjAsOCArMjI3LDM5IEBACiAJCQkJCQlBQlNfTVRfVE9VQ0hfTUlOT1IsIG5kLT53KTsKIAkJCX0KIAkJCWlucHV0X210X3N5bmMoZmllbGQtPmhpZGlucHV0LT5pbnB1dCk7Ci0JCQluZC0+cmVhZGluZ19hX3BvaW50ID0gMDsKLQkJCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDogLyogRW5kIG9mIGEgbXVsdGl0b3VjaCBncm91cCAqLworCQkJaWYgKCFuZC0+cmVhZGluZ19tdCkKKwkJCQlicmVhazsKKworCQkJbmQtPnJlYWRpbmdfbXQgPSAwOworCisJCQlpZiAobmQtPmZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZSkgeworCQkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCQljYXNlIDA6CS8qIGZvciBzaW5nbGUgdG91Y2ggZGV2aWNlcyAqLworCQkJCWNhc2UgMToKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQlCVE5fVE9PTF9ET1VCTEVUQVAsIDEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfVFJJUExFVEFQLCAxKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCWRlZmF1bHQ6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfUVVBRFRBUCwgMSk7CisJCQkJfQorCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7CisJCQl9IGVsc2UgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9ET1VCTEVUQVAsIDApOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9UUklQTEVUQVAsIDApOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9RVUFEVEFQLCAwKTsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yMzEsOCArMjY5LDggQEAKIAl9CiAKIAkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLwotICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKLSAgICAgICAgICAgICAgICBoaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKwlpZiAoKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjQxLDIzICsyNzksNjcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBudHJpZ19kYXRhICpuZDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKworCWlmIChpZC0+ZHJpdmVyX2RhdGEpCisJCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7CiAKIAluZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudHJpZ19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZCkgewogCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgTi1UcmlnIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbmQtPnJlYWRpbmdfYV9wb2ludCA9IDA7Ci0JbmQtPmZvdW5kX2NvbnRhY3RfaWQgPSAwOworCisJbmQtPnJlYWRpbmdfbXQgPSAwOwogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBuZCk7CiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQogCi0JaWYgKHJldCkKLQkJa2ZyZWUgKG5kKTsKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KIAorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoaWRpbnB1dCwgJmhkZXYtPmlucHV0cywgbGlzdCkgeworCQlpbnB1dCA9IGhpZGlucHV0LT5pbnB1dDsKKwkJc3dpdGNoIChoaWRpbnB1dC0+cmVwb3J0LT5maWVsZFswXS0+YXBwbGljYXRpb24pIHsKKwkJY2FzZSBISURfREdfUEVOOgorCQkJaW5wdXQtPm5hbWUgPSAiTi1UcmlnIFBlbiI7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfVE9VQ0hTQ1JFRU46CisJCQlfX2NsZWFyX2JpdChCVE5fVE9PTF9QRU4sIGlucHV0LT5rZXliaXQpOworCQkJLyoKKwkJCSAqIEEgbGl0dGxlIHNvbWV0aGluZyBzcGVjaWFsIHRvIGVuYWJsZQorCQkJICogdHdvIGFuZCB0aHJlZSBmaW5nZXIgdGFwcy4KKwkJCSAqLworCQkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQlfX3NldF9iaXQoQlROX1RPT0xfVFJJUExFVEFQLCBpbnB1dC0+a2V5Yml0KTsKKwkJCV9fc2V0X2JpdChCVE5fVE9PTF9RVUFEVEFQLCBpbnB1dC0+a2V5Yml0KTsKKwkJCS8qCisJCQkgKiBUaGUgcGh5c2ljYWwgdG91Y2hzY3JlZW4gKHNpbmdsZSB0b3VjaCkKKwkJCSAqIGlucHV0IGhhcyBhIHZhbHVlIGZvciBwaHlzaWNhbCwgd2hlcmVhcworCQkJICogdGhlIG11bHRpdG91Y2ggb25seSBoYXMgbG9naWNhbCBpbnB1dAorCQkJICogZmllbGRzLgorCQkJICovCisJCQlpbnB1dC0+bmFtZSA9CisJCQkJKGhpZGlucHV0LT5yZXBvcnQtPmZpZWxkWzBdCisJCQkJIC0+cGh5c2ljYWwpID8KKwkJCQkiTi1UcmlnIFRvdWNoc2NyZWVuIiA6CisJCQkJIk4tVHJpZyBNdWx0aVRvdWNoIjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlrZnJlZShuZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjc2LDcgKzM1OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIG50cmlnX2dyYWJiZWRfdXNhZ2VzW10gPSB7CiAJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCi0JeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbnRyaWdfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTlhOTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBPcnRlayBXS0ItMjAwMCAod2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZCkuCisgKiAgRml4ZXMgTG9naWNhbE1heGltdW0gZXJyb3IgaW4gVVNCIHJlcG9ydCBkZXNjcmlwdGlvbiwgc2VlCisgKiAgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzg3CisgKgorICogIENvcHlyaWdodCAoYykgMjAxMCBKb2huYXRob24gSGFycmlzIDxqbWhhcnJpc0BnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdGF0aWMgdm9pZCBvcnRla19yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJaWYgKHJzaXplID49IDU2ICYmIHJkZXNjWzU0XSA9PSAweDI1ICYmIHJkZXNjWzU1XSA9PSAweDAxKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJGaXhpbmcgdXAgT3J0ZWsgV0tCLTIwMDAgIgorCQkJCSJyZXBvcnQgZGVzY3JpcHRvci5cbiIpOworCQlyZGVzY1s1NV0gPSAweDkyOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG9ydGVrX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgb3J0ZWtfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBvcnRla19kcml2ZXIgPSB7CisJLm5hbWUgPSAib3J0ZWsiLAorCS5pZF90YWJsZSA9IG9ydGVrX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IG9ydGVrX3JlcG9ydF9maXh1cAorfTsKKworc3RhdGljIGludCBfX2luaXQgb3J0ZWtfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZvcnRla19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb3J0ZWtfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmb3J0ZWtfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob3J0ZWtfaW5pdCk7Cittb2R1bGVfZXhpdChvcnRla19leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYyBiL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRkNTFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXF1YW50YS5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIFF1YW50YSBPcHRpY2FsIFRvdWNoIGR1YWwtdG91Y2ggcGFuZWxzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUXVhbnRhIGR1YWwtdG91Y2ggcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RydWN0IHF1YW50YV9kYXRhIHsKKwlfX3UxNiB4LCB5OworCV9fdTggaWQ7CisJYm9vbCB2YWxpZDsJCS8qIHZhbGlkIGZpbmdlciBkYXRhLCBvciBqdXN0IHBsYWNlaG9sZGVyPyAqLworCWJvb2wgZmlyc3Q7CQkvKiBpcyB0aGlzIHRoZSBmaXJzdCBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5X25vdzsJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5OwkJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgcHJldmlvdXNseT8gKi8KK307CisKK3N0YXRpYyBpbnQgcXVhbnRhX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogaWdub3JlIHZlbmRvci1zcGVjaWZpYyBmZWF0dXJlcyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVhbnRhX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHF1YW50YV9maWx0ZXJfZXZlbnQoc3RydWN0IHF1YW50YV9kYXRhICp0ZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJCisJdGQtPmZpcnN0ID0gIXRkLT5maXJzdDsgLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisKKwlpZiAoIXRkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIG5vIGZpbmdlciBpbiB0aGlzIGZyYW1lIGlzIHZhbGlkCisJCSAqIGFuZCB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLyAKKwkJaWYgKCF0ZC0+Zmlyc3QgJiYgIXRkLT5hY3Rpdml0eV9ub3cgJiYgdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgdGQtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCB0ZC0+eSk7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgZmlyc3QgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lLi4uICovCisJaWYgKCF0ZC0+YWN0aXZpdHlfbm93KSB7CisJCS8qIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhY3Rpdml0eSwgZW1pdCB0b3VjaCBldmVudCAqLworCQlpZiAoIXRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXRkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJdGQtPmFjdGl2aXR5X25vdyA9IHRydWU7CisJCS8qIGFuZCBpbiBhbnkgY2FzZSB0aGlzIGlzIG91ciBwcmVmZXJyZWQgZmluZ2VyICovCisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCB0ZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCB0ZC0+eSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgcXVhbnRhX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcXVhbnRhX2RhdGEgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJdGQtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJdGQtPnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJdGQtPnkgPSB2YWx1ZTsKKwkJCXF1YW50YV9maWx0ZXJfZXZlbnQodGQsIGlucHV0KTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQl0ZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQkvKiB0b3VjaCBlbXVsYXRpb246IHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmcmFtZSAqLworCQkJdGQtPmZpcnN0ID0gZmFsc2U7CisJCQl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIGZyb20gZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVhbnRhX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcXVhbnRhX2RhdGEgKnRkOworCisJdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXVhbnRhX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBRdWFudGEgVG91Y2ggZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJdGQtPmZpcnN0ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUodGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcXVhbnRhX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHF1YW50YV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwKKwkJCVVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwKKwkJCVVTQl9ERVZJQ0VfSURfUElYQVJUX0lNQUdJTkdfSU5DX09QVElDQUxfVE9VQ0hfU0NSRUVOKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBxdWFudGFfZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIHF1YW50YV9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBxdWFudGFfZHJpdmVyID0geworCS5uYW1lID0gInF1YW50YS10b3VjaCIsCisJLmlkX3RhYmxlID0gcXVhbnRhX2RldmljZXMsCisJLnByb2JlID0gcXVhbnRhX3Byb2JlLAorCS5yZW1vdmUgPSBxdWFudGFfcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gcXVhbnRhX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IHF1YW50YV9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gcXVhbnRhX2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IHF1YW50YV9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHF1YW50YV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnF1YW50YV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcXVhbnRhX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnF1YW50YV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxdWFudGFfaW5pdCk7Cittb2R1bGVfZXhpdChxdWFudGFfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IDRlODQ1MDIuLjliZjAwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtNDgsNyArNDgsNyBAQAogICogdG8gIm9wZXJhdGlvbmFsIi4gIFdpdGhvdXQgdGhpcywgdGhlIHBzMyBjb250cm9sbGVyIHdpbGwgbm90IHJlcG9ydCBhbnkKICAqIGV2ZW50cy4KICAqLwotc3RhdGljIGludCBzb255X3NldF9vcGVyYXRpb25hbChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWxfdXNiKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShoZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTczLDYgKzczLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzb255X3NldF9vcGVyYXRpb25hbF9idChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltdID0geyAweDUzLCAweGY0LCAgMHg0MiwgMHgwMywgMHgwMCwgMHgwMCB9OworCXJldHVybiBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgYnVmLCBzaXplb2YoYnVmKSwgSElEX0ZFQVRVUkVfUkVQT1JUKTsKK30KKwogc3RhdGljIGludCBzb255X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldDsKQEAgLTgxLDcgKzg3LDcgQEAKIAogCXNjID0ga3phbGxvYyhzaXplb2YoKnNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNjID09IE5VTEwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgYXBwbGUgZGVzY3JpcHRvclxuIik7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIHNvbnkgZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTAxLDcgKzEwNywxNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCXJldCA9IHNvbnlfc2V0X29wZXJhdGlvbmFsKGhkZXYpOworCXN3aXRjaCAoaGRldi0+YnVzKSB7CisJY2FzZSBCVVNfVVNCOgorCQlyZXQgPSBzb255X3NldF9vcGVyYXRpb25hbF91c2IoaGRldik7CisJCWJyZWFrOworCWNhc2UgQlVTX0JMVUVUT09USDoKKwkJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWxfYnQoaGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDA7CisJfQorCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3N0b3A7CiAKQEAgLTEyMSw2ICsxMzcsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc29ueV9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpLAogCQkuZHJpdmVyX2RhdGEgPSBWQUlPX1JERVNDX0NPTlNUQU5UIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3RhbnR1bS5jIGIvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU5MmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYwpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWxzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN0YW50dW0gSElEIG11bHRpdG91Y2ggcGFuZWxzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBzdGFudHVtX2RhdGEgeworCV9fczMyIHgsIHksIHosIHcsIGg7CS8qIHgsIHksIHByZXNzdXJlLCB3aWR0aCwgaGVpZ2h0ICovCisJX191MTYgaWQ7CQkvKiB0b3VjaCBpZCAqLworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogZmlyc3QgZmluZ2VyIGluIHRoZSBISUQgcGFja2V0PyAqLworCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBzbyBmYXI/ICovCit9OworCitzdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQkJcmV0dXJuIC0xOworCisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9ER19XSURUSDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IpOworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sCisJCQkJCTEsIDEsIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgc3RhbnR1bV9maWx0ZXJfZXZlbnQoc3RydWN0IHN0YW50dW1fZGF0YSAqc2QsCisJCQkJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCWJvb2wgd2lkZTsKKworCWlmICghc2QtPnZhbGlkKSB7CisJCS8qCisJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgdGhlIGZpcnN0IGZpbmdlciBpcyBub3QgdmFsaWQgYW5kCisJCSAqIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKKwkJICovCisJCWlmIChzZC0+Zmlyc3QgJiYgc2QtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJc2QtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgc2QtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgc2QtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBzZC0+eSk7CisKKwl3aWRlID0gKHNkLT53ID4gc2QtPmgpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9PUklFTlRBVElPTiwgd2lkZSk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SLCB3aWRlID8gc2QtPncgOiBzZC0+aCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCB3aWRlID8gc2QtPmggOiBzZC0+dyk7CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHNkLT56KTsKKworCWlucHV0X210X3N5bmMoaW5wdXQpOworCXNkLT52YWxpZCA9IGZhbHNlOworCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJaWYgKHNkLT5maXJzdCkgeworCQlpZiAoIXNkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXNkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHNkLT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHNkLT55KTsKKwl9CisJc2QtPmZpcnN0ID0gZmFsc2U7Cit9CisKKworc3RhdGljIGludCBzdGFudHVtX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RhbnR1bV9kYXRhICpzZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmaW5nZXIgKi8KKwkJCXN0YW50dW1fZmlsdGVyX2V2ZW50KHNkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQlzZC0+dyA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCXNkLT5oID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXNkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXNkLT55ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCQlzZC0+eiA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCXNkLT5pZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQlzZC0+dmFsaWQgPSAhIXZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgMHhmZjAwMDAwMjoKKwkJCS8qIHRoaXMgY29tZXMgb25seSBiZWZvcmUgdGhlIGZpcnN0IGZpbmdlciAqLworCQkJc2QtPmZpcnN0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBpZ25vcmUgdGhlIG90aGVycyAqLworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN0YW50dW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCQkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHN0YW50dW1fZGF0YSAqc2Q7CisKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGFudHVtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBTdGFudHVtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2QtPnZhbGlkID0gZmFsc2U7CisJc2QtPmZpcnN0ID0gZmFsc2U7CisJc2QtPmFjdGl2aXR5ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHNkKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUoc2QpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RhbnR1bV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBzdGFudHVtX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1RBTlRVTSwgVVNCX0RFVklDRV9JRF9NVFApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHN0YW50dW1fZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIHN0YW50dW1fZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgc3RhbnR1bV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic3RhbnR1bSIsCisJLmlkX3RhYmxlID0gc3RhbnR1bV9kZXZpY2VzLAorCS5wcm9iZSA9IHN0YW50dW1fcHJvYmUsCisJLnJlbW92ZSA9IHN0YW50dW1fcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gc3RhbnR1bV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBzdGFudHVtX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBzdGFudHVtX2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IHN0YW50dW1fZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzdGFudHVtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc3RhbnR1bV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3RhbnR1bV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGFudHVtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHN0YW50dW1faW5pdCk7Cittb2R1bGVfZXhpdChzdGFudHVtX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCmluZGV4IDEyZGNkYTUuLjhkM2I0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCkBAIC0xNTYsNyArMTU2LDkgQEAKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3Qgd2Fjb21fZGF0YSAqd2RhdGE7CisJY2hhciByZXBfZGF0YVsyXTsKIAlpbnQgcmV0OworCWludCBsaW1pdDsKIAogCXdkYXRhID0ga3phbGxvYyhzaXplb2YoKndkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHdkYXRhID09IE5VTEwpIHsKQEAgLTE2Niw2ICsxNjgsNyBAQAogCiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHdkYXRhKTsKIAorCS8qIFBhcnNlIHRoZSBISUQgcmVwb3J0IG5vdyAqLwogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CkBAIC0xNzgsNiArMTgxLDMxIEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCisJLyoKKwkgKiBOb3RlIHRoYXQgaWYgdGhlIHJhdyBxdWVyaWVzIGZhaWwsIGl0J3Mgbm90IGEgaGFyZCBmYWlsdXJlIGFuZCBpdAorCSAqIGlzIHNhZmUgdG8gY29udGludWUKKwkgKi8KKworCS8qIFNldCBXYWNvbSBtb2RlMiAqLworCXJlcF9kYXRhWzBdID0gMHgwMzsgcmVwX2RhdGFbMV0gPSAweDAwOworCWxpbWl0ID0gMzsKKwlkbyB7CisJCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCByZXBfZGF0YSwgMiwKKwkJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCX0gd2hpbGUgKHJldCA8IDAgJiYgbGltaXQtLSA+IDApOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBva2UgZGV2aWNlICMxLCAlZFxuIiwgcmV0KTsKKworCS8qIDB4MDYgLSBoaWdoIHJlcG9ydGluZyBzcGVlZCwgMHgwNSAtIGxvdyBzcGVlZCAqLworCXJlcF9kYXRhWzBdID0gMHgwNjsgcmVwX2RhdGFbMV0gPSAweDAwOworCWxpbWl0ID0gMzsKKwlkbyB7CisJCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCByZXBfZGF0YSwgMiwKKwkJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCX0gd2hpbGUgKHJldCA8IDAgJiYgbGltaXQtLSA+IDApOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBva2UgZGV2aWNlICMyLCAlZFxuIiwgcmV0KTsKKwogCWhpZGlucHV0ID0gbGlzdF9lbnRyeShoZGV2LT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CiAJaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggY2RkMTM2OS4uZDA0NDc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQpOworCXJldCA9IGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGRldiwgYnVmLCBjb3VudCwgSElEX09VVFBVVF9SRVBPUlQpOwogb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggZTI5OTdhOC4uNTZkMDZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKICAqICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBPbGl2ZXIgTmV1a3VtCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBKaXJpIEtvc2luYQogICovCiAKIC8qCkBAIC0zMTYsNiArMzE2LDcgQEAKIAkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKG91dCkgZmFpbGVkIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KKwkJdXNiaGlkLT5sYXN0X291dCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCkBAIC0zNzcsNiArMzc4LDcgQEAKIAkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCXVzYmhpZC0+bGFzdF9jdHJsID0gamlmZmllczsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBxdWV1ZSB3b3JrIHRvIHdha2UgdXAgdGhlIGRldmljZS4KQEAgLTUxMiw5ICs1MTQsMjAgQEAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yZXBvcnQgPSByZXBvcnQ7CiAJCXVzYmhpZC0+b3V0aGVhZCA9IGhlYWQ7CiAKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CiAJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKIAkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiB0aGUgcXVldWUgaXMga25vd24gdG8gcnVuCisJCQkgKiBidXQgYW4gZWFybGllciByZXF1ZXN0IG1heSBiZSBzdHVjaworCQkJICogd2UgbWF5IG5lZWQgdG8gdGltZSBvdXQKKwkJCSAqIG5vIHJhY2UgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCB1bmRlcgorCQkJICogc3BpbmxvY2sKKwkJCSAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdXNiaGlkLT5sYXN0X291dCArIEhaICogNSkpCisJCQkJdXNiX3VubGlua191cmIodXNiaGlkLT51cmJvdXQpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTUzNSw5ICs1NDgsMjAgQEAKIAl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOwogCXVzYmhpZC0+Y3RybGhlYWQgPSBoZWFkOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQorCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkgewogCQlpZiAoaGlkX3N1Ym1pdF9jdHJsKGhpZCkpCiAJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogdGhlIHF1ZXVlIGlzIGtub3duIHRvIHJ1bgorCQkgKiBidXQgYW4gZWFybGllciByZXF1ZXN0IG1heSBiZSBzdHVjaworCQkgKiB3ZSBtYXkgbmVlZCB0byB0aW1lIG91dAorCQkgKiBubyByYWNlIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgdW5kZXIKKwkJICogc3BpbmxvY2sKKwkJICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHVzYmhpZC0+bGFzdF9jdHJsICsgSFogKiA1KSkKKwkJCXVzYl91bmxpbmtfdXJiKHVzYmhpZC0+dXJiY3RybCk7CisJfQogfQogCiB2b2lkIHVzYmhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKQpAQCAtNzc0LDcgKzc5OCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCB1c2JoaWRfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqYnVmLCBzaXplX3QgY291bnQsCisJCXVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUpCiB7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGhpZF90b191c2JfZGV2KGhpZCk7CkBAIC03ODUsNyArODEwLDcgQEAKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJSElEX1JFUV9TRVRfUkVQT1JULAogCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKLQkJKChISURfT1VUUFVUX1JFUE9SVCArIDEpIDw8IDgpIHwgKmJ1ZiwKKwkJKChyZXBvcnRfdHlwZSArIDEpIDw8IDgpIHwgKmJ1ZiwKIAkJaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGJ1ZiArIDEsIGNvdW50IC0gMSwKIAkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCkBAIC05ODEsOSArMTAwNiw2IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmdXNiaGlkLT5sb2NrKTsKIAotCXVzYmhpZC0+aW50ZiA9IGludGY7Ci0JdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCiAJdXNiaGlkLT51cmJjdHJsID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVzYmhpZC0+dXJiY3RybCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTE1NCw2ICsxMTc2LDggQEAKIAogCWhpZC0+ZHJpdmVyX2RhdGEgPSB1c2JoaWQ7CiAJdXNiaGlkLT5oaWQgPSBoaWQ7CisJdXNiaGlkLT5pbnRmID0gaW50ZjsKKwl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKIAlyZXQgPSBoaWRfYWRkX2RldmljZShoaWQpOwogCWlmIChyZXQpIHsKQEAgLTEzNDIsNyArMTM2Niw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGhpZF91c2JfaWRzIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGhpZF91c2JfaWRzW10gPSB7CiAJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywKIAkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9JTlRFUkZBQ0VfQ0xBU1NfSElEIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDM4NzczZGMuLjc4NDQyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNDMsOCArNDMsMTAgQEAKIAogCXsgVVNCX1ZFTkRPUl9JRF9BRkFURUNILCBVU0JfREVWSUNFX0lEX0FGQVRFQ0hfQUY5MDE2LCBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfRVRVUkJPVE9VQ0gsIFVTQl9ERVZJQ0VfSURfRVRVUkJPVE9VQ0gsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRCwgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSywgSElEX1FVSVJLX01VTFRJX0lOUFVUIHwgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfUExBWURPVENPTSwgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSywgVVNCX0RFVklDRV9JRF9UT1VDSFBBQ0tfUlRTLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9DUzEyNFUsIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtNTcsNiArNTksNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF8zQVhJU181QlVUVE9OX1NUSUNLLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRE1JLCBVU0JfREVWSUNFX0lEX0RNSV9FTkMsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9FTE8sIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjcwMCwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX1BST0RJR0UsIFVTQl9ERVZJQ0VfSURfUFJPRElHRV9DT1JETEVTUywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NVTiwgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9QRjEyMDksIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDg2N2UwODQuLjQzMzYwMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTI2NSw5ICsyNjUsMTAgQEAKIHN0YXRpYyBpbnQgaGlkZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0OwotCWludCByZXM7CisJaW50IHJlcywgaTsKIAotCWludCBpID0gaW1pbm9yKGlub2RlKSAtIEhJRERFVl9NSU5PUl9CQVNFOworCWxvY2tfa2VybmVsKCk7CisJaSA9IGltaW5vcihpbm9kZSkgLSBISURERVZfTUlOT1JfQkFTRTsKIAogCWlmIChpID49IEhJRERFVl9NSU5PUlMgfHwgaSA8IDAgfHwgIWhpZGRldl90YWJsZVtpXSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zMTMsMTAgKzMxNCwxMiBAQAogCQkJdXNiaGlkX29wZW4oaGlkKTsKIAkJfQogCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogYmFpbDoKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWtmcmVlKGxpc3QpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmggYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKaW5kZXggMDhmNTA1Yy4uZWMyMDQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaApAQCAtODAsMTIgKzgwLDE0IEBACiAJdW5zaWduZWQgY2hhciBjdHJsaGVhZCwgY3RybHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKmN0cmxidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgY3RybGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGJ1ZmZlciBkbWEgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfY3RybDsJCQkJCQkvKiByZWNvcmQgb2YgbGFzdCBvdXRwdXQgZm9yIHRpbWVvdXRzICovCiAKIAlzdHJ1Y3QgdXJiICp1cmJvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IFVSQiAqLwogCXN0cnVjdCBoaWRfb3V0cHV0X2ZpZm8gb3V0W0hJRF9DT05UUk9MX0ZJRk9fU0laRV07ICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvICovCiAJdW5zaWduZWQgY2hhciBvdXRoZWFkLCBvdXR0YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gaGVhZCAmIHRhaWwgKi8KIAljaGFyICpvdXRidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciAqLwogCWRtYV9hZGRyX3Qgb3V0YnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyIGRtYSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9vdXQ7CQkJCQkJCS8qIHJlY29yZCBvZiBsYXN0IG91dHB1dCBmb3IgdGltZW91dHMgKi8KIAogCXNwaW5sb2NrX3QgbG9jazsJCQkJCQkvKiBmaWZvIHNwaW5sb2NrICovCiAJdW5zaWduZWQgbG9uZyBpb2ZsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBmbGFncyAoQ1RSTF9SVU5OSU5HLCBPVVRfUlVOTklORykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCmluZGV4IDZjOWFjZTEuLjJhZDYyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXZvaWQgYW1zX2V4aXQodm9pZCkKK3ZvaWQgYW1zX3NlbnNvcl9kZXRhY2godm9pZCkKIHsKIAkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCiAJYW1zX2lucHV0X2V4aXQoKTsKQEAgLTIyMSw5ICsyMjEsNiBAQAogCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2N1cnJlbnQpOwogCi0JLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JYW1zX2luZm8uZXhpdCgpOwotCiAJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgogCSAqCiAJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CkBAIC0yMzksNiArMjM2LDEyIEBACiAJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX2ZyZWVmYWxsX2NsaWVudCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbXNfZXhpdCh2b2lkKQoreworCS8qIFNodXQgZG93biBpbXBsZW1lbnRhdGlvbiAqLworCWFtc19pbmZvLmV4aXQoKTsKK30KKwogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBcHBsZSBNb3Rpb24gU2Vuc29yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDJjYmY4YTY1Li5hYmVlY2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCkBAIC0yMzgsNiArMjM4LDggQEAKIHN0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgeworCQlhbXNfc2Vuc29yX2RldGFjaCgpOworCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQlhbXNfaTJjX3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggZmIxOGIzZDMuLjRmNjFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKQEAgLTEzMyw2ICsxMzMsOCBAQAogCiBzdGF0aWMgdm9pZCBhbXNfcG11X2V4aXQodm9pZCkKIHsKKwlhbXNfc2Vuc29yX2RldGFjaCgpOworCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJYW1zX3BtdV9zZXRfaXJxKEFNU19JUlFfQUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAppbmRleCA1ZWQzODdiLi5iMjhkN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApAQCAtNjEsNiArNjEsNyBAQAogCiBleHRlcm4gdm9pZCBhbXNfc2Vuc29ycyhzOCAqeCwgczggKnksIHM4ICp6KTsKIGV4dGVybiBpbnQgYW1zX3NlbnNvcl9hdHRhY2godm9pZCk7CitleHRlcm4gdm9pZCBhbXNfc2Vuc29yX2RldGFjaCh2b2lkKTsKIAogZXh0ZXJuIGludCBhbXNfcG11X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCk7CiBleHRlcm4gaW50IGFtc19pMmNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL0tjb25maWcgYi9kcml2ZXJzL2kyYy9LY29uZmlnCmluZGV4IDhkOGEwMGUuLjAyY2U5Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvS2NvbmZpZwpAQCAtNjEsNiArNjEsMTYgQEAKIAogCSAgSW4gZG91YnQsIHNheSBZLgogCitjb25maWcgSTJDX1NNQlVTCisJdHJpc3RhdGUgIlNNQnVzLXNwZWNpZmljIHByb3RvY29scyIgaWYgIUkyQ19IRUxQRVJfQVVUTworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgU01CdXMgZXh0ZW5zaW9ucyB0byB0aGUgSTJDCisJICBzcGVjaWZpY2F0aW9uLiBBdCB0aGUgbW9tZW50LCB0aGUgb25seSBzdXBwb3J0ZWQgZXh0ZW5zaW9uIGlzCisJICB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wuCisKKwkgIFRoaXMgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpMmMtc21idXMuCisKIHNvdXJjZSBkcml2ZXJzL2kyYy9hbGdvcy9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKIHNvdXJjZSBkcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL01ha2VmaWxlCmluZGV4IGJhMjZlNmMuLmFjZDAyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfSTJDX0JPQVJESU5GTykJKz0gaTJjLWJvYXJkaW5mby5vCiBvYmotJChDT05GSUdfSTJDKQkJKz0gaTJjLWNvcmUubworb2JqLSQoQ09ORklHX0kyQ19TTUJVUykJCSs9IGkyYy1zbWJ1cy5vCiBvYmotJChDT05GSUdfSTJDX0NIQVJERVYpCSs9IGkyYy1kZXYubwogb2JqLXkJCQkJKz0gYnVzc2VzLyBjaGlwcy8gYWxnb3MvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKaW5kZXggNzhkNDJhYS4uZGNkYWY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKQEAgLTQ1Myw4ICs0NTMsNiBAQAogCQkgKi8KIAkJaW50IHJhaXNlX2ZhbGxfdGltZTsKIAotCQlzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKnBjYV9kYXRhID0gYWRhcC0+YWxnb19kYXRhOwotCiAJCS8qIElnbm9yZSB0aGUgcmVzZXQgZnVuY3Rpb24gZnJvbSB0aGUgbW9kdWxlLAogCQkgKiB3ZSBjYW4gdXNlIHRoZSBwYXJhbGxlbCBidXMgcmVzZXQKIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDVmMzE4Y2UyLi40Y2MzODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtNzcsNyArNzcsNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWFtZDgxMTEuCiAKIGNvbmZpZyBJMkNfSTgwMQotCXRyaXN0YXRlICJJbnRlbCA4MjgwMSAoSUNIKSIKKwl0cmlzdGF0ZSAiSW50ZWwgODI4MDEgKElDSC9QQ0gpIgogCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlIEludGVsCkBAIC05Nyw3ICs5Nyw4IEBACiAJICAgIElDSDkKIAkgICAgVG9sYXBhaQogCSAgICBJQ0gxMAotCSAgICBQQ0gKKwkgICAgMzQwMC81IFNlcmllcyAoUENIKQorCSAgICBDb3VnYXIgUG9pbnQgKFBDSCkKIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWk4MDEuCkBAIC01NjQsMTIgKzU2NSwyMyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXZlcnNhdGlsZS4KIAorY29uZmlnIEkyQ19PQ1RFT04KKwl0cmlzdGF0ZSAiQ2F2aXVtIE9DVEVPTiBJMkMgYnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgorCWhlbHAKKwkgIFNheSB5ZXMgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgSTJDIHNlcmlhbCBidXMgb24gQ2F2aXVtCisJICBPQ1RFT04gU09DLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpMmMtb2N0ZW9uLgorCiBjb21tZW50ICJFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzIgogCiBjb25maWcgSTJDX1BBUlBPUlQKIAl0cmlzdGF0ZSAiUGFyYWxsZWwgcG9ydCBhZGFwdGVyIgogCWRlcGVuZHMgb24gUEFSUE9SVAogCXNlbGVjdCBJMkNfQUxHT0JJVAorCXNlbGVjdCBJMkNfU01CVVMKIAloZWxwCiAJICBUaGlzIHN1cHBvcnRzIHBhcmFsbGVsIHBvcnQgSTJDIGFkYXB0ZXJzIHN1Y2ggYXMgdGhlIG9uZXMgbWFkZSBieQogCSAgUGhpbGlwcyBvciBWZWxsZW1hbiwgQW5hbG9nIERldmljZXMgZXZhbHVhdGlvbiBib2FyZHMsIGFuZCBtb3JlLgpAQCAtNTkzLDYgKzYwNSw3IEBACiBjb25maWcgSTJDX1BBUlBPUlRfTElHSFQKIAl0cmlzdGF0ZSAiUGFyYWxsZWwgcG9ydCBhZGFwdGVyIChsaWdodCkiCiAJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IEkyQ19TTUJVUwogCWhlbHAKIAkgIFRoaXMgc3VwcG9ydHMgcGFyYWxsZWwgcG9ydCBJMkMgYWRhcHRlcnMgc3VjaCBhcyB0aGUgb25lcyBtYWRlIGJ5CiAJICBQaGlsaXBzIG9yIFZlbGxlbWFuLCBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcywgYW5kIG1vcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggMzAyYzU1MS4uYzJjNGVhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQpAQCAtNTQsNiArNTQsNyBAQAogb2JqLSQoQ09ORklHX0kyQ19TSU1URUMpCSs9IGkyYy1zaW10ZWMubwogb2JqLSQoQ09ORklHX0kyQ19TVFUzMDApCSs9IGkyYy1zdHUzMDAubwogb2JqLSQoQ09ORklHX0kyQ19WRVJTQVRJTEUpCSs9IGkyYy12ZXJzYXRpbGUubworb2JqLSQoQ09ORklHX0kyQ19PQ1RFT04pCSs9IGkyYy1vY3Rlb24ubwogCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwppbmRleCA4ZGU3ZDdiLi5iZDhmMWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGkxNTM1X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFsaTE1MzVfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKaW5kZXggNDY4N2FmNC4uYTQwOWNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCWFsaTE1NjNfc2h1dGRvd24oZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgYWxpMTU2M19pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFsaTE1NjNfaWRfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NMTU2MykgfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCmluZGV4IGU3ZTMyMDVmLi42NTlmNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGkxNXgzX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFsaTE1eDNfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggOGYwYjkwZS4uYzVhOWZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkiblZpZGlhIG5Gb3JjZSIsICJBTUQ4MTExIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ3NTZfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kNzU2X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwQiksCiAJICAuZHJpdmVyX2RhdGEgPSBBTUQ3NTYgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwppbmRleCA1YjRhZDg2Li5kMGRjOTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ4MTExX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDgxMTFfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTExX1NNQlVTMikgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggYmVjOWI4NC4uYzc2NzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJLmFsZ29fZGF0YQk9ICZoeWRyYV9iaXRfZGF0YSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoeWRyYV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoeWRyYV9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BUFBMRSwgUENJX0RFVklDRV9JRF9BUFBMRV9IWURSQSkgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IGRmNmFiNTUzLi45ZGE1YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtNDEsNyArNDEsOCBAQAogICBUb2xhcGFpICAgICAgICAgICAgICAgMHg1MDMyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBJQ0gxMCAgICAgICAgICAgICAgICAgMHgzYTMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBJQ0gxMCAgICAgICAgICAgICAgICAgMHgzYTYwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwotICBQQ0ggICAgICAgICAgICAgICAgICAgMHgzYjMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcworICAzNDAwLzUgU2VyaWVzIChQQ0gpICAgMHgzYjMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcworICBDb3VnYXIgUG9pbnQgKFBDSCkgICAgMHgxYzIyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogCiAgIEZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKICAgU29mdHdhcmUgUEVDICAgICAgICAgICAgICAgICAgICAgbm8KQEAgLTU2MSw3ICs1NjIsNyBAQAogCS5hbGdvCQk9ICZzbWJ1c19hbGdvcml0aG0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaTgwMV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpODAxX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8yKSB9LApAQCAtNTc4LDYgKzU3OSw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF9TTUJVUykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfU01CVVMpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC03MDcsNiArNzA5LDcgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNDoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIX1NNQlVTOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfU01CVVM6CiAJCWk4MDFfZmVhdHVyZXMgfD0gRkVBVFVSRV9JMkNfQkxPQ0tfUkVBRDsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNjaC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKaW5kZXggZGJhNmViMC4uNjljMjJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCS5hbGdvCQk9ICZzbWJ1c19hbGdvcml0aG0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2NoX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjaF9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9TQ0hfTFBDKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKaW5kZXggZWMxMWQxYy4uNGE3MDA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmZvcmNlMl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZm9yY2UyX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMl9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM19TTUJVUykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2N0ZW9uLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAKKyAqIE5va2lhIFNpZW1lbnMgTmV0d29ya3MsIG1pY2hhZWwubGF3bmljay5leHRAbnNuLmNvbQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAxMCBDYXZpdW0gTmV0d29ya3MsIEluYy4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaTJjIGFkYXB0ZXIgaW4gQ2F2aXVtIE5ldHdvcmtzJyBPQ1RFT04gcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImkyYy1vY3Rlb24iCisKKy8qIFRoZSBwcmV2aW91cyBvdXQtb2YtdHJlZSB2ZXJzaW9uIHdhcyBpbXBsaWNpdGx5IHZlcnNpb24gMS4wLiAqLworI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFNXX1RXU0kJIDB4MDAKKyNkZWZpbmUgVFdTSV9JTlQgMHgxMAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgcGF0dGVybnMgKi8KKyNkZWZpbmUgU1dfVFdTSV9WICAgICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfREFUQSAgIDB4MEMwMDAwMDEwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX0NUTCAgICAweDBDMDAwMDAyMDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwgMHgwQzAwMDAwMzAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCAgIDB4MEMwMDAwMDMwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX1JTVCAgICAweDBDMDAwMDA3MDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9PUF9UV1NJX0NMSyAgICAgMHgwODAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfUiAgICAgICAgICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMHVsbAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgYW5kIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFRXU0lfQ1RMX0NFICAgMHg4MAorI2RlZmluZSBUV1NJX0NUTF9FTkFCIDB4NDAKKyNkZWZpbmUgVFdTSV9DVExfU1RBICAweDIwCisjZGVmaW5lIFRXU0lfQ1RMX1NUUCAgMHgxMAorI2RlZmluZSBUV1NJX0NUTF9JRkxHIDB4MDgKKyNkZWZpbmUgVFdTSV9DVExfQUFLICAweDA0CisKKy8qIFNvbWUgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTVEFUX1NUQVJUICAgICAgMHgwOAorI2RlZmluZSBTVEFUX1JTVEFSVCAgICAgMHgxMAorI2RlZmluZSBTVEFUX1RYQUREUl9BQ0sgMHgxOAorI2RlZmluZSBTVEFUX1RYREFUQV9BQ0sgMHgyOAorI2RlZmluZSBTVEFUX1JYQUREUl9BQ0sgMHg0MAorI2RlZmluZSBTVEFUX1JYREFUQV9BQ0sgMHg1MAorI2RlZmluZSBTVEFUX0lETEUgICAgICAgMHhGOAorCitzdHJ1Y3Qgb2N0ZW9uX2kyYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJaW50IGlycTsKKwlpbnQgdHdzaV9mcmVxOworCWludCBzeXNfZnJlcTsKKwlyZXNvdXJjZV9zaXplX3QgdHdzaV9waHlzOworCXZvaWQgX19pb21lbSAqdHdzaV9iYXNlOworCXJlc291cmNlX3NpemVfdCByZWdzaXplOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9zdyAtIHdyaXRlIGFuIEkyQyBjb3JlIHJlZ2lzdGVyLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICogQGVvcF9yZWc6IFJlZ2lzdGVyIHNlbGVjdG9yLgorICogQGRhdGE6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogVGhlIEkyQyBjb3JlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFNXX1RXU0kgQ1NSLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX3N3KHN0cnVjdCBvY3Rlb25faTJjICppMmMsCisJCQkJdTY0IGVvcF9yZWcsCisJCQkJdTggZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBkYXRhLCBpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCWRvIHsKKwkJdG1wID0gX19yYXdfcmVhZHEoaTJjLT50d3NpX2Jhc2UgKyBTV19UV1NJKTsKKwl9IHdoaWxlICgodG1wICYgU1dfVFdTSV9WKSAhPSAwKTsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3JlYWRfc3cgLSB3cml0ZSBhbiBJMkMgY29yZSByZWdpc3Rlci4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBlb3BfcmVnOiBSZWdpc3RlciBzZWxlY3Rvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBkYXRhLgorICoKKyAqIFRoZSBJMkMgY29yZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgdmlhIHRoZSBTV19UV1NJIENTUi4KKyAqLworc3RhdGljIHU4IG9jdGVvbl9pMmNfcmVhZF9zdyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZW9wX3JlZykKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBTV19UV1NJX1IsIGkyYy0+dHdzaV9iYXNlICsgU1dfVFdTSSk7CisJZG8geworCQl0bXAgPSBfX3Jhd19yZWFkcShpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCX0gd2hpbGUgKCh0bXAgJiBTV19UV1NJX1YpICE9IDApOworCisJcmV0dXJuIHRtcCAmIDB4RkY7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9pbnQgLSB3cml0ZSB0aGUgVFdTSV9JTlQgcmVnaXN0ZXIKKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBkYXRhOiBWYWx1ZSB0byBiZSB3cml0dGVuLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX2ludChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKGRhdGEsIGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworCXRtcCA9IF9fcmF3X3JlYWRxKGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfaW50X2VuYWJsZSAtIGVuYWJsZSB0aGUgVFMgaW50ZXJydXB0LgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCB3aGVuIHRoZXJlIGlzIG5vbi1TVEFUX0lETEUgc3RhdGUgaW4KKyAqIHRoZSBTV19UV1NJX0VPUF9UV1NJX1NUQVQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfaW50X2VuYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHg0MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pbnRfZGlzYWJsZSAtIGRpc2FibGUgdGhlIFRTIGludGVycnVwdC4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY191bmJsb2NrIC0gdW5ibG9jayB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIElmIHRoZXJlIHdhcyBhIHJlc2V0IHdoaWxlIGEgZGV2aWNlIHdhcyBkcml2aW5nIDAgdG8gYnVzLAorICogYnVzIGlzIGJsb2NrZWQuIFdlIHRvZ2dsZSBpdCBmcmVlIG1hbnVhbGx5IGJ5IHNvbWUgY2xvY2sKKyAqIGN5Y2xlcyBhbmQgc2VuZCBhIHN0b3AuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfdW5ibG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCBpOworCisJZGV2X2RiZyhpMmMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7CisJCXVkZWxheSg1KTsKKwkJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDIwMCk7CisJCXVkZWxheSg1KTsKKwl9CisJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDMwMCk7CisJdWRlbGF5KDUpOworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHgxMDApOworCXVkZWxheSg1KTsKKwlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pc3IgLSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqIEBpbnQ6IFRoZSBpcnEsIHVudXNlZC4KKyAqIEBkZXZfaWQ6IE91ciBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9pMmNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gZGV2X2lkOworCisJb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShpMmMpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaTJjLT5xdWV1ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBvY3Rlb25faTJjX3Rlc3RfaWZsZyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXJldHVybiAob2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwpICYgVFdTSV9DVExfSUZMRykgIT0gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dhaXQgLSB3YWl0IGZvciB0aGUgSUZMRyB0byBiZSBzZXQuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd2FpdChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCByZXN1bHQ7CisKKwlvY3Rlb25faTJjX2ludF9lbmFibGUoaTJjKTsKKworCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCQkJCQkgIG9jdGVvbl9pMmNfdGVzdF9pZmxnKGkyYyksCisJCQkJCQkgIGkyYy0+YWRhcC50aW1lb3V0KTsKKworCW9jdGVvbl9pMmNfaW50X2Rpc2FibGUoaTJjKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICIlczogd2FpdCBpbnRlcnJ1cHRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19zdGFydCAtIHNlbmQgU1RBUlQgdG8gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19zdGFydChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXU4IGRhdGE7CisJaW50IHJlc3VsdDsKKworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQlUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCkgPT0gU1RBVF9JRExFKSB7CisJCQkvKgorCQkJICogQ29udHJvbGxlciByZWZ1c2VkIHRvIHNlbmQgc3RhcnQgZmxhZyBNYXkKKwkJCSAqIGJlIGEgY2xpZW50IGlzIGhvbGRpbmcgU0RBIGxvdyAtIGxldCdzIHRyeQorCQkJICogdG8gZnJlZSBpdC4KKwkJCSAqLworCQkJb2N0ZW9uX2kyY191bmJsb2NrKGkyYyk7CisJCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsCisJCQkJCSAgICBUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCQkJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJaWYgKChkYXRhICE9IFNUQVRfU1RBUlQpICYmIChkYXRhICE9IFNUQVRfUlNUQVJUKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiJXM6IGJhZCBzdGF0dXMgKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfc3RvcCAtIHNlbmQgU1RPUCB0byB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3N0b3Aoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBkYXRhOworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJICAgIFRXU0lfQ1RMX0VOQUIgfCBUV1NJX0NUTF9TVFApOworCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisKKwlpZiAoZGF0YSAhPSBTVEFUX0lETEUpIHsKKwkJZGV2X2VycihpMmMtPmRldiwgIiVzOiBiYWQgc3RhdHVzKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dyaXRlIC0gc2VuZCBkYXRhIHRvIHRoZSBidXMuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKiBAdGFyZ2V0OiBUYXJnZXQgYWRkcmVzcy4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHNlbnQuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd3JpdGUoc3RydWN0IG9jdGVvbl9pMmMgKmkyYywgaW50IHRhcmdldCwKKwkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgdGFyZ2V0IDw8IDEpOworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwgVFdTSV9DVExfRU5BQik7CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXRtcCA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmICgodG1wICE9IFNUQVRfVFhBRERSX0FDSykgJiYgKHRtcCAhPSBTVEFUX1RYREFUQV9BQ0spKSB7CisJCQlkZXZfZXJyKGkyYy0+ZGV2LAorCQkJCSIlczogYmFkIHN0YXR1cyBiZWZvcmUgd3JpdGUgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBLCBkYXRhW2ldKTsKKwkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCQlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19yZWFkIC0gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEB0YXJnZXQ6IFRhcmdldCBhZGRyZXNzLgorICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhZSAuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEgaXMgcmVhZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19yZWFkKHN0cnVjdCBvY3Rlb25faTJjICppMmMsIGludCB0YXJnZXQsCisJCQkgICB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCWlmIChsZW5ndGggPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgKHRhcmdldDw8MSkgfCAxKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsIFRXU0lfQ1RMX0VOQUIpOworCisJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQl0bXAgPSBvY3Rlb25faTJjX3JlYWRfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX1NUQVQpOworCQlpZiAoKHRtcCAhPSBTVEFUX1JYREFUQV9BQ0spICYmICh0bXAgIT0gU1RBVF9SWEFERFJfQUNLKSkgeworCQkJZGV2X2VycihpMmMtPmRldiwKKwkJCQkiJXM6IGJhZCBzdGF0dXMgYmVmb3JlIHJlYWQgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoaSsxIDwgbGVuZ3RoKQorCQkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJCQkJVFdTSV9DVExfRU5BQiB8IFRXU0lfQ1RMX0FBSyk7CisJCWVsc2UKKwkJCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQkJCVRXU0lfQ1RMX0VOQUIpOworCisJCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlkYXRhW2ldID0gb2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY194ZmVyIC0gVGhlIGRyaXZlcidzIG1hc3Rlcl94ZmVyIGZ1bmN0aW9uLgorICogQGFkYXA6IFBvaW50ZXIgdG8gdGhlIGkyY19hZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBtc2dzOiBQb2ludGVyIHRvIHRoZSBtZXNzYWdlcyB0byBiZSBwcm9jZXNzZWQuCisgKiBAbnVtOiBMZW5ndGggb2YgdGhlIE1TR1MgYXJyYXkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbgorICogZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBpMmNfbXNnICpwbXNnOworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBvY3Rlb25faTJjICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCisJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG51bTsgaSsrKSB7CisJCXBtc2cgPSAmbXNnc1tpXTsKKwkJZGV2X2RiZyhpMmMtPmRldiwKKwkJCSJEb2luZyAlcyAlZCBieXRlKHMpIHRvL2Zyb20gMHglMDJ4IC0gJWQgb2YgJWQgbWVzc2FnZXNcbiIsCisJCQkgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTsKKwkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBvY3Rlb25faTJjX3JlYWQoaTJjLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCQlwbXNnLT5sZW4pOworCQllbHNlCisJCQlyZXQgPSBvY3Rlb25faTJjX3dyaXRlKGkyYywgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkJcG1zZy0+bGVuKTsKKwl9CisJb2N0ZW9uX2kyY19zdG9wKGkyYyk7CisKKwlyZXR1cm4gKHJldCAhPSAwKSA/IHJldCA6IG51bTsKK30KKworc3RhdGljIHUzMiBvY3Rlb25faTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gb2N0ZW9uX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG9jdGVvbl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG9jdGVvbl9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgb2N0ZW9uX2kyY19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiT0NURU9OIGFkYXB0ZXIiLAorCS5hbGdvID0gJm9jdGVvbl9pMmNfYWxnbywKKwkudGltZW91dCA9IDIsCit9OworCisvKioKKyAqIG9jdGVvbl9pMmNfc2V0Y2xvY2sgLSBDYWxjdWxhdGUgYW5kIHNldCBjbG9jayBkaXZpc29ycy4KKyAqLworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19zZXRjbG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCB0Y2xrLCB0aHBfYmFzZSwgaW5jLCB0aHBfaWR4LCBtZGl2X2lkeCwgbmRpdl9pZHgsIGZvc2NsLCBkaWZmOworCWludCB0aHAgPSAweDE4LCBtZGl2ID0gMiwgbmRpdiA9IDAsIGRlbHRhX2h6ID0gMTAwMDAwMDsKKworCWZvciAobmRpdl9pZHggPSAwOyBuZGl2X2lkeCA8IDggJiYgZGVsdGFfaHogIT0gMDsgbmRpdl9pZHgrKykgeworCQkvKgorCQkgKiBBbiBtZGl2IHZhbHVlIG9mIGxlc3MgdGhhbiAyIHNlZW1zIHRvIG5vdCB3b3JrIHdlbGwKKwkJICogd2l0aCBkczEzMzcgUlRDcywgc28gd2UgY29uc3RyYWluIGl0IHRvIGxhcmdlcgorCQkgKiB2YWx1ZXMuCisJCSAqLworCQlmb3IgKG1kaXZfaWR4ID0gMTU7IG1kaXZfaWR4ID49IDIgJiYgZGVsdGFfaHogIT0gMDsgbWRpdl9pZHgtLSkgeworCQkJLyoKKwkJCSAqIEZvciBnaXZlbiBuZGl2IGFuZCBtZGl2IHZhbHVlcyBjaGVjayB0aGUKKwkJCSAqIHR3byBjbG9zZXN0IHRocCB2YWx1ZXMuCisJCQkgKi8KKwkJCXRjbGsgPSBpMmMtPnR3c2lfZnJlcSAqIChtZGl2X2lkeCArIDEpICogMTA7CisJCQl0Y2xrICo9ICgxIDw8IG5kaXZfaWR4KTsKKwkJCXRocF9iYXNlID0gKGkyYy0+c3lzX2ZyZXEgLyAodGNsayAqIDIpKSAtIDE7CisJCQlmb3IgKGluYyA9IDA7IGluYyA8PSAxOyBpbmMrKykgeworCQkJCXRocF9pZHggPSB0aHBfYmFzZSArIGluYzsKKwkJCQlpZiAodGhwX2lkeCA8IDUgfHwgdGhwX2lkeCA+IDB4ZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm9zY2wgPSBpMmMtPnN5c19mcmVxIC8gKDIgKiAodGhwX2lkeCArIDEpKTsKKwkJCQlmb3NjbCA9IGZvc2NsIC8gKDEgPDwgbmRpdl9pZHgpOworCQkJCWZvc2NsID0gZm9zY2wgLyAobWRpdl9pZHggKyAxKSAvIDEwOworCQkJCWRpZmYgPSBhYnMoZm9zY2wgLSBpMmMtPnR3c2lfZnJlcSk7CisJCQkJaWYgKGRpZmYgPCBkZWx0YV9oeikgeworCQkJCQlkZWx0YV9oeiA9IGRpZmY7CisJCQkJCXRocCA9IHRocF9pZHg7CisJCQkJCW1kaXYgPSBtZGl2X2lkeDsKKwkJCQkJbmRpdiA9IG5kaXZfaWR4OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9PUF9UV1NJX0NMSywgdGhwKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwsIChtZGl2IDw8IDMpIHwgbmRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBzdGF0dXM7CisJaW50IHRyaWVzOworCisJLyogZGlzYWJsZSBoaWdoIGxldmVsIGNvbnRyb2xsZXIsIGVuYWJsZSBidXMgYWNjZXNzICovCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCS8qIHJlc2V0IGNvbnRyb2xsZXIgKi8KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9SU1QsIDApOworCisJZm9yICh0cmllcyA9IDEwOyB0cmllczsgdHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCXN0YXR1cyA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmIChzdGF0dXMgPT0gU1RBVF9JRExFKQorCQkJcmV0dXJuIDA7CisJfQorCWRldl9lcnIoaTJjLT5kZXYsICIlczogVFdTSV9SU1QgZmFpbGVkISAoMHgleClcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvY3Rlb25faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGlycSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjOworCXN0cnVjdCBvY3Rlb25faTJjX2RhdGEgKmkyY19kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsKKworCS8qIEFsbCBhZGFwdG9ycyBoYXZlIGFuIGlycS4gICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpMmMtPmRldiA9ICZwZGV2LT5kZXY7CisJaTJjX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJlc19tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKHJlc19tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZm91bmQgbm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVnaW9uOworCX0KKworCWlmIChpMmNfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJubyBJMkMgZnJlcXVlbmN5IGRhdGFcbiIpOworCQlyZXN1bHQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCisJaTJjLT50d3NpX3BoeXMgPSByZXNfbWVtLT5zdGFydDsKKwlpMmMtPnJlZ3NpemUgPSByZXNvdXJjZV9zaXplKHJlc19tZW0pOworCWkyYy0+dHdzaV9mcmVxID0gaTJjX2RhdGEtPmkyY19mcmVxOworCWkyYy0+c3lzX2ZyZXEgPSBpMmNfZGF0YS0+c3lzX2ZyZXE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplLCByZXNfbWVtLT5uYW1lKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCWkyYy0+dHdzaV9iYXNlID0gaW9yZW1hcChpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyYy0+cXVldWUpOworCisJaTJjLT5pcnEgPSBpcnE7CisKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgb2N0ZW9uX2kyY19pc3IsIDAsIERSVl9OQU1FLCBpMmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGludGVycnVwdFxuIik7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJcmVzdWx0ID0gb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoaTJjKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJpbml0IGxvdyBsZXZlbCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3NldGNsb2NrKGkyYyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiY2xvY2sgaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlpMmMtPmFkYXAgPSBvY3Rlb25faTJjX29wczsKKwlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaTJjLT5hZGFwLm5yID0gcGRldi0+aWQgPj0gMCA/IHBkZXYtPmlkIDogMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCXJlc3VsdCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKKwkJZ290byBmYWlsX2FkZDsKKwl9CisKKwlkZXZfaW5mbyhpMmMtPmRldiwgInZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKKworCXJldHVybiByZXN1bHQ7CisKK2ZhaWxfYWRkOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworZmFpbF9pcnE6CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworZmFpbF9yZWdpb246CisJa2ZyZWUoaTJjKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfTsKKworc3RhdGljIGludCBfX2RldmV4aXQgb2N0ZW9uX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaTJjLT5pcnEsIGkyYyk7CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25faTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb2N0ZW9uX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9jdGVvbl9pMmNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfaW5pdCh2b2lkKQoreworCWludCBydjsKKworCXJ2ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvY3Rlb25faTJjX2RyaXZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9pMmNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBMYXduaWNrIDxtaWNoYWVsLmxhd25pY2suZXh0QG5zbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgQ2F2aXVtIE9DVEVPTiBwcm9jZXNzb3JzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworCittb2R1bGVfaW5pdChvY3Rlb25faTJjX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMKaW5kZXggMzIyYzU2OS4uNWY0MWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICogaTJjLXBhcnBvcnQtbGlnaHQuYyBJMkMgYnVzIG92ZXIgcGFyYWxsZWwgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEwIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgCiAgICBCYXNlZCBvbiBvbGRlciBpMmMtdmVsbGVtYW4uYyBkcml2ZXIKICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKQEAgLTI3LDEwICsyNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1zbWJ1cy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImkyYy1wYXJwb3J0LmgiCiAKQEAgLTQzLDYgKzQ1LDEwIEBACiBtb2R1bGVfcGFyYW0oYmFzZSwgdXNob3J0LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmFzZSwgIkJhc2UgSS9PIGFkZHJlc3MiKTsKIAorc3RhdGljIGludCBpcnE7Cittb2R1bGVfcGFyYW0oaXJxLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgKG9wdGlvbmFsKSIpOworCiAvKiAtLS0tLSBMb3ctbGV2ZWwgcGFyYWxsZWwgcG9ydCBhY2Nlc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHBvcnRfd3JpdGUodW5zaWduZWQgY2hhciBwLCB1bnNpZ25lZCBjaGFyIGQpCkBAIC0xMTksNiArMTI1LDE2IEBACiAJLm5hbWUJCT0gIlBhcmFsbGVsIHBvcnQgYWRhcHRlciAobGlnaHQpIiwKIH07CiAKKy8qIFNNQnVzIGFsZXJ0IHN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0X3NldHVwIGFsZXJ0X2RhdGEgPSB7CisJLmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmFyYTsKK3N0YXRpYyBzdHJ1Y3QgbGluZW9wIHBhcnBvcnRfY3RybF9pcnEgPSB7CisJLnZhbAkJPSAoMSA8PCA0KSwKKwkucG9ydAkJPSBDVFJMLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgaTJjX3BhcnBvcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwpAQCAtMTI3LDE4ICsxNDMsMzkgQEAKIAlwYXJwb3J0X3NldHNkYShOVUxMLCAxKTsKIAlwYXJwb3J0X3NldHNjbChOVUxMLCAxKTsKIAkvKiBPdGhlciBpbml0IGlmIG5lZWRlZCAocG93ZXIgb24uLi4pICovCi0JaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkKKwlpZiAoYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQudmFsKSB7CiAJCWxpbmVfc2V0KDEsICZhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdCk7CisJCS8qIEdpdmUgcG93ZXJlZCBkZXZpY2VzIHNvbWUgdGltZSB0byBzZXR0bGUgKi8KKwkJbXNsZWVwKDEwMCk7CisJfQogCiAJcGFycG9ydF9hZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWVyciA9IGkyY19iaXRfYWRkX2J1cygmcGFycG9ydF9hZGFwdGVyKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggSTJDXG4iKTsKLQlyZXR1cm4gZXJyOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldHVwIFNNQnVzIGFsZXJ0IGlmIHN1cHBvcnRlZCAqLworCWlmIChhZGFwdGVyX3Bhcm1bdHlwZV0uc21idXNfYWxlcnQgJiYgaXJxKSB7CisJCWFsZXJ0X2RhdGEuaXJxID0gaXJxOworCQlhcmEgPSBpMmNfc2V0dXBfc21idXNfYWxlcnQoJnBhcnBvcnRfYWRhcHRlciwgJmFsZXJ0X2RhdGEpOworCQlpZiAoYXJhKQorCQkJbGluZV9zZXQoMSwgJnBhcnBvcnRfY3RybF9pcnEpOworCQllbHNlCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIEFSQSBjbGllbnRcbiIpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBpMmNfcGFycG9ydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlpZiAoYXJhKSB7CisJCWxpbmVfc2V0KDAsICZwYXJwb3J0X2N0cmxfaXJxKTsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGFyYSk7CisJCWFyYSA9IE5VTEw7CisJfQogCWkyY19kZWxfYWRhcHRlcigmcGFycG9ydF9hZGFwdGVyKTsKIAogCS8qIFVuLWluaXQgaWYgbmVlZGVkIChwb3dlciBvZmYuLi4pICovCkBAIC0yMDUsNiArMjQyLDkgQEAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGJhc2UsIDMsIERSVk5BTUUpKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKGlycSAhPSAwKQorCQlwcl9pbmZvKERSVk5BTUUgIjogdXNpbmcgaXJxICVkXG4iLCBpcnEpOworCiAgICAgICAgIGlmICghYWRhcHRlcl9wYXJtW3R5cGVdLmdldHNjbC52YWwpCiAJCXBhcnBvcnRfYWxnb19kYXRhLmdldHNjbCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggMGQ4OTk4Ni4uMjIwZmNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICogaTJjLXBhcnBvcnQuYyBJMkMgYnVzIG92ZXIgcGFyYWxsZWwgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEwIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgCiAgICBCYXNlZCBvbiBvbGRlciBpMmMtcGhpbGlwcy1wYXIuYyBkcml2ZXIKICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKQEAgLTI3LDkgKzI3LDExIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1zbWJ1cy5oPgogI2luY2x1ZGUgImkyYy1wYXJwb3J0LmgiCiAKIC8qIC0tLS0tIERldmljZSBsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzgsNiArNDAsOCBAQAogCXN0cnVjdCBwYXJkZXZpY2UgKnBkZXY7CiAJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0X3NldHVwIGFsZXJ0X2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmFyYTsKIAlzdHJ1Y3QgaTJjX3BhciAqbmV4dDsKIH07CiAKQEAgLTE0Myw2ICsxNDcsMTkgQEAKIAogLyogLS0tLS0gSTJjIGFuZCBwYXJhbGxlbCBwb3J0IGNhbGwtYmFjayBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgLS0tLS0tLS0tICovCiAKK3ZvaWQgaTJjX3BhcnBvcnRfaXJxKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGkyY19wYXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICphcmEgPSBhZGFwdGVyLT5hcmE7CisKKwlpZiAoYXJhKSB7CisJCWRldl9kYmcoJmFyYS0+ZGV2LCAiU01CdXMgYWxlcnQgcmVjZWl2ZWRcbiIpOworCQlpMmNfaGFuZGxlX3NtYnVzX2FsZXJ0KGFyYSk7CisJfSBlbHNlCisJCWRldl9kYmcoJmFkYXB0ZXItPmFkYXB0ZXIuZGV2LAorCQkJIlNNQnVzIGFsZXJ0IHJlY2VpdmVkIGJ1dCBubyBBUkEgY2xpZW50IVxuIik7Cit9CisKIHN0YXRpYyB2b2lkIGkyY19wYXJwb3J0X2F0dGFjaCAoc3RydWN0IHBhcnBvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGkyY19wYXIgKmFkYXB0ZXI7CkBAIC0xNTQsOCArMTcxLDkgQEAKIAl9CiAKIAlwcl9kZWJ1ZygiaTJjLXBhcnBvcnQ6IGF0dGFjaGluZyB0byAlc1xuIiwgcG9ydC0+bmFtZSk7CisJcGFycG9ydF9kaXNhYmxlX2lycShwb3J0KTsKIAlhZGFwdGVyLT5wZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgImkyYy1wYXJwb3J0IiwKLQkJTlVMTCwgTlVMTCwgTlVMTCwgUEFSUE9SVF9GTEFHX0VYQ0wsIE5VTEwpOworCQlOVUxMLCBOVUxMLCBpMmNfcGFycG9ydF9pcnEsIFBBUlBPUlRfRkxBR19FWENMLCBhZGFwdGVyKTsKIAlpZiAoIWFkYXB0ZXItPnBkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpMmMtcGFycG9ydDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggcGFycG9ydFxuIik7CiAJCWdvdG8gRVJST1IwOwpAQCAtMTg1LDE0ICsyMDMsMjkgQEAKIAlwYXJwb3J0X3NldHNkYShwb3J0LCAxKTsKIAlwYXJwb3J0X3NldHNjbChwb3J0LCAxKTsKIAkvKiBPdGhlciBpbml0IGlmIG5lZWRlZCAocG93ZXIgb24uLi4pICovCi0JaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkKKwlpZiAoYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQudmFsKSB7CiAJCWxpbmVfc2V0KHBvcnQsIDEsICZhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdCk7CisJCS8qIEdpdmUgcG93ZXJlZCBkZXZpY2VzIHNvbWUgdGltZSB0byBzZXR0bGUgKi8KKwkJbXNsZWVwKDEwMCk7CisJfQogCiAJaWYgKGkyY19iaXRfYWRkX2J1cygmYWRhcHRlci0+YWRhcHRlcikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaTJjLXBhcnBvcnQ6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIEkyQ1xuIik7CiAJCWdvdG8gRVJST1IxOwogCX0KIAorCS8qIFNldHVwIFNNQnVzIGFsZXJ0IGlmIHN1cHBvcnRlZCAqLworCWlmIChhZGFwdGVyX3Bhcm1bdHlwZV0uc21idXNfYWxlcnQpIHsKKwkJYWRhcHRlci0+YWxlcnRfZGF0YS5hbGVydF9lZGdlX3RyaWdnZXJlZCA9IDE7CisJCWFkYXB0ZXItPmFyYSA9IGkyY19zZXR1cF9zbWJ1c19hbGVydCgmYWRhcHRlci0+YWRhcHRlciwKKwkJCQkJCSAgICAgJmFkYXB0ZXItPmFsZXJ0X2RhdGEpOworCQlpZiAoYWRhcHRlci0+YXJhKQorCQkJcGFycG9ydF9lbmFibGVfaXJxKHBvcnQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtcGFycG9ydDogRmFpbGVkIHRvIHJlZ2lzdGVyICIKKwkJCSAgICAgICAiQVJBIGNsaWVudFxuIik7CisJfQorCiAJLyogQWRkIHRoZSBuZXcgYWRhcHRlciB0byB0aGUgbGlzdCAqLwogCWFkYXB0ZXItPm5leHQgPSBhZGFwdGVyX2xpc3Q7CiAJYWRhcHRlcl9saXN0ID0gYWRhcHRlcjsKQEAgLTIxMyw2ICsyNDYsMTAgQEAKIAlmb3IgKHByZXYgPSBOVUxMLCBhZGFwdGVyID0gYWRhcHRlcl9saXN0OyBhZGFwdGVyOwogCSAgICAgcHJldiA9IGFkYXB0ZXIsIGFkYXB0ZXIgPSBhZGFwdGVyLT5uZXh0KSB7CiAJCWlmIChhZGFwdGVyLT5wZGV2LT5wb3J0ID09IHBvcnQpIHsKKwkJCWlmIChhZGFwdGVyLT5hcmEpIHsKKwkJCQlwYXJwb3J0X2Rpc2FibGVfaXJxKHBvcnQpOworCQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShhZGFwdGVyLT5hcmEpOworCQkJfQogCQkJaTJjX2RlbF9hZGFwdGVyKCZhZGFwdGVyLT5hZGFwdGVyKTsKIAogCQkJLyogVW4taW5pdCBpZiBuZWVkZWQgKHBvd2VyIG9mZi4uLikgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmgKaW5kZXggZWQ2OWQ4NC4uYTlmNjY4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKICAqIGkyYy1wYXJwb3J0LmggSTJDIGJ1cyBvdmVyIHBhcmFsbGVsIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgotICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCw2ICszOCw3IEBACiAJc3RydWN0IGxpbmVvcCBnZXRzZGE7CiAJc3RydWN0IGxpbmVvcCBnZXRzY2w7CiAJc3RydWN0IGxpbmVvcCBpbml0OworCXVuc2lnbmVkIGludCBzbWJ1c19hbGVydDoxOwogfTsKIAogc3RhdGljIHN0cnVjdCBhZGFwdGVyX3Bhcm0gYWRhcHRlcl9wYXJtW10gPSB7CkBAIC03Myw2ICs3NCw3IEBACiAJCS5zZXRzY2wJPSB7IDB4MDEsIERBVEEsIDEgfSwKIAkJLmdldHNkYQk9IHsgMHgxMCwgU1RBVCwgMSB9LAogCQkuaW5pdAk9IHsgMHhmMCwgREFUQSwgMCB9LAorCQkuc21idXNfYWxlcnQgPSAxLAogCX0sCiAJLyogdHlwZSA1OiBBRE0xMDI1LCBBRE0xMDMwIGFuZCBBRE0xMDMxIGV2YWx1YXRpb24gYm9hcmRzICovCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFzZW1pLmMKaW5kZXggYWRmMGZiYi4uMGQyMGZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhc2VtaS5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAlrZnJlZShzbWJ1cyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYXNlbWlfc21iX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBhc2VtaV9zbWJfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTk1OSwgMHhhMDAzKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCBlNTZlNGI2Li5lZTlkYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NzIsNyArNDcyLDcgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXg0X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXg0X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRUZBUiwgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwppbmRleCA1ZDFjMjYwLi4yYjBiZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTIwLDE1ICsyMCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1wbnguaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgSTJDX1BOWF9USU1FT1VUCQkxMCAvKiBtc2VjICovCiAjZGVmaW5lIEkyQ19QTlhfU1BFRURfS0haCTEwMAogI2RlZmluZSBJMkNfUE5YX1JFR0lPTl9TSVpFCTB4MTAwCi0jZGVmaW5lIFBOWF9ERUZBVUxUX0ZSRVEJMTMgLyogTUh6ICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHdhaXRfdGltZW91dChsb25nIHRpbWVvdXQsIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqZGF0YSkKIHsKQEAgLTUwLDIyICs1MCwyMSBAQAogCXJldHVybiAodGltZW91dCA8PSAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGkyY19wbnhfYXJtX3RpbWVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfcG54X2FybV90aW1lcihzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhKQogewotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmZGF0YS0+bWlmLnRpbWVyOwotCWludCBleHBpcmVzID0gSTJDX1BOWF9USU1FT1VUIC8gKDEwMDAgLyBIWik7CisJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJmFsZ19kYXRhLT5taWYudGltZXI7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gbXNlY3NfdG9famlmZmllcyhJMkNfUE5YX1RJTUVPVVQpOwogCiAJaWYgKGV4cGlyZXMgPD0gMSkKIAkJZXhwaXJlcyA9IDI7CiAKIAlkZWxfdGltZXJfc3luYyh0aW1lcik7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICJUaW1lciBhcm1lZCBhdCAlbHUgcGx1cyAldSBqaWZmaWVzLlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICJUaW1lciBhcm1lZCBhdCAlbHUgcGx1cyAlbHUgamlmZmllcy5cbiIsCiAJCWppZmZpZXMsIGV4cGlyZXMpOwogCiAJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZXhwaXJlczsKLQl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXA7CisJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZykmYWxnX2RhdGE7CiAKIAlhZGRfdGltZXIodGltZXIpOwogfQpAQCAtNzcsMzQgKzc2LDM0IEBACiAgKgogICogR2VuZXJhdGUgYSBTVEFSVCBzaWduYWwgaW4gdGhlIGRlc2lyZWQgbW9kZS4KICAqLwotc3RhdGljIGludCBpMmNfcG54X3N0YXJ0KHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGludCBpMmNfcG54X3N0YXJ0KHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRkciwKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhKQogewotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7Ci0KLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBhZGRyIDB4JXggbW9kZSAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogYWRkciAweCV4IG1vZGUgJWRcbiIsIF9fZnVuY19fLAogCQlzbGF2ZV9hZGRyLCBhbGdfZGF0YS0+bWlmLm1vZGUpOwogCiAJLyogQ2hlY2sgZm9yIDcgYml0IHNsYXZlIGFkZHJlc3NlcyBvbmx5ICovCiAJaWYgKHNsYXZlX2FkZHIgJiB+MHg3ZikgewotCQlkZXZfZXJyKCZhZGFwLT5kZXYsICIlczogSW52YWxpZCBzbGF2ZSBhZGRyZXNzICV4LiAiCi0JCSAgICAgICAiT25seSA3LWJpdCBhZGRyZXNzZXMgYXJlIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGFkYXAtPm5hbWUsIHNsYXZlX2FkZHIpOworCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXM6IEludmFsaWQgc2xhdmUgYWRkcmVzcyAleC4gT25seSA3LWJpdCBhZGRyZXNzZXMgYXJlIHN1cHBvcnRlZFxuIiwKKwkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUsIHNsYXZlX2FkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBGaXJzdCwgbWFrZSBzdXJlIGJ1cyBpcyBpZGxlICovCiAJaWYgKHdhaXRfdGltZW91dChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKSkgewogCQkvKiBTb21lYm9keSBlbHNlIGlzIG1vbm9wb2xpemluZyB0aGUgYnVzICovCi0JCWRldl9lcnIoJmFkYXAtPmRldiwgIiVzOiBCdXMgYnVzeS4gU2xhdmUgYWRkciA9ICUwMngsICIKLQkJICAgICAgICJjbnRybCA9ICV4LCBzdGF0ID0gJXhcbiIsCi0JCSAgICAgICBhZGFwLT5uYW1lLCBzbGF2ZV9hZGRyLAotCQkgICAgICAgaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSwKLQkJICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOworCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXM6IEJ1cyBidXN5LiBTbGF2ZSBhZGRyID0gJTAyeCwgY250cmwgPSAleCwgc3RhdCA9ICV4XG4iLAorCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgc2xhdmVfYWRkciwKKwkJCWlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSksCisJCQlpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9IGVsc2UgaWYgKGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkgJiBtc3RhdHVzX2FmaSkgewogCQkvKiBTb3JyeSwgd2UgbG9zdCB0aGUgYnVzICovCi0JCWRldl9lcnIoJmFkYXAtPmRldiwgIiVzOiBBcmJpdHJhdGlvbiBmYWlsdXJlLiAiCi0JCSAgICAgICAiU2xhdmUgYWRkciA9ICUwMnhcbiIsIGFkYXAtPm5hbWUsIHNsYXZlX2FkZHIpOworCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSAgICAgICAgIiVzOiBBcmJpdHJhdGlvbiBmYWlsdXJlLiBTbGF2ZSBhZGRyID0gJTAyeFxuIiwKKwkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUsIHNsYXZlX2FkZHIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExNSwxNCArMTE0LDE0IEBACiAJaW93cml0ZTMyKGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkgfCBtc3RhdHVzX3RkaSB8IG1zdGF0dXNfYWZpLAogCQkgIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBzZW5kaW5nICUjeFxuIiwgX19mdW5jX18sCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogc2VuZGluZyAlI3hcbiIsIF9fZnVuY19fLAogCQkoc2xhdmVfYWRkciA8PCAxKSB8IHN0YXJ0X2JpdCB8IGFsZ19kYXRhLT5taWYubW9kZSk7CiAKIAkvKiBXcml0ZSB0aGUgc2xhdmUgYWRkcmVzcywgU1RBUlQgYml0IGFuZCBSL1cgYml0ICovCiAJaW93cml0ZTMyKChzbGF2ZV9hZGRyIDw8IDEpIHwgc3RhcnRfYml0IHwgYWxnX2RhdGEtPm1pZi5tb2RlLAogCQkgIEkyQ19SRUdfVFgoYWxnX2RhdGEpKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBleGl0XG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMywxMyArMTMyLDEyIEBACiAgKgogICogR2VuZXJhdGUgYSBTVE9QIHNpZ25hbCB0byB0ZXJtaW5hdGUgdGhlIG1hc3RlciB0cmFuc2FjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgaTJjX3BueF9zdG9wKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyB2b2lkIGkyY19wbnhfc3RvcChzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhKQogewotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CiAJLyogT25seSAxIG1zZWMgbWF4IHRpbWVvdXQgZHVlIHRvIGludGVycnVwdCBjb250ZXh0ICovCiAJbG9uZyB0aW1lb3V0ID0gMTAwMDsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJLyogV3JpdGUgYSBTVE9QIGJpdCB0byBUWCBGSUZPICovCkBAIC0xNTMsNyArMTUxLDcgQEAKIAkJdGltZW91dC0tOwogCX0KIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIH0KIApAQCAtMTYzLDEyICsxNjEsMTEgQEAKICAqCiAgKiBTZW5kcyBvbmUgYnl0ZSBvZiBkYXRhIHRvIHRoZSBzbGF2ZQogICovCi1zdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3htaXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGludCBpMmNfcG54X21hc3Rlcl94bWl0KHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1MzIgdmFsOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPiAwKSB7CkBAIC0xODQsMTUgKzE4MSwxNSBAQAogCQlhbGdfZGF0YS0+bWlmLmxlbi0tOwogCQlpb3dyaXRlMzIodmFsLCBJMkNfUkVHX1RYKGFsZ19kYXRhKSk7CiAKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogeG1pdCAlI3ggWyVkXVxuIiwgX19mdW5jX18sCi0JCQl2YWwsIGFsZ19kYXRhLT5taWYubGVuICsgMSk7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IHhtaXQgJSN4IFslZF1cbiIsCisJCQlfX2Z1bmNfXywgdmFsLCBhbGdfZGF0YS0+bWlmLmxlbiArIDEpOwogCiAJCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CiAJCQlpZiAoYWxnX2RhdGEtPmxhc3QpIHsKIAkJCQkvKiBXYWl0IHVudGlsIHRoZSBTVE9QIGlzIHNlZW4uICovCiAJCQkJaWYgKHdhaXRfdGltZW91dChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKSkKLQkJCQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiVGhlIGJ1cyBpcyBzdGlsbCAiCi0JCQkJCQkiYWN0aXZlIGFmdGVyIHRpbWVvdXRcbiIpOworCQkJCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkJCQkiVGhlIGJ1cyBpcyBzdGlsbCBhY3RpdmUgYWZ0ZXIgdGltZW91dFxuIik7CiAJCQl9CiAJCQkvKiBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHRzICovCiAJCQlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSAmCkBAIC0yMDEsMTQgKzE5OCwxNSBAQAogCiAJCQlkZWxfdGltZXJfc3luYygmYWxnX2RhdGEtPm1pZi50aW1lcik7CiAKLQkJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IFdha2luZyB1cCB4ZmVyIHJvdXRpbmUuXG4iLAorCQkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkJCSIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lLlxuIiwKIAkJCQlfX2Z1bmNfXyk7CiAKIAkJCWNvbXBsZXRlKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKIAkJfQogCX0gZWxzZSBpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMCkgewogCQkvKiB6ZXJvLXNpemVkIHRyYW5zZmVyICovCi0JCWkyY19wbnhfc3RvcChhZGFwKTsKKwkJaTJjX3BueF9zdG9wKGFsZ19kYXRhKTsKIAogCQkvKiBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHRzLiAqLwogCQlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSAmCkBAIC0yMTcsMTMgKzIxNSwxNCBAQAogCiAJCS8qIFN0b3AgdGltZXIuICovCiAJCWRlbF90aW1lcl9zeW5jKCZhbGdfZGF0YS0+bWlmLnRpbWVyKTsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogV2FraW5nIHVwIHhmZXIgcm91dGluZSBhZnRlciAiCi0JCQkiemVyby14ZmVyLlxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogV2FraW5nIHVwIHhmZXIgcm91dGluZSBhZnRlciB6ZXJvLXhmZXIuXG4iLAorCQkJX19mdW5jX18pOwogCiAJCWNvbXBsZXRlKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKIAl9CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTIzNSwyMSArMjM0LDIxIEBACiAgKgogICogUmVhZHMgb25lIGJ5dGUgZGF0YSBmcm9tIHRoZSBzbGF2ZQogICovCi1zdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3JjdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3JjdihzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhKQogewotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAJdTMyIGN0bCA9IDA7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCS8qIENoZWNrLCB3aGV0aGVyIHRoZXJlIGlzIGFscmVhZHkgZGF0YSwKIAkgKiBvciB3ZSBkaWRuJ3QgJ2FzaycgZm9yIGl0IHlldC4KIAkgKi8KIAlpZiAoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSAmIG1zdGF0dXNfcmZlKSB7Ci0JCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IFdyaXRlIGR1bW15IGRhdGEgdG8gZmlsbCAiCi0JCQkiUngtZmlmby4uLlxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogV3JpdGUgZHVtbXkgZGF0YSB0byBmaWxsIFJ4LWZpZm8uLi5cbiIsCisJCQlfX2Z1bmNfXyk7CiAKIAkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDEpIHsKIAkJCS8qIExhc3QgYnl0ZSwgZG8gbm90IGFja25vd2xlZGdlIG5leHQgcmN2LiAqLwpAQCAtMjgxLDE2ICsyODAsMTYgQEAKIAlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPiAwKSB7CiAJCXZhbCA9IGlvcmVhZDMyKEkyQ19SRUdfUlgoYWxnX2RhdGEpKTsKIAkJKmFsZ19kYXRhLT5taWYuYnVmKysgPSAodTgpICh2YWwgJiAweGZmKTsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogcmN2IDB4JXggWyVkXVxuIiwgX19mdW5jX18sIHZhbCwKLQkJCWFsZ19kYXRhLT5taWYubGVuKTsKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogcmN2IDB4JXggWyVkXVxuIiwKKwkJCV9fZnVuY19fLCB2YWwsIGFsZ19kYXRhLT5taWYubGVuKTsKIAogCQlhbGdfZGF0YS0+bWlmLmxlbi0tOwogCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMCkgewogCQkJaWYgKGFsZ19kYXRhLT5sYXN0KQogCQkJCS8qIFdhaXQgdW50aWwgdGhlIFNUT1AgaXMgc2Vlbi4gKi8KIAkJCQlpZiAod2FpdF90aW1lb3V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKQotCQkJCQlkZXZfZXJyKCZhZGFwLT5kZXYsICJUaGUgYnVzIGlzIHN0aWxsICIKLQkJCQkJCSJhY3RpdmUgYWZ0ZXIgdGltZW91dFxuIik7CisJCQkJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCQkJCSJUaGUgYnVzIGlzIHN0aWxsIGFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKIAogCQkJLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0cyAqLwogCQkJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKQEAgLTMwNCw3ICszMDMsNyBAQAogCQl9CiAJfQogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJcmV0dXJuIDA7CkBAIC0zMTIsMTEgKzMxMSwxMSBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX3BueF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogeworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBkZXZfaWQ7CiAJdTMyIHN0YXQsIGN0bDsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IG1zdGF0ID0gJXggbWN0cmwgPSAleCwgbW9kZSA9ICVkXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJIiVzKCk6IG1zdGF0ID0gJXggbWN0cmwgPSAleCwgbW9kZSA9ICVkXG4iLAogCQlfX2Z1bmNfXywKIAkJaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSwKIAkJaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSwKQEAgLTMzOSwxMCArMzM4LDEwIEBACiAJCWNvbXBsZXRlKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKIAl9IGVsc2UgaWYgKHN0YXQgJiBtc3RhdHVzX25haSkgewogCQkvKiBTbGF2ZSBkaWQgbm90IGFja25vd2xlZGdlLCBnZW5lcmF0ZSBhIFNUT1AgKi8KLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogIgotCQkJIlNsYXZlIGRpZCBub3QgYWNrbm93bGVkZ2UsIGdlbmVyYXRpbmcgYSBTVE9QLlxuIiwKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkJIiVzKCk6IFNsYXZlIGRpZCBub3QgYWNrbm93bGVkZ2UsIGdlbmVyYXRpbmcgYSBTVE9QLlxuIiwKIAkJCV9fZnVuY19fKTsKLQkJaTJjX3BueF9zdG9wKGFkYXApOworCQlpMmNfcG54X3N0b3AoYWxnX2RhdGEpOwogCiAJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMuICovCiAJCWN0bCA9IGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CkBAIC0zNjgsOSArMzY3LDkgQEAKIAkJICovCiAJCWlmICgoc3RhdCAmIG1zdGF0dXNfZHJtaSkgfHwgIShzdGF0ICYgbXN0YXR1c19yZmUpKSB7CiAJCQlpZiAoYWxnX2RhdGEtPm1pZi5tb2RlID09IEkyQ19TTUJVU19XUklURSkgewotCQkJCWkyY19wbnhfbWFzdGVyX3htaXQoYWRhcCk7CisJCQkJaTJjX3BueF9tYXN0ZXJfeG1pdChhbGdfZGF0YSk7CiAJCQl9IGVsc2UgaWYgKGFsZ19kYXRhLT5taWYubW9kZSA9PSBJMkNfU01CVVNfUkVBRCkgewotCQkJCWkyY19wbnhfbWFzdGVyX3JjdihhZGFwKTsKKwkJCQlpMmNfcG54X21hc3Rlcl9yY3YoYWxnX2RhdGEpOwogCQkJfQogCQl9CiAJfQpAQCAtMzc5LDcgKzM3OCw4IEBACiAJc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAJaW93cml0ZTMyKHN0YXQgfCBtc3RhdHVzX3RkaSB8IG1zdGF0dXNfYWZpLCBJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZywgc3RhdCA9ICV4IGN0cmwgPSAleC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkiJXMoKTogZXhpdGluZywgc3RhdCA9ICV4IGN0cmwgPSAleC5cbiIsCiAJCSBfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSwKIAkJIGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOwogCkBAIC0zODgsMTQgKzM4OCwxMyBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcG54X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKilkYXRhOwotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IChzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKilkYXRhOwogCXUzMiBjdGw7CiAKLQlkZXZfZXJyKCZhZGFwLT5kZXYsICJNYXN0ZXIgdGltZWQgb3V0LiBzdGF0ID0gJTA0eCwgY250cmwgPSAlMDR4LiAiCi0JICAgICAgICJSZXNldHRpbmcgbWFzdGVyLi4uXG4iLAotCSAgICAgICBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAotCSAgICAgICBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpKTsKKwlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSJNYXN0ZXIgdGltZWQgb3V0LiBzdGF0ID0gJTA0eCwgY250cmwgPSAlMDR4LiBSZXNldHRpbmcgbWFzdGVyLi4uXG4iLAorCQlpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAorCQlpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpKTsKIAogCS8qIFJlc2V0IG1hc3RlciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKQEAgLTQwOSwxNSArNDA4LDE0IEBACiAJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYnVzX3Jlc2V0X2lmX2FjdGl2ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW5saW5lIHZvaWQgYnVzX3Jlc2V0X2lmX2FjdGl2ZShzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhKQogewotCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CiAJdTMyIHN0YXQ7CiAKIAlpZiAoKHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKSAmIG1zdGF0dXNfYWN0aXZlKSB7Ci0JCWRldl9lcnIoJmFkYXAtPmRldiwKKwkJZGV2X2VycigmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAogCQkJIiVzOiBCdXMgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHhmZXIuIFJlc2V0IGl0Li4uXG4iLAotCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCQlhbGdfZGF0YS0+YWRhcHRlci5uYW1lKTsKIAkJaW93cml0ZTMyKGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkgfCBtY250cmxfcmVzZXQsCiAJCQkgIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CiAJCXdhaXRfcmVzZXQoSTJDX1BOWF9USU1FT1VULCBhbGdfZGF0YSk7CkBAIC00NTEsMTAgKzQ0OSwxMSBAQAogCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CiAJdTMyIHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6ICVkIG1lc3NhZ2VzLCBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkiJXMoKTogZW50ZXJpbmc6ICVkIG1lc3NhZ2VzLCBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBudW0sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCi0JYnVzX3Jlc2V0X2lmX2FjdGl2ZShhZGFwKTsKKwlidXNfcmVzZXRfaWZfYWN0aXZlKGFsZ19kYXRhKTsKIAogCS8qIFByb2Nlc3MgdHJhbnNhY3Rpb25zIGluIGEgbG9vcC4gKi8KIAlmb3IgKGkgPSAwOyByYyA+PSAwICYmIGkgPCBudW07IGkrKykgewpAQCAtNDY0LDkgKzQ2Myw5IEBACiAJCWFkZHIgPSBwbXNnLT5hZGRyOwogCiAJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1RFTikgewotCQkJZGV2X2VycigmYWRhcC0+ZGV2LAorCQkJZGV2X2VycigmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAogCQkJCSIlczogMTAgYml0cyBhZGRyIG5vdCBzdXBwb3J0ZWQhXG4iLAotCQkJCWFkYXAtPm5hbWUpOworCQkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUpOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ3OCwxMSArNDc3LDEwIEBACiAJCWFsZ19kYXRhLT5taWYucmV0ID0gMDsKIAkJYWxnX2RhdGEtPmxhc3QgPSAoaSA9PSBudW0gLSAxKTsKIAotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBtb2RlICVkLCAlZCBieXRlc1xuIiwgX19mdW5jX18sCi0JCQlhbGdfZGF0YS0+bWlmLm1vZGUsCi0JCQlhbGdfZGF0YS0+bWlmLmxlbik7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IG1vZGUgJWQsICVkIGJ5dGVzXG4iLAorCQkJX19mdW5jX18sIGFsZ19kYXRhLT5taWYubW9kZSwgYWxnX2RhdGEtPm1pZi5sZW4pOwogCi0JCWkyY19wbnhfYXJtX3RpbWVyKGFkYXApOworCQlpMmNfcG54X2FybV90aW1lcihhbGdfZGF0YSk7CiAKIAkJLyogaW5pdGlhbGl6ZSB0aGUgY29tcGxldGlvbiB2YXIgKi8KIAkJaW5pdF9jb21wbGV0aW9uKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKQEAgLTQ5Myw3ICs0OTEsNyBAQAogCQkJICBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwogCiAJCS8qIFB1dCBzdGFydC1jb2RlIGFuZCBzbGF2ZS1hZGRyZXNzIG9uIHRoZSBidXMuICovCi0JCXJjID0gaTJjX3BueF9zdGFydChhZGRyLCBhZGFwKTsKKwkJcmMgPSBpMmNfcG54X3N0YXJ0KGFkZHIsIGFsZ19kYXRhKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWJyZWFrOwogCkBAIC01MDIsMzEgKzUwMCwzMiBAQAogCiAJCWlmICghKHJjID0gYWxnX2RhdGEtPm1pZi5yZXQpKQogCQkJY29tcGxldGVkKys7Ci0JCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IENvbXBsZXRlLCByZXR1cm4gY29kZSA9ICVkLlxuIiwKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkJIiVzKCk6IENvbXBsZXRlLCByZXR1cm4gY29kZSA9ICVkLlxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAKIAkJLyogQ2xlYXIgVERJIGFuZCBBRkkgYml0cyBpbiBjYXNlIHRoZXkgYXJlIHNldC4gKi8KIAkJaWYgKChzdGF0ID0gaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSkgJiBtc3RhdHVzX3RkaSkgewotCQkJZGV2X2RiZygmYWRhcC0+ZGV2LAorCQkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAogCQkJCSIlczogVERJIHN0aWxsIHNldC4uLiBjbGVhcmluZyBub3cuXG4iLAotCQkJICAgICAgIGFkYXAtPm5hbWUpOworCQkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUpOwogCQkJaW93cml0ZTMyKHN0YXQsIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAJCX0KIAkJaWYgKChzdGF0ID0gaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSkgJiBtc3RhdHVzX2FmaSkgewotCQkJZGV2X2RiZygmYWRhcC0+ZGV2LAorCQkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAogCQkJCSIlczogQUZJIHN0aWxsIHNldC4uLiBjbGVhcmluZyBub3cuXG4iLAotCQkJICAgICAgIGFkYXAtPm5hbWUpOworCQkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUpOwogCQkJaW93cml0ZTMyKHN0YXQsIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAJCX0KIAl9CiAKLQlidXNfcmVzZXRfaWZfYWN0aXZlKGFkYXApOworCWJ1c19yZXNldF9pZl9hY3RpdmUoYWxnX2RhdGEpOwogCiAJLyogQ2xlYW51cCB0byBiZSBzdXJlLi4uICovCiAJYWxnX2RhdGEtPm1pZi5idWYgPSBOVUxMOwogCWFsZ19kYXRhLT5taWYubGVuID0gMDsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmcsIHN0YXQgPSAleFxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXhcbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCWlmIChjb21wbGV0ZWQgIT0gbnVtKQpAQCAtNTQ1LDY5ICs1NDQsOTIgQEAKIAkuZnVuY3Rpb25hbGl0eSA9IGkyY19wbnhfZnVuYywKIH07CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaTJjX3BueF9jb250cm9sbGVyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQkgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGkyY19wbnhfZGF0YSAqaTJjX3BueCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXJldHVybiBpMmNfcG54LT5zdXNwZW5kKHBkZXYsIHN0YXRlKTsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBGSVhNRTogc2hvdWxkbid0IHRoaXMgYmUgY2xrX2Rpc2FibGU/ICovCisJY2xrX2VuYWJsZShhbGdfZGF0YS0+Y2xrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGkyY19wbnhfY29udHJvbGxlcl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JcmV0dXJuIGkyY19wbngtPnJlc3VtZShwZGV2KTsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gY2xrX2VuYWJsZShhbGdfZGF0YS0+Y2xrKTsKIH0KKyNlbHNlCisjZGVmaW5lIGkyY19wbnhfY29udHJvbGxlcl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgaTJjX3BueF9jb250cm9sbGVyX3Jlc3VtZQlOVUxMCisjZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQgaTJjX3BueF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCByZXQgPSAwOwogCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGE7Ci0JaW50IGZyZXFfbWh6OworCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoIWkyY19wbnggfHwgIWkyY19wbngtPmFkYXB0ZXIpIHsKKwlpZiAoIWkyY19wbnggfHwgIWkyY19wbngtPm5hbWUpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IG5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGkyY19wbngpOwotCi0JaWYgKGkyY19wbngtPmNhbGN1bGF0ZV9pbnB1dF9mcmVxKQotCQlmcmVxX21oeiA9IGkyY19wbngtPmNhbGN1bGF0ZV9pbnB1dF9mcmVxKHBkZXYpOwotCWVsc2UgewotCQlmcmVxX21oeiA9IFBOWF9ERUZBVUxUX0ZSRVE7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTZXR0aW5nIGJ1cyBmcmVxdWVuY3kgdG8gZGVmYXVsdCB2YWx1ZTogIgotCQkgICAgICAgIiVkIE1IelxuIiwgZnJlcV9taHopOworCWFsZ19kYXRhID0ga3phbGxvYyhzaXplb2YoKmFsZ19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGdfZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9remFsbG9jOwogCX0KIAotCWkyY19wbngtPmFkYXB0ZXItPmFsZ28gPSAmcG54X2FsZ29yaXRobTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhbGdfZGF0YSk7CiAKLQlhbGdfZGF0YSA9IGkyY19wbngtPmFkYXB0ZXItPmFsZ29fZGF0YTsKLQlpbml0X3RpbWVyKCZhbGdfZGF0YS0+bWlmLnRpbWVyKTsKLQlhbGdfZGF0YS0+bWlmLnRpbWVyLmZ1bmN0aW9uID0gaTJjX3BueF90aW1lb3V0OwotCWFsZ19kYXRhLT5taWYudGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWkyY19wbngtPmFkYXB0ZXI7CisJc3RybGNweShhbGdfZGF0YS0+YWRhcHRlci5uYW1lLCBpMmNfcG54LT5uYW1lLAorCQlzaXplb2YoYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSkpOworCWFsZ19kYXRhLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWFsZ19kYXRhLT5hZGFwdGVyLmFsZ28gPSAmcG54X2FsZ29yaXRobTsKKwlhbGdfZGF0YS0+YWRhcHRlci5hbGdvX2RhdGEgPSBhbGdfZGF0YTsKKwlhbGdfZGF0YS0+YWRhcHRlci5uciA9IHBkZXYtPmlkOworCWFsZ19kYXRhLT5pMmNfcG54ID0gaTJjX3BueDsKIAotCS8qIFJlZ2lzdGVyIEkvTyByZXNvdXJjZSAqLwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFLAotCQkJCXBkZXYtPm5hbWUpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJICAgICAgICJJL08gcmVnaW9uIDB4JTA4eCBmb3IgSTJDIGFscmVhZHkgaW4gdXNlLlxuIiwKLQkJICAgICAgIGFsZ19kYXRhLT5iYXNlKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwlhbGdfZGF0YS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGFsZ19kYXRhLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoYWxnX2RhdGEtPmNsayk7CiAJCWdvdG8gb3V0X2RydmRhdGE7CiAJfQogCi0JaWYgKCEoYWxnX2RhdGEtPmlvYWRkciA9Ci0JCQkodTMyKWlvcmVtYXAoYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpKSkgeworCWluaXRfdGltZXIoJmFsZ19kYXRhLT5taWYudGltZXIpOworCWFsZ19kYXRhLT5taWYudGltZXIuZnVuY3Rpb24gPSBpMmNfcG54X3RpbWVvdXQ7CisJYWxnX2RhdGEtPm1pZi50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWxnX2RhdGE7CisKKwkvKiBSZWdpc3RlciBJL08gcmVzb3VyY2UgKi8KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpMmNfcG54LT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFLAorCQkJCXBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJICAgICAgICJJL08gcmVnaW9uIDB4JTA4eCBmb3IgSTJDIGFscmVhZHkgaW4gdXNlLlxuIiwKKwkJICAgICAgIGkyY19wbngtPmJhc2UpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9jbGtnZXQ7CisJfQorCisJYWxnX2RhdGEtPmlvYWRkciA9IGlvcmVtYXAoaTJjX3BueC0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJaWYgKCFhbGdfZGF0YS0+aW9hZGRyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IGlvcmVtYXAgSTJDIEkvTyByZWdpb25cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KIAotCWkyY19wbngtPnNldF9jbG9ja19ydW4ocGRldik7CisJcmV0ID0gY2xrX2VuYWJsZShhbGdfZGF0YS0+Y2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKworCWZyZXEgPSBjbGtfZ2V0X3JhdGUoYWxnX2RhdGEtPmNsayk7CiAKIAkvKgogCSAqIENsb2NrIERpdmlzb3IgSGlnaCBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGNsb2NrcwpAQCAtNjIwLDQ1ICs2NDIsNDcgQEAKIAkgKiB0aGUgZGVnbGl0Y2hpbmcgZmlsdGVyIGxlbmd0aC4KIAkgKi8KIAotCXRtcCA9ICgoZnJlcV9taHogKiAxMDAwKSAvIEkyQ19QTlhfU1BFRURfS0haKSAvIDIgLSAyOworCXRtcCA9ICgoZnJlcSAvIDEwMDApIC8gSTJDX1BOWF9TUEVFRF9LSFopIC8gMiAtIDI7CiAJaW93cml0ZTMyKHRtcCwgSTJDX1JFR19DS0goYWxnX2RhdGEpKTsKIAlpb3dyaXRlMzIodG1wLCBJMkNfUkVHX0NLTChhbGdfZGF0YSkpOwogCiAJaW93cml0ZTMyKG1jbnRybF9yZXNldCwgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKIAlpZiAod2FpdF9yZXNldChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKSkgewogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF91bm1hcDsKKwkJZ290byBvdXRfY2xvY2s7CiAJfQogCWluaXRfY29tcGxldGlvbigmYWxnX2RhdGEtPm1pZi5jb21wbGV0ZSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShhbGdfZGF0YS0+aXJxLCBpMmNfcG54X2ludGVycnVwdCwKLQkJCTAsIHBkZXYtPm5hbWUsIGkyY19wbngtPmFkYXB0ZXIpOworCXJldCA9IHJlcXVlc3RfaXJxKGkyY19wbngtPmlycSwgaTJjX3BueF9pbnRlcnJ1cHQsCisJCQkwLCBwZGV2LT5uYW1lLCBhbGdfZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfY2xvY2s7CiAKIAkvKiBSZWdpc3RlciB0aGlzIGFkYXB0ZXIgd2l0aCB0aGUgSTJDIHN1YnN5c3RlbSAqLwotCWkyY19wbngtPmFkYXB0ZXItPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWkyY19wbngtPmFkYXB0ZXItPm5yID0gcGRldi0+aWQ7Ci0JcmV0ID0gaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKGkyY19wbngtPmFkYXB0ZXIpOworCXJldCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmYWxnX2RhdGEtPmFkYXB0ZXIpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkyQzogRmFpbGVkIHRvIGFkZCBidXNcbiIpOwogCQlnb3RvIG91dF9pcnE7CiAJfQogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IE1hc3RlciBhdCAlIzh4LCBpcnEgJWQuXG4iLAotCSAgICAgICBpMmNfcG54LT5hZGFwdGVyLT5uYW1lLCBhbGdfZGF0YS0+YmFzZSwgYWxnX2RhdGEtPmlycSk7CisJICAgICAgIGFsZ19kYXRhLT5hZGFwdGVyLm5hbWUsIGkyY19wbngtPmJhc2UsIGkyY19wbngtPmlycSk7CiAKIAlyZXR1cm4gMDsKIAogb3V0X2lycToKLQlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBpMmNfcG54LT5hZGFwdGVyKTsKKwlmcmVlX2lycShpMmNfcG54LT5pcnEsIGFsZ19kYXRhKTsKIG91dF9jbG9jazoKLQlpMmNfcG54LT5zZXRfY2xvY2tfc3RvcChwZGV2KTsKKwljbGtfZGlzYWJsZShhbGdfZGF0YS0+Y2xrKTsKIG91dF91bm1hcDoKLQlpb3VubWFwKCh2b2lkICopYWxnX2RhdGEtPmlvYWRkcik7CisJaW91bm1hcChhbGdfZGF0YS0+aW9hZGRyKTsKIG91dF9yZWxlYXNlOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19wbngtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOworb3V0X2Nsa2dldDoKKwljbGtfcHV0KGFsZ19kYXRhLT5jbGspOwogb3V0X2RydmRhdGE6CisJa2ZyZWUoYWxnX2RhdGEpOworZXJyX2t6YWxsb2M6CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTY2NiwxNSArNjkwLDE2IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGkyY19wbnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGkyY19wbnhfZGF0YSAqaTJjX3BueCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGkyY19wbngtPmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGkyY19wbnhfZGF0YSAqaTJjX3BueCA9IGFsZ19kYXRhLT5pMmNfcG54OwogCi0JZnJlZV9pcnEoYWxnX2RhdGEtPmlycSwgaTJjX3BueC0+YWRhcHRlcik7Ci0JaTJjX2RlbF9hZGFwdGVyKGFkYXApOwotCWkyY19wbngtPnNldF9jbG9ja19zdG9wKHBkZXYpOwotCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOworCWZyZWVfaXJxKGkyY19wbngtPmlycSwgYWxnX2RhdGEpOworCWkyY19kZWxfYWRhcHRlcigmYWxnX2RhdGEtPmFkYXB0ZXIpOworCWNsa19kaXNhYmxlKGFsZ19kYXRhLT5jbGspOworCWlvdW5tYXAoYWxnX2RhdGEtPmlvYWRkcik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19wbngtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOworCWNsa19wdXQoYWxnX2RhdGEtPmNsayk7CisJa2ZyZWUoYWxnX2RhdGEpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCmluZGV4IDg0NDU2OWYuLjU1YTcxMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCkBAIC0zNjksNyArMzY5LDcgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczU1OTVfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM1NTk1X2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJXzUwMykgfSwgCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKaW5kZXggNjhjZmY3YS4uMjMwOWM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCkBAIC00NjgsNyArNDY4LDcgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczYzMF9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczYzMF9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSSwgUENJX0RFVklDRV9JRF9TSV81MDMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfTFBDKSB9LAogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKaW5kZXggMTY0OTk2My4uZDQzZDhmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczk2eF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM5NnhfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfU01CVVMpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCmluZGV4IGUyOWI2ZDUuLmI1YjFiYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKQEAgLTMxLDExICszMSwxMyBAQAogI2RlZmluZSBDTURfSTJDX0lPX0JFR0lOCSgxPDwwKQogI2RlZmluZSBDTURfSTJDX0lPX0VORAkJKDE8PDEpCiAKLS8qIGkyYyBiaXQgZGVsYXksIGRlZmF1bHQgaXMgMTB1cyAtPiAxMDBrSHogKi8KKy8qIGkyYyBiaXQgZGVsYXksIGRlZmF1bHQgaXMgMTB1cyAtPiAxMDBrSHogbWF4CisgICAoaW4gcHJhY3RpY2UsIGR1ZSB0byBhZGRpdGlvbmFsIGRlbGF5cyBpbiB0aGUgaTJjIGJpdGJhbmdpbmcKKyAgIGNvZGUgdGhpcyByZXN1bHRzIGluIGEgaTJjIGNsb2NrIG9mIGFib3V0IDUwa0h6KSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbGF5ID0gMTA7CiBtb2R1bGVfcGFyYW0oZGVsYXksIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiYml0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcywgIgotCQkgImUuZy4gMTAgZm9yIDEwMGtIeiAoZGVmYXVsdCBpcyAxMDBrSHopIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiYml0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcyAiCisJCSAiKGRlZmF1bHQgaXMgMTB1cyBmb3IgMTAwa0h6IG1heCkiKTsKIAogc3RhdGljIGludCB1c2JfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbWQsCiAJCSAgICBpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqZGF0YSwgaW50IGxlbik7CkBAIC0xMzcsNyArMTM5LDcgQEAKICAqIEZ1dHVyZSBUZWNobm9sb2d5IERldmljZXMgSW50ZXJuYXRpb25hbCBMdGQuLCBsYXRlciBhIHBhaXIgd2FzCiAgKiBib3VnaHQgZnJvbSBFWlByb3RvdHlwZXMKICAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGkyY190aW55X3VzYl90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpMmNfdGlueV91c2JfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNDAzLCAweGM2MzEpIH0sICAgLyogRlRESSAqLwogCXsgVVNCX0RFVklDRSgweDFjNDAsIDB4MDUzNCkgfSwgICAvKiBFWlByb3RvdHlwZXMgKi8KIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCmluZGV4IDhiMjRmMTkuLmRlNzgyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYwpAQCAtODksNyArODksNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ1ODZiX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ1ODZiX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzMpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggYTg0YTkwOS4uZDU3MjkyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC00NDQsNyArNDQ0LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2dDU5Nl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2dDU5Nl9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5Nl8zKSwKIAkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2Ql8zKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDEwYmU3YjUuLjMyMDJhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJpMmMtY29yZS5oIgpAQCAtMTg0LDYgKzE4NSw1MiBAQAogI2RlZmluZSBpMmNfZGV2aWNlX3BtX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgaW50IGkyY19kZXZpY2VfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CisKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gMDsKKwlwbSA9IGRldi0+ZHJpdmVyLT5wbTsKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9zdXNwZW5kKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworfQorCitzdGF0aWMgaW50IGkyY19kZXZpY2VfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKworCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybiAwOworCXBtID0gZGV2LT5kcml2ZXItPnBtOworCWlmICghcG0gfHwgIXBtLT5ydW50aW1lX3Jlc3VtZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IGkyY19kZXZpY2VfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXBtID0gZGV2LT5kcml2ZXItPnBtOworCWlmIChwbSAmJiBwbS0+cnVudGltZV9pZGxlKSB7CisJCXJldCA9IHBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHBtX3J1bnRpbWVfc3VzcGVuZChkZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgaTJjX2RldmljZV9ydW50aW1lX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpMmNfZGV2aWNlX3J1bnRpbWVfcmVzdW1lCU5VTEwKKyNkZWZpbmUgaTJjX2RldmljZV9ydW50aW1lX2lkbGUJCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgaW50IGkyY19kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwpAQCAtMjUxLDYgKzI5OCw5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTJjX2RldmljZV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBpMmNfZGV2aWNlX3BtX3N1c3BlbmQsCiAJLnJlc3VtZSA9IGkyY19kZXZpY2VfcG1fcmVzdW1lLAorCS5ydW50aW1lX3N1c3BlbmQgPSBpMmNfZGV2aWNlX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBpMmNfZGV2aWNlX3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUgPSBpMmNfZGV2aWNlX3J1bnRpbWVfaWRsZSwKIH07CiAKIHN0cnVjdCBidXNfdHlwZSBpMmNfYnVzX3R5cGUgPSB7CkBAIC0xMTMzLDcgKzExODMsNyBAQAogICogaTJjX21hc3Rlcl9zZW5kIC0gaXNzdWUgYSBzaW5nbGUgSTJDIG1lc3NhZ2UgaW4gbWFzdGVyIHRyYW5zbWl0IG1vZGUKICAqIEBjbGllbnQ6IEhhbmRsZSB0byBzbGF2ZSBkZXZpY2UKICAqIEBidWY6IERhdGEgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHNsYXZlCi0gKiBAY291bnQ6IEhvdyBtYW55IGJ5dGVzIHRvIHdyaXRlCisgKiBAY291bnQ6IEhvdyBtYW55IGJ5dGVzIHRvIHdyaXRlLCBtdXN0IGJlIGxlc3MgdGhhbiA2NGsgc2luY2UgbXNnLmxlbiBpcyB1MTYKICAqCiAgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KICAqLwpAQCAtMTE2MCw3ICsxMjEwLDcgQEAKICAqIGkyY19tYXN0ZXJfcmVjdiAtIGlzc3VlIGEgc2luZ2xlIEkyQyBtZXNzYWdlIGluIG1hc3RlciByZWNlaXZlIG1vZGUKICAqIEBjbGllbnQ6IEhhbmRsZSB0byBzbGF2ZSBkZXZpY2UKICAqIEBidWY6IFdoZXJlIHRvIHN0b3JlIGRhdGEgcmVhZCBmcm9tIHNsYXZlCi0gKiBAY291bnQ6IEhvdyBtYW55IGJ5dGVzIHRvIHJlYWQKKyAqIEBjb3VudDogSG93IG1hbnkgYnl0ZXMgdG8gcmVhZCwgbXVzdCBiZSBsZXNzIHRoYW4gNjRrIHNpbmNlIG1zZy5sZW4gaXMgdTE2CiAgKgogICogUmV0dXJucyBuZWdhdGl2ZSBlcnJubywgb3IgZWxzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1zbWJ1cy5jIGIvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxMjc4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1zbWJ1cy5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogaTJjLXNtYnVzLmMgLSBTTUJ1cyBleHRlbnNpb25zIHRvIHRoZSBJMkMgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLXNtYnVzLmg+CisKK3N0cnVjdCBpMmNfc21idXNfYWxlcnQgeworCXVuc2lnbmVkIGludAkJYWxlcnRfZWRnZV90cmlnZ2VyZWQ6MTsKKwlpbnQJCQlpcnE7CisJc3RydWN0IHdvcmtfc3RydWN0CWFsZXJ0OworCXN0cnVjdCBpMmNfY2xpZW50CSphcmE7CQkvKiBBbGVydCByZXNwb25zZSBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgYWxlcnRfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQJCWFkZHI7CisJdTgJCQlmbGFnOjE7Cit9OworCisvKiBJZiB0aGlzIGlzIHRoZSBhbGVydGluZyBkZXZpY2UsIG5vdGlmeSBpdHMgZHJpdmVyICovCitzdGF0aWMgaW50IHNtYnVzX2RvX2FsZXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkcnApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CisJc3RydWN0IGFsZXJ0X2RhdGEgKmRhdGEgPSBhZGRycDsKKworCWlmICghY2xpZW50IHx8IGNsaWVudC0+YWRkciAhPSBkYXRhLT5hZGRyKQorCQlyZXR1cm4gMDsKKwlpZiAoY2xpZW50LT5mbGFncyAmIEkyQ19DTElFTlRfVEVOKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRHJpdmVycyBzaG91bGQgZWl0aGVyIGRpc2FibGUgYWxlcnRzLCBvciBwcm92aWRlIGF0IGxlYXN0CisJICogYSBtaW5pbWFsIGhhbmRsZXIuICBMb2NrIHNvIGNsaWVudC0+ZHJpdmVyIHdvbid0IGNoYW5nZS4KKwkgKi8KKwlkb3duKCZkZXYtPnNlbSk7CisJaWYgKGNsaWVudC0+ZHJpdmVyKSB7CisJCWlmIChjbGllbnQtPmRyaXZlci0+YWxlcnQpCisJCQljbGllbnQtPmRyaXZlci0+YWxlcnQoY2xpZW50LCBkYXRhLT5mbGFnKTsKKwkJZWxzZQorCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAibm8gZHJpdmVyIGFsZXJ0KCkhXG4iKTsKKwl9IGVsc2UKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJhbGVydCB3aXRoIG5vIGRyaXZlclxuIik7CisJdXAoJmRldi0+c2VtKTsKKworCS8qIFN0b3AgaXRlcmF0aW5nIGFmdGVyIHdlIGZpbmQgdGhlIGRldmljZSAqLworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBUaGUgYWxlcnQgSVJRIGhhbmRsZXIgbmVlZHMgdG8gaGFuZCB3b3JrIG9mZiB0byBhIHRhc2sgd2hpY2ggY2FuIGlzc3VlCisgKiBTTUJ1cyBjYWxscywgYmVjYXVzZSB0aG9zZSBzbGVlcGluZyBjYWxscyBjYW4ndCBiZSBtYWRlIGluIElSUSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBzbWJ1c19hbGVydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGkyY19zbWJ1c19hbGVydCAqYWxlcnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmFyYTsKKwl1bnNpZ25lZCBzaG9ydCBwcmV2X2FkZHIgPSAwOwkvKiBOb3QgYSB2YWxpZCBhZGRyZXNzICovCisKKwlhbGVydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0LCBhbGVydCk7CisJYXJhID0gYWxlcnQtPmFyYTsKKworCWZvciAoOzspIHsKKwkJczMyIHN0YXR1czsKKwkJc3RydWN0IGFsZXJ0X2RhdGEgZGF0YTsKKworCQkvKgorCQkgKiBEZXZpY2VzIHdpdGggcGVuZGluZyBhbGVydHMgcmVwbHkgaW4gYWRkcmVzcyBvcmRlciwgbG93CisJCSAqIHRvIGhpZ2gsIGJlY2F1c2Ugb2Ygc2xhdmUgdHJhbnNtaXQgYXJiaXRyYXRpb24uICBBZnRlcgorCQkgKiByZXNwb25kaW5nLCBhbiBTTUJ1cyBkZXZpY2Ugc3RvcHMgYXNzZXJ0aW5nIFNNQkFMRVJUIy4KKwkJICoKKwkJICogTm90ZSB0aGF0IFNNQnVzIDIuMCByZXNlcnZlcyAxMC1iaXQgYWRkcmVzZXNzIGZvciBmdXR1cmUKKwkJICogdXNlLiAgV2UgbmVpdGhlciBoYW5kbGUgdGhlbSwgbm9yIHRyeSB0byB1c2UgUEVDIGhlcmUuCisJCSAqLworCQlzdGF0dXMgPSBpMmNfc21idXNfcmVhZF9ieXRlKGFyYSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJZGF0YS5mbGFnID0gc3RhdHVzICYgMTsKKwkJZGF0YS5hZGRyID0gc3RhdHVzID4+IDE7CisKKwkJaWYgKGRhdGEuYWRkciA9PSBwcmV2X2FkZHIpIHsKKwkJCWRldl93YXJuKCZhcmEtPmRldiwgIkR1cGxpY2F0ZSBTTUJBTEVSVCMgZnJvbSBkZXYgIgorCQkJCSIweCUwMngsIHNraXBwaW5nXG4iLCBkYXRhLmFkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZGV2X2RiZygmYXJhLT5kZXYsICJTTUJBTEVSVCMgZnJvbSBkZXYgMHglMDJ4LCBmbGFnICVkXG4iLAorCQkJZGF0YS5hZGRyLCBkYXRhLmZsYWcpOworCisJCS8qIE5vdGlmeSBkcml2ZXIgZm9yIHRoZSBkZXZpY2Ugd2hpY2ggaXNzdWVkIHRoZSBhbGVydCAqLworCQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmFyYS0+YWRhcHRlci0+ZGV2LCAmZGF0YSwKKwkJCQkgICAgICBzbWJ1c19kb19hbGVydCk7CisJCXByZXZfYWRkciA9IGRhdGEuYWRkcjsKKwl9CisKKwkvKiBXZSBoYW5kbGVkIGFsbCBhbGVydHM7IHJlLWVuYWJsZSBsZXZlbC10cmlnZ2VyZWQgSVJRcyAqLworCWlmICghYWxlcnQtPmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkKQorCQllbmFibGVfaXJxKGFsZXJ0LT5pcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc21iYWxlcnRfaXJxKGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGkyY19zbWJ1c19hbGVydCAqYWxlcnQgPSBkOworCisJLyogRGlzYWJsZSBsZXZlbC10cmlnZ2VyZWQgSVJRcyB1bnRpbCB3ZSBoYW5kbGUgdGhlbSAqLworCWlmICghYWxlcnQtPmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkKQorCQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKworCXNjaGVkdWxlX3dvcmsoJmFsZXJ0LT5hbGVydCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBTZXR1cCBTTUJBTEVSVCMgaW5mcmFzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbnQgc21iYWxlcnRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmFyYSwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfc21idXNfYWxlcnRfc2V0dXAgKnNldHVwID0gYXJhLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0ICphbGVydDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhcmEtPmFkYXB0ZXI7CisJaW50IHJlczsKKworCWFsZXJ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19zbWJ1c19hbGVydCksIEdGUF9LRVJORUwpOworCWlmICghYWxlcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJYWxlcnQtPmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkID0gc2V0dXAtPmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkOworCWFsZXJ0LT5pcnEgPSBzZXR1cC0+aXJxOworCUlOSVRfV09SSygmYWxlcnQtPmFsZXJ0LCBzbWJ1c19hbGVydCk7CisJYWxlcnQtPmFyYSA9IGFyYTsKKworCWlmIChzZXR1cC0+aXJxID4gMCkgeworCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZhcmEtPmRldiwgc2V0dXAtPmlycSwgc21iYWxlcnRfaXJxLAorCQkJCSAgICAgICAwLCAic21idXNfYWxlcnQiLCBhbGVydCk7CisJCWlmIChyZXMpIHsKKwkJCWtmcmVlKGFsZXJ0KTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoYXJhLCBhbGVydCk7CisJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgInN1cHBvcnRzIFNNQkFMRVJUIywgJXMgdHJpZ2dlclxuIiwKKwkJIHNldHVwLT5hbGVydF9lZGdlX3RyaWdnZXJlZCA/ICJlZGdlIiA6ICJsZXZlbCIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIElSUSByZXNvdXJjZSBpcyBtYW5hZ2VkIHNvIGl0IGlzIGZyZWVkIGF1dG9tYXRpY2FsbHkgKi8KK3N0YXRpYyBpbnQgc21iYWxlcnRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICphcmEpCit7CisJc3RydWN0IGkyY19zbWJ1c19hbGVydCAqYWxlcnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYXJhKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFsZXJ0LT5hbGVydCk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoYXJhLCBOVUxMKTsKKwlrZnJlZShhbGVydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzbWJhbGVydF9pZHNbXSA9IHsKKwl7ICJzbWJ1c19hbGVydCIsIDAgfSwKKwl7IC8qIExJU1QgRU5EICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc21iYWxlcnRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNtYmFsZXJ0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJzbWJ1c19hbGVydCIsCisJfSwKKwkucHJvYmUJCT0gc21iYWxlcnRfcHJvYmUsCisJLnJlbW92ZQkJPSBzbWJhbGVydF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gc21iYWxlcnRfaWRzLAorfTsKKworLyoqCisgKiBpMmNfc2V0dXBfc21idXNfYWxlcnQgLSBTZXR1cCBTTUJ1cyBhbGVydCBzdXBwb3J0CisgKiBAYWRhcHRlcjogdGhlIHRhcmdldCBhZGFwdGVyCisgKiBAc2V0dXA6IHNldHVwIGRhdGEgZm9yIHRoZSBTTUJ1cyBhbGVydCBoYW5kbGVyCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKKyAqCisgKiBTZXR1cCBoYW5kbGluZyBvZiB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wgb24gYSBnaXZlbiBJMkMgYnVzIHNlZ21lbnQuCisgKgorICogSGFuZGxpbmcgY2FuIGJlIGRvbmUgZWl0aGVyIHRocm91Z2ggb3VyIElSUSBoYW5kbGVyLCBvciBieSB0aGUKKyAqIGFkYXB0ZXIgKGZyb20gaXRzIGhhbmRsZXIsIHBlcmlvZGljIHBvbGxpbmcsIG9yIHdoYXRldmVyKS4KKyAqCisgKiBOT1RFIHRoYXQgaWYgd2UgbWFuYWdlIHRoZSBJUlEsIHdlICpNVVNUKiBrbm93IGlmIGl0J3MgbGV2ZWwgb3IKKyAqIGVkZ2UgdHJpZ2dlcmVkIGluIG9yZGVyIHRvIGhhbmQgaXQgdG8gdGhlIHdvcmtxdWV1ZSBjb3JyZWN0bHkuCisgKiBJZiB0cmlnZ2VyaW5nIHRoZSBhbGVydCBzZWVtcyB0byB3ZWRnZSB0aGUgc3lzdGVtLCB5b3UgcHJvYmFibHkKKyAqIHNob3VsZCBoYXZlIHNhaWQgaXQncyBsZXZlbCB0cmlnZ2VyZWQuCisgKgorICogVGhpcyByZXR1cm5zIHRoZSBhcmEgY2xpZW50LCB3aGljaCBzaG91bGQgYmUgc2F2ZWQgZm9yIGxhdGVyIHVzZSB3aXRoCisgKiBpMmNfaGFuZGxlX3NtYnVzX2FsZXJ0KCkgYW5kIHVsdGltYXRlbHkgaTJjX3VucmVnaXN0ZXJfZGV2aWNlKCk7IG9yIE5VTEwKKyAqIHRvIGluZGljYXRlIGFuIGVycm9yLgorICovCitzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX3NldHVwX3NtYnVzX2FsZXJ0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIHN0cnVjdCBpMmNfc21idXNfYWxlcnRfc2V0dXAgKnNldHVwKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBhcmFfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oInNtYnVzX2FsZXJ0IiwgMHgwYyksCisJCS5wbGF0Zm9ybV9kYXRhID0gc2V0dXAsCisJfTsKKworCXJldHVybiBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmYXJhX2JvYXJkX2luZm8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJjX3NldHVwX3NtYnVzX2FsZXJ0KTsKKworLyoqCisgKiBpMmNfaGFuZGxlX3NtYnVzX2FsZXJ0IC0gSGFuZGxlIGFuIFNNQnVzIGFsZXJ0CisgKiBAYXJhOiB0aGUgQVJBIGNsaWVudCBvbiB0aGUgcmVsZXZhbnQgYWRhcHRlcgorICogQ29udGV4dDogY2FuJ3Qgc2xlZXAKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gYW4gSTJDIGJ1cyBkcml2ZXIncyBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuIEl0IHdpbGwgc2NoZWR1bGUgdGhlIGFsZXJ0IHdvcmssIGluIHR1cm4gY2FsbGluZyB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgSTJDIGRldmljZSBkcml2ZXIncyBhbGVydCBmdW5jdGlvbi4KKyAqCisgKiBJdCBpcyBhc3N1bWVkIHRoYXQgYXJhIGlzIGEgdmFsaWQgaTJjIGNsaWVudCBwcmV2aW91c2x5IHJldHVybmVkIGJ5CisgKiBpMmNfc2V0dXBfc21idXNfYWxlcnQoKS4KKyAqLworaW50IGkyY19oYW5kbGVfc21idXNfYWxlcnQoc3RydWN0IGkyY19jbGllbnQgKmFyYSkKK3sKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0ICphbGVydCA9IGkyY19nZXRfY2xpZW50ZGF0YShhcmEpOworCisJcmV0dXJuIHNjaGVkdWxlX3dvcmsoJmFsZXJ0LT5hbGVydCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMmNfaGFuZGxlX3NtYnVzX2FsZXJ0KTsKKworc3RhdGljIGludCBfX2luaXQgaTJjX3NtYnVzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnNtYmFsZXJ0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpMmNfc21idXNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzbWJhbGVydF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpMmNfc21idXNfaW5pdCk7Cittb2R1bGVfZXhpdChpMmNfc21idXNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTUJ1cyBwcm90b2NvbCBleHRlbnNpb25zIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCA4N2NlZjBjLi4zNDlhNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC01Niw4ICs1Niw4IEBACiAJY2hhbl90YWJfdCAqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QgKmRwOwogCi0JaWYoIXB1dF9kZXN0X2ZsYWdzKGFod2lmLT5yeF9jaGFuLCAodm9pZCopYWRkciwgY291bnQgPDwgMSwgCi0JCQkgICBERE1BX0ZMQUdTX05PSUUpKSB7CisJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoYWh3aWYtPnJ4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICBjb3VudCA8PCAxLCBERE1BX0ZMQUdTX05PSUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtNzQsOCArNzQsOCBAQAogCWNoYW5fdGFiX3QgKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190ICpkcDsKIAotCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAodm9pZCopYWRkciwKLQkJCSAgICAgY291bnQgPDwgMSwgRERNQV9GTEFHU19OT0lFKSkgeworCWlmICghYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoYWh3aWYtPnR4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICAgIGNvdW50IDw8IDEsIERETUFfRkxBR1NfTk9JRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CkBAIC0yNDYsMTcgKzI0NiwxNCBAQAogCQkJCWZsYWdzID0gRERNQV9GTEFHU19OT0lFOwogCiAJCQlpZiAoaXN3cml0ZSkgewotCQkJCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAKLQkJCQkJCSAgICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgICAgdGMsIGZsYWdzKSkgeyAKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGFod2lmLT50eF9jaGFuLAorCQkJCQlzZ19waHlzKHNnKSwgdGMsIGZsYWdzKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgCiAJCQkJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJCX0KLQkJCX0gZWxzZSAKLQkJCXsKLQkJCQlpZighcHV0X2Rlc3RfZmxhZ3MoYWh3aWYtPnJ4X2NoYW4sIAotCQkJCQkJICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgIHRjLCBmbGFncykpIHsgCisJCQl9IGVsc2UgIHsKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfZGVzdChhaHdpZi0+cnhfY2hhbiwKKwkJCQkJc2dfcGh5cyhzZyksIHRjLCBmbGFncykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIAogCQkJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBjMGNmNDVhLi41Y2IwMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTEwOCwxMSArMTA4LDExIEBACiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQgaWRlX2dldF9kZXZfaGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYWNwaV9oYW5kbGUgKmhhbmRsZSwKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgKnBjaWRldmZuKQorCQkJICAgICAgIHU2NCAqcGNpZGV2Zm4pCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJdW5zaWduZWQgaW50IGJ1cywgZGV2bnVtLCBmdW5jOwotCWFjcGlfaW50ZWdlciBhZGRyOworCXU2NCBhZGRyOwogCWFjcGlfaGFuZGxlIGRldl9oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvCSpkaW5mbyA9IE5VTEw7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAlkZXZudW0gPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CiAJZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKIAkvKiBBQ1BJIF9BRFIgZW5jb2RpbmcgZm9yIFBDSSBidXM6ICovCi0JYWRkciA9IChhY3BpX2ludGVnZXIpKGRldm51bSA8PCAxNiB8IGZ1bmMpOworCWFkZHIgPSAodTY0KShkZXZudW0gPDwgMTYgfCBmdW5jKTsKIAogCURFQlBSSU5UKCJFTlRFUjogcGNpICUwMng6JTAyeC4lMDF4XG4iLCBidXMsIGRldm51bSwgZnVuYyk7CiAKQEAgLTE2OSw3ICsxNjksNyBAQAogewogCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSBod2lmLT5nZW5kZXYucGFyZW50OwogCWFjcGlfaGFuZGxlCQl1bmluaXRpYWxpemVkX3ZhcihkZXZfaGFuZGxlKTsKLQlhY3BpX2ludGVnZXIJCXBjaWRldmZuOworCXU2NAkJCXBjaWRldmZuOwogCWFjcGlfaGFuZGxlCQljaGFuX2hhbmRsZTsKIAlpbnQJCQllcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IDdmODc4MDEuLjNiMTI4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtNjc5LDcgKzY3OSw3IEBACiAJCWlmIChtYXhfcyA+IGh3aWYtPnJxc2l6ZSkKIAkJCW1heF9zID0gaHdpZi0+cnFzaXplOwogCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfcyk7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBtYXhfcyk7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1heCByZXF1ZXN0IHNpemU6ICVkS2lCXG4iLCBkcml2ZS0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBmZWZiZGZjLi5lZmQ5MDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC00ODYsNyArNDg2LDcgQEAKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19aSVBfRFJJVkU7CiAJCS8qIFRoaXMgdmFsdWUgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSAvcHJvYy9pZGUvaGR4L3NldHRpbmdzICovCiAJCWRyaXZlLT5wY19kZWxheSA9IElERUZMT1BQWV9QQ19ERUxBWTsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoZHJpdmUtPnF1ZXVlLCA2NCk7CiAJfQogCiAJLyoKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCSAqIG5hc3R5IGNsaWNraW5nIG5vaXNlcyB3aXRob3V0IGl0LCBzbyBwbGVhc2UgZG9uJ3QgcmVtb3ZlIHRoaXMuCiAJICovCiAJaWYgKHN0cm5jbXAoKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdLCAiSU9NRUdBIENsaWshIiwgMTEpID09IDApIHsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoZHJpdmUtPnF1ZXVlLCA2NCk7CiAJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfQ0xJS19EUklWRTsKIAkJLyogSU9NRUdBIENsaWshIGRyaXZlcyBkbyBub3Qgc3VwcG9ydCBsb2NrL3VubG9jayBjb21tYW5kcyAqLwogCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDRkNzZiYTQuLmY4YzFhZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC03NzQsNyArNzc0LDcgQEAKIAogCWlmIChod2lmLT5ycXNpemUgPCBtYXhfc2VjdG9ycykKIAkJbWF4X3NlY3RvcnMgPSBod2lmLT5ycXNpemU7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIG1heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4X3NlY3RvcnMpOwogCiAjaWZkZWYgQ09ORklHX1BDSQogCS8qIFdoZW4gd2UgaGF2ZSBhbiBJT01NVSwgd2UgbWF5IGhhdmUgYSBwcm9ibGVtIHdoZXJlIHBjaV9tYXBfc2coKQpAQCAtNzkwLDggKzc5MCw3IEBACiAJCW1heF9zZ19lbnRyaWVzID4+PSAxOwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgbWF4X3NnX2VudHJpZXMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBtYXhfc2dfZW50cmllcyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtYXhfc2dfZW50cmllcyk7CiAKIAkvKiBhc3NpZ24gZHJpdmUgcXVldWUgKi8KIAlkcml2ZS0+cXVldWUgPSBxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCBmMTk5ODk2Li5jODg2OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMjAyMCw3ICsyMDIwLDcgQEAKIAlpZiAobHUtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX1BPV0VSX0NPTkRJVElPTikKIAkJc2Rldi0+c3RhcnRfc3RvcF9wd3JfY29uZCA9IDE7CiAJaWYgKGx1LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBTQlAyX01BWF9TRUdfU0laRSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCmluZGV4IGY1MDRjOWIuLjFiMDliNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCkBAIC0xMjE1LDE1ICsxMjE1LDE4IEBACiAKIAl1Y21fZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGliX3VjbV9kZXZpY2UsIGRldik7CiAJY2Rldl9kZWwoJnVjbV9kZXYtPmNkZXYpOwotCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOworCWlmICh1Y21fZGV2LT5kZXZudW0gPCBJQl9VQ01fTUFYX0RFVklDRVMpCisJCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOworCWVsc2UKKwkJY2xlYXJfYml0KHVjbV9kZXYtPmRldm51bSAtIElCX1VDTV9NQVhfREVWSUNFUywgZGV2X21hcCk7CiAJa2ZyZWUodWNtX2Rldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVjbV9mb3BzID0gewotCS5vd25lciAJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gCSA9IGliX3VjbV9vcGVuLAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkgPSBpYl91Y21fb3BlbiwKIAkucmVsZWFzZSA9IGliX3VjbV9jbG9zZSwKLQkud3JpdGUgCSA9IGliX3VjbV93cml0ZSwKKwkud3JpdGUJID0gaWJfdWNtX3dyaXRlLAogCS5wb2xsICAgID0gaWJfdWNtX3BvbGwsCiB9OwogCkBAIC0xMjM3LDggKzEyNDAsMzIgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CiAKK3N0YXRpYyBkZXZfdCBvdmVyZmxvd19tYWo7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAob3ZlcmZsb3dfbWFwLCBJQl9VQ01fTUFYX0RFVklDRVMpOworc3RhdGljIGludCBmaW5kX292ZXJmbG93X2Rldm51bSh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW92ZXJmbG93X21haikgeworCQlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZvdmVyZmxvd19tYWosIDAsIElCX1VDTV9NQVhfREVWSUNFUywKKwkJCQkJICAiaW5maW5pYmFuZF9jbSIpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVjbTogY291bGRuJ3QgcmVnaXN0ZXIgZHluYW1pYyBkZXZpY2UgbnVtYmVyXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG92ZXJmbG93X21hcCwgSUJfVUNNX01BWF9ERVZJQ0VTKTsKKwlpZiAocmV0ID49IElCX1VDTV9NQVhfREVWSUNFUykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgaWJfdWNtX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogeworCWludCBkZXZudW07CisJZGV2X3QgYmFzZTsKIAlzdHJ1Y3QgaWJfdWNtX2RldmljZSAqdWNtX2RldjsKIAogCWlmICghZGV2aWNlLT5hbGxvY191Y29udGV4dCB8fApAQCAtMTI1MSwxNiArMTI3OCwyNSBAQAogCiAJdWNtX2Rldi0+aWJfZGV2ID0gZGV2aWNlOwogCi0JdWNtX2Rldi0+ZGV2bnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VQ01fTUFYX0RFVklDRVMpOwotCWlmICh1Y21fZGV2LT5kZXZudW0gPj0gSUJfVUNNX01BWF9ERVZJQ0VTKQotCQlnb3RvIGVycjsKKwlkZXZudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXAsIElCX1VDTV9NQVhfREVWSUNFUyk7CisJaWYgKGRldm51bSA+PSBJQl9VQ01fTUFYX0RFVklDRVMpIHsKKwkJZGV2bnVtID0gZmluZF9vdmVyZmxvd19kZXZudW0oKTsKKwkJaWYgKGRldm51bSA8IDApCisJCQlnb3RvIGVycjsKIAotCXNldF9iaXQodWNtX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwkJdWNtX2Rldi0+ZGV2bnVtID0gZGV2bnVtICsgSUJfVUNNX01BWF9ERVZJQ0VTOworCQliYXNlID0gZGV2bnVtICsgb3ZlcmZsb3dfbWFqOworCQlzZXRfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKKwl9IGVsc2UgeworCQl1Y21fZGV2LT5kZXZudW0gPSBkZXZudW07CisJCWJhc2UgPSBkZXZudW0gKyBJQl9VQ01fQkFTRV9ERVY7CisJCXNldF9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKKwl9CiAKIAljZGV2X2luaXQoJnVjbV9kZXYtPmNkZXYsICZ1Y21fZm9wcyk7CiAJdWNtX2Rldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwogCWtvYmplY3Rfc2V0X25hbWUoJnVjbV9kZXYtPmNkZXYua29iaiwgInVjbSVkIiwgdWNtX2Rldi0+ZGV2bnVtKTsKLQlpZiAoY2Rldl9hZGQoJnVjbV9kZXYtPmNkZXYsIElCX1VDTV9CQVNFX0RFViArIHVjbV9kZXYtPmRldm51bSwgMSkpCisJaWYgKGNkZXZfYWRkKCZ1Y21fZGV2LT5jZGV2LCBiYXNlLCAxKSkKIAkJZ290byBlcnI7CiAKIAl1Y21fZGV2LT5kZXYuY2xhc3MgPSAmY21fY2xhc3M7CkBAIC0xMjgxLDcgKzEzMTcsMTAgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWNtX2Rldi0+ZGV2KTsKIGVycl9jZGV2OgogCWNkZXZfZGVsKCZ1Y21fZGV2LT5jZGV2KTsKLQljbGVhcl9iaXQodWNtX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwlpZiAodWNtX2Rldi0+ZGV2bnVtIDwgSUJfVUNNX01BWF9ERVZJQ0VTKQorCQljbGVhcl9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKKwllbHNlCisJCWNsZWFyX2JpdChkZXZudW0sIG92ZXJmbG93X21hcCk7CiBlcnI6CiAJa2ZyZWUodWNtX2Rldik7CiAJcmV0dXJuOwpAQCAtMTM0MCw2ICsxMzc5LDggQEAKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmdWNtX2NsaWVudCk7CiAJY2xhc3NfcmVtb3ZlX2ZpbGUoJmNtX2NsYXNzLCAmY2xhc3NfYXR0cl9hYmlfdmVyc2lvbik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKElCX1VDTV9CQVNFX0RFViwgSUJfVUNNX01BWF9ERVZJQ0VTKTsKKwlpZiAob3ZlcmZsb3dfbWFqKQorCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24ob3ZlcmZsb3dfbWFqLCBJQl9VQ01fTUFYX0RFVklDRVMpOwogCWlkcl9kZXN0cm95KCZjdHhfaWRfdGFibGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VkX2hlYWRlci5jCmluZGV4IDhlYzc4NzYuLjY1MGI1MDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYwpAQCAtMTgxLDYgKzE4MSw3IEBACiAgKiBpYl91ZF9oZWFkZXJfaW5pdCAtIEluaXRpYWxpemUgVUQgaGVhZGVyIHN0cnVjdHVyZQogICogQHBheWxvYWRfYnl0ZXM6TGVuZ3RoIG9mIHBhY2tldCBwYXlsb2FkCiAgKiBAZ3JoX3ByZXNlbnQ6R1JIIGZsYWcgKGlmIG5vbi16ZXJvLCBHUkggd2lsbCBiZSBpbmNsdWRlZCkKKyAqIEBpbW1lZGlhdGVfcHJlc2VudDogc3BlY2lmeSBpZiBpbW1lZGlhdGUgZGF0YSBzaG91bGQgYmUgdXNlZAogICogQGhlYWRlcjpTdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIGliX3VkX2hlYWRlcl9pbml0KCkgaW5pdGlhbGl6ZXMgdGhlIGxyaC5saW5rX3ZlcnNpb24sIGxyaC5saW5rX25leHRfaGVhZGVyLApAQCAtMTkxLDIxICsxOTIsMTMgQEAKICAqLwogdm9pZCBpYl91ZF9oZWFkZXJfaW5pdChpbnQgICAgIAkJICAgIHBheWxvYWRfYnl0ZXMsCiAJCSAgICAgICBpbnQgICAgCQkgICAgZ3JoX3ByZXNlbnQsCisJCSAgICAgICBpbnQJCSAgICBpbW1lZGlhdGVfcHJlc2VudCwKIAkJICAgICAgIHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlcikKIHsKLQlpbnQgaGVhZGVyX2xlbjsKIAl1MTYgcGFja2V0X2xlbmd0aDsKIAogCW1lbXNldChoZWFkZXIsIDAsIHNpemVvZiAqaGVhZGVyKTsKIAotCWhlYWRlcl9sZW4gPQotCQlJQl9MUkhfQllURVMgICsKLQkJSUJfQlRIX0JZVEVTICArCi0JCUlCX0RFVEhfQllURVM7Ci0JaWYgKGdyaF9wcmVzZW50KSB7Ci0JCWhlYWRlcl9sZW4gKz0gSUJfR1JIX0JZVEVTOwotCX0KLQogCWhlYWRlci0+bHJoLmxpbmtfdmVyc2lvbiAgICAgPSAwOwogCWhlYWRlci0+bHJoLmxpbmtfbmV4dF9oZWFkZXIgPQogCQlncmhfcHJlc2VudCA/IElCX0xOSF9JQkFfR0xPQkFMIDogSUJfTE5IX0lCQV9MT0NBTDsKQEAgLTIzMSw3ICsyMjQsOCBAQAogCiAJaGVhZGVyLT5scmgucGFja2V0X2xlbmd0aCA9IGNwdV90b19iZTE2KHBhY2tldF9sZW5ndGgpOwogCi0JaWYgKGhlYWRlci0+aW1tZWRpYXRlX3ByZXNlbnQpCisJaGVhZGVyLT5pbW1lZGlhdGVfcHJlc2VudAkgICAgID0gaW1tZWRpYXRlX3ByZXNlbnQ7CisJaWYgKGltbWVkaWF0ZV9wcmVzZW50KQogCQloZWFkZXItPmJ0aC5vcGNvZGUgICAgICAgICAgID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURTsKIAllbHNlCiAJCWhlYWRlci0+YnRoLm9wY29kZSAgICAgICAgICAgPSBJQl9PUENPREVfVURfU0VORF9PTkxZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCmluZGV4IDZmN2MwOTYuLjRmOTA2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlsb2NrZWQgICAgID0gbnBhZ2VzICsgY3VycmVudC0+bW0tPmxvY2tlZF92bTsKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoKGxvY2tlZCA+IGxvY2tfbGltaXQpICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpIHsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCmluZGV4IDdkZTAyOTY5Li4wMmQzNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTY1LDEyICs2NSw5IEBACiB9OwogCiAvKgotICogT3VyIGxpZmV0aW1lIHJ1bGVzIGZvciB0aGVzZSBzdHJ1Y3RzIGFyZSB0aGUgZm9sbG93aW5nOiBlYWNoIHRpbWUgYQotICogZGV2aWNlIHNwZWNpYWwgZmlsZSBpcyBvcGVuZWQsIHdlIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgc3RydWN0Ci0gKiBpYl91bWFkX3BvcnQgYnkgbWlub3IgaW4gdGhlIHVtYWRfcG9ydFtdIHRhYmxlIHdoaWxlIGhvbGRpbmcgdGhlCi0gKiBwb3J0X2xvY2suICBJZiB0aGlzIGxvb2t1cCBzdWNjZWVkcywgd2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUKLSAqIGliX3VtYWRfcG9ydCdzIHN0cnVjdCBpYl91bWFkX2RldmljZSB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZQotICogcG9ydF9sb2NrOyBpZiB0aGUgbG9va3VwIGZhaWxzLCB3ZSBmYWlsIHRoZSBvcGVuKCkuICBXZSBkcm9wIHRoZXNlCisgKiBPdXIgbGlmZXRpbWUgcnVsZXMgZm9yIHRoZXNlIHN0cnVjdHMgYXJlIHRoZSBmb2xsb3dpbmc6CisgKiBkZXZpY2Ugc3BlY2lhbCBmaWxlIGlzIG9wZW5lZCwgd2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUKKyAqIGliX3VtYWRfcG9ydCdzIHN0cnVjdCBpYl91bWFkX2RldmljZS4gV2UgZHJvcCB0aGVzZQogICogcmVmZXJlbmNlcyBpbiB0aGUgY29ycmVzcG9uZGluZyBjbG9zZSgpLgogICoKICAqIEluIGFkZGl0aW9uIHRvIHJlZmVyZW5jZXMgY29taW5nIGZyb20gb3BlbiBjaGFyYWN0ZXIgZGV2aWNlcywgdGhlcmUKQEAgLTc4LDE5ICs3NSwxNCBAQAogICogbW9kdWxlJ3MgcmVmZXJlbmNlIHRha2VuIHdoZW4gYWxsb2NhdGluZyB0aGUgaWJfdW1hZF9kZXZpY2UgaW4KICAqIGliX3VtYWRfYWRkX29uZSgpLgogICoKLSAqIFdoZW4gZGVzdHJveWluZyBhbiBpYl91bWFkX2RldmljZSwgd2UgY2xlYXIgYWxsIG9mIGl0cwotICogaWJfdW1hZF9wb3J0cyBmcm9tIHVtYWRfcG9ydFtdIHdoaWxlIGhvbGRpbmcgcG9ydF9sb2NrIGJlZm9yZQotICogZHJvcHBpbmcgdGhlIG1vZHVsZSdzIHJlZmVyZW5jZSB0byB0aGUgaWJfdW1hZF9kZXZpY2UuICBUaGlzIGlzCi0gKiBhbHdheXMgc2FmZSBiZWNhdXNlIGFueSBvcGVuKCkgY2FsbHMgd2lsbCBlaXRoZXIgc3VjY2VlZCBhbmQgb2J0YWluCi0gKiBhIHJlZmVyZW5jZSBiZWZvcmUgd2UgY2xlYXIgdGhlIHVtYWRfcG9ydFtdIGVudHJpZXMsIG9yIGZhaWwgYWZ0ZXIKLSAqIHdlIGNsZWFyIHRoZSB1bWFkX3BvcnRbXSBlbnRyaWVzLgorICogV2hlbiBkZXN0cm95aW5nIGFuIGliX3VtYWRfZGV2aWNlLCB3ZSBkcm9wIHRoZSBtb2R1bGUncyByZWZlcmVuY2UuCiAgKi8KIAogc3RydWN0IGliX3VtYWRfcG9ydCB7Ci0Jc3RydWN0IGNkZXYgICAgICAgICAgICpjZGV2OworCXN0cnVjdCBjZGV2ICAgICAgICAgICBjZGV2OwogCXN0cnVjdCBkZXZpY2UJICAgICAgKmRldjsKIAotCXN0cnVjdCBjZGV2ICAgICAgICAgICAqc21fY2RldjsKKwlzdHJ1Y3QgY2RldiAgICAgICAgICAgc21fY2RldjsKIAlzdHJ1Y3QgZGV2aWNlCSAgICAgICpzbV9kZXY7CiAJc3RydWN0IHNlbWFwaG9yZSAgICAgICBzbV9zZW07CiAKQEAgLTEzNiw3ICsxMjgsNiBAQAogc3RhdGljIGNvbnN0IGRldl90IGJhc2VfZGV2ID0gTUtERVYoSUJfVU1BRF9NQUpPUiwgSUJfVU1BRF9NSU5PUl9CQVNFKTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhwb3J0X2xvY2spOwotc3RhdGljIHN0cnVjdCBpYl91bWFkX3BvcnQgKnVtYWRfcG9ydFtJQl9VTUFEX01BWF9QT1JUU107CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X21hcCwgSUJfVU1BRF9NQVhfUE9SVFMpOwogCiBzdGF0aWMgdm9pZCBpYl91bWFkX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKQEAgLTQ5Niw4ICs0ODcsOCBAQAogCQlhaF9hdHRyLmFoX2ZsYWdzID0gSUJfQUhfR1JIOwogCQltZW1jcHkoYWhfYXR0ci5ncmguZGdpZC5yYXcsIHBhY2tldC0+bWFkLmhkci5naWQsIDE2KTsKIAkJYWhfYXR0ci5ncmguc2dpZF9pbmRleAkgICA9IHBhY2tldC0+bWFkLmhkci5naWRfaW5kZXg7Ci0JCWFoX2F0dHIuZ3JoLmZsb3dfbGFiZWwgCSAgID0gYmUzMl90b19jcHUocGFja2V0LT5tYWQuaGRyLmZsb3dfbGFiZWwpOwotCQlhaF9hdHRyLmdyaC5ob3BfbGltaXQgIAkgICA9IHBhY2tldC0+bWFkLmhkci5ob3BfbGltaXQ7CisJCWFoX2F0dHIuZ3JoLmZsb3dfbGFiZWwJICAgPSBiZTMyX3RvX2NwdShwYWNrZXQtPm1hZC5oZHIuZmxvd19sYWJlbCk7CisJCWFoX2F0dHIuZ3JoLmhvcF9saW1pdAkgICA9IHBhY2tldC0+bWFkLmhkci5ob3BfbGltaXQ7CiAJCWFoX2F0dHIuZ3JoLnRyYWZmaWNfY2xhc3MgID0gcGFja2V0LT5tYWQuaGRyLnRyYWZmaWNfY2xhc3M7CiAJfQogCkBAIC01MjgsOSArNTE5LDkgQEAKIAkJZ290byBlcnJfYWg7CiAJfQogCi0JcGFja2V0LT5tc2ctPmFoIAk9IGFoOworCXBhY2tldC0+bXNnLT5haAkJPSBhaDsKIAlwYWNrZXQtPm1zZy0+dGltZW91dF9tcyA9IHBhY2tldC0+bWFkLmhkci50aW1lb3V0X21zOwotCXBhY2tldC0+bXNnLT5yZXRyaWVzIAk9IHBhY2tldC0+bWFkLmhkci5yZXRyaWVzOworCXBhY2tldC0+bXNnLT5yZXRyaWVzCT0gcGFja2V0LT5tYWQuaGRyLnJldHJpZXM7CiAJcGFja2V0LT5tc2ctPmNvbnRleHRbMF0gPSBwYWNrZXQ7CiAKIAkvKiBDb3B5IE1BRCBoZWFkZXIuICBBbnkgUk1QUCBoZWFkZXIgaXMgYWxyZWFkeSBpbiBwbGFjZS4gKi8KQEAgLTc3OSwxNSArNzcwLDExIEBACiAvKgogICogaWJfdW1hZF9vcGVuKCkgZG9lcyBub3QgbmVlZCB0aGUgQktMOgogICoKLSAqICAtIHVtYWRfcG9ydFtdIGFjY2Vzc2VzIGFyZSBwcm90ZWN0ZWQgYnkgcG9ydF9sb2NrLCB0aGUKLSAqICAgIGliX3VtYWRfcG9ydCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSByZWZlcmVuY2UgY291bnRlZCwgYW5kCisgKiAgLSB0aGUgaWJfdW1hZF9wb3J0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IHJlZmVyZW5jZSBjb3VudGVkLCBhbmQKICAqICAgIGV2ZXJ5dGhpbmcgZWxzZSBpcyBwdXJlbHkgbG9jYWwgdG8gdGhlIGZpbGUgYmVpbmcgY3JlYXRlZCwgc28KICAqICAgIHJhY2VzIGFnYWluc3Qgb3RoZXIgb3BlbiBjYWxscyBhcmUgbm90IGEgcHJvYmxlbTsKICAqICAtIHRoZSBpb2N0bCBtZXRob2QgZG9lcyBub3QgYWZmZWN0IGFueSBnbG9iYWwgc3RhdGUgb3V0c2lkZSBvZiB0aGUKICAqICAgIGZpbGUgc3RydWN0dXJlIGJlaW5nIG9wZXJhdGVkIG9uOwotICogIC0gdGhlIHBvcnQgaXMgYWRkZWQgdG8gdW1hZF9wb3J0W10gYXMgdGhlIGxhc3QgcGFydCBvZiBtb2R1bGUKLSAqICAgIGluaXRpYWxpemF0aW9uIHNvIHRoZSBvcGVuIG1ldGhvZCB3aWxsIGVpdGhlciBpbW1lZGlhdGVseSBydW4KLSAqICAgIC1FTlhJTywgb3IgYWxsIHJlcXVpcmVkIGluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZS4KICAqLwogc3RhdGljIGludCBpYl91bWFkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CkBAIC03OTUsMTMgKzc4MiwxMCBAQAogCXN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGU7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2soJnBvcnRfbG9jayk7Ci0JcG9ydCA9IHVtYWRfcG9ydFtpbWlub3IoaW5vZGUpIC0gSUJfVU1BRF9NSU5PUl9CQVNFXTsKKwlwb3J0ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBpYl91bWFkX3BvcnQsIGNkZXYpOwogCWlmIChwb3J0KQogCQlrcmVmX2dldCgmcG9ydC0+dW1hZF9kZXYtPnJlZik7Ci0Jc3Bpbl91bmxvY2soJnBvcnRfbG9jayk7Ci0KLQlpZiAoIXBvcnQpCisJZWxzZQogCQlyZXR1cm4gLUVOWElPOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+ZmlsZV9tdXRleCk7CkBAIC04NzIsMTYgKzg1NiwxNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1bWFkX2ZvcHMgPSB7Ci0JLm93bmVyIAkgCT0gVEhJU19NT0RVTEUsCi0JLnJlYWQgCSAJPSBpYl91bWFkX3JlYWQsCi0JLndyaXRlIAkgCT0gaWJfdW1hZF93cml0ZSwKLQkucG9sbCAJIAk9IGliX3VtYWRfcG9sbCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gaWJfdW1hZF9yZWFkLAorCS53cml0ZQkJPSBpYl91bWFkX3dyaXRlLAorCS5wb2xsCQk9IGliX3VtYWRfcG9sbCwKIAkudW5sb2NrZWRfaW9jdGwgPSBpYl91bWFkX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0X2lvY3RsIAk9IGliX3VtYWRfY29tcGF0X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBpYl91bWFkX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCS5vcGVuIAkgCT0gaWJfdW1hZF9vcGVuLAotCS5yZWxlYXNlIAk9IGliX3VtYWRfY2xvc2UKKwkub3BlbgkJPSBpYl91bWFkX29wZW4sCisJLnJlbGVhc2UJPSBpYl91bWFkX2Nsb3NlCiB9OwogCiBzdGF0aWMgaW50IGliX3VtYWRfc21fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTg5MiwxMyArODc2LDEwIEBACiAJfTsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrKCZwb3J0X2xvY2spOwotCXBvcnQgPSB1bWFkX3BvcnRbaW1pbm9yKGlub2RlKSAtIElCX1VNQURfTUlOT1JfQkFTRSAtIElCX1VNQURfTUFYX1BPUlRTXTsKKwlwb3J0ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBpYl91bWFkX3BvcnQsIHNtX2NkZXYpOwogCWlmIChwb3J0KQogCQlrcmVmX2dldCgmcG9ydC0+dW1hZF9kZXYtPnJlZik7Ci0Jc3Bpbl91bmxvY2soJnBvcnRfbG9jayk7Ci0KLQlpZiAoIXBvcnQpCisJZWxzZQogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CkBAIC05NDksOCArOTMwLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdW1hZF9zbV9mb3BzID0gewotCS5vd25lciAJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gCSA9IGliX3VtYWRfc21fb3BlbiwKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JID0gaWJfdW1hZF9zbV9vcGVuLAogCS5yZWxlYXNlID0gaWJfdW1hZF9zbV9jbG9zZQogfTsKIApAQCAtOTkwLDE2ICs5NzEsNTEgQEAKIH0KIHN0YXRpYyBDTEFTU19BVFRSKGFiaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2FiaV92ZXJzaW9uLCBOVUxMKTsKIAorc3RhdGljIGRldl90IG92ZXJmbG93X21hajsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChvdmVyZmxvd19tYXAsIElCX1VNQURfTUFYX1BPUlRTKTsKK3N0YXRpYyBpbnQgZmluZF9vdmVyZmxvd19kZXZudW0odm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFvdmVyZmxvd19tYWopIHsKKwkJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmb3ZlcmZsb3dfbWFqLCAwLCBJQl9VTUFEX01BWF9QT1JUUyAqIDIsCisJCQkJCSAgImluZmluaWJhbmRfbWFkIik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNlcl9tYWQ6IGNvdWxkbid0IHJlZ2lzdGVyIGR5bmFtaWMgZGV2aWNlIG51bWJlclxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gZmluZF9maXJzdF96ZXJvX2JpdChvdmVyZmxvd19tYXAsIElCX1VNQURfTUFYX1BPUlRTKTsKKwlpZiAocmV0ID49IElCX1VNQURfTUFYX1BPUlRTKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGliX3VtYWRfaW5pdF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgaW50IHBvcnRfbnVtLAogCQkJICAgICBzdHJ1Y3QgaWJfdW1hZF9wb3J0ICpwb3J0KQogeworCWludCBkZXZudW07CisJZGV2X3QgYmFzZTsKKwogCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKLQlwb3J0LT5kZXZfbnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VTUFEX01BWF9QT1JUUyk7Ci0JaWYgKHBvcnQtPmRldl9udW0gPj0gSUJfVU1BRF9NQVhfUE9SVFMpIHsKKwlkZXZudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXAsIElCX1VNQURfTUFYX1BPUlRTKTsKKwlpZiAoZGV2bnVtID49IElCX1VNQURfTUFYX1BPUlRTKSB7CiAJCXNwaW5fdW5sb2NrKCZwb3J0X2xvY2spOwotCQlyZXR1cm4gLTE7CisJCWRldm51bSA9IGZpbmRfb3ZlcmZsb3dfZGV2bnVtKCk7CisJCWlmIChkZXZudW0gPCAwKQorCQkJcmV0dXJuIC0xOworCisJCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKKwkJcG9ydC0+ZGV2X251bSA9IGRldm51bSArIElCX1VNQURfTUFYX1BPUlRTOworCQliYXNlID0gZGV2bnVtICsgb3ZlcmZsb3dfbWFqOworCQlzZXRfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKKwl9IGVsc2UgeworCQlwb3J0LT5kZXZfbnVtID0gZGV2bnVtOworCQliYXNlID0gZGV2bnVtICsgYmFzZV9kZXY7CisJCXNldF9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKIAl9Ci0Jc2V0X2JpdChwb3J0LT5kZXZfbnVtLCBkZXZfbWFwKTsKIAlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKIAogCXBvcnQtPmliX2RldiAgID0gZGV2aWNlOwpAQCAtMTAwOCwxNyArMTAyNCwxNCBAQAogCW11dGV4X2luaXQoJnBvcnQtPmZpbGVfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5maWxlX2xpc3QpOwogCi0JcG9ydC0+Y2RldiA9IGNkZXZfYWxsb2MoKTsKLQlpZiAoIXBvcnQtPmNkZXYpCi0JCXJldHVybiAtMTsKLQlwb3J0LT5jZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCXBvcnQtPmNkZXYtPm9wcyAgID0gJnVtYWRfZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5jZGV2LT5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7Ci0JaWYgKGNkZXZfYWRkKHBvcnQtPmNkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSwgMSkpCisJY2Rldl9pbml0KCZwb3J0LT5jZGV2LCAmdW1hZF9mb3BzKTsKKwlwb3J0LT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJa29iamVjdF9zZXRfbmFtZSgmcG9ydC0+Y2Rldi5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CisJaWYgKGNkZXZfYWRkKCZwb3J0LT5jZGV2LCBiYXNlLCAxKSkKIAkJZ290byBlcnJfY2RldjsKIAogCXBvcnQtPmRldiA9IGRldmljZV9jcmVhdGUodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCSAgcG9ydC0+Y2Rldi0+ZGV2LCBwb3J0LAorCQkJCSAgcG9ydC0+Y2Rldi5kZXYsIHBvcnQsCiAJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwpAQCAtMTAyOCwxNyArMTA0MSwxNSBAQAogCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUocG9ydC0+ZGV2LCAmZGV2X2F0dHJfcG9ydCkpCiAJCWdvdG8gZXJyX2RldjsKIAotCXBvcnQtPnNtX2NkZXYgPSBjZGV2X2FsbG9jKCk7Ci0JaWYgKCFwb3J0LT5zbV9jZGV2KQotCQlnb3RvIGVycl9kZXY7Ci0JcG9ydC0+c21fY2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlwb3J0LT5zbV9jZGV2LT5vcHMgICA9ICZ1bWFkX3NtX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmcG9ydC0+c21fY2Rldi0+a29iaiwgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOwotCWlmIChjZGV2X2FkZChwb3J0LT5zbV9jZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCisJYmFzZSArPSBJQl9VTUFEX01BWF9QT1JUUzsKKwljZGV2X2luaXQoJnBvcnQtPnNtX2NkZXYsICZ1bWFkX3NtX2ZvcHMpOworCXBvcnQtPnNtX2NkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5zbV9jZGV2LmtvYmosICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKKwlpZiAoY2Rldl9hZGQoJnBvcnQtPnNtX2NkZXYsIGJhc2UsIDEpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCiAJcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAgICBwb3J0LT5zbV9jZGV2LmRldiwgcG9ydCwKIAkJCQkgICAgICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKIAlpZiAoSVNfRVJSKHBvcnQtPnNtX2RldikpCiAJCWdvdG8gZXJyX3NtX2NkZXY7CkBAIC0xMDQ4LDI0ICsxMDU5LDIzIEBACiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZShwb3J0LT5zbV9kZXYsICZkZXZfYXR0cl9wb3J0KSkKIAkJZ290byBlcnJfc21fZGV2OwogCi0Jc3Bpbl9sb2NrKCZwb3J0X2xvY2spOwotCXVtYWRfcG9ydFtwb3J0LT5kZXZfbnVtXSA9IHBvcnQ7Ci0Jc3Bpbl91bmxvY2soJnBvcnRfbG9jayk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3NtX2RldjoKLQlkZXZpY2VfZGVzdHJveSh1bWFkX2NsYXNzLCBwb3J0LT5zbV9jZGV2LT5kZXYpOworCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPnNtX2NkZXYuZGV2KTsKIAogZXJyX3NtX2NkZXY6Ci0JY2Rldl9kZWwocG9ydC0+c21fY2Rldik7CisJY2Rldl9kZWwoJnBvcnQtPnNtX2NkZXYpOwogCiBlcnJfZGV2OgotCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmNkZXYtPmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+Y2Rldi5kZXYpOwogCiBlcnJfY2RldjoKLQljZGV2X2RlbChwb3J0LT5jZGV2KTsKLQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSwgZGV2X21hcCk7CisJY2Rldl9kZWwoJnBvcnQtPmNkZXYpOworCWlmIChwb3J0LT5kZXZfbnVtIDwgSUJfVU1BRF9NQVhfUE9SVFMpCisJCWNsZWFyX2JpdChkZXZudW0sIGRldl9tYXApOworCWVsc2UKKwkJY2xlYXJfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTEwNzksMTUgKzEwODksMTEgQEAKIAlkZXZfc2V0X2RydmRhdGEocG9ydC0+ZGV2LCAgICBOVUxMKTsKIAlkZXZfc2V0X2RydmRhdGEocG9ydC0+c21fZGV2LCBOVUxMKTsKIAotCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmNkZXYtPmRldik7Ci0JZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi0+ZGV2KTsKKwlkZXZpY2VfZGVzdHJveSh1bWFkX2NsYXNzLCBwb3J0LT5jZGV2LmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi5kZXYpOwogCi0JY2Rldl9kZWwocG9ydC0+Y2Rldik7Ci0JY2Rldl9kZWwocG9ydC0+c21fY2Rldik7Ci0KLQlzcGluX2xvY2soJnBvcnRfbG9jayk7Ci0JdW1hZF9wb3J0W3BvcnQtPmRldl9udW1dID0gTlVMTDsKLQlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisJY2Rldl9kZWwoJnBvcnQtPnNtX2NkZXYpOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+ZmlsZV9tdXRleCk7CiAKQEAgLTExMDYsNyArMTExMiwxMCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5maWxlX211dGV4KTsKIAotCWNsZWFyX2JpdChwb3J0LT5kZXZfbnVtLCBkZXZfbWFwKTsKKwlpZiAocG9ydC0+ZGV2X251bSA8IElCX1VNQURfTUFYX1BPUlRTKQorCQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSwgZGV2X21hcCk7CisJZWxzZQorCQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSAtIElCX1VNQURfTUFYX1BPUlRTLCBvdmVyZmxvd19tYXApOwogfQogCiBzdGF0aWMgdm9pZCBpYl91bWFkX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQpAQCAtMTIxNCw2ICsxMjIzLDggQEAKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmdW1hZF9jbGllbnQpOwogCWNsYXNzX2Rlc3Ryb3kodW1hZF9jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGJhc2VfZGV2LCBJQl9VTUFEX01BWF9QT1JUUyAqIDIpOworCWlmIChvdmVyZmxvd19tYWopCisJCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihvdmVyZmxvd19tYWosIElCX1VNQURfTUFYX1BPUlRTICogMik7CiB9CiAKIG1vZHVsZV9pbml0KGliX3VtYWRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCmluZGV4IDBiMzg2MjAuLmEwNzhlNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogCiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdW1lbS5oPgpAQCAtNjksMjMgKzcwLDIzIEBACiAKIHN0cnVjdCBpYl91dmVyYnNfZGV2aWNlIHsKIAlzdHJ1Y3Qga3JlZgkJCQlyZWY7CisJaW50CQkJCQludW1fY29tcF92ZWN0b3JzOwogCXN0cnVjdCBjb21wbGV0aW9uCQkJY29tcDsKLQlpbnQJCQkJCWRldm51bTsKLQlzdHJ1Y3QgY2RldgkJCSAgICAgICAqY2RldjsKIAlzdHJ1Y3QgZGV2aWNlCQkJICAgICAgICpkZXY7CiAJc3RydWN0IGliX2RldmljZQkJICAgICAgICppYl9kZXY7Ci0JaW50CQkJCQludW1fY29tcF92ZWN0b3JzOworCWludAkJCQkJZGV2bnVtOworCXN0cnVjdCBjZGV2CQkJICAgICAgICBjZGV2OwogfTsKIAogc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlIHsKIAlzdHJ1Y3Qga3JlZgkJCQlyZWY7CisJaW50CQkJCQlpc19hc3luYzsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUJCSAgICAgICAqdXZlcmJzX2ZpbGU7CiAJc3BpbmxvY2tfdAkJCQlsb2NrOworCWludAkJCQkJaXNfY2xvc2VkOwogCXdhaXRfcXVldWVfaGVhZF90CQkJcG9sbF93YWl0OwogCXN0cnVjdCBmYXN5bmNfc3RydWN0CQkgICAgICAgKmFzeW5jX3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQJCQlldmVudF9saXN0OwotCWludAkJCQkJaXNfYXN5bmM7Ci0JaW50CQkJCQlpc19jbG9zZWQ7CiB9OwogCiBzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKaW5kZXggODEwZjI3Ny4uNGZhMmU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCkBAIC00MSw5ICs0MSw5IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTczLDQwICs3MywzOSBAQAogREVGSU5FX0lEUihpYl91dmVyYnNfc3JxX2lkcik7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWFwX2xvY2spOwotc3RhdGljIHN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICpkZXZfdGFibGVbSUJfVVZFUkJTX01BWF9ERVZJQ0VTXTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOwogCiBzdGF0aWMgc3NpemVfdCAoKnV2ZXJic19jbWRfdGFibGVbXSkoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAogCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKIAkJCQkgICAgIGludCBvdXRfbGVuKSA9IHsKLQlbSUJfVVNFUl9WRVJCU19DTURfR0VUX0NPTlRFWFRdICAgCT0gaWJfdXZlcmJzX2dldF9jb250ZXh0LAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0VdICAJPSBpYl91dmVyYnNfcXVlcnlfZGV2aWNlLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9QT1JUXSAgICAJPSBpYl91dmVyYnNfcXVlcnlfcG9ydCwKLQlbSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUERdICAgICAgCT0gaWJfdXZlcmJzX2FsbG9jX3BkLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX1BEXSAgICAJPSBpYl91dmVyYnNfZGVhbGxvY19wZCwKLQlbSUJfVVNFUl9WRVJCU19DTURfUkVHX01SXSAgICAgICAgCT0gaWJfdXZlcmJzX3JlZ19tciwKLQlbSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVJdICAgICAgCT0gaWJfdXZlcmJzX2RlcmVnX21yLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVF0JCT0gaWJfdXZlcmJzX2dldF9jb250ZXh0LAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0VdCT0gaWJfdXZlcmJzX3F1ZXJ5X2RldmljZSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVF0JCT0gaWJfdXZlcmJzX3F1ZXJ5X3BvcnQsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0FMTE9DX1BEXQkJPSBpYl91dmVyYnNfYWxsb2NfcGQsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfUERdCQk9IGliX3V2ZXJic19kZWFsbG9jX3BkLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVJdCQk9IGliX3V2ZXJic19yZWdfbXIsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SXQkJPSBpYl91dmVyYnNfZGVyZWdfbXIsCiAJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DT01QX0NIQU5ORUxdID0gaWJfdXZlcmJzX2NyZWF0ZV9jb21wX2NoYW5uZWwsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUV0gICAgIAk9IGliX3V2ZXJic19jcmVhdGVfY3EsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1JFU0laRV9DUV0gICAgIAk9IGliX3V2ZXJic19yZXNpemVfY3EsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1BPTExfQ1FdICAgICAJPSBpYl91dmVyYnNfcG9sbF9jcSwKLQlbSUJfVVNFUl9WRVJCU19DTURfUkVRX05PVElGWV9DUV0gICAgIAk9IGliX3V2ZXJic19yZXFfbm90aWZ5X2NxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRXSAgICAJPSBpYl91dmVyYnNfZGVzdHJveV9jcSwKLQlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQXSAgICAgCT0gaWJfdXZlcmJzX2NyZWF0ZV9xcCwKLQlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVBdICAgICAJPSBpYl91dmVyYnNfcXVlcnlfcXAsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUF0gICAgIAk9IGliX3V2ZXJic19tb2RpZnlfcXAsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVBdICAgIAk9IGliX3V2ZXJic19kZXN0cm95X3FwLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NFTkRdICAgIAk9IGliX3V2ZXJic19wb3N0X3NlbmQsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1BPU1RfUkVDVl0gICAgCT0gaWJfdXZlcmJzX3Bvc3RfcmVjdiwKLQlbSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TUlFfUkVDVl0gICAgCT0gaWJfdXZlcmJzX3Bvc3Rfc3JxX3JlY3YsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9BSF0gICAgCT0gaWJfdXZlcmJzX2NyZWF0ZV9haCwKLQlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9BSF0gICAgCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfYWgsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVF0gIAk9IGliX3V2ZXJic19hdHRhY2hfbWNhc3QsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVF0gIAk9IGliX3V2ZXJic19kZXRhY2hfbWNhc3QsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9TUlFdICAgIAk9IGliX3V2ZXJic19jcmVhdGVfc3JxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRXSAgICAJPSBpYl91dmVyYnNfbW9kaWZ5X3NycSwKLQlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRXSAgICAgCT0gaWJfdXZlcmJzX3F1ZXJ5X3NycSwKLQlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9TUlFdICAgCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1FdCQk9IGliX3V2ZXJic19jcmVhdGVfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1JFU0laRV9DUV0JCT0gaWJfdXZlcmJzX3Jlc2l6ZV9jcSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUE9MTF9DUV0JCT0gaWJfdXZlcmJzX3BvbGxfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1FdCT0gaWJfdXZlcmJzX3JlcV9ub3RpZnlfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQ1FdCQk9IGliX3V2ZXJic19kZXN0cm95X2NxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVBdCQk9IGliX3V2ZXJic19jcmVhdGVfcXAsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1FQXQkJPSBpYl91dmVyYnNfcXVlcnlfcXAsCisJW0lCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUF0JCT0gaWJfdXZlcmJzX21vZGlmeV9xcCwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUF0JCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfcXAsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1BPU1RfU0VORF0JCT0gaWJfdXZlcmJzX3Bvc3Rfc2VuZCwKKwlbSUJfVVNFUl9WRVJCU19DTURfUE9TVF9SRUNWXQkJPSBpYl91dmVyYnNfcG9zdF9yZWN2LAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NSUV9SRUNWXQk9IGliX3V2ZXJic19wb3N0X3NycV9yZWN2LAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQUhdCQk9IGliX3V2ZXJic19jcmVhdGVfYWgsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQUhdCQk9IGliX3V2ZXJic19kZXN0cm95X2FoLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9BVFRBQ0hfTUNBU1RdCT0gaWJfdXZlcmJzX2F0dGFjaF9tY2FzdCwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVUQUNIX01DQVNUXQk9IGliX3V2ZXJic19kZXRhY2hfbWNhc3QsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9TUlFdCQk9IGliX3V2ZXJic19jcmVhdGVfc3JxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRXQkJPSBpYl91dmVyYnNfbW9kaWZ5X3NycSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRXQkJPSBpYl91dmVyYnNfcXVlcnlfc3JxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUV0JCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxLAogfTsKIAogc3RhdGljIHZvaWQgaWJfdXZlcmJzX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKQEAgLTM2Niw3ICszNjUsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1dmVyYnNfZXZlbnRfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgCSA9IGliX3V2ZXJic19ldmVudF9yZWFkLAorCS5yZWFkCSA9IGliX3V2ZXJic19ldmVudF9yZWFkLAogCS5wb2xsICAgID0gaWJfdXZlcmJzX2V2ZW50X3BvbGwsCiAJLnJlbGVhc2UgPSBpYl91dmVyYnNfZXZlbnRfY2xvc2UsCiAJLmZhc3luYyAgPSBpYl91dmVyYnNfZXZlbnRfZmFzeW5jCkBAIC01ODUsMTQgKzU4NCwxMiBAQAogLyoKICAqIGliX3V2ZXJic19vcGVuKCkgZG9lcyBub3QgbmVlZCB0aGUgQktMOgogICoKLSAqICAtIGRldl90YWJsZVtdIGFjY2Vzc2VzIGFyZSBwcm90ZWN0ZWQgYnkgbWFwX2xvY2ssIHRoZQotICogICAgaWJfdXZlcmJzX2RldmljZSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSByZWZlcmVuY2UgY291bnRlZCwgYW5kCisgKiAgLSB0aGUgaWJfdXZlcmJzX2RldmljZSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSByZWZlcmVuY2UgY291bnRlZCBhbmQKICAqICAgIGV2ZXJ5dGhpbmcgZWxzZSBpcyBwdXJlbHkgbG9jYWwgdG8gdGhlIGZpbGUgYmVpbmcgY3JlYXRlZCwgc28KICAqICAgIHJhY2VzIGFnYWluc3Qgb3RoZXIgb3BlbiBjYWxscyBhcmUgbm90IGEgcHJvYmxlbTsKICAqICAtIHRoZXJlIGlzIG5vIGlvY3RsIG1ldGhvZCB0byByYWNlIGFnYWluc3Q7Ci0gKiAgLSB0aGUgZGV2aWNlIGlzIGFkZGVkIHRvIGRldl90YWJsZVtdIGFzIHRoZSBsYXN0IHBhcnQgb2YgbW9kdWxlCi0gKiAgICBpbml0aWFsaXphdGlvbiwgdGhlIG9wZW4gbWV0aG9kIHdpbGwgZWl0aGVyIGltbWVkaWF0ZWx5IHJ1bgotICogICAgLUVOWElPLCBvciBhbGwgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lLgorICogIC0gdGhlIG9wZW4gbWV0aG9kIHdpbGwgZWl0aGVyIGltbWVkaWF0ZWx5IHJ1biAtRU5YSU8sIG9yIGFsbAorICogICAgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lLgogICovCiBzdGF0aWMgaW50IGliX3V2ZXJic19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewpAQCAtNjAwLDEzICs1OTcsMTAgQEAKIAlzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGU7CiAJaW50IHJldDsKIAotCXNwaW5fbG9jaygmbWFwX2xvY2spOwotCWRldiA9IGRldl90YWJsZVtpbWlub3IoaW5vZGUpIC0gSUJfVVZFUkJTX0JBU0VfTUlOT1JdOworCWRldiA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSwgY2Rldik7CiAJaWYgKGRldikKIAkJa3JlZl9nZXQoJmRldi0+cmVmKTsKLQlzcGluX3VubG9jaygmbWFwX2xvY2spOwotCi0JaWYgKCFkZXYpCisJZWxzZQogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChkZXYtPmliX2Rldi0+b3duZXIpKSB7CkBAIC02NTMsMTcgKzY0NywxNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1dmVyYnNfZm9wcyA9IHsKLQkub3duZXIgCSA9IFRISVNfTU9EVUxFLAotCS53cml0ZSAJID0gaWJfdXZlcmJzX3dyaXRlLAotCS5vcGVuIAkgPSBpYl91dmVyYnNfb3BlbiwKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLndyaXRlCSA9IGliX3V2ZXJic193cml0ZSwKKwkub3BlbgkgPSBpYl91dmVyYnNfb3BlbiwKIAkucmVsZWFzZSA9IGliX3V2ZXJic19jbG9zZQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXZlcmJzX21tYXBfZm9wcyA9IHsKLQkub3duZXIgCSA9IFRISVNfTU9EVUxFLAotCS53cml0ZSAJID0gaWJfdXZlcmJzX3dyaXRlLAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkud3JpdGUJID0gaWJfdXZlcmJzX3dyaXRlLAogCS5tbWFwICAgID0gaWJfdXZlcmJzX21tYXAsCi0JLm9wZW4gCSA9IGliX3V2ZXJic19vcGVuLAorCS5vcGVuCSA9IGliX3V2ZXJic19vcGVuLAogCS5yZWxlYXNlID0gaWJfdXZlcmJzX2Nsb3NlCiB9OwogCkBAIC03MDMsOCArNjk3LDM4IEBACiB9CiBzdGF0aWMgQ0xBU1NfQVRUUihhYmlfdmVyc2lvbiwgU19JUlVHTywgc2hvd19hYmlfdmVyc2lvbiwgTlVMTCk7CiAKK3N0YXRpYyBkZXZfdCBvdmVyZmxvd19tYWo7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAob3ZlcmZsb3dfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOworCisvKgorICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gSUJfVVZFUkJTX01BWF9ERVZJQ0VTLCBkeW5hbWljYWxseSBvdmVyZmxvdyBieQorICogcmVxdWVzdGluZyBhIG5ldyBtYWpvciBudW1iZXIgYW5kIGRvdWJsaW5nIHRoZSBudW1iZXIgb2YgbWF4IGRldmljZXMgd2UKKyAqIHN1cHBvcnQuIEl0J3Mgc3R1cGlkLCBidXQgc2ltcGxlLgorICovCitzdGF0aWMgaW50IGZpbmRfb3ZlcmZsb3dfZGV2bnVtKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghb3ZlcmZsb3dfbWFqKSB7CisJCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJm92ZXJmbG93X21haiwgMCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTLAorCQkJCQkgICJpbmZpbmliYW5kX3ZlcmJzIik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNlcl92ZXJiczogY291bGRuJ3QgcmVnaXN0ZXIgZHluYW1pYyBkZXZpY2UgbnVtYmVyXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG92ZXJmbG93X21hcCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKKwlpZiAocmV0ID49IElCX1VWRVJCU19NQVhfREVWSUNFUykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgaWJfdXZlcmJzX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogeworCWludCBkZXZudW07CisJZGV2X3QgYmFzZTsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqdXZlcmJzX2RldjsKIAogCWlmICghZGV2aWNlLT5hbGxvY191Y29udGV4dCkKQEAgLTcxOCwyOCArNzQyLDM2IEBACiAJaW5pdF9jb21wbGV0aW9uKCZ1dmVyYnNfZGV2LT5jb21wKTsKIAogCXNwaW5fbG9jaygmbWFwX2xvY2spOwotCXV2ZXJic19kZXYtPmRldm51bSA9IGZpbmRfZmlyc3RfemVyb19iaXQoZGV2X21hcCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKLQlpZiAodXZlcmJzX2Rldi0+ZGV2bnVtID49IElCX1VWRVJCU19NQVhfREVWSUNFUykgeworCWRldm51bSA9IGZpbmRfZmlyc3RfemVyb19iaXQoZGV2X21hcCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKKwlpZiAoZGV2bnVtID49IElCX1VWRVJCU19NQVhfREVWSUNFUykgewogCQlzcGluX3VubG9jaygmbWFwX2xvY2spOwotCQlnb3RvIGVycjsKKwkJZGV2bnVtID0gZmluZF9vdmVyZmxvd19kZXZudW0oKTsKKwkJaWYgKGRldm51bSA8IDApCisJCQlnb3RvIGVycjsKKworCQlzcGluX2xvY2soJm1hcF9sb2NrKTsKKwkJdXZlcmJzX2Rldi0+ZGV2bnVtID0gZGV2bnVtICsgSUJfVVZFUkJTX01BWF9ERVZJQ0VTOworCQliYXNlID0gZGV2bnVtICsgb3ZlcmZsb3dfbWFqOworCQlzZXRfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKKwl9IGVsc2UgeworCQl1dmVyYnNfZGV2LT5kZXZudW0gPSBkZXZudW07CisJCWJhc2UgPSBkZXZudW0gKyBJQl9VVkVSQlNfQkFTRV9ERVY7CisJCXNldF9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKIAl9Ci0Jc2V0X2JpdCh1dmVyYnNfZGV2LT5kZXZudW0sIGRldl9tYXApOwogCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7CiAKIAl1dmVyYnNfZGV2LT5pYl9kZXYgICAgICAgICAgID0gZGV2aWNlOwogCXV2ZXJic19kZXYtPm51bV9jb21wX3ZlY3RvcnMgPSBkZXZpY2UtPm51bV9jb21wX3ZlY3RvcnM7CiAKLQl1dmVyYnNfZGV2LT5jZGV2ID0gY2Rldl9hbGxvYygpOwotCWlmICghdXZlcmJzX2Rldi0+Y2RldikKLQkJZ290byBlcnI7Ci0JdXZlcmJzX2Rldi0+Y2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQl1dmVyYnNfZGV2LT5jZGV2LT5vcHMgPSBkZXZpY2UtPm1tYXAgPyAmdXZlcmJzX21tYXBfZm9wcyA6ICZ1dmVyYnNfZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZ1dmVyYnNfZGV2LT5jZGV2LT5rb2JqLCAidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOwotCWlmIChjZGV2X2FkZCh1dmVyYnNfZGV2LT5jZGV2LCBJQl9VVkVSQlNfQkFTRV9ERVYgKyB1dmVyYnNfZGV2LT5kZXZudW0sIDEpKQorCWNkZXZfaW5pdCgmdXZlcmJzX2Rldi0+Y2RldiwgTlVMTCk7CisJdXZlcmJzX2Rldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCXV2ZXJic19kZXYtPmNkZXYub3BzID0gZGV2aWNlLT5tbWFwID8gJnV2ZXJic19tbWFwX2ZvcHMgOiAmdXZlcmJzX2ZvcHM7CisJa29iamVjdF9zZXRfbmFtZSgmdXZlcmJzX2Rldi0+Y2Rldi5rb2JqLCAidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOworCWlmIChjZGV2X2FkZCgmdXZlcmJzX2Rldi0+Y2RldiwgYmFzZSwgMSkpCiAJCWdvdG8gZXJyX2NkZXY7CiAKIAl1dmVyYnNfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHV2ZXJic19jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQl1dmVyYnNfZGV2LT5jZGV2LT5kZXYsIHV2ZXJic19kZXYsCisJCQkJCXV2ZXJic19kZXYtPmNkZXYuZGV2LCB1dmVyYnNfZGV2LAogCQkJCQkidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOwogCWlmIChJU19FUlIodXZlcmJzX2Rldi0+ZGV2KSkKIAkJZ290byBlcnJfY2RldjsKQEAgLTc0OSwyMCArNzgxLDE5IEBACiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSh1dmVyYnNfZGV2LT5kZXYsICZkZXZfYXR0cl9hYmlfdmVyc2lvbikpCiAJCWdvdG8gZXJyX2NsYXNzOwogCi0Jc3Bpbl9sb2NrKCZtYXBfbG9jayk7Ci0JZGV2X3RhYmxlW3V2ZXJic19kZXYtPmRldm51bV0gPSB1dmVyYnNfZGV2OwotCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7Ci0KIAlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmdXZlcmJzX2NsaWVudCwgdXZlcmJzX2Rldik7CiAKIAlyZXR1cm47CiAKIGVycl9jbGFzczoKLQlkZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmNkZXYtPmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodXZlcmJzX2NsYXNzLCB1dmVyYnNfZGV2LT5jZGV2LmRldik7CiAKIGVycl9jZGV2OgotCWNkZXZfZGVsKHV2ZXJic19kZXYtPmNkZXYpOwotCWNsZWFyX2JpdCh1dmVyYnNfZGV2LT5kZXZudW0sIGRldl9tYXApOworCWNkZXZfZGVsKCZ1dmVyYnNfZGV2LT5jZGV2KTsKKwlpZiAodXZlcmJzX2Rldi0+ZGV2bnVtIDwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKQorCQljbGVhcl9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKKwllbHNlCisJCWNsZWFyX2JpdChkZXZudW0sIG92ZXJmbG93X21hcCk7CiAKIGVycjoKIAlrcmVmX3B1dCgmdXZlcmJzX2Rldi0+cmVmLCBpYl91dmVyYnNfcmVsZWFzZV9kZXYpOwpAQCAtNzc5LDE0ICs4MTAsMTMgQEAKIAkJcmV0dXJuOwogCiAJZGV2X3NldF9kcnZkYXRhKHV2ZXJic19kZXYtPmRldiwgTlVMTCk7Ci0JZGV2aWNlX2Rlc3Ryb3kodXZlcmJzX2NsYXNzLCB1dmVyYnNfZGV2LT5jZGV2LT5kZXYpOwotCWNkZXZfZGVsKHV2ZXJic19kZXYtPmNkZXYpOworCWRldmljZV9kZXN0cm95KHV2ZXJic19jbGFzcywgdXZlcmJzX2Rldi0+Y2Rldi5kZXYpOworCWNkZXZfZGVsKCZ1dmVyYnNfZGV2LT5jZGV2KTsKIAotCXNwaW5fbG9jaygmbWFwX2xvY2spOwotCWRldl90YWJsZVt1dmVyYnNfZGV2LT5kZXZudW1dID0gTlVMTDsKLQlzcGluX3VubG9jaygmbWFwX2xvY2spOwotCi0JY2xlYXJfYml0KHV2ZXJic19kZXYtPmRldm51bSwgZGV2X21hcCk7CisJaWYgKHV2ZXJic19kZXYtPmRldm51bSA8IElCX1VWRVJCU19NQVhfREVWSUNFUykKKwkJY2xlYXJfYml0KHV2ZXJic19kZXYtPmRldm51bSwgZGV2X21hcCk7CisJZWxzZQorCQljbGVhcl9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtIC0gSUJfVVZFUkJTX01BWF9ERVZJQ0VTLCBvdmVyZmxvd19tYXApOwogCiAJa3JlZl9wdXQoJnV2ZXJic19kZXYtPnJlZiwgaWJfdXZlcmJzX3JlbGVhc2VfZGV2KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1dmVyYnNfZGV2LT5jb21wKTsKQEAgLTg0MCw2ICs4NzAsOCBAQAogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZ1dmVyYnNfY2xpZW50KTsKIAljbGFzc19kZXN0cm95KHV2ZXJic19jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKElCX1VWRVJCU19CQVNFX0RFViwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKKwlpZiAob3ZlcmZsb3dfbWFqKQorCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24ob3ZlcmZsb3dfbWFqLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOwogCWlkcl9kZXN0cm95KCZpYl91dmVyYnNfcGRfaWRyKTsKIAlpZHJfZGVzdHJveSgmaWJfdXZlcmJzX21yX2lkcik7CiAJaWRyX2Rlc3Ryb3koJmliX3V2ZXJic19td19pZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwppbmRleCAwNjc3ZmM3Li5hMjhlODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwpAQCAtMTA5LDcgKzEwOSw2IEBACiAJCXdoaWxlICghQ1FfVkxEX0VOVFJZKHJwdHIsIGNxLT5zaXplX2xvZzIsIGNxZSkpIHsKIAkJCXVkZWxheSgxKTsKIAkJCWlmIChpKysgPiAxMDAwMDAwKSB7Ci0JCQkJQlVHX09OKDEpOwogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YWxsZWQgcm5pY1xuIiwKIAkJCQkgICAgICAgcmRldl9wLT5kZXZfbmFtZSk7CiAJCQkJcmV0dXJuIC1FSU87CkBAIC0xNTUsNyArMTU0LDcgQEAKIAlyZXR1cm4gaXdjaF9jeGdiM19vZmxkX3NlbmQocmRldl9wLT50M2NkZXZfcCwgc2tiKTsKIH0KIAotaW50IGN4aW9fY3JlYXRlX2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCwgc3RydWN0IHQzX2NxICpjcSkKK2ludCBjeGlvX2NyZWF0ZV9jcShzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2X3AsIHN0cnVjdCB0M19jcSAqY3EsIGludCBrZXJuZWwpCiB7CiAJc3RydWN0IHJkbWFfY3Ffc2V0dXAgc2V0dXA7CiAJaW50IHNpemUgPSAoMVVMIDw8IChjcS0+c2l6ZV9sb2cyKSkgKiBzaXplb2Yoc3RydWN0IHQzX2NxZSk7CkBAIC0xNjMsMTIgKzE2MiwxMiBAQAogCWNxLT5jcWlkID0gY3hpb19oYWxfZ2V0X2NxaWQocmRldl9wLT5yc2NwKTsKIAlpZiAoIWNxLT5jcWlkKQogCQlyZXR1cm4gLUVOT01FTTsKLQljcS0+c3dfcXVldWUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghY3EtPnN3X3F1ZXVlKQotCQlyZXR1cm4gLUVOT01FTTsKLQljcS0+cXVldWUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJihyZGV2X3AtPnJuaWNfaW5mby5wZGV2LT5kZXYpLAotCQkJCQkgICAgICgxVUwgPDwgKGNxLT5zaXplX2xvZzIpKSAqCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB0M19jcWUpLAorCWlmIChrZXJuZWwpIHsKKwkJY3EtPnN3X3F1ZXVlID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjcS0+c3dfcXVldWUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY3EtPnF1ZXVlID0gZG1hX2FsbG9jX2NvaGVyZW50KCYocmRldl9wLT5ybmljX2luZm8ucGRldi0+ZGV2KSwgc2l6ZSwKIAkJCQkJICAgICAmKGNxLT5kbWFfYWRkciksIEdGUF9LRVJORUwpOwogCWlmICghY3EtPnF1ZXVlKSB7CiAJCWtmcmVlKGNxLT5zd19xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCmluZGV4IGYzZDQ0MGMuLjA3MzM3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCkBAIC01Myw3ICs1Myw3IEBACiAjZGVmaW5lIFQzX01BWF9QQkxfU0laRSAyNTYKICNkZWZpbmUgVDNfTUFYX1JRX1NJWkUgMTAyNAogI2RlZmluZSBUM19NQVhfUVBfREVQVEggKFQzX01BWF9SUV9TSVpFLTEpCi0jZGVmaW5lIFQzX01BWF9DUV9ERVBUSCA4MTkyCisjZGVmaW5lIFQzX01BWF9DUV9ERVBUSCAyNjIxNDQKICNkZWZpbmUgVDNfTUFYX05VTV9TVEFHICgxPDwxNSkKICNkZWZpbmUgVDNfTUFYX01SX1NJWkUgMHgxMDAwMDAwMDBVTEwKICNkZWZpbmUgVDNfUEFHRVNJWkVfTUFTSyAweGZmZmYwMDAgIC8qIDRLQi0xMjhNQiAqLwpAQCAtMTU3LDcgKzE1Nyw3IEBACiB2b2lkIGN4aW9fcmRldl9jbG9zZShzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2KTsKIGludCBjeGlvX2hhbF9jcV9vcChzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2LCBzdHJ1Y3QgdDNfY3EgKmNxLAogCQkgICBlbnVtIHQzX2NxX29wY29kZSBvcCwgdTMyIGNyZWRpdCk7Ci1pbnQgY3hpb19jcmVhdGVfY3Eoc3RydWN0IGN4aW9fcmRldiAqcmRldiwgc3RydWN0IHQzX2NxICpjcSk7CitpbnQgY3hpb19jcmVhdGVfY3Eoc3RydWN0IGN4aW9fcmRldiAqcmRldiwgc3RydWN0IHQzX2NxICpjcSwgaW50IGtlcm5lbCk7CiBpbnQgY3hpb19kZXN0cm95X2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXYsIHN0cnVjdCB0M19jcSAqY3EpOwogaW50IGN4aW9fcmVzaXplX2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXYsIHN0cnVjdCB0M19jcSAqY3EpOwogdm9pZCBjeGlvX3JlbGVhc2VfdWNvbnRleHQoc3RydWN0IGN4aW9fcmRldiAqcmRldiwgc3RydWN0IGN4aW9fdWNvbnRleHQgKnVjdHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKaW5kZXggYTE5N2E1Yi4uMTUwNzNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCkBAIC03MzAsNyArNzMwLDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjeGlvX3NldF93cV9pbl9lcnJvcihzdHJ1Y3QgdDNfd3EgKndxKQogewotCXdxLT5xdWV1ZS0+d3FfaW5fZXJyLmVyciA9IDE7CisJd3EtPnF1ZXVlLT53cV9pbl9lcnIuZXJyIHw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeGlvX2Rpc2FibGVfd3FfZGIoc3RydWN0IHQzX3dxICp3cSkKK3sKKwl3cS0+cXVldWUtPndxX2luX2Vyci5lcnIgfD0gMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4aW9fZW5hYmxlX3dxX2RiKHN0cnVjdCB0M193cSAqd3EpCit7CisJd3EtPnF1ZXVlLT53cV9pbl9lcnIuZXJyICY9IH4yOworfQorCitzdGF0aWMgaW5saW5lIGludCBjeGlvX3dxX2RiX2VuYWJsZWQoc3RydWN0IHQzX3dxICp3cSkKK3sKKwlyZXR1cm4gISh3cS0+cXVldWUtPndxX2luX2Vyci5lcnIgJiAyKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdDNfY3FlICpjeGlvX25leHRfaHdfY3FlKHN0cnVjdCB0M19jcSAqY3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwppbmRleCBiMGVhMDEwLi5lZTFkOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKQEAgLTY1LDYgKzY1LDQ2IEBACiBzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgoZGV2X211dGV4KTsKIAorc3RhdGljIGludCBkaXNhYmxlX3FwX2RiKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdjaF9xcCAqcWhwID0gcDsKKworCWN4aW9fZGlzYWJsZV93cV9kYigmcWhwLT53cSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX3FwX2RiKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdjaF9xcCAqcWhwID0gcDsKKworCWlmIChkYXRhKQorCQlyaW5nX2Rvb3JiZWxsKHFocC0+cmhwLT5yZGV2LmN0cmxfcXAuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CisJY3hpb19lbmFibGVfd3FfZGIoJnFocC0+d3EpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2RicyhzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwKQoreworCXNwaW5fbG9ja19pcnEoJnJuaWNwLT5sb2NrKTsKKwlpZHJfZm9yX2VhY2goJnJuaWNwLT5xcGlkciwgZGlzYWJsZV9xcF9kYiwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZybmljcC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9kYnMoc3RydWN0IGl3Y2hfZGV2ICpybmljcCwgaW50IHJpbmdfZGIpCit7CisJc3Bpbl9sb2NrX2lycSgmcm5pY3AtPmxvY2spOworCWlkcl9mb3JfZWFjaCgmcm5pY3AtPnFwaWRyLCBlbmFibGVfcXBfZGIsCisJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylyaW5nX2RiKTsKKwlzcGluX3VubG9ja19pcnEoJnJuaWNwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaXdjaF9kYl9kcm9wX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpd2NoX2RldiAqcm5pY3AgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3Y2hfZGV2LAorCQkJCQkgICAgICBkYl9kcm9wX3Rhc2sud29yayk7CisJZW5hYmxlX2RicyhybmljcCwgMSk7Cit9CisKIHN0YXRpYyB2b2lkIHJuaWNfaW5pdChzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwKQogewogCVBEQkcoIiVzIGl3Y2hfZGV2ICVwXG4iLCBfX2Z1bmNfXywgIHJuaWNwKTsKQEAgLTcyLDYgKzExMiw3IEBACiAJaWRyX2luaXQoJnJuaWNwLT5xcGlkcik7CiAJaWRyX2luaXQoJnJuaWNwLT5tbWlkcik7CiAJc3Bpbl9sb2NrX2luaXQoJnJuaWNwLT5sb2NrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcm5pY3AtPmRiX2Ryb3BfdGFzaywgaXdjaF9kYl9kcm9wX3Rhc2spOwogCiAJcm5pY3AtPmF0dHIubWF4X3FwcyA9IFQzX01BWF9OVU1fUVAgLSAzMjsKIAlybmljcC0+YXR0ci5tYXhfd3JzID0gVDNfTUFYX1FQX0RFUFRIOwpAQCAtMTQ3LDYgKzE4OCw4IEBACiAJbXV0ZXhfbG9jaygmZGV2X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkZXZfbGlzdCwgZW50cnkpIHsKIAkJaWYgKGRldi0+cmRldi50M2NkZXZfcCA9PSB0ZGV2KSB7CisJCQlkZXYtPnJkZXYuZmxhZ3MgPSBDWElPX0VSUk9SX0ZBVEFMOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPmRiX2Ryb3BfdGFzayk7CiAJCQlsaXN0X2RlbCgmZGV2LT5lbnRyeSk7CiAJCQlpd2NoX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiAJCQljeGlvX3JkZXZfY2xvc2UoJmRldi0+cmRldik7CkBAIC0xNjUsNyArMjA4LDggQEAKIAlzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2ID0gdGRldi0+dWxwOwogCXN0cnVjdCBpd2NoX2RldiAqcm5pY3A7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwotCXUzMiAgICBwb3J0bnVtID0gcG9ydF9pZCArIDE7CisJdTMyIHBvcnRudW0gPSBwb3J0X2lkICsgMTsKKwlpbnQgZGlzcGF0Y2ggPSAwOwogCiAJaWYgKCFyZGV2KQogCQlyZXR1cm47CkBAIC0xNzQsMjEgKzIxOCw0OSBAQAogCWNhc2UgT0ZGTE9BRF9TVEFUVVNfRE9XTjogewogCQlyZGV2LT5mbGFncyA9IENYSU9fRVJST1JfRkFUQUw7CiAJCWV2ZW50LmV2ZW50ICA9IElCX0VWRU5UX0RFVklDRV9GQVRBTDsKKwkJZGlzcGF0Y2ggPSAxOwogCQlicmVhazsKIAkJfQogCWNhc2UgT0ZGTE9BRF9QT1JUX0RPV046IHsKIAkJZXZlbnQuZXZlbnQgID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCWRpc3BhdGNoID0gMTsKIAkJYnJlYWs7CiAJCX0KIAljYXNlIE9GRkxPQURfUE9SVF9VUDogewogCQlldmVudC5ldmVudCAgPSBJQl9FVkVOVF9QT1JUX0FDVElWRTsKKwkJZGlzcGF0Y2ggPSAxOworCQlicmVhazsKKwkJfQorCWNhc2UgT0ZGTE9BRF9EQl9GVUxMOiB7CisJCWRpc2FibGVfZGJzKHJuaWNwKTsKKwkJYnJlYWs7CisJCX0KKwljYXNlIE9GRkxPQURfREJfRU1QVFk6IHsKKwkJZW5hYmxlX2RicyhybmljcCwgMSk7CisJCWJyZWFrOworCQl9CisJY2FzZSBPRkZMT0FEX0RCX0RST1A6IHsKKwkJdW5zaWduZWQgbG9uZyBkZWxheSA9IDEwMDA7CisJCXVuc2lnbmVkIHNob3J0IHI7CisKKwkJZGlzYWJsZV9kYnMocm5pY3ApOworCQlnZXRfcmFuZG9tX2J5dGVzKCZyLCAyKTsKKwkJZGVsYXkgKz0gciAmIDEwMjM7CisKKwkJLyoKKwkJICogZGVsYXkgaXMgYmV0d2VlbiAxMDAwLTIwMjMgdXNlY3MuCisJCSAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJuaWNwLT5kYl9kcm9wX3Rhc2ssCisJCQl1c2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CiAJCWJyZWFrOwogCQl9CiAJfQogCi0JZXZlbnQuZGV2aWNlID0gJnJuaWNwLT5pYmRldjsKLQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydG51bTsKLQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCWlmIChkaXNwYXRjaCkgeworCQlldmVudC5kZXZpY2UgPSAmcm5pY3AtPmliZGV2OworCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydG51bTsKKwkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwl9CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guaAppbmRleCA4NDczNTUwLi5hMWM0NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KIApAQCAtMTEwLDYgKzExMSw3IEBACiAJc3RydWN0IGlkciBtbWlkcjsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRiX2Ryb3BfdGFzazsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGl3Y2hfZGV2ICp0b19pd2NoX2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IDY2YjQxMzUuLmQ5NDM4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMTM3MSwxNSArMTM3MSw4IEBACiAJdGltLm1hY19hZGRyID0gcmVxLT5kc3RfbWFjOwogCXRpbS52bGFuX3RhZyA9IG50b2hzKHJlcS0+dmxhbl90YWcpOwogCWlmICh0ZGV2LT5jdGwodGRldiwgR0VUX0lGRl9GUk9NX01BQywgJnRpbSkgPCAwIHx8ICF0aW0uZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzIGJhZCBkc3QgbWFjICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQkJX19mdW5jX18sCi0JCQlyZXEtPmRzdF9tYWNbMF0sCi0JCQlyZXEtPmRzdF9tYWNbMV0sCi0JCQlyZXEtPmRzdF9tYWNbMl0sCi0JCQlyZXEtPmRzdF9tYWNbM10sCi0JCQlyZXEtPmRzdF9tYWNbNF0sCi0JCQlyZXEtPmRzdF9tYWNbNV0pOworCQlwcmludGsoS0VSTl9FUlIgIiVzIGJhZCBkc3QgbWFjICVwTVxuIiwKKwkJCV9fZnVuY19fLCByZXEtPmRzdF9tYWMpOwogCQlnb3RvIHJlamVjdDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCmluZGV4IGVkNzE3NTUuLjQ3YjM1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byhlbnRyaWVzKTsKIAljaHAtPmNxLnNpemVfbG9nMiA9IGlsb2cyKGVudHJpZXMpOwogCi0JaWYgKGN4aW9fY3JlYXRlX2NxKCZyaHAtPnJkZXYsICZjaHAtPmNxKSkgeworCWlmIChjeGlvX2NyZWF0ZV9jcSgmcmhwLT5yZGV2LCAmY2hwLT5jcSwgIXVjb250ZXh0KSkgewogCQlrZnJlZShjaHApOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAzZWI4Y2VjLi5iNGQ4OTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTQ1Miw3ICs0NTIsOCBAQAogCQkrKyhxaHAtPndxLnNxX3dwdHIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssIGZsYWcpOwotCXJpbmdfZG9vcmJlbGwocWhwLT53cS5kb29yYmVsbCwgcWhwLT53cS5xcGlkKTsKKwlpZiAoY3hpb193cV9kYl9lbmFibGVkKCZxaHAtPndxKSkKKwkJcmluZ19kb29yYmVsbChxaHAtPndxLmRvb3JiZWxsLCBxaHAtPndxLnFwaWQpOwogCiBvdXQ6CiAJaWYgKGVycikKQEAgLTUxNCw3ICs1MTUsOCBAQAogCQludW1fd3JzLS07CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgZmxhZyk7Ci0JcmluZ19kb29yYmVsbChxaHAtPndxLmRvb3JiZWxsLCBxaHAtPndxLnFwaWQpOworCWlmIChjeGlvX3dxX2RiX2VuYWJsZWQoJnFocC0+d3EpKQorCQlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CiAKIG91dDoKIAlpZiAoZXJyKQpAQCAtNTk3LDcgKzU5OSw4IEBACiAJKysocWhwLT53cS5zcV93cHRyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssIGZsYWcpOwogCi0JcmluZ19kb29yYmVsbChxaHAtPndxLmRvb3JiZWxsLCBxaHAtPndxLnFwaWQpOworCWlmIChjeGlvX3dxX2RiX2VuYWJsZWQoJnFocC0+d3EpKQorCQlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKaW5kZXggNDJiZTBiMS4uYjJiNmZlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwpAQCAtNTQ4LDExICs1NDgsMTAgQEAKIAlzdHJ1Y3QgZWhjYV9lcSAqZXEgPSAmc2hjYS0+ZXE7CiAJc3RydWN0IGVoY2FfZXFlX2NhY2hlX2VudHJ5ICplcWVfY2FjaGUgPSBlcS0+ZXFlX2NhY2hlOwogCXU2NCBlcWVfdmFsdWUsIHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcWVfY250LCBpOwogCWludCBlcV9lbXB0eSA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZXEtPmlycV9zcGlubG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmZXEtPmlycV9zcGlubG9jayk7CiAJaWYgKGlzX2lycSkgewogCQljb25zdCBpbnQgbWF4X3F1ZXJ5X2NudCA9IDEwMDsKIAkJaW50IHF1ZXJ5X2NudCA9IDA7CkBAIC02NDMsNyArNjQyLDcgQEAKIAl9IHdoaWxlICgxKTsKIAogdW5sb2NrX2lycV9zcGlubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcS0+aXJxX3NwaW5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmVxLT5pcnFfc3BpbmxvY2spOwogfQogCiB2b2lkIGVoY2FfdGFza2xldF9lcSh1bnNpZ25lZCBsb25nIGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKaW5kZXggMDMzOGYxZi4uYjEwNWY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwpAQCAtNTUsOSArNTUsNyBAQAogLyoKICAqIGF0dHJpYnV0ZXMgbm90IHN1cHBvcnRlZCBieSBxdWVyeSBxcAogICovCi0jZGVmaW5lIFFQX0FUVFJfUVVFUllfTk9UX1NVUFBPUlRFRCAoSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDIHwgXAotCQkJCSAgICAgSUJfUVBfTUFYX1FQX1JEX0FUT01JQyAgIHwgXAotCQkJCSAgICAgSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgIHwgXAorI2RlZmluZSBRUF9BVFRSX1FVRVJZX05PVF9TVVBQT1JURUQgKElCX1FQX0FDQ0VTU19GTEFHUyAgICAgICB8IFwKIAkJCQkgICAgIElCX1FQX0VOX1NRRF9BU1lOQ19OT1RJRlkpCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwppbmRleCA4YzEyMTNmLi5kYmE4ZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoIXBvcnRfbnVtIHx8IHBvcnRfbnVtID4gaWJkZXYtPnBoeXNfcG9ydF9jbnQpCisJaWYgKCFwb3J0X251bSB8fCBwb3J0X251bSA+IGliZGV2LT5waHlzX3BvcnRfY250IHx8ICFpbl93YykKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKIAogCS8qIGFjY2VwdCBvbmx5IHBtYSByZXF1ZXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCA4Mjg3OGUzLi5lYjdkNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTU5LDggKzU5LDcgQEAKIAlzaXplX3QgZ290OwogCWludCByZXQ7CiAKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PgotCQlQQUdFX1NISUZUOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAobnVtX3BhZ2VzID4gbG9ja19saW1pdCkgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKaW5kZXggMmE5N2M5Ni4uYWU3NTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCkBAIC0xMjE0LDcgKzEyMTQsNyBAQAogc3RhdGljIGludCBidWlsZF9tbHhfaGVhZGVyKHN0cnVjdCBtbHg0X2liX3NxcCAqc3FwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCiAJCQkgICAgdm9pZCAqd3FlLCB1bnNpZ25lZCAqbWx4X3NlZ19sZW4pCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqaWJfZGV2ID0gJnRvX21kZXYoc3FwLT5xcC5pYnFwLmRldmljZSktPmliX2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYgPSBzcXAtPnFwLmlicXAuZGV2aWNlOwogCXN0cnVjdCBtbHg0X3dxZV9tbHhfc2VnICptbHggPSB3cWU7CiAJc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcgKmlubCA9IHdxZSArIHNpemVvZiAqbWx4OwogCXN0cnVjdCBtbHg0X2liX2FoICphaCA9IHRvX21haCh3ci0+d3IudWQuYWgpOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkKIAkJc2VuZF9zaXplICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKIAotCWliX3VkX2hlYWRlcl9pbml0KHNlbmRfc2l6ZSwgbWx4NF9pYl9haF9ncmhfcHJlc2VudChhaCksICZzcXAtPnVkX2hlYWRlcik7CisJaWJfdWRfaGVhZGVyX2luaXQoc2VuZF9zaXplLCBtbHg0X2liX2FoX2dyaF9wcmVzZW50KGFoKSwgMCwgJnNxcC0+dWRfaGVhZGVyKTsKIAogCXNxcC0+dWRfaGVhZGVyLmxyaC5zZXJ2aWNlX2xldmVsICAgPQogCQliZTMyX3RvX2NwdShhaC0+YXYuc2xfdGNsYXNzX2Zsb3dsYWJlbCkgPj4gMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IGMxMDU3NmYuLmQyZDE3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC0xNDk0LDcgKzE0OTQsNyBAQAogCXUxNiBwa2V5OwogCiAJaWJfdWRfaGVhZGVyX2luaXQoMjU2LCAvKiBhc3N1bWUgYSBNQUQgKi8KLQkJCSAgbXRoY2FfYWhfZ3JoX3ByZXNlbnQodG9fbWFoKHdyLT53ci51ZC5haCkpLAorCQkJICBtdGhjYV9haF9ncmhfcHJlc2VudCh0b19tYWgod3ItPndyLnVkLmFoKSksIDAsCiAJCQkgICZzcXAtPnVkX2hlYWRlcik7CiAKIAllcnIgPSBtdGhjYV9yZWFkX2FoKGRldiwgdG9fbWFoKHdyLT53ci51ZC5haCksICZzcXAtPnVkX2hlYWRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwppbmRleCBiOWQwOWJhLi40MjcyYzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmVzX3BjaV90YWJsZVtdID0gewogCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjBfS1IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAogCXswfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKaW5kZXggOTg4NDA1Ni4uY2M3OGZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCkBAIC02NCw4ICs2NCw5IEBACiAgKiBOZXRFZmZlY3QgUENJIHZlbmRvciBpZCBhbmQgTkUwMTAgUENJIGRldmljZSBpZC4KICAqLwogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX05FVEVGRkVDVAkvKiBub3QgaW4gcGNpLmlkcyB5ZXQgKi8KLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRFRkZFQ1QgICAgICAgMHgxNjc4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVURUZGRUNUX05FMDIwIDB4MDEwMAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCAgICAgICAgICAweDE2NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjAgICAgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVURUZGRUNUX05FMDIwX0tSIDB4MDExMAogI2VuZGlmCiAKICNkZWZpbmUgTkUwMjBfUkVWICAgNApAQCAtMTkzLDggKzE5NCw4IEBACiBleHRlcm4gdTMyIGNtX3BhY2tldHNfcmVjZWl2ZWQ7CiBleHRlcm4gdTMyIGNtX3BhY2tldHNfZHJvcHBlZDsKIGV4dGVybiB1MzIgY21fcGFja2V0c19yZXRyYW5zOwotZXh0ZXJuIHUzMiBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci1leHRlcm4gdTMyIGNtX2xpc3RlbnNfZGVzdHJveWVkOworZXh0ZXJuIGF0b21pY190IGNtX2xpc3RlbnNfY3JlYXRlZDsKK2V4dGVybiBhdG9taWNfdCBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKIGV4dGVybiB1MzIgY21fYmFja2xvZ19kcm9wczsKIGV4dGVybiBhdG9taWNfdCBjbV9sb29wYmFja3M7CiBleHRlcm4gYXRvbWljX3QgY21fbm9kZXNfY3JlYXRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDM5NDY4YzI3Li4yYTQ5ZWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKQEAgLTY3LDggKzY3LDggQEAKIHUzMiBjbV9wYWNrZXRzX3JldHJhbnM7CiB1MzIgY21fcGFja2V0c19jcmVhdGVkOwogdTMyIGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci11MzIgY21fbGlzdGVuc19jcmVhdGVkOwotdTMyIGNtX2xpc3RlbnNfZGVzdHJveWVkOworYXRvbWljX3QgY21fbGlzdGVuc19jcmVhdGVkOworYXRvbWljX3QgY21fbGlzdGVuc19kZXN0cm95ZWQ7CiB1MzIgY21fYmFja2xvZ19kcm9wczsKIGF0b21pY190IGNtX2xvb3BiYWNrczsKIGF0b21pY190IGNtX25vZGVzX2NyZWF0ZWQ7CkBAIC0xMDExLDkgKzEwMTEsMTAgQEAKIAkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CiAJCQkJCQkJIGxvb3BiYWNrLT5sb2NfcG9ydDsKIAkJCQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKKwkJCQkJYWRkX3JlZl9jbV9ub2RlKGxvb3BiYWNrKTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQkJY21fZXZlbnRfY29ubmVjdF9lcnJvcigmZXZlbnQpOwogCQkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9MSVNURU5FUl9ERVNUUk9ZRUQ7Ci0JCQkJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAKIAkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCiAJCQkJCQkJIGNtX25vZGUpOwpAQCAtMTA0Miw3ICsxMDQzLDcgQEAKIAkJa2ZyZWUobGlzdGVuZXIpOwogCQlsaXN0ZW5lciA9IE5VTEw7CiAJCXJldCA9IDA7Ci0JCWNtX2xpc3RlbnNfZGVzdHJveWVkKys7CisJCWF0b21pY19pbmMoJmNtX2xpc3RlbnNfZGVzdHJveWVkKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9jb3JlLT5saXN0ZW5fbGlzdF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtMzE3Miw3ICszMTczLDcgQEAKIAkJCWdfY21fY29yZS0+YXBpLT5zdG9wX2xpc3RlbmVyKGdfY21fY29yZSwgKHZvaWQgKiljbV9ub2RlKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJY21fbGlzdGVuc19jcmVhdGVkKys7CisJCWF0b21pY19pbmMoJmNtX2xpc3RlbnNfY3JlYXRlZCk7CiAJfQogCiAJY21faWQtPmFkZF9yZWYoY21faWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggYjFjMmNiYi4uY2U3ZjUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC03NDgsMTYgKzc0OCwyOCBAQAogCiAJaWYgKGh3X3JldiAhPSBORTAyMF9SRVYpIHsKIAkJLyogaW5pdCBzZXJkZXMgMCAqLwotCQlpZiAod2lkZV9wcG1fb2Zmc2V0ICYmIChuZXNhZGFwdGVyLT5waHlfdHlwZVswXSA9PSBORVNfUEhZX1RZUEVfQ1g0KSkKLQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDBGRkZBQSk7Ci0JCWVsc2UKKwkJc3dpdGNoIChuZXNhZGFwdGVyLT5waHlfdHlwZVswXSkgeworCQljYXNlIE5FU19QSFlfVFlQRV9DWDQ6CisJCQlpZiAod2lkZV9wcG1fb2Zmc2V0KQorCQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDBGRkZBQSk7CisJCQllbHNlCisJCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wwLCAweDAwMDAwMEZGKTsKKwkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9LUjoKIAkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDAwMDBGRik7Ci0KLQkJaWYgKG5lc2FkYXB0ZXItPnBoeV90eXBlWzBdID09IE5FU19QSFlfVFlQRV9QVU1BXzFHKSB7CisJCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19UWF9FTVAwLCAweDAwMDAwMDAwKTsKKwkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9QVU1BXzFHOgorCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wwLCAweDAwMDAwMEZGKTsKIAkJCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwKTsKIAkJCXNkcyB8PSAweDAwMDAwMTAwOwogCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwLCBzZHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DRFJfQ09OVFJPTDAsIDB4MDAwMDAwRkYpOworCQkJYnJlYWs7CiAJCX0KKwogCQlpZiAoIU9uZUdfTW9kZSkKIAkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX1RYX0hJR0haX0xBTkVfTU9ERTAsIDB4MTExMTAwMDApOwogCkBAIC03NzgsNiArNzkwLDkgQEAKIAkJCWlmICh3aWRlX3BwbV9vZmZzZXQpCiAJCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wxLCAweDAwMEZGRkFBKTsKIAkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9LUjoKKwkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX1RYX0VNUDEsIDB4MDAwMDAwMDApOworCQkJYnJlYWs7CiAJCWNhc2UgTkVTX1BIWV9UWVBFX1BVTUFfMUc6CiAJCQlzZHMgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NPTU1PTl9DT05UUk9MMSk7CiAJCQlzZHMgfD0gMHgwMDAwMDAxMDA7CkBAIC0xMjc5LDExNSArMTI5NCwxMDAgQEAKIAogCiAvKioKLSAqIG5lc19pbml0X3BoeQorICogbmVzX2luaXRfMWdfcGh5CiAgKi8KLWludCBuZXNfaW5pdF9waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldikKK2ludCBuZXNfaW5pdF8xZ19waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTggcGh5X3R5cGUsIHU4IHBoeV9pbmRleCkKIHsKLQlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CisJdTMyIGNvdW50ZXIgPSAwOworCXUxNiBwaHlfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAxLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAyMywgcGh5X2luZGV4LCAweGIwMDApOworCisJLyogUmVzZXQgdGhlIFBIWSAqLworCW5lc193cml0ZV8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAweDgwMDApOworCXVkZWxheSgxMDApOworCWNvdW50ZXIgPSAwOworCWRvIHsKKwkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwkJaWYgKGNvdW50ZXIrKyA+IDEwMCkgeworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHBoeV9kYXRhICYgMHg4MDAwKTsKKworCS8qIFNldHRpbmcgbm8gcGh5IGxvb3BiYWNrICovCisJcGh5X2RhdGEgJj0gMHhiZmZmOworCXBoeV9kYXRhIHw9IDB4MTE0MDsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgIHBoeV9kYXRhKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE3LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MWUsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKworCS8qIFNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrICovCisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgMHhmZmVlKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMHgxOSwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCisJLyogdHVybmluZyBvbiBmbG93IGNvbnRyb2wgKi8KKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgNCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCW5lc193cml0ZV8xR19waHlfcmVnKG5lc2RldiwgNCwgcGh5X2luZGV4LCAocGh5X2RhdGEgJiB+KDB4MDNFMCkpIHwgMHhjMDApOworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisKKwkvKiBDbGVhciBIYWxmIGR1cGxleCAqLworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsIHBoeV9kYXRhICYgfigweDAxMDApKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgOSwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgcGh5X2RhdGEgfCAweDAzMDApOworCisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIG5lc19pbml0XzIwMjVfcGh5CisgKi8KK2ludCBuZXNfaW5pdF8yMDI1X3BoeShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCBwaHlfdHlwZSwgdTggcGh5X2luZGV4KQoreworCXUzMiB0ZW1wX3BoeV9kYXRhID0gMDsKKwl1MzIgdGVtcF9waHlfZGF0YTIgPSAwOwogCXUzMiBjb3VudGVyID0gMDsKIAl1MzIgc2RzOwogCXUzMiBtYWNfaW5kZXggPSBuZXNkZXYtPm1hY19pbmRleDsKLQl1MzIgdHhfY29uZmlnID0gMDsKLQl1MTYgcGh5X2RhdGE7Ci0JdTMyIHRlbXBfcGh5X2RhdGEgPSAwOwotCXUzMiB0ZW1wX3BoeV9kYXRhMiA9IDA7Ci0JdTggIHBoeV90eXBlID0gbmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XTsKLQl1OCAgcGh5X2luZGV4ID0gbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF07CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGZpcnN0X2F0dGVtcHQgPSAxOwogCi0JaWYgKChuZXNhZGFwdGVyLT5PbmVHX01vZGUpICYmCi0JICAgIChwaHlfdHlwZSAhPSBORVNfUEhZX1RZUEVfUFVNQV8xRykpIHsKLQkJbmVzX2RlYnVnKE5FU19EQkdfUEhZLCAiMUcgUEhZLCBtYWNfaW5kZXggPSAlZC5cbiIsIG1hY19pbmRleCk7Ci0JCWlmIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfMUcpIHsKLQkJCXR4X2NvbmZpZyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19UWF9DT05GSUcpOwotCQkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7Ci0JCQl0eF9jb25maWcgfD0gMHgwNDsKLQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHLCB0eF9jb25maWcpOwotCQl9CisJLyogQ2hlY2sgZmlybXdhcmUgaGVhcnRiZWF0ICovCisJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKKwl1ZGVsYXkoMTUwMCk7CisJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwl0ZW1wX3BoeV9kYXRhMiA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX01ESU9fQ09OVFJPTCk7CiAKLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDEsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAyMywgcGh5X2luZGV4LCAweGIwMDApOwotCi0JCS8qIFJlc2V0IHRoZSBQSFkgKi8KLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsIDB4ODAwMCk7Ci0JCXVkZWxheSgxMDApOwotCQljb3VudGVyID0gMDsKLQkJZG8gewotCQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJCWlmIChjb3VudGVyKysgPiAxMDApCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKHBoeV9kYXRhICYgMHg4MDAwKTsKLQotCQkvKiBTZXR0aW5nIG5vIHBoeSBsb29wYmFjayAqLwotCQlwaHlfZGF0YSAmPSAweGJmZmY7Ci0JCXBoeV9kYXRhIHw9IDB4MTE0MDsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsICBwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE3LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDFlLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogU2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2sgKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAweDE5LCBwaHlfaW5kZXgsIDB4ZmZlZSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE5LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogdHVybmluZyBvbiBmbG93IGNvbnRyb2wgKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDQsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsIChwaHlfZGF0YSAmIH4oMHgwM0UwKSkgfCAweGMwMCk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogQ2xlYXIgSGFsZiBkdXBsZXggKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsIHBoeV9kYXRhICYgfigweDAxMDApKTsKLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQotCQluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOwotCQluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgcGh5X2RhdGEgfCAweDAzMDApOwotCi0JCXJldHVybiAwOwotCX0KLQotCWlmICgocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0lSSVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfQVJHVVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfU0ZQX0QpKSB7Ci0JCS8qIHNldHVwIDEwRyBNRElPIG9wZXJhdGlvbiAqLwotCQl0eF9jb25maWcgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHKTsKLQkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7Ci0JCXR4X2NvbmZpZyB8PSAweDE1OwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX1RYX0NPTkZJRywgdHhfY29uZmlnKTsKLQl9Ci0JaWYgKChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfQVJHVVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfU0ZQX0QpKSB7Ci0JCXUzMiBmaXJzdF90aW1lID0gMTsKLQotCQkvKiBDaGVjayBmaXJtd2FyZSBoZWFydGJlYXQgKi8KLQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwlpZiAodGVtcF9waHlfZGF0YSAhPSB0ZW1wX3BoeV9kYXRhMikgeworCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZmQpOwogCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJdWRlbGF5KDE1MDApOwotCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOwotCQl0ZW1wX3BoeV9kYXRhMiA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX01ESU9fQ09OVFJPTCk7CisJCWlmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpID4gMHgyMCkKKwkJCXJldHVybiAwOworCQlwcmludGsoUEZYICJSZWluaXRpYWxpemUgZXh0ZXJuYWwgUEhZXG4iKTsKKwl9CiAKLQkJaWYgKHRlbXBfcGh5X2RhdGEgIT0gdGVtcF9waHlfZGF0YTIpIHsKLQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdmZCk7Ci0JCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCWlmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpID4gMHgyMCkKLQkJCQlyZXR1cm4gMDsKLQkJCXByaW50ayhQRlggIlJlaW5pdGlhbGl6aW5nIFBIWVxuIik7Ci0JCX0KKwkvKiBubyBoZWFydGJlYXQsIGNvbmZpZ3VyZSB0aGUgUEhZICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4MDAwMCwgMHg4MDAwKTsKKwluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAwLCAweDAwMDApOworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTYsIDB4MDAwQSk7CisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOCwgMHgwMDUyKTsKIAotCQkvKiBubyBoZWFydGJlYXQsIGNvbmZpZ3VyZSB0aGUgUEhZICovCi0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweDAwMDAsIDB4ODAwMCk7Ci0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDAsIDB4MDAwMCk7CisJc3dpdGNoIChwaHlfdHlwZSkgeworCWNhc2UgTkVTX1BIWV9UWVBFX0FSR1VTOgogCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzE2LCAweDAwMEEpOwogCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzE4LCAweDAwNTIpOwotCQlpZiAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB7Ci0JCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAyLCAweDAwMEMpOwotCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDA4KTsKLQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAwMSk7Ci0JCX0gZWxzZSB7Ci0JCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAyLCAweDAwMDQpOwotCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDM4KTsKLQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAxMyk7Ci0JCX0KKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMiwgMHgwMDBDKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDA4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNywgMHgwMDAxKTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxYSwgMHgwMDk4KTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNiwgMHgwRTAwKTsKIApAQCAtMTM5NSw3MSArMTM5NSwxNTEgQEAKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNiwgMHgwMDA3KTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNywgMHgwMDBBKTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwOCwgMHgwMDA5KTsKKwkJYnJlYWs7CiAKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyOCwgMHhBNTI4KTsKKwljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxNiwgMHgwMDBBKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOCwgMHgwMDUyKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMiwgMHgwMDA0KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDM4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNywgMHgwMDEzKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxYSwgMHgwMDk4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNiwgMHgwRTAwKTsKIAotCQkvKiBCcmluZyBQSFkgb3V0IG9mIHJlc2V0ICovCi0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDAsIDB4MDAwMik7CisJCS8qIHNldHVwIExFRHMgKi8KKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNiwgMHgwMDA3KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNywgMHgwMDBBKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwOCwgMHgwMDA5KTsKKwkJYnJlYWs7CiAKLQkJLyogQ2hlY2sgZm9yIGhlYXJ0YmVhdCAqLwotCQljb3VudGVyID0gMDsKLQkJbWRlbGF5KDY5MCk7CisJY2FzZSBORVNfUEhZX1RZUEVfS1I6CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTYsIDB4MDAwQSk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTgsIDB4MDA1Mik7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDIsIDB4MDAwQyk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTksIDB4MDAxMCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAxMyk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMWEsIDB4MDA4MCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjYsIDB4MEUwMCk7CisKKwkJLyogc2V0dXAgTEVEcyAqLworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA2LCAweDAwMEIpOworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA3LCAweDAwMDMpOworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA4LCAweDAwMDQpOworCisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjIsIDB4NDA2RCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjMsIDB4MDAyMCk7CisJCWJyZWFrOworCX0KKworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjgsIDB4QTUyOCk7CisKKwkvKiBCcmluZyBQSFkgb3V0IG9mIHJlc2V0ICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMCwgMHgwMDAyKTsKKworCS8qIENoZWNrIGZvciBoZWFydGJlYXQgKi8KKwljb3VudGVyID0gMDsKKwltZGVsYXkoNjkwKTsKKwluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOworCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOworCWRvIHsKKwkJaWYgKGNvdW50ZXIrKyA+IDE1MCkgeworCQkJcHJpbnRrKFBGWCAiTm8gUEhZIGhlYXJ0YmVhdFxuIik7CisJCQlicmVhazsKKwkJfQorCQltZGVsYXkoMSk7CiAJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdlZSk7CisJCXRlbXBfcGh5X2RhdGEyID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKKwl9IHdoaWxlICgodGVtcF9waHlfZGF0YTIgPT0gdGVtcF9waHlfZGF0YSkpOworCisJLyogd2FpdCBmb3IgdHJhY2tpbmcgKi8KKwljb3VudGVyID0gMDsKKwlkbyB7CisJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdmZCk7CiAJCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQlkbyB7Ci0JCQlpZiAoY291bnRlcisrID4gMTUwKSB7Ci0JCQkJcHJpbnRrKFBGWCAiTm8gUEhZIGhlYXJ0YmVhdFxuIik7CisJCWlmIChjb3VudGVyKysgPiAzMDApIHsKKwkJCWlmICgoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA9PSAweDApICYmIGZpcnN0X2F0dGVtcHQpIHsKKwkJCQlmaXJzdF9hdHRlbXB0ID0gMDsKKwkJCQljb3VudGVyID0gMDsKKwkJCQkvKiByZXNldCBBTUNDIFBIWSBhbmQgdHJ5IGFnYWluICovCisJCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZTg1NCwgMHgwMGMwKTsKKwkJCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhlODU0LCAweDAwNDApOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQotCQkJbWRlbGF5KDEpOwotCQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKLQkJCXRlbXBfcGh5X2RhdGEyID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJfSB3aGlsZSAoKHRlbXBfcGh5X2RhdGEyID09IHRlbXBfcGh5X2RhdGEpKTsKKwkJfQorCQltZGVsYXkoMTApOworCX0gd2hpbGUgKCh0ZW1wX3BoeV9kYXRhICYgMHhmZikgPCAweDMwKTsKIAotCQkvKiB3YWl0IGZvciB0cmFja2luZyAqLwotCQljb3VudGVyID0gMDsKLQkJZG8gewotCQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2ZkKTsKLQkJCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJaWYgKGNvdW50ZXIrKyA+IDMwMCkgewotCQkJCWlmICgoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA9PSAweDApICYmIGZpcnN0X3RpbWUpIHsKLQkJCQkJZmlyc3RfdGltZSA9IDA7Ci0JCQkJCWNvdW50ZXIgPSAwOwotCQkJCQkvKiByZXNldCBBTUNDIFBIWSBhbmQgdHJ5IGFnYWluICovCi0JCQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGU4NTQsIDB4MDBjMCk7Ci0JCQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGU4NTQsIDB4MDA0MCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ayhQRlggIlBIWSBkaWQgbm90IHRyYWNrXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJbWRlbGF5KDEwKTsKLQkJfSB3aGlsZSAoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA8IDB4MzApOwotCi0JCS8qIHNldHVwIHNpZ25hbCBpbnRlZ3JpdHkgKi8KLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwMywgMHgwMDAwKTsKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4RjAwRCwgMHgwMEZFKTsKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4RjAwRSwgMHgwMDMyKTsKKwkvKiBzZXR1cCBzaWduYWwgaW50ZWdyaXR5ICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwMywgMHgwMDAwKTsKKwluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhGMDBELCAweDAwRkUpOworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweEYwMEUsIDB4MDAzMik7CisJaWYgKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9LUikgeworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhGMDBGLCAweDAwMEMpOworCX0gZWxzZSB7CiAJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweEYwMEYsIDB4MDAwMik7CiAJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTQsIDB4MDA2Myk7Ci0KLQkJLyogcmVzZXQgc2VyZGVzICovCi0JCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsKLQkJCQkgICAgICAgbWFjX2luZGV4ICogMHgyMDApOwotCQlzZHMgfD0gMHgxOwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DT01NT05fQ09OVFJPTDAgKwotCQkJCSAgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7Ci0JCXNkcyAmPSAweGZmZmZmZmZlOwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DT01NT05fQ09OVFJPTDAgKwotCQkJCSAgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7Ci0KLQkJY291bnRlciA9IDA7Ci0JCXdoaWxlICgoKG5lc19yZWFkMzIobmVzZGV2LT5yZWdzICsgTkVTX1NPRlRXQVJFX1JFU0VUKSAmIDB4MDAwMDAwNDApICE9IDB4MDAwMDAwNDApCi0JCQkJJiYgKGNvdW50ZXIrKyA8IDUwMDApKQotCQkJOwogCX0KLQlyZXR1cm4gMDsKKworCS8qIHJlc2V0IHNlcmRlcyAqLworCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDApOworCXNkcyB8PSAweDE7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7CisJc2RzICY9IDB4ZmZmZmZmZmU7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7CisKKwljb3VudGVyID0gMDsKKwl3aGlsZSAoKChuZXNfcmVhZDMyKG5lc2Rldi0+cmVncyArIE5FU19TT0ZUV0FSRV9SRVNFVCkgJiAweDAwMDAwMDQwKSAhPSAweDAwMDAwMDQwKQorCQkJJiYgKGNvdW50ZXIrKyA8IDUwMDApKQorCQk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogbmVzX2luaXRfcGh5CisgKi8KK2ludCBuZXNfaW5pdF9waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldikKK3sKKwlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CisJdTMyIG1hY19pbmRleCA9IG5lc2Rldi0+bWFjX2luZGV4OworCXUzMiB0eF9jb25maWcgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggIHBoeV90eXBlID0gbmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XTsKKwl1OCAgcGh5X2luZGV4ID0gbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF07CisJaW50IHJldCA9IDA7CisKKwl0eF9jb25maWcgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHKTsKKwlpZiAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFXzFHKSB7CisJCS8qIHNldHVwIDFHIE1ESU8gb3BlcmF0aW9uICovCisJCXR4X2NvbmZpZyAmPSAweEZGRkZGRkUzOworCQl0eF9jb25maWcgfD0gMHgwNDsKKwl9IGVsc2UgeworCQkvKiBzZXR1cCAxMEcgTURJTyBvcGVyYXRpb24gKi8KKwkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7CisJCXR4X2NvbmZpZyB8PSAweDE1OworCX0KKwluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX1RYX0NPTkZJRywgdHhfY29uZmlnKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV9sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKHBoeV90eXBlKSB7CisJY2FzZSBORVNfUEhZX1RZUEVfMUc6CisJCXJldCA9IG5lc19pbml0XzFnX3BoeShuZXNkZXYsIHBoeV90eXBlLCBwaHlfaW5kZXgpOworCQlicmVhazsKKwljYXNlIE5FU19QSFlfVFlQRV9BUkdVUzoKKwljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwljYXNlIE5FU19QSFlfVFlQRV9LUjoKKwkJcmV0ID0gbmVzX2luaXRfMjAyNV9waHkobmVzZGV2LCBwaHlfdHlwZSwgcGh5X2luZGV4KTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0yNDYwLDIzICsyNTQwLDkgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XSkgewotCQkJY2FzZSBORVNfUEhZX1RZUEVfSVJJUzoKLQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCQl1MzJ0ZW1wID0gMjA7Ci0JCQkJZG8gewotCQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQkJcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJCQlpZiAoKHBoeV9kYXRhID09IHRlbXBfcGh5X2RhdGEpIHx8ICghKC0tdTMydGVtcCkpKQotCQkJCQkJYnJlYWs7Ci0JCQkJCXRlbXBfcGh5X2RhdGEgPSBwaHlfZGF0YTsKLQkJCQl9IHdoaWxlICgxKTsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19QSFksICIlczogUGh5IGRhdGEgPSAweCUwNFgsIGxpbmsgd2FzICVzLlxuIiwKLQkJCQkJX19mdW5jX18sIHBoeV9kYXRhLCBuZXNhZGFwdGVyLT5tYWNfbGlua19kb3duW21hY19pbmRleF0gPyAiRE9XTiIgOiAiVVAiKTsKLQkJCQlicmVhazsKLQogCQkJY2FzZSBORVNfUEhZX1RZUEVfQVJHVVM6CiAJCQljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwkJCWNhc2UgTkVTX1BIWV9UWVBFX0tSOgogCQkJCS8qIGNsZWFyIHRoZSBhbGFybXMgKi8KIAkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCA0LCAweDAwMDgpOwogCQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF0sIDQsIDB4YzAwMSk7CkBAIC0zMzUyLDggKzM0MTgsNiBAQAogCXUxNiBhc3luY19ldmVudF9pZDsKIAl1OCB0Y3Bfc3RhdGU7CiAJdTggaXdhcnBfc3RhdGU7Ci0JaW50IG11c3RfZGlzY29ubiA9IDE7Ci0JaW50IG11c3RfdGVybWluYXRlID0gMDsKIAlzdHJ1Y3QgaWJfZXZlbnQgaWJldmVudDsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlxuIik7CkBAIC0zMzY3LDYgKzM0MzEsOCBAQAogCQlCVUdfT04oIWNvbnRleHQpOwogCX0KIAorCS8qIGNvbnRleHQgaXMgbmVzcXAgdW5sZXNzIGFzeW5jX2V2ZW50X2lkID09IENRIEVSUk9SICovCisJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CiAJYXN5bmNfZXZlbnRfaWQgPSAodTE2KWFlcV9pbmZvOwogCXRjcF9zdGF0ZSA9IChhZXFfaW5mbyAmIE5FU19BRVFFX1RDUF9TVEFURV9NQVNLKSA+PiBORVNfQUVRRV9UQ1BfU1RBVEVfU0hJRlQ7CiAJaXdhcnBfc3RhdGUgPSAoYWVxX2luZm8gJiBORVNfQUVRRV9JV0FSUF9TVEFURV9NQVNLKSA+PiBORVNfQUVRRV9JV0FSUF9TVEFURV9TSElGVDsKQEAgLTMzNzgsOCArMzQ0NCw2IEBACiAKIAlzd2l0Y2ggKGFzeW5jX2V2ZW50X2lkKSB7CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfRklOX1JFQ0VJVkVEOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7Ci0KIAkJCWlmIChuZXNxcC0+dGVybV9mbGFncykKIAkJCQlyZXR1cm47IC8qIElnbm9yZSBpdCwgd2FpdCBmb3IgY2xvc2UgY29tcGxldGUgKi8KIApAQCAtMzM5NCw3OSArMzQ1OCw0OCBAQAogCQkJCQkJYXN5bmNfZXZlbnRfaWQsIG5lc3FwLT5sYXN0X2FlcSwgdGNwX3N0YXRlKTsKIAkJCX0KIAotCQkJaWYgKCh0Y3Bfc3RhdGUgIT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFX1dBSVQpIHx8Ci0JCQkJCShuZXNxcC0+aWJxcF9zdGF0ZSAhPSBJQl9RUFNfUlRTKSkgewotCQkJCS8qIEZJTiBSZWNlaXZlZCBidXQgdGNwIHN0YXRlIG9yIElCIHN0YXRlIG1vdmVkIG9uLAotCQkJCQkJc2hvdWxkIGV4cGVjdCBhCWNsb3NlIGNvbXBsZXRlICovCi0JCQkJcmV0dXJuOwotCQkJfQotCisJCQlicmVhazsKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9DTE9TRV9DT01QTEVURToKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwogCQkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzKSB7CiAJCQkJbmVzX3Rlcm1pbmF0ZV9kb25lKG5lc3FwLCAwKTsKIAkJCQlyZXR1cm47CiAJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKKwkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX0NMT1NJTkc7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0NMT1NJTkcsIDAsIDApOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQkJYnJlYWs7CiAKLQkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9DT05ORUNUSU9OX1JFU0VUOgogCQljYXNlIE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwotCQkJaWYgKGFzeW5jX2V2ZW50X2lkID09IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVCkgewotCQkJCXRjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQl9CisJCQl0Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CiAJCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKIAkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7CiAJCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQotCQkJaWYgKCh0Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRCkgfHwKLQkJCQkJKHRjcF9zdGF0ZSA9PSBORVNfQUVRRV9UQ1BfU1RBVEVfVElNRV9XQUlUKSkgewotCQkJCW5lc3FwLT5odGVfYWRkZWQgPSAwOwotCQkJCW5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0VSUk9SIHwgTkVTX0NRUF9RUF9ERUxfSFRFOwotCQkJfQotCi0JCQlpZiAoKG5lc3FwLT5pYnFwX3N0YXRlID09IElCX1FQU19SVFMpICYmCi0JCQkJCSgodGNwX3N0YXRlID09IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRV9XQUlUKSB8fAotCQkJCQkoYXN5bmNfZXZlbnRfaWQgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkpKSB7Ci0JCQkJc3dpdGNoIChuZXNxcC0+aHdfaXdhcnBfc3RhdGUpIHsKLQkJCQkJY2FzZSBORVNfQUVRRV9JV0FSUF9TVEFURV9SVFM6Ci0JCQkJCQluZXh0X2l3YXJwX3N0YXRlID0gTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9DTE9TSU5HOwotCQkJCQkJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gTkVTX0FFUUVfSVdBUlBfU1RBVEVfQ0xPU0lORzsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIE5FU19BRVFFX0lXQVJQX1NUQVRFX1RFUk1JTkFURToKLQkJCQkJCW11c3RfZGlzY29ubiA9IDA7IC8qIHRlcm1pbmF0ZSBwYXRoIHRha2VzIGNhcmUgb2YgZGlzY29ubiAqLwotCQkJCQkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzID09IDApCi0JCQkJCQkJbXVzdF90ZXJtaW5hdGUgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoYXN5bmNfZXZlbnRfaWQgPT0gIE5FU19BRVFFX0FFSURfTExQX0ZJTl9SRUNFSVZFRCkgewotCQkJCQkvKiBGSU4gUmVjZWl2ZWQgYnV0IGliIHN0YXRlIG5vdCBSVFMsCi0JCQkJCQkJY2xvc2UgY29tcGxldGUgd2lsbCBiZSBvbiBpdHMgd2F5ICovCi0JCQkJCW11c3RfZGlzY29ubiA9IDA7Ci0JCQkJfQotCQkJfQorCQkJbmVzcXAtPmh0ZV9hZGRlZCA9IDA7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfRVJST1IgfCBORVNfQ1FQX1FQX0RFTF9IVEU7CisJCQluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG5leHRfaXdhcnBfc3RhdGUsIDAsIDApOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQkJYnJlYWs7CiAKLQkJCWlmIChtdXN0X3Rlcm1pbmF0ZSkKLQkJCQluZXNfdGVybWluYXRlX2Nvbm5lY3Rpb24obmVzZGV2LCBuZXNxcCwgYWVxZSwgSUJfRVZFTlRfUVBfRkFUQUwpOwotCQkJZWxzZSBpZiAobXVzdF9kaXNjb25uKSB7Ci0JCQkJaWYgKG5leHRfaXdhcnBfc3RhdGUpIHsKLQkJCQkJbmVzX2RlYnVnKE5FU19EQkdfQUVRLCAiaXNzdWluZyBodyBtb2RpZnlxcCBmb3IgUVAldS4gbmV4dCBzdGF0ZSA9IDB4JTA4WFxuIiwKLQkJCQkJCSAgbmVzcXAtPmh3cXAucXBfaWQsIG5leHRfaXdhcnBfc3RhdGUpOwotCQkJCQluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG5leHRfaXdhcnBfc3RhdGUsIDAsIDApOwotCQkJCX0KLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVDoKKwkJCWlmIChhdG9taWNfcmVhZCgmbmVzcXAtPmNsb3NlX3RpbWVyX3N0YXJ0ZWQpKQorCQkJCXJldHVybjsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gaXdhcnBfc3RhdGU7CisJCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gdGNwX3N0YXRlOworCQkJbmVzcXAtPmxhc3RfYWVxID0gYXN5bmNfZXZlbnRfaWQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX1RFUk1JTkFURV9TRU5UOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CiAJCQluZXNfdGVybWluYXRlX3NlbmRfZmluKG5lc2RldiwgbmVzcXAsIGFlcWUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9URVJNSU5BVEVfUkVDRUlWRUQ6Ci0JCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKIAkJCW5lc190ZXJtaW5hdGVfcmVjZWl2ZWQobmVzZGV2LCBuZXNxcCwgYWVxZSk7CiAJCQlicmVhazsKIApAQCAtMzQ4MCw3ICszNTEzLDggQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfRERQX01FU1NBR0VfVE9PX0xPTkdfRk9SX0FWQUlMQUJMRV9CVUZGRVI6CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfQk9VTkRTX1ZJT0xBVElPTjoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9UT19XUkFQOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJRUFsldV0gYXN5bmNfZXZlbnRfaWQ9MHglMDRYIElCX0VWRU5UX1FQX0FDQ0VTU19FUlJcbiIsCisJCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBhc3luY19ldmVudF9pZCk7CiAJCQluZXNfdGVybWluYXRlX2Nvbm5lY3Rpb24obmVzZGV2LCBuZXNxcCwgYWVxZSwgSUJfRVZFTlRfUVBfQUNDRVNTX0VSUik7CiAJCQlicmVhazsKIApAQCAtMzQ4OCw3ICszNTIyLDYgQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9TRUdNRU5UX1RPT19TTUFMTDoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9NTzoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9RTjoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwogCQkJaWYgKGl3YXJwX29wY29kZShuZXNxcCwgYWVxX2luZm8pID4gSVdBUlBfT1BDT0RFX1RFUk0pIHsKIAkJCQlhZXFfaW5mbyAmPSAweGZmZmYwMDAwOwogCQkJCWFlcV9pbmZvIHw9IE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX1VORVhQRUNURURfT1BDT0RFOwpAQCAtMzUzMCw3ICszNTYzLDggQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX1NUQUdfWkVST19JTlZBTElEOgogCQljYXNlIE5FU19BRVFFX0FFSURfUk9FX0lOVkFMSURfUkRNQV9SRUFEX1JFUVVFU1Q6CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9ST0VfSU5WQUxJRF9SRE1BX1dSSVRFX09SX1JFQURfUkVTUDoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUVBbJXVdIGFzeW5jX2V2ZW50X2lkPTB4JTA0WCBJQl9FVkVOVF9RUF9GQVRBTFxuIiwKKwkJCQkJbmVzcXAtPmh3cXAucXBfaWQsIGFzeW5jX2V2ZW50X2lkKTsKIAkJCW5lc190ZXJtaW5hdGVfY29ubmVjdGlvbihuZXNkZXYsIG5lc3FwLCBhZXFlLCBJQl9FVkVOVF9RUF9GQVRBTCk7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKaW5kZXggMDg0YmUwZS4uOWIxZTdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCkBAIC0zNywxMiArMzcsMTIgQEAKIAogI2RlZmluZSBORVNfUEhZX1RZUEVfQ1g0ICAgICAgIDEKICNkZWZpbmUgTkVTX1BIWV9UWVBFXzFHICAgICAgICAyCi0jZGVmaW5lIE5FU19QSFlfVFlQRV9JUklTICAgICAgMwogI2RlZmluZSBORVNfUEhZX1RZUEVfQVJHVVMgICAgIDQKICNkZWZpbmUgTkVTX1BIWV9UWVBFX1BVTUFfMUcgICA1CiAjZGVmaW5lIE5FU19QSFlfVFlQRV9QVU1BXzEwRyAgNgogI2RlZmluZSBORVNfUEhZX1RZUEVfR0xBRElVUyAgIDcKICNkZWZpbmUgTkVTX1BIWV9UWVBFX1NGUF9EICAgICA4CisjZGVmaW5lIE5FU19QSFlfVFlQRV9LUgkgICAgICAgOQogCiAjZGVmaW5lIE5FU19NVUxUSUNBU1RfUEZfTUFYIDgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCBhYjExMDI3Li5hMWQ3OWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtODEwLDYgKzgxMCwyMCBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHNldF9hbGxtdWx0aShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1MzIgbmljX2FjdGl2ZV9iaXQpCit7CisJdTMyIG5pY19hY3RpdmU7CisKKwluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX01VTFRJQ0FTVF9BTEwpOworCW5pY19hY3RpdmUgfD0gbmljX2FjdGl2ZV9iaXQ7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKKwluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMKTsKKwluaWNfYWN0aXZlICY9IH5uaWNfYWN0aXZlX2JpdDsKKwluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKK30KKworI2RlZmluZSBnZXRfYWRkcihhZGRycywgaW5kZXgpICgoYWRkcnMpICsgKGluZGV4KSAqIEVUSF9BTEVOKQorCiAvKioKICAqIG5lc19uZXRkZXZfc2V0X211bHRpY2FzdF9saXN0CiAgKi8KQEAgLTgxOCw3ICs4MzIsNiBAQAogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXN2bmljLT5uZXNkZXYtPm5lc2FkYXB0ZXI7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptdWx0aWNhc3RfYWRkcjsKIAl1MzIgbmljX2FjdGl2ZV9iaXQ7CiAJdTMyIG5pY19hY3RpdmU7CiAJdTMyIHBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3M7CkBAIC04MzEsNiArODQ0LDcgQEAKIAkJCQkJbmljc19wZXJfZnVuY3Rpb24sIDQpOwogCXU4IG1heF9wZnRfZW50cmllc19hdmFpYWJsZSA9IE5FU19QRlRfU0laRSAtIHBmdF9lbnRyaWVzX3ByZWFsbG9jYXRlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtY19jb3VudCA9IG5ldGRldl9tY19jb3VudChuZXRkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKIAluaWNfYWN0aXZlX2JpdCA9IDEgPDwgbmVzdm5pYy0+bmljX2luZGV4OwpAQCAtODQ1LDEyICs4NTksNyBAQAogCQltY19hbGxfb24gPSAxOwogCX0gZWxzZSBpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CiAJCQkgICAobmVzdm5pYy0+bmljX2luZGV4ID4gMykpIHsKLQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMKTsKLQkJbmljX2FjdGl2ZSB8PSBuaWNfYWN0aXZlX2JpdDsKLQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKLQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19VTklDQVNUX0FMTCk7Ci0JCW5pY19hY3RpdmUgJj0gfm5pY19hY3RpdmVfYml0OwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKKwkJc2V0X2FsbG11bHRpKG5lc2RldiwgbmljX2FjdGl2ZV9iaXQpOwogCQltY19hbGxfb24gPSAxOwogCX0gZWxzZSB7CiAJCW5pY19hY3RpdmUgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9OSUNfTVVMVElDQVNUX0FMTCk7CkBAIC04NjIsMTkgKzg3MSwzMCBAQAogCX0KIAogCW5lc19kZWJ1ZyhORVNfREJHX05JQ19SWCwgIk51bWJlciBvZiBNQyBlbnRyaWVzID0gJWQsIFByb21pc2NvdXMgPSAlZCwgQWxsIE11bHRpY2FzdCA9ICVkLlxuIiwKLQkJICBuZXRkZXYtPm1jX2NvdW50LCAhIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpLAorCQkgIG1jX2NvdW50LCAhIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpLAogCQkgICEhKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKTsKIAlpZiAoIW1jX2FsbF9vbikgewotCQltdWx0aWNhc3RfYWRkciA9IG5ldGRldi0+bWNfbGlzdDsKKwkJY2hhciAqYWRkcnM7CisJCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jYWRkcjsKKworCQlhZGRycyA9IGttYWxsb2MoRVRIX0FMRU4gKiBtY19jb3VudCwgR0ZQX0FUT01JQyk7CisJCWlmICghYWRkcnMpIHsKKwkJCXNldF9hbGxtdWx0aShuZXNkZXYsIG5pY19hY3RpdmVfYml0KTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2FkZHIsIG5ldGRldikKKwkJCW1lbWNweShnZXRfYWRkcihhZGRycywgaSsrKSwKKwkJCSAgICAgICBtY2FkZHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CisKIAkJcGVyZmVjdF9maWx0ZXJfcmVnaXN0ZXJfYWRkcmVzcyA9IE5FU19JRFhfUEVSRkVDVF9GSUxURVJfTE9XICsKIAkJCQkJCXBmdF9lbnRyaWVzX3ByZWFsbG9jYXRlZCAqIDB4ODsKLQkJZm9yIChtY19pbmRleCA9IDA7IG1jX2luZGV4IDwgbWF4X3BmdF9lbnRyaWVzX2F2YWlhYmxlOwotCQltY19pbmRleCsrKSB7Ci0JCQl3aGlsZSAobXVsdGljYXN0X2FkZHIgJiYgbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgJiYKKwkJZm9yIChpID0gMCwgbWNfaW5kZXggPSAwOyBtY19pbmRleCA8IG1heF9wZnRfZW50cmllc19hdmFpYWJsZTsKKwkJICAgICBtY19pbmRleCsrKSB7CisJCQl3aGlsZSAoaSA8IG1jX2NvdW50ICYmIG5lc3ZuaWMtPm1jcnFfbWNhc3RfZmlsdGVyICYmCiAJCQkoKG1jX25pY19pbmRleCA9IG5lc3ZuaWMtPm1jcnFfbWNhc3RfZmlsdGVyKG5lc3ZuaWMsCi0JCQkJCW11bHRpY2FzdF9hZGRyLT5kbWlfYWRkcikpID09IDApKSB7Ci0JCQkJbXVsdGljYXN0X2FkZHIgPSBtdWx0aWNhc3RfYWRkci0+bmV4dDsKLQkJCX0KKwkJCQkJZ2V0X2FkZHIoYWRkcnMsIGkrKykpKSA9PSAwKSk7CiAJCQlpZiAobWNfbmljX2luZGV4IDwgMCkKIAkJCQltY19uaWNfaW5kZXggPSBuZXN2bmljLT5uaWNfaW5kZXg7CiAJCQl3aGlsZSAobmVzYWRhcHRlci0+cGZ0X21jYXN0X21hcFttY19pbmRleF0gPCAxNiAmJgpAQCAtODkwLDE3ICs5MTAsMTkgQEAKIAkJCX0KIAkJCWlmIChtY19pbmRleCA+PSBtYXhfcGZ0X2VudHJpZXNfYXZhaWFibGUpCiAJCQkJYnJlYWs7Ci0JCQlpZiAobXVsdGljYXN0X2FkZHIpIHsKKwkJCWlmIChpIDwgbWNfY291bnQpIHsKKwkJCQljaGFyICphZGRyID0gZ2V0X2FkZHIoYWRkcnMsIGkrKyk7CisKIAkJCQluZXNfZGVidWcoTkVTX0RCR19OSUNfUlgsICJBc3NpZ25pbmcgTUMgQWRkcmVzcyAlcE0gdG8gcmVnaXN0ZXIgMHglMDRYIG5pY19pZHg9JWRcbiIsCi0JCQkJCSAgbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyLAorCQkJCQkgIGFkZHIsCiAJCQkJCSAgcGVyZmVjdF9maWx0ZXJfcmVnaXN0ZXJfYWRkcmVzcysobWNfaW5kZXggKiA4KSwKIAkJCQkJICBtY19uaWNfaW5kZXgpOwotCQkJCW1hY2FkZHJfaGlnaCAgPSAoKHUxNiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbMF0pIDw8IDg7Ci0JCQkJbWFjYWRkcl9oaWdoICs9ICh1MTYpbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyWzFdOwotCQkJCW1hY2FkZHJfbG93ICAgPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbMl0pIDw8IDI0OwotCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbM10pIDw8IDE2OwotCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbNF0pIDw8IDg7Ci0JCQkJbWFjYWRkcl9sb3cgICs9ICh1MzIpbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyWzVdOworCQkJCW1hY2FkZHJfaGlnaCAgPSAoKHUxNikgYWRkclswXSkgPDwgODsKKwkJCQltYWNhZGRyX2hpZ2ggKz0gKHUxNikgYWRkclsxXTsKKwkJCQltYWNhZGRyX2xvdyAgID0gKCh1MzIpIGFkZHJbMl0pIDw8IDI0OworCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMikgYWRkclszXSkgPDwgMTY7CisJCQkJbWFjYWRkcl9sb3cgICs9ICgodTMyKSBhZGRyWzRdKSA8PCA4OworCQkJCW1hY2FkZHJfbG93ICArPSAodTMyKSBhZGRyWzVdOwogCQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwKIAkJCQkJCXBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3MrKG1jX2luZGV4ICogOCksCiAJCQkJCQltYWNhZGRyX2xvdyk7CkBAIC05MDgsNyArOTMwLDYgQEAKIAkJCQkJCXBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3MrNCsobWNfaW5kZXggKiA4KSwKIAkJCQkJCSh1MzIpbWFjYWRkcl9oaWdoIHwgTkVTX01BQ19BRERSX1ZBTElEIHwKIAkJCQkJCSgoKCh1MzIpKDE8PG1jX25pY19pbmRleCkpIDw8IDE2KSkpOwotCQkJCW11bHRpY2FzdF9hZGRyID0gbXVsdGljYXN0X2FkZHItPm5leHQ7CiAJCQkJbmVzYWRhcHRlci0+cGZ0X21jYXN0X21hcFttY19pbmRleF0gPQogCQkJCQkJCW5lc3ZuaWMtPm5pY19pbmRleDsKIAkJCX0gZWxzZSB7CkBAIC05MjAsMjEgKzk0MSwxMyBAQAogCQkJCW5lc2FkYXB0ZXItPnBmdF9tY2FzdF9tYXBbbWNfaW5kZXhdID0gMjU1OwogCQkJfQogCQl9CisJCWtmcmVlKGFkZHJzKTsKIAkJLyogUEZUIGlzIG5vdCBsYXJnZSBlbm91Z2ggKi8KLQkJaWYgKG11bHRpY2FzdF9hZGRyICYmIG11bHRpY2FzdF9hZGRyLT5uZXh0KSB7Ci0JCQluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCi0JCQkJCQlORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMKTsKLQkJCW5pY19hY3RpdmUgfD0gbmljX2FjdGl2ZV9iaXQ7Ci0JCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX01VTFRJQ0FTVF9BTEwsCi0JCQkJCQkJCW5pY19hY3RpdmUpOwotCQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAotCQkJCQkJTkVTX0lEWF9OSUNfVU5JQ0FTVF9BTEwpOwotCQkJbmljX2FjdGl2ZSAmPSB+bmljX2FjdGl2ZV9iaXQ7Ci0JCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLAotCQkJCQkJCQluaWNfYWN0aXZlKTsKLQkJfQorCQlpZiAoaSA8IG1jX2NvdW50KQorCQkJc2V0X2FsbG11bHRpKG5lc2RldiwgbmljX2FjdGl2ZV9iaXQpOwogCX0KIAordW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTIzMCw4ICsxMjQzLDggQEAKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JlY2VpdmVkOwogCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JldHJhbnM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fbGlzdGVuc19jcmVhdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9saXN0ZW5zX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9saXN0ZW5zX2Rlc3Ryb3llZCk7CiAJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fYmFja2xvZ19kcm9wczsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfY3JlYXRlZCk7CkBAIC0xNDYxLDkgKzE0NzQsOSBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KLQlpZiAoKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9JUklTKSB8fAotCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB8fAotCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX1NGUF9EKSkgeworCWlmICgocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB8fAorCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX1NGUF9EKSB8fAorCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0tSKSkgewogCQlldF9jbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAkJZXRfY21kLT5wb3J0ICAgICAgICA9IFBPUlRfRklCUkU7CiAJCWV0X2NtZC0+c3VwcG9ydGVkICAgPSBTVVBQT1JURURfRklCUkU7CkBAIC0xNTgzLDggKzE1OTYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5pY19xcF9tYXAgKmN1cnJfcXBfbWFwOwogCXUzMiB1MzJ0ZW1wOwotCXUxNiBwaHlfZGF0YTsKLQl1MTYgdGVtcF9waHlfZGF0YTsKKwl1OCBwaHlfdHlwZSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X3R5cGVbbmVzZGV2LT5tYWNfaW5kZXhdOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXNfdm5pYykpOwogCWlmICghbmV0ZGV2KSB7CkBAIC0xNjkyLDY1ICsxNzA0LDIzIEBACiAKIAlpZiAoKG5lc2Rldi0+bmV0ZGV2X2NvdW50ID09IDApICYmCiAJICAgICgoUENJX0ZVTkMobmVzZGV2LT5wY2lkZXYtPmRldmZuKSA9PSBuZXNkZXYtPm1hY19pbmRleCkgfHwKLQkgICAgICgobmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfdHlwZVtuZXNkZXYtPm1hY19pbmRleF0gPT0gTkVTX1BIWV9UWVBFX1BVTUFfMUcpICYmCisJICAgICAoKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9QVU1BXzFHKSAmJgogCSAgICAgICgoKFBDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbikgPT0gMSkgJiYgKG5lc2Rldi0+bWFjX2luZGV4ID09IDIpKSB8fAogCSAgICAgICAoKFBDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbikgPT0gMikgJiYgKG5lc2Rldi0+bWFjX2luZGV4ID09IDEpKSkpKSkgewotCQkvKgotCQkgKiBuZXNfZGVidWcoTkVTX0RCR19JTklULCAiU2V0dGluZyB1cCBQSFkgaW50ZXJydXB0IG1hc2suIFVzaW5nIHJlZ2lzdGVyIGluZGV4IDB4JTA0WFxuIiwKLQkJICoJCU5FU19JRFhfUEhZX1BDU19DT05UUk9MX1NUQVRVUzAgKyAoMHgyMDAgKiAobmVzdm5pYy0+bG9naWNhbF9wb3J0ICYgMSkpKTsKLQkJICovCiAJCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9QSFlfUENTX0NPTlRST0xfU1RBVFVTMCArCiAJCQkJKDB4MjAwICogKG5lc2Rldi0+bWFjX2luZGV4ICYgMSkpKTsKLQkJaWYgKG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X3R5cGVbbmVzZGV2LT5tYWNfaW5kZXhdICE9IE5FU19QSFlfVFlQRV9QVU1BXzFHKSB7CisJCWlmIChwaHlfdHlwZSAhPSBORVNfUEhZX1RZUEVfUFVNQV8xRykgewogCQkJdTMydGVtcCB8PSAweDAwMjAwMDAwOwogCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX1BIWV9QQ1NfQ09OVFJPTF9TVEFUVVMwICsKIAkJCQkoMHgyMDAgKiAobmVzZGV2LT5tYWNfaW5kZXggJiAxKSksIHUzMnRlbXApOwogCQl9CiAKLQkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX1BIWV9QQ1NfQ09OVFJPTF9TVEFUVVMwICsKLQkJCQkoMHgyMDAgKiAobmVzZGV2LT5tYWNfaW5kZXggJiAxKSkpOwotCi0JCWlmICgodTMydGVtcCYweDBmMWYwMDAwKSA9PSAweDBmMGYwMDAwKSB7Ci0JCQlpZiAobmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfdHlwZVtuZXNkZXYtPm1hY19pbmRleF0gPT0gTkVTX1BIWV9UWVBFX0lSSVMpIHsKLQkJCQluZXNfaW5pdF9waHkobmVzZGV2KTsKLQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X2luZGV4W25lc2Rldi0+bWFjX2luZGV4XSwgMSwgMSk7Ci0JCQkJdGVtcF9waHlfZGF0YSA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCi0JCQkJCQkJCQlORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJCXUzMnRlbXAgPSAyMDsKLQkJCQlkbyB7Ci0JCQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgbmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfaW5kZXhbbmVzZGV2LT5tYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQkJcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAotCQkJCQkJCQkJTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCQkJaWYgKChwaHlfZGF0YSA9PSB0ZW1wX3BoeV9kYXRhKSB8fCAoISgtLXUzMnRlbXApKSkKLQkJCQkJCWJyZWFrOwotCQkJCQl0ZW1wX3BoeV9kYXRhID0gcGh5X2RhdGE7Ci0JCQkJfSB3aGlsZSAoMSk7Ci0JCQkJaWYgKHBoeV9kYXRhICYgNCkgewotCQkJCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiVGhlIExpbmsgaXMgVVAhIS5cbiIpOwotCQkJCQluZXN2bmljLT5saW5rdXAgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJUaGUgTGluayBpcyBET1dOISEuXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJUaGUgTGluayBpcyBVUCEhLlxuIik7Ci0JCQkJbmVzdm5pYy0+bGlua3VwID0gMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc2Rldi0+bWFjX2luZGV4XSA9PSBORVNfUEhZX1RZUEVfUFVNQV8xRykgewotCQkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm1hY19pbmRleD0lZCwgbG9naWNhbF9wb3J0PSVkLCB1MzJ0ZW1wPTB4JTA0WCwgUENJX0ZVTkM9JWRcbiIsCi0JCQkJbmVzZGV2LT5tYWNfaW5kZXgsIG5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCwgdTMydGVtcCwgUENJX0ZVTkMobmVzZGV2LT5wY2lkZXYtPmRldmZuKSk7Ci0JCQlpZiAoKChuZXNkZXYtPm1hY19pbmRleCA8IDIpICYmICgodTMydGVtcCYweDAxMDEwMDAwKSA9PSAweDAxMDEwMDAwKSkgfHwKLQkJCSAgICAoKG5lc2Rldi0+bWFjX2luZGV4ID4gMSkgJiYgKCh1MzJ0ZW1wJjB4MDIwMjAwMDApID09IDB4MDIwMjAwMDApKSkgIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiVGhlIExpbmsgaXMgVVAhIS5cbiIpOwotCQkJCW5lc3ZuaWMtPmxpbmt1cCA9IDE7Ci0JCQl9Ci0JCX0KIAkJLyogY2xlYXIgdGhlIE1BQyBpbnRlcnJ1cHQgc3RhdHVzLCBhc3N1bWVzIGRpcmVjdCBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcHBpbmcgKi8KIAkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19JTlRfU1RBVFVTICsgKDB4MjAwICogbmVzZGV2LT5tYWNfaW5kZXgpKTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIlBoeSBpbnRlcnJ1cHQgc3RhdHVzID0gMHglWC5cbiIsIHUzMnRlbXApOwogCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX0lOVF9TVEFUVVMgKyAoMHgyMDAgKiBuZXNkZXYtPm1hY19pbmRleCksIHUzMnRlbXApOwogCi0JCWlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc2Rldi0+bWFjX2luZGV4XSAhPSBORVNfUEhZX1RZUEVfSVJJUykKLQkJCW5lc19pbml0X3BoeShuZXNkZXYpOworCQluZXNfaW5pdF9waHkobmVzZGV2KTsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggNjRkMzEzNi4uODE1NzI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkvKiBDaGVjayBmb3IgU1Egb3ZlcmZsb3cgKi8KIAlpZiAoKChoZWFkICsgKDIgKiBxc2l6ZSkgLSBuZXNxcC0+aHdxcC5zcV90YWlsKSAlIHFzaXplKSA9PSAocXNpemUgLSAxKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJd3FlID0gJm5lc3FwLT5od3FwLnNxX3ZiYXNlW2hlYWRdOwpAQCAtMzI5NCw3ICszMjk0LDcgQEAKIAogCQkvKiBDaGVjayBmb3IgU1Egb3ZlcmZsb3cgKi8KIAkJaWYgKCgoaGVhZCArICgyICogcXNpemUpIC0gbmVzcXAtPmh3cXAuc3FfdGFpbCkgJSBxc2l6ZSkgPT0gKHFzaXplIC0gMSkpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzU3Nyw3ICszNTc3LDcgQEAKIAkJfQogCQkvKiBDaGVjayBmb3IgUlEgb3ZlcmZsb3cgKi8KIAkJaWYgKCgoaGVhZCArICgyICogcXNpemUpIC0gbmVzcXAtPmh3cXAucnFfdGFpbCkgJSBxc2l6ZSkgPT0gKHFzaXplIC0gMSkpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDMwYmRmNDIuLjgzYTc3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTEzNzQsNyArMTM3NCw3IEBACiAJCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHByaXYtPmRldik7CisJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogI2VuZGlmCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKaW5kZXggZTk3OTVmNi4uZDEwYjRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKQEAgLTU1LDkgKzU1LDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPSBwcml2LT5ldGh0b29sLmNvYWxlc2NlX3VzZWNzOwotCWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID0gcHJpdi0+ZXRodG9vbC5jb2FsZXNjZV91c2VjczsKIAljb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHByaXYtPmV0aHRvb2wubWF4X2NvYWxlc2NlZF9mcmFtZXM7Ci0JY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBwcml2LT5ldGh0b29sLm1heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OSwxMCArNjcsOCBAQAogCWludCByZXQ7CiAKIAkvKgotCSAqIFNpbmNlIElQb0lCIHVzZXMgYSBzaW5nbGUgQ1EgZm9yIGJvdGggcnggYW5kIHR4LCB3ZSBhc3N1bWUKLQkgKiB0aGF0IHJ4IHBhcmFtcyBkaWN0YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgVGhlc2UgdmFsdWVzIGFyZQotCSAqIHNhdmVkIGluIHRoZSBwcml2YXRlIGRhdGEgYW5kIHJldHVybmVkIHdoZW4gaXBvaWJfZ2V0X2NvYWxlc2NlKCkKLQkgKiBpcyBjYWxsZWQuCisJICogVGhlc2UgdmFsdWVzIGFyZSBzYXZlZCBpbiB0aGUgcHJpdmF0ZSBkYXRhIGFuZCByZXR1cm5lZAorCSAqIHdoZW4gaXBvaWJfZ2V0X2NvYWxlc2NlKCkgaXMgY2FsbGVkCiAJICovCiAJaWYgKGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzICAgICAgID4gMHhmZmZmIHx8CiAJICAgIGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmKQpAQCAtODUsOCArODEsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzICAgICAgID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7Ci0JY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKIAlwcml2LT5ldGh0b29sLmNvYWxlc2NlX3VzZWNzICAgICAgID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CiAJcHJpdi0+ZXRodG9vbC5tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA4NzYzYzFlLi5kNDFlYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19GT1VORCwgJm1jYXN0LT5mbGFncyk7CiAKIAkvKiBNYXJrIGFsbCBvZiB0aGUgZW50cmllcyB0aGF0IGFyZSBmb3VuZCBvciBkb24ndCBleGlzdCAqLwotCWZvciAobWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3Q7IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCXVuaW9uIGliX2dpZCBtZ2lkOwogCiAJCWlmICghaXBvaWJfbWNhc3RfYWRkcl9pc192YWxpZChtY2xpc3QtPmRtaV9hZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggNWY3YTZmYy4uNzEyMzdmOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtMTI4LDYgKzEyOCwyOCBAQAogCXJldHVybiAwOwogfQogCitpbnQgaXNlcl9pbml0aWFsaXplX3Rhc2tfaGVhZGVycyhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywKKwkJCQkJCXN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MpCit7CisJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gdGFzay0+Y29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgICAgICpkZXZpY2UgICAgPSBpc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZTsKKwlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXU2NCBkbWFfYWRkcjsKKworCWRtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsICh2b2lkICopdHhfZGVzYywKKwkJCQlJU0VSX0hFQURFUlNfTEVOLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoZGV2aWNlLT5pYl9kZXZpY2UsIGRtYV9hZGRyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0eF9kZXNjLT5kbWFfYWRkciA9IGRtYV9hZGRyOworCXR4X2Rlc2MtPnR4X3NnWzBdLmFkZHIgICA9IHR4X2Rlc2MtPmRtYV9hZGRyOworCXR4X2Rlc2MtPnR4X3NnWzBdLmxlbmd0aCA9IElTRVJfSEVBREVSU19MRU47CisJdHhfZGVzYy0+dHhfc2dbMF0ubGtleSAgID0gZGV2aWNlLT5tci0+bGtleTsKKworCWlzZXJfdGFzay0+aGVhZGVyc19pbml0aWFsaXplZAk9IDE7CisJaXNlcl90YXNrLT5pc2VyX2Nvbm4JCT0gaXNlcl9jb25uOworCXJldHVybiAwOworfQogLyoqCiAgKiBpc2NzaV9pc2VyX3Rhc2tfaW5pdCAtIEluaXRpYWxpemUgdGFzawogICogQHRhc2s6IGlzY3NpIHRhc2sKQEAgLTEzNywxNyArMTU5LDE3IEBACiBzdGF0aWMgaW50CiBpc2NzaV9pc2VyX3Rhc2tfaW5pdChzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gID0gdGFzay0+Y29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCisJaWYgKCFpc2VyX3Rhc2stPmhlYWRlcnNfaW5pdGlhbGl6ZWQpCisJCWlmIChpc2VyX2luaXRpYWxpemVfdGFza19oZWFkZXJzKHRhc2ssICZpc2VyX3Rhc2stPmRlc2MpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBtZ210IHRhc2sgKi8KLQlpZiAoIXRhc2stPnNjKSB7Ci0JCWlzZXJfdGFzay0+ZGVzYy5kYXRhID0gdGFzay0+ZGF0YTsKKwlpZiAoIXRhc2stPnNjKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlpc2VyX3Rhc2stPmNvbW1hbmRfc2VudCA9IDA7Ci0JaXNlcl90YXNrLT5pc2VyX2Nvbm4gICAgPSBpc2VyX2Nvbm47CiAJaXNlcl90YXNrX3JkbWFfaW5pdChpc2VyX3Rhc2spOwogCXJldHVybiAwOwogfQpAQCAtMTY4LDcgKzE5MCw3IEBACiB7CiAJaW50IGVycm9yID0gMDsKIAotCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwgY29ubi0+aWQsIHRhc2stPml0dCk7CisJaXNlcl9kYmcoIm10YXNrIHhtaXQgW2NpZCAlZCBpdHQgMHgleF1cbiIsIGNvbm4tPmlkLCB0YXNrLT5pdHQpOwogCiAJZXJyb3IgPSBpc2VyX3NlbmRfY29udHJvbChjb25uLCB0YXNrKTsKIApAQCAtMTc4LDkgKzIwMCw2IEBACiAJICogLSBpZiB5ZXMsIHRoZSB0YXNrIGlzIHJlY3ljbGVkIGF0IGlzY3NpX2NvbXBsZXRlX3BkdQogCSAqIC0gaWYgbm8sICB0aGUgdGFzayBpcyByZWN5Y2xlZCBhdCBpc2VyX3NuZF9jb21wbGV0aW9uCiAJICovCi0JaWYgKGVycm9yICYmIGVycm9yICE9IC1FTk9CVUZTKQotCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKLQogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjMyLDcgKzI1MSw3IEBACiAJCQkgICB0YXNrLT5pbW1fY291bnQsIHRhc2stPnVuc29sX3IydC5kYXRhX2xlbmd0aCk7CiAJfQogCi0JaXNlcl9kYmcoInRhc2sgZGVxIFtjaWQgJWQgaXR0IDB4JXhdXG4iLAorCWlzZXJfZGJnKCJjdGFzayB4bWl0IFtjaWQgJWQgaXR0IDB4JXhdXG4iLAogCQkgICBjb25uLT5pZCwgdGFzay0+aXR0KTsKIAogCS8qIFNlbmQgdGhlIGNtZCBQRFUgKi8KQEAgLTI0OCw4ICsyNjcsNiBAQAogCQllcnJvciA9IGlzY3NpX2lzZXJfdGFza194bWl0X3Vuc29sX2RhdGEoY29ubiwgdGFzayk7CiAKICBpc2NzaV9pc2VyX3Rhc2tfeG1pdF9leGl0OgotCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRU5PQlVGUykKLQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yODMsNyArMzAwLDcgQEAKIAkgKiBkdWUgdG8gaXNzdWVzIHdpdGggdGhlIGxvZ2luIGNvZGUgcmUgaXNlciBzZW1hdGljcwogCSAqIHRoaXMgbm90IHNldCBpbiBpc2NzaV9jb25uX3NldHVwIC0gRklYTUUKIAkgKi8KLQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gMTI4OworCWNvbm4tPm1heF9yZWN2X2RsZW5ndGggPSBJU0VSX1JFQ1ZfREFUQV9TRUdfTEVOOwogCiAJaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAljb25uLT5kZF9kYXRhID0gaXNlcl9jb25uOwpAQCAtNDAxLDcgKzQxOCw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubjsKIAotCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmaXNjc2lfaXNlcl9zaHQsIDAsIDEpOworCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmaXNjc2lfaXNlcl9zaHQsIDAsIDApOwogCWlmICghc2hvc3QpCiAJCXJldHVybiBOVUxMOwogCXNob3N0LT50cmFuc3BvcnR0ID0gaXNjc2lfaXNlcl9zY3NpX3RyYW5zcG9ydDsKQEAgLTY3NSw3ICs2OTIsNyBAQAogCW1lbXNldCgmaWcsIDAsIHNpemVvZihzdHJ1Y3QgaXNlcl9nbG9iYWwpKTsKIAogCWlnLmRlc2NfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXNlcl9kZXNjcmlwdG9ycyIsCi0JCQkJCSAgc2l6ZW9mIChzdHJ1Y3QgaXNlcl9kZXNjKSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGlzZXJfdHhfZGVzYyksCiAJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAogCQkJCQkgIE5VTEwpOwogCWlmIChpZy5kZXNjX2NhY2hlID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAppbmRleCA5ZDUyOWNhLi4wMzY5MzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKQEAgLTEwMiw5ICsxMDIsOSBAQAogI2RlZmluZSBJU0VSX01BWF9UWF9NSVNDX1BEVVMJCTYgLyogTk9PUF9PVVQoMiksIFRFWFQoMSksICAgICAgICAgKgogCQkJCQkgICAqIFNDU0lfVE1GVU5DKDIpLCBMT0dPVVQoMSkgKi8KIAotI2RlZmluZSBJU0VSX1FQX01BWF9SRUNWX0RUT1MJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCArIFwKLQkJCQkJSVNFUl9NQVhfUlhfTUlTQ19QRFVTICAgICsgIFwKLQkJCQkJSVNFUl9NQVhfVFhfTUlTQ19QRFVTKQorI2RlZmluZSBJU0VSX1FQX01BWF9SRUNWX0RUT1MJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCkKKworI2RlZmluZSBJU0VSX01JTl9QT1NURURfUlgJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCA+PiAyKQogCiAvKiB0aGUgbWF4IFRYIChzZW5kKSBXUiBzdXBwb3J0ZWQgYnkgdGhlIGlTRVIgUVAgaXMgZGVmaW5lZCBieSAgICAgICAgICAgICAgICAgKgogICogbWF4X3NlbmRfd3IgPSBUICogKDEgKyBEKSArIEMgOyBEIGlzIGhvdyBtYW55IGluZmxpZ2h0IGRhdGFvdXRzIHdlIGV4cGVjdCAgICoKQEAgLTEzMiw2ICsxMzIsMTIgQEAKIAlfX2JlNjQgIHJlYWRfdmE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKiBDb25zdGFudCBQRFUgbGVuZ3RocyBjYWxjdWxhdGlvbnMgKi8KKyNkZWZpbmUgSVNFUl9IRUFERVJTX0xFTiAgKHNpemVvZihzdHJ1Y3QgaXNlcl9oZHIpICsgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpKQorCisjZGVmaW5lIElTRVJfUkVDVl9EQVRBX1NFR19MRU4JMTI4CisjZGVmaW5lIElTRVJfUlhfUEFZTE9BRF9TSVpFCShJU0VSX0hFQURFUlNfTEVOICsgSVNFUl9SRUNWX0RBVEFfU0VHX0xFTikKKyNkZWZpbmUgSVNFUl9SWF9MT0dJTl9TSVpFCShJU0VSX0hFQURFUlNfTEVOICsgSVNDU0lfREVGX01BWF9SRUNWX1NFR19MRU4pCiAKIC8qIExlbmd0aCBvZiBhbiBvYmplY3QgbmFtZSBzdHJpbmcgKi8KICNkZWZpbmUgSVNFUl9PQkpFQ1RfTkFNRV9TSVpFCQkgICAgNjQKQEAgLTE4Nyw1MSArMTkzLDQzIEBACiAJc3RydWN0IGlzZXJfbWVtX3JlZyAgICAgcmVnOyAgICAgICAgLyogbWVtb3J5IHJlZ2lzdHJhdGlvbiBpbmZvICAgICAgICAqLwogCXZvaWQgICAgICAgICAgICAgICAgICAgICp2aXJ0X2FkZHI7CiAJc3RydWN0IGlzZXJfZGV2aWNlICAgICAgKmRldmljZTsgICAgLyogZGV2aWNlLT5kZXZpY2UgZm9yIGRtYV91bm1hcCAgICAqLwotCXU2NCAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyOyAgIC8qIGlmIG5vbiB6ZXJvLCBhZGRyIGZvciBkbWFfdW5tYXAgKi8KIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247ICAvKiBkaXJlY3Rpb24gZm9yIGRtYV91bm1hcAkgICAgICAgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBkYXRhX3NpemU7Ci0JYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmX2NvdW50OyAgLyogcmVmY291bnQsIGZyZWVkIHdoZW4gZGVjIHRvIDAgICAqLwotfTsKLQotI2RlZmluZSBNQVhfUkVHRF9CVUZfVkVDVE9SX0xFTgkyCi0KLXN0cnVjdCBpc2VyX2R0byB7Ci0Jc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqdGFzazsKLQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV9lbmFibGU7Ci0KLQkvKiB2ZWN0b3Igb2YgcmVnaXN0ZXJlZCBidWZmZXJzICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmVnZF92ZWN0b3JfbGVuOwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICAgICAgICpyZWdkW01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKLQotCS8qIG9mZnNldCBpbnRvIHRoZSByZWdpc3RlcmVkIGJ1ZmZlciBtYXkgYmUgc3BlY2lmaWVkICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgb2Zmc2V0W01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKLQotCS8qIGEgc21hbGxlciBzaXplIG1heSBiZSBzcGVjaWZpZWQsIGlmIDAsIHRoZW4gZnVsbCBzaXplIGlzIHVzZWQgKi8KLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB1c2VkX3N6W01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKIH07CiAKIGVudW0gaXNlcl9kZXNjX3R5cGUgewotCUlTQ1NJX1JYLAogCUlTQ1NJX1RYX0NPTlRST0wgLAogCUlTQ1NJX1RYX1NDU0lfQ09NTUFORCwKIAlJU0NTSV9UWF9EQVRBT1VUCiB9OwogCi1zdHJ1Y3QgaXNlcl9kZXNjIHsKK3N0cnVjdCBpc2VyX3R4X2Rlc2MgewogCXN0cnVjdCBpc2VyX2hkciAgICAgICAgICAgICAgaXNlcl9oZWFkZXI7CiAJc3RydWN0IGlzY3NpX2hkciAgICAgICAgICAgICBpc2NzaV9oZWFkZXI7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgICAgICAgICBoZHJfcmVnZF9idWY7Ci0Jdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YTsgICAgICAgICAvKiB1c2VkIGJ5IFJYICYgVFhfQ09OVFJPTCAqLwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICAgICAgICAgZGF0YV9yZWdkX2J1ZjsgLyogdXNlZCBieSBSWCAmIFRYX0NPTlRST0wgKi8KIAllbnVtICAgaXNlcl9kZXNjX3R5cGUgICAgICAgIHR5cGU7Ci0Jc3RydWN0IGlzZXJfZHRvICAgICAgICAgICAgICBkdG87CisJdTY0CQkgICAgICAgICAgICAgZG1hX2FkZHI7CisJLyogc2dbMF0gcG9pbnRzIHRvIGlzZXIvaXNjc2kgaGVhZGVycywgc2dbMV0gb3B0aW9uYWxseSBwb2ludHMgdG8gZWl0aGVyCisJb2YgaW1tZWRpYXRlIGRhdGEsIHVuc29saWNpdGVkIGRhdGEtb3V0IG9yIGNvbnRyb2wgKGxvZ2luLHRleHQpICovCisJc3RydWN0IGliX3NnZQkJICAgICB0eF9zZ1syXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zZ2U7CiB9OwogCisjZGVmaW5lIElTRVJfUlhfUEFEX1NJWkUJKDI1NiAtIChJU0VSX1JYX1BBWUxPQURfU0laRSArIFwKKwkJCQkJc2l6ZW9mKHU2NCkgKyBzaXplb2Yoc3RydWN0IGliX3NnZSkpKQorc3RydWN0IGlzZXJfcnhfZGVzYyB7CisJc3RydWN0IGlzZXJfaGRyICAgICAgICAgICAgICBpc2VyX2hlYWRlcjsKKwlzdHJ1Y3QgaXNjc2lfaGRyICAgICAgICAgICAgIGlzY3NpX2hlYWRlcjsKKwljaGFyCQkgICAgICAgICAgICAgZGF0YVtJU0VSX1JFQ1ZfREFUQV9TRUdfTEVOXTsKKwl1NjQJCSAgICAgICAgICAgICBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlCQkgICAgIHJ4X3NnOworCWNoYXIJCSAgICAgICAgICAgICBwYWRbSVNFUl9SWF9QQURfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXNlcl9kZXZpY2UgewogCXN0cnVjdCBpYl9kZXZpY2UgICAgICAgICAgICAgKmliX2RldmljZTsKIAlzdHJ1Y3QgaWJfcGQJICAgICAgICAgICAgICpwZDsKLQlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICpjcTsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICpyeF9jcTsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICp0eF9jcTsKIAlzdHJ1Y3QgaWJfbXIJICAgICAgICAgICAgICptcjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJICAgICBjcV90YXNrbGV0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgaWdfbGlzdDsgLyogZW50cnkgaW4gaWcgZGV2aWNlcyBsaXN0ICovCkBAIC0yNTAsMTUgKzI0OCwxOCBAQAogCXN0cnVjdCBpYl9mbXJfcG9vbCAgICAgICAgICAgKmZtcl9wb29sOyAgICAgLyogcG9vbCBvZiBJQiBGTVJzICAgICAgICAgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NfZXZ0X2ZsYWc7IC8qIGRpc2Nvbm4gZXZlbnQgZGVsaXZlcmVkICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJICAgICB3YWl0OyAgICAgICAgICAvKiB3YWl0cSBmb3IgY29ubi9kaXNjb25uICAqLwotCWF0b21pY190ICAgICAgICAgICAgICAgICAgICAgcG9zdF9yZWN2X2J1Zl9jb3VudDsgLyogcG9zdGVkIHJ4IGNvdW50ICAgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfcmVjdl9idWZfY291bnQ7IC8qIHBvc3RlZCByeCBjb3VudCAgKi8KIAlhdG9taWNfdCAgICAgICAgICAgICAgICAgICAgIHBvc3Rfc2VuZF9idWZfY291bnQ7IC8qIHBvc3RlZCB0eCBjb3VudCAgICovCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3BkdV9jb3VudDsvKiBjb3VudCBvZiByZWNlaXZlZCAqCi0JCQkJCQkJICAgKiB1bmV4cGVjdGVkIHBkdXMgICAqCi0JCQkJCQkJICAgKiBub3QgeWV0IHJldGlyZWQgICAqLwogCWNoYXIgCQkJICAgICBuYW1lW0lTRVJfT0JKRUNUX05BTUVfU0laRV07CiAJc3RydWN0IGlzZXJfcGFnZV92ZWMgICAgICAgICAqcGFnZV92ZWM7ICAgICAvKiByZXByZXNlbnRzIFNHIHRvIGZtciBtYXBzKgogCQkJCQkJICAgICAqIG1hcHMgc2VyaWFsaXplZCBhcyB0eCBpcyovCiAJc3RydWN0IGxpc3RfaGVhZAkgICAgIGNvbm5fbGlzdDsgICAgICAgLyogZW50cnkgaW4gaWcgY29ubiBsaXN0ICovCisKKwljaGFyICAJCQkgICAgICpsb2dpbl9idWY7CisJdTY0IAkJCSAgICAgbG9naW5fZG1hOworCXVuc2lnbmVkIGludCAJCSAgICAgcnhfZGVzY19oZWFkOworCXN0cnVjdCBpc2VyX3J4X2Rlc2MJICAgICAqcnhfZGVzY3M7CisJc3RydWN0IGliX3JlY3Zfd3IJICAgICByeF93cltJU0VSX01JTl9QT1NURURfUlhdOwogfTsKIAogc3RydWN0IGlzY3NpX2lzZXJfY29ubiB7CkBAIC0yNjcsNyArMjY4LDcgQEAKIH07CiAKIHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgewotCXN0cnVjdCBpc2VyX2Rlc2MgICAgICAgICAgICAgZGVzYzsKKwlzdHJ1Y3QgaXNlcl90eF9kZXNjICAgICAgICAgIGRlc2M7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubgkgICAgICppc2VyX2Nvbm47CiAJZW51bSBpc2VyX3Rhc2tfc3RhdHVzIAkgICAgIHN0YXR1czsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfc2VudDsgIC8qIHNldCBpZiBjb21tYW5kICBzZW50ICAqLwpAQCAtMjc1LDYgKzI3Niw3IEBACiAJc3RydWN0IGlzZXJfcmVnZF9idWYgICAgICAgICByZG1hX3JlZ2RbSVNFUl9ESVJTX05VTV07LyogcmVnZCByZG1hIGJ1ZiAqLwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICAgICAgICAgZGF0YVtJU0VSX0RJUlNfTlVNXTsgICAgIC8qIG9yaWcuIGRhdGEgZGVzKi8KIAlzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAgICAgICAgIGRhdGFfY29weVtJU0VSX0RJUlNfTlVNXTsvKiBjb250aWcuIGNvcHkgICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzX2luaXRpYWxpemVkOwogfTsKIAogc3RydWN0IGlzZXJfcGFnZV92ZWMgewpAQCAtMzIyLDIyICszMjQsMTcgQEAKIAogdm9pZCBpc2VyX2Nvbm5fdGVybWluYXRlKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pOwogCi12b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqZGVzYywKLQkJCSB1bnNpZ25lZCBsb25nICAgIGR0b194ZmVyX2xlbik7Cit2b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfcnhfZGVzYyAqZGVzYywKKwkJCSB1bnNpZ25lZCBsb25nICAgIGR0b194ZmVyX2xlbiwKKwkJCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pOwogCi12b2lkIGlzZXJfc25kX2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqZGVzYyk7Cit2b2lkIGlzZXJfc25kX2NvbXBsZXRpb24oc3RydWN0IGlzZXJfdHhfZGVzYyAqZGVzYywgc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubik7CiAKIHZvaWQgaXNlcl90YXNrX3JkbWFfaW5pdChzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICp0YXNrKTsKIAogdm9pZCBpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICp0YXNrKTsKIAotdm9pZCBpc2VyX2R0b19idWZmc19yZWxlYXNlKHN0cnVjdCBpc2VyX2R0byAqZHRvKTsKLQotaW50ICBpc2VyX3JlZ2RfYnVmZl9yZWxlYXNlKHN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1Zik7Ci0KLXZvaWQgaXNlcl9yZWdfc2luZ2xlKHN0cnVjdCBpc2VyX2RldmljZSAgICAgICpkZXZpY2UsCi0JCSAgICAgc3RydWN0IGlzZXJfcmVnZF9idWYgICAgKnJlZ2RfYnVmLAotCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Cit2b2lkIGlzZXJfZnJlZV9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKTsKIAogdm9pZCBpc2VyX2ZpbmFsaXplX3JkbWFfdW5hbGlnbmVkX3NnKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKnRhc2ssCiAJCQkJICAgICBlbnVtIGlzZXJfZGF0YV9kaXIgICAgICAgICBjbWRfZGlyKTsKQEAgLTM1NiwxMSArMzUzLDkgQEAKIAogdm9pZCBpc2VyX3VucmVnX21lbShzdHJ1Y3QgaXNlcl9tZW1fcmVnICptZW1fcmVnKTsKIAotaW50ICBpc2VyX3Bvc3RfcmVjdihzdHJ1Y3QgaXNlcl9kZXNjICpyeF9kZXNjKTsKLWludCAgaXNlcl9wb3N0X3NlbmQoc3RydWN0IGlzZXJfZGVzYyAqdHhfZGVzYyk7Ci0KLWludCBpc2VyX2Nvbm5fc3RhdGVfY29tcChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLAotCQkJIGVudW0gaXNlcl9pYl9jb25uX3N0YXRlIGNvbXApOworaW50ICBpc2VyX3Bvc3RfcmVjdmwoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubik7CitpbnQgIGlzZXJfcG9zdF9yZWN2bShzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBpbnQgY291bnQpOworaW50ICBpc2VyX3Bvc3Rfc2VuZChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjKTsKIAogaW50IGlzZXJfZG1hX21hcF90YXNrX2RhdGEoc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrLAogCQkJICAgIHN0cnVjdCBpc2VyX2RhdGFfYnVmICAgICAgICpkYXRhLApAQCAtMzY4LDQgKzM2Myw2IEBACiAJCQkgICAgZW51bSAgIGRtYV9kYXRhX2RpcmVjdGlvbiAgZG1hX2Rpcik7CiAKIHZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzayk7CitpbnQgIGlzZXJfaW5pdGlhbGl6ZV90YXNrX2hlYWRlcnMoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCisJCQlzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwppbmRleCA5ZGU2NDAyLi4wYjllZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwpAQCAtMzksMjkgKzM5LDYgQEAKIAogI2luY2x1ZGUgImlzY3NpX2lzZXIuaCIKIAotLyogQ29uc3RhbnQgUERVIGxlbmd0aHMgY2FsY3VsYXRpb25zICovCi0jZGVmaW5lIElTRVJfVE9UQUxfSEVBREVSU19MRU4gIChzaXplb2YgKHN0cnVjdCBpc2VyX2hkcikgKyBcCi0JCQkJIHNpemVvZiAoc3RydWN0IGlzY3NpX2hkcikpCi0KLS8qIGlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICoKLSAqIHRoZSByZWdpc3RlcmVkIGJ1ZmZlciAmIGFkZHMgaXQgdG8gdGhlIERUTyBvYmplY3QgICAgICAgICAgICovCi1zdGF0aWMgdm9pZCBpc2VyX2R0b19hZGRfcmVnZF9idWZmKHN0cnVjdCBpc2VyX2R0byAqZHRvLAotCQkJCSAgIHN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1ZiwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZV9vZmZzZXQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyB1c2Vfc2l6ZSkKLXsKLQlpbnQgYWRkX2lkeDsKLQotCWF0b21pY19pbmMoJnJlZ2RfYnVmLT5yZWZfY291bnQpOwotCi0JYWRkX2lkeCA9IGR0by0+cmVnZF92ZWN0b3JfbGVuOwotCWR0by0+cmVnZFthZGRfaWR4XSA9IHJlZ2RfYnVmOwotCWR0by0+dXNlZF9zelthZGRfaWR4XSA9IHVzZV9zaXplOwotCWR0by0+b2Zmc2V0W2FkZF9pZHhdID0gdXNlX29mZnNldDsKLQotCWR0by0+cmVnZF92ZWN0b3JfbGVuKys7Ci19Ci0KIC8qIFJlZ2lzdGVyIHVzZXIgYnVmZmVyIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBwYXNzaXZlIHJkbWEKICAqICBkdG8gZGVzY3JpcHRvci4gVG90YWwgZGF0YSBzaXplIGlzIHN0b3JlZCBpbgogICogIGlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9JTl0uZGF0YV9sZW4KQEAgLTEyMiw5ICs5OSw5IEBACiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaXNlcl9kdG8gKnNlbmRfZHRvID0gJmlzZXJfdGFzay0+ZGVzYy5kdG87CiAJc3RydWN0IGlzZXJfaGRyICpoZHIgPSAmaXNlcl90YXNrLT5kZXNjLmlzZXJfaGVhZGVyOwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpidWZfb3V0ID0gJmlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9PVVRdOworCXN0cnVjdCBpYl9zZ2UgKnR4X2RzZyA9ICZpc2VyX3Rhc2stPmRlc2MudHhfc2dbMV07CiAKIAllcnIgPSBpc2VyX2RtYV9tYXBfdGFza19kYXRhKGlzZXJfdGFzaywKIAkJCQkgICAgIGJ1Zl9vdXQsCkBAIC0xNjMsMTM1ICsxNDAsMTAwIEBACiAJaWYgKGltbV9zeiA+IDApIHsKIAkJaXNlcl9kYmcoIkNtZCBpdHQ6JWQsIFdSSVRFLCBhZGRpbmcgaW1tLmRhdGEgc3o6ICVkXG4iLAogCQkJIHRhc2stPml0dCwgaW1tX3N6KTsKLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihzZW5kX2R0bywKLQkJCQkgICAgICAgcmVnZF9idWYsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGltbV9zeik7CisJCXR4X2RzZy0+YWRkciAgID0gcmVnZF9idWYtPnJlZy52YTsKKwkJdHhfZHNnLT5sZW5ndGggPSBpbW1fc3o7CisJCXR4X2RzZy0+bGtleSAgID0gcmVnZF9idWYtPnJlZy5sa2V5OworCQlpc2VyX3Rhc2stPmRlc2MubnVtX3NnZSA9IDI7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogaXNlcl9wb3N0X3JlY2VpdmVfY29udHJvbCAtIGFsbG9jYXRlcywgaW5pdGlhbGl6ZXMgYW5kIHBvc3RzIHJlY2VpdmUgRFRPLgotICovCi1zdGF0aWMgaW50IGlzZXJfcG9zdF9yZWNlaXZlX2NvbnRyb2woc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCi17Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICAgICAqcnhfZGVzYzsKLQlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9oZHI7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAgICAqcmVjdl9kdG8gPSBOVUxMOwotCXN0cnVjdCBpc2VyX2RldmljZSAgKmRldmljZSA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwotCWludCByeF9kYXRhX3NpemUsIGVycjsKLQlpbnQgcG9zdHMsIG91dHN0YW5kaW5nX3VuZXhwX3BkdXM7Ci0KLQkvKiBmb3IgdGhlIGxvZ2luIHNlcXVlbmNlIHdlIG11c3Qgc3VwcG9ydCByeCBvZiB1cHRvIDhLOyBsb2dpbiBpcyBkb25lCi0JICogYWZ0ZXIgY29ubiBjcmVhdGUvYmluZCAoY29ubmVjdCkgYW5kIGNvbm4gc3RvcC9iaW5kIChyZWNvbm5lY3QpLAotCSAqIHdoYXQncyBjb21tb24gZm9yIGJvdGggc2NoZW1lcyBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIG5vdCBzdGFydGVkCi0JICovCi0JaWYgKGNvbm4tPmNfc3RhZ2UgIT0gSVNDU0lfQ09OTl9TVEFSVEVEKQotCQlyeF9kYXRhX3NpemUgPSBJU0NTSV9ERUZfTUFYX1JFQ1ZfU0VHX0xFTjsKLQllbHNlIC8qIEZJWE1FIHRpbGwgdXNlciBzcGFjZSBzZXRzIGNvbm4tPm1heF9yZWN2X2RsZW5ndGggY29ycmVjdGx5ICovCi0JCXJ4X2RhdGFfc2l6ZSA9IDEyODsKLQotCW91dHN0YW5kaW5nX3VuZXhwX3BkdXMgPQotCQlhdG9taWNfeGNoZygmaXNlcl9jb25uLT5pYl9jb25uLT51bmV4cGVjdGVkX3BkdV9jb3VudCwgMCk7Ci0KLQkvKgotCSAqIGluIGFkZGl0aW9uIHRvIHRoZSByZXNwb25zZSBidWZmZXIsIHJlcGxhY2UgdGhvc2UgY29uc3VtZWQgYnkKLQkgKiB1bmV4cGVjdGVkIHBkdXMuCi0JICovCi0JZm9yIChwb3N0cyA9IDA7IHBvc3RzIDwgMSArIG91dHN0YW5kaW5nX3VuZXhwX3BkdXM7IHBvc3RzKyspIHsKLQkJcnhfZGVzYyA9IGttZW1fY2FjaGVfYWxsb2MoaWcuZGVzY19jYWNoZSwgR0ZQX05PSU8pOwotCQlpZiAocnhfZGVzYyA9PSBOVUxMKSB7Ci0JCQlpc2VyX2VycigiRmFpbGVkIHRvIGFsbG9jIGRlc2MgZm9yIHBvc3QgcmVjdiAlZFxuIiwKLQkJCQkgcG9zdHMpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gcG9zdF9yeF9jYWNoZV9hbGxvY19mYWlsdXJlOwotCQl9Ci0JCXJ4X2Rlc2MtPnR5cGUgPSBJU0NTSV9SWDsKLQkJcnhfZGVzYy0+ZGF0YSA9IGttYWxsb2MocnhfZGF0YV9zaXplLCBHRlBfTk9JTyk7Ci0JCWlmIChyeF9kZXNjLT5kYXRhID09IE5VTEwpIHsKLQkJCWlzZXJfZXJyKCJGYWlsZWQgdG8gYWxsb2MgZGF0YSBidWYgZm9yIHBvc3QgcmVjdiAlZFxuIiwKLQkJCQkgcG9zdHMpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gcG9zdF9yeF9rbWFsbG9jX2ZhaWx1cmU7Ci0JCX0KLQotCQlyZWN2X2R0byA9ICZyeF9kZXNjLT5kdG87Ci0JCXJlY3ZfZHRvLT5pYl9jb25uID0gaXNlcl9jb25uLT5pYl9jb25uOwotCQlyZWN2X2R0by0+cmVnZF92ZWN0b3JfbGVuID0gMDsKLQotCQlyZWdkX2hkciA9ICZyeF9kZXNjLT5oZHJfcmVnZF9idWY7Ci0JCW1lbXNldChyZWdkX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCBpc2VyX3JlZ2RfYnVmKSk7Ci0JCXJlZ2RfaGRyLT5kZXZpY2UgID0gZGV2aWNlOwotCQlyZWdkX2hkci0+dmlydF9hZGRyICA9IHJ4X2Rlc2M7IC8qID09ICZyeF9kZXNjLT5pc2VyX2hlYWRlciAqLwotCQlyZWdkX2hkci0+ZGF0YV9zaXplICA9IElTRVJfVE9UQUxfSEVBREVSU19MRU47Ci0KLQkJaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgcmVnZF9oZHIsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihyZWN2X2R0bywgcmVnZF9oZHIsIDAsIDApOwotCi0JCXJlZ2RfZGF0YSA9ICZyeF9kZXNjLT5kYXRhX3JlZ2RfYnVmOwotCQltZW1zZXQocmVnZF9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQkJcmVnZF9kYXRhLT5kZXZpY2UgID0gZGV2aWNlOwotCQlyZWdkX2RhdGEtPnZpcnRfYWRkciAgPSByeF9kZXNjLT5kYXRhOwotCQlyZWdkX2RhdGEtPmRhdGFfc2l6ZSAgPSByeF9kYXRhX3NpemU7Ci0KLQkJaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgcmVnZF9kYXRhLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JCWlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYocmVjdl9kdG8sIHJlZ2RfZGF0YSwgMCwgMCk7Ci0KLQkJZXJyID0gaXNlcl9wb3N0X3JlY3YocnhfZGVzYyk7Ci0JCWlmIChlcnIpIHsKLQkJCWlzZXJfZXJyKCJGYWlsZWQgaXNlcl9wb3N0X3JlY3YgZm9yIHBvc3QgJWRcbiIsIHBvc3RzKTsKLQkJCWdvdG8gcG9zdF9yeF9wb3N0X3JlY3ZfZmFpbHVyZTsKLQkJfQotCX0KLQkvKiBhbGwgcG9zdHMgc3VjY2Vzc2Z1bCAqLwotCXJldHVybiAwOwotCi1wb3N0X3J4X3Bvc3RfcmVjdl9mYWlsdXJlOgotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2UocmVjdl9kdG8pOwotCWtmcmVlKHJ4X2Rlc2MtPmRhdGEpOwotcG9zdF9yeF9rbWFsbG9jX2ZhaWx1cmU6Ci0Ja21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIHJ4X2Rlc2MpOwotcG9zdF9yeF9jYWNoZV9hbGxvY19mYWlsdXJlOgotCWlmIChwb3N0cyA+IDApIHsKLQkJLyoKLQkJICogcmVzcG9uc2UgYnVmZmVyIHBvc3RlZCwgYnV0IGRpZCBub3QgcmVwbGFjZSBhbGwgdW5leHBlY3RlZAotCQkgKiBwZHUgcmVjdiBidWZzLiBJZ25vcmUgZXJyb3IsIHJldHJ5IG9jY3VycyBuZXh0IHNlbmQKLQkJICovCi0JCW91dHN0YW5kaW5nX3VuZXhwX3BkdXMgLT0gKHBvc3RzIC0gMSk7Ci0JCWVyciA9IDA7Ci0JfQotCWF0b21pY19hZGQob3V0c3RhbmRpbmdfdW5leHBfcGR1cywKLQkJICAgJmlzZXJfY29ubi0+aWJfY29ubi0+dW5leHBlY3RlZF9wZHVfY291bnQpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogLyogY3JlYXRlcyBhIG5ldyB0eCBkZXNjcmlwdG9yIGFuZCBhZGRzIGhlYWRlciByZWdkIGJ1ZmZlciAqLwotc3RhdGljIHZvaWQgaXNlcl9jcmVhdGVfc2VuZF9kZXNjKHN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiwKLQkJCQkgIHN0cnVjdCBpc2VyX2Rlc2MgICAgICAgKnR4X2Rlc2MpCitzdGF0aWMgdm9pZCBpc2VyX2NyZWF0ZV9zZW5kX2Rlc2Moc3RydWN0IGlzZXJfY29ubgkqaWJfY29ubiwKKwkJCQkgIHN0cnVjdCBpc2VyX3R4X2Rlc2MJKnR4X2Rlc2MpCiB7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfaGRyID0gJnR4X2Rlc2MtPmhkcl9yZWdkX2J1ZjsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAgICAqc2VuZF9kdG8gPSAmdHhfZGVzYy0+ZHRvOworCXN0cnVjdCBpc2VyX2RldmljZSAqZGV2aWNlID0gaWJfY29ubi0+ZGV2aWNlOwogCi0JbWVtc2V0KHJlZ2RfaGRyLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQlyZWdkX2hkci0+ZGV2aWNlICA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwotCXJlZ2RfaGRyLT52aXJ0X2FkZHIgID0gdHhfZGVzYzsgLyogPT0gJnR4X2Rlc2MtPmlzZXJfaGVhZGVyICovCi0JcmVnZF9oZHItPmRhdGFfc2l6ZSAgPSBJU0VSX1RPVEFMX0hFQURFUlNfTEVOOwotCi0Jc2VuZF9kdG8tPmliX2Nvbm4gICAgICAgICA9IGlzZXJfY29ubi0+aWJfY29ubjsKLQlzZW5kX2R0by0+bm90aWZ5X2VuYWJsZSAgID0gMTsKLQlzZW5kX2R0by0+cmVnZF92ZWN0b3JfbGVuID0gMDsKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXZpY2UtPmliX2RldmljZSwKKwkJdHhfZGVzYy0+ZG1hX2FkZHIsIElTRVJfSEVBREVSU19MRU4sIERNQV9UT19ERVZJQ0UpOwogCiAJbWVtc2V0KCZ0eF9kZXNjLT5pc2VyX2hlYWRlciwgMCwgc2l6ZW9mKHN0cnVjdCBpc2VyX2hkcikpOwogCXR4X2Rlc2MtPmlzZXJfaGVhZGVyLmZsYWdzID0gSVNFUl9WRVI7CiAKLQlpc2VyX2R0b19hZGRfcmVnZF9idWZmKHNlbmRfZHRvLCByZWdkX2hkciwgMCwgMCk7CisJdHhfZGVzYy0+bnVtX3NnZSA9IDE7CisKKwlpZiAodHhfZGVzYy0+dHhfc2dbMF0ubGtleSAhPSBkZXZpY2UtPm1yLT5sa2V5KSB7CisJCXR4X2Rlc2MtPnR4X3NnWzBdLmxrZXkgPSBkZXZpY2UtPm1yLT5sa2V5OworCQlpc2VyX2RiZygic2Rlc2MgJXAgbGtleSBtaXNtYXRjaCwgZml4aW5nXG4iLCB0eF9kZXNjKTsKKwl9Cit9CisKKworaW50IGlzZXJfYWxsb2NfcnhfZGVzY3JpcHRvcnMoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKK3sKKwlpbnQgaSwgajsKKwl1NjQgZG1hX2FkZHI7CisJc3RydWN0IGlzZXJfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgaWJfc2dlICAgICAgICpyeF9zZzsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgICpkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CisKKwlpYl9jb25uLT5yeF9kZXNjcyA9IGttYWxsb2MoSVNFUl9RUF9NQVhfUkVDVl9EVE9TICoKKwkJCQlzaXplb2Yoc3RydWN0IGlzZXJfcnhfZGVzYyksIEdGUF9LRVJORUwpOworCWlmICghaWJfY29ubi0+cnhfZGVzY3MpCisJCWdvdG8gcnhfZGVzY19hbGxvY19mYWlsOworCisJcnhfZGVzYyA9IGliX2Nvbm4tPnJ4X2Rlc2NzOworCisJZm9yIChpID0gMDsgaSA8IElTRVJfUVBfTUFYX1JFQ1ZfRFRPUzsgaSsrLCByeF9kZXNjKyspICB7CisJCWRtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsICh2b2lkICopcnhfZGVzYywKKwkJCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihkZXZpY2UtPmliX2RldmljZSwgZG1hX2FkZHIpKQorCQkJZ290byByeF9kZXNjX2RtYV9tYXBfZmFpbGVkOworCisJCXJ4X2Rlc2MtPmRtYV9hZGRyID0gZG1hX2FkZHI7CisKKwkJcnhfc2cgPSAmcnhfZGVzYy0+cnhfc2c7CisJCXJ4X3NnLT5hZGRyICAgPSByeF9kZXNjLT5kbWFfYWRkcjsKKwkJcnhfc2ctPmxlbmd0aCA9IElTRVJfUlhfUEFZTE9BRF9TSVpFOworCQlyeF9zZy0+bGtleSAgID0gZGV2aWNlLT5tci0+bGtleTsKKwl9CisKKwlpYl9jb25uLT5yeF9kZXNjX2hlYWQgPSAwOworCXJldHVybiAwOworCityeF9kZXNjX2RtYV9tYXBfZmFpbGVkOgorCXJ4X2Rlc2MgPSBpYl9jb25uLT5yeF9kZXNjczsKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrLCByeF9kZXNjKyspCisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2Rlc2MtPmRtYV9hZGRyLAorCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoaWJfY29ubi0+cnhfZGVzY3MpOworCWliX2Nvbm4tPnJ4X2Rlc2NzID0gTlVMTDsKK3J4X2Rlc2NfYWxsb2NfZmFpbDoKKwlpc2VyX2VycigiZmFpbGVkIGFsbG9jYXRpbmcgcnggZGVzY3JpcHRvcnMgLyBkYXRhIGJ1ZmZlcnNcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGlzZXJfZnJlZV9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKQoreworCWludCBpOworCXN0cnVjdCBpc2VyX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGlzZXJfZGV2aWNlICpkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CisKKwlpZiAoaWJfY29ubi0+bG9naW5fYnVmKSB7CisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIGliX2Nvbm4tPmxvZ2luX2RtYSwKKwkJCUlTRVJfUlhfTE9HSU5fU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJa2ZyZWUoaWJfY29ubi0+bG9naW5fYnVmKTsKKwl9CisKKwlpZiAoIWliX2Nvbm4tPnJ4X2Rlc2NzKQorCQlyZXR1cm47CisKKwlyeF9kZXNjID0gaWJfY29ubi0+cnhfZGVzY3M7CisJZm9yIChpID0gMDsgaSA8IElTRVJfUVBfTUFYX1JFQ1ZfRFRPUzsgaSsrLCByeF9kZXNjKyspCisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2Rlc2MtPmRtYV9hZGRyLAorCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoaWJfY29ubi0+cnhfZGVzY3MpOwogfQogCiAvKioKQEAgLTMwMSw0NiArMjQzLDIzIEBACiB7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAotCWludCBpOwotCS8qCi0JICogRklYTUUgdGhpcyB2YWx1ZSBzaG91bGQgYmUgZGVjbGFyZWQgdG8gdGhlIHRhcmdldCBkdXJpbmcgbG9naW4gd2l0aAotCSAqIHRoZSBNYXhPdXRzdGFuZGluZ1VuZXhwZWN0ZWRQRFVzIGtleSB3aGVuIHN1cHBvcnRlZAotCSAqLwotCWludCBpbml0aWFsX3Bvc3RfcmVjdl9idWZzX251bSA9IElTRVJfTUFYX1JYX01JU0NfUERVUzsKLQotCWlzZXJfZGJnKCJJbml0aWFsbHkgcG9zdDogJWRcbiIsIGluaXRpYWxfcG9zdF9yZWN2X2J1ZnNfbnVtKTsKKwlpc2VyX2RiZygiSW5pdGlhbGx5IHBvc3Q6ICVkXG4iLCBJU0VSX01JTl9QT1NURURfUlgpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBwb3N0ZWQgcmVjdiBvciBzZW5kIGJ1ZmZlcnMgbGVmdCAtICovCiAJLyogdGhleSBtdXN0IGJlIGNvbnN1bWVkIGR1cmluZyB0aGUgbG9naW4gcGhhc2UgKi8KLQlCVUdfT04oYXRvbWljX3JlYWQoJmlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCkgIT0gMCk7CisJQlVHX09OKGlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCAhPSAwKTsKIAlCVUdfT04oYXRvbWljX3JlYWQoJmlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCkgIT0gMCk7CiAKKwlpZiAoaXNlcl9hbGxvY19yeF9kZXNjcmlwdG9ycyhpc2VyX2Nvbm4tPmliX2Nvbm4pKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIEluaXRpYWwgcG9zdCByZWNlaXZlIGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW5pdGlhbF9wb3N0X3JlY3ZfYnVmc19udW07IGkrKykgewotCQlpZiAoaXNlcl9wb3N0X3JlY2VpdmVfY29udHJvbChjb25uKSAhPSAwKSB7Ci0JCQlpc2VyX2VycigiRmFpbGVkIHRvIHBvc3QgcmVjdiBidWZzIGF0OiVkIGNvbm46MHglcFxuIiwKLQkJCQkgaSwgY29ubik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQlpc2VyX2RiZygiUG9zdGVkICVkIHBvc3QgcmVjdiBidWZzLCBjb25uOjB4JXBcbiIsIGksIGNvbm4pOworCWlmIChpc2VyX3Bvc3RfcmVjdm0oaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX01JTl9QT1NURURfUlgpKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1pc2VyX2NoZWNrX3htaXQoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHZvaWQgKnRhc2spCi17Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQotCWlmIChhdG9taWNfcmVhZCgmaXNlcl9jb25uLT5pYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PQotCSAgICBJU0VSX1FQX01BWF9SRVFfRFRPUykgewotCQlpc2VyX2RiZygiJWxkIGNhbid0IHhtaXQgdGFzayAlcFxuIixqaWZmaWVzLHRhc2spOwotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfQotCXJldHVybiAwOwotfQotCi0KIC8qKgogICogaXNlcl9zZW5kX2NvbW1hbmQgLSBzZW5kIGNvbW1hbmQgUERVCiAgKi8KQEAgLTM0OSwyNyArMjY4LDE4IEBACiB7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCXN0cnVjdCBpc2VyX2R0byAqc2VuZF9kdG8gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZWR0bDsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyOwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhX2J1ZjsKIAlzdHJ1Y3QgaXNjc2lfY21kICpoZHIgPSAgKHN0cnVjdCBpc2NzaV9jbWQgKil0YXNrLT5oZHI7CiAJc3RydWN0IHNjc2lfY21uZCAqc2MgID0gIHRhc2stPnNjOwotCi0JaWYgKCFpc2VyX2Nvbm5fc3RhdGVfY29tcChpc2VyX2Nvbm4tPmliX2Nvbm4sIElTRVJfQ09OTl9VUCkpIHsKLQkJaXNlcl9lcnIoIkZhaWxlZCB0byBzZW5kLCBjb25uOiAweCVwIGlzIG5vdCB1cFxuIiwgaXNlcl9jb25uLT5pYl9jb25uKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOworCXN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MgPSAmaXNlcl90YXNrLT5kZXNjOwogCiAJZWR0bCA9IG50b2hsKGhkci0+ZGF0YV9sZW5ndGgpOwogCiAJLyogYnVpbGQgdGhlIHR4IGRlc2MgcmVnZCBoZWFkZXIgYW5kIGFkZCBpdCB0byB0aGUgdHggZGVzYyBkdG8gKi8KLQlpc2VyX3Rhc2stPmRlc2MudHlwZSA9IElTQ1NJX1RYX1NDU0lfQ09NTUFORDsKLQlzZW5kX2R0byA9ICZpc2VyX3Rhc2stPmRlc2MuZHRvOwotCXNlbmRfZHRvLT50YXNrID0gaXNlcl90YXNrOwotCWlzZXJfY3JlYXRlX3NlbmRfZGVzYyhpc2VyX2Nvbm4sICZpc2VyX3Rhc2stPmRlc2MpOworCXR4X2Rlc2MtPnR5cGUgPSBJU0NTSV9UWF9TQ1NJX0NPTU1BTkQ7CisJaXNlcl9jcmVhdGVfc2VuZF9kZXNjKGlzZXJfY29ubi0+aWJfY29ubiwgdHhfZGVzYyk7CiAKIAlpZiAoaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX1JFQUQpCiAJCWRhdGFfYnVmID0gJmlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9JTl07CkBAIC0zOTgsMjMgKzMwOCwxMyBAQAogCQkJZ290byBzZW5kX2NvbW1hbmRfZXJyb3I7CiAJfQogCi0JaXNlcl9yZWdfc2luZ2xlKGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLAotCQkJc2VuZF9kdG8tPnJlZ2RbMF0sIERNQV9UT19ERVZJQ0UpOwotCi0JaWYgKGlzZXJfcG9zdF9yZWNlaXZlX2NvbnRyb2woY29ubikgIT0gMCkgewotCQlpc2VyX2VycigicG9zdF9yZWN2IGZhaWxlZCFcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIHNlbmRfY29tbWFuZF9lcnJvcjsKLQl9Ci0KIAlpc2VyX3Rhc2stPnN0YXR1cyA9IElTRVJfVEFTS19TVEFUVVNfU1RBUlRFRDsKIAotCWVyciA9IGlzZXJfcG9zdF9zZW5kKCZpc2VyX3Rhc2stPmRlc2MpOworCWVyciA9IGlzZXJfcG9zdF9zZW5kKGlzZXJfY29ubi0+aWJfY29ubiwgdHhfZGVzYyk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiAwOwogCiBzZW5kX2NvbW1hbmRfZXJyb3I6Ci0JaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShzZW5kX2R0byk7CiAJaXNlcl9lcnIoImNvbm4gJXAgZmFpbGVkIHRhc2stPml0dCAlZCBlcnIgJWRcbiIsY29ubiwgdGFzay0+aXR0LCBlcnIpOwogCXJldHVybiBlcnI7CiB9CkBAIC00MjgsMjAgKzMyOCwxMyBAQAogewogCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICp0eF9kZXNjID0gTlVMTDsKLQlzdHJ1Y3QgaXNlcl9kdG8gKnNlbmRfZHRvID0gTlVMTDsKKwlzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJdW5zaWduZWQgbG9uZyBidWZfb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZGF0YV9zZWdfbGVuOwogCXVpbnQzMl90IGl0dDsKIAlpbnQgZXJyID0gMDsKLQotCWlmICghaXNlcl9jb25uX3N0YXRlX2NvbXAoaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX0NPTk5fVVApKSB7Ci0JCWlzZXJfZXJyKCJGYWlsZWQgdG8gc2VuZCwgY29ubjogMHglcCBpcyBub3QgdXBcbiIsIGlzZXJfY29ubi0+aWJfY29ubik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOworCXN0cnVjdCBpYl9zZ2UgKnR4X2RzZzsKIAogCWl0dCA9IChfX2ZvcmNlIHVpbnQzMl90KWhkci0+aXR0OwogCWRhdGFfc2VnX2xlbiA9IG50b2gyNChoZHItPmRsZW5ndGgpOwpAQCAtNDUwLDI4ICszNDMsMjUgQEAKIAlpc2VyX2RiZygiJXMgaXR0ICVkIGRzZWdfbGVuICVkIG9mZnNldCAlZFxuIiwKIAkJIF9fZnVuY19fLChpbnQpaXR0LChpbnQpZGF0YV9zZWdfbGVuLChpbnQpYnVmX29mZnNldCk7CiAKLQl0eF9kZXNjID0ga21lbV9jYWNoZV9hbGxvYyhpZy5kZXNjX2NhY2hlLCBHRlBfTk9JTyk7CisJdHhfZGVzYyA9IGttZW1fY2FjaGVfemFsbG9jKGlnLmRlc2NfY2FjaGUsIEdGUF9BVE9NSUMpOwogCWlmICh0eF9kZXNjID09IE5VTEwpIHsKIAkJaXNlcl9lcnIoIkZhaWxlZCB0byBhbGxvYyBkZXNjIGZvciBwb3N0IGRhdGFvdXRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl0eF9kZXNjLT50eXBlID0gSVNDU0lfVFhfREFUQU9VVDsKKwl0eF9kZXNjLT5pc2VyX2hlYWRlci5mbGFncyA9IElTRVJfVkVSOwogCW1lbWNweSgmdHhfZGVzYy0+aXNjc2lfaGVhZGVyLCBoZHIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSk7CiAKLQkvKiBidWlsZCB0aGUgdHggZGVzYyByZWdkIGhlYWRlciBhbmQgYWRkIGl0IHRvIHRoZSB0eCBkZXNjIGR0byAqLwotCXNlbmRfZHRvID0gJnR4X2Rlc2MtPmR0bzsKLQlzZW5kX2R0by0+dGFzayA9IGlzZXJfdGFzazsKLQlpc2VyX2NyZWF0ZV9zZW5kX2Rlc2MoaXNlcl9jb25uLCB0eF9kZXNjKTsKKwkvKiBidWlsZCB0aGUgdHggZGVzYyAqLworCWlzZXJfaW5pdGlhbGl6ZV90YXNrX2hlYWRlcnModGFzaywgdHhfZGVzYyk7CiAKLQlpc2VyX3JlZ19zaW5nbGUoaXNlcl9jb25uLT5pYl9jb25uLT5kZXZpY2UsCi0JCQlzZW5kX2R0by0+cmVnZFswXSwgRE1BX1RPX0RFVklDRSk7Ci0KLQkvKiBhbGwgZGF0YSB3YXMgcmVnaXN0ZXJlZCBmb3IgUkRNQSwgd2UgY2FuIHVzZSB0aGUgbGtleSAqLwotCWlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYoc2VuZF9kdG8sCi0JCQkgICAgICAgJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF0sCi0JCQkgICAgICAgYnVmX29mZnNldCwKLQkJCSAgICAgICBkYXRhX3NlZ19sZW4pOworCXJlZ2RfYnVmID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF07CisJdHhfZHNnID0gJnR4X2Rlc2MtPnR4X3NnWzFdOworCXR4X2RzZy0+YWRkciAgICA9IHJlZ2RfYnVmLT5yZWcudmEgKyBidWZfb2Zmc2V0OworCXR4X2RzZy0+bGVuZ3RoICA9IGRhdGFfc2VnX2xlbjsKKwl0eF9kc2ctPmxrZXkgICAgPSByZWdkX2J1Zi0+cmVnLmxrZXk7CisJdHhfZGVzYy0+bnVtX3NnZSA9IDI7CiAKIAlpZiAoYnVmX29mZnNldCArIGRhdGFfc2VnX2xlbiA+IGlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9PVVRdLmRhdGFfbGVuKSB7CiAJCWlzZXJfZXJyKCJPZmZzZXQ6JWxkICYgRFNMOiVsZCBpbiBEYXRhLU91dCAiCkBAIC00ODUsMTIgKzM3NSwxMSBAQAogCQkgaXR0LCBidWZfb2Zmc2V0LCBkYXRhX3NlZ19sZW4pOwogCiAKLQllcnIgPSBpc2VyX3Bvc3Rfc2VuZCh0eF9kZXNjKTsKKwllcnIgPSBpc2VyX3Bvc3Rfc2VuZChpc2VyX2Nvbm4tPmliX2Nvbm4sIHR4X2Rlc2MpOwogCWlmICghZXJyKQogCQlyZXR1cm4gMDsKIAogc2VuZF9kYXRhX291dF9lcnJvcjoKLQlpc2VyX2R0b19idWZmc19yZWxlYXNlKHNlbmRfZHRvKTsKIAlrbWVtX2NhY2hlX2ZyZWUoaWcuZGVzY19jYWNoZSwgdHhfZGVzYyk7CiAJaXNlcl9lcnIoImNvbm4gJXAgZmFpbGVkIGVyciAlZFxuIixjb25uLCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC01MDEsNjQgKzM5MCw0NCBAQAogewogCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICptZGVzYyA9ICZpc2VyX3Rhc2stPmRlc2M7Ci0Jc3RydWN0IGlzZXJfZHRvICpzZW5kX2R0byA9IE5VTEw7CisJc3RydWN0IGlzZXJfdHhfZGVzYyAqbWRlc2MgPSAmaXNlcl90YXNrLT5kZXNjOwogCXVuc2lnbmVkIGxvbmcgZGF0YV9zZWdfbGVuOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1ZjsKIAlzdHJ1Y3QgaXNlcl9kZXZpY2UgKmRldmljZTsKLQl1bnNpZ25lZCBjaGFyIG9wY29kZTsKLQotCWlmICghaXNlcl9jb25uX3N0YXRlX2NvbXAoaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX0NPTk5fVVApKSB7Ci0JCWlzZXJfZXJyKCJGYWlsZWQgdG8gc2VuZCwgY29ubjogMHglcCBpcyBub3QgdXBcbiIsIGlzZXJfY29ubi0+aWJfY29ubik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOwogCiAJLyogYnVpbGQgdGhlIHR4IGRlc2MgcmVnZCBoZWFkZXIgYW5kIGFkZCBpdCB0byB0aGUgdHggZGVzYyBkdG8gKi8KIAltZGVzYy0+dHlwZSA9IElTQ1NJX1RYX0NPTlRST0w7Ci0Jc2VuZF9kdG8gPSAmbWRlc2MtPmR0bzsKLQlzZW5kX2R0by0+dGFzayA9IE5VTEw7Ci0JaXNlcl9jcmVhdGVfc2VuZF9kZXNjKGlzZXJfY29ubiwgbWRlc2MpOworCWlzZXJfY3JlYXRlX3NlbmRfZGVzYyhpc2VyX2Nvbm4tPmliX2Nvbm4sIG1kZXNjKTsKIAogCWRldmljZSA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwogCi0JaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgc2VuZF9kdG8tPnJlZ2RbMF0sIERNQV9UT19ERVZJQ0UpOwotCiAJZGF0YV9zZWdfbGVuID0gbnRvaDI0KHRhc2stPmhkci0+ZGxlbmd0aCk7CiAKIAlpZiAoZGF0YV9zZWdfbGVuID4gMCkgewotCQlyZWdkX2J1ZiA9ICZtZGVzYy0+ZGF0YV9yZWdkX2J1ZjsKLQkJbWVtc2V0KHJlZ2RfYnVmLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQkJcmVnZF9idWYtPmRldmljZSA9IGRldmljZTsKLQkJcmVnZF9idWYtPnZpcnRfYWRkciA9IHRhc2stPmRhdGE7Ci0JCXJlZ2RfYnVmLT5kYXRhX3NpemUgPSB0YXNrLT5kYXRhX2NvdW50OwotCQlpc2VyX3JlZ19zaW5nbGUoZGV2aWNlLCByZWdkX2J1ZiwKLQkJCQlETUFfVE9fREVWSUNFKTsKLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihzZW5kX2R0bywgcmVnZF9idWYsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGRhdGFfc2VnX2xlbik7Ci0JfQotCi0Jb3Bjb2RlID0gdGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSzsKLQotCS8qIHBvc3QgcmVjdiBidWZmZXIgZm9yIHJlc3BvbnNlIGlmIG9uZSBpcyBleHBlY3RlZCAqLwotCWlmICghKG9wY29kZSA9PSBJU0NTSV9PUF9OT09QX09VVCAmJiB0YXNrLT5oZHItPml0dCA9PSBSRVNFUlZFRF9JVFQpKSB7Ci0JCWlmIChpc2VyX3Bvc3RfcmVjZWl2ZV9jb250cm9sKGNvbm4pICE9IDApIHsKLQkJCWlzZXJfZXJyKCJwb3N0X3Jjdl9idWZmIGZhaWxlZCFcbiIpOwotCQkJZXJyID0gLUVOT01FTTsKKwkJc3RydWN0IGliX3NnZSAqdHhfZHNnID0gJm1kZXNjLT50eF9zZ1sxXTsKKwkJaWYgKHRhc2sgIT0gY29ubi0+bG9naW5fdGFzaykgeworCQkJaXNlcl9lcnIoImRhdGEgcHJlc2VudCBvbiBub24gbG9naW4gdGFzayEhIVxuIik7CiAJCQlnb3RvIHNlbmRfY29udHJvbF9lcnJvcjsKIAkJfQorCQltZW1jcHkoaXNlcl9jb25uLT5pYl9jb25uLT5sb2dpbl9idWYsIHRhc2stPmRhdGEsCisJCQkJCQkJdGFzay0+ZGF0YV9jb3VudCk7CisJCXR4X2RzZy0+YWRkciAgICA9IGlzZXJfY29ubi0+aWJfY29ubi0+bG9naW5fZG1hOworCQl0eF9kc2ctPmxlbmd0aCAgPSBkYXRhX3NlZ19sZW47CisJCXR4X2RzZy0+bGtleSAgICA9IGRldmljZS0+bXItPmxrZXk7CisJCW1kZXNjLT5udW1fc2dlID0gMjsKIAl9CiAKLQllcnIgPSBpc2VyX3Bvc3Rfc2VuZChtZGVzYyk7CisJaWYgKHRhc2sgPT0gY29ubi0+bG9naW5fdGFzaykgeworCQllcnIgPSBpc2VyX3Bvc3RfcmVjdmwoaXNlcl9jb25uLT5pYl9jb25uKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gc2VuZF9jb250cm9sX2Vycm9yOworCX0KKworCWVyciA9IGlzZXJfcG9zdF9zZW5kKGlzZXJfY29ubi0+aWJfY29ubiwgbWRlc2MpOwogCWlmICghZXJyKQogCQlyZXR1cm4gMDsKIAogc2VuZF9jb250cm9sX2Vycm9yOgotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2Uoc2VuZF9kdG8pOwogCWlzZXJfZXJyKCJjb25uICVwIGZhaWxlZCBlcnIgJWRcbiIsY29ubiwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY2LDEwNCArNDM1LDcxIEBACiAvKioKICAqIGlzZXJfcmN2X2R0b19jb21wbGV0aW9uIC0gcmVjdiBEVE8gY29tcGxldGlvbgogICovCi12b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqcnhfZGVzYywKLQkJCSB1bnNpZ25lZCBsb25nIGR0b194ZmVyX2xlbikKK3ZvaWQgaXNlcl9yY3ZfY29tcGxldGlvbihzdHJ1Y3QgaXNlcl9yeF9kZXNjICpyeF9kZXNjLAorCQkJIHVuc2lnbmVkIGxvbmcgcnhfeGZlcl9sZW4sCisJCQkgc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKIHsKLQlzdHJ1Y3QgaXNlcl9kdG8gKmR0byA9ICZyeF9kZXNjLT5kdG87Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqY29ubiA9IGR0by0+aWJfY29ubi0+aXNlcl9jb25uOwotCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwotCXN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzazsKKwlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICpjb25uID0gaWJfY29ubi0+aXNlcl9jb25uOwogCXN0cnVjdCBpc2NzaV9oZHIgKmhkcjsKLQljaGFyICAgKnJ4X2RhdGEgPSBOVUxMOwotCWludCAgICAgcnhfZGF0YV9sZW4gPSAwOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOworCXU2NCByeF9kbWE7CisJaW50IHJ4X2J1Zmxlbiwgb3V0c3RhbmRpbmcsIGNvdW50LCBlcnI7CisKKwkvKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbG9naW4gdG8gYWxsIG90aGVyIFBEVXMgKi8KKwlpZiAoKGNoYXIgKilyeF9kZXNjID09IGliX2Nvbm4tPmxvZ2luX2J1ZikgeworCQlyeF9kbWEgPSBpYl9jb25uLT5sb2dpbl9kbWE7CisJCXJ4X2J1ZmxlbiA9IElTRVJfUlhfTE9HSU5fU0laRTsKKwl9IGVsc2UgeworCQlyeF9kbWEgPSByeF9kZXNjLT5kbWFfYWRkcjsKKwkJcnhfYnVmbGVuID0gSVNFUl9SWF9QQVlMT0FEX1NJWkU7CisJfQorCisJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2RtYSwKKwkJCXJ4X2J1ZmxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAogCWhkciA9ICZyeF9kZXNjLT5pc2NzaV9oZWFkZXI7CiAKLQlpc2VyX2RiZygib3AgMHgleCBpdHQgMHgleFxuIiwgaGRyLT5vcGNvZGUsaGRyLT5pdHQpOworCWlzZXJfZGJnKCJvcCAweCV4IGl0dCAweCV4IGRsZW4gJWRcbiIsIGhkci0+b3Bjb2RlLAorCQkJaGRyLT5pdHQsIChpbnQpKHJ4X3hmZXJfbGVuIC0gSVNFUl9IRUFERVJTX0xFTikpOwogCi0JaWYgKGR0b194ZmVyX2xlbiA+IElTRVJfVE9UQUxfSEVBREVSU19MRU4pIHsgLyogd2UgaGF2ZSBkYXRhICovCi0JCXJ4X2RhdGFfbGVuID0gZHRvX3hmZXJfbGVuIC0gSVNFUl9UT1RBTF9IRUFERVJTX0xFTjsKLQkJcnhfZGF0YSAgICAgPSBkdG8tPnJlZ2RbMV0tPnZpcnRfYWRkcjsKLQkJcnhfZGF0YSAgICArPSBkdG8tPm9mZnNldFsxXTsKLQl9CisJaXNjc2lfaXNlcl9yZWN2KGNvbm4tPmlzY3NpX2Nvbm4sIGhkciwKKwkJcnhfZGVzYy0+ZGF0YSwgcnhfeGZlcl9sZW4gLSBJU0VSX0hFQURFUlNfTEVOKTsKIAotCW9wY29kZSA9IGhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0s7Ci0KLQlpZiAob3Bjb2RlID09IElTQ1NJX09QX1NDU0lfQ01EX1JTUCkgewotCQlzcGluX2xvY2soJmNvbm4tPmlzY3NpX2Nvbm4tPnNlc3Npb24tPmxvY2spOwotCQl0YXNrID0gaXNjc2lfaXR0X3RvX2N0YXNrKGNvbm4tPmlzY3NpX2Nvbm4sIGhkci0+aXR0KTsKLQkJaWYgKHRhc2spCi0JCQlfX2lzY3NpX2dldF90YXNrKHRhc2spOwotCQlzcGluX3VubG9jaygmY29ubi0+aXNjc2lfY29ubi0+c2Vzc2lvbi0+bG9jayk7Ci0KLQkJaWYgKCF0YXNrKQotCQkJaXNlcl9lcnIoIml0dCBjYW4ndCBiZSBtYXRjaGVkIHRvIHRhc2shISEgIgotCQkJCSAiY29ubiAlcCBvcGNvZGUgJWQgaXR0ICVkXG4iLAotCQkJCSBjb25uLT5pc2NzaV9jb25uLCBvcGNvZGUsIGhkci0+aXR0KTsKLQkJZWxzZSB7Ci0JCQlpc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCQkJaXNlcl9kYmcoIml0dCAlZCB0YXNrICVwXG4iLGhkci0+aXR0LCB0YXNrKTsKLQkJCWlzZXJfdGFzay0+c3RhdHVzID0gSVNFUl9UQVNLX1NUQVRVU19DT01QTEVURUQ7Ci0JCQlpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShpc2VyX3Rhc2spOwotCQkJaXNjc2lfcHV0X3Rhc2sodGFzayk7Ci0JCX0KLQl9Ci0JaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShkdG8pOwotCi0JaXNjc2lfaXNlcl9yZWN2KGNvbm4tPmlzY3NpX2Nvbm4sIGhkciwgcnhfZGF0YSwgcnhfZGF0YV9sZW4pOwotCi0Ja2ZyZWUocnhfZGVzYy0+ZGF0YSk7Ci0Ja21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIHJ4X2Rlc2MpOworCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLCByeF9kbWEsCisJCQlyeF9idWZsZW4sIERNQV9GUk9NX0RFVklDRSk7CiAKIAkvKiBkZWNyZW1lbnRpbmcgY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCBvbmx5IC0tYWZ0ZXItLSBmcmVlaW5nIHRoZSAgICoKIAkgKiB0YXNrIGVsaW1pbmF0ZXMgdGhlIG5lZWQgdG8gd29ycnkgb24gdGFza3Mgd2hpY2ggYXJlIGNvbXBsZXRlZCBpbiAgICoKIAkgKiBwYXJhbGxlbCB0byB0aGUgZXhlY3V0aW9uIG9mIGlzZXJfY29ubl90ZXJtLiBTbyB0aGUgY29kZSB0aGF0IHdhaXRzICoKIAkgKiBmb3IgdGhlIHBvc3RlZCByeCBidWZzIHJlZmNvdW50IHRvIGJlY29tZSB6ZXJvIGhhbmRsZXMgZXZlcnl0aGluZyAgICovCi0JYXRvbWljX2RlYygmY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCk7CisJY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudC0tOwogCi0JLyoKLQkgKiBpZiBhbiB1bmV4cGVjdGVkIFBEVSB3YXMgcmVjZWl2ZWQgdGhlbiB0aGUgcmVjdiB3ciBjb25zdW1lZCBtdXN0Ci0JICogYmUgcmVwbGFjZWQsIHRoaXMgaXMgZG9uZSBpbiB0aGUgbmV4dCBzZW5kIG9mIGEgY29udHJvbC10eXBlIFBEVQotCSAqLwotCWlmIChvcGNvZGUgPT0gSVNDU0lfT1BfTk9PUF9JTiAmJiBoZHItPml0dCA9PSBSRVNFUlZFRF9JVFQpIHsKLQkJLyogbm9wLWluIHdpdGggaXR0ID0gMHhmZmZmZmZmZiAqLwotCQlhdG9taWNfaW5jKCZjb25uLT5pYl9jb25uLT51bmV4cGVjdGVkX3BkdV9jb3VudCk7CisJaWYgKHJ4X2RtYSA9PSBpYl9jb25uLT5sb2dpbl9kbWEpCisJCXJldHVybjsKKworCW91dHN0YW5kaW5nID0gaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudDsKKwlpZiAob3V0c3RhbmRpbmcgKyBJU0VSX01JTl9QT1NURURfUlggPD0gSVNFUl9RUF9NQVhfUkVDVl9EVE9TKSB7CisJCWNvdW50ID0gbWluKElTRVJfUVBfTUFYX1JFQ1ZfRFRPUyAtIG91dHN0YW5kaW5nLAorCQkJCQkJSVNFUl9NSU5fUE9TVEVEX1JYKTsKKwkJZXJyID0gaXNlcl9wb3N0X3JlY3ZtKGliX2Nvbm4sIGNvdW50KTsKKwkJaWYgKGVycikKKwkJCWlzZXJfZXJyKCJwb3N0aW5nICVkIHJ4IGJ1ZnMgZXJyICVkXG4iLCBjb3VudCwgZXJyKTsKIAl9Ci0JZWxzZSBpZiAob3Bjb2RlID09IElTQ1NJX09QX0FTWU5DX0VWRU5UKSB7Ci0JCS8qIGFzeW5jcm9ub3VzIG1lc3NhZ2UgKi8KLQkJYXRvbWljX2luYygmY29ubi0+aWJfY29ubi0+dW5leHBlY3RlZF9wZHVfY291bnQpOwotCX0KLQkvKiBhIHJlamVjdCBQRFUgY29uc3VtZXMgdGhlIHJlY3YgYnVmIHBvc3RlZCBmb3IgdGhlIHJlc3BvbnNlICovCiB9CiAKLXZvaWQgaXNlcl9zbmRfY29tcGxldGlvbihzdHJ1Y3QgaXNlcl9kZXNjICp0eF9kZXNjKQordm9pZCBpc2VyX3NuZF9jb21wbGV0aW9uKHN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MsCisJCQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKQogewotCXN0cnVjdCBpc2VyX2R0byAgICAgICAgKmR0byA9ICZ0eF9kZXNjLT5kdG87Ci0Jc3RydWN0IGlzZXJfY29ubiAgICAgICAqaWJfY29ubiA9IGR0by0+aWJfY29ubjsKLQlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gPSBpYl9jb25uLT5pc2VyX2Nvbm47Ci0Jc3RydWN0IGlzY3NpX2Nvbm4gICAgICAqY29ubiA9IGlzZXJfY29ubi0+aXNjc2lfY29ubjsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKLQlpbnQgcmVzdW1lX3R4ID0gMDsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgKmRldmljZSA9IGliX2Nvbm4tPmRldmljZTsKIAotCWlzZXJfZGJnKCJJbml0aWF0b3IsIERhdGEgc2VudCBkdG89MHglcFxuIiwgZHRvKTsKLQotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2UoZHRvKTsKLQotCWlmICh0eF9kZXNjLT50eXBlID09IElTQ1NJX1RYX0RBVEFPVVQpCisJaWYgKHR4X2Rlc2MtPnR5cGUgPT0gSVNDU0lfVFhfREFUQU9VVCkgeworCQlpYl9kbWFfdW5tYXBfc2luZ2xlKGRldmljZS0+aWJfZGV2aWNlLCB0eF9kZXNjLT5kbWFfYWRkciwKKwkJCQkJSVNFUl9IRUFERVJTX0xFTiwgRE1BX1RPX0RFVklDRSk7CiAJCWttZW1fY2FjaGVfZnJlZShpZy5kZXNjX2NhY2hlLCB0eF9kZXNjKTsKLQotCWlmIChhdG9taWNfcmVhZCgmaXNlcl9jb25uLT5pYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PQotCSAgICBJU0VSX1FQX01BWF9SRVFfRFRPUykKLQkJcmVzdW1lX3R4ID0gMTsKKwl9CiAKIAlhdG9taWNfZGVjKCZpYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KTsKIAotCWlmIChyZXN1bWVfdHgpIHsKLQkJaXNlcl9kYmcoIiVsZCByZXN1bWluZyB0eFxuIixqaWZmaWVzKTsKLQkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwotCX0KLQogCWlmICh0eF9kZXNjLT50eXBlID09IElTQ1NJX1RYX0NPTlRST0wpIHsKIAkJLyogdGhpcyBhcml0aG1ldGljIGlzIGxlZ2FsIGJ5IGxpYmlzY3NpIGRkX2RhdGEgYWxsb2NhdGlvbiAqLwogCQl0YXNrID0gKHZvaWQgKikgKChsb25nKSh2b2lkICopdHhfZGVzYyAtCkBAIC02OTIsNyArNTI4LDYgQEAKIAogdm9pZCBpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2spCiB7Ci0JaW50IGRlZmVycmVkOwogCWludCBpc19yZG1hX2FsaWduZWQgPSAxOwogCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkOwogCkBAIC03MTAsMzIgKzU0NSwxNyBAQAogCiAJaWYgKGlzZXJfdGFzay0+ZGlyW0lTRVJfRElSX0lOXSkgewogCQlyZWdkID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX0lOXTsKLQkJZGVmZXJyZWQgPSBpc2VyX3JlZ2RfYnVmZl9yZWxlYXNlKHJlZ2QpOwotCQlpZiAoZGVmZXJyZWQpIHsKLQkJCWlzZXJfZXJyKCIlZCByZWZlcmVuY2VzIHJlbWFpbiBmb3IgQlVGLUlOIHJkbWEgcmVnXG4iLAotCQkJCSBhdG9taWNfcmVhZCgmcmVnZC0+cmVmX2NvdW50KSk7Ci0JCX0KKwkJaWYgKHJlZ2QtPnJlZy5pc19mbXIpCisJCQlpc2VyX3VucmVnX21lbSgmcmVnZC0+cmVnKTsKIAl9CiAKIAlpZiAoaXNlcl90YXNrLT5kaXJbSVNFUl9ESVJfT1VUXSkgewogCQlyZWdkID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF07Ci0JCWRlZmVycmVkID0gaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShyZWdkKTsKLQkJaWYgKGRlZmVycmVkKSB7Ci0JCQlpc2VyX2VycigiJWQgcmVmZXJlbmNlcyByZW1haW4gZm9yIEJVRi1PVVQgcmRtYSByZWdcbiIsCi0JCQkJIGF0b21pY19yZWFkKCZyZWdkLT5yZWZfY291bnQpKTsKLQkJfQorCQlpZiAocmVnZC0+cmVnLmlzX2ZtcikKKwkJCWlzZXJfdW5yZWdfbWVtKCZyZWdkLT5yZWcpOwogCX0KIAogICAgICAgIC8qIGlmIHRoZSBkYXRhIHdhcyB1bmFsaWduZWQsIGl0IHdhcyBhbHJlYWR5IHVubWFwcGVkIGFuZCB0aGVuIGNvcGllZCAqLwogICAgICAgIGlmIChpc19yZG1hX2FsaWduZWQpCiAJCWlzZXJfZG1hX3VubWFwX3Rhc2tfZGF0YShpc2VyX3Rhc2spOwogfQotCi12b2lkIGlzZXJfZHRvX2J1ZmZzX3JlbGVhc2Uoc3RydWN0IGlzZXJfZHRvICpkdG8pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHRvLT5yZWdkX3ZlY3Rvcl9sZW47IGkrKykKLQkJaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShkdG8tPnJlZ2RbaV0pOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9tZW1vcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCmluZGV4IDI3NGM4ODMuLmZiODhkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCkBAIC00MSw2MiArNDEsNiBAQAogI2RlZmluZSBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEIDB4MjAwMDAgLyogMTI4SyAtIGttYWxsb2MgbGltaXQgKi8KIAogLyoqCi0gKiBEZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZQotICogcmVnaXN0ZXJlZCBidWZmZXIgJiByZWxlYXNlcyBpdAotICoKLSAqIHJldHVybnMgMCBpZiByZWxlYXNlZCwgMSBpZiBkZWZlcnJlZAotICovCi1pbnQgaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWYpCi17Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2OwotCi0JaWYgKChhdG9taWNfcmVhZCgmcmVnZF9idWYtPnJlZl9jb3VudCkgPT0gMCkgfHwKLQkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnZF9idWYtPnJlZl9jb3VudCkpIHsKLQkJLyogaWYgd2UgdXNlZCB0aGUgZG1hIG1yLCB1bnJlZyBpcyBqdXN0IE5PUCAqLwotCQlpZiAocmVnZF9idWYtPnJlZy5pc19mbXIpCi0JCQlpc2VyX3VucmVnX21lbSgmcmVnZF9idWYtPnJlZyk7Ci0KLQkJaWYgKHJlZ2RfYnVmLT5kbWFfYWRkcikgewotCQkJZGV2ID0gcmVnZF9idWYtPmRldmljZS0+aWJfZGV2aWNlOwotCQkJaWJfZG1hX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJCSByZWdkX2J1Zi0+ZG1hX2FkZHIsCi0JCQkJCSByZWdkX2J1Zi0+ZGF0YV9zaXplLAotCQkJCQkgcmVnZF9idWYtPmRpcmVjdGlvbik7Ci0JCX0KLQkJLyogZWxzZSB0aGlzIHJlZ2QgYnVmIGlzIGFzc29jaWF0ZWQgd2l0aCB0YXNrIHdoaWNoIHdlICovCi0JCS8qIGRtYV91bm1hcF9zaW5nbGUvc2cgbGF0ZXIgKi8KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJaXNlcl9kYmcoIlJlbGVhc2UgZGVmZXJyZWQsIHJlZ2QuYnVmZjogMHglcFxuIiwgcmVnZF9idWYpOwotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLS8qKgotICogaXNlcl9yZWdfc2luZ2xlIC0gZmlsbHMgcmVnaXN0ZXJlZCBidWZmZXIgZGVzY3JpcHRvciB3aXRoCi0gKgkJICAgICByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24KLSAqLwotdm9pZCBpc2VyX3JlZ19zaW5nbGUoc3RydWN0IGlzZXJfZGV2aWNlICpkZXZpY2UsCi0JCSAgICAgc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfYnVmLAotCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQl1NjQgZG1hX2FkZHI7Ci0KLQlkbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGRldmljZS0+aWJfZGV2aWNlLAotCQkJCSAgICAgcmVnZF9idWYtPnZpcnRfYWRkciwKLQkJCQkgICAgIHJlZ2RfYnVmLT5kYXRhX3NpemUsIGRpcmVjdGlvbik7Ci0JQlVHX09OKGliX2RtYV9tYXBwaW5nX2Vycm9yKGRldmljZS0+aWJfZGV2aWNlLCBkbWFfYWRkcikpOwotCi0JcmVnZF9idWYtPnJlZy5sa2V5ID0gZGV2aWNlLT5tci0+bGtleTsKLQlyZWdkX2J1Zi0+cmVnLmxlbiAgPSByZWdkX2J1Zi0+ZGF0YV9zaXplOwotCXJlZ2RfYnVmLT5yZWcudmEgICA9IGRtYV9hZGRyOwotCXJlZ2RfYnVmLT5yZWcuaXNfZm1yID0gMDsKLQotCXJlZ2RfYnVmLT5kbWFfYWRkciAgPSBkbWFfYWRkcjsKLQlyZWdkX2J1Zi0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOwotfQotCi0vKioKICAqIGlzZXJfc3RhcnRfcmRtYV91bmFsaWduZWRfc2cKICAqLwogc3RhdGljIGludCBpc2VyX3N0YXJ0X3JkbWFfdW5hbGlnbmVkX3NnKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzaywKQEAgLTEwOSwxMCArNTMsMTAgQEAKIAl1bnNpZ25lZCBsb25nICBjbWRfZGF0YV9sZW4gPSBkYXRhLT5kYXRhX2xlbjsKIAogCWlmIChjbWRfZGF0YV9sZW4gPiBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEKQotCQltZW0gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sCisJCW1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLAogCQkgICAgICBpbG9nMihyb3VuZHVwX3Bvd19vZl90d28oY21kX2RhdGFfbGVuKSkgLSBQQUdFX1NISUZUKTsKIAllbHNlCi0JCW1lbSA9IGttYWxsb2MoY21kX2RhdGFfbGVuLCBHRlBfTk9JTyk7CisJCW1lbSA9IGttYWxsb2MoY21kX2RhdGFfbGVuLCBHRlBfQVRPTUlDKTsKIAogCWlmIChtZW0gPT0gTlVMTCkgewogCQlpc2VyX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbSBzaXplICVkICVkIGZvciBjb3B5aW5nIHNnbGlzdFxuIiwKQEAgLTQ3NCw5ICs0MTgsNSBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQotCS8qIHRha2UgYSByZWZlcmVuY2Ugb24gdGhpcyByZWdkIGJ1ZiBzdWNoIHRoYXQgaXQgd2lsbCBub3QgYmUgcmVsZWFzZWQgKgotCSAqIChlZyBpbiBzZW5kIGR0byBjb21wbGV0aW9uKSBiZWZvcmUgd2UgZ2V0IHRoZSBzY3NpIHJlc3BvbnNlICAgICAgICAgKi8KLQlhdG9taWNfaW5jKCZyZWdkX2J1Zi0+cmVmX2NvdW50KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCmluZGV4IDg1NzlmMzIuLjMwOGQxN2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKQEAgLTM3LDkgKzM3LDggQEAKICNpbmNsdWRlICJpc2NzaV9pc2VyLmgiCiAKICNkZWZpbmUgSVNDU0lfSVNFUl9NQVhfQ09OTgk4Ci0jZGVmaW5lIElTRVJfTUFYX0NRX0xFTgkJKChJU0VSX1FQX01BWF9SRUNWX0RUT1MgKyBcCi0JCQkJSVNFUl9RUF9NQVhfUkVRX0RUT1MpICogICBcCi0JCQkJIElTQ1NJX0lTRVJfTUFYX0NPTk4pCisjZGVmaW5lIElTRVJfTUFYX1JYX0NRX0xFTgkoSVNFUl9RUF9NQVhfUkVDVl9EVE9TICogSVNDU0lfSVNFUl9NQVhfQ09OTikKKyNkZWZpbmUgSVNFUl9NQVhfVFhfQ1FfTEVOCShJU0VSX1FQX01BWF9SRVFfRFRPUyAgKiBJU0NTSV9JU0VSX01BWF9DT05OKQogCiBzdGF0aWMgdm9pZCBpc2VyX2NxX3Rhc2tsZXRfZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIGlzZXJfY3FfY2FsbGJhY2soc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY3FfY29udGV4dCk7CkBAIC02NywxNSArNjYsMjMgQEAKIAlpZiAoSVNfRVJSKGRldmljZS0+cGQpKQogCQlnb3RvIHBkX2VycjsKIAotCWRldmljZS0+Y3EgPSBpYl9jcmVhdGVfY3EoZGV2aWNlLT5pYl9kZXZpY2UsCisJZGV2aWNlLT5yeF9jcSA9IGliX2NyZWF0ZV9jcShkZXZpY2UtPmliX2RldmljZSwKIAkJCQkgIGlzZXJfY3FfY2FsbGJhY2ssCiAJCQkJICBpc2VyX2NxX2V2ZW50X2NhbGxiYWNrLAogCQkJCSAgKHZvaWQgKilkZXZpY2UsCi0JCQkJICBJU0VSX01BWF9DUV9MRU4sIDApOwotCWlmIChJU19FUlIoZGV2aWNlLT5jcSkpCi0JCWdvdG8gY3FfZXJyOworCQkJCSAgSVNFUl9NQVhfUlhfQ1FfTEVOLCAwKTsKKwlpZiAoSVNfRVJSKGRldmljZS0+cnhfY3EpKQorCQlnb3RvIHJ4X2NxX2VycjsKIAotCWlmIChpYl9yZXFfbm90aWZ5X2NxKGRldmljZS0+Y3EsIElCX0NRX05FWFRfQ09NUCkpCisJZGV2aWNlLT50eF9jcSA9IGliX2NyZWF0ZV9jcShkZXZpY2UtPmliX2RldmljZSwKKwkJCQkgIE5VTEwsIGlzZXJfY3FfZXZlbnRfY2FsbGJhY2ssCisJCQkJICAodm9pZCAqKWRldmljZSwKKwkJCQkgIElTRVJfTUFYX1RYX0NRX0xFTiwgMCk7CisKKwlpZiAoSVNfRVJSKGRldmljZS0+dHhfY3EpKQorCQlnb3RvIHR4X2NxX2VycjsKKworCWlmIChpYl9yZXFfbm90aWZ5X2NxKGRldmljZS0+cnhfY3EsIElCX0NRX05FWFRfQ09NUCkpCiAJCWdvdG8gY3FfYXJtX2VycjsKIAogCXRhc2tsZXRfaW5pdCgmZGV2aWNlLT5jcV90YXNrbGV0LApAQCAtOTMsOCArMTAwLDEwIEBACiBkbWFfbXJfZXJyOgogCXRhc2tsZXRfa2lsbCgmZGV2aWNlLT5jcV90YXNrbGV0KTsKIGNxX2FybV9lcnI6Ci0JaWJfZGVzdHJveV9jcShkZXZpY2UtPmNxKTsKLWNxX2VycjoKKwlpYl9kZXN0cm95X2NxKGRldmljZS0+dHhfY3EpOwordHhfY3FfZXJyOgorCWliX2Rlc3Ryb3lfY3EoZGV2aWNlLT5yeF9jcSk7CityeF9jcV9lcnI6CiAJaWJfZGVhbGxvY19wZChkZXZpY2UtPnBkKTsKIHBkX2VycjoKIAlpc2VyX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGFuIElCIHJlc291cmNlXG4iKTsKQEAgLTExMiwxMSArMTIxLDEzIEBACiAJdGFza2xldF9raWxsKCZkZXZpY2UtPmNxX3Rhc2tsZXQpOwogCiAJKHZvaWQpaWJfZGVyZWdfbXIoZGV2aWNlLT5tcik7Ci0JKHZvaWQpaWJfZGVzdHJveV9jcShkZXZpY2UtPmNxKTsKKwkodm9pZClpYl9kZXN0cm95X2NxKGRldmljZS0+dHhfY3EpOworCSh2b2lkKWliX2Rlc3Ryb3lfY3EoZGV2aWNlLT5yeF9jcSk7CiAJKHZvaWQpaWJfZGVhbGxvY19wZChkZXZpY2UtPnBkKTsKIAogCWRldmljZS0+bXIgPSBOVUxMOwotCWRldmljZS0+Y3EgPSBOVUxMOworCWRldmljZS0+dHhfY3EgPSBOVUxMOworCWRldmljZS0+cnhfY3EgPSBOVUxMOwogCWRldmljZS0+cGQgPSBOVUxMOwogfQogCkBAIC0xMjksMTMgKzE0MCwyMyBAQAogewogCXN0cnVjdCBpc2VyX2RldmljZQkqZGV2aWNlOwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIJaW5pdF9hdHRyOwotCWludAkJCXJldDsKKwlpbnQJCQlyZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBpYl9mbXJfcG9vbF9wYXJhbSBwYXJhbXM7CiAKIAlCVUdfT04oaWJfY29ubi0+ZGV2aWNlID09IE5VTEwpOwogCiAJZGV2aWNlID0gaWJfY29ubi0+ZGV2aWNlOwogCisJaWJfY29ubi0+bG9naW5fYnVmID0ga21hbGxvYyhJU0VSX1JYX0xPR0lOX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghaWJfY29ubi0+bG9naW5fYnVmKSB7CisJCWdvdG8gYWxsb2NfZXJyOworCQlyZXQgPSAtRU5PTUVNOworCX0KKworCWliX2Nvbm4tPmxvZ2luX2RtYSA9IGliX2RtYV9tYXBfc2luZ2xlKGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLAorCQkJCSh2b2lkICopaWJfY29ubi0+bG9naW5fYnVmLCBJU0VSX1JYX0xPR0lOX1NJWkUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwogCWliX2Nvbm4tPnBhZ2VfdmVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzZXJfcGFnZV92ZWMpICsKIAkJCQkgICAgKHNpemVvZih1NjQpICogKElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFICsxKSksCiAJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMTY5LDEyICsxOTAsMTIgQEAKIAogCWluaXRfYXR0ci5ldmVudF9oYW5kbGVyID0gaXNlcl9xcF9ldmVudF9jYWxsYmFjazsKIAlpbml0X2F0dHIucXBfY29udGV4dAk9ICh2b2lkICopaWJfY29ubjsKLQlpbml0X2F0dHIuc2VuZF9jcQk9IGRldmljZS0+Y3E7Ci0JaW5pdF9hdHRyLnJlY3ZfY3EJPSBkZXZpY2UtPmNxOworCWluaXRfYXR0ci5zZW5kX2NxCT0gZGV2aWNlLT50eF9jcTsKKwlpbml0X2F0dHIucmVjdl9jcQk9IGRldmljZS0+cnhfY3E7CiAJaW5pdF9hdHRyLmNhcC5tYXhfc2VuZF93ciAgPSBJU0VSX1FQX01BWF9SRVFfRFRPUzsKIAlpbml0X2F0dHIuY2FwLm1heF9yZWN2X3dyICA9IElTRVJfUVBfTUFYX1JFQ1ZfRFRPUzsKLQlpbml0X2F0dHIuY2FwLm1heF9zZW5kX3NnZSA9IE1BWF9SRUdEX0JVRl9WRUNUT1JfTEVOOwotCWluaXRfYXR0ci5jYXAubWF4X3JlY3Zfc2dlID0gMjsKKwlpbml0X2F0dHIuY2FwLm1heF9zZW5kX3NnZSA9IDI7CisJaW5pdF9hdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSAxOwogCWluaXRfYXR0ci5zcV9zaWdfdHlwZQk9IElCX1NJR05BTF9SRVFfV1I7CiAJaW5pdF9hdHRyLnFwX3R5cGUJPSBJQl9RUFRfUkM7CiAKQEAgLTE5Miw2ICsyMTMsNyBAQAogCSh2b2lkKWliX2Rlc3Ryb3lfZm1yX3Bvb2woaWJfY29ubi0+Zm1yX3Bvb2wpOwogZm1yX3Bvb2xfZXJyOgogCWtmcmVlKGliX2Nvbm4tPnBhZ2VfdmVjKTsKKwlrZnJlZShpYl9jb25uLT5sb2dpbl9idWYpOwogYWxsb2NfZXJyOgogCWlzZXJfZXJyKCJ1bmFibGUgdG8gYWxsb2MgbWVtIG9yIGNyZWF0ZSByZXNvdXJjZSwgZXJyICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0yNzgsMTcgKzMwMCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZpZy5kZXZpY2VfbGlzdF9tdXRleCk7CiB9CiAKLWludCBpc2VyX2Nvbm5fc3RhdGVfY29tcChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLAotCQkJZW51bSBpc2VyX2liX2Nvbm5fc3RhdGUgY29tcCkKLXsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2JoKCZpYl9jb25uLT5sb2NrKTsKLQlyZXQgPSAoaWJfY29ubi0+c3RhdGUgPT0gY29tcCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmliX2Nvbm4tPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgaXNlcl9jb25uX3N0YXRlX2NvbXBfZXhjaChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLAogCQkJCSAgICAgZW51bSBpc2VyX2liX2Nvbm5fc3RhdGUgY29tcCwKIAkJCQkgICAgIGVudW0gaXNlcl9pYl9jb25uX3N0YXRlIGV4Y2gpCkBAIC0zMTQsNyArMzI1LDcgQEAKIAltdXRleF9sb2NrKCZpZy5jb25ubGlzdF9tdXRleCk7CiAJbGlzdF9kZWwoJmliX2Nvbm4tPmNvbm5fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZpZy5jb25ubGlzdF9tdXRleCk7Ci0KKwlpc2VyX2ZyZWVfcnhfZGVzY3JpcHRvcnMoaWJfY29ubik7CiAJaXNlcl9mcmVlX2liX2Nvbm5fcmVzKGliX2Nvbm4pOwogCWliX2Nvbm4tPmRldmljZSA9IE5VTEw7CiAJLyogb24gRVZFTlRfQUREUl9FUlJPUiB0aGVyZSdzIG5vIGRldmljZSB5ZXQgZm9yIHRoaXMgY29ubiAqLwpAQCAtNDQyLDcgKzQ1Myw3IEBACiAJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAogCS8qIENvbXBsZXRlIHRoZSB0ZXJtaW5hdGlvbiBwcm9jZXNzIGlmIG5vIHBvc3RzIGFyZSBwZW5kaW5nICovCi0JaWYgKChhdG9taWNfcmVhZCgmaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCkgPT0gMCkgJiYKKwlpZiAoaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCA9PSAwICYmCiAJICAgIChhdG9taWNfcmVhZCgmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCkgPT0gMCkpIHsKIAkJaWJfY29ubi0+c3RhdGUgPSBJU0VSX0NPTk5fRE9XTjsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpYl9jb25uLT53YWl0KTsKQEAgLTQ4OSw5ICs1MDAsOCBAQAogewogCWliX2Nvbm4tPnN0YXRlID0gSVNFUl9DT05OX0lOSVQ7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaWJfY29ubi0+d2FpdCk7Ci0JYXRvbWljX3NldCgmaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCwgMCk7CisJaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCA9IDA7CiAJYXRvbWljX3NldCgmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCwgMCk7Ci0JYXRvbWljX3NldCgmaWJfY29ubi0+dW5leHBlY3RlZF9wZHVfY291bnQsIDApOwogCWF0b21pY19zZXQoJmliX2Nvbm4tPnJlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmaWJfY29ubi0+Y29ubl9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmaWJfY29ubi0+bG9jayk7CkBAIC02MjYsMTM2ICs2MzYsOTcgQEAKIAlyZWctPm1lbV9oID0gTlVMTDsKIH0KIAotLyoqCi0gKiBpc2VyX2R0b190b19pb3YgLSBidWlsZHMgSU9WIGZyb20gYSBkdG8gZGVzY3JpcHRvcgotICovCi1zdGF0aWMgdm9pZCBpc2VyX2R0b190b19pb3Yoc3RydWN0IGlzZXJfZHRvICpkdG8sIHN0cnVjdCBpYl9zZ2UgKmlvdiwgaW50IGlvdl9sZW4pCitpbnQgaXNlcl9wb3N0X3JlY3ZsKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pCiB7Ci0JaW50CQkgICAgIGk7Ci0Jc3RydWN0IGliX3NnZQkgICAgICpzZ2U7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfYnVmOworCXN0cnVjdCBpYl9yZWN2X3dyIHJ4X3dyLCAqcnhfd3JfZmFpbGVkOworCXN0cnVjdCBpYl9zZ2UJICBzZ2U7CisJaW50IGliX3JldDsKIAotCWlmIChkdG8tPnJlZ2RfdmVjdG9yX2xlbiA+IGlvdl9sZW4pIHsKLQkJaXNlcl9lcnIoImlvdiBzaXplICVkIHRvbyBzbWFsbCBmb3IgcG9zdGluZyBkdG8gb2YgbGVuICVkXG4iLAotCQkJIGlvdl9sZW4sIGR0by0+cmVnZF92ZWN0b3JfbGVuKTsKLQkJQlVHKCk7Ci0JfQorCXNnZS5hZGRyICAgPSBpYl9jb25uLT5sb2dpbl9kbWE7CisJc2dlLmxlbmd0aCA9IElTRVJfUlhfTE9HSU5fU0laRTsKKwlzZ2UubGtleSAgID0gaWJfY29ubi0+ZGV2aWNlLT5tci0+bGtleTsKIAotCWZvciAoaSA9IDA7IGkgPCBkdG8tPnJlZ2RfdmVjdG9yX2xlbjsgaSsrKSB7Ci0JCXNnZQkgICAgPSAmaW92W2ldOwotCQlyZWdkX2J1ZiAgPSBkdG8tPnJlZ2RbaV07CisJcnhfd3Iud3JfaWQgICA9ICh1bnNpZ25lZCBsb25nKWliX2Nvbm4tPmxvZ2luX2J1ZjsKKwlyeF93ci5zZ19saXN0ID0gJnNnZTsKKwlyeF93ci5udW1fc2dlID0gMTsKKwlyeF93ci5uZXh0ICAgID0gTlVMTDsKIAotCQlzZ2UtPmFkZHIgICA9IHJlZ2RfYnVmLT5yZWcudmE7Ci0JCXNnZS0+bGVuZ3RoID0gcmVnZF9idWYtPnJlZy5sZW47Ci0JCXNnZS0+bGtleSAgID0gcmVnZF9idWYtPnJlZy5sa2V5OwotCi0JCWlmIChkdG8tPnVzZWRfc3pbaV0gPiAwKSAgLyogQWRqdXN0IHNpemUgKi8KLQkJCXNnZS0+bGVuZ3RoID0gZHRvLT51c2VkX3N6W2ldOwotCi0JCS8qIG9mZnNldCBhbmQgbGVuZ3RoIHNob3VsZCBub3QgZXhjZWVkIHRoZSByZWdkIGJ1ZiBsZW5ndGggKi8KLQkJaWYgKHNnZS0+bGVuZ3RoICsgZHRvLT5vZmZzZXRbaV0gPiByZWdkX2J1Zi0+cmVnLmxlbikgewotCQkJaXNlcl9lcnIoIlVzZWQgbGVuOiVsZCArIG9mZnNldDolZCwgZXhjZWVkIHJlZy5idWYubGVuOiIKLQkJCQkgIiVsZCBpbiBkdG86MHglcCBbJWRdLCB2YToweCUwOGxYXG4iLAotCQkJCSAodW5zaWduZWQgbG9uZylzZ2UtPmxlbmd0aCwgZHRvLT5vZmZzZXRbaV0sCi0JCQkJICh1bnNpZ25lZCBsb25nKXJlZ2RfYnVmLT5yZWcubGVuLCBkdG8sIGksCi0JCQkJICh1bnNpZ25lZCBsb25nKXNnZS0+YWRkcik7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCXNnZS0+YWRkciArPSBkdG8tPm9mZnNldFtpXTsgLyogQWRqdXN0IG9mZnNldCAqLwotCX0KLX0KLQotLyoqCi0gKiBpc2VyX3Bvc3RfcmVjdiAtIFBvc3RzIGEgcmVjZWl2ZSBidWZmZXIuCi0gKgotICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKLSAqLwotaW50IGlzZXJfcG9zdF9yZWN2KHN0cnVjdCBpc2VyX2Rlc2MgKnJ4X2Rlc2MpCi17Ci0JaW50CQkgIGliX3JldCwgcmV0X3ZhbCA9IDA7Ci0Jc3RydWN0IGliX3JlY3Zfd3IgcmVjdl93ciwgKnJlY3Zfd3JfZmFpbGVkOwotCXN0cnVjdCBpYl9zZ2UJICBpb3ZbMl07Ci0Jc3RydWN0IGlzZXJfY29ubiAgKmliX2Nvbm47Ci0Jc3RydWN0IGlzZXJfZHRvICAgKnJlY3ZfZHRvID0gJnJ4X2Rlc2MtPmR0bzsKLQotCS8qIFJldHJpZXZlIGNvbm4gKi8KLQlpYl9jb25uID0gcmVjdl9kdG8tPmliX2Nvbm47Ci0KLQlpc2VyX2R0b190b19pb3YocmVjdl9kdG8sIGlvdiwgMik7Ci0KLQlyZWN2X3dyLm5leHQJPSBOVUxMOwotCXJlY3Zfd3Iuc2dfbGlzdCA9IGlvdjsKLQlyZWN2X3dyLm51bV9zZ2UgPSByZWN2X2R0by0+cmVnZF92ZWN0b3JfbGVuOwotCXJlY3Zfd3Iud3JfaWQJPSAodW5zaWduZWQgbG9uZylyeF9kZXNjOwotCi0JYXRvbWljX2luYygmaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCk7Ci0JaWJfcmV0CT0gaWJfcG9zdF9yZWN2KGliX2Nvbm4tPnFwLCAmcmVjdl93ciwgJnJlY3Zfd3JfZmFpbGVkKTsKKwlpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50Kys7CisJaWJfcmV0CT0gaWJfcG9zdF9yZWN2KGliX2Nvbm4tPnFwLCAmcnhfd3IsICZyeF93cl9mYWlsZWQpOwogCWlmIChpYl9yZXQpIHsKIAkJaXNlcl9lcnIoImliX3Bvc3RfcmVjdiBmYWlsZWQgcmV0PSVkXG4iLCBpYl9yZXQpOwotCQlhdG9taWNfZGVjKCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50KTsKLQkJcmV0X3ZhbCA9IC0xOworCQlpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50LS07CisJfQorCXJldHVybiBpYl9yZXQ7Cit9CisKK2ludCBpc2VyX3Bvc3RfcmVjdm0oc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubiwgaW50IGNvdW50KQoreworCXN0cnVjdCBpYl9yZWN2X3dyICpyeF93ciwgKnJ4X3dyX2ZhaWxlZDsKKwlpbnQgaSwgaWJfcmV0OworCXVuc2lnbmVkIGludCBteV9yeF9oZWFkID0gaWJfY29ubi0+cnhfZGVzY19oZWFkOworCXN0cnVjdCBpc2VyX3J4X2Rlc2MgKnJ4X2Rlc2M7CisKKwlmb3IgKHJ4X3dyID0gaWJfY29ubi0+cnhfd3IsIGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcnhfd3IrKykgeworCQlyeF9kZXNjCQk9ICZpYl9jb25uLT5yeF9kZXNjc1tteV9yeF9oZWFkXTsKKwkJcnhfd3ItPndyX2lkCT0gKHVuc2lnbmVkIGxvbmcpcnhfZGVzYzsKKwkJcnhfd3ItPnNnX2xpc3QJPSAmcnhfZGVzYy0+cnhfc2c7CisJCXJ4X3dyLT5udW1fc2dlCT0gMTsKKwkJcnhfd3ItPm5leHQJPSByeF93ciArIDE7CisJCW15X3J4X2hlYWQgPSAobXlfcnhfaGVhZCArIDEpICYgKElTRVJfUVBfTUFYX1JFQ1ZfRFRPUyAtIDEpOwogCX0KIAotCXJldHVybiByZXRfdmFsOworCXJ4X3dyLS07CisJcnhfd3ItPm5leHQgPSBOVUxMOyAvKiBtYXJrIGVuZCBvZiB3b3JrIHJlcXVlc3RzIGxpc3QgKi8KKworCWliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQgKz0gY291bnQ7CisJaWJfcmV0CT0gaWJfcG9zdF9yZWN2KGliX2Nvbm4tPnFwLCBpYl9jb25uLT5yeF93ciwgJnJ4X3dyX2ZhaWxlZCk7CisJaWYgKGliX3JldCkgeworCQlpc2VyX2VycigiaWJfcG9zdF9yZWN2IGZhaWxlZCByZXQ9JWRcbiIsIGliX3JldCk7CisJCWliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQgLT0gY291bnQ7CisJfSBlbHNlCisJCWliX2Nvbm4tPnJ4X2Rlc2NfaGVhZCA9IG15X3J4X2hlYWQ7CisJcmV0dXJuIGliX3JldDsKIH0KIAorCiAvKioKICAqIGlzZXJfc3RhcnRfc2VuZCAtIEluaXRpYXRlIGEgU2VuZCBEVE8gb3BlcmF0aW9uCiAgKgogICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKICAqLwotaW50IGlzZXJfcG9zdF9zZW5kKHN0cnVjdCBpc2VyX2Rlc2MgKnR4X2Rlc2MpCitpbnQgaXNlcl9wb3N0X3NlbmQoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubiwgc3RydWN0IGlzZXJfdHhfZGVzYyAqdHhfZGVzYykKIHsKLQlpbnQJCSAgaWJfcmV0LCByZXRfdmFsID0gMDsKKwlpbnQJCSAgaWJfcmV0OwogCXN0cnVjdCBpYl9zZW5kX3dyIHNlbmRfd3IsICpzZW5kX3dyX2ZhaWxlZDsKLQlzdHJ1Y3QgaWJfc2dlCSAgaW92W01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKLQlzdHJ1Y3QgaXNlcl9jb25uICAqaWJfY29ubjsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAqZHRvID0gJnR4X2Rlc2MtPmR0bzsKIAotCWliX2Nvbm4gPSBkdG8tPmliX2Nvbm47Ci0KLQlpc2VyX2R0b190b19pb3YoZHRvLCBpb3YsIE1BWF9SRUdEX0JVRl9WRUNUT1JfTEVOKTsKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShpYl9jb25uLT5kZXZpY2UtPmliX2RldmljZSwKKwkJdHhfZGVzYy0+ZG1hX2FkZHIsIElTRVJfSEVBREVSU19MRU4sIERNQV9UT19ERVZJQ0UpOwogCiAJc2VuZF93ci5uZXh0CSAgID0gTlVMTDsKIAlzZW5kX3dyLndyX2lkCSAgID0gKHVuc2lnbmVkIGxvbmcpdHhfZGVzYzsKLQlzZW5kX3dyLnNnX2xpc3QJICAgPSBpb3Y7Ci0Jc2VuZF93ci5udW1fc2dlCSAgID0gZHRvLT5yZWdkX3ZlY3Rvcl9sZW47CisJc2VuZF93ci5zZ19saXN0CSAgID0gdHhfZGVzYy0+dHhfc2c7CisJc2VuZF93ci5udW1fc2dlCSAgID0gdHhfZGVzYy0+bnVtX3NnZTsKIAlzZW5kX3dyLm9wY29kZQkgICA9IElCX1dSX1NFTkQ7Ci0Jc2VuZF93ci5zZW5kX2ZsYWdzID0gZHRvLT5ub3RpZnlfZW5hYmxlID8gSUJfU0VORF9TSUdOQUxFRCA6IDA7CisJc2VuZF93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKIAogCWF0b21pY19pbmMoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOwogCiAJaWJfcmV0ID0gaWJfcG9zdF9zZW5kKGliX2Nvbm4tPnFwLCAmc2VuZF93ciwgJnNlbmRfd3JfZmFpbGVkKTsKIAlpZiAoaWJfcmV0KSB7Ci0JCWlzZXJfZXJyKCJGYWlsZWQgdG8gc3RhcnQgU0VORCBEVE8sIGR0bzogMHglcCwgSU9WIGxlbjogJWRcbiIsCi0JCQkgZHRvLCBkdG8tPnJlZ2RfdmVjdG9yX2xlbik7CiAJCWlzZXJfZXJyKCJpYl9wb3N0X3NlbmQgZmFpbGVkLCByZXQ6JWRcbiIsIGliX3JldCk7CiAJCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOwotCQlyZXRfdmFsID0gLTE7CiAJfQotCi0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIGliX3JldDsKIH0KIAotc3RhdGljIHZvaWQgaXNlcl9oYW5kbGVfY29tcF9lcnJvcihzdHJ1Y3QgaXNlcl9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgaXNlcl9oYW5kbGVfY29tcF9lcnJvcihzdHJ1Y3QgaXNlcl90eF9kZXNjICpkZXNjLAorCQkJCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pCiB7Ci0Jc3RydWN0IGlzZXJfZHRvICAqZHRvICAgICA9ICZkZXNjLT5kdG87Ci0Jc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubiA9IGR0by0+aWJfY29ubjsKLQotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2UoZHRvKTsKLQotCWlmIChkZXNjLT50eXBlID09IElTQ1NJX1JYKSB7Ci0JCWtmcmVlKGRlc2MtPmRhdGEpOworCWlmIChkZXNjICYmIGRlc2MtPnR5cGUgPT0gSVNDU0lfVFhfREFUQU9VVCkKIAkJa21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIGRlc2MpOwotCQlhdG9taWNfZGVjKCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50KTsKLQl9IGVsc2UgeyAvKiB0eXBlIGlzIFRYIGNvbnRyb2wvY29tbWFuZC9kYXRhb3V0ICovCi0JCWlmIChkZXNjLT50eXBlID09IElTQ1NJX1RYX0RBVEFPVVQpCi0JCQlrbWVtX2NhY2hlX2ZyZWUoaWcuZGVzY19jYWNoZSwgZGVzYyk7Ci0JCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOwotCX0KIAotCWlmIChhdG9taWNfcmVhZCgmaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCkgPT0gMCAmJgorCWlmIChpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50ID09IDAgJiYKIAkgICAgYXRvbWljX3JlYWQoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpID09IDApIHsKIAkJLyogZ2V0dGluZyBoZXJlIHdoZW4gdGhlIHN0YXRlIGlzIFVQIG1lYW5zIHRoYXQgdGhlIGNvbm4gaXMgKgogCQkgKiBiZWluZyB0ZXJtaW5hdGVkIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGlTQ1NJIGxheWVyJ3MgICAqCkBAIC03NzQsMzIgKzc0NSw3NCBAQAogCX0KIH0KIAorc3RhdGljIGludCBpc2VyX2RyYWluX3R4X2NxKHN0cnVjdCBpc2VyX2RldmljZSAgKmRldmljZSkKK3sKKwlzdHJ1Y3QgaWJfY3EgICpjcSA9IGRldmljZS0+dHhfY3E7CisJc3RydWN0IGliX3djICB3YzsKKwlzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjOworCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm47CisJaW50IGNvbXBsZXRlZF90eCA9IDA7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA9PSAxKSB7CisJCXR4X2Rlc2MJPSAoc3RydWN0IGlzZXJfdHhfZGVzYyAqKSAodW5zaWduZWQgbG9uZykgd2Mud3JfaWQ7CisJCWliX2Nvbm4gPSB3Yy5xcC0+cXBfY29udGV4dDsKKwkJaWYgKHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7CisJCQlpZiAod2Mub3Bjb2RlID09IElCX1dDX1NFTkQpCisJCQkJaXNlcl9zbmRfY29tcGxldGlvbih0eF9kZXNjLCBpYl9jb25uKTsKKwkJCWVsc2UKKwkJCQlpc2VyX2VycigiZXhwZWN0ZWQgb3Bjb2RlICVkIGdvdCAlZFxuIiwKKwkJCQkJSUJfV0NfU0VORCwgd2Mub3Bjb2RlKTsKKwkJfSBlbHNlIHsKKwkJCWlzZXJfZXJyKCJ0eCBpZCAlbGx4IHN0YXR1cyAlZCB2ZW5kX2VyciAleFxuIiwKKwkJCQl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy52ZW5kb3JfZXJyKTsKKwkJCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOworCQkJaXNlcl9oYW5kbGVfY29tcF9lcnJvcih0eF9kZXNjLCBpYl9jb25uKTsKKwkJfQorCQljb21wbGV0ZWRfdHgrKzsKKwl9CisJcmV0dXJuIGNvbXBsZXRlZF90eDsKK30KKworCiBzdGF0aWMgdm9pZCBpc2VyX2NxX3Rhc2tsZXRfZm4odW5zaWduZWQgbG9uZyBkYXRhKQogewogCSBzdHJ1Y3QgaXNlcl9kZXZpY2UgICpkZXZpY2UgPSAoc3RydWN0IGlzZXJfZGV2aWNlICopZGF0YTsKLQkgc3RydWN0IGliX2NxCSAgICAgKmNxID0gZGV2aWNlLT5jcTsKKwkgc3RydWN0IGliX2NxCSAgICAgKmNxID0gZGV2aWNlLT5yeF9jcTsKIAkgc3RydWN0IGliX3djCSAgICAgd2M7Ci0JIHN0cnVjdCBpc2VyX2Rlc2MgICAgKmRlc2M7CisJIHN0cnVjdCBpc2VyX3J4X2Rlc2MgKmRlc2M7CiAJIHVuc2lnbmVkIGxvbmcJICAgICB4ZmVyX2xlbjsKKwlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uOworCWludCBjb21wbGV0ZWRfdHgsIGNvbXBsZXRlZF9yeDsKKwljb21wbGV0ZWRfdHggPSBjb21wbGV0ZWRfcnggPSAwOwogCiAJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPT0gMSkgewotCQlkZXNjCSA9IChzdHJ1Y3QgaXNlcl9kZXNjICopICh1bnNpZ25lZCBsb25nKSB3Yy53cl9pZDsKKwkJZGVzYwkgPSAoc3RydWN0IGlzZXJfcnhfZGVzYyAqKSAodW5zaWduZWQgbG9uZykgd2Mud3JfaWQ7CiAJCUJVR19PTihkZXNjID09IE5VTEwpOwotCisJCWliX2Nvbm4gPSB3Yy5xcC0+cXBfY29udGV4dDsKIAkJaWYgKHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7Ci0JCQlpZiAoZGVzYy0+dHlwZSA9PSBJU0NTSV9SWCkgeworCQkJaWYgKHdjLm9wY29kZSA9PSBJQl9XQ19SRUNWKSB7CiAJCQkJeGZlcl9sZW4gPSAodW5zaWduZWQgbG9uZyl3Yy5ieXRlX2xlbjsKLQkJCQlpc2VyX3Jjdl9jb21wbGV0aW9uKGRlc2MsIHhmZXJfbGVuKTsKLQkJCX0gZWxzZSAvKiB0eXBlID09IElTQ1NJX1RYX0NPTlRST0wvU0NTSV9DTUQvRE9VVCAqLwotCQkJCWlzZXJfc25kX2NvbXBsZXRpb24oZGVzYyk7CisJCQkJaXNlcl9yY3ZfY29tcGxldGlvbihkZXNjLCB4ZmVyX2xlbiwgaWJfY29ubik7CisJCQl9IGVsc2UKKwkJCQlpc2VyX2VycigiZXhwZWN0ZWQgb3Bjb2RlICVkIGdvdCAlZFxuIiwKKwkJCQkJSUJfV0NfUkVDViwgd2Mub3Bjb2RlKTsKIAkJfSBlbHNlIHsKLQkJCWlzZXJfZXJyKCJjb21wIHcuIGVycm9yIG9wICVkIHN0YXR1cyAlZFxuIixkZXNjLT50eXBlLHdjLnN0YXR1cyk7Ci0JCQlpc2VyX2hhbmRsZV9jb21wX2Vycm9yKGRlc2MpOworCQkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19XUl9GTFVTSF9FUlIpCisJCQkJaXNlcl9lcnIoInJ4IGlkICVsbHggc3RhdHVzICVkIHZlbmRfZXJyICV4XG4iLAorCQkJCQl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy52ZW5kb3JfZXJyKTsKKwkJCWliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQtLTsKKwkJCWlzZXJfaGFuZGxlX2NvbXBfZXJyb3IoTlVMTCwgaWJfY29ubik7CiAJCX0KKwkJY29tcGxldGVkX3J4Kys7CisJCWlmICghKGNvbXBsZXRlZF9yeCAmIDYzKSkKKwkJCWNvbXBsZXRlZF90eCArPSBpc2VyX2RyYWluX3R4X2NxKGRldmljZSk7CiAJfQogCS8qICN3YXJuaW5nICJpdCBpcyBhc3N1bWVkIGhlcmUgdGhhdCBhcm1pbmcgQ1Egb25seSBvbmNlIGl0cyBlbXB0eSIgKgogCSAqICIgd291bGQgbm90IGNhdXNlIGludGVycnVwdHMgdG8gYmUgbWlzc2VkIiAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOworCisJY29tcGxldGVkX3R4ICs9IGlzZXJfZHJhaW5fdHhfY3EoZGV2aWNlKTsKKwlpc2VyX2RiZygiZ290ICVkIHJ4ICVkIHR4IGNvbXBsZXRpb25zXG4iLCBjb21wbGV0ZWRfcngsIGNvbXBsZXRlZF90eCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlzZXJfY3FfY2FsbGJhY2soc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY3FfY29udGV4dCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggNTRjOGZlMjUuLmVkM2Y5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC04MCw3ICs4MCw4IEBACiAKIHN0YXRpYyB2b2lkIHNycF9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIHZvaWQgc3JwX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cik7CitzdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpOworc3RhdGljIHZvaWQgc3JwX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKTsKIHN0YXRpYyBpbnQgc3JwX2NtX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwgc3RydWN0IGliX2NtX2V2ZW50ICpldmVudCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmliX3NycF90cmFuc3BvcnRfdGVtcGxhdGU7CkBAIC0yMjcsMTQgKzIyOCwyMSBAQAogCWlmICghaW5pdF9hdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRhcmdldC0+Y3EgPSBpYl9jcmVhdGVfY3EodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAotCQkJCSAgc3JwX2NvbXBsZXRpb24sIE5VTEwsIHRhcmdldCwgU1JQX0NRX1NJWkUsIDApOwotCWlmIChJU19FUlIodGFyZ2V0LT5jcSkpIHsKLQkJcmV0ID0gUFRSX0VSUih0YXJnZXQtPmNxKTsKLQkJZ290byBvdXQ7CisJdGFyZ2V0LT5yZWN2X2NxID0gaWJfY3JlYXRlX2NxKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKKwkJCQkgICAgICAgc3JwX3JlY3ZfY29tcGxldGlvbiwgTlVMTCwgdGFyZ2V0LCBTUlBfUlFfU0laRSwgMCk7CisJaWYgKElTX0VSUih0YXJnZXQtPnJlY3ZfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5yZWN2X2NxKTsKKwkJZ290byBlcnI7CiAJfQogCi0JaWJfcmVxX25vdGlmeV9jcSh0YXJnZXQtPmNxLCBJQl9DUV9ORVhUX0NPTVApOworCXRhcmdldC0+c2VuZF9jcSA9IGliX2NyZWF0ZV9jcSh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCisJCQkJICAgICAgIHNycF9zZW5kX2NvbXBsZXRpb24sIE5VTEwsIHRhcmdldCwgU1JQX1NRX1NJWkUsIDApOworCWlmIChJU19FUlIodGFyZ2V0LT5zZW5kX2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKHRhcmdldC0+c2VuZF9jcSk7CisJCWdvdG8gZXJyX3JlY3ZfY3E7CisJfQorCisJaWJfcmVxX25vdGlmeV9jcSh0YXJnZXQtPnJlY3ZfY3EsIElCX0NRX05FWFRfQ09NUCk7CiAKIAlpbml0X2F0dHItPmV2ZW50X2hhbmRsZXIgICAgICAgPSBzcnBfcXBfZXZlbnQ7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gU1JQX1NRX1NJWkU7CkBAIC0yNDMsMjQgKzI1MSwzMiBAQAogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSAgICA9IDE7CiAJaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSAgICAgICAgID0gSUJfU0lHTkFMX0FMTF9XUjsKIAlpbml0X2F0dHItPnFwX3R5cGUgICAgICAgICAgICAgPSBJQl9RUFRfUkM7Ci0JaW5pdF9hdHRyLT5zZW5kX2NxICAgICAgICAgICAgID0gdGFyZ2V0LT5jcTsKLQlpbml0X2F0dHItPnJlY3ZfY3EgICAgICAgICAgICAgPSB0YXJnZXQtPmNxOworCWluaXRfYXR0ci0+c2VuZF9jcSAgICAgICAgICAgICA9IHRhcmdldC0+c2VuZF9jcTsKKwlpbml0X2F0dHItPnJlY3ZfY3EgICAgICAgICAgICAgPSB0YXJnZXQtPnJlY3ZfY3E7CiAKIAl0YXJnZXQtPnFwID0gaWJfY3JlYXRlX3FwKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPnBkLCBpbml0X2F0dHIpOwogCWlmIChJU19FUlIodGFyZ2V0LT5xcCkpIHsKIAkJcmV0ID0gUFRSX0VSUih0YXJnZXQtPnFwKTsKLQkJaWJfZGVzdHJveV9jcSh0YXJnZXQtPmNxKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX3NlbmRfY3E7CiAJfQogCiAJcmV0ID0gc3JwX2luaXRfcXAodGFyZ2V0LCB0YXJnZXQtPnFwKTsKLQlpZiAocmV0KSB7Ci0JCWliX2Rlc3Ryb3lfcXAodGFyZ2V0LT5xcCk7Ci0JCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5jcSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycl9xcDsKIAotb3V0OgorCWtmcmVlKGluaXRfYXR0cik7CisJcmV0dXJuIDA7CisKK2Vycl9xcDoKKwlpYl9kZXN0cm95X3FwKHRhcmdldC0+cXApOworCitlcnJfc2VuZF9jcToKKwlpYl9kZXN0cm95X2NxKHRhcmdldC0+c2VuZF9jcSk7CisKK2Vycl9yZWN2X2NxOgorCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5yZWN2X2NxKTsKKworZXJyOgogCWtmcmVlKGluaXRfYXR0cik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3MCw3ICsyODYsOCBAQAogCWludCBpOwogCiAJaWJfZGVzdHJveV9xcCh0YXJnZXQtPnFwKTsKLQlpYl9kZXN0cm95X2NxKHRhcmdldC0+Y3EpOworCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5zZW5kX2NxKTsKKwlpYl9kZXN0cm95X2NxKHRhcmdldC0+cmVjdl9jcSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1JQX1JRX1NJWkU7ICsraSkKIAkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0LT5yeF9yaW5nW2ldKTsKQEAgLTU2OCw3ICs1ODUsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0Jd2hpbGUgKGliX3BvbGxfY3EodGFyZ2V0LT5jcSwgMSwgJndjKSA+IDApCisJd2hpbGUgKGliX3BvbGxfY3EodGFyZ2V0LT5yZWN2X2NxLCAxLCAmd2MpID4gMCkKKwkJOyAvKiBub3RoaW5nICovCisJd2hpbGUgKGliX3BvbGxfY3EodGFyZ2V0LT5zZW5kX2NxLCAxLCAmd2MpID4gMCkKIAkJOyAvKiBub3RoaW5nICovCiAKIAlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwpAQCAtODUxLDcgKzg3MCw3IEBACiAJc3RydWN0IHNycF9pdSAqaXU7CiAJdTggb3Bjb2RlOwogCi0JaXUgPSB0YXJnZXQtPnJ4X3Jpbmdbd2MtPndyX2lkICYgflNSUF9PUF9SRUNWXTsKKwlpdSA9IHRhcmdldC0+cnhfcmluZ1t3Yy0+d3JfaWRdOwogCiAJZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLApAQCAtODk4LDcgKzkxNyw3IEBACiAJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cikKK3N0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cikKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSB0YXJnZXRfcHRyOwogCXN0cnVjdCBpYl93YyB3YzsKQEAgLTkwNywxNyArOTI2LDMxIEBACiAJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CiAJCWlmICh3Yy5zdGF0dXMpIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCi0JCQkJICAgICBQRlggImZhaWxlZCAlcyBzdGF0dXMgJWRcbiIsCi0JCQkJICAgICB3Yy53cl9pZCAmIFNSUF9PUF9SRUNWID8gInJlY2VpdmUiIDogInNlbmQiLAorCQkJCSAgICAgUEZYICJmYWlsZWQgcmVjZWl2ZSBzdGF0dXMgJWRcbiIsCiAJCQkJICAgICB3Yy5zdGF0dXMpOwogCQkJdGFyZ2V0LT5xcF9pbl9lcnJvciA9IDE7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmICh3Yy53cl9pZCAmIFNSUF9PUF9SRUNWKQotCQkJc3JwX2hhbmRsZV9yZWN2KHRhcmdldCwgJndjKTsKLQkJZWxzZQotCQkJKyt0YXJnZXQtPnR4X3RhaWw7CisJCXNycF9oYW5kbGVfcmVjdih0YXJnZXQsICZ3Yyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJaWYgKHdjLnN0YXR1cykgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKKwkJCQkgICAgIFBGWCAiZmFpbGVkIHNlbmQgc3RhdHVzICVkXG4iLAorCQkJCSAgICAgd2Muc3RhdHVzKTsKKwkJCXRhcmdldC0+cXBfaW5fZXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkrK3RhcmdldC0+dHhfdGFpbDsKIAl9CiB9CiAKQEAgLTkzMCw3ICs5NjMsNyBAQAogCWludCByZXQ7CiAKIAluZXh0IAkgPSB0YXJnZXQtPnJ4X2hlYWQgJiAoU1JQX1JRX1NJWkUgLSAxKTsKLQl3ci53cl9pZCA9IG5leHQgfCBTUlBfT1BfUkVDVjsKKwl3ci53cl9pZCA9IG5leHQ7CiAJaXUgCSA9IHRhcmdldC0+cnhfcmluZ1tuZXh0XTsKIAogCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKQEAgLTk3MCw2ICsxMDAzLDggQEAKIHsKIAlzMzIgbWluID0gKHJlcV90eXBlID09IFNSUF9SRVFfVEFTS19NR01UKSA/IDEgOiAyOwogCisJc3JwX3NlbmRfY29tcGxldGlvbih0YXJnZXQtPnNlbmRfY3EsIHRhcmdldCk7CisKIAlpZiAodGFyZ2V0LT50eF9oZWFkIC0gdGFyZ2V0LT50eF90YWlsID49IFNSUF9TUV9TSVpFKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAppbmRleCBlMTg1YjkwLi41YTgwZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaApAQCAtNjAsNyArNjAsNiBAQAogCVNSUF9SUV9TSElGVCAgICAJPSA2LAogCVNSUF9SUV9TSVpFCQk9IDEgPDwgU1JQX1JRX1NISUZULAogCVNSUF9TUV9TSVpFCQk9IFNSUF9SUV9TSVpFIC0gMSwKLQlTUlBfQ1FfU0laRQkJPSBTUlBfU1FfU0laRSArIFNSUF9SUV9TSVpFLAogCiAJU1JQX1RBR19UU0tfTUdNVAk9IDEgPDwgKFNSUF9SUV9TSElGVCArIDEpLAogCkBAIC02OSw4ICs2OCw2IEBACiAJU1JQX0ZNUl9ESVJUWV9TSVpFCT0gU1JQX0ZNUl9QT09MX1NJWkUgLyA0CiB9OwogCi0jZGVmaW5lIFNSUF9PUF9SRUNWCQkoMSA8PCAzMSkKLQogZW51bSBzcnBfdGFyZ2V0X3N0YXRlIHsKIAlTUlBfVEFSR0VUX0xJVkUsCiAJU1JQX1RBUkdFVF9DT05ORUNUSU5HLApAQCAtMTMzLDcgKzEzMCw4IEBACiAJaW50CQkJcGF0aF9xdWVyeV9pZDsKIAogCXN0cnVjdCBpYl9jbV9pZAkgICAgICAgKmNtX2lkOwotCXN0cnVjdCBpYl9jcQkgICAgICAgKmNxOworCXN0cnVjdCBpYl9jcQkgICAgICAgKnJlY3ZfY3E7CisJc3RydWN0IGliX2NxCSAgICAgICAqc2VuZF9jcTsKIAlzdHJ1Y3QgaWJfcXAJICAgICAgICpxcDsKIAogCWludAkJCW1heF90aV9pdV9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMjU4YzYzOS4uOWY5ODE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMjc4LDYgKzI3OCw4IEBACiAJCWdvdG8gZXJyX2ZyZWVfY2xpZW50OwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9jbGllbnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2VtdTEwazEtZ3AuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCmluZGV4IGIwNDkzMGYuLjczOTI5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCkBAIC00Niw3ICs0Niw3IEBACiAJaW50IHNpemU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW11X3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVtdV90YmxbXSA9IHsKIAogCXsgMHgxMTAyLCAweDcwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwgLyogU0IgTGl2ZSBnYW1lcG9ydCAqLwogCXsgMHgxMTAyLCAweDcwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwgLyogQXVkaWd5IGdhbWVwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2ZtODAxLWdwLmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2ZtODAxLWdwLmMKaW5kZXggOGExODEwZi4uMTRkM2YzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9mbTgwMS1ncC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZm04MDEtZ3AuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZm04MDFfZ3BfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmbTgwMV9ncF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9GT1JURU1FRElBLCBQQ0lfREVWSUNFX0lEX0ZNODAxX0dQLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwICB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IGFjMTFiZTAuLjdlMThiY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKQEAgLTExLDYgKzExLDggQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0xOTAsOSArMTkyLDggQEAKIAogCWVycm9yID0gZGV2aWNlX2JpbmRfZHJpdmVyKCZnYW1lcG9ydC0+ZGV2KTsKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImdhbWVwb3J0OiBkZXZpY2VfYmluZF9kcml2ZXIoKSBmYWlsZWQgIgotCQkJImZvciAlcyAoJXMpIGFuZCAlcywgZXJyb3I6ICVkXG4iLAorCQlkZXZfd2FybigmZ2FtZXBvcnQtPmRldiwKKwkJCSAiZGV2aWNlX2JpbmRfZHJpdmVyKCkgZmFpbGVkIGZvciAlcyAoJXMpIGFuZCAlcywgZXJyb3I6ICVkXG4iLAogCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLAogCQkJZHJ2LT5kZXNjcmlwdGlvbiwgZXJyb3IpOwogCQlkcnYtPmRpc2Nvbm5lY3QoZ2FtZXBvcnQpOwpAQCAtMjA5LDkgKzIxMCw5IEBACiAKIAllcnJvciA9IGRldmljZV9hdHRhY2goJmdhbWVwb3J0LT5kZXYpOwogCWlmIChlcnJvciA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJnYW1lcG9ydDogZGV2aWNlX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAotCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7CisJCWRldl93YXJuKCZnYW1lcG9ydC0+ZGV2LAorCQkJICJkZXZpY2VfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCQkgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7CiB9CiAKIApAQCAtMjYyLDE3ICsyNjMsMTQgQEAKIAogCWV2ZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdhbWVwb3J0X2V2ZW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFldmVudCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJnYW1lcG9ydDogTm90IGVub3VnaCBtZW1vcnkgdG8gcXVldWUgZXZlbnQgJWRcbiIsCi0JCQlldmVudF90eXBlKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJnYW1lcG9ydDogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAotCQkJZXZlbnRfdHlwZSk7CisJCXByX3dhcm5pbmcoIkNhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKKwkJCSAgIGV2ZW50X3R5cGUpOwogCQlrZnJlZShldmVudCk7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMjk4LDE0ICsyOTYsMTIgQEAKIAogc3RhdGljIHZvaWQgZ2FtZXBvcnRfcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKLQlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmU7CisJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICplLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCkgewotCQllID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQsIG5vZGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCwgbm9kZSkgewogCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKQEAgLTMxNSw3ICszMTEsNyBAQAogCQkJaWYgKGV2ZW50LT50eXBlICE9IGUtPnR5cGUpCiAJCQkJYnJlYWs7CiAKLQkJCWxpc3RfZGVsX2luaXQobm9kZSk7CisJCQlsaXN0X2RlbF9pbml0KCZlLT5ub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZSk7CiAJCX0KIAl9CkBAIC0zMjUsMjMgKzMyMSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpnYW1lcG9ydF9nZXRfZXZlbnQodm9pZCkKIHsKLQlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlpZiAobGlzdF9lbXB0eSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FtZXBvcnRfZXZlbnRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCwKKwkJCQkJIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAl9CiAKLQlub2RlID0gZ2FtZXBvcnRfZXZlbnRfbGlzdC5uZXh0OwotCWV2ZW50ID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQsIG5vZGUpOwotCWxpc3RfZGVsX2luaXQobm9kZSk7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gZXZlbnQ7CiB9CiAKQEAgLTM2MCwxNiArMzUxLDE0IEBACiAJaWYgKChldmVudCA9IGdhbWVwb3J0X2dldF9ldmVudCgpKSkgewogCiAJCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLQkJCWNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDoKLQkJCQlnYW1lcG9ydF9hZGRfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKIAotCQkJY2FzZSBHQU1FUE9SVF9BVFRBQ0hfRFJJVkVSOgotCQkJCWdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDoKKwkJCWdhbWVwb3J0X2FkZF9wb3J0KGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CiAKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJCWNhc2UgR0FNRVBPUlRfQVRUQUNIX0RSSVZFUjoKKwkJCWdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKIAkJfQogCiAJCWdhbWVwb3J0X3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKGV2ZW50KTsKQEAgLTM4NSwxNiArMzc0LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGdhbWVwb3J0X3JlbW92ZV9wZW5kaW5nX2V2ZW50cyh2b2lkICpvYmplY3QpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7Ci0Jc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50LCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCkgewotCQlldmVudCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGdhbWVwb3J0X2V2ZW50LCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIG5leHQsICZnYW1lcG9ydF9ldmVudF9saXN0LCBub2RlKSB7CiAJCWlmIChldmVudC0+b2JqZWN0ID09IG9iamVjdCkgewotCQkJbGlzdF9kZWxfaW5pdChub2RlKTsKKwkJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZXZlbnQpOwogCQl9CiAJfQpAQCAtNDQxLDcgKzQyOCw2IEBACiAJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKTsKIAl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJnYW1lcG9ydDoga2dhbWVwb3J0ZCBleGl0aW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUzLDYgKzQzOSw3IEBACiBzdGF0aWMgc3NpemVfdCBnYW1lcG9ydF9zaG93X2Rlc2NyaXB0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0ID0gdG9fZ2FtZXBvcnRfcG9ydChkZXYpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGdhbWVwb3J0LT5uYW1lKTsKIH0KIApAQCAtNTIxLDcgKzUwOCw4IEBACiAKIAltdXRleF9pbml0KCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZ2FtZXBvcnQtPmRldik7Ci0JZGV2X3NldF9uYW1lKCZnYW1lcG9ydC0+ZGV2LCAiZ2FtZXBvcnQlbHUiLCAodW5zaWduZWQgbG9uZylhdG9taWNfaW5jX3JldHVybigmZ2FtZXBvcnRfbm8pIC0gMSk7CisJZGV2X3NldF9uYW1lKCZnYW1lcG9ydC0+ZGV2LCAiZ2FtZXBvcnQlbHUiLAorCQkJKHVuc2lnbmVkIGxvbmcpYXRvbWljX2luY19yZXR1cm4oJmdhbWVwb3J0X25vKSAtIDEpOwogCWdhbWVwb3J0LT5kZXYuYnVzID0gJmdhbWVwb3J0X2J1czsKIAlnYW1lcG9ydC0+ZGV2LnJlbGVhc2UgPSBnYW1lcG9ydF9yZWxlYXNlX3BvcnQ7CiAJaWYgKGdhbWVwb3J0LT5wYXJlbnQpCkBAIC01NTAsMTkgKzUzOCwxNyBAQAogCWxpc3RfYWRkX3RhaWwoJmdhbWVwb3J0LT5ub2RlLCAmZ2FtZXBvcnRfbGlzdCk7CiAKIAlpZiAoZ2FtZXBvcnQtPmlvKQotCQlwcmludGsoS0VSTl9JTkZPICJnYW1lcG9ydDogJXMgaXMgJXMsIGlvICUjeCwgc3BlZWQgJWRrSHpcbiIsCi0JCQlnYW1lcG9ydC0+bmFtZSwgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5pbywgZ2FtZXBvcnQtPnNwZWVkKTsKKwkJZGV2X2luZm8oJmdhbWVwb3J0LT5kZXYsICIlcyBpcyAlcywgaW8gJSN4LCBzcGVlZCAlZGtIelxuIiwKKwkJCSBnYW1lcG9ydC0+bmFtZSwgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5pbywgZ2FtZXBvcnQtPnNwZWVkKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gImdhbWVwb3J0OiAlcyBpcyAlcywgc3BlZWQgJWRrSHpcbiIsCisJCWRldl9pbmZvKCZnYW1lcG9ydC0+ZGV2LCAiJXMgaXMgJXMsIHNwZWVkICVka0h6XG4iLAogCQkJZ2FtZXBvcnQtPm5hbWUsIGdhbWVwb3J0LT5waHlzLCBnYW1lcG9ydC0+c3BlZWQpOwogCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZnYW1lcG9ydC0+ZGV2KTsKIAlpZiAoZXJyb3IpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJImdhbWVwb3J0OiBkZXZpY2VfYWRkKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCWRldl9lcnIoJmdhbWVwb3J0LT5kZXYsCisJCQkiZGV2aWNlX2FkZCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAogCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7Ci0JZWxzZQotCQlnYW1lcG9ydC0+cmVnaXN0ZXJlZCA9IDE7CiB9CiAKIC8qCkBAIC01ODQsMTAgKzU3MCw4IEBACiAJCWdhbWVwb3J0LT5wYXJlbnQgPSBOVUxMOwogCX0KIAotCWlmIChnYW1lcG9ydC0+cmVnaXN0ZXJlZCkgeworCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmZ2FtZXBvcnQtPmRldikpCiAJCWRldmljZV9kZWwoJmdhbWVwb3J0LT5kZXYpOwotCQlnYW1lcG9ydC0+cmVnaXN0ZXJlZCA9IDA7Ci0JfQogCiAJbGlzdF9kZWxfaW5pdCgmZ2FtZXBvcnQtPm5vZGUpOwogCkBAIC03MDUsOCArNjg5LDcgQEAKIAogCWVycm9yID0gZHJpdmVyX2F0dGFjaCgmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiZ2FtZXBvcnQ6IGRyaXZlcl9hdHRhY2goKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCXByX2VycigiZHJpdmVyX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKIAkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKIH0KIApAQCAtNzI3LDggKzcxMCw3IEBACiAKIAllcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJnYW1lcG9ydDogZHJpdmVyX3JlZ2lzdGVyKCkgZmFpbGVkIGZvciAlcywgZXJyb3I6ICVkXG4iLAorCQlwcl9lcnIoImRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKIAkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTgyOCw3ICs4MTAsNyBAQAogCiAJZXJyb3IgPSBidXNfcmVnaXN0ZXIoJmdhbWVwb3J0X2J1cyk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IGZhaWxlZCB0byByZWdpc3RlciBnYW1lcG9ydCBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBnYW1lcG9ydCBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC04MzYsNyArODE4LDcgQEAKIAlpZiAoSVNfRVJSKGdhbWVwb3J0X3Rhc2spKSB7CiAJCWJ1c191bnJlZ2lzdGVyKCZnYW1lcG9ydF9idXMpOwogCQllcnJvciA9IFBUUl9FUlIoZ2FtZXBvcnRfdGFzayk7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IEZhaWxlZCB0byBzdGFydCBrZ2FtZXBvcnRkLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQga2dhbWVwb3J0ZCwgZXJyb3I6ICVkXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwppbmRleCBkYjU1NmI3MS4uN2MyMTc4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BOUAogCi1zdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgcG5wX2Rldmlkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHBucF9kZXZpZHNbXSA9IHsKIAl7IC5pZCA9ICJAUEAwMDAxIiwgLmRyaXZlcl9kYXRhID0gMCB9LCAvKiBBTFMgMTAwICovCiAJeyAuaWQgPSAiQFBAMDAyMCIsIC5kcml2ZXJfZGF0YSA9IDAgfSwgLyogQUxTIDIwMCAqLwogCXsgLmlkID0gIkBQQDEwMDEiLCAuZHJpdmVyX2RhdGEgPSAwIH0sIC8qIEFMUyAxMDArICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LWNvbXBhdC5oIGIvZHJpdmVycy9pbnB1dC9pbnB1dC1jb21wYXQuaAppbmRleCA0N2NkOWVhLi40ZDhlYTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LWNvbXBhdC5oCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtY29tcGF0LmgKQEAgLTIxLDggKzIxLDYgQEAKICAgIHlvdSB3aHkgdGhlIGlmZGVmcyBhcmUgbmVlZGVkPyBUaGluayBhYm91dCBpdCBhZ2Fpbi4gLUFLICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogIyAgZGVmaW5lIElOUFVUX0NPTVBBVF9URVNUIGlzX2NvbXBhdF90YXNrKCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjQpCi0jICBkZWZpbmUgSU5QVVRfQ09NUEFUX1RFU1QgSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyhjdXJyZW50KSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1MzOTApCiAjICBkZWZpbmUgSU5QVVRfQ09NUEFUX1RFU1QgdGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDg2Y2IyZDIuLjQxMTY4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTg3LDEyICs4NywxNCBAQAogfQogCiAvKgotICogUGFzcyBldmVudCB0aHJvdWdoIGFsbCBvcGVuIGhhbmRsZXMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKKyAqIFBhc3MgZXZlbnQgZmlyc3QgdGhyb3VnaCBhbGwgZmlsdGVycyBhbmQgdGhlbiwgaWYgZXZlbnQgaGFzIG5vdCBiZWVuCisgKiBmaWx0ZXJlZCBvdXQsIHRocm91Z2ggYWxsIG9wZW4gaGFuZGxlcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAogICogZGV2LT5ldmVudF9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGlucHV0X3Bhc3NfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlcjsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGU7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0xMDAsMTEgKzEwMiwyNSBAQAogCWhhbmRsZSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmdyYWIpOwogCWlmIChoYW5kbGUpCiAJCWhhbmRsZS0+aGFuZGxlci0+ZXZlbnQoaGFuZGxlLCB0eXBlLCBjb2RlLCB2YWx1ZSk7Ci0JZWxzZQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYW5kbGUsICZkZXYtPmhfbGlzdCwgZF9ub2RlKQotCQkJaWYgKGhhbmRsZS0+b3BlbikKLQkJCQloYW5kbGUtPmhhbmRsZXItPmV2ZW50KGhhbmRsZSwKLQkJCQkJCQl0eXBlLCBjb2RlLCB2YWx1ZSk7CisJZWxzZSB7CisJCWJvb2wgZmlsdGVyZWQgPSBmYWxzZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYW5kbGUsICZkZXYtPmhfbGlzdCwgZF9ub2RlKSB7CisJCQlpZiAoIWhhbmRsZS0+b3BlbikKKwkJCQljb250aW51ZTsKKworCQkJaGFuZGxlciA9IGhhbmRsZS0+aGFuZGxlcjsKKwkJCWlmICghaGFuZGxlci0+ZmlsdGVyKSB7CisJCQkJaWYgKGZpbHRlcmVkKQorCQkJCQlicmVhazsKKworCQkJCWhhbmRsZXItPmV2ZW50KGhhbmRsZSwgdHlwZSwgY29kZSwgdmFsdWUpOworCisJCQl9IGVsc2UgaWYgKGhhbmRsZXItPmZpbHRlcihoYW5kbGUsIHR5cGUsIGNvZGUsIHZhbHVlKSkKKwkJCQlmaWx0ZXJlZCA9IHRydWU7CisJCX0KKwl9CisKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtNjE1LDEyICs2MzEsMTIgQEAKIAkJfQogCX0KIAotCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCV9fY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CisJX19zZXRfYml0KGtleWNvZGUsIGRldi0+a2V5Yml0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmtleWNvZGVtYXg7IGkrKykgewogCQlpZiAoaW5wdXRfZmV0Y2hfa2V5Y29kZShkZXYsIGkpID09IG9sZF9rZXljb2RlKSB7Ci0JCQlzZXRfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCQlfX3NldF9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKIAkJCWJyZWFrOyAvKiBTZXR0aW5nIHRoZSBiaXQgdHdpY2UgaXMgdXNlbGVzcywgc28gYnJlYWsgKi8KIAkJfQogCX0KQEAgLTY3OCw2ICs2OTQsOSBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCisJLyogTWFrZSBzdXJlIEtFWV9SRVNFUlZFRCBkaWQgbm90IGdldCBlbmFibGVkLiAqLworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgZGV2LT5rZXliaXQpOworCiAJLyoKIAkgKiBTaW11bGF0ZSBrZXl1cCBldmVudCBpZiBrZXljb2RlIGlzIG5vdCBwcmVzZW50CiAJICogaW4gdGhlIGtleW1hcCBhbnltb3JlCkBAIC03MDUsMTIgKzcyNCwxMyBAQAogCQlpZiAoaSAhPSBCSVRTX1RPX0xPTkdTKG1heCkpIFwKIAkJCWNvbnRpbnVlOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaW5wdXRfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlucHV0X21hdGNoX2RldmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkJCQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CisJY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWQ7CiAJaW50IGk7CiAKLQlmb3IgKDsgaWQtPmZsYWdzIHx8IGlkLT5kcml2ZXJfaW5mbzsgaWQrKykgeworCWZvciAoaWQgPSBoYW5kbGVyLT5pZF90YWJsZTsgaWQtPmZsYWdzIHx8IGlkLT5kcml2ZXJfaW5mbzsgaWQrKykgewogCiAJCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTKQogCQkJaWYgKGlkLT5idXN0eXBlICE9IGRldi0+aWQuYnVzdHlwZSkKQEAgLTczOCw3ICs3NTgsOCBAQAogCQlNQVRDSF9CSVQoZmZiaXQsICBGRl9NQVgpOwogCQlNQVRDSF9CSVQoc3diaXQsICBTV19NQVgpOwogCi0JCXJldHVybiBpZDsKKwkJaWYgKCFoYW5kbGVyLT5tYXRjaCB8fCBoYW5kbGVyLT5tYXRjaChoYW5kbGVyLCBkZXYpKQorCQkJcmV0dXJuIGlkOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtNzQ5LDEwICs3NzAsNyBAQAogCWNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkOwogCWludCBlcnJvcjsKIAotCWlmIChoYW5kbGVyLT5ibGFja2xpc3QgJiYgaW5wdXRfbWF0Y2hfZGV2aWNlKGhhbmRsZXItPmJsYWNrbGlzdCwgZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZCA9IGlucHV0X21hdGNoX2RldmljZShoYW5kbGVyLT5pZF90YWJsZSwgZGV2KTsKKwlpZCA9IGlucHV0X21hdGNoX2RldmljZShoYW5kbGVyLCBkZXYpOwogCWlmICghaWQpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC05ODgsNiArMTAwNiw4IEBACiAJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOwogCiAJc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JXUgTmFtZT0lcyIsIHN0YXRlLT5wb3MsIGhhbmRsZXItPm5hbWUpOworCWlmIChoYW5kbGVyLT5maWx0ZXIpCisJCXNlcV9wdXRzKHNlcSwgIiAoZmlsdGVyKSIpOwogCWlmIChoYW5kbGVyLT5mb3BzKQogCQlzZXFfcHJpbnRmKHNlcSwgIiBNaW5vcj0lZCIsIGhhbmRsZXItPm1pbm9yKTsKIAlzZXFfcHV0YyhzZXEsICdcbicpOwpAQCAtMTU1MSw2ICsxNTcxLDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlucHV0X3NldF9jYXBhYmlsaXR5KTsKIAorI2RlZmluZSBJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCB0eXBlLCBiaXRzKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQkJXAorCQkJbWVtc2V0KGRldi0+Yml0cyMjYml0LCAwLAkJCVwKKwkJCQlzaXplb2YoZGV2LT5iaXRzIyNiaXQpKTsJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBpbnB1dF9jbGVhbnNlX2JpdG1hc2tzKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBLRVksIGtleSk7CisJSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgUkVMLCByZWwpOworCUlOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIEFCUywgYWJzKTsKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBNU0MsIG1zYyk7CisJSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgTEVELCBsZWQpOworCUlOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIFNORCwgc25kKTsKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBGRiwgZmYpOworCUlOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIFNXLCBzdyk7Cit9CisKIC8qKgogICogaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgZGV2aWNlIHdpdGggaW5wdXQgY29yZQogICogQGRldjogZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQKQEAgLTE1NzAsMTMgKzE2MDksMTkgQEAKIAljb25zdCBjaGFyICpwYXRoOwogCWludCBlcnJvcjsKIAorCS8qIEV2ZXJ5IGlucHV0IGRldmljZSBnZW5lcmF0ZXMgRVZfU1lOL1NZTl9SRVBPUlQgZXZlbnRzLiAqLwogCV9fc2V0X2JpdChFVl9TWU4sIGRldi0+ZXZiaXQpOwogCisJLyogS0VZX1JFU0VSVkVEIGlzIG5vdCBzdXBwb3NlZCB0byBiZSB0cmFuc21pdHRlZCB0byB1c2Vyc3BhY2UuICovCisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBkZXYtPmtleWJpdCk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBiaXRtYXNrcyBub3QgbWVudGlvbmVkIGluIGRldi0+ZXZiaXQgYXJlIGNsZWFuLiAqLworCWlucHV0X2NsZWFuc2VfYml0bWFza3MoZGV2KTsKKwogCS8qCiAJICogSWYgZGVsYXkgYW5kIHBlcmlvZCBhcmUgcHJlLXNldCBieSB0aGUgZHJpdmVyLCB0aGVuIGF1dG9yZXBlYXRpbmcKIAkgKiBpcyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmIGFuZCB3ZSBkb24ndCBkbyBpdCBpbiBpbnB1dC5jLgogCSAqLwotCiAJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CiAJaWYgKCFkZXYtPnJlcFtSRVBfREVMQVldICYmICFkZXYtPnJlcFtSRVBfUEVSSU9EXSkgewogCQlkZXYtPnRpbWVyLmRhdGEgPSAobG9uZykgZGV2OwpAQCAtMTc3Niw3ICsxODIxLDE2IEBACiAJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bXV0ZXgpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCWxpc3RfYWRkX3RhaWxfcmN1KCZoYW5kbGUtPmRfbm9kZSwgJmRldi0+aF9saXN0KTsKKworCS8qCisJICogRmlsdGVycyBnbyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgbm9ybWFsIGhhbmRsZXJzCisJICogdG8gdGhlIHRhaWwuCisJICovCisJaWYgKGhhbmRsZXItPmZpbHRlcikKKwkJbGlzdF9hZGRfcmN1KCZoYW5kbGUtPmRfbm9kZSwgJmRldi0+aF9saXN0KTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWxfcmN1KCZoYW5kbGUtPmRfbm9kZSwgJmRldi0+aF9saXN0KTsKKwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggYjFiZDZkZC4uYzUyYmVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0yODYsNiArMjg2LDggQEAKIAkJZ290byBlcnJfZnJlZV9jbGllbnQ7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBjbGllbnQ7CisJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CisKIAlyZXR1cm4gMDsKIAogIGVycl9mcmVlX2NsaWVudDoKQEAgLTc3NSw2ICs3NzcsMjAgQEAKIAkJaW5wdXRfY2xvc2VfZGV2aWNlKGhhbmRsZSk7CiB9CiAKKworc3RhdGljIGJvb2wgam95ZGV2X21hdGNoKHN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyLCBzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJLyogQXZvaWQgdG91Y2hwYWRzIGFuZCB0b3VjaHNjcmVlbnMgKi8KKwlpZiAodGVzdF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KSAmJiB0ZXN0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQXZvaWQgdGFibGV0cywgZGlnaXRpc2VycyBhbmQgc2ltaWxhciBkZXZpY2VzICovCisJaWYgKHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkgJiYgdGVzdF9iaXQoQlROX0RJR0ksIGRldi0+a2V5Yml0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgam95ZGV2X2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJCSAgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWQpCiB7CkBAIC04OTQsMjIgKzkxMCw2IEBACiAJcHV0X2RldmljZSgmam95ZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCBqb3lkZXZfYmxhY2tsaXN0W10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfAotCQkJCUlOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQsCi0JCS5ldmJpdCA9IHsgQklUX01BU0soRVZfS0VZKSB9LAotCQkua2V5Yml0ID0geyBbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpIH0sCi0JfSwJLyogQXZvaWQgaXRvdWNocGFkcyBhbmQgdG91Y2hzY3JlZW5zICovCi0JewotCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfAotCQkJCUlOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQsCi0JCS5ldmJpdCA9IHsgQklUX01BU0soRVZfS0VZKSB9LAotCQkua2V5Yml0ID0geyBbQklUX1dPUkQoQlROX0RJR0kpXSA9IEJJVF9NQVNLKEJUTl9ESUdJKSB9LAotCX0sCS8qIEF2b2lkIHRhYmxldHMsIGRpZ2l0aXNlcnMgYW5kIHNpbWlsYXIgZGV2aWNlcyAqLwotCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgam95ZGV2X2lkc1tdID0gewogCXsKIAkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKQEAgLTkzNiwxMyArOTM2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfaGFuZGxlciBqb3lkZXZfaGFuZGxlciA9IHsKIAkuZXZlbnQJCT0gam95ZGV2X2V2ZW50LAorCS5tYXRjaAkJPSBqb3lkZXZfbWF0Y2gsCiAJLmNvbm5lY3QJPSBqb3lkZXZfY29ubmVjdCwKIAkuZGlzY29ubmVjdAk9IGpveWRldl9kaXNjb25uZWN0LAogCS5mb3BzCQk9ICZqb3lkZXZfZm9wcywKIAkubWlub3IJCT0gSk9ZREVWX01JTk9SX0JBU0UsCiAJLm5hbWUJCT0gImpveWRldiIsCiAJLmlkX3RhYmxlCT0gam95ZGV2X2lkcywKLQkuYmxhY2tsaXN0CT0gam95ZGV2X2JsYWNrbGlzdCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGpveWRldl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcKaW5kZXggYjExNDE5NTkuLjViNTk2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcKQEAgLTIyMSw2ICsyMjEsNyBAQAogY29uZmlnIEpPWVNUSUNLX0dBTUVDT04KIAl0cmlzdGF0ZSAiTXVsdGlzeXN0ZW0sIE5FUywgU05FUywgTjY0LCBQU1ggam95c3RpY2tzIGFuZCBnYW1lcGFkcyIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBOaW50ZW5kbyBFbnRlcnRhaW5tZW50IFN5c3RlbSBnYW1lcGFkLAogCSAgU3VwZXIgTmludGVuZG8gRW50ZXJ0YWlubWVudCBTeXN0ZW0gZ2FtZXBhZCwgTmludGVuZG8gNjQgZ2FtZXBhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKaW5kZXggMDdhMzJhZi4uYWU5OThkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKQEAgLTMwLDYgKzMwLDggQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02MSw0OCArNjMsNzMgQEAKIAogLyogc2VlIGFsc28gZ3NfcHN4X2RlbGF5IHBhcmFtZXRlciBpbiBQU1ggc3VwcG9ydCBzZWN0aW9uICovCiAKLSNkZWZpbmUgR0NfU05FUwkJMQotI2RlZmluZSBHQ19ORVMJCTIKLSNkZWZpbmUgR0NfTkVTNAkJMwotI2RlZmluZSBHQ19NVUxUSQk0Ci0jZGVmaW5lIEdDX01VTFRJMgk1Ci0jZGVmaW5lIEdDX042NAkJNgotI2RlZmluZSBHQ19QU1gJCTcKLSNkZWZpbmUgR0NfRERSCQk4Ci0jZGVmaW5lIEdDX1NORVNNT1VTRQk5Ci0KLSNkZWZpbmUgR0NfTUFYCQk5CitlbnVtIGdjX3R5cGUgeworCUdDX05PTkUgPSAwLAorCUdDX1NORVMsCisJR0NfTkVTLAorCUdDX05FUzQsCisJR0NfTVVMVEksCisJR0NfTVVMVEkyLAorCUdDX042NCwKKwlHQ19QU1gsCisJR0NfRERSLAorCUdDX1NORVNNT1VTRSwKKwlHQ19NQVgKK307CiAKICNkZWZpbmUgR0NfUkVGUkVTSF9USU1FCUhaLzEwMAogCitzdHJ1Y3QgZ2NfcGFkIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJZW51bSBnY190eXBlIHR5cGU7CisJY2hhciBwaHlzWzMyXTsKK307CisKIHN0cnVjdCBnYyB7CiAJc3RydWN0IHBhcmRldmljZSAqcGQ7CisJc3RydWN0IGdjX3BhZCBwYWRzW0dDX01BWF9ERVZJQ0VTXTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXZbR0NfTUFYX0RFVklDRVNdOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXVuc2lnbmVkIGNoYXIgcGFkc1tHQ19NQVggKyAxXTsKKwlpbnQgcGFkX2NvdW50W0dDX01BWF07CiAJaW50IHVzZWQ7CiAJc3RydWN0IG11dGV4IG11dGV4OwotCWNoYXIgcGh5c1tHQ19NQVhfREVWSUNFU11bMzJdOworfTsKKworc3RydWN0IGdjX3N1YmRldiB7CisJdW5zaWduZWQgaW50IGlkeDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2MgKmdjX2Jhc2VbM107CiAKLXN0YXRpYyBpbnQgZ2Nfc3RhdHVzX2JpdFtdID0geyAweDQwLCAweDgwLCAweDIwLCAweDEwLCAweDA4IH07CitzdGF0aWMgY29uc3QgaW50IGdjX3N0YXR1c19iaXRbXSA9IHsgMHg0MCwgMHg4MCwgMHgyMCwgMHgxMCwgMHgwOCB9OwogCi1zdGF0aWMgY2hhciAqZ2NfbmFtZXNbXSA9IHsgTlVMTCwgIlNORVMgcGFkIiwgIk5FUyBwYWQiLCAiTkVTIEZvdXJQb3J0IiwgIk11bHRpc3lzdGVtIGpveXN0aWNrIiwKLQkJCQkiTXVsdGlzeXN0ZW0gMi1idXR0b24gam95c3RpY2siLCAiTjY0IGNvbnRyb2xsZXIiLCAiUFNYIGNvbnRyb2xsZXIiLAotCQkJCSJQU1ggRERSIGNvbnRyb2xsZXIiLCAiU05FUyBtb3VzZSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpnY19uYW1lc1tdID0geworCU5VTEwsICJTTkVTIHBhZCIsICJORVMgcGFkIiwgIk5FUyBGb3VyUG9ydCIsICJNdWx0aXN5c3RlbSBqb3lzdGljayIsCisJIk11bHRpc3lzdGVtIDItYnV0dG9uIGpveXN0aWNrIiwgIk42NCBjb250cm9sbGVyIiwgIlBTWCBjb250cm9sbGVyIiwKKwkiUFNYIEREUiBjb250cm9sbGVyIiwgIlNORVMgbW91c2UiCit9OworCiAvKgogICogTjY0IHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2NfbjY0X2J5dGVzW10gPSB7IDAsIDEsIDEzLCAxNSwgMTQsIDEyLCAxMCwgMTEsIDIsIDMgfTsKLXN0YXRpYyBzaG9ydCBnY19uNjRfYnRuW10gPSB7IEJUTl9BLCBCVE5fQiwgQlROX0MsIEJUTl9YLCBCVE5fWSwgQlROX1osIEJUTl9UTCwgQlROX1RSLCBCVE5fVFJJR0dFUiwgQlROX1NUQVJUIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY19uNjRfYnl0ZXNbXSA9IHsgMCwgMSwgMTMsIDE1LCAxNCwgMTIsIDEwLCAxMSwgMiwgMyB9Oworc3RhdGljIGNvbnN0IHNob3J0IGdjX242NF9idG5bXSA9IHsKKwlCVE5fQSwgQlROX0IsIEJUTl9DLCBCVE5fWCwgQlROX1ksIEJUTl9aLAorCUJUTl9UTCwgQlROX1RSLCBCVE5fVFJJR0dFUiwgQlROX1NUQVJUCit9OwogCiAjZGVmaW5lIEdDX042NF9MRU5HVEgJCTMyCQkvKiBONjQgYml0IGxlbmd0aCwgbm90IGluY2x1ZGluZyBzdG9wIGJpdCAqLwotI2RlZmluZSBHQ19ONjRfUkVRVUVTVF9MRU5HVEgJMzcJCS8qIHRyYW5zbWl0IHJlcXVlc3Qgc2VxdWVuY2UgaXMgOSBiaXRzIGxvbmcgKi8KKyNkZWZpbmUgR0NfTjY0X1NUT1BfTEVOR1RICTUJCS8qIExlbmd0aCBvZiBlbmNvZGVkIHN0b3AgYml0ICovCisjZGVmaW5lIEdDX042NF9DTURfMDAJCTB4MTExMTExMTFVTAorI2RlZmluZSBHQ19ONjRfQ01EXzAxCQkweGQxMTExMTExVUwKKyNkZWZpbmUgR0NfTjY0X0NNRF8wMwkJMHhkZDExMTExMVVMCisjZGVmaW5lIEdDX042NF9DTURfMWIJCTB4ZGQxZGQxMTFVTAorI2RlZmluZSBHQ19ONjRfQ01EX2MwCQkweDExMTExMWRkVUwKKyNkZWZpbmUgR0NfTjY0X0NNRF84MAkJMHgxMTExMTExZFVMCisjZGVmaW5lIEdDX042NF9TVE9QX0JJVAkJMHgxZAkJLyogRW5jb2RlZCBzdG9wIGJpdCAqLworI2RlZmluZSBHQ19ONjRfUkVRVUVTVF9EQVRBCUdDX042NF9DTURfMDEJLyogdGhlIHJlcXVlc3QgZGF0YSBjb21tYW5kICovCiAjZGVmaW5lIEdDX042NF9ERUxBWQkJMTMzCQkvKiBkZWxheSBiZXR3ZWVuIHRyYW5zbWl0IHJlcXVlc3QsIGFuZCByZXNwb25zZSByZWFkeSAodXMpICovCi0jZGVmaW5lIEdDX042NF9SRVFVRVNUCQkweDFkZDExMTExMTFVTEwgLyogdGhlIHJlcXVlc3QgZGF0YSBjb21tYW5kIChlbmNvZGVkIGZvciAwMDAwMDAwMTEpICovCiAjZGVmaW5lIEdDX042NF9EV1MJCTMJCS8qIGRlbGF5IGJldHdlZW4gd3JpdGUgc2VnbWVudHMgKHJlcXVpcmVkIGZvciBzb3VuZCBwbGF5YmFjayBiZWNhdXNlIG9mIElTQSBETUEpICovCiAJCQkJCQkvKiBHQ19ONjRfRFdTID4gMjQgaXMga25vd24gdG8gZmFpbCAqLwogI2RlZmluZSBHQ19ONjRfUE9XRVJfVwkJMHhlMgkJLyogcG93ZXIgZHVyaW5nIHdyaXRlICh0cmFuc21pdCByZXF1ZXN0KSAqLwpAQCAtMTE0LDggKzE0MSw0MCBAQAogI2RlZmluZSBHQ19ONjRfQ0xPQ0sJCTB4MDIJCS8qIGNsb2NrIGJpdHMgZm9yIHJlYWQgKi8KIAogLyoKKyAqIFVzZWQgZm9yIHJ1bWJsZSBjb2RlLgorICovCisKKy8qIFNlbmQgZW5jb2RlZCBjb21tYW5kICovCitzdGF0aWMgdm9pZCBnY19uNjRfc2VuZF9jb21tYW5kKHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGxvbmcgY21kLAorCQkJCXVuc2lnbmVkIGNoYXIgdGFyZ2V0KQoreworCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gZ2MtPnBkLT5wb3J0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdDX042NF9MRU5HVEg7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAoY21kID4+IGkpICYgMSA/IHRhcmdldCA6IDA7CisJCXBhcnBvcnRfd3JpdGVfZGF0YShwb3J0LCBHQ19ONjRfUE9XRVJfVyB8IGRhdGEpOworCQl1ZGVsYXkoR0NfTjY0X0RXUyk7CisJfQorfQorCisvKiBTZW5kIHN0b3AgYml0ICovCitzdGF0aWMgdm9pZCBnY19uNjRfc2VuZF9zdG9wX2JpdChzdHJ1Y3QgZ2MgKmdjLCB1bnNpZ25lZCBjaGFyIHRhcmdldCkKK3sKKwlzdHJ1Y3QgcGFycG9ydCAqcG9ydCA9IGdjLT5wZC0+cG9ydDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHQ19ONjRfU1RPUF9MRU5HVEg7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAoR0NfTjY0X1NUT1BfQklUID4+IGkpICYgMSA/IHRhcmdldCA6IDA7CisJCXBhcnBvcnRfd3JpdGVfZGF0YShwb3J0LCBHQ19ONjRfUE9XRVJfVyB8IGRhdGEpOworCQl1ZGVsYXkoR0NfTjY0X0RXUyk7CisJfQorfQorCisvKgogICogZ2NfbjY0X3JlYWRfcGFja2V0KCkgcmVhZHMgYW4gTjY0IHBhY2tldC4KLSAqIEVhY2ggcGFkIHVzZXMgb25lIGJpdCBwZXIgYnl0ZS4gU28gYWxsIHBhZHMgY29ubmVjdGVkIHRvIHRoaXMgcG9ydCBhcmUgcmVhZCBpbiBwYXJhbGxlbC4KKyAqIEVhY2ggcGFkIHVzZXMgb25lIGJpdCBwZXIgYnl0ZS4gU28gYWxsIHBhZHMgY29ubmVjdGVkIHRvIHRoaXMgcG9ydAorICogYXJlIHJlYWQgaW4gcGFyYWxsZWwuCiAgKi8KIAogc3RhdGljIHZvaWQgZ2NfbjY0X3JlYWRfcGFja2V0KHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCkBAIC0xMjgsMTQgKzE4NywxMyBAQAogICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IEdDX042NF9SRVFVRVNUX0xFTkdUSDsgaSsrKSB7Ci0JCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX042NF9QT1dFUl9XIHwgKChHQ19ONjRfUkVRVUVTVCA+PiBpKSAmIDEgPyBHQ19ONjRfT1VUIDogMCkpOwotCQl1ZGVsYXkoR0NfTjY0X0RXUyk7Ci0JfQorCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9SRVFVRVNUX0RBVEEsIEdDX042NF9PVVQpOworCWdjX242NF9zZW5kX3N0b3BfYml0KGdjLCBHQ19ONjRfT1VUKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIC8qCi0gKiBXYWl0IGZvciB0aGUgcGFkIHJlc3BvbnNlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSAzMy1iaXQgcmVnaXN0ZXIgb2YgdGhlIGFkYXB0ZXIKKyAqIFdhaXQgZm9yIHRoZSBwYWQgcmVzcG9uc2UgdG8gYmUgbG9hZGVkIGludG8gdGhlIDMzLWJpdCByZWdpc3RlcgorICogb2YgdGhlIGFkYXB0ZXIuCiAgKi8KIAogCXVkZWxheShHQ19ONjRfREVMQVkpOwpAQCAtMTQ2LDEzICsyMDQsMTUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19ONjRfTEVOR1RIOyBpKyspIHsKIAkJcGFycG9ydF93cml0ZV9kYXRhKGdjLT5wZC0+cG9ydCwgR0NfTjY0X1BPV0VSX1IpOworCQl1ZGVsYXkoMik7CiAJCWRhdGFbaV0gPSBwYXJwb3J0X3JlYWRfc3RhdHVzKGdjLT5wZC0+cG9ydCk7CiAJCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX042NF9QT1dFUl9SIHwgR0NfTjY0X0NMT0NLKTsKIAkgfQogCiAvKgotICogV2UgbXVzdCB3YWl0IDIwMCBtcyBoZXJlIGZvciB0aGUgY29udHJvbGxlciB0byByZWluaXRpYWxpemUgYmVmb3JlIHRoZSBuZXh0IHJlYWQgcmVxdWVzdC4KLSAqIE5vIHdvcnJpZXMgYXMgbG9uZyBhcyBnY19yZWFkIGlzIHBvbGxlZCBsZXNzIGZyZXF1ZW50bHkgdGhhbiB0aGlzLgorICogV2UgbXVzdCB3YWl0IDIwMCBtcyBoZXJlIGZvciB0aGUgY29udHJvbGxlciB0byByZWluaXRpYWxpemUgYmVmb3JlCisgKiB0aGUgbmV4dCByZWFkIHJlcXVlc3QuIE5vIHdvcnJpZXMgYXMgbG9uZyBhcyBnY19yZWFkIGlzIHBvbGxlZCBsZXNzCisgKiBmcmVxdWVudGx5IHRoYW4gdGhpcy4KICAqLwogCiB9CkBAIC0xNjAsNDUgKzIyMCwxMTIgQEAKIHN0YXRpYyB2b2lkIGdjX242NF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgZ2MgKmdjKQogewogCXVuc2lnbmVkIGNoYXIgZGF0YVtHQ19ONjRfTEVOR1RIXTsKLQlzaWduZWQgY2hhciBheGVzWzJdOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlpbnQgaSwgaiwgczsKKwlzaWduZWQgY2hhciB4LCB5OwogCiAJZ2NfbjY0X3JlYWRfcGFja2V0KGdjLCBkYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CiAKLQkJZGV2ID0gZ2MtPmRldltpXTsKLQkJaWYgKCFkZXYpCisJCWlmIChnYy0+cGFkc1tpXS50eXBlICE9IEdDX042NCkKIAkJCWNvbnRpbnVlOwogCisJCWRldiA9IGdjLT5wYWRzW2ldLmRldjsKIAkJcyA9IGdjX3N0YXR1c19iaXRbaV07CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19ONjRdICYgfihkYXRhWzhdIHwgZGF0YVs5XSkpIHsKKwkJaWYgKHMgJiB+KGRhdGFbOF0gfCBkYXRhWzldKSkgewogCi0JCQlheGVzWzBdID0gYXhlc1sxXSA9IDA7CisJCQl4ID0geSA9IDA7CiAKIAkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKIAkJCQlpZiAoZGF0YVsyMyAtIGpdICYgcykKLQkJCQkJYXhlc1swXSB8PSAxIDw8IGo7CisJCQkJCXggfD0gMSA8PCBqOwogCQkJCWlmIChkYXRhWzMxIC0gal0gJiBzKQotCQkJCQlheGVzWzFdIHw9IDEgPDwgajsKKwkJCQkJeSB8PSAxIDw8IGo7CiAJCQl9CiAKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgIGF4ZXNbMF0pOwotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAtYXhlc1sxXSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICB4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgLXkpOwogCi0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLCAhKHMgJiBkYXRhWzZdKSAtICEocyAmIGRhdGFbN10pKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFksICEocyAmIGRhdGFbNF0pIC0gIShzICYgZGF0YVs1XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKKwkJCQkJICEocyAmIGRhdGFbNl0pIC0gIShzICYgZGF0YVs3XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKKwkJCQkJICEocyAmIGRhdGFbNF0pIC0gIShzICYgZGF0YVs1XSkpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfbjY0X2J0bltqXSwgcyAmIGRhdGFbZ2NfbjY0X2J5dGVzW2pdXSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX242NF9idG5bal0sCisJCQkJCQkgcyAmIGRhdGFbZ2NfbjY0X2J5dGVzW2pdXSk7CiAKIAkJCWlucHV0X3N5bmMoZGV2KTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGludCBnY19uNjRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdjICpnYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGdjX3N1YmRldiAqc2RldiA9IGRhdGE7CisJdW5zaWduZWQgY2hhciB0YXJnZXQgPSAxIDw8IHNkZXYtPmlkeDsgLyogc2VsZWN0IGRlc2lyZWQgcGluICovCisKKwlpZiAoZWZmZWN0LT50eXBlID09IEZGX1JVTUJMRSkgeworCQlzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCAqcnVtYmxlID0gJmVmZmVjdC0+dS5ydW1ibGU7CisJCXVuc2lnbmVkIGludCBjbWQgPQorCQkJcnVtYmxlLT5zdHJvbmdfbWFnbml0dWRlIHx8IHJ1bWJsZS0+d2Vha19tYWduaXR1ZGUgPworCQkJR0NfTjY0X0NNRF8wMSA6IEdDX042NF9DTURfMDA7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCS8qIEluaXQgUnVtYmxlIC0gMHgwMywgMHg4MCwgMHgwMSwgKDM0KTB4ODAgKi8KKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF8wMywgdGFyZ2V0KTsKKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF84MCwgdGFyZ2V0KTsKKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF8wMSwgdGFyZ2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlnY19uNjRfc2VuZF9jb21tYW5kKGdjLCBHQ19ONjRfQ01EXzgwLCB0YXJnZXQpOworCQlnY19uNjRfc2VuZF9zdG9wX2JpdChnYywgdGFyZ2V0KTsKKworCQl1ZGVsYXkoR0NfTjY0X0RFTEFZKTsKKworCQkvKiBOb3cgc3RhcnQgb3Igc3RvcCBpdCAtIDB4MDMsIDB4YzAsIDB6eDFiLCAoMzIpMHgwMS8weDAwICovCisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfMDMsIHRhcmdldCk7CisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfYzAsIHRhcmdldCk7CisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfMWIsIHRhcmdldCk7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgY21kLCB0YXJnZXQpOworCQlnY19uNjRfc2VuZF9zdG9wX2JpdChnYywgdGFyZ2V0KTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZ2NfbjY0X2luaXRfZmYoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZ2Nfc3ViZGV2ICpzZGV2OworCWludCBlcnI7CisKKwlzZGV2ID0ga21hbGxvYyhzaXplb2YoKnNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2Rldi0+aWR4ID0gaTsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGRldiwgRVZfRkYsIEZGX1JVTUJMRSk7CisKKwllcnIgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHNkZXYsIGdjX242NF9wbGF5X2VmZmVjdCk7CisJaWYgKGVycikgeworCQlrZnJlZShzZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5FUy9TTkVTIHN1cHBvcnQuCiAgKi8KQEAgLTIxNCw5ICszNDEsMTEgQEAKICNkZWZpbmUgR0NfTkVTX0NMT0NLCTB4MDEKICNkZWZpbmUgR0NfTkVTX0xBVENICTB4MDIKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2NfbmVzX2J5dGVzW10gPSB7IDAsIDEsIDIsIDMgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdjX3NuZXNfYnl0ZXNbXSA9IHsgOCwgMCwgMiwgMywgOSwgMSwgMTAsIDExIH07Ci1zdGF0aWMgc2hvcnQgZ2Nfc25lc19idG5bXSA9IHsgQlROX0EsIEJUTl9CLCBCVE5fU0VMRUNULCBCVE5fU1RBUlQsIEJUTl9YLCBCVE5fWSwgQlROX1RMLCBCVE5fVFIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjX25lc19ieXRlc1tdID0geyAwLCAxLCAyLCAzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY19zbmVzX2J5dGVzW10gPSB7IDgsIDAsIDIsIDMsIDksIDEsIDEwLCAxMSB9Oworc3RhdGljIGNvbnN0IHNob3J0IGdjX3NuZXNfYnRuW10gPSB7CisJQlROX0EsIEJUTl9CLCBCVE5fU0VMRUNULCBCVE5fU1RBUlQsIEJUTl9YLCBCVE5fWSwgQlROX1RMLCBCVE5fVFIKK307CiAKIC8qCiAgKiBnY19uZXNfcmVhZF9wYWNrZXQoKSByZWFkcyBhIE5FUy9TTkVTIHBhY2tldC4KQEAgLTI0NCw0MCArMzczLDUxIEBACiBzdGF0aWMgdm9pZCBnY19uZXNfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfU05FU01PVVNFX0xFTkdUSF07CisJc3RydWN0IGdjX3BhZCAqcGFkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlpbnQgaSwgaiwgcywgbGVuOwogCWNoYXIgeF9yZWwsIHlfcmVsOwogCi0JbGVuID0gZ2MtPnBhZHNbR0NfU05FU01PVVNFXSA/IEdDX1NORVNNT1VTRV9MRU5HVEggOgotCQkJKGdjLT5wYWRzW0dDX1NORVNdID8gR0NfU05FU19MRU5HVEggOiBHQ19ORVNfTEVOR1RIKTsKKwlsZW4gPSBnYy0+cGFkX2NvdW50W0dDX1NORVNNT1VTRV0gPyBHQ19TTkVTTU9VU0VfTEVOR1RIIDoKKwkJCShnYy0+cGFkX2NvdW50W0dDX1NORVNdID8gR0NfU05FU19MRU5HVEggOiBHQ19ORVNfTEVOR1RIKTsKIAogCWdjX25lc19yZWFkX3BhY2tldChnYywgbGVuLCBkYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CiAKKwkJcGFkID0gJmdjLT5wYWRzW2ldOwogCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCiAJCXMgPSBnY19zdGF0dXNfYml0W2ldOwogCi0JCWlmIChzICYgKGdjLT5wYWRzW0dDX05FU10gfCBnYy0+cGFkc1tHQ19TTkVTXSkpIHsKKwkJc3dpdGNoIChwYWQtPnR5cGUpIHsKKworCQljYXNlIEdDX05FUzoKKwogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAhKHMgJiBkYXRhWzZdKSAtICEocyAmIGRhdGFbN10pKTsKIAkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgIShzICYgZGF0YVs0XSkgLSAhKHMgJiBkYXRhWzVdKSk7Ci0JCX0KIAotCQlpZiAocyAmIGdjLT5wYWRzW0dDX05FU10pCiAJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19zbmVzX2J0bltqXSwgcyAmIGRhdGFbZ2NfbmVzX2J5dGVzW2pdXSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3NuZXNfYnRuW2pdLAorCQkJCQkJIHMgJiBkYXRhW2djX25lc19ieXRlc1tqXV0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19TTkVTXSkKKwkJY2FzZSBHQ19TTkVTOgorCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICEocyAmIGRhdGFbNl0pIC0gIShzICYgZGF0YVs3XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAhKHMgJiBkYXRhWzRdKSAtICEocyAmIGRhdGFbNV0pKTsKKwogCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2Nfc25lc19idG5bal0sIHMgJiBkYXRhW2djX3NuZXNfYnl0ZXNbal1dKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2Nfc25lc19idG5bal0sCisJCQkJCQkgcyAmIGRhdGFbZ2Nfc25lc19ieXRlc1tqXV0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdKSB7CisJCWNhc2UgR0NfU05FU01PVVNFOgogCQkJLyoKLQkJCSAqIFRoZSA0IHVudXNlZCBiaXRzIGZyb20gU05FUyBjb250cm9sbGVycyBhcHBlYXIgdG8gYmUgSUQgYml0cwotCQkJICogc28gdXNlIHRoZW0gdG8gbWFrZSBzdXJlIGl3ZSBhcmUgZGVhbGluZyB3aXRoIGEgbW91c2UuCisJCQkgKiBUaGUgNCB1bnVzZWQgYml0cyBmcm9tIFNORVMgY29udHJvbGxlcnMgYXBwZWFyCisJCQkgKiB0byBiZSBJRCBiaXRzIHNvIHVzZSB0aGVtIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKKwkJCSAqIGRlYWxpbmcgd2l0aCBhIG1vdXNlLgogCQkJICogZ2FtZXBhZCBpcyBjb25uZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlCiAJCQkgKiBteSBTTkVTIGdhbWVwYWQgc2VuZHMgMSdzIGZvciBiaXRzIDE2LTMxLCB3aGljaAogCQkJICogY2F1c2UgdGhlIG1vdXNlIHBvaW50ZXIgdG8gcXVpY2tseSBtb3ZlIHRvIHRoZQpAQCAtMzEwLDkgKzQ1MCwxNCBAQAogCQkJCQkJeV9yZWwgPSAteV9yZWw7CiAJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgeV9yZWwpOwogCQkJCX0KKworCQkJCWlucHV0X3N5bmMoZGV2KTsKIAkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQotCQlpbnB1dF9zeW5jKGRldik7CiAJfQogfQogCkBAIC0zNDAsMjkgKzQ4NSwzNSBAQAogc3RhdGljIHZvaWQgZ2NfbXVsdGlfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTVVMVEkyX0xFTkdUSF07CisJaW50IGRhdGFfbGVuID0gZ2MtPnBhZF9jb3VudFtHQ19NVUxUSTJdID8gR0NfTVVMVEkyX0xFTkdUSCA6IEdDX01VTFRJX0xFTkdUSDsKKwlzdHJ1Y3QgZ2NfcGFkICpwYWQ7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCWludCBpLCBzOwogCi0JZ2NfbXVsdGlfcmVhZF9wYWNrZXQoZ2MsIGdjLT5wYWRzW0dDX01VTFRJMl0gPyBHQ19NVUxUSTJfTEVOR1RIIDogR0NfTVVMVElfTEVOR1RILCBkYXRhKTsKKwlnY19tdWx0aV9yZWFkX3BhY2tldChnYywgZGF0YV9sZW4sIGRhdGEpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKLQotCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCisJCXBhZCA9ICZnYy0+cGFkc1tpXTsKKwkJZGV2ID0gcGFkLT5kZXY7CiAJCXMgPSBnY19zdGF0dXNfYml0W2ldOwogCi0JCWlmIChzICYgKGdjLT5wYWRzW0dDX01VTFRJXSB8IGdjLT5wYWRzW0dDX01VTFRJMl0pKSB7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICAhKHMgJiBkYXRhWzJdKSAtICEocyAmIGRhdGFbM10pKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgICEocyAmIGRhdGFbMF0pIC0gIShzICYgZGF0YVsxXSkpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUklHR0VSLCBzICYgZGF0YVs0XSk7Ci0JCX0KLQotCQlpZiAocyAmIGdjLT5wYWRzW0dDX01VTFRJMl0pCisJCXN3aXRjaCAocGFkLT50eXBlKSB7CisJCWNhc2UgR0NfTVVMVEkyOgogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQiwgcyAmIGRhdGFbNV0pOworCQkJLyogZmFsbCB0aHJvdWdoICovCiAKLQkJaW5wdXRfc3luYyhkZXYpOworCQljYXNlIEdDX01VTFRJOgorCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAorCQkJCQkgIShzICYgZGF0YVsyXSkgLSAhKHMgJiBkYXRhWzNdKSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksCisJCQkJCSAhKHMgJiBkYXRhWzBdKSAtICEocyAmIGRhdGFbMV0pKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFJJR0dFUiwgcyAmIGRhdGFbNF0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJfQogfQogCkBAIC0zOTgsMzAgKzU0OSw0MSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHBzeF9kZWxheSwgZ2NfcHN4X2RlbGF5LCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocHN4X2RlbGF5LCAiRGVsYXkgd2hlbiBhY2Nlc3NpbmcgU29ueSBQU1ggY29udHJvbGxlciAodXNlY3MpIik7CiAKLXN0YXRpYyBzaG9ydCBnY19wc3hfYWJzW10gPSB7IEFCU19YLCBBQlNfWSwgQUJTX1JYLCBBQlNfUlksIEFCU19IQVQwWCwgQUJTX0hBVDBZIH07Ci1zdGF0aWMgc2hvcnQgZ2NfcHN4X2J0bltdID0geyBCVE5fVEwsIEJUTl9UUiwgQlROX1RMMiwgQlROX1RSMiwgQlROX0EsIEJUTl9CLCBCVE5fWCwgQlROX1ksCi0JCQkJQlROX1NUQVJULCBCVE5fU0VMRUNULCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSIH07Ci1zdGF0aWMgc2hvcnQgZ2NfcHN4X2Rkcl9idG5bXSA9IHsgQlROXzAsIEJUTl8xLCBCVE5fMiwgQlROXzMgfTsKK3N0YXRpYyBjb25zdCBzaG9ydCBnY19wc3hfYWJzW10gPSB7CisJQUJTX1gsIEFCU19ZLCBBQlNfUlgsIEFCU19SWSwgQUJTX0hBVDBYLCBBQlNfSEFUMFkKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgZ2NfcHN4X2J0bltdID0geworCUJUTl9UTCwgQlROX1RSLCBCVE5fVEwyLCBCVE5fVFIyLCBCVE5fQSwgQlROX0IsIEJUTl9YLCBCVE5fWSwKKwlCVE5fU1RBUlQsIEJUTl9TRUxFQ1QsIEJUTl9USFVNQkwsIEJUTl9USFVNQlIKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgZ2NfcHN4X2Rkcl9idG5bXSA9IHsgQlROXzAsIEJUTl8xLCBCVE5fMiwgQlROXzMgfTsKIAogLyoKICAqIGdjX3BzeF9jb21tYW5kKCkgd3JpdGVzIDhiaXQgY29tbWFuZCBhbmQgcmVhZHMgOGJpdCBkYXRhIGZyb20KICAqIHRoZSBwc3ggcGFkLgogICovCiAKLXN0YXRpYyB2b2lkIGdjX3BzeF9jb21tYW5kKHN0cnVjdCBnYyAqZ2MsIGludCBiLCB1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTUFYX0RFVklDRVNdKQorc3RhdGljIHZvaWQgZ2NfcHN4X2NvbW1hbmQoc3RydWN0IGdjICpnYywgaW50IGIsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CisJc3RydWN0IHBhcnBvcnQgKnBvcnQgPSBnYy0+cGQtPnBvcnQ7CiAJaW50IGksIGosIGNtZCwgcmVhZDsKIAotCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKQotCQlkYXRhW2ldID0gMDsKKwltZW1zZXQoZGF0YSwgMCwgR0NfTUFYX0RFVklDRVMpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX1BTWF9MRU5HVEg7IGkrKywgYiA+Pj0gMSkgewogCQljbWQgPSAoYiAmIDEpID8gR0NfUFNYX0NPTU1BTkQgOiAwOwotCQlwYXJwb3J0X3dyaXRlX2RhdGEoZ2MtPnBkLT5wb3J0LCBjbWQgfCBHQ19QU1hfUE9XRVIpOworCQlwYXJwb3J0X3dyaXRlX2RhdGEocG9ydCwgY21kIHwgR0NfUFNYX1BPV0VSKTsKIAkJdWRlbGF5KGdjX3BzeF9kZWxheSk7Ci0JCXJlYWQgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKGdjLT5wZC0+cG9ydCkgXiAweDgwOwotCQlmb3IgKGogPSAwOyBqIDwgR0NfTUFYX0RFVklDRVM7IGorKykKLQkJCWRhdGFbal0gfD0gKHJlYWQgJiBnY19zdGF0dXNfYml0W2pdICYgKGdjLT5wYWRzW0dDX1BTWF0gfCBnYy0+cGFkc1tHQ19ERFJdKSkgPyAoMSA8PCBpKSA6IDA7CisKKwkJcmVhZCA9IHBhcnBvcnRfcmVhZF9zdGF0dXMocG9ydCkgXiAweDgwOworCisJCWZvciAoaiA9IDA7IGogPCBHQ19NQVhfREVWSUNFUzsgaisrKSB7CisJCQlzdHJ1Y3QgZ2NfcGFkICpwYWQgPSAmZ2MtPnBhZHNbaV07CisKKwkJCWlmIChwYWQtPnR5cGUgPT0gR0NfUFNYIHx8IHBhZC0+dHlwZSA9PSBHQ19ERFIpCisJCQkJZGF0YVtqXSB8PSAocmVhZCAmIGdjX3N0YXR1c19iaXRbal0pID8gKDEgPDwgaSkgOiAwOworCQl9CisKIAkJcGFycG9ydF93cml0ZV9kYXRhKGdjLT5wZC0+cG9ydCwgY21kIHwgR0NfUFNYX0NMT0NLIHwgR0NfUFNYX1BPV0VSKTsKIAkJdWRlbGF5KGdjX3BzeF9kZWxheSk7CiAJfQpAQCAtNDMyLDMxICs1OTQsNDAgQEAKICAqIGRldmljZSBpZGVudGlmaWVyIGNvZGUuCiAgKi8KIAotc3RhdGljIHZvaWQgZ2NfcHN4X3JlYWRfcGFja2V0KHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGNoYXIgZGF0YVtHQ19NQVhfREVWSUNFU11bR0NfUFNYX0JZVEVTXSwKK3N0YXRpYyB2b2lkIGdjX3BzeF9yZWFkX3BhY2tldChzdHJ1Y3QgZ2MgKmdjLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtHQ19NQVhfREVWSUNFU11bR0NfUFNYX0JZVEVTXSwKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGlkW0dDX01BWF9ERVZJQ0VTXSkKIHsKIAlpbnQgaSwgaiwgbWF4X2xlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGRhdGEyW0dDX01BWF9ERVZJQ0VTXTsKIAotCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwkvKiBTZWxlY3QgcGFkICovCisJLyogU2VsZWN0IHBhZCAqLworCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwogCXVkZWxheShnY19wc3hfZGVsYXkpOwotCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9QT1dFUik7CQkJLyogRGVzZWxlY3QsIGJlZ2luIGNvbW1hbmQgKi8KKwkvKiBEZXNlbGVjdCwgYmVnaW4gY29tbWFuZCAqLworCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9QT1dFUik7CiAJdWRlbGF5KGdjX3BzeF9kZWxheSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlnY19wc3hfY29tbWFuZChnYywgMHgwMSwgZGF0YTIpOwkJCQkJCS8qIEFjY2VzcyBwYWQgKi8KLQlnY19wc3hfY29tbWFuZChnYywgMHg0MiwgaWQpOwkJCQkJCQkvKiBHZXQgZGV2aWNlIGlkcyAqLwotCWdjX3BzeF9jb21tYW5kKGdjLCAwLCBkYXRhMik7CQkJCQkJCS8qIER1bXAgc3RhdHVzICovCisJZ2NfcHN4X2NvbW1hbmQoZ2MsIDB4MDEsIGRhdGEyKTsJLyogQWNjZXNzIHBhZCAqLworCWdjX3BzeF9jb21tYW5kKGdjLCAweDQyLCBpZCk7CQkvKiBHZXQgZGV2aWNlIGlkcyAqLworCWdjX3BzeF9jb21tYW5kKGdjLCAwLCBkYXRhMik7CQkvKiBEdW1wIHN0YXR1cyAqLwogCi0JZm9yIChpID0wOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykJCQkJCQkJCS8qIEZpbmQgdGhlIGxvbmdlc3QgcGFkICovCi0JCWlmKChnY19zdGF0dXNfYml0W2ldICYgKGdjLT5wYWRzW0dDX1BTWF0gfCBnYy0+cGFkc1tHQ19ERFJdKSkKLQkJCSYmIChHQ19QU1hfTEVOKGlkW2ldKSA+IG1heF9sZW4pCi0JCQkmJiAoR0NfUFNYX0xFTihpZFtpXSkgPD0gR0NfUFNYX0JZVEVTKSkKKwkvKiBGaW5kIHRoZSBsb25nZXN0IHBhZCAqLworCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CisJCXN0cnVjdCBnY19wYWQgKnBhZCA9ICZnYy0+cGFkc1tpXTsKKworCQlpZiAoKHBhZC0+dHlwZSA9PSBHQ19QU1ggfHwgcGFkLT50eXBlID09IEdDX0REUikgJiYKKwkJICAgIEdDX1BTWF9MRU4oaWRbaV0pID4gbWF4X2xlbiAmJgorCQkgICAgR0NfUFNYX0xFTihpZFtpXSkgPD0gR0NfUFNYX0JZVEVTKSB7CiAJCQltYXhfbGVuID0gR0NfUFNYX0xFTihpZFtpXSk7CisJCX0KKwl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2xlbjsgaSsrKSB7CQkJCQkJLyogUmVhZCBpbiBhbGwgdGhlIGRhdGEgKi8KKwkvKiBSZWFkIGluIGFsbCB0aGUgZGF0YSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbGVuOyBpKyspIHsKIAkJZ2NfcHN4X2NvbW1hbmQoZ2MsIDAsIGRhdGEyKTsKIAkJZm9yIChqID0gMDsgaiA8IEdDX01BWF9ERVZJQ0VTOyBqKyspCiAJCQlkYXRhW2pdW2ldID0gZGF0YTJbal07CkBAIC00NjYsODYgKzYzNywxMDQgQEAKIAogCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwogCi0JZm9yKGkgPSAwOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykJCQkJCQkJCS8qIFNldCBpZCdzIHRvIHRoZSByZWFsIHZhbHVlICovCisJLyogU2V0IGlkJ3MgdG8gdGhlIHJlYWwgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykKIAkJaWRbaV0gPSBHQ19QU1hfSUQoaWRbaV0pOwogfQogCitzdGF0aWMgdm9pZCBnY19wc3hfcmVwb3J0X29uZShzdHJ1Y3QgZ2NfcGFkICpwYWQsIHVuc2lnbmVkIGNoYXIgcHN4X3R5cGUsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBhZC0+ZGV2OworCWludCBpOworCisJc3dpdGNoIChwc3hfdHlwZSkgeworCisJY2FzZSBHQ19QU1hfUlVNQkxFOgorCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJMLCB+ZGF0YVswXSAmIDB4MDQpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RIVU1CUiwgfmRhdGFbMF0gJiAweDAyKTsKKworCWNhc2UgR0NfUFNYX05FR0NPTjoKKwljYXNlIEdDX1BTWF9BTkFMT0c6CisKKwkJaWYgKHBhZC0+dHlwZSA9PSBHQ19ERFIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3BzeF9kZHJfYnRuW2ldLAorCQkJCQkJIH5kYXRhWzBdICYgKDB4MTAgPDwgaSkpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tpICsgMl0sCisJCQkJCQkgZGF0YVtpICsgMl0pOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsCisJCQkJISEoZGF0YVswXSAmIDB4ODApICogMTI4ICsgIShkYXRhWzBdICYgMHgyMCkgKiAxMjcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSEhKGRhdGFbMF0gJiAweDEwKSAqIDEyOCArICEoZGF0YVswXSAmIDB4NDApICogMTI3KTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2J0bltpXSwgfmRhdGFbMV0gJiAoMSA8PCBpKSk7CisKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVEFSVCwgIH5kYXRhWzBdICYgMHgwOCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVswXSAmIDB4MDEpOworCisJCWlucHV0X3N5bmMoZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgR0NfUFNYX05PUk1BTDoKKworCQlpZiAocGFkLT50eXBlID09IEdDX0REUikgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2Rkcl9idG5baV0sCisJCQkJCQkgfmRhdGFbMF0gJiAoMHgxMCA8PCBpKSk7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsCisJCQkJISEoZGF0YVswXSAmIDB4ODApICogMTI4ICsgIShkYXRhWzBdICYgMHgyMCkgKiAxMjcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSEhKGRhdGFbMF0gJiAweDEwKSAqIDEyOCArICEoZGF0YVswXSAmIDB4NDApICogMTI3KTsKKworCQkJLyoKKwkJCSAqIEZvciBzb21lIHJlYXNvbiBpZiB0aGUgZXh0cmEgYXhlcyBhcmUgbGVmdCB1bnNldAorCQkJICogdGhleSBkcmlmdC4KKwkJCSAqIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIGdjX3BzeF9hYnNbaSArIDJdLCAxMjgpOworCQkJICogVGhpcyBuZWVkcyB0byBiZSBkZWJ1Z2dlZCBwcm9wZXJseSwKKwkJCSAqIG1heWJlIGZ1enogcHJvY2Vzc2luZyBuZWVkcyB0byBiZSBkb25lCisJCQkgKiBpbiBpbnB1dF9zeW5jKCkKKwkJCSAqCQkJCSAtLXZvanRlY2gKKwkJCSAqLworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2ldLCB+ZGF0YVsxXSAmICgxIDw8IGkpKTsKKworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUQVJULCAgfmRhdGFbMF0gJiAweDA4KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TRUxFQ1QsIH5kYXRhWzBdICYgMHgwMSk7CisKKwkJaW5wdXRfc3luYyhkZXYpOworCisJCWJyZWFrOworCisJZGVmYXVsdDogLyogbm90IGEgcGFkLCBpZ25vcmUgKi8KKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBnY19wc3hfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTUFYX0RFVklDRVNdW0dDX1BTWF9CWVRFU107CiAJdW5zaWduZWQgY2hhciBpZFtHQ19NQVhfREVWSUNFU107Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OwotCWludCBpLCBqOworCXN0cnVjdCBnY19wYWQgKnBhZDsKKwlpbnQgaTsKIAogCWdjX3BzeF9yZWFkX3BhY2tldChnYywgZGF0YSwgaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKLQotCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoaWRbaV0pIHsKLQotCQkJY2FzZSBHQ19QU1hfUlVNQkxFOgotCi0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQkwsIH5kYXRhW2ldWzBdICYgMHgwNCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQlIsIH5kYXRhW2ldWzBdICYgMHgwMik7Ci0KLQkJCWNhc2UgR0NfUFNYX05FR0NPTjoKLQkJCWNhc2UgR0NfUFNYX0FOQUxPRzoKLQotCQkJCWlmIChnYy0+cGFkc1tHQ19ERFJdICYgZ2Nfc3RhdHVzX2JpdFtpXSkgewotCQkJCQlmb3IoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2Rkcl9idG5bal0sIH5kYXRhW2ldWzBdICYgKDB4MTAgPDwgaikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tqICsgMl0sIGRhdGFbaV1baiArIDJdKTsKLQotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIDEyOCArICEoZGF0YVtpXVswXSAmIDB4MjApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHg4MCkgKiAxMjgpOwotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIDEyOCArICEoZGF0YVtpXVswXSAmIDB4NDApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHgxMCkgKiAxMjgpOwotCQkJCX0KLQotCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2pdLCB+ZGF0YVtpXVsxXSAmICgxIDw8IGopKTsKLQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsICB+ZGF0YVtpXVswXSAmIDB4MDgpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVtpXVswXSAmIDB4MDEpOwotCi0JCQkJaW5wdXRfc3luYyhkZXYpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgR0NfUFNYX05PUk1BTDoKLQkJCQlpZiAoZ2MtPnBhZHNbR0NfRERSXSAmIGdjX3N0YXR1c19iaXRbaV0pIHsKLQkJCQkJZm9yKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3BzeF9kZHJfYnRuW2pdLCB+ZGF0YVtpXVswXSAmICgweDEwIDw8IGopKTsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIDEyOCArICEoZGF0YVtpXVswXSAmIDB4MjApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHg4MCkgKiAxMjgpOwotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIDEyOCArICEoZGF0YVtpXVswXSAmIDB4NDApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHgxMCkgKiAxMjgpOwotCi0JCQkJCS8qIGZvciBzb21lIHJlYXNvbiBpZiB0aGUgZXh0cmEgYXhlcyBhcmUgbGVmdCB1bnNldCB0aGV5IGRyaWZ0ICovCi0JCQkJCS8qIGZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tqICsgMl0sIDEyOCk7Ci0JCQkJCSAqIFRoaXMgbmVlZHMgdG8gYmUgZGVidWdnZWQgcHJvcGVybHksCi0JCQkJCSAqIG1heWJlIGZ1enogcHJvY2Vzc2luZyBuZWVkcyB0byBiZSBkb25lIGluIGlucHV0X3N5bmMoKQotCQkJCQkgKgkJCQkgLS12b2p0ZWNoCi0JCQkJCSAqLwotCQkJCX0KLQotCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2pdLCB+ZGF0YVtpXVsxXSAmICgxIDw8IGopKTsKLQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsICB+ZGF0YVtpXVswXSAmIDB4MDgpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVtpXVswXSAmIDB4MDEpOwotCi0JCQkJaW5wdXRfc3luYyhkZXYpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMDogLyogbm90IGEgcGFkLCBpZ25vcmUgKi8KLQkJCQlicmVhazsKLQkJfQorCQlwYWQgPSAmZ2MtPnBhZHNbaV07CisJCWlmIChwYWQtPnR5cGUgPT0gR0NfUFNYIHx8IHBhZC0+dHlwZSA9PSBHQ19ERFIpCisJCQlnY19wc3hfcmVwb3J0X29uZShwYWQsIGlkW2ldLCBkYXRhW2ldKTsKIAl9CiB9CiAKQEAgLTU2MSwyOCArNzUwLDMxIEBACiAgKiBONjQgcGFkcyAtIG11c3QgYmUgcmVhZCBmaXJzdCwgYW55IHJlYWQgY29uZnVzZXMgdGhlbSBmb3IgMjAwIHVzCiAgKi8KIAotCWlmIChnYy0+cGFkc1tHQ19ONjRdKQorCWlmIChnYy0+cGFkX2NvdW50W0dDX042NF0pCiAJCWdjX242NF9wcm9jZXNzX3BhY2tldChnYyk7CiAKIC8qCiAgKiBORVMgYW5kIFNORVMgcGFkcyBvciBtb3VzZQogICovCiAKLQlpZiAoZ2MtPnBhZHNbR0NfTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdKQorCWlmIChnYy0+cGFkX2NvdW50W0dDX05FU10gfHwKKwkgICAgZ2MtPnBhZF9jb3VudFtHQ19TTkVTXSB8fAorCSAgICBnYy0+cGFkX2NvdW50W0dDX1NORVNNT1VTRV0pIHsKIAkJZ2NfbmVzX3Byb2Nlc3NfcGFja2V0KGdjKTsKKwl9CiAKIC8qCiAgKiBNdWx0aSBhbmQgTXVsdGkyIGpveXN0aWNrcwogICovCiAKLQlpZiAoZ2MtPnBhZHNbR0NfTVVMVEldIHx8IGdjLT5wYWRzW0dDX01VTFRJMl0pCisJaWYgKGdjLT5wYWRfY291bnRbR0NfTVVMVEldIHx8IGdjLT5wYWRfY291bnRbR0NfTVVMVEkyXSkKIAkJZ2NfbXVsdGlfcHJvY2Vzc19wYWNrZXQoZ2MpOwogCiAvKgogICogUFNYIGNvbnRyb2xsZXJzCiAgKi8KIAotCWlmIChnYy0+cGFkc1tHQ19QU1hdIHx8IGdjLT5wYWRzW0dDX0REUl0pCisJaWYgKGdjLT5wYWRfY291bnRbR0NfUFNYXSB8fCBnYy0+cGFkX2NvdW50W0dDX0REUl0pCiAJCWdjX3BzeF9wcm9jZXNzX3BhY2tldChnYyk7CiAKIAltb2RfdGltZXIoJmdjLT50aW1lciwgamlmZmllcyArIEdDX1JFRlJFU0hfVElNRSk7CkBAIC02MjIsMjUgKzgxNCwyOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnY19zZXR1cF9wYWQoc3RydWN0IGdjICpnYywgaW50IGlkeCwgaW50IHBhZF90eXBlKQogeworCXN0cnVjdCBnY19wYWQgKnBhZCA9ICZnYy0+cGFkc1tpZHhdOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgaTsKLQotCWlmICghcGFkX3R5cGUpCi0JCXJldHVybiAwOworCWludCBlcnI7CiAKIAlpZiAocGFkX3R5cGUgPCAxIHx8IHBhZF90eXBlID4gR0NfTUFYKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImdhbWVjb24uYzogUGFkIHR5cGUgJWQgdW5rbm93blxuIiwgcGFkX3R5cGUpOworCQlwcl9lcnIoIlBhZCB0eXBlICVkIHVua25vd25cbiIsIHBhZF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZ2MtPmRldltpZHhdID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJcGFkLT5kZXYgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVjb24uYzogTm90IGVub3VnaCBtZW1vcnkgZm9yIGlucHV0IGRldmljZVxuIik7CisJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgZm9yIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXBhZC0+dHlwZSA9IHBhZF90eXBlOworCisJc25wcmludGYocGFkLT5waHlzLCBzaXplb2YocGFkLT5waHlzKSwKKwkJICIlcy9pbnB1dCVkIiwgZ2MtPnBkLT5wb3J0LT5uYW1lLCBpZHgpOworCiAJaW5wdXRfZGV2LT5uYW1lID0gZ2NfbmFtZXNbcGFkX3R5cGVdOwotCWlucHV0X2Rldi0+cGh5cyA9IGdjLT5waHlzW2lkeF07CisJaW5wdXRfZGV2LT5waHlzID0gcGFkLT5waHlzOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQVJQT1JUOwogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHBhZF90eXBlOwpAQCAtNjU5LDYxICs4NTUsNzYgQEAKIAl9IGVsc2UKIAkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOwogCi0JZ2MtPnBhZHNbMF0gfD0gZ2Nfc3RhdHVzX2JpdFtpZHhdOwotCWdjLT5wYWRzW3BhZF90eXBlXSB8PSBnY19zdGF0dXNfYml0W2lkeF07CisJZ2MtPnBhZF9jb3VudFtwYWRfdHlwZV0rKzsKIAogCXN3aXRjaCAocGFkX3R5cGUpIHsKIAotCQljYXNlIEdDX042NDoKLQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkJCXNldF9iaXQoZ2NfbjY0X2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCWNhc2UgR0NfTjY0OgorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCV9fc2V0X2JpdChnY19uNjRfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YICsgaSwgLTEyNywgMTI2LCAwLCAyKTsKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19IQVQwWCArIGksIC0xLCAxLCAwLCAwKTsKLQkJCX0KKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksIC0xMjcsIDEyNiwgMCwgMik7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19IQVQwWCArIGksIC0xLCAxLCAwLCAwKTsKKwkJfQogCi0JCQlicmVhazsKKwkJZXJyID0gZ2NfbjY0X2luaXRfZmYoaW5wdXRfZGV2LCBpZHgpOworCQlpZiAoZXJyKSB7CisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gaW5pdGlhdGUgcnVtYmxlIGZvciBONjQgZGV2aWNlICVkXG4iLCBpZHgpOworCQkJZ290byBlcnJfZnJlZV9kZXY7CisJCX0KIAotCQljYXNlIEdDX1NORVNNT1VTRToKLQkJCXNldF9iaXQoQlROX0xFRlQsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJCXNldF9iaXQoQlROX1JJR0hULCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlzZXRfYml0KFJFTF9YLCBpbnB1dF9kZXYtPnJlbGJpdCk7Ci0JCQlzZXRfYml0KFJFTF9ZLCBpbnB1dF9kZXYtPnJlbGJpdCk7Ci0JCQlicmVhazsKKwkJYnJlYWs7CiAKLQkJY2FzZSBHQ19TTkVTOgotCQkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJCQlzZXRfYml0KGdjX3NuZXNfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCWNhc2UgR0NfTkVTOgotCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCQlzZXRfYml0KGdjX3NuZXNfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlicmVhazsKKwljYXNlIEdDX1NORVNNT1VTRToKKwkJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fUklHSFQsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KFJFTF9YLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChSRUxfWSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQlicmVhazsKIAotCQljYXNlIEdDX01VTFRJMjoKLQkJCXNldF9iaXQoQlROX1RIVU1CLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCWNhc2UgR0NfTVVMVEk6Ci0JCQlzZXRfYml0KEJUTl9UUklHR0VSLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlicmVhazsKKwljYXNlIEdDX1NORVM6CisJCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCisJCQlfX3NldF9iaXQoZ2Nfc25lc19idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwljYXNlIEdDX05FUzoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCV9fc2V0X2JpdChnY19zbmVzX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlicmVhazsKIAotCQljYXNlIEdDX1BTWDoKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBnY19wc3hfYWJzW2ldLCA0LCAyNTIsIDAsIDIpOwotCQkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJY2FzZSBHQ19NVUxUSTI6CisJCV9fc2V0X2JpdChCVE5fVEhVTUIsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwljYXNlIEdDX01VTFRJOgorCQlfX3NldF9iaXQoQlROX1RSSUdHRVIsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJYnJlYWs7CiAKLQkJCWJyZWFrOworCWNhc2UgR0NfUFNYOgorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LAorCQkJCQkgICAgIGdjX3BzeF9hYnNbaV0sIDQsIDI1MiwgMCwgMik7CisJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQorCQkJX19zZXRfYml0KGdjX3BzeF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCQljYXNlIEdDX0REUjoKLQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfZGRyX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCQkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCWJyZWFrOwogCi0JCQlicmVhazsKKwljYXNlIEdDX0REUjoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCV9fc2V0X2JpdChnY19wc3hfZGRyX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKKwkJCV9fc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkJYnJlYWs7CiAJfQogCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHBhZC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2RldjsKKwogCXJldHVybiAwOworCitlcnJfZnJlZV9kZXY6CisJaW5wdXRfZnJlZV9kZXZpY2UocGFkLT5kZXYpOworCXBhZC0+ZGV2ID0gTlVMTDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGdjIF9faW5pdCAqZ2NfcHJvYmUoaW50IHBhcnBvcnQsIGludCAqcGFkcywgaW50IG5fcGFkcykKQEAgLTcyMiw1MiArOTMzLDQ3IEBACiAJc3RydWN0IHBhcnBvcnQgKnBwOwogCXN0cnVjdCBwYXJkZXZpY2UgKnBkOwogCWludCBpOworCWludCBjb3VudCA9IDA7CiAJaW50IGVycjsKIAogCXBwID0gcGFycG9ydF9maW5kX251bWJlcihwYXJwb3J0KTsKIAlpZiAoIXBwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBubyBzdWNoIHBhcnBvcnRcbiIpOworCQlwcl9lcnIoIm5vIHN1Y2ggcGFycG9ydCAlZFxuIiwgcGFycG9ydCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlwZCA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBwLCAiZ2FtZWNvbiIsIE5VTEwsIE5VTEwsIE5VTEwsIFBBUlBPUlRfREVWX0VYQ0wsIE5VTEwpOwogCWlmICghcGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnYW1lY29uLmM6IHBhcnBvcnQgYnVzeSBhbHJlYWR5IC0gbHAubyBsb2FkZWQ/XG4iKTsKKwkJcHJfZXJyKCJwYXJwb3J0IGJ1c3kgYWxyZWFkeSAtIGxwLm8gbG9hZGVkP1xuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfcHV0X3BwOwogCX0KIAogCWdjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnYykgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVjb24uYzogTm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfdW5yZWdfcGFyZGV2OwogCX0KIAogCW11dGV4X2luaXQoJmdjLT5tdXRleCk7CiAJZ2MtPnBkID0gcGQ7Ci0JaW5pdF90aW1lcigmZ2MtPnRpbWVyKTsKLQlnYy0+dGltZXIuZGF0YSA9IChsb25nKSBnYzsKLQlnYy0+dGltZXIuZnVuY3Rpb24gPSBnY190aW1lcjsKKwlzZXR1cF90aW1lcigmZ2MtPnRpbWVyLCBnY190aW1lciwgKGxvbmcpIGdjKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuX3BhZHMgJiYgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKIAkJaWYgKCFwYWRzW2ldKQogCQkJY29udGludWU7CiAKLQkJc25wcmludGYoZ2MtPnBoeXNbaV0sIHNpemVvZihnYy0+cGh5c1tpXSksCi0JCQkgIiVzL2lucHV0JWQiLCBnYy0+cGQtPnBvcnQtPm5hbWUsIGkpOwogCQllcnIgPSBnY19zZXR1cF9wYWQoZ2MsIGksIHBhZHNbaV0pOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfdW5yZWdfZGV2czsKIAotCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZ2MtPmRldltpXSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9mcmVlX2RldjsKKwkJY291bnQrKzsKIAl9CiAKLQlpZiAoIWdjLT5wYWRzWzBdKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBObyB2YWxpZCBkZXZpY2VzIHNwZWNpZmllZFxuIik7CisJaWYgKGNvdW50ID09IDApIHsKKwkJcHJfZXJyKCJObyB2YWxpZCBkZXZpY2VzIHNwZWNpZmllZFxuIik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX2ZyZWVfZ2M7CiAJfQpAQCAtNzc1LDEyICs5ODEsMTAgQEAKIAlwYXJwb3J0X3B1dF9wb3J0KHBwKTsKIAlyZXR1cm4gZ2M7CiAKLSBlcnJfZnJlZV9kZXY6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoZ2MtPmRldltpXSk7CiAgZXJyX3VucmVnX2RldnM6CiAJd2hpbGUgKC0taSA+PSAwKQotCQlpZiAoZ2MtPmRldltpXSkKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5kZXZbaV0pOworCQlpZiAoZ2MtPnBhZHNbaV0uZGV2KQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ2MtPnBhZHNbaV0uZGV2KTsKICBlcnJfZnJlZV9nYzoKIAlrZnJlZShnYyk7CiAgZXJyX3VucmVnX3BhcmRldjoKQEAgLTc5Niw4ICsxMDAwLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKQotCQlpZiAoZ2MtPmRldltpXSkKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5kZXZbaV0pOworCQlpZiAoZ2MtPnBhZHNbaV0uZGV2KQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ2MtPnBhZHNbaV0uZGV2KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5wZCk7CiAJa2ZyZWUoZ2MpOwogfQpAQCAtODEzLDcgKzEwMTcsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGdjX2NmZ1tpXS5uYXJncyA8IDIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBhdCBsZWFzdCBvbmUgZGV2aWNlIG11c3QgYmUgc3BlY2lmaWVkXG4iKTsKKwkJCXByX2VycigiYXQgbGVhc3Qgb25lIGRldmljZSBtdXN0IGJlIHNwZWNpZmllZFxuIik7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggOGEyOGZiNy4uOWIzMzUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTg2LDkgKzg2LDggQEAKIAogLyogeGJveCBkLXBhZHMgc2hvdWxkIG1hcCB0byBidXR0b25zLCBhcyBpcyByZXF1aXJlZCBmb3IgRERSIHBhZHMKICAgIGJ1dCB3ZSBtYXAgdGhlbSB0byBheGVzIHdoZW4gcG9zc2libGUgdG8gc2ltcGxpZnkgdGhpbmdzICovCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMgICAgMAotI2RlZmluZSBNQVBfRFBBRF9UT19BWEVTICAgICAgIDEKLSNkZWZpbmUgTUFQX0RQQURfVU5LTk9XTiAgICAgICAyCisjZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMJCSgxIDw8IDApCisjZGVmaW5lIE1BUF9UUklHR0VSU19UT19CVVRUT05TCQkoMSA8PCAxKQogCiAjZGVmaW5lIFhUWVBFX1hCT1ggICAgICAgIDAKICNkZWZpbmUgWFRZUEVfWEJPWDM2MCAgICAgMQpAQCAtOTksNTcgKzk4LDYxIEBACiBtb2R1bGVfcGFyYW0oZHBhZF90b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHBhZF90b19idXR0b25zLCAiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5rbm93biBwYWRzIik7CiAKK3N0YXRpYyBpbnQgdHJpZ2dlcnNfdG9fYnV0dG9uczsKK21vZHVsZV9wYXJhbSh0cmlnZ2Vyc190b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHJpZ2dlcnNfdG9fYnV0dG9ucywgIk1hcCB0cmlnZ2VycyB0byBidXR0b25zIHJhdGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHhwYWRfZGV2aWNlIHsKIAl1MTYgaWRWZW5kb3I7CiAJdTE2IGlkUHJvZHVjdDsKIAljaGFyICpuYW1lOwotCXU4IGRwYWRfbWFwcGluZzsKKwl1OCBtYXBwaW5nOwogCXU4IHh0eXBlOwogfSB4cGFkX2RldmljZVtdID0gewotCXsgMHgwNDVlLCAweDAyMDIsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIHYxIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NWUsIDB4MDI4OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg1LCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoSmFwYW4pIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODcsICJNaWNyb3NvZnQgWGJveCBDb250cm9sbGVyIFMiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCisJeyAweDA0NWUsIDB4MDIwMiwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjEgKFVTKSIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDQ1ZSwgMHgwMjg5LCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MiAoVVMpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDVlLCAweDAyODUsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChKYXBhbikiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29mdCBYYm94IENvbnRyb2xsZXIgUyIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDQ1ZSwgMHgwNzE5LCAiWGJveCAzNjAgV2lyZWxlc3MgUmVjZWl2ZXIiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YMzYwVyB9LAogCXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJveCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NGYsIDB4MGYwNywgIlRocnVzdG1hc3RlciwgSW5jLiBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDZkLCAweGMyNDIsICJMb2dpdGVjaCBDaGlsbHN0cmVhbSBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwNDZkLCAweGNhODQsICJMb2dpdGVjaCBYYm94IENvcmRsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4Y2E4OCwgIkxvZ2l0ZWNoIENvbXBhY3QgQ29udHJvbGxlciBmb3IgWGJveCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwgMHgxMDA3LCAiTWFkIENhdHogQ29udHJvbGxlciAodW52ZXJpZmllZCkiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2VybWFueSkiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUxNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1MjIsICJNYWQgQ2F0eiBMdW1pQ09OIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1MjYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCBQcm8iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUzNiwgIk1hZCBDYXR6IE1pY3JvQ09OIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDRmLCAweDBmMDcsICJUaHJ1c3RtYXN0ZXIsIEluYy4gQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDQ2ZCwgMHhjMjQyLCAiTG9naXRlY2ggQ2hpbGxzdHJlYW0gQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MDQ2ZCwgMHhjYTg0LCAiTG9naXRlY2ggWGJveCBDb3JkbGVzcyBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDZkLCAweGNhODgsICJMb2dpdGVjaCBDb21wYWN0IENvbnRyb2xsZXIgZm9yIFhib3giLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDA1ZmQsIDB4MTAwNywgIk1hZCBDYXR6IENvbnRyb2xsZXIgKHVudmVyaWZpZWQpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNWZkLCAweDEwN2EsICJJbnRlckFjdCAnUG93ZXJQYWQgUHJvJyBYLUJveCBwYWQgKEdlcm1hbnkpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNzM4LCAweDQ1MTYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NTIyLCAiTWFkIENhdHogTHVtaUNPTiIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NTI2LCAiTWFkIENhdHogQ29udHJvbCBQYWQgUHJvIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNzM4LCAweDQ1MzYsICJNYWQgQ2F0eiBNaWNyb0NPTiIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDczOCwgMHg0NTQwLCAiTWFkIENhdHogQmVhdCBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDU1NiwgIk1hZCBDYXR6IEx5bnggV2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MDczOCwgMHg0NzM4LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciAoU0ZJVikiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDA3MzgsIDB4NDU1NiwgIk1hZCBDYXR6IEx5bnggV2lyZWxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MDczOCwgMHg0NzM4LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciAoU0ZJVikiLCBNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgwNzM4LCAweDYwNDAsICJNYWQgQ2F0eiBCZWF0IFBhZCBQcm8iLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBjMTIsIDB4ODgwMiwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODBhLCAiUGVsaWNhbiBFY2xpcHNlIFBMLTIwMjMiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBjMTIsIDB4ODgxMCwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg5OTAyLCAiSEFNQSBWaWJyYVggLSAqRkFVTFRZIEhBUkRXQVJFKiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU0YywgMHgxMDk3LCAiUmFkaWNhIEdhbWVzdGVyIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNGMsIDB4MjM5MCwgIlJhZGljYSBHYW1lcyBKdGVjaCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZmLCAweDAwMDMsICJMb2dpYzMgRnJlZWJpcmQgd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2ZiwgMHgwMDA1LCAiRWNsaXBzZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZmLCAweDAwMDYsICJFZGdlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIlBlbGljYW4gJ1RTWicgV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MGU4ZiwgMHgwMjAxLCAiU21hcnRKb3kgRnJhZyBYcGFkL1BTMiBhZGFwdG9yIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZjMwLCAweDAyMDIsICJKb3l0ZWNoIEFkdmFuY2VkIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBmMzAsIDB4ODg4OCwgIkJpZ0JlbiBYQk1pbmlQYWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MTAyYywgMHhmZjBjLCAiSm95dGVjaCBXaXJlbGVzcyBBZHZhbmNlZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAorCXsgMHgwYzEyLCAweDg4MDIsICJaZXJvcGx1cyBYYm94IENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBjMTIsIDB4ODgwYSwgIlBlbGljYW4gRWNsaXBzZSBQTC0yMDIzIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwYzEyLCAweDg4MTAsICJaZXJvcGx1cyBYYm94IENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBjMTIsIDB4OTkwMiwgIkhBTUEgVmlicmFYIC0gKkZBVUxUWSBIQVJEV0FSRSoiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBlNGMsIDB4MTA5NywgIlJhZGljYSBHYW1lc3RlciBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZTRjLCAweDIzOTAsICJSYWRpY2EgR2FtZXMgSnRlY2ggQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGU2ZiwgMHgwMDAzLCAiTG9naWMzIEZyZWViaXJkIHdpcmVsZXNzIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBlNmYsIDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGU2ZiwgMHgwMDA2LCAiRWRnZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZTZmLCAweDAwMDYsICJQZWxpY2FuICdUU1onIFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDBlOGYsIDB4MDIwMSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9QUzIgYWRhcHRvciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGYzMCwgMHgwMjAyLCAiSm95dGVjaCBBZHZhbmNlZCBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZjMwLCAweDg4ODgsICJCaWdCZW4gWEJNaW5pUGFkIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2lyZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDE0MzAsIDB4NDc0OCwgIlJlZE9jdGFuZSBHdWl0YXIgSGVybyBYLXBsb3JlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgMCwgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxNDMwLCAweDg4ODgsICJUWDY1MDArIERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDE0NmIsIDB4MDYwMSwgIkJpZ0JlbiBJbnRlcmFjdGl2ZSBYQk9YIDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwNDVlLCAweDAyOGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MTQ2YiwgMHgwNjAxLCAiQmlnQmVuIEludGVyYWN0aXZlIFhCT1ggMzYwIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDA0NWUsIDB4MDI4ZSwgIk1pY3Jvc29mdCBYLUJveCAzNjAgcGFkIiwgMCwgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxYmFkLCAweDAwMDMsICJIYXJtb25peCBSb2NrIEJhbmQgRHJ1bWtpdCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MGYwZCwgMHgwMDE2LCAiSG9yaSBSZWFsIEFyY2FkZSBQcm8uRVgiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5LTk9XTiwgWFRZUEVfVU5LTk9XTiB9CisJeyAweDBmMGQsIDB4MDAxNiwgIkhvcmkgUmVhbCBBcmNhZGUgUHJvLkVYIiwgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4ZmZmZiwgMHhmZmZmLCAiQ2hpbmVzZS1tYWRlIFhib3ggQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCAwLCBYVFlQRV9VTktOT1dOIH0KIH07CiAKIC8qIGJ1dHRvbnMgc2hhcmVkIHdpdGggeGJveCBhbmQgeGJveDM2MCAqLwpAQCAtMTY1LDEzICsxNjgsMjAgQEAKIAktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi0vKiBvbmx5IHVzZWQgaWYgTUFQX0RQQURfVE9fQlVUVE9OUyAqLworLyogdXNlZCB3aGVuIGRwYWQgaXMgbWFwcGVkIHRvIG51dHRvbnMgKi8KIHN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9idG5fcGFkW10gPSB7CiAJQlROX0xFRlQsIEJUTl9SSUdIVCwJCS8qIGQtcGFkIGxlZnQsIHJpZ2h0ICovCiAJQlROXzAsIEJUTl8xLAkJCS8qIGQtcGFkIHVwLCBkb3duIChYWFggbmFtZXM/PykgKi8KIAktMQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAorLyogdXNlZCB3aGVuIHRyaWdnZXJzIGFyZSBtYXBwZWQgdG8gYnV0dG9ucyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2J0bl90cmlnZ2Vyc1tdID0geworCUJUTl9UTDIsIEJUTl9UUjIsCQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJLTEKK307CisKKwogc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkMzYwX2J0bltdID0geyAgLyogYnV0dG9ucyBmb3IgeDM2MCBjb250cm9sbGVyICovCiAJQlROX1RMLCBCVE5fVFIsCQkvKiBCdXR0b24gTEIvUkIgKi8KIAlCVE5fTU9ERSwJCS8qIFRoZSBiaWcgWCBidXR0b24gKi8KQEAgLTE4MSwxNiArMTkxLDIxIEBACiBzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYWJzW10gPSB7CiAJQUJTX1gsIEFCU19ZLAkJLyogbGVmdCBzdGljayAqLwogCUFCU19SWCwgQUJTX1JZLAkJLyogcmlnaHQgc3RpY2sgKi8KLQlBQlNfWiwgQUJTX1JaLAkJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLwogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLS8qIG9ubHkgdXNlZCBpZiBNQVBfRFBBRF9UT19BWEVTICovCisvKiB1c2VkIHdoZW4gZHBhZCBpcyBtYXBwZWQgdG8gYXhlcyAqLwogc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2Fic19wYWRbXSA9IHsKIAlBQlNfSEFUMFgsIEFCU19IQVQwWSwJLyogZC1wYWQgYXhlcyAqLwogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKy8qIHVzZWQgd2hlbiB0cmlnZ2VycyBhcmUgbWFwcGVkIHRvIGF4ZXMgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9hYnNfdHJpZ2dlcnNbXSA9IHsKKwlBQlNfWiwgQUJTX1JaLAkJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLworCS0xCit9OworCiAvKiBYYm94IDM2MCBoYXMgYSB2ZW5kb3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkKICAqIFVTQl9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Igc3Vic3lzdGVtKSwgc28gd2UKICAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdpcmVkIFhib3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLApAQCAtMjQ2LDcgKzI2MSw3IEBACiAKIAljaGFyIHBoeXNbNjRdOwkJCS8qIHBoeXNpY2FsIGRldmljZSBwYXRoICovCiAKLQlpbnQgZHBhZF9tYXBwaW5nOwkJLyogbWFwIGQtcGFkIHRvIGJ1dHRvbnMgb3IgdG8gYXhlcyAqLworCWludCBtYXBwaW5nOwkJCS8qIG1hcCBkLXBhZCB0byBidXR0b25zIG9yIHRvIGF4ZXMgKi8KIAlpbnQgeHR5cGU7CQkJLyogdHlwZSBvZiB4Ym94IGRldmljZSAqLwogfTsKIApAQCAtMjc3LDIwICsyOTIsMjUgQEAKIAkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7CiAKIAkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzEwXSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UTDIsIGRhdGFbMTBdKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUjIsIGRhdGFbMTFdKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbMTBdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCX0KIAogCS8qIGRpZ2l0YWwgcGFkICovCi0JaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19BWEVTKSB7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFgsCi0JCQkJICEhKGRhdGFbMl0gJiAweDA4KSAtICEhKGRhdGFbMl0gJiAweDA0KSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFksCi0JCQkJICEhKGRhdGFbMl0gJiAweDAyKSAtICEhKGRhdGFbMl0gJiAweDAxKSk7Ci0JfSBlbHNlIC8qIHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TICovIHsKKwlpZiAoeHBhZC0+bWFwcGluZyAmIE1BUF9EUEFEX1RPX0JVVFRPTlMpIHsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgZGF0YVsyXSAmIDB4MDQpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBkYXRhWzJdICYgMHgwOCk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgICAgIGRhdGFbMl0gJiAweDAxKTsgLyogdXAgKi8KIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCAgICAgZGF0YVsyXSAmIDB4MDIpOyAvKiBkb3duICovCisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKKwkJCQkgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKKwkJCQkgISEoZGF0YVsyXSAmIDB4MDIpIC0gISEoZGF0YVsyXSAmIDB4MDEpKTsKIAl9CiAKIAkvKiBzdGFydC9iYWNrIGJ1dHRvbnMgYW5kIHN0aWNrIHByZXNzIGxlZnQvcmlnaHQgKi8KQEAgLTMyOCwxNyArMzQ4LDE3IEBACiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0geHBhZC0+ZGV2OwogCiAJLyogZGlnaXRhbCBwYWQgKi8KLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpIHsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKLQkJCQkgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKLQkJCQkgISEoZGF0YVsyXSAmIDB4MDIpIC0gISEoZGF0YVsyXSAmIDB4MDEpKTsKLQl9IGVsc2UgaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TKSB7CisJaWYgKHhwYWQtPm1hcHBpbmcgJiBNQVBfRFBBRF9UT19CVVRUT05TKSB7CiAJCS8qIGRwYWQgYXMgYnV0dG9ucyAocmlnaHQsIGxlZnQsIGRvd24sIHVwKSAqLwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGRhdGFbMl0gJiAweDA0KTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgZGF0YVsyXSAmIDB4MDgpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIGRhdGFbMl0gJiAweDAxKTsJLyogdXAgKi8KIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCBkYXRhWzJdICYgMHgwMik7CS8qIGRvd24gKi8KKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLAorCQkJCSAhIShkYXRhWzJdICYgMHgwOCkgLSAhIShkYXRhWzJdICYgMHgwNCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBZLAorCQkJCSAhIShkYXRhWzJdICYgMHgwMikgLSAhIShkYXRhWzJdICYgMHgwMSkpOwogCX0KIAogCS8qIHN0YXJ0L2JhY2sgYnV0dG9ucyAqLwpAQCAtMzcxLDggKzM5MSwxMyBAQAogCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKIAogCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbNF0pOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlosIGRhdGFbNV0pOworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UTDIsIGRhdGFbNF0pOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSMiwgZGF0YVs1XSk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzRdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVs1XSk7CisJfQogCiAJaW5wdXRfc3luYyhkZXYpOwogfQpAQCAtNTA1LDcgKzUzMCw3IEBACiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pcnFfb3V0OwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCAmJiB4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YKQogCQlyZXR1cm4gMDsKIAogCXhwYWQtPm9kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCkBAIC01MzUsMTMgKzU2MCwxMyBAQAogCiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCB8fCB4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YKQogCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX291dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHhwYWRfZGVpbml0X291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7Ci0JaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHsKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCB8fCB4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YKSB7CiAJCXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfb3V0KTsKIAkJdXNiX2J1ZmZlcl9mcmVlKHhwYWQtPnVkZXYsIFhQQURfUEtUX0xFTiwKIAkJCQl4cGFkLT5vZGF0YSwgeHBhZC0+b2RhdGFfZG1hKTsKQEAgLTU1NCwyNCArNTc5LDQ1IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19KT1lTVElDS19YUEFEX0ZGCi1zdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3N0YXRpYyBpbnQgeHBhZF9wbGF5X2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGVmZmVjdC0+dHlwZSA9PSBGRl9SVU1CTEUpIHsKIAkJX191MTYgc3Ryb25nID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOwogCQlfX3UxNiB3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDg7Ci0JCXhwYWQtPm9kYXRhWzJdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbM10gPSBzdHJvbmcgLyAyNTY7Ci0JCXhwYWQtPm9kYXRhWzRdID0gd2VhayAvIDI1NjsKLQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzddID0gMHgwMDsKLQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7Ci0JCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmlycV9vdXQsIEdGUF9BVE9NSUMpOworCisJCXN3aXRjaCAoeHBhZC0+eHR5cGUpIHsKKworCQljYXNlIFhUWVBFX1hCT1g6CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDY7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVszXSA9IHN0cm9uZyAvIDI1NjsJLyogbGVmdCBhY3R1YXRvciAqLworCQkJeHBhZC0+b2RhdGFbNF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNV0gPSB3ZWFrIC8gMjU2OwkvKiByaWdodCBhY3R1YXRvciAqLworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDY7CisKKwkJCXJldHVybiB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfQVRPTUlDKTsKKworCQljYXNlIFhUWVBFX1hCT1gzNjA6CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDg7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVszXSA9IHN0cm9uZyAvIDI1NjsgIC8qIGxlZnQgYWN0dWF0b3I/ICovCisJCQl4cGFkLT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7CS8qIHJpZ2h0IGFjdHVhdG9yPyAqLworCQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbN10gPSAweDAwOworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwkJCXJldHVybiB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfQVRPTUlDKTsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIHJ1bWJsZSBjb21tYW5kIHNlbnQgdG8gdW5zdXBwb3J0ZWQgeHBhZCB0eXBlOiAlZCIsCisJCQkJX19mdW5jX18sIHhwYWQtPnh0eXBlKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNTc5LDcgKzYyNSw3IEBACiAKIHN0YXRpYyBpbnQgeHBhZF9pbml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCAmJiB4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YKQogCQlyZXR1cm4gMDsKIAogCWlucHV0X3NldF9jYXBhYmlsaXR5KHhwYWQtPmRldiwgRVZfRkYsIEZGX1JVTUJMRSk7CkBAIC03MTIsMTEgKzc1OCwxMSBAQAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgLTMyNzY4LCAzMjc2NywgMTYsIDEyOCk7CiAJCWJyZWFrOwogCWNhc2UgQUJTX1o6Ci0JY2FzZSBBQlNfUlo6CS8qIHRoZSB0cmlnZ2VycyAqLworCWNhc2UgQUJTX1JaOgkvKiB0aGUgdHJpZ2dlcnMgKGlmIG1hcHBlZCB0byBheGVzKSAqLwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgMCwgMjU1LCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBBQlNfSEFUMFg6Ci0JY2FzZSBBQlNfSEFUMFk6CS8qIHRoZSBkLXBhZCAob25seSBpZiBNQVBfRFBBRF9UT19BWEVTKSAqLworCWNhc2UgQUJTX0hBVDBZOgkvKiB0aGUgZC1wYWQgKG9ubHkgaWYgZHBhZCBpcyBtYXBwZWQgdG8gYXhlcyAqLwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgLTEsIDEsIDAsIDApOwogCQlicmVhazsKIAl9CkBAIC03NTIsMTAgKzc5OCw5IEBACiAJCWdvdG8gZmFpbDI7CiAKIAl4cGFkLT51ZGV2ID0gdWRldjsKLQl4cGFkLT5kcGFkX21hcHBpbmcgPSB4cGFkX2RldmljZVtpXS5kcGFkX21hcHBpbmc7CisJeHBhZC0+bWFwcGluZyA9IHhwYWRfZGV2aWNlW2ldLm1hcHBpbmc7CiAJeHBhZC0+eHR5cGUgPSB4cGFkX2RldmljZVtpXS54dHlwZTsKLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1VOS05PV04pCi0JCXhwYWQtPmRwYWRfbWFwcGluZyA9ICFkcGFkX3RvX2J1dHRvbnM7CisKIAlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfVU5LTk9XTikgewogCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgewogCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAxMjkpCkBAIC03NjQsNyArODA5LDEzIEBACiAJCQkJeHBhZC0+eHR5cGUgPSBYVFlQRV9YQk9YMzYwOwogCQl9IGVsc2UKIAkJCXhwYWQtPnh0eXBlID0gWFRZUEVfWEJPWDsKKworCQlpZiAoZHBhZF90b19idXR0b25zKQorCQkJeHBhZC0+bWFwcGluZyB8PSBNQVBfRFBBRF9UT19CVVRUT05TOworCQlpZiAodHJpZ2dlcnNfdG9fYnV0dG9ucykKKwkJCXhwYWQtPm1hcHBpbmcgfD0gTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlM7CiAJfQorCiAJeHBhZC0+ZGV2ID0gaW5wdXRfZGV2OwogCXVzYl9tYWtlX3BhdGgodWRldiwgeHBhZC0+cGh5cywgc2l6ZW9mKHhwYWQtPnBoeXMpKTsKIAlzdHJsY2F0KHhwYWQtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHhwYWQtPnBoeXMpKTsKQEAgLTc4MSwyNSArODMyLDM3IEBACiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAKLQkvKiBzZXQgdXAgYnV0dG9ucyAqLworCS8qIHNldCB1cCBzdGFuZGFyZCBidXR0b25zIGFuZCBheGVzICovCiAJZm9yIChpID0gMDsgeHBhZF9jb21tb25fYnRuW2ldID49IDA7IGkrKykKLQkJc2V0X2JpdCh4cGFkX2NvbW1vbl9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlpZiAoKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHx8ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykpCi0JCWZvciAoaSA9IDA7IHhwYWQzNjBfYnRuW2ldID49IDA7IGkrKykKLQkJCXNldF9iaXQoeHBhZDM2MF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQllbHNlCi0JCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKLQkJCXNldF9iaXQoeHBhZF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0JVVFRPTlMpCi0JCWZvciAoaSA9IDA7IHhwYWRfYnRuX3BhZFtpXSA+PSAwOyBpKyspCi0JCQlzZXRfYml0KHhwYWRfYnRuX3BhZFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoeHBhZF9jb21tb25fYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKLQkvKiBzZXQgdXAgYXhlcyAqLwogCWZvciAoaSA9IDA7IHhwYWRfYWJzW2ldID49IDA7IGkrKykKIAkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNbaV0pOwotCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQVhFUykKKworCS8qIE5vdyBzZXQgdXAgbW9kZWwtc3BlY2lmaWMgb25lcyAqLworCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwIHx8IHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7CisJCWZvciAoaSA9IDA7IHhwYWQzNjBfYnRuW2ldID49IDA7IGkrKykKKwkJCV9fc2V0X2JpdCh4cGFkMzYwX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKKwkJCV9fc2V0X2JpdCh4cGFkX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0KKworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX0RQQURfVE9fQlVUVE9OUykgeworCQlmb3IgKGkgPSAwOyB4cGFkX2J0bl9wYWRbaV0gPj0gMDsgaSsrKQorCQkJX19zZXRfYml0KHhwYWRfYnRuX3BhZFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IHhwYWRfYWJzX3BhZFtpXSA+PSAwOyBpKyspCiAJCSAgICB4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fic19wYWRbaV0pOworCX0KKworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJZm9yIChpID0gMDsgeHBhZF9idG5fdHJpZ2dlcnNbaV0gPj0gMDsgaSsrKQorCQkJX19zZXRfYml0KHhwYWRfYnRuX3RyaWdnZXJzW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgeHBhZF9hYnNfdHJpZ2dlcnNbaV0gPj0gMDsgaSsrKQorCQkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNfdHJpZ2dlcnNbaV0pOworCX0KIAogCWVycm9yID0geHBhZF9pbml0X291dHB1dChpbnRmLCB4cGFkKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggMDJjODM2ZS4uNjRjMTAyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMzUsMTAgKzM1LDEwIEBACiAJICBiZSBjYWxsZWQgYWRwNTUyMC1rZXlzLgogCiBjb25maWcgS0VZQk9BUkRfQURQNTU4OAotCXRyaXN0YXRlICJBRFA1NTg4IEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlciIKKwl0cmlzdGF0ZSAiQURQNTU4OC84NyBJMkMgUVdFUlRZIEtleXBhZCBhbmQgSU8gRXhwYW5kZXIiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFEUDU1ODggYXR0YWNoZWQgdG8geW91cgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBBRFA1NTg4Lzg3IGF0dGFjaGVkIHRvIHlvdXIKIAkgIHN5c3RlbSBJMkMgYnVzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKQEAgLTE0NCwxMyArMTQ0LDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmY1NHgta2V5cy4KIAogY29uZmlnIEtFWUJPQVJEX0NPUkdJCi0JdHJpc3RhdGUgIkNvcmdpIGtleWJvYXJkIgorCXRyaXN0YXRlICJDb3JnaSBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXlib2FyZCBvbiB0aGUgU2hhcnAgWmF1cnVzIFNMLUM3eHgKIAkgIHNlcmllcyBvZiBQREFzLgogCisJICBUaGlzIGRyaXZlciBpcyBub3cgZGVwcmVjYXRlZCwgdXNlIGdlbmVyaWMgR1BJTyBiYXNlZCBtYXRyaXgKKwkgIGtleWJvYXJkIGRyaXZlciBpbnN0ZWFkLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjb3JnaWtiZC4KIApAQCAtMjkyLDYgKzI5NCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWF4NzM1OV9rZXlwYWQuCiAKK2NvbmZpZyBLRVlCT0FSRF9JTVgKKwl0cmlzdGF0ZSAiSU1YIGtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NWEMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgSU1YIGtleXBhZCBwb3J0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXhfa2V5cGFkLgorCiBjb25maWcgS0VZQk9BUkRfTkVXVE9OCiAJdHJpc3RhdGUgIk5ld3RvbiBrZXlib2FyZCIKIAlzZWxlY3QgU0VSSU8KQEAgLTMyOSwxMyArMzQwLDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHhhOTMwX3JvdGFyeS4KIAogY29uZmlnIEtFWUJPQVJEX1NQSVRaCi0JdHJpc3RhdGUgIlNwaXR6IGtleWJvYXJkIgorCXRyaXN0YXRlICJTcGl0eiBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXlib2FyZCBvbiB0aGUgU2hhcnAgWmF1cnVzIFNMLUMxMDAwLAogCSAgU0wtQzMwMDAgYW5kIFNsLUMzMTAwIHNlcmllcyBvZiBQREFzLgogCisJICBUaGlzIGRyaXZlciBpcyBub3cgZGVwcmVjYXRlZCwgdXNlIGdlbmVyaWMgR1BJTyBiYXNlZCBtYXRyaXgKKwkgIGtleWJvYXJkIGRyaXZlciBpbnN0ZWFkLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGl0emtiZC4KIApAQCAtMzYzLDcgKzM3Niw3IEBACiAKIGNvbmZpZyBLRVlCT0FSRF9TSF9LRVlTQwogCXRyaXN0YXRlICJTdXBlckggS0VZU0Mga2V5cGFkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTVVBFUkgKKwlkZXBlbmRzIG9uIFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBrZXlwYWQgYXR0YWNoZWQgdG8gdGhlIEtFWVNDIGJsb2NrCiAJICBvbiBTdXBlckggcHJvY2Vzc29ycyBzdWNoIGFzIHNoNzcyMiBhbmQgc2g3MzQzLgpAQCAtNDAyLDEyICs0MTUsMTQgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0d2w0MDMwX2tleXBhZC4KIAogY29uZmlnIEtFWUJPQVJEX1RPU0EKLQl0cmlzdGF0ZSAiVG9zYSBrZXlib2FyZCIKKwl0cmlzdGF0ZSAiVG9zYSBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBNQUNIX1RPU0EKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2V5Ym9hcmQgb24gdGhlIFNoYXJwIFphdXJ1cyBTTC02MDAweCAoVG9zYSkKIAorCSAgVGhpcyBkcml2ZXIgaXMgbm93IGRlcHJlY2F0ZWQsIHVzZSBnZW5lcmljIEdQSU8gYmFzZWQgbWF0cml4CisJICBrZXlib2FyZCBkcml2ZXIgaW5zdGVhZC4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG9zYWtiZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNzg2NTRlZi4uNzA2YzZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfR1BJTykJCSs9IGdwaW9fa2V5cy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMKQkJKz0gaGlsX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMX09MRCkJCSs9IGhpbGtiZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfSU1YKQkJKz0gaW14X2tleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSFA2WFgpCQkrPSBqb3JuYWRhNjgwX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSFA3WFgpCQkrPSBqb3JuYWRhNzIwX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfTEtLQkQpCQkrPSBsa2tiZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYwppbmRleCAxZWRiNTk2Li5iNTE0MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWRwNTU4OC1rZXlzLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogRmlsZTogZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4X2tleXMuYwotICogRGVzY3JpcHRpb246ICBrZXlwYWQgZHJpdmVyIGZvciBBRFA1NTg4IEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlcgorICogRGVzY3JpcHRpb246ICBrZXlwYWQgZHJpdmVyIGZvciBBRFA1NTg4IGFuZCBBRFA1NTg3CisgKgkJIEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlcgogICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgpAQCAtMzI3LDYgKzMyOCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHA1NTg4X2lkW10gPSB7CiAJeyBLQlVJTERfTU9ETkFNRSwgMCB9LAorCXsgImFkcDU1ODcta2V5cyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWRwNTU4OF9pZCk7CkBAIC0zNTcsNSArMzU5LDUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQURQNTU4OCBLZXlwYWQgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFEUDU1ODgvODcgS2V5cGFkIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTg4LWtleXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCA3YjQwNTYyLi5kMzU4ZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC00MCwyNiArNDAsMjYgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc2V0LCAiU2VsZWN0IGtleWJvYXJkIGNvZGUgc2V0ICgyID0gZGVmYXVsdCwgMyA9IFBTLzIgbmF0aXZlKSIpOwogCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faHBwYV9fKQotc3RhdGljIGludCBhdGtiZF9yZXNldDsKK3N0YXRpYyBib29sIGF0a2JkX3Jlc2V0OwogI2Vsc2UKLXN0YXRpYyBpbnQgYXRrYmRfcmVzZXQgPSAxOworc3RhdGljIGJvb2wgYXRrYmRfcmVzZXQgPSB0cnVlOwogI2VuZGlmCiBtb2R1bGVfcGFyYW1fbmFtZWQocmVzZXQsIGF0a2JkX3Jlc2V0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBrZXlib2FyZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24iKTsKIAotc3RhdGljIGludCBhdGtiZF9zb2Z0cmVwZWF0Oworc3RhdGljIGJvb2wgYXRrYmRfc29mdHJlcGVhdDsKIG1vZHVsZV9wYXJhbV9uYW1lZChzb2Z0cmVwZWF0LCBhdGtiZF9zb2Z0cmVwZWF0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc29mdHJlcGVhdCwgIlVzZSBzb2Z0d2FyZSBrZXlib2FyZCByZXBlYXQiKTsKIAotc3RhdGljIGludCBhdGtiZF9zb2Z0cmF3ID0gMTsKK3N0YXRpYyBib29sIGF0a2JkX3NvZnRyYXcgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKHNvZnRyYXcsIGF0a2JkX3NvZnRyYXcsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzb2Z0cmF3LCAiVXNlIHNvZnR3YXJlIGdlbmVyYXRlZCByYXdtb2RlIik7CiAKLXN0YXRpYyBpbnQgYXRrYmRfc2Nyb2xsOworc3RhdGljIGJvb2wgYXRrYmRfc2Nyb2xsOwogbW9kdWxlX3BhcmFtX25hbWVkKHNjcm9sbCwgYXRrYmRfc2Nyb2xsLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2Nyb2xsLCAiRW5hYmxlIHNjcm9sbC13aGVlbCBvbiBNUyBPZmZpY2UgYW5kIHNpbWlsYXIga2V5Ym9hcmRzIik7CiAKLXN0YXRpYyBpbnQgYXRrYmRfZXh0cmE7CitzdGF0aWMgYm9vbCBhdGtiZF9leHRyYTsKIG1vZHVsZV9wYXJhbV9uYW1lZChleHRyYSwgYXRrYmRfZXh0cmEsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhleHRyYSwgIkVuYWJsZSBleHRyYSBMRURzIGFuZCBrZXlzIG9uIElCTSBSYXBpZEFjY2VzLCBFektleSBhbmQgc2ltaWxhciBrZXlib2FyZHMiKTsKIApAQCAtMTUzLDE2ICsxNTMsMTYgQEAKICNkZWZpbmUgQVRLQkRfUkVUX0hBTkdFVUwJMHhmMgogI2RlZmluZSBBVEtCRF9SRVRfRVJSCQkweGZmCiAKLSNkZWZpbmUgQVRLQkRfS0VZX1VOS05PV04JICAwCisjZGVmaW5lIEFUS0JEX0tFWV9VTktOT1dOCTAKICNkZWZpbmUgQVRLQkRfS0VZX05VTEwJCTI1NQogCi0jZGVmaW5lIEFUS0JEX1NDUl8xCQkyNTQKLSNkZWZpbmUgQVRLQkRfU0NSXzIJCTI1MwotI2RlZmluZSBBVEtCRF9TQ1JfNAkJMjUyCi0jZGVmaW5lIEFUS0JEX1NDUl84CQkyNTEKLSNkZWZpbmUgQVRLQkRfU0NSX0NMSUNLCQkyNTAKLSNkZWZpbmUgQVRLQkRfU0NSX0xFRlQJCTI0OQotI2RlZmluZSBBVEtCRF9TQ1JfUklHSFQJCTI0OAorI2RlZmluZSBBVEtCRF9TQ1JfMQkJMHhmZmZlCisjZGVmaW5lIEFUS0JEX1NDUl8yCQkweGZmZmQKKyNkZWZpbmUgQVRLQkRfU0NSXzQJCTB4ZmZmYworI2RlZmluZSBBVEtCRF9TQ1JfOAkJMHhmZmZiCisjZGVmaW5lIEFUS0JEX1NDUl9DTElDSwkJMHhmZmZhCisjZGVmaW5lIEFUS0JEX1NDUl9MRUZUCQkweGZmZjkKKyNkZWZpbmUgQVRLQkRfU0NSX1JJR0hUCQkweGZmZjgKIAogI2RlZmluZSBBVEtCRF9TUEVDSUFMCQlBVEtCRF9TQ1JfUklHSFQKIApAQCAtMTc3LDcgKzE3Nyw3IEBACiAjZGVmaW5lIEFUS0JEX1hMX0hBTkpBCQkweDIwCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIga2V5Y29kZTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlOwogCXVuc2lnbmVkIGNoYXIgc2V0MjsKIH0gYXRrYmRfc2Nyb2xsX2tleXNbXSA9IHsKIAl7IEFUS0JEX1NDUl8xLCAgICAgMHhjNSB9LApAQCAtMjA2LDE4ICsyMDYsMTggQEAKIAl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0FUS0JEX0tFWU1BUF9TSVpFXTsKIAlERUNMQVJFX0JJVE1BUChmb3JjZV9yZWxlYXNlX21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKIAl1bnNpZ25lZCBjaGFyIHNldDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zbGF0ZWQ7Ci0JdW5zaWduZWQgY2hhciBleHRyYTsKLQl1bnNpZ25lZCBjaGFyIHdyaXRlOwotCXVuc2lnbmVkIGNoYXIgc29mdHJlcGVhdDsKLQl1bnNpZ25lZCBjaGFyIHNvZnRyYXc7Ci0JdW5zaWduZWQgY2hhciBzY3JvbGw7Ci0JdW5zaWduZWQgY2hhciBlbmFibGVkOworCWJvb2wgdHJhbnNsYXRlZDsKKwlib29sIGV4dHJhOworCWJvb2wgd3JpdGU7CisJYm9vbCBzb2Z0cmVwZWF0OworCWJvb2wgc29mdHJhdzsKKwlib29sIHNjcm9sbDsKKwlib29sIGVuYWJsZWQ7CiAKIAkvKiBBY2Nlc3NlZCBvbmx5IGZyb20gaW50ZXJydXB0ICovCiAJdW5zaWduZWQgY2hhciBlbXVsOwotCXVuc2lnbmVkIGNoYXIgcmVzZW5kOwotCXVuc2lnbmVkIGNoYXIgcmVsZWFzZTsKKwlib29sIHJlc2VuZDsKKwlib29sIHJlbGVhc2U7CiAJdW5zaWduZWQgbG9uZyB4bF9iaXQ7CiAJdW5zaWduZWQgaW50IGxhc3Q7CiAJdW5zaWduZWQgbG9uZyB0aW1lOwpAQCAtMzAxLDE4ICszMDEsMTggQEAKICAqIENoZWNrcyBpZiB3ZSBzaG91bGQgbWFuZ2xlIHRoZSBzY2FuY29kZSB0byBleHRyYWN0ICdyZWxlYXNlJyBiaXQKICAqIGluIHRyYW5zbGF0ZWQgbW9kZS4KICAqLwotc3RhdGljIGludCBhdGtiZF9uZWVkX3hsYXRlKHVuc2lnbmVkIGxvbmcgeGxfYml0LCB1bnNpZ25lZCBjaGFyIGNvZGUpCitzdGF0aWMgYm9vbCBhdGtiZF9uZWVkX3hsYXRlKHVuc2lnbmVkIGxvbmcgeGxfYml0LCB1bnNpZ25lZCBjaGFyIGNvZGUpCiB7CiAJaW50IGk7CiAKIAlpZiAoY29kZSA9PSBBVEtCRF9SRVRfRU1VTDAgfHwgY29kZSA9PSBBVEtCRF9SRVRfRU1VTDEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4bF90YWJsZSk7IGkrKykKIAkJaWYgKGNvZGUgPT0geGxfdGFibGVbaV0pCiAJCQlyZXR1cm4gdGVzdF9iaXQoaSwgJnhsX2JpdCk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTM1OSw3ICszNTksNyBAQAogICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGtiZF9pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbywgdW5zaWduZWQgY2hhciBkYXRhLAotCQkJdW5zaWduZWQgaW50IGZsYWdzKQorCQkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYXRrYmQgKmF0a2JkID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGF0a2JkLT5kZXY7CkBAIC0zNjgsMjAgKzM2OCwxOCBAQAogCWludCB2YWx1ZTsKIAl1bnNpZ25lZCBzaG9ydCBrZXljb2RlOwogCi0jaWZkZWYgQVRLQkRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYXRrYmQuYzogUmVjZWl2ZWQgJTAyeCBmbGFncyAlMDJ4XG4iLCBkYXRhLCBmbGFncyk7Ci0jZW5kaWYKKwlkZXZfZGJnKCZzZXJpby0+ZGV2LCAiUmVjZWl2ZWQgJTAyeCBmbGFncyAlMDJ4XG4iLCBkYXRhLCBmbGFncyk7CiAKICNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQgKF9feDg2XzY0X18pCiAJaWYgKChmbGFncyAmIChTRVJJT19GUkFNRSB8IFNFUklPX1BBUklUWSkpICYmICh+ZmxhZ3MgJiBTRVJJT19USU1FT1VUKSAmJiAhYXRrYmQtPnJlc2VuZCAmJiBhdGtiZC0+d3JpdGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRrYmQuYzogZnJhbWUvcGFyaXR5IGVycm9yOiAlMDJ4XG4iLCBmbGFncyk7CisJCWRldl93YXJuKCZzZXJpby0+ZGV2LCAiRnJhbWUvcGFyaXR5IGVycm9yOiAlMDJ4XG4iLCBmbGFncyk7CiAJCXNlcmlvX3dyaXRlKHNlcmlvLCBBVEtCRF9DTURfUkVTRU5EKTsKLQkJYXRrYmQtPnJlc2VuZCA9IDE7CisJCWF0a2JkLT5yZXNlbmQgPSB0cnVlOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIWZsYWdzICYmIGRhdGEgPT0gQVRLQkRfUkVUX0FDSykKLQkJYXRrYmQtPnJlc2VuZCA9IDA7CisJCWF0a2JkLT5yZXNlbmQgPSBmYWxzZTsKICNlbmRpZgogCiAJaWYgKHVubGlrZWx5KGF0a2JkLT5wczJkZXYuZmxhZ3MgJiBQUzJfRkxBR19BQ0spKQpAQCAtNDEyLDMyICs0MTAsMzIgQEAKIAl9CiAKIAlzd2l0Y2ggKGNvZGUpIHsKLQkJY2FzZSBBVEtCRF9SRVRfQkFUOgotCQkJYXRrYmQtPmVuYWJsZWQgPSAwOwotCQkJc2VyaW9fcmVjb25uZWN0KGF0a2JkLT5wczJkZXYuc2VyaW8pOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX0VNVUwwOgotCQkJYXRrYmQtPmVtdWwgPSAxOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX0VNVUwxOgotCQkJYXRrYmQtPmVtdWwgPSAyOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX1JFTEVBU0U6Ci0JCQlhdGtiZC0+cmVsZWFzZSA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJY2FzZSBBVEtCRF9SRVRfQUNLOgotCQljYXNlIEFUS0JEX1JFVF9OQUs6Ci0JCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0a2JkLmM6IFNwdXJpb3VzICVzIG9uICVzLiAiCi0JCQkJICAgICAgICJTb21lIHByb2dyYW0gbWlnaHQgYmUgdHJ5aW5nIGFjY2VzcyBoYXJkd2FyZSBkaXJlY3RseS5cbiIsCi0JCQkJICAgICAgIGRhdGEgPT0gQVRLQkRfUkVUX0FDSyA/ICJBQ0siIDogIk5BSyIsIHNlcmlvLT5waHlzKTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIEFUS0JEX1JFVF9FUlI6Ci0JCQlhdGtiZC0+ZXJyX2NvdW50Kys7Ci0jaWZkZWYgQVRLQkRfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJhdGtiZC5jOiBLZXlib2FyZCBvbiAlcyByZXBvcnRzIHRvbyBtYW55IGtleXMgcHJlc3NlZC5cbiIsIHNlcmlvLT5waHlzKTsKLSNlbmRpZgotCQkJZ290byBvdXQ7CisJY2FzZSBBVEtCRF9SRVRfQkFUOgorCQlhdGtiZC0+ZW5hYmxlZCA9IGZhbHNlOworCQlzZXJpb19yZWNvbm5lY3QoYXRrYmQtPnBzMmRldi5zZXJpbyk7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX0VNVUwwOgorCQlhdGtiZC0+ZW11bCA9IDE7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX0VNVUwxOgorCQlhdGtiZC0+ZW11bCA9IDI7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX1JFTEVBU0U6CisJCWF0a2JkLT5yZWxlYXNlID0gdHJ1ZTsKKwkJZ290byBvdXQ7CisJY2FzZSBBVEtCRF9SRVRfQUNLOgorCWNhc2UgQVRLQkRfUkVUX05BSzoKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZzZXJpby0+ZGV2LAorCQkJCSAiU3B1cmlvdXMgJXMgb24gJXMuICIKKwkJCQkgIlNvbWUgcHJvZ3JhbSBtaWdodCBiZSB0cnlpbmcgYWNjZXNzIGhhcmR3YXJlIGRpcmVjdGx5LlxuIiwKKwkJCQkgZGF0YSA9PSBBVEtCRF9SRVRfQUNLID8gIkFDSyIgOiAiTkFLIiwgc2VyaW8tPnBoeXMpOworCQlnb3RvIG91dDsKKwljYXNlIEFUS0JEX1JFVF9FUlI6CisJCWF0a2JkLT5lcnJfY291bnQrKzsKKwkJZGV2X2RiZygmc2VyaW8tPmRldiwgIktleWJvYXJkIG9uICVzIHJlcG9ydHMgdG9vIG1hbnkga2V5cyBwcmVzc2VkLlxuIiwKKwkJCXNlcmlvLT5waHlzKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJY29kZSA9IGF0a2JkX2NvbXBhdF9zY2FuY29kZShhdGtiZCwgY29kZSk7CkBAIC00NTEsNzEgKzQ0OSw3MiBAQAogCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCiAJc3dpdGNoIChrZXljb2RlKSB7Ci0JCWNhc2UgQVRLQkRfS0VZX05VTEw6Ci0JCQlicmVhazsKLQkJY2FzZSBBVEtCRF9LRVlfVU5LTk9XTjoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiYXRrYmQuYzogVW5rbm93biBrZXkgJXMgKCVzIHNldCAlZCwgY29kZSAlI3ggb24gJXMpLlxuIiwKLQkJCSAgICAgICBhdGtiZC0+cmVsZWFzZSA/ICJyZWxlYXNlZCIgOiAicHJlc3NlZCIsCi0JCQkgICAgICAgYXRrYmQtPnRyYW5zbGF0ZWQgPyAidHJhbnNsYXRlZCIgOiAicmF3IiwKLQkJCSAgICAgICBhdGtiZC0+c2V0LCBjb2RlLCBzZXJpby0+cGh5cyk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImF0a2JkLmM6IFVzZSAnc2V0a2V5Y29kZXMgJXMlMDJ4IDxrZXljb2RlPicgdG8gbWFrZSBpdCBrbm93bi5cbiIsCi0JCQkgICAgICAgY29kZSAmIDB4ODAgPyAiZTAiIDogIiIsIGNvZGUgJiAweDdmKTsKLQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl8xOgotCQkJc2Nyb2xsID0gMSAtIGF0a2JkLT5yZWxlYXNlICogMjsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl8yOgotCQkJc2Nyb2xsID0gMiAtIGF0a2JkLT5yZWxlYXNlICogNDsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl80OgotCQkJc2Nyb2xsID0gNCAtIGF0a2JkLT5yZWxlYXNlICogODsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl84OgotCQkJc2Nyb2xsID0gOCAtIGF0a2JkLT5yZWxlYXNlICogMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEtCRF9TQ1JfQ0xJQ0s6Ci0JCQljbGljayA9ICFhdGtiZC0+cmVsZWFzZTsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl9MRUZUOgotCQkJaHNjcm9sbCA9IC0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRLQkRfU0NSX1JJR0hUOgotCQkJaHNjcm9sbCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChhdGtiZC0+cmVsZWFzZSkgewotCQkJCXZhbHVlID0gMDsKLQkJCQlhdGtiZC0+bGFzdCA9IDA7Ci0JCQl9IGVsc2UgaWYgKCFhdGtiZC0+c29mdHJlcGVhdCAmJiB0ZXN0X2JpdChrZXljb2RlLCBkZXYtPmtleSkpIHsKLQkJCQkvKiBXb3JrYXJvdW5kIFRvc2hpYmEgbGFwdG9wIG11bHRpcGxlIGtleXByZXNzICovCi0JCQkJdmFsdWUgPSB0aW1lX2JlZm9yZShqaWZmaWVzLCBhdGtiZC0+dGltZSkgJiYgYXRrYmQtPmxhc3QgPT0gY29kZSA/IDEgOiAyOwotCQkJfSBlbHNlIHsKLQkJCQl2YWx1ZSA9IDE7Ci0JCQkJYXRrYmQtPmxhc3QgPSBjb2RlOwotCQkJCWF0a2JkLT50aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoZGV2LT5yZXBbUkVQX0RFTEFZXSkgLyAyOwotCQkJfQorCWNhc2UgQVRLQkRfS0VZX05VTEw6CisJCWJyZWFrOworCWNhc2UgQVRLQkRfS0VZX1VOS05PV046CisJCWRldl93YXJuKCZzZXJpby0+ZGV2LAorCQkJICJVbmtub3duIGtleSAlcyAoJXMgc2V0ICVkLCBjb2RlICUjeCBvbiAlcykuXG4iLAorCQkJIGF0a2JkLT5yZWxlYXNlID8gInJlbGVhc2VkIiA6ICJwcmVzc2VkIiwKKwkJCSBhdGtiZC0+dHJhbnNsYXRlZCA/ICJ0cmFuc2xhdGVkIiA6ICJyYXciLAorCQkJIGF0a2JkLT5zZXQsIGNvZGUsIHNlcmlvLT5waHlzKTsKKwkJZGV2X3dhcm4oJnNlcmlvLT5kZXYsCisJCQkgIlVzZSAnc2V0a2V5Y29kZXMgJXMlMDJ4IDxrZXljb2RlPicgdG8gbWFrZSBpdCBrbm93bi5cbiIsCisJCQkgY29kZSAmIDB4ODAgPyAiZTAiIDogIiIsIGNvZGUgJiAweDdmKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl8xOgorCQlzY3JvbGwgPSAxOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl8yOgorCQlzY3JvbGwgPSAyOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl80OgorCQlzY3JvbGwgPSA0OworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl84OgorCQlzY3JvbGwgPSA4OworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl9DTElDSzoKKwkJY2xpY2sgPSAhYXRrYmQtPnJlbGVhc2U7CisJCWJyZWFrOworCWNhc2UgQVRLQkRfU0NSX0xFRlQ6CisJCWhzY3JvbGwgPSAtMTsKKwkJYnJlYWs7CisJY2FzZSBBVEtCRF9TQ1JfUklHSFQ6CisJCWhzY3JvbGwgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoYXRrYmQtPnJlbGVhc2UpIHsKKwkJCXZhbHVlID0gMDsKKwkJCWF0a2JkLT5sYXN0ID0gMDsKKwkJfSBlbHNlIGlmICghYXRrYmQtPnNvZnRyZXBlYXQgJiYgdGVzdF9iaXQoa2V5Y29kZSwgZGV2LT5rZXkpKSB7CisJCQkvKiBXb3JrYXJvdW5kIFRvc2hpYmEgbGFwdG9wIG11bHRpcGxlIGtleXByZXNzICovCisJCQl2YWx1ZSA9IHRpbWVfYmVmb3JlKGppZmZpZXMsIGF0a2JkLT50aW1lKSAmJiBhdGtiZC0+bGFzdCA9PSBjb2RlID8gMSA6IDI7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSA9IDE7CisJCQlhdGtiZC0+bGFzdCA9IGNvZGU7CisJCQlhdGtiZC0+dGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRldi0+cmVwW1JFUF9ERUxBWV0pIC8gMjsKKwkJfQogCi0JCQlpbnB1dF9ldmVudChkZXYsIEVWX0tFWSwga2V5Y29kZSwgdmFsdWUpOwotCQkJaW5wdXRfc3luYyhkZXYpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX0tFWSwga2V5Y29kZSwgdmFsdWUpOworCQlpbnB1dF9zeW5jKGRldik7CiAKLQkJCWlmICh2YWx1ZSAmJiB0ZXN0X2JpdChjb2RlLCBhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrKSkgewotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKLQkJCQlpbnB1dF9zeW5jKGRldik7Ci0JCQl9CisJCWlmICh2YWx1ZSAmJiB0ZXN0X2JpdChjb2RlLCBhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDApOworCQkJaW5wdXRfc3luYyhkZXYpOworCQl9CiAJfQogCiAJaWYgKGF0a2JkLT5zY3JvbGwpIHsKIAkJaWYgKGNsaWNrICE9IC0xKQogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGNsaWNrKTsKLQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgc2Nyb2xsKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwKKwkJCQkgYXRrYmQtPnJlbGVhc2UgPyAtc2Nyb2xsIDogc2Nyb2xsKTsKIAkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9IV0hFRUwsIGhzY3JvbGwpOwogCQlpbnB1dF9zeW5jKGRldik7CiAJfQogCi0JYXRrYmQtPnJlbGVhc2UgPSAwOworCWF0a2JkLT5yZWxlYXNlID0gZmFsc2U7CiBvdXQ6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNjM0LDE3ICs2MzMsMTggQEAKIAogCXN3aXRjaCAodHlwZSkgewogCi0JCWNhc2UgRVZfTEVEOgotCQkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfTEVEX0VWRU5UX0JJVCk7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIEVWX0xFRDoKKwkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfTEVEX0VWRU5UX0JJVCk7CisJCXJldHVybiAwOwogCi0JCWNhc2UgRVZfUkVQOgotCQkJaWYgKCFhdGtiZC0+c29mdHJlcGVhdCkKLQkJCQlhdGtiZF9zY2hlZHVsZV9ldmVudF93b3JrKGF0a2JkLCBBVEtCRF9SRVBfRVZFTlRfQklUKTsKLQkJCXJldHVybiAwOworCWNhc2UgRVZfUkVQOgorCQlpZiAoIWF0a2JkLT5zb2Z0cmVwZWF0KQorCQkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfUkVQX0VWRU5UX0JJVCk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOwogCX0KLQotCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTY1NSw3ICs2NTUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0a2JkX2VuYWJsZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXNlcmlvX3BhdXNlX3J4KGF0a2JkLT5wczJkZXYuc2VyaW8pOwotCWF0a2JkLT5lbmFibGVkID0gMTsKKwlhdGtiZC0+ZW5hYmxlZCA9IHRydWU7CiAJc2VyaW9fY29udGludWVfcngoYXRrYmQtPnBzMmRldi5zZXJpbyk7CiB9CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0a2JkX2Rpc2FibGUoc3RydWN0IGF0a2JkICphdGtiZCkKIHsKIAlzZXJpb19wYXVzZV9yeChhdGtiZC0+cHMyZGV2LnNlcmlvKTsKLQlhdGtiZC0+ZW5hYmxlZCA9IDA7CisJYXRrYmQtPmVuYWJsZWQgPSBmYWxzZTsKIAlzZXJpb19jb250aW51ZV9yeChhdGtiZC0+cHMyZGV2LnNlcmlvKTsKIH0KIApAQCAtNjg4LDcgKzY4OCw5IEBACiAKIAlpZiAoYXRrYmRfcmVzZXQpCiAJCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIEFUS0JEX0NNRF9SRVNFVF9CQVQpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRrYmQuYzoga2V5Ym9hcmQgcmVzZXQgZmFpbGVkIG9uICVzXG4iLCBwczJkZXYtPnNlcmlvLT5waHlzKTsKKwkJCWRldl93YXJuKCZwczJkZXYtPnNlcmlvLT5kZXYsCisJCQkJICJrZXlib2FyZCByZXNldCBmYWlsZWQgb24gJXNcbiIsCisJCQkJIHBzMmRldi0+c2VyaW8tPnBoeXMpOwogCiAvKgogICogVGhlbiB3ZSBjaGVjayB0aGUga2V5Ym9hcmQgSUQuIFdlIHNob3VsZCBnZXQgMHhhYjgzIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLgpAQCAtNzE4LDggKzcyMCw5IEBACiAJYXRrYmQtPmlkID0gKHBhcmFtWzBdIDw8IDgpIHwgcGFyYW1bMV07CiAKIAlpZiAoYXRrYmQtPmlkID09IDB4YWNhMSAmJiBhdGtiZC0+dHJhbnNsYXRlZCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0a2JkLmM6IE5DRCB0ZXJtaW5hbCBrZXlib2FyZHMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIG5vbi10cmFuc2xhdGluZ1xuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRrYmQuYzogY29udHJvbGxlcnMuIFVzZSBpODA0Mi5kaXJlY3Q9MSB0byBkaXNhYmxlIHRyYW5zbGF0aW9uLlxuIik7CisJCWRldl9lcnIoJnBzMmRldi0+c2VyaW8tPmRldiwKKwkJCSJOQ0QgdGVybWluYWwga2V5Ym9hcmRzIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiBub24tdHJhbnNsYXRpbmcgY29udHJvbGVscnMuICIKKwkJCSJVc2UgaTgwNDIuZGlyZWN0PTEgdG8gZGlzYWJsZSB0cmFuc2xhdGlvbi5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03MzcsNyArNzQwLDcgQEAKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwogCi0JYXRrYmQtPmV4dHJhID0gMDsKKwlhdGtiZC0+ZXh0cmEgPSBmYWxzZTsKIC8qCiAgKiBGb3Iga25vd24gc3BlY2lhbCBrZXlib2FyZHMgd2UgY2FuIGdvIGFoZWFkIGFuZCBzZXQgdGhlIGNvcnJlY3Qgc2V0LgogICogV2UgY2hlY2sgZm9yIE5DRCBQUy8yIFN1biwgTm9ydGhHYXRlIE9tbmlLZXkgMTAxIGFuZApAQCAtNzU2LDcgKzc1OSw3IEBACiAJaWYgKGFsbG93X2V4dHJhKSB7CiAJCXBhcmFtWzBdID0gMHg3MTsKIAkJaWYgKCFwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfRVhfRU5BQkxFKSkgewotCQkJYXRrYmQtPmV4dHJhID0gMTsKKwkJCWF0a2JkLT5leHRyYSA9IHRydWU7CiAJCQlyZXR1cm4gMjsKIAkJfQogCX0KQEAgLTgyMSw3ICs4MjQsOCBAQAogICovCiAKIAlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCBBVEtCRF9DTURfRU5BQkxFKSkgewotCQlwcmludGsoS0VSTl9FUlIgImF0a2JkLmM6IEZhaWxlZCB0byBlbmFibGUga2V5Ym9hcmQgb24gJXNcbiIsCisJCWRldl9lcnIoJnBzMmRldi0+c2VyaW8tPmRldiwKKwkJCSJGYWlsZWQgdG8gZW5hYmxlIGtleWJvYXJkIG9uICVzXG4iLAogCQkJcHMyZGV2LT5zZXJpby0+cGh5cyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMDcwLDkgKzEwNzQsMTMgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGF0a2JkX3NldDJfa2V5Y29kZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVRLQkRfS0VZTUFQX1NJWkU7IGkrKykKLQkJaWYgKGF0a2JkLT5rZXljb2RlW2ldICYmIGF0a2JkLT5rZXljb2RlW2ldIDwgQVRLQkRfU1BFQ0lBTCkKKwlmb3IgKGkgPSAwOyBpIDwgQVRLQkRfS0VZTUFQX1NJWkU7IGkrKykgeworCQlpZiAoYXRrYmQtPmtleWNvZGVbaV0gIT0gS0VZX1JFU0VSVkVEICYmCisJCSAgICBhdGtiZC0+a2V5Y29kZVtpXSAhPSBBVEtCRF9LRVlfTlVMTCAmJgorCQkgICAgYXRrYmQtPmtleWNvZGVbaV0gPCBBVEtCRF9TUEVDSUFMKSB7CiAJCQlfX3NldF9iaXQoYXRrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJfQorCX0KIH0KIAogLyoKQEAgLTExMDAsMTIgKzExMDgsMTQgQEAKIAogCXN3aXRjaCAoc2VyaW8tPmlkLnR5cGUpIHsKIAotCQljYXNlIFNFUklPXzgwNDJfWEw6Ci0JCQlhdGtiZC0+dHJhbnNsYXRlZCA9IDE7Ci0JCWNhc2UgU0VSSU9fODA0MjoKLQkJCWlmIChzZXJpby0+d3JpdGUpCi0JCQkJYXRrYmQtPndyaXRlID0gMTsKLQkJCWJyZWFrOworCWNhc2UgU0VSSU9fODA0Ml9YTDoKKwkJYXRrYmQtPnRyYW5zbGF0ZWQgPSB0cnVlOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgU0VSSU9fODA0MjoKKwkJaWYgKHNlcmlvLT53cml0ZSkKKwkJCWF0a2JkLT53cml0ZSA9IHRydWU7CisJCWJyZWFrOwogCX0KIAogCWF0a2JkLT5zb2Z0cmF3ID0gYXRrYmRfc29mdHJhdzsKQEAgLTExMTMsNyArMTEyMyw3IEBACiAJYXRrYmQtPnNjcm9sbCA9IGF0a2JkX3Njcm9sbDsKIAogCWlmIChhdGtiZC0+c29mdHJlcGVhdCkKLQkJYXRrYmQtPnNvZnRyYXcgPSAxOworCQlhdGtiZC0+c29mdHJhdyA9IHRydWU7CiAKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgYXRrYmQpOwogCkBAIC0xMTcyLDcgKzExODIsOCBAQAogCWludCByZXR2YWwgPSAtMTsKIAogCWlmICghYXRrYmQgfHwgIWRydikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiYXRrYmQ6IHJlY29ubmVjdCByZXF1ZXN0LCBidXQgc2VyaW8gaXMgZGlzY29ubmVjdGVkLCBpZ25vcmluZy4uLlxuIik7CisJCWRldl9kYmcoJnNlcmlvLT5kZXYsCisJCQkicmVjb25uZWN0IHJlcXVlc3QsIGJ1dCBzZXJpbyBpcyBkaXNjb25uZWN0ZWQsIGlnbm9yaW5nLi4uXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTI4Niw3ICsxMjk3LDggQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7Ci0JdW5zaWduZWQgY2hhciBvbGRfZXh0cmEsIG9sZF9zZXQ7CisJYm9vbCBvbGRfZXh0cmE7CisJdW5zaWduZWQgY2hhciBvbGRfc2V0OwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwpAQCAtMTM2OSw3ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7Ci0JdW5zaWduZWQgY2hhciBvbGRfc2Nyb2xsOworCWJvb2wgb2xkX3Njcm9sbDsKIAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDEzLDcgKzE0MjUsOCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zZXQsIG9sZF9leHRyYTsKKwl1bnNpZ25lZCBjaGFyIG9sZF9zZXQ7CisJYm9vbCBvbGRfZXh0cmE7CiAKIAlpZiAoIWF0a2JkLT53cml0ZSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNDYzLDcgKzE0NzYsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zb2Z0cmVwZWF0LCBvbGRfc29mdHJhdzsKKwlib29sIG9sZF9zb2Z0cmVwZWF0LCBvbGRfc29mdHJhdzsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKQEAgLTE0ODMsNyArMTQ5Niw3IEBACiAJCWF0a2JkLT5kZXYgPSBuZXdfZGV2OwogCQlhdGtiZC0+c29mdHJlcGVhdCA9IHZhbHVlOwogCQlpZiAoYXRrYmQtPnNvZnRyZXBlYXQpCi0JCQlhdGtiZC0+c29mdHJhdyA9IDE7CisJCQlhdGtiZC0+c29mdHJhdyA9IHRydWU7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwogCiAJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKQEAgLTE1MTMsNyArMTUyNiw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGNoYXIgb2xkX3NvZnRyYXc7CisJYm9vbCBvbGRfc29mdHJhdzsKIAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2VwOTN4eF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCmluZGV4IGU0NTc0MDQuLmJkMjVhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKIAotCXVuc2lnbmVkIGludCBtYXRyaXhfa2V5Y29kZXNbRVA5M1hYX01BVFJJWF9TSVpFXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tFUDkzWFhfTUFUUklYX1NJWkVdOwogCiAJaW50IGtleTE7CiAJaW50IGtleTI7CkBAIC03OSwyNCArNzksNiBAQAogCWJvb2wgZW5hYmxlZDsKIH07CiAKLXN0YXRpYyB2b2lkIGVwOTN4eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkKQotewotCXN0cnVjdCBlcDkzeHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKLQl1bnNpZ25lZCBpbnQgKmtleTsKLQlpbnQgaTsKLQotCWtleSA9ICZwZGF0YS0+bWF0cml4X2tleV9tYXBbMF07Ci0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXRyaXhfa2V5X21hcF9zaXplOyBpKyssIGtleSsrKSB7Ci0JCWludCByb3cgPSBLRVlfUk9XKCprZXkpOwotCQlpbnQgY29sID0gS0VZX0NPTCgqa2V5KTsKLQkJaW50IGNvZGUgPSBLRVlfVkFMKCprZXkpOwotCi0JCWtleXBhZC0+bWF0cml4X2tleWNvZGVzWyhyb3cgPDwgMykgKyBjb2xdID0gY29kZTsKLQkJX19zZXRfYml0KGNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQl9Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfa2V5cGFkX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkID0gZGV2X2lkOwpAQCAtMTA3LDEwICs4OSwxMCBAQAogCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGtleXBhZC0+bW1pb19iYXNlICsgS0VZX1JFRyk7CiAKIAlrZXljb2RlID0gKHN0YXR1cyAmIEtFWV9SRUdfS0VZMV9NQVNLKSA+PiBLRVlfUkVHX0tFWTFfU0hJRlQ7Ci0Ja2V5MSA9IGtleXBhZC0+bWF0cml4X2tleWNvZGVzW2tleWNvZGVdOworCWtleTEgPSBrZXlwYWQtPmtleWNvZGVzW2tleWNvZGVdOwogCiAJa2V5Y29kZSA9IChzdGF0dXMgJiBLRVlfUkVHX0tFWTJfTUFTSykgPj4gS0VZX1JFR19LRVkyX1NISUZUOwotCWtleTIgPSBrZXlwYWQtPm1hdHJpeF9rZXljb2Rlc1trZXljb2RlXTsKKwlrZXkyID0ga2V5cGFkLT5rZXljb2Rlc1trZXljb2RlXTsKIAogCWlmIChzdGF0dXMgJiBLRVlfUkVHXzJLRVlTKSB7CiAJCWlmIChrZXlwYWQtPmtleTEgJiYga2V5MSAhPSBrZXlwYWQtPmtleTEgJiYga2V5MiAhPSBrZXlwYWQtPmtleTEpCkBAIC0yNTYsNiArMjM4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVwOTN4eF9rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyOwpAQCAtMjcwLDYgKzI1MywxMiBAQAogCQlnb3RvIGZhaWxlZF9mcmVlOwogCX0KIAorCWtleW1hcF9kYXRhID0ga2V5cGFkLT5wZGF0YS0+a2V5bWFwX2RhdGE7CisJaWYgKCFrZXltYXBfZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZF9mcmVlOworCX0KKwogCWtleXBhZC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIWtleXBhZC0+aXJxKSB7CiAJCWVyciA9IC1FTlhJTzsKQEAgLTMxNyw5ICszMDYsOSBAQAogCWlucHV0X2Rldi0+b3BlbiA9IGVwOTN4eF9rZXlwYWRfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gZXA5M3h4X2tleXBhZF9jbG9zZTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+bWF0cml4X2tleWNvZGVzOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2V5cGFkLT5tYXRyaXhfa2V5Y29kZXNbMF0pOwotCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5cGFkLT5tYXRyaXhfa2V5Y29kZXMpOworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+a2V5Y29kZXM7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXlwYWQtPmtleWNvZGVzWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGtleXBhZC0+a2V5Y29kZXMpOwogCiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrZXlwYWQpOwogCkBAIC0zMjcsNyArMzE2LDggQEAKIAlpZiAoa2V5cGFkLT5wZGF0YS0+ZmxhZ3MgJiBFUDkzWFhfS0VZUEFEX0FVVE9SRVBFQVQpCiAJCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfUkVQKTsKIAotCWVwOTN4eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShrZXlwYWQpOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCAzLAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShrZXlwYWQtPmlycSwgZXA5M3h4X2tleXBhZF9pcnFfaGFuZGxlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IDFhZmYzYjcuLjJiNzA4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMzAsMTMgKzMwLDI4OSBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWJvb2wgZGlzYWJsZWQ7CiB9OwogCiBzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBtdXRleCBkaXNhYmxlX2xvY2s7CisJdW5zaWduZWQgaW50IG5fYnV0dG9uczsKIAlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSBkYXRhWzBdOwogfTsKIAorLyoKKyAqIFNZU0ZTIGludGVyZmFjZSBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGtleXMgYW5kIHN3aXRjaGVzOgorICoKKyAqIFRoZXJlIGFyZSA0IGF0dHJpYnV0ZXMgdW5kZXIgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2dwaW8ta2V5cy8KKyAqCWtleXMgW3JvXSAgICAgICAgICAgICAgLSBiaXRtYXAgb2Yga2V5cyAoRVZfS0VZKSB3aGljaCBjYW4gYmUKKyAqCSAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZAorICoJc3dpdGNoZXMgW3JvXSAgICAgICAgICAtIGJpdG1hcCBvZiBzd2l0Y2hlcyAoRVZfU1cpIHdoaWNoIGNhbiBiZQorICoJICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkCisgKglkaXNhYmxlZF9rZXlzIFtyd10gICAgIC0gYml0bWFwIG9mIGtleXMgY3VycmVudGx5IGRpc2FibGVkCisgKglkaXNhYmxlZF9zd2l0Y2hlcyBbcnddIC0gYml0bWFwIG9mIHN3aXRjaGVzIGN1cnJlbnRseSBkaXNhYmxlZAorICoKKyAqIFVzZXJsYW5kIGNhbiBjaGFuZ2UgdGhlc2UgdmFsdWVzIGFuZCBoZW5jZSBkaXNhYmxlIGV2ZW50IGdlbmVyYXRpb24KKyAqIGZvciBlYWNoIGtleSAob3Igc3dpdGNoKS4gRGlzYWJsaW5nIGEga2V5IG1lYW5zIGl0cyBpbnRlcnJ1cHQgbGluZQorICogaXMgZGlzYWJsZWQuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgZm9sbG93aW5nIHN3aXRjaGVzIHNldCB1cCBhcyBncGlvLWtleXM6CisgKglTV19ET0NLID0gNQorICoJU1dfQ0FNRVJBX0xFTlNfQ09WRVIgPSA5CisgKglTV19LRVlQQURfU0xJREUgPSAxMAorICoJU1dfRlJPTlRfUFJPWElNSVRZID0gMTEKKyAqIFRoaXMgaXMgcmVhZCBmcm9tIHN3aXRjaGVzOgorICoJMTEtOSw1CisgKiBOZXh0IHdlIHdhbnQgdG8gZGlzYWJsZSBwcm94aW1pdHkgKDExKSBhbmQgZG9jayAoNSksIHdlIHdyaXRlOgorICoJMTEsNQorICogdG8gZmlsZSBkaXNhYmxlZF9zd2l0Y2hlcy4gTm93IHByb3hpbWl0eSBhbmQgZG9jayBJUlFzIGFyZSBkaXNhYmxlZC4KKyAqIFRoaXMgY2FuIGJlIHZlcmlmaWVkIGJ5IHJlYWRpbmcgdGhlIGZpbGUgZGlzYWJsZWRfc3dpdGNoZXM6CisgKgkxMSw1CisgKiBJZiB3ZSBub3cgd2FudCB0byBlbmFibGUgcHJveGltaXR5ICgxMSkgc3dpdGNoIHdlIHdyaXRlOgorICoJNQorICogdG8gZGlzYWJsZWRfc3dpdGNoZXMuCisgKgorICogV2UgY2FuIGRpc2FibGUgb25seSB0aG9zZSBrZXlzIHdoaWNoIGRvbid0IGFsbG93IHNoYXJpbmcgdGhlIGlycS4KKyAqLworCisvKioKKyAqIGdldF9uX2V2ZW50c19ieV90eXBlKCkgLSByZXR1cm5zIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBwZXIgQHR5cGUKKyAqIEB0eXBlOiB0eXBlIG9mIGJ1dHRvbiAoJUVWX0tFWSwgJUVWX1NXKQorICoKKyAqIFJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRlIGJpdG1hcAorICogbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIGJpdHMgZm9yIGdpdmVuIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9uX2V2ZW50c19ieV90eXBlKGludCB0eXBlKQoreworCUJVR19PTih0eXBlICE9IEVWX1NXICYmIHR5cGUgIT0gRVZfS0VZKTsKKworCXJldHVybiAodHlwZSA9PSBFVl9LRVkpID8gS0VZX0NOVCA6IFNXX0NOVDsKK30KKworLyoqCisgKiBncGlvX2tleXNfZGlzYWJsZV9idXR0b24oKSAtIGRpc2FibGVzIGdpdmVuIEdQSU8gYnV0dG9uCisgKiBAYmRhdGE6IGJ1dHRvbiBkYXRhIGZvciBidXR0b24gdG8gYmUgZGlzYWJsZWQKKyAqCisgKiBEaXNhYmxlcyBidXR0b24gcG9pbnRlZCBieSBAYmRhdGEuIFRoaXMgaXMgZG9uZSBieSBtYXNraW5nCisgKiBJUlEgbGluZS4gQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dHRvbiB3b24ndCBnZW5lcmF0ZQorICogaW5wdXQgZXZlbnRzIGFueW1vcmUuIE5vdGUgdGhhdCBvbmUgY2FuIG9ubHkgZGlzYWJsZSBidXR0b25zCisgKiB0aGF0IGRvbid0IHNoYXJlIElSUXMuCisgKgorICogTWFrZSBzdXJlIHRoYXQgQGJkYXRhLT5kaXNhYmxlX2xvY2sgaXMgbG9ja2VkIHdoZW4gZW50ZXJpbmcKKyAqIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgcmFjZXMgd2hlbiBjb25jdXJyZW50IHRocmVhZHMgYXJlCisgKiBkaXNhYmxpbmcgYnV0dG9ucyBhdCB0aGUgc2FtZSB0aW1lLgorICovCitzdGF0aWMgdm9pZCBncGlvX2tleXNfZGlzYWJsZV9idXR0b24oc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhKQoreworCWlmICghYmRhdGEtPmRpc2FibGVkKSB7CisJCS8qCisJCSAqIERpc2FibGUgSVJRIGFuZCBwb3NzaWJsZSBkZWJvdW5jaW5nIHRpbWVyLgorCQkgKi8KKwkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoYmRhdGEtPmJ1dHRvbi0+Z3BpbykpOworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpCisJCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKKworCQliZGF0YS0+ZGlzYWJsZWQgPSB0cnVlOworCX0KK30KKworLyoqCisgKiBncGlvX2tleXNfZW5hYmxlX2J1dHRvbigpIC0gZW5hYmxlcyBnaXZlbiBHUElPIGJ1dHRvbgorICogQGJkYXRhOiBidXR0b24gZGF0YSBmb3IgYnV0dG9uIHRvIGJlIGRpc2FibGVkCisgKgorICogRW5hYmxlcyBnaXZlbiBidXR0b24gcG9pbnRlZCBieSBAYmRhdGEuCisgKgorICogTWFrZSBzdXJlIHRoYXQgQGJkYXRhLT5kaXNhYmxlX2xvY2sgaXMgbG9ja2VkIHdoZW4gZW50ZXJpbmcKKyAqIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHRocmVhZHMgdHJ5aW5nCisgKiB0byBlbmFibGUgdGhlIHNhbWUgYnV0dG9uIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19lbmFibGVfYnV0dG9uKHN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSkKK3sKKwlpZiAoYmRhdGEtPmRpc2FibGVkKSB7CisJCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoYmRhdGEtPmJ1dHRvbi0+Z3BpbykpOworCQliZGF0YS0+ZGlzYWJsZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogZ3Bpb19rZXlzX2F0dHJfc2hvd19oZWxwZXIoKSAtIGZpbGwgaW4gc3RyaW5naWZpZWQgYml0bWFwIG9mIGJ1dHRvbnMKKyAqIEBkZGF0YTogcG9pbnRlciB0byBkcnZkYXRhCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgc3RyaW5naWZpZWQgYml0bWFwIGlzIHdyaXR0ZW4KKyAqIEB0eXBlOiBidXR0b24gdHlwZSAoJUVWX0tFWSwgJUVWX1NXKQorICogQG9ubHlfZGlzYWJsZWQ6IGRvZXMgY2FsbGVyIHdhbnQgb25seSB0aG9zZSBidXR0b25zIHRoYXQgYXJlCisgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IGRpc2FibGVkIG9yIGFsbCBidXR0b25zIHRoYXQgY2FuIGJlCisgKiAgICAgICAgICAgICAgICAgZGlzYWJsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBidXR0b25zIHRoYXQgY2FuIGJlIGRpc2FibGVkIHRvIEBidWYuIElmCisgKiBAb25seV9kaXNhYmxlZCBpcyB0cnVlLCB0aGVuIEBidWYgY29udGFpbnMgb25seSB0aG9zZSBidXR0b25zCisgKiB0aGF0IGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlCisgKiBlcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3NpemVfdCBncGlvX2tleXNfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhLAorCQkJCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAgYm9vbCBvbmx5X2Rpc2FibGVkKQoreworCWludCBuX2V2ZW50cyA9IGdldF9uX2V2ZW50c19ieV90eXBlKHR5cGUpOworCXVuc2lnbmVkIGxvbmcgKmJpdHM7CisJc3NpemVfdCByZXQ7CisJaW50IGk7CisKKwliaXRzID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG5fZXZlbnRzKSwgc2l6ZW9mKCpiaXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiaXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBkZGF0YS0+bl9idXR0b25zOyBpKyspIHsKKwkJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gJmRkYXRhLT5kYXRhW2ldOworCisJCWlmIChiZGF0YS0+YnV0dG9uLT50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKworCQlpZiAob25seV9kaXNhYmxlZCAmJiAhYmRhdGEtPmRpc2FibGVkKQorCQkJY29udGludWU7CisKKwkJX19zZXRfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpOworCX0KKworCXJldCA9IGJpdG1hcF9zY25saXN0cHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMiwgYml0cywgbl9ldmVudHMpOworCWJ1ZltyZXQrK10gPSAnXG4nOworCWJ1ZltyZXRdID0gJ1wwJzsKKworCWtmcmVlKGJpdHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoKSAtIGVuYWJsZS9kaXNhYmxlIGJ1dHRvbnMgYmFzZWQgb24gZ2l2ZW4gYml0bWFwCisgKiBAZGRhdGE6IHBvaW50ZXIgdG8gZHJ2ZGF0YQorICogQGJ1ZjogYnVmZmVyIGZyb20gdXNlcnNwYWNlIHRoYXQgY29udGFpbnMgc3RyaW5naWZpZWQgYml0bWFwCisgKiBAdHlwZTogYnV0dG9uIHR5cGUgKCVFVl9LRVksICVFVl9TVykKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBzdHJpbmdpZmllZCBiaXRtYXAgZnJvbSBAYnVmIGFuZCBkaXNhYmxlcy9lbmFibGVzCisgKiBHUElPIGJ1dHRvbnMgYWNjb3JkaW5seS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGVycm9yCisgKiBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3NpemVfdCBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoc3RydWN0IGdwaW9fa2V5c19kcnZkYXRhICpkZGF0YSwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlpbnQgbl9ldmVudHMgPSBnZXRfbl9ldmVudHNfYnlfdHlwZSh0eXBlKTsKKwl1bnNpZ25lZCBsb25nICpiaXRzOworCXNzaXplX3QgZXJyb3I7CisJaW50IGk7CisKKwliaXRzID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG5fZXZlbnRzKSwgc2l6ZW9mKCpiaXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiaXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gYml0bWFwX3BhcnNlbGlzdChidWYsIGJpdHMsIG5fZXZlbnRzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJLyogRmlyc3QgdmFsaWRhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGRhdGEtPm5fYnV0dG9uczsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKKworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisKKwkJaWYgKHRlc3RfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpICYmCisJCSAgICAhYmRhdGEtPmJ1dHRvbi0+Y2FuX2Rpc2FibGUpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJbXV0ZXhfbG9jaygmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGRhdGEtPm5fYnV0dG9uczsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKKworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisKKwkJaWYgKHRlc3RfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpKQorCQkJZ3Bpb19rZXlzX2Rpc2FibGVfYnV0dG9uKGJkYXRhKTsKKwkJZWxzZQorCQkJZ3Bpb19rZXlzX2VuYWJsZV9idXR0b24oYmRhdGEpOworCX0KKworCW11dGV4X3VubG9jaygmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKK291dDoKKwlrZnJlZShiaXRzKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNkZWZpbmUgQVRUUl9TSE9XX0ZOKG5hbWUsIHR5cGUsIG9ubHlfZGlzYWJsZWQpCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGdwaW9fa2V5c19zaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgICAgY2hhciAqYnVmKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gZ3Bpb19rZXlzX2F0dHJfc2hvd19oZWxwZXIoZGRhdGEsIGJ1ZiwJCQlcCisJCQkJCSAgdHlwZSwgb25seV9kaXNhYmxlZCk7CQlcCit9CisKK0FUVFJfU0hPV19GTihrZXlzLCBFVl9LRVksIGZhbHNlKTsKK0FUVFJfU0hPV19GTihzd2l0Y2hlcywgRVZfU1csIGZhbHNlKTsKK0FUVFJfU0hPV19GTihkaXNhYmxlZF9rZXlzLCBFVl9LRVksIHRydWUpOworQVRUUl9TSE9XX0ZOKGRpc2FibGVkX3N3aXRjaGVzLCBFVl9TVywgdHJ1ZSk7CisKKy8qCisgKiBBVFRSSUJVVEVTOgorICoKKyAqIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9ncGlvLWtleXMva2V5cyBbcm9dCisgKiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZ3Bpby1rZXlzL3N3aXRjaGVzIFtyb10KKyAqLworc3RhdGljIERFVklDRV9BVFRSKGtleXMsIFNfSVJVR08sIGdwaW9fa2V5c19zaG93X2tleXMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN3aXRjaGVzLCBTX0lSVUdPLCBncGlvX2tleXNfc2hvd19zd2l0Y2hlcywgTlVMTCk7CisKKyNkZWZpbmUgQVRUUl9TVE9SRV9GTihuYW1lLCB0eXBlKQkJCQkJXAorc3RhdGljIHNzaXplX3QgZ3Bpb19rZXlzX3N0b3JlXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsCQkJXAorCQkJCSAgICAgIHNpemVfdCBjb3VudCkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CVwKKwlzc2l6ZV90IGVycm9yOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJZXJyb3IgPSBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoZGRhdGEsIGJ1ZiwgdHlwZSk7CQlcCisJaWYgKGVycm9yKQkJCQkJCQlcCisJCXJldHVybiBlcnJvcjsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CisKK0FUVFJfU1RPUkVfRk4oZGlzYWJsZWRfa2V5cywgRVZfS0VZKTsKK0FUVFJfU1RPUkVfRk4oZGlzYWJsZWRfc3dpdGNoZXMsIEVWX1NXKTsKKworLyoKKyAqIEFUVFJJQlVURVM6CisgKgorICogL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2dwaW8ta2V5cy9kaXNhYmxlZF9rZXlzIFtyd10KKyAqIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9ncGlvLWtleXMvZGlzYWJsZXNfc3dpdGNoZXMgW3J3XQorICovCitzdGF0aWMgREVWSUNFX0FUVFIoZGlzYWJsZWRfa2V5cywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGdwaW9fa2V5c19zaG93X2Rpc2FibGVkX2tleXMsCisJCSAgIGdwaW9fa2V5c19zdG9yZV9kaXNhYmxlZF9rZXlzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkaXNhYmxlZF9zd2l0Y2hlcywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGdwaW9fa2V5c19zaG93X2Rpc2FibGVkX3N3aXRjaGVzLAorCQkgICBncGlvX2tleXNfc3RvcmVfZGlzYWJsZWRfc3dpdGNoZXMpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ3Bpb19rZXlzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2tleXMuYXR0ciwKKwkmZGV2X2F0dHJfc3dpdGNoZXMuYXR0ciwKKwkmZGV2X2F0dHJfZGlzYWJsZWRfa2V5cy5hdHRyLAorCSZkZXZfYXR0cl9kaXNhYmxlZF9zd2l0Y2hlcy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBncGlvX2tleXNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBncGlvX2tleXNfYXR0cnMsCit9OworCiBzdGF0aWMgdm9pZCBncGlvX2tleXNfcmVwb3J0X2V2ZW50KHN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSkKIHsKIAlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gYmRhdGEtPmJ1dHRvbjsKQEAgLTc5LDExICszNTUsMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fa2V5c19zZXR1cF9rZXkoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgZ3Bpb19rZXlzX3NldHVwX2tleShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCQkgc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhLAogCQkJCQkgc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbikKIHsKIAljaGFyICpkZXNjID0gYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCBpcnEsIGVycm9yOwogCiAJc2V0dXBfdGltZXIoJmJkYXRhLT50aW1lciwgZ3Bpb19rZXlzX3RpbWVyLCAodW5zaWduZWQgbG9uZyliZGF0YSk7CkBAIC0xMTIsMTAgKzM5MCwxNSBAQAogCQlnb3RvIGZhaWwzOwogCX0KIAotCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAotCQkJICAgIElSUUZfU0hBUkVEIHwKLQkJCSAgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICAgZGVzYywgYmRhdGEpOworCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCS8qCisJICogSWYgcGxhdGZvcm0gaGFzIHNwZWNpZmllZCB0aGF0IHRoZSBidXR0b24gY2FuIGJlIGRpc2FibGVkLAorCSAqIHdlIGRvbid0IHdhbnQgaXQgdG8gc2hhcmUgdGhlIGludGVycnVwdCBsaW5lLgorCSAqLworCWlmICghYnV0dG9uLT5jYW5fZGlzYWJsZSkKKwkJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKIAkJCWlycSwgZXJyb3IpOwpAQCAtMTQ5LDYgKzQzMiwxMCBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAorCWRkYXRhLT5pbnB1dCA9IGlucHV0OworCWRkYXRhLT5uX2J1dHRvbnMgPSBwZGF0YS0+bmJ1dHRvbnM7CisJbXV0ZXhfaW5pdCgmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGF0YSk7CiAKIAlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CkBAIC0xNjQsOCArNDUxLDYgQEAKIAlpZiAocGRhdGEtPnJlcCkKIAkJX19zZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCWRkYXRhLT5pbnB1dCA9IGlucHV0OwotCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSAmcGRhdGEtPmJ1dHRvbnNbaV07CiAJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKQEAgLTE3NCw3ICs0NTksNyBAQAogCQliZGF0YS0+aW5wdXQgPSBpbnB1dDsKIAkJYmRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKIAotCQllcnJvciA9IGdwaW9fa2V5c19zZXR1cF9rZXkoZGV2LCBiZGF0YSwgYnV0dG9uKTsKKwkJZXJyb3IgPSBncGlvX2tleXNfc2V0dXBfa2V5KHBkZXYsIGJkYXRhLCBidXR0b24pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGZhaWwyOwogCkBAIC0xODQsMTEgKzQ2OSwxOCBAQAogCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgdHlwZSwgYnV0dG9uLT5jb2RlKTsKIAl9CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZncGlvX2tleXNfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGV4cG9ydCBrZXlzL3N3aXRjaGVzLCBlcnJvcjogJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZmFpbDI7CisJfQorCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikgewotCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UsICIKLQkJCSJlcnJvcjogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsMjsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlLCBlcnJvcjogJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZmFpbDM7CiAJfQogCiAJLyogZ2V0IGN1cnJlbnQgc3RhdGUgb2YgYnV0dG9ucyAqLwpAQCAtMjAwLDYgKzQ5Miw4IEBACiAKIAlyZXR1cm4gMDsKIAorIGZhaWwzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZncGlvX2tleXNfYXR0cl9ncm91cCk7CiAgZmFpbDI6CiAJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCAmZGRhdGEtPmRhdGFbaV0pOwpAQCAtMjI0LDYgKzUxOCw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkZGF0YS0+aW5wdXQ7CiAJaW50IGk7CiAKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZ3Bpb19rZXlzX2F0dHJfZ3JvdXApOworCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2lteF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaW14X2tleXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTViNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2lteF9rZXlwYWQuYwpAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIElNWCBrZXlwYWQgcG9ydC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiA8PFBvd2VyIG1hbmFnZW1lbnQgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQ+Pi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKy8qCisgKiBLZXlwYWQgQ29udHJvbGxlciByZWdpc3RlcnMgKGhhbGZ3b3JkKQorICovCisjZGVmaW5lIEtQQ1IJCTB4MDAgLyogS2V5cGFkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBLUFNSCQkweDAyIC8qIEtleXBhZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1BLRAkoMHgxIDw8IDApIC8qIEtleSBQcmVzcyBJbnRlcnJ1cHQgU3RhdHVzIGJpdCAodzFjKSAqLworI2RlZmluZSBLQkRfU1RBVF9LUEtSCSgweDEgPDwgMSkgLyogS2V5IFJlbGVhc2UgSW50ZXJydXB0IFN0YXR1cyBiaXQgKHcxYykgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS0RTQwkoMHgxIDw8IDIpIC8qIEtleSBEZXByZXNzIFN5bmNoIENoYWluIFN0YXR1cyBiaXQgKHcxYykqLworI2RlZmluZSBLQkRfU1RBVF9LUlNTCSgweDEgPDwgMykgLyogS2V5IFJlbGVhc2UgU3luY2ggU3RhdHVzIGJpdCAodzFjKSovCisjZGVmaW5lIEtCRF9TVEFUX0tESUUJKDB4MSA8PCA4KSAvKiBLZXkgRGVwcmVzcyBJbnRlcnJ1cHQgRW5hYmxlIFN0YXR1cyBiaXQgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1JJRQkoMHgxIDw8IDkpIC8qIEtleSBSZWxlYXNlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1BQRU4JKDB4MSA8PCAxMCkgLyogS2V5cGFkIENsb2NrIEVuYWJsZSAqLworCisjZGVmaW5lIEtERFIJCTB4MDQgLyogS2V5cGFkIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEtQRFIJCTB4MDYgLyogS2V5cGFkIERhdGEgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVhfTUFUUklYX0tFWV9ST1dTCTgKKyNkZWZpbmUgTUFYX01BVFJJWF9LRVlfQ09MUwk4CisjZGVmaW5lIE1BVFJJWF9ST1dfU0hJRlQJMworCisjZGVmaW5lIE1BWF9NQVRSSVhfS0VZX05VTQkoTUFYX01BVFJJWF9LRVlfUk9XUyAqIE1BWF9NQVRSSVhfS0VZX0NPTFMpCisKK3N0cnVjdCBpbXhfa2V5cGFkIHsKKworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2U7CisKKwlpbnQJCQlpcnE7CisJc3RydWN0IHRpbWVyX2xpc3QJY2hlY2tfbWF0cml4X3RpbWVyOworCisJLyoKKwkgKiBUaGUgbWF0cml4IGlzIHN0YWJsZSBvbmx5IGlmIG5vIGNoYW5nZXMgYXJlIGRldGVjdGVkIGFmdGVyCisJICogSU1YX0tFWVBBRF9TQ0FOU19GT1JfU1RBQklMSVRZIHNjYW5zCisJICovCisjZGVmaW5lIElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSAzCisJaW50CQkJc3RhYmxlX2NvdW50OworCisJYm9vbAkJCWVuYWJsZWQ7CisKKwkvKiBNYXNrcyBmb3IgZW5hYmxlZCByb3dzL2NvbHMgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcm93c19lbl9tYXNrOworCXVuc2lnbmVkIHNob3J0CQljb2xzX2VuX21hc2s7CisKKwl1bnNpZ25lZCBzaG9ydAkJa2V5Y29kZXNbTUFYX01BVFJJWF9LRVlfTlVNXTsKKworCS8qCisJICogTWF0cml4IHN0YXRlczoKKwkgKiAtc3RhYmxlOiBhY2hpZXZlZCBhZnRlciBhIGNvbXBsZXRlIGRlYm91bmNlIHByb2Nlc3MuCisJICogLXVuc3RhYmxlOiB1c2VkIGluIHRoZSBkZWJvdW5jaW5nIHByb2Nlc3MuCisJICovCisJdW5zaWduZWQgc2hvcnQJCW1hdHJpeF9zdGFibGVfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CisJdW5zaWduZWQgc2hvcnQJCW1hdHJpeF91bnN0YWJsZV9zdGF0ZVtNQVhfTUFUUklYX0tFWV9DT0xTXTsKK307CisKKy8qIFNjYW4gdGhlIG1hdHJpeCBhbmQgcmV0dXJuIHRoZSBuZXcgc3RhdGUgaW4gKm1hdHJpeF92b2xhdGlsZV9zdGF0ZS4gKi8KK3N0YXRpYyB2b2lkIGlteF9rZXlwYWRfc2Nhbl9tYXRyaXgoc3RydWN0IGlteF9rZXlwYWQgKmtleXBhZCwKKwkJCQkgIHVuc2lnbmVkIHNob3J0ICptYXRyaXhfdm9sYXRpbGVfc3RhdGUpCit7CisJaW50IGNvbDsKKwl1bnNpZ25lZCBzaG9ydCByZWdfdmFsOworCisJZm9yIChjb2wgPSAwOyBjb2wgPCBNQVhfTUFUUklYX0tFWV9DT0xTOyBjb2wrKykgeworCQlpZiAoKGtleXBhZC0+Y29sc19lbl9tYXNrICYgKDEgPDwgY29sKSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBEaXNjaGFyZ2Uga2V5cGFkIGNhcGFjaXRhbmNlOgorCQkgKiAyLiB3cml0ZSAxcyBvbiBjb2x1bW4gZGF0YS4KKwkJICogMy4gY29uZmlndXJlIGNvbHVtbnMgYXMgdG90ZW0tcG9sZSB0byBkaXNjaGFyZ2UgY2FwYWNpdGFuY2UuCisJCSAqIDQuIGNvbmZpZ3VyZSBjb2x1bW5zIGFzIG9wZW4tZHJhaW4uCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKTsKKwkJcmVnX3ZhbCB8PSAweGZmMDA7CisJCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworCQlyZWdfdmFsICY9IH4oKGtleXBhZC0+Y29sc19lbl9tYXNrICYgMHhmZikgPDwgOCk7CisJCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworCisJCXVkZWxheSgyKTsKKworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKwkJcmVnX3ZhbCB8PSAoa2V5cGFkLT5jb2xzX2VuX21hc2sgJiAweGZmKSA8PCA4OworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKworCQkvKgorCQkgKiA1LiBXcml0ZSBhIHNpbmdsZSBjb2x1bW4gdG8gMCwgb3RoZXJzIHRvIDEuCisJCSAqIDYuIFNhbXBsZSByb3cgaW5wdXRzIGFuZCBzYXZlIGRhdGEuCisJCSAqIDcuIFJlcGVhdCBzdGVwcyAyIC0gNiBmb3IgcmVtYWluaW5nIGNvbHVtbnMuCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKTsKKwkJcmVnX3ZhbCAmPSB+KDEgPDwgKDggKyBjb2wpKTsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisKKwkJLyoKKwkJICogRGVsYXkgYWRkZWQgdG8gYXZvaWQgcHJvcGFnYXRpbmcgdGhlIDAgZnJvbSBjb2x1bW4gdG8gcm93CisJCSAqIHdoZW4gc2Nhbm5pbmcuCisJCSAqLworCQl1ZGVsYXkoNSk7CisKKwkJLyoKKwkJICogMXMgaW4gbWF0cml4X3ZvbGF0aWxlX3N0YXRlW2NvbF0gbWVhbnMga2V5IHByZXNzdXJlcworCQkgKiB0aHJvdyBkYXRhIGZyb20gbm9uIGVuYWJsZWQgcm93cy4KKwkJICovCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCQltYXRyaXhfdm9sYXRpbGVfc3RhdGVbY29sXSA9ICh+cmVnX3ZhbCkgJiBrZXlwYWQtPnJvd3NfZW5fbWFzazsKKwl9CisKKwkvKgorCSAqIFJldHVybiBpbiBzdGFuZGJ5IG1vZGU6CisJICogOS4gd3JpdGUgMHMgdG8gY29sdW1ucworCSAqLworCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCXJlZ192YWwgJj0gMHgwMGZmOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworfQorCisvKgorICogQ29tcGFyZSB0aGUgbmV3IG1hdHJpeCBzdGF0ZSAodm9sYXRpbGUpIHdpdGggdGhlIHN0YWJsZSBvbmUgc3RvcmVkIGluCisgKiBrZXlwYWQtPm1hdHJpeF9zdGFibGVfc3RhdGUgYW5kIGZpcmUgZXZlbnRzIGlmIGNoYW5nZXMgYXJlIGRldGVjdGVkLgorICovCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2ZpcmVfZXZlbnRzKHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQsCisJCQkJICAgdW5zaWduZWQgc2hvcnQgKm1hdHJpeF92b2xhdGlsZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKKwlpbnQgcm93LCBjb2w7CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGNvbCsrKSB7CisJCXVuc2lnbmVkIHNob3J0IGJpdHNfY2hhbmdlZDsKKwkJaW50IGNvZGU7CisKKwkJaWYgKChrZXlwYWQtPmNvbHNfZW5fbWFzayAmICgxIDw8IGNvbCkpID09IDApCisJCQljb250aW51ZTsgLyogQ29sdW1uIGlzIG5vdCBlbmFibGVkICovCisKKwkJYml0c19jaGFuZ2VkID0ga2V5cGFkLT5tYXRyaXhfc3RhYmxlX3N0YXRlW2NvbF0gXgorCQkJCQkJbWF0cml4X3ZvbGF0aWxlX3N0YXRlW2NvbF07CisKKwkJaWYgKGJpdHNfY2hhbmdlZCA9PSAwKQorCQkJY29udGludWU7IC8qIENvbHVtbiBkb2VzIG5vdCBjb250YWluIGNoYW5nZXMgKi8KKworCQlmb3IgKHJvdyA9IDA7IHJvdyA8IE1BWF9NQVRSSVhfS0VZX1JPV1M7IHJvdysrKSB7CisJCQlpZiAoKGtleXBhZC0+cm93c19lbl9tYXNrICYgKDEgPDwgcm93KSkgPT0gMCkKKwkJCQljb250aW51ZTsgLyogUm93IGlzIG5vdCBlbmFibGVkICovCisJCQlpZiAoKGJpdHNfY2hhbmdlZCAmICgxIDw8IHJvdykpID09IDApCisJCQkJY29udGludWU7IC8qIFJvdyBkb2VzIG5vdCBjb250YWluIGNoYW5nZXMgKi8KKworCQkJY29kZSA9IE1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIE1BVFJJWF9ST1dfU0hJRlQpOworCQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBrZXlwYWQtPmtleWNvZGVzW2NvZGVdLAorCQkJCW1hdHJpeF92b2xhdGlsZV9zdGF0ZVtjb2xdICYgKDEgPDwgcm93KSk7CisJCQlkZXZfZGJnKCZpbnB1dF9kZXYtPmRldiwgIkV2ZW50IGNvZGU6ICVkLCB2YWw6ICVkIiwKKwkJCQlrZXlwYWQtPmtleWNvZGVzW2NvZGVdLAorCQkJCW1hdHJpeF92b2xhdGlsZV9zdGF0ZVtjb2xdICYgKDEgPDwgcm93KSk7CisJCX0KKwl9CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworfQorCisvKgorICogaW14X2tleXBhZF9jaGVja19mb3JfZXZlbnRzIGlzIHRoZSB0aW1lciBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2NoZWNrX2Zvcl9ldmVudHModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQgPSAoc3RydWN0IGlteF9rZXlwYWQgKikgZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBtYXRyaXhfdm9sYXRpbGVfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKwlib29sIHN0YXRlX2NoYW5nZWQsIGlzX3plcm9fbWF0cml4OworCWludCBpOworCisJbWVtc2V0KG1hdHJpeF92b2xhdGlsZV9zdGF0ZSwgMCwgc2l6ZW9mKG1hdHJpeF92b2xhdGlsZV9zdGF0ZSkpOworCisJaW14X2tleXBhZF9zY2FuX21hdHJpeChrZXlwYWQsIG1hdHJpeF92b2xhdGlsZV9zdGF0ZSk7CisKKwlzdGF0ZV9jaGFuZ2VkID0gZmFsc2U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGkrKykgeworCQlpZiAoKGtleXBhZC0+Y29sc19lbl9tYXNrICYgKDEgPDwgaSkpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoa2V5cGFkLT5tYXRyaXhfdW5zdGFibGVfc3RhdGVbaV0gXiBtYXRyaXhfdm9sYXRpbGVfc3RhdGVbaV0pIHsKKwkJCXN0YXRlX2NoYW5nZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBtYXRyaXggc3RhdGUgaXMgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cyBzY2FuCisJICogICAoUmUpQmVnaW4gdGhlIGRlYm91bmNpbmcgcHJvY2Vzcywgc2F2aW5nIHRoZSBuZXcgc3RhdGUgaW4KKwkgKiAgICBrZXlwYWQtPm1hdHJpeF91bnN0YWJsZV9zdGF0ZS4KKwkgKiBlbHNlCisJICogICBJbmNyZWFzZSB0aGUgY291bnQgb2YgbnVtYmVyIG9mIHNjYW5zIHdpdGggYSBzdGFibGUgc3RhdGUuCisJICovCisJaWYgKHN0YXRlX2NoYW5nZWQpIHsKKwkJbWVtY3B5KGtleXBhZC0+bWF0cml4X3Vuc3RhYmxlX3N0YXRlLCBtYXRyaXhfdm9sYXRpbGVfc3RhdGUsCisJCQlzaXplb2YobWF0cml4X3ZvbGF0aWxlX3N0YXRlKSk7CisJCWtleXBhZC0+c3RhYmxlX2NvdW50ID0gMDsKKwl9IGVsc2UKKwkJa2V5cGFkLT5zdGFibGVfY291bnQrKzsKKworCS8qCisJICogSWYgdGhlIG1hdHJpeCBpcyBub3QgYXMgc3RhYmxlIGFzIHdlIHdhbnQgcmVzY2hlZHVsZSBzY2FuCisJICogaW4gdGhlIG5lYXIgZnV0dXJlLgorCSAqLworCWlmIChrZXlwYWQtPnN0YWJsZV9jb3VudCA8IElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSkgeworCQltb2RfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbWF0cml4IHN0YXRlIGlzIHN0YWJsZSwgZmlyZSB0aGUgZXZlbnRzIGFuZCBzYXZlIHRoZSBuZXcKKwkgKiBzdGFibGUgc3RhdGUuIE5vdGUsIGlmIHRoZSBtYXRyaXggaXMga2VwdCBzdGFibGUgZm9yIGxvbmdlcgorCSAqIChrZXlwYWQtPnN0YWJsZV9jb3VudCA+IElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSkgYWxsCisJICogZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZC4KKwkgKi8KKwlpZiAoa2V5cGFkLT5zdGFibGVfY291bnQgPT0gSU1YX0tFWVBBRF9TQ0FOU19GT1JfU1RBQklMSVRZKSB7CisJCWlteF9rZXlwYWRfZmlyZV9ldmVudHMoa2V5cGFkLCBtYXRyaXhfdm9sYXRpbGVfc3RhdGUpOworCisJCW1lbWNweShrZXlwYWQtPm1hdHJpeF9zdGFibGVfc3RhdGUsIG1hdHJpeF92b2xhdGlsZV9zdGF0ZSwKKwkJCXNpemVvZihtYXRyaXhfdm9sYXRpbGVfc3RhdGUpKTsKKwl9CisKKwlpc196ZXJvX21hdHJpeCA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGkrKykgeworCQlpZiAobWF0cml4X3ZvbGF0aWxlX3N0YXRlW2ldICE9IDApIHsKKwkJCWlzX3plcm9fbWF0cml4ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCisJaWYgKGlzX3plcm9fbWF0cml4KSB7CisJCS8qCisJCSAqIEFsbCBrZXlzIGhhdmUgYmVlbiByZWxlYXNlZC4gRW5hYmxlIG9ubHkgdGhlIEtESQorCQkgKiBpbnRlcnJ1cHQgZm9yIGZ1dHVyZSBrZXkgcHJlc3NlcyAoY2xlYXIgdGhlIEtESQorCQkgKiBzdGF0dXMgYml0IGFuZCBpdHMgc3luYyBjaGFpbiBiZWZvcmUgdGhhdCkuCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwkJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUEtEIHwgS0JEX1NUQVRfS0RTQzsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisKKwkJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJCXJlZ192YWwgfD0gS0JEX1NUQVRfS0RJRTsKKwkJcmVnX3ZhbCAmPSB+S0JEX1NUQVRfS1JJRTsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU29tZSBrZXlzIGFyZSBzdGlsbCBwcmVzc2VkLiBTY2hlZHVsZSBhIHJlc2NhbiBpbgorCQkgKiBhdHRlbXB0IHRvIGRldGVjdCBtdWx0aXBsZSBrZXkgcHJlc3NlcyBhbmQgZW5hYmxlCisJCSAqIHRoZSBLUkkgaW50ZXJydXB0IHRvIHJlYWN0IHF1aWNrbHkgdG8ga2V5IHJlbGVhc2UKKwkJICogZXZlbnQuCisJCSAqLworCQltb2RfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2MCkpOworCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCQlyZWdfdmFsIHw9IEtCRF9TVEFUX0tQS1IgfCBLQkRfU1RBVF9LUlNTOworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwkJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUklFOworCQlyZWdfdmFsICY9IH5LQkRfU1RBVF9LRElFOworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhfa2V5cGFkX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkID0gZGV2X2lkOworCXVuc2lnbmVkIHNob3J0IHJlZ192YWw7CisKKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKworCS8qIERpc2FibGUgYm90aCBpbnRlcnJ1cHQgdHlwZXMgKi8KKwlyZWdfdmFsICY9IH4oS0JEX1NUQVRfS1JJRSB8IEtCRF9TVEFUX0tESUUpOworCS8qIENsZWFyIGludGVycnVwdHMgc3RhdHVzIGJpdHMgKi8KKwlyZWdfdmFsIHw9IEtCRF9TVEFUX0tQS1IgfCBLQkRfU1RBVF9LUEtEOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJaWYgKGtleXBhZC0+ZW5hYmxlZCkgeworCQkvKiBUaGUgbWF0cml4IGlzIHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQgKi8KKwkJa2V5cGFkLT5zdGFibGVfY291bnQgPSAwOworCisJCS8qIFNjaGVkdWxlIHRoZSBzY2FubmluZyBwcm9jZWR1cmUgbmVhciBpbiB0aGUgZnV0dXJlICovCisJCW1vZF90aW1lcigma2V5cGFkLT5jaGVja19tYXRyaXhfdGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIpKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9rZXlwYWRfY29uZmlnKHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKworCS8qCisJICogSW5jbHVkZSBlbmFibGVkIHJvd3MgaW4gaW50ZXJydXB0IGdlbmVyYXRpb24gKEtQQ1JbNzowXSkKKwkgKiBDb25maWd1cmUga2V5cGFkIGNvbHVtbnMgYXMgb3Blbi1kcmFpbiAoS1BDUlsxNTo4XSkKKwkgKi8KKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKwlyZWdfdmFsIHw9IGtleXBhZC0+cm93c19lbl9tYXNrICYgMHhmZjsJCS8qIHJvd3MgKi8KKwlyZWdfdmFsIHw9IChrZXlwYWQtPmNvbHNfZW5fbWFzayAmIDB4ZmYpIDw8IDg7CS8qIGNvbHMgKi8KKwl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKworCS8qIFdyaXRlIDAncyB0byBLUERSWzE1OjhdIChDb2x1bXMpICovCisJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisJcmVnX3ZhbCAmPSAweDAwZmY7CisJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisKKwkvKiBDb25maWd1cmUgY29sdW1ucyBhcyBvdXRwdXQsIHJvd3MgYXMgaW5wdXQgKEtERFJbMTU6MF0pICovCisJd3JpdGV3KDB4ZmYwMCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLRERSKTsKKworCS8qCisJICogQ2xlYXIgS2V5IERlcHJlc3MgYW5kIEtleSBSZWxlYXNlIHN0YXR1cyBiaXQuCisJICogQ2xlYXIgYm90aCBzeW5jaHJvbml6ZXIgY2hhaW4uCisJICovCisJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUEtSIHwgS0JEX1NUQVRfS1BLRCB8CisJCSAgIEtCRF9TVEFUX0tEU0MgfCBLQkRfU1RBVF9LUlNTOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJLyogRW5hYmxlIEtESSBhbmQgZGlzYWJsZSBLUkkgKGF2b2lkIGZhbHNlIHJlbGVhc2UgZXZlbnRzKS4gKi8KKwlyZWdfdmFsIHw9IEtCRF9TVEFUX0tESUU7CisJcmVnX3ZhbCAmPSB+S0JEX1NUQVRfS1JJRTsKKwl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKK30KKworc3RhdGljIHZvaWQgaW14X2tleXBhZF9pbmhpYml0KHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKworCS8qIEluaGliaXQgS0RJIGFuZCBLUkkgaW50ZXJydXB0cy4gKi8KKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwlyZWdfdmFsICY9IH4oS0JEX1NUQVRfS1JJRSB8IEtCRF9TVEFUX0tESUUpOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJLyogQ29sdW1zIGFzIG9wZW4gZHJhaW4gYW5kIGRpc2FibGUgYWxsIHJvd3MgKi8KKwl3cml0ZXcoMHhmZjAwLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworfQorCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiPiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBNYXJrIGtleXBhZCBhcyBiZWluZyBpbmFjdGl2ZSAqLworCWtleXBhZC0+ZW5hYmxlZCA9IGZhbHNlOworCXN5bmNocm9uaXplX2lycShrZXlwYWQtPmlycSk7CisJZGVsX3RpbWVyX3N5bmMoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyKTsKKworCWlteF9rZXlwYWRfaW5oaWJpdChrZXlwYWQpOworCisJLyogRGlzYWJsZSBjbG9jayB1bml0ICovCisJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOworfQorCitzdGF0aWMgaW50IGlteF9rZXlwYWRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGlteF9rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIj4lc1xuIiwgX19mdW5jX18pOworCisJLyogV2UgYmVjYW1lIGFjdGl2ZSBmcm9tIG5vdyAqLworCWtleXBhZC0+ZW5hYmxlZCA9IHRydWU7CisKKwkvKiBFbmFibGUgdGhlIGtwcCBjbG9jayAqLworCWNsa19lbmFibGUoa2V5cGFkLT5jbGspOworCWlteF9rZXlwYWRfY29uZmlnKGtleXBhZCk7CisKKwkvKiBTYW5pdHkgY29udHJvbCwgbm90IGFsbCB0aGUgcm93cyBtdXN0IGJlIGFjdGl2ZWQgbm93LiAqLworCWlmICgocmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKSAmIGtleXBhZC0+cm93c19lbl9tYXNrKSA9PSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJInRvbyBtYW55IGtleXMgcHJlc3NlZCwgY29udHJvbCBwaW5zIGluaXRpYWxpc2F0aW9uXG4iKTsKKwkJZ290byBvcGVuX2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3Blbl9lcnI6CisJaW14X2tleXBhZF9jbG9zZShkZXYpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbXhfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxLCBlcnJvciwgaTsKKworCWlmIChrZXltYXBfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGtleW1hcCBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZGVmaW5lZCBpbiBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSS9PIG1lbW9yeSBkZWZpbmVkIGluIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHRoZSBpbnB1dCBkZXZpY2VcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX3JlbF9tZW07CisJfQorCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlteF9rZXlwYWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtleXBhZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeSBmb3IgZHJpdmVyIGRhdGFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5wdXQ7CisJfQorCisJa2V5cGFkLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJa2V5cGFkLT5pcnEgPSBpcnE7CisJa2V5cGFkLT5zdGFibGVfY291bnQgPSAwOworCisJc2V0dXBfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkgICAgaW14X2tleXBhZF9jaGVja19mb3JfZXZlbnRzLCAodW5zaWduZWQgbG9uZykga2V5cGFkKTsKKworCWtleXBhZC0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChrZXlwYWQtPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9mcmVlX3ByaXY7CisJfQorCisJa2V5cGFkLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJrcHAiKTsKKwlpZiAoSVNfRVJSKGtleXBhZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBjbG9ja1xuIik7CisJCWVycm9yID0gUFRSX0VSUihrZXlwYWQtPmNsayk7CisJCWdvdG8gZmFpbGVkX3VubWFwOworCX0KKworCS8qIFNlYXJjaCBmb3Igcm93cyBhbmQgY29scyBlbmFibGVkICovCisJZm9yIChpID0gMDsgaSA8IGtleW1hcF9kYXRhLT5rZXltYXBfc2l6ZTsgaSsrKSB7CisJCWtleXBhZC0+cm93c19lbl9tYXNrIHw9IDEgPDwgS0VZX1JPVyhrZXltYXBfZGF0YS0+a2V5bWFwW2ldKTsKKwkJa2V5cGFkLT5jb2xzX2VuX21hc2sgfD0gMSA8PCBLRVlfQ09MKGtleW1hcF9kYXRhLT5rZXltYXBbaV0pOworCX0KKworCWlmIChrZXlwYWQtPnJvd3NfZW5fbWFzayA+ICgoMSA8PCBNQVhfTUFUUklYX0tFWV9ST1dTKSAtIDEpIHx8CisJICAga2V5cGFkLT5jb2xzX2VuX21hc2sgPiAoKDEgPDwgTUFYX01BVFJJWF9LRVlfQ09MUykgLSAxKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBrZXkgZGF0YSAodG9vIG1hbnkgcm93cyBvciBjb2x1bXMpXG4iKTsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZF9jbG9ja19wdXQ7CisJfQorCWRldl9kYmcoJnBkZXYtPmRldiwgImVuYWJsZWQgcm93cyBtYXNrOiAleFxuIiwga2V5cGFkLT5yb3dzX2VuX21hc2spOworCWRldl9kYmcoJnBkZXYtPmRldiwgImVuYWJsZWQgY29scyBtYXNrOiAleFxuIiwga2V5cGFkLT5jb2xzX2VuX21hc2spOworCisJLyogSW5pdCB0aGUgSW5wdXQgZGV2aWNlICovCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+b3BlbiA9IGlteF9rZXlwYWRfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gaW14X2tleXBhZF9jbG9zZTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2V5cGFkLT5rZXljb2RlczsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtleXBhZC0+a2V5Y29kZXNbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5cGFkLT5rZXljb2Rlcyk7CisKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXBfZGF0YSwgTUFUUklYX1JPV19TSElGVCwKKwkJCQlrZXlwYWQtPmtleWNvZGVzLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSBrZXlwYWQgd2lsbCBzdGF5IGRvcm1hbnQgdW50aWwgb3BlbmVkICovCisJaW14X2tleXBhZF9pbmhpYml0KGtleXBhZCk7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgaW14X2tleXBhZF9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICBwZGV2LT5uYW1lLCBrZXlwYWQpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlFcbiIpOworCQlnb3RvIGZhaWxlZF9jbG9ja19wdXQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSAqLworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrZXlwYWQpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKworCXJldHVybiAwOworCitmYWlsZWRfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBwZGV2KTsKK2ZhaWxlZF9jbG9ja19wdXQ6CisJY2xrX3B1dChrZXlwYWQtPmNsayk7CitmYWlsZWRfdW5tYXA6CisJaW91bm1hcChrZXlwYWQtPm1taW9fYmFzZSk7CitmYWlsZWRfZnJlZV9wcml2OgorCWtmcmVlKGtleXBhZCk7CitmYWlsZWRfZnJlZV9pbnB1dDoKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworZmFpbGVkX3JlbF9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhfa2V5cGFkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIj4lc1xuIiwgX19mdW5jX18pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CisKKwlmcmVlX2lycShrZXlwYWQtPmlycSwga2V5cGFkKTsKKwljbGtfcHV0KGtleXBhZC0+Y2xrKTsKKworCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShrZXlwYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9rZXlwYWRfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpbXgta2V5cGFkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gaW14X2tleXBhZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlteF9rZXlwYWRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlteF9rZXlwYWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9rZXlwYWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteF9rZXlwYWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXhfa2V5cGFkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlteF9rZXlwYWRfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfa2V5cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklNWCBLZXlwYWQgUG9ydCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aW14LWtleXBhZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9xdDIxNjAuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcXQyMTYwLmMKaW5kZXggMTkxY2M1MS4uMzFmMzAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9xdDIxNjAuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3F0MjE2MC5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHF0MjE2MF9pZHRhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcXQyMTYwX2lkdGFibGVbXSA9IHsKIAl7ICJxdDIxNjAiLCAwLCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCA4ZTkzODBiZi4uODU0ZTIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMTksMTAxICsxOSwxNDEgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NoX2tleXNjLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2RlZmluZSBLWUNSMV9PRkZTICAgMHgwMAotI2RlZmluZSBLWUNSMl9PRkZTICAgMHgwNAotI2RlZmluZSBLWUlORFJfT0ZGUyAgMHgwOAotI2RlZmluZSBLWU9VVERSX09GRlMgMHgwYwotCi0jZGVmaW5lIEtZQ1IyX0lSUV9MRVZFTCAgICAweDEwCi0jZGVmaW5lIEtZQ1IyX0lSUV9ESVNBQkxFRCAweDAwCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIga3ltZCwga2V5b3V0LCBrZXlpbjsKIH0gc2hfa2V5c2NfbW9kZVtdID0gewogCVtTSF9LRVlTQ19NT0RFXzFdID0geyAwLCA2LCA1IH0sCiAJW1NIX0tFWVNDX01PREVfMl0gPSB7IDEsIDUsIDYgfSwKIAlbU0hfS0VZU0NfTU9ERV8zXSA9IHsgMiwgNCwgNyB9LAorCVtTSF9LRVlTQ19NT0RFXzRdID0geyAzLCA2LCA2IH0sCisJW1NIX0tFWVNDX01PREVfNV0gPSB7IDQsIDYsIDcgfSwKKwlbU0hfS0VZU0NfTU9ERV82XSA9IHsgNSwgNywgNyB9LAogfTsKIAogc3RydWN0IHNoX2tleXNjX3ByaXYgewogCXZvaWQgX19pb21lbSAqaW9tZW1fYmFzZTsKIAlzdHJ1Y3QgY2xrICpjbGs7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2tleXM7CisJREVDTEFSRV9CSVRNQVAobGFzdF9rZXlzLCBTSF9LRVlTQ19NQVhLRVlTKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBwZGF0YTsKIH07CiAKKyNkZWZpbmUgS1lDUjEgMAorI2RlZmluZSBLWUNSMiAxCisjZGVmaW5lIEtZSU5EUiAyCisjZGVmaW5lIEtZT1VURFIgMworCisjZGVmaW5lIEtZQ1IyX0lSUV9MRVZFTCAgICAweDEwCisjZGVmaW5lIEtZQ1IyX0lSUV9ESVNBQkxFRCAweDAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2tleXNjX3JlYWQoc3RydWN0IHNoX2tleXNjX3ByaXYgKnAsIGludCByZWdfbnIpCit7CisJcmV0dXJuIGlvcmVhZDE2KHAtPmlvbWVtX2Jhc2UgKyAocmVnX25yIDw8IDIpKTsKK30KKworc3RhdGljIHZvaWQgc2hfa2V5c2Nfd3JpdGUoc3RydWN0IHNoX2tleXNjX3ByaXYgKnAsIGludCByZWdfbnIsCisJCQkgICB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCWlvd3JpdGUxNih2YWx1ZSwgcC0+aW9tZW1fYmFzZSArIChyZWdfbnIgPDwgMikpOworfQorCitzdGF0aWMgdm9pZCBzaF9rZXlzY19sZXZlbF9tb2RlKHN0cnVjdCBzaF9rZXlzY19wcml2ICpwLAorCQkJCXVuc2lnbmVkIGxvbmcga2V5c19zZXQpCit7CisJc3RydWN0IHNoX2tleXNjX2luZm8gKnBkYXRhID0gJnAtPnBkYXRhOworCisJc2hfa2V5c2Nfd3JpdGUocCwgS1lPVVREUiwgMCk7CisJc2hfa2V5c2Nfd3JpdGUocCwgS1lDUjIsIEtZQ1IyX0lSUV9MRVZFTCB8IChrZXlzX3NldCA8PCA4KSk7CisKKwlpZiAocGRhdGEtPmt5Y3IyX2RlbGF5KQorCQl1ZGVsYXkocGRhdGEtPmt5Y3IyX2RlbGF5KTsKK30KKworc3RhdGljIHZvaWQgc2hfa2V5c2NfbWFwX2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKm1hcCwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyKQoreworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IEJJVFNfVE9fTE9OR1MoU0hfS0VZU0NfTUFYS0VZUyk7IGsrKykKKwkJZGV2X2RiZyhkZXYsICIlc1slZF0gMHglbHhcbiIsIHN0ciwgaywgbWFwW2tdKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHNoX2tleXNjX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldl9pZDsKIAlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzaF9rZXlzY19pbmZvICpwZGF0YSA9ICZwcml2LT5wZGF0YTsKLQl1bnNpZ25lZCBsb25nIGtleXMsIGtleXMxLCBrZXlzMCwgbWFzazsKKwlpbnQga2V5b3V0X25yID0gc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5b3V0OworCWludCBrZXlpbl9uciA9IHNoX2tleXNjX21vZGVbcGRhdGEtPm1vZGVdLmtleWluOworCURFQ0xBUkVfQklUTUFQKGtleXMsIFNIX0tFWVNDX01BWEtFWVMpOworCURFQ0xBUkVfQklUTUFQKGtleXMwLCBTSF9LRVlTQ19NQVhLRVlTKTsKKwlERUNMQVJFX0JJVE1BUChrZXlzMSwgU0hfS0VZU0NfTUFYS0VZUyk7CiAJdW5zaWduZWQgY2hhciBrZXlpbl9zZXQsIHRtcDsKLQlpbnQgaSwgazsKKwlpbnQgaSwgaywgbjsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgImlzciFcbiIpOwogCi0Ja2V5czEgPSB+MDsKLQlrZXlzMCA9IDA7CisJYml0bWFwX2ZpbGwoa2V5czEsIFNIX0tFWVNDX01BWEtFWVMpOworCWJpdG1hcF96ZXJvKGtleXMwLCBTSF9LRVlTQ19NQVhLRVlTKTsKIAogCWRvIHsKLQkJa2V5cyA9IDA7CisJCWJpdG1hcF96ZXJvKGtleXMsIFNIX0tFWVNDX01BWEtFWVMpOwogCQlrZXlpbl9zZXQgPSAwOwogCi0JCWlvd3JpdGUxNihLWUNSMl9JUlFfRElTQUJMRUQsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKwkJc2hfa2V5c2Nfd3JpdGUocHJpdiwgS1lDUjIsIEtZQ1IyX0lSUV9ESVNBQkxFRCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNoX2tleXNjX21vZGVbcGRhdGEtPm1vZGVdLmtleW91dDsgaSsrKSB7Ci0JCQlpb3dyaXRlMTYoMHhmZmYgXiAoMyA8PCAoaSAqIDIpKSwKLQkJCQkgIHByaXYtPmlvbWVtX2Jhc2UgKyBLWU9VVERSX09GRlMpOworCQlmb3IgKGkgPSAwOyBpIDwga2V5b3V0X25yOyBpKyspIHsKKwkJCW4gPSBrZXlpbl9uciAqIGk7CisKKwkJCS8qIGRyaXZlIG9uZSBLRVlPVVQgcGluIGxvdywgcmVhZCBLRVlJTiBwaW5zICovCisJCQlzaF9rZXlzY193cml0ZShwcml2LCBLWU9VVERSLCAweGZmZmYgXiAoMyA8PCAoaSAqIDIpKSk7CiAJCQl1ZGVsYXkocGRhdGEtPmRlbGF5KTsKLQkJCXRtcCA9IGlvcmVhZDE2KHByaXYtPmlvbWVtX2Jhc2UgKyBLWUlORFJfT0ZGUyk7Ci0JCQlrZXlzIHw9IHRtcCA8PCAoc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5aW4gKiBpKTsKLQkJCXRtcCBePSAoMSA8PCBzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlpbikgLSAxOwotCQkJa2V5aW5fc2V0IHw9IHRtcDsKKwkJCXRtcCA9IHNoX2tleXNjX3JlYWQocHJpdiwgS1lJTkRSKTsKKworCQkJLyogc2V0IGJpdCBpZiBrZXkgcHJlc3MgaGFzIGJlZW4gZGV0ZWN0ZWQgKi8KKwkJCWZvciAoayA9IDA7IGsgPCBrZXlpbl9ucjsgaysrKSB7CisJCQkJaWYgKHRtcCAmICgxIDw8IGspKQorCQkJCQlfX3NldF9iaXQobiArIGssIGtleXMpOworCQkJfQorCisJCQkvKiBrZWVwIHRyYWNrIG9mIHdoaWNoIEtFWUlOIGJpdHMgdGhhdCBoYXZlIGJlZW4gc2V0ICovCisJCQlrZXlpbl9zZXQgfD0gdG1wIF4gKCgxIDw8IGtleWluX25yKSAtIDEpOwogCQl9CiAKLQkJaW93cml0ZTE2KDAsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWU9VVERSX09GRlMpOwotCQlpb3dyaXRlMTYoS1lDUjJfSVJRX0xFVkVMIHwgKGtleWluX3NldCA8PCA4KSwKLQkJCSAgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCQlzaF9rZXlzY19sZXZlbF9tb2RlKHByaXYsIGtleWluX3NldCk7CiAKLQkJaWYgKHBkYXRhLT5reWNyMl9kZWxheSkKLQkJCXVkZWxheShwZGF0YS0+a3ljcjJfZGVsYXkpOworCQliaXRtYXBfY29tcGxlbWVudChrZXlzLCBrZXlzLCBTSF9LRVlTQ19NQVhLRVlTKTsKKwkJYml0bWFwX2FuZChrZXlzMSwga2V5czEsIGtleXMsIFNIX0tFWVNDX01BWEtFWVMpOworCQliaXRtYXBfb3Ioa2V5czAsIGtleXMwLCBrZXlzLCBTSF9LRVlTQ19NQVhLRVlTKTsKIAotCQlrZXlzIF49IH4wOwotCQlrZXlzICY9ICgxIDw8IChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlpbiAqCi0JCQkgICAgICAgc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5b3V0KSkgLSAxOwotCQlrZXlzMSAmPSBrZXlzOwotCQlrZXlzMCB8PSBrZXlzOworCQlzaF9rZXlzY19tYXBfZGJnKCZwZGV2LT5kZXYsIGtleXMsICJrZXlzIik7CiAKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAia2V5cyAweCUwOGx4XG4iLCBrZXlzKTsKKwl9IHdoaWxlIChzaF9rZXlzY19yZWFkKHByaXYsIEtZQ1IyKSAmIDB4MDEpOwogCi0JfSB3aGlsZSAoaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpICYgMHgwMSk7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJsYXN0X2tleXMgMHglMDhseCBrZXlzMCAweCUwOGx4IGtleXMxIDB4JTA4bHhcbiIsCi0JCXByaXYtPmxhc3Rfa2V5cywga2V5czAsIGtleXMxKTsKKwlzaF9rZXlzY19tYXBfZGJnKCZwZGV2LT5kZXYsIHByaXYtPmxhc3Rfa2V5cywgImxhc3Rfa2V5cyIpOworCXNoX2tleXNjX21hcF9kYmcoJnBkZXYtPmRldiwga2V5czAsICJrZXlzMCIpOworCXNoX2tleXNjX21hcF9kYmcoJnBkZXYtPmRldiwga2V5czEsICJrZXlzMSIpOwogCiAJZm9yIChpID0gMDsgaSA8IFNIX0tFWVNDX01BWEtFWVM7IGkrKykgewogCQlrID0gcGRhdGEtPmtleWNvZGVzW2ldOwogCQlpZiAoIWspCiAJCQljb250aW51ZTsKIAotCQltYXNrID0gMSA8PCBpOwotCi0JCWlmICghKChwcml2LT5sYXN0X2tleXMgXiBrZXlzMCkgJiBtYXNrKSkKKwkJaWYgKHRlc3RfYml0KGksIGtleXMwKSA9PSB0ZXN0X2JpdChpLCBwcml2LT5sYXN0X2tleXMpKQogCQkJY29udGludWU7CiAKLQkJaWYgKChrZXlzMSB8IGtleXMwKSAmIG1hc2spIHsKKwkJaWYgKHRlc3RfYml0KGksIGtleXMxKSB8fCB0ZXN0X2JpdChpLCBrZXlzMCkpIHsKIAkJCWlucHV0X2V2ZW50KHByaXYtPmlucHV0LCBFVl9LRVksIGssIDEpOwotCQkJcHJpdi0+bGFzdF9rZXlzIHw9IG1hc2s7CisJCQlfX3NldF9iaXQoaSwgcHJpdi0+bGFzdF9rZXlzKTsKIAkJfQogCi0JCWlmICghKGtleXMxICYgbWFzaykpIHsKKwkJaWYgKCF0ZXN0X2JpdChpLCBrZXlzMSkpIHsKIAkJCWlucHV0X2V2ZW50KHByaXYtPmlucHV0LCBFVl9LRVksIGssIDApOwotCQkJcHJpdi0+bGFzdF9rZXlzICY9IH5tYXNrOworCQkJX19jbGVhcl9iaXQoaSwgcHJpdi0+bGFzdF9rZXlzKTsKIAkJfQogCiAJfQpAQCAtMTIyLDggKzE2Miw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jZGVmaW5lIHJlc19zaXplKHJlcykgKChyZXMpLT5lbmQgLSAocmVzKS0+c3RhcnQgKyAxKQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9rZXlzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2OwpAQCAtMTY0LDcgKzIwMiw3IEBACiAJbWVtY3B5KCZwcml2LT5wZGF0YSwgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHNpemVvZihwcml2LT5wZGF0YSkpOwogCXBkYXRhID0gJnByaXYtPnBkYXRhOwogCi0JcHJpdi0+aW9tZW1fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNfc2l6ZShyZXMpKTsKKwlwcml2LT5pb21lbV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKHByaXYtPmlvbWVtX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CiAJCWVycm9yID0gLUVOWElPOwpAQCAtMjIwLDEwICsyNTgsOSBAQAogCiAJY2xrX2VuYWJsZShwcml2LT5jbGspOwogCi0JaW93cml0ZTE2KChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5reW1kIDw8IDgpIHwKLQkJICBwZGF0YS0+c2Nhbl90aW1pbmcsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKLQlpb3dyaXRlMTYoMCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7Ci0JaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCXNoX2tleXNjX3dyaXRlKHByaXYsIEtZQ1IxLCAoc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua3ltZCA8PCA4KSB8CisJCSAgICAgICBwZGF0YS0+c2Nhbl90aW1pbmcpOworCXNoX2tleXNjX2xldmVsX21vZGUocHJpdiwgMCk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKQEAgLTI0OCw3ICsyODUsNyBAQAogewogCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpb3dyaXRlMTYoS1lDUjJfSVJRX0RJU0FCTEVELCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CisJc2hfa2V5c2Nfd3JpdGUocHJpdiwgS1lDUjIsIEtZQ1IyX0lSUV9ESVNBQkxFRCk7CiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwcml2LT5pbnB1dCk7CiAJZnJlZV9pcnEocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgcGRldik7CkBAIC0yNzAsNyArMzA3LDcgQEAKIAlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAotCXZhbHVlID0gaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCXZhbHVlID0gc2hfa2V5c2NfcmVhZChwcml2LCBLWUNSMSk7CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkgewogCQl2YWx1ZSB8PSAweDgwOwpAQCAtMjc5LDcgKzMxNiw3IEBACiAJCXZhbHVlICY9IH4weDgwOwogCX0KIAotCWlvd3JpdGUxNih2YWx1ZSwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCXNoX2tleXNjX3dyaXRlKHByaXYsIEtZQ1IxLCB2YWx1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hcGFuZWwuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hcGFuZWwuYwppbmRleCA3MWI4MjQzLi5hOGQyYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXBhbmVsLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2FwYW5lbC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlhcGFuZWxfcmVtb3ZlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhcGFuZWxfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhcGFuZWxfaWRbXSA9IHsKIAl7ICJmdWppdHN1X2FwYW5lbCIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0bGFzX2J0bnMuYwppbmRleCAxYjg3MTkxLi5kZmFhOWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYXRsYXNfYnV0dG9uX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkgICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKLQkJICAgICAgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICp2YWx1ZSwKKwkJICAgICAgdTMyIGJpdF93aWR0aCwgdTY0ICp2YWx1ZSwKIAkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCmluZGV4IDNiOWY1ODguLjRhZTA3OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCkBAIC0xNTIsNiArMTUyLDEzIEBACiAJCWdvdG8gZXhpdF91bnJlZ2lzdGVyX2lucHV0OwogCX0KIAorCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5ncGlvX2EpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHNldCBHUElPICVkIGZvciBpbnB1dFxuIiwKKwkJCXBkYXRhLT5ncGlvX2EpOworCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9pbnB1dDsKKwl9CisKIAllcnIgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fYiwgRFJWX05BTUUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgR1BJTyAlZFxuIiwKQEAgLTE1OSw2ICsxNjYsMTMgQEAKIAkJZ290byBleGl0X2ZyZWVfZ3Bpb19hOwogCX0KIAorCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5ncGlvX2IpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHNldCBHUElPICVkIGZvciBpbnB1dFxuIiwKKwkJCXBkYXRhLT5ncGlvX2IpOworCQlnb3RvIGV4aXRfZnJlZV9ncGlvX2E7CisJfQorCiAJLyogcmVxdWVzdCB0aGUgSVJRcyAqLwogCWVyciA9IHJlcXVlc3RfaXJxKGVuY29kZXItPmlycV9hLCAmcm90YXJ5X2VuY29kZXJfaXJxLAogCQkJICBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKaW5kZXggZDNmNTcyNDUuLjE0Nzc0NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlucHV0Lmg+CkBAIC0yODQsNyArMjgzLDYgQEAKIAlpZiAoIW5ld2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2luaXQoJm5ld2Rldi0+bXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZuZXdkZXYtPnJlcXVlc3RzX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ld2Rldi0+cmVxdWVzdHNfd2FpdHEpOwpAQCAtMjkyLDcgKzI5MCw3IEBACiAJbmV3ZGV2LT5zdGF0ZSA9IFVJU1RfTkVXX0RFVklDRTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IG5ld2RldjsKLQl1bmxvY2tfa2VybmVsKCk7CisJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKaW5kZXggYzhmNWE5YS4uY2JlYzNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKQEAgLTUzOCw2ICs1MzgsNyBAQAogCWRhdGEtPmlyZGF0YV9jb3VudCA9IDA7CiAJZGF0YS0+aXJkYXRhX29mZiA9IDA7CiAJZGF0YS0+aXJkYXRhX2Vycm9yID0gMDsKKwlkYXRhLT5pZGxlX2NvdW50ID0gMDsKIH0KIAogLyogQWRkcyBvbmUgYml0IG9mIGlyZGF0YSAqLwpAQCAtMTAwNiw3ICsxMDA3LDYgQEAKIAkJfQogCiAJCXdiY2lyX3Jlc2V0X2lyZGF0YShkYXRhKTsKLQkJZGF0YS0+aWRsZV9jb3VudCA9IDA7CiAJfQogCiBvdXQ6CkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBTVVNQRU5EL1JFU1VNRSBGVU5DVElPTlMKKyAqIFNFVFVQL0lOSVQvU1VTUEVORC9SRVNVTUUgRlVOQ1RJT05TCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMTk3LDcgKzExOTcsMTYgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOwogCW91dGIoV0JDSVJfSVJRX05PTkUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJLyoKKwkgKiBBQ1BJIHdpbGwgc2V0IHRoZSBIVyBkaXNhYmxlIGJpdCBmb3IgU1AzIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisJICogb3V0cHV0IHNpZ25hbHMgYXJlIGxlZnQgaW4gYW4gdW5kZWZpbmVkIHN0YXRlIHdoaWNoIG1heSBjYXVzZQorCSAqIHNwdXJpb3VzIGludGVycnVwdHMgd2hpY2ggd2UgbmVlZCB0byBpZ25vcmUgdW50aWwgdGhlIGhhcmR3YXJlCisJICogaXMgcmVpbml0aWFsaXplZC4KKwkgKi8KKwlkaXNhYmxlX2lycShkYXRhLT5pcnEpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjA3LDM3ICsxMjE2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXdiY2lyX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlKQotewotCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7Ci0KLQkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIENsZWFyIE1BVENIX0VOICovCi0Jd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDAsIDB4MDcpOwotCi0JLyogQ2xlYXIgQ0VJUl9FTiAqLwotCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMCwgMHgwMSk7Ci0KLQkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwotCXdiY2lyX3Jlc2V0X2lyZGF0YShkYXRhKTsKLQlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTRVRVUC9JTklUIEZVTkNUSU9OUwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIHZvaWQKLXdiY2lyX2NmZ19jZWlyKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQord2JjaXJfaW5pdF9odyhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSkKIHsKIAl1OCB0bXA7CiAKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoV0JDSVJfSVJRX05PTkUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCiAJLyogU2V0IFBST1RfU0VMLCBSWF9JTlYsIENsZWFyIENFSVJfRU4gKG5lZWRlZCBmb3IgdGhlIGxlZCkgKi8KIAl0bXAgPSBwcm90b2NvbCA8PCA0OwogCWlmIChpbnZlcnQpCkBAIC0xMjY0LDYgKzEyNTEsOTMgQEAKIAkgKiBzZXQgU1AzX0lSUlhfU1cgdG8gYmluYXJ5IDAxLCBoZWxwZnVsbHkgbm90IGRvY3VtZW50ZWQKIAkgKi8KIAlvdXRiKDB4MTAsIGRhdGEtPmViYXNlICsgV0JDSVJfUkVHX0VDRUlSX0NUUyk7CisKKwkvKiBFbmFibGUgZXh0ZW5kZWQgbW9kZSAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMik7CisJb3V0YihXQkNJUl9FWFRfRU5BQkxFLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRVhDUjEpOworCisJLyoKKwkgKiBDb25maWd1cmUgYmF1ZCBnZW5lcmF0b3IsIElSIGRhdGEgd2lsbCBiZSBzYW1wbGVkIGF0CisJICogYSBiaXRyYXRlIG9mOiAoMjRNaHogKiBwcmVzY2FsZXIpIC8gKGRpdmlzb3IgKiAxNikuCisJICoKKwkgKiBUaGUgRUNJUiByZWdpc3RlcnMgaW5jbHVkZSBhIGZsYWcgdG8gY2hhbmdlIHRoZQorCSAqIDI0TWh6IGNsb2NrIGZyZXEgdG8gNDhNaHouCisJICoKKwkgKiBJdCdzIG5vdCBkb2N1bWVudGVkIGluIHRoZSBzcGVjcywgYnV0IGZpZm8gbGV2ZWxzCisJICogb3RoZXIgdGhhbiAxNiBzZWVtcyB0byBiZSB1bnN1cHBvcnRlZC4KKwkgKi8KKworCS8qIHByZXNjYWxlciAxLjAsIHR4L3J4IGZpZm8gbHZsIDE2ICovCisJb3V0YigweDMwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRVhDUjIpOworCisJLyogU2V0IGJhdWQgZGl2aXNvciB0byBnZW5lcmF0ZSBvbmUgYnl0ZSBwZXIgYml0L2NlbGwgKi8KKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBJUl9QUk9UT0NPTF9SQzU6CisJCW91dGIoMHhBNywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOworCQlicmVhazsKKwljYXNlIElSX1BST1RPQ09MX1JDNjoKKwkJb3V0YigweDUzLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7CisJCWJyZWFrOworCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCQlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKKwkJYnJlYWs7CisJfQorCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREgpOworCisJLyogU2V0IENFSVIgbW9kZSAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7CisJb3V0YigweEMwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTUNSKTsKKwlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0xTUik7IC8qIENsZWFyIExTUiAqLworCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTVNSKTsgLyogQ2xlYXIgTVNSICovCisKKwkvKiBEaXNhYmxlIFJYIGRlbW9kLCBydW4tbGVuZ3RoIGVuY29kaW5nL2RlY29kaW5nLCBzZXQgZnJlcSBzcGFuICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS183KTsKKwlvdXRiKDB4MTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SQ0NGRyk7CisKKwkvKiBEaXNhYmxlIHRpbWVyICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS180KTsKKwlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMSk7CisKKwkvKiBFbmFibGUgTVNSIGludGVycnVwdCwgQ2xlYXIgQVVYX0lSWCAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNSk7CisJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjIpOworCisJLyogRGlzYWJsZSBDUkMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzYpOworCW91dGIoMHgyMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IzKTsKKworCS8qIFNldCBSWC9UWCAoZGUpbW9kdWxhdGlvbiBmcmVxLCBub3QgcmVhbGx5IHVzZWQgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOworCW91dGIoMHhGMiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSUlhEQyk7CisJb3V0YigweDY5LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJUWE1DKTsKKworCS8qIFNldCBpbnZlcnQgYW5kIHBpbiBkaXJlY3Rpb24gKi8KKwlpZiAoaW52ZXJ0KQorCQlvdXRiKDB4MTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOworCWVsc2UKKwkJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDRkc0KTsKKworCS8qIFNldCBGSUZPIHRocmVzaG9sZHMgKFJYID0gOCwgVFggPSAzKSwgcmVzZXQgUlgvVFggKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoMHg5NywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0ZDUik7CisKKwkvKiBDbGVhciBBVVggc3RhdHVzIGJpdHMgKi8KKwlvdXRiKDB4RTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19BU0NSKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfcmVzZXRfaXJkYXRhKGRhdGEpOworCW91dGIoV0JDSVJfSVJRX1JYIHwgV0JDSVJfSVJRX0VSUiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7Cit9CisKK3N0YXRpYyBpbnQKK3diY2lyX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7CisKKwl3YmNpcl9pbml0X2h3KGRhdGEpOworCWVuYWJsZV9pcnEoZGF0YS0+aXJxKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtMTM5Myw4NiArMTQ2Nyw3IEBACiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJmRldmljZS0+ZGV2LCAxKTsKIAotCXdiY2lyX2NmZ19jZWlyKGRhdGEpOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLQotCS8qIEVuYWJsZSBleHRlbmRlZCBtb2RlICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18yKTsKLQlvdXRiKFdCQ0lSX0VYVF9FTkFCTEUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBiYXVkIGdlbmVyYXRvciwgSVIgZGF0YSB3aWxsIGJlIHNhbXBsZWQgYXQKLQkgKiBhIGJpdHJhdGUgb2Y6ICgyNE1oeiAqIHByZXNjYWxlcikgLyAoZGl2aXNvciAqIDE2KS4KLQkgKgotCSAqIFRoZSBFQ0lSIHJlZ2lzdGVycyBpbmNsdWRlIGEgZmxhZyB0byBjaGFuZ2UgdGhlCi0JICogMjRNaHogY2xvY2sgZnJlcSB0byA0OE1oei4KLQkgKgotCSAqIEl0J3Mgbm90IGRvY3VtZW50ZWQgaW4gdGhlIHNwZWNzLCBidXQgZmlmbyBsZXZlbHMKLQkgKiBvdGhlciB0aGFuIDE2IHNlZW1zIHRvIGJlIHVuc3VwcG9ydGVkLgotCSAqLwotCi0JLyogcHJlc2NhbGVyIDEuMCwgdHgvcnggZmlmbyBsdmwgMTYgKi8KLQlvdXRiKDB4MzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMik7Ci0KLQkvKiBTZXQgYmF1ZCBkaXZpc29yIHRvIGdlbmVyYXRlIG9uZSBieXRlIHBlciBiaXQvY2VsbCAqLwotCXN3aXRjaCAocHJvdG9jb2wpIHsKLQljYXNlIElSX1BST1RPQ09MX1JDNToKLQkJb3V0YigweEE3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7Ci0JCWJyZWFrOwotCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgotCQlvdXRiKDB4NTMsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUl9QUk9UT0NPTF9ORUM6Ci0JCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOwotCQlicmVhazsKLQl9Ci0Jb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdESCk7Ci0KLQkvKiBTZXQgQ0VJUiBtb2RlICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKDB4QzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NQ1IpOwotCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTFNSKTsgLyogQ2xlYXIgTFNSICovCi0JaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NU1IpOyAvKiBDbGVhciBNU1IgKi8KLQotCS8qIERpc2FibGUgUlggZGVtb2QsIHJ1bi1sZW5ndGggZW5jb2RpbmcvZGVjb2RpbmcsIHNldCBmcmVxIHNwYW4gKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOwotCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JDQ0ZHKTsKLQotCS8qIERpc2FibGUgdGltZXIgKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzQpOwotCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IxKTsKLQotCS8qIEVuYWJsZSBNU1IgaW50ZXJydXB0LCBDbGVhciBBVVhfSVJYICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS181KTsKLQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMik7Ci0KLQkvKiBEaXNhYmxlIENSQyAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNik7Ci0Jb3V0YigweDIwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjMpOwotCi0JLyogU2V0IFJYL1RYIChkZSltb2R1bGF0aW9uIGZyZXEsIG5vdCByZWFsbHkgdXNlZCAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7Ci0Jb3V0YigweEYyLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJSWERDKTsKLQlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlRYTUMpOwotCi0JLyogU2V0IGludmVydCBhbmQgcGluIGRpcmVjdGlvbiAqLwotCWlmIChpbnZlcnQpCi0JCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7Ci0JZWxzZQotCQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOwotCi0JLyogU2V0IEZJRk8gdGhyZXNob2xkcyAoUlggPSA4LCBUWCA9IDMpLCByZXNldCBSWC9UWCAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7Ci0Jb3V0YigweDk3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRkNSKTsKLQotCS8qIENsZWFyIEFVWCBzdGF0dXMgYml0cyAqLwotCW91dGIoMHhFMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOwotCi0JLyogRW5hYmxlIGludGVycnVwdHMgKi8KLQlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCXdiY2lyX2luaXRfaHcoZGF0YSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwppbmRleCA5MGJlMzBlLi45MTY5ZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwpAQCAtNjgsMTAgKzY4LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MocG9zdF9pbnRlcnJ1cHRfZGVsYXksCiAJImRlbGF5IChtcykgYmVmb3JlIHJlY2FsIGFmdGVyIHJlY2FsIGludGVycnVwdCBkZXRlY3RlZCIpOwogCi1zdGF0aWMgaW50IGF1dG9yZWNhbCA9IDE7Ci1tb2R1bGVfcGFyYW0oYXV0b3JlY2FsLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVjYWwsICJlbmFibGUgcmVjYWxpYnJhdGlvbiBpbiB0aGUgZHJpdmVyIik7Ci0KIC8qCiAgKiBXaGVuIHRoZSB0b3VjaHBhZCBnZXRzIHVsdHJhLXNlbnNpdGl2ZSwgb25lIGNhbiBrZWVwIHRoZWlyIGZpbmdlciAxLzIiCiAgKiBhYm92ZSB0aGUgcGFkIGFuZCBzdGlsbCBoYXZlIGl0IHNlbmQgcGFja2V0cy4gIFRoaXMgY2F1c2VzIGEganVtcCBjdXJzb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGNpcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3BjaXBzMi5jCmluZGV4IDFkYWNiZTAuLjc5NzMxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGNpcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9wY2lwczIuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lwczJfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpcHMyX2lkc1tdID0gewogCXsKIAkJLnZlbmRvcgkJPSAweDE0ZjIsCS8qIE1PQklMSVRZICovCiAJCS5kZXZpY2UJCT0gMHgwMTIzLAkvKiBLZXlib2FyZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCmluZGV4IGUwZjMwMTguLmMzYjYyNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKQEAgLTI2LDYgKzI2LDggQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CkBAIC0xMTksMTEgKzEyMSwxMCBAQAogCiAJCWVycm9yID0gZGV2aWNlX2JpbmRfZHJpdmVyKCZzZXJpby0+ZGV2KTsKIAkJaWYgKGVycm9yKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJInNlcmlvOiBkZXZpY2VfYmluZF9kcml2ZXIoKSBmYWlsZWQgIgotCQkJCSJmb3IgJXMgKCVzKSBhbmQgJXMsIGVycm9yOiAlZFxuIiwKLQkJCQlzZXJpby0+cGh5cywgc2VyaW8tPm5hbWUsCi0JCQkJZHJ2LT5kZXNjcmlwdGlvbiwgZXJyb3IpOworCQkJZGV2X3dhcm4oJnNlcmlvLT5kZXYsCisJCQkJICJkZXZpY2VfYmluZF9kcml2ZXIoKSBmYWlsZWQgZm9yICVzICglcykgYW5kICVzLCBlcnJvcjogJWRcbiIsCisJCQkJIHNlcmlvLT5waHlzLCBzZXJpby0+bmFtZSwKKwkJCQkgZHJ2LT5kZXNjcmlwdGlvbiwgZXJyb3IpOwogCQkJc2VyaW9fZGlzY29ubmVjdF9kcml2ZXIoc2VyaW8pOwogCQkJc2VyaW8tPmRldi5kcml2ZXIgPSBOVUxMOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtMTM4LDkgKzEzOSw5IEBACiAKIAllcnJvciA9IGRldmljZV9hdHRhY2goJnNlcmlvLT5kZXYpOwogCWlmIChlcnJvciA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJzZXJpbzogZGV2aWNlX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAotCQkJc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLCBlcnJvcik7CisJCWRldl93YXJuKCZzZXJpby0+ZGV2LAorCQkJICJkZXZpY2VfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCQkgc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLCBlcnJvcik7CiB9CiAKIApAQCAtMTk0LDE3ICsxOTUsMTQgQEAKIAogCWV2ZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvX2V2ZW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFldmVudCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJzZXJpbzogTm90IGVub3VnaCBtZW1vcnkgdG8gcXVldWUgZXZlbnQgJWRcbiIsCi0JCQlldmVudF90eXBlKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJzZXJpbzogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAotCQkJZXZlbnRfdHlwZSk7CisJCXByX3dhcm5pbmcoIkNhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKKwkJCSAgIGV2ZW50X3R5cGUpOwogCQlrZnJlZShldmVudCk7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMjMwLDE0ICsyMjgsMTIgQEAKIAogc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKLQlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmU7CisJc3RydWN0IHNlcmlvX2V2ZW50ICplLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCkgewotCQllID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3Qgc2VyaW9fZXZlbnQsIG5vZGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCwgbm9kZSkgewogCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKQEAgLTI0Nyw3ICsyNDMsNyBAQAogCQkJaWYgKGV2ZW50LT50eXBlICE9IGUtPnR5cGUpCiAJCQkJYnJlYWs7CiAKLQkJCWxpc3RfZGVsX2luaXQobm9kZSk7CisJCQlsaXN0X2RlbF9pbml0KCZlLT5ub2RlKTsKIAkJCXNlcmlvX2ZyZWVfZXZlbnQoZSk7CiAJCX0KIAl9CkBAIC0yNTgsMjMgKzI1NCwxOCBAQAogCiBzdGF0aWMgc3RydWN0IHNlcmlvX2V2ZW50ICpzZXJpb19nZXRfZXZlbnQodm9pZCkKIHsKLQlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlpZiAobGlzdF9lbXB0eSgmc2VyaW9fZXZlbnRfbGlzdCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJnNlcmlvX2V2ZW50X2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmc2VyaW9fZXZlbnRfbGlzdCwKKwkJCQkJIHN0cnVjdCBzZXJpb19ldmVudCwgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAl9CiAKLQlub2RlID0gc2VyaW9fZXZlbnRfbGlzdC5uZXh0OwotCWV2ZW50ID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3Qgc2VyaW9fZXZlbnQsIG5vZGUpOwotCWxpc3RfZGVsX2luaXQobm9kZSk7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gZXZlbnQ7CiB9CiAKQEAgLTI4NywyOSArMjc4LDI3IEBACiAJd2hpbGUgKChldmVudCA9IHNlcmlvX2dldF9ldmVudCgpKSkgewogCiAJCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLQkJCWNhc2UgU0VSSU9fUkVHSVNURVJfUE9SVDoKLQkJCQlzZXJpb19hZGRfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKIAotCQkJY2FzZSBTRVJJT19SRUNPTk5FQ1RfUE9SVDoKLQkJCQlzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKKwkJY2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOgorCQkJc2VyaW9fYWRkX3BvcnQoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKIAotCQkJY2FzZSBTRVJJT19SRVNDQU5fUE9SVDoKLQkJCQlzZXJpb19kaXNjb25uZWN0X3BvcnQoZXZlbnQtPm9iamVjdCk7Ci0JCQkJc2VyaW9fZmluZF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgU0VSSU9fUkVDT05ORUNUX1BPUlQ6CisJCQlzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKKwkJCWJyZWFrOwogCi0JCQljYXNlIFNFUklPX1JFQ09OTkVDVF9DSEFJTjoKLQkJCQlzZXJpb19yZWNvbm5lY3RfY2hhaW4oZXZlbnQtPm9iamVjdCk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgU0VSSU9fUkVTQ0FOX1BPUlQ6CisJCQlzZXJpb19kaXNjb25uZWN0X3BvcnQoZXZlbnQtPm9iamVjdCk7CisJCQlzZXJpb19maW5kX2RyaXZlcihldmVudC0+b2JqZWN0KTsKKwkJCWJyZWFrOwogCi0JCQljYXNlIFNFUklPX0FUVEFDSF9EUklWRVI6Ci0JCQkJc2VyaW9fYXR0YWNoX2RyaXZlcihldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKKwkJY2FzZSBTRVJJT19SRUNPTk5FQ1RfQ0hBSU46CisJCQlzZXJpb19yZWNvbm5lY3RfY2hhaW4oZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKIAotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKKwkJY2FzZSBTRVJJT19BVFRBQ0hfRFJJVkVSOgorCQkJc2VyaW9fYXR0YWNoX2RyaXZlcihldmVudC0+b2JqZWN0KTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoZXZlbnQpOwpAQCAtMzI1LDE2ICszMTQsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHZvaWQgKm9iamVjdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKLQlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0KSB7Ci0JCWV2ZW50ID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3Qgc2VyaW9fZXZlbnQsIG5vZGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgbmV4dCwgJnNlcmlvX2V2ZW50X2xpc3QsIG5vZGUpIHsKIAkJaWYgKGV2ZW50LT5vYmplY3QgPT0gb2JqZWN0KSB7Ci0JCQlsaXN0X2RlbF9pbml0KG5vZGUpOworCQkJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPm5vZGUpOwogCQkJc2VyaW9fZnJlZV9ldmVudChldmVudCk7CiAJCX0KIAl9CkBAIC0zODAsNyArMzY3LDYgQEAKIAkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhbGlzdF9lbXB0eSgmc2VyaW9fZXZlbnRfbGlzdCkpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgInNlcmlvOiBrc2VyaW9kIGV4aXRpbmdcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00NDUsNiArNDMxLDExIEBACiAJLmF0dHJzCT0gc2VyaW9fZGV2aWNlX2lkX2F0dHJzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnNlcmlvX2RldmljZV9hdHRyX2dyb3Vwc1tdID0geworCSZzZXJpb19pZF9hdHRyX2dyb3VwLAorCU5VTEwKK307CisKIHN0YXRpYyBzc2l6ZV90IHNlcmlvX3JlYmluZF9kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbyA9IHRvX3NlcmlvX3BvcnQoZGV2KTsKQEAgLTUzMiw2ICs1MjMsNyBAQAogCQkJKGxvbmcpYXRvbWljX2luY19yZXR1cm4oJnNlcmlvX25vKSAtIDEpOwogCXNlcmlvLT5kZXYuYnVzID0gJnNlcmlvX2J1czsKIAlzZXJpby0+ZGV2LnJlbGVhc2UgPSBzZXJpb19yZWxlYXNlX3BvcnQ7CisJc2VyaW8tPmRldi5ncm91cHMgPSBzZXJpb19kZXZpY2VfYXR0cl9ncm91cHM7CiAJaWYgKHNlcmlvLT5wYXJlbnQpIHsKIAkJc2VyaW8tPmRldi5wYXJlbnQgPSAmc2VyaW8tPnBhcmVudC0+ZGV2OwogCQlzZXJpby0+ZGVwdGggPSBzZXJpby0+cGFyZW50LT5kZXB0aCArIDE7CkBAIC01NTUsMjEgKzU0NywxNSBAQAogCX0KIAogCWxpc3RfYWRkX3RhaWwoJnNlcmlvLT5ub2RlLCAmc2VyaW9fbGlzdCk7CisKIAlpZiAoc2VyaW8tPnN0YXJ0KQogCQlzZXJpby0+c3RhcnQoc2VyaW8pOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZXJpby0+ZGV2KTsKIAlpZiAoZXJyb3IpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJInNlcmlvOiBkZXZpY2VfYWRkKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCWRldl9lcnIoJnNlcmlvLT5kZXYsCisJCQkiZGV2aWNlX2FkZCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAogCQkJc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLCBlcnJvcik7Ci0JZWxzZSB7Ci0JCXNlcmlvLT5yZWdpc3RlcmVkID0gdHJ1ZTsKLQkJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNlcmlvLT5kZXYua29iaiwgJnNlcmlvX2lkX2F0dHJfZ3JvdXApOwotCQlpZiAoZXJyb3IpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkic2VyaW86IHN5c2ZzX2NyZWF0ZV9ncm91cCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAotCQkJCXNlcmlvLT5waHlzLCBzZXJpby0+bmFtZSwgZXJyb3IpOwotCX0KIH0KIAogLyoKQEAgLTU5NiwxMSArNTgyLDggQEAKIAkJc2VyaW8tPnBhcmVudCA9IE5VTEw7CiAJfQogCi0JaWYgKHNlcmlvLT5yZWdpc3RlcmVkKSB7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2VyaW8tPmRldi5rb2JqLCAmc2VyaW9faWRfYXR0cl9ncm91cCk7CisJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKCZzZXJpby0+ZGV2KSkKIAkJZGV2aWNlX2RlbCgmc2VyaW8tPmRldik7Ci0JCXNlcmlvLT5yZWdpc3RlcmVkID0gZmFsc2U7Ci0JfQogCiAJbGlzdF9kZWxfaW5pdCgmc2VyaW8tPm5vZGUpOwogCXNlcmlvX3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhzZXJpbyk7CkBAIC03OTgsOSArNzgxLDggQEAKIAogCWVycm9yID0gZHJpdmVyX2F0dGFjaCgmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJInNlcmlvOiBkcml2ZXJfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyB3aXRoIGVycm9yICVkXG4iLAotCQkJZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOworCQlwcl93YXJuaW5nKCJkcml2ZXJfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyB3aXRoIGVycm9yICVkXG4iLAorCQkJICAgZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOwogfQogCiBpbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpCkBAIC04MjAsOCArODAyLDcgQEAKIAogCWVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJInNlcmlvOiBkcml2ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCXByX2VycigiZHJpdmVyX3JlZ2lzdGVyKCkgZmFpbGVkIGZvciAlcywgZXJyb3I6ICVkXG4iLAogCQkJZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtOTg3LDcgKzk2OCw3IEBACiAKICAgICAgICAgaWYgKGxpa2VseShzZXJpby0+ZHJ2KSkgewogICAgICAgICAgICAgICAgIHJldCA9IHNlcmlvLT5kcnYtPmludGVycnVwdChzZXJpbywgZGF0YSwgZGZsKTsKLQl9IGVsc2UgaWYgKCFkZmwgJiYgc2VyaW8tPnJlZ2lzdGVyZWQpIHsKKwl9IGVsc2UgaWYgKCFkZmwgJiYgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJnNlcmlvLT5kZXYpKSB7CiAJCXNlcmlvX3Jlc2NhbihzZXJpbyk7CiAJCXJldCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTEwMTgsNyArOTk5LDcgQEAKIAogCWVycm9yID0gYnVzX3JlZ2lzdGVyKCZzZXJpb19idXMpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIgInNlcmlvOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaW8gYnVzLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaW8gYnVzLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIApAQCAtMTAyNiw3ICsxMDA3LDcgQEAKIAlpZiAoSVNfRVJSKHNlcmlvX3Rhc2spKSB7CiAJCWJ1c191bnJlZ2lzdGVyKCZzZXJpb19idXMpOwogCQllcnJvciA9IFBUUl9FUlIoc2VyaW9fdGFzayk7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VyaW86IEZhaWxlZCB0byBzdGFydCBrc2VyaW9kLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQga3NlcmlvZCwgZXJyb3I6ICVkXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMKaW5kZXggZWJiMjJmOC4uODI5OGUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCWRydmRhdGEtPmlycSA9IHJfaXJxLnN0YXJ0OwogCiAJcGh5c19hZGRyID0gcl9tZW0uc3RhcnQ7Ci0JcmVtYXBfc2l6ZSA9IHJfbWVtLmVuZCAtIHJfbWVtLnN0YXJ0ICsgMTsKKwlyZW1hcF9zaXplID0gcmVzb3VyY2Vfc2l6ZSgmcl9tZW0pOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBoeXNfYWRkciwgcmVtYXBfc2l6ZSwgRFJJVkVSX05BTUUpKSB7CiAJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgbG9jayBtZW1vcnkgcmVnaW9uIGF0IDB4JTA4bGxYXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIpOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob2ZfZGV2LT5ub2RlLCAwLCAmcl9tZW0pKQogCQlkZXZfZXJyKGRldiwgImludmFsaWQgYWRkcmVzc1xuIik7CiAJZWxzZQotCQlyZWxlYXNlX21lbV9yZWdpb24ocl9tZW0uc3RhcnQsIHJfbWVtLmVuZCAtIHJfbWVtLnN0YXJ0ICsgMSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyX21lbS5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcl9tZW0pKTsKIAogCWtmcmVlKGRydmRhdGEpOwogCkBAIC0zNTQsNyArMzU0LDcgQEAKIH0KIAogLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwczJfb2ZfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBzMl9vZl9tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtcHMyLTEuMDAuYSIsIH0sCiAJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwppbmRleCAzZDMyZDNmLi44NjZhOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCkBAIC05Miw3ICs5Miw3IEBACiAvKiBEQVRBIFNUUlVDVFVSRVMgKi8KIAogLyogRGV2aWNlIHRhYmxlICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ3Rjb191c2JpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBndGNvX3VzYmlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9HVENPLCBQSURfNDAwKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfR1RDTywgUElEXzQwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0dUQ08sIFBJRF8xMDAwKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKaW5kZXggMTYzMTBmMy4uOGZlZjFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CkBAIC0xMjAsNiArMTIxLDggQEAKIAlzdHJ1Y3QgdXJiICp1cmI7CiB9OwogCitleHRlcm4gY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW107CisKIGV4dGVybiBpbnQgd2Fjb21fd2FjX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICogd2Fjb21fd2FjLCB2b2lkICogd2NvbWJvKTsKIGV4dGVybiB2b2lkIHdhY29tX3JlcG9ydF9hYnModm9pZCAqd2NvbWJvLCB1bnNpZ25lZCBpbnQgYWJzX3R5cGUsIGludCBhYnNfZGF0YSk7CiBleHRlcm4gdm9pZCB3YWNvbV9yZXBvcnRfcmVsKHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IHJlbF90eXBlLCBpbnQgcmVsX2RhdGEpOwpAQCAtMTQyLDcgKzE0NSw1IEBACiBleHRlcm4gdm9pZCBpbnB1dF9kZXZfYmVlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKIGV4dGVybiBfX3UxNiB3YWNvbV9sZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKIGV4dGVybiBfX3UxNiB3YWNvbV9iZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKLWV4dGVybiBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmdldF93YWNvbV9mZWF0dXJlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmdldF9kZXZpY2VfdGFibGUodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCAwNzJmMzNiLi5hMTc3MGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwpAQCAtMjExLDcgKzIxMSw4IEBACiAJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpIHwKIAkJQklUX01BU0soQlROX1RPT0xfUEVOKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMpIHwKIAkJQklUX01BU0soQlROX1RPT0xfTU9VU0UpIHwgQklUX01BU0soQlROX1NUWUxVUzIpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX0RJU1RBTkNFLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT5kaXN0YW5jZV9tYXgsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX0RJU1RBTkNFLAorCQkJICAgICAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLmRpc3RhbmNlX21heCwgMCwgMCk7CiB9CiAKIHZvaWQgaW5wdXRfZGV2X2kzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKQEAgLTI2MSw3ICsyNjIsOCBAQAogCQlCSVRfTUFTSyhCVE5fVE9PTF9NT1VTRSkgfCBCSVRfTUFTSyhCVE5fVE9PTF9CUlVTSCkgfAogCQlCSVRfTUFTSyhCVE5fVE9PTF9QRU5DSUwpIHwgQklUX01BU0soQlROX1RPT0xfQUlSQlJVU0gpIHwKIAkJQklUX01BU0soQlROX1RPT0xfTEVOUykgfCBCSVRfTUFTSyhCVE5fU1RZTFVTMik7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsCisJCQkgICAgIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMuZGlzdGFuY2VfbWF4LCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19XSEVFTCwgMCwgMTAyMywgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfVElMVF9YLCAwLCAxMjcsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1RJTFRfWSwgMCwgMTI3LCAwLCAwKTsKQEAgLTI4MiwxNyArMjg0LDE5IEBACiAKIHZvaWQgaW5wdXRfZGV2X3RwYyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKLQlpZiAod2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQIHx8Ci0JICAgIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgewotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy0+eF9waHksIDAsIDApOwotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy0+eV9waHksIDAsIDApOwotCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT09MX0RPVUJMRVRBUCk7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbV93YWMtPmZlYXR1cmVzOworCisJaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9ET1VCTEVUQVAgfHwKKwkgICAgZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgeworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgZmVhdHVyZXMtPnhfcGh5LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIGZlYXR1cmVzLT55X3BoeSwgMCwgMCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAl9CiB9CiAKIHZvaWQgaW5wdXRfZGV2X3RwYzJmZyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKLQlpZiAod2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7CisJaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMuZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7CiAJCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPT0xfVFJJUExFVEFQKTsKIAkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9NU0MpOwogCQlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVRfTUFTSyhNU0NfU0VSSUFMKTsKQEAgLTUzMiwyMSArNTM2LDM4IEBACiAJc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjOwogCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yOworCisJaWYgKCFpZC0+ZHJpdmVyX2luZm8pCisJCXJldHVybiAtRUlOVkFMOwogCiAJd2Fjb20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb20pLCBHRlBfS0VSTkVMKTsKIAl3YWNvbV93YWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb21fd2FjKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCF3YWNvbSB8fCAhaW5wdXRfZGV2IHx8ICF3YWNvbV93YWMpCisJaWYgKCF3YWNvbSB8fCAhaW5wdXRfZGV2IHx8ICF3YWNvbV93YWMpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwxOworCX0KIAotCXdhY29tX3dhYy0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBXQUNPTV9QS0dMRU5fTUFYLCBHRlBfS0VSTkVMLCAmd2Fjb20tPmRhdGFfZG1hKTsKLQlpZiAoIXdhY29tX3dhYy0+ZGF0YSkKKwl3YWNvbV93YWMtPmZlYXR1cmVzID0gKigoc3RydWN0IHdhY29tX2ZlYXR1cmVzICopaWQtPmRyaXZlcl9pbmZvKTsKKwlmZWF0dXJlcyA9ICZ3YWNvbV93YWMtPmZlYXR1cmVzOworCWlmIChmZWF0dXJlcy0+cGt0bGVuID4gV0FDT01fUEtHTEVOX01BWCkgeworCQllcnJvciA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbDE7CisJfQorCisJd2Fjb21fd2FjLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFdBQ09NX1BLR0xFTl9NQVgsCisJCQkJCSAgIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOworCWlmICghd2Fjb21fd2FjLT5kYXRhKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CiAKIAl3YWNvbS0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhY29tLT5pcnEpCisJaWYgKCF3YWNvbS0+aXJxKSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsMjsKKwl9CiAKIAl3YWNvbS0+dXNiZGV2ID0gZGV2OwogCXdhY29tLT5kZXYgPSBpbnB1dF9kZXY7CkBAIC01NTUsMTEgKzU3Niw2IEBACiAJdXNiX21ha2VfcGF0aChkZXYsIHdhY29tLT5waHlzLCBzaXplb2Yod2Fjb20tPnBoeXMpKTsKIAlzdHJsY2F0KHdhY29tLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZih3YWNvbS0+cGh5cykpOwogCi0Jd2Fjb21fd2FjLT5mZWF0dXJlcyA9IGZlYXR1cmVzID0gZ2V0X3dhY29tX2ZlYXR1cmUoaWQpOwotCUJVR19PTihmZWF0dXJlcy0+cGt0bGVuID4gV0FDT01fUEtHTEVOX01BWCk7Ci0KLQlpbnB1dF9kZXYtPm5hbWUgPSB3YWNvbV93YWMtPmZlYXR1cmVzLT5uYW1lOwotCXdhY29tLT53YWNvbV93YWMgPSB3YWNvbV93YWM7CiAJdXNiX3RvX2lucHV0X2lkKGRldiwgJmlucHV0X2Rldi0+aWQpOwogCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmludGYtPmRldjsKQEAgLTU3Niw2ICs1OTIsMTkgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDI7CiAKKwlzdHJsY3B5KHdhY29tX3dhYy0+bmFtZSwgZmVhdHVyZXMtPm5hbWUsIHNpemVvZih3YWNvbV93YWMtPm5hbWUpKTsKKworCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBUQUJMRVRQQyB8fCBmZWF0dXJlcy0+dHlwZSA9PSBUQUJMRVRQQzJGRykgeworCQkvKiBBcHBlbmQgdGhlIGRldmljZSB0eXBlIHRvIHRoZSBuYW1lICovCisJCXN0cmxjYXQod2Fjb21fd2FjLT5uYW1lLAorCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1BFTiA/CisJCQkJIiBQZW4iIDogIiBGaW5nZXIiLAorCQkJc2l6ZW9mKHdhY29tX3dhYy0+bmFtZSkpOworCX0KKworCWlucHV0X2Rldi0+bmFtZSA9IHdhY29tX3dhYy0+bmFtZTsKKwl3YWNvbS0+d2Fjb21fd2FjID0gd2Fjb21fd2FjOworCiAJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CiAKQEAgLTY0MCw3ICs2NjksNyBAQAogc3RhdGljIGludCB3YWNvbV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHdhY29tICp3YWNvbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0Jc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9IHdhY29tLT53YWNvbV93YWMtPmZlYXR1cmVzOworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSAmd2Fjb20tPndhY29tX3dhYy0+ZmVhdHVyZXM7CiAJaW50IHJ2OwogCiAJbXV0ZXhfbG9jaygmd2Fjb20tPmxvY2spOwpAQCAtNjYzLDYgKzY5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3YWNvbV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIndhY29tIiwKKwkuaWRfdGFibGUgPQl3YWNvbV9pZHMsCiAJLnByb2JlID0Jd2Fjb21fcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl3YWNvbV9kaXNjb25uZWN0LAogCS5zdXNwZW5kID0Jd2Fjb21fc3VzcGVuZCwKQEAgLTY3NCw3ICs3MDQsNyBAQAogc3RhdGljIGludCBfX2luaXQgd2Fjb21faW5pdCh2b2lkKQogewogCWludCByZXN1bHQ7Ci0Jd2Fjb21fZHJpdmVyLmlkX3RhYmxlID0gZ2V0X2RldmljZV90YWJsZSgpOworCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwppbmRleCAxMDU2ZjE0Li4zZDgxNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwpAQCAtNTUsNiArNTUsNyBAQAogCiBzdGF0aWMgaW50IHdhY29tX3BsX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogeworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSAmd2Fjb20tPmZlYXR1cmVzOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlpbnQgcHJveCwgcHJlc3N1cmU7CiAKQEAgLTY4LDkgKzY5LDkgQEAKIAlpZiAocHJveCkgewogCQl3YWNvbS0+aWRbMF0gPSBFUkFTRVJfREVWSUNFX0lEOwogCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7Ci0JCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKKwkJaWYgKGZlYXR1cmVzLT5wcmVzc3VyZV9tYXggPiAyNTUpCiAJCQlwcmVzc3VyZSA9IChwcmVzc3VyZSA8PCAxKSB8ICgoZGF0YVs0XSA+PiA2KSAmIDEpOwotCQlwcmVzc3VyZSArPSAod2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyAxKSAvIDI7CisJCXByZXNzdXJlICs9IChmZWF0dXJlcy0+cHJlc3N1cmVfbWF4ICsgMSkgLyAyOwogCiAJCS8qCiAJCSAqIGlmIGdvaW5nIGZyb20gb3V0IG9mIHByb3hpbWl0eSBpbnRvIHByb3hpbWl0eSBzZWxlY3QgYmV0d2VlbiB0aGUgZXJhc2VyCkBAIC0xNTIsNiArMTUzLDcgQEAKIAogc3RhdGljIGludCB3YWNvbV9ncmFwaGlyZV9pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKIHsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAJaW50IHgsIHksIHJ3OwogCXN0YXRpYyBpbnQgcGVuRGF0YSA9IDA7CkBAIC0xNzksOCArMTgxLDcgQEAKIAogCQkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9NSURETEUsIGRhdGFbMV0gJiAweDA0KTsKLQkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0IHx8Ci0JCQkJCQl3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fTU8pIHsKKwkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQgfHwgZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fTU8pIHsKIAkJCQkJcncgPSBkYXRhWzddICYgMHgwNCA/IChkYXRhWzddICYgMHgwMyktNCA6IChkYXRhWzddICYgMHgwMyk7CiAJCQkJCXdhY29tX3JlcG9ydF9yZWwod2NvbWJvLCBSRUxfV0hFRUwsIC1ydyk7CiAJCQkJfSBlbHNlCkBAIC0xOTIsOCArMTkzLDcgQEAKIAkJCQl3YWNvbS0+aWRbMF0gPSBDVVJTT1JfREVWSUNFX0lEOwogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTEVGVCwgZGF0YVsxXSAmIDB4MDEpOwogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fUklHSFQsIGRhdGFbMV0gJiAweDAyKTsKLQkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0IHx8Ci0JCQkJCQl3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fTU8pCisJCQkJaWYgKGZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0IHx8IGZlYXR1cmVzLT50eXBlID09IFdBQ09NX01PKQogCQkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX0RJU1RBTkNFLCBkYXRhWzZdICYgMHgzZik7CiAJCQkJZWxzZQogCQkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX0RJU1RBTkNFLCBkYXRhWzddICYgMHgzZik7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAl9CiAKIAkvKiBzZW5kIHBhZCBkYXRhICovCi0Jc3dpdGNoICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUpIHsKKwlzd2l0Y2ggKGZlYXR1cmVzLT50eXBlKSB7CiAJICAgIGNhc2UgV0FDT01fRzQ6CiAJCWlmIChkYXRhWzddICYgMHhmOCkgewogCQkJaWYgKHBlbkRhdGEpIHsKQEAgLTMwMCwxMSArMzAwLDEyIEBACiAKIHN0YXRpYyBpbnQgd2Fjb21faW50dW9zX2lub3V0KHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCiB7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCWludCBpZHggPSAwOwogCiAJLyogdG9vbCBudW1iZXIgKi8KLQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUykKKwlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TKQogCQlpZHggPSBkYXRhWzFdICYgMHgwMTsKIAogCS8qIEVudGVyIHJlcG9ydCAqLwpAQCAtNDAyLDcgKzQwMyw3IEBACiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUzIsIDApOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgMCk7CiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1dIRUVMLCAwKTsKLQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MpCisJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MpCiAJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19aLCAwKTsKIAkJfQogCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbaWR4XSwgMCk7CkBAIC00MTYsMTMgKzQxNywxNCBAQAogCiBzdGF0aWMgdm9pZCB3YWNvbV9pbnR1b3NfZ2VuZXJhbChzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogeworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSAmd2Fjb20tPmZlYXR1cmVzOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAl1bnNpZ25lZCBpbnQgdDsKIAogCS8qIGdlbmVyYWwgcGVuIHBhY2tldCAqLwogCWlmICgoZGF0YVsxXSAmIDB4YjgpID09IDB4YTApIHsKIAkJdCA9IChkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMyk7Ci0JCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNFMgJiYgd2Fjb20tPmZlYXR1cmVzLT50eXBlIDw9IElOVFVPUzRMKQorCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNFMgJiYgZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TNEwpCiAJCQl0ID0gKHQgPDwgMSkgfCAoZGF0YVsxXSAmIDEpOwogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCB0KTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19USUxUX1gsCkBAIC00NDYsNiArNDQ4LDcgQEAKIAogc3RhdGljIGludCB3YWNvbV9pbnR1b3NfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCiB7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCXVuc2lnbmVkIGludCB0OwogCWludCBpZHggPSAwLCByZXN1bHQ7CkBAIC00NTcsNyArNDYwLDcgQEAKIAl9CiAKIAkvKiB0b29sIG51bWJlciAqLwotCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TKQorCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MpCiAJCWlkeCA9IGRhdGFbMV0gJiAweDAxOwogCiAJLyogcGFkIHBhY2tldHMuIFdvcmtzIGFzIGEgc2Vjb25kIHRvb2wgYW5kIGlzIGFsd2F5cyBpbiBwcm94ICovCkBAIC00NjYsNyArNDY5LDcgQEAKIAkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikKIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfRklOR0VSOwogCi0JCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNFMgJiYgd2Fjb20tPmZlYXR1cmVzLT50eXBlIDw9IElOVFVPUzRMKSB7CisJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1M0UyAmJiBmZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1M0TCkgewogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8wLCAoZGF0YVsyXSAmIDB4MDEpKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMSwgKGRhdGFbM10gJiAweDAxKSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzIsIChkYXRhWzNdICYgMHgwMikpOwpAQCAtNDgwLDcgKzQ4Myw3IEBACiAJCQkJLyogT3V0IG9mIHByb3hpbWl0eSwgY2xlYXIgd2hlZWwgdmFsdWUuICovCiAJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19XSEVFTCwgMCk7CiAJCQl9Ci0JCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlICE9IElOVFVPUzRTKSB7CisJCQlpZiAoZmVhdHVyZXMtPnR5cGUgIT0gSU5UVU9TNFMpIHsKIAkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzcsIChkYXRhWzNdICYgMHg0MCkpOwogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fOCwgKGRhdGFbM10gJiAweDgwKSk7CiAJCQl9CkBAIC01MjgsMTggKzUzMSwyMCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIE9ubHkgbGFyZ2UgSW50dW9zIHN1cHBvcnQgTGVuc2UgQ3Vyc29yICovCi0JaWYgKCh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpCi0JCQkmJiAoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzKQotCQkJfHwgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzUykKLQkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TNCkKLQkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TNFMpKSkKKwlpZiAod2Fjb20tPnRvb2xbaWR4XSA9PSBCVE5fVE9PTF9MRU5TICYmCisJICAgIChmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzIHx8CisJICAgICBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzUyB8fAorCSAgICAgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TNCB8fAorCSAgICAgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TNFMpKSB7CisKIAkJcmV0dXJuIDA7CisJfQogCiAJLyogQ2ludGlxIGRvZXNuJ3Qgc2VuZCBkYXRhIHdoZW4gUkRZIGJpdCBpc24ndCBzZXQgKi8KLQlpZiAoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBDSU5USVEpICYmICEoZGF0YVsxXSAmIDB4NDApKQorCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBDSU5USVEgJiYgIShkYXRhWzFdICYgMHg0MCkpCiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0JaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykgeworCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykgewogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIChkYXRhWzJdIDw8IDkpIHwgKGRhdGFbM10gPDwgMSkgfCAoKGRhdGFbOV0gPj4gMSkgJiAxKSk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgKGRhdGFbNF0gPDwgOSkgfCAoZGF0YVs1XSA8PCAxKSB8IChkYXRhWzldICYgMSkpOwogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX0RJU1RBTkNFLCAoKGRhdGFbOV0gPj4gMikgJiAweDNmKSk7CkBAIC01NTcsNyArNTYyLDcgQEAKIAogCQlpZiAoZGF0YVsxXSAmIDB4MDIpIHsKIAkJCS8qIFJvdGF0aW9uIHBhY2tldCAqLwotCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykgeworCQkJaWYgKGZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTKSB7CiAJCQkJLyogSTMgbWFya2VyIHBlbiByb3RhdGlvbiAqLwogCQkJCXQgPSAoZGF0YVs2XSA8PCAzKSB8ICgoZGF0YVs3XSA+PiA1KSAmIDcpOwogCQkJCXQgPSAoZGF0YVs3XSAmIDB4MjApID8gKCh0ID4gOTAwKSA/ICgodC0xKSAvIDIgLSAxMzUwKSA6CkBAIC01NzAsNyArNTc1LDcgQEAKIAkJCQkJKCh0IC0gMSkgLyAyKSA6IC10IC8gMik7CiAJCQl9CiAKLQkJfSBlbHNlIGlmICghKGRhdGFbMV0gJiAweDEwKSAmJiB3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPCBJTlRVT1MzUykgeworCQl9IGVsc2UgaWYgKCEoZGF0YVsxXSAmIDB4MTApICYmIGZlYXR1cmVzLT50eXBlIDwgSU5UVU9TM1MpIHsKIAkJCS8qIDREIG1vdXNlIHBhY2tldCAqLwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDAxKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwMik7CkBAIC01ODMsNyArNTg4LDcgQEAKIAogCQl9IGVsc2UgaWYgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTU9VU0UpIHsKIAkJCS8qIEk0IG1vdXNlICovCi0JCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzRTICYmIHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1M0TCkgeworCQkJaWYgKGZlYXR1cmVzLT50eXBlID49IElOVFVPUzRTICYmIGZlYXR1cmVzLT50eXBlIDw9IElOVFVPUzRMKSB7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCAgIGRhdGFbNl0gJiAweDAxKTsKIAkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX01JRERMRSwgZGF0YVs2XSAmIDB4MDIpOwogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fUklHSFQsICBkYXRhWzZdICYgMHgwNCk7CkBAIC02MDQsMTMgKzYwOSwxMyBAQAogCQkJCQkJIC0gKChkYXRhWzhdICYgMHgwMikgPj4gMSkpOwogCiAJCQkJLyogSTMgMkQgbW91c2Ugc2lkZSBidXR0b25zICovCi0JCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUyAmJiB3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TM0wpIHsKKwkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MgJiYgZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TM0wpIHsKIAkJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TSURFLCAgIGRhdGFbOF0gJiAweDQwKTsKIAkJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDIwKTsKIAkJCQl9CiAJCQl9Ci0JCX0gZWxzZSBpZiAoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8IElOVFVPUzNTIHx8IHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzTCB8fAotCQkJCXdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M0TCkgJiYKKwkJfSBlbHNlIGlmICgoZmVhdHVyZXMtPnR5cGUgPCBJTlRVT1MzUyB8fCBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzTCB8fAorCQkJCWZlYXR1cmVzLT50eXBlID09IElOVFVPUzRMKSAmJgogCQkJICAgd2Fjb20tPnRvb2xbaWR4XSA9PSBCVE5fVE9PTF9MRU5TKSB7CiAJCQkvKiBMZW5zIGN1cnNvciBwYWNrZXRzICovCiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDEpOwpAQCAtNzE4LDYgKzcyMyw3IEBACiAKIHN0YXRpYyBpbnQgd2Fjb21fdHBjX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogeworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSAmd2Fjb20tPmZlYXR1cmVzOwogCWNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlpbnQgcHJveCA9IDAsIHByZXNzdXJlLCBpZHggPSAtMTsKIAlzdGF0aWMgaW50IHN0eWx1c0luUHJveCwgdG91Y2hJblByb3ggPSAxLCB0b3VjaE91dDsKQEAgLTc5MSw3ICs3OTcsNyBAQAogCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVs0XSkpOwogCQkJcHJlc3N1cmUgPSAoKGRhdGFbN10gJiAweDAxKSA8PCA4KSB8IGRhdGFbNl07CiAJCQlpZiAocHJlc3N1cmUgPCAwKQotCQkJCXByZXNzdXJlID0gd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyBwcmVzc3VyZSArIDE7CisJCQkJcHJlc3N1cmUgPSBmZWF0dXJlcy0+cHJlc3N1cmVfbWF4ICsgcHJlc3N1cmUgKyAxOwogCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19QUkVTU1VSRSwgcHJlc3N1cmUpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDUpOwogCQl9IGVsc2UgewpAQCAtODE1LDcgKzgyMSw3IEBACiAKIGludCB3YWNvbV93YWNfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYywgdm9pZCAqd2NvbWJvKQogewotCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy0+dHlwZSkgeworCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy50eXBlKSB7CiAJCWNhc2UgUEVOUEFSVE5FUjoKIAkJCXJldHVybiB3YWNvbV9wZW5wYXJ0bmVyX2lycSh3YWNvbV93YWMsIHdjb21ibyk7CiAKQEAgLTg1Myw3ICs4NTksNyBAQAogCiB2b2lkIHdhY29tX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy0+dHlwZSkgeworCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy50eXBlKSB7CiAJCWNhc2UgV0FDT01fTU86CiAJCQlpbnB1dF9kZXZfbW8oaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQljYXNlIFdBQ09NX0c0OgpAQCAtODg4LDcgKzg5NCw3IEBACiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQUJMRVRQQzoKIAkJCWlucHV0X2Rldl90cGMoaW5wdXRfZGV2LCB3YWNvbV93YWMpOwotCQkJaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRldmljZV90eXBlICE9IEJUTl9UT09MX1BFTikKKwkJCWlmICh3YWNvbV93YWMtPmZlYXR1cmVzLmRldmljZV90eXBlICE9IEJUTl9UT09MX1BFTikKIAkJCQlicmVhazsgIC8qIG5vIG5lZWQgdG8gcHJvY2VzcyBzdHlsdXMgc3R1ZmYgKi8KIAogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC05MDMsMTUzICs5MDksMjAxIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzW10gPSB7Ci0JeyAiV2Fjb20gUGVucGFydG5lciIsICAgICBXQUNPTV9QS0dMRU5fUEVOUFJUTiwgICAgNTA0MCwgIDM3ODAsICAyNTUsICAwLCBQRU5QQVJUTkVSIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwNiwgIDc0MjIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDYsICA3NDIyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTIgNXg3IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEzOTE4LCAxMDIwNiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTQgNHg1IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIFdBQ09NX0c0IH0sCi0JeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAotCXsgIldhY29tIEJhbWJvb0Z1biA0eDUiLCAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfSwKLQl7ICJXYWNvbSBCYW1ib29GdW4gNng4IiwgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDIxNjQ4LCAxMzUzMCwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCi0JeyAiV2Fjb20gQmFtYm9vMSBNZWRpdW0iLCBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFZvbGl0byIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBQZW5TdGF0aW9uMiIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gVm9saXRvMiA0eDUiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNDgsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBQZW5QYXJ0bmVyMiIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICAzMjUwLCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gQmFtYm9vIiwgICAgICAgICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAxNDc2MCwgIDkyMjUsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAotCXsgIldhY29tIEJhbWJvbzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvcyA2eDgiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zIDl4MTIiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvcyAxMngxOCIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gUEw0MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTQwOCwgIDQwNTYsICAyNTUsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxNDQsICA0NjA4LCAgMjU1LCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTI2LCAgNDYwNCwgIDI1NSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw2MDBTWCIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI2MCwgIDUwMTYsICAyNTUsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTUwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxNDQsICA0NjA4LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA3MjIwLCAgNTc4MCwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw3MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjc1OCwgIDU0MDYsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTEwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyODIsICA0NzYyLCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBEVFU3MTAiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM0MDgwLCAyNzY2MCwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gRFRGNTIxIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIERURjcyMCIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY4NTgsICA1NTA2LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBEVEY3MjBhIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2ODU4LCAgNTUwNiwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLCBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyMDQ4MCwgMTUzNjAsICA1MTEsICAwLCBQVFUgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvczIgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMiA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDEyIiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyNTQwMCwgMjAzMjAsIDEwMjMsIDYzLCBJTlRVT1MzUyB9LAotCXsgIldhY29tIEludHVvczMgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDA2NDAsIDMwNDgwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAotCXsgIldhY29tIEludHVvczMgOXgxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjA5NjAsIDQ1NzIwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAotCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjA5NjAsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDEyeDE5IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDk3NTM2LCA2MDk2MCwgMTAyMywgNjMsIElOVFVPUzNMIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA2eDExIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA1NDIwNCwgMzE3NTAsIDEwMjMsIDYzLCBJTlRVT1MzIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDEwMjMsIDYzLCBJTlRVT1MzUyB9LAotCXsgIldhY29tIEludHVvczQgNHg2IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzE0OTYsIDE5Njg1LCAyMDQ3LCA2MywgSU5UVU9TNFMgfSwKLQl7ICJXYWNvbSBJbnR1b3M0IDZ4OSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ0NzA0LCAyNzk0MCwgMjA0NywgNjMsIElOVFVPUzQgfSwKLQl7ICJXYWNvbSBJbnR1b3M0IDh4MTMiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDY1MDI0LCA0MDY0MCwgMjA0NywgNjMsIElOVFVPUzRMIH0sCi0JeyAiV2Fjb20gSW50dW9zNCAxMngxOSIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA5NzUzNiwgNjA5NjAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9LAotCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgODcyMDAsIDY1NjAwLCAxMDIzLCA2MywgQ0lOVElRIH0sCi0JeyAiV2Fjb20gQ2ludGlxIDIwV1NYIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NjY4MCwgNTQxODAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfSwKLQl7ICJXYWNvbSBDaW50aXEgMTJXWCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDUzMDIwLCAzMzQ0MCwgMTAyMywgNjMsIFdBQ09NX0JFRSB9LAotCXsgIldhY29tIERUVTE5MzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzc4MzIsIDMwMzA1LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBJU0R2NCA5MCIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH0sCi0JeyAiV2Fjb20gSVNEdjQgOTMiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9LAotCXsgIldhY29tIElTRHY0IDlBIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfSwKLQl7ICJXYWNvbSBJU0R2NCA5RiIsICAgICAgIFdBQ09NX1BLR0xFTl9QRU5BQkxFRCwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH0sCi0JeyAiV2Fjb20gSVNEdjQgRTIiLCAgICAgICBXQUNPTV9QS0dMRU5fVFBDMkZHLCAgICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQzJGRyB9LAotCXsgIldhY29tIElTRHY0IEUzIiwgICAgICAgV0FDT01fUEtHTEVOX1RQQzJGRywgICAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMyRkcgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDAwID0KKwl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgIFdBQ09NX1BLR0xFTl9QRU5QUlROLCAgICA1MDQwLCAgMzc4MCwgIDI1NSwgIDAsIFBFTlBBUlRORVIgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxMCA9CisJeyAiV2Fjb20gR3JhcGhpcmUiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwNiwgIDc0MjIsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDExID0KKwl7ICJXYWNvbSBHcmFwaGlyZTIgNHg1IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTIgPQorCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTM5MTgsIDEwMjA2LCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxMyA9CisJeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE0ID0KKwl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTUgPQorCXsgIldhY29tIEdyYXBoaXJlNCA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDgsICA3NDI0LCAgNTExLCA2MywgV0FDT01fRzQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxNiA9CisJeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE3ID0KKwl7ICJXYWNvbSBCYW1ib29GdW4gNHg1IiwgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwgNjMsIFdBQ09NX01PIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTggPQorCXsgIldhY29tIEJhbWJvb0Z1biA2eDgiLCAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAgNTExLCA2MywgV0FDT01fTU8gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxOSA9CisJeyAiV2Fjb20gQmFtYm9vMSBNZWRpdW0iLCBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDYwID0KKwl7ICJXYWNvbSBWb2xpdG8iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjEgPQorCXsgIldhY29tIFBlblN0YXRpb24yIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgMjU1LCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2MiA9CisJeyAiV2Fjb20gVm9saXRvMiA0eDUiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDYzID0KKwl7ICJXYWNvbSBWb2xpdG8yIDJ4MyIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICAzMjQ4LCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjQgPQorCXsgIldhY29tIFBlblBhcnRuZXIyIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2NSA9CisJeyAiV2Fjb20gQmFtYm9vIiwgICAgICAgICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAxNDc2MCwgIDkyMjUsICA1MTEsIDYzLCBXQUNPTV9NTyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDY5ID0KKwl7ICJXYWNvbSBCYW1ib28xIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MjAgPQorCXsgIldhY29tIEludHVvcyA0eDUiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MjEgPQorCXsgIldhY29tIEludHVvcyA2eDgiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MjIgPQorCXsgIldhY29tIEludHVvcyA5eDEyIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MjMgPQorCXsgIldhY29tIEludHVvcyAxMngxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MjQgPQorCXsgIldhY29tIEludHVvcyAxMngxOCIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzAgPQorCXsgIldhY29tIFBMNDAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDU0MDgsICA0MDU2LCAgMjU1LCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzMSA9CisJeyAiV2Fjb20gUEw1MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICAyNTUsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDMyID0KKwl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTI2LCAgNDYwNCwgIDI1NSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzMgPQorCXsgIldhY29tIFBMNjAwU1giLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyNjAsICA1MDE2LCAgMjU1LCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzNCA9CisJeyAiV2Fjb20gUEw1NTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDM1ID0KKwl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA3MjIwLCAgNTc4MCwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzcgPQorCXsgIldhY29tIFBMNzAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY3NTgsICA1NDA2LCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzOCA9CisJeyAiV2Fjb20gUEw1MTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDM5ID0KKwl7ICJXYWNvbSBEVFU3MTAiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM0MDgwLCAyNzY2MCwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzQgPQorCXsgIldhY29tIERURjUyMSIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyODIsICA0NzYyLCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDMCA9CisJeyAiV2Fjb20gRFRGNzIwIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjg1OCwgIDU1MDYsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEMyID0KKwl7ICJXYWNvbSBEVEY3MjBhIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2ODU4LCAgNTUwNiwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MDMgPQorCXsgIldhY29tIENpbnRpcSBQYXJ0bmVyIiwgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjA0ODAsIDE1MzYwLCAgNTExLCAgMCwgUFRVIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDEgPQorCXsgIldhY29tIEludHVvczIgNHg1IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDIgPQorCXsgIldhY29tIEludHVvczIgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDMgPQorCXsgIldhY29tIEludHVvczIgOXgxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDQgPQorCXsgIldhY29tIEludHVvczIgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NDUgPQorCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjAgPQorCXsgIldhY29tIEludHVvczMgNHg1IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjU0MDAsIDIwMzIwLCAxMDIzLCA2MywgSU5UVU9TM1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCMSA9CisJeyAiV2Fjb20gSW50dW9zMyA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0MDY0MCwgMzA0ODAsIDEwMjMsIDYzLCBJTlRVT1MzIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjIgPQorCXsgIldhY29tIEludHVvczMgOXgxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjA5NjAsIDQ1NzIwLCAxMDIzLCA2MywgSU5UVU9TMyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEIzID0KKwl7ICJXYWNvbSBJbnR1b3MzIDEyeDEyIiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDYwOTYwLCA2MDk2MCwgMTAyMywgNjMsIElOVFVPUzNMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjQgPQorCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCNSA9CisJeyAiV2Fjb20gSW50dW9zMyA2eDExIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA1NDIwNCwgMzE3NTAsIDEwMjMsIDYzLCBJTlRVT1MzIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjcgPQorCXsgIldhY29tIEludHVvczMgNHg2IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzE0OTYsIDE5Njg1LCAxMDIzLCA2MywgSU5UVU9TM1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCOCA9CisJeyAiV2Fjb20gSW50dW9zNCA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDIwNDcsIDYzLCBJTlRVT1M0UyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI5ID0KKwl7ICJXYWNvbSBJbnR1b3M0IDZ4OSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ0NzA0LCAyNzk0MCwgMjA0NywgNjMsIElOVFVPUzQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCQSA9CisJeyAiV2Fjb20gSW50dW9zNCA4eDEzIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2NTAyNCwgNDA2NDAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEJCID0KKwl7ICJXYWNvbSBJbnR1b3M0IDEyeDE5IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDk3NTM2LCA2MDk2MCwgMjA0NywgNjMsIElOVFVPUzRMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4M0YgPQorCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgODcyMDAsIDY1NjAwLCAxMDIzLCA2MywgQ0lOVElRIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzUgPQorCXsgIldhY29tIENpbnRpcSAyMFdTWCIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgODY2ODAsIDU0MTgwLCAxMDIzLCA2MywgV0FDT01fQkVFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzYgPQorCXsgIldhY29tIENpbnRpcSAxMldYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTMwMjAsIDMzNDQwLCAxMDIzLCA2MywgV0FDT01fQkVFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzcgPQorCXsgIldhY29tIERUVTE5MzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzc4MzIsIDMwMzA1LCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg5MCA9CisJeyAiV2Fjb20gSVNEdjQgOTAiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDkzID0KKwl7ICJXYWNvbSBJU0R2NCA5MyIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4OUEgPQorCXsgIldhY29tIElTRHY0IDlBIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg5RiA9CisJeyAiV2Fjb20gSVNEdjQgOUYiLCAgICAgICBXQUNPTV9QS0dMRU5fUEVOQUJMRUQsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEUyID0KKwl7ICJXYWNvbSBJU0R2NCBFMiIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDMkZHIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RTMgPQorCXsgIldhY29tIElTRHY0IEUzIiwgICAgICAgV0FDT01fUEtHTEVOX1RQQzJGRywgICAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMyRkcgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0NyA9CisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKKworI2RlZmluZSBVU0JfREVWSUNFX1dBQ09NKHByb2QpCQkJCQlcCisJVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCBwcm9kKSwJCQlcCisJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ3YWNvbV9mZWF0dXJlc18jI3Byb2QKKworY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW10gPSB7CisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MDApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTYpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTcpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTgpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTkpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NjkpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MjApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MjEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MjIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MjMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MjQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzcpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzgpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzkpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MDMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjQpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjcpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjgpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QjkpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QkEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QkIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4M0YpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzUpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzYpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzcpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4OTApIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4OTMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4OUEpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4OUYpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RTIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RTMpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4NDcpIH0sCiAJeyB9CiB9OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW10gPSB7Ci0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTYpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTcpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTgpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTkpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjkpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzcpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzgpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzkpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjQpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjcpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjgpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjkpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QkEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QkIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4M0YpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzUpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzYpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzcpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4OTApIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4OTMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4OUEpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4OUYpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4RTIpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4RTMpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDcpIH0sCi0JeyB9Ci19OwotCi1jb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZ2V0X2RldmljZV90YWJsZSh2b2lkKQotewotICAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUgPSB3YWNvbV9pZHM7Ci0KLSAgICAgICAgcmV0dXJuIGlkX3RhYmxlOwotfQotCi1zdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKiBnZXRfd2Fjb21fZmVhdHVyZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0gICAgICAgIGludCBpbmRleCA9IGlkIC0gd2Fjb21faWRzOwotICAgICAgICBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKndmID0gJndhY29tX2ZlYXR1cmVzW2luZGV4XTsKLQotICAgICAgICByZXR1cm4gd2Y7Ci19Ci0KIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3YWNvbV9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmggYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAppbmRleCBlZTAxZTE5Li44NTkwYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaApAQCAtMTUsMTEgKzE1LDExIEBACiAvKiBwYWNrZXQgbGVuZ3RoIGZvciBpbmRpdmlkdWFsIG1vZGVscyAqLwogI2RlZmluZSBXQUNPTV9QS0dMRU5fUEVOUFJUTgkgNwogI2RlZmluZSBXQUNPTV9QS0dMRU5fR1JBUEhJUkUJIDgKLSNkZWZpbmUgV0FDT01fUEtHTEVOX0JCRlVOIAkgOQotI2RlZmluZSBXQUNPTV9QS0dMRU5fSU5UVU9TIAkxMAorI2RlZmluZSBXQUNPTV9QS0dMRU5fQkJGVU4JIDkKKyNkZWZpbmUgV0FDT01fUEtHTEVOX0lOVFVPUwkxMAogI2RlZmluZSBXQUNPTV9QS0dMRU5fUEVOQUJMRUQJIDgKICNkZWZpbmUgV0FDT01fUEtHTEVOX1RQQzFGRwkgNQotI2RlZmluZSBXQUNPTV9QS0dMRU5fVFBDMkZHIAkxNAorI2RlZmluZSBXQUNPTV9QS0dMRU5fVFBDMkZHCTE0CiAKIC8qIGRldmljZSBJRHMgKi8KICNkZWZpbmUgU1RZTFVTX0RFVklDRV9JRAkweDAyCkBAIC01OCw3ICs1OCw3IEBACiB9OwogCiBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgcGt0bGVuOwogCWludCB4X21heDsKIAlpbnQgeV9tYXg7CkBAIC03MywxMSArNzMsMTIgQEAKIH07CiAKIHN0cnVjdCB3YWNvbV93YWMgeworCWNoYXIgbmFtZVs2NF07CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICAgICAgaW50IHRvb2xbMl07Ci0gICAgICAgIGludCBpZFsyXTsKLSAgICAgICAgX191MzIgc2VyaWFsWzJdOwotCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXM7CisJaW50IHRvb2xbMl07CisJaW50IGlkWzJdOworCV9fdTMyIHNlcmlhbFsyXTsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgZmVhdHVyZXM7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCBkZmFmYzc2Li42NDU3ZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAJdHJpc3RhdGUgIlNoYXJwU0wgKENvcmdpIGFuZCBTcGl0eiBzZXJpZXMpIHRvdWNoc2NyZWVuIGRyaXZlciAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAogCXNlbGVjdCBDT1JHSV9TU1BfREVQUkVDQVRFRAotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBkcml2ZXIgZm9yIHRoZSB0b3VjaHNjcmVlbiBvbiB0aGUKIAkgIFNoYXJwIFNMLUM3eHggYW5kIFNMLUN4eDAwIHNlcmllcyBvZiBQREFzLgpAQCAtNTM3LDYgKzUzNiwxMSBAQAogCWJvb2wgIkVUJlQgVEM1VUggdG91Y2hzY3JlZW4gY29udHJvbGVyIHN1cHBvcnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKK2NvbmZpZyBUT1VDSFNDUkVFTl9VU0JfTkVYSU8KKwlkZWZhdWx0IHkKKwlib29sICJORVhJTy9pTmV4aW8gZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCisKIGNvbmZpZyBUT1VDSFNDUkVFTl9UT1VDSElUMjEzCiAJdHJpc3RhdGUgIlNhaGFyYSBUb3VjaElULTIxMyB0b3VjaHNjcmVlbiIKIAlzZWxlY3QgU0VSSU8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggNTJkMmNhMS4uOGIwNWQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAvKgpAQCAtODUsNiArODYsNyBAQAogCWNoYXIJCQluYW1lWzMyXTsKIAogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IHJlZ3VsYXRvcgkqcmVnOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSFdNT04pIHx8IGRlZmluZWQoQ09ORklHX0hXTU9OX01PRFVMRSkKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSphdHRyX2dyb3VwOwpAQCAtNzg4LDYgKzc5MCw4IEBACiAJCX0KIAl9CiAKKwlyZWd1bGF0b3JfZGlzYWJsZSh0cy0+cmVnKTsKKwogCS8qIHdlIGtub3cgdGhlIGNoaXAncyBpbiBsb3dwb3dlciBtb2RlIHNpbmNlIHdlIGFsd2F5cwogCSAqIGxlYXZlIGl0IHRoYXQgd2F5IGFmdGVyIGV2ZXJ5IHJlcXVlc3QKIAkgKi8KQEAgLTc5OSw2ICs4MDMsOCBAQAogCWlmICghdHMtPmRpc2FibGVkKQogCQlyZXR1cm47CiAKKwlyZWd1bGF0b3JfZW5hYmxlKHRzLT5yZWcpOworCiAJdHMtPmRpc2FibGVkID0gMDsKIAl0cy0+aXJxX2Rpc2FibGVkID0gMDsKIAllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7CkBAIC0xMTM5LDYgKzExNDUsMTkgQEAKIAogCXRzLT5sYXN0X21zZyA9IG07CiAKKwl0cy0+cmVnID0gcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKKwlpZiAoSVNfRVJSKHRzLT5yZWcpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5hYmxlIHRvIGdldCByZWd1bGF0b3I6ICVsZFxuIiwKKwkJCVBUUl9FUlIodHMtPnJlZykpOworCQlnb3RvIGVycl9mcmVlX2dwaW87CisJfQorCisJZXJyID0gcmVndWxhdG9yX2VuYWJsZSh0cy0+cmVnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSByZWd1bGF0b3I6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9wdXRfcmVndWxhdG9yOworCX0KKwogCWlmIChyZXF1ZXN0X2lycShzcGktPmlycSwgYWRzNzg0Nl9pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJc3BpLT5kZXYuZHJpdmVyLT5uYW1lLCB0cykpIHsKIAkJZGV2X2luZm8oJnNwaS0+ZGV2LApAQCAtMTE0OCw3ICsxMTY3LDcgQEAKIAkJCQkgIHNwaS0+ZGV2LmRyaXZlci0+bmFtZSwgdHMpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZGJnKCZzcGktPmRldiwgImlycSAlZCBidXN5P1xuIiwgc3BpLT5pcnEpOwotCQkJZ290byBlcnJfZnJlZV9ncGlvOworCQkJZ290byBlcnJfZGlzYWJsZV9yZWd1bGF0b3I7CiAJCX0KIAl9CiAKQEAgLTExODAsNiArMTE5OSwxMCBAQAogCWFkczc4NHhfaHdtb25fdW5yZWdpc3RlcihzcGksIHRzKTsKICBlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEoc3BpLT5pcnEsIHRzKTsKKyBlcnJfZGlzYWJsZV9yZWd1bGF0b3I6CisJcmVndWxhdG9yX2Rpc2FibGUodHMtPnJlZyk7CisgZXJyX3B1dF9yZWd1bGF0b3I6CisJcmVndWxhdG9yX3B1dCh0cy0+cmVnKTsKICBlcnJfZnJlZV9ncGlvOgogCWlmICh0cy0+Z3Bpb19wZW5kb3duICE9IC0xKQogCQlncGlvX2ZyZWUodHMtPmdwaW9fcGVuZG93bik7CkBAIC0xMjA4LDYgKzEyMzEsOSBAQAogCS8qIHN1c3BlbmQgbGVmdCB0aGUgSVJRIGRpc2FibGVkICovCiAJZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOwogCisJcmVndWxhdG9yX2Rpc2FibGUodHMtPnJlZyk7CisJcmVndWxhdG9yX3B1dCh0cy0+cmVnKTsKKwogCWlmICh0cy0+Z3Bpb19wZW5kb3duICE9IC0xKQogCQlncGlvX2ZyZWUodHMtPmdwaW9fcGVuZG93bik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxvLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jCmluZGV4IDhmMzhjNWUuLjQ4NmQzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxvLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbG8uYwpAQCAtNzIsNDUgKzcyLDQ5IEBACiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gZWxvLT5kZXY7CiAKIAllbG8tPmRhdGFbZWxvLT5pZHhdID0gZGF0YTsKLQlzd2l0Y2ggKGVsby0+aWR4KyspIHsKLQkJY2FzZSAwOgotCQkJZWxvLT5jc3VtID0gMHhhYTsKLQkJCWlmIChkYXRhICE9IEVMTzEwX0xFQURfQllURSkgewotCQkJCXByX2RlYnVnKCJlbG86IHVuc3luY2hyb25pemVkIGRhdGE6IDB4JTAyeFxuIiwgZGF0YSk7Ci0JCQkJZWxvLT5pZHggPSAwOwotCQkJfQotCQkJYnJlYWs7CiAKLQkJY2FzZSA5OgorCXN3aXRjaCAoZWxvLT5pZHgrKykgeworCWNhc2UgMDoKKwkJZWxvLT5jc3VtID0gMHhhYTsKKwkJaWYgKGRhdGEgIT0gRUxPMTBfTEVBRF9CWVRFKSB7CisJCQlkZXZfZGJnKCZlbG8tPnNlcmlvLT5kZXYsCisJCQkJInVuc3luY2hyb25pemVkIGRhdGE6IDB4JTAyeFxuIiwgZGF0YSk7CiAJCQllbG8tPmlkeCA9IDA7Ci0JCQlpZiAoZGF0YSAhPSBlbG8tPmNzdW0pIHsKLQkJCQlwcl9kZWJ1ZygiZWxvOiBiYWQgY2hlY2tzdW06IDB4JTAyeCwgZXhwZWN0ZWQgMHglMDJ4XG4iLAotCQkJCQkgZGF0YSwgZWxvLT5jc3VtKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChlbG8tPmRhdGFbMV0gIT0gZWxvLT5leHBlY3RlZF9wYWNrZXQpIHsKLQkJCQlpZiAoZWxvLT5kYXRhWzFdICE9IEVMTzEwX1RPVUNIX1BBQ0tFVCkKLQkJCQkJcHJfZGVidWcoImVsbzogdW5leHBlY3RlZCBwYWNrZXQ6IDB4JTAyeFxuIiwKLQkJCQkJCSBlbG8tPmRhdGFbMV0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGxpa2VseShlbG8tPmRhdGFbMV0gPT0gRUxPMTBfVE9VQ0hfUEFDS0VUKSkgewotCQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKGVsby0+ZGF0YVs0XSA8PCA4KSB8IGVsby0+ZGF0YVszXSk7Ci0JCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoZWxvLT5kYXRhWzZdIDw8IDgpIHwgZWxvLT5kYXRhWzVdKTsKLQkJCQlpZiAoZWxvLT5kYXRhWzJdICYgRUxPMTBfUFJFU1NVUkUpCi0JCQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsCi0JCQkJCQkJKGVsby0+ZGF0YVs4XSA8PCA4KSB8IGVsby0+ZGF0YVs3XSk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZWxvLT5kYXRhWzJdICYgRUxPMTBfVE9VQ0gpOwotCQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCX0gZWxzZSBpZiAoZWxvLT5kYXRhWzFdID09IEVMTzEwX0FDS19QQUNLRVQpIHsKLQkJCQlpZiAoZWxvLT5kYXRhWzJdID09ICcwJykKLQkJCQkJZWxvLT5leHBlY3RlZF9wYWNrZXQgPSBFTE8xMF9UT1VDSF9QQUNLRVQ7Ci0JCQkJY29tcGxldGUoJmVsby0+Y21kX2RvbmUpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1jcHkoZWxvLT5yZXNwb25zZSwgJmVsby0+ZGF0YVsxXSwgRUxPMTBfUEFDS0VUX0xFTik7Ci0JCQkJZWxvLT5leHBlY3RlZF9wYWNrZXQgPSBFTE8xMF9BQ0tfUEFDS0VUOwotCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSA5OgorCQllbG8tPmlkeCA9IDA7CisJCWlmIChkYXRhICE9IGVsby0+Y3N1bSkgeworCQkJZGV2X2RiZygmZWxvLT5zZXJpby0+ZGV2LAorCQkJCSJiYWQgY2hlY2tzdW06IDB4JTAyeCwgZXhwZWN0ZWQgMHglMDJ4XG4iLAorCQkJCSBkYXRhLCBlbG8tPmNzdW0pOwogCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVsby0+ZGF0YVsxXSAhPSBlbG8tPmV4cGVjdGVkX3BhY2tldCkgeworCQkJaWYgKGVsby0+ZGF0YVsxXSAhPSBFTE8xMF9UT1VDSF9QQUNLRVQpCisJCQkJZGV2X2RiZygmZWxvLT5zZXJpby0+ZGV2LAorCQkJCQkidW5leHBlY3RlZCBwYWNrZXQ6IDB4JTAyeFxuIiwKKwkJCQkJIGVsby0+ZGF0YVsxXSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobGlrZWx5KGVsby0+ZGF0YVsxXSA9PSBFTE8xMF9UT1VDSF9QQUNLRVQpKSB7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIChlbG8tPmRhdGFbNF0gPDwgOCkgfCBlbG8tPmRhdGFbM10pOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoZWxvLT5kYXRhWzZdIDw8IDgpIHwgZWxvLT5kYXRhWzVdKTsKKwkJCWlmIChlbG8tPmRhdGFbMl0gJiBFTE8xMF9QUkVTU1VSRSkKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLAorCQkJCQkJKGVsby0+ZGF0YVs4XSA8PCA4KSB8IGVsby0+ZGF0YVs3XSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBlbG8tPmRhdGFbMl0gJiBFTE8xMF9UT1VDSCk7CisJCQlpbnB1dF9zeW5jKGRldik7CisJCX0gZWxzZSBpZiAoZWxvLT5kYXRhWzFdID09IEVMTzEwX0FDS19QQUNLRVQpIHsKKwkJCWlmIChlbG8tPmRhdGFbMl0gPT0gJzAnKQorCQkJCWVsby0+ZXhwZWN0ZWRfcGFja2V0ID0gRUxPMTBfVE9VQ0hfUEFDS0VUOworCQkJY29tcGxldGUoJmVsby0+Y21kX2RvbmUpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGVsby0+cmVzcG9uc2UsICZlbG8tPmRhdGFbMV0sIEVMTzEwX1BBQ0tFVF9MRU4pOworCQkJZWxvLT5leHBlY3RlZF9wYWNrZXQgPSBFTE8xMF9BQ0tfUEFDS0VUOworCQl9CisJCWJyZWFrOwogCX0KIAllbG8tPmNzdW0gKz0gZGF0YTsKIH0KQEAgLTEyMyw0MiArMTI3LDUzIEBACiAKIAlzd2l0Y2ggKGVsby0+aWR4KyspIHsKIAotCQljYXNlIDA6IGlmICgoZGF0YSAmIDB4YzApICE9IDB4YzApIGVsby0+aWR4ID0gMDsgYnJlYWs7Ci0JCWNhc2UgMTogaWYgKChkYXRhICYgMHhjMCkgIT0gMHg4MCkgZWxvLT5pZHggPSAwOyBicmVhazsKLQkJY2FzZSAyOiBpZiAoKGRhdGEgJiAweGMwKSAhPSAweDQwKSBlbG8tPmlkeCA9IDA7IGJyZWFrOworCWNhc2UgMDoKKwkJaWYgKChkYXRhICYgMHhjMCkgIT0gMHhjMCkKKwkJCWVsby0+aWR4ID0gMDsKKwkJYnJlYWs7CiAKLQkJY2FzZSAzOgotCQkJaWYgKGRhdGEgJiAweGMwKSB7Ci0JCQkJZWxvLT5pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJfQorCWNhc2UgMToKKwkJaWYgKChkYXRhICYgMHhjMCkgIT0gMHg4MCkKKwkJCWVsby0+aWR4ID0gMDsKKwkJYnJlYWs7CiAKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKChlbG8tPmRhdGFbMF0gJiAweDNmKSA8PCA2KSB8IChlbG8tPmRhdGFbMV0gJiAweDNmKSk7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksICgoZWxvLT5kYXRhWzJdICYgMHgzZikgPDwgNikgfCAoZWxvLT5kYXRhWzNdICYgMHgzZikpOworCWNhc2UgMjoKKwkJaWYgKChkYXRhICYgMHhjMCkgIT0gMHg0MCkKKwkJCWVsby0+aWR4ID0gMDsKKwkJYnJlYWs7CiAKLQkJCWlmIChlbG8tPmlkID09IDIpIHsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAxKTsKLQkJCQlpbnB1dF9zeW5jKGRldik7Ci0JCQkJZWxvLT5pZHggPSAwOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIDQ6Ci0JCQlpZiAoZGF0YSkgewotCQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCQllbG8tPmlkeCA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIDU6Ci0JCQlpZiAoKGRhdGEgJiAweGYwKSA9PSAwKSB7Ci0JCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgZWxvLT5kYXRhWzVdKTsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAhIWVsby0+ZGF0YVs1XSk7Ci0JCQl9Ci0JCQlpbnB1dF9zeW5jKGRldik7CisJY2FzZSAzOgorCQlpZiAoZGF0YSAmIDB4YzApIHsKIAkJCWVsby0+aWR4ID0gMDsKIAkJCWJyZWFrOworCQl9CisKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoKGVsby0+ZGF0YVswXSAmIDB4M2YpIDw8IDYpIHwgKGVsby0+ZGF0YVsxXSAmIDB4M2YpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoKGVsby0+ZGF0YVsyXSAmIDB4M2YpIDw8IDYpIHwgKGVsby0+ZGF0YVszXSAmIDB4M2YpKTsKKworCQlpZiAoZWxvLT5pZCA9PSAyKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAxKTsKKwkJCWlucHV0X3N5bmMoZGV2KTsKKwkJCWVsby0+aWR4ID0gMDsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSA0OgorCQlpZiAoZGF0YSkgeworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJZWxvLT5pZHggPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSA1OgorCQlpZiAoKGRhdGEgJiAweGYwKSA9PSAwKSB7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBlbG8tPmRhdGFbNV0pOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgISFlbG8tPmRhdGFbNV0pOworCQl9CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJZWxvLT5pZHggPSAwOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTE3MCwxNyArMTg1LDE3IEBACiAKIAlzd2l0Y2ggKGVsby0+aWR4KyspIHsKIAotCQljYXNlIDA6Ci0JCQlpZiAoKGRhdGEgJiAweDdmKSAhPSAweDAxKQotCQkJCWVsby0+aWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAhKGVsby0+ZGF0YVsxXSAmIDB4ODApKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZWxvLT5kYXRhWzFdKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgZWxvLT5kYXRhWzJdKTsKLQkJCWlucHV0X3N5bmMoZGV2KTsKKwljYXNlIDA6CisJCWlmICgoZGF0YSAmIDB4N2YpICE9IDB4MDEpCiAJCQllbG8tPmlkeCA9IDA7Ci0JCQlicmVhazsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAhKGVsby0+ZGF0YVsxXSAmIDB4ODApKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBlbG8tPmRhdGFbMV0pOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGVsby0+ZGF0YVsyXSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJZWxvLT5pZHggPSAwOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTE4OSwxOSArMjA0LDE5IEBACiB7CiAJc3RydWN0IGVsbyAqZWxvID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCi0Jc3dpdGNoKGVsby0+aWQpIHsKLQkJY2FzZSAwOgotCQkJZWxvX3Byb2Nlc3NfZGF0YV8xMChlbG8sIGRhdGEpOwotCQkJYnJlYWs7CisJc3dpdGNoIChlbG8tPmlkKSB7CisJY2FzZSAwOgorCQllbG9fcHJvY2Vzc19kYXRhXzEwKGVsbywgZGF0YSk7CisJCWJyZWFrOwogCi0JCWNhc2UgMToKLQkJY2FzZSAyOgotCQkJZWxvX3Byb2Nlc3NfZGF0YV82KGVsbywgZGF0YSk7Ci0JCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCQllbG9fcHJvY2Vzc19kYXRhXzYoZWxvLCBkYXRhKTsKKwkJYnJlYWs7CiAKLQkJY2FzZSAzOgotCQkJZWxvX3Byb2Nlc3NfZGF0YV8zKGVsbywgZGF0YSk7Ci0JCQlicmVhazsKKwljYXNlIDM6CisJCWVsb19wcm9jZXNzX2RhdGFfMyhlbG8sIGRhdGEpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yNjEsMTAgKzI3NiwxMCBAQAogCWlmIChwYWNrZXRbM10gJiBFTE8xMF9QUkVTU1VSRSkKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDI1NSwgMCwgMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJlbG86ICVzVG91Y2ggdG91Y2hzY3JlZW4sIGZ3OiAlMDJ4LiUwMngsICIKLQkJImZlYXR1cmVzOiAweCUwMngsIGNvbnRyb2xsZXI6IDB4JTAyeFxuIiwKLQkJZWxvX3R5cGVzWyhwYWNrZXRbMV0gLScwJykgJiAweDAzXSwKLQkJcGFja2V0WzVdLCBwYWNrZXRbNF0sIHBhY2tldFszXSwgcGFja2V0WzddKTsKKwlkZXZfaW5mbygmZWxvLT5zZXJpby0+ZGV2LAorCQkgIiVzVG91Y2ggdG91Y2hzY3JlZW4sIGZ3OiAlMDJ4LiUwMngsIGZlYXR1cmVzOiAweCUwMngsIGNvbnRyb2xsZXI6IDB4JTAyeFxuIiwKKwkJIGVsb190eXBlc1socGFja2V0WzFdIC0nMCcpICYgMHgwM10sCisJCSBwYWNrZXRbNV0sIHBhY2tldFs0XSwgcGFja2V0WzNdLCBwYWNrZXRbN10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMzAsMjQgKzM0NSwyNCBAQAogCiAJc3dpdGNoIChlbG8tPmlkKSB7CiAKLQkJY2FzZSAwOiAvKiAxMC1ieXRlIHByb3RvY29sICovCi0JCQlpZiAoZWxvX3NldHVwXzEwKGVsbykpCi0JCQkJZ290byBmYWlsMzsKKwljYXNlIDA6IC8qIDEwLWJ5dGUgcHJvdG9jb2wgKi8KKwkJaWYgKGVsb19zZXR1cF8xMChlbG8pKQorCQkJZ290byBmYWlsMzsKIAotCQkJYnJlYWs7CisJCWJyZWFrOwogCi0JCWNhc2UgMTogLyogNi1ieXRlIHByb3RvY29sICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgMTUsIDAsIDApOworCWNhc2UgMTogLyogNi1ieXRlIHByb3RvY29sICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCAxNSwgMCwgMCk7CiAKLQkJY2FzZSAyOiAvKiA0LWJ5dGUgcHJvdG9jb2wgKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDk2LCA0MDAwLCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDk2LCA0MDAwLCAwLCAwKTsKLQkJCWJyZWFrOworCWNhc2UgMjogLyogNC1ieXRlIHByb3RvY29sICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDk2LCA0MDAwLCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgOTYsIDQwMDAsIDAsIDApOworCQlicmVhazsKIAotCQljYXNlIDM6IC8qIDMtYnl0ZSBwcm90b2NvbCAqLwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMCwgMjU1LCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIDI1NSwgMCwgMCk7Ci0JCQlicmVhazsKKwljYXNlIDM6IC8qIDMtYnl0ZSBwcm90b2NvbCAqLworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCAyNTUsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCAyNTUsIDAsIDApOworCQlicmVhazsKIAl9CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZWxvLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYwppbmRleCA2Y2RjZjJhLi5iNmI4YjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYwpAQCAtMTUzLDYgKzE1Myw5IEBACiAJCWlmIChwcmVzc3VyZSkKIAkJCXAgPSBNT0RSOwogCisJCWRldl9kYmcod20tPmRldiwgIlJhdyBjb29yZGluYXRlczogeD0leCwgeT0leCwgcD0leFxuIiwKKwkJCXgsIHksIHApOworCiAJCS8qIGFyZSBzYW1wbGVzIHZhbGlkICovCiAJCWlmICgoeCAmIFdNOTdYWF9BRENTUkNfTUFTSykgIT0gV005N1hYX0FEQ1NFTF9YIHx8CiAJCSAgICAoeSAmIFdNOTdYWF9BRENTUkNfTUFTSykgIT0gV005N1hYX0FEQ1NFTF9ZIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3MzYzI0MTBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vczNjMjQxMF90cy5jCmluZGV4IDYzODZiNDQuLjM3NTVhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vczNjMjQxMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vczNjMjQxMF90cy5jCkBAIC0xMjgsMjcgKzEyOCwyOSBAQAogCiAJZG93biA9IGdldF9kb3duKGRhdGEwLCBkYXRhMSk7CiAKLQlpZiAodHMuY291bnQgPT0gKDEgPDwgdHMuc2hpZnQpKSB7Ci0JCXRzLnhwID4+PSB0cy5zaGlmdDsKLQkJdHMueXAgPj49IHRzLnNoaWZ0OwotCi0JCWRldl9kYmcodHMuZGV2LCAiJXM6IFg9JWx1LCBZPSVsdSwgY291bnQ9JWRcbiIsCi0JCQlfX2Z1bmNfXywgdHMueHAsIHRzLnlwLCB0cy5jb3VudCk7Ci0KLQkJaW5wdXRfcmVwb3J0X2Ficyh0cy5pbnB1dCwgQUJTX1gsIHRzLnhwKTsKLQkJaW5wdXRfcmVwb3J0X2Ficyh0cy5pbnB1dCwgQUJTX1ksIHRzLnlwKTsKLQotCQlpbnB1dF9yZXBvcnRfa2V5KHRzLmlucHV0LCBCVE5fVE9VQ0gsIDEpOwotCQlpbnB1dF9zeW5jKHRzLmlucHV0KTsKLQotCQl0cy54cCA9IDA7Ci0JCXRzLnlwID0gMDsKLQkJdHMuY291bnQgPSAwOwotCX0KLQogCWlmIChkb3duKSB7CisJCWlmICh0cy5jb3VudCA9PSAoMSA8PCB0cy5zaGlmdCkpIHsKKwkJCXRzLnhwID4+PSB0cy5zaGlmdDsKKwkJCXRzLnlwID4+PSB0cy5zaGlmdDsKKworCQkJZGV2X2RiZyh0cy5kZXYsICIlczogWD0lbHUsIFk9JWx1LCBjb3VudD0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgdHMueHAsIHRzLnlwLCB0cy5jb3VudCk7CisKKwkJCWlucHV0X3JlcG9ydF9hYnModHMuaW5wdXQsIEFCU19YLCB0cy54cCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKHRzLmlucHV0LCBBQlNfWSwgdHMueXApOworCisJCQlpbnB1dF9yZXBvcnRfa2V5KHRzLmlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfc3luYyh0cy5pbnB1dCk7CisKKwkJCXRzLnhwID0gMDsKKwkJCXRzLnlwID0gMDsKKwkJCXRzLmNvdW50ID0gMDsKKwkJfQorCiAJCXMzY19hZGNfc3RhcnQodHMuY2xpZW50LCAwLCAxIDw8IHRzLnNoaWZ0KTsKIAl9IGVsc2UgeworCQl0cy54cCA9IDA7CisJCXRzLnlwID0gMDsKIAkJdHMuY291bnQgPSAwOwogCiAJCWlucHV0X3JlcG9ydF9rZXkodHMuaW5wdXQsIEJUTl9UT1VDSCwgMCk7CkBAIC00MDEsNiArNDAzLDcgQEAKIAlzdHJ1Y3QgczNjMjQxMF90c19tYWNoX2luZm8gKmluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWNsa19lbmFibGUodHMuY2xvY2spOworCWVuYWJsZV9pcnEodHMuaXJxX3RjKTsKIAogCS8qIEluaXRpYWxpc2UgcmVnaXN0ZXJzICovCiAJaWYgKChpbmZvLT5kZWxheSAmIDB4ZmZmZikgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90c2MyMDA3LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYwppbmRleCA3ZWYwZDE0Li5iZTIzNzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0c2MyMDA3X2lkdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0c2MyMDA3X2lkdGFibGVbXSA9IHsKIAl7ICJ0c2MyMDA3IiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYwppbmRleCA1MjU2MTIzLi45OTMzMGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiAgLSBHb1RvcCBTdXBlcl9RMi9Hb2dvUGVuL1BlblBvd2VyIHRhYmxldHMKICAqICAtIEpBU1RFQyBVU0IgdG91Y2ggY29udHJvbGxlci9EaWdpVGVjaCBEVFItMDJVCiAgKiAgLSBaeXRyb25pYyBjYXBhY2l0aXZlIHRvdWNoc2NyZWVuCisgKiAgLSBORVhJTy9pTmV4aW8KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBieSBEYW5pZWwgUml0eiA8ZGFuaWVsLnJpdHpAZ214LmNoPgogICogQ29weXJpZ2h0IChDKSBieSBUb2RkIEUuIEpvaG5zb24gKG10b3VjaHVzYi5jKQpAQCAtOTUsNiArOTYsNyBAQAogCiAJaW50ICAoKnJlYWRfZGF0YSkgICAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsIHVuc2lnbmVkIGNoYXIgKnBrdCk7CiAJaW50ICAoKmluaXQpICAgICAgICAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpOworCXZvaWQgKCpleGl0KQkgICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKTsKIH07CiAKIC8qIGEgdXNidG91Y2ggZGV2aWNlICovCkBAIC0xMDQsMTEgKzEwNiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAlpbnQgYnVmX2xlbjsKIAlzdHJ1Y3QgdXJiICppcnE7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CiAJY2hhciBuYW1lWzEyOF07CiAJY2hhciBwaHlzWzY0XTsKKwl2b2lkICpwcml2OwogCiAJaW50IHgsIHk7CiAJaW50IHRvdWNoLCBwcmVzczsKQEAgLTEzMyw2ICsxMzYsNyBAQAogCURFVlRZUEVfRTJJLAogCURFVlRZUEVfWllUUk9OSUMsCiAJREVWVFlQRV9UQzVVSCwKKwlERVZUWVBFX05FWElPLAogfTsKIAogI2RlZmluZSBVU0JfREVWSUNFX0hJRF9DTEFTUyh2ZW5kLCBwcm9kKSBcCkBAIC0xNDQsNyArMTQ4LDcgQEAKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQsIFwKIAkuYkludGVyZmFjZVByb3RvY29sID0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnRvdWNoX2RldmljZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VHQUxBWAogCS8qIGlnbm9yZSB0aGUgSElEIGNhcGFibGUgZGV2aWNlcywgaGFuZGxlZCBieSB1c2JoaWQgKi8KIAl7VVNCX0RFVklDRV9ISURfQ0xBU1MoMHgwZWVmLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0lHTk9SRX0sCkBAIC0yMjIsNiArMjI2LDE0IEBACiAJe1VTQl9ERVZJQ0UoMHgwNjY0LCAweDAzMDkpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1RDNVVIfSwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9ORVhJTworCS8qIGRhdGEgaW50ZXJmYWNlIG9ubHkgKi8KKwl7VVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGYwLCAweDIwMDIsIDB4MGEsIDB4MDAsIDB4MDApLAorCQkuZHJpdmVyX2luZm8gPSBERVZUWVBFX05FWElPfSwKKwl7VVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxODcwLCAweDAwMDEsIDB4MGEsIDB4MDAsIDB4MDApLAorCQkuZHJpdmVyX2luZm8gPSBERVZUWVBFX05FWElPfSwKKyNlbmRpZgorCiAJe30KIH07CiAKQEAgLTIzNCw4ICsyNDYsOSBAQAogc3RhdGljIGludCBlMmlfaW5pdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKIHsKIAlpbnQgcmV0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1c2J0b3VjaC0+aW50ZXJmYWNlKTsKIAotCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAogCSAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAyLCAweDAwMDAsIDB4MDA4MSwKIAkgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCkBAIC0zNDQsOCArMzU3LDkgQEAKIHN0YXRpYyBpbnQgbXRvdWNoX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCiB7CiAJaW50IHJldCwgaTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYodXNidG91Y2gtPmludGVyZmFjZSk7CiAKLQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNidG91Y2gtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J0b3VjaC0+dWRldiwgMCksCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKIAkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX1JFU0VULAogCSAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKQEAgLTM1Niw3ICszNzAsNyBAQAogCW1zbGVlcCgxNTApOwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNidG91Y2gtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J0b3VjaC0+dWRldiwgMCksCisJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJCQkJICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKIAkJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkJICAgICAgMSwgMSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwpAQCAtNDg5LDcgKzUwMyw3IEBACiAKIHN0YXRpYyBpbnQgZG1jX3RzYzEwX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzYnRvdWNoLT51ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYnRvdWNoLT5pbnRlcmZhY2UpOwogCWludCByZXQgPSAtRU5PTUVNOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIApAQCAtNjkwLDYgKzcwNCwyMjkgQEAKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5FWElPIFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfTkVYSU8KKworI2RlZmluZSBORVhJT19USU1FT1VUCTUwMDAKKyNkZWZpbmUgTkVYSU9fQlVGU0laRQkxMDI0CisjZGVmaW5lIE5FWElPX1RIUkVTSE9MRAk1MAorCitzdHJ1Y3QgbmV4aW9fcHJpdiB7CisJc3RydWN0IHVyYiAqYWNrOworCXVuc2lnbmVkIGNoYXIgKmFja19idWY7Cit9OworCitzdHJ1Y3QgbmV4aW9fdG91Y2hfcGFja2V0IHsKKwl1OAlmbGFnczsJCS8qIDB4ZTEgPSB0b3VjaCwgMHhlMSA9IHJlbGVhc2UgKi8KKwlfX2JlMTYJZGF0YV9sZW47CS8qIHRvdGFsIGJ5dGVzIG9mIHRvdWNoIGRhdGEgKi8KKwlfX2JlMTYJeF9sZW47CQkvKiBieXRlcyBmb3IgWCBheGlzICovCisJX19iZTE2CXlfbGVuOwkJLyogYnl0ZXMgZm9yIFkgYXhpcyAqLworCXU4CWRhdGFbXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciBuZXhpb19hY2tfcGt0WzJdID0geyAweGFhLCAweDAyIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBuZXhpb19pbml0X3BrdFs0XSA9IHsgMHg4MiwgMHgwNCwgMHgwYSwgMHgwZiB9OworCitzdGF0aWMgdm9pZCBuZXhpb19hY2tfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworfQorCitzdGF0aWMgaW50IG5leGlvX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYodXNidG91Y2gtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdXNidG91Y2gtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IG5leGlvX3ByaXYgKnByaXY7CisJaW50IHJldCA9IC1FTk9NRU07CisJaW50IGFjdHVhbF9sZW4sIGk7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWNoYXIgKmZpcm13YXJlX3ZlciA9IE5VTEwsICpkZXZpY2VfbmFtZSA9IE5VTEw7CisJaW50IGlucHV0X2VwID0gMCwgb3V0cHV0X2VwID0gMDsKKworCS8qIGZpbmQgZmlyc3QgaW5wdXQgYW5kIG91dHB1dCBlbmRwb2ludCAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWlmICghaW5wdXRfZXAgJiYKKwkJICAgIHVzYl9lbmRwb2ludF9kaXJfaW4oJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYykpCisJCQlpbnB1dF9lcCA9IGludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQlpZiAoIW91dHB1dF9lcCAmJgorCQkgICAgdXNiX2VuZHBvaW50X2Rpcl9vdXQoJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYykpCisJCQlvdXRwdXRfZXAgPSBpbnRlcmZhY2UtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwl9CisJaWYgKCFpbnB1dF9lcCB8fCAhb3V0cHV0X2VwKQorCQlyZXR1cm4gLUVOWElPOworCisJYnVmID0ga21hbGxvYyhORVhJT19CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXRfYnVmOworCisJLyogdHdvIGVtcHR5IHJlYWRzICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlyZXQgPSB1c2JfYnVsa19tc2coZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBpbnB1dF9lcCksCisJCQkJICAgYnVmLCBORVhJT19CVUZTSVpFLCAmYWN0dWFsX2xlbiwKKwkJCQkgICBORVhJT19USU1FT1VUKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9idWY7CisJfQorCisJLyogc2VuZCBpbml0IGNvbW1hbmQgKi8KKwltZW1jcHkoYnVmLCBuZXhpb19pbml0X3BrdCwgc2l6ZW9mKG5leGlvX2luaXRfcGt0KSk7CisJcmV0ID0gdXNiX2J1bGtfbXNnKGRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldiwgb3V0cHV0X2VwKSwKKwkJCSAgIGJ1Ziwgc2l6ZW9mKG5leGlvX2luaXRfcGt0KSwgJmFjdHVhbF9sZW4sCisJCQkgICBORVhJT19USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfYnVmOworCisJLyogcmVhZCByZXBsaWVzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQltZW1zZXQoYnVmLCAwLCBORVhJT19CVUZTSVpFKTsKKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldiwgaW5wdXRfZXApLAorCQkJCSAgIGJ1ZiwgTkVYSU9fQlVGU0laRSwgJmFjdHVhbF9sZW4sCisJCQkJICAgTkVYSU9fVElNRU9VVCk7CisJCWlmIChyZXQgPCAwIHx8IGFjdHVhbF9sZW4gPCAxIHx8IGJ1ZlsxXSAhPSBhY3R1YWxfbGVuKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoYnVmWzBdKSB7CisJCWNhc2UgMHg4MzoJLyogZmlybXdhcmUgdmVyc2lvbiAqLworCQkJaWYgKCFmaXJtd2FyZV92ZXIpCisJCQkJZmlybXdhcmVfdmVyID0ga3N0cmR1cCgmYnVmWzJdLCBHRlBfS0VSTkVMKTsKKwkJCWJyZWFrOworCQljYXNlIDB4ODQ6CS8qIGRldmljZSBuYW1lICovCisJCQlpZiAoIWRldmljZV9uYW1lKQorCQkJCWRldmljZV9uYW1lID0ga3N0cmR1cCgmYnVmWzJdLCBHRlBfS0VSTkVMKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiTmV4aW8gZGV2aWNlOiAlcywgZmlybXdhcmUgdmVyc2lvbjogJXNcbiIsCisJICAgICAgIGRldmljZV9uYW1lLCBmaXJtd2FyZV92ZXIpOworCisJa2ZyZWUoZmlybXdhcmVfdmVyKTsKKwlrZnJlZShkZXZpY2VfbmFtZSk7CisKKwkvKiBwcmVwYXJlIEFDSyBVUkIgKi8KKwlyZXQgPSAtRU5PTUVNOworCisJdXNidG91Y2gtPnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmV4aW9fcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghdXNidG91Y2gtPnByaXYpCisJCWdvdG8gb3V0X2J1ZjsKKworCXByaXYgPSB1c2J0b3VjaC0+cHJpdjsKKworCXByaXYtPmFja19idWYgPSBrbWFsbG9jKHNpemVvZihuZXhpb19hY2tfcGt0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5hY2tfYnVmKQorCQlnb3RvIGVycl9wcml2OworCisJbWVtY3B5KHByaXYtPmFja19idWYsIG5leGlvX2Fja19wa3QsIHNpemVvZihuZXhpb19hY2tfcGt0KSk7CisKKwlwcml2LT5hY2sgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YWNrKSB7CisJCWRiZygiJXMgLSB1c2JfYWxsb2NfdXJiIGZhaWxlZDogdXNidG91Y2gtPmFjayIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfYWNrX2J1ZjsKKwl9CisKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT5hY2ssIGRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldiwgb3V0cHV0X2VwKSwKKwkJCSAgcHJpdi0+YWNrX2J1Ziwgc2l6ZW9mKG5leGlvX2Fja19wa3QpLAorCQkJICBuZXhpb19hY2tfY29tcGxldGUsIHVzYnRvdWNoKTsKKwlyZXQgPSAwOworCWdvdG8gb3V0X2J1ZjsKKworZXJyX2Fja19idWY6CisJa2ZyZWUocHJpdi0+YWNrX2J1Zik7CitlcnJfcHJpdjoKKwlrZnJlZShwcml2KTsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBuZXhpb19leGl0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKQoreworCXN0cnVjdCBuZXhpb19wcml2ICpwcml2ID0gdXNidG91Y2gtPnByaXY7CisKKwl1c2Jfa2lsbF91cmIocHJpdi0+YWNrKTsKKwl1c2JfZnJlZV91cmIocHJpdi0+YWNrKTsKKwlrZnJlZShwcml2LT5hY2tfYnVmKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGludCBuZXhpb19yZWFkX2RhdGEoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsIHVuc2lnbmVkIGNoYXIgKnBrdCkKK3sKKwlpbnQgeCwgeSwgYmVnaW5feCwgYmVnaW5feSwgZW5kX3gsIGVuZF95LCB3LCBoLCByZXQ7CisJc3RydWN0IG5leGlvX3RvdWNoX3BhY2tldCAqcGFja2V0ID0gKHZvaWQgKikgcGt0OworCXN0cnVjdCBuZXhpb19wcml2ICpwcml2ID0gdXNidG91Y2gtPnByaXY7CisKKwkvKiBnb3QgdG91Y2ggZGF0YT8gKi8KKwlpZiAoKHBrdFswXSAmIDB4ZTApICE9IDB4ZTApCisJCXJldHVybiAwOworCisJLyogc2VuZCBBQ0sgKi8KKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5hY2ssIEdGUF9BVE9NSUMpOworCisJaWYgKCF1c2J0b3VjaC0+dHlwZS0+bWF4X3hjKSB7CisJCXVzYnRvdWNoLT50eXBlLT5tYXhfeGMgPSAyICogYmUxNl90b19jcHUocGFja2V0LT54X2xlbik7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1gsIDAsCisJCQkJICAgICAyICogYmUxNl90b19jcHUocGFja2V0LT54X2xlbiksIDAsIDApOworCQl1c2J0b3VjaC0+dHlwZS0+bWF4X3ljID0gMiAqIGJlMTZfdG9fY3B1KHBhY2tldC0+eV9sZW4pOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyh1c2J0b3VjaC0+aW5wdXQsIEFCU19ZLCAwLAorCQkJCSAgICAgMiAqIGJlMTZfdG9fY3B1KHBhY2tldC0+eV9sZW4pLCAwLCAwKTsKKwl9CisJLyoKKwkgKiBUaGUgZGV2aWNlIHJlcG9ydHMgc3RhdGUgb2YgSVIgc2Vuc29ycyBvbiBYIGFuZCBZIGF4ZXMuCisJICogRWFjaCBieXRlIHJlcHJlc2VudHMgImRhcmtuZXNzIiBwZXJjZW50YWdlICgwLTEwMCkgb2Ygb25lIGVsZW1lbnQuCisJICogMTciIHRvdWNoc2NyZWVuIHJlcG9ydHMgb25seSA2NCB4IDUyIGJ5dGVzIHNvIHRoZSByZXNvbHV0aW9uIGlzIGxvdy4KKwkgKiBUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGVyZSdzIGEgbGltaXRlZCBtdWx0aS10b3VjaCBjYXBhYmlsaXR5IGJ1dAorCSAqIGl0J3MgZGlzYWJsZWQgKGFuZCB1bnRlc3RlZCkgaGVyZSBhcyB0aGVyZSdzIG5vIFggZHJpdmVyIGZvciB0aGF0LgorCSAqLworCWJlZ2luX3ggPSBlbmRfeCA9IGJlZ2luX3kgPSBlbmRfeSA9IC0xOworCWZvciAoeCA9IDA7IHggPCBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsgeCsrKSB7CisJCWlmIChiZWdpbl94ID09IC0xICYmIHBhY2tldC0+ZGF0YVt4XSA+IE5FWElPX1RIUkVTSE9MRCkgeworCQkJYmVnaW5feCA9IHg7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZW5kX3ggPT0gLTEgJiYgYmVnaW5feCAhPSAtMSAmJiBwYWNrZXQtPmRhdGFbeF0gPCBORVhJT19USFJFU0hPTEQpIHsKKwkJCWVuZF94ID0geCAtIDE7CisJCQlmb3IgKHkgPSBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsKKwkJCSAgICAgeSA8IGJlMTZfdG9fY3B1KHBhY2tldC0+ZGF0YV9sZW4pOyB5KyspIHsKKwkJCQlpZiAoYmVnaW5feSA9PSAtMSAmJiBwYWNrZXQtPmRhdGFbeV0gPiBORVhJT19USFJFU0hPTEQpIHsKKwkJCQkJYmVnaW5feSA9IHkgLSBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmIChlbmRfeSA9PSAtMSAmJgorCQkJCSAgICBiZWdpbl95ICE9IC0xICYmIHBhY2tldC0+ZGF0YVt5XSA8IE5FWElPX1RIUkVTSE9MRCkgeworCQkJCQllbmRfeSA9IHkgLSAxIC0gYmUxNl90b19jcHUocGFja2V0LT54X2xlbik7CisJCQkJCXcgPSBlbmRfeCAtIGJlZ2luX3g7CisJCQkJCWggPSBlbmRfeSAtIGJlZ2luX3k7CisjaWYgMAorCQkJCQkvKiBtdWx0aS10b3VjaCAqLworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwKKwkJCQkJCSAgICBBQlNfTVRfVE9VQ0hfTUFKT1IsIG1heCh3LGgpKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsCisJCQkJCQkgICAgQUJTX01UX1RPVUNIX01JTk9SLCBtaW4oeCxoKSk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LAorCQkJCQkJICAgIEFCU19NVF9QT1NJVElPTl9YLCAyKmJlZ2luX3grdyk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LAorCQkJCQkJICAgIEFCU19NVF9QT1NJVElPTl9ZLCAyKmJlZ2luX3kraCk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LAorCQkJCQkJICAgIEFCU19NVF9PUklFTlRBVElPTiwgdyA+IGgpOworCQkJCQlpbnB1dF9tdF9zeW5jKHVzYnRvdWNoLT5pbnB1dCk7CisjZW5kaWYKKwkJCQkJLyogc2luZ2xlIHRvdWNoICovCisJCQkJCXVzYnRvdWNoLT54ID0gMiAqIGJlZ2luX3ggKyB3OworCQkJCQl1c2J0b3VjaC0+eSA9IDIgKiBiZWdpbl95ICsgaDsKKwkJCQkJdXNidG91Y2gtPnRvdWNoID0gcGFja2V0LT5mbGFncyAmIDB4MDE7CisJCQkJCWJlZ2luX3kgPSBlbmRfeSA9IC0xOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CisJCQliZWdpbl94ID0gZW5kX3ggPSAtMTsKKwkJfQorCisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiB0aGUgZGlmZmVyZW50IGRldmljZSBkZXNjcmlwdG9ycwogICovCiAjaWZkZWYgTVVMVElfUEFDS0VUCkBAIC04NzMsNiArMTExMCwxNiBAQAogCQkucmVhZF9kYXRhCT0gdGM1dWhfcmVhZF9kYXRhLAogCX0sCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfTkVYSU8KKwlbREVWVFlQRV9ORVhJT10gPSB7CisJCS5yZXB0X3NpemUJPSAxMjgsCisJCS5pcnFfYWx3YXlzCT0gdHJ1ZSwKKwkJLnJlYWRfZGF0YQk9IG5leGlvX3JlYWRfZGF0YSwKKwkJLmluaXQJCT0gbmV4aW9faW5pdCwKKwkJLmV4aXQJCT0gbmV4aW9fZXhpdCwKKwl9LAorI2VuZGlmCiB9OwogCiAKQEAgLTk5OCw2ICsxMjQ1LDcgQEAKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FU0hVVERPV046CisJY2FzZSAtRVBJUEU6CiAJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAogCQkgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKQEAgLTEwMjEsNyArMTI2OSw3IEBACiB7CiAJc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2ggPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7CiAKLQl1c2J0b3VjaC0+aXJxLT5kZXYgPSB1c2J0b3VjaC0+dWRldjsKKwl1c2J0b3VjaC0+aXJxLT5kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYnRvdWNoLT5pbnRlcmZhY2UpOwogCiAJaWYgKCF1c2J0b3VjaC0+dHlwZS0+aXJxX2Fsd2F5cykgewogCQlpZiAodXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpCkBAIC0xMDQ4LDEzICsxMjk2LDIzIEBACiAJa2ZyZWUodXNidG91Y2gtPmJ1ZmZlcik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKgordXNidG91Y2hfZ2V0X2lucHV0X2VuZHBvaW50KHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjKSkKKwkJCXJldHVybiAmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjOworCisJcmV0dXJuIE5VTEw7Cit9CiAKIHN0YXRpYyBpbnQgdXNidG91Y2hfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKQEAgLTEwNjQsOCArMTMyMiw5IEBACiAJaWYgKGlkLT5kcml2ZXJfaW5mbyA9PSBERVZUWVBFX0lHTk9SRSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJZW5kcG9pbnQgPSB1c2J0b3VjaF9nZXRfaW5wdXRfZW5kcG9pbnQoaW50Zi0+Y3VyX2FsdHNldHRpbmcpOworCWlmICghZW5kcG9pbnQpCisJCXJldHVybiAtRU5YSU87CiAKIAl1c2J0b3VjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2J0b3VjaF91c2IpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKQEAgLTEwOTQsNyArMTM1Myw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKIAl9CiAKLQl1c2J0b3VjaC0+dWRldiA9IHVkZXY7CisJdXNidG91Y2gtPmludGVyZmFjZSA9IGludGY7CiAJdXNidG91Y2gtPmlucHV0ID0gaW5wdXRfZGV2OwogCiAJaWYgKHVkZXYtPm1hbnVmYWN0dXJlcikKQEAgLTExMzMsMTIgKzEzOTIsMTggQEAKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIHR5cGUtPm1pbl9wcmVzcywKIAkJICAgICAgICAgICAgICAgICAgICAgdHlwZS0+bWF4X3ByZXNzLCAwLCAwKTsKIAotCXVzYl9maWxsX2ludF91cmIodXNidG91Y2gtPmlycSwgdXNidG91Y2gtPnVkZXYsCi0JCQkgdXNiX3JjdmludHBpcGUodXNidG91Y2gtPnVkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwlpZiAodXNiX2VuZHBvaW50X3R5cGUoZW5kcG9pbnQpID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkKKwkJdXNiX2ZpbGxfaW50X3VyYih1c2J0b3VjaC0+aXJxLCB1ZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCSB1c2J0b3VjaC0+ZGF0YSwgdHlwZS0+cmVwdF9zaXplLAogCQkJIHVzYnRvdWNoX2lycSwgdXNidG91Y2gsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCWVsc2UKKwkJdXNiX2ZpbGxfYnVsa191cmIodXNidG91Y2gtPmlycSwgdWRldiwKKwkJCSB1c2JfcmN2YnVsa3BpcGUodWRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIHVzYnRvdWNoLT5kYXRhLCB0eXBlLT5yZXB0X3NpemUsCisJCQkgdXNidG91Y2hfaXJxLCB1c2J0b3VjaCk7CiAKLQl1c2J0b3VjaC0+aXJxLT5kZXYgPSB1c2J0b3VjaC0+dWRldjsKKwl1c2J0b3VjaC0+aXJxLT5kZXYgPSB1ZGV2OwogCXVzYnRvdWNoLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHVzYnRvdWNoLT5kYXRhX2RtYTsKIAl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIApAQCAtMTE0NywyMyArMTQxMiwzNyBAQAogCQllcnIgPSB0eXBlLT5pbml0KHVzYnRvdWNoKTsKIAkJaWYgKGVycikgewogCQkJZGJnKCIlcyAtIHR5cGUtPmluaXQoKSBmYWlsZWQsIGVycjogJWQiLCBfX2Z1bmNfXywgZXJyKTsKLQkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwkJCWdvdG8gb3V0X2ZyZWVfdXJiOwogCQl9CiAJfQogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CiAJaWYgKGVycikgewogCQlkYmcoIiVzIC0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCwgZXJyOiAlZCIsIF9fZnVuY19fLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CisJCWdvdG8gb3V0X2RvX2V4aXQ7CiAJfQogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCB1c2J0b3VjaCk7CiAKLQlpZiAodXNidG91Y2gtPnR5cGUtPmlycV9hbHdheXMpCi0JCXVzYl9zdWJtaXRfdXJiKHVzYnRvdWNoLT5pcnEsIEdGUF9LRVJORUwpOworCWlmICh1c2J0b3VjaC0+dHlwZS0+aXJxX2Fsd2F5cykgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1c2J0b3VjaC0+aXJxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdDogJWQiLAorCQkJICAgIF9fZnVuY19fLCBlcnIpOworCQkJZ290byBvdXRfdW5yZWdpc3Rlcl9pbnB1dDsKKwkJfQorCX0KIAogCXJldHVybiAwOwogCitvdXRfdW5yZWdpc3Rlcl9pbnB1dDoKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlucHV0X2RldiA9IE5VTEw7CitvdXRfZG9fZXhpdDoKKwlpZiAodHlwZS0+ZXhpdCkKKwkJdHlwZS0+ZXhpdCh1c2J0b3VjaCk7CitvdXRfZnJlZV91cmI6CisJdXNiX2ZyZWVfdXJiKHVzYnRvdWNoLT5pcnEpOwogb3V0X2ZyZWVfYnVmZmVyczoKIAl1c2J0b3VjaF9mcmVlX2J1ZmZlcnModWRldiwgdXNidG91Y2gpOwogb3V0X2ZyZWU6CkBAIC0xMTg2LDYgKzE0NjUsOCBAQAogCS8qIHRoaXMgd2lsbCBzdG9wIElPIHZpYSBjbG9zZSAqLwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CiAJdXNiX2ZyZWVfdXJiKHVzYnRvdWNoLT5pcnEpOworCWlmICh1c2J0b3VjaC0+dHlwZS0+ZXhpdCkKKwkJdXNidG91Y2gtPnR5cGUtPmV4aXQodXNidG91Y2gpOwogCXVzYnRvdWNoX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCB1c2J0b3VjaCk7CiAJa2ZyZWUodXNidG91Y2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi96eWxvbml0ZS13bTk3eHguYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4venlsb25pdGUtd205N3h4LmMKaW5kZXggZWNhNTRkYi4uMDQ4ODQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi96eWxvbml0ZS13bTk3eHguYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3p5bG9uaXRlLXdtOTd4eC5jCkBAIC0xMTgsNiArMTE4LDkgQEAKIAkJaWYgKHByZXNzdXJlKQogCQkJcCA9IE1PRFI7CiAKKwkJZGV2X2RiZyh3bS0+ZGV2LCAiUmF3IGNvb3JkaW5hdGVzOiB4PSV4LCB5PSV4LCBwPSV4XG4iLAorCQkJeCwgeSwgcCk7CisKIAkJLyogYXJlIHNhbXBsZXMgdmFsaWQgKi8KIAkJaWYgKCh4ICYgV005N1hYX0FEQ1NSQ19NQVNLKSAhPSBXTTk3WFhfQURDU0VMX1ggfHwKIAkJICAgICh5ICYgV005N1hYX0FEQ1NSQ19NQVNLKSAhPSBXTTk3WFhfQURDU0VMX1kgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMgYi9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jCmluZGV4IGM3MjFjMGEuLmQzMDQzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMKKysrIGIvZHJpdmVycy9pbnB1dC94ZW4ta2JkZnJvbnQuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgeGVua2JkX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkIHhlbmtiZF9pZHNbXSA9IHsKIAl7ICJ2a2JkIiB9LAogCXsgIiIgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9LY29uZmlnIGIvZHJpdmVycy9pc2RuL0tjb25maWcKaW5kZXggMDIyYTE5NC4uNGZiNjAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL0tjb25maWcKQEAgLTcsMTUgKzcsMTQgQEAKIAlkZXBlbmRzIG9uIE5FVAogCWRlcGVuZHMgb24gIVMzOTAKIAktLS1oZWxwLS0tCi0JICBJU0ROICgiSW50ZWdyYXRlZCBTZXJ2aWNlcyBEaWdpdGFsIE5ldHdvcmtzIiwgY2FsbGVkIFJOSVMgaW4gRnJhbmNlKQotCSAgaXMgYSBzcGVjaWFsIHR5cGUgb2YgZnVsbHkgZGlnaXRhbCB0ZWxlcGhvbmUgc2VydmljZTsgaXQncyBtb3N0bHkKLQkgIHVzZWQgdG8gY29ubmVjdCB0byB5b3VyIEludGVybmV0IHNlcnZpY2UgcHJvdmlkZXIgKHdpdGggU0xJUCBvcgotCSAgUFBQKS4gIFRoZSBtYWluIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBzcGVlZCBpcyBoaWdoZXIgdGhhbiBvcmRpbmFyeQotCSAgbW9kZW0vdGVsZXBob25lIGNvbm5lY3Rpb25zLCBhbmQgdGhhdCB5b3UgY2FuIGhhdmUgdm9pY2UKLQkgIGNvbnZlcnNhdGlvbnMgd2hpbGUgZG93bmxvYWRpbmcgc3R1ZmYuICBJdCBvbmx5IHdvcmtzIGlmIHlvdXIKLQkgIGNvbXB1dGVyIGlzIGVxdWlwcGVkIHdpdGggYW4gSVNETiBjYXJkIGFuZCBib3RoIHlvdSBhbmQgeW91ciBzZXJ2aWNlCi0JICBwcm92aWRlciBwdXJjaGFzZWQgYW4gSVNETiBsaW5lIGZyb20gdGhlIHBob25lIGNvbXBhbnkuICBGb3IKLQkgIGRldGFpbHMsIHJlYWQgPGh0dHA6Ly93d3cuYWx1bW5pLmNhbHRlY2guZWR1L35kYW5rL2lzZG4vPiBvbiB0aGUgV1dXLgorCSAgSVNETiAoIkludGVncmF0ZWQgU2VydmljZXMgRGlnaXRhbCBOZXR3b3JrIiwgY2FsbGVkIFJOSVMgaW4gRnJhbmNlKQorCSAgaXMgYSBmdWxseSBkaWdpdGFsIHRlbGVwaG9uZSBzZXJ2aWNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHZvaWNlIGFuZAorCSAgZGF0YSBjb25uZWN0aW9ucy4gIElmIHlvdXIgY29tcHV0ZXIgaXMgZXF1aXBwZWQgd2l0aCBhbiBJU0ROCisJICBhZGFwdGVyIHlvdSBjYW4gdXNlIGl0IHRvIGNvbm5lY3QgdG8geW91ciBJbnRlcm5ldCBzZXJ2aWNlIHByb3ZpZGVyCisJICAod2l0aCBTTElQIG9yIFBQUCkgZmFzdGVyIHRoYW4gdmlhIGEgY29udmVudGlvbmFsIHRlbGVwaG9uZSBtb2RlbQorCSAgKHRob3VnaCBzdGlsbCBtdWNoIHNsb3dlciB0aGFuIHdpdGggRFNMKSBvciB0byBtYWtlIGFuZCBhY2NlcHQKKwkgIHZvaWNlIGNhbGxzIChlZy4gdHVybmluZyB5b3VyIFBDIGludG8gYSBzb2Z0d2FyZSBhbnN3ZXJpbmcgbWFjaGluZQorCSAgb3IgUEFCWCkuCiAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IElTRE4uCiAKQEAgLTM5LDE3ICszOCwyMiBAQAogCSAgSXQgaXMgc3RpbGwgYXZhaWxhYmxlLCB0aG91Z2gsIGZvciB1c2Ugd2l0aCBhZGFwdGVycyB0aGF0IGFyZSBub3QKIAkgIHN1cHBvcnRlZCBieSB0aGUgbmV3IENBUEkgc3Vic3lzdGVtIHlldC4KIAotc291cmNlICJkcml2ZXJzL2lzZG4vbUlTRE4vS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL2lzZG4vaTRsL0tjb25maWciCiAKIG1lbnVjb25maWcgSVNETl9DQVBJCiAJdHJpc3RhdGUgIkNBUEkgMi4wIHN1YnN5c3RlbSIKIAloZWxwCi0JICBUaGlzIHByb3ZpZGVzIHRoZSBDQVBJIChDb21tb24gSVNETiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZwotCSAgSW50ZXJmYWNlLCBhIHN0YW5kYXJkIG1ha2luZyBpdCBlYXN5IGZvciBwcm9ncmFtcyB0byBhY2Nlc3MgSVNETgotCSAgaGFyZHdhcmUsIHNlZSA8aHR0cDovL3d3dy5jYXBpLm9yZy8+LiAgVGhpcyBpcyBuZWVkZWQgZm9yIEFWTSdzIHNldAotCSAgb2YgYWN0aXZlIElTRE4gY29udHJvbGxlcnMgbGlrZSBCMSwgVDEsIE0xLgorCSAgVGhpcyBwcm92aWRlcyBDQVBJICh0aGUgQ29tbW9uIElTRE4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcKKwkgIEludGVyZmFjZSkgVmVyc2lvbiAyLjAsIGEgc3RhbmRhcmQgbWFraW5nIGl0IGVhc3kgZm9yIHByb2dyYW1zIHRvCisJICBhY2Nlc3MgSVNETiBoYXJkd2FyZSBpbiBhIGRldmljZSBpbmRlcGVuZGVudCB3YXkuIChGb3IgZGV0YWlscyBzZWUKKwkgIDxodHRwOi8vd3d3LmNhcGkub3JnLz4uKSAgQ0FQSSBzdXBwb3J0cyBtYWtpbmcgYW5kIGFjY2VwdGluZyB2b2ljZQorCSAgYW5kIGRhdGEgY29ubmVjdGlvbnMsIGNvbnRyb2xsaW5nIGNhbGwgb3B0aW9ucyBhbmQgcHJvdG9jb2xzLAorCSAgYXMgd2VsbCBhcyBJU0ROIHN1cHBsZW1lbnRhcnkgc2VydmljZXMgbGlrZSBjYWxsIGZvcndhcmRpbmcgb3IKKwkgIHRocmVlLXBhcnR5IGNvbmZlcmVuY2VzIChpZiBzdXBwb3J0ZWQgYnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlCisJICBkcml2ZXIpLgorCisJICBTZWxlY3QgdGhpcyBvcHRpb24gYW5kIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBkcml2ZXIgYmVsb3cgaWYKKwkgIHlvdSBoYXZlIGFuIElTRE4gYWRhcHRlciBzdXBwb3J0ZWQgYnkgdGhlIENBUEkgc3Vic3lzdGVtLgogCiBpZiBJU0ROX0NBUEkKIApAQCAtNjEsNCArNjUsMTMgQEAKIAogc291cmNlICJkcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvaXNkbi9oeXNkbi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnIgorCitjb25maWcgSVNETl9IRExDCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JDX0NDSVRUCisJc2VsZWN0IEJJVFJFVkVSU0UKKwogZW5kaWYgIyBJU0ROCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZwppbmRleCBiMmEwNDc1Li5hMTY4ZThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcKQEAgLTE3LDggKzE3LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBJU0ROX0NBUElfTUlERExFV0FSRQotCWJvb2wgIkNBUEkyLjAgTWlkZGxld2FyZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJYm9vbCAiQ0FQSTIuMCBNaWRkbGV3YXJlIHN1cHBvcnQiCiAJaGVscAogCSAgVGhpcyBvcHRpb24gd2lsbCBlbmhhbmNlIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIC9kZXYvY2FwaTIwCiAJICBpbnRlcmZhY2UuICBJdCB3aWxsIHByb3ZpZGUgYSBtZWFucyBvZiBtb3ZpbmcgYSBkYXRhIGNvbm5lY3Rpb24sCkBAIC0zNSwxOCArMzQsMTkgQEAKIAkgIFkvTSBoZXJlLgogCiBjb25maWcgSVNETl9DQVBJX0NBUElGU19CT09MCi0JYm9vbCAiQ0FQSTIuMCBmaWxlc3lzdGVtIHN1cHBvcnQiCisJYm9vbCAiQ0FQSTIuMCBmaWxlc3lzdGVtIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gSVNETl9DQVBJX01JRERMRVdBUkUgJiYgSVNETl9DQVBJX0NBUEkyMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgc3BlY2lhbCBmaWxlIHN5c3RlbSwgc2ltaWxhciB0byAvZGV2L3B0cyB3aXRoCisJICBkZXZpY2Ugbm9kZXMgZm9yIHRoZSBzcGVjaWFsIHR0eXMgZXN0YWJsaXNoZWQgYnkgdXNpbmcgdGhlCisJICBtaWRkbGV3YXJlIGV4dGVuc2lvbiBhYm92ZS4KKwkgIFlvdSBubyBsb25nZXIgbmVlZCB0aGlzLCB1ZGV2IGZ1bGx5IHJlcGxhY2VzIGl0LiBUaGlzIGZlYXR1cmUgaXMKKwkgIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC4KIAogY29uZmlnIElTRE5fQ0FQSV9DQVBJRlMKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gSVNETl9DQVBJX0NBUElGU19CT09MCiAJZGVmYXVsdCBJU0ROX0NBUElfQ0FQSTIwCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBzcGVjaWFsIGZpbGUgc3lzdGVtLCBzaW1pbGFyIHRvIC9kZXYvcHRzIHdpdGgKLQkgIGRldmljZSBub2RlcyBmb3IgdGhlIHNwZWNpYWwgdHR5cyBlc3RhYmxpc2hlZCBieSB1c2luZyB0aGUKLQkgIG1pZGRsZXdhcmUgZXh0ZW5zaW9uIGFib3ZlLiBJZiB5b3Ugd2FudCB0byB1c2UgcHBwZCB3aXRoCi0JICBwcHBkY2FwaXBsdWdpbiB0byBkaWFsIHVwIHRvIHlvdXIgSVNQLCBzYXkgWSBoZXJlLgogCiBjb25maWcgSVNETl9DQVBJX0NBUElEUlYKIAl0cmlzdGF0ZSAiQ0FQSTIuMCBjYXBpZHJ2IGludGVyZmFjZSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDY1YmY5MWUuLmVlNTgzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTIzLDE2ICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaWZkZWYgQ09ORklHX1BQUAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BwcF9kZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfcHBwLmg+Ci0jZW5kaWYgLyogQ09ORklHX1BQUCAqLwotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBpLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsY2FwaS5oPgpAQCAtNDEsMzUgKzM4LDI5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGl1dGlsLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpY21kLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGUykgfHwgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGU19NT0RVTEUpCi0jaW5jbHVkZSAiY2FwaWZzLmgiCi0jZW5kaWYKIAotc3RhdGljIGNoYXIgKnJldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xLjIuNyAkIjsKKyNpbmNsdWRlICJjYXBpZnMuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVBJNExpbnV4OiBVc2Vyc3BhY2UgL2Rldi9jYXBpMjAgaW50ZXJmYWNlIik7CiBNT0RVTEVfQVVUSE9SKCJDYXJzdGVuIFBhZXRoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSN1bmRlZiBfREVCVUdfUkVGQ09VTlQJCS8qIGFsbG9jL2ZyZWUgYW5kIG9wZW4vY2xvc2UgZGVidWcgKi8KICN1bmRlZiBfREVCVUdfVFRZRlVOQ1MJCS8qIGNhbGwgdG8gdHR5X2RyaXZlciAqLwogI3VuZGVmIF9ERUJVR19EQVRBRkxPVwkJLyogZGF0YSBmbG93ICovCiAKIC8qIC0tLS0tLS0tIGRyaXZlciBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IGNsYXNzICpjYXBpX2NsYXNzOwotCiBzdGF0aWMgaW50IGNhcGlfbWFqb3IgPSA2ODsJCS8qIGFsbG9jYXRlZCAqLwotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQotI2RlZmluZSBDQVBJTkNfTlJfUE9SVFMJMzIKLSNkZWZpbmUgQ0FQSU5DX01BWF9QT1JUUwkyNTYKLXN0YXRpYyBpbnQgY2FwaV90dHltYWpvciA9IDE5MTsKLXN0YXRpYyBpbnQgY2FwaV90dHltaW5vcnMgPSBDQVBJTkNfTlJfUE9SVFM7Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAKIG1vZHVsZV9wYXJhbV9uYW1lZChtYWpvciwgY2FwaV9tYWpvciwgdWludCwgMCk7CisKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLW1vZHVsZV9wYXJhbV9uYW1lZCh0dHltYWpvciwgY2FwaV90dHltYWpvciwgdWludCwgMCk7CisjZGVmaW5lIENBUElOQ19OUl9QT1JUUwkJMzIKKyNkZWZpbmUgQ0FQSU5DX01BWF9QT1JUUwkyNTYKKworc3RhdGljIGludCBjYXBpX3R0eW1pbm9ycyA9IENBUElOQ19OUl9QT1JUUzsKKwogbW9kdWxlX3BhcmFtX25hbWVkKHR0eW1pbm9ycywgY2FwaV90dHltaW5vcnMsIHVpbnQsIDApOwogI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCkBAIC04Myw1MyArNzQsNDMgQEAKIAogc3RydWN0IGNhcGlkZXY7CiBzdHJ1Y3QgY2FwaW5jY2k7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiBzdHJ1Y3QgY2FwaW1pbm9yOwogCi1zdHJ1Y3QgZGF0YWhhbmRsZV9xdWV1ZSB7CitzdHJ1Y3QgYWNrcXVldWVfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1MTYJCQlkYXRhaGFuZGxlOwogfTsKIAogc3RydWN0IGNhcGltaW5vciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBjYXBpbmNjaSAgKm5jY2lwOworCXN0cnVjdCBrcmVmIGtyZWY7CisKIAl1bnNpZ25lZCBpbnQgICAgICBtaW5vcjsKKwlzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfZGVudHJ5OwogCi0Jc3RydWN0IGNhcGkyMF9hcHBsICphcDsKLQl1MzIJCSBuY2NpOwotCXUxNgkJIGRhdGFoYW5kbGU7Ci0JdTE2CQkgbXNnaWQ7CisJc3RydWN0IGNhcGkyMF9hcHBsCSphcDsKKwl1MzIJCQluY2NpOworCWF0b21pY190CQlkYXRhaGFuZGxlOworCWF0b21pY190CQltc2dpZDsKIAotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IHR0eV9wb3J0IHBvcnQ7CiAJaW50ICAgICAgICAgICAgICAgIHR0eWluc3RvcDsKIAlpbnQgICAgICAgICAgICAgICAgdHR5b3V0c3RvcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAgICAqdHR5c2tiOwotCWF0b21pY190ICAgICAgICAgICB0dHlvcGVuY291bnQ7CiAKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGlucXVldWU7Ci0JaW50ICAgICAgICAgICAgICAgICBpbmJ5dGVzOwotCXN0cnVjdCBza19idWZmX2hlYWQgb3V0cXVldWU7Ci0JaW50ICAgICAgICAgICAgICAgICBvdXRieXRlczsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWlucXVldWU7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCW91dHF1ZXVlOworCWludAkJCW91dGJ5dGVzOworCXN0cnVjdCBza19idWZmCQkqb3V0c2tiOworCXNwaW5sb2NrX3QJCW91dGxvY2s7CiAKIAkvKiB0cmFuc21pdCBwYXRoICovCiAJc3RydWN0IGxpc3RfaGVhZCBhY2txdWV1ZTsKIAlpbnQgbmFjazsKIAlzcGlubG9ja190IGFja3Fsb2NrOwogfTsKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KLQotLyogRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9jayBpcyBhIHNsZWRnZWhhbW1lci13b3JrYXJvdW5kIHRvIGEKLSAqIGxvY2tpbmcgaXNzdWUgd2l0aCB0aGUgY2FwaW1pbm9yIChhbmQgbWF5YmUgb3RoZXIpIGRhdGEgc3RydWN0dXJlKHMpLgotICogQWNjZXNzIHRvIHRoaXMgZGF0YSBpcyBkb25lIGluIGEgcmFjeSB3YXkgYW5kIGNyYXNoZXMgdGhlIG1hY2hpbmUgd2l0aAotICogYSBGcml0ekNhcmQgRFNMIGRyaXZlcjsgc29vbmVyIG9yIGxhdGVyLiBUaGlzIGlzIGEgd29ya2Fyb3VuZAotICogd2hpY2ggdHJhZGVzIHNjYWxhYmlsaXR5IHZzIHN0YWJpbGl0eSwgc28gaXQgZG9lc24ndCBjcmFzaCB0aGUga2VybmVsIGFueW1vcmUuCi0gKiBUaGUgY29ycmVjdCAoYW5kIHNjYWxhYmxlKSBmaXggZm9yIHRoZSBpc3N1ZSBzZWVtcyB0byByZXF1aXJlCi0gKiBhbiBBUEkgY2hhbmdlIHRvIHRoZSBkcml2ZXJzLi4uIC4gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sod29ya2Fyb3VuZF9sb2NrKTsKIAogc3RydWN0IGNhcGluY2NpIHsKLQlzdHJ1Y3QgY2FwaW5jY2kgKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXUzMgkJIG5jY2k7CiAJc3RydWN0IGNhcGlkZXYJKmNkZXY7CiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCkBAIC0xNDYsMjggKzEyNywyOCBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgcmVjdnF1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IHJlY3Z3YWl0OwogCi0Jc3RydWN0IGNhcGluY2NpICpuY2NpczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5jY2lzOwogCi0Jc3RydWN0IG11dGV4IG5jY2lfbGlzdF9tdHg7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiAvKiAtLS0tLS0tLSBnbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIERFRklORV9SV0xPQ0soY2FwaWRldl9saXN0X2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChjYXBpZGV2X2xpc3RfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGNhcGlkZXZfbGlzdCk7CiAKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLXN0YXRpYyBERUZJTkVfUldMT0NLKGNhcGltaW5vcl9saXN0X2xvY2spOwotc3RhdGljIExJU1RfSEVBRChjYXBpbWlub3JfbGlzdCk7Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FwaW1pbm9yc19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgY2FwaW1pbm9yICoqY2FwaW1pbm9yczsKKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpjYXBpbmNfdHR5X2RyaXZlcjsKKwogLyogLS0tLS0tLS0gZGF0YWhhbmRsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgY2FwaW5jY2lfYWRkX2FjayhzdHJ1Y3QgY2FwaW1pbm9yICptcCwgdTE2IGRhdGFoYW5kbGUpCitzdGF0aWMgaW50IGNhcGltaW5vcl9hZGRfYWNrKHN0cnVjdCBjYXBpbWlub3IgKm1wLCB1MTYgZGF0YWhhbmRsZSkKIHsKLQlzdHJ1Y3QgZGF0YWhhbmRsZV9xdWV1ZSAqbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhY2txdWV1ZV9lbnRyeSAqbjsKIAogCW4gPSBrbWFsbG9jKHNpemVvZigqbiksIEdGUF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghbikpIHsKQEAgLTE3NiwyNTMgKzE1NywyNDYgQEAKIAl9CiAJbi0+ZGF0YWhhbmRsZSA9IGRhdGFoYW5kbGU7CiAJSU5JVF9MSVNUX0hFQUQoJm4tPmxpc3QpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+YWNrcWxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfYmgoJm1wLT5hY2txbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmbi0+bGlzdCwgJm1wLT5hY2txdWV1ZSk7CiAJbXAtPm5hY2srKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+YWNrcWxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19iaCgmbXAtPmFja3Fsb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjYXBpbWlub3JfZGVsX2FjayhzdHJ1Y3QgY2FwaW1pbm9yICptcCwgdTE2IGRhdGFoYW5kbGUpCiB7Ci0Jc3RydWN0IGRhdGFoYW5kbGVfcXVldWUgKnAsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWNrcXVldWVfZW50cnkgKnAsICp0bXA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmFja3Fsb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZtcC0+YWNrcWxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZtcC0+YWNrcXVldWUsIGxpc3QpIHsKICAJCWlmIChwLT5kYXRhaGFuZGxlID09IGRhdGFoYW5kbGUpIHsKIAkJCWxpc3RfZGVsKCZwLT5saXN0KTsKLQkJCWtmcmVlKHApOwogCQkJbXAtPm5hY2stLTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5hY2txbG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfYmgoJm1wLT5hY2txbG9jayk7CisJCQlrZnJlZShwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5hY2txbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2JoKCZtcC0+YWNrcWxvY2spOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW1pbm9yX2RlbF9hbGxfYWNrKHN0cnVjdCBjYXBpbWlub3IgKm1wKQogewotCXN0cnVjdCBkYXRhaGFuZGxlX3F1ZXVlICpwLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFja3F1ZXVlX2VudHJ5ICpwLCAqdG1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1wLT5hY2txbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZtcC0+YWNrcXVldWUsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnAtPmxpc3QpOwogCQlrZnJlZShwKTsKIAkJbXAtPm5hY2stLTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmFja3Fsb2NrLCBmbGFncyk7CiB9CiAKIAogLyogLS0tLS0tLS0gc3RydWN0IGNhcGltaW5vciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBjYXBpbWlub3JfcG9ydF9vcHM7IC8qIHdlIGhhdmUgbm9uZSAqLworCiBzdGF0aWMgc3RydWN0IGNhcGltaW5vciAqY2FwaW1pbm9yX2FsbG9jKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsIHUzMiBuY2NpKQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wLCAqcDsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNhcGltaW5vciAqbXA7CisJc3RydWN0IGRldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBtaW5vcjsKIAotCW1wID0ga3phbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0FUT01JQyk7CisJbXAgPSBremFsbG9jKHNpemVvZigqbXApLCBHRlBfS0VSTkVMKTsKICAgCWlmICghbXApIHsKICAgCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IGNhbid0IGFsbG9jIGNhcGltaW5vclxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAorCWtyZWZfaW5pdCgmbXAtPmtyZWYpOworCiAJbXAtPmFwID0gYXA7CiAJbXAtPm5jY2kgPSBuY2NpOwotCW1wLT5tc2dpZCA9IDA7Ci0JYXRvbWljX3NldCgmbXAtPnR0eW9wZW5jb3VudCwwKTsKIAlJTklUX0xJU1RfSEVBRCgmbXAtPmFja3F1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmbXAtPmFja3Fsb2NrKTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm1wLT5pbnF1ZXVlKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZtcC0+b3V0cXVldWUpOworCXNwaW5fbG9ja19pbml0KCZtcC0+b3V0bG9jayk7CiAKLQkvKiBBbGxvY2F0ZSB0aGUgbGVhc3QgdW51c2VkIG1pbm9yIG51bWJlci4KLQkgKi8KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmY2FwaW1pbm9yX2xpc3QpKQotCQlsaXN0X2FkZCgmbXAtPmxpc3QsICZjYXBpbWlub3JfbGlzdCk7Ci0JZWxzZSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNhcGltaW5vcl9saXN0LCBsaXN0KSB7Ci0JCQlpZiAocC0+bWlub3IgPiBtaW5vcikKLQkJCQlicmVhazsKLQkJCW1pbm9yKys7Ci0JCX0KLQkJCi0JCWlmIChtaW5vciA8IGNhcGlfdHR5bWlub3JzKSB7Ci0JCQltcC0+bWlub3IgPSBtaW5vcjsKLQkJCWxpc3RfYWRkKCZtcC0+bGlzdCwgcC0+bGlzdC5wcmV2KTsKLQkJfQotCX0KLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKKwl0dHlfcG9ydF9pbml0KCZtcC0+cG9ydCk7CisJbXAtPnBvcnQub3BzID0gJmNhcGltaW5vcl9wb3J0X29wczsKIAotCWlmICghKG1pbm9yIDwgY2FwaV90dHltaW5vcnMpKSB7CisJLyogQWxsb2NhdGUgdGhlIGxlYXN0IHVudXNlZCBtaW5vciBudW1iZXIuICovCisJc3Bpbl9sb2NrKCZjYXBpbWlub3JzX2xvY2spOworCWZvciAobWlub3IgPSAwOyBtaW5vciA8IGNhcGlfdHR5bWlub3JzOyBtaW5vcisrKQorCQlpZiAoIWNhcGltaW5vcnNbbWlub3JdKSB7CisJCQljYXBpbWlub3JzW21pbm9yXSA9IG1wOworCQkJYnJlYWs7CisJCX0KKwlzcGluX3VubG9jaygmY2FwaW1pbm9yc19sb2NrKTsKKworCWlmIChtaW5vciA9PSBjYXBpX3R0eW1pbm9ycykgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgImNhcGk6IG91dCBvZiBtaW5vcnNcbiIpOwotCQkJa2ZyZWUobXApOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJfb3V0MTsKIAl9CiAKKwltcC0+bWlub3IgPSBtaW5vcjsKKworCWRldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UoY2FwaW5jX3R0eV9kcml2ZXIsIG1pbm9yLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRldikpCisJCWdvdG8gZXJyX291dDI7CisKIAlyZXR1cm4gbXA7CisKK2Vycl9vdXQyOgorCXNwaW5fbG9jaygmY2FwaW1pbm9yc19sb2NrKTsKKwljYXBpbWlub3JzW21pbm9yXSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmNhcGltaW5vcnNfbG9jayk7CisKK2Vycl9vdXQxOgorCWtmcmVlKG1wKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgY2FwaW1pbm9yX2ZyZWUoc3RydWN0IGNhcGltaW5vciAqbXApCitzdGF0aWMgdm9pZCBjYXBpbWlub3JfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjYXBpbWlub3IsIGtyZWYpOwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpbWlub3JfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJm1wLT5saXN0KTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaW1pbm9yX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWVfc2tiKG1wLT50dHlza2IpOwotCW1wLT50dHlza2IgPSBOVUxMOworCWtmcmVlX3NrYihtcC0+b3V0c2tiKTsKIAlza2JfcXVldWVfcHVyZ2UoJm1wLT5pbnF1ZXVlKTsKIAlza2JfcXVldWVfcHVyZ2UoJm1wLT5vdXRxdWV1ZSk7CiAJY2FwaW1pbm9yX2RlbF9hbGxfYWNrKG1wKTsKIAlrZnJlZShtcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2FwaW1pbm9yICpjYXBpbWlub3JfZmluZCh1bnNpZ25lZCBpbnQgbWlub3IpCitzdGF0aWMgc3RydWN0IGNhcGltaW5vciAqY2FwaW1pbm9yX2dldCh1bnNpZ25lZCBpbnQgbWlub3IpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbDsKLQlzdHJ1Y3QgY2FwaW1pbm9yICpwID0gTlVMTDsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKIAotCXJlYWRfbG9jaygmY2FwaW1pbm9yX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaChsLCAmY2FwaW1pbm9yX2xpc3QpIHsKLQkJcCA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNhcGltaW5vciwgbGlzdCk7Ci0JCWlmIChwLT5taW5vciA9PSBtaW5vcikKLQkJCWJyZWFrOwotCX0KLQlyZWFkX3VubG9jaygmY2FwaW1pbm9yX2xpc3RfbG9jayk7Ci0JaWYgKGwgPT0gJmNhcGltaW5vcl9saXN0KQotCQlyZXR1cm4gTlVMTDsKKwlzcGluX2xvY2soJmNhcGltaW5vcnNfbG9jayk7CisJbXAgPSBjYXBpbWlub3JzW21pbm9yXTsKKwlpZiAobXApCisJCWtyZWZfZ2V0KCZtcC0+a3JlZik7CisJc3Bpbl91bmxvY2soJmNhcGltaW5vcnNfbG9jayk7CiAKLQlyZXR1cm4gcDsKKwlyZXR1cm4gbXA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbWlub3JfcHV0KHN0cnVjdCBjYXBpbWlub3IgKm1wKQoreworCWtyZWZfcHV0KCZtcC0+a3JlZiwgY2FwaW1pbm9yX2Rlc3Ryb3kpOworfQorCitzdGF0aWMgdm9pZCBjYXBpbWlub3JfZnJlZShzdHJ1Y3QgY2FwaW1pbm9yICptcCkKK3sKKwl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoY2FwaW5jX3R0eV9kcml2ZXIsIG1wLT5taW5vcik7CisKKwlzcGluX2xvY2soJmNhcGltaW5vcnNfbG9jayk7CisJY2FwaW1pbm9yc1ttcC0+bWlub3JdID0gTlVMTDsKKwlzcGluX3VubG9jaygmY2FwaW1pbm9yc19sb2NrKTsKKworCWNhcGltaW5vcl9wdXQobXApOworfQogCiAvKiAtLS0tLS0tLSBzdHJ1Y3QgY2FwaW5jY2kgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHZvaWQgY2FwaW5jY2lfYWxsb2NfbWlub3Ioc3RydWN0IGNhcGlkZXYgKmNkZXYsIHN0cnVjdCBjYXBpbmNjaSAqbnApCit7CisJc3RydWN0IGNhcGltaW5vciAqbXA7CisJZGV2X3QgZGV2aWNlOworCisJaWYgKCEoY2Rldi0+dXNlcmZsYWdzICYgQ0FQSUZMQUdfSElHSEpBQ0tJTkcpKQorCQlyZXR1cm47CisKKwltcCA9IG5wLT5taW5vcnAgPSBjYXBpbWlub3JfYWxsb2MoJmNkZXYtPmFwLCBucC0+bmNjaSk7CisJaWYgKG1wKSB7CisJCWRldmljZSA9IE1LREVWKGNhcGluY190dHlfZHJpdmVyLT5tYWpvciwgbXAtPm1pbm9yKTsKKwkJbXAtPmNhcGlmc19kZW50cnkgPSBjYXBpZnNfbmV3X25jY2kobXAtPm1pbm9yLCBkZXZpY2UpOworCX0KK30KKworc3RhdGljIHZvaWQgY2FwaW5jY2lfZnJlZV9taW5vcihzdHJ1Y3QgY2FwaW5jY2kgKm5wKQoreworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gbnAtPm1pbm9ycDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJaWYgKG1wKSB7CisJCWNhcGlmc19mcmVlX25jY2kobXAtPmNhcGlmc19kZW50cnkpOworCisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJm1wLT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X3ZoYW5ndXAodHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKKwkJY2FwaW1pbm9yX2ZyZWUobXApOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FwaW5jY2lfbWlub3Jfb3BlbmNvdW50KHN0cnVjdCBjYXBpbmNjaSAqbnApCit7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSBucC0+bWlub3JwOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmIChtcCkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWNvdW50ID0gdHR5LT5jb3VudDsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2NhcGluY2NpX2FsbG9jX21pbm9yKHN0cnVjdCBjYXBpZGV2ICpjZGV2LCBzdHJ1Y3QgY2FwaW5jY2kgKm5wKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbmNjaV9mcmVlX21pbm9yKHN0cnVjdCBjYXBpbmNjaSAqbnApIHsgfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYXBpbmNjaV9taW5vcl9vcGVuY291bnQoc3RydWN0IGNhcGluY2NpICpucCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwogc3RhdGljIHN0cnVjdCBjYXBpbmNjaSAqY2FwaW5jY2lfYWxsb2Moc3RydWN0IGNhcGlkZXYgKmNkZXYsIHUzMiBuY2NpKQogewotCXN0cnVjdCBjYXBpbmNjaSAqbnAsICoqcHA7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSBOVUxMOwotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCXN0cnVjdCBjYXBpbmNjaSAqbnA7CiAKLQlucCA9IGt6YWxsb2Moc2l6ZW9mKCpucCksIEdGUF9BVE9NSUMpOworCW5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFucCkKIAkJcmV0dXJuIE5VTEw7CiAJbnAtPm5jY2kgPSBuY2NpOwogCW5wLT5jZGV2ID0gY2RldjsKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLQltcCA9IE5VTEw7Ci0JaWYgKGNkZXYtPnVzZXJmbGFncyAmIENBUElGTEFHX0hJR0hKQUNLSU5HKQotCQltcCA9IG5wLT5taW5vcnAgPSBjYXBpbWlub3JfYWxsb2MoJmNkZXYtPmFwLCBuY2NpKTsKLQlpZiAobXApIHsKLQkJbXAtPm5jY2lwID0gbnA7Ci0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JCXByaW50ayhLRVJOX0RFQlVHICJzZXQgbXAtPm5jY2lwXG4iKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQotCQljYXBpZnNfbmV3X25jY2kobXAtPm1pbm9yLCBNS0RFVihjYXBpX3R0eW1ham9yLCBtcC0+bWlub3IpKTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KLQlmb3IgKHBwPSZjZGV2LT5uY2NpczsgKnBwOyBwcCA9ICYoKnBwKS0+bmV4dCkKLQkJOwotCSpwcCA9IG5wOwotICAgICAgICByZXR1cm4gbnA7CisKKwljYXBpbmNjaV9hbGxvY19taW5vcihjZGV2LCBucCk7CisKKwlsaXN0X2FkZF90YWlsKCZucC0+bGlzdCwgJmNkZXYtPm5jY2lzKTsKKworCXJldHVybiBucDsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jY2lfZnJlZShzdHJ1Y3QgY2FwaWRldiAqY2RldiwgdTMyIG5jY2kpCiB7Ci0Jc3RydWN0IGNhcGluY2NpICpucCwgKipwcDsKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwlzdHJ1Y3QgY2FwaW5jY2kgKm5wLCAqdG1wOwogCi0JcHA9JmNkZXYtPm5jY2lzOwotCXdoaWxlICgqcHApIHsKLQkJbnAgPSAqcHA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5wLCB0bXAsICZjZGV2LT5uY2NpcywgbGlzdCkKIAkJaWYgKG5jY2kgPT0gMHhmZmZmZmZmZiB8fCBucC0+bmNjaSA9PSBuY2NpKSB7Ci0JCQkqcHAgPSAoKnBwKS0+bmV4dDsKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLQkJCWlmICgobXAgPSBucC0+bWlub3JwKSAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGUykgfHwgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGU19NT0RVTEUpCi0JCQkJY2FwaWZzX2ZyZWVfbmNjaShtcC0+bWlub3IpOwotI2VuZGlmCi0JCQkJaWYgKG1wLT50dHkpIHsKLQkJCQkJbXAtPm5jY2lwID0gTlVMTDsKLSNpZmRlZiBfREVCVUdfUkVGQ09VTlQKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInJlc2V0IG1wLT5uY2NpcFxuIik7Ci0jZW5kaWYKLQkJCQkJdHR5X2hhbmd1cChtcC0+dHR5KTsKLQkJCQl9IGVsc2UgewotCQkJCQljYXBpbWlub3JfZnJlZShtcCk7Ci0JCQkJfQotCQkJfQotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCQkJY2FwaW5jY2lfZnJlZV9taW5vcihucCk7CisJCQlsaXN0X2RlbCgmbnAtPmxpc3QpOwogCQkJa2ZyZWUobnApOwotCQkJaWYgKCpwcCA9PSBOVUxMKSByZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQlwcCA9ICYoKnBwKS0+bmV4dDsKIAkJfQotCX0KIH0KIAogc3RhdGljIHN0cnVjdCBjYXBpbmNjaSAqY2FwaW5jY2lfZmluZChzdHJ1Y3QgY2FwaWRldiAqY2RldiwgdTMyIG5jY2kpCiB7Ci0Jc3RydWN0IGNhcGluY2NpICpwOworCXN0cnVjdCBjYXBpbmNjaSAqbnA7CiAKLQlmb3IgKHA9Y2Rldi0+bmNjaXM7IHAgOyBwID0gcC0+bmV4dCkgewotCQlpZiAocC0+bmNjaSA9PSBuY2NpKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBwOwotfQotCi0vKiAtLS0tLS0tLSBzdHJ1Y3QgY2FwaWRldiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBjYXBpZGV2ICpjYXBpZGV2X2FsbG9jKHZvaWQpCi17Ci0Jc3RydWN0IGNhcGlkZXYgKmNkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWNkZXYgPSBremFsbG9jKHNpemVvZigqY2RldiksIEdGUF9LRVJORUwpOwotCWlmICghY2RldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQltdXRleF9pbml0KCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZjZGV2LT5yZWN2cXVldWUpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNkZXYtPnJlY3Z3YWl0KTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcGlkZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmY2Rldi0+bGlzdCwgJmNhcGlkZXZfbGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlkZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIHJldHVybiBjZGV2OwotfQotCi1zdGF0aWMgdm9pZCBjYXBpZGV2X2ZyZWUoc3RydWN0IGNhcGlkZXYgKmNkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChjZGV2LT5hcC5hcHBsaWQpIHsKLQkJY2FwaTIwX3JlbGVhc2UoJmNkZXYtPmFwKTsKLQkJY2Rldi0+YXAuYXBwbGlkID0gMDsKLQl9Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZjZGV2LT5yZWN2cXVldWUpOwotCi0JbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JY2FwaW5jY2lfZnJlZShjZGV2LCAweGZmZmZmZmZmKTsKLQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZjZGV2LT5saXN0KTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaWRldl9saXN0X2xvY2ssIGZsYWdzKTsKLQlrZnJlZShjZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5wLCAmY2Rldi0+bmNjaXMsIGxpc3QpCisJCWlmIChucC0+bmNjaSA9PSBuY2NpKQorCQkJcmV0dXJuIG5wOworCXJldHVybiBOVUxMOwogfQogCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCkBAIC00MzIsNyArNDA2LDcgQEAKIGdlbl9kYXRhX2IzX3Jlc3BfZm9yKHN0cnVjdCBjYXBpbWlub3IgKm1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpuc2tiOwotCW5za2IgPSBhbGxvY19za2IoQ0FQSV9EQVRBX0IzX1JFU1BfTEVOLCBHRlBfQVRPTUlDKTsKKwluc2tiID0gYWxsb2Nfc2tiKENBUElfREFUQV9CM19SRVNQX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5za2IpIHsKIAkJdTE2IGRhdGFoYW5kbGUgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsQ0FQSU1TR19CQVNFTEVOKzQrNCsyKTsKIAkJdW5zaWduZWQgY2hhciAqcyA9IHNrYl9wdXQobnNrYiwgQ0FQSV9EQVRBX0IzX1JFU1BfTEVOKTsKQEAgLTQ0MCw3ICs0MTQsNyBAQAogCQljYXBpbXNnX3NldHUxNihzLCAyLCBtcC0+YXAtPmFwcGxpZCk7CiAJCWNhcGltc2dfc2V0dTggKHMsIDQsIENBUElfREFUQV9CMyk7CiAJCWNhcGltc2dfc2V0dTggKHMsIDUsIENBUElfUkVTUCk7Ci0JCWNhcGltc2dfc2V0dTE2KHMsIDYsIG1wLT5tc2dpZCsrKTsKKwkJY2FwaW1zZ19zZXR1MTYocywgNiwgYXRvbWljX2luY19yZXR1cm4oJm1wLT5tc2dpZCkpOwogCQljYXBpbXNnX3NldHUzMihzLCA4LCBtcC0+bmNjaSk7CiAJCWNhcGltc2dfc2V0dTE2KHMsIDEyLCBkYXRhaGFuZGxlKTsKIAl9CkBAIC00NDksMTIyICs0MjMsMTU2IEBACiAKIHN0YXRpYyBpbnQgaGFuZGxlX3JlY3Zfc2tiKHN0cnVjdCBjYXBpbWlub3IgKm1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXVuc2lnbmVkIGludCBkYXRhbGVuID0gc2tiLT5sZW4gLSBDQVBJTVNHX0xFTihza2ItPmRhdGEpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0JaW50IGRhdGFsZW47CiAJdTE2IGVycmNvZGUsIGRhdGFoYW5kbGU7CiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7Ci0JCi0JZGF0YWxlbiA9IHNrYi0+bGVuIC0gQ0FQSU1TR19MRU4oc2tiLT5kYXRhKTsKLQlpZiAobXAtPnR0eSA9PSBOVUxMKQotCXsKKwlpbnQgcmV0ID0gLTE7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CisJaWYgKCF0dHkpIHsKICNpZmRlZiBfREVCVUdfREFUQUZMT1cKIAkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IGN1cnJlbnRseSBubyByZWNlaXZlclxuIik7CiAjZW5kaWYKIAkJcmV0dXJuIC0xOwogCX0KIAkKLQlsZCA9IHR0eV9sZGlzY19yZWYobXAtPnR0eSk7Ci0JaWYgKGxkID09IE5VTEwpCi0JCXJldHVybiAtMTsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAoIWxkKSB7CisJCS8qIGZhdGFsIGVycm9yLCBkbyBub3QgcmVxdWV1ZSAqLworCQlyZXQgPSAwOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBkZXJlZl90dHk7CisJfQorCiAJaWYgKGxkLT5vcHMtPnJlY2VpdmVfYnVmID09IE5VTEwpIHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBsZGlzYyBoYXMgbm8gcmVjZWl2ZV9idWYgZnVuY3Rpb25cbiIpOwogI2VuZGlmCi0JCWdvdG8gYmFkOworCQkvKiBmYXRhbCBlcnJvciwgZG8gbm90IHJlcXVldWUgKi8KKwkJZ290byBmcmVlX3NrYjsKIAl9CiAJaWYgKG1wLT50dHlpbnN0b3ApIHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiByZWN2IHR0eSB0aHJvdHRsZWRcbiIpOwogI2VuZGlmCi0JCWdvdG8gYmFkOworCQlnb3RvIGRlcmVmX2xkaXNjOwogCX0KLQlpZiAobXAtPnR0eS0+cmVjZWl2ZV9yb29tIDwgZGF0YWxlbikgeworCisJaWYgKHR0eS0+cmVjZWl2ZV9yb29tIDwgZGF0YWxlbikgewogI2lmIGRlZmluZWQoX0RFQlVHX0RBVEFGTE9XKSB8fCBkZWZpbmVkKF9ERUJVR19UVFlGVU5DUykKIAkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IG5vIHJvb20gaW4gdHR5XG4iKTsKICNlbmRpZgotCQlnb3RvIGJhZDsKKwkJZ290byBkZXJlZl9sZGlzYzsKIAl9Ci0JaWYgKChuc2tiID0gZ2VuX2RhdGFfYjNfcmVzcF9mb3IobXAsIHNrYikpID09IE5VTEwpIHsKKworCW5za2IgPSBnZW5fZGF0YV9iM19yZXNwX2ZvcihtcCwgc2tiKTsKKwlpZiAoIW5za2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBnZW5fZGF0YV9iM19yZXNwIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOworCQlnb3RvIGRlcmVmX2xkaXNjOwogCX0KLQlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLENBUElNU0dfQkFTRUxFTis0KTsKKworCWRhdGFoYW5kbGUgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElNU0dfQkFTRUxFTiArIDQpOworCiAJZXJyY29kZSA9IGNhcGkyMF9wdXRfbWVzc2FnZShtcC0+YXAsIG5za2IpOwotCWlmIChlcnJjb2RlICE9IENBUElfTk9FUlJPUikgeworCisJaWYgKGVycmNvZGUgPT0gQ0FQSV9OT0VSUk9SKSB7CisJCXNrYl9wdWxsKHNrYiwgQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7CisjaWZkZWYgX0RFQlVHX0RBVEFGTE9XCisJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBEQVRBX0IzX1JFU1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAorCQkJCQlkYXRhaGFuZGxlLCBza2ItPmxlbik7CisjZW5kaWYKKwkJbGQtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKwl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IHNlbmQgREFUQV9CM19SRVNQIGZhaWxlZD0leFxuIiwKIAkJCQllcnJjb2RlKTsKIAkJa2ZyZWVfc2tiKG5za2IpOwotCQlnb3RvIGJhZDsKKworCQlpZiAoZXJyY29kZSA9PSBDQVBJX1NFTkRRVUVVRUZVTEwpCisJCQlnb3RvIGRlcmVmX2xkaXNjOwogCX0KLQkodm9pZClza2JfcHVsbChza2IsIENBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBEQVRBX0IzX1JFU1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAotCQkJCWRhdGFoYW5kbGUsIHNrYi0+bGVuKTsKLSNlbmRpZgotCWxkLT5vcHMtPnJlY2VpdmVfYnVmKG1wLT50dHksIHNrYi0+ZGF0YSwgTlVMTCwgc2tiLT5sZW4pOworCitmcmVlX3NrYjoKKwlyZXQgPSAwOwogCWtmcmVlX3NrYihza2IpOworCitkZXJlZl9sZGlzYzoKIAl0dHlfbGRpc2NfZGVyZWYobGQpOwotCXJldHVybiAwOwotYmFkOgotCXR0eV9sZGlzY19kZXJlZihsZCk7Ci0JcmV0dXJuIC0xOworCitkZXJlZl90dHk6CisJdHR5X2tyZWZfcHV0KHR0eSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX21pbm9yX3JlY3Yoc3RydWN0IGNhcGltaW5vciAqbXApCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZtcC0+aW5xdWV1ZSkpICE9IE5VTEwpIHsKLQkJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwotCQltcC0+aW5ieXRlcyAtPSBsZW47CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZtcC0+aW5xdWV1ZSkpICE9IE5VTEwpCiAJCWlmIChoYW5kbGVfcmVjdl9za2IobXAsIHNrYikgPCAwKSB7CiAJCQlza2JfcXVldWVfaGVhZCgmbXAtPmlucXVldWUsIHNrYik7Ci0JCQltcC0+aW5ieXRlcyArPSBsZW47CiAJCQlyZXR1cm47CiAJCX0KLQl9CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX21pbm9yX3NlbmQoc3RydWN0IGNhcGltaW5vciAqbXApCitzdGF0aWMgdm9pZCBoYW5kbGVfbWlub3Jfc2VuZChzdHJ1Y3QgY2FwaW1pbm9yICptcCkKIHsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGxlbjsKLQlpbnQgY291bnQgPSAwOwogCXUxNiBlcnJjb2RlOwogCXUxNiBkYXRhaGFuZGxlOwogCi0JaWYgKG1wLT50dHkgJiYgbXAtPnR0eW91dHN0b3ApIHsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCWlmIChtcC0+dHR5b3V0c3RvcCkgewogI2lmIGRlZmluZWQoX0RFQlVHX0RBVEFGTE9XKSB8fCBkZWZpbmVkKF9ERUJVR19UVFlGVU5DUykKIAkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IHNlbmQ6IHR0eSBzdG9wcGVkXG4iKTsKICNlbmRpZgotCQlyZXR1cm4gMDsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCXJldHVybjsKIAl9CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZtcC0+b3V0cXVldWUpKSAhPSBOVUxMKSB7Ci0JCWRhdGFoYW5kbGUgPSBtcC0+ZGF0YWhhbmRsZTsKKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmbXAtPm91dHF1ZXVlKTsKKwkJaWYgKCFza2IpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisJCQlicmVhazsKKwkJfQogCQlsZW4gPSAodTE2KXNrYi0+bGVuOworCQltcC0+b3V0Ynl0ZXMgLT0gbGVuOworCQlzcGluX3VubG9ja19iaCgmbXAtPm91dGxvY2spOworCisJCWRhdGFoYW5kbGUgPSBhdG9taWNfaW5jX3JldHVybigmbXAtPmRhdGFoYW5kbGUpOwogCQlza2JfcHVzaChza2IsIENBUElfREFUQV9CM19SRVFfTEVOKTsKIAkJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgQ0FQSV9EQVRBX0IzX1JFUV9MRU4pOwogCQljYXBpbXNnX3NldHUxNihza2ItPmRhdGEsIDAsIENBUElfREFUQV9CM19SRVFfTEVOKTsKIAkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCAyLCBtcC0+YXAtPmFwcGxpZCk7CiAJCWNhcGltc2dfc2V0dTggKHNrYi0+ZGF0YSwgNCwgQ0FQSV9EQVRBX0IzKTsKIAkJY2FwaW1zZ19zZXR1OCAoc2tiLT5kYXRhLCA1LCBDQVBJX1JFUSk7Ci0JCWNhcGltc2dfc2V0dTE2KHNrYi0+ZGF0YSwgNiwgbXAtPm1zZ2lkKyspOworCQljYXBpbXNnX3NldHUxNihza2ItPmRhdGEsIDYsIGF0b21pY19pbmNfcmV0dXJuKCZtcC0+bXNnaWQpKTsKIAkJY2FwaW1zZ19zZXR1MzIoc2tiLT5kYXRhLCA4LCBtcC0+bmNjaSk7CS8qIE5DQ0kgKi8KIAkJY2FwaW1zZ19zZXR1MzIoc2tiLT5kYXRhLCAxMiwgKHUzMikobG9uZylza2ItPmRhdGEpOy8qIERhdGEzMiAqLwogCQljYXBpbXNnX3NldHUxNihza2ItPmRhdGEsIDE2LCBsZW4pOwkvKiBEYXRhIGxlbmd0aCAqLwogCQljYXBpbXNnX3NldHUxNihza2ItPmRhdGEsIDE4LCBkYXRhaGFuZGxlKTsKIAkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCAyMCwgMCk7CS8qIEZsYWdzICovCiAKLQkJaWYgKGNhcGluY2NpX2FkZF9hY2sobXAsIGRhdGFoYW5kbGUpIDwgMCkgeworCQlpZiAoY2FwaW1pbm9yX2FkZF9hY2sobXAsIGRhdGFoYW5kbGUpIDwgMCkgewogCQkJc2tiX3B1bGwoc2tiLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7Ci0JCQlza2JfcXVldWVfaGVhZCgmbXAtPm91dHF1ZXVlLCBza2IpOwotCQkJcmV0dXJuIGNvdW50OworCisJCQlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKwkJCW1wLT5vdXRieXRlcyArPSBsZW47CisJCQlzcGluX3VubG9ja19iaCgmbXAtPm91dGxvY2spOworCisJCQlicmVhazsKIAkJfQogCQllcnJjb2RlID0gY2FwaTIwX3B1dF9tZXNzYWdlKG1wLT5hcCwgc2tiKTsKIAkJaWYgKGVycmNvZGUgPT0gQ0FQSV9OT0VSUk9SKSB7Ci0JCQltcC0+ZGF0YWhhbmRsZSsrOwotCQkJY291bnQrKzsKLQkJCW1wLT5vdXRieXRlcyAtPSBsZW47CiAjaWZkZWYgX0RFQlVHX0RBVEFGTE9XCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogREFUQV9CM19SRVEgJXUgbGVuPSV1XG4iLAogCQkJCQkJCWRhdGFoYW5kbGUsIGxlbik7CkBAIC01NzUsMTYgKzU4MywyMCBAQAogCiAJCWlmIChlcnJjb2RlID09IENBUElfU0VORFFVRVVFRlVMTCkgewogCQkJc2tiX3B1bGwoc2tiLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7Ci0JCQlza2JfcXVldWVfaGVhZCgmbXAtPm91dHF1ZXVlLCBza2IpOworCisJCQlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKwkJCW1wLT5vdXRieXRlcyArPSBsZW47CisJCQlzcGluX3VubG9ja19iaCgmbXAtPm91dGxvY2spOworCiAJCQlicmVhazsKIAkJfQogCiAJCS8qIHVwcywgZHJvcCBwYWNrZXQgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBwdXRfbWVzc2FnZSA9ICV4XG4iLCBlcnJjb2RlKTsKLQkJbXAtPm91dGJ5dGVzIC09IGxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQotCXJldHVybiBjb3VudDsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwpAQCAtNTk0LDY1ICs2MDYsNTYgQEAKIHsKIAlzdHJ1Y3QgY2FwaWRldiAqY2RldiA9IGFwLT5wcml2YXRlOwogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQorCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGNhcGltaW5vciAqbXA7CiAJdTE2IGRhdGFoYW5kbGU7CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAJc3RydWN0IGNhcGluY2NpICpucDsKLQl1MzIgbmNjaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmY2Rldi0+bG9jayk7CiAKIAlpZiAoQ0FQSU1TR19DTUQoc2tiLT5kYXRhKSA9PSBDQVBJX0NPTk5FQ1RfQjNfQ09ORikgewogCQl1MTYgaW5mbyA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgMTIpOyAvLyBJbmZvIGZpZWxkCi0JCWlmICgoaW5mbyAmIDB4ZmYwMCkgPT0gMCkgewotCQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CisJCWlmICgoaW5mbyAmIDB4ZmYwMCkgPT0gMCkKIAkJCWNhcGluY2NpX2FsbG9jKGNkZXYsIENBUElNU0dfTkNDSShza2ItPmRhdGEpKTsKLQkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCX0KIAl9Ci0JaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05ORUNUX0IzX0lORCkgewotCQltdXRleF9sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKKwlpZiAoQ0FQSU1TR19DTUQoc2tiLT5kYXRhKSA9PSBDQVBJX0NPTk5FQ1RfQjNfSU5EKQogCQljYXBpbmNjaV9hbGxvYyhjZGV2LCBDQVBJTVNHX05DQ0koc2tiLT5kYXRhKSk7Ci0JCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKKwogCWlmIChDQVBJTVNHX0NPTU1BTkQoc2tiLT5kYXRhKSAhPSBDQVBJX0RBVEFfQjMpIHsKIAkJc2tiX3F1ZXVlX3RhaWwoJmNkZXYtPnJlY3ZxdWV1ZSwgc2tiKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjZGV2LT5yZWN2d2FpdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrX291dDsKIAl9Ci0JbmNjaSA9IENBUElNU0dfQ09OVFJPTChza2ItPmRhdGEpOwotCWZvciAobnAgPSBjZGV2LT5uY2NpczsgbnAgJiYgbnAtPm5jY2kgIT0gbmNjaTsgbnAgPSBucC0+bmV4dCkKLQkJOworCisJbnAgPSBjYXBpbmNjaV9maW5kKGNkZXYsIENBUElNU0dfQ09OVFJPTChza2ItPmRhdGEpKTsKIAlpZiAoIW5wKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBjYXBpX3NpZ25hbDogbmNjaSBub3QgZm91bmRcbiIpOwogCQlza2JfcXVldWVfdGFpbCgmY2Rldi0+cmVjdnF1ZXVlLCBza2IpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNkZXYtPnJlY3Z3YWl0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2tfb3V0OwogCX0KKwogI2lmbmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAlza2JfcXVldWVfdGFpbCgmY2Rldi0+cmVjdnF1ZXVlLCBza2IpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2Rldi0+cmVjdndhaXQpOworCiAjZWxzZSAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwogCW1wID0gbnAtPm1pbm9ycDsKIAlpZiAoIW1wKSB7CiAJCXNrYl9xdWV1ZV90YWlsKCZjZGV2LT5yZWN2cXVldWUsIHNrYik7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2Rldi0+cmVjdndhaXQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlnb3RvIHVubG9ja19vdXQ7CiAJfQotCi0KIAlpZiAoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9JTkQpIHsKLQkJCiAJCWRhdGFoYW5kbGUgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElNU0dfQkFTRUxFTis0KzQrMik7CiAjaWZkZWYgX0RFQlVHX0RBVEFGTE9XCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpX3NpZ25hbDogREFUQV9CM19JTkQgJXUgbGVuPSVkXG4iLAogCQkJCWRhdGFoYW5kbGUsIHNrYi0+bGVuLUNBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwogI2VuZGlmCiAJCXNrYl9xdWV1ZV90YWlsKCZtcC0+aW5xdWV1ZSwgc2tiKTsKLQkJbXAtPmluYnl0ZXMgKz0gc2tiLT5sZW47CisKIAkJaGFuZGxlX21pbm9yX3JlY3YobXApOwogCiAJfSBlbHNlIGlmIChDQVBJTVNHX1NVQkNPTU1BTkQoc2tiLT5kYXRhKSA9PSBDQVBJX0NPTkYpIHsKQEAgLTY2NCwxMCArNjY3LDEzIEBACiAJCQkJQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4rNCsyKSk7CiAjZW5kaWYKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCSh2b2lkKWNhcGltaW5vcl9kZWxfYWNrKG1wLCBkYXRhaGFuZGxlKTsKLQkJaWYgKG1wLT50dHkpCi0JCQl0dHlfd2FrZXVwKG1wLT50dHkpOwotCQkodm9pZCloYW5kbGVfbWlub3Jfc2VuZChtcCk7CisJCWNhcGltaW5vcl9kZWxfYWNrKG1wLCBkYXRhaGFuZGxlKTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbXAtPnBvcnQpOworCQlpZiAodHR5KSB7CisJCQl0dHlfd2FrZXVwKHR0eSk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCQloYW5kbGVfbWlub3Jfc2VuZChtcCk7CiAKIAl9IGVsc2UgewogCQkvKiB1cHMsIGxldCBjYXBpIGFwcGxpY2F0aW9uIGhhbmRsZSBpdCA6LSkgKi8KQEAgLTY3NSw3ICs2ODEsOSBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNkZXYtPnJlY3Z3YWl0KTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKIH0KIAogLyogLS0tLS0tLS0gZmlsZV9vcGVyYXRpb25zIGZvciBjYXBpZGV2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02ODYsMjQgKzY5NCwxOSBAQAogCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gKHN0cnVjdCBjYXBpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGNvcGllZDsKKwlpbnQgZXJyOwogCiAJaWYgKCFjZGV2LT5hcC5hcHBsaWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChza2IgPSBza2JfZGVxdWV1ZSgmY2Rldi0+cmVjdnF1ZXVlKSkgPT0gTlVMTCkgewotCisJc2tiID0gc2tiX2RlcXVldWUoJmNkZXYtPnJlY3ZxdWV1ZSk7CisJaWYgKCFza2IpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJZm9yICg7OykgewotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmY2Rldi0+cmVjdndhaXQpOwotCQkJaWYgKChza2IgPSBza2JfZGVxdWV1ZSgmY2Rldi0+cmVjdnF1ZXVlKSkgIT0gTlVMTCkKLQkJCQlicmVhazsKLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoc2tiID09IE5VTEwpCi0JCQlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2Rldi0+cmVjdndhaXQsCisJCQkJKHNrYiA9IHNrYl9kZXF1ZXVlKCZjZGV2LT5yZWN2cXVldWUpKSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoc2tiLT5sZW4gPiBjb3VudCkgewogCQlza2JfcXVldWVfaGVhZCgmY2Rldi0+cmVjdnF1ZXVlLCBza2IpOwpAQCAtNzUzLDkgKzc1Niw5IEBACiAJQ0FQSU1TR19TRVRBUFBJRChza2ItPmRhdGEsIGNkZXYtPmFwLmFwcGxpZCk7CiAKIAlpZiAoQ0FQSU1TR19DTUQoc2tiLT5kYXRhKSA9PSBDQVBJX0RJU0NPTk5FQ1RfQjNfUkVTUCkgewotCQltdXRleF9sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKKwkJbXV0ZXhfbG9jaygmY2Rldi0+bG9jayk7CiAJCWNhcGluY2NpX2ZyZWUoY2RldiwgQ0FQSU1TR19OQ0NJKHNrYi0+ZGF0YSkpOwotCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOworCQltdXRleF91bmxvY2soJmNkZXYtPmxvY2spOwogCX0KIAogCWNkZXYtPmVycmNvZGUgPSBjYXBpMjBfcHV0X21lc3NhZ2UoJmNkZXYtPmFwLCBza2IpOwpAQCAtNzg4LDMwICs3OTEsMzUgQEAKIAkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY2FwaWRldiAqY2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwID0gJmNkZXYtPmFwOwogCWNhcGlfaW9jdGxfc3RydWN0IGRhdGE7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ0FQSV9SRUdJU1RFUjoKLQkJewotCQkJaWYgKGFwLT5hcHBsaWQpCi0JCQkJcmV0dXJuIC1FRVhJU1Q7CisJCW11dGV4X2xvY2soJmNkZXYtPmxvY2spOwogCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmNkZXYtPmFwLnJwYXJhbSwgYXJncCwKLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCi0JCQljZGV2LT5hcC5wcml2YXRlID0gY2RldjsKLQkJCWNkZXYtPmFwLnJlY3ZfbWVzc2FnZSA9IGNhcGlfcmVjdl9tZXNzYWdlOwotCQkJY2Rldi0+ZXJyY29kZSA9IGNhcGkyMF9yZWdpc3RlcihhcCk7Ci0JCQlpZiAoY2Rldi0+ZXJyY29kZSkgewotCQkJCWFwLT5hcHBsaWQgPSAwOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQorCQlpZiAoY2Rldi0+YXAuYXBwbGlkKSB7CisJCQlyZXR2YWwgPSAtRUVYSVNUOworCQkJZ290byByZWdpc3Rlcl9vdXQ7CiAJCX0KLQkJcmV0dXJuIChpbnQpYXAtPmFwcGxpZDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjZGV2LT5hcC5ycGFyYW0sIGFyZ3AsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcykpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byByZWdpc3Rlcl9vdXQ7CisJCX0KKwkJY2Rldi0+YXAucHJpdmF0ZSA9IGNkZXY7CisJCWNkZXYtPmFwLnJlY3ZfbWVzc2FnZSA9IGNhcGlfcmVjdl9tZXNzYWdlOworCQljZGV2LT5lcnJjb2RlID0gY2FwaTIwX3JlZ2lzdGVyKCZjZGV2LT5hcCk7CisJCXJldHZhbCA9IChpbnQpY2Rldi0+YXAuYXBwbGlkOworCQlpZiAoY2Rldi0+ZXJyY29kZSkgeworCQkJY2Rldi0+YXAuYXBwbGlkID0gMDsKKwkJCXJldHZhbCA9IC1FSU87CisJCX0KKworcmVnaXN0ZXJfb3V0OgorCQltdXRleF91bmxvY2soJmNkZXYtPmxvY2spOworCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBDQVBJX0dFVF9WRVJTSU9OOgogCQl7CkBAIC05MTAsMTAxICs5MTgsMTA0IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBDQVBJX1NFVF9GTEFHUzoKLQljYXNlIENBUElfQ0xSX0ZMQUdTOgotCQl7Ci0JCQl1bnNpZ25lZCB1c2VyZmxhZ3M7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJmbGFncywgYXJncCwKLQkJCQkJICAgc2l6ZW9mKHVzZXJmbGFncykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKGNtZCA9PSBDQVBJX1NFVF9GTEFHUykKLQkJCQljZGV2LT51c2VyZmxhZ3MgfD0gdXNlcmZsYWdzOwotCQkJZWxzZQotCQkJCWNkZXYtPnVzZXJmbGFncyAmPSB+dXNlcmZsYWdzOwotCQl9Ci0JCXJldHVybiAwOworCWNhc2UgQ0FQSV9DTFJfRkxBR1M6IHsKKwkJdW5zaWduZWQgdXNlcmZsYWdzOwogCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcmZsYWdzLCBhcmdwLCBzaXplb2YodXNlcmZsYWdzKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQltdXRleF9sb2NrKCZjZGV2LT5sb2NrKTsKKwkJaWYgKGNtZCA9PSBDQVBJX1NFVF9GTEFHUykKKwkJCWNkZXYtPnVzZXJmbGFncyB8PSB1c2VyZmxhZ3M7CisJCWVsc2UKKwkJCWNkZXYtPnVzZXJmbGFncyAmPSB+dXNlcmZsYWdzOworCQltdXRleF91bmxvY2soJmNkZXYtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBDQVBJX0dFVF9GTEFHUzoKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY2Rldi0+dXNlcmZsYWdzLAogCQkJCSBzaXplb2YoY2Rldi0+dXNlcmZsYWdzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAKLQljYXNlIENBUElfTkNDSV9PUEVOQ09VTlQ6Ci0JCXsKLQkJCXN0cnVjdCBjYXBpbmNjaSAqbmNjaXA7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0JCQlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KLQkJCXVuc2lnbmVkIG5jY2k7Ci0JCQlpbnQgY291bnQgPSAwOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZuY2NpLCBhcmdwLCBzaXplb2YobmNjaSkpKQotCQkJCXJldHVybiAtRUZBVUxUOworCWNhc2UgQ0FQSV9OQ0NJX09QRU5DT1VOVDogeworCQlzdHJ1Y3QgY2FwaW5jY2kgKm5jY2lwOworCQl1bnNpZ25lZCBuY2NpOworCQlpbnQgY291bnQgPSAwOwogCi0JCQltdXRleF9sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQkJCWlmICgobmNjaXAgPSBjYXBpbmNjaV9maW5kKGNkZXYsICh1MzIpIG5jY2kpKSA9PSBOVUxMKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLQkJCWlmICgobXAgPSBuY2NpcC0+bWlub3JwKSAhPSBOVUxMKSB7Ci0JCQkJY291bnQgKz0gYXRvbWljX3JlYWQoJm1wLT50dHlvcGVuY291bnQpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwotCQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQkJCXJldHVybiBjb3VudDsKLQkJfQotCQlyZXR1cm4gMDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZuY2NpLCBhcmdwLCBzaXplb2YobmNjaSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLQljYXNlIENBUElfTkNDSV9HRVRVTklUOgotCQl7Ci0JCQlzdHJ1Y3QgY2FwaW5jY2kgKm5jY2lwOwotCQkJc3RydWN0IGNhcGltaW5vciAqbXA7Ci0JCQl1bnNpZ25lZCBuY2NpOwotCQkJaW50IHVuaXQgPSAwOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZuY2NpLCBhcmdwLAotCQkJCQkgICBzaXplb2YobmNjaSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCQluY2NpcCA9IGNhcGluY2NpX2ZpbmQoY2RldiwgKHUzMikgbmNjaSk7Ci0JCQlpZiAoIW5jY2lwIHx8IChtcCA9IG5jY2lwLT5taW5vcnApID09IE5VTEwpIHsKLQkJCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCQkJCXJldHVybiAtRVNSQ0g7Ci0JCQl9Ci0JCQl1bml0ID0gbXAtPm1pbm9yOwotCQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQkJCXJldHVybiB1bml0OwotCQl9Ci0JCXJldHVybiAwOwotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCQltdXRleF9sb2NrKCZjZGV2LT5sb2NrKTsKKwkJbmNjaXAgPSBjYXBpbmNjaV9maW5kKGNkZXYsICh1MzIpbmNjaSk7CisJCWlmIChuY2NpcCkKKwkJCWNvdW50ID0gY2FwaW5jY2lfbWlub3Jfb3BlbmNvdW50KG5jY2lwKTsKKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwkJcmV0dXJuIGNvdW50OwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQorCWNhc2UgQ0FQSV9OQ0NJX0dFVFVOSVQ6IHsKKwkJc3RydWN0IGNhcGluY2NpICpuY2NpcDsKKwkJc3RydWN0IGNhcGltaW5vciAqbXA7CisJCXVuc2lnbmVkIG5jY2k7CisJCWludCB1bml0ID0gLUVTUkNIOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwgc2l6ZW9mKG5jY2kpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCW11dGV4X2xvY2soJmNkZXYtPmxvY2spOworCQluY2NpcCA9IGNhcGluY2NpX2ZpbmQoY2RldiwgKHUzMiluY2NpKTsKKwkJaWYgKG5jY2lwKSB7CisJCQltcCA9IG5jY2lwLT5taW5vcnA7CisJCQlpZiAobXApCisJCQkJdW5pdCA9IG1wLT5taW5vcjsKKwkJfQorCQltdXRleF91bmxvY2soJmNkZXYtPmxvY2spOworCQlyZXR1cm4gdW5pdDsKKwl9CisjZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiB9CiAKLXN0YXRpYyBpbnQKLWNhcGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgY2FwaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQ7Ci0JCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQotCQlyZXQgPSAtRUVYSVNUOwotCWVsc2UgaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBjYXBpZGV2X2FsbG9jKCkpID09IE5VTEwpCi0JCXJldCA9IC1FTk9NRU07Ci0JZWxzZQotCQlyZXQgPSBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKKwlzdHJ1Y3QgY2FwaWRldiAqY2RldjsKKworCWNkZXYgPSBremFsbG9jKHNpemVvZigqY2RldiksIEdGUF9LRVJORUwpOworCWlmICghY2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZjZGV2LT5sb2NrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjZGV2LT5yZWN2cXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNkZXYtPnJlY3Z3YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2Rldi0+bmNjaXMpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNkZXY7CisKKwltdXRleF9sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmY2Rldi0+bGlzdCwgJmNhcGlkZXZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBpbnQKLWNhcGlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgY2FwaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gKHN0cnVjdCBjYXBpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JY2FwaWRldl9mcmVlKGNkZXYpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JCisJbXV0ZXhfbG9jaygmY2FwaWRldl9saXN0X2xvY2spOworCWxpc3RfZGVsKCZjZGV2LT5saXN0KTsKKwltdXRleF91bmxvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKKworCWlmIChjZGV2LT5hcC5hcHBsaWQpCisJCWNhcGkyMF9yZWxlYXNlKCZjZGV2LT5hcCk7CisJc2tiX3F1ZXVlX3B1cmdlKCZjZGV2LT5yZWN2cXVldWUpOworCWNhcGluY2NpX2ZyZWUoY2RldiwgMHhmZmZmZmZmZik7CisKKwlrZnJlZShjZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAyMywxODIgKzEwMzQsMTU5IEBACiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAvKiAtLS0tLS0tLSB0dHlfb3BlcmF0aW9ucyBmb3IgY2FwaW5jY2kgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBjYXBpbmNfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSkKK3N0YXRpYyBpbnQKK2NhcGluY190dHlfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGlkeCA9IHR0eS0+aW5kZXg7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSBjYXBpbWlub3JfZ2V0KGlkeCk7CisJaW50IHJldCA9IHR0eV9pbml0X3Rlcm1pb3ModHR5KTsKIAotCWlmICgobXAgPSBjYXBpbWlub3JfZmluZChpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOwotCWlmIChtcC0+bmNjaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKKwlpZiAocmV0ID09IDApIHsKKwkJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXIpOworCQl0dHktPmNvdW50Kys7CisJCXR0eS0+ZHJpdmVyX2RhdGEgPSBtcDsKKwkJZHJpdmVyLT50dHlzW2lkeF0gPSB0dHk7CisJfSBlbHNlCisJCWNhcGltaW5vcl9wdXQobXApOworCXJldHVybiByZXQ7Cit9CiAKLQl0dHktPmRyaXZlcl9kYXRhID0gKHZvaWQgKiltcDsKK3N0YXRpYyB2b2lkIGNhcGluY190dHlfY2xlYW51cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwljYXBpbWlub3JfcHV0KG1wKTsKK30KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQlpZiAoYXRvbWljX3JlYWQoJm1wLT50dHlvcGVuY291bnQpID09IDApCi0JCW1wLT50dHkgPSB0dHk7Ci0JYXRvbWljX2luYygmbXAtPnR0eW9wZW5jb3VudCk7Ci0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfb3BlbiBvY291bnQ9JWRcbiIsIGF0b21pY19yZWFkKCZtcC0+dHR5b3BlbmNvdW50KSk7Ci0jZW5kaWYKK3N0YXRpYyBpbnQgY2FwaW5jX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gdHR5X3BvcnRfb3BlbigmbXAtPnBvcnQsIHR0eSwgZmlscCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlKQorc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLQltcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAobXApCXsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1wLT50dHlvcGVuY291bnQpKSB7Ci0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9jbG9zZSBsYXN0Y2xvc2VcbiIpOwotI2VuZGlmCi0JCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKLQkJCW1wLT50dHkgPSBOVUxMOwotCQl9Ci0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2Nsb3NlIG9jb3VudD0lZFxuIiwgYXRvbWljX3JlYWQoJm1wLT50dHlvcGVuY291bnQpKTsKLSNlbmRpZgotCQlpZiAobXAtPm5jY2lwID09IE5VTEwpCi0JCQljYXBpbWlub3JfZnJlZShtcCk7Ci0JfQotCi0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfY2xvc2VcbiIpOwotI2VuZGlmCisJdHR5X3BvcnRfY2xvc2UoJm1wLT5wb3J0LCB0dHksIGZpbHApOwogfQogCi1zdGF0aWMgaW50IGNhcGluY190dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCitzdGF0aWMgaW50IGNhcGluY190dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfd3JpdGUoY291bnQ9JWQpXG4iLCBjb3VudCk7CiAjZW5kaWYKIAotCWlmICghbXAgfHwgIW1wLT5uY2NpcCkgewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV93cml0ZTogbXAgb3IgbXAtPm5jY2kgTlVMTFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCXNrYiA9IG1wLT50dHlza2I7CisJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisJc2tiID0gbXAtPm91dHNrYjsKIAlpZiAoc2tiKSB7Ci0JCW1wLT50dHlza2IgPSBOVUxMOwotCQlza2JfcXVldWVfdGFpbCgmbXAtPm91dHF1ZXVlLCBza2IpOworCQltcC0+b3V0c2tiID0gTlVMTDsKKwkJX19za2JfcXVldWVfdGFpbCgmbXAtPm91dHF1ZXVlLCBza2IpOwogCQltcC0+b3V0Ynl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCiAJc2tiID0gYWxsb2Nfc2tiKENBUElfREFUQV9CM19SRVFfTEVOK2NvdW50LCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgImNhcGluY190dHlfd3JpdGU6IGFsbG9jX3NrYiBmYWlsZWRcbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJc2tiX3Jlc2VydmUoc2tiLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7CiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBjb3VudCksIGJ1ZiwgY291bnQpOwogCi0Jc2tiX3F1ZXVlX3RhaWwoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CiAJbXAtPm91dGJ5dGVzICs9IHNrYi0+bGVuOwotCSh2b2lkKWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKLQkodm9pZCloYW5kbGVfbWlub3JfcmVjdihtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKworCWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKKwogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGludCBjYXBpbmNfdHR5X3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOworCWJvb2wgaW52b2tlX3NlbmQgPSBmYWxzZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CiAKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3B1dF9jaGFyKCV1KVxuIiwgY2gpOwogI2VuZGlmCiAKLQlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfcHV0X2NoYXI6IG1wIG9yIG1wLT5uY2NpIE5VTExcbiIpOwotI2VuZGlmCi0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQlza2IgPSBtcC0+dHR5c2tiOworCXNwaW5fbG9ja19iaCgmbXAtPm91dGxvY2spOworCXNrYiA9IG1wLT5vdXRza2I7CiAJaWYgKHNrYikgewogCQlpZiAoc2tiX3RhaWxyb29tKHNrYikgPiAwKSB7CiAJCQkqKHNrYl9wdXQoc2tiLCAxKSkgPSBjaDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIDE7CisJCQlnb3RvIHVubG9ja19vdXQ7CiAJCX0KLQkJbXAtPnR0eXNrYiA9IE5VTEw7Ci0JCXNrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CisJCW1wLT5vdXRza2IgPSBOVUxMOworCQlfX3NrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CiAJCW1wLT5vdXRieXRlcyArPSBza2ItPmxlbjsKLQkJKHZvaWQpaGFuZGxlX21pbm9yX3NlbmQobXApOworCQlpbnZva2Vfc2VuZCA9IHRydWU7CiAJfQorCiAJc2tiID0gYWxsb2Nfc2tiKENBUElfREFUQV9CM19SRVFfTEVOK0NBUElfTUFYX0JMS1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmIChza2IpIHsKIAkJc2tiX3Jlc2VydmUoc2tiLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7CiAJCSooc2tiX3B1dChza2IsIDEpKSA9IGNoOwotCQltcC0+dHR5c2tiID0gc2tiOworCQltcC0+b3V0c2tiID0gc2tiOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FwaW5jX3B1dF9jaGFyOiBjaGFyICV1IGxvc3RcbiIsIGNoKTsKIAkJcmV0ID0gMDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisKK3VubG9ja19vdXQ6CisJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKworCWlmIChpbnZva2Vfc2VuZCkKKwkJaGFuZGxlX21pbm9yX3NlbmQobXApOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9mbHVzaF9jaGFyc1xuIik7CiAjZW5kaWYKIAotCWlmICghbXAgfHwgIW1wLT5uY2NpcCkgewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9mbHVzaF9jaGFyczogbXAgb3IgbXAtPm5jY2kgTlVMTFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQlza2IgPSBtcC0+dHR5c2tiOworCXNwaW5fbG9ja19iaCgmbXAtPm91dGxvY2spOworCXNrYiA9IG1wLT5vdXRza2I7CiAJaWYgKHNrYikgewotCQltcC0+dHR5c2tiID0gTlVMTDsKLQkJc2tiX3F1ZXVlX3RhaWwoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKwkJbXAtPm91dHNrYiA9IE5VTEw7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKIAkJbXAtPm91dGJ5dGVzICs9IHNrYi0+bGVuOwotCQkodm9pZCloYW5kbGVfbWlub3Jfc2VuZChtcCk7Ci0JfQotCSh2b2lkKWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKworCQloYW5kbGVfbWlub3Jfc2VuZChtcCk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisKKwloYW5kbGVfbWlub3JfcmVjdihtcCk7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaW5jX3R0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByb29tOwotCWlmICghbXAgfHwgIW1wLT5uY2NpcCkgewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV93cml0ZV9yb29tOiBtcCBvciBtcC0+bmNjaSBOVUxMXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gMDsKLQl9CisKIAlyb29tID0gQ0FQSU5DX01BWF9TRU5EUVVFVUUtc2tiX3F1ZXVlX2xlbigmbXAtPm91dHF1ZXVlKTsKIAlyb29tICo9IENBUElfTUFYX0JMS1NJWkU7CiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCkBAIC0xMjA5LDEzICsxMTk3LDggQEAKIAogc3RhdGljIGludCBjYXBpbmNfdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOwotCWlmICghbXAgfHwgIW1wLT5uY2NpcCkgewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXI6IG1wIG9yIG1wLT5uY2NpIE5VTExcbiIpOwotI2VuZGlmCi0JCXJldHVybiAwOwotCX0KKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIgPSAlZCBuYWNrPSVkIHNxPSVkIHJxPSVkXG4iLAogCQkJbXAtPm91dGJ5dGVzLCBtcC0+bmFjaywKQEAgLTEyNDQsNjIgKzEyMjcsNTUgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBjYXBpbmNfdHR5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgY2FwaW5jX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV90aHJvdHRsZVxuIik7CiAjZW5kaWYKLQlpZiAobXApCi0JCW1wLT50dHlpbnN0b3AgPSAxOworCW1wLT50dHlpbnN0b3AgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBjYXBpbmNfdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCitzdGF0aWMgdm9pZCBjYXBpbmNfdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3VudGhyb3R0bGVcbiIpOwogI2VuZGlmCi0JaWYgKG1wKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQkJbXAtPnR0eWluc3RvcCA9IDA7Ci0JCWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JfQorCW1wLT50dHlpbnN0b3AgPSAwOworCWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOworCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc3RvcFxuIik7CiAjZW5kaWYKLQlpZiAobXApIHsKLQkJbXAtPnR0eW91dHN0b3AgPSAxOwotCX0KKwltcC0+dHR5b3V0c3RvcCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3N0YXJ0XG4iKTsKICNlbmRpZgotCWlmIChtcCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JCW1wLT50dHlvdXRzdG9wID0gMDsKLQkJKHZvaWQpaGFuZGxlX21pbm9yX3NlbmQobXApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQl9CisJbXAtPnR0eW91dHN0b3AgPSAwOworCWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9oYW5ndXBcbiIpOwogI2VuZGlmCisJdHR5X3BvcnRfaGFuZ3VwKCZtcC0+cG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaW5jX3R0eV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQpAQCAtMTMzMSw4ICsxMzA3LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmNhcGluY190dHlfZHJpdmVyOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGNhcGluY19vcHMgPSB7CiAJLm9wZW4gPSBjYXBpbmNfdHR5X29wZW4sCiAJLmNsb3NlID0gY2FwaW5jX3R0eV9jbG9zZSwKQEAgLTEzNTIsMjUgKzEzMjYsMzQgQEAKIAkuZmx1c2hfYnVmZmVyID0gY2FwaW5jX3R0eV9mbHVzaF9idWZmZXIsCiAJLnNldF9sZGlzYyA9IGNhcGluY190dHlfc2V0X2xkaXNjLAogCS5zZW5kX3hjaGFyID0gY2FwaW5jX3R0eV9zZW5kX3hjaGFyLAorCS5pbnN0YWxsID0gY2FwaW5jX3R0eV9pbnN0YWxsLAorCS5jbGVhbnVwID0gY2FwaW5jX3R0eV9jbGVhbnVwLAogfTsKIAotc3RhdGljIGludCBjYXBpbmNfdHR5X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNhcGluY190dHlfaW5pdCh2b2lkKQogewogCXN0cnVjdCB0dHlfZHJpdmVyICpkcnY7Ci0JCisJaW50IGVycjsKKwogCWlmIChjYXBpX3R0eW1pbm9ycyA+IENBUElOQ19NQVhfUE9SVFMpCiAJCWNhcGlfdHR5bWlub3JzID0gQ0FQSU5DX01BWF9QT1JUUzsKIAlpZiAoY2FwaV90dHltaW5vcnMgPD0gMCkKIAkJY2FwaV90dHltaW5vcnMgPSBDQVBJTkNfTlJfUE9SVFM7CiAKLQlkcnYgPSBhbGxvY190dHlfZHJpdmVyKGNhcGlfdHR5bWlub3JzKTsKLQlpZiAoIWRydikKKwljYXBpbWlub3JzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhcGlfbWlub3IgKikgKiBjYXBpX3R0eW1pbm9ycywKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXBpbWlub3JzKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWRydiA9IGFsbG9jX3R0eV9kcml2ZXIoY2FwaV90dHltaW5vcnMpOworCWlmICghZHJ2KSB7CisJCWtmcmVlKGNhcGltaW5vcnMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZHJ2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWRydi0+ZHJpdmVyX25hbWUgPSAiY2FwaV9uYyI7CiAJZHJ2LT5uYW1lID0gImNhcGkiOwotCWRydi0+bWFqb3IgPSBjYXBpX3R0eW1ham9yOworCWRydi0+bWFqb3IgPSAwOwogCWRydi0+bWlub3Jfc3RhcnQgPSAwOwogCWRydi0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CiAJZHJ2LT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwpAQCAtMTM3OSwyNyArMTM2MiwzOSBAQAogCWRydi0+aW5pdF90ZXJtaW9zLmNfb2ZsYWcgPSBPUE9TVCB8IE9OTENSOwogCWRydi0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CiAJZHJ2LT5pbml0X3Rlcm1pb3MuY19sZmxhZyA9IDA7Ci0JZHJ2LT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVd8VFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TOworCWRydi0+ZmxhZ3MgPQorCQlUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TIHwKKwkJVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAl0dHlfc2V0X29wZXJhdGlvbnMoZHJ2LCAmY2FwaW5jX29wcyk7Ci0JaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIoZHJ2KSkgeworCisJZXJyID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcnYpOworCWlmIChlcnIpIHsKIAkJcHV0X3R0eV9kcml2ZXIoZHJ2KTsKKwkJa2ZyZWUoY2FwaW1pbm9ycyk7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgcmVnaXN0ZXIgY2FwaV9uYyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBlcnI7CiAJfQogCWNhcGluY190dHlfZHJpdmVyID0gZHJ2OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjYXBpbmNfdHR5X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYXBpbmNfdHR5X2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJ2ID0gY2FwaW5jX3R0eV9kcml2ZXI7Ci0JaW50IHJldHZhbDsKLQlpZiAoKHJldHZhbCA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihkcnYpKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBmYWlsZWQgdG8gdW5yZWdpc3RlciBjYXBpX25jIGRyaXZlciAoJWQpXG4iLCByZXR2YWwpOwotCXB1dF90dHlfZHJpdmVyKGRydik7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGNhcGluY190dHlfZHJpdmVyKTsKKwlwdXRfdHR5X2RyaXZlcihjYXBpbmNfdHR5X2RyaXZlcik7CisJa2ZyZWUoY2FwaW1pbm9ycyk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKyNlbHNlIC8qICFDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKworc3RhdGljIGlubGluZSBpbnQgY2FwaW5jX3R0eV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpbmNfdHR5X2V4aXQodm9pZCkgeyB9CisKKyNlbmRpZiAvKiAhQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAKIC8qIC0tLS0tLS0tIC9wcm9jIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNDA3LDEzNCArMTQwMiw5MSBAQAogICogL3Byb2MvY2FwaS9jYXBpMjA6CiAgKiAgbWlub3IgYXBwbGlkIG5yZWN2Y3RscGt0IG5yZWN2ZGF0YXBrdCBuc2VuZGN0bHBrdCBuc2VuZGRhdGFwa3QKICAqLwotc3RhdGljIGludCBwcm9jX2NhcGlkZXZfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FwaTIwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAgICAgICAgIHN0cnVjdCBjYXBpZGV2ICpjZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0JaW50IGxlbiA9IDA7CiAKLQlyZWFkX2xvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChsLCAmY2FwaWRldl9saXN0KSB7CiAJCWNkZXYgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjYXBpZGV2LCBsaXN0KTsKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIwICVkICVsdSAlbHUgJWx1ICVsdVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiMCAlZCAlbHUgJWx1ICVsdSAlbHVcbiIsCiAJCQljZGV2LT5hcC5hcHBsaWQsCiAJCQljZGV2LT5hcC5ucmVjdmN0bHBrdCwKIAkJCWNkZXYtPmFwLm5yZWN2ZGF0YXBrdCwKIAkJCWNkZXYtPmFwLm5zZW50Y3RscGt0LAogCQkJY2Rldi0+YXAubnNlbnRkYXRhcGt0KTsKLQkJaWYgKGxlbiA8PSBvZmYpIHsKLQkJCW9mZiAtPSBsZW47Ci0JCQlsZW4gPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKGxlbi1vZmYgPiBjb3VudCkKLQkJCQlnb3RvIGVuZGxvb3A7Ci0JCX0KIAl9Ci0KLWVuZGxvb3A6Ci0JcmVhZF91bmxvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKLQlpZiAobGVuIDwgY291bnQpCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPiBjb3VudCkgbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IDApIGxlbiA9IDA7Ci0JcmV0dXJuIGxlbjsKKwltdXRleF91bmxvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjYXBpMjBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYXBpMjBfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FwaTIwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FwaTIwX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIC9wcm9jL2NhcGkvY2FwaTIwbmNjaToKICAqICBhcHBsaWQgbmNjaQogICovCi1zdGF0aWMgaW50IHByb2NfY2FwaW5jY2lfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FwaTIwbmNjaV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotICAgICAgICBzdHJ1Y3QgY2FwaWRldiAqY2RldjsKLSAgICAgICAgc3RydWN0IGNhcGluY2NpICpucDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCWludCBsZW4gPSAwOworCXN0cnVjdCBjYXBpZGV2ICpjZGV2OworCXN0cnVjdCBjYXBpbmNjaSAqbnA7CiAKLQlyZWFkX2xvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKGwsICZjYXBpZGV2X2xpc3QpIHsKLQkJY2RldiA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNhcGlkZXYsIGxpc3QpOwotCQlmb3IgKG5wPWNkZXYtPm5jY2lzOyBucDsgbnAgPSBucC0+bmV4dCkgewotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlZCAweCV4XG4iLAotCQkJCSAgICAgICBjZGV2LT5hcC5hcHBsaWQsCi0JCQkJICAgICAgIG5wLT5uY2NpKTsKLQkJCWlmIChsZW4gPD0gb2ZmKSB7Ci0JCQkJb2ZmIC09IGxlbjsKLQkJCQlsZW4gPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAobGVuLW9mZiA+IGNvdW50KQotCQkJCQlnb3RvIGVuZGxvb3A7Ci0JCQl9Ci0JCX0KKwltdXRleF9sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGV2LCAmY2FwaWRldl9saXN0LCBsaXN0KSB7CisJCW11dGV4X2xvY2soJmNkZXYtPmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5wLCAmY2Rldi0+bmNjaXMsIGxpc3QpCisJCQlzZXFfcHJpbnRmKG0sICIlZCAweCV4XG4iLCBjZGV2LT5hcC5hcHBsaWQsIG5wLT5uY2NpKTsKKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKIAl9Ci1lbmRsb29wOgotCXJlYWRfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7Ci0JKnN0YXJ0ID0gcGFnZStvZmY7Ci0JaWYgKGxlbiA8IGNvdW50KQotCQkqZW9mID0gMTsKLQlpZiAobGVuPmNvdW50KSBsZW4gPSBjb3VudDsKLQlpZiAobGVuPDApIGxlbiA9IDA7Ci0JcmV0dXJuIGxlbjsKKwltdXRleF91bmxvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm9jZnNlbnRyaWVzIHsKLSAgY2hhciAqbmFtZTsKLSAgbW9kZV90IG1vZGU7Ci0gIGludCAoKnJlYWRfcHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZW50OwotfSBwcm9jZnNlbnRyaWVzW10gPSB7Ci0gICAvKiB7ICJjYXBpIiwJCSAgU19JRkRJUiwgMCB9LCAqLwotICAgeyAiY2FwaS9jYXBpMjAiLCAJICAwCSAsIHByb2NfY2FwaWRldl9yZWFkX3Byb2MgfSwKLSAgIHsgImNhcGkvY2FwaTIwbmNjaSIsICAgMAkgLCBwcm9jX2NhcGluY2NpX3JlYWRfcHJvYyB9LAorc3RhdGljIGludCBjYXBpMjBuY2NpX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY2FwaTIwbmNjaV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYXBpMjBuY2NpX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FwaTIwbmNjaV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9jX2luaXQodm9pZCkKIHsKLSAgICBpbnQgbmVsZW0gPSBBUlJBWV9TSVpFKHByb2Nmc2VudHJpZXMpOwotICAgIGludCBpOwotCi0gICAgZm9yIChpPTA7IGkgPCBuZWxlbTsgaSsrKSB7Ci0gICAgICAgIHN0cnVjdCBwcm9jZnNlbnRyaWVzICpwID0gcHJvY2ZzZW50cmllcyArIGk7Ci0JcC0+cHJvY2VudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KHAtPm5hbWUsIHAtPm1vZGUsIE5VTEwpOwotCWlmIChwLT5wcm9jZW50KSBwLT5wcm9jZW50LT5yZWFkX3Byb2MgPSBwLT5yZWFkX3Byb2M7Ci0gICAgfQorCXByb2NfY3JlYXRlKCJjYXBpL2NhcGkyMCIsIDAsIE5VTEwsICZjYXBpMjBfcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgiY2FwaS9jYXBpMjBuY2NpIiwgMCwgTlVMTCwgJmNhcGkyMG5jY2lfcHJvY19mb3BzKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHByb2NfZXhpdCh2b2lkKQogewotICAgIGludCBuZWxlbSA9IEFSUkFZX1NJWkUocHJvY2ZzZW50cmllcyk7Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGk9bmVsZW0tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgc3RydWN0IHByb2Nmc2VudHJpZXMgKnAgPSBwcm9jZnNlbnRyaWVzICsgaTsKLQlpZiAocC0+cHJvY2VudCkgewotCSAgIHJlbW92ZV9wcm9jX2VudHJ5KHAtPm5hbWUsIE5VTEwpOwotCSAgIHAtPnByb2NlbnQgPSBOVUxMOwotCX0KLSAgICB9CisJcmVtb3ZlX3Byb2NfZW50cnkoImNhcGkvY2FwaTIwIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImNhcGkvY2FwaTIwbmNjaSIsIE5VTEwpOwogfQogCiAvKiAtLS0tLS0tLSBpbml0IGZ1bmN0aW9uIGFuZCBtb2R1bGUgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCi1zdGF0aWMgY2hhciByZXZbMzJdOwotCiBzdGF0aWMgaW50IF9faW5pdCBjYXBpX2luaXQodm9pZCkKIHsKLQljaGFyICpwOwotCWNoYXIgKmNvbXBpbGVpbmZvOworCWNvbnN0IGNoYXIgKmNvbXBpbGVpbmZvOwogCWludCBtYWpvcl9yZXQ7CiAKLQlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpICE9IE5VTEwgJiYgcFsxXSkgewotCQlzdHJsY3B5KHJldiwgcCArIDIsIHNpemVvZihyZXYpKTsKLQkJaWYgKChwID0gc3RyY2hyKHJldiwgJyQnKSkgIT0gTlVMTCAmJiBwID4gcmV2KQotCQkgICAqKHAtMSkgPSAwOwotCX0gZWxzZQotCQlzdHJjcHkocmV2LCAiMS4wIik7Ci0KIAltYWpvcl9yZXQgPSByZWdpc3Rlcl9jaHJkZXYoY2FwaV9tYWpvciwgImNhcGkyMCIsICZjYXBpX2ZvcHMpOwogCWlmIChtYWpvcl9yZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FwaTIwOiB1bmFibGUgdG8gZ2V0IG1ham9yICVkXG4iLCBjYXBpX21ham9yKTsKQEAgLTE1NDgsMjggKzE1MDAsMjQgQEAKIAogCWRldmljZV9jcmVhdGUoY2FwaV9jbGFzcywgTlVMTCwgTUtERVYoY2FwaV9tYWpvciwgMCksIE5VTEwsICJjYXBpIik7CiAKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAlpZiAoY2FwaW5jX3R0eV9pbml0KCkgPCAwKSB7CiAJCWRldmljZV9kZXN0cm95KGNhcGlfY2xhc3MsIE1LREVWKGNhcGlfbWFqb3IsIDApKTsKIAkJY2xhc3NfZGVzdHJveShjYXBpX2NsYXNzKTsKIAkJdW5yZWdpc3Rlcl9jaHJkZXYoY2FwaV9tYWpvciwgImNhcGkyMCIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAKIAlwcm9jX2luaXQoKTsKIAotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQogICAgICAgICBjb21waWxlaW5mbyA9ICIgKG1pZGRsZXdhcmUrY2FwaWZzKSI7Ci0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUpCiAgICAgICAgIGNvbXBpbGVpbmZvID0gIiAobm8gY2FwaWZzKSI7Ci0jZW5kaWYKICNlbHNlCiAgICAgICAgIGNvbXBpbGVpbmZvID0gIiAobm8gbWlkZGxld2FyZSkiOwogI2VuZGlmCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpMjA6IFJldiAlczogc3RhcnRlZCB1cCB3aXRoIG1ham9yICVkJXNcbiIsCi0JCQkJcmV2LCBjYXBpX21ham9yLCBjb21waWxlaW5mbyk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJDQVBJIDIuMCBzdGFydGVkIHVwIHdpdGggbWFqb3IgJWQlc1xuIiwKKwkgICAgICAgY2FwaV9tYWpvciwgY29tcGlsZWluZm8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgyLDEwICsxNTMwLDcgQEAKIAljbGFzc19kZXN0cm95KGNhcGlfY2xhc3MpOwogCXVucmVnaXN0ZXJfY2hyZGV2KGNhcGlfbWFqb3IsICJjYXBpMjAiKTsKIAotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogCWNhcGluY190dHlfZXhpdCgpOwotI2VuZGlmCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpOiBSZXYgJXM6IHVubG9hZGVkXG4iLCByZXYpOwogfQogCiBtb2R1bGVfaW5pdChjYXBpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jCmluZGV4IDY2YjdkN2EuLmJmNTVlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZHJ2LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pc2RuLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbmlmLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbGNhcGkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpAQCAtMzQsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWNtZC5oPgogI2luY2x1ZGUgImNhcGlkcnYuaCIKIAotc3RhdGljIGNoYXIgKnJldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xLjIuMiAkIjsKIHN0YXRpYyBpbnQgZGVidWdtb2RlID0gMDsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVBJNExpbnV4OiBJbnRlcmZhY2UgdG8gSVNETjRMaW51eCIpOwpAQCAtMjIxMCw5NiArMjIxMCw3MyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGxvd2VyX2NhbGxiYWNrKHVuc2lnbmVkIGludCBjbWQsIHUzMiBjb250ciwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQKK2xvd2VyX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQogeworCWNhcGlfcHJvZmlsZSBwcm9maWxlOworCXUzMiBjb250ciA9IChsb25nKXY7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgS0NJX0NPTlRSVVA6CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIENBUElDVFJfVVA6CiAJCXByaW50ayhLRVJOX0lORk8gImNhcGlkcnY6IGNvbnRyb2xsZXIgJWh1IHVwXG4iLCBjb250cik7Ci0JCSh2b2lkKSBjYXBpZHJ2X2FkZGNvbnRyKGNvbnRyLCAoY2FwaV9wcm9maWxlICopIGRhdGEpOworCQlpZiAoY2FwaTIwX2dldF9wcm9maWxlKGNvbnRyLCAmcHJvZmlsZSkgPT0gQ0FQSV9OT0VSUk9SKQorCQkJKHZvaWQpIGNhcGlkcnZfYWRkY29udHIoY29udHIsICZwcm9maWxlKTsKIAkJYnJlYWs7Ci0JY2FzZSBLQ0lfQ09OVFJET1dOOgorCWNhc2UgQ0FQSUNUUl9ET1dOOgogCQlwcmludGsoS0VSTl9JTkZPICJjYXBpZHJ2OiBjb250cm9sbGVyICVodSBkb3duXG4iLCBjb250cik7CiAJCSh2b2lkKSBjYXBpZHJ2X2RlbGNvbnRyKGNvbnRyKTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qCiAgKiAvcHJvYy9jYXBpL2NhcGlkcnY6CiAgKiBucmVjdmN0bHBrdCBucmVjdmRhdGFwa3QgbnNlbmRjdGxwa3QgbnNlbmRkYXRhcGt0CiAgKi8KLXN0YXRpYyBpbnQgcHJvY19jYXBpZHJ2X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNhcGlkcnZfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJWx1ICVsdSAlbHUgJWx1XG4iLAorCXNlcV9wcmludGYobSwgIiVsdSAlbHUgJWx1ICVsdVxuIiwKIAkJCWdsb2JhbC5hcC5ucmVjdmN0bHBrdCwKIAkJCWdsb2JhbC5hcC5ucmVjdmRhdGFwa3QsCiAJCQlnbG9iYWwuYXAubnNlbnRjdGxwa3QsCiAJCQlnbG9iYWwuYXAubnNlbnRkYXRhcGt0KTsKLQlpZiAob2ZmK2NvdW50ID49IGxlbikKLQkgICAqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotICAgICAgICAgICByZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuLW9mZikgPyBjb3VudCA6IGxlbi1vZmYpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHByb2Nmc2VudHJpZXMgewotICBjaGFyICpuYW1lOwotICBtb2RlX3QgbW9kZTsKLSAgaW50ICgqcmVhZF9wcm9jKShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NlbnQ7Ci19IHByb2Nmc2VudHJpZXNbXSA9IHsKLSAgIC8qIHsgImNhcGkiLAkJICBTX0lGRElSLCAwIH0sICovCi0gICB7ICJjYXBpL2NhcGlkcnYiLCAJICAwCSAsIHByb2NfY2FwaWRydl9yZWFkX3Byb2MgfSwKK3N0YXRpYyBpbnQgY2FwaWRydl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhcGlkcnZfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FwaWRydl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhcGlkcnZfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvY19pbml0KHZvaWQpCiB7Ci0gICAgaW50IG5lbGVtID0gQVJSQVlfU0laRShwcm9jZnNlbnRyaWVzKTsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoaT0wOyBpIDwgbmVsZW07IGkrKykgewotICAgICAgICBzdHJ1Y3QgcHJvY2ZzZW50cmllcyAqcCA9IHByb2Nmc2VudHJpZXMgKyBpOwotCXAtPnByb2NlbnQgPSBjcmVhdGVfcHJvY19lbnRyeShwLT5uYW1lLCBwLT5tb2RlLCBOVUxMKTsKLQlpZiAocC0+cHJvY2VudCkgcC0+cHJvY2VudC0+cmVhZF9wcm9jID0gcC0+cmVhZF9wcm9jOwotICAgIH0KKwlwcm9jX2NyZWF0ZSgiY2FwaS9jYXBpZHJ2IiwgMCwgTlVMTCwgJmNhcGlkcnZfcHJvY19mb3BzKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHByb2NfZXhpdCh2b2lkKQogewotICAgIGludCBuZWxlbSA9IEFSUkFZX1NJWkUocHJvY2ZzZW50cmllcyk7Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGk9bmVsZW0tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgc3RydWN0IHByb2Nmc2VudHJpZXMgKnAgPSBwcm9jZnNlbnRyaWVzICsgaTsKLQlpZiAocC0+cHJvY2VudCkgewotCSAgIHJlbW92ZV9wcm9jX2VudHJ5KHAtPm5hbWUsIE5VTEwpOwotCSAgIHAtPnByb2NlbnQgPSBOVUxMOwotCX0KLSAgICB9CisJcmVtb3ZlX3Byb2NfZW50cnkoImNhcGkvY2FwaWRydiIsIE5VTEwpOwogfQogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhcGljdHJfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBsb3dlcl9jYWxsYmFjaywKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGNhcGlkcnZfaW5pdCh2b2lkKQogewogCWNhcGlfcHJvZmlsZSBwcm9maWxlOwotCWNoYXIgcmV2WzMyXTsKLQljaGFyICpwOwogCXUzMiBuY29udHIsIGNvbnRyOwogCXUxNiBlcnJjb2RlOwogCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSAhPSBOVUxMICYmIHBbMV0pIHsKLQkJc3RybmNweShyZXYsIHAgKyAyLCBzaXplb2YocmV2KSk7Ci0JCXJldltzaXplb2YocmV2KS0xXSA9IDA7Ci0JCWlmICgocCA9IHN0cmNocihyZXYsICckJykpICE9IE5VTEwgJiYgcCA+IHJldikKLQkJICAgKihwLTEpID0gMDsKLQl9IGVsc2UKLQkJc3RyY3B5KHJldiwgIjEuMCIpOwotCiAJZ2xvYmFsLmFwLnJwYXJhbS5sZXZlbDNjbnQgPSAtMjsgIC8qIG51bWJlciBvZiBiY2hhbm5lbHMgdHdpY2UgKi8KIAlnbG9iYWwuYXAucnBhcmFtLmRhdGFibGtjbnQgPSAxNjsKIAlnbG9iYWwuYXAucnBhcmFtLmRhdGFibGtsZW4gPSAyMDQ4OwpAQCAtMjMxMCw3ICsyMjg3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JY2FwaTIwX3NldF9jYWxsYmFjaygmZ2xvYmFsLmFwLCBsb3dlcl9jYWxsYmFjayk7CisJcmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcigmY2FwaWN0cl9uYik7CiAKIAllcnJjb2RlID0gY2FwaTIwX2dldF9wcm9maWxlKDAsICZwcm9maWxlKTsKIAlpZiAoZXJyY29kZSAhPSBDQVBJX05PRVJST1IpIHsKQEAgLTIzMjcsMjkgKzIzMDQsMTUgQEAKIAl9CiAJcHJvY19pbml0KCk7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgImNhcGlkcnY6IFJldiAlczogbG9hZGVkXG4iLCByZXYpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2FwaWRydl9leGl0KHZvaWQpCiB7Ci0JY2hhciByZXZbMzJdOwotCWNoYXIgKnA7Ci0KLQlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpICE9IE5VTEwpIHsKLQkJc3RybmNweShyZXYsIHAgKyAxLCBzaXplb2YocmV2KSk7Ci0JCXJldltzaXplb2YocmV2KS0xXSA9IDA7Ci0JCWlmICgocCA9IHN0cmNocihyZXYsICckJykpICE9IE5VTEwpCi0JCQkqcCA9IDA7Ci0JfSBlbHNlIHsKLQkJc3RyY3B5KHJldiwgIiA/Pz8gIik7Ci0JfQotCisJdW5yZWdpc3Rlcl9jYXBpY3RyX25vdGlmaWVyKCZjYXBpY3RyX25iKTsKIAljYXBpMjBfcmVsZWFzZSgmZ2xvYmFsLmFwKTsKIAogCXByb2NfZXhpdCgpOwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpZHJ2OiBSZXYlczogdW5sb2FkZWRcbiIsIHJldik7CiB9CiAKIG1vZHVsZV9pbml0KGNhcGlkcnZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCmluZGV4IDlmOGY2N2IuLjg1OTZiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCkBAIC0yNSwxNCArMjUsMTAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBjaGFyICpyZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMS4yLjMgJCI7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjZGVmaW5lIENBUElGU19TVVBFUl9NQUdJQyAoKCdDJzw8OCl8J04nKQogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpjYXBpZnNfbW50Owotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNhcGlmc19yb290Oworc3RhdGljIGludCBjYXBpZnNfbW50X2NvdW50OwogCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQgc2V0dWlkOwpAQCAtMTE4LDcgKzExNCw3IEBACiAJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9ubGluayA9IDI7CiAKLQljYXBpZnNfcm9vdCA9IHMtPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7CisJcy0+c19yb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKIAlpZiAocy0+c19yb290KQogCQlyZXR1cm4gMDsKIAkKQEAgLTE0MSw4MiArMTM3LDk4IEBACiAJLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X25vZGUoaW50IG51bSkKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtYmVyLCBkZXZfdCBkZXZpY2UpCiB7Ci0JY2hhciBzWzEwXTsKLQlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gY2FwaWZzX3Jvb3Q7Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIGxvb2t1cF9vbmVfbGVuKHMsIHJvb3QsIHNwcmludGYocywgIiVkIiwgbnVtKSk7Ci19Ci0KLXZvaWQgY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW1iZXIsIGRldl90IGRldmljZSkKLXsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBjYXBpZnNfbW50LT5tbnRfc2I7CisJc3RydWN0IGRlbnRyeSAqcm9vdCA9IHMtPnNfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShjYXBpZnNfbW50LT5tbnRfc2IpOwotCWlmICghaW5vZGUpCi0JCXJldHVybjsKLQlpbm9kZS0+aV9pbm8gPSBudW1iZXIrMjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWNoYXIgbmFtZVsxMF07CisJaW50IG5hbWVsZW47CiAKLQlkZW50cnkgPSBnZXRfbm9kZShudW1iZXIpOworCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJbmFtZWxlbiA9IHNwcmludGYobmFtZSwgIiVkIiwgbnVtYmVyKTsKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCByb290LCBuYW1lbGVuKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJZGVudHJ5ID0gTlVMTDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJZHB1dChkZW50cnkpOworCQlkZW50cnkgPSBOVUxMOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCisJaW5vZGUgPSBuZXdfaW5vZGUocyk7CisJaWYgKCFpbm9kZSkgeworCQlkcHV0KGRlbnRyeSk7CisJCWRlbnRyeSA9IE5VTEw7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CiAKIAkvKiBjb25maWcgY29udGVudHMgaXMgcHJvdGVjdGVkIGJ5IHJvb3QncyBpX211dGV4ICovCiAJaW5vZGUtPmlfdWlkID0gY29uZmlnLnNldHVpZCA/IGNvbmZpZy51aWQgOiBjdXJyZW50X2ZzdWlkKCk7CiAJaW5vZGUtPmlfZ2lkID0gY29uZmlnLnNldGdpZCA/IGNvbmZpZy5naWQgOiBjdXJyZW50X2ZzZ2lkKCk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWlub2RlLT5pX2lubyA9IG51bWJlciArIDI7CiAJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBTX0lGQ0hSfGNvbmZpZy5tb2RlLCBkZXZpY2UpOwotCS8vaW5vZGUtPmlfb3AgPSAmY2FwaWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAotCWlmICghSVNfRVJSKGRlbnRyeSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQltdXRleF91bmxvY2soJmNhcGlmc19yb290LT5kX2lub2RlLT5pX211dGV4KTsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCWRnZXQoZGVudHJ5KTsKKwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJcmV0dXJuIGRlbnRyeTsKIH0KIAotdm9pZCBjYXBpZnNfZnJlZV9uY2NpKHVuc2lnbmVkIGludCBudW1iZXIpCitzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfbmV3X25jY2kodW5zaWduZWQgaW50IG51bWJlciwgZGV2X3QgZGV2aWNlKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGdldF9ub2RlKG51bWJlcik7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCi0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCQlpZiAoaW5vZGUpIHsKLQkJCWlub2RlLT5pX25saW5rLS07Ci0JCQlkX2RlbGV0ZShkZW50cnkpOwotCQkJZHB1dChkZW50cnkpOwotCQl9CisJaWYgKHNpbXBsZV9waW5fZnMoJmNhcGlmc19mc190eXBlLCAmY2FwaWZzX21udCwgJmNhcGlmc19tbnRfY291bnQpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZW50cnkgPSBuZXdfbmNjaShudW1iZXIsIGRldmljZSk7CisJaWYgKCFkZW50cnkpCisJCXNpbXBsZV9yZWxlYXNlX2ZzKCZjYXBpZnNfbW50LCAmY2FwaWZzX21udF9jb3VudCk7CisKKwlyZXR1cm4gZGVudHJ5OworfQorCit2b2lkIGNhcGlmc19mcmVlX25jY2koc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBjYXBpZnNfbW50LT5tbnRfc2ItPnNfcm9vdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKCFkZW50cnkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaWYgKGlub2RlKSB7CisJCWRyb3BfbmxpbmsoaW5vZGUpOworCQlkX2RlbGV0ZShkZW50cnkpOwogCQlkcHV0KGRlbnRyeSk7CiAJfQotCW11dGV4X3VubG9jaygmY2FwaWZzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGVudHJ5KTsKKworCW11dGV4X3VubG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlzaW1wbGVfcmVsZWFzZV9mcygmY2FwaWZzX21udCwgJmNhcGlmc19tbnRfY291bnQpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBjYXBpZnNfaW5pdCh2b2lkKQogewotCWNoYXIgcmV2WzMyXTsKLQljaGFyICpwOwotCWludCBlcnI7Ci0KLQlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpICE9IE5VTEwgJiYgcFsxXSkgewotCQlzdHJsY3B5KHJldiwgcCArIDIsIHNpemVvZihyZXYpKTsKLQkJaWYgKChwID0gc3RyY2hyKHJldiwgJyQnKSkgIT0gTlVMTCAmJiBwID4gcmV2KQotCQkgICAqKHAtMSkgPSAwOwotCX0gZWxzZQotCQlzdHJjcHkocmV2LCAiMS4wIik7Ci0KLQllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjYXBpZnNfZnNfdHlwZSk7Ci0JaWYgKCFlcnIpIHsKLQkJY2FwaWZzX21udCA9IGtlcm5fbW91bnQoJmNhcGlmc19mc190eXBlKTsKLQkJaWYgKElTX0VSUihjYXBpZnNfbW50KSkgewotCQkJZXJyID0gUFRSX0VSUihjYXBpZnNfbW50KTsKLQkJCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2FwaWZzX2ZzX3R5cGUpOwotCQl9Ci0JfQotCWlmICghZXJyKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNhcGlmczogUmV2ICVzXG4iLCByZXYpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNhcGlmc19mc190eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNhcGlmc19leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZjYXBpZnNfZnNfdHlwZSk7Ci0JbW50cHV0KGNhcGlmc19tbnQpOwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGlmc19uZXdfbmNjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuaCBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oCmluZGV4IGQwYmQ0YzMuLmUxOTNkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oCkBAIC03LDUgKzcsMjIgQEAKICAqCiAgKi8KIAotdm9pZCBjYXBpZnNfbmV3X25jY2kodW5zaWduZWQgaW50IG51bSwgZGV2X3QgZGV2aWNlKTsKLXZvaWQgY2FwaWZzX2ZyZWVfbmNjaSh1bnNpZ25lZCBpbnQgbnVtKTsKKyNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQorCitzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfbmV3X25jY2kodW5zaWduZWQgaW50IG51bSwgZGV2X3QgZGV2aWNlKTsKK3ZvaWQgY2FwaWZzX2ZyZWVfbmNjaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmNhcGlmc19uZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtLCBkZXZfdCBkZXZpY2UpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXBpZnNfZnJlZV9uY2NpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwppbmRleCBkYzUwNmFiLi5jZTliMDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKQEAgLTM0LDEwICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYjFsbGkuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLXN0YXRpYyBjaGFyICpyZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMS4yLjggJCI7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiBzdGF0aWMgaW50IHNob3djYXBpbXNncyA9IDA7CiAKQEAgLTQ4LDEyICs0NSwxMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBjYXBpX25vdGlmaWVyIHsKK3N0cnVjdCBjYXBpY3RyX2V2ZW50IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQl1bnNpZ25lZCBpbnQgY21kOworCXVuc2lnbmVkIGludCB0eXBlOwogCXUzMiBjb250cm9sbGVyOwotCXUxNiBhcHBsaWQ7Ci0JdTMyIG5jY2k7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02NSwzMCArNjAsMzEgQEAKICNkZWZpbmUgTkNDSTJDVFJMKG5jY2kpICAgICgoKG5jY2kpID4+IDI0KSAmIDB4N2YpCiAKIExJU1RfSEVBRChjYXBpX2RyaXZlcnMpOwotREVGSU5FX1JXTE9DSyhjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKK0RFRklORV9NVVRFWChjYXBpX2RyaXZlcnNfbG9jayk7CiAKLXN0YXRpYyBERUZJTkVfUldMT0NLKGFwcGxpY2F0aW9uX2xvY2spOwotc3RhdGljIERFRklORV9NVVRFWChjb250cm9sbGVyX211dGV4KTsKK3N0cnVjdCBjYXBpX2N0ciAqY2FwaV9jb250cm9sbGVyW0NBUElfTUFYQ09OVFJdOworREVGSU5FX01VVEVYKGNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAogc3RydWN0IGNhcGkyMF9hcHBsICpjYXBpX2FwcGxpY2F0aW9uc1tDQVBJX01BWEFQUExdOwotc3RydWN0IGNhcGlfY3RyICpjYXBpX2NhcmRzW0NBUElfTUFYQ09OVFJdOwogCi1zdGF0aWMgaW50IG5jYXJkczsKK3N0YXRpYyBpbnQgbmNvbnRyb2xsZXJzOworCitzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChjdHJfbm90aWZpZXJfbGlzdCk7CiAKIC8qIC0tLS0tLS0tIGNvbnRyb2xsZXIgcmVmIGNvdW50aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcGlfY3RyICoKLWNhcGlfY3RyX2dldChzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQpCitjYXBpX2N0cl9nZXQoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7Ci0JaWYgKCF0cnlfbW9kdWxlX2dldChjYXJkLT5vd25lcikpCisJaWYgKCF0cnlfbW9kdWxlX2dldChjdHItPm93bmVyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGNhcmQ7CisJcmV0dXJuIGN0cjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1jYXBpX2N0cl9wdXQoc3RydWN0IGNhcGlfY3RyICpjYXJkKQorY2FwaV9jdHJfcHV0KHN0cnVjdCBjYXBpX2N0ciAqY3RyKQogewotCW1vZHVsZV9wdXQoY2FyZC0+b3duZXIpOworCW1vZHVsZV9wdXQoY3RyLT5vd25lcik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTk4LDcgKzk0LDcgQEAKIAlpZiAoY29udHIgLSAxID49IENBUElfTUFYQ09OVFIpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGNhcGlfY2FyZHNbY29udHIgLSAxXTsKKwlyZXR1cm4gY2FwaV9jb250cm9sbGVyW2NvbnRyIC0gMV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcGkyMF9hcHBsICpnZXRfY2FwaV9hcHBsX2J5X25yKHUxNiBhcHBsaWQpCkBAIC0xMDYsNyArMTAyLDcgQEAKIAlpZiAoYXBwbGlkIC0gMSA+PSBDQVBJX01BWEFQUEwpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGNhcGlfYXBwbGljYXRpb25zW2FwcGxpZCAtIDFdOworCXJldHVybiByY3VfZGVyZWZlcmVuY2UoY2FwaV9hcHBsaWNhdGlvbnNbYXBwbGlkIC0gMV0pOwogfQogCiAvKiAtLS0tLS0tLSB1dGlsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0OCwxMDYgKzE0NCwxNTkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX2FwcGwoc3RydWN0IGNhcGlfY3RyICpjYXJkLCB1MTYgYXBwbGlkLCBjYXBpX3JlZ2lzdGVyX3BhcmFtcyAqcnBhcmFtKQorc3RhdGljIHZvaWQKK3JlZ2lzdGVyX2FwcGwoc3RydWN0IGNhcGlfY3RyICpjdHIsIHUxNiBhcHBsaWQsIGNhcGlfcmVnaXN0ZXJfcGFyYW1zICpycGFyYW0pCiB7Ci0JY2FyZCA9IGNhcGlfY3RyX2dldChjYXJkKTsKKwljdHIgPSBjYXBpX2N0cl9nZXQoY3RyKTsKIAotCWlmIChjYXJkKQotCQljYXJkLT5yZWdpc3Rlcl9hcHBsKGNhcmQsIGFwcGxpZCwgcnBhcmFtKTsKKwlpZiAoY3RyKQorCQljdHItPnJlZ2lzdGVyX2FwcGwoY3RyLCBhcHBsaWQsIHJwYXJhbSk7CiAJZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IGdldCBjYXJkIHJlc291cmNlc1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IGdldCBjb250cm9sbGVyIHJlc291cmNlc1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKIH0KIAogCi1zdGF0aWMgdm9pZCByZWxlYXNlX2FwcGwoc3RydWN0IGNhcGlfY3RyICpjYXJkLCB1MTYgYXBwbGlkKQorc3RhdGljIHZvaWQgcmVsZWFzZV9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY3RyLCB1MTYgYXBwbGlkKQogewogCURCRygiYXBwbGlkICUjeCIsIGFwcGxpZCk7CiAJCi0JY2FyZC0+cmVsZWFzZV9hcHBsKGNhcmQsIGFwcGxpZCk7Ci0JY2FwaV9jdHJfcHV0KGNhcmQpOworCWN0ci0+cmVsZWFzZV9hcHBsKGN0ciwgYXBwbGlkKTsKKwljYXBpX2N0cl9wdXQoY3RyKTsKIH0KIAotLyogLS0tLS0tLS0gS0NJX0NPTlRSVVAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIG5vdGlmeV91cCh1MzIgY29udHIpCiB7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOworCXUxNiBhcHBsaWQ7CisKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwlpZiAoc2hvd2NhcGltc2dzICYgMSkKKwkgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogbm90aWZ5IHVwIGNvbnRyICVkXG4iLCBjb250cik7CisKKwljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOworCWlmIChjdHIpIHsKKwkJaWYgKGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfUlVOTklORykKKwkJCWdvdG8gdW5sb2NrX291dDsKKworCQljdHItPnN0YXRlID0gQ0FQSV9DVFJfUlVOTklORzsKKworCQlmb3IgKGFwcGxpZCA9IDE7IGFwcGxpZCA8PSBDQVBJX01BWEFQUEw7IGFwcGxpZCsrKSB7CisJCQlhcCA9IGdldF9jYXBpX2FwcGxfYnlfbnIoYXBwbGlkKTsKKwkJCWlmICghYXApCisJCQkJY29udGludWU7CisJCQlyZWdpc3Rlcl9hcHBsKGN0ciwgYXBwbGlkLCAmYXAtPnJwYXJhbSk7CisJCX0KKworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjdHItPnN0YXRlX3dhaXRfcXVldWUpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBjb250ciAlZFxuIiwgX19mdW5jX18sIGNvbnRyKTsKKwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY3RyX2Rvd24oc3RydWN0IGNhcGlfY3RyICpjdHIsIGludCBuZXdfc3RhdGUpCit7CiAJc3RydWN0IGNhcGkyMF9hcHBsICphcDsKIAl1MTYgYXBwbGlkOwogCi0JaWYgKHNob3djYXBpbXNncyAmIDEpIHsKLQkgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogbm90aWZ5IHVwIGNvbnRyICVkXG4iLCBjb250cik7Ci0JfQotCWlmICghY2FyZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBjb250ciAlZFxuIiwgX19mdW5jX18sIGNvbnRyKTsKKwlpZiAoY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9ERVRFQ1RFRCB8fCBjdHItPnN0YXRlID09IENBUElfQ1RSX0RFVEFDSEVEKQogCQlyZXR1cm47Ci0JfQorCisJY3RyLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKworCW1lbXNldChjdHItPm1hbnUsIDAsIHNpemVvZihjdHItPm1hbnUpKTsKKwltZW1zZXQoJmN0ci0+dmVyc2lvbiwgMCwgc2l6ZW9mKGN0ci0+dmVyc2lvbikpOworCW1lbXNldCgmY3RyLT5wcm9maWxlLCAwLCBzaXplb2YoY3RyLT5wcm9maWxlKSk7CisJbWVtc2V0KGN0ci0+c2VyaWFsLCAwLCBzaXplb2YoY3RyLT5zZXJpYWwpKTsKKwogCWZvciAoYXBwbGlkID0gMTsgYXBwbGlkIDw9IENBUElfTUFYQVBQTDsgYXBwbGlkKyspIHsKIAkJYXAgPSBnZXRfY2FwaV9hcHBsX2J5X25yKGFwcGxpZCk7Ci0JCWlmICghYXAgfHwgYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MpIGNvbnRpbnVlOwotCQlyZWdpc3Rlcl9hcHBsKGNhcmQsIGFwcGxpZCwgJmFwLT5ycGFyYW0pOwotCQlpZiAoYXAtPmNhbGxiYWNrICYmICFhcC0+cmVsZWFzZV9pbl9wcm9ncmVzcykKLQkJCWFwLT5jYWxsYmFjayhLQ0lfQ09OVFJVUCwgY29udHIsICZjYXJkLT5wcm9maWxlKTsKKwkJaWYgKGFwKQorCQkJY2FwaV9jdHJfcHV0KGN0cik7CiAJfQotfQogCi0vKiAtLS0tLS0tLSBLQ0lfQ09OVFJET1dOIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjdHItPnN0YXRlX3dhaXRfcXVldWUpOworfQogCiBzdGF0aWMgdm9pZCBub3RpZnlfZG93bih1MzIgY29udHIpCiB7Ci0Jc3RydWN0IGNhcGkyMF9hcHBsICphcDsKLQl1MTYgYXBwbGlkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOwogCi0JaWYgKHNob3djYXBpbXNncyAmIDEpIHsKLSAgICAgICAgCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogbm90aWZ5IGRvd24gY29udHIgJWRcbiIsIGNvbnRyKTsKLQl9CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCi0JZm9yIChhcHBsaWQgPSAxOyBhcHBsaWQgPD0gQ0FQSV9NQVhBUFBMOyBhcHBsaWQrKykgewotCQlhcCA9IGdldF9jYXBpX2FwcGxfYnlfbnIoYXBwbGlkKTsKLQkJaWYgKGFwICYmIGFwLT5jYWxsYmFjayAmJiAhYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MpCi0JCQlhcC0+Y2FsbGJhY2soS0NJX0NPTlRSRE9XTiwgY29udHIsIE5VTEwpOwotCX0KKwlpZiAoc2hvd2NhcGltc2dzICYgMSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBub3RpZnkgZG93biBjb250ciAlZFxuIiwgY29udHIpOworCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlpZiAoY3RyKQorCQljdHJfZG93bihjdHIsIENBUElfQ1RSX0RFVEVDVEVEKTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnZhbGlkIGNvbnRyICVkXG4iLCBfX2Z1bmNfXywgY29udHIpOworCisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG5vdGlmeV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyBpbnQKK25vdGlmeV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQogewotCXN0cnVjdCBjYXBpX25vdGlmaWVyICpucCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2FwaV9ub3RpZmllciwgd29yayk7CisJdTMyIGNvbnRyID0gKGxvbmcpdjsKIAotCXN3aXRjaCAobnAtPmNtZCkgewotCWNhc2UgS0NJX0NPTlRSVVA6Ci0JCW5vdGlmeV91cChucC0+Y29udHJvbGxlcik7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIENBUElDVFJfVVA6CisJCW5vdGlmeV91cChjb250cik7CiAJCWJyZWFrOwotCWNhc2UgS0NJX0NPTlRSRE9XTjoKLQkJbm90aWZ5X2Rvd24obnAtPmNvbnRyb2xsZXIpOworCWNhc2UgQ0FQSUNUUl9ET1dOOgorCQlub3RpZnlfZG93bihjb250cik7CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQogCi0Ja2ZyZWUobnApOworc3RhdGljIHZvaWQgZG9fbm90aWZ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjYXBpY3RyX2V2ZW50ICpldmVudCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2FwaWN0cl9ldmVudCwgd29yayk7CisKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZjdHJfbm90aWZpZXJfbGlzdCwgZXZlbnQtPnR5cGUsCisJCQkJICAgICAodm9pZCAqKShsb25nKWV2ZW50LT5jb250cm9sbGVyKTsKKwlrZnJlZShldmVudCk7CiB9CiAKIC8qCiAgKiBUaGUgbm90aWZpZXIgd2lsbCByZXN1bHQgaW4gYWRkaW5nL2RlbGV0ZWluZyBvZiBkZXZpY2VzLiBEZXZpY2VzIGNhbgogICogb25seSByZW1vdmVkIGluIHVzZXIgcHJvY2Vzcywgbm90IGluIGJoLgogICovCi1zdGF0aWMgaW50IG5vdGlmeV9wdXNoKHVuc2lnbmVkIGludCBjbWQsIHUzMiBjb250cm9sbGVyLCB1MTYgYXBwbGlkLCB1MzIgbmNjaSkKK3N0YXRpYyBpbnQgbm90aWZ5X3B1c2godW5zaWduZWQgaW50IGV2ZW50X3R5cGUsIHUzMiBjb250cm9sbGVyKQogewotCXN0cnVjdCBjYXBpX25vdGlmaWVyICpucCA9IGttYWxsb2Moc2l6ZW9mKCpucCksIEdGUF9BVE9NSUMpOworCXN0cnVjdCBjYXBpY3RyX2V2ZW50ICpldmVudCA9IGttYWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9BVE9NSUMpOwogCi0JaWYgKCFucCkKKwlpZiAoIWV2ZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCUlOSVRfV09SSygmbnAtPndvcmssIG5vdGlmeV9oYW5kbGVyKTsKLQlucC0+Y21kID0gY21kOwotCW5wLT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQlucC0+YXBwbGlkID0gYXBwbGlkOwotCW5wLT5uY2NpID0gbmNjaTsKKwlJTklUX1dPUksoJmV2ZW50LT53b3JrLCBkb19ub3RpZnlfd29yayk7CisJZXZlbnQtPnR5cGUgPSBldmVudF90eXBlOworCWV2ZW50LT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKIAotCXNjaGVkdWxlX3dvcmsoJm5wLT53b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZldmVudC0+d29yayk7CiAJcmV0dXJuIDA7CiB9CiAKLQkKK2ludCByZWdpc3Rlcl9jYXBpY3RyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZjdHJfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcik7CisKK2ludCB1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmY3RyX25vdGlmaWVyX2xpc3QsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcik7CisKIC8qIC0tLS0tLS0tIFJlY2VpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZCByZWN2X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjczLDY4ICszMjIsNzAgQEAKIAogLyoqCiAgKiBjYXBpX2N0cl9oYW5kbGVfbWVzc2FnZSgpIC0gaGFuZGxlIGluY29taW5nIENBUEkgbWVzc2FnZQotICogQGNhcmQ6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBAY3RyOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICogQGFwcGw6CWFwcGxpY2F0aW9uIElELgogICogQHNrYjoJbWVzc2FnZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHBhc3MgYSBDQVBJIG1lc3NhZ2UgdG8gdGhlIGFwcGxpY2F0aW9uLgogICovCiAKLXZvaWQgY2FwaV9jdHJfaGFuZGxlX21lc3NhZ2Uoc3RydWN0IGNhcGlfY3RyICogY2FyZCwgdTE2IGFwcGwsIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlKHN0cnVjdCBjYXBpX2N0ciAqY3RyLCB1MTYgYXBwbCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwOwogCWludCBzaG93Y3RsID0gMDsKIAl1OCBjbWQsIHN1YmNtZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9jZGViYnVmICpjZGI7CiAKLQlpZiAoY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgeworCWlmIChjdHItPnN0YXRlICE9IENBUElfQ1RSX1JVTk5JTkcpIHsKIAkJY2RiID0gY2FwaV9tZXNzYWdlMnN0cihza2ItPmRhdGEpOwogCQlpZiAoY2RiKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJrY2FwaTogY29udHJvbGxlciBbJTAzZF0gbm90IGFjdGl2ZSwgZ290OiAlcyIsCi0JCQkJY2FyZC0+Y25yLCBjZGItPmJ1Zik7CisJCQkJY3RyLT5jbnIsIGNkYi0+YnVmKTsKIAkJCWNkZWJidWZfZnJlZShjZGIpOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gImtjYXBpOiBjb250cm9sbGVyIFslMDNkXSBub3QgYWN0aXZlLCBjYW5ub3QgdHJhY2VcbiIsCi0JCQkJY2FyZC0+Y25yKTsKKwkJCQljdHItPmNucik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJY21kID0gQ0FQSU1TR19DT01NQU5EKHNrYi0+ZGF0YSk7CiAgICAgICAgIHN1YmNtZCA9IENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpOwogCWlmIChjbWQgPT0gQ0FQSV9EQVRBX0IzICYmIHN1YmNtZCA9PSBDQVBJX0lORCkgewotCQljYXJkLT5ucmVjdmRhdGFwa3QrKzsKLQkgICAgICAgIGlmIChjYXJkLT50cmFjZWZsYWcgPiAyKSBzaG93Y3RsIHw9IDI7CisJCWN0ci0+bnJlY3ZkYXRhcGt0Kys7CisJCWlmIChjdHItPnRyYWNlZmxhZyA+IDIpCisJCQlzaG93Y3RsIHw9IDI7CiAJfSBlbHNlIHsKLQkJY2FyZC0+bnJlY3ZjdGxwa3QrKzsKLQkgICAgICAgIGlmIChjYXJkLT50cmFjZWZsYWcpIHNob3djdGwgfD0gMjsKKwkJY3RyLT5ucmVjdmN0bHBrdCsrOworCQlpZiAoY3RyLT50cmFjZWZsYWcpCisJCQlzaG93Y3RsIHw9IDI7CiAJfQotCXNob3djdGwgfD0gKGNhcmQtPnRyYWNlZmxhZyAmIDEpOworCXNob3djdGwgfD0gKGN0ci0+dHJhY2VmbGFnICYgMSk7CiAJaWYgKHNob3djdGwgJiAyKSB7CiAJCWlmIChzaG93Y3RsICYgMSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBnb3QgWyUwM2RdIGlkIyVkICVzIGxlbj0ldVxuIiwKLQkJCSAgICAgICBjYXJkLT5jbnIsIENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSwKKwkJCSAgICAgICBjdHItPmNuciwgQ0FQSU1TR19BUFBJRChza2ItPmRhdGEpLAogCQkJICAgICAgIGNhcGlfY21kMnN0cihjbWQsIHN1YmNtZCksCiAJCQkgICAgICAgQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7CiAJCX0gZWxzZSB7CiAJCQljZGIgPSBjYXBpX21lc3NhZ2Uyc3RyKHNrYi0+ZGF0YSk7CiAJCQlpZiAoY2RiKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBnb3QgWyUwM2RdICVzXG4iLAotCQkJCQljYXJkLT5jbnIsIGNkYi0+YnVmKTsKKwkJCQkJY3RyLT5jbnIsIGNkYi0+YnVmKTsKIAkJCQljZGViYnVmX2ZyZWUoY2RiKTsKIAkJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogZ290IFslMDNkXSBpZCMlZCAlcyBsZW49JXUsIGNhbm5vdCB0cmFjZVxuIiwKLQkJCQkJY2FyZC0+Y25yLCBDQVBJTVNHX0FQUElEKHNrYi0+ZGF0YSksCisJCQkJCWN0ci0+Y25yLCBDQVBJTVNHX0FQUElEKHNrYi0+ZGF0YSksCiAJCQkJCWNhcGlfY21kMnN0cihjbWQsIHN1YmNtZCksCiAJCQkJCUNBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwogCQl9CiAKIAl9CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOworCXJjdV9yZWFkX2xvY2soKTsKIAlhcCA9IGdldF9jYXBpX2FwcGxfYnlfbnIoQ0FQSU1TR19BUFBJRChza2ItPmRhdGEpKTsKLQlpZiAoKCFhcCkgfHwgKGFwLT5yZWxlYXNlX2luX3Byb2dyZXNzKSkgewotCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhcHBsaWNhdGlvbl9sb2NrLCBmbGFncyk7CisJaWYgKCFhcCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJY2RiID0gY2FwaV9tZXNzYWdlMnN0cihza2ItPmRhdGEpOwogCQlpZiAoY2RiKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImtjYXBpOiBoYW5kbGVfbWVzc2FnZTogYXBwbGlkICVkIHN0YXRlIHJlbGVhc2VkICglcylcbiIsCkBAIC0zNDgsNyArMzk5LDcgQEAKIAl9CiAJc2tiX3F1ZXVlX3RhaWwoJmFwLT5yZWN2X3F1ZXVlLCBza2IpOwogCXNjaGVkdWxlX3dvcmsoJmFwLT5yZWN2X3dvcmspOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybjsKIApAQCAtMzYwLDc0ICs0MTEsNTQgQEAKIAogLyoqCiAgKiBjYXBpX2N0cl9yZWFkeSgpIC0gc2lnbmFsIENBUEkgY29udHJvbGxlciByZWFkeQotICogQGNhcmQ6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBAY3RyOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICoKICAqIENhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgdG8gc2lnbmFsIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgdXAgYW5kIHJ1bm5pbmcuCiAgKi8KIAotdm9pZCBjYXBpX2N0cl9yZWFkeShzdHJ1Y3QgY2FwaV9jdHIgKiBjYXJkKQordm9pZCBjYXBpX2N0cl9yZWFkeShzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKLQljYXJkLT5jYXJkc3RhdGUgPSBDQVJEX1JVTk5JTkc7CisJcHJpbnRrKEtFUk5fTk9USUNFICJrY2FwaTogY29udHJvbGxlciBbJTAzZF0gXCIlc1wiIHJlYWR5LlxuIiwKKwkgICAgICAgY3RyLT5jbnIsIGN0ci0+bmFtZSk7CiAKLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJrY2FwaTogY2FyZCBbJTAzZF0gXCIlc1wiIHJlYWR5LlxuIiwKLQkgICAgICAgY2FyZC0+Y25yLCBjYXJkLT5uYW1lKTsKLQotCW5vdGlmeV9wdXNoKEtDSV9DT05UUlVQLCBjYXJkLT5jbnIsIDAsIDApOworCW5vdGlmeV9wdXNoKENBUElDVFJfVVAsIGN0ci0+Y25yKTsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpX2N0cl9yZWFkeSk7CiAKIC8qKgogICogY2FwaV9jdHJfZG93bigpIC0gc2lnbmFsIENBUEkgY29udHJvbGxlciBub3QgcmVhZHkKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHNpZ25hbCB0aGF0IHRoZSBjb250cm9sbGVyIGlzIGRvd24gYW5kCiAgKiB1bmF2YWlsYWJsZSBmb3IgdXNlLgogICovCiAKLXZvaWQgY2FwaV9jdHJfZG93bihzdHJ1Y3QgY2FwaV9jdHIgKiBjYXJkKQordm9pZCBjYXBpX2N0cl9kb3duKHN0cnVjdCBjYXBpX2N0ciAqY3RyKQogewotCXUxNiBhcHBsOworCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdIGRvd24uXG4iLCBjdHItPmNucik7CiAKLQlEQkcoIiIpOwotCi0gICAgICAgIGlmIChjYXJkLT5jYXJkc3RhdGUgPT0gQ0FSRF9ERVRFQ1RFRCkKLQkJcmV0dXJuOwotCi0gICAgICAgIGNhcmQtPmNhcmRzdGF0ZSA9IENBUkRfREVURUNURUQ7Ci0KLQltZW1zZXQoY2FyZC0+bWFudSwgMCwgc2l6ZW9mKGNhcmQtPm1hbnUpKTsKLQltZW1zZXQoJmNhcmQtPnZlcnNpb24sIDAsIHNpemVvZihjYXJkLT52ZXJzaW9uKSk7Ci0JbWVtc2V0KCZjYXJkLT5wcm9maWxlLCAwLCBzaXplb2YoY2FyZC0+cHJvZmlsZSkpOwotCW1lbXNldChjYXJkLT5zZXJpYWwsIDAsIHNpemVvZihjYXJkLT5zZXJpYWwpKTsKLQotCWZvciAoYXBwbCA9IDE7IGFwcGwgPD0gQ0FQSV9NQVhBUFBMOyBhcHBsKyspIHsKLQkJc3RydWN0IGNhcGkyMF9hcHBsICphcCA9IGdldF9jYXBpX2FwcGxfYnlfbnIoYXBwbCk7Ci0JCWlmICghYXAgfHwgYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MpCi0JCQljb250aW51ZTsKLQotCQljYXBpX2N0cl9wdXQoY2FyZCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJrY2FwaTogY2FyZCBbJTAzZF0gZG93bi5cbiIsIGNhcmQtPmNucik7Ci0KLQlub3RpZnlfcHVzaChLQ0lfQ09OVFJET1dOLCBjYXJkLT5jbnIsIDAsIDApOworCW5vdGlmeV9wdXNoKENBUElDVFJfRE9XTiwgY3RyLT5jbnIpOwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGlfY3RyX2Rvd24pOwogCiAvKioKICAqIGNhcGlfY3RyX3N1c3BlbmRfb3V0cHV0KCkgLSBzdXNwZW5kIGNvbnRyb2xsZXIKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHN0b3AgZGF0YSBmbG93LgorICoKKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN5bmNocm9uaXppbmcgY29uY3VycmVudCBzdGF0ZSBjaGFuZ2VzCisgKiBhcyB3ZWxsIGFzIGludm9jYXRpb25zIG9mIGNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlLgogICovCiAKLXZvaWQgY2FwaV9jdHJfc3VzcGVuZF9vdXRwdXQoc3RydWN0IGNhcGlfY3RyICpjYXJkKQordm9pZCBjYXBpX2N0cl9zdXNwZW5kX291dHB1dChzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKLQlpZiAoIWNhcmQtPmJsb2NrZWQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBjYXJkIFslMDNkXSBzdXNwZW5kXG4iLCBjYXJkLT5jbnIpOwotCQljYXJkLT5ibG9ja2VkID0gMTsKKwlpZiAoIWN0ci0+YmxvY2tlZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdIHN1c3BlbmRcbiIsCisJCSAgICAgICBjdHItPmNucik7CisJCWN0ci0+YmxvY2tlZCA9IDE7CiAJfQogfQogCkBAIC00MzUsMTYgKzQ2NiwyMCBAQAogCiAvKioKICAqIGNhcGlfY3RyX3Jlc3VtZV9vdXRwdXQoKSAtIHJlc3VtZSBjb250cm9sbGVyCi0gKiBAY2FyZDoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KKyAqIEBjdHI6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKgogICogQ2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB0byByZXN1bWUgZGF0YSBmbG93LgorICoKKyAqIE5vdGU6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN5bmNocm9uaXppbmcgY29uY3VycmVudCBzdGF0ZSBjaGFuZ2VzCisgKiBhcyB3ZWxsIGFzIGludm9jYXRpb25zIG9mIGNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlLgogICovCiAKLXZvaWQgY2FwaV9jdHJfcmVzdW1lX291dHB1dChzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQpCit2b2lkIGNhcGlfY3RyX3Jlc3VtZV9vdXRwdXQoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7Ci0JaWYgKGNhcmQtPmJsb2NrZWQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBjYXJkIFslMDNkXSByZXN1bWVcbiIsIGNhcmQtPmNucik7Ci0JCWNhcmQtPmJsb2NrZWQgPSAwOworCWlmIChjdHItPmJsb2NrZWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBjb250cm9sbGVyIFslMDNkXSByZXN1bWVkXG4iLAorCQkgICAgICAgY3RyLT5jbnIpOworCQljdHItPmJsb2NrZWQgPSAwOwogCX0KIH0KIApAQCAtNDU0LDUzICs0ODksNDggQEAKIAogLyoqCiAgKiBhdHRhY2hfY2FwaV9jdHIoKSAtIHJlZ2lzdGVyIENBUEkgY29udHJvbGxlcgotICogQGNhcmQ6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBAY3RyOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICoKICAqIENhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgdG8gcmVnaXN0ZXIgYSBjb250cm9sbGVyIHdpdGggdGhlIENBUEkgc3Vic3lzdGVtLgogICogUmV0dXJuIHZhbHVlOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgPCAwIG9uIGVycm9yCiAgKi8KIAotaW50Ci1hdHRhY2hfY2FwaV9jdHIoc3RydWN0IGNhcGlfY3RyICpjYXJkKQoraW50IGF0dGFjaF9jYXBpX2N0cihzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKIAlpbnQgaTsKIAotCW11dGV4X2xvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBDQVBJX01BWENPTlRSOyBpKyspIHsKLQkJaWYgKGNhcGlfY2FyZHNbaV0gPT0gTlVMTCkKKwkJaWYgKCFjYXBpX2NvbnRyb2xsZXJbaV0pCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gQ0FQSV9NQVhDT05UUikgewotCQltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJrY2FwaTogb3V0IG9mIGNvbnRyb2xsZXIgc2xvdHNcbiIpOwogCSAgIAlyZXR1cm4gLUVCVVNZOwogCX0KLQljYXBpX2NhcmRzW2ldID0gY2FyZDsKKwljYXBpX2NvbnRyb2xsZXJbaV0gPSBjdHI7CiAKLQltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCWN0ci0+bnJlY3ZjdGxwa3QgPSAwOworCWN0ci0+bnJlY3ZkYXRhcGt0ID0gMDsKKwljdHItPm5zZW50Y3RscGt0ID0gMDsKKwljdHItPm5zZW50ZGF0YXBrdCA9IDA7CisJY3RyLT5jbnIgPSBpICsgMTsKKwljdHItPnN0YXRlID0gQ0FQSV9DVFJfREVURUNURUQ7CisJY3RyLT5ibG9ja2VkID0gMDsKKwljdHItPnRyYWNlZmxhZyA9IHNob3djYXBpbXNnczsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHItPnN0YXRlX3dhaXRfcXVldWUpOwogCi0JY2FyZC0+bnJlY3ZjdGxwa3QgPSAwOwotCWNhcmQtPm5yZWN2ZGF0YXBrdCA9IDA7Ci0JY2FyZC0+bnNlbnRjdGxwa3QgPSAwOwotCWNhcmQtPm5zZW50ZGF0YXBrdCA9IDA7Ci0JY2FyZC0+Y25yID0gaSArIDE7Ci0JY2FyZC0+Y2FyZHN0YXRlID0gQ0FSRF9ERVRFQ1RFRDsKLQljYXJkLT5ibG9ja2VkID0gMDsKLQljYXJkLT50cmFjZWZsYWcgPSBzaG93Y2FwaW1zZ3M7CisJc3ByaW50ZihjdHItPnByb2NmbiwgImNhcGkvY29udHJvbGxlcnMvJWQiLCBjdHItPmNucik7CisJY3RyLT5wcm9jZW50ID0gcHJvY19jcmVhdGVfZGF0YShjdHItPnByb2NmbiwgMCwgTlVMTCwgY3RyLT5wcm9jX2ZvcHMsIGN0cik7CiAKLQlzcHJpbnRmKGNhcmQtPnByb2NmbiwgImNhcGkvY29udHJvbGxlcnMvJWQiLCBjYXJkLT5jbnIpOwotCWNhcmQtPnByb2NlbnQgPSBjcmVhdGVfcHJvY19lbnRyeShjYXJkLT5wcm9jZm4sIDAsIE5VTEwpOwotCWlmIChjYXJkLT5wcm9jZW50KSB7Ci0JICAgY2FyZC0+cHJvY2VudC0+cmVhZF9wcm9jID0gCi0JCShpbnQgKCopKGNoYXIgKixjaGFyICoqLG9mZl90LGludCxpbnQgKix2b2lkICopKQotCQkJY2FyZC0+Y3RyX3JlYWRfcHJvYzsKLQkgICBjYXJkLT5wcm9jZW50LT5kYXRhID0gY2FyZDsKLQl9CisJbmNvbnRyb2xsZXJzKys7CiAKLQluY2FyZHMrKzsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImtjYXBpOiBDb250cm9sbGVyIFslMDNkXTogJXMgYXR0YWNoZWRcbiIsCi0JCQljYXJkLT5jbnIsIGNhcmQtPm5hbWUpOworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJrY2FwaTogY29udHJvbGxlciBbJTAzZF06ICVzIGF0dGFjaGVkXG4iLAorCQkJY3RyLT5jbnIsIGN0ci0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwOCwyOSArNTM4LDM4IEBACiAKIC8qKgogICogZGV0YWNoX2NhcGlfY3RyKCkgLSB1bnJlZ2lzdGVyIENBUEkgY29udHJvbGxlcgotICogQGNhcmQ6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBAY3RyOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICoKICAqIENhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gb2YgYSBjb250cm9sbGVyCiAgKiB3aXRoIHRoZSBDQVBJIHN1YnN5c3RlbS4KICAqIFJldHVybiB2YWx1ZTogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIDwgMCBvbiBlcnJvcgogICovCiAKLWludCBkZXRhY2hfY2FwaV9jdHIoc3RydWN0IGNhcGlfY3RyICpjYXJkKQoraW50IGRldGFjaF9jYXBpX2N0cihzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKLSAgICAgICAgaWYgKGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX0RFVEVDVEVEKQotCQljYXBpX2N0cl9kb3duKGNhcmQpOworCWludCBlcnIgPSAwOwogCi0JbmNhcmRzLS07CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCi0JaWYgKGNhcmQtPnByb2NlbnQpIHsKLQkgICByZW1vdmVfcHJvY19lbnRyeShjYXJkLT5wcm9jZm4sIE5VTEwpOwotCSAgIGNhcmQtPnByb2NlbnQgPSBOVUxMOworCWN0cl9kb3duKGN0ciwgQ0FQSV9DVFJfREVUQUNIRUQpOworCisJaWYgKGNhcGlfY29udHJvbGxlcltjdHItPmNuciAtIDFdICE9IGN0cikgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIHVubG9ja19vdXQ7CiAJfQotCWNhcGlfY2FyZHNbY2FyZC0+Y25yIC0gMV0gPSBOVUxMOwotCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IENvbnRyb2xsZXIgWyUwM2RdOiAlcyB1bnJlZ2lzdGVyZWRcbiIsCi0JCQljYXJkLT5jbnIsIGNhcmQtPm5hbWUpOworCWNhcGlfY29udHJvbGxlcltjdHItPmNuciAtIDFdID0gTlVMTDsKKwluY29udHJvbGxlcnMtLTsKIAotCXJldHVybiAwOworCWlmIChjdHItPnByb2NlbnQpCisJCXJlbW92ZV9wcm9jX2VudHJ5KGN0ci0+cHJvY2ZuLCBOVUxMKTsKKworCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdOiAlcyB1bnJlZ2lzdGVyZWRcbiIsCisJICAgICAgIGN0ci0+Y25yLCBjdHItPm5hbWUpOworCit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJcmV0dXJuIGVycjsKIH0KIAogRVhQT1JUX1NZTUJPTChkZXRhY2hfY2FwaV9jdHIpOwpAQCAtNTQ0LDExICs1ODMsOSBAQAogCiB2b2lkIHJlZ2lzdGVyX2NhcGlfZHJpdmVyKHN0cnVjdCBjYXBpX2RyaXZlciAqZHJpdmVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZHJpdmVyLT5saXN0LCAmY2FwaV9kcml2ZXJzKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2NhcGlfZHJpdmVyKTsKQEAgLTU2MiwxMSArNTk5LDkgQEAKIAogdm9pZCB1bnJlZ2lzdGVyX2NhcGlfZHJpdmVyKHN0cnVjdCBjYXBpX2RyaXZlciAqZHJpdmVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CiAJbGlzdF9kZWwoJmRyaXZlci0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKIH0KIAogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2NhcGlfZHJpdmVyKTsKQEAgLTU4NCwxMiArNjE5LDIxIEBACiAKIHUxNiBjYXBpMjBfaXNpbnN0YWxsZWQodm9pZCkKIHsKKwl1MTYgcmV0ID0gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IENBUElfTUFYQ09OVFI7IGkrKykgewotCQlpZiAoY2FwaV9jYXJkc1tpXSAmJiBjYXBpX2NhcmRzW2ldLT5jYXJkc3RhdGUgPT0gQ0FSRF9SVU5OSU5HKQotCQkJcmV0dXJuIENBUElfTk9FUlJPUjsKLQl9Ci0JcmV0dXJuIENBUElfUkVHTk9USU5TVEFMTEVEOworCisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IENBUElfTUFYQ09OVFI7IGkrKykKKwkJaWYgKGNhcGlfY29udHJvbGxlcltpXSAmJgorCQkgICAgY2FwaV9jb250cm9sbGVyW2ldLT5zdGF0ZSA9PSBDQVBJX0NUUl9SVU5OSU5HKSB7CisJCQlyZXQgPSBDQVBJX05PRVJST1I7CisJCQlicmVhazsKKwkJfQorCisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGkyMF9pc2luc3RhbGxlZCk7CkBAIC02MTAsNDYgKzY1NCw0MyBAQAogewogCWludCBpOwogCXUxNiBhcHBsaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCURCRygiIik7CiAKIAlpZiAoYXAtPnJwYXJhbS5kYXRhYmxrbGVuIDwgMTI4KQogCQlyZXR1cm4gQ0FQSV9MT0dCTEtTSVpFVE9TTUFMTDsKIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOworCWFwLT5ucmVjdmN0bHBrdCA9IDA7CisJYXAtPm5yZWN2ZGF0YXBrdCA9IDA7CisJYXAtPm5zZW50Y3RscGt0ID0gMDsKKwlhcC0+bnNlbnRkYXRhcGt0ID0gMDsKKwltdXRleF9pbml0KCZhcC0+cmVjdl9tdHgpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFwLT5yZWN2X3F1ZXVlKTsKKwlJTklUX1dPUksoJmFwLT5yZWN2X3dvcmssIHJlY3ZfaGFuZGxlcik7CisJYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MgPSAwOworCisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCiAJZm9yIChhcHBsaWQgPSAxOyBhcHBsaWQgPD0gQ0FQSV9NQVhBUFBMOyBhcHBsaWQrKykgewogCQlpZiAoY2FwaV9hcHBsaWNhdGlvbnNbYXBwbGlkIC0gMV0gPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KIAlpZiAoYXBwbGlkID4gQ0FQSV9NQVhBUFBMKSB7Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhcHBsaWNhdGlvbl9sb2NrLCBmbGFncyk7CisJCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCQlyZXR1cm4gQ0FQSV9UT09NQU5ZQVBQTFM7CiAJfQogCiAJYXAtPmFwcGxpZCA9IGFwcGxpZDsKIAljYXBpX2FwcGxpY2F0aW9uc1thcHBsaWQgLSAxXSA9IGFwOwogCi0JYXAtPm5yZWN2Y3RscGt0ID0gMDsKLQlhcC0+bnJlY3ZkYXRhcGt0ID0gMDsKLQlhcC0+bnNlbnRjdGxwa3QgPSAwOwotCWFwLT5uc2VudGRhdGFwa3QgPSAwOwotCWFwLT5jYWxsYmFjayA9IE5VTEw7Ci0JbXV0ZXhfaW5pdCgmYXAtPnJlY3ZfbXR4KTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZhcC0+cmVjdl9xdWV1ZSk7Ci0JSU5JVF9XT1JLKCZhcC0+cmVjdl93b3JrLCByZWN2X2hhbmRsZXIpOwotCWFwLT5yZWxlYXNlX2luX3Byb2dyZXNzID0gMDsKLQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhcHBsaWNhdGlvbl9sb2NrLCBmbGFncyk7Ci0JCi0JbXV0ZXhfbG9jaygmY29udHJvbGxlcl9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IENBUElfTUFYQ09OVFI7IGkrKykgewotCQlpZiAoIWNhcGlfY2FyZHNbaV0gfHwgY2FwaV9jYXJkc1tpXS0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykKKwkJaWYgKCFjYXBpX2NvbnRyb2xsZXJbaV0gfHwKKwkJICAgIGNhcGlfY29udHJvbGxlcltpXS0+c3RhdGUgIT0gQ0FQSV9DVFJfUlVOTklORykKIAkJCWNvbnRpbnVlOwotCQlyZWdpc3Rlcl9hcHBsKGNhcGlfY2FyZHNbaV0sIGFwcGxpZCwgJmFwLT5ycGFyYW0pOworCQlyZWdpc3Rlcl9hcHBsKGNhcGlfY29udHJvbGxlcltpXSwgYXBwbGlkLCAmYXAtPnJwYXJhbSk7CiAJfQotCW11dGV4X3VubG9jaygmY29udHJvbGxlcl9tdXRleCk7CisKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAogCWlmIChzaG93Y2FwaW1zZ3MgJiAxKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogYXBwbCAlZCB1cFxuIiwgYXBwbGlkKTsKQEAgLTY3MywyMiArNzE0LDI0IEBACiB1MTYgY2FwaTIwX3JlbGVhc2Uoc3RydWN0IGNhcGkyMF9hcHBsICphcCkKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJREJHKCJhcHBsaWQgJSN4IiwgYXAtPmFwcGxpZCk7CiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKIAlhcC0+cmVsZWFzZV9pbl9wcm9ncmVzcyA9IDE7CiAJY2FwaV9hcHBsaWNhdGlvbnNbYXAtPmFwcGxpZCAtIDFdID0gTlVMTDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOwogCi0JbXV0ZXhfbG9jaygmY29udHJvbGxlcl9tdXRleCk7CisJc3luY2hyb25pemVfcmN1KCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQ0FQSV9NQVhDT05UUjsgaSsrKSB7Ci0JCWlmICghY2FwaV9jYXJkc1tpXSB8fCBjYXBpX2NhcmRzW2ldLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKQorCQlpZiAoIWNhcGlfY29udHJvbGxlcltpXSB8fAorCQkgICAgY2FwaV9jb250cm9sbGVyW2ldLT5zdGF0ZSAhPSBDQVBJX0NUUl9SVU5OSU5HKQogCQkJY29udGludWU7Ci0JCXJlbGVhc2VfYXBwbChjYXBpX2NhcmRzW2ldLCBhcC0+YXBwbGlkKTsKKwkJcmVsZWFzZV9hcHBsKGNhcGlfY29udHJvbGxlcltpXSwgYXAtPmFwcGxpZCk7CiAJfQotCW11dGV4X3VubG9jaygmY29udHJvbGxlcl9tdXRleCk7CisKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhcC0+cmVjdl9xdWV1ZSk7CkBAIC03MTMsMTMgKzc1NiwxMyBAQAogCiB1MTYgY2FwaTIwX3B1dF9tZXNzYWdlKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOwogCWludCBzaG93Y3RsID0gMDsKIAl1OCBjbWQsIHN1YmNtZDsKIAogCURCRygiYXBwbGlkICUjeCIsIGFwLT5hcHBsaWQpOwogIAotCWlmIChuY2FyZHMgPT0gMCkKKwlpZiAobmNvbnRyb2xsZXJzID09IDApCiAJCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKIAlpZiAoKGFwLT5hcHBsaWQgPT0gMCkgfHwgYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MpCiAJCXJldHVybiBDQVBJX0lMTEFQUE5SOwpAQCAtNzI3LDI4ICs3NzAsMzMgQEAKIAkgICAgfHwgIWNhcGlfY21kX3ZhbGlkKENBUElNU0dfQ09NTUFORChza2ItPmRhdGEpKQogCSAgICB8fCAhY2FwaV9zdWJjbWRfdmFsaWQoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkpKQogCQlyZXR1cm4gQ0FQSV9JTExDTURPUlNVQkNNRE9STVNHVE9TTUFMTDsKLQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKENBUElNU0dfQ09OVFJPTExFUihza2ItPmRhdGEpKTsKLQlpZiAoIWNhcmQgfHwgY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgewotCQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKDEpOyAvLyBYWFggd2h5PwotCSAgICAgICAgaWYgKCFjYXJkIHx8IGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIAotCQkJcmV0dXJuIENBUElfUkVHTk9USU5TVEFMTEVEOwotCX0KLQlpZiAoY2FyZC0+YmxvY2tlZCkKKworCS8qCisJICogVGhlIGNvbnRyb2xsZXIgcmVmZXJlbmNlIGlzIHByb3RlY3RlZCBieSB0aGUgZXhpc3RlbmNlIG9mIHRoZQorCSAqIGFwcGxpY2F0aW9uIHBhc3NlZCB0byB1cy4gV2UgYXNzdW1lIHRoYXQgdGhlIGNhbGxlciBwcm9wZXJseQorCSAqIHN5bmNocm9uaXplcyB0aGlzIHNlcnZpY2Ugd2l0aCBjYXBpMjBfcmVsZWFzZS4KKwkgKi8KKwljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoQ0FQSU1TR19DT05UUk9MTEVSKHNrYi0+ZGF0YSkpOworCWlmICghY3RyIHx8IGN0ci0+c3RhdGUgIT0gQ0FQSV9DVFJfUlVOTklORykKKwkJcmV0dXJuIENBUElfUkVHTk9USU5TVEFMTEVEOworCWlmIChjdHItPmJsb2NrZWQpCiAJCXJldHVybiBDQVBJX1NFTkRRVUVVRUZVTEw7CiAKIAljbWQgPSBDQVBJTVNHX0NPTU1BTkQoc2tiLT5kYXRhKTsKICAgICAgICAgc3ViY21kID0gQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSk7CiAKIAlpZiAoY21kID09IENBUElfREFUQV9CMyAmJiBzdWJjbWQ9PSBDQVBJX1JFUSkgewotCQljYXJkLT5uc2VudGRhdGFwa3QrKzsKKwkJY3RyLT5uc2VudGRhdGFwa3QrKzsKIAkJYXAtPm5zZW50ZGF0YXBrdCsrOwotCSAgICAgICAgaWYgKGNhcmQtPnRyYWNlZmxhZyA+IDIpIHNob3djdGwgfD0gMjsKKwkJaWYgKGN0ci0+dHJhY2VmbGFnID4gMikKKwkJCXNob3djdGwgfD0gMjsKIAl9IGVsc2UgewotCQljYXJkLT5uc2VudGN0bHBrdCsrOworCQljdHItPm5zZW50Y3RscGt0Kys7CiAJCWFwLT5uc2VudGN0bHBrdCsrOwotCSAgICAgICAgaWYgKGNhcmQtPnRyYWNlZmxhZykgc2hvd2N0bCB8PSAyOworCQlpZiAoY3RyLT50cmFjZWZsYWcpCisJCQlzaG93Y3RsIHw9IDI7CiAJfQotCXNob3djdGwgfD0gKGNhcmQtPnRyYWNlZmxhZyAmIDEpOworCXNob3djdGwgfD0gKGN0ci0+dHJhY2VmbGFnICYgMSk7CiAJaWYgKHNob3djdGwgJiAyKSB7CiAJCWlmIChzaG93Y3RsICYgMSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBwdXQgWyUwM2RdIGlkIyVkICVzIGxlbj0ldVxuIiwKQEAgLTc3MSw3ICs4MTksNyBAQAogCQkJCQlDQVBJTVNHX0xFTihza2ItPmRhdGEpKTsKIAkJfQogCX0KLQlyZXR1cm4gY2FyZC0+c2VuZF9tZXNzYWdlKGNhcmQsIHNrYik7CisJcmV0dXJuIGN0ci0+c2VuZF9tZXNzYWdlKGN0ciwgc2tiKTsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpMjBfcHV0X21lc3NhZ2UpOwpAQCAtNzg4LDE3ICs4MzYsMjUgQEAKIAogdTE2IGNhcGkyMF9nZXRfbWFudWZhY3R1cmVyKHUzMiBjb250ciwgdTggKmJ1ZikKIHsKLQlzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQ7CisJc3RydWN0IGNhcGlfY3RyICpjdHI7CisJdTE2IHJldDsKIAogCWlmIChjb250ciA9PSAwKSB7CiAJCXN0cmxjcHkoYnVmLCBjYXBpX21hbnVmYWt0dXJlciwgQ0FQSV9NQU5VRkFDVFVSRVJfTEVOKTsKIAkJcmV0dXJuIENBUElfTk9FUlJPUjsKIAl9Ci0JY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7Ci0JaWYgKCFjYXJkIHx8IGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIAotCQlyZXR1cm4gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7Ci0Jc3RybGNweShidWYsIGNhcmQtPm1hbnUsIENBUElfTUFOVUZBQ1RVUkVSX0xFTik7Ci0JcmV0dXJuIENBUElfTk9FUlJPUjsKKworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKworCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7CisJaWYgKGN0ciAmJiBjdHItPnN0YXRlID09IENBUElfQ1RSX1JVTk5JTkcpIHsKKwkJc3RybGNweShidWYsIGN0ci0+bWFudSwgQ0FQSV9NQU5VRkFDVFVSRVJfTEVOKTsKKwkJcmV0ID0gQ0FQSV9OT0VSUk9SOworCX0gZWxzZQorCQlyZXQgPSBDQVBJX1JFR05PVElOU1RBTExFRDsKKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX2dldF9tYW51ZmFjdHVyZXIpOwpAQCAtODE1LDE4ICs4NzEsMjUgQEAKIAogdTE2IGNhcGkyMF9nZXRfdmVyc2lvbih1MzIgY29udHIsIHN0cnVjdCBjYXBpX3ZlcnNpb24gKnZlcnApCiB7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOworCXUxNiByZXQ7CiAKIAlpZiAoY29udHIgPT0gMCkgewogCQkqdmVycCA9IGRyaXZlcl92ZXJzaW9uOwogCQlyZXR1cm4gQ0FQSV9OT0VSUk9SOwogCX0KLQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKLQlpZiAoIWNhcmQgfHwgY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgCi0JCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKIAotCW1lbWNweSgodm9pZCAqKSB2ZXJwLCAmY2FyZC0+dmVyc2lvbiwgc2l6ZW9mKGNhcGlfdmVyc2lvbikpOwotCXJldHVybiBDQVBJX05PRVJST1I7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlpZiAoY3RyICYmIGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfUlVOTklORykgeworCQltZW1jcHkodmVycCwgJmN0ci0+dmVyc2lvbiwgc2l6ZW9mKGNhcGlfdmVyc2lvbikpOworCQlyZXQgPSBDQVBJX05PRVJST1I7CisJfSBlbHNlCisJCXJldCA9IENBUElfUkVHTk9USU5TVEFMTEVEOworCisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpMjBfZ2V0X3ZlcnNpb24pOwpAQCAtODQzLDE4ICs5MDYsMjUgQEAKIAogdTE2IGNhcGkyMF9nZXRfc2VyaWFsKHUzMiBjb250ciwgdTggKnNlcmlhbCkKIHsKLQlzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQ7CisJc3RydWN0IGNhcGlfY3RyICpjdHI7CisJdTE2IHJldDsKIAogCWlmIChjb250ciA9PSAwKSB7CiAJCXN0cmxjcHkoc2VyaWFsLCBkcml2ZXJfc2VyaWFsLCBDQVBJX1NFUklBTF9MRU4pOwogCQlyZXR1cm4gQ0FQSV9OT0VSUk9SOwogCX0KLQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKLQlpZiAoIWNhcmQgfHwgY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgCi0JCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKIAotCXN0cmxjcHkoKHZvaWQgKikgc2VyaWFsLCBjYXJkLT5zZXJpYWwsIENBUElfU0VSSUFMX0xFTik7Ci0JcmV0dXJuIENBUElfTk9FUlJPUjsKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOworCWlmIChjdHIgJiYgY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9SVU5OSU5HKSB7CisJCXN0cmxjcHkoc2VyaWFsLCBjdHItPnNlcmlhbCwgQ0FQSV9TRVJJQUxfTEVOKTsKKwkJcmV0ID0gQ0FQSV9OT0VSUk9SOworCX0gZWxzZQorCQlyZXQgPSBDQVBJX1JFR05PVElOU1RBTExFRDsKKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX2dldF9zZXJpYWwpOwpAQCAtODcxLDIzICs5NDEsNjUgQEAKIAogdTE2IGNhcGkyMF9nZXRfcHJvZmlsZSh1MzIgY29udHIsIHN0cnVjdCBjYXBpX3Byb2ZpbGUgKnByb2ZwKQogewotCXN0cnVjdCBjYXBpX2N0ciAqY2FyZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKKwl1MTYgcmV0OwogCiAJaWYgKGNvbnRyID09IDApIHsKLQkJcHJvZnAtPm5jb250cm9sbGVyID0gbmNhcmRzOworCQlwcm9mcC0+bmNvbnRyb2xsZXIgPSBuY29udHJvbGxlcnM7CiAJCXJldHVybiBDQVBJX05PRVJST1I7CiAJfQotCWNhcmQgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOwotCWlmICghY2FyZCB8fCBjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKSAKLQkJcmV0dXJuIENBUElfUkVHTk9USU5TVEFMTEVEOwogCi0JbWVtY3B5KCh2b2lkICopIHByb2ZwLCAmY2FyZC0+cHJvZmlsZSwKLQkJCXNpemVvZihzdHJ1Y3QgY2FwaV9wcm9maWxlKSk7Ci0JcmV0dXJuIENBUElfTk9FUlJPUjsKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOworCWlmIChjdHIgJiYgY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9SVU5OSU5HKSB7CisJCW1lbWNweShwcm9mcCwgJmN0ci0+cHJvZmlsZSwgc2l6ZW9mKHN0cnVjdCBjYXBpX3Byb2ZpbGUpKTsKKwkJcmV0ID0gQ0FQSV9OT0VSUk9SOworCX0gZWxzZQorCQlyZXQgPSBDQVBJX1JFR05PVElOU1RBTExFRDsKKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX2dldF9wcm9maWxlKTsKIAorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjYXBpX2NvbnRyb2xsZXJfbG9jayBoZWxkLiAqLworc3RhdGljIGludCB3YWl0X29uX2N0cl9zdGF0ZShzdHJ1Y3QgY2FwaV9jdHIgKmN0ciwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCURFRklORV9XQUlUKHdhaXQpOworCWludCByZXR2YWwgPSAwOworCisJY3RyID0gY2FwaV9jdHJfZ2V0KGN0cik7CisJaWYgKCFjdHIpCisJCXJldHVybiAtRVNSQ0g7CisKKwlmb3IgKDs7KSB7CisJCXByZXBhcmVfdG9fd2FpdCgmY3RyLT5zdGF0ZV93YWl0X3F1ZXVlLCAmd2FpdCwKKwkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCWlmIChjdHItPnN0YXRlID09IHN0YXRlKQorCQkJYnJlYWs7CisJCWlmIChjdHItPnN0YXRlID09IENBUElfQ1RSX0RFVEFDSEVEKSB7CisJCQlyZXR2YWwgPSAtRVNSQ0g7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CisKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisJCXNjaGVkdWxlKCk7CisJCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwl9CisJZmluaXNoX3dhaXQoJmN0ci0+c3RhdGVfd2FpdF9xdWV1ZSwgJndhaXQpOworCisJY2FwaV9jdHJfcHV0KGN0cik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAjaWZkZWYgQVZNQjFfQ09NUEFUCiBzdGF0aWMgaW50IG9sZF9jYXBpX21hbnVmYWN0dXJlcih1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqZGF0YSkKIHsKQEAgLTg5NSwxMSArMTAwNywxMCBAQAogCWF2bWIxX2V4dGNhcmRkZWYgY2RlZjsKIAlhdm1iMV9yZXNldGRlZiByZGVmOwogCWNhcGljYXJkcGFyYW1zIGNwYXJhbXM7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOwogCXN0cnVjdCBjYXBpX2RyaXZlciAqZHJpdmVyID0gTlVMTDsKIAljYXBpbG9hZGRhdGEgbGRhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWw7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtOTE5LDcgKzEwMzAsOCBAQAogCQljcGFyYW1zLmlycSA9IGNkZWYuaXJxOwogCQljcGFyYW1zLmNhcmRuciA9IGNkZWYuY2FyZG5yOwogCi0JCXJlYWRfbG9ja19pcnFzYXZlKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrLCBmbGFncyk7CisJCW11dGV4X2xvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKKwogICAgICAgICAgICAgICAgIHN3aXRjaCAoY2RlZi5jYXJkdHlwZSkgewogCQkJY2FzZSBBVk1fQ0FSRFRZUEVfQjE6CiAJCQkJbGlzdF9mb3JfZWFjaChsLCAmY2FwaV9kcml2ZXJzKSB7CkBAIC05NDAsMTggKzEwNTIsMTUgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoIWRyaXZlcikgewotCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaywgZmxhZ3MpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJrY2FwaTogZHJpdmVyIG5vdCBsb2FkZWQuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCWlmICghZHJpdmVyLT5hZGRfY2FyZCkgewotCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaywgZmxhZ3MpOworCQkJcmV0dmFsID0gLUVJTzsKKwkJfSBlbHNlIGlmICghZHJpdmVyLT5hZGRfY2FyZCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJrY2FwaTogZHJpdmVyIGhhcyBubyBhZGQgY2FyZCBmdW5jdGlvbi5cbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwkJCXJldHZhbCA9IC1FSU87CisJCX0gZWxzZQorCQkJcmV0dmFsID0gZHJpdmVyLT5hZGRfY2FyZChkcml2ZXIsICZjcGFyYW1zKTsKIAotCQlyZXR2YWwgPSBkcml2ZXItPmFkZF9jYXJkKGRyaXZlciwgJmNwYXJhbXMpOwotCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrLCBmbGFncyk7CisJCW11dGV4X3VubG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBBVk1CMV9MT0FEOgpAQCAtOTY4LDI3ICsxMDc3LDMwIEBACiAJCQkJCSAgIHNpemVvZihhdm1iMV9sb2FkYW5kY29uZmlnZGVmKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihsZGVmLmNvbnRyKTsKLQkJaWYgKCFjYXJkKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNhcmQgPSBjYXBpX2N0cl9nZXQoY2FyZCk7Ci0JCWlmICghY2FyZCkKLQkJCXJldHVybiAtRVNSQ0g7Ci0JCWlmIChjYXJkLT5sb2FkX2Zpcm13YXJlID09IE5VTEwpIHsKKworCQltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwkJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGxkZWYuY29udHIpOworCQlpZiAoIWN0cikgeworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gbG9hZF91bmxvY2tfb3V0OworCQl9CisKKwkJaWYgKGN0ci0+bG9hZF9maXJtd2FyZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGxvYWQ6IG5vIGxvYWQgZnVuY3Rpb25cbiIpOwotCQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQkJcmV0dXJuIC1FU1JDSDsKKwkJCXJldHZhbCA9IC1FU1JDSDsKKwkJCWdvdG8gbG9hZF91bmxvY2tfb3V0OwogCQl9CiAKIAkJaWYgKGxkZWYudDRmaWxlLmxlbiA8PSAwKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGxvYWQ6IGludmFsaWQgcGFyYW1ldGVyOiBsZW5ndGggb2YgdDRmaWxlIGlzICVkID9cbiIsIGxkZWYudDRmaWxlLmxlbik7Ci0JCQljYXBpX2N0cl9wdXQoY2FyZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGxvYWRfdW5sb2NrX291dDsKIAkJfQogCQlpZiAobGRlZi50NGZpbGUuZGF0YSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGxvYWQ6IGludmFsaWQgcGFyYW1ldGVyOiBkYXRhcHRyIGlzIDBcbiIpOwotCQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBsb2FkX3VubG9ja19vdXQ7CiAJCX0KIAogCQlsZGF0YS5maXJtd2FyZS51c2VyID0gMTsKQEAgLTk5OCw1NCArMTExMCw0OSBAQAogCQlsZGF0YS5jb25maWd1cmF0aW9uLmRhdGEgPSBsZGVmLnQ0Y29uZmlnLmRhdGE7CiAJCWxkYXRhLmNvbmZpZ3VyYXRpb24ubGVuID0gbGRlZi50NGNvbmZpZy5sZW47CiAKLQkJaWYgKGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX0RFVEVDVEVEKSB7CisJCWlmIChjdHItPnN0YXRlICE9IENBUElfQ1RSX0RFVEVDVEVEKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJrY2FwaTogbG9hZDogY29udHI9JWQgbm90IGluIGRldGVjdCBzdGF0ZVxuIiwgbGRlZi5jb250cik7Ci0JCQljYXBpX2N0cl9wdXQoY2FyZCk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJcmV0dmFsID0gLUVCVVNZOworCQkJZ290byBsb2FkX3VubG9ja19vdXQ7CiAJCX0KLQkJY2FyZC0+Y2FyZHN0YXRlID0gQ0FSRF9MT0FESU5HOworCQljdHItPnN0YXRlID0gQ0FQSV9DVFJfTE9BRElORzsKIAotCQlyZXR2YWwgPSBjYXJkLT5sb2FkX2Zpcm13YXJlKGNhcmQsICZsZGF0YSk7Ci0KKwkJcmV0dmFsID0gY3RyLT5sb2FkX2Zpcm13YXJlKGN0ciwgJmxkYXRhKTsKIAkJaWYgKHJldHZhbCkgewotCQkJY2FyZC0+Y2FyZHN0YXRlID0gQ0FSRF9ERVRFQ1RFRDsKLQkJCWNhcGlfY3RyX3B1dChjYXJkKTsKLQkJCXJldHVybiByZXR2YWw7CisJCQljdHItPnN0YXRlID0gQ0FQSV9DVFJfREVURUNURUQ7CisJCQlnb3RvIGxvYWRfdW5sb2NrX291dDsKIAkJfQogCi0JCXdoaWxlIChjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKSB7CisJCXJldHZhbCA9IHdhaXRfb25fY3RyX3N0YXRlKGN0ciwgQ0FQSV9DVFJfUlVOTklORyk7CiAKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CS8qIDAuMSBzZWMgKi8KLQotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQkJCXJldHVybiAtRUlOVFI7Ci0JCQl9Ci0JCX0KLQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQlyZXR1cm4gMDsKK2xvYWRfdW5sb2NrX291dDoKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisJCXJldHVybiByZXR2YWw7CiAKIAljYXNlIEFWTUIxX1JFU0VUQ0FSRDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZGVmLCBkYXRhLCBzaXplb2YoYXZtYjFfcmVzZXRkZWYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKHJkZWYuY29udHIpOwotCQlpZiAoIWNhcmQpCi0JCQlyZXR1cm4gLUVTUkNIOwogCi0JCWlmIChjYXJkLT5jYXJkc3RhdGUgPT0gQ0FSRF9ERVRFQ1RFRCkKLQkJCXJldHVybiAwOworCQlyZXR2YWwgPSAwOwogCi0JCWNhcmQtPnJlc2V0X2N0cihjYXJkKTsKKwkJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCi0JCXdoaWxlIChjYXJkLT5jYXJkc3RhdGUgPiBDQVJEX0RFVEVDVEVEKSB7Ci0KLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CS8qIDAuMSBzZWMgKi8KLQotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJCXJldHVybiAtRUlOVFI7CisJCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihyZGVmLmNvbnRyKTsKKwkJaWYgKCFjdHIpIHsKKwkJCXJldHZhbCA9IC1FU1JDSDsKKwkJCWdvdG8gcmVzZXRfdW5sb2NrX291dDsKIAkJfQotCQlyZXR1cm4gMDsKIAorCQlpZiAoY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9ERVRFQ1RFRCkKKwkJCWdvdG8gcmVzZXRfdW5sb2NrX291dDsKKworCQljdHItPnJlc2V0X2N0cihjdHIpOworCisJCXJldHZhbCA9IHdhaXRfb25fY3RyX3N0YXRlKGN0ciwgQ0FQSV9DVFJfREVURUNURUQpOworCityZXNldF91bmxvY2tfb3V0OgorCQltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDYyLDcgKzExNjksOCBAQAogCiBpbnQgY2FwaTIwX21hbnVmYWN0dXJlcih1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOworCWludCByZXR2YWw7CiAKIAlzd2l0Y2ggKGNtZCkgewogI2lmZGVmIEFWTUIxX0NPTVBBVApAQCAtMTA4MCwxNCArMTE4OCwyMCBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmZkZWYsIGRhdGEsIHNpemVvZihrY2FwaV9mbGFnZGVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKGZkZWYuY29udHIpOwotCQlpZiAoIWNhcmQpCi0JCQlyZXR1cm4gLUVTUkNIOworCQltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAKLQkJY2FyZC0+dHJhY2VmbGFnID0gZmRlZi5mbGFnOwotCQlwcmludGsoS0VSTl9JTkZPICJrY2FwaTogY29udHIgWyUwM2RdIHNldCB0cmFjZT0lZFxuIiwKLQkJCWNhcmQtPmNuciwgY2FyZC0+dHJhY2VmbGFnKTsKLQkJcmV0dXJuIDA7CisJCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihmZGVmLmNvbnRyKTsKKwkJaWYgKGN0cikgeworCQkJY3RyLT50cmFjZWZsYWcgPSBmZGVmLmZsYWc7CisJCQlwcmludGsoS0VSTl9JTkZPICJrY2FwaTogY29udHIgWyUwM2RdIHNldCB0cmFjZT0lZFxuIiwKKwkJCSAgICAgICBjdHItPmNuciwgY3RyLT50cmFjZWZsYWcpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlCisJCQlyZXR2YWwgPSAtRVNSQ0g7CisKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJY2FzZSBLQ0FQSV9DTURfQUREQ0FSRDoKIAl7CkBAIC0xMDk1LDcgKzEyMDksNiBAQAogCQlzdHJ1Y3QgY2FwaV9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CiAJCWNhcGljYXJkcGFyYW1zIGNwYXJhbXM7CiAJCWtjYXBpX2NhcmRkZWYgY2RlZjsKLQkJaW50IHJldHZhbDsKIAogCQlpZiAoKHJldHZhbCA9IGNvcHlfZnJvbV91c2VyKCZjZGVmLCBkYXRhLCBzaXplb2YoY2RlZikpKSkKIAkJCXJldHVybiByZXR2YWw7CkBAIC0xMTA3LDYgKzEyMjAsOCBAQAogCQljcGFyYW1zLmNhcmR0eXBlID0gMDsKIAkJY2RlZi5kcml2ZXJbc2l6ZW9mKGNkZWYuZHJpdmVyKS0xXSA9IDA7CiAKKwkJbXV0ZXhfbG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOworCiAJCWxpc3RfZm9yX2VhY2gobCwgJmNhcGlfZHJpdmVycykgewogCQkJZHJpdmVyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgY2FwaV9kcml2ZXIsIGxpc3QpOwogCQkJaWYgKHN0cmNtcChkcml2ZXItPm5hbWUsIGNkZWYuZHJpdmVyKSA9PSAwKQpAQCAtMTExNSwxNSArMTIzMCwxNSBAQAogCQlpZiAoZHJpdmVyID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAia2NhcGk6IGRyaXZlciBcIiVzXCIgbm90IGxvYWRlZC5cbiIsCiAJCQkJCWNkZWYuZHJpdmVyKTsKLQkJCXJldHVybiAtRVNSQ0g7Ci0JCX0KLQotCQlpZiAoIWRyaXZlci0+YWRkX2NhcmQpIHsKKwkJCXJldHZhbCA9IC1FU1JDSDsKKwkJfSBlbHNlIGlmICghZHJpdmVyLT5hZGRfY2FyZCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJrY2FwaTogZHJpdmVyIFwiJXNcIiBoYXMgbm8gYWRkIGNhcmQgZnVuY3Rpb24uXG4iLCBjZGVmLmRyaXZlcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQorCQkJcmV0dmFsID0gLUVJTzsKKwkJfSBlbHNlCisJCQlyZXR2YWwgPSBkcml2ZXItPmFkZF9jYXJkKGRyaXZlciwgJmNwYXJhbXMpOwogCi0JCXJldHVybiBkcml2ZXItPmFkZF9jYXJkKGRyaXZlciwgJmNwYXJhbXMpOworCQltdXRleF91bmxvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAlkZWZhdWx0OgpAQCAtMTEzNywzMCArMTI1Miw2IEBACiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX21hbnVmYWN0dXJlcik7CiAKLS8qIHRlbXBvcmFyeSBoYWNrICovCi0KLS8qKgotICogY2FwaTIwX3NldF9jYWxsYmFjaygpIC0gc2V0IENBUEkgYXBwbGljYXRpb24gbm90aWZpY2F0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAYXA6CQlDQVBJIGFwcGxpY2F0aW9uIGRlc2NyaXB0b3Igc3RydWN0dXJlLgotICogQGNhbGxiYWNrOgljYWxsYmFjayBmdW5jdGlvbiAoTlVMTCB0byByZW1vdmUpLgotICoKLSAqIElmIG5vdCBOVUxMLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gbm90aWZ5IHRoZQotICogYXBwbGljYXRpb24gb2YgdGhlIGFkZGl0aW9uIG9yIHJlbW92YWwgb2YgYSBjb250cm9sbGVyLgotICogVGhlIGZpcnN0IGFyZ3VtZW50IChjbWQpIHdpbGwgdGVsbCB3aGV0aGVyIHRoZSBjb250cm9sbGVyIHdhcyBhZGRlZAotICogKEtDSV9DT05UUlVQKSBvciByZW1vdmVkIChLQ0lfQ09OVFJET1dOKS4KLSAqIFRoZSBzZWNvbmQgYXJndW1lbnQgKGNvbnRyKSB3aWxsIGJlIHRoZSBjb250cm9sbGVyIG51bWJlci4KLSAqIEZvciBjbWQ9PUtDSV9DT05UUlVQIHRoZSB0aGlyZCBhcmd1bWVudCAoZGF0YSkgd2lsbCBiZSBhIHBvaW50ZXIgdG8gdGhlCi0gKiBuZXcgY29udHJvbGxlcidzIGNhcGFiaWxpdHkgcHJvZmlsZSBzdHJ1Y3R1cmUuCi0gKi8KLQotdm9pZCBjYXBpMjBfc2V0X2NhbGxiYWNrKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsCi0JCQkgdm9pZCAoKmNhbGxiYWNrKSAodW5zaWduZWQgaW50IGNtZCwgX191MzIgY29udHIsIHZvaWQgKmRhdGEpKQotewotCWFwLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotfQotCi1FWFBPUlRfU1lNQk9MKGNhcGkyMF9zZXRfY2FsbGJhY2spOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAtLS0tLS0tLSBJbml0ICYgQ2xlYW51cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMTY5LDI3ICsxMjYwLDIxIEBACiAgKiBpbml0IC8gZXhpdCBmdW5jdGlvbnMKICAqLwogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhcGljdHJfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBub3RpZnlfaGFuZGxlciwKKwkucHJpb3JpdHkgPSBJTlRfTUFYLAorfTsKKwogc3RhdGljIGludCBfX2luaXQga2NhcGlfaW5pdCh2b2lkKQogewotCWNoYXIgKnA7Ci0JY2hhciByZXZbMzJdOwotCWludCByZXQ7CisJaW50IGVycjsKIAotCXJldCA9IGNkZWJ1Z19pbml0KCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLSAgICAgICAga2NhcGlfcHJvY19pbml0KCk7CisJcmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcigmY2FwaWN0cl9uYik7CiAKLQlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpICE9IE5VTEwgJiYgcFsxXSkgewotCQlzdHJsY3B5KHJldiwgcCArIDIsIHNpemVvZihyZXYpKTsKLQkJaWYgKChwID0gc3RyY2hyKHJldiwgJyQnKSkgIT0gTlVMTCAmJiBwID4gcmV2KQotCQkgICAqKHAtMSkgPSAwOwotCX0gZWxzZQotCQlzdHJjcHkocmV2LCAiMS4wIik7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJDQVBJIFN1YnN5c3RlbSBSZXYgJXNcbiIsIHJldik7Ci0KLQlyZXR1cm4gMDsKKwllcnIgPSBjZGVidWdfaW5pdCgpOworCWlmICghZXJyKQorCQlrY2FwaV9wcm9jX2luaXQoKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQga2NhcGlfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuaCBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmgKaW5kZXggMjQ0NzExZi4uZjQ2MjBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuaAorKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5oCkBAIC0yNCwxNiArMjQsMTkgQEAKICNlbmRpZgogCiBlbnVtIHsKLQlDQVJEX0RFVEVDVEVEID0gMSwKLQlDQVJEX0xPQURJTkcgID0JMiwKLQlDQVJEX1JVTk5JTkcgID0gMywKKwlDQVBJX0NUUl9ERVRBQ0hFRCA9IDAsCisJQ0FQSV9DVFJfREVURUNURUQgPSAxLAorCUNBUElfQ1RSX0xPQURJTkcgID0gMiwKKwlDQVBJX0NUUl9SVU5OSU5HICA9IDMsCiB9OwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjYXBpX2RyaXZlcnM7Ci1leHRlcm4gcndsb2NrX3QgY2FwaV9kcml2ZXJzX2xpc3RfbG9jazsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggY2FwaV9kcml2ZXJzX2xvY2s7CisKK2V4dGVybiBzdHJ1Y3QgY2FwaV9jdHIgKmNhcGlfY29udHJvbGxlcltDQVBJX01BWENPTlRSXTsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggY2FwaV9jb250cm9sbGVyX2xvY2s7CiAKIGV4dGVybiBzdHJ1Y3QgY2FwaTIwX2FwcGwgKmNhcGlfYXBwbGljYXRpb25zW0NBUElfTUFYQVBQTF07Ci1leHRlcm4gc3RydWN0IGNhcGlfY3RyICpjYXBpX2NhcmRzW0NBUElfTUFYQ09OVFJdOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCmluZGV4IDA5ZDRkYjcuLmVhMmRmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKQEAgLTE1LDEzICsxNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi1zdGF0aWMgY2hhciAqCi1jYXJkc3RhdGUyc3RyKHVuc2lnbmVkIHNob3J0IGNhcmRzdGF0ZSkKK3N0YXRpYyBjaGFyICpzdGF0ZTJzdHIodW5zaWduZWQgc2hvcnQgc3RhdGUpCiB7Ci0Jc3dpdGNoIChjYXJkc3RhdGUpIHsKLQljYXNlIENBUkRfREVURUNURUQ6CXJldHVybiAiZGV0ZWN0ZWQiOwotCWNhc2UgQ0FSRF9MT0FESU5HOglyZXR1cm4gImxvYWRpbmciOwotCWNhc2UgQ0FSRF9SVU5OSU5HOglyZXR1cm4gInJ1bm5pbmciOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIENBUElfQ1RSX0RFVEVDVEVEOglyZXR1cm4gImRldGVjdGVkIjsKKwljYXNlIENBUElfQ1RSX0xPQURJTkc6CXJldHVybiAibG9hZGluZyI7CisJY2FzZSBDQVBJX0NUUl9SVU5OSU5HOglyZXR1cm4gInJ1bm5pbmciOwogCWRlZmF1bHQ6CSAgICAgICAgcmV0dXJuICI/Pz8iOwogCX0KIH0KQEAgLTM2LDkgKzM1LDEyIEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHZvaWQgKmNvbnRyb2xsZXJfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoY2FwaV9jb250cm9sbGVyX2xvY2spCiB7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCiAJaWYgKCpwb3MgPCBDQVBJX01BWENPTlRSKQotCQlyZXR1cm4gJmNhcGlfY2FyZHNbKnBvc107CisJCXJldHVybiAmY2FwaV9jb250cm9sbGVyWypwb3NdOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NywxMyArNDksMTUgQEAKIHsKIAkrKypwb3M7CiAJaWYgKCpwb3MgPCBDQVBJX01BWENPTlRSKQotCQlyZXR1cm4gJmNhcGlfY2FyZHNbKnBvc107CisJCXJldHVybiAmY2FwaV9jb250cm9sbGVyWypwb3NdOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnRyb2xsZXJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKGNhcGlfY29udHJvbGxlcl9sb2NrKQogeworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNvbnRyb2xsZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTY1LDcgKzY5LDcgQEAKIAogCXNlcV9wcmludGYoc2VxLCAiJWQgJS0xMHMgJS04cyAlLTE2cyAlc1xuIiwKIAkJICAgY3RyLT5jbnIsIGN0ci0+ZHJpdmVyX25hbWUsCi0JCSAgIGNhcmRzdGF0ZTJzdHIoY3RyLT5jYXJkc3RhdGUpLAorCQkgICBzdGF0ZTJzdHIoY3RyLT5zdGF0ZSksCiAJCSAgIGN0ci0+bmFtZSwKIAkJICAgY3RyLT5wcm9jaW5mbyA/ICBjdHItPnByb2NpbmZvKGN0cikgOiAiIik7CiAKQEAgLTEzNSw5ICsxMzksMTEgQEAKIC8vICAgICAgYXBwbGlkIG5yZWN2Y3RscGt0IG5yZWN2ZGF0YXBrdCBuc2VudGN0bHBrdCBuc2VudGRhdGFwa3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdm9pZCAqCi1hcHBsaWNhdGlvbnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorc3RhdGljIHZvaWQgKmFwcGxpY2F0aW9uc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhjYXBpX2NvbnRyb2xsZXJfbG9jaykKIHsKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKIAlpZiAoKnBvcyA8IENBUElfTUFYQVBQTCkKIAkJcmV0dXJuICZjYXBpX2FwcGxpY2F0aW9uc1sqcG9zXTsKIApAQCAtMTU0LDkgKzE2MCwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotYXBwbGljYXRpb25zX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCitzdGF0aWMgdm9pZCBhcHBsaWNhdGlvbnNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKGNhcGlfY29udHJvbGxlcl9sb2NrKQogeworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzksOSArMjQ2LDkgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZCAqY2FwaV9kcml2ZXJfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCisJX19hY3F1aXJlcygmY2FwaV9kcml2ZXJzX2xvY2spCiB7Ci0JcmVhZF9sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZjYXBpX2RyaXZlcnMsICpwb3MpOwogfQogCkBAIC0yNTEsOSArMjU4LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgY2FwaV9kcml2ZXJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLQlfX3JlbGVhc2VzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQorCV9fcmVsZWFzZXMoJmNhcGlfZHJpdmVyc19sb2NrKQogewotCXJlYWRfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKIH0KIAogc3RhdGljIGludCBjYXBpX2RyaXZlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwppbmRleCBjY2IyYTdiLi5jNTAxNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwpAQCAtNDAsNiArNDAsOCBAQAogICogQXBwZW5kIHJlY2VpdmVkIGJ5dGVzIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlIGJ1ZmZlciBhbmQgZm9yd2FyZCB0aGVtCiAgKiBsaW5lIGJ5IGxpbmUgdG8gdGhlIHJlc3BvbnNlIGhhbmRsZXIuIEV4aXQgd2hlbmV2ZXIgYSBtb2RlL3N0YXRlIGNoYW5nZQogICogbWlnaHQgaGF2ZSBvY2N1cnJlZC4KKyAqIE5vdGU6IFJlY2VpdmVkIGxpbmVzIG1heSBiZSB0ZXJtaW5hdGVkIGJ5IENSLCBMRiwgb3IgQ1IgTEYsIHdoaWNoIHdpbGwgYmUKKyAqIHJlbW92ZWQgYmVmb3JlIHBhc3NpbmcgdGhlIGxpbmUgdG8gdGhlIHJlc3BvbnNlIGhhbmRsZXIuCiAgKiBSZXR1cm4gdmFsdWU6CiAgKgludW1iZXIgb2YgcHJvY2Vzc2VkIGJ5dGVzCiAgKi8KQEAgLTY1LDE0ICs2NywxNCBAQAogCQkJLyogLS12LS0gZmFsbCB0aHJvdWdoIC0tdi0tICovCiAJCWNhc2UgJ1xyJzoKIAkJCS8qIGVuZCBvZiBtZXNzYWdlIGxpbmUsIHBhc3MgdG8gcmVzcG9uc2UgaGFuZGxlciAqLwotCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgTWVzc2FnZSAoJWQgQnl0ZXMpIiwKLQkJCQlfX2Z1bmNfXywgY2J5dGVzKTsKIAkJCWlmIChjYnl0ZXMgPj0gTUFYX1JFU1BfU0laRSkgewogCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZXNwb25zZSB0b28gbGFyZ2UgKCVkKVxuIiwKIAkJCQkJIGNieXRlcyk7CiAJCQkJY2J5dGVzID0gTUFYX1JFU1BfU0laRTsKIAkJCX0KIAkJCWNzLT5jYnl0ZXMgPSBjYnl0ZXM7CisJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfVFJBTlNDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCisJCQkJCSAgIGNieXRlcywgY3MtPnJlc3BkYXRhKTsKIAkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsKIAkJCWNieXRlcyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDk1ZWJjNTEuLjBiZTE1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMzQ3LDEyICszNDcsNyBAQAogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAotCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IHNjaGVkdWxpbmcgSFVQIGZvciBjaGFubmVsICVkIiwKLQkJX19mdW5jX18sIGJjcy0+Y2hhbm5lbCk7Ci0KLQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkKLQkJZGV2X2Vycihjcy0+ZGV2LCAiZXZlbnQgcXVldWUgZnVsbFxuIik7Ci0KKwlnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCk7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiB9CiAKQEAgLTE3MDYsOCArMTcwMSw3IEBACiAKIAkvKiB1bnF1ZXVlIGNvbXBsZXRlZCBidWZmZXIgKi8KIAljcy0+Y21kYnl0ZXMgLT0gY3MtPmN1cmxlbjsKLQlnaWdfZGJnKERFQlVHX1RSQU5TQ01EfERFQlVHX0xPQ0tDTUQsCi0JCSJ3cml0ZV9jb21tYW5kOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKKwlnaWdfZGJnKERFQlVHX09VVFBVVCwgIndyaXRlX2NvbW1hbmQ6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAogCQljcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOwogCWlmIChjYi0+bmV4dCAhPSBOVUxMKSB7CiAJCWNzLT5jbWRidWYgPSBjYi0+bmV4dDsKQEAgLTE4ODEsMTMgKzE4NzUsMTMgQEAKIAogCS8qIGNoZWNrIGlmIHN1c3BlbmQgcmVxdWVzdGVkICovCiAJaWYgKHVjcy0+YmFzc3RhdGUgJiBCU19TVVNQRU5EKSB7Ci0JCWdpZ19kYmcoREVCVUdfVFJBTlNDTUR8REVCVUdfTE9DS0NNRCwgInN1c3BlbmRpbmciKTsKKwkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJzdXNwZW5kaW5nIik7CiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCX0KIAogCS8qIGNoZWNrIGlmIEFUIGNoYW5uZWwgaXMgb3BlbiAqLwogCWlmICghKHVjcy0+YmFzc3RhdGUgJiBCU19BVE9QRU4pKSB7Ci0JCWdpZ19kYmcoREVCVUdfVFJBTlNDTUR8REVCVUdfTE9DS0NNRCwgIkFUIGNoYW5uZWwgbm90IG9wZW4iKTsKKwkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJBVCBjaGFubmVsIG5vdCBvcGVuIik7CiAJCXJjID0gcmVxX3N1Ym1pdChjcy0+YmNzLCBIRF9PUEVOX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpOwogCQlpZiAocmMgPCAwKSB7CiAJCQkvKiBmbHVzaCBjb21tYW5kIHF1ZXVlICovCkBAIC0yMjUxLDcgKzIyNDUsNyBAQAogCWludCBpLCBqOwogCWludCByYzsKIAotCWdpZ19kYmcoREVCVUdfQU5ZLAorCWdpZ19kYmcoREVCVUdfSU5JVCwKIAkJIiVzOiBDaGVjayBpZiBkZXZpY2UgbWF0Y2hlcyAuLiAoVmVuZG9yOiAweCV4LCBQcm9kdWN0OiAweCV4KSIsCiAJCV9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKQEAgLTIyNTksNyArMjI1Myw3IEBACiAJLyogc2V0IHJlcXVpcmVkIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKIAlpZiAoaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDMpIHsKLQkJZ2lnX2RiZyhERUJVR19BTlksCisJCWdpZ19kYmcoREVCVUdfSU5JVCwKIAkJCSIlczogd3JvbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQgLSB0cnlpbmcgdG8gc3dpdGNoIiwKIAkJCV9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOwogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UodWRldiwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jYXBpLmMKaW5kZXggM2Y1Y2QwNi4uNjY0M2Q2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NhcGkuYwpAQCAtMTMsNiArMTMsOCBAQAogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpbGxpLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpY21kLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpdXRpbC5oPgpAQCAtMTY5LDIwICsxNzEsNiBAQAogfQogCiAvKgotICogY2hlY2sgZm9yIGxlZ2FsIGhleCBkaWdpdAotICovCi1zdGF0aWMgaW5saW5lIGludCBpc2hleGRpZ2l0KGNoYXIgYykKLXsKLQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0JCXJldHVybiAxOwotCWlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKLQkJcmV0dXJuIDE7Ci0JaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGNvbnZlcnQgaGV4IHRvIGJpbmFyeQogICovCiBzdGF0aWMgaW5saW5lIHU4IGhleDJiaW4oY2hhciBjKQpAQCAtMjAyLDcgKzE5MCw3IEBACiB7CiAJaW50IGwgPSAwOwogCXdoaWxlICgqaW4pIHsKLQkJaWYgKCFpc2hleGRpZ2l0KGluWzBdKSB8fCAhaXNoZXhkaWdpdChpblsxXSkgfHwgbCA+PSBtYXhsZW4pCisJCWlmICghaXN4ZGlnaXQoaW5bMF0pIHx8ICFpc3hkaWdpdChpblsxXSkgfHwgbCA+PSBtYXhsZW4pCiAJCQlyZXR1cm4gLTE7CiAJCW91dFsrK2xdID0gKGhleDJiaW4oaW5bMF0pIDw8IDQpICsgaGV4MmJpbihpblsxXSk7CiAJCWluICs9IDI7CkBAIC0xNDI1LDkgKzE0MTMsMTAgQEAKIAogCS8qIHF1ZXVlICYgc2NoZWR1bGUgRVZfRElBTCBldmVudCAqLwogCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9ESUFMLCBjb21tYW5kcywKLQkJCSAgICAgICBiY3MtPmF0X3N0YXRlLnNlcV9pbmRleCwgTlVMTCkpCi0JCWdvdG8gb29tOwotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBESUFMIik7CisJCQkgICAgICAgYmNzLT5hdF9zdGF0ZS5zZXFfaW5kZXgsIE5VTEwpKSB7CisJCWluZm8gPSBDQVBJX01TR09TUkVTT1VSQ0VFUlI7CisJCWdvdG8gZXJyb3I7CisJfQogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCWFwLT5jb25uZWN0ZWQgPSBBUENPTk5fU0VUVVA7CiAJc2VuZF9jb25mKGlpZiwgYXAsIHNrYiwgQ2FwaVN1Y2Nlc3MpOwpAQCAtMTU0MSw3ICsxNTMwLDYgQEAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY2hhbm5lbC0xXS5hdF9zdGF0ZSwKIAkJCQkgICAgICAgRVZfQUNDRVBULCBOVUxMLCAwLCBOVUxMKSkKIAkJCXJldHVybjsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEFDQ0VQVCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAkJcmV0dXJuOwogCkBAIC0xNTgyLDcgKzE1NzAsNiBAQAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmJjc1tjaGFubmVsLTFdLmF0X3N0YXRlLAogCQkJCSAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKQogCQkJcmV0dXJuOwotCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCQlyZXR1cm47CiAJfQpAQCAtMTY2NSwxMSArMTY1Miw5IEBACiAJCS8qIHRyaWdnZXIgaGFuZ3VwLCBjYXVzaW5nIGV2ZW50dWFsIERJU0NPTk5FQ1RfSU5EICovCiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLAogCQkJCSAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7Ci0JCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybjsKIAkJfQotCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCS8qIGVtaXQgRElTQ09OTkVDVF9CM19JTkQgKi8KQEAgLTE3NjgsMTEgKzE3NTMsOSBAQAogCiAJLyogdHJpZ2dlciBoYW5ndXAsIGNhdXNpbmcgZXZlbnR1YWwgRElTQ09OTkVDVF9JTkQgKi8KIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlzZW5kX2NvbmYoaWlmLCBhcCwgc2tiLCBDQVBJX01TR09TUkVTT1VSQ0VFUlIpOwogCQlyZXR1cm47CiAJfQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCS8qIGVtaXQgcmVwbHkgKi8KQEAgLTE4MTUsMTEgKzE3OTgsOSBAQAogCS8qIHRyaWdnZXIgaGFuZ3VwLCBjYXVzaW5nIGV2ZW50dWFsIERJU0NPTk5FQ1RfQjNfSU5EICovCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY2hhbm5lbC0xXS5hdF9zdGF0ZSwKIAkJCSAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7Ci0JCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXNlbmRfY29uZihpaWYsIGFwLCBza2IsIENBUElfTVNHT1NSRVNPVVJDRUVSUik7CiAJCXJldHVybjsKIAl9Ci0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJLyogTkNQSSBwYXJhbWV0ZXI6IG5vdCBhcHBsaWNhYmxlIGZvciBCMyBUcmFuc3BhcmVudCAqLwpAQCAtMjEwNiwzNSArMjA4NywyMiBAQAogCXJldHVybiBjdHItPm5hbWU7CS8qIFRvRG86IG1vcmU/ICovCiB9CiAKLS8qKgotICogZ2lnYXNldF9jdHJfcmVhZF9wcm9jKCkgLSBidWlsZCBjb250cm9sbGVyIHByb2MgZmlsZSBlbnRyeQotICogQHBhZ2U6CWJ1ZmZlciBvZiBQQUdFX1NJWkUgYnl0ZXMgZm9yIHJlY2VpdmluZyB0aGUgZW50cnkuCi0gKiBAc3RhcnQ6CXVudXNlZC4KLSAqIEBvZmY6CXVudXNlZC4KLSAqIEBjb3VudDoJdW51c2VkLgotICogQGVvZjoJdW51c2VkLgotICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IGxlbmd0aCBvZiBnZW5lcmF0ZWQgZW50cnkKLSAqLwotc3RhdGljIGludCBnaWdhc2V0X2N0cl9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgIGludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RyKQorc3RhdGljIGludCBnaWdhc2V0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHIgPSBtLT5wcml2YXRlOwogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gY3RyLT5kcml2ZXJkYXRhOwogCWNoYXIgKnM7CiAJaW50IGk7Ci0JaW50IGxlbiA9IDA7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjdHItPm5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXMgJXNcbiIsICJkZXYiLAorCisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY3RyLT5uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlcyAlc1xuIiwgImRldiIsCiAJCQlkZXZfZHJpdmVyX3N0cmluZyhjcy0+ZGV2KSwgZGV2X25hbWUoY3MtPmRldikpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWRcbiIsICJpZCIsIGNzLT5teWlkKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlZFxuIiwgImlkIiwgY3MtPm15aWQpOwogCWlmIChjcy0+Z290Znd2ZXIpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWQuJWQuJWQuJWRcbiIsICJmaXJtd2FyZSIsCisJCXNlcV9wcmludGYobSwgIiUtMTZzICVkLiVkLiVkLiVkXG4iLCAiZmlybXdhcmUiLAogCQkJY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sIGNzLT5md3ZlclsyXSwgY3MtPmZ3dmVyWzNdKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVkXG4iLCAiY2hhbm5lbHMiLAotCQkJY3MtPmNoYW5uZWxzKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAib25lY2hhbm5lbCIsCi0JCQljcy0+b25lY2hhbm5lbCA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJjaGFubmVscyIsIGNzLT5jaGFubmVscyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJvbmVjaGFubmVsIiwgY3MtPm9uZWNoYW5uZWwgPyAieWVzIiA6ICJubyIpOwogCiAJc3dpdGNoIChjcy0+bW9kZSkgewogCWNhc2UgTV9VTktOT1dOOgpAQCAtMjE1Miw3ICsyMTIwLDcgQEAKIAlkZWZhdWx0OgogCQlzID0gIj8/IjsKIAl9Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm1vZGUiLCBzKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgIm1vZGUiLCBzKTsKIAogCXN3aXRjaCAoY3MtPm1zdGF0ZSkgewogCWNhc2UgTVNfVU5JTklUSUFMSVpFRDoKQEAgLTIxNzYsMjUgKzIxNDQsMjEgQEAKIAlkZWZhdWx0OgogCQlzID0gIj8/IjsKIAl9Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm1zdGF0ZSIsIHMpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAibXN0YXRlIiwgcyk7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAicnVubmluZyIsCi0JCQljcy0+cnVubmluZyA/ICJ5ZXMiIDogIm5vIik7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgImNvbm5lY3RlZCIsCi0JCQljcy0+Y29ubmVjdGVkID8gInllcyIgOiAibm8iKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAiaXNkbl91cCIsCi0JCQljcy0+aXNkbl91cCA/ICJ5ZXMiIDogIm5vIik7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgImNpZG1vZGUiLAotCQkJY3MtPmNpZG1vZGUgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAicnVubmluZyIsIGNzLT5ydW5uaW5nID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgImNvbm5lY3RlZCIsIGNzLT5jb25uZWN0ZWQgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAiaXNkbl91cCIsIGNzLT5pc2RuX3VwID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgImNpZG1vZGUiLCBjcy0+Y2lkbW9kZSA/ICJ5ZXMiIDogIm5vIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyBpKyspIHsKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJbJWRdJS0xM3MgJWRcbiIsIGksICJjb3JydXB0ZWQiLAorCQlzZXFfcHJpbnRmKG0sICJbJWRdJS0xM3MgJWRcbiIsIGksICJjb3JydXB0ZWQiLAogCQkJCWNzLT5iY3NbaV0uY29ycnVwdGVkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJbJWRdJS0xM3MgJWRcbiIsIGksICJ0cmFuc19kb3duIiwKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAidHJhbnNfZG93biIsCiAJCQkJY3MtPmJjc1tpXS50cmFuc19kb3duKTsKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJbJWRdJS0xM3MgJWRcbiIsIGksICJ0cmFuc191cCIsCisJCXNlcV9wcmludGYobSwgIlslZF0lLTEzcyAlZFxuIiwgaSwgInRyYW5zX3VwIiwKIAkJCQljcy0+YmNzW2ldLnRyYW5zX3VwKTsKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJbJWRdJS0xM3MgJWRcbiIsIGksICJjaHN0YXRlIiwKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAiY2hzdGF0ZSIsCiAJCQkJY3MtPmJjc1tpXS5jaHN0YXRlKTsKIAkJc3dpdGNoIChjcy0+YmNzW2ldLnByb3RvMikgewogCQljYXNlIEwyX0JJVFNZTkM6CkBAIC0yMjA5LDExICsyMTczLDIzIEBACiAJCWRlZmF1bHQ6CiAJCQlzID0gIj8/IjsKIAkJfQotCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIlslZF0lLTEzcyAlc1xuIiwgaSwgInByb3RvMiIsIHMpOworCQlzZXFfcHJpbnRmKG0sICJbJWRdJS0xM3MgJXNcbiIsIGksICJwcm90bzIiLCBzKTsKIAl9Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnaWdhc2V0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZ2lnYXNldF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnaWdhc2V0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZ2lnYXNldF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgY2FwaV9kcml2ZXIgY2FwaV9kcml2ZXJfZ2lnYXNldCA9IHsKIAkubmFtZQkJPSAiZ2lnYXNldCIsCkBAIC0yMjU2LDcgKzIyMzIsNyBAQAogCWlpZi0+Y3RyLnJlbGVhc2VfYXBwbCAgPSBnaWdhc2V0X3JlbGVhc2VfYXBwbDsKIAlpaWYtPmN0ci5zZW5kX21lc3NhZ2UgID0gZ2lnYXNldF9zZW5kX21lc3NhZ2U7CiAJaWlmLT5jdHIucHJvY2luZm8gICAgICA9IGdpZ2FzZXRfcHJvY2luZm87Ci0JaWlmLT5jdHIuY3RyX3JlYWRfcHJvYyA9IGdpZ2FzZXRfY3RyX3JlYWRfcHJvYzsKKwlpaWYtPmN0ci5wcm9jX2ZvcHMgPSAmZ2lnYXNldF9wcm9jX2ZvcHM7CiAJSU5JVF9MSVNUX0hFQUQoJmlpZi0+YXBwbHMpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlpZi0+c2VuZHF1ZXVlKTsKIAlhdG9taWNfc2V0KCZpaWYtPnNlbmRxbGVuLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKaW5kZXggNjY0YjBjNS4uODVkZTMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKQEAgLTE0OSwxMCArMTQ5LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFnaWdhc2V0X2FkZF9ldmVudChhdF9zdGF0ZS0+Y3MsIGF0X3N0YXRlLCBFVl9USU1FT1VULCBOVUxMLAotCQkJICAgICAgIGF0X3N0YXRlLT50aW1lcl9pbmRleCwgTlVMTCkpCi0JCQlkZXZfZXJyKGF0X3N0YXRlLT5jcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsCi0JCQkJX19mdW5jX18pOworCWdpZ2FzZXRfYWRkX2V2ZW50KGF0X3N0YXRlLT5jcywgYXRfc3RhdGUsIEVWX1RJTUVPVVQsIE5VTEwsCisJCQkgIGF0X3N0YXRlLT50aW1lcl9pbmRleCwgTlVMTCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE4MCw3ICsxNzgsNyBAQAogCWlmIChjcy0+cnVubmluZykgewogCQltb2RfdGltZXIoJmNzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoR0lHX1RJQ0spKTsKIAkJaWYgKHRpbWVvdXQpIHsKLQkJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyB0aW1lb3V0Iik7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAic2NoZWR1bGluZyB0aW1lb3V0Iik7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJCX0KIAl9CkBAIC0xOTQsMTQgKzE5MiwxNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoYmNzLT51c2VfY291bnQgfHwgIXRyeV9tb2R1bGVfZ2V0KGJjcy0+Y3MtPmRyaXZlci0+b3duZXIpKSB7Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgJWQiLAorCQlnaWdfZGJnKERFQlVHX0NIQU5ORUwsICJjb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbCAlZCIsCiAJCQliY3MtPmNoYW5uZWwpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KIAkrK2Jjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDE7Ci0JZ2lnX2RiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTIxMyw3ICsyMTEsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChjcy0+ZHJpdmVyLT5vd25lcikpIHsKLQkJZ2lnX2RiZyhERUJVR19BTlksCisJCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwKIAkJCSJjb3VsZCBub3QgZ2V0IG1vZHVsZSBmb3IgYWxsb2NhdGluZyBjaGFubmVsIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBOVUxMOwpAQCAtMjIzLDEyICsyMjEsMTIgQEAKIAkJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CiAJCQljcy0+YmNzW2ldLmJ1c3kgPSAxOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBpKTsKKwkJCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgaSk7CiAJCQlyZXR1cm4gY3MtPmJjcyArIGk7CiAJCX0KIAltb2R1bGVfcHV0KGNzLT5kcml2ZXItPm93bmVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWdpZ19kYmcoREVCVUdfQU5ZLCAibm8gZnJlZSBjaGFubmVsIik7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAibm8gZnJlZSBjaGFubmVsIik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIzOCwxNCArMjM2LDE1IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCWlmICghYmNzLT5idXN5KSB7Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGZyZWUgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgImNvdWxkIG5vdCBmcmVlIGNoYW5uZWwgJWQiLAorCQkJYmNzLT5jaGFubmVsKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCS0tYmNzLT51c2VfY291bnQ7CiAJYmNzLT5idXN5ID0gMDsKIAltb2R1bGVfcHV0KGJjcy0+Y3MtPmRyaXZlci0+b3duZXIpOwotCWdpZ19kYmcoREVCVUdfQU5ZLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yNTgsMTQgKzI1NywxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJaWYgKGNzLT5iY3NbaV0udXNlX2NvdW50KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZ2lnX2RiZyhERUJVR19BTlksICJjb3VsZCBub3QgYWxsb2NhdGUgYWxsIGNoYW5uZWxzIik7CisJCQlnaWdfZGJnKERFQlVHX0NIQU5ORUwsCisJCQkJImNvdWxkIG5vdCBhbGxvY2F0ZSBhbGwgY2hhbm5lbHMiKTsKIAkJCXJldHVybiAwOwogCQl9CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQkrK2NzLT5iY3NbaV0udXNlX2NvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQlnaWdfZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0NIQU5ORUwsICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI3NSw3ICsyNzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlnaWdfZGJnKERFQlVHX0FOWSwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAidW5ibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCS0tY3MtPmJjc1tpXS51c2VfY291bnQ7CkBAIC0yODcsNyArMjg3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZ2lnX2RiZyhERUJVR19BTlksICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKKwlnaWdfZGJnKERFQlVHX0NIQU5ORUwsICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CkBAIC0zMzgsNiArMzM4LDggQEAKIAl1bnNpZ25lZCBuZXh0LCB0YWlsOwogCXN0cnVjdCBldmVudF90ICpldmVudCA9IE5VTEw7CiAKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAicXVldWVpbmcgZXZlbnQgJWQiLCB0eXBlKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCiAJdGFpbCA9IGNzLT5ldl90YWlsOwpAQCAtOTM0LDExICs5MzYsOCBAQAogCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfU1RBUlQsIE5VTEwsIDAsIE5VTEwpKSB7CiAJCWNzLT53YWl0aW5nID0gMDsKLQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0KLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RBUlQiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTk3MywxMiArOTcyLDggQEAKIAogCWNzLT53YWl0aW5nID0gMTsKIAotCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1NIVVRET1dOLCBOVUxMLCAwLCBOVUxMKSkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1NIVVRET1dOLCBOVUxMLCAwLCBOVUxMKSkKIAkJZ290byBleGl0OwotCX0KLQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTSFVURE9XTiIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwpAQCAtMTAwNCwxMiArOTk5LDggQEAKIAogCWNzLT53YWl0aW5nID0gMTsKIAotCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1NUT1AsIE5VTEwsIDAsIE5VTEwpKSB7Ci0JCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfU1RPUCwgTlVMTCwgMCwgTlVMTCkpCiAJCWdvdG8gZXhpdDsKLQl9Ci0KLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RPUCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKaW5kZXggZGRlYjA0NS4uYzhmODliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCkBAIC00MjcsNyArNDI3LDcgQEAKIHsKIAlpbnQgdiA9IC0xOwogCi0JZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAic3RyaW5nOiAlcyIsIHApOwogCiAJd2hpbGUgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpCiAJCXYgPSAoKHYgPCAwKSA/IDAgOiAodiAqIDEwKSkgKyAoaW50KSAoKCpwKyspIC0gJzAnKTsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCWludCB2ID0gMDsKIAlpbnQgYzsKIAotCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CisJZ2lnX2RiZyhERUJVR19FVkVOVCwgInN0cmluZzogJXMiLCBwKTsKIAogCWlmICghKnApCiAJCXJldHVybiAtMTsKQEAgLTUxNyw3ICs1MTcsNiBAQAogCQlyZXR1cm47CiAJfQogCWNzLT5yZXNwZGF0YVtsZW5dID0gMDsKLQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAicmF3IHN0cmluZzogJyVzJyIsIGNzLT5yZXNwZGF0YSk7CiAJYXJndlswXSA9IGNzLT5yZXNwZGF0YTsKIAlwYXJhbXMgPSAxOwogCWlmIChjcy0+YXRfc3RhdGUuZ2V0c3RyaW5nKSB7CkBAIC01NTIsMTQgKzU1MSwxNCBAQAogCQlmb3IgKGogPSAxOyBqIDwgcGFyYW1zOyArK2opCiAJCQlhcmd2W2pdWy0xXSA9IDA7CiAKLQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIkNNRCByZWNlaXZlZDogJXMiLCBhcmd2WzBdKTsKIAkJaWYgKGNpZCkgewogCQkJLS1wYXJhbXM7Ci0JCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiQ0lEOiAlcyIsIGFyZ3ZbcGFyYW1zXSk7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAiQ0lEOiAlcyIsIGFyZ3ZbcGFyYW1zXSk7CiAJCX0KLQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgImF2YWlsYWJsZSBwYXJhbXM6ICVkIiwgcGFyYW1zIC0gMSk7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJhdmFpbGFibGUgcGFyYW1zOiAlZCIsIHBhcmFtcyAtIDEpOwogCQlmb3IgKGogPSAxOyBqIDwgcGFyYW1zOyBqKyspCi0JCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAicGFyYW0gJWQ6ICVzIiwgaiwgYXJndltqXSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CkBAIC02NDIsNyArNjQxLDcgQEAKIAkJCQkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJKytjdXJhcmc7CiAJCQl9Ci0JCQlnaWdfZGJnKERFQlVHX0NNRCwgInN0cmluZz09JXMiLAorCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInN0cmluZz09JXMiLAogCQkJCWV2ZW50LT5wdHIgPyAoY2hhciAqKSBldmVudC0+cHRyIDogIk5VTEwiKTsKIAkJCWJyZWFrOwogCQljYXNlIFJUX1pDQVU6CkBAIC02NjksNyArNjY4LDcgQEAKIAkJCQkrK2N1cmFyZzsKIAkJCX0gZWxzZQogCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKLQkJCWdpZ19kYmcoREVCVUdfQ01ELCAicGFyYW1ldGVyPT0lZCIsIGV2ZW50LT5wYXJhbWV0ZXIpOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInBhcmFtZXRlcj09JWQiLCBldmVudC0+cGFyYW1ldGVyKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTY4NCw3ICs2ODMsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CiAKIAlpZiAoY3VyYXJnICE9IHBhcmFtcykKLQkJZ2lnX2RiZyhERUJVR19BTlksCisJCWdpZ19kYmcoREVCVUdfRVZFTlQsCiAJCQkiaW52YWxpZCBudW1iZXIgb2YgcHJvY2Vzc2VkIHBhcmFtZXRlcnM6ICVkLyVkIiwKIAkJCWN1cmFyZywgcGFyYW1zKTsKIH0KQEAgLTcwNSw4ICs3MDQsOCBAQAogCS8qIHJldmVydCB0byBzZWxlY3RlZCBpZGxlIG1vZGUgKi8KIAlpZiAoIWNzLT5jaWRtb2RlKSB7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1VNTU9ERTsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CiAJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCkBAIC03ODQsMTUgKzc4MywxNSBAQAogc3RhdGljIHZvaWQgc2NoZWR1bGVfaW5pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IHN0YXRlKQogewogCWlmIChjcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmIFBDX0lOSVQpIHsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJub3Qgc2NoZWR1bGluZyBQQ19JTklUIGFnYWluIik7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJub3Qgc2NoZWR1bGluZyBQQ19JTklUIGFnYWluIik7CiAJCXJldHVybjsKIAl9CiAJY3MtPm1zdGF0ZSA9IHN0YXRlOwogCWNzLT5tb2RlID0gTV9VTktOT1dOOwogCWdpZ2FzZXRfYmxvY2tfY2hhbm5lbHMoY3MpOwogCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0lOSVQ7CisJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwogCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKLQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfSU5JVCIpOwogfQogCiAvKiBBZGQgIkFUIiB0byBhIGNvbW1hbmQsIGFkZCB0aGUgY2lkLCBkbGUgZW5jb2RlIGl0LCBzZW5kIHRoZSByZXN1bHQgdG8gdGhlCkBAIC05MjMsNyArOTIyLDcgQEAKIAl9CiAKIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSUQ7Ci0JZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRCIpOworCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX0NJRCIpOwogCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKIAlyZXR1cm47CiAKQEAgLTkzMyw3ICs5MzIsNyBAQAogCQljb21tYW5kc1tpXSA9IE5VTEw7CiAJfQogCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX05PQ0lEOwotCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19OT0NJRCIpOworCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX05PQ0lEIik7CiAJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwogCXJldHVybjsKIH0KQEAgLTk1NSw3ICs5NTQsNyBAQAogCQlkZXZfZXJyKGF0X3N0YXRlLT5jcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCS8qIGVycm9yIHJlc2V0ICovCiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOworCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKIAkJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwogCQlyZXR1cm47CiAJfQpAQCAtOTY0LDcgKzk2Myw3IEBACiAJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU09dLCA5LCAiXlNJU089JXVcciIsIGJjcy0+Y2hhbm5lbCArIDEpOwogCiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQUNDRVBUOwotCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19BQ0NFUFQiKTsKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19BQ0NFUFQiKTsKIAljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7CiB9CiAKQEAgLTEwMDksOCArMTAwOCw4IEBACiAJaWYgKGNzLT5tc3RhdGUgPT0gTVNfUkVBRFkpIHsKIAkJY3MtPm1zdGF0ZSA9IE1TX1NIVVRET1dOOwogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19TSFVURE9XTjsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfU0hVVERPV04iKTsKIAkJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwotCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfU0hVVERPV04iKTsKIAl9IGVsc2UKIAkJZmluaXNoX3NodXRkb3duKGNzKTsKIH0KQEAgLTExOTEsOCArMTE5MCw4IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lETU9ERTsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxJTklUOgogCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IGluaXRpYWxpemUgdGhlIGRldmljZS5cbiIpOwpAQCAtMTQ0Myw3ICsxNDQyLDcgQEAKIAljYXNlIEFDVF9HT1RWRVI6CiAJCWlmIChjcy0+Z290Znd2ZXIgPT0gMCkgewogCQkJY3MtPmdvdGZ3dmVyID0gMTsKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwKIAkJCQkiZmlybXdhcmUgdmVyc2lvbiAlMDJkLiUwM2QuJTAyZC4lMDJkIiwKIAkJCQljcy0+Znd2ZXJbMF0sIGNzLT5md3ZlclsxXSwKIAkJCQljcy0+Znd2ZXJbMl0sIGNzLT5md3ZlclszXSk7CkBAIC0xNDgxLDggKzE0ODAsOCBAQAogCQlicmVhazsKIAljYXNlIEFDVF9IVVA6CiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CiAJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOwogCQlicmVhazsKIAogCS8qIGhvdHBsdWcgZXZlbnRzICovCkBAIC0xNTE5LDEwICsxNTE4LDEwIEBACiAJCQljcy0+Y2lkbW9kZSA9IGV2LT5wYXJhbWV0ZXI7CiAJCQlpZiAoZXYtPnBhcmFtZXRlcikgewogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCQl9IGVsc2UgewogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1VNTU9ERTsKLQkJCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CiAJCQl9CiAJCQljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7CiAJCX0KQEAgLTE1NzMsNiArMTU3Miw4IEBACiAJaWYgKGV2LT5jaWQgPj0gMCkgewogCQlhdF9zdGF0ZSA9IGF0X3N0YXRlX2Zyb21fY2lkKGNzLCBldi0+Y2lkKTsKIAkJaWYgKCFhdF9zdGF0ZSkgeworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgImV2ZW50ICVkIGZvciBpbnZhbGlkIGNpZCAlZCIsCisJCQkJZXYtPnR5cGUsIGV2LT5jaWQpOwogCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIFJTUF9XUk9OR19DSUQsCiAJCQkJCSAgTlVMTCwgMCwgTlVMTCk7CiAJCQlyZXR1cm47CkBAIC0xNTgwLDEzICsxNTgxLDEzIEBACiAJfSBlbHNlIHsKIAkJYXRfc3RhdGUgPSBldi0+YXRfc3RhdGU7CiAJCWlmIChhdF9zdGF0ZV9pbnZhbGlkKGNzLCBhdF9zdGF0ZSkpIHsKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiZXZlbnQgZm9yIGludmFsaWQgYXRfc3RhdGUgJXAiLAorCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgImV2ZW50IGZvciBpbnZhbGlkIGF0X3N0YXRlICVwIiwKIAkJCQlhdF9zdGF0ZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlnaWdfZGJnKERFQlVHX0NNRCwgImNvbm5lY3Rpb24gc3RhdGUgJWQsIGV2ZW50ICVkIiwKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAiY29ubmVjdGlvbiBzdGF0ZSAlZCwgZXZlbnQgJWQiLAogCQlhdF9zdGF0ZS0+Q29uU3RhdGUsIGV2LT50eXBlKTsKIAogCWJjcyA9IGF0X3N0YXRlLT5iY3M7CkBAIC0xNjAwLDExICsxNjAxLDExIEBACiAJCWlmIChldi0+cGFyYW1ldGVyICE9IGF0X3N0YXRlLT50aW1lcl9pbmRleAogCQkgICAgfHwgIWF0X3N0YXRlLT50aW1lcl9hY3RpdmUpIHsKIAkJCWV2LT50eXBlID0gUlNQX05PTkU7IC8qIG9sZCB0aW1lb3V0ICovCi0JCQlnaWdfZGJnKERFQlVHX0FOWSwgIm9sZCB0aW1lb3V0Iik7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAib2xkIHRpbWVvdXQiKTsKIAkJfSBlbHNlIGlmICghYXRfc3RhdGUtPndhaXRpbmcpCi0JCQlnaWdfZGJnKERFQlVHX0FOWSwgInRpbWVvdXQgb2NjdXJyZWQiKTsKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJ0aW1lb3V0IG9jY3VycmVkIik7CiAJCWVsc2UKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLCAic3RvcHBlZCB3YWl0aW5nIik7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAic3RvcHBlZCB3YWl0aW5nIik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE3MTIsMTEgKzE3MTMsMTEgQEAKIAljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDA7CiAKIAlpZiAoY3MtPmN1cl9hdF9zZXEpIHsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJub3Qgc2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kczogYnVzeSIpOworCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAibm90IHNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHM6IGJ1c3kiKTsKIAkJcmV0dXJuOwogCX0KIAotCWdpZ19kYmcoREVCVUdfQ01ELCAic2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kcyIpOworCWdpZ19kYmcoREVCVUdfRVZFTlQsICJzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzIik7CiAKIAlzZXF1ZW5jZSA9IFNFUV9OT05FOwogCkBAIC0xODU3LDcgKzE4NTgsNyBAQAogCQkJc3dpdGNoIChjcy0+bW9kZSkgewogCQkJY2FzZSBNX1VOSU1PREVNOgogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCQkJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwogCQkJCXJldHVybjsKICNpZmRlZiBHSUdfTUFZSU5JVE9ORElBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCmluZGV4IGU5NjNhNmMuLjE4NzVhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaAorKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgR0lHX0NPTVBBVCAgezAsIDQsIDAsIDB9CiAKICNkZWZpbmUgTUFYX1JFQ19QQVJBTVMgMTAJLyogTWF4LiBudW1iZXIgb2YgcGFyYW1zIGluIHJlc3BvbnNlIHN0cmluZyAqLwotI2RlZmluZSBNQVhfUkVTUF9TSVpFIDUxMgkvKiBNYXguIHNpemUgb2YgYSByZXNwb25zZSBzdHJpbmcgKi8KKyNkZWZpbmUgTUFYX1JFU1BfU0laRSA1MTEJLyogTWF4LiBzaXplIG9mIGEgcmVzcG9uc2Ugc3RyaW5nICovCiAKICNkZWZpbmUgTUFYX0VWRU5UUyA2NAkJLyogc2l6ZSBvZiBldmVudCBxdWV1ZSAqLwogCkBAIC03OCw5ICs3OCwxMCBAQAogCURFQlVHX1NUUkVBTQkgID0gMHgwMDA0MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gSS9PIGV2ZW50cyAqLwogCURFQlVHX1NUUkVBTV9EVU1QID0gMHgwMDA4MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gY29udGVudCAqLwogCURFQlVHX0xMREFUQQkgID0gMHgwMDEwMCwgLyogc2VudC9yZWNlaXZlZCBMTCBkYXRhICovCisJREVCVUdfRVZFTlQJICA9IDB4MDAyMDAsIC8qIGV2ZW50IHByb2Nlc3NpbmcgKi8KIAlERUJVR19EUklWRVIJICA9IDB4MDA0MDAsIC8qIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIAlERUJVR19IRExDCSAgPSAweDAwODAwLCAvKiBNMTB4IEhETEMgcHJvY2Vzc2luZyAqLwotCURFQlVHX1dSSVRFCSAgPSAweDAxMDAwLCAvKiBNMTA1IGRhdGEgd3JpdGUgKi8KKwlERUJVR19DSEFOTkVMCSAgPSAweDAxMDAwLCAvKiBjaGFubmVsIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uICovCiAJREVCVUdfVFJBTlNDTUQJICA9IDB4MDIwMDAsIC8qIEFULUNPTU1BTkRTK1JFU1BPTlNFUyAqLwogCURFQlVHX01DTUQJICA9IDB4MDQwMDAsIC8qIENPTU1BTkRTIFRIQVQgQVJFIFNFTlQgVkVSWSBPRlRFTiAqLwogCURFQlVHX0lOSVQJICA9IDB4MDgwMDAsIC8qIChkZSlhbGxvY2F0aW9uK2luaXRpYWxpemF0aW9uIG9mIGRhdGEKQEAgLTQ5OCw3ICs0OTksNyBAQAogCXNwaW5sb2NrX3QgZXZfbG9jazsKIAogCS8qIGN1cnJlbnQgbW9kZW0gcmVzcG9uc2UgKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3BkYXRhW01BWF9SRVNQX1NJWkVdOworCXVuc2lnbmVkIGNoYXIgcmVzcGRhdGFbTUFYX1JFU1BfU0laRSsxXTsKIAl1bnNpZ25lZCBjYnl0ZXM7CiAKIAkvKiBwcml2YXRlIGRhdGEgb2YgaGFyZHdhcmUgZHJpdmVycyAqLwpAQCAtNzg1LDggKzc4Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZ2lnYXNldF9iY2hhbm5lbF9kb3duKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWdpZ2FzZXRfYWRkX2V2ZW50KGJjcy0+Y3MsICZiY3MtPmF0X3N0YXRlLCBFVl9CQ19DTE9TRUQsIE5VTEwsIDAsIE5VTEwpOwotCi0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX0NMT1NFRCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoYmNzLT5jcyk7CiB9CiAKQEAgLTc5NSw4ICs3OTQsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGdpZ2FzZXRfYmNoYW5uZWxfdXAoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJZ2lnYXNldF9hZGRfZXZlbnQoYmNzLT5jcywgJmJjcy0+YXRfc3RhdGUsIEVWX0JDX09QRU4sIE5VTEwsIDAsIE5VTEwpOwotCi0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX09QRU4iKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGJjcy0+Y3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCmluZGV4IGMxMjllZTQuLmYwYWNiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIElTRE5fQ01EX0RJQUw6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLAorCQlnaWdfZGJnKERFQlVHX0NNRCwKIAkJCSJJU0ROX0NNRF9ESUFMIChwaG9uZTogJXMsIG1zbjogJXMsIHNpMTogJWQsIHNpMjogJWQpIiwKIAkJCWNudHJsLT5wYXJtLnNldHVwLnBob25lLCBjbnRybC0+cGFybS5zZXR1cC5lYXptc24sCiAJCQljbnRybC0+cGFybS5zZXR1cC5zaTEsIGNudHJsLT5wYXJtLnNldHVwLnNpMik7CkBAIC0zMDQsMTEgKzMwNCwxMCBAQAogCQkJZ2lnYXNldF9mcmVlX2NoYW5uZWwoYmNzKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0KLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIERJQUwiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfQUNDRVBURDoKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJJU0ROX0NNRF9BQ0NFUFREIik7CiAJCWlmIChjaCA+PSBjcy0+Y2hhbm5lbHMpIHsKIAkJCWRldl9lcnIoY3MtPmRldiwKIAkJCQkiSVNETl9DTURfQUNDRVBURDogaW52YWxpZCBjaGFubmVsICglZClcbiIsIGNoKTsKQEAgLTMxOCwxNCArMzE3LDExIEBACiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLAogCQkJCSAgICAgICBFVl9BQ0NFUFQsIE5VTEwsIDAsIE5VTEwpKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEFDQ0VQVCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0FDQ0VQVEI6Ci0JCWJyZWFrOwogCWNhc2UgSVNETl9DTURfSEFOR1VQOgorCQlnaWdfZGJnKERFQlVHX0NNRCwgIklTRE5fQ01EX0hBTkdVUCIpOwogCQlpZiAoY2ggPj0gY3MtPmNoYW5uZWxzKSB7CiAJCQlkZXZfZXJyKGNzLT5kZXYsCiAJCQkJIklTRE5fQ01EX0hBTkdVUDogaW52YWxpZCBjaGFubmVsICglZClcbiIsIGNoKTsKQEAgLTMzNSw4ICszMzEsNiBAQAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwKIAkJCQkgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkKIAkJCXJldHVybiAtRU5PTUVNOwotCi0JCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJYnJlYWs7CkBAIC0zNzYsNiArMzcwLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1NFVEwzOiAvKiBTZXQgTDMgdG8gZ2l2ZW4gcHJvdG9jb2wgKi8KKwkJZ2lnX2RiZyhERUJVR19DTUQsICJJU0ROX0NNRF9TRVRMMyIpOwogCQlpZiAoY2ggPj0gY3MtPmNoYW5uZWxzKSB7CiAJCQlkZXZfZXJyKGNzLT5kZXYsCiAJCQkJIklTRE5fQ01EX1NFVEwzOiBpbnZhbGlkIGNoYW5uZWwgKCVkKVxuIiwgY2gpOwpAQCAtMzkwLDQ0ICszODUsOSBAQAogCQl9CiAKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9QUk9DRUVEOgotCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST0NFRUQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9BTEVSVDoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9BTEVSVCIpOwotCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWRldl9lcnIoY3MtPmRldiwKLQkJCQkiSVNETl9DTURfQUxFUlQ6IGludmFsaWQgY2hhbm5lbCAoJWQpXG4iLAotCQkJCShpbnQpIGNudHJsLT5hcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9SRURJUjoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9SRURJUiIpOwotCQlicmVhazsKLQljYXNlIElTRE5fQ01EX1BST1RfSU86Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPVF9JTyIpOwotCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0ZBWENNRDoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9GQVhDTUQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9HRVRMMjoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMiIpOwotCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0dFVEwzOgotCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEwzIik7Ci0JCWJyZWFrOwotCWNhc2UgSVNETl9DTURfR0VURUFaOgotCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEVBWiIpOwotCQlicmVhazsKLQljYXNlIElTRE5fQ01EX1NFVFNJTDoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9TRVRTSUwiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9HRVRTSUw6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUU0lMIik7Ci0JCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJZGV2X2Vycihjcy0+ZGV2LCAidW5rbm93biBjb21tYW5kICVkIGZyb20gTExcbiIsCisJCWdpZ19kYmcoREVCVUdfQ01ELCAidW5rbm93biBjb21tYW5kICVkIGZyb20gTEwiLAogCQkJY250cmwtPmNvbW1hbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCmluZGV4IGQyMjYwYjAuLmExYmNiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCkBAIC00NSw4ICs0NSw2IEBACiAJCWNzLT53YWl0aW5nID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCi0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX0xPQ0siKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTgxLDggKzc5LDYgQEAKIAkJCWNzLT53YWl0aW5nID0gMDsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0KLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX1ZFUiIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CkBAIC0yNzQsNyArMjcwLDcgQEAKIAkJCQkJPyAtRUZBVUxUIDogMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZ2lnX2RiZyhERUJVR19BTlksICIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLAorCQkJZ2lnX2RiZyhERUJVR19JRiwgIiVzOiBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsCiAJCQkJX19mdW5jX18sIGNtZCk7CiAJCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CiAJCX0KQEAgLTQ1NSw3ICs0NTEsNyBAQAogCWVsc2UgaWYgKCFjcy0+b3Blbl9jb3VudCkKIAkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiBkZXZpY2Ugbm90IG9wZW5lZFxuIiwgX19mdW5jX18pOwogCWVsc2UKLQkJZ2lnX2RiZyhERUJVR19BTlksICIlczogbm90IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSUYsICIlczogbm90IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7CiAKIAltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CkBAIC00NzksNyArNDc1LDcgQEAKIAllbHNlIGlmICghY3MtPm9wZW5fY291bnQpCiAJCWRldl93YXJuKGNzLT5kZXYsICIlczogZGV2aWNlIG5vdCBvcGVuZWRcbiIsIF9fZnVuY19fKTsKIAllbHNlCi0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOwogCiAJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQpAQCAtNjMwLDcgKzYyNiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJdHR5ID0gY3MtPnR0eTsKIAlpZiAodHR5ID09IE5VTEwpCi0JCWdpZ19kYmcoREVCVUdfQU5ZLCAicmVjZWl2ZSBvbiBjbG9zZWQgZGV2aWNlIik7CisJCWdpZ19kYmcoREVCVUdfSUYsICJyZWNlaXZlIG9uIGNsb3NlZCBkZXZpY2UiKTsKIAllbHNlIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW4pOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgYnVmZmVyLCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKaW5kZXggODUzOTRhNi4uMTZmZDNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCkBAIC05MDUsMjkgKzkwNSw0OSBAQAogCiAvKiA9PSBkYXRhIGlucHV0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKy8qIHByb2Nlc3MgYSBibG9jayBvZiByZWNlaXZlZCBieXRlcyBpbiBjb21tYW5kIG1vZGUgKG1zdGF0ZSAhPSBNU19MT0NLRUQpCisgKiBBcHBlbmQgcmVjZWl2ZWQgYnl0ZXMgdG8gdGhlIGNvbW1hbmQgcmVzcG9uc2UgYnVmZmVyIGFuZCBmb3J3YXJkIHRoZW0KKyAqIGxpbmUgYnkgbGluZSB0byB0aGUgcmVzcG9uc2UgaGFuZGxlci4KKyAqIE5vdGU6IFJlY2VpdmVkIGxpbmVzIG1heSBiZSB0ZXJtaW5hdGVkIGJ5IENSLCBMRiwgb3IgQ1IgTEYsIHdoaWNoIHdpbGwgYmUKKyAqIHJlbW92ZWQgYmVmb3JlIHBhc3NpbmcgdGhlIGxpbmUgdG8gdGhlIHJlc3BvbnNlIGhhbmRsZXIuCisgKi8KIHN0YXRpYyB2b2lkIGNtZF9sb29wKHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLCBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAJdW5zaWduZWQgY2J5dGVzICAgICAgPSBjcy0+Y2J5dGVzOworCXVuc2lnbmVkIGNoYXIgYzsKIAogCXdoaWxlIChudW1ieXRlcy0tKSB7Ci0JCS8qIGNvcHkgbmV4dCBjaGFyYWN0ZXIsIGNoZWNrIGZvciBlbmQgb2YgbGluZSAqLwotCQlzd2l0Y2ggKGNzLT5yZXNwZGF0YVtjYnl0ZXNdID0gKnNyYysrKSB7Ci0JCWNhc2UgJ1xyJzoKKwkJYyA9ICpzcmMrKzsKKwkJc3dpdGNoIChjKSB7CiAJCWNhc2UgJ1xuJzoKLQkJCS8qIGVuZCBvZiBsaW5lICovCi0JCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAotCQkJCV9fZnVuY19fLCBjYnl0ZXMpOwotCQkJaWYgKGNieXRlcyA+PSBNQVhfUkVTUF9TSVpFIC0gMSkKLQkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlXG4iKTsKKwkJCWlmIChjYnl0ZXMgPT0gMCAmJiBjcy0+cmVzcGRhdGFbMF0gPT0gJ1xyJykgeworCQkJCS8qIGNvbGxhcHNlIExGIHdpdGggcHJlY2VkaW5nIENSICovCisJCQkJY3MtPnJlc3BkYXRhWzBdID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIC0tdi0tIGZhbGwgdGhyb3VnaCAtLXYtLSAqLworCQljYXNlICdccic6CisJCQkvKiBlbmQgb2YgbWVzc2FnZSBsaW5lLCBwYXNzIHRvIHJlc3BvbnNlIGhhbmRsZXIgKi8KKwkJCWlmIChjYnl0ZXMgPj0gTUFYX1JFU1BfU0laRSkgeworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZXNwb25zZSB0b28gbGFyZ2UgKCVkKVxuIiwKKwkJCQkJIGNieXRlcyk7CisJCQkJY2J5dGVzID0gTUFYX1JFU1BfU0laRTsKKwkJCX0KIAkJCWNzLT5jYnl0ZXMgPSBjYnl0ZXM7CisJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfVFJBTlNDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCisJCQkJCSAgIGNieXRlcywgY3MtPnJlc3BkYXRhKTsKIAkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsKIAkJCWNieXRlcyA9IDA7CisKKwkJCS8qIHN0b3JlIEVPTCBieXRlIGZvciBDUkxGIGNvbGxhcHNpbmcgKi8KKwkJCWNzLT5yZXNwZGF0YVswXSA9IGM7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCS8qIGFkdmFuY2UgaW4gbGluZSBidWZmZXIsIGNoZWNraW5nIGZvciBvdmVyZmxvdyAqLwotCQkJaWYgKGNieXRlcyA8IE1BWF9SRVNQX1NJWkUgLSAxKQotCQkJCWNieXRlcysrOworCQkJLyogYXBwZW5kIHRvIGxpbmUgYnVmZmVyIGlmIHBvc3NpYmxlICovCisJCQlpZiAoY2J5dGVzIDwgTUFYX1JFU1BfU0laRSkKKwkJCQljcy0+cmVzcGRhdGFbY2J5dGVzXSA9IGM7CisJCQljYnl0ZXMrKzsKIAkJfQogCX0KIApAQCAtOTU4LDggKzk3OCw2IEBACiAJCQkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCQkJZ2lnYXNldF9pZl9yZWNlaXZlKGluYnVmLT5jcywgc3JjLCBudW1ieXRlcyk7CiAJCX0gZWxzZSB7Ci0JCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAotCQkJCQkgICBudW1ieXRlcywgc3JjKTsKIAkJCWNtZF9sb29wKHNyYywgbnVtYnl0ZXMsIGluYnVmKTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKaW5kZXggNzU4YTAwYy4uYjY5ZjczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYwpAQCAtNDgsOCArNDgsNiBAQAogCQltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9DX0NJRE1PREUiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCmluZGV4IDNhYjFkYWUuLjk0MzBhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwpAQCAtNjI4LDcgKzYyOCw3IEBACiAJc3RydWN0IHVzYl9jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody51c2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWdpZ19kYmcoREVCVUdfV1JJVEUsICJsZW46ICVkLi4uIiwgYmNzLT50eF9za2ItPmxlbik7CisJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJsZW46ICVkLi4uIiwgYmNzLT50eF9za2ItPmxlbik7CiAKIAlpZiAoIWJjcy0+dHhfc2tiLT5sZW4pIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT50eF9za2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1jYXJkLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bWNhcmQuaAppbmRleCBkOTY0ZjA3Li5hNzBlODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bWNhcmQuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bWNhcmQuaApAQCAtNTU2LDggKzU1Niw3IEBACiB2b2lkIGIxX3BhcnNlX3ZlcnNpb24oYXZtY3RybF9pbmZvICpjYXJkKTsKIGlycXJldHVybl90IGIxX2ludGVycnVwdChpbnQgaW50ZXJydXB0LCB2b2lkICpkZXZwdHIpOwogCi1pbnQgYjFjdGxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAJCWludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RybCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiMWN0bF9wcm9jX2ZvcHM7CiAKIGF2bWNhcmRfZG1haW5mbyAqYXZtY2FyZF9kbWFfYWxsb2MoY2hhciAqbmFtZSwgc3RydWN0IHBjaV9kZXYgKiwKIAkJCQkgICBsb25nIHJzaXplLCBsb25nIHNzaXplKTsKQEAgLTU3Nyw3ICs1NzYsNiBAQAogCQkJCWNhcGlfcmVnaXN0ZXJfcGFyYW1zICpycCk7CiB2b2lkIGIxZG1hX3JlbGVhc2VfYXBwbChzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwsIHUxNiBhcHBsKTsKIHUxNiAgYjFkbWFfc2VuZF9tZXNzYWdlKHN0cnVjdCBjYXBpX2N0ciAqY3RybCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgYjFkbWFjdGxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAJCWludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RybCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiMWRtYWN0bF9wcm9jX2ZvcHM7CiAKICNlbmRpZiAvKiBfQVZNQ0FSRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jCmluZGV4IGE3YzAwODMuLmMzOGZhMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjEuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxLmMKQEAgLTEyLDYgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC02MzQsMTggKzYzNiwxNyBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgYjFjdGxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAJCWludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RybCkKK3N0YXRpYyBpbnQgYjFjdGxfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwgPSBtLT5wcml2YXRlOwogCWF2bWN0cmxfaW5mbyAqY2luZm8gPSAoYXZtY3RybF9pbmZvICopKGN0cmwtPmRyaXZlcmRhdGEpOwogCWF2bWNhcmQgKmNhcmQgPSBjaW5mby0+Y2FyZDsKIAl1OCBmbGFnOwotCWludCBsZW4gPSAwOwogCWNoYXIgKnM7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGNhcmQtPm5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+cG9ydCk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlZFxuIiwgImlycSIsIGNhcmQtPmlycSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY2FyZC0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+cG9ydCk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOwogCXN3aXRjaCAoY2FyZC0+Y2FyZHR5cGUpIHsKIAljYXNlIGF2bV9iMWlzYTogcyA9ICJCMSBJU0EiOyBicmVhazsKIAljYXNlIGF2bV9iMXBjaTogcyA9ICJCMSBQQ0kiOyBicmVhazsKQEAgLTY1OCwyMCArNjU5LDIwIEBACiAJY2FzZSBhdm1fYzI6IHMgPSAiQzIiOyBicmVhazsKIAlkZWZhdWx0OiBzID0gIj8/PyI7IGJyZWFrOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidHlwZSIsIHMpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidHlwZSIsIHMpOwogCWlmIChjYXJkLT5jYXJkdHlwZSA9PSBhdm1fdDFpc2EpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlZFxuIiwgImNhcmRuciIsIGNhcmQtPmNhcmRucik7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVkXG4iLCAiY2FyZG5yIiwgY2FyZC0+Y2FyZG5yKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfRFJJVkVSXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2RyaXZlciIsIHMpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfQ0FSRFRZUEVdKSAhPSBOVUxMKQotCSAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfU0VSSUFMXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX3NlcmlhbCIsIHMpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKIAogCWlmIChjYXJkLT5jYXJkdHlwZSAhPSBhdm1fbTEpIHsKICAgICAgICAgCWZsYWcgPSAoKHU4ICopKGN0cmwtPnByb2ZpbGUubWFudSkpWzNdOwogICAgICAgICAJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAogCQkJInByb3RvY29sIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIERTUzEiIDogIiIsCiAJCQkoZmxhZyAmIDB4MDIpID8gIiBDVDEiIDogIiIsCkBAIC02ODUsNyArNjg2LDcgQEAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVs1XTsKIAkJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzXG4iLAogCQkJImxpbmV0eXBlIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIHBvaW50IHRvIHBvaW50IiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgcG9pbnQgdG8gbXVsdGlwb2ludCIgOiAiIiwKQEAgLTY5MywxNiArNjk0LDI1IEBACiAJCQkoZmxhZyAmIDB4MDQpID8gIiBsZWFzZWQgbGluZSB3aXRoIEQtY2hhbm5lbCIgOiAiIgogCQkJKTsKIAl9Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgImNhcmRuYW1lIiwgY2luZm8tPmNhcmRuYW1lKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgImNhcmRuYW1lIiwgY2luZm8tPmNhcmRuYW1lKTsKIAotCWlmIChvZmYrY291bnQgPj0gbGVuKQotCSAgICplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0gICAgICAgICAgIHJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4tb2ZmKSA/IGNvdW50IDogbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYjFjdGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBiMWN0bF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGIxY3RsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYjFjdGxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworRVhQT1JUX1NZTUJPTChiMWN0bF9wcm9jX2ZvcHMpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC03ODEsOCArNzkxLDYgQEAKIEVYUE9SVF9TWU1CT0woYjFfcGFyc2VfdmVyc2lvbik7CiBFWFBPUlRfU1lNQk9MKGIxX2ludGVycnVwdCk7CiAKLUVYUE9SVF9TWU1CT0woYjFjdGxfcmVhZF9wcm9jKTsKLQogc3RhdGljIGludCBfX2luaXQgYjFfaW5pdCh2b2lkKQogewogCWNoYXIgKnA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMKaW5kZXggMGU4NGFhYS4uMTI0NTUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWRtYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYwpAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtODU1LDIxICs4NTcsMjAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1pbnQgYjFkbWFjdGxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAJCWludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RybCkKK3N0YXRpYyBpbnQgYjFkbWFjdGxfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwgPSBtLT5wcml2YXRlOwogCWF2bWN0cmxfaW5mbyAqY2luZm8gPSAoYXZtY3RybF9pbmZvICopKGN0cmwtPmRyaXZlcmRhdGEpOwogCWF2bWNhcmQgKmNhcmQgPSBjaW5mby0+Y2FyZDsKIAl1OCBmbGFnOwotCWludCBsZW4gPSAwOwogCWNoYXIgKnM7CiAJdTMyIHR4b2ZmLCB0eGxlbiwgcnhvZmYsIHJ4bGVuLCBjc3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY2FyZC0+bmFtZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAweCV4XG4iLCAiaW8iLCBjYXJkLT5wb3J0KTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVkXG4iLCAiaXJxIiwgY2FyZC0+aXJxKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JWx4XG4iLCAibWVtYmFzZSIsIGNhcmQtPm1lbWJhc2UpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGNhcmQtPm5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPnBvcnQpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVkXG4iLCAiaXJxIiwgY2FyZC0+aXJxKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAweCVseFxuIiwgIm1lbWJhc2UiLCBjYXJkLT5tZW1iYXNlKTsKIAlzd2l0Y2ggKGNhcmQtPmNhcmR0eXBlKSB7CiAJY2FzZSBhdm1fYjFpc2E6IHMgPSAiQjEgSVNBIjsgYnJlYWs7CiAJY2FzZSBhdm1fYjFwY2k6IHMgPSAiQjEgUENJIjsgYnJlYWs7CkBAIC04ODIsMTggKzg4MywxOCBAQAogCWNhc2UgYXZtX2MyOiBzID0gIkMyIjsgYnJlYWs7CiAJZGVmYXVsdDogcyA9ICI/Pz8iOyBicmVhazsKIAl9Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInR5cGUiLCBzKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInR5cGUiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfRFJJVkVSXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2RyaXZlciIsIHMpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfQ0FSRFRZUEVdKSAhPSBOVUxMKQotCSAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfU0VSSUFMXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX3NlcmlhbCIsIHMpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKIAogCWlmIChjYXJkLT5jYXJkdHlwZSAhPSBhdm1fbTEpIHsKICAgICAgICAgCWZsYWcgPSAoKHU4ICopKGN0cmwtPnByb2ZpbGUubWFudSkpWzNdOwogICAgICAgICAJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAogCQkJInByb3RvY29sIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIERTUzEiIDogIiIsCiAJCQkoZmxhZyAmIDB4MDIpID8gIiBDVDEiIDogIiIsCkBAIC05MDcsNyArOTA4LDcgQEAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVs1XTsKIAkJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzXG4iLAogCQkJImxpbmV0eXBlIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIHBvaW50IHRvIHBvaW50IiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgcG9pbnQgdG8gbXVsdGlwb2ludCIgOiAiIiwKQEAgLTkxNSw3ICs5MTYsNyBAQAogCQkJKGZsYWcgJiAweDA0KSA/ICIgbGVhc2VkIGxpbmUgd2l0aCBELWNoYW5uZWwiIDogIiIKIAkJCSk7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CiAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CkBAIC05MzAsMjcgKzkzMSwzMCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCi0gICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHglbHhcbiIsCi0JCQkJImNzciAoY2FjaGVkKSIsICh1bnNpZ25lZCBsb25nKWNhcmQtPmNzcik7Ci0gICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHglbHhcbiIsCi0JCQkJImNzciIsICh1bnNpZ25lZCBsb25nKWNzcik7Ci0gICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWx1XG4iLAotCQkJCSJ0eG9mZiIsICh1bnNpZ25lZCBsb25nKXR4b2ZmKTsKLSAgICAgICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlbHVcbiIsCi0JCQkJInR4bGVuIiwgKHVuc2lnbmVkIGxvbmcpdHhsZW4pOwotICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVsdVxuIiwKLQkJCQkicnhvZmYiLCAodW5zaWduZWQgbG9uZylyeG9mZik7Ci0gICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWx1XG4iLAotCQkJCSJyeGxlbiIsICh1bnNpZ25lZCBsb25nKXJ4bGVuKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAweCVseFxuIiwgImNzciAoY2FjaGVkKSIsICh1bnNpZ25lZCBsb25nKWNhcmQtPmNzcik7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHglbHhcbiIsICJjc3IiLCAodW5zaWduZWQgbG9uZyljc3IpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVsdVxuIiwgInR4b2ZmIiwgKHVuc2lnbmVkIGxvbmcpdHhvZmYpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVsdVxuIiwgInR4bGVuIiwgKHVuc2lnbmVkIGxvbmcpdHhsZW4pOworCXNlcV9wcmludGYobSwgIiUtMTZzICVsdVxuIiwgInJ4b2ZmIiwgKHVuc2lnbmVkIGxvbmcpcnhvZmYpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVsdVxuIiwgInJ4bGVuIiwgKHVuc2lnbmVkIGxvbmcpcnhsZW4pOwogCi0JaWYgKG9mZitjb3VudCA+PSBsZW4pCi0JICAgKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLSAgICAgICAgICAgcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbi1vZmYpID8gY291bnQgOiBsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBiMWRtYWN0bF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGIxZG1hY3RsX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYjFkbWFjdGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBiMWRtYWN0bF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CitFWFBPUlRfU1lNQk9MKGIxZG1hY3RsX3Byb2NfZm9wcyk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogRVhQT1JUX1NZTUJPTChiMWRtYV9yZXNldCk7CkBAIC05NjMsNyArOTY3LDYgQEAKIEVYUE9SVF9TWU1CT0woYjFkbWFfcmVnaXN0ZXJfYXBwbCk7CiBFWFBPUlRfU1lNQk9MKGIxZG1hX3JlbGVhc2VfYXBwbCk7CiBFWFBPUlRfU1lNQk9MKGIxZG1hX3NlbmRfbWVzc2FnZSk7Ci1FWFBPUlRfU1lNQk9MKGIxZG1hY3RsX3JlYWRfcHJvYyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IGIxZG1hX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFpc2EuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFpc2EuYwppbmRleCA2NDYxYTMyLi5mZjUzOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxaXNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWlzYS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAljaW5mby0+Y2FwaV9jdHJsLmxvYWRfZmlybXdhcmUgPSBiMV9sb2FkX2Zpcm13YXJlOwogCWNpbmZvLT5jYXBpX2N0cmwucmVzZXRfY3RyICAgICA9IGIxX3Jlc2V0X2N0cjsKIAljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBiMWlzYV9wcm9jaW5mbzsKLQljaW5mby0+Y2FwaV9jdHJsLmN0cl9yZWFkX3Byb2MgPSBiMWN0bF9yZWFkX3Byb2M7CisJY2luZm8tPmNhcGlfY3RybC5wcm9jX2ZvcHMgPSAmYjFjdGxfcHJvY19mb3BzOwogCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCiAJcmV0dmFsID0gYXR0YWNoX2NhcGlfY3RyKCZjaW5mby0+Y2FwaV9jdHJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY2kuYwppbmRleCA1YjMxNGEyLi5jOTdlNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjaS5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAljaW5mby0+Y2FwaV9jdHJsLmxvYWRfZmlybXdhcmUgPSBiMV9sb2FkX2Zpcm13YXJlOwogCWNpbmZvLT5jYXBpX2N0cmwucmVzZXRfY3RyICAgICA9IGIxX3Jlc2V0X2N0cjsKIAljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBiMXBjaV9wcm9jaW5mbzsKLQljaW5mby0+Y2FwaV9jdHJsLmN0cl9yZWFkX3Byb2MgPSBiMWN0bF9yZWFkX3Byb2M7CisJY2luZm8tPmNhcGlfY3RybC5wcm9jX2ZvcHMgPSAmYjFjdGxfcHJvY19mb3BzOwogCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCWNpbmZvLT5jYXBpX2N0cmwub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFOwogCkBAIC0yNTEsNyArMjUxLDcgQEAKIAljaW5mby0+Y2FwaV9jdHJsLmxvYWRfZmlybXdhcmUgPSBiMWRtYV9sb2FkX2Zpcm13YXJlOwogCWNpbmZvLT5jYXBpX2N0cmwucmVzZXRfY3RyICAgICA9IGIxZG1hX3Jlc2V0X2N0cjsKIAljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBiMXBjaXY0X3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxZG1hY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWRtYWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjbWNpYS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjbWNpYS5jCmluZGV4IDc3NDA0MDMuLmQ2MzkxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY21jaWEuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNtY2lhLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWNpbmZvLT5jYXBpX2N0cmwubG9hZF9maXJtd2FyZSA9IGIxX2xvYWRfZmlybXdhcmU7CiAJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gYjFfcmVzZXRfY3RyOwogCWNpbmZvLT5jYXBpX2N0cmwucHJvY2luZm8gICAgICA9IGIxcGNtY2lhX3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCmluZGV4IDY4MzMzMDFhLi5kZTZlNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xMDYyLDE5ICsxMDY0LDE4IEBACiAJcmV0dXJuIGNpbmZvLT5pbmZvYnVmOwogfQogCi1zdGF0aWMgaW50IGM0X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGM0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlhdm1jdHJsX2luZm8gKmNpbmZvID0gKGF2bWN0cmxfaW5mbyAqKShjdHJsLT5kcml2ZXJkYXRhKTsKIAlhdm1jYXJkICpjYXJkID0gY2luZm8tPmNhcmQ7CiAJdTggZmxhZzsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpzOwogCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjYXJkLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPnBvcnQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHglbHhcbiIsICJtZW1iYXNlIiwgY2FyZC0+bWVtYmFzZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY2FyZC0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+cG9ydCk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JWx4XG4iLCAibWVtYmFzZSIsIGNhcmQtPm1lbWJhc2UpOwogCXN3aXRjaCAoY2FyZC0+Y2FyZHR5cGUpIHsKIAljYXNlIGF2bV9iMWlzYTogcyA9ICJCMSBJU0EiOyBicmVhazsKIAljYXNlIGF2bV9iMXBjaTogcyA9ICJCMSBQQ0kiOyBicmVhazsKQEAgLTEwODcsMTggKzEwODgsMTggQEAKIAljYXNlIGF2bV9jMjogcyA9ICJDMiI7IGJyZWFrOwogCWRlZmF1bHQ6IHMgPSAiPz8/IjsgYnJlYWs7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0RSSVZFUl0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfZHJpdmVyIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0NBUkRUWVBFXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX1NFUklBTF0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CiAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVszXTsKICAgICAgICAgCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlcyVzJXMlc1xuIiwKIAkJCSJwcm90b2NvbCIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBEU1MxIiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgQ1QxIiA6ICIiLApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVs1XTsKIAkJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzXG4iLAogCQkJImxpbmV0eXBlIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIHBvaW50IHRvIHBvaW50IiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgcG9pbnQgdG8gbXVsdGlwb2ludCIgOiAiIiwKQEAgLTExMjAsMTYgKzExMjEsMjQgQEAKIAkJCShmbGFnICYgMHgwNCkgPyAiIGxlYXNlZCBsaW5lIHdpdGggRC1jaGFubmVsIiA6ICIiCiAJCQkpOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOwogCi0JaWYgKG9mZitjb3VudCA+PSBsZW4pCi0JICAgKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLSAgICAgICAgICAgcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbi1vZmYpID8gY291bnQgOiBsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjNF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGM0X3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGM0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYzRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYzRfYWRkX2NhcmQoc3RydWN0IGNhcGljYXJkcGFyYW1zICpwLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMTIwMSw3ICsxMjEwLDcgQEAKIAkJY2luZm8tPmNhcGlfY3RybC5sb2FkX2Zpcm13YXJlID0gYzRfbG9hZF9maXJtd2FyZTsKIAkJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gYzRfcmVzZXRfY3RyOwogCQljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBjNF9wcm9jaW5mbzsKLQkJY2luZm8tPmNhcGlfY3RybC5jdHJfcmVhZF9wcm9jID0gYzRfcmVhZF9wcm9jOworCQljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZjNF9wcm9jX2ZvcHM7CiAJCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCiAJCXJldHZhbCA9IGF0dGFjaF9jYXBpX2N0cigmY2luZm8tPmNhcGlfY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKaW5kZXggMWM1M2ZkNC4uYmFlZWIzYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFpc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCWNpbmZvLT5jYXBpX2N0cmwubG9hZF9maXJtd2FyZSA9IHQxaXNhX2xvYWRfZmlybXdhcmU7CiAJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gdDFpc2FfcmVzZXRfY3RyOwogCWNpbmZvLT5jYXBpX2N0cmwucHJvY2luZm8gICAgICA9IHQxaXNhX3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MXBjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MXBjaS5jCmluZGV4IGU2ZDI5OGQuLjVhM2Y4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxcGNpLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCWNpbmZvLT5jYXBpX2N0cmwubG9hZF9maXJtd2FyZSA9IGIxZG1hX2xvYWRfZmlybXdhcmU7CiAJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gYjFkbWFfcmVzZXRfY3RyOwogCWNpbmZvLT5jYXBpX2N0cmwucHJvY2luZm8gICAgICA9IHQxcGNpX3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxZG1hY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWRtYWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYwppbmRleCA5OGZjZGZjLi4wZjA3M2NkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSAib3NfY2FwaS5oIgpAQCAtNzUsMjUgKzc2LDMyIEBACiAvKgogICogcHJvYyBmdW5jdGlvbiBmb3IgY29udHJvbGxlciBpbmZvCiAgKi8KLXN0YXRpYyBpbnQgZGl2YV9jdGxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgc3RydWN0IGNhcGlfY3RyICpjdHJsKQorc3RhdGljIGludCBkaXZhX2N0bF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBjYXBpX2N0ciAqY3RybCA9IG0tPnByaXZhdGU7CiAJZGl2YV9jYXJkICpjYXJkID0gKGRpdmFfY2FyZCAqKSBjdHJsLT5kcml2ZXJkYXRhOwotCWludCBsZW4gPSAwOwogCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVzXG4iLCBjdHJsLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VyaWFsIE5vLiA6ICVzXG4iLCBjdHJsLT5zZXJpYWwpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJJZCAgICAgICAgIDogJWRcbiIsIGNhcmQtPklkKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2hhbm5lbHMgICA6ICVkXG4iLCBjYXJkLT5kLmNoYW5uZWxzKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgY3RybC0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiU2VyaWFsIE5vLiA6ICVzXG4iLCBjdHJsLT5zZXJpYWwpOworCXNlcV9wcmludGYobSwgIklkICAgICAgICAgOiAlZFxuIiwgY2FyZC0+SWQpOworCXNlcV9wcmludGYobSwgIkNoYW5uZWxzICAgOiAlZFxuIiwgY2FyZC0+ZC5jaGFubmVscyk7CiAKLQlpZiAob2ZmICsgY291bnQgPj0gbGVuKQotCQkqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuIC0gb2ZmKSA/IGNvdW50IDogbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkaXZhX2N0bF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRpdmFfY3RsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpdmFfY3RsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGl2YV9jdGxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogc2V0IGFkZGl0aW9uYWwgb3Mgc2V0dGluZ3MgaW4gY2FwaV9jdHIgc3RydWN0CiAgKi8KQEAgLTEwMiw3ICsxMTAsNyBAQAogCWN0cmwtPmRyaXZlcl9uYW1lID0gRFJJVkVSTE5BTUU7CiAJY3RybC0+bG9hZF9maXJtd2FyZSA9IE5VTEw7CiAJY3RybC0+cmVzZXRfY3RyID0gTlVMTDsKLQljdHJsLT5jdHJfcmVhZF9wcm9jID0gZGl2YV9jdGxfcmVhZF9wcm9jOworCWN0cmwtPnByb2NfZm9wcyA9ICZkaXZhX2N0bF9wcm9jX2ZvcHM7CiAJY3RybC0+b3duZXIgPSBUSElTX01PRFVMRTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jCmluZGV4IDk5M2IxNGMuLjVkMDZhNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhX2RpZGQuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAogI2luY2x1ZGUgInBsYXRmb3JtLmgiCkBAIC02MiwzOSArNjMsNDEgQEAKIAlyZXR1cm4gcmV2OwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICB2b2lkICpkYXRhKQorc3RhdGljIGludCBkaXZhZGlkZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCWNoYXIgdG1wcmV2WzMyXTsKIAogCXN0cmNweSh0bXByZXYsIG1haW5fcmV2aXNpb24pOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIlc1xuIiwgRFJJVkVSTkFNRSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIm5hbWUgICAgIDogJXNcbiIsIERSSVZFUkxOQU1FKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAicmVsZWFzZSAgOiAlc1xuIiwgRFJJVkVSUkVMRUFTRV9ESUREKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiYnVpbGQgICAgOiAlcyglcylcbiIsCisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIERSSVZFUk5BTUUpOworCXNlcV9wcmludGYobSwgIm5hbWUgICAgIDogJXNcbiIsIERSSVZFUkxOQU1FKTsKKwlzZXFfcHJpbnRmKG0sICJyZWxlYXNlICA6ICVzXG4iLCBEUklWRVJSRUxFQVNFX0RJREQpOworCXNlcV9wcmludGYobSwgImJ1aWxkICAgIDogJXMoJXMpXG4iLAogCQkgICAgICAgZGl2YV9kaWRkX2NvbW1vbl9jb2RlX2J1aWxkLCBESVZBX0JVSUxEKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAicmV2aXNpb24gOiAlc1xuIiwgZ2V0cmV2KHRtcHJldikpOworCXNlcV9wcmludGYobSwgInJldmlzaW9uIDogJXNcbiIsIGdldHJldih0bXByZXYpKTsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4gLSBvZmYpID8gY291bnQgOiBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRpdmFkaWRkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGl2YWRpZGRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGl2YWRpZGRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkaXZhZGlkZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgRElWQV9JTklUX0ZVTkNUSU9OIGNyZWF0ZV9wcm9jKHZvaWQpCiB7CiAJcHJvY19uZXRfZWljb24gPSBwcm9jX21rZGlyKCJlaWNvbiIsIGluaXRfbmV0LnByb2NfbmV0KTsKIAogCWlmIChwcm9jX25ldF9laWNvbikgewotCQlpZiAoKHByb2NfZGlkZCA9Ci0JCSAgICAgY3JlYXRlX3Byb2NfZW50cnkoRFJJVkVSTE5BTUUsIFNfSUZSRUcgfCBTX0lSVUdPLAotCQkJCSAgICAgICBwcm9jX25ldF9laWNvbikpKSB7Ci0JCQlwcm9jX2RpZGQtPnJlYWRfcHJvYyA9IHByb2NfcmVhZDsKLQkJfQorCQlwcm9jX2RpZGQgPSBwcm9jX2NyZWF0ZShEUklWRVJMTkFNRSwgU19JUlVHTywgcHJvY19uZXRfZWljb24sCisJCQkJCSZkaXZhZGlkZF9wcm9jX2ZvcHMpOwogCQlyZXR1cm4gKDEpOwogCX0KIAlyZXR1cm4gKDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCmluZGV4IDY5ZTcxZWIuLmY1Nzc3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC04NiwzOSArODcsNDAgQEAKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmV0X2VpY29uOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdW1faWRpX3Byb2NfZW50cnkgPSBOVUxMOwogCi1zdGF0aWMgaW50Ci11bV9pZGlfcHJvY19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCQkgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdW1faWRpX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJY2hhciB0bXByZXZbMzJdOwogCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVzXG4iLCBEUklWRVJOQU1FKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAibmFtZSAgICAgOiAlc1xuIiwgRFJJVkVSTE5BTUUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJyZWxlYXNlICA6ICVzXG4iLCBEUklWRVJSRUxFQVNFX0lESSk7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIERSSVZFUk5BTUUpOworCXNlcV9wcmludGYobSwgIm5hbWUgICAgIDogJXNcbiIsIERSSVZFUkxOQU1FKTsKKwlzZXFfcHJpbnRmKG0sICJyZWxlYXNlICA6ICVzXG4iLCBEUklWRVJSRUxFQVNFX0lESSk7CiAJc3RyY3B5KHRtcHJldiwgbWFpbl9yZXZpc2lvbik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgInJldmlzaW9uIDogJXNcbiIsIGdldHJldih0bXByZXYpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiYnVpbGQgICAgOiAlc1xuIiwgRElWQV9CVUlMRCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIm1ham9yICAgIDogJWRcbiIsIG1ham9yKTsKKwlzZXFfcHJpbnRmKG0sICJyZXZpc2lvbiA6ICVzXG4iLCBnZXRyZXYodG1wcmV2KSk7CisJc2VxX3ByaW50ZihtLCAiYnVpbGQgICAgOiAlc1xuIiwgRElWQV9CVUlMRCk7CisJc2VxX3ByaW50ZihtLCAibWFqb3IgICAgOiAlZFxuIiwgbWFqb3IpOwogCi0JaWYgKG9mZiArIGNvdW50ID49IGxlbikKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbiAtIG9mZikgPyBjb3VudCA6IGxlbiAtIG9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdW1faWRpX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdW1faWRpX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVtX2lkaV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHVtX2lkaV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgRElWQV9JTklUX0ZVTkNUSU9OIGNyZWF0ZV91bV9pZGlfcHJvYyh2b2lkKQogewotCXVtX2lkaV9wcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoRFJJVkVSTE5BTUUsCi0JCQkJCSAgICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkJICAgICAgcHJvY19uZXRfZWljb24pOworCXVtX2lkaV9wcm9jX2VudHJ5ID0gcHJvY19jcmVhdGUoRFJJVkVSTE5BTUUsIFNfSVJVR08sIHByb2NfbmV0X2VpY29uLAorCQkJCQkmdW1faWRpX3Byb2NfZm9wcyk7CiAJaWYgKCF1bV9pZGlfcHJvY19lbnRyeSkKIAkJcmV0dXJuICgwKTsKLQotCXVtX2lkaV9wcm9jX2VudHJ5LT5yZWFkX3Byb2MgPSB1bV9pZGlfcHJvY19yZWFkOwotCiAJcmV0dXJuICgxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzcHJvYy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzcHJvYy5jCmluZGV4IDA0MDgyNzIuLjQ2ZDQ0YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTE0MSwxNCArMTQyLDEwIEBACiAJfQogfQogCi0vKgotKiogd3JpdGUgZ3JvdXBfb3B0aW1pemF0aW9uIAotKi8KLXN0YXRpYyBpbnQKLXdyaXRlX2dycF9vcHQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsCi0JICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IGdycF9vcHRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7Ci0JZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gKGRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqKSBkYXRhOworCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlQSVNETl9BREFQVEVSIElvQWRhcHRlciA9IElvQWRhcHRlcnNbYS0+Y29udHJvbGxlciAtIDFdOwogCiAJaWYgKChjb3VudCA9PSAxKSB8fCAoY291bnQgPT0gMikpIHsKQEAgLTE3MiwxNCArMTY5LDEwIEBACiAJcmV0dXJuICgtRUlOVkFMKTsKIH0KIAotLyoKLSoqIHdyaXRlIGR5bmFtaWNfbDFfZG93bgotKi8KLXN0YXRpYyBpbnQKLXdyaXRlX2RfbDFfZG93bihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IGRfbDFfZG93bl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewotCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IChkaXZhX29zX3hkaV9hZGFwdGVyX3QgKikgZGF0YTsKKwlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJUElTRE5fQURBUFRFUiBJb0FkYXB0ZXIgPSBJb0FkYXB0ZXJzW2EtPmNvbnRyb2xsZXIgLSAxXTsKIAogCWlmICgoY291bnQgPT0gMSkgfHwgKGNvdW50ID09IDIpKSB7CkBAIC0yMDMsNjMgKzE5Niw2MiBAQAogCXJldHVybiAoLUVJTlZBTCk7CiB9CiAKLQotLyoKLSoqIHJlYWQgZHluYW1pY19sMV9kb3duIAotKi8KLXN0YXRpYyBpbnQKLXJlYWRfZF9sMV9kb3duKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBkX2wxX2Rvd25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKLQlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSAoZGl2YV9vc194ZGlfYWRhcHRlcl90ICopIGRhdGE7CisJZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gbS0+cHJpdmF0ZTsKIAlQSVNETl9BREFQVEVSIElvQWRhcHRlciA9IElvQWRhcHRlcnNbYS0+Y29udHJvbGxlciAtIDFdOwogCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVzXG4iLAorCXNlcV9wcmludGYobSwgIiVzXG4iLAogCQkgICAgICAgKElvQWRhcHRlci0+Y2FwaV9jZmcuCiAJCQljZmdfMSAmIERJVkFfWERJX0NBUElfQ0ZHXzFfRFlOQU1JQ19MMV9PTikgPyAiMSIgOgogCQkgICAgICAgIjAiKTsKLQotCWlmIChvZmYgKyBjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4gLSBvZmYpID8gY291bnQgOiBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCi0vKgotKiogcmVhZCBncm91cF9vcHRpbWl6YXRpb24KLSovCi1zdGF0aWMgaW50Ci1yZWFkX2dycF9vcHQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBkX2wxX2Rvd25fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBsZW4gPSAwOwotCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IChkaXZhX29zX3hkaV9hZGFwdGVyX3QgKikgZGF0YTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZF9sMV9kb3duX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRfbDFfZG93bl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRfbDFfZG93bl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZF9sMV9kb3duX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IGdycF9vcHRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSBtLT5wcml2YXRlOwogCVBJU0ROX0FEQVBURVIgSW9BZGFwdGVyID0gSW9BZGFwdGVyc1thLT5jb250cm9sbGVyIC0gMV07CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJXNcbiIsCisJc2VxX3ByaW50ZihtLCAiJXNcbiIsCiAJCSAgICAgICAoSW9BZGFwdGVyLT5jYXBpX2NmZy4KIAkJCWNmZ18xICYgRElWQV9YRElfQ0FQSV9DRkdfMV9HUk9VUF9QT1BUSU1JWkFUSU9OX09OKQogCQkgICAgICAgPyAiMSIgOiAiMCIpOwotCi0JaWYgKG9mZiArIGNvdW50ID49IGxlbikKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbiAtIG9mZikgPyBjb3VudCA6IGxlbiAtIG9mZik7CisJcmV0dXJuIDA7CiB9CiAKLS8qCi0qKiBpbmZvIHdyaXRlCi0qLwotc3RhdGljIGludAotaW5mb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwKLQkgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBncnBfb3B0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSAoZGl2YV9vc194ZGlfYWRhcHRlcl90ICopIGRhdGE7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdycF9vcHRfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3JwX29wdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGdycF9vcHRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGdycF9vcHRfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGluZm9fcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlQSVNETl9BREFQVEVSIElvQWRhcHRlciA9IElvQWRhcHRlcnNbYS0+Y29udHJvbGxlciAtIDFdOwogCWNoYXIgY1s0XTsKIApAQCAtMjc3LDYzICsyNjksNDYgQEAKIAlyZXR1cm4gKC1FSU5WQUwpOwogfQogCi0vKgotKiogaW5mbyByZWFkCi0qLwotc3RhdGljIGludAotaW5mb19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludCBpID0gMDsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpwOwogCWNoYXIgdG1wc2VyWzE2XTsKLQlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSAoZGl2YV9vc194ZGlfYWRhcHRlcl90ICopIGRhdGE7CisJZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gbS0+cHJpdmF0ZTsKIAlQSVNETl9BREFQVEVSIElvQWRhcHRlciA9IElvQWRhcHRlcnNbYS0+Y29udHJvbGxlciAtIDFdOwogCi0JbGVuICs9Ci0JICAgIHNwcmludGYocGFnZSArIGxlbiwgIk5hbWUgICAgICAgIDogJXNcbiIsCi0JCSAgICBJb0FkYXB0ZXItPlByb3BlcnRpZXMuTmFtZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTUCBzdGF0ZSAgIDogJTA4eFxuIiwgYS0+ZHNwX21hc2spOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDaGFubmVscyAgICA6ICUwMmRcbiIsCi0JCSAgICAgICBJb0FkYXB0ZXItPlByb3BlcnRpZXMuQ2hhbm5lbHMpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJFLiBtYXgvdXNlZCA6ICUwM2QvJTAzZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJOYW1lICAgICAgICA6ICVzXG4iLCBJb0FkYXB0ZXItPlByb3BlcnRpZXMuTmFtZSk7CisJc2VxX3ByaW50ZihtLCAiRFNQIHN0YXRlICAgOiAlMDh4XG4iLCBhLT5kc3BfbWFzayk7CisJc2VxX3ByaW50ZihtLCAiQ2hhbm5lbHMgICAgOiAlMDJkXG4iLCBJb0FkYXB0ZXItPlByb3BlcnRpZXMuQ2hhbm5lbHMpOworCXNlcV9wcmludGYobSwgIkUuIG1heC91c2VkIDogJTAzZC8lMDNkXG4iLAogCQkgICAgICAgSW9BZGFwdGVyLT5lX21heCwgSW9BZGFwdGVyLT5lX2NvdW50KTsKIAlkaXZhX2dldF92c2VyaWFsX251bWJlcihJb0FkYXB0ZXIsIHRtcHNlcik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcmlhbCAgICAgIDogJXNcbiIsIHRtcHNlcik7Ci0JbGVuICs9Ci0JICAgIHNwcmludGYocGFnZSArIGxlbiwgIklSUSAgICAgICAgIDogJWRcbiIsCi0JCSAgICBJb0FkYXB0ZXItPmlycV9pbmZvLmlycV9ucik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNhcmRJbmRleCAgIDogJWRcbiIsIGEtPkNhcmRJbmRleCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNhcmRPcmRpbmFsIDogJWRcbiIsIGEtPkNhcmRPcmRpbmFsKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ29udHJvbGxlciAgOiAlZFxuIiwgYS0+Y29udHJvbGxlcik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkJ1cy1UeXBlICAgIDogJXNcbiIsCisJc2VxX3ByaW50ZihtLCAiU2VyaWFsICAgICAgOiAlc1xuIiwgdG1wc2VyKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgICAgICAgICA6ICVkXG4iLCBJb0FkYXB0ZXItPmlycV9pbmZvLmlycV9ucik7CisJc2VxX3ByaW50ZihtLCAiQ2FyZEluZGV4ICAgOiAlZFxuIiwgYS0+Q2FyZEluZGV4KTsKKwlzZXFfcHJpbnRmKG0sICJDYXJkT3JkaW5hbCA6ICVkXG4iLCBhLT5DYXJkT3JkaW5hbCk7CisJc2VxX3ByaW50ZihtLCAiQ29udHJvbGxlciAgOiAlZFxuIiwgYS0+Y29udHJvbGxlcik7CisJc2VxX3ByaW50ZihtLCAiQnVzLVR5cGUgICAgOiAlc1xuIiwKIAkJICAgICAgIChhLT5CdXMgPT0KIAkJCURJVkFTX1hESV9BREFQVEVSX0JVU19JU0EpID8gIklTQSIgOiAiUENJIik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBvcnQtTmFtZSAgIDogJXNcbiIsIGEtPnBvcnRfbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiUG9ydC1OYW1lICAgOiAlc1xuIiwgYS0+cG9ydF9uYW1lKTsKIAlpZiAoYS0+QnVzID09IERJVkFTX1hESV9BREFQVEVSX0JVU19QQ0kpIHsKLQkJbGVuICs9Ci0JCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQQ0ktYnVzICAgICA6ICVkXG4iLAotCQkJICAgIGEtPnJlc291cmNlcy5wY2kuYnVzKTsKLQkJbGVuICs9Ci0JCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQQ0ktZnVuYyAgICA6ICVkXG4iLAotCQkJICAgIGEtPnJlc291cmNlcy5wY2kuZnVuYyk7CisJCXNlcV9wcmludGYobSwgIlBDSS1idXMgICAgIDogJWRcbiIsIGEtPnJlc291cmNlcy5wY2kuYnVzKTsKKwkJc2VxX3ByaW50ZihtLCAiUENJLWZ1bmMgICAgOiAlZFxuIiwgYS0+cmVzb3VyY2VzLnBjaS5mdW5jKTsKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQkJaWYgKGEtPnJlc291cmNlcy5wY2kuYmFyW2ldKSB7Ci0JCQkJbGVuICs9Ci0JCQkJICAgIHNwcmludGYocGFnZSArIGxlbiwKKwkJCQlzZXFfcHJpbnRmKG0sCiAJCQkJCSAgICAiTWVtIC8gSS9PICVkIDogMHgleCAvIG1hcHBlZCA6IDB4JWx4IiwKIAkJCQkJICAgIGksIGEtPnJlc291cmNlcy5wY2kuYmFyW2ldLAogCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGEtPnJlc291cmNlcy4KIAkJCQkJICAgIHBjaS5hZGRyW2ldKTsKIAkJCQlpZiAoYS0+cmVzb3VyY2VzLnBjaS5sZW5ndGhbaV0pIHsKLQkJCQkJbGVuICs9Ci0JCQkJCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkJCXNlcV9wcmludGYobSwKIAkJCQkJCSAgICAiIC8gbGVuZ3RoIDogJWQiLAogCQkJCQkJICAgIGEtPnJlc291cmNlcy5wY2kuCiAJCQkJCQkgICAgbGVuZ3RoW2ldKTsKIAkJCQl9Ci0JCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zNTMsMTYgKzMyOCwyNSBAQAogCX0gZWxzZSB7CiAJCXAgPSAicmVhZHkiOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU3RhdGUgICAgICAgOiAlc1xuIiwgcCk7CisJc2VxX3ByaW50ZihtLCAiU3RhdGUgICAgICAgOiAlc1xuIiwgcCk7CiAKLQlpZiAob2ZmICsgY291bnQgPj0gbGVuKQotCQkqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuIC0gb2ZmKSA/IGNvdW50IDogbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpbmZvX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaW5mb19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbmZvX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaW5mb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gaW5mb19wcm9jX3dyaXRlLAorfTsKKwogLyoKICoqIGFkYXB0ZXIgcHJvYyBpbml0L2RlLWluaXQKICovCkBAIC0zODAsMjggKzM2NCwyMCBAQAogCQlyZXR1cm4gKDApOwogCWEtPnByb2NfYWRhcHRlcl9kaXIgPSAodm9pZCAqKSBkZTsKIAotCWlmICghKHBlID0KLQkgICAgIGNyZWF0ZV9wcm9jX2VudHJ5KGluZm9fcHJvY19uYW1lLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIGRlKSkpCisJcGUgPSBwcm9jX2NyZWF0ZV9kYXRhKGluZm9fcHJvY19uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgZGUsCisJCQkgICAgICAmaW5mb19wcm9jX2ZvcHMsIGEpOworCWlmICghcGUpCiAJCXJldHVybiAoMCk7CiAJYS0+cHJvY19pbmZvID0gKHZvaWQgKikgcGU7Ci0JcGUtPndyaXRlX3Byb2MgPSBpbmZvX3dyaXRlOwotCXBlLT5yZWFkX3Byb2MgPSBpbmZvX3JlYWQ7Ci0JcGUtPmRhdGEgPSBhOwogCi0JaWYgKChwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGdycF9vcHRfcHJvY19uYW1lLAotCQkJICAgICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgZGUpKSkgeworCXBlID0gcHJvY19jcmVhdGVfZGF0YShncnBfb3B0X3Byb2NfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIGRlLAorCQkJICAgICAgJmdycF9vcHRfcHJvY19mb3BzLCBhKTsKKwlpZiAocGUpCiAJCWEtPnByb2NfZ3JwX29wdCA9ICh2b2lkICopIHBlOwotCQlwZS0+d3JpdGVfcHJvYyA9IHdyaXRlX2dycF9vcHQ7Ci0JCXBlLT5yZWFkX3Byb2MgPSByZWFkX2dycF9vcHQ7Ci0JCXBlLT5kYXRhID0gYTsKLQl9Ci0JaWYgKChwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGRfbDFfZG93bl9wcm9jX25hbWUsCi0JCQkgICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBkZSkpKSB7CisJcGUgPSBwcm9jX2NyZWF0ZV9kYXRhKGRfbDFfZG93bl9wcm9jX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBkZSwKKwkJCSAgICAgICZkX2wxX2Rvd25fcHJvY19mb3BzLCBhKTsKKwlpZiAocGUpCiAJCWEtPnByb2NfZF9sMV9kb3duID0gKHZvaWQgKikgcGU7Ci0JCXBlLT53cml0ZV9wcm9jID0gd3JpdGVfZF9sMV9kb3duOwotCQlwZS0+cmVhZF9wcm9jID0gcmVhZF9kX2wxX2Rvd247Ci0JCXBlLT5kYXRhID0gYTsKLQl9CiAKIAlEQkdfVFJDKCgicHJvYyBlbnRyeSAlcyBjcmVhdGVkIiwgdG1wKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKaW5kZXggMWExNDIwZC4uYWQzNmRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKQEAgLTI4NDYsNyArMjg0Niw3IEBACiAJaW50IGNvbmY7CiAKIAlpZiAoY2ggPCAwIHx8IGNoID4gMzEpCi0JCXJldHVybiBFSU5WQUw7CisJCXJldHVybiAtRUlOVkFMOwogCW9zbG90X3R4ID0gaGMtPmNoYW5bY2hdLnNsb3RfdHg7CiAJb3Nsb3RfcnggPSBoYy0+Y2hhbltjaF0uc2xvdF9yeDsKIAljb25mID0gaGMtPmNoYW5bY2hdLmNvbmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYwppbmRleCA2MjQ0MWJhLi4zNmM2YzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMKQEAgLTExMzMsNiArMTEzMyw3IEBACiAJCQlpZiAoZXJyKSB7CiAJCQkJa2ZyZWUoc2MpOwogCQkJCXJlbGVhc2VfY2FyZChjYXJkKTsKKwkJCQlicmVhazsKIAkJCX0gZWxzZQogCQkJCWNhcmQtPnNjW2kgLSAxXSA9IHNjOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCmluZGV4IGQzZjEwNzcuLjI5NTJhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCkBAIC01MjksNiArNTI5LDcgQEAKIAl9CiB9CiAKKyNpZiAwCiBzdGF0aWMgaW50CiBzZXR2b2x1bWUoc3RydWN0IHc2NjkyX2NoICp3Y2gsIGludCBtaWMsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC01NzEsNiArNTcyLDcgQEAKIAlXcml0ZVc2NjkyKGNhcmQsIFdfUENUTCwgY2FyZC0+cGN0bCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludAogZGlzYWJsZV9wb3RzKHN0cnVjdCB3NjY5Ml9jaCAqd2NoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwppbmRleCAzNDY0ZWJjLi40NTJmZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIGNvbmZpZyBISVNBWF9URUxFU1BDSQogCWJvb2wgIlRlbGVzIFBDSSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZXMgUENJLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXg+IG9uIGhvdyB0byBjb25maWd1cmUgaXQuCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVAogCWJvb2wgIk5FVGpldCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBOZXRKZXQgZnJvbSBUcmF2ZXJzZQogCSAgVGVjaG5vbG9naWVzLgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAKIGNvbmZpZyBISVNBWF9ORVRKRVRfVQogCWJvb2wgIk5FVHNwaWRlciBVIGNhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldHNwaWRlciBVIGludGVyZmFjZSBJU0ROIGNhcmQKIAkgIGZyb20gVHJhdmVyc2UgVGVjaG5vbG9naWVzLgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAKIGNvbmZpZyBISVNBWF9CS01fQTRUCiAJYm9vbCAiVGVsZWtvbSBBNFQgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIFRlbGVrb20gQTRUIGNhcmQuCiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgSElTQVhfU0NUX1FVQURSTwogCWJvb2wgIlNjaXRlbCBRdWFkcm8gY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIFNjaXRlbCBRdWFkcm8gY2FyZC4KIApAQCAtMzE2LDcgKzMxNiw3IEBACiAKIGNvbmZpZyBISVNBWF9IRkNfUENJCiAJYm9vbCAiSEZDIFBDSS1CdXMgY2FyZHMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEhGQy1TIFBDSSAyQkRTMCBiYXNlZCBjYXJkcy4KIApAQCAtMzI1LDcgKzMyNSw3IEBACiAKIGNvbmZpZyBISVNBWF9XNjY5MgogCWJvb2wgIldpbmJvbmQgVzY2OTIgYmFzZWQgY2FyZHMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWQorCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIFdpbmJvbmQgVzY2OTIgYmFzZWQgUENJIElTRE4gY2FyZHMuCiAKQEAgLTM0MSw3ICszNDEsNyBAQAogCiBjb25maWcgSElTQVhfRU5URVJOT1dfUENJCiAJYm9vbCAiRm9ybXVsYS1uIGVudGVyOm5vdyBQQ0kgY2FyZCIKLQlkZXBlbmRzIG9uIEhJU0FYX05FVEpFVCAmJiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIEhJU0FYX05FVEpFVCAmJiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBGb3JtdWxhLW4gZW50ZXI6bm93IFBDSQogCSAgSVNETiBjYXJkLgpAQCAtNDEyLDcgKzQxMiw3IEBACiAKIGNvbmZpZyBISVNBWF9GUklUWl9QQ0lQTlAKIAl0cmlzdGF0ZSAiQVZNIEZyaXR6IUNhcmQgUENJL1BDSXYyL1BuUCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBBVk0gRnJpdHohQ2FyZCBQQ0ksCiAJICBGcml0eiFDYXJkIFBDSSB2MiBhbmQgRnJpdHohQ2FyZCBQblAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwppbmRleCA3Y2FiYzVhLi4xNDI5NWExNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAKICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZm5kZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZm5kZWYgQ09ORklHX1BDSQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKQEAgLTgzNSw3ICs4MzUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKLQlpZiAoKGRldl9hdm0gPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVk0sCisJaWYgKChkZXZfYXZtID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVZNLAogCQlQQ0lfREVWSUNFX0lEX0FWTV9BMSwgZGV2X2F2bSkpKSB7CiAKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9hdm0pKQpAQCAtODY0LDcgKzg2NCw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9hdm1fcGNpcG5wKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCmluZGV4IDljYTJlZTUuLjlmMjAwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJfSBlbHNlCiAJCXJldHVybiAoMCk7CiAKLQl3aGlsZSAoKGRldl9hNHQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKKwl3aGlsZSAoKGRldl9hNHQgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKIAkJUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X2E0dCkpKSB7CiAJCXJldCA9IGE0dF9wY2lfcHJvYmUoZGV2X2E0dCwgY3MsICZmb3VuZCwgJnBjaV9tZW1hZGRyKTsKIAkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggZTFmZjQ3MS4uZTc3NTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCShzdWJfdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfQkVSS09NKSkpCiAJCXJldHVybiAoMCk7CiAJaWYgKGNzLT5zdWJ0eXAgPT0gU0NUXzEpIHsKLQkJd2hpbGUgKChkZXZfYTggPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9QTFgsCisJCXdoaWxlICgoZGV2X2E4ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgZGV2X2E4KSkpIHsKIAkJCQogCQkJc3ViX3ZlbmRvcl9pZCA9IGRldl9hOC0+c3Vic3lzdGVtX3ZlbmRvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IDBiMGMyZTUuLjc4MGRhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAogI2VuZGlmCS8qIElTQVBOUCAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9kaXZhIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YV91IF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YTIwMSBfX2RldmluaXRkYXRhID0gTlVMTDsKQEAgLTExNTksMjEgKzExNTksMjEgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAogCWNzLT5zdWJ0eXAgPSAwOwotCWlmICgoZGV2X2RpdmEgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwlpZiAoKGRldl9kaXZhID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwLCBkZXZfZGl2YSkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfZGl2YSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhLT5pcnE7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEsIDIpOwotCX0gZWxzZSBpZiAoKGRldl9kaXZhX3UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YV91ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwX1UsIGRldl9kaXZhX3UpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmFfdSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhX3UtPmlycTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZfZGl2YV91LCAyKTsKLQl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAorCX0gZWxzZSBpZiAoKGRldl9kaXZhMjAxID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwgZGV2X2RpdmEyMDEpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmEyMDEpKQogCQkJcmV0dXJuKDApOwpAQCAtMTE4Myw3ICsxMTgzLDcgQEAKIAkJCSh1bG9uZykgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEyMDEsIDApLCA0MDk2KTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9CiAJCQkodWxvbmcpIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhMjAxLCAxKSwgNDA5Nik7Ci0JfSBlbHNlIGlmICgoZGV2X2RpdmEyMDIgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIsIGRldl9kaXZhMjAyKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhMjAyKSkKIAkJCXJldHVybigwKTsKQEAgLTEyMjksMTQgKzEyMjksMTQgQEAKIAlyZXR1cm4gKDEpOwkJLyogY2FyZCBmb3VuZCAqLwogfQogCi0jZWxzZQkvKiBpZiAhQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbHNlCS8qIGlmICFDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX2RpdmFfcGNpKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKIHsKIAlyZXR1cm4gKC0xKTsJLyogY2FyZCBub3QgZm91bmQ7IGNvbnRpbnVlIHNlYXJjaCAqLwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZgkvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2RpdmEoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKaW5kZXggYWEyOWQxYy4uMjNjNDFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCSAgICAgICBjcy0+aXJxKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIAlzdHJ1Y3QgcGNpX2RldiAqZGV2X3FzMTAwMCBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyAJc3RydWN0IHBjaV9kZXYgKmRldl9xczMwMDAgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAKIAljcy0+c3VidHlwID0gMDsKLQlpZiAoKGRldl9xczEwMDAgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAorCWlmICgoZGV2X3FzMTAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssIGRldl9xczEwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMTAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCQljcy0+aXJxID0gZGV2X3FzMTAwMC0+aXJxOwogCQljcy0+aHcuZWxzYS5jZmcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMSk7CiAJCWNzLT5ody5lbHNhLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMyk7Ci0JfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCisJfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAsIGRldl9xczMwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMzAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogewogCXJldHVybiAoMSk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzZXR1cF9lbHNhX2NvbW1vbihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKaW5kZXggMzlmNDIxZS4uMjYyNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gZW5fcGNpX3Byb2JlKGRldl9uZXRqZXQsIGNzKTsKIAkJCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwppbmRleCAwZWEzYjQ2Li4zNTM5ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfdGVsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTQ2LDcgKzU0Niw3IEBACiAJZm91bmQgPSAwOwogCXNlZWtjYXJkID0gUENJX0RFVklDRV9JRF9QTFhfUjY4NTsKIAlmb3IgKG5ic2VlayA9IDA7IG5ic2VlayA8IDQ7IG5ic2VlaysrKSB7Ci0JCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKKwkJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJCQlzZWVrY2FyZCwgZGV2X3RlbCkpKSB7CiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQkJcmV0dXJuIDE7CkBAIC02MjAsNyArNjIwLDcgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2dhemVsKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKQEAgLTY0MCw3ICs2NDAsNyBAQAogCQkJcmV0dXJuICgwKTsKIAl9IGVsc2UgewogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCWlmIChzZXR1cF9nYXplbHBjaShjcykpCiAJCQlyZXR1cm4gKDApOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDEwOTE0NzMuLjkxN2NjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAogCWkgPSAwOwogCXdoaWxlIChpZF9saXN0W2ldLnZlbmRvcl9pZCkgewotCQl0bXBfaGZjcGNpID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAorCQl0bXBfaGZjcGNpID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAogCQkJCQkgICAgIGlkX2xpc3RbaV0uZGV2aWNlX2lkLAogCQkJCQkgICAgIGRldl9oZmNwY2kpOwogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDA2ODVjMTkuLjgzMmE4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMzIzLDMgKzEzMjMsMjYgQEAKIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbik7CiBpbnQgVGVpTmV3KHZvaWQpOwogdm9pZCBUZWlGcmVlKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BDSQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIGFkYXB0YXRpb24gd3JhcHBlciBmb3Igb2xkIHVzYWdlCisgKiBXQVJOSU5HISBUaGlzIGlzIHVuZml0IGZvciB1c2UgaW4gYSBQQ0kgaG90cGx1ZyBlbnZpcm9ubWVudCwKKyAqIGFzIHRoZSByZXR1cm5lZCBQQ0kgZGV2aWNlIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbiB0aW1lLgorICogQ2FsbGVycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKmhpc2F4X2ZpbmRfcGNpX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwY2lfZGV2X2dldChmcm9tKTsKKwlwZGV2ID0gcGNpX2dldF9zdWJzeXModmVuZG9yLCBkZXZpY2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGZyb20pOworCXBjaV9kZXZfcHV0KHBkZXYpOworCXJldHVybiBwZGV2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jCmluZGV4IGJmZWI5YjYuLjZiZGUxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYXIuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJd2hpbGUoKCEoY3MtPkJDX1JlYWRfUmVnKGNzLCAwLCBJU0FSX0lSUUJJVCkgJiBJU0FSX0lSUVNUQSkpICYmCiAJCSh0aW1lb3V0KysgPCBtYXhkZWxheSkpCiAJCXVkZWxheSgxKTsKLQlpZiAodGltZW91dCA+PSBtYXhkZWxheSkgeworCWlmICh0aW1lb3V0ID4gbWF4ZGVsYXkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJpc2FyIHJlY21zZyBJUlFTVEEgdGltZW91dFxuIik7CiAJCXJldHVybigwKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmljY3kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCmluZGV4IGVmMDA2MzMuLmNjYWE2ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCkBAIC0yOTcsMTIgKzI5NywxMiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogCQlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5pY2N5X2RldiBfX2RldmluaXRkYXRhOwogCiAJCXVfaW50IHBjaV9pb2FkZHI7CiAJCWNzLT5zdWJ0eXAgPSAwOwotCQlpZiAoKG5pY2N5X2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLAorCQlpZiAoKG5pY2N5X2RldiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLAogCQkJCQkJIFBDSV9ERVZJQ0VfSURfU0FUU0FHRU1fTklDQ1ksCiAJCQkJCQkgbmljY3lfZGV2KSkpIHsKIAkJCWlmIChwY2lfZW5hYmxlX2RldmljZShuaWNjeV9kZXYpKQpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiBpbzAgMCBhbmQgTk9fUENJX0JJT1NcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOaWNjeTogdW5hYmxlIHRvIGNvbmZpZyBOSUNDWSBQQ0lcbiIpOwogCQlyZXR1cm4gMDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfUENJX0xFR0FDWSAqLworI2VuZGlmCQkJCS8qIENPTkZJR19QQ0kgKi8KIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IE5JQ0NZICVzIGNvbmZpZyBpcnE6JWQgZGF0YToweCVYIGFsZToweCVYXG4iLAogCQkoY3MtPnN1YnR5cCA9PSAxKSA/ICJQblAiIDogIlBDSSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwppbmRleCA4ZDM2Y2NjLi4yMzQ0ZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAJZm9yICggOzsgKQogCXsKLQkJaWYgKChkZXZfbmV0amV0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCisJCWlmICgoZGV2X25ldGpldCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAogCQkJUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsICBkZXZfbmV0amV0KSkpIHsKIAkJCXJldCA9IG5qc19wY2lfcHJvYmUoZGV2X25ldGpldCwgY3MpOwogCQkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwppbmRleCBkMzA2Yzk0Li4wOTVlOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCiAJZm9yICggOzsgKQogCXsKLQkJaWYgKChkZXZfbmV0amV0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCisJCWlmICgoZGV2X25ldGpldCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAogCQkJUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsICBkZXZfbmV0amV0KSkpIHsKIAkJCXJldCA9IG5qdV9wY2lfcHJvYmUoZGV2X25ldGpldCwgY3MpOwogCQkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKaW5kZXggNTU2OWE1Mi4uNjlkZmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwpAQCAtNTk4LDcgKzU5OCw3IEBACiB9CiAjZW5kaWYgLyogX19JU0FQTlBfXyAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9zZWRsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNjA3LDcgKzYwNyw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAJdTE2IHN1Yl92ZW5kb3JfaWQsIHN1Yl9pZDsKIAotCWlmICgoZGV2X3NlZGwgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwlpZiAoKGRldl9zZWRsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwgZGV2X3NlZGwpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3NlZGwpKQogCQkJcmV0dXJuKDApOwpAQCAtNjczLDcgKzY3Myw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9zZWRsYmF1ZXIoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwppbmRleCAyOGIwOGRlLi5iODVjZWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJaWYgKGNzLT50eXAgIT0gSVNETl9DVFlQRV9URUxFU1BDSSkKIAkJcmV0dXJuICgwKTsKIAotCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZSAoUENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X3RlbCkpKSB7CisJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXZfdGVsKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl90ZWwpKQogCQkJcmV0dXJuKDApOwogCQljcy0+aXJxID0gZGV2X3RlbC0+aXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3c2NjkyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYwppbmRleCBjNGQ4NjJjLi45ZDZlODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkJcmV0dXJuICgwKTsKIAogCXdoaWxlIChpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkKSB7Ci0JCWRldl93NjY5MiA9IHBjaV9maW5kX2RldmljZShpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkLAorCQlkZXZfdzY2OTIgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoaWRfbGlzdFtpZF9pZHhdLnZlbmRvcl9pZCwKIAkJCQkJICAgIGlkX2xpc3RbaWRfaWR4XS5kZXZpY2VfaWQsCiAJCQkJCSAgICBkZXZfdzY2OTIpOwogCQlpZiAoZGV2X3c2NjkyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKaW5kZXggNGZmYWExNC4uZmU4NzRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYwpAQCAtMTEsNiArMTEsOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTQzMiwyNiArNDM0LDE2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotaHljYXBpX3JlYWRfcHJvYwotCi1JbmZvcm1hdGlvbnMgcHJvdmlkZWQgaW4gdGhlIC9wcm9jL2NhcGktZW50cmllcy4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IGh5Y2FwaV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgc3RydWN0IGNhcGlfY3RyICpjdHJsKQorc3RhdGljIGludCBoeWNhcGlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwgPSBtLT5wcml2YXRlOwogCWh5Y2FwaWN0cmxfaW5mbyAqY2luZm8gPSAoaHljYXBpY3RybF9pbmZvICopKGN0cmwtPmRyaXZlcmRhdGEpOwogCWh5c2RuX2NhcmQgKmNhcmQgPSBjaW5mby0+Y2FyZDsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpzOwotI2lmZGVmIEhZQ0FQSV9QUklOVEZOQU1FUwotCXByaW50ayhLRVJOX05PVElDRSAiaHljYXBpX3JlYWRfcHJvY1xuIik7ICAgIAotI2VuZGlmCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+aW9iYXNlKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVkXG4iLCAiaXJxIiwgY2FyZC0+aXJxKTsKKworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+aW9iYXNlKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlZFxuIiwgImlycSIsIGNhcmQtPmlycSk7CiAgICAgCiAJc3dpdGNoIChjYXJkLT5icmR0eXBlKSB7CiAJCWNhc2UgQkRfUENDQVJEOiAgcyA9ICJIWVNETiBIeWNhcmQiOyBicmVhazsKQEAgLTQ2MSwyNCArNDUzLDMyIEBACiAJCWNhc2UgQkRfUExFWFVTOiBzID0gIkhZU0ROIFBsZXh1czMwIjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHMgPSAiPz8/IjsgYnJlYWs7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0RSSVZFUl0pICE9IE5VTEwpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ2ZXJfZHJpdmVyIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2RyaXZlciIsIHMpOwogCWlmICgocyA9IGNpbmZvLT52ZXJzaW9uW1ZFUl9DQVJEVFlQRV0pICE9IE5VTEwpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfY2FyZHR5cGUiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfU0VSSUFMXSkgIT0gTlVMTCkKLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CiAgICAgCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgImNhcmRuYW1lIiwgY2luZm8tPmNhcmRuYW1lKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgImNhcmRuYW1lIiwgY2luZm8tPmNhcmRuYW1lKTsKICAgICAKLQlpZiAob2ZmK2NvdW50ID49IGxlbikKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbi1vZmYpID8gY291bnQgOiBsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoeWNhcGlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBoeWNhcGlfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHljYXBpX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaHljYXBpX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBoeWNhcGlfbG9hZF9maXJtd2FyZQogCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJY3RybC0+bG9hZF9maXJtd2FyZSA9IGh5Y2FwaV9sb2FkX2Zpcm13YXJlOwogCQljdHJsLT5yZXNldF9jdHIgICAgID0gaHljYXBpX3Jlc2V0X2N0cjsKIAkJY3RybC0+cHJvY2luZm8gICAgICA9IGh5Y2FwaV9wcm9jaW5mbzsKLQkJY3RybC0+Y3RyX3JlYWRfcHJvYyA9IGh5Y2FwaV9yZWFkX3Byb2M7CisJCWN0cmwtPnByb2NfZm9wcyA9ICZoeWNhcGlfcHJvY19mb3BzOwogCQlzdHJjcHkoY3RybC0+bmFtZSwgY2luZm8tPmNhcmRuYW1lKTsKIAkJY3RybC0+b3duZXIgPSBUSElTX01PRFVMRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnCmluZGV4IDA3YzRlNDkuLjljNjY1MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaTRsL0tjb25maWcKQEAgLTEzNCwxNCArMTM0LDcgQEAKIAogc291cmNlICJkcml2ZXJzL2lzZG4vYWN0MjAwMC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvaXNkbi9oeXNkbi9LY29uZmlnIgotCiBlbmRtZW51CiAjIGVuZCBJU0ROX0k0TAogZW5kaWYKIAotY29uZmlnIElTRE5fSERMQwotCXRyaXN0YXRlCi0Jc2VsZWN0IENSQ19DQ0lUVAotCXNlbGVjdCBCSVRSRVZFUlNFCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcgYi9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCmluZGV4IDNkOTA2ODMuLmZkODViZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKQEAgLTE3MSw4ICsxNzEsOCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIE1BQ19FTVVNT1VTRUJUTgotCWJvb2wgIlN1cHBvcnQgZm9yIG1vdXNlIGJ1dHRvbiAyKzMgZW11bGF0aW9uIgotCXNlbGVjdCBJTlBVVAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBtb3VzZSBidXR0b24gMiszIGVtdWxhdGlvbiIKKwlkZXBlbmRzIG9uIFNZU0NUTCAmJiBJTlBVVAogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgZ2VuZXJpYyBzdXBwb3J0IGZvciBlbXVsYXRpbmcgdGhlIDJuZCBhbmQgM3JkIG1vdXNlCiAJICBidXR0b24gd2l0aCBrZXlwcmVzc2VzLiAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBlbXVsYXRpb24gaXMgc3RpbGwKQEAgLTE4NCw2ICsxODQsOSBAQAogCiAJICBJZiB5b3UgaGF2ZSBhbiBBcHBsZSBtYWNoaW5lIHdpdGggYSAxLWJ1dHRvbiBtb3VzZSwgc2F5IFkgaGVyZS4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWFjX2hpZC4KKwogY29uZmlnIFRIRVJNX1dJTkRUVU5ORUwKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlcm1hbCBtYW5hZ2VtZW50IG9uIFdpbmR0dW5uZWwgRzRzIgogCWRlcGVuZHMgb24gSTJDICYmIEkyQ19QT1dFUk1BQyAmJiBQUENfUE1BQyAmJiAhUFBDX1BNQUM2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwppbmRleCAyMzc0MWNlYy4uMWM0ZWU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKQEAgLTMxNywxMyArMzE3LDE1IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAoKGFkYl9jb250cm9sbGVyID09IE5VTEwpIHx8IGFkYl9jb250cm9sbGVyLT5pbml0KCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogbm8gQURCIGludGVyZmFjZSBkZXRlY3RlZFxuIik7CisJaWYgKGFkYl9jb250cm9sbGVyICE9IE5VTEwgJiYgYWRiX2NvbnRyb2xsZXItPmluaXQgJiYKKwkgICAgYWRiX2NvbnRyb2xsZXItPmluaXQoKSkKIAkJYWRiX2NvbnRyb2xsZXIgPSBOVUxMOworCWlmIChhZGJfY29udHJvbGxlciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IG5vIEFEQiBpbnRlcmZhY2UgZGV0ZWN0ZWRcbiIpOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1BQQwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSB8fAotCQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKKwkJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAJCQlzbGVlcHlfdHJhY2twYWQgPSAxOwogI2VuZGlmIC8qIENPTkZJR19QUEMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCmluZGV4IDdiNGVmNWIuLmU5NDNkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKQEAgLTEzLDE3ICsxMywxOTcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tiZF9rZXJuLmg+CiAKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmVtdW1vdXNlYnRuOwotc3RhdGljIGludCBlbXVtb3VzZWJ0bl9pbnB1dF9yZWdpc3Rlcih2b2lkKTsKIHN0YXRpYyBpbnQgbW91c2VfZW11bGF0ZV9idXR0b25zOwogc3RhdGljIGludCBtb3VzZV9idXR0b24yX2tleWNvZGUgPSBLRVlfUklHSFRDVFJMOwkvKiByaWdodCBjb250cm9sIGtleSAqLwogc3RhdGljIGludCBtb3VzZV9idXR0b24zX2tleWNvZGUgPSBLRVlfUklHSFRBTFQ7CS8qIHJpZ2h0IG9wdGlvbiBrZXkgKi8KLXN0YXRpYyBpbnQgbW91c2VfbGFzdF9rZXljb2RlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKQorc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKm1hY19oaWRfZW11bW91c2VfZGV2OworCitzdGF0aWMgaW50IG1hY19oaWRfY3JlYXRlX2VtdW1vdXNlKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWNfaGlkX2VtdW1vdXNlX2Rldl9ldmVudF9jbGFzczsKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG1hY19oaWRfZW11bW91c2VfZGV2X211dGV4X2NsYXNzOworCWludCBlcnI7CisKKwltYWNfaGlkX2VtdW1vdXNlX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbWFjX2hpZF9lbXVtb3VzZV9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbG9ja2RlcF9zZXRfY2xhc3MoJm1hY19oaWRfZW11bW91c2VfZGV2LT5ldmVudF9sb2NrLAorCQkJICAmbWFjX2hpZF9lbXVtb3VzZV9kZXZfZXZlbnRfY2xhc3MpOworCWxvY2tkZXBfc2V0X2NsYXNzKCZtYWNfaGlkX2VtdW1vdXNlX2Rldi0+bXV0ZXgsCisJCQkgICZtYWNfaGlkX2VtdW1vdXNlX2Rldl9tdXRleF9jbGFzcyk7CisKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+bmFtZSA9ICJNYWNpbnRvc2ggbW91c2UgYnV0dG9uIGVtdWxhdGlvbiI7CisJbWFjX2hpZF9lbXVtb3VzZV9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfQURCOworCW1hY19oaWRfZW11bW91c2VfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CisJbWFjX2hpZF9lbXVtb3VzZV9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJbWFjX2hpZF9lbXVtb3VzZV9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CisKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0KKwkJQklUX01BU0soQlROX0xFRlQpIHwgQklUX01BU0soQlROX01JRERMRSkgfCBCSVRfTUFTSyhCVE5fUklHSFQpOworCW1hY19oaWRfZW11bW91c2VfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobWFjX2hpZF9lbXVtb3VzZV9kZXYpOworCWlmIChlcnIpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UobWFjX2hpZF9lbXVtb3VzZV9kZXYpOworCQltYWNfaGlkX2VtdW1vdXNlX2RldiA9IE5VTEw7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hY19oaWRfZGVzdHJveV9lbXVtb3VzZSh2b2lkKQoreworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKG1hY19oaWRfZW11bW91c2VfZGV2KTsKKwltYWNfaGlkX2VtdW1vdXNlX2RldiA9IE5VTEw7Cit9CisKK3N0YXRpYyBib29sIG1hY19oaWRfZW11bW91c2VfZmlsdGVyKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJCSAgICBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IGJ0bjsKKworCWlmICh0eXBlICE9IEVWX0tFWSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGNvZGUgPT0gbW91c2VfYnV0dG9uMl9rZXljb2RlKQorCQlidG4gPSBCVE5fTUlERExFOworCWVsc2UgaWYgKGNvZGUgPT0gbW91c2VfYnV0dG9uM19rZXljb2RlKQorCQlidG4gPSBCVE5fUklHSFQ7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlpbnB1dF9yZXBvcnRfa2V5KG1hY19oaWRfZW11bW91c2VfZGV2LCBidG4sIHZhbHVlKTsKKwlpbnB1dF9zeW5jKG1hY19oaWRfZW11bW91c2VfZGV2KTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IG1hY19oaWRfZW11bW91c2VfY29ubmVjdChzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwKKwkJCQkgICAgc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGU7CisJaW50IGVycm9yOworCisJLyogRG9uJ3QgYmluZCB0byBvdXJzZWx2ZXMgKi8KKwlpZiAoZGV2ID09IG1hY19oaWRfZW11bW91c2VfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhhbmRsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9oYW5kbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloYW5kbGUtPmRldiA9IGRldjsKKwloYW5kbGUtPmhhbmRsZXIgPSBoYW5kbGVyOworCWhhbmRsZS0+bmFtZSA9ICJtYWMtYnV0dG9uLWVtdWwiOworCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9oYW5kbGUoaGFuZGxlKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkibWFjX2hpZDogRmFpbGVkIHRvIHJlZ2lzdGVyIGJ1dHRvbiBlbXVsYXRpb24gaGFuZGxlLCAiCisJCQkiZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwllcnJvciA9IGlucHV0X29wZW5fZGV2aWNlKGhhbmRsZSk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIm1hY19oaWQ6IEZhaWxlZCB0byBvcGVuIGlucHV0IGRldmljZSwgZXJyb3IgJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnJfdW5yZWdpc3RlcjoKKwlpbnB1dF91bnJlZ2lzdGVyX2hhbmRsZShoYW5kbGUpOworIGVycl9mcmVlOgorCWtmcmVlKGhhbmRsZSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBtYWNfaGlkX2VtdW1vdXNlX2Rpc2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlKQoreworCWlucHV0X2Nsb3NlX2RldmljZShoYW5kbGUpOworCWlucHV0X3VucmVnaXN0ZXJfaGFuZGxlKGhhbmRsZSk7CisJa2ZyZWUoaGFuZGxlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgbWFjX2hpZF9lbXVtb3VzZV9pZHNbXSA9IHsKKwl7CisJCS5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCwKKwkJLmV2Yml0ID0geyBCSVRfTUFTSyhFVl9LRVkpIH0sCisJfSwKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGlucHV0LCBtYWNfaGlkX2VtdW1vdXNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfaGFuZGxlciBtYWNfaGlkX2VtdW1vdXNlX2hhbmRsZXIgPSB7CisJLmZpbHRlcgkJPSBtYWNfaGlkX2VtdW1vdXNlX2ZpbHRlciwKKwkuY29ubmVjdAk9IG1hY19oaWRfZW11bW91c2VfY29ubmVjdCwKKwkuZGlzY29ubmVjdAk9IG1hY19oaWRfZW11bW91c2VfZGlzY29ubmVjdCwKKwkubmFtZQkJPSAibWFjLWJ1dHRvbi1lbXVsIiwKKwkuaWRfdGFibGUJPSBtYWNfaGlkX2VtdW1vdXNlX2lkcywKK307CisKK3N0YXRpYyBpbnQgbWFjX2hpZF9zdGFydF9lbXVsYXRpb24odm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbWFjX2hpZF9jcmVhdGVfZW11bW91c2UoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfaGFuZGxlcigmbWFjX2hpZF9lbXVtb3VzZV9oYW5kbGVyKTsKKwlpZiAoZXJyKSB7CisJCW1hY19oaWRfZGVzdHJveV9lbXVtb3VzZSgpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYWNfaGlkX3N0b3BfZW11bGF0aW9uKHZvaWQpCit7CisJaW5wdXRfdW5yZWdpc3Rlcl9oYW5kbGVyKCZtYWNfaGlkX2VtdW1vdXNlX2hhbmRsZXIpOworCW1hY19oaWRfZGVzdHJveV9lbXVtb3VzZSgpOworfQorCitzdGF0aWMgaW50IG1hY19oaWRfdG9nZ2xlX2VtdW1vdXNlKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCisJCQkJICAgbG9mZl90ICpwcG9zKQoreworCWludCAqdmFscCA9IHRhYmxlLT5kYXRhOworCWludCBvbGRfdmFsID0gKnZhbHA7CisJaW50IHJjOworCisJcmMgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKworCWlmIChyYyA9PSAwICYmIHdyaXRlICYmICp2YWxwICE9IG9sZF92YWwpIHsKKwkJaWYgKCp2YWxwID09IDEpCisJCQlyYyA9IG1hY19oaWRfc3RhcnRfZW11bGF0aW9uKCk7CisJCWVsc2UgaWYgKCp2YWxwID09IDApCisJCQltYWNfaGlkX3N0b3BfZW11bGF0aW9uKCk7CisJCWVsc2UKKwkJCXJjID0gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXN0b3JlIHRoZSBvbGQgdmFsdWUgaW4gY2FzZSBvZiBlcnJvciAqLworCWlmIChyYykKKwkJKnZhbHAgPSBvbGRfdmFsOworCisJcmV0dXJuIHJjOworfQorCiAvKiBmaWxlKHMpIGluIC9wcm9jL3N5cy9kZXYvbWFjX2hpZCAqLwogc3RhdGljIGN0bF90YWJsZSBtYWNfaGlkX2ZpbGVzW10gPSB7CiAJewpAQCAtMzEsNyArMjExLDcgQEAKIAkJLmRhdGEJCT0gJm1vdXNlX2VtdWxhdGVfYnV0dG9ucywKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBtYWNfaGlkX3RvZ2dsZV9lbXVtb3VzZSwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gIm1vdXNlX2J1dHRvbjJfa2V5Y29kZSIsCkBAIC03NCw3NSArMjU0LDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbWFjX2hpZF9zeXNjdGxfaGVhZGVyOwogCi0jZW5kaWYgLyogZW5kaWYgQ09ORklHX1NZU0NUTCAqLwotCi1pbnQgbWFjX2hpZF9tb3VzZV9lbXVsYXRlX2J1dHRvbnMoaW50IGNhbGxlciwgdW5zaWduZWQgaW50IGtleWNvZGUsIGludCBkb3duKQotewotCXN3aXRjaCAoY2FsbGVyKSB7Ci0JY2FzZSAxOgotCQkvKiBDYWxsZWQgZnJvbSBrZXlib2FyZC5jICovCi0JCWlmIChtb3VzZV9lbXVsYXRlX2J1dHRvbnMKLQkJICAgICYmIChrZXljb2RlID09IG1vdXNlX2J1dHRvbjJfa2V5Y29kZQotCQkJfHwga2V5Y29kZSA9PSBtb3VzZV9idXR0b24zX2tleWNvZGUpKSB7Ci0JCQlpZiAobW91c2VfZW11bGF0ZV9idXR0b25zID09IDEpIHsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGVtdW1vdXNlYnRuLAotCQkJCQkJIGtleWNvZGUgPT0gbW91c2VfYnV0dG9uMl9rZXljb2RlID8gQlROX01JRERMRSA6IEJUTl9SSUdIVCwKLQkJCQkJCSBkb3duKTsKLQkJCQlpbnB1dF9zeW5jKGVtdW1vdXNlYnRuKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJCW1vdXNlX2xhc3Rfa2V5Y29kZSA9IGRvd24gPyBrZXljb2RlIDogMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZW11bW91c2VidG5fZXZlbnRfY2xhc3M7Ci1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGVtdW1vdXNlYnRuX211dGV4X2NsYXNzOwotCi1zdGF0aWMgaW50IGVtdW1vdXNlYnRuX2lucHV0X3JlZ2lzdGVyKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWVtdW1vdXNlYnRuID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFlbXVtb3VzZWJ0bikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsb2NrZGVwX3NldF9jbGFzcygmZW11bW91c2VidG4tPmV2ZW50X2xvY2ssICZlbXVtb3VzZWJ0bl9ldmVudF9jbGFzcyk7Ci0JbG9ja2RlcF9zZXRfY2xhc3MoJmVtdW1vdXNlYnRuLT5tdXRleCwgJmVtdW1vdXNlYnRuX211dGV4X2NsYXNzKTsKLQotCWVtdW1vdXNlYnRuLT5uYW1lID0gIk1hY2ludG9zaCBtb3VzZSBidXR0b24gZW11bGF0aW9uIjsKLQllbXVtb3VzZWJ0bi0+aWQuYnVzdHlwZSA9IEJVU19BREI7Ci0JZW11bW91c2VidG4tPmlkLnZlbmRvciA9IDB4MDAwMTsKLQllbXVtb3VzZWJ0bi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKLQllbXVtb3VzZWJ0bi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKLQotCWVtdW1vdXNlYnRuLT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOwotCWVtdW1vdXNlYnRuLT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAotCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7Ci0JZW11bW91c2VidG4tPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKLQotCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlbXVtb3VzZWJ0bik7Ci0JaWYgKHJldCkKLQkJaW5wdXRfZnJlZV9kZXZpY2UoZW11bW91c2VidG4pOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgbWFjX2hpZF9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IGVtdW1vdXNlYnRuX2lucHV0X3JlZ2lzdGVyKCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAltYWNfaGlkX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobWFjX2hpZF9yb290X2Rpcik7Ci0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCWlmICghbWFjX2hpZF9zeXNjdGxfaGVhZGVyKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldHVybiAwOwogfQorbW9kdWxlX2luaXQobWFjX2hpZF9pbml0KTsKIAotZGV2aWNlX2luaXRjYWxsKG1hY19oaWRfaW5pdCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX2hpZF9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobWFjX2hpZF9zeXNjdGxfaGVhZGVyKTsKKworCWlmIChtb3VzZV9lbXVsYXRlX2J1dHRvbnMpCisJCW1hY19oaWRfc3RvcF9lbXVsYXRpb24oKTsKK30KK21vZHVsZV9leGl0KG1hY19oaWRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKaW5kZXggNWZmNDdiYS4uYzQyZWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwpAQCAtOTAsNiArOTAsOCBAQAogCiBzdGF0aWMgdm9pZCB3cml0ZV9ib3RoX2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGludCBzcGVlZCk7CiBzdGF0aWMgdm9pZCB3cml0ZV9mYW5fc3BlZWQoc3RydWN0IHRoZXJtb3N0YXQgKnRoLCBpbnQgc3BlZWQsIGludCBmYW4pOworc3RhdGljIHZvaWQgdGhlcm1vc3RhdF9jcmVhdGVfZmlsZXModm9pZCk7CitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X3JlbW92ZV9maWxlcyh2b2lkKTsKIAogc3RhdGljIGludAogd3JpdGVfcmVnKHN0cnVjdCB0aGVybW9zdGF0KiB0aCwgaW50IHJlZywgdTggZGF0YSkKQEAgLTE2MSw2ICsxNjMsOCBAQAogCXN0cnVjdCB0aGVybW9zdGF0ICp0aCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCQorCXRoZXJtb3N0YXRfcmVtb3ZlX2ZpbGVzKCk7CisKIAlpZiAodGhyZWFkX3RoZXJtICE9IE5VTEwpIHsKIAkJa3RocmVhZF9zdG9wKHRocmVhZF90aGVybSk7CiAJfQpAQCAtMzEyLDcgKzMxNiw3IEBACiAKIAkJCWlmICh2ZXJib3NlKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJhZHQ3NDZ4OiBTZXR0aW5nIGZhbnMgc3BlZWQgdG8gJWQgIgotCQkJCQkJICIobGltaXQgZXhjZWVkZWQgYnkgJWQgb24gJXMpIFxuIiwKKwkJCQkJCSAiKGxpbWl0IGV4Y2VlZGVkIGJ5ICVkIG9uICVzKVxuIiwKIAkJCQkJCW5ld19zcGVlZCwgdmFyLAogCQkJCQkJc2Vuc29yX2xvY2F0aW9uW2Zhbl9udW1iZXIrMV0pOwogCQkJd3JpdGVfYm90aF9mYW5fc3BlZWQodGgsIG5ld19zcGVlZCk7CkBAIC00NDksNiArNDUzLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJdGhlcm1vc3RhdF9jcmVhdGVfZmlsZXMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NjYsNyArNTcyLDYgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wOwogCWNvbnN0IHUzMiAqcHJvcDsKIAlpbnQgaSA9IDAsIG9mZnNldCA9IDA7Ci0JaW50IGVycjsKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImZhbiIpOwogCWlmICghbnApCkBAIC02MzMsNiArNjM4LDE3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorI2lmbmRlZiBDT05GSUdfSTJDX1BPV0VSTUFDCisJcmVxdWVzdF9tb2R1bGUoImkyYy1wb3dlcm1hYyIpOworI2VuZGlmCisKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnRoZXJtb3N0YXRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgdGhlcm1vc3RhdF9jcmVhdGVfZmlsZXModm9pZCkKK3sKKwlpbnQgZXJyOworCiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfdGVtcGVyYXR1cmUpOwogCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMl90ZW1wZXJhdHVyZSk7CiAJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxX2xpbWl0KTsKQEAgLTY0NywxNiArNjYzLDkgQEAKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wZXJ0YXVyZSBhdHRyaWJ1dGUgZmlsZShzKS5cbiIpOwotCi0jaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKLQlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7Ci0jZW5kaWYKLQotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXRoZXJtb3N0YXRfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXModm9pZCkKIHsKIAlpZiAob2ZfZGV2KSB7CiAJCWRldmljZV9yZW1vdmVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxX3RlbXBlcmF0dXJlKTsKQEAgLTY3Myw5ICs2ODIsMTQgQEAKIAkJCWRldmljZV9yZW1vdmVfZmlsZSgmb2ZfZGV2LT5kZXYsCiAJCQkJCSAgICZkZXZfYXR0cl9zZW5zb3IyX2Zhbl9zcGVlZCk7CiAKLQkJb2ZfZGV2aWNlX3VucmVnaXN0ZXIob2ZfZGV2KTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordGhlcm1vc3RhdF9leGl0KHZvaWQpCit7CiAJaTJjX2RlbF9kcml2ZXIoJnRoZXJtb3N0YXRfZHJpdmVyKTsKKwlvZl9kZXZpY2VfdW5yZWdpc3RlcihvZl9kZXYpOwogfQogCiBtb2R1bGVfaW5pdCh0aGVybW9zdGF0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCmluZGV4IDQ1NGJjNTAuLjU3MzhkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKQEAgLTE4OTksNyArMTg5OSw3IEBACiAJICovCiAJaWYgKHJhY2ttYWMpCiAJCWNwdV9waWRfdHlwZSA9IENQVV9QSURfVFlQRV9SQUNLTUFDOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKQorCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKQogCSAgICAmJiAoY3B1X2NvdW50ID4gMSkKIAkgICAgJiYgZmN1X2ZhbnNbQ1BVQV9QVU1QX1JQTV9JTkRFWF0uaWQgIT0gRkNVX0ZBTl9BQlNFTlRfSUQKIAkgICAgJiYgZmN1X2ZhbnNbQ1BVQl9QVU1QX1JQTV9JTkRFWF0uaWQgIT0gRkNVX0ZBTl9BQlNFTlRfSUQpIHsKQEAgLTIyMzQsMTAgKzIyMzQsMTAgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCi0JcmFja21hYyA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpOworCXJhY2ttYWMgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKTsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgJiYKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpICYmCiAJICAgICFyYWNrbWFjKQogCSAgICAJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYwppbmRleCBiYTQ4ZmQ3Li43ZmI4YjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAlpbmZvID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidGhlcm1hbC1pbmZvIiwgTlVMTCk7CiAJb2Zfbm9kZV9wdXQobnApOwogCi0JaWYoICFpbmZvIHx8ICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw2IikgKQorCWlmKCAhaW5mbyB8fCAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNiIpICkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiggaW5mby0+aWQgIT0gMyApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCmluZGV4IDYyZGQxZmQuLjk3MWJjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYwpAQCAtODksNyArODksNiBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogc3RhdGljIGludCBjdWRhX3Byb2JlKHZvaWQpOwotc3RhdGljIGludCBjdWRhX2luaXQodm9pZCk7CiBzdGF0aWMgaW50IGN1ZGFfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYyk7CiBzdGF0aWMgaW50IGN1ZGFfYWRiX2F1dG9wb2xsKGludCBkZXZzKTsKIHN0YXRpYyBpbnQgY3VkYV9yZXNldF9hZGJfYnVzKHZvaWQpOwpAQCAtMTA3LDE3ICsxMDYsNDIgQEAKIAogI2lmZGVmIENPTkZJR19BREIKIHN0cnVjdCBhZGJfZHJpdmVyIHZpYV9jdWRhX2RyaXZlciA9IHsKLQkiQ1VEQSIsCi0JY3VkYV9wcm9iZSwKLQljdWRhX2luaXQsCi0JY3VkYV9zZW5kX3JlcXVlc3QsCi0JY3VkYV9hZGJfYXV0b3BvbGwsCi0JY3VkYV9wb2xsLAotCWN1ZGFfcmVzZXRfYWRiX2J1cworCS5uYW1lICAgICAgICAgPSAiQ1VEQSIsCisJLnByb2JlICAgICAgICA9IGN1ZGFfcHJvYmUsCisJLnNlbmRfcmVxdWVzdCA9IGN1ZGFfc2VuZF9yZXF1ZXN0LAorCS5hdXRvcG9sbCAgICAgPSBjdWRhX2FkYl9hdXRvcG9sbCwKKwkucG9sbCAgICAgICAgID0gY3VkYV9wb2xsLAorCS5yZXNldF9idXMgICAgPSBjdWRhX3Jlc2V0X2FkYl9idXMsCiB9OwogI2VuZGlmIC8qIENPTkZJR19BREIgKi8KIAotI2lmZGVmIENPTkZJR19QUEMKKyNpZmRlZiBDT05GSUdfTUFDCitpbnQgX19pbml0IGZpbmRfdmlhX2N1ZGEodm9pZCkKK3sKKyAgICBzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOworICAgIGludCBlcnI7CisKKyAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9DVURBKQorCXJldHVybiAwOworCisgICAgdmlhID0gdmlhMTsKKyAgICBjdWRhX3N0YXRlID0gaWRsZTsKKworICAgIGVyciA9IGN1ZGFfaW5pdF92aWEoKTsKKyAgICBpZiAoZXJyKSB7CisJcHJpbnRrKEtFUk5fRVJSICJjdWRhX2luaXRfdmlhKCkgZmFpbGVkXG4iKTsKKwl2aWEgPSBOVUxMOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIGVuYWJsZSBhdXRvcG9sbCAqLworICAgIGN1ZGFfcmVxdWVzdCgmcmVxLCBOVUxMLCAzLCBDVURBX1BBQ0tFVCwgQ1VEQV9BVVRPUE9MTCwgMSk7CisgICAgd2hpbGUgKCFyZXEuY29tcGxldGUpCisJY3VkYV9wb2xsKCk7CisKKyAgICByZXR1cm4gMTsKK30KKyNlbHNlCiBpbnQgX19pbml0IGZpbmRfdmlhX2N1ZGEodm9pZCkKIHsKICAgICBzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwpAQCAtMTc1LDcgKzE5OSw3IEBACiAgICAgdmlhcyA9IE5VTEw7CiAgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BQQyAqLworI2VuZGlmIC8qICFkZWZpbmVkIENPTkZJR19NQUMgKi8KIAogc3RhdGljIGludCBfX2luaXQgdmlhX2N1ZGFfc3RhcnQodm9pZCkKIHsKQEAgLTE4NCwxNCArMjA4LDE0IEBACiAKICNpZmRlZiBDT05GSUdfTUFDCiAgICAgY3VkYV9pcnEgPSBJUlFfTUFDX0FEQjsKLSNlbHNlIC8qIENPTkZJR19NQUMgKi8KKyNlbHNlCiAgICAgY3VkYV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcCh2aWFzLCAwKTsKICAgICBpZiAoY3VkYV9pcnEgPT0gTk9fSVJRKSB7CiAJcHJpbnRrKEtFUk5fRVJSICJ2aWEtY3VkYTogY2FuJ3QgbWFwIGludGVycnVwdHMgZm9yICVzXG4iLAogCSAgICAgICB2aWFzLT5mdWxsX25hbWUpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KLSNlbmRpZiAvKiBDT05GSUdfTUFDICovCisjZW5kaWYKIAogICAgIGlmIChyZXF1ZXN0X2lycShjdWRhX2lycSwgY3VkYV9pbnRlcnJ1cHQsIDAsICJBREIiLCBjdWRhX2ludGVycnVwdCkpIHsKIAlwcmludGsoS0VSTl9FUlIgInZpYS1jdWRhOiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgY3VkYV9pcnEpOwpAQCAtMjE2LDI4ICsyNDAsMTAgQEAKICNlbHNlCiAgICAgaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfQ1VEQSkKIAlyZXR1cm4gLUVOT0RFVjsKLSAgICB2aWEgPSB2aWExOwogI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1jdWRhX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfUFBDCiAgICAgaWYgKHZpYSA9PSBOVUxMKQogCXJldHVybiAtRU5PREVWOwogICAgIHJldHVybiAwOwotI2Vsc2UgCi0gICAgaW50IGVyciA9IGN1ZGFfaW5pdF92aWEoKTsKLSAgICBpZiAoZXJyKSB7Ci0JcHJpbnRrKEtFUk5fRVJSICJjdWRhX2luaXRfdmlhKCkgZmFpbGVkXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0gICAgb3V0XzgoJnZpYVtJRVJdLCBJRVJfU0VUfFNSX0lOVCk7IC8qIGVuYWJsZSBpbnRlcnJ1cHQgZnJvbSBTUiAqLwotCi0gICAgcmV0dXJuIHZpYV9jdWRhX3N0YXJ0KCk7Ci0jZW5kaWYKIH0KICNlbmRpZiAvKiBDT05GSUdfQURCICovCiAKQEAgLTQzMCw5ICs0MzYsMTEgQEAKICAgICAvKiBjdWRhX2ludGVycnVwdCBvbmx5IHRha2VzIGEgbm9ybWFsIGxvY2ssIHdlIGRpc2FibGUKICAgICAgKiBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQgcmUtZW50ZXJpbmcgYW5kIHRodXMgZGVhZGxvY2tpbmcuCiAgICAgICovCi0gICAgZGlzYWJsZV9pcnEoY3VkYV9pcnEpOworICAgIGlmIChjdWRhX2lycSkKKwlkaXNhYmxlX2lycShjdWRhX2lycSk7CiAgICAgY3VkYV9pbnRlcnJ1cHQoMCwgTlVMTCk7Ci0gICAgZW5hYmxlX2lycShjdWRhX2lycSk7CisgICAgaWYgKGN1ZGFfaXJxKQorCWVuYWJsZV9pcnEoY3VkYV9pcnEpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKQEAgLTQ0Niw3ICs0NTQsNyBAQAogICAgIAogICAgIHNwaW5fbG9jaygmY3VkYV9sb2NrKTsKIAotICAgIC8qIE9uIHBvd2VybWFjcywgdGhpcyBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBWSUEgSVJRLiBCdXQgaXQgdXNlcworICAgIC8qIE9uIHBvd2VybWFjcywgdGhpcyBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBWSUEgSVJRLiBCdXQgdGhleSB1c2UKICAgICAgKiBqdXN0IHRoZSBzaGlmdCByZWdpc3RlciBJUlEgLS0gb3RoZXIgVklBIGludGVycnVwdCBzb3VyY2VzIGFyZSBkaXNhYmxlZC4KICAgICAgKiBPbiBtNjhrIG1hY3MsIHRoZSBWSUEgSVJRIHNvdXJjZXMgYXJlIGRpc3BhdGNoZWQgaW5kaXZpZHVhbGx5LiBVbmxlc3MKICAgICAgKiB3ZSBhcmUgcG9sbGluZywgdGhlIHNoaWZ0IHJlZ2lzdGVyIElSUSBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCmluZGV4IGEzNDhiYjAuLjRmM2M0NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKQEAgLTE1MCwxMyArMTUwLDEzIEBACiAKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSBvbGQgUG93ZXJCb29rIHNpbmNlIEkgY2FuJ3QgdGVzdCBvbiBpdCAqLwogCWF1dG9zYXZlID0KLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIik7CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpOwogCiAJaWYgKCFhdXRvc2F2ZSAmJgogCSAgICAhcG1hY19oYXNfYmFja2xpZ2h0X3R5cGUoInBtdSIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAkJcmV0dXJuOwogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicG11YmwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBkYjM3OWMzLi40Mjc2NDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00NjMsOCArNDYzLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQzMyCi0gIAlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpIHx8Ci0gIAkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKSkgeworICAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAorICAJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpIHsKIAkJaW50IG1iID0gcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfR0VUX01CX0lORk8sCiAJCQlOVUxMLCBQTUFDX01CX0lORk9fTU9ERUwsIDApOwogCQlwbXVfYmF0dGVyeV9jb3VudCA9IDE7CkBAIC00NzIsOCArNDcyLDggQEAKIAkJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9DT01FVDsKIAkJZWxzZQogCQkJcG11X2JhdHRlcmllc1swXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX0hPT1BFUjsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CiAJCXBtdV9iYXR0ZXJ5X2NvdW50ID0gMjsKIAkJcG11X2JhdHRlcmllc1swXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX1NNQVJUOwogCQlwbXVfYmF0dGVyaWVzWzFdLmZsYWdzIHw9IFBNVV9CQVRUX1RZUEVfU01BUlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKaW5kZXggMDc1YjRkOS4uNDM3ZjU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYwpAQCAtNDY4LDkgKzQ2OCw5IEBACiAJREJHKCJ3ZjogY29yZSBsb2FkZWRcbiIpOwogCiAJLyogRG9uJ3QgcmVnaXN0ZXIgb24gb2xkIG1hY2hpbmVzIHRoYXQgdXNlIHRoZXJtX3BtNzIgZm9yIG5vdyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndmX3BsYXRmb3JtX2RldmljZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKaW5kZXggOTAwYWFkZS4uMWE3N2E3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYwpAQCAtNzYsOSArNzYsOSBAQAogCXN0cnVjdCB3Zl9jb250cm9sICpjbGFtcDsKIAogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljbGFtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3Zl9jb250cm9sKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYwppbmRleCBlZDY0MjZhLi5kODI1N2QzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0yMzksOSArMjM5LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX2xtNzVfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbG03NV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKaW5kZXggYTY3YjM0OS4uYjQ4NmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCkBAIC0xODgsOSArMTg4LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX21heDY2OTBfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbWF4NjY5MF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggNzNkNjk1ZC4uZTBlZTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC02NzYsNyArNjc2LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ291bnQgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCmluZGV4IDY2ZWM0ZmIxLi45NDdkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQogCQlyYyA9IHBtMTIxX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggYWJiZTIwNjQuLjU2NWQ1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKQEAgLTc3OSw4ICs3NzksOCBAQAogewogCWludCByYyA9IC1FTk9ERVY7CiAKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSkKIAkJcmMgPSB3Zl9pbml0X3BtKCk7CiAKIAlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCmluZGV4IDc2NGM1MjUuLmJlYTk5MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKQEAgLTcxMSw3ICs3MTEsNyBAQAogewogCWludCByYyA9IC1FTk9ERVY7CiAKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCiAJCXJjID0gd2ZfaW5pdF9wbSgpOwogCiAJaWYgKHJjID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCmluZGV4IDljNTY3YjkuLjNjMTkzNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYwpAQCAtMzYzLDkgKzM2Myw5IEBACiAJICogSSB5ZXQgaGF2ZSB0byBmaWd1cmUgb3V0IHdoYXQncyB1cCB3aXRoIDgsMiBhbmQgd2lsbCBoYXZlIHRvCiAJICogYWRqdXN0IGZvciBsYXRlciwgdW5sZXNzIHdlIGNhbiAxMDAlIHRydXN0IHRoZSBTREIgcGFydGl0aW9uLi4uCiAJICovCi0JaWYgKChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAotCSAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKSAmJgorCWlmICgob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8CisJICAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikgfHwKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkgJiYKIAkgICAgY3B1dmNwX3ZlcnNpb24gPj0gMikgewogCQlwb3ctPnF1YWRyYXRpYyA9IDE7CiAJCURCRygid2luZGZhcm06IENQVSBQb3dlciB1c2luZyBxdWFkcmF0aWMgdHJhbnNmb3JtXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IDAwNDM1YmQuLmFmMmQzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCSAqLwogCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWNvbmYtPmFycmF5X3NlY3RvcnMgKz0gcmRldi0+c2VjdG9yczsKIAkJY250Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCAzMmE2NjJmLi40YjMyM2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCQkgKi8KIAkJCWlmIChxLT5tZXJnZV9idmVjX2ZuICYmCiAJCQkgICAgcXVldWVfbWF4X3NlY3RvcnMocSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKIAkJCW1kZGV2LT5kZWdyYWRlZC0tOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCSAqIGEgbWVyZ2VfYnZlY19mbiB0byBiZSBpbnZvbHZlZCBpbiBtdWx0aXBhdGggKi8KIAkJaWYgKHJkZXYtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA3NzYwNWNkLi5hMWY3MTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCQlpZiAocmRldjEtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSkKIAkJCXNtYWxsZXN0ID0gcmRldjE7CkBAIC0zMjUsNyArMzI1LDcgQEAKIAl9CiAJaWYgKG1kX2NoZWNrX25vX2JpdG1hcChtZGRldikpCiAJCXJldHVybiAtRUlOVkFMOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIG1kZGV2LT5jaHVua19zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBtZGRldi0+Y2h1bmtfc2VjdG9ycyk7CiAJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCiAJcmV0ID0gY3JlYXRlX3N0cmlwX3pvbmVzKG1kZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCA4NTliZDNmLi41YTA2MTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogCQkJICovCiAJCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCQlwLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IG1pcnJvcjsKQEAgLTIxMDMsNyArMjEwMyw3IEBACiAJCSAqLwogCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCX0KIAogCW1kZGV2LT5kZWdyYWRlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBkMTE5YjdiLi43NTg0ZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJCQkgKi8KIAkJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCXAtPmhlYWRfcG9zaXRpb24gPSAwOwogCQkJcmRldi0+cmFpZF9kaXNrID0gbWlycm9yOwpAQCAtMjI2MCw3ICsyMjYwLDcgQEAKIAkJICovCiAJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkgICAgcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJZGlzay0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGNlYjI0YWYuLjcwZmZiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTM3MzksNyArMzczOSw3IEBACiAJaWYgKChiaS0+Ymlfc2l6ZT4+OSkgPiBxdWV1ZV9tYXhfc2VjdG9ycyhxKSkKIAkJcmV0dXJuIDA7CiAJYmxrX3JlY291bnRfc2VnbWVudHMocSwgYmkpOwotCWlmIChiaS0+YmlfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKQorCWlmIChiaS0+YmlfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocS0+bWVyZ2VfYnZlY19mbikKQEAgLTQ2ODAsNyArNDY4MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjcHU7CiAJc3RydWN0IHBhZ2UgKnNwYXJlX3BhZ2U7Ci0Jc3RydWN0IHJhaWQ1X3BlcmNwdSAqYWxsY3B1czsKKwlzdHJ1Y3QgcmFpZDVfcGVyY3B1IF9fcGVyY3B1ICphbGxjcHVzOwogCXZvaWQgKnNjcmliYmxlOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuaCBiL2RyaXZlcnMvbWQvcmFpZDUuaAppbmRleCBkZDcwODM1Li4wZjg2ZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5oCkBAIC00MDUsNyArNDA1LDcgQEAKIAkJCQkJICAgICAgKiBsaXN0cyBhbmQgcGVyZm9ybWluZyBhZGRyZXNzCiAJCQkJCSAgICAgICogY29udmVyc2lvbnMKIAkJCQkJICAgICAgKi8KLQl9ICpwZXJjcHU7CisJfSBfX3BlcmNwdSAqcGVyY3B1OwogCXNpemVfdAkJCXNjcmliYmxlX2xlbjsgLyogc2l6ZSBvZiBzY3JpYmJsZSByZWdpb24gbXVzdCBiZQogCQkJCQkgICAgICAgKiBhc3NvY2lhdGVkIHdpdGggY29uZiB0byBoYW5kbGUKIAkJCQkJICAgICAgICogY3B1IGhvdHBsdWcgd2hpbGUgcmVzaGFwaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQppbmRleCBkZjVkZGI0Li4xNzE4OTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBpci1jb21tb24tb2JqcyAgOj0gaXItZnVuY3Rpb25zLm8gaXIta2V5bWFwcy5vCi1pci1jb3JlLW9ianMJOj0gaXIta2V5dGFibGUubworaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8gaXItc3lzZnMubwogCiBvYmotJChDT05GSUdfSVJfQ09SRSkgKz0gaXItY29yZS5vCiBvYmotJChDT05GSUdfVklERU9fSVIpICs9IGlyLWNvbW1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYwppbmRleCA3NzZhMTM2Ni4uYWIwNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCkBAIC01Miw3ICs1Miw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlKQorCQkgIGNvbnN0IHU2NCBpcl90eXBlKQogewogCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwppbmRleCA5YmJlNmIxLi4wZWZkZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwpAQCAtMzM5MywzICszMzkzLDEwMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKIAorCisvKiBMZWFkdGVrIFdpbmZhc3QgVFYgVVNCIElJIERlbHV4ZSByZW1vdGUKKyAgIE1hZ251cyBBbG0gPG1hZ251cy5hbG1AZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlW10gPSB7CisJeyAweDYyLCBLRVlfMH0sCisJeyAweDc1LCBLRVlfMX0sCisJeyAweDc2LCBLRVlfMn0sCisJeyAweDc3LCBLRVlfM30sCisJeyAweDc5LCBLRVlfNH0sCisJeyAweDdhLCBLRVlfNX0sCisJeyAweDdiLCBLRVlfNn0sCisJeyAweDdkLCBLRVlfN30sCisJeyAweDdlLCBLRVlfOH0sCisJeyAweDdmLCBLRVlfOX0sCisKKwl7IDB4MzgsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KKwl7IDB4MzcsIEtFWV9SRUNPUkR9LAkJLyogUkVDT1JEICovCisJeyAweDM1LCBLRVlfVElNRX0sCQkvKiBUSU1FU0hJRlQgKi8KKworCXsgMHg3NCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDc4LCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4NjQsIEtFWV9NVVRFfSwJCS8qIE1VVEUgKi8KKworCXsgMHgyMSwgS0VZX0NIQU5ORUx9LAkJLyogU1VSRiAqLworCXsgMHg3YywgS0VZX0NIQU5ORUxVUH0sCQkvKiBDSEFOTkVMVVAgKi8KKwl7IDB4NjAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIENIQU5ORUxET1dOICovCisJeyAweDYxLCBLRVlfTEFTVH0sCQkvKiBMQVNUIENIQU5ORUwgKFJFQ0FMTCkgKi8KKworCXsgMHg3MiwgS0VZX1ZJREVPfSwgCQkvKiBJTlBVVCBNT0RFUyAoVFYvRk0pICovCisKKwl7IDB4NzAsIEtFWV9QT1dFUjJ9LAkJLyogVFYgT04vT0ZGICovCisKKwl7IDB4MzksIEtFWV9DWUNMRVdJTkRPV1N9LAkvKiBNSU5JTUlaRSAoQk9TUykgKi8KKwl7IDB4M2EsIEtFWV9ORVd9LAkJLyogUElQICovCisJeyAweDczLCBLRVlfWk9PTX0sCQkvKiBGVUxMU0VDUkVFTiAqLworCisJeyAweDY2LCBLRVlfSU5GT30sCQkvKiBPU0QgKERJU1BMQVkpICovCisKKwl7IDB4MzEsIEtFWV9ET1R9LAkJLyogJy4nICovCisJeyAweDYzLCBLRVlfRU5URVJ9LAkJLyogRU5URVIgKi8KKworfTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGUpOworCisvKiBLd29ybGQgMzE1VQorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2t3b3JsZF8zMTV1W10gPSB7CisJeyAweDYxNDMsIEtFWV9QT1dFUiB9LAorCXsgMHg2MTAxLCBLRVlfVFVORVIgfSwJCS8qIHNvdXJjZSAqLworCXsgMHg2MTBiLCBLRVlfWk9PTSB9LAorCXsgMHg2MTAzLCBLRVlfUE9XRVIyIH0sCQkvKiBzaHV0ZG93biAqLworCisJeyAweDYxMDQsIEtFWV8xIH0sCisJeyAweDYxMDgsIEtFWV8yIH0sCisJeyAweDYxMDIsIEtFWV8zIH0sCisJeyAweDYxMDksIEtFWV9DSEFOTkVMVVAgfSwKKworCXsgMHg2MTBmLCBLRVlfNCB9LAorCXsgMHg2MTA1LCBLRVlfNSB9LAorCXsgMHg2MTA2LCBLRVlfNiB9LAorCXsgMHg2MTA3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg2MTBjLCBLRVlfNyB9LAorCXsgMHg2MTBkLCBLRVlfOCB9LAorCXsgMHg2MTBhLCBLRVlfOSB9LAorCXsgMHg2MTBlLCBLRVlfVk9MVU1FVVAgfSwKKworCXsgMHg2MTEwLCBLRVlfTEFTVCB9LAorCXsgMHg2MTExLCBLRVlfMCB9LAorCXsgMHg2MTEyLCBLRVlfRU5URVIgfSwKKwl7IDB4NjExMywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg2MTE0LCBLRVlfUkVDT1JEIH0sCisJeyAweDYxMTUsIEtFWV9TVE9QIH0sCisJeyAweDYxMTYsIEtFWV9QTEFZIH0sCisJeyAweDYxMTcsIEtFWV9NVVRFIH0sCisKKwl7IDB4NjExOCwgS0VZX1VQIH0sCisJeyAweDYxMTksIEtFWV9ET1dOIH0sCisJeyAweDYxMWEsIEtFWV9MRUZUIH0sCisJeyAweDYxMWIsIEtFWV9SSUdIVCB9LAorCisJeyAweDYxMWMsIEtFWV9SRUQgfSwKKwl7IDB4NjExZCwgS0VZX0dSRUVOIH0sCisJeyAweDYxMWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NjExZiwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2t3b3JsZF8zMTV1LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19rd29ybGRfMzE1dSksCisJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKaW5kZXggYjUyMWVkOS4uMDkwM2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpAQCAtNjUsNyArNjUsNyBAQAogICogSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBxdWFudGl0eSBvZiB0YWJsZSByZXNpemVzLCBpdCBoYXMgYSBtaW5pbXVtCiAgKiB0YWJsZSBzaXplIG9mIElSX1RBQl9NSU5fU0laRS4KICAqLwotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQorc3RhdGljIGludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcykKIHsKIAlzaXplX3Qgc2l6ZTsKIApAQCAtODEsNyArODEsNiBAQAogCiAJcmV0dXJuIG5fZWxlbXM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yb3VuZHVwX3RhYmxlc2l6ZSk7CiAKIC8qKgogICogaXJfY29weV90YWJsZSgpIC0gY29waWVzIGEga2V5dGFibGUsIGRpc2NhcmRpbmcgdGhlIHVudXNlZCBlbnRyaWVzCkBAIC04OSw5ICs4OCwxMSBAQAogICogQG9yaWdpbjoJb3JpZ2luIHRhYmxlCiAgKgogICogQ29waWVzIGFsbCBlbnRyaWVzIHdoZXJlIHRoZSBrZXljb2RlIGlzIG5vdCBLRVlfVU5LTk9XTi9LRVlfUkVTRVJWRUQKKyAqIEFsc28gY29waWVzIHRhYmxlIHNpemUgYW5kIHRhYmxlIHByb3RvY29sLgorICogTk9URTogSXQgc2hvdWxkbid0IGNvcHkgdGhlIGxvY2sgZmllbGQKICAqLwogCi1pbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKK3N0YXRpYyBpbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKIAkJIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqb3JpZ2luKQogewogCWludCBpLCBqID0gMDsKQEAgLTEwNSwxMiArMTA2LDEyIEBACiAJCWorKzsKIAl9CiAJZGVzdGluLT5zaXplID0gajsKKwlkZXN0aW4tPmlyX3R5cGUgPSBvcmlnaW4tPmlyX3R5cGU7CiAKIAlJUl9kcHJpbnRrKDEsICJDb3BpZWQgJWQgc2NhbmNvZGVzIHRvIHRoZSBuZXcga2V5Y29kZSB0YWJsZVxuIiwgZGVzdGluLT5zaXplKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29weV90YWJsZSk7CiAKIC8qKgogICogaXJfZ2V0a2V5Y29kZSgpIC0gZ2V0IGEga2V5Y29kZSBhdCB0aGUgZXZkZXYgc2NhbmNvZGUgLT5rZXljb2RlIHRhYmxlCkBAIC0xODQsMTggKzE4NSwxNCBAQAogCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplIC0gMTsKIAlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOwogCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwID0gTlVMTDsKIAotCWlmIChyZXNpemUpIHsKKwlpZiAocmVzaXplKQogCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKIAkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKIAotCQkvKiBUaGVyZSdzIG5vIG1lbW9yeSBmb3IgcmVzaXplLiBLZWVwIHRoZSBvbGQgdGFibGUgKi8KLQkJaWYgKCFuZXdrZXltYXApCi0JCQlyZXNpemUgPSAwOwotCX0KLQotCWlmICghcmVzaXplKSB7CisJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCisJaWYgKCFyZXNpemUgfHwgIW5ld2tleW1hcCkgewogCQluZXdrZXltYXAgPSBvbGRrZXltYXA7CiAKIAkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCkBAIC0zOTksMTIgKzM5NiwxNCBAQAogICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCiAgKiBAcmNfdGFiOgl0aGUgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRhYmxlIG9mIHNjYW5jb2RlL2tleW1hcAogICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGlucHV0IGluZnJhc3RydWN0dXJlIHRvIHdvcmsgd2l0aAotICogYW4gSVIuCi0gKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVIgZGV2aWNlLgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUKKyAqIHRvIHdvcmsgd2l0aCBhbiBJUi4KKyAqIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGlucHV0L2V2ZGV2IGludGVyZmFjZSBmb3IgdGhlIGRldmljZSBhbmQKKyAqIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCiAgKi8KIGludCBpcl9pbnB1dF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCi0JCSAgICAgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKQorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZSAgKmtleW1hcCAgICA9IHJjX3RhYi0+c2NhbjsKQEAgLTQxNywxOSArNDE2LDIyIEBACiAJaWYgKCFpcl9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnJjX3RhYi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlyX2Rldi0+cmNfdGFiLmxvY2spOwogCiAJaXJfZGV2LT5yY190YWIuc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHJjX3RhYi0+c2l6ZSk7CiAJaXJfZGV2LT5yY190YWIuc2NhbiA9IGt6YWxsb2MoaXJfZGV2LT5yY190YWIuc2l6ZSAqCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyX2Rldi0+cmNfdGFiLnNjYW4pCisJaWYgKCFpcl9kZXYtPnJjX3RhYi5zY2FuKSB7CisJCWtmcmVlKGlyX2Rldik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJWQga2V5Y29kZSBlbnRyaWVzICglemQgYnl0ZXMpXG4iLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplICogc2l6ZW9mKGlyX2Rldi0+cmNfdGFiLnNjYW4pKTsKIAogCWlyX2NvcHlfdGFibGUoJmlyX2Rldi0+cmNfdGFiLCByY190YWIpOworCWlyX2Rldi0+cHJvcHMgPSBwcm9wczsKIAogCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KIAlJUl9kcHJpbnRrKDEsICJrZXkgbWFwIHNpemU6ICVkXG4iLCByY190YWItPnNpemUpOwpAQCAtNDQ3LDE2ICs0NDksMzEgQEAKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGlyX2Rldik7CiAKIAlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJcmMgPSBpcl9yZWdpc3Rlcl9jbGFzcyhpbnB1dF9kZXYpOwogCWlmIChyYyA8IDApIHsKLQkJa2ZyZWUocmNfdGFiLT5zY2FuKTsKLQkJa2ZyZWUoaXJfZGV2KTsKLQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJZ290byBlcnI7CiAJfQogCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShyY190YWItPnNjYW4pOworCWtmcmVlKGlyX2Rldik7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9yZWdpc3Rlcik7CiAKKy8qKgorICogaXJfaW5wdXRfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlcnMgSVIgYW5kIGZyZWVzIHJlc291cmNlcworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGZyZWUgbWVtb3J5IGFuZCBkZS1yZWdpc3RlciBpbnRlcmZhY2VzLgorICovCiB2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CkBAIC00NzIsNiArNDg5LDggQEAKIAlrZnJlZShyY190YWItPnNjYW4pOwogCXJjX3RhYi0+c2NhbiA9IE5VTEw7CiAKKwlpcl91bnJlZ2lzdGVyX2NsYXNzKGRldik7CisKIAlrZnJlZShpcl9kZXYpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpAQCAtMCwwICsxLDIxMSBAQAorLyogaXItcmVnaXN0ZXIuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKworI2RlZmluZSBJUlJDVl9OVU1fREVWSUNFUwkyNTYKKworLyogYml0IGFycmF5IHRvIHJlcHJlc2VudCBJUiBzeXNmcyBkZXZpY2UgbnVtYmVyICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcl9jb3JlX2Rldl9udW1iZXI7CisKKy8qIGNsYXNzIGZvciAvc3lzL2NsYXNzL2lycmN2ICovCitzdGF0aWMgc3RydWN0IGNsYXNzICppcl9pbnB1dF9jbGFzczsKKworLyoqCisgKiBzaG93X3Byb3RvY29sKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbAorICogQGQ6CQl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCisgKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCByZXR1cm5zIHRoZSBwcm90b2NvbCBuYW1lLCBhcyB1bmRlcnN0b29kIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqczsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbCBpcyAlbGxkXG4iLCAobG9uZyBsb25nKWlyX3R5cGUpOworCisJLyogRklYTUU6IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBwcm90b2NvbHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChpcl90eXBlID09IElSX1RZUEVfVU5LTk9XTikKKwkJcyA9ICJVbmtub3duIjsKKwllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCQlzID0gIlJDLTUiOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9QRCkKKwkJcyA9ICJQdWxzZS9kaXN0YW5jZSI7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykKKwkJcyA9ICJORUMiOworCWVsc2UKKwkJcyA9ICJPdGhlciI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcyk7Cit9CisKKy8qKgorICogc3RvcmVfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKKyAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAbGVuOglsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCBjaGFuZ2VzIHRoZSBJUiB0aGUgcHJvdG9jb2wgbmFtZSwgaWYgdGhlIElSIHR5cGUgaXMgcmVjb2duaXplZAorICogYnkgdGhlIGRyaXZlci4KKyAqIElmIGFuIHVua25vd24gcHJvdG9jb2wgbmFtZSBpcyB1c2VkLCByZXR1cm5zIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Byb3RvY29sKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpkYXRhLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV047CisJaW50IHJjID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICJcbiIpOworCisJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInJjLTUiKSkKKwkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInBkIikpCisJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgIm5lYyIpKQorCQlpcl90eXBlID0gSVJfVFlQRV9ORUM7CisKKwlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1VOS05PV04pIHsKKwkJSVJfZHByaW50aygxLCAiRXJyb3Igc2V0dGluZyBwcm90b2NvbCB0byAlbGxkXG4iLAorCQkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKQorCQlyYyA9IGlyX2Rldi0+cHJvcHMtPmNoYW5nZV9wcm90b2NvbChpcl9kZXYtPnByb3BzLT5wcml2LAorCQkJCQkJICAgIGlyX3R5cGUpOworCisJaWYgKHJjIDwgMCkgeworCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29sIHRvICVsbGRcbiIsCisJCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCWlyX2Rldi0+cmNfdGFiLmlyX3R5cGUgPSBpcl90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyX2Rldi0+cmNfdGFiLmxvY2ssIGZsYWdzKTsKKworCUlSX2RwcmludGsoMSwgIkN1cnJlbnQgcHJvdG9jb2wgaXMgJWxsZFxuIiwKKwkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3Qgd2l0aCB0aGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgSVIncworICovCitzdGF0aWMgREVWSUNFX0FUVFIoY3VycmVudF9wcm90b2NvbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfcHJvdG9jb2wsIHN0b3JlX3Byb3RvY29sKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlyX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jdXJyZW50X3Byb3RvY29sLmF0dHIsCisJTlVMTCwKK307CisKKy8qKgorICogaXJfcmVnaXN0ZXJfY2xhc3MoKSAtIGNyZWF0ZXMgdGhlIHN5c2ZzIGZvciAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKKyAqLworaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCWludCBkZXZubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmlyX2NvcmVfZGV2X251bWJlciwKKwkJCQkJSVJSQ1ZfTlVNX0RFVklDRVMpOworCisJaWYgKHVubGlrZWx5KGRldm5vIDwgMCkpCisJCXJldHVybiBkZXZubzsKKworCWlyX2Rldi0+YXR0ci5hdHRycyA9IGlyX2Rldl9hdHRyczsKKwlpcl9kZXYtPmNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoaXJfaW5wdXRfY2xhc3MsIE5VTEwsCisJCQkJCSAgaW5wdXRfZGV2LT5kZXYuZGV2dCwgaXJfZGV2LAorCQkJCQkgICJpcnJjdiVkIiwgZGV2bm8pOworCWtvYmogPSAmaXJfZGV2LT5jbGFzc19kZXYtPmtvYmo7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDcmVhdGluZyBJUiBkZXZpY2UgJXNcbiIsIGtvYmplY3RfbmFtZShrb2JqKSk7CisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgJmlyX2Rldi0+YXR0cik7CisJaWYgKHVubGlrZWx5KHJjIDwgMCkpIHsKKwkJZGV2aWNlX2Rlc3Ryb3koaXJfaW5wdXRfY2xhc3MsIGlucHV0X2Rldi0+ZGV2LmRldnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcl9kZXYtPmRldm5vID0gZGV2bm87CisJc2V0X2JpdChkZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlyZXR1cm4gMDsKK307CisKKy8qKgorICogaXJfdW5yZWdpc3Rlcl9jbGFzcygpIC0gcmVtb3ZlcyB0aGUgc3lzZnMgZm9yIHN5c2ZzIGZvcgorICoJCQkgICAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgc3lmcyBjb2RlIGZvciBJUiBjbGFzcworICovCit2b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwljbGVhcl9iaXQoaXJfZGV2LT5kZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlrb2JqID0gJmlyX2Rldi0+Y2xhc3NfZGV2LT5rb2JqOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKGtvYmosICZpcl9kZXYtPmF0dHIpOworCWRldmljZV9kZXN0cm95KGlyX2lucHV0X2NsYXNzLCBpbnB1dF9kZXYtPmRldi5kZXZ0KTsKKworCWtmcmVlKGlyX2Rldi0+YXR0ci5uYW1lKTsKK30KKworLyoKKyAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL2lycmN2CisgKi8KKworc3RhdGljIGludCBfX2luaXQgaXJfY29yZV9pbml0KHZvaWQpCit7CisJaXJfaW5wdXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpcnJjdiIpOworCWlmIChJU19FUlIoaXJfaW5wdXRfY2xhc3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXJfY29yZTogdW5hYmxlIHRvIHJlZ2lzdGVyIGlycmN2IGNsYXNzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaXJfaW5wdXRfY2xhc3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfY29yZV9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShpcl9pbnB1dF9jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGlyX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9jb3JlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA3MzY0Yjk2NC4uZmQ4ZTFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTQyMywxNCArNDIzLDE1IEBACiAJfQogfQogCitpbnQgc2FhNzE0Nl92dl9kZXZpbml0KHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQoreworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5wY2ktPmRldiwgJmRldi0+djRsMl9kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzE0Nl92dl9kZXZpbml0KTsKKwogaW50IHNhYTcxNDZfdnZfaW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfZXh0X3Z2ICpleHRfdnYpCiB7CiAJc3RydWN0IHNhYTcxNDZfdnYgKnZ2OwotCWludCBlcnI7Ci0KLQllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5wY2ktPmRldiwgJmRldi0+djRsMl9kZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAKIAl2diA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3Z2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZ2ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKaW5kZXggMmI4NzZmMy4uZDlhYWFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKQEAgLTEzMzcsNiArMTMzNywyMiBAQAogCX0sCiB9OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRVTkVSX1NPTllfQlRGX1BYTjAxWiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiAzNjcuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfc29ueV9idGZfcHhuMDF6X3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc29ueV9idGZfcHhuMDF6X3JhbmdlcyksCisJfSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdHVuZXJ0eXBlIHR1bmVyc1tdID0gewpAQCAtMTgwNSw2ICsxODIxLDExIEBACiAJCS5uYW1lICAgPSAiTlhQIFREQTE4MjcxIiwKIAkJLyogc2VlIHRkYTE4MjcxLWZlLmMgZm9yIGRldGFpbHMgKi8KIAl9LAorCVtUVU5FUl9TT05ZX0JURl9QWE4wMVpdID0geworCQkubmFtZSAgID0gIlNvbnkgQlRGLVB4bjAxWiIsCisJCS5wYXJhbXMgPSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zKSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0wodHVuZXJzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCmluZGV4IGYyNzBlNjAuLmJlNTFjMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKQEAgLTkxNywzMCArOTE3LDY4IEBACiAJICogdGhhdCB4YzIwMjggd2lsbCBiZSBpbiBhIHNhZmUgc3RhdGUuCiAJICogTWF5YmUgdGhpcyBtaWdodCBhbHNvIGJlIG5lZWRlZCBmb3IgRFRWLgogCSAqLwotCWlmIChuZXdfbW9kZSA9PSBUX0FOQUxPR19UVikKKwlpZiAobmV3X21vZGUgPT0gVF9BTkFMT0dfVFYpIHsKIAkJcmMgPSBzZW5kX3NlcShwcml2LCB7MHgwMCwgMHgwMH0pOwogCi0JLyoKLQkgKiBEaWdpdGFsIG1vZGVzIHJlcXVpcmUgYW4gb2Zmc2V0IHRvIGFkanVzdCB0byB0aGUKLQkgKiBwcm9wZXIgZnJlcXVlbmN5LgotCSAqIEFuYWxvZyBtb2RlcyByZXF1aXJlIG9mZnNldCA9IDAKLQkgKi8KLQlpZiAobmV3X21vZGUgPT0gVF9ESUdJVEFMX1RWKSB7Ci0JCS8qIFNldHMgdGhlIG9mZnNldCBhY2NvcmRpbmcgd2l0aCBmaXJtd2FyZSAqLworCQkvKiBBbmFsb2cgbW9kZXMgcmVxdWlyZSBvZmZzZXQgPSAwICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogRGlnaXRhbCBtb2RlcyByZXF1aXJlIGFuIG9mZnNldCB0byBhZGp1c3QgdG8gdGhlCisJCSAqIHByb3BlciBmcmVxdWVuY3kuIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiB3aGF0CisJCSAqIGZpcm13YXJlIHZlcnNpb24gaXMgdXNlZC4KKwkJICovCisKKwkJLyoKKwkJICogQWRqdXN0IHRvIHRoZSBjZW50ZXIgZnJlcXVlbmN5LiBUaGlzIGlzIGNhbGN1bGF0ZWQgYnkgdGhlCisJCSAqIGZvcm11bGE6IG9mZnNldCA9IDEuMjVNSHogLSBCVy8yCisJCSAqIEZvciBEVFYgNy84LCB0aGUgZmlybXdhcmUgdXNlcyBCVyA9IDgwMDAsIHNvIGl0IG5lZWRzIGEKKwkJICogZnVydGhlciBhZGp1c3RtZW50IHRvIGdldCB0aGUgZnJlcXVlbmN5IGNlbnRlciBvbiBWSEYKKwkJICovCiAJCWlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjYpCiAJCQlvZmZzZXQgPSAxNzUwMDAwOwogCQllbHNlIGlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjcpCiAJCQlvZmZzZXQgPSAyMjUwMDAwOwogCQllbHNlCS8qIERUVjggb3IgRFRWNzggKi8KIAkJCW9mZnNldCA9IDI3NTAwMDA7Ci0KLQkJLyoKLQkJICogV2UgbXVzdCBhZGp1c3QgdGhlIG9mZnNldCBieSA1MDBrSHogIHdoZW4KLQkJICogdHVuaW5nIGEgN01IeiBWSEYgY2hhbm5lbCB3aXRoIERUVjc4IGZpcm13YXJlCi0JCSAqICh1c2VkIGluIEF1c3RyYWxpYSwgSXRhbHkgYW5kIEdlcm1hbnkpCi0JCSAqLwogCQlpZiAoKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNzgpICYmIGZyZXEgPCA0NzAwMDAwMDApCiAJCQlvZmZzZXQgLT0gNTAwMDAwOworCisJCS8qCisJCSAqIHhjMzAyOCBhZGRpdGlvbmFsICJtYWdpYyIKKwkJICogRGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLCBpdCBuZWVkcyBzb21lIGFkanVzdG1lbnRzCisJCSAqIHRvIHByb3Blcmx5IGNlbnRyYWxpemUgdGhlIGZyZXF1ZW5jeS4gVGhpcyBzZWVtcyB0byBiZQorCQkgKiBuZWVkZWQgdG8gY29tcGVuc2F0ZSB0aGUgU0NPREUgdGFibGUgYWRqdXN0bWVudHMgbWFkZSBieQorCQkgKiBuZXdlciBmaXJtd2FyZXMKKwkJICovCisKKyNpZiAxCisJCS8qCisJCSAqIFRoZSBwcm9wZXIgYWRqdXN0bWVudCB3b3VsZCBiZSB0byBkbyBpdCBhdCBzLWNvZGUgdGFibGUuCisJCSAqIEhvd2V2ZXIsIHRoaXMgZGlkbid0IHdvcmssIGFzIHJlcG9ydGVkIGJ5CisJCSAqIFJvYmVydCBMb3dlcnkgPHJnbG93ZXJ5QGV4ZW1haWwuY29tLmF1PgorCQkgKi8KKworCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJb2Zmc2V0ICs9IDUwMDAwMDsKKworI2Vsc2UKKwkJLyoKKwkJICogU3RpbGwgbmVlZCB0ZXN0cyBmb3IgWEMzMDI4TCAoZmlybXdhcmUgMy4yIG9yIHVwcGVyKQorCQkgKiBTbywgZm9yIG5vdywgbGV0J3MganVzdCBjb21tZW50IHRoZSBwZXItZmlybXdhcmUKKwkJICogdmVyc2lvbiBvZiB0aGlzIGNoYW5nZS4gUmVwb3J0cyB3aXRoIHhjMzAyOGwgd29ya2luZworCQkgKiB3aXRoIGFuZCB3aXRob3V0IHRoZSBsaW5lcyBiZWxsb3cgYXJlIHdlbGNvbWUKKwkJICovCisKKwkJaWYgKHByaXYtPmZpcm1fdmVyc2lvbiA8IDB4MDMwMikgeworCQkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKKwkJCQlvZmZzZXQgKz0gNTAwMDAwOworCQl9IGVsc2UgeworCQkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKKwkJCQlvZmZzZXQgLT0gMzAwMDAwOworCQkJZWxzZSBpZiAodHlwZSAhPSBBVFNDKSAvKiBEVkIgQDZNSHosIERUViA4IGFuZCBEVFYgNy84ICovCisJCQkJb2Zmc2V0ICs9IDIwMDAwMDsKKwkJfQorI2VuZGlmCiAJfQogCiAJZGl2ID0gKGZyZXEgLSBvZmZzZXQgKyBESVYgLyAyKSAvIERJVjsKQEAgLTEwOTcsMTcgKzExMzUsMjQgQEAKIAogCS8qIEFsbCBTLWNvZGUgdGFibGVzIG5lZWQgYSAyMDBrSHogc2hpZnQgKi8KIAlpZiAocHJpdi0+Y3RybC5kZW1vZCkgewotCQlkZW1vZCA9IHByaXYtPmN0cmwuZGVtb2QgKyAyMDA7CisJCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZDsKKworCQkvKgorCQkgKiBOZXdlciBmaXJtd2FyZXMgcmVxdWlyZSBhIDIwMCBrSHogb2Zmc2V0IG9ubHkgZm9yIEFUU0MKKwkJICovCisJCWlmICh0eXBlID09IEFUU0MgfHwgcHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMzAyKQorCQkJZGVtb2QgKz0gMjAwOwogCQkvKgogCQkgKiBUaGUgRFRWNyBTLWNvZGUgdGFibGUgbmVlZHMgYSA3MDAga0h6IHNoaWZ0LgotCQkgKiBUaGFua3MgdG8gVGVycnkgV3UgPHRlcnJ5d3UyMDA5QGdtYWlsLmNvbT4gZm9yIHJlcG9ydGluZyB0aGlzCiAJCSAqCiAJCSAqIERUVjcgaXMgb25seSB1c2VkIGluIEF1c3RyYWxpYS4gIEdlcm1hbnkgb3IgSXRhbHkgbWF5IGFsc28KIAkJICogdXNlIHRoaXMgZmlybXdhcmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGJ1dCBhIHR1bmUgdG8gYSBVSEYKIAkJICogY2hhbm5lbCBzaG91bGQgdGhlbiBjYXVzZSBEVFY3OCB0byBiZSB1c2VkLgorCQkgKgorCQkgKiBVbmZvcnR1bmF0ZWx5LCBvbiByZWFsLWZpZWxkIHRlc3RzLCB0aGUgcy1jb2RlIG9mZnNldAorCQkgKiBkaWRuJ3Qgd29yayBhcyBleHBlY3RlZCwgYXMgcmVwb3J0ZWQgYnkKKwkJICogUm9iZXJ0IExvd2VyeSA8cmdsb3dlcnlAZXhlbWFpbC5jb20uYXU+CiAJCSAqLwotCQlpZiAodHlwZSAmIERUVjcpCi0JCQlkZW1vZCArPSA1MDA7CiAJfQogCiAJcmV0dXJuIGdlbmVyaWNfc2V0X2ZyZXEoZmUsIHAtPmZyZXF1ZW5jeSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCmluZGV4IGNmOGY2NWYuLjE2MWNjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwpAQCAtNzYsNiArNzYsMTAgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKIAlzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9LY29uZmlnIgogCitjb21tZW50ICJTdXBwb3J0ZWQgbkdlbmUgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnIgorCiBjb21tZW50ICJTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQppbmRleCBjMTI5MjJjLi5hMWEwODc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIAkJc2lhbm8vCQlcCiAJCWRtMTEwNS8JCVwKIAkJcHQxLwkJXAotCQltYW50aXMvCisJCW1hbnRpcy8JCVwKKwkJbmdlbmUvCiAKIG9iai0kKENPTkZJR19EVkJfRklSRURUVikJKz0gZmlyZXdpcmUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYwppbmRleCBhMjRjMTI1Li45OWQ2MjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKQEAgLTU3Niw0MyArNTc2LDMwIEBACiAgICAgICAucmVtb3ZlCT0gX19kZXZleGl0X3AoYnQ4NzhfcmVtb3ZlKSwKIH07CiAKLXN0YXRpYyBpbnQgYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1vZHVsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgYnQ4NzhfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJ0ODc4X2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJYnQ4NzhfbnVtID0gMDsKLQlidDg3OF9wY2lfZHJpdmVyX3JlZ2lzdGVyZWQgPSAwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYnQ4Nzg6IEFVRElPIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKIAkgICAgICAgKEJUODc4X1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAogCSAgICAgICAoQlQ4NzhfVkVSU0lPTl9DT0RFID4+IDgpICYgMHhmZiwKIAkgICAgICAgQlQ4NzhfVkVSU0lPTl9DT0RFICYgMHhmZik7Ci0vKgotCWJ0ODc4X2NoZWNrX2NoaXBzZXQoKTsKLSovCi0JLyogbGF0ZXIgd2UgcmVnaXN0ZXIgaW5zaWRlIG9mIGJ0ODc4X2ZpbmRfYXVkaW9fZG1hKCkKLQkgKiBiZWNhdXNlIHdlIG1heSB3YW50IHRvIGlnbm9yZSBjZXJ0YWluIGNhcmRzICovCi0JYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkID0gMTsKKwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZidDg3OF9wY2lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgYnQ4NzhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBidDg3OF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWlmIChidDg3OF9wY2lfZHJpdmVyX3JlZ2lzdGVyZWQpIHsKLQkJYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkID0gMDsKLQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZidDg3OF9wY2lfZHJpdmVyKTsKLQl9Ci0JcmV0dXJuOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJ0ODc4X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGJ0ODc4X2NsZWFudXBfbW9kdWxlKTsKIAotLy9NT0RVTEVfQVVUSE9SKCJYWFgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKaW5kZXggOTEzNTNhNi4uOGIwY2RlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKQEAgLTEzNTIsOCArMTM1Miw3IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCWlmICgoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfVkxGKSAmJgotCQkhKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19DQUJMRSkgJiYKLQkJIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQVRTQykpIHsKKwkgICAhKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19BVFNDKSkgewogCiAJCWlmIChzdGF0ZS0+cnhfdHVuYVs5XSAhPSBkc3RfY2hlY2tfc3VtKCZzdGF0ZS0+cnhfdHVuYVswXSwgOSkpIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJjaGVja3N1bSBmYWlsdXJlID8gIik7CkBAIC0xODIwLDggKzE4MTksMTMgQEAKIAkJLmZyZXF1ZW5jeV9tYXggPSA4NTgwMDAwMDAsCiAJCS5zeW1ib2xfcmF0ZV9taW4gPSAxMDAwMDAwLAogCQkuc3ltYm9sX3JhdGVfbWF4ID0gNDUwMDAwMDAsCi0JLyogICAgIC4gc3ltYm9sX3JhdGVfdG9sZXJhbmNlCT0JPz8/LCovCi0JCS5jYXBzID0gRkVfQ0FOX0ZFQ19BVVRPIHwgRkVfQ0FOX1FBTV9BVVRPCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RQU1fQVVUTyB8CisJCQlGRV9DQU5fUUFNXzE2CXwKKwkJCUZFX0NBTl9RQU1fMzIJfAorCQkJRkVfQ0FOX1FBTV82NAl8CisJCQlGRV9DQU5fUUFNXzEyOAl8CisJCQlGRV9DQU5fUUFNXzI1NgogCX0sCiAKIAkucmVsZWFzZSA9IGRzdF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwppbmRleCBkZTNlZWIwYS4uNjk1MjM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKQEAgLTgsNiArOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWDI0MTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TSTIxWFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjBmNDgzYS4uMzgzY2NhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInNpMjF4eC5oIgogI2luY2x1ZGUgImN4MjQxMTYuaCIKICNpbmNsdWRlICJ6MDE5NGEuaCIKKyNpbmNsdWRlICJkczMwMDAuaCIKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0yNjksNyArMjcwLDcgQEAKIAl1MzIJCQlpcl9jb21tYW5kOwogfTsKIAotc3RydWN0IGRtMTEwNWR2YiB7CitzdHJ1Y3QgZG0xMTA1X2RldiB7CiAJLyogcGNpICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTggX19pb21lbSAqaW9fbWVtOwpAQCAtMzA4LDMxICszMDksNDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi0jZGVmaW5lIGRtX2lvX21lbShyZWcpCSgodW5zaWduZWQgbG9uZykoJmRtMTEwNWR2Yi0+aW9fbWVtW3JlZ10pKQorI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkZXYtPmlvX21lbVtyZWddKSkKKworI2RlZmluZSBkbV9yZWFkYihyZWcpCQlpbmIoZG1faW9fbWVtKHJlZykpCisjZGVmaW5lIGRtX3dyaXRlYihyZWcsIHZhbHVlKQlvdXRiKCh2YWx1ZSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fcmVhZHcocmVnKQkJaW53KGRtX2lvX21lbShyZWcpKQorI2RlZmluZSBkbV93cml0ZXcocmVnLCB2YWx1ZSkJb3V0dygodmFsdWUpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3JlYWRsKHJlZykJCWlubChkbV9pb19tZW0ocmVnKSkKKyNkZWZpbmUgZG1fd3JpdGVsKHJlZywgdmFsdWUpCW91dGwoKHZhbHVlKSwgKGRtX2lvX21lbShyZWcpKSkKKworI2RlZmluZSBkbV9hbmRvcmwocmVnLCBtYXNrLCB2YWx1ZSkgXAorCW91dGwoKGlubChkbV9pb19tZW0ocmVnKSkgJiB+KG1hc2spKSB8XAorCQkoKHZhbHVlKSAmIChtYXNrKSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fc2V0bChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGRtX2NsZWFybChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgMCkKIAogc3RhdGljIGludCBkbTExMDVfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgOwogCiAJaW50IGFkZHIsIHJjLCBpLCBqLCBrLCBsZW4sIGJ5dGUsIGRhdGE7CiAJdTggc3RhdHVzOwogCi0JZG0xMTA1ZHZiID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlkZXYgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlvdXRiKDB4MDAsIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDAwKTsKIAkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewogCQkJLyogcmVhZCBieXRlcyAqLwogCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKIAkJCWFkZHIgfD0gMTsKLQkJCW91dGIoYWRkciwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDREFULCBhZGRyKTsKIAkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKQotCQkJCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEsIDApOwogCi0JCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDgxICsgbXNnc1tpXS5sZW4pOwogCQkJZm9yIChqID0gMDsgaiA8IDU1OyBqKyspIHsKIAkJCQltZGVsYXkoMTApOwotCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC0zNDAsNTYgKzM1Nyw1NCBAQAogCQkJCXJldHVybiAtMTsKIAogCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKLQkJCQlyYyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCQkJcmMgPSBkbV9yZWFkYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEpOwogCQkJCWlmIChyYyA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCW1zZ3NbaV0uYnVmW2J5dGVdID0gcmM7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKLQkJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KLQkJCQkvKiBXcml0ZSBpbiBzbWFsbCBibG9ja3MgKi8KLQkJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7Ci0JCQkJayA9IDE7Ci0JCQkJZG8gewotCQkJCQlvdXRiKG1zZ3NbaV0uYWRkciA8PCAxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCQlvdXRiKDB4ZjcsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgMSkpOwotCQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgKGxlbiA+IDQ4ID8gNDggOiBsZW4pOyBieXRlKyspIHsKLQkJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrK2J5dGVdOwotCQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyKSk7Ci0JCQkJCX0KLQkJCQkJb3V0YigweDgyICsgKGxlbiA+IDQ4ID8gNDggOiBsZW4pLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOwotCQkJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgewotCQkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOwotCQkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJaWYgKGogPj0gMjUpCi0JCQkJCQlyZXR1cm4gLTE7Ci0KLQkJCQkJayArPSA0ODsKLQkJCQkJbGVuIC09IDQ4OwotCQkJCX0gd2hpbGUgKGxlbiA+IDApOwotCQkJfSBlbHNlIHsKLQkJCQkvKiB3cml0ZSBieXRlcyAqLwotCQkJCW91dGIobXNnc1tpXS5hZGRyPDwxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7Ci0JCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltieXRlXTsKLQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCX0gZWxzZSBpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKKwkJCS8qIHByZXBhaXJlZCBmb3IgY3gyNDExNiBmaXJtd2FyZSAqLworCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCisJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7CisJCQlrID0gMTsKKwkJCWRvIHsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgMSwgMHhmNyk7CisJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7CisJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrICsgYnl0ZV07CisJCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDIsIGRhdGEpOwogCQkJCX0KLQkJCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSk7CiAJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKIAkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJc3RhdHVzID0gaW5iKGRtX2lvX21lbShETTExMDVfSTJDU1RTKSk7CisJCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlpZiAoaiA+PSAyNSkKIAkJCQkJcmV0dXJuIC0xOworCisJCQkJayArPSA0ODsKKwkJCQlsZW4gLT0gNDg7CisJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIGJ5dGVzICovCisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKKwkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSwgZGF0YSk7CiAJCQl9CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MSArIG1zZ3NbaV0ubGVuKTsKKwkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CisJCQkJbWRlbGF5KDEwKTsKKwkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKKwkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaiA+PSAyNSkKKwkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAJcmV0dXJuIG51bTsKQEAgLTQwNywyMiArNDIyLDIyIEBACiAJLmZ1bmN0aW9uYWxpdHkgPSBmdW5jdGlvbmFsaXR5LAogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmZWVkX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVfZGV2ICpmZWVkX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQogewotCXJldHVybiBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBkbTExMDVkdmIsIGRlbXV4KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgZG0xMTA1X2RldiwgZGVtdXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVkdmIgKmZyb250ZW5kX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNV9kZXYgKmZyb250ZW5kX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkdmJfYWRhcHRlcik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1X2RldiwgZHZiX2FkYXB0ZXIpOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBkbTExMDVfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmcm9udGVuZF90b19kbTExMDVkdmIoZmUpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmcm9udGVuZF90b19kbTExMDVfZGV2KGZlKTsKIAl1MzIgbG5iX21hc2ssIGxuYl8xM3YsIGxuYl8xOHYsIGxuYl9vZmY7CiAKLQlzd2l0Y2ggKGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBETTExMDVfQk9BUkRfQVhFU1NfRE0wNToKIAkJbG5iX21hc2sgPSBETTA1X0xOQl9NQVNLOwogCQlsbmJfb2ZmID0gRE0wNV9MTkJfT0ZGOwpAQCAtNDM4LDYyICs0NTMsNjcgQEAKIAkJbG5iXzE4diA9IERNMTEwNV9MTkJfMThWOwogCX0KIAotCW91dGwobG5iX21hc2ssIGRtX2lvX21lbShETTExMDVfR1BJT0NUUikpOworCWRtX3dyaXRlbChETTExMDVfR1BJT0NUUiwgbG5iX21hc2spOwogCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4KQotCQlvdXRsKGxuYl8xOHYgLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfMTh2KTsKIAllbHNlIGlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzEzKQotCQlvdXRsKGxuYl8xM3YsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOworCQlkbV93cml0ZWwoRE0xMTA1X0dQSU9WQUwsIGxuYl8xM3YpOwogCWVsc2UKLQkJb3V0bChsbmJfb2ZmLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfb2ZmKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfc2V0X2RtYV9hZGRyKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9zZXRfZG1hX2FkZHIoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRsKGNwdV90b19sZTMyKGRtMTEwNWR2Yi0+ZG1hX2FkZHIpLCBkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7CisJZG1fd3JpdGVsKERNMTEwNV9TVEFEUiwgY3B1X3RvX2xlMzIoZGV2LT5kbWFfYWRkcikpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfZG1hX21hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfZG1hX21hcChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yi0+dHNfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsICZkbTExMDVkdmItPmRtYV9hZGRyKTsKKwlkZXYtPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGRldiwKKwkJCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQkJCSZkZXYtPmRtYV9hZGRyKTsKIAotCXJldHVybiAhZG0xMTA1ZHZiLT50c19idWY7CisJcmV0dXJuICFkZXYtPnRzX2J1ZjsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfZG1hX3VubWFwKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChkbTExMDVkdmItPnBkZXYsIDYqRE0xMTA1X0RNQV9CWVRFUywgZG0xMTA1ZHZiLT50c19idWYsIGRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LAorCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQlkZXYtPnRzX2J1ZiwKKwkJCWRldi0+ZG1hX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZW5hYmxlX2lycXMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHZvaWQgZG0xMTA1X2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0YihJTlRNQUtfQUxMTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKLQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfQ1IpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX0FMTE1BU0spOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9kaXNhYmxlX2lycXMoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRiKElOVE1BS19JUk0sIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7Ci0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19JUk0pOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDApOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKK3N0YXRpYyBpbnQgZG0xMTA1X3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzKysgPT0gMCkKLQkJZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisJaWYgKGRldi0+ZnVsbF90c191c2VycysrID09IDApCisJCWRtMTEwNV9lbmFibGVfaXJxcyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG0xMTA1ZHZiX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCitzdGF0aWMgaW50IGRtMTEwNV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoLS1kbTExMDVkdmItPmZ1bGxfdHNfdXNlcnMgPT0gMCkKLQkJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWlmICgtLWRldi0+ZnVsbF90c191c2VycyA9PSAwKQorCQlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNyw2OCArNTM3LDY0IEBACiAvKiB3b3JrIGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGRtMTEwNV9kbXhfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPQotCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1ZHZiLCB3b3JrKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbTExMDVfZGV2LCB3b3JrKTsKIAl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOwotCXUzMiBvbGR3cnAgPSBkbTExMDVkdmItPndycDsKLQl1MzIgbmV4dHdycCA9IGRtMTEwNWR2Yi0+bmV4dHdycDsKKwl1MzIgb2xkd3JwID0gZGV2LT53cnA7CisJdTMyIG5leHR3cnAgPSBkZXYtPm5leHR3cnA7CiAKLQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgotCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OF0gPT0gMHg0NykgJiYKLQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKLQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7CisJaWYgKCEoKGRldi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCShkZXYtPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkoZGV2LT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7CisJCWRldi0+UGFja2V0RXJyb3JDb3VudCsrOwogCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCi0JCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCi0JCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7Ci0JCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7Ci0JCQlkbTExMDVkdmItPndycCA9IDA7Ci0JCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOwotCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQlpZiAoKGRldi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgorCQkJCShkZXYtPmRtYXJzdCA9PSAwKSkgeworCQkJZG1fd3JpdGViKERNMTEwNV9SU1QsIDEpOworCQkJZGV2LT53cnAgPSAwOworCQkJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwkJCWRldi0+ZG1hcnN0ID0gMDsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCWlmIChuZXh0d3JwIDwgb2xkd3JwKSB7Ci0JCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsCi0JCQkJCQlkbTExMDVkdmItPnRzX2J1ZiwgbmV4dHdycCk7Ci0JCW5icGFja2V0cyA9ICgoZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycCkgKyBuZXh0d3JwKSAvIDE4ODsKKwkJbWVtY3B5KGRldi0+dHNfYnVmICsgZGV2LT5idWZmZXJfc2l6ZSwgZGV2LT50c19idWYsIG5leHR3cnApOworCQluYnBhY2tldHMgPSAoKGRldi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CiAJfSBlbHNlCiAJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKSAvIDE4ODsKIAotCWRtMTEwNWR2Yi0+d3JwID0gbmV4dHdycDsKLQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsCi0JCQkJCSZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOworCWRldi0+d3JwID0gbmV4dHdycDsKKwlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRldi0+ZGVtdXgsICZkZXYtPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1ZHZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZGV2X2lkOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBkZXZfaWQ7CiAKIAkvKiBSZWFkLVdyaXRlIElOU1RTIEFjaydzIEludGVycnVwdCBmb3IgRE0xMTA1IGNoaXAgMTYuMDMuMjAwOCAqLwotCXVuc2lnbmVkIGludCBpbnRzdHMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKLQlvdXRiKGludHN0cywgZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKKwl1bnNpZ25lZCBpbnQgaW50c3RzID0gZG1fcmVhZGIoRE0xMTA1X0lOVFNUUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRTVFMsIGludHN0cyk7CiAKIAlzd2l0Y2ggKGludHN0cykgewogCWNhc2UgSU5UU1RTX1RTSVJROgogCWNhc2UgKElOVFNUU19UU0lSUSB8IElOVFNUU19JUik6Ci0JCWRtMTEwNWR2Yi0+bmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KLQkJCQkJaW5sKGRtX2lvX21lbShETTExMDVfU1RBRFIpKTsKLQkJcXVldWVfd29yayhkbTExMDVkdmItPndxLCAmZG0xMTA1ZHZiLT53b3JrKTsKKwkJZGV2LT5uZXh0d3JwID0gZG1fcmVhZGwoRE0xMTA1X1dSUCkgLSBkbV9yZWFkbChETTExMDVfU1RBRFIpOworCQlxdWV1ZV93b3JrKGRldi0+d3EsICZkZXYtPndvcmspOwogCQlicmVhazsKIAljYXNlIElOVFNUU19JUjoKLQkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7Ci0JCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+aXIud29yayk7CisJCWRldi0+aXIuaXJfY29tbWFuZCA9IGRtX3JlYWRsKERNMTEwNV9JUkNPREUpOworCQlzY2hlZHVsZV93b3JrKCZkZXYtPmlyLndvcmspOwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQoraW50IF9fZGV2aW5pdCBkbTExMDVfaXJfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gJmlyX2NvZGVzX2RtMTEwNV9uZWNfdGFibGU7Ci0JaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtNjExLDUxICs2MjcsNTEgQEAKIAogCUlOSVRfV09SSygmZG0xMTA1LT5pci53b3JrLCBkbTExMDVfZW1pdF9rZXkpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCit2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCWlyX2lucHV0X3VucmVnaXN0ZXIoZG0xMTA1LT5pci5pbnB1dF9kZXYpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSE9TVF9DVFIpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0hPU1RfQ1RSLCAwKTsKIAogCS8qREFUQUxFTiAxODgsKi8KLQlvdXRiKDE4OCwgZG1faW9fbWVtKERNMTEwNV9EVEFMRU5USCkpOworCWRtX3dyaXRlYihETTExMDVfRFRBTEVOVEgsIDE4OCk7CiAJLypUU19TVFJUIFRTX1ZBTFAgTVNCRklSU1QgVFNfTU9ERSBBTFBBUyBUU1BFUyovCi0Jb3V0dygweGMxMGEsIGRtX2lvX21lbShETTExMDVfVFNDVFIpKTsKKwlkbV93cml0ZXcoRE0xMTA1X1RTQ1RSLCAweGMxMGEpOwogCiAJLyogbWFwIERNQSBhbmQgc2V0IGFkZHJlc3MgKi8KLQlkbTExMDVkdmJfZG1hX21hcChkbTExMDVkdmIpOwotCWRtMTEwNWR2Yl9zZXRfZG1hX2FkZHIoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX21hcChkZXYpOworCWRtMTEwNV9zZXRfZG1hX2FkZHIoZGV2KTsKIAkvKiBiaWcgYnVmZmVyICovCi0Jb3V0bCg1KkRNMTEwNV9ETUFfQllURVMsIGRtX2lvX21lbShETTExMDVfUkxFTikpOwotCW91dGIoNDcsIGRtX2lvX21lbShETTExMDVfSU5UQ05UKSk7CisJZG1fd3JpdGVsKERNMTEwNV9STEVOLCA1ICogRE0xMTA1X0RNQV9CWVRFUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRDTlQsIDQ3KTsKIAogCS8qIElSIE5FQyBtb2RlIGVuYWJsZSAqLwotCW91dGIoKERNMTEwNV9JUl9FTiB8IERNMTEwNV9TWVNfQ0hLKSwgZG1faW9fbWVtKERNMTEwNV9JUkNUUikpOwotCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JUk1PREUpKTsKLQlvdXR3KDAsIGRtX2lvX21lbShETTExMDVfU1lTVEVNQ09ERSkpOworCWRtX3dyaXRlYihETTExMDVfSVJDVFIsIChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISykpOworCWRtX3dyaXRlYihETTExMDVfSVJNT0RFLCAwKTsKKwlkbV93cml0ZXcoRE0xMTA1X1NZU1RFTUNPREUsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRtMTEwNWR2Yl9od19leGl0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9od19leGl0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWRtMTEwNV9kaXNhYmxlX2lycXMoZGV2KTsKIAogCS8qIElSIGRpc2FibGUgKi8KLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKLQlvdXRiKElOVE1BS19OT05FTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSQ1RSLCAwKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX05PTkVNQVNLKTsKIAotCWRtMTEwNWR2Yl9kbWFfdW5tYXAoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX3VubWFwKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKQEAgLTY4NSw3MCArNzAxLDc5IEBACiAJLmRlbW9kX2FkZHJlc3MgPSAweDU1LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgc3RydWN0IGRzMzAwMF9jb25maWcgZHZid29ybGRfZHMzMDAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmcm9udGVuZF9pbml0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7CiAJaW50IHJldDsKIAotCXN3aXRjaCAoZG0xMTA1ZHZiLT5ib2FyZG5yKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDA0OgotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQljeDI0MTE2X2F0dGFjaCwgJnNlcml0X3NwMjYzM19jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKQotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJYnJlYWs7CisJCX0KKworCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKKwkJCWRzMzAwMF9hdHRhY2gsICZkdmJ3b3JsZF9kczMwMDBfY29uZmlnLAorCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKIAogCQlicmVhazsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyOgogCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJZGVmYXVsdDoKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI5OV9hdHRhY2gsICZzaGFycF96MDE5NGFfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkgewotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KLQkJCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7Ci0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkbTExMDVkdmItPmZlLCAweDYwLAotCQkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgRFZCX1BMTF9PUEVSQTEpOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5mZSwgMHg2MCwKKwkJCQkJJmRldi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKSB7Ci0JCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQotCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOwotCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MSwKLQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZGV2LT5mZSwgMHg2MSwKKwkJCQkJJmRldi0+aTJjX2FkYXApOwogCQkJYnJlYWs7CiAJCX0KIAotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQlzaTIxeHhfYXR0YWNoLCAmc2VyaXRfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9Ci0JCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7CisJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmZlKQorCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOwogCiAJfQogCi0JaWYgKCFkbTExMDVkdmItPmZlKSB7Ci0JCWRldl9lcnIoJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CisJaWYgKCFkZXYtPmZlKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgZG0xMTA1ZHZiLT5mZSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkZXYtPmR2Yl9hZGFwdGVyLCBkZXYtPmZlKTsKIAlpZiAocmV0IDwgMCkgewotCQlpZiAoZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQlkbTExMDVkdmItPmZlLT5vcHMucmVsZWFzZShkbTExMDVkdmItPmZlKTsKLQkJZG0xMTA1ZHZiLT5mZSA9IE5VTEw7CisJCWlmIChkZXYtPmZlLT5vcHMucmVsZWFzZSkKKwkJCWRldi0+ZmUtPm9wcy5yZWxlYXNlKGRldi0+ZmUpOworCQlkZXYtPmZlID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGRtMTEwNWR2Yl9yZWFkX21hYyhzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZG0xMTA1X3JlYWRfbWFjKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYsIHU4ICptYWMpCiB7CiAJc3RhdGljIHU4IGNvbW1hbmRbMV0gPSB7IDB4MjggfTsKIApAQCAtNzY2LDQ3ICs3OTEsNDcgQEAKIAkJfSwKIAl9OwogCi0JZG0xMTA1X2kyY194ZmVyKCZkbTExMDVkdmItPmkyY19hZGFwLCBtc2cgLCAyKTsKLQlkZXZfaW5mbygmZG0xMTA1ZHZiLT5wZGV2LT5kZXYsICJNQUMgJXBNXG4iLCBtYWMpOworCWRtMTEwNV9pMmNfeGZlcigmZGV2LT5pMmNfYWRhcCwgbXNnICwgMik7CisJZGV2X2luZm8oJmRldi0+cGRldi0+ZGV2LCAiTUFDICVwTVxuIiwgbWFjKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmI7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldjsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyOwogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAotCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRtMTEwNWR2YikKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1X2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGJvYXJkIGNvbmZpZyAqLwotCWRtMTEwNWR2Yi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7Ci0JZG0xMTA1ZHZiLT5ib2FyZG5yID0gVU5TRVQ7Ci0JaWYgKGNhcmRbZG0xMTA1ZHZiLT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQotCQlkbTExMDVkdmItPmJvYXJkbnIgPSBjYXJkW2RtMTEwNWR2Yi0+bnJdOwotCWZvciAoaSA9IDA7IFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRuciAmJgorCWRldi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7CisJZGV2LT5ib2FyZG5yID0gVU5TRVQ7CisJaWYgKGNhcmRbZGV2LT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQorCQlkZXYtPmJvYXJkbnIgPSBjYXJkW2Rldi0+bnJdOworCWZvciAoaSA9IDA7IFVOU0VUID09IGRldi0+Ym9hcmRuciAmJgogCQkJCWkgPCBBUlJBWV9TSVpFKGRtMTEwNV9zdWJpZHMpOyBpKyspCiAJCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09CiAJCQlkbTExMDVfc3ViaWRzW2ldLnN1YnZlbmRvciAmJgogCQkJCXBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0KIAkJCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJkZXZpY2UpCi0JCQlkbTExMDVkdmItPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CisJCQlkZXYtPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CiAKLQlpZiAoVU5TRVQgPT0gZG0xMTA1ZHZiLT5ib2FyZG5yKSB7Ci0JCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IERNMTEwNV9CT0FSRF9VTktOT1dOOworCWlmIChVTlNFVCA9PSBkZXYtPmJvYXJkbnIpIHsKKwkJZGV2LT5ib2FyZG5yID0gRE0xMTA1X0JPQVJEX1VOS05PV047CiAJCWRtMTEwNV9jYXJkX2xpc3QocGRldik7CiAJfQogCiAJZG0xMTA1X2RldmNvdW50Kys7Ci0JZG0xMTA1ZHZiLT5wZGV2ID0gcGRldjsKLQlkbTExMDVkdmItPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7Ci0JZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQlkbTExMDVkdmItPmRtYXJzdCA9IDA7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7CisJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwlkZXYtPmRtYXJzdCA9IDA7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTgyMiw0NyArODQ3LDQ3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldmljZTsKIAotCWRtMTEwNWR2Yi0+aW9fbWVtID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCWlmICghZG0xMTA1ZHZiLT5pb19tZW0pIHsKKwlkZXYtPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWRldi0+aW9fbWVtKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRtMTEwNWR2Yi0+bG9jayk7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRtMTEwNWR2Yik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlyZXQgPSBkbTExMDVkdmJfaHdfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGRtMTEwNV9od19pbml0KGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCiAJLyogaTJjICovCi0JaTJjX3NldF9hZGFwZGF0YSgmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgZG0xMTA1ZHZiKTsKLQlzdHJjcHkoZG0xMTA1ZHZiLT5pMmNfYWRhcC5uYW1lLCBEUklWRVJfTkFNRSk7Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5vd25lciA9IFRISVNfTU9EVUxFOwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKLQlkbTExMDVkdmItPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuYWxnbyA9ICZkbTExMDVfYWxnbzsKLQlkbTExMDVkdmItPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRtMTEwNWR2YjsKLQlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsIGRldik7CisJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOworCWRldi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlkZXYtPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CisJZGV2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287CisJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9kbTExMDVkdmJfaHdfZXhpdDsKKwkJZ290byBlcnJfZG0xMTA1X2h3X2V4aXQ7CiAKIAkvKiBkdmIgKi8KLQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgRFJJVkVSX05BTUUsCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmRldi0+ZHZiX2FkYXB0ZXIsIERSSVZFUl9OQU1FLAogCQkJCQlUSElTX01PRFVMRSwgJnBkZXYtPmRldiwgYWRhcHRlcl9ucik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKIAotCWR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7CisJZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKIAotCWRtMTEwNWR2Yl9yZWFkX21hYyhkbTExMDVkdmIsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOworCWRtMTEwNV9yZWFkX21hYyhkZXYsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOwogCi0JZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CiAJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7Ci0JZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVkdmJfc3RhcnRfZmVlZDsKLQlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1ZHZiX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IGRtMTEwNV9zdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBkbTExMDVfc3RvcF9mZWVkOwogCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAogCQkJRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOwogCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7CkBAIC04NzAsMTEzICs4OTUsMTEzIEBACiAJCWdvdG8gZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI7CiAKIAlkbXggPSAmZHZiZGVtdXgtPmRteDsKLQlkbTExMDVkdmItPmRteGRldi5maWx0ZXJudW0gPSAyNTY7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuZGVtdXggPSBkbXg7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKwlkZXYtPmRteGRldi5maWx0ZXJudW0gPSAyNTY7CisJZGV2LT5kbXhkZXYuZGVtdXggPSBkbXg7CisJZGV2LT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKIAotCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmZG0xMTA1ZHZiLT5kbXhkZXYsIGR2Yl9hZGFwdGVyKTsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRldi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2R2Yl9kbXhfcmVsZWFzZTsKIAotCWRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZGV2LT5od19mcm9udGVuZC5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKIAotCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kdmJfZG14ZGV2X3JlbGVhc2U7CiAKLQlkbTExMDVkdmItPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCWRldi0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CiAKLQlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CisJcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZGV2LT5tZW1fZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ7CiAKLQlyZXQgPSBkbXgtPmNvbm5lY3RfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOwogCi0JcmV0ID0gZnJvbnRlbmRfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGZyb250ZW5kX2luaXQoZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDsKIAotCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRtMTEwNWR2Yi0+ZHZibmV0LCBkbXgpOwotCWRtMTEwNV9pcl9pbml0KGRtMTEwNWR2Yik7CisJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZGV2LT5kdmJuZXQsIGRteCk7CisJZG0xMTA1X2lyX2luaXQoZGV2KTsKIAotCUlOSVRfV09SSygmZG0xMTA1ZHZiLT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7Ci0Jc3ByaW50ZihkbTExMDVkdmItPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOwotCWRtMTEwNWR2Yi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkbTExMDVkdmItPndxbik7Ci0JaWYgKCFkbTExMDVkdmItPndxKQorCUlOSVRfV09SSygmZGV2LT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7CisJc3ByaW50ZihkZXYtPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOworCWRldi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPndxbik7CisJaWYgKCFkZXYtPndxKQogCQlnb3RvIGVycl9kdmJfbmV0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCQkJCURSSVZFUl9OQU1FLCBkbTExMDVkdmIpOworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1X2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCQlEUklWRVJfTkFNRSwgZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfd29ya3F1ZXVlOwogCiAJcmV0dXJuIDA7CiAKIGVycl93b3JrcXVldWU6Ci0JZGVzdHJveV93b3JrcXVldWUoZG0xMTA1ZHZiLT53cSk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53cSk7CiBlcnJfZHZiX25ldDoKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKKwlkdmJfbmV0X3JlbGVhc2UoJmRldi0+ZHZibmV0KTsKIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOgogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwogZXJyX3JlbW92ZV9tZW1fZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZGV2LT5od19mcm9udGVuZCk7CiBlcnJfZHZiX2RteGRldl9yZWxlYXNlOgotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZGV2LT5kbXhkZXYpOwogZXJyX2R2Yl9kbXhfcmVsZWFzZToKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI6CiAJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CiBlcnJfaTJjX2RlbF9hZGFwdGVyOgotCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci1lcnJfZG0xMTA1ZHZiX2h3X2V4aXQ6Ci0JZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworZXJyX2RtMTEwNV9od19leGl0OgorCWRtMTEwNV9od19leGl0KGRldik7CiBlcnJfcGNpX2lvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgZG0xMTA1ZHZiLT5pb19tZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+aW9fbWVtKTsKIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycl9rZnJlZToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0Ja2ZyZWUoZG0xMTA1ZHZiKTsKKwlrZnJlZShkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteCA9ICZkdmJkZW11eC0+ZG14OwogCi0JZG0xMTA1X2lyX2V4aXQoZG0xMTA1ZHZiKTsKKwlkbTExMDVfaXJfZXhpdChkZXYpOwogCWRteC0+Y2xvc2UoZG14KTsKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKLQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZG0xMTA1ZHZiLT5mZSk7CisJZHZiX25ldF9yZWxlYXNlKCZkZXYtPmR2Ym5ldCk7CisJaWYgKGRldi0+ZmUpCisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRldi0+ZmUpOwogCiAJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRldi0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwotCWlmICgmZG0xMTA1ZHZiLT5pMmNfYWRhcCkKLQkJaTJjX2RlbF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKwlpZiAoJmRldi0+aTJjX2FkYXApCisJCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKLQlkbTExMDVkdmJfaHdfZXhpdChkbTExMDVkdmIpOworCWRtMTEwNV9od19leGl0KGRldik7CiAJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkbTExMDVkdmIpOwotCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJcGNpX2lvdW5tYXAocGRldiwgZGV2LT5pb19tZW0pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlkbTExMDVfZGV2Y291bnQtLTsKLQlrZnJlZShkbTExMDVkdmIpOworCWtmcmVlKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkbTExMDVfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAwNzQ2MTIyLi41NWVhMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTE5OSw4ICsxMTk5LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwotCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KIAlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCiAJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKQEAgLTEzMjMsNiArMTMyMSw4IEBACiAJCXIgPSAtMTsKIAl9CiAKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKLQlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgX0lPQ19OUihjbWQpKTsKIAogCWlmIChmZXByaXYtPmV4aXQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTUzNiw4ICsxNTM2LDcgQEAKIAkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCi0JCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQl0dnAgPSBrbWFsbG9jKHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHZwKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDggKzE1NjgsNyBAQAogCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKLQkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCXR2cCA9IGttYWxsb2ModHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0dnApIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4Yjg1NThmLi40NDFjMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC01MDQsNiArNTA0LDcgQEAKIAkJCQkgICAgICAgImJ5dGVzIGxlZnQgaW4gVFMuICBSZXN5bmNpbmcuXG4iLCB0c19yZW1haW4pOwogCQkJCXByaXYtPnVsZV9zbmR1X2xlbiA9IDA7CiAJCQkJcHJpdi0+bmVlZF9wdXNpID0gMTsKKwkJCQl0cyArPSBUU19TWjsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtOTQ5LDExICs5NTAsOCBAQAogCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMTBdID0gbWFjX21hc2tbMV07CiAJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbWFza1sxMV09bWFjX21hc2tbMF07CiAKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hYz0lMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hc2s9JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbWFjX21hc2tbMF0sIG1hY19tYXNrWzFdLCBtYWNfbWFza1syXSwKLQkgICAgICAgbWFjX21hc2tbM10sIG1hY19tYXNrWzRdLCBtYWNfbWFza1s1XSk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYWM9JXBNXG4iLCBkZXYtPm5hbWUsIG1hYyk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYXNrPSVwTVxuIiwgZGV2LT5uYW1lLCBtYWNfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDEsMTggKzExMzksMTggQEAKIAl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQlkcHJpbnRrKCIlczogYWxsbXVsdGkgbW9kZVxuIiwgZGV2LT5uYW1lKTsKIAkJcHJpdi0+cnhfbW9kZSA9IFJYX01PREVfQUxMX01VTFRJOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCWludCBtY2k7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAKIAkJZHByaW50aygiJXM6IHNldF9tY19saXN0LCAlZCBlbnRyaWVzXG4iLAotCQkJZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKKwkJCWRldi0+bmFtZSwgbmV0ZGV2X21jX2NvdW50KGRldikpOwogCiAJCXByaXYtPnJ4X21vZGUgPSBSWF9NT0RFX01VTFRJOwogCQlwcml2LT5tdWx0aV9udW0gPSAwOwogCiAJCWZvciAobWNpID0gMCwgbWM9ZGV2LT5tY19saXN0OwotCQkgICAgIG1jaSA8IGRldi0+bWNfY291bnQ7CisJCSAgICAgbWNpIDwgbmV0ZGV2X21jX2NvdW50KGRldik7CiAJCSAgICAgbWMgPSBtYy0+bmV4dCwgbWNpKyspIHsKIAkJCWR2Yl9zZXRfbWNfZmlsdGVyKGRldiwgbWMpOwogCQl9CkBAIC0xMjM5LDcgKzEyMzcsNiBAQAogCWRldi0+aGVhZGVyX29wcwkJPSAmZHZiX2hlYWRlcl9vcHM7CiAJZGV2LT5uZXRkZXZfb3BzCQk9ICZkdmJfbmV0ZGV2X29wczsKIAlkZXYtPm10dQkJPSA0MDk2OwotCWRldi0+bWNfY291bnQgICAgICAgICAgID0gMDsKIAogCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKaW5kZXggNTg0YmJkMS4uYTU3MTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCkBAIC04OSw2ICs4OSw3IEBACiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CiAJcmJ1Zi0+ZXJyb3IgPSAwOwogfQorRVhQT1JUX1NZTUJPTChkdmJfcmluZ2J1ZmZlcl9mbHVzaCk7CiAKIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVzZXQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDQ2NTI5NWIuLmU1ZjkxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTMzNiwzICszMzYsMTEgQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRTNDIEVDMTY4IERWQi1UIFVTQjIuMCByZWNlaXZlci4KKworY29uZmlnIERWQl9VU0JfQVo2MDI3CisJdHJpc3RhdGUgIkF6dXJld2F2ZSBEVkItUy9TMiBVU0IyLjAgQVo2MDI3IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9TVEIwODk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBWjYwMjcgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCA3MmM5MmNiLi4xYTE5MjQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC04NSw2ICs4NSw5IEBACiBkdmItdXNiLWVjMTY4LW9ianMgPSBlYzE2OC5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9FQzE2OCkgKz0gZHZiLXVzYi1lYzE2OC5vCiAKK2R2Yi11c2ItYXo2MDI3LW9ianMgPSBhejYwMjcubworb2JqLSQoQ09ORklHX0RWQl9VU0JfQVo2MDI3KSArPSBkdmItdXNiLWF6NjAyNy5vCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA4YjYwYTYwLi5kNzk3NTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC0yMSw2ICsyMSw4IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKICNpbmNsdWRlICJhZjkwMTUuaCIKICNpbmNsdWRlICJhZjkwMTMuaCIKICNpbmNsdWRlICJtdDIwNjAuaCIKQEAgLTU1MywyNiArNTU1LDQ1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogZHVtcCBlZXByb20gKi8KLXN0YXRpYyBpbnQgYWY5MDE1X2VlcHJvbV9kdW1wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKKy8qIGhhc2ggKGFuZCBkdW1wKSBlZXByb20gKi8KK3N0YXRpYyBpbnQgYWY5MDE1X2VlcHJvbV9oYXNoKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotCXU4IHJlZywgdmFsOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZWVwcm9tX3NpemUgPSAyNTY7CisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgcmV0OworCXU4IHZhbCwgKmVlcHJvbTsKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge1JFQURfSTJDLCBBRjkwMTVfSTJDX0VFUFJPTSwgMCwgMCwgMSwgMSwgJnZhbH07CiAKLQlmb3IgKHJlZyA9IDA7IDsgcmVnKyspIHsKLQkJaWYgKHJlZyAlIDE2ID09IDApIHsKLQkJCWlmIChyZWcpCi0JCQkJZGViX2luZm8oS0VSTl9DT05UICJcbiIpOwotCQkJZGViX2luZm8oS0VSTl9ERUJVRyAiJTAyeDoiLCByZWcpOwotCQl9Ci0JCWlmIChhZjkwMTVfcmVhZF9yZWdfaTJjKGQsIEFGOTAxNV9JMkNfRUVQUk9NLCByZWcsICZ2YWwpID09IDApCi0JCQlkZWJfaW5mbyhLRVJOX0NPTlQgIiAlMDJ4IiwgdmFsKTsKLQkJZWxzZQotCQkJZGViX2luZm8oS0VSTl9DT05UICIgLS0iKTsKLQkJaWYgKHJlZyA9PSAweGZmKQotCQkJYnJlYWs7CisJZWVwcm9tID0ga21hbGxvYyhlZXByb21fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVlcHJvbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAocmVnID0gMDsgcmVnIDwgZWVwcm9tX3NpemU7IHJlZysrKSB7CisJCXJlcS5hZGRyID0gcmVnOworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwkJZWVwcm9tW3JlZ10gPSB2YWw7CiAJfQotCWRlYl9pbmZvKEtFUk5fQ09OVCAiXG4iKTsKLQlyZXR1cm4gMDsKKworCWlmIChkdmJfdXNiX2FmOTAxNV9kZWJ1ZyAmIDB4MDEpCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIGVlcHJvbSwKKwkJCQllZXByb21fc2l6ZSk7CisKKwlCVUdfT04oZWVwcm9tX3NpemUgJSA0KTsKKworCWFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSA9IDA7CisJZm9yIChyZWcgPSAwOyByZWcgPCBlZXByb21fc2l6ZSAvIHNpemVvZih1MzIpOyByZWcrKykgeworCQlhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0gKj0gR09MREVOX1JBVElPX1BSSU1FXzMyOworCQlhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0gKz0gbGUzMl90b19jcHUoKCh1MzIgKillZXByb20pW3JlZ10pOworCX0KKworCWRlYl9pbmZvKCIlczogZWVwcm9tIHN1bT0lLjh4XG4iLCBfX2Z1bmNfXywgYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtKTsKKworCXJldCA9IDA7CitmcmVlOgorCWtmcmVlKGVlcHJvbSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhZjkwMTVfZG93bmxvYWRfaXJfdGFibGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQpAQCAtNzExLDEyICs3MzIsMTMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGFmOTAxNV9zZXR1cCB7CisJdW5zaWduZWQgaW50IGlkOworCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqcmNfa2V5X21hcDsKKwl1bnNpZ25lZCBpbnQgcmNfa2V5X21hcF9zaXplOworCXU4ICppcl90YWJsZTsKKwl1bnNpZ25lZCBpbnQgaXJfdGFibGVfc2l6ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwICphZjkwMTVfc2V0dXBfbWF0Y2godW5zaWduZWQgaW50IGlkLAorCQljb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwICp0YWJsZSkKK3sKKwlmb3IgKDsgdGFibGUtPnJjX2tleV9tYXA7IHRhYmxlKyspCisJCWlmICh0YWJsZS0+aWQgPT0gaWQpCisJCQlyZXR1cm4gdGFibGU7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwIGFmOTAxNV9zZXR1cF9tb2RwYXJhbVtdID0geworCXsgQUY5MDE1X1JFTU9URV9BX0xJTktfRFRVX00sCisJCWFmOTAxNV9yY19rZXlzX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hX2xpbmspLAorCQlhZjkwMTVfaXJfdGFibGVfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hX2xpbmspIH0sCisJeyBBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjMsCisJCWFmOTAxNV9yY19rZXlzX21zaSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpLAorCQlhZjkwMTVfaXJfdGFibGVfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpIH0sCisJeyBBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxOCwKKwkJYWY5MDE1X3JjX2tleXNfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KSwKKwkJYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpIH0sCisJeyBBRjkwMTVfUkVNT1RFX0RJR0lUVFJBREVfRFZCX1QsCisJCWFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGUsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZSksCisJCWFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlKSB9LAorCXsgQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1MsCisJCWFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpLAorCQlhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MpIH0sCisJeyB9Cit9OworCisvKiBkb24ndCBhZGQgbmV3IGVudHJpZXMgaGVyZSBhbnltb3JlLCB1c2UgaGFzaGVzIGluc3RlYWQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwIGFmOTAxNV9zZXR1cF91c2JpZHNbXSA9IHsKKwl7IFVTQl9WSURfTEVBRFRFSywKKwkJYWY5MDE1X3JjX2tleXNfbGVhZHRlaywgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19sZWFkdGVrKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWssIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWspIH0sCisJeyBVU0JfVklEX1ZJU0lPTlBMVVMsCisJCWFmOTAxNV9yY19rZXlzX3R3aW5oYW4sIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbiksCisJCWFmOTAxNV9pcl90YWJsZV90d2luaGFuLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV90d2luaGFuKSB9LAorCXsgVVNCX1ZJRF9LV09STERfMiwgLyogVE9ETzogdXNlIGNvcnJlY3QgcmMga2V5cyAqLworCQlhZjkwMTVfcmNfa2V5c190d2luaGFuLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pLAorCQlhZjkwMTVfaXJfdGFibGVfa3dvcmxkLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9rd29ybGQpIH0sCisJeyBVU0JfVklEX0FWRVJNRURJQSwKKwkJYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSksCisJCWFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYSkgfSwKKwl7IFVTQl9WSURfTVNJXzIsCisJCWFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWkpLAorCQlhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWkpIH0sCisJeyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCBhZjkwMTVfc2V0dXBfaGFzaGVzW10gPSB7CisJeyAweGI4ZmViNzA4LAorCQlhZjkwMTVfcmNfa2V5c19tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKSwKKwkJYWY5MDE1X2lyX3RhYmxlX21zaSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKSB9LAorCXsgMHhhMzcwM2QwMCwKKwkJYWY5MDE1X3JjX2tleXNfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayksCisJCWFmOTAxNV9pcl90YWJsZV9hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluaykgfSwKKwl7IDB4OWI3ZGM2NGUsCisJCWFmOTAxNV9yY19rZXlzX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0diksCisJCWFmOTAxNV9pcl90YWJsZV9teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KSB9LAorCXsgfQorfTsKKworc3RhdGljIHZvaWQgYWY5MDE1X3NldF9yZW1vdGVfY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMpCit7CisJY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCAqdGFibGUgPSBOVUxMOworCisJaWYgKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgeworCQkvKiBsb2FkIHJlbW90ZSBkZWZpbmVkIGFzIG1vZHVsZSBwYXJhbSAqLworCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaChkdmJfdXNiX2FmOTAxNV9yZW1vdGUsCisJCQkJYWY5MDE1X3NldHVwX21vZHBhcmFtKTsKKwl9IGVsc2UgeworCQl1MTYgdmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisKKwkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2goYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtLAorCQkJCWFmOTAxNV9zZXR1cF9oYXNoZXMpOworCisJCWlmICghdGFibGUgJiYgdmVuZG9yID09IFVTQl9WSURfQUZBVEVDSCkgeworCQkJLyogQ2hlY2sgVVNCIG1hbnVmYWN0dXJlciBhbmQgcHJvZHVjdCBzdHJpbmdzIGFuZCB0cnkKKwkJCSAgIHRvIGRldGVybWluZSBjb3JyZWN0IHJlbW90ZSBpbiBjYXNlIG9mIGNoaXAgdmVuZG9yCisJCQkgICByZWZlcmVuY2UgSURzIGFyZSB1c2VkLgorCQkJICAgRE8gTk9UIEFERCBBTllUSElORyBORVcgSEVSRS4gVXNlIGhhc2hlcyBpbnN0ZWFkLgorCQkJICovCisJCQljaGFyIG1hbnVmYWN0dXJlclsxMF07CisJCQltZW1zZXQobWFudWZhY3R1cmVyLCAwLCBzaXplb2YobWFudWZhY3R1cmVyKSk7CisJCQl1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwkJCQltYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKKwkJCWlmICghc3RyY21wKCJNU0kiLCBtYW51ZmFjdHVyZXIpKSB7CisJCQkJLyogaU1hbnVmYWN0dXJlciAxIE1TSQorCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBNU0kgSy1WT1ggKi8KKwkJCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaCgKKwkJCQkJQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzLAorCQkJCQlhZjkwMTVfc2V0dXBfbW9kcGFyYW0pOworCQkJfSBlbHNlIGlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQorCQkJCWNwdV90b19sZTE2KFVTQl9QSURfVFJFS1NUT1JfRFZCVCkpIHsKKwkJCQl0YWJsZSA9ICYoY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCl7IDAsCisJCQkJCWFmOTAxNV9yY19rZXlzX3RyZWtzdG9yLAorCQkJCQlBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yKSwKKwkJCQkJYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yLAorCQkJCQlBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV90cmVrc3RvcikKKwkJCQl9OworCQkJfQorCQl9IGVsc2UgaWYgKCF0YWJsZSkKKwkJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKHZlbmRvciwgYWY5MDE1X3NldHVwX3VzYmlkcyk7CisJfQorCisJaWYgKHRhYmxlKSB7CisJCXByb3BzLT5yY19rZXlfbWFwID0gdGFibGUtPnJjX2tleV9tYXA7CisJCXByb3BzLT5yY19rZXlfbWFwX3NpemUgPSB0YWJsZS0+cmNfa2V5X21hcF9zaXplOworCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gdGFibGUtPmlyX3RhYmxlOworCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPSB0YWJsZS0+aXJfdGFibGVfc2l6ZTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgYWY5MDE1X3JlYWRfY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCByZXQ7CiAJdTggdmFsLCBpLCBvZmZzZXQgPSAwOwogCXN0cnVjdCByZXFfdCByZXEgPSB7UkVBRF9JMkMsIEFGOTAxNV9JMkNfRUVQUk9NLCAwLCAwLCAxLCAxLCAmdmFsfTsKLQljaGFyIG1hbnVmYWN0dXJlclsxMF07CiAKIAkvKiBJUiByZW1vdGUgY29udHJvbGxlciAqLwogCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9JUl9NT0RFOwpAQCAtNzI4LDE1OCArODY5LDE4IEBACiAJfQogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBhZjkwMTVfZWVwcm9tX2hhc2godWRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwogCWRlYl9pbmZvKCIlczogSVIgbW9kZTolZFxuIiwgX19mdW5jX18sIHZhbCk7CiAJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspIHsKIAkJaWYgKHZhbCA9PSBBRjkwMTVfSVJfTU9ERV9ESVNBQkxFRCkgewogCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9IE5VTEw7CiAJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgID0gMDsKLQkJfSBlbHNlIGlmIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKLQkJCS8qIGxvYWQgcmVtb3RlIGRlZmluZWQgYXMgbW9kdWxlIHBhcmFtICovCi0JCQlzd2l0Y2ggKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgewotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0FfTElOS19EVFVfTToKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2FfbGluazsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hX2xpbmspOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfYV9saW5rOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hX2xpbmspOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjM6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19tc2k7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX21zaTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTg6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19teWdpY3R2OwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX215Z2ljdHY7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0RJR0lUVFJBREVfRFZCX1Q6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGUpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGU7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0FWRVJNRURJQV9LUzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rczsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN3aXRjaCAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpIHsKLQkJCWNhc2UgVVNCX1ZJRF9MRUFEVEVLOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbGVhZHRlazsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19sZWFkdGVrKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1ZJRF9WSVNJT05QTFVTOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfdHdpbmhhbjsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV90d2luaGFuOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV90d2luaGFuKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1ZJRF9LV09STERfMjoKLQkJCQkvKiBUT0RPOiB1c2UgY29ycmVjdCByYyBrZXlzICovCi0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c190d2luaGFuOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfa3dvcmxkOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9rd29ybGQpOwotCQkJCWJyZWFrOwotCQkJLyogQ2hlY2sgVVNCIG1hbnVmYWN0dXJlciBhbmQgcHJvZHVjdCBzdHJpbmdzIGFuZCB0cnkKLQkJCSAgIHRvIGRldGVybWluZSBjb3JyZWN0IHJlbW90ZSBpbiBjYXNlIG9mIGNoaXAgdmVuZG9yCi0JCQkgICByZWZlcmVuY2UgSURzIGFyZSB1c2VkLiAqLwotCQkJY2FzZSBVU0JfVklEX0FGQVRFQ0g6Ci0JCQkJbWVtc2V0KG1hbnVmYWN0dXJlciwgMCwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOwotCQkJCXVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAotCQkJCQltYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKLQkJCQlpZiAoIXN0cmNtcCgiR2VuaWF0ZWNoIiwgbWFudWZhY3R1cmVyKSkgewotCQkJCQkvKiBpTWFudWZhY3R1cmVyIDEgR2VuaWF0ZWNoCi0JCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBBRjkwMTUgKi8KLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJCSAgYWY5MDE1X3JjX2tleXNfbXlnaWN0djsKLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkJICBhZjkwMTVfaXJfdGFibGVfbXlnaWN0djsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KTsKLQkJCQl9IGVsc2UgaWYgKCFzdHJjbXAoIk1TSSIsIG1hbnVmYWN0dXJlcikpIHsKLQkJCQkJLyogaU1hbnVmYWN0dXJlciAxIE1TSQotCQkJCQkgICBpUHJvZHVjdCAgICAgIDIgTVNJIEstVk9YICovCi0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCQkgIGFmOTAxNV9yY19rZXlzX21zaTsKLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSk7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCQkgIGFmOTAxNV9pcl90YWJsZV9tc2k7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKTsKLQkJCQl9IGVsc2UgaWYgKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09Ci0JCQkJCWNwdV90b19sZTE2KFVTQl9QSURfVFJFS1NUT1JfRFZCVCkpIHsKLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJCSAgYWY5MDE1X3JjX2tleXNfdHJla3N0b3I7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190cmVrc3Rvcik7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCQkgIGFmOTAxNV9pcl90YWJsZV90cmVrc3RvcjsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV90cmVrc3Rvcik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX0FWRVJNRURJQToKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1ZJRF9NU0lfMjoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWkpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCWFmOTAxNV9zZXRfcmVtb3RlX2NvbmZpZyh1ZGV2LCAmYWY5MDE1X3Byb3BlcnRpZXNbaV0pOwogCX0KIAogCS8qIFRTIG1vZGUgLSBvbmUgb3IgdHdvIHJlY2VpdmVycyAqLwpAQCAtMTAwMSw2ICsxMDAyLDkgQEAKIAkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmdwaW9bMV0gPSBBRjkwMTNfR1BJT19MTzsKIAkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnJmX3NwZWNfaW52ID0gMTsKIAkJCWJyZWFrOworCQljYXNlIEFGOTAxM19UVU5FUl9UREExODIxODoKKwkJCXdhcm4oInR1bmVyIE5YUCBUREExODIxOCBub3Qgc3VwcG9ydGVkIHlldCIpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWRlZmF1bHQ6CiAJCQl3YXJuKCJ0dW5lciBpZDolZCBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgcmVwb3J0ISIsIHZhbCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExMjUsMTEgKzExMjksNiBAQAogCiAJCWRlYl9pbmZvKCIlczogaW5pdCBJMkNcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gYWY5MDE1X2kyY19pbml0KGFkYXAtPmRldik7Ci0KLQkJLyogZHVtcCBlZXByb20gKGRlYnVnKSAqLwotCQlyZXQgPSBhZjkwMTVfZWVwcm9tX2R1bXAoYWRhcC0+ZGV2KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJLyogc2VsZWN0IEkyQyBhZGFwdGVyICovCiAJCWkyY19hZGFwID0gJnN0YXRlLT5pMmNfYWRhcDsKQEAgLTEyOTUsNiArMTI5NCw4IEBACiAvKiAyNSAqL3tVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTlVXzIpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfUEMxNjBfVCl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX1NWRU9OX1NUVjIwKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfVElOWVRXSU5fMil9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywgICBVU0JfUElEX1dJTkZBU1RfRFRWMjAwMERTKX0sCiAJezB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhZjkwMTVfdXNiX3RhYmxlKTsKQEAgLTEzODEsNyArMTM4Miw4IEBACiAJCQl9LAogCQkJewogCQkJCS5uYW1lID0gIkRpZ2l0YWxOb3cgVGlueVR3aW4gRFZCLVQgUmVjZWl2ZXIiLAotCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs1XSwgTlVMTH0sCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzVdLAorCQkJCQkgICAgICZhZjkwMTVfdXNiX3RhYmxlWzI4XSwgTlVMTH0sCiAJCQkJLndhcm1faWRzID0ge05VTEx9LAogCQkJfSwKIAkJCXsKQEAgLTE1NjYsNyArMTU2OCw3IEBACiAKIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDYsIC8qIG1heCA5ICovCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNywgLyogbWF4IDkgKi8KIAkJLmRldmljZXMgPSB7CiAJCQl7CiAJCQkJLm5hbWUgPSAiQXZlck1lZGlhIEFWZXJUViBWb2xhciBHUFMgODA1IChBODA1KSIsCkBAIC0xNjAwLDYgKzE2MDIsMTEgQEAKIAkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMjddLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIkxlYWR0ZWsgV2luRmFzdCBEVFYyMDAwRFMiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsyOV0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCiAJCX0KIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCmluZGV4IDkzMWM4NTEuLmVmMzZiMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaApAQCAtMTA3LDYgKzEwNyw3IEBACiAJdTE2IG10MjA2MF9pZjFbMl07CiAJdTE2IGZpcm13YXJlX3NpemU7CiAJdTE2IGZpcm13YXJlX2NoZWNrc3VtOworCXUzMiBlZXByb21fc3VtOwogCXU4ICAqaXJfdGFibGU7CiAJdTE2IGlyX3RhYmxlX3NpemU7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyOTBiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMKQEAgLTAsMCArMSwxMTUxIEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpCisgKiByZWNlaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWRhbXMuWHUgPGFkYW1zLnh1QGF6d2F2ZS5jb20uY24+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKglTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KKyNpbmNsdWRlICJhejYwMjcuaCIKKworI2luY2x1ZGUgInN0YjA4OTlfZHJ2LmgiCisjaW5jbHVkZSAic3RiMDg5OV9yZWcuaCIKKyNpbmNsdWRlICJzdGIwODk5X2NmZy5oIgorCisjaW5jbHVkZSAic3RiNjEwMC5oIgorI2luY2x1ZGUgInN0YjYxMDBfY2ZnLmgiCisjaW5jbHVkZSAiZHZiX2NhX2VuNTAyMjEuaCIKKworaW50IGR2Yl91c2JfYXo2MDI3X2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2F6NjAyN19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8seGZlcj0yLHJjPTQgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlIHsKKwlzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgY2E7CisJc3RydWN0IG11dGV4IGNhX211dGV4OworCXU4IHBvd2VyX3N0YXRlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGIwODk5X3MxX3JlZyBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzFbXSA9IHsKKworCS8qIDB4MDAwMDAwMGIsIFNZU1JFRyAqLworCXsgU1RCMDg5OV9ERVZfSUQJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9ESVNDTlRSTDEJCSwgMHgzMiB9LAorCXsgU1RCMDg5OV9ESVNDTlRSTDIgICAgIAksIDB4ODAgfSwKKwl7IFNUQjA4OTlfRElTUlhfU1QwICAgICAJLCAweDA0IH0sCisJeyBTVEIwODk5X0RJU1JYX1NUMSAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNQQVJJVFkgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTRklGTyAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU1NUQVRVUwkJLCAweDIwIH0sCisJeyBTVEIwODk5X0RJU0YyMiAgICAgICAgCSwgMHg5OSB9LAorCXsgU1RCMDg5OV9ESVNGMjJSWCAgICAgIAksIDB4YTggfSwKKwkvKiBTWVNSRUcgPyAqLworCXsgU1RCMDg5OV9BQ1JQUkVTQyAgICAgIAksIDB4MTEgfSwKKwl7IFNUQjA4OTlfQUNSRElWMSAgICAgICAJLCAweDBhIH0sCisJeyBTVEIwODk5X0FDUkRJVjIgICAgICAgCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9EQUNSMSAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREFDUjIgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X09VVENGRyAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NT0RFQ0ZHICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzMJCSwgMHhmZSB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMgkJLCAweDAzIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18xCQksIDB4N2MgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzAJCSwgMHhmNCB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMyAgICAgIAksIDB4ZjMgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzIgICAgICAJLCAweGZjIH0sCisJeyBTVEIwODk5X0lSUU1TS18xICAgICAgCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMAkJLCAweGZmIH0sCisJeyBTVEIwODk5X0lSUUNGRwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0kyQ0NGRyAgICAgICAgCSwgMHg4OCB9LAorCXsgU1RCMDg5OV9JMkNSUFQgICAgICAgIAksIDB4NTggfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUU1CQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUU0CQksIDB4MzMgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUzCQksIDB4NmQgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUyCQksIDB4OTAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUxCQksIDB4NjAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUwCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfR1BJTzAwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wMUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDJDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAzQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDVDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA2Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wN0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDhDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA5Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTFDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEyQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xM0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTRDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE1Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTdDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE4Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xOUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMjBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfU0RBVENGRyAgICAgICAJLCAweGI4IH0sCisJeyBTVEIwODk5X1NDTFRDRkcgICAgICAgCSwgMHhiYSB9LAorCXsgU1RCMDg5OV9BR0NSRkNGRyAgICAgIAksIDB4MWMgfSwgLyogMHgxMSAqLworCXsgU1RCMDg5OV9HUElPMjIgICAgICAgIAksIDB4ODIgfSwgLyogQUdDQkIyQ0ZHICovCisJeyBTVEIwODk5X0dQSU8yMSAgICAgICAgCSwgMHg5MSB9LCAvKiBBR0NCQjFDRkcgKi8KKwl7IFNUQjA4OTlfRElSQ0xLQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NMS09VVDI3Q0ZHICAgCSwgMHg3ZSB9LAorCXsgU1RCMDg5OV9TVERCWUNGRyAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MwQ0ZHICAgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NTMUNGRyAgICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9ESVNFUUNPQ0ZHICAgIAksIDB4MjAgfSwKKwl7IFNUQjA4OTlfR1BJTzMyQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzMzQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM0Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM1Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM2Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM3Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM4Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM5Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfTkNPQVJTRSAgICAgICAJLCAweDE3IH0sIC8qIDB4MTUgPSAyNyBNaHogQ2xvY2ssIEYvMyA9IDE5OE1IeiwgRi82ID0gOTlNSHogKi8KKwl7IFNUQjA4OTlfU1lOVENUUkwgICAgICAJLCAweDAyIH0sIC8qIDB4MDAgPSBDTEsgZnJvbSBDTEtJLCAweDAyID0gQ0xLIGZyb20gWFRBTEkgKi8KKwl7IFNUQjA4OTlfRklMVENUUkwgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZU0NUUkwgICAgICAgCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9TVE9QQ0xLMSAgICAgIAksIDB4MjAgfSwKKwl7IFNUQjA4OTlfU1RPUENMSzIgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0lOVEJVRlNUQVRVUwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lOVEJVRkNUUkwgICAgCSwgMHgwYSB9LAorCXsgMHhmZmZmCQkJLCAweGZmIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIGF6NjAyN19zdGIwODk5X3MxX2luaXRfM1tdID0geworCXsgU1RCMDg5OV9ERU1PRCAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfUkNPTVBDICAgICAgICAJLCAweGM5IH0sCisJeyBTVEIwODk5X0FHQzFDTiAgICAgICAgCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9BR0MxUkVGICAgICAgIAksIDB4MTAgfSwKKwl7IFNUQjA4OTlfUlRDCSAgICAgICAgCSwgMHgyMyB9LAorCXsgU1RCMDg5OV9UTUdDRkcgICAgICAgIAksIDB4NGUgfSwKKwl7IFNUQjA4OTlfQUdDMlJFRiAgICAgICAJLCAweDM0IH0sCisJeyBTVEIwODk5X1RMU1IgICAgICAgICAgCSwgMHg4NCB9LAorCXsgU1RCMDg5OV9DRkQgICAgICAgICAgIAksIDB4ZjcgfSwKKwl7IFNUQjA4OTlfQUNMQwkgICAgICAgIAksIDB4ODcgfSwKKwl7IFNUQjA4OTlfQkNMQyAgICAgICAgICAJLCAweDk0IH0sCisJeyBTVEIwODk5X0VRT04gICAgICAgICAgCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9MRFQgICAgICAgICAgIAksIDB4ZjEgfSwKKwl7IFNUQjA4OTlfTERUMiAgICAgICAgICAJLCAweGUzIH0sCisJeyBTVEIwODk5X0VRVUFMUkVGICAgICAgCSwgMHhiNCB9LAorCXsgU1RCMDg5OV9UTUdSQU1QICAgICAgIAksIDB4MTAgfSwKKwl7IFNUQjA4OTlfVE1HVEhEICAgICAgICAJLCAweDMwIH0sCisJeyBTVEIwODk5X0lEQ0NPTVAJCSwgMHhmZCB9LAorCXsgU1RCMDg5OV9RRENDT01QCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfUE9XRVJJCQksIDB4MGMgfSwKKwl7IFNUQjA4OTlfUE9XRVJRCQksIDB4MGYgfSwKKwl7IFNUQjA4OTlfUkNPTVAJCQksIDB4NmMgfSwKKwl7IFNUQjA4OTlfQUdDSVFJTgkJLCAweDgwIH0sCisJeyBTVEIwODk5X0FHQzJJMQkJLCAweDA2IH0sCisJeyBTVEIwODk5X0FHQzJJMgkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RMSVIJCQksIDB4MzAgfSwKKwl7IFNUQjA4OTlfUlRGCQkJLCAweDdmIH0sCisJeyBTVEIwODk5X0RTVEFUVVMJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9MREkJCQksIDB4YmMgfSwKKwl7IFNUQjA4OTlfQ0ZSTQkJCSwgMHhlYSB9LAorCXsgU1RCMDg5OV9DRlJMCQkJLCAweDMxIH0sCisJeyBTVEIwODk5X05JUk0JCQksIDB4MmIgfSwKKwl7IFNUQjA4OTlfTklSTAkJCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9JU1lNQgkJCSwgMHgxZCB9LAorCXsgU1RCMDg5OV9RU1lNQgkJCSwgMHhhNiB9LAorCXsgU1RCMDg5OV9TRlJIICAgICAgICAgIAksIDB4MmYgfSwKKwl7IFNUQjA4OTlfU0ZSTSAgICAgICAgICAJLCAweDY4IH0sCisJeyBTVEIwODk5X1NGUkwgICAgICAgICAgCSwgMHg0MCB9LAorCXsgU1RCMDg5OV9TRlJVUEggICAgICAgIAksIDB4MmYgfSwKKwl7IFNUQjA4OTlfU0ZSVVBNICAgICAgICAJLCAweDY4IH0sCisJeyBTVEIwODk5X1NGUlVQTCAgICAgICAgCSwgMHg0MCB9LAorCXsgU1RCMDg5OV9FUVVBSTEJCSwgMHgwMiB9LAorCXsgU1RCMDg5OV9FUVVBUTEJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9FUVVBSTIJCSwgMHgwNCB9LAorCXsgU1RCMDg5OV9FUVVBUTIJCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9FUVVBSTMJCSwgMHgwMiB9LAorCXsgU1RCMDg5OV9FUVVBUTMJCSwgMHhmZCB9LAorCXsgU1RCMDg5OV9FUVVBSTQJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9FUVVBUTQJCSwgMHgwNyB9LAorCXsgU1RCMDg5OV9FUVVBSTUJCSwgMHgwOCB9LAorCXsgU1RCMDg5OV9FUVVBUTUJCSwgMHhmNSB9LAorCXsgU1RCMDg5OV9EU1RBVFVTMgkJLCAweDAwIH0sCisJeyBTVEIwODk5X1ZTVEFUVVMgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9WRVJST1IJCSwgMHg4NiB9LAorCXsgU1RCMDg5OV9JUVNXQVAJCSwgMHgyYSB9LAorCXsgU1RCMDg5OV9FQ05UMU0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9FQ05UMUwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9FQ05UMk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9FQ05UMkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9FQ05UM00JCSwgMHgwYSB9LAorCXsgU1RCMDg5OV9FQ05UM0wJCSwgMHhhZCB9LAorCXsgU1RCMDg5OV9GRUNBVVRPMSAgICAgIAksIDB4MDYgfSwKKwl7IFNUQjA4OTlfRkVDTQkgICAgICAgIAksIDB4MDEgfSwKKwl7IFNUQjA4OTlfVlRIMTIgICAgICAgICAJLCAweGIwIH0sCisJeyBTVEIwODk5X1ZUSDIzICAgICAgICAgCSwgMHg3YSB9LAorCXsgU1RCMDg5OV9WVEgzNAkgICAgICAgIAksIDB4NTggfSwKKwl7IFNUQjA4OTlfVlRINTYgICAgICAgICAJLCAweDM4IH0sCisJeyBTVEIwODk5X1ZUSDY3ICAgICAgICAgCSwgMHgzNCB9LAorCXsgU1RCMDg5OV9WVEg3OCAgICAgICAgIAksIDB4MjQgfSwKKwl7IFNUQjA4OTlfUFJWSVQgICAgICAgICAJLCAweGZmIH0sCisJeyBTVEIwODk5X1ZJVFNZTkMgICAgICAgCSwgMHgxOSB9LAorCXsgU1RCMDg5OV9SU1VMQyAgICAgICAgIAksIDB4YjEgfSwgLyogRFZCID0gMHhiMSwgRFNTID0gMHhhMSAqLworCXsgU1RCMDg5OV9UU1VMQyAgICAgICAgIAksIDB4NDIgfSwKKwl7IFNUQjA4OTlfUlNMTEMgICAgICAgICAJLCAweDQxIH0sCisJeyBTVEIwODk5X1RTTFBMCSAgICAgICAgCSwgMHgxMiB9LAorCXsgU1RCMDg5OV9UU0NGR0ggICAgICAgIAksIDB4MGMgfSwKKwl7IFNUQjA4OTlfVFNDRkdNICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTQ0ZHTCAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU09VVAkJCSwgMHg2OSB9LCAvKiAweDBkIGZvciBDQU0gKi8KKwl7IFNUQjA4OTlfUlNTWU5DREVMICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTSU5IREVMSCAgICAgCSwgMHgwMiB9LAorCXsgU1RCMDg5OV9UU0lOSERFTE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0xMU1RLTQkJLCAweDFiIH0sCisJeyBTVEIwODk5X1RTTExTVEtMCQksIDB4YjMgfSwKKwl7IFNUQjA4OTlfVFNVTFNUS00JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1VMU1RLTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1BDS0xFTlVMCQksIDB4YmMgfSwKKwl7IFNUQjA4OTlfUENLTEVOTEwJCSwgMHhjYyB9LAorCXsgU1RCMDg5OV9SU1BDS0xFTgkJLCAweGJkIH0sCisJeyBTVEIwODk5X1RTU1RBVFVTCQksIDB4OTAgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDEgICAgICAJLCAweGI2IH0sCisJeyBTVEIwODk5X0VSUkNUUkwyICAgICAgCSwgMHg5NSB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMyAgICAgIAksIDB4OGQgfSwKKwl7IFNUQjA4OTlfRE1PTk1TSzEJCSwgMHgyNyB9LAorCXsgU1RCMDg5OV9ETU9OTVNLMAkJLCAweDAzIH0sCisJeyBTVEIwODk5X0RFTUFQVklUICAgICAgCSwgMHg1YyB9LAorCXsgU1RCMDg5OV9QTFBBUk0JCSwgMHgxOSB9LAorCXsgU1RCMDg5OV9QREVMQ1RSTCAgICAgIAksIDB4NDggfSwKKwl7IFNUQjA4OTlfUERFTENUUkwyICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCSENUUkwxICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkhDVFJMMiAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSFlTVFRIUkVTSCAgICAJLCAweDc3IH0sCisJeyBTVEIwODk5X01BVENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NQVRDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNDU1QJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JU0lfRU5UUlkJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JU0lfQklUX0VOCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTUFUU1RSTQkJLCAweGYwIH0sCisJeyBTVEIwODk5X01BVFNUUkwJCSwgMHgwMiB9LAorCXsgU1RCMDg5OV9VUExTVFJNCQksIDB4NDUgfSwKKwl7IFNUQjA4OTlfVVBMU1RSTAkJLCAweDYwIH0sCisJeyBTVEIwODk5X0RGTFNUUk0JCSwgMHhlMyB9LAorCXsgU1RCMDg5OV9ERkxTVFJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ1NUUgkJLCAweDQ3IH0sCisJeyBTVEIwODk5X1NZTkNEU1RSTQkJLCAweDA1IH0sCisJeyBTVEIwODk5X1NZTkNEU1RSTAkJLCAweDE4IH0sCisJeyBTVEIwODk5X0NGR1BERUxTVEFUVVMxCSwgMHgxOSB9LAorCXsgU1RCMDg5OV9DRkdQREVMU1RBVFVTMgksIDB4MmIgfSwKKwl7IFNUQjA4OTlfQkJGRVJST1JNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJGRVJST1JMCQksIDB4MDEgfSwKKwl7IFNUQjA4OTlfVVBLVEVSUk9STQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQS1RFUlJPUkwJCSwgMHgwMCB9LAorCXsgMHhmZmZmCQkJLCAweGZmIH0sCit9OworCisKKworc3RydWN0IHN0YjA4OTlfY29uZmlnIGF6NjAyN19zdGIwODk5X2NvbmZpZyA9IHsKKwkuaW5pdF9kZXYJCT0gYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8xLAorCS5pbml0X3MyX2RlbW9kCQk9IHN0YjA4OTlfczJfaW5pdF8yLAorCS5pbml0X3MxX2RlbW9kCQk9IGF6NjAyN19zdGIwODk5X3MxX2luaXRfMywKKwkuaW5pdF9zMl9mZWMJCT0gc3RiMDg5OV9zMl9pbml0XzQsCisJLmluaXRfdHN0CQk9IHN0YjA4OTlfczFfaW5pdF81LAorCisJLmRlbW9kX2FkZHJlc3MgCQk9IDB4ZDAsIC8qIDB4NjgsIDB4ZDAgPj4gMSAqLworCisJLnh0YWxfZnJlcQkJPSAyNzAwMDAwMCwKKwkuaW52ZXJzaW9uCQk9IElRX1NXQVBfT04sIC8qIDEgKi8KKworCS5sb19jbGsJCQk9IDc2NTAwMDAwLAorCS5oaV9jbGsJCQk9IDk5MDAwMDAwLAorCisJLmVzbm9fYXZlCQk9IFNUQjA4OTlfRFZCUzJfRVNOT19BVkUsCisJLmVzbm9fcXVhbnQJCT0gU1RCMDg5OV9EVkJTMl9FU05PX1FVQU5ULAorCS5hdmZyYW1lc19jb2Fyc2UJPSBTVEIwODk5X0RWQlMyX0FWRlJBTUVTX0NPQVJTRSwKKwkuYXZmcmFtZXNfZmluZQkJPSBTVEIwODk5X0RWQlMyX0FWRlJBTUVTX0ZJTkUsCisJLm1pc3NfdGhyZXNob2xkCQk9IFNUQjA4OTlfRFZCUzJfTUlTU19USFJFU0hPTEQsCisJLnV3cF90aHJlc2hvbGRfYWNxCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX0FDUSwKKwkudXdwX3RocmVzaG9sZF90cmFjawk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9UUkFDSywKKwkudXdwX3RocmVzaG9sZF9zb2YJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfU09GLAorCS5zb2Zfc2VhcmNoX3RpbWVvdXQJPSBTVEIwODk5X0RWQlMyX1NPRl9TRUFSQ0hfVElNRU9VVCwKKworCS5idHJfbmNvX2JpdHMJCT0gU1RCMDg5OV9EVkJTMl9CVFJfTkNPX0JJVFMsCisJLmJ0cl9nYWluX3NoaWZ0X29mZnNldAk9IFNUQjA4OTlfRFZCUzJfQlRSX0dBSU5fU0hJRlRfT0ZGU0VULAorCS5jcmxfbmNvX2JpdHMJCT0gU1RCMDg5OV9EVkJTMl9DUkxfTkNPX0JJVFMsCisJLmxkcGNfbWF4X2l0ZXIJCT0gU1RCMDg5OV9EVkJTMl9MRFBDX01BWF9JVEVSLAorCisJLnR1bmVyX2dldF9mcmVxdWVuY3kJPSBzdGI2MTAwX2dldF9mcmVxdWVuY3ksCisJLnR1bmVyX3NldF9mcmVxdWVuY3kJPSBzdGI2MTAwX3NldF9mcmVxdWVuY3ksCisJLnR1bmVyX3NldF9iYW5kd2lkdGgJPSBzdGI2MTAwX3NldF9iYW5kd2lkdGgsCisJLnR1bmVyX2dldF9iYW5kd2lkdGgJPSBzdGI2MTAwX2dldF9iYW5kd2lkdGgsCisJLnR1bmVyX3NldF9yZnNpZ2dhaW4JPSBOVUxMLAorfTsKKworc3RydWN0IHN0YjYxMDBfY29uZmlnIGF6NjAyN19zdGI2MTAwX2NvbmZpZyA9IHsKKwkudHVuZXJfYWRkcmVzcwk9IDB4YzAsCisJLnJlZmNsb2NrCT0gMjcwMDAwMDAsCit9OworCisKKy8qIGNoZWNrIGZvciBtdXRleCBGSVhNRSAqLworaW50IGF6NjAyN191c2JfaW5fb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pCit7CisJaW50IHJldCA9IC0xOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPnVzYl9tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkgICAgICByZXEsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAorCQkJICAgICAgdmFsdWUsCisJCQkgICAgICBpbmRleCwKKwkJCSAgICAgIGIsCisJCQkgICAgICBibGVuLAorCQkJICAgICAgMjAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlCisJCXJldCA9IDA7CisKKwlkZWJfeGZlcigiaW46IHJlcS4gJTAyeCwgdmFsOiAlMDR4LCBpbmQ6ICUwNHgsIGJ1ZmZlcjogIiwgcmVxLCB2YWx1ZSwgaW5kZXgpOworCWRlYnVnX2R1bXAoYiwgYmxlbiwgZGViX3hmZXIpOworCisJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X3VzYl9vdXRfb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLAorCQkJICAgICB1OCByZXEsCisJCQkgICAgIHUxNiB2YWx1ZSwKKwkJCSAgICAgdTE2IGluZGV4LAorCQkJICAgICB1OCAqYiwKKwkJCSAgICAgaW50IGJsZW4pCit7CisJaW50IHJldDsKKworCWRlYl94ZmVyKCJvdXQ6IHJlcS4gJTAyeCwgdmFsOiAlMDR4LCBpbmQ6ICUwNHgsIGJ1ZmZlcjogIiwgcmVxLCB2YWx1ZSwgaW5kZXgpOworCWRlYnVnX2R1bXAoYiwgYmxlbiwgZGViX3hmZXIpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+dXNiX211dGV4KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkLT51ZGV2LCAwKSwKKwkJCSAgICAgIHJlcSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgdmFsdWUsCisJCQkgICAgICBpbmRleCwKKwkJCSAgICAgIGIsCisJCQkgICAgICBibGVuLAorCQkJICAgICAgMjAwMCk7CisKKwlpZiAocmV0ICE9IGJsZW4pIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2V7CisJCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGF6NjAyN19zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWRlYl9pbmZvKCIlcyAlZCIsIF9fZnVuY19fLCBvbm9mZik7CisKKwlyZXEgPSAweEJDOworCXZhbHVlID0gb25vZmY7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoga2V5cyBmb3IgdGhlIGVuY2xvc2VkIHJlbW90ZSBjb250cm9sICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGF6NjAyN19yY19rZXlzW10gPSB7CisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKK307CisKKy8qIHJlbW90ZSBjb250cm9sIHN0dWZmIChkb2VzIG5vdCB3b3JrIHdpdGggbXkgYm94KSAqLworc3RhdGljIGludCBhejYwMjdfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQoreworCXJldHVybiAwOworfQorCisvKgoraW50IGF6NjAyN19wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCXU4IHYgPSBvbm9mZjsKKwlyZXR1cm4gYXo2MDI3X3VzYl9vdXRfb3AoZCwweEJDLHYsMyxOVUxMLDEpOworfQorKi8KKworc3RhdGljIGludCBhejYwMjdfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJCWludCBzbG90LAorCQkJCQlpbnQgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEMxOworCXZhbHVlID0gYWRkcmVzczsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDE7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmV0ID0gYlswXTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfd3JpdGVfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCQkgaW50IHNsb3QsCisJCQkJCSBpbnQgYWRkcmVzcywKKwkJCQkJIHU4IHZhbHVlKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlMTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlkZWJfaW5mbygiJXMgJWQiLCBfX2Z1bmNfXywgc2xvdCk7CisJaWYgKHNsb3QgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJlcSA9IDB4QzI7CisJdmFsdWUxID0gYWRkcmVzczsKKwlpbmRleCA9IHZhbHVlOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZTEsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfcmVhZF9jYW1fY29udHJvbChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCSAgICAgIGludCBzbG90LAorCQkJCSAgICAgIHU4IGFkZHJlc3MpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJaWYgKHNsb3QgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDMzsKKwl2YWx1ZSA9IGFkZHJlc3M7CisJaW5kZXggPSAwOworCWJsZW4gPSAyOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChiWzBdID09IDApCisJCQl3YXJuKCJSZWFkIENJIElPIGVycm9yIik7CisKKwkJcmV0ID0gYlsxXTsKKwkJZGViX2luZm8oInJlYWQgY2FtIGRhdGEgPSAleCBmcm9tIDB4JXgiLCBiWzFdLCB2YWx1ZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3dyaXRlX2NhbV9jb250cm9sKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJICAgICAgIGludCBzbG90LAorCQkJCSAgICAgICB1OCBhZGRyZXNzLAorCQkJCSAgICAgICB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTE7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJaWYgKHNsb3QgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJlcSA9IDB4QzQ7CisJdmFsdWUxID0gYWRkcmVzczsKKwlpbmRleCA9IHZhbHVlOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZTEsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCitmYWlsZWQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgQ0lfQ2FtUmVhZHkoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCXJlcSA9IDB4Qzg7CisJdmFsdWUgPSAwOworCWluZGV4ID0gMDsKKwlibGVuID0gMTsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2V7CisJCXJldCA9IGJbMF07CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3Nsb3RfcmVzZXQoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0LCBpOworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzY7CisJdmFsdWUgPSAxOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJbXNsZWVwKDUwMCk7CisJcmVxID0gMHhDNjsKKwl2YWx1ZSA9IDA7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgeworCQltc2xlZXAoMTAwKTsKKworCQlpZiAoQ0lfQ2FtUmVhZHkoY2EsIHNsb3QpKSB7CisJCQlkZWJfaW5mbygiQ0FNIFJlYWR5Iik7CisJCQlicmVhazsKKwkJfQorCX0KKwltc2xlZXAoNTAwMCk7CisKK2ZhaWxlZDoKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfc2xvdF9zaHV0ZG93bihzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfc2xvdF90c19lbmFibGUoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJZGViX2luZm8oIiVzIiwgX19mdW5jX18pOworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmVxID0gMHhDNzsKKwl2YWx1ZSA9IDE7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKK2ZhaWxlZDoKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfcG9sbF9zbG90X3N0YXR1cyhzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCwgaW50IG9wZW4pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEM1OworCXZhbHVlID0gMDsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDE7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlCisJCXJldCA9IDA7CisKKwlpZiAoYlswXSA9PSAwKSB7CisJCXJldCA9IDA7CisKKwl9IGVsc2UgaWYgKGJbMF0gPT0gMSkgeworCQlyZXQgPSBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwKKwkJICAgICAgRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUkVBRFk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgYXo2MDI3X2NpX3VuaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlOworCisJZGViX2luZm8oIiVzIiwgX19mdW5jX18pOworCisJaWYgKE5VTEwgPT0gZCkKKwkJcmV0dXJuOworCisJc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCWlmIChOVUxMID09IHN0YXRlKQorCQlyZXR1cm47CisKKwlpZiAoTlVMTCA9PSBzdGF0ZS0+Y2EuZGF0YSkKKwkJcmV0dXJuOworCisJZHZiX2NhX2VuNTAyMjFfcmVsZWFzZSgmc3RhdGUtPmNhKTsKKworCW1lbXNldCgmc3RhdGUtPmNhLCAwLCBzaXplb2Yoc3RhdGUtPmNhKSk7Cit9CisKKworc3RhdGljIGludCBhejYwMjdfY2lfaW5pdChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGEtPmRldjsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCWludCByZXQ7CisKKwlkZWJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9pbml0KCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJc3RhdGUtPmNhLm93bmVyCQkJPSBUSElTX01PRFVMRTsKKwlzdGF0ZS0+Y2EucmVhZF9hdHRyaWJ1dGVfbWVtCT0gYXo2MDI3X2NpX3JlYWRfYXR0cmlidXRlX21lbTsKKwlzdGF0ZS0+Y2Eud3JpdGVfYXR0cmlidXRlX21lbQk9IGF6NjAyN19jaV93cml0ZV9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS5yZWFkX2NhbV9jb250cm9sCT0gYXo2MDI3X2NpX3JlYWRfY2FtX2NvbnRyb2w7CisJc3RhdGUtPmNhLndyaXRlX2NhbV9jb250cm9sCT0gYXo2MDI3X2NpX3dyaXRlX2NhbV9jb250cm9sOworCXN0YXRlLT5jYS5zbG90X3Jlc2V0CQk9IGF6NjAyN19jaV9zbG90X3Jlc2V0OworCXN0YXRlLT5jYS5zbG90X3NodXRkb3duCQk9IGF6NjAyN19jaV9zbG90X3NodXRkb3duOworCXN0YXRlLT5jYS5zbG90X3RzX2VuYWJsZQk9IGF6NjAyN19jaV9zbG90X3RzX2VuYWJsZTsKKwlzdGF0ZS0+Y2EucG9sbF9zbG90X3N0YXR1cwk9IGF6NjAyN19jaV9wb2xsX3Nsb3Rfc3RhdHVzOworCXN0YXRlLT5jYS5kYXRhCQkJPSBkOworCisJcmV0ID0gZHZiX2NhX2VuNTAyMjFfaW5pdCgmYS0+ZHZiX2FkYXAsCisJCQkJICAmc3RhdGUtPmNhLAorCQkJCSAgMCwgLyogZmxhZ3MgKi8KKwkJCQkgIDEpOy8qIG5fc2xvdHMgKi8KKwlpZiAocmV0ICE9IDApIHsKKwkJZXJyKCJDYW5ub3QgaW5pdGlhbGl6ZSBDSTogRXJyb3IgJWQuIiwgcmV0KTsKKwkJbWVtc2V0KCZzdGF0ZS0+Y2EsIDAsIHNpemVvZihzdGF0ZS0+Y2EpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZWJfaW5mbygiQ0kgaW5pdGlhbGl6ZWQuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKK3N0YXRpYyBpbnQgYXo2MDI3X3JlYWRfbWFjX2FkZHIoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBtYWNbNl0pCit7CisJYXo2MDI3X3VzYl9pbl9vcChkLCAweGI3LCA2LCAwLCAmbWFjWzBdLCA2KTsKKwlyZXR1cm4gMDsKK30KKyovCisKK3N0YXRpYyBpbnQgYXo2MDI3X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisKKwl1OCBidWY7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKKworCXN0cnVjdCBpMmNfbXNnIGkyY19tc2cgPSB7CisJCS5hZGRyCT0gMHg5OSwKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9ICZidWYsCisJCS5sZW4JPSAxCisJfTsKKworCS8qCisJICogMiAgIC0tMTh2CisJICogMSAgIC0tMTN2CisJICogMCAgIC0tb2ZmCisJICovCisJc3dpdGNoICh2b2x0YWdlKSB7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJYnVmID0gMTsKKwkJcmV0ID0gaTJjX3RyYW5zZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmaTJjX21zZywgMSk7CisJCWJyZWFrOworCisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJYnVmID0gMjsKKwkJcmV0ID0gaTJjX3RyYW5zZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmaTJjX21zZywgMSk7CisJCWJyZWFrOworCisJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCWJ1ZiA9IDA7CisJCXJldCA9IGkyY190cmFuc2ZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmkyY19tc2csIDEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF9wb3dlcm9uKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCXJlcSA9IDB4QkM7CisJdmFsdWUgPSAxOyAvKiBwb3dlciBvbiAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX3Jlc2V0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCS8qIHJlc2V0IGRlbW9kdWxhdG9yICovCisJcmVxID0gMHhDMDsKKwl2YWx1ZSA9IDE7IC8qIGhpZ2ggKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmVxID0gMHhDMDsKKwl2YWx1ZSA9IDA7IC8qIGxvdyAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMCk7CisKKwlyZXEgPSAweEMwOworCXZhbHVlID0gMTsgLypoaWdoICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX3RzYnlwYXNzKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJLyogVFMgcGFzc3Rocm91Z2ggKi8KKwlyZXEgPSAweEM3OworCXZhbHVlID0gb25vZmY7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKworCWF6NjAyN19mcm9udGVuZF9wb3dlcm9uKGFkYXApOworCWF6NjAyN19mcm9udGVuZF9yZXNldChhZGFwKTsKKworCWRlYl9pbmZvKCJhZGFwID0gJXAsIGRldiA9ICVwXG4iLCBhZGFwLCBhZGFwLT5kZXYpOworCWFkYXAtPmZlID0gc3RiMDg5OV9hdHRhY2goJmF6NjAyN19zdGIwODk5X2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCisJaWYgKGFkYXAtPmZlKSB7CisJCWRlYl9pbmZvKCJmb3VuZCBTVEIwODk5IERWQi1TL0RWQi1TMiBmcm9udGVuZCBAMHglMDJ4IiwgYXo2MDI3X3N0YjA4OTlfY29uZmlnLmRlbW9kX2FkZHJlc3MpOworCQlpZiAoc3RiNjEwMF9hdHRhY2goYWRhcC0+ZmUsICZhejYwMjdfc3RiNjEwMF9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgeworCQkJZGViX2luZm8oImZvdW5kIFNUQjYxMDAgRFZCLVMvRFZCLVMyIGZyb250ZW5kIEAweCUwMngiLCBhejYwMjdfc3RiNjEwMF9jb25maWcudHVuZXJfYWRkcmVzcyk7CisJCQlhZGFwLT5mZS0+b3BzLnNldF92b2x0YWdlID0gYXo2MDI3X3NldF92b2x0YWdlOworCQkJYXo2MDI3X2NpX2luaXQoYWRhcCk7CisJCX0gZWxzZSB7CisJCQlhZGFwLT5mZSA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKwkJd2Fybigibm8gZnJvbnQtZW5kIGF0dGFjaGVkXG4iKTsKKworCWF6NjAyN19mcm9udGVuZF90c2J5cGFzcyhhZGFwLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXo2MDI3X3Byb3BlcnRpZXM7CisKK3N0YXRpYyB2b2lkIGF6NjAyN191c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWF6NjAyN19jaV91bmluaXQoZCk7CisJZHZiX3VzYl9kZXZpY2VfZXhpdChpbnRmKTsKK30KKworCitzdGF0aWMgaW50IGF6NjAyN191c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBkdmJfdXNiX2RldmljZV9pbml0KGludGYsCisJCQkJICAgJmF6NjAyN19wcm9wZXJ0aWVzLAorCQkJCSAgIFRISVNfTU9EVUxFLAorCQkJCSAgIE5VTEwsCisJCQkJICAgYWRhcHRlcl9ucik7Cit9CisKKy8qIEkyQyAqLworc3RhdGljIGludCBhejYwMjdfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpID0gMCwgaiA9IDAsIGxlbiA9IDA7CisJaW50IHJldDsKKwl1MTYgaW5kZXg7CisJdTE2IHZhbHVlOworCWludCBsZW5ndGg7CisJdTggcmVxOworCXU4IGRhdGFbMjU2XTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmIChudW0gPiAyKQorCQl3YXJuKCJtb3JlIHRoYW4gMiBpMmMgbWVzc2FnZXMgYXQgYSB0aW1lIGlzIG5vdCBoYW5kbGVkIHlldC4gVE9ETy4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCisJCWlmIChtc2dbaV0uYWRkciA9PSAweDk5KSB7CisJCQlyZXEgPSAweEJFOworCQkJaW5kZXggPSAwOworCQkJdmFsdWUgPSBtc2dbaV0uYnVmWzBdICYgMHgwMGZmOworCQkJbGVuZ3RoID0gMTsKKwkJCWF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQl9CisKKwkJaWYgKG1zZ1tpXS5hZGRyID09IDB4ZDApIHsKKwkJCS8qIHdyaXRlL3JlYWQgcmVxdWVzdCAqLworCQkJaWYgKGkgKyAxIDwgbnVtICYmIChtc2dbaSArIDFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQkJcmVxID0gMHhCOTsKKwkJCQlpbmRleCA9ICgoKG1zZ1tpXS5idWZbMF0gPDwgOCkgJiAweGZmMDApIHwgKG1zZ1tpXS5idWZbMV0gJiAweDAwZmYpKTsKKwkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyICsgKG1zZ1tpXS5sZW4gPDwgOCk7CisJCQkJbGVuZ3RoID0gbXNnW2kgKyAxXS5sZW4gKyA2OworCQkJCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQkJbGVuID0gbXNnW2kgKyAxXS5sZW47CisJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQltc2dbaSArIDFdLmJ1ZltqXSA9IGRhdGFbaiArIDVdOworCisJCQkJaSsrOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChtc2dbaV0uYWRkciA9PSAweGQwKSB7CisJCQkJCS8qIGRlbW9kIDE2Yml0IGFkZHIgKi8KKwkJCQkJcmVxID0gMHhCRDsKKwkJCQkJaW5kZXggPSAoKChtc2dbaV0uYnVmWzBdIDw8IDgpICYgMHhmZjAwKSB8IChtc2dbaV0uYnVmWzFdICYgMHgwMGZmKSk7CisJCQkJCXZhbHVlID0gbXNnW2ldLmFkZHIgKyAoMiA8PCA4KTsKKwkJCQkJbGVuZ3RoID0gbXNnW2ldLmxlbiAtIDI7CisJCQkJCWxlbiA9IG1zZ1tpXS5sZW4gLSAyOworCQkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCQlkYXRhW2pdID0gbXNnW2ldLmJ1ZltqICsgMl07CisKKwkJCQl9CisJCQkJYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQl9CisJCX0KKworCQlpZiAobXNnW2ldLmFkZHIgPT0gMHhjMCkgeworCQkJaWYgKG1zZ1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisKKwkJCQlyZXEgPSAweEI5OworCQkJCWluZGV4ID0gMHgwOworCQkJCXZhbHVlID0gbXNnW2ldLmFkZHI7CisJCQkJbGVuZ3RoID0gbXNnW2ldLmxlbiArIDY7CisJCQkJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCQlsZW4gPSBtc2dbaV0ubGVuOworCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJbXNnW2ldLmJ1ZltqXSA9IGRhdGFbaiArIDVdOworCisJCQl9IGVsc2UgeworCisJCQkJcmVxID0gMHhCRDsKKwkJCQlpbmRleCA9IG1zZ1tpXS5idWZbMF0gJiAweDAwRkY7CisJCQkJdmFsdWUgPSBtc2dbaV0uYWRkciArICgxIDw8IDgpOworCQkJCWxlbmd0aCA9IG1zZ1tpXS5sZW4gLSAxOworCQkJCWxlbiA9IG1zZ1tpXS5sZW4gLSAxOworCisJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQlkYXRhW2pdID0gbXNnW2ldLmJ1ZltqICsgMV07CisKKwkJCQlhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CisKKwlyZXR1cm4gaTsKK30KKworCitzdGF0aWMgdTMyIGF6NjAyN19pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGF6NjAyN19pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGF6NjAyN19pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGF6NjAyN19pMmNfZnVuYywKK307CisKK2ludCBhejYwMjdfaWRlbnRpZnlfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkgIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKKwkJCSAgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywKKwkJCSAgaW50ICpjb2xkKQoreworCXU4IGJbMTZdOworCXMxNiByZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkgIDB4YjcsCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAorCQkJCSAgNiwKKwkJCQkgIDAsCisJCQkJICBiLAorCQkJCSAgNiwKKwkJCQkgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCSpjb2xkID0gcmV0IDw9IDA7CisKKwlkZWJfaW5mbygiY29sZDogJWRcbiIsICpjb2xkKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXo2MDI3X3VzYl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVklEX0FaVVJFV0FWRSwgVVNCX1BJRF9BWlVSRVdBVkVfQVo2MDI3KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCAgVVNCX1BJRF9URVJSQVRFQ19EVkJTMkNJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1RFQ0hOSVNBVCwgVVNCX1BJRF9URUNITklTQVRfVVNCMl9IRENJKSB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhejYwMjdfdXNiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGF6NjAyN19wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKwkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKKwkuZmlybXdhcmUgICAgICAgICAgICA9ICJkdmItdXNiLWF6NjAyNy0wMy5mdyIsCisJLm5vX3JlY29ubmVjdCAgICAgICAgPSAxLAorCisJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUpLAorCS5pZGVudGlmeV9zdGF0ZQkJPSBhejYwMjdfaWRlbnRpZnlfc3RhdGUsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gYXo2MDI3X3N0cmVhbWluZ19jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBhejYwMjdfZnJvbnRlbmRfYXR0YWNoLAorCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gMTAsCisJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKy8qCisJLnBvd2VyX2N0cmwgICAgICAgPSBhejYwMjdfcG93ZXJfY3RybCwKKwkucmVhZF9tYWNfYWRkcmVzcyA9IGF6NjAyN19yZWFkX21hY19hZGRyLAorICovCisJLnJjX2tleV9tYXAgICAgICAgPSBhejYwMjdfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoYXo2MDI3X3JjX2tleXMpLAorCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAorCS5yY19xdWVyeSAgICAgICAgID0gYXo2MDI3X3JjX3F1ZXJ5LAorCS5pMmNfYWxnbyAgICAgICAgID0gJmF6NjAyN19pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJLm5hbWUgPSAiQVpVUkVXQVZFIERWQi1TL1MyIFVTQjIuMCAoQVo2MDI3KSIsCisJCQkuY29sZF9pZHMgPSB7ICZhejYwMjdfdXNiX3RhYmxlWzBdLCBOVUxMIH0sCisJCQkud2FybV9pZHMgPSB7IE5VTEwgfSwKKwkJfSwKKwkJeyBOVUxMIH0sCisJfQorfTsKKworLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF6NjAyN191c2JfZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX2F6NjAyNyIsCisJLnByb2JlIAkJPSBhejYwMjdfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0IAk9IGF6NjAyN191c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgCT0gYXo2MDI3X3VzYl90YWJsZSwKK307CisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgYXo2MDI3X3VzYl9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF6NjAyN191c2JfZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gKCVkKSIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhejYwMjdfdXNiX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmF6NjAyN191c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXo2MDI3X3VzYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhejYwMjdfdXNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWRhbXMgWHUgPEFkYW1zLnh1QGF6d2F2ZS5jb20uY24+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQVpVUkVXQVZFIERWQi1TL1MyIFVTQjIuMCAoQVo2MDI3KSIpOworTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhZmUxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfRFZCX1VTQl9WUDYwMjdfSF8KKyNkZWZpbmUgX0RWQl9VU0JfVlA2MDI3X0hfCisKKyNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJhejYwMjciCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCisKK2V4dGVybiBpbnQgZHZiX3VzYl9hejYwMjdfZGVidWc7CisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9hejYwMjdfZGVidWcsIDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9hejYwMjdfZGVidWcsIDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9hejYwMjdfZGVidWcsIDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9mZShhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9hejYwMjdfZGVidWcsIDB4MDgsIGFyZ3MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IDA1ZmIyOGU5Li5hN2I4NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0xMTg0LDYgKzExODQsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweDkwLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBpbnQgY3h1c2JfbXlnaWNhX2Q2ODlfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCmluZGV4IDQ5NWE5MDUuLjgzZmMyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCkBAIC00Miw3ICs0Miw2IEBACiAJdTE2IG10MjA2MF9pZjFbMl07CiAJdTggcmNfdG9nZ2xlOwogCXU4IHJjX2NvdW50ZXI7Ci0JdTggcmNfZnVuY192ZXJzaW9uOwogCXU4IGlzX2RpYjcwMDBwYzsKIAl1OCBmd191c2VfbmV3X2kyY19hcGk7CiAJdTggZGlzYWJsZV9zdHJlYW1pbmdfbWFzdGVyX21vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwppbmRleCAwZDNjOWE5Li40Zjk2MWQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC00NzEsMTQgKzQ3MSwyMDkgQEAKIAlyZXR1cm4gZGliMDcwMF9jdHJsX3dyKGFkYXAtPmRldiwgYiwgNCk7CiB9CiAKKy8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCisjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAorCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFJDIHJlc3BvbnNlIHBhY2tldCBzdGFydGluZyBpbiBmaXJtd2FyZSAxLjIwICovCitzdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7CisJdTggcmVwb3J0X2lkOworCXU4IGRhdGFfc3RhdGU7CisJdTE2IHN5c3RlbTsKKwl1OCBkYXRhOworCXU4IG5vdF9kYXRhOworfTsKKyNkZWZpbmUgUkNfTVNHX1NJWkVfVjFfMjAgNgorCitzdGF0aWMgdm9pZCBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnB1cmIpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcDsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3Q7CisJc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKKwl1OCAqYnVmOworCWludCBmb3VuZCA9IDA7CisJdTMyIGV2ZW50OworCWludCBzdGF0ZTsKKwlpbnQgaTsKKworCWRlYl9pbmZvKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGQtPnJjX2lucHV0X2RldiA9PSBOVUxMKSB7CisJCS8qIFRoaXMgd2lsbCBvY2N1ciBpZiBkaXNhYmxlX3JjX3BvbGxpbmc9MSAqLworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybjsKKwl9CisKKwlrZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0ID0gZC0+cHJpdjsKKwlidWYgPSAodTggKilwdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAocHVyYi0+c3RhdHVzIDwgMCkgeworCQlkZWJfaW5mbygiZGlzY29udGludWluZyBwb2xsaW5nXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGggIT0gUkNfTVNHX1NJWkVfVjFfMjApIHsKKwkJZGViX2luZm8oIm1hbGZvcm1lZCByYyBtc2cgc2l6ZT0lZFxuIiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCisJZXZlbnQgPSAwOworCXN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZGViX2RhdGEoIklSIHJhdyAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAobGVuICVkKVxuIiwgYnVmWzBdLAorCQkgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJc3dpdGNoIChkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8pIHsKKwljYXNlIDA6CisJCS8qIE5FQyBQcm90b2NvbCAqLworCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOworCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07CisJCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKKwkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOworCisJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLworCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKKwkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7CisJCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogUkM1IFByb3RvY29sICovCisJCXBvbGxfcmVwbHkucmVwb3J0X2lkICA9IGJ1ZlswXTsKKwkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOworCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7CisJCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCisJCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAorCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlkZWJfZGF0YSgicmlkPSUwMnggZHM9JTAyeCBzbT0lMDR4IGQ9JTAyeCBuZD0lMDJ4XG4iLAorCQkgcG9sbF9yZXBseS5yZXBvcnRfaWQsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSwKKwkJIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCisJLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKKwkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgeworCQkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAwKSB7CisJCWVycigiVW5rbm93biByZW1vdGUgY29udHJvbGxlciBrZXk6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCQlkLT5sYXN0X2V2ZW50ID0gMDsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKKwkJLyogTmV3IGtleSBoaXQgKi8KKwkJc3QtPnJjX2NvdW50ZXIgPSAwOworCQlldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisJCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgeworCQkvKiBLZXkgcmVwZWF0ZWQgKi8KKwkJc3QtPnJjX2NvdW50ZXIrKzsKKworCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLworCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKKwkJCWV2ZW50ID0gZC0+bGFzdF9ldmVudDsKKwkJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQkJc3QtPnJjX2NvdW50ZXIgPSBSQ19SRVBFQVRfREVMQVlfVjFfMjA7CisJCX0KKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gZGF0YSBzdGF0ZSBbJWRdIiwgcG9sbF9yZXBseS5kYXRhX3N0YXRlKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ6CisJCWJyZWFrOworCWNhc2UgUkVNT1RFX0tFWV9QUkVTU0VEOgorCQlkZWJfaW5mbygia2V5IHByZXNzZWRcbiIpOworCQlkLT5sYXN0X2V2ZW50ID0gZXZlbnQ7CisJY2FzZSBSRU1PVEVfS0VZX1JFUEVBVDoKKwkJZGViX2luZm8oImtleSByZXBlYXRlZFxuIik7CisJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBldmVudCwgMSk7CisJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKKwkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOworCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworcmVzdWJtaXQ6CisJLyogQ2xlYW4gdGhlIGJ1ZmZlciBiZWZvcmUgd2UgcmVxdWV1ZSAqLworCW1lbXNldChwdXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIFJDX01TR19TSVpFX1YxXzIwKTsKKworCS8qIFJlcXVldWUgVVJCICovCisJdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKIGludCBkaWIwNzAwX3JjX3NldHVwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwogCXU4IHJjX3NldHVwWzNdID0ge1JFUVVFU1RfU0VUX1JDLCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIDB9OwotCWludCBpID0gZGliMDcwMF9jdHJsX3dyKGQsIHJjX3NldHVwLCAzKTsKKwlzdHJ1Y3QgdXJiICpwdXJiOworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoZC0+cHJvcHMucmNfa2V5X21hcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFNldCB0aGUgSVIgbW9kZSAqLworCWkgPSBkaWIwNzAwX2N0cmxfd3IoZCwgcmNfc2V0dXAsIDMpOwogCWlmIChpPDApIHsKIAkJZXJyKCJpciBwcm90b2NvbCBzZXR1cCBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KKworCWlmIChzdC0+ZndfdmVyc2lvbiA8IDB4MTAyMDApCisJCXJldHVybiAwOworCisJLyogU3RhcnRpbmcgaW4gZmlybXdhcmUgMS4yMCwgdGhlIFJDIGluZm8gaXMgcHJvdmlkZWQgb24gYSBidWxrIHBpcGUgKi8KKwlwdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAocHVyYiA9PSBOVUxMKSB7CisJCWVycigicmMgdXNiIGFsbG9jIHVyYiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyhSQ19NU0dfU0laRV9WMV8yMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHB1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCWVycigicmMga3phbGxvYyBmYWlsZWRcbiIpOworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJdXNiX2ZpbGxfYnVsa191cmIocHVyYiwgZC0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIDEpLAorCQkJICBwdXJiLT50cmFuc2Zlcl9idWZmZXIsIFJDX01TR19TSVpFX1YxXzIwLAorCQkJICBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uLCBkKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoInJjIHN1Ym1pdCB1cmIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA0NDk3MmQwLi4zNGVhYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTQ3MiwyMCArNDcyLDI1IEBACiAKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCiAjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWSA2Ci0jZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAogCi0KLQotLyogVXNlZCBieSBmaXJtd2FyZSB2ZXJzaW9ucyA8IDEuMjAgKGRlcHJlY2F0ZWQpICovCi1zdGF0aWMgaW50IGRpYjA3MDBfcmNfcXVlcnlfbGVnYWN5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgICBpbnQgKnN0YXRlKQorc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKIAl1OCBrZXlbNF07CiAJaW50IGk7CiAJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwogCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7CisKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWlmIChzdC0+ZndfdmVyc2lvbiA+PSAweDEwMjAwKSB7CisJCS8qIEZvciAxLjIwIGZpcm13YXJlICwgV2UgbmVlZCB0byBrZWVwIHRoZSBSQyBwb2xsaW5nCisJCSAgIGNhbGxiYWNrIHNvIHdlIGNhbiByZXVzZSB0aGUgaW5wdXQgZGV2aWNlIHNldHVwIGluCisJCSAgIGR2Yi11c2ItcmVtb3RlLmMuICBIb3dldmVyLCB0aGUgYWN0dWFsIHdvcmsgaXMgYmVpbmcgZG9uZQorCQkgICBpbiB0aGUgYnVsayBVUkIgY29tcGxldGlvbiBoYW5kbGVyLiAqLworCQlyZXR1cm4gMDsKKwl9CisKIAlpPWRpYjA3MDBfY3RybF9yZChkLHJjX3JlcXVlc3QsMixrZXksNCk7CiAJaWYgKGk8PTApIHsKIAkJZXJyKCJSQyBRdWVyeSBGYWlsZWQiKTsKQEAgLTU1NywxNDkgKzU2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgUkMgcmVzcG9uc2UgcGFja2V0IHN0YXJ0aW5nIGluIGZpcm13YXJlIDEuMjAgKi8KLXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHsKLQl1OCByZXBvcnRfaWQ7Ci0JdTggZGF0YV9zdGF0ZTsKLQl1MTYgc3lzdGVtOwotCXU4IGRhdGE7Ci0JdTggbm90X2RhdGE7Ci19OwotCi0vKiBUaGlzIHN1cHBvcnRzIHRoZSBuZXcgSVIgcmVzcG9uc2UgZm9ybWF0IGZvciBmaXJtd2FyZSB2MS4yMCAqLwotc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwotCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7Ci0Jc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKLQl1OCBidWZbNl07Ci0JaW50IGk7Ci0JaW50IHN0YXR1czsKLQlpbnQgYWN0bGVuOwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBTZXQgaW5pdGlhbCByZXN1bHRzIGluIGNhc2Ugd2UgZXhpdCB0aGUgZnVuY3Rpb24gZWFybHkgKi8KLQkqZXZlbnQgPSAwOwotCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKLQotCS8qIEZpcm13YXJlIHYxLjIwIHByb3ZpZGVzIFJDIGRhdGEgdmlhIGJ1bGsgZW5kcG9pbnQgMSAqLwotCXN0YXR1cyA9IHVzYl9idWxrX21zZyhkLT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgMSksIGJ1ZiwKLQkJCSAgICAgIHNpemVvZihidWYpLCAmYWN0bGVuLCA1MCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJLyogTm8gZGF0YSBhdmFpbGFibGUgKG1lYW5pbmcgbm8ga2V5IHByZXNzKSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQotCXN3aXRjaCAoZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvKSB7Ci0JY2FzZSAwOgotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOwotCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07Ci0JCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwotCi0JCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwotCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKLQkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7Ci0JCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQlpZiAoYWN0bGVuICE9IHNpemVvZihidWYpKSB7Ci0JCS8qIFdlIGRpZG4ndCBnZXQgYmFjayB0aGUgNiBieXRlIG1lc3NhZ2Ugd2UgZXhwZWN0ZWQgKi8KLQkJZXJyKCJVbmV4cGVjdGVkIFJDIHJlc3BvbnNlIHNpemUgWyVkXSIsIGFjdGxlbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07Ci0JcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07Ci0KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7Ci0JCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCi0JCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAotCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCi0JLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKLQkJCXJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZm91bmQgPT0gMCkgewotCQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMDR4ICUwMnggJTAyeCIsCi0JCQlwb2xsX3JlcGx5LnN5c3RlbSwKLQkJCXBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7Ci0JCWQtPmxhc3RfZXZlbnQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKLQkJLyogTmV3IGtleSBoaXQgKi8KLQkJc3QtPnJjX2NvdW50ZXIgPSAwOwotCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJZC0+bGFzdF9ldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQl9IGVsc2UgaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAyKSB7Ci0JCS8qIEtleSByZXBlYXRlZCAqLwotCQlzdC0+cmNfY291bnRlcisrOwotCi0JCS8qIHByZXZlbnRzIHVud2FudGVkIGRvdWJsZSBoaXRzICovCi0JCWlmIChzdC0+cmNfY291bnRlciA+IFJDX1JFUEVBVF9ERUxBWV9WMV8yMCkgewotCQkJKmV2ZW50ID0gZC0+bGFzdF9ldmVudDsKLQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZX1YxXzIwOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJVbmtub3duIGRhdGEgc3RhdGUgWyVkXSIsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKLQotCS8qIEJlY2F1c2Ugc29tZSBwZW9wbGUgbWF5IGhhdmUgaW1wcm9wZXJseSBuYW1lZCBmaXJtd2FyZSBmaWxlcywKLQkgICBsZXQncyBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIHRoZSBuZXcgZmlybXdhcmUgY2FsbCBvciB0aGUgbGVnYWN5Ci0JICAgY2FsbCBiYXNlZCBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbiBlbWJlZGRlZCBpbiB0aGUgZmlsZSAqLwotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDApIHsKLQkJdTMyIGh3dmVyLCByb212ZXIsIHJhbXZlciwgZnd0eXBlOwotCQlpbnQgcmV0ID0gZGliMDcwMF9nZXRfdmVyc2lvbihkLCAmaHd2ZXIsICZyb212ZXIsICZyYW12ZXIsCi0JCQkJCSAgICAgICZmd3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJDb3VsZCBub3QgZGV0ZXJtaW5lIHZlcnNpb24gaW5mbyIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChyYW12ZXIgPCAweDEwMjAwKQotCQkJc3QtPnJjX2Z1bmNfdmVyc2lvbiA9IDE7Ci0JCWVsc2UKLQkJCXN0LT5yY19mdW5jX3ZlcnNpb24gPSAyOwotCX0KLQotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDIpCi0JCXJldHVybiBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKGQsIGV2ZW50LCBzdGF0ZSk7Ci0JZWxzZQotCQlyZXR1cm4gZGliMDcwMF9yY19xdWVyeV9sZWdhY3koZCwgZXZlbnQsIHN0YXRlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWIwNzAwX3JjX2tleXNbXSA9IHsKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCiAJeyAweDA3MDAsIEtFWV9NVVRFIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggYmMzNTgxZC4uYWU4YjU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNjQsNiArNjQsOCBAQAogI2RlZmluZSBVU0JfVklEX0hVTUFYX0NPRVgJCQkweDEwYjkKICNkZWZpbmUgVVNCX1ZJRF83NzQJCQkJMHg3YTY5CiAjZGVmaW5lIFVTQl9WSURfRVZPTFVURVBDCQkJMHgxZTU5CisjZGVmaW5lIFVTQl9WSURfQVpVUkVXQVZFCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfVEVDSE5JU0FUCQkJMHgxNGY3CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKQEAgLTEzOCw2ICsxNDAsNyBAQAogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDIxX0NPTEQJCQkweDMyMDcKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9XQVJNCQkJMHgzMjA4CiAjZGVmaW5lIFVTQl9QSURfVElOWVRXSU4JCQkJMHgzMjI2CisjZGVmaW5lIFVTQl9QSURfVElOWVRXSU5fMgkJCQkweGU0MDIKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX0NPTEQJCQkweDMyMjMKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX1dBUk0JCQkweDMyMjQKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQ09MRAkJCTB4ODEwNQpAQCAtMjA5LDYgKzIxMiw3IEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjcxRQkJCTB4MDIyYgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MkUJCQkweDAyMzYKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNFCQkJMHgwMjM3CisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjMxMEUJCQkweDMyMTEKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRQkJCTB4MDIzYQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFX1NFCQkJMHgwMjNiCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczQQkJCTB4MDI0MwpAQCAtMjQ4LDYgKzI1Miw3IEBACiAjZGVmaW5lIFVTQl9QSURfRElHSVZPWF9NSU5JX1NMX1dBUk0JCQkweGUzNjEKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfQ09MRAkJCTB4MGJjNgogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCMl9XQVJNCQkJMHgwYmM3CisjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFYyMDAwRFMJCQkweDZhMDQKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfQ09MRAkJCTB4NjAyNQogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9XQVJNCQkJMHg2MDI2CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQCQkweDZmMDAKQEAgLTI5MCw1ICsyOTUsNyBAQAogI2RlZmluZSBVU0JfUElEX0ZSSUlPX1dISVRFCQkJCTB4MDAwMQogI2RlZmluZSBVU0JfUElEX1RWV0FZX1BMVVMJCQkJMHgwMDAyCiAjZGVmaW5lIFVTQl9QSURfU1ZFT05fU1RWMjAJCQkJMHhlMzlkCi0KKyNkZWZpbmUgVVNCX1BJRF9BWlVSRVdBVkVfQVo2MDI3CQkJMHgzMjc1CisjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfRFZCUzJDSQkJCTB4MzI3NQorI2RlZmluZSBVU0JfUElEX1RFQ0hOSVNBVF9VU0IyX0hEQ0kJCQkweDAwMDIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKaW5kZXggZTMzMWRiOC4uNWQ5MWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZSksR0ZQX0tFUk5FTCk7CiAJaWYgKGQgPT0gTlVMTCkgewogCQllcnIoIm5vIG1lbW9yeSBmb3IgJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZC0+dWRldiA9IHVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggNmI1ZGVkOS4uYTAzZWY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJCWNhc2UgUkVNT1RFX0tFWV9SRVBFQVQ6CiAJCQlkZWJfcmMoImtleSByZXBlYXRlZFxuIik7CiAJCQlpbnB1dF9ldmVudChkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOwogCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwppbmRleCA2NDEzMmMwLi5hY2NjNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKQEAgLTEsNiArMSw3IEBACiAvKiBEVkIgVVNCIGZyYW1ld29yayBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUKICoJRFZCV29ybGQgRFZCLVMgMjEwMSwgMjEwMiwgRFZCLVMyIDIxMDQsIERWQi1DIDMxMDEsCi0qCVRlVmlpIFM2MDAsIFM2MzAsIFM2NTAgQ2FyZHMKKyoJVGVWaWkgUzYwMCwgUzYzMCwgUzY1MCwKKyoJUHJvZiAxMTAwLCA3NTAwIENhcmRzCiAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC00NjksMTEgKzQ3MCwxMyBAQAogCQkJCQkJCQlpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJaW50IHJldCA9IDA7CiAJaW50IGxlbiwgaSwgajsKIAogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJdWRldiA9IGQtPnVkZXY7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC00ODgsOCArNDkxLDEzIEBACiAJCX0KIAkJY2FzZSAoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6IHsKIAkJCXU4IG9idWZbMl07CisKKwkJCW9idWZbMF0gPSAxOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMV07Lyogb2ZmLW9uICovCisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg4YSwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlvYnVmWzBdID0gMzsKLQkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMF07LyogMTN2LTE4diAqLwogCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OGEsIDAsIDAsCiAJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CkBAIC01MjcsNiArNTM1LDE3IEBACiAJCQkJCWkgKz0gMTY7CiAJCQkJCWxlbiAtPSAxNjsKIAkJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJCX0gZWxzZSBpZiAoKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IDB4NzUwMCkKKwkJCQkJJiYgKGogPCAobnVtIC0gMSkpKSB7CisJCQkJLyogd3JpdGUgcmVnaXN0ZXIgYWRkciBiZWZvcmUgcmVhZCAqLworCQkJCXU4IG9idWZbbXNnW2pdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSBtc2dbaiArIDFdLmxlbjsKKwkJCQlvYnVmWzFdID0gKG1zZ1tqXS5hZGRyIDw8IDEpOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnW2pdLmJ1ZiwgbXNnW2pdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTIsIDAsIDAsCisJCQkJCQlvYnVmLCBtc2dbal0ubGVuICsgMiwKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQkvKiB3cml0ZSByZWdpc3RlcnMgKi8KIAkJCQl1OCBvYnVmW21zZ1tqXS5sZW4gKyAyXTsKQEAgLTY1MSwxOCArNjcwLDI1IEBACiAKIHN0YXRpYyBpbnQgZHcyMTB4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RhdGljIHU4IGNvbW1hbmRfMTN2WzFdID0gezB4MDB9OwotCXN0YXRpYyB1OCBjb21tYW5kXzE4dlsxXSA9IHsweDAxfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKLQkJey5hZGRyID0gRFcyMTAyX1ZPTFRBR0VfQ1RSTCwgLmZsYWdzID0gMCwKLQkJCS5idWYgPSBjb21tYW5kXzEzdiwgLmxlbiA9IDF9LAorCXN0YXRpYyB1OCBjb21tYW5kXzEzdltdID0gezB4MDAsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kXzE4dltdID0gezB4MDEsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kX29mZltdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBEVzIxMDJfVk9MVEFHRV9DVFJMLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gY29tbWFuZF9vZmYsCisJCS5sZW4gPSAyLAogCX07CiAKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICp1ZGV2X2FkYXAgPQogCQkoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqKShmZS0+ZHZiLT5wcml2KTsKIAlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkKLQkJbXNnWzBdLmJ1ZiA9IGNvbW1hbmRfMTh2OwotCWkyY190cmFuc2ZlcigmdWRldl9hZGFwLT5kZXYtPmkyY19hZGFwLCBtc2csIDEpOworCQltc2cuYnVmID0gY29tbWFuZF8xOHY7CisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJbXNnLmJ1ZiA9IGNvbW1hbmRfMTN2OworCisJaTJjX3RyYW5zZmVyKCZ1ZGV2X2FkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNSw2ICs3NjEsMTggQEAKIAkuY2xrX2RpdiA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHN0djA5MDBfY29uZmlnIHByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NmEsCisJLmRlbW9kX21vZGUgPSAwLAorCS54dGFsID0gMjcwMDAwMDAsCisJLmNsa21vZGUgPSAzLC8qIDAtQ0xLSSwgMi1YVEFMSSwgZWxzZSBBVVRPICovCisJLmRpc2VxY19tb2RlID0gMiwvKiAyLzMgUFdNICovCisJLnR1bjFfbWFkZHJlc3MgPSAwLC8qIDB4NjAgKi8KKwkudHVuMV9hZGMgPSAwLC8qIDIgVnBwICovCisJLnBhdGgxX21vZGUgPSAzLAorCS50dW4xX3R5cGUgPSAzLAorfTsKKwogc3RhdGljIGludCBkdzIxMDRfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCiB7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CkBAIC04ODIsNiArOTIwLDE5IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBpbnQgcHJvZl83NTAwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQoreworCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwgJnByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXAsIDApOworCWlmIChkLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKwlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCisJaW5mbygiQXR0YWNoZWQgU1RWMDkwMCtTVEI2MTAwQSFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHcyMTAyX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYwLApAQCAtMTA3Myw2ICsxMTI0LDcgQEAKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzYzMCl9LAogCXtVU0JfREVWSUNFKDB4MzAxMSwgVVNCX1BJRF9QUk9GXzExMDApfSwKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzY2MCl9LAorCXtVU0JfREVWSUNFKDB4MzAzNCwgMHg3NTAwKX0sCiAJeyB9CiB9OwogCkBAIC0xMzg3LDkgKzE0MzksMzAgQEAKIAl9CiB9OwogCitzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcDc1MDA7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGQ3NTAwID0geworCSJQcm9mIDc1MDAgVVNCIERWQi1TMiIsCisJeyZkdzIxMDJfdGFibGVbOV0sIE5VTEx9LAorCXtOVUxMfSwKK307CisKIHN0YXRpYyBpbnQgZHcyMTAyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisKKwlwNzUwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwNzUwMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogY29weSBkZWZhdWx0IHN0cnVjdHVyZSAqLworCW1lbWNweShwNzUwMCwgJnM2eDBfcHJvcGVydGllcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcykpOworCS8qIGZpbGwgb25seSBkaWZmZXJlbnQgZmllbGRzICovCisJcDc1MDAtPmZpcm13YXJlID0gImR2Yi11c2ItcDc1MDAuZnciOworCXA3NTAwLT5kZXZpY2VzWzBdID0gZDc1MDA7CisJcDc1MDAtPnJjX2tleV9tYXAgPSB0YnNfcmNfa2V5czsKKwlwNzUwMC0+cmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRSh0YnNfcmNfa2V5cyk7CisJcDc1MDAtPmFkYXB0ZXItPmZyb250ZW5kX2F0dGFjaCA9IHByb2ZfNzUwMF9mcm9udGVuZF9hdHRhY2g7CisKIAlpZiAoMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDJfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwNF9wcm9wZXJ0aWVzLApAQCAtMTM5Nyw2ICsxNDcwLDggQEAKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzMxMDFfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJnM2eDBfcHJvcGVydGllcywKKwkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAorCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgcDc1MDAsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikpCiAJCXJldHVybiAwOwogCkBAIC0xNDMxLDYgKzE1MDYsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0LCIKIAkJCQkiIERWQi1DIDMxMDEgVVNCMi4wLCIKIAkJCQkiIFRlVmlpIFM2MDAsIFM2MzAsIFM2NTAsIFM2NjAgVVNCMi4wLCIKLQkJCQkiIFByb2YgMTEwMCBVU0IyLjAgZGV2aWNlcyIpOworCQkJCSIgUHJvZiAxMTAwLCA3NTAwIFVTQjIuMCBkZXZpY2VzIik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKaW5kZXggZWJiN2I5Zi4uZDE0YmQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJezB4NzYsIDB4MEN9LAogfTsKIAotY29uc3Qgc3RhdGljIGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOworc3RhdGljIGNvbnN0IGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOwogCiBzdGF0aWMgaW50IGpkdmJ0OTA1MDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwppbmRleCBlZjliN2JlLi43MzdmZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSAicXQxMDEwLmgiCiAjaW5jbHVkZSAidGRhMTAwNHguaCIKICNpbmNsdWRlICJ0ZGE4Mjd4LmgiCisKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogLyogZGVidWcgKi8KQEAgLTE1OCwxMSArMTYxLDE0IEBACiAKIAkJCWNhc2UgMHg5MzoKIAkJCWNhc2UgMHg5MjoKKwkJCWNhc2UgMHg4MzogLyogcGlubmFjbGUgUENUVjMxMGUgKi8KKwkJCWNhc2UgMHg4MjoKIAkJCQltLT5yZXBfY291bnQgPSAwOwogCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQlnb3RvIHVubG9jazsKIAogCQkJY2FzZSAweDkxOgorCQkJY2FzZSAweDgxOiAvKiBwaW5uYWNsZSBQQ1RWMzEwZSAqLwogCQkJCS8qIHByZXZlbnQgaW1tZWRpYXRlIGF1dG8tcmVwZWF0ICovCiAJCQkJaWYgKCsrbS0+cmVwX2NvdW50ID4gMikKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9SRVBFQVQ7CkBAIC01NDYsNiArNTUyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbTkyMHhfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgYWRhcC0+ZmUsCisJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDYxLAorCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOworCXJldHVybiAwOworfQorCiAvKiBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgbWVnYXNreV9yY19pbml0IFtdID0gewogCXsgTTkyMDZfUkNfSU5JVDIsIDB4YTggfSwKQEAgLTU2Miw2ICs1NzYsMTggQEAKIAl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgcGlubmFjbGUzMTBlX2luaXRbXSA9IHsKKwkvKiB3aXRob3V0IHRoZXNlIHRoZSB0dW5lciBkb24ndCB3b3JrICovCisJeyAweGZmMjAsICAgICAgICAgMHg5YiB9LAorCXsgMHhmZjIyLCAgICAgICAgIDB4NzAgfSwKKworCS8qIHJjIHNldHRpbmdzICovCisJeyAweGZmNTAsICAgICAgICAgMHg4MCB9LAorCXsgTTkyMDZfUkNfSU5JVDEsIDB4MDAgfSwKKwl7IE05MjA2X1JDX0lOSVQyLCAweGZmIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCiAvKiBpciBrZXltYXBzICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IG1lZ2Fza3lfcmNfa2V5cyBbXSA9IHsKIAl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCkBAIC02MDIsMTEgKzYyOCw2OCBAQAogCXsgMHgwMDFlLCBLRVlfVk9MVU1FVVAgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgcGlubmFjbGUzMTBlX3JjX2tleXNbXSA9IHsKKwl7IDB4MTYsIEtFWV9QT1dFUiB9LAorCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAorCXsgMHgwZiwgS0VZX1RFWFQgfSwKKwl7IDB4NDgsIEtFWV9NRURJQSB9LAkJLyogcHJldmlldyAqLworCXsgMHgxYywgS0VZX0VQRyB9LAorCXsgMHgwNCwgS0VZX0xJU1QgfSwJCQkvKiByZWNvcmQgbGlzdCAqLworCXsgMHgwMywgS0VZXzEgfSwKKwl7IDB4MDEsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MWQsIEtFWV81IH0sCisJeyAweDFmLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MTksIEtFWV84IH0sCisJeyAweDFiLCBLRVlfOSB9LAorCXsgMHgxNSwgS0VZXzAgfSwKKwl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKKwl7IDB4NGEsIEtFWV9DTEVBUiB9LAorCXsgMHgxMywgS0VZX0JBQ0sgfSwKKwl7IDB4MDAsIEtFWV9UQUIgfSwKKwl7IDB4NGIsIEtFWV9VUCB9LAorCXsgMHg0ZSwgS0VZX0xFRlQgfSwKKwl7IDB4NTIsIEtFWV9SSUdIVCB9LAorCXsgMHg1MSwgS0VZX0RPV04gfSwKKwl7IDB4NGYsIEtFWV9FTlRFUiB9LAkJLyogY291bGQgYWxzbyBiZSBLRVlfT0sgKi8KKwl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxMSwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNCwgS0VZX1BMQVkgfSwKKwl7IDB4NGMsIEtFWV9QQVVTRSB9LAorCXsgMHgxYSwgS0VZX1NUT1AgfSwKKwl7IDB4NDAsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MTIsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg0MSwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiBSZXBsYXkgKi8KKwl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAkJLyogU2tpcCAqLworCXsgMHg1NCwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSAqLworLyoJeyAweDUwLCBLRVlfU0FQIH0sCSovCQkvKiBTYXAgKi8KKwl7IDB4NDcsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogUGlwICovCisJeyAweDRkLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsU2NyZWVuICovCisJeyAweDA4LCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MGUsIEtFWV9NVVRFIH0sCisvKgl7IDB4NDksIEtFWV9MUiB9LAkqLwkJLyogTC9SICovCisJeyAweDA3LCBLRVlfU0xFRVAgfSwJCS8qIEhpYmVybmF0ZSAqLworCXsgMHgwOCwgS0VZX01FRElBIH0sCQkvKiBBL1YgKi8KKwl7IDB4MGUsIEtFWV9NRU5VIH0sCQkJLyogUmVjYWxsICovCisJeyAweDQ1LCBLRVlfWk9PTUlOIH0sCisJeyAweDQ2LCBLRVlfWk9PTU9VVCB9LAorCXsgMHgxOCwgS0VZX1RWIH0sCQkJLyogUmVkICovCisJeyAweDUzLCBLRVlfVkNSIH0sCQkJLyogR3JlZW4gKi8KKwl7IDB4NWUsIEtFWV9TQVQgfSwJCQkvKiBZZWxsb3cgKi8KKwl7IDB4NWYsIEtFWV9QTEFZRVIgfSwJCS8qIEJsdWUgKi8KK307CisKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgbWVnYXNreV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpZ2l2b3hfbWluaV9paV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRwb3NoX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllczsKIAogc3RhdGljIGludCBtOTIweF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTY1Miw2ICs3MzUsMTMgQEAKIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAorCQlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzLAorCQkJCQkgIFRISVNfTU9EVUxFLCAmZCwgYWRhcHRlcl9ucik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmNfaW5pdF9zZXEgPSBwaW5uYWNsZTMxMGVfaW5pdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCS8qIEFub3RoZXIgaW50ZXJmYWNlIG9uIGEgbXVsdGktdHVuZXIgZGV2aWNlICovCkBAIC02ODIsNiArNzcyLDcgQEAKIAkJCSAgICAgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9XQVJNKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9DT0xEKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLCBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzMTBFKSB9LAogCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtOTIweF90YWJsZSk7CkBAIC04OTUsNiArOTg2LDU2IEBACiAJIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBOVUxMLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBwaW5uYWNsZTMxMGVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUocGlubmFjbGUzMTBlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAorCisJLmlkZW50aWZ5X3N0YXRlICAgPSBtOTIweF9pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHt7CisJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCisJCS5waWRfZmlsdGVyX2NvdW50ID0gOCwKKwkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIweF9waWRfZmlsdGVyLAorCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjB4X3BpZF9maWx0ZXJfY3RybCwKKworCQkuZnJvbnRlbmRfYXR0YWNoICA9IG05MjB4X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKKwkJLnR1bmVyX2F0dGFjaCAgICAgPSBtOTIweF9mbWQxMjE2bWVfdHVuZXJfYXR0YWNoLAorCisJCS5zdHJlYW0gPSB7CisJCQkudHlwZSA9IFVTQl9JU09DLAorCQkJLmNvdW50ID0gNSwKKwkJCS5lbmRwb2ludCA9IDB4ODQsCisJCQkudSA9IHsKKwkJCQkuaXNvYyA9IHsKKwkJCQkJLmZyYW1lc3BlcnVyYiA9IDEyOCwKKwkJCQkJLmZyYW1lc2l6ZSA9IDU2NCwKKwkJCQkJLmludGVydmFsID0gMSwKKwkJCQl9CisJCQl9CisJCX0sCisJfSB9LAorCS5pMmNfYWxnbyAgICAgICAgID0gJm05MjB4X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIlBpbm5hY2xlIFBDVFYgMzEwZSIsCisJCQl7ICZtOTIweF90YWJsZVs2XSwgTlVMTCB9LAorCQkJeyBOVUxMIH0sCisJCX0KKwl9Cit9OworCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbTkyMHhfZHJpdmVyID0gewogCS5uYW1lCQk9ICJkdmJfdXNiX205MjB4IiwKIAkucHJvYmUJCT0gbTkyMHhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKaW5kZXggMzc1MzI4OS4uM2MwNjE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBNOTIwNl9GVwkweDMwCiAKICNkZWZpbmUgTTkyMDZfTUFYX0ZJTFRFUlMgOAotI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgMgorI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgNAogCiAvKgogc2VxdWVuY2VzIGZvdW5kIGluIGxvZ3M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwppbmRleCBkNGUyMzA5Li44MzA1NTc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJCQkJKG1zZ1tpXS5hZGRyPDwxKXwobXNnW2ldLmZsYWdzJkkyQ19NX1JEPzB4MDE6MCksCiAJCQkJCW1zZ1tpXS5idWYsCiAJCQkJCW1zZ1tpXS5sZW4KLQkJCQkJKSE9IG1zZ1tpXS5sZW4pKSB7CisJCQkJCSkpICE9IG1zZ1tpXS5sZW4pIHsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkdmJfdXNiX29wZXJhMV9kZWJ1ZyAmIDB4MTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtMTM5NC5jCmluZGV4IDdjNTQ1OWMyLi5jM2UwZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwpAQCAtOTAsMTMgKzkwLDE0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihmZHR2LT5kZXZpY2UsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgZGV2aWNlKS0+bmU7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKKwlxdWFkbGV0X3QgKmQgPSBkYXRhOwogCWludCByZXQ7CiAKLQlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLCBFWFRDT0RFX0NPTVBBUkVfU1dBUCwKLQkJKF9fZm9yY2UgcXVhZGxldF90ICopJmRhdGFbMV0sIChfX2ZvcmNlIHF1YWRsZXRfdClkYXRhWzBdKTsKLQlkYXRhWzBdID0gZGF0YVsxXTsKKwlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLAorCQkJICAgICBFWFRDT0RFX0NPTVBBUkVfU1dBUCwgJmRbMV0sIGRbMF0pOworCWRbMF0gPSBkWzFdOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5Miw5ICsxOTMsMTMgQEAKIAlpbnQga3ZfbGVuLCBlcnI7CiAJdm9pZCAqa3Zfc3RyOwogCi0Ja3ZfbGVuID0gKHVkLT5tb2RlbF9uYW1lX2t2LT52YWx1ZS5sZWFmLmxlbiAtIDIpICogc2l6ZW9mKHF1YWRsZXRfdCk7Ci0Ja3Zfc3RyID0gQ1NSMTIxMl9URVhUVUFMX0RFU0NSSVBUT1JfTEVBRl9EQVRBKHVkLT5tb2RlbF9uYW1lX2t2KTsKLQorCWlmICh1ZC0+bW9kZWxfbmFtZV9rdikgeworCQlrdl9sZW4gPSAodWQtPm1vZGVsX25hbWVfa3YtPnZhbHVlLmxlYWYubGVuIC0gMikgKiA0OworCQlrdl9zdHIgPSBDU1IxMjEyX1RFWFRVQUxfREVTQ1JJUFRPUl9MRUFGX0RBVEEodWQtPm1vZGVsX25hbWVfa3YpOworCX0gZWxzZSB7CisJCWt2X2xlbiA9IDA7CisJCWt2X3N0ciA9IE5VTEw7CisJfQogCWZkdHYgPSBmZHR2X2FsbG9jKGRldiwgJmZkdHZfMTM5NF9iYWNrZW5kLCBrdl9zdHIsIGt2X2xlbik7CiAJaWYgKCFmZHR2KQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IDUwYzQyYTQuLjFiMzFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtNzQsNyArNzQsNiBAQAogI2RlZmluZSBFTjUwMjIxX1RBR19DQV9JTkZPCQkweDlmODAzMQogCiBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggY3R5cGU7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CkBAIC04MiwxMyArODEsMjcgQEAKIH07CiAKIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggcmVzcG9uc2U7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CiAJdTggb3BlcmFuZFs1MDldOwogfTsKIAorI2RlZmluZSBMQVNUX09QRVJBTkQgKDUwOSAtIDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9vcGVyYW5kcyhzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIGludCBmcm9tLCBpbnQgdG8pCit7CisJbWVtc2V0KCZjLT5vcGVyYW5kW2Zyb21dLCAwLCB0byAtIGZyb20gKyAxKTsKK30KKworc3RhdGljIHZvaWQgcGFkX29wZXJhbmRzKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgaW50IGZyb20pCit7CisJaW50IHRvID0gQUxJR04oZnJvbSwgNCk7CisKKwlpZiAoZnJvbSA8PSB0byAmJiB0byA8PSBMQVNUX09QRVJBTkQpCisJCWNsZWFyX29wZXJhbmRzKGMsIGZyb20sIHRvKTsKK30KKwogI2RlZmluZSBBVkNfREVCVUdfUkVBRF9ERVNDUklQVE9SICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQVZDX0RFQlVHX0RTSVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIEFWQ19ERUJVR19EU0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNApAQCAtMjAyLDc4ICsyMTUsNjUgQEAKIAkJICAgICAgIDE2LCAxLCBtc2csIGxlbmd0aCwgZmFsc2UpOwogfQogCi1zdGF0aWMgaW50IF9fYXZjX3dyaXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAotCQljb25zdCBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIpCitzdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKIAlpbnQgZXJyLCByZXRyeTsKIAotCWlmIChyKQotCQlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKKwlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKIAogCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDY7IHJldHJ5KyspIHsKIAkJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZykpCi0JCQlkZWJ1Z19mY3AoJmMtPmN0eXBlLCBjLT5sZW5ndGgpOworCQkJZGVidWdfZmNwKGZkdHYtPmF2Y19kYXRhLCBmZHR2LT5hdmNfZGF0YV9sZW5ndGgpOwogCiAJCWVyciA9IGZkdHYtPmJhY2tlbmQtPndyaXRlKGZkdHYsIEZDUF9DT01NQU5EX1JFR0lTVEVSLAotCQkJCQkgICAodm9pZCAqKSZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJCQlmZHR2LT5hdmNfZGF0YSwgZmR0di0+YXZjX2RhdGFfbGVuZ3RoKTsKIAkJaWYgKGVycikgewotCQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIGNvbW1hbmQgd3JpdGUgZmFpbGVkXG4iKTsKKwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWlmICghcikKLQkJCXJldHVybiAwOwotCiAJCS8qCiAJCSAqIEFWL0Mgc3BlY3Mgc2F5IHRoYXQgYW5zd2VycyBzaG91bGQgYmUgc2VudCB3aXRoaW4gMTUwIG1zLgogCQkgKiBUaW1lIG91dCBhZnRlciAyMDAgbXMuCiAJCSAqLwogCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGZkdHYtPmF2Y193YWl0LAogCQkJCSAgICAgICBmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQsCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkgIT0gMCkgewotCQkJci0+bGVuZ3RoID0gZmR0di0+cmVzcG9uc2VfbGVuZ3RoOwotCQkJbWVtY3B5KCZyLT5yZXNwb25zZSwgZmR0di0+cmVzcG9uc2UsIHItPmxlbmd0aCk7Ci0KKwkJCQkgICAgICAgbXNlY3NfdG9famlmZmllcygyMDApKSAhPSAwKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAJZGV2X2VycihmZHR2LT5kZXZpY2UsICJGQ1AgcmVzcG9uc2UgdGltZWQgb3V0XG4iKTsKKwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCi1zdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQorc3RhdGljIGJvb2wgaXNfcmVnaXN0ZXJfcmMoc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKIHsKLQlpbnQgcmV0OwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmR0di0+YXZjX211dGV4KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXJldCA9IF9fYXZjX3dyaXRlKGZkdHYsIGMsIHIpOwotCi0JbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHItPm9wY29kZSAgICAgPT0gQVZDX09QQ09ERV9WRU5ET1IgJiYKKwkgICAgICAgci0+b3BlcmFuZFswXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wICYmCisJICAgICAgIHItPm9wZXJhbmRbMV0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSAmJgorCSAgICAgICByLT5vcGVyYW5kWzJdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIgJiYKKwkgICAgICAgci0+b3BlcmFuZFszXSA9PSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKIH0KIAogaW50IGF2Y19yZWN2KHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQogewotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPQotCQkJZGF0YSAtIG9mZnNldG9mKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUsIHJlc3BvbnNlKTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gZGF0YTsKIAogCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQogCQlkZWJ1Z19mY3AoZGF0YSwgbGVuZ3RoKTsKIAotCWlmIChsZW5ndGggPj0gOCAmJgotCSAgICByLT5vcGVyYW5kWzBdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzAgJiYKLQkgICAgci0+b3BlcmFuZFsxXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xICYmCi0JICAgIHItPm9wZXJhbmRbMl0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMiAmJgotCSAgICByLT5vcGVyYW5kWzNdID09IFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MKSB7Ci0JCWlmIChyLT5yZXNwb25zZSA9PSBBVkNfUkVTUE9OU0VfQ0hBTkdFRCkgewotCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwKLQkJCSAgICByLT5vcGVyYW5kWzRdIDw8IDggfCByLT5vcGVyYW5kWzVdKTsKKwlpZiAobGVuZ3RoID49IDggJiYgaXNfcmVnaXN0ZXJfcmMocikpIHsKKwkJc3dpdGNoIChyLT5yZXNwb25zZSkgeworCQljYXNlIEFWQ19SRVNQT05TRV9DSEFOR0VEOgorCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwgci0+b3BlcmFuZFs0XSA8PCA4IHwgci0+b3BlcmFuZFs1XSk7CiAJCQlzY2hlZHVsZV93b3JrKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrKTsKLQkJfSBlbHNlIGlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfSU5URVJJTSkgeworCQkJYnJlYWs7CisJCWNhc2UgQVZDX1JFU1BPTlNFX0lOVEVSSU06CisJCQlpZiAoaXNfcmVnaXN0ZXJfcmMoKHZvaWQgKilmZHR2LT5hdmNfZGF0YSkpCisJCQkJZ290byB3YWtlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsCiAJCQkJICJyZW1vdGUgY29udHJvbCByZXN1bHQgPSAlZFxuIiwgci0+cmVzcG9uc2UpOwogCQl9CkBAIC0yODUsOSArMjg1LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JbWVtY3B5KGZkdHYtPnJlc3BvbnNlLCBkYXRhLCBsZW5ndGgpOwotCWZkdHYtPnJlc3BvbnNlX2xlbmd0aCA9IGxlbmd0aDsKLQorCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgbGVuZ3RoKTsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBsZW5ndGg7Cit3YWtlOgogCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJd2FrZV91cCgmZmR0di0+YXZjX3dhaXQpOwogCkBAIC0zMTgsMTAgKzMxOCwxMSBAQAogICogdHVuaW5nIGNvbW1hbmQgZm9yIHNldHRpbmcgdGhlIHJlbGF0aXZlIExOQiBmcmVxdWVuY3kKICAqIChub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBVkMgc3RhbmRhcmQpCiAgKi8KLXN0YXRpYyB2b2lkIGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCSAgICAgICBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKIAogCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOwpAQCAtMzcwLDE2ICszNzEsMTggQEAKIAkJYy0+b3BlcmFuZFsxM10gPSAweDE7CiAJCWMtPm9wZXJhbmRbMTRdID0gMHhmZjsKIAkJYy0+b3BlcmFuZFsxNV0gPSAweGZmOwotCQljLT5sZW5ndGggPSAyMDsKKworCQlyZXR1cm4gMTY7CiAJfSBlbHNlIHsKLQkJYy0+bGVuZ3RoID0gMTY7CisJCXJldHVybiAxMzsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y190dW5lcl9kc2RfZHZiX2Moc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKIAogCWMtPm9wZXJhbmRbMF0gPSAwOyAgICAvKiBzb3VyY2UgcGx1ZyAqLwpAQCAtNDQwLDE1ICs0NDMsMTQgQEAKIAljLT5vcGVyYW5kWzIwXSA9IDB4MDA7CiAJYy0+b3BlcmFuZFsyMV0gPSAweDAwOwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMjIgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsyMl0pICsgMywgNCk7CisJcmV0dXJuIDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKTsKIH0KIAotc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl9kc2RfZHZiX3Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmcGFyYW1zLT51Lm9mZG07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAogCWMtPm9wY29kZSA9IEFWQ19PUENPREVfRFNEOwogCkBAIC01NDMsNTUgKzU0NSw1OCBAQAogCWMtPm9wZXJhbmRbMTVdID0gMHgwMDsgLyogbmV0d29ya19JRFswXSAqLwogCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogbmV0d29ya19JRFsxXSAqLwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMTcgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsxN10pICsgMywgNCk7CisJcmV0dXJuIDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKTsKIH0KIAogaW50IGF2Y190dW5lcl9kc2Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCiAJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwogCiAJc3dpdGNoIChmZHR2LT50eXBlKSB7CiAJY2FzZSBGSVJFRFRWX0RWQl9TOgotCWNhc2UgRklSRURUVl9EVkJfUzI6IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMsIGMpOyBicmVhazsKLQljYXNlIEZJUkVEVFZfRFZCX0M6IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9UOiBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfUzI6IHBvcyA9IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX0M6IHBvcyA9IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9UOiBwb3MgPSBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcyk7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCW1zbGVlcCg1MDApOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKICNpZiAwCi0JLyogRklYTUU6ICovCi0JLyogdTggKnN0YXR1cyB3YXMgYW4gb3V0LXBhcmFtZXRlciBvZiBhdmNfdHVuZXJfZHNkLCB1bnVzZWQgYnkgY2FsbGVyICovCisJLyoKKwkgKiBGSVhNRToKKwkgKiB1OCAqc3RhdHVzIHdhcyBhbiBvdXQtcGFyYW1ldGVyIG9mIGF2Y190dW5lcl9kc2QsIHVudXNlZCBieSBjYWxsZXIuCisJICogQ2hlY2sgZm9yIEFWQ19SRVNQT05TRV9BQ0NFUFRFRCBoZXJlIGluc3RlYWQ/CisJICovCiAJaWYgKHN0YXR1cykKIAkJKnN0YXR1cyA9IHItPm9wZXJhbmRbMl07CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MDApOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y190dW5lcl9zZXRfcGlkcyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgY2hhciBwaWRjLCB1MTYgcGlkW10pCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLwotCWludCBwb3MsIGs7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0LCBwb3MsIGs7CiAKIAlpZiAocGlkYyA+IDE2ICYmIHBpZGMgIT0gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02MTQsMjQgKzYxOSwyNyBAQAogCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiB0YWJsZUlEICovCiAJCQljLT5vcGVyYW5kW3BvcysrXSA9IDB4MDA7IC8qIGZpbHRlcl9sZW5ndGggKi8KIAkJfQorCXBhZF9vcGVyYW5kcyhjLCBwb3MpOwogCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDUwKTsKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX3R1bmVyX2dldF90cyhzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCi0JaW50IHNsOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldCwgc2w7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02NDYsMjYgKzY1NCwzMyBAQAogCWMtPm9wZXJhbmRbNF0gPSAweDAwOwkvKiBhbnRlbm5hIG51bWJlciAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDA7IAkvKiBzeXN0ZW1fc3BlY2lmaWNfc2VhcmNoX2ZsYWdzICovCiAJYy0+b3BlcmFuZFs2XSA9IHNsOwkvKiBzeXN0ZW1fc3BlY2lmaWNfbXVsdGlwbGV4IHNlbGVjdGlvbl9sZW5ndGggKi8KLQljLT5vcGVyYW5kWzddID0gMHgwMDsJLyogdmFsaWRfZmxhZ3MgWzBdICovCi0JYy0+b3BlcmFuZFs4XSA9IDB4MDA7CS8qIHZhbGlkX2ZsYWdzIFsxXSAqLwotCWMtPm9wZXJhbmRbNyArIHNsXSA9IDB4MDA7IC8qIG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkgKi8KKwkvKgorCSAqIG9wZXJhbmRbN106IHZhbGlkX2ZsYWdzWzBdCisJICogb3BlcmFuZFs4XTogdmFsaWRfZmxhZ3NbMV0KKwkgKiBvcGVyYW5kWzcgKyBzbF06IG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkKKwkgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA3LCAyNCk7CiAKLQljLT5sZW5ndGggPSBmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1QgPyAyNCA6IDI4OworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IGZkdHYtPnR5cGUgPT0gRklSRURUVl9EVkJfVCA/IDI0IDogMjg7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDI1MCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoMjUwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfaWRlbnRpZnlfc3VidW5pdChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTY3OCwzMSArNjkzLDM0IEBACiAJYy0+b3BlcmFuZFs0XSA9IDB4MDg7IC8qIGxlbmd0aCBsb3dieXRlICAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDAwOyAvKiBvZmZzZXQgaGlnaGJ5dGUgKi8KIAljLT5vcGVyYW5kWzZdID0gMHgwZDsgLyogb2Zmc2V0IGxvd2J5dGUgICovCisJY2xlYXJfb3BlcmFuZHMoYywgNywgOCk7IC8qIHBhZGRpbmcgKi8KIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9TVEFCTEUgJiYKIAkgICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgfHwKIAkgICAgKHItPm9wZXJhbmRbM10gPDwgOCkgKyByLT5vcGVyYW5kWzRdICE9IDgpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJjYW5ub3QgcmVhZCBzdWJ1bml0IGlkZW50aWZpZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPIDIyCiAKIGludCBhdmNfdHVuZXJfc3RhdHVzKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgKnN0YXQpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKLQlpbnQgbGVuZ3RoOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IGxlbmd0aCwgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzEwLDI3ICs3MjgsMzAgQEAKIAogCWMtPm9wZXJhbmRbMF0gPSBERVNDUklQVE9SX1RVTkVSX1NUQVRVUzsKIAljLT5vcGVyYW5kWzFdID0gMHhmZjsJLyogcmVhZF9yZXN1bHRfc3RhdHVzICovCi0JYy0+b3BlcmFuZFsyXSA9IDB4MDA7CS8qIHJlc2VydmVkICovCi0JYy0+b3BlcmFuZFszXSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gODsgKi8KLQljLT5vcGVyYW5kWzRdID0gMDsJLyogU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAmIDB4ZmY7ICovCi0JYy0+b3BlcmFuZFs1XSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFs2XSA9IDB4MDA7CisJLyoKKwkgKiBvcGVyYW5kWzJdOiByZXNlcnZlZAorCSAqIG9wZXJhbmRbM106IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gOAorCSAqIG9wZXJhbmRbNF06IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gJiAweGZmCisJICovCisJY2xlYXJfb3BlcmFuZHMoYywgMiwgMzEpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCiAJICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbm5vdCByZWFkIHR1bmVyIHN0YXR1c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlsZW5ndGggPSByLT5vcGVyYW5kWzldOwogCWlmIChyLT5vcGVyYW5kWzFdICE9IDB4MTAgfHwgbGVuZ3RoICE9IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8pIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJnb3QgaW52YWxpZCB0dW5lciBzdGF0dXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJc3RhdC0+YWN0aXZlX3N5c3RlbQkJPSByLT5vcGVyYW5kWzEwXTsKQEAgLTc2NiwyMCArNzg3LDIxIEBACiAJc3RhdC0+Y2FfZHZiX2ZsYWcJCT0gci0+b3BlcmFuZFszMV0gPj4gMyAmIDE7CiAJc3RhdC0+Y2FfZXJyb3JfZmxhZwkJPSByLT5vcGVyYW5kWzMxXSA+PiAyICYgMTsKIAlzdGF0LT5jYV9pbml0aWFsaXphdGlvbl9zdGF0dXMJPSByLT5vcGVyYW5kWzMxXSA+PiAxICYgMTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2xuYl9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyIHZvbHRhZ2UsIGNoYXIgYnVyc3QsCiAJCSAgICBjaGFyIGNvbnR0b25lLCBjaGFyIG5yZGlzZXEsCiAJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkaXNlcWNtZCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBpLCBqLCBrOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgaiwgaywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzg5LDQxICs4MTEsNDEgQEAKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w7Ci0KIAljLT5vcGVyYW5kWzRdID0gdm9sdGFnZTsKIAljLT5vcGVyYW5kWzVdID0gbnJkaXNlcTsKIAotCWkgPSA2OwotCisJcG9zID0gNjsKIAlmb3IgKGogPSAwOyBqIDwgbnJkaXNlcTsgaisrKSB7Ci0JCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CisJCWMtPm9wZXJhbmRbcG9zKytdID0gZGlzZXFjbWRbal0ubXNnX2xlbjsKIAogCQlmb3IgKGsgPSAwOyBrIDwgZGlzZXFjbWRbal0ubXNnX2xlbjsgaysrKQotCQkJYy0+b3BlcmFuZFtpKytdID0gZGlzZXFjbWRbal0ubXNnW2tdOworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSBkaXNlcWNtZFtqXS5tc2dba107CiAJfQorCWMtPm9wZXJhbmRbcG9zKytdID0gYnVyc3Q7CisJYy0+b3BlcmFuZFtwb3MrK10gPSBjb250dG9uZTsKKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWMtPm9wZXJhbmRbaSsrXSA9IGJ1cnN0OwotCWMtPm9wZXJhbmRbaSsrXSA9IGNvbnR0b25lOwotCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIGksIDQpOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX0FDQ0VQVEVEKSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiTE5CIGNvbnRyb2wgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfcmVnaXN0ZXJfcmVtb3RlX2NvbnRyb2woc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9OT1RJRlk7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVU5JVCB8IDc7CkBAIC04MzMsMTAgKzg1NSwxNiBAQAogCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOwogCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOwogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKKwljLT5vcGVyYW5kWzRdID0gMDsgLyogcGFkZGluZyAqLwogCi0JYy0+bGVuZ3RoID0gODsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSA4OworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCXJldHVybiBhdmNfd3JpdGUoZmR0diwgYywgTlVMTCk7CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCisKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGF2Y19yZW1vdGVfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTg1MSwxMSArODc5LDEwIEBACiAjaWYgMCAvKiBGSVhNRTogdW51c2VkICovCiBpbnQgYXZjX3R1bmVyX2hvc3QyY2Eoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTg2NywxNSArODk0LDE2IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCi0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCA4KTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtOTA2LDEyICs5MzQsMTEgQEAKIAogaW50IGF2Y19jYV9hcHBfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTIzLDExICs5NTAsMTIgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKQEAgLTkzOSwxOCArOTY3LDE5IEBACiAJYXBwX2luZm9bNF0gPSAweDAxOwogCW1lbWNweSgmYXBwX2luZm9bNV0sICZyLT5vcGVyYW5kW3Bvc10sIDUgKyByLT5vcGVyYW5kW3BvcyArIDRdKTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTYyLDExICs5OTEsMTQgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLwogCiAJcG9zID0gZ2V0X2NhX29iamVjdF9wb3Mocik7CiAJYXBwX2luZm9bMF0gPSAoRU41MDIyMV9UQUdfQ0FfSU5GTyA+PiAxNikgJiAweGZmOwpAQCAtOTc2LDE3ICsxMDA4LDE4IEBACiAJYXBwX2luZm9bNF0gPSByLT5vcGVyYW5kW3BvcyArIDBdOwogCWFwcF9pbmZvWzVdID0gci0+b3BlcmFuZFtwb3MgKyAxXTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfcmVzZXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTEwMDIsMTkgKzEwMzUsMjAgQEAKIAljLT5vcGVyYW5kWzddID0gMTsgLyogbGVuZ3RoICovCiAJYy0+b3BlcmFuZFs4XSA9IDA7IC8qIGZvcmNlIGhhcmR3YXJlIHJlc2V0ICovCiAKLQljLT5sZW5ndGggPSAxMjsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX3BtdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbXNnLCBpbnQgbGVuZ3RoKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAlpbnQgbGlzdF9tYW5hZ2VtZW50OwogCWludCBwcm9ncmFtX2luZm9fbGVuZ3RoOwogCWludCBwbXRfY21kX2lkOwpAQCAtMTAyMiwxMSArMTA1NiwxMiBAQAogCWludCB3cml0ZV9wb3M7CiAJaW50IGVzX2luZm9fbGVuZ3RoOwogCWludCBjcmMzMl9jc3VtOworCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoYXZjX2RlYnVnICYgQVZDX0RFQlVHX0FQUExJQ0FUSU9OX1BNVCkpCiAJCWRlYnVnX3BtdChtc2csIGxlbmd0aCk7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMDU4LDcgKzEwOTMsNyBAQAogCiAJYy0+b3BlcmFuZFsxMl0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCiAJYy0+b3BlcmFuZFsxM10gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLwotCS8qIGMtPm9wZXJhbmRbMTRdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCiAJYy0+b3BlcmFuZFsxNV0gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCiAJYy0+b3BlcmFuZFsxNl0gPSBtc2dbMl07CiAJYy0+b3BlcmFuZFsxN10gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KQEAgLTExMDYsMTIgKzExNDEsNyBAQAogCQkJd3JpdGVfcG9zICs9IGVzX2luZm9fbGVuZ3RoOwogCQl9CiAJfQotCi0JLyogQ1JDICovCi0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKLQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOworCXdyaXRlX3BvcyArPSA0OyAvKiBDUkMgKi8KIAogCWMtPm9wZXJhbmRbN10gPSAweDgyOwogCWMtPm9wZXJhbmRbOF0gPSAod3JpdGVfcG9zIC0gMTApID4+IDg7CkBAIC0xMTIzLDI4ICsxMTUzLDMxIEBACiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAzXSA9IChjcmMzMl9jc3VtID4+IDE2KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAyXSA9IChjcmMzMl9jc3VtID4+ICA4KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAxXSA9IChjcmMzMl9jc3VtID4+ICAwKSAmIDB4ZmY7CisJcGFkX29wZXJhbmRzKGMsIHdyaXRlX3Bvcyk7CiAKLQljLT5sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwKIAkJCSJDQSBQTVQgZmFpbGVkIHdpdGggcmVzcG9uc2UgMHgleFxuIiwgci0+cmVzcG9uc2UpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKIAl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfdGltZV9kYXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBpbnQgKmludGVydmFsKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTU2LDI4ICsxMTg5LDI4IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfREFURV9USU1FOyAvKiBjYSB0YWcgKi8KLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSppbnRlcnZhbCA9IHItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildOworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZW50ZXJfbWVudShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTg5LDI0ICsxMjIyLDI1IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfRU5URVJfTUVOVTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIDgpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfbW1pKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyICptbWlfb2JqZWN0LCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTIxOCwyMCArMTI1MiwyMSBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX01NSTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSpsZW4gPSBnZXRfY2Ffb2JqZWN0X2xlbmd0aChyKTsKIAltZW1jcHkobW1pX29iamVjdCwgJnItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildLCAqbGVuKTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIENNUF9PVVRQVVRfUExVR19DT05UUk9MX1JFR18wCTB4ZmZmZmYwMDAwOTA0VUxMCkBAIC0xMjQwLDE0ICsxMjc1LDE0IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCXJldCA9IGZkdHYtPmJhY2tlbmQtPnJlYWQoZmR0diwgYWRkciwgZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiByZWFkIEkvTyBlcnJvclxuIik7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjU1LDE0ICsxMjkwLDE5IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldCA9IGZkdHYtPmJhY2tlbmQtPmxvY2soZmR0diwgYWRkciwgZGF0YSk7CisJLyogZGF0YVtdIGlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBETUEtbWFwcGVkLiAqLworCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgOCk7CisKKwlyZXQgPSBmZHR2LT5iYWNrZW5kLT5sb2NrKGZkdHYsIGFkZHIsIGZkdHYtPmF2Y19kYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IGxvY2sgSS9PIGVycm9yXG4iKTsKKwllbHNlCisJCW1lbWNweShkYXRhLCBmZHR2LT5hdmNfZGF0YSwgOCk7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYwppbmRleCBmYzk5OTZjLi4wNzllOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZHZiLmMKQEAgLTI3Nyw3ICsyNzcsNiBAQAogCiAJbXV0ZXhfaW5pdCgmZmR0di0+YXZjX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZHR2LT5hdmNfd2FpdCk7Ci0JZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAltdXRleF9pbml0KCZmZHR2LT5kZW11eF9tdXRleCk7CiAJSU5JVF9XT1JLKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrLCBhdmNfcmVtb3RlX2N0cmxfd29yayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwppbmRleCA2MjIzYmYwLi43NWFmZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCkBAIC00MSw3ICs0MSw3IEBACiAJcmV0dXJuIHJjb2RlICE9IFJDT0RFX0NPTVBMRVRFID8gLUVJTyA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gbm9kZV9yZXEoZmR0diwgYWRkciwgZGF0YSwgOCwgVENPREVfTE9DS19DT01QQVJFX1NXQVApOwogfQpAQCAtMjM5LDQ3ICsyMzksMTggQEAKIH07CiAKIC8qIEFkanVzdCB0aGUgdGVtcGxhdGUgc3RyaW5nIGlmIG1vZGVscyB3aXRoIGxvbmdlciBuYW1lcyBhcHBlYXIuICovCi0jZGVmaW5lIE1BWF9NT0RFTF9OQU1FX0xFTiAoKGludClESVZfUk9VTkRfVVAoc2l6ZW9mKCJGaXJlRFRWID8/Pz8iKSwgNCkpCi0KLXN0YXRpYyBzaXplX3QgbW9kZWxfbmFtZSh1MzIgKmRpcmVjdG9yeSwgX19iZTMyICpidWZmZXIpCi17Ci0Jc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKLQlpbnQgaSwgbGVuZ3RoLCBrZXksIHZhbHVlLCBsYXN0X2tleSA9IDA7Ci0JdTMyICpibG9jayA9IE5VTEw7Ci0KLQlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcmVjdG9yeSk7Ci0Jd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgewotCQlpZiAobGFzdF9rZXkgPT0gQ1NSX01PREVMICYmCi0JCSAgICBrZXkgPT0gKENTUl9ERVNDUklQVE9SIHwgQ1NSX0xFQUYpKQotCQkJYmxvY2sgPSBjaS5wIC0gMSArIHZhbHVlOwotCQlsYXN0X2tleSA9IGtleTsKLQl9Ci0KLQlpZiAoYmxvY2sgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlsZW5ndGggPSBtaW4oKGludCkoYmxvY2tbMF0gPj4gMTYpIC0gMiwgTUFYX01PREVMX05BTUVfTEVOKTsKLQlpZiAobGVuZ3RoIDw9IDApCi0JCXJldHVybiAwOwotCi0JLyogZmFzdC1mb3J3YXJkIHRvIHRleHQgc3RyaW5nICovCi0JYmxvY2sgKz0gMzsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJYnVmZmVyW2ldID0gY3B1X3RvX2JlMzIoYmxvY2tbaV0pOwotCi0JcmV0dXJuIGxlbmd0aCAqIDQ7Ci19CisjZGVmaW5lIE1BWF9NT0RFTF9OQU1FX0xFTiBzaXplb2YoIkZpcmVEVFYgPz8/PyIpCiAKIHN0YXRpYyBpbnQgbm9kZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZpcmVkdHYgKmZkdHY7Ci0JX19iZTMyIG5hbWVbTUFYX01PREVMX05BTUVfTEVOXTsKKwljaGFyIG5hbWVbTUFYX01PREVMX05BTUVfTEVOXTsKIAlpbnQgbmFtZV9sZW4sIGVycjsKIAotCW5hbWVfbGVuID0gbW9kZWxfbmFtZShmd191bml0KGRldiktPmRpcmVjdG9yeSwgbmFtZSk7CisJbmFtZV9sZW4gPSBmd19jc3Jfc3RyaW5nKGZ3X3VuaXQoZGV2KS0+ZGlyZWN0b3J5LCBDU1JfTU9ERUwsCisJCQkJIG5hbWUsIHNpemVvZihuYW1lKSk7CiAKLQlmZHR2ID0gZmR0dl9hbGxvYyhkZXYsICZiYWNrZW5kLCAoY2hhciAqKW5hbWUsIG5hbWVfbGVuKTsKKwlmZHR2ID0gZmR0dl9hbGxvYyhkZXYsICZiYWNrZW5kLCBuYW1lLCBuYW1lX2xlbiA+PSAwID8gbmFtZV9sZW4gOiAwKTsKIAlpZiAoIWZkdHYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmgKaW5kZXggMzUwODBkYi4uNzhjYzI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaApAQCAtNzMsNyArNzMsNyBAQAogc3RydWN0IGZpcmVkdHY7CiAKIHN0cnVjdCBmaXJlZHR2X2JhY2tlbmQgewotCWludCAoKmxvY2spKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSk7CisJaW50ICgqbG9jaykoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhKTsKIAlpbnQgKCpyZWFkKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpOwogCWludCAoKndyaXRlKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogCWludCAoKnN0YXJ0X2lzbykoc3RydWN0IGZpcmVkdHYgKmZkdHYpOwpAQCAtMTE0LDggKzExNCw4IEBACiAJdW5zaWduZWQgbG9uZwkJY2hhbm5lbF9hY3RpdmU7CiAJdTE2CQkJY2hhbm5lbF9waWRbMTZdOwogCi0Jc2l6ZV90CQkJcmVzcG9uc2VfbGVuZ3RoOwotCXU4CQkJcmVzcG9uc2VbNTEyXTsKKwlpbnQJCQlhdmNfZGF0YV9sZW5ndGg7CisJdTgJCQlhdmNfZGF0YVs1MTJdOwogfTsKIAogLyogZmlyZWR0di0xMzk0LmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaAppbmRleCAyOGI5MGM5Li5lOTBmYTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCkBAIC00NCw2ICs0NCw3IEBACiAJQUY5MDEzX1RVTkVSX01UMjA2MF8yICAgPSAxNDcsIC8qIE1pY3JvdHVuZSAqLwogCUFGOTAxM19UVU5FUl9UREExODI3MSAgID0gMTU2LCAvKiBOWFAgKi8KIAlBRjkwMTNfVFVORVJfUVQxMDEwQSAgICA9IDE2MiwgLyogUXVhbnRlayAqLworCUFGOTAxM19UVU5FUl9UREExODIxOCAgID0gMTc5LCAvKiBOWFAgKi8KIH07CiAKIC8qIEFGOTAxMy81IEdQSU9zIChtb3N0bHkgZ3Vlc3NlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMKaW5kZXggNTk4ODFhNS4uNDNhYWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMKQEAgLTE3MCw2ICsxNzAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXRfYWdjX2NvbmZpZyhzdHJ1Y3QgYXRibV9zdGF0ZSAqcHJpdiwKKwl1OCBtaW4sIHU4IG1heCwgdTggaG9sZF9sb29wKQoreworCS8qIG5vIGVmZmVjdCBpZiBib3RoIG1pbiBhbmQgbWF4IGFyZSB6ZXJvICovCisJaWYgKCFtaW4gJiYgIW1heCkKKwkgICAgcmV0dXJuIDA7CisKKwlhdGJtODgzMF93cml0ZV9yZWcocHJpdiwgUkVHX0FHQ19NSU4sIG1pbik7CisJYXRibTg4MzBfd3JpdGVfcmVnKHByaXYsIFJFR19BR0NfTUFYLCBtYXgpOworCWF0Ym04ODMwX3dyaXRlX3JlZyhwcml2LCBSRUdfQUdDX0hPTERfTE9PUCwgaG9sZF9sb29wKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHNldF9zdGF0aWNfY2hhbm5lbF9tb2RlKHN0cnVjdCBhdGJtX3N0YXRlICpwcml2KQogewpAQCAtMjI3LDYgKzI0MCw5IEBACiAJLypTZXQgSUYgZnJlcXVlbmN5Ki8KIAlzZXRfaWZfZnJlcShwcml2LCBjZmctPmlmX2ZyZXEpOwogCisJLypTZXQgQUdDIENvbmZpZyovCisJc2V0X2FnY19jb25maWcocHJpdiwgY2ZnLT5hZ2NfbWluLCBjZmctPmFnY19tYXgsCisJCWNmZy0+YWdjX2hvbGRfbG9vcCk7CiAKIAkvKlNldCBzdGF0aWMgY2hhbm5lbCBtb2RlKi8KIAlzZXRfc3RhdGljX2NoYW5uZWxfbW9kZShwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jCmluZGV4IDYxNDU1MjcuLjdlYWMxNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiB2b2lkIGRpYjAwOTBfZGNjX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGZhc3QpCit2b2lkIGRpYjAwOTBfZGNjX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGZhc3QpCiB7CiAJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJaWYgKGZhc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwppbmRleCA2ZjZmYTI5Li4yYWE5N2RkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jCkBAIC0xOTk5LDYgKzE5OTksOCBAQAogCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCB0aW1lLCByZXQ7CiAKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19JU0RCVDsKKwogCWRpYjgwMDBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX0hJR0hfWik7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKaW5kZXggZTZmM2Q3My4uOTgwZTAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogRVhQT1JUX1NZTUJPTChkaWJ4MDAwX2V4aXRfaTJjX21hc3Rlcik7CiAKIAotdTMyIHN5c3RpbWUoKQordTMyIHN5c3RpbWUodm9pZCkKIHsKICAgICBzdHJ1Y3QgdGltZXNwZWMgdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCmluZGV4IGIxODFiZjAuLjEzNDM3MjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCkBAIC0xNTgsNyArMTU4LDggQEAKIAkvKiBvdmVycmlkZSBmcm9udGVuZCBvcHMgKi8KIAlmZS0+b3BzLnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwogCWZlLT5vcHMuZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7Ci0JZmUtPm9wcy5zZXRfdG9uZSA9IGxuYnAyMV9zZXRfdG9uZTsKKwlpZiAoIShvdmVycmlkZV9jbGVhciAmIExOQkgyNF9URU4pKSAvKjIya0h6IGxvZ2ljIGNvbnRyb2xsZWQgYnkgZGVtb2QqLworCQlmZS0+b3BzLnNldF90b25lID0gbG5icDIxX3NldF90b25lOwogCXByaW50ayhLRVJOX0lORk8gIkxOQngyeCBhdHRhY2hlZCBvbiBhZGRyPSV4XG4iLCBsbmJwMjEtPmkyY19hZGRyKTsKIAogCXJldHVybiBmZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYwppbmRleCA5NTUyYTIyLi5kMjFhMzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCkBAIC05Nyw4ICs5Nyw2IEBACiAjZGVmaW5lCUxOQl9TVVBQTFlfQ1RSTF9SRUdfNAkJMHhjZQogI2RlZmluZQlMTkJfU1VQUExZX1NUQVRVU19SRUcJCTB4Y2YKIAotI2RlZmluZSBGQUxTRQkwCi0jZGVmaW5lIFRSVUUJMQogI2RlZmluZSBGQUlMCS0xCiAjZGVmaW5lIFBBU1MJMAogCkBAIC03MTgsNyArNzE2LDcgQEAKIAlpbnQgZmluZV90dW5lX2ZyZXE7CiAJdW5zaWduZWQgY2hhciBzYW1wbGVfcmF0ZSA9IDA7CiAJLyogYm9vbGVhbiAqLwotCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9pbmQ7CisJYm9vbCBpbmJhbmRfaW50ZXJmZXJlcl9pbmQ7CiAKIAkvKiBJTlRFUk1FRElBVEUgVkFMVUVTICovCiAJaW50IGljb2Fyc2VfdHVuZV9mcmVxOyAvKiBNSHogKi8KQEAgLTcyOCwxNSArNzI2LDggQEAKIAl1bnNpZ25lZCBpbnQgeDE7CiAJdW5zaWduZWQgaW50IHgyOwogCWludCBpOwotCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7Ci0JCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCi0JCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKLQl9OwotCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7Ci0JCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCi0JCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKLQl9OwotCisJYm9vbCBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW0FMTE9XQUJMRV9GU19DT1VOVF07CisJYm9vbCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W0FMTE9XQUJMRV9GU19DT1VOVF07CiAJaW50IHN0YXR1czsKIAogCS8qIGFsbG93YWJsZSBzYW1wbGUgcmF0ZXMgZm9yIEFEQyBpbiBNSHogKi8KQEAgLTc2Miw3ICs3NTMsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkKLQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IGluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSBGQUxTRTsKKwkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IGluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSBmYWxzZTsKIAogCWlmX2xpbWl0X2hpZ2ggPSAtNzAwMDAwOwogCWlmX2xpbWl0X2xvdyA9IC0xMDAwMDA7CkBAIC03OTgsNyArNzg5LDcgQEAKIAogCQlpZiAoKChiYW5kX2xvdyA8IHgxKSAmJiAoeDEgPCBiYW5kX2hpZ2gpKSB8fAogCQkJCQkoKGJhbmRfbG93IDwgeDIpICYmICh4MiA8IGJhbmRfaGlnaCkpKQotCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gVFJVRTsKKwkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IHRydWU7CiAKIAl9CiAKQEAgLTgxMSwyNSArODAyLDI4IEBACiAKIAkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKIAkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKLQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IFRSVUU7CisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSB0cnVlOwogCX0KIAotCWluYmFuZF9pbnRlcmZlcmVyX2luZCA9IFRSVUU7Ci0JZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKQotCQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgJj0gaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8Ci0JCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldOworCWluYmFuZF9pbnRlcmZlcmVyX2luZCA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7CisJCWlmIChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHx8IGluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0pIHsKKwkJCWluYmFuZF9pbnRlcmZlcmVyX2luZCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlpZiAoaW5iYW5kX2ludGVyZmVyZXJfaW5kKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgewotCQkJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPT0gRkFMU0UpIHsKKwkJCWlmICghaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSkgewogCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKLQkJCWlmICgoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8Ci0JCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0pID09IEZBTFNFKSB7CisJCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfHwKKwkJCSAgICAgIWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0pKSB7CiAJCQkJc2FtcGxlX3JhdGUgPSAodTgpIGFmc1tpXTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCmluZGV4IDI5YzNmYTg1Yy4uZTNlMzVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCkBAIC00OSw2ICs0OSw4IEBACiAJdTggdHVuMl9tYWRkcmVzczsKIAl1OCB0dW4xX2FkYzsvKiAxIGZvciBzdHY2MTEwLCAyIGZvciBzdGI2MTAwICovCiAJdTggdHVuMl9hZGM7CisJdTggdHVuMV90eXBlOy8qIGZvciBub3cgMyBmb3Igc3RiNjEwMCBhdXRvLCBlbHNlIC0gc29mdHdhcmUgKi8KKwl1OCB0dW4yX3R5cGU7CiAJLyogU2V0IGRldmljZSBwYXJhbSB0byBzdGFydCBkbWEgKi8KIAlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCmluZGV4IDg3NjJjODYuLjAxZjhmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXZvaWQgZXh0cmFjdF9tYXNrX3Bvcyh1MzIgbGFiZWwsIHU4ICptYXNrLCB1OCAqcG9zKQorc3RhdGljIHZvaWQgZXh0cmFjdF9tYXNrX3Bvcyh1MzIgbGFiZWwsIHU4ICptYXNrLCB1OCAqcG9zKQogewogCXU4IHBvc2l0aW9uID0gMCwgaSA9IDA7CiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXJldHVybiB2YWw7CiB9CiAKLWVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRpYWxpemUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHApCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCkKIHsKIAlzMzIgaTsKIApAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CiB9CiAKLXUzMiBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBleHRfY2xrKQorc3RhdGljIHUzMiBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBleHRfY2xrKQogewogCXUzMiBtY2xrID0gOTAwMDAwMDAsIGRpdiA9IDAsIGFkX2RpdiA9IDA7CiAKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXJldHVybiBtY2xrOwogfQogCi1lbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIG1jbGspCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc2V0X21jbGsoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBtY2xrKQogewogCXUzMiBtX2RpdiwgY2xrX3NlbDsKIApAQCAtMzM0LDcgKzMzNCw3IEBACiAJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CiB9CiAKLXUzMiBzdHYwOTAwX2dldF9lcnJfY291bnQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBjbnRyLAorc3RhdGljIHUzMiBzdHYwOTAwX2dldF9lcnJfY291bnQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBjbnRyLAogCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQogewogCXUzMiBsc2IsIG1zYiwgaHNiLCBlcnJfdmFsOwpAQCAtNTY3LDYgKzU2Nyw0NiBAQAogCX0KIH0KIAordTMyIHN0djA5MDBfZ2V0X2ZyZXFfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGRlbW9kKQoreworCXUzMiBmcmVxLCByb3VuZDsKKwkvKglGb3JtdWxhdCA6CisJVHVuZXJfRnJlcXVlbmN5KE1IeikJPSBSZWdzIC8gNjQKKwlUdW5lcl9ncmFudWxhcml0eShNSHopCT0gUmVncyAvIDIwNDgKKwlyZWFsX1R1bmVyX0ZyZXF1ZW5jeQk9IFR1bmVyX0ZyZXF1ZW5jeShNSHopIC0gVHVuZXJfZ3JhbnVsYXJpdHkoTUh6KQorCSovCisJZnJlcSA9IChzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVEyKSA8PCAxMCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBUVU5fUkZGUkVRMSkgPDwgMikgKworCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVEwKTsKKworCWZyZXEgPSAoZnJlcSAqIDEwMDApIC8gNjQ7CisKKwlyb3VuZCA9IChzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRlJFU1RFMSkgPj4gMikgKworCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRlJFU1RFMCk7CisKKwlyb3VuZCA9IChyb3VuZCAqIDEwMDApIC8gMjA0ODsKKworCXJldHVybiBmcmVxICsgcm91bmQ7Cit9CisKK3ZvaWQgc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIEZyZXF1ZW5jeSwKKwkJCQkJCXUzMiBCYW5kd2lkdGgsIGludCBkZW1vZCkKK3sKKwl1MzIgdHVuZXJGcmVxdWVuY3k7CisJLyogRm9ybXVsYXQ6CisJVHVuZXJfZnJlcXVlbmN5X3JlZz0gRnJlcXVlbmN5KE1IeikqNjQKKwkqLworCXR1bmVyRnJlcXVlbmN5ID0gKEZyZXF1ZW5jeSAqIDY0KSAvIDEwMDA7CisKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgVFVOX1JGRlJFUTIsICh0dW5lckZyZXF1ZW5jeSA+PiAxMCkpOworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fUkZGUkVRMSwgKHR1bmVyRnJlcXVlbmN5ID4+IDIpICYgMHhmZik7CisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9SRkZSRVEwLCAodHVuZXJGcmVxdWVuY3kgJiAweDAzKSk7CisJLyogTG93IFBhc3MgRmlsdGVyID0gQlcgLzIgKE1IeikqLworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fQlcsIEJhbmR3aWR0aCAvIDIwMDAwMDApOworCS8qIFR1bmVyIFdyaXRlIHRyaWcgKi8KKwlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBUTlJMRCwgMSk7Cit9CisKIHN0YXRpYyBzMzIgc3R2MDkwMF9nZXRfcmZfbGV2ZWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCiAJCQkJY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgKmxvb2t1cCwKIAkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQpAQCAtMTMyOSw3ICsxMzY5LDYgQEAKIAllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOwogCWVudW0gZmVfc3R2MDkwMF9lcnJvciBkZW1vZEVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKIAlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCA9IE5VTEw7Ci0KIAlpbnQgc2Vsb3NjaSwgaTsKIAogCXN0cnVjdCBzdHYwOTAwX2lub2RlICp0ZW1wX2ludCA9IGZpbmRfaW5vZGUoc3RhdGUtPmkyY19hZGFwLApAQCAtMTM0NSw3ICsxMzg0LDE0IEBACiAJfSBlbHNlIHsKIAkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwpLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbCA9PSBOVUxMKQorCQkJcmV0dXJuIFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CiAJCXRlbXBfaW50ID0gYXBwZW5kX2ludGVybmFsKHN0YXRlLT5pbnRlcm5hbCk7CisJCWlmICh0ZW1wX2ludCA9PSBOVUxMKSB7CisJCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCQkJc3RhdGUtPmludGVybmFsID0gTlVMTDsKKwkJCXJldHVybiBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCQl9CiAJCXN0YXRlLT5pbnRlcm5hbC0+ZG1kc191c2VkID0gMTsKIAkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmNfYWRhcDsKIAkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CkBAIC0xMzcxLDExICsxNDE3LDYgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmIChzdGF0ZS0+aW50ZXJuYWwgPT0gTlVMTCkgewotCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KIAlpbnRwID0gc3RhdGUtPmludGVybmFsOwogCiAJaW50cC0+ZGVtb2RfbW9kZSA9IHBfaW5pdC0+ZGVtb2RfbW9kZTsKQEAgLTE0MDQsNiArMTQ0NSwyNyBAQAogCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfUlNUX0hXQVJFLCAwKTsKIAl9CiAKKwlpbnRwLT50dW5lcl90eXBlWzBdID0gcF9pbml0LT50dW5lcjFfdHlwZTsKKwlpbnRwLT50dW5lcl90eXBlWzFdID0gcF9pbml0LT50dW5lcjJfdHlwZTsKKwkvKiB0dW5lciBpbml0ICovCisJc3dpdGNoIChwX2luaXQtPnR1bmVyMV90eXBlKSB7CisJY2FzZSAzOiAvKkZFX0FVVE9fU1RCNjEwMDoqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkcsIDB4M2MpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkcyLCAweDg2KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQ0ZHMywgMHgxOCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUlhUQUwsIDI3KTsgLyogMjdNSHogKi8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SU1RFUFMsIDB4MDUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJHQUlOLCAweDE3KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQURKLCAweDFmKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQ1RMMiwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AxX1RVTl9UWVBFLCAzKTsKKwkJYnJlYWs7CisJLyogY2FzZSBGRV9TV19UVU5FUjogKi8KKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX1RZUEUsIDYpOworCQlicmVhazsKKwl9CisKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX01BRERSRVNTLCBwX2luaXQtPnR1bjFfbWFkZHJlc3MpOwogCXN3aXRjaCAocF9pbml0LT50dW5lcjFfYWRjKSB7CiAJY2FzZSAxOgpAQCAtMTQxMyw2ICsxNDc1LDI3IEBACiAJCWJyZWFrOwogCX0KIAorCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkxELCAxKTsgLyogaHcgdHVuZXIgKi8KKworCS8qIHR1bmVyIGluaXQgKi8KKwlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX3R5cGUpIHsKKwljYXNlIDM6IC8qRkVfQVVUT19TVEI2MTAwOiovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRywgMHgzYyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRzIsIDB4ODYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJDRkczLCAweDE4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SWFRBTCwgMjcpOyAvKiAyN01IeiAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJTVEVQUywgMHgwNSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkdBSU4sIDB4MTcpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJBREosIDB4MWYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJDVEwyLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDJfVFVOX1RZUEUsIDMpOworCQlicmVhazsKKwkvKiBjYXNlIEZFX1NXX1RVTkVSOiAqLworCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fVFlQRSwgNik7CisJCWJyZWFrOworCX0KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMl9tYWRkcmVzcyk7CiAJc3dpdGNoIChwX2luaXQtPnR1bmVyMl9hZGMpIHsKIAljYXNlIDE6CkBAIC0xNDIyLDYgKzE1MDUsOCBAQAogCQlicmVhazsKIAl9CiAKKwlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJMRCwgMSk7IC8qIGh3IHR1bmVyICovCisKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4xX2lxX2ludik7CiAJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMl9pcV9pbnYpOwogCXN0djA5MDBfc2V0X21jbGsoaW50cCwgMTM1MDAwMDAwKTsKQEAgLTE4MjQsMTAgKzE5MDksMTIgQEAKIAkJaW5pdF9wYXJhbXMudHVuMV9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMV9tYWRkcmVzczsKIAkJaW5pdF9wYXJhbXMudHVuMV9pcV9pbnYJCT0gU1RWMDkwMF9JUV9OT1JNQUw7CiAJCWluaXRfcGFyYW1zLnR1bmVyMV9hZGMJCT0gY29uZmlnLT50dW4xX2FkYzsKKwkJaW5pdF9wYXJhbXMudHVuZXIxX3R5cGUJCT0gY29uZmlnLT50dW4xX3R5cGU7CiAJCWluaXRfcGFyYW1zLnBhdGgyX3RzX2Nsb2NrCT0gY29uZmlnLT5wYXRoMl9tb2RlOwogCQlpbml0X3BhcmFtcy50c19jb25maWcJCT0gY29uZmlnLT50c19jb25maWdfcmVnczsKIAkJaW5pdF9wYXJhbXMudHVuMl9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMl9tYWRkcmVzczsKIAkJaW5pdF9wYXJhbXMudHVuZXIyX2FkYwkJPSBjb25maWctPnR1bjJfYWRjOworCQlpbml0X3BhcmFtcy50dW5lcjJfdHlwZQkJPSBjb25maWctPnR1bjJfdHlwZTsKIAkJaW5pdF9wYXJhbXMudHVuMl9pcV9pbnYJCT0gU1RWMDkwMF9JUV9TV0FQUEVEOwogCiAJCWVycl9zdHYwOTAwID0gc3R2MDkwMF9pbml0X2ludGVybmFsKCZzdGF0ZS0+ZnJvbnRlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKaW5kZXggZDhiYThhOS4uYjYyYjBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaApAQCAtMjQ3LDYgKzI0Nyw3IEBACiAKIAl1OAl0dW4xX21hZGRyZXNzOwogCWludAl0dW5lcjFfYWRjOworCWludCAJdHVuZXIxX3R5cGU7CiAKIAkvKiBJUSBmcm9tIHRoZSB0dW5lcjEgdG8gdGhlIGRlbW9kICovCiAJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4xX2lxX2ludjsKQEAgLTI1NCw2ICsyNTUsNyBAQAogCiAJdTgJdHVuMl9tYWRkcmVzczsKIAlpbnQJdHVuZXIyX2FkYzsKKwlpbnQJdHVuZXIyX3R5cGU7CiAKIAkvKiBJUSBmcm9tIHRoZSB0dW5lcjIgdG8gdGhlIGRlbW9kICovCiAJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4yX2lxX2ludjsKQEAgLTMwOSw2ICszMTEsOCBAQAogCXMzMglid1syXTsKIAlzMzIJc3ltYm9sX3JhdGVbMl07CiAJczMyCXNyY2hfcmFuZ2VbMl07CisJLyogZm9yIHNvZnR3YXJlL2F1dG8gdHVuZXIgKi8KKwlpbnQJdHVuZXJfdHlwZVsyXTsKIAogCS8qIGFsZ29yaXRobSBmb3Igc2VhcmNoIEJsaW5kLCBDb2xkIG9yIFdhcm0qLwogCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbwlzcmNoX2FsZ29bMl07CkBAIC0zOTQsNCArMzk4LDExIEBACiBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHN0djA5MDBfZ2V0X3N0YW5kYXJkKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOwogCitleHRlcm4gdTMyCitzdHYwOTAwX2dldF9mcmVxX2F1dG8oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBkZW1vZCk7CisKK2V4dGVybiB2b2lkCitzdHYwOTAwX3NldF90dW5lcl9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgRnJlcXVlbmN5LAorCQkJCQkJdTMyIEJhbmR3aWR0aCwgaW50IGRlbW9kKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCmluZGV4IDdiOGVkZjEuLjczMWFmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCkBAIC0zMTc0LDE3ICszMTc0LDIxIEBACiAjZGVmaW5lIFIwOTAwX1AxX1ROUlJGMSAweGY0ZTkKICNkZWZpbmUgVE5SUkYxIFJFR3goUjA5MDBfUDFfVE5SUkYxKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMiAweGY0ZTkwMGZmCisjZGVmaW5lIFRVTl9SRkZSRVEyIEZMRHgoRjA5MDBfUDFfVFVOX1JGRlJFUTIpCiAKIC8qUDFfVE5SUkYwKi8KICNkZWZpbmUgUjA5MDBfUDFfVE5SUkYwIDB4ZjRlYQogI2RlZmluZSBUTlJSRjAgUkVHeChSMDkwMF9QMV9UTlJSRjApCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVExIDB4ZjRlYTAwZmYKKyNkZWZpbmUgVFVOX1JGRlJFUTEgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMSkKIAogLypQMV9UTlJCVyovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUkJXIDB4ZjRlYgogI2RlZmluZSBUTlJCVyBSRUd4KFIwOTAwX1AxX1ROUkJXKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMCAweGY0ZWIwMGMwCisjZGVmaW5lIFRVTl9SRkZSRVEwIEZMRHgoRjA5MDBfUDFfVFVOX1JGRlJFUTApCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9CVyAweGY0ZWIwMDNmCisjZGVmaW5lIFRVTl9CVyBGTER4KEYwOTAwX1AxX1RVTl9CVykKIAogLypQMV9UTlJBREoqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJBREogMHhmNGVjCkBAIC0zMjM0LDExICszMjM4LDEzIEBACiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNMT0NLRUQgMHhmNGY2MDAxMAogI2RlZmluZSBGMDkwMF9QMV9UVU5fUFJPR0RPTkUgMHhmNGY2MDAwYwogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTEgMHhmNGY2MDAwMworI2RlZmluZSBUVU5fUkZSRVNURTEgRkxEeChGMDkwMF9QMV9UVU5fUkZSRVNURTEpCiAKIC8qUDFfVE5SUkVTVEUqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJSRVNURSAweGY0ZjcKICNkZWZpbmUgVE5SUkVTVEUgUkVHeChSMDkwMF9QMV9UTlJSRVNURSkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGUkVTVEUwIDB4ZjRmNzAwZmYKKyNkZWZpbmUgVFVOX1JGUkVTVEUwIEZMRHgoRjA5MDBfUDFfVFVOX1JGUkVTVEUwKQogCiAvKlAxX1NNQVBDT0VGNyovCiAjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNyAweGY1MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCmluZGV4IGI4ZGE4N2YuLmJhMDcwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJcmV0dXJuIGxvY2s7CiB9CiAKLWludCBzdHYwOTAwX3N3X2FsZ28oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCitzdGF0aWMgaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKIAkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQogewogCWludAlsb2NrID0gRkFMU0UsCkBAIC02MDYsNyArNjA2LDEyIEBACiAJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOwogCiAJCWlmIChpbnRwLT5jaGlwX2lkIDw9IDB4MjApIHsKLQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpbnRwLT5id1tkXSk7CisJCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkXSA9PSAzKQorCQkJCXN0djA5MDBfc2V0X3R1bmVyX2F1dG8oaW50cCwgdHVuZXJfZnJlcSwKKwkJCQkJCWludHAtPmJ3W2RdLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGludHAtPmJ3W2RdKTsKKwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgRE1ESVNUQVRFLCAweDFjKTsKIAkJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIENGUklOSVQxLCAwKTsKIAkJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIENGUklOSVQwLCAwKTsKQEAgLTc5MCw3ICs3OTUsNyBAQAogCXJldHVybiBwcmF0ZTsKIH0KIAotdm9pZCBzdHYwOTAwX3NldF9kdmJzMV90cmFja19jYXJfbG9vcChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X2R2YnMxX3RyYWNrX2Nhcl9sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAogCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLAogCQkJCQl1MzIgc3JhdGUpCiB7CkBAIC05NzYsOCArOTgxLDE2IEBACiAJCQkJCWludHAtPnJvbGxvZmYpICsgMTAwMDAwMDA7CiAKIAkJaWYgKChpbnRwLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZF90dW5fc3cgPT0gMSkpIHsKLQkJCWlmIChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKLQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsIGludHAtPmJ3W2RlbW9kXSk7CisJCQlpZiAoaW50cC0+c3JjaF9hbGdvW2RlbW9kXSAhPSBTVFYwOTAwX1dBUk1fU1RBUlQpIHsKKwkJCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLAorCQkJCQkJCWludHAtPmZyZXFbZGVtb2RdLAorCQkJCQkJCWludHAtPmJ3W2RlbW9kXSwKKwkJCQkJCQlkZW1vZCk7CisJCQkJZWxzZQorCQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsCisJCQkJCQkJaW50cC0+YndbZGVtb2RdKTsKKwkJCX0KIAkJfQogCiAJCWlmICgoaW50cC0+c3JjaF9hbGdvW2RlbW9kXSA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwKQEAgLTEyMDIsNyArMTIxNSwxMSBAQAogCX0KIAogCXJlc3VsdC0+c3RhbmRhcmQgPSBzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgZCk7Ci0JcmVzdWx0LT5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJcmVzdWx0LT5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF9mcmVxX2F1dG8oaW50cCwgZCk7CisJZWxzZQorCQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCiAJb2Zmc2V0RnJlcSA9IHN0djA5MDBfZ2V0X2NhcnJfZnJlcShpbnRwLCBpbnRwLT5tY2xrLCBkKSAvIDEwMDA7CiAJcmVzdWx0LT5mcmVxdWVuY3kgKz0gb2Zmc2V0RnJlcTsKIAlyZXN1bHQtPnN5bWJvbF9yYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaW50cCwgaW50cC0+bWNsaywgZCk7CkBAIC0xMjEzLDYgKzEyMzAsOSBAQAogCXJlc3VsdC0+cGlsb3QgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIERFTU9EX1RZUEUpICYgMHgwMTsKIAlyZXN1bHQtPmZyYW1lX2xlbiA9ICgodTMyKXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgREVNT0RfVFlQRSkpID4+IDE7CiAJcmVzdWx0LT5yb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBST0xMT0ZGX1NUQVRVUyk7CisKKwlkcHJpbnRrKCIlczogbW9kY29kZT0weCV4IFxuIiwgX19mdW5jX18sIHJlc3VsdC0+bW9kY29kZSk7CisKIAlzd2l0Y2ggKHJlc3VsdC0+c3RhbmRhcmQpIHsKIAljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CiAJCXJlc3VsdC0+c3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIFNQRUNJTlZfREVNT0QpOwpAQCAtMTIzOSw3ICsxMjU5LDExIEBACiAJaWYgKChpbnRwLT5zcmNoX2FsZ29bZF0gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8CiAJCQkJKGludHAtPnN5bWJvbF9yYXRlW2RdIDwgMTAwMDAwMDApKSB7CiAJCW9mZnNldEZyZXEgPSByZXN1bHQtPmZyZXF1ZW5jeSAtIGludHAtPmZyZXFbZF07Ci0JCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJaWYgKGludHAtPnR1bmVyX3R5cGVbZGVtb2RdID09IDMpCisJCQlpbnRwLT5mcmVxW2RdID0gc3R2MDkwMF9nZXRfZnJlcV9hdXRvKGludHAsIGQpOworCQllbHNlCisJCQlpbnRwLT5mcmVxW2RdID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKIAkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGludHAtPnNyY2hfcmFuZ2VbZF0gLyAyMDAwKSArIDUwMCkpCiAJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKIAkJZWxzZSBpZiAoQUJTKG9mZnNldEZyZXEpIDw9CkBAIC0xNDgxLDcgKzE1MDUsMTIgQEAKIAkJCWVsc2UKIAkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOwogCi0JCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaW50cC0+YndbZGVtb2RdKTsKKwkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQkJCXN0djA5MDBfc2V0X3R1bmVyX2F1dG8oaW50cCwgdHVuZXJfZnJlcSwKKwkJCQkJCWludHAtPmJ3W2RlbW9kXSwgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZGVtb2RdKTsKIAkJfQogCX0KIApAQCAtMTYwOCw3ICsxNjM3LDggQEAKIAogCWFnYzJfaW50ID0gc3R2MDkwMF9ibGluZF9jaGVja19hZ2MyX21pbl9sZXZlbChpbnRwLCBkZW1vZCk7CiAKLQlpZiAoYWdjMl9pbnQgPiBTVFYwOTAwX0JMSU5EX1NFQVJDSF9BR0MyX1RIKQorCWRwcmludGsoIiVzIGFnYzJfaW50PSVkIGFnYzJfdGg9JWQgXG4iLCBfX2Z1bmNfXywgYWdjMl9pbnQsIGFnYzJfdGgpOworCWlmIChhZ2MyX2ludCA+IGFnYzJfdGgpCiAJCXJldHVybiBGQUxTRTsKIAogCWlmIChpbnRwLT5jaGlwX2lkID09IDB4MTApCkBAIC0xODc1LDcgKzE5MDUsMTEgQEAKIAogCX0KIAotCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpbnRwLT5mcmVxW2RlbW9kXSwgaW50cC0+YndbZGVtb2RdKTsKKwlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCBpbnRwLT5mcmVxW2RlbW9kXSwKKwkJCQlpbnRwLT5id1tkZW1vZF0sIGRlbW9kKTsKKwllbHNlCisJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpbnRwLT5mcmVxW2RlbW9kXSwgaW50cC0+YndbZGVtb2RdKTsKIAogCWFnYzFfcG93ZXIgPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGludHAsIEFHQ0lRX1ZBTFVFMSksCiAJCQkJc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBBR0NJUV9WQUxVRTApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCmluZGV4IDE1NzM0NjYuLmM1MmMzMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwpAQCAtMzcsNyArMzcsODIgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKIG1vZHVsZV9wYXJhbSh2ZXJib3NlLCBpbnQsIDA2NDQpOwogCi1zdHJ1Y3QgbXV0ZXggZGVtb2RfbG9jazsKKy8qIGludGVybmFsIHBhcmFtcyBub2RlICovCitzdHJ1Y3Qgc3R2MDkweF9kZXYgeworCS8qIHBvaW50ZXIgZm9yIGludGVybmFsIHBhcmFtcywgb25lIGZvciBlYWNoIHBhaXIgb2YgZGVtb2RzICovCisJc3RydWN0IHN0djA5MHhfaW50ZXJuYWwJCSppbnRlcm5hbDsKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYJCSpuZXh0X2RldjsKK307CisKKy8qIGZpcnN0IGludGVybmFsIHBhcmFtcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqc3R2MDkweF9maXJzdF9kZXY7CisKKy8qIGZpbmQgY2hpcCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9kZXYgKmZpbmRfZGV2KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCXU4IGkyY19hZGRyKQoreworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKworCS8qCisJIFNlYXJjaCBvZiB0aGUgbGFzdCBzdHYwOTAwIGNoaXAgb3IKKwkgZmluZCBpdCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KKwl3aGlsZSAoKHRlbXBfZGV2ICE9IE5VTEwpICYmCisJCSgodGVtcF9kZXYtPmludGVybmFsLT5pMmNfYWRhcCAhPSBpMmNfYWRhcCkgfHwKKwkJKHRlbXBfZGV2LT5pbnRlcm5hbC0+aTJjX2FkZHIgIT0gaTJjX2FkZHIpKSkgeworCisJCXRlbXBfZGV2ID0gdGVtcF9kZXYtPm5leHRfZGV2OworCX0KKworCXJldHVybiB0ZW1wX2RldjsKK30KKworLyogZGVhbGxvY2F0aW5nIGNoaXAgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9kZXYoc3RydWN0IHN0djA5MHhfaW50ZXJuYWwgKmludGVybmFsKQoreworCXN0cnVjdCBzdHYwOTB4X2RldiAqcHJldl9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYgKmRlbF9kZXYgPSBmaW5kX2RldihpbnRlcm5hbC0+aTJjX2FkYXAsCisJCQkJCQlpbnRlcm5hbC0+aTJjX2FkZHIpOworCisJaWYgKGRlbF9kZXYgIT0gTlVMTCkgeworCQlpZiAoZGVsX2RldiA9PSBzdHYwOTB4X2ZpcnN0X2RldikgeworCQkJc3R2MDkweF9maXJzdF9kZXYgPSBkZWxfZGV2LT5uZXh0X2RldjsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChwcmV2X2Rldi0+bmV4dF9kZXYgIT0gZGVsX2RldikKKwkJCQlwcmV2X2RldiA9IHByZXZfZGV2LT5uZXh0X2RldjsKKworCQkJcHJldl9kZXYtPm5leHRfZGV2ID0gZGVsX2Rldi0+bmV4dF9kZXY7CisJCX0KKworCQlrZnJlZShkZWxfZGV2KTsKKwl9Cit9CisKKy8qIGFsbG9jYXRpbmcgbmV3IGNoaXAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9kZXYgKmFwcGVuZF9pbnRlcm5hbChzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICpuZXdfZGV2OworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9kZXY7CisKKwluZXdfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MHhfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5ld19kZXYgIT0gTlVMTCkgeworCQluZXdfZGV2LT5pbnRlcm5hbCA9IGludGVybmFsOworCQluZXdfZGV2LT5uZXh0X2RldiA9IE5VTEw7CisKKwkJLyogYXBwZW5kIHRvIGxpc3QgKi8KKwkJaWYgKHN0djA5MHhfZmlyc3RfZGV2ID09IE5VTEwpIHsKKwkJCXN0djA5MHhfZmlyc3RfZGV2ID0gbmV3X2RldjsKKwkJfSBlbHNlIHsKKwkJCXRlbXBfZGV2ID0gc3R2MDkweF9maXJzdF9kZXY7CisJCQl3aGlsZSAodGVtcF9kZXYtPm5leHRfZGV2ICE9IE5VTEwpCisJCQkJdGVtcF9kZXYgPSB0ZW1wX2Rldi0+bmV4dF9kZXY7CisKKwkJCXRlbXBfZGV2LT5uZXh0X2RldiA9IG5ld19kZXY7CisJCX0KKwl9CisKKwlyZXR1cm4gbmV3X2RldjsKK30KKwogCiAvKiBEVkJTMSBhbmQgRFNTIEMvTiBMb29rdXAgdGFibGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkweF90YWIgc3R2MDkweF9zMWNuX3RhYltdID0gewpAQCAtNjgzLDYgKzc1OCw5IEBACiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTMyIHJlZzsKIAorCWlmIChlbmFibGUpCisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CisKIAlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEkyQ1JQVCk7CiAJaWYgKGVuYWJsZSkgewogCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiRW5hYmxlIEdhdGUiKTsKQEAgLTY5Niw5ICs3NzQsMTQgQEAKIAkJaWYgKChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBJMkNSUFQsIHJlZykpIDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KKworCWlmICghZW5hYmxlKQorCQltdXRleF91bmxvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CisKIAlyZXR1cm4gMDsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPnR1bmVyX2xvY2spOwogCXJldHVybiAtMTsKIH0KIApAQCAtNzU1LDEzICs4MzgsMTMgQEAKIAogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJJTklUMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkgLyogTVNCICovCkBAIC03ODIsMTMgKzg2NSwxMyBAQAogCXNyYXRlID0gMTA1ICogKHNyYXRlIC8gMTAwKTsKIAlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDQpOyAvKiBTUiAqIDJeMTYgLyBtYXN0ZXJfY2xrICovCi0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTIpOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMik7CiAJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA2KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMCk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEwKTsKIAl9IGVsc2UgewogCQlzeW0gID0gKHNyYXRlIDw8IDkpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDcpOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiA3KTsKIAl9CiAKIAlpZiAoc3ltIDwgMHg3ZmZmKSB7CkBAIC04MTYsMTMgKzg5OSwxMyBAQAogCXNyYXRlID0gOTUgKiAoc3JhdGUgLyAxMDApOwogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoKHN5bSA+PiA4KSAmIDB4N2YpKSA8IDApIC8qIE1TQiAqLwpAQCAtMTEwMywyMSArMTE4NiwyMSBAQAogCiAJc3dpdGNoIChzdGF0ZS0+ZGVtb2QpIHsKIAljYXNlIFNUVjA5MHhfREVNT0RVTEFUT1JfMDoKLQkJbXV0ZXhfbG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbG9jayk7CiAJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIpOwogCQlTVFYwOTB4X1NFVEZJRUxEKHJlZywgU1RPUF9DTEtWSVQxX0ZJRUxELCBlbmFibGUpOwogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIsIHJlZykgPCAwKQogCQkJZ290byBlcnI7Ci0JCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNUVjA5MHhfREVNT0RVTEFUT1JfMToKLQkJbXV0ZXhfbG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbG9jayk7CiAJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIpOwogCQlTVFYwOTB4X1NFVEZJRUxEKHJlZywgU1RPUF9DTEtWSVQyX0ZJRUxELCBlbmFibGUpOwogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIsIHJlZykgPCAwKQogCQkJZ290byBlcnI7Ci0JCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTEyNiwxNCArMTIwOSwxNCBAQAogCX0KIAlyZXR1cm4gMDsKIGVycjoKLQltdXRleF91bmxvY2soJmRlbW9kX2xvY2spOworCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IHN0djA5MHhfZHZic190cmFja19jcmwoc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlKQogewotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCS8qIFNldCBBQ0xDIEJDTEMgb3B0aW1pc2VkIHZhbHVlIHZzIFNSICovCiAJCWlmIChzdGF0ZS0+c3JhdGUgPj0gMTUwMDAwMDApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBQ0xDLCAweDJiKSA8IDApCkBAIC0xMjE1LDcgKzEyOTgsNyBAQAogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQkNMQywgMHgwOSkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCQkvKiBlbmFibGUgUzIgY2FycmllciBsb29wICovCiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSMkNGRywgMHgyNikgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMTI0Niw2ICsxMzI5LDEwIEBACiAJZGVmYXVsdDoKIAkJLyogZW5hYmxlIERWQi1TMiBhbmQgRFZCLVMyIGluIEF1dG8gTU9ERSAqLwogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERNRENGR01EKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMxX0VOQUJMRV9GSUVMRCwgMCk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMl9FTkFCTEVfRklFTEQsIDApOworCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQsIHJlZykgPCAwKQorCQkJZ290byBlcnI7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMV9FTkFCTEVfRklFTEQsIDEpOwogCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRFZCUzJfRU5BQkxFX0ZJRUxELCAxKTsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRENGR01ELCByZWcpIDwgMCkKQEAgLTEyNTcsNyArMTM0NCw3IEBACiAJCWlmIChzdHYwOTB4X2R2YnNfdHJhY2tfY3JsKHN0YXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIGVuYWJsZSBTMiBjYXJyaWVyIGxvb3AgKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVIyQ0ZHLCAweDI2KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMzA0LDcgKzEzOTEsNyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURJU1RBVEUsIHJlZykgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCWlmIChzdGF0ZS0+c3JhdGUgPD0gNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHg0NCkgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMTM0OCw3ICsxNDM1LDcgQEAKIAkJCSAqIENGUiBtYXggPSArMU1IegogCQkJICovCiAJCQlmcmVxX2FicyAgPSAxMDAwIDw8IDE2OwotCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlmcmVxX2FicyAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlmcmVxICAgICAgPSAoczE2KSBmcmVxX2FiczsKIAkJfSBlbHNlIHsKIAkJCS8qIENPTEQgU3RhcnQKQEAgLTEzNTgsNyArMTQ0NSw3IEBACiAJCQkgKi8KIAkJCWZyZXFfYWJzICA9IChzdGF0ZS0+c2VhcmNoX3JhbmdlIC8gMjAwMCkgKyA2MDA7CiAJCQlmcmVxX2FicyAgPSBmcmVxX2FicyA8PCAxNjsKLQkJCWZyZXFfYWJzIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJZnJlcSAgICAgID0gKHMxNikgZnJlcV9hYnM7CiAJCX0KIApAQCAtMTM4MSw3ICsxNDY4LDcgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0ZSSU5JVDAsIDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRVFVQUxDRkcsIDB4NDEpIDwgMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRkZFQ0ZHLCAweDQxKSA8IDApCkBAIC0xNDE4LDEwICsxNTA1LDEwIEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQywgMHg4OCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCS8qRnJlcXVlbmN5IG9mZnNldCBkZXRlY3RvciBzZXR0aW5nKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA8IDIwMDAwMDApIHsKLQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCQkvKiBDdXQgMiAqLwogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDM5KSA8IDApCiAJCQkJCWdvdG8gZXJyOwpAQCAtMTUxMiw3ICsxNTk5LDcgQEAKIAkJc3RlcHMgPSAxOwogCiAJZGlyID0gMTsKLQlmcmVxX3N0ZXAgPSAoMTAwMDAwMCAqIDI1NikgLyAoc3RhdGUtPm1jbGsgLyAyNTYpOworCWZyZXFfc3RlcCA9ICgxMDAwMDAwICogMjU2KSAvIChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAyNTYpOwogCWZyZXFfaW5pdCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3RlcHM7IGkrKykgewpAQCAtMTU4Myw3ICsxNjcwLDcgQEAKIAl1MzIgc3JhdGVfY29hcnNlID0gMCwgYWdjMiA9IDAsIGNhcl9zdGVwID0gMTIwMCwgcmVnOwogCXUzMiBhZ2MydGg7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApCiAJCWFnYzJ0aCA9IDB4MmUwMDsKIAllbHNlCiAJCWFnYzJ0aCA9IDB4MWYwMDsKQEAgLTE2MTksMTMgKzE3MDYsMTMgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQUdDMlJFRiwgMHg1MCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDk5KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlNURVAsIDB4OTgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg2YSkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJTVEVQLCAweDk1KSA8IDApCkBAIC0xNjc3LDcgKzE3NjQsNyBAQAogCQkJCVNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDMkkwKTsKIAkJfQogCQlhZ2MyIC89IDEwOwotCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAkJY3VyX3N0ZXArKzsKIAkJZGlyICo9IC0xOwogCQlpZiAoKHRtZ19jcHQgPj0gNSkgJiYgKGFnYzIgPCBhZ2MydGgpICYmCkBAIC0xNjk1LDEyICsxNzgyLDEyIEBACiAKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KSB7CiAJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIGZyZXEpIDwgMCkKLQkJCQkJZ290byBlcnI7CisJCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCQl9CiAKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT50dW5lcl9idykgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMTcxMyw3ICsxODAwLDcgQEAKIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cyhmZSwgJnJlZykgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHJlZykKQEAgLTE3MjksOSArMTgxNiwxMiBAQAogCWlmICghdG1nX2xvY2spCiAJCXNyYXRlX2NvYXJzZSA9IDA7CiAJZWxzZQotCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAogCXJldHVybiBzcmF0ZV9jb2Fyc2U7CisKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTE3NDEsNyArMTgzMSw3IEBACiB7CiAJdTMyIHNyYXRlX2NvYXJzZSwgZnJlcV9jb2Fyc2UsIHN5bSwgcmVnOwogCi0Jc3JhdGVfY29hcnNlID0gc3R2MDkweF9nZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5tY2xrKTsKKwlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAlmcmVxX2NvYXJzZSAgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjIpIDw8IDg7CiAJZnJlcV9jb2Fyc2UgfD0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBDRlIxKTsKIAlzeW0gPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCkBAIC0xNzY3LDEwICsxODU3LDEwIEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDM4KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDc5KSA8IDApCiAJCQkJZ290byBlcnI7Ci0JCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg0OSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0xNzc4LDIwICsxODY4LDIwIEBACiAJCWlmIChzcmF0ZV9jb2Fyc2UgPiAzMDAwMDAwKSB7CiAJCQlzeW0gID0gMTMgKiAoc3JhdGVfY29hcnNlIC8gMTApOyAvKiBTRlJVUCA9IFNGUiArIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDEsIChzeW0gPj4gOCkgJiAweDdmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSVVAwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gMTAgKiAoc3JhdGVfY29hcnNlIC8gMTMpOyAvKiBTRlJMT1cgPSBTRlIgLSAzMCUgKi8KIAkJCXN5bSAgPSAoc3ltIC8gMTAwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gKHNyYXRlX2NvYXJzZSAvIDEwMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHhmZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQwLCBzeW0gJiAweGZmKSA8IDApCkBAIC0xNzk5LDIwICsxODg5LDIwIEBACiAJCX0gZWxzZSB7CiAJCQlzeW0gID0gMTMgKiAoc3JhdGVfY29hcnNlIC8gMTApOyAvKiBTRlJVUCA9IFNGUiArIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDEsIChzeW0gPj4gOCkgJiAweDdmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSVVAwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gMTAgKiAoc3JhdGVfY29hcnNlIC8gMTQpOyAvKiBTRlJMT1cgPSBTRlIgLSAzMCUgKi8KIAkJCXN5bSAgPSAoc3ltIC8gMTAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gKHNyYXRlX2NvYXJzZSAvIDEwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHhmZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQwLCBzeW0gJiAweGZmKSA8IDApCkBAIC0xODc0LDE4ICsxOTY0LDE5IEBACiAJdTMyIGFnYzIsIHJlZywgc3JhdGVfY29hcnNlOwogCXMzMiBjcHRfZmFpbCwgYWdjMl9vdmZsdywgaTsKIAl1OCBrX3JlZiwga19tYXgsIGtfbWluOwotCWludCBjb2Fyc2VfZmFpbCwgbG9jazsKKwlpbnQgY29hcnNlX2ZhaWwgPSAwOworCWludCBsb2NrOwogCiAJa19tYXggPSAxMTA7CiAJa19taW4gPSAxMDsKIAogCWFnYzIgPSBzdHYwOTB4X2dldF9hZ2MyX21pbl9sZXZlbChzdGF0ZSk7CiAKLQlpZiAoYWdjMiA+IFNUVjA5MHhfU0VBUkNIX0FHQzJfVEgoc3RhdGUtPmRldl92ZXIpKSB7CisJaWYgKGFnYzIgPiBTVFYwOTB4X1NFQVJDSF9BR0MyX1RIKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlcikpIHsKIAkJbG9jayA9IDA7CiAJfSBlbHNlIHsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJDRkcsIDB4YzQpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJfSBlbHNlIHsKQEAgLTE4OTcsNyArMTk4OCw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBSVENTMiwgMHg0NCkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRVFVQUxDRkcsIDB4NDEpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGRkVDRkcsIDB4NDEpIDwgMCkKQEAgLTE5NTYsNyArMjA0Nyw3IEBACiAJdTMyIHJlZzsKIAlzMzIgdG1nX2NwdCA9IDAsIGk7CiAJdTggZnJlcSwgdG1nX3RoaCwgdG1nX3RobDsKLQlpbnQgdG1nX2xvY2s7CisJaW50IHRtZ19sb2NrID0gMDsKIAogCWZyZXEgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENBUkZSRVEpOwogCXRtZ190aGggPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIFRNR1RIUklTRSk7CkBAIC0yMDgwLDEyICsyMTcxLDEyIEBACiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KGZlLCBmcmVxKSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTIwOTgsNyArMjE4OSw3IEBACiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChyZWcpCkBAIC0yMTI5LDYgKzIyMjAsOCBAQAogCiAJcmV0dXJuIGxvY2s7CiAKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTIxNDIsMTMgKzIyMzUsMTMgQEAKIAljYXJfbWF4ID0gc3RhdGUtPnNlYXJjaF9yYW5nZSAvIDEwMDA7CiAJY2FyX21heCArPSBjYXJfbWF4IC8gMTA7CiAJY2FyX21heCAgPSA2NTUzNiAqIChjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwljYXJfbWF4IC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwIDsgLyogbWF4Y2FycmllciBzaG91bGQgYmU8PSArLTEvNCBNY2xrICovCiAKIAlpbmMgID0gc3JhdGU7Ci0JaW5jIC89IHN0YXRlLT5tY2xrIC8gMTAwMDsKKwlpbmMgLz0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMDsKIAlpbmMgKj0gMjU2OwogCWluYyAqPSAyNTY7CiAJaW5jIC89IDEwMDA7CkBAIC0yMjA5LDcgKzIzMDIsNyBAQAogCiAJY2FyX21heCArPSAoY2FyX21heCAvIDEwKTsgLyogMTAlIG1hcmdpbiAqLwogCWNhcl9tYXggID0gKDY1NTM2ICogY2FyX21heCAvIDIpOwotCWNhcl9tYXggLz0gc3RhdGUtPm1jbGsgLyAxMDAwOworCWNhcl9tYXggLz0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMDsKIAogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwOwpAQCAtMjIzNCw3ICsyMzI3LDcgQEAKIAljYXJfbWF4ICA9IHN0YXRlLT5zZWFyY2hfcmFuZ2UgLyAxMDAwOwogCWNhcl9tYXggKz0gKGNhcl9tYXggLyAxMCk7CiAJY2FyX21heCAgPSAoNjU1MzYgKiBjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwljYXJfbWF4IC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAlpZiAoY2FyX21heCA+IDB4NDAwMCkKIAkJY2FyX21heCA9IDB4NDAwMDsKIApAQCAtMjMwNCw3ICsyMzk3LDcgQEAKIAljYXNlIFNUVjA5MHhfU0VBUkNIX0RWQlMxOgogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFNTOgogCQkvKiBhY2NlbGVyYXRlIHRoZSBmcmVxdWVuY3kgZGV0ZWN0b3IgKi8KLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHgzQikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0yMzE1LDcgKzI0MDgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFZCUzI6Ci0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0yMzI4LDcgKzI0MjEsNyBAQAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfQVVUTzoKIAlkZWZhdWx0OgogCQkvKiBhY2NlbGVyYXRlIHRoZSBmcmVxdWVuY3kgZGV0ZWN0b3IgKi8KLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHgzYikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQpAQCAtMjM1MCw3ICsyNDQzLDcgQEAKIAkJLypydW4gdGhlIFNXIHNlYXJjaCAyIHRpbWVzIG1heGltdW0qLwogCQlpZiAobG9jayB8fCBub19zaWduYWwgfHwgKHRyaWFscyA9PSAyKSkgewogCQkJLypDaGVjayBpZiB0aGUgZGVtb2QgaXMgbm90IGxvc2luZyBsb2NrIGluIERWQlMyKi8KLQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg0OSkgPCAwKQogCQkJCQlnb3RvIGVycjsKIAkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDllKSA8IDApCkBAIC0yMzcyLDcgKzI0NjUsNyBAQAogCQkJCQkvKkZBTFNFIGxvY2ssIFRoZSBkZW1vZCBpcyBsb29zaW5nIGxvY2sgKi8KIAkJCQkJbG9jayA9IDA7CiAJCQkJCWlmICh0cmlhbHMgPCAyKSB7Ci0JCQkJCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQkJCQkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQkJCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQogCQkJCQkJCQlnb3RvIGVycjsKIAkJCQkJCX0KQEAgLTI0MjIsMTEgKzI1MTUsMTEgQEAKIAlkZXJvdCB8PSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjApOwogCiAJZGVyb3QgPSBjb21wMihkZXJvdCwgMjQpOwotCWludF8xID0gc3RhdGUtPm1jbGsgPj4gMTI7CisJaW50XzEgPSBtY2xrID4+IDEyOwogCWludF8yID0gZGVyb3QgPj4gMTI7CiAKIAkvKiBjYXJyaWVyX2ZyZXF1ZW5jeSA9IE1hc3RlckNsb2NrICogUmVnIC8gMl4yNCAqLwotCXRtcF8xID0gc3RhdGUtPm1jbGsgJSAweDEwMDA7CisJdG1wXzEgPSBtY2xrICUgMHgxMDAwOwogCXRtcF8yID0gZGVyb3QgJSAweDEwMDA7CiAKIAlkZXJvdCA9IChpbnRfMSAqIGludF8yKSArCkBAIC0yNTAyLDEzICsyNTk1LDEzIEBACiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSkgewogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeShmZSwgJnN0YXRlLT5mcmVxdWVuY3kpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCiAJCWdvdG8gZXJyOwogCi0Jb2Zmc3RfZnJlcSA9IHN0djA5MHhfZ2V0X2Nhcl9mcmVxKHN0YXRlLCBzdGF0ZS0+bWNsaykgLyAxMDAwOworCW9mZnN0X2ZyZXEgPSBzdHYwOTB4X2dldF9jYXJfZnJlcShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKSAvIDEwMDA7CiAJc3RhdGUtPmZyZXF1ZW5jeSArPSBvZmZzdF9mcmVxOwogCiAJaWYgKHN0djA5MHhfZ2V0X3ZpdGVyYmkoc3RhdGUpIDwgMCkKQEAgLTI1MzAsNyArMjYyMyw3IEBACiAKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3kpIHsKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KGZlLCAmc3RhdGUtPmZyZXF1ZW5jeSkgPCAwKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCX0KIAogCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0yNTUwLDYgKzI2NDMsOSBAQAogCX0KIAogCXJldHVybiBTVFYwOTB4X09VVE9GUkFOR0U7CisKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTI1NzksNyArMjY3NSw3IEBACiAJczMyIGk7CiAJc3RydWN0IHN0djA5MHhfbG9uZ19mcmFtZV9jcmxvb3AgKmNhcl9sb29wLCAqY2FyX2xvb3BfcXBza19sb3csICpjYXJfbG9vcF9hcHNrX2xvdzsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA9PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA9PSAweDIwKSB7CiAJCWNhcl9sb29wCQk9IHN0djA5MHhfczJfY3JsX2N1dDIwOwogCQljYXJfbG9vcF9xcHNrX2xvdwk9IHN0djA5MHhfczJfbG93cXBza19jcmxfY3V0MjA7CiAJCWNhcl9sb29wX2Fwc2tfbG93CT0gc3R2MDkweF9zMl9hcHNrX2NybF9jdXQyMDsKQEAgLTI3MDAsNyArMjc5Niw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCS8qIEN1dCAzLjAgYW5kIHVwICovCiAJCXNob3J0X2NybCA9IHN0djA5MHhfczJfc2hvcnRfY3JsX2N1dDMwOwogCX0gZWxzZSB7CkBAIC0yNzMyLDcgKzI4MjgsNyBAQAogCXMzMiBzcmF0ZSwgcGlsb3RzLCBhY2xjLCBmXzEsIGZfMCwgaSA9IDAsIGJsaW5kX3R1bmUgPSAwOwogCXUzMiByZWc7CiAKLQlzcmF0ZSAgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCXNyYXRlICA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCXNyYXRlICs9IHN0djA5MHhfZ2V0X3RtZ29mZnN0KHN0YXRlLCBzcmF0ZSk7CiAKIAlzd2l0Y2ggKHN0YXRlLT5kZWxzeXMpIHsKQEAgLTI3NTEsNyArMjg0Nyw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBERU1PRCwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJCWlmIChzdHYwOTB4X2dldF92aXRlcmJpKHN0YXRlKSA8IDApCiAJCQkJZ290byBlcnI7CiAKQEAgLTI4NjgsNyArMjk2NCw3IEBACiAJCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EVkJTMSkJfHwKIAkJICAgIChzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9TRUFSQ0hfRFNTKQkJfHwKIAkJICAgIChzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9TRUFSQ0hfQVVUTykpIHsKQEAgLTI4OTAsNyArMjk4Niw4IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzEsIDB4ODApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlpZiAoKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpIHx8IChzdGF0ZS0+c3JhdGUgPCAxMDAwMDAwMCkpIHsKKwlpZiAoKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB8fCAoYmxpbmRfdHVuZSA9PSAxKSB8fAorCSAgICAoc3RhdGUtPnNyYXRlIDwgMTAwMDAwMDApKSB7CiAJCS8qIHVwZGF0ZSBpbml0aWFsIGNhcnJpZXIgZnJlcSB3aXRoIHRoZSBmb3VuZCBmcmVxIG9mZnNldCAqLwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0ZSSU5JVDEsIGZfMSkgPCAwKQogCQkJZ290byBlcnI7CkBAIC0yODk4LDcgKzI5OTUsNyBAQAogCQkJZ290byBlcnI7CiAJCXN0YXRlLT50dW5lcl9idyA9IHN0djA5MHhfY2FyX3dpZHRoKHNyYXRlLCBzdGF0ZS0+cm9sbG9mZikgKyAxMDAwMDAwMDsKIAotCQlpZiAoKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpKSB7CisJCWlmICgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpKSB7CiAKIAkJCWlmIChzdGF0ZS0+YWxnbyAhPSBTVFYwOTB4X1dBUk1fU0VBUkNIKSB7CiAKQEAgLTI5MDcsNyArMzAwNCw3IEBACiAKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aCkgewogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCQlnb3RvIGVycjsKKwkJCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCQkJfQogCiAJCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMjk1MCw3ICszMDQ3LDcgQEAKIAogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQlnb3RvIGVycjsKIAl9CkBAIC0yOTU5LDYgKzMwNTYsOSBAQAogCQlzdHYwOTB4X3NldF92aXRfdGh0cmFjcShzdGF0ZSk7CiAKIAlyZXR1cm4gMDsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMzAyNiw3ICszMTI2LDcgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJLyogcm9sbG9mZiB0byBhdXRvIG1vZGUgaWYgRFZCUzIgKi8KIAkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBERU1PRCk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBNQU5VQUxfU1hST0xMT0ZGX0ZJRUxELCAweDAwKTsKQEAgLTMwNjIsNyArMzE2Miw3IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgMHg1YykgPCAwKSAvKiBEZW1vZCBzdG9wICovCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJaWYgKHN0YXRlLT5zcmF0ZSA+IDUwMDAwMDApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDT1JSRUxBQlMsIDB4OWUpIDwgMCkKIAkJCQlnb3RvIGVycjsKQEAgLTMxMDIsNyArMzIwMiw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDM4KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBLUkVGVE1HLCAweDVhKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoc3RhdGUtPmFsZ28gPT0gU1RWMDkweF9DT0xEX1NFQVJDSCkKQEAgLTMxMjAsOSArMzIyMCwxMSBAQAogCQlpZiAoc3R2MDkweF9zZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5zcmF0ZSkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0djA5MHhfc2V0X21heF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGssIHN0YXRlLT5zcmF0ZSkgPCAwKQorCQlpZiAoc3R2MDkweF9zZXRfbWF4X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGssCisJCQkJCSAgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJaWYgKHN0djA5MHhfc2V0X21pbl9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGssIHN0YXRlLT5zcmF0ZSkgPCAwKQorCQlpZiAoc3R2MDkweF9zZXRfbWluX3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGssCisJCQkJCSAgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoc3RhdGUtPnNyYXRlID49IDEwMDAwMDAwKQpAQCAtMzEzNiwxOCArMzIzOCwyMSBAQAogCQlnb3RvIGVycjsKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKSB7Ci0JCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKGZlLCAxMCkgPCAwKSAvKiAxMGRCICovCi0JCQlnb3RvIGVycjsKKwkJcmVnID0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYmJnYWluOworCQlpZiAocmVnID09IDApCisJCQlyZWcgPSAxMDsgLyogZGVmYXVsdDogMTBkQiAqLworCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JiZ2FpbihmZSwgcmVnKSA8IDApCisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KSB7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KGZlLCBzdGF0ZS0+ZnJlcXVlbmN5KSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT50dW5lcl9idykgPCAwKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTMxNTUsMjIgKzMyNjAsMjIgQEAKIAogCW1zbGVlcCg1MCk7CiAKLQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAxKSA8IDApCi0JCWdvdG8gZXJyOwotCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKLQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKKwkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMSkgPCAwKQogCQkJZ290byBlcnI7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCisJCQlnb3RvIGVycl9nYXRlb2ZmOworCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCisJCQlnb3RvIGVycjsKKworCQlpZiAocmVnKQorCQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHBoYXNlIGxvY2tlZCIpOworCQllbHNlIHsKKwkJCWRwcmludGsoRkVfREVCVUcsIDEsICJUdW5lciB1bmxvY2tlZCIpOworCQkJcmV0dXJuIFNUVjA5MHhfTk9DQVJSSUVSOworCQl9CiAJfQogCi0JaWYgKHJlZykKLQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHBoYXNlIGxvY2tlZCIpOwotCWVsc2UKLQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHVubG9ja2VkIik7Ci0KLQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCi0JCWdvdG8gZXJyOwotCiAJbXNsZWVwKDEwKTsKIAlhZ2MxX3Bvd2VyID0gTUFLRVdPUkQxNihTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEFHQ0lRSU4xKSwKIAkJCQlTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEFHQ0lRSU4wKSk7CkBAIC0zMTk0LDcgKzMyOTksNyBAQAogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERFTU9EKTsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFNQRUNJTlZfQ09OVFJPTF9GSUVMRCwgc3RhdGUtPmludmVyc2lvbik7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCQkvKiByb2xsb2ZmIHRvIGF1dG8gbW9kZSBpZiBEVkJTMiAqLwogCQkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIE1BTlVBTF9TWFJPTExPRkZfRklFTEQsIDEpOwogCQl9IGVsc2UgewpAQCAtMzIzOCw3ICszMzQzLDcgQEAKIAlpZiAoKGxvY2spICYmIChzaWduYWxfc3RhdGUgPT0gU1RWMDkweF9SQU5HRU9LKSkgeyAvKiBzaWduYWwgd2l0aGluIFJhbmdlICovCiAJCXN0djA5MHhfb3B0aW1pemVfdHJhY2soc3RhdGUpOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJLyogPj0gQ3V0IDIuMCA6cmVsZWFzZSBUUyByZXNldCBhZnRlcgogCQkJICogZGVtb2QgbG9jayBhbmQgb3B0aW1pemVkIFRyYWNraW5nCiAJCQkgKi8KQEAgLTMyOTMsNiArMzM5OCw4IEBACiAJfQogCXJldHVybiBzaWduYWxfc3RhdGU7CiAKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTMzMDMsNiArMzQxMCw5IEBACiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpwcm9wcyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCisJaWYgKHAtPmZyZXF1ZW5jeSA9PSAwKQorCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfSU5WQUxJRDsKKwogCXN0YXRlLT5kZWxzeXMgPSBwcm9wcy0+ZGVsaXZlcnlfc3lzdGVtOwogCXN0YXRlLT5mcmVxdWVuY3kgPSBwLT5mcmVxdWVuY3k7CiAJc3RhdGUtPnNyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOwpAQCAtMzM1Myw3ICszNDYzLDggQEAKIAkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgUEtUREVMSU5fTE9DS19GSUVMRCkpIHsKIAkJCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIFRTU1RBVFVTKTsKIAkJCQlpZiAoU1RWMDkweF9HRVRGSUVMRF9QeChyZWcsIFRTRklGT19MSU5FT0tfRklFTEQpKSB7Ci0JCQkJCSpzdGF0dXMgPSBGRV9IQVNfQ0FSUklFUiB8CisJCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwKKwkJCQkJCSAgRkVfSEFTX0NBUlJJRVIgfAogCQkJCQkJICBGRV9IQVNfVklURVJCSSB8CiAJCQkJCQkgIEZFX0hBU19TWU5DIHwKIAkJCQkJCSAgRkVfSEFTX0xPQ0s7CkBAIC0zMzcwLDcgKzM0ODEsMTEgQEAKIAkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgTE9DS0VEVklUX0ZJRUxEKSkgewogCQkJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVFNTVEFUVVMpOwogCQkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgVFNGSUZPX0xJTkVPS19GSUVMRCkpIHsKLQkJCQkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLOworCQkJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8CisJCQkJCQkgIEZFX0hBU19DQVJSSUVSIHwKKwkJCQkJCSAgRkVfSEFTX1ZJVEVSQkkgfAorCQkJCQkJICBGRV9IQVNfU1lOQyB8CisJCQkJCQkgIEZFX0hBU19MT0NLOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzc3MCw2ICszODg1LDE1IEBACiB7CiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKKwlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkLS07CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQgPD0gMCkgeworCisJCWRwcmludGsoRkVfRVJST1IsIDEsICJBY3R1YWxseSByZW1vdmluZyIpOworCisJCXJlbW92ZV9kZXYoc3RhdGUtPmludGVybmFsKTsKKwkJa2ZyZWUoc3RhdGUtPmludGVybmFsKTsKKwl9CisKIAlrZnJlZShzdGF0ZSk7CiB9CiAKQEAgLTM5MDEsMTAgKzQwMjUsMTAgQEAKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfTkNPQVJTRSwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCi0Jc3RhdGUtPm1jbGsgPSBzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKKwlzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPSBzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKIAogCS8qU2V0IHRoZSBEaXNlcUMgZnJlcXVlbmN5IHRvIDIyS0h6ICovCi0JZGl2ID0gc3RhdGUtPm1jbGsgLyA3MDQwMDA7CisJZGl2ID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gNzA0MDAwOwogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGMjJUWCwgZGl2KSA8IDApCiAJCWdvdG8gZXJyOwogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGMjJSWCwgZGl2KSA8IDApCkBAIC0zOTIwLDcgKzQwNDQsNyBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMV9tb2RlKSB7CiAJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgogCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgpAQCAtNDA5Miw2ICs0MjE2LDcxIEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnRzMV9jbGsgPiAwKSB7CisJCXUzMiBzcGVlZDsKKworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMV9tb2RlKSB7CisJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgorCQlkZWZhdWx0OgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czFfY2xrIC8gNCk7CisJCQlpZiAoc3BlZWQgPCAweDA4KQorCQkJCXNwZWVkID0gMHgwODsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUzoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMxX2NsayAvIDMyKTsKKwkJCWlmIChzcGVlZCA8IDB4MjApCisJCQkJc3BlZWQgPSAweDIwOworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJfQorCQlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX1RTQ0ZHTSk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBUU0ZJRk9fTUFOU1BFRURfRklFTEQsIDMpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNDRkdNLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNTUEVFRCwgc3BlZWQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChzdGF0ZS0+Y29uZmlnLT50czJfY2xrID4gMCkgeworCQl1MzIgc3BlZWQ7CisKKwkJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLT50czJfbW9kZSkgeworCQljYXNlIFNUVjA5MHhfVFNNT0RFX1BBUkFMTEVMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9EVkJDSToKKwkJZGVmYXVsdDoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMyX2NsayAvIDQpOworCQkJaWYgKHNwZWVkIDwgMHgwOCkKKwkJCQlzcGVlZCA9IDB4MDg7CisJCQlpZiAoc3BlZWQgPiAweEZGKQorCQkJCXNwZWVkID0gMHhGRjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQ6CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX0NPTlRJTlVPVVM6CisJCQlzcGVlZCA9IHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvCisJCQkJKHN0YXRlLT5jb25maWctPnRzMl9jbGsgLyAzMik7CisJCQlpZiAoc3BlZWQgPCAweDIwKQorCQkJCXNwZWVkID0gMHgyMDsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCX0KKwkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9QMl9UU0NGR00pOworCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgVFNGSUZPX01BTlNQRUVEX0ZJRUxELCAzKTsKKwkJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHTSwgcmVnKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTU1BFRUQsIHNwZWVkKSA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKIAlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHSCk7CiAJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFJTVF9IV0FSRV9GSUVMRCwgMHgwMSk7CiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHSCwgcmVnKSA8IDApCkBAIC00MTIwLDYgKzQzMDksMTUgQEAKIAljb25zdCBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CiAJdTMyIHJlZzsKIAorCWlmIChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPT0gMCkgeworCQlzdHYwOTB4X3NldF9tY2xrKHN0YXRlLCAxMzUwMDAwMDAsIGNvbmZpZy0+eHRhbCk7IC8qIDEzNSBNaHogKi8KKwkJbXNsZWVwKDUpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1lOVENUUkwsCisJCQkJICAgICAgMHgyMCB8IGNvbmZpZy0+Y2xrX21vZGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKKwl9CisKIAlpZiAoc3R2MDkweF93YWtldXAoZmUpIDwgMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiRXJyb3Igd2FraW5nIGRldmljZSIpOwogCQlnb3RvIGVycjsKQEAgLTQxNDIsMTIgKzQzNDAsMTIgQEAKIAogCWlmIChjb25maWctPnR1bmVyX3NldF9tb2RlKSB7CiAJCWlmIChjb25maWctPnR1bmVyX3NldF9tb2RlKGZlLCBUVU5FUl9XQUtFKSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKGNvbmZpZy0+dHVuZXJfaW5pdCkgewogCQlpZiAoY29uZmlnLT50dW5lcl9pbml0KGZlKSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtNDE1Nyw2ICs0MzU1LDkgQEAKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gMDsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtNDE4OCwxNiArNDM4OSwyNiBAQAogCX0KIAogCS8qIFNUVjA5MHggaW5pdCAqLwotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURJU1RBVEUsIDB4NWMpIDwgMCkgLyogU3RvcCBEZW1vZCAqLworCisJLyogU3RvcCBEZW1vZCAqLworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9ETURJU1RBVEUsIDB4NWMpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX0RNRElTVEFURSwgMHg1YykgPCAwKQogCQlnb3RvIGVycjsKIAogCW1zbGVlcCg1KTsKIAotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBUTlJDRkcsIDB4NmMpIDwgMCkgLyogY2hlY2sgcmVnaXN0ZXIgISAoTm8gVHVuZXIgTW9kZSkgKi8KKwkvKiBTZXQgTm8gVHVuZXIgTW9kZSAqLworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UTlJDRkcsIDB4NmMpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1ROUkNGRywgMHg2YykgPCAwKQogCQlnb3RvIGVycjsKIAorCS8qIEkyQyByZXBlYXRlciBPRkYgKi8KIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRU5BUlBUX0xFVkVMX0ZJRUxELCBjb25maWctPnJlcGVhdGVyX2xldmVsKTsKLQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgSTJDUlBULCByZWcpIDwgMCkgLyogcmVwZWF0ZXIgT0ZGICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX0kyQ1JQVCwgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMl9JMkNSUFQsIHJlZykgPCAwKQogCQlnb3RvIGVycjsKIAogCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9OQ09BUlNFLCAweDEzKSA8IDApIC8qIHNldCBQTEwgZGl2aWRlciAqLwpAQCAtNDIxNiw4ICs0NDI3LDggQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCXN0YXRlLT5kZXZfdmVyID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9NSUQpOwotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9NSUQpOworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNHRU5FUkFMLCAweDBjKSA8IDApCiAJCQlnb3RvIGVycjsKIApAQCAtNDIyOCwyOCArNDQzOSwzNiBAQAogCQkJCWdvdG8gZXJyOwogCQl9CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kZXZfdmVyIDwgMHgyMCkgeworCX0gZWxzZSBpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDwgMHgyMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiRVJST1I6IFVuc3VwcG9ydGVkIEN1dDogMHglMDJ4ISIsCi0JCQlzdGF0ZS0+ZGV2X3Zlcik7CisJCQlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCiAJCWdvdG8gZXJyOwotCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPiAweDMwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPiAweDMwKSB7CiAJCS8qIHdlIHNob3VsZG4ndCBiYWlsIG91dCBmcm9tIGhlcmUgKi8KIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIklORk86IEN1dDogMHglMDJ4IHByb2JhYmx5IGluY29tcGxldGUgc3VwcG9ydCEiLAotCQkJc3RhdGUtPmRldl92ZXIpOworCQkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKIAl9CiAKKwkvKiBBREMxIHJhbmdlICovCisJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9UU1RUTlIxKTsKKwlTVFYwOTB4X1NFVEZJRUxEKHJlZywgQURDMV9JTk1PREVfRklFTEQsCisJCShjb25maWctPmFkYzFfcmFuZ2UgPT0gU1RWMDkweF9BRENfMVZwcCkgPyAwIDogMSk7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjEsIHJlZykgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIEFEQzIgcmFuZ2UgKi8KKwlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjMpOworCVNUVjA5MHhfU0VURklFTEQocmVnLCBBREMyX0lOTU9ERV9GSUVMRCwKKwkJKGNvbmZpZy0+YWRjMl9yYW5nZSA9PSBTVFYwOTB4X0FEQ18xVnBwKSA/IDAgOiAxKTsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMywgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFJFUzAsIDB4ODApIDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFJFUzAsIDB4MDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlzdHYwOTB4X3NldF9tY2xrKHN0YXRlLCAxMzUwMDAwMDAsIGNvbmZpZy0+eHRhbCk7IC8qIDEzNSBNaHogKi8KLQltc2xlZXAoNSk7Ci0JaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1NZTlRDVFJMLCAweDIwIHwgY29uZmlnLT5jbGtfbW9kZSkgPCAwKQotCQlnb3RvIGVycjsKLQlzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKLQogCXJldHVybiAwOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKQEAgLTQyOTksNiArNDUxOCw3IEBACiAJCQkJICAgIGVudW0gc3R2MDkweF9kZW1vZHVsYXRvciBkZW1vZCkKIHsKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9pbnQ7CiAKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQpAQCAtNDMxNCw4ICs0NTM0LDMyIEBACiAJc3RhdGUtPmRldmljZQkJCQk9IGNvbmZpZy0+ZGV2aWNlOwogCXN0YXRlLT5yb2xsb2ZmCQkJCT0gU1RWMDkweF9ST18zNTsgLyogZGVmYXVsdCAqLwogCi0JaWYgKHN0YXRlLT5kZW1vZCA9PSBTVFYwOTB4X0RFTU9EVUxBVE9SXzApCi0JCW11dGV4X2luaXQoJmRlbW9kX2xvY2spOworCXRlbXBfaW50ID0gZmluZF9kZXYoc3RhdGUtPmkyYywKKwkJCQlzdGF0ZS0+Y29uZmlnLT5hZGRyZXNzKTsKKworCWlmICgodGVtcF9pbnQgIT0gTlVMTCkgJiYgKHN0YXRlLT5kZW1vZF9tb2RlID09IFNUVjA5MHhfRFVBTCkpIHsKKwkJc3RhdGUtPmludGVybmFsID0gdGVtcF9pbnQtPmludGVybmFsOworCQlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkKys7CisJCWRwcmludGsoRkVfSU5GTywgMSwgIkZvdW5kIEludGVybmFsIFN0cnVjdHVyZSEiKTsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeCIsCisJCQlzdGF0ZS0+ZGV2aWNlID09IFNUVjA5MDAgPyAiU1RWMDkwMCIgOiAiU1RWMDkwMyIsCisJCQlkZW1vZCwKKwkJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3Zlcik7CisJCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCX0gZWxzZSB7CisJCXN0YXRlLT5pbnRlcm5hbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTB4X2ludGVybmFsKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJc3RhdGUtPmludGVybmFsLT5udW1fdXNlZCA9IDE7CisJCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IDA7CisJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA9IDA7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkYXAgPSBzdGF0ZS0+aTJjOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+YWRkcmVzczsKKwkJZHByaW50ayhGRV9JTkZPLCAxLCAiQ3JlYXRlIE5ldyBJbnRlcm5hbCBTdHJ1Y3R1cmUhIik7CisJfQorCisJbXV0ZXhfaW5pdCgmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKKwltdXRleF9pbml0KCZzdGF0ZS0+aW50ZXJuYWwtPnR1bmVyX2xvY2spOwogCiAJaWYgKHN0djA5MHhfc2xlZXAoJnN0YXRlLT5mcm9udGVuZCkgPCAwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFcnJvciBwdXR0aW5nIGRldmljZSB0byBzbGVlcCIpOwpAQCAtNDMzMSwxMCArNDU3NSwxMCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWRwcmludGsoRkVfRVJST1IsIDEsICJBdHRhY2hpbmcgJXMgZGVtb2R1bGF0b3IoJWQpIEN1dD0weCUwMnhcbiIsCisJZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeCIsCiAJICAgICAgIHN0YXRlLT5kZXZpY2UgPT0gU1RWMDkwMCA/ICJTVFYwOTAwIiA6ICJTVFYwOTAzIiwKIAkgICAgICAgZGVtb2QsCi0JICAgICAgIHN0YXRlLT5kZXZfdmVyKTsKKwkgICAgICAgc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKIAogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaAppbmRleCBiMTMzODA3Li4zMGYwMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKQEAgLTYwLDYgKzYwLDExIEBACiAJU1RWMDkweF9SUFRMRVZFTF8yCT0gNywKIH07CiAKK2VudW0gc3R2MDkweF9hZGNfcmFuZ2UgeworCVNUVjA5MHhfQURDXzJWcHAJPSAwLAorCVNUVjA5MHhfQURDXzFWcHAJPSAxCit9OworCiBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgewogCWVudW0gc3R2MDkweF9kZXZpY2UJZGV2aWNlOwogCWVudW0gc3R2MDkweF9tb2RlCWRlbW9kX21vZGU7CkBAIC02OCwxMyArNzMsMTcgQEAKIAl1MzIgeHRhbDsgLyogZGVmYXVsdDogODAwMDAwMCAqLwogCXU4IGFkZHJlc3M7IC8qIGRlZmF1bHQ6IDB4NjggKi8KIAotCXUzMiByZWZfY2xrOyAvKiBkZWZhdWx0OiAxNjAwMDAwMCBGSVhNRSB0byB0dW5lciBjb25maWcgKi8KLQogCXU4IHRzMV9tb2RlOwogCXU4IHRzMl9tb2RlOworCXUzMiB0czFfY2xrOworCXUzMiB0czJfY2xrOwogCiAJZW51bSBzdHYwOTB4X2kyY3JwdAlyZXBlYXRlcl9sZXZlbDsKIAorCXU4CQkJdHVuZXJfYmJnYWluOyAvKiBkZWZhdWx0OiAxMGRiICovCisJZW51bSBzdHYwOTB4X2FkY19yYW5nZQlhZGMxX3JhbmdlOyAvKiBkZWZhdWx0OiAyVnBwICovCisJZW51bSBzdHYwOTB4X2FkY19yYW5nZQlhZGMyX3JhbmdlOyAvKiBkZWZhdWx0OiAyVnBwICovCisKIAlib29sIGRpc2VxY19lbnZlbG9wZV9tb2RlOwogCiAJaW50ICgqdHVuZXJfaW5pdCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaAppbmRleCA1OTIxYThkLi41Yjc4MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oCkBAIC0yMzAsMTEgKzIzMCwyMyBAQAogCXMzMiByZWFkOwogfTsKIAorc3RydWN0IHN0djA5MHhfaW50ZXJuYWwgeworCXN0cnVjdCBpMmNfYWRhcHRlciAJKmkyY19hZGFwOworCXU4CQkJaTJjX2FkZHI7CisKKwlzdHJ1Y3QgbXV0ZXgJCWRlbW9kX2xvY2s7IC8qIExvY2sgYWNjZXNzIHRvIHNoYXJlZCByZWdpc3RlciAqLworCXN0cnVjdCBtdXRleAkJdHVuZXJfbG9jazsgLyogTG9jayBhY2Nlc3MgdG8gdHVuZXJzICovCisJczMyCQkJbWNsazsgLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKi8KKwl1MzIJCQlkZXZfdmVyOworCisJaW50CQkJbnVtX3VzZWQ7Cit9OworCiBzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSB7CiAJZW51bSBzdHYwOTB4X2RldmljZQkJZGV2aWNlOwogCWVudW0gc3R2MDkweF9kZW1vZHVsYXRvcglkZW1vZDsKIAllbnVtIHN0djA5MHhfbW9kZQkJZGVtb2RfbW9kZTsKLQl1MzIJCQkJZGV2X3ZlcjsKKwlzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbAkJKmludGVybmFsOwogCiAJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjOwogCWNvbnN0IHN0cnVjdCBzdHYwOTB4X2NvbmZpZwkqY29uZmlnOwpAQCAtMjU2LDExICsyNjgsOCBAQAogCXUzMgkJCQlmcmVxdWVuY3k7CiAJdTMyCQkJCXNyYXRlOwogCi0JczMyCQkJCW1jbGs7IC8qIE1hc3RlcmNsb2NrIERpdmlkZXIgZmFjdG9yICovCiAJczMyCQkJCXR1bmVyX2J3OwogCi0JdTMyCQkJCXR1bmVyX3JlZmNsazsKLQogCXMzMgkJCQlzZWFyY2hfcmFuZ2U7CiAKIAlzMzIJCQkJRGVtb2RUaW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYwppbmRleCBiY2ZjYjY1Li5mOTMxZWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYwpAQCAtMzUsOCArMzUsNiBAQAogbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJTZXQgVmVyYm9zaXR5IGxldmVsIik7CiAKLXN0YXRpYyB1OCBzdHY2MTEweF9yZWdzW10gPSB7MHgwNywgMHgxMSwgMHhkYywgMHg4NSwgMHgxNywgMHgwMSwgMHhlNiwgMHgxZX07Ci0KIHN0YXRpYyBpbnQgc3R2NjExMHhfcmVhZF9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCAqZGF0YSkKIHsKIAlpbnQgcmV0OwpAQCAtNTgsMTIgKzU2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVnKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIHU4IHJlZywgdTggZGF0YSkKK3N0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVncyhzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4LCBpbnQgc3RhcnQsIHU4IGRhdGFbXSwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBzdHY2MTEweF9jb25maWcgKmNvbmZpZyA9IHN0djYxMTB4LT5jb25maWc7Ci0JdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBjb25maWctPmFkZHIsIC5mbGFncyA9IDAsIC4gYnVmID0gYnVmLCAubGVuID0gMiB9OworCXU4IGJ1ZltsZW4gKyAxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gY29uZmlnLT5hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gbGVuICsgMQorCX07CisKKwlpZiAoc3RhcnQgKyBsZW4gPiA4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZlswXSA9IHN0YXJ0OworCW1lbWNweSgmYnVmWzFdLCBkYXRhLCBsZW4pOwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0djYxMTB4LT5pMmMsICZtc2csIDEpOwogCWlmIChyZXQgIT0gMSkgewpAQCAtNzQsMTggKzgzLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVnKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIHU4IHJlZywgdTggZGF0YSkKK3sKKwlyZXR1cm4gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgcmVnLCAmZGF0YSwgMSk7Cit9CisKIHN0YXRpYyBpbnQgc3R2NjExMHhfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJldDsKLQl1OCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3R2NjExMHhfcmVncyk7IGkrKykgewotCQlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIGksIHN0djYxMTB4X3JlZ3NbaV0pOwotCQlpZiAocmV0IDwgMCkgewotCQkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgMCwgc3R2NjExMHgtPnJlZ3MsCisJCQkJICBBUlJBWV9TSVpFKHN0djYxMTB4LT5yZWdzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05OCwyMyArMTEwLDIzIEBACiAJczMyIHBWYWwsIHBDYWxjLCByRGl2T3B0ID0gMCwgcENhbGNPcHQgPSAxMDAwOwogCXU4IGk7CiAKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfSywgKFJFRkNMT0NLX01IeiAtIDE2KSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9LLCAoUkVGQ0xPQ0tfTUh6IC0gMTYpKTsKIAogCWlmIChmcmVxdWVuY3kgPD0gMTAyMzAwMCkgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CiAJCXBWYWwgPSA0MDsKIAl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA8PSAxMzAwMDAwKSB7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKIAkJcFZhbCA9IDQwOwogCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDIwNDYwMDApIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOwogCQlwVmFsID0gMjA7CiAJfSBlbHNlIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOwogCQlwVmFsID0gMjA7CiAJfQogCkBAIC0xMzAsMjEgKzE0MiwyMSBAQAogCWRpdmlkZXIgPSAoZnJlcXVlbmN5ICogUl9ESVYockRpdk9wdCkgKiBwVmFsKSAvIFJFRkNMT0NLX2tIejsKIAlkaXZpZGVyID0gKGRpdmlkZXIgKyA1KSAvIDEwOwogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9SX0RJViwgckRpdk9wdCk7Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9OX0RJVl8xMV84LCBNU0IoZGl2aWRlcikpOwotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0sIFRORzBfTl9ESVZfN18wLCBMU0IoZGl2aWRlcikpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1JfRElWLCByRGl2T3B0KTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9OX0RJVl8xMV84LCBNU0IoZGl2aWRlcikpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdLCBUTkcwX05fRElWXzdfMCwgTFNCKGRpdmlkZXIpKTsKIAogCS8qIFZDTyBBdXRvIGNhbGlicmF0aW9uICovCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFZDT19TVFJULCAxKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFZDT19TVFJULCAxKTsKIAotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSk7Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcwXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKIAogCWZvciAoaSA9IDA7IGkgPCBUUklBTFM7IGkrKykgewotCQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7Ci0JCWlmICghU1RWNjExMHhfR0VURklFTEQoU1RBVDFfQ0FMVkNPX1NUUlQsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxWQ09fU1RSVCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJCQlicmVhazsKIAkJbXNsZWVwKDEpOwogCX0KQEAgLTE1NiwxNCArMTY4LDE0IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKTsKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMCwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0pOwogCi0JKmZyZXF1ZW5jeSA9IChNQUtFV09SRDE2KFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfTl9ESVZfMTFfOCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSksCi0JCQkJIFNUVjYxMTB4X0dFVEZJRUxEKFRORzBfTl9ESVZfN18wLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzBdKSkpICogUkVGQ0xPQ0tfa0h6OworCSpmcmVxdWVuY3kgPSAoTUFLRVdPUkQxNihTVFY2MTEweF9HRVRGSUVMRChUTkcxX05fRElWXzExXzgsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKSwKKwkJCQkgU1RWNjExMHhfR0VURklFTEQoVE5HMF9OX0RJVl83XzAsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdKSkpICogUkVGQ0xPQ0tfa0h6OwogCi0JKmZyZXF1ZW5jeSAvPSAoMSA8PCAoU1RWNjExMHhfR0VURklFTEQoVE5HMV9SX0RJViwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSkgKwotCQkJICAgICBTVFY2MTEweF9HRVRGSUVMRChUTkcxX0RJVjRTRUwsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pKSk7CisJKmZyZXF1ZW5jeSAvPSAoMSA8PCAoU1RWNjExMHhfR0VURklFTEQoVE5HMV9SX0RJViwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pICsKKwkJCSAgICAgU1RWNjExMHhfR0VURklFTEQoVE5HMV9ESVY0U0VMLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSkpKTsKIAogCSpmcmVxdWVuY3kgPj49IDI7CiAKQEAgLTE3OSwyNyArMTkxLDI3IEBACiAJaGFsZmJ3ID0gYmFuZHdpZHRoID4+IDE7CiAKIAlpZiAoaGFsZmJ3ID4gMzYwMDAwMDApCi0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMzEpOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMzEpOyAvKiBMUEYgKi8KIAllbHNlIGlmIChoYWxmYncgPCA1MDAwMDAwKQotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfQ0YsIDApOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMCk7IC8qIExQRiAqLwogCWVsc2UKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAoKGhhbGZidyAvIDEwMDAwMDApIC0gNSkpOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgKChoYWxmYncgLyAxMDAwMDAwKSAtIDUpKTsgLyogTFBGICovCiAKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19SQ0NMS19PRkYsIDB4MCk7IC8qIGNhbC4gY2xrIGFjdGl2YXRlZCAqLwotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdLCBTVEFUMV9DQUxSQ19TVFJULCAweDEpOyAvKiBMUEYgYXV0byBjYWwgKi8KKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgwKTsgLyogY2FsLiBjbGsgYWN0aXZhdGVkICovCisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdLCBTVEFUMV9DQUxSQ19TVFJULCAweDEpOyAvKiBMUEYgYXV0byBjYWwgKi8KIAotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IFRSSUFMUzsgaSsrKSB7Ci0JCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKLQkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxSQ19TVFJULCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSkpCisJCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJCWlmICghU1RWNjExMHhfR0VURklFTEQoU1RBVDFfQ0FMUkNfU1RSVCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJCWJyZWFrOwogCQltc2xlZXAoMSk7CiAJfQotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19SQ0NMS19PRkYsIDB4MSk7IC8qIGNhbC4gZG9uZSAqLwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgxKTsgLyogY2FsLiBkb25lICovCisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA4LDggKzIyMCw4IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOwotCSpiYW5kd2lkdGggPSAoU1RWNjExMHhfR0VURklFTEQoQ1RSTDNfQ0YsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKSArIDUpICogMjAwMDAwMDsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOworCSpiYW5kd2lkdGggPSAoU1RWNjExMHhfR0VURklFTEQoQ1RSTDNfQ0YsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSkgKyA1KSAqIDIwMDAwMDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMiwyMCArMjM0LDIwIEBACiAJc3dpdGNoIChyZWZjbG9jaykgewogCWRlZmF1bHQ6CiAJY2FzZSAxOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMik7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCWNhc2UgMDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMyk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKIAkJYnJlYWs7CiAJfQotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQsOCArMjU2LDggQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7Ci0JKmdhaW4gPSAyICogU1RWNjExMHhfR0VURklFTEQoQ1RSTDJfQkJHQUlOLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwkqZ2FpbiA9IDIgKiBTVFY2MTEweF9HRVRGSUVMRChDVFJMMl9CQkdBSU4sIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NCw4ICsyNjYsOCBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9CQkdBSU4sIGdhaW4gLyAyKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9CQkdBSU4sIGdhaW4gLyAyKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjcsMTkgKzI3OSwxOSBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBUVU5FUl9TTEVFUDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1NZTiwgMCk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMCk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9MUFQsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1NZTiwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfUlgsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5FUl9XQUtFOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAxKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0pOworCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBFcnJvciIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTI5Nyw5ICszMDksOSBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCi0JaWYgKFNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0xPQ0ssIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwlpZiAoU1RWNjExMHhfR0VURklFTEQoU1RBVDFfTE9DSywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJKnN0YXR1cyA9IFRVTkVSX1BIQVNFTE9DS0VEOwogCWVsc2UKIAkJKnN0YXR1cyA9IDA7CkBAIC0zNDksNiArMzYxLDggQEAKIAkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweDsKKwl1OCBkZWZhdWx0X3JlZ3NbXSA9IHsweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlfTsKKwlpbnQgcmV0OwogCiAJc3R2NjExMHggPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHN0djYxMTB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0djYxMTB4ID09IE5VTEwpCkBAIC0zNTcsNiArMzcxLDQ0IEBACiAJc3R2NjExMHgtPmkyYwkJPSBpMmM7CiAJc3R2NjExMHgtPmNvbmZpZwk9IGNvbmZpZzsKIAlzdHY2MTEweC0+ZGV2Y3RsCT0gJnN0djYxMTB4X2N0bDsKKwltZW1jcHkoc3R2NjExMHgtPnJlZ3MsIGRlZmF1bHRfcmVncywgOCk7CisKKwkvKiBzZXR1cCBkaXZpZGVyICovCisJc3dpdGNoIChzdHY2MTEweC0+Y29uZmlnLT5jbGtfZGl2KSB7CisJZGVmYXVsdDoKKwljYXNlIDE6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDIpOworCQlicmVhazsKKwljYXNlIDg6CisJY2FzZSAwOgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMyk7CisJCWJyZWFrOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKKwkJcmV0ID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZ3Moc3R2NjExMHgsIDAsIHN0djYxMTB4LT5yZWdzLAorCQkJCSAgQVJSQVlfU0laRShzdHY2MTEweC0+cmVncykpOworCWlmIChyZXQgPCAwKSB7CisJCWRwcmludGsoRkVfRVJST1IsIDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSB7CisJCXJldCA9IGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CiAKIAlmZS0+dHVuZXJfcHJpdgkJPSBzdHY2MTEweDsKIAlmZS0+b3BzLnR1bmVyX29wcwk9IHN0djYxMTB4X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKaW5kZXggYTM4MjU3MC4uMjQyOWFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKQEAgLTI2LDYgKzI2LDcgQEAKIHN0cnVjdCBzdHY2MTEweF9jb25maWcgewogCXU4CWFkZHI7CiAJdTMyCXJlZmNsazsKKwl1OAljbGtfZGl2OyAvKiBkaXZpc29yIHZhbHVlIGZvciB0aGUgb3V0cHV0IGNsb2NrICovCiB9OwogCiBlbnVtIHR1bmVyX21vZGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweF9wcml2LmgKaW5kZXggNzI2MGRhNi4uMGVjOTM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oCkBAIC02OCw2ICs2OCw3IEBACiBzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgewogCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmkyYzsKIAljb25zdCBzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnCSpjb25maWc7CisJdTggCQkJCXJlZ3NbOF07CiAKIAlzdHJ1Y3Qgc3R2NjExMHhfZGV2Y3RsCQkqZGV2Y3RsOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhNjY1eC5jCmluZGV4IDg3ZDUyNzMuLmM0NGZlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJCWZyZXF1ZW5jeSArPSBjb25maWctPnJlZl9kaXZpZGVyID4+IDE7CiAJCWZyZXF1ZW5jeSAvPSBjb25maWctPnJlZl9kaXZpZGVyOwogCi0JCWJ1ZlswXSA9ICh1OCkgKGZyZXF1ZW5jeSAmIDB4N2YwMCkgPj4gODsKKwkJYnVmWzBdID0gKHU4KSAoKGZyZXF1ZW5jeSAmIDB4N2YwMCkgPj4gOCk7CiAJCWJ1ZlsxXSA9ICh1OCkgKGZyZXF1ZW5jeSAmIDB4MDBmZikgPj4gMDsKIAkJYnVmWzJdID0gMHg4MCB8IDB4NDAgfCAweDAyOwogCQlidWZbM10gPSAweDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKaW5kZXggMzIwYzNjMy4uNjE0YWZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCkBAIC0zOSw3ICszOSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHRkYTgyNjFfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIJPSBjb25maWctPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELC5idWYgPSBidWYsICAubGVuID0gMiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIJPSBjb25maWctPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELC5idWYgPSBidWYsICAubGVuID0gMSB9OwogCiAJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpCiAJCXByaW50aygiJXM6IHJlYWQgZXJyb3IsIGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwppbmRleCA0ZTgxNGZmLi4zNGM1ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCXN0YXRlLT5iZiA9IDB4ZmY7CiAKIAlpZiAoIXN0YXRlLT5jb25maWctPnJmX2xvb3BfZW5hYmxlKQotCQl6bDEwMDM2X2luaXRfdGFiWzFdWzJdIHw9IDB4MDE7CisJCXpsMTAwMzZfaW5pdF90YWJbMV1bMF0gfD0gMHgwMTsKIAogCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuYwppbmRleCAxMWIyOWNiLi5jMDg1ZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMKQEAgLTI4Nyw3ICsyODcsNiBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCJDaGlwIElEPSV4IGRvZXMgbm90IG1hdGNoIGEga25vd24gdHlwZVxuIiwgc3RhdGUtPmlkKTsKLQkJYnJlYWs7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19oaWYuYwppbmRleCA3NDc3ZGFjLi41NzcyZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgImRteGRldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCmluZGV4IDZhOWRmNzcuLjQ2NzVhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXJjLT5pZC52ZXJzaW9uCT0gMTsKIAlyYy0+ZGV2CQk9IG1hbnRpcy0+cGRldi0+ZGV2OwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIocmMsICZpcl9tYW50aXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKHJjLCAmaXJfbWFudGlzLCBOVUxMKTsKIAlpZiAoZXJyKSB7CiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiSVIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHJldCA9ICVkIiwgZXJyKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UocmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfcGNpLmMKaW5kZXggNmM3NTM0YS4uNTlmZWViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jCkBAIC00MSwxMSArNDEsNiBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2Yl9uZXQuaCIKIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAjaW5jbHVkZSAibWFudGlzX2NvbW1vbi5oIgogI2luY2x1ZGUgIm1hbnRpc19yZWcuaCIKICNpbmNsdWRlICJtYW50aXNfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM4ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBEVkJfTkdFTkUKKwl0cmlzdGF0ZSAiTWljcm9uYXMgbkdlbmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjA5MHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBNaWNyb25hcyBQQ0kgZXhwcmVzcyBjYXJkcyB3aXRoIG5HZW5lIGJyaWRnZS4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQzNWNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIG5HZW5lIGRldmljZSBkcml2ZXIKKyMKKworbmdlbmUtb2JqcyA6PSBuZ2VuZS1jb3JlLm8KKworb2JqLSQoQ09ORklHX0RWQl9OR0VORSkgKz0gbmdlbmUubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTBkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKQEAgLTAsMCArMSwyMDI0IEBACisvKgorICogbmdlbmUuYzogbkdlbmUgUENJZSBicmlkZ2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgTWljcm9uYXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPgorICogICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyBmb3IgbmV3IG5HZW5lIGZpcm13YXJlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgRUVQUk9NLWNvcHlpbmcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBuZXcgZHVhbCBEVkItUzIgY2FyZCBwcm90b3R5cGUKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBvbmx5LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqIE9yLCBwb2ludCB5b3VyIGJyb3dzZXIgdG8gaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAibmdlbmUuaCIKKworI2luY2x1ZGUgInN0djYxMTB4LmgiCisjaW5jbHVkZSAic3R2MDkweC5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgorCitzdGF0aWMgaW50IG9uZV9hZGFwdGVyID0gMTsKK21vZHVsZV9wYXJhbShvbmVfYWRhcHRlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mob25lX2FkYXB0ZXIsICJVc2Ugb25seSBvbmUgYWRhcHRlci4iKTsKKworCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4iKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKKyNkZWZpbmUgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKworI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCisKKyNkZWZpbmUgREVWSUNFX05BTUUgIm5nZW5lIgorCisjZGVmaW5lIG5nd3JpdGViKGRhdCwgYWRyKSAgICAgICAgIHdyaXRlYigoZGF0KSwgKGNoYXIgKikoZGV2LT5pb21lbSArIChhZHIpKSkKKyNkZWZpbmUgbmd3cml0ZWwoZGF0LCBhZHIpICAgICAgICAgd3JpdGVsKChkYXQpLCAoY2hhciAqKShkZXYtPmlvbWVtICsgKGFkcikpKQorI2RlZmluZSBuZ3dyaXRlYihkYXQsIGFkcikgICAgICAgICB3cml0ZWIoKGRhdCksIChjaGFyICopKGRldi0+aW9tZW0gKyAoYWRyKSkpCisjZGVmaW5lIG5ncmVhZGwoYWRyKSAgICAgICAgICAgICAgIHJlYWRsKGRldi0+aW9tZW0gKyAoYWRyKSkKKyNkZWZpbmUgbmdyZWFkYihhZHIpICAgICAgICAgICAgICAgcmVhZGIoZGV2LT5pb21lbSArIChhZHIpKQorI2RlZmluZSBuZ2NweXRvKGFkciwgc3JjLCBjb3VudCkgICBtZW1jcHlfdG9pbygoY2hhciAqKSBcCisJCQkJICAgKGRldi0+aW9tZW0gKyAoYWRyKSksIChzcmMpLCAoY291bnQpKQorI2RlZmluZSBuZ2NweWZyb20oZHN0LCBhZHIsIGNvdW50KSBtZW1jcHlfZnJvbWlvKChkc3QpLCAoY2hhciAqKSBcCisJCQkJICAgKGRldi0+aW9tZW0gKyAoYWRyKSksIChjb3VudCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgaW50ZXJydXB0IGhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZXZlbnRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopZGF0YTsKKworCXdoaWxlIChkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXggIT0gZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCkgeworCQlzdHJ1Y3QgRVZFTlRfQlVGRkVSIEV2ZW50ID0KKwkJCWRldi0+RXZlbnRRdWV1ZVtkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXhdOworCQlkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXggPQorCQkJKGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCArIDEpICYgKEVWRU5UX1FVRVVFX1NJWkUgLSAxKTsKKworCQlpZiAoKEV2ZW50LlVBUlRTdGF0dXMgJiAweDAxKSAmJiAoZGV2LT5UeEV2ZW50Tm90aWZ5KSkKKwkJCWRldi0+VHhFdmVudE5vdGlmeShkZXYsIEV2ZW50LlRpbWVTdGFtcCk7CisJCWlmICgoRXZlbnQuVUFSVFN0YXR1cyAmIDB4MDIpICYmIChkZXYtPlJ4RXZlbnROb3RpZnkpKQorCQkJZGV2LT5SeEV2ZW50Tm90aWZ5KGRldiwgRXZlbnQuVGltZVN0YW1wLAorCQkJCQkgICBFdmVudC5SWENoYXJhY3Rlcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZW11eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKWRhdGE7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IGNoYW4tPm5leHRCdWZmZXI7CisKKwlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKworCXdoaWxlIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHg4MCkgeworCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQl1MzIgRmxhZ3MgPSBjaGFuLT5EYXRhRm9ybWF0RmxhZ3M7CisJCQlpZiAoQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4MjApCisJCQkJRmxhZ3MgfD0gQkVGX09WRVJGTE9XOworCQkJaWYgKGNoYW4tPnBCdWZmZXJFeGNoYW5nZSkgeworCQkJCWlmICghY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKGNoYW4sCisJCQkJCQkJICAgQ3VyLT5CdWZmZXIxLAorCQkJCQkJCSAgIGNoYW4tPkNhcHR1cmUxTGVuZ3RoLAorCQkJCQkJCSAgIEN1ci0+bmdlbmVCdWZmZXIuU1IuCisJCQkJCQkJICAgQ2xvY2ssIEZsYWdzKSkgeworCQkJCQkvKgorCQkJCQkgICBXZSBkaWRuJ3QgZ2V0IGRhdGEKKwkJCQkJICAgQ2xlYXIgaW4gc2VydmljZSBmbGFnIHRvIG1ha2Ugc3VyZSB3ZQorCQkJCQkgICBnZXQgY2FsbGVkIG9uIG5leHQgaW50ZXJydXB0IGFnYWluLgorCQkJCQkgICBsZWF2ZSBmaWxsL2VtcHR5ICgweDgwKSBmbGFnIGFsb25lCisJCQkJCSAgIHRvIGF2b2lkIGhhcmR3YXJlIHJ1bm5pbmcgb3V0IG9mCisJCQkJCSAgIGJ1ZmZlcnMgZHVyaW5nIHN0YXJ0dXAsIHdlIGhvbGQgb25seQorCQkJCQkgICBpbiBydW4gc3RhdGUgKCB0aGUgc291cmNlIG1heSBiZSBsYXRlCisJCQkJCSAgIGRlbGl2ZXJpbmcgZGF0YSApCisJCQkJCSovCisKKwkJCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJj0KKwkJCQkJCQl+MHg0MDsKKwkJCQkJCWJyZWFrOworCQkJCQkJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdlIGdvdCBhIHZhbGlkIGJ1ZmZlciwKKwkJCQkJICAgc28gc3dpdGNoIHRvIHJ1biBzdGF0ZSAqLworCQkJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogT09QU1xuIik7CisJCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPSB+MHg0MDsKKwkJCQkJYnJlYWs7CS8qIFN0b3AgcHJvY2Nlc3Npbmcgc3RyZWFtICovCisJCQkJfQorCQkJfQorCQkJaWYgKGNoYW4tPkF1ZGlvRFRPVXBkYXRlZCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCQkgICAgICAgIjogVXBkYXRlIEF1ZGlvRFRPID0gJWRcbiIsCisJCQkJICAgICAgIGNoYW4tPkF1ZGlvRFRPVmFsdWUpOworCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRFRPVXBkYXRlID0KKwkJCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZTsKKwkJCQljaGFuLT5BdWRpb0RUT1VwZGF0ZWQgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQl1MzIgRmxhZ3MgPSAwOworCQkJCWlmIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHgwMSkKKwkJCQkJRmxhZ3MgfD0gQkVGX0VWRU5fRklFTEQ7CisJCQkJaWYgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDIwKQorCQkJCQlGbGFncyB8PSBCRUZfT1ZFUkZMT1c7CisJCQkJaWYgKGNoYW4tPnBCdWZmZXJFeGNoYW5nZSkKKwkJCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKGNoYW4sCisJCQkJCQkJICAgICAgQ3VyLT5CdWZmZXIxLAorCQkJCQkJCSAgICAgIGNoYW4tPgorCQkJCQkJCSAgICAgIENhcHR1cmUxTGVuZ3RoLAorCQkJCQkJCSAgICAgIEN1ci0+bmdlbmVCdWZmZXIuCisJCQkJCQkJICAgICAgU1IuQ2xvY2ssIEZsYWdzKTsKKwkJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlMikKKwkJCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlMihjaGFuLAorCQkJCQkJCSAgICAgICBDdXItPkJ1ZmZlcjIsCisJCQkJCQkJICAgICAgIGNoYW4tPgorCQkJCQkJCSAgICAgICBDYXB0dXJlMkxlbmd0aCwKKwkJCQkJCQkgICAgICAgQ3VyLT5uZ2VuZUJ1ZmZlci4KKwkJCQkJCQkgICAgICAgU1IuQ2xvY2ssIEZsYWdzKTsKKwkJCX0gZWxzZSBpZiAoY2hhbi0+SFdTdGF0ZSAhPSBIV1NUQVRFX1NUT1ApCisJCQkJY2hhbi0+SFdTdGF0ZSA9IEhXU1RBVEVfUlVOOworCQl9CisJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgPSAweDAwOworCQlDdXIgPSBDdXItPk5leHQ7CisJfQorCWNoYW4tPm5leHRCdWZmZXIgPSBDdXI7CisKKwlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gKHN0cnVjdCBuZ2VuZSAqKWRldl9pZDsKKwl1MzIgaWNvdW50cyA9IDA7CisJaXJxcmV0dXJuX3QgcmMgPSBJUlFfTk9ORTsKKwl1MzIgaSA9IE1BWF9TVFJFQU07CisJdTggKnRtcENtZERvbmVCeXRlOworCisJaWYgKGRldi0+Qm9vdEZpcm13YXJlKSB7CisJCWljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCQlpZiAoaWNvdW50cyAhPSBkZXYtPmljb3VudHMpIHsKKwkJCW5nd3JpdGVsKDAsIEZPUkNFX05NSSk7CisJCQlkZXYtPmNtZF9kb25lID0gMTsKKwkJCXdha2VfdXAoJmRldi0+Y21kX3dxKTsKKwkJCWRldi0+aWNvdW50cyA9IGljb3VudHM7CisJCQlyYyA9IElSUV9IQU5ETEVEOworCQl9CisJCXJldHVybiByYzsKKwl9CisKKwluZ3dyaXRlbCgwLCBGT1JDRV9OTUkpOworCisJc3Bpbl9sb2NrKCZkZXYtPmNtZF9sb2NrKTsKKwl0bXBDbWREb25lQnl0ZSA9IGRldi0+Q21kRG9uZUJ5dGU7CisJaWYgKHRtcENtZERvbmVCeXRlICYmCisJICAgICgqdG1wQ21kRG9uZUJ5dGUgfHwKKwkgICAgKGRldi0+bmdlbmV0b2hvc3RbMF0gPT0gMSAmJiBkZXYtPm5nZW5ldG9ob3N0WzFdICE9IDApKSkgeworCQlkZXYtPkNtZERvbmVCeXRlID0gTlVMTDsKKwkJZGV2LT5jbWRfZG9uZSA9IDE7CisJCXdha2VfdXAoJmRldi0+Y21kX3dxKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJmRldi0+Y21kX2xvY2spOworCisJaWYgKGRldi0+RXZlbnRCdWZmZXItPkV2ZW50U3RhdHVzICYgMHg4MCkgeworCQl1OCBuZXh0V3JpdGVJbmRleCA9CisJCQkoZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCArIDEpICYKKwkJCShFVkVOVF9RVUVVRV9TSVpFIC0gMSk7CisJCWlmIChuZXh0V3JpdGVJbmRleCAhPSBkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXgpIHsKKwkJCWRldi0+RXZlbnRRdWV1ZVtkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4XSA9CisJCQkJKihkZXYtPkV2ZW50QnVmZmVyKTsKKwkJCWRldi0+RXZlbnRRdWV1ZVdyaXRlSW5kZXggPSBuZXh0V3JpdGVJbmRleDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBldmVudCBvdmVyZmxvd1xuIik7CisJCQlkZXYtPkV2ZW50UXVldWVPdmVyZmxvd0NvdW50ICs9IDE7CisJCQlkZXYtPkV2ZW50UXVldWVPdmVyZmxvd0ZsYWcgPSAxOworCQl9CisJCWRldi0+RXZlbnRCdWZmZXItPkV2ZW50U3RhdHVzICY9IH4weDgwOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPmV2ZW50X3Rhc2tsZXQpOworCQlyYyA9IElSUV9IQU5ETEVEOworCX0KKworCXdoaWxlIChpID4gMCkgeworCQlpLS07CisJCXNwaW5fbG9jaygmZGV2LT5jaGFubmVsW2ldLnN0YXRlX2xvY2spOworCQkvKiBpZiAoZGV2LT5jaGFubmVsW2ldLlN0YXRlPj1LU1NUQVRFX1JVTikgeyAqLworCQlpZiAoZGV2LT5jaGFubmVsW2ldLm5leHRCdWZmZXIpIHsKKwkJCWlmICgoZGV2LT5jaGFubmVsW2ldLm5leHRCdWZmZXItPgorCQkJICAgICBuZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4QzApID09IDB4ODApIHsKKwkJCQlkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlci0+CisJCQkJCW5nZW5lQnVmZmVyLlNSLkZsYWdzIHw9IDB4NDA7CisJCQkJdGFza2xldF9zY2hlZHVsZSgKKwkJCQkJJmRldi0+Y2hhbm5lbFtpXS5kZW11eF90YXNrbGV0KTsKKwkJCQlyYyA9IElSUV9IQU5ETEVEOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNoYW5uZWxbaV0uc3RhdGVfbG9jayk7CisJfQorCisJLyogUmVxdWVzdCBtaWdodCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IGEgcHJldmlvdXMgY2FsbC4gKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgY29tbWFuZCBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZHVtcF9jb21tYW5kX2lvKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCXU4IGJ1Zls4XSwgKmI7CisKKwluZ2NweWZyb20oYnVmLCBIT1NUX1RPX05HRU5FLCA4KTsKKwlwcmludGsoS0VSTl9FUlIgImhvc3RfdG9fbmdlbmUgKCUwNHgpOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCUhPU1RfVE9fTkdFTkUsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwKKwkJYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSwgYnVmWzddKTsKKworCW5nY3B5ZnJvbShidWYsIE5HRU5FX1RPX0hPU1QsIDgpOworCXByaW50ayhLRVJOX0VSUiAibmdlbmVfdG9faG9zdCAoJTA0eCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJTkdFTkVfVE9fSE9TVCwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAorCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJYiA9IGRldi0+aG9zdHRvbmdlbmU7CisJcHJpbnRrKEtFUk5fRVJSICJkZXYtPmhvc3R0b25nZW5lICglcCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJYiwgYlswXSwgYlsxXSwgYlsyXSwgYlszXSwgYls0XSwgYls1XSwgYls2XSwgYls3XSk7CisKKwliID0gZGV2LT5uZ2VuZXRvaG9zdDsKKwlwcmludGsoS0VSTl9FUlIgImRldi0+bmdlbmV0b2hvc3QgKCVwKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQliLCBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX211dGV4KHN0cnVjdCBuZ2VuZSAqZGV2LCBzdHJ1Y3QgbmdlbmVfY29tbWFuZCAqY29tKQoreworCWludCByZXQ7CisJdTggKnRtcENtZERvbmVCeXRlOworCisJZGV2LT5jbWRfZG9uZSA9IDA7CisKKwlpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX1BSRVBBUkUpIHsKKwkJZGV2LT5Cb290RmlybXdhcmUgPSAxOworCQlkZXYtPmljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCQluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORF9ISSk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVUyk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVU19ISSk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlRfSEkpOworCX0gZWxzZSBpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX0ZJTklTSCkgeworCQl1NjQgZndpbyA9IGRldi0+UEFGV0ludGVyZmFjZUJ1ZmZlcjsKKworCQluZ3dyaXRlbChmd2lvICYgMHhmZmZmZmZmZiwgTkdFTkVfQ09NTUFORCk7CisJCW5nd3JpdGVsKGZ3aW8gPj4gMzIsIE5HRU5FX0NPTU1BTkRfSEkpOworCQluZ3dyaXRlbCgoZndpbyArIDI1NikgJiAweGZmZmZmZmZmLCBOR0VORV9TVEFUVVMpOworCQluZ3dyaXRlbCgoZndpbyArIDI1NikgPj4gMzIsIE5HRU5FX1NUQVRVU19ISSk7CisJCW5nd3JpdGVsKChmd2lvICsgNTEyKSAmIDB4ZmZmZmZmZmYsIE5HRU5FX0VWRU5UKTsKKwkJbmd3cml0ZWwoKGZ3aW8gKyA1MTIpID4+IDMyLCBOR0VORV9FVkVOVF9ISSk7CisJfQorCisJbWVtY3B5KGRldi0+RldJbnRlcmZhY2VCdWZmZXIsIGNvbS0+Y21kLnJhdzgsIGNvbS0+aW5fbGVuICsgMik7CisKKwlpZiAoZGV2LT5Cb290RmlybXdhcmUpCisJCW5nY3B5dG8oSE9TVF9UT19OR0VORSwgY29tLT5jbWQucmF3OCwgY29tLT5pbl9sZW4gKyAyKTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+Y21kX2xvY2spOworCXRtcENtZERvbmVCeXRlID0gZGV2LT5uZ2VuZXRvaG9zdCArIGNvbS0+b3V0X2xlbjsKKwlpZiAoIWNvbS0+b3V0X2xlbikKKwkJdG1wQ21kRG9uZUJ5dGUrKzsKKwkqdG1wQ21kRG9uZUJ5dGUgPSAwOworCWRldi0+bmdlbmV0b2hvc3RbMF0gPSAwOworCWRldi0+bmdlbmV0b2hvc3RbMV0gPSAwOworCWRldi0+Q21kRG9uZUJ5dGUgPSB0bXBDbWREb25lQnl0ZTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+Y21kX2xvY2spOworCisJLyogTm90aWZ5IDgwNTEuICovCisJbmd3cml0ZWwoMSwgRk9SQ0VfSU5UKTsKKworCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPmNtZF93cSwgZGV2LT5jbWRfZG9uZSA9PSAxLCAyICogSFopOworCWlmICghcmV0KSB7CisJCS8qbmd3cml0ZWwoMCwgRk9SQ0VfTk1JKTsqLworCisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkgICAgICAgIjogQ29tbWFuZCB0aW1lb3V0IGNtZD0lMDJ4IHByZXY9JTAyeFxuIiwKKwkJICAgICAgIGNvbS0+Y21kLmhkci5PcGNvZGUsIGRldi0+cHJldl9jbWQpOworCQlkdW1wX2NvbW1hbmRfaW8oZGV2KTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX0ZJTklTSCkKKwkJZGV2LT5Cb290RmlybXdhcmUgPSAwOworCisJZGV2LT5wcmV2X2NtZCA9IGNvbS0+Y21kLmhkci5PcGNvZGU7CisKKwlpZiAoIWNvbS0+b3V0X2xlbikKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoY29tLT5jbWQucmF3OCwgZGV2LT5uZ2VuZXRvaG9zdCwgY29tLT5vdXRfbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmQoc3RydWN0IG5nZW5lICpkZXYsIHN0cnVjdCBuZ2VuZV9jb21tYW5kICpjb20pCit7CisJaW50IHJlc3VsdDsKKworCWRvd24oJmRldi0+Y21kX211dGV4KTsKKwlyZXN1bHQgPSBuZ2VuZV9jb21tYW5kX211dGV4KGRldiwgY29tKTsKKwl1cCgmZGV2LT5jbWRfbXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2kyY19yZWFkKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBhZHIsCisJCQkgICB1OCAqb3V0LCB1OCBvdXRsZW4sIHU4ICppbiwgdTggaW5sZW4sIGludCBmbGFnKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9JMkNfUkVBRDsKKwljb20uY21kLmhkci5MZW5ndGggPSBvdXRsZW4gKyAzOworCWNvbS5jbWQuSTJDUmVhZC5EZXZpY2UgPSBhZHIgPDwgMTsKKwltZW1jcHkoY29tLmNtZC5JMkNSZWFkLkRhdGEsIG91dCwgb3V0bGVuKTsKKwljb20uY21kLkkyQ1JlYWQuRGF0YVtvdXRsZW5dID0gaW5sZW47CisJY29tLmNtZC5JMkNSZWFkLkRhdGFbb3V0bGVuICsgMV0gPSAwOworCWNvbS5pbl9sZW4gPSBvdXRsZW4gKyAzOworCWNvbS5vdXRfbGVuID0gaW5sZW4gKyAxOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKChjb20uY21kLnJhdzhbMF0gPj4gMSkgIT0gYWRyKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChmbGFnKQorCQltZW1jcHkoaW4sIGNvbS5jbWQucmF3OCwgaW5sZW4gKyAxKTsKKwllbHNlCisJCW1lbWNweShpbiwgY29tLmNtZC5yYXc4ICsgMSwgaW5sZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfaTJjX3dyaXRlKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBhZHIsCisJCQkJICAgdTggKm91dCwgdTggb3V0bGVuKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0kyQ19XUklURTsKKwljb20uY21kLmhkci5MZW5ndGggPSBvdXRsZW4gKyAxOworCWNvbS5jbWQuSTJDUmVhZC5EZXZpY2UgPSBhZHIgPDwgMTsKKwltZW1jcHkoY29tLmNtZC5JMkNSZWFkLkRhdGEsIG91dCwgb3V0bGVuKTsKKwljb20uaW5fbGVuID0gb3V0bGVuICsgMTsKKwljb20ub3V0X2xlbiA9IDE7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoY29tLmNtZC5yYXc4WzBdID09IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBuZ2VuZSAqZGV2LAorCQkJCSAgICAgICB1OCAqbmdlbmVfZncsIHUzMiBzaXplKQoreworI2RlZmluZSBGSVJTVENIVU5LICgxMDI0KQorCXUzMiBjbGVmdDsKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfRldMT0FEX1BSRVBBUkU7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gMDsKKwljb20uaW5fbGVuID0gMDsKKwljb20ub3V0X2xlbiA9IDA7CisKKwluZ2VuZV9jb21tYW5kKGRldiwgJmNvbSk7CisKKwljbGVmdCA9IChzaXplICsgMykgJiB+MzsKKwlpZiAoY2xlZnQgPiBGSVJTVENIVU5LKSB7CisJCW5nY3B5dG8oUFJPR1JBTV9TUkFNICsgRklSU1RDSFVOSywgbmdlbmVfZncgKyBGSVJTVENIVU5LLAorCQkJY2xlZnQgLSBGSVJTVENIVU5LKTsKKwkJY2xlZnQgPSBGSVJTVENIVU5LOworCX0KKwluZ2NweXRvKERBVEFfRklGT19BUkVBLCBuZ2VuZV9mdywgY2xlZnQpOworCisJbWVtc2V0KCZjb20sIDAsIHNpemVvZihzdHJ1Y3QgbmdlbmVfY29tbWFuZCkpOworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9GV0xPQURfRklOSVNIOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDQ7CisJY29tLmNtZC5GV0xvYWRGaW5pc2guQWRkcmVzcyA9IERBVEFfRklGT19BUkVBOworCWNvbS5jbWQuRldMb2FkRmluaXNoLkxlbmd0aCA9ICh1bnNpZ25lZCBzaG9ydCljbGVmdDsKKwljb20uaW5fbGVuID0gNDsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlyZXR1cm4gbmdlbmVfY29tbWFuZChkZXYsICZjb20pOworfQorCisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9jb25maWdfYnVmKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBjb25maWcpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0NPTkZJR1VSRV9CVUZGRVI7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gMTsKKwljb20uY21kLkNvbmZpZ3VyZUJ1ZmZlcnMuY29uZmlnID0gY29uZmlnOworCWNvbS5pbl9sZW4gPSAxOworCWNvbS5vdXRfbGVuID0gMDsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2NvbmZpZ19mcmVlX2J1ZihzdHJ1Y3QgbmdlbmUgKmRldiwgdTggKmNvbmZpZykKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09ORklHVVJFX0ZSRUVfQlVGRkVSOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDY7CisJbWVtY3B5KCZjb20uY21kLkNvbmZpZ3VyZUJ1ZmZlcnMuY29uZmlnLCBjb25maWcsIDYpOworCWNvbS5pbl9sZW4gPSA2OworCWNvbS5vdXRfbGVuID0gMDsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoc3RydWN0IG5nZW5lICpkZXYsIHU4IHNlbGVjdCwgdTggbGV2ZWwpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX1NFVF9HUElPX1BJTjsKKwljb20uY21kLmhkci5MZW5ndGggPSAxOworCWNvbS5jbWQuU2V0R3Bpb1Bpbi5zZWxlY3QgPSBzZWxlY3QgfCAobGV2ZWwgPDwgNyk7CisJY29tLmluX2xlbiA9IDE7CisJY29tLm91dF9sZW4gPSAwOworCisJcmV0dXJuIG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKTsKK30KKworCisvKgorIDAyMDAwNjQwIGlzIHNhbXBsZSBvbiByaXNpbmcgZWRnZS4KKyAwMjAwMDc0MCBpcyBzYW1wbGUgb24gZmFsbGluZyBlZGdlLgorIDAyMDAwMDQwIGlzIGlnbm9yZSAidmFsaWQiIHNpZ25hbAorCisgMDogRkRfQ1RMMSBCaXQgNyw2IG11c3QgYmUgMCwxCisgICAgNyAgIGRpc2FibGUoZncgY29udHJvbGxlZCkKKyAgICA2ICAgMC1BVVgsMS1UUworICAgIDUgICAwLXBhciwxLXNlcgorICAgIDQgICAwLWxzYi8xLW1zYgorICAgIDMsMiByZXNlcnZlZAorICAgIDEsMCAwLW5vIHN5bmMsIDEtdXNlIGV4dC4gc3RhcnQsIDItdXNlIDB4NDcsIDMtYm90aAorIDE6IEZEX0NUTDIgaGFzIDMtdmFsaWQgbXVzdCBiZSBoaSwgMi11c2UgdmFsaWQsIDEtZWRnZQorIDI6IEZEX1NUQSBpcyByZWFkLW9ubHkuIDAtc3luYworIDM6IEZEX0lOU1lOQyBpcyBudW1iZXIgb2YgNDdzIHRvIHRyaWdnZXIgImluIHN5bmMiLgorIDQ6IEZEX09VVFNZTkMgaXMgbnVtYmVyIG9mIDQ3cyB0byB0cmlnZ2VyICJvdXQgb2Ygc3luYyIuCisgNTogRkRfTUFYQllURTEgaXMgbG93LW9yZGVyIG9mIGJ5dGVzIHBlciBwYWNrZXQuCisgNjogRkRfTUFYQllURTIgaXMgaGlnaC1vcmRlciBvZiBieXRlcyBwZXIgcGFja2V0LgorIDc6IFRvcCBieXRlIGlzIHVudXNlZC4KKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdTggVFNGZWF0dXJlRGVjb2RlclNldHVwWzggKiA0XSA9IHsKKwkweDQyLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEggKi8KKwkweDcxLCAweDA3LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBEUlhIc2VyICovCisJMHg3MiwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogUzJzZXIgKi8KK307CisKKy8qIFNldCBOR0VORSBJMlMgQ29uZmlnIHRvIDE2IGJpdCBwYWNrZWQgKi8KK3N0YXRpYyB1OCBJMlNDb25maWd1cmF0aW9uW10gPSB7CisJMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDEwLCAweDAwLCAweDAwLAorfTsKKworc3RhdGljIHU4IFNQRElGQ29uZmlndXJhdGlvblsxMF0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworLyogU2V0IE5HRU5FIEkyUyBDb25maWcgdG8gdHJhbnNwb3J0IHN0cmVhbSBjb21wYXRpYmxlIG1vZGUgKi8KKworc3RhdGljIHU4IFRTX0kyU0NvbmZpZ3VyYXRpb25bNF0gPSB7IDB4M0UsIDB4MUEsIDB4MDAsIDB4MDAgfTsgLyozZSAxOCAwMCAwMCA/Ki8KKworc3RhdGljIHU4IFRTX0kyU091dENvbmZpZ3VyYXRpb25bNF0gPSB7IDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIHU4IElUVURlY29kZXJTZXR1cFs0XVsxNl0gPSB7CisJezB4MWMsIDB4MTMsIDB4MDEsIDB4NjgsIDB4M2QsIDB4OTAsIDB4MTQsIDB4MjAsICAvKiBTRFRWICovCisJIDB4MDAsIDB4MDAsIDB4MDEsIDB4YjAsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDljLCAweDAzLCAweDIzLCAweEMwLCAweDYwLCAweDBFLCAweDEzLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg5ZiwgMHgwMCwgMHgyMywgMHhDMCwgMHg2MCwgMHgwRiwgMHgxMywgMHgwMCwgIC8qIEhEVFYgMTA4MGk1MCAqLworCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg5YywgMHgwMSwgMHgyMywgMHhDMCwgMHg2MCwgMHgwRSwgMHgxMywgMHgwMCwgIC8qIEhEVFYgMTA4MGk2MCAqLworCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKK307CisKKy8qCisgKiA1MCA0OCA2MCBnbGVpY2gKKyAqIDI3cDUwIDlmIDAwIDIyIDgwIDQyIDY5IDE4IC4uLgorICogMjdwNjAgOTMgMDAgMjIgODAgODIgNjkgMWMgLi4uCisgKi8KKworLyogTWF4Ynl0ZSB0byAxMTQ0IChmb3IgcmF3IGRhdGEpICovCitzdGF0aWMgdTggSVRVRmVhdHVyZURlY29kZXJTZXR1cFs4XSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA0LCAweDAwCit9OworCitzdGF0aWMgdm9pZCBGaWxsVFNCdWZmZXIodm9pZCAqQnVmZmVyLCBpbnQgTGVuZ3RoLCB1MzIgRmxhZ3MpCit7CisJdTMyICpwdHIgPSBCdWZmZXI7CisKKwltZW1zZXQoQnVmZmVyLCAweGZmLCBMZW5ndGgpOworCXdoaWxlIChMZW5ndGggPiAwKSB7CisJCWlmIChGbGFncyAmIERGX1NXQVAzMikKKwkJCSpwdHIgPSAweDQ3MUZGRjEwOworCQllbHNlCisJCQkqcHRyID0gMHgxMEZGMUY0NzsKKwkJcHRyICs9ICgxODggLyA0KTsKKwkJTGVuZ3RoIC09IDE4ODsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZmx1c2hfYnVmZmVycyhzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwl1OCB2YWw7CisKKwlkbyB7CisJCW1zbGVlcCgxKTsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCXZhbCA9IGNoYW4tPm5leHRCdWZmZXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHg4MDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9IHdoaWxlICh2YWwpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9idWZmZXJzKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSBjaGFuLT5uZXh0QnVmZmVyOworCisJZG8geworCQltZW1zZXQoJkN1ci0+bmdlbmVCdWZmZXIuU1IsIDAsIHNpemVvZihDdXItPm5nZW5lQnVmZmVyLlNSKSk7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpCisJCQlGaWxsVFNCdWZmZXIoQ3VyLT5CdWZmZXIxLAorCQkJCSAgICAgY2hhbi0+Q2FwdHVyZTFMZW5ndGgsCisJCQkJICAgICBjaGFuLT5EYXRhRm9ybWF0RmxhZ3MpOworCQlDdXIgPSBDdXItPk5leHQ7CisJfSB3aGlsZSAoQ3VyICE9IGNoYW4tPm5leHRCdWZmZXIpOworCisJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkgeworCQljaGFuLT5uZXh0QnVmZmVyLT5uZ2VuZUJ1ZmZlci5TUi5EVE9VcGRhdGUgPQorCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZTsKKwkJY2hhbi0+QXVkaW9EVE9VcGRhdGVkID0gMDsKKworCQlDdXIgPSBjaGFuLT5UU0lkbGVCdWZmZXIuSGVhZDsKKworCQlkbyB7CisJCQltZW1zZXQoJkN1ci0+bmdlbmVCdWZmZXIuU1IsIDAsCisJCQkgICAgICAgc2l6ZW9mKEN1ci0+bmdlbmVCdWZmZXIuU1IpKTsKKwkJCUZpbGxUU0J1ZmZlcihDdXItPkJ1ZmZlcjEsCisJCQkJICAgICBjaGFuLT5DYXB0dXJlMUxlbmd0aCwKKwkJCQkgICAgIGNoYW4tPkRhdGFGb3JtYXRGbGFncyk7CisJCQlDdXIgPSBDdXItPk5leHQ7CisJCX0gd2hpbGUgKEN1ciAhPSBjaGFuLT5UU0lkbGVCdWZmZXIuSGVhZCk7CisJfQorfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfc3RyZWFtX2NvbnRyb2woc3RydWN0IG5nZW5lICpkZXYsIHU4IHN0cmVhbSwKKwkJCQkJdTggY29udHJvbCwgdTggbW9kZSwgdTggZmxhZ3MpCit7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSAmZGV2LT5jaGFubmVsW3N0cmVhbV07CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCXUxNiBCc1VWSSA9ICgoc3RyZWFtICYgMSkgPyAweDk0MDAgOiAweDkzMDApOworCXUxNiBCc1NESSA9ICgoc3RyZWFtICYgMSkgPyAweDk2MDAgOiAweDk1MDApOworCXUxNiBCc1NQSSA9ICgoc3RyZWFtICYgMSkgPyAweDk4MDAgOiAweDk3MDApOworCXUxNiBCc1NETyA9IDB4OUIwMDsKKworCS8qIGRvd24oJmRldi0+c3RyZWFtX211dGV4KTsgKi8KKwl3aGlsZSAoZG93bl90cnlsb2NrKCZkZXYtPnN0cmVhbV9tdXRleCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBTQyBsb2NrZWRcbiIpOworCQltc2xlZXAoMSk7CisJfQorCW1lbXNldCgmY29tLCAwLCBzaXplb2YoY29tKSk7CisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0NPTlRST0w7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCkgLSAyOworCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gPSBzdHJlYW0gfCAoY29udHJvbCA/IDggOiAwKTsKKwlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKQorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDc7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLkNvbnRyb2wgPSBjb250cm9sIHwKKwkJKGZsYWdzICYgU0ZMQUdfT1JERVJfTFVNQV9DSFJPTUEpOworCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5Nb2RlID0gbW9kZTsKKwljb20uaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCk7CisJY29tLm91dF9sZW4gPSAwOworCisJZHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJIjogU3RyZWFtPSUwMngsIENvbnRyb2w9JTAyeCwgTW9kZT0lMDJ4XG4iLAorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtLCBjb20uY21kLlN0cmVhbUNvbnRyb2wuQ29udHJvbCwKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1vZGUpOworCisJY2hhbi0+TW9kZSA9IG1vZGU7CisKKwlpZiAoIShjb250cm9sICYgMHg4MCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCWlmIChjaGFuLT5TdGF0ZSA9PSBLU1NUQVRFX1JVTikgeworCQkJY2hhbi0+U3RhdGUgPSBLU1NUQVRFX0FDUVVJUkU7CisJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9TVE9QOworCQkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKSB7CisJCQkJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQkvKiBjbGVhcl9idWZmZXJzKGNoYW4pOyAqLworCQkJZmx1c2hfYnVmZmVycyhjaGFuKTsKKwkJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobW9kZSAmIFNNT0RFX0FVRElPX0NBUFRVUkUpIHsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkNhcHR1cmVCbG9ja0NvdW50ID0KKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gQVVESU9fQkxPQ0tfU0laRTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0gY2hhbi0+UmluZ0J1ZmZlci5QQUhlYWQ7CisJfSBlbHNlIGlmIChtb2RlICYgU01PREVfVFJBTlNQT1JUX1NUUkVBTSkgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQ2FwdHVyZUJsb2NrQ291bnQgPQorCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggLyBUU19CTE9DS19TSVpFOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWF4TGluZXNQZXJGaWVsZCA9CisJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CdWZmZXJfQWRkcmVzcyA9CisJCQljaGFuLT5UU1JpbmdCdWZmZXIuUEFIZWFkOworCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWQklMaW5lID0KKwkJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDc7CisJCX0KKwl9IGVsc2UgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWaWRlb0xpbmUgPSBjaGFuLT5uQnl0ZXNQZXJMaW5lOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWF4TGluZXNQZXJGaWVsZCA9IGNoYW4tPm5MaW5lczsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1pbkxpbmVzUGVyRmllbGQgPSAxMDA7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CdWZmZXJfQWRkcmVzcyA9IGNoYW4tPlJpbmdCdWZmZXIuUEFIZWFkOworCisJCWlmIChtb2RlICYgU01PREVfVkJJX0NBUFRVUkUpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhWQklMaW5lc1BlckZpZWxkID0KKwkJCQljaGFuLT5uVkJJTGluZXM7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWluVkJJTGluZXNQZXJGaWVsZCA9IDA7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWQklMaW5lID0KKwkJCQljaGFuLT5uQnl0ZXNQZXJWQklMaW5lOworCQl9CisJCWlmIChmbGFncyAmIFNGTEFHX0NPTE9SQkFSKQorCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlN0cmVhbSB8PSAweDA0OworCX0KKworCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCWlmIChtb2RlICYgU01PREVfQVVESU9fQ0FQVFVSRSkgeworCQljaGFuLT5uZXh0QnVmZmVyID0gY2hhbi0+UmluZ0J1ZmZlci5IZWFkOworCQlpZiAobW9kZSAmIFNNT0RFX0FVRElPX1NQRElGKSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQlzaXplb2YoU1BESUZDb25maWd1cmF0aW9uKTsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTUEk7CisJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCSAgICAgICBTUERJRkNvbmZpZ3VyYXRpb24sIHNpemVvZihTUERJRkNvbmZpZ3VyYXRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPSA0OworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NESTsKKwkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJICAgICAgIEkyU0NvbmZpZ3VyYXRpb24gKworCQkJICAgICAgIDQgKiBkZXYtPmNhcmRfaW5mby0+aTJzW3N0cmVhbV0sIDQpOworCQl9CisJfSBlbHNlIGlmIChtb2RlICYgU01PREVfVFJBTlNQT1JUX1NUUkVBTSkgeworCQljaGFuLT5uZXh0QnVmZmVyID0gY2hhbi0+VFNSaW5nQnVmZmVyLkhlYWQ7CisJCWlmIChzdHJlYW0gPj0gU1RSRUFNX0FVRElPSU4xKSB7CisJCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9CisJCQkJCXNpemVvZihUU19JMlNPdXRDb25maWd1cmF0aW9uKTsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhQWRkciA9IEJzU0RPOworCQkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJCSAgICAgICBUU19JMlNPdXRDb25maWd1cmF0aW9uLAorCQkJCSAgICAgICBzaXplb2YoVFNfSTJTT3V0Q29uZmlndXJhdGlvbikpOworCQkJfSBlbHNlIHsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQkJc2l6ZW9mKFRTX0kyU0NvbmZpZ3VyYXRpb24pOworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTREk7CisJCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkJICAgICAgIFRTX0kyU0NvbmZpZ3VyYXRpb24sCisJCQkJICAgICAgIHNpemVvZihUU19JMlNDb25maWd1cmF0aW9uKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0gODsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNVVkkgKyAweDEwOworCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkgICAgICAgVFNGZWF0dXJlRGVjb2RlclNldHVwICsKKwkJCSAgICAgICA4ICogZGV2LT5jYXJkX2luZm8tPnRzZltzdHJlYW1dLCA4KTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5SaW5nQnVmZmVyLkhlYWQ7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJMTYgKyBzaXplb2YoSVRVRmVhdHVyZURlY29kZXJTZXR1cCk7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNVVkk7CisJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkgICAgICAgSVRVRGVjb2RlclNldHVwW2NoYW4tPml0dW1vZGVdLCAxNik7CisJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhICsgMTYsCisJCSAgICAgICBJVFVGZWF0dXJlRGVjb2RlclNldHVwLCBzaXplb2YoSVRVRmVhdHVyZURlY29kZXJTZXR1cCkpOworCX0KKwljbGVhcl9idWZmZXJzKGNoYW4pOworCWNoYW4tPlN0YXRlID0gS1NTVEFURV9SVU47CisJaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKQorCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJZWxzZQorCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9TVEFSVFVQOworCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkgeworCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQlyZXR1cm4gLTE7CisJfQorCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJMkMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBuZ2VuZV9pMmNfc2V0X2J1cyhzdHJ1Y3QgbmdlbmUgKmRldiwgaW50IGJ1cykKK3sKKwlpZiAoIShkZXYtPmNhcmRfaW5mby0+aTJjX2FjY2VzcyAmIDIpKQorCQlyZXR1cm47CisJaWYgKGRldi0+aTJjX2N1cnJlbnRfYnVzID09IGJ1cykKKwkJcmV0dXJuOworCisJc3dpdGNoIChidXMpIHsKKwljYXNlIDA6CisJCW5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoZGV2LCAzLCAwKTsKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDIsIDEpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDIsIDApOworCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMywgMSk7CisJCWJyZWFrOworCX0KKwlkZXYtPmkyY19jdXJyZW50X2J1cyA9IGJ1czsKK30KKworc3RhdGljIGludCBuZ2VuZV9pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCSBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9CisJCShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKWkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisKKwlkb3duKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCW5nZW5lX2kyY19zZXRfYnVzKGRldiwgY2hhbi0+bnVtYmVyKTsKKworCWlmIChudW0gPT0gMiAmJiBtc2dbMV0uZmxhZ3MgJiBJMkNfTV9SRCAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY19yZWFkKGRldiwgbXNnWzBdLmFkZHIsCisJCQkJCSAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuLAorCQkJCQkgICAgbXNnWzFdLmJ1ZiwgbXNnWzFdLmxlbiwgMCkpCisJCQlnb3RvIGRvbmU7CisKKwlpZiAobnVtID09IDEgJiYgIShtc2dbMF0uZmxhZ3MgJiBJMkNfTV9SRCkpCisJCWlmICghbmdlbmVfY29tbWFuZF9pMmNfd3JpdGUoZGV2LCBtc2dbMF0uYWRkciwKKwkJCQkJICAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKSkKKwkJCWdvdG8gZG9uZTsKKwlpZiAobnVtID09IDEgJiYgKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY19yZWFkKGRldiwgbXNnWzBdLmFkZHIsIDAsIDAsCisJCQkJCSAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuLCAwKSkKKwkJCWdvdG8gZG9uZTsKKworCXVwKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCXJldHVybiAtRUlPOworCitkb25lOgorCXVwKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCXJldHVybiBudW07Cit9CisKKworc3RhdGljIHUzMiBuZ2VuZV9pMmNfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBuZ2VuZV9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBuZ2VuZV9pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBuZ2VuZV9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBpbnQgbmdlbmVfaTJjX2luaXQoc3RydWN0IG5nZW5lICpkZXYsIGludCBkZXZfbnIpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJihkZXYtPmNoYW5uZWxbZGV2X25yXS5pMmNfYWRhcHRlcik7CisKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsICYoZGV2LT5jaGFubmVsW2Rldl9ucl0pKTsKKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMIHwgSTJDX0NMQVNTX1RWX0FOQUxPRzsKKworCXN0cmNweShhZGFwLT5uYW1lLCAibkdlbmUiKTsKKworCWFkYXAtPmFsZ28gPSAmbmdlbmVfaTJjX2FsZ287CisJYWRhcC0+YWxnb19kYXRhID0gKHZvaWQgKikmKGRldi0+Y2hhbm5lbFtkZXZfbnJdKTsKKwlhZGFwLT5kZXYucGFyZW50ID0gJmRldi0+cGNpX2Rldi0+ZGV2OworCisJcmV0dXJuIGkyY19hZGRfYWRhcHRlcihhZGFwKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERWQiBmdW5jdGlvbnMgYW5kIEFQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHN3YXBfYnVmZmVyKHUzMiAqcCwgdTMyIGxlbikKK3sKKwl3aGlsZSAobGVuKSB7CisJCSpwID0gc3dhYjMyKCpwKTsKKwkJcCsrOworCQlsZW4gLT0gNDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgKnRzaW5fZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLCB1MzIgY2xvY2ssIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IHByaXY7CisKKworI2lmZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJaWYgKGNoYW4tPnVzZXJzID4gMCkKKyNlbmRpZgorCQlkdmJfZG14X3N3ZmlsdGVyKCZjaGFuLT5kZW11eCwgYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCit1OCBmaWxsX3RzWzE4OF0gPSB7IDB4NDcsIDB4MWYsIDB4ZmYsIDB4MTAgfTsKKworc3RhdGljIHZvaWQgKnRzb3V0X2V4Y2hhbmdlKHZvaWQgKnByaXYsIHZvaWQgKmJ1ZiwgdTMyIGxlbiwKKwkJCSAgICB1MzIgY2xvY2ssIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IHByaXY7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJdTMyIGFsZW47CisKKwlhbGVuID0gZHZiX3JpbmdidWZmZXJfYXZhaWwoJmRldi0+dHNvdXRfcmJ1Zik7CisJYWxlbiAtPSBhbGVuICUgMTg4OworCisJaWYgKGFsZW4gPCBsZW4pCisJCUZpbGxUU0J1ZmZlcihidWYgKyBhbGVuLCBsZW4gLSBhbGVuLCBmbGFncyk7CisJZWxzZQorCQlhbGVuID0gbGVuOworCWR2Yl9yaW5nYnVmZmVyX3JlYWQoJmRldi0+dHNvdXRfcmJ1ZiwgYnVmLCBhbGVuKTsKKwlpZiAoZmxhZ3MgJiBERl9TV0FQMzIpCisJCXN3YXBfYnVmZmVyKCh1MzIgKilidWYsIGFsZW4pOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT50c291dF9yYnVmLnF1ZXVlKTsKKwlyZXR1cm4gYnVmOworfQorCisKK3N0YXRpYyB2b2lkIHNldF90cmFuc2ZlcihzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiwgaW50IHN0YXRlKQoreworCXU4IGNvbnRyb2wgPSAwLCBtb2RlID0gMCwgZmxhZ3MgPSAwOworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gY2hhbi0+ZGV2OworCWludCByZXQ7CisKKwkvKgorCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogc3QgJWRcbiIsIHN0YXRlKTsKKwltc2xlZXAoMTAwKTsKKwkqLworCisJaWYgKHN0YXRlKSB7CisJCWlmIChjaGFuLT5ydW5uaW5nKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IGFscmVhZHkgcnVubmluZ1xuIik7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWNoYW4tPnJ1bm5pbmcpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogYWxyZWFkeSBzdG9wcGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChkZXYtPmNhcmRfaW5mby0+c3dpdGNoX2N0cmwpCisJCWRldi0+Y2FyZF9pbmZvLT5zd2l0Y2hfY3RybChjaGFuLCAxLCBzdGF0ZSBeIDEpOworCisJaWYgKHN0YXRlKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCisJCS8qIHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogbG9jaz0lMDh4XG4iLAorCQkJICBuZ3JlYWRsKDB4OTMxMCkpOyAqLworCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaCgmZGV2LT50c291dF9yYnVmKTsKKwkJY29udHJvbCA9IDB4ODA7CisJCWlmIChjaGFuLT5tb2RlICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoID0gNTEyICogMTg4OworCQkJbW9kZSA9IFNNT0RFX1RSQU5TUE9SVF9TVFJFQU07CisJCX0KKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkgeworCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gdHNvdXRfZXhjaGFuZ2U7CisJCQkvKiAweDY2NjY2NjY2ID0gNTBNSHogKjJeMzMgLzI1ME1IeiAqLworCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZSA9IDB4NjY2NjY2NjY7CisJCQkvKiBzZXRfZHRvKGNoYW4sIDM4ODEwNzAwKzEwMDApOyAqLworCQkJLyogc2V0X2R0byhjaGFuLCAxOTM5MjY1OCk7ICovCisJCX0KKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU0lOKQorCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gdHNpbl9leGNoYW5nZTsKKwkJLyogbmd3cml0ZWwoMCwgMHg5MzEwKTsgKi8KKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9IGVsc2UKKwkJOy8qIHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogbG9jaz0lMDh4XG4iLAorCQkJICAgbmdyZWFkbCgweDkzMTApKTsgKi8KKworCXJldCA9IG5nZW5lX2NvbW1hbmRfc3RyZWFtX2NvbnRyb2woZGV2LCBjaGFuLT5udW1iZXIsCisJCQkJCSAgIGNvbnRyb2wsIG1vZGUsIGZsYWdzKTsKKwlpZiAoIXJldCkKKwkJY2hhbi0+cnVubmluZyA9IHN0YXRlOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IHNldF90cmFuc2ZlciAlZCBmYWlsZWRcbiIsCisJCSAgICAgICBzdGF0ZSk7CisJaWYgKCFzdGF0ZSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gMDsKKwkJZHZiX3JpbmdidWZmZXJfZmx1c2goJmRldi0+dHNvdXRfcmJ1Zik7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IG5nZW5lX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gZHZiZG14LT5wcml2OworCisJaWYgKGNoYW4tPnVzZXJzID09IDApIHsKKyNpZmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCQlpZiAoIWNoYW4tPnJ1bm5pbmcpCisjZW5kaWYKKwkJCXNldF90cmFuc2ZlcihjaGFuLCAxKTsKKwkJLyogbXNsZWVwKDEwKTsgKi8KKwl9CisKKwlyZXR1cm4gKytjaGFuLT51c2VyczsKK30KKworc3RhdGljIGludCBuZ2VuZV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gZHZiZG14LT5wcml2OworCisJaWYgKC0tY2hhbi0+dXNlcnMpCisJCXJldHVybiBjaGFuLT51c2VyczsKKworI2lmbmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCXNldF90cmFuc2ZlcihjaGFuLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IG15X2R2Yl9kbXhfdHNfY2FyZF9pbml0KHN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4LCBjaGFyICppZCwKKwkJCQkgICBpbnQgKCpzdGFydF9mZWVkKShzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKiksCisJCQkJICAgaW50ICgqc3RvcF9mZWVkKShzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKiksCisJCQkJICAgdm9pZCAqcHJpdikKK3sKKwlkdmJkZW11eC0+cHJpdiA9IHByaXY7CisKKwlkdmJkZW11eC0+ZmlsdGVybnVtID0gMjU2OworCWR2YmRlbXV4LT5mZWVkbnVtID0gMjU2OworCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gc3RvcF9mZWVkOworCWR2YmRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gMDsKKwlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKKwkJCQkgICAgICBETVhfU0VDVElPTl9GSUxURVJJTkcgfAorCQkJCSAgICAgIERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKKwlyZXR1cm4gZHZiX2RteF9pbml0KGR2YmRlbXV4KTsKK30KKworc3RhdGljIGludCBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdChzdHJ1Y3QgZG14ZGV2ICpkbXhkZXYsCisJCQkJICAgICAgc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXgsCisJCQkJICAgICAgc3RydWN0IGRteF9mcm9udGVuZCAqaHdfZnJvbnRlbmQsCisJCQkJICAgICAgc3RydWN0IGRteF9mcm9udGVuZCAqbWVtX2Zyb250ZW5kLAorCQkJCSAgICAgIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpCit7CisJaW50IHJldDsKKworCWRteGRldi0+ZmlsdGVybnVtID0gMjU2OworCWRteGRldi0+ZGVtdXggPSAmZHZiZGVtdXgtPmRteDsKKwlkbXhkZXYtPmNhcGFiaWxpdGllcyA9IDA7CisJcmV0ID0gZHZiX2RteGRldl9pbml0KGRteGRldiwgZHZiX2FkYXB0ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaHdfZnJvbnRlbmQtPnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCWR2YmRlbXV4LT5kbXguYWRkX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LCBod19mcm9udGVuZCk7CisJbWVtX2Zyb250ZW5kLT5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCWR2YmRlbXV4LT5kbXguYWRkX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LCBtZW1fZnJvbnRlbmQpOworCXJldHVybiBkdmJkZW11eC0+ZG14LmNvbm5lY3RfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIGh3X2Zyb250ZW5kKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG5HZW5lIGhhcmR3YXJlIGluaXQgYW5kIHJlbGVhc2UgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGZyZWVfcmluZ2J1ZmZlcihzdHJ1Y3QgbmdlbmUgKmRldiwgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqcmIpCit7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IHJiLT5IZWFkOworCXUzMiBqOworCisJaWYgKCFDdXIpCisJCXJldHVybjsKKworCWZvciAoaiA9IDA7IGogPCByYi0+TnVtQnVmZmVyczsgaisrLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJaWYgKEN1ci0+QnVmZmVyMSkKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkgICAgcmItPkJ1ZmZlcjFMZW5ndGgsCisJCQkJCSAgICBDdXItPkJ1ZmZlcjEsCisJCQkJCSAgICBDdXItPnNjTGlzdDEtPkFkZHJlc3MpOworCisJCWlmIChDdXItPkJ1ZmZlcjIpCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwKKwkJCQkJICAgIHJiLT5CdWZmZXIyTGVuZ3RoLAorCQkJCQkgICAgQ3VyLT5CdWZmZXIyLAorCQkJCQkgICAgQ3VyLT5zY0xpc3QyLT5BZGRyZXNzKTsKKwl9CisKKwlpZiAocmItPlNDTGlzdE1lbSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIHJiLT5TQ0xpc3RNZW1TaXplLAorCQkJCSAgICByYi0+U0NMaXN0TWVtLCByYi0+UEFTQ0xpc3RNZW0pOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIHJiLT5NZW1TaXplLCByYi0+SGVhZCwgcmItPlBBSGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaWRsZWJ1ZmZlcihzdHJ1Y3QgbmdlbmUgKmRldiwKKwkJICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpyYiwKKwkJICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICp0YikKK3sKKwlpbnQgajsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gdGItPkhlYWQ7CisKKwlpZiAoIXJiLT5IZWFkKQorCQlyZXR1cm47CisJZnJlZV9yaW5nYnVmZmVyKGRldiwgcmIpOworCWZvciAoaiA9IDA7IGogPCB0Yi0+TnVtQnVmZmVyczsgaisrLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJQ3VyLT5CdWZmZXIyID0gMDsKKwkJQ3VyLT5zY0xpc3QyID0gMDsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPSAwOworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9jb21tb25fYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbjsKKworCWZvciAoaSA9IFNUUkVBTV9WSURFT0lOMTsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQljaGFuID0gJmRldi0+Y2hhbm5lbFtpXTsKKwkJZnJlZV9pZGxlYnVmZmVyKGRldiwgJmNoYW4tPlRTSWRsZUJ1ZmZlciwgJmNoYW4tPlRTUmluZ0J1ZmZlcik7CisJCWZyZWVfcmluZ2J1ZmZlcihkZXYsICZjaGFuLT5SaW5nQnVmZmVyKTsKKwkJZnJlZV9yaW5nYnVmZmVyKGRldiwgJmNoYW4tPlRTUmluZ0J1ZmZlcik7CisJfQorCisJaWYgKGRldi0+T3ZlcmZsb3dCdWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCSAgICBPVkVSRkxPV19CVUZGRVJfU0laRSwKKwkJCQkgICAgZGV2LT5PdmVyZmxvd0J1ZmZlciwgZGV2LT5QQU92ZXJmbG93QnVmZmVyKTsKKworCWlmIChkZXYtPkZXSW50ZXJmYWNlQnVmZmVyKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwKKwkJCQkgICAgNDA5NiwKKwkJCQkgICAgZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciwKKwkJCQkgICAgZGV2LT5QQUZXSW50ZXJmYWNlQnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSaW5nIGJ1ZmZlciBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGNyZWF0ZV9yaW5nX2J1ZmZlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJICAgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKmRlc2NyLCB1MzIgTnVtQnVmZmVycykKK3sKKwlkbWFfYWRkcl90IHRtcDsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqSGVhZDsKKwl1MzIgaTsKKwl1MzIgTWVtU2l6ZSA9IFNJWkVPRl9TQnVmZmVySGVhZGVyICogTnVtQnVmZmVyczsKKwl1NjQgUEFSaW5nQnVmZmVySGVhZDsKKwl1NjQgUEFSaW5nQnVmZmVyQ3VyOworCXU2NCBQQVJpbmdCdWZmZXJOZXh0OworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIsICpOZXh0OworCisJZGVzY3ItPkhlYWQgPSAwOworCWRlc2NyLT5NZW1TaXplID0gMDsKKwlkZXNjci0+UEFIZWFkID0gMDsKKwlkZXNjci0+TnVtQnVmZmVycyA9IDA7CisKKwlpZiAoTWVtU2l6ZSA8IDQwOTYpCisJCU1lbVNpemUgPSA0MDk2OworCisJSGVhZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIE1lbVNpemUsICZ0bXApOworCVBBUmluZ0J1ZmZlckhlYWQgPSB0bXA7CisKKwlpZiAoIUhlYWQpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KEhlYWQsIDAsIE1lbVNpemUpOworCisJUEFSaW5nQnVmZmVyQ3VyID0gUEFSaW5nQnVmZmVySGVhZDsKKwlDdXIgPSBIZWFkOworCisJZm9yIChpID0gMDsgaSA8IE51bUJ1ZmZlcnMgLSAxOyBpKyspIHsKKwkJTmV4dCA9IChzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqKQorCQkJKCgodTggKikgQ3VyKSArIFNJWkVPRl9TQnVmZmVySGVhZGVyKTsKKwkJUEFSaW5nQnVmZmVyTmV4dCA9IFBBUmluZ0J1ZmZlckN1ciArIFNJWkVPRl9TQnVmZmVySGVhZGVyOworCQlDdXItPk5leHQgPSBOZXh0OworCQlDdXItPm5nZW5lQnVmZmVyLk5leHQgPSBQQVJpbmdCdWZmZXJOZXh0OworCQlDdXIgPSBOZXh0OworCQlQQVJpbmdCdWZmZXJDdXIgPSBQQVJpbmdCdWZmZXJOZXh0OworCX0KKwkvKiBMYXN0IEJ1ZmZlciBwb2ludHMgYmFjayB0byBmaXJzdCBvbmUgKi8KKwlDdXItPk5leHQgPSBIZWFkOworCUN1ci0+bmdlbmVCdWZmZXIuTmV4dCA9IFBBUmluZ0J1ZmZlckhlYWQ7CisKKwlkZXNjci0+SGVhZCAgICAgICA9IEhlYWQ7CisJZGVzY3ItPk1lbVNpemUgICAgPSBNZW1TaXplOworCWRlc2NyLT5QQUhlYWQgICAgID0gUEFSaW5nQnVmZmVySGVhZDsKKwlkZXNjci0+TnVtQnVmZmVycyA9IE51bUJ1ZmZlcnM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBBbGxvY2F0ZVJpbmdCdWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJICAgICAgIGRtYV9hZGRyX3Qgb2YsCisJCQkgICAgICAgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqcFJpbmdCdWZmZXIsCisJCQkgICAgICAgdTMyIEJ1ZmZlcjFMZW5ndGgsIHUzMiBCdWZmZXIyTGVuZ3RoKQoreworCWRtYV9hZGRyX3QgdG1wOworCXUzMiBpLCBqOworCWludCBzdGF0dXMgPSAwOworCXUzMiBTQ0xpc3RNZW1TaXplID0gcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnMKKwkJKiAoKEJ1ZmZlcjJMZW5ndGggIT0gMCkgPyAoTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgKiAyKSA6CisJCSAgICBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUykKKwkJKiBzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCisJdTY0IFBBU0NMaXN0TWVtOworCXN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICpTQ0xpc3RFbnRyeTsKKwl1NjQgUEFTQ0xpc3RFbnRyeTsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyOworCXZvaWQgKlNDTGlzdE1lbTsKKworCWlmIChTQ0xpc3RNZW1TaXplIDwgNDA5NikKKwkJU0NMaXN0TWVtU2l6ZSA9IDQwOTY7CisKKwlTQ0xpc3RNZW0gPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBTQ0xpc3RNZW1TaXplLCAmdG1wKTsKKworCVBBU0NMaXN0TWVtID0gdG1wOworCWlmIChTQ0xpc3RNZW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoU0NMaXN0TWVtLCAwLCBTQ0xpc3RNZW1TaXplKTsKKworCXBSaW5nQnVmZmVyLT5TQ0xpc3RNZW0gPSBTQ0xpc3RNZW07CisJcFJpbmdCdWZmZXItPlBBU0NMaXN0TWVtID0gUEFTQ0xpc3RNZW07CisJcFJpbmdCdWZmZXItPlNDTGlzdE1lbVNpemUgPSBTQ0xpc3RNZW1TaXplOworCXBSaW5nQnVmZmVyLT5CdWZmZXIxTGVuZ3RoID0gQnVmZmVyMUxlbmd0aDsKKwlwUmluZ0J1ZmZlci0+QnVmZmVyMkxlbmd0aCA9IEJ1ZmZlcjJMZW5ndGg7CisKKwlTQ0xpc3RFbnRyeSA9IFNDTGlzdE1lbTsKKwlQQVNDTGlzdEVudHJ5ID0gUEFTQ0xpc3RNZW07CisJQ3VyID0gcFJpbmdCdWZmZXItPkhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnM7IGkgKz0gMSwgQ3VyID0gQ3VyLT5OZXh0KSB7CisJCXU2NCBQQUJ1ZmZlcjsKKworCQl2b2lkICpCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBCdWZmZXIxTGVuZ3RoLAorCQkJCQkJICAgICZ0bXApOworCQlQQUJ1ZmZlciA9IHRtcDsKKworCQlpZiAoQnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlDdXItPkJ1ZmZlcjEgPSBCdWZmZXI7CisKKwkJU0NMaXN0RW50cnktPkFkZHJlc3MgPSBQQUJ1ZmZlcjsKKwkJU0NMaXN0RW50cnktPkxlbmd0aCAgPSBCdWZmZXIxTGVuZ3RoOworCisJCUN1ci0+c2NMaXN0MSA9IFNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMSA9IFBBU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMSA9CisJCQlOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUzsKKworCQlTQ0xpc3RFbnRyeSArPSAxOworCQlQQVNDTGlzdEVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKyNpZiBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyA+IDEKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTIC0gMTsgaiArPSAxKSB7CisJCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IG9mOworCQkJU0NMaXN0RW50cnktPkxlbmd0aCA9IE9WRVJGTE9XX0JVRkZFUl9TSVpFOworCQkJU0NMaXN0RW50cnkgKz0gMTsKKwkJCVBBU0NMaXN0RW50cnkgKz0KKwkJCQlzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCQl9CisjZW5kaWYKKworCQlpZiAoIUJ1ZmZlcjJMZW5ndGgpCisJCQljb250aW51ZTsKKworCQlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBCdWZmZXIyTGVuZ3RoLCAmdG1wKTsKKwkJUEFCdWZmZXIgPSB0bXA7CisKKwkJaWYgKEJ1ZmZlciA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJQ3VyLT5CdWZmZXIyID0gQnVmZmVyOworCisJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gUEFCdWZmZXI7CisJCVNDTGlzdEVudHJ5LT5MZW5ndGggID0gQnVmZmVyMkxlbmd0aDsKKworCQlDdXItPnNjTGlzdDIgPSBTQ0xpc3RFbnRyeTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPSBQQVNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPQorCQkJTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVM7CisKKwkJU0NMaXN0RW50cnkgICArPSAxOworCQlQQVNDTGlzdEVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKyNpZiBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyA+IDEKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTIC0gMTsgaisrKSB7CisJCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IG9mOworCQkJU0NMaXN0RW50cnktPkxlbmd0aCA9IE9WRVJGTE9XX0JVRkZFUl9TSVpFOworCQkJU0NMaXN0RW50cnkgKz0gMTsKKwkJCVBBU0NMaXN0RW50cnkgKz0KKwkJCQlzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCQl9CisjZW5kaWYKKworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgRmlsbFRTSWRsZUJ1ZmZlcihzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwSWRsZUJ1ZmZlciwKKwkJCSAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwUmluZ0J1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIENvcHkgcG9pbnRlciB0byBzY2F0dGVyIGdhdGhlciBsaXN0IGluIFRTUmluZ2J1ZmZlcgorCSAgIHN0cnVjdHVyZSBmb3IgYnVmZmVyIDIKKwkgICBMb2FkIG51bWJlciBvZiBidWZmZXIKKwkqLworCXUzMiBuID0gcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnM7CisKKwkvKiBQb2ludCB0byBmaXJzdCBidWZmZXIgZW50cnkgKi8KKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gcFJpbmdCdWZmZXItPkhlYWQ7CisJaW50IGk7CisJLyogTG9vcCB0aHJ1IGFsbCBidWZmZXIgYW5kIHNldCBCdWZmZXIgMiBwb2ludGVycyB0byBUU0lkbGVidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCUN1ci0+QnVmZmVyMiA9IHBJZGxlQnVmZmVyLT5IZWFkLT5CdWZmZXIxOworCQlDdXItPnNjTGlzdDIgPSBwSWRsZUJ1ZmZlci0+SGVhZC0+c2NMaXN0MTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPQorCQkJcElkbGVCdWZmZXItPkhlYWQtPm5nZW5lQnVmZmVyLgorCQkJQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xOworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPQorCQkJcElkbGVCdWZmZXItPkhlYWQtPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzE7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBSaW5nQnVmZmVyU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJUklOR19TSVpFX1ZJREVPLAorCVJJTkdfU0laRV9WSURFTywKKwlSSU5HX1NJWkVfQVVESU8sCisJUklOR19TSVpFX0FVRElPLAorCVJJTkdfU0laRV9BVURJTywKK307CisKK3N0YXRpYyB1MzIgQnVmZmVyMVNpemVzW01BWF9TVFJFQU1dID0geworCU1BWF9WSURFT19CVUZGRVJfU0laRSwKKwlNQVhfVklERU9fQlVGRkVSX1NJWkUsCisJTUFYX0FVRElPX0JVRkZFUl9TSVpFLAorCU1BWF9BVURJT19CVUZGRVJfU0laRSwKKwlNQVhfQVVESU9fQlVGRkVSX1NJWkUKK307CisKK3N0YXRpYyB1MzIgQnVmZmVyMlNpemVzW01BWF9TVFJFQU1dID0geworCU1BWF9WQklfQlVGRkVSX1NJWkUsCisJTUFYX1ZCSV9CVUZGRVJfU0laRSwKKwkwLAorCTAsCisJMAorfTsKKworCitzdGF0aWMgaW50IEFsbG9jQ29tbW9uQnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgc3RhdHVzID0gMCwgaTsKKworCWRldi0+RldJbnRlcmZhY2VCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIDQwOTYsCisJCQkJCQkgICAgICZkZXYtPlBBRldJbnRlcmZhY2VCdWZmZXIpOworCWlmICghZGV2LT5GV0ludGVyZmFjZUJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT5ob3N0dG9uZ2VuZSA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXI7CisJZGV2LT5uZ2VuZXRvaG9zdCA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXIgKyAyNTY7CisJZGV2LT5FdmVudEJ1ZmZlciA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXIgKyA1MTI7CisKKwlkZXYtPk92ZXJmbG93QnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgT1ZFUkZMT1dfQlVGRkVSX1NJWkUsCisJCQkJCQkgICAmZGV2LT5QQU92ZXJmbG93QnVmZmVyKTsKKwlpZiAoIWRldi0+T3ZlcmZsb3dCdWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChkZXYtPk92ZXJmbG93QnVmZmVyLCAwLCBPVkVSRkxPV19CVUZGRVJfU0laRSk7CisKKwlmb3IgKGkgPSBTVFJFQU1fVklERU9JTjE7IGkgPCBNQVhfU1RSRUFNOyBpKyspIHsKKwkJaW50IHR5cGUgPSBkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVtpXTsKKworCQlkZXYtPmNoYW5uZWxbaV0uU3RhdGUgPSBLU1NUQVRFX1NUT1A7CisKKwkJaWYgKHR5cGUgJiAoTkdFTkVfSU9fVFYgfCBOR0VORV9JT19IRFRWIHwgTkdFTkVfSU9fQUlOKSkgeworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLlJpbmdCdWZmZXIsCisJCQkJCQkgICAgUmluZ0J1ZmZlclNpemVzW2ldKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlpZiAodHlwZSAmIChOR0VORV9JT19UViB8IE5HRU5FX0lPX0FJTikpIHsKKwkJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCQkgICAgIGRldi0+CisJCQkJCQkJICAgICBQQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCQkgICAgIFJpbmdCdWZmZXIsCisJCQkJCQkJICAgICBCdWZmZXIxU2l6ZXNbaV0sCisJCQkJCQkJICAgICBCdWZmZXIyU2l6ZXNbaV0pOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAodHlwZSAmIE5HRU5FX0lPX0hEVFYpIHsKKwkJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCQkgICAgIGRldi0+CisJCQkJCQkJICAgICBQQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCQkgICAgIFJpbmdCdWZmZXIsCisJCQkJCQkJICAgTUFYX0hEVFZfQlVGRkVSX1NJWkUsCisJCQkJCQkJICAgICAwKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAodHlwZSAmIChOR0VORV9JT19UU0lOIHwgTkdFTkVfSU9fVFNPVVQpKSB7CisKKwkJCXN0YXR1cyA9IGNyZWF0ZV9yaW5nX2J1ZmZlcihkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICBUU1JpbmdCdWZmZXIsIFJJTkdfU0laRV9UUyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKworCQkJc3RhdHVzID0gQWxsb2NhdGVSaW5nQnVmZmVycyhkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgIGRldi0+UEFPdmVyZmxvd0J1ZmZlciwKKwkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICAgVFNSaW5nQnVmZmVyLAorCQkJCQkJICAgICBNQVhfVFNfQlVGRkVSX1NJWkUsIDApOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICh0eXBlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCXN0YXR1cyA9IGNyZWF0ZV9yaW5nX2J1ZmZlcihkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICBUU0lkbGVCdWZmZXIsIDEpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAgZGV2LT5QQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgICBUU0lkbGVCdWZmZXIsCisJCQkJCQkgICAgIE1BWF9UU19CVUZGRVJfU0laRSwgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQkJRmlsbFRTSWRsZUJ1ZmZlcigmZGV2LT5jaGFubmVsW2ldLlRTSWRsZUJ1ZmZlciwKKwkJCQkJICZkZXYtPmNoYW5uZWxbaV0uVFNSaW5nQnVmZmVyKTsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaWYgKGRldi0+aW9tZW0pCisJCWlvdW5tYXAoZGV2LT5pb21lbSk7CisJZnJlZV9jb21tb25fYnVmZmVycyhkZXYpOworCXZmcmVlKGRldi0+dHNvdXRfYnVmKTsKKwl2ZnJlZShkZXYtPmFpbl9idWYpOworCXZmcmVlKGRldi0+dmluX2J1Zik7CisJdmZyZWUoZGV2KTsKK30KKworc3RhdGljIGludCBuZ2VuZV9nZXRfYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpZiAoQWxsb2NDb21tb25CdWZmZXJzKGRldikpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVs0XSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCWRldi0+dHNvdXRfYnVmID0gdm1hbGxvYyhUU09VVF9CVUZfU0laRSk7CisJCWlmICghZGV2LT50c291dF9idWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZHZiX3JpbmdidWZmZXJfaW5pdCgmZGV2LT50c291dF9yYnVmLAorCQkJCSAgICBkZXYtPnRzb3V0X2J1ZiwgVFNPVVRfQlVGX1NJWkUpOworCX0KKwlpZiAoZGV2LT5jYXJkX2luZm8tPmlvX3R5cGVbMl0gJiBOR0VORV9JT19BSU4pIHsKKwkJZGV2LT5haW5fYnVmID0gdm1hbGxvYyhBSU5fQlVGX1NJWkUpOworCQlpZiAoIWRldi0+YWluX2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPmFpbl9yYnVmLCBkZXYtPmFpbl9idWYsIEFJTl9CVUZfU0laRSk7CisJfQorCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVswXSAmIE5HRU5FX0lPX0hEVFYpIHsKKwkJZGV2LT52aW5fYnVmID0gdm1hbGxvYyhWSU5fQlVGX1NJWkUpOworCQlpZiAoIWRldi0+dmluX2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPnZpbl9yYnVmLCBkZXYtPnZpbl9idWYsIFZJTl9CVUZfU0laRSk7CisJfQorCWRldi0+aW9tZW0gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaV9kZXYsIDApLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpX2RldiwgMCkpOworCWlmICghZGV2LT5pb21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfaW5pdChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgaTsKKworCXRhc2tsZXRfaW5pdCgmZGV2LT5ldmVudF90YXNrbGV0LCBldmVudF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylkZXYpOworCisJbWVtc2V0X2lvKGRldi0+aW9tZW0gKyAweGMwMDAsIDB4MDAsIDB4MjIwKTsKKwltZW1zZXRfaW8oZGV2LT5pb21lbSArIDB4YzQwMCwgMHgwMCwgMHgxMDApOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQlkZXYtPmNoYW5uZWxbaV0uZGV2ID0gZGV2OworCQlkZXYtPmNoYW5uZWxbaV0ubnVtYmVyID0gaTsKKwl9CisKKwlkZXYtPmZ3X2ludGVyZmFjZV92ZXJzaW9uID0gMDsKKworCW5nd3JpdGVsKDAsIE5HRU5FX0lOVF9FTkFCTEUpOworCisJZGV2LT5pY291bnRzID0gbmdyZWFkbChOR0VORV9JTlRfQ09VTlRTKTsKKworCWRldi0+ZGV2aWNlX3ZlcnNpb24gPSBuZ3JlYWRsKERFVl9WRVIpICYgMHgwZjsKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IERldmljZSB2ZXJzaW9uICVkXG4iLAorCSAgICAgICBkZXYtPmRldmljZV92ZXJzaW9uKTsKK30KKworc3RhdGljIGludCBuZ2VuZV9sb2FkX2Zpcm0oc3RydWN0IG5nZW5lICpkZXYpCit7CisJdTMyIHNpemU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdTggKm5nZW5lX2Z3OworCWNoYXIgKmZ3X25hbWU7CisJaW50IGVyciwgdmVyc2lvbjsKKworCXZlcnNpb24gPSBkZXYtPmNhcmRfaW5mby0+ZndfdmVyc2lvbjsKKworCXN3aXRjaCAodmVyc2lvbikgeworCWRlZmF1bHQ6CisJY2FzZSAxNToKKwkJdmVyc2lvbiA9IDE1OworCQlzaXplID0gMjM0NjY7CisJCWZ3X25hbWUgPSAibmdlbmVfMTUuZnciOworCQlicmVhazsKKwljYXNlIDE2OgorCQlzaXplID0gMjM0OTg7CisJCWZ3X25hbWUgPSAibmdlbmVfMTYuZnciOworCQlicmVhazsKKwljYXNlIDE3OgorCQlzaXplID0gMjQ0NDY7CisJCWZ3X25hbWUgPSAibmdlbmVfMTcuZnciOworCQlicmVhazsKKwl9CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZkZXYtPnBjaV9kZXYtPmRldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJIjogQ291bGQgbm90IGxvYWQgZmlybXdhcmUgZmlsZSAlcy5cbiIsIGZ3X25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FCisJCQkiOiBDb3B5ICVzIHRvIHlvdXIgaG90cGx1ZyBkaXJlY3RvcnkhXG4iLCBmd19uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc2l6ZSAhPSBmdy0+c2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUKKwkJCSI6IEZpcm13YXJlICVzIGhhcyBpbnZhbGlkIHNpemUhIiwgZndfbmFtZSk7CisJCWVyciA9IC0xOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCSI6IExvYWRpbmcgZmlybXdhcmUgZmlsZSAlcy5cbiIsIGZ3X25hbWUpOworCQluZ2VuZV9mdyA9ICh1OCAqKSBmdy0+ZGF0YTsKKwkJZXJyID0gbmdlbmVfY29tbWFuZF9sb2FkX2Zpcm13YXJlKGRldiwgbmdlbmVfZncsIHNpemUpOworCX0KKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfc3RvcChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlkb3duKCZkZXYtPmNtZF9tdXRleCk7CisJaTJjX2RlbF9hZGFwdGVyKCYoZGV2LT5jaGFubmVsWzBdLmkyY19hZGFwdGVyKSk7CisJaTJjX2RlbF9hZGFwdGVyKCYoZGV2LT5jaGFubmVsWzFdLmkyY19hZGFwdGVyKSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORCk7CisJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORF9ISSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9TVEFUVVNfSEkpOworCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9FVkVOVF9ISSk7CisJZnJlZV9pcnEoZGV2LT5wY2lfZGV2LT5pcnEsIGRldik7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfc3RhcnQoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaW50IHN0YXQ7CisJaW50IGk7CisKKwlwY2lfc2V0X21hc3RlcihkZXYtPnBjaV9kZXYpOworCW5nZW5lX2luaXQoZGV2KTsKKworCXN0YXQgPSByZXF1ZXN0X2lycShkZXYtPnBjaV9kZXYtPmlycSwgaXJxX2hhbmRsZXIsCisJCQkgICBJUlFGX1NIQVJFRCwgIm5HZW5lIiwKKwkJCSAgICh2b2lkICopZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCXJldHVybiBzdGF0OworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5jbWRfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dHhfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cnhfd3EpOworCXNlbWFfaW5pdCgmZGV2LT5jbWRfbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5zdHJlYW1fbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5wbGxfbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5pMmNfc3dpdGNoX211dGV4LCAxKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5jbWRfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9TVFJFQU07IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y2hhbm5lbFtpXS5zdGF0ZV9sb2NrKTsKKwluZ3dyaXRlbCgxLCBUSU1FU1RBTVBTKTsKKworCW5nd3JpdGVsKDEsIE5HRU5FX0lOVF9FTkFCTEUpOworCisJc3RhdCA9IG5nZW5lX2xvYWRfZmlybShkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsOworCisJc3RhdCA9IG5nZW5lX2kyY19pbml0KGRldiwgMCk7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ID0gbmdlbmVfaTJjX2luaXQoZGV2LCAxKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDsKKworCWlmIChkZXYtPmNhcmRfaW5mby0+ZndfdmVyc2lvbiA9PSAxNykgeworCQl1OCB0c2luNF9jb25maWdbNl0gPSB7CisJCQkzMDcyIC8gNjQsIDMwNzIgLyA2NCwgMCwgMzA3MiAvIDY0LCAzMDcyIC8gNjQsIDB9OworCQl1OCBkZWZhdWx0X2NvbmZpZ1s2XSA9IHsKKwkJCTQwOTYgLyA2NCwgNDA5NiAvIDY0LCAwLCAyMDQ4IC8gNjQsIDIwNDggLyA2NCwgMH07CisJCXU4ICpiY29uZiA9IGRlZmF1bHRfY29uZmlnOworCisJCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVszXSA9PSBOR0VORV9JT19UU0lOKQorCQkJYmNvbmYgPSB0c2luNF9jb25maWc7CisJCWRwcmludGsoS0VSTl9ERUJVRyBERVZJQ0VfTkFNRSAiOiBGVyAxNyBidWZmZXIgY29uZmlnXG4iKTsKKwkJc3RhdCA9IG5nZW5lX2NvbW1hbmRfY29uZmlnX2ZyZWVfYnVmKGRldiwgYmNvbmYpOworCX0gZWxzZSB7CisJCWludCBiY29uZiA9IEJVRkZFUl9DT05GSUdfNDQyMjsKKwkJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzNdID09IE5HRU5FX0lPX1RTSU4pCisJCQliY29uZiA9IEJVRkZFUl9DT05GSUdfMzMzMzsKKwkJc3RhdCA9IG5nZW5lX2NvbW1hbmRfY29uZmlnX2J1ZihkZXYsIGJjb25mKTsKKwl9CisJcmV0dXJuIHN0YXQ7CitmYWlsOgorCW5nd3JpdGVsKDAsIE5HRU5FX0lOVF9FTkFCTEUpOworCWZyZWVfaXJxKGRldi0+cGNpX2Rldi0+aXJxLCBkZXYpOworCXJldHVybiBzdGF0OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTd2l0Y2ggY29udHJvbCAoSTJDIGdhdGVzLCBldGMuKSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVtb2QvdHVuZXIgYXR0YWNobWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB0dW5lcl9hdHRhY2hfc3R2NjExMChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IChzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPmZlX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCXN0cnVjdCBzdHY2MTEweF9jb25maWcgKnR1bmVyY29uZiA9IChzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnICopCisJCWNoYW4tPmRldi0+Y2FyZF9pbmZvLT50dW5lcl9jb25maWdbY2hhbi0+bnVtYmVyXTsKKwlzdHJ1Y3Qgc3R2NjExMHhfZGV2Y3RsICpjdGw7CisKKwljdGwgPSBkdmJfYXR0YWNoKHN0djYxMTB4X2F0dGFjaCwgY2hhbi0+ZmUsIHR1bmVyY29uZiwKKwkJCSAmY2hhbi0+aTJjX2FkYXB0ZXIpOworCWlmIChjdGwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIJREVWSUNFX05BTUUgIjogTm8gU1RWNjExMFggZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZmVjb25mLT50dW5lcl9pbml0ICAgICAgICAgID0gY3RsLT50dW5lcl9pbml0OworCWZlY29uZi0+dHVuZXJfc2V0X21vZGUgICAgICA9IGN0bC0+dHVuZXJfc2V0X21vZGU7CisJZmVjb25mLT50dW5lcl9zZXRfZnJlcXVlbmN5ID0gY3RsLT50dW5lcl9zZXRfZnJlcXVlbmN5OworCWZlY29uZi0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSA9IGN0bC0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeTsKKwlmZWNvbmYtPnR1bmVyX3NldF9iYW5kd2lkdGggPSBjdGwtPnR1bmVyX3NldF9iYW5kd2lkdGg7CisJZmVjb25mLT50dW5lcl9nZXRfYmFuZHdpZHRoID0gY3RsLT50dW5lcl9nZXRfYmFuZHdpZHRoOworCWZlY29uZi0+dHVuZXJfc2V0X2JiZ2FpbiAgICA9IGN0bC0+dHVuZXJfc2V0X2JiZ2FpbjsKKwlmZWNvbmYtPnR1bmVyX2dldF9iYmdhaW4gICAgPSBjdGwtPnR1bmVyX2dldF9iYmdhaW47CisJZmVjb25mLT50dW5lcl9zZXRfcmVmY2xrICAgID0gY3RsLT50dW5lcl9zZXRfcmVmY2xrOworCWZlY29uZi0+dHVuZXJfZ2V0X3N0YXR1cyAgICA9IGN0bC0+dHVuZXJfZ2V0X3N0YXR1czsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZGVtb2RfYXR0YWNoX3N0djA5MDAoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IHN0djA5MHhfY29uZmlnICpmZWNvbmYgPSAoc3RydWN0IHN0djA5MHhfY29uZmlnICopCisJCWNoYW4tPmRldi0+Y2FyZF9pbmZvLT5mZV9jb25maWdbY2hhbi0+bnVtYmVyXTsKKworCWNoYW4tPmZlID0gZHZiX2F0dGFjaChzdHYwOTB4X2F0dGFjaCwKKwkJCWZlY29uZiwKKwkJCSZjaGFuLT5pMmNfYWRhcHRlciwKKwkJCWNoYW4tPm51bWJlciA9PSAwID8gU1RWMDkweF9ERU1PRFVMQVRPUl8wIDoKKwkJCQkJICAgIFNUVjA5MHhfREVNT0RVTEFUT1JfMSk7CisJaWYgKGNoYW4tPmZlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCURFVklDRV9OQU1FICI6IE5vIFNUVjA5MDAgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFkdmJfYXR0YWNoKGxuYmgyNF9hdHRhY2gsIGNoYW4tPmZlLCAmY2hhbi0+aTJjX2FkYXB0ZXIsIDAsCisJCQkwLCBjaGFuLT5kZXYtPmNhcmRfaW5mby0+bG5iW2NoYW4tPm51bWJlcl0pKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBObyBMTkJIMjQgZm91bmQhXG4iKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChjaGFuLT5mZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY2hhbm5lbChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZjaGFuLT5kZW11eDsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAqbmkgPSBkZXYtPmNhcmRfaW5mbzsKKwlpbnQgaW8gPSBuaS0+aW9fdHlwZVtjaGFuLT5udW1iZXJdOworCisjaWZkZWYgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKwlpZiAoY2hhbi0+cnVubmluZykKKwkJc2V0X3RyYW5zZmVyKGNoYW4sIDApOworI2VuZGlmCisKKwl0YXNrbGV0X2tpbGwoJmNoYW4tPmRlbXV4X3Rhc2tsZXQpOworCisJaWYgKGlvICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJaWYgKGNoYW4tPmZlKSB7CisJCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChjaGFuLT5mZSk7CisJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGNoYW4tPmZlKTsKKwkJCWNoYW4tPmZlID0gMDsKKwkJfQorCQlkdmJkZW11eC0+ZG14LmNsb3NlKCZkdmJkZW11eC0+ZG14KTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZjaGFuLT5od19mcm9udGVuZCk7CisJCWR2YmRlbXV4LT5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LAorCQkJCQkgICAgICAmY2hhbi0+bWVtX2Zyb250ZW5kKTsKKwkJZHZiX2RteGRldl9yZWxlYXNlKCZjaGFuLT5kbXhkZXYpOworCQlkdmJfZG14X3JlbGVhc2UoJmNoYW4tPmRlbXV4KTsKKworCQlpZiAoY2hhbi0+bnVtYmVyID09IDAgfHwgIW9uZV9hZGFwdGVyKQorCQkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZGV2LT5hZGFwdGVyW2NoYW4tPm51bWJlcl0pOworCX0KK30KKworc3RhdGljIGludCBpbml0X2NoYW5uZWwoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJaW50IHJldCA9IDAsIG5yID0gY2hhbi0+bnVtYmVyOworCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmY2hhbi0+ZGVtdXg7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IG5nZW5lX2luZm8gKm5pID0gZGV2LT5jYXJkX2luZm87CisJaW50IGlvID0gbmktPmlvX3R5cGVbbnJdOworCisJdGFza2xldF9pbml0KCZjaGFuLT5kZW11eF90YXNrbGV0LCBkZW11eF90YXNrbGV0LCAodW5zaWduZWQgbG9uZyljaGFuKTsKKwljaGFuLT51c2VycyA9IDA7CisJY2hhbi0+dHlwZSA9IGlvOworCWNoYW4tPm1vZGUgPSBjaGFuLT50eXBlOwkvKiBmb3Igbm93IG9ubHkgb25lIG1vZGUgKi8KKworCWlmIChpbyAmIChOR0VORV9JT19UU0lOIHwgTkdFTkVfSU9fVFNPVVQpKSB7CisJCWlmIChuciA+PSBTVFJFQU1fQVVESU9JTjEpCisJCQljaGFuLT5EYXRhRm9ybWF0RmxhZ3MgPSBERl9TV0FQMzI7CisJCWlmIChuciA9PSAwIHx8ICFvbmVfYWRhcHRlcikgeworCQkJYWRhcHRlciA9ICZkZXYtPmFkYXB0ZXJbbnJdOworCQkJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoYWRhcHRlciwgIm5HZW5lIiwKKwkJCQkJCSAgIFRISVNfTU9EVUxFLAorCQkJCQkJICAgJmNoYW4tPmRldi0+cGNpX2Rldi0+ZGV2LAorCQkJCQkJICAgYWRhcHRlcl9ucik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgeworCQkJYWRhcHRlciA9ICZkZXYtPmFkYXB0ZXJbMF07CisJCX0KKworCQlyZXQgPSBteV9kdmJfZG14X3RzX2NhcmRfaW5pdChkdmJkZW11eCwgIlNXIGRlbXV4IiwKKwkJCQkJICAgICAgbmdlbmVfc3RhcnRfZmVlZCwKKwkJCQkJICAgICAgbmdlbmVfc3RvcF9mZWVkLCBjaGFuKTsKKwkJcmV0ID0gbXlfZHZiX2RteGRldl90c19jYXJkX2luaXQoJmNoYW4tPmRteGRldiwgJmNoYW4tPmRlbXV4LAorCQkJCQkJICZjaGFuLT5od19mcm9udGVuZCwKKwkJCQkJCSAmY2hhbi0+bWVtX2Zyb250ZW5kLCBhZGFwdGVyKTsKKwl9CisKKwlpZiAoaW8gJiBOR0VORV9JT19UU0lOKSB7CisJCWNoYW4tPmZlID0gTlVMTDsKKwkJaWYgKG5pLT5kZW1vZF9hdHRhY2hbbnJdKQorCQkJbmktPmRlbW9kX2F0dGFjaFtucl0oY2hhbik7CisJCWlmIChjaGFuLT5mZSkgeworCQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwdGVyLCBjaGFuLT5mZSkgPCAwKSB7CisJCQkJaWYgKGNoYW4tPmZlLT5vcHMucmVsZWFzZSkKKwkJCQkJY2hhbi0+ZmUtPm9wcy5yZWxlYXNlKGNoYW4tPmZlKTsKKwkJCQljaGFuLT5mZSA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGNoYW4tPmZlICYmIG5pLT50dW5lcl9hdHRhY2hbbnJdKQorCQkJaWYgKG5pLT50dW5lcl9hdHRhY2hbbnJdIChjaGFuKSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUKKwkJCQkgICAgICAgIjogVHVuZXIgYXR0YWNoIGZhaWxlZCBvbiBjaGFubmVsICVkIVxuIiwKKwkJCQkgICAgICAgbnIpOworCQkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbHMoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWlmIChpbml0X2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtpXSkgPCAwKSB7CisJCQlmb3IgKGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pCisJCQkJcmVsZWFzZV9jaGFubmVsKCZkZXYtPmNoYW5uZWxbal0pOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRldmljZSBwcm9iZS9yZW1vdmUgY2FsbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZ2VuZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJdGFza2xldF9raWxsKCZkZXYtPmV2ZW50X3Rhc2tsZXQpOworCWZvciAoaSA9IE1BWF9TVFJFQU0gLSAxOyBpID49IDA7IGktLSkKKwkJcmVsZWFzZV9jaGFubmVsKCZkZXYtPmNoYW5uZWxbaV0pOworCW5nZW5lX3N0b3AoZGV2KTsKKwluZ2VuZV9yZWxlYXNlX2J1ZmZlcnMoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgMCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZ2VuZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBuZ2VuZSAqZGV2OworCWludCBzdGF0ID0gMDsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IG5nZW5lKSk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXN0YXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwwOworCX0KKwltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IG5nZW5lKSk7CisKKwlkZXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCWRldi0+Y2FyZF9pbmZvID0gKHN0cnVjdCBuZ2VuZV9pbmZvICopaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogRm91bmQgJXNcbiIsIGRldi0+Y2FyZF9pbmZvLT5uYW1lKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBkZXYpOworCisJLyogQWxsb2MgYnVmZmVycyBhbmQgc3RhcnQgbkdlbmUgKi8KKwlzdGF0ID0gbmdlbmVfZ2V0X2J1ZmZlcnMoZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDE7CisJc3RhdCA9IG5nZW5lX3N0YXJ0KGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWwxOworCisJZGV2LT5pMmNfY3VycmVudF9idXMgPSAtMTsKKworCS8qIFJlZ2lzdGVyIERWQiBhZGFwdGVycyBhbmQgZGV2aWNlcyBmb3IgYm90aCBjaGFubmVscyAqLworCWlmIChpbml0X2NoYW5uZWxzKGRldikgPCAwKQorCQlnb3RvIGZhaWwyOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCW5nZW5lX3N0b3AoZGV2KTsKK2ZhaWwxOgorCW5nZW5lX3JlbGVhc2VfYnVmZmVycyhkZXYpOworZmFpbDA6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCAwKTsKKwlyZXR1cm4gc3RhdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDYXJkIGNvbmZpZ3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHN0djA5MHhfY29uZmlnIGZlX2NpbmVTMiA9IHsKKwkuZGV2aWNlICAgICAgICAgPSBTVFYwOTAwLAorCS5kZW1vZF9tb2RlICAgICA9IFNUVjA5MHhfRFVBTCwKKwkuY2xrX21vZGUgICAgICAgPSBTVFYwOTB4X0NMS19FWFQsCisKKwkueHRhbCAgICAgICAgICAgPSAyNzAwMDAwMCwKKwkuYWRkcmVzcyAgICAgICAgPSAweDY4LAorCisJLnRzMV9tb2RlICAgICAgID0gU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRCwKKwkudHMyX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCisJLnJlcGVhdGVyX2xldmVsID0gU1RWMDkweF9SUFRMRVZFTF8xNiwKKworCS5hZGMxX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKwkuYWRjMl9yYW5nZQk9IFNUVjA5MHhfQURDXzFWcHAsCisKKwkuZGlzZXFjX2VudmVsb3BlX21vZGUgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEweF9jb25maWcgdHVuZXJfY2luZVMyXzAgPSB7CisJLmFkZHIJPSAweDYwLAorCS5yZWZjbGsJPSAyNzAwMDAwMCwKKwkuY2xrX2RpdiA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dW5lcl9jaW5lUzJfMSA9IHsKKwkuYWRkcgk9IDB4NjMsCisJLnJlZmNsawk9IDI3MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmdlbmVfaW5mbyBuZ2VuZV9pbmZvX2NpbmVTMiA9IHsKKwkudHlwZQkJPSBOR0VORV9TSURFV0lOREVSLAorCS5uYW1lCQk9ICJMaW51eDRNZWRpYSBjaW5lUzIgRFZCLVMyIFR3aW4gVHVuZXIiLAorCS5pb190eXBlCT0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU59LAorCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwfSwKKwkudHVuZXJfYXR0YWNoCT0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLmZlX2NvbmZpZwk9IHsmZmVfY2luZVMyLCAmZmVfY2luZVMyfSwKKwkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xfSwKKwkubG5iCQk9IHsweDBiLCAweDA4fSwKKwkudHNmCQk9IHszLCAzfSwKKwkuZndfdmVyc2lvbgk9IDE1LAorfTsKKworc3RhdGljIHN0cnVjdCBuZ2VuZV9pbmZvIG5nZW5lX2luZm9fc2F0aXhzMiA9IHsKKwkudHlwZQkJPSBOR0VORV9TSURFV0lOREVSLAorCS5uYW1lCQk9ICJNeXN0aXF1ZSBTYVRpWC1TMiBEdWFsIiwKKwkuaW9fdHlwZQk9IHtOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOfSwKKwkuZGVtb2RfYXR0YWNoCT0ge2RlbW9kX2F0dGFjaF9zdHYwOTAwLCBkZW1vZF9hdHRhY2hfc3R2MDkwMH0sCisJLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTB9LAorCS5mZV9jb25maWcJPSB7JmZlX2NpbmVTMiwgJmZlX2NpbmVTMn0sCisJLnR1bmVyX2NvbmZpZwk9IHsmdHVuZXJfY2luZVMyXzAsICZ0dW5lcl9jaW5lUzJfMX0sCisJLmxuYgkJPSB7MHgwYiwgMHgwOH0sCisJLnRzZgkJPSB7MywgM30sCisJLmZ3X3ZlcnNpb24JPSAxNSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQQ0kgU3Vic3lzdGVtIElEICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE5HRU5FX0lEKF9zdWJ2ZW5kLCBfc3ViZGV2LCBfZHJpdmVyZGF0YSkgeyBcCisJLnZlbmRvciA9IE5HRU5FX1ZJRCwgLmRldmljZSA9IE5HRU5FX1BJRCwgXAorCS5zdWJ2ZW5kb3IgPSBfc3VidmVuZCwgLnN1YmRldmljZSA9IF9zdWJkZXYsIFwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJl9kcml2ZXJkYXRhIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2VuZV9pZF90YmxbXSBfX2RldmluaXRkYXRhID0geworCU5HRU5FX0lEKDB4MThjMywgMHhhYmMzLCBuZ2VuZV9pbmZvX2NpbmVTMiksCisJTkdFTkVfSUQoMHgxOGMzLCAweGFiYzQsIG5nZW5lX2luZm9fY2luZVMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4ZGIwMSwgbmdlbmVfaW5mb19zYXRpeHMyKSwKKwl7MH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmdlbmVfaWRfdGJsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0L0V4aXQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpCit7CisJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IFBDSSBlcnJvclxuIik7CisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX2Zyb3plbikKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9saW5rX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsaW5rIHJlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgbmdlbmVfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogc2xvdCByZXNldFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5nZW5lX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogcmVzdW1lXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbmdlbmVfZXJyb3JzID0geworCS5lcnJvcl9kZXRlY3RlZCA9IG5nZW5lX2Vycm9yX2RldGVjdGVkLAorCS5saW5rX3Jlc2V0ID0gbmdlbmVfbGlua19yZXNldCwKKwkuc2xvdF9yZXNldCA9IG5nZW5lX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IG5nZW5lX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2VuZV9wY2lfZHJpdmVyID0geworCS5uYW1lICAgICAgICA9ICJuZ2VuZSIsCisJLmlkX3RhYmxlICAgID0gbmdlbmVfaWRfdGJsLAorCS5wcm9iZSAgICAgICA9IG5nZW5lX3Byb2JlLAorCS5yZW1vdmUgICAgICA9IF9fZGV2ZXhpdF9wKG5nZW5lX3JlbW92ZSksCisJLmVycl9oYW5kbGVyID0gJm5nZW5lX2Vycm9ycywKK307CisKK3N0YXRpYyBfX2luaXQgaW50IG1vZHVsZV9pbml0X25nZW5lKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAibkdlbmUgUENJRSBicmlkZ2UgZHJpdmVyLCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hc1xuIik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5nZW5lX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbW9kdWxlX2V4aXRfbmdlbmUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5nZW5lX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtb2R1bGVfaW5pdF9uZ2VuZSk7Cittb2R1bGVfZXhpdChtb2R1bGVfZXhpdF9uZ2VuZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigibkdlbmUiKTsKK01PRFVMRV9BVVRIT1IoIk1pY3JvbmFzLCBSYWxwaCBNZXR6bGVyLCBNYW5mcmVkIFZvZWxrZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWIyOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUuaApAQCAtMCwwICsxLDg1OSBAQAorLyoKKyAqIG5nZW5lLmg6IG5HZW5lIFBDSWUgYnJpZGdlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IE1pY3JvbmFzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBvbmx5LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqIE9yLCBwb2ludCB5b3VyIGJyb3dzZXIgdG8gaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2lmbmRlZiBfTkdFTkVfSF8KKyNkZWZpbmUgX05HRU5FX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworI2luY2x1ZGUgImRteGRldi5oIgorI2luY2x1ZGUgImR2YmRldi5oIgorI2luY2x1ZGUgImR2Yl9kZW11eC5oIgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yl9yaW5nYnVmZmVyLmgiCisKKyNkZWZpbmUgTkdFTkVfVklEICAgICAgIDB4MThjMworI2RlZmluZSBOR0VORV9QSUQgICAgICAgMHgwNzIwCisKKyNpZm5kZWYgVklERU9fQ0FQX1ZDMQorI2RlZmluZSBWSURFT19DQVBfQVZDICAgMTI4CisjZGVmaW5lIFZJREVPX0NBUF9IMjY0ICAxMjgKKyNkZWZpbmUgVklERU9fQ0FQX1ZDMSAgIDI1NgorI2RlZmluZSBWSURFT19DQVBfV01WOSAgMjU2CisjZGVmaW5lIFZJREVPX0NBUF9NUEVHNCA1MTIKKyNlbmRpZgorCitlbnVtIFNUUkVBTSB7CisJU1RSRUFNX1ZJREVPSU4xID0gMCwgICAgICAgIC8qIElUVTY1NiBvciBUUyBJbnB1dCAqLworCVNUUkVBTV9WSURFT0lOMiwKKwlTVFJFQU1fQVVESU9JTjEsICAgICAgICAgICAgLyogSTJTIG9yIFNQSSBJbnB1dCAqLworCVNUUkVBTV9BVURJT0lOMiwKKwlTVFJFQU1fQVVESU9PVVQsCisJTUFYX1NUUkVBTQorfTsKKworZW51bSBTTU9ERV9CSVRTIHsKKwlTTU9ERV9BVURJT19TUERJRiA9IDB4MjAsCisJU01PREVfQVZTWU5DID0gMHgxMCwKKwlTTU9ERV9UUkFOU1BPUlRfU1RSRUFNID0gMHgwOCwKKwlTTU9ERV9BVURJT19DQVBUVVJFID0gMHgwNCwKKwlTTU9ERV9WQklfQ0FQVFVSRSA9IDB4MDIsCisJU01PREVfVklERU9fQ0FQVFVSRSA9IDB4MDEKK307CisKK2VudW0gU1RSRUFNX0ZMQUdfQklUUyB7CisJU0ZMQUdfQ0hST01BX0ZPUk1BVF8yQ09NUCAgPSAweDAxLCAvKiBDaHJvbWEgRm9ybWF0IDogMidzIGNvbXBsZW1lbnQgKi8KKwlTRkxBR19DSFJPTUFfRk9STUFUX09GRlNFVCA9IDB4MDAsIC8qIENocm9tYSBGb3JtYXQgOiBCaW5hcnkgb2Zmc2V0ICovCisJU0ZMQUdfT1JERVJfTFVNQV9DSFJPTUEgICAgPSAweDAyLCAvKiBCeXRlIG9yZGVyOiBZLENiLFksQ3IgKi8KKwlTRkxBR19PUkRFUl9DSFJPTUFfTFVNQSAgICA9IDB4MDAsIC8qIEJ5dGUgb3JkZXI6IENiLFksQ3IsWSAqLworCVNGTEFHX0NPTE9SQkFSICAgICAgICAgICAgID0gMHgwNCwgLyogU2VsZWN0IGNvbG9yYmFyICovCit9OworCisjZGVmaW5lIFBST0dSQU1fUk9NICAgICAweDAwMDAKKyNkZWZpbmUgUFJPR1JBTV9TUkFNICAgIDB4MTAwMAorI2RlZmluZSBQRVJJUEhFUkFMUzAgICAgMHg4MDAwCisjZGVmaW5lIFBFUklQSEVSQUxTMSAgICAweDkwMDAKKyNkZWZpbmUgU0hBUkVEX0JVRkZFUiAgIDB4QzAwMAorCisjZGVmaW5lIEhPU1RfVE9fTkdFTkUgICAgKFNIQVJFRF9CVUZGRVIrMHgwMDAwKQorI2RlZmluZSBOR0VORV9UT19IT1NUICAgIChTSEFSRURfQlVGRkVSKzB4MDEwMCkKKyNkZWZpbmUgTkdFTkVfQ09NTUFORCAgICAoU0hBUkVEX0JVRkZFUisweDAyMDApCisjZGVmaW5lIE5HRU5FX0NPTU1BTkRfSEkgKFNIQVJFRF9CVUZGRVIrMHgwMjA0KQorI2RlZmluZSBOR0VORV9TVEFUVVMgICAgIChTSEFSRURfQlVGRkVSKzB4MDIwOCkKKyNkZWZpbmUgTkdFTkVfU1RBVFVTX0hJICAoU0hBUkVEX0JVRkZFUisweDAyMEMpCisjZGVmaW5lIE5HRU5FX0VWRU5UICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjEwKQorI2RlZmluZSBOR0VORV9FVkVOVF9ISSAgIChTSEFSRURfQlVGRkVSKzB4MDIxNCkKKyNkZWZpbmUgVkFSSUFCTEVTICAgICAgICAoU0hBUkVEX0JVRkZFUisweDAyMTApCisKKyNkZWZpbmUgTkdFTkVfSU5UX0NPVU5UUyAgICAgICAoU0hBUkVEX0JVRkZFUisweDAyNjApCisjZGVmaW5lIE5HRU5FX0lOVF9FTkFCTEUgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjY0KQorI2RlZmluZSBOR0VORV9WQklfTElORV9DT1VOVCAgIChTSEFSRURfQlVGRkVSKzB4MDI2OCkKKworI2RlZmluZSBCVUZGRVJfR1BfWE1JVCAgKFNIQVJFRF9CVUZGRVIrMHgwODAwKQorI2RlZmluZSBCVUZGRVJfR1BfUkVDViAgKFNIQVJFRF9CVUZGRVIrMHgwOTAwKQorI2RlZmluZSBFRVBST01fQVJFQSAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQTAwKQorCisjZGVmaW5lIFNHX1ZfSU5fMSAgICAgICAoU0hBUkVEX0JVRkZFUisweDBBODApCisjZGVmaW5lIFNHX1ZCSV8xICAgICAgICAoU0hBUkVEX0JVRkZFUisweDBCMDApCisjZGVmaW5lIFNHX0FfSU5fMSAgICAgICAoU0hBUkVEX0JVRkZFUisweDBCODApCisjZGVmaW5lIFNHX1ZfSU5fMiAgICAgICAoU0hBUkVEX0JVRkZFUisweDBDMDApCisjZGVmaW5lIFNHX1ZCSV8yICAgICAgICAoU0hBUkVEX0JVRkZFUisweDBDODApCisjZGVmaW5lIFNHX0FfSU5fMiAgICAgICAoU0hBUkVEX0JVRkZFUisweDBEMDApCisjZGVmaW5lIFNHX1ZfT1VUICAgICAgICAoU0hBUkVEX0JVRkZFUisweDBEODApCisjZGVmaW5lIFNHX0FfT1VUMiAgICAgICAoU0hBUkVEX0JVRkZFUisweDBFMDApCisKKyNkZWZpbmUgREFUQV9BX0lOXzEgICAgIChTSEFSRURfQlVGRkVSKzB4MEU4MCkKKyNkZWZpbmUgREFUQV9BX0lOXzIgICAgIChTSEFSRURfQlVGRkVSKzB4MEYwMCkKKyNkZWZpbmUgREFUQV9BX09VVCAgICAgIChTSEFSRURfQlVGRkVSKzB4MEY4MCkKKyNkZWZpbmUgREFUQV9WX0lOXzEgICAgIChTSEFSRURfQlVGRkVSKzB4MTAwMCkKKyNkZWZpbmUgREFUQV9WX0lOXzIgICAgIChTSEFSRURfQlVGRkVSKzB4MjAwMCkKKyNkZWZpbmUgREFUQV9WX09VVCAgICAgIChTSEFSRURfQlVGRkVSKzB4MzAwMCkKKworI2RlZmluZSBEQVRBX0ZJRk9fQVJFQSAgKFNIQVJFRF9CVUZGRVIrMHgxMDAwKQorCisjZGVmaW5lIFRJTUVTVEFNUFMgICAgICAweEEwMDAKKyNkZWZpbmUgU0NSQVRDSFBBRCAgICAgIDB4QTA4MAorI2RlZmluZSBGT1JDRV9JTlQgICAgICAgMHhBMDg4CisjZGVmaW5lIEZPUkNFX05NSSAgICAgICAweEEwOTAKKyNkZWZpbmUgSU5UX1NUQVRVUyAgICAgIDB4QTBBMAorCisjZGVmaW5lIERFVl9WRVIgICAgICAgICAweDkwMDQKKworI2RlZmluZSBGV19ERUJVR19ERUZBVUxUIChQUk9HUkFNX1NSQU0rMHgwMEZGKQorCitzdHJ1Y3QgU0dfQUREUiB7CisJdTY0IHN0YXJ0OworCXU2NCBjdXJyOworCXUxNiBjdXJyX3B0cjsKKwl1MTYgZWxlbWVudHM7CisJdTMyIHBhZFszXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IFNIQVJFRF9NRU1PUlkgeworCS8qIEMwMDAgKi8KKwl1MzIgSG9zdFRvTmdlbmVbNjRdOworCisJLyogQzEwMCAqLworCXUzMiBOZ2VuZVRvSG9zdFs2NF07CisKKwkvKiBDMjAwICovCisJdTY0IE5nZW5lQ29tbWFuZDsKKwl1NjQgTmdlbmVTdGF0dXM7CisJdTY0IE5nZW5lRXZlbnQ7CisKKwkvKiBDMjEwICovCisJdTggcGFkMVsweGMyNjAgLSAweGMyMThdOworCisJLyogQzI2MCAqLworCXUzMiBJbnRDb3VudHM7CisJdTMyIEludEVuYWJsZTsKKworCS8qIEMyNjggKi8KKwl1OCBwYWQyWzB4ZDAwMCAtIDB4YzI2OF07CisKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEJVRkZFUl9TVFJFQU1fUkVTVUxUUyB7CisJdTMyIENsb2NrOyAgICAgICAgICAgLyogU3RyZWFtIHRpbWUgaW4gMTAwbnMgdW5pdHMgKi8KKwl1MTYgUmVtYWluaW5nTGluZXM7ICAvKiBSZW1haW5pbmcgbGluZXMgaW4gdGhpcyBmaWVsZC4KKwkJCQkwIGZvciBjb21wbGV0ZSBmaWVsZCAqLworCXU4ICBGaWVsZENvdW50OyAgICAgIC8qIFZpZGVvIGZpZWxkIG51bWJlciAqLworCXU4ICBGbGFnczsgICAgICAgICAgIC8qIEJpdCA3ID0gRG9uZSwgQml0IDYgPSBzZWVuLCBCaXQgNSA9IG92ZXJmbG93LAorCQkJCUJpdCAwID0gRmllbGRJRCAqLworCXUxNiBCbG9ja0NvdW50OyAgICAgIC8qIEF1ZGlvIGJsb2NrIGNvdW50ICh1bnVzZWQpICovCisJdTggIFJlc2VydmVkWzJdOworCXUzMiBEVE9VcGRhdGU7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIHsKKwl1NjQgQWRkcmVzczsKKwl1MzIgTGVuZ3RoOworCXUzMiBSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEJVRkZFUl9IRUFERVIgeworCXU2NCAgICBOZXh0OworCXN0cnVjdCBCVUZGRVJfU1RSRUFNX1JFU1VMVFMgU1I7CisKKwl1MzIgICAgTnVtYmVyX29mX2VudHJpZXNfMTsKKwl1MzIgICAgUmVzZXJ2ZWQ1OworCXU2NCAgICBBZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzE7CisKKwl1MzIgICAgTnVtYmVyX29mX2VudHJpZXNfMjsKKwl1MzIgICAgUmVzZXJ2ZWQ3OworCXU2NCAgICBBZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzI7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBFVkVOVF9CVUZGRVIgeworCXUzMiAgICBUaW1lU3RhbXA7CisJdTggICAgIEdQSU9TdGF0dXM7CisJdTggICAgIFVBUlRTdGF0dXM7CisJdTggICAgIFJYQ2hhcmFjdGVyOworCXU4ICAgICBFdmVudFN0YXR1czsKKwl1MzIgICAgUmVzZXJ2ZWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qIEZpcm13YXJlIGNvbW1hbmRzLiAqLworCitlbnVtIE9QQ09ERVMgeworCUNNRF9OT1AgPSAwLAorCUNNRF9GV0xPQURfUFJFUEFSRSAgPSAweDAxLAorCUNNRF9GV0xPQURfRklOSVNIICAgPSAweDAyLAorCUNNRF9JMkNfUkVBRCAgICAgICAgPSAweDAzLAorCUNNRF9JMkNfV1JJVEUgICAgICAgPSAweDA0LAorCisJQ01EX0kyQ19XUklURV9OT1NUT1AgPSAweDA1LAorCUNNRF9JMkNfQ09OVElOVUVfV1JJVEUgPSAweDA2LAorCUNNRF9JMkNfQ09OVElOVUVfV1JJVEVfTk9TVE9QID0gMHgwNywKKworCUNNRF9ERUJVR19PVVRQVVQgICAgPSAweDA5LAorCisJQ01EX0NPTlRST0wgICAgICAgICA9IDB4MTAsCisJQ01EX0NPTkZJR1VSRV9CVUZGRVIgPSAweDExLAorCUNNRF9DT05GSUdVUkVfRlJFRV9CVUZGRVIgPSAweDEyLAorCisJQ01EX1NQSV9SRUFEICAgICAgICA9IDB4MTMsCisJQ01EX1NQSV9XUklURSAgICAgICA9IDB4MTQsCisKKwlDTURfTUVNX1JFQUQgICAgICAgID0gMHgyMCwKKwlDTURfTUVNX1dSSVRFCSAgICA9IDB4MjEsCisJQ01EX1NGUl9SRUFECSAgICA9IDB4MjIsCisJQ01EX1NGUl9XUklURQkgICAgPSAweDIzLAorCUNNRF9JUkFNX1JFQUQJICAgID0gMHgyNCwKKwlDTURfSVJBTV9XUklURQkgICAgPSAweDI1LAorCUNNRF9TRVRfR1BJT19QSU4gICAgPSAweDI2LAorCUNNRF9TRVRfR1BJT19JTlQgICAgPSAweDI3LAorCUNNRF9DT05GSUdVUkVfVUFSVCAgPSAweDI4LAorCUNNRF9XUklURV9VQVJUICAgICAgPSAweDI5LAorCU1BWF9DTUQKK307CisKK2VudW0gUkVTUE9OU0VTIHsKKwlPSyA9IDAsCisJRVJST1IgPSAxCit9OworCitzdHJ1Y3QgRldfSEVBREVSIHsKKwl1OCBPcGNvZGU7CisJdTggTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfSTJDX1dSSVRFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBEZXZpY2U7CisJdTggRGF0YVsyNTBdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfSTJDX0NPTlRJTlVFX1dSSVRFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBEYXRhWzI1MF07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19JMkNfUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGV2aWNlOworCXU4IERhdGFbMjUyXTsgICAgLyogZm9sbG93ZWQgYnkgdHdvIGJ5dGVzIG9mIHJlYWQgZGF0YSBjb3VudCAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU1BJX1dSSVRFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBNb2RlU2VsZWN0OworCXU4IERhdGFbMjUwXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NQSV9SRUFEIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBNb2RlU2VsZWN0OworCXU4IERhdGFbMjUyXTsgICAgLyogZm9sbG93ZWQgYnkgdHdvIGJ5dGVzIG9mIHJlYWQgZGF0YSBjb3VudCAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfRldMT0FEX1BSRVBBUkUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfRldMT0FEX0ZJTklTSCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTE2IEFkZHJlc3M7ICAgICAvKiBhZGRyZXNzIG9mIGZpbmFsIGJsb2NrICovCisJdTE2IExlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworLyoKKyAqIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6Ok1vZGUgYml0czoKKyAqICBCaXQgNzogTG9vcGJhY2sgUEVYaW4gdG8gUEVYb3V0IHVzaW5nIFRWT3V0IGNoYW5uZWwKKyAqICBCaXQgNjogQVZMT09QCisgKiAgQml0IDU6IEF1ZGlvIHNlbGVjdDsgMD1JMlMsIDE9U1BESUYKKyAqICBCaXQgNDogQVZTWU5DCisgKiAgQml0IDM6IEVuYWJsZSB0cmFuc3BvcnQgc3RyZWFtCisgKiAgQml0IDI6IEVuYWJsZSBhdWRpbyBjYXB0dXJlCisgKiAgQml0IDE6IEVuYWJsZSBJVFUtVmlkZW8gVkJJIGNhcHR1cmUKKyAqICBCaXQgMDogRW5hYmxlIElUVS1WaWRlbyBjYXB0dXJlCisgKgorICogTWVhbmluZyBvZiBGV19TVFJFQU1fQ09OVFJPTDo6Q29udHJvbCBiaXRzIChzZWUgVVZJMV9DVEwpCisgKiAgQml0IDc6IGNvbnRpbnVvdXMgY2FwdHVyZQorICogIEJpdCA2OiBjYXB0dXJlIG9uZSBmaWVsZAorICogIEJpdCA1OiBjYXB0dXJlIG9uZSBmcmFtZQorICogIEJpdCA0OiB1bnVzZWQKKyAqICBCaXQgMzogc3RhcnRpbmcgZmllbGQ7IDA9b2RkLCAxPWV2ZW4KKyAqICBCaXQgMjogc2FtcGxlIHNpemU7IDA9OC1iaXQsIDE9MTAtYml0CisgKiAgQml0IDE6IGRhdGEgZm9ybWF0OyAwPVVZVlksIDE9WVVZMgorICogIEJpdCAwOiByZXNldHMgYnVmZmVyIHBvaW50ZXJzCisqLworCitlbnVtIEZTQ19NT0RFX0JJVFMgeworCVNNT0RFX0xPT1BCQUNLICAgICAgICAgID0gMHg4MCwKKwlTTU9ERV9BVkxPT1AgICAgICAgICAgICA9IDB4NDAsCisJX1NNT0RFX0FVRElPX1NQRElGICAgICAgPSAweDIwLAorCV9TTU9ERV9BVlNZTkMgICAgICAgICAgID0gMHgxMCwKKwlfU01PREVfVFJBTlNQT1JUX1NUUkVBTSA9IDB4MDgsCisJX1NNT0RFX0FVRElPX0NBUFRVUkUgICAgPSAweDA0LAorCV9TTU9ERV9WQklfQ0FQVFVSRSAgICAgID0gMHgwMiwKKwlfU01PREVfVklERU9fQ0FQVFVSRSAgICA9IDB4MDEKK307CisKKworLyogTWVhbmluZyBvZiBGV19TVFJFQU1fQ09OVFJPTDo6U3RyZWFtIGJpdHM6CisgKiBCaXQgMzogQXVkaW8gc2FtcGxlIGNvdW50OiAgMCA9IHJlbGF0aXZlLCAxID0gYWJzb2x1dGUKKyAqIEJpdCAyOiBjb2xvciBiYXIgc2VsZWN0OyAxPWNvbG9yIGJhcnMsIDA9Q1YzIGRlY29kZXIKKyAqIEJpdHMgMS0wOiBzdHJlYW0gc2VsZWN0LCBVVkkxLCBVVkkyLCBUVk9VVAorICovCisKK3N0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgIFN0cmVhbTsgICAgICAgICAgICAgLyogU3RyZWFtIG51bWJlciAoVVZJMSwgVVZJMiwgVFZPVVQpICovCisJdTggICAgIENvbnRyb2w7ICAgICAgICAgICAgLyogVmFsdWUgd3JpdHRlbiB0byBVVkkxX0NUTCAqLworCXU4ICAgICBNb2RlOyAgICAgICAgICAgICAgIC8qIENvbnRyb2xzIGNsb2NrIHNvdXJjZSAqLworCXU4ICAgICBTZXR1cERhdGFMZW47CSAgIC8qIExlbmd0aCBvZiBzZXR1cCBkYXRhLCBNU0I9MSB3cml0ZQorCQkJCSAgICAgIGJhY2t3YXJkcyAqLworCXUxNiAgICBDYXB0dXJlQmxvY2tDb3VudDsgIC8qIEJsb2NrcyAoYSAyNTYgQnl0ZXMpIHRvIGNhcHR1cmUgcGVyIGJ1ZmZlcgorCQkJCSAgICAgIGZvciBUUyBhbmQgQXVkaW8gKi8KKwl1NjQgICAgQnVmZmVyX0FkZHJlc3M7CSAgIC8qIEFkZHJlc3Mgb2YgZmlyc3QgYnVmZmVyIGhlYWRlciAqLworCXUxNiAgICBCeXRlc1BlclZpZGVvTGluZTsKKwl1MTYgICAgTWF4TGluZXNQZXJGaWVsZDsKKwl1MTYgICAgTWluTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgUmVzZXJ2ZWRfMTsKKwl1MTYgICAgQnl0ZXNQZXJWQklMaW5lOworCXUxNiAgICBNYXhWQklMaW5lc1BlckZpZWxkOworCXUxNiAgICBNaW5WQklMaW5lc1BlckZpZWxkOworCXUxNiAgICBTZXR1cERhdGFBZGRyOyAgICAgIC8qIG5nZW5lIHJlbGF0aXZlIGFkZHJlc3Mgb2Ygc2V0dXAgZGF0YSAqLworCXU4ICAgICBTZXR1cERhdGFbMzJdOyAgICAgIC8qIHNldHVwIGRhdGEgKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIEFVRElPX0JMT0NLX1NJWkUgICAgMjU2CisjZGVmaW5lIFRTX0JMT0NLX1NJWkUgICAgICAgMjU2CisKK3N0cnVjdCBGV19NRU1fUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTE2ICAgYWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX01FTV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTE2ICAgYWRkcmVzczsKKwl1OCAgICBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0ZSX0lSQU1fUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgYWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NGUl9JUkFNX1dSSVRFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBhZGRyZXNzOworCXU4ICAgIGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRVRfR1BJT19QSU4geworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIHNlbGVjdDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NFVF9HUElPX0lOVCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgc2VsZWN0OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0VUX0RFQlVHTU9ERSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICBkZWJ1Z19mbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9CVUZGRVJTIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgIGNvbmZpZzsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBfQlVGRkVSX0NPTkZJR1MgeworCS8qIDRrIFVWSTEsIDRrIFVWSTIsIDJrIEFVRDEsIDJrIEFVRDIgIChzdGFuZGFyZCB1c2FnZSkgKi8KKwlCVUZGRVJfQ09ORklHXzQ0MjIgPSAwLAorCS8qIDNrIFVWSTEsIDNrIFVWSTIsIDNrIEFVRDEsIDNrIEFVRDIgICg0eCBUUyBpbnB1dCB1c2FnZSkgKi8KKwlCVUZGRVJfQ09ORklHXzMzMzMgPSAxLAorCS8qIDhrIFVWSTEsIDBrIFVWSTIsIDJrIEFVRDEsIDJrIEkyU091dCAgKEhEVFYgZGVjb2RlciB1c2FnZSkgKi8KKwlCVUZGRVJfQ09ORklHXzgwMjIgPSAyLAorCUJVRkZFUl9DT05GSUdfRlcxNyA9IDI1NSwgLyogVXNlIG5ldyBGVyAxNyBjb21tYW5kICovCit9OworCitzdHJ1Y3QgRldfQ09ORklHVVJFX0ZSRUVfQlVGRkVSUyB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICBVVkkxX0J1ZmZlckxlbmd0aDsKKwl1OCAgIFVWSTJfQnVmZmVyTGVuZ3RoOworCXU4ICAgVFZPX0J1ZmZlckxlbmd0aDsKKwl1OCAgIEFVRDFfQnVmZmVyTGVuZ3RoOworCXU4ICAgQVVEMl9CdWZmZXJMZW5ndGg7CisJdTggICBUVkFfQnVmZmVyTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfQ09ORklHVVJFX1VBUlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IFVhcnRDb250cm9sOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitlbnVtIF9VQVJUX0NPTkZJRyB7CisJX1VBUlRfQkFVRFJBVEVfMTkyMDAgPSAwLAorCV9VQVJUX0JBVURSQVRFXzk2MDAgID0gMSwKKwlfVUFSVF9CQVVEUkFURV80ODAwICA9IDIsCisJX1VBUlRfQkFVRFJBVEVfMjQwMCAgPSAzLAorCV9VQVJUX1JYX0VOQUJMRSAgICAgID0gMHg0MCwKKwlfVUFSVF9UWF9FTkFCTEUgICAgICA9IDB4ODAsCit9OworCitzdHJ1Y3QgRldfV1JJVEVfVUFSVCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGF0YVsyNTJdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisKK3N0cnVjdCBuZ2VuZV9jb21tYW5kIHsKKwl1MzIgaW5fbGVuOworCXUzMiBvdXRfbGVuOworCXVuaW9uIHsKKwkJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3WzY0XTsKKwkJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OFsyNTZdOworCQlzdHJ1Y3QgRldfSEVBREVSICAgICAgICAgICAgICAgICBoZHI7CisJCXN0cnVjdCBGV19JMkNfV1JJVEUgICAgICAgICAgICAgIEkyQ1dyaXRlOworCQlzdHJ1Y3QgRldfSTJDX0NPTlRJTlVFX1dSSVRFICAgICBJMkNDb250aW51ZVdyaXRlOworCQlzdHJ1Y3QgRldfSTJDX1JFQUQgICAgICAgICAgICAgICBJMkNSZWFkOworCQlzdHJ1Y3QgRldfU1RSRUFNX0NPTlRST0wgICAgICAgICBTdHJlYW1Db250cm9sOworCQlzdHJ1Y3QgRldfRldMT0FEX1BSRVBBUkUgICAgICAgICBGV0xvYWRQcmVwYXJlOworCQlzdHJ1Y3QgRldfRldMT0FEX0ZJTklTSCAgICAgICAgICBGV0xvYWRGaW5pc2g7CisJCXN0cnVjdCBGV19NRU1fUkVBRAkJIE1lbW9yeVJlYWQ7CisJCXN0cnVjdCBGV19NRU1fV1JJVEUJCSBNZW1vcnlXcml0ZTsKKwkJc3RydWN0IEZXX1NGUl9JUkFNX1JFQUQJCSBTZnJJcmFtUmVhZDsKKwkJc3RydWN0IEZXX1NGUl9JUkFNX1dSSVRFICAgICAgICAgU2ZySXJhbVdyaXRlOworCQlzdHJ1Y3QgRldfU1BJX1dSSVRFICAgICAgICAgICAgICBTUElXcml0ZTsKKwkJc3RydWN0IEZXX1NQSV9SRUFEICAgICAgICAgICAgICAgU1BJUmVhZDsKKwkJc3RydWN0IEZXX1NFVF9HUElPX1BJTiAgICAgICAgICAgU2V0R3Bpb1BpbjsKKwkJc3RydWN0IEZXX1NFVF9HUElPX0lOVCAgICAgICAgICAgU2V0R3Bpb0ludDsKKwkJc3RydWN0IEZXX1NFVF9ERUJVR01PREUgICAgICAgICAgU2V0RGVidWdNb2RlOworCQlzdHJ1Y3QgRldfQ09ORklHVVJFX0JVRkZFUlMgICAgICBDb25maWd1cmVCdWZmZXJzOworCQlzdHJ1Y3QgRldfQ09ORklHVVJFX0ZSRUVfQlVGRkVSUyBDb25maWd1cmVGcmVlQnVmZmVyczsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9VQVJUICAgICAgICAgQ29uZmlndXJlVWFydDsKKwkJc3RydWN0IEZXX1dSSVRFX1VBUlQgICAgICAgICAgICAgV3JpdGVVYXJ0OworCX0gY21kOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisjZGVmaW5lIE5HRU5FX0lOVEVSRkFDRV9WRVJTSU9OIDB4MTAzCisjZGVmaW5lIE1BWF9WSURFT19CVUZGRVJfU0laRSAgICg0MTc3OTIpIC8qIDI4OCoxNDQwIHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlICovCisjZGVmaW5lIE1BWF9BVURJT19CVUZGRVJfU0laRSAgICAgKDgxOTIpIC8qIEdpdmVzIHJvb20gZm9yIGFib3V0IDIzbXNlY0A0OEtIeiAqLworI2RlZmluZSBNQVhfVkJJX0JVRkZFUl9TSVpFICAgICAgKDI4NjcyKSAvKiAxMTQ0KjE4IHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlICovCisjZGVmaW5lIE1BWF9UU19CVUZGRVJfU0laRSAgICAgICAoOTgzMDQpIC8qIDUxMioxODggcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UgKi8KKyNkZWZpbmUgTUFYX0hEVFZfQlVGRkVSX1NJWkUgICAoMjA4MDc2OCkgLyogNTQxKjE5MjAqMiByb3VuZGVkIHVwIHRvIG5leHQgcGFnZQorCQkJCQkgICAgTWF4OiAoMTkyMHgxMDgwaTYwKSAqLworCisjZGVmaW5lIE9WRVJGTE9XX0JVRkZFUl9TSVpFICAgICg4MTkyKQorCisjZGVmaW5lIFJJTkdfU0laRV9WSURFTyAgICAgNAorI2RlZmluZSBSSU5HX1NJWkVfQVVESU8gICAgIDgKKyNkZWZpbmUgUklOR19TSVpFX1RTICAgICAgICA4CisKKyNkZWZpbmUgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgIDgKKworI2RlZmluZSBNQVhfRE1BX0xFTkdUSCAoKChNQVhfVklERU9fQlVGRkVSX1NJWkUgKyBNQVhfVkJJX0JVRkZFUl9TSVpFKSAqIFwKKwkJCVJJTkdfU0laRV9WSURFTyAqIDIpICsgXAorCQkJKE1BWF9BVURJT19CVUZGRVJfU0laRSAqIFJJTkdfU0laRV9BVURJTyAqIDIpICsgXAorCQkJKE1BWF9UU19CVUZGRVJfU0laRSAqIFJJTkdfU0laRV9UUyAqIDQpICsgXAorCQkJKFJJTkdfU0laRV9WSURFTyAqIFBBR0VfU0laRSAqIDIpICsgXAorCQkJKFJJTkdfU0laRV9BVURJTyAqIFBBR0VfU0laRSAqIDIpICsgXAorCQkJKFJJTkdfU0laRV9UUyAgICAqIFBBR0VfU0laRSAqIDQpICsgXAorCQkJIDggKiBQQUdFX1NJWkUgKyBPVkVSRkxPV19CVUZGRVJfU0laRSArIFBBR0VfU0laRSkKKworI2RlZmluZSBFVkVOVF9RVUVVRV9TSVpFICAgIDE2CisKKy8qIEdhdGhlcnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBzaW5nbGUgY2hhbm5lbC4gKi8KKworc3RydWN0IFNCdWZmZXJIZWFkZXIgeworCXN0cnVjdCBCVUZGRVJfSEVBREVSICAgbmdlbmVCdWZmZXI7IC8qIFBoeXNpY2FsIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAgKk5leHQ7CisJdm9pZCAgICAgICAgICAgICAgICAgICpCdWZmZXIxOworCXN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICpzY0xpc3QxOworCXZvaWQgICAgICAgICAgICAgICAgICAqQnVmZmVyMjsKKwlzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAqc2NMaXN0MjsKK307CisKKy8qIFNpemVvZiBTQnVmZmVySGVhZGVyIGFsaWduZWQgdG8gbmV4dCA2NCBCaXQgYm91bmRhcnkgKGh3IHJlc3RyaWN0aW9uKSAqLworI2RlZmluZSBTSVpFT0ZfU0J1ZmZlckhlYWRlciAoKHNpemVvZihzdHJ1Y3QgU0J1ZmZlckhlYWRlcikgKyA2MykgJiB+NjMpCisKK2VudW0gSFdTVEFURSB7CisJSFdTVEFURV9TVE9QLAorCUhXU1RBVEVfU1RBUlRVUCwKKwlIV1NUQVRFX1JVTiwKKwlIV1NUQVRFX1BBVVNFLAorfTsKKworZW51bSBLU1NUQVRFIHsKKwlLU1NUQVRFX1NUT1AsCisJS1NTVEFURV9BQ1FVSVJFLAorCUtTU1RBVEVfUEFVU0UsCisJS1NTVEFURV9SVU4sCit9OworCitzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqSGVhZDsgLyogUG9pbnRzIHRvIGZpcnN0IGJ1ZmZlciBpbiByaW5nIGJ1ZmZlcgorCQkJCSAgICAgICBzdHJ1Y3R1cmUqLworCXU2NCAgIFBBSGVhZDsgICAgICAgICAvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGZpcnN0IGJ1ZmZlciAqLworCXUzMiAgIE1lbVNpemU7ICAgICAgICAvKiBNZW1vcnkgc2l6ZSBvZiBhbGxvY2F0ZWQgcmluZyBidWZmZXJzCisJCQkJIChuZWVkZWQgZm9yIGZyZWVpbmcpICovCisJdTMyICAgTnVtQnVmZmVyczsgICAgIC8qIE51bWJlciBvZiBidWZmZXJzIGluIHRoZSByaW5nICovCisJdTMyICAgQnVmZmVyMUxlbmd0aDsgIC8qIEFsbG9jYXRlZCBsZW5ndGggb2YgQnVmZmVyIDEgKi8KKwl1MzIgICBCdWZmZXIyTGVuZ3RoOyAgLyogQWxsb2NhdGVkIGxlbmd0aCBvZiBCdWZmZXIgMiAqLworCXZvaWQgKlNDTGlzdE1lbTsgICAgICAvKiBNZW1vcnkgdG8gaG9sZCBzY2F0dGVyIGdhdGhlciBsaXN0cyBmb3IgdGhpcworCQkJCSByaW5nICovCisJdTY0ICAgUEFTQ0xpc3RNZW07ICAgIC8qIFBoeXNpY2FsIGFkZHJlc3MgIC4uICovCisJdTMyICAgU0NMaXN0TWVtU2l6ZTsgIC8qIFNpemUgb2YgdGhpcyBtZW1vcnkgKi8KK307CisKK2VudW0gU1RSRUFNTU9ERUZMQUdTIHsKKwlTdHJlYW1Nb2RlX05PTkUgICA9IDAsIC8qIFN0cmVhbSBub3QgdXNlZCAqLworCVN0cmVhbU1vZGVfQU5BTE9HID0gMSwgLyogQW5hbG9nOiBTdHJlYW0gMCwxID0gVmlkZW8sIDIsMyA9IEF1ZGlvICovCisJU3RyZWFtTW9kZV9UU0lOICAgPSAyLCAvKiBUcmFuc3BvcnQgc3RyZWFtIGlucHV0IChhbGwpICovCisJU3RyZWFtTW9kZV9IRFRWICAgPSA0LCAvKiBIRFRWOiBNYXhpbXVtIDE5MjB4MTA4MHAzMCwxOTIweDEwODBpNjAKKwkJCQkgIChvbmx5IHN0cmVhbSAwKSAqLworCVN0cmVhbU1vZGVfVFNPVVQgID0gOCwgLyogVHJhbnNwb3J0IHN0cmVhbSBvdXRwdXQgKG9ubHkgc3RyZWFtIDMpICovCit9OworCisKK2VudW0gQnVmZmVyRXhjaGFuZ2VGbGFncyB7CisJQkVGX0VWRU5fRklFTEQgICA9IDB4MDAwMDAwMDEsCisJQkVGX0NPTlRJTlVBVElPTiA9IDB4MDAwMDAwMDIsCisJQkVGX01PUkVfREFUQSAgICA9IDB4MDAwMDAwMDQsCisJQkVGX09WRVJGTE9XICAgICA9IDB4MDAwMDAwMDgsCisJREZfU1dBUDMyICAgICAgICA9IDB4MDAwMTAwMDAsCit9OworCit0eXBlZGVmIHZvaWQgKihJQnVmZmVyRXhjaGFuZ2UpKHZvaWQgKiwgdm9pZCAqLCB1MzIsIHUzMiwgdTMyKTsKKworc3RydWN0IE1JQ0lfU1RSRUFNSU5GTyB7CisJSUJ1ZmZlckV4Y2hhbmdlICAgICpwRXhjaGFuZ2U7CisJSUJ1ZmZlckV4Y2hhbmdlICAgICpwRXhjaGFuZ2VWQkk7ICAgICAvKiBTZWNvbmRhcnkgKFZCSSwgYW5jaWxsYXJ5KSAqLworCXU4ICBTdHJlYW07CisJdTggIEZsYWdzOworCXU4ICBNb2RlOworCXU4ICBSZXNlcnZlZDsKKwl1MTYgbkxpbmVzVmlkZW87CisJdTE2IG5CeXRlc1BlckxpbmVWaWRlbzsKKwl1MTYgbkxpbmVzVkJJOworCXUxNiBuQnl0ZXNQZXJMaW5lVkJJOworCXUzMiBDYXB0dXJlTGVuZ3RoOyAgICAvKiBVc2VkIGZvciBhdWRpbyBhbmQgdHJhbnNwb3J0IHN0cmVhbSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTVFJVQ1RTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzb3VuZCBoYXJkd2FyZSBkZWZpbml0aW9uICovCisjZGVmaW5lIE1JWEVSX0FERFJfVFZUVU5FUiAgICAgIDAKKyNkZWZpbmUgTUlYRVJfQUREUl9MQVNUICAgICAgICAgMAorCitzdHJ1Y3QgbmdlbmVfY2hhbm5lbDsKKworLypzdHJ1Y3Qgc291bmQgY2hpcCovCisKK3N0cnVjdCBteWNoaXAgeworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJdW5zaWduZWQgbG9uZyBwb3J0OworCWludCBpcnE7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgbWl4ZXJfdm9sdW1lW01JWEVSX0FERFJfTEFTVCArIDFdWzJdOworCWludCBjYXB0dXJlX3NvdXJjZVtNSVhFUl9BRERSX0xBU1QgKyAxXVsyXTsKK307CisKKyNpZmRlZiBOR0VORV9WNEwKK3N0cnVjdCBuZ2VuZV9vdmVybGF5IHsKKwlpbnQgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgIHc7CisJZW51bSB2NGwyX2ZpZWxkICAgICAgICBmaWVsZDsKKwlzdHJ1Y3QgdjRsMl9jbGlwICAgICAgICpjbGlwczsKKwlpbnQgICAgICAgICAgICAgICAgICAgIG5jbGlwczsKKwlpbnQgICAgICAgICAgICAgICAgICAgIHNldHVwX29rOworfTsKKworc3RydWN0IG5nZW5lX3R2bm9ybSB7CisJaW50ICAgdjRsMl9pZDsKKwljaGFyICAqbmFtZTsKKwl1MTYgICBzd2lkdGgsIHNoZWlnaHQ7IC8qIHNjYWxlZCBzdGFuZGFyZCB3aWR0aCwgaGVpZ2h0ICovCisJaW50ICAgdHVuZXJfbm9ybTsKKwlpbnQgICBzb3VuZHN0ZDsKK307CisKK3N0cnVjdCBuZ2VuZV92b3BlbiB7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgICAgICAqY2g7CisJZW51bSB2NGwyX3ByaW9yaXR5ICAgICAgICAgcHJpbzsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGg7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgdmJ1Zl9xOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZiaTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBmb3VyY2M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcGljeGNvdW50OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOworCWNvbnN0IHN0cnVjdCBuZ2VuZV9mb3JtYXQgKmZtdDsKKworCWNvbnN0IHN0cnVjdCBuZ2VuZV9mb3JtYXQgKm92Zm10OworCXN0cnVjdCBuZ2VuZV9vdmVybGF5ICAgICAgIG92OworfTsKKyNlbmRpZgorCitzdHJ1Y3QgbmdlbmVfY2hhbm5lbCB7CisJc3RydWN0IGRldmljZSAgICAgICAgIGRldmljZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAgaTJjX2FkYXB0ZXI7CisKKwlzdHJ1Y3QgbmdlbmUgICAgICAgICAqZGV2OworCWludCAgICAgICAgICAgICAgICAgICBudW1iZXI7CisJaW50ICAgICAgICAgICAgICAgICAgIHR5cGU7CisJaW50ICAgICAgICAgICAgICAgICAgIG1vZGU7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAqZmU7CisJc3RydWN0IGRteGRldiAgICAgICAgIGRteGRldjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgZGVtdXg7CisJc3RydWN0IGRteF9mcm9udGVuZCAgIGh3X2Zyb250ZW5kOworCXN0cnVjdCBkbXhfZnJvbnRlbmQgICBtZW1fZnJvbnRlbmQ7CisJaW50ICAgICAgICAgICAgICAgICAgIHVzZXJzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgICp2NGxfZGV2OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBkZW11eF90YXNrbGV0OworCisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKm5leHRCdWZmZXI7CisJZW51bSBLU1NUQVRFICAgICAgICAgIFN0YXRlOworCWVudW0gSFdTVEFURSAgICAgICAgICBIV1N0YXRlOworCXU4ICAgICAgICAgICAgICAgICAgICBTdHJlYW07CisJdTggICAgICAgICAgICAgICAgICAgIEZsYWdzOworCXU4ICAgICAgICAgICAgICAgICAgICBNb2RlOworCUlCdWZmZXJFeGNoYW5nZSAgICAgICpwQnVmZmVyRXhjaGFuZ2U7CisJSUJ1ZmZlckV4Y2hhbmdlICAgICAgKnBCdWZmZXJFeGNoYW5nZTI7CisKKwlzcGlubG9ja190ICAgICAgICAgICAgc3RhdGVfbG9jazsKKwl1MTYgICAgICAgICAgICAgICAgICAgbkxpbmVzOworCXUxNiAgICAgICAgICAgICAgICAgICBuQnl0ZXNQZXJMaW5lOworCXUxNiAgICAgICAgICAgICAgICAgICBuVkJJTGluZXM7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5CeXRlc1BlclZCSUxpbmU7CisJdTE2ICAgICAgICAgICAgICAgICAgIGl0dW1vZGU7CisJdTMyICAgICAgICAgICAgICAgICAgIENhcHR1cmUxTGVuZ3RoOworCXUzMiAgICAgICAgICAgICAgICAgICBDYXB0dXJlMkxlbmd0aDsKKwlzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yIFJpbmdCdWZmZXI7CisJc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciBUU1JpbmdCdWZmZXI7CisJc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciBUU0lkbGVCdWZmZXI7CisKKwl1MzIgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEZsYWdzOworCisJaW50ICAgICAgICAgICAgICAgICAgIEF1ZGlvRFRPVXBkYXRlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgQXVkaW9EVE9WYWx1ZTsKKworCWludCAoKnNldF90b25lKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGZlX3NlY190b25lX21vZGVfdCk7CisJdTggbG5iaDsKKworCS8qIHN0dWZmIGZyb20gYW5hbG9nIGRyaXZlciAqLworCisJaW50IG1pbm9yOworCXN0cnVjdCBteWNoaXAgICAgICAgICpteWNoaXA7CisJc3RydWN0IHNuZF9jYXJkICAgICAgKnNvdW5kY2FyZDsKKwl1OCAgICAgICAgICAgICAgICAgICAqZXZlbmJ1ZmZlcjsKKwl1OCAgICAgICAgICAgICAgICAgICAgZG1hX29uOworCWludCAgICAgICAgICAgICAgICAgICBzb3VuZHN0cmVhbW9uOworCWludCAgICAgICAgICAgICAgICAgICBhdWRpb211dGU7CisJaW50ICAgICAgICAgICAgICAgICAgIHNvdW5kYnVmZmlzYWxsb2NhdGVkOworCWludCAgICAgICAgICAgICAgICAgICBzbmRidWZmZmxhZzsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHVuX3JkeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgZGVjX3JkeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHVuX2RlY19yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIGxhc3RidWZmZXJmbGFnOworCisJc3RydWN0IG5nZW5lX3R2bm9ybSAgKnR2bm9ybXM7CisJaW50ICAgICAgICAgICAgICAgICAgIHR2bm9ybV9udW07CisJaW50ICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKworI2lmZGVmIE5HRU5FX1Y0TAorCWludCAgICAgICAgICAgICAgICAgICB2aWRlb3VzZXJzOworCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgcHJpbzsKKwlzdHJ1Y3QgbmdlbmVfdm9wZW4gICAgaW5pdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOworCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIGZidWY7CisJc3RydWN0IG5nZW5lX2J1ZmZlciAgKnNjcmVlbjsgICAgIC8qIG92ZXJsYXkgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgY2FwdHVyZTsgICAgLyogdmlkZW8gY2FwdHVyZSBxdWV1ZSAqLworCXNwaW5sb2NrX3Qgc19sb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgcmVzbG9jazsKKyNlbmRpZgorCisJaW50IHJ1bm5pbmc7Cit9OworCitzdHJ1Y3QgbmdlbmU7CisKK3R5cGVkZWYgdm9pZCAocnhfY2JfdCkoc3RydWN0IG5nZW5lICosIHUzMiwgdTgpOwordHlwZWRlZiB2b2lkICh0eF9jYl90KShzdHJ1Y3QgbmdlbmUgKiwgdTMyKTsKKworc3RydWN0IG5nZW5lIHsKKwlpbnQgICAgICAgICAgICAgICAgICAgbnI7CisJc3RydWN0IHBjaV9kZXYgICAgICAgKnBjaV9kZXY7CisJdW5zaWduZWQgY2hhciAgICAgICAgKmlvbWVtOworCisJLypzdHJ1Y3QgaTJjX2FkYXB0ZXIgIGkyY19hZGFwdGVyOyovCisKKwl1MzIgICAgICAgICAgICAgICAgICAgZGV2aWNlX3ZlcnNpb247CisJdTMyICAgICAgICAgICAgICAgICAgIGZ3X2ludGVyZmFjZV92ZXJzaW9uOworCXUzMiAgICAgICAgICAgICAgICAgICBpY291bnRzOworCisJdTggICAgICAgICAgICAgICAgICAgKkNtZERvbmVCeXRlOworCWludCAgICAgICAgICAgICAgICAgICBCb290RmlybXdhcmU7CisJdm9pZCAgICAgICAgICAgICAgICAgKk92ZXJmbG93QnVmZmVyOworCWRtYV9hZGRyX3QgICAgICAgICAgICBQQU92ZXJmbG93QnVmZmVyOworCXZvaWQgICAgICAgICAgICAgICAgICpGV0ludGVyZmFjZUJ1ZmZlcjsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgUEFGV0ludGVyZmFjZUJ1ZmZlcjsKKwl1OCAgICAgICAgICAgICAgICAgICAqbmdlbmV0b2hvc3Q7CisJdTggICAgICAgICAgICAgICAgICAgKmhvc3R0b25nZW5lOworCisJc3RydWN0IEVWRU5UX0JVRkZFUiAgIEV2ZW50UXVldWVbRVZFTlRfUVVFVUVfU0laRV07CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVPdmVyZmxvd0NvdW50OworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlT3ZlcmZsb3dGbGFnOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBldmVudF90YXNrbGV0OworCXN0cnVjdCBFVkVOVF9CVUZGRVIgICpFdmVudEJ1ZmZlcjsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZVdyaXRlSW5kZXg7CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVSZWFkSW5kZXg7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgY21kX3dxOworCWludCAgICAgICAgICAgICAgICAgICBjbWRfZG9uZTsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgY21kX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBzdHJlYW1fbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIHBsbF9tdXRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgaTJjX3N3aXRjaF9tdXRleDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaTJjX2N1cnJlbnRfY2hhbm5lbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaTJjX2N1cnJlbnRfYnVzOworCXNwaW5sb2NrX3QgICAgICAgICAgICBjbWRfbG9jazsKKworCXN0cnVjdCBkdmJfYWRhcHRlciAgICBhZGFwdGVyW01BWF9TVFJFQU1dOworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICBjaGFubmVsW01BWF9TVFJFQU1dOworCisJc3RydWN0IG5nZW5lX2luZm8gICAgKmNhcmRfaW5mbzsKKworCXR4X2NiX3QgICAgICAgICAgICAgICpUeEV2ZW50Tm90aWZ5OworCXJ4X2NiX3QgICAgICAgICAgICAgICpSeEV2ZW50Tm90aWZ5OworCWludCAgICAgICAgICAgICAgICAgICB0eF9idXN5OworCXdhaXRfcXVldWVfaGVhZF90ICAgICB0eF93cTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgcnhfd3E7CisjZGVmaW5lIFVBUlRfUkJVRl9MRU4gNDA5NgorCXU4ICAgICAgICAgICAgICAgICAgICB1YXJ0X3JidWZbVUFSVF9SQlVGX0xFTl07CisJaW50ICAgICAgICAgICAgICAgICAgIHVhcnRfcnAsIHVhcnRfd3A7CisKKwl1OCAgICAgICAgICAgICAgICAgICAqdHNvdXRfYnVmOworI2RlZmluZSBUU09VVF9CVUZfU0laRSAoNTEyKjE4OCo4KQorCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciB0c291dF9yYnVmOworCisJdTggICAgICAgICAgICAgICAgICAgKmFpbl9idWY7CisjZGVmaW5lIEFJTl9CVUZfU0laRSAoMTI4KjEwMjQpCisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIGFpbl9yYnVmOworCisKKwl1OCAgICAgICAgICAgICAgICAgICAqdmluX2J1ZjsKKyNkZWZpbmUgVklOX0JVRl9TSVpFICg0KjE5MjAqMTA4MCkKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgdmluX3JidWY7CisKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZXhwX3ZhbDsKKwlpbnQgcHJldl9jbWQ7Cit9OworCitzdHJ1Y3QgbmdlbmVfaW5mbyB7CisJaW50ICAgdHlwZTsKKyNkZWZpbmUgTkdFTkVfQVBQICAgICAgICAwCisjZGVmaW5lIE5HRU5FX1RFUlJBVEVDICAgMQorI2RlZmluZSBOR0VORV9TSURFV0lOREVSIDIKKyNkZWZpbmUgTkdFTkVfUkFDRVIgICAgICAzCisjZGVmaW5lIE5HRU5FX1ZJUEVSICAgICAgNAorI2RlZmluZSBOR0VORV9QWVRIT04gICAgIDUKKyNkZWZpbmUgTkdFTkVfVkJPWF9WMQkgNgorI2RlZmluZSBOR0VORV9WQk9YX1YyCSA3CisKKwlpbnQgICBmd192ZXJzaW9uOworCWNoYXIgKm5hbWU7CisKKwlpbnQgICBpb190eXBlW01BWF9TVFJFQU1dOworI2RlZmluZSBOR0VORV9JT19OT05FICAgIDAKKyNkZWZpbmUgTkdFTkVfSU9fVFYgICAgICAxCisjZGVmaW5lIE5HRU5FX0lPX0hEVFYgICAgMgorI2RlZmluZSBOR0VORV9JT19UU0lOICAgIDQKKyNkZWZpbmUgTkdFTkVfSU9fVFNPVVQgICA4CisjZGVmaW5lIE5HRU5FX0lPX0FJTiAgICAgMTYKKworCXZvaWQgKmZlX2NvbmZpZ1s0XTsKKwl2b2lkICp0dW5lcl9jb25maWdbNF07CisKKwlpbnQgKCpkZW1vZF9hdHRhY2hbNF0pKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopOworCWludCAoKnR1bmVyX2F0dGFjaFs0XSkoc3RydWN0IG5nZW5lX2NoYW5uZWwgKik7CisKKwl1OCAgICBhdmZbNF07CisJdTggICAgbXNwWzRdOworCXU4ICAgIGRlbW9kYVs0XTsKKwl1OCAgICBsbmJbNF07CisJaW50ICAgaTJjX2FjY2VzczsKKwl1OCAgICBudHNjOworCXU4ICAgIHRzZls0XTsKKwl1OCAgICBpMnNbNF07CisKKwlpbnQgKCpnYXRlX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgaW50KTsKKwlpbnQgKCpzd2l0Y2hfY3RybCkoc3RydWN0IG5nZW5lX2NoYW5uZWwgKiwgaW50LCBpbnQpOworfTsKKworI2lmZGVmIE5HRU5FX1Y0TAorc3RydWN0IG5nZW5lX2Zvcm1hdHsKKwljaGFyICpuYW1lOworCWludCAgIGZvdXJjYzsgICAgICAgICAgLyogdmlkZW80bGludXggMiAgICAgICovCisJaW50ICAgYnRmb3JtYXQ7ICAgICAgICAvKiBCVDg0OF9DT0xPUl9GTVRfKiAgKi8KKwlpbnQgICBmb3JtYXQ7CisJaW50ICAgYnRzd2FwOyAgICAgICAgICAvKiBCVDg0OF9DT0xPUl9DVExfKiAgKi8KKwlpbnQgICBkZXB0aDsgICAgICAgICAgIC8qIGJpdC9waXhlbCAgICAgICAgICAqLworCWludCAgIGZsYWdzOworCWludCAgIGhzaGlmdCwgdnNoaWZ0OyAgLyogZm9yIHBsYW5hciBtb2RlcyAgICovCisJaW50ICAgcGFsZXR0ZTsKK307CisKKyNkZWZpbmUgUkVTT1VSQ0VfT1ZFUkxBWSAgICAgICAxCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPICAgICAgICAgMgorI2RlZmluZSBSRVNPVVJDRV9WQkkgICAgICAgICAgIDQKKworc3RydWN0IG5nZW5lX2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgICAgIHZiOworCisJLyogbmdlbmUgc3BlY2lmaWMgKi8KKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpmbXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgdHZub3JtOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGJ0Zm9ybWF0OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGJ0c3dhcDsKK307CisjZW5kaWYKKworCisjZW5kaWYKKworLyogIExvY2FsV29yZHM6ICBFbmRpZgorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCmluZGV4IDEwNjdiMjIuLmNmZjc3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCkBAIC02Miw2ICs2Miw3IEBACiAJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU1dID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgV2luVFYgTWluaVN0aWNrIiwKIAkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0lTREJUX0JEQV0gPSAic21zMXh4eC1oY3ctNTV4eHgtaXNkYnQtMDIuZnciLAogCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWR2YnQtMDIuZnciLAogCQkuYm9hcmRfY2ZnLmxlZHNfcG93ZXIgPSAyNiwKIAkJLmJvYXJkX2NmZy5sZWQwID0gMjcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggY2E3NThiY2IuLjRiZmQzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTE0NTksOCArMTQ1OSwxMCBAQAogCWlmICghKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfRkFNSUxZMikpIHsKIAkJcE1zZy0+eE1zZ0hlYWRlci5tc2dUeXBlID0gTVNHX1NNU19HUElPX0NPTkZJR19SRVE7CiAJCWlmIChHZXRHcGlvUGluUGFyYW1zKFBpbk51bSwgJlRyYW5zbGF0ZWRQaW5OdW0sICZHcm91cE51bSwKLQkJCQkmZ3JvdXBDZmcpICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkmZ3JvdXBDZmcpICE9IDApIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZnJlZTsKKwkJfQogCiAJCXBNc2ctPm1zZ0RhdGFbMV0gPSBUcmFuc2xhdGVkUGluTnVtOwogCQlwTXNnLT5tc2dEYXRhWzJdID0gR3JvdXBOdW07CkBAIC0xNDkwLDYgKzE0OTIsNyBAQAogCQllbHNlCiAJCQlzbXNfZXJyKCJzbXNjb3JlX2dwaW9fY29uZmlndXJlIGVycm9yIik7CiAJfQorZnJlZToKIAlrZnJlZShidWZmZXIpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IGVlYzE4YWEuLjhlY2FkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTIxMiw2ICsyMTIsOCBAQAogI2RlZmluZSBNU0dfU01TX0RBQl9DSEFOTkVMCQkJCTYwNwogI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVRCQkJNjA4CiAjZGVmaW5lIE1TR19TTVNfR0VUX1BJRF9GSUxURVJfTElTVF9SRVMJCQk2MDkKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMJCQk2MTYKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEJCQk2MTUKICNkZWZpbmUgTVNHX1NNU19IT19QRVJfU0xJQ0VTX0lORAkJCTYzMAogI2RlZmluZSBNU0dfU01TX1NFVF9BTlRFTk5BX0NPTkZJR19SRVEJCQk2NTEKICNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVTCQkJNjUyCkBAIC0zMzksNyArMzQxLDcgQEAKIAogLyogU3RhdGlzdGljcyBpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyByZXNwb25zZSBmb3IKICAqIFNtc0hvc3RBcGlHZXRTdGF0aXN0aWNzX1JlcSAqLwotc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TIHsKK3N0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgewogCXUzMiBSZXNlcnZlZDsJCS8qIFJlc2VydmVkICovCiAKIAkvKiBDb21tb24gcGFyYW1ldGVycyAqLwpAQCAtNDI0LDYgKzQyNiw3OSBAQAogCXUzMiBSZXNlcnZlZEZpZWxkc1sxMF07CS8qIFJlc2VydmVkICovCiB9OwogCitzdHJ1Y3QgU21zTXNnU3RhdGlzdGljc0luZm9fU1QgeworCXUzMiBSZXF1ZXN0UmVzdWx0OworCisJc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCBTdGF0OworCisJLyogU3BsaXQgdGhlIGNhbGMgb2YgdGhlIFNOUiBpbiBEQUIgKi8KKwl1MzIgU2lnbmFsOyAvKiBkQiAqLworCXUzMiBOb2lzZTsgLyogZEIgKi8KKworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVCB7CisJLyogUGVyLWxheWVyIGluZm9ybWF0aW9uICovCisJdTMyIENvZGVSYXRlOyAvKiBDb2RlIFJhdGUgZnJvbSBTTVNIT1NUTElCX0NPREVfUkFURV9FVCwKKwkJICAgICAgICogMjU1IG1lYW5zIGxheWVyIGRvZXMgbm90IGV4aXN0ICovCisJdTMyIENvbnN0ZWxsYXRpb247IC8qIENvbnN0ZWxsYXRpb24gZnJvbSBTTVNIT1NUTElCX0NPTlNURUxMQVRJT05fRVQsCisJCQkgICAgKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgQkVSOyAvKiBQb3N0IFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgQkVSRXJyb3JDb3VudDsgLyogUG9zdCBWaXRlcmJpIEVycm9yIEJpdHMgQ291bnQgKi8KKwl1MzIgQkVSQml0Q291bnQ7IC8qIFBvc3QgVml0ZXJiaSBUb3RhbCBCaXRzIENvdW50ICovCisJdTMyIFByZUJFUjsgLyogUHJlIFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgVFNfUEVSOyAvKiBUcmFuc3BvcnQgc3RyZWFtIFBFUiBbJV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIEVycm9yVFNQYWNrZXRzOyAvKiBOdW1iZXIgb2YgZXJyb25lb3VzIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUb3RhbFRTUGFja2V0czsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUSUxkZXB0aEk7IC8qIFRpbWUgaW50ZXJsZWF2ZXIgZGVwdGggSSBwYXJhbWV0ZXIsCisJCQkqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBOdW1iZXJPZlNlZ21lbnRzOyAvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gbGF5ZXIgQSwKKwkJCSAgICAgICAqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBUTUNDRXJyb3JzOyAvKiBUTUNDIGVycm9ycyAqLworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19JU0RCVF9TVCB7CisJdTMyIFN0YXRpc3RpY3NUeXBlOyAvKiBFbnVtZXJhdG9yIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZQorCQkJCSogc3RydWN0dXJlLiAgVmFsdWVzIGFyZSB0aGUgc2FtZSBhcworCQkJCSogU01TSE9TVExJQl9ERVZJQ0VfTU9ERVNfRQorCQkJCSoKKwkJCQkqIFRoaXMgZmllbGQgTVVTVCBhbHdheXMgYmUgZmlyc3QgaW4gYW55CisJCQkJKiBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLworCisJdTMyIEZ1bGxTaXplOyAvKiBUb3RhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIG1vZGVtLgorCQkgICAgICAgKiBJZiB0aGUgc2l6ZSByZXF1ZXN0ZWQgYnkgdGhlIGhvc3QgaXMgc21hbGxlciB0aGFuCisJCSAgICAgICAqIEZ1bGxTaXplLCB0aGUgc3RydWN0IHdpbGwgYmUgdHJ1bmNhdGVkICovCisKKwkvKiBDb21tb24gcGFyYW1ldGVycyAqLworCXUzMiBJc1JmTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0RlbW9kTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0V4dGVybmFsTE5BT247IC8qIDAgLSBleHRlcm5hbCBMTkEgb2ZmLCAxIC0gZXh0ZXJuYWwgTE5BIG9uICovCisKKwkvKiBSZWNlcHRpb24gcXVhbGl0eSAqLworCXMzMiAgU05SOyAvKiBkQiAqLworCXMzMiAgUlNTSTsgLyogZEJtICovCisJczMyICBJbkJhbmRQd3I7IC8qIEluIGJhbmQgcG93ZXIgaW4gZEJNICovCisJczMyICBDYXJyaWVyT2Zmc2V0OyAvKiBDYXJyaWVyIE9mZnNldCBpbiBIeiAqLworCisJLyogVHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgRnJlcXVlbmN5OyAvKiBGcmVxdWVuY3kgaW4gSHogKi8KKwl1MzIgQmFuZHdpZHRoOyAvKiBCYW5kd2lkdGggaW4gTUh6ICovCisJdTMyIFRyYW5zbWlzc2lvbk1vZGU7IC8qIElTREItVCB0cmFuc21pc3Npb24gbW9kZSAqLworCXUzMiBNb2RlbVN0YXRlOyAvKiAwIC0gQWNxdWlzaXRpb24sIDEgLSBMb2NrZWQgKi8KKwl1MzIgR3VhcmRJbnRlcnZhbDsgLyogR3VhcmQgSW50ZXJ2YWwsIDEgZGl2aWRlZCBieSB2YWx1ZSAqLworCXUzMiBTeXN0ZW1UeXBlOyAvKiBJU0RCLVQgc3lzdGVtIHR5cGUgKElTREItVCAvIElTREItVHNiKSAqLworCXUzMiBQYXJ0aWFsUmVjZXB0aW9uOyAvKiBUUlVFIC0gcGFydGlhbCByZWNlcHRpb24sIEZBTFNFIG90aGVyd2lzZSAqLworCXUzMiBOdW1PZkxheWVyczsgLyogTnVtYmVyIG9mIElTREItVCBsYXllcnMgaW4gdGhlIG5ldHdvcmsgKi8KKworCS8qIFBlci1sYXllciBpbmZvcm1hdGlvbiAqLworCS8qIExheWVycyBBLCBCIGFuZCBDICovCisJc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVAlMYXllckluZm9bM107CisJLyogUGVyLWxheWVyIHN0YXRpc3RpY3MsIHNlZSBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QgKi8KKworCS8qIEludGVyZmFjZSBpbmZvcm1hdGlvbiAqLworCXUzMiBTbXNUb0hvc3RUeEVycm9yczsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICovCit9OworCiBzdHJ1Y3QgUElEX1NUQVRJU1RJQ1NfREFUQV9TIHsKIAlzdHJ1Y3QgUElEX0JVUlNUX1MgewogCQl1MzIgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggNjhiZjlmYi4uNWYzOTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTExNiw2ICsxMTYsMTE4IEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfZHZiX3N0YXRzKHN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSwKKwkJCQkgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX1NUICpwKQoreworCWlmIChzbXNfZGJnICYgMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXJ2ZWQgPSAlZCIsIHAtPlJlc2VydmVkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzUmZMb2NrZWQgPSAlZCIsIHAtPklzUmZMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNEZW1vZExvY2tlZCA9ICVkIiwgcC0+SXNEZW1vZExvY2tlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc0V4dGVybmFsTE5BT24gPSAlZCIsIHAtPklzRXh0ZXJuYWxMTkFPbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJTTlIgPSAlZCIsIHAtPlNOUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVIgPSAlZCIsIHAtPkJFUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGSUJfQ1JDID0gJWQiLCBwLT5GSUJfQ1JDKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRTX1BFUiA9ICVkIiwgcC0+VFNfUEVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1GRVIgPSAlZCIsIHAtPk1GRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvZGVSYXRlID0gJWQiLCBwLT5Db2RlUmF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJMUENvZGVSYXRlID0gJWQiLCBwLT5MUENvZGVSYXRlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhpZXJhcmNoeSA9ICVkIiwgcC0+SGllcmFyY2h5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvbnN0ZWxsYXRpb24gPSAlZCIsIHAtPkNvbnN0ZWxsYXRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3RTaXplID0gJWQiLCBwLT5CdXJzdFNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3REdXJhdGlvbiA9ICVkIiwgcC0+QnVyc3REdXJhdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCdXJzdEN5Y2xlVGltZSA9ICVkIiwgcC0+QnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lID0gJWQiLCBwLT5DYWxjdWxhdGVkQnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZSb3dzID0gJWQiLCBwLT5OdW1PZlJvd3MpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZQYWRkQ29scyA9ICVkIiwgcC0+TnVtT2ZQYWRkQ29scyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlB1bmN0Q29scyA9ICVkIiwgcC0+TnVtT2ZQdW5jdENvbHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRXJyb3JUU1BhY2tldHMgPSAlZCIsIHAtPkVycm9yVFNQYWNrZXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRvdGFsVFNQYWNrZXRzID0gJWQiLCBwLT5Ub3RhbFRTUGFja2V0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZWYWxpZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZJbnZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZJbnZhbGlkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkNvcnJlY3RlZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mQ29ycmVjdGVkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVJFcnJvckNvdW50ID0gJWQiLCBwLT5CRVJFcnJvckNvdW50KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJFUkJpdENvdW50ID0gJWQiLCBwLT5CRVJCaXRDb3VudCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbXNUb0hvc3RUeEVycm9ycyA9ICVkIiwgcC0+U21zVG9Ib3N0VHhFcnJvcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUHJlQkVSID0gJWQiLCBwLT5QcmVCRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2VsbElkID0gJWQiLCBwLT5DZWxsSWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZEhQID0gJWQiLCBwLT5EdmJoU3J2SW5kSFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZExQID0gJWQiLCBwLT5EdmJoU3J2SW5kTFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtTVBFUmVjZWl2ZWQgPSAlZCIsIHAtPk51bU1QRVJlY2VpdmVkKTsKKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSBwLT5CRVI7CisJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSBwLT5CRVJFcnJvckNvdW50OworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gcC0+RXJyb3JUU1BhY2tldHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfaXNkYnRfc3RhdHMoc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhLAorCQkJCSAgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX0lTREJUX1NUICpwKQoreworCWludCBpOworCisJaWYgKHNtc19kYmcgJiAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc1JmTG9ja2VkID0gJWQiLCBwLT5Jc1JmTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRGVtb2RMb2NrZWQgPSAlZCIsIHAtPklzRGVtb2RMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNFeHRlcm5hbExOQU9uID0gJWQiLCBwLT5Jc0V4dGVybmFsTE5BT24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiU05SID0gJWQiLCBwLT5TTlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5c3RlbVR5cGUgPSAlZCIsIHAtPlN5c3RlbVR5cGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUGFydGlhbFJlY2VwdGlvbiA9ICVkIiwgcC0+UGFydGlhbFJlY2VwdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkxheWVycyA9ICVkIiwgcC0+TnVtT2ZMYXllcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiU21zVG9Ib3N0VHhFcnJvcnMgPSAlZCIsIHAtPlNtc1RvSG9zdFR4RXJyb3JzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IENvZGVSYXRlID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29kZVJhdGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBDb25zdGVsbGF0aW9uID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29uc3RlbGxhdGlvbik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUkVycm9yQ291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJFcnJvckNvdW50KTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogQkVSQml0Q291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJCaXRDb3VudCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFByZUJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlByZUJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFRTX1BFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRTX1BFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEVycm9yVFNQYWNrZXRzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUb3RhbFRTUGFja2V0cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRvdGFsVFNQYWNrZXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVElMZGVwdGhJID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVElMZGVwdGhJKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogTnVtYmVyT2ZTZWdtZW50cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLk51bWJlck9mU2VnbWVudHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUTUNDRXJyb3JzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVE1DQ0Vycm9ycyk7CisJCX0KKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisKKwlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXBSZWNlcHRpb25EYXRhLT5CRVIgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUjsKKwkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUkVycm9yQ291bnQ7CisJCXBSZWNlcHRpb25EYXRhLT5FcnJvclRTUGFja2V0cyArPSBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHM7CisJfQorfQorCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMTM0LDYgKzI0Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfU01TX1JGX1RVTkVfUkVTOgorCWNhc2UgTVNHX1NNU19JU0RCVF9UVU5FX1JFUzoKIAkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKIAkJYnJlYWs7CiAKQEAgLTIxNyw2ICszMzAsNDAgQEAKIAkJaXNfc3RhdHVzX3VwZGF0ZSA9IHRydWU7CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTOiB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfSVNEQlRfU1QgIGlzZGJ0OworCQkJc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUICAgICAgICAgZHZiOworCQl9ICpwID0gKHZvaWQgKikgKHBoZHIgKyAxKTsKKwkJc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhID0KKwkJCQkmY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YTsKKworCQlzbXNfaW5mbygiTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMiKTsKKworCQlpc19zdGF0dXNfdXBkYXRlID0gdHJ1ZTsKKworCQlzd2l0Y2ggKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNsaWVudC0+Y29yZWRldikpIHsKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVDoKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVF9CREE6CisJCQlzbXNkdmJfdXBkYXRlX2lzZGJ0X3N0YXRzKHBSZWNlcHRpb25EYXRhLCAmcC0+aXNkYnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbXNkdmJfdXBkYXRlX2R2Yl9zdGF0cyhwUmVjZXB0aW9uRGF0YSwgJnAtPmR2Yi5TdGF0KTsKKwkJfQorCQlpZiAoIXBSZWNlcHRpb25EYXRhLT5Jc0RlbW9kTG9ja2VkKSB7CisJCQlwUmVjZXB0aW9uRGF0YS0+U05SID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkluQmFuZFB3ciA9IDA7CisJCQlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCQl9CisKKwkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNtc19pbmZvKCJVbmhhbmRsZWQgbWVzc2FnZSAlZCIsIHBoZHItPm1zZ1R5cGUpOworCiAJfQogCXNtc2NvcmVfcHV0YnVmZmVyKGNsaWVudC0+Y29yZWRldiwgY2IpOwogCkBAIC0yMzMsMTAgKzM4MCwxMCBAQAogCQkJCQkJRFZCM19FVkVOVF9VTkNfRVJSKTsKIAogCQl9IGVsc2UgewotCQkJLypjbGllbnQtPmZlX3N0YXR1cyA9Ci0JCQkJKHBoZHItPm1zZ1R5cGUgPT0gTVNHX1NNU19OT19TSUdOQUxfSU5EKSA/Ci0JCQkJMCA6IEZFX0hBU19TSUdOQUw7Ki8KLQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKKwkJCWlmIChjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLklzUmZMb2NrZWQpCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCQllbHNlCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSAwOwogCQkJc21zX2JvYXJkX2R2YjNfZXZlbnQoY2xpZW50LCBEVkIzX0VWRU5UX0ZFX1VOTE9DSyk7CiAJCX0KIAl9CkBAIC0zMjUsNiArNDcyLDIwIEBACiAJCQkJCQkwIDogLUVUSU1FOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQpCit7CisJaW50IHJjOworCXN0cnVjdCBTbXNNc2dIZHJfU1QgTXNnID0geyBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUSwKKwkJCQkgICAgRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQsCisJCQkJICAgIEhJRl9UQVNLLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCksIDAgfTsKKworCXJjID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgJmNsaWVudC0+dHVuZV9kb25lKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCkKIHsKIAlpZiAoY2xpZW50LT5mZV9zdGF0dXMgJiBGRV9IQVNfTE9DSykKQEAgLTMzNywzMyArNDk4LDQzIEBACiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSpzdGF0ID0gY2xpZW50LT5mZV9zdGF0dXM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogeworCWludCByYzsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJKmJlciA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuQkVSOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQogeworCWludCByYzsKKwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAlpZiAoY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5JbkJhbmRQd3IgPCAtOTUpCiAJCSpzdHJlbmd0aCA9IDA7CiAJCWVsc2UgaWYgKGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuSW5CYW5kUHdyID4gLTI5KQpAQCAtMzc1LDMxICs1NDYsMzcgQEAKIAogCWxlZF9mZWVkYmFjayhjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqc25yID0gY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5TTlI7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSp1Y2Jsb2NrcyA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuRXJyb3JUU1BhY2tldHM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC00MTMsOSArNTkwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3N0YXRpYyBpbnQgc21zZHZiX2R2YnRfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KIAkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKQEAgLTQyOSwyNCArNjA3LDMzIEBACiAJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMOwogCWNsaWVudC0+ZXZlbnRfZmVfc3RhdGUgPSAtMTsKIAljbGllbnQtPmV2ZW50X3VuY19zdGF0ZSA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CiAKIAlNc2cuTXNnLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCA9IEhJRl9UQVNLOwogCU1zZy5Nc2cubXNnRmxhZ3MgPSAwOwogCU1zZy5Nc2cubXNnVHlwZSA9IE1TR19TTVNfUkZfVFVORV9SRVE7CiAJTXNnLk1zZy5tc2dMZW5ndGggPSBzaXplb2YoTXNnKTsKLQlNc2cuRGF0YVswXSA9IGZlcC0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OwogCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CiAKLQlzbXNfZGVidWcoImZyZXEgJWQgYmFuZCAlZCIsCi0JCSAgZmVwLT5mcmVxdWVuY3ksIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJc21zX2luZm8oIiVzOiBmcmVxICVkIGJhbmQgJWQiLCBfX2Z1bmNfXywgYy0+ZnJlcXVlbmN5LAorCQkgYy0+YmFuZHdpZHRoX2h6KTsKIAotCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7Ci0JY2FzZSBCQU5EV0lEVEhfOF9NSFo6IE1zZy5EYXRhWzFdID0gQldfOF9NSFo7IGJyZWFrOwotCWNhc2UgQkFORFdJRFRIXzdfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOyBicmVhazsKLQljYXNlIEJBTkRXSURUSF82X01IWjogTXNnLkRhdGFbMV0gPSBCV182X01IWjsgYnJlYWs7Ci0JY2FzZSBCQU5EV0lEVEhfQVVUTzogcmV0dXJuIC1FT1BOT1RTVVBQOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYy0+YmFuZHdpZHRoX2h6IC8gMTAwMDAwMCkgeworCWNhc2UgODoKKwkJTXNnLkRhdGFbMV0gPSBCV184X01IWjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOworCQlicmVhazsKKwljYXNlIDY6CisJCU1zZy5EYXRhWzFdID0gQldfNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLwogCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOwpAQCAtNDcwLDYgKzY1Nyw5MCBAQAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9pc2RidF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgU21zTXNnSGRyX1NUCU1zZzsKKwkJdTMyCQlEYXRhWzRdOworCX0gTXNnOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKKwlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CisJTXNnLk1zZy5tc2dGbGFncyAgPSAwOworCU1zZy5Nc2cubXNnVHlwZSAgID0gTVNHX1NNU19JU0RCVF9UVU5FX1JFUTsKKwlNc2cuTXNnLm1zZ0xlbmd0aCA9IHNpemVvZihNc2cpOworCisJaWYgKGMtPmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IC0xKQorCQljLT5pc2RidF9zYl9zZWdtZW50X2lkeCA9IDA7CisKKwlzd2l0Y2ggKGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQpIHsKKwljYXNlIDM6CisJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCWJyZWFrOworCWNhc2UgMDoJLyogQVVUTyAqLworCQlzd2l0Y2ggKGMtPmJhbmR3aWR0aF9oeiAvIDEwMDAwMDApIHsKKwkJY2FzZSA4OgorCQljYXNlIDc6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMzsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfMVNFRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBBc3N1bWVzIDYgTUhaIGJ3ICovCisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDYwMDA7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbXNfaW5mbygiU2VnbWVudCBjb3VudCAlZCBub3Qgc3VwcG9ydGVkIiwgYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CisJTXNnLkRhdGFbM10gPSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeDsKKworCXNtc19pbmZvKCIlczogZnJlcSAlZCBzZWd3aWR0aCAlZCBzZWdpbmRleCAlZFxuIiwgX19mdW5jX18sCisJCSBjLT5mcmVxdWVuY3ksIGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQsCisJCSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeCk7CisKKwlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgICZjbGllbnQtPnR1bmVfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiA9IGNsaWVudC0+Y29yZWRldjsKKworCXN3aXRjaCAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikpIHsKKwljYXNlIERFVklDRV9NT0RFX0RWQlQ6CisJY2FzZSBERVZJQ0VfTU9ERV9EVkJUX0JEQToKKwkJcmV0dXJuIHNtc2R2Yl9kdmJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwljYXNlIERFVklDRV9NT0RFX0lTREJUOgorCWNhc2UgREVWSUNFX01PREVfSVNEQlRfQkRBOgorCQlyZXR1cm4gc21zZHZiX2lzZGJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc21zZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKQEAgLTU1NywxMyArODI4LDYgQEAKIAkvKiBkZXZpY2UgcmVtb3ZhbCBoYW5kbGVkIGJ5IG9ucmVtb3ZlIGNhbGxiYWNrICovCiAJaWYgKCFhcnJpdmFsKQogCQlyZXR1cm4gMDsKLQotCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewotCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgotCQkJIkRWQiBvcGVyYXRpb24uIik7Ci0JCXJldHVybiAwOwotCX0KLQogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaWVudCkgewogCQlzbXNfZXJyKCJrbWFsbG9jKCkgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYwppbmRleCBlM2Q3NzZmLi5hNTZlYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKQEAgLTg1LDkgKzg1LDkgQEAKIAkJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi11MzIgaXJfcG9zOwotdTMyCWlyX3dvcmQ7Ci11MzIgaXJfdG9nZ2xlOworc3RhdGljIHUzMiBpcl9wb3M7CitzdGF0aWMgdTMyIGlyX3dvcmQ7CitzdGF0aWMgdTMyIGlyX3RvZ2dsZTsKIAogI2RlZmluZSBSQzVfUFVTSF9CSVQoZHN0LCBiaXQsIHBvcykJXAogCXsgZHN0IDw8PSAxOyBkc3QgfD0gYml0OyBwb3MrKzsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCAyM2ExYzYzLi5iMDcwZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtMjY4LDggKzI2OCw4IEBACiAKIAogLyogL3Byb2MvYXY3MTEwX2lyIGludGVyZmFjZSAqLwotc3RhdGljIGludCBhdjcxMTBfaXJfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgYXY3MTEwX2lyX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciAqcGFnZTsKIAl1MzIgaXJfY29uZmlnOwpAQCAtMzA5LDYgKzMwOSwxMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXY3MTEwX2lyX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IGF2NzExMF9pcl9wcm9jX3dyaXRlLAorfTsKIAogLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGlyX2hhbmRsZXIoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJjb20pCkBAIC0zNjgsMTEgKzM3Miw5IEBACiAJaW5wdXRfZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZhdjcxMTAtPmlyOwogCiAJaWYgKGF2X2NudCA9PSAxKSB7Ci0JCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXY3MTEwX2lyIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMKTsKLQkJaWYgKGUpIHsKLQkJCWUtPndyaXRlX3Byb2MgPSBhdjcxMTBfaXJfd3JpdGVfcHJvYzsKKwkJZSA9IHByb2NfY3JlYXRlKCJhdjcxMTBfaXIiLCBTX0lXVVNSLCBOVUxMLCAmYXY3MTEwX2lyX3Byb2NfZm9wcyk7CisJCWlmIChlKQogCQkJZS0+c2l6ZSA9IDQgKyAyNTYgKiBzaXplb2YodTE2KTsKLQkJfQogCX0KIAogCXRhc2tsZXRfaW5pdCgmYXY3MTEwLT5pci5pcl90YXNrbGV0LCBhdjcxMTBfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmYXY3MTEwLT5pcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDk3ODJlMDUuLjQ5YzJhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlidWRnZXRfY2ktPmlyLnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gbXNwNDMwX2lyX2tleXVwOwogCWJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXAuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYnVkZ2V0X2NpLT5pcjsKIAlidWRnZXRfY2ktPmlyLmxhc3RfcmF3ID0gMHhmZmZmOyAvKiBBbiBpbXBvc3NpYmxlIHZhbHVlICovCi0JZXJyb3IgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIGlyX2NvZGVzKTsKKwllcnJvciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggZTQ4MzgwYy4uOWZkZjI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTQzMyw5ICs0MzMsOCBAQAogCS5kZW1vZF9tb2RlCQk9IFNUVjA5MHhfU0lOR0xFLAogCS5jbGtfbW9kZQkJPSBTVFYwOTB4X0NMS19FWFQsCiAKLQkueHRhbAkJCT0gMjcwMDAwMDAsCisJLnh0YWwJCQk9IDEzNTAwMDAwLAogCS5hZGRyZXNzCQk9IDB4NjgsCi0JLnJlZl9jbGsJCT0gMjcwMDAwMDAsCiAKIAkudHMxX21vZGUJCT0gU1RWMDkweF9UU01PREVfRFZCQ0ksCiAJLnRzMl9tb2RlCQk9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTLApAQCAtNDU3LDYgKzQ1Niw3IEBACiBzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dDE2MDBfc3R2NjExMHhfY29uZmlnID0gewogCS5hZGRyCQkJPSAweDYwLAogCS5yZWZjbGsJCQk9IDI3MDAwMDAwLAorCS5jbGtfZGl2CQk9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzbDY0MjNfY29uZmlnIHR0MTYwMF9pc2w2NDIzX2NvbmZpZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCAzZjQwZjM3Li44MzU2N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC00MTcsNiArNDE3LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIFRFQTU3NjQgaGF2ZSBhIDMyNzY4IEh6IGNyeXN0YWwgaW4gY2lyY3VpdCwgc2F5IE4KIAkgIGhlcmUgaWYgVEVBNTc2NCByZWZlcmVuY2UgZnJlcXVlbmN5IGlzIGNvbm5lY3RlZCBpbiBGUkVRSU4uCiAKK2NvbmZpZyBSQURJT19TQUE3NzA2SAorCXRyaXN0YXRlICJTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU0FBNzcwNkggQ2FyIHJhZGlvIERpZ2l0YWwKKwkgIFNpZ25hbCBQcm9jZXNzb3IsIGZvdW5kIGZvciBpbnN0YW5jZSBvbiB0aGUgUnVzc2VsbHZpbGxlIGRldmVsb3BtZW50CisJICBib2FyZC4gT24gdGhlIHJ1c3NlbGx2aWxsZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBpbnRlcm5hbAorCSAgdGltYmVyZGFsZSBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBTQUE3NzA2SC4KKwogY29uZmlnIFJBRElPX1RFRjY4NjIKIAl0cmlzdGF0ZSAiVEVGNjg2MiBDYXIgUmFkaW8gRW5oYW5jZWQgU2VsZWN0aXZpdHkgVHVuZXIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgpAQCAtNDI5LDQgKzQ0MSwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgVEVGNjg2Mi4KIAorY29uZmlnIFJBRElPX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiRW5hYmxlIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9USU1CRVJEQUxFICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIEkyQwkjIGZvciBSQURJT19TQUE3NzA2SAorCXNlbGVjdCBSQURJT19URUY2ODYyCisJc2VsZWN0IFJBRElPX1NBQTc3MDZICisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGtpbmQgb2YgdW1icmVsbGEgZHJpdmVyIGZvciB0aGUgUmFkaW8gVHVuZXIgYW5kIERTUAorCSAgZm91bmQgYmVoaW5kIHRoZSBUaW1iZXJkYWxlIEZQR0Egb24gdGhlIFJ1c3NlbGx2aWxsZSBib2FyZC4KKwkgIEVuYWJsaW5nIHRoaXMgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIERTUCBhbmQgdHVuZXIuCisKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDAxOTIyYWQuLmY2MTU1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMjMsNiArMjMsOCBAQAogb2JqLSQoQ09ORklHX1JBRElPX1NJNDcwWCkgKz0gc2k0NzB4Lwogb2JqLSQoQ09ORklHX1VTQl9NUjgwMCkgKz0gcmFkaW8tbXI4MDAubwogb2JqLSQoQ09ORklHX1JBRElPX1RFQTU3NjQpICs9IHJhZGlvLXRlYTU3NjQubworb2JqLSQoQ09ORklHX1JBRElPX1NBQTc3MDZIKSArPSBzYWE3NzA2aC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVGNjg2MikgKz0gdGVmNjg2Mi5vCitvYmotJChDT05GSUdfUkFESU9fVElNQkVSREFMRSkgKz0gcmFkaW8tdGltYi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSXNvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGltYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIHJhZGlvLXRpbWIuYyBUaW1iZXJkYWxlIEZQR0EgUmFkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iLXJhZGlvIgorCitzdHJ1Y3QgdGltYnJhZGlvIHsKKwlzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCXBkYXRhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqc2RfdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSpzZF9kc3A7CisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworfTsKKworCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiVGltYmVyZGFsZSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCXYtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgZ190dW5lciwgdik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBzX3R1bmVyLCB2KTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgcXVlcnljdHJsLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfZHNwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHRpbWJyYWRpb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyCQk9IHRpbWJyYWRpb192aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfZ19pbnB1dAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHRpbWJyYWRpb192aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfYXVkaW8JCT0gdGltYnJhZGlvX3ZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB0aW1icmFkaW9fdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX3NfY3RybAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0aW1icmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJyYWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRpbWJyYWRpbyAqdHI7CisJaW50IGVycjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJdHIgPSBremFsbG9jKHNpemVvZigqdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXRyLT5wZGF0YSA9ICpwZGF0YTsKKworCXN0cmxjcHkodHItPnZpZGVvX2Rldi5uYW1lLCAiVGltYmVyZGFsZSBSYWRpbyIsCisJCXNpemVvZih0ci0+dmlkZW9fZGV2Lm5hbWUpKTsKKwl0ci0+dmlkZW9fZGV2LmZvcHMgPSAmdGltYnJhZGlvX2ZvcHM7CisJdHItPnZpZGVvX2Rldi5pb2N0bF9vcHMgPSAmdGltYnJhZGlvX2lvY3RsX29wczsKKwl0ci0+dmlkZW9fZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl0ci0+dmlkZW9fZGV2Lm1pbm9yID0gLTE7CisKKwlzdHJsY3B5KHRyLT52NGwyX2Rldi5uYW1lLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHRyLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnRyLT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdjRsMl9kZXY7CisKKwl0ci0+dmlkZW9fZGV2LnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2RldiwgVkZMX1RZUEVfUkFESU8sIC0xKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHJlZyB2aWRlb1xuIik7CisJCWdvdG8gZXJyX3ZpZGVvX3JlcTsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHItPnZpZGVvX2RldiwgdHIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHIpOworCXJldHVybiAwOworCitlcnJfdmlkZW9fcmVxOgorCXZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KCZ0ci0+dmlkZW9fZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworZXJyX3Y0bDJfZGV2OgorCWtmcmVlKHRyKTsKK2VycjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltYnJhZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2Rldik7CisJdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkoJnRyLT52aWRlb19kZXYpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKKworCWtmcmVlKHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWJyYWRpb19wcm9iZSwKKwkucmVtb3ZlCQk9IHRpbWJyYWRpb19yZW1vdmUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdGltYnJhZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWJyYWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWJyYWRpb19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1icmFkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh0aW1icmFkaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBSYWRpbyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBzYWE3NzA2LmMgUGhpbGlwcyBTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic2FhNzcwNmgiCisKKy8qIHRoZSBJMkMgbWVtb3J5IG1hcCBsb29rcyBsaWtlIHRoaXMKKworCSQxQzAwIC0gJEZGRkYgTm90IFVzZWQKKwkkMjIwMCAtICQzRkZGIFJlc2VydmVkIFlSQU0gKERTUDIpIHNwYWNlCisJJDIwMDAgLSAkMjFGRiBZUkFNIChEU1AyKQorCSQxRkYwIC0gJDFGRkYgSGFyZHdhcmUgUmVnaXN0ZXJzCisJJDEyODAgLSAkMUZFRiBSZXNlcnZlZCBYUkFNIChEU1AyKSBzcGFjZQorCSQxMDAwIC0gJDEyN0YgWFJBTSAoRFNQMikKKwkkMEZGRiAgICAgICAgRFNQIENPTlRST0wKKwkkMEEwMCAtICQwRkZFIFJlc2VydmVkCisJJDA5ODAgLSAkMDlGRiBSZXNlcnZlZCBZUkFNIChEU1AxKSBzcGFjZQorCSQwODAwIC0gJDA5N0YgWVJBTSAoRFNQMSkKKwkkMDIwMCAtICQwN0ZGIE5vdCBVc2VkCisJJDAxODAgLSAkMDFGRiBSZXNlcnZlZCBYUkFNIChEU1AxKSBzcGFjZQorCSQwMDAwIC0gJDAxN0YgWFJBTSAoRFNQMSkKKyovCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NUUkwJCTB4MGZmZgorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0JZUF9QTEwJCTB4MDAwMQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX1BMTF9ESVZfTUFTSwkweDAwM2UKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaCTB4MDAzZQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUF9UVVJCTwkJMHgwMDQwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMQkweDAwODAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyCTB4MDEwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDFfUk9NX0VOX01BU0sJMHgwNjAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMV9GVU5DX1BST00JMHgwMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMl9ST01fRU5fTUFTSwkweDE4MDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1AyX0ZVTkNfUFJPTQkweDAwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9ESUdfU0lMX0lOVEVSUE9MCTB4ODAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OCQkJMHgxZmYwCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfRElTQUJMRV9DSEFSR0VfUFVNUAkweDAwMDAwMQorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0RDU19DTE9DSwkJCTB4MDAwMDAyCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfR05EUkMxX0VOQUJMRQkJMHgwMDAwMDQKKyNkZWZpbmUgU0FBNzcwNkhfRVZBTF9HTkRSQzJfRU5BQkxFCQkweDAwMDAwOAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU4xCQkJMHgxZmYzCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjFfTUlOX0xPT1BHQUlOX01BU0sJMHgwMDAwMGYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMV9MT09QR0FJTl9NQVNLCQkweDAwMDBmMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4xX0NPQVJTRV9SQVRJT04JCTB4ZmZmZjAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NMX0dFTjIJCQkweDFmZjQKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORwkJMHgwMDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9TVE9QX1ZDTwkJMHgwMDAwMDIKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9GUkVSVU4JCQkweDAwMDAwNAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0FEQVBUSVZFCQkweDAwMDAwOAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0ZJTkVfUkFUSU9fTUFTSwkweDBmZmZmMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU40CQkweDFmZjYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9CWVBBU1NfUExMMQkweDAwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU40X1BMTDFfRElWX01BU0sJMHgwM2UwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9EU1AxX1RVUkJPCTB4MDQwMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NFTAkweDFmZjcKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfU1JDQV9NQVNLCTB4MDAwMDA3CisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX0ZNVEFfTUFTSwkweDAwMDAzMQorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMl9TUkNCX01BU0sJMHgwMDAxYzAKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfRk1UQl9NQVNLCTB4MDAwZTAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX1NSQ19NQVNLCTB4MDAzMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX0ZNVF9NQVNLCTB4MDFjMDAzCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9TUERJRjIJCTB4MDIwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9IT1NUX0lPX0ZNVF9NQVNLCTB4MWMwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9FTl9IT1NUX0lPCQkweDIwMDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19JQUMJCTB4MWZmOAorI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xLX1NFVAkJMHgxZmY5CisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYJCTB4MWZmYQorI2RlZmluZSBTQUE3NzA2SF9SRUdfSU5QVVRfU0VOUwkJMHgxZmZiCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfUkRTX1ZPTF9NQVNLCTB4MDAwM2YKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19GTV9WT0xfTUFTSwkJMHgwMGZjMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX0ZNX01QWAkJMHgwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX09GRl9GSUxURVJfQV9FTgkweDAyMDAwCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfT0ZGX0ZJTFRFUl9CX0VOCTB4MDQwMDAKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1BIT05FX05BVl9BVURJTwkweDFmZmMKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0lPX0NPTkZfRFNQMgkweDFmZmQKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NUQVRVU19EU1AyCTB4MWZmZQorI2RlZmluZSBTQUE3NzA2SF9SRUdfUENfRFNQMgkJMHgxZmZmCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0QwCTB4MDgwMAorI2RlZmluZSBTQUE3NzA2SF9EU1AxX1JPTV9WRVIJMHgwOTdmCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfTVBUUjAJMHgxMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0RQTlRSCTB4MDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVwkweDExM2UKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0JVU0FNUAkweDExNGEKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0ZEQUNQTlRSCTB4MTFmOQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1hNRU1fSUlTMVBOVFIJMHgxMWZiCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWR0EJCTB4MjEyYQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVDEJMHgyMTJiCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUCQkweDIxMmMKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1JPTV9WRVIJMHgyMWZmCisKKyNkZWZpbmUgU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUgkJMHg2NjcKKworc3RydWN0IHNhYTc3MDZoX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdW5zaWduZWQgbXV0ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9pMmNfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgZXJyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgbGVuKTsKKwlpZiAoZXJyID09IGxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlPIDogZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCXN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCWludCBlcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBudW0pOworCWlmIChlcnIgPT0gbnVtKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyID4gMCA/IC1FSU8gOiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1Zls1XTsKKwlpbnQgcG9zID0gMDsKKworCWJ1Zltwb3MrK10gPSByZWcgPj4gODsKKwlidWZbcG9zKytdID0gcmVnOworCWJ1Zltwb3MrK10gPSB2YWwgPj4gMTY7CisJYnVmW3BvcysrXSA9IHZhbCA+PiA4OworCWJ1Zltwb3MrK10gPSB2YWw7CisKKwlyZXR1cm4gc2FhNzcwNmhfaTJjX3NlbmQoY2xpZW50LCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MzIgdmFsLAorCWludCAqZXJyKQoreworCXJldHVybiAqZXJyID8gKmVyciA6IHNhYTc3MDZoX3NldF9yZWcyNChzZCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcxNihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbNF07CisJaW50IHBvcyA9IDA7CisKKwlidWZbcG9zKytdID0gcmVnID4+IDg7CisJYnVmW3BvcysrXSA9IHJlZzsKKwlidWZbcG9zKytdID0gdmFsID4+IDg7CisJYnVmW3BvcysrXSA9IHZhbDsKKworCXJldHVybiBzYWE3NzA2aF9pMmNfc2VuZChjbGllbnQsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUxNiB2YWwsCisJaW50ICplcnIpCit7CisJcmV0dXJuICplcnIgPyAqZXJyIDogc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ2V0X3JlZzE2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1ZlsyXTsKKwlpbnQgZXJyOworCXU4IHJlZ2FkZHJbXSA9IHtyZWcgPj4gOCwgcmVnfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsge2NsaWVudC0+YWRkciwgMCwgc2l6ZW9mKHJlZ2FkZHIpLCByZWdhZGRyfSwKKwkJCQl7Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgc2l6ZW9mKGJ1ZiksIGJ1Zn0gfTsKKworCWVyciA9IHNhYTc3MDZoX2kyY190cmFuc2ZlcihjbGllbnQsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJ1ZlswXSA8PCA4IHwgYnVmWzFdOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3VubXV0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyLCAmZXJyKTsKKworCS8qIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBjaGlwIHJlcXVpcmVzIGEgc21hbGwgc2xlZXAgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMSk7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OLCAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTF9HRU4xLCAweDA0MDAyMiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VOMiwKKwkJU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VONCwgMHgwMjQwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1NFTCwgMHgyMDAwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0lBQywgMHhmNGNhZWQsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMS19TRVQsIDB4MTI0MzM0LCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYsIDB4MDA0YTFhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19JTlBVVF9TRU5TLCAweDAwNzFjNywKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfUEhPTkVfTkFWX0FVRElPLAorCQkweDBlMjJmZiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfSU9fQ09ORl9EU1AyLCAweDAwMWZmOCwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfU1RBVFVTX0RTUDIsIDB4MDgwMDAzLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19QQ19EU1AyLCAweDAwMDAwNCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRDAsIDB4MGM2YywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX01QVFIwLCAweDAwMGI0YiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRFBOVFIsIDB4MDAwNjAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDFfTU9EUE5UUiwgMHgwMDAwYzAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDgxOSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fQ09OVExMQ1csIDB4MDAwODVhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9CVVNBTVAsIDB4N2ZmZmZmLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9GREFDUE5UUiwgMHgyMDAwY2IsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0lJUzFQTlRSLCAweDIwMDBjYiwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZHQSwgMHgwZjgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUMSwgMHgwODAwLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFULCAweDA4MDAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDkwNSwKKwkJJmVycik7CisJaWYgKCFlcnIpCisJCXN0YXRlLT5tdXRlZCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9tdXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZXJyOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyKTsKKwlpZiAoIWVycikKKwkJc3RhdGUtPm11dGVkID0gMTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlyZXR1cm4gc2FhNzcwNmhfbXV0ZShzZCk7CisJCXJldHVybiBzYWE3NzA2aF91bm11dGUoc2QpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTc3MDZILCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3NzA2aF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzcwNmhfZ19jaGlwX2lkZW50LAorCS5xdWVyeWN0cmwgPSBzYWE3NzA2aF9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHNhYTc3MDZoX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzcwNmhfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzcwNmhfb3BzID0geworCS5jb3JlID0gJnNhYTc3MDZoX2NvcmVfb3BzLAorfTsKKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc2FhNzcwNmhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGVycjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzcwNmhfb3BzKTsKKworCS8qIGNoZWNrIHRoZSByb20gdmVyc2lvbnMgKi8KKwllcnIgPSBzYWE3NzA2aF9nZXRfcmVnMTYoc2QsIFNBQTc3MDZIX0RTUDFfUk9NX1ZFUik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyOworCWlmIChlcnIgIT0gU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUikKKwkJdjRsMl93YXJuKHNkLCAiVW5rbm93biBEU1AxIFJPTSBjb2RlIHZlcnNpb246IDB4JXhcbiIsIGVycik7CisKKwlzdGF0ZS0+bXV0ZWQgPSAxOworCisJLyogc3RhcnR1cCBpbiBhIG11dGVkIHN0YXRlICovCisJZXJyID0gc2FhNzcwNmhfbXV0ZShzZCk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCisJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEZhaWxlZCB0byBwcm9iZTogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzYWE3NzA2aF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzYWE3NzA2aF9tdXRlKHNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTc3MDZoX2lkW10gPSB7CisJe0RSSVZFUl9OQU1FLCAwfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3NzA2aF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzYWE3NzA2aF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUJCT0gc2FhNzcwNmhfcHJvYmUsCisJLnJlbW92ZQkJPSBzYWE3NzA2aF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gc2FhNzcwNmhfaWQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzYWE3NzA2aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgc2FhNzcwNmhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYWE3NzA2aF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTc3MDZoX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBQTc3MDZIIENhciBSYWRpbyBEU1AgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKaW5kZXggNGRhMGYxNS4uNDcwNzVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLsqIlWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYuyoiVYpICovCisJLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLCtVYgaW4gMSBkYiBpbmNyZW1lbnRzIChtYXggYXQgfjc1IGRiwrVWKSAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7CiAJLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLwogCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKaW5kZXggYTk2ZTFiOWRkLi42ZjYwODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCkBAIC01OTAsOCArNTkwLDkgQEAKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CiAJCQlrZnJlZShyYWRpby0+aW50X2luX2J1ZmZlcik7CiAJCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJCQlrZnJlZShyYWRpbyk7Ci0JCQlnb3RvIHVubG9jazsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCiAJCS8qIGNhbmNlbCByZWFkIHByb2Nlc3NlcyAqLwpAQCAtNjAxLDcgKzYwMiw2IEBACiAJCXJldHZhbCA9IHNpNDcweF9zdG9wKHJhZGlvKTsKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKIAl9Ci11bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIGRvbmU6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTg0Miw5ICs4NDIsMTEgQEAKIAkJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOwogCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwogCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIAkJa2ZyZWUocmFkaW8pOworCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJfQotCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDJmODNiZTcuLmY4ZmM4NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTM4OCw2ICszODgsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDUxNTAuCiAKK2NvbmZpZyBWSURFT19UVlA3MDAyCisJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRWUDcwMDIgdmlkZW8gZGVjb2RlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIFRWUDcwMDIgdmlkZW8gZGVjb2Rlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHZwNzAwMi4KKwogY29uZmlnIFZJREVPX1ZQWDMyMjAKIAl0cmlzdGF0ZSAidnB4MzIyMGEsIHZweDMyMTZiICYgdnB4MzIxNGMgdmlkZW8gZGVjb2RlcnMiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwpAQCAtNTQ4LDcgKzU1Nyw2IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciB2cHNzIHN5c3RlbSBtb2R1bGUgZm9yIHZpZGVvIGRyaXZlcgotCWRlZmF1bHQgeQogCiBjb25maWcgVklERU9fVlBGRV9DQVBUVVJFCiAJdHJpc3RhdGUgIlZQRkUgVmlkZW8gQ2FwdHVyZSBEcml2ZXIiCkBAIC01OTIsNiArNjAwLDE5IEBACiAJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCiAKK2NvbmZpZyBWSURFT19JU0lGCisJdHJpc3RhdGUgIklTSUYgSFcgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNMzY1ICYmIFZJREVPX1ZQRkVfQ0FQVFVSRQorCXNlbGVjdCBWSURFT19WUFNTX1NZU1RFTQorCWRlZmF1bHQgeQorCWhlbHAKKwkgICBFbmFibGVzIElTSUYgaHcgbW9kdWxlLiBUaGlzIGlzIHRoZSBoYXJkd2FyZSBtb2R1bGUgZm9yCisJICAgY29uZmlndXJpbmcgSVNJRiBpbiBWUEZFIHRvIGNhcHR1cmUgUmF3IEJheWVyIFJHQiBkYXRhICBmcm9tCisJICAgYSBpbWFnZSBzZW5zb3Igb3IgWVVWIGRhdGEgZnJvbSBhIFlVViBzb3VyY2UuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWciCiAKIGNvbmZpZyBWSURFT19QTVMKQEAgLTYzOCw5ICs2NTksMTQgQEAKIAkgIGluZm9ybWF0aW9uLgogCiBjb25maWcgVklERU9fQ1BJQQotCXRyaXN0YXRlICJDUGlBIFZpZGVvIEZvciBMaW51eCIKKwl0cmlzdGF0ZSAiQ1BpQSBWaWRlbyBGb3IgTGludXggKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMQorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2EgY3BpYTEgbW9kdWxlCisJICBpbnN0ZWFkLiBOb3RlIHRoYXQgeW91IG5lZWQgYXRsZWFzdCB2ZXJzaW9uIDAuNi40IG9mIGxpYnY0bCBmb3IKKwkgIHRoZSBjcGlhMSBnc3BjYSBtb2R1bGUuCisKIAkgIFRoaXMgaXMgdGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgY2FtZXJhcyBiYXNlZCBvbiBWaXNpb24ncyBDUGlBCiAJICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIENyZWF0aXZlIExhYnMgVmlkZW8KIAkgIEJsYXN0ZXIgV2ViY2FtIElJLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZQpAQCAtOTQ0LDYgKzk3MCw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIgpAQCAtOTU1LDYgKzk4Myw3IEBACiBjb25maWcgVklERU9fT1ZDQU1DSElQCiAJdHJpc3RhdGUgIk9tbmlWaXNpb24gQ2FtZXJhIENoaXAgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMQorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egb3Y1MTkgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBvdjUxMSAvIG92NTE4IHN1cHBvcnQgb2YgdGhlIGdzcGNhIG1vZHVsZQpAQCAtOTcxLDYgKzEwMDAsNyBAQAogY29uZmlnIFVTQl9XOTk2OENGCiAJdHJpc3RhdGUgIlVTQiBXOTk2Wzg3XUNGIEpQRUcgRHVhbCBNb2RlIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDICYmIFZJREVPX09WQ0FNQ0hJUAorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egb3Y1MTkgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSB3OTk2OGNmIHN1cHBvcnQgb2YgdGhlIGdzcGNhIG1vZHVsZQpAQCAtOTkyLDYgKzEwMjIsNyBAQAogY29uZmlnIFVTQl9PVjUxMQogCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMQorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egb3Y1MTkgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBvdjUxMSAvIG92NTE4IHN1cHBvcnQgb2YgdGhlIGdzcGNhIG1vZHVsZQpAQCAtMTAyMCw2ICsxMDUxLDcgQEAKIGNvbmZpZyBVU0JfU1RWNjgwCiAJdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMQorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egc3R2MDY4MCBtb2R1bGUKIAkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIGdzcGNhIHN0djA2ODAgbW9kdWxlIHlvdSBuZWVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCAyYWY2OGVlLi5iODhiNjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTU2LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19WSURFT19WSU5PKSArPSBpbmR5Y2FtLm8KIG9iai0kKENPTkZJR19WSURFT19UVlA1MTUwKSArPSB0dnA1MTUwLm8KIG9iai0kKENPTkZJR19WSURFT19UVlA1MTRYKSArPSB0dnA1MTR4Lm8KK29iai0kKENPTkZJR19WSURFT19UVlA3MDAyKSArPSB0dnA3MDAyLm8KIG9iai0kKENPTkZJR19WSURFT19NU1AzNDAwKSArPSBtc3AzNDAwLm8KIG9iai0kKENPTkZJR19WSURFT19DUzUzNDUpICs9IGNzNTM0NS5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1M0wzMkEpICs9IGNzNTNsMzJhLm8KQEAgLTk5LDYgKzEwMCw3IEBACiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gc2FhNzEzNC8KIG9iai0kKENPTkZJR19WSURFT19DWDg4KSArPSBjeDg4Lwogb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lworb2JqLSQoQ09ORklHX1ZJREVPX1RMRzIzMDApICs9IHRsZzIzMDAvCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzFYWCkgKz0gY3gyMzF4eC8KIG9iai0kKENPTkZJR19WSURFT19VU0JWSVNJT04pICs9IHVzYnZpc2lvbi8KIG9iai0kKENPTkZJR19WSURFT19QVlJVU0IyKSArPSBwdnJ1c2IyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCmluZGV4IDViYjBmOWUuLjU0N2UxYTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMCk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAwKTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDEpOyAqLwogCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMV07CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKLQkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIE5VTEwpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAxKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDEpOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7CiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKIAlkZWNvZGVyLT5ub3JtID0gc3RkOwotCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOwogCiAJaWYgKGRlY29kZXItPmlucHV0ICE9IGlucHV0KSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJZGVjb2Rlci0+aW5wdXQgPSBpbnB1dDsKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDEpOwogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDApOwogCQl9Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCBhZTA4YjA3Li5jYjQ2ZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCB2YmlfbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CiBzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CitzdGF0aWMgaW50IGRpc2FibGVfaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzcjsKIApAQCAtMTA3LDYgKzEwOCw3IEBACiBtb2R1bGVfcGFyYW0oYnR0dl9kZWJ1ZywgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCAgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZGVidWdfbGF0ZW5jeSwgICAgIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgICAgICAgIGludCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShmZHNyLCAgICAgICAgICAgICAgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShnYnVmZmVycywgICAgICAgICAgaW50LCAwNDQ0KTsKQEAgLTEzOSw2ICsxNDEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhidHR2X2dwaW8sImxvZyBncGlvIGNoYW5nZXMsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJ0dHZfZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsImlycSBoYW5kbGVyIGRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2lyLCAiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycy4gcmFuZ2UgMi0zMiwgZGVmYXVsdCA4Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGdidWZzaXplLCJzaXplIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMHgyMDgwMDAiKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXRfY3JvcCwicmVzZXQgY3JvcHBpbmcgcGFyYW1ldGVycyBhdCBvcGVuKCksIGRlZmF1bHQgIgpAQCAtNDQ2MSw4ICs0NDY0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlcyhidHYpOwogCX0KIAotCWluaXRfYnR0dl9pMmNfaXIoYnR2KTsKLQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwlpZiAoIWRpc2FibGVfaXIpIHsKKwkJaW5pdF9idHR2X2kyY19pcihidHYpOworCQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwl9CiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KIAlidHR2X251bSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwppbmRleCAyNzdhMDkyLi5iMzIwZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IGNhcmRfaXIgKmlyOwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaWYgKCFidHYtPmhhc19yZW1vdGUpCkBAIC0zODksNyArMzg5LDcgQEAKIAlidHR2X2lyX3N0YXJ0KGJ0diwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoYnR2LT5yZW1vdGUtPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA3YmI5YzFlLi5jYmJmN2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTE5MDcsNyArMTkwNyw2IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAltdXRleF9pbml0KCZjYW0tPnNfbXV0ZXgpOwotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+ZGV2X2xvY2spOwogCWNhbS0+c3RhdGUgPSBTX05PVFJFQURZOwogCWNhZmVfc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAxKTsKQEAgLTE5NDcsNyArMTk0Niw2IEBACiAJICogYmVjYXVzZSB0aGUgc2Vuc29yIGNvdWxkIGF0dGFjaCBpbiB0aGlzIGNhbGwgY2hhaW4sIGxlYWRpbmcgdG8KIAkgKiB1bnNpZ2h0bHkgZGVhZGxvY2tzLgogCSAqLwotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsgIC8qIGF0dGFjaCBjYW4gZGVhZGxvY2sgKi8KIAlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZWlycTsKQEAgLTE5NzMsNyArMTk3MSw3IEBACiAJY2FtLT52ZGV2LnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CiAJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9zbWJ1czsKKwkJZ290byBvdXRfdW5sb2NrOwogCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CiAKIAkvKgpAQCAtMTk4OCw2ICsxOTg2LDggQEAKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIDA7CiAKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogb3V0X3NtYnVzOgogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKIG91dF9mcmVlaXJxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA1NTFkZGYyLi45MzNhZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzczNyw5ICszNzM3LDYgQEAKIAlpZiAoc2l6ZSA+IEZSQU1FX05VTSpDUElBX01BWF9GUkFNRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY2FtIHx8ICFjYW0tPm9wcykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCiAJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCmluZGV4IGU4YTUwYTYuLmJhZjdlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCkBAIC0xOSwzICsxOSwxNCBAQAogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDE4LgorCitjb25maWcgVklERU9fQ1gxOF9BTFNBCisJdHJpc3RhdGUgIkNvbmV4YW50IDIzNDE4IERNQSBhdWRpbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fQ1gxOCAmJiBTTkQgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNORF9QQ00KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBkaXJlY3QgKERNQSkgYXVkaW8gb24KKwkgIENvbmV4YW50IDIzNDE4IGJhc2VkIFRWIGNhcmRzIHVzaW5nIEFMU0EuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MTgtYWxzYS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQppbmRleCBmN2JmMGVkLi4yZmFkZDlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQpAQCAtMyw4ICszLDEwIEBACiAJY3gxOC1tYWlsYm94Lm8gY3gxOC12YmkubyBjeDE4LWF1ZGlvLm8gY3gxOC12aWRlby5vIGN4MTgtaXJxLm8gXAogCWN4MTgtYXYtY29yZS5vIGN4MTgtYXYtYXVkaW8ubyBjeDE4LWF2LWZpcm13YXJlLm8gY3gxOC1hdi12YmkubyBjeDE4LXNjYi5vIFwKIAljeDE4LWR2Yi5vIGN4MTgtaW8ubworY3gxOC1hbHNhLW9ianMgOj0gY3gxOC1hbHNhLW1haW4ubyBjeDE4LWFsc2EtcGNtLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMTgpICs9IGN4MTgubworb2JqLSQoQ09ORklHX1ZJREVPX0NYMThfQUxTQSkgKz0gY3gxOC1hbHNhLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjQxZDdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAa2VybmVsbGFicy5jb20+CisgKgorICogIFBvcnRpb25zIG9mIHRoaXMgd29yayB3ZXJlIHNwb25zb3JlZCBieSBPTkVMQU4gTGltaXRlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtdmVyc2lvbi5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1taXhlci5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1wY20uaCIKKworaW50IGN4MThfYWxzYV9kZWJ1ZzsKKworI2RlZmluZSBDWDE4X0RFQlVHX0FMU0FfSU5GTyhmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoY3gxOF9hbHNhX2RlYnVnICYgMikgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCAiY3gxOC1hbHNhIiwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGN4MThfYWxzYV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSAiRGVidWcgbGV2ZWwgKGJpdG1hc2spLiBEZWZhdWx0OiAwXG4iCisJCSAiXHRcdFx0ICAxLzB4MDAwMTogd2FybmluZ1xuIgorCQkgIlx0XHRcdCAgMi8weDAwMDI6IGluZm9cbiIpOworCitNT0RVTEVfQVVUSE9SKCJBbmR5IFdhbGxzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggQUxTQSBJbnRlcmZhY2UiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJDWDIzNDE4IE1QRUcyIGVuY29kZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX1ZFUlNJT04oQ1gxOF9WRVJTSU9OKTsKKworc3RhdGljIGlubGluZQorc3RydWN0IHNuZF9jeDE4X2NhcmQgKnRvX3NuZF9jeDE4X2NhcmQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gdG9fY3gxOCh2NGwyX2RldiktPmFsc2E7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBzbmRfY3gxOF9jYXJkICpwX3RvX3NuZF9jeDE4X2NhcmQoc3RydWN0IHY0bDJfZGV2aWNlICoqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNuZF9jeDE4X2NhcmQsIHY0bDJfZGV2KTsKK30KKworc3RhdGljIHZvaWQgc25kX2N4MThfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCWlmIChjeHNjID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChjeHNjLT52NGwyX2RldiAhPSBOVUxMKQorCQl0b19jeDE4KGN4c2MtPnY0bDJfZGV2KS0+YWxzYSA9IE5VTEw7CisKKwkvKiBGSVhNRSAtIHRha2UgYW55IG90aGVyIHN0b3BwaW5nIGFjdGlvbnMgbmVlZGVkICovCisKKwlrZnJlZShjeHNjKTsKK30KKworc3RhdGljIHZvaWQgc25kX2N4MThfY2FyZF9wcml2YXRlX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpzYykKK3sKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCXNuZF9jeDE4X2NhcmRfZnJlZShzYy0+cHJpdmF0ZV9kYXRhKTsKKwlzYy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlzYy0+cHJpdmF0ZV9mcmVlID0gTlVMTDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9jYXJkX2NyZWF0ZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKnNjLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqKmN4c2MpCit7CisJKmN4c2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2N4MThfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICgqY3hzYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSgqY3hzYyktPnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJKCpjeHNjKS0+c2MgPSBzYzsKKworCXNjLT5wcml2YXRlX2RhdGEgPSAqY3hzYzsKKwlzYy0+cHJpdmF0ZV9mcmVlID0gc25kX2N4MThfY2FyZF9wcml2YXRlX2ZyZWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9jYXJkX3NldF9uYW1lcyhzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisKKwkvKiBzYy0+ZHJpdmVyIGlzIHVzZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3I6IHNpbXBsZSwgdW5pcXVlICovCisJc3RybGNweShzYy0+ZHJpdmVyLCAiQ1gyMzQxOCIsIHNpemVvZihzYy0+ZHJpdmVyKSk7CisKKwkvKiBzYy0+c2hvcnRuYW1lIGlzIGEgc3ltbGluayBpbiAvcHJvYy9hc291bmQ6IENYMTgtTSAtPiBjYXJkTiAqLworCXNucHJpbnRmKHNjLT5zaG9ydG5hbWUsICBzaXplb2Yoc2MtPnNob3J0bmFtZSksICJDWDE4LSVkIiwKKwkJIGN4LT5pbnN0YW5jZSk7CisKKwkvKiBzYy0+bG9uZ25hbWUgaXMgcmVhZCBmcm9tIC9wcm9jL2Fzb3VuZC9jYXJkcyAqLworCXNucHJpbnRmKHNjLT5sb25nbmFtZSwgc2l6ZW9mKHNjLT5sb25nbmFtZSksCisJCSAiQ1gyMzQxOCAjJWQgJXMgVFYvRk0gUmFkaW8vTGluZS1JbiBDYXB0dXJlIiwKKwkJIGN4LT5pbnN0YW5jZSwgY3gtPmNhcmRfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9pbml0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJc3RydWN0IHNuZF9jYXJkICpzYyA9IE5VTEw7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2M7CisJaW50IHJldDsKKworCS8qIE51bWJycyBzdGVwcyBmcm9tICJXcml0aW5nIGFuIEFMU0EgRHJpdmVyIiBieSBUYWthc2hpIEl3YWkgKi8KKworCS8qICgxKSBDaGVjayBhbmQgaW5jcmVtZW50IHRoZSBkZXZpY2UgaW5kZXggKi8KKwkvKiBUaGlzIGlzIGEgbm8tb3AgZm9yIHVzLiAgV2UnbGwgdXNlIHRoZSBjeC0+aW5zdGFuY2UgKi8KKworCS8qICgyKSBDcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgLyogdXNlIGZpcnN0IGF2YWlsYWJsZSBpZCAqLworCQkJICAgICAgU05EUlZfREVGQVVMVF9TVFIxLCAvKiB4aWQgZnJvbSBlbmQgb2Ygc2hvcnRuYW1lKi8KKwkJCSAgICAgIFRISVNfTU9EVUxFLCAwLCAmc2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jYXJkX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0OworCX0KKworCS8qICgzKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudCAqLworCXJldCA9IHNuZF9jeDE4X2NhcmRfY3JlYXRlKHY0bDJfZGV2LCBzYywgJmN4c2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X2NhcmRfY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXRfZnJlZTsKKwl9CisKKwkvKiAoNCkgU2V0IHRoZSBkcml2ZXIgSUQgYW5kIG5hbWUgc3RyaW5ncyAqLworCXNuZF9jeDE4X2NhcmRfc2V0X25hbWVzKGN4c2MpOworCisKKwlyZXQgPSBzbmRfY3gxOF9wY21fY3JlYXRlKGN4c2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X3BjbV9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdF9mcmVlOworCX0KKwkvKiBGSVhNRSAtIHByb2MgZmlsZXMgKi8KKworCS8qICg3KSBTZXQgdGhlIGRyaXZlciBkYXRhIGFuZCByZXR1cm4gMCAqLworCS8qIFdlIGRvIHRoaXMgb3V0IG9mIG5vcm1hbCBvcmRlciBmb3IgUENJIGRyaXZlcnMgdG8gYXZvaWQgcmFjZXMgKi8KKwljeC0+YWxzYSA9IGN4c2M7CisKKwkvKiAoNikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UgKi8KKwlyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihzYyk7CisJaWYgKHJldCkgeworCQljeC0+YWxzYSA9IE5VTEw7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY2FyZF9yZWdpc3RlcigpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0X2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9leGl0X2ZyZWU6CisJaWYgKHNjICE9IE5VTEwpCisJCXNuZF9jYXJkX2ZyZWUoc2MpOworZXJyX2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGN4MThfYWxzYV9sb2FkKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmN4LT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYTogJXM6IHN0cnVjdCB2NGwyX2RldmljZSAqIGlzIE5VTExcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJaWYgKGN4ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4LWFsc2EgY3ggaXMgTlVMTFxuIik7CisJCXJldHVybiAwOworCX0KKworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpIHsKKwkJQ1gxOF9ERUJVR19BTFNBX0lORk8oIiVzOiBQQ00gc3RyZWFtIGZvciBjYXJkIGlzIGRpc2FibGVkIC0gIgorCQkJCSAgICAgInNraXBwaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjeC0+YWxzYSAhPSBOVUxMKSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqIGFscmVhZHkgZXhpc3RzXG4iLAorCQkJICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc25kX2N4MThfaW5pdCh2NGwyX2RldikpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IGZhaWxlZCB0byBjcmVhdGUgc3RydWN0IHNuZF9jeDE4X2NhcmRcbiIsCisJCQkgICAgICBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJQ1gxOF9ERUJVR19BTFNBX0lORk8oIiVzOiBjcmVhdGVkIGN4MTggQUxTQSBpbnRlcmZhY2UgaW5zdGFuY2UgIgorCQkJCSAgICAgIlxuIiwgX19mdW5jX18pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgY3gxOF9hbHNhX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSBsb2FkaW5nLi4uXG4iKTsKKwljeDE4X2V4dF9pbml0ID0gJmN4MThfYWxzYV9sb2FkOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX2N4MThfZXhpdChzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKworCS8qIEZJWE1FIC0gcG9pbnRlciBjaGVja3MgJiBzaHV0ZG93biBjeHNjICovCisKKwlzbmRfY2FyZF9mcmVlKGN4c2MtPnNjKTsKKwljeC0+YWxzYSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGN4MThfYWxzYV9leGl0X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2M7CisKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYTogJXM6IHN0cnVjdCB2NGwyX2RldmljZSAqIGlzIE5VTExcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWN4c2MgPSB0b19zbmRfY3gxOF9jYXJkKHY0bDJfZGV2KTsKKwlpZiAoY3hzYyA9PSBOVUxMKSB7CisJCUNYMThfQUxTQV9XQVJOKCIlczogc3RydWN0IHNuZF9jeDE4X2NhcmQgKiBpcyBOVUxMXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25kX2N4MThfZXhpdChjeHNjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGN4MThfYWxzYV9leGl0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhOiBtb2R1bGUgdW5sb2FkaW5nLi4uXG4iKTsKKworCWRydiA9IGRyaXZlcl9maW5kKCJjeDE4IiwgJnBjaV9idXNfdHlwZSk7CisJcmV0ID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZShkcnYsIE5VTEwsIE5VTEwsIGN4MThfYWxzYV9leGl0X2NhbGxiYWNrKTsKKwlwdXRfZHJpdmVyKGRydik7CisKKwljeDE4X2V4dF9pbml0ID0gTlVMTDsKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSB1bmxvYWQgY29tcGxldGVcbiIpOworfQorCittb2R1bGVfaW5pdChjeDE4X2Fsc2FfaW5pdCk7Cittb2R1bGVfZXhpdChjeDE4X2Fsc2FfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMTExNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgQUxTQSBtaXhlciBjb250cm9scyBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJjeDE4LWFsc2EuaCIKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorCisvKgorICogTm90ZSB0aGUgY3gxOC1hdi1jb3JlIHZvbHVtZSBzY2FsZSBpcyBmdW5ueSwgZHVlIHRvIHRoZSBhbGlnbm1lbnQgb2YgdGhlCisgKiBzY2FsZSB3aXRoIGFub3RoZXIgY2hpcCdzIHJhbmdlOgorICoKKyAqIHY0bDJfY29udHJvbCB2YWx1ZQkvNTEyCWluZGljYXRlZCBkQglhY3R1YWwgZEIJcmVnIDB4OGQ0CisgKiAweDAwMDAgLSAweDAxZmYJICAwCS0xMTkJCS05NgkJMjI4CisgKiAweDAyMDAgLSAweDAyZmYJICAxCS0xMTgJCS05NgkJMjI4CisgKiAuLi4KKyAqIDB4MmMwMCAtIDB4MmRmZgkgMjIJIC05NwkJLTk2CQkyMjgKKyAqIDB4MmUwMCAtIDB4MmZmZgkgMjMJIC05NgkJLTk2CQkyMjgKKyAqIDB4MzAwMCAtIDB4MzFmZgkgMjQJIC05NQkJLTk1CQkyMjYKKyAqIC4uLgorICogMHhlZTAwIC0gMHhlZmZmCTExOQkgICAwCQkgIDAJCSAzNgorICogLi4uCisgKiAweGZlMDAgLSAweGZmZmYJMTI3CSAgKzgJCSArOAkJIDIwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRCX3RvX2N4MThfYXZfdm9sKGludCBkQikKK3sKKwlpZiAoZEIgPCAtOTYpCisJCWRCID0gLTk2OworCWVsc2UgaWYgKGRCID4gOCkKKwkJZEIgPSA4OworCXJldHVybiAoZEIgKyAxMTkpIDw8IDk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGN4MThfYXZfdm9sX3RvX2RCKGludCB2KQoreworCWlmICh2IDwgKDIzIDw8IDkpKQorCQl2ID0gKDIzIDw8IDkpOworCWVsc2UgaWYgKHYgPiAoMTI3IDw8IDkpKQorCQl2ID0gKDEyNyA8PCA5KTsKKwlyZXR1cm4gKHYgPj4gOSkgLSAxMTk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCS8qIFdlJ3JlIGFscmVhZHkgdHJhbnNsYXRpbmcgdmFsdWVzLCBqdXN0IGtlZXAgdGhpcyBjb250cm9sIGluIGRCICovCisJdWluZm8tPnZhbHVlLmludGVnZXIubWluICA9IC05NjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggID0gICA4OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnN0ZXAgPSAgIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bCkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdGwpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgdmN0cmw7CisJaW50IHJldDsKKworCXZjdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOworCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsICZ2Y3RybCk7CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJaWYgKCFyZXQpCisJCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjeDE4X2F2X3ZvbF90b19kQih2Y3RybC52YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9taXhlcl90dl92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX2tjb250cm9sX2NoaXAoa2N0bCk7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJc3RydWN0IHY0bDJfY29udHJvbCB2Y3RybDsKKwlpbnQgcmV0OworCisJdmN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7CisJdmN0cmwudmFsdWUgPSBkQl90b19jeDE4X2F2X3ZvbCh1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisKKwkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIGdfY3RybCwgJnZjdHJsKTsKKworCWlmIChyZXQgfHwKKwkgICAgKGN4MThfYXZfdm9sX3RvX2RCKHZjdHJsLnZhbHVlKSAhPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSkgeworCisJCS8qIFNldCwgaWYgbmVlZGVkICovCisJCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBzX2N0cmwsICZ2Y3RybCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gMTsgLyogSW5kaWNhdGUgY29udHJvbCB3YXMgY2hhbmdlZCB3L28gZXJyb3IgKi8KKwl9CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiBUaGlzIGlzIGEgYml0IG9mIG92ZXJraWxsLCB0aGUgc2xpZGVyIGlzIGFscmVhZHkgaW4gZEIgaW50ZXJuYWxseSAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKHNuZF9jeDE4X21peGVyX3R2X3ZvbF9kYl9zY2FsZSwgLTk2MDAsIDEwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfY3gxOF9taXhlcl90dl92b2wgX19pbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJBbmFsb2cgVFYgQ2FwdHVyZSBWb2x1bWUiLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLmluZm8gPSBzbmRfY3gxOF9taXhlcl90dl92b2x1bWVfaW5mbywKKwkuZ2V0ID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX2dldCwKKwkucHV0ID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX3B1dCwKKwkudGx2LnAgPSBzbmRfY3gxOF9taXhlcl90dl92b2xfZGJfc2NhbGUKK307CisKKy8qIEZJWE1FIC0gYWRkIG11dGUgc3dpdGNoIGFuZCBiYWxhbmNlLCBiYXNzLCB0cmVibGUgc2xpZGVyczoKKwlWNEwyX0NJRF9BVURJT19NVVRFCisKKwlWNEwyX0NJRF9BVURJT19CQUxBTkNFCisKKwlWNEwyX0NJRF9BVURJT19CQVNTCisJVjRMMl9DSURfQVVESU9fVFJFQkxFCisqLworCisvKiBGSVhNRSAtIGFkZCBzdGVyZW8sIGxhbmcxLCBsYW5nMiwgbW9ubyBtZW51ICovCisvKiBGSVhNRSAtIGFkZCBDUzUzNDUgSTJTIHZvbHVtZSBmb3IgSFZSLTE2MDAgKi8KKworaW50IF9faW5pdCBzbmRfY3gxOF9taXhlcl9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKwlpbnQgcmV0OworCisJc3RybGNweShzYy0+bWl4ZXJuYW1lLCAiQ1gyMzQxOCBNaXhlciIsIHNpemVvZihzYy0+bWl4ZXJuYW1lKSk7CisKKwlyZXQgPSBzbmRfY3RsX2FkZChzYywgc25kX2N0bF9uZXcxKHNuZF9jeDE4X21peGVyX3R2X3ZvbCwgY3hzYykpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX1dBUk4oIiVzOiBmYWlsZWQgdG8gYWRkICVzIGNvbnRyb2wsIGVyciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc25kX2N4MThfbWl4ZXJfdHZfdm9sLm5hbWUsIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0MThkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIEFMU0EgbWl4ZXIgY29udHJvbHMgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK2ludCBfX2luaXQgc25kX2N4MThfbWl4ZXJfY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogIEFMU0EgUENNIGRldmljZSBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAa2VybmVsbGFicy5jb20+CisgKgorICogIFBvcnRpb25zIG9mIHRoaXMgd29yayB3ZXJlIHNwb25zb3JlZCBieSBPTkVMQU4gTGltaXRlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCisjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCisjaW5jbHVkZSAiY3gxOC1maWxlb3BzLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNtX2RlYnVnOworbW9kdWxlX3BhcmFtKHBjbV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocGNtX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIGZvciBwY20iKTsKKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKSBkbyB7CQkJCQlcCisJICAgIGlmIChwY21fZGVidWcpCQkJCQkJXAorCQlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2EtcGNtICVzOiAiIGZtdCwJCVwKKwkJCQkgIF9fZnVuY19fLCAjI2FyZyk7IAkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2N4MThfaHdfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCAgICAgICAgICAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCAgICB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDYyNzIwICogOCwJLyoganVzdCBhYm91dCB0aGUgdmFsdWUgaW4gdXNiYXVkaW8uYyAqLworCS5wZXJpb2RfYnl0ZXNfbWluID0gNjQsCQkvKiAxMjU0NC8yLCAqLworCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI1NDQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA5OCwJCS8qIDEyNTQ0LCAqLworfTsKKwordm9pZCBjeDE4X2Fsc2FfYW5ub3VuY2VfcGNtX2RhdGEoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MsIHU4ICpwY21fZGF0YSwKKwkJCQkgc2l6ZV90IG51bV9ieXRlcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBvbGRwdHI7CisJdW5zaWduZWQgaW50IHN0cmlkZTsKKwlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOworCWludCBsZW5ndGg7CisKKwlkcHJpbnRrKCJjeDE4IGFsc2EgYW5ub3VuY2UgcHRyPSVwIGRhdGE9JXAgbnVtX2J5dGVzPSV6ZFxuIiwgY3hzYywKKwkJcGNtX2RhdGEsIG51bV9ieXRlcyk7CisKKwlzdWJzdHJlYW0gPSBjeHNjLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW07CisJaWYgKHN1YnN0cmVhbSA9PSBOVUxMKSB7CisJCWRwcmludGsoInN1YnN0cmVhbSB3YXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChydW50aW1lID09IE5VTEwpIHsKKwkJZHByaW50aygicnVudGltZSB3YXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzdHJpZGUgPSBydW50aW1lLT5mcmFtZV9iaXRzID4+IDM7CisJaWYgKHN0cmlkZSA9PSAwKSB7CisJCWRwcmludGsoInN0cmlkZSBpcyB6ZXJvXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxlbmd0aCA9IG51bV9ieXRlcyAvIHN0cmlkZTsKKwlpZiAobGVuZ3RoID09IDApIHsKKwkJZHByaW50aygiJXM6IGxlbmd0aCB3YXMgemVyb1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhID09IE5VTEwpIHsKKwkJZHByaW50aygiZG1hIGFyZWEgd2FzIE5VTEwgLSBpZ25vcmluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlvbGRwdHIgPSBjeHNjLT5od3B0cl9kb25lX2NhcHR1cmU7CisJaWYgKG9sZHB0ciArIGxlbmd0aCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQl1bnNpZ25lZCBpbnQgY250ID0KKwkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gb2xkcHRyOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIHBjbV9kYXRhLAorCQkgICAgICAgY250ICogc3RyaWRlKTsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBwY21fZGF0YSArIGNudCAqIHN0cmlkZSwKKwkJICAgICAgIGxlbmd0aCAqIHN0cmlkZSAtIGNudCAqIHN0cmlkZSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBwY21fZGF0YSwKKwkJICAgICAgIGxlbmd0aCAqIHN0cmlkZSk7CisJfQorCXNuZF9wY21fc3RyZWFtX2xvY2soc3Vic3RyZWFtKTsKKworCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSArPSBsZW5ndGg7CisJaWYgKGN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSA+PQorCSAgICBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlIC09CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCWN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSArPSBsZW5ndGg7CisJaWYgKGN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA+PQorCSAgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgLT0KKwkJCXJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlwZXJpb2RfZWxhcHNlZCA9IDE7CisJfQorCisJc25kX3BjbV9zdHJlYW1fdW5sb2NrKHN1YnN0cmVhbSk7CisKKwlpZiAocGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkIGl0ZW07CisJaW50IHJldDsKKworCS8qIEluc3RydWN0IHRoZSBjeDE4IHRvIHN0YXJ0IHNlbmRpbmcgcGFja2V0cyAqLworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCisJaXRlbS5jeCA9IGN4OworCWl0ZW0udHlwZSA9IHMtPnR5cGU7CisJaXRlbS5vcGVuX2lkID0gY3gtPm9wZW5faWQrKzsKKworCS8qIFNlZSBpZiB0aGUgc3RyZWFtIGlzIGF2YWlsYWJsZSAqLworCWlmIChjeDE4X2NsYWltX3N0cmVhbSgmaXRlbSwgaXRlbS50eXBlKSkgeworCQkvKiBObywgaXQncyBhbHJlYWR5IGluIHVzZSAqLworCQlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTU9GRiwgJnMtPnNfZmxhZ3MpIHx8CisJICAgIHRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpIHsKKwkJLyogV2UncmUgYWxyZWFkeSBzdHJlYW1pbmcuICBObyBhZGRpdGlvbmFsIGFjdGlvbiByZXF1aXJlZCAqLworCQlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisJCXJldHVybiAwOworCX0KKworCisJcnVudGltZS0+aHcgPSBzbmRfY3gxOF9od19jYXB0dXJlOworCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwljeHNjLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gY3g7CisKKwljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrID0gY3gxOF9hbHNhX2Fubm91bmNlX3BjbV9kYXRhOworCisJLyogTm90IGN1cnJlbnRseSBzdHJlYW1pbmcsIHNvIHN0YXJ0IGl0IHVwICovCisJc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKKwlyZXQgPSBjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzKTsKKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJc3RydWN0IGN4MThfc3RyZWFtICpzOworCWludCByZXQ7CisKKwkvKiBJbnN0cnVjdCB0aGUgY3gxOCB0byBzdG9wIHNlbmRpbmcgcGFja2V0cyAqLworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCXJldCA9IGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CisJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOworCisJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsKKworCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2sgPSBOVUxMOworCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2lvY3RsKHN1YnN0cmVhbSwgY21kLCBhcmcpOworfQorCisKK3N0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCisJCQkJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOworCisJZHByaW50aygiQWxsb2NhdGluZyB2YnVmZmVyXG4iKTsKKwlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCisJCQlyZXR1cm4gMDsKKworCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJfQorCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkgICBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgeworCQlkcHJpbnRrKCJmcmVlaW5nIHBjbSBjYXB0dXJlIHJlZ2lvblxuIik7CisJCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlID0gMDsKKwljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYworc25kX3BjbV91ZnJhbWVzX3Qgc25kX2N4MThfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisJaHdwdHJfZG9uZSA9IGN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGh3cHRyX2RvbmU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkICpwYWdlcHRyID0gc3Vicy0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jeDE4X3BjbV9jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcGVuLAorCS5jbG9zZQkJPSBzbmRfY3gxOF9wY21fY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX2N4MThfcGNtX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfY3gxOF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlCT0gc25kX2N4MThfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzbmRfY3gxOF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNuZF9jeDE4X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gc25kX2N4MThfcGNtX3BvaW50ZXIsCisJLnBhZ2UJCT0gc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorfTsKKworaW50IHNuZF9jeDE4X3BjbV9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IHNuZF9wY20gKnNwOworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9wY21fbmV3KHNjLCAiQ1gyMzQxOCBQQ00iLAorCQkJICAwLCAvKiBQQ00gZGV2aWNlIDAsIHRoZSBvbmx5IG9uZSBmb3IgdGhpcyBjYXJkICovCisJCQkgIDAsIC8qIDAgcGxheWJhY2sgc3Vic3RyZWFtcyAqLworCQkJICAxLCAvKiAxIGNhcHR1cmUgc3Vic3RyZWFtICovCisJCQkgICZzcCk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfcGNtX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0OworCX0KKworCXNwaW5fbG9ja19pbml0KCZjeHNjLT5zbG9jayk7CisKKwlzbmRfcGNtX3NldF9vcHMoc3AsIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCSZzbmRfY3gxOF9wY21fY2FwdHVyZV9vcHMpOworCXNwLT5pbmZvX2ZsYWdzID0gMDsKKwlzcC0+cHJpdmF0ZV9kYXRhID0gY3hzYzsKKwlzdHJsY3B5KHNwLT5uYW1lLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2Yoc3AtPm5hbWUpKTsKKworCXJldHVybiAwOworCitlcnJfZXhpdDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1NjYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBBTFNBIFBDTSBkZXZpY2UgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK2ludCBfX2luaXQgc25kX2N4MThfcGNtX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyk7CisKKy8qIFVzZWQgYnkgY3gxOC1tYWlsYm94IHRvIGFubm91bmNlIHRoZSBQQ00gZGF0YSB0byB0aGUgbW9kdWxlICovCit2b2lkIGN4MThfYWxzYV9hbm5vdW5jZV9wY21fZGF0YShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY2FyZCwgdTggKnBjbV9kYXRhLAorCQkJCSBzaXplX3QgbnVtX2J5dGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGExY2RlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworc3RydWN0IHNuZF9jYXJkOworCitzdHJ1Y3Qgc25kX2N4MThfY2FyZCB7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjOworCXVuc2lnbmVkIGludCBjYXB0dXJlX3RyYW5zZmVyX2RvbmU7CisJdW5zaWduZWQgaW50IGh3cHRyX2RvbmVfY2FwdHVyZTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKwlzcGlubG9ja190IHNsb2NrOworfTsKKworZXh0ZXJuIGludCBjeDE4X2Fsc2FfZGVidWc7CisKKy8qCisgKiBGaWxlIG9wZXJhdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBlbmNvZGVyIG9yIHZpZGVvIG9yIGF1ZGlvIHN1YmRldmljZXMKKyAqIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4gIFVzZSB0aGUgc2FtZSBsb2NrIHdlIHVzZSBmb3IgdjRsMiBmaWxlIG9wcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNuZF9jeDE4X2xvY2soc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9jeDE4X3VubG9jayhzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7Cit9CisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RCR0ZMR19XQVJOICAoMSA8PCAwKQorI2RlZmluZSBDWDE4X0FMU0FfREJHRkxHX1dBUk4gICgxIDw8IDApCisjZGVmaW5lIENYMThfQUxTQV9EQkdGTEdfSU5GTyAgKDEgPDwgMSkKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmICgoeCkgJiBjeDE4X2Fsc2FfZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzLWFsc2E6ICIgdHlwZSAiOiAiIGZtdCwgXAorCQkJCXY0bDJfZGV2LT5uYW1lICwgIyMgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENYMThfQUxTQV9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgXAorCUNYMThfQUxTQV9ERUJVRyhDWDE4X0FMU0FfREJHRkxHX1dBUk4sICJ3YXJuaW5nIiwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUdfSU5GTyhmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0FMU0FfREVCVUcoQ1gxOF9BTFNBX0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0VSUihmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgIiVzLWFsc2E6ICIgZm10LCB2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX1dBUk4oZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMtYWxzYTogIiBmbXQsIHY0bDJfZGV2LT5uYW1lICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfSU5GTyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPICIlcy1hbHNhOiAiIGZtdCwgdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggZjExZTQ3YS4uZjgwOGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkuZ3Bpb19pbml0LmRpcmVjdGlvbiA9IDB4NywKIAkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4NywKIAkJCSAgICAgIC50dW5lciAgPSAweDYsIC5saW5laW4gPSAweDIsIC5yYWRpbyAgPSAweDIgfSwKLQkueGNlaXZlX3BpbiA9IDE1LAorCS54Y2VpdmVfcGluID0gMSwKIAkucGNpX2xpc3QgPSBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDAsCiAJLmkyYyA9ICZjeDE4X2kyY19zdGQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCA3ZjY1YTQ3Li5jOTVhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtNDcsNiArNDcsMTAgQEAKICAgIHNldHRpbmcgdGhpcyB0byAxIHlvdSBlbnN1cmUgdGhhdCByYWRpbzAgaXMgbm93IGFsc28gcmFkaW8xLiAqLwogaW50IGN4MThfZmlyc3RfbWlub3I7CiAKKy8qIENhbGxiYWNrIGZvciByZWdpc3RlcmluZyBleHRlbnNpb25zICovCitpbnQgKCpjeDE4X2V4dF9pbml0KShzdHJ1Y3QgY3gxOCAqKTsKK0VYUE9SVF9TWU1CT0woY3gxOF9leHRfaW5pdCk7CisKIC8qIGFkZCB5b3VyIHJldmlzaW9uIGFuZCB3aGF0bm90IGhlcmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeDE4X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0NYLCBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsCkBAIC05MSw3ICs5NSw3IEBACiAKIHN0YXRpYyBpbnQgZW5jX3RzX2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX21wZ19idWZzID0gLTE7Ci1zdGF0aWMgaW50IGVuY19pZHhfYnVmcyA9IC0xOworc3RhdGljIGludCBlbmNfaWR4X2J1ZnMgPSBDWDE4X01BWF9GV19NRExTX1BFUl9TVFJFQU07CiBzdGF0aWMgaW50IGVuY195dXZfYnVmcyA9IC0xOwogc3RhdGljIGludCBlbmNfdmJpX2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX3BjbV9idWZzID0gLTE7CkBAIC0xOTYsMTQgKzIwMCwxNyBAQAogCQkgIk51bWJlciBvZiBlbmNvZGVyIE1QRyBidWZmZXJzXG4iCiAJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19tcGdfKiBwYXJhbWV0ZXJzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmZmVycywKLQkJICJFbmNvZGVyIElEWCBidWZmZXIgbWVtb3J5IChNQikuIChlbmNfaWR4X2J1ZnMgY2FuIG92ZXJyaWRlKVxuIgotCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGRkVSUykpOworCQkgIihEZXByZWNhdGVkKSBFbmNvZGVyIElEWCBidWZmZXIgbWVtb3J5IChNQilcbiIKKwkJICJcdFx0XHRJZ25vcmVkLCBleGNlcHQgMCBkaXNhYmxlcyBJRFggYnVmZmVyIGFsbG9jYXRpb25zXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogMSBbRW5hYmxlZF0iKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzaXplLAogCQkgIlNpemUgb2YgYW4gZW5jb2RlciBJRFggYnVmZmVyIChrQilcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRlNJWkUpKTsKKwkJICJcdFx0XHRBbGxvd2VkIHZhbHVlcyBhcmUgbXVsdGlwbGVzIG9mIDEuNSBrQiByb3VuZGVkIHVwXG4iCisJCSAiXHRcdFx0KG11bHRpcGxlcyBvZiBzaXplIHJlcXVpcmVkIGZvciA2NCBpbmRleCBlbnRyaWVzKVxuIgorCQkgIlx0XHRcdERlZmF1bHQ6IDIiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzLAogCQkgIk51bWJlciBvZiBlbmNvZGVyIElEWCBidWZmZXJzXG4iCi0JCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19pZHhfKiBwYXJhbWV0ZXJzIik7CisJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X01BWF9GV19NRExTX1BFUl9TVFJFQU0pKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX3l1dl9idWZmZXJzLAogCQkgIkVuY29kZXIgWVVWIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY195dXZfYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX1lVVl9CVUZGRVJTKSk7CkBAIC0yMzEsNyArMjM4LDggQEAKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBQQ00gYnVmZmVyc1xuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfcGNtXyogcGFyYW1ldGVycyIpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKK01PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwKKwkJICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKIAogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggZHJpdmVyIik7CkBAIC0yNDAsNiArMjQ4LDI4IEBACiAKIE1PRFVMRV9WRVJTSU9OKENYMThfVkVSU0lPTik7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRSkKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3gxOCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDE4LCByZXF1ZXN0X21vZHVsZV93ayk7CisKKwkvKiBNYWtlIHN1cmUgY3gxOC1hbHNhIG1vZHVsZSBpcyBsb2FkZWQgKi8KKwlyZXF1ZXN0X21vZHVsZSgiY3gxOC1hbHNhIik7CisKKwkvKiBJbml0aWFsaXplIGN4MTgtYWxzYSBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgY3gxOCBkZXZpY2UgKi8KKwlpZiAoY3gxOF9leHRfaW5pdCAhPSBOVUxMKQorCQljeDE4X2V4dF9pbml0KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqZGV2KQoreworCUlOSVRfV09SSygmZGV2LT5yZXF1ZXN0X21vZHVsZV93aywgcmVxdWVzdF9tb2R1bGVfYXN5bmMpOworCXNjaGVkdWxlX3dvcmsoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOworfQorI2Vsc2UKKyNkZWZpbmUgcmVxdWVzdF9tb2R1bGVzKGRldikKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLworCiAvKiBHZW5lcmljIHV0aWxpdHkgZnVuY3Rpb25zICovCiBpbnQgY3gxOF9tc2xlZXBfdGltZW91dCh1bnNpZ25lZCBpbnQgbXNlY3MsIGludCBpbnRyKQogewpAQCAtNTAxLDcgKzUzMSwxMiBAQAogCQkvKgogCQkgKiBZVVYgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBuZWVkcyB0byBiZQogCQkgKiBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiAzMy43NSBrQiAoc3RvcmFnZSBmb3IgMzIgc2NyZWVucwotCQkgKiBsaW5lcyB0byBtYWludGFpbiBhbGlnbm1lbnQgaW4gY2FzZSBvZiBsb3N0IGJ1ZmZlcnMKKwkJICogbGluZXMgdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzKS4KKwkJICoKKwkJICogSURYIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgc2hvdWxkIGJlCisJCSAqIGFuIGludGVncmFsIG11bHRpcGxlIG9mIDEuNSBrQiAoc3RvcmFnZSBmb3IgNjQgaW5kZXggZW50cmllcworCQkgKiB0byBtYWludGFpbiBhbGlnbm1lbnQgaW4gY2FzZSBvZiBsb3N0IGJ1ZmZlcnMpLgorCQkgKgogCQkgKi8KIAkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CiAJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7CkBAIC01MTEsMTUgKzU0NiwyNCBAQAogCQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPCBDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFKQogCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPQogCQkJCQkJQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRTsKKwkJfSBlbHNlIGlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAqPSAxMDI0OworCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAtPQorCQkJICAgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gJSBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFKTsKKworCQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPCBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFKQorCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPQorCQkJCQkJQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRTsKIAkJfQogCQkvKgotCQkgKiBZVVYgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcworCQkgKiBZVVYgYW5kIElEWCBhcmUgc3BlY2lhbCBjYXNlcyB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIGlzCiAJCSAqIG5vdyBpbiBieXRlcy4KIAkJICogVkJJIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMgZml4ZWQKIAkJICogYW5kIGFscmVhZHkgaW4gYnl0ZXMKIAkJICovCiAJCWlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSB8fAotCQkgICAgaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJICAgIGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWIHx8CisJCSAgICBpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgewogCQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKIAkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPQogCQkJCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gKiAxMDI0ICogMTAyNApAQCAtMTAzMiw2ICsxMDc2LDEwIEBACiAJfQogCiAJQ1gxOF9JTkZPKCJJbml0aWFsaXplZCBjYXJkOiAlc1xuIiwgY3gtPmNhcmRfbmFtZSk7CisKKwkvKiBMb2FkIGN4MTggc3VibW9kdWxlcyAoY3gxOC1hbHNhKSAqLworCXJlcXVlc3RfbW9kdWxlcyhjeCk7CisKIAlyZXR1cm4gMDsKIAogZnJlZV9zdHJlYW1zOgpAQCAtMTIyMCw2ICsxMjY4LDcgQEAKIAlrZnJlZShjeCk7CiB9CiAKKwogLyogZGVmaW5lIGEgcGNpX2RyaXZlciBmb3IgY2FyZCBkZXRlY3Rpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjeDE4X3BjaV9kcml2ZXIgPSB7CiAgICAgICAubmFtZSA9ICAgICAiY3gxOCIsCkBAIC0xMjMwLDcgKzEyNzksOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtb2R1bGVfc3RhcnQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsIENYMThfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxODogIFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLAorCSAgICAgICBDWDE4X1ZFUlNJT04pOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCWlmIChjeDE4X2ZpcnN0X21pbm9yIDwgMCB8fCBjeDE4X2ZpcnN0X21pbm9yID49IENYMThfTUFYX0NBUkRTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCmluZGV4IGUzZjc5MTEuLjIzYWQ2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCkBAIC0xMjYsMTAgKzEyNiwyMiBAQAogI2RlZmluZSBDWDE4XzYyNV9MSU5FX0VOQ19ZVVZfQlVGU0laRQkoQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSAqIDU3Ni8zMikKICNkZWZpbmUgQ1gxOF81MjVfTElORV9FTkNfWVVWX0JVRlNJWkUJKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiA0ODAvMzIpCiAKKy8qIElEWCBidWZmZXIgc2l6ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiB0aGUgaW5kZXggZW50cnkgc2l6ZSBmcm9tIHRoZSBjaGlwICovCitzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5IHsKKwlfX2xlMzIgbGVuZ3RoOworCV9fbGUzMiBvZmZzZXRfbG93OworCV9fbGUzMiBvZmZzZXRfaGlnaDsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIHB0c19sb3c7CisJX19sZTMyIHB0c19oaWdoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUgXAorCShzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSkgKiBWNEwyX0VOQ19JRFhfRU5UUklFUykKKwogLyogRE1BIGJ1ZmZlciwgZGVmYXVsdCBzaXplIGluIGtCIGFsbG9jYXRlZCAqLwogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX1RTX0JVRlNJWkUgICAzMgogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZTSVpFICAzMgotI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFICAzMgorI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFICAoQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSAqIDEgLyAxMDI0ICsgMSkKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGU0laRSAgKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiAzIC8gMTAyNCArIDEpCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfUENNX0JVRlNJWkUgICA0CiAKQEAgLTIzNCwxNiArMjQ2LDggQEAKICNkZWZpbmUgQ1gxOF9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybihkZXYsIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIENYMThfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oZGV2LCBmbXQgLCAjIyBhcmdzKQogCi0vKiBWYWx1ZXMgZm9yIENYMThfQVBJX0RFQ19QTEFZQkFDS19TUEVFRCBtcGVnX2ZyYW1lX3R5cGVfbWFzayBwYXJhbWV0ZXI6ICovCi0jZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUUgMQotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfSUZSQU1FX1BGUkFNRSAzCi0jZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9BTEwgNwotCi0jZGVmaW5lIENYMThfTUFYX1BHTV9JTkRFWCAoNDAwKQotCiBleHRlcm4gaW50IGN4MThfZGVidWc7CiAKLQogc3RydWN0IGN4MThfb3B0aW9ucyB7CiAJaW50IG1lZ2FieXRlc1tDWDE4X01BWF9TVFJFQU1TXTsgLyogU2l6ZSBpbiBtZWdhYnl0ZXMgb2YgZWFjaCBzdHJlYW0gKi8KIAlpbnQgY2FyZHR5cGU7CQkvKiBmb3JjZSBjYXJkIHR5cGUgb24gbG9hZCAqLwpAQCAtMjc2LDYgKzI4MCwxOCBAQAogI2RlZmluZSBDWDE4X1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgICg1KQogI2RlZmluZSBDWDE4X1NMSUNFRF9UWVBFX1ZQUyAgICAgICAgICAgICg3KQogCisvKioKKyAqIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQgLSBjaGVjayBpZiBhIHByZXZpb3VzIGxvb3AgY3Vyc29yIGlzIG9mZiBsaXN0IGVuZAorICogQHBvczoJdGhlIHR5cGUgKiBwcmV2aW91c2x5IHVzZWQgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIENoZWNrIGlmIHRoZSBlbnRyeSdzIGxpc3RfaGVhZCBpcyB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgdGh1cyBpdCdzIG5vdCBhCisgKiByZWFsIGVudHJ5IGJ1dCB3YXMgdGhlIGxvb3AgY3Vyc29yIHRoYXQgd2Fsa2VkIHBhc3QgdGhlIGVuZAorICovCisjZGVmaW5lIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoJnBvcy0+bWVtYmVyID09IChoZWFkKSkKKwogc3RydWN0IGN4MThfYnVmZmVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwpAQCAtNTU4LDYgKzU3NCwxMCBAQAogCWludCBzdHJlYW1fYnVmZmVyc1tDWDE4X01BWF9TVFJFQU1TXTsgLyogIyBvZiBidWZmZXJzIGZvciBlYWNoIHN0cmVhbSAqLwogCWludCBzdHJlYW1fYnVmX3NpemVbQ1gxOF9NQVhfU1RSRUFNU107IC8qIFN0cmVhbSBidWZmZXIgc2l6ZSAqLwogCXN0cnVjdCBjeDE4X3N0cmVhbSBzdHJlYW1zW0NYMThfTUFYX1NUUkVBTVNdOyAJLyogU3RyZWFtIGRhdGEgKi8KKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqYWxzYTsgLyogQUxTQSBpbnRlcmZhY2UgZm9yIFBDTSBjYXB0dXJlIHN0cmVhbSAqLworCXZvaWQgKCpwY21fYW5ub3VuY2VfY2FsbGJhY2spKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjYXJkLCB1OCAqcGNtX2RhdGEsCisJCQkJICAgICAgc2l6ZV90IG51bV9ieXRlcyk7CisKIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAvKiBnbG9iYWwgY3gxOCBmbGFncyAqLwogCWF0b21pY190IGFuYV9jYXB0dXJpbmc7CS8qIGNvdW50IG51bWJlciBvZiBhY3RpdmUgYW5hbG9nIGNhcHR1cmUgc3RyZWFtcyAqLwogCWF0b21pY190IHRvdF9jYXB0dXJpbmc7CS8qIHRvdGFsIGNvdW50IG51bWJlciBvZiBhY3RpdmUgY2FwdHVyZSBzdHJlYW1zICovCkBAIC01NzUsMTIgKzU5NSw2IEBACiAKIAlzdHJ1Y3QgdmJpX2luZm8gdmJpOwogCi0JdTMyIHBnbV9pbmZvX29mZnNldDsKLQl1MzIgcGdtX2luZm9fbnVtOwotCXUzMiBwZ21faW5mb193cml0ZV9pZHg7Ci0JdTMyIHBnbV9pbmZvX3JlYWRfaWR4OwotCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgcGdtX2luZm9bQ1gxOF9NQVhfUEdNX0lOREVYXTsKLQogCXU2NCBtcGdfZGF0YV9yZWNlaXZlZDsKIAl1NjQgdmJpX2RhdGFfaW5zZXJ0ZWQ7CiAKQEAgLTYyMyw2ICs2MzcsOSBAQAogCXUzMiBhY3RpdmVfaW5wdXQ7CiAJdjRsMl9zdGRfaWQgc3RkOwogCXY0bDJfc3RkX2lkIHR1bmVyX3N0ZDsJLyogVGhlIG5vcm0gb2YgdGhlIHR1bmVyIChmaXhlZCkgKi8KKworCS8qIFVzZWQgZm9yIGN4MTgtYWxzYSBtb2R1bGUgbG9hZGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X21vZHVsZV93azsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGN4MTggKnRvX2N4MTgoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKQEAgLTYzMCw2ICs2NDcsOSBAQAogCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDE4LCB2NGwyX2Rldik7CiB9CiAKKy8qIGN4MTggZXh0ZW5zaW9ucyB0byBiZSBsb2FkZWQgKi8KK2V4dGVybiBpbnQgKCpjeDE4X2V4dF9pbml0KShzdHJ1Y3QgY3gxOCAqKTsKKwogLyogR2xvYmFscyAqLwogZXh0ZXJuIGludCBjeDE4X2ZpcnN0X21pbm9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCmluZGV4IDcxYWQyZDEuLjBhZTJjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCkBAIC0yMTMsMTAgKzIxMywxNCBAQAogewogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0gPSAoc3RydWN0IGN4MThfc3RyZWFtICopIGRlbXV4LT5wcml2OwotCXN0cnVjdCBjeDE4ICpjeCA9IHN0cmVhbS0+Y3g7CisJc3RydWN0IGN4MTggKmN4OwogCWludCByZXQ7CiAJdTMyIHY7CiAKKwlpZiAoIXN0cmVhbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeCA9IHN0cmVhbS0+Y3g7CiAJQ1gxOF9ERUJVR19JTkZPKCJTdGFydCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCiAJCQlmZWVkLT5waWQsIGZlZWQtPmluZGV4KTsKIApAQCAtMjUzLDEyICsyNTcsMTAgQEAKIAlpZiAoIWRlbXV4LT5kbXguZnJvbnRlbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFzdHJlYW0pCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwogCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nKysgPT0gMCkgewogCQlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0aW5nIFRyYW5zcG9ydCBETUFcbiIpOworCQltdXRleF9sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQlzZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CiAJCXJldCA9IGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cmVhbSk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0yNjcsNiArMjY5LDcgQEAKIAkJCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApCiAJCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCX0gZWxzZQogCQlyZXQgPSAwOwogCW11dGV4X3VubG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwpAQCAtMjc5LDE3ICsyODIsMjAgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtID0gKHN0cnVjdCBjeDE4X3N0cmVhbSAqKWRlbXV4LT5wcml2OwotCXN0cnVjdCBjeDE4ICpjeCA9IHN0cmVhbS0+Y3g7CisJc3RydWN0IGN4MTggKmN4OwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJTdG9wIGZlZWQ6IHBpZCA9IDB4JXggaW5kZXggPSAlZFxuIiwKLQkJCWZlZWQtPnBpZCwgZmVlZC0+aW5kZXgpOwotCiAJaWYgKHN0cmVhbSkgeworCQljeCA9IHN0cmVhbS0+Y3g7CisJCUNYMThfREVCVUdfSU5GTygiU3RvcCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCisJCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7CisKIAkJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwogCQlpZiAoLS1zdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApIHsKIAkJCUNYMThfREVCVUdfSU5GTygiU3RvcHBpbmcgVHJhbnNwb3J0IERNQVxuIik7CisJCQltdXRleF9sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQkJcmV0ID0gY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzdHJlYW0sIDApOworCQkJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQl9IGVsc2UKIAkJCXJldCA9IDA7CiAJCW11dGV4X3VubG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCmluZGV4IGMwODg1YzYuLjg2M2NlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKQEAgLTM3LDE1ICszNywyMSBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGNsYWltIHRoZSBzdHJlYW0gZm9yIGEgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yLgogICAgSWYgbm8gb25lIGVsc2UgaXMgdXNpbmcgdGhpcyBzdHJlYW0gdGhlbiB0aGUgc3RyZWFtIGlzIGNsYWltZWQgYW5kCi0gICBhc3NvY2lhdGVkIFZCSSBzdHJlYW1zIGFyZSBhbHNvIGF1dG9tYXRpY2FsbHkgY2xhaW1lZC4KKyAgIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGNsYWltZWQuCiAgICBQb3NzaWJsZSBlcnJvciByZXR1cm5zOiAtRUJVU1kgaWYgc29tZW9uZSBlbHNlIGhhcyBjbGFpbWVkCiAgICB0aGUgc3RyZWFtIG9yIDAgb24gc3VjY2Vzcy4gKi8KLXN0YXRpYyBpbnQgY3gxOF9jbGFpbV9zdHJlYW0oc3RydWN0IGN4MThfb3Blbl9pZCAqaWQsIGludCB0eXBlKQoraW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwotCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192Ymk7Ci0JaW50IHZiaV90eXBlOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19hc3NvYzsKKworCS8qIE5vdGhpbmcgc2hvdWxkIGV2ZXIgdHJ5IHRvIGRpcmVjdGx5IGNsYWltIHRoZSBJRFggc3RyZWFtICovCisJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCUNYMThfV0FSTigiTVBFRyBJbmRleCBzdHJlYW0gY2Fubm90IGJlIGNsYWltZWQgIgorCQkJICAiZGlyZWN0bHksIGJ1dCBzb21ldGhpbmcgdHJpZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnMtPnNfZmxhZ3MpKSB7CiAJCS8qIHNvbWVvbmUgYWxyZWFkeSBjbGFpbWVkIHRoaXMgc3RyZWFtICovCkBAIC02NywzMiArNzMsNDcgQEAKIAl9CiAJcy0+aWQgPSBpZC0+b3Blbl9pZDsKIAotCS8qIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byBjbGFpbSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkKLQkgICAocHJvdmlkZWQgVkJJIGluc2VydGlvbiBpcyBvbiBhbmQgc2xpY2VkIFZCSSBpcyBzZWxlY3RlZCksIGZvciBhbGwKLQkgICBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUgKi8KLQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkgICAgY3gtPnZiaS5pbnNlcnRfbXBlZyAmJiAhY3gxOF9yYXdfdmJpKGN4KSkgewotCQl2YmlfdHlwZSA9IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSTsKLQl9IGVsc2UgeworCS8qCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIGNsYWltOgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSwgaWYgVkJJIGluc2VydGlvbiBpcyBvbiBmb3Igc2xpY2VkIFZCSSwgb3IKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgsIGlmIFZCSSBpbnNlcnRpb24gaXMgb2ZmIGZvciBzbGljZWQgVkJJCisJICogKFdlIGRvbid0IHlldCBmaXggdXAgTVBFRyBJbmRleCBlbnRyaWVzIGZvciBvdXIgaW5zZXJ0ZWQgcGFja2V0cykuCisJICoKKwkgKiBGb3IgYWxsIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCiAJCXJldHVybiAwOwotCX0KLQlzX3ZiaSA9ICZjeC0+c3RyZWFtc1t2YmlfdHlwZV07CiAKLQlzZXRfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX3ZiaS0+c19mbGFncyk7CisJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmIChjeC0+dmJpLmluc2VydF9tcGVnICYmICFjeDE4X3Jhd192YmkoY3gpKQorCQlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07CisJZWxzZSBpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQoc19hc3NvYykpCisJCXJldHVybiAwOworCisJc2V0X2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc19hc3NvYy0+c19mbGFncyk7CiAKIAkvKiBtYXJrIHRoYXQgaXQgaXMgdXNlZCBpbnRlcm5hbGx5ICovCi0Jc2V0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncyk7CisJc2V0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2Fzc29jLT5zX2ZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9jbGFpbV9zdHJlYW0pOwogCiAvKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIGEgcHJldmlvdXNseSBjbGFpbWVkIHN0cmVhbS4gSXQgd2lsbCB0YWtlIGludG8KICAgIGFjY291bnQgYXNzb2NpYXRlZCBWQkkgc3RyZWFtcy4gKi8KLXN0YXRpYyB2b2lkIGN4MThfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKQordm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19hc3NvYzsKIAogCXMtPmlkID0gLTE7CisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCS8qCisJCSAqIFRoZSBJRFggc3RyZWFtIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBhbmQgY2FuCisJCSAqIG9ubHkgYmUgaW5kaXJlY3RseSB1bmNsYWltZWQgYnkgdW5jbGFpbWluZyB0aGUgTVBHIHN0cmVhbS4KKwkJICovCisJCXJldHVybjsKKwl9CisKIAlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYKIAkJdGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmcy0+c19mbGFncykpIHsKIAkJLyogdGhpcyBzdHJlYW0gaXMgc3RpbGwgaW4gdXNlIGludGVybmFsbHkgKi8KQEAgLTEwNSwyNSArMTI2LDM2IEBACiAKIAljeDE4X2ZsdXNoX3F1ZXVlcyhzKTsKIAotCS8qIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byByZWxlYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSwKLQkgICBmb3IgYWxsIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZSAqLwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKLQkJc192YmkgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKLQllbHNlCisJLyoKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gcmVsZWFzZSB0aGUKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgYW5kL29yIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCBzdHJlYW1zLgorCSAqCisJICogRm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKQogCQlyZXR1cm47CiAKLQkvKiBjbGVhciBpbnRlcm5hbCB1c2UgZmxhZyAqLwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQkvKiB3YXMgYWxyZWFkeSBjbGVhcmVkICovCi0JCXJldHVybjsKKwkvKiBVbmNsYWltIHRoZSBhc3NvY2lhdGVkIE1QRUcgSW5kZXggc3RyZWFtICovCisJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19hc3NvYy0+c19mbGFncykpIHsKKwkJY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX2Fzc29jLT5zX2ZsYWdzKTsKKwkJY3gxOF9mbHVzaF9xdWV1ZXMoc19hc3NvYyk7CiAJfQotCWlmIChzX3ZiaS0+aWQgIT0gLTEpIHsKLQkJLyogVkJJIHN0cmVhbSBzdGlsbCBjbGFpbWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yICovCi0JCXJldHVybjsKKworCS8qIFVuY2xhaW0gdGhlIGFzc29jaWF0ZWQgVkJJIHN0cmVhbSAqLworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfYXNzb2MtPnNfZmxhZ3MpKSB7CisJCWlmIChzX2Fzc29jLT5pZCA9PSAtMSkgeworCQkJLyoKKwkJCSAqIFRoZSBWQkkgc3RyZWFtIGlzIG5vdCBzdGlsbCBjbGFpbWVkIGJ5IGEgZmlsZQorCQkJICogZGVzY3JpcHRvciwgc28gY29tcGxldGVseSB1bmNsYWltIGl0LgorCQkJICovCisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfYXNzb2MtPnNfZmxhZ3MpOworCQkJY3gxOF9mbHVzaF9xdWV1ZXMoc19hc3NvYyk7CisJCX0KIAl9Ci0JY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX3ZiaS0+c19mbGFncyk7Ci0JY3gxOF9mbHVzaF9xdWV1ZXMoc192YmkpOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X3JlbGVhc2Vfc3RyZWFtKTsKIAogc3RhdGljIHZvaWQgY3gxOF9kdWFsd2F0Y2goc3RydWN0IGN4MTggKmN4KQogewpAQCAtMTc3LDkgKzIwOSw3IEBACiAJKmVyciA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7Ci0JCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSBpbmZvIHVwZGF0ZXMgYW5kIHBlbmRpbmcKLQkJCSAgIFZCSSBkYXRhICovCi0KKwkJCS8qIFByb2Nlc3MgcGVuZGluZyBwcm9ncmFtIHVwZGF0ZXMgYW5kIFZCSSBkYXRhICovCiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBjeC0+ZHVhbHdhdGNoX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkgewogCQkJCWN4LT5kdWFsd2F0Y2hfamlmZmllcyA9IGppZmZpZXM7CiAJCQkJY3gxOF9kdWFsd2F0Y2goY3gpOwpAQCAtMzYyLDE4ICszOTIsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLS8qKgotICogbGlzdF9lbnRyeV9pc19wYXN0X2VuZCAtIGNoZWNrIGlmIGEgcHJldmlvdXMgbG9vcCBjdXJzb3IgaXMgb2ZmIGxpc3QgZW5kCi0gKiBAcG9zOgl0aGUgdHlwZSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhIGxvb3AgY3Vyc29yLgotICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCi0gKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCi0gKgotICogQ2hlY2sgaWYgdGhlIGVudHJ5J3MgbGlzdF9oZWFkIGlzIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCB0aHVzIGl0J3Mgbm90IGEKLSAqIHJlYWwgZW50cnkgYnV0IHdhcyB0aGUgbG9vcCBjdXJzb3IgdGhhdCB3YWxrZWQgcGFzdCB0aGUgZW5kCi0gKi8KLSNkZWZpbmUgbGlzdF9lbnRyeV9pc19wYXN0X2VuZChwb3MsIGhlYWQsIG1lbWJlcikgXAotCSgmcG9zLT5tZW1iZXIgPT0gKGhlYWQpKQotCiBzdGF0aWMgc2l6ZV90IGN4MThfY29weV9tZGxfdG9fdXNlcihzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJCXN0cnVjdCBjeDE4X21kbCAqbWRsLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IHVjb3VudCkKIHsKQEAgLTQ5OCw2ICs1MTYsNyBAQAogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192Ymk7CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2lkeDsKIAogCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1JBRCkgewogCQkvKiB5b3UgY2Fubm90IHJlYWQgZnJvbSB0aGVzZSBzdHJlYW0gdHlwZXMuICovCkBAIC01MTYsMjUgKzUzNSwzMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBTdGFydCBWQkkgY2FwdHVyZSBpZiByZXF1aXJlZCAqLworCS8qIFN0YXJ0IGFzc29jaWF0ZWQgVkJJIG9yIElEWCBzdHJlYW0gY2FwdHVyZSBpZiByZXF1aXJlZCAqLwogCXNfdmJpID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0JaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSAmJgotCSAgICAhdGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJLyogTm90ZTogdGhlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSBpcyBjbGFpbWVkCi0JCSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyBjbGFpbWVkLgotCQkgICBXZSBvbmx5IG5lZWQgdG8gc3RhcnQgdGhlIFZCSSBjYXB0dXJpbmcuICovCi0JCWlmIChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSkpIHsKLQkJCUNYMThfREVCVUdfV0FSTigiVkJJIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKLQotCQkJLyogRmFpbHVyZSwgY2xlYW4gdXAgYW5kIHJldHVybiBhbiBlcnJvciAqLwotCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKTsKLQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKLQkJCS8qIGFsc28gcmVsZWFzZXMgdGhlIGFzc29jaWF0ZWQgVkJJIHN0cmVhbSAqLwotCQkJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsKLQkJCXJldHVybiAtRUlPOworCXNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCS8qCisJCSAqIFRoZSBWQkkgYW5kIElEWCBzdHJlYW1zIHNob3VsZCBoYXZlIGJlZW4gY2xhaW1lZAorCQkgKiBhdXRvbWF0aWNhbGx5LCBpZiBmb3IgaW50ZXJuYWwgdXNlLCB3aGVuIHRoZSBNUEcgc3RyZWFtIHdhcworCQkgKiBjbGFpbWVkLiAgV2Ugb25seSBuZWVkIHRvIHN0YXJ0IHRoZXNlIHN0cmVhbXMgY2FwdHVyaW5nLgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfaWR4LT5zX2ZsYWdzKSAmJgorCQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpKSB7CisJCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgpKSB7CisJCQkJQ1gxOF9ERUJVR19XQVJOKCJJRFggY2FwdHVyZSBzdGFydCBmYWlsZWRcbiIpOworCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncyk7CisJCQkJZ290byBzdGFydF9mYWlsZWQ7CisJCQl9CisJCQlDWDE4X0RFQlVHX0lORk8oIklEWCBjYXB0dXJlIHN0YXJ0ZWRcbiIpOwogCQl9Ci0JCUNYMThfREVCVUdfSU5GTygiVkJJIGluc2VydGlvbiBzdGFydGVkXG4iKTsKKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSAmJgorCQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc192YmkpKSB7CisJCQkJQ1gxOF9ERUJVR19XQVJOKCJWQkkgY2FwdHVyZSBzdGFydCBmYWlsZWRcbiIpOworCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJCQkJZ290byBzdGFydF9mYWlsZWQ7CisJCQl9CisJCQlDWDE4X0RFQlVHX0lORk8oIlZCSSBpbnNlcnRpb24gc3RhcnRlZFxuIik7CisJCX0KIAl9CiAKIAkvKiBUZWxsIHRoZSBjYXJkIHRvIHN0YXJ0IGNhcHR1cmluZyAqLwpAQCAtNTQ3LDE5ICs1NzQsMjkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogZmFpbHVyZSwgY2xlYW4gdXAgKi8KK3N0YXJ0X2ZhaWxlZDoKIAlDWDE4X0RFQlVHX1dBUk4oIkZhaWxlZCB0byBzdGFydCBjYXB0dXJpbmcgZm9yIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CiAKLQkvKiBOb3RlOiB0aGUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIGlzIHJlbGVhc2VkCi0JICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBNUEcgc3RyZWFtIGlzIHJlbGVhc2VkLgotCSAgIFdlIG9ubHkgbmVlZCB0byBzdG9wIHRoZSBWQkkgY2FwdHVyaW5nLiAqLwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7Ci0JCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJLyoKKwkgKiBUaGUgYXNzb2NpYXRlZCBWQkkgYW5kIElEWCBzdHJlYW1zIGZvciBpbnRlcm5hbCB1c2UgYXJlIHJlbGVhc2VkCisJICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBNUEcgc3RyZWFtIGlzIHJlbGVhc2VkLiAgV2Ugb25seSBuZWVkIHRvIHN0b3AKKwkgKiB0aGUgYXNzb2NpYXRlZCBzdHJlYW0uCisJICovCisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCS8qIFN0b3AgdGhlIElEWCBzdHJlYW0gd2hpY2ggaXMgYWx3YXlzIGZvciBpbnRlcm5hbCB1c2UgKi8KKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX2lkeCwgMCk7CisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpOworCQl9CisJCS8qIFN0b3AgdGhlIFZCSSBzdHJlYW0sIGlmIG9ubHkgcnVubmluZyBmb3IgaW50ZXJuYWwgdXNlICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2JpdChDWDE4X0ZfU19BUFBMX0lPLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKKwkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJCX0KIAl9CiAJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOwotCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7CisJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsgLyogQWxzbyByZWxlYXNlcyBhc3NvY2lhdGVkIHN0cmVhbXMgKi8KIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNjE4LDYgKzY1NSw4IEBACiB7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpZC0+dHlwZV07CisJc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaSA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHggPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKIAogCUNYMThfREVCVUdfSU9DVEwoImNsb3NlKCkgb2YgJXNcbiIsIHMtPm5hbWUpOwogCkBAIC02MjUsMTcgKzY2NCwxOSBAQAogCiAJLyogU3RvcCBjYXB0dXJpbmcgKi8KIAlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpIHsKLQkJc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaSA9Ci0JCQkmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKLQogCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIGNhcHR1cmVcbiIpOwotCQkvKiBTcGVjaWFsIGNhc2U6IGEgcnVubmluZyBWQkkgY2FwdHVyZSBmb3IgVkJJIGluc2VydGlvbgotCQkgICBpbiB0aGUgbXBlZyBzdHJlYW0uIE5lZWQgdG8gc3RvcCB0aGF0IHRvby4gKi8KLQkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCi0JCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfQVBQTF9JTywgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBlbWJlZGRlZCBWQkkgY2FwdHVyZVxuIik7Ci0JCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKKwkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkJLyogU3RvcCBpbnRlcm5hbCB1c2UgYXNzb2NpYXRlZCBWQkkgYW5kIElEWCBzdHJlYW1zICovCisJCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKKwkJCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIGVtYmVkZGVkIFZCSSAiCisJCQkJCQkiY2FwdHVyZVxuIik7CisJCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCQl9CisJCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpKSB7CisJCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBJRFggY2FwdHVyZVxuIik7CisJCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX2lkeCwgMCk7CisJCQl9CiAJCX0KIAkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgogCQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmcy0+c19mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmgKaW5kZXggOTJlMmQ1ZC4uNWM4ZmNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaApAQCAtMzQsMyArMzQsNiBAQAogdm9pZCBjeDE4X211dGUoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF91bm11dGUoc3RydWN0IGN4MTggKmN4KTsKIAorLyogU2hhcmVkIHdpdGggY3gxOC1hbHNhIG1vZHVsZSAqLworaW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSk7Cit2b2lkIGN4MThfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IDNlNGZjMTkuLmI4MWRkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtNzc1LDEwICs3NzUsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX2N4MThfcHJvY2Vzc19pZHhfZGF0YShzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKKwkJCQkgIHN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKK3sKKwlpbnQgY29uc3VtZWQsIHJlbWFpbmluZzsKKwlzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5ICplX2lkeDsKKwlzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5ICplX2J1ZjsKKworCS8qIEZyYW1lIHR5cGUgbG9va3VwOiAxPUksIDI9UCwgND1CICovCisJY29uc3QgaW50IG1hcHBpbmdbOF0gPSB7CisJCS0xLCBWNEwyX0VOQ19JRFhfRlJBTUVfSSwgVjRMMl9FTkNfSURYX0ZSQU1FX1AsCisJCS0xLCBWNEwyX0VOQ19JRFhfRlJBTUVfQiwgLTEsIC0xLCAtMQorCX07CisKKwkvKgorCSAqIEFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGEgYnVmIGhvbGRzIGFuIGludGVncmFsIG51bWJlciBvZgorCSAqIHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgb2JqZWN0cyBhbmQgaXMgcHJvcGVybHkgYWxpZ25lZC4KKwkgKiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRoZSBtb2R1bGUgb3B0aW9ucyBvbiBJRFggYnVmZmVyIHNpemVzLgorCSAqLworCXJlbWFpbmluZyA9IGJ1Zi0+Ynl0ZXN1c2VkIC0gYnVmLT5yZWFkcG9zOworCWNvbnN1bWVkID0gMDsKKwllX2lkeCA9ICZpZHgtPmVudHJ5W2lkeC0+ZW50cmllc107CisJZV9idWYgPSAoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSAqKSAmYnVmLT5idWZbYnVmLT5yZWFkcG9zXTsKKworCXdoaWxlIChyZW1haW5pbmcgPj0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpICYmCisJICAgICAgIGlkeC0+ZW50cmllcyA8IFY0TDJfRU5DX0lEWF9FTlRSSUVTKSB7CisKKwkJZV9pZHgtPm9mZnNldCA9ICgoKHU2NCkgbGUzMl90b19jcHUoZV9idWYtPm9mZnNldF9oaWdoKSkgPDwgMzIpCisJCQkJfCBsZTMyX3RvX2NwdShlX2J1Zi0+b2Zmc2V0X2xvdyk7CisKKwkJZV9pZHgtPnB0cyA9ICgoKHU2NCkgKGxlMzJfdG9fY3B1KGVfYnVmLT5wdHNfaGlnaCkgJiAxKSkgPDwgMzIpCisJCQkgICAgIHwgbGUzMl90b19jcHUoZV9idWYtPnB0c19sb3cpOworCisJCWVfaWR4LT5sZW5ndGggPSBsZTMyX3RvX2NwdShlX2J1Zi0+bGVuZ3RoKTsKKworCQllX2lkeC0+ZmxhZ3MgPSBtYXBwaW5nW2xlMzJfdG9fY3B1KGVfYnVmLT5mbGFncykgJiAweDddOworCisJCWVfaWR4LT5yZXNlcnZlZFswXSA9IDA7CisJCWVfaWR4LT5yZXNlcnZlZFsxXSA9IDA7CisKKwkJaWR4LT5lbnRyaWVzKys7CisJCWVfaWR4ID0gJmlkeC0+ZW50cnlbaWR4LT5lbnRyaWVzXTsKKwkJZV9idWYrKzsKKworCQlyZW1haW5pbmcgLT0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCQljb25zdW1lZCArPSBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSk7CisJfQorCisJLyogU3dhbGxvdyBhbnkgcGFydGlhbCBlbnRyaWVzIGF0IHRoZSBlbmQsIGlmIHRoZXJlIGFyZSBhbnkgKi8KKwlpZiAocmVtYWluaW5nID4gMCAmJiByZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSkpCisJCWNvbnN1bWVkICs9IHJlbWFpbmluZzsKKworCWJ1Zi0+cmVhZHBvcyArPSBjb25zdW1lZDsKKwlyZXR1cm4gY29uc3VtZWQ7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9wcm9jZXNzX2lkeF9kYXRhKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgc3RydWN0IGN4MThfbWRsICptZGwsCisJCQkJIHN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKK3sKKwlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1kbC0+Y3Vycl9idWYgPT0gTlVMTCkKKwkJbWRsLT5jdXJyX2J1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJm1kbC0+YnVmX2xpc3QsCisJCQkJCQkgc3RydWN0IGN4MThfYnVmZmVyLCBsaXN0KTsKKworCWlmIChsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kKG1kbC0+Y3Vycl9idWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSkgeworCQkvKgorCQkgKiBGb3Igc29tZSByZWFzb24gd2UndmUgZXhoYXVzdGVkIHRoZSBidWZmZXJzLCBidXQgdGhlIE1ETAorCQkgKiBvYmplY3Qgc3RpbGwgc2FpZCBzb21lIGRhdGEgd2FzIHVucmVhZC4KKwkJICogRml4IHRoYXQgYW5kIGJhaWwgb3V0LgorCQkgKi8KKwkJbWRsLT5yZWFkcG9zID0gbWRsLT5ieXRlc3VzZWQ7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShtZGwtPmN1cnJfYnVmLCAmbWRsLT5idWZfbGlzdCwgbGlzdCkgeworCisJCS8qIFNraXAgYW55IGVtcHR5IGJ1ZmZlcnMgaW4gdGhlIE1ETCAqLworCQlpZiAobWRsLT5jdXJyX2J1Zi0+cmVhZHBvcyA+PSBtZGwtPmN1cnJfYnVmLT5ieXRlc3VzZWQpCisJCQljb250aW51ZTsKKworCQltZGwtPnJlYWRwb3MgKz0gX2N4MThfcHJvY2Vzc19pZHhfZGF0YShtZGwtPmN1cnJfYnVmLCBpZHgpOworCisJCS8qIGV4aXQgd2hlbiBNREwgZHJhaW5lZCBvciByZXF1ZXN0IHNhdGlzZmllZCAqLworCQlpZiAoaWR4LT5lbnRyaWVzID49IFY0TDJfRU5DX0lEWF9FTlRSSUVTIHx8CisJCSAgICBtZGwtPmN1cnJfYnVmLT5yZWFkcG9zIDwgbWRsLT5jdXJyX2J1Zi0+Ynl0ZXN1c2VkIHx8CisJCSAgICBtZGwtPnJlYWRwb3MgPj0gbWRsLT5ieXRlc3VzZWQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3gxOF9nX2VuY19pbmRleChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfZW5jX2lkeCAqaWR4KQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJczMyIHRtcDsKKwlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKKworCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkgLyogTW9kdWxlIG9wdGlvbnMgaW5oaWJpdGVkIElEWCBzdHJlYW0gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDb21wdXRlIHRoZSBiZXN0IGNhc2UgbnVtYmVyIG9mIGVudHJpZXMgd2UgY2FuIGJ1ZmZlciAqLworCXRtcCA9IHMtPmJ1ZmZlcnMgLQorCQkJICBzLT5idWZzX3Blcl9tZGwgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTjsKKwlpZiAodG1wIDw9IDApCisJCXRtcCA9IDE7CisJdG1wID0gdG1wICogcy0+YnVmX3NpemUgLyBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSk7CisKKwkvKiBGaWxsIG91dCB0aGUgaGVhZGVyIG9mIHRoZSByZXR1cm4gc3RydWN0dXJlICovCisJaWR4LT5lbnRyaWVzID0gMDsKKwlpZHgtPmVudHJpZXNfY2FwID0gdG1wOworCW1lbXNldChpZHgtPnJlc2VydmVkLCAwLCBzaXplb2YoaWR4LT5yZXNlcnZlZCkpOworCisJLyogUHVsbCBJRFggTURMcyBhbmQgYnVmZmVycyBmcm9tIHFfZnVsbCBhbmQgcG9wdWxhdGUgdGhlIGVudHJpZXMgKi8KKwlkbyB7CisJCW1kbCA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mdWxsKTsKKwkJaWYgKG1kbCA9PSBOVUxMKSAvKiBObyBtb3JlIElEWCBkYXRhIHJpZ2h0IG5vdyAqLworCQkJYnJlYWs7CisKKwkJLyogRXh0cmFjdCB0aGUgSW5kZXggZW50cnkgZGF0YSBmcm9tIHRoZSBNREwgYW5kIGJ1ZmZlcnMgKi8KKwkJY3gxOF9wcm9jZXNzX2lkeF9kYXRhKHMsIG1kbCwgaWR4KTsKKwkJaWYgKG1kbC0+cmVhZHBvcyA8IG1kbC0+Ynl0ZXN1c2VkKSB7CisJCQkvKiBXZSBmaW5pc2hlZCB3aXRoIGRhdGEgcmVtYWluaW5nLCBwdXNoIHRoZSBNREwgYmFjayAqLworCQkJY3gxOF9wdXNoKHMsIG1kbCwgJnMtPnFfZnVsbCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdlIGRyYWluZWQgdGhpcyBNREwsIHNjaGVkdWxlIGl0IHRvIGdvIHRvIHRoZSBmaXJtd2FyZSAqLworCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKKworCX0gd2hpbGUgKGlkeC0+ZW50cmllcyA8IFY0TDJfRU5DX0lEWF9FTlRSSUVTKTsKKworCS8qIFRlbGwgdGhlIHdvcmsgaGFuZGxlciB0byBzZW5kIGZyZWUgSURYIE1ETHMgdG8gdGhlIGZpcm13YXJlICovCisJY3gxOF9zdHJlYW1fbG9hZF9md19xdWV1ZShzKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X2VuY29kZXJfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwppbmRleCBmMjMxZGQwLi42ZGNjZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1xdWV1ZS5oIgogI2luY2x1ZGUgImN4MTgtc3RyZWFtcy5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1wY20uaCIgLyogRklYTUUgbWFrZSBjb25maWd1cmFibGUgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKnJwdV9zdHJbXSA9IHsgIkFQVSIsICJDUFUiLCAiRVBVIiwgIkhQVSIgfTsKIApAQCAtMTU3LDYgKzE1OCwzNCBAQAogCX0KIH0KIAorCitzdGF0aWMgdm9pZCBjeDE4X21kbF9zZW5kX3RvX2Fsc2Eoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCisJCQkJICBzdHJ1Y3QgY3gxOF9tZGwgKm1kbCkKK3sKKwlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKKworCWlmIChtZGwtPmJ5dGVzdXNlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBXZSBpZ25vcmUgbWRsIGFuZCBidWYgcmVhZHBvcyBhY2NvdW50aW5nIGhlcmUgLSBpdCBkb2Vzbid0IG1hdHRlciAqLworCisJLyogVGhlIGxpa2VseSBjYXNlICovCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1kbC0+YnVmX2xpc3QpKSB7CisJCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJm1kbC0+YnVmX2xpc3QsIHN0cnVjdCBjeDE4X2J1ZmZlciwKKwkJCQkgICAgICAgbGlzdCk7CisJCWlmIChidWYtPmJ5dGVzdXNlZCkKKwkJCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2soY3gtPmFsc2EsIGJ1Zi0+YnVmLAorCQkJCQkJICBidWYtPmJ5dGVzdXNlZCk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJm1kbC0+YnVmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1Zi0+Ynl0ZXN1c2VkID09IDApCisJCQlicmVhazsKKwkJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayhjeC0+YWxzYSwgYnVmLT5idWYsIGJ1Zi0+Ynl0ZXN1c2VkKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGVwdV9kbWFfZG9uZShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2luX3dvcmtfb3JkZXIgKm9yZGVyKQogewogCXUzMiBoYW5kbGUsIG1kbF9hY2tfY291bnQsIGlkOwpAQCAtMjIzLDExICsyNTIsMjEgQEAKIAkJQ1gxOF9ERUJVR19ISV9ETUEoIiVzIHJlY3YgYnl0ZXN1c2VkID0gJWRcbiIsCiAJCQkJICBzLT5uYW1lLCBtZGwtPmJ5dGVzdXNlZCk7CiAKLQkJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMpCi0JCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKLQkJZWxzZSB7CisJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7CiAJCQljeDE4X21kbF9zZW5kX3RvX2R2YihzLCBtZGwpOwogCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7CisJCX0gZWxzZSBpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ00pIHsKKwkJCS8qIFBhc3MgdGhlIGRhdGEgdG8gY3gxOC1hbHNhICovCisJCQlpZiAoY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayAhPSBOVUxMKSB7CisJCQkJY3gxOF9tZGxfc2VuZF90b19hbHNhKGN4LCBzLCBtZGwpOworCQkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworCQkJfSBlbHNlIHsKKwkJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2Z1bGwpOworCQkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKQorCQkJCWN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhjeCk7CiAJCX0KIAl9CiAJLyogUHV0IGFzIG1hbnkgTURMcyBhcyBwb3NzaWJsZSBiYWNrIGludG8gZncgdXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwppbmRleCA2MzMwNDgyLi5hZWZjOGM4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwpAQCAtNDE5LDYgKzQxOSw5IEBACiB7CiAJc3RydWN0IGN4MThfbWRsICptZGw7CiAJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CisJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CisKKwlDWDE4X0RFQlVHX0lORk8oIkRlYWxsb2NhdGluZyBidWZmZXJzIGZvciAlcyBzdHJlYW1cbiIsIHMtPm5hbWUpOwogCiAJLyogbW92ZSBhbGwgYnVmZmVycyB0byBidWZfcG9vbCBhbmQgYWxsIE1ETHMgdG8gcV9pZGxlICovCiAJY3gxOF91bmxvYWRfcXVldWVzKHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IDk4N2E5MzAuLjA1NDQ1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTMxOSwxMSArMzE5LDI3IEBACiAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBDWDE4X01BWF9TVFJFQU1TOyB0eXBlKyspIHsKLQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkKSB7Ci0JCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7Ci0JCQljeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCA9IGZhbHNlOworCisJCS8qIE5vIHN0cnVjdCB2aWRlb19kZXZpY2UsIGJ1dCBjYW4gaGF2ZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykgeworCQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkKSB7CisJCQkJY3gxOF9kdmJfdW5yZWdpc3RlcigmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJCWN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkID0gZmFsc2U7CisJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJfQorCQkJY29udGludWU7CiAJCX0KIAorCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KKwkJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdICE9IDApIHsKKwkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gPSAwOworCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgc3RydWN0IHZpZGVvX2RldmljZSBleGlzdHMsIGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCiAJCXZkZXYgPSBjeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXY7CiAKIAkJY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2ID0gTlVMTDsKQEAgLTQ0Nyw2ICs0NjMsMzIgQEAKIAljeDE4X2FwaShjeCwgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0sIDYsIGRhdGEpOwogfQogCit2b2lkIGN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJc3RydWN0IGN4MThfbWRsICptZGw7CisKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCisJCXJldHVybjsKKworCS8qIFJldHVybiBpZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgbG93IG9uIE1ETHMgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZzLT5xX2ZyZWUuZGVwdGgpICsgYXRvbWljX3JlYWQoJnMtPnFfYnVzeS5kZXB0aCkpID49CisJCQkJCSAgICBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTikKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGlmIHRoZXJlIGFyZSBubyBNRExzIHRvIHJvdGF0ZSBiYWNrIHRvIHRoZSBmaXJtd2FyZSAqLworCWlmIChhdG9taWNfcmVhZCgmcy0+cV9mdWxsLmRlcHRoKSA8IDIpCisJCXJldHVybjsKKworCS8qCisJICogVGFrZSB0aGUgb2xkZXN0IElEWCBNREwgc3RpbGwgaG9sZGluZyBkYXRhLCBhbmQgZGlzY2FyZCBpdHMgaW5kZXgKKwkgKiBlbnRyaWVzIGJ5IHNjaGVkdWxpbmcgdGhlIE1ETCB0byBnbyBiYWNrIHRvIHRoZSBmaXJtd2FyZQorCSAqLworCW1kbCA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mdWxsKTsKKwlpZiAobWRsICE9IE5VTEwpCisJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworfQorCiBzdGF0aWMKIHN0cnVjdCBjeDE4X3F1ZXVlICpfY3gxOF9zdHJlYW1fcHV0X21kbF9mdyhzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJCQkJCSAgIHN0cnVjdCBjeDE4X21kbCAqbWRsKQpAQCAtNTQ2LDggKzU4OCw5IEBACiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CiAJaW50IGNhcHR5cGUgPSAwOwogCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfaWR4OwogCi0JaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUNYMThfREVCVUdfSU5GTygiU3RhcnQgZW5jb2RlciBzdHJlYW0gJXNcbiIsIHMtPm5hbWUpOwpAQCAtNTYxLDYgKzYwNCw5IEBACiAJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOwogCQlicmVhazsKIAorCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYOgorCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfSU5ERVg7CisJCWJyZWFrOwogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFM6CiAJCWNhcHR5cGUgPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUzsKIAkJYnJlYWs7CkBAIC02MzUsMTEgKzY4MSwxMyBAQAogCQkJY3gxOF92Ymlfc2V0dXAocyk7CiAKIAkJLyoKLQkJICogYXNzaWduIHByb2dyYW0gaW5kZXggaW5mby4KLQkJICogTWFzayA3OiBzZWxlY3QgSS9QL0IsIE51bV9yZXE6IDQwMCBtYXgKLQkJICogRklYTUUgLSBjdXJyZW50bHkgd2UgaGF2ZSB0aGlzIGhhcmRjb2RlZCBhcyBkaXNhYmxlZAorCQkgKiBTZWxlY3QgdG8gcmVjZWl2ZSBJLCBQLCBhbmQgQiBmcmFtZSBpbmRleCBlbnRyaWVzLCBpZiB0aGUKKwkJICogaW5kZXggc3RyZWFtIGlzIGVuYWJsZWQuICBPdGhlcndpc2UgZGlzYWJsZSBpbmRleCBlbnRyeQorCQkgKiBnZW5lcmF0aW9uLgogCQkgKi8KLQkJY3gxOF92YXBpX3Jlc3VsdChjeCwgZGF0YSwgQ1gxOF9DUFVfU0VUX0lOREVYVEFCTEUsIDEsIDApOworCQlzX2lkeCA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMiwKKwkJCQkgcy0+aGFuZGxlLCBjeDE4X3N0cmVhbV9lbmFibGVkKHNfaWR4KSA/IDcgOiAwKTsKIAogCQkvKiBDYWxsIG91dCB0byB0aGUgY29tbW9uIENYMjM0MXggQVBJIHNldHVwIGZvciB1c2VyIGNvbnRyb2xzICovCiAJCXByaXYuY3ggPSBjeDsKQEAgLTY5Nyw2ICs3NDUsNyBAQAogCWF0b21pY19pbmMoJmN4LT50b3RfY2FwdHVyaW5nKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0pOwogCiB2b2lkIGN4MThfc3RvcF9hbGxfY2FwdHVyZXMoc3RydWN0IGN4MTggKmN4KQogewpAQCAtNzA1LDcgKzc1NCw3IEBACiAJZm9yIChpID0gQ1gxOF9NQVhfU1RSRUFNUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwkJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKIAkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CkBAIC03MTcsNyArNzY2LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAl1bnNpZ25lZCBsb25nIHRoZW47CiAKLQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTc2Miw2ICs4MTEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0pOwogCiB1MzIgY3gxOF9maW5kX2hhbmRsZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CkBAIC03ODksNyArODM5LDcgQEAKIAkJcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAkJaWYgKHMtPmhhbmRsZSAhPSBoYW5kbGUpCiAJCQljb250aW51ZTsKLQkJaWYgKHMtPnZpZGVvX2RldiB8fCBzLT5kdmIuZW5hYmxlZCkKKwkJaWYgKGN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCQlyZXR1cm4gczsKIAl9CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKaW5kZXggNGEwMWRiNS4uMGJmZjBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaApAQCAtMjgsNiArMjgsMTYgQEAKIGludCBjeDE4X3N0cmVhbXNfcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF9zdHJlYW1zX2NsZWFudXAoc3RydWN0IGN4MTggKmN4LCBpbnQgdW5yZWdpc3Rlcik7CiAKKyNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYX0ZXX01ETF9NSU4gKDMpCit2b2lkIGN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhzdHJ1Y3QgY3gxOCAqY3gpOworCitzdGF0aWMgaW5saW5lIGJvb2wgY3gxOF9zdHJlYW1fZW5hYmxlZChzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCit7CisJcmV0dXJuIHMtPnZpZGVvX2RldiB8fCBzLT5kdmIuZW5hYmxlZCB8fAorCSAgICAgICAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFggJiYKKwkJcy0+Y3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF0gIT0gMCk7Cit9CisKIC8qIFJlbGF0ZWQgdG8gc3VibWlzc2lvbiBvZiBtZGxzIHRvIGZpcm13YXJlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF9zdHJlYW1fbG9hZF9md19xdWV1ZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKaW5kZXggOWMwYjViYi4uM2UxYWVjNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2RlZmluZSBDWDE4X0RSSVZFUl9OQU1FICJjeDE4IgogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAzCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgNAogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCmluZGV4IDg2ODgwNmUuLjJjMDA5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaApAQCAtMTkxLDcgKzE5MSw4IEBACiAjZGVmaW5lIENYMThfQ1BVX1NFVF9NRURJQU5fQ09SSU5HICAgICAgICAgICAJKENQVV9DTURfTUFTS19DQVBUVVJFIHwgMHgwMDBFKQogCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIHNldCB0aGUgcGljdHVyZSB0eXBlIG1hc2sgZm9yIGluZGV4IGZpbGUKLSAgIElOWzBdIC0gCTAgPSBkaXNhYmxlIGluZGV4IGZpbGUgb3V0cHV0CisgICBJTlswXSAtIFRhc2sgaGFuZGxlIChpZ25vcmVkIGJ5IGZpcm13YXJlKQorICAgSU5bMV0gLSAJMCA9IGRpc2FibGUgaW5kZXggZmlsZSBvdXRwdXQKIAkJCTEgPSBvdXRwdXQgSSBwaWN0dXJlCiAJCQkyID0gUCBwaWN0dXJlCiAJCQk0ID0gQiBwaWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCmluZGV4IGM1MDgyYTQuLjY0ZTAyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC00ODYsOSArNDg2LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYwppbmRleCAxNTgyNmY5Li5jNTc3MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWN4MjMxeHhfaXJfc3RhcnQoaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggODhjMGQyNC4uMmFiOTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTY4MSw3ICs2ODEsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1ZJREVPX0lEOgogCQlyZXR1cm4gICJTRVRfVklERU9fSUQiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1BDUl9JRDoKLQkJcmV0dXJuICAiU0VUX1BDUl9QSUQiOworCQlyZXR1cm4gICJTRVRfUENSX0lEIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9GUkFNRV9SQVRFOgogCQlyZXR1cm4gICJTRVRfRlJBTUVfUkFURSI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfU0laRToKQEAgLTY5Myw3ICs2OTMsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0FTUEVDVF9SQVRJTzoKIAkJcmV0dXJuICAiU0VUX0FTUEVDVF9SQVRJTyI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRE5SX0ZJTFRFUl9NT0RFOgotCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9QUk9QUyI7CisJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX01PREUiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfUFJPUFM6CiAJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX1BST1BTIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9DT1JJTkdfTEVWRUxTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMWVjNDgxNi4uZDYzOTE4NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjc0LDYgKzI3NCwzMSBAQAogCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwIiwKKwkJLnBvcnRhICAgICAgICAgID0gQ1gyMzg4NV9BTkFMT0dfVklERU8sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX1ZJTjJfQ0gxIHwKKwkJCQkgIENYMjU4NDBfVklONV9DSDIgfAorCQkJCSAgQ1gyNTg0MF9OT05FMF9DSDMsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX0NPTVBPU0lURTEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IENYMjU4NDBfU1ZJREVPX0xVTUEzIHwKKwkJCQkgIENYMjU4NDBfU1ZJREVPX0NIUk9NQTQsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9ORU5ULAorCQkJLnZtdXggICA9IENYMjU4NDBfVklON19DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU42X0NIMiB8CisJCQkJICBDWDI1ODQwX1ZJTjhfQ0gzIHwKKwkJCQkgIENYMjU4NDBfQ09NUE9ORU5UX09OLAorCQl9IH0sCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtNDE3LDYgKzQ0MiwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgxNGYxLAogCQkuc3ViZGV2aWNlID0gMHg4NTc4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8sCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2ZjIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC02MTcsNiArNjQ2LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLwogCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CkBAIC03NjksNiArNzk5LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogR1BJTy0yICB4YzMwMjggdHVuZXIgcmVzZXQgKi8KIAogCQkvKiBUaGUgZm9sbG93aW5nIEdQSU8ncyBhcmUgb24gdGhlIGludGVybmFsIEFWQ29yZSAoY3gyNTg0MCkgKi8KQEAgLTEwNzYsNiArMTEwNyw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNjoKIAljYXNlIENYMjM4ODVfQk9BUkRfTUFHSUNQUk9fUFJPSERUVkUyOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQlkZXYtPnNkX2N4MjU4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMl0uaTJjX2FkYXAsCiAJCQkJImN4MjU4NDAiLCAiY3gyNTg0MCIsIDB4ODggPj4gMSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IGU0NWQyZGYuLjkzOTA3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC01NDIsNiArNTQyLDkgQEAKIAkub3NjX2Nsa19mcmVxID0gMzA0MDAsIC8qIGluIGtIeiAqLwogCS5pZl9mcmVxID0gMCwgLyogemVybyBJRiAqLwogCS56aWZfc3dhcF9pcSA9IDEsCisJLmFnY19taW4gPSAweDJFLAorCS5hZ2NfbWF4ID0gMHhGRiwKKwkuYWdjX2hvbGRfbG9vcCA9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1heDIxNjVfY29uZmlnIG15Z2ljX3g4NTU4cHJvX21heDIxNjVfY2ZnMSA9IHsKQEAgLTU1OCw2ICs1NjEsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweEZGLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF4MjE2NV9jb25maWcgbXlnaWNfeDg1NThwcm9fbWF4MjE2NV9jZmcyID0gewpAQCAtOTk0LDE1ICsxMDAwLDggQEAKIAkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOwogCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAogCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOwotCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgotCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkJcG9ydC0+bnIsCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9JXBNXG4iLAorCQkJcG9ydC0+bnIsIHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAKIAkJbmV0dXBfY2lfaW5pdChwb3J0KTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCA3NjhlZWM5Li45YzY2MjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWRldi0+aXJfaW5wdXQgPSBpcjsKIAljeDIzODg1X2lucHV0X2lyX3N0YXJ0KGRldik7CiAKLQlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2Rlcyk7CisJcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCA4OTM0ZDYxLi4yZDNhYzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlICJjeDIzODg1LWlvY3RsLmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CkBAIC0xNTA1LDYgKzE1MDYsMTggQEAKIAkJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisKKwkJCWlmIChkZXYtPmJvYXJkID09IENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwKSB7CisJCQkJc3RydWN0IHhjMjAyOF9jdHJsIGN0cmwgPSB7CisJCQkJCS5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJCQkubWF4X2xlbiA9IDY0CisJCQkJfTsKKwkJCQlzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgY2ZnID0geworCQkJCQkudHVuZXIgPSBkZXYtPnR1bmVyX3R5cGUsCisJCQkJCS5wcml2ID0gJmN0cmwKKwkJCQl9OworCQkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDA4YjNmNmIuLjBlM2E5OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDAgICAgMjUKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MCAgICAgICAgMjYKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8gICAgICAgICAgMjcKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAgMjgKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDM4NWVjZDUuLmYyNDYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTczNCwxMCArNzM0LDggQEAKIAkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJ2aWRfaW5wdXQgMHgleFxuIiwKIAkJCXZpZF9pbnB1dCk7CiAJCXJlZyA9IHZpZF9pbnB1dCAmIDB4ZmY7Ci0JCWlmICgodmlkX2lucHV0ICYgQ1gyNTg0MF9TVklERU9fT04pID09IENYMjU4NDBfU1ZJREVPX09OKQotCQkJaXNfY29tcG9zaXRlID0gMDsKLQkJZWxzZSBpZiAoKHZpZF9pbnB1dCAmIENYMjU4NDBfQ09NUE9ORU5UX09OKSA9PSAwKQotCQkJaXNfY29tcG9zaXRlID0gMTsKKwkJaXNfY29tcG9zaXRlID0gIWlzX2NvbXBvbmVudCAmJgorCQkJKCh2aWRfaW5wdXQgJiBDWDI1ODQwX1NWSURFT19PTikgIT0gQ1gyNTg0MF9TVklERU9fT04pOwogCiAJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAibXV4IGNmZyAweCV4IGNvbXA9JWRcbiIsCiAJCQlyZWcsIGlzX2NvbXBvc2l0ZSk7CkBAIC0xMzQ3LDMwICsxMzQ1LDU5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBjeDI1ODQwX3NfYXVkaW9fc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OworCisJaWYgKGlzX2N4MjU4M3goc3RhdGUpIHx8IGlzX2N4MjM4OHgoc3RhdGUpIHx8IGlzX2N4MjMxeHgoc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiJXMgYXVkaW8gb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCisJaWYgKGVuYWJsZSkgeworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpIHwgMHg4MDsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSB8IDB4MDM7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CisJfSBlbHNlIHsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSAmIH4oMHg4MCk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDMpOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeDI1ODQwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OwogCi0JdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyB2aWRlbyBvdXRwdXRcbiIsCiAJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAJaWYgKGVuYWJsZSkgewogCQlpZiAoaXNfY3gyMzg4eChzdGF0ZSkgfHwgaXNfY3gyMzF4eChzdGF0ZSkpIHsKLQkJCXU4IHYgPSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYjsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsCi0JCQkJCWlzX2N4MjU4M3goc3RhdGUpID8gMHgwYyA6IDB4OGMpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LAotCQkJCQlpc19jeDI1ODN4KHN0YXRlKSA/IDB4MDQgOiAweDA3KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgfCAweDBjOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgfCAweDA0OworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChpc19jeDIzODh4KHN0YXRlKSB8fCBpc19jeDIzMXh4KHN0YXRlKSkgewotCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSAmIH4oMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpICYgfigweDBiKTsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIDB4MDApOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCAweDAwKTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgJiB+KDB4MGMpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDQpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE2MDEsNiArMTYyOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDI1ODQwX2F1ZGlvX29wcyA9IHsKIAkuc19jbG9ja19mcmVxID0gY3gyNTg0MF9zX2Nsb2NrX2ZyZXEsCiAJLnNfcm91dGluZyA9IGN4MjU4NDBfc19hdWRpb19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IGN4MjU4NDBfc19hdWRpb19zdHJlYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBjeDI1ODQwX3ZpZGVvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA1YTY3NDQ1Li42NGIzNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC01ODMsMTYgKzU4MywxOCBAQAogewogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlPWNoaXAtPmNvcmU7Ci0JaW50IHYsIGI7CisJaW50IGxlZnQsIHJpZ2h0LCB2LCBiOwogCWludCBjaGFuZ2VkID0gMDsKIAl1MzIgb2xkOwogCi0JYiA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIC0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJbGVmdCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMHgzZjsKKwlyaWdodCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgMHgzZjsKKwliID0gcmlnaHQgLSBsZWZ0OwogCWlmIChiIDwgMCkgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCSAgICB2ID0gMHgzZiAtIGxlZnQ7CiAJICAgIGIgPSAoLWIpIHwgMHg0MDsKIAl9IGVsc2UgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCSAgICB2ID0gMHgzZiAtIHJpZ2h0OwogCX0KIAkvKiBEbyB3ZSByZWFsbHkga25vdyB0aGlzIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIElSUXMgb24/ICovCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZDg0NGYyYS4uZWFmMGVlN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTQ2Niw2ICsxNDY2LDE4IEBACiAJCQkuYXVkaW9yb3V0ZSA9IDgsCiAJCX0sCiAJfSwKKwlbQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwXSA9IHsKKwkJLm5hbWUJCT0gIlNhbXN1bmcgU01UIDcwMjAgRFZCLVMiLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dAkJPSB7IHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4CT0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkFEUyBUZWNoIEluc3RhbnQgVmlkZW8gUENJIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMjM1NSw2ICsyMzY3LDE0IEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDE0MDQsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGMwMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCisJCS5zdWJkZXZpY2UgPSAweGRjY2QsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgPSAweGMxMTEsIC8qIEF2ZXJNZWRpYSBNMTUwLUQgKi8KQEAgLTI2MzMsNiArMjY1Myw5IEBACiAJY2FzZSA5ODU1OTogLyogV2luVFYtSFZSMTEwMExQIChWaWRlbyBubyBJUiwgUmV0YWlsIC0gTG93IFByb2ZpbGUpICovCiAJCS8qIGtub3duICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwOgorCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwODk4OUZGKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd2Fybl9wcmludGsoY29yZSwgIndhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKIAkJCSAgICB0di5tb2RlbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IGIxNDI5NjkuLjk0YWI4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC02NzQsNiArNjc0LDE5NCBAQAogCXJldHVybiAwOwogfQogCisKKworc3RhdGljIHU4IHNhbXN1bmdfc210XzcwMjBfaW5pdHRhYltdID0geworCSAgICAgMHgwMSwgMHgxNSwKKwkgICAgIDB4MDIsIDB4MDAsCisJICAgICAweDAzLCAweDAwLAorCSAgICAgMHgwNCwgMHg3RCwKKwkgICAgIDB4MDUsIDB4MEYsCisJICAgICAweDA2LCAweDAyLAorCSAgICAgMHgwNywgMHgwMCwKKwkgICAgIDB4MDgsIDB4NjAsCisKKwkgICAgIDB4MEEsIDB4QzIsCisJICAgICAweDBCLCAweDAwLAorCSAgICAgMHgwQywgMHgwMSwKKwkgICAgIDB4MEQsIDB4ODEsCisJICAgICAweDBFLCAweDQ0LAorCSAgICAgMHgwRiwgMHgwOSwKKwkgICAgIDB4MTAsIDB4M0MsCisJICAgICAweDExLCAweDg0LAorCSAgICAgMHgxMiwgMHhEQSwKKwkgICAgIDB4MTMsIDB4OTksCisJICAgICAweDE0LCAweDhELAorCSAgICAgMHgxNSwgMHhDRSwKKwkgICAgIDB4MTYsIDB4RTgsCisJICAgICAweDE3LCAweDQzLAorCSAgICAgMHgxOCwgMHgxQywKKwkgICAgIDB4MTksIDB4MUIsCisJICAgICAweDFBLCAweDFELAorCisJICAgICAweDFDLCAweDEyLAorCSAgICAgMHgxRCwgMHgwMCwKKwkgICAgIDB4MUUsIDB4MDAsCisJICAgICAweDFGLCAweDAwLAorCSAgICAgMHgyMCwgMHgwMCwKKwkgICAgIDB4MjEsIDB4MDAsCisJICAgICAweDIyLCAweDAwLAorCSAgICAgMHgyMywgMHgwMCwKKworCSAgICAgMHgyOCwgMHgwMiwKKwkgICAgIDB4MjksIDB4MjgsCisJICAgICAweDJBLCAweDE0LAorCSAgICAgMHgyQiwgMHgwRiwKKwkgICAgIDB4MkMsIDB4MDksCisJICAgICAweDJELCAweDA1LAorCisJICAgICAweDMxLCAweDFGLAorCSAgICAgMHgzMiwgMHgxOSwKKwkgICAgIDB4MzMsIDB4RkMsCisJICAgICAweDM0LCAweDEzLAorCSAgICAgMHhmZiwgMHhmZiwKK307CisKKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJdTggYnVmWzRdOworCXUzMiBkaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDB4NjEsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBzaXplb2YoYnVmKSB9OworCisJZGl2ID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMjU7CisKKwlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlidWZbMV0gPSBkaXYgJiAweGZmOworCWJ1ZlsyXSA9IDB4ODQ7ICAvKiAweEM0ICovCisJYnVmWzNdID0gMHgwMDsKKworCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE1MDAwMDApCisJCWJ1ZlszXSB8PSAweDEwOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+Y29yZS0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCisJY3hfc2V0KE1PX0dQMF9JTywgMHgwODAwKTsKKworCXN3aXRjaCAodG9uZSkgeworCWNhc2UgU0VDX1RPTkVfT046CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDgpOworCQlicmVhazsKKwljYXNlIFNFQ19UT05FX09GRjoKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCXU4IGRhdGE7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDgsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSAmZGF0YSwKKwkJLmxlbiA9IHNpemVvZihkYXRhKSB9OworCisJY3hfc2V0KE1PX0dQMF9JTywgMHg4MDAwKTsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlkYXRhID0gSVNMNjQyMV9FTjEgfCBJU0w2NDIxX0xMQzE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCWRhdGEgPSBJU0w2NDIxX0VOMSB8IElTTDY0MjFfTExDMSB8IElTTDY0MjFfVlNFTDE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX07CisKKwlyZXR1cm4gKGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkgPT0gMSkgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3N0djAyOTlfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUzMiBzcmF0ZSwgdTMyIHJhdGlvKQoreworCXU4IGFjbGsgPSAwOworCXU4IGJjbGsgPSAwOworCisJaWYgKHNyYXRlIDwgMTUwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NDc7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDRiOworCX0gZWxzZSBpZiAoc3JhdGUgPCA3MDAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0ZjsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMTQwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDUzOworCX0gZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwMCkgeworCQlhY2xrID0gMHhiNjsKKwkJYmNsayA9IDB4NTM7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDQ1MDAwMDAwKSB7CisJCWFjbGsgPSAweGI0OworCQliY2xrID0gMHg1MTsKKwl9CisKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDEzLCBhY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDE0LCBiY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDFmLCAocmF0aW8gPj4gMTYpICYgMHhmZik7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjEsIHJhdGlvICYgMHhmMCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNhbXN1bmdfc3R2MDI5OV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2Ftc3VuZ19zbXRfNzAyMF9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMCwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF9MSywKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2Ftc3VuZ19zbXRfNzAyMF9zdHYwMjk5X3NldF9zeW1ib2xfcmF0ZSwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKQEAgLTEyMDMsNiArMTM5MSwzMiBAQAogCQl9CiAJCWJyZWFrOwogCQl9CisJY2FzZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjA6CisJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwODsKKworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxMDEpOworCisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMSk7CisJCW1kZWxheSgxMDApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxKTsKKwkJbWRlbGF5KDIwMCk7CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAorCQkJCQkmc2Ftc3VuZ19zdHYwMjk5X2NvbmZpZywKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfdHVuZXJfc2V0X3BhcmFtczsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT50dW5lcl9wcml2ID0KKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF90b25lID0KKwkJCQlzYW1zdW5nX3NtdF83MDIwX3NldF90b25lOworCQl9CisKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggZjlmZGExOC4uZGUxODBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgY3g4OF9JUiAqaXI7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJY3g4OF9pcl9zdGFydChjb3JlLCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggYmI1MTA0OC4uMzM4YWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMTEwLDYgKzExMCw5IEBACiAJCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDE8PDEzKTsKIAkJCWJyZWFrOworCQljYXNlIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMDoKKwkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULCAweDAwKTsKKwkJCWJyZWFrOwogCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgogCQkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogRW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gYW5kIHZpZGVvIHNpZ25hbCBwaW5zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBiMTQ5OWJmLi40OGI2YzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTIzOSw2ICsyMzksNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEggICAgICAgIDgxCiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KICAgICAgODIKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9GXzczMDEgICAgICAgICAgICAgICA4MworI2RlZmluZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAgICAgICAgIDg0CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggZWU0Mzg3Ni4uMGY1MDUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC02MTYsMTAgKzYxNiwxMiBAQAogewogCWludCBkZXZudW0gPSBpbWlub3IoaW5vZGUpOwogCXBkYWJ1c2JfdCBzOworCWludCByOwogCiAJaWYgKGRldm51bSA8IERBQlVTQl9NSU5PUiB8fCBkZXZudW0gPj0gKERBQlVTQl9NSU5PUiArIE5SREFCVVNCKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlsb2NrX2tlcm5lbCgpOwogCXMgPSAmZGFidXNiW2Rldm51bSAtIERBQlVTQl9NSU5PUl07CiAKIAlkYmcoImRhYnVzYl9vcGVuIik7CkBAIC02MzQsNiArNjM2LDcgQEAKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoNTAwKTsKIAogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSB7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQltdXRleF9sb2NrKCZzLT5tdXRleCk7CkBAIC02NDEsNiArNjQ0LDcgQEAKIAlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMSkgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwogCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInNldF9pbnRlcmZhY2UgZmFpbGVkXG4iKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcy0+b3BlbmVkID0gMTsKQEAgLTY0OSw3ICs2NTMsOSBAQAogCWZpbGUtPmZfcG9zID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCi0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCXIgPSBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgZGFidXNiX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtOTEzLDYgKzkxOSw4IEBACiBNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoImRhYnVzYi9maXJtd2FyZS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJkYWJ1c2IvYml0c3RyZWFtLmJpbiIpOwogCiBtb2R1bGVfcGFyYW0oYnVmZmVycywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MgKGJ1ZmZlcnMsICJOdW1iZXIgb2YgYnVmZmVycyAoZGVmYXVsdD0yNTYpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKaW5kZXggMWE4YjhmMy4uYTM3OTU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQpAQCAtMTUsMyArMTUsNCBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1ZQRkVfQ0FQVFVSRSkgKz0gdnBmZV9jYXB0dXJlLm8KIG9iai0kKENPTkZJR19WSURFT19ETTY0NDZfQ0NEQykgKz0gZG02NDR4X2NjZGMubwogb2JqLSQoQ09ORklHX1ZJREVPX0RNMzU1X0NDREMpICs9IGRtMzU1X2NjZGMubworb2JqLSQoQ09ORklHX1ZJREVPX0lTSUYpICs9IGlzaWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMKaW5kZXggMzE0MzkwMC4uYzI5YWM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCkBAIC0zNyw4ICszNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oPgogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorCiAjaW5jbHVkZSAiZG0zNTVfY2NkY19yZWdzLmgiCiAjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKIApAQCAtNDYsNjcgKzUwLDc1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNDREMgRHJpdmVyIGZvciBETTM1NSIpOwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKLQkud2luID0gQ0NEQ19XSU5fVkdBLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuZ2FpbiA9IHsKLQkJLnJfeWUgPSAyNTYsCi0JCS5nYl9nID0gMjU2LAotCQkuZ3JfY3kgPSAyNTYsCi0JCS5iX21nID0gMjU2CitzdGF0aWMgc3RydWN0IGNjZGNfb3Blcl9jb25maWcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwkvKiBDQ0RDIGludGVyZmFjZSB0eXBlICovCisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwkvKiBSYXcgQmF5ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgYmF5ZXI7CisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciB5Y2JjcjsKKwkvKiBNYXN0ZXIgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICptY2xrOworCS8qIHNsYXZlIGNsb2NrICovCisJc3RydWN0IGNsayAqc2NsazsKKwkvKiBjY2RjIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworfSBjY2RjX2NmZyA9IHsKKwkvKiBSYXcgY29uZmlndXJhdGlvbnMgKi8KKwkuYmF5ZXIgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCQkud2luID0gQ0NEQ19XSU5fVkdBLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmdhaW4gPSB7CisJCQkucl95ZSA9IDI1NiwKKwkJCS5nYl9nID0gMjU2LAorCQkJLmdyX2N5ID0gMjU2LAorCQkJLmJfbWcgPSAyNTYKKwkJfSwKKwkJLmNvbmZpZ19wYXJhbXMgPSB7CisJCQkuZGF0YXNmdCA9IDIsCisJCQkubWZpbHQxID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMSwKKwkJCS5tZmlsdDIgPSBDQ0RDX05PX01FRElBTl9GSUxURVIyLAorCQkJLmFsYXcgPSB7CisJCQkJLmdhbWFfd2QgPSAyLAorCQkJfSwKKwkJCS5ibGtfY2xhbXAgPSB7CisJCQkJLnNhbXBsZV9waXhlbCA9IDEsCisJCQkJLmRjX3N1YiA9IDI1CisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQwID0geworCQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJCS5lbG9wID0gQ0NEQ19SRUQsCisJCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAorCQkJfSwKKwkJCS5jb2xfcGF0X2ZpZWxkMSA9IHsKKwkJCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IENDRENfQkxVRSwKKwkJCQkuZWxvcCA9IENDRENfUkVELAorCQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKKwkJCX0sCisJCX0sCiAJfSwKLQkuY29uZmlnX3BhcmFtcyA9IHsKLQkJLmRhdGFzZnQgPSAyLAotCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCi0JCS5tZmlsdDEgPSBDQ0RDX05PX01FRElBTl9GSUxURVIxLAotCQkubWZpbHQyID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMiwKLQkJLmFsYXcgPSB7Ci0JCQkuZ2FtYV93ZCA9IDIsCi0JCX0sCi0JCS5ibGtfY2xhbXAgPSB7Ci0JCQkuc2FtcGxlX3BpeGVsID0gMSwKLQkJCS5kY19zdWIgPSAyNQotCQl9LAotCQkuY29sX3BhdF9maWVsZDAgPSB7Ci0JCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKLQkJCS5vbGVwID0gQ0NEQ19CTFVFLAotCQkJLmVsb3AgPSBDQ0RDX1JFRCwKLQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKLQkJfSwKLQkJLmNvbF9wYXRfZmllbGQxID0gewotCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCi0JCQkub2xlcCA9IENDRENfQkxVRSwKLQkJCS5lbG9wID0gQ0NEQ19SRUQsCi0JCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECi0JCX0sCisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCS55Y2JjciA9IHsKKwkJLndpbiA9IENDRENfV0lOX1BBTCwKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuYnQ2NTZfZW5hYmxlID0gMSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECiAJfSwKIH07CiAKIAotLyogT2JqZWN0IGZvciBDQ0RDIHljYmNyIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgY2NkY19od19wYXJhbXNfeWNiY3IgPSB7Ci0JLndpbiA9IENDRENfV0lOX1BBTCwKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuYnQ2NTZfZW5hYmxlID0gMSwKLQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCi0JLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAotfTsKLQotc3RhdGljIGVudW0gdnBmZV9od19pZl90eXBlIGNjZGNfaWZfdHlwZTsKLXN0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOwotc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKLQogLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KIHN0YXRpYyB1MzIgY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9CiAJCXtWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CkBAIC0xMTgsMTggKzEzMCwxMiBAQAogLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCiBzdGF0aWMgaW5saW5lIHUzMiByZWdyKHUzMiBvZmZzZXQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNjZGNfc2V0X2NjZGNfYmFzZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKLXsKLQljY2RjX2Jhc2VfYWRkciA9IGFkZHI7Ci0JY2NkY19hZGRyX3NpemUgPSBzaXplOworCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfZW5hYmxlKGludCBlbikKQEAgLTE1MywxMiArMTU5LDEyIEBACiBzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19nYWluX29mZnNldCh2b2lkKQogewogCS8qIGNvbmZpZ3VyZSBnYWluICovCi0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llLCBSWUVHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdyX2N5LCBHUkNZR0FJTik7Ci0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5nYl9nLCBHQkdHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmJfbWcsIEJNR0dBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5yX3llLCBSWUVHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uZ3JfY3ksIEdSQ1lHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uZ2JfZywgR0JHR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLmJfbWcsIEJNR0dBSU4pOwogCS8qIGNvbmZpZ3VyZSBvZmZzZXQgKi8KLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5jY2RjX29mZnNldCwgT0ZGU0VUKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmNjZGNfb2Zmc2V0LCBPRkZTRVQpOwogfQogCiAvKgpAQCAtMTY5LDcgKzE3NSw3IEBACiB7CiAJaW50IGk7CiAKLQlkZXZfZGJnKGRldiwgIlxuc3RhcnRpbmcgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbnN0YXJ0aW5nIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOwogCS8qIHNldCBhbGwgcmVnaXN0ZXJzIHRvIHplcm8gKi8KIAlmb3IgKGkgPSAwOyBpIDw9IENDRENfUkVHX0xBU1Q7IGkgKz0gNCkKIAkJcmVndygwLCBpKTsKQEAgLTE4MCwzMCArMTg2LDI5IEBACiAJcmVndyhDVUxIX0RFRkFVTFQsIENVTEgpOwogCXJlZ3coQ1VMVl9ERUZBVUxULCBDVUxWKTsKIAkvKiBTZXQgZGVmYXVsdCBHYWluIGFuZCBPZmZzZXQgKi8KLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llID0gR0FJTl9ERUZBVUxUOwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdiX2cgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ3JfY3kgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uYl9tZyA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLnJfeWUgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5nYl9nID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4uZ3JfY3kgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5iX21nID0gR0FJTl9ERUZBVUxUOwogCWNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CiAJcmVndyhPVVRDTElQX0RFRkFVTFQsIE9VVENMSVApOwogCXJlZ3coTFNDQ0ZHMl9ERUZBVUxULCBMU0NDRkcyKTsKIAkvKiBzZWxlY3QgY2NkYyBpbnB1dCAqLwogCWlmICh2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShWUFNTX0NDRENJTikpIHsKLQkJZGV2X2RiZyhkZXYsICJcbmNvdWxkbid0IHNlbGVjdCBjY2RjIGlucHV0IHNvdXJjZSIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuY291bGRuJ3Qgc2VsZWN0IGNjZGMgaW5wdXQgc291cmNlIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkvKiBzZWxlY3QgY2NkYyBjbG9jayAqLwogCWlmICh2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0NDRENfQ0xPQ0ssIDEpIDwgMCkgewotCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3QgZW5hYmxlIGNjZGMgY2xvY2siKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmNvdWxkbid0IGVuYWJsZSBjY2RjIGNsb2NrIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlkZXYgPSBkZXZpY2U7CiAJcmV0dXJuIGNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwogfQogCkBAIC0yMjYsNyArMjMxLDcgQEAKIAlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKIAlpbnQgbWlkX2ltZyA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKIAogCS8qCiAJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCkBAIC0yNjAsNDUgKzI2NSw0NiBAQAogCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX09ORV9NQVNLLCBTTFYwKTsKIAlyZWd3KHZlcnRfc3RhcnQgJiBDQ0RDX1NUQVJUX1ZFUl9UV09fTUFTSywgU0xWMSk7CiAJcmVndyh2ZXJ0X25yX2xpbmVzICYgQ0NEQ19OVU1fTElORVNfVkVSLCBOTFYpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY2NkY19wYXJhbShzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQogewogCWlmIChjY2RjcGFyYW0tPmRhdGFzZnQgPCBDQ0RDX0RBVEFfTk9fU0hJRlQgfHwKIAkgICAgY2NkY3BhcmFtLT5kYXRhc2Z0ID4gQ0NEQ19EQVRBX1NISUZUXzZCSVQpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2hpZnRcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaGlmdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPm1maWx0MSA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjEgfHwKIAkgICAgY2NkY3BhcmFtLT5tZmlsdDEgPiBDQ0RDX01FRElBTl9GSUxURVIxKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMVxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPm1maWx0MiA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjIgfHwKIAkgICAgY2NkY3BhcmFtLT5tZmlsdDIgPiBDQ0RDX01FRElBTl9GSUxURVIyKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMlxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA8IDApIHx8CiAJICAgKGNjZGNwYXJhbS0+bWVkX2ZpbHRfdGhyZXMgPiBDQ0RDX01FRF9GSUxUX1RIUkVTSCkpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIgdGhyZXNob2xkXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyIHRocmVzb2xkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+ZGF0YV9zeiA8IENDRENfREFUQV8xNkJJVFMgfHwKIAkgICAgY2NkY3BhcmFtLT5kYXRhX3N6ID4gQ0NEQ19EQVRBXzhCSVRTKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNpemVcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaXplXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+YWxhdy5lbmFibGUpIHsKIAkJaWYgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzEzXzQgfHwKIAkJICAgIGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkID4gQ0NEQ19HQU1NQV9CSVRTXzA5XzApIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBBTEFXXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBBTEFXXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMzA2LDEyICszMTIsMTQgQEAKIAlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuYl9jbGFtcF9lbmFibGUpIHsKIAkJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9waXhlbCA8IENDRENfU0FNUExFXzFQSVhFTFMgfHwKIAkJICAgIGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9waXhlbCA+IENDRENfU0FNUExFXzE2UElYRUxTKSB7Ci0JCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIHBpeGVsXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAorCQkJCSJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBwaXhlbFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX2xuIDwgQ0NEQ19TQU1QTEVfMUxJTkVTIHx8CiAJCSAgICBjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfbG4gPiBDQ0RDX1NBTVBMRV8xNkxJTkVTKSB7Ci0JCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIGxpbmVzXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAorCQkJCSJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBsaW5lc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTMyNSwxOCArMzMzLDE4IEBACiAJaW50IHg7CiAKIAkvKiBvbmx5IHJhdyBtb2R1bGUgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIElPQ1RMICovCi0JaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJaWYgKHgpIHsKLQkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmcgY2NkYyIKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmcgY2NkYyIKIAkJCSJwYXJhbXMsICVkXG4iLCB4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJaWYgKCF2YWxpZGF0ZV9jY2RjX3BhcmFtKCZjY2RjX3Jhd19wYXJhbXMpKSB7Ci0JCW1lbWNweSgmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMsCisJCW1lbWNweSgmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcywKIAkJCSZjY2RjX3Jhd19wYXJhbXMsCiAJCQlzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJCXJldHVybiAwOwpAQCAtMzQ3LDExICszNTUsMTEgQEAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgWUNiQ3IgdmlkZW8gY2FwdHVyZSAqLwogc3RhdGljIHZvaWQgY2NkY19jb25maWdfeWNiY3Iodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc195Y2JjcjsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2NmZy55Y2JjcjsKIAl1MzIgdGVtcDsKIAogCS8qIGZpcnN0IHNldCB0aGUgQ0NEQyBwb3dlciBvbiBkZWZhdWx0cyB2YWx1ZXMgaW4gYWxsIHJlZ2lzdGVycyAqLwotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwogCiAJLyogY29uZmlndXJlIHBpeGVsIGZvcm1hdCAmIHZpZGVvIGZyYW1lIGZvcm1hdCAqLwpAQCAtNDAzLDcgKzQxMSw3IEBACiAJCXJlZ3coQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQsIFNET0ZTVCk7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CiB9CiAKIC8qCkBAIC00ODMsNyArNDkxLDcgQEAKIAkgKi8KIAogCWlmIChjb3VudCkgewotCQlkZXZfZXJyKGRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCWRldl9lcnIoY2NkY19jZmcuZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYwNSwxMiArNjEzLDEyIEBACiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFJhdyBtb2RlIGltYWdlIGNhcHR1cmUgKi8KIHN0YXRpYyBpbnQgY2NkY19jb25maWdfcmF3KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3JhdzsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19jZmcuYmF5ZXI7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCiAJLyogcmVzdG9yZSBwb3dlciBvbiBkZWZhdWx0cyB0byByZWdpc3RlciAqLwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwpAQCAtNjU5LDcgKzY2Nyw3IEBACiAJdmFsIHw9IChjb25maWdfcGFyYW1zLT5kYXRhc2Z0ICYgQ0NEQ19EQVRBU0ZUX01BU0spIDw8CiAJCUNDRENfREFUQVNGVF9TSElGVDsKIAlyZWd3KHZhbCAsIE1PREVTRVQpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIE1lZGlhbiBGaWx0ZXIgdGhyZXNob2xkICovCiAJcmVndygoY29uZmlnX3BhcmFtcy0+bWVkX2ZpbHRfdGhyZXMpICYgQ0NEQ19NRURfRklMVF9USFJFU0gsIE1FREZJTFQpOwpAQCAtNjgxLDcgKzY4OSw3IEBACiAJCShjb25maWdfcGFyYW1zLT5tZmlsdDIgPDwgQ0NEQ19NRklMVDJfU0hJRlQpKTsKIAogCXJlZ3codmFsLCBHQU1NQVdEKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEdBTU1BV0QuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBHQU1NQVdELi4uXG4iLCB2YWwpOwogCiAJLyogY29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLwogCWNjZGNfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKQEAgLTcwNiw3ICs3MTQsNyBAQAogCS8qIENvbmZpZ3VyZSB0aGUgR2FpbiAgJiBvZmZzZXQgY29udHJvbCAqLwogCWNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOwogCiAJLyogQ29uZmlndXJlIERBVEFPRlNUICByZWdpc3RlciAqLwogCXZhbCA9IChjb25maWdfcGFyYW1zLT5kYXRhX29mZnNldC5ob3J6X29mZnNldCAmIENDRENfREFUQU9GU1RfTUFTSykgPDwKQEAgLTcyNiw3ICs3MzQsNyBAQAogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSzsKIAogCQkvKiBhZGp1c3QgdG8gbXVsdGlwbGUgb2YgMzIgKi8KLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKIAkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoKSArIDMxKSA+PiA1KSAmCiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLKTsKIAl9IGVsc2UgewpAQCAtNzM0LDcgKzc0Miw3IEBACiAJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpICYKIAkJCUNDRENfSFNJWkVfVkFMX01BU0s7CiAKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKIAkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSkgJgogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSyk7CiAJfQpAQCAtNzQ1LDM0ICs3NTMsMzQgQEAKIAkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgewogCQkJLyogRm9yIGludGVybGFjZSBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfSU5URVJMQUNFX0lOVkVSU0UsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfSU5URVJMQUNFX0lOVkVSU0UpOwogCQl9IGVsc2UgewogCQkJLyogRm9yIGludGVybGFjZSBub24gaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfU0RPRlNUX0lOVEVSTEFDRV9OT1JNQUwsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTCk7CiAJCX0KIAl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgewogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgcHJvZ2Vzc2l2ZSBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfSU5WRVJTRSwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9JTlZFUlNFKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZvciBwcm9nZXNzaXZlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfTk9STUFMLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX1BST0dSRVNTSVZFX05PUk1BTCk7CiAJCX0KIAl9Ci0JZGV2X2RiZyhkZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNjZGNfY29uZmlndXJlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIGNjZGNfY29uZmlnX3JhdygpOwogCWVsc2UKIAkJY2NkY19jb25maWdfeWNiY3IoKTsKQEAgLTc4MSwyMyArNzg5LDIzIEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJCWNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgY2NkY19nZXRfYnVmdHlwZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGU7Ci0JcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGU7CisJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlOwogfQogCiBzdGF0aWMgaW50IGNjZGNfZW51bV9waXgodTMyICpwaXgsIGludCBpKQogewogCWludCByZXQgPSAtRUlOVkFMOwotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CiAJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CiAJCQlyZXQgPSAwOwpAQCAtODEzLDIwICs4MjEsMTkgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9waXhlbF9mb3JtYXQodTMyIHBpeGZtdCkKIHsKLQlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0gJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdzsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKLQkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQogCQkJYWxhdy0+ZW5hYmxlID0gMTsKIAkJZWxzZSBpZiAocGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CiAJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgzNCwxNyArODQxLDE2IEBACiB9CiBzdGF0aWMgdTMyIGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCXUzMiBwaXhmbXQ7CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlpZiAoYWxhdy0+ZW5hYmxlKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CiAJZWxzZSB7Ci0JCWlmIChjY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCWlmIChjY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CkBAIC04NTMsNTMgKzg1OSw1MyBAQAogfQogc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci53aW4gPSAqd2luOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwkJY2NkY19jZmcueWNiY3Iud2luID0gKndpbjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGNjZGNfY2ZnLmJheWVyLndpbjsKIAllbHNlCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47CisJCSp3aW4gPSBjY2RjX2NmZy55Y2Jjci53aW47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CiAJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aDsKIAkJZWxzZQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGggKiAyOwogCX0gZWxzZQotCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCQlsZW4gPSBjY2RjX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyOwogCXJldHVybiBBTElHTihsZW4sIDMyKTsKIH0KIAogc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwkJY2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmZybV9mbXQ7CiAJZWxzZQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKKwkJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmZybV9mbXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19nZXRmaWQodm9pZCkKQEAgLTkxNiwxNCArOTIyLDE0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCiB7Ci0JY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCWNjZGNfY2ZnLmlmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CiAKIAlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgewogCWNhc2UgVlBGRV9CVDY1NjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgotCQljY2RjX2h3X3BhcmFtc195Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOwotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQljY2RjX2NmZy55Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjX2NmZy55Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBUT0RPIGFkZCBzdXBwb3J0IGZvciByYXcgYmF5ZXIgaGVyZSAqLwpAQCAtOTM4LDcgKzk0NCw2IEBACiAJLmh3X29wcyA9IHsKIAkJLm9wZW4gPSBjY2RjX29wZW4sCiAJCS5jbG9zZSA9IGNjZGNfY2xvc2UsCi0JCS5zZXRfY2NkY19iYXNlID0gY2NkY19zZXRfY2NkY19iYXNlLAogCQkuZW5hYmxlID0gY2NkY19lbmFibGUsCiAJCS5lbmFibGVfb3V0X3RvX3NkcmFtID0gY2NkY19lbmFibGVfb3V0cHV0X3RvX3NkcmFtLAogCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGNjZGNfc2V0X2h3X2lmX3BhcmFtcywKQEAgLTk1OSwxOSArOTY0LDExOCBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbTM1NV9jY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCAoKnNldHVwX3Bpbm11eCkodm9pZCk7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJY2NkY19jZmcuYmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFjY2RjX2NmZy5iYXNlX2FkZHIpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWNjZGNfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcubWNsayk7CisJCWdvdG8gZmFpbF9ub21hcDsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgU2xhdmUgY2xvY2sgKi8KKwljY2RjX2NmZy5zY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2xhdmUiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcuc2Nsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisKKwkvKiBQbGF0Zm9ybSBkYXRhIGhvbGRzIHNldHVwX3Bpbm11eCBmdW5jdGlvbiBwdHIgKi8KKwlpZiAoTlVMTCA9PSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisJc2V0dXBfcGlubXV4ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgY2NkYyB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCBTb0NzIHVzaW5nIHRoaXMgQ0NEQworCSAqLworCXNldHVwX3Bpbm11eCgpOworCWNjZGNfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsIGNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworZmFpbF9zY2xrOgorCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CitmYWlsX21jbGs6CisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKK2ZhaWxfbm9tYXA6CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworZmFpbF9ub21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxfbm9yZXM6CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbTM1NV9jY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbTM1NV9jY2RjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkbTM1NV9jY2RjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZG0zNTVfY2NkY19yZW1vdmUpLAorCS5wcm9iZSA9IGRtMzU1X2NjZGNfcHJvYmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkbTM1NV9jY2RjX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImRtMzU1X2NjZGNfaW5pdFxuIik7Ci0JaWYgKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KSA8IDApCi0JCXJldHVybiAtMTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKLQkJY2NkY19od19kZXYubmFtZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG0zNTVfY2NkY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG0zNTVfY2NkY19leGl0KHZvaWQpCiB7Ci0JdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtMzU1X2NjZGNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZG0zNTVfY2NkY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMKaW5kZXggZDVmYTE5My4uMGMzOTRjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCkBAIC0zNyw4ICszNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKwogI2luY2x1ZGUgImRtNjQ0eF9jY2RjX3JlZ3MuaCIKICNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgogCkBAIC00NiwzMiArNTAsNDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNNjQ0NiIpOwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKLQkud2luID0gQ0NEQ19XSU5fVkdBLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuY29uZmlnX3BhcmFtcyA9IHsKLQkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAorc3RhdGljIHN0cnVjdCBjY2RjX29wZXJfY29uZmlnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJLyogQ0NEQyBpbnRlcmZhY2UgdHlwZSAqLworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJLyogUmF3IEJheWVyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGJheWVyOworCS8qIFlDYkNyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgeWNiY3I7CisJLyogTWFzdGVyIGNsb2NrICovCisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBzbGF2ZSBjbG9jayAqLworCXN0cnVjdCBjbGsgKnNjbGs7CisJLyogY2NkYyBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKK30gY2NkY19jZmcgPSB7CisJLyogUmF3IGNvbmZpZ3VyYXRpb25zICovCisJLmJheWVyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkJLndpbiA9IENDRENfV0lOX1ZHQSwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5jb25maWdfcGFyYW1zID0geworCQkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAorCQl9LAogCX0sCi19OwotCi0vKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAotCS53aW4gPSBDQ0RDX1dJTl9QQUwsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5idDY1Nl9lbmFibGUgPSAxLAotCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKLQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECisJLnljYmNyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLndpbiA9IENDRENfV0lOX1BBTCwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5idDY1Nl9lbmFibGUgPSAxLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKKwl9LAogfTsKIAogI2RlZmluZSBDQ0RDX01BWF9SQVdfWVVWX0ZPUk1BVFMJMgpAQCAtODQsMjUgKzEwMCwxNSBAQAogc3RhdGljIHUzMiBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9CiAJe1Y0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CiAKLXN0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOwotc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKLXN0YXRpYyBlbnVtIHZwZmVfaHdfaWZfdHlwZSBjY2RjX2lmX3R5cGU7Ci0KIC8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLwogc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBjY2RjX3NldF9jY2RjX2Jhc2Uodm9pZCAqYWRkciwgaW50IHNpemUpCi17Ci0JY2NkY19iYXNlX2FkZHIgPSBhZGRyOwotCWNjZGNfYWRkcl9zaXplID0gc2l6ZTsKKwlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2VuYWJsZShpbnQgZmxhZykKQEAgLTEzMiw3ICsxMzgsNyBAQAogCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOwogCWludCB2YWwgPSAwLCBtaWRfaW1nID0gMDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOwogCS8qCiAJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCiAJICogb3V0cHV0IHRvIFNEUkFNLiBleGFtcGxlLCBmb3IgeWNiY3IsIGl0IGlzIG9uZSB5IGFuZCBvbmUgYywgc28gMi4KQEAgLTE3MSw3ICsxNzcsNyBAQAogCXJlZ3coKHZlcnRfc3RhcnQgPDwgQ0NEQ19WRVJUX1NUQVJUX1NMVjBfU0hJRlQpIHwgdmVydF9zdGFydCwKIAkgICAgIENDRENfVkVSVF9TVEFSVCk7CiAJcmVndyh2ZXJ0X25yX2xpbmVzLCBDQ0RDX1ZFUlRfTElORVMpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfcmVhZHJlZ3Modm9pZCkKQEAgLTE3OSwzOSArMTg1LDM5IEBACiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAKIAl2YWwgPSByZWdyKENDRENfQUxBVyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQ0xBTVApOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRENTVUIpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQkxLQ01QKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEJMS0NNUC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEJMS0NNUC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRlBDX0FERFIpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRlBDKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UQ0ZHKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQ09MUFROKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UX0hPUlopOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UX1ZFUlQpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfSFNJWkVfT0ZGKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhTSVpFX09GRi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhTSVpFX09GRi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfU0RPRlNUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNET0ZTVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNET0ZTVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVlBfT1VUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfU1lOX01PREUpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfSE9SWl9JTkZPKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhPUlpfSU5GTy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhPUlpfSU5GTy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVkVSVF9TVEFSVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX1NUQVJULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9TVEFSVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVkVSVF9MSU5FUyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX0xJTkVTLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9MSU5FUy4uLlxuIiwgdmFsKTsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCkBAIC0yMjAsNyArMjI2LDcgQEAKIAkJaWYgKChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA+IENDRENfR0FNTUFfQklUU18wOV8wKSB8fAogCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzE1XzYpIHx8CiAJCSAgICAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBjY2RjcGFyYW0tPmRhdGFfc3opKSB7Ci0JCQlkZXZfZGJnKGRldiwgIlxuSW52YWxpZCBkYXRhIGxpbmUgc2VsZWN0Iik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuSW52YWxpZCBkYXRhIGxpbmUgc2VsZWN0Iik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0yMzAsNyArMjM2LDcgQEAKIHN0YXRpYyBpbnQgY2NkY191cGRhdGVfcmF3X3BhcmFtcyhzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqcmF3X3BhcmFtcykKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgKmZwY192aXJ0YWRkciA9IE5VTEw7CiAJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMOwogCkBAIC0yNjYsNyArMjcyLDcgQEAKIAkJCQkJCQkgRlBfTlVNX0JZVEVTKSk7CiAKIAkJaWYgKGZwY192aXJ0YWRkciA9PSBOVUxMKSB7Ci0JCQlkZXZfZGJnKGRldiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAogCQkJCSJcblVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTI3OSw3ICsyODUsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihmcGNfdmlydGFkZHIsCiAJCQkodm9pZCBfX3VzZXIgKilyYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHIsCiAJCQljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICogRlBfTlVNX0JZVEVTKSkgewotCQlkZXZfZGJnKGRldiwgIlxuIGNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuIGNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyID0gKHVuc2lnbmVkIGludClmcGNfcGh5c2FkZHI7CkBAIC0yODksNyArMjk1LDcgQEAKIHN0YXRpYyBpbnQgY2NkY19jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMLCAqZnBjX3ZpcnRhZGRyID0gTlVMTDsKIAogCWZwY19waHlzYWRkciA9ICh1bnNpZ25lZCBpbnQgKiljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHI7CkBAIC0zMjMsOSArMzI5LDggQEAKIAogc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQogewotCWRldiA9IGRldmljZTsKIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQljY2RjX2VuYWJsZV92cG9ydCgxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MSwxMiArMzQ2LDEyIEBACiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgY2NkY19yYXdfcGFyYW1zOwogCWludCB4OwogCi0JaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJaWYgKHgpIHsKLQkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmciCisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIgogCQkJICAgImNjZGMgcGFyYW1zLCAlZFxuIiwgeCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTM2NCwxMCArMzY5LDEwIEBACiAgKi8KIHZvaWQgY2NkY19jb25maWdfeWNiY3Iodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc195Y2JjcjsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2NmZy55Y2JjcjsKIAl1MzIgc3luX21vZGU7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKIAkvKgogCSAqIGZpcnN0IHJlc3RvcmUgdGhlIENDREMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzCiAJICogVGhpcyBpcyBpbXBvcnRhbnQgc2luY2Ugd2UgYXNzdW1lIGRlZmF1bHQgdmFsdWVzIHRvIGJlIHNldCBpbgpAQCAtNDI4LDcgKzQzMyw3IEBACiAJCXJlZ3coQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQsIENDRENfU0RPRlNUKTsKIAogCWNjZGNfc2JsX3Jlc2V0KCk7Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CiAJY2NkY19yZWFkcmVncygpOwogfQogCkBAIC00NDAsOSArNDQ1LDkgQEAKIAkJLyogY29uZmlndXJlIERDU3ViICovCiAJCXZhbCA9IChiY2xhbXAtPmRjX3N1YikgJiBDQ0RDX0JMS19EQ19TVUJfTUFTSzsKIAkJcmVndyh2YWwsIENDRENfRENTVUIpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOwogCQlyZWd3KENDRENfQ0xBTVBfREVGQVVMVF9WQUwsIENDRENfQ0xBTVApOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gQ0xBTVAuLi5cbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gQ0xBTVAuLi5cbiIpOwogCQlyZXR1cm47CiAJfQogCS8qCkBAIC00NTcsMTAgKzQ2MiwxMCBAQAogCSAgICAgICAoKGJjbGFtcC0+c2FtcGxlX3BpeGVsICYgQ0NEQ19CTEtfU0FNUExFX0xOX01BU0spIDw8CiAJCUNDRENfQkxLX1NBTVBMRV9MTl9TSElGVCkgfCBDQ0RDX0JMS19DTEFNUF9FTkFCTEUpOwogCXJlZ3codmFsLCBDQ0RDX0NMQU1QKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CiAJLyogSWYgQmxhY2sgY2xhbXBpbmcgaXMgZW5hYmxlIHRoZW4gbWFrZSBkY3N1YiAwICovCiAJcmVndyhDQ0RDX0RDU1VCX0RFRkFVTFRfVkFMLCBDQ0RDX0RDU1VCKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAwMDAwIHRvIERDU1VCLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAwMDAwMDAwIHRvIERDU1VCLi4uXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2Uoc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uICpiY29tcCkKQEAgLTQ5MCwxNyArNDk1LDE3IEBACiAKIAkvKiBDb25maWd1cmUgRmF1bHQgcGl4ZWwgaWYgbmVlZGVkICovCiAJcmVndyhmcGMtPmZwY190YWJsZV9hZGRyLCBDQ0RDX0ZQQ19BRERSKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLAorCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsCiAJCSAgICAgICAoZnBjLT5mcGNfdGFibGVfYWRkcikpOwogCS8qIFdyaXRlIHRoZSBGUEMgcGFyYW1zIHdpdGggRlBDIGRpc2FibGUgKi8KIAl2YWwgPSBmcGMtPmZwX251bSAmIENDRENfRlBDX0ZQQ19OVU1fTUFTSzsKIAlyZWd3KHZhbCwgQ0NEQ19GUEMpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiAJLyogcmVhZCB0aGUgRlBDIHJlZ2lzdGVyICovCiAJdmFsID0gcmVncihDQ0RDX0ZQQykgfCBDQ0RDX0ZQQ19FTkFCTEU7CiAJcmVndyh2YWwsIENDRENfRlBDKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKIH0KIAogLyoKQEAgLTUwOSwxMyArNTE0LDEzIEBACiAgKi8KIHZvaWQgY2NkY19jb25maWdfcmF3KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3JhdzsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19jZmcuYmF5ZXI7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IHN5bl9tb2RlID0gMDsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAogCS8qICAgICAgUmVzZXQgQ0NEQyAqLwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwpAQCAtNTQ1LDcgKzU1MCw3IEBACiAJCXZhbCA9ICgoY29uZmlnX3BhcmFtcy0+YWxhdy5nYW1hX3dkICYKIAkJICAgICAgQ0NEQ19BTEFXX0dBTUFfV0RfTUFTSykgfCBDQ0RDX0FMQVdfRU5BQkxFKTsKIAkJcmVndyh2YWwsIENDRENfQUxBVyk7Ci0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOwogCX0KIAogCS8qIENvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KQEAgLTU4MiwxMSArNTg3LDExIEBACiAJLyogV3JpdGUgdmFsdWUgaW4gRk1UQ0ZHICovCiAJcmVndyh2YWwsIENDRENfRk1UQ0ZHKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOwogCS8qIENvbmZpZ3VyZSB0aGUgY29sb3IgcGF0dGVybiBhY2NvcmRpbmcgdG8gbXQ5dDAwMSBzZW5zb3IgKi8KIAlyZWd3KENDRENfQ09MUFROX1ZBTCwgQ0NEQ19DT0xQVE4pOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHhCQjExQkIxMSB0byBDT0xQVE4uLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4QkIxMUJCMTEgdG8gQ09MUFROLi4uXG4iKTsKIAkvKgogCSAqIENvbmZpZ3VyZSBEYXRhIGZvcm1hdHRlcihWaWRlbyBwb3J0KSBwaXhlbCBzZWxlY3Rpb24KIAkgKiAoRk1UX0hPUlosIEZNVF9WRVJUKQpAQCAtNTk2LDcgKzYwMSw3IEBACiAJICAgICAgKHBhcmFtcy0+d2luLndpZHRoICYgQ0NEQ19GTVRfSE9SWl9GTVRMTkhfTUFTSyk7CiAJcmVndyh2YWwsIENDRENfRk1UX0hPUlopOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOwogCXZhbCA9IChwYXJhbXMtPndpbi50b3AgJiBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9NQVNLKQogCSAgICA8PCBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9TSElGVDsKIAlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKQpAQCAtNjA0LDEzICs2MDksMTMgQEAKIAllbHNlCiAJCXZhbCB8PSAocGFyYW1zLT53aW4uaGVpZ2h0ID4+IDEpICYgQ0NEQ19GTVRfVkVSVF9GTVRMTlZfTUFTSzsKIAotCWRldl9kYmcoZGV2LCAiXG5wYXJhbXMtPndpbi5oZWlnaHQgIDB4JXggLi4uXG4iLAorCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5wYXJhbXMtPndpbi5oZWlnaHQgIDB4JXggLi4uXG4iLAogCSAgICAgICBwYXJhbXMtPndpbi5oZWlnaHQpOwogCXJlZ3codmFsLCBDQ0RDX0ZNVF9WRVJUKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKIAotCWRldl9kYmcoZGV2LCAiXG5iZWxvdyByZWd3KHZhbCwgRk1UX1ZFUlQpLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmJlbG93IHJlZ3codmFsLCBGTVRfVkVSVCkuLi4iKTsKIAogCS8qCiAJICogQ29uZmlndXJlIEhvcml6b250YWwgb2Zmc2V0IHJlZ2lzdGVyLiBJZiBwYWNrIDggaXMgZW5hYmxlZCB0aGVuCkBAIC02MzEsMTcgKzYzNiwxNyBAQAogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgaW50ZWxhY2UgaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfSU5URVJMQUNFRF9JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHg0QjZEIHRvIFNET0ZTVC4uXG4iKTsKIAkJfQogCiAJCWVsc2UgewogCQkJLyogRm9yIGludGVsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19JTlRFUkxBQ0VEX05PX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMjQ5IHRvIFNET0ZTVC4uLlxuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAyNDkgdG8gU0RPRlNULi5cbiIpOwogCQl9CiAJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKIAkJcmVndyhDQ0RDX1BST0dSRVNTSVZFX05PX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gU0RPRlNULi4uXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CiAJfQogCiAJLyoKQEAgLTY2MiwxOCArNjY3LDE4IEBACiAJdmFsIHw9IChwYXJhbXMtPndpbi5sZWZ0KSAmIENDRENfVlBfT1VUX0hPUlpfU1RfTUFTSzsKIAlyZWd3KHZhbCwgQ0NEQ19WUF9PVVQpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CiAJcmVndyhzeW5fbW9kZSwgQ0NEQ19TWU5fTU9ERSk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgc3luX21vZGUpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHN5bl9tb2RlKTsKIAogCWNjZGNfc2JsX3Jlc2V0KCk7Ci0JZGV2X2RiZyhkZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCWNjZGNfcmVhZHJlZ3MoKTsKIH0KIAogc3RhdGljIGludCBjY2RjX2NvbmZpZ3VyZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWNjZGNfY29uZmlnX3JhdygpOwogCWVsc2UKIAkJY2NkY19jb25maWdfeWNiY3IoKTsKQEAgLTY4MiwyNCArNjg3LDI0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJCWNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKLQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19jZmcueWNiY3IuYnVmX3R5cGU7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKIAkJCSpwaXggPSBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKIAkJCXJldCA9IDA7CkBAIC03MTUsMTcgKzcyMCwxNyBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCh1MzIgcGl4Zm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKLQkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQotCQkJY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdy5lbmFibGUgPSAxOworCQkJY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3LmVuYWJsZSA9IDE7CiAJCWVsc2UgaWYgKHBpeGZtdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOwogCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOwogCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MzQsMTcgKzczOSwxNiBAQAogCiBzdGF0aWMgdTMyIGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCXUzMiBwaXhmbXQ7CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlpZiAoYWxhdy0+ZW5hYmxlKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CiAJZWxzZSB7Ci0JCWlmIChjY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCWlmIChjY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CkBAIC03NTQsNTMgKzc1OCw1MyBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLndpbiA9ICp3aW47CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCQljY2RjX2NmZy55Y2Jjci53aW4gPSAqd2luOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19jZmcuYmF5ZXIud2luOwogCWVsc2UKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKKwkJKndpbiA9IGNjZGNfY2ZnLnljYmNyLndpbjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgfHwKIAkJICAgIChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykpCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoOwogCQllbHNlCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoICogMjsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aCAqIDI7CiAJfSBlbHNlCi0JCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJCWxlbiA9IGNjZGNfY2ZnLnljYmNyLndpbi53aWR0aCAqIDI7CiAJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCQljY2RjX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2NkY19mcm1mbXQgY2NkY19nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdDsKIAllbHNlCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworCQlyZXR1cm4gY2NkY19jZmcueWNiY3IuZnJtX2ZtdDsKIH0KIAogc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQpAQCAtODE2LDE0ICs4MjAsMTQgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKIHsKLQljY2RjX2lmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisJY2NkY19jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKIAogCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CiAJY2FzZSBWUEZFX0JUNjU2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHJhdyBiYXllciBoZXJlICovCkBAIC04MzgsNyArODQyLDYgQEAKIAkuaHdfb3BzID0gewogCQkub3BlbiA9IGNjZGNfb3BlbiwKIAkJLmNsb3NlID0gY2NkY19jbG9zZSwKLQkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCiAJCS5yZXNldCA9IGNjZGNfc2JsX3Jlc2V0LAogCQkuZW5hYmxlID0gY2NkY19lbmFibGUsCiAJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLApAQCAtODU5LDE5ICs4NjIsMTA1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGRtNjQ0eF9jY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJY2NkY19jZmcuYmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFjY2RjX2NmZy5iYXNlX2FkZHIpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWNjZGNfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcubWNsayk7CisJCWdvdG8gZmFpbF9ub21hcDsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgU2xhdmUgY2xvY2sgKi8KKwljY2RjX2NmZy5zY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2xhdmUiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcuc2Nsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisJY2NkY19jZmcuZGV2ID0gJnBkZXYtPmRldjsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwgY2NkY19od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX3NjbGs6CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKK2ZhaWxfbWNsazoKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworZmFpbF9ub21hcDoKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CitmYWlsX25vbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9ub3JlczoKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRtNjQ0eF9jY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbTY0NHhfY2NkY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZG02NDR4X2NjZGMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbTY0NHhfY2NkY19yZW1vdmUpLAorCS5wcm9iZSA9IGRtNjQ0eF9jY2RjX3Byb2JlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZG02NDR4X2NjZGNfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiZG02NDR4X2NjZGNfaW5pdFxuIik7Ci0JaWYgKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KSA8IDApCi0JCXJldHVybiAtMTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKLQkJY2NkY19od19kZXYubmFtZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG02NDR4X2NjZGNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRtNjQ0eF9jY2RjX2V4aXQodm9pZCkKIHsKLQl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG02NDR4X2NjZGNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZG02NDR4X2NjZGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMyOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYwpAQCAtMCwwICsxLDExNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAoSVNJRikgZHJpdmVyCisgKgorICogVGhpcyBkcml2ZXIgaXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBJU0lGIElQIGF2YWlsYWJsZSBvbiBETTM2NSBvciBhbnkgb3RoZXIKKyAqIFRJIFNvQ3MuIFRoaXMgaXMgdXNlZCBmb3IgY2FwdHVyaW5nIHl1diBvciBiYXllciB2aWRlbyBvciBpbWFnZSBkYXRhCisgKiBmcm9tIGEgZGVjb2RlciBvciBzZW5zb3IuIFRoaXMgSVAgaXMgc2ltaWxhciB0byB0aGUgQ0NEQyBJUCBvbiBETTM1NQorICogYW5kIERNNjQ0NiwgYnV0IHdpdGggZW5oYW5jZWQgb3IgYWRkaXRpb25hbCBpcCBibG9ja3MuIFRoZSBkcml2ZXIKKyAqIGNvbmZpZ3VyZXMgdGhlIElTSUYgdXBvbiBjb21tYW5kcyBmcm9tIHRoZSB2cGZlIGJyaWRnZSBkcml2ZXIgdGhyb3VnaAorICogY2NkY19od19kZXZpY2UgaW50ZXJmYWNlLgorICoKKyAqIFRPRE86IDEpIFJhdyBiYXllciBwYXJhbWV0ZXIgc2V0dGluZ3MgYW5kIGJheWVyIGNhcHR1cmUKKyAqCSAyKSBBZGQgc3VwcG9ydCBmb3IgY29udHJvbCBpb2N0bAorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2lzaWYuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKworI2luY2x1ZGUgImlzaWZfcmVncy5oIgorI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCisKKy8qIERlZmF1bHRzIGZvciBtb2R1bGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCitzdGF0aWMgc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgaXNpZl9jb25maWdfZGVmYXVsdHMgPSB7CisJLmxpbmVhcml6ZSA9IHsKKwkJLmVuID0gMCwKKwkJLmNvcnJfc2hmdCA9IElTSUZfTk9fU0hJRlQsCisJCS5zY2FsZV9mYWN0ID0gezEsIDB9LAorCX0sCisJLmRmX2NzYyA9IHsKKwkJLmRmX29yX2NzYyA9IDAsCisJCS5jc2MgPSB7CisJCQkuZW4gPSAwLAorCQl9LAorCX0sCisJLmRmYyA9IHsKKwkJLmVuID0gMCwKKwl9LAorCS5iY2xhbXAgPSB7CisJCS5lbiA9IDAsCisJfSwKKwkuZ2Fpbl9vZmZzZXQgPSB7CisJCS5nYWluID0geworCQkJLnJfeWUgPSB7MSwgMH0sCisJCQkuZ3JfY3kgPSB7MSwgMH0sCisJCQkuZ2JfZyA9IHsxLCAwfSwKKwkJCS5iX21nID0gezEsIDB9LAorCQl9LAorCX0sCisJLmN1bGxpbmcgPSB7CisJCS5oY3BhdF9vZGQgPSAweGZmLAorCQkuaGNwYXRfZXZlbiA9IDB4ZmYsCisJCS52Y3BhdCA9IDB4ZmYsCisJfSwKKwkuY29tcHJlc3MgPSB7CisJCS5hbGcgPSBJU0lGX0FMQVcsCisJfSwKK307CisKKy8qIElTSUYgb3BlcmF0aW9uIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgaXNpZl9vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJc3RydWN0IGlzaWZfeWNiY3JfY29uZmlnIHljYmNyOworCXN0cnVjdCBpc2lmX3BhcmFtc19yYXcgYmF5ZXI7CisJZW51bSBpc2lmX2RhdGFfcGFjayBkYXRhX3BhY2s7CisJLyogTWFzdGVyIGNsb2NrICovCisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBJU0lGIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCS8qIElTSUYgTGluZWFyIFRhYmxlIDAgKi8KKwl2b2lkIF9faW9tZW0gKmxpbmVhcl90YmwwX2FkZHI7CisJLyogSVNJRiBMaW5lYXIgVGFibGUgMSAqLworCXZvaWQgX19pb21lbSAqbGluZWFyX3RibDFfYWRkcjsKK30gaXNpZl9jZmcgPSB7CisJLnljYmNyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLndpbiA9IElTSUZfV0lOX05UU0MsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQsCisJfSwKKwkuYmF5ZXIgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCQkud2luID0gSVNJRl9XSU5fVkdBLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmdhaW4gPSB7CisJCQkucl95ZSA9IHsxLCAwfSwKKwkJCS5ncl9jeSA9IHsxLCAwfSwKKwkJCS5nYl9nID0gezEsIDB9LAorCQkJLmJfbWcgPSB7MSwgMH0sCisJCX0sCisJCS5jZmFfcGF0ID0gSVNJRl9DRkFfUEFUX01PU0FJQywKKwkJLmRhdGFfbXNiID0gSVNJRl9CSVRfTVNCXzExLAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhX3NoaWZ0ID0gSVNJRl9OT19TSElGVCwKKwkJCS5jb2xfcGF0X2ZpZWxkMCA9IHsKKwkJCQkub2xvcCA9IElTSUZfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IElTSUZfQkxVRSwKKwkJCQkuZWxvcCA9IElTSUZfUkVELAorCQkJCS5lbGVwID0gSVNJRl9HUkVFTl9SRUQsCisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQxID0geworCQkJCS5vbG9wID0gSVNJRl9HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gSVNJRl9CTFVFLAorCQkJCS5lbG9wID0gSVNJRl9SRUQsCisJCQkJLmVsZXAgPSBJU0lGX0dSRUVOX1JFRCwKKwkJCX0sCisJCQkudGVzdF9wYXRfZ2VuID0gMCwKKwkJfSwKKwl9LAorCS5kYXRhX3BhY2sgPSBJU0lGX0RBVEFfUEFDSzgsCit9OworCisvKiBSYXcgQmF5ZXIgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0c1tdID0geworCVY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKKworLyogUmF3IFlVViBmb3JtYXRzICovCitzdGF0aWMgY29uc3QgdTMyIGlzaWZfcmF3X3l1dl9waXhfZm9ybWF0c1tdID0geworCVY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CisKKy8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChpc2lmX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGlzaWZfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7Cit9CisKKy8qIHJlZ19tb2RpZnkoKSAtIHJlYWQsIG1vZGlmeSBhbmQgd3JpdGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ19tb2RpZnkodTMyIG1hc2ssIHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJdTMyIG5ld192YWwgPSAocmVncihvZmZzZXQpICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCisJcmVndyhuZXdfdmFsLCBvZmZzZXQpOworCXJldHVybiBuZXdfdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnd19saW5fdGJsKHUzMiB2YWwsIHUzMiBvZmZzZXQsIGludCBpKQoreworCWlmICghaSkKKwkJX19yYXdfd3JpdGVsKHZhbCwgaXNpZl9jZmcubGluZWFyX3RibDBfYWRkciArIG9mZnNldCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmFsLCBpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9kaXNhYmxlX2FsbF9tb2R1bGVzKHZvaWQpCit7CisJLyogZGlzYWJsZSBCQyAqLworCXJlZ3coMCwgQ0xBTVBDRkcpOworCS8qIGRpc2FibGUgdmRmYyAqLworCXJlZ3coMCwgREZDQ1RMKTsKKwkvKiBkaXNhYmxlIENTQyAqLworCXJlZ3coMCwgQ1NDQ1RMKTsKKwkvKiBkaXNhYmxlIGxpbmVhcml6YXRpb24gKi8KKwlyZWd3KDAsIExJTkNGRzApOworCS8qIGRpc2FibGUgb3RoZXIgbW9kdWxlcyBoZXJlIGFzIHRoZXkgYXJlIHN1cHBvcnRlZCAqLworfQorCitzdGF0aWMgdm9pZCBpc2lmX2VuYWJsZShpbnQgZW4pCit7CisJaWYgKCFlbikgeworCQkvKiBCZWZvcmUgZGlzYWJsZSBpc2lmLCBkaXNhYmxlIGFsbCBJU0lGIG1vZHVsZXMgKi8KKwkJaXNpZl9kaXNhYmxlX2FsbF9tb2R1bGVzKCk7CisJCS8qCisJCSAqIHdhaXQgZm9yIG5leHQgVkQuIEFzc3VtZSBsb3dlc3Qgc2NhbiByYXRlIGlzIDEyIEh6LiBTbworCQkgKiAxMDAgbXNlYyBkZWxheSBpcyBnb29kIGVub3VnaAorCQkgKi8KKwkJbXNsZWVwKDEwMCk7CisJfQorCXJlZ19tb2RpZnkoSVNJRl9TWU5DRU5fVkRIREVOX01BU0ssIGVuLCBTWU5DRU4pOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0oaW50IGVuKQoreworCXJlZ19tb2RpZnkoSVNJRl9TWU5DRU5fV0VOX01BU0ssIGVuIDw8IElTSUZfU1lOQ0VOX1dFTl9TSElGVCwgU1lOQ0VOKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfY3VsbGluZyhzdHJ1Y3QgaXNpZl9jdWwgKmN1bCkKK3sKKwl1MzIgdmFsOworCisJLyogSG9yaXpvbnRhbCBwYXR0ZXJuICovCisJdmFsID0gKGN1bC0+aGNwYXRfZXZlbiA8PCBDVUxMX1BBVF9FVkVOX0xJTkVfU0hJRlQpIHwgY3VsLT5oY3BhdF9vZGQ7CisJcmVndyh2YWwsIENVTEgpOworCisJLyogdmVydGljYWwgcGF0dGVybiAqLworCXJlZ3coY3VsLT52Y3BhdCwgQ1VMVik7CisKKwkvKiBMUEYgKi8KKwlyZWdfbW9kaWZ5KElTSUZfTFBGX01BU0sgPDwgSVNJRl9MUEZfU0hJRlQsCisJCSAgY3VsLT5lbl9scGYgPDwgSVNJRl9MUEZfU0hJRlQsIE1PREVTRVQpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19nYWluX29mZnNldCh2b2lkKQoreworCXN0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogKmdhaW5fb2ZmX3AgPQorCQkmaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5nYWluX29mZnNldDsKKwl1MzIgdmFsOworCisJdmFsID0gKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9zZHJhbV9lbiA8PCBHQUlOX1NEUkFNX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9pcGlwZV9lbiA8PCBHQUlOX0lQSVBFX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9oM2FfZW4gPDwgR0FJTl9IM0FfRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5vZmZzZXRfc2RyYW1fZW4gPDwgT0ZTVF9TRFJBTV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPm9mZnNldF9pcGlwZV9lbiA8PCBPRlNUX0lQSVBFX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+b2Zmc2V0X2gzYV9lbiA8PCBPRlNUX0gzQV9FTl9TSElGVCk7CisKKwlyZWdfbW9kaWZ5KEdBSU5fT0ZGU0VUX0VOX01BU0ssIHZhbCwgQ0dBTU1BV0QpOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4ucl95ZS5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLnJfeWUuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ1JHQUlOKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLmdyX2N5LmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uZ3JfY3kuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ0dSR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5nYl9nLmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uZ2JfZy5kZWNpbWFsOworCXJlZ3codmFsLCBDR0JHQUlOKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLmJfbWcuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5iX21nLmRlY2ltYWw7CisJcmVndyh2YWwsIENCR0FJTik7CisKKwlyZWd3KGdhaW5fb2ZmX3AtPm9mZnNldCwgQ09GU1RBKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9yZXN0b3JlX2RlZmF1bHRzKHZvaWQpCit7CisJZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzb3VyY2UgPSBWUFNTX0NDRENJTjsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5zdGFydGluZyBpc2lmX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zID0gaXNpZl9jb25maWdfZGVmYXVsdHM7CisJLyogRW5hYmxlIGNsb2NrIHRvIElTSUYsIElQSVBFSUYgYW5kIEJMICovCisJdnBzc19lbmFibGVfY2xvY2soVlBTU19DQ0RDX0NMT0NLLCAxKTsKKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0lQSVBFSUZfQ0xPQ0ssIDEpOworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQkxfQ0xPQ0ssIDEpOworCS8qIFNldCBkZWZhdWx0IG9mZnNldCBhbmQgZ2FpbiAqLworCWlzaWZfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CisJdnBzc19zZWxlY3RfY2NkY19zb3VyY2Uoc291cmNlKTsKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuRW5kIG9mIGlzaWZfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworfQorCitzdGF0aWMgaW50IGlzaWZfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJaXNpZl9yZXN0b3JlX2RlZmF1bHRzKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgdGhlIHdpbmRvdyBzaXplIHRvIGJlIGNhcHR1cmUgaW4gSVNJRiByZWcgKi8KK3N0YXRpYyB2b2lkIGlzaWZfc2V0d2luKHN0cnVjdCB2NGwyX3JlY3QgKmltYWdlX3dpbiwKKwkJCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCwgaW50IHBwYykKK3sKKwlpbnQgaG9yel9zdGFydCwgaG9yel9ucl9waXhlbHM7CisJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CisJaW50IG1pZF9pbWcgPSAwOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfc2V0d2luLi4uIik7CisJLyoKKwkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKKwkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgorCSAqIHJhdyBjYXB0dXJlIHRoaXMgaXMgMQorCSAqLworCWhvcnpfc3RhcnQgPSBpbWFnZV93aW4tPmxlZnQgPDwgKHBwYyAtIDEpOworCWhvcnpfbnJfcGl4ZWxzID0gKChpbWFnZV93aW4tPndpZHRoKSA8PCAocHBjIC0gMSkpIC0gMTsKKworCS8qIFdyaXRpbmcgdGhlIGhvcml6b250YWwgaW5mbyBpbnRvIHRoZSByZWdpc3RlcnMgKi8KKwlyZWd3KGhvcnpfc3RhcnQgJiBTVEFSVF9QWF9IT1JfTUFTSywgU1BIKTsKKwlyZWd3KGhvcnpfbnJfcGl4ZWxzICYgTlVNX1BYX0hPUl9NQVNLLCBMTkgpOworCXZlcnRfc3RhcnQgPSBpbWFnZV93aW4tPnRvcDsKKworCWlmIChmcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJdmVydF9ucl9saW5lcyA9IChpbWFnZV93aW4tPmhlaWdodCA+PiAxKSAtIDE7CisJCXZlcnRfc3RhcnQgPj49IDE7CisJCS8qIFRvIGFjY291bnQgZm9yIFZEIHNpbmNlIGxpbmUgMCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCX0gZWxzZSB7CisJCS8qIFRvIGFjY291bnQgZm9yIFZEIHNpbmNlIGxpbmUgMCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCQl2ZXJ0X25yX2xpbmVzID0gaW1hZ2Vfd2luLT5oZWlnaHQgLSAxOworCQkvKiBjb25maWd1cmUgVkRJTlQwIGFuZCBWRElOVDEgKi8KKwkJbWlkX2ltZyA9IHZlcnRfc3RhcnQgKyAoaW1hZ2Vfd2luLT5oZWlnaHQgLyAyKTsKKwkJcmVndyhtaWRfaW1nLCBWRElOVDEpOworCX0KKworCXJlZ3coMCwgVkRJTlQwKTsKKwlyZWd3KHZlcnRfc3RhcnQgJiBTVEFSVF9WRVJfT05FX01BU0ssIFNMVjApOworCXJlZ3codmVydF9zdGFydCAmIFNUQVJUX1ZFUl9UV09fTUFTSywgU0xWMSk7CisJcmVndyh2ZXJ0X25yX2xpbmVzICYgTlVNX0xJTkVTX1ZFUiwgTE5WKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfYmNsYW1wKHN0cnVjdCBpc2lmX2JsYWNrX2NsYW1wICpiYykKK3sKKwl1MzIgdmFsOworCisJLyoKKwkgKiBEQyBPZmZzZXQgaXMgYWx3YXlzIGFkZGVkIHRvIGltYWdlIGRhdGEgaXJyZXNwZWN0aXZlIG9mIGJjIGVuYWJsZQorCSAqIHN0YXR1cworCSAqLworCXJlZ3coYmMtPmRjX29mZnNldCwgQ0xEQ09GU1QpOworCisJaWYgKGJjLT5lbikgeworCQl2YWwgPSBiYy0+YmNfbW9kZV9jb2xvciA8PCBJU0lGX0JDX01PREVfQ09MT1JfU0hJRlQ7CisKKwkJLyogRW5hYmxlIEJDIGFuZCBob3Jpem9udGFsIGNsYW1wIGNhY3VsYXRpb24gcGFyYW1hdGVycyAqLworCQl2YWwgPSB2YWwgfCAxIHwgKGJjLT5ob3J6Lm1vZGUgPDwgSVNJRl9IT1JaX0JDX01PREVfU0hJRlQpOworCisJCXJlZ3codmFsLCBDTEFNUENGRyk7CisKKwkJaWYgKGJjLT5ob3J6Lm1vZGUgIT0gSVNJRl9IT1JaX0JDX0RJU0FCTEUpIHsKKwkJCS8qCisJCQkgKiBXaW5kb3cgY291bnQgZm9yIGNhbGN1bGF0aW9uCisJCQkgKiBCYXNlIHdpbmRvdyBzZWxlY3Rpb24KKwkJCSAqIHBpeGVsIGxpbWl0CisJCQkgKiBIb3Jpem9udGFsIHNpemUgb2Ygd2luZG93CisJCQkgKiB2ZXJ0aWNhbCBzaXplIG9mIHRoZSB3aW5kb3cKKwkJCSAqIEhvcml6b250YWwgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdworCQkJICogVmVydGljYWwgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdworCQkJICovCisJCQl2YWwgPSBiYy0+aG9yei53aW5fY291bnRfY2FsYyB8CisJCQkgICAgICAoKCEhYmMtPmhvcnouYmFzZV93aW5fc2VsX2NhbGMpIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9TRUxfU0hJRlQpIHwKKwkJCSAgICAgICgoISFiYy0+aG9yei5jbGFtcF9waXhfbGltaXQpIDw8CisJCQkJSVNJRl9IT1JaX0JDX1BJWF9MSU1JVF9TSElGVCkgfAorCQkJICAgICAgKGJjLT5ob3J6Lndpbl9oX3N6X2NhbGMgPDwKKwkJCQlJU0lGX0hPUlpfQkNfV0lOX0hfU0laRV9TSElGVCkgfAorCQkJICAgICAgKGJjLT5ob3J6Lndpbl92X3N6X2NhbGMgPDwKKwkJCQlJU0lGX0hPUlpfQkNfV0lOX1ZfU0laRV9TSElGVCk7CisJCQlyZWd3KHZhbCwgQ0xIV0lOMCk7CisKKwkJCXJlZ3coYmMtPmhvcnoud2luX3N0YXJ0X2hfY2FsYywgQ0xIV0lOMSk7CisJCQlyZWd3KGJjLT5ob3J6Lndpbl9zdGFydF92X2NhbGMsIENMSFdJTjIpOworCQl9CisKKwkJLyogdmVydGljYWwgY2xhbXAgY2FjdWxhdGlvbiBwYXJhbWF0ZXJzICovCisKKwkJLyogUmVzZXQgY2xhbXAgdmFsdWUgc2VsIGZvciBwcmV2aW91cyBsaW5lICovCisJCXZhbCB8PQorCQkoYmMtPnZlcnQucmVzZXRfdmFsX3NlbCA8PCBJU0lGX1ZFUlRfQkNfUlNUX1ZBTF9TRUxfU0hJRlQpIHwKKwkJKGJjLT52ZXJ0LmxpbmVfYXZlX2NvZWYgPDwgSVNJRl9WRVJUX0JDX0xJTkVfQVZFX0NPRUZfU0hJRlQpOworCQlyZWd3KHZhbCwgQ0xWV0lOMCk7CisKKwkJLyogT3B0aWNhbCBCbGFjayBob3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uICovCisJCXJlZ3coYmMtPnZlcnQub2Jfc3RhcnRfaCwgQ0xWV0lOMSk7CisJCS8qIE9wdGljYWwgQmxhY2sgdmVydGljYWwgc3RhcnQgcG9zaXRpb24gKi8KKwkJcmVndyhiYy0+dmVydC5vYl9zdGFydF92LCBDTFZXSU4yKTsKKwkJLyogT3B0aWNhbCBCbGFjayB2ZXJ0aWNhbCBzaXplIGZvciBjYWxjdWxhdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0Lm9iX3Zfc3pfY2FsYywgQ0xWV0lOMyk7CisJCS8qIFZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIGZvciBCQyBzdWJ0cmFjdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0X3N0YXJ0X3N1YiwgQ0xTVik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19saW5lYXJpemF0aW9uKHN0cnVjdCBpc2lmX2xpbmVhcml6ZSAqbGluZWFyaXplKQoreworCXUzMiB2YWwsIGk7CisKKwlpZiAoIWxpbmVhcml6ZS0+ZW4pIHsKKwkJcmVndygwLCBMSU5DRkcwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNoaWZ0IHZhbHVlIGZvciBjb3JyZWN0aW9uICYgZW5hYmxlIGxpbmVhcml6YXRpb24gKHNldCBsc2IpICovCisJdmFsID0gKGxpbmVhcml6ZS0+Y29ycl9zaGZ0IDw8IElTSUZfTElOX0NPUlJTRlRfU0hJRlQpIHwgMTsKKwlyZWd3KHZhbCwgTElOQ0ZHMCk7CisKKwkvKiBTY2FsZSBmYWN0b3IgKi8KKwl2YWwgPSAoKCEhbGluZWFyaXplLT5zY2FsZV9mYWN0LmludGVnZXIpIDw8CisJICAgICAgIElTSUZfTElOX1NDQUxFX0ZBQ1RfSU5URUdfU0hJRlQpIHwKKwkgICAgICAgbGluZWFyaXplLT5zY2FsZV9mYWN0LmRlY2ltYWw7CisJcmVndyh2YWwsIExJTkNGRzEpOworCisJZm9yIChpID0gMDsgaSA8IElTSUZfTElORUFSX1RBQl9TSVpFOyBpKyspIHsKKwkJaWYgKGkgJSAyKQorCQkJcmVnd19saW5fdGJsKGxpbmVhcml6ZS0+dGFibGVbaV0sICgoaSA+PiAxKSA8PCAyKSwgMSk7CisJCWVsc2UKKwkJCXJlZ3dfbGluX3RibChsaW5lYXJpemUtPnRhYmxlW2ldLCAoKGkgPj4gMSkgPDwgMiksIDApOworCX0KK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ19kZmMoc3RydWN0IGlzaWZfZGZjICp2ZGZjKQoreworCS8qIGluaXRpYWxpemUgcmV0cmllcyB0byBsb29wIGZvciBtYXggfiAyNTAgdXNlYyAqLworCXUzMiB2YWwsIGNvdW50LCByZXRyaWVzID0gbG9vcHNfcGVyX2ppZmZ5IC8gKDQwMDAvSFopOworCWludCBpOworCisJaWYgKCF2ZGZjLT5lbikKKwkJcmV0dXJuIDA7CisKKwkvKiBDb3JyZWN0aW9uIG1vZGUgKi8KKwl2YWwgPSAodmRmYy0+Y29ycl9tb2RlIDw8IElTSUZfVkRGQ19DT1JSX01PRF9TSElGVCk7CisKKwkvKiBDb3JyZWN0IHdob2xlIGxpbmUgb3IgcGFydGlhbCAqLworCWlmICh2ZGZjLT5jb3JyX3dob2xlX2xpbmUpCisJCXZhbCB8PSAxIDw8IElTSUZfVkRGQ19DT1JSX1dIT0xFX0xOX1NISUZUOworCisJLyogbGV2ZWwgc2hpZnQgdmFsdWUgKi8KKwl2YWwgfD0gdmRmYy0+ZGVmX2xldmVsX3NoaWZ0IDw8IElTSUZfVkRGQ19MRVZFTF9TSEZUX1NISUZUOworCisJcmVndyh2YWwsIERGQ0NUTCk7CisKKwkvKiBEZWZlY3Qgc2F0dXJhdGlvbiBsZXZlbCAqLworCXJlZ3codmRmYy0+ZGVmX3NhdF9sZXZlbCwgVkRGU0FUTFYpOworCisJcmVndyh2ZGZjLT50YWJsZVswXS5wb3NfdmVydCwgREZDTUVNMCk7CisJcmVndyh2ZGZjLT50YWJsZVswXS5wb3NfaG9yeiwgREZDTUVNMSk7CisJaWYgKHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfTk9STUFMIHx8CisJICAgIHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTF9JRl9TQVQpIHsKKwkJcmVndyh2ZGZjLT50YWJsZVswXS5sZXZlbF9hdF9wb3MsIERGQ01FTTIpOworCQlyZWd3KHZkZmMtPnRhYmxlWzBdLmxldmVsX3VwX3BpeGVscywgREZDTUVNMyk7CisJCXJlZ3codmRmYy0+dGFibGVbMF0ubGV2ZWxfbG93X3BpeGVscywgREZDTUVNNCk7CisJfQorCisJLyogc2V0IERGQ01BUlNUIGFuZCBzZXQgREZDTVdSICovCisJdmFsID0gcmVncihERkNNRU1DVEwpIHwgKDEgPDwgSVNJRl9ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQpIHwgMTsKKwlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKworCWNvdW50ID0gcmV0cmllczsKKwl3aGlsZSAoY291bnQgJiYgKHJlZ3IoREZDTUVNQ1RMKSAmIDB4MSkpCisJCWNvdW50LS07CisKKwlpZiAoIWNvdW50KSB7CisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDE7IGkgPCB2ZGZjLT5udW1fdmRlZmVjdHM7IGkrKykgeworCQlyZWd3KHZkZmMtPnRhYmxlW2ldLnBvc192ZXJ0LCBERkNNRU0wKTsKKwkJcmVndyh2ZGZjLT50YWJsZVtpXS5wb3NfaG9yeiwgREZDTUVNMSk7CisJCWlmICh2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX05PUk1BTCB8fAorCQkgICAgdmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVCkgeworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF9hdF9wb3MsIERGQ01FTTIpOworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF91cF9waXhlbHMsIERGQ01FTTMpOworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF9sb3dfcGl4ZWxzLCBERkNNRU00KTsKKwkJfQorCQl2YWwgPSByZWdyKERGQ01FTUNUTCk7CisJCS8qIGNsZWFyIERGQ01BUlNUIGFuZCBzZXQgREZDTVdSICovCisJCXZhbCAmPSB+QklUKElTSUZfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUKTsKKwkJdmFsIHw9IDE7CisJCXJlZ3codmFsLCBERkNNRU1DVEwpOworCisJCWNvdW50ID0gcmV0cmllczsKKwkJd2hpbGUgKGNvdW50ICYmIChyZWdyKERGQ01FTUNUTCkgJiAweDEpKQorCQkJY291bnQtLTsKKworCQlpZiAoIWNvdW50KSB7CisJCQlkZXZfZXJyKGlzaWZfY2ZnLmRldiwKKwkJCQkiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAodmRmYy0+bnVtX3ZkZWZlY3RzIDwgSVNJRl9WREZDX1RBQkxFX1NJWkUpIHsKKwkJLyogRXh0cmEgY3ljbGUgbmVlZGVkICovCisJCXJlZ3coMCwgREZDTUVNMCk7CisJCXJlZ3coMHgxRkZGLCBERkNNRU0xKTsKKwkJcmVndygxLCBERkNNRU1DVEwpOworCX0KKworCS8qIGVuYWJsZSBWREZDICovCisJcmVnX21vZGlmeSgoMSA8PCBJU0lGX1ZERkNfRU5fU0hJRlQpLCAoMSA8PCBJU0lGX1ZERkNfRU5fU0hJRlQpLAorCQkgICBERkNDVEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19jc2Moc3RydWN0IGlzaWZfZGZfY3NjICpkZl9jc2MpCit7CisJdTMyIHZhbDEgPSAwLCB2YWwyID0gMCwgaTsKKworCWlmICghZGZfY3NjLT5jc2MuZW4pIHsKKwkJcmVndygwLCBDU0NDVEwpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBJU0lGX0NTQ19OVU1fQ09FRkY7IGkrKykgeworCQlpZiAoKGkgJSAyKSA9PSAwKSB7CisJCQkvKiBDU0NNIC0gTFNCICovCisJCQl2YWwxID0gKGRmX2NzYy0+Y3NjLmNvZWZmW2ldLmludGVnZXIgPDwKKwkJCQlJU0lGX0NTQ19DT0VGX0lOVEVHX1NISUZUKSB8CisJCQkJZGZfY3NjLT5jc2MuY29lZmZbaV0uZGVjaW1hbDsKKwkJfSBlbHNlIHsKKworCQkJLyogQ1NDTSAtIE1TQiAqLworCQkJdmFsMiA9IChkZl9jc2MtPmNzYy5jb2VmZltpXS5pbnRlZ2VyIDw8CisJCQkJSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVCkgfAorCQkJCWRmX2NzYy0+Y3NjLmNvZWZmW2ldLmRlY2ltYWw7CisJCQl2YWwyIDw8PSBJU0lGX0NTQ01fTVNCX1NISUZUOworCQkJdmFsMiB8PSB2YWwxOworCQkJcmVndyh2YWwyLCAoQ1NDTTAgKyAoKGkgLSAxKSA8PCAxKSkpOworCQl9CisJfQorCisJLyogcHJvZ3JhbSB0aGUgYWN0aXZlIGFyZWEgKi8KKwlyZWd3KGRmX2NzYy0+c3RhcnRfcGl4LCBGTVRTUEgpOworCS8qCisJICogb25lIGV4dHJhIHBpeGVsIGFzIHJlcXVpcmVkIGZvciBDU0MuIEFjdHVhbGx5IG51bWJlciBvZgorCSAqIHBpeGVsIC0gMSBzaG91bGQgYmUgY29uZmlndXJlZCBpbiB0aGlzIHJlZ2lzdGVyLiBTbyB3ZQorCSAqIG5lZWQgdG8gc3VidHJhY3QgMSBiZWZvcmUgd3JpdGluZyB0byBGTVRTUEgsIGJ1dCB3ZSB3aWxsCisJICogbm90IGRvIHRoaXMgc2luY2UgY3NjIHJlcXVpcmVzIG9uZSBleHRyYSBwaXhlbAorCSAqLworCXJlZ3coZGZfY3NjLT5udW1fcGl4ZWxzLCBGTVRMTkgpOworCXJlZ3coZGZfY3NjLT5zdGFydF9saW5lLCBGTVRTTFYpOworCS8qCisJICogb25lIGV4dHJhIGxpbmUgYXMgcmVxdWlyZWQgZm9yIENTQy4gU2VlIHJlYXNvbiBkb2N1bWVudGVkIGZvcgorCSAqIG51bV9waXhlbHMKKwkgKi8KKwlyZWd3KGRmX2NzYy0+bnVtX2xpbmVzLCBGTVRMTlYpOworCisJLyogRW5hYmxlIENTQyAqLworCXJlZ3coMSwgQ1NDQ1RMKTsKK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ19yYXcodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl9wYXJhbXNfcmF3ICpwYXJhbXMgPSAmaXNpZl9jZmcuYmF5ZXI7CisJc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgKm1vZHVsZV9wYXJhbXMgPQorCQkmaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKKwlzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIGZyYW1lX3NpemU7CisJc3RydWN0IHZwc3Nfc3luY19wb2wgc3luYzsKKwl1MzIgdmFsOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfY29uZmlnX3Jhdy4uXG4iKTsKKworCS8qCisJICogQ29uZmlndXJlIENDRENGRyByZWdpc3RlcjotCisJICogU2V0IENDRCBOb3QgdG8gc3dhcCBpbnB1dCBzaW5jZSBpbnB1dCBpcyBSQVcgZGF0YQorCSAqIFNldCBGSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uIHRvIExhdGNoIGF0IFYtU3luYworCSAqIFNldCBXRU5MT0cgLSBpc2lmIHZhbGlkIGFyZWEKKwkgKiBTZXQgVFJHU0VMCisJICogU2V0IEVYVFJHCisJICogUGFja2VkIHRvIDggb3IgMTYgYml0cworCSAqLworCisJdmFsID0gSVNJRl9ZQ0lOU1dQX1JBVyB8IElTSUZfQ0NEQ0ZHX0ZJRE1EX0xBVENIX1ZTWU5DIHwKKwkJSVNJRl9DQ0RDRkdfV0VOTE9HX0FORCB8IElTSUZfQ0NEQ0ZHX1RSR1NFTF9XRU4gfAorCQlJU0lGX0NDRENGR19FWFRSR19ESVNBQkxFIHwgaXNpZl9jZmcuZGF0YV9wYWNrOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4JXggdG8gLi4uQ0NEQ0ZHIFxuIiwgdmFsKTsKKwlyZWd3KHZhbCwgQ0NEQ0ZHKTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5KE1PREVTRVQuVkRQT0wpCisJICogQ29uZmlndXJlIHRoZSBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKE1PREVTRVQuSERQT0wpCisJICogQ29uZmlndXJlIGZyYW1lIGlkIHBvbGFyaXR5IChNT0RFU0VULkZMRFBPTCkKKwkgKiBDb25maWd1cmUgZGF0YSBwb2xhcml0eQorCSAqIENvbmZpZ3VyZSBFeHRlcm5hbCBXRU4gU2VsZWN0aW9uCisJICogQ29uZmlndXJlIGZyYW1lIGZvcm1hdChwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2UpCisJICogQ29uZmlndXJlIHBpeGVsIGZvcm1hdCAoSW5wdXQgbW9kZSkKKwkgKiBDb25maWd1cmUgdGhlIGRhdGEgc2hpZnQKKwkgKi8KKworCXZhbCA9IElTSUZfVkRIRE9VVF9JTlBVVCB8IChwYXJhbXMtPnZkX3BvbCA8PCBJU0lGX1ZEX1BPTF9TSElGVCkgfAorCQkocGFyYW1zLT5oZF9wb2wgPDwgSVNJRl9IRF9QT0xfU0hJRlQpIHwKKwkJKHBhcmFtcy0+ZmlkX3BvbCA8PCBJU0lGX0ZJRF9QT0xfU0hJRlQpIHwKKwkJKElTSUZfREFUQVBPTF9OT1JNQUwgPDwgSVNJRl9EQVRBUE9MX1NISUZUKSB8CisJCShJU0lGX0VYV0VOX0RJU0FCTEUgPDwgSVNJRl9FWFdFTl9TSElGVCkgfAorCQkocGFyYW1zLT5mcm1fZm10IDw8IElTSUZfRlJNX0ZNVF9TSElGVCkgfAorCQkocGFyYW1zLT5waXhfZm10IDw8IElTSUZfSU5QVVRfU0hJRlQpIHwKKwkJKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5kYXRhX3NoaWZ0IDw8IElTSUZfREFUQVNGVF9TSElGVCk7CisKKwlyZWd3KHZhbCwgTU9ERVNFVCk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKKworCS8qCisJICogQ29uZmlndXJlIEdBTU1BV0QgcmVnaXN0ZXIKKwkgKiBDRkEgcGF0dGVybiBzZXR0aW5nCisJICovCisJdmFsID0gcGFyYW1zLT5jZmFfcGF0IDw8IElTSUZfR0FNTUFXRF9DRkFfU0hJRlQ7CisKKwkvKiBHYW1tYSBtc2IgKi8KKwlpZiAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MuYWxnID09IElTSUZfQUxBVykKKwkJdmFsIHw9IElTSUZfQUxBV19FTkFCTEU7CisKKwl2YWwgfD0gKHBhcmFtcy0+ZGF0YV9tc2IgPDwgSVNJRl9BTEFXX0dBTUFfV0RfU0hJRlQpOworCXJlZ3codmFsLCBDR0FNTUFXRCk7CisKKwkvKiBDb25maWd1cmUgRFBDTSBjb21wcmVzc2lvbiBzZXR0aW5ncyAqLworCWlmIChtb2R1bGVfcGFyYW1zLT5jb21wcmVzcy5hbGcgPT0gSVNJRl9EUENNKSB7CisJCXZhbCA9ICBCSVQoSVNJRl9EUENNX0VOX1NISUZUKSB8CisJCSAgICAgICAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MucHJlZCA8PAorCQkgICAgICAgSVNJRl9EUENNX1BSRURJQ1RPUl9TSElGVCk7CisJfQorCisJcmVndyh2YWwsIE1JU0MpOworCisJLyogQ29uZmlndXJlIEdhaW4gJiBPZmZzZXQgKi8KKwlpc2lmX2NvbmZpZ19nYWluX29mZnNldCgpOworCisJLyogQ29uZmlndXJlIENvbG9yIHBhdHRlcm4gKi8KKwl2YWwgPSAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLm9sb3ApIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLm9sZXAgPDwgMikgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAuZWxvcCA8PCA0KSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5lbGVwIDw8IDYpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLm9sb3AgPDwgOCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEub2xlcCA8PCAxMCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEuZWxvcCA8PCAxMikgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEuZWxlcCA8PCAxNCk7CisJcmVndyh2YWwsIENDT0xQKTsKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgJXggdG8gQ0NPTFAgLi4uXG4iLCB2YWwpOworCisJLyogQ29uZmlndXJlIEhTSVpFIHJlZ2lzdGVyICAqLworCXZhbCA9ICghIXBhcmFtcy0+aG9yel9mbGlwX2VuKSA8PCBJU0lGX0hTSVpFX0ZMSVBfU0hJRlQ7CisKKwkvKiBjYWxjdWxhdGUgbGluZSBvZmZzZXQgaW4gMzIgYnl0ZXMgYmFzZWQgb24gcGFjayB2YWx1ZSAqLworCWlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzhCSVQpCisJCXZhbCB8PSAoKHBhcmFtcy0+d2luLndpZHRoICsgMzEpID4+IDUpOworCWVsc2UgaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfMTJCSVQpCisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCArCisJCSAgICAgICAocGFyYW1zLT53aW4ud2lkdGggPj4gMikpICsgMzEpID4+IDUpOworCWVsc2UKKwkJdmFsIHw9ICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSk7CisJcmVndyh2YWwsIEhTSVpFKTsKKworCS8qIENvbmZpZ3VyZSBTRE9GU1QgcmVnaXN0ZXIgICovCisJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbikgeworCQkJLyogRm9yIGludGVybGFjZSBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHg0QjZELCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQl9IGVsc2UgeworCQkJLyogRm9yIGludGVybGFjZSBub24gaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4MEI2RCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDBCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbikgeworCQkJLyogRm9yIHByb2dyZXNzaXZlIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDQwMDAsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHg0MDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgcHJvZ3Jlc3NpdmUgbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDAwMDAsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCX0KKwl9CisKKwkvKiBDb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJaXNpZl9zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOworCisJLyogQ29uZmlndXJlIEJsYWNrIENsYW1wICovCisJaXNpZl9jb25maWdfYmNsYW1wKCZtb2R1bGVfcGFyYW1zLT5iY2xhbXApOworCisJLyogQ29uZmlndXJlIFZlcnRpY2FsIERlZmVjdGlvbiBQaXhlbCBDb3JyZWN0aW9uICovCisJaWYgKGlzaWZfY29uZmlnX2RmYygmbW9kdWxlX3BhcmFtcy0+ZGZjKSA8IDApCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFtb2R1bGVfcGFyYW1zLT5kZl9jc2MuZGZfb3JfY3NjKQorCQkvKiBDb25maWd1cmUgQ29sb3IgU3BhY2UgQ29udmVyc2lvbiAqLworCQlpc2lmX2NvbmZpZ19jc2MoJm1vZHVsZV9wYXJhbXMtPmRmX2NzYyk7CisKKwlpc2lmX2NvbmZpZ19saW5lYXJpemF0aW9uKCZtb2R1bGVfcGFyYW1zLT5saW5lYXJpemUpOworCisJLyogQ29uZmlndXJlIEN1bGxpbmcgKi8KKwlpc2lmX2NvbmZpZ19jdWxsaW5nKCZtb2R1bGVfcGFyYW1zLT5jdWxsaW5nKTsKKworCS8qIENvbmZpZ3VyZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBvZmZzZXRzKERGQyxMU0MsR2FpbikgKi8KKwlyZWd3KG1vZHVsZV9wYXJhbXMtPmhvcnpfb2Zmc2V0LCBEQVRBSE9GU1QpOworCXJlZ3cobW9kdWxlX3BhcmFtcy0+dmVydF9vZmZzZXQsIERBVEFWT0ZTVCk7CisKKwkvKiBTZXR1cCB0ZXN0IHBhdHRlcm4gaWYgZW5hYmxlZCAqLworCWlmIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMudGVzdF9wYXRfZ2VuKSB7CisJCS8qIFVzZSB0aGUgSEQvVkQgcG9sIHNldHRpbmdzIGZyb20gdXNlciAqLworCQlzeW5jLmNjZHBnX2hkcG9sID0gcGFyYW1zLT5oZF9wb2w7CisJCXN5bmMuY2NkcGdfdmRwb2wgPSBwYXJhbXMtPnZkX3BvbDsKKwkJZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3luYyk7CisJCWZyYW1lX3NpemUuaGxwZnIgPSBpc2lmX2NmZy5iYXllci53aW4ud2lkdGg7CisJCWZyYW1lX3NpemUucHBsZW4gPSBpc2lmX2NmZy5iYXllci53aW4uaGVpZ2h0OworCQlkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKGZyYW1lX3NpemUpOworCQl2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShWUFNTX1BHTFBCSyk7CisJfQorCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcbkVuZCBvZiBpc2lmX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaXNpZl9jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwllbHNlCisJCWlzaWZfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisKKwlyZXR1cm4gMDsKKworfQorc3RhdGljIGVudW0gY2NkY19idWZ0eXBlIGlzaWZfZ2V0X2J1ZnR5cGUodm9pZCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGlzaWZfY2ZnLmJheWVyLmJ1Zl90eXBlOworCisJcmV0dXJuIGlzaWZfY2ZnLnljYmNyLmJ1Zl90eXBlOworfQorCitzdGF0aWMgaW50IGlzaWZfZW51bV9waXgodTMyICpwaXgsIGludCBpKQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGlzaWZfcmF3X2JheWVyX3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGlzaWZfcmF3X2JheWVyX3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShpc2lmX3Jhd195dXZfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gaXNpZl9yYXdfeXV2X3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfcGl4ZWxfZm9ybWF0KHVuc2lnbmVkIGludCBwaXhmbXQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KSB7CisJCQlpZiAoKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnICE9CisJCQkgICAgIElTSUZfQUxBVykgJiYKKwkJCSAgICAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgIT0KKwkJCSAgICAgSVNJRl9EUENNKSkgeworCQkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LAorCQkJCQkiRWl0aGVyIGNvbmZpZ3VyZSBBLUxhdyBvciBEUENNXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlzaWZfY2ZnLmRhdGFfcGFjayA9IElTSUZfUEFDS184QklUOworCQl9IGVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikgeworCQkJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPQorCQkJCQlJU0lGX05PX0NPTVBSRVNTSU9OOworCQkJaXNpZl9jZmcuZGF0YV9wYWNrID0gSVNJRl9QQUNLXzE2QklUOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc2lmX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCX0gZWxzZSB7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQorCQkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc2lmX2NmZy5kYXRhX3BhY2sgPSBJU0lGX1BBQ0tfOEJJVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgaXNpZl9nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCit7CisJdTMyIHBpeGZtdDsKKworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpZiAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPT0gSVNJRl9BTEFXIHx8CisJCSAgICBpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyA9PSBJU0lGX0RQQ00pCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKwllbHNlIHsKKwkJaWYgKGlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwl9CisJcmV0dXJuIHBpeGZtdDsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlzaWZfY2ZnLmJheWVyLndpbi50b3AgPSB3aW4tPnRvcDsKKwkJaXNpZl9jZmcuYmF5ZXIud2luLmxlZnQgPSB3aW4tPmxlZnQ7CisJCWlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCA9IHdpbi0+d2lkdGg7CisJCWlzaWZfY2ZnLmJheWVyLndpbi5oZWlnaHQgPSB3aW4tPmhlaWdodDsKKwl9IGVsc2UgeworCQlpc2lmX2NmZy55Y2Jjci53aW4udG9wID0gd2luLT50b3A7CisJCWlzaWZfY2ZnLnljYmNyLndpbi5sZWZ0ID0gd2luLT5sZWZ0OworCQlpc2lmX2NmZy55Y2Jjci53aW4ud2lkdGggPSB3aW4tPndpZHRoOworCQlpc2lmX2NmZy55Y2Jjci53aW4uaGVpZ2h0ID0gd2luLT5oZWlnaHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gaXNpZl9jZmcuYmF5ZXIud2luOworCWVsc2UKKwkJKndpbiA9IGlzaWZfY2ZnLnljYmNyLndpbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpc2lmX2dldF9saW5lX2xlbmd0aCh2b2lkKQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS184QklUKQorCQkJbGVuID0gKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGgpKTsKKwkJZWxzZSBpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS18xMkJJVCkKKwkJCWxlbiA9ICgoKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCAqIDIpICsKKwkJCQkgKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCA+PiAyKSkpOworCQllbHNlCisJCQlsZW4gPSAoKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggKiAyKSkpOworCX0gZWxzZQorCQlsZW4gPSAoKChpc2lmX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyKSkpOworCXJldHVybiBBTElHTihsZW4sIDMyKTsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpc2lmX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKKwllbHNlCisJCWlzaWZfY2ZnLnljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCXJldHVybiAwOworfQorc3RhdGljIGVudW0gY2NkY19mcm1mbXQgaXNpZl9nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NmZy5iYXllci5mcm1fZm10OworCXJldHVybiBpc2lmX2NmZy55Y2Jjci5mcm1fZm10OworfQorCitzdGF0aWMgaW50IGlzaWZfZ2V0ZmlkKHZvaWQpCit7CisJcmV0dXJuIChyZWdyKE1PREVTRVQpID4+IDE1KSAmIDB4MTsKK30KKworLyogbWlzYyBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCBpc2lmX3NldGZiYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmVndygoYWRkciA+PiAyMSkgJiAweDA3ZmYsIENBRFUpOworCXJlZ3coKGFkZHIgPj4gNSkgJiAweDBmZmZmLCBDQURMKTsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKK3sKKwlpc2lmX2NmZy5pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCisJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJY2FzZSBWUEZFX0JUNjU2XzEwQklUOgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUOworCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX0JUMTEyMDoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKKwkJaXNpZl9jZmcueWNiY3IucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzE2QklUOworCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX1JBV19CQVlFUjoKKwkJaXNpZl9jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIGludGVyZmFjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgSVNJRiBmb3IgWUNiQ3IgcGFyYW1ldGVycy4gKi8KK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfeWNiY3Iodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgKnBhcmFtcyA9ICZpc2lmX2NmZy55Y2JjcjsKKwlzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIGZyYW1lX3NpemU7CisJdTMyIG1vZGVzZXQgPSAwLCBjY2RjZmcgPSAwOworCXN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmM7CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuU3RhcnRpbmcgaXNpZl9jb25maWdfeWNiY3IuLi4iKTsKKworCS8qIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgb3IgaW5wdXQgbW9kZSAqLworCW1vZGVzZXQgPSBtb2Rlc2V0IHwgKHBhcmFtcy0+cGl4X2ZtdCA8PCBJU0lGX0lOUFVUX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+ZnJtX2ZtdCA8PCBJU0lGX0ZSTV9GTVRfU0hJRlQpIHwKKwkJICAocGFyYW1zLT5maWRfcG9sIDw8IElTSUZfRklEX1BPTF9TSElGVCkgfAorCQkgIChwYXJhbXMtPmhkX3BvbCA8PCBJU0lGX0hEX1BPTF9TSElGVCkgfAorCQkgIChwYXJhbXMtPnZkX3BvbCA8PCBJU0lGX1ZEX1BPTF9TSElGVCk7CisKKwkvKiBwYWNrIHRoZSBkYXRhIHRvIDgtYml0IElTSUZDRkcgKi8KKwlzd2l0Y2ggKGlzaWZfY2ZnLmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbW9kZXNldCB8PSAoVlBGRV9QSU5QT0xfTkVHQVRJVkUgPDwgSVNJRl9WRF9QT0xfU0hJRlQpOworCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJY2NkY2ZnID0gY2NkY2ZnIHwgSVNJRl9EQVRBX1BBQ0s4IHwgSVNJRl9ZQ0lOU1dQX1lDQkNSOworCQlicmVhazsKKwljYXNlIFZQRkVfQlQ2NTZfMTBCSVQ6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogc2V0dXAgQlQuNjU2LCBlbWJlZGRlZCBzeW5jICAqLworCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJLyogZW5hYmxlIDEwIGJpdCBtb2RlIGluIGNjZGNmZyAqLworCQljY2RjZmcgPSBjY2RjZmcgfCBJU0lGX0RBVEFfUEFDSzggfCBJU0lGX1lDSU5TV1BfWUNCQ1IgfAorCQkJSVNJRl9CVzY1Nl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgVlBGRV9CVDExMjA6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlZ3coMywgUkVDNjU2SUYpOworCQlicmVhazsKKworCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJCWNjZGNmZyB8PSBJU0lGX0RBVEFfUEFDSzg7CisJCWNjZGNmZyB8PSBJU0lGX1lDSU5TV1BfWUNCQ1I7CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHNob3VsZCBuZXZlciBjb21lIGhlcmUgKi8KKwkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIGludGVyZmFjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVndyhtb2Rlc2V0LCBNT0RFU0VUKTsKKworCS8qIFNldCB1cCBwaXggb3JkZXIgKi8KKwljY2RjZmcgfD0gcGFyYW1zLT5waXhfb3JkZXIgPDwgSVNJRl9QSVhfT1JERVJfU0hJRlQ7CisKKwlyZWd3KGNjZGNmZywgQ0NEQ0ZHKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwlpZiAoKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9CVDExMjApIHx8CisJICAgIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfWUNCQ1JfU1lOQ18xNikpCisJCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKKwllbHNlCisJCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAyKTsKKworCS8qCisJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0CisJICogdGhpcyBpcyBkb25lIGJ5IHJvdW5kaW5nIHVwIHdpZHRoIHRvIGEgbXVsdGlwbGUgb2YgMTYgcGl4ZWxzCisJICogYW5kIG11bHRpcGx5IGJ5IHR3byB0byBhY2NvdW50IGZvciB5OmNiOmNyIDQ6MjoyIGRhdGEKKwkgKi8KKwlyZWd3KCgoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpICYgMHhmZmZmZmZlMCkgPj4gNSksIEhTSVpFKTsKKworCS8qIGNvbmZpZ3VyZSB0aGUgbWVtb3J5IGxpbmUgb2Zmc2V0ICovCisJaWYgKChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgJiYKKwkgICAgKHBhcmFtcy0+YnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCkpCisJCS8qIHR3byBmaWVsZHMgYXJlIGludGVybGVhdmVkIGluIG1lbW9yeSAqLworCQlyZWd3KDB4MDAwMDAyNDksIFNET0ZTVCk7CisKKwkvKiBTZXR1cCB0ZXN0IHBhdHRlcm4gaWYgZW5hYmxlZCAqLworCWlmIChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLnRlc3RfcGF0X2dlbikgeworCQlzeW5jLmNjZHBnX2hkcG9sID0gcGFyYW1zLT5oZF9wb2w7CisJCXN5bmMuY2NkcGdfdmRwb2wgPSBwYXJhbXMtPnZkX3BvbDsKKwkJZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3luYyk7CisJCWRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoZnJhbWVfc2l6ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWZfY29uZmlndXJlKHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NvbmZpZ19yYXcoKTsKKwlyZXR1cm4gaXNpZl9jb25maWdfeWNiY3IoKTsKK30KKworc3RhdGljIGludCBpc2lmX2Nsb3NlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwkvKiBjb3B5IGRlZmF1bHRzIHRvIG1vZHVsZSBwYXJhbXMgKi8KKwlpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zID0gaXNpZl9jb25maWdfZGVmYXVsdHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2NkY19od19kZXZpY2UgaXNpZl9od19kZXYgPSB7CisJLm5hbWUgPSAiSVNJRiIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmh3X29wcyA9IHsKKwkJLm9wZW4gPSBpc2lmX29wZW4sCisJCS5jbG9zZSA9IGlzaWZfY2xvc2UsCisJCS5lbmFibGUgPSBpc2lmX2VuYWJsZSwKKwkJLmVuYWJsZV9vdXRfdG9fc2RyYW0gPSBpc2lmX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0sCisJCS5zZXRfaHdfaWZfcGFyYW1zID0gaXNpZl9zZXRfaHdfaWZfcGFyYW1zLAorCQkuY29uZmlndXJlID0gaXNpZl9jb25maWd1cmUsCisJCS5zZXRfYnVmdHlwZSA9IGlzaWZfc2V0X2J1ZnR5cGUsCisJCS5nZXRfYnVmdHlwZSA9IGlzaWZfZ2V0X2J1ZnR5cGUsCisJCS5lbnVtX3BpeCA9IGlzaWZfZW51bV9waXgsCisJCS5zZXRfcGl4ZWxfZm9ybWF0ID0gaXNpZl9zZXRfcGl4ZWxfZm9ybWF0LAorCQkuZ2V0X3BpeGVsX2Zvcm1hdCA9IGlzaWZfZ2V0X3BpeGVsX2Zvcm1hdCwKKwkJLnNldF9mcmFtZV9mb3JtYXQgPSBpc2lmX3NldF9mcmFtZV9mb3JtYXQsCisJCS5nZXRfZnJhbWVfZm9ybWF0ID0gaXNpZl9nZXRfZnJhbWVfZm9ybWF0LAorCQkuc2V0X2ltYWdlX3dpbmRvdyA9IGlzaWZfc2V0X2ltYWdlX3dpbmRvdywKKwkJLmdldF9pbWFnZV93aW5kb3cgPSBpc2lmX2dldF9pbWFnZV93aW5kb3csCisJCS5nZXRfbGluZV9sZW5ndGggPSBpc2lmX2dldF9saW5lX2xlbmd0aCwKKwkJLnNldGZiYWRkciA9IGlzaWZfc2V0ZmJhZGRyLAorCQkuZ2V0ZmlkID0gaXNpZl9nZXRmaWQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzaWZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl2b2lkICgqc2V0dXBfcGlubXV4KSh2b2lkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwl2b2lkICpfX2lvbWVtIGFkZHI7CisJaW50IHN0YXR1cyA9IDAsIGk7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmlzaWZfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWlzaWZfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGlzaWZfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoaXNpZl9jZmcubWNsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShpc2lmX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisKKwkvKiBQbGF0Zm9ybSBkYXRhIGhvbGRzIHNldHVwX3Bpbm11eCBmdW5jdGlvbiBwdHIgKi8KKwlpZiAoTlVMTCA9PSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJc2V0dXBfcGlubXV4ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgY2NkYyB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCBTb0NzIHVzaW5nIHRoaXMgQ0NEQworCSAqLworCXNldHVwX3Bpbm11eCgpOworCisJaSA9IDA7CisJLyogR2V0IHRoZSBJU0lGIGJhc2UgYWRkcmVzcywgbGluZWFyaXphdGlvbiB0YWJsZTAgYW5kIHRhYmxlMSBhZGRyLiAqLworCXdoaWxlIChpIDwgMykgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlpZiAoIXJlcykgeworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbF9ub2Jhc2VfcmVzOworCQl9CisJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCisJCQkJCSByZXMtPm5hbWUpOworCQlpZiAoIXJlcykgeworCQkJc3RhdHVzID0gLUVCVVNZOworCQkJZ290byBmYWlsX25vYmFzZV9yZXM7CisJCX0KKwkJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlpZiAoIWFkZHIpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxfYmFzZV9pb21hcDsKKwkJfQorCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJLyogSVNJRiBiYXNlIGFkZHJlc3MgKi8KKwkJCWlzaWZfY2ZnLmJhc2VfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJLyogSVNJRiBsaW5lYXIgdGJsMCBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyID0gYWRkcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogSVNJRiBsaW5lYXIgdGJsMCBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyID0gYWRkcjsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisJaXNpZl9jZmcuZGV2ID0gJnBkZXYtPmRldjsKKworCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAorCQlpc2lmX2h3X2Rldi5uYW1lKTsKKwlyZXR1cm4gMDsKK2ZhaWxfYmFzZV9pb21hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpLS07CitmYWlsX25vYmFzZV9yZXM6CisJaWYgKGlzaWZfY2ZnLmJhc2VfYWRkcikKKwkJaW91bm1hcChpc2lmX2NmZy5iYXNlX2FkZHIpOworCWlmIChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKQorCQlpb3VubWFwKGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIpOworCisJd2hpbGUgKGkgPj0gMCkgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJaS0tOworCX0KK2ZhaWxfbWNsazoKKwljbGtfcHV0KGlzaWZfY2ZnLm1jbGspOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmaXNpZl9od19kZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgaSA9IDA7CisKKwlpb3VubWFwKGlzaWZfY2ZnLmJhc2VfYWRkcik7CisJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKTsKKwlpb3VubWFwKGlzaWZfY2ZnLmxpbmVhcl90YmwxX2FkZHIpOworCXdoaWxlIChpIDwgMykgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlpZiAocmVzKQorCQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWkrKzsKKwl9CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZpc2lmX2h3X2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzaWZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImlzaWYiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpc2lmX3JlbW92ZSksCisJLnByb2JlID0gaXNpZl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzaWZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzaWZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzaWZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXNpZl9pbml0KTsKK21vZHVsZV9leGl0KGlzaWZfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I4ODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWZfcmVncy5oCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9JU0lGX1JFR1NfSAorI2RlZmluZSBfSVNJRl9SRUdTX0gKKworLyogSVNJRiByZWdpc3RlcnMgcmVsYXRpdmUgb2Zmc2V0cyAqLworI2RlZmluZSBTWU5DRU4JCQkJCTB4MDAKKyNkZWZpbmUgTU9ERVNFVAkJCQkJMHgwNAorI2RlZmluZSBIRFcJCQkJCTB4MDgKKyNkZWZpbmUgVkRXCQkJCQkweDBjCisjZGVmaW5lIFBQTE4JCQkJCTB4MTAKKyNkZWZpbmUgTFBGUgkJCQkJMHgxNAorI2RlZmluZSBTUEgJCQkJCTB4MTgKKyNkZWZpbmUgTE5ICQkJCQkweDFjCisjZGVmaW5lIFNMVjAJCQkJCTB4MjAKKyNkZWZpbmUgU0xWMQkJCQkJMHgyNAorI2RlZmluZSBMTlYJCQkJCTB4MjgKKyNkZWZpbmUgQ1VMSAkJCQkJMHgyYworI2RlZmluZSBDVUxWCQkJCQkweDMwCisjZGVmaW5lIEhTSVpFCQkJCQkweDM0CisjZGVmaW5lIFNET0ZTVAkJCQkJMHgzOAorI2RlZmluZSBDQURVCQkJCQkweDNjCisjZGVmaW5lIENBREwJCQkJCTB4NDAKKyNkZWZpbmUgTElOQ0ZHMAkJCQkJMHg0NAorI2RlZmluZSBMSU5DRkcxCQkJCQkweDQ4CisjZGVmaW5lIENDT0xQCQkJCQkweDRjCisjZGVmaW5lIENSR0FJTiAJCQkJCTB4NTAKKyNkZWZpbmUgQ0dSR0FJTgkJCQkJMHg1NAorI2RlZmluZSBDR0JHQUlOCQkJCQkweDU4CisjZGVmaW5lIENCR0FJTgkJCQkJMHg1YworI2RlZmluZSBDT0ZTVEEJCQkJCTB4NjAKKyNkZWZpbmUgRkxTSENGRzAJCQkJMHg2NAorI2RlZmluZSBGTFNIQ0ZHMQkJCQkweDY4CisjZGVmaW5lIEZMU0hDRkcyCQkJCTB4NmMKKyNkZWZpbmUgVkRJTlQwCQkJCQkweDcwCisjZGVmaW5lIFZESU5UMQkJCQkJMHg3NAorI2RlZmluZSBWRElOVDIJCQkJCTB4NzgKKyNkZWZpbmUgTUlTQyAJCQkJCTB4N2MKKyNkZWZpbmUgQ0dBTU1BV0QJCQkJMHg4MAorI2RlZmluZSBSRUM2NTZJRgkJCQkweDg0CisjZGVmaW5lIENDRENGRwkJCQkJMHg4OAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERlZmVjdCBDb3JyZWN0aW9uIHJlZ2lzdGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERGQ0NUTAkJCQkJMHg4YworI2RlZmluZSBWREZTQVRMVgkJCQkweDkwCisjZGVmaW5lIERGQ01FTUNUTAkJCQkweDk0CisjZGVmaW5lIERGQ01FTTAJCQkJCTB4OTgKKyNkZWZpbmUgREZDTUVNMQkJCQkJMHg5YworI2RlZmluZSBERkNNRU0yCQkJCQkweGEwCisjZGVmaW5lIERGQ01FTTMJCQkJCTB4YTQKKyNkZWZpbmUgREZDTUVNNAkJCQkJMHhhOAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQmxhY2sgQ2xhbXAgcmVnaXN0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDTEFNUENGRwkJCQkweGFjCisjZGVmaW5lIENMRENPRlNUCQkJCTB4YjAKKyNkZWZpbmUgQ0xTVgkJCQkJMHhiNAorI2RlZmluZSBDTEhXSU4wCQkJCQkweGI4CisjZGVmaW5lIENMSFdJTjEJCQkJCTB4YmMKKyNkZWZpbmUgQ0xIV0lOMgkJCQkJMHhjMAorI2RlZmluZSBDTFZSVgkJCQkJMHhjNAorI2RlZmluZSBDTFZXSU4wCQkJCQkweGM4CisjZGVmaW5lIENMVldJTjEJCQkJCTB4Y2MKKyNkZWZpbmUgQ0xWV0lOMgkJCQkJMHhkMAorI2RlZmluZSBDTFZXSU4zCQkJCQkweGQ0CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBMZW5zZSBTaGFkaW5nIENvcnJlY3Rpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERBVEFIT0ZTVAkJCQkweGQ4CisjZGVmaW5lIERBVEFWT0ZTVAkJCQkweGRjCisjZGVmaW5lIExTQ0hWQUwJCQkJCTB4ZTAKKyNkZWZpbmUgTFNDVlZBTAkJCQkJMHhlNAorI2RlZmluZSBUV09ETFNDQ0ZHCQkJCTB4ZTgKKyNkZWZpbmUgVFdPRExTQ09GU1QJCQkJMHhlYworI2RlZmluZSBUV09ETFNDSU5JCQkJCTB4ZjAKKyNkZWZpbmUgVFdPRExTQ0dSQlUJCQkJMHhmNAorI2RlZmluZSBUV09ETFNDR1JCTAkJCQkweGY4CisjZGVmaW5lIFRXT0RMU0NHUk9GCQkJCTB4ZmMKKyNkZWZpbmUgVFdPRExTQ09SQlUJCQkJMHgxMDAKKyNkZWZpbmUgVFdPRExTQ09SQkwJCQkJMHgxMDQKKyNkZWZpbmUgVFdPRExTQ09ST0YJCQkJMHgxMDgKKyNkZWZpbmUgVFdPRExTQ0lSUUVOCQkJCTB4MTBjCisjZGVmaW5lIFRXT0RMU0NJUlFTVAkJCQkweDExMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGF0YSBmb3JtYXR0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZNVENGRwkJCQkJMHgxMTQKKyNkZWZpbmUgRk1UUExFTgkJCQkJMHgxMTgKKyNkZWZpbmUgRk1UU1BICQkJCQkweDExYworI2RlZmluZSBGTVRMTkgJCQkJCTB4MTIwCisjZGVmaW5lIEZNVFNMVgkJCQkJMHgxMjQKKyNkZWZpbmUgRk1UTE5WCQkJCQkweDEyOAorI2RlZmluZSBGTVRSTEVOCQkJCQkweDEyYworI2RlZmluZSBGTVRIQ05UCQkJCQkweDEzMAorI2RlZmluZSBGTVRBUFRSX0JBU0UJCQkJMHgxMzQKKy8qIEJlbG93IG1hY3JvIGZvciBhZGRyZXNzZXMgRk1UQVBUUjAgLSBGTVRBUFRSMTUgKi8KKyNkZWZpbmUgRk1UQVBUUihpKQkJCShGTVRBUFRSX0JBU0UgKyAoaSAqIDQpKQorI2RlZmluZSBGTVRQR01WRjAJCQkJMHgxNzQKKyNkZWZpbmUgRk1UUEdNVkYxCQkJCTB4MTc4CisjZGVmaW5lIEZNVFBHTUFQVTAJCQkJMHgxN2MKKyNkZWZpbmUgRk1UUEdNQVBVMQkJCQkweDE4MAorI2RlZmluZSBGTVRQR01BUFMwCQkJCTB4MTg0CisjZGVmaW5lIEZNVFBHTUFQUzEJCQkJMHgxODgKKyNkZWZpbmUgRk1UUEdNQVBTMgkJCQkweDE4YworI2RlZmluZSBGTVRQR01BUFMzCQkJCTB4MTkwCisjZGVmaW5lIEZNVFBHTUFQUzQJCQkJMHgxOTQKKyNkZWZpbmUgRk1UUEdNQVBTNQkJCQkweDE5OAorI2RlZmluZSBGTVRQR01BUFM2CQkJCTB4MTljCisjZGVmaW5lIEZNVFBHTUFQUzcJCQkJMHgxYTAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29sb3IgU3BhY2UgQ29udmVydGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENTQ0NUTAkJCQkJMHgxYTQKKyNkZWZpbmUgQ1NDTTAJCQkJCTB4MWE4CisjZGVmaW5lIENTQ00xCQkJCQkweDFhYworI2RlZmluZSBDU0NNMgkJCQkJMHgxYjAKKyNkZWZpbmUgQ1NDTTMJCQkJCTB4MWI0CisjZGVmaW5lIENTQ000CQkJCQkweDFiOAorI2RlZmluZSBDU0NNNQkJCQkJMHgxYmMKKyNkZWZpbmUgQ1NDTTYJCQkJCTB4MWMwCisjZGVmaW5lIENTQ003CQkJCQkweDFjNAorI2RlZmluZSBPQldJTjAJCQkJCTB4MWM4CisjZGVmaW5lIE9CV0lOMQkJCQkJMHgxY2MKKyNkZWZpbmUgT0JXSU4yCQkJCQkweDFkMAorI2RlZmluZSBPQldJTjMJCQkJCTB4MWQ0CisjZGVmaW5lIE9CVkFMMAkJCQkJMHgxZDgKKyNkZWZpbmUgT0JWQUwxCQkJCQkweDFkYworI2RlZmluZSBPQlZBTDIJCQkJCTB4MWUwCisjZGVmaW5lIE9CVkFMMwkJCQkJMHgxZTQKKyNkZWZpbmUgT0JWQUw0CQkJCQkweDFlOAorI2RlZmluZSBPQlZBTDUJCQkJCTB4MWVjCisjZGVmaW5lIE9CVkFMNgkJCQkJMHgxZjAKKyNkZWZpbmUgT0JWQUw3CQkJCQkweDFmNAorI2RlZmluZSBDTEtDVEwJCQkJCTB4MWY4CisKKy8qIE1hc2tzICYgU2hpZnRzIGJlbG93ICovCisjZGVmaW5lIFNUQVJUX1BYX0hPUl9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIE5VTV9QWF9IT1JfTUFTSwkJCQkweDdGRkYKKyNkZWZpbmUgU1RBUlRfVkVSX09ORV9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIFNUQVJUX1ZFUl9UV09fTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBOVU1fTElORVNfVkVSCQkJCTB4N0ZGRgorCisvKiBnYWluIC0gb2Zmc2V0IG1hc2tzICovCisjZGVmaW5lIEdBSU5fSU5URUdFUl9TSElGVAkJCTkKKyNkZWZpbmUgT0ZGU0VUX01BU0sJCQkgIAkweEZGRgorI2RlZmluZSBHQUlOX1NEUkFNX0VOX1NISUZUCQkJMTIKKyNkZWZpbmUgR0FJTl9JUElQRV9FTl9TSElGVAkJCTEzCisjZGVmaW5lIEdBSU5fSDNBX0VOX1NISUZUCQkJMTQKKyNkZWZpbmUgT0ZTVF9TRFJBTV9FTl9TSElGVAkJCTgKKyNkZWZpbmUgT0ZTVF9JUElQRV9FTl9TSElGVAkJCTkKKyNkZWZpbmUgT0ZTVF9IM0FfRU5fU0hJRlQJCQkxMAorI2RlZmluZSBHQUlOX09GRlNFVF9FTl9NQVNLCQkJMHg3NzAwCisKKy8qIEN1bGxpbmcgKi8KKyNkZWZpbmUgQ1VMTF9QQVRfRVZFTl9MSU5FX1NISUZUCQk4CisKKy8qIENDRENGRyByZWdpc3RlciAqLworI2RlZmluZSBJU0lGX1lDSU5TV1BfUkFXCQkJKDB4MDAgPDwgNCkKKyNkZWZpbmUgSVNJRl9ZQ0lOU1dQX1lDQkNSCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfRklETURfTEFUQ0hfVlNZTkMJCSgweDAwIDw8IDYpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX1dFTkxPR19BTkQJCQkoMHgwMCA8PCA4KQorI2RlZmluZSBJU0lGX0NDRENGR19UUkdTRUxfV0VOCQkJKDB4MDAgPDwgOSkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfRVhUUkdfRElTQUJMRQkJKDB4MDAgPDwgMTApCisjZGVmaW5lIElTSUZfTEFUQ0hfT05fVlNZTkNfRElTQUJMRQkJKDB4MDEgPDwgMTUpCisjZGVmaW5lIElTSUZfTEFUQ0hfT05fVlNZTkNfRU5BQkxFCQkoMHgwMCA8PCAxNSkKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0tfTUFTSwkJCTMKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0sxNgkJCTAKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0sxMgkJCTEKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0s4CQkJCTIKKyNkZWZpbmUgSVNJRl9QSVhfT1JERVJfU0hJRlQJCQkxMQorI2RlZmluZSBJU0lGX0JXNjU2X0VOQUJMRQkJCSgweDAxIDw8IDUpCisKKy8qIE1PREVTRVQgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfVkRIRE9VVF9JTlBVVAkJCSgweDAwIDw8IDApCisjZGVmaW5lIElTSUZfSU5QVVRfU0hJRlQJCQkxMgorI2RlZmluZSBJU0lGX1JBV19JTlBVVF9NT0RFCQkJMAorI2RlZmluZSBJU0lGX0ZJRF9QT0xfU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfSERfUE9MX1NISUZUCQkJMworI2RlZmluZSBJU0lGX1ZEX1BPTF9TSElGVAkJCTIKKyNkZWZpbmUgSVNJRl9EQVRBUE9MX05PUk1BTAkJCTAKKyNkZWZpbmUgSVNJRl9EQVRBUE9MX1NISUZUCQkJNgorI2RlZmluZSBJU0lGX0VYV0VOX0RJU0FCTEUgCQkJMAorI2RlZmluZSBJU0lGX0VYV0VOX1NISUZUCQkJNQorI2RlZmluZSBJU0lGX0ZSTV9GTVRfU0hJRlQJCQk3CisjZGVmaW5lIElTSUZfREFUQVNGVF9TSElGVAkJCTgKKyNkZWZpbmUgSVNJRl9MUEZfU0hJRlQJCQkJMTQKKyNkZWZpbmUgSVNJRl9MUEZfTUFTSwkJCQkxCisKKy8qIEdBTU1BV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfQUxBV19HQU1BX1dEX01BU0sJCQkweEYKKyNkZWZpbmUgSVNJRl9BTEFXX0dBTUFfV0RfU0hJRlQJCQkxCisjZGVmaW5lIElTSUZfQUxBV19FTkFCTEUJCQkxCisjZGVmaW5lIElTSUZfR0FNTUFXRF9DRkFfU0hJRlQJCQk1CisKKy8qIEhTSVpFIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0hTSVpFX0ZMSVBfTUFTSwkJCTEKKyNkZWZpbmUgSVNJRl9IU0laRV9GTElQX1NISUZUCQkJMTIKKworLyogTUlTQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9EUENNX0VOX1NISUZUCQkJMTIKKyNkZWZpbmUgSVNJRl9EUENNX1BSRURJQ1RPUl9TSElGVAkJMTMKKworLyogQmxhY2sgY2xhbXAgcmVsYXRlZCAqLworI2RlZmluZSBJU0lGX0JDX01PREVfQ09MT1JfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX01PREVfU0hJRlQJCQkxCisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fU0VMX1NISUZUCQk1CisjZGVmaW5lIElTSUZfSE9SWl9CQ19QSVhfTElNSVRfU0hJRlQJCTYKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1dJTl9IX1NJWkVfU0hJRlQJCTgKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1dJTl9WX1NJWkVfU0hJRlQJCTEyCisjZGVmaW5lCUlTSUZfVkVSVF9CQ19SU1RfVkFMX1NFTF9TSElGVAkJNAorI2RlZmluZSBJU0lGX1ZFUlRfQkNfTElORV9BVkVfQ09FRl9TSElGVAk4CisKKy8qIFZERkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfVkRGQ19FTl9TSElGVAkJCTQKKyNkZWZpbmUgSVNJRl9WREZDX0NPUlJfTU9EX1NISUZUCQk1CisjZGVmaW5lIElTSUZfVkRGQ19DT1JSX1dIT0xFX0xOX1NISUZUCQk3CisjZGVmaW5lIElTSUZfVkRGQ19MRVZFTF9TSEZUX1NISUZUCQk4CisjZGVmaW5lIElTSUZfVkRGQ19QT1NfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVAkJMgorCisvKiBDU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfQ1NDX0NPRUZfSU5URUdfTUFTSwkJNworI2RlZmluZSBJU0lGX0NTQ19DT0VGX0RFQ0lNQUxfTUFTSwkJMHgxZgorI2RlZmluZSBJU0lGX0NTQ19DT0VGX0lOVEVHX1NISUZUCQk1CisjZGVmaW5lIElTSUZfQ1NDTV9NU0JfU0hJRlQJCQk4CisjZGVmaW5lIElTSUZfREZfQ1NDX1NQSF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX0xOSF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX1NMVl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX0xOVl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfTlVNTElORVMJCQkweDdGRkYKKyNkZWZpbmUgSVNJRl9ERl9OVU1QSVgJCQkJMHgxRkZGCisKKy8qIE9mZnNldHMgZm9yIExTQy9ERkMvR2FpbiAqLworI2RlZmluZSBJU0lGX0RBVEFfSF9PRkZTRVRfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RBVEFfVl9PRkZTRVRfTUFTSwkJCTB4MUZGRgorCisvKiBMaW5lYXJpemF0aW9uICovCisjZGVmaW5lIElTSUZfTElOX0NPUlJTRlRfU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfTElOX1NDQUxFX0ZBQ1RfSU5URUdfU0hJRlQJCTEwCisKKworLyogUGF0dGVybiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9QR19FTgkJCQkoMSA8PCAzKQorI2RlZmluZSBJU0lGX1NFTF9QR19TUkMJCQkJKDMgPDwgNCkKKyNkZWZpbmUgSVNJRl9QR19WRF9QT0xfU0hJRlQJCQkwCisjZGVmaW5lIElTSUZfUEdfSERfUE9MX1NISUZUCQkJMQorCisvKnJhbmRvbSBvdGhlciBqdW5rKi8KKyNkZWZpbmUgSVNJRl9TWU5DRU5fVkRIREVOX01BU0sJCQkoMSA8PCAwKQorI2RlZmluZSBJU0lGX1NZTkNFTl9XRU5fTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIElTSUZfU1lOQ0VOX1dFTl9TSElGVAkJCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKaW5kZXggZGUyMmJjOWYuLjg4NWNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKQEAgLTEwNyw5ICsxMDcsNiBAQAogCWludCB2cGZlX3Byb2JlZDsKIAkvKiBuYW1lIG9mIGNjZGMgZGV2aWNlICovCiAJY2hhciBuYW1lWzMyXTsKLQkvKiBmb3Igc3RvcmluZyBtZW0gbWFwcyBmb3IgQ0NEQyAqLwotCWludCBjY2RjX2FkZHJfc2l6ZTsKLQl2b2lkICpfX2lvbWVtIGNjZGNfYWRkcjsKIH07CiAKIC8qIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMjI5LDcgKzIyNiw2IEBACiAJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfaW1hZ2Vfd2luZG93KTsKIAlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9pbWFnZV93aW5kb3cpOwogCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2xpbmVfbGVuZ3RoKTsKLQlCVUdfT04oIWRldi0+aHdfb3BzLnNldGZiYWRkcik7CiAJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRmaWQpOwogCiAJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKQEAgLTI0MCwyNSArMjM2LDIzIEBACiAJCSAqIHdhbGsgdGhyb3VnaCBpdCBkdXJpbmcgdnBmZSBwcm9iZQogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJ2cGZlIGNhcHR1cmUgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gLTE7CisJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCWlmIChzdHJjbXAoZGV2LT5uYW1lLCBjY2RjX2NmZy0+bmFtZSkpIHsKIAkJLyogaWdub3JlIHRoaXMgY2NkYyAqLwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJaWYgKGNjZGNfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2NkYyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJY2NkY19kZXYgPSBkZXY7Ci0JZGV2LT5od19vcHMuc2V0X2NjZGNfYmFzZShjY2RjX2NmZy0+Y2NkY19hZGRyLAotCQkJCSAgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTE3ODYsNjEgKzE3ODAsNiBAQAogCXJldHVybiB2cGZlX2RldjsKIH0KIAotc3RhdGljIHZvaWQgdnBmZV9kaXNhYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCi17Ci0Jc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7Ci0KLQljbGtfZGlzYWJsZSh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX2Rpc2FibGUodnBmZV9jZmctPnNsYXZlY2xrKTsKLQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCSAidnBmZSB2cHNzIG1hc3RlciAmIHNsYXZlIGNsb2NrcyBkaXNhYmxlZFxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgdnBmZV9lbmFibGVfY2xvY2soc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKLXsKLQlzdHJ1Y3QgdnBmZV9jb25maWcgKnZwZmVfY2ZnID0gdnBmZV9kZXYtPmNmZzsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKLQotCXZwZmVfY2ZnLT52cHNzY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3NfbWFzdGVyIik7Ci0JaWYgKE5VTEwgPT0gdnBmZV9jZmctPnZwc3NjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwgIk5vIGNsb2NrIGRlZmluZWQgZm9yIgotCQkJICJ2cHNzX21hc3RlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnZwc3NjbGspKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCQkidnBmZSB2cHNzIG1hc3RlciBjbG9jayBub3QgZW5hYmxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJICJ2cGZlIHZwc3MgbWFzdGVyIGNsb2NrIGVuYWJsZWRcbiIpOwotCi0JdnBmZV9jZmctPnNsYXZlY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3Nfc2xhdmUiKTsKLQlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+c2xhdmVjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJCSJObyBjbG9jayBkZWZpbmVkIGZvciB2cHNzIHNsYXZlXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnNsYXZlY2xrKSkgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkJICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgbm90IGVuYWJsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgZW5hYmxlZFxuIik7Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JaWYgKHZwZmVfY2ZnLT52cHNzY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT52cHNzY2xrKTsKLQlpZiAodnBmZV9jZmctPnNsYXZlY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KIC8qCiAgKiB2cGZlX3Byb2JlIDogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyCiAgKiBpdHNlbGYgdG8gdGhlIFY0TDIgZHJpdmVyIGFuZCBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaApAQCAtMTg3MCw3ICsxODA5LDcgQEAKIAogCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gZ2V0IHZwZmUgY29uZmlnXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CiAJfQogCkBAIC0xODg0LDE4ICsxODIzLDEzIEBACiAJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAotCS8qIGVuYWJsZSB2cHNzIGNsb2NrcyAqLwotCXJldCA9IHZwZmVfZW5hYmxlX2Nsb2NrKHZwZmVfZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKLQogCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjY2RjIGNvbmZpZ3VyYXRpb24gKi8KIAljY2RjX2NmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjY2RjX2NvbmZpZyksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGNjZGNfY2ZnKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgY2NkY19jZmdcbiIpOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAogCXN0cm5jcHkoY2NkY19jZmctPm5hbWUsIHZwZmVfY2ZnLT5jY2RjLCAzMik7CkBAIC0xOTA0LDYxICsxODM4LDM0IEBACiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMCA9IHJlczEtPnN0YXJ0OwogCiAJLyogR2V0IFZJTlQxIGlycSByZXNvdXJjZSAqLwotCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKLQkJCQlJT1JFU09VUkNFX0lSUSwgMSk7CisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7CiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMVxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMSA9IHJlczEtPnN0YXJ0OwogCi0JLyogR2V0IGFkZHJlc3MgYmFzZSBvZiBDQ0RDICovCi0JcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMxKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCi0JCQkiVW5hYmxlIHRvIGdldCByZWdpc3RlciBhZGRyZXNzIG1hcFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKLQl9Ci0KLQljY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUgPSByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSwKLQkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIkZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24gZm9yIGNjZGMgYmFzZVxuIik7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOwotCX0KLQljY2RjX2NmZy0+Y2NkY19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlczEtPnN0YXJ0LAotCQkJCQkgICAgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7Ci0JaWYgKCFjY2RjX2NmZy0+Y2NkY19hZGRyKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gaW9yZW1hcCBjY2RjIGFkZHJcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfbWVtMTsKLQl9Ci0KIAlyZXQgPSByZXF1ZXN0X2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2lzciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgInZwZmVfY2FwdHVyZTAiLCB2cGZlX2Rldik7CiAKIAlpZiAoMCAhPSByZXQpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdFxuIik7Ci0JCWdvdG8gcHJvYmVfb3V0X3VubWFwMTsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLwogCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmIChOVUxMID09IHZmZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIlVuYWJsZSB0byBhbGxvYyB2aWRlbyBkZXZpY2VcbiIpOworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGFsbG9jIHZpZGVvIGRldmljZVxuIik7CiAJCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfaXJxOwogCX0KIApAQCAtMjA3MywxMiArMTk4MCw3IEBACiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZwZmVfZGV2LT52aWRlb19kZXYpOwogcHJvYmVfb3V0X3JlbGVhc2VfaXJxOgogCWZyZWVfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTAsIHZwZmVfZGV2KTsKLXByb2JlX291dF91bm1hcDE6Ci0JaW91bm1hcChjY2RjX2NmZy0+Y2NkY19hZGRyKTsKLXByb2JlX291dF9yZWxlYXNlX21lbTE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOwotcHJvYmVfZGlzYWJsZV9jbG9jazoKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOworcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW06CiAJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOwogCWtmcmVlKGNjZGNfY2ZnKTsKIHByb2JlX2ZyZWVfZGV2X21lbToKQEAgLTIwOTIsNyArMTk5NCw2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB2cGZlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCXY0bDJfaW5mbyhwZGV2LT5kZXYuZHJpdmVyLCAidnBmZV9yZW1vdmVcbiIpOwogCkBAIC0yMTAwLDEyICsyMDAxLDYgQEAKIAlrZnJlZSh2cGZlX2Rldi0+c2QpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwZmVfZGV2LT52NGwyX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodnBmZV9kZXYtPnZpZGVvX2Rldik7Ci0JbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKLQlpb3VubWFwKGNjZGNfY2ZnLT5jY2RjX2FkZHIpOwotCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOwogCWtmcmVlKHZwZmVfZGV2KTsKIAlrZnJlZShjY2RjX2NmZyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwppbmRleCA3ZWU3MmVjLi43OTE4NjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCi0gKiBjb21tb24gdnBzcyBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgorICogY29tbW9uIHZwc3Mgc3lzdGVtIG1vZHVsZSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM1LDEyICszNSw1MiBAQAogLyogRE02NDR4IGRlZmluZXMgKi8KICNkZWZpbmUgRE02NDRYX1NCTF9QQ1JfVlBTUwkJKDQpCiAKKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0lOVFNFTAkJMHgxMAorI2RlZmluZSBETTM1NV9WUFNTQkxfRVZUU0VMCQkweDE0CiAvKiB2cHNzIEJMIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0JMX0NDRENNVVgJCTB4MWMKIC8qIHZwc3MgQ0xLIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0NMS19DTEtDVFJMCQkweDA0CiAvKiBtYXNrcyBhbmQgc2hpZnRzICovCiAjZGVmaW5lIFZQU1NfSFNTSVNFTF9TSElGVAkJNAorLyoKKyAqIFZESU5UMCAtIHZwc3NfaW50MCwgVkRJTlQxIC0gdnBzc19pbnQxLCBIM0EgLSB2cHNzX2ludDQsCisgKiBJUElQRV9JTlQxX1NEUiAtIHZwc3NfaW50NQorICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9JTlRTRUxfREVGQVVMVAkweGZmODNmZjEwCisvKiBWRU5DSU5UIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9FVlRTRUxfREVGQVVMVAkweDQKKworI2RlZmluZSBETTM2NV9JU1A1X1BDQ1IgCQkweDA0CisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMQkJMHgxMAorI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDIJCTB4MTQKKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwzCQkweDE4CisjZGVmaW5lIERNMzY1X0lTUDVfQ0NEQ01VWCAJCTB4MjAKKyNkZWZpbmUgRE0zNjVfSVNQNV9QR19GUkFNRV9TSVpFIAkweDI4CisjZGVmaW5lIERNMzY1X1ZQQkVfQ0xLX0NUUkwgCQkweDAwCisvKgorICogdnBzcyBpbnRlcnJ1cHRzLiBWRElOVDAgLSB2cHNzX2ludDAsIFZESU5UMSAtIHZwc3NfaW50MSwKKyAqIEFGIC0gdnBzc19pbnQzCisgKi8KKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQJMHgwYjFmMDEwMAorLyogQUVXIC0gdnBzc19pbnQ2LCBSU1pfSU5UX0RNQSAtIHZwc3NfaW50NSAqLworI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDJfREVGQVVMVAkweDFmMGEwZjFmCisvKiBWRU5DIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMM19ERUZBVUxUCTB4MDAwMDAwMTUKKworLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgRE0zNjUqLworI2RlZmluZSBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCAJMAorI2RlZmluZSBETTM2NV9DQ0RDX1BHX0hEX1BPTF9TSElGVCAJMQorCisjZGVmaW5lIENDRF9TUkNfU0VMX01BU0sJCShCSVRfTUFTSyg1KSB8IEJJVF9NQVNLKDQpKQorI2RlZmluZSBDQ0RfU1JDX1NFTF9TSElGVAkJNAorCisvKiBEaWZmZXJlbnQgU29DIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KK2VudW0gdnBzc19wbGF0Zm9ybV90eXBlIHsKKwlETTY0NFgsCisJRE0zNTUsCisJRE0zNjUsCit9OwogCiAvKgogICogdnBzcyBvcGVyYXRpb25zLiBEZXBlbmRzIG9uIHBsYXRmb3JtLiBOb3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlCkBAIC01OSwxMyArOTksOSBAQAogCiAvKiB2cHNzIGNvbmZpZ3VyYXRpb24gKi8KIHN0cnVjdCB2cHNzX29wZXJfY29uZmlnIHsKLQlfX2lvbWVtIHZvaWQgKnZwc3NfYmxfcmVnc19iYXNlOwotCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2U7Ci0Jc3RydWN0IHJlc291cmNlCQkqcjE7Ci0JcmVzb3VyY2Vfc2l6ZV90CQlsZW4xOwotCXN0cnVjdCByZXNvdXJjZQkJKnIyOwotCXJlc291cmNlX3NpemVfdAkJbGVuMjsKLQljaGFyIHZwc3NfbmFtZVszMl07CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTA7CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTE7CisJZW51bSB2cHNzX3BsYXRmb3JtX3R5cGUgcGxhdGZvcm07CiAJc3BpbmxvY2tfdCB2cHNzX2xvY2s7CiAJc3RydWN0IHZwc3NfaHdfb3BzIGh3X29wczsKIH07CkBAIC03NSwyMiArMTExLDQ2IEBACiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGJsX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxfcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB2cHNzX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdnBzc19yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSArIG9mZnNldCk7Cit9CisKKy8qIEZvciBETTM2NSBvbmx5ICovCitzdGF0aWMgaW5saW5lIHUzMiBpc3A1X3JlYWQodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworLyogRm9yIERNMzY1IG9ubHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3A1X3dyaXRlKHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZG0zNjVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKK3sKKwl1MzIgdGVtcCA9IGlzcDVfcmVhZChETTM2NV9JU1A1X0NDRENNVVgpICYgfkNDRF9TUkNfU0VMX01BU0s7CisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgcGF0dGVybiBnZW5lcmF0b3IsIGVuYWJsZSBpdCAqLworCWlmIChzcmNfc2VsID09IFZQU1NfUEdMUEJLIHx8IHNyY19zZWwgPT0gVlBTU19DQ0RDUEcpCisJCXRlbXAgfD0gMHgwODsKKworCXRlbXAgfD0gKHNyY19zZWwgPDwgQ0NEX1NSQ19TRUxfU0hJRlQpOworCWlzcDVfd3JpdGUodGVtcCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKIH0KIAogc3RhdGljIHZvaWQgZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKQEAgLTEwMSw5ICsxNjEsOSBAQAogaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2Uoc3JjX3NlbCk7CisJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZShzcmNfc2VsKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19zZWxlY3RfY2NkY19zb3VyY2UpOwpAQCAtMTE0LDcgKzE3NCw3IEBACiAKIAlpZiAod2JsX3NlbCA8IFZQU1NfUENSX0FFV19XQkxfMCB8fAogCSAgICB3Ymxfc2VsID4gVlBTU19QQ1JfQ0NEQ19XQkxfTykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHdyaXRpbmcgYSAwIGNsZWFyIHRoZSBvdmVyZmxvdyAqLwogCW1hc2sgPSB+KG1hc2sgPDwgd2JsX3NlbCk7CkBAIC0xMjYsNyArMTg2LDcgQEAKIGludCB2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyhlbnVtIHZwc3Nfd2JsX3NlbCB3Ymxfc2VsKQogewogCWlmICghb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KHdibF9zZWwpOwogfQpAQCAtMTY2LDcgKzIyNiw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJkbTM1NV9lbmFibGVfY2xvY2s6IgogCQkJCSIgSW52YWxpZCBzZWxlY3RvcjogJWRcbiIsIGNsb2NrX3NlbCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOwpAQCAtMTgxLDEwMCArMjQxLDIyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRtMzY1X2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHV0ZW1wLCBtYXNrID0gMHgxLCBzaGlmdCA9IDAsIG9mZnNldCA9IERNMzY1X0lTUDVfUENDUjsKKwl1MzIgKCpyZWFkKSh1MzIgb2Zmc2V0KSA9IGlzcDVfcmVhZDsKKwl2b2lkKCp3cml0ZSkodTMyIHZhbCwgdTMyIG9mZnNldCkgPSBpc3A1X3dyaXRlOworCisJc3dpdGNoIChjbG9ja19zZWwpIHsKKwljYXNlIFZQU1NfQkxfQ0xPQ0s6CisJCWJyZWFrOworCWNhc2UgVlBTU19DQ0RDX0NMT0NLOgorCQlzaGlmdCA9IDE7CisJCWJyZWFrOworCWNhc2UgVlBTU19IM0FfQ0xPQ0s6CisJCXNoaWZ0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1JTWl9DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlicmVhazsKKwljYXNlIFZQU1NfSVBJUEVfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0lQSVBFSUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BDTEtfSU5URVJOQUw6CisJCXNoaWZ0ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BTWU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlicmVhazsKKwljYXNlIFZQU1NfVlBCRV9DTE9DSzoKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19WRU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSAyOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0xEQ19DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0ZESUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19PU0RfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDY7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfTERDX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJkbTM2NV9lbmFibGVfY2xvY2s6IEludmFsaWQgc2VsZWN0b3I6ICVkXG4iLAorCQkgICAgICAgY2xvY2tfc2VsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKwl1dGVtcCA9IHJlYWQob2Zmc2V0KTsKKwlpZiAoIWVuKSB7CisJCW1hc2sgPSB+bWFzazsKKwkJdXRlbXAgJj0gKG1hc2sgPDwgc2hpZnQpOworCX0gZWxzZQorCQl1dGVtcCB8PSAobWFzayA8PCBzaGlmdCk7CisKKwl3cml0ZSh1dGVtcCwgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbikKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2spCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayhjbG9ja19zZWwsIGVuKTsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19lbmFibGVfY2xvY2spOwogCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmMpCit7CisJaW50IHZhbCA9IDA7CisJdmFsID0gaXNwNV9yZWFkKERNMzY1X0lTUDVfQ0NEQ01VWCk7CisKKwl2YWwgfD0gKHN5bmMuY2NkcGdfaGRwb2wgPDwgRE0zNjVfQ0NEQ19QR19IRF9QT0xfU0hJRlQpOworCXZhbCB8PSAoc3luYy5jY2RwZ192ZHBvbCA8PCBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCk7CisKKwlpc3A1X3dyaXRlKHZhbCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKK30KK0VYUE9SVF9TWU1CT0woZG0zNjVfdnBzc19zZXRfc3luY19wb2wpOworCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplKQoreworCWludCBjdXJyZW50X3JlZyA9ICgoZnJhbWVfc2l6ZS5obHBmciA+PiAxKSAtIDEpIDw8IDE2OworCisJY3VycmVudF9yZWcgfD0gKGZyYW1lX3NpemUucHBsZW4gLSAxKTsKKwlpc3A1X3dyaXRlKGN1cnJlbnRfcmVnLCBETTM2NV9JU1A1X1BHX0ZSQU1FX1NJWkUpOworfQorRVhQT1JUX1NZTUJPTChkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKTsKKwogc3RhdGljIGludCBfX2luaXQgdnBzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBzdGF0dXMsIGRtMzU1ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyMSwgKnIyOworCWNoYXIgKnBsYXRmb3JtX25hbWU7CisJaW50IHN0YXR1czsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlzdHJjcHkob3Blcl9jZmcudnBzc19uYW1lLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CiAKLQlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpCi0JCWRtMzU1ID0gMTsKLQllbHNlIGlmIChzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG02NDR4X3Zwc3MiKSkgeworCXBsYXRmb3JtX25hbWUgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXN0cmNtcChwbGF0Zm9ybV9uYW1lLCAiZG0zNTVfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNMzU1OworCWVsc2UgaWYgKCFzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRtMzY1X3Zwc3MiKSkKKwkJb3Blcl9jZmcucGxhdGZvcm0gPSBETTM2NTsKKwllbHNlIGlmICghc3RyY21wKHBsYXRmb3JtX25hbWUsICJkbTY0NHhfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNNjQ0WDsKKwllbHNlIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidnBzcyBkcml2ZXIgbm90IHN1cHBvcnRlZCBvbiIKIAkJCSIgdGhpcyBwbGF0Zm9ybVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlZFxuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKLQlvcGVyX2NmZy5yMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFvcGVyX2NmZy5yMSkKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZWRcbiIsIHBsYXRmb3JtX25hbWUpOworCXIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCW9wZXJfY2ZnLmxlbjEgPSBvcGVyX2NmZy5yMS0+ZW5kIC0gb3Blcl9jZmcucjEtPnN0YXJ0ICsgMTsKLQotCW9wZXJfY2ZnLnIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSwKLQkJCQkJIG9wZXJfY2ZnLnIxLT5uYW1lKTsKLQlpZiAoIW9wZXJfY2ZnLnIxKQorCXIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSksIHIxLT5uYW1lKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgPSBpb3JlbWFwKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSkgeworCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCA9IGlvcmVtYXAocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSk7CisJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGZhaWwxOwogCX0KIAotCWlmIChkbTM1NSkgewotCQlvcGVyX2NmZy5yMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCWlmICghb3Blcl9jZmcucjIpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJcjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlpZiAoIXIyKSB7CiAJCQlzdGF0dXMgPSAtRU5PRU5UOwogCQkJZ290byBmYWlsMjsKIAkJfQotCQlvcGVyX2NmZy5sZW4yID0gb3Blcl9jZmcucjItPmVuZCAtIG9wZXJfY2ZnLnIyLT5zdGFydCArIDE7Ci0JCW9wZXJfY2ZnLnIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwKLQkJCQkJCSBvcGVyX2NmZy5sZW4yLAotCQkJCQkJIG9wZXJfY2ZnLnIyLT5uYW1lKTsKLQkJaWYgKCFvcGVyX2NmZy5yMikgeworCQlyMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyMi0+c3RhcnQsIHJlc291cmNlX3NpemUocjIpLCByMi0+bmFtZSk7CisJCWlmICghcjIpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDI7CiAJCX0KIAotCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjItPnN0YXJ0LAotCQkJCQkJICBvcGVyX2NmZy5sZW4yKTsKLQkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSkgeworCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgPSBpb3JlbWFwKHIyLT5zdGFydCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemUocjIpKTsKKwkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDM7CiAJCX0KIAl9CiAKLQlpZiAoZG0zNTUpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUpIHsKIAkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzU1X2VuYWJsZV9jbG9jazsKIAkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWJsX3JlZ3coRE0zNTVfVlBTU0JMX0lOVFNFTF9ERUZBVUxULCBETTM1NV9WUFNTQkxfSU5UU0VMKTsKKwkJYmxfcmVndyhETTM1NV9WUFNTQkxfRVZUU0VMX0RFRkFVTFQsIERNMzU1X1ZQU1NCTF9FVlRTRUwpOworCX0gZWxzZSBpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzY1X2VuYWJsZV9jbG9jazsKKwkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzY1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMSk7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwyX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMik7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwzX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMyk7CiAJfSBlbHNlCiAJCW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cgPSBkbTY0NHhfY2xlYXJfd2JsX292ZXJmbG93OwogCiAJc3Bpbl9sb2NrX2luaXQoJm9wZXJfY2ZnLnZwc3NfbG9jayk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmUgc3VjY2Vzc1xuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZSBzdWNjZXNzXG4iLCBwbGF0Zm9ybV9uYW1lKTsKIAlyZXR1cm4gMDsKIAogZmFpbDM6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwgb3Blcl9jZmcubGVuMik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMikpOwogZmFpbDI6Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CisJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApOwogZmFpbDE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSkpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHZwc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG0zNTVfdnBzcyIpKSB7Ci0JCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LCBvcGVyX2NmZy5sZW4yKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpOworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDI1MTAwMDAuLmVjYmNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yMzIsNiArMjMyLDEyIEBACiAJewktMSwJCS0xLAktMSwJCS0xfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgZGlrb21fZGszMDBfZGlnaXRhbFtdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmUsCX5FTV9HUElPXzQsCTEwfSwKKwl7RU0yODgwX1IwNF9HUE8sCTB4MDgsCTB4ZmYsCQkxMH0sCisJeyAtMSwJCQktMSwJLTEsCQktMX0sCit9OworCiAKIC8qCiAgKiAgQm9hcmQgZGVmaW5pdGlvbnMKQEAgLTQ2MSwyMSArNDY3LDMwIEBACiAJCS5uYW1lICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IFVTQiBJSSBEZWx1eGUiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc19pcl9pMmMgICA9IDEsCisJCS50dmF1ZGlvX2FkZHIgPSAweDU4LAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5UIHwKKwkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSB8CisJCQkJVERBOTg4N19RU1MsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTQsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BVVgsCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTUsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCisJCQkucmFkaW8JICA9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0FVWCwKKwkJCX0KIAl9LAogCVtFTTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVmlkZW9sb2d5IDIwSzE0WFVTQiBVU0IyLjAiLApAQCAtNzMwLDExICs3NDUsMTIgQEAKIAogCVtFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMgU2VjYW0iLAotCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS5oYXNfbXNwMzR4eCAgPSAxLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGVmYXVsdF9kaWdpdGFsLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLApAQCAtMTI2NSw2ICsxMjgxLDcgQEAKIAkJLmRlY29kZXIJPSBFTTI4WFhfU0FBNzExWCwKIAkJLmhhc19kdmIJPSAxLAogCQkuZHZiX2dwaW8JPSBlbTI4ODJfa3dvcmxkXzMxNXVfZGlnaXRhbCwKKwkJLmlyX2NvZGVzCT0gJmlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlLAogCQkueGNsawkJPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCiAJCS5pMmNfc3BlZWQJPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSwKIAkJLyogQW5hbG9nIG1vZGUgLSBzdGlsbCBub3QgcmVhZHkgKi8KQEAgLTE0MzEsNiArMTQ0OCwyMSBAQAogCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKKwlbRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJEaWtvbSBESzMwMCIsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGlrb21fZGszMDBfZGlnaXRhbCwKKwkJLmlucHV0ICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCisJCX0gfSwKKwl9LAogCVtFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF8zMzBVXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgUGx1c1RWIEhEIEh5YnJpZCAzMzAiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LApAQCAtMTc1MSw2ICsxNzgzLDcgQEAKIAl7MHhjZWU0NGE5OSwgRU0yODgyX0JPQVJEX0VWR0FfSU5EVFVCRSwgVFVORVJfWEMyMDI4fSwKIAl7MHhiODg0NmIyMCwgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk8sIFRVTkVSX1hDMjAyOH0sCiAJezB4NjNmNjUzYmQsIEVNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YLCBUVU5FUl9BQlNFTlR9LAorCXsweDRlOTEzNDQyLCBFTTI4ODJfQk9BUkRfRElLT01fREszMDAsIFRVTkVSX1hDMjAyOH0sCiB9OwogCiAvKiBJMkMgZGV2aWNlbGlzdCBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzICovCkBAIC0yMTAzLDYgKzIxMzYsNyBAQAogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfMzMwVToKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9DSElOQTsKIAkJY3RsLT5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFOwogCQlicmVhazsKQEAgLTIyNTksOSArMjI5MywxMiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHZvaWQgZW0yOHh4X3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJLyogTGVhZHRlayB3aW5mYXN0IHR2IFVTQklJIGRlbHV4ZSBjYW4gZmluZCBhIG5vbiB3b3JraW5nIElSLWRldmljZSAqLworCS8qIGF0IGFkZHJlc3MgMHgxOCwgc28gaWYgdGhhdCBhZGRyZXNzIGlzIG5lZWRlZCBmb3IgYW5vdGhlciBib2FyZCBpbiAqLworCS8qIHRoZSBmdXR1cmUsIHBsZWFzZSBwdXQgaXQgYWZ0ZXIgMHgxZi4gKi8KIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyX2xpc3RbXSA9IHsKLQkJIDB4MzAsIDB4NDcsIEkyQ19DTElFTlRfRU5ECisJCSAweDFmLCAweDMwLCAweDQ3LCBJMkNfQ0xJRU5UX0VORAogCX07CiAKIAlpZiAoZGlzYWJsZV9pcikKQEAgLTIyODgsNiArMjMyNSwxMCBAQAogCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld190YWJsZTsKIAkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXA7CiAJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSI7CisJY2FzZSBFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRToKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGU7OworCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGU7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4MjAgV2luZmFzdCBUViBVU0JJSSBEZWx1eGUpIjsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzgxLDYgKzI0MjIsMzEgQEAKIAkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKIAkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKIAkJYnJlYWs7CisKKy8qCisJCSAqIFRoZSBEaWtvbSBESzMwMCBpcyBkZXRlY3RlZCBhcyBhbiBLd29ybGQgVlMtRFZCLVQgMzIzVVIuCisJCSAqCisJCSAqIFRoaXMgb2NjdXJzIGJlY2F1c2UgdGhleSBzaGFyZSBpZGVudGljYWwgVVNCIHZlbmRvciBhbmQKKwkJICogcHJvZHVjdCBJRHMuCisJCSAqCisJCSAqIFdoYXQgd2UgZG8gaGVyZSBpcyBsb29rIHVwIHRoZSBFRVBST00gaGFzaCBvZiB0aGUgRGlrb20KKwkJICogYW5kIGlmIGl0IGlzIGZvdW5kIHRoZW4gd2UgZGVjaWRlIHRoYXQgd2UgZG8gbm90IGhhdmUKKwkJICogYSBLd29ybGQgYW5kIHJlc2V0IHRoZSBkZXZpY2UgdG8gdGhlIERpa29tIGluc3RlYWQuCisJCSAqCisJCSAqIFRoaXMgc29sdXRpb24gaXMgb25seSB2YWxpZCBpZiB0aGV5IGRvIG5vdCBzaGFyZSBlZXByb20KKwkJICogaGFzaCBpZGVudGl0aWVzIHdoaWNoIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIGFzIHlldC4KKwkJICovCisJY2FzZSBFTTI4ODJfQk9BUkRfS1dPUkxEX1ZTX0RWQlQ6CisJCWlmICghZW0yOHh4X2hpbnRfYm9hcmQoZGV2KSkKKwkJCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKworCQkvKiBJbiBjYXNlcyB3aGVyZSB3ZSBoYWQgdG8gdXNlIGEgYm9hcmQgaGludCwgdGhlIGNhbGwgdG8KKwkJICAgZW0yOHh4X3NldF9tb2RlKCkgaW4gZW0yOHh4X3ByZV9jYXJkX3NldHVwKCkgd2FzIGEgbm8tb3AsCisJCSAgIHNvIG1ha2UgdGhlIGNhbGwgbm93IHNvIHRoZSBhbmFsb2cgR1BJT3MgYXJlIHNldCBwcm9wZXJseQorCQkgICBiZWZvcmUgcHJvYmluZyB0aGUgaTJjIGJ1cy4gKi8KKwkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKKwkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKKwkJYnJlYWs7CiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCBiMzExZDQ1Li41YTM3ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTY5MSw5ICs2OTEsMTUgQEAKIAlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKSB7CiAJCXZpbmN0cmwgfD0gRU0yOFhYX1ZJTkNUUkxfVkJJX1JBVzsKIAkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzRfVkJJX1NUQVJUX0gsIDB4MDApOwotCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM2X1ZCSV9XSURUSCwgMHhiNCk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQsIDB4MGMpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNl9WQklfV0lEVEgsIGRldi0+dmJpX3dpZHRoLzQpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzN19WQklfSEVJR0hULCBkZXYtPnZiaV9oZWlnaHQpOworCQlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCQkvKiBOVFNDICovCisJCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7CisJCX0gZWxzZSBpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCQkvKiBQQUwgKi8KKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WLCAweDA3KTsKKwkJfQogCX0KIAogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCB2aW5jdHJsKTsKQEAgLTc2MCw2ICs3NjYsMTMgQEAKIAl3aWR0aCA9IG5vcm1fbWF4dyhkZXYpOwogCWhlaWdodCA9IG5vcm1fbWF4aChkZXYpOwogCisJLyogUHJvcGVybHkgc2V0dXAgVkJJICovCisJZGV2LT52Ymlfd2lkdGggPSA3MjA7CisJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkKKwkJZGV2LT52YmlfaGVpZ2h0ID0gMTI7CisJZWxzZQorCQlkZXYtPnZiaV9oZWlnaHQgPSAxODsKKwogCWlmICghZGV2LT5wcm9ncmVzc2l2ZSkKIAkJaGVpZ2h0ID4+PSBub3JtX21heGgoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IGNjMDUwNWUuLjFiOTYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTUwMiw3ICs1MDIsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKKwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CiAJY2FzZSBFTTI4ODFfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BSTzoKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICZlbTI4eHhfemwxMDM1M194YzMwMjhfbm9faTJjX2dhdGUsCiAJCQkJCSAgICZkZXYtPmkyY19hZGFwKTsKQEAgLTYwNiw2ICs2MDgsNyBAQAogCiAJaWYgKGRldi0+ZHZiKSB7CiAJCXVucmVnaXN0ZXJfZHZiKGRldi0+ZHZiKTsKKwkJa2ZyZWUoZGV2LT5kdmIpOwogCQlkZXYtPmR2YiA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IGFmMGQ5MzUuLjFmYjc1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC03NSw2ICs3NSwxMCBAQAogCXVuc2lnbmVkIGludCByZXBlYXRfaW50ZXJ2YWw7CiAKIAlpbnQgICgqZ2V0X2tleSkoc3RydWN0IGVtMjh4eF9JUiAqLCBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICopOworCisJLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KKworCXN0cnVjdCBpcl9kZXZfcHJvcHMgcHJvcHM7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTgwLDYgKzE4NCwzNiBAQAogCXJldHVybiAxOwogfQogCitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIGtleWRldGVjdCwga2V5OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSBpci0+Yy0+YWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZzdWJhZGRyLCAubGVuID0gMX0sCisKKwkJCQl7IC5hZGRyID0gaXItPmMtPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmtleWRldGVjdCwgLmxlbiA9IDF9IH07CisKKwlzdWJhZGRyID0gMHgxMDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMtPmFkYXB0ZXIsIG1zZywgMikpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ZGV0ZWN0ID09IDB4MDApCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MDA7CisJbXNnWzFdLmJ1ZiA9ICZrZXk7CisJaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGlyLT5jLT5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ID09IDB4MDApCisJCXJldHVybiAwOworCisJKmlyX2tleSA9IGtleTsKKwkqaXJfcmF3ID0ga2V5OworCXJldHVybiAxOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIFBvbGwgYmFzZWQgZ2V0IGtleWNvZGUgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzNiwzNSArMzcwLDI4IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiB9CiAKLWludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitpbnQgZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKIHsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JdTggaXJfY29uZmlnOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMgPT0gTlVMTCkgewotCQkvKiBObyByZW1vdGUgY29udHJvbCBzdXBwb3J0ICovCi0JCXJldHVybiAwOwotCX0KLQotCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7Ci0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpciB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKLQlpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OworCWludCByYyA9IDA7CisJc3RydWN0IGVtMjh4eF9JUiAqaXIgPSBwcml2OworCXN0cnVjdCBlbTI4eHggKmRldiA9IGlyLT5kZXY7CisJdTggaXJfY29uZmlnID0gRU0yODc0X0lSX1JDNTsKIAogCS8qIEFkanVzdCB4Y2xrIGJhc2VkIG8gSVIgdGFibGUgZm9yIFJDNS9ORUMgdGFibGVzICovCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCWlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KSB7CiAJCWRldi0+Ym9hcmQueGNsayB8PSBFTTI4WFhfWENMS19JUl9SQzVfTU9ERTsKIAkJaXItPmZ1bGxfY29kZSA9IDE7Ci0JfSBlbHNlICBpZiAoZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9PSBJUl9UWVBFX05FQykgeworCX0gZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykgewogCQlkZXYtPmJvYXJkLnhjbGsgJj0gfkVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFOwogCQlpcl9jb25maWcgPSBFTTI4NzRfSVJfTkVDOwogCQlpci0+ZnVsbF9jb2RlID0gMTsKLQl9CisJfSBlbHNlCisJCXJjID0gLUVJTlZBTDsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBpcl90eXBlOworCiAJZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCBkZXYtPmJvYXJkLnhjbGssCiAJCQkgICAgICBFTTI4WFhfWENMS19JUl9SQzVfTU9ERSk7CiAKQEAgLTM4MCw5ICs0MDcsNDIgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCJVbnJlY29nbml6ZWQgZW0yOHh4IGNoaXAgaWQ6IElSIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJcmMgPSAtRUlOVkFMOwogCX0KIAorCXJldHVybiByYzsKK30KKworaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAoZGV2LT5ib2FyZC5pcl9jb2RlcyA9PSBOVUxMKSB7CisJCS8qIE5vIHJlbW90ZSBjb250cm9sIHN1cHBvcnQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJLyogcmVjb3JkIGhhbmRsZXMgdG8gb3Vyc2VsZiAqLworCWlyLT5kZXYgPSBkZXY7CisJZGV2LT5pciA9IGlyOworCisJaXItPmlucHV0ID0gaW5wdXRfZGV2OworCisJLyoKKwkgKiBlbTI4NzQgc3VwcG9ydHMgbW9yZSBwcm90b2NvbHMuIEZvciBub3csIGxldCdzIGp1c3QgYW5ub3VuY2UKKwkgKiB0aGUgdHdvIHByb3RvY29scyB0aGF0IHdlcmUgYWxyZWFkeSB0ZXN0ZWQKKwkgKi8KKwlpci0+cHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDOworCWlyLT5wcm9wcy5wcml2ID0gaXI7CisJaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2w7CisKIAkvKiBUaGlzIGlzIGhvdyBvZnRlbiB3ZSBhc2sgdGhlIGNoaXAgZm9yIElSIGluZm9ybWF0aW9uICovCiAJaXItPnBvbGxpbmcgPSAxMDA7IC8qIG1zICovCiAKQEAgLTM5Myw2ICs0NTMsOCBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAorCS8qIFNldCBJUiBwcm90b2NvbCAqLworCWVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2woaXIsIGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUpOwogCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC00MDUsMTQgKzQ2NywxMyBAQAogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwotCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KLQlpci0+ZGV2ID0gZGV2OwotCWRldi0+aXIgPSBpcjsKKwogCiAJZW0yOHh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMsCisJCQkJJmlyLT5wcm9wcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAppbmRleCAwNThhYzg3Li45MWU5MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCkBAIC0xNzMsOCArMTczLDggQEAKIC8qIGVtMjg3NCBJUiBjb25maWcgcmVnaXN0ZXIgKDB4NTApICovCiAjZGVmaW5lIEVNMjg3NF9JUl9ORUMgICAgICAgICAgIDB4MDAKICNkZWZpbmUgRU0yODc0X0lSX1JDNSAgICAgICAgICAgMHgwNAotI2RlZmluZSBFTTI4NzRfSVJfUkM1X01PREVfMCAgICAweDA4Ci0jZGVmaW5lIEVNMjg3NF9JUl9SQzVfTU9ERV82QSAgIDB4MGIKKyNkZWZpbmUgRU0yODc0X0lSX1JDNl9NT0RFXzAgICAgMHgwOAorI2RlZmluZSBFTTI4NzRfSVJfUkM2X01PREVfNkEgICAweDBiCiAKIC8qIGVtMjg3NCBUcmFuc3BvcnQgU3RyZWFtIEVuYWJsZSBSZWdpc3RlciAoMHg1ZikgKi8KICNkZWZpbmUgRU0yODc0X1RTMV9DQVBUVVJFX0VOQUJMRSAoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCmluZGV4IDk0OTQzZTUuLmM3ZGNlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKQEAgLTcxLDcgKzcxLDExIEBACiBzdGF0aWMgaW50CiB2Ymlfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpCiB7Ci0JKnNpemUgPSA3MjAgKiAxMiAqIDI7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCSpzaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSB2YmlidWZzOwogCWlmICgqY291bnQgPCAyKQpAQCAtODUsMTkgKzg5LDE4IEBACiB2YmlfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAogCSAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOwogCWludCAgICAgICAgICAgICAgICAgIHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAotCXNpemUgPSA3MjAgKiAxMiAqIDI7Ci0KLQlidWYtPnZiLnNpemUgPSBzaXplOworCWJ1Zi0+dmIuc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0ICogMjsKIAogCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1Zi0+dmIud2lkdGggID0gNzIwOwotCWJ1Zi0+dmIuaGVpZ2h0ID0gMTI7CisJYnVmLT52Yi53aWR0aCAgPSBkZXYtPnZiaV93aWR0aDsKKwlidWYtPnZiLmhlaWdodCA9IGRldi0+dmJpX2hlaWdodDsKIAlidWYtPnZiLmZpZWxkICA9IGZpZWxkOwogCiAJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4NDliMThjLi5hYzJiZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMjgyLDcgKzI4Miw3IEBACiB7CiAJdm9pZCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKIAlpbnQgIG9mZnNldDsKLQlpbnQgYnl0ZXNwZXJsaW5lID0gNzIwOworCWludCBieXRlc3BlcmxpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAogCWlmIChkZXYgPT0gTlVMTCkgewogCQllbTI4eHhfaXNvY2RiZygiZGV2IGlzIG51bGxcbiIpOwpAQCAtMzIzLDggKzMyMyw4IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIGJvdHRvbSBmaWVsZCBwb3B1bGF0ZXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBmcmFtZSAqLwogCWlmIChidWYtPnRvcF9maWVsZCA9PSAwKSB7Ci0JCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKLQkJb2Zmc2V0ICs9IGJ5dGVzcGVybGluZSAqIDB4MGM7CisJCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OworCQlvZmZzZXQgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OwogCX0KIAogCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbik7CkBAIC01NzgsOCArNTc4LDcgQEAKIAkJCWRldi0+Y3VyX2ZpZWxkID0gcFsyXTsKIAkJfQogCi0JCS8qIEZJWE1FOiBnZXQgcmlkIG9mIGhhcmQtY29kZWQgdmFsdWUgKi8KLQkJdmJpX3NpemUgPSA3MjAgKiAweDBjOworCQl2Ymlfc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0OwogCiAJCWlmIChkZXYtPmNhcHR1cmVfdHlwZSA9PSAwKSB7CiAJCQlpZiAoZGV2LT52YmlfcmVhZCA+PSB2Ymlfc2l6ZSkgewpAQCAtMTg1MCwxOCArMTg0OSwyNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTg2OSwxOCArMTg3NywyNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTkyMiw3ICsxOTM5LDggQEAKIAkJICAgQXQgYSBtaW5pbXVtLCBpdCBjYXVzZXMgYSBjcmFzaCBpbiB6dmJpIHNpbmNlIGl0IGRvZXMKIAkJICAgYSBtZW1jcHkgYmFzZWQgb24gdGhlIHNvdXJjZSBidWZmZXIgbGVuZ3RoICovCiAJCWludCByZXN1bHQgPSB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZiaXEsIGIpOwotCQliLT5sZW5ndGggPSAxNzI4MDsKKwkJYi0+bGVuZ3RoID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJCXJldHVybiByZXN1bHQ7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCA4MGQ5YjRmLi5iYTZmZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMTExLDYgKzExMSw3IEBACiAjZGVmaW5lIEVNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVUyAgICAgICAgICAgNzIKICNkZWZpbmUgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1ggICAgICAgICAgNzMKICNkZWZpbmUgRU0yODAwX0JPQVJEX1ZDMjExQQkJCSAgNzQKKyNkZWZpbmUgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwCQkgIDc1CiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIEVNMjhYWF9NSU5fQlVGIDQKQEAgLTU1Miw3ICs1NTMsOCBAQAogCWludCBjYXB0dXJlX3R5cGU7CiAJaW50IHZiaV9yZWFkOwogCXVuc2lnbmVkIGNoYXIgY3VyX2ZpZWxkOwotCisJdW5zaWduZWQgaW50IHZiaV93aWR0aDsKKwl1bnNpZ25lZCBpbnQgdmJpX2hlaWdodDsgLyogbGluZXMgcGVyIGZpZWxkICovCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICByZXF1ZXN0X21vZHVsZV93azsKIApAQCAtNjkzLDYgKzY5NSw4IEBACiBpbnQgZW0yOHh4X2dldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KTsKIGludCBlbTI4eHhfZ2V0X2tleV9waW5uYWNsZV91c2JfZ3JleShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCiAJCQkJICAgICB1MzIgKmlyX3Jhdyk7CitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LAorCQkJCSAgICAgdTMyICppcl9yYXcpOwogdm9pZCBlbTI4eHhfcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiB2b2lkIGVtMjh4eF9kZXJlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKaW5kZXggZGNjMWEwMy4uODc5ODFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMSw3ICsxLDExIEBACiBjb25maWcgVVNCX0VUNjFYMjUxCi0JdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSB6YzN4eCBtb2R1bGUKKwkgIGluc3RlYWQuCisKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBFdG9tcyBFVDYxWDE1MQogCSAgb3IgRVQ2MVgyNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggNjA5ZDY1Yi4uZTAwNjBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMjEsNiArMjEsMTUgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvS2NvbmZpZyIKIAorY29uZmlnIFVTQl9HU1BDQV9CRU5RCisJdHJpc3RhdGUgIkJlbnEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEJlbnEgREMgRTMwMCBjYW1lcmEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2JlbnEuCisKIGNvbmZpZyBVU0JfR1NQQ0FfQ09ORVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0zMCw2ICszOSwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY29uZXguCiAKK2NvbmZpZyBVU0JfR1NQQ0FfQ1BJQTEKKwl0cmlzdGF0ZSAiY3BpYSBDUGlBICh2ZXJzaW9uIDEpIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgVVNCIGNhbWVyYXMgYmFzZWQgb24gdGhlIGNwaWEKKwkgIENQaUEgY2hpcC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICBhcHBsaWNhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgdmlkZW9mb3JtYXQgZ2VuZXJhdGVkIGJ5IHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9jcGlhMS4KKwogY29uZmlnIFVTQl9HU1BDQV9FVE9NUwogCXRyaXN0YXRlICJFdG9tcyBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC04NiwxNSArMTA2LDI1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffb3Y1MTkuCiAKIGNvbmZpZyBVU0JfR1NQQ0FfT1Y1MzQKLQl0cmlzdGF0ZSAiT1Y1MzQgVVNCIENhbWVyYSBEcml2ZXIiCisJdHJpc3RhdGUgIk9WNTM0IE9WNzcyeCBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwLgotCSAgKGUuZy4gU29ueSBQbGF5c3RhdGlvbiBFWUUpCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIE9WNTM0IGNoaXAKKwkgIGFuZCBzZW5zb3IgT1Y3NzJ4IChlLmcuIFNvbnkgUGxheXN0YXRpb24gRVlFKQogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNC4KIAorY29uZmlnIFVTQl9HU1BDQV9PVjUzNF85CisJdHJpc3RhdGUgIk9WNTM0IE9WOTY1eCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwCisJICBhbmQgc2Vuc29yIE9WOTY1eCAoZS5nLiBIZXJjdWxlcyBEdWFscGl4KQorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNF85LgorCiBjb25maWcgVVNCX0dTUENBX1BBQzIwNwogCXRyaXN0YXRlICJQaXhhcnQgUEFDMjA3IFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTEyMiw2ICsxNTIsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3BhYzczMTEuCiAKK2NvbmZpZyBVU0JfR1NQQ0FfU045QzIwMjgKKwl0cmlzdGF0ZSAiU09OSVggRHVhbC1Nb2RlIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN0cmVhbWluZyBzdXBwb3J0IGZvciBTb25peCBTTjlDMjAyOCBjYW1lcmFzLgorCSAgVGhlc2UgYXJlIHN1cHBvcnRlZCBhcyBzdGlsbGNhbXMgaW4gbGliZ3Bob3RvMi9jYW1saWJzL3Nvbml4LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zbjljMjAyOC4KKwogY29uZmlnIFVTQl9HU1BDQV9TTjlDMjBYCiAJdHJpc3RhdGUgIlNOOUMyMFggVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggZmYyYzcyNy4uNmU0Y2YxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICAgKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0JFTlEpICAgICArPSBnc3BjYV9iZW5xLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ1BJQTEpICAgICs9IGdzcGNhX2NwaWExLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KKSAgKz0gZ3NwY2FfamVpbGluai5vCkBAIC03LDkgKzksMTEgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEpICs9IGdzcGNhX21yOTczMTBhLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkpICAgICs9IGdzcGNhX292NTE5Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQpICAgICs9IGdzcGNhX292NTM0Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzRfOSkgICs9IGdzcGNhX292NTM0Xzkubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpICAgKz0gZ3NwY2FfcGFjMjA3Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMikgICs9IGdzcGNhX3BhYzczMDIubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMDI4KSArPSBnc3BjYV9zbjljMjAyOC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMFgpICArPSBnc3BjYV9zbjljMjB4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhCKSAgICs9IGdzcGNhX3Nvbml4Yi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYSikgICArPSBnc3BjYV9zb25peGoubwpAQCAtMzAsNyArMzQsOSBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCiBnc3BjYV9tYWluLW9ianMgICAgIDo9IGdzcGNhLm8KK2dzcGNhX2JlbnEtb2JqcyAgICAgOj0gYmVucS5vCiBnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2NwaWExLW9ianMgICAgOj0gY3BpYTEubwogZ3NwY2FfZXRvbXMtb2JqcyAgICA6PSBldG9tcy5vCiBnc3BjYV9maW5lcGl4LW9ianMgIDo9IGZpbmVwaXgubwogZ3NwY2FfamVpbGluai1vYmpzICA6PSBqZWlsaW5qLm8KQEAgLTM4LDkgKzQ0LDExIEBACiBnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KIGdzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubwogZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9vdjUzNF85LW9ianMgIDo9IG92NTM0XzkubwogZ3NwY2FfcGFjMjA3LW9ianMgICA6PSBwYWMyMDcubwogZ3NwY2FfcGFjNzMwMi1vYmpzICA6PSBwYWM3MzAyLm8KIGdzcGNhX3BhYzczMTEtb2JqcyAgOj0gcGFjNzMxMS5vCitnc3BjYV9zbjljMjAyOC1vYmpzIDo9IHNuOWMyMDI4Lm8KIGdzcGNhX3NuOWMyMHgtb2JqcyAgOj0gc245YzIweC5vCiBnc3BjYV9zb25peGItb2JqcyAgIDo9IHNvbml4Yi5vCiBnc3BjYV9zb25peGotb2JqcyAgIDo9IHNvbml4ai5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYWM0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIEJlbnEgREMgRTMwMCBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImJlbnEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCZW5xIERDIEUzMDAgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgdm9pZCBzZF9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpOworCisvKiAtLSB3cml0ZSBhIHJlZ2lzdGVyIC0tICovCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1MTYgdmFsdWUsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkweDAyLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsCisJCQlpbmRleCwKKwkJCU5VTEwsCisJCQkwLAorCQkJNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfdyBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwlnc3BjYV9kZXYtPmNhbS5ub191cmJfY3JlYXRlID0gMTsKKwlnc3BjYV9kZXYtPmNhbS5yZXZlcnNlX2FsdHMgPSAxOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsCisJCWdzcGNhX2Rldi0+bmJhbHQgLSAxKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKy8qCXJlZ193KGdzcGNhX2RldiwgMHgwMDAzLCAweDAwMDIpOyAqLworCXJldHVybiAwOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGksIG47CisKKwkvKiBjcmVhdGUgNCBVUkJzIC0gMiBvbiBlbmRwb2ludCAweDgzIGFuZCAyIG9uIDB4MDgyICovCisjaWYgTUFYX05VUkJTIDwgNAorI2Vycm9yICJOb3QgZW5vdWdoIFVSQnMgaW4gdGhlIGdzcGNhIHRhYmxlIgorI2VuZGlmCisjZGVmaW5lIFNEX1BLVF9TWiA2NAorI2RlZmluZSBTRF9OUEtUIDMyCisJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFNEX05QS1QsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJZXJyKCJ1c2JfYWxsb2NfdXJiIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKKwkJCQkJCVNEX1BLVF9TWiAqIFNEX05QS1QsCisJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyKCJ1c2JfYnVmZmVyX2FsbG9jIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdXJiLT5kZXYgPSBnc3BjYV9kZXYtPmRldjsKKwkJdXJiLT5jb250ZXh0ID0gZ3NwY2FfZGV2OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBTRF9QS1RfU1ogKiBTRF9OUEtUOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCW4gJiAxID8gMHg4MiA6IDB4ODMpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQCisJCQkJCXwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPmNvbXBsZXRlID0gc2RfaXNvY19pcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTRF9OUEtUOworCQlmb3IgKGkgPSAwOyBpIDwgU0RfTlBLVDsgaSsrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IFNEX1BLVF9TWjsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gU0RfUEtUX1NaICogaTsKKwkJfQorCX0KKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA3KTsKKwl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgZ3NwY2FfZGV2LT5uYmFsdCAtIDEpOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwkvKiB1bnVzZWQgKi8KK30KKworLyogcmVjZXB0aW9uIG9mIGFuIFVSQiAqLworc3RhdGljIHZvaWQgc2RfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXJiICp1cmIwOworCXU4ICpkYXRhOworCWludCBpLCBzdDsKKworCVBERUJVRyhEX1BBQ0ssICJzZCBpc29jIGlycSIpOworCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gKi8KKyNpZmRlZiBDT05GSUdfUE0KKwkJaWYgKGdzcGNhX2Rldi0+ZnJvemVuKQorCQkJcmV0dXJuOworI2VuZGlmCisJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHRoaXMgaXMgYSBjb250cm9sIFVSTiAoZXAgMHg4MyksIHdhaXQgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzBdIHx8IHVyYiA9PSBnc3BjYV9kZXYtPnVyYlsyXSkKKwkJcmV0dXJuOworCisJLyogc2NhbiBib3RoIHJlY2VpdmVkIFVSQnMgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzFdKQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMF07CisJZWxzZQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMl07CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCisJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KKwkJaWYgKHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaCisJCSAgICB8fCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaKSB7CisJCQlQREVCVUcoRF9FUlIsICJJU09DIGJhZCBsZW5ndGhzICVkIC8gJWQiLAorCQkJCXVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJc3QgPSB1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWlmIChzdCA9PSAwKQorCQkJc3QgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJaWYgKHN0KSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkJIklTT0MgZGF0YSBlcnJvcjogWyVkXSBzdGF0dXM9JWQiLAorCQkJCWksIHN0KTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBUaGUgaW1hZ2VzIGFyZSByZWNlaXZlZCBpbiBVUkJzIG9mIGRpZmZlcmVudCBlbmRwb2ludHMKKwkJICogKDB4ODMgYW5kIDB4ODIpLgorCQkgKiBJbWFnZSBwaWVjZXMgaW4gVVJCcyBvZiBlcCAweDgzIGFyZSBjb250aW51YXRlZCBpbiBVUkJzIG9mCisJCSAqIGVwIDB4ODIgb2YgdGhlIHNhbWUgaW5kZXguCisJCSAqIFRoZSBwYWNrZXRzIGluIHRoZSBVUkJzIG9mIGVuZHBvaW50IDB4ODMgc3RhcnQgd2l0aDoKKwkJICoJLSA4MCBiYS9iYiAwMCAwMCA9IHN0YXJ0IG9mIGltYWdlIGZvbGxvd2VkIGJ5ICdmZiBkOCcKKwkJICoJLSAwNCBiYS9iYiBvbyBvbyA9IGltYWdlIHBpZWNlCisJCSAqCQl3aGVyZSAnb28gb28nIGlzIHRoZSBpbWFnZSBvZmZzZXQKKwkJCQkJCShub3QgY2hla2VkKQorCQkgKgktIChvdGhlciAtPiBiYWQgZnJhbWUpCisJCSAqIFRoZSBpbWFnZXMgYXJlIEpQRUcgZW5jb2RlZCB3aXRoIGZ1bGwgaGVhZGVyIGFuZAorCQkgKiBub3JtYWwgZmYgZXNjYXBlLgorCQkgKiBUaGUgZW5kIG9mIGltYWdlICgnZmYgZDknKSBtYXkgb2NjdXIgaW4gYW55IFVSQi4KKwkJICogKG5vdCBjaGVrZWQpCisJCSAqLworCQlkYXRhID0gKHU4ICopIHVyYjAtPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaWYgKGRhdGFbMF0gPT0gMHg4MCAmJiAoZGF0YVsxXSAmIDB4ZmUpID09IDB4YmEpIHsKKworCQkJLyogbmV3IGltYWdlICovCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJTlVMTCwgMCk7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIGlmIChkYXRhWzBdID09IDB4MDQgJiYgKGRhdGFbMV0gJiAweGZlKSA9PSAweGJhKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULAorCQkJCQlkYXRhLCBTRF9QS1RfU1opOworCX0KKworCS8qIHJlc3VibWl0IHRoZSBVUkJzICovCisJc3QgPSB1c2Jfc3VibWl0X3VyYih1cmIwLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoMCkgcmV0ICVkIiwgc3QpOworCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5pc29jX2luaXQgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDRhNSwgMHgzMDM1KX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpbmZvKCJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpbmZvKCJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjlkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBBdXRvIGdhaW4gYWxnb3JpdGhtIGZvciBjYW1lcmEncyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogQXV0b2dhaW4gKyBleHBvc3VyZSBhbGdvcml0aG0gZm9yIGNhbWVyYXMgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCisgICAodXN1YWxseSB0aGlzIG1lYW5zIHdlIGNhbiBvbmx5IGNvbnRyb2wgdGhlIGNsb2NrZGl2IHRvIGNoYW5nZSBleHBvc3VyZSkKKyAgIEFzIGNoYW5naW5nIHRoZSBjbG9ja2RpdiBzbyB0aGF0IHRoZSBmcHMgZHJvcHMgZnJvbSAzMCB0byAxNSBmcHMgZm9yCisgICBleGFtcGxlLCB3aWxsIGxlYWQgdG8gYSBodWdlIGV4cG9zdXJlIGNoYW5nZSAoaXQgZWZmZWN0aXZlbHkgZG91YmxlcyksCisgICB0aGlzIGFsZ29yaXRobSBub3JtYWxseSB0cmllcyB0byBvbmx5IGFkanVzdCB0aGUgZ2FpbiAoYmV0d2VlbiA0MCBhbmQKKyAgIDgwICUpIGFuZCBpZiB0aGF0IGRvZXMgbm90IGhlbHAsIG9ubHkgdGhlbiBjaGFuZ2VzIGV4cG9zdXJlLiBUaGlzIGxlYWRzCisgICB0byBhIG11Y2ggbW9yZSBzdGFibGUgaW1hZ2UgdGhlbiB1c2luZyB0aGUga25lZSBhbGdvcml0aG0gd2hpY2ggYXQKKyAgIGNlcnRhaW4gcG9pbnRzIG9mIHRoZSBrbmVlIGdyYXBoIHdpbGwgb25seSB0cnkgdG8gYWRqdXN0IGV4cG9zdXJlLAorICAgd2hpY2ggbGVhZHMgdG8gb3NjaWxhdGluZyBhcyBvbmUgZXhwb3N1cmUgc3RlcCBpcyBodWdlLgorCisgICBOb3RlIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZCBzdHJ1Y3QgZm9yIHRoZSBjYW0gaW4gcXVlc3Rpb24gaGFzCisgICBleHBfdG9vX2hpZ2hfY250IGFuZCBleHBfdG9vX2hpZ2hfY250IGludCBtZW1iZXJzIGZvciB1c2UgYnkgdGhpcyBmdW5jdGlvbi4KKworICAgUmV0dXJucyAwIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLCAxIGlmIHRoZSBnYWluIGFuZCBvciBleHBvc3VyZSBzZXR0aW5ncworICAgd2hlcmUgY2hhbmdlZC4gKi8KK3N0YXRpYyBpbnQgZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJaW50IGF2Z19sdW0sIGludCBkZXNpcmVkX2F2Z19sdW0sIGludCBkZWFkem9uZSkKK3sKKwlpbnQgaSwgc3RlcHMsIGdhaW4sIG9yaWdfZ2FpbiwgZXhwb3N1cmUsIG9yaWdfZXhwb3N1cmU7CisJaW50IGdhaW5fbG93LCBnYWluX2hpZ2g7CisJY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKKwkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOworCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKKwkJCWV4cG9zdXJlX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKKwl9CisJaWYgKCFnYWluX2N0cmwgfHwgIWV4cG9zdXJlX2N0cmwpIHsKKwkJUERFQlVHKERfRVJSLCAiRXJyb3I6IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4gIgorCQkJImNhbGxlZCBvbiBjYW0gd2l0aG91dCBnYWluIG9yIGV4cG9zdXJlIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAorCSAgICBleHBvc3VyZV9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZXhwb3N1cmUpKQorCQlyZXR1cm4gMDsKKworCW9yaWdfZ2FpbiA9IGdhaW47CisJb3JpZ19leHBvc3VyZSA9IGV4cG9zdXJlOworCWdhaW5fbG93ID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogMjsKKwlnYWluX2xvdyArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJZ2Fpbl9oaWdoID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogNDsKKwlnYWluX2hpZ2ggKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOworCisJLyogSWYgd2UgYXJlIG9mIGEgbXVsdGlwbGUgb2YgZGVhZHpvbmUsIGRvIG11bHRpcGxlIHN0ZXBzIHRvIHJlYWNoIHRoZQorCSAgIGRlc2lyZWQgbHVtaW5hdGlvbiBmYXN0ICh3aXRoIHRoZSByaXNjIG9mIGEgc2xpZ2h0IG92ZXJzaG9vdCkgKi8KKwlzdGVwcyA9IChkZXNpcmVkX2F2Z19sdW0gLSBhdmdfbHVtKSAvIGRlYWR6b25lOworCisJUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBsdW06ICVkLCBkZXNpcmVkOiAlZCwgc3RlcHM6ICVkIiwKKwkJYXZnX2x1bSwgZGVzaXJlZF9hdmdfbHVtLCBzdGVwcyk7CisKKwlpZiAoKGdhaW4gKyBzdGVwcykgPiBnYWluX2hpZ2ggJiYKKwkgICAgc2QtPmV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkgeworCQlnYWluID0gZ2Fpbl9oaWdoOworCQlzZC0+ZXhwX3Rvb19sb3dfY250Kys7CisJfSBlbHNlIGlmICgoZ2FpbiArIHN0ZXBzKSA8IGdhaW5fbG93ICYmCisJCSAgIHNkLT5leHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pIHsKKwkJZ2FpbiA9IGdhaW5fbG93OworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCsrOworCX0gZWxzZSB7CisJCWdhaW4gKz0gc3RlcHM7CisJCWlmIChnYWluID4gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtKQorCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bTsKKwkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkKKwkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKKwkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CisJfQorCisJaWYgKHNkLT5leHBfdG9vX2hpZ2hfY250ID4gMykgeworCQlleHBvc3VyZS0tOworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJfSBlbHNlIGlmIChzZC0+ZXhwX3Rvb19sb3dfY250ID4gMykgeworCQlleHBvc3VyZSsrOworCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKKwl9CisKKwlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKKwkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKKwkJcmV0dmFsID0gMTsKKwl9CisJaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKKwkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOworCQlyZXR2YWwgPSAxOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggYzk4YjVkNi4uMTlmZTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTQ1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKQEAgLTAsMCArMSwyMDIyIEBACisvKgorICogY3BpYSBDUGlBICgxKSBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGFkYXB0ZWQgZnJvbSB0aGUgaW4ga2VybmVsIHY0bDEgY3BpYSBkcml2ZXIgd2hpY2ggaXMgOgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFBldGVyIFByZWdsZXIKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFNjb3R0IEouIEJlcnRpbgorICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgU1RNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJjcGlhMSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZ29lZGVAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmlzaW9uIENQaUEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogY29uc3RhbnQgdmFsdWUncyAqLworI2RlZmluZSBNQUdJQ18wCQkweDE5CisjZGVmaW5lIE1BR0lDXzEJCTB4NjgKKyNkZWZpbmUgREFUQV9JTgkJMHhDMAorI2RlZmluZSBEQVRBX09VVAkweDQwCisjZGVmaW5lIFZJREVPU0laRV9RQ0lGCTAJLyogMTc2eDE0NCAqLworI2RlZmluZSBWSURFT1NJWkVfQ0lGCTEJLyogMzUyeDI4OCAqLworI2RlZmluZSBTVUJTQU1QTEVfNDIwCTAKKyNkZWZpbmUgU1VCU0FNUExFXzQyMgkxCisjZGVmaW5lIFlVVk9SREVSX1lVWVYJMAorI2RlZmluZSBZVVZPUkRFUl9VWVZZCTEKKyNkZWZpbmUgTk9UX0NPTVBSRVNTRUQJMAorI2RlZmluZSBDT01QUkVTU0VECTEKKyNkZWZpbmUgTk9fREVDSU1BVElPTgkwCisjZGVmaW5lIERFQ0lNQVRJT05fRU5BQgkxCisjZGVmaW5lIEVPSQkJMHhmZgkvKiBFbmQgT2YgSW1hZ2UgKi8KKyNkZWZpbmUgRU9MCQkweGZkCS8qIEVuZCBPZiBMaW5lICovCisjZGVmaW5lIEZSQU1FX0hFQURFUl9TSVpFCTY0CisKKy8qIEltYWdlIGdyYWIgbW9kZXMgKi8KKyNkZWZpbmUgQ1BJQV9HUkFCX1NJTkdMRQkwCisjZGVmaW5lIENQSUFfR1JBQl9DT05USU5FT1VTCTEKKworLyogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAqLworI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX05PTkUJMAorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX0FVVE8JMQorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX01BTlVBTAkyCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFkgICAgICAgICAwCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURSAgICAgICAxCisKKy8qIFJldHVybiBvZmZzZXRzIGZvciBHZXRDYW1lcmFTdGF0ZSAqLworI2RlZmluZSBTWVNURU1TVEFURQkwCisjZGVmaW5lIEdSQUJTVEFURQkxCisjZGVmaW5lIFNUUkVBTVNUQVRFCTIKKyNkZWZpbmUgRkFUQUxFUlJPUgkzCisjZGVmaW5lIENNREVSUk9SCTQKKyNkZWZpbmUgREVCVUdGTEFHUwk1CisjZGVmaW5lIFZQU1RBVFVTCTYKKyNkZWZpbmUgRVJST1JDT0RFCTcKKworLyogU3lzdGVtU3RhdGUgKi8KKyNkZWZpbmUgVU5JTklUSUFMSVNFRF9TVEFURQkwCisjZGVmaW5lIFBBU1NfVEhST1VHSF9TVEFURQkxCisjZGVmaW5lIExPX1BPV0VSX1NUQVRFCQkyCisjZGVmaW5lIEhJX1BPV0VSX1NUQVRFCQkzCisjZGVmaW5lIFdBUk1fQk9PVF9TVEFURQkJNAorCisvKiBHcmFiU3RhdGUgKi8KKyNkZWZpbmUgR1JBQl9JRExFCQkwCisjZGVmaW5lIEdSQUJfQUNUSVZFCQkxCisjZGVmaW5lIEdSQUJfRE9ORQkJMgorCisvKiBTdHJlYW1TdGF0ZSAqLworI2RlZmluZSBTVFJFQU1fTk9UX1JFQURZCTAKKyNkZWZpbmUgU1RSRUFNX1JFQURZCQkxCisjZGVmaW5lIFNUUkVBTV9PUEVOCQkyCisjZGVmaW5lIFNUUkVBTV9QQVVTRUQJCTMKKyNkZWZpbmUgU1RSRUFNX0ZJTklTSEVECQk0CisKKy8qIEZhdGFsIEVycm9yLCBDbWRFcnJvciwgYW5kIERlYnVnRmxhZ3MgKi8KKyNkZWZpbmUgQ1BJQV9GTEFHCSAgMQorI2RlZmluZSBTWVNURU1fRkxBRwkgIDIKKyNkZWZpbmUgSU5UX0NUUkxfRkxBRwkgIDQKKyNkZWZpbmUgUFJPQ0VTU19GTEFHCSAgOAorI2RlZmluZSBDT01fRkxBRwkgMTYKKyNkZWZpbmUgVlBfQ1RSTF9GTEFHCSAzMgorI2RlZmluZSBDQVBUVVJFX0ZMQUcJIDY0CisjZGVmaW5lIERFQlVHX0ZMQUcJMTI4CisKKy8qIFZQU3RhdHVzICovCisjZGVmaW5lIFZQX1NUQVRFX09LCQkJMHgwMAorCisjZGVmaW5lIFZQX1NUQVRFX0ZBSUxFRF9WSURFT0lOSVQJMHgwMQorI2RlZmluZSBWUF9TVEFURV9GQUlMRURfQUVDQUNCSU5JVAkweDAyCisjZGVmaW5lIFZQX1NUQVRFX0FFQ19NQVgJCTB4MDQKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX0JNQVgJCTB4MDgKKworI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1JTgkJMHgxMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01JTgkJMHgyMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1BWAkJMHg0MAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01BWAkJMHg4MAorCisvKiBkZWZhdWx0IChtaW5pbXVtKSBjb21wZW5zYXRpb24gdmFsdWVzICovCisjZGVmaW5lIENPTVBfUkVEICAgICAgICAyMjAKKyNkZWZpbmUgQ09NUF9HUkVFTjEgICAgIDIxNAorI2RlZmluZSBDT01QX0dSRUVOMiAgICAgQ09NUF9HUkVFTjEKKyNkZWZpbmUgQ09NUF9CTFVFICAgICAgIDIzMAorCisvKiBleHBvc3VyZSBzdGF0dXMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfVkVSWV9MSUdIVCAwCisjZGVmaW5lIEVYUE9TVVJFX0xJR0hUICAgICAgMQorI2RlZmluZSBFWFBPU1VSRV9OT1JNQUwgICAgIDIKKyNkZWZpbmUgRVhQT1NVUkVfREFSSyAgICAgICAzCisjZGVmaW5lIEVYUE9TVVJFX1ZFUllfREFSSyAgNAorCisjZGVmaW5lIENQSUFfTU9EVUxFX0NQSUEJCQkoMCA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9TWVNURU0JCQkoMSA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9WUF9DVFJMCQkJKDUgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfQ0FQVFVSRQkJCSg2IDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX0RFQlVHCQkJKDcgPDwgNSkKKworI2RlZmluZSBJTlBVVCAoREFUQV9JTiA8PCA4KQorI2RlZmluZSBPVVRQVVQgKERBVEFfT1VUIDw8IDgpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQJCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0hpUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0xvUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1N1c3BlbmQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1Bhc3NUaHJvdWdoCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDEwKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkVkNSZWdzCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cwkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRCYXVkUmF0ZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRJREFUQQkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlSURBVEEJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2VuZXJpY0NhbGwJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNTdGFydAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDU3RvcAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDExKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDV3JpdGUJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1JlYWQJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEzKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb24JKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZXNldEZyYW1lQ291bnRlcgkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbG91clBhcmFtcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRWUERlZmF1bHRzCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEFwY29yCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtcwkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvck1hdHJpeAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQ29sb3VyQmFycwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAyNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MJCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlVlBSZWcJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMzEpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJGcmFtZQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfVXBsb2FkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0R3JhYk1vZGUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSW5pdFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9GaW5pU3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0U3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0VuZFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGb3JtYXQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFJPSQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0IChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRZVVZUaHJlc2gJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zIChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9EaXNjYXJkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJSZXNldAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNSkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfT3V0cHV0UlMyMzIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Fib3J0UHJvY2VzcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RHJhbVBhZ2UJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0RHJhbVVwbG9hZAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU3RhcnREdW1teUR0cmVhbQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQWJvcnRTdHJlYW0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Rvd25sb2FkRFJBTQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX051bGwJCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDExKQorCisjZGVmaW5lIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUiAxNQorCisvKiBDb25zdGFudHMgZm9yIGF1dG9tYXRpYyBmcmFtZSByYXRlIGFkanVzdG1lbnQgKi8KKyNkZWZpbmUgTUFYX0VYUCAgICAgICAzMDIKKyNkZWZpbmUgTUFYX0VYUF8xMDIgICAyNTUKKyNkZWZpbmUgTE9XX0VYUCAgICAgICAxNDAKKyNkZWZpbmUgVkVSWV9MT1dfRVhQICAgNzAKKyNkZWZpbmUgVEMgICAgICAgICAgICAgOTQKKyNkZWZpbmUJRVhQX0FDQ19EQVJLICAgNTAKKyNkZWZpbmUJRVhQX0FDQ19MSUdIVCAgOTAKKyNkZWZpbmUgSElHSF9DT01QXzEwMiAxNjAKKyNkZWZpbmUgTUFYX0NPTVAgICAgICAyMzkKKyNkZWZpbmUgREFSS19USU1FICAgICAgIDMKKyNkZWZpbmUgTElHSFRfVElNRSAgICAgIDMKKworI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgsIHkpIChzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09ICh4KSAmJiBcCisJCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQorCisvKiBEZXZlbG9wZXIncyBHdWlkZSBUYWJsZSA1IHAgMy0zNAorICogaW5kZXhlZCBieSBbbWFpbnNdW3NlbnNvckZwcy5iYXNlcmF0ZV1bc2Vuc29yRnBzLmRpdmlzb3JdKi8KK3N0YXRpYyB1OCBmbGlja2VyX2p1bXBzWzJdWzJdWzRdID0KK3sgeyB7IDc2LCAzOCwgMTksIDkgfSwgeyA5MiwgNDYsIDIzLCAxMSB9IH0sCisgIHsgeyA2NCwgMzIsIDE2LCA4IH0sIHsgNzYsIDM4LCAxOSwgOX0gfQorfTsKKworc3RydWN0IGNhbV9wYXJhbXMgeworCXN0cnVjdCB7CisJCXU4IGZpcm13YXJlVmVyc2lvbjsKKwkJdTggZmlybXdhcmVSZXZpc2lvbjsKKwkJdTggdmNWZXJzaW9uOworCQl1OCB2Y1JldmlzaW9uOworCX0gdmVyc2lvbjsKKwlzdHJ1Y3QgeworCQl1MTYgdmVuZG9yOworCQl1MTYgcHJvZHVjdDsKKwkJdTE2IGRldmljZVJldmlzaW9uOworCX0gcG5wSUQ7CisJc3RydWN0IHsKKwkJdTggdnBWZXJzaW9uOworCQl1OCB2cFJldmlzaW9uOworCQl1MTYgY2FtZXJhSGVhZElEOworCX0gdnBWZXJzaW9uOworCXN0cnVjdCB7CisJCXU4IHN5c3RlbVN0YXRlOworCQl1OCBncmFiU3RhdGU7CisJCXU4IHN0cmVhbVN0YXRlOworCQl1OCBmYXRhbEVycm9yOworCQl1OCBjbWRFcnJvcjsKKwkJdTggZGVidWdGbGFnczsKKwkJdTggdnBTdGF0dXM7CisJCXU4IGVycm9yQ29kZTsKKwl9IHN0YXR1czsKKwlzdHJ1Y3QgeworCQl1OCBicmlnaHRuZXNzOworCQl1OCBjb250cmFzdDsKKwkJdTggc2F0dXJhdGlvbjsKKwl9IGNvbG91clBhcmFtczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluTW9kZTsKKwkJdTggZXhwTW9kZTsKKwkJdTggY29tcE1vZGU7CisJCXU4IGNlbnRyZVdlaWdodDsKKwkJdTggZ2FpbjsKKwkJdTggZmluZUV4cDsKKwkJdTggY29hcnNlRXhwTG87CisJCXU4IGNvYXJzZUV4cEhpOworCQl1OCByZWRDb21wOworCQl1OCBncmVlbjFDb21wOworCQl1OCBncmVlbjJDb21wOworCQl1OCBibHVlQ29tcDsKKwl9IGV4cG9zdXJlOworCXN0cnVjdCB7CisJCXU4IGJhbGFuY2VNb2RlOworCQl1OCByZWRHYWluOworCQl1OCBncmVlbkdhaW47CisJCXU4IGJsdWVHYWluOworCX0gY29sb3VyQmFsYW5jZTsKKwlzdHJ1Y3QgeworCQl1OCBkaXZpc29yOworCQl1OCBiYXNlcmF0ZTsKKwl9IHNlbnNvckZwczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluMTsKKwkJdTggZ2FpbjI7CisJCXU4IGdhaW40OworCQl1OCBnYWluODsKKwl9IGFwY29yOworCXN0cnVjdCB7CisJCXU4IGRpc2FibGVkOworCQl1OCBmbGlja2VyTW9kZTsKKwkJdTggY29hcnNlSnVtcDsKKwkJdTggYWxsb3dhYmxlT3ZlckV4cG9zdXJlOworCX0gZmxpY2tlckNvbnRyb2w7CisJc3RydWN0IHsKKwkJdTggZ2FpbjE7CisJCXU4IGdhaW4yOworCQl1OCBnYWluNDsKKwkJdTggZ2Fpbjg7CisJfSB2bE9mZnNldDsKKwlzdHJ1Y3QgeworCQl1OCBtb2RlOworCQl1OCBkZWNpbWF0aW9uOworCX0gY29tcHJlc3Npb247CisJc3RydWN0IHsKKwkJdTggZnJUYXJnZXRpbmc7CisJCXU4IHRhcmdldEZSOworCQl1OCB0YXJnZXRROworCX0gY29tcHJlc3Npb25UYXJnZXQ7CisJc3RydWN0IHsKKwkJdTggeVRocmVzaG9sZDsKKwkJdTggdXZUaHJlc2hvbGQ7CisJfSB5dXZUaHJlc2hvbGQ7CisJc3RydWN0IHsKKwkJdTggaHlzdGVyZXNpczsKKwkJdTggdGhyZXNoTWF4OworCQl1OCBzbWFsbFN0ZXA7CisJCXU4IGxhcmdlU3RlcDsKKwkJdTggZGVjaW1hdGlvbkh5c3RlcmVzaXM7CisJCXU4IGZyRGlmZlN0ZXBUaHJlc2g7CisJCXU4IHFEaWZmU3RlcFRocmVzaDsKKwkJdTggZGVjaW1hdGlvblRocmVzaE1vZDsKKwl9IGNvbXByZXNzaW9uUGFyYW1zOworCXN0cnVjdCB7CisJCXU4IHZpZGVvU2l6ZTsJCS8qIENJRi9RQ0lGICovCisJCXU4IHN1YlNhbXBsZTsKKwkJdTggeXV2T3JkZXI7CisJfSBmb3JtYXQ7CisJc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlbCBRWDMgc3BlY2lmaWMgZGF0YSAqLworCQl1OCBxeDNfZGV0ZWN0ZWQ7ICAgICAgICAvKiBhIFFYMyBpcyBwcmVzZW50ICovCisJCXU4IHRvcGxpZ2h0OyAgICAgICAgICAgIC8qIHRvcCBsaWdodCBsaXQgLCBSL1cgKi8KKwkJdTggYm90dG9tbGlnaHQ7ICAgICAgICAgLyogYm90dG9tIGxpZ2h0IGxpdCwgUi9XICovCisJCXU4IGJ1dHRvbjsgICAgICAgICAgICAgIC8qIHNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkIChSL08pICovCisJCXU4IGNyYWRsZWQ7ICAgICAgICAgICAgIC8qIG1pY3Jvc2NvcGUgaXMgaW4gY3JhZGxlIChSL08pICovCisJfSBxeDM7CisJc3RydWN0IHsKKwkJdTggY29sU3RhcnQ7CQkvKiBza2lwIGZpcnN0IDgqY29sU3RhcnQgcGl4ZWxzICovCisJCXU4IGNvbEVuZDsJCS8qIGZpbmlzaCBhdCA4KmNvbEVuZCBwaXhlbHMgKi8KKwkJdTggcm93U3RhcnQ7CQkvKiBza2lwIGZpcnN0IDQqcm93U3RhcnQgbGluZXMgKi8KKwkJdTggcm93RW5kOwkJLyogZmluaXNoIGF0IDQqcm93RW5kIGxpbmVzICovCisJfSByb2k7CisJdTggZWNwVGltaW5nOworCXU4IHN0cmVhbVN0YXJ0TGluZTsKK307CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXN0cnVjdCBjYW1fcGFyYW1zIHBhcmFtczsJCS8qIGNhbWVyYSBzZXR0aW5ncyAqLworCisJYXRvbWljX3QgY2FtX2V4cG9zdXJlOworCWF0b21pY190IGZwczsKKwlpbnQgZXhwb3N1cmVfY291bnQ7CisJdTggZXhwb3N1cmVfc3RhdHVzOworCXU4IG1haW5zRnJlcTsJCQkJLyogMCA9IDUwaHosIDEgPSA2MGh6ICovCisJdTggZmlyc3RfZnJhbWU7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJCS5mbGFncyA9IDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDk2LAorCQkuc3RlcCAgICA9IDgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiA0OAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSQVRJT05fREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJBVElPTl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRzYXR1cmF0aW9uLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2F0dXJhdGlvbiwKKwl9LAorCXsKKwkJeworCQkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAxCisJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkJLmdldCA9IHNkX2dldGZyZXEsCisJfSwKKwl7CisJCXsKKyNkZWZpbmUgVjRMMl9DSURfQ09NUF9UQVJHRVQgVjRMMl9DSURfUFJJVkFURV9CQVNFCisJCQkuaWQJID0gVjRMMl9DSURfQ09NUF9UQVJHRVQsCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCQkubmFtZSAgICA9ICJDb21wcmVzc2lvbiBUYXJnZXQiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxLAorCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT01QX1RBUkdFVF9ERUYgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWQorCQkJLmRlZmF1bHRfdmFsdWUgPSBDT01QX1RBUkdFVF9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRjb21wdGFyZ2V0LAorCQkuZ2V0ID0gc2RfZ2V0Y29tcHRhcmdldCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9kZVtdID0geworCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS8qIFRoZSBzaXplaW1hZ2UgaXMgdHJpYWwgYW5kIGVycm9yLCBhcyB3aXRoIGxvdyBmcmFtZXJhdGVzCisJCSAgIHRoZSBjYW1lcmEgd2lsbCBwYWQgb3V0IHVzYiBmcmFtZXMsIG1ha2luZyB0aGUgaW1hZ2UKKwkJICAgZGF0YSBsYXJnZXIgdGhlbiBzdHJpY3RseSBuZWNlc3NhcnkgKi8KKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDY1NTM2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzIsCisJCS5zaXplaW1hZ2UgPSA2NTUzNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMjYyMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAyNjIxNDQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdlbmVyYWwgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3BpYV91c2JfdHJhbnNmZXJDbWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqY29tbWFuZCkKK3sKKwl1OCByZXF1ZXN0dHlwZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgcmV0LCBkYXRhYnl0ZXMgPSBjb21tYW5kWzZdIHwgKGNvbW1hbmRbN10gPDwgOCk7CisJLyogU29tZXRpbWVzIHdlIHNlZSBzcHVyaW91cyBFUElQRSBlcnJvcnMgKi8KKwlpbnQgcmV0cmllcyA9IDM7CisKKwlpZiAoY29tbWFuZFswXSA9PSBEQVRBX0lOKSB7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOworCQlyZXF1ZXN0dHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSBpZiAoY29tbWFuZFswXSA9PSBEQVRBX09VVCkgeworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKKwkJcmVxdWVzdHR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSB7CisJCVBERUJVRyhEX0VSUiwgIlVuZXhwZWN0ZWQgZmlyc3QgYnl0ZSBvZiBjb21tYW5kOiAleCIsCisJCSAgICAgICBjb21tYW5kWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCityZXRyeToKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCisJCQkgICAgICBjb21tYW5kWzFdLAorCQkJICAgICAgcmVxdWVzdHR5cGUsCisJCQkgICAgICBjb21tYW5kWzJdIHwgKGNvbW1hbmRbM10gPDwgOCksCisJCQkgICAgICBjb21tYW5kWzRdIHwgKGNvbW1hbmRbNV0gPDwgOCksCisJCQkgICAgICBnc3BjYV9kZXYtPnVzYl9idWYsIGRhdGFieXRlcywgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAidXNiX2NvbnRyb2xfbXNnICUwMngsIGVycm9yICVkIiwgY29tbWFuZFsxXSwKKwkJICAgICAgIHJldCk7CisKKwlpZiAocmV0ID09IC1FUElQRSAmJiByZXRyaWVzID4gMCkgeworCQlyZXRyaWVzLS07CisJCWdvdG8gcmV0cnk7CisJfQorCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IDA7Cit9CisKKy8qIHNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLworc3RhdGljIGludCBkb19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCSAgICAgIHU4IGEsIHU4IGIsIHU4IGMsIHU4IGQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIGRhdGFzaXplOworCXU4IGNtZFs4XTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1czoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmU6CisJCWRhdGFzaXplID0gODsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZFZDUmVnczoKKwkJZGF0YXNpemUgPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhc2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKworCWNtZFswXSA9IGNvbW1hbmQgPj4gODsKKwljbWRbMV0gPSBjb21tYW5kICYgMHhmZjsKKwljbWRbMl0gPSBhOworCWNtZFszXSA9IGI7CisJY21kWzRdID0gYzsKKwljbWRbNV0gPSBkOworCWNtZFs2XSA9IGRhdGFzaXplOworCWNtZFs3XSA9IDA7CisKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjVmVyc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpOworCQlzZC0+cGFyYW1zLnBucElELnByb2R1Y3QgPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdIHwgKGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA8PCA4KTsKKwkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbiA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbNF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXM6CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN0cmVhbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5jbWRFcnJvciA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZGVidWdGbGFncyA9IGdzcGNhX2Rldi0+dXNiX2J1Zls1XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSA9IGdzcGNhX2Rldi0+dXNiX2J1Zls3XTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzNdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlOgorCQlzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJsdWVHYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzVdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbN107CisJCWJyZWFrOworCisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQkJYnJlYWs7CisJCS8qIHRlc3QgYnV0dG9uIHByZXNzICovCisJCXNkLT5wYXJhbXMucXgzLmJ1dHRvbiA9ICgoZ3NwY2FfZGV2LT51c2JfYnVmWzFdICYgMHgwMikgPT0gMCk7CisJCWlmIChzZC0+cGFyYW1zLnF4My5idXR0b24pIHsKKwkJCS8qIGJ1dHRvbiBwcmVzc2VkIC0gdW5sb2NrIHRoZSBsYXRjaCAqLworCQkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwKKwkJCQkgICAzLCAweERGLCAweERGLCAwKTsKKwkJCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsCisJCQkJICAgMywgMHhGRiwgMHhGRiwgMCk7CisJCX0KKworCQkvKiB0ZXN0IHdoZXRoZXIgbWljcm9zY29wZSBpcyBjcmFkbGVkICovCisJCXNkLT5wYXJhbXMucXgzLmNyYWRsZWQgPSAoKGdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDB4NDApID09IDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIGNhbWVyYSB3aXRoIGFuIGFkZGl0aW9uYWwgZGF0YSB0cmFuc2FjdGlvbiAqLworc3RhdGljIGludCBkb19jb21tYW5kX2V4dGVuZGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCQkgICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCwKKwkJCSAgICAgICB1OCBlLCB1OCBmLCB1OCBnLCB1OCBoLAorCQkJICAgICAgIHU4IGksIHU4IGosIHU4IGssIHU4IGwpCit7CisJdTggY21kWzhdOworCisJY21kWzBdID0gY29tbWFuZCA+PiA4OworCWNtZFsxXSA9IGNvbW1hbmQgJiAweGZmOworCWNtZFsyXSA9IGE7CisJY21kWzNdID0gYjsKKwljbWRbNF0gPSBjOworCWNtZFs1XSA9IGQ7CisJY21kWzZdID0gODsKKwljbWRbN10gPSAwOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IGU7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gZjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBnOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IGg7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzRdID0gaTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbNV0gPSBqOworCWdzcGNhX2Rldi0+dXNiX2J1Zls2XSA9IGs7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gbDsKKworCXJldHVybiBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7Cit9CisKKy8qICBmaW5kX292ZXJfZXhwb3N1cmUKKyAqICBGaW5kcyBhIHN1aXRhYmxlIHZhbHVlIG9mIE92ZXJFeHBvc3VyZSBmb3IgdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqICBTb21lIGNhbGN1bGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhpcyB2YWx1ZSBjaGFuZ2VzIHdpdGggdGhlIGJyaWdodG5lc3MKKyAqICBzZXQgd2l0aCBTZXRDb2xvdXJQYXJhbWV0ZXJzCisgKgorICogIFBhcmFtZXRlcnM6IEJyaWdodG5lc3MgLSBsYXN0IGJyaWdodG5lc3MgdmFsdWUgc2V0IHdpdGggU2V0Q29sb3VyUGFyYW1ldGVycworICoKKyAqICBSZXR1cm5zOiBPdmVyRXhwb3N1cmUgdmFsdWUgdG8gdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqLworI2RlZmluZSBGTElDS0VSX01BWF9FWFBPU1VSRSAgICAgICAgICAgICAgICAgICAgMjUwCisjZGVmaW5lIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUgICAgICAgICAxNDYKKyNkZWZpbmUgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UICAgICAgICAgICAgIDU5CitzdGF0aWMgaW50IGZpbmRfb3Zlcl9leHBvc3VyZShpbnQgYnJpZ2h0bmVzcykKK3sKKwlpbnQgTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlLCBPdmVyRXhwb3N1cmU7CisKKwlNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPSBGTElDS0VSX01BWF9FWFBPU1VSRSAtIGJyaWdodG5lc3MgLQorCQkJCSAgIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVDsKKworCWlmIChNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPCBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFKQorCQlPdmVyRXhwb3N1cmUgPSBNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmU7CisJZWxzZQorCQlPdmVyRXhwb3N1cmUgPSBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFOworCisJcmV0dXJuIE92ZXJFeHBvc3VyZTsKK30KKyN1bmRlZiBGTElDS0VSX01BWF9FWFBPU1VSRQorI3VuZGVmIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUKKyN1bmRlZiBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQKKworLyogaW5pdGlhbGlzZSBjYW1fZGF0YSBzdHJ1Y3R1cmUgICovCitzdGF0aWMgdm9pZCByZXNldF9jYW1lcmFfcGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcyA9ICZzZC0+cGFyYW1zOworCisJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSB0aGUgZGVmYXVsdHMgZnJvbQorCSAqICJTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQ1BpQSBDYW1lcmFzIi4gIEFueSBjaGFuZ2VzCisJICogdG8gdGhlIGRlZmF1bHRzIGFyZSBub3RlZCBpbiBjb21tZW50cy4gKi8KKwlwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiA9IFNBVFVSQVRJT05fREVGOworCXBhcmFtcy0+ZXhwb3N1cmUuZ2Fpbk1vZGUgPSA0OworCXBhcmFtcy0+ZXhwb3N1cmUuZXhwTW9kZSA9IDI7CQkvKiBBRUMgKi8KKwlwYXJhbXMtPmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKKwlwYXJhbXMtPmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDE7CisJcGFyYW1zLT5leHBvc3VyZS5nYWluID0gMDsKKwlwYXJhbXMtPmV4cG9zdXJlLmZpbmVFeHAgPSAwOworCXBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwTG8gPSAxODU7CisJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IDA7CisJcGFyYW1zLT5leHBvc3VyZS5yZWRDb21wID0gQ09NUF9SRUQ7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJcGFyYW1zLT5leHBvc3VyZS5ibHVlQ29tcCA9IENPTVBfQkxVRTsKKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPSAyOwkvKiBBQ0IgKi8KKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IDMyOworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSA2OworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IDkyOworCXBhcmFtcy0+YXBjb3IuZ2FpbjEgPSAweDE4OworCXBhcmFtcy0+YXBjb3IuZ2FpbjIgPSAweDE2OworCXBhcmFtcy0+YXBjb3IuZ2FpbjQgPSAweDI0OworCXBhcmFtcy0+YXBjb3IuZ2FpbjggPSAweDM0OworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAwOworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbcGFyYW1zLT5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtwYXJhbXMtPnNlbnNvckZwcy5kaXZpc29yXTsKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9CisJCWZpbmRfb3Zlcl9leHBvc3VyZShwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW4xID0gMjA7CisJcGFyYW1zLT52bE9mZnNldC5nYWluMiA9IDI0OworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjQgPSAyNjsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW44ID0gMjY7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzID0gMzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnRocmVzaE1heCA9IDExOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwID0gMTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcyA9IDI7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoID0gNTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kID0gMjsKKwkvKiBFbmQgb2YgZGVmYXVsdCB2YWx1ZXMgZnJvbSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSAqLworCisJLyogU2V0IFNlbnNvciBGUFMgdG8gMTVmcHMuIFRoaXMgc2VlbXMgYmV0dGVyIHRoYW4gMzBmcHMKKwkgKiBmb3IgaW5kb29yIGxpZ2h0aW5nLiAqLworCXBhcmFtcy0+c2Vuc29yRnBzLmRpdmlzb3IgPSAxOworCXBhcmFtcy0+c2Vuc29yRnBzLmJhc2VyYXRlID0gMTsKKworCXBhcmFtcy0+eXV2VGhyZXNob2xkLnlUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisJcGFyYW1zLT55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPmZvcm1hdC5zdWJTYW1wbGUgPSBTVUJTQU1QTEVfNDIwOworCXBhcmFtcy0+Zm9ybWF0Lnl1dk9yZGVyID0gWVVWT1JERVJfWVVZVjsKKworCXBhcmFtcy0+Y29tcHJlc3Npb24ubW9kZSA9IENQSUFfQ09NUFJFU1NJT05fQVVUTzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uLmRlY2ltYXRpb24gPSBOT19ERUNJTUFUSU9OOworCisJcGFyYW1zLT5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IENPTVBfVEFSR0VUX0RFRjsKKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSID0gMTU7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEgPSA1OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPnF4My5xeDNfZGV0ZWN0ZWQgPSAwOworCXBhcmFtcy0+cXgzLnRvcGxpZ2h0ID0gMDsKKwlwYXJhbXMtPnF4My5ib3R0b21saWdodCA9IDA7CisJcGFyYW1zLT5xeDMuYnV0dG9uID0gMDsKKwlwYXJhbXMtPnF4My5jcmFkbGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRzdGF0dXMoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcykKK3sKKwlQREVCVUcoRF9QUk9CRSwgInN0YXR1czogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3lzdGVtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmdyYWJTdGF0ZSwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3RyZWFtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmZhdGFsRXJyb3IsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLmNtZEVycm9yLCBwYXJhbXMtPnN0YXR1cy5kZWJ1Z0ZsYWdzLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy52cFN0YXR1cywgcGFyYW1zLT5zdGF0dXMuZXJyb3JDb2RlKTsKK30KKworc3RhdGljIGludCBnb3RvX2xvd19wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9Mb1Bvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gTE9fUE9XRVJfU1RBVEUpIHsKKwkJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IFdBUk1fQk9PVF9TVEFURSkgeworCQkJUERFQlVHKERfRVJSLAorCQkJICAgICAgICJ1bmV4cGVjdGVkIHN0YXRlIGFmdGVyIGxvIHBvd2VyIGNtZDogJTAyeCIsCisJCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOworCQkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCVBERUJVRyhEX0NPTkYsICJjYW1lcmEgbm93IGluIExPVyBwb3dlciBzdGF0ZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvdG9faGlnaF9wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwX2ludGVycnVwdGlibGUoNDApOwkvKiB3aW5kb3dzIGRyaXZlciBkb2VzIGl0IHRvbyAqLworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gSElfUE9XRVJfU1RBVEUpIHsKKwkJUERFQlVHKERfRVJSLCAidW5leHBlY3RlZCBzdGF0ZSBhZnRlciBoaSBwb3dlciBjbWQ6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlQREVCVUcoRF9DT05GLCAiY2FtZXJhIG5vdyBpbiBISUdIIHBvd2VyIHN0YXRlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwkvKiBHZXRDUElBVmVyc2lvbiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb24sIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBHZXRQblBJRCAqLworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldFBuUElELCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBzYXZlX2NhbWVyYV9zdGF0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZSwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0Zm9ybWF0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0LAorCQkJIHNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSwKKwkJCSBzZC0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUsCisJCQkgc2QtPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRST0ksCisJCQkgIHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0LCBzZC0+cGFyYW1zLnJvaS5jb2xFbmQsCisJCQkgIHNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0LCBzZC0+cGFyYW1zLnJvaS5yb3dFbmQpOworfQorCitpbnQgY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAorCQkJICBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0YXBjb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRBcGNvciwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMSwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMiwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluNCwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluOCk7Cit9CisKK2ludCBjb21tYW5kX3NldHZsb2Zmc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjgpOworfQorCitpbnQgY29tbWFuZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kX2V4dGVuZGVkKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSwKKwkJCQkgIDEsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jZW50cmVXZWlnaHQsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlICE9IDEpIHsKKwkJcmV0ID0gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKKwkJCQkJICAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSwKKwkJCQkJICAwLCAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAorCQkJCQkgIDAsIDAsIDAsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbG91cmJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgMSwKKwkJCQkgc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2Fpbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAyKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAyLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAzKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0LAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDApOworfQorCitpbnQgY29tbWFuZF9zZXR5dXZ0cmVzaChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9ucGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsCisJCQkgICAgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zLAorCQkJICAgIDAsIDAsIDAsIDAsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMucURpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbiwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvbi5tb2RlLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24sIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRzZW5zb3JmcHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUywKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciwKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRmbGlja2VyY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RmxpY2tlckN0cmwsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCwKKwkJCSAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCisJCQkgIDApOworfQorCitpbnQgY29tbWFuZF9zZXRlY3B0aW1pbmcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZywKKwkJCSAgc2QtPnBhcmFtcy5lY3BUaW1pbmcsIDAsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9wYXVzZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRW5kU3RyZWFtQ2FwLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfcmVzdW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Jbml0U3RyZWFtQ2FwLAorCQkJICAwLCBzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGxpZ2h0cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIHAxLCBwMjsKKworCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQlyZXR1cm4gMDsKKworCXAxID0gKHNkLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID09IDApIDw8IDE7CisJcDIgPSAoc2QtPnBhcmFtcy5xeDMudG9wbGlnaHQgPT0gMCkgPDwgMzsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZywKKwkJCSAweDkwLCAweDhGLCAweDUwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsIDIsIDAsCisJCQkgIHAxIHwgcDIgfCAweEUwLCAwKTsKK30KKworc3RhdGljIGludCBzZXRfZmxpY2tlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBvbiwgaW50IGFwcGx5KQoreworCS8qIEV2ZXJ5dGhpbmcgaW4gaGVyZSBpcyBmcm9tIHRoZSBXaW5kb3dzIGRyaXZlciAqLworLyogZGVmaW5lIGZvciBjb21wZ2FpbiBjYWxjdWxhdGlvbiAqLworI2lmIDAKKyNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKKyAgICAodTgpICgoKChmbG9hdCkgYmFzZSAtIDEyOC4wKSAqICgoZmxvYXQpIGN1cmV4cCAvIChmbG9hdCkgbmV3ZXhwKSkgKyAxMjguNSkKKyNkZWZpbmUgRVhQX0ZST01fQ09NUChiYXNlY29tcCwgY3VyY29tcCwgY3VyZXhwKSBcCisgICAgKHUxNikoKGZsb2F0KWN1cmV4cCAqIChmbG9hdCkodTgpKGN1cmNvbXAgKyAxMjgpIC8gXAorICAgIChmbG9hdCkodTgpKGJhc2Vjb21wIC0gMTI4KSkKKyNlbHNlCisgIC8qIGVxdWl2YWxlbnQgZnVuY3Rpb25zIHdpdGhvdXQgZmxvYXRpbmcgcG9pbnQgbWF0aCAqLworI2RlZmluZSBDT01QR0FJTihiYXNlLCBjdXJleHAsIG5ld2V4cCkgXAorICAgICh1OCkoMTI4ICsgKCgodTMyKSgyKihiYXNlLTEyOCkqY3VyZXhwICsgbmV3ZXhwKSkgLyAoMiAqIG5ld2V4cCkpKQorI2RlZmluZSBFWFBfRlJPTV9DT01QKGJhc2Vjb21wLCBjdXJjb21wLCBjdXJleHApIFwKKyAgICAodTE2KSgoKHUzMikoY3VyZXhwICogKHU4KShjdXJjb21wICsgMTI4KSkgLyAodTgpKGJhc2Vjb21wIC0gMTI4KSkpCisjZW5kaWYKKworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY3VycmVudGV4cCA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gKworCQkJIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTY7CisJaW50IHJldCwgc3RhcnRleHA7CisKKwlpZiAob24pIHsKKwkJaW50IGNqID0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMTsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDA7CisJCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgIT0gMikgeworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID0gMjsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwkJY3VycmVudGV4cCA9IGN1cnJlbnRleHAgPDwgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPSAwOworCQkvKiByb3VuZCBkb3duIGN1cnJlbnQgZXhwb3N1cmUgdG8gbmVhcmVzdCB2YWx1ZSAqLworCQlzdGFydGV4cCA9IChjdXJyZW50ZXhwICsgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSAvIGNqOworCQlpZiAoc3RhcnRleHAgPCAxKQorCQkJc3RhcnRleHAgPSAxOworCQlzdGFydGV4cCA9IChzdGFydGV4cCAqIGNqKSAtIDE7CisJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQkJd2hpbGUgKHN0YXJ0ZXhwID4gTUFYX0VYUF8xMDIpCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCWVsc2UKKwkJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFApCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBzdGFydGV4cCAmIDB4ZmY7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBzdGFydGV4cCA+PiA4OworCQlpZiAoY3VycmVudGV4cCA+IHN0YXJ0ZXhwKSB7CisJCQlpZiAoY3VycmVudGV4cCA+ICgyICogc3RhcnRleHApKQorCQkJCWN1cnJlbnRleHAgPSAyICogc3RhcnRleHA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfUkVELCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4xLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4yLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0KKwkJCQlDT01QR0FJTihDT01QX0JMVUUsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJfSBlbHNlIHsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QX0dSRUVOMjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCX0KKwkJaWYgKEZJUk1XQVJFX1ZFUlNJT04oMSwgMikpCisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMDsKKwkJZWxzZQorCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSA9IDE7CisKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMSA9IDB4MTg7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjIgPSAweDE4OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW40ID0gMHgxNjsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluOCA9IDB4MTQ7CisJfSBlbHNlIHsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCQkvKiBBdmVyYWdlIGVxdWl2YWxlbnQgY29hcnNlIGZvciBlYWNoIGNvbXAgY2hhbm5lbCAqLworCQlzdGFydGV4cCA9IEVYUF9GUk9NX0NPTVAoQ09NUF9SRUQsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMSwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCArPSBFWFBfRlJPTV9DT01QKENPTVBfR1JFRU4yLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwICs9IEVYUF9GUk9NX0NPTVAoQ09NUF9CTFVFLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDI7CisJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFAgJiYgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJICAgICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgLSAxKSB7CisJCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDE7CisJCQkrK3NkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJfQorCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLCAyKSAmJiBzdGFydGV4cCA+IE1BWF9FWFBfMTAyKQorCQkJc3RhcnRleHAgPSBNQVhfRVhQXzEwMjsKKwkJaWYgKHN0YXJ0ZXhwID4gTUFYX0VYUCkKKwkJCXN0YXJ0ZXhwID0gTUFYX0VYUDsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IHN0YXJ0ZXhwICYgMHhmZjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAxOworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4xID0gMHgxODsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMiA9IDB4MTY7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjQgPSAweDI0OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW44ID0gMHgzNDsKKwl9CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMSA9IDIwOworCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIgPSAyNDsKKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40ID0gMjY7CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluOCA9IDI2OworCisJaWYgKGFwcGx5KSB7CisJCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gY29tbWFuZF9zZXRhcGNvcihnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjb21tYW5kX3NldHZsb2Zmc2V0KGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisjdW5kZWYgRVhQX0ZST01fQ09NUAorI3VuZGVmIENPTVBHQUlOCit9CisKKy8qIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZCBhZGp1c3QgdGhlIHNlbnNvciBmcmFtZSByYXRlIGlmIG5lZWRlZCAqLworc3RhdGljIHZvaWQgbW9uaXRvcl9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGV4cF9hY2MsIGJjb21wLCBnYWluLCBjb2Fyc2VMLCBjbWRbOF07CisJaW50IHJldCwgbGlnaHRfZXhwLCBkYXJrX2V4cCwgdmVyeV9kYXJrX2V4cDsKKwlpbnQgb2xkX2V4cG9zdXJlLCBuZXdfZXhwb3N1cmUsIGZyYW1lcmF0ZTsKKwlpbnQgc2V0ZnBzID0gMCwgc2V0ZXhwID0gMCwgc2V0ZmxpY2tlciA9IDA7CisKKwkvKiBnZXQgbmVjZXNzYXJ5IHN0YXRzIGFuZCByZWdpc3RlciBzZXR0aW5ncyBmcm9tIGNhbWVyYSAqLworCS8qIGRvX2NvbW1hbmQgY2FuJ3QgaGFuZGxlIHRoaXMsIHNvIGRvIGl0IG91cnNlbHZlcyAqLworCWNtZFswXSA9IENQSUFfQ09NTUFORF9SZWFkVlBSZWdzID4+IDg7CisJY21kWzFdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MgJiAweGZmOworCWNtZFsyXSA9IDMwOworCWNtZFszXSA9IDQ7CisJY21kWzRdID0gOTsKKwljbWRbNV0gPSA4OworCWNtZFs2XSA9IDg7CisJY21kWzddID0gMDsKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkgeworCQlQREVCVUcoRF9FUlIsICJSZWFkVlBSZWdzKDMwLDQsOSw4KSAtIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm47CisJfQorCWV4cF9hY2MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJYmNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJZ2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwljb2Fyc2VMID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCisJbGlnaHRfZXhwID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCisJCSAgICBUQyAtIDUwICsgRVhQX0FDQ19MSUdIVDsKKwlpZiAobGlnaHRfZXhwID4gMjU1KQorCQlsaWdodF9leHAgPSAyNTU7CisJZGFya19leHAgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKKwkJICAgVEMgLSA1MCAtIEVYUF9BQ0NfREFSSzsKKwlpZiAoZGFya19leHAgPCAwKQorCQlkYXJrX2V4cCA9IDA7CisJdmVyeV9kYXJrX2V4cCA9IGRhcmtfZXhwIC8gMjsKKworCW9sZF9leHBvc3VyZSA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTYgKworCQkgICAgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbzsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaW50IG1heF9jb21wID0gRklSTVdBUkVfVkVSU0lPTigxLCAyKSA/IE1BWF9DT01QIDoKKwkJCQkJCQlISUdIX0NPTVBfMTAyOworCQliY29tcCArPSAxMjg7CS8qIGRlY29kZSAqLworCQlpZiAoYmNvbXAgPj0gbWF4X2NvbXAgJiYgZXhwX2FjYyA8IGRhcmtfZXhwKSB7CisJCQkvKiBkYXJrICovCisJCQlpZiAoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKKwkJCQkvKiB2ZXJ5IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAob2xkX2V4cG9zdXJlIDw9IExPV19FWFAgfHwgZXhwX2FjYyA+IGxpZ2h0X2V4cCkgeworCQkJLyogbGlnaHQgKi8KKwkJCWlmIChvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7CisJCQkJLyogdmVyeSBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm90IGRhcmsgb3IgbGlnaHQgKi8KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmIChvbGRfZXhwb3N1cmUgPj0gTUFYX0VYUCAmJiBleHBfYWNjIDwgZGFya19leHApIHsKKwkJCS8qIGRhcmsgKi8KKwkJCWlmIChleHBfYWNjIDwgdmVyeV9kYXJrX2V4cCkgeworCQkJCS8qIHZlcnkgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChvbGRfZXhwb3N1cmUgPD0gTE9XX0VYUCB8fCBleHBfYWNjID4gbGlnaHRfZXhwKSB7CisJCQkvKiBsaWdodCAqLworCQkJaWYgKG9sZF9leHBvc3VyZSA8PSBWRVJZX0xPV19FWFApIHsKKwkJCQkvKiB2ZXJ5IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBub3QgZGFyayBvciBsaWdodCAqLworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJfQorCX0KKworCWZyYW1lcmF0ZSA9IGF0b21pY19yZWFkKCZzZC0+ZnBzKTsKKwlpZiAoZnJhbWVyYXRlID4gMzAgfHwgZnJhbWVyYXRlIDwgMSkKKwkJZnJhbWVyYXRlID0gMTsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSyB8fAorCQkgICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykgJiYKKwkJICAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBEQVJLX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJICAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPCAzKSB7CisKKwkJCS8qIGRhcmsgZm9yIHRvbyBsb25nICovCisJCQkrK3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQkJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJc2V0ZmxpY2tlciA9IDE7CisKKwkJCW5ld19leHBvc3VyZSA9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcC0xOworCQkJd2hpbGUgKG5ld19leHBvc3VyZSA8IG9sZF9leHBvc3VyZSAvIDIpCisJCQkJbmV3X2V4cG9zdXJlICs9CisJCQkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBuZXdfZXhwb3N1cmUgJiAweGZmOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OworCQkJc2V0ZXhwID0gMTsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBkZWNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKworCQl9IGVsc2UgaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQgfHwKKwkJCSAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKSAmJgorCQkJICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IExJR0hUX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJCSAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPiAwKSB7CisKKwkJCS8qIGxpZ2h0IGZvciB0b28gbG9uZyAqLworCQkJaW50IG1heF9leHAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsIDIpID8gTUFYX0VYUF8xMDIgOgorCQkJCQkJCSAgICAgICBNQVhfRVhQOworCQkJLS1zZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKwkJCXNldGZsaWNrZXIgPSAxOworCisJCQluZXdfZXhwb3N1cmUgPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKKwkJCXdoaWxlIChuZXdfZXhwb3N1cmUgPCAyICogb2xkX2V4cG9zdXJlICYmCisJCQkgICAgICAgbmV3X2V4cG9zdXJlICsKKwkJCSAgICAgICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPCBtYXhfZXhwKQorCQkJCW5ld19leHBvc3VyZSArPQorCQkJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gbmV3X2V4cG9zdXJlICYgMHhmZjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBuZXdfZXhwb3N1cmUgPj4gODsKKwkJCXNldGV4cCA9IDE7CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUksgfHwKKwkJICAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspICYmCisJCSAgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gREFSS19USU1FICogZnJhbWVyYXRlICYmCisJCSAgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yIDwgMykgeworCisJCQkvKiBkYXJrIGZvciB0b28gbG9uZyAqLworCQkJKytzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA+IDApIHsKKwkJCQktLXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJCQlzZXRleHAgPSAxOworCQkJfQorCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCisJCX0gZWxzZSBpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCB8fAorCQkJICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpICYmCisJCQkgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gTElHSFRfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkJICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKKworCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCisJCQktLXNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlIC0gMSkgeworCQkJCSsrc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQkJCXNldGV4cCA9IDE7CisJCQl9CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9CisKKwlpZiAoc2V0ZXhwKQorCQljb21tYW5kX3NldGV4cG9zdXJlKGdzcGNhX2Rldik7CisKKwlpZiAoc2V0ZnBzKQorCQljb21tYW5kX3NldHNlbnNvcmZwcyhnc3BjYV9kZXYpOworCisJaWYgKHNldGZsaWNrZXIpCisJCWNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBpZiBmbGlja2VyIGlzIHN3aXRjaGVkIG9mZiwgdGhpcyBmdW5jdGlvbiBzd2l0Y2hlcyBpdCBiYWNrIG9uLkl0IGNoZWNrcywKKyAgIGhvd2V2ZXIsIHRoYXQgY29uZGl0aW9ucyBhcmUgc3VpdGFibGUgYmVmb3JlIHJlc3RhcnRpbmcgaXQuCisgICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgZmlybXdhcmUgdmVyc2lvbiAxLjIuCisKKyAgIEl0IGFsc28gYWRqdXN0IHRoZSBjb2xvdXIgYmFsYW5jZSB3aGVuIGFuIGV4cG9zdXJlIHN0ZXAgaXMgZGV0ZWN0ZWQgLSBhcworICAgbG9uZyBhcyBmbGlja2VyIGlzIHJ1bm5pbmcKKyovCitzdGF0aWMgdm9pZCByZXN0YXJ0X2ZsaWNrZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY2FtX2V4cG9zdXJlLCBvbGRfZXhwOworCisJaWYgKCFGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQlyZXR1cm47CisKKwljYW1fZXhwb3N1cmUgPSBhdG9taWNfcmVhZCgmc2QtPmNhbV9leHBvc3VyZSk7CisKKwlpZiAoc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9PSAwIHx8CisJICAgIGNhbV9leHBvc3VyZSA9PSAwKQorCQlyZXR1cm47CisKKwlvbGRfZXhwID0gc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyArCisJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSoyNTY7CisJLyoKKwkgIHNlZSBob3cgZmFyIGF3YXkgY2FtZXJhIGV4cG9zdXJlIGlzIGZyb20gYSB2YWxpZAorCSAgZmxpY2tlciBleHBvc3VyZSB2YWx1ZQorCSovCisJY2FtX2V4cG9zdXJlICU9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwlpZiAoIXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgY2FtX2V4cG9zdXJlIDw9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCAtIDMpIHsKKwkJLyogRmxpY2tlciBjb250cm9sIGF1dG8tZGlzYWJsZWQgKi8KKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CisJfQorCisJaWYgKHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgb2xkX2V4cCA+IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCArCisJCSAgICAgIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUikgeworCQkvKiBleHBvc3VyZSBpcyBub3cgaGlnaCBlbm91Z2ggdG8gc3dpdGNoCisJCSAgIGZsaWNrZXIgY29udHJvbCBiYWNrIG9uICovCisJCXNldF9mbGlja2VyKGdzcGNhX2RldiwgMSwgMSk7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtOworCisJcmVzZXRfY2FtZXJhX3BhcmFtcyhnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJjcGlhIENQaUEgY2FtZXJhIGRldGVjdGVkICh2aWQvcGlkIDB4JTA0WDoweCUwNFgpIiwKKwkgICAgICAgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmNhbV9tb2RlID0gbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUobW9kZSk7CisKKwlzZF9zZXRmcmVxKGdzcGNhX2RldiwgRlJFUV9ERUYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcHJpdiwgcmV0OworCisJLyogU3RhcnQgdGhlIGNhbWVyYSBpbiBsb3cgcG93ZXIgbW9kZSAqLworCWlmIChnb3RvX2xvd19wb3dlcihnc3BjYV9kZXYpKSB7CisJCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBXQVJNX0JPT1RfU1RBVEUpIHsKKwkJCVBERUJVRyhEX0VSUiwgInVuZXhwZWN0ZWQgc3lzdGVtc3RhdGU6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJCXByaW50c3RhdHVzKCZzZC0+cGFyYW1zKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogRklYTUU6IHRoaXMgaXMganVzdCBkaXJ0eSB0cmlhbCBhbmQgZXJyb3IgKi8KKwkJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRGlzY2FyZEZyYW1lLAorCQkJCSAwLCAwLCAwLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ290b19sb3dfcG93ZXIoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiBkZXZlbG9wZXIncyBndWlkZSBwMy0yOCAqLworCisJLyogQ2hlY2sgdGhlIGZpcm13YXJlIHZlcnNpb24uICovCisJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9IDA7CisJZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oZ3NwY2FfZGV2KTsKKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgIm9ubHkgZmlybXdhcmUgdmVyc2lvbiAxIGlzIHN1cHBvcnRlZCAoZ290OiAlZCkiLAorCQkgICAgICAgc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEEgYnVnIGluIGZpcm13YXJlIDEtMDIgbGltaXRzIGdhaW5Nb2RlIHRvIDIgKi8KKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPD0gMiAmJgorCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID4gMikgeworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID0gMjsKKwl9CisKKwkvKiBzZXQgUVgzIGRldGVjdGVkIGZsYWcgKi8KKwlzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQgPSAoc2QtPnBhcmFtcy5wbnBJRC52ZW5kb3IgPT0gMHgwODEzICYmCisJCQkJICAgICAgIHNkLT5wYXJhbXMucG5wSUQucHJvZHVjdCA9PSAweDAwMDEpOworCisJLyogVGhlIGZhdGFsIGVycm9yIGNoZWNraW5nIHNob3VsZCBiZSBkb25lIGFmdGVyCisJICogdGhlIGNhbWVyYSBwb3dlcnMgdXAgKGRldmVsb3BlcidzIGd1aWRlIHAgMy0zOCkgKi8KKworCS8qIFNldCBzdHJlYW1TdGF0ZSBiZWZvcmUgdHJhbnNpdGlvbiB0byBoaWdoIHBvd2VyIHRvIGF2b2lkIGJ1ZworCSAqIGluIGZpcm13YXJlIDEtMDIgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cywKKwkJCSBTVFJFQU1TVEFURSwgMCwgU1RSRUFNX05PVF9SRUFEWSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdvdG9IaVBvd2VyICovCisJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENoZWNrIHRoZSBjYW1lcmEgc3RhdHVzICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcikgeworCQlQREVCVUcoRF9FUlIsICJmYXRhbF9lcnJvcjogJTA0eCwgdnBfc3RhdHVzOiAlMDR4IiwKKwkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IsCisJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFZQVmVyc2lvbiBjYW4ndCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBjYW1lcmEgaXMgaW4gSGlQb3dlciwKKwkgKiBzbyBnZXQgaXQgaGVyZSBpbnN0ZWFkIG9mIGluIGdldF92ZXJzaW9uX2luZm9ybWF0aW9uLiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRGV0ZXJtaW5lIHZpZGVvIG1vZGUgc2V0dGluZ3MgKi8KKwlzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDEyMDsKKworCXByaXYgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlpZiAocHJpdiAmIDB4MDEpIHsgLyogY3JvcCAqLworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDI7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gNjsKKwl9IGVsc2UgeworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDA7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gMDsKKwl9CisKKwlpZiAocHJpdiAmIDB4MDIpIHsgLyogcXVhcnRlciAqLworCQlzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPSBWSURFT1NJWkVfUUNJRjsKKwkJc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgLz0gMjsKKwl9IGVsc2UKKwkJc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID0gVklERU9TSVpFX0NJRjsKKworCXNkLT5wYXJhbXMucm9pLmNvbEVuZCA9IHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ICsKKwkJCQkoZ3NwY2FfZGV2LT53aWR0aCA+PiAzKTsKKwlzZC0+cGFyYW1zLnJvaS5yb3dFbmQgPSBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCArCisJCQkJKGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDIpOworCisJLyogQW5kIG5vdyBzZXQgdGhlIGNhbWVyYSB0byBhIGtub3duIHN0YXRlICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwKKwkJCSBDUElBX0dSQUJfQ09OVElORU9VUywgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBXZSBzdGFydCB3aXRoIGNvbXByZXNzaW9uIGRpc2FibGVkLCBhcyB3ZSBuZWVkIG9uZSB1bmNvbXByZXNzZWQKKwkgICBmcmFtZSB0byBoYW5kbGUgbGF0ZXIgY29tcHJlc3NlZCBmcmFtZXMgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAorCQkJIENQSUFfQ09NUFJFU1NJT05fTk9ORSwKKwkJCSBOT19ERUNJTUFUSU9OLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGZvcm1hdChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXR5dXZ0cmVzaChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRlY3B0aW1pbmcoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb25wYXJhbXMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VyYmFsYW5jZShnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRzZW5zb3JmcHMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0YXBjb3IoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0dmxvZmZzZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RhcnQgc3RyZWFtICovCisJcmV0ID0gY29tbWFuZF9yZXN1bWUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogV2FpdCA2IGZyYW1lcyBiZWZvcmUgdHVybmluZyBjb21wcmVzc2lvbiBvbiBmb3IgdGhlIHNlbnNvciB0byBnZXQKKwkgICBhbGwgc2V0dGluZ3MgYW5kIEFFQy9BQ0IgdG8gc2V0dGxlICovCisJc2QtPmZpcnN0X2ZyYW1lID0gNjsKKwlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCXNkLT5leHBvc3VyZV9jb3VudCA9IDA7CisJYXRvbWljX3NldCgmc2QtPmNhbV9leHBvc3VyZSwgMCk7CisJYXRvbWljX3NldCgmc2QtPmZwcywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWNvbW1hbmRfcGF1c2UoZ3NwY2FfZGV2KTsKKworCS8qIHNhdmUgY2FtZXJhIHN0YXRlIGZvciBsYXRlciBvcGVuIChkZXZlbG9wZXJzIGd1aWRlIGNoIDMuNS4zKSAqLworCXNhdmVfY2FtZXJhX3N0YXRlKGdzcGNhX2Rldik7CisKKwkvKiBHb3RvTG9Qb3dlciAqLworCWdvdG9fbG93X3Bvd2VyKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgdGhlIGNhbWVyYSBzdGF0dXMgKi8KKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCS8qIFN0YXJ0IC8gU3RvcCB0aGUgY2FtZXJhIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyB0bworCSAgIGEgc3VwcG9ydGVkIGNhbWVyYSwgYW5kIHRvIGdldCBzb21lIGluZm9ybWF0aW9uIGZyb20gaXQKKwkgICB0byBwcmludC4gKi8KKwlyZXQgPSBzZF9zdGFydChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZF9zdG9wTihnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJDUElBIFZlcnNpb246ICAgICAgICAgICAgICVkLiUwMmQgKCVkLiVkKSIsCisJCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24sCisJCQlzZC0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24pOworCVBERUJVRyhEX1BST0JFLCAiQ1BJQSBQblAtSUQ6ICAgICAgICAgICAgICAlMDR4OiUwNHg6JTA0eCIsCisJCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciwgc2QtPnBhcmFtcy5wbnBJRC5wcm9kdWN0LAorCQkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbik7CisJUERFQlVHKERfUFJPQkUsICJWUC1WZXJzaW9uOiAgICAgICAgICAgICAgICVkLiVkICUwNHgiLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBSZXZpc2lvbiwKKwkJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCisJCQlpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIENoZWNrIGZvciBTT0YgKi8KKwlpZiAobGVuID49IDY0ICYmCisJICAgIGRhdGFbMF0gPT0gTUFHSUNfMCAmJiBkYXRhWzFdID09IE1BR0lDXzEgJiYKKwkgICAgZGF0YVsxNl0gPT0gc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplICYmCisJICAgIGRhdGFbMTddID09IHNkLT5wYXJhbXMuZm9ybWF0LnN1YlNhbXBsZSAmJgorCSAgICBkYXRhWzE4XSA9PSBzZC0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciAmJgorCSAgICBkYXRhWzI0XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCAmJgorCSAgICBkYXRhWzI1XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xFbmQgJiYKKwkgICAgZGF0YVsyNl0gPT0gc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgJiYKKwkgICAgZGF0YVsyN10gPT0gc2QtPnBhcmFtcy5yb2kucm93RW5kKSB7CisJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCisJCWF0b21pY19zZXQoJnNkLT5jYW1fZXhwb3N1cmUsIGRhdGFbMzldICogMik7CisJCWF0b21pY19zZXQoJnNkLT5mcHMsIGRhdGFbNDFdKTsKKworCQlpZiAoZnJhbWUgPT0gTlVMTCkgeworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDaGVjayBmb3IgcHJvcGVyIEVPRiBmb3IgbGFzdCBmcmFtZSAqLworCQlpZiAoKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhKSA+IDQgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstNF0gPT0gMHhmZiAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0zXSA9PSAweGZmICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTJdID09IDB4ZmYgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstMV0gPT0gMHhmZikKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQkJTlVMTCwgMCk7CisKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBkYXRhLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZF9kcV9jYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogU2V0IHRoZSBub3JtYWwgY29tcHJlc3Npb24gc2V0dGluZ3Mgb25jZSB3ZSBoYXZlIGNhcHR1cmVkIGEKKwkgICBmZXcgdW5jb21wcmVzc2VkIGZyYW1lcyAoYW5kIEFFQyBoYXMgaG9wZWZ1bGx5IHNldHRsZWQpICovCisJaWYgKHNkLT5maXJzdF9mcmFtZSkgeworCQlzZC0+Zmlyc3RfZnJhbWUtLTsKKwkJaWYgKHNkLT5maXJzdF9mcmFtZSA9PSAwKQorCQkJY29tbWFuZF9zZXRjb21wcmVzc2lvbihnc3BjYV9kZXYpOworCX0KKworCS8qIFN3aXRjaCBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiBpZiBpdCBnb3QgdHVybmVkIG9mZiAqLworCXJlc3RhcnRfZmxpY2tlcihnc3BjYV9kZXYpOworCisJLyogSWYgQUVDIGlzIGVuYWJsZWQsIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZAorCSAgIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9PSAyKQorCQltb25pdG9yX2V4cG9zdXJlKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgb3VyIGtub3dsZWRnZSBvZiB0aGUgY2FtZXJhIHN0YXRlICovCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSwgMCwgMCwgMCwgMCk7CisJaWYgKHNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKKwkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cywgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPQorCQlmaW5kX292ZXJfZXhwb3N1cmUoc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBvbjsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KKwkJb24gPSAwOworCQlicmVhazsKKwljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCW9uID0gMTsKKwkJc2QtPm1haW5zRnJlcSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJb24gPSAxOworCQlzZC0+bWFpbnNGcmVxID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2QtPmZyZXEgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKworCXJldHVybiBzZXRfZmxpY2tlcihnc3BjYV9kZXYsIG9uLCBnc3BjYV9kZXYtPnN0cmVhbWluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbXByZXNzaW9udGFyZ2V0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09NUF9UQVJHRVQ6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZOgorCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJRdWFsaXR5Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEU6CisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIkZyYW1lcmF0ZSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9kcV9jYWxsYmFjaywKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1NTMsIDB4MDAwMil9LAorCXtVU0JfREVWSUNFKDB4MDgxMywgMHgwMDAxKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZmRmNGMwZWMuLmVjZDRkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTg1MSw3ICs4NTEsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IDQ4NzhjOGYuLjllNDI0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09IHN1ZC1kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpc2F0aW9uID09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMTMyMCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjAsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwYiA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjBiLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTIwMCw3ICsyMDAsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX292MjY0MCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19vdjk2NTUsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGJkNjIxNGQuLjIyMmFmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKICAqCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aAorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTcOhcnRvbiBOw6ltZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0zNyw2ICs0MCwxMSBAQAogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAorI2lmZGVmIENPTkZJR19JTlBVVAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisjZW5kaWYKKwogLyogZ2xvYmFsIHZhbHVlcyAqLwogI2RlZmluZSBERUZfTlVSQlMgMwkJLyogZGVmYXVsdCBudW1iZXIgb2YgVVJCcyAqLwogI2lmIERFRl9OVVJCUyA+IE1BWF9OVVJCUwpAQCAtNDcsNyArNTUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA4LCAwKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgOSwgMCkKIAogI2lmZGVmIEdTUENBX0RFQlVHCiBpbnQgZ3NwY2FfZGVidWcgPSBEX0VSUiB8IERfUFJPQkU7CkBAIC0xMDQsMTUgKzExMiwxODUgQEAKIAkuY2xvc2UJCT0gZ3NwY2Ffdm1fY2xvc2UsCiB9OwogCisvKgorICogSW5wdXQgYW5kIGludGVycnVwdCBlbmRwb2ludCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIHZvaWQgaW50X2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OworCWludCByZXQ7CisKKwlyZXQgPSB1cmItPnN0YXR1czsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDoKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+aW50X3BrdF9zY2FuKGdzcGNhX2RldiwKKwkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpIDwgMCkgeworCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBwYWNrZXQgcmVjZWl2ZWQiKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIFN0b3AgaXMgcmVxdWVzdGVkIGVpdGhlciBieSBzb2Z0d2FyZSBvciBoYXJkd2FyZSBpcyBnb25lLAorCQkgKiBrZWVwIHRoZSByZXQgdmFsdWUgbm9uLXplcm8gYW5kIGRvbid0IHJlc3VibWl0IGxhdGVyLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlQREVCVUcoRF9FUlIsICJVUkIgZXJyb3IgJWksIHJlc3VibWl0dGluZyIsIHVyYi0+c3RhdHVzKTsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQlyZXQgPSAwOworCX0KKworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmV0IDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgIlJlc3VibWl0IFVSQiBmYWlsZWQgd2l0aCBlcnJvciAlaSIsIHJldCk7CisJfQorfQorCitzdGF0aWMgaW50IGdzcGNhX2lucHV0X2Nvbm5lY3Qoc3RydWN0IGdzcGNhX2RldiAqZGV2KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyID0gMDsKKworCWRldi0+aW5wdXRfZGV2ID0gTlVMTDsKKwlpZiAoZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4gfHwgZGV2LT5zZF9kZXNjLT5vdGhlcl9pbnB1dCkgIHsKKwkJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghaW5wdXRfZGV2KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdXNiX21ha2VfcGF0aChkZXYtPmRldiwgZGV2LT5waHlzLCBzaXplb2YoZGV2LT5waHlzKSk7CisJCXN0cmxjYXQoZGV2LT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihkZXYtPnBoeXMpKTsKKworCQlpbnB1dF9kZXYtPm5hbWUgPSBkZXYtPnNkX2Rlc2MtPm5hbWU7CisJCWlucHV0X2Rldi0+cGh5cyA9IGRldi0+cGh5czsKKworCQl1c2JfdG9faW5wdXRfaWQoZGV2LT5kZXYsICZpbnB1dF9kZXYtPmlkKTsKKworCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoS0VZX0NBTUVSQSldID0gQklUX01BU0soS0VZX0NBTUVSQSk7CisJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldi0+ZGV2OworCisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCQlpZiAoZXJyKSB7CisJCQlQREVCVUcoRF9FUlIsICJJbnB1dCBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCAiCisJCQkJIndpdGggZXJyb3IgJWkiLCBlcnIpOworCQkJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gTlVMTDsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJCX0gZWxzZSB7CisJCQlkZXYtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYW5kX3N1Ym1pdF9pbnRfdXJiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2xlbjsKKwlpbnQgaW50ZXJ2YWw7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWJ1ZmZlcl9sZW4gPSBlcC0+d01heFBhY2tldFNpemU7CisJaW50ZXJ2YWwgPSBlcC0+YkludGVydmFsOworCVBERUJVRyhEX1BST0JFLCAiZm91bmQgaW50IGluIGVuZHBvaW50OiAweCV4LCAiCisJCSJidWZmZXJfbGVuPSV1LCBpbnRlcnZhbD0ldSIsCisJCWVwLT5iRW5kcG9pbnRBZGRyZXNzLCBidWZmZXJfbGVuLCBpbnRlcnZhbCk7CisKKwlkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgZXAtPndNYXhQYWNrZXRTaXplLAorCQkJCUdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCFidWZmZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9idWZmZXI7CisJfQorCXVzYl9maWxsX2ludF91cmIodXJiLCBkZXYsCisJCXVzYl9yY3ZpbnRwaXBlKGRldiwgZXAtPmJFbmRwb2ludEFkZHJlc3MpLAorCQlidWZmZXIsIGJ1ZmZlcl9sZW4sCisJCWludF9pcnEsICh2b2lkICopZ3NwY2FfZGV2LCBpbnRlcnZhbCk7CisJZ3NwY2FfZGV2LT5pbnRfdXJiID0gdXJiOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAic3VibWl0IFVSQiBmYWlsZWQgd2l0aCBlcnJvciAlaSIsIHJldCk7CisJCWdvdG8gZXJyb3Jfc3VibWl0OworCX0KKwlyZXR1cm4gcmV0OworCitlcnJvcl9zdWJtaXQ6CisJdXNiX2J1ZmZlcl9mcmVlKGRldiwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworZXJyb3JfYnVmZmVyOgorCXVzYl9mcmVlX3VyYih1cmIpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJaW50IGk7CisKKwlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4pICB7CisJCWludGYgPSB1c2JfaWZudW1fdG9faWYoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UpOworCQlpbnRmX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwkJZm9yIChpID0gMDsgaSA8IGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJCWVwID0gJmludGZfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSAmJgorCQkJICAgIHVzYl9lbmRwb2ludF94ZmVyX2ludChlcCkpIHsKKworCQkJCWFsbG9jX2FuZF9zdWJtaXRfaW50X3VyYihnc3BjYV9kZXYsIGVwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKworCXVyYiA9IGdzcGNhX2Rldi0+aW50X3VyYjsKKwlpZiAodXJiKSB7CisJCWdzcGNhX2Rldi0+aW50X3VyYiA9IE5VTEw7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorfQorI2Vsc2UKKyNkZWZpbmUgZ3NwY2FfaW5wdXRfY29ubmVjdChnc3BjYV9kZXYpCQkwCisjZGVmaW5lIGdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KQorI2RlZmluZSBnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpCisjZW5kaWYKKwogLyogZ2V0IHRoZSBjdXJyZW50IGlucHV0IGZyYW1lIGJ1ZmZlciAqLwogc3RydWN0IGdzcGNhX2ZyYW1lICpnc3BjYV9nZXRfaV9mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKLQlpbnQgaTsKIAotCWkgPSBnc3BjYV9kZXYtPmZyX2k7Ci0JaSA9IGdzcGNhX2Rldi0+ZnJfcXVldWVbaV07Ci0JZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtpXTsKKwlmcmFtZSA9IGdzcGNhX2Rldi0+Y3VyX2ZyYW1lOwogCWlmICgoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgQlVGX0FMTF9GTEFHUykKIAkJCQkhPSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00ODYsMTEgKzY2NCwxMyBAQAogCQkJaSwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJZ3NwY2FfZGV2LT5hbHQgPSBpOwkJLyogbWVtb3JpemUgdGhlIGN1cnJlbnQgYWx0IHNldHRpbmcgKi8KIAlpZiAoZ3NwY2FfZGV2LT5uYmFsdCA+IDEpIHsKKwkJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKIAkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZXJyKCJzZXQgYWx0ICVkIGVyciAlZCIsIGksIHJldCk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWVwID0gTlVMTDsKIAkJfQorCQlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJfQogCXJldHVybiBlcDsKIH0KQEAgLTUzNCwyNiArNzE0LDIyIEBACiAJCQludXJicyA9IDE7CiAJfQogCi0JZ3NwY2FfZGV2LT5udXJicyA9IG51cmJzOwogCWZvciAobiA9IDA7IG4gPCBudXJiczsgbisrKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBrdCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiKSB7CiAJCQllcnIoInVzYl9hbGxvY191cmIgZmFpbGVkIik7Ci0JCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisJCWdzcGNhX2Rldi0+dXJiW25dID0gdXJiOwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoZ3NwY2FfZGV2LT5kZXYsCiAJCQkJCQlic2l6ZSwKIAkJCQkJCUdGUF9LRVJORUwsCiAJCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOwogCiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCWVycigidXNiX2J1ZmZlcl91cmIgZmFpbGVkIik7Ci0JCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKKwkJCWVycigidXNiX2J1ZmZlcl9hbGxvYyBmYWlsZWQiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCWdzcGNhX2Rldi0+dXJiW25dID0gdXJiOwogCQl1cmItPmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCQl1cmItPmNvbnRleHQgPSBnc3BjYV9kZXY7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJzaXplOwpAQCAtNTg1LDYgKzc2MSw3IEBACiBzdGF0aWMgaW50IGdzcGNhX2luaXRfdHJhbnNmZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVyYiAqdXJiOwogCWludCBuLCByZXQ7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKQEAgLTU5NSw2ICs3NzIsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOworCiAJLyogc2V0IHRoZSBoaWdoZXIgYWx0ZXJuYXRlIHNldHRpbmcgYW5kCiAJICogbG9vcCB1bnRpbCB1cmIgc3VibWl0IHN1Y2NlZWRzICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLnJldmVyc2VfYWx0cykKQEAgLTYxMywxMCArNzkyLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAlmb3IgKDs7KSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgImluaXQgdHJhbnNmZXIgYWx0ICVkIiwgZ3NwY2FfZGV2LT5hbHQpOwotCQlyZXQgPSBjcmVhdGVfdXJicyhnc3BjYV9kZXYsIGVwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJaWYgKCFnc3BjYV9kZXYtPmNhbS5ub191cmJfY3JlYXRlKSB7CisJCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IHRyYW5zZmVyIGFsdCAlZCIsCisJCQkJZ3NwY2FfZGV2LT5hbHQpOworCQkJcmV0ID0gY3JlYXRlX3VyYnMoZ3NwY2FfZGV2LCBlcCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CiAKIAkJLyogY2xlYXIgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KIAkJaWYgKGdzcGNhX2Rldi0+Y2FtLmJ1bGspCkBAIC02MzYsOCArODIwLDExIEBACiAJCQlicmVhazsKIAogCQkvKiBzdWJtaXQgdGhlIFVSQnMgKi8KLQkJZm9yIChuID0gMDsgbiA8IGdzcGNhX2Rldi0+bnVyYnM7IG4rKykgewotCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZ3NwY2FfZGV2LT51cmJbbl0sIEdGUF9LRVJORUwpOworCQlmb3IgKG4gPSAwOyBuIDwgTUFYX05VUkJTOyBuKyspIHsKKwkJCXVyYiA9IGdzcGNhX2Rldi0+dXJiW25dOworCQkJaWYgKHVyYiA9PSBOVUxMKQorCQkJCWJyZWFrOworCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC02OTQsNyArODgxLDkgQEAKIAkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCiAJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CiAJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpOwogCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCQlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJfQogCiAJLyogYWx3YXlzIGNhbGwgc3RvcDAgdG8gZnJlZSB0aGUgc3ViZHJpdmVyJ3MgcmVzb3VyY2VzICovCkBAIC0yMDYwLDExICsyMjQ5LDEyIEBACiAJCVBERUJVRyhEX0VSUiwgIlRvbyBtYW55IGNvbmZpZyIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisKKwkvKiB0aGUgVVNCIHZpZGVvIGludGVyZmFjZSBtdXN0IGJlIHRoZSBmaXJzdCBvbmUgKi8KIAlpbnRlcmZhY2UgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0JaWYgKGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlciA+IDApIHsKLQkJUERFQlVHKERfRVJSLCAiaW50ZiAhPSAwIik7CisJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEgJiYKKwkgICAgaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyICE9IDApCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlICovCiAJaWYgKGRldl9zaXplIDwgc2l6ZW9mICpnc3BjYV9kZXYpCkBAIC0yMDk2LDYgKzIyODYsMTAgQEAKIAkJZ290byBvdXQ7CiAJZ3NwY2Ffc2V0X2RlZmF1bHRfbW9kZShnc3BjYV9kZXYpOwogCisJcmV0ID0gZ3NwY2FfaW5wdXRfY29ubmVjdChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT5yZWFkX2xvY2spOwogCW11dGV4X2luaXQoJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CkBAIC0yMTE2LDggKzIzMTAsMTUgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZ3NwY2FfZGV2KTsKIAlQREVCVUcoRF9QUk9CRSwgIiVzIGNyZWF0ZWQiLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKKworCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKKwogCXJldHVybiAwOwogb3V0OgorI2lmZGVmIENPTkZJR19JTlBVVAorCWlmIChnc3BjYV9kZXYtPmlucHV0X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworI2VuZGlmCiAJa2ZyZWUoZ3NwY2FfZGV2LT51c2JfYnVmKTsKIAlrZnJlZShnc3BjYV9kZXYpOwogCXJldHVybiByZXQ7CkBAIC0yMTMzLDYgKzIzMzQsOSBAQAogdm9pZCBnc3BjYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworI2VuZGlmCiAKIAlQREVCVUcoRF9QUk9CRSwgIiVzIGRpc2Nvbm5lY3QiLAogCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKQEAgLTIxNDQsNiArMjM0OCwxNSBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwogCX0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CisJaW5wdXRfZGV2ID0gZ3NwY2FfZGV2LT5pbnB1dF9kZXY7CisJaWYgKGlucHV0X2RldikgeworCQlnc3BjYV9kZXYtPmlucHV0X2RldiA9IE5VTEw7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJfQorI2VuZGlmCisKIAkvKiB0aGUgZGV2aWNlIGlzIGZyZWVkIGF0IGV4aXQgb2YgdGhpcyBmdW5jdGlvbiAqLwogCWdzcGNhX2Rldi0+ZGV2ID0gTlVMTDsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwpAQCAtMjE2OSw2ICsyMzgyLDcgQEAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTikKIAkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTihnc3BjYV9kZXYpOwogCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CiAJZ3NwY2Ffc2V0X2FsdDAoZ3NwY2FfZGV2KTsKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMCkKIAkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMChnc3BjYV9kZXYpOwpAQCAtMjE4Miw2ICsyMzk2LDcgQEAKIAogCWdzcGNhX2Rldi0+ZnJvemVuID0gMDsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MtPmluaXQoZ3NwY2FfZGV2KTsKKwlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlyZXR1cm4gZ3NwY2FfaW5pdF90cmFuc2Zlcihnc3BjYV9kZXYpOwogCXJldHVybiAwOwpAQCAtMjIwNSw2ICsyNDIwLDggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKIAkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKIAkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA1OWM3OTQxZC4uMDJjNjk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtNDgsMjYgKzQ4LDI3IEBACiAKIC8qIHVzZWQgdG8gbGlzdCBmcmFtZXJhdGVzIHN1cHBvcnRlZCBieSBhIGNhbWVyYSBtb2RlIChyZXNvbHV0aW9uKSAqLwogc3RydWN0IGZyYW1lcmF0ZXMgewotCWludCAqcmF0ZXM7CisJY29uc3QgdTggKnJhdGVzOwogCWludCBucmF0ZXM7CiB9OwogCiAvKiBkZXZpY2UgaW5mb3JtYXRpb24gLSBzZXQgYXQgcHJvYmUgdGltZSAqLwogc3RydWN0IGNhbSB7Ci0JaW50IGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLwogCWNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9tb2RlOwkvKiBzaXplIG5tb2RlcyAqLwotCWNoYXIgbm1vZGVzOwogCWNvbnN0IHN0cnVjdCBmcmFtZXJhdGVzICptb2RlX2ZyYW1lcmF0ZXM7IC8qIG11c3QgaGF2ZSBzaXplIG5tb2RlLAogCQkJCQkJICAgKiBqdXN0IGxpa2UgY2FtX21vZGUgKi8KLQlfX3U4IGJ1bGtfbnVyYnM7CS8qIG51bWJlciBvZiBVUkJzIGluIGJ1bGsgbW9kZQorCXUzMiBidWxrX3NpemU7CQkvKiBidWZmZXIgc2l6ZSB3aGVuIGltYWdlIHRyYW5zZmVyIGJ5IGJ1bGsgKi8KKwl1MzIgaW5wdXRfZmxhZ3M7CS8qIHZhbHVlIGZvciBFTlVNX0lOUFVUIHN0YXR1cyBmbGFncyAqLworCXU4IG5tb2RlczsJCS8qIHNpemUgb2YgY2FtX21vZGUgKi8KKwl1OCBub191cmJfY3JlYXRlOwkvKiBkb24ndCBjcmVhdGUgdHJhbnNmZXIgVVJCcyAqLworCXU4IGJ1bGtfbnVyYnM7CQkvKiBudW1iZXIgb2YgVVJCcyBpbiBidWxrIG1vZGUKIAkJCQkgKiAtIGNhbm5vdCBiZSA+IE1BWF9OVVJCUwogCQkJCSAqIC0gd2hlbiAwIGFuZCBidWxrX3NpemUgIT0gMCBtZWFucwogCQkJCSAqICAgMSBVUkIgYW5kIHN1Ym1pdCBkb25lIGJ5IHN1YmRyaXZlciAqLwogCXU4IGJ1bGs7CQkvKiBpbWFnZSB0cmFuc2ZlciBieSAwOmlzb2MgLyAxOmJ1bGsgKi8KIAl1OCBucGt0OwkJLyogbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSVNPQyBtZXNzYWdlCiAJCQkJICogMCBpcyB0aGUgZGVmYXVsdCB2YWx1ZTogMzIgcGFja2V0cyAqLwotCXUzMiBpbnB1dF9mbGFnczsJLyogdmFsdWUgZm9yIEVOVU1fSU5QVVQgc3RhdHVzIGZsYWdzICovCi0JY2hhciByZXZlcnNlX2FsdHM7CS8qIEFsdCBzZXR0aW5ncyBhcmUgaW4gaGlnaCB0byBsb3cgb3JkZXIgKi8KKwl1OCByZXZlcnNlX2FsdHM7CS8qIEFsdCBzZXR0aW5ncyBhcmUgaW4gaGlnaCB0byBsb3cgb3JkZXIgKi8KIH07CiAKIHN0cnVjdCBnc3BjYV9kZXY7CkBAIC05MCw2ICs5MSw5IEBACiB0eXBlZGVmIHZvaWQgKCpjYW1fcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJCXU4ICpkYXRhLAogCQkJCWludCBsZW4pOwordHlwZWRlZiBpbnQgKCpjYW1faW50X3BrdF9vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQl1OCAqZGF0YSwKKwkJCQlpbnQgbGVuKTsKIAogc3RydWN0IGN0cmwgewogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKQEAgLTEyNSw2ICsxMjksMTIgQEAKIAljYW1fcmVnX29wIGdldF9yZWdpc3RlcjsKICNlbmRpZgogCWNhbV9pZGVudF9vcCBnZXRfY2hpcF9pZGVudDsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwljYW1faW50X3BrdF9vcCBpbnRfcGt0X3NjYW47CisJLyogb3RoZXJfaW5wdXQgbWFrZXMgdGhlIGdzcGNhIGNvcmUgY3JlYXRlIGdzcGNhX2Rldi0+aW5wdXQgZXZlbiB3aGVuCisJICAgaW50X3BrdF9zY2FuIGlzIE5VTEwsIGZvciBjYW1zIHdpdGggbm9uIGludGVycnVwdCBkcml2ZW4gYnV0dG9ucyAqLworCXU4IG90aGVyX2lucHV0OworI2VuZGlmCiB9OwogCiAvKiBwYWNrZXQgdHlwZXMgd2hlbiBtb3ZpbmcgZnJvbSBpc28gYnVmIHRvIGZyYW1lIGJ1ZiAqLwpAQCAtMTQ3LDYgKzE1NywxMCBAQAogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsJCS8qIHN1YmRyaXZlciBoYW5kbGluZyB0aGUgZGV2aWNlICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZmlsZSAqY2FwdF9maWxlOwkJLyogZmlsZSBkb2luZyB2aWRlbyBjYXB0dXJlICovCisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKyNlbmRpZgogCiAJc3RydWN0IGNhbSBjYW07CQkJCS8qIGRldmljZSBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjOwkJLyogc3ViZHJpdmVyIGRlc2NyaXB0aW9uICovCkBAIC0xNTYsNiArMTcwLDkgQEAKICNkZWZpbmUgVVNCX0JVRl9TWiA2NAogCV9fdTggKnVzYl9idWY7CQkJCS8qIGJ1ZmZlciBmb3IgVVNCIGV4Y2hhbmdlcyAqLwogCXN0cnVjdCB1cmIgKnVyYltNQVhfTlVSQlNdOworI2lmZGVmIENPTkZJR19JTlBVVAorCXN0cnVjdCB1cmIgKmludF91cmI7CisjZW5kaWYKIAogCV9fdTggKmZyYnVmOwkJCQkvKiBidWZmZXIgZm9yIG5mcmFtZXMgKi8KIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgZnJhbWVbR1NQQ0FfTUFYX0ZSQU1FU107CkBAIC0xODcsNyArMjA0LDYgQEAKIAljaGFyIHVzZXJzOwkJCS8qIG51bWJlciBvZiBvcGVucyAqLwogCWNoYXIgcHJlc2VudDsJCQkvKiBkZXZpY2UgY29ubmVjdGVkICovCiAJY2hhciBuYnVmcmVhZDsJCQkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3IgcmVhZCgpICovCi0JY2hhciBudXJiczsJCQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIFVSQnMgKi8KIAljaGFyIG1lbW9yeTsJCQkvKiBtZW1vcnkgdHlwZSAoVjRMMl9NRU1PUllfeHh4KSAqLwogCV9fdTggaWZhY2U7CQkJLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KIAlfX3U4IGFsdDsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKaW5kZXggOGQwNzFkZi4uYzA3MjJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl9CiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGN0cmwgbXQ5bTExMV9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIG10OW0xMTFfY3RybHNbXSA9IHsKICNkZWZpbmUgVkZMSVBfSURYIDAKIAl7CiAJCXsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIG10OW0xMTEgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIG10OW0xMTEgc2Vuc29yIik7CiAKIAkvKiBEbyB0aGUgcHJlaW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfbXQ5bTExMSk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKaW5kZXggMmEyOGI3NC4uNjJjMWNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgaW50IG92NzY2MF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgb3Y3NjYwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBvdjc2NjBfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBvdjc2NjBfY3RybHNbXSA9IHsKICNkZWZpbmUgR0FJTl9JRFggMQogCXsKIAkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKaW5kZXggZjU1ODhlYi4uNGQ5ZGNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCkBAIC05NCw3ICs5NCw3IEBACiBpbnQgb3Y3NjYwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiB2b2lkIG92NzY2MF9kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOwogCi1jb25zdCBzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBvdjc2NjAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG01NjAyX3NlbnNvciBvdjc2NjAgPSB7CiAJLm5hbWUgPSAib3Y3NjYwIiwKIAkuaTJjX3NsYXZlX2lkID0gMHg0MiwKIAkuaTJjX3JlZ1cgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKaW5kZXggOTIzY2RkNS4uMDY5YmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYW4gb3Y5NjUwIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYW4gb3Y5NjUwIHNlbnNvciIpOwogCiAJLyogUnVuIHRoZSBwcmUtaW5pdCBiZWZvcmUgcHJvYmluZyB0aGUgc2Vuc29yICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9vdjk2NTApICYmICFlcnI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKaW5kZXggOGQ3NGQ4MC4uOTI1Yjg3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYSBwbzEwMzAgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKIAogCS8qIFJ1biB0aGUgcHJlLWluaXQgdG8gYWN0dWFsbHkgcHJvYmUgdGhlIHVuaXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3BvMTAzMCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggMWI1MzZmN2QuLmRhMGEzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrNGFhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs0YWEgc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azRhYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwppbmRleCA2Yjg5ZjMzLi5mYmQ5MTU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs4M2Egc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azgzYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDljZjhkNjguLjNkOTIyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggOTE1NDg3MC4uMzM3NDRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNTcsNiArNTcsMTQgQEAKICNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NQVgJCTMxCiAjZGVmaW5lIE1SOTczMTBBX0dBSU5fREVGQVVMVAkJMjUKIAorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfTUFYCQkzMQorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxUCTIzCisKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NQVgJCTB4N2ZmCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVAkweDExMAorCiAjZGVmaW5lIE1SOTczMTBBX01JTl9DTE9DS0RJVl9NSU4JMwogI2RlZmluZSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfTUFYCTgKICNkZWZpbmUgTVI5NzMxMEFfTUlOX0NMT0NLRElWX0RFRkFVTFQJMwpAQCAtODIsNyArOTAsOCBAQAogCiAJaW50IGJyaWdodG5lc3M7CiAJdTE2IGV4cG9zdXJlOwotCXU4IGdhaW47CisJdTMyIGdhaW47CisJdTggY29udHJhc3Q7CiAJdTggbWluX2Nsb2NrZGl2OwogfTsKIApAQCAtOTgsNiArMTA3LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0bWluX2Nsb2NrZGl2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTEwNSwxMSArMTE2LDEzIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiBzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIC8qIFNlcGFyYXRlIGJyaWdodG5lc3MgY29udHJvbCBkZXNjcmlwdGlvbiBmb3IgQXJndXMgUXVpY2tDbGl4IGFzIGl0IGhhcwotICAgZGlmZmVyZW50IGxpbWl0cyBmcm9tIHRoZSBvdGhlciBtcjk3MzEwYSBjYW1lcmFzICovCisgKiBkaWZmZXJlbnQgbGltaXRzIGZyb20gdGhlIG90aGVyIG1yOTczMTBhIGNhbWVyYXMsIGFuZCBzZXBhcmF0ZSBnYWluCisgKiBjb250cm9sIGZvciBTYWthciBDeWJlclBpeCBjYW1lcmEuICovCiAJewogI2RlZmluZSBOT1JNX0JSSUdIVE5FU1NfSURYIDAKIAkJewpAQCAtMTcxLDcgKzE4NCwzNyBAQAogCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKIAl9LAogCXsKLSNkZWZpbmUgTUlOX0NMT0NLRElWX0lEWCA0CisjZGVmaW5lIFNBS0FSX0NTX0dBSU5fSURYIDQKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkdhaW4iLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9DU19HQUlOX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ1NfR0FJTl9NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRnYWluLAorCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorCXsKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDUKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJDb250cmFzdCIsCisJCQkubWluaW11bSA9IE1SOTczMTBBX0NPTlRSQVNUX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ09OVFJBU1RfTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxULAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCQkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisjZGVmaW5lIE1JTl9DTE9DS0RJVl9JRFggNgogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0zMjcsNyArMzcwLDYgQEAKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMSk7CiAJZGF0YVswXSA9IDB4MTk7CiAJZGF0YVsxXSA9IDB4NTE7CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOwpAQCAtNDM3LDYgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKKwlpbnQgZ2Fpbl9kZWZhdWx0ID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOwogCWludCBlcnJfY29kZTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKQEAgLTQ2MCwxMiArNTAzLDE0IEBACiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCisJLyogTm93LCB0aGUgcXVlcnkgZm9yIHNlbnNvciB0eXBlLiAqLworCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2RldiwgMHgwNywgMSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCiAJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHgwMTEwIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwMTBlKSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX0NJRjsKIAkJY2FtLT5ubW9kZXMtLTsKLQkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2LCAweDA2LCAxKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkKLQkJCXJldHVybiBlcnJfY29kZTsKIAkJLyoKIAkJICogQWxsIGJ1dCBvbmUgb2YgdGhlIGtub3duIENJRiBjYW1lcmFzIHNoYXJlIHRoZSBzYW1lIFVTQiBJRCwKIAkJICogYnV0IHR3byBkaWZmZXJlbnQgaW5pdCByb3V0aW5lcyBhcmUgaW4gdXNlLCBhbmQgdGhlIGNvbnRyb2wKQEAgLTQ3MywxMiArNTE4LDEyIEBACiAJCSAqIG9mIHRoZSB0d28ga25vd24gdmFyaWV0aWVzIGlzIGNvbm5lY3RlZCEKIAkJICoKIAkJICogQSBsaXN0IG9mIGtub3duIENJRiBjYW1lcmFzIGZvbGxvd3MuIFRoZXkgYWxsIHJlcG9ydCBlaXRoZXIKLQkJICogMDAwMiBmb3IgdHlwZSAwIG9yIDAwMDMgZm9yIHR5cGUgMS4KKwkJICogMDIwMCBmb3IgdHlwZSAwIG9yIDAzMDAgZm9yIHR5cGUgMS4KIAkJICogSWYgeW91IGhhdmUgYW5vdGhlciB0byByZXBvcnQsIHBsZWFzZSBkbwogCQkgKgogCQkgKiBOYW1lCQlzZC0+c2Vuc29yX3R5cGUJCXJlcG9ydGVkIGJ5CiAJCSAqCi0JCSAqIFNha2FyIFNweS1zaG90CTAJCVQuIEtpbGdvcmUKKwkJICogU2FrYXIgNTYzNzkgU3B5LXNob3QJMAkJVC4gS2lsZ29yZQogCQkgKiBJbm5vdmFnZQkJMAkJVC4gS2lsZ29yZQogCQkgKiBWaXZpdGFyIE1pbmkJCTAJCUguIERlIEdvZWRlCiAJCSAqIFZpdml0YXIgTWluaQkJMAkJRS4gUm9kcmlndWV6CkBAIC00ODcsNyArNTMyLDcgQEAKIAkJICogUGhpbGlwcyBkaWcuIGtleWNoLgkxCQlULiBLaWxnb3JlCiAJCSAqIFRydXN0IFNweWNAbSAxMDAJMQkJQS4gSmFjb2JzCiAJCSAqLwotCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgeworCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSkgewogCQljYXNlIDI6CiAJCQlzZC0+c2Vuc29yX3R5cGUgPSAwOwogCQkJYnJlYWs7CkBAIC01MDQsMjAgKzU0OSwxOSBAQAogCX0gZWxzZSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX1ZHQTsKIAotCQllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYsIDB4MDcsIDEpOwotCQlpZiAoZXJyX2NvZGUgPCAwKQotCQkJcmV0dXJuIGVycl9jb2RlOwotCiAJCS8qCi0JCSAqIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgcmVzcG9uc2VzIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kCi0JCSAqIGZyb20gdGhlIGtub3duIE1SOTczMTBBIFZHQSBjYW1lcmFzLgorCQkgKiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHJlc3BvbnNlcyB0byB0aGUgcXVlcnkgZm9yIHNlbnNvcgorCQkgKiB0eXBlLCBmcm9tIHRoZSBrbm93biBNUjk3MzEwQSBWR0EgY2FtZXJhcy4gU2l4IGRpZmZlcmVudAorCQkgKiBjYW1lcmFzIG9mIHdoaWNoIGZpdmUgc2hhcmUgdGhlIHNhbWUgVVNCIElELgogCQkgKgogCQkgKiBOYW1lCQkJZ3NwY2FfZGV2LT51c2JfYnVmW10Jc2QtPnNlbnNvcl90eXBlCiAJCSAqCQkJCXNkLT5kb19sY2Rfc3RvcAogCQkgKiBBaXB0ZWsgUGVuY2FtIFZHQSsJMDMwMAkJMAkJMQotCQkgKiBJT04gZGlnaXRhbAkJMDM1MAkJMAkJMQorCQkgKiBJT04gZGlnaXRhbAkJMDMwMAkJMAkJMQogCQkgKiBBcmd1cyBEQy0xNjIwCTA0NTAJCTEJCTAKIAkJICogQXJndXMgUXVpY2tDbGl4CTA0MjAJCTEJCTEKKwkJICogU2FrYXIgNzczNzkgRGlnaXRhbAkwMzUwCQkwCQkxCisJCSAqIFNha2FyIDE2Mzh4IEN5YmVyUGl4CTAxMjAJCTAJCTIKIAkJICoKIAkJICogQmFzZWQgdXBvbiB0aGVzZSByZXN1bHRzLCB3ZSBhc3N1bWUgZGVmYXVsdCBzZXR0aW5ncwogCQkgKiBhbmQgdGhlbiBjb3JyZWN0IGFzIG5lY2Vzc2FyeSwgYXMgZm9sbG93cy4KQEAgLTUyNywxMCArNTcxLDEyIEBACiAJCXNkLT5zZW5zb3JfdHlwZSA9IDE7CiAJCXNkLT5kb19sY2Rfc3RvcCA9IDA7CiAJCXNkLT5hZGpfY29sb3JzID0gMDsKLQkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAxKSB7CisJCQlzZC0+c2Vuc29yX3R5cGUgPSAyOworCQl9IGVsc2UgaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKIAkJCQkJKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDA0KSkgewogCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBWR0EgU2Vuc29yIGlkIEJ5dGUgMDogJTAyeCIsCi0JCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSk7CisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CiAJCQlQREVCVUcoRF9FUlIsICJEZWZhdWx0cyBhc3N1bWVkLCBtYXkgbm90IHdvcmsiKTsKIAkJCVBERUJVRyhEX0VSUiwgIlBsZWFzZSByZXBvcnQgdGhpcyIpOwogCQl9CkBAIC01NjAsNyArNjA2LDcgQEAKIAkJUERFQlVHKERfUFJPQkUsICJNUjk3MzEwQSBWR0EgY2FtZXJhIGRldGVjdGVkLCBzZW5zb3I6ICVkIiwKIAkJICAgICAgIHNkLT5zZW5zb3JfdHlwZSk7CiAJfQotCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgdG8gcHJvYmUgdGhlIHNlbnNvciB0eXBlLiAqLworCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgb25seSB0byBwcm9iZSB0aGUgc2Vuc29yIHR5cGUuICovCiAJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKIAogCWlmIChmb3JjZV9zZW5zb3JfdHlwZSAhPSAtMSkgewpAQCAtNTc0LDkgKzYyMCwxMyBAQAogCQkvKiBObyBicmlnaHRuZXNzIGZvciBzZW5zb3JfdHlwZSAwICovCiAJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMCkKIAkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8Ci0JCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKTsKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAkJZWxzZQogCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKIAl9IGVsc2UgewogCQkvKiBBbGwgY29udHJvbHMgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBWR0Egc2Vuc29yX3R5cGUgaXMgMCAqLwpAQCAtNTg1LDE3ICs2MzUsMzAgQEAKIAkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgRVhQT1NVUkVfSURYKSB8CiAJCQkJCSAgICAgICgxIDw8IEdBSU5fSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKLQkJZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQorCQllbHNlIGlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IE5PUk1fQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgR0FJTl9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7CisJCQlnYWluX2RlZmF1bHQgPSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQ7CisJCX0gZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQogCQkJLyogQXJndXMgUXVpY2tDbGl4IGhhcyBkaWZmZXJlbnQgYnJpZ2h0bmVzcyBsaW1pdHMgKi8KLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKTsKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJCWVsc2UKLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCk7CisJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAl9CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVDsKIAlzZC0+ZXhwb3N1cmUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxUOwotCXNkLT5nYWluID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOworCXNkLT5nYWluID0gZ2Fpbl9kZWZhdWx0OworCXNkLT5jb250cmFzdCA9IE1SOTczMTBBX0NPTlRSQVNUX0RFRkFVTFQ7CiAJc2QtPm1pbl9jbG9ja2RpdiA9IE1SOTczMTBBX01JTl9DTE9DS0RJVl9ERUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC02OTcsNiArNzYwLDEyIEBACiAJCQl7MHgxMywgMHgwMCwgezB4MDF9LCAxfSwKIAkJCXswLCAwLCB7MH0sIDB9CiAJCX07CisJCS8qIFdpdGhvdXQgdGhpcyBjb21tYW5kIHRoZSBjYW0gd29uJ3Qgd29yayB3aXRoIFVTQi1VSENJICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MGE7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDB4MDA7CisJCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIGNpZl9zZW5zb3IxX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUoY2lmX3NlbnNvcjFfaW5pdF9kYXRhKSk7CiAJfQpAQCAtNzE3LDYgKzc4NiwxMCBAQAogCQlkYXRhWzVdICA9IDB4MDA7CiAJCWRhdGFbMTBdID0gMHg5MTsKIAl9CisJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCWRhdGFbNV0gID0gMHgwMDsKKwkJZGF0YVsxMF0gPSAweDE4OworCX0KIAogCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewogCWNhc2UgMTYwOgpAQCAtNzMxLDYgKzgwNCwxMCBAQAogCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCQlkYXRhWzZdID0gMjsKKwkJCWRhdGFbOF0gPSAxOworCQl9CiAJCWlmIChzZC0+ZG9fbGNkX3N0b3ApCiAJCQlkYXRhWzhdID0gMHgwNDsgIC8qIEJheWVyIHRpbGUgc2hpZnRlZCAqLwogCQlicmVhazsKQEAgLTc1Myw3ICs4MzAsNiBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlpZiAoIXNkLT5zZW5zb3JfdHlwZSkgewotCQkvKiBUaGUgb25seSBrbm93biBzZW5zb3JfdHlwZSAwIGNhbSBpcyB0aGUgQXJndXMgREMtMTYyMCAqLwogCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMF9pbml0X2RhdGFbXSA9IHsKIAkJCXsweDAxLCAweDAwLCB7MHgwYywgMHgwMCwgMHgwNH0sIDN9LAogCQkJezB4MTQsIDB4MDAsIHsweDAxLCAweGU0LCAweDAyLCAweDg0fSwgNH0sCkBAIC03NjQsNyArODQwLDcgQEAKIAkJfTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IwX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjBfaW5pdF9kYXRhKSk7Ci0JfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDEpIHsKIAkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgY29sb3JfYWRqW10gPSB7CiAJCQl7MHgwMiwgMHgwMCwgezB4MDYsIDB4NTksIDB4MGMsIDB4MTYsIDB4MDAsCiAJCQkJLyogYWRqdXN0ZWQgYmx1ZSwgZ3JlZW4sIHJlZCBnYWluIGNvcnJlY3QKQEAgLTgwMiw2ICs4NzgsNDggQEAKIAogCQllcnJfY29kZSA9IHNlbnNvcl93cml0ZV9yZWdzKGdzcGNhX2RldiwgdmdhX3NlbnNvcjFfaW5pdF9kYXRhLAogCQkJCQkgQVJSQVlfU0laRSh2Z2Ffc2Vuc29yMV9pbml0X2RhdGEpKTsKKwl9IGVsc2UgewkvKiBzZW5zb3IgdHlwZSA9PSAyICovCisJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIHZnYV9zZW5zb3IyX2luaXRfZGF0YVtdID0geworCisJCQl7MHgwMSwgMHgwMCwgezB4NDh9LCAxfSwKKwkJCXsweDAyLCAweDAwLCB7MHgyMn0sIDF9LAorCQkJLyogUmVnIDMgbXNiIGFuZCA0IGlzIGxzYiBvZiB0aGUgZXhwb3N1cmUgc2V0dGluZyovCisJCQl7MHgwNSwgMHgwMCwgezB4MTB9LCAxfSwKKwkJCXsweDA2LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MDcsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgwOCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDA5LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJLyogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiB0aGUgZ2FpbiBjb250cm9sCisJCQkgKiB3aGljaCBpcyBCVFcgY29tcGxldGVseSBib3JrZWQgaW4gdGhlIE9FTSBkcml2ZXIKKwkJCSAqIFRoZSB2YWx1ZXMgZm9yIGVhY2ggY29sb3IgZ28gZnJvbSAwIHRvIDB4N2ZmCisJCQkgKnsweDBhLCAweDAwLCB7MHgwMX0sIDF9LCAgZ3JlZW4xIGdhaW4gbXNiCisJCQkgKnsweDBiLCAweDAwLCB7MHgxMH0sIDF9LCAgZ3JlZW4xIGdhaW4gbHNiCisJCQkgKnsweDBjLCAweDAwLCB7MHgwMX0sIDF9LCAgcmVkIGdhaW4gbXNiCisJCQkgKnsweDBkLCAweDAwLCB7MHgxMH0sIDF9LCAgcmVkIGdhaW4gbHNiCisJCQkgKnsweDBlLCAweDAwLCB7MHgwMX0sIDF9LCAgYmx1ZSBnYWluIG1zYgorCQkJICp7MHgwZiwgMHgwMCwgezB4MTB9LCAxfSwgIGJsdWUgZ2FpbiBsc2IKKwkJCSAqezB4MTAsIDB4MDAsIHsweDAxfSwgMX0sIGdyZWVuMiBnYWluIG1zYgorCQkJICp7MHgxMSwgMHgwMCwgezB4MTB9LCAxfSwgZ3JlZW4yIGdhaW4gbHNiCisJCQkgKi8KKwkJCXsweDEyLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTMsIDB4MDAsIHsweDA0fSwgMX0sIC8qIHdlaXJkIGVmZmVjdCBvbiBjb2xvcnMgKi8KKwkJCXsweDE0LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTUsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHgxNiwgMHgwMCwgezB4MDF9LCAxfSwKKwkJCXsweDE3LCAweDAwLCB7MHhlMn0sIDF9LCAvKiB2ZXJ0aWNhbCBhbGlnbm1lbnQgKi8KKwkJCXsweDE4LCAweDAwLCB7MHgwMn0sIDF9LAorCQkJezB4MTksIDB4MDAsIHsweDgyfSwgMX0sIC8qIGRvbid0IG1lc3Mgd2l0aCAqLworCQkJezB4MWEsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgxYiwgMHgwMCwgezB4MjB9LCAxfSwKKwkJCS8qIHsweDFjLCAweDAwLCB7MHgxN30sIDF9LCBjb250cmFzdCBjb250cm9sICovCisJCQl7MHgxZCwgMHgwMCwgezB4ODB9LCAxfSwgLyogbW92aW5nIGNhdXNlcyBhIG1lc3MgKi8KKwkJCXsweDFlLCAweDAwLCB7MHgwOH0sIDF9LCAvKiBtb3ZpbmcgamFtcyB0aGUgY2FtZXJhICovCisJCQl7MHgxZiwgMHgwMCwgezB4MGN9LCAxfSwKKwkJCXsweDIwLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IyX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjJfaW5pdF9kYXRhKSk7CiAJfQogCXJldHVybiBlcnJfY29kZTsKIH0KQEAgLTgzNCw2ICs5NTIsNyBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIApAQCAtODkzLDcgKzEwMTIsNyBAQAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXhwb3N1cmU7CisJaW50IGV4cG9zdXJlID0gTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVDsKIAl1OCBidWZbMl07CiAKIAlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEVYUE9TVVJFX0lEWCkpCkBAIC05MDUsNiArMTAyNCwxMSBAQAogCQlleHBvc3VyZSA9IChzZC0+ZXhwb3N1cmUgKiA5MjY3KSAvIDEwMDAwICsgMzAwOwogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gNCk7CiAJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4MGYpOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDIpIHsKKwkJZXhwb3N1cmUgPSBzZC0+ZXhwb3N1cmU7CisJCWV4cG9zdXJlID4+PSAzOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gOCk7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4ZmYpOwogCX0gZWxzZSB7CiAJCS8qIFdlIGhhdmUgYm90aCBhIGNsb2NrIGRpdmlkZXIgYW5kIGFuIGV4cG9zdXJlIHJlZ2lzdGVyLgogCQkgICBXZSBmaXJzdCBjYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlkZXIsIGFzIHRoYXQgZGV0ZXJtaW5lcwpAQCAtOTQzLDE3ICsxMDY3LDM0IEBACiBzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZ2FpbnJlZzsKIAotCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgR0FJTl9JRFgpKQorCWlmICgoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEdBSU5fSURYKSkgJiYKKwkgICAgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkpKQogCQlyZXR1cm47CiAKLQlpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX0NJRiAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMSkgeworCWlmIChzZC0+Y2FtX3R5cGUgPT0gQ0FNX1RZUEVfQ0lGICYmIHNkLT5zZW5zb3JfdHlwZSA9PSAxKQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwZSwgc2QtPmdhaW4pOwotCX0gZWxzZSB7CisJZWxzZSBpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX1ZHQSAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMikKKwkJZm9yIChnYWlucmVnID0gMHgwYTsgZ2FpbnJlZyA8IDB4MTE7IGdhaW5yZWcgKz0gMikgeworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcsIHNkLT5nYWluID4+IDgpOworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcgKyAxLCBzZC0+Z2FpbiAmIDB4ZmYpOworCQl9CisJZWxzZQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4pOwotCX0KIH0KIAorc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCisJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MWMsIHNkLT5jb250cmFzdCk7Cit9CisKKwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEwMDgsNiArMTE0OSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRtaW5fY2xvY2tkaXYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IGI0Zjk2NTcuLmJjNGNlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTM4LDYgKzM4LDcgQEAKICAqLwogI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MTkiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CkBAIC03MCw2ICs3MSw5IEBACiAJY2hhciBpbnZlcnRfbGVkOwogI2RlZmluZSBCUklER0VfSU5WRVJUX0xFRAk4CiAKKwljaGFyIHNuYXBzaG90X3ByZXNzZWQ7CisJY2hhciBzbmFwc2hvdF9uZWVkc19yZXNldDsKKwogCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KIAlfX3U4IHNpZjsKIApAQCAtOTksMTAgKzEwMywxMiBAQAogI2RlZmluZSBTRU5fT1Y2NjMwOEFGIDUKICNkZWZpbmUgU0VOX09WNzYxMCA2CiAjZGVmaW5lIFNFTl9PVjc2MjAgNwotI2RlZmluZSBTRU5fT1Y3NjQwIDgKLSNkZWZpbmUgU0VOX09WNzY3MCA5Ci0jZGVmaW5lIFNFTl9PVjc2QkUgMTAKLSNkZWZpbmUgU0VOX09WODYxMCAxMQorI2RlZmluZSBTRU5fT1Y3NjIwQUUgOAorI2RlZmluZSBTRU5fT1Y3NjQwIDkKKyNkZWZpbmUgU0VOX09WNzY0OCAxMAorI2RlZmluZSBTRU5fT1Y3NjcwIDExCisjZGVmaW5lIFNFTl9PVjc2QkUgMTIKKyNkZWZpbmUgU0VOX09WODYxMCAxMwogCiAJdTggc2Vuc29yX2FkZHI7CiAJaW50IHNlbnNvcl93aWR0aDsKQEAgLTEzOSw2ICsxNDUsNyBAQAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3Qgc2QgKnNkKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTUzLDYgKzE2MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAl9LAorI2RlZmluZSBDT05UUkFTVF9JRFggMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULApAQCAtMTY3LDYgKzE3NSw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCisjZGVmaW5lIENPTE9SX0lEWCAyCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTI1NTQsNyArMjU2Myw3IEBACiAJCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KIAkJaWYgKGkyY19yKHNkLCAweDE1KSAmIDEpIHsKIAkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjIwQUU7CiAJCX0gZWxzZSB7CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NkJFOwpAQCAtMjU4OCw3ICsyNTk3LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgMHg0ODoKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKLQkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0ODsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiV4IiwgbG93KTsKQEAgLTI2ODAsNiArMjY4OSwzNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2RfcmVzZXRfc25hcHNob3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmICghc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0KQorCQlyZXR1cm47CisKKwkvKiBOb3RlIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNsZWFyIHNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCwKKwkgICBiZWZvcmUgYWN0dWFsbHkgY2xlYXJpbmcgdGhlIHNuYXBzaG90IHN0YXRlIGluIHRoZSBicmlkZ2UKKwkgICBvdGhlcndpc2Ugd2UgbWlnaHQgcmFjZSB3aXRoIHRoZSBwa3Rfc2NhbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDA7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9PVjUxMToKKwljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDApOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxODoKKwljYXNlIEJSSURHRV9PVjUxOFBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsgLyogUmVzZXQgKi8KKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDEpOyAvKiBFbmFibGUgKi8KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1Y1MTk6CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHg0MCk7CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHgwMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IHsKQEAgLTMxMTUsNyArMzE1NCwxMSBAQAogCQkJCSAgICAgICgxIDw8IE9WNzY3MF9GUkVRX0lEWCk7CiAJfQogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fAorCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpCisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgQVVUT0JSSUdIVF9JRFgpIHwKKwkJCQkgICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQogCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9IDEgPDwgQVVUT0JSSUdIVF9JRFg7CiAJLyogT1Y4NjEwIEZyZXF1ZW5jeSBmaWx0ZXIgY29udHJvbCBzaG91bGQgd29yayBidXQgbmVlZHMgdGVzdGluZyAqLwogCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApCkBAIC0zMTY5LDEwICszMjEyLDEyIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzYyMCwgQVJSQVlfU0laRShub3JtXzc2MjApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY0MCwgQVJSQVlfU0laRShub3JtXzc2NDApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKQEAgLTMyNDYsNyArMzI5MSw5IEBACiAJLyogTm90ZSBvbmNlIHRoZSBGSVhNRSdzIGluIG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncygpIGFyZSBmaXhlZAogCSAgIGZvciBtb3JlIHNlbnNvcnMgd2UgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVtIHRvbyAqLwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCWNhc2UgU0VOX09WNzZCRToKIAkJaWYgKHNkLT5nc3BjYV9kZXYud2lkdGggPT0gMzIwKQogCQkJaW50ZXJsYWNlZCA9IDE7CkBAIC0zMzc3LDcgKzM0MjQsNyBAQAogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX09WNTE4UExVUykgewogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5fT1Y3NjIwOgorCQljYXNlIFNFTl9PVjc2MjBBRToKIAkJCWlmIChzZC0+Z3NwY2FfZGV2LndpZHRoID09IDMyMCkgewogCQkJCXJlZ193KHNkLCAweDIwLCAweDAwKTsKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CkBAIC0zMzg2LDYgKzM0MzMsMTAgQEAKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxZik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBTRU5fT1Y3NjIwOgorCQkJcmVnX3coc2QsIDB4MjAsIDB4MDApOworCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CiAJCX0KQEAgLTM0ODgsNyArMzUzOSw4IEBACiAJCWlmICh3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5LAogCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSkpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8CisJCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpIHsKIAkJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCiAJCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9SMjBfREZSLCAweDEwLCAweDEwKTsKIAkJfQpAQCAtMzUwMyw2ICszNTU1LDkgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwICYmCiAJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwNCk7CisJZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4ICYmCisJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQorCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMSk7CiAJZWxzZQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMCk7CiAJcmVnX3coc2QsIE9WNTE5X1IxM19YX09GRlNFVEgsCTB4MDApOwpAQCAtMzUyMCw2ICszNTc1LDcgQEAKIAlzZC0+Y2xvY2tkaXYgPSAwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCXN3aXRjaCAoc2QtPmZyYW1lX3JhdGUpIHsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDMwOiAqLwpAQCAtMzY0OSw2ICszNzA1LDcgQEAKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNik7IC8qIEFXQjogMSBUZXN0IHBhdHRlcm46IDAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCWNhc2UgU0VOX09WNzZCRToKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKQEAgLTM2NjMsMTMgKzM3MjAsMTYgQEAKIAkJCWkyY193KHNkLCAweDM1LCBxdmdhID8gMHgxZSA6IDB4OWUpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDI4LCBxdmdhID8gMHgwMCA6IDB4MjAsIDB4MjApOwotLyoJCWkyY193KHNkLCAweDI0LCBxdmdhID8gMHgyMCA6IDB4M2EpOyAqLwotLyoJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOyAqLwotLyoJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7ICovCi0vKgkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsgKi8KLS8qCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOyAqLworCQkvKiBTZXR0aW5nIHRoaXMgdW5kb2N1bWVudGVkIGJpdCBpbiBxdmdhIG1vZGUgcmVtb3ZlcyBhIHZlcnkKKwkJICAgYW5ub3lpbmcgdmVydGljYWwgc2hha2luZyBvZiB0aGUgaW1hZ2UgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgyZCwgcXZnYSA/IDB4NDAgOiAweDAwLCAweDQwKTsKKwkJLyogVW5rbm93biAqLworCQlpMmNfd19tYXNrKHNkLCAweDY3LCBxdmdhID8gMHhmMCA6IDB4OTAsIDB4ZjApOworCQkvKiBBbGxvdyBoaWdoZXIgYXV0b21hdGljIGdhaW4gKHRvIGFsbG93IGhpZ2hlciBmcmFtZXJhdGVzKSAqLworCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDEyLCAweDA0LCAweDA0KTsgLyogQVdCOiAxICovCiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKQEAgLTM3OTUsMTEgKzM4NTUsMTMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KIAkJaHdlYmFzZSA9IDB4MmY7CiAJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaHdzYmFzZSA9IDB4MWE7CiAJCWh3ZWJhc2UgPSAweDFhOwogCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDM7CkBAIC0zODkzLDYgKzM5NTUsMTIgQEAKIAlzZXRhdXRvYnJpZ2h0bmVzcyhzZCk7CiAJc2V0ZnJlcShzZCk7CiAKKwkvKiBGb3JjZSBjbGVhciBzbmFwc2hvdCBzdGF0ZSBpbiBjYXNlIHRoZSBzbmFwc2hvdCBidXR0b24gd2FzCisJICAgcHJlc3NlZCB3aGlsZSB3ZSB3ZXJlbid0IHN0cmVhbWluZyAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CisJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKKwlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CisKIAlyZXQgPSBvdjUxeF9yZXN0YXJ0KHNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zOTE5LDYgKzM5ODcsMzQgQEAKIAkJdzk5NjhjZl9zdG9wMChzZCk7CiB9CiAKK3N0YXRpYyB2b2lkIG92NTF4X2hhbmRsZV9idXR0b24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNuYXBzaG90X3ByZXNzZWQgIT0gc3RhdGUpIHsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgc3RhdGUpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKyNlbmRpZgorCQlpZiAoc3RhdGUpCisJCQlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAxOworCisJCXNkLT5zbmFwc2hvdF9wcmVzc2VkID0gc3RhdGU7CisJfSBlbHNlIHsKKwkJLyogT24gdGhlIG92NTExIC8gb3Y1MTkgd2UgbmVlZCB0byByZXNldCB0aGUgYnV0dG9uIHN0YXRlCisJCSAgIG11bHRpcGxlIHRpbWVzLCBhcyByZXNldHRpbmcgZG9lcyBub3Qgd29yayBhcyBsb25nIGFzIHRoZQorCQkgICBidXR0b24gc3RheXMgcHJlc3NlZCAqLworCQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwkJY2FzZSBCUklER0VfT1Y1MTE6CisJCWNhc2UgQlJJREdFX09WNTExUExVUzoKKwkJY2FzZSBCUklER0VfT1Y1MTk6CisJCQlpZiAoc3RhdGUpCisJCQkJc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBvdjUxMV9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqaW4sCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtMzk0MCw2ICs0MDM2LDcgQEAKIAkgKi8KIAlpZiAoIShpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzRdIHwgaW5bNV0gfCBpbls2XSB8IGluWzddKSAmJgogCSAgICAoaW5bOF0gJiAweDA4KSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGluWzhdID4+IDIpICYgMSk7CiAJCWlmIChpbls4XSAmIDB4ODApIHsKIAkJCS8qIEZyYW1lIGVuZCAqLwogCQkJaWYgKChpbls5XSArIDEpICogOCAhPSBnc3BjYV9kZXYtPndpZHRoIHx8CkBAIC0zOTc3LDYgKzQwNzQsNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGRhdGFbNl0gPj4gMSkgJiAxKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKQEAgLTQwMjQsNiArNDEyMiw5IEBACiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZmYgJiYgZGF0YVsyXSA9PSAweGZmKSB7CiAJCXN3aXRjaCAoZGF0YVszXSkgewogCQljYXNlIDB4NTA6CQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJLyogRG9uJ3QgY2hlY2sgdGhlIGJ1dHRvbiBzdGF0ZSBoZXJlLCBhcyB0aGUgc3RhdGUKKwkJCSAgIHVzdWFsbHkgKGFsd2F5cyA/KSBjaGFuZ2VzIGF0IEVPRiBhbmQgY2hlY2tpbmcgaXQKKwkJCSAgIGhlcmUgbGVhZHMgdG8gdW5uZWNlc3Nhcnkgc25hcHNob3Qgc3RhdGUgcmVzZXRzLiAqLwogI2RlZmluZSBIRFJTWiAxNgogCQkJZGF0YSArPSBIRFJTWjsKIAkJCWxlbiAtPSBIRFJTWjsKQEAgLTQwMzUsNiArNDEzNiw3IEBACiAJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlyZXR1cm47CiAJCWNhc2UgMHg1MToJCS8qIGVuZCBvZiBmcmFtZSAqLworCQkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIGRhdGFbMTFdICYgMSk7CiAJCQlpZiAoZGF0YVs5XSAhPSAwKQogCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCkBAIC00MTAzLDkgKzQyMDUsMTEgQEAKIAljYXNlIFNFTl9PVjY2MzA6CiAJY2FzZSBTRU5fT1Y2NjMwOEFGOgogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLwogCQlpZiAoIXNkLT5hdXRvYnJpZ2h0bmVzcykKIAkJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKQEAgLTQxNDIsNyArNDI0Niw4IEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA1XSk7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5fT1Y3NjIwOiB7CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOiB7CiAJCXN0YXRpYyBjb25zdCBfX3U4IGN0YWJbXSA9IHsKIAkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCiAJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCkBAIC00MTUyLDEwICs0MjU3LDYgQEAKIAkJaTJjX3coc2QsIDB4NjQsIGN0YWJbdmFsID4+IDRdKTsKIAkJYnJlYWs7CiAJICAgIH0KLQljYXNlIFNFTl9PVjc2NDA6Ci0JCS8qIFVzZSBnYWluIGNvbnRyb2wgaW5zdGVhZC4gKi8KLQkJaTJjX3coc2QsIE9WNzYxMF9SRUdfR0FJTiwgdmFsID4+IDIpOwotCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CiAJCS8qIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBqdXN0IHRoZSBzYW1lIGFzIG92NzYxMCAqLwogCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19DT05UUkFTLCB2YWwgPj4gMSk7CkBAIC00MTc5LDYgKzQyODAsNyBAQAogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCiAvKgkJcmMgPSBvdl9pMmNfd3JpdGUoc2QtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOwogCQlpZiAocmMgPCAwKQpAQCAtNDE4Niw2ICs0Mjg4LDcgQEAKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCAmIDB4ZjApOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CkBAIC00MTk4LDcgKzQzMDEsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXRhdXRvYnJpZ2h0bmVzcyhzdHJ1Y3Qgc2QgKnNkKQogewotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDggfHwKKwkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CiAJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTApCiAJCXJldHVybjsKIApAQCAtNDQ3NSw5ICs0NTc5LDEzIEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfcmVzZXRfc25hcHNob3QsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLm90aGVyX2lucHV0ID0gMSwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC00NDk0LDcgKzQ2MDIsOCBAQAogCSAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMjhjKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTQpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKLQl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAorCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU1KSwKKwkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxMSB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE4IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTkpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAwYTZiOGYwLi45NTdlMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG92NTM0IGdzcGNhIGRyaXZlcgorICogb3Y1MzQtb3Y3NzJ4IGdzcGNhIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgpAQCAtNjgsMTIgKzY4LDcgQEAKIAlzOCBzaGFycG5lc3M7CiAJdTggaGZsaXA7CiAJdTggdmZsaXA7Ci0JdTggc2F0dXI7Ci0JdTggbGlnaHRmcmVxOwogCi0JdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKLSNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xMDEsMTIgKzk2LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292NzcyeFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAgICAgewkJCQkJCQkvKiAwICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMTUsOCArMTA2LDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCUklHSFRORVNTXzc3X0RFRiAyMAotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfNzdfREVGLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC0xMjksOCArMTIwLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBDT05UUkFTVF83N19ERUYgMzcKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF83N19ERUYsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAzNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCkBAIC0xNTcsOCArMTQ4LDggQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDI1NSwKIAkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzc3X0RFRiAxMjAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBFWFBPXzc3X0RFRiwKKyNkZWZpbmUgRVhQT19ERUYgMTIwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJLmdldCA9IHNkX2dldGV4cG9zdXJlLApAQCAtMjEzLDEzICsyMDQsMTMgQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDEsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fNzdfREVGIDAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl83N19ERUYsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGF1dG9nYWluLAogCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKICAgICB9LAotI2RlZmluZSBBV0JfNzdfSURYIDgKKyNkZWZpbmUgQVdCX0lEWCA4CiAgICAgewkJCQkJCQkvKiA4ICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKQEAgLTI0Miw4ICsyMzMsOCBAQAogCSAgICAubWluaW11bSA9IDAsCiAJICAgIC5tYXhpbXVtID0gNjMsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTXzc3X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzc3X0RFRiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJLmdldCA9IHNkX2dldHNoYXJwbmVzcywKQEAgLTI3NywxMDcgKzI2OCw2IEBACiAJLmdldCA9IHNkX2dldHZmbGlwLAogICAgIH0sCiB9Owotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292OTY1eFtdID0gewotICAgIHsJCQkJCQkJLyogMCAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU185Nl9ERUYgNwotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCi0JLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCi0gICAgfSwKLSAgICB7CQkJCQkJCS8qIDEgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfOTZfREVGIDMKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCi0JLmdldCA9IHNkX2dldGNvbnRyYXN0LAotICAgIH0sCi0gICAgewkJCQkJCQkvKiAyICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG9nYWluIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fOTZfREVGIDEKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCi0JLmdldCA9IHNkX2dldGF1dG9nYWluLAotICAgIH0sCi0jZGVmaW5lIEVYUE9fOTZfSURYIDMKLSAgICB7CQkJCQkJCS8qIDMgKi8KLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfRVhQT1NVUkUsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiRXhwb3N1cmUiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMywKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzk2X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT185Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCi0JLmdldCA9IHNkX2dldGV4cG9zdXJlLAotICAgIH0sCi0gICAgewkJCQkJCQkvKiA0ICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJTaGFycG5lc3MiLAotCSAgICAubWluaW11bSA9IC0xLAkJLyogLTEgPSBhdXRvICovCi0JICAgIC5tYXhpbXVtID0gNCwKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfOTZfREVGIC0xCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzk2X0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCi0JLmdldCA9IHNkX2dldHNoYXJwbmVzcywKLSAgICB9LAotICAgIHsJCQkJCQkJLyogNSAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNCwKLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTQVRVUl9ERUYgMgotCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSX0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzYXR1ciwKLQkuZ2V0ID0gc2RfZ2V0c2F0dXIsCi0gICAgfSwKLSAgICB7Ci0JewotCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKLQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBGUkVRX0RFRiAwCi0JCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZnJlcSwKLQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKLSAgICB9LAotfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y3NzJ4X21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCkBAIC0zOTIsMzUgKzI4MiwyMSBAQAogCSAucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y5NjV4X21vZGVbXSA9IHsKLQl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JIC5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSA0fSwKLQl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA2NDAsCi0JIC5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAzfSwKLQl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA4MDAsCi0JIC5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAyfSwKLQl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gMTAyNCwKLQkgLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAxfSwKLQl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKLQkgLmJ5dGVzcGVybGluZSA9IDEyODAsCi0JIC5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCAqIDMgLyA4ICsgNTkwLAotCSAuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCSAucHJpdiA9IDB9LAorc3RhdGljIGNvbnN0IHU4IHF2Z2FfcmF0ZXNbXSA9IHsxMjUsIDEwMCwgNzUsIDYwLCA1MCwgNDAsIDMwfTsKK3N0YXRpYyBjb25zdCB1OCB2Z2FfcmF0ZXNbXSA9IHs2MCwgNTAsIDQwLCAzMCwgMTV9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgb3Y3NzJ4X2ZyYW1lcmF0ZXNbXSA9IHsKKwl7IC8qIDMyMHgyNDAgKi8KKwkJLnJhdGVzID0gcXZnYV9yYXRlcywKKwkJLm5yYXRlcyA9IEFSUkFZX1NJWkUocXZnYV9yYXRlcyksCisJfSwKKwl7IC8qIDY0MHg0ODAgKi8KKwkJLnJhdGVzID0gdmdhX3JhdGVzLAorCQkubnJhdGVzID0gQVJSQVlfU0laRSh2Z2FfcmF0ZXMpLAorCX0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3NzJ4W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKIAl7IDB4YzIsIDB4MGMgfSwKIAl7IDB4ODgsIDB4ZjggfSwKIAl7IDB4YzMsIDB4NjkgfSwKQEAgLTQ3OCw3ICszNTQsNyBAQAogCXsgMHhjMSwgMHgzYyB9LAogCXsgMHhjMiwgMHgwYyB9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjc3MnhbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdWzJdID0gewogCXsgMHgxMiwgMHg4MCB9LAogCXsgMHgxMSwgMHgwMSB9LAogLypmaXhtZTogYmV0dGVyIGhhdmUgYSBkZWxheT8qLwpAQCAtNTcxLDcgKzQ0Nyw3IEBACiAJeyAweDhlLCAweDAwIH0sCQkvKiBEZS1ub2lzZSB0aHJlc2hvbGQgKi8KIAl7IDB4MGMsIDB4ZDAgfQogfTsKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTU4Miw3ICs0NTgsNyBAQAogCXsweGMwLCAweDUwfSwKIAl7MHhjMSwgMHgzY30sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X3ZnYVtdWzJdID0gewogCXsweDEyLCAweDAwfSwKIAl7MHgxNywgMHgyNn0sCiAJezB4MTgsIDB4YTB9LApAQCAtNTkyLDcgKzQ2OCw3IEBACiAJezB4MmMsIDB4ZjB9LAogCXsweDY1LCAweDIwfSwKIH07Ci1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTYwMyw3ICs0NzksNyBAQAogCXsweGMwLCAweDI4fSwKIAl7MHhjMSwgMHgxZX0sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9xdmdhW11bMl0gPSB7CiAJezB4MTIsIDB4NDB9LAogCXsweDE3LCAweDNmfSwKIAl7MHgxOCwgMHg1MH0sCkBAIC02MTQsNTcxICs0OTAsNiBAQAogCXsweDY1LCAweDJmfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhbXVsyXSA9IHsKLQl7MHg4OCwgMHhmOH0sCi0JezB4ODksIDB4ZmZ9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwM30sCi0JezB4OTUsIDB4MTB9LAotCXsweGUyLCAweDAwfSwKLQl7MHhlNywgMHgzZX0sCi0JezB4OGQsIDB4MWN9LAotCXsweDhlLCAweDAwfSwKLQl7MHg4ZiwgMHgwMH0sCi0JezB4MWYsIDB4MDB9LAotCXsweGMzLCAweGY5fSwKLQl7MHg4OSwgMHhmZn0sCi0JezB4ODgsIDB4Zjh9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwMX0sCi0JezB4OTMsIDB4MTh9LAotCXsweDFjLCAweDBhfSwKLQl7MHgxZCwgMHg0OH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4ZTcsIDB4MmV9LAotCXsweDMxLCAweGY5fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDI1LCAweDQyfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4W11bMl0gPSB7Ci0JezB4MTIsIDB4ODB9LAkvKiBjb203IC0gU1NDQiByZXNldCAqLwotCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLwotCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLwotCXsweDAyLCAweDgwfSwJLyogcmVkICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KLQl7MHgwYiwgMHg1N30sCS8qIHZlciAqLwotCXsweDBlLCAweDYxfSwJLyogY29tNSAqLwotCXsweDBmLCAweDQyfSwJLyogY29tNiAqLwotCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSAxNWZwcyBWR0EgWVVZViAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4MTYsIDB4MjR9LAkvKiByZWcxNiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDI0LCAweDNjfSwJLyogYWV3ICovCi0JezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KLQl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLwotCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KLQl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLwotCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCi0JezB4MmEsIDB4MDB9LAkvKiBleGhjaCAqLwotCXsweDJiLCAweDAwfSwJLyogZXhoY2wgKi8KLQl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCi0JezB4MzQsIDB4M2Z9LAkvKiBhcmVmMSAqLwotCXsweDM1LCAweDAwfSwJLyogYXJlZjIgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4MzgsIDB4NzJ9LAkvKiBhZGMyICovCi0JezB4MzksIDB4NTd9LAkvKiBhcmVmNCAqLwotCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KLQl7MHgzZiwgMHhjMX0sCS8qIGVkZ2UgKi8KLQl7MHg0MCwgMHhjMH0sCS8qIGNvbTE1ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDQyLCAweGMwfSwJLyogY29tMTcgKi8KLQl7MHg0MywgMHgwYX0sCS8qIHJzdmQgKi8KLQl7MHg0NCwgMHhmMH0sCi0JezB4NDUsIDB4NDZ9LAotCXsweDQ2LCAweDYyfSwKLQl7MHg0NywgMHgyYX0sCi0JezB4NDgsIDB4M2N9LAotCXsweDRhLCAweGZjfSwKLQl7MHg0YiwgMHhmY30sCi0JezB4NGMsIDB4N2Z9LAotCXsweDRkLCAweDdmfSwKLQl7MHg0ZSwgMHg3Zn0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwJLyogbWF0cml4IGNvZWYgc2lnbiAqLwotCXsweDU5LCAweDg1fSwJLyogQVdCIGNvbnRyb2wgKi8KLQl7MHg1YSwgMHhhOX0sCi0JezB4NWIsIDB4NjR9LAotCXsweDVjLCAweDg0fSwKLQl7MHg1ZCwgMHg1M30sCi0JezB4NWUsIDB4MGV9LAotCXsweDVmLCAweGYwfSwJLyogQVdCIGJsdWUgbGltaXQgKi8KLQl7MHg2MCwgMHhmMH0sCS8qIEFXQiByZWQgbGltaXQgKi8KLQl7MHg2MSwgMHhmMH0sCS8qIEFXQiBncmVlbiBsaW1pdCAqLwotCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLwotCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLwotCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLwotCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLwotCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLwotCXsweDY5LCAweDAyfSwJLyogaHYgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KLQl7MHg2YywgMHgwNH0sCi0JezB4NmQsIDB4NTV9LAotCXsweDZlLCAweDAwfSwKLQl7MHg2ZiwgMHg5ZH0sCi0JezB4NzAsIDB4MjF9LAkvKiBkbnN0aCAqLwotCXsweDcxLCAweDc4fSwKLQl7MHg3MiwgMHgwMH0sCS8qIHBvaWR4ICovCi0JezB4NzMsIDB4MDF9LAkvKiBwY2tkdiAqLwotCXsweDc0LCAweDNhfSwJLyogeGluZHggKi8KLQl7MHg3NSwgMHgzNX0sCS8qIHlpbmR4ICovCi0JezB4NzYsIDB4MDF9LAotCXsweDc3LCAweDAyfSwKLQl7MHg3YSwgMHgxMn0sCS8qIGdhbW1hIGN1cnZlICovCi0JezB4N2IsIDB4MDh9LAotCXsweDdjLCAweDE2fSwKLQl7MHg3ZCwgMHgzMH0sCi0JezB4N2UsIDB4NWV9LAotCXsweDdmLCAweDcyfSwKLQl7MHg4MCwgMHg4Mn0sCi0JezB4ODEsIDB4OGV9LAotCXsweDgyLCAweDlhfSwKLQl7MHg4MywgMHhhNH0sCi0JezB4ODQsIDB4YWN9LAotCXsweDg1LCAweGI4fSwKLQl7MHg4NiwgMHhjM30sCi0JezB4ODcsIDB4ZDZ9LAotCXsweDg4LCAweGU2fSwKLQl7MHg4OSwgMHhmMn0sCi0JezB4OGEsIDB4MDN9LAotCXsweDhjLCAweDg5fSwJLyogY29tMTkgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHg5MCwgMHg3ZH0sCi0JezB4OTEsIDB4N2J9LAotCXsweDlkLCAweDAzfSwJLyogbGNjNiAqLwotCXsweDllLCAweDA0fSwJLyogbGNjNyAqLwotCXsweDlmLCAweDdhfSwKLQl7MHhhMCwgMHg3OX0sCi0JezB4YTEsIDB4NDB9LAkvKiBhZWNobSAqLwotCXsweGE0LCAweDUwfSwJLyogY29tMjEgKi8KLQl7MHhhNSwgMHg2OH0sCS8qIGNvbTI2ICovCi0JezB4YTYsIDB4NGF9LAkvKiBBV0IgZ3JlZW4gKi8KLQl7MHhhOCwgMHhjMX0sCS8qIHJlZmE4ICovCi0JezB4YTksIDB4ZWZ9LAkvKiByZWZhOSAqLwotCXsweGFhLCAweDkyfSwKLQl7MHhhYiwgMHgwNH0sCi0JezB4YWMsIDB4ODB9LAkvKiBibGFjayBsZXZlbCBjb250cm9sICovCi0JezB4YWQsIDB4ODB9LAotCXsweGFlLCAweDgwfSwKLQl7MHhhZiwgMHg4MH0sCi0JezB4YjIsIDB4ZjJ9LAotCXsweGIzLCAweDIwfSwKLQl7MHhiNCwgMHgyMH0sCS8qIGN0cmxiNCAqLwotCXsweGI1LCAweDAwfSwKLQl7MHhiNiwgMHhhZn0sCi0JezB4YmIsIDB4YWV9LAotCXsweGJjLCAweDdmfSwJLyogQURDIGNoYW5uZWwgb2Zmc2V0cyAqLwotCXsweGRiLCAweDdmfSwKLQl7MHhiZSwgMHg3Zn0sCi0JezB4YmYsIDB4N2Z9LAotCXsweGMwLCAweGUyfSwKLQl7MHhjMSwgMHhjMH0sCi0JezB4YzIsIDB4MDF9LAotCXsweGMzLCAweDRlfSwKLQl7MHhjNiwgMHg4NX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweGM5LCAweGUwfSwKLQl7MHhjYSwgMHhlOH0sCi0JezB4Y2IsIDB4ZjB9LAotCXsweGNjLCAweGQ4fSwKLQl7MHhjZCwgMHhmMX0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwKLQl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQotCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KLQl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MGF9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMH0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAotCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLwotCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4YWF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0gewotCXsweDNiLCAweGM0fSwKLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwNX0sCi0JezB4YzUsIDB4MDd9LAotCXsweGEyLCAweDRifSwKLQl7MHhhMywgMHgzZX0sCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCi0vKiBzaGFycG5lc3MgKi8KLQl7MHgzZiwgMHgwMX0sCi0JezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLwotCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KLS8qIHNhdHVyYXRpb24gKi8KLQl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLwotCXsweDUwLCAweDk4fSwKLQl7MHg1MSwgMHgwMH0sCi0JezB4NTIsIDB4Mjh9LAotCXsweDUzLCAweDcwfSwKLQl7MHg1NCwgMHg5OH0sCi0JezB4NTgsIDB4MWF9LAotCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0vKiBjb250cmFzdCAqLwotCXsweDU2LCAweDQwfSwKLS8qIGJyaWdodG5lc3MgKi8KLQl7MHg1NSwgMHg4Zn0sCi0vKiBleHBvICovCi0JezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYVtdWzJdID0gewkvKiBzYW1lIGZvciBxdmdhICovCi0JezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLwotCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAwfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhhYX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSBZVVlWIC0gVkdBIDE1IGZ1bGwgcmVzb2x1dGlvbiAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4MGR9LAkvKiBjb20yMiAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYVtdWzJdID0gewotCXsweDEyLCAweDAyfSwJLyogY29tNyAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfcXZnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0KLQl7MHhjMiwgMHg0Y30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAwfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDc4fSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweDUwfSwKLQl7MHg1YiwgMHgzY30sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF92Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHg1MH0sCi0JezB4YzEsIDB4M2N9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDRjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweDQwfSwKLQl7MHg1MiwgMHgwMH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHg4OH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAwfSwKLQl7MHg1YSwgMHhjOH0sCi0JezB4NWIsIDB4OTZ9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4ZGEsIDB4MDB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4NGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4NDB9LAotCXsweDUyLCAweDAwfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDg4fSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDF9LAotCXsweDVhLCAweDAwfSwKLQl7MHg1YiwgMHhjMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHhkYSwgMHgwMX0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfc3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHhkYSwgMHgwMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2FbXVsyXSA9IHsKLQl7MHgzYiwgMHhlNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDk2fSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDdkfSwJLyogYmQ2MCAqLwotCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwKLQl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYVtdWzJdID0gewotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTEsIDB4MDN9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDA1fSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwN30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGJ9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4M2V9LAkvKiBiZDYwICovCi0KLQl7MHgyZCwgMHgwMH0sCS8qIGFkdmZsICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCi0JezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KLQl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYVtdWzJdID0gewotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCi19OwotCiBzdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKQEAgLTEzNjAsMTQgKzY3MSwxNCBAQAogCVBERUJVRyhEX1BST0JFLCAiZnJhbWVfcmF0ZTogJWQiLCByLT5mcHMpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg5Qiwgc2QtPmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdF83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDAxLDcgKzcxMiw3IEBACiAJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDAwLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRleHBvc3VyZV83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0MzIsNyArNzQzLDcgQEAKIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MDEsIHNkLT5odWUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRhdXRvZ2Fpbl83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDU3LDcgKzc2OCw3IEBACiAJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg2MywgMHhhYSk7CS8qIEFXQiBvZmYgKi8KIH0KIAotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0OTEsMTMyICs4MDIsNiBAQAogCQkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBjKSAmIDB4N2YpOwogfQogCi0vKiBvdjk2NXggc3BlY2lmaWMgY29udHJvbHMgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3NfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0KLQl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKLQlpZiAodmFsIDwgOCkKLQkJdmFsID0gMTUgLSB2YWw7CQkvKiBmIC4uIDggKi8KLQllbHNlCi0JCXZhbCA9IHZhbCAtIDg7CQkvKiAwIC4uIDcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTUsCS8qIGJydG4gLSBicmlnaHRuZXNzIGFkanVzdG1lbnQgKi8KLQkJCTB4MGYgfCAodmFsIDw8IDQpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Y29udHJhc3RfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KLQkJCXNkLT5jb250cmFzdCA8PCA0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmVfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0Jc3RhdGljIGNvbnN0IHU4IGV4cG9bNF0gPSB7MHgwMCwgMHgyNSwgMHgzOCwgMHg1ZX07Ci0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KLQkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhhMSwgdmFsICYgMHhlMCk7CS8qIGFlY1sxNToxMF0gPSAwICovCi19Ci0KLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzc185NihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXM4IHZhbDsKLQotCXZhbCA9IHNkLT5zaGFycG5lc3M7Ci0JaWYgKHZhbCA8IDApIHsJCQkJLyogYXV0byAqLwotCQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCi0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsIHwgMHg0MCk7Ci0JCQkJLyogRWRnZSBlbmhhbmNlbWVudCBzdHJlbmd0aCBhdXRvIGFkanVzdCAqLwotCQlyZXR1cm47Ci0JfQotCWlmICh2YWwgIT0gMCkKLQkJdmFsID0gMSA8PCAodmFsIC0gMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KLQkJCXZhbCk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGF1dG9nYWluXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0vKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLwotCXZhbCA9IHNkLT5hdXRvZ2FpbjsKLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlpZiAoc2QtPmF1dG9nYWluKQotCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLwotCWVsc2UKLQkJdmFsICY9IDB4ZmE7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDEsIHZhbDIsIHZhbDM7Ci0Jc3RhdGljIGNvbnN0IHU4IG1hdHJpeFs1XVsyXSA9IHsKLQkJezB4MTQsIDB4Mzh9LAotCQl7MHgxZSwgMHg1NH0sCi0JCXsweDI4LCAweDcwfSwKLQkJezB4MzIsIDB4OGN9LAotCQl7MHg0OCwgMHg5MH0KLQl9OwotCi0JdmFsMSA9IG1hdHJpeFtzZC0+c2F0dXJdWzBdOwotCXZhbDIgPSBtYXRyaXhbc2QtPnNhdHVyXVsxXTsKLQl2YWwzID0gdmFsMSArIHZhbDI7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDRmLCB2YWwzKTsJLyogbWF0cml4IGNvZWZmICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTEsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MiwgdmFsMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTQsIHZhbDMpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1OCwgMHgxYSk7CS8qIG10eHMgLSBjb2VmZiBzaWducyAqLwotCXZhbDEgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0MSk7CS8qIGNvbTE2ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMCkgewotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCAmIDB4ZGYpOwotCQlyZXR1cm47Ci0JfQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7Ci0KLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMSkKLQkJdmFsIHw9IDB4MDE7Ci0JZWxzZQotCQl2YWwgJj0gMHhmZTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCk7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xNjI0LDc3ICs4MDksNTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0Jc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKLQogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IG92NzcyeF9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+Y2FtX21vZGUgPSBvdjc3MnhfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+bW9kZV9mcmFtZXJhdGVzID0gb3Y3NzJ4X2ZyYW1lcmF0ZXM7CiAKLQkJY2FtLT5idWxrID0gMTsKLQkJY2FtLT5idWxrX3NpemUgPSAxNjM4NDsKLQkJY2FtLT5idWxrX251cmJzID0gMjsKLQl9IGVsc2UgewkJLyogb3Y5NjV4ICovCi0JCWNhbS0+Y2FtX21vZGUgPSBvdjk2NXhfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKLQl9CisJY2FtLT5idWxrID0gMTsKKwljYW0tPmJ1bGtfc2l6ZSA9IDE2Mzg0OworCWNhbS0+YnVsa19udXJicyA9IDI7CiAKIAlzZC0+ZnJhbWVfcmF0ZSA9IDMwOwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfNzdfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF83N19ERUY7Ci0JCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0JCXNkLT5leHBvc3VyZSA9IEVYUE9fNzdfREVGOwotCQlzZC0+cmVkYmxjID0gUkVEX0JBTEFOQ0VfREVGOwotCQlzZC0+Ymx1ZWJsYyA9IEJMVUVfQkFMQU5DRV9ERUY7Ci0JCXNkLT5odWUgPSBIVUVfREVGOwotI2lmIEFVVE9HQUlOXzc3X0RFRiAhPSAwCi0JCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOXzc3X0RFRjsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Z2FpbiA9IEdBSU5fREVGOworCXNkLT5leHBvc3VyZSA9IEVYUE9fREVGOworCXNkLT5yZWRibGMgPSBSRURfQkFMQU5DRV9ERUY7CisJc2QtPmJsdWVibGMgPSBCTFVFX0JBTEFOQ0VfREVGOworCXNkLT5odWUgPSBIVUVfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogI2Vsc2UKLQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7CisJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCX0lEWCk7CiAjZW5kaWYKICNpZiBBV0JfREVGICE9IDAKLQkJc2QtPmF3YiA9IEFXQl9ERUYKKwlzZC0+YXdiID0gQVdCX0RFRgogI2VuZGlmCi0jaWYgU0hBUlBORVNTXzc3X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfNzdfREVGOworI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogI2VuZGlmCiAjaWYgSEZMSVBfREVGICE9IDAKLQkJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKICNlbmRpZgogI2lmIFZGTElQX0RFRiAhPSAwCi0JCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CiAjZW5kaWYKLQl9IGVsc2UgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfOTZfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF85Nl9ERUY7Ci0jaWYgQVVUT0dBSU5fOTZfREVGICE9IDAKLQkJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fOTZfREVGOwotCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0jZW5kaWYKLSNpZiBFWFBPXzk2X0RFRiAhPSAwCi0JCXNkLT5leHBvc3VyZSA9IEVYUE9fOTZfREVGOwotI2VuZGlmCi0jaWYgU0hBUlBORVNTXzk2X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfOTZfREVGOwotI2VuZGlmCi0JCXNkLT5zYXR1ciA9IFNBVFVSX0RFRjsKLQkJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwotCX0KKwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXUxNiBzZW5zb3JfaWQ7Ci0Jc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0gewotCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLwotCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLwotCX07CiAKIAkvKiByZXNldCBicmlkZ2UgKi8KIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKQEAgLTE3MDIsOCArODYwLDcgQEAKIAltc2xlZXAoMTAwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCi0JCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLCAweDQyKTsKIAogCS8qIHJlc2V0IHNlbnNvciAqLwogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCk7CkBAIC0xNzE3LDY0ICs4NzQsNDYgQEAKIAlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CiAKIAkvKiBpbml0aWFsaXplICovCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NzJYOgotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzcyeCkpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzcyeCkpOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCi0JCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKLQkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCX0KKwlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0LAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdCkpOworCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdCwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXQpKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3N0YXJ0X292NzcyeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgbW9kZTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlpZiAobW9kZSAhPSAwKSB7CS8qIDMyMHgyNDAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3F2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfcXZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9xdmdhKSk7CiAJfSBlbHNlIHsJCS8qIDY0MHg0ODAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjc3MnhfdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X3ZnYSkpOwogCX0KIAlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCi0Jc2V0YXV0b2dhaW5fNzcoZ3NwY2FfZGV2KTsKKwlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXNldGF3Yihnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIAlzZXRyZWRibGMoZ3NwY2FfZGV2KTsKIAlzZXRibHVlYmxjKGdzcGNhX2Rldik7CiAJc2V0aHVlKGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfNzcoZ3NwY2FfZGV2KTsKLQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0Jc2V0Y29udHJhc3RfNzcoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCXNldHZmbGlwKGdzcGNhX2Rldik7CiAJc2V0aGZsaXAoZ3NwY2FfZGV2KTsKIApAQCAtMTc4Myw4MSArOTIyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc3RhcnRfb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgbW9kZTsKLQotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQlzd2l0Y2ggKG1vZGUpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSA0OgkJCSAqIDMyMHgyNDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfcXZnYSkpOwotCQlicmVhazsKLQljYXNlIDM6CQkJLyogNjQweDQ4MCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF92Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJCS8qIDgwMHg2MDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfc3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhKSk7Ci0JCWJyZWFrOwotCWNhc2UgMToJCQkvKiAxMDI0eDc2OCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfeGdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF94Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSkpOwotCQlicmVhazsKLQljYXNlIDA6CQkJLyogMTI4MHgxMDI0ICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYSkpOwotCQlicmVhazsKLQl9Ci0Jc2V0ZnJlcShnc3BjYV9kZXYpOwotCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0Jc2V0YnJpZ2h0bmVzc185Nihnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzYXR1cihnc3BjYV9kZXYpOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZF9zdG9wTl9vdjc3Mngoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwogCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RvcE5fb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci19Ci0KIC8qIFZhbHVlcyBmb3IgYm1IZWFkZXJJbmZvIChWaWRlbyBhbmQgU3RpbGwgSW1hZ2UgUGF5bG9hZCBIZWFkZXJzLCAyLjQuMy4zKSAqLwogI2RlZmluZSBVVkNfU1RSRUFNX0VPSAkoMSA8PCA3KQogI2RlZmluZSBVVkNfU1RSRUFNX0VSUgkoMSA8PCA2KQpAQCAtMTg3NSwxMSArOTQ1LDkgQEAKIAlfX3UzMiB0aGlzX3B0czsKIAl1MTYgdGhpc19maWQ7CiAJaW50IHJlbWFpbmluZ19sZW4gPSBsZW47Ci0JaW50IHBheWxvYWRfbGVuOwogCi0JcGF5bG9hZF9sZW4gPSBnc3BjYV9kZXYtPmNhbS5idWxrID8gMjA0OCA6IDIwNDA7CiAJZG8gewotCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgcGF5bG9hZF9sZW4pOworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0OCk7CiAKIAkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKIAkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUwpAQCAtMTkxOCw3ICs5ODYsMTcgQEAKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KIAkJfSBlbHNlIGlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKIAkJCXNkLT5sYXN0X3B0cyA9IDA7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQlpZiAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEgKyAobGVuIC0gMTIpICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJ3cm9uZyBzaXplZCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAogCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKIAkJfSBlbHNlIHsKQEAgLTE5NjUsMTIgKzEwNDMsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5leHBvc3VyZSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGV4cG9zdXJlXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGV4cG9zdXJlXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4NywxMiArMTA2MSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGJyaWdodG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQl9CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDksMTIgKzEwNzksOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGNvbnRyYXN0Xzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyNiw0MSArMTA5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPnNhdHVyID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0c2F0dXIoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5zYXR1cjsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+bGlnaHRmcmVxID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0ZnJlcShnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+bGlnaHRmcmVxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNkX3NldHJlZGJsYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yMTIyLDIyICsxMTUzLDE0IEBACiAJc2QtPmF1dG9nYWluID0gdmFsOwogCiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKIAotCQkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKLQkJCSAqIHdoZW4gYXV0byBnYWluIGlzIHNldCAqLwotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQlzZXRhdXRvZ2Fpbl83Nyhnc3BjYV9kZXYpOwotCQl9IGVsc2UgewotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEVYUE9fOTZfSURYKTsKLQkJCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0JCX0KKwkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKKwkJICogd2hlbiBhdXRvIGdhaW4gaXMgc2V0ICovCisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl9JRFgpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzMsMTIgKzExOTYsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5zaGFycG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKLQkJZWxzZQotCQkJc2V0c2hhcnBuZXNzXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNTcsNyArMTI3Niw3IEBACiAKIAkvKiBTZXQgcmVxdWVzdGVkIGZyYW1lcmF0ZSAqLwogCXNkLT5mcmFtZV9yYXRlID0gdHBmLT5kZW5vbWluYXRvciAvIHRwZi0+bnVtZXJhdG9yOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZyAmJiBzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCiAJLyogUmV0dXJuIHRoZSBhY3R1YWwgZnJhbWVyYXRlICovCkBAIC0yMjY3LDU3ICsxMjg2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKLXsKLQlzd2l0Y2ggKG1lbnUtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKLQkJc3dpdGNoIChtZW51LT5pbmRleCkgewotCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKLQkJCXJldHVybiAwOwotCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCi0JCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292NzcyeCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAotCS5jdHJscyAgICA9IHNkX2N0cmxzX292NzcyeCwKLQkubmN0cmxzICAgPSBBUlJBWV9TSVpFKHNkX2N0cmxzX292NzcyeCksCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCiAJLmNvbmZpZyAgID0gc2RfY29uZmlnLAogCS5pbml0ICAgICA9IHNkX2luaXQsCi0JLnN0YXJ0ICAgID0gc2Rfc3RhcnRfb3Y3NzJ4LAotCS5zdG9wTiAgICA9IHNkX3N0b3BOX292NzcyeCwKKwkuc3RhcnQgICAgPSBzZF9zdGFydCwKKwkuc3RvcE4gICAgPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZ2V0X3N0cmVhbXBhcm0gPSBzZF9nZXRfc3RyZWFtcGFybSwKIAkuc2V0X3N0cmVhbXBhcm0gPSBzZF9zZXRfc3RyZWFtcGFybSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1eCA9IHsKLQkubmFtZSAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgPSBzZF9jdHJsc19vdjk2NXgsCi0JLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJsc19vdjk2NXgpLAotCS5jb25maWcgICA9IHNkX2NvbmZpZywKLQkuaW5pdCAgICAgPSBzZF9pbml0LAotCS5zdGFydCAgICA9IHNkX3N0YXJ0X292OTY1eCwKLQkuc3RvcE4gICAgPSBzZF9zdG9wTl9vdjk2NXgsCi0JLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCi0JLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKLX07Ci0KIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y5NjVYfSwKLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9PVjc3Mlh9LAorCXtVU0JfREVWSUNFKDB4MTQxNSwgMHgyMDAwKX0sCiAJe30KIH07CiAKQEAgLTIzMjYsMTEgKzEzMTEsNyBAQAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KIHN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAotCQkJCWlkLT5kcml2ZXJfaW5mbyA9PSBTRU5TT1JfT1Y3NzJYCi0JCQkJCT8gJnNkX2Rlc2Nfb3Y3NzJ4Ci0JCQkJCTogJnNkX2Rlc2Nfb3Y5NjV4LAotCQkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKIAkJCQlUSElTX01PRFVMRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jCkBAIC0wLDAgKzEsMTQ3NyBAQAorLyoKKyAqIG92NTM0LW92OTY1eCBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICoKKyAqIEJhc2VkIG9uIGEgcHJvdG90eXBlIHdyaXR0ZW4gYnkgTWFyayBGZXJyZWxsIDxtYWpvcnRyaXBzQGdtYWlsLmNvbT4KKyAqIFVTQiBwcm90b2NvbCByZXZlcnNlIGVuZ2luZWVyZWQgYnkgSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBodHRwczovL2ppbS5zaC9zdm4vamltL2RldmwvcGxheXN0YXRpb24vcHMzL2V5ZS90ZXN0LworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MzRfOSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiBzZW5zb3IgYWRkcmVzcyAqLworI2RlZmluZSBPVjUzNF9SRUdfU1VCQUREUgkweGYyCisjZGVmaW5lIE9WNTM0X1JFR19XUklURQkJMHhmMworI2RlZmluZSBPVjUzNF9SRUdfUkVBRAkJMHhmNAorI2RlZmluZSBPVjUzNF9SRUdfT1BFUkFUSU9OCTB4ZjUKKyNkZWZpbmUgT1Y1MzRfUkVHX1NUQVRVUwkweGY2CisKKyNkZWZpbmUgT1Y1MzRfT1BfV1JJVEVfMwkweDM3CisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzIJMHgzMworI2RlZmluZSBPVjUzNF9PUF9SRUFEXzIJCTB4ZjkKKworI2RlZmluZSBDVFJMX1RJTUVPVVQgNTAwCisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvT1Y1MzRfOSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCV9fdTMyIGxhc3RfcHRzOworCXU4IGxhc3RfZmlkOworCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBleHBvc3VyZTsKKwlzOCBzaGFycG5lc3M7CisJdTggc2F0dXI7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisgICAgewkJCQkJCQkvKiAwICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA3CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKyAgICB9LAorICAgIHsJCQkJCQkJLyogMSAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDIgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0b2dhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKKwkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisgICAgfSwKKyNkZWZpbmUgRVhQT19JRFggMworICAgIHsJCQkJCQkJLyogMyAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJFeHBvc3VyZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAzLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEVYUE9fREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDQgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNoYXJwbmVzcyIsCisJCS5taW5pbXVtID0gLTEsCQkvKiAtMSA9IGF1dG8gKi8KKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgLTEKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorICAgIH0sCisgICAgewkJCQkJCQkvKiA1ICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSX0RFRiAyCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNhdHVyLAorCS5nZXQgPSBzZF9nZXRzYXR1ciwKKyAgICB9LAorICAgIHsKKwl7CisJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRmcmVxLAorCS5nZXQgPSBzZF9nZXRmcmVxLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjk2NXhfbW9kZVtdID0geworI2RlZmluZSBRVkdBX01PREUgMAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgVkdBX01PREUgMQorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgU1ZHQV9NT0RFIDIKKwl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFhHQV9NT0RFIDMKKwl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTAyNCwKKwkJLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFNYR0FfTU9ERSA0CisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKKwl7MHg4OCwgMHhmOH0sCisJezB4ODksIDB4ZmZ9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwM30sCisJezB4OTUsIDB4MTB9LAorCXsweGUyLCAweDAwfSwKKwl7MHhlNywgMHgzZX0sCisJezB4OGQsIDB4MWN9LAorCXsweDhlLCAweDAwfSwKKwl7MHg4ZiwgMHgwMH0sCisJezB4MWYsIDB4MDB9LAorCXsweGMzLCAweGY5fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4ODgsIDB4Zjh9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwMX0sCisJezB4OTMsIDB4MTh9LAorCXsweDFjLCAweDBhfSwKKwl7MHgxZCwgMHg0OH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHgzNCwgMHgwNX0sCisJezB4ZTcsIDB4MmV9LAorCXsweDMxLCAweGY5fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDI1LCAweDQyfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSBTU0NCIHJlc2V0ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MDEsIDB4ODB9LAkvKiBibHVlICovCisJezB4MDIsIDB4ODB9LAkvKiByZWQgKi8KKwl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KKwl7MHgwNCwgMHgwM30sCS8qIGNvbTEgLSBleHBvc3VyZSBsb3cgYml0cyAqLworCXsweDBiLCAweDU3fSwJLyogdmVyICovCisJezB4MGUsIDB4NjF9LAkvKiBjb201ICovCisJezB4MGYsIDB4NDJ9LAkvKiBjb202ICovCisJezB4MTEsIDB4MDB9LAkvKiBjbGtyYyAqLworCXsweDEyLCAweDAyfSwJLyogY29tNyAtIDE1ZnBzIFZHQSBZVVlWICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgxNiwgMHgyNH0sCS8qIHJlZzE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCS8qIGV4aGNoICovCisJezB4MmIsIDB4MDB9LAkvKiBleGhjbCAqLworCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyZWYxICovCisJezB4MzUsIDB4MDB9LAkvKiBhcmVmMiAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHgzOCwgMHg3Mn0sCS8qIGFkYzIgKi8KKwl7MHgzOSwgMHg1N30sCS8qIGFyZWY0ICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiIC0geXV5diAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4M2QsIDB4OTl9LAkvKiBjb20xMyAqLworCXsweDNmLCAweGMxfSwJLyogZWRnZSAqLworCXsweDQwLCAweGMwfSwJLyogY29tMTUgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLworCXsweDQzLCAweDBhfSwJLyogcnN2ZCAqLworCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAkvKiBtYXRyaXggY29lZiBzaWduICovCisJezB4NTksIDB4ODV9LAkvKiBBV0IgY29udHJvbCAqLworCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAkvKiBBV0IgYmx1ZSBsaW1pdCAqLworCXsweDYwLCAweGYwfSwJLyogQVdCIHJlZCBsaW1pdCAqLworCXsweDYxLCAweGYwfSwJLyogQVdCIGdyZWVuIGxpbWl0ICovCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCS8qIGRuc3RoICovCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwJLyogcG9pZHggKi8KKwl7MHg3MywgMHgwMX0sCS8qIHBja2R2ICovCisJezB4NzQsIDB4M2F9LAkvKiB4aW5keCAqLworCXsweDc1LCAweDM1fSwJLyogeWluZHggKi8KKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwJLyogZ2FtbWEgY3VydmUgKi8KKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAkvKiBjb20xOSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAkvKiBsY2M2ICovCisJezB4OWUsIDB4MDR9LAkvKiBsY2M3ICovCisJezB4OWYsIDB4N2F9LAorCXsweGEwLCAweDc5fSwKKwl7MHhhMSwgMHg0MH0sCS8qIGFlY2htICovCisJezB4YTQsIDB4NTB9LAkvKiBjb20yMSAqLworCXsweGE1LCAweDY4fSwJLyogY29tMjYgKi8KKwl7MHhhNiwgMHg0YX0sCS8qIEFXQiBncmVlbiAqLworCXsweGE4LCAweGMxfSwJLyogcmVmYTggKi8KKwl7MHhhOSwgMHhlZn0sCS8qIHJlZmE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCS8qIGJsYWNrIGxldmVsIGNvbnRyb2wgKi8KKwl7MHhhZCwgMHg4MH0sCisJezB4YWUsIDB4ODB9LAorCXsweGFmLCAweDgwfSwKKwl7MHhiMiwgMHhmMn0sCisJezB4YjMsIDB4MjB9LAorCXsweGI0LCAweDIwfSwJLyogY3RybGI0ICovCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAkvKiBBREMgY2hhbm5lbCBvZmZzZXRzICovCisJezB4ZGIsIDB4N2Z9LAorCXsweGJlLCAweDdmfSwKKwl7MHhiZiwgMHg3Zn0sCisJezB4YzAsIDB4ZTJ9LAorCXsweGMxLCAweGMwfSwKKwl7MHhjMiwgMHgwMX0sCisJezB4YzMsIDB4NGV9LAorCXsweGM2LCAweDg1fSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4YzksIDB4ZTB9LAorCXsweGNhLCAweGU4fSwKKwl7MHhjYiwgMHhmMH0sCisJezB4Y2MsIDB4ZDh9LAorCXsweGNkLCAweGYxfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisKKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4NmEsIDB4MDJ9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCisJezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLworCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwKKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAwfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCisJezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhhYX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfMltdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCisvKiBzaGFycG5lc3MgKi8KKwl7MHgzZiwgMHgwMX0sCisJezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLworCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KKy8qIHNhdHVyYXRpb24gKi8KKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisvKiBjb250cmFzdCAqLworCXsweDU2LCAweDQwfSwKKy8qIGJyaWdodG5lc3MgKi8KKwl7MHg1NSwgMHg4Zn0sCisvKiBleHBvICovCisJezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHF2Z2EgKi8KKwl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSAzMGZwcyBWR0EgWVVWICovCisJezB4MzYsIDB4ZmF9LAkvKiBhcmVmMyAqLworCXsweDY5LCAweDBhfSwJLyogaHYgKi8KKwl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDB9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KKwl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGFhfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMV9zdmdhW11bMl0gPSB7CisJezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gWVVZViAtIFZHQSAxNSBmdWxsIHJlc29sdXRpb24gKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDBkfSwJLyogY29tMjIgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfc3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHg3OH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHg1MH0sCisJezB4NWIsIDB4M2N9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3ZnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4NDB9LAorCXsweDUyLCAweDAwfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDg4fSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGM4fSwKKwl7MHg1YiwgMHg5Nn0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHhkYSwgMHgwMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF94Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweDQwfSwKKwl7MHg1MiwgMHgwMH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHg4OH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAxfSwKKwl7MHg1YSwgMHgwMH0sCisJezB4NWIsIDB4YzB9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4ZGEsIDB4MDF9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3hnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfcXZnYVtdWzJdID0geworCXsweDNiLCAweGU0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4OTZ9LAkvKiBiZDUwICovCisJezB4YTMsIDB4N2R9LAkvKiBiZDYwICovCisKKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAorCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl92Z2FbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YzUsIDB4MDd9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGEyLCAweDRifSwJLyogYmQ1MCAqLworCXsweGEzLCAweDNlfSwJLyogYmQ2MCAqLworCisJezB4MmQsIDB4MDB9LAkvKiBhZHZmbCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl9zeGdhW11bMl0gPSB7CisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3cgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZ193IFslMDR4XSA9ICUwMngiLCByZWcsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnX3IgWyUwNHhdIC0+ICUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX1VTQkl8RF9VU0JPLAorCQkJCSJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCisJCQkJZGF0YSwgaSArIDEpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY2NiX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInNjY2Jfd3JpdGUgWyUwMnhdID0gJTAyeCIsIHJlZywgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19XUklURSwgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2Jfd3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBzY2NiX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVhZCBmYWlsZWQgMSIpOworCisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWFkIGZhaWxlZCAyIik7CisKKwlyZXR1cm4gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfUkVBRCk7Cit9CisKKy8qIG91dHB1dCBhIGJyaWRnZSBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgcmVnX3dfYXJyYXkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgdTggKCpkYXRhKVsyXSwgaW50IGxlbikKK3sKKwl3aGlsZSAoLS1sZW4gPj0gMCkgeworCQlyZWdfdyhnc3BjYV9kZXYsICgqZGF0YSlbMF0sICgqZGF0YSlbMV0pOworCQlkYXRhKys7CisJfQorfQorCisvKiBvdXRwdXQgYSBzZW5zb3Igc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHNjY2Jfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCWlmICgoKmRhdGEpWzBdICE9IDB4ZmYpIHsKKwkJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVhZChnc3BjYV9kZXYsICgqZGF0YSlbMV0pOworCQkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCQl9CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIHNldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDIzLCBkYXRhKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MjEpOworCQlkYXRhICY9IH4weDgwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCXZhbCA9IHNkLT5icmlnaHRuZXNzOworCWlmICh2YWwgPCA4KQorCQl2YWwgPSAxNSAtIHZhbDsJCS8qIGYgLi4gOCAqLworCWVsc2UKKwkJdmFsID0gdmFsIC0gODsJCS8qIDAgLi4gNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDU1LAkvKiBicnRuIC0gYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisJCQkweDBmIHwgKHZhbCA8PCA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KKwkJCXNkLT5jb250cmFzdCA8PCA0KTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKy8qZml4bWU6IHNob3VsZCBhZGp1c3QgYWdjL2F3Yi9hZWMgYnkgZGlmZmVyZW50IGNvbnRyb2xzICovCisJdmFsID0gc2QtPmF1dG9nYWluOworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmF1dG9nYWluKQorCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLworCWVsc2UKKwkJdmFsICY9IDB4ZmE7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCXN0YXRpYyBjb25zdCB1OCBleHBvWzRdID0gezB4MDAsIDB4MjUsIDB4MzgsIDB4NWV9OworCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KKwkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4YTEsIHZhbCAmIDB4ZTApOwkvKiBhZWNbMTU6MTBdID0gMCAqLworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzOCB2YWw7CisKKwl2YWwgPSBzZC0+c2hhcnBuZXNzOworCWlmICh2YWwgPCAwKSB7CQkJCS8qIGF1dG8gKi8KKwkJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCB8IDB4NDApOworCQkJCS8qIEVkZ2UgZW5oYW5jZW1lbnQgc3RyZW5ndGggYXV0byBhZGp1c3QgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAodmFsICE9IDApCisJCXZhbCA9IDEgPDwgKHZhbCAtIDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KKwkJCXZhbCk7CisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsMSwgdmFsMiwgdmFsMzsKKwlzdGF0aWMgY29uc3QgdTggbWF0cml4WzVdWzJdID0geworCQl7MHgxNCwgMHgzOH0sCisJCXsweDFlLCAweDU0fSwKKwkJezB4MjgsIDB4NzB9LAorCQl7MHgzMiwgMHg4Y30sCisJCXsweDQ4LCAweDkwfQorCX07CisKKwl2YWwxID0gbWF0cml4W3NkLT5zYXR1cl1bMF07CisJdmFsMiA9IG1hdHJpeFtzZC0+c2F0dXJdWzFdOworCXZhbDMgPSB2YWwxICsgdmFsMjsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0ZiwgdmFsMyk7CS8qIG1hdHJpeCBjb2VmZiAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MSwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTIsIHZhbDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NCwgdmFsMyk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTgsIDB4MWEpOwkvKiBtdHhzIC0gY29lZmYgc2lnbnMgKi8KKworCXZhbDEgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQxKTsJLyogY29tMTYgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAwKSB7CisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwgJiAweGRmKTsKKwkJcmV0dXJuOworCX0KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQyKTsJCS8qIGNvbTE3ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAxKQorCQl2YWwgfD0gMHgwMTsKKwllbHNlCisJCXZhbCAmPSAweGZlOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwljYW0tPmNhbV9tb2RlID0gb3Y5NjV4X21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKKworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEVYUE9fSURYKTsKKyNlbmRpZgorI2lmIEVYUE9fREVGICE9IDAKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPX0RFRjsKKyNlbmRpZgorI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworI2VuZGlmCisJc2QtPnNhdHVyID0gU0FUVVJfREVGOworCXNkLT5mcmVxID0gRlJFUV9ERUY7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUxNiBzZW5zb3JfaWQ7CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTcsIDB4M2EpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwOCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsIDB4NjApOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTIsIDB4ODApOworCW1zbGVlcCgxMCk7CisKKwkvKiBwcm9iZSB0aGUgc2Vuc29yICovCisJc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSk7CisJc2Vuc29yX2lkID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlzZW5zb3JfaWQgfD0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOworCisJLyogaW5pdGlhbGl6ZSAqLworCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXQsCisJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0KSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXQsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0KSk7CisJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF8yLAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF8yKSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfMiwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfMikpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwlzZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwljYXNlIFFWR0FfTU9ERToJCQkvKiAzMjB4MjQwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9xdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3F2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzJfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3F2Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBWR0FfTU9ERToJCQkvKiA2NDB4NDgwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF92Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfdmdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3ZnYSkpOworCQlicmVhazsKKwljYXNlIFNWR0FfTU9ERToJCQkvKiA4MDB4NjAwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV9zdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3N2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfc3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3ZnYSkpOworCQlicmVhazsKKwljYXNlIFhHQV9NT0RFOgkJCS8qIDEwMjR4NzY4ICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3hnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF94Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zdmdhKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNYR0FfTU9ERToJCQkgKiAxMjgweDEwMjQgKi8KKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzFfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3N4Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9zeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N4Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zeGdhKSk7CisJCWJyZWFrOworCX0KKwlzZXRmcmVxKGdzcGNhX2Rldik7CisJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXNldHNhdHVyKGdzcGNhX2Rldik7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCXNldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworfQorCisvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKKyNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJKDEgPDwgNSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJKDEgPDwgMykKKyNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTMyIHRoaXNfcHRzOworCXU4IHRoaXNfZmlkOworCWludCByZW1haW5pbmdfbGVuID0gbGVuOworCisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CisKKwkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUworCQkgICBjaGFuZ2VzLiAgQSBmcmFtZSBlbmRzIHdoZW4gRU9GIGlzIHNldCwgYW5kIHdlJ3ZlIHJlY2VpdmVkCisJCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KKworCQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCisJCWlmIChkYXRhWzBdICE9IDEyIHx8IGxlbiA8IDEyKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisKKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKworCQkvKiBFeHRyYWN0IFBUUyBhbmQgRklEICovCisJCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KQorCQkJCQkJfCAoZGF0YVszXSA8PCA4KSB8IGRhdGFbMl07CisJCXRoaXNfZmlkID0gZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBJTlRFUl9QQUNLRVQpCisJCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlOVUxMLCAwKTsKKwkJCXNkLT5sYXN0X3B0cyA9IHRoaXNfcHRzOworCQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCisJCX0gZWxzZSBpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCQlzZC0+bGFzdF9wdHMgPSAwOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQl9IGVsc2UgeworCisJCQkvKiBBZGQgdGhlIGRhdGEgZnJvbSB0aGlzIHBheWxvYWQgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CisJCX0KKworCQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLworCQlnb3RvIHNjYW5fbmV4dDsKKworZGlzY2FyZDoKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisKK3NjYW5fbmV4dDoKKwkJcmVtYWluaW5nX2xlbiAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKTsKK30KKworLyogY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjICY9IH4oMSA8PCBFWFBPX0lEWCk7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG9zdXJlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmV4cG9zdXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zYXR1ciA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNhdHVyKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zYXR1cjsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICA9IHNkX2luaXQsCisJLnN0YXJ0ICAgID0gc2Rfc3RhcnQsCisJLnN0b3BOICAgID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCA0NzA2YTgyLi4wYzg3YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjMjA3IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+Iik7CkBAIC03Nyw3ICs3OCw3IEBACiBzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNDk1LDYgKzQ5NiwyNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnB1dCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDIgJiYgZGF0YVswXSA9PSAweDVhICYmIGRhdGFbMV0gPT0gMHg1YSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAxKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01MDYsNiArNTI2LDkgQEAKIAkuc3RvcE4gPSBzZF9zdG9wTiwKIAkuZHFfY2FsbGJhY2sgPSBwYWMyMDdfZG9fYXV0b19nYWluLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwppbmRleCBkZTBiNjZjLi4yYTY4MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwpAQCAtNCw3ICs0LDkgQEAKICAqCiAgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CiAgKgotICogU2VwYXJhdGVkIGZyb20gUGl4YXJ0IFBBQzczMTEgbGlicmFyeSBieSBN4XJ0b24gTultZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqIFNlcGFyYXRlZCBmcm9tIFBpeGFydCBQQUM3MzExIGxpYnJhcnkgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aCA8bm0xMjdAZnJlZW1haWwuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMzMgKzI0LDI2IEBACiAgKi8KIAogLyogU29tZSBkb2N1bWVudGF0aW9uIGFib3V0IHZhcmlvdXMgcmVnaXN0ZXJzIGFzIGRldGVybWluZWQgYnkgdHJpYWwgYW5kIGVycm9yLgotICAgV2hlbiB0aGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGRpZmZlciBiZXR3ZWVuIHRoZSA3MjAyIGFuZCB0aGUgNzMxMSB0aGUgMgotICAgZGlmZmVyZW50IGFkZHJlc3NlcyBhcmUgd3JpdHRlbiBhcyA3MzAyYWRkci83MzExYWRkciwgd2hlbiBvbmUgb2YgdGhlIDIKLSAgIGFkZHJlc3NlcyBpcyBhIC0gc2lnbiB0aGF0IHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlCi0gICBtYXRjaGluZyBJQy4KIAogICAgUmVnaXN0ZXIgcGFnZSAxOgogCiAgICBBZGRyZXNzCURlc2NyaXB0aW9uCi0gICAtLzB4MDgJVW5rbm93biBjb21wcmVzc29yIHJlbGF0ZWQsIG11c3QgYWx3YXlzIGJlIDggZXhjZXB0IHdoZW4gbm90Ci0JCWluIDY0MHg0ODAgcmVzb2x1dGlvbiBhbmQgcGFnZSA0IHJlZyAyIDw9IDMgdGhlbiBzZXQgaXQgdG8gOSAhCi0gICAtLzB4MWIJQXV0byB3aGl0ZSBiYWxhbmNlIHJlbGF0ZWQsIGJpdCAwIGlzIEFXQiBlbmFibGUgKGludmVydGVkKQotCQliaXRzIDM0NSBzZWVtIHRvIHRvZ2dsZSBwZXIgY29sb3IgZ2FpbnMgb24vb2ZmIChpbnZlcnRlZCkKICAgIDB4NzgJCUdsb2JhbCBjb250cm9sLCBiaXQgNiBjb250cm9scyB0aGUgTEVEIChpbnZlcnRlZCkKLSAgIC0vMHg4MAlKUEVHIGNvbXByZXNzaW9uIHJhdGlvID8gQmVzdCBub3QgdG91Y2hlZAogCi0gICBSZWdpc3RlciBwYWdlIDMvNDoKKyAgIFJlZ2lzdGVyIHBhZ2UgMzoKIAogICAgQWRkcmVzcwlEZXNjcmlwdGlvbgotICAgMHgwMgkJQ2xvY2sgZGl2aWRlciAyLTYzLCBmcHMgPX4gNjAgLyB2YWwuIE11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIG9uCisgICAweDAyCQlDbG9jayBkaXZpZGVyIDMtNjMsIGZwcyA9IDkwIC8gdmFsLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBvbgogCQl0aGUgNzMwMiwgc28gb25lIG9mIDMsIDYsIDksIC4uLiwgZXhjZXB0IHdoZW4gYmV0d2VlbiA2IGFuZCAxMj8KLSAgIC0vMHgwZglNYXN0ZXIgZ2FpbiAxLTI0NSwgbG93IHZhbHVlID0gaGlnaCBnYWluCi0gICAweDEwLy0JTWFzdGVyIGdhaW4gMC0zMQotICAgLS8weDEwCUFub3RoZXIgZ2FpbiAwLTE1LCBsaW1pdGVkIGluZmx1ZW5jZSAoMS0yeCBnYWluIEkgZ3Vlc3MpCisgICAweDAzCQlWYXJpYWJsZSBmcmFtZXJhdGUgY3RybCByZWcyPT0zOiAwIC0+IH4zMCBmcHMsIDI1NSAtPiB+MjJmcHMKKyAgIDB4MDQJCUFub3RoZXIgdmFyIGZyYW1lcmF0ZSBjdHJsIHJlZzI9PTMsIHJlZzM9PTA6IDAgLT4gfjMwIGZwcywKKwkJNjMgLT4gfjI3IGZwcywgdGhlIDIgbXNiJ3MgbXVzdCBhbHdheXMgYmUgMSAhIQorICAgMHgwNQkJQW5vdGhlciB2YXIgZnJhbWVyYXRlIGN0cmwgcmVnMj09MywgcmVnMz09MCwgcmVnND09MHhjMDoKKwkJMSAtPiB+MzAgZnBzLCAyIC0+IH4yMCBmcHMKKyAgIDB4MGUJCUV4cG9zdXJlIGJpdHMgMC03LCAwLTQ0OCwgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUKKyAgIDB4MGYJCUV4cG9zdXJlIGJpdCA4LCAwLTQ0OCwgNDQ4ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgICAweDEwCQlNYXN0ZXIgZ2FpbiAwLTMxCiAgICAweDIxCQlCaXRmaWVsZDogMC0xIHVudXNlZCwgMi0zIHZmbGlwL2hmbGlwLCA0LTUgdW5rbm93biwgNi03IHVudXNlZAotICAgLS8weDI3CVNlZW1zIHRvIHRvZ2dsZSB2YXJpb3VzIGdhaW5zIG9uIC8gb2ZmLCBTZXR0aW5nIGJpdCA3IHNlZW1zIHRvCi0JCWNvbXBsZXRlbHkgZGlzYWJsZSB0aGUgYW5hbG9nIGFtcGxpZmljYXRpb24gYmxvY2suIFNldCB0byAweDY4Ci0JCWZvciBtYXggZ2FpbiwgMHgxNCBmb3IgbWluaW1hbCBnYWluLgogCiAgICBUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApAQCAtNjgsNiArNjMsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzAyIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCkBAIC04Niw4ICs4Miw4IEBACiAJdW5zaWduZWQgY2hhciByZWRfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGJsdWVfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCV9fdTggaGZsaXA7CiAJX191OCB2ZmxpcDsKIAl1OCBmbGFnczsKQEAgLTEyNCw4ICsxMjAsNyBAQAogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTE0MSw3ICsxMzYsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLS8qIFRoaXMgY29udHJvbCBpcyBmb3IgYm90aCB0aGUgNzMwMiBhbmQgdGhlIDczMTEgKi8KIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTE1Nyw3ICsxNTEsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC0yMTUsNyArMjA4LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGJsdWViYWxhbmNlLAogCSAgICAuZ2V0ID0gc2RfZ2V0Ymx1ZWJhbGFuY2UsCiAJfSwKLS8qIEFsbCBjb250cm9scyBiZWxvdyBhcmUgZm9yIGJvdGggdGhlIDczMDIgYW5kIHRoZSA3MzExICovCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfR0FJTiwKQEAgLTIzOCwxMSArMjMwLDEwIEBACiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiRXhwb3N1cmUiLAogCQkubWluaW11bSA9IDAsCi0jZGVmaW5lIEVYUE9TVVJFX01BWCAyNTUKLQkJLm1heGltdW0gPSBFWFBPU1VSRV9NQVgsCisJCS5tYXhpbXVtID0gMTAyMywKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPU1VSRV9ERUYgIDE2IC8qICAzMiBtcyAvIDMwIGZwcyAqLwotI2RlZmluZSBFWFBPU1VSRV9LTkVFIDUwIC8qIDEwMCBtcyAvIDEwIGZwcyAqLworI2RlZmluZSBFWFBPU1VSRV9ERUYgIDY2ICAvKiAgMzMgbXMgLyAzMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfS05FRSAxMzMgLyogIDY2IG1zIC8gMTUgZnBzICovCiAJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCkBAIC0zMDEsNyArMjkyLDYgQEAKIH07CiAKICNkZWZpbmUgTE9BRF9QQUdFMwkJMjU1Ci0jZGVmaW5lIExPQURfUEFHRTQJCTI1NAogI2RlZmluZSBFTkRfT0ZfU0VRVUVOQ0UJCTAKIAogLyogcGFjIDczMDIgKi8KQEAgLTM3OSw3ICszNjksNyBAQAogI2RlZmluZSBTS0lQCQkweGFhCiAvKiBwYWdlIDMgLSB0aGUgdmFsdWUgU0tJUCBzYXlzIHNraXAgdGhlIGluZGV4IC0gc2VlIHJlZ193X3BhZ2UoKSAqLwogc3RhdGljIGNvbnN0IF9fdTggcGFnZTNfNzMwMltdID0gewotCTB4OTAsIDB4NDAsIDB4MDMsIDB4NTAsIDB4YzIsIDB4MDEsIDB4MTQsIDB4MTYsCisJMHg5MCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjMCwgMHgwMSwgMHgxNCwgMHgxNiwKIAkweDE0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMzLCAweDAwLAogCTB4MGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwMSwgMHhiMywgMHgwMSwgMHgwMCwKQEAgLTM4OCw3ICszNzgsNyBAQAogCTB4YTQsIDB4YjgsIDB4ZTAsIDB4MmEsIDB4ZjYsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweGZjLCAweDAwLCAweGYyLCAweDFmLCAweDA0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MTAsIDB4MDAsIDB4MDAsCisJU0tJUCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgxMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4NDAsIDB4ZmYsIDB4MDMsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTQwMSwxMiArMzkxLDE0IEBACiAJMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQxNSwyMCArNDA3LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM2LDMyICs0MzEsMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC00NzcsNTYgKzQ3Miw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKLQkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQorCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4pCiB7CiAJaW50IGluZGV4LCBsZW47Ci0JaW50IHJldCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCWluZGV4ID0gKnNlcSsrOwogCQlsZW4gPSAqc2VxKys7CiAJCXN3aXRjaCAobGVuKSB7CiAJCWNhc2UgRU5EX09GX1NFUVVFTkNFOgotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSBMT0FEX1BBR0U0OgotCQkJcmV0ID0gcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2U0LCBwYWdlNF9sZW4pOwotCQkJYnJlYWs7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFMzoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKKwkJCXJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKIAkJCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCiAJCQkJCSJJbmNvcnJlY3QgdmFyaWFibGUgc2VxdWVuY2UiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCQl3aGlsZSAobGVuID4gMCkgewogCQkJCWlmIChsZW4gPCA4KSB7Ci0JCQkJCXJldCA9IHJlZ193X2J1Zihnc3BjYV9kZXYsCisJCQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsCiAJCQkJCQlpbmRleCwgc2VxLCBsZW4pOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7CiAJCQkJCXNlcSArPSBsZW47CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKKwkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKIAkJCQlzZXEgKz0gODsKIAkJCQlpbmRleCArPSA4OwogCQkJCWxlbiAtPSA4OwogCQkJfQogCQl9Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKIAl9CiAJLyogbm90IHJlYWNoZWQgKi8KIH0KQEAgLTU2MCwxMSArNTQ2LDEwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwYWM3MzAyIG9ubHkgKi8KLXN0YXRpYyBpbnQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRjb250KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JaW50IHJldDsKIAlzdGF0aWMgY29uc3QgX191OCBtYXhbMTBdID0KIAkJezB4MjksIDB4MzMsIDB4NDIsIDB4NWEsIDB4NmUsIDB4ODAsIDB4OWYsIDB4YmIsCiAJCSAweGQ0LCAweGVjfTsKQEAgLTU3Miw3ICs1NTcsNyBAQAogCQl7MHgzNSwgMHgzMywgMHgzMywgMHgyZiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNywKIAkJIDB4MTEsIDB4MGJ9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXYgPSBtYXhbaV07CiAJCXYgKz0gKHNkLT5icmlnaHRuZXNzIC0gQlJJR0hUTkVTU19NQVgpCkBAIC01ODIsMTM2ICs1NjcsMTIxIEBACiAJCQl2ID0gMDsKIAkJZWxzZSBpZiAodiA+IDB4ZmYpCiAJCQl2ID0gMHhmZjsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGEyICsgaSwgdik7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMiArIGksIHYpOwogCX0KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMwMiBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlpbnQgcmV0OwogCXN0YXRpYyBjb25zdCBpbnQgYVs5XSA9CiAJCXsyMTcsIC0yMTIsIDAsIC0xMDEsIDE3MCwgLTY3LCAtMzgsIC0zMTUsIDM1NX07CiAJc3RhdGljIGNvbnN0IGludCBiWzldID0KIAkJezE5LCAxMDYsIDAsIDE5LCAxMDYsIDEsIDE5LCAxMDYsIDF9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJLyogcGFnZSAzICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewogCQl2ID0gYVtpXSAqIHNkLT5jb2xvcnMgLyBDT0xPUl9NQVggKyBiW2ldOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGYgKyAyICogaSwgKHYgPj4gOCkgJiAweDA3KTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGkgKyAxLCB2KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGksICh2ID4+IDgpICYgMHgwNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpICsgMSwgdik7CiAJfQotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJjb2xvcjogJWkiLCBzZC0+Y29sb3JzKTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzYsIHNkLT53aGl0ZV9iYWxhbmNlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM2LCBzZC0+d2hpdGVfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAid2hpdGVfYmFsYW5jZTogJWkiLCBzZC0+d2hpdGVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzUsIHNkLT5yZWRfYmFsYW5jZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNSwgc2QtPnJlZF9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJyZWRfYmFsYW5jZTogJWkiLCBzZC0+cmVkX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzcsIHNkLT5ibHVlX2JhbGFuY2UpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM3LCBzZC0+Ymx1ZV9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJibHVlX2JhbGFuY2U6ICVpIiwgc2QtPmJsdWVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCS8qIHBhZ2UgMyAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDEwLCBzZC0+Z2FpbiA+PiAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4gPj4gMyk7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCV9fdTggcmVnOworCV9fdTggY2xvY2tkaXY7CisJX191MTYgZXhwb3N1cmU7CiAKLQkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKLQkgICBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOiA2MCAvIHJlZy4gc2QtPmV4cG9zdXJlIGlzIHRoZQotCSAgIGRlc2lyZWQgZXhwb3N1cmUgdGltZSBpbiBtcy4gKi8KLQlyZWcgPSAxMjAgKiBzZC0+ZXhwb3N1cmUgLyAxMDAwOwotCWlmIChyZWcgPCAyKQotCQlyZWcgPSAyOwotCWVsc2UgaWYgKHJlZyA+IDYzKQotCQlyZWcgPSA2MzsKKwkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCisJICAgbm8gZnBzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTogOTAgLyByZWcuIHNkLT5leHBvc3VyZSBpcyB0aGUKKwkgICBkZXNpcmVkIGV4cG9zdXJlIHRpbWUgaW4gMC41IG1zLiAqLworCWNsb2NrZGl2ID0gKDkwICogc2QtPmV4cG9zdXJlICsgMTk5OSkgLyAyMDAwOwogCi0JLyogT24gdGhlIHBhYzczMDIgcmVnMiBNVVNUIGJlIGEgbXVsdGlwbGUgb2YgMywgc28gcm91bmQgaXQgdG8KLQkgICB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAzLCBleGNlcHQgd2hlbiBiZXR3ZWVuIDYgYW5kIDEyPyAqLwotCWlmIChyZWcgPCA2IHx8IHJlZyA+IDEyKQotCQlyZWcgPSAoKHJlZyArIDEpIC8gMykgKiAzOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwkvKiBOb3RlIGNsb2NrZGl2ID0gMyBhbHNvIHdvcmtzLCBidXQgd2hlbiBydW5uaW5nIGF0IDMwIGZwcywgZGVwZW5kaW5nCisJICAgb24gdGhlIHNjZW5lIGJlaW5nIHJlY29yZGVkLCB0aGUgY2FtZXJhIHN3aXRjaGVzIHRvIGFub3RoZXIKKwkgICBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNlcnRhaW4gSlBFRyBibG9ja3MsIGFuZCB3ZSBkb24ndCBrbm93IGhvdworCSAgIHRvIGRlY29tcHJlc3MgdGhlc2UgYmxvY2tzLiBTbyB3ZSBjYXAgdGhlIGZyYW1lcmF0ZSBhdCAxNSBmcHMgKi8KKwlpZiAoY2xvY2tkaXYgPCA2KQorCQljbG9ja2RpdiA9IDY7CisJZWxzZSBpZiAoY2xvY2tkaXYgPiA2MykKKwkJY2xvY2tkaXYgPSA2MzsKKworCS8qIHJlZzIgTVVTVCBiZSBhIG11bHRpcGxlIG9mIDMsIGV4Y2VwdCB3aGVuIGJldHdlZW4gNiBhbmQgMTI/CisJICAgQWx3YXlzIHJvdW5kIHVwLCBvdGhlcndpc2Ugd2UgY2Fubm90IGdldCB0aGUgZGVzaXJlZCBmcmFtZXRpbWUKKwkgICB1c2luZyB0aGUgcGFydGlhbCBmcmFtZSB0aW1lIGV4cG9zdXJlIGNvbnRyb2wgKi8KKwlpZiAoY2xvY2tkaXYgPCA2IHx8IGNsb2NrZGl2ID4gMTIpCisJCWNsb2NrZGl2ID0gKChjbG9ja2RpdiArIDIpIC8gMykgKiAzOworCisJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiBjbG9ja2RpdiAvIDkwICAgIC0+CisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlIC8gMikgKiA0NDggLyAoMTAwMCAqIGNsb2NrZGl2IC8gOTApICovCisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlICogNDUgKiA0NDgpIC8gKDEwMDAgKiBjbG9ja2Rpdik7CisJLyogMCA9IHVzZSBmdWxsIGZyYW1ldGltZSwgNDQ4ID0gbm8gZXhwb3N1cmUsIHJldmVyc2UgaXQgKi8KKwlleHBvc3VyZSA9IDQ0OCAtIGV4cG9zdXJlOworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIGNsb2NrZGl2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIGV4cG9zdXJlICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBleHBvc3VyZSA+PiA4KTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAl1OCBkYXRhLCBoZmxpcCwgdmZsaXA7CiAKIAloZmxpcCA9IHNkLT5oZmxpcDsKQEAgLTcyMSw0OCArNjkxLDM3IEBACiAJaWYgKHNkLT5mbGFncyAmIEZMX1ZGTElQKQogCQl2ZmxpcCA9ICF2ZmxpcDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLwogCWRhdGEgPSAoaGZsaXAgPyAweDA4IDogMHgwMCkgfCAodmZsaXAgPyAweDA0IDogMHgwMCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSBmb3IgcGFjNzMwMiAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZXR1cm4gcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzAyLCBzaXplb2YoaW5pdF83MzAyKS8yKTsKKwlyZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMDIsIHNpemVvZihpbml0XzczMDIpLzIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5zb2ZfcmVhZCA9IDA7CiAKLQlyZXQgPSByZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzAyLAotCQlwYWdlM183MzAyLCBzaXplb2YocGFnZTNfNzMwMiksCi0JCU5VTEwsIDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRnYWluKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMwMiwKKwkJcGFnZTNfNzMwMiwgc2l6ZW9mKHBhZ2UzXzczMDIpKTsKKwlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0cmVkYmFsYW5jZShnc3BjYV9kZXYpOworCXNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAKIAkvKiBvbmx5IHJlc29sdXRpb24gNjQweDQ4MCBpcyBzdXBwb3J0ZWQgZm9yIHBhYzczMDIgKi8KIApAQCAtNzcxLDM0ICs3MzAsMjcgQEAKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOwogCiAJLyogc3RhcnQgc3RyZWFtICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwogCiAJLyogc3RvcCBzdHJlYW0gKi8KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMCk7CiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgcGFjNzMwMiAqLwogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDApOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQwKTsKIH0KIAogLyogSW5jbHVkZSBwYWMgY29tbW9uIHNvZiBkZXRlY3Rpb24gZnVuY3Rpb25zICovCkBAIC04MDgsMjIgKzc2MCwxMyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7Ci0JaW50IGRlc2lyZWRfbHVtLCBkZWFkem9uZTsKKwlpbnQgZGVzaXJlZF9sdW07CisJY29uc3QgaW50IGRlYWR6b25lID0gMzA7CiAKIAlpZiAoYXZnX2x1bSA9PSAtMSkKIAkJcmV0dXJuOwogCi0JZGVzaXJlZF9sdW0gPSAyNzAgKyBzZC0+YnJpZ2h0bmVzcyAqIDQ7Ci0JLyogSGFjayBoYWNrLCB3aXRoIHRoZSA3MjAyIHRoZSBmaXJzdCBleHBvc3VyZSBzdGVwIGlzCi0JICAgcHJldHR5IGxhcmdlLCBzbyBpZiB3ZSdyZSBhYm91dCB0byBtYWtlIHRoZSBmaXJzdAotCSAgIGV4cG9zdXJlIGluY3JlYXNlIG1ha2UgdGhlIGRlYWR6b25lIGxhcmdlIHRvIGF2b2lkCi0JICAgb3NjaWxhdGluZyAqLwotCWlmIChkZXNpcmVkX2x1bSA+IGF2Z19sdW0gJiYgc2QtPmdhaW4gPT0gR0FJTl9ERUYgJiYKLQkJCXNkLT5leHBvc3VyZSA+IEVYUE9TVVJFX0RFRiAmJgotCQkJc2QtPmV4cG9zdXJlIDwgNDIpCi0JCWRlYWR6b25lID0gOTA7Ci0JZWxzZQotCQlkZWFkem9uZSA9IDMwOworCWRlc2lyZWRfbHVtID0gMjcwICsgc2QtPmJyaWdodG5lc3M7CiAKIAlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQogCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwpAQCAtOTQ3LDcgKzg5MCw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk2Niw3ICs5MDksNyBAQAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtOTg0LDcgKzkyNyw3IEBACiAJc2QtPmNvbG9ycyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk5OCwxNCArOTQxLDExIEBACiBzdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+d2hpdGVfYmFsYW5jZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXJldCA9IHNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDE5LDE0ICs5NTksMTEgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+cmVkX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSAwOwotCXJldHVybiByZXQ7CisJCXNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA0MCwxNCArOTc3LDExIEBACiBzdGF0aWMgaW50IHNkX3NldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5ibHVlX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA2NSw3ICs5OTksNyBAQAogCXNkLT5nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Z2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDgzLDcgKzEwMTcsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTE0LDcgKzEwNDgsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTMyLDcgKzEwNjYsNyBAQAogCXNkLT5oZmxpcCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTE1MCw3ICsxMDg0LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTExNjUsNyArMTA5OSw2IEBACiBzdGF0aWMgaW50IHNkX2RiZ19zX3JlZ2lzdGVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCWludCByZXQgPSAtRUlOVkFMOwogCV9fdTggaW5kZXg7CiAJX191OCB2YWx1ZTsKIApAQCAtMTE4NSwxNCArMTExOCwxMiBAQAogCQkvKiBOb3RlIHRoYXQgdGhlcmUgc2hhbGwgYmUgbm8gYWNjZXNzIHRvIG90aGVyIHBhZ2UKIAkJICAgYnkgYW55IG90aGVyIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugc3dpdGggYW5kCiAJCSAgIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgKi8KLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgaW5kZXgsIHZhbHVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIGluZGV4LCB2YWx1ZSk7CiAKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2NoaXBfaWRlbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTIxMCw4ICsxMTQxLDM5IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzAyICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtMTIyNiw2ICsxMTg4LDkgQEAKIAkuc2V0X3JlZ2lzdGVyID0gc2RfZGJnX3NfcmVnaXN0ZXIsCiAJLmdldF9jaGlwX2lkZW50ID0gc2RfY2hpcF9pZGVudCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwppbmRleCA0MmNmY2RmLi40NGZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzExIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkiKTsKQEAgLTg4LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogLyogVGhpcyBjb250cm9sIGlzIGZvciBib3RoIHRoZSA3MzAyIGFuZCB0aGUgNzMxMSAqLwogCXsKIAkgICAgewpAQCAtMjAwLDcgKzIwMSw2IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0jZGVmaW5lIExPQURfUEFHRTMJCTI1NQogI2RlZmluZSBMT0FEX1BBR0U0CQkyNTQKICNkZWZpbmUgRU5EX09GX1NFUVVFTkNFCQkwCiAKQEAgLTI1OSwxMiArMjU5LDE0IEBACiAJMHgyMywgMHgyOCwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTI3MywyMCArMjc1LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtMjk0LDMyICsyOTksMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC0zMzUsNTYgKzM0MCw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKIAkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQogewogCWludCBpbmRleCwgbGVuOwotCWludCByZXQgPSAwOwogCiAJZm9yICg7OykgewogCQlpbmRleCA9ICpzZXErKzsKIAkJbGVuID0gKnNlcSsrOwogCQlzd2l0Y2ggKGxlbikgewogCQljYXNlIEVORF9PRl9TRVFVRU5DRToKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFNDoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlNCwgcGFnZTRfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIExPQURfUEFHRTM6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CisJCQlyZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTQsIHBhZ2U0X2xlbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CiAJCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCQkiSW5jb3JyZWN0IHZhcmlhYmxlIHNlcXVlbmNlIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCQlpZiAobGVuIDwgOCkgewotCQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LAogCQkJCQkJaW5kZXgsIHNlcSwgbGVuKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwogCQkJCQlzZXEgKz0gbGVuOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CisJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CiAJCQkJc2VxICs9IDg7CiAJCQkJaW5kZXggKz0gODsKIAkJCQlsZW4gLT0gODsKIAkJCX0KIAkJfQotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAJfQogCS8qIG5vdCByZWFjaGVkICovCiB9CkBAIC00MTIsNDYgKzQwOCwzNiBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMxMSBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb250cmFzdCA+PiA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmNvbnRyYXN0ID4+IDQpOwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZ2FpbiA9IEdBSU5fTUFYIC0gc2QtPmdhaW47Ci0JaW50IHJldDsKIAogCWlmIChnYWluIDwgMSkKIAkJZ2FpbiA9IDE7CiAJZWxzZSBpZiAoZ2FpbiA+IDI0NSkKIAkJZ2FpbiA9IDI0NTsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJLyogcGFnZSA0ICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwZSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAJX191OCByZWc7CiAKIAkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKQEAgLTQ2Myw5NCArNDQ5LDcyIEBACiAJZWxzZSBpZiAocmVnID4gNjMpCiAJCXJlZyA9IDYzOwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCS8qIHBhZ2UgNCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkJLyogcGFnZSA0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCiAJLyogUGFnZSAxIHJlZ2lzdGVyIDggbXVzdCBhbHdheXMgYmUgMHgwOCBleGNlcHQgd2hlbiBub3QgaW4KIAkgICA2NDB4NDgwIG1vZGUgYW5kIFBhZ2UzLzQgcmVnIDIgPD0gMyB0aGVuIGl0IG11c3QgYmUgOSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwogCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KWdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYmCiAJCQlyZWcgPD0gMykgewotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOwogCX0gZWxzZSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CiAJfQogCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCi1zdGF0aWMgaW50IHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCV9fdTggZGF0YTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkvKiBwYWdlIDQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLwogCWRhdGEgPSAoc2QtPmhmbGlwID8gMHgwNCA6IDB4MDApIHwgKHNkLT52ZmxpcCA/IDB4MDggOiAweDAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lIGZvciBwYWM3MzExICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJldHVybiByZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMTEsIHNpemVvZihpbml0XzczMTEpLzIpOworCXJlZ193X3NlcShnc3BjYV9kZXYsIGluaXRfNzMxMSwgc2l6ZW9mKGluaXRfNzMxMSkvMik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAKIAlzZC0+c29mX3JlYWQgPSAwOwogCi0JcmV0ID0gcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMxMSwKLQkJTlVMTCwgMCwKKwlyZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzExLAogCQlwYWdlNF83MzExLCBzaXplb2YocGFnZTRfNzMxMSkpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGdhaW4oZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRodmZsaXAoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCiAJLyogc2V0IGNvcnJlY3QgcmVzb2x1dGlvbiAqLwogCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKIAljYXNlIDI6CQkJCQkvKiAxNjB4MTIwIHBhYzczMTEgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJCQkJLyogMzIweDI0MCBwYWM3MzExICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMDoJCQkJCS8qIDY0MHg0ODAgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01NTksMzcgKzUyMywyNCBAQAogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CiAKIAkvKiBzdGFydCBzdHJlYW0gKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOworCXJlZ193KGdzcGNhX2RldiwgMHgyOSwgMHg1Myk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgzZSwgMHgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgNzMxMSAqLwpAQCAtNzM0LDcgKzY4NSw3IEBACiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzUyLDcgKzcwMyw3IEBACiAJc2QtPmdhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRnYWluKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTc3MCw3ICs3MjEsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MDEsNyArNzUyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODE5LDcgKzc3MCw3IEBACiAJc2QtPmhmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MzcsNyArNzg4LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTg0OCw4ICs3OTksMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzExICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtODYwLDYgKzg0Miw5IEBACiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCmluZGV4IDIwZjY3ZDkuLjg0NjJhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAvKiBXZSBjYWxjdWxhdGUgdGhlIGF1dG9nYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIG9mIGEgZnJhbWUsIGF0IHRoaXMKLSAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyB0cmFuc21pdHRlZCwgYW5kIGEgZnJhbWUgaXMKLSAgIGJlaW5nIGNhcHR1cmVkIHdpdGggdGhlIG9sZCBzZXR0aW5ncy4gU28gaWYgd2UgYWRqdXN0IHRoZSBhdXRvZ2FpbiB3ZSBtdXN0Ci0gICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0Ci0gICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCi0jZGVmaW5lIFBBQ19BVVRPR0FJTl9JR05PUkVfRlJBTUVTCTMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkyCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY19zb2ZfbWFya2VyWzVdID0KIAkJeyAweGZmLCAweGZmLCAweDAwLCAweGZmLCAweDk2IH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIFNOOUMyMDI4IGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic245YzIwMjgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvbml4IFNOOUMyMDI4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OyAgLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXU4IHNvZl9yZWFkOworCXUxNiBtb2RlbDsKK307CisKK3N0cnVjdCBpbml0X2NvbW1hbmQgeworCXVuc2lnbmVkIGNoYXIgaW5zdHJ1Y3Rpb25bNl07CisJdW5zaWduZWQgY2hhciB0b19yZWFkOyAvKiBsZW5ndGggdG8gcmVhZC4gMCBtZWFucyBubyByZXBseSByZXF1ZXN0ZWQgKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworLyogSG93IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiBhbnkgb2YgdGhlIFZHQSBjYW1zIGlzIHVua25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogTm8gd2F5IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgQ0lGIGNhbXMgaXMga25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgc245YzIwMjhfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sICJzZW5kaW5nIGNvbW1hbmQgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwgY29tbWFuZFswXSwKKwkgICAgICAgY29tbWFuZFsxXSwgY29tbWFuZFsyXSwgY29tbWFuZFszXSwgY29tbWFuZFs0XSwgY29tbWFuZFs1XSk7CisKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBjb21tYW5kLCA2KTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMiwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA2LCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiY29tbWFuZCB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245YzIwMjhfcmVhZDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOworCWlmIChyYyAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQxIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCVBERUJVRyhEX1VTQkksICJyZWFkMSByZXNwb25zZSAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X3JlYWQ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKnJlYWRpbmcpCit7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJNCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA0LCA1MDApOworCWlmIChyYyAhPSA0KSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQ0IGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCW1lbWNweShyZWFkaW5nLCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCVBERUJVRyhEX1VTQkksICJyZWFkNCByZXNwb25zZSAlMDJ4JTAyeCUwMnglMDJ4IiwgcmVhZGluZ1swXSwKKwkgICAgICAgcmVhZGluZ1sxXSwgcmVhZGluZ1syXSwgcmVhZGluZ1szXSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X2xvbmdfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCBpLCBzdGF0dXM7CisJX191OCByZWFkaW5nWzRdOworCisJc3RhdHVzID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGNvbW1hbmQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IDI1NiAmJiBzdGF0dXMgPCAyOyBpKyspCisJCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyAhPSAyKSB7CisJCVBERUJVRyhEX0VSUiwgImxvbmcgY29tbWFuZCBzdGF0dXMgcmVhZCBlcnJvciAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiAtRUlPOworCX0KKworCW1lbXNldChyZWFkaW5nLCAwLCA0KTsKKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkNChnc3BjYV9kZXYsIHJlYWRpbmcpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogaW4gZ2VuZXJhbCwgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIGlzIHRoZSBmaXJzdCBieXRlIG9mCisJICogdGhlIGNvbW1hbmQsIG9yJ2VkIHdpdGggOCAqLworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9zaG9ydF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmNvbW1hbmQpCit7CisJaW50IGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgY29tbWFuZCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlQREVCVUcoRF9QUk9CRSwgIlNOOUMyMDI4IGNhbWVyYSBkZXRlY3RlZCAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsCisJICAgICAgIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlzZC0+bW9kZWwgPSBpZC0+aWRQcm9kdWN0OworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJUERFQlVHKERfUFJPQkUsICJHZW5pdXMgU21hcnQgMzAwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMDoKKwkJUERFQlVHKERfUFJPQkUsICJEQzMxVkMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDE6CisJCVBERUJVRyhEX1BST0JFLCAiU3B5IGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMzoKKwkJUERFQlVHKERfUFJPQkUsICJDSUYgY2FtZXJhIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDA4OgorCQlQREVCVUcoRF9QUk9CRSwgIk1pbmktU2hvdHogbXMtMzUwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwYToKKwkJUERFQlVHKERfUFJPQkUsICJWaXZpdGFyIDMzNTBiIHR5cGUgY2FtZXJhIik7CisJCWNhbS0+aW5wdXRfZmxhZ3MgPSBWNEwyX0lOX1NUX1ZGTElQIHwgVjRMMl9JTl9TVF9IRkxJUDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4ODAwMDoKKwljYXNlIDB4ODAwMToKKwljYXNlIDB4ODAwMzoKKwkJY2FtLT5jYW1fbW9kZSA9IGNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoY2lmX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisJc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfY29tbWFuZHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICAgc3RydWN0IGluaXRfY29tbWFuZCAqY2FtX2NvbW1hbmRzLCBpbnQgbikKK3sKKwlpbnQgaSwgZXJyX2NvZGUgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChjYW1fY29tbWFuZHNbaV0udG9fcmVhZCkgeworCQljYXNlIDQ6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2xvbmdfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCWNhbV9jb21tYW5kc1tpXS5pbnN0cnVjdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9zaG9ydF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJY2FtX2NvbW1hbmRzW2ldLmluc3RydWN0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2NvbW1hbmQoZ3NwY2FfZGV2LAorCQkJCQljYW1fY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfc3B5X2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBzcHlfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA0LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAzNTIgKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sIC8qIGhlaWdodCAyODggKi8KKwkJLyoge3sweDEzLCAweDI3LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVkIGdhaW4gPyovCisJCS8qIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDI5LCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJlLCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDcsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHgxMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKmRvbid0IG1lc3Mgd2l0aCovCisJCS8qe3sweDExLCAweDA0LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKiBicmlnaHRlciAqLworCQkvKnt7MHgxMSwgMHgwNSwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogYnJpZ2h0ZXIgKi8KKwkJe3sweDExLCAweDA2LCAweGIxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKnt7MHgxMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDExLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIGJyaWdodG5lc3Mgb3IgZ2Fpbi4gMCBpcyBkZWZhdWx0LiA0IGlzIGdvb2QKKwkJICogaW5kb29ycyBhdCBuaWdodCB3aXRoIGluY2FuZGVzY2VudCBsaWdodGluZyAqLworCQl7ezB4MTEsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qaHN0YXJ0IG9yIGhvZmZzKi8KKwkJe3sweDExLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxYiwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LCBvYnNlcnZlZCAqLworCQl7ezB4MWIsIDB4MDIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogYnJpZ2h0ZXIgKi8KKwkJLyoge3sweDFiLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIG9ic2VydmVkICovCisJCXt7MHgxYiwgMHgxMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogY29tcHJlc3NlcyAqLworCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2Rldiwgc3B5X3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRShzcHlfc3RhcnRfY29tbWFuZHMpKTsKK30KKworc3RhdGljIGludCBzdGFydF9jaWZfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIGNpZl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyogVGhlIGVudGlyZSBzZXF1ZW5jZSBiZWxvdyBzZWVtcyByZWR1bmRhbnQgKi8KKwkJLyoge3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwgd2lkdGg/CisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LCBoZWlnaHQ/CisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwqLworCQl7ezB4MWIsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAzLCAweDVhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDE0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzcsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA2LCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDgsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA5LCAweDEwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgMX0sIC8qIHdpZHRoLzggKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgMX0sIC8qIGhlaWdodC84ICovCisJCS8qIHt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCSAqIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LCBkb2VzIG5vdGhpbmcKKwkJICoge3sweDEzLCAweDI3LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIHt7MHgxMywgMHgyOSwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkgKiBjYXVzZXMgc3Vic2FtcGxpbmcKKwkJICogYnV0IG5vdCBhIGNoYW5nZSBpbiB0aGUgcmVzb2x1dGlvbiBzZXR0aW5nISAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwvKiB1c2UgY29tcHJlc3Npb24gKi8KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGNpZl9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoY2lmX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbXMzNTBfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIG1zMzUwX3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA1LCAweDI1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBlLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE1LCAweDcwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogaGVpZ2h0ICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LCAvKiB2c3RhcnQ/ICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogaHN0YXJ0PyAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDBhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDB9LAorCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2RldiwgbXMzNTBfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKG1zMzUwX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfZ2VuaXVzX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBnZW5pdXNfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiAicHJlbGltaW5hcnkiIHdpZHRoIGFuZCBoZWlnaHQgc2V0dGluZ3MgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA3LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDY0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDYwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDI2LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyNywgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMxLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzMiwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzMsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDM0LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHg1YiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCB3aWR0aCAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCBoZWlnaHQgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYywgMHgyMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWMsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMH0KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGdlbml1c19zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoZ2VuaXVzX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdml2aXRhcl9jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgdml2aXRhcl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MGEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoKKwkJICogQWJvdmUgaXMgY2hhbmdlZCBmcm9tIE9FTSAweDBiLiBGaXhlcyBCYXllciB0aWxpbmcuCisJCSAqIFByZXN1bWFibHkgZ2l2ZXMgYSB2ZXJ0aWNhbCBzaGlmdCBvZiBvbmUgcm93LgorCQkgKi8KKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHNlZW1zIHRvIGRvIGhvcml6b250YWwgc2hpZnQuICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHRocmVlIGNvbW1hbmRzIHNlZW0gdG8gcmVsYXRlIHRvIGJyaWdodG5lc3MuICovCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDEsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDNhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE0LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNSwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MWIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDIwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyMywgMHhlZSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI3LCAweDlhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjksIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDJhLCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MmYsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDMwLCAweDI0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgzMiwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDYxLCAweDQyLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjksIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDZmLCAweDg4LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc0LCAweDIxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3NSwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDdkLCAweGYzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNywgMHgxYywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE5LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxYSwgMHhmNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiB7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MjAsIDB4MzYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEwLCAweDI2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxMiwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiBBYm92ZSBpcyBicmlnaHRuZXNzOyBPRU0gZHJpdmVyIHNldHRpbmcgaXMgMHgxMCAqLworCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDIwLCAweDI5LCAweDMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNCwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9CisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCB2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRSh2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyX2NvZGU7CisKKwlzZC0+c29mX3JlYWQgPSAwOworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJZXJyX2NvZGUgPSBzdGFydF9nZW5pdXNfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQllcnJfY29kZSA9IHN0YXJ0X3NweV9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDM6CisJCWVycl9jb2RlID0gc3RhcnRfY2lmX2NhbShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIDB4ODAwODoKKwkJZXJyX2NvZGUgPSBzdGFydF9tczM1MF9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMGE6CisJCWVycl9jb2RlID0gc3RhcnRfdml2aXRhcl9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSLCAiU3RhcnRpbmcgdW5rbm93biBjYW1lcmEsIHBsZWFzZSByZXBvcnQgdGhpcyIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisJX191OCBkYXRhWzZdOworCisJcmVzdWx0ID0gc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgcmVhZCBmYWlsZWQiKTsKKworCW1lbXNldChkYXRhLCAwLCA2KTsKKwlkYXRhWzBdID0gMHgxNDsKKwlyZXN1bHQgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGNvbW1hbmQgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgc245YzIwMjggc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJzbjljMjAyOC5oIgorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJdW5zaWduZWQgY2hhciAqc29mOworCisJc29mID0gc245YzIwMjhfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHNuOWMyMDI4X3NvZl9tYXJrZXIpCisJCQluIC09IHNpemVvZiBzbjljMjAyOF9zb2ZfbWFya2VyOworCQllbHNlCisJCQluID0gMDsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGRhdGEsIG4pOworCQkvKiBTdGFydCBuZXh0IGZyYW1lLiAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQlzbjljMjAyOF9zb2ZfbWFya2VyLCBzaXplb2Ygc245YzIwMjhfc29mX21hcmtlcik7CisJCWxlbiAtPSBzb2YgLSBkYXRhOworCQlkYXRhID0gc29mOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNSl9LCAvKiBHZW5pdXMgU21hcnQgMzAwLCB2ZXJzaW9uIDIgKi8KKwkvKiBUaGUgR2VuaXVzIFNtYXJ0IGlzIHVudGVzdGVkLiBJIGNhbid0IGZpbmQgYW4gb3duZXIgISAqLworCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAwKX0sIERDMzFWQywgRG9uJ3Qga25vdyB0aGlzIGNhbWVyYSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAxKX0sIC8qIFdpbGQgUGxhbmV0IGRpZ2l0YWwgc3B5IGNhbSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAzKX0sIC8qIFNldmVyYWwgc21hbGwgQ0lGIGNhbWVyYXMgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwNil9LCBVbmtub3duIFZHQSBjYW1lcmEgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwOCl9LCAvKiBNaW5pLVNob3R6IG1zLTM1MCAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDBhKX0sIC8qIFZpdmljYW0gMzM1MEIgKi8KKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkMWQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU045QzIwMjggY29tbW9uIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybixlZHU+CisgKgorICogQmFzZWQgY2xvc2VseSB1cG9uIHRoZSBmaWxlIGdzcGNhL3BhY19jb21tb24uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc245YzIwMjhfc29mX21hcmtlcls1XSA9CisJeyAweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0IH07CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzbjljMjAyOF9maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCXVuc2lnbmVkIGNoYXIgKm0sIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgU09GIG1hcmtlciAoZml4ZWQgcGFydCkgaW4gdGhlIGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobVtpXSA9PSBzbjljMjAyOF9zb2ZfbWFya2VyW3NkLT5zb2ZfcmVhZF0pIHsKKwkJCXNkLT5zb2ZfcmVhZCsrOworCQkJaWYgKHNkLT5zb2ZfcmVhZCA9PSBzaXplb2Yoc245YzIwMjhfc29mX21hcmtlcikpIHsKKwkJCQlQREVCVUcoRF9GUkFNLAorCQkJCQkiU09GIGZvdW5kLCBieXRlcyB0byBhbmFseXplOiAldS4iCisJCQkJCSIgRnJhbWUgc3RhcnRzIGF0IGJ5dGUgIyV1IiwKKwkJCQkJbGVuLCBpICsgMSk7CisJCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJCQlyZXR1cm4gbSArIGkgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwppbmRleCAwY2ExYzA2Li40YTFiYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGF1dG9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJICAgIHsKQEAgLTE1MDYsMzYgKzE1MDYsMzYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJczMyIGh1ZV9jb29yZCwgaHVlX2luZGV4ID0gMTgwICsgc2QtPmh1ZTsKIAl1OCBjbWF0cml4WzIxXTsKLQltZW1zZXQoY21hdHJpeCwgMCwgMjEpOwogCisJbWVtc2V0KGNtYXRyaXgsIDAsIHNpemVvZiBjbWF0cml4KTsKIAljbWF0cml4WzJdID0gKHNkLT5jb250cmFzdCAqIDB4MjUgLyAweDEwMCkgKyAweDI2OwogCWNtYXRyaXhbMF0gPSAweDEzICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MTMgLyAweDI1OwogCWNtYXRyaXhbNF0gPSAweDA3ICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MDcgLyAweDI1OwogCWNtYXRyaXhbMThdID0gc2QtPmJyaWdodG5lc3MgLSAweDgwOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9yZWRfeFtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFs2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzddID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzZdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfcmVkX3lbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbOF0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFs5XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFs4XSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzldID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2dyZWVuX3hbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGh1ZV9jb29yZCAmIDB4ZmYpOwotCWNtYXRyaXhbMTFdID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzEwXSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzExXSA9IChodWVfY29vcmQgPj4gOCkgJiAweDBmOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9ncmVlbl95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzEyXSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzEzXSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxMl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxM10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV94W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE1XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxNV0gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE3XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCXJldHVybiByZWdfdyhnc3BjYV9kZXYsIDB4MTBlMSwgY21hdHJpeCwgMjEpOwogfQpAQCAtMjAxNSw2ICsyMDE1LDcgQEAKIAlkZWZhdWx0OgogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KIAogCXNkLT5vbGRfc3RlcCA9IDA7CkBAIC0yMzE5LDcgKzIzMjAsNyBAQAogCQl9CiAJfQogCWlmIChhdmdfbHVtID4gTUFYX0FWR19MVU0pIHsKLQkJaWYgKHNkLT5nYWluID49IDEpIHsKKwkJaWYgKHNkLT5nYWluID4gMCkgewogCQkJc2QtPmdhaW4tLTsKIAkJCXNldF9nYWluKGdzcGNhX2Rldik7CiAJCX0KQEAgLTIzNDcsNyArMjM0OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZyYW1lX2hlYWRlcltdID0KKwlzdGF0aWMgdTggZnJhbWVfaGVhZGVyW10gPQogCQl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5Nn07CiAJaWYgKGxlbiA9PSA2NCAmJiBtZW1jbXAoZGF0YSwgZnJhbWVfaGVhZGVyLCA2KSA9PSAwKSB7CiAJCWF2Z19sdW0gPSAoKGRhdGFbMzVdID4+IDIpICYgMykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggZGRmZjJiNS4uNzg1ZWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4YiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CkBAIC01Myw5ICs1NCwxMSBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJYXRvbWljX3QgYXZnX2x1bTsKIAlpbnQgcHJldl9hdmdfbHVtOworCWludCBleHBfdG9vX2xvd19jbnQ7CisJaW50IGV4cF90b29faGlnaF9jbnQ7CiAKKwl1bnNpZ25lZCBzaG9ydCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluX2lnbm9yZV9mcmFtZXM7CkBAIC03Myw4ICs3Niw5IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2MzAgMgogI2RlZmluZSBTRU5TT1JfUEFTMTA2IDMKICNkZWZpbmUgU0VOU09SX1BBUzIwMiA0Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTEwIDUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNgorI2RlZmluZSBTRU5TT1JfVEFTNTExMEMgNQorI2RlZmluZSBTRU5TT1JfVEFTNTExMEQgNgorI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCA3CiAJX191OCByZWcxMTsKIH07CiAKQEAgLTk1LDEzICs5OSwxNSBAQAogLyogc2Vuc29yX2RhdGEgZmxhZ3MgKi8KICNkZWZpbmUgRl9HQUlOIDB4MDEJCS8qIGhhcyBnYWluICovCiAjZGVmaW5lIEZfU0lGICAweDAyCQkvKiBzaWYgb3IgdmdhICovCisjZGVmaW5lIEZfQ09BUlNFX0VYUE8gMHgwNAkvKiBleHBvc3VyZSBjb250cm9sIGlzIGNvYXJzZSAqLwogCiAvKiBwcml2IGZpZWxkIG9mIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZmxhZ3MgKGRvIG5vdCB1c2UgbG93IG5pYmJsZSEpICovCiAjZGVmaW5lIE1PREVfUkFXIDB4MTAJCS8qIHJhdyBiYXllciBtb2RlICovCiAjZGVmaW5lIE1PREVfUkVEVUNFRF9TSUYgMHgyMAkvKiB2Z2EgbW9kZSAoMzIweDI0MCAvIDE2MHgxMjApIG9uIHNpZiBjYW0gKi8KIAogLyogY3RybF9kaXMgaGVscGVyIG1hY3JvcyAqLwotI2RlZmluZSBOT19FWFBPICgoMSA8PCBFWFBPU1VSRV9JRFgpIHwgKDEgPDwgQVVUT0dBSU5fSURYKSkKKyNkZWZpbmUgTk9fRVhQTyAoKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IENPQVJTRV9FWFBPU1VSRV9JRFgpIHwgXAorCQkgKDEgPDwgQVVUT0dBSU5fSURYKSkKICNkZWZpbmUgTk9fRlJFUSAoMSA8PCBGUkVRX0lEWCkKICNkZWZpbmUgTk9fQlJJR0hUTkVTUyAoMSA8PCBCUklHSFRORVNTX0lEWCkKIApAQCAtMTI3LDExICsxMzMsMTAgQEAKIH0KIAogLyogV2UgY2FsY3VsYXRlIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCi0gICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCi0gICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAotICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAotICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLwotI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDEKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE0NSw3ICsxNTAsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJewogCSAgICB7CkBAIC0xNzEsNyArMTc2LDcgQEAKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKICNkZWZpbmUgR0FJTl9ERUYgMTI3Ci0jZGVmaW5lIEdBSU5fS05FRSAyMDAKKyNkZWZpbmUgR0FJTl9LTkVFIDIzMAogCQkuZGVmYXVsdF92YWx1ZSA9IEdBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FpbiwKQEAgLTE4MywxMCArMTg4LDEwIEBACiAJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lID0gIkV4cG9zdXJlIiwKLSNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfREVGICA2NiAvKiAgMzMgbXMgLyAzMCBmcHMgKGV4Y2VwdCBvbiBQQVNYWFgpICovCisjZGVmaW5lIEVYUE9TVVJFX0tORUUgMjAwIC8qIDEwMCBtcyAvIDEwIGZwcyAoZXhjZXB0IG9uIFBBU1hYWCkgKi8KIAkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAorCQkJLm1heGltdW0gPSAxMDIzLAogCQkJLnN0ZXAgPSAxLAogCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCiAJCQkuZmxhZ3MgPSAwLApAQCAtMTk0LDcgKzE5OSwyMyBAQAogCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKIAl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggMworI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiRXhwb3N1cmUiLAorI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfREVGICAyIC8qIDMwIGZwcyAqLworCQkJLm1pbmltdW0gPSAyLAorCQkJLm1heGltdW0gPSAxNSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09BUlNFX0VYUE9TVVJFX0RFRiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA0CiAJewogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKQEAgLTIxMCw3ICsyMzEsNyBAQAogCQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotI2RlZmluZSBGUkVRX0lEWCA0CisjZGVmaW5lIEZSRVFfSURYIDUKIAl7CiAJCXsKIAkJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTIxOSw3ICsyNDAsNyBAQAogCQkJLm1pbmltdW0gPSAwLAogCQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMQorI2RlZmluZSBGUkVRX0RFRiAwCiAJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAogCQl9LAogCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKQEAgLTM0NSw3ICszNjYsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBfX3U4IGluaXRPdjc2MzBfM1tdID0gewogCTB4NDQsIDB4NDQsIDB4MDAsIDB4MWEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4ODAsCS8qIHIwMSAuLiByMDggKi8KLQkweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAkvKiByMDkgLi4gcjEwICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwogCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KIAkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCiAJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCkBAIC0zODcsNiArNDA4LDMwIEBACiAJMHgxOCwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKIC8qIGNvbXByZXNzaW9uIDB4ODYgbWNraW5pdDEgMHgyYiAqLworCisvKiAiS25vd24iIFBBUzEwNkIgcmVnaXN0ZXJzOgorICAweDAyIGNsb2NrIGRpdmlkZXIKKyAgMHgwMyBWYXJpYWJsZSBmcmFtZXJhdGUgYml0cyA0LTExCisgIDB4MDQgVmFyIGZyYW1lcmF0ZSBiaXRzIDAtMywgb25lIG11c3QgbGVhdmUgdGhlIDQgbXNiJ3MgYXQgMCAhIQorICAgICAgIFRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBtdXN0IG5ldmVyIGJlIHNldCBsb3dlciB0aGVuIDMwMCwKKyAgICAgICB3aGljaCBzZXRzIHRoZSBmcmFtZXJhdGUgYXQgOTAgLyByZWcwMiwgb3RoZXJ3aXNlIHZzeW5jIGlzIGxvc3QuCisgIDB4MDUgU2h1dHRlciBUaW1lIExpbmUgT2Zmc2V0LCB0aGlzIGNhbiBiZSB1c2VkIGFzIGFuIGV4cG9zdXJlIGNvbnRyb2w6CisgICAgICAgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUsIDI1NSA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAgICAgIE5vdGUgdGhpcyBtYXkgbmV2ZXIgYmUgbGFyZ2VyIHRoZW4gInZhci1mcmFtZXJhdGUgY29udHJvbCIgLyAyIC0gMi4KKyAgICAgICBXaGVuIHZhci1mcmFtZXJhdGUgY29udHJvbCBpcyA8IDUxNCwgbm8gZXhwb3N1cmUgaXMgcmVhY2hlZCBhdCB0aGUgbWF4CisgICAgICAgYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIGZyYW1lcmF0ZSBjb250cm9sIHZhbHVlLCByYXRoZXIgdGhlbiBhdCAyNTUuCisgIDB4MDYgU2h1dHRlciBUaW1lIFBpeGVsIE9mZnNldCwgbGlrZSByZWcwNSB0aGlzIGluZmx1ZW5jZXMgZXhwb3N1cmUsIGJ1dAorICAgICAgIG9ubHkgYSB2ZXJ5IGxpdHRsZSBiaXQsIGxlYXZlIGF0IDB4Y2QKKyAgMHgwNyBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwOCBvZmZzZXQKKyAgMHgwOSBCbHVlIEdhaW4KKyAgMHgwYSBHcmVlbjEgR2FpbgorICAweDBiIEdyZWVuMiBHYWluCisgIDB4MGMgUmVkIEdhaW4KKyAgMHgwZSBHbG9iYWwgZ2FpbgorICAweDEzIFdyaXRlIDEgdG8gY29tbWl0IHNldHRpbmdzIHRvIHNlbnNvcgorKi8KKwogc3RhdGljIGNvbnN0IF9fdTggcGFzMTA2X3NlbnNvcl9pbml0W11bOF0gPSB7CiAJLyogUGl4ZWwgQ2xvY2sgRGl2aWRlciA2ICovCiAJeyAweGExLCAweDQwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE0IH0sCkBAIC00MzMsMzcgKzQ3OCw1NSBAQAogCTB4NDQsIDB4NDQsIDB4MjEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAzLCAweDBhLAotCTB4MjgsIDB4MWUsIDB4MjgsIDB4ODksIDB4MjAsCisJMHgyOCwgMHgxZSwgMHgyMCwgMHg4OSwgMHgyMCwKIAkweDAwLCAweDAwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCiB9OworCisvKiAiS25vd24iIFBBUzIwMkJDQiByZWdpc3RlcnM6CisgIDB4MDIgY2xvY2sgZGl2aWRlcgorICAweDA0IFZhcmlhYmxlIGZyYW1lcmF0ZSBiaXRzIDYtMTEgKCopCisgIDB4MDUgVmFyIGZyYW1lcmF0ZSAgYml0cyAwLTUsIG9uZSBtdXN0IGxlYXZlIHRoZSAyIG1zYidzIGF0IDAgISEKKyAgMHgwNyBCbHVlIEdhaW4KKyAgMHgwOCBHcmVlbiBHYWluCisgIDB4MDkgUmVkIEdhaW4KKyAgMHgwYiBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwYyBvZmZzZXQKKyAgMHgwZSBVbmtub3duIGltYWdlIGlzIHNsaWdodGx5IGJyaWdodGVyIHdoZW4gYml0IDAgaXMgMCwgaWYgcmVnMGYgaXMgMCB0b28sCisgICAgICAgbGVhdmUgYXQgMSBvdGhlcndpc2Ugd2UgZ2V0IGEganVtcCBpbiBvdXIgZXhwb3N1cmUgY29udHJvbAorICAweDBmIEV4cG9zdXJlIDAtMjU1LCAwID0gdXNlIGZ1bGwgZnJhbWUgdGltZSwgMjU1ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgIDB4MTAgTWFzdGVyIGdhaW4gMCAtIDMxCisgIDB4MTEgd3JpdGUgMSB0byBhcHBseSBjaGFuZ2VzCisgICgqKSBUaGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgbXVzdCBuZXZlciBiZSBzZXQgbG93ZXIgdGhlbiA1MDAKKyAgICAgIHdoaWNoIHNldHMgdGhlIGZyYW1lcmF0ZSBhdCAzMCAvIHJlZzAyLCBvdGhlcndpc2UgdnN5bmMgaXMgbG9zdC4KKyovCiBzdGF0aWMgY29uc3QgX191OCBwYXMyMDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyIHRvIDQgLT4gMzAgLyA0ID0gNy41IGZwcywgd2Ugd291bGQgbGlrZQorCSAgIHRvIHNldCBpdCBsb3dlciwgYnV0IGZvciBzb21lIHJlYXNvbiB0aGUgYnJpZGdlIHN0YXJ0cyBtaXNzaW5nCisJICAgdnN5bmMncyB0aGVuICovCisJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDA0LCAweDA3LCAweDM0LCAweDAwLCAweDA5LCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMH0sCi0JezB4ZDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAxLCAweDMyLCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTUsIDB4NzAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDE4LCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MDMsIDB4NTYsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKLQl7MHhiMCwgMHg0MCwgMHgwNCwgMHgwNywgMHgyYSwgMHgwMCwgMHg2MywgMHgxMH0sCi0JezB4YjAsIDB4NDAsIDB4MGUsIDB4MDAsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTB9LAotCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDEwLCAweDA4LCAweDNkLCAweDAwLCAweDYzLCAweDE1fSwKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGIwLCAweDQwLCAweDBlLCAweDAwLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9LAotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwW10gPSB7CitzdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMGNbXSA9IHsKIAkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwOSwgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDA5LCAweDBhLAorCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCisJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworfTsKKy8qIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhIGRpZmZlcmVudCBoc3RhcnQgKi8KK3N0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwZFtdID0geworCTB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDBhLAogCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCiAJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKQEAgLTQ3Niw3ICs1MzksNyBAQAogc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMzBbXSA9IHsKIAkweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBjLCAweDBhLAogCTB4MjgsIDB4MWUsIDB4NjAsIENPTVAsIE1DS19JTklULAogCTB4MTgsIDB4MTAsIDB4MDQsIDB4MDMsIDB4MTEsIDB4MGMKIH07CkBAIC00OTMsMTIgKzU1NiwxNCBAQAogU0VOUyhpbml0T3Y2NjUwLCBOVUxMLCBvdjY2NTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgMCwgMHg2MCksCiBTRU5TKGluaXRPdjc2MzAsIGluaXRPdjc2MzBfMywgb3Y3NjMwX3NlbnNvcl9pbml0LCBOVUxMLCBvdjc2MzBfc2Vuc29yX2luaXRfMywKIAlGX0dBSU4sIDAsIDB4MjEpLAotU0VOUyhpbml0UGFzMTA2LCBOVUxMLCBwYXMxMDZfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfU0lGLCBOT19FWFBPfE5PX0ZSRVEsCitTRU5TKGluaXRQYXMxMDYsIE5VTEwsIHBhczEwNl9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgRl9HQUlOfEZfU0lGLCBOT19GUkVRLAogCTApLAotU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsCi0JTk9fRVhQT3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdFRhczUxMTAsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwKLQlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwKKwlOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFRhczUxMTBjLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLAorCUZfR0FJTnxGX1NJRnxGX0NPQVJTRV9FWFBPLCBOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGQsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsCisJRl9HQUlOfEZfU0lGfEZfQ09BUlNFX0VYUE8sIE5PX0JSSUdIVE5FU1N8Tk9fRlJFUSwgMCksCiBTRU5TKGluaXRUYXM1MTMwLCBOVUxMLCB0YXM1MTMwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLCBOT19FWFBPfE5PX0ZSRVEsCiAJMCksCiB9OwpAQCAtNTg3LDQyICs2NTIsMjggQEAKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAkgICAgfQotCWNhc2UgU0VOU09SX1BBUzEwNjogewotCQlfX3U4IGkyYzFbXSA9Ci0JCQl7MHhhMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07Ci0KLQkJaTJjMVszXSA9IHNkLT5icmlnaHRuZXNzID4+IDM7Ci0JCWkyYzFbMl0gPSAweDBlOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaTJjMVszXSA9IDB4MDE7Ci0JCWkyYzFbMl0gPSAweDEzOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJYnJlYWs7Ci0JICAgIH0KKwljYXNlIFNFTlNPUl9QQVMxMDY6CiAJY2FzZSBTRU5TT1JfUEFTMjAyOiB7Ci0JCS8qIF9fdTggaTJjcGV4cG8xW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MmEsIDB4MDAsIDB4NjMsIDB4MTZ9OyAqLwotCQlfX3U4IGkyY3BleHBvW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MGUsIDB4MDEsIDB4YWIsIDB4MDAsIDB4NjMsIDB4MTZ9OwotCQlfX3U4IGkyY3AyMDJbXSA9Ci0JCQl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwZSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNX07Ci0JCXN0YXRpYyBfX3U4IGkyY3Bkb2l0W10gPQotCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9OworCQlfX3U4IGkyY3BicmlnaHRbXSA9CisJCQl7MHhiMCwgMHg0MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CiAKLQkJLyogY2hhbmdlIHJlZyAweDEwICovCi0JCWkyY3BleHBvWzRdID0gMHhmZiAtIHNkLT5icmlnaHRuZXNzOwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZXhwbzEpIDwgMCkKLQkJCWdvdG8gZXJyOyAqLwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZG9pdCkgPCAwKQotCQkJZ290byBlcnI7ICovCi0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpMmNwMjAyWzNdID0gc2QtPmJyaWdodG5lc3MgPj4gMzsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcDIwMikgPCAwKQorCQkvKiBQQVMxMDYgdXNlcyByZWcgNyBhbmQgOCBpbnN0ZWFkIG9mIGIgYW5kIGMgKi8KKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgeworCQkJaTJjcGJyaWdodFsyXSA9IDc7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpZiAoc2QtPmJyaWdodG5lc3MgPCAxMjcpIHsKKwkJCS8qIGNoYW5nZSByZWcgMHgwYiwgc2lnbnJlZyAqLworCQkJaTJjcGJyaWdodFszXSA9IDB4MDE7CisJCQkvKiBzZXQgcmVnIDB4MGMsIG9mZnNldCAqLworCQkJaTJjcGJyaWdodFs0XSA9IDEyNyAtIHNkLT5icmlnaHRuZXNzOworCQl9IGVsc2UKKwkJCWkyY3BicmlnaHRbNF0gPSBzZC0+YnJpZ2h0bmVzcyAtIDEyNzsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwYnJpZ2h0KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKIAkJCWdvdG8gZXJyOwpAQCAtNjUyLDcgKzcwMyw4IEBACiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAotCWNhc2UgU0VOU09SX1RBUzUxMTA6IHsKKwljYXNlIFNFTlNPUl9UQVM1MTEwQzoKKwljYXNlIFNFTlNPUl9UQVM1MTEwRDogewogCQlfX3U4IGkyY1tdID0KIAkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKIApAQCAtNjc0LDYgKzcyNiwzNyBAQAogCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OgorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQlfX3U4IGkyY3BnYWluW10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTV9OworCQlfX3U4IGkyY3Bjb2xvcmdhaW5bXSA9CisJCQl7MHhjMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNX07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisKKwkJLyogUEFTMTA2IHVzZXMgZGlmZmVyZW50IHJlZ3MgKGFuZCBoYXMgc3BsaXQgZ3JlZW4gZ2FpbnMpICovCisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJCWkyY3BnYWluWzJdID0gMHgwZTsKKwkJCWkyY3Bjb2xvcmdhaW5bMF0gPSAweGQwOworCQkJaTJjcGNvbG9yZ2FpblsyXSA9IDB4MDk7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpMmNwZ2FpblszXSA9IHNkLT5nYWluID4+IDM7CisJCWkyY3Bjb2xvcmdhaW5bM10gPSBzZC0+Z2FpbiA+PiA0OworCQlpMmNwY29sb3JnYWluWzRdID0gc2QtPmdhaW4gPj4gNDsKKwkJaTJjcGNvbG9yZ2Fpbls1XSA9IHNkLT5nYWluID4+IDQ7CisJCWkyY3Bjb2xvcmdhaW5bNl0gPSBzZC0+Z2FpbiA+PiA0OworCisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BnYWluKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGNvbG9yZ2FpbikgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KIAl9CiAJcmV0dXJuOwogZXJyOgpAQCAtNjg0LDE5ICs3NjcsMjEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBnYWluOwotCV9fdTggcmdiX3ZhbHVlOworCV9fdTggYnVmWzJdID0geyAwLCAwIH07CisKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pIHsKKwkJLyogVXNlIHRoZSBzZW5zb3IgZ2FpbiB0byBkbyB0aGUgYWN0dWFsIGdhaW4gKi8KKwkJc2V0c2Vuc29yZ2Fpbihnc3BjYV9kZXYpOworCQlyZXR1cm47CisJfQogCiAJZ2FpbiA9IHNkLT5nYWluID4+IDQ7CiAKIAkvKiByZWQgYW5kIGJsdWUgZ2FpbiAqLwotCXJnYl92YWx1ZSA9IGdhaW4gPDwgNCB8IGdhaW47Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDEwLCAmcmdiX3ZhbHVlLCAxKTsKKwlidWZbMF0gPSBnYWluIDw8IDQgfCBnYWluOwogCS8qIGdyZWVuIGdhaW4gKi8KLQlyZ2JfdmFsdWUgPSBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgJnJnYl92YWx1ZSwgMSk7Ci0KLQlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pCi0JCXNldHNlbnNvcmdhaW4oZ3NwY2FfZGV2KTsKKwlidWZbMV0gPSBnYWluOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgYnVmLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNzA0LDE3ICs3ODksMTIgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9UQVM1MTEwOiB7Ci0JCV9fdTggcmVnOwotCisJY2FzZSBTRU5TT1JfVEFTNTExMEM6CisJY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKIAkJLyogcmVnaXN0ZXIgMTkncyBoaWdoIG5pYmJsZSBjb250YWlucyB0aGUgc245YzEweCBjbG9jayBkaXZpZGVyCiAJCSAgIFRoZSBoaWdoIG5pYmJsZSBjb25maWd1cmVzIHRoZSBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZQogCQkgICBmb3JtdWxhOiA2MCAvIGhpZ2hfbmliYmxlLiBXaXRoIGEgbWF4aW11bSBvZiAzMCBmcHMgKi8KLQkJcmVnID0gMTIwICogc2QtPmV4cG9zdXJlIC8gMTAwMDsKLQkJaWYgKHJlZyA8IDIpCi0JCQlyZWcgPSAyOwotCQllbHNlIGlmIChyZWcgPiAxNSkKLQkJCXJlZyA9IDE1OworCQlfX3U4IHJlZyA9IHNkLT5leHBvc3VyZTsKIAkJcmVnID0gKHJlZyA8PCA0KSB8IDB4MGI7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZywgMSk7CiAJCWJyZWFrOwpAQCAtNzUwLDIwICs4MzAsMjEgQEAKIAkJfSBlbHNlCiAJCQlyZWcxMF9tYXggPSAweDQxOwogCi0JCXJlZzExID0gKDYwICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CisJCXJlZzExID0gKDE1ICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CiAJCWlmIChyZWcxMSA8IDEpCiAJCQlyZWcxMSA9IDE7CiAJCWVsc2UgaWYgKHJlZzExID4gMTYpCiAJCQlyZWcxMSA9IDE2OwogCi0JCS8qIEluIDY0MHg0ODAsIGlmIHRoZSByZWcxMSBoYXMgbGVzcyB0aGFuIDMsIHRoZSBpbWFnZSBpcwotCQkgICB1bnN0YWJsZSAobm90IGVub3VnaCBiYW5kd2lkdGgpLiAqLwotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSA2NDAgJiYgcmVnMTEgPCAzKQotCQkJcmVnMTEgPSAzOworCQkvKiBJbiA2NDB4NDgwLCBpZiB0aGUgcmVnMTEgaGFzIGxlc3MgdGhhbiA0LCB0aGUgaW1hZ2UgaXMKKwkJICAgdW5zdGFibGUgKHRoZSBicmlkZ2UgZ29lcyBpbnRvIGEgaGlnaGVyIGNvbXByZXNzaW9uIG1vZGUKKwkJICAgd2hpY2ggd2UgaGF2ZSBub3QgcmV2ZXJzZSBlbmdpbmVlcmVkIHlldCkuICovCisJCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDY0MCAmJiByZWcxMSA8IDQpCisJCQlyZWcxMSA9IDQ7CiAKIAkJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiByZWcxMSAvIDMwICAgIC0+Ci0JCXJlZzEwID0gc2QtPmV4cG9zdXJlICogMiAqIHJlZzEwX21heCAvICgxMDAwICogcmVnMTEgLyAzMCkgKi8KLQkJcmVnMTAgPSAoc2QtPmV4cG9zdXJlICogNjAgKiByZWcxMF9tYXgpIC8gKDEwMDAgKiByZWcxMSk7CisJCXJlZzEwID0gKHNkLT5leHBvc3VyZSAvIDIpICogcmVnMTBfbWF4IC8gKDEwMDAgKiByZWcxMSAvIDMwKSAqLworCQlyZWcxMCA9IChzZC0+ZXhwb3N1cmUgKiAxNSAqIHJlZzEwX21heCkgLyAoMTAwMCAqIHJlZzExKTsKIAogCQkvKiBEb24ndCBhbGxvdyB0aGlzIHRvIGdldCBiZWxvdyAxMCB3aGVuIHVzaW5nIGF1dG9nYWluLCB0aGUKIAkJICAgc3RlcHMgYmVjb21lIHZlcnkgbGFyZ2UgKHJlbGF0aXZlbHkpIHdoZW4gYmVsb3cgMTAgY2F1c2luZwpAQCAtNzg2LDEwICs4NjcsODUgQEAKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA9PSAwKQogCQkJc2QtPnJlZzExID0gcmVnMTE7CiAJCWVsc2UKLQkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOworCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMjAyOiB7CisJCV9fdTggaTJjcGZyYW1lcmF0ZVtdID0KKwkJCXsweGIwLCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJX191OCBpMmNwZXhwb1tdID0KKwkJCXsweGEwLCAweDQwLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJY29uc3QgX191OCBpMmNwZG9pdFtdID0KKwkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJaW50IGZyYW1lcmF0ZV9jdHJsOworCisJCS8qIFRoZSBleHBvc3VyZSBrbmVlIGZvciB0aGUgYXV0b2dhaW4gYWxnb3JpdGhtIGlzIDIwMAorCQkgICAoMTAwIG1zIC8gMTAgZnBzIG9uIG90aGVyIHNlbnNvcnMpLCBmb3IgdmFsdWVzIGJlbG93IHRoaXMKKwkJICAgdXNlIHRoZSBjb250cm9sIGZvciBzZXR0aW5nIHRoZSBwYXJ0aWFsIGZyYW1lIGV4cG9zZSB0aW1lLAorCQkgICBhYm92ZSB0aGF0IHVzZSB2YXJpYWJsZSBmcmFtZXJhdGUuIFRoaXMgd2F5IHdlIHJ1biBhdCBtYXgKKwkJICAgZnJhbWVyYXRlICg2NDB4NDgwQDcuNSBmcHMsIDMyMHgyNDBAMTBmcHMpIHVudGlsIHRoZSBrbmVlCisJCSAgIGlzIHJlYWNoZWQuIFVzaW5nIHRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBhYm92ZSAyMDAKKwkJICAgaXMgYmV0dGVyIHRoZW4gcGxheWluZyBhcm91bmQgd2l0aCBib3RoIGNsb2NrZGl2ICsgcGFydGlhbAorCQkgICBmcmFtZSBleHBvc3VyZSB0aW1lcyAobGlrZSB3ZSBhcmUgZG9pbmcgd2l0aCB0aGUgb3YgY2hpcHMpLAorCQkgICBhcyB0aGF0IHNvbWV0aW1lcyBsZWFkcyB0byBqdW1wcyBpbiB0aGUgZXhwb3N1cmUgY29udHJvbCwKKwkJICAgd2hpY2ggYXJlIGJhZCBmb3IgYXV0byBleHBvc3VyZS4gKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDIwMCkgeworCQkJaTJjcGV4cG9bM10gPSAyNTUgLSAoc2QtPmV4cG9zdXJlICogMjU1KSAvIDIwMDsKKwkJCWZyYW1lcmF0ZV9jdHJsID0gNTAwOworCQl9IGVsc2UgeworCQkJLyogVGhlIFBBUzIwMidzIGV4cG9zdXJlIGNvbnRyb2wgZ29lcyBmcm9tIDAgLSA0MDk1LAorCQkJICAgYnV0IGFueXRoaW5nIGJlbG93IDUwMCBjYXVzZXMgdnN5bmMgaXNzdWVzLCBzbyBzY2FsZQorCQkJICAgb3VyIDIwMC0xMDIzIHRvIDUwMC00MDk1ICovCisJCQlmcmFtZXJhdGVfY3RybCA9IChzZC0+ZXhwb3N1cmUgLSAyMDApICogMTAwMCAvIDIyOSArCisJCQkJCSA1MDA7CisJCX0KKworCQlpMmNwZnJhbWVyYXRlWzNdID0gZnJhbWVyYXRlX2N0cmwgPj4gNjsKKwkJaTJjcGZyYW1lcmF0ZVs0XSA9IGZyYW1lcmF0ZV9jdHJsICYgMHgzZjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGZyYW1lcmF0ZSkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzEwNjogeworCQlfX3U4IGkyY3BmcmFtZXJhdGVbXSA9CisJCQl7MHhiMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCV9fdTggaTJjcGV4cG9bXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWNvbnN0IF9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWludCBmcmFtZXJhdGVfY3RybDsKKworCQkvKiBGb3IgdmFsdWVzIGJlbG93IDE1MCB1c2UgcGFydGlhbCBmcmFtZSBleHBvc3VyZSwgYWJvdmUKKwkJICAgdGhhdCB1c2UgZnJhbWVyYXRlIGN0cmwgKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDE1MCkgeworCQkJaTJjcGV4cG9bM10gPSAxNTAgLSBzZC0+ZXhwb3N1cmU7CisJCQlmcmFtZXJhdGVfY3RybCA9IDMwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBQQVMxMDYncyBleHBvc3VyZSBjb250cm9sIGdvZXMgZnJvbSAwIC0gNDA5NSwKKwkJCSAgIGJ1dCBhbnl0aGluZyBiZWxvdyAzMDAgY2F1c2VzIHZzeW5jIGlzc3Vlcywgc28gc2NhbGUKKwkJCSAgIG91ciAxNTAtMTAyMyB0byAzMDAtNDA5NSAqLworCQkJZnJhbWVyYXRlX2N0cmwgPSAoc2QtPmV4cG9zdXJlIC0gMTUwKSAqIDEwMDAgLyAyMzAgKworCQkJCQkgMzAwOworCQl9CisKKwkJaTJjcGZyYW1lcmF0ZVszXSA9IGZyYW1lcmF0ZV9jdHJsID4+IDQ7CisJCWkyY3BmcmFtZXJhdGVbNF0gPSBmcmFtZXJhdGVfY3RybCAmIDB4MGY7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BmcmFtZXJhdGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KIAl9CisJcmV0dXJuOworZXJyOgorCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTgyMywzMCArOTc5LDQzIEBACiAJfQogfQogCisjaW5jbHVkZSAiY29hcnNlX2V4cG9fYXV0b2dhaW4uaCIKKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtOworCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtLCByZXN1bHQ7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtID0gYXRvbWljX3JlYWQoJnNkLT5hdmdfbHVtKTsKIAotCWlmIChhdmdfbHVtID09IC0xKQorCWlmIChhdmdfbHVtID09IC0xIHx8ICFzZC0+YXV0b2dhaW4pCiAJCXJldHVybjsKIAorCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApIHsKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNJRiAvIFZHQSBzZW5zb3JzIGhhdmUgYSBkaWZmZXJlbnQgYXV0b2V4cG9zdXJlIGFyZWEgYW5kIHRodXMKIAkgICBkaWZmZXJlbnQgYXZnX2x1bSB2YWx1ZXMgZm9yIHRoZSBzYW1lIHBpY3R1cmUgYnJpZ2h0bmVzcyAqLwogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfU0lGKSB7Ci0JCWRlYWR6b25lID0gMTAwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gNzAwMDsKKwkJZGVhZHpvbmUgPSA1MDA7CisJCS8qIFNJRiBzZW5zb3JzIHRlbmQgdG8gb3ZlcmV4cG9zZSwgc28ga2VlcCB0aGlzIHNtYWxsICovCisJCWRlc2lyZWRfYXZnX2x1bSA9IDUwMDA7CiAJfSBlbHNlIHsKLQkJZGVhZHpvbmUgPSAzMDAwOwotCQlkZXNpcmVkX2F2Z19sdW0gPSAyMzAwMDsKKwkJZGVhZHpvbmUgPSAxNTAwOworCQlkZXNpcmVkX2F2Z19sdW0gPSAxODAwMDsKIAl9CiAKLQlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQotCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwotCWVsc2UgaWYgKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKGdzcGNhX2RldiwgYXZnX2x1bSwKLQkJCXNkLT5icmlnaHRuZXNzICogZGVzaXJlZF9hdmdfbHVtIC8gMTI3LAotCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSkpIHsKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKQorCQlyZXN1bHQgPSBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKGdzcGNhX2RldiwgYXZnX2x1bSwKKwkJCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKKwkJCQlkZWFkem9uZSk7CisJZWxzZQorCQlyZXN1bHQgPSBnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkJc2QtPmJyaWdodG5lc3MgKiBkZXNpcmVkX2F2Z19sdW0gLyAxMjcsCisJCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSk7CisKKwlpZiAocmVzdWx0KSB7CiAJCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogZ2FpbiBjaGFuZ2VkOiBnYWluOiAlZCBleHBvOiAlZCIsCiAJCQkoaW50KXNkLT5nYWluLCAoaW50KXNkLT5leHBvc3VyZSk7CiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKQEAgLTg4MSw3ICsxMDUwLDEzIEBACiAKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0Jc2QtPmV4cG9zdXJlID0gRVhQT1NVUkVfREVGOworCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfQ09BUlNFX0VYUE8pIHsKKwkJc2QtPmV4cG9zdXJlID0gQ09BUlNFX0VYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBFWFBPU1VSRV9JRFgpOworCX0gZWxzZSB7CisJCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBDT0FSU0VfRVhQT1NVUkVfSURYKTsKKwl9CiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBBVVRPR0FJTl9JRFgpKQogCQlzZC0+YXV0b2dhaW4gPSAwOyAvKiBEaXNhYmxlIGRvX2F1dG9nYWluIGNhbGxiYWNrICovCiAJZWxzZQpAQCAtOTE3LDkgKzEwOTIsNiBAQAogCXJlZzEyXzE5WzZdID0gc245YzEweFsweDE4IC0gMV0gfCAobW9kZSA8PCA0KTsKIAkvKiBTcGVjaWFsIGNhc2VzIHdoZXJlIHJlZyAxNyBhbmQgb3IgMTkgdmFsdWUgZGVwZW5kcyBvbiBtb2RlICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfUEFTMjAyOgotCQlyZWcxMl8xOVs1XSA9IG1vZGUgPyAweDI0IDogMHgyMDsKLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAkJLyogcHJvYmFibHkgbm90IG1vZGUgc3BlY2lmaWMgYXQgYWxsIG1vc3QgbGlrZWx5IHRoZSB1cHBlcgogCQkgICBuaWJibGUgb2YgMHgxOSBpcyBleHBvc3VyZSAoY2xvY2sgZGl2aWRlcikganVzdCBhcyB3aXRoCkBAIC05NTUsNiArMTEyNywxNiBAQAogCQkJc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc2Vuc29yX2JyaWRnZV9pbml0X3NpemVbCiAJCQkJc2QtPmJyaWRnZV0pOwogCisJLyogTW9kZSBzcGVjaWZpYyBzZW5zb3Igc2V0dXAgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QQVMyMDI6IHsKKwkJY29uc3QgX191OCBpMmNwY2xvY2tkaXZbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCS8qIGNsb2NrZGl2IGZyb20gNCB0byAzICg3LjUgLT4gMTAgZnBzKSB3aGVuIGluIGxvdyByZXMgbW9kZSAqLworCQlpZiAobW9kZSkKKwkJCWkyY193KGdzcGNhX2RldiwgaTJjcGNsb2NrZGl2KTsKKwkgICAgfQorCX0KIAkvKiBIX3NpemUgVl9zaXplIDB4MjgsIDB4MWUgLT4gNjQweDQ4MC4gMHgxNiwgMHgxMiAtPiAzNTJ4Mjg4ICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAmcmVnMTJfMTlbM10sIDIpOwogCS8qIGNvbXByZXNzaW9uIHJlZ2lzdGVyICovCkBAIC05ODUsNiArMTE2Nyw4IEBACiAKIAlzZC0+ZnJhbWVzX3RvX2Ryb3AgPSAwOwogCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gMDsKKwlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDMsMTEgKzEzMjcsMTQgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CisJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCiAJLyogd2hlbiBzd2l0Y2hpbmcgdG8gYXV0b2dhaW4gc2V0IGRlZmF1bHRzIHRvIG1ha2Ugc3VyZQogCSAgIHdlIGFyZSBvbiBhIHZhbGlkIHBvaW50IG9mIHRoZSBhdXRvZ2FpbiBnYWluIC8KIAkgICBleHBvc3VyZSBrbmVlIGdyYXBoLCBhbmQgZ2l2ZSB0aGlzIGNoYW5nZSB0aW1lIHRvCiAJICAgdGFrZSBlZmZlY3QgYmVmb3JlIGRvaW5nIGF1dG9nYWluLiAqLwotCWlmIChzZC0+YXV0b2dhaW4pIHsKKwlpZiAoc2QtPmF1dG9nYWluICYmICEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKSkgewogCQlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CiAJCXNkLT5nYWluID0gR0FJTl9ERUY7CiAJCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewpAQCAtMTIwNyw2ICsxMzk0LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMTIxOSw2ICsxNDI1LDkgQEAKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9nYWluLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTIyNywyMSArMTQzNiwyMSBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTAsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwLCAxMDEpfSwgLyogVEFTNTExMEMxQiAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgU0IoVEFTNTExMEMsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwQywgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBTQihUQVM1MTEwRCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIFNCKFBBUzEwNiwgMTAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCBTQihQQVMxMDYsIDEwMSl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEpLCBTQihPVjY2NTAsIDEwMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTkpLCBTQihPVjc2MzAsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCBTQihUQVM1MTMwQ1hYLCAxMDIpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgU0IoUEFTMjAyLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIFNCKFBBUzEwNiwgMTAyKX0sCi0jZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMGJkMzZhMC4uODNkNTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4aiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKQEAgLTQ1LDYgKzQ2LDcgQEAKIAl1OCByZWQ7CiAJdTggZ2FtbWE7CiAJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggc2hhcnBuZXNzOwogCXU4IGluZnJhcmVkOwkJCS8qIG10OXYxMTEgb25seSAqLwogCXU4IGZyZXE7CQkJLyogb3Y3Nnh4IG9ubHkgKi8KIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KQEAgLTY0LDE2ICs2NiwxNyBAQAogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKIAl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwotI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCi0jZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQotI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX01UOVYxMTEgMwotI2RlZmluZSBTRU5TT1JfT002ODAyIDQKLSNkZWZpbmUgU0VOU09SX09WNzYzMCA1Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NDggNgotI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKLSNkZWZpbmUgU0VOU09SX1BPMTAzMCA4Ci0jZGVmaW5lIFNFTlNPUl9TUDgwNzA4IDkKKyNkZWZpbmUgU0VOU09SX0FEQ00xNzAwIDAKKyNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMQorI2RlZmluZSBTRU5TT1JfTUkwMzYwIDIKKyNkZWZpbmUgU0VOU09SX01PNDAwMCAzCisjZGVmaW5lIFNFTlNPUl9NVDlWMTExIDQKKyNkZWZpbmUgU0VOU09SX09NNjgwMiA1CisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgNgorI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDcKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA4CisjZGVmaW5lIFNFTlNPUl9QTzEwMzAgOQorI2RlZmluZSBTRU5TT1JfU1A4MDcwOCAxMAogCXU4IGkyY19hZGRyOwogCiAJdTggKmpwZWdfaGRyOwpAQCAtOTYsMTIgKzk5LDE0IEBACiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aW5mcmFyZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCXsKIAkgICAgewpAQCAtMjI1LDggKzIzMCwyMyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAorI2RlZmluZSBTSEFSUE5FU1NfSURYIDgKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgOTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCX0sCiAvKiBtdDl2MTExIG9ubHkgKi8KLSNkZWZpbmUgSU5GUkFSRURfSURYIDgKKyNkZWZpbmUgSU5GUkFSRURfSURYIDkKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9JTkZSQVJFRCwKQEAgLTI0Miw3ICsyNjIsNyBAQAogCSAgICAuZ2V0ID0gc2RfZ2V0aW5mcmFyZWQsCiAJfSwKIC8qIG92NzYzMC9vdjc2NDgvb3Y3NjYwIG9ubHkgKi8KLSNkZWZpbmUgRlJFUV9JRFggOQorI2RlZmluZSBGUkVRX0lEWCAxMAogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0yNjEsMjggKzI4MSwzNyBAQAogCiAvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KIHN0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0geworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpIHwKKwkJCSgxIDw8IEFVVE9HQUlOX0lEWCksCS8qIFNFTlNPUl9BRENNMTcwMCAwICovCisJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDEgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDAgKi8KKwkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01JMDM2MCAxICovCi0JKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTU80MDAwIDIgKi8KKwkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMyAqLwogCSgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSAzICovCisJCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSA0ICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT002ODAyIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgNSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NDggNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLworCQkJCQkJLyogU0VOU09SX09WNzY2MCA4ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwKLQkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1BPMTAzMCA4ICovCisJCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9QTzEwMzAgOSAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8Ci0JCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9TUDgwNzA4IDkgKi8KKwkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1NQODA3MDggMTAgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCkBAIC0zMDIsNiArMzMxLDE3IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3QgdTggc25fYWRjbTE3MDBbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDQzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDAwLAkweDAwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MCwJMHg1MSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwNSwJMHgwMSwJMHgwNSwJMHgxNiwJMHgxMiwJMHg0MiwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNiwJMHgwMCwJMHgwMCwJMHgwMAorfTsKKwogLypEYXRhIGZyb20gc245YzEwMnAraHY3MTMxciAqLwogc3RhdGljIGNvbnN0IHU4IHNuX2h2NzEzMVsweDFjXSA9IHsKIC8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLwpAQCAtNDE1LDYgKzQ1NSw3IEBACiAKIC8qIHNlcXVlbmNlIHNwZWNpZmljIHRvIHRoZSBzZW5zb3JzIC0gISEgaW5kZXggPSBTRU5TT1JfeHh4ICovCiBzdGF0aWMgY29uc3QgdTggKnNuX3RiW10gPSB7CisJc25fYWRjbTE3MDAsCiAJc25faHY3MTMxLAogCXNuX21pMDM2MCwKIAlzbl9tbzQwMDAsCkBAIC00MzIsNiArNDczLDExIEBACiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvciBBRENNMTcwMCAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMFsxN10gPSB7CisJMHgwZiwgMHgzOSwgMHg1YSwgMHg3NCwgMHg4NiwgMHg5NSwgMHhhNiwgMHhiNCwKKwkweGJkLCAweGM0LCAweGNjLCAweGQ0LCAweGQ1LCAweGRlLCAweGU0LCAweGVkLCAweGY1Cit9OwogLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLwogc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CiAJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKQEAgLTQ1MCw2ICs0OTYsNDIgQEAKIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKK3N0YXRpYyBjb25zdCB1OCBhZGNtMTcwMF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGEwLCAweDUxLCAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIHJlc2V0ICovCisJezB4ZGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MGMsIDB4ZTAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDEwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxNCwgMHgwZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGRkLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggYWRjbTE3MDBfc2Vuc29yX3BhcmFtMVtdWzhdID0geworCXsweGIwLCAweDUxLCAweDI2LCAweGY5LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisJezB4ZDAsIDB4NTEsIDB4MWUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4MTB9LAorCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQwLCAweDUxLCAweDFlLCAweGJlLCAweGQ3LCAweGU4LCAweGJlLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDUxLCAweGZlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CiBzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC05ODYsMTcgKzEwNjgsMTggQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHU4ICgqc2Vuc29yX2luaXRbMTBdKVs4XSA9IHsKLQlodjcxMzFyX3NlbnNvcl9pbml0LAkvKiBIVjcxMzFSIDAgKi8KLQltaTAzNjBfc2Vuc29yX2luaXQsCS8qIE1JMDM2MCAxICovCi0JbW80MDAwX3NlbnNvcl9pbml0LAkvKiBNTzQwMDAgMiAqLwotCW10OXYxMTFfc2Vuc29yX2luaXQsCS8qIE1UOVYxMTEgMyAqLwotCW9tNjgwMl9zZW5zb3JfaW5pdCwJLyogT002ODAyIDQgKi8KLQlvdjc2MzBfc2Vuc29yX2luaXQsCS8qIE9WNzYzMCA1ICovCi0Jb3Y3NjQ4X3NlbnNvcl9pbml0LAkvKiBPVjc2NDggNiAqLwotCW92NzY2MF9zZW5zb3JfaW5pdCwJLyogT1Y3NjYwIDcgKi8KLQlwbzEwMzBfc2Vuc29yX2luaXQsCS8qIFBPMTAzMCA4ICovCi0Jc3A4MDcwOF9zZW5zb3JfaW5pdCwJLyogU1A4MDcwOCA5ICovCitzdGF0aWMgY29uc3QgdTggKCpzZW5zb3JfaW5pdFsxMV0pWzhdID0geworCWFkY20xNzAwX3NlbnNvcl9pbml0LAkvKiBBRENNMTcwMCAwICovCisJaHY3MTMxcl9zZW5zb3JfaW5pdCwJLyogSFY3MTMxUiAxICovCisJbWkwMzYwX3NlbnNvcl9pbml0LAkvKiBNSTAzNjAgMiAqLworCW1vNDAwMF9zZW5zb3JfaW5pdCwJLyogTU80MDAwIDMgKi8KKwltdDl2MTExX3NlbnNvcl9pbml0LAkvKiBNVDlWMTExIDQgKi8KKwlvbTY4MDJfc2Vuc29yX2luaXQsCS8qIE9NNjgwMiA1ICovCisJb3Y3NjMwX3NlbnNvcl9pbml0LAkvKiBPVjc2MzAgNiAqLworCW92NzY0OF9zZW5zb3JfaW5pdCwJLyogT1Y3NjQ4IDcgKi8KKwlvdjc2NjBfc2Vuc29yX2luaXQsCS8qIE9WNzY2MCA4ICovCisJcG8xMDMwX3NlbnNvcl9pbml0LAkvKiBQTzEwMzAgOSAqLworCXNwODA3MDhfc2Vuc29yX2luaXQsCS8qIFNQODA3MDggMTAgKi8KIH07CiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xMDY0LDYgKzExNDcsNyBAQAogCiAJUERFQlVHKERfVVNCTywgImkyY193MiBbJTAyeF0gPSAlMDJ4IiwgcmVnLCB2YWwpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09NNjgwMjoJCS8qIGkyYyBjb21tYW5kID0gYTAgKDEwMCBrSHopICovCiAJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ODAgfCAoMiA8PCA0KTsKIAkJYnJlYWs7CkBAIC0xMTEwLDYgKzExOTQsNyBAQAogCXU4IG1vZGVbOF07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PTTY4MDI6CQkvKiBpMmMgY29tbWFuZCA9IDkwICgxMDAga0h6KSAqLwogCQltb2RlWzBdID0gMHg4MCB8IDB4MTA7CiAJCWJyZWFrOwpAQCAtMTI2MCw3ICsxMzQ1LDggQEAKIAkJezB4MDAsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OwogCXN0YXRpYyBjb25zdCB1OCByZWdkNFtdID0gezB4NjAsIDB4MDAsIDB4MDB9OwogCi0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogc2Vuc29yIGNsb2NrIGFscmVhZHkgZW5hYmxlZCBpbiBzZF9pbml0ICovCisJLyogcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7ICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAKIAkvKiBjb25maWd1cmUgZ3BpbyAqLwpAQCAtMTI4NCw2ICsxMzcwLDEyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAmc245YzF4eFszXSwgMHgwZik7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjIpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKQEAgLTEzNTcsMTQgKzE0NDksMTkgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0JY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCWNhbS0+bnBrdCA9IDI0OwkJCS8qIDI0IHBhY2tldHMgcGVyIElTT0MgbWVzc2FnZSAqLwotCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiAxNjsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQljYW0tPmNhbV9tb2RlID0gY2lmX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShjaWZfbW9kZSk7CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCX0KKwljYW0tPm5wa3QgPSAyNDsJCQkvKiAyNCBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KKwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CkBAIC0xMzc0LDYgKzE0NzEsMTQgQEAKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPmFnX2NudCA9IC0xOwogCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PTTY4MDI6CisJCXNkLT5zaGFycG5lc3MgPSAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwkJYnJlYWs7CisJfQogCXNkLT5pbmZyYXJlZCA9IElORlJBUkVEX0RFRjsKIAlzZC0+ZnJlcSA9IEZSRVFfREVGOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CkBAIC0xNDMzLDcgKzE1MzgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKKwkvKiBOb3RlIHdlIGRvIG5vdCBkaXNhYmxlIHRoZSBzZW5zb3IgY2xvY2sgaGVyZSAocG93ZXIgc2F2aW5nIG1vZGUpLAorCSAgIGFzIHRoYXQgYWxzbyBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0uICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CiAKIAkvKiBzZXQgdGhlIGkyYyBhZGRyZXNzICovCiAJc245YzF4eCA9IHNuX3RiW3NkLT5zZW5zb3JdOwpAQCAtMTU0Myw2ICsxNjUwLDEwIEBACiAKIAlrMiA9ICgoaW50KSBzZC0+YnJpZ2h0bmVzcyAtIDB4ODAwMCkgPj4gMTA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWlmIChrMiA+IDB4MWYpCisJCQlrMiA9IDA7CQkvKiBvbmx5IHBvc2l0aXZlIFkgb2Zmc2V0ICovCisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA8PCA0OwogCQlpZiAoZXhwbyA+IDB4MDAyZGM2YzApCkBAIC0xNjI1LDYgKzE3MzYsOSBAQAogCX07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOwpAQCAtMTY3MCwyMyArMTc4NCwzOSBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKLS8qIG92NzYzMC9vdjc2NDggb25seSAqLworLyogaHY3MTMxci9vdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldHZmbGlwKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggY29tbjsKIAogCWlmIChzZC0+Z3NwY2FfZGV2LmN0cmxfZGlzICYgKDEgPDwgVkZMSVBfSURYKSkKIAkJcmV0dXJuOwotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2MzApIHsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQljb21uID0gMHgxODsJCQkvKiBjbGtkaXYgPSAxLCBhYmxjZW4gPSAxICovCisJCWlmIChzZC0+dmZsaXApCisJCQljb21uIHw9IDB4MDE7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHgwMSwgY29tbik7CS8qIHNjdHJhICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJY29tbiA9IDB4MDI7CiAJCWlmICghc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOwotCX0gZWxzZSB7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NDg6ICovCiAJCWNvbW4gPSAweDA2OwogCQlpZiAoc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsIGNvbW4pOworCQlicmVhazsKIAl9Ci0JaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBzZCAqc2QpCit7CisJcmVnX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDk5LCBzZC0+c2hhcnBuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTE4MDQsNiArMTkzNCw4IEBACiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHU4IEMwW10gPSB7IDB4MmQsIDB4MmQsIDB4M2EsIDB4MDUsIDB4MDQsIDB4M2YgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OworCXN0YXRpYyBjb25zdCB1OCBDQV9hZGNtMTcwMFtdID0KKwkJCQl7IDB4MTQsIDB4ZWMsIDB4MGEsIDB4ZjYgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KIAlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwpAQCAtMTgyNCw2ICsxOTU2LDkgQEAKIAlpMmNfd19zZXEoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdFtzZC0+c2Vuc29yXSk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnMiA9IDB4NjA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJcmVnMiA9IDB4NzE7CiAJCWJyZWFrOwpAQCAtMTg0MiwxNyArMTk3NywyOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTIsIHNuOWMxeHhbMHgxMl0pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTMsIHNuOWMxeHhbMHgxM10pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkJLyogREMyOSAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4NTApOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDNhKTsJLyogQUVfSF9TSVpFID0gMTE2ICovCisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4MzApOwkvKiBBRV9WX1NJWkUgPSA5NiAqLworCX0gZWxzZSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkvKiBBRV9IX1NJWkUgPSAyMTIgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhkMywgMHg1MCk7CS8qIEFFX1ZfU0laRSA9IDE2MCAqLworCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM2LCAweDAwKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM3LCAweDAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM4LCAweDUwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHgyYyk7CS8qIEFXX0hfU1RPUCA9IDM1MiAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDI0KTsJLyogQVdfVl9TVE9QID0gMjg4ICovCisJfSBlbHNlIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHg1MCk7CS8qIEFXX0hfU1RPUCA9IDY0MCAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsJLyogQVdfVl9TVE9QID0gNDgwICovCisJfQogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZzE3ID0gMHhlMDsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTg3MCw0NCArMjAxNiwzOSBAQAogCQlicmVhazsKIAl9CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwotLyogc2V0IHJlZzEgd2FzIGhlcmUgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCBzbjljMXh4WzVdKTsJLyogcmVkICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgc245YzF4eFs3XSk7CS8qIGdyZWVuICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc245YzF4eFs2XSk7CS8qIGJsdWUgKi8KKworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIDB4MDApOwkJLyogcmVkICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgMHgwMCk7CQkvKiBncmVlbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIDB4MDApOwkJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwogCiAJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKIAorLypmaXhtZTogOCB0aW1lcyB3aXRoIGFsbCB6ZXJvZXMgYW5kIDEgb3IgMiB0aW1lcyB3aXRoIG5vcm1hbCB2YWx1ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01UOVYxMTE6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDcpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA4KTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHgxMCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09WNzY0ODoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwYSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NjApOwotCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJY2FzZSBTRU5TT1JfU1A4MDcwODoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA3KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOwogCQlicmVhazsKIAl9CisJc2V0c2hhcnBuZXNzKHNkKTsKIAogCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7CS8qIHJlZCAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgMHgyMCk7CQkvKiByZWQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCAweDIwKTsJCS8qIGdyZWVuICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgMHgyMCk7CQkvKiBibHVlICovCiAKIAlpbml0ID0gTlVMTDsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0xOTE3LDYgKzIwNTgsMTEgQEAKIAkJcmVnMSA9IDB4MDY7CS8qIDY0MHg0ODA6IGNsayAyNE1oeiwgdmlkZW8gdHJmIGVuYWJsZSAqLwogCXJlZzE3ID0gMHg2MTsJCS8qIDB4OjIwOiBlbmFibGUgc2Vuc29yIGNsb2NrICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWluaXQgPSBhZGNtMTcwMF9zZW5zb3JfcGFyYW0xOworCQlyZWcxID0gMHg0NjsKKwkJcmVnMTcgPSAweGUyOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9NTzQwMDA6CiAJCWlmIChtb2RlKSB7CiAvKgkJCXJlZzEgPSAweDQ2OwkgKiAzMjAgY2xrIDQ4TWh6IDYwZnAvcyAqLwpAQCAtMTk0MCw3ICsyMDg2LDYgQEAKIAkJcmVnMTcgPSAweDY0OwkJLyogNjQwIE1DS1NJWkUgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7CiAJCXJlZzE3ID0gMHhlMjsKIAkJcmVnMSA9IDB4NDQ7CiAJCWJyZWFrOwpAQCAtMTk4Niw4ICsyMTMxLDEyIEBACiAJfQogCiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0FEQ00xNzAwKQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4Y2EsIENBX2FkY20xNzAwLCA0KTsKKwllbHNlCisJCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgpAQCAtMjAwOCwxMSArMjE1Nyw3IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOwogCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7Ci0JCWJyZWFrOwotCX0KKwlzZXR2ZmxpcChzZCk7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKQEAgLTIwNTYsNyArMjIwMSw4IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgc245YzF4eFsweDE3XSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgZGF0YSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogRG9uJ3QgZGlzYWJsZSBzZW5zb3IgY2xvY2sgYXMgdGhhdCBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0gKi8KKwkvKiByZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsgKi8KIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMjI4OCw2ICsyNDM0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzaGFycG5lc3Moc2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjM5MSw2ICsyNTU1LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMjQwNiw2ICsyNTg5LDkgQEAKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTI0NzIsNiArMjY1OCw3IEBACiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJICpzbjljMTIwYiovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCUyhTTjlDMTIwLCBTUDgwNzA4KX0sCS8qc245YzEyMGIqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQ4KSwgQlMoU045QzEyMCwgT002ODAyKX0sCS8qc245YzEyMGIqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTRhKSwgQlMoU045QzEyMCwgQURDTTE3MDApfSwJLypzbjljMTIwYiovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggZmU0Njg2OC4uYjg2NmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTY4LDcgKzY4LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IDY3NjFhMzAuLmM5OTMzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgTVlfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCmluZGV4IDBmOTIzMmYuLmM1NzZlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKaW5kZXggMzkyNTdlNC4uODlmZWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNjczLDcgKzY3Myw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDRkOGU2Y2YuLjE1YjJlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggNThjMmYwMC4uZGM3ZjJiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC05MjIsNyArOTIyLDcgQEAKIH0KIAogLyogY29udHJvbCB0YWJsZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc18xMmFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc18xMmFbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkID0gVjRMMl9DSURfSFVFLApAQCAtOTY0LDcgKzk2NCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc183MmFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc183MmFbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkID0gVjRMMl9DSURfSFVFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKaW5kZXggZDcwYjE1Ni4uZTY0NjYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCkBAIC00Nyw2ICs0Nyw3IEBACiAKIC8qIENvbW1hbmRzLiBUaGVzZSBnbyBpbiB0aGUgInZhbHVlIiBzbG90LiAqLwogI2RlZmluZSBTUTkwNUNfQ0xFQVIgICAweGEwCQkvKiBjbGVhciBldmVyeXRoaW5nICovCisjZGVmaW5lIFNROTA1Q19HRVRfSUQgIDB4MTRmNAkJLyogUmVhZCB2ZXJzaW9uIG51bWJlciAqLwogI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9MT1cgMHhhMDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KICNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTUVEIDB4MTQ0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCiAjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0hJIDB4Mjg0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCkBAIC0xMDEsNiArMTAyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3E5MDVjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgY29tbWFuZCwgdTE2IGluZGV4LAorCQkgICAgICAgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLAkJLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBjb21tYW5kLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBzaXplLAorCQkJICAgICAgU1E5MDVDX0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCiAgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCiAgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCkBAIC0xODMsMTMgKzIwNCwzNCBAQAogewogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CiAKIAlQREVCVUcoRF9QUk9CRSwKIAkJIlNROTA1MCBjYW1lcmEgZGV0ZWN0ZWQiCiAJCSIgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfR0VUX0lELCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJHZXQgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNxOTA1Y19yZWFkKGdzcGNhX2RldiwgMHhmNSwgMCwgMjApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlJlYWRpbmcgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBOb3RlIHdlIGxlYXZlIG91dCB0aGUgdXNiIGlkIGFuZCB0aGUgbWFudWZhY3R1cmluZyBkYXRlICovCisJUERFQlVHKERfUFJPQkUsCisJICAgICAgICJTUTkwNTAgSUQgc3RyaW5nOiAlMDJ4IC0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAorCQlnc3BjYV9kZXYtPnVzYl9idWZbM10sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxNF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxNV0sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxNl0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxN10sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxOF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxOV0pOworCiAJY2FtLT5jYW1fbW9kZSA9IHNxOTA1Y19tb2RlOwogCWNhbS0+bm1vZGVzID0gMjsKLQlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDkwNTApCisJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlsxNV0gPT0gMCkKIAkJY2FtLT5ubW9kZXMgPSAxOwogCS8qIFdlIGRvbid0IHVzZSB0aGUgYnVmZmVyIGdzcGNhIGFsbG9jYXRlcyBzbyBtYWtlIGl0IHNtYWxsLiAqLwogCWNhbS0+YnVsa19zaXplID0gMzI7CkBAIC0yNTgsNiArMzAwLDcgQEAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDVjKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNTApfSwKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1Mil9LAogCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MTNkKX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwppbmRleCAyZTI5MzU1Li4wZmI1MzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNjgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwppbmRleCAyYTY5ZDdjLi5lNTBkZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwpAQCAtNDUsNyArNDUsNyBAQAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIH07CiAKIHN0YXRpYyBpbnQgc3R2X3NuZGN0cmwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc2V0LCB1OCByZXEsIHUxNiB2YWwsCkBAIC01MywyNCArNTMsMjggQEAKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVxX3R5cGUgPSAwOworCXVuc2lnbmVkIGludCBwaXBlID0gMDsKIAogCXN3aXRjaCAoc2V0KSB7CiAJY2FzZSAwOiAvKiAgMHhjMSAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UOworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOiAvKiAgMHg0MSAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVDsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoJLyogIDB4ODAgICovCiAJCXJlcV90eXBlID0gVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwogCQlicmVhazsKIAljYXNlIDM6CS8qICAweDQwICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCX0KIAotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LCBwaXBlLAogCQkJICAgICAgcmVxLCByZXFfdHlwZSwKIAkJCSAgICAgIHZhbCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBzaXplLCA1MDApOwogCkBAIC0xMzgsNiArMTQyLDEwIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAorCS8qIEdpdmUgdGhlIGNhbWVyYSBzb21lIHRpbWUgdG8gc2V0dGxlLCBvdGhlcndpc2UgaW5pdGFsaXphdGlvbiB3aWxsCisJICAgZmFpbCBvbiBob3RwbHVnLCBhbmQgeWVzIGl0IHJlYWxseSBuZWVkcyBhIGZ1bGwgc2Vjb25kLiAqLworCW1zbGVlcCgxMDAwKTsKKwogCS8qIHBpbmcgY2FtZXJhIHRvIGJlIHN1cmUgU1RWMDY4MCBpcyBwcmVzZW50ICovCiAJaWYgKHN0dl9zbmRjdHJsKGdzcGNhX2RldiwgMCwgMHg4OCwgMHg1Njc4LCAweDAyKSAhPSAweDAyIHx8CiAJICAgIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDU2IHx8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSAhPSAweDc4KSB7CkBAIC0xNjksNiArMTc3LDggQEAKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgQ0lGIG1vZGUiKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwMikKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgVkdBIG1vZGUiKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwNCkKKwkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgUUNJRiBtb2RlIik7CiAJaWYgKGdzcGNhX2Rldi0+dXNiX2J1Zls3XSAmIDB4MDgpCiAJCVBERUJVRyhEX1BST0JFLCAiQ2FtZXJhIHN1cHBvcnRzIFFWR0EgbW9kZSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCA1ZDAyNDFiLi5hZjczZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTI3LDYgKzI3LDcgQEAKICAqIFAvTiA4NjEwNDAtMDAwMDogU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIFF1aWNrQ2FtIFdlYgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgInN0djA2eHhfc2Vuc29yLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkVyaWsgQW5kcsOpbiIpOwpAQCAtMjE5LDYgKzIyMCw3IEBACiAJCWluZm8oIlJlYWQgMHgleCBmcm9tIGFkZHJlc3MgMHgleCIsIGRhdGEsIGkpOwogCX0KIAorCWluZm8oIlRlc3Rpbmcgc3R2MDZ4eCBicmlkZ2UgcmVnaXN0ZXJzIGZvciB3cml0YWJpbGl0eSIpOwogCWZvciAoaSA9IDB4MTQwMDsgaSA8IDB4MTYwZjsgaSsrKSB7CiAJCXN0djA2eHhfcmVhZF9icmlkZ2Uoc2QsIGksICZkYXRhKTsKIAkJYnVmID0gZGF0YTsKQEAgLTIyOSw3ICsyMzEsNyBAQAogCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlIiwgaSk7CiAJCWVsc2UgaWYgKGRhdGEgIT0gYnVmKQogCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlLCIKLQkJCSAgICAgImJ1dCBvbmx5IHBhcnRpYWxseSIsIGkpOworCQkJICAgICAiIGJ1dCBvbmx5IHBhcnRpYWxseSIsIGkpOwogCQllbHNlCiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQtb25seSIsIGkpOwogCkBAIC00MjYsNiArNDI4LDI5IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnVwdCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAweDgwKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAweDg4KSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc3R2MDZ4eF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogCkBAIC00MzYsNyArNDYxLDEwIEBACiAJLmluaXQgPSBzdHYwNnh4X2luaXQsCiAJLnN0YXJ0ID0gc3R2MDZ4eF9zdGFydCwKIAkuc3RvcE4gPSBzdHYwNnh4X3N0b3BOLAotCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4KKwkucGt0X3NjYW4gPSBzdHYwNnh4X3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKaW5kZXggMzA2YjdkNy4uMGM3ODZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0yNjcsMTQyICsyNjcsNiBAQAogCXsweDA2LCAweDAwMDAsIDB4MDAwMH0sCiAJezB4MDAsIDB4MDAwNCwgMHgyODgwfSwKIAl7MHgwMCwgMHgwMDAxLCAweDI4ODF9LAotLyogbG9vayBsaWtlIHNldHRpbmcgYSBxVGFibGUgKi8KLQl7MHgwMCwgMHgwMDA2LCAweDI4MDB9LAotCXsweDAwLCAweDAwMDQsIDB4MjgwMX0sCi0JezB4MDAsIDB4MDAwNCwgMHgyODAyfSwKLQl7MHgwMCwgMHgwMDA2LCAweDI4MDN9LAotCXsweDAwLCAweDAwMGEsIDB4MjgwNH0sCi0JezB4MDAsIDB4MDAxMCwgMHgyODA1fSwKLQl7MHgwMCwgMHgwMDE0LCAweDI4MDZ9LAotCXsweDAwLCAweDAwMTgsIDB4MjgwN30sCi0JezB4MDAsIDB4MDAwNSwgMHgyODA4fSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MDl9LAotCXsweDAwLCAweDAwMDYsIDB4MjgwYX0sCi0JezB4MDAsIDB4MDAwOCwgMHgyODBifSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4MGN9LAotCXsweDAwLCAweDAwMTcsIDB4MjgwZH0sCi0JezB4MDAsIDB4MDAxOCwgMHgyODBlfSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MGZ9LAotCi0JezB4MDAsIDB4MDAwNiwgMHgyODEwfSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MTF9LAotCXsweDAwLCAweDAwMDYsIDB4MjgxMn0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODEzfSwKLQl7MHgwMCwgMHgwMDEwLCAweDI4MTR9LAotCXsweDAwLCAweDAwMTcsIDB4MjgxNX0sCi0JezB4MDAsIDB4MDAxYywgMHgyODE2fSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MTd9LAotCXsweDAwLCAweDAwMDYsIDB4MjgxOH0sCi0JezB4MDAsIDB4MDAwNywgMHgyODE5fSwKLQl7MHgwMCwgMHgwMDA5LCAweDI4MWF9LAotCXsweDAwLCAweDAwMGMsIDB4MjgxYn0sCi0JezB4MDAsIDB4MDAxNCwgMHgyODFjfSwKLQl7MHgwMCwgMHgwMDIzLCAweDI4MWR9LAotCXsweDAwLCAweDAwMjAsIDB4MjgxZX0sCi0JezB4MDAsIDB4MDAxOSwgMHgyODFmfSwKLQotCXsweDAwLCAweDAwMDcsIDB4MjgyMH0sCi0JezB4MDAsIDB4MDAwOSwgMHgyODIxfSwKLQl7MHgwMCwgMHgwMDBmLCAweDI4MjJ9LAotCXsweDAwLCAweDAwMTYsIDB4MjgyM30sCi0JezB4MDAsIDB4MDAxYiwgMHgyODI0fSwKLQl7MHgwMCwgMHgwMDJjLCAweDI4MjV9LAotCXsweDAwLCAweDAwMjksIDB4MjgyNn0sCi0JezB4MDAsIDB4MDAxZiwgMHgyODI3fSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4Mjh9LAotCXsweDAwLCAweDAwMGUsIDB4MjgyOX0sCi0JezB4MDAsIDB4MDAxNiwgMHgyODJhfSwKLQl7MHgwMCwgMHgwMDFhLCAweDI4MmJ9LAotCXsweDAwLCAweDAwMjAsIDB4MjgyY30sCi0JezB4MDAsIDB4MDAyYSwgMHgyODJkfSwKLQl7MHgwMCwgMHgwMDJkLCAweDI4MmV9LAotCXsweDAwLCAweDAwMjUsIDB4MjgyZn0sCi0KLQl7MHgwMCwgMHgwMDE0LCAweDI4MzB9LAotCXsweDAwLCAweDAwMWEsIDB4MjgzMX0sCi0JezB4MDAsIDB4MDAxZiwgMHgyODMyfSwKLQl7MHgwMCwgMHgwMDIzLCAweDI4MzN9LAotCXsweDAwLCAweDAwMjksIDB4MjgzNH0sCi0JezB4MDAsIDB4MDAzMCwgMHgyODM1fSwKLQl7MHgwMCwgMHgwMDMwLCAweDI4MzZ9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzN30sCi0JezB4MDAsIDB4MDAxZCwgMHgyODM4fSwKLQl7MHgwMCwgMHgwMDI1LCAweDI4Mzl9LAotCXsweDAwLCAweDAwMjYsIDB4MjgzYX0sCi0JezB4MDAsIDB4MDAyNywgMHgyODNifSwKLQl7MHgwMCwgMHgwMDJkLCAweDI4M2N9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzZH0sCi0JezB4MDAsIDB4MDAyOSwgMHgyODNlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4M2Z9LAotCi0JezB4MDAsIDB4MDAwNywgMHgyODQwfSwKLQl7MHgwMCwgMHgwMDA3LCAweDI4NDF9LAotCXsweDAwLCAweDAwMGEsIDB4Mjg0Mn0sCi0JezB4MDAsIDB4MDAxMywgMHgyODQzfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODQ2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDd9LAotCXsweDAwLCAweDAwMDcsIDB4Mjg0OH0sCi0JezB4MDAsIDB4MDAwOCwgMHgyODQ5fSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4NGF9LAotCXsweDAwLCAweDAwMWEsIDB4Mjg0Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRmfSwKLQotCXsweDAwLCAweDAwMGEsIDB4Mjg1MH0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODUxfSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4NTJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1M30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU0fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Nn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU3fSwKLQl7MHgwMCwgMHgwMDEzLCAweDI4NTh9LAotCXsweDAwLCAweDAwMWEsIDB4Mjg1OX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVhfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Y30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVkfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Zn0sCi0KLQl7MHgwMCwgMHgwMDI4LCAweDI4NjB9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2MX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODYyfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2N30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY4fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Njl9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2YX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmZ9LAotCi0JezB4MDAsIDB4MDAyOCwgMHgyODcwfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzF9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3Mn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODczfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Nzd9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3OH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc5fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2F9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2R9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdmfSwKIAogCXsweGEwLCAweDAwMDAsIDB4MDUwM30sCiB9OwpAQCAtNjIyLDYgKzQ4NiwyMCBAQAogCVBERUJVRyhEX0ZSQU0sICJhZnRlciB3YWl0IDB4JTA0eCIsIG5vdGRvbmUpOwogfQogCitzdGF0aWMgdm9pZCBzcGNhNTA0X3JlYWRfaW5mbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGk7CisJdTggaW5mb1s2XTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7CisJUERFQlVHKERfU1RSRUFNLAorCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCisJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKKwkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKKwkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7Cit9CisKIHN0YXRpYyB2b2lkIHNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXU4IHJlcSwKIAkJCXUxNiBpZHgsIHUxNiB2YWwsIHUxNiBlbmRjb2RlLCB1OCBjb3VudCkKQEAgLTg4MSw4ICs3NTksNiBAQAogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JdTggaW5mb1s2XTsKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NQQ0E1MDRCOgpAQCAtOTI0LDE1ICs4MDAsOCBAQAogLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KIAkJUERFQlVHKERfU1RSRUFNLCAiT3BlbmluZyBTUENBNTA0Iik7CiAJCWlmIChzZC0+c3VidHlwZSA9PSBBaXB0ZWtNaW5pUGVuQ2FtMTMpIHsKLQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKLQkJCVBERUJVRyhEX1NUUkVBTSwKLQkJCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCi0JCQkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAotCQkJCWluZm9bMF0sIGluZm9bMV0sIGluZm9bMl0sCi0JCQkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7Ci0JCQkvKiBzcGNhNTA0YSBhaXB0ZWsgKi8KKwkJCXNwY2E1MDRfcmVhZF9pbmZvKGdzcGNhX2Rldik7CisKIAkJCS8qIFNldCBBRSBBV0IgQmFuZGluZyBUeXBlIDMtPiA1MEh6IDItPiA2MEh6ICovCiAJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsCiAJCQkJCQkJOCwgMywgMHg5ZSwgMSk7CkBAIC05NzEsOCArODQwLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGVuYWJsZTsKLQlpbnQgaTsKLQl1OCBpbmZvWzZdOwogCiAJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLwogCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOwpAQCAtMTAwOCwxNCArODc1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNDoKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewotCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOwotCQkJUERFQlVHKERfU1RSRUFNLAotCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKLQkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCi0JCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKLQkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKLQkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKKwogCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAxKTsKQEAgLTEwMjYsMTMgKzg4Nyw3IEBACiAJCQkJCQkJMCwgMCwgMHg5ZCwgMSk7CiAJCX0gZWxzZSB7CiAJCQlzcGNhNTA0X2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwgOCwgMyk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7Ci0JCQlQREVCVUcoRF9TVFJFQU0sCi0JCQkJIlJlYWQgaW5mbzogJWQgJWQgJWQgJWQgJWQgJWQuIgotCQkJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKLQkJCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAotCQkJCWluZm9bM10sIGluZm9bNF0sIGluZm9bNV0pOworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKIAkJfQpAQCAtMTMzNiw2ICsxMTkxLDcgQEAKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTMzMCksIEJTKFNQQ0E1MzMsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTM2MCksIEJTKFNQQ0E1MzYsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4ZmZmZiksIEJTKFNQQ0E1MDRCLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE1MDcpLCBCUyhTUENBNTMzLCBNZWdhcGl4VjQpfSwKIAl7VVNCX0RFVklDRSgweDA1MmIsIDB4MTUxMyksIEJTKFNQQ0E1MzMsIE1lZ2FwaXhWNCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxODAzKSwgQlMoU1BDQTUzMywgTWVnYUltYWdlVkkpfSwKIAl7VVNCX0RFVklDRSgweDA1NDYsIDB4MzE1NSksIEJTKFNQQ0E1MzMsIDApfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggNTVlZjZhNzQuLjY2OGE3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC01Miw2ICs1Miw3IEBACiAjZGVmaW5lIFNFTlNPUl9PTTY4MDIgMAogI2RlZmluZSBTRU5TT1JfT1RIRVIgMQogI2RlZmluZSBTRU5TT1JfVEFTNTEzMEEgMgorI2RlZmluZSBTRU5TT1JfTFQxNjhHIDMgICAgIC8qIG11c3QgdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIGFjdHVhbCBtb2RlbCAqLwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNzgsNyArNzksNyBAQAogc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0zMDYsNiArMzA3LDE3IEBACiAJMHhiZSwgMHgzNiwgMHhiZiwgMHhmZiwgMHhjMiwgMHg4OCwgMHhjNSwgMHhjOCwKIAkweGM2LCAweGRhCiB9Oworc3RhdGljIGNvbnN0IHU4IG40X2x0MTY4Z1tdID0geworCTB4NjYsIDB4MDEsIDB4N2YsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODEsIDB4MjgsCisJMHg4MywgMHg0NCwgMHg4NCwgMHgyMCwgMHg4NiwgMHgyMCwgMHg4YSwgMHg3MCwKKwkweDhiLCAweDU4LCAweDhjLCAweDg4LCAweDhkLCAweGEwLCAweDhlLCAweGIzLAorCTB4OGYsIDB4MjQsIDB4YTEsIDB4YjAsIDB4YTIsIDB4MzgsIDB4YTUsIDB4MjAsCisJMHhhNiwgMHg0YSwgMHhhOCwgMHhlOCwgMHhhZiwgMHgzOCwgMHhiMCwgMHg2OCwKKwkweGIxLCAweDQ0LCAweGIyLCAweDg4LCAweGJiLCAweDg2LCAweGJkLCAweDQwLAorCTB4YmUsIDB4MjYsIDB4YzEsIDB4MDUsIDB4YzIsIDB4ODgsIDB4YzUsIDB4YzAsCisJMHhkYSwgMHg4ZSwgMHhkYiwgMHhjYSwgMHhkYywgMHhhOCwgMHhkZCwgMHg4YywKKwkweGRlLCAweDQ0LCAweGRmLCAweDBjLCAweGU5LCAweDgwCit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKICAgICB7CQkJCS8qIDA6IE9NNjgwMiAqLwpAQCAtMzgwLDYgKzM5MiwyMyBAQAogCS5zdHJlYW0gPQogCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCiAgICAgfSwKKyAgICB7CQkJCS8qIDM6IExUMTY4RyAqLworCS5uMyA9IHsweDYxLCAweGMyLCAweDY1LCAweDY4LCAweDYwLCAweDAwfSwKKwkubjQgPSBuNF9sdDE2OGcsCisJLm40c3ogPSBzaXplb2YgbjRfbHQxNjhnLAorCS5yZWc4MCA9IDB4N2MsCisJLnJlZzhlID0gMHhiMywKKwkubnNldDggPSB7MHhhOCwgMHhmMCwgMHhjNiwgMHhiYSwgMHhjMCwgMHgwMH0sCisJLmRhdGExID0gezB4YzAsIDB4MzgsIDB4MDgsIDB4MTAsIDB4YzAsIDB4MzAsIDB4MTAsIDB4NDAsCisJCSAweGIwLCAweGY0fSwKKwkuZGF0YTIgPSB7MHg0MCwgMHg4MCwgMHhjMCwgMHg1MCwgMHhhMCwgMHhmMCwgMHg1MywgMHhhNiwKKwkJIDB4ZmZ9LAorCS5kYXRhMyA9IHsweDQwLCAweDgwLCAweGMwLCAweDUwLCAweGEwLCAweGYwLCAweDUzLCAweGE2LAorCQkgMHhmZn0sCisJLmRhdGE0ID0gezB4NjYsIDB4NDEsIDB4YTgsIDB4ZjB9LAorCS5kYXRhNSA9IHsweDBjLCAweDAzLCAweGFiLCAweDRiLCAweDgxLCAweDJifSwKKwkuc3RyZWFtID0gezB4MGIsIDB4MDQsIDB4MGEsIDB4Mjh9LAorICAgIH0sCiB9OwogCiAjZGVmaW5lIE1BWF9FRkZFQ1RTIDcKQEAgLTcxNiw2ICs3NDUsMTAgQEAKIAkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgdGFzNTEzMGEiKTsKIAkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKIAkJYnJlYWs7CisJY2FzZSAweDA4MDI6CisJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIGx0MTY4ZyIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX0xUMTY4RzsKKwkJYnJlYWs7CiAJY2FzZSAweDA4MDM6CiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yICdvdGhlciciKTsKIAkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVEhFUjsKQEAgLTc1OCw2ICs3OTEsMTMgQEAKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPm4zLCBzaXplb2Ygc2Vuc29yLT5uMyk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uNCwgc2Vuc29yLT5uNHN6KTsKIAorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9MVDE2OEcpIHsKKwkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDgwKTsKKwkJUERFQlVHKERfU1RSRUFNLCAiUmVnIDB4JTAyeCA9IDB4JTAyeCIsIDB4ODAsCisJCSAgICAgICB0ZXN0X2J5dGUpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NmM4MCk7CisJfQorCiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3ItPmRhdGExLCBzaXplb2Ygc2Vuc29yLT5kYXRhMSk7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3ItPmRhdGEyLCBzaXplb2Ygc2Vuc29yLT5kYXRhMik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3ItPmRhdGEzLCBzaXplb2Ygc2Vuc29yLT5kYXRhMyk7CkBAIC03ODIsNiArODIyLDEzIEBACiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uc2V0OCwgc2l6ZW9mIHNlbnNvci0+bnNldDgpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+c3RyZWFtLCBzaXplb2Ygc2Vuc29yLT5zdHJlYW0pOwogCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0xUMTY4RykgeworCQl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4ODApOworCQlQREVCVUcoRF9TVFJFQU0sICJSZWcgMHglMDJ4ID0gMHglMDJ4IiwgMHg4MCwKKwkJICAgICAgIHRlc3RfYnl0ZSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg2YzgwKTsKKwl9CisKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvci0+ZGF0YTEsIHNpemVvZiBzZW5zb3ItPmRhdGExKTsKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YzcsIHNlbnNvci0+ZGF0YTIsIHNpemVvZiBzZW5zb3ItPmRhdGEyKTsKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZTAsIHNlbnNvci0+ZGF0YTMsIHNpemVvZiBzZW5zb3ItPmRhdGEzKTsKQEAgLTg4OCw2ICs5MzUsOCBAQAogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0xUMTY4RzoKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1RIRVI6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwppbmRleCBiNzRhM2I2Li5jN2I2ZWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCA3MTkyMWM4Li40OTg5ZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTMyLDEwICszMiwxMyBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBjb2xvcnM7CiAJdTggaGZsaXA7CiAJdTggdmZsaXA7CiAJdTggbGlnaHRmcmVxOwotCXU4IHNoYXJwbmVzczsKKwlzOCBzaGFycG5lc3M7CiAKIAl1OCBpbWFnZV9vZmZzZXQ7CiAKQEAgLTUyLDYgKzU1LDcgQEAKICNkZWZpbmUgU0VOU09SX09WNzY3MCA2CiAjZGVmaW5lIFNFTlNPUl9QTzEyMDAgNwogI2RlZmluZSBTRU5TT1JfUE8zMTMwTkMgOAorI2RlZmluZSBTRU5TT1JfUE94eHh4IDkKIAl1OCBmbGFnczsKICNkZWZpbmUgRkxfU0FNU1VORyAweDAxCQkvKiBTYW1zdW5nUTEgKDIgc2Vuc29ycykgKi8KICNkZWZpbmUgRkxfSEZMSVAgMHgwMgkJLyogbWlycm9yZWQgYnkgZGVmYXVsdCAqLwpAQCAtNTksNiArNjMsMTIgQEAKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CkBAIC02OCw5ICs3OCw1NCBAQAogc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKyNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTI4CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorI2RlZmluZSBDT05UUkFTVF9JRFggMQorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMTI3CisJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorI2RlZmluZSBDT0xPUlNfSURYIDIKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDEsCisJCS5tYXhpbXVtID0gMTI3LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTE9SX0RFRiA2MworCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAogLyogbmV4dCAyIGNvbnRyb2xzIHdvcmsgd2l0aCBzb21lIHNlbnNvcnMgb25seSAqLwotI2RlZmluZSBIRkxJUF9JRFggMAorI2RlZmluZSBIRkxJUF9JRFggMwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0hGTElQLApAQCAtODUsNyArMTQwLDcgQEAKIAkgICAgLnNldCA9IHNkX3NldGhmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0aGZsaXAsCiAJfSwKLSNkZWZpbmUgVkZMSVBfSURYIDEKKyNkZWZpbmUgVkZMSVBfSURYIDQKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9WRkxJUCwKQEAgLTEwMCw3ICsxNTUsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAotI2RlZmluZSBMSUdIVEZSRVFfSURYIDIKKyNkZWZpbmUgTElHSFRGUkVRX0lEWCA1CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTExNSwxNyArMTcwLDE2IEBACiAJICAgIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAgICAuZ2V0ID0gc2RfZ2V0ZnJlcSwKIAl9LAotLyogcG8xMjAwIG9ubHkgKi8KLSNkZWZpbmUgU0hBUlBORVNTX0lEWCAzCisjZGVmaW5lIFNIQVJQTkVTU19JRFggNgogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfU0hBUlBORVNTLAogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCSAgLm5hbWUgPSAiU2hhcnBuZXNzIiwKLQkgIC5taW5pbXVtID0gMCwKKwkgIC5taW5pbXVtID0gLTEsCiAJICAubWF4aW11bSA9IDIsCiAJICAuc3RlcCA9IDEsCi0jZGVmaW5lIFNIQVJQTkVTU19ERUYgMQorI2RlZmluZSBTSEFSUE5FU1NfREVGIC0xCiAJICAuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLApAQCAtMTMzLDYgKzE4Nyw0MiBAQAogCSB9LAogfTsKIAorLyogdGFibGUgb2YgdGhlIGRpc2FibGVkIGNvbnRyb2xzICovCitzdGF0aWMgdTMyIGN0cmxfZGlzW10gPSB7CisvKiBTRU5TT1JfSFY3MTMxUiAwICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMDM2MCAxICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMTMxMF9TT0MgMiAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfTUkxMzIwIDMgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMTMyMF9TT0MgNCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfT1Y3NjYwIDUgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX09WNzY3MCA2ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfUE8xMjAwIDcgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSwKKy8qIFNFTlNPUl9QTzMxMzBOQyA4ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX1BPeHh4eCA5ICovCisJKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZjMDMyMV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLApAQCAtMjE1LDcgKzMwNSw3IEBACiAJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwJLyogaTJjIGFkZDogNWQgKi8KIAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAogCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKQEAgLTQzNSw3ICs1MjUsNyBAQAogCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCS8qIGkyYyBhZGQ6IDVkICovCiAJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKIAl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCkBAIC04NjAsNyArOTUwLDggQEAKIAl7MHhiMCwgMHgxNiwgMHgwMywgMHhjY30sCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCS8qIGkyYyBhZGQ6IDQ4ICovCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAogCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwJezB4YjMsIDB4MjMsIDB4YzAsIDB4Y2N9LApAQCAtOTAxLDcgKzk5Miw4IEBACiAJezB4YzMsIDB4MDEsIDB4MDMsIDB4YmJ9LAl7MHhjNCwgMHgwMCwgMHgwNCwgMHhiYn0sCiAJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAl7MHgwNSwgMHgwMSwgMHgxMywgMHhiYn0sCiAJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAl7MHgwNywgMHgwMCwgMHg4NSwgMHhiYn0sCi0JezB4MDgsIDB4MDAsIDB4MjcsIDB4YmJ9LAl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MjcsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAwLCAweGJifSwJLyogaC92IGZsaXBzIC0gd2FzIDAzICovCiAJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCiAJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCiAJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgzOSwgMHgwMywgMHgwZCwgMHhiYn0sCkBAIC0xMDEyLDcgKzExMDQsNyBAQAogCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCS8qIGkyYyBhZGQ6IDQ4ICovCiAJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKIAl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCkBAIC0xMzU5LDcgKzE0NTEsOCBAQAogCXsweGIzLCAweDIzLCAweGU4LCAweGNjfSwJezB4YjgsIDB4MDgsIDB4ZTgsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAotCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhmNiwgMHhjY30sCS8qIGkyYyBhZGQ6IDc2ICovCiAJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MjEsIDB4Y2N9LAl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCiAJezB4YjgsIDB4MDEsIDB4NzksIDB4Y2N9LAl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCkBAIC0xNTYxLDcgKzE2NTQsNyBAQAogCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweDkxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCS8qIGkyYyBhZGQ6IDExICovCiAJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAogCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwKIAl7MHhiOCwgMHgwMCwgMHgyMywgMHhjY30sCkBAIC0xNzQ3LDcgKzE4NDAsOCBAQAogCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwJezB4YjMsIDB4MWQsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDFmLCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YTEsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHgyNiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YTEsIDB4Y2N9LAkvKiBpMmMgYWRkOiAyMSAqLworCXsweGIzLCAweDAwLCAweDI2LCAweGNjfSwKIAl7MHhiOCwgMHgwMCwgMHgzMywgMHhjY30sIC8qIDEzICovCiAJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAogCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LApAQCAtMTg4Myw3ICsxOTc3LDggQEAKIAl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCiAJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCiAJezB4YjMsIDB4MDAsIDB4NjYsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YTEsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YTEsIDB4Y2N9LAkvKiBpMmMgYWRkOiAyMSAqLworCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKIAl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDAzLCAweDFmLCAweGNjfSwKQEAgLTIxODEsNyArMjI3Niw3IEBACiAJezB4YjAsIDB4NTQsIDB4MTMsIDB4Y2N9LAogCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4ZGMsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRjLCAweGNjfSwJLyogaTJjIGFkZDogNWMgKi8KIAl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCiAJezB4MDAsIDB4MTIsIDB4MDUsIDB4YWF9LAogCXsweDAwLCAweDEzLCAweDAyLCAweGFhfSwKQEAgLTI0MDgsNiArMjUwMywyNTEgQEAKIAl7MHgwMCwgMHhiNiwgMHgzOSwgMHhhYX0sCiAJezB4MDAsIDB4YjcsIDB4MjQsIDB4YWF9LAogLyp3cml0ZSA4OSAwNDAwIDE0MTUqLworCXt9Cit9OworCitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfY29tbW9uW11bNF0gPSB7CisJezB4YjMsIDB4MDAsIDB4MDQsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDA5LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhmNiwgMHhjY30sCS8qIGkyYyBhZGQ6IDc2ICovCisJezB4YjMsIDB4MDIsIDB4YjAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDE4LCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgxNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgyYywgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MmQsIDB4NTYsIDB4Y2N9LAorCXsweGIzLCAweDJlLCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgyZiwgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4NDAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDQxLCAweDM0LCAweGNjfSwKKwl7MHhiMywgMHg0MiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NDMsIDB4ZTAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGIzLCAweDRkLCAweDAwLCAweGNjfSwKKwl7MHgwMCwgMHgwYiwgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4MGUsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDBmLCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHgxMiwgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDIxLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgzMSwgMHgxZiwgMHhhYX0sCisJezB4MDAsIDB4MzMsIDB4MzgsIDB4YWF9LAorCXsweDAwLCAweDM2LCAweGMwLCAweGFhfSwKKwl7MHgwMCwgMHgzNywgMHhjOCwgMHhhYX0sCisJezB4MDAsIDB4M2IsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweGZlLCAweGFhfSwKKwl7MHgwMCwgMHg0ZCwgMHgyZSwgMHhhYX0sCisJezB4MDAsIDB4NTEsIDB4MWMsIDB4YWF9LAorCXsweDAwLCAweDUyLCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHg1NSwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NTYsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU3LCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHg1OCwgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4NTksIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDcwLCAweDY4LCAweGFhfSwKKwl7MHgwMCwgMHg3MSwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4NzIsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDgwLCAweDcxLCAweGFhfSwKKwl7MHgwMCwgMHg4MSwgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4ODIsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDgzLCAweDU1LCAweGFhfSwKKwl7MHgwMCwgMHg4NCwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4ODUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDhiLCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg4YywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4OGQsIDB4ODYsIDB4YWF9LAorCXsweDAwLCAweDhlLCAweDgyLCAweGFhfSwKKwl7MHgwMCwgMHg4ZiwgMHgyZCwgMHhhYX0sCisJezB4MDAsIDB4OTAsIDB4OGIsIDB4YWF9LAorCXsweDAwLCAweDkxLCAweDgxLCAweGFhfSwKKwl7MHgwMCwgMHg5MiwgMHg4MSwgMHhhYX0sCisJezB4MDAsIDB4OTMsIDB4MjMsIDB4YWF9LAorCXsweDAwLCAweGEzLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHhhNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YTUsIDB4ZWEsIDB4YWF9LAorCXsweDAwLCAweGIwLCAweDY4LCAweGFhfSwKKwl7MHgwMCwgMHhiYywgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4YmUsIDB4M2IsIDB4YWF9LAorCXsweDAwLCAweDRlLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHgwNiwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4MDcsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGNkLCAweDE4LCAweGFhfSwKKwl7MHgwMCwgMHgyOCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4MjksIDB4ZWYsIDB4YWF9LAorLyogcmVpbml0IG9uIGFsdCAyIChxdmdhKSBvciBhbHQ3ICh2Z2EpICovCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMSwgMHhjY30sCisKKwl7MHgwMCwgMHgxZCwgMHg4NSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4YzYsIDB4YWF9LAorCXsweDAwLCAweDAwLCAweDQwLCAweGRkfSwKKwl7MHgwMCwgMHgxZCwgMHgwNSwgMHhhYX0sCisKKwl7MHgwMCwgMHhkNiwgMHgyMiwgMHhhYX0sCS8qIGdhbW1hIDAgKi8KKwl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDE2LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4MzQsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKworCXsweDAwLCAweGQ2LCAweDYyLCAweGFhfSwJLyogZ2FtbWEgMSAqLworCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NzUsIDB4MTYsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YSwgMHg3ZiwgMHhhYX0sCisJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHhkNCwgMHhhYX0sCisJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCisJezB4MDAsIDB4ZDYsIDB4YTIsIDB4YWF9LAkvKiBnYW1tYSAyICovCisJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg3NSwgMHgxNiwgMHhhYX0sCisJezB4MDAsIDB4NzYsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM0LCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHg0OSwgMHhhYX0sCisJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKKwl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCisKKwl7MHgwMCwgMHhhYSwgMHhmZiwgMHhhYX0sCS8qIGJhY2sgbGlnaHQgY29tcCAqLworCXsweDAwLCAweGM0LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjNSwgMHgxOSwgMHhhYX0sCisJezB4MDAsIDB4YzYsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGM3LCAweDkxLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4YzksIDB4ZGQsIDB4YWF9LAorCXsweDAwLCAweGNhLCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHhjYiwgMHgzNywgMHhhYX0sCisKKy8qIHJlYWQgZDEgKi8KKwl7MHgwMCwgMHhkMSwgMHgzYywgMHhhYX0sCisJezB4MDAsIDB4YjgsIDB4MjgsIDB4YWF9LAorCXsweDAwLCAweGI5LCAweDFlLCAweGFhfSwKKwl7MHgwMCwgMHhiNiwgMHgxNCwgMHhhYX0sCisJezB4MDAsIDB4YjcsIDB4MGYsIDB4YWF9LAorCXsweDAwLCAweDVjLCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg1ZCwgMHgxOCwgMHhhYX0sCisJezB4MDAsIDB4NWUsIDB4MjQsIDB4YWF9LAorCXsweDAwLCAweDVmLCAweDI0LCAweGFhfSwKKwl7MHgwMCwgMHg4NiwgMHgxYSwgMHhhYX0sCisJezB4MDAsIDB4NjAsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDYxLCAweDFiLCAweGFhfSwKKwl7MHgwMCwgMHg2MiwgMHgzMCwgMHhhYX0sCisJezB4MDAsIDB4NjMsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDg3LCAweDFhLCAweGFhfSwKKwl7MHgwMCwgMHg2NCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjUsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDY2LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg2NywgMHgyMCwgMHhhYX0sCisJezB4MDAsIDB4ODgsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDY4LCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2OSwgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4NmEsIDB4MGYsIDB4YWF9LAorCXsweDAwLCAweDZiLCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg4OSwgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4ZDUsIDB4NGMsIDB4YWF9LAorCXsweDAwLCAweDBhLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgwYiwgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4MGUsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDBmLCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHhhMiwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4YTMsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweGE0LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhhNSwgMHhlYSwgMHhhYX0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRWR0FbXVs0XSA9IHsKKwl7MHgwMCwgMHgyMCwgMHgxMSwgMHhhYX0sCisJezB4MDAsIDB4MzMsIDB4MzgsIDB4YWF9LAorCXsweDAwLCAweGJiLCAweDBkLCAweGFhfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4YjAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4MDAsIDB4MDQsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDA1LCAweDNmLCAweGFhfSwKKwl7MHgwMCwgMHgwNCwgMHgwMCwgMHhkZH0sCS8qIGRlbGF5IDFzICovCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRRVkdBW11bNF0gPSB7CisJezB4MDAsIDB4MjAsIDB4MzMsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHhiYiwgMHgwZCwgMHhhYX0sCisJezB4YjMsIDB4MjIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGYwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4M2YsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDAsIDB4Y2N9LAorCXsweDAwLCAweDA0LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgwNSwgMHgzZiwgMHhhYX0sCisJezB4MDAsIDB4MDQsIDB4MDAsIDB4ZGR9LAkvKiBkZWxheSAxcyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0X2VuZF8xW11bNF0gPSB7CisJezB4MDAsIDB4NDcsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDQ4LCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHg0OSwgMHgxZiwgMHhhYX0sCisJezB4MDAsIDB4NGEsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDQ0LCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHhhYiwgMHg0YSwgMHhhYX0sCisJezB4MDAsIDB4YjEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGIyLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHhiMywgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4YjQsIDB4MGIsIDB4YWF9LAorCXsweDAwLCAweGI1LCAweDBkLCAweGFhfSwKKwl7MHgwMCwgMHg1OSwgMHg3ZSwgMHhhYX0sCS8qIHNoYXJwbmVzcyAqLworCXsweDAwLCAweDE2LCAweDAwLCAweGFhfSwJLyogd2hpdGUgYmFsYW5jZSAqLworCXsweDAwLCAweDE4LCAweDAwLCAweGFhfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9lbmRfMltdWzRdID0geworCXsweDAwLCAweDFkLCAweDg1LCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MWQsIDB4MDUsIDB4YWF9LAorCXt9CiB9OwogCiBzdHJ1Y3Qgc2Vuc29yX2luZm8gewpAQCAtMjQyMCwzMyArMjc2MCw4OSBAQAogCXU4IG9wOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyBzZW5zb3JfaW5mb19kYXRhW10gPSB7Ci0vKiAgICAgIHNlbnNvcklkLCAgICAgICAgIEkyY0FkZCwJSWRBZGQsICBWcElkLCAgbTEsICAgIG0yLCAgb3AgKi8KKy8qIHByb2JlIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyB2YzAzMjFfcHJvYmVfZGF0YVtdID0geworLyogICAgICBzZW5zb3JJZCwJICAgSTJjQWRkLAlJZEFkZCwgIFZwSWQsICBtMSwgICAgbTIsICBvcCAqLworLyogMCBPVjk2NDAgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sCisvKiAxIElDTTEwOFQgKG1heSByZXNwb25kIG9uIElkQWRkID09IDB4ODMgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODIsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0vKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCi0vKgl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODMsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCi0Je1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDE0M2EsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyogKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyogMiBQTzIxMzAgKG1heSBkZXRlY3QgUE8zMTMwTkMgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikqLworCXstMSwJCSAgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDMgTUkxMzEwICovCisJey0xLAkJICAgIDB4ODAgfCAweDVkLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNCBNSTM2MCAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yICovCiAvKgl7U0VOU09SX01JMDM2MCwJICAgIDB4ODAgfCAweDVkLCAweDAwLCAweDgyNDMsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogNSA3MTMxUiAqLwogCXtTRU5TT1JfSFY3MTMxUiwgICAgMHg4MCB8IDB4MTEsIDB4MDAsIDB4MDIwOSwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA2IE9WNzY0OSAqLwogCXstMSwJCSAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHgwMDAwLCAweDIxLCAweDIwLCAweDA1fSwKKy8qIDcgUEFTMzAyQkNXICovCiAJey0xLAkJICAgIDB4ODAgfCAweDQwLCAweDAwLCAweDAwMDAsIDB4MjAsIDB4MjIsIDB4MDV9LAorLyogOCBPVjc2NjAgKi8KIAl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAotLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDkgUE8zMTMwTkMgLSAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDMxMzAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogMTAgUE8xMDMwS0MgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0vKgl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLwotLyoJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LCAqLworLyogMTEgTUkxMzEwX1NPQyAqLworCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MTQzYSwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxMiBPVjk2NTAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sCisvKiAxMyBTNUs1MzIgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MTEsIDB4MzksIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxNCBNSTM2MF9TT0MgLSA/Pz8gKi8KKy8qIDE1IFBPMTIwME4gKi8KIAl7U0VOU09SX1BPMTIwMCwgICAgIDB4ODAgfCAweDVjLCAweDAwLCAweDEyMDAsIDB4NjcsIDB4NjcsIDB4MDF9LAotCXstMSwJCSAgICAweDgwIHwgMHgyZCwgMHgwMCwgMHgwMDAwLCAweDY1LCAweDY3LCAweDAxfSwKKy8qIDE2IFBPMzAzMEsgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MTgsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxNyBQTzIwMzAgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA/PyAqLworCXstMSwJCSAgICAweDgwIHwgMHg1NiwgMHgwMSwgMHgwMDAwLCAweDY0LCAweDY3LCAweDAxfSwKKwl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gdmMwMzIzX3Byb2JlX2RhdGFbXSA9IHsKKy8qICAgICAgc2Vuc29ySWQsCSAgIEkyY0FkZCwJSWRBZGQsICBWcElkLCAgbTEsICAgIG0yLCAgb3AgKi8KKy8qIDAgT1Y5NjQwICovCisJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMSBJQ00xMDhUIChtYXkgcmVzcG9uZCBvbiBJZEFkZCA9PSAweDgzIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgyLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMiBQTzIxMzAgKG1heSBkZXRlY3QgUE8zMTMwTkMgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikqLworCXstMSwJCSAgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDMgTUkxMzEwICovCisJey0xLAkJICAgIDB4ODAgfCAweDVkLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNCBNSTM2MCAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yICovCisvKgl7U0VOU09SX01JMDM2MCwJICAgIDB4ODAgfCAweDVkLCAweDAwLCAweDgyNDMsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogNSA3MTMxUiAqLworCXtTRU5TT1JfSFY3MTMxUiwgICAgMHg4MCB8IDB4MTEsIDB4MDAsIDB4MDIwOSwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA2IE9WNzY0OSAqLworCXstMSwJCSAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHgwMDAwLCAweDIxLCAweDIwLCAweDA1fSwKKy8qIDcgUEFTMzAyQkNXICovCisJey0xLAkJICAgIDB4ODAgfCAweDQwLCAweDAwLCAweDAwMDAsIDB4MjAsIDB4MjIsIDB4MDV9LAorLyogOCBPVjc2NjAgKi8KKwl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorLyogOSBQTzMxMzBOQyAtICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiAxMCBQTzEwMzBLQyAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDExIE1JMTMxMF9TT0MgKi8KKwl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDE0M2EsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTIgT1Y5NjUwICovCisJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMTMgUzVLNTMyICovCisJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTQgTUkzNjBfU09DIC0gPz8/ICovCisvKiAxNSBQTzEyMDBOICovCisJe1NFTlNPUl9QTzEyMDAsICAgICAweDgwIHwgMHg1YywgMHgwMCwgMHgxMjAwLCAweDY3LCAweDY3LCAweDAxfSwKKy8qIDE2ID8/ICovCisJey0xLAkJICAgIDB4ODAgfCAweDJkLCAweDAwLCAweDAwMDAsIDB4NjUsIDB4NjcsIDB4MDF9LAorLyogMTcgUE8yMDMwICovCisJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogPz8gKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCiAJe1NFTlNPUl9NSTEzMjBfU09DLCAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY3LCAweDAxfSwKLS8qZml4bWU6IHByZXZpb3VzbHkgZGV0ZWN0ZWQ/Ki8KLQl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAotLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyovCisvKmZpeG1lOiBub3QgaW4gdGhlIG1zLXdpbiBwcm9iZSAtIG1heSBiZSBmb3VuZCBiZWZvcmU/ICovCiAJe1NFTlNPUl9PVjc2NzAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjczLCAweDY2LCAweDY3LCAweDA1fSwKIH07CiAKQEAgLTI1MjAsNyArMjkxNiw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgaTsKKwlpbnQgaSwgbjsKIAl1MTYgdmFsdWU7CiAJY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvICpwdHNlbnNvcl9pbmZvOwogCkBAIC0yNTMxLDkgKzI5MjcsMTYgQEAKIAl9CiAKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7Ci0JUERFQlVHKERfUFJPQkUsICJjaGVjayBzZW5zb3IgaGVhZGVyICUwMngiLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlbnNvcl9pbmZvX2RhdGEpOyBpKyspIHsKLQkJcHRzZW5zb3JfaW5mbyA9ICZzZW5zb3JfaW5mb19kYXRhW2ldOworCVBERUJVRyhEX1BST0JFLCAidmMwMzIlZCBjaGVjayBzZW5zb3IgaGVhZGVyICUwMngiLAorCQlzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEgPyAxIDogMywgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CisJCXB0c2Vuc29yX2luZm8gPSB2YzAzMjFfcHJvYmVfZGF0YTsKKwkJbiA9IEFSUkFZX1NJWkUodmMwMzIxX3Byb2JlX2RhdGEpOworCX0gZWxzZSB7CisJCXB0c2Vuc29yX2luZm8gPSB2YzAzMjNfcHJvYmVfZGF0YTsKKwkJbiA9IEFSUkFZX1NJWkUodmMwMzIzX3Byb2JlX2RhdGEpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCXJlZ193KGRldiwgMHhhMCwgMHgwMiwgMHhiMzM0KTsKIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5tMSwgMHhiMzAwKTsKIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5tMiwgMHhiMzAwKTsKQEAgLTI1NTEsMTMgKzI5NTQsMTUgQEAKIAkJCQlyZXR1cm4gcHRzZW5zb3JfaW5mby0+c2Vuc29ySWQ7CiAKIAkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgMHgzMTMwOgorCQkJCXJldHVybiBTRU5TT1JfUE8zMTMwTkM7CiAJCQljYXNlIDB4NzY3MzoKIAkJCQlyZXR1cm4gU0VOU09SX09WNzY3MDsKIAkJCWNhc2UgMHg4MjQzOgogCQkJCXJldHVybiBTRU5TT1JfTUkwMzYwOwogCQkJfQotLypmaXhtZTogc2hvdWxkIHJldHVybiBoZXJlKi8KIAkJfQorCQlwdHNlbnNvcl9pbmZvKys7CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTI2MTksNyArMzAyNCw3IEBACiAJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBkYXRhW2ldWzBdLCAmZGF0YVtpXVsxXSwgMik7CiAJCQlicmVhazsKIAkJY2FzZSAweGRkOgotCQkJbXNsZWVwKGRhdGFbaV1bMl0gKyAxMCk7CisJCQltc2xlZXAoZGF0YVtpXVsxXSAqIDI1NiArIGRhdGFbaV1bMl0gKyAxMCk7CiAJCQlicmVhazsKIAkJfQogCQlpKys7CkBAIC0yNjQ2LDEyICszMDUxLDE3IEBACiAJCTY0LAkJLyogT1Y3NjcwIDYgKi8KIAkJMTI4LAkJLyogUE8xMjAwIDcgKi8KIAkJMTI4LAkJLyogUE8zMTMwTkMgOCAqLworCQkxMjgsCQkvKiBQT3h4eHggOSAqLwogCX07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5mbGFncyA9IGlkLT5kcml2ZXJfaW5mbyAmIDB4ZmY7Ci0Jc2Vuc29yID0gdmMwMzJ4X3Byb2JlX3NlbnNvcihnc3BjYV9kZXYpOworCWlmIChpZC0+aWRWZW5kb3IgPT0gMHgwNDZkICYmCisJICAgIChpZC0+aWRQcm9kdWN0ID09IDB4MDg5MiB8fCBpZC0+aWRQcm9kdWN0ID09IDB4MDg5NikpCisJCXNlbnNvciA9IFNFTlNPUl9QT3h4eHg7CisJZWxzZQorCQlzZW5zb3IgPSB2YzAzMnhfcHJvYmVfc2Vuc29yKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZW5zb3IpIHsKIAljYXNlIC0xOgogCQlQREVCVUcoRF9QUk9CRSwgIlVua25vd24gc2Vuc29yLi4uIik7CkBAIC0yNjg0LDYgKzMwOTQsOSBAQAogCWNhc2UgU0VOU09SX1BPMzEzME5DOgogCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBPMzEzME5DIik7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgUE94eHh4Iik7CisJCWJyZWFrOwogCX0KIAlzZC0+c2Vuc29yID0gc2Vuc29yOwogCkBAIC0yNzEyLDI3ICszMTI1LDE4IEBACiAJfQogCWNhbS0+bnBrdCA9IG5wa3Rbc2QtPnNlbnNvcl07CiAKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JfREVGOwogCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKIAlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOworCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworCisJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9IGN0cmxfZGlzW3NkLT5zZW5zb3JdOworCiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzY3MCkKIAkJc2QtPmZsYWdzIHw9IEZMX0hGTElQIHwgRkxfVkZMSVA7Ci0Jc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVjc2NzApCi0JCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBMSUdIVEZSRVFfSURYKTsKLQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgotCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6Ci0JY2FzZSBTRU5TT1JfT1Y3NjYwOgotCWNhc2UgU0VOU09SX09WNzY3MDoKLQljYXNlIFNFTlNPUl9QTzEyMDA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBIRkxJUF9JRFgpCi0JCQkJCXwgKDEgPDwgVkZMSVBfSURYKTsKLQkJYnJlYWs7Ci0JfQotCi0Jc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHg4YSwgMCwgMyk7CkBAIC0yNzQ3LDEwICszMTUxLDU1IEBACiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMwMCwgMSk7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMCkgeworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDAwLCAweGIzMDApOworCQl9CisJfQogCXJldHVybiAwOwogfQogCi0vKiBzb21lIHNlbnNvcnMgb25seSAqLworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGE7CisKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEJSSUdIVE5FU1NfSURYKSkKKwkJcmV0dXJuOworCWRhdGEgPSBzZC0+YnJpZ2h0bmVzczsKKwlpZiAoZGF0YSA+PSAweDgwKQorCQlkYXRhICY9IDB4N2Y7CisJZWxzZQorCQlkYXRhID0gMHhmZiBeIGRhdGE7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg5OCwgJmRhdGEsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBDT05UUkFTVF9JRFgpKQorCQlyZXR1cm47CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg5OSwgJnNkLT5jb250cmFzdCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGE7CisKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IENPTE9SU19JRFgpKQorCQlyZXR1cm47CisJZGF0YSA9IHNkLT5jb2xvcnMgLSAoc2QtPmNvbG9ycyA+PiAzKSAtIDE7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg5NCwgJmRhdGEsIDEpOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTUsICZzZC0+Y29sb3JzLCAxKTsKK30KKwogc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yNzY0LDYgKzMyMTMsNyBAQAogCQl2ZmxpcCA9ICF2ZmxpcDsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgorCWNhc2UgU0VOU09SX01JMTMyMDoKIAljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgogCQlkYXRhWzBdID0gZGF0YVsxXSA9IDA7CQkvKiBzZWxlY3QgcGFnZSAwICovCiAJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4ZjAsIGRhdGEsIDIpOwpAQCAtMjgwMSwxOCArMzI1MSwyOSBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG92NzY2MF9mcmVxX3RiW3NkLT5saWdodGZyZXFdKTsKIH0KIAotLyogcG8xMjAwIG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IGRhdGE7CiAKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKQotCQlyZXR1cm47Ci0JZGF0YSA9IDA7Ci0JaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgJmRhdGEsIDEpOwotCWRhdGEgPSAweGI1ICsgc2QtPnNoYXJwbmVzcyAqIDM7Ci0JaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg2MSwgJmRhdGEsIDEpOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX1BPMTIwMDoKKwkJZGF0YSA9IDA7CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsICZkYXRhLCAxKTsKKwkJaWYgKHNkLT5zaGFycG5lc3MgPCAwKQorCQkJZGF0YSA9IDB4NmE7CisJCWVsc2UKKwkJCWRhdGEgPSAweGI1ICsgc2QtPnNoYXJwbmVzcyAqIDM7CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4NjEsICZkYXRhLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUE94eHh4OgorCQlpZiAoc2QtPnNoYXJwbmVzcyA8IDApCisJCQlkYXRhID0gMHg3ZTsJLyogZGVmID0gbWF4ICovCisJCWVsc2UKKwkJCWRhdGEgPSAweDYwICsgc2QtPnNoYXJwbmVzcyAqIDB4MGY7CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4NTksICZkYXRhLCAxKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTI5MjIsMTIgKzMzODMsMjcgQEAKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJCWluaXQgPSBwbzMxMzBfcnVuZGF0YTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgU0VOU09SX1BPMTIwMDogKi8KKwljYXNlIFNFTlNPUl9QTzEyMDA6CiAJCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKIAkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7CiAJCWluaXQgPSBwbzEyMDBfaW5pdFZHQV9kYXRhOwogCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfUE94eHh4OiAqLworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwb3h4eHhfaW5pdF9jb21tb24pOworCQlpZiAobW9kZSkKKwkJCWluaXQgPSBwb3h4eHhfaW5pdFFWR0E7CisJCWVsc2UKKwkJCWluaXQgPSBwb3h4eHhfaW5pdFZHQTsKKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4YywgMHgwMDAwLCAzKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsCisJCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdICYgMSA/IDAgOiAxLAorCQkJCTB4YjM1Yyk7CisJCW1zbGVlcCgzMDApOworLypmaXhtZTogaTJjIHJlYWQgMDQgYW5kIDA1Ki8KKwkJaW5pdCA9IHBveHh4eF9pbml0X2VuZF8xOworCQlicmVhazsKIAl9CiAJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CkBAIC0yOTM2LDcgKzM0MTIsNiBAQAogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg2Yyk7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgTWF0cml4VCwgOSwgMHhiODJjKTsKIAotCQkvKiBzZXQgdGhlIGxlZCBvbiAweDA4OTIgMHgwODk2ICovCiAJCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCQljYXNlIFNFTlNPUl9QTzEyMDA6CiAJCWNhc2UgU0VOU09SX0hWNzEzMVI6CkBAIC0yOTQ1LDE2ICszNDIwLDIyIEBACiAJCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHgwNThjLCAweDAwMDApOwogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKLQkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwotCQkJYnJlYWs7CiAJCX0KIAkJbXNsZWVwKDEwMCk7CiAJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKIAkJc2V0bGlnaHRmcmVxKGdzcGNhX2Rldik7CiAJfQorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QT3h4eHgpIHsKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKworCQkvKiBsZWQgb24gKi8KKwkJbXNsZWVwKDgwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfZW5kXzIpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk2MywxMCArMzQ0NCwxNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkxMzEwX1NPQykKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgogCQlyZWdfdyhkZXYsIDB4ODksIDB4MDU4YywgMHgwMGZmKTsKLQllbHNlIGlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQotCQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUE94eHh4OgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCisJCQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKwkJYnJlYWs7CisJfQogCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDksIDB4YjAwMyk7CiB9CkBAIC0yOTg0LDYgKzM0NzIsMTIgQEAKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7CiAJZWxzZSBpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKIAkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7CisJCXJlZ193KGRldiwgMHhhMCwgMHgyNiwgMHhiMzAwKTsKKwkJcmVnX3coZGV2LCAweGEwLCAweDA0LCAweGIzMDApOworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDAsIDB4YjMwMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC0zMDIwLDYgKzM1MTQsNjAgQEAKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDFhODAwZmMuLjUwOTg2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTEsOSArMSw4IEBACiAvKgotICoJWi1TdGFyL1ZpbWljcm8gemMzMDEvemMzMDJwL3ZjMzB4IGxpYnJhcnkKLSAqCUNvcHlyaWdodCAoQykgMjAwNCAyMDA1IDIwMDYgTWljaGVsIFhoYWFyZAotICoJCW14aGFhcmRAbWFnaWMuZnIKKyAqIFotU3Rhci9WaW1pY3JvIHpjMzAxL3pjMzAycC92YzMweCBsaWJyYXJ5CiAgKgotICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAyMDA1IDIwMDYgTWljaGVsIFhoYWFyZCBteGhhYXJkQG1hZ2ljLmZyCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiwxMCArMjEsMTEgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAiemMzeHgiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAjaW5jbHVkZSAianBlZy5oIgogCi1NT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sICIKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+LCAiCiAJCSJTZXJnZSBBLiBTdWNoa292IDxTZXJnZS5BLlNAdG9jaGthLnJ1PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBaQzAzeHgvVkMzeHggVVNCIENhbWVyYSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTM5LDE4ICszOSwxOCBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JX191OCBicmlnaHRuZXNzOwotCV9fdTggY29udHJhc3Q7Ci0JX191OCBnYW1tYTsKLQlfX3U4IGF1dG9nYWluOwotCV9fdTggbGlnaHRmcmVxOwotCV9fdTggc2hhcnBuZXNzOworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggZ2FtbWE7CisJdTggYXV0b2dhaW47CisJdTggbGlnaHRmcmVxOworCXU4IHNoYXJwbmVzczsKIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KICNkZWZpbmUgUVVBTElUWV9NSU4gNDAKICNkZWZpbmUgUVVBTElUWV9NQVggNjAKICNkZWZpbmUgUVVBTElUWV9ERUYgNTAKIAotCXNpZ25lZCBjaGFyIHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKwl1OCBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCiAvKiAhISB2YWx1ZXMgdXNlZCBpbiBkaWZmZXJlbnQgdGFibGVzICovCiAjZGVmaW5lIFNFTlNPUl9BRENNMjcwMCAwCiAjZGVmaW5lIFNFTlNPUl9DUzIxMDIgMQpAQCAtOTIsOSArOTIsOCBAQAogc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAotI2RlZmluZSBTRF9CUklHSFRORVNTIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTAzLDI2ICsxMDIsMjYgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEyOCwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTI4CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAl9LAotI2RlZmluZSBTRF9DT05UUkFTVCAxCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAogCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMjU2LAorCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEyOCwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAogCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCiAJfSwKLSNkZWZpbmUgU0RfR0FNTUEgMgogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLApAQCAtMTM2LDcgKzEzNSw2IEBACiAJICAgIC5zZXQgPSBzZF9zZXRnYW1tYSwKIAkgICAgLmdldCA9IHNkX2dldGdhbW1hLAogCX0sCi0jZGVmaW5lIFNEX0FVVE9HQUlOIDMKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKQEAgLTE0NSwxMyArMTQzLDEzIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAxLAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKKyNkZWZpbmUgQVVUT0dBSU5fREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKIAkgICAgLmdldCA9IHNkX2dldGF1dG9nYWluLAogCX0sCiAjZGVmaW5lIExJR0hURlJFUV9JRFggNAotI2RlZmluZSBTRF9GUkVRIDQKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLApAQCAtMTYwLDEyICsxNTgsMTIgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLwogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKKyNkZWZpbmUgRlJFUV9ERUYgMAorCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgICAgLmdldCA9IHNkX2dldGZyZXEsCiAJfSwKLSNkZWZpbmUgU0RfU0hBUlBORVNTIDUKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKQEAgLTE3NCw3ICsxNzIsOCBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMywKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDIsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgMgorCQkuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJICAgIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCkBAIC0xOTQsNiArMTkzLDE5IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBicm9rZW5fdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyMzIsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyMzIgKiA0IC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0NzIsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0NzIgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CiAJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTc2LApAQCAtMjA5LDkgKzIyMSw5IEBACiAKIC8qIHVzYiBleGNoYW5nZXMgKi8KIHN0cnVjdCB1c2JfYWN0aW9uIHsKLQlfX3U4CXJlcTsKLQlfX3U4CXZhbDsKLQlfX3UxNglpZHg7CisJdTgJcmVxOworCXU4CXZhbDsKKwl1MTYJaWR4OwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxbXSA9IHsKQEAgLTQyMSw3ICs0MzMsNyBAQAogCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsW10gPSB7CS8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC00NzMsNyArNDg1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogNjQweDQ4MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC01MjQsNyArNTM2LDcgQEAKIAl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl81MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAxfSwKIAl7MHhhYSwgMHgyNCwgMHgwMDVmfSwKQEAgLTU0Niw3ICs1NTgsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDB9LAogCXsweGFhLCAweDI0LCAweDAwYWZ9LApAQCAtNTY4LDcgKzU4MCw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNjBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMX0sCiAJezB4YWEsIDB4MjQsIDB4MDA1NX0sCkBAIC01OTAsNyArNjAyLDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFhfSwKQEAgLTYxMiw3ICs2MjQsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Ob0ZsaWtlclNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMX0sCiAJezB4YWEsIDB4MjQsIDB4MDA1Zn0sCkBAIC02MzQsNyArNjQ2LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDB9LAogCXsweGFhLCAweDI0LCAweDAwYWZ9LApAQCAtNjU4LDcgKzY3MCw3IEBACiB9OwogCiAvKiBDUzIxMDJfS09DT00gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDExLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogCXsweGEwLCAweDA4LCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtOTE3LDcgKzkyOSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtMTQ5NSw3ICsxNTA3LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIweGJfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIwYl9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogcXRhYmxlIDB4MDUgKi8KQEAgLTE2MjcsNyArMTYzOSw3IEBACiAJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIweGJfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjBiX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTE4MTksNyArMTgzMSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFieHhfSW5pdGlhbFtdID0gewkJLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC0xODY2LDcgKzE4NzgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYnh4X0luaXRpYWxTY2FsZVtdID0gewkvKiA2NDB4NDgwKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFiX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMjA2Myw3ICsyMDc1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWN4eF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxcl9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC0yMTU3LDcgKzIxNjksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxY3h4X0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiBkaWZmICovCkBAIC0yMjU5LDcgKzIyNzEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YXh4X0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtMjQzNiw3ICsyNDQ4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWF4eF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTI2MTUsNyArMjYyNyw3IEBACiAJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDAyMH0sIC8qIDAwLDBjLDIwLGFhICovCkBAIC0yNjQ2LDcgKzI2NTgsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV81MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDA4Y30sIC8qIDAwLDBjLDhjLGFhICovCkBAIC0yNjc5LDcgKzI2OTEsNyBAQAogCXsweGEwLCAweGMwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsYzAsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLwpAQCAtMjcxMCw3ICsyNzIyLDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNjBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDh9LCAvKiAwMCwwYywwOCxhYSAqLwpAQCAtMjc0Myw3ICsyNzU1LDcgQEAKIAl7MHhhMCwgMHhjMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LGMwLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLwpAQCAtMjc3NCw3ICsyNzg2LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDAwNH0sIC8qIDAwLDBjLDA0LGFhICovCkBAIC0yODA4LDcgKzI4MjAsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDAwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDAxLGNjICovCkBAIC0yOTI4LDcgKzI5NDAsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Jbml0aWFsW10gPSB7CSAvKiAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Jbml0aWFsU2NhbGVbXSA9IHsJIC8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDEwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDAxLGNjICovCkBAIC0zMDQ3LDcgKzMwNTksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl81MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDFkfSwgLyogMDAsMzYsMUQsYWEgKi8KQEAgLTMwNjQsNyArMzA3Niw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNTBIWltdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwM2F9LCAvKiAwMCwzNiwzQSxhYSAqLwpAQCAtMzA4MSw3ICszMDkzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNjBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAxOH0sIC8qIDAwLDM2LDE4LGFhICovCkBAIC0zMDk4LDcgKzMxMTAsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KQEAgLTMxMTUsNyArMzEyNyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Ob0ZsaWtlclNjYWxlW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAxOH0sIC8qIDAwLDM2LDE4LGFhICovCkBAIC0zMTMyLDcgKzMxNDQsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Ob0ZsaWtlcltdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMzB9LCAvKiAwMCwzNiwzMCxhYSAqLwpAQCAtMzE0NCw4ICszMTU2LDggQEAKIAl7fQogfTsKIAotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCUsSW5pdGlhbCAtIDY0MHg0ODAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBPVjc2MjBfbW9kZTBbXSA9IHsKKy8qIGZyb20genMyMTEuaW5mICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsNDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LCAvKiAwMCwwOCwwMCxjYyAqLwpAQCAtMzIxNCw5ICszMjI2LDcgQEAKIAl7MHhhMCwgMHg1MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LDUwLGNjICovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlLEluaXRpYWxTY2FsZSAtIDMyMHgyNDAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBPVjc2MjBfbW9kZTFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHg1MCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIDAwLDAyLDUwLGNjICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogMDAsMDgsMDAsY2MgKi8KQEAgLTMyODcsOSArMzI5Nyw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAkvKiAwMSxhOCw1MCxjYyAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSw1MEhaICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfNTBIWltdID0gewogCXsweGFhLCAweDEzLCAweDAwYTN9LAkvKiAwMCwxMyxhMyxhYSAqLwogCXsweGRkLCAweDAwLCAweDAxMDB9LAkvKiAwMCwwMSwwMCxkZCAqLwogCXsweGFhLCAweDJiLCAweDAwOTZ9LAkvKiAwMCwyYiw5NixhYSAqLwpAQCAtMzMwNyw5ICszMzE1LDcgQEAKIAkJCQkJCQkgaWYgbW9kZTAgKDY0MHg0ODApICovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlXEFFLDYwSFogKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBPVjc2MjBfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF82MEhaW10gPSB7CiAJezB4YWEsIDB4MTMsIDB4MDBhM30sCQkJLyogMDAsMTMsYTMsYWEgKi8KIAkJCQkJCS8qIChidWcgaW4genMyMTEuaW5mKSAqLwogCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCS8qIDAwLDAxLDAwLGRkICovCkBAIC0zMzMxLDkgKzMzMzcsNyBAQAogCXsweGExLCAweDAxLCAweDAwMzd9LAkJKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsTm9GbGlrZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBPVjc2MjBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfTm9GbGlrZXJbXSA9IHsKIAl7MHhhYSwgMHgxMywgMHgwMGEzfSwJCQkvKiAwMCwxMyxhMyxhYSAqLwogCQkJCQkJLyogKGJ1ZyBpbiB6czIxMS5pbmYpICovCiAJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJLyogMDAsMDEsMDAsZGQgKi8KQEAgLTMzNTQsNyArMzM1OCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKQEAgLTM1MTEsNyArMzUxNSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYzMGNfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtMzY4Miw3ICszNjg2LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFtdID0gewkvKiAxNzZ4MTQ0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMTc2eDE0NCAqLwogLyogSlBFRyBjb250cm9sICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIC8qIFNyZWFtIGFuZCBTZW5zb3Igc3BlY2lmaWMgKi8KQEAgLTM4MDAsNyArMzgwNCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxTY2FsZVtdID0gewkvKiAzNTJ4Mjg4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsW10gPSB7CS8qIDM1MngyODggKi8KIC8qIEpQRUcgY29udHJvbCAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAvKiBTcmVhbSBhbmQgU2Vuc29yIHNwZWNpZmljICovCkBAIC0zOTcyLDEwICszOTc2LDEwIEBACiAJe30KIH07CiAKLS8qIGZyb20gdXNidm0zMWIuaW5mICovCisvKiBmcm9tIGx2V0lNdi5pbmYgMDQ2ZDowOGEyLzowOGFhIDIwMDcvMDYvMDMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMyMDJiX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogCXsweGEwLCAweDBlLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwZSxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJCS8qIDAwLDAyLDAwLGNjICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLwpAQCAtNDAwMCw3ICs0MDA0LDcgQEAKIAl7MHhhYSwgMHgwOSwgMHgwMDA2fSwJCQkJLyogMDAsMDksMDYsYWEgKi8KIAl7MHhhYSwgMHgwYSwgMHgwMDAxfSwJCQkJLyogMDAsMGEsMDEsYWEgKi8KIAl7MHhhYSwgMHgwYiwgMHgwMDAxfSwJCQkJLyogMDAsMGIsMDEsYWEgKi8KLQl7MHhhYSwgMHgwYywgMHgwMDA4fSwJCQkJLyogMDAsMGMsMDgsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDA2fSwKIAl7MHhhYSwgMHgwZCwgMHgwMDAwfSwJCQkJLyogMDAsMGQsMDAsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMDAwfSwJCQkJLyogMDAsMTAsMDAsYWEgKi8KIAl7MHhhYSwgMHgxMiwgMHgwMDA1fSwJCQkJLyogMDAsMTIsMDUsYWEgKi8KQEAgLTQwMTksMTMgKzQwMjMsMTMgQEAKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogCXsweGEwLCAweDBlLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwZSxjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJCS8qIDAwLDAyLDEwLGNjICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLwogCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLwotCXsweGEwLCAweGQwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZDAsY2MgKi8KKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwJLyogMDAsMDEsMDEsY2MgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDMsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDEsY2MgKi8KQEAgLTQwMzUsNyArNDAzOSw3IEBACiAJezB4YTAsIDB4MDgsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJCS8qIDAxLDFhLDA4LGNjICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJCS8qIDAxLDFjLDAyLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwOUJfV0lOSEVJR0hUSElHSH0sCQkvKiAwMCw5YiwwMSxjYyAqLwotCXsweGEwLCAweGQ4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxkOCxjYyAqLworCXsweGEwLCAweGU4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwJCS8qIDAwLDlkLDAyLGNjICovCiAJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAkJLyogMDAsOWUsODgsY2MgKi8KIAl7MHhhYSwgMHgwMiwgMHgwMDAyfSwJCQkJLyogMDAsMDIsMDIsYWEgKi8KQEAgLTQwNDQsNyArNDA0OCw3IEBACiAJezB4YWEsIDB4MDksIDB4MDAwNn0sCQkJCS8qIDAwLDA5LDA2LGFhICovCiAJezB4YWEsIDB4MGEsIDB4MDAwMX0sCQkJCS8qIDAwLDBhLDAxLGFhICovCiAJezB4YWEsIDB4MGIsIDB4MDAwMX0sCQkJCS8qIDAwLDBiLDAxLGFhICovCi0JezB4YWEsIDB4MGMsIDB4MDAwOH0sCQkJCS8qIDAwLDBjLDA4LGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGQsIDB4MDAwMH0sCQkJCS8qIDAwLDBkLDAwLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkJCS8qIDAwLDEwLDAwLGFhICovCiAJezB4YWEsIDB4MTIsIDB4MDAwNX0sCQkJCS8qIDAwLDEyLDA1LGFhICovCkBAIC00MDU5LDYgKzQwNjMsOCBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MgKi8KIAl7MHhhMCwgMHg3MCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJCS8qIDAxLDhkLDcwLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwOTdfV0lOWVNUQVJUSElHSH0sCisJezB4YTAsIDB4ZmUsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKIAl7fQogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMyMDJiXzUwSFpbXSA9IHsKQEAgLTQwNjYsMjIgKzQwNzIsMjIgQEAKIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwogCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwNjh9LAkJCQkvKiAwMCwyMSw2OCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwMWJ9LAogCXsweGFhLCAweDAzLCAweDAwNDR9LAkJCQkvKiAwMCwwMyw0NCxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDl9LAkJCQkvKiAwMCwwNCwwOSxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMjh9LAkJCQkvKiAwMCwwNSwyOCxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMDh9LAorCXsweGFhLCAweDA1LCAweDAwMWJ9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNyxjYyAqLwotCXsweGEwLCAweGQyLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixkMixjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDRkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsNGQsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0NCxjYyAqLwogCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KIAl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCkBAIC00MDk0LDIzICs0MTAwLDIzIEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLwogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCi0JezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDA2Y30sCQkJCS8qIDAwLDIxLDZjLGFhICovCisJezB4YWEsIDB4MjAsIDB4MDAwNH0sCisJezB4YWEsIDB4MjEsIDB4MDAzZH0sCiAJezB4YWEsIDB4MDMsIDB4MDA0MX0sCQkJCS8qIDAwLDAzLDQxLGFhICovCi0JezB4YWEsIDB4MDQsIDB4MDAwOX0sCQkJCS8qIDAwLDA0LDA5LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAyY30sCQkJCS8qIDAwLDA1LDJjLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAxMH0sCisJezB4YWEsIDB4MDUsIDB4MDAzZH0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBmLGNjICovCi0JezB4YTAsIDB4YmUsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGJlLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4M2QsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4OWIsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw5YixjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0MSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQxLGNjICovCiAJezB4YTAsIDB4NmYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw2ZixjYyAqLwogCXsweGEwLCAweGFkLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYWQsY2MgKi8KQEAgLTQxMzAsMTYgKzQxMzYsMTYgQEAKIAl7MHhhYSwgMHgwNSwgMHgwMDAwfSwJCQkJLyogMDAsMDUsMDAsYWEgKi8KIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KLQl7MHhhMCwgMHhjMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsYzAsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDQwLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQ1LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDUsY2MgKi8KIAl7MHhhMCwgMHg4ZSwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDhlLGNjICovCiAJezB4YTAsIDB4YzEsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixjMSxjYyAqLwpAQCAtNDE1MiwyMyArNDE1OCwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwMDR9LAkJCQkvKiAwMCwyMSwwNCxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwMDh9LAogCXsweGFhLCAweDAzLCAweDAwNDJ9LAkJCQkvKiAwMCwwMyw0MixhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDh9LAkJCQkvKiAwMCwwNCwwOCxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMDR9LAkJCQkvKiAwMCwwNSwwNCxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwMDh9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLwotCXsweGEwLCAweDlmLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5Miw5ZixjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDgxLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsODEsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDIsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MixjYyAqLwogCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KIAl7MHhhMCwgMHhhZiwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFmLGNjICovCkBAIC00MTgyLDIyICs0MTg4LDIyIEBACiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KIAl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDIwfSwJCQkJLyogMDAsMjEsMjAsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDA2fSwKIAl7MHhhYSwgMHgwMywgMHgwMDQwfSwJCQkJLyogMDAsMDMsNDAsYWEgKi8KIAl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDIwfSwJCQkJLyogMDAsMDUsMjAsYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDA2fSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGYwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NywwMixjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwogCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMDAsY2MgKi8KLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MCxjYyAqLwogCXsweGEwLCAweDYwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNjAsY2MgKi8KIAl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLDkwLGNjICovCkBAIC00MjEwLDIzICs0MjE2LDIzIEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLwogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCi0JezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDAxMH0sCQkJCS8qIDAwLDIxLDEwLGFhICovCisJezB4YWEsIDB4MjAsIDB4MDAwNH0sCisJezB4YWEsIDB4MjEsIDB4MDAwY30sCiAJezB4YWEsIDB4MDMsIDB4MDA0MH0sCQkJCS8qIDAwLDAzLDQwLGFhICovCi0JezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAxMH0sCQkJCS8qIDAwLDA1LDEwLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAxMH0sCisJezB4YWEsIDB4MDUsIDB4MDAwY30sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLwotCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDBjLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsMDIsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwogCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMDAsY2MgKi8KLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MCxjYyAqLwogCXsweGEwLCAweDYwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNjAsY2MgKi8KIAl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLDkwLGNjICovCkBAIC00NzEzLDggKzQ3MTksOCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIG9lbTkuaW5mIC0gSEtSLCVQTzIwMzAlLEluaXRpYWwgLSA2NDB4NDgwIC0gKGNsb3NlIHRvIENTMjEwMikgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfbW9kZTBbXSA9IHsKKy8qIGZyb20gb2VtOS5pbmYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiwwNCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtNDc5MCw4ICs0Nzk2LDggQEAKIAl7fQogfTsKIAotLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsU2NhbGUgLSAzMjB4MjQwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUxW10gPSB7CisvKiBmcm9tIG9lbTkuaW5mICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtNDg2Nyw3ICs0ODczLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHg4ZCwgMHgwMDA4fSwgLyogMDAsOGQsMDgsYWEgKi8KIAl7MHhhYSwgMHgxYSwgMHgwMDAxfSwgLyogMDAsMWEsMDEsYWEgKi8KIAl7MHhhYSwgMHgxYiwgMHgwMDBhfSwgLyogMDAsMWIsMGEsYWEgKi8KQEAgLTQ4ODksNyArNDg5NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF82MEhaW10gPSB7CiAJezB4YWEsIDB4OGQsIDB4MDAwOH0sIC8qIDAwLDhkLDA4LGFhICovCiAJezB4YWEsIDB4MWEsIDB4MDAwMH0sIC8qIDAwLDFhLDAwLGFhICovCiAJezB4YWEsIDB4MWIsIDB4MDBkZX0sIC8qIDAwLDFiLGRlLGFhICovCkBAIC00OTEyLDcgKzQ5MTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwX05vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LCAvKiAwMSw4MCwwMixjYyAqLwogCXsweGFhLCAweDhkLCAweDAwMGR9LCAvKiAwMCw4ZCwwZCxhYSAqLwogCXsweGFhLCAweDFhLCAweDAwMDB9LCAvKiAwMCwxYSwwMCxhYSAqLwpAQCAtNDkyNCw3ICs0OTMwLDcgQEAKIH07CiAKIC8qIFRFU1QgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwQ0tfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjS19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMSwgMHgwMDNifSwKIAl7MHhhMCwgMHgwZSwgMHgwMDNhfSwKQEAgLTUxMjcsNyArNTEzMyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNLX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMSwgMHgwMDNifSwKIAl7MHhhMCwgMHgwZSwgMHgwMDNhfSwKQEAgLTU1NjAsNyArNTU2Niw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjLCAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMixjYywgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MsICovCkBAIC01NjI3LDcgKzU2MzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYywgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDIsY2MsICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjLCAqLwpAQCAtNTY5Miw4ICs1Njk4LDcgQEAKIAl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCQkvKiAwMSwxOCw2NSxjYyAqLwogCXt9CiB9OwotLyogIjUwSFoiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAxfSwJCS8qIDAwLDgzLDAxLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDBhYX0sCQkvKiAwMCw4NCxhYSxhYSAqLwpAQCAtNTcxNyw4ICs1NzIyLDcgQEAKIAl7fQogfTsKIAotLyogIjUwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDN9LAkJLyogMDAsODMsMDMsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMDU0fSwJCS8qIDAwLDg0LDU0LGFhICovCkBAIC01NzQyLDggKzU3NDYsNyBAQAogCXt9CiB9OwogCi0vKiAiNjBIWiIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDF9LAkJLyogMDAsODMsMDEsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMDYyfSwJCS8qIDAwLDg0LDYyLGFhICovCkBAIC01NzY3LDggKzU3NzAsNyBAQAogCXt9CiB9OwogCi0vKiAiNjBIWlNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWltdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAyfSwJCS8qIDAwLDgzLDAyLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDBjNH0sCQkvKiAwMCw4NCxjNCxhYSAqLwpAQCAtNTc5Miw4ICs1Nzk0LDcgQEAKIAl7fQogfTsKIAotLyogIk5vRmxpa2VyIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlW10gPSB7CiAJezB4YTAsIDB4MGMsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwYyxjYywgKi8KIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMH0sCQkvKiAwMCw4MywwMCxhYSAqLwpAQCAtNTgxNSw4ICs1ODE2LDcgQEAKIAl7fQogfTsKIAotLyogIk5vRmxpa2VyU2NhbGUiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MGMsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwYyxjYywgKi8KIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMH0sCQkvKiAwMCw4MywwMCxhYSAqLwpAQCAtNTgzOSw3ICs1ODM5LDcgQEAKIH07CiAKIHN0YXRpYyB1OCByZWdfcl9pKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJX191MTYgaW5kZXgpCisJCXUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNTg1Miw3ICs1ODUyLDcgQEAKIH0KIAogc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJX191MTYgaW5kZXgpCisJCXUxNiBpbmRleCkKIHsKIAl1OCByZXQ7CiAKQEAgLTU4NjIsOCArNTg2Miw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKLQkJCV9fdTggdmFsdWUsCi0JCQlfX3UxNiBpbmRleCkKKwkJCXU4IHZhbHVlLAorCQkJdTE2IGluZGV4KQogewogCXVzYl9jb250cm9sX21zZyhkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKQEAgLTU4NzQsMTggKzU4NzQsMTggQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKLQkJCV9fdTggdmFsdWUsCi0JCQlfX3UxNiBpbmRleCkKKwkJCXU4IHZhbHVlLAorCQkJdTE2IGluZGV4KQogewogCVBERUJVRyhEX1VTQk8sICJyZWcgdyBbJTA0eF0gPSAlMDJ4IiwgaW5kZXgsIHZhbHVlKTsKIAlyZWdfd19pKGRldiwgdmFsdWUsIGluZGV4KTsKIH0KIAotc3RhdGljIF9fdTE2IGkyY19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTggcmVnKQorc3RhdGljIHUxNiBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcpCiB7Ci0JX191OCByZXRieXRlOwotCV9fdTE2IHJldHZhbDsKKwl1OCByZXRieXRlOworCXUxNiByZXR2YWw7CiAKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4MDA5Mik7CiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgMHgwMiwgMHgwMDkwKTsJCS8qIDwtIHJlYWQgY29tbWFuZCAqLwpAQCAtNTkwMCwxMiArNTkwMCwxMiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX3U4IGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3U4IHJlZywKLQkJCV9fdTggdmFsTCwKLQkJCV9fdTggdmFsSCkKK3N0YXRpYyB1OCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggcmVnLAorCQkJdTggdmFsTCwKKwkJCXU4IHZhbEgpCiB7Ci0JX191OCByZXRieXRlOworCXU4IHJldGJ5dGU7CiAKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHZhbEwsIDB4OTMpOwpAQCAtNTk1NywyNCArNTk1NywyNCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKLQljb25zdCBfX3U4ICptYXRyaXg7CisJY29uc3QgdTggKm1hdHJpeDsKIAlzdGF0aWMgY29uc3QgdTggYWRjbTI3MDBfbWF0cml4WzldID0KIC8qCQl7MHg2NiwgMHhlZCwgMHhlZCwgMHhlZCwgMHg2NiwgMHhlZCwgMHhlZCwgMHhlZCwgMHg2Nn07ICovCiAvKm1zLXdpbiovCiAJCXsweDc0LCAweGVkLCAweGVkLCAweGVkLCAweDc0LCAweGVkLCAweGVkLCAweGVkLCAweDc0fTsKLQlzdGF0aWMgY29uc3QgX191OCBnYzAzMDVfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggZ2MwMzA1X21hdHJpeFs5XSA9CiAJCXsweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwfTsKLQlzdGF0aWMgY29uc3QgX191OCBvdjc2MjBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggb3Y3NjIwX21hdHJpeFs5XSA9CiAJCXsweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4fTsKLQlzdGF0aWMgY29uc3QgX191OCBwYXMyMDJiX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IHBhczIwMmJfbWF0cml4WzldID0KIAkJezB4NGMsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4NTEsIDB4ZjUsIDB4ZmIsIDB4ZWQsIDB4NWZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IHBvMjAzMF9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBwbzIwMzBfbWF0cml4WzldID0KIAkJezB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjB9OwogCXN0YXRpYyBjb25zdCB1OCB0YXM1MTMwY19tYXRyaXhbOV0gPQogCQl7MHg2OCwgMHhlYywgMHhlYywgMHhlYywgMHg2OCwgMHhlYywgMHhlYywgMHhlYywgMHg2OH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggdmYwMjUwX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IHZmMDI1MF9tYXRyaXhbOV0gPQogCQl7MHg3YiwgMHhlYSwgMHhlYSwgMHhlYSwgMHg3YiwgMHhlYSwgMHhlYSwgMHhlYSwgMHg3Yn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggKm1hdHJpeF90YltTRU5TT1JfTUFYXSA9IHsKKwlzdGF0aWMgY29uc3QgdTggKm1hdHJpeF90YltTRU5TT1JfTUFYXSA9IHsKIAkJYWRjbTI3MDBfbWF0cml4LCAvKiBTRU5TT1JfQURDTTI3MDAgMCAqLwogCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KIAkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KQEAgLTYwMDYsMTEgKzYwMDYsMTIgQEAKIHN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGJyaWdodG5lc3M7CisJdTggYnJpZ2h0bmVzczsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCXJldHVybjsKIAl9CkBAIC02MDM0LDcgKzYwMzUsNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHNoYXJwbmVzczsKLQlzdGF0aWMgY29uc3QgX191OCBzaGFycG5lc3NfdGJbXVsyXSA9IHsKKwlzdGF0aWMgY29uc3QgdTggc2hhcnBuZXNzX3RiW11bMl0gPSB7CiAJCXsweDAyLCAweDAzfSwKIAkJezB4MDQsIDB4MDd9LAogCQl7MHgwOCwgMHgwZn0sCkBAIC02MDUzLDExOCArNjA1NCw2OSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JY29uc3QgX191OCAqVGdhbW1hLCAqVGdyYWRpZW50OwotCWludCBnLCBpLCBrOwotCXN0YXRpYyBjb25zdCBfX3U4IGtnYW1tYV90YlsxNl0gPQkvKiBkZWx0YSBmb3IgY29udHJhc3QgKi8KKwljb25zdCB1OCAqVGdhbW1hOworCWludCBnLCBpLCBrLCBhZGosIGdwOworCXU4IGdyWzE2XTsKKwlzdGF0aWMgY29uc3QgdTggZGVsdGFfdGJbMTZdID0JCS8qIGRlbHRhIGZvciBjb250cmFzdCAqLwogCQl7MHgxNSwgMHgwZCwgMHgwYSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwKIAkJIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDh9OwotCXN0YXRpYyBjb25zdCBfX3U4IGtncmFkX3RiWzE2XSA9Ci0JCXsweDFiLCAweDA2LCAweDAzLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNiwgMHgwNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzFbMTZdID0KKwlzdGF0aWMgY29uc3QgdTggZ2FtbWFfdGJbNl1bMTZdID0gewogCQl7MHgwMCwgMHgwMCwgMHgwMywgMHgwZCwgMHgxYiwgMHgyZSwgMHg0NSwgMHg1ZiwKLQkJIDB4NzksIDB4OTMsIDB4YWIsIDB4YzEsIDB4ZDQsIDB4ZTUsIDB4ZjMsIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF8xWzE2XSA9Ci0JCXsweDAwLCAweDAxLCAweDA1LCAweDBiLCAweDEwLCAweDE1LCAweDE4LCAweDFhLAotCQkgMHgxYSwgMHgxOCwgMHgxNiwgMHgxNCwgMHgxMiwgMHgwZiwgMHgwZCwgMHgwNn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzJbMTZdID0KKwkJIDB4NzksIDB4OTMsIDB4YWIsIDB4YzEsIDB4ZDQsIDB4ZTUsIDB4ZjMsIDB4ZmZ9LAogCQl7MHgwMSwgMHgwYywgMHgxZiwgMHgzYSwgMHg1MywgMHg2ZCwgMHg4NSwgMHg5YywKLQkJIDB4YjAsIDB4YzIsIDB4ZDEsIDB4ZGUsIDB4ZTksIDB4ZjIsIDB4ZjksIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF8yWzE2XSA9Ci0JCXsweDA1LCAweDBmLCAweDE2LCAweDFhLCAweDE5LCAweDE5LCAweDE3LCAweDE1LAotCQkgMHgxMiwgMHgxMCwgMHgwZSwgMHgwYiwgMHgwOSwgMHgwOCwgMHgwNiwgMHgwM307Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzNbMTZdID0KKwkJIDB4YjAsIDB4YzIsIDB4ZDEsIDB4ZGUsIDB4ZTksIDB4ZjIsIDB4ZjksIDB4ZmZ9LAogCQl7MHgwNCwgMHgxNiwgMHgzMCwgMHg0ZSwgMHg2OCwgMHg4MSwgMHg5OCwgMHhhYywKLQkJIDB4YmUsIDB4Y2QsIDB4ZGEsIDB4ZTQsIDB4ZWQsIDB4ZjUsIDB4ZmIsIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF8zWzE2XSA9Ci0JCXsweDBjLCAweDE2LCAweDFiLCAweDFjLCAweDE5LCAweDE4LCAweDE1LCAweDEyLAotCQkgMHgxMCwgMHgwZCwgMHgwYiwgMHgwOSwgMHgwOCwgMHgwNiwgMHgwNSwgMHgwM307Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzRbMTZdID0KKwkJIDB4YmUsIDB4Y2QsIDB4ZGEsIDB4ZTQsIDB4ZWQsIDB4ZjUsIDB4ZmIsIDB4ZmZ9LAogCQl7MHgxMywgMHgzOCwgMHg1OSwgMHg3OSwgMHg5MiwgMHhhNywgMHhiOSwgMHhjOCwKLQkJIDB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF80WzE2XSA9Ci0JCXsweDI2LCAweDIyLCAweDIwLCAweDFjLCAweDE2LCAweDEzLCAweDEwLCAweDBkLAotCQkgMHgwYiwgMHgwOSwgMHgwNywgMHgwNiwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzVbMTZdID0KKwkJIDB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmZ9LAogCQl7MHgyMCwgMHg0YiwgMHg2ZSwgMHg4ZCwgMHhhMywgMHhiNSwgMHhjNSwgMHhkMiwKLQkJIDB4ZGMsIDB4ZTUsIDB4ZWMsIDB4ZjIsIDB4ZjYsIDB4ZmEsIDB4ZmQsIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF81WzE2XSA9Ci0JCXsweDM3LCAweDI2LCAweDIwLCAweDFhLCAweDE0LCAweDEwLCAweDBlLCAweDBiLAotCQkgMHgwOSwgMHgwNywgMHgwNiwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMiwgMHgwMn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzZbMTZdID0JCS8qID8/IHdhcyBnYW1tYSA1ICovCisJCSAweGRjLCAweGU1LCAweGVjLCAweGYyLCAweGY2LCAweGZhLCAweGZkLCAweGZmfSwKIAkJezB4MjQsIDB4NDQsIDB4NjQsIDB4ODQsIDB4OWQsIDB4YjIsIDB4YzQsIDB4ZDMsCi0JCSAweGUwLCAweGViLCAweGY0LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNlsxNl0gPQotCQl7MHgxOCwgMHgyMCwgMHgyMCwgMHgxYywgMHgxNiwgMHgxMywgMHgxMCwgMHgwZSwKLQkJIDB4MGIsIDB4MDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9OwotCXN0YXRpYyBjb25zdCBfX3U4ICpnYW1tYV90YltdID0gewotCQlOVUxMLCBUZ2FtbWFfMSwgVGdhbW1hXzIsCi0JCVRnYW1tYV8zLCBUZ2FtbWFfNCwgVGdhbW1hXzUsIFRnYW1tYV82CisJCSAweGUwLCAweGViLCAweGY0LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfSwKIAl9OwotCXN0YXRpYyBjb25zdCBfX3U4ICpncmFkaWVudF90YltdID0gewotCQlOVUxMLCBUZ3JhZGllbnRfMSwgVGdyYWRpZW50XzIsCi0JCVRncmFkaWVudF8zLCBUZ3JhZGllbnRfNCwgVGdyYWRpZW50XzUsIFRncmFkaWVudF82Ci0JfTsKLSNpZmRlZiBHU1BDQV9ERUJVRwotCV9fdTggdlsxNl07Ci0jZW5kaWYKIAotCVRnYW1tYSA9IGdhbW1hX3RiW3NkLT5nYW1tYV07Ci0JVGdyYWRpZW50ID0gZ3JhZGllbnRfdGJbc2QtPmdhbW1hXTsKKwlUZ2FtbWEgPSBnYW1tYV90YltzZC0+Z2FtbWEgLSAxXTsKIAotCWsgPSAoc2QtPmNvbnRyYXN0IC0gMTI4KQkJLyogLTEyOCAvIDEyOCAqLwotCQkJKiBUZ2FtbWFbMF07Ci0JUERFQlVHKERfQ09ORiwgImdhbW1hOiVkIGNvbnRyYXN0OiVkIGdhbW1hIGNvZWZmOiAlZC8xMjgiLAotCQlzZC0+Z2FtbWEsIHNkLT5jb250cmFzdCwgayk7CisJayA9ICgoaW50KSBzZC0+Y29udHJhc3QgLSAxMjgpOwkJLyogLTEyOCAvIDEyOCAqLworCWFkaiA9IDA7CisJZ3AgPSAwOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWcgPSBUZ2FtbWFbaV0gKyBrZ2FtbWFfdGJbaV0gKiBrIC8gMTI4OworCQlnID0gVGdhbW1hW2ldIC0gZGVsdGFfdGJbaV0gKiBrIC8gMTI4IC0gYWRqIC8gMjsKIAkJaWYgKGcgPiAweGZmKQogCQkJZyA9IDB4ZmY7CiAJCWVsc2UgaWYgKGcgPD0gMCkKIAkJCWcgPSAxOwogCQlyZWdfdyhkZXYsIGcsIDB4MDEyMCArIGkpOwkvKiBnYW1tYSAqLwotI2lmZGVmIEdTUENBX0RFQlVHCi0JCWlmIChnc3BjYV9kZWJ1ZyAmIERfQ09ORikKLQkJCXZbaV0gPSBnOwotI2VuZGlmCi0JfQotCVBERUJVRyhEX0NPTkYsICJ0YjogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdlswXSwgdlsxXSwgdlsyXSwgdlszXSwgdls0XSwgdls1XSwgdls2XSwgdls3XSk7Ci0JUERFQlVHKERfQ09ORiwgIiAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzhdLCB2WzldLCB2WzEwXSwgdlsxMV0sIHZbMTJdLCB2WzEzXSwgdlsxNF0sIHZbMTVdKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlnID0gVGdyYWRpZW50W2ldIC0ga2dyYWRfdGJbaV0gKiBrIC8gMTI4OwotCQlpZiAoZyA+IDB4ZmYpCi0JCQlnID0gMHhmZjsKLQkJZWxzZSBpZiAoZyA8PSAwKSB7Ci0JCQlpZiAoaSAhPSAxNSkKLQkJCQlnID0gMDsKKwkJaWYgKGsgPiAwKQorCQkJYWRqLS07CisJCWVsc2UKKwkJCWFkaisrOworCisJCWlmIChpICE9IDApIHsKKwkJCWlmIChncCA9PSAwKQorCQkJCWdyW2kgLSAxXSA9IDA7CiAJCQllbHNlCi0JCQkJZyA9IDE7CisJCQkJZ3JbaSAtIDFdID0gZyAtIGdwOwogCQl9Ci0JCXJlZ193KGRldiwgZywgMHgwMTMwICsgaSk7CS8qIGdyYWRpZW50ICovCi0jaWZkZWYgR1NQQ0FfREVCVUcKLQkJaWYgKGdzcGNhX2RlYnVnICYgRF9DT05GKQotCQkJdltpXSA9IGc7Ci0jZW5kaWYKKwkJZ3AgPSBnOwogCX0KLQlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbMF0sIHZbMV0sIHZbMl0sIHZbM10sIHZbNF0sIHZbNV0sIHZbNl0sIHZbN10pOwotCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdls4XSwgdls5XSwgdlsxMF0sIHZbMTFdLCB2WzEyXSwgdlsxM10sIHZbMTRdLCB2WzE1XSk7CisJZ3JbMTVdID0gZ3JbMTRdIC8gMjsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJcmVnX3coZGV2LCBncltpXSwgMHgwMTMwICsgaSk7CS8qIGdyYWRpZW50ICovCiB9CiAKIHN0YXRpYyB2b2lkIHNldHF1YWxpdHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JX191OCBmcnh0OworCXU4IGZyeHQ7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCXJldHVybjsKIAl9CkBAIC02MjE4LDkgKzYxNzAsOSBAQAogCQkgaGRjczIwMjBiXzUwSFosIGhkY3MyMDIwYl81MEhaLAogCQkgaGRjczIwMjBiXzYwSFosIGhkY3MyMDIwYl82MEhafSwKIC8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KLQkJe2h2NzEzMWJfTm9GbGlrZXJTY2FsZSwgaHY3MTMxYl9Ob0ZsaWtlciwKLQkJIGh2NzEzMWJfNTBIWlNjYWxlLCBodjcxMzFiXzUwSFosCi0JCSBodjcxMzFiXzYwSFpTY2FsZSwgaHY3MTMxYl82MEhafSwKKwkJe2h2NzEzMWJfTm9GbGlrZXIsIGh2NzEzMWJfTm9GbGlrZXJTY2FsZSwKKwkJIGh2NzEzMWJfNTBIWiwgaHY3MTMxYl81MEhaU2NhbGUsCisJCSBodjcxMzFiXzYwSFosIGh2NzEzMWJfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KIAkJe05VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMLApAQCAtNjIzMCwxNyArNjE4MiwxNyBAQAogCQkgaWNtMTA1YV81MEhaLCBpY20xMDVhXzUwSFpTY2FsZSwKIAkJIGljbTEwNWFfNjBIWiwgaWNtMTA1YV82MEhaU2NhbGV9LAogLyogU0VOU09SX01DNTAxQ0IgOCAqLwotCQl7TUM1MDFDQl9Ob0ZsaWtlciwgTUM1MDFDQl9Ob0ZsaWtlclNjYWxlLAotCQkgTUM1MDFDQl81MEhaLCBNQzUwMUNCXzUwSFpTY2FsZSwKLQkJIE1DNTAxQ0JfNjBIWiwgTUM1MDFDQl82MEhaU2NhbGV9LAorCQl7bWM1MDFjYl9Ob0ZsaWtlciwgbWM1MDFjYl9Ob0ZsaWtlclNjYWxlLAorCQkgbWM1MDFjYl81MEhaLCBtYzUwMWNiXzUwSFpTY2FsZSwKKwkJIG1jNTAxY2JfNjBIWiwgbWM1MDFjYl82MEhaU2NhbGV9LAogLyogU0VOU09SX01JMDM2MFNPQyA5ICovCi0JCXttaTM2MHNvY19BRU5vRmxpa2VyU2NhbGUsIG1pMzYwc29jX0FFTm9GbGlrZXIsCi0JCSBtaTM2MHNvY19BRTUwSFpTY2FsZSwgbWkzNjBzb2NfQUU1MEhaLAotCQkgbWkzNjBzb2NfQUU2MEhaU2NhbGUsIG1pMzYwc29jX0FFNjBIWn0sCisJCXttaTM2MHNvY19BRU5vRmxpa2VyLCBtaTM2MHNvY19BRU5vRmxpa2VyU2NhbGUsCisJCSBtaTM2MHNvY19BRTUwSFosIG1pMzYwc29jX0FFNTBIWlNjYWxlLAorCQkgbWkzNjBzb2NfQUU2MEhaLCBtaTM2MHNvY19BRTYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfT1Y3NjIwIDEwICovCi0JCXtPVjc2MjBfTm9GbGlrZXIsIE9WNzYyMF9Ob0ZsaWtlciwKLQkJIE9WNzYyMF81MEhaLCBPVjc2MjBfNTBIWiwKLQkJIE9WNzYyMF82MEhaLCBPVjc2MjBfNjBIWn0sCisJCXtvdjc2MjBfTm9GbGlrZXIsIG92NzYyMF9Ob0ZsaWtlciwKKwkJIG92NzYyMF81MEhaLCBvdjc2MjBfNTBIWiwKKwkJIG92NzYyMF82MEhaLCBvdjc2MjBfNjBIWn0sCiAvKiBTRU5TT1JfT1Y3NjMwQyAxMSAqLwogCQl7TlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEwsCkBAIC02MjU4LDE3ICs2MjEwLDE3IEBACiAJCSBwYjAzMzBfNTBIWlNjYWxlLCBwYjAzMzBfNTBIWiwKIAkJIHBiMDMzMF82MEhaU2NhbGUsIHBiMDMzMF82MEhafSwKIC8qIFNFTlNPUl9QTzIwMzAgMTUgKi8KLQkJe1BPMjAzMF9Ob0ZsaWtlciwgUE8yMDMwX05vRmxpa2VyLAotCQkgUE8yMDMwXzUwSFosIFBPMjAzMF81MEhaLAotCQkgUE8yMDMwXzYwSFosIFBPMjAzMF82MEhafSwKKwkJe3BvMjAzMF9Ob0ZsaWtlciwgcG8yMDMwX05vRmxpa2VyLAorCQkgcG8yMDMwXzUwSFosIHBvMjAzMF81MEhaLAorCQkgcG8yMDMwXzYwSFosIHBvMjAzMF82MEhafSwKIC8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KLQkJe3RhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwgdGFzNTEzMGN4eF9Ob0ZsaWtlciwKLQkJIHRhczUxMzBjeHhfNTBIWlNjYWxlLCB0YXM1MTMwY3h4XzUwSFosCi0JCSB0YXM1MTMwY3h4XzYwSFpTY2FsZSwgdGFzNTEzMGN4eF82MEhafSwKKwkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKKwkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCisJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE3ICovCi0JCXt0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsIHRhczUxMzBjeHhfTm9GbGlrZXIsCi0JCSB0YXM1MTMwY3h4XzUwSFpTY2FsZSwgdGFzNTEzMGN4eF81MEhaLAotCQkgdGFzNTEzMGN4eF82MEhaU2NhbGUsIHRhczUxMzBjeHhfNjBIWn0sCisJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAorCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCiAJCXt0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXIsIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlLAogCQkgdGFzNTEzMGNfdmYwMjUwXzUwSFosIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGUsCkBAIC02Mjc3LDkgKzYyMjksOSBAQAogCiAJaSA9IHNkLT5saWdodGZyZXEgKiAyOwogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQlpZiAoIW1vZGUpCi0JCWkrKzsJCQkvKiA2NDB4NDgwICovCi0JemMzX2ZyZXEgPSBmcmVxX3RiWyhpbnQpIHNkLT5zZW5zb3JdW2ldOworCWlmIChtb2RlKQorCQlpKys7CQkJLyogMzIweDI0MCAqLworCXpjM19mcmVxID0gZnJlcV90YltzZC0+c2Vuc29yXVtpXTsKIAlpZiAoemMzX2ZyZXEgIT0gTlVMTCkgewogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCB6YzNfZnJlcSk7CiAJCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNjI5Nyw2ICs2MjQ5LDkgQEAKIAkJCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4NDQsIDB4MDAwMik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAwLCAweDAxYTcpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC02MzA1LDcgKzYyNjAsNyBAQAogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGF1dG92YWw7CisJdTggYXV0b3ZhbDsKIAogCWlmIChzZC0+YXV0b2dhaW4pCiAJCWF1dG92YWwgPSAweDQyOwpAQCAtNjMzMyw2ICs2Mjg4LDEyIEBACiAJCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzkpOworCQlyZWdfdyhkZXYsIDB4MGIsIDB4MDAzOCk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNjM0OSw3ICs2MzEwLDcgQEAKIAogc3RhdGljIGludCBzaWZfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCV9fdTE2IGNoZWNrd29yZDsKKwl1MTYgY2hlY2t3b3JkOwogCiAJc3RhcnRfMndyX3Byb2JlKGdzcGNhX2Rldi0+ZGV2LCAweDBmKTsJCS8qIFBBUzEwNiAqLwogCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA4LCAweDAwOGQpOwpAQCAtNjM5Miw2ICs2MzUzLDcgQEAKIAl9CiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA4KTsJCS8qIEhEQ1MyMDIwICovCisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxYywgMHgwMCwgMHgwMCk7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgMHhhYSwgMHgwMCk7CiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CiAJaWYgKHJldHdvcmQgIT0gMCkKQEAgLTY0MjAsOCArNjM4MiwxMCBAQAogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsIDB4YWEsIDB4MDApOwogCW1zbGVlcCg1MCk7CiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7Ci0JaWYgKHJldHdvcmQgIT0gMCkKKwlpZiAocmV0d29yZCAhPSAwKSB7CisJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QQVMyMDJCKTsKIAkJcmV0dXJuIDB4MGU7CQkJLyogUEFTMjAyQkNCICovCisJfQogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwMik7CQkvKiBUQVM1MTMwQyAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4YWEsIDB4MDApOwpAQCAtNjQ1Nyw4ICs2NDIxLDggQEAKIH0KIAogc3RydWN0IHNlbnNvcl9ieV9jaGlwc2V0X3JldmlzaW9uIHsKLQlfX3UxNiByZXZpc2lvbjsKLQlfX3U4IGludGVybmFsX3NlbnNvcl9pZDsKKwl1MTYgcmV2aXNpb247CisJdTggaW50ZXJuYWxfc2Vuc29yX2lkOwogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbXSA9IHsKIAl7MHhjMDAwLCAweDEyfSwJCS8qIFRBUzUxMzBDICovCkBAIC02NDY3LDYgKzY0MzEsNyBAQAogCXsweDgwMDEsIDB4MTN9LAogCXsweDgwMDAsIDB4MTR9LAkJLyogQ1MyMTAySyAqLwogCXsweDg0MDAsIDB4MTV9LAkJLyogVEFTNTEzMEsgKi8KKwl7MHhlNDAwLCAweDE1fSwKIH07CiAKIHN0YXRpYyBpbnQgdmdhXzN3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC02NDc0LDcgKzY0MzksNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IGk7Ci0JX191OCByZXRieXRlOworCXU4IHJldGJ5dGU7CiAJdTE2IHJldHdvcmQ7CiAKIC8qZml4bWU6IGxhY2sgb2YgOGI9YjMgKDExLDEyKS0+IDEwLCA4Yj1lMCAoMTQsMTUsMTYpLT4gMTIgZm91bmQgaW4gZ3NwY2F2MSovCkBAIC02NjIyLDggKzY1ODcsNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAJaW50IHNlbnNvcjsKLQlpbnQgdmdhID0gMTsJCS8qIDE6IHZnYSwgMDogc2lmICovCi0Jc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7CisJc3RhdGljIGNvbnN0IHU4IGdhbW1hW1NFTlNPUl9NQVhdID0gewogCQk0LAkvKiBTRU5TT1JfQURDTTI3MDAgMCAqLwogCQk0LAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KIAkJNSwJLyogU0VOU09SX0NTMjEwMksgMiAqLwpAQCAtNjY0NCw5ICs2NjA4LDMwIEBACiAJCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE3ICovCiAJCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTggKi8KIAl9OworCXN0YXRpYyBjb25zdCB1OCBtb2RlX3RiW1NFTlNPUl9NQVhdID0geworCQkyLAkvKiBTRU5TT1JfQURDTTI3MDAgMCAqLworCQkxLAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KKwkJMSwJLyogU0VOU09SX0NTMjEwMksgMiAqLworCQkxLAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KKwkJMSwJLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCisJCTEsCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KKwkJMSwJLyogU0VOU09SX0hWNzEzMUMgNiAqLworCQkxLAkvKiBTRU5TT1JfSUNNMTA1QSA3ICovCisJCTIsCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KKwkJMSwJLyogU0VOU09SX01JMDM2MFNPQyA5ICovCisJCTIsCS8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KKwkJMSwJLyogU0VOU09SX09WNzYzMEMgMTEgKi8KKwkJMCwJLyogU0VOU09SX1BBUzEwNiAxMiAqLworCQkxLAkvKiBTRU5TT1JfUEFTMjAyQiAxMyAqLworCQkxLAkvKiBTRU5TT1JfUEIwMzMwIDE0ICovCisJCTEsCS8qIFNFTlNPUl9QTzIwMzAgMTUgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDSyAxNiAqLworCQkxLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLworCQkxLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCisJfTsKIAogCS8qIGRlZmluZSBzb21lIHNlbnNvcnMgZnJvbSB0aGUgdmVuZG9yL3Byb2R1Y3QgKi8KLQlzZC0+c2hhcnBuZXNzID0gMjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKIAlpZiAoc2Vuc29yID49IDApCkBAIC02NjcxLDggKzY2NTYsMjEgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDA6Ci0JCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMUIiKTsKLQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxQjsKKwkJCS8qIGNoZWNrIHRoZSBzZW5zb3IgdHlwZSAqLworCQkJc2Vuc29yID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKKwkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGh2NzEzMSB0eXBlICVkIiwgc2Vuc29yKTsKKwkJCXN3aXRjaCAoc2Vuc29yKSB7CisJCQljYXNlIDA6CQkJLyogaHY3MTMxYiAqLworCQkJY2FzZSAxOgkJCS8qIGh2NzEzMWUgKi8KKwkJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMUIiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorLyoJCQljYXNlIDI6CQkJICogaHY3MTMxciAqLworCQkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxUihjKSIpOworCQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxQzsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBUQVM1MTMwQyIpOwpAQCAtNjY5OSwxMiArNjY5NywxMSBAQAogCQljYXNlIDB4MGU6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBBUzIwMkIiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMjAyQjsKLQkJCXNkLT5zaGFycG5lc3MgPSAxOworLyoJCQlzZC0+c2hhcnBuZXNzID0gMTsgKi8KIAkJCWJyZWFrOwogCQljYXNlIDB4MGY6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBBUzEwNiIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QQVMxMDY7Ci0JCQl2Z2EgPSAwOwkJLyogU0lGICovCiAJCQlicmVhazsKIAkJY2FzZSAweDEwOgogCQljYXNlIDB4MTI6CkBAIC02NzcwLDMxICs2NzY3LDM4IEBACiAJaWYgKHNlbnNvciA8IDB4MjApIHsKIAkJaWYgKHNlbnNvciA9PSAtMSB8fCBzZW5zb3IgPT0gMHgxMCB8fCBzZW5zb3IgPT0gMHgxMikKIAkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAyLCAweDAwMTApOwotCQllbHNlCi0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgc2Vuc29yICYgMHgwZiwgMHgwMDEwKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwogCX0KIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIC8qZml4bWU6dGVzdCovCiAJZ3NwY2FfZGV2LT5uYmFsdC0tOwotCWlmICh2Z2EpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCX0gZWxzZSB7CisJc3dpdGNoIChtb2RlX3RiW3NkLT5zZW5zb3JdKSB7CisJY2FzZSAwOgogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQljYW0tPmNhbV9tb2RlID0gYnJva2VuX3ZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYnJva2VuX3ZnYV9tb2RlKTsKKwkJYnJlYWs7CiAJfQotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Z2FtbWEgPSBnYW1tYVsoaW50KSBzZC0+c2Vuc29yXTsKLQlzZC0+YXV0b2dhaW4gPSBzZF9jdHJsc1tTRF9BVVRPR0FJTl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+bGlnaHRmcmVxID0gc2RfY3RybHNbU0RfRlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Z2FtbWEgPSBnYW1tYVtzZC0+c2Vuc29yXTsKKwlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CisJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQlJJR0hUTkVTU19JRFgpOwogCQlicmVhazsKQEAgLTY4MDUsMTQgKzY4MDksMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogc3dpdGNoIHRoZSBsZWQgb2ZmICovCi0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4MDAwMCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwkvKiBzd2l0Y2ggb2ZmIHRoZSBsZWQgKi8KIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMSwgMHgwMDAwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4MjEsMjggKzY4MjQsMjcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfaW5pdDsKIAlpbnQgbW9kZTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmluaXRfdGJbU0VOU09SX01BWF1bMl0gPSB7CiAJCXthZGNtMjcwMF9Jbml0aWFsLCBhZGNtMjcwMF9Jbml0aWFsU2NhbGV9LAkvKiAwICovCi0JCXtjczIxMDJfSW5pdGlhbFNjYWxlLCBjczIxMDJfSW5pdGlhbH0sCQkvKiAxICovCi0JCXtjczIxMDJLX0luaXRpYWxTY2FsZSwgY3MyMTAyS19Jbml0aWFsfSwJLyogMiAqLworCQl7Y3MyMTAyX0luaXRpYWwsIGNzMjEwMl9Jbml0aWFsU2NhbGV9LAkJLyogMSAqLworCQl7Y3MyMTAyS19Jbml0aWFsLCBjczIxMDJLX0luaXRpYWxTY2FsZX0sCS8qIDIgKi8KIAkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwJCS8qIDMgKi8KLQkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiA0ICovCi0JCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDUgKi8KLQkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNiAqLwotCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA3ICovCi0JCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogOCAqLworCQl7aGRjczIwMjBiX0luaXRpYWwsIGhkY3MyMDIwYl9Jbml0aWFsU2NhbGV9LAkvKiA0ICovCisJCXtodjcxMzFiX0luaXRpYWwsIGh2NzEzMWJfSW5pdGlhbFNjYWxlfSwJLyogNSAqLworCQl7aHY3MTMxcl9Jbml0aWFsLCBodjcxMzFyX0luaXRpYWxTY2FsZX0sCS8qIDYgKi8KKwkJe2ljbTEwNWFfSW5pdGlhbCwgaWNtMTA1YV9Jbml0aWFsU2NhbGV9LAkvKiA3ICovCisJCXttYzUwMWNiX0luaXRpYWwsIG1jNTAxY2JfSW5pdGlhbFNjYWxlfSwJLyogOCAqLwogCQl7bWkwMzYwc29jX0luaXRpYWwsIG1pMDM2MHNvY19Jbml0aWFsU2NhbGV9LAkvKiA5ICovCi0JCXtPVjc2MjBfbW9kZTAsIE9WNzYyMF9tb2RlMX0sCQkJLyogMTAgKi8KLQkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiAxMSAqLwotCQl7cGFzMTA2Yl9Jbml0aWFsU2NhbGUsIHBhczEwNmJfSW5pdGlhbH0sCS8qIDEyICovCisJCXtvdjc2MjBfSW5pdGlhbCwgb3Y3NjIwX0luaXRpYWxTY2FsZX0sCQkvKiAxMCAqLworCQl7b3Y3NjMwY19Jbml0aWFsLCBvdjc2MzBjX0luaXRpYWxTY2FsZX0sCS8qIDExICovCisJCXtwYXMxMDZiX0luaXRpYWwsIHBhczEwNmJfSW5pdGlhbFNjYWxlfSwJLyogMTIgKi8KIAkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMyAqLwogCQl7cGIwMzMwX0luaXRpYWwsIHBiMDMzMF9Jbml0aWFsU2NhbGV9LAkJLyogMTQgKi8KLQkJe1BPMjAzMF9tb2RlMCwgUE8yMDMwX21vZGUxfSwJCQkvKiAxNSAqLwotCQl7dGFzNTEzMENLX0luaXRpYWxTY2FsZSwgdGFzNTEzMENLX0luaXRpYWx9LAkvKiAxNiAqLworCQl7cG8yMDMwX0luaXRpYWwsIHBvMjAzMF9Jbml0aWFsU2NhbGV9LAkJLyogMTUgKi8KKwkJe3RhczUxMzBjS19Jbml0aWFsLCB0YXM1MTMwY0tfSW5pdGlhbFNjYWxlfSwJLyogMTYgKi8KIAkJe3RhczUxMzBjeHhfSW5pdGlhbCwgdGFzNTEzMGN4eF9Jbml0aWFsU2NhbGV9LAkvKiAxNyAqLwotCQl7dGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZSwgdGFzNTEzMGNfdmYwMjUwX0luaXRpYWx9LAorCQl7dGFzNTEzMGNfdmYwMjUwX0luaXRpYWwsIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGV9LAogCQkJCQkJCQkvKiAxOCAqLwogCX07CiAKQEAgLTY4NTQsOCArNjg1Niw3IEBACiAJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCiAJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKIAotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQl6YzNfaW5pdCA9IGluaXRfdGJbKGludCkgc2QtPnNlbnNvcl1bbW9kZV07CisJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0hWNzEzMUM6CiAJCXpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKQEAgLTY4NjQsNyArNjg2NSw3IEBACiAJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBhczEwNmJfSW5pdGlhbF9jb20pOwogCQlicmVhazsKIAl9Ci0JdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgemMzX2luaXQpOworCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXRfdGJbc2QtPnNlbnNvcl1bbW9kZV0pOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CkBAIC02ODgzLDYgKzY4ODQsMTEgQEAKIAkJcmVnX3coZGV2LCAweDAyLCAweDAwM2IpOwogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAzOCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCXJlZ193KGRldiwgMHgwMywgMHgwMDNiKTsKKwkJcmVnX3coZGV2LCAweDBjLCAweDAwM2EpOworCQlyZWdfdyhkZXYsIDB4MGIsIDB4MDAzOSk7CisJCWJyZWFrOwogCX0KIAogCXNldG1hdHJpeChnc3BjYV9kZXYpOwpAQCAtNjk2MSwxMyArNjk2NywxMyBAQAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJbXNsZWVwKDUwKTsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwotCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwNyk7Ci0JCS8qZmFsbCB0aHJ1Ki8KLQljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCiAJCXJlZ193KGRldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhkZXYsIDB4MzIsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ193KGRldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03MTY1LDYgKzcxNzEsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWlmIChsZW4gPT0gOCAmJiBkYXRhWzRdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKQEAgLTcxNzcsNiArNzE5OSw5IEBACiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCmluZGV4IDUxZjM5M2QuLjJmYzk4NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCkBAIC0zOSwxMiArMzksMTIgQEAKIG1vZHVsZV9wYXJhbShoZHB2cl9kZWJ1ZywgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhoZHB2cl9kZWJ1ZywgImVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7CiAKLXVpbnQgZGVmYXVsdF92aWRlb19pbnB1dCA9IEhEUFZSX1ZJREVPX0lOUFVUUzsKK3N0YXRpYyB1aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7CiBtb2R1bGVfcGFyYW0oZGVmYXVsdF92aWRlb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF92aWRlb19pbnB1dCwgImRlZmF1bHQgdmlkZW8gaW5wdXQ6IDA9Q29tcG9uZW50IC8gIgogCQkgIjE9Uy1WaWRlbyAvIDI9Q29tcG9zaXRlIik7CiAKLXVpbnQgZGVmYXVsdF9hdWRpb19pbnB1dCA9IEhEUFZSX0FVRElPX0lOUFVUUzsKK3N0YXRpYyB1aW50IGRlZmF1bHRfYXVkaW9faW5wdXQgPSBIRFBWUl9BVURJT19JTlBVVFM7CiBtb2R1bGVfcGFyYW0oZGVmYXVsdF9hdWRpb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9hdWRpb19pbnB1dCwgImRlZmF1bHQgYXVkaW8gaW5wdXQ6IDA9UkNBIGJhY2sgLyAiCiAJCSAiMT1SQ0EgZnJvbnQgLyAyPVMvUERJRiIpOwpAQCAtNTksNiArNTksNyBAQAogCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQxKSB9LAogCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDIpIH0sCisJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMykgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGhkcHZyX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwppbmRleCBmZGQ3ODIwLi4xOTZmODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0zMDIsNyArMzAyLDggQEAKIC8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLwogc3RhdGljIGludCBoZHB2cl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCiB7Ci0JdWludCBhY3R1YWxfbGVuZ3RoLCBjID0gMDsKKwlpbnQgYWN0dWFsX2xlbmd0aDsKKwl1aW50IGMgPSAwOwogCXU4ICpidWY7CiAKIAlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpCkBAIC01NzIsNyArNTczLDcgQEAKIAlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiaGRwdnIiKTsKLQlzdHJjcHkoY2FwLT5jYXJkLCAiSGF1cGF1Z2UgSEQgUFZSIik7CisJc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBwYXVnZSBIRCBQVlIiKTsKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAljYXAtPnZlcnNpb24gPSBIRFBWUl9WRVJTSU9OOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IDFlZGQ4NzUuLjQ5YWUyNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQJMHg0OTAwCiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMQkweDQ5MDEKICNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQyCTB4NDkwMgorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDMJMHg0OTgyCiAKICNkZWZpbmUgVU5TRVQgICAgKC0xVSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwppbmRleCA2MGQ5OTJlLi5lNjIwYTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwpAQCAtMzUyLDkgKzM1MiwxMyBAQAogc3RhdGljIGludCBoZXhpdW1fYXR0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8pCiB7CiAJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKwlpbnQgcmV0OwogCiAJREVCX0VFKCgiLlxuIikpOwogCisJcmV0ID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAloZXhpdW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGV4aXVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gaGV4aXVtKSB7CiAJCXByaW50aygiaGV4aXVtX2dlbWluaTogbm90IGVub3VnaCBrZXJuZWwgbWVtb3J5IGluIGhleGl1bV9hdHRhY2goKS5cbiIpOwpAQCAtNDAwLDkgKzQwNCwxMCBAQAogCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CiAJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKIAl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OwotCWlmICgwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIGdlbWluaSIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CisJcmV0ID0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gZ2VtaW5pIiwgVkZMX1RZUEVfR1JBQkJFUik7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXByaW50aygiaGV4aXVtX2dlbWluaTogZm91bmQgJ2hleGl1bSBnZW1pbmknIGZyYW1lIGdyYWJiZXItJWQuXG4iLCBoZXhpdW1fbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCmluZGV4IDkzOGExZjguLmZlNTk2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwpAQCAtMjE2LDYgKzIxNiwxMCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwllcnIgPSBzYWE3MTQ2X3Z2X2RldmluaXQoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJaGV4aXVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhleGl1bSksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGhleGl1bSkgewogCQlwcmludGsoImhleGl1bV9vcmlvbjogaGV4aXVtX3Byb2JlOiBub3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggYjg2ZTM1MzguLmRhMThkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQlpbnQgaXJfdHlwZSA9IDA7CisJdTY0IGlyX3R5cGUgPSAwOwogCXN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0zMzEsNiArMzMxLDcgQEAKIAkJaXJfY29kZXMgICAgPSAmaXJfY29kZXNfcHY5NTFfdGFibGU7CiAJCWJyZWFrOwogCWNhc2UgMHgxODoKKwljYXNlIDB4MWY6CiAJY2FzZSAweDFhOgogCQluYW1lICAgICAgICA9ICJIYXVwcGF1Z2UiOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfaGF1cDsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyAgICAgICA9IGlyLT5waHlzOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpci0+aXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXItPmlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggNzlkMGZlNC4uY2ExZmQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC0xMjEwLDYgKzEyMTAsNTMgQEAKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNvbnkgS2lreW91ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2tpa3lvdVtdID0geworCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX1NPTlksIDB4ODEzZCB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZCBpdnR2X2NhcmRfa2lreW91ID0geworCS50eXBlID0gSVZUVl9DQVJEX0tJS1lPVSwKKwkubmFtZSA9ICJTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAorCS5od192aWRlbyA9IElWVFZfSFdfU0FBNzExNSwKKwkuaHdfYXVkaW8gPSBJVlRWX0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0dQSU8sCisJLmh3X2FsbCA9IElWVFZfSFdfR1BJTyB8IElWVFZfSFdfU0FBNzExNSB8IElWVFZfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBJVlRWX1NBQTcxWFhfQ09NUE9TSVRFMSB9LAorCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIElWVFZfU0FBNzFYWF9DT01QT1NJVEUxIH0sCisJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgSVZUVl9TQUE3MVhYX1NWSURFTzEgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBJVlRWX0dQSU9fVFVORVIgfSwKKwkgICAgIHsgSVZUVl9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgIElWVFZfR1BJT19MSU5FX0lOIH0sCisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgICBJVlRWX0dQSU9fTElORV9JTiB9LAorCX0sCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4MDNlMSwgLmluaXRpYWxfdmFsdWUgPSAweDAzMjAgfSwKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4MDA2MCwKKwkJCSAgICAgIC50dW5lciAgPSAweDAwMjAsCisJCQkgICAgICAubGluZWluID0gMHgwMDAwLAorCQkJICAgICAgLnJhZGlvICA9IDB4MDA2MCB9LAorCS5ncGlvX2F1ZGlvX211dGUgID0geyAubWFzayA9IDB4MDAwMCwKKwkJCSAgICAgIC5tdXRlID0gMHgwMDAwIH0sIC8qIDB4MjAwPyBEaXNhYmxlIGZvciBub3cuICovCisJLmdwaW9fYXVkaW9fbW9kZSAgPSB7IC5tYXNrICAgPSAweDAwODAsCisJCQkgICAgICAubW9ubyAgID0gMHgwMDAwLAorCQkJICAgICAgLnN0ZXJlbyA9IDB4MDAwMCwgLyogU0FQICovCisJCQkgICAgICAubGFuZzEgID0gMHgwMDgwLAorCQkJICAgICAgLmxhbmcyICA9IDB4MDAwMCwKKwkJCSAgICAgIC5ib3RoICAgPSAweDAwODAgfSwKKwkudHVuZXJzID0geworCSAgICAgeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9TT05ZX0JURl9QWE4wMVogfSwKKwl9LAorCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2tpa3lvdSwKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgKml2dHZfY2FyZF9saXN0W10gPSB7CiAJJml2dHZfY2FyZF9wdnIyNTAsCiAJJml2dHZfY2FyZF9wdnIzNTAsCkBAIC0xMjM4LDYgKzEyODUsNyBAQAogCSZpdnR2X2NhcmRfYXZlcl9tMTA0LAogCSZpdnR2X2NhcmRfYnVmZmFsbywKIAkmaXZ0dl9jYXJkX2F2ZXJfdWx0cmExNTAwbWNlLAorCSZpdnR2X2NhcmRfa2lreW91LAogCiAJLyogVmFyaWF0aW9ucyBvZiBzdGFuZGFyZCBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLgogCSAgIFRoZXNlIGNhcmRzIG11c3QgY29tZSBsYXN0IGluIHRoaXMgbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCmluZGV4IDYxNDg4MjcuLjc4ZWNhOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKQEAgLTUxLDcgKzUxLDggQEAKICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfTTEwNCAgICAgICAgICAyNCAvKiBBdmVyTWVkaWEgTTEwNCBtaW5pUENJIGNhcmQgKi8KICNkZWZpbmUgSVZUVl9DQVJEX0JVRkZBTE9fTVY1TCAgICAgICAyNSAvKiBCdWZmYWxvIFBDLU1WNUwvUENJIGNhcmQgKi8KICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfVUxUUkExNTAwTUNFICAyNiAvKiBBVmVyTWVkaWEgVWx0cmFUViAxNTAwIE1DRSAqLwotI2RlZmluZSBJVlRWX0NBUkRfTEFTVCAJCSAgICAgMjYKKyNkZWZpbmUgSVZUVl9DQVJEX0tJS1lPVSAgICAgICAgICAgICAyNyAvKiBTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpICovCisjZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNwogCiAvKiBWYXJpYW50cyBvZiBleGlzdGluZyBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLiBUaGUgZHJpdmVyCiAgICBkZXRlY3RzIHRoZXNlIGJhc2VkIG9uIG90aGVyIGRldmljZSBpbmZvcm1hdGlvbi4KQEAgLTg2LDYgKzg3LDcgQEAKICNkZWZpbmUgSVZUVl9QQ0lfSURfTUVMQ08gCQkweDExNTQKICNkZWZpbmUgSVZUVl9QQ0lfSURfR09UVklFVzEJCTB4ZmZhYwogI2RlZmluZSBJVlRWX1BDSV9JRF9HT1RWSUVXMiAJCTB4ZmZhZAorI2RlZmluZSBJVlRWX1BDSV9JRF9TT05ZIAkJMHgxMDRkCiAKIC8qIGhhcmR3YXJlIGZsYWdzLCBubyBnYXBzIGFsbG93ZWQgKi8KICNkZWZpbmUgSVZUVl9IV19DWDI1ODQwCQkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggMzQ3YzMzNC4uOWEyNTA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTE5Myw2ICsxOTMsNyBAQAogCQkgIlx0XHRcdDI1ID0gQXZlck1lZGlhIE0xMDQgKG5vdCB5ZXQgd29ya2luZylcbiIKIAkJICJcdFx0XHQyNiA9IEJ1ZmZhbG8gUEMtTVY1TC9QQ0lcbiIKIAkJICJcdFx0XHQyNyA9IEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFXG4iCisJCSAiXHRcdFx0MjggPSBTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpXG4iCiAJCSAiXHRcdFx0IDAgPSBBdXRvZGV0ZWN0IChkZWZhdWx0KVxuIgogCQkgIlx0XHRcdC0xID0gSWdub3JlIHRoaXMgY2FyZFxuXHRcdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwYWwsICJTZXQgUEFMIHN0YW5kYXJkOiBCR0gsIERLLCBJLCBNLCBOLCBOYywgNjAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IGMxYjdlYzQuLmE3MWU4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJCUlWVFZfRVJSKCJpdnR2X2luaXRfbXBlZ19kZWNvZGVyIGZhaWxlZCB0byBzdGFydCBwbGF5YmFja1xuIik7CiAJCXJldHVybjsKIAl9Ci0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAyLCBkYXRhKTsKIAltZW1fb2Zmc2V0ID0gaXR2LT5kZWNfbWVtICsgZGF0YVsxXTsKIAogCWlmICgocmVhZGJ5dGVzID0gbG9hZF9md19kaXJlY3QoSVZUVl9ERUNPREVfSU5JVF9NUEVHX0ZJTEVOQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwppbmRleCBjZDlkYjBiLi4xMmQzNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgMiwgZGF0YSk7CiAJSVZUVl9ERUJVR19ISV9JUlEoIkVOQyBETUEgQ09NUExFVEUgJXggJWQgKCVkKVxuIiwgZGF0YVswXSwgZGF0YVsxXSwgaXR2LT5jdXJfZG1hX3N0cmVhbSk7CiAKIAlkZWxfdGltZXIoJml0di0+ZG1hX3RpbWVyKTsKQEAgLTYzOCw3ICs2MzgsNyBAQAogCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV07CiAKIAlkZWxfdGltZXIoJml0di0+ZG1hX3RpbWVyKTsKLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgMiwgZGF0YSk7CiAJSVZUVl9ERUJVR19XQVJOKCJETUEgRVJST1IgJTA4eCAlMDh4ICUwOHggJWRcbiIsIGRhdGFbMF0sIGRhdGFbMV0sCiAJCQkJcmVhZF9yZWcoSVZUVl9SRUdfRE1BU1RBVFVTKSwgaXR2LT5jdXJfZG1hX3N0cmVhbSk7CiAJd3JpdGVfcmVnKHJlYWRfcmVnKElWVFZfUkVHX0RNQVNUQVRVUykgJiAzLCBJVlRWX1JFR19ETUFTVEFUVVMpOwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJc3RydWN0IGl2dHZfc3RyZWFtICpzOwogCiAJLyogR2V0IERNQSBkZXN0aW5hdGlvbiBhbmQgc2l6ZSBhcmd1bWVudHMgZnJvbSBjYXJkICovCi0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BLCA3LCBkYXRhKTsKIAlJVlRWX0RFQlVHX0hJX0lSUSgiRU5DIFNUQVJUIENBUCAlZDogJTA4eCAlMDh4XG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTsKIAogCWlmIChkYXRhWzBdID4gMiB8fCBkYXRhWzFdID09IDAgfHwgZGF0YVsyXSA9PSAwKSB7CkBAIC03MTMsOSArNzEzLDkgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKIAkvKiBZVVYgb3IgTVBHICovCi0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOwogCiAJaWYgKHRlc3RfYml0KElWVFZfRl9JX0RFQ19ZVVYsICZpdHYtPmlfZmxhZ3MpKSB7CisJCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAyLCBkYXRhKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9CiAJCQkJIDEwODAgKiAoKGl0di0+eXV2X2luZm8udjRsMl9zcmNfaCArIDMxKSAmIH4zMSk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX29mZnNldCA9IGRhdGFbMV07CkBAIC03MjQsNiArNzI0LDcgQEAKIAkJcyA9ICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWXTsKIAl9CiAJZWxzZSB7CisJCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAzLCBkYXRhKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9IG1pbl90KHUzMiwgZGF0YVsyXSwgMHgxMDAwMCk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX29mZnNldCA9IGRhdGFbMV07CiAJCXMgPSAmaXR2LT5zdHJlYW1zW0lWVFZfREVDX1NUUkVBTV9UWVBFX01QR107CkBAIC05NDAsOSArOTQxLDEwIEBACiAJCQkJaXZ0dl9kbWFfZW5jX3N0YXJ0KHMpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGkgPT0gSVZUVl9NQVhfU1RSRUFNUyAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKSkgeworCisJCWlmIChpID09IElWVFZfTUFYX1NUUkVBTVMgJiYKKwkJICAgIHRlc3RfYml0KElWVFZfRl9JX1VETUFfUEVORElORywgJml0di0+aV9mbGFncykpCiAJCQlpdnR2X3VkbWFfc3RhcnQoaXR2KTsKLQkJfQogCX0KIAogCWlmICgoY29tYm8gJiBJVlRWX0lSUV9ETUEpICYmICF0ZXN0X2JpdChJVlRWX0ZfSV9QSU8sICZpdHYtPmlfZmxhZ3MpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKaW5kZXggMWI1YzBhYy4uODQ1NzdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYwpAQCAtMzY5LDEwICszNjksMTEgQEAKIH0KIAogLyogVGhpcyBvbmUgaXMgZm9yIHN0dWZmIHRoYXQgY2FuJ3Qgc2xlZXAuLiBpcnEgaGFuZGxlcnMsIGV0Yy4uICovCi12b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJkYXRhLCBpbnQgbWIsIHUzMiBkYXRhW10pCit2b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJkYXRhLCBpbnQgbWIsCisJCSAgICAgICBpbnQgYXJnYywgdTMyIGRhdGFbXSkKIHsKKwl2b2xhdGlsZSB1MzIgX19pb21lbSAqcCA9IG1iZGF0YS0+bWJveFttYl0uZGF0YTsKIAlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBDWDIzNDFYX01CT1hfTUFYX0RBVEE7IGkrKykKLQkJZGF0YVtpXSA9IHJlYWRsKCZtYmRhdGEtPm1ib3hbbWJdLmRhdGFbaV0pOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyssIHArKykKKwkJZGF0YVtpXSA9IHJlYWRsKHApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCmluZGV4IDZlZjEyMDkuLjgyNDc2NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKQEAgLTI0LDcgKzI0LDggQEAKICNkZWZpbmUgSVZUVl9NQk9YX0RNQV9FTkQgICAgICAgICA4CiAjZGVmaW5lIElWVFZfTUJPWF9ETUEgICAgICAgICAgICAgOQogCi12b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJveCwgaW50IG1iLCB1MzIgZGF0YVtdKTsKK3ZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwKKwkJICAgICAgIGludCBhcmdjLCB1MzIgZGF0YVtdKTsKIGludCBpdnR2X2FwaShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgY21kLCBpbnQgYXJncywgdTMyIGRhdGFbXSk7CiBpbnQgaXZ0dl92YXBpX3Jlc3VsdChzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdLCBpbnQgY21kLCBpbnQgYXJncywgLi4uKTsKIGludCBpdnR2X3ZhcGkoc3RydWN0IGl2dHYgKml0diwgaW50IGNtZCwgaW50IGFyZ3MsIC4uLik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggZTEyYzYwMi4uMWY5Mzg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtNTc3LDEwICs1NzcsMTQgQEAKIAkJY2xlYXJfYml0KElWVFZfRl9JX0VPUywgJml0di0+aV9mbGFncyk7CiAKIAkJLyogSW5pdGlhbGl6ZSBEaWdpdGl6ZXIgZm9yIENhcHR1cmUgKi8KKwkJLyogQXZvaWQgdGlubnkgYXVkaW8gcHJvYmxlbSAtIGVuc3VyZSBhdWRpbyBjbG9ja3MgYXJlIGdvaW5nICovCisJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF9hdWRpbywgYXVkaW8sIHNfc3RyZWFtLCAxKTsKKwkJLyogQXZvaWQgdW5wcmVkaWN0YWJsZSBQQ0kgYnVzIGhhbmcgLSBkaXNhYmxlIHZpZGVvIGNsb2NrcyAqLwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMCk7Ci0JCWl2dHZfbXNsZWVwX3RpbWVvdXQoMzAwLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgxNTAsIDEpOwogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0VOQ19JTklUSUFMSVpFX0lOUFVULCAwKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDE1MCwgMSk7CiAJfQogCiAJLyogYmVnaW5fY2FwdHVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCmluZGV4IGQwN2FkNmMuLjFkYWYxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCXdyaXRlX3JlZ19zeW5jKHJlYWRfcmVnKElWVFZfUkVHX0RNQVhGRVIpIHwgMHgwMSwgSVZUVl9SRUdfRE1BWEZFUik7CiAJc2V0X2JpdChJVlRWX0ZfSV9ETUEsICZpdHYtPmlfZmxhZ3MpOwogCXNldF9iaXQoSVZUVl9GX0lfVURNQSwgJml0di0+aV9mbGFncyk7CisJY2xlYXJfYml0KElWVFZfRl9JX1VETUFfUEVORElORywgJml0di0+aV9mbGFncyk7CiB9CiAKIHZvaWQgaXZ0dl91ZG1hX3ByZXBhcmUoc3RydWN0IGl2dHYgKml0dikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKaW5kZXggOTFkZjdlYy4uMWEzNGQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKQEAgLTI1NywxOSArMjU3LDE4IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDl2MDIyX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKLQl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZzsKLQotCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKLQkJd2lkdGhfZmxhZyA9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCkgJgotCQkJU09DQU1fREFUQVdJRFRIX01BU0s7Ci0JZWxzZQotCQl3aWR0aF9mbGFnID0gU09DQU1fREFUQVdJRFRIXzEwOwotCi0JcmV0dXJuIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAorCXVuc2lnbmVkIGludCBmbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8Ci0JCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8Ci0JCXdpZHRoX2ZsYWc7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzIHw9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCkgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKwllbHNlCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKworCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtdDl2MDIyX3NfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggYzFmYzZkYy4uOWYwMWYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0xNjksNyArMTY5LDExIEBACiBzdGF0aWMgaW50IG14Yl9wcm9iZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXhiICpteGIgPSBOVUxMOworCWludCBlcnI7CiAKKwllcnIgPSBzYWE3MTQ2X3Z2X2RldmluaXQoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCW14YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXhiID09IE5VTEwpIHsKIAkJREVCX0QoKCJub3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkuXG4iKSk7CkBAIC0yOTQsNyArMjk4LDcgQEAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7CiAJc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsIFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJU0FBNzExMV9GTVRfQ0NJUiB8IFNBQTcxMTFfVkJJX0JZUEFTUywgMCk7CisJCVNBQTcxMTFfRk1UX0NDSVIsIDApOwogCiAJLyogc2VsZWN0IGEgdHVuZXIgdHlwZSAqLwogCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKQEAgLTUxOCw4ICs1MjIsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCi0JaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBpLCAwLCAwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEgIzEuXG4iKTsKKwlpZiAoc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsIGksIFNBQTcxMTFfRk1UX0NDSVIsIDApKQorCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYS5cbiIpOwogCiAJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoMCA9PSBteGItPmN1cl9tdXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKaW5kZXggM2E0NWU5NC4uN2Y4ZWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCkBAIC01NDcsNyArNTQ3LDYgQEAKIAl9LAogfTsKIAotCiAvKgogICogZ2VuZXJhbCBmdW5jdGlvbgogICovCkBAIC02MzQsNyArNjMzLDEyIEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX01BU1RFUiB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgcHJpdi0+aW5mby0+YnVzd2lkdGg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR184QklUKQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfODsKKwllbHNlCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xMDsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KQEAgLTEwNDAsMTUgKzEwNDQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qCi0JICogb3Y3NzJ4IG9ubHkgdXNlIDggb3IgMTAgYml0IGJ1cyB3aWR0aAotCSAqLwotCWlmIChTT0NBTV9EQVRBV0lEVEhfMTAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGggJiYKLQkgICAgU09DQU1fREFUQVdJRFRIXzggICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnVzIHdpZHRoIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKIAkgKi8KIAlwaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBQSUQpOwpAQCAtMTEzMCw3ICsxMTI1LDYgQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCiB7CiAJc3RydWN0IG92NzcyeF9wcml2ICAgICAgICAqcHJpdjsKLQlzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvICppbmZvOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAgICAqaWNsOwpAQCAtMTE0NSw4ICsxMTM5LDYgQEAKIAlpZiAoIWljbCB8fCAhaWNsLT5wcml2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8gPSBpY2wtPnByaXY7Ci0KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAogCQkJIkkyQy1BZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCAiCkBAIC0xMTU4LDcgKzExNTAsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5pbmZvID0gaW5mbzsKKwlwcml2LT5pbmZvID0gaWNsLT5wcml2OwogCiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgY2xpZW50LCAmb3Y3NzJ4X3N1YmRldl9vcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IGRlNTQ4NWYuLmNiNDA1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCkBAIC0yMzMsOCArMjMzLDkgQEAKIAlpbnQgc3RhdGVfZW5jb2Rlcl93YWl0b2s7ICAgICAvKiBFbmNvZGVyIHByZS13YWl0IGRvbmUgKi8KIAlpbnQgc3RhdGVfZW5jb2Rlcl9ydW5vazsgICAgICAvKiBFbmNvZGVyIGhhcyBydW4gZm9yID49IC4yNSBzZWMgKi8KIAlpbnQgc3RhdGVfZGVjb2Rlcl9ydW47ICAgICAgICAvKiBEZWNvZGVyIGlzIHJ1bm5pbmcgKi8KKwlpbnQgc3RhdGVfZGVjb2Rlcl9yZWFkeTsgICAgICAvKiBEZWNvZGVyIGlzIHN0YWJpbGl6ZWQgJiBzdHJlYW1hYmxlICovCiAJaW50IHN0YXRlX3VzYnN0cmVhbV9ydW47ICAgICAgLyogRlgyIGlzIHN0cmVhbWluZyAqLwotCWludCBzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudDsgIC8qIERlY29kZXIgaWRsZSBmb3IgPiA1MG1zZWMgKi8KKwlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7ICAvKiBEZWNvZGVyIGlkbGUgZm9yIG1pbmltYWwgaW50ZXJ2YWwgKi8KIAlpbnQgc3RhdGVfcGlwZWxpbmVfY29uZmlnOyAgICAvKiBQaXBlbGluZSBpcyBjb25maWd1cmVkICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX3JlcTsgICAgICAgLyogU29tZWJvZHkgd2FudHMgdG8gc3RyZWFtICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX3BhdXNlOyAgICAgLyogUGlwZWxpbmUgbXVzdCBiZSBwYXVzZWQgKi8KQEAgLTI1NSw5ICsyNTYsMTYgQEAKIAl2b2lkICgqc3RhdGVfZnVuYykodm9pZCAqKTsKIAl2b2lkICpzdGF0ZV9kYXRhOwogCi0JLyogVGltZXIgZm9yIG1lYXN1cmluZyBkZWNvZGVyIHNldHRsaW5nIHRpbWUgKi8KKwkvKiBUaW1lciBmb3IgbWVhc3VyaW5nIHJlcXVpcmVkIGRlY29kZXIgc2V0dGxpbmcgdGltZSBiZWZvcmUgd2UncmUKKwkgICBhbGxvd2VkIHRvIGZpcmUgaXQgdXAgYWdhaW4uICovCiAJc3RydWN0IHRpbWVyX2xpc3QgcXVpZXNjZW50X3RpbWVyOwogCisJLyogVGltZXIgZm9yIG1lYXN1cmluZyBkZWNvZGVyIHN0YWJpbGl6YXRpb24gdGltZSwgd2hpY2ggaXMgdGhlCisJICAgYW1vdW50IG9mIHRpbWUgd2UgbmVlZCB0byBsZXQgdGhlIGRlY29kZXIgcnVuIGJlZm9yZSB3ZSBjYW4KKwkgICB0cnVzdCBpdHMgb3V0cHV0IChvdGhlcndpc2UgdGhlIGVuY29kZXIgbWlnaHQgc2VlIGdhcmJhZ2UgYW5kCisJICAgdGhlbiBmYWlsIHRvIHN0YXJ0IGNvcnJlY3RseSkuICovCisJc3RydWN0IHRpbWVyX2xpc3QgZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyOworCiAJLyogVGltZXIgZm9yIG1lYXN1cmluZyBlbmNvZGVyIHByZS13YWl0IHRpbWUgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBlbmNvZGVyX3dhaXRfdGltZXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggMWJiZGFiMC4uNzEyYjMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTQ4LDExICs0OCwxMyBAQAogICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIHN0YXJ0IGl0IHJ1bm5pbmcuICovCiAjZGVmaW5lIFRJTUVfTVNFQ19ERUNPREVSX1dBSVQgNTAKIAorLyogVGhpcyBkZWZpbmVzIGEgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBkZWNvZGVyIG11c3QgYmUgYWxsb3dlZCB0byBydW4KKyAgIGJlZm9yZSB3ZSBjYW4gc2FmZWx5IGJlZ2luIHVzaW5nIGl0cyBzdHJlYW1pbmcgb3V0cHV0LiAqLworI2RlZmluZSBUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQgMzAwCisKIC8qIFRoaXMgZGVmaW5lcyBhIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZW5jb2RlciBtdXN0IHJlbWFpbiBxdWlldAotICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBpdC4gIEkgaGFkIHRoaXMgb3JpZ2luYWxseSBzZXQgdG8KLSAgIDUwbXNlYywgYnV0IE1hcnRpbiBEYXVza2FyZHQgPG1hcnRpbi5kYXVza2FyZHRAZ214LmRlPiByZXBvcnRzIHRoYXQKLSAgIHRoaW5ncyB3b3JrIGJldHRlciB3aGVuIGl0J3Mgc2V0IHRvIDEwMG1zZWMuICovCi0jZGVmaW5lIFRJTUVfTVNFQ19FTkNPREVSX1dBSVQgMTAwCisgICBiZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIGl0LiAqLworI2RlZmluZSBUSU1FX01TRUNfRU5DT0RFUl9XQUlUIDUwCiAKIC8qIFRoaXMgZGVmaW5lcyB0aGUgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBlbmNvZGVyIG11c3Qgc3VjY2Vzc2Z1bGx5IHJ1bgogICAgYmVmb3JlIHdlIGNvbnNpZGVyIHRoYXQgdGhlIGVuY29kZXIgaGFzIHJ1biBhdCBsZWFzdCBvbmNlIHNpbmNlIGl0cwpAQCAtMzM0LDYgKzMzNiw3IEBACiBzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9maW5kX3N0ZGVudW0oc3RydWN0IHB2cjJfaGR3ICpoZHcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfc2V0X3N0ZF9hdmFpbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19xdWllc2NlbnRfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19lbmNvZGVyX3J1bl90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBwdnIyX2lzc3VlX3NpbXBsZV9jbWQoc3RydWN0IHB2cjJfaGR3ICosdTMyKTsKQEAgLTE3MDUsNiArMTcwOCw3IEBACiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc3RyZWFtPSVzIiwKIAkJICAgKGVuYWJsZWZsID8gIm9uIiA6ICJvZmYiKSk7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgZW5hYmxlZmwpOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBhdWRpbywgc19zdHJlYW0sIGVuYWJsZWZsKTsKIAlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCkgewogCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgZW5jb2RlciBoYXMgYmVlbiBub3RpY2VkLiAgT3RoZXJ3aXNlCiAJCSAgIHdlJ2xsIGlzc3VlIGEgd2FybmluZyB0byB0aGUgdXNlciAod2hpY2ggc2hvdWxkCkBAIC0yNDYxLDYgKzI0NjUsMTEgQEAKIAloZHctPnF1aWVzY2VudF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OwogCWhkdy0+cXVpZXNjZW50X3RpbWVyLmZ1bmN0aW9uID0gcHZyMl9oZHdfcXVpZXNjZW50X3RpbWVvdXQ7CiAKKwlpbml0X3RpbWVyKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CisJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKKwloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5mdW5jdGlvbiA9CisJCXB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0OworCiAJaW5pdF90aW1lcigmaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIpOwogCWhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7CiAJaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIuZnVuY3Rpb24gPSBwdnIyX2hkd19lbmNvZGVyX3dhaXRfdGltZW91dDsKQEAgLTI2NzQsNiArMjY4Myw3IEBACiAgZmFpbDoKIAlpZiAoaGR3KSB7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfcnVuX3RpbWVyKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAkJaWYgKGhkdy0+d29ya3F1ZXVlKSB7CkBAIC0yNzQxLDYgKzI3NTEsNyBAQAogCQloZHctPndvcmtxdWV1ZSA9IE5VTEw7CiAJfQogCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3J1bl90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAlpZiAoaGR3LT5md19idWZmZXIpIHsKQEAgLTQ0NTIsNyArNDQ2Myw3IEBACiAKIAlzd2l0Y2ggKGhkdy0+cGF0aHdheV9zdGF0ZSkgewogCWNhc2UgUFZSMl9QQVRIV0FZX0FOQUxPRzoKLQkJaWYgKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4pIHsKKwkJaWYgKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gJiYgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KSB7CiAJCQkvKiBJbiBhbmFsb2cgbW9kZSwgaWYgdGhlIGRlY29kZXIgaXMgcnVubmluZywgdGhlbgogCQkJICAgcnVuIHRoZSBlbmNvZGVyLiAqLwogCQkJcmV0dXJuICEwOwpAQCAtNDUxOSw2ICs0NTMwLDE3IEBACiB9CiAKIAorLyogVGltZW91dCBmdW5jdGlvbiBmb3IgZGVjb2RlciBzdGFiaWxpemF0aW9uIHRpbWVyLiAqLworc3RhdGljIHZvaWQgcHZyMl9oZHdfZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKWRhdGE7CisJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gITA7CisJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcmVhZHkiLCBoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkpOworCWhkdy0+c3RhdGVfc3RhbGUgPSAhMDsKKwlxdWV1ZV93b3JrKGhkdy0+d29ya3F1ZXVlLCAmaGR3LT53b3JrcG9sbCk7Cit9CisKKwogLyogVGltZW91dCBmdW5jdGlvbiBmb3IgZW5jb2RlciB3YWl0IHRpbWVyLiAqLwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtNDU1Nyw4ICs0NTc5LDEzIEBACiAJCX0KIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA9IDA7CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPSAwOwotCQkvKiBwYXJhbm9pYSAtIHNvbHZlIHJhY2UgaWYgdGltZXIganVzdCBjb21wbGV0ZWQgKi8KKwkJLyogcGFyYW5vaWEgLSBzb2x2ZSByYWNlIGlmIHRpbWVyKHMpIGp1c3QgY29tcGxldGVkICovCiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJCS8qIEtpbGwgdGhlIHN0YWJpbGl6YXRpb24gdGltZXIsIGluIGNhc2Ugd2UncmUga2lsbGluZyB0aGUKKwkJICAgZW5jb2RlciBiZWZvcmUgdGhlIHByZXZpb3VzIHN0YWJpbGl6YXRpb24gaW50ZXJ2YWwgaGFzCisJCSAgIGJlZW4gcHJvcGVybHkgdGltZWQuICovCisJCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CisJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKCFoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50KSB7CiAJCQlpZiAoIXRpbWVyX3BlbmRpbmcoJmhkdy0+cXVpZXNjZW50X3RpbWVyKSkgewpAQCAtNDU5NiwxMCArNDYyMywyMSBAQAogCQlpZiAoaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSByZXR1cm4gMDsKIAkJaWYgKHB2cjJfZGVjb2Rlcl9lbmFibGUoaGR3LCEwKSA8IDApIHJldHVybiAwOwogCQloZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID0gMDsKKwkJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gMDsKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biA9ICEwOworCQlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCA9PSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1KSB7CisJCQloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsKKwkJCQkoSFogKiBUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQgLworCQkJCSAxMDAwKTsKKwkJCWFkZF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCQl9IGVsc2UgeworCQkJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gITA7CisJCX0KIAl9CiAJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcXVpZXNjZW50IixoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50KTsKIAl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9ydW4iLGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4pOworCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3JlYWR5IiwgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KTsKIAlyZXR1cm4gITA7CiB9CiAKQEAgLTQ3OTcsNyArNDgzNSw4IEBACiAJCQlidWYsYWNudCwKIAkJCSJ3b3JrZXI6JXMlcyVzJXMlcyVzJXMiLAogCQkJKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPwotCQkJICIgPGRlY29kZTpydW4+IiA6CisJCQkgKGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA/CisJCQkgICI8ZGVjb2RlOnJ1bj4iIDogIiA8ZGVjb2RlOnN0YXJ0PiIpIDoKIAkJCSAoaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA/CiAJCQkgICIiIDogIiA8ZGVjb2RlOnN0b3A+IikpLAogCQkJKGhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCA1NmU3MGVhLi41MWQzMDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtMzA2LDYgKzMwNiw3IEBACiAJaW50IHN0YXRlX2VuY29kZXJfb2s7CiAJaW50IHN0YXRlX2VuY29kZXJfcnVuOwogCWludCBzdGF0ZV9kZWNvZGVyX3J1bjsKKwlpbnQgc3RhdGVfZGVjb2Rlcl9yZWFkeTsKIAlpbnQgc3RhdGVfdXNic3RyZWFtX3J1bjsKIAlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7CiAJaW50IHN0YXRlX3BpcGVsaW5lX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMjk0Zjg2MC4uMzIyYWM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTg5OCwxOCArODk4LDggQEAKIAogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9hY3RpdmF0ZShzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2KQogewotCXN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwY2Rldi0+cGRhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAl1MzIgY2ljcjQgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJSZWdpc3RlcmVkIHBsYXRmb3JtIGRldmljZSBhdCAlcCBkYXRhICVwXG4iLAotCQlwY2RldiwgcGRhdGEpOwotCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pbml0KSB7Ci0JCWRldl9kYmcoZGV2LCAiJXM6IEluaXQgZ3Bpb3NcbiIsIF9fZnVuY19fKTsKLQkJcGRhdGEtPmluaXQoZGV2KTsKLQl9Ci0KIAkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJX19yYXdfd3JpdGVsKDB4M2ZmLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwppbmRleCA4MDUyMjZlLi45Mjc3MTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJdTggdmFsOwogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua180W10gPSB7CiAJezB4NDE3LCAwfSwKIAl7MHg0MmMsIDB9LAogCXsweDQyZCwgMHhmMH0sCkBAIC0xODYsNyArMTg2LDcgQEAKIAl7MHg0ZmUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua181W10gPSB7CiAJezB4NTE0LCAwfSwKIAl7MHg1MTYsIDB9LAogCXsweDUxOCwgMH0sCkBAIC0yMDcsNyArMjA3LDcgQEAKIAl7MHg1ZmUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzdbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua183W10gPSB7CiAJezB4NzBhLCAwfSwKIAl7MHg3MTQsIDB4ZmZ9LAogCXsweDcxNSwgMHhmZn0sCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl7MHg3RkUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua184W10gPSB7CiAJezB4ODAwLCAweDAwfSwKIAl7MHg4MDEsIDB4MDF9LAogCXsweDgwMiwgMHg2MX0sCkBAIC00MDMsMTIgKzQwMywxMiBAQAogCXsweDhGRSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfMTBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua18xMFtdID0gewogCXsweDEwYmYsIDB4Njl9CiB9OwogCiAvKiBDbG9jayBkaXZpZGVycyAtIHRoZXNlIGFyZSBkZWZhdWx0IHJlZ2lzdGVyIHZhbHVlcywgZGl2aWRlciA9IHJlZ2lzdGVyICsgMSAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfY2xvY2tfZGl2IGNsa19kaXYgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9jbG9ja19kaXYgY2xrX2RpdiA9IHsKIAkucmF0aW9fdGcJPSAzIC8qIGRlZmF1bHQ6IDUgKi8sCiAJLnJhdGlvX3QJPSA0IC8qIGRlZmF1bHQ6IDEgKi8sCiAJLnJhdGlvX3IJPSA0IC8qIGRlZmF1bHQ6IDAgKi8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDQ0ODczYTAxLi5jMGE3ZjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTA0LDYgKzEwNCwxMCBAQAogCWlmIChpZCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpCiAJCXJldHVybiByZWcgPCAweDIwICYmIHJlZyAhPSAweDAxICYmIHJlZyAhPSAweDBmICYmCiAJCSAgICAgICAocmVnIDwgMHgxMyB8fCByZWcgPiAweDE5KSAmJiByZWcgIT0gMHgxZCAmJiByZWcgIT0gMHgxZTsKKwlpZiAoaWQgPT0gVjRMMl9JREVOVF9TQUE3MTExQSkKKwkJcmV0dXJuIHJlZyA8IDB4MjAgJiYgcmVnICE9IDB4MDEgJiYgcmVnICE9IDB4MGYgJiYKKwkJICAgICAgIHJlZyAhPSAweDE0ICYmIHJlZyAhPSAweDE4ICYmIHJlZyAhPSAweDE5ICYmCisJCSAgICAgICByZWcgIT0gMHgxZCAmJiByZWcgIT0gMHgxZTsKIAogCS8qIGNvbW1vbiBmb3Igc2FhNzExMy80LzUvOCAqLwogCWlmICh1bmxpa2VseSgocmVnID49IDB4M2IgJiYgcmVnIDw9IDB4M2YpIHx8IHJlZyA9PSAweDVjIHx8IHJlZyA9PSAweDVmIHx8CkBAIC05NTQsOCArOTU4LDcgQEAKIAkwMTEgTlRTQyBOICgzLjU4TUh6KSAgICAgICAgICAgIFBBTCBNICgzLjU4TUh6KQogCTEwMCByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgTlRTQy1KYXBhbiAoMy41OE1IeikKIAkqLwotCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExIHx8Ci0JICAgIHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKKwlpZiAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMykgewogCQl1OCByZWcgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMEVfQ0hST01BX0NOVExfMSkgJiAweDhmOwogCiAJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKQEAgLTEyMzIsMjIgKzEyMzUsMTkgQEAKIAkJCSAgICAgdTMyIGlucHV0LCB1MzIgb3V0cHV0LCB1MzIgY29uZmlnKQogewogCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQl1OCBtYXNrID0gKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpID8gMHhmOCA6IDB4ZjA7CisJdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTExQSkgPyAweGY4IDogMHhmMDsKIAogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImRlY29kZXIgc2V0IGlucHV0ICVkIG91dHB1dCAlZFxuIiwKIAkJaW5wdXQsIG91dHB1dCk7CiAKIAkvKiBzYWE3MTExLzMgZG9lcyBub3QgaGF2ZSB0aGVzZSBpbnB1dHMgKi8KLQlpZiAoKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMgfHwKLQkgICAgIHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpICYmCisJaWYgKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTMgJiYKIAkgICAgKGlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNCB8fAogCSAgICAgaW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU1KSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGlucHV0ID4gU0FBNzExNV9TVklERU8zKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAob3V0cHV0ID4gU0FBNzExNV9JUE9SVF9PTikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXRlLT5pbnB1dCA9PSBpbnB1dCAmJiBzdGF0ZS0+b3V0cHV0ID09IG91dHB1dCkKIAkJcmV0dXJuIDA7CiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm93IHNldHRpbmcgJXMgaW5wdXQgJXMgb3V0cHV0XG4iLApAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAlzdGF0ZS0+aW5wdXQgPSBpbnB1dDsKIAogCS8qIHNhYTcxMTEgaGFzIHNsaWdodGx5IGRpZmZlcmVudCBpbnB1dCBudW1iZXJpbmcgKi8KLQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgeworCWlmIChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTExQSkgewogCQlpZiAoaW5wdXQgPj0gU0FBNzExNV9DT01QT1NJVEU0KQogCQkJaW5wdXQgLT0gMjsKIAkJLyogc2FhNzExMSBzcGVjaWZpYyAqLwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwlpZiAoc3RhdGUtPmlkZW50ID4gVjRMMl9JREVOVF9TQUE3MTExQSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc2FhNzExeF93cml0ZShzZCwgMHgxMSwgKHNhYTcxMXhfcmVhZChzZCwgMHgxMSkgJiAweDdmKSB8CiAJCSh2YWwgPyAweDgwIDogMCkpOwpAQCAtMTU5Niw2ICsxNTk2LDEwIEBACiAJc3dpdGNoIChjaGlwX2lkKSB7CiAJY2FzZSAnMSc6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKKwkJaWYgKHNhYTcxMXhfcmVhZChzZCwgUl8wMF9DSElQX1ZFUlNJT04pICYgMHhmMCkgeworCQkJdjRsX2luZm8oY2xpZW50LCAic2FhNzExMWEgdmFyaWFudCBmb3VuZFxuIik7CisJCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTFBOworCQl9CiAJCWJyZWFrOwogCWNhc2UgJzMnOgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTM7CkBAIC0xNjEyLDcgKzE2MTYsNyBAQAogCWRlZmF1bHQ6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKIAkJdjRsMl9pbmZvKHNkLCAiV0FSTklORzogQ2hpcCBpcyBub3Qga25vd24gLSBGYWxsaW5nIGJhY2sgdG8gc2FhNzExMVxuIik7Ci0KKwkJYnJlYWs7CiAJfQogCiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CkBAIC0xNjIzLDYgKzE2MjcsNyBAQAogCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMjRfNTc2X01IWjsKIAlzd2l0Y2ggKHN0YXRlLT5pZGVudCkgewogCWNhc2UgVjRMMl9JREVOVF9TQUE3MTExOgorCWNhc2UgVjRMMl9JREVOVF9TQUE3MTExQToKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTFfaW5pdCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9JREVOVF9TQUE3MTEzOgpAQCAtMTYzMiw3ICsxNjM3LDcgQEAKIAkJc3RhdGUtPmNyeXN0YWxfZnJlcSA9IFNBQTcxMTVfRlJFUV8zMl8xMV9NSFo7CiAJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTE1X2luaXRfYXV0b19pbnB1dCk7CiAJfQotCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTExKQorCWlmIChzdGF0ZS0+aWRlbnQgPiBWNEwyX0lERU5UX1NBQTcxMTFBKQogCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9pbml0X21pc2MpOwogCXNhYTcxMXhfc2V0X3Y0bHN0ZChzZCwgVjRMMl9TVERfTlRTQyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggMmZlN2E3MC4uMjUwZWY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogI2RlZmluZSBTQUE3MTI3XzYwSFpfREFDX0NPTlRST0wgMHgxNQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNjBoeltdID0gewogCXsgU0FBNzEyN19SRUdfQlVSU1RfU1RBUlQsIAkJCTB4MTkgfSwKLQkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X2RldGVjdF9jbGllbnQgKi8KKwkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X3Byb2JlICovCiAJeyBTQUE3MTI3X1JFR19CVVJTVF9FTkQsIAkJCTB4MWQgfSwKIAl7IFNBQTcxMjdfUkVHX0NIUk9NQV9QSEFTRSwgCQkJMHhhMyB9LAogCXsgU0FBNzEyN19SRUdfR0FJTlUsIAkJCQkweDk4IH0sCkBAIC0yMDAsMTAgKzIwMCwxMCBAQAogCXsgMCwgMCB9CiB9OwogCi0jZGVmaW5lIFNBQTcxMjdfNTBIWl9EQUNfQ09OVFJPTCAweDAyCi1zdGF0aWMgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ181MGh6W10gPSB7CisjZGVmaW5lIFNBQTcxMjdfNTBIWl9QQUxfREFDX0NPTlRST0wgMHgwMgorc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9wYWxbXSA9IHsKIAl7IFNBQTcxMjdfUkVHX0JVUlNUX1NUQVJULCAJCQkweDIxIH0sCi0JLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19kZXRlY3RfY2xpZW50ICovCisJLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19wcm9iZSAqLwogCXsgU0FBNzEyN19SRUdfQlVSU1RfRU5ELCAJCQkweDFkIH0sCiAJeyBTQUE3MTI3X1JFR19DSFJPTUFfUEhBU0UsIAkJCTB4M2YgfSwKIAl7IFNBQTcxMjdfUkVHX0dBSU5VLCAJCQkJMHg3ZCB9LApAQCAtMjIyLDYgKzIyMiwyOCBAQAogCXsgMCwgMCB9CiB9OwogCisjZGVmaW5lIFNBQTcxMjdfNTBIWl9TRUNBTV9EQUNfQ09OVFJPTCAweDA4CitzdGF0aWMgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3NlY2FtW10gPSB7CisJeyBTQUE3MTI3X1JFR19CVVJTVF9TVEFSVCwgCQkJMHgyMSB9LAorCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfcHJvYmUgKi8KKwl7IFNBQTcxMjdfUkVHX0JVUlNUX0VORCwgCQkJMHgxZCB9LAorCXsgU0FBNzEyN19SRUdfQ0hST01BX1BIQVNFLCAJCQkweDNmIH0sCisJeyBTQUE3MTI3X1JFR19HQUlOVSwgCQkJCTB4NmEgfSwKKwl7IFNBQTcxMjdfUkVHX0dBSU5WLCAJCQkJMHg4MSB9LAorCXsgU0FBNzEyN19SRUdfQkxBQ0tfTEVWRUwsIAkJCTB4MzMgfSwKKwl7IFNBQTcxMjdfUkVHX0JMQU5LSU5HX0xFVkVMLCAJCQkweDM1IH0sCisJeyBTQUE3MTI3X1JFR19WQklfQkxBTktJTkcsIAkJCTB4MzUgfSwKKwl7IFNBQTcxMjdfUkVHX0RBQ19DT05UUk9MLCAJCQkweDA4IH0sCisJeyBTQUE3MTI3X1JFR19CVVJTVF9BTVAsIAkJCTB4MmYgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMzLCAJCQkJMHhiMiB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzIsIAkJCQkweDNiIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMSwgCQkJCTB4YTMgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMwLCAJCQkJMHgyOCB9LAorCXsgU0FBNzEyN19SRUdfTVVMVEksIAkJCQkweDkwIH0sCisJeyBTQUE3MTI3X1JFR19DTE9TRURfQ0FQVElPTiwgCQkJMHgwMCB9LAorCXsgMCwgMCB9Cit9OworCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC00NjMsMTAgKzQ4NSwyMSBAQAogCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgNjAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOwogCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ182MGh6OwogCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN182MEhaX0RBQ19DT05UUk9MOworCisJfSBlbHNlIGlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTI5ICYmCisJCSAgIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYKKwkJICAgIShzdGQgJiAoVjRMMl9TVERfNjI1XzUwICYgflY0TDJfU1REX1NFQ0FNKSkpIHsKKworCQkvKiBJZiBhbmQgb25seSBpZiBTRUNBTSwgd2l0aCBhIFNBQTcxMls4OV0gKi8KKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJICJTZWxlY3RpbmcgNTAgSHogU0VDQU0gdmlkZW8gU3RhbmRhcmRcbiIpOworCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3NlY2FtOworCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX1NFQ0FNX0RBQ19DT05UUk9MOworCiAJfSBlbHNlIHsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDUwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKLQkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNTBoejsKLQkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9EQUNfQ09OVFJPTDsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDUwIEh6IFBBTCB2aWRlbyBTdGFuZGFyZFxuIik7CisJCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfcGFsOworCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX1BBTF9EQUNfQ09OVFJPTDsKIAl9CiAKIAkvKiBXcml0ZSBUYWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggMDNmNTcyNy4uMjk3ODMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC00MTYwLDcgKzQxNjAsNyBAQAogCQkJLmFtdXggPSBMSU5FMiwKIAkJfSwKIAl9LAotCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNdID0geworCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1XSA9IHsKIAkJLyogICAgICAgQmVob2xkZXIgSW50bC4gTHRkLiAyMDA4ICAgICAgKi8KIAkJLypEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDUwNSBSRFMiLApAQCAtNTMyMCw2ICs1MzIwLDQxIEBACiAJCQkudm11eCA9IDgsCiAJCX0gfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszXSA9IHsKKwkJLyogICAgICAgQmVob2xkZXIgSW50bC4gTHRkLiAyMDA4ICAgICAgKi8KKwkJLypEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDUwNSBSRFMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yZHNfYWRkciAJPSAweDEwLAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDgwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwKKwl9LAogCiB9OwogCkBAIC02MjM1LDcgKzYyNzAsMTMgQEAKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAogCQkuc3VidmVuZG9yICAgID0gMHgwMDAwLAogCQkuc3ViZGV2aWNlICAgID0gMHg1MDVCLAotCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNSwKKwl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MDAwMCwKKwkJLnN1YmRldmljZSAgICA9IDB4NTA1MSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzMsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKQEAgLTY3OTIsNyArNjgzMyw4IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDdGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNUZNOgotCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNToKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzU6CkBAIC02OTUzLDggKzY5OTUsOCBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1MzNTA6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87Ci0JCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKLQkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDAwQzAwMCwgMHgwMDAwQzAwMCk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDBDMDAwLCAweDAwMDBDMDAwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZjhlOTg1OS4uOTQ5OTAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAlpbnQgcG9sbGluZyAgICAgID0gMDsKIAlpbnQgcmM1X2dwaW8JID0gMDsKIAlpbnQgbmVjX2dwaW8JID0gMDsKLQlpbnQgaXJfdHlwZSAgICAgID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVycjsKIAogCWlmIChkZXYtPmhhc19yZW1vdGUgIT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKQEAgLTU2OCw3ICs1NjgsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA3Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKLQljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3XzlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1OgpAQCAtNzI4LDcgKzcyOSw3IEBACiAJZGV2LT5yZW1vdGUgPSBpcjsKIAlzYWE3MTM0X2lyX3N0YXJ0KGRldiwgaXIpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggY2I3MzI2NDAuLjMxMTM4ZDNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogI2RlZmluZSBOT1JNXzUyNV82MAkJCVwKIAkJLmhfc3RhcnQgICAgICAgPSAwLAlcCi0JCS5oX3N0b3AgICAgICAgID0gNzAzLAlcCisJCS5oX3N0b3AgICAgICAgID0gNzE5LAlcCiAJCS52aWRlb192X3N0YXJ0ID0gMjMsCVwKIAkJLnZpZGVvX3Zfc3RvcCAgPSAyNjIsCVwKIAkJLnZiaV92X3N0YXJ0XzAgPSAxMCwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggNTNiN2UwYi4uYmYxMzA5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjgyLDcgKzI4Miw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAgICAxNTYKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwN1VBIDE1NwogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9DQVJEQlVTXzUwMSAxNTgKLSNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTICAgICAgICAgMTU5CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzUgICAgIDE1OQogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszICAgICAxNjAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNSAgICAgMTYxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzYwN0ZNX01LNSAgICAgIDE2MgpAQCAtMjk5LDYgKzI5OSw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSQkJMTczCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEFfSFlCUklECTE3NAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0xFQURURUtfV0lORkFTVF9EVFYxMDAwUyAxNzUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMyAgICAgMTc2CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYXBpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwppbmRleCA2ZjA5NGE5Li4xZDQ4N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJfQogCiAJcmVnbGVuID0gc2FhNzE2NF9pMmNhZGRyX3RvX3JlZ2xlbihidXMsIGFkZHIpOwotCWlmICh1bml0aWQgPCAwKSB7CisJaWYgKHJlZ2xlbiA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIHRvIHJlZ2xlblxuIiwKIAkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBmMDljNzE0Li5mYjg4YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC0xNzQ4LDYgKzE3NDgsMjIgQEAKIAkJCQkgICAgICAgaWNkKTsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19wYXJtLCBwYXJtKTsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19wYXJtLCBwYXJtKTsKK30KKwogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9jdHJsKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKQEAgLTE4MDgsNiArMTgyNCw4IEBACiAJLnRyeV9mbXQJPSBzaF9tb2JpbGVfY2V1X3RyeV9mbXQsCiAJLnNldF9jdHJsCT0gc2hfbW9iaWxlX2NldV9zZXRfY3RybCwKIAkuZ2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X2dldF9jdHJsLAorCS5zZXRfcGFybQk9IHNoX21vYmlsZV9jZXVfc2V0X3Bhcm0sCisJLmdldF9wYXJtCT0gc2hfbW9iaWxlX2NldV9nZXRfcGFybSwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKIAkucG9sbAkJPSBzaF9tb2JpbGVfY2V1X3BvbGwsCiAJLnF1ZXJ5Y2FwCT0gc2hfbW9iaWxlX2NldV9xdWVyeWNhcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKaW5kZXggZjcxZjI3Mi4uNmViYWYyOTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMSw3ICsxLDEwIEBACiBjb25maWcgVVNCX1NOOUMxMDIKLQl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBzb25peGIgYW5kCisJICBzb25peGogbW9kdWxlcyBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKIAkgIFNOOUMxMDIsIFNOOUMxMDMsIFNOOUMxMDUgYW5kIFNOOUMxMjAgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCAzNmVlNDNhLi5jYzQwZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTQ1LDIwICs0NSwyNCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1LCBCUklER0VfU045QzEwMiksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNywgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkLCBCUklER0VfU045QzEwMiksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSwgQlJJREdFX1NOOUMxMDIpLCB9LCBPVjY2NTAgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDE5LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjQsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiLCBCUklER0VfU045QzEwMiksIH0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjLCBCUklER0VfU045QzEwMiksIH0sCi0jZW5kaWYKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkLCBCUklER0VfU045QzEwMiksIH0sIEhWNzEzMVIgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzAsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAkvKiBTTjlDMTAzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDZiM2ZiY2NhLi44MGY2YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtNzgxLDYgKzc4MSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCisJaWYgKGljaS0+b3BzLT5nZXRfcGFybSkKKwkJcmV0dXJuIGljaS0+b3BzLT5nZXRfcGFybShpY2QsIGEpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisKKwlpZiAoaWNpLT5vcHMtPnNldF9wYXJtKQorCQlyZXR1cm4gaWNpLT5vcHMtPnNldF9wYXJtKGljZCwgYSk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7CkBAIC04NDYsMTAgKzg3Miw4IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OwotCWludCByZXQ7CiAKIAlpZiAoIWFkYXApIHsKLQkJcmV0ID0gLUVOT0RFVjsKIAkJZGV2X2VycigmaWNkLT5kZXYsICJDYW5ub3QgZ2V0IEkyQyBhZGFwdGVyICMlZC4gTm8gZHJpdmVyP1xuIiwKIAkJCWljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCQlnb3RvIGVpMmNnYTsKQEAgLTg1OSwxMCArODgzLDggQEAKIAogCXN1YmRldiA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmljaS0+djRsMl9kZXYsIGFkYXAsCiAJCQkJaWNsLT5tb2R1bGVfbmFtZSwgaWNsLT5ib2FyZF9pbmZvLCBOVUxMKTsKLQlpZiAoIXN1YmRldikgewotCQlyZXQgPSAtRU5PTUVNOworCWlmICghc3ViZGV2KQogCQlnb3RvIGVpMmNuZDsKLQl9CiAKIAljbGllbnQgPSBzdWJkZXYtPnByaXY7CiAKQEAgLTg3Myw3ICs4OTUsNyBAQAogZWkyY25kOgogCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIGVpMmNnYToKLQlyZXR1cm4gcmV0OworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2ZyZWVfaTJjKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQpAQCAtMTI2MCw2ICsxMjgyLDggQEAKIAkudmlkaW9jX2Nyb3BjYXAJCSA9IHNvY19jYW1lcmFfY3JvcGNhcCwKIAkudmlkaW9jX2dfY3JvcAkJID0gc29jX2NhbWVyYV9nX2Nyb3AsCiAJLnZpZGlvY19zX2Nyb3AJCSA9IHNvY19jYW1lcmFfc19jcm9wLAorCS52aWRpb2NfZ19wYXJtCQkgPSBzb2NfY2FtZXJhX2dfcGFybSwKKwkudmlkaW9jX3NfcGFybQkJID0gc29jX2NhbWVyYV9zX3Bhcm0sCiAJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgID0gc29jX2NhbWVyYV9nX2NoaXBfaWRlbnQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS52aWRpb2NfZ19yZWdpc3RlcgkgPSBzb2NfY2FtZXJhX2dfcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwppbmRleCBmOGQ1Yzg3Li44YjYzYjY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jCkBAIC0yNCw5MSArMjQsMTA2IEBACiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoWVZZVThfMlg4X0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWVZZVThfMlg4X0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZVllVLAogCQkubmFtZQkJCT0gIllWWVUiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFlVWVY4XzJYOF9CRSldID0geworCX0sCisJW01CVVNfSURYKFlVWVY4XzJYOF9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfVVlWWSwKIAkJLm5hbWUJCQk9ICJVWVZZIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChZVllVOF8yWDhfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChZVllVOF8yWDhfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1ZZVVksCiAJCS5uYW1lCQkJPSAiVllVWSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoUkdCNTU1XzJYOF9QQURISV9MRSldID0geworCX0sCisJW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU1NSwKIAkJLm5hbWUJCQk9ICJSR0I1NTUiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NTVYLAogCQkubmFtZQkJCT0gIlJHQjU1NVgiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU2NV8yWDhfTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NjVfMlg4X0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCiAJCS5uYW1lCQkJPSAiUkdCNTY1IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChSR0I1NjVfMlg4X0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoUkdCNTY1XzJYOF9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwKIAkJLm5hbWUJCQk9ICJSR0I1NjVYIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjhfMVg4KV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1I4XzFYOCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAogCQkubmFtZQkJCT0gIkJheWVyIDggQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMVgxMCldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMVgxMCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDEwLAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX0VYVEVORDE2LAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChHUkVZOF8xWDgpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChHUkVZOF8xWDgpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5uYW1lCQkJPSAiR3JleSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFkxMF8xWDEwKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWTEwXzFYMTApXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1kxMCwKIAkJLm5hbWUJCQk9ICJHcmV5IDEwYml0IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDEwLAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX0VYVEVORDE2LAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9MRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBREhJX0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTywKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0JFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURMT19CRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKQEAgLTEzNCw3ICsxNDksOCBAQAogY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpzb2NfbWJ1c19nZXRfZm10ZGVzYygKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZSkKIHsKLQlpZiAoKHVuc2lnbmVkIGludCkoY29kZSAtIFY0TDJfTUJVU19GTVRfRklYRUQpID4gQVJSQVlfU0laRShtYnVzX2ZtdCkpCisJaWYgKGNvZGUgLSBWNEwyX01CVVNfRk1UX0ZJWEVEID4gQVJSQVlfU0laRShtYnVzX2ZtdCkgfHwKKwkgICAgY29kZSA8PSBWNEwyX01CVVNfRk1UX0ZJWEVEKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gbWJ1c19mbXQgKyBjb2RlIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCAtIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjllYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACitjb25maWcgVklERU9fVExHMjMwMAorCXRyaXN0YXRlICJUZWxlZ2VudCBUTEcyMzAwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIElOUFVUICYmIFNORCAmJiBEVkJfQ09SRQorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT0JVRl9WTUFMTE9DCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgVklERU9CVUZfRFZCCisKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBUZWxlZ2VudCB0bGcyMzAwIGJhc2VkIFRWIGNhcmRzLgorCSAgVGhlIGRyaXZlciBzdXBwb3J0cyBWNEwyLCBEVkItVCBhbmQgcmFkaW8uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvc2VpZG9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiYjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK3Bvc2VpZG9uLW9ianMgOj0gcGQtdmlkZW8ubyBwZC1hbHNhLm8gcGQtZHZiLm8gcGQtcmFkaW8ubyBwZC1tYWluLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX1RMRzIzMDApICs9IHBvc2VpZG9uLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDI2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtYWxzYS5jCkBAIC0wLDAgKzEsMzMyIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9oYW5kbGVyX2F1ZGlvKHN0cnVjdCB1cmIgKnVyYik7CisjZGVmaW5lIEFVRElPX0VQCSgweDgzKQorI2RlZmluZSBBVURJT19CVUZfU0laRQkoNTEyKQorI2RlZmluZSBQRVJJT0RfU0laRQkoMTAyNCAqIDgpCisjZGVmaW5lIFBFUklPRF9NSU4JKDQpCisjZGVmaW5lIFBFUklPRF9NQVggCVBFUklPRF9NSU4KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9wZF9od19jYXB0dXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQICAgICAgICAgICB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKworCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IFBFUklPRF9TSVpFICogUEVSSU9EX01JTiwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gUEVSSU9EX1NJWkUsCisJLnBlcmlvZHNfbWluID0gUEVSSU9EX01JTiwKKwkucGVyaW9kc19tYXggPSBQRVJJT0RfTUFYLAorCS8qCisJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MjcyMCAqIDgsCisJLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEyNTQ0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gOTgKKwkqLworfTsKKworc3RhdGljIGludCBzbmRfcGRfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PREVWOworCXBhLT51c2VycysrOworCXBhLT5jYXJkX2Nsb3NlIAkJPSAwOworCXBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0JPSBzdWJzdHJlYW07CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhCQk9IHA7CisKKwlydW50aW1lLT5odyA9IHNuZF9wZF9od19jYXB0dXJlOworCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwlrcmVmX2dldCgmcC0+a3JlZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCXBhLT51c2Vycy0tOworCXBhLT5jYXJkX2Nsb3NlIAkJPSAxOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCWtyZWZfcHV0KCZwLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9od19jYXB0dXJlX3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQorCQkJcmV0dXJuIDA7CisJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKKwl9CisJcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCisJCXJldHVybiAtRU5PTUVNOworCWVsc2UKKwkJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdWRpb19idWZfZnJlZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBVURJT19CVUZTOyBpKyspCisJCWlmIChwYS0+dXJiX2FycmF5W2ldKQorCQkJdXNiX2tpbGxfdXJiKHBhLT51cmJfYXJyYXlbaV0pOworCWZyZWVfYWxsX3VyYl9nZW5lcmljKHBhLT51cmJfYXJyYXksIEFVRElPX0JVRlMpOworCWxvZ3BtKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX2h3X2NhcHR1cmVfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlsb2dwbSgpOworCWF1ZGlvX2J1Zl9mcmVlKHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIEFVRElPX1RSQUlMRVJfU0laRQkoMTYpCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2F1ZGlvX2RhdGEoc3RydWN0IHVyYiAqdXJiLCBpbnQgKnBlcmlvZF9lbGFwc2VkKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpbnQgc3RyaWRlCT0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOworCWludCBsZW4JCT0gdXJiLT5hY3R1YWxfbGVuZ3RoIC8gc3RyaWRlOworCXVuc2lnbmVkIGNoYXIgKmNwCT0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IG9sZHB0cgk9IHBhLT5yY3ZfcG9zaXRpb247CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IEFVRElPX0JVRl9TSVpFIC0gNCkKKwkJbGVuIC09IChBVURJT19UUkFJTEVSX1NJWkUgLyBzdHJpZGUpOworCisJLyogZG8gdGhlIGNvcHkgKi8KKwlpZiAob2xkcHRyICsgbGVuID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCXVuc2lnbmVkIGludCBjbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKKworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIGNwLCBjbnQgKiBzdHJpZGUpOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIChjcCArIGNudCAqIHN0cmlkZSksCisJCQkJCShsZW4gKiBzdHJpZGUgLSBjbnQgKiBzdHJpZGUpKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgbGVuICogc3RyaWRlKTsKKworCS8qIHVwZGF0ZSB0aGUgc3RhdGFzICovCisJc25kX3BjbV9zdHJlYW1fbG9jayhwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtKTsKKwlwYS0+cmN2X3Bvc2l0aW9uCSs9IGxlbjsKKwlpZiAocGEtPnJjdl9wb3NpdGlvbiA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJcGEtPnJjdl9wb3NpdGlvbiAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCXBhLT5jb3BpZWRfcG9zaXRpb24gKz0gKGxlbik7CisJaWYgKHBhLT5jb3BpZWRfcG9zaXRpb24gPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJcGEtPmNvcGllZF9wb3NpdGlvbiAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJKnBlcmlvZF9lbGFwc2VkID0gMTsKKwl9CisJc25kX3BjbV9zdHJlYW1fdW5sb2NrKHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9oYW5kbGVyX2F1ZGlvKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKwlpbnQgICAgcGVyaW9kX2VsYXBzZWQgPSAwOworCWludCAgICByZXQ7CisKKwlpZiAoMSA9PSBwYS0+Y2FyZF9jbG9zZSB8fCBwYS0+Y2FwdHVyZV9zdHJlYW0gIT0gU1RSRUFNX09OKQorCQlyZXR1cm47CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQkvKmlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSovCisJCQlyZXR1cm47CisJfQorCisJaWYgKHN1YnN0cmVhbSkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQloYW5kbGVfYXVkaW9fZGF0YSh1cmIsICZwZXJpb2RfZWxhcHNlZCk7CisJCQlpZiAocGVyaW9kX2VsYXBzZWQpCisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQl9CisJfQorCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJhdWRpbyB1cmIgZmFpbGVkIChlcnJjb2QgPSAlaSkiLCByZXQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBmaXJlX2F1ZGlvX3VyYihzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCWFsbG9jX2J1bGtfdXJic19nZW5lcmljKHBhLT51cmJfYXJyYXksIEFVRElPX0JVRlMsCisJCQlwLT51ZGV2LCBBVURJT19FUCwKKwkJCUFVRElPX0JVRl9TSVpFLCBHRlBfQVRPTUlDLAorCQkJY29tcGxldGVfaGFuZGxlcl9hdWRpbywgcGEpOworCisJZm9yIChpID0gMDsgaSA8IEFVRElPX0JVRlM7IGkrKykgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihwYS0+dXJiX2FycmF5W2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCWxvZygidXJiIGVyciA6ICVkIiwgcmV0KTsKKwl9CisJbG9nKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfcGRfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCisJaWYgKGRlYnVnX21vZGUpCisJCWxvZygiY21kICVkLCBhdWRpbyBzdGF0IDogJWRcbiIsIGNtZCwgcGEtPmNhcHR1cmVfc3RyZWFtKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKHBhLT5jYXB0dXJlX3N0cmVhbSA9PSBTVFJFQU1fT04pCisJCQlyZXR1cm4gMDsKKworCQlwYS0+cmN2X3Bvc2l0aW9uID0gcGEtPmNvcGllZF9wb3NpdGlvbiA9IDA7CisJCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PTjsKKworCQlpZiAoaW5faGliZXJuYXRpb24ocCkpCisJCQlyZXR1cm4gMDsKKwkJZmlyZV9hdWRpb191cmIocCk7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlwYS0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fU1VTUEVORDsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlwYS0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT0ZGOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX3BkX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlyZXR1cm4gcGEtPnJjdl9wb3NpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX3BkX2dldF9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkICpwYWdlcHRyID0gc3Vicy0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShwYWdlcHRyKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBwY21fY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gICAgICA9IHNuZF9wZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlICAgICA9IHNuZF9wZF9wY21fY2xvc2UsCisJLmlvY3RsICAgICA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfcGRfaHdfY2FwdHVyZV9wYXJhbXMsCisJLmh3X2ZyZWUgICA9IHNuZF9wZF9od19jYXB0dXJlX2ZyZWUsCisJLnByZXBhcmUgICA9IHNuZF9wZF9wcmVwYXJlLAorCS50cmlnZ2VyICAgPSBzbmRfcGRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyICAgPSBzbmRfcGRfY2FwdHVyZV9wb2ludGVyLAorCS5wYWdlICAgICAgPSBzbmRfcGNtX3BkX2dldF9wYWdlLAorfTsKKworI2lmZGVmIENPTkZJR19QTQoraW50IHBtX2Fsc2Ffc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJYXVkaW9fYnVmX2ZyZWUocCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwbV9hbHNhX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJZmlyZV9hdWRpb191cmIocCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IHBvc2VpZG9uX2F1ZGlvX2luaXQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IHJldDsKKworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgIlRlbGVnZW50IiwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhjYXJkLCAicG9zZWlkb24gYXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZwY21fY2FwdHVyZV9vcHMpOworCXBjbS0+aW5mb19mbGFncyAgID0gMDsKKwlwY20tPnByaXZhdGVfZGF0YSA9IHA7CisJc3RyY3B5KHBjbS0+bmFtZSwgInBvc2VpZG9uIGF1ZGlvIGNhcHR1cmUiKTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTFNBIGRyaXZlciIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJwb3NlaWRvbiBBdWRpbyIpOworCXN0cmNweShjYXJkLT5sb25nbmFtZSwgInBvc2VpZG9uIEFMU0EgQXVkaW8iKTsKKworCWlmIChzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGEtPmNhcmQgPSBjYXJkOworCXJldHVybiAwOworfQorCitpbnQgcG9zZWlkb25fYXVkaW9fZnJlZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCWlmIChwYS0+Y2FyZCkKKwkJc25kX2NhcmRfZnJlZShwYS0+Y2FyZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwNjZiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1jb21tb24uaApAQCAtMCwwICsxLDI4MiBAQAorI2lmbmRlZiBQRF9DT01NT05fSAorI2RlZmluZSBQRF9DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkbXhkZXYuaCIKKworI2RlZmluZSBTQlVGX05VTQk4CisjZGVmaW5lIE1BWF9CVUZGRVJfTlVNCTYKKyNkZWZpbmUgUEtfUEVSX1VSQgkzMgorI2RlZmluZSBJU09fUEtUX1NJWkUJMzA3MgorCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX05PTkUJCSgweDAwMDApCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0FOQUxPRwkJKDB4MDAwMSkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfRk0JCSgweDAwMDIpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0RWQlQJCSgweDAwMDQpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX1ZCSQkJKDB4MDAwOCkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVAkoMHgwMDgwKQorCisjZGVmaW5lIFBNX1NVU1BFTkRfREVMQVkJMworCisjZGVmaW5lIFY0TF9QQUxfVkJJX0xJTkVTCTE4CisjZGVmaW5lIFY0TF9OVFNDX1ZCSV9MSU5FUwkxMgorI2RlZmluZSBWNExfUEFMX1ZCSV9GUkFNRVNJWkUJKFY0TF9QQUxfVkJJX0xJTkVTICogMTQ0MCAqIDIpCisjZGVmaW5lIFY0TF9OVFNDX1ZCSV9GUkFNRVNJWkUJKFY0TF9OVFNDX1ZCSV9MSU5FUyAqIDE0NDAgKiAyKQorCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUlOCQkoNDUwMDAwMDApCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUFYCQkoODYyMDAwMDAwKQorCitzdHJ1Y3QgdmJpX2RhdGEgeworCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZfZGV2OworCXN0cnVjdCB2aWRlb19kYXRhCSp2aWRlbzsKKwlzdHJ1Y3QgZnJvbnRfZmFjZQkqZnJvbnQ7CisKKwl1bnNpZ25lZCBpbnQJCWNvcGllZDsKKwl1bnNpZ25lZCBpbnQJCXZiaV9zaXplOyAvKiB0aGUgd2hvbGUgc2l6ZSBvZiB0d28gZmllbGRzICovCisJaW50IAkJCXVzZXJzOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHJ1bm5pbmcgY29udGV4dCBvZiB0aGUgdmlkZW8sIGl0IGlzIHVzZWZ1bCBmb3IKKyAqIHJlc3VtZSgpCisgKi8KK3N0cnVjdCBydW5uaW5nX2NvbnRleHQgeworCXUzMgkJZnJlcTsJCS8qIFZJRElPQ19TX0ZSRVFVRU5DWSAqLworCWludAkJYXVkaW9faWR4OwkvKiBWSURJT0NfU19UVU5FUiAgICAqLworCXY0bDJfc3RkX2lkCXR2bm9ybWlkOwkvKiBWSURJT0NfU19TVEQgICAgICovCisJaW50CQlzaWdfaW5kZXg7CS8qIFZJRElPQ19TX0lOUFVUICAqLworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4OwkvKiBWSURJT0NfU19GTVQgICAqLworfTsKKworc3RydWN0IHZpZGVvX2RhdGEgeworCS8qIHY0bDIgdmlkZW8gZGV2aWNlICovCisJc3RydWN0IHZpZGVvX2RldmljZQkqdl9kZXY7CisKKwkvKiB0aGUgd29ya2luZyBjb250ZXh0ICovCisJc3RydWN0IHJ1bm5pbmdfY29udGV4dAljb250ZXh0OworCisJLyogZm9yIGRhdGEgY29weSAqLworCWludAkJZmllbGRfY291bnQ7CisKKwljaGFyCQkqZHN0OworCWludAkJbGluZXNfY29waWVkOworCWludAkJcHJldl9sZWZ0OworCisJaW50CQlsaW5lc19wZXJfZmllbGQ7CisJaW50CQlsaW5lc19zaXplOworCisJLyogZm9yIGNvbW11bmljYXRpb24gKi8KKwl1OAkJCWVuZHBvaW50X2FkZHI7CisJc3RydWN0IHVyYiAJCSp1cmJfYXJyYXlbU0JVRl9OVU1dOworCXN0cnVjdCB2YmlfZGF0YQkJKnZiaTsKKwlzdHJ1Y3QgcG9zZWlkb24gCSpwZDsKKwlzdHJ1Y3QgZnJvbnRfZmFjZQkqZnJvbnQ7CisKKwlpbnQJCQlpc19zdHJlYW1pbmc7CisJaW50CQkJdXNlcnM7CisKKwkvKiBmb3IgYnViYmxlIGhhbmRsZXIgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJYnViYmxlX3dvcms7Cit9OworCitlbnVtIHBjbV9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX09OLAorCVNUUkVBTV9TVVNQRU5ELAorfTsKKworI2RlZmluZSBBVURJT19CVUZTICgzKQorI2RlZmluZSBDQVBUVVJFX1NUUkVBTV9FTiAxCitzdHJ1Y3QgcG9zZWlkb25fYXVkaW8geworCXN0cnVjdCB1cmIJCSp1cmJfYXJyYXlbQVVESU9fQlVGU107CisJdW5zaWduZWQgaW50IAkJY29waWVkX3Bvc2l0aW9uOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAgICpjYXB0dXJlX3BjbV9zdWJzdHJlYW07CisKKwl1bnNpZ25lZCBpbnQgCQlyY3ZfcG9zaXRpb247CisJc3RydWN0CXNuZF9jYXJkCSpjYXJkOworCWludCAJCQljYXJkX2Nsb3NlOworCisJaW50IAkJCXVzZXJzOworCWludAkJCXBtX3N0YXRlOworCWVudW0gcGNtX3N0cmVhbV9zdGF0ZSAJY2FwdHVyZV9zdHJlYW07Cit9OworCitzdHJ1Y3QgcmFkaW9fZGF0YSB7CisJX191MzIJCWZtX2ZyZXE7CisJaW50CQl1c2VyczsKKwl1bnNpZ25lZCBpbnQJaXNfcmFkaW9fc3RyZWFtaW5nOworCWludAkJcHJlX2VtcGhhc2lzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmZtX2RldjsKK307CisKKyNkZWZpbmUgRFZCX1NCVUZfTlVNCQk0CisjZGVmaW5lIERWQl9VUkJfQlVGX1NJWkUJMHgyMDAwCitzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgeworCXN0cnVjdCBkdmJfYWRhcHRlcglkdmJfYWRhcDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWR2Yl9mZTsKKwlzdHJ1Y3QgZG14ZGV2CQlkbXhkZXY7CisJc3RydWN0IGR2Yl9kZW11eAlkZW11eDsKKworCWF0b21pY190CQl1c2VyczsKKwlhdG9taWNfdAkJYWN0aXZlX2ZlZWQ7CisKKwkvKiBkYXRhIHRyYW5zZmVyICovCisJczMyCQkJaXNfc3RyZWFtaW5nOworCXN0cnVjdCB1cmIJCSp1cmJfYXJyYXlbRFZCX1NCVUZfTlVNXTsKKwlzdHJ1Y3QgcG9zZWlkb24JCSpwZF9kZXZpY2U7CisJdTgJCQllcF9hZGRyOworCXU4CQkJcmVzZXJ2ZWRbM107CisKKwkvKiBkYXRhIGZvciBwb3dlciByZXN1bWUqLworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBmZV9wYXJhbTsKKworCS8qIGZvciBjaGFubmVsIHNjYW5uaW5nICovCisJaW50CQlwcmV2X2ZyZXE7CisJaW50CQliYW5kd2lkdGg7CisJdW5zaWduZWQgbG9uZwlsYXN0X2ppZmZpZXM7Cit9OworCitzdHJ1Y3QgZnJvbnRfZmFjZSB7CisJLyogdXNlIHRoaXMgZmllbGQgdG8gZGlzdGluZ3Vpc2ggVklERU8gYW5kIFZCSSAqLworCWVudW0gdjRsMl9idWZfdHlwZQl0eXBlOworCisJLyogZm9yIGhvc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJcTsKKworCS8qIHRoZSBicmlkZ2UgZm9yIGhvc3QgYW5kIGRldmljZSAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIJKmN1cnJfZnJhbWU7CisKKwkvKiBmb3IgZGV2aWNlICovCisJc3BpbmxvY2tfdAkJcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKKwlzdHJ1Y3QgcG9zZWlkb24JCSpwZDsKK307CisKK3N0cnVjdCBwb3NlaWRvbiB7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VfbGlzdDsKKworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKworCS8qIGZvciBWNEwyICovCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworCisJLyogaGFyZHdhcmUgaW5mbyAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CisJaW50IAkJCWN1cl90cmFuc2Zlcl9tb2RlOworCisJc3RydWN0IHZpZGVvX2RhdGEJdmlkZW9fZGF0YTsJLyogdmlkZW8gKi8KKwlzdHJ1Y3QgdmJpX2RhdGEJCXZiaV9kYXRhOwkvKiB2YmkJICovCisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvCWF1ZGlvOwkJLyogYXVkaW8gKGFsc2EpICovCisJc3RydWN0IHJhZGlvX2RhdGEJcmFkaW9fZGF0YTsJLyogRk0JICovCisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyCWR2Yl9kYXRhOwkvKiBEVkIJICovCisKKwl1MzIJCQlzdGF0ZTsKKwlzdHJ1Y3QgZmlsZQkJKmZpbGVfZm9yX3N0cmVhbTsgLyogdGhlIGFjdGl2ZSBzdHJlYW0qLworCisjaWZkZWYgQ09ORklHX1BNCisJaW50ICgqcG1fc3VzcGVuZCkoc3RydWN0IHBvc2VpZG9uICopOworCWludCAoKnBtX3Jlc3VtZSkoc3RydWN0IHBvc2VpZG9uICopOworCXBtX21lc3NhZ2VfdAkJbXNnOworCisJc3RydWN0IHdvcmtfc3RydWN0CXBtX3dvcms7CisJdTgJCQlwb3J0bnVtOworI2VuZGlmCit9OworCitzdHJ1Y3QgcG9zZWlkb25fZm9ybWF0IHsKKwljaGFyIAkqbmFtZTsKKwlpbnQJZm91cmNjOwkJIC8qIHZpZGVvNGxpbnV4IDIJICAqLworCWludAlkZXB0aDsJCSAvKiBiaXQvcGl4ZWwJCSAgKi8KKwlpbnQJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG9zZWlkb25fdHZub3JtIHsKKwl2NGwyX3N0ZF9pZAl2NGwyX2lkOworCWNoYXIJCW5hbWVbMTJdOworCXUzMgkJdGxnX3R2bm9ybTsKK307CisKKy8qIHZpZGVvICovCitpbnQgcGRfdmlkZW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7Cit2b2lkIHBkX3ZpZGVvX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHN0b3BfYWxsX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKik7CisKKy8qIGFsc2EgYXVkaW8gKi8KK2ludCBwb3NlaWRvbl9hdWRpb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBwb3NlaWRvbl9hdWRpb19mcmVlKHN0cnVjdCBwb3NlaWRvbiAqKTsKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBwbV9hbHNhX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBtX2Fsc2FfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqKTsKKyNlbmRpZgorCisvKiBkdmIgKi8KK2ludCBwZF9kdmJfdXNiX2RldmljZV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKik7Cit2b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBkX2R2Yl9nZXRfYWRhcHRlcl9udW0oc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOwordm9pZCBkdmJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOworCisvKiBGTSAqLworaW50IHBvc2VpZG9uX2ZtX2luaXQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBvc2VpZG9uX2ZtX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOworc3RydWN0IHZpZGVvX2RldmljZSAqdmRldl9pbml0KHN0cnVjdCBwb3NlaWRvbiAqLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICopOworCisvKiB2ZW5kb3IgY29tbWFuZCBvcHMgKi8KK2ludCBzZW5kX3NldF9yZXEoc3RydWN0IHBvc2VpZG9uKiwgdTgsIHMzMiwgczMyKik7CitpbnQgc2VuZF9nZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiosIHU4LCBzMzIsIHZvaWQqLCBzMzIqLCBzMzIpOworczMyIHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiosIHVuc2lnbmVkIGNoYXIpOworCisvKiBidWxrIHVyYiBhbGxvYy9mcmVlICovCitpbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKKwkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAorCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCisJCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCk7Cit2b2lkIGZyZWVfYWxsX3VyYl9nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0pOworCisvKiBtaXNjICovCit2b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGRlc3Ryb3lfdmlkZW9fZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKip2X2Rldik7CitleHRlcm4gaW50IGRlYnVnX21vZGU7Cit2b2lkIHNldF9kZWJ1Z19tb2RlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IGRlYnVnX21vZGUpOworCisjaWZkZWYgQ09ORklHX1BNCisjZGVmaW5lIGluX2hpYmVybmF0aW9uKHBkKSAocGQtPm1zZy5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpCisjZWxzZQorI2RlZmluZSBpbl9oaWJlcm5hdGlvbihwZCkgKDApCisjZW5kaWYKKyNkZWZpbmUgZ2V0X3BtX2NvdW50KHApIChhdG9taWNfcmVhZCgmKHApLT5pbnRlcmZhY2UtPnBtX3VzYWdlX2NudCkpCisKKyNkZWZpbmUgbG9nKGEsIC4uLikgcHJpbnRrKEtFUk5fREVCVUcgIlx0WyAlcyA6ICUuM2QgXSAiYSJcbiIsIFwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sICAjIyBfX1ZBX0FSR1NfXykKKworLyogZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgbG9ncG0ocGQpIGRvIHtcCisJCQlpZiAoZGVidWdfbW9kZSAmIDB4MTApXAorCQkJCWxvZygpO1wKKwkJfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2dzKGYpIGRvIHsgXAorCQkJaWYgKChkZWJ1Z19tb2RlICYgMHg0KSAmJiBcCisJCQkJKGYpLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIFwKKwkJCQkJbG9nKCJ0eXBlIDogVkJJIik7XAorCQkJCQkJCQlcCisJCQlpZiAoKGRlYnVnX21vZGUgJiAweDgpICYmIFwKKwkJCQkoZiktPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSBcCisJCQkJCWxvZygidHlwZSA6IFZJREVPIik7XAorCQl9IHdoaWxlICgwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtZHZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzM2FlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1kdmIuYwpAQCAtMCwwICsxLDU5MyBAQAorI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9kbXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdGF0aWMgdm9pZCBkdmJfdXJiX2NsZWFudXAoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpOworCitzdGF0aWMgaW50IGR2Yl9iYW5kd2lkdGhbXVsyXSA9IHsKKwl7IFRMR19CV184LCBCQU5EV0lEVEhfOF9NSFogfSwKKwl7IFRMR19CV183LCBCQU5EV0lEVEhfN19NSFogfSwKKwl7IFRMR19CV182LCBCQU5EV0lEVEhfNl9NSFogfQorfTsKK3N0YXRpYyBpbnQgZHZiX2JhbmR3aWR0aF9sZW5ndGggPSBBUlJBWV9TSVpFKGR2Yl9iYW5kd2lkdGgpOworCitzdGF0aWMgczMyIGR2Yl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpOworc3RhdGljIGludCBwb3NlaWRvbl9jaGVja19tb2RlX2R2YnQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cyA9IDA7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwgQlVMS19BTFRFUk5BVEVfSUZBQ0UpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNldF90dW5lcl9tb2RlKHBkLCBUTEdfTU9ERV9DQVBTX0RWQl9UKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc2lnbmFsIHNvdXJjZSAqLworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgU0dOTF9TUkNfU0VMLCBUTEdfU0lHX1NSQ19BTlRFTk5BLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldHxjbWRfc3RhdHVzKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFjcXVpcmUgOgorICogCTEgPT0gb3BlbgorICogCTAgPT0gcmVsZWFzZQorICovCitzdGF0aWMgaW50IHBvc2VpZG9uX3RzX2J1c19jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgYWNxdWlyZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkX2R2YiA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHBkX2R2Yl9hZGFwdGVyLCBkdmJfZmUpOworCWlmIChhY3F1aXJlKSB7CisJCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwkJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG9wZW5fb3V0OworCQl9CisKKwkJaWYgKHBkLT5zdGF0ZSAmJiAhKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RWQlQpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG9wZW5fb3V0OworCQl9CisKKwkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCQlpZiAoMCA9PSBwZC0+c3RhdGUpIHsKKwkJCXJldCA9IHBvc2VpZG9uX2NoZWNrX21vZGVfZHZidChwZCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwkJCQlnb3RvIG9wZW5fb3V0OworCQkJfQorCQkJcGQtPnN0YXRlIHw9IFBPU0VJRE9OX1NUQVRFX0RWQlQ7CisJCQlwZF9kdmItPmJhbmR3aWR0aCA9IDA7CisJCQlwZF9kdmItPnByZXZfZnJlcSA9IDA7CisJCX0KKwkJYXRvbWljX2luYygmcGRfZHZiLT51c2Vycyk7CisJCWtyZWZfZ2V0KCZwZC0+a3JlZik7CitvcGVuX291dDoKKwkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJfSBlbHNlIHsKKwkJZHZiX3N0b3Bfc3RyZWFtaW5nKHBkX2R2Yik7CisKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBkX2R2Yi0+dXNlcnMpKSB7CisJCQltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJCQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0RWQlQ7CisJCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwkJfQorCQlrcmVmX3B1dCgmcGQtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7CisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcG9zZWlkb25fZmVfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+cG1fc3VzcGVuZCA9IE5VTEw7CisJcGQtPnBtX3Jlc3VtZSAgPSBOVUxMOworI2VuZGlmCit9CisKK3N0YXRpYyBzMzIgcG9zZWlkb25fZmVfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gc2F0aXNmeSB0aGUgY29uZGl0aW9ucywgZWxzZSByZXR1cm4gZmFsc2UuCisgKi8KK3N0YXRpYyBib29sIGNoZWNrX3NjYW5fb2soX191MzIgZnJlcSwgaW50IGJhbmR3aWR0aCwKKwkJCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYmFuZHdpZHRoIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGFkYXB0ZXItPnByZXZfZnJlcSA9PSBmcmVxCisJCSYmIGFkYXB0ZXItPmJhbmR3aWR0aCA9PSBiYW5kd2lkdGgpIHsKKwkJbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7CisJCXVuc2lnbmVkIGludCBtc2VjIDsKKworCQltc2VjID0gamlmZmllc190b19tc2VjcyhhYnMobmwpKTsKKwkJcmV0dXJuIG1zZWMgPiAxNTAwMCA/IHRydWUgOiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZmlybXdhcmUgZGVsYXlzIHRvbyBsb25nIGZvciBhbiBpbnZhbGlkIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGludCBmd19kZWxheV9vdmVyZmxvdyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7CisJdW5zaWduZWQgaW50IG1zZWMgOworCisJbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoYWJzKG5sKSk7CisJcmV0dXJuIG1zZWMgPiA4MDAgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fc2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwOworCXMzMiBpLCBiYW5kd2lkdGggPSAtMTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHZiX2JhbmR3aWR0aF9sZW5ndGg7IGkrKykKKwkJaWYgKGZlcC0+dS5vZmRtLmJhbmR3aWR0aCA9PSBkdmJfYmFuZHdpZHRoW2ldWzFdKQorCQkJYmFuZHdpZHRoID0gZHZiX2JhbmR3aWR0aFtpXVswXTsKKworCWlmIChjaGVja19zY2FuX29rKGZlcC0+ZnJlcXVlbmN5LCBiYW5kd2lkdGgsIHBkX2R2YikpIHsKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULAorCQkJCQlmZXAtPmZyZXF1ZW5jeSAvIDEwMDAsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJCWxvZygiZXJyb3IgbGluZSIpOworCQkJZ290byBmcm9udF9vdXQ7CisJCX0KKworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIERWQlRfQkFORFdfU0VMLAorCQkJCQkJYmFuZHdpZHRoLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7CisJCQlsb2coImVycm9yIGxpbmUiKTsKKwkJCWdvdG8gZnJvbnRfb3V0OworCQl9CisKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJCWxvZygiZXJyb3IgbGluZSIpOworCQkJZ290byBmcm9udF9vdXQ7CisJCX0KKworCQkvKiBzYXZlIHRoZSBjb250ZXh0IGZvciBmdXR1cmUgKi8KKwkJbWVtY3B5KCZwZF9kdmItPmZlX3BhcmFtLCBmZXAsIHNpemVvZigqZmVwKSk7CisJCXBkX2R2Yi0+YmFuZHdpZHRoID0gYmFuZHdpZHRoOworCQlwZF9kdmItPnByZXZfZnJlcSA9IGZlcC0+ZnJlcXVlbmN5OworCQlwZF9kdmItPmxhc3RfamlmZmllcyA9IGppZmZpZXM7CisJfQorZnJvbnRfb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1fZHZiX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisJZHZiX3N0b3Bfc3RyZWFtaW5nKHBkX2R2Yik7CisJZHZiX3VyYl9jbGVhbnVwKHBkX2R2Yik7CisJbXNsZWVwKDUwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fZHZiX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCXBvc2VpZG9uX2NoZWNrX21vZGVfZHZidChwZCk7CisJbXNsZWVwKDMwMCk7CisJcG9zZWlkb25fc2V0X2ZlKCZwZF9kdmItPmR2Yl9mZSwgJnBkX2R2Yi0+ZmVfcGFyYW0pOworCisJZHZiX3N0YXJ0X3N0cmVhbWluZyhwZF9kdmIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzMzIgcG9zZWlkb25fZmVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisjaWZkZWYgQ09ORklHX1BNCisJcGQtPnBtX3N1c3BlbmQgPSBwbV9kdmJfc3VzcGVuZDsKKwlwZC0+cG1fcmVzdW1lICA9IHBtX2R2Yl9yZXN1bWU7CisjZW5kaWYKKwltZW1zZXQoJnBkX2R2Yi0+ZmVfcGFyYW0sIDAsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fZ2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCW1lbWNweShmZXAsICZwZF9kdmItPmZlX3BhcmFtLCBzaXplb2YoKmZlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX2ZlX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKK3sKKwl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJczMyIHJldCA9IC0xLCBjbWRfc3RhdHVzOworCXN0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyBzdGF0dXMgPSB7fTsKKworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpCisJCXJldHVybiAtRUJVU1k7CisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0RWQl9ULAorCQkJCSZzdGF0dXMsICZjbWRfc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJbG9nKCJnZXQgdHVuZXIgc3RhdHVzIGVycm9yIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZWJ1Z19tb2RlKQorCQlsb2coIlAgOiAlZCwgTCAlZCwgTEIgOiVkIiwgc3RhdHVzLnNpZ19wcmVzZW50LAorCQkJc3RhdHVzLnNpZ19sb2NrZWQsIHN0YXR1cy5zaWdfbG9ja19idXN5KTsKKworCWlmIChzdGF0dXMuc2lnX2xvY2tfYnVzeSkgeworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0YXR1cy5zaWdfcHJlc2VudCB8fCBzdGF0dXMuc2lnX2xvY2tlZCkgeworCQkqc3RhdCB8PSBGRV9IQVNfTE9DSyB8IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUgorCQkJCXwgRkVfSEFTX1NZTkMgfCBGRV9IQVNfVklURVJCSTsKKwl9IGVsc2UgeworCQlpZiAoZndfZGVsYXlfb3ZlcmZsb3coJnBkLT5kdmJfZGF0YSkpCisJCQkqc3RhdCB8PSBGRV9USU1FRE9VVDsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCB0dW5lcl9iZXJfcmF0ZV9zIHRsZ19iZXIgPSB7fTsKKwlzMzIgcmV0ID0gLTEsIGNtZF9zdGF0dXM7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9CRVJfUkFURSwgMCwKKwkJCQkmdGxnX2JlciwgJmNtZF9zdGF0dXMsIHNpemVvZih0bGdfYmVyKSk7CisJaWYgKHJldCB8IGNtZF9zdGF0dXMpCisJCWdvdG8gb3V0OworCSpiZXIgPSB0bGdfYmVyLmJlcl9yYXRlOworb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzMzIgcG9zZWlkb25fcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyBzdGF0dXMgPSB7fTsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1czsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRFZCX1QsCisJCQkJJnN0YXR1cywgJmNtZF9zdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0IHwgY21kX3N0YXR1cykKKwkJZ290byBvdXQ7CisJaWYgKChzdGF0dXMuc2lnX3ByZXNlbnQgfHwgc3RhdHVzLnNpZ19sb2NrZWQpICYmICFzdGF0dXMuc2lnX3N0cmVuZ3RoKQorCQkqc3RyZW5ndGggPSAweEZGRkY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzdGF0dXMuc2lnX3N0cmVuZ3RoOworb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfdW5jX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1bmMpCit7CisJKnVuYyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBwb3NlaWRvbl9mcm9udGVuZF9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lCQk9ICJQb3NlaWRvbiBEVkItVCIsCisJCS50eXBlCQk9IEZFX09GRE0sCisJCS5mcmVxdWVuY3lfbWluCT0gMTc0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgPSA4NjIwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJICA9IDYyNTAwLC8qIEZJWE1FICovCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfAorCQkJRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX1JFQ09WRVIgfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCX0sCisKKwkucmVsZWFzZSA9IHBvc2VpZG9uX2ZlX3JlbGVhc2UsCisKKwkuaW5pdCA9IHBvc2VpZG9uX2ZlX2luaXQsCisJLnNsZWVwID0gcG9zZWlkb25fZmVfc2xlZXAsCisKKwkuc2V0X2Zyb250ZW5kID0gcG9zZWlkb25fc2V0X2ZlLAorCS5nZXRfZnJvbnRlbmQgPSBwb3NlaWRvbl9nZXRfZmUsCisJLmdldF90dW5lX3NldHRpbmdzID0gcG9zZWlkb25fZmVfZ2V0X3R1bmVfc2V0dGluZ3MsCisKKwkucmVhZF9zdGF0dXMJPSBwb3NlaWRvbl9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIJPSBwb3NlaWRvbl9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBwb3NlaWRvbl9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIJPSBwb3NlaWRvbl9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2Nrcwk9IHBvc2VpZG9uX3JlYWRfdW5jX2Jsb2NrcywKKworCS50c19idXNfY3RybCA9IHBvc2VpZG9uX3RzX2J1c19jdHJsLAorfTsKKworc3RhdGljIHZvaWQgZHZiX3VyYl9pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gdXJiLT5jb250ZXh0OworCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSAmcGRfZHZiLT5kZW11eDsKKwlzMzIgcmV0OworCisJaWYgKCFwZF9kdmItPmlzX3N0cmVhbWluZyB8fCB1cmItPnN0YXR1cykgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykKKwkJCWdvdG8gcmVzZW5kOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4pCisJCWR2Yl9kbXhfc3dmaWx0ZXIoZGVtdXgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOworCWVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4gLSA0KSB7CisJCWludCBvZmZzZXQ7CisJCXU4ICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKgorCQkgKiBUaGUgcGFja2V0IHNpemUgaXMgNTEyLAorCQkgKiBsYXN0IHBhY2tldCBjb250YWlucyA0NTYgYnl0ZXMgdHNwIGRhdGEKKwkJICovCisJCWZvciAob2Zmc2V0ID0gNDU2OyBvZmZzZXQgPCBsZW47IG9mZnNldCArPSA1MTIpIHsKKwkJCWlmICghc3RybmNtcChidWYgKyBvZmZzZXQsICJEVkhTIiwgNCkpIHsKKwkJCQlkdmJfZG14X3N3ZmlsdGVyKGRlbXV4LCBidWYsIG9mZnNldCk7CisJCQkJaWYgKGxlbiA+IG9mZnNldCArIDUyICsgNCkgeworCQkJCQkvKjE2IGJ5dGVzIHRyYWlsZXIgKyAzNiBieXRlcyBwYWRkaW5nICovCisJCQkJCWJ1ZiArPSBvZmZzZXQgKyA1MjsKKwkJCQkJbGVuIC09IG9mZnNldCArIDUyICsgNDsKKwkJCQkJZHZiX2RteF9zd2ZpbHRlcihkZW11eCwgYnVmLCBsZW4pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworcmVzZW5kOgorCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJbG9nKCIgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgZHZiX3VyYl9pbml0KHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCWlmIChwZF9kdmItPnVyYl9hcnJheVswXSkKKwkJcmV0dXJuIDA7CisKKwlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhwZF9kdmItPnVyYl9hcnJheSwgRFZCX1NCVUZfTlVNLAorCQkJcGRfZHZiLT5wZF9kZXZpY2UtPnVkZXYsIHBkX2R2Yi0+ZXBfYWRkciwKKwkJCURWQl9VUkJfQlVGX1NJWkUsIEdGUF9LRVJORUwsCisJCQlkdmJfdXJiX2lycSwgcGRfZHZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHZiX3VyYl9jbGVhbnVwKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCWZyZWVfYWxsX3VyYl9nZW5lcmljKHBkX2R2Yi0+dXJiX2FycmF5LCBEVkJfU0JVRl9OVU0pOworfQorCitzdGF0aWMgczMyIGR2Yl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IHBkX2R2Yi0+cGRfZGV2aWNlOworCWludCByZXQgPSAwOworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWlmICghcGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKKwkJczMyIGksIGNtZF9zdGF0dXMgPSAwOworCQkvKgorCQkgKiBPbmNlIHVwb24gYSB0aW1lLCB0aGVyZSB3YXMgYSBkaWZmaWN1bHQgYnVnIGx5aW5nIGhlcmUuCisJCSAqIHJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisJCSAqLworCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCAxLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQkJZ290byBvdXQ7CisKKwkJcmV0ID0gZHZiX3VyYl9pbml0KHBkX2R2Yik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAxOworCQlmb3IgKGkgPSAwOyBpIDwgRFZCX1NCVUZfTlVNOyBpKyspIHsKKwkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkX2R2Yi0+dXJiX2FycmF5W2ldLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKHJldCkgeworCQkJCWxvZygiIHN1Ym1pdCB1cmIgZXJyb3IgJWQiLCByZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZHZiX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBwZF9kdmItPnBkX2RldmljZTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAocGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKKwkJczMyIGksIHJldCwgY21kX3N0YXR1cyA9IDA7CisKKwkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBEVkJfU0JVRl9OVU07IGkrKykKKwkJCWlmIChwZF9kdmItPnVyYl9hcnJheVtpXSkKKwkJCQl1c2Jfa2lsbF91cmIocGRfZHZiLT51cmJfYXJyYXlbaV0pOworCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLAorCQkJCQkmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQkJbG9nKCJlcnJvciIpOworCX0KKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKK30KKworc3RhdGljIGludCBwZF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9IGZlZWQtPmRlbXV4LT5wcml2OworCWludCByZXQgPSAwOworCisJaWYgKCFwZF9kdmIpCisJCXJldHVybiAtMTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpID09IDEpCisJCXJldCA9IGR2Yl9zdGFydF9zdHJlYW1pbmcocGRfZHZiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBkX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSBmZWVkLT5kZW11eC0+cHJpdjsKKworCWlmICghcGRfZHZiKQorCQlyZXR1cm4gLTE7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpKQorCQlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKKwlyZXR1cm4gMDsKK30KKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CitpbnQgcGRfZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKKwlpbnQgcmV0ID0gMDsKKworCXBkX2R2Yi0+ZXBfYWRkciA9IDB4ODI7CisJYXRvbWljX3NldCgmcGRfZHZiLT51c2VycywgMCk7CisJYXRvbWljX3NldCgmcGRfZHZiLT5hY3RpdmVfZmVlZCwgMCk7CisJcGRfZHZiLT5wZF9kZXZpY2UgPSBwZDsKKworCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwLAorCQkJCSJQb3NlaWRvbiBkdmJ0IGFkYXB0ZXIiLAorCQkJCVRISVNfTU9EVUxFLAorCQkJCU5VTEwgLyogZm9yIGhpYmVybmF0aW9uIGNvcnJlY3RseSovLAorCQkJCWFkYXB0ZXJfbnIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMTsKKworCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCisJcGRfZHZiLT5kdmJfZmUuZGVtb2R1bGF0b3JfcHJpdiA9IHBkOworCW1lbWNweSgmcGRfZHZiLT5kdmJfZmUub3BzLCAmcG9zZWlkb25fZnJvbnRlbmRfb3BzLAorCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZwZF9kdmItPmR2Yl9hZGFwLCAmcGRfZHZiLT5kdmJfZmUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMjsKKworCS8qIHJlZ2lzdGVyIGRlbXV4IGRldmljZSAqLworCWR2YmRlbXV4ID0gJnBkX2R2Yi0+ZGVtdXg7CisJZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOworCWR2YmRlbXV4LT5wcml2ID0gcGRfZHZiOworCWR2YmRlbXV4LT5mZWVkbnVtID0gZHZiZGVtdXgtPmZpbHRlcm51bSA9IDY0OworCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gcGRfc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gcGRfc3RvcF9mZWVkOworCWR2YmRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKKworCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IzOworCisJcGRfZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gcGRfZHZiLT5kZW11eC5maWx0ZXJudW07CisJcGRfZHZiLT5kbXhkZXYuZGVtdXggPSAmcGRfZHZiLT5kZW11eC5kbXg7CisJcGRfZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKworCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmcGRfZHZiLT5kbXhkZXYsICZwZF9kdmItPmR2Yl9hZGFwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjM7CisJcmV0dXJuIDA7CisKK2Vycm9yMzoKKwlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCgmcGRfZHZiLT5kdmJfZmUpOworZXJyb3IyOgorCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJnBkX2R2Yi0+ZHZiX2FkYXApOworZXJyb3IxOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGRfZHZiLT51c2VycykgIT0gMAorCQl8fCBhdG9taWNfcmVhZCgmcGRfZHZiLT5hY3RpdmVfZmVlZCkgIT0gMCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKwl9CisJZHZiX2RteGRldl9yZWxlYXNlKCZwZF9kdmItPmRteGRldik7CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoJnBkX2R2Yi0+ZHZiX2ZlKTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwKTsKKwlwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHBkKTsKK30KKwordm9pZCBwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJZHZiX3VyYl9jbGVhbnVwKHBkX2R2Yik7Cit9CisKK2ludCBwZF9kdmJfZ2V0X2FkYXB0ZXJfbnVtKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCXJldHVybiBwZF9kdmItPmR2Yl9hZGFwLm51bTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjBlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogZGV2aWNlIGRyaXZlciBmb3IgVGVsZWdlbnQgdGxnMjMwMCBiYXNlZCBUViBjYXJkcworICoKKyAqIEF1dGhvciA6CisgKiAJS2FuZyBZb25nCTxrYW5neW9uZ0B0ZWxlZ2VudC5jb20+CisgKiAJWmhhbmcgWGlhb2JpbmcJPHhiemhhbmdAdGVsZWdlbnQuY29tPgorICogCUh1YW5nIFNoaWppZQk8enl6aWlpQHRlbGVnZW50LmNvbT4gb3IgPHNoaWppZThAZ21haWwuY29tPgorICoKKyAqCShjKSAyMDA5IFRlbGVnZW50IFN5c3RlbXMKKyAqCShjKSAyMDEwIFRlbGVnZW50IFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisKKyNkZWZpbmUgVkVORE9SX0lECTB4MUIyNAorI2RlZmluZSBQUk9EVUNUX0lECTB4NDAwMQorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhWRU5ET1JfSUQsIFBST0RVQ1RfSUQsIDI1NSwgMSwgMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCwgMjU1LCAxLCAxKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitpbnQgZGVidWdfbW9kZTsKK21vZHVsZV9wYXJhbShkZWJ1Z19tb2RlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19tb2RlLCAiMCA9IGRpc2FibGUsIDEgPSBlbmFibGUsIDIgPSB2ZXJib3NlIik7CisKK2NvbnN0IGNoYXIgKmZpcm13YXJlX25hbWUgPSAidGxnMjMwMF9maXJtd2FyZS5iaW4iOworc3RydWN0IHVzYl9kcml2ZXIgcG9zZWlkb25fZHJpdmVyOworc3RhdGljIExJU1RfSEVBRChwZF9kZXZpY2VfbGlzdCk7CisKKy8qCisgKiBzZW5kIHNldCByZXF1ZXN0IHRvIFVTQiBmaXJtd2FyZS4KKyAqLworczMyIHNlbmRfc2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLCBzMzIgKmNtZF9zdGF0dXMpCit7CisJczMyIHJldDsKKwlzOCAgZGF0YVszMl0gPSB7fTsKKwl1MTYgbG93ZXJfMTYsIHVwcGVyXzE2OworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJbWRlbGF5KDMwKTsKKworCWlmIChwYXJhbSA9PSAwKSB7CisJCXVwcGVyXzE2ID0gbG93ZXJfMTYgPSAwOworCX0gZWxzZSB7CisJCS8qIHNlbmQgMzIgYml0IHBhcmFtIGFzICB0d28gMTYgYml0IHBhcmFtLGxpdHRsZSBlbmRpYW4gKi8KKwkJbG93ZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKHBhcmFtICYgMHhmZmZmKTsKKwkJdXBwZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKChwYXJhbSA+PiAxNikgJiAweGZmZmYpOworCX0KKwlyZXQgPSB1c2JfY29udHJvbF9tc2cocGQtPnVkZXYsCisJCQkgdXNiX3JjdmN0cmxwaXBlKHBkLT51ZGV2LCAwKSwKKwkJCSBSRVFfU0VUX0NNRCB8IGNtZGlkLAorCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJIGxvd2VyXzE2LAorCQkJIHVwcGVyXzE2LAorCQkJICZkYXRhLAorCQkJIHNpemVvZigqY21kX3N0YXR1cyksCisJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCisJaWYgKCFyZXQpIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9IGVsc2UgeworCQkvKiAgMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzICAgKi8KKwkJbWVtY3B5KChjaGFyICopY21kX3N0YXR1cywgJihkYXRhWzBdKSwgc2l6ZW9mKCpjbWRfc3RhdHVzKSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogc2VuZCBnZXQgcmVxdWVzdCB0byBQb3NlaWRvbiBmaXJtd2FyZS4KKyAqLworczMyIHNlbmRfZ2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLAorCQkJdm9pZCAqYnVmLCBzMzIgKmNtZF9zdGF0dXMsIHMzMiBkYXRhbGVuKQoreworCXMzMiByZXQ7CisJczggZGF0YVsxMjhdID0ge307CisJdTE2IGxvd2VyXzE2LCB1cHBlcl8xNjsKKworCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1kZWxheSgzMCk7CisJaWYgKHBhcmFtID09IDApIHsKKwkJdXBwZXJfMTYgPSBsb3dlcl8xNiA9IDA7CisJfSBlbHNlIHsKKwkJLypzZW5kIDMyIGJpdCBwYXJhbSBhcyB0d28gMTYgYml0IHBhcmFtLCBsaXR0bGUgZW5kaWFuICovCisJCWxvd2VyXzE2ID0gKHVuc2lnbmVkIHNob3J0KShwYXJhbSAmIDB4ZmZmZik7CisJCXVwcGVyXzE2ID0gKHVuc2lnbmVkIHNob3J0KSgocGFyYW0gPj4gMTYpICYgMHhmZmZmKTsKKwl9CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBkLT51ZGV2LAorCQkJIHVzYl9yY3ZjdHJscGlwZShwZC0+dWRldiwgMCksCisJCQkgUkVRX0dFVF9DTUQgfCBjbWRpZCwKKwkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSBsb3dlcl8xNiwKKwkJCSB1cHBlcl8xNiwKKwkJCSAmZGF0YSwKKwkJCSAoZGF0YWxlbiArIHNpemVvZigqY21kX3N0YXR1cykpLAorCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiAtRU5YSU87CisJfSBlbHNlIHsKKwkJLyogMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzLCByZW1haW5pbmcgZGF0YSBpbnRvIGNtZF9kYXRhICovCisJCW1lbWNweSgoY2hhciAqKWNtZF9zdGF0dXMsICZkYXRhWzBdLCBzaXplb2YoKmNtZF9zdGF0dXMpKTsKKwkJbWVtY3B5KChjaGFyICopYnVmLCAmZGF0YVtzaXplb2YoKmNtZF9zdGF0dXMpXSwgZGF0YWxlbik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX25vdGlmaWVyX2Jsb2NrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZHVtbXkpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgorCQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnBkX2RldmljZV9saXN0KSB7CisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwkJCWludCByYyA9IDA7CisKKwkJCXBkID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBwb3NlaWRvbiwgZGV2aWNlX2xpc3QpOworCQkJdWRldiA9IHBkLT51ZGV2OworCQkJaWZhY2UgPSBwZC0+aW50ZXJmYWNlOworCisJCQkvKiBJdCB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcmVsb2FkIHRoZSBmaXJtd2FyZSAqLworCQkJcmMgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIGlmYWNlKTsKKwkJCWlmIChyYyA+PSAwKSB7CisJCQkJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwkJCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbG9nKCJldmVudCA6JWxkXG4iLCBldmVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZlciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBtX25vdGlmaWVyX2Jsb2NrLAorfTsKKworaW50IHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHVuc2lnbmVkIGNoYXIgbW9kZSkKK3sKKwlzMzIgcmV0LCBjbWRfc3RhdHVzOworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX01PREVfU0VMRUNULCBtb2RlLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQlyZXR1cm4gLUVOWElPOworCXJldHVybiAwOworfQorCit2b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBwb3NlaWRvbiwga3JlZik7CisKKwlpZiAoIXBkKQorCQlyZXR1cm47CisJbGlzdF9kZWxfaW5pdCgmcGQtPmRldmljZV9saXN0KTsKKworCXBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAocGQpOworCS8qIGNsZWFuX2F1ZGlvX2RhdGEoJnBkLT5hdWRpb19kYXRhKTsqLworCisJaWYgKHBkLT51ZGV2KSB7CisJCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKKwkJcGQtPnVkZXYgPSBOVUxMOworCX0KKwlpZiAocGQtPmludGVyZmFjZSkgeworCQl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7CisJCXBkLT5pbnRlcmZhY2UgPSBOVUxMOworCX0KKwlrZnJlZShwZCk7CisJbG9nKCk7Cit9CisKK3N0YXRpYyBpbnQgZmlybXdhcmVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldCA9IDAsIGFjdHVhbF9sZW5ndGg7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdm9pZCAqZndidWYgPSBOVUxMOworCXNpemVfdCBmd2xlbmd0aCA9IDAsIG9mZnNldDsKKwlzaXplX3QgbWF4X3BhY2tldF9zaXplOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpcm13YXJlX25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJbG9nKCJkb3dubG9hZCBlcnIgOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZndsZW5ndGggPSBmdy0+c2l6ZTsKKworCWZ3YnVmID0ga3phbGxvYyhmd2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmd2J1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KGZ3YnVmLCBmdy0+ZGF0YSwgZndsZW5ndGgpOworCisJbWF4X3BhY2tldF9zaXplID0gdWRldi0+ZXBfb3V0WzB4MV0tPmRlc2Mud01heFBhY2tldFNpemU7CisJbG9nKCJcdFx0IGRvd25sb2FkIHNpemUgOiAlZCIsIChpbnQpbWF4X3BhY2tldF9zaXplKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZndsZW5ndGg7IG9mZnNldCArPSBtYXhfcGFja2V0X3NpemUpIHsKKwkJYWN0dWFsX2xlbmd0aCA9IDA7CisJCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZSh1ZGV2LCAweDAxKSwgLyogZXAgMSAqLworCQkJCWZ3YnVmICsgb2Zmc2V0LAorCQkJCW1pbihtYXhfcGFja2V0X3NpemUsIGZ3bGVuZ3RoIC0gb2Zmc2V0KSwKKwkJCQkmYWN0dWFsX2xlbmd0aCwKKwkJCQlIWiAqIDEwKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKwlrZnJlZShmd2J1Zik7CitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zZWlkb24gKmdldF9wZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyogb25lLXRvLW9uZSBtYXAgOiBwb3NlaWRvbnt9IDwtLS0tPiB1c2JfZGV2aWNle30ncyBwb3J0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21hcF9mbGFncyhzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlwZC0+cG9ydG51bSA9IHVkZXYtPnBvcnRudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9hdXRvcG1fcmVmKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJcmV0dXJuICBwZC0+dmlkZW9fZGF0YS51c2VycyArIHBkLT52YmlfZGF0YS51c2VycyArIHBkLT5hdWRpby51c2VycworCQkrIGF0b21pY19yZWFkKCZwZC0+ZHZiX2RhdGEudXNlcnMpICsgcGQtPnJhZGlvX2RhdGEudXNlcnM7Cit9CisKKy8qIGZpeHVwIHNvbWV0aGluZyBmb3IgcG9zZWlkb24gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpmaXh1cChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCWludCBjb3VudDsKKworCS8qIG9sZCB1ZGV2IGFuZCBpbnRlcmZhY2UgaGF2ZSBnb25lLCBzbyBwdXQgYmFjayByZWZlcmVuY2UgLiAqLworCWNvdW50ID0gZ2V0X2F1dG9wbV9yZWYocGQpOworCWxvZygiY291bnQgOiAlZCwgcmVmIGNvdW50IDogJWQiLCBjb3VudCwgZ2V0X3BtX2NvdW50KHBkKSk7CisJd2hpbGUgKGNvdW50LS0pCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwkvKnVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsgKi8KKworCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKKwl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7CisJbG9nKCJldmVudCA6ICVkXG4iLCBwZC0+bXNnLmV2ZW50KTsKKwlyZXR1cm4gcGQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zZWlkb24gKmZpbmRfb2xkX3Bvc2VpZG9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkLCAmcGRfZGV2aWNlX2xpc3QsIGRldmljZV9saXN0KSB7CisJCWlmIChwZC0+cG9ydG51bSA9PSB1ZGV2LT5wb3J0bnVtICYmIGluX2hpYmVybmF0aW9uKHBkKSkKKwkJCXJldHVybiBmaXh1cChwZCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBJcyB0aGUgY2FyZCB3b3JraW5nIG5vdyA/ICovCitzdGF0aWMgaW5saW5lIGludCBpc193b3JraW5nKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJcmV0dXJuIGdldF9wbV9jb3VudChwZCkgPiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRmKTsKKworCWlmICghcGQpCisJCXJldHVybiAwOworCWlmICghaXNfd29ya2luZyhwZCkpIHsKKwkJaWYgKGdldF9wbV9jb3VudChwZCkgPD0gMCAmJiAhaW5faGliZXJuYXRpb24ocGQpKSB7CisJCQlwZC0+bXNnLmV2ZW50ID0gUE1fRVZFTlRfQVVUT19TVVNQRU5EOworCQkJcGQtPnBtX3Jlc3VtZSA9IE5VTEw7IC8qICBhIGdvb2QgZ3VhcmQgKi8KKwkJCXByaW50ayhLRVJOX0RFQlVHICJcblx0KyBUTEcyMzAwIGF1dG8gc3VzcGVuZCArXG5cbiIpOworCQl9CisJCXJldHVybiAwOworCX0KKwlwZC0+bXNnID0gbXNnOyAvKiBzYXZlIGl0IGhlcmUgKi8KKwlsb2dwbShwZCk7CisJcmV0dXJuIHBkLT5wbV9zdXNwZW5kID8gcGQtPnBtX3N1c3BlbmQocGQpIDogMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRmKTsKKworCWlmICghcGQpCisJCXJldHVybiAwOworCXByaW50ayhLRVJOX0RFQlVHICJcblx0ICsrIFRMRzIzMDAgcmVzdW1lICsrXG5cbiIpOworCisJaWYgKCFpc193b3JraW5nKHBkKSkgeworCQlpZiAoUE1fRVZFTlRfQVVUT19TVVNQRU5EID09IHBkLT5tc2cuZXZlbnQpCisJCQlwZC0+bXNnID0gUE1TR19PTjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpIHsKKwkJbG9ncG0ocGQpOworCQlyZXR1cm4gMDsKKwl9CisJbG9ncG0ocGQpOworCXJldHVybiBwZC0+cG1fcmVzdW1lID8gcGQtPnBtX3Jlc3VtZShwZCkgOiAwOworfQorCitzdGF0aWMgdm9pZCBoaWJlcm5hdGlvbl9yZXN1bWUoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHBvc2VpZG9uLCBwbV93b3JrKTsKKwlpbnQgY291bnQ7CisKKwlwZC0+bXNnLmV2ZW50ID0gMDsgLyogY2xlYXIgaXQgaGVyZSAqLworCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRElTQ09OTkVDVDsKKworCS8qIHNldCB0aGUgbmV3IGludGVyZmFjZSdzIHJlZmVyZW5jZSAqLworCWNvdW50ID0gZ2V0X2F1dG9wbV9yZWYocGQpOworCXdoaWxlIChjb3VudC0tKQorCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisKKwkvKiByZXN1bWUgdGhlIGNvbnRleHQgKi8KKwlsb2dwbShwZCk7CisJaWYgKHBkLT5wbV9yZXN1bWUpCisJCXBkLT5wbV9yZXN1bWUocGQpOworfQorI2Vsc2UgLyogQ09ORklHX1BNIGlzIG5vdCBlbmFibGVkOiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zZWlkb24gKmZpbmRfb2xkX3Bvc2VpZG9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21hcF9mbGFncyhzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBjaGVja19maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50ICpkb3duX2Zpcm13YXJlKQoreworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0OworCXN0cnVjdCBjbWRfZmlybXdhcmVfdmVyc19zICpjbWRfZmlybTsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpjbWRfZmlybSkgKyBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSBSRVFfR0VUX0NNRCB8IEdFVF9GV19JRCwKKwkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAwLAorCQkJIDAsCisJCQkgYnVmLAorCQkJIHNpemVvZigqY21kX2Zpcm0pICsgc2l6ZW9mKHUzMiksCisJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWtmcmVlKGJ1Zik7CisKKwlpZiAocmV0IDwgMCkgeworCQkqZG93bl9maXJtd2FyZSA9IDE7CisJCXJldHVybiBmaXJtd2FyZV9kb3dubG9hZCh1ZGV2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmV3X29uZSA9IDA7CisKKwkvKiBkb3dubG9hZCBmaXJtd2FyZSAqLworCWNoZWNrX2Zpcm13YXJlKHVkZXYsICZyZXQpOworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJLyogRG8gSSByZWNvdmVyeSBmcm9tIHRoZSBoaWJlcm5hdGUgPyAqLworCXBkID0gZmluZF9vbGRfcG9zZWlkb24odWRldik7CisJaWYgKCFwZCkgeworCQlwZCA9IGt6YWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWtyZWZfaW5pdCgmcGQtPmtyZWYpOworCQlzZXRfbWFwX2ZsYWdzKHBkLCB1ZGV2KTsKKwkJbmV3X29uZSA9IDE7CisJfQorCisJcGQtPnVkZXYJPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwlwZC0+aW50ZXJmYWNlCT0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHBkKTsKKworCWlmIChuZXdfb25lKSB7CisJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKworCQlsb2dwbShwZCk7CisJCW11dGV4X2luaXQoJnBkLT5sb2NrKTsKKworCQkvKiByZWdpc3RlciB2NGwyIGRldmljZSAqLworCQlzbnByaW50ZihwZC0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKHBkLT52NGwyX2Rldi5uYW1lKSwgIiVzICVzIiwKKwkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKKwkJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnBkLT52NGwyX2Rldik7CisKKwkJLyogcmVnaXN0ZXIgZGV2aWNlcyBpbiBkaXJlY3RvcnkgL2RldiAqLworCQlyZXQgPSBwZF92aWRlb19pbml0KHBkKTsKKwkJcG9zZWlkb25fYXVkaW9faW5pdChwZCk7CisJCXBvc2VpZG9uX2ZtX2luaXQocGQpOworCQlwZF9kdmJfdXNiX2RldmljZV9pbml0KHBkKTsKKworCQlJTklUX0xJU1RfSEVBRCgmcGQtPmRldmljZV9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcGQtPmRldmljZV9saXN0LCAmcGRfZGV2aWNlX2xpc3QpOworCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAxKTsKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+dWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAwOworCXBkLT51ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IEhaICogUE1fU1VTUEVORF9ERUxBWTsKKworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpIHsKKwkJSU5JVF9XT1JLKCZwZC0+cG1fd29yaywgaGliZXJuYXRpb25fcmVzdW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcGQtPnBtX3dvcmspOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb3NlaWRvbl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRlcmZhY2UpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuOworCWxvZ3BtKHBkKTsKKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcGQtPnN0YXRlIHw9IFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1Q7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwkvKiBzdG9wIHVyYiB0cmFuc2ZlcnJpbmcgKi8KKwlzdG9wX2FsbF92aWRlb19zdHJlYW0ocGQpOworCWR2Yl9zdG9wX3N0cmVhbWluZygmcGQtPmR2Yl9kYXRhKTsKKworCS8qdW5yZWdpc3RlciB2NGwyIGRldmljZSAqLworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnBkLT52NGwyX2Rldik7CisKKwlsb2NrX2tlcm5lbCgpOworCXsKKwkJcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChwZCk7CisJCXBvc2VpZG9uX2ZtX2V4aXQocGQpOworCisJCXBvc2VpZG9uX2F1ZGlvX2ZyZWUocGQpOworCQlwZF92aWRlb19leGl0KHBkKTsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKK30KKworc3RydWN0IHVzYl9kcml2ZXIgcG9zZWlkb25fZHJpdmVyID0geworCS5uYW1lCQk9ICJwb3NlaWRvbiIsCisJLnByb2JlCQk9IHBvc2VpZG9uX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gcG9zZWlkb25fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHBvc2VpZG9uX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwb3NlaWRvbl9yZXN1bWUsCisjZW5kaWYKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG9zZWlkb25faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnBvc2VpZG9uX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcG1fbm90aWZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBvc2VpZG9uX2V4aXQodm9pZCkKK3sKKwlsb2coKTsKKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmVyKTsKKwl1c2JfZGVyZWdpc3RlcigmcG9zZWlkb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocG9zZWlkb25faW5pdCk7Cittb2R1bGVfZXhpdChwb3NlaWRvbl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGVsZWdlbnQgU3lzdGVtcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGb3IgdGxnMjMwMC1iYXNlZCBVU0IgZGV2aWNlICIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU3NjZiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1yYWRpby5jCkBAIC0wLDAgKzEsNDIwIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisKK3N0YXRpYyBpbnQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgcG9zZWlkb24gKnAsIF9fdTMyIGZyZXF1ZW5jeSk7CitzdGF0aWMgaW50IHBvc2VpZG9uX2ZtX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgcG9zZWlkb25fZm1fb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCk7CisKKyNkZWZpbmUgVFVORVJfRlJFUV9NSU5fRk0gNzYwMDAwMDAKKyNkZWZpbmUgVFVORVJfRlJFUV9NQVhfRk0gMTA4MDAwMDAwCisKKyNkZWZpbmUgTUFYX1BSRUVNUEhBU0lTIChWNEwyX1BSRUVNUEhBU0lTXzc1X3VTICsgMSkKK3N0YXRpYyBpbnQgcHJlZW1waGFzaXNbTUFYX1BSRUVNUEhBU0lTXSA9IHsKKwlUTEdfVFVORV9BU1REX05PTkUsICAgLyogVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCAqLworCVRMR19UVU5FX0FTVERfRk1fRVVSLCAvKiBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTICAgICovCisJVExHX1RVTkVfQVNURF9GTV9VUywgIC8qIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgICAgKi8KK307CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJaW50IHJldDsKKwl1MzIgc3RhdHVzOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzIpOworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIEJVTEtfQUxURVJOQVRFX0lGQUNFKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBzZXRfdHVuZXJfbW9kZShwLCBUTEdfTU9ERV9GTV9SQURJTyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBTR05MX1NSQ19TRUwsIFRMR19TSUdfU1JDX0FOVEVOTkEsICZzdGF0dXMpOworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfQU5BX1NURCwKKwkJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcywgJnN0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfTU9ERSwKKwkJCQlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCAmc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHAsIEFVRElPX1NBTVBMRV9SQVRFX1NFTCwKKwkJCQlBVFZfQVVESU9fUkFURV80OEssICZzdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocCwgVFVORV9GUkVRX1NFTEVDVCwgVFVORVJfRlJFUV9NSU5fRk0sICZzdGF0dXMpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1fZm1fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJcG1fYWxzYV9zdXNwZW5kKHApOworCXVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIDApOworCW1zbGVlcCgzMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX2ZtX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhwKTsKKwlzZXRfZnJlcXVlbmN5KHAsIHAtPnJhZGlvX2RhdGEuZm1fZnJlcSk7CisJcG1fYWxzYV9yZXN1bWUocCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBwb3NlaWRvbl9mbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisJc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcCkKKwkJcmV0dXJuIC0xOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisJaWYgKHAtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocC0+c3RhdGUgJiYgIShwLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0ZNKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCWlmICgwID09IHAtPnN0YXRlKSB7CisJCS8qIGRlZmF1bHQgcHJlLWVtcGhhc2lzICovCisJCWlmIChwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcyA9PSAwKQorCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMgPSBUTEdfVFVORV9BU1REX0ZNX0VVUjsKKwkJc2V0X2RlYnVnX21vZGUodmZkLCBkZWJ1Z19tb2RlKTsKKworCQlyZXQgPSBwb3NlaWRvbl9jaGVja19tb2RlX3JhZGlvKHApOworCQlpZiAocmV0IDwgMCkgeworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9GTTsKKwl9CisJcC0+cmFkaW9fZGF0YS51c2VycysrOworCWtyZWZfZ2V0KCZwLT5rcmVmKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBwOworb3V0OgorCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9mbV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJhZGlvX2RhdGEgKmZtID0gJnAtPnJhZGlvX2RhdGE7CisJdWludDMyX3Qgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisJZm0tPnVzZXJzLS07CisJaWYgKDAgPT0gZm0tPnVzZXJzKQorCQlwLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRk07CisKKwlpZiAoZm0tPmlzX3JhZGlvX3N0cmVhbWluZyAmJiBmaWxwID09IHAtPmZpbGVfZm9yX3N0cmVhbSkgeworCQlmbS0+aXNfcmFkaW9fc3RyZWFtaW5nID0gMDsKKwkJc2VuZF9zZXRfcmVxKHAsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwgJnN0YXR1cyk7CisJfQorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisKKwlrcmVmX3B1dCgmcC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3RybGNweSh2LT5kcml2ZXIsICJ0ZWxlLXJhZGlvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIlRlbGVnZW50IFBvc2VpZG9uIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwl1c2JfbWFrZV9wYXRoKHAtPnVkZXYsIHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKKwl2LT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBwb3NlaWRvbl9mbV9mb3BzID0geworCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgPSBwb3NlaWRvbl9mbV9vcGVuLAorCS5yZWxlYXNlICAgICAgID0gcG9zZWlkb25fZm1fY2xvc2UsCisJLmlvY3RsCSAgICAgICA9IHZpZGVvX2lvY3RsMiwKK307CisKK2ludCB0bGdfZm1fdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgdHVuZXJfZm1fc2lnX3N0YXRfcyBmbV9zdGF0ID0ge307CisJaW50IHJldCwgc3RhdHVzLCBjb3VudCA9IDU7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZ0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZ0LT50eXBlCT0gVjRMMl9UVU5FUl9SQURJTzsKKwl2dC0+Y2FwYWJpbGl0eQk9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKKwl2dC0+cmFuZ2Vsb3cJPSBUVU5FUl9GUkVRX01JTl9GTSAvIDYyNTAwOworCXZ0LT5yYW5nZWhpZ2gJPSBUVU5FUl9GUkVRX01BWF9GTSAvIDYyNTAwOworCXZ0LT5yeHN1YmNoYW5zCT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXZ0LT5hdWRtb2RlCT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwl2dC0+c2lnbmFsCT0gMDsKKwl2dC0+YWZjIAk9IDA7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9GTV9SQURJTywKKwkJCSAgICAgICZmbV9zdGF0LCAmc3RhdHVzLCBzaXplb2YoZm1fc3RhdCkpOworCisJd2hpbGUgKGZtX3N0YXQuc2lnX2xvY2tfYnVzeSAmJiBjb3VudC0tICYmICFyZXQpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisKKwkJcmV0ID0gc2VuZF9nZXRfcmVxKHAsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRk1fUkFESU8sCisJCQkJICAmZm1fc3RhdCwgJnN0YXR1cywgc2l6ZW9mKGZtX3N0YXQpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKKworCWlmIChyZXQgfHwgc3RhdHVzKSB7CisJCXZ0LT5zaWduYWwgPSAwOworCX0gZWxzZSBpZiAoKGZtX3N0YXQuc2lnX3ByZXNlbnQgfHwgZm1fc3RhdC5zaWdfbG9ja2VkKQorCQkJJiYgZm1fc3RhdC5zaWdfc3RyZW5ndGggPT0gMCkgeworCQl2dC0+c2lnbmFsID0gMHhmZmZmOworCX0gZWxzZQorCQl2dC0+c2lnbmFsID0gKGZtX3N0YXQuc2lnX3N0cmVuZ3RoICogMjU1IC8gMTApIDw8IDg7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtX2dldF9mcmVxKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmFyZ3ApCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJYXJncC0+ZnJlcXVlbmN5ID0gcC0+cmFkaW9fZGF0YS5mbV9mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwLCBfX3UzMiBmcmVxdWVuY3kpCit7CisJX191MzIgZnJlcSA7CisJaW50IHJldCwgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsCisJCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMsICZzdGF0dXMpOworCisJZnJlcSA9ICAoZnJlcXVlbmN5ICogMTI1KSAqIDUwMCAvIDEwMDA7Lyoga0haICovCisJaWYgKGZyZXEgPCBUVU5FUl9GUkVRX01JTl9GTS8xMDAwIHx8IGZyZXEgPiBUVU5FUl9GUkVRX01BWF9GTS8xMDAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRVTkVfRlJFUV9TRUxFQ1QsIGZyZXEsICZzdGF0dXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yIDsKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVEFLRV9SRVFVRVNULCAwLCAmc3RhdHVzKTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKwlpZiAoIXAtPnJhZGlvX2RhdGEuaXNfcmFkaW9fc3RyZWFtaW5nKSB7CisJCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUQUtFX1JFUVVFU1QsIDAsICZzdGF0dXMpOworCQlyZXQgPSBzZW5kX3NldF9yZXEocCwgUExBWV9TRVJWSUNFLAorCQkJCVRMR19UVU5FX1BMQVlfU1ZDX1NUQVJULCAmc3RhdHVzKTsKKwkJcC0+cmFkaW9fZGF0YS5pc19yYWRpb19zdHJlYW1pbmcgPSAxOworCX0KKwlwLT5yYWRpb19kYXRhLmZtX2ZyZXEgPSBmcmVxdWVuY3k7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmbV9zZXRfZnJlcShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICphcmdwKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXAtPmZpbGVfZm9yX3N0cmVhbSAgPSBmaWxlOworI2lmZGVmIENPTkZJR19QTQorCXAtPnBtX3N1c3BlbmQgPSBwbV9mbV9zdXNwZW5kOworCXAtPnBtX3Jlc3VtZSAgPSBwbV9mbV9yZXN1bWU7CisjZW5kaWYKKwlyZXR1cm4gc2V0X2ZyZXF1ZW5jeShwLCBhcmdwLT5mcmVxdWVuY3kpOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2NfZ19leHRzX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19GTV9UWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPCBNQVhfUFJFRU1QSEFTSVMpCisJCQljdHJsLT52YWx1ZSA9IHAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2Nfc19leHRzX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlpbnQgaTsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfRk1fVFgpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjdHJsLT52YWx1ZSA+PSAwICYmIGN0cmwtPnZhbHVlIDwgTUFYX1BSRUVNUEhBU0lTKSB7CisJCQlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlpbnQgcHJlX2VtcGhhc2lzID0gcHJlZW1waGFzaXNbY3RybC0+dmFsdWVdOworCQkJdTMyIHN0YXR1czsKKworCQkJc2VuZF9zZXRfcmVxKHAsIFRVTkVSX0FVRF9BTkFfU1RELAorCQkJCQkJcHJlX2VtcGhhc2lzLCAmc3RhdHVzKTsKKwkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID0gcHJlX2VtcGhhc2lzOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQoreworCWlmICghKGN0cmwtPmlkICYgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsLT5pZCAmPSB+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMOworCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTKSB7CisJCS8qIHJldHVybiB0aGUgbmV4dCBzdXBwb3J0ZWQgY29udHJvbCAqLworCQljdHJsLT5pZCA9IFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM7CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKGN0cmwsIFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQsCisJCQkJCVY0TDJfUFJFRU1QSEFTSVNfNzVfdVMsIDEsCisJCQkJCVY0TDJfUFJFRU1QSEFTSVNfNTBfdVMpOworCQljdHJsLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1VQREFURTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCit7CisJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXJldHVybiB2dC0+aW5kZXggPiAwID8gLUVJTlZBTCA6IDA7Cit9CitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqdmEpCit7CisJcmV0dXJuICh2YS0+aW5kZXggIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggICAgPSAwOworCWEtPm1vZGUgICAgPSAwOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1MzIgaSkKK3sKKwlyZXR1cm4gKGkgIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdTMyICppKQoreworCXJldHVybiAoKmkgIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwb3NlaWRvbl9mbV9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHRsZ19mbV92aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfcXVlcnltZW51ICAgPSB0bGdfZm1fdmlkaW9jX3F1ZXJ5bWVudSwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdGxnX2ZtX3ZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHRsZ19mbV92aWRpb2Nfc19jdHJsLAorCS52aWRpb2Nfc19leHRfY3RybHMgPSB0bGdfZm1fdmlkaW9jX3NfZXh0c19jdHJsLAorCS52aWRpb2NfZ19leHRfY3RybHMgPSB0bGdfZm1fdmlkaW9jX2dfZXh0c19jdHJsLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdGxnX2ZtX3ZpZGlvY19nX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSBmbV9nZXRfZnJlcSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gZm1fc2V0X2ZyZXEsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBwb3NlaWRvbl9mbV90ZW1wbGF0ZSA9IHsKKwkubmFtZSAgICAgICA9ICJUZWxlZ2VudC1SYWRpbyIsCisJLmZvcHMgICAgICAgPSAmcG9zZWlkb25fZm1fZm9wcywKKwkubWlub3IgICAgICA9IC0xLAorCS5yZWxlYXNlICAgID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcyAgPSAmcG9zZWlkb25fZm1faW9jdGxfb3BzLAorfTsKKworaW50IHBvc2VpZG9uX2ZtX2luaXQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmZtX2RldjsKKworCWZtX2RldiA9IHZkZXZfaW5pdChwLCAmcG9zZWlkb25fZm1fdGVtcGxhdGUpOworCWlmIChmbV9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShmbV9kZXYsIFZGTF9UWVBFX1JBRElPLCAtMSkgPCAwKSB7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGZtX2Rldik7CisJCXJldHVybiAtMTsKKwl9CisJcC0+cmFkaW9fZGF0YS5mbV9kZXYgPSBmbV9kZXY7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3NlaWRvbl9mbV9leGl0KHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlkZXN0cm95X3ZpZGVvX2RldmljZSgmcC0+cmFkaW9fZGF0YS5mbV9kZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNmYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKQEAgLTAsMCArMSwxNjY3IEBACisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisKK3N0YXRpYyBpbnQgcG1fdmlkZW9fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnBkKTsKK3N0YXRpYyBpbnQgcG1fdmlkZW9fcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpOworc3RhdGljIHZvaWQgaXNvX2J1YmJsZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7CisKK2ludCB1c2JfdHJhbnNmZXJfbW9kZTsKK21vZHVsZV9wYXJhbSh1c2JfdHJhbnNmZXJfbW9kZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModXNiX3RyYW5zZmVyX21vZGUsICIwID0gQnVsaywgMSA9IElzb2Nocm9ub3VzIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG9zZWlkb25fZm9ybWF0IHBvc2VpZG9uX2Zvcm1hdHNbXSA9IHsKKwl7ICJZVVYgNDIyIiwgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCAwfSwKKwl7ICJSR0I1NjUiLCBWNEwyX1BJWF9GTVRfUkdCNTY1LCAxNiwgMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvc2VpZG9uX3R2bm9ybSBwb3NlaWRvbl90dm5vcm1zW10gPSB7CisJeyBWNEwyX1NURF9QQUxfRCwgIlBBTC1EIiwgIFRMR19UVU5FX1ZTVERfUEFMX0QgfSwKKwl7IFY0TDJfU1REX1BBTF9CLCAiUEFMLUIiLCAgVExHX1RVTkVfVlNURF9QQUxfQiB9LAorCXsgVjRMMl9TVERfUEFMX0csICJQQUwtRyIsICBUTEdfVFVORV9WU1REX1BBTF9HIH0sCisJeyBWNEwyX1NURF9QQUxfSCwgIlBBTC1IIiwgIFRMR19UVU5FX1ZTVERfUEFMX0ggfSwKKwl7IFY0TDJfU1REX1BBTF9JLCAiUEFMLUkiLCAgVExHX1RVTkVfVlNURF9QQUxfSSB9LAorCXsgVjRMMl9TVERfUEFMX00sICJQQUwtTSIsICBUTEdfVFVORV9WU1REX1BBTF9NIH0sCisJeyBWNEwyX1NURF9QQUxfTiwgIlBBTC1OIiwgIFRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gfSwKKwl7IFY0TDJfU1REX1BBTF9OYywgIlBBTC1OYyIsIFRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gfSwKKwl7IFY0TDJfU1REX05UU0NfTSwgIk5UU0MtTSIsIFRMR19UVU5FX1ZTVERfTlRTQ19NIH0sCisJeyBWNEwyX1NURF9OVFNDX01fSlAsICJOVFNDLUpQIiwgVExHX1RVTkVfVlNURF9OVFNDX01fSiB9LAorCXsgVjRMMl9TVERfU0VDQU1fQiwgIlNFQ0FNLUIiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0IgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0QsICJTRUNBTS1EIiwgVExHX1RVTkVfVlNURF9TRUNBTV9EIH0sCisJeyBWNEwyX1NURF9TRUNBTV9HLCAiU0VDQU0tRyIsIFRMR19UVU5FX1ZTVERfU0VDQU1fRyB9LAorCXsgVjRMMl9TVERfU0VDQU1fSCwgIlNFQ0FNLUgiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0ggfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0ssICJTRUNBTS1LIiwgVExHX1RVTkVfVlNURF9TRUNBTV9LIH0sCisJeyBWNEwyX1NURF9TRUNBTV9LMSwgIlNFQ0FNLUsxIiwgVExHX1RVTkVfVlNURF9TRUNBTV9LMSB9LAorCXsgVjRMMl9TVERfU0VDQU1fTCwgIlNFQ0FNLUwiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0wgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0xDLCAiU0VDQU0tTEMiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0wxIH0sCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9UVk5PUk1TID0gQVJSQVlfU0laRShwb3NlaWRvbl90dm5vcm1zKTsKKworc3RydWN0IHBkX2F1ZGlvX21vZGUgeworCXUzMiB0bGdfYXVkaW9fbW9kZTsKKwl1MzIgdjRsMl9hdWRpb19zdWI7CisJdTMyIHY0bDJfYXVkaW9fbW9kZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRfYXVkaW9fbW9kZSBwZF9hdWRpb19tb2Rlc1tdID0geworCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX01PTk8sIFY0TDJfVFVORVJfU1VCX01PTk8sCisJCVY0TDJfVFVORVJfTU9ERV9NT05PIH0sCisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCBWNEwyX1RVTkVSX1NVQl9TVEVSRU8sCisJCVY0TDJfVFVORVJfTU9ERV9TVEVSRU8gfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0EsIFY0TDJfVFVORVJfU1VCX0xBTkcxLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzEgfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0IsIFY0TDJfVFVORVJfU1VCX0xBTkcyLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzIgfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0MsIFY0TDJfVFVORVJfU1VCX0xBTkcxLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgUE9TRUlET05fQVVESU9NT0RTID0gQVJSQVlfU0laRShwZF9hdWRpb19tb2Rlcyk7CisKK3N0cnVjdCBwZF9pbnB1dCB7CisJY2hhciAqbmFtZTsKKwl1aW50MzJfdCB0bGdfc3JjOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZF9pbnB1dCBwZF9pbnB1dHNbXSA9IHsKKwl7ICJUViBBbnRlbm5hIiwgVExHX1NJR19TUkNfQU5URU5OQSB9LAorCXsgIlRWIENhYmxlIiwgVExHX1NJR19TUkNfQ0FCTEUgfSwKKwl7ICJUViBTVmlkZW8iLCBUTEdfU0lHX1NSQ19TVklERU8gfSwKKwl7ICJUViBDb21wb3NpdGUiLCBUTEdfU0lHX1NSQ19DT01QT1NJVEUgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgUE9TRUlET05fSU5QVVRTID0gQVJSQVlfU0laRShwZF9pbnB1dHMpOworCitzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCB7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHY0bDJfY3RybDsKKwllbnVtIGNtZF9jdXN0b21fcGFyYW1faWQgdmNfaWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgY29udHJvbHNbXSA9IHsKKwl7CisJCXsgVjRMMl9DSURfQlJJR0hUTkVTUywgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJicmlnaHRuZXNzIiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX0JSSUdIVE5FU1NfQ1RSTAorCX0sIHsKKwkJeyBWNEwyX0NJRF9DT05UUkFTVCwgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJjb250cmFzdCIsIDAsIDEwMDAwLCAxLCAxMDAsIDAsIH0sCisJCUNVU1RfUEFSTV9JRF9DT05UUkFTVF9DVFJMLAorCX0sIHsKKwkJeyBWNEwyX0NJRF9IVUUsIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkiaHVlIiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX0hVRV9DVFJMLAorCX0sIHsKKwkJeyBWNEwyX0NJRF9TQVRVUkFUSU9OLCBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJInNhdHVyYXRpb24iLCAwLCAxMDAwMCwgMSwgMTAwLCAwLCB9LAorCQlDVVNUX1BBUk1fSURfU0FUVVJBVElPTl9DVFJMLAorCX0sCit9OworCitzdHJ1Y3QgdmlkZW9fc3RkX3RvX2F1ZGlvX3N0ZCB7CisJdjRsMl9zdGRfaWQJdmlkZW9fc3RkOworCWludCAJCWF1ZGlvX3N0ZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fc3RkX3RvX2F1ZGlvX3N0ZCB2aWRlb190b19hdWRpb19tYXBbXSA9IHsKKwkvKiBjb3VudHJ5IDogeyAyNywgMzIsIDMzLCAzNCwgMzYsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNjQsCisJCQk2NSwgODYsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU4LCAzNzIsIDg1MiwgOTcyIH0gKi8KKwl7IChWNEwyX1NURF9QQUxfSSB8IFY0TDJfU1REX1BBTF9CIHwgVjRMMl9TVERfUEFMX0QgfAorCQlWNEwyX1NURF9TRUNBTV9MIHwgVjRMMl9TVERfU0VDQU1fRCksIFRMR19UVU5FX0FTVERfTklDQU0gfSwKKworCS8qIGNvdW50cnkgOiB7IDEsIDUyLCA1NCwgNTUsIDg4NiB9ICovCisJe1Y0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX1BBTF9OIHwgVjRMMl9TVERfUEFMX00sIFRMR19UVU5FX0FTVERfQlRTQ30sCisKKwkvKiBjb3VudHJ5IDogeyA4MSB9ICovCisJeyBWNEwyX1NURF9OVFNDX01fSlAsIFRMR19UVU5FX0FTVERfRUlBSiB9LAorCisJLyogb3RoZXIgY291bnRyeSA6IFRMR19UVU5FX0FTVERfQTIgKi8KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1hcF9zaXplID0gQVJSQVlfU0laRSh2aWRlb190b19hdWRpb19tYXApOworCitzdGF0aWMgaW50IGdldF9hdWRpb19zdGQodjRsMl9zdGRfaWQgdjRsMl9zdGQpCit7CisJaW50IGkgPSAwOworCisJZm9yICg7IGkgPCBtYXBfc2l6ZTsgaSsrKSB7CisJCWlmICh2NGwyX3N0ZCAmIHZpZGVvX3RvX2F1ZGlvX21hcFtpXS52aWRlb19zdGQpCisJCQlyZXR1cm4gdmlkZW9fdG9fYXVkaW9fbWFwW2ldLmF1ZGlvX3N0ZDsKKwl9CisJcmV0dXJuIFRMR19UVU5FX0FTVERfQTI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKworCXN0cmNweShjYXAtPmRyaXZlciwgInRlbGUtdmlkZW8iKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAiVGVsZWdlbnQgUG9zZWlkb24iKTsKKwl1c2JfbWFrZV9wYXRoKHAtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVFVORVIgfAorCQkJCVY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfU1RSRUFNSU5HIHwKKwkJCQlWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9WQklfQ0FQVFVSRTsKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCBpbml0X2NvcHkoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLCBib29sIGluZGV4KQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHZpZGVvLT5mcm9udDsKKworCXZpZGVvLT5maWVsZF9jb3VudAk9IGluZGV4OworCXZpZGVvLT5saW5lc19jb3BpZWQJPSAwOworCXZpZGVvLT5wcmV2X2xlZnQJPSAwIDsKKwl2aWRlby0+ZHN0IAkJPSAoY2hhciAqKXZpZGVvYnVmX3RvX3ZtYWxsb2MoZnJvbnQtPmN1cnJfZnJhbWUpCisJCQkJCSsgaW5kZXggKiB2aWRlby0+bGluZXNfc2l6ZTsKKwl2aWRlby0+dmJpLT5jb3BpZWQgCT0gMDsgLyogc2V0IGl0IGhlcmUgKi8KK30KKworc3RhdGljIGJvb2wgZ2V0X2ZyYW1lKHN0cnVjdCBmcm9udF9mYWNlICpmcm9udCwgaW50ICpuZWVkX2luaXQpCit7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSBmcm9udC0+Y3Vycl9mcmFtZTsKKworCWlmICh2YikKKwkJcmV0dXJuIHRydWU7CisKKwlzcGluX2xvY2soJmZyb250LT5xdWV1ZV9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmZyb250LT5hY3RpdmUpKSB7CisJCXZiID0gbGlzdF9lbnRyeShmcm9udC0+YWN0aXZlLm5leHQsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCQlpZiAobmVlZF9pbml0KQorCQkJKm5lZWRfaW5pdCA9IDE7CisJCWZyb250LT5jdXJyX2ZyYW1lID0gdmI7CisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJfQorCXNwaW5fdW5sb2NrKCZmcm9udC0+cXVldWVfbG9jayk7CisKKwlyZXR1cm4gISF2YjsKK30KKworLyogY2hlY2sgaWYgdGhlIHZpZGVvJ3MgYnVmZmVyIGlzIHJlYWR5ICovCitzdGF0aWMgYm9vbCBnZXRfdmlkZW9fZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250LCBzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaW50IG5lZWRfaW5pdCA9IDA7CisJYm9vbCByZXQgPSB0cnVlOworCisJcmV0ID0gZ2V0X2ZyYW1lKGZyb250LCAmbmVlZF9pbml0KTsKKwlpZiAocmV0ICYmIG5lZWRfaW5pdCkKKwkJaW5pdF9jb3B5KHZpZGVvLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdWJtaXRfZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250KQoreworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gZnJvbnQtPmN1cnJfZnJhbWU7CisKKwlpZiAodmIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZnJvbnQtPmN1cnJfZnJhbWUJPSBOVUxMOworCXZiLT5zdGF0ZQkJPSBWSURFT0JVRl9ET05FOworCXZiLT5maWVsZF9jb3VudCsrOworCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKworCXdha2VfdXAoJnZiLT5kb25lKTsKK30KKworLyoKKyAqIEEgZnJhbWUgaXMgY29tcG9zZWQgb2YgdHdvIGZpZWxkcy4gSWYgd2UgcmVjZWl2ZSBhbGwgdGhlIHR3byBmaWVsZHMsCisgKiBjYWxsIHRoZSAgc3VibWl0X2ZyYW1lKCkgdG8gc3VibWl0IHRoZSB3aG9sZSBmcmFtZSB0byBhcHBsaWNhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGVuZF9maWVsZChzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJLyogbG9ncyh2aWRlby0+ZnJvbnQpOyAqLworCWlmICgxID09IHZpZGVvLT5maWVsZF9jb3VudCkKKwkJc3VibWl0X2ZyYW1lKHZpZGVvLT5mcm9udCk7CisJZWxzZQorCQlpbml0X2NvcHkodmlkZW8sIDEpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3ZpZGVvX2RhdGEoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLCBjaGFyICpzcmMsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworI2RlZmluZSBjb3B5X2RhdGEobGVuKSAgXAorCWRvIHsgXAorCQlpZiAoKyt2aWRlby0+bGluZXNfY29waWVkID4gdmlkZW8tPmxpbmVzX3Blcl9maWVsZCkgXAorCQkJZ290byBvdmVyZmxvdzsgXAorCQltZW1jcHkodmlkZW8tPmRzdCwgc3JjLCBsZW4pO1wKKwkJdmlkZW8tPmRzdCArPSBsZW4gKyB2aWRlby0+bGluZXNfc2l6ZTsgXAorCQlzcmMgKz0gbGVuOyBcCisJCWNvdW50IC09IGxlbjsgXAorCSB9IHdoaWxlICgwKQorCisJd2hpbGUgKGNvdW50ICYmIGNvdW50ID49IHZpZGVvLT5saW5lc19zaXplKSB7CisJCWlmICh2aWRlby0+cHJldl9sZWZ0KSB7CisJCQljb3B5X2RhdGEodmlkZW8tPnByZXZfbGVmdCk7CisJCQl2aWRlby0+cHJldl9sZWZ0ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvcHlfZGF0YSh2aWRlby0+bGluZXNfc2l6ZSk7CisJfQorCWlmIChjb3VudCAmJiBjb3VudCA8IHZpZGVvLT5saW5lc19zaXplKSB7CisJCW1lbWNweSh2aWRlby0+ZHN0LCBzcmMsIGNvdW50KTsKKworCQl2aWRlby0+cHJldl9sZWZ0ID0gdmlkZW8tPmxpbmVzX3NpemUgLSBjb3VudDsKKwkJdmlkZW8tPmRzdCArPSBjb3VudDsKKwl9CisJcmV0dXJuOworCitvdmVyZmxvdzoKKwllbmRfZmllbGQodmlkZW8pOworfQorCitzdGF0aWMgdm9pZCBjaGVja190cmFpbGVyKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywgY2hhciAqc3JjLCBpbnQgY291bnQpCit7CisJc3RydWN0IHZiaV9kYXRhICp2YmkgPSB2aWRlby0+dmJpOworCWludCBvZmZzZXQ7IC8qIHRyYWlsZXIncyBvZmZzZXQgKi8KKwljaGFyICpidWY7CisKKwlvZmZzZXQgPSAodmlkZW8tPmNvbnRleHQucGl4LnNpemVpbWFnZSAvIDIgKyB2YmktPnZiaV9zaXplIC8gMikKKwkJLSAodmJpLT5jb3BpZWQgKyB2aWRlby0+bGluZXNfc2l6ZSAqIHZpZGVvLT5saW5lc19jb3BpZWQpOworCWlmICh2aWRlby0+cHJldl9sZWZ0KQorCQlvZmZzZXQgLT0gKHZpZGVvLT5saW5lc19zaXplIC0gdmlkZW8tPnByZXZfbGVmdCk7CisKKwlpZiAob2Zmc2V0ID4gY291bnQgfHwgb2Zmc2V0IDw9IDApCisJCWdvdG8gc2hvcnRfcGFja2FnZTsKKworCWJ1ZiA9IHNyYyArIG9mZnNldDsKKworCS8qIHRyYWlsZXIgOiAoVkZIUykgKyBVMzIgKyBVMzIgKyBmaWVsZF9udW0gKi8KKwlpZiAoIXN0cm5jbXAoYnVmLCAiVkZIUyIsIDQpKSB7CisJCWludCBmaWVsZF9udW0gPSAqKCh1MzIgKikoYnVmICsgMTIpKTsKKworCQlpZiAoKGZpZWxkX251bSAmIDEpIF4gdmlkZW8tPmZpZWxkX2NvdW50KSB7CisJCQlpbml0X2NvcHkodmlkZW8sIHZpZGVvLT5maWVsZF9jb3VudCk7CisJCQlyZXR1cm47CisJCX0KKwkJY29weV92aWRlb19kYXRhKHZpZGVvLCBzcmMsIG9mZnNldCk7CisJfQorc2hvcnRfcGFja2FnZToKKwllbmRfZmllbGQodmlkZW8pOworfQorCisvKiA9PT09PT09PT09ICBDaGVjayB0aGlzIG1vcmUgY2FyZWZ1bGx5ISA9PT09PT09PT09PSAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdmJpX2RhdGEoc3RydWN0IHZiaV9kYXRhICp2YmksCisJCQkJY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmJpLT5mcm9udDsKKworCWlmIChmcm9udCAmJiBnZXRfZnJhbWUoZnJvbnQsIE5VTEwpKSB7CisJCWNoYXIgKmJ1ZiA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoZnJvbnQtPmN1cnJfZnJhbWUpOworCisJCWlmICh2YmktPnZpZGVvLT5maWVsZF9jb3VudCkKKwkJCWJ1ZiArPSAodmJpLT52Ymlfc2l6ZSAvIDIpOworCQltZW1jcHkoYnVmICsgdmJpLT5jb3BpZWQsIHNyYywgY291bnQpOworCX0KKwl2YmktPmNvcGllZCArPSBjb3VudDsKK30KKworLyoKKyAqIENvcHkgdGhlIG5vcm1hbCBkYXRhIChWQkkgb3IgVklERU8pIHdpdGhvdXQgdGhlIHRyYWlsZXIuCisgKiBWQkkgaXMgbm90IGludGVybGFjZWQsIHdoaWxlIFZJREVPIGlzIGludGVybGFjZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZiaV92aWRlb19kYXRhKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywKKwkJCQljaGFyICpzcmMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9IHZpZGVvLT52Ymk7CisJdW5zaWduZWQgaW50IHZiaV9kZWx0YSA9ICh2YmktPnZiaV9zaXplIC8gMikgLSB2YmktPmNvcGllZDsKKworCWlmICh2YmlfZGVsdGEgPj0gY291bnQpIHsKKwkJY29weV92YmlfZGF0YSh2YmksIHNyYywgY291bnQpOworCX0gZWxzZSB7CisJCWlmICh2YmlfZGVsdGEpIHsKKwkJCWNvcHlfdmJpX2RhdGEodmJpLCBzcmMsIHZiaV9kZWx0YSk7CisKKwkJCS8qIHdlIHJlY2VpdmUgdGhlIHR3byBmaWVsZHMgb2YgdGhlIFZCSSovCisJCQlpZiAodmJpLT5mcm9udCAmJiB2aWRlby0+ZmllbGRfY291bnQpCisJCQkJc3VibWl0X2ZyYW1lKHZiaS0+ZnJvbnQpOworCQl9CisJCWNvcHlfdmlkZW9fZGF0YSh2aWRlbywgc3JjICsgdmJpX2RlbHRhLCBjb3VudCAtIHZiaV9kZWx0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cmJfY29tcGxldGVfYnVsayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGE7CisJY2hhciAqc3JjID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXZpZGVvLT5pc19zdHJlYW1pbmcgfHwgdXJiLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8pCisJCQlnb3RvIHJlc2VuZF9pdDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWdldF92aWRlb19mcmFtZShmcm9udCwgdmlkZW8pKQorCQlnb3RvIHJlc2VuZF9pdDsKKworCWlmIChjb3VudCA9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCWNvcHlfdmJpX3ZpZGVvX2RhdGEodmlkZW8sIHNyYywgY291bnQpOworCWVsc2UKKwkJY2hlY2tfdHJhaWxlcih2aWRlbywgc3JjLCBjb3VudCk7CisKK3Jlc2VuZF9pdDoKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWxvZygiIHN1Ym1pdCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogZm9yIElTTyAqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdFVF9TVUNDRVNTCQkoMCkKKyNkZWZpbmUgR0VUX1RSQUlMRVIJCSgxKQorI2RlZmluZSBHRVRfVE9PX01VQ0hfQlVCQkxFCSgyKQorI2RlZmluZSBHRVRfTk9ORQkJKDMpCitzdGF0aWMgaW50IGdldF9jaHVuayhpbnQgc3RhcnQsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCWludCAqaGVhZCwgaW50ICp0YWlsLCBpbnQgKmJ1YmJsZV9lcnIpCit7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnBrdCA9IE5VTEw7CisJaW50IHJldCA9IEdFVF9TVUNDRVNTOworCisJZm9yICgqaGVhZCA9ICp0YWlsID0gLTE7IHN0YXJ0IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgc3RhcnQrKykgeworCQlwa3QgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tzdGFydF07CisKKwkJLyogaGFuZGxlIHRoZSBidWJibGUgb2YgdGhlIEh1YiAqLworCQlpZiAoLUVPVkVSRkxPVyA9PSBwa3QtPnN0YXR1cykgeworCQkJaWYgKCsrKmJ1YmJsZV9lcnIgPiB1cmItPm51bWJlcl9vZl9wYWNrZXRzIC8gMykKKwkJCQlyZXR1cm4gR0VUX1RPT19NVUNIX0JVQkJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVGhpcyBpcyB0aGUgZ2FwICovCisJCWlmIChwa3QtPnN0YXR1cyB8fCBwa3QtPmFjdHVhbF9sZW5ndGggPD0gMAorCQkJCXx8IHBrdC0+YWN0dWFsX2xlbmd0aCA+IElTT19QS1RfU0laRSkgeworCQkJaWYgKCpoZWFkICE9IC0xKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhIGdvb2QgaXNvY2hyb25vdXMgcGFja2V0ICovCisJCWlmIChwa3QtPmFjdHVhbF9sZW5ndGggPT0gSVNPX1BLVF9TSVpFKSB7CisJCQlpZiAoKmhlYWQgPT0gLTEpCisJCQkJKmhlYWQgPSBzdGFydDsKKwkJCSp0YWlsID0gc3RhcnQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRyYWlsZXIgaXMgaGVyZSAqLworCQlpZiAocGt0LT5hY3R1YWxfbGVuZ3RoIDwgSVNPX1BLVF9TSVpFKSB7CisJCQlpZiAoKmhlYWQgPT0gLTEpIHsKKwkJCQkqaGVhZCA9IHN0YXJ0OworCQkJCSp0YWlsID0gc3RhcnQ7CisJCQkJcmV0dXJuIEdFVF9UUkFJTEVSOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKmhlYWQgPT0gLTEgJiYgKnRhaWwgPT0gLTEpCisJCXJldCA9IEdFVF9OT05FOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB8X198LS0tLS0tfF9fX3wtLS0tLXxfX19fX19ffAorICogICAgICAgXiAgICAgICAgICBeCisgKiAgICAgICB8ICAgICAgICAgIHwKKyAqICAgICAgZ2FwICAgICAgICBnYXAKKyAqLworc3RhdGljIHZvaWQgdXJiX2NvbXBsZXRlX2lzbyhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGE7CisJaW50IGJ1YmJsZV9lcnIgPSAwLCBoZWFkID0gMCwgdGFpbCA9IDA7CisJY2hhciAqc3JjID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdmlkZW8tPmlzX3N0cmVhbWluZykKKwkJcmV0dXJuOworCisJZG8geworCQlpZiAoIWdldF92aWRlb19mcmFtZShmcm9udCwgdmlkZW8pKQorCQkJZ290byBvdXQ7CisKKwkJc3dpdGNoIChnZXRfY2h1bmsoaGVhZCwgdXJiLCAmaGVhZCwgJnRhaWwsICZidWJibGVfZXJyKSkgeworCQljYXNlIEdFVF9TVUNDRVNTOgorCQkJY29weV92YmlfdmlkZW9fZGF0YSh2aWRlbywgc3JjICsgKGhlYWQgKiBJU09fUEtUX1NJWkUpLAorCQkJCQkodGFpbCAtIGhlYWQgKyAxKSAqIElTT19QS1RfU0laRSk7CisJCQlicmVhazsKKwkJY2FzZSBHRVRfVFJBSUxFUjoKKwkJCWNoZWNrX3RyYWlsZXIodmlkZW8sIHNyYyArIChoZWFkICogSVNPX1BLVF9TSVpFKSwKKwkJCQkJSVNPX1BLVF9TSVpFKTsKKwkJCWJyZWFrOworCQljYXNlIEdFVF9OT05FOgorCQkJZ290byBvdXQ7CisJCWNhc2UgR0VUX1RPT19NVUNIX0JVQkJMRToKKwkJCWxvZygiXHQgV2UgZ290IHRvbyBtdWNoIGJ1YmJsZSIpOworCQkJc2NoZWR1bGVfd29yaygmdmlkZW8tPmJ1YmJsZV93b3JrKTsKKwkJCXJldHVybjsKKwkJfQorCX0gd2hpbGUgKGhlYWQgPSB0YWlsICsgMSwgaGVhZCA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCitvdXQ6CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlsb2coInVzYl9zdWJtaXRfdXJiIGVyciA6ICVkIiwgcmV0KTsKK30KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gWyAgZW5kICBdID09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgcHJlcGFyZV9pc29fdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHZpZGVvLT5wZC0+dWRldjsKKwlpbnQgaTsKKworCWlmICh2aWRlby0+dXJiX2FycmF5WzBdKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKwkJdm9pZCAqbWVtOworCQlpbnQgajsKKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFBLX1BFUl9VUkIsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpCisJCQlnb3RvIG91dDsKKworCQl2aWRlby0+dXJiX2FycmF5W2ldID0gdXJiOworCQltZW0gPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsCisJCQkJCUlTT19QS1RfU0laRSAqIFBLX1BFUl9VUkIsCisJCQkJCUdGUF9LRVJORUwsCisJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisKKwkJdXJiLT5jb21wbGV0ZQk9IHVyYl9jb21wbGV0ZV9pc287CS8qIGhhbmRsZXIgKi8KKwkJdXJiLT5kZXYJPSB1ZGV2OworCQl1cmItPmNvbnRleHQJPSB2aWRlby0+ZnJvbnQ7CisJCXVyYi0+cGlwZQk9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LAorCQkJCQkJdmlkZW8tPmVuZHBvaW50X2FkZHIpOworCQl1cmItPmludGVydmFsCT0gMTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzCT0gUEtfUEVSX1VSQjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIJPSBtZW07CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFBLX1BFUl9VUkIgKiBJU09fUEtUX1NJWkU7CisKKwkJZm9yIChqID0gMDsgaiA8IFBLX1BFUl9VUkI7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBJU09fUEtUX1NJWkUgKiBqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBJU09fUEtUX1NJWkU7CisJCX0KKwl9CisJcmV0dXJuIDA7CitvdXQ6CisJZm9yICg7IGkgPiAwOyBpLS0pCisJCTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyogcmV0dXJuIHRoZSBzdWNjZWVkZWQgbnVtYmVyIG9mIHRoZSBhbGxvY2F0aW9uICovCitpbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKKwkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAorCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCisJCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdm9pZCAqbWVtOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX2ZsYWdzKTsKKwkJaWYgKHVyYiA9PSBOVUxMKQorCQkJcmV0dXJuIGk7CisKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBidWZfc2l6ZSwgZ2ZwX2ZsYWdzLAorCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAobWVtID09IE5VTEwpCisJCQlyZXR1cm4gaTsKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCBlcF9hZGRyKSwKKwkJCQltZW0sIGJ1Zl9zaXplLCBjb21wbGV0ZV9mbiwgY29udGV4dCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYl9hcnJheVtpXSA9IHVyYjsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3ZvaWQgZnJlZV9hbGxfdXJiX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJdXJiID0gdXJiX2FycmF5W2ldOworCQlpZiAodXJiKSB7CisJCQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJdXJiX2FycmF5W2ldID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwcmVwYXJlX2J1bGtfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpZiAodmlkZW8tPnVyYl9hcnJheVswXSkKKwkJcmV0dXJuIDA7CisKKwlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyh2aWRlby0+dXJiX2FycmF5LCBTQlVGX05VTSwKKwkJCXZpZGVvLT5wZC0+dWRldiwgdmlkZW8tPmVuZHBvaW50X2FkZHIsCisJCQkweDIwMDAsIEdGUF9LRVJORUwsCisJCQl1cmJfY29tcGxldGVfYnVsaywgdmlkZW8tPmZyb250KTsKKwlyZXR1cm4gMDsKK30KKworLyogZnJlZSB0aGUgVVJCcyAqLworc3RhdGljIHZvaWQgZnJlZV9hbGxfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlmcmVlX2FsbF91cmJfZ2VuZXJpYyh2aWRlby0+dXJiX2FycmF5LCBTQlVGX05VTSk7Cit9CisKK3N0YXRpYyB2b2lkIHBkX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJdmlkZW9idWZfdm1hbGxvY19mcmVlKHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgdm9pZCBwZF9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBxLT5wcml2X2RhdGE7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmZyb250LT5hY3RpdmUpOworfQorCitzdGF0aWMgaW50IHBkX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOworCWludCByYzsKKworCXN3aXRjaCAoZnJvbnQtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gdmItPnN0YXRlKSB7CisJCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CisKKwkJCXBpeCA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGEuY29udGV4dC5waXg7CisJCQl2Yi0+c2l6ZQk9IHBpeC0+c2l6ZWltYWdlOyAvKiByZWFsIGZyYW1lIHNpemUgKi8KKwkJCXZiLT53aWR0aAk9IHBpeC0+d2lkdGg7CisJCQl2Yi0+aGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCB2YiwgTlVMTCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQkJdmItPnNpemUJPSBmcm9udC0+cGQtPnZiaV9kYXRhLnZiaV9zaXplOworCQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgdmIsIE5VTEwpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZiLT5maWVsZCA9IGZpZWxkOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworfQorCitpbnQgZmlyZV9hbGxfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpbnQgaSwgcmV0OworCisJdmlkZW8tPmlzX3N0cmVhbWluZyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07IGkrKykgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih2aWRlby0+dXJiX2FycmF5W2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCWxvZygiKCVkKSBmYWlsZWQ6IGVycm9yICVkIiwgaSwgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdGFydF92aWRlb19zdHJlYW0oc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJczMyIGNtZF9zdGF0dXM7CisKKwlzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCXNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVEFSVCwgJmNtZF9zdGF0dXMpOworCisJaWYgKHBkLT5jdXJfdHJhbnNmZXJfbW9kZSkgeworCQlwcmVwYXJlX2lzb191cmIodmlkZW8pOworCQlJTklUX1dPUksoJnZpZGVvLT5idWJibGVfd29yaywgaXNvX2J1YmJsZV9oYW5kbGVyKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgYnVsayBtb2RlIGRvZXMgbm90IG5lZWQgYSBidWJibGUgaGFuZGxlciAqLworCQlwcmVwYXJlX2J1bGtfdXJiKHZpZGVvKTsKKwl9CisJZmlyZV9hbGxfdXJiKHZpZGVvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF9idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkgICAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCT0gZnJvbnQtPnBkOworCisJc3dpdGNoIChmcm9udC0+dHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7CisJCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJnZpZGVvLT5jb250ZXh0LnBpeDsKKworCQkqc2l6ZSA9IFBBR0VfQUxJR04ocGl4LT5zaXplaW1hZ2UpOy8qIHBhZ2UgYWxpZ25lZCBmcmFtZSBzaXplICovCisJCWlmICgqY291bnQgPCA0KQorCQkJKmNvdW50ID0gNDsKKwkJaWYgKDEpIHsKKwkJCS8qIHNhbWUgaW4gZGlmZmVyZW50IGFsdGVyc2V0dGluZyAqLworCQkJdmlkZW8tPmVuZHBvaW50X2FkZHIJPSAweDgyOworCQkJdmlkZW8tPnZiaQkJPSAmcGQtPnZiaV9kYXRhOworCQkJdmlkZW8tPnZiaS0+dmlkZW8JPSB2aWRlbzsKKwkJCXZpZGVvLT5wZAkJPSBwZDsKKwkJCXZpZGVvLT5saW5lc19wZXJfZmllbGQJPSBwaXgtPmhlaWdodCAvIDI7CisJCQl2aWRlby0+bGluZXNfc2l6ZQk9IHBpeC0+d2lkdGggKiAyOworCQkJdmlkZW8tPmZyb250IAkJPSBmcm9udDsKKwkJfQorCQlyZXR1cm4gc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKKwl9CisKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6IHsKKwkJc3RydWN0IHZiaV9kYXRhICp2YmkgPSAmcGQtPnZiaV9kYXRhOworCisJCSpzaXplID0gUEFHRV9BTElHTih2YmktPnZiaV9zaXplKTsKKwkJbG9nKCJzaXplIDogJWQiLCAqc2l6ZSk7CisJCWlmICgqY291bnQgPT0gMCkKKwkJCSpjb3VudCA9IDQ7CisJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHBkX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gcGRfYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IHBkX2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IHBkX2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBwZF9idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWlmIChBUlJBWV9TSVpFKHBvc2VpZG9uX2Zvcm1hdHMpIDw9IGYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmLT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5mbGFncwk9IDA7CisJZi0+cGl4ZWxmb3JtYXQJPSBwb3NlaWRvbl9mb3JtYXRzW2YtPmluZGV4XS5mb3VyY2M7CisJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCBwb3NlaWRvbl9mb3JtYXRzW2YtPmluZGV4XS5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworCWYtPmZtdC5waXggPSBwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnBpeDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZMQyBjYWxscyBWSURJT0NfU19TVEQgYmVmb3JlIFZJRElPQ19TX0ZNVCwgd2hpbGUKKyAqIE1wbGF5ZXIgY2FsbHMgdGhlbSBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KKyAqLworc3RhdGljIGludCBwZF92aWRpb2Nfc19mbXQoc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4KQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbwk9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnZpZGVvLT5jb250ZXh0OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF9kZWYJPSAmY29udGV4dC0+cGl4OworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzID0gMCwgdmlkX3Jlc29sOworCisJLyogc2V0IHRoZSBwaXhlbCBmb3JtYXQgdG8gZmlybXdhcmUgKi8KKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCNTY1KSB7CisJCXZpZF9yZXNvbCA9IFRMR19UVU5FUl9WSURfRk9STUFUX1JHQl81NjU7CisJfSBlbHNlIHsKKwkJcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQl2aWRfcmVzb2wgPSBUTEdfVFVORVJfVklEX0ZPUk1BVF9ZVVY7CisJfQorCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1RSRUFNX0ZNVF9TRUwsCisJCQkJdmlkX3Jlc29sLCAmY21kX3N0YXR1cyk7CisKKwkvKiBzZXQgdGhlIHJlc29sdXRpb24gdG8gZmlybXdhcmUgKi8KKwl2aWRfcmVzb2wgPSBUTEdfVFVORV9WSURfUkVTXzcyMDsKKwlzd2l0Y2ggKHBpeC0+d2lkdGgpIHsKKwljYXNlIDcwNDoKKwkJdmlkX3Jlc29sID0gVExHX1RVTkVfVklEX1JFU183MDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBpeC0+d2lkdGggPSA3MjA7CisJY2FzZSA3MjA6CisJCWJyZWFrOworCX0KKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19ST1NPTFVfU0VMLAorCQkJCXZpZF9yZXNvbCwgJmNtZF9zdGF0dXMpOworCWlmIChyZXQgfHwgY21kX3N0YXR1cykgeworCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwaXhfZGVmLT5waXhlbGZvcm1hdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7IC8qIHNhdmUgaXQgKi8KKwlwaXgtPmhlaWdodCA9IChjb250ZXh0LT50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgPyAgNDgwIDogNTc2OworCisJLyogQ29tcGFyZSB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmcgKi8KKwlpZiAoKHBpeF9kZWYtPndpZHRoICE9IHBpeC0+d2lkdGgpCisJCXx8IChwaXhfZGVmLT5oZWlnaHQgIT0gcGl4LT5oZWlnaHQpKSB7CisJCXBpeF9kZWYtPndpZHRoCQk9IHBpeC0+d2lkdGg7CisJCXBpeF9kZWYtPmhlaWdodAkJPSBwaXgtPmhlaWdodDsKKwkJcGl4X2RlZi0+Ynl0ZXNwZXJsaW5lCT0gcGl4LT53aWR0aCAqIDI7CisJCXBpeF9kZWYtPnNpemVpbWFnZSAJPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiAyOworCX0KKwkqcGl4ID0gKnBpeF9kZWY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKwkvKiBzdG9wIFZCSSBoZXJlICovCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAocGQtPmZpbGVfZm9yX3N0cmVhbSA9PSBOVUxMKQorCQlwZC0+ZmlsZV9mb3Jfc3RyZWFtID0gZmlsZTsKKwllbHNlIGlmIChmaWxlICE9IHBkLT5maWxlX2Zvcl9zdHJlYW0pIHsKKwkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkX3ZpZGlvY19zX2ZtdChwZCwgJmYtPmZtdC5waXgpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92Ymkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdjRsMl9mKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaV9mbXQJPSAmdjRsMl9mLT5mbXQudmJpOworCisJdmJpX2ZtdC0+c2FtcGxlc19wZXJfbGluZQk9IDcyMCAqIDI7CisJdmJpX2ZtdC0+c2FtcGxpbmdfcmF0ZQkJPSA2NzUwMDAwICogNDsKKwl2YmlfZm10LT5zYW1wbGVfZm9ybWF0CQk9IFY0TDJfUElYX0ZNVF9HUkVZOworCXZiaV9mbXQtPm9mZnNldAkJCT0gNjQgKiA0OyAgLypGSVhNRTogd2h5IG9mZnNldCAqLworCWlmIChwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnR2bm9ybWlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCXZiaV9mbXQtPnN0YXJ0WzBdID0gMTA7CisJCXZiaV9mbXQtPnN0YXJ0WzFdID0gMjY0OworCQl2YmlfZm10LT5jb3VudFswXSA9IFY0TF9OVFNDX1ZCSV9MSU5FUzsKKwkJdmJpX2ZtdC0+Y291bnRbMV0gPSBWNExfTlRTQ19WQklfTElORVM7CisJfSBlbHNlIHsKKwkJdmJpX2ZtdC0+c3RhcnRbMF0gPSA2OworCQl2YmlfZm10LT5zdGFydFsxXSA9IDMxNDsKKwkJdmJpX2ZtdC0+Y291bnRbMF0gPSBWNExfUEFMX1ZCSV9MSU5FUzsKKwkJdmJpX2ZtdC0+Y291bnRbMV0gPSBWNExfUEFMX1ZCSV9MSU5FUzsKKwl9CisJdmJpX2ZtdC0+ZmxhZ3MgPSBWNEwyX1ZCSV9VTlNZTkM7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3N0ZChzdHJ1Y3QgcG9zZWlkb24gKnBkLCB2NGwyX3N0ZF9pZCAqbm9ybSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCXMzMiBpLCByZXQgPSAwLCBjbWRfc3RhdHVzLCBwYXJhbTsKKwlpbnQgaGVpZ2h0OworCisJZm9yIChpID0gMDsgaSA8IFBPU0VJRE9OX1RWTk9STVM7IGkrKykgeworCQlpZiAoKm5vcm0gJiBwb3NlaWRvbl90dm5vcm1zW2ldLnY0bDJfaWQpIHsKKwkJCXBhcmFtID0gcG9zZWlkb25fdHZub3Jtc1tpXS50bGdfdHZub3JtOworCQkJbG9nKCJuYW1lIDogJXMiLCBwb3NlaWRvbl90dm5vcm1zW2ldLm5hbWUpOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK2ZvdW5kOgorCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NURF9TRUwsIHBhcmFtLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQlnb3RvIG91dDsKKworCS8qIFNldCB2Ymkgc2l6ZSBhbmQgY2hlY2sgdGhlIGhlaWdodCBvZiB0aGUgZnJhbWUgKi8KKwljb250ZXh0ID0gJnZpZGVvLT5jb250ZXh0OworCWNvbnRleHQtPnR2bm9ybWlkID0gcG9zZWlkb25fdHZub3Jtc1tpXS52NGwyX2lkOworCWlmIChjb250ZXh0LT50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgeworCQl2YmktPnZiaV9zaXplID0gVjRMX05UU0NfVkJJX0ZSQU1FU0laRTsKKwkJaGVpZ2h0ID0gNDgwOworCX0gZWxzZSB7CisJCXZiaS0+dmJpX3NpemUgPSBWNExfUEFMX1ZCSV9GUkFNRVNJWkU7CisJCWhlaWdodCA9IDU3NjsKKwl9CisKKwlwaXggPSAmY29udGV4dC0+cGl4OworCWlmIChwaXgtPmhlaWdodCAhPSBoZWlnaHQpIHsKKwkJcGl4LT5oZWlnaHQJPSBoZWlnaHQ7CisJCXBpeC0+c2l6ZWltYWdlIAk9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIDI7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpub3JtKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCWxvZ3MoZnJvbnQpOworCXJldHVybiBzZXRfc3RkKGZyb250LT5wZCwgbm9ybSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW4pCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisKKwlpZiAoaW4tPmluZGV4IDwgMCB8fCBpbi0+aW5kZXggPj0gUE9TRUlET05fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJjcHkoaW4tPm5hbWUsIHBkX2lucHV0c1tpbi0+aW5kZXhdLm5hbWUpOworCWluLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKworCS8qCisJICogdGhlIGF1ZGlvIGlucHV0IGluZGV4IG1peGVkIHdpdGggdGhpcyB2aWRlbyBpbnB1dCwKKwkgKiBQb3NlaWRvbiBvbmx5IGhhdmUgb25lIGF1ZGlvL3ZpZGVvLCBzZXQgdG8gIjAiCisJICovCisJaW4tPmF1ZGlvc2V0CT0gMDsKKwlpbi0+dHVuZXIJPSAwOworCWluLT5zdGQJCT0gVjRMMl9TVERfQUxMOworCWluLT5zdGF0dXMJPSAwOworCWxvZ3MoZnJvbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OworCisJbG9ncyhmcm9udCk7CisJKmkgPSBjb250ZXh0LT5zaWdfaW5kZXg7CisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIGNhbiBzdXBwb3J0IHNldmVyYWwgaW5wdXRzICovCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzMzIgcmV0LCBjbWRfc3RhdHVzOworCisJaWYgKGkgPCAwIHx8IGkgPj0gUE9TRUlET05fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwKKwkJCXBkX2lucHV0c1tpXS50bGdfc3JjLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBkLT52aWRlb19kYXRhLmNvbnRleHQuc2lnX2luZGV4ID0gaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjaGVja19jb250cm9sX2lkKF9fdTMyIGlkKQoreworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gJmNvbnRyb2xzWzBdOworCWludCBhcnJheV9zaXplID0gQVJSQVlfU0laRShjb250cm9scyk7CisKKwlmb3IgKDsgY29udHJvbCA8ICZjb250cm9sc1thcnJheV9zaXplXTsgY29udHJvbCsrKQorCQlpZiAoY29udHJvbC0+djRsMl9jdHJsLmlkICA9PSBpZCkKKwkJCXJldHVybiBjb250cm9sOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICphKQoreworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gTlVMTDsKKworCWNvbnRyb2wgPSBjaGVja19jb250cm9sX2lkKGEtPmlkKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJKmEgPSBjb250cm9sLT52NGwyX2N0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY29udHJvbCA9IE5VTEw7CisJc3RydWN0IHR1bmVyX2N1c3RvbV9wYXJhbWV0ZXJfcyB0dW5lcl9wYXJhbTsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1czsKKworCWNvbnRyb2wgPSBjaGVja19jb250cm9sX2lkKGN0cmwtPmlkKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfQ1VTVE9NX1BBUkFNRVRFUiwgY29udHJvbC0+dmNfaWQsCisJCQkmdHVuZXJfcGFyYW0sICZjbWRfc3RhdHVzLCBzaXplb2YodHVuZXJfcGFyYW0pKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWlmIChyZXQgfHwgY21kX3N0YXR1cykKKwkJcmV0dXJuIC0xOworCisJY3RybC0+dmFsdWUgPSB0dW5lcl9wYXJhbS5wYXJhbV92YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYSkKK3sKKwlzdHJ1Y3QgdHVuZXJfY3VzdG9tX3BhcmFtZXRlcl9zIHBhcmFtID0gezB9OworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gTlVMTDsKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW1zOworCisJY29udHJvbCA9IGNoZWNrX2NvbnRyb2xfaWQoYS0+aWQpOworCWlmICghY29udHJvbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbS5wYXJhbV92YWx1ZSA9IGEtPnZhbHVlOworCXBhcmFtLnBhcmFtX2lkCT0gY29udHJvbC0+dmNfaWQ7CisJcGFyYW1zID0gKihzMzIgKikmcGFyYW07IC8qIHRlbXAgY29kZSAqLworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQ1VTVE9NX1BBUkFNRVRFUiwgcGFyYW1zLCAmY21kX3N0YXR1cyk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBBdWRpbyBpb2N0bHMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWlmICgwICE9IGEtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXN0cmNweShhLT5uYW1lLCAiVVNCIGF1ZGlvIGluIik7CisJLypQb3NlaWRvbiBoYXZlIG5vIEFWTCBmdW5jdGlvbi4qLworCWEtPm1vZGUgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJjcHkoYS0+bmFtZSwgIlVTQiBhdWRpbyBpbiIpOworCWEtPm1vZGUgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gKDAgPT0gYS0+aW5kZXgpID8gMCA6IC1FSU5WQUw7Cit9CisKKy8qIFR1bmVyIGlvY3RscyAqLworc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlzdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgYXR2X3N0YXQ7CisJczMyIGNvdW50ID0gNSwgcmV0LCBjbWRfc3RhdHVzOworCWludCBpbmRleDsKKworCWlmICgwICE9IHR1bmVyLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0FOQUxPR19UViwKKwkJCQkmYXR2X3N0YXQsICZjbWRfc3RhdHVzLCBzaXplb2YoYXR2X3N0YXQpKTsKKworCXdoaWxlIChhdHZfc3RhdC5zaWdfbG9ja19idXN5ICYmIGNvdW50LS0gJiYgIXJldCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKworCQlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfQU5BTE9HX1RWLAorCQkJCSZhdHZfc3RhdCwgJmNtZF9zdGF0dXMsIHNpemVvZihhdHZfc3RhdCkpOworCX0KKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWlmIChkZWJ1Z19tb2RlKQorCQlsb2coIlA6JWQsUzolZCIsIGF0dl9zdGF0LnNpZ19wcmVzZW50LCBhdHZfc3RhdC5zaWdfc3RyZW5ndGgpOworCisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQl0dW5lci0+c2lnbmFsID0gMDsKKwllbHNlIGlmIChhdHZfc3RhdC5zaWdfcHJlc2VudCAmJiAhYXR2X3N0YXQuc2lnX3N0cmVuZ3RoKQorCQl0dW5lci0+c2lnbmFsID0gMHhGRkZGOworCWVsc2UKKwkJdHVuZXItPnNpZ25hbCA9IChhdHZfc3RhdC5zaWdfc3RyZW5ndGggKiAyNTUgLyAxMCkgPDwgODsKKworCXN0cmNweSh0dW5lci0+bmFtZSwgIlRlbGVnZW50IFN5c3RlbXMiKTsKKwl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXR1bmVyLT5yYW5nZWxvdyA9IFRVTkVSX0ZSRVFfTUlOIC8gNjI1MDA7CisJdHVuZXItPnJhbmdlaGlnaCA9IFRVTkVSX0ZSRVFfTUFYIC8gNjI1MDA7CisJdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKKwkJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOworCWluZGV4ID0gcGQtPnZpZGVvX2RhdGEuY29udGV4dC5hdWRpb19pZHg7CisJdHVuZXItPnJ4c3ViY2hhbnMgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19zdWI7CisJdHVuZXItPmF1ZG1vZGUgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19tb2RlOworCXR1bmVyLT5hZmMgPSAwOworCWxvZ3MoZnJvbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBkX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBwb3NlaWRvbiAqcGQsIGludCBpbmRleCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW0sIGF1ZGlvbW9kZTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlwYXJhbSA9IHBkX2F1ZGlvX21vZGVzW2luZGV4XS50bGdfYXVkaW9fbW9kZTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9NT0RFLCBwYXJhbSwgJmNtZF9zdGF0dXMpOworCWF1ZGlvbW9kZSA9IGdldF9hdWRpb19zdGQocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX0FOQV9TVEQsIGF1ZGlvbW9kZSwKKwkJCQkmY21kX3N0YXR1cyk7CisJaWYgKCFyZXQpCisJCXBkLT52aWRlb19kYXRhLmNvbnRleHQuYXVkaW9faWR4ID0gaW5kZXg7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICphKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCWludCBpbmRleDsKKworCWlmICgwICE9IGEtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsb2dzKGZyb250KTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQT1NFSURPTl9BVURJT01PRFM7IGluZGV4KyspCisJCWlmIChhLT5hdWRtb2RlID09IHBkX2F1ZGlvX21vZGVzW2luZGV4XS52NGwyX2F1ZGlvX21vZGUpCisJCQlyZXR1cm4gcGRfdmlkaW9jX3NfdHVuZXIocGQsIGluZGV4KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OworCisJaWYgKDAgIT0gZnJlcS0+dHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCWZyZXEtPmZyZXF1ZW5jeSA9IGNvbnRleHQtPmZyZXE7CisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwZCwgX191MzIgZnJlcXVlbmN5KQoreworCXMzMiByZXQgPSAwLCBwYXJhbSwgY21kX3N0YXR1czsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnBkLT52aWRlb19kYXRhLmNvbnRleHQ7CisKKwlwYXJhbSA9IGZyZXF1ZW5jeSAqIDYyNTAwIC8gMTAwMDsKKwlpZiAocGFyYW0gPCBUVU5FUl9GUkVRX01JTi8xMDAwIHx8IHBhcmFtID4gVFVORVJfRlJFUV9NQVggLyAxMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsIHBhcmFtLCAmY21kX3N0YXR1cyk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKworCW1zbGVlcCgyNTApOyAvKiB3YWl0IGZvciBhIHdoaWxlIHVudGlsIHRoZSBoYXJkd2FyZSBpcyByZWFkeS4gKi8KKwljb250ZXh0LT5mcmVxID0gZnJlcXVlbmN5OworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworI2lmZGVmIENPTkZJR19QTQorCXBkLT5wbV9zdXNwZW5kID0gcG1fdmlkZW9fc3VzcGVuZDsKKwlwZC0+cG1fcmVzdW1lID0gcG1fdmlkZW9fcmVzdW1lOworI2VuZGlmCisJcmV0dXJuIHNldF9mcmVxdWVuY3kocGQsIGZyZXEtPmZyZXF1ZW5jeSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZnJvbnQtPnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmcm9udC0+cSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmcm9udC0+cSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZyb250LT5xLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKy8qIEp1c3Qgc3RvcCB0aGUgVVJCcywgZG8gbm90IGZyZWUgdGhlIFVSQnMgKi8KK2ludCB1c2JfdHJhbnNmZXJfc3RvcChzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaWYgKHZpZGVvLT5pc19zdHJlYW1pbmcpIHsKKwkJaW50IGk7CisJCXMzMiBjbWRfc3RhdHVzOworCQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gdmlkZW8tPnBkOworCisJCXZpZGVvLT5pc19zdHJlYW1pbmcgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07ICsraSkgeworCQkJaWYgKHZpZGVvLT51cmJfYXJyYXlbaV0pCisJCQkJdXNiX2tpbGxfdXJiKHZpZGVvLT51cmJfYXJyYXlbaV0pOworCQl9CisKKwkJc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsCisJCQkgICAgICAgJmNtZF9zdGF0dXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHN0b3BfYWxsX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaQk9ICZwZC0+dmJpX2RhdGE7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJaWYgKHZpZGVvLT5pc19zdHJlYW1pbmcpIHsKKwkJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmlkZW8tPmZyb250OworCisJCS8qIHN0b3AgdGhlIFVSQnMgKi8KKwkJdXNiX3RyYW5zZmVyX3N0b3AodmlkZW8pOworCQlmcmVlX2FsbF91cmIodmlkZW8pOworCisJCS8qIHN0b3AgdGhlIGhvc3Qgc2lkZSBvZiBWSURFTyAqLworCQl2aWRlb2J1Zl9zdG9wKCZmcm9udC0+cSk7CisJCXZpZGVvYnVmX21tYXBfZnJlZSgmZnJvbnQtPnEpOworCisJCS8qIHN0b3AgdGhlIGhvc3Qgc2lkZSBvZiBWQkkgKi8KKwkJZnJvbnQgPSB2YmktPmZyb250OworCQlpZiAoZnJvbnQpIHsKKwkJCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKKwkJCXZpZGVvYnVmX21tYXBfZnJlZSgmZnJvbnQtPnEpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGJ1YmJsZXMgY2FuIHNlcmlvdXNseSBkYW1hZ2UgdGhlIHZpZGVvJ3MgcXVhbGl0eSwKKyAqIHRob3VnaCBpdCBvY2N1cnMgaW4gdmVyeSByYXJlIHNpdHVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgaXNvX2J1YmJsZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW87CisJc3RydWN0IHBvc2VpZG9uICpwZDsKKworCXZpZGVvID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB2aWRlb19kYXRhLCBidWJibGVfd29yayk7CisJcGQgPSB2aWRlby0+cGQ7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJdXNiX3RyYW5zZmVyX3N0b3AodmlkZW8pOworCW1zbGVlcCg1MDApOworCXN0YXJ0X3ZpZGVvX3N0cmVhbShwZCk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Cit9CisKKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCisJbG9ncyhmcm9udCk7CisJaWYgKHVubGlrZWx5KHR5cGUgIT0gZnJvbnQtPnR5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZyb250LT5xKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlsb2dzKGZyb250KTsKKwlpZiAodW5saWtlbHkodHlwZSAhPSBmcm9udC0+dHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZyb250LT5xKTsKK30KKworLyogU2V0IHRoZSBmaXJtd2FyZSdzIGRlZmF1bHQgdmFsdWVzIDogbmVlZCBhbHRlcnNldHRpbmcgKi8KK3N0YXRpYyBpbnQgcGRfdmlkZW9fY2hlY2ttb2RlKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMsIGF1ZGlvbW9kZTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi8yKTsKKworCS8qIGNob29zZSB0aGUgYWx0ZXJzZXR0aW5nICovCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsCisJCQkJCShwZC0+Y3VyX3RyYW5zZmVyX21vZGUgPworCQkJCQkgSVNPXzNLX0JVTEtfQUxURVJOQVRFX0lGQUNFIDoKKwkJCQkJIEJVTEtfQUxURVJOQVRFX0lGQUNFKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciBQQUwtRCAsIHdpdGggdGhlIFZCSSBlbmFibGVkKi8KKwlyZXQgPSBzZXRfdHVuZXJfbW9kZShwZCwgVExHX01PREVfQU5BTE9HX1RWKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBTR05MX1NSQ19TRUwsCisJCQkJVExHX1NJR19TUkNfQU5URU5OQSwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NURF9TRUwsCisJCQkJVExHX1RVTkVfVlNURF9QQUxfRCwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NUUkVBTV9GTVRfU0VMLAorCQkJCVRMR19UVU5FUl9WSURfRk9STUFUX1lVViwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1JPU09MVV9TRUwsCisJCQkJVExHX1RVTkVfVklEX1JFU183MjAsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULCBUVU5FUl9GUkVRX01JTiwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZCSV9EQVRBX1NFTCwgMSwgJmNtZF9zdGF0dXMpOy8qIGVuYWJsZSB2YmkgKi8KKworCS8qIHNldCB0aGUgYXVkaW8gKi8KKwlhdWRpb21vZGUgPSBnZXRfYXVkaW9fc3RkKHBkLT52aWRlb19kYXRhLmNvbnRleHQudHZub3JtaWQpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9BTkFfU1RELCBhdWRpb21vZGUsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9BVURfTU9ERSwKKwkJCQlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgQVVESU9fU0FNUExFX1JBVEVfU0VMLAorCQkJCUFUVl9BVURJT19SQVRFXzQ4SywgJmNtZF9zdGF0dXMpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbV92aWRlb19zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJLyogc3RvcCBhdWRpbyAqLworCXBtX2Fsc2Ffc3VzcGVuZChwZCk7CisKKwkvKiBzdG9wIGFuZCBmcmVlIGFsbCB0aGUgVVJCcyAqLworCXVzYl90cmFuc2Zlcl9zdG9wKCZwZC0+dmlkZW9fZGF0YSk7CisJZnJlZV9hbGxfdXJiKCZwZC0+dmlkZW9fZGF0YSk7CisKKwkvKiByZXNldCB0aGUgaW50ZXJmYWNlICovCisJdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsIDApOworCW1zbGVlcCgzMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfdjRsMl9jb250ZXh0KHN0cnVjdCBwb3NlaWRvbiAqcGQsCisJCQkJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBwZC0+dmlkZW9fZGF0YS5mcm9udDsKKworCXBkX3ZpZGVvX2NoZWNrbW9kZShwZCk7CisKKwlzZXRfc3RkKHBkLCAmY29udGV4dC0+dHZub3JtaWQpOworCXZpZGlvY19zX2lucHV0KE5VTEwsIGZyb250LCBjb250ZXh0LT5zaWdfaW5kZXgpOworCXBkX3ZpZGlvY19zX3R1bmVyKHBkLCBjb250ZXh0LT5hdWRpb19pZHgpOworCXBkX3ZpZGlvY19zX2ZtdChwZCwgJmNvbnRleHQtPnBpeCk7CisJc2V0X2ZyZXF1ZW5jeShwZCwgY29udGV4dC0+ZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fdmlkZW9fcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCisJLyogcmVzdW1lIHRoZSB2aWRlbyAqLworCS8qIFsxXSByZXN0b3JlIHRoZSBvcmlnaW4gVjRMMiBwYXJhbWV0ZXJzICovCisJcmVzdG9yZV92NGwyX2NvbnRleHQocGQsICZ2aWRlby0+Y29udGV4dCk7CisKKwkvKiBbMl0gaW5pdGlhdGUgdmlkZW8gY29weSB2YXJpYWJsZXMgKi8KKwlpZiAodmlkZW8tPmZyb250LT5jdXJyX2ZyYW1lKQorCQlpbml0X2NvcHkodmlkZW8sIDApOworCisJLyogWzNdIGZpcmUgdXJicwkqLworCXN0YXJ0X3ZpZGVvX3N0cmVhbShwZCk7CisKKwkvKiByZXN1bWUgdGhlIGF1ZGlvICovCisJcG1fYWxzYV9yZXN1bWUocGQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgc2V0X2RlYnVnX21vZGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgZGVidWdfbW9kZSkKK3sKKwl2ZmQtPmRlYnVnID0gMDsKKwlpZiAoZGVidWdfbW9kZSAmIDB4MSkKKwkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEw7CisJaWYgKGRlYnVnX21vZGUgJiAweDIpCisJCXZmZC0+ZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMIHwgVjRMMl9ERUJVR19JT0NUTF9BUkc7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdmlkZW9fY29udGV4dChzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0KQoreworCWNvbnRleHQtPnNpZ19pbmRleAk9IDA7CisJY29udGV4dC0+YXVkaW9faWR4CT0gMTsgLyogc3RlcmVvICovCisJY29udGV4dC0+dHZub3JtaWQgIAk9IFY0TDJfU1REX1BBTF9EOworCWNvbnRleHQtPnBpeCA9IChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSB7CisJCQkJLndpZHRoCQk9IDcyMCwKKwkJCQkuaGVpZ2h0CQk9IDU3NiwKKwkJCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJCQkuZmllbGQJCT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJCS5ieXRlc3BlcmxpbmUJPSA3MjAgKiAyLAorCQkJCS5zaXplaW1hZ2UJPSA3MjAgKiA1NzYgKiAyLAorCQkJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJCQkucHJpdgkJPSAwCisJCQl9OworfQorCitzdGF0aWMgaW50IHBkX3ZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBOVUxMOworCWludCByZXQgPSAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKworCWlmICh2ZmQtPnZmbF90eXBlID09IFZGTF9UWVBFX0dSQUJCRVIKKwkJJiYgIShwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9BTkFMT0cpKSB7CisJCWZyb250ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyb250X2ZhY2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmcm9udCkKKwkJCWdvdG8gb3V0OworCisJCXBkLT5jdXJfdHJhbnNmZXJfbW9kZQk9IHVzYl90cmFuc2Zlcl9tb2RlOy8qIGJ1bGsgb3IgaXNvICovCisJCWluaXRfdmlkZW9fY29udGV4dCgmcGQtPnZpZGVvX2RhdGEuY29udGV4dCk7CisKKwkJcmV0ID0gcGRfdmlkZW9fY2hlY2ttb2RlKHBkKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKGZyb250KTsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwZC0+c3RhdGUJCXw9IFBPU0VJRE9OX1NUQVRFX0FOQUxPRzsKKwkJZnJvbnQtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlwZC0+dmlkZW9fZGF0YS51c2VycysrOworCQlzZXRfZGVidWdfbW9kZSh2ZmQsIGRlYnVnX21vZGUpOworCisJCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZnJvbnQtPnEsICZwZF92aWRlb19xb3BzLAorCQkJCU5VTEwsICZmcm9udC0+cXVldWVfbG9jaywKKwkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELC8qIHZpZGVvIGlzIGludGVybGFjZCAqLworCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwvKml0J3MgZW5vdWdoKi8KKwkJCQlmcm9udCk7CisJfSBlbHNlIGlmICh2ZmQtPnZmbF90eXBlID09IFZGTF9UWVBFX1ZCSQorCQkmJiAhKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX1ZCSSkpIHsKKwkJZnJvbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJvbnRfZmFjZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWZyb250KQorCQkJZ290byBvdXQ7CisKKwkJcGQtPnN0YXRlCXw9IFBPU0VJRE9OX1NUQVRFX1ZCSTsKKwkJZnJvbnQtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCQlwZC0+dmJpX2RhdGEuZnJvbnQgPSBmcm9udDsKKwkJcGQtPnZiaV9kYXRhLnVzZXJzKys7CisKKwkJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmcm9udC0+cSwgJnBkX3ZpZGVvX3FvcHMsCisJCQkJTlVMTCwgJmZyb250LT5xdWV1ZV9sb2NrLAorCQkJCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUsCisJCQkJVjRMMl9GSUVMRF9OT05FLCAvKiB2YmkgaXMgTk9ORSBtb2RlICovCisJCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLAorCQkJCWZyb250KTsKKwl9IGVsc2UgeworCQkvKiBtYXliZSBhZGQgRk0gc3VwcG9ydCBoZXJlICovCisJCWxvZygib3RoZXIgIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWZyb250LT5wZAkJPSBwZDsKKwlmcm9udC0+Y3Vycl9mcmFtZQk9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmZyb250LT5hY3RpdmUpOworCXNwaW5fbG9ja19pbml0KCZmcm9udC0+cXVldWVfbG9jayk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEJPSBmcm9udDsKKwlrcmVmX2dldCgmcGQtPmtyZWYpOworCisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIDA7CitvdXQ6CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGRfdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzMzIgY21kX3N0YXR1cyA9IDA7CisKKwlsb2dzKGZyb250KTsKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisKKwlpZiAoZnJvbnQtPnR5cGUJPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfQU5BTE9HOworCisJCS8qIHN0b3AgdGhlIGRldmljZSwgYW5kIGZyZWUgdGhlIFVSQnMgKi8KKwkJdXNiX3RyYW5zZmVyX3N0b3AoJnBkLT52aWRlb19kYXRhKTsKKwkJZnJlZV9hbGxfdXJiKCZwZC0+dmlkZW9fZGF0YSk7CisKKwkJLyogc3RvcCB0aGUgZmlybXdhcmUgKi8KKwkJc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsCisJCQkgICAgICAgJmNtZF9zdGF0dXMpOworCisJCXBkLT5maWxlX2Zvcl9zdHJlYW0gPSBOVUxMOworCQlwZC0+dmlkZW9fZGF0YS51c2Vycy0tOworCX0gZWxzZSBpZiAoZnJvbnQtPnR5cGUJPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX1ZCSTsKKwkJcGQtPnZiaV9kYXRhLmZyb250ID0gTlVMTDsKKwkJcGQtPnZiaV9kYXRhLnVzZXJzLS07CisJfQorCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZyb250LT5xKTsKKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWtmcmVlKGZyb250KTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF92aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuICB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZnJvbnQtPnEsIHZtYSk7Cit9CisKK3Vuc2lnbmVkIGludCBwZF92aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsICZmcm9udC0+cSwgdGFibGUpOworfQorCitzc2l6ZV90IHBkX3ZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmcm9udC0+cSwgYnVmZmVyLCBjb3VudCwgcHBvcywKKwkJCQkwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKy8qIFRoaXMgc3RydWN0IHdvcmtzIGZvciBib3RoIFZJREVPIGFuZCBWQkkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcGRfdmlkZW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcGRfdmlkZW9fb3BlbiwKKwkucmVsZWFzZQk9IHBkX3ZpZGVvX3JlbGVhc2UsCisJLnJlYWQJCT0gcGRfdmlkZW9fcmVhZCwKKwkucG9sbAkJPSBwZF92aWRlb19wb2xsLAorCS5tbWFwCQk9IHBkX3ZpZGVvX21tYXAsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwgLyogbWF5YmUgY2hhbmdlZCBpbiBmdXR1cmUgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcGRfdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB2aWRpb2NfcXVlcnljYXAsCisKKwkvKiBWaWRlbyBmb3JtYXQgKi8KKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJPSB2aWRpb2NfZ19mbXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10LAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAk9IHZpZGlvY19zX2ZtdCwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAJPSB2aWRpb2NfZ19mbXRfdmJpLCAvKiBWQkkgKi8KKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10LAorCisJLyogSW5wdXQgKi8KKwkudmlkaW9jX2dfaW5wdXQJCT0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCisJLyogQXVkaW8gaW9jdGxzICovCisJLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAorCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCisKKwkvKiBUdW5lciBpb2N0bHMgKi8KKwkudmlkaW9jX2dfdHVuZXIJCT0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyCQk9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKworCS8qIEJ1ZmZlciBoYW5kbGVycyAqLworCS52aWRpb2NfcmVxYnVmcwkJPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCT0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQk9IHZpZGlvY19kcWJ1ZiwKKworCS8qIFN0cmVhbSBvbi9vZmYgKi8KKwkudmlkaW9jX3N0cmVhbW9uCT0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCT0gdmlkaW9jX3N0cmVhbW9mZiwKKworCS8qIENvbnRyb2wgaGFuZGxpbmcgKi8KKwkudmlkaW9jX3F1ZXJ5Y3RybAk9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwJCT0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB2aWRpb2Nfc19jdHJsLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcGRfdmlkZW9fdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiVGVsZWdlbnQtVmlkZW8iLAorCS5mb3BzID0gJnBkX3ZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkudHZub3JtcyA9IFY0TDJfU1REX0FMTCwKKwkuaW9jdGxfb3BzID0gJnBkX3ZpZGVvX2lvY3RsX29wcywKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXZfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0bXApCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHZmZCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwkqdmZkCQk9ICp0bXA7CisJdmZkLT5taW5vcgk9IC0xOworCXZmZC0+djRsMl9kZXYJPSAmcGQtPnY0bDJfZGV2OworCS8qdmZkLT5wYXJlbnQJPSAmKHBkLT51ZGV2LT5kZXYpOyAqLworCXZmZC0+cmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgcGQpOworCXJldHVybiB2ZmQ7Cit9CisKK3ZvaWQgZGVzdHJveV92aWRlb19kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKnZfZGV2KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9ICp2X2RldjsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2KSkKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKwllbHNlCisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldik7CisJKnZfZGV2ID0gTlVMTDsKK30KKwordm9pZCBwZF92aWRlb19leGl0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gJnBkLT52YmlfZGF0YTsKKworCWRlc3Ryb3lfdmlkZW9fZGV2aWNlKCZ2aWRlby0+dl9kZXYpOworCWRlc3Ryb3lfdmlkZW9fZGV2aWNlKCZ2YmktPnZfZGV2KTsKKwlsb2coKTsKK30KKworaW50IHBkX3ZpZGVvX2luaXQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOworCWludCByZXQgPSAtRU5PTUVNOworCisJdmlkZW8tPnZfZGV2ID0gdmRldl9pbml0KHBkLCAmcGRfdmlkZW9fdGVtcGxhdGUpOworCWlmICh2aWRlby0+dl9kZXYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmlkZW8tPnZfZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCS8qIFZCSSB1c2VzIHRoZSBzYW1lIHRlbXBsYXRlIGFzIHZpZGVvICovCisJdmJpLT52X2RldiA9IHZkZXZfaW5pdChwZCwgJnBkX3ZpZGVvX3RlbXBsYXRlKTsKKwlpZiAodmJpLT52X2RldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmJpLT52X2RldiwgVkZMX1RZUEVfVkJJLCAtMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKwlsb2coInJlZ2lzdGVyIFZJREVPL1ZCSSBkZXZpY2VzIik7CisJcmV0dXJuIDA7CitvdXQ6CisJbG9nKCJWSURFTy9WQkkgZGV2aWNlcyByZWdpc3RlciBmYWlsZWQsIDogJWQiLCByZXQpOworCXBkX3ZpZGVvX2V4aXQocGQpOworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC92ZW5kb3JjbWRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvdmVuZG9yY21kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNmY0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvdmVuZG9yY21kcy5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIFZFTkRPUl9DTURfSF8KKyNkZWZpbmUgVkVORE9SX0NNRF9IXworCisjZGVmaW5lIEJVTEtfQUxURVJOQVRFX0lGQUNFCQkoMikKKyNkZWZpbmUgSVNPXzNLX0JVTEtfQUxURVJOQVRFX0lGQUNFICAgICAoMSkKKyNkZWZpbmUgUkVRX1NFVF9DTUQJCQkoMFgwMCkKKyNkZWZpbmUgUkVRX0dFVF9DTUQJCQkoMFg4MCkKKworZW51bSB0bGdfX2FuYWxvZ19hdWRpb19zdGFuZGFyZCB7CisJVExHX1RVTkVfQVNURF9OT05FCT0gMHgwMDAwMDAwMCwKKwlUTEdfVFVORV9BU1REX0EyCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9BU1REX05JQ0FNCT0gMHgwMDAwMDAwMiwKKwlUTEdfVFVORV9BU1REX0VJQUoJPSAweDAwMDAwMDA0LAorCVRMR19UVU5FX0FTVERfQlRTQwk9IDB4MDAwMDAwMDgsCisJVExHX1RVTkVfQVNURF9GTV9VUwk9IDB4MDAwMDAwMTAsCisJVExHX1RVTkVfQVNURF9GTV9FVVIJPSAweDAwMDAwMDIwLAorCVRMR19UVU5FX0FTVERfQUxMCT0gMHgwMDAwMDAzZgorfTsKKworLyoKKyAqIGlkZW50aWZpZXJzIGZvciBDdXN0b20gUGFyYW1ldGVyIG1lc3NhZ2VzLgorICogQHR5cGVkZWYgY21kX2N1c3RvbV9wYXJhbV9pZF90CisgKi8KK2VudW0gY21kX2N1c3RvbV9wYXJhbV9pZCB7CisJQ1VTVF9QQVJNX0lEX05PTkUJCT0gMHgwMCwKKwlDVVNUX1BBUk1fSURfQlJJR0hUTkVTU19DVFJMCT0gMHgwMSwKKwlDVVNUX1BBUk1fSURfQ09OVFJBU1RfQ1RSTAk9IDB4MDIsCisJQ1VTVF9QQVJNX0lEX0hVRV9DVFJMCQk9IDB4MDMsCisJQ1VTVF9QQVJNX0lEX1NBVFVSQVRJT05fQ1RSTAkgID0gMHgwNCwKKwlDVVNUX1BBUk1fSURfQVVESU9fU05SX1RIUkVTSE9MRCAgPSAweDEwLAorCUNVU1RfUEFSTV9JRF9BVURJT19BR0NfVEhSRVNIT0xEICA9IDB4MTEsCisJQ1VTVF9QQVJNX0lEX01BWAorfTsKKworc3RydWN0ICB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgeworCXVpbnQxNl90CXBhcmFtX2lkOwkgLyogIFBhcmFtZXRlciBpZGVudGlmaWVyICAqLworCXVpbnQxNl90CXBhcmFtX3ZhbHVlOwkgLyogIFBhcmFtZXRlciB2YWx1ZQkgICAqLworfTsKKworc3RydWN0ICB0dW5lcl9iZXJfcmF0ZV9zIHsKKwl1aW50MzJfdAliZXJfcmF0ZTsgIC8qICBCRVIgc2FtcGxlIHJhdGUgaW4gc2Vjb25kcyAgICovCit9OworCitzdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgeworCXVpbnQzMl90CXNpZ19wcmVzZW50OworCXVpbnQzMl90CXNpZ19sb2NrZWQ7CisJdWludDMyX3QJc2lnX2xvY2tfYnVzeTsKKwl1aW50MzJfdAlzaWdfc3RyZW5ndGg7CSAgIC8qICBtaWxsaURiCSAgKi8KKwl1aW50MzJfdAl0dl9hdWRpb19jaGFuOwkgIC8qICBtb25vL3N0ZXJlby9zYXAqLworCXVpbnQzMl90IAltdmlzaW9uX3N0YXQ7CSAgIC8qICBtYWNyb3Zpc2lvbiBzdGF0dXMgKi8KK307CisKK3N0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyB7CisJdWludDMyX3Qgc2lnX3ByZXNlbnQ7ICAgLyogIEJvb2xlYW4qLworCXVpbnQzMl90IHNpZ19sb2NrZWQ7CS8qICBCb29sZWFuICovCisJdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgLyogIEJvb2xlYW4JKENhbiB0aGlzIHRpbWUtb3V0PykgKi8KKwl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAvKiAgbWlsbGlEYiovCit9OworCitzdHJ1Y3QgdHVuZXJfZm1fc2lnX3N0YXRfcyB7CisJdWludDMyX3Qgc2lnX3ByZXNlbnQ7CS8qIEJvb2xlYW4qLworCXVpbnQzMl90IHNpZ19sb2NrZWQ7CSAvKiBCb29sZWFuICovCisJdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgIC8qIEJvb2xlYW4gKi8KKwl1aW50MzJfdCBzaWdfc3RlcmVvX21vbm87LyogVEJEKi8KKwl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAgLyogbWlsbGlEYiovCit9OworCitlbnVtIF90YWdfdGxnX3R1bmVfc3J2X2NtZCB7CisJVExHX1RVTkVfUExBWV9TVkNfU1RBUlQgPSAxLAorCVRMR19UVU5FX1BMQVlfU1ZDX1NUT1AKK307CisKK2VudW0gIF90YWdfdHVuZV9hdHZfYXVkaW9fbW9kZV9jYXBzIHsKKwlUTEdfVFVORV9UVkFVRElPX01PREVfTU9OTwk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTwk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQQk9IDB4MDAwMDAwMTAsLyogUHJpbWFyeSBsYW5ndWFnZSovCisJVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQgk9IDB4MDAwMDAwMjAsLyogMm5kIGF2YWlsIGxhbmd1YWdlKi8KKwlUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19DCT0gMHgwMDAwMDA0MAorfTsKKworCitlbnVtICAgX3RhZ190dW5lcl9hdHZfYXVkaW9fcmF0ZXMgeworCUFUVl9BVURJT19SQVRFX05PTkUJPSAweDAwLC8qIEF1ZGlvIG5vdCBzdXBwb3J0ZWQqLworCUFUVl9BVURJT19SQVRFXzMySwk9IDB4MDEsLyogQXVkaW8gcmF0ZSA9IDMyIEtIeiovCisJQVRWX0FVRElPX1JBVEVfNDhLCT0gMHgwMiwgLyogQXVkaW8gcmF0ZSA9IDQ4IEtIeiovCisJQVRWX0FVRElPX1JBVEVfMzFfMjVLCT0gMHgwNCAvKiBBdWRpbyByYXRlID0gMzEuMjVLSHogKi8KK307CisKK2VudW0gIF90YWdfdHVuZV9hdHZfdmlkX3Jlc19jYXBzIHsKKwlUTEdfVFVORV9WSURfUkVTX05PTkUJPSAweDAwMDAwMDAwLAorCVRMR19UVU5FX1ZJRF9SRVNfNzIwCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9WSURfUkVTXzcwNAk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVfVklEX1JFU18zNjAJPSAweDAwMDAwMDA0Cit9OworCitlbnVtIF90YWdfdHVuZXJfYW5hbG9nX3ZpZGVvX2Zvcm1hdCB7CisJVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORVJfVklEX0ZPUk1BVF9ZQ1JDQgk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVSX1ZJRF9GT1JNQVRfUkdCXzU2NQk9IDB4MDAwMDAwMDQsCit9OworCitlbnVtICB0bGdfZXh0X2F1ZGlvX3N1cHBvcnQgeworCVRMR19FWFRfQVVESU9fTk9ORSAJPSAweDAwLC8qICBObyBleHRlcm5hbCBhdWRpbyBpbnB1dCBzdXBwb3J0ZWQgKi8KKwlUTEdfRVhUX0FVRElPX0xSCT0gMHgwMS8qICBMUiBleHRlcm5hbCBhdWRpbyBpbnB1dHMgc3VwcG9ydGVkKi8KK307CisKK2VudW0geworCVRMR19NT0RFX05PTkUJCQk9IDB4MDAsIC8qIE5vIE1vZGUgc3BlY2lmaWVkKi8KKwlUTEdfTU9ERV9BTkFMT0dfVFYJCT0gMHgwMSwgLyogQW5hbG9nIFRlbGV2aXNpb24gbW9kZSovCisJVExHX01PREVfQU5BTE9HX1RWX1VOQ09NUAk9IDB4MDEsIC8qIEFuYWxvZyBUZWxldmlzaW9uIG1vZGUqLworCVRMR19NT0RFX0FOQUxPR19UVl9DT01QICAJPSAweDAyLCAvKiBBbmFsb2cgVFYgbW9kZSAoY29tcHJlc3NlZCkqLworCVRMR19NT0RFX0ZNX1JBRElPCQk9IDB4MDQsIC8qIEZNIFJhZGlvIG1vZGUqLworCVRMR19NT0RFX0RWQl9UCQkJPSAweDA4LCAvKiBEaWdpdGFsIFRWIChEVkItVCkqLworfTsKKworZW51bSAgdGxnX3NpZ25hbF9zb3VyY2VzX3QgeworCVRMR19TSUdfU1JDX05PTkUJPSAweDAwLC8qIFNpZ25hbCBzb3VyY2Ugbm90IHNwZWNpZmllZCAqLworCVRMR19TSUdfU1JDX0FOVEVOTkEJPSAweDAxLC8qIFNpZ25hbCBzcmMgaXM6IEFudGVubmEgKi8KKwlUTEdfU0lHX1NSQ19DQUJMRQk9IDB4MDIsLyogU2lnbmFsIHNyYyBpczogQ29heCBDYWJsZSovCisJVExHX1NJR19TUkNfU1ZJREVPCT0gMHgwNCwvKiBTaWduYWwgc3JjIGlzOiBTX1ZJREVPICAgKi8KKwlUTEdfU0lHX1NSQ19DT01QT1NJVEUgICA9IDB4MDggLyogU2lnbmFsIHNyYyBpczogQ29tcG9zaXRlIFZpZGVvICovCit9OworCitlbnVtIHR1bmVyX2FuYWxvZ192aWRlb19zdGFuZGFyZCB7CisJVExHX1RVTkVfVlNURF9OT05FCT0gMHgwMDAwMDAwMCwKKwlUTEdfVFVORV9WU1REX05UU0NfTQk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfVlNURF9OVFNDX01fSgk9IDB4MDAwMDAwMDIsLyogSmFwYW4gICAqLworCVRMR19UVU5FX1ZTVERfUEFMX0IJPSAweDAwMDAwMDEwLAorCVRMR19UVU5FX1ZTVERfUEFMX0QJPSAweDAwMDAwMDIwLAorCVRMR19UVU5FX1ZTVERfUEFMX0cJPSAweDAwMDAwMDQwLAorCVRMR19UVU5FX1ZTVERfUEFMX0gJPSAweDAwMDAwMDgwLAorCVRMR19UVU5FX1ZTVERfUEFMX0kJPSAweDAwMDAwMTAwLAorCVRMR19UVU5FX1ZTVERfUEFMX00JPSAweDAwMDAwMjAwLAorCVRMR19UVU5FX1ZTVERfUEFMX04JPSAweDAwMDAwNDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fQgk9IDB4MDAwMDEwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9ECT0gMHgwMDAwMjAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0cJPSAweDAwMDA0MDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fSAk9IDB4MDAwMDgwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9LCT0gMHgwMDAxMDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0sxCT0gMHgwMDAyMDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0wJPSAweDAwMDQwMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fTDEJPSAweDAwMDgwMDAwLAorCVRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gPSAweDAwMTAwMDAwCit9OworCitlbnVtIHRsZ19tb2RlX2NhcHMgeworCVRMR19NT0RFX0NBUFNfTk9ORQkJPSAweDAwLCAgLyogIE5vIE1vZGUgc3BlY2lmaWVkCSovCisJVExHX01PREVfQ0FQU19BTkFMT0dfVFZfVU5DT01QICA9IDB4MDEsICAvKiAgQW5hbG9nIFRWIG1vZGUgICAgICovCisJVExHX01PREVfQ0FQU19BTkFMT0dfVFZfQ09NUAk9IDB4MDIsICAvKiAgQW5hbG9nIFRWIChjb21wcmVzc2VkKSovCisJVExHX01PREVfQ0FQU19GTV9SQURJTwkJPSAweDA0LCAgLyogIEZNIFJhZGlvIG1vZGUJKi8KKwlUTEdfTU9ERV9DQVBTX0RWQl9UCQk9IDB4MDgsICAvKiAgRGlnaXRhbCBUViAoRFZCLVQpCSovCit9OworCitlbnVtIHBvc2VpZG9uX3ZlbmRvcl9jbWRzIHsKKwlMQVNUX0NNRF9TVEFUCQk9IDB4MDAsCisJR0VUX0NISVBfSUQJCT0gMHgwMSwKKwlHRVRfRldfSUQJCT0gMHgwMiwKKwlQUk9EVUNUX0NBUFMJCT0gMHgwMywKKworCVRVTkVfTU9ERV9DQVBfQVRWCT0gMHgxMCwKKwlUVU5FX01PREVfQ0FQX0FUVkNPTVAJPSAwWDEwLAorCVRVTkVfTU9ERV9DQVBfRFZCVAk9IDB4MTAsCisJVFVORV9NT0RFX0NBUF9GTQk9IDB4MTAsCisJVFVORV9NT0RFX1NFTEVDVAk9IDB4MTEsCisJVFVORV9GUkVRX1NFTEVDVAk9IDB4MTIsCisJU0dOTF9TUkNfU0VMCQk9IDB4MTMsCisKKwlWSURFT19TVERfU0VMCQk9IDB4MTQsCisJVklERU9fU1RSRUFNX0ZNVF9TRUwJPSAweDE1LAorCVZJREVPX1JPU09MVV9BVkFJTAk9IDB4MTYsCisJVklERU9fUk9TT0xVX1NFTAk9IDB4MTcsCisJVklERU9fQ09OVF9QUk9URUNUCT0gMHgyMCwKKworCVZDUl9USU1JTkdfTU9EU0VMCT0gMHgyMSwKKwlFWFRfQVVESU9fQ0FQCQk9IDB4MjIsCisJRVhUX0FVRElPX1NFTAkJPSAweDIzLAorCVRFU1RfUEFUVEVSTl9TRUwJPSAweDI0LAorCVZCSV9EQVRBX1NFTAkJPSAweDI1LAorCUFVRElPX1NBTVBMRV9SQVRFX0NBUCAgID0gMHgyOCwKKwlBVURJT19TQU1QTEVfUkFURV9TRUwgICA9IDB4MjksCisJVFVORVJfQVVEX01PREUJCT0gMHgyYSwKKwlUVU5FUl9BVURfTU9ERV9BVkFJTAk9IDB4MmIsCisJVFVORVJfQVVEX0FOQV9TVEQJPSAweDJjLAorCVRVTkVSX0NVU1RPTV9QQVJBTUVURVIJPSAweDJmLAorCisJRFZCVF9UVU5FX01PREVfU0VMCT0gMHgzMCwKKwlEVkJUX0JBTkRXX0NBUAkJPSAweDMxLAorCURWQlRfQkFORFdfU0VMCQk9IDB4MzIsCisJRFZCVF9HVUFSRF9JTlRFUlZfQ0FQICAgPSAweDMzLAorCURWQlRfR1VBUkRfSU5URVJWX1NFTCAgID0gMHgzNCwKKwlEVkJUX01PRFVMQVRJT05fQ0FQCT0gMHgzNSwKKwlEVkJUX01PRFVMQVRJT05fU0VMCT0gMHgzNiwKKwlEVkJUX0lOTkVSX0ZFQ19SQVRFX0NBUCA9IDB4MzcsCisJRFZCVF9JTk5FUl9GRUNfUkFURV9TRUwgPSAweDM4LAorCURWQlRfVFJBTlNfTU9ERV9DQVAJPSAweDM5LAorCURWQlRfVFJBTlNfTU9ERV9TRUwJPSAweDNhLAorCURWQlRfU0VBUkNIX1JBTkcJPSAweDNjLAorCisJVFVORVJfU0VUVVBfQU5BTE9HCT0gMHg0MCwKKwlUVU5FUl9TRVRVUF9ESUdJVEFMCT0gMHg0MSwKKwlUVU5FUl9TRVRVUF9GTV9SQURJTwk9IDB4NDIsCisJVEFLRV9SRVFVRVNUCQk9IDB4NDMsIC8qIFRha2UgZWZmZWN0IG9mIHRoZSBjb21tYW5kICovCisJUExBWV9TRVJWSUNFCQk9IDB4NDQsIC8qIFBsYXkgc3RhcnQgb3IgUGxheSBzdG9wICovCisJVFVORVJfU1RBVFVTCQk9IDB4NDUsCisJVFVORV9QUk9QX0RWQlQJCT0gMHg0NiwKKwlFUlJfUkFURV9TVEFUUwkJPSAweDQ3LAorCVRVTkVSX0JFUl9SQVRFCQk9IDB4NDgsCisKKwlTQ0FOX0NBUFMJCT0gMHg1MCwKKwlTQ0FOX1NFVFVQCQk9IDB4NTEsCisJU0NBTl9TRVJWSUNFCQk9IDB4NTIsCisJU0NBTl9TVEFUUwkJPSAweDUzLAorCisJUElEX1NFVAkJCT0gMHg1OCwKKwlQSURfVU5TRVQJCT0gMHg1OSwKKwlQSURfTElTVAkJPSAweDVhLAorCisJSVJEX0NBUAkJCT0gMHg2MCwKKwlJUkRfTU9ERV9TRUwJCT0gMHg2MSwKKwlJUkRfU0VUVVAJCT0gMHg2MiwKKworCVBUTV9NT0RFX0NBUAkJPSAweDcwLAorCVBUTV9NT0RFX1NFTAkJPSAweDcxLAorCVBUTV9TRVJWSUNFCQk9IDB4NzIsCisJVFVORVJfUkVHX1NDUklQVAk9IDB4NzMsCisJQ01EX0NISVBfUlNUCQk9IDB4NzQsCit9OworCitlbnVtIHRsZ19idyB7CisJVExHX0JXXzUgPSA1LAorCVRMR19CV182ID0gNiwKKwlUTEdfQldfNyA9IDcsCisJVExHX0JXXzggPSA4LAorCVRMR19CV18xMiA9IDEyLAorCVRMR19CV18xNSA9IDE1Cit9OworCitzdHJ1Y3QgY21kX2Zpcm13YXJlX3ZlcnNfcyB7CisJdWludDhfdAkgZndfcmV2X21ham9yOworCXVpbnQ4X3QJIGZ3X3Jldl9taW5vcjsKKwl1aW50MTZfdCBmd19wYXRjaDsKK307CisjZW5kaWYgLyogVkVORE9SX0NNRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCA1YjNlYWExLi5jNGRhYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtMTA3OCw2ICsxMDc4LDcgQEAKIAogCQkJCWdvdG8gcmVnaXN0ZXJfY2xpZW50OwogCQkJfQorCQkJa2ZyZWUodCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJY2FzZSAweDQyOgogCQljYXNlIDB4NDM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggZDUzM2VhNS4uMGE4Nzc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtNjgwLDEwICs2ODAsNyBAQAogCXR2ZWVwcm9tX2luZm8oIkhhdXBwYXVnZSBtb2RlbCAlZCwgcmV2ICVzLCBzZXJpYWwjICVkXG4iLAogCQl0dmVlLT5tb2RlbCwgdHZlZS0+cmV2X3N0ciwgdHZlZS0+c2VyaWFsX251bWJlcik7CiAJaWYgKHR2ZWUtPmhhc19NQUNfYWRkcmVzcyA9PSAxKQotCQl0dmVlcHJvbV9pbmZvKCJNQUMgYWRkcmVzcyBpcyAlMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWFxuIiwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzBdLCB0dmVlLT5NQUNfYWRkcmVzc1sxXSwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzJdLCB0dmVlLT5NQUNfYWRkcmVzc1szXSwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzRdLCB0dmVlLT5NQUNfYWRkcmVzc1s1XSk7CisJCXR2ZWVwcm9tX2luZm8oIk1BQyBhZGRyZXNzIGlzICVwTVxuIiwgdHZlZS0+TUFDX2FkZHJlc3MpOwogCXR2ZWVwcm9tX2luZm8oInR1bmVyIG1vZGVsIGlzICVzIChpZHggJWQsIHR5cGUgJWQpXG4iLAogCQl0X25hbWUxLCB0dW5lcjEsIHR2ZWUtPnR1bmVyX3R5cGUpOwogCXR2ZWVwcm9tX2luZm8oIlRWIHN0YW5kYXJkcyVzJXMlcyVzJXMlcyVzJXMgKGVlcHJvbSAweCUwMngpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg3OGJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMKQEAgLTAsMCArMSwxMTg3IEBACisvKiBUZXhhcyBJbnN0cnVtZW50cyBUcmlwbGUgOC0vMTAtQklUIDE2NS0vMTEwLU1TUFMgVmlkZW8gYW5kIEdyYXBoaWNzCisgKiBEaWdpdGl6ZXIgd2l0aCBIb3Jpem9udGFsIFBMTCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IFNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnRpYWxseSBiYXNlZCB1cG9uIHRoZSBUVlA1MTUwIGRyaXZlcgorICogd3JpdHRlbiBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgKG1jaGVoYWJAaW5mcmFkZWFkLm9yZyksCisgKiB0aGUgVFZQNTE0eCBkcml2ZXIgd3JpdHRlbiBieSBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKiBhbmQgdGhlIFRWUDcwMDIgZHJpdmVyIGluIHRoZSBUSSBMU1AgMi4xMC4wMC4xNC4gUmV2aXNpb25zIGJ5CisgKiBNdXJhbGlkaGFyYW4gS2FyaWNoZXJpIGFuZCBTbmVoYXByYWJoYSBOYXJuYWthamUgKFRJKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZwNzAwMi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlICJ0dnA3MDAyX3JlZy5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIFRWUDcwMDIgVmlkZW8gYW5kIEdyYXBoaWNzIERpZ2l0aXplciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIE1vZHVsZSBOYW1lICovCisjZGVmaW5lIFRWUDcwMDJfTU9EVUxFX05BTUUJInR2cDcwMDIiCisKKy8qIEkyQyByZXRyeSBhdHRlbXB0cyAqLworI2RlZmluZSBJMkNfUkVUUllfQ09VTlQJCSg1KQorCisvKiBFbmQgb2YgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfRU9SCQkweDVjCisKKy8qIFJlYWQgd3JpdGUgZGVmaW5pdGlvbiBmb3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfUkVBRAkJMAorI2RlZmluZSBUVlA3MDAyX1dSSVRFCQkxCisjZGVmaW5lIFRWUDcwMDJfUkVTRVJWRUQJMgorCisvKiBJbnRlcmxhY2VkIHZzIHByb2dyZXNzaXZlIG1hc2sgYW5kIHNoaWZ0ICovCisjZGVmaW5lIFRWUDcwMDJfSVBfU0hJRlQJNQorI2RlZmluZSBUVlA3MDAyX0lOUFJfTUFTSwkoMHgwMSA8PCBUVlA3MDAyX0lQX1NISUZUKQorCisvKiBTaGlmdCBmb3IgQ1BMIGFuZCBMUEYgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfQ0xfU0hJRlQJOAorI2RlZmluZSBUVlA3MDAyX0NMX01BU0sJCTB4MGYKKworLyogRGVidWcgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0yKSIpOworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZ2lzdGVyIHZhbHVlcyAqLworc3RydWN0IGkyY19yZWdfdmFsdWUgeworCXU4IHJlZzsKKwl1OCB2YWx1ZTsKKwl1OCB0eXBlOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIGRlZmF1bHQgdmFsdWVzIChhY2NvcmRpbmcgdG8gdHZwNzAwMiBkYXRhc2hlZXQpCisgKiBJbiB0aGUgY2FzZSBvZiByZWFkLW9ubHkgcmVnaXN0ZXJzLCB0aGUgdmFsdWUgKDB4ZmYpIGlzCisgKiBuZXZlciB3cml0dGVuLiBSL1cgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZQorICogd3JpdGFibGUgYml0IGluIHRoZSByZWdpc3RlciBzdHJ1Y3QgZGVmaW5pdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfaW5pdF9kZWZhdWx0W10gPSB7CisJeyBUVlA3MDAyX0NISVBfUkVWLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDY3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4YTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IU1lOQ19PVVRfVywgMHg2MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9HX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0ZJTkVfT0ZGX01TQlMsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfR19GSU5FX09GRl9NU0JTLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JfRklORV9PRkZfTVNCUywgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0NUTF8xLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQU5EX0NMQU1QX0NUTCwgMHgyZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX09OX0dfVEhSUywgMHg1ZCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX1NFUEFSQVRPUl9USFJTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0RFVEVDVF9TVEFULCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfT1VUX0ZPUk1BVFRFUiwgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF8xLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX01JU0NfQ1RMXzIsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTUlTQ19DVExfMywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9JTl9NVVhfU0VMXzEsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSU5fTVVYX1NFTF8yLCAweDY3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfQU5EX0dfQ09BUlNFX0dBSU4sIDB4NzcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9DT0FSU0VfR0FJTiwgMHgwNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GSU5FX09GRl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfQ09BUlNFX09GRiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9HX0NPQVJTRV9PRkYsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9DT0FSU0VfT0ZGLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hTT1VUX09VVF9TVEFSVCwgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF80LCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfREdUTF9BTENfT1VUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9HX0RHVExfQUxDX09VVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfUl9ER1RMX0FMQ19PVVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0FVVE9fTFZMX0NUTF9FTkFCTEUsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfREdUTF9BTENfT1VUX01TQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9BVVRPX0xWTF9DVExfRklMVEVSLCAweDUzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyAweDI5LCAweDA4LCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX0ZJTkVfQ0xBTVBfQ1RMLCAweDA3LCBUVlA3MDAyX1dSSVRFIH0sCisJLyogUFdSX0NUTCBpcyBjb250cm9sbGVkIG9ubHkgYnkgdGhlIHByb2JlIGFuZCByZXNldCBmdW5jdGlvbnMgKi8KKwl7IFRWUDcwMDJfUFdSX0NUTCwgMHgwMCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9BRENfU0VUVVAsIDB4NTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ09BUlNFX0NMQU1QX0NUTCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TT0dfQ0xBTVAsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUkdCX0NPQVJTRV9DTEFNUF9DVEwsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU09HX0NPQVJTRV9DTEFNUF9DVEwsIDB4MDQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgMHgzMiwgMHgxOCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgMHgzMywgMHg2MCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9NVklTX1NUUklQUEVSX1csIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfVlNZTkNfQUxHTiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0JZUEFTUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0xfRlJBTUVfU1RBVF9NU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQ0xLX0xfU1RBVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfSFNZTkNfVywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX1ZTWU5DX1csIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9MX0xFTkdUSF9UT0wsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IDB4M2UsIDB4NjAsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfVklERU9fQldUSF9DVEwsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgyYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgyYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GQklUX0ZfMF9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GQklUX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTFNCUywgMHhlMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTVNCUywgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTFNCUywgMHg0ZiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTVNCUywgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTFNCUywgMHhjZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTVNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTFNCUywgMHhhYiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTVNCUywgMHhmMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTVNCUywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTFNCUywgMHg1NSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTVNCUywgMHhmYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTFNCUywgMHg3OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTVNCUywgMHhmMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTFNCUywgMHg4OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTVNCUywgMHhmZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTVNCUywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCS8qIFRoaXMgc2lnbmFscyBlbmQgb2YgcmVnaXN0ZXIgdmFsdWVzICovCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA0ODBQICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc180ODBQW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHgzNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg5MSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4MEIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHgxOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNTc2UCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNTc2UFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4MzYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHgxOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4OUIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDBGLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDJELCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4MTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDEwODBJNjAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzEwODBJNjBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDg5LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg4YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgxNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciAxMDgwUDYwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc18xMDgwUDYwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg4OSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweEUwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4OGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgMTA4MEk1MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfMTA4MEk1MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4YTUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHg5OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDhhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDE3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDcyMFA2MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNzIwUDYwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg2NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweGEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4NEIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MkQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNzIwUDUwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc183MjBQNTBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDdiLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg0QiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgyRCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBTdHJ1Y3QgbGlzdCBmb3IgYXZhaWxhYmxlIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHR2cDcwMDJfZm10X2xpc3RbXSA9IHsKKwl7CisJIC5pbmRleCA9IDAsCisJIC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCSAuZmxhZ3MgPSAwLAorCSAuZGVzY3JpcHRpb24gPSAiOC1iaXQgVVlWWSA0OjI6MiBGb3JtYXQiLAorCSAucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwl9LAorfTsKKworI2RlZmluZSBOVU1fRk9STUFUUwkJQVJSQVlfU0laRSh0dnA3MDAyX2ZtdF9saXN0KQorCisvKiBQcmVzZXQgZGVmaW5pdGlvbiBmb3IgaGFuZGxpbmcgZGV2aWNlIG9wZXJhdGlvbiAqLworc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24geworCXUzMiBwcmVzZXQ7CisJY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgKnBfc2V0dGluZ3M7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3Jfc3BhY2U7CisJZW51bSB2NGwyX2ZpZWxkIHNjYW5tb2RlOworCXUxNiBwcm9ncmVzc2l2ZTsKKwl1MTYgbGluZXNfcGVyX2ZyYW1lOworCXUxNiBjcGxfbWluOworCXUxNiBjcGxfbWF4OworfTsKKworLyogU3RydWN0IGxpc3QgZm9yIGRpZ2l0YWwgdmlkZW8gcHJlc2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uIHR2cDcwMDJfcHJlc2V0c1tdID0geworCXsKKwkJVjRMMl9EVl83MjBQNjAsCisJCXR2cDcwMDJfcGFybXNfNzIwUDYwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4MkVFLAorCQkxMzUsCisJCTE1MworCX0sCisJeworCQlWNEwyX0RWXzEwODBJNjAsCisJCXR2cDcwMDJfcGFybXNfMTA4MEk2MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkwLAorCQkweDQ2NSwKKwkJMTgxLAorCQkyMDUKKwl9LAorCXsKKwkJVjRMMl9EVl8xMDgwSTUwLAorCQl0dnA3MDAyX3Bhcm1zXzEwODBJNTAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJMCwKKwkJMHg0NjUsCisJCTIxNywKKwkJMjQ1CisJfSwKKwl7CisJCVY0TDJfRFZfNzIwUDUwLAorCQl0dnA3MDAyX3Bhcm1zXzcyMFA1MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDJFRSwKKwkJMTYzLAorCQkxODMKKwl9LAorCXsKKwkJVjRMMl9EVl8xMDgwUDYwLAorCQl0dnA3MDAyX3Bhcm1zXzEwODBQNjAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHg0NjUsCisJCTkwLAorCQkxMDIKKwl9LAorCXsKKwkJVjRMMl9EVl80ODBQNTlfOTQsCisJCXR2cDcwMDJfcGFybXNfNDgwUCwKKwkJVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDIwRCwKKwkJMHhmZmZmLAorCQkweGZmZmYKKwl9LAorCXsKKwkJVjRMMl9EVl81NzZQNTAsCisJCXR2cDcwMDJfcGFybXNfNTc2UCwKKwkJVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDI3MSwKKwkJMHhmZmZmLAorCQkweGZmZmYKKwl9Cit9OworCisjZGVmaW5lIE5VTV9QUkVTRVRTCUFSUkFZX1NJWkUodHZwNzAwMl9wcmVzZXRzKQorCisvKiBEZXZpY2UgZGVmaW5pdGlvbiAqLworc3RydWN0IHR2cDcwMDIgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9jb25maWcgKnBkYXRhOworCisJaW50IHZlcjsKKwlpbnQgc3RyZWFtaW5nOworCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CisJY29uc3Qgc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24gKmN1cnJlbnRfcHJlc2V0OworCXU4IGdhaW47Cit9OworCisvKgorICogdG9fdHZwNzAwMiAtIE9idGFpbiBkZXZpY2UgaGFuZGxlciBUVlA3MDAyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIGRldmljZSBoYW5kbGVyIHR2cDcwMDIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR2cDcwMDIgKnRvX3R2cDcwMDIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdHZwNzAwMiwgc2QpOworfQorCisvKgorICogdHZwNzAwMl9yZWFkIC0gUmVhZCBhIHZhbHVlIGZyb20gYSByZWdpc3RlciBpbiBhbiBUVlA3MDAyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWc6IFRWUDcwMDIgcmVnaXN0ZXIgYWRkcmVzcworICogQGRzdDogcG9pbnRlciB0byA4LWJpdCBkZXN0aW5hdGlvbgorICoKKyAqIFJldHVybnMgdmFsdWUgcmVhZCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyAoLTEpIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggYWRkciwgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXRyeTsKKwlpbnQgZXJyb3I7CisKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBJMkNfUkVUUllfQ09VTlQ7IHJldHJ5KyspIHsKKwkJZXJyb3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgYWRkcik7CisKKwkJaWYgKGVycm9yID49IDApIHsKKwkJCSpkc3QgPSAodTgpZXJyb3I7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwl9CisJdjRsMl9lcnIoc2QsICJUVlA3MDAyIHJlYWQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3JlYWRfZXJyKCkgLSBSZWFkIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aCBlcnJvciBjb2RlCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQHJlZzogZGVzdGluYXRpb24gcmVnaXN0ZXIKKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHJlYWQKKyAqIEBlcnJvcjogcG9pbnRlciB0byBlcnJvciB2YWx1ZQorICoKKyAqIFJlYWQgYSB2YWx1ZSBpbiBhIHJlZ2lzdGVyIGFuZCBzYXZlIGVycm9yIHZhbHVlIGluIHBvaW50ZXIuCisgKiBBbHNvIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgdGFibGUgaWYgc3VjY2Vzc2Z1bAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHZwNzAwMl9yZWFkX2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCisJCQkJCQkJdTggKmRzdCwgaW50ICplcnIpCit7CisJaWYgKCEqZXJyKQorCQkqZXJyID0gdHZwNzAwMl9yZWFkKHNkLCByZWcsIGRzdCk7Cit9CisKKy8qCisgKiB0dnA3MDAyX3dyaXRlKCkgLSBXcml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gVFZQNzAwMgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAYWRkcjogVFZQNzAwMiByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsdWU6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyCisgKgorICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIGFuIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggYWRkciwgdTggdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJaW50IHJldHJ5OworCWludCBlcnJvcjsKKworCWMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IEkyQ19SRVRSWV9DT1VOVDsgcmV0cnkrKykgeworCQllcnJvciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgYWRkciwgdmFsdWUpOworCisJCWlmIChlcnJvciA+PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJdjRsMl93YXJuKHNkLCAiV3JpdGU6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJfQorCXY0bDJfZXJyKHNkLCAiVFZQNzAwMiB3cml0ZSBlcnJvciAlZFxuIiwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfd3JpdGVfZXJyKCkgLSBXcml0ZSBhIHJlZ2lzdGVyIHZhbHVlIHdpdGggZXJyb3IgY29kZQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEByZWc6IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCisgKiBAZXJyb3I6IHBvaW50ZXIgdG8gZXJyb3IgdmFsdWUKKyAqCisgKiBXcml0ZSBhIHZhbHVlIGluIGEgcmVnaXN0ZXIgYW5kIHNhdmUgZXJyb3IgdmFsdWUgaW4gcG9pbnRlci4KKyAqIEFsc28gdXBkYXRlIHRoZSByZWdpc3RlciB0YWJsZSBpZiBzdWNjZXNzZnVsCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA3MDAyX3dyaXRlX2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCisJCQkJCQkJdTggdmFsLCBpbnQgKmVycikKK3sKKwlpZiAoISplcnIpCisJCSplcnIgPSB0dnA3MDAyX3dyaXRlKHNkLCByZWcsIHZhbCk7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfY2hpcF9pZGVudCgpIC0gR2V0IGNoaXAgaWRlbnRpZmljYXRpb24gbnVtYmVyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjaGlwOiBwdHIgdG8gdjRsMl9kYmdfY2hpcF9pZGVudCBzdHJ1Y3QKKyAqCisgKiBPYnRhaW5zIHRoZSBjaGlwJ3MgaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJdTggcmV2OworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwllcnJvciA9IHR2cDcwMDJfcmVhZChzZCwgVFZQNzAwMl9DSElQX1JFViwgJnJldik7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RWUDcwMDIsIHJldik7Cit9CisKKy8qCisgKiB0dnA3MDAyX3dyaXRlX2luaXR0YWIoKSAtIFdyaXRlIGluaXRpYWxpemF0aW9uIHZhbHVlcworICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnczogcHRyIHRvIGkyY19yZWdfdmFsdWUgc3RydWN0CisgKgorICogV3JpdGUgaW5pdGlhbGl6YXRpb24gdmFsdWVzLgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl93cml0ZV9pbml0dGFiKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCWNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlICpyZWdzKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCAoZGVmaW5lZCkgcmVnaXN0ZXJzICovCisJd2hpbGUgKFRWUDcwMDJfRU9SICE9IHJlZ3MtPnJlZykgeworCQlpZiAoVFZQNzAwMl9XUklURSA9PSByZWdzLT50eXBlKQorCQkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIHJlZ3MtPnJlZywgcmVncy0+dmFsdWUsICZlcnJvcik7CisJCXJlZ3MrKzsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3NfZHZfcHJlc2V0KCkgLSBTZXQgZGlnaXRhbCB2aWRlbyBwcmVzZXQKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHN0ZDogcHRyIHRvIHY0bDJfZHZfcHJlc2V0IHN0cnVjdAorICoKKyAqIFNldCB0aGUgZGlnaXRhbCB2aWRlbyBwcmVzZXQgZm9yIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciBhY2Nlc3MgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2R2X3ByZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKmR2X3ByZXNldCkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJdTMyIHByZXNldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUFJFU0VUUzsgaSsrKSB7CisJCXByZXNldCA9IHR2cDcwMDJfcHJlc2V0c1tpXS5wcmVzZXQ7CisJCWlmIChwcmVzZXQgPT0gZHZfcHJlc2V0LT5wcmVzZXQpIHsKKwkJCWRldmljZS0+Y3VycmVudF9wcmVzZXQgPSAmdHZwNzAwMl9wcmVzZXRzW2ldOworCQkJcmV0dXJuIHR2cDcwMDJfd3JpdGVfaW5pdHRhYihzZCwgdHZwNzAwMl9wcmVzZXRzW2ldLnBfc2V0dGluZ3MpOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfY3RybCgpIC0gR2V0IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3QKKyAqCisgKiBHZXQgYSBjb250cm9sIGZvciBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSBkZXZpY2UtPmdhaW47CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIHR2cDcwMDJfc19jdHJsKCkgLSBTZXQgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9jb250cm9sIHN0cnVjdAorICoKKyAqIFNldCBhIGNvbnRyb2wgaW4gVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciBhY2Nlc3MgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJaW50IGVycm9yID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXR2cDcwMDJfd3JpdGVfZXJyKHNkLCBUVlA3MDAyX1JfRklORV9HQUlOLAorCQkJCQkJY3RybC0+dmFsdWUgJiAweGZmLCAmZXJyb3IpOworCQl0dnA3MDAyX3dyaXRlX2VycihzZCwgVFZQNzAwMl9HX0ZJTkVfR0FJTiwKKwkJCQkJCWN0cmwtPnZhbHVlICYgMHhmZiwgJmVycm9yKTsKKwkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIFRWUDcwMDJfQl9GSU5FX0dBSU4sCisJCQkJCQljdHJsLT52YWx1ZSAmIDB4ZmYsICZlcnJvcik7CisKKwkJaWYgKGVycm9yIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKKworCQkvKiBTZXQgb25seSBhZnRlciBrbm93aW5nIHRoZXJlIGlzIG5vIGVycm9yICovCisJCWRldmljZS0+Z2FpbiA9IGN0cmwtPnZhbHVlICYgMHhmZjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogdHZwNzAwMl9xdWVyeWN0cmwoKSAtIFF1ZXJ5IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfcXVlcnljdHJsIHN0cnVjdAorICoKKyAqIFF1ZXJ5IGEgY29udHJvbCBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQkvKgorCQkgKiBHYWluIGlzIHN1cHBvcnRlZCBbMC0yNTUsIGRlZmF1bHQ9MCwgc3RlcD0xXQorCQkgKi8KKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIHR2cDcwMDJfdHJ5X2ZtdF9jYXAoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdHJ5X2ZtdAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1RSWV9GTVQgaW9jdGwgc3RydWN0dXJlCisgKgorICogSW1wbGVtZW50IHRoZSBWSURJT0NfVFJZX0ZNVCBpb2N0bCBmb3IgdGhlIENBUFRVUkUgYnVmZmVyIHR5cGUuIFRoaXMKKyAqIGlvY3RsIGlzIHVzZWQgdG8gbmVnb3RpYXRlIHRoZSBpbWFnZSBjYXB0dXJlIHNpemUgYW5kIHBpeGVsIGZvcm1hdAorICogd2l0aG91dCBhY3R1YWxseSBtYWtpbmcgaXQgdGFrZSBlZmZlY3QuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl90cnlfZm10X2NhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IGVfcHJlc2V0OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKKwlpbnQgZXJyb3IgPSAwOworCisJcGl4ID0gJmYtPmZtdC5waXg7CisKKwkvKiBDYWxjdWxhdGUgaGVpZ2h0IGFuZCB3aWR0aCBiYXNlZCBvbiBjdXJyZW50IHN0YW5kYXJkICovCisJZXJyb3IgPSB2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5wcmVzZXQsICZlX3ByZXNldCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpeC0+d2lkdGggPSBlX3ByZXNldC53aWR0aDsKKwlwaXgtPmhlaWdodCA9IGVfcHJlc2V0LmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJcGl4LT5maWVsZCA9IGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnNjYW5tb2RlOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqIDI7CisJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmJ5dGVzcGVybGluZSAqIHBpeC0+aGVpZ2h0OworCXBpeC0+Y29sb3JzcGFjZSA9IGRldmljZS0+Y3VycmVudF9wcmVzZXQtPmNvbG9yX3NwYWNlOworCXBpeC0+cHJpdiA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUcnkgRk1UOiBwaXhlbGZvcm1hdCAtICVzLCBieXRlc3BlcmxpbmUgLSAlZCIKKwkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsICI4LWJpdCBVWVZZIDQ6MjoyIEZvcm1hdCIsCisJCQlwaXgtPmJ5dGVzcGVybGluZSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfc19mbXQoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19TX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGUgcmVxdWVzdGVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQsIGNvbmZpZ3VyZXMgdGhlIEhXIHRvIHVzZSB0aGF0CisgKiBmb3JtYXQsIHJldHVybnMgZXJyb3IgY29kZSBpZiBmb3JtYXQgbm90IHN1cHBvcnRlZCBvciBIVyBjYW4ndCBiZQorICogY29ycmVjdGx5IGNvbmZpZ3VyZWQuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDcwMDIgKmRlY29kZXIgPSB0b190dnA3MDAyKHNkKTsKKwlpbnQgcnZhbDsKKworCXJ2YWwgPSB0dnA3MDAyX3RyeV9mbXRfY2FwKHNkLCBmKTsKKwlpZiAoIXJ2YWwpCisJCWRlY29kZXItPnBpeCA9IGYtPmZtdC5waXg7CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfZm10KCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHR2cDcwMDJfZ19mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHY0bDJfZm9ybWF0IHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGRlY29kZXIncyBjdXJyZW50IHBpeGVsIGZvcm1hdCBpbiB0aGUgdjRsMl9mb3JtYXQKKyAqIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGVjb2RlciA9IHRvX3R2cDcwMDIoc2QpOworCisJZi0+Zm10LnBpeCA9IGRlY29kZXItPnBpeDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgRk1UOiBieXRlc3BlcmxpbmUgLSAlZCIKKwkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsCisJCQlkZWNvZGVyLT5waXguYnl0ZXNwZXJsaW5lLAorCQkJZGVjb2Rlci0+cGl4LndpZHRoLCBkZWNvZGVyLT5waXguaGVpZ2h0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHR2cDcwMDJfcXVlcnlfZHZfcHJlc2V0KCkgLSBxdWVyeSBEViBwcmVzZXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAc3RkX2lkOiBzdGFuZGFyZCBWNEwyIHY0bDJfZHZfcHJlc2V0CisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBEViBwcmVzZXQgYnkgVFZQNzAwMi4gSWYgbm8gYWN0aXZlIGlucHV0IGlzCisgKiBkZXRlY3RlZCwgcmV0dXJucyAtRUlOVkFMCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcXByZXNldCkKK3sKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiAqcHJlc2V0cyA9IHR2cDcwMDJfcHJlc2V0czsKKwlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCBlX3ByZXNldDsKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlOworCXU4IHByb2dyZXNzaXZlOworCXUzMiBscGZyOworCXUzMiBjcGxuOworCWludCBlcnJvciA9IDA7CisJdTggbHBmX2xzYjsKKwl1OCBscGZfbXNiOworCXU4IGNwbF9sc2I7CisJdTggY3BsX21zYjsKKwlpbnQgaW5kZXg7CisKKwlkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKworCS8qIFJlYWQgc3RhbmRhcmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycyAqLworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfTF9GUkFNRV9TVEFUX0xTQlMsICZscGZfbHNiLCAmZXJyb3IpOworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfTF9GUkFNRV9TVEFUX01TQlMsICZscGZfbXNiLCAmZXJyb3IpOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJdHZwNzAwMl9yZWFkX2VycihzZCwgVFZQNzAwMl9DTEtfTF9TVEFUX0xTQlMsICZjcGxfbHNiLCAmZXJyb3IpOworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTLCAmY3BsX21zYiwgJmVycm9yKTsKKworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCS8qIEdldCBsaW5lcyBwZXIgZnJhbWUsIGNsb2NrcyBwZXIgbGluZSBhbmQgaW50ZXJsYWNlZC9wcm9ncmVzaXZlICovCisJbHBmciA9IGxwZl9sc2IgfCAoKFRWUDcwMDJfQ0xfTUFTSyAmIGxwZl9tc2IpIDw8IFRWUDcwMDJfQ0xfU0hJRlQpOworCWNwbG4gPSBjcGxfbHNiIHwgKChUVlA3MDAyX0NMX01BU0sgJiBjcGxfbXNiKSA8PCBUVlA3MDAyX0NMX1NISUZUKTsKKwlwcm9ncmVzc2l2ZSA9IChscGZfbXNiICYgVFZQNzAwMl9JTlBSX01BU0spID4+IFRWUDcwMDJfSVBfU0hJRlQ7CisKKwkvKiBEbyBjaGVja2luZyBvZiB2aWRlbyBtb2RlcyAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9QUkVTRVRTOyBpbmRleCsrLCBwcmVzZXRzKyspCisJCWlmIChscGZyICA9PSBwcmVzZXRzLT5saW5lc19wZXJfZnJhbWUgJiYKKwkJCXByb2dyZXNzaXZlID09IHByZXNldHMtPnByb2dyZXNzaXZlKSB7CisJCQlpZiAocHJlc2V0cy0+Y3BsX21pbiA9PSAweGZmZmYpCisJCQkJYnJlYWs7CisJCQlpZiAoY3BsbiA+PSBwcmVzZXRzLT5jcGxfbWluICYmIGNwbG4gPD0gcHJlc2V0cy0+Y3BsX21heCkKKwkJCQlicmVhazsKKwkJfQorCisJaWYgKGluZGV4ID09IE5VTV9QUkVTRVRTKSB7CisJCXY0bDJfZXJyKHNkLCAicXVlcnlzdGQgZXJyb3IsIGxwZiA9ICV4LCBjcGwgPSAleFxuIiwKKwkJCQkJCQkJbHBmciwgY3Bsbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhwcmVzZXRzLT5wcmVzZXQsICZlX3ByZXNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IHZhbHVlcyBpbiBmb3VuZCBwcmVzZXQgKi8KKwlxcHJlc2V0LT5wcmVzZXQgPSBwcmVzZXRzLT5wcmVzZXQ7CisKKwkvKiBVcGRhdGUgbGluZXMgcGVyIGZyYW1lIGFuZCBjbG9ja3MgcGVyIGxpbmUgaW5mbyAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgcHJlc2V0OiAlZCAlZCIsCisJCQkJCWVfcHJlc2V0LndpZHRoLCBlX3ByZXNldC5oZWlnaHQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworLyoKKyAqIHR2cDcwMDJfZ19yZWdpc3RlcigpIC0gR2V0IHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEB2cmVnOiBwdHIgdG8gdjRsMl9kYmdfcmVnaXN0ZXIgc3RydWN0CisgKgorICogR2V0IHRoZSB2YWx1ZSBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UgcmVnaXN0ZXIuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsLCAtRUlOVkFMIGlmIHJlZ2lzdGVyIHJlYWQgZmFpbHMgb3IKKyAqIGFjY2VzcyB0byBJMkMgY2xpZW50IGZhaWxzLCAtRVBFUk0gaWYgdGhlIGNhbGwgaXMgbm90IGFsbG93ZWQKKyAqIGJ5IGRpYWJsZWQgQ0FQX1NZU19BRE1JTi4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldCA9IHR2cDcwMDJfcmVhZChzZCwgcmVnLT5yZWcgJiAweGZmLCAmdmFsKTsKKwlyZWctPnZhbCA9IHZhbDsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdHZwNzAwMl9zX3JlZ2lzdGVyKCkgLSBzZXQgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9jb250cm9sIHN0cnVjdAorICoKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlIHJlZ2lzdGVyLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCwgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzIG9yCisgKiAtRVBFUk0gaWYgY2FsbCBub3QgYWxsb3dlZC4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiB0dnA3MDAyX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7Cit9CisjZW5kaWYKKworLyoKKyAqIHR2cDcwMDJfZW51bV9mbXQoKSAtIEVudW0gc3VwcG9ydGVkIGZvcm1hdHMKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZW5hYmxlOiBwb2ludGVyIHRvIGZvcm1hdCBzdHJ1Y3QKKyAqCisgKiBFbnVtZXJhdGUgc3VwcG9ydGVkIGZvcm1hdHMuCisgKi8KKworc3RhdGljIGludCB0dnA3MDAyX2VudW1fZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkZXNjKQoreworCS8qIENoZWNrIHJlcXVlc3RlZCBmb3JtYXQgaW5kZXggaXMgd2l0aGluIHJhbmdlICovCisJaWYgKGZtdGRlc2MtPmluZGV4IDwgMCB8fCBmbXRkZXNjLT5pbmRleCA+PSBOVU1fRk9STUFUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmZtdGRlc2MgPSB0dnA3MDAyX2ZtdF9saXN0W2ZtdGRlc2MtPmluZGV4XTsKKworCXJldHVybiAwOworfQorCisvKgorICogdHZwNzAwMl9zX3N0cmVhbSgpIC0gVjRMMiBkZWNvZGVyIGkvZiBoYW5kbGVyIGZvciBzX3N0cmVhbQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlbmFibGU6IHN0cmVhbWluZyBlbmFibGUgb3IgZGlzYWJsZQorICoKKyAqIFNldHMgc3RyZWFtaW5nIHRvIGVuYWJsZSBvciBkaXNhYmxlLCBpZiBwb3NzaWJsZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoZGV2aWNlLT5zdHJlYW1pbmcgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCWlmIChlbmFibGUpIHsKKwkJLyogU2V0IG91dHB1dCBzdGF0ZSBvbiAobG93IGltcGVkYW5jZSBtZWFucyBzdHJlYW0gb24pICovCisJCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9NSVNDX0NUTF8yLCAweDAwKTsKKwkJZGV2aWNlLT5zdHJlYW1pbmcgPSBlbmFibGU7CisJfSBlbHNlIHsKKwkJLyogU2V0IG91dHB1dCBzdGF0ZSBvZmYgKGhpZ2ggaW1wZWRhbmNlIG1lYW5zIHN0cmVhbSBvZmYpICovCisJCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9NSVNDX0NUTF8yLCAweDAzKTsKKwkJaWYgKGVycm9yKQorCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVW5hYmxlIHRvIHN0b3Agc3RyZWFtaW5nXG4iKTsKKworCQlkZXZpY2UtPnN0cmVhbWluZyA9IGVuYWJsZTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX2xvZ19zdGF0dXMoKSAtIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyIHNldHRpbmdzCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqCisgKiBMb2cgcmVnaXN0ZXIgdmFsdWVzIG9mIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9uIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCWNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uICpwcmVzZXRzID0gdHZwNzAwMl9wcmVzZXRzOworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCBlX3ByZXNldDsKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgZGV0ZWN0ZWQ7CisJaW50IGk7CisKKwlkZXRlY3RlZC5wcmVzZXQgPSBWNEwyX0RWX0lOVkFMSUQ7CisJLyogRmluZCBteSBjdXJyZW50IHN0YW5kYXJkKi8KKwl0dnA3MDAyX3F1ZXJ5X2R2X3ByZXNldChzZCwgJmRldGVjdGVkKTsKKworCS8qIFByaW50IHN0YW5kYXJkIHJlbGF0ZWQgY29kZSB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRVNFVFM7IGkrKywgcHJlc2V0cysrKQorCQlpZiAocHJlc2V0cy0+cHJlc2V0ID09IGRldGVjdGVkLnByZXNldCkKKwkJCWJyZWFrOworCisJaWYgKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnByZXNldCwgJmVfcHJlc2V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2NGwyX2luZm8oc2QsICJTZWxlY3RlZCBEViBQcmVzZXQ6ICVzXG4iLCBlX3ByZXNldC5uYW1lKTsKKwl2NGwyX2luZm8oc2QsICIgICBQaXhlbHMgcGVyIGxpbmU6ICV1XG4iLCBlX3ByZXNldC53aWR0aCk7CisJdjRsMl9pbmZvKHNkLCAiICAgTGluZXMgcGVyIGZyYW1lOiAldVxuXG4iLCBlX3ByZXNldC5oZWlnaHQpOworCWlmIChpID09IE5VTV9QUkVTRVRTKSB7CisJCXY0bDJfaW5mbyhzZCwgIkRldGVjdGVkIERWIFByZXNldDogTm9uZVxuIik7CisJfSBlbHNlIHsKKwkJaWYgKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKHByZXNldHMtPnByZXNldCwgJmVfcHJlc2V0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl2NGwyX2luZm8oc2QsICJEZXRlY3RlZCBEViBQcmVzZXQ6ICVzXG4iLCBlX3ByZXNldC5uYW1lKTsKKwkJdjRsMl9pbmZvKHNkLCAiICBQaXhlbHMgcGVyIGxpbmU6ICV1XG4iLCBlX3ByZXNldC53aWR0aCk7CisJCXY0bDJfaW5mbyhzZCwgIiAgTGluZXMgcGVyIGZyYW1lOiAldVxuXG4iLCBlX3ByZXNldC5oZWlnaHQpOworCX0KKwl2NGwyX2luZm8oc2QsICJTdHJlYW1pbmcgZW5hYmxlZDogJXNcbiIsCisJCQkJCWRldmljZS0+c3RyZWFtaW5nID8gInllcyIgOiAibm8iKTsKKworCS8qIFByaW50IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnYWluIGNvbnRyb2wgKi8KKwl2NGwyX2luZm8oc2QsICJHYWluOiAldVxuIiwgZGV2aWNlLT5nYWluKTsKKworCXJldHVybiAwOworfQorCisvKiBWNEwyIGNvcmUgb3BlcmF0aW9uIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR2cDcwMDJfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHR2cDcwMDJfZ19jaGlwX2lkZW50LAorCS5sb2dfc3RhdHVzID0gdHZwNzAwMl9sb2dfc3RhdHVzLAorCS5nX2N0cmwgPSB0dnA3MDAyX2dfY3RybCwKKwkuc19jdHJsID0gdHZwNzAwMl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHR2cDcwMDJfcXVlcnljdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IHR2cDcwMDJfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IHR2cDcwMDJfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworLyogU3BlY2lmaWMgdmlkZW8gc3Vic3lzdGVtIG9wZXJhdGlvbiBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgdHZwNzAwMl92aWRlb19vcHMgPSB7CisJLnNfZHZfcHJlc2V0ID0gdHZwNzAwMl9zX2R2X3ByZXNldCwKKwkucXVlcnlfZHZfcHJlc2V0ID0gdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQsCisJLnNfc3RyZWFtID0gdHZwNzAwMl9zX3N0cmVhbSwKKwkuZ19mbXQgPSB0dnA3MDAyX2dfZm10LAorCS5zX2ZtdCA9IHR2cDcwMDJfc19mbXQsCisJLmVudW1fZm10ID0gdHZwNzAwMl9lbnVtX2ZtdCwKK307CisKKy8qIFY0TDIgdG9wIGxldmVsIG9wZXJhdGlvbiBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdHZwNzAwMl9vcHMgPSB7CisJLmNvcmUgPSAmdHZwNzAwMl9jb3JlX29wcywKKwkudmlkZW8gPSAmdHZwNzAwMl92aWRlb19vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHR2cDcwMDIgdHZwNzAwMl9kZXYgPSB7CisJLnN0cmVhbWluZyA9IDAsCisKKwkucGl4ID0geworCQkud2lkdGggPSAxMjgwLAorCQkuaGVpZ2h0ID0gNzIwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCAqIDIsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogMiAqIDcyMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQl9LAorCisJLmN1cnJlbnRfcHJlc2V0ID0gdHZwNzAwMl9wcmVzZXRzLAorCS5nYWluID0gMCwKK307CisKKy8qCisgKiB0dnA3MDAyX3Byb2JlIC0gUHJvYmUgYSBUVlA3MDAyIGRldmljZQorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIGkyY19kZXZpY2VfaWQgc3RydWN0CisgKgorICogSW5pdGlhbGl6ZSB0aGUgVFZQNzAwMiBkZXZpY2UKKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwsIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscyBvcgorICogLUVJTyBpZiBpMmMgYWNjZXNzIGlzIG5vdCBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZTsKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgcHJlc2V0OworCWludCBwb2xhcml0eV9hOworCWludCBwb2xhcml0eV9iOworCXU4IHJldmlzaW9uOworCisJaW50IGVycm9yOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYy0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIWMtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXY0bF9lcnIoYywgIk5vIHBsYXRmb3JtIGRhdGEhIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dnA3MDAyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqZGV2aWNlID0gdHZwNzAwMl9kZXY7CisJc2QgPSAmZGV2aWNlLT5zZDsKKwlkZXZpY2UtPnBkYXRhID0gYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkvKiBUZWxsIHY0bDIgdGhlIGRldmljZSBpcyByZWFkeSAqLworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjLCAmdHZwNzAwMl9vcHMpOworCXY0bF9pbmZvKGMsICJ0dnA3MDAyIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQkJCWMtPmFkZHIsIGMtPmFkYXB0ZXItPm5hbWUpOworCisJZXJyb3IgPSB0dnA3MDAyX3JlYWQoc2QsIFRWUDcwMDJfQ0hJUF9SRVYsICZyZXZpc2lvbik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCS8qIEdldCByZXZpc2lvbiBudW1iZXIgKi8KKwl2NGwyX2luZm8oc2QsICJSZXYuICUwMnggZGV0ZWN0ZWQuXG4iLCByZXZpc2lvbik7CisJaWYgKHJldmlzaW9uICE9IDB4MDIpCisJCXY0bDJfaW5mbyhzZCwgIlVua25vd24gcmV2aXNpb24gZGV0ZWN0ZWQuXG4iKTsKKworCS8qIEluaXRpYWxpemVzIFRWUDcwMDIgdG8gaXRzIGRlZmF1bHQgdmFsdWVzICovCisJZXJyb3IgPSB0dnA3MDAyX3dyaXRlX2luaXR0YWIoc2QsIHR2cDcwMDJfaW5pdF9kZWZhdWx0KTsKKworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZm91bmRfZXJyb3I7CisKKwkvKiBTZXQgcG9sYXJpdHkgaW5mb3JtYXRpb24gYWZ0ZXIgcmVnaXN0ZXJzIGhhdmUgYmVlbiBzZXQgKi8KKwlwb2xhcml0eV9hID0gMHgyMCB8IGRldmljZS0+cGRhdGEtPmhzX3BvbGFyaXR5IDw8IDUKKwkJCXwgZGV2aWNlLT5wZGF0YS0+dnNfcG9sYXJpdHkgPDwgMjsKKwllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfU1lOQ19DVExfMSwgcG9sYXJpdHlfYSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCXBvbGFyaXR5X2IgPSAweDAxICB8IGRldmljZS0+cGRhdGEtPmZpZF9wb2xhcml0eSA8PCAyCisJCQl8IGRldmljZS0+cGRhdGEtPnNvZ19wb2xhcml0eSA8PCAxCisJCQl8IGRldmljZS0+cGRhdGEtPmNsa19wb2xhcml0eTsKKwllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfTUlTQ19DVExfMywgcG9sYXJpdHlfYik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCS8qIFNldCByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIGRlZmF1bHQgdmlkZW8gbW9kZSAqLworCXByZXNldC5wcmVzZXQgPSBkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5wcmVzZXQ7CisJZXJyb3IgPSB0dnA3MDAyX3NfZHZfcHJlc2V0KHNkLCAmcHJlc2V0KTsKKworZm91bmRfZXJyb3I6CisJaWYgKGVycm9yIDwgMCkKKwkJa2ZyZWUoZGV2aWNlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfcmVtb3ZlIC0gUmVtb3ZlIFRWUDcwMDIgZGV2aWNlIHN1cHBvcnQKKyAqIEBjOiBwdHIgdG8gaTJjX2NsaWVudCBzdHJ1Y3QKKyAqCisgKiBSZXNldCB0aGUgVFZQNzAwMiBkZXZpY2UKKyAqIFJldHVybnMgemVyby4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlJlbW92aW5nIHR2cDcwMDIgYWRhcHRlciIKKwkJCQkib24gYWRkcmVzcyAweCV4XG4iLCBjLT5hZGRyKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZShkZXZpY2UpOworCXJldHVybiAwOworfQorCisvKiBJMkMgRGV2aWNlIElEIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZwNzAwMl9pZFtdID0geworCXsgInR2cDcwMDIiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2cDcwMDJfaWQpOworCisvKiBJMkMgZHJpdmVyIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0dnA3MDAyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUVlA3MDAyX01PRFVMRV9OQU1FLAorCX0sCisJLnByb2JlID0gdHZwNzAwMl9wcm9iZSwKKwkucmVtb3ZlID0gdHZwNzAwMl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdHZwNzAwMl9pZCwKK307CisKKy8qCisgKiB0dnA3MDAyX2luaXQgLSBJbml0aWFsaXplIGRyaXZlciB2aWEgSTJDIGludGVyZmFjZQorICoKKyAqIFJlZ2lzdGVyIHRoZSBUVlA3MDAyIGRyaXZlci4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0dnA3MDAyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnR2cDcwMDJfZHJpdmVyKTsKK30KKworLyoKKyAqIHR2cDcwMDJfZXhpdCAtIFJlbW92ZSBkcml2ZXIgdmlhIEkyQyBpbnRlcmZhY2UKKyAqCisgKiBVbnJlZ2lzdGVyIHRoZSBUVlA3MDAyIGRyaXZlci4KKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHR2cDcwMDJfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0dnA3MDAyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR2cDcwMDJfaW5pdCk7Cittb2R1bGVfZXhpdCh0dnA3MDAyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyX3JlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzRjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDJfcmVnLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qIFRleGFzIEluc3RydW1lbnRzIFRyaXBsZSA4LS8xMC1CSVQgMTY1LS8xMTAtTVNQUyBWaWRlbyBhbmQgR3JhcGhpY3MKKyAqIERpZ2l0aXplciB3aXRoIEhvcml6b250YWwgUExMIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogU2FudGlhZ28gTnVuZXotQ29ycmFsZXMgPHNhbnRpYWdvLm51bmV6QHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgcGFydGlhbGx5IGJhc2VkIHVwb24gdGhlIFRWUDUxNTAgZHJpdmVyCisgKiB3cml0dGVuIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKSwKKyAqIHRoZSBUVlA1MTR4IGRyaXZlciB3cml0dGVuIGJ5IFZhaWJoYXYgSGlyZW1hdGggPGh2YWliaGF2QHRpLmNvbT4KKyAqIGFuZCB0aGUgVFZQNzAwMiBkcml2ZXIgaW4gdGhlIFRJIExTUCAyLjEwLjAwLjE0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogTmFtaW5nIGNvbnZlbnRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBGREJLOiAgRmVlZGJhY2sKKyAqIERJVjogICBEaXZpZGVyCisgKiBDVEw6ICAgQ29udHJvbAorICogU0VMOiAgIFNlbGVjdAorICogSU46ICAgIElucHV0CisgKiBPVVQ6ICAgT3V0cHV0CisgKiBSOiAgICAgUmVkCisgKiBHOiAgICAgR3JlZW4KKyAqIEI6ICAgICBCbHVlCisgKiBPRkY6ICAgT2Zmc2V0CisgKiBUSFJTOiAgVGhyZXNob2xkCisgKiBER1RMOiAgRGlnaXRhbAorICogTFZMOiAgIExldmVsCisgKiBQV1I6ICAgUG93ZXIKKyAqIE1WSVM6ICBNYWNyb3Zpc2lvbgorICogVzogICAgIFdpZHRoCisgKiBIOiAgICAgSGVpZ2h0CisgKiBBTEdOOiAgQWxpZ25tZW50CisgKiBDTEs6ICAgQ2xvY2tzCisgKiBUT0w6ICAgVG9sZXJhbmNlCisgKiBCV1RIOiAgQmFuZHdpZHRoCisgKiBDT0VGOiAgQ29lZmZpY2llbnQKKyAqIFNUQVQ6ICBTdGF0dXMKKyAqIEFVVE86ICBBdXRvbWF0aWMKKyAqIEZMRDogICBGaWVsZAorICogTDoJICBMaW5lCisgKi8KKworI2RlZmluZSBUVlA3MDAyX0NISVBfUkVWCQkweDAwCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTCTB4MDEKKyNkZWZpbmUgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMJMHgwMgorI2RlZmluZSBUVlA3MDAyX0hQTExfQ1JUTAkJMHgwMworI2RlZmluZSBUVlA3MDAyX0hQTExfUEhBU0VfU0VMCQkweDA0CisjZGVmaW5lIFRWUDcwMDJfQ0xBTVBfU1RBUlQJCTB4MDUKKyNkZWZpbmUgVFZQNzAwMl9DTEFNUF9XCQkJMHgwNgorI2RlZmluZSBUVlA3MDAyX0hTWU5DX09VVF9XCQkweDA3CisjZGVmaW5lIFRWUDcwMDJfQl9GSU5FX0dBSU4JCTB4MDgKKyNkZWZpbmUgVFZQNzAwMl9HX0ZJTkVfR0FJTgkJMHgwOQorI2RlZmluZSBUVlA3MDAyX1JfRklORV9HQUlOCQkweDBhCisjZGVmaW5lIFRWUDcwMDJfQl9GSU5FX09GRl9NU0JTCQkweDBiCisjZGVmaW5lIFRWUDcwMDJfR19GSU5FX09GRl9NU0JTICAgICAgICAgMHgwYworI2RlZmluZSBUVlA3MDAyX1JfRklORV9PRkZfTVNCUyAgICAgICAgIDB4MGQKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX0NUTF8xCQkweDBlCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9BTkRfQ0xBTVBfQ1RMCTB4MGYKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX09OX0dfVEhSUwkJMHgxMAorI2RlZmluZSBUVlA3MDAyX1NZTkNfU0VQQVJBVE9SX1RIUlMJMHgxMQorI2RlZmluZSBUVlA3MDAyX0hQTExfUFJFX0NPQVNUCQkweDEyCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNUCQkweDEzCisjZGVmaW5lIFRWUDcwMDJfU1lOQ19ERVRFQ1RfU1RBVAkweDE0CisjZGVmaW5lIFRWUDcwMDJfT1VUX0ZPUk1BVFRFUgkJMHgxNQorI2RlZmluZSBUVlA3MDAyX01JU0NfQ1RMXzEJCTB4MTYKKyNkZWZpbmUgVFZQNzAwMl9NSVNDX0NUTF8yICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfMyAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBUVlA3MDAyX0lOX01VWF9TRUxfMQkJMHgxOQorI2RlZmluZSBUVlA3MDAyX0lOX01VWF9TRUxfMiAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgVFZQNzAwMl9CX0FORF9HX0NPQVJTRV9HQUlOCTB4MWIKKyNkZWZpbmUgVFZQNzAwMl9SX0NPQVJTRV9HQUlOCQkweDFjCisjZGVmaW5lIFRWUDcwMDJfRklORV9PRkZfTFNCUwkJMHgxZAorI2RlZmluZSBUVlA3MDAyX0JfQ09BUlNFX09GRgkJMHgxZQorI2RlZmluZSBUVlA3MDAyX0dfQ09BUlNFX09GRiAgICAgICAgICAgIDB4MWYKKyNkZWZpbmUgVFZQNzAwMl9SX0NPQVJTRV9PRkYgICAgICAgICAgICAweDIwCisjZGVmaW5lIFRWUDcwMDJfSFNPVVRfT1VUX1NUQVJUCQkweDIxCisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfNAkJMHgyMgorI2RlZmluZSBUVlA3MDAyX0JfREdUTF9BTENfT1VUX0xTQlMJMHgyMworI2RlZmluZSBUVlA3MDAyX0dfREdUTF9BTENfT1VUX0xTQlMgICAgIDB4MjQKKyNkZWZpbmUgVFZQNzAwMl9SX0RHVExfQUxDX09VVF9MU0JTICAgICAweDI1CisjZGVmaW5lIFRWUDcwMDJfQVVUT19MVkxfQ1RMX0VOQUJMRQkweDI2CisjZGVmaW5lIFRWUDcwMDJfREdUTF9BTENfT1VUX01TQlMJMHgyNworI2RlZmluZSBUVlA3MDAyX0FVVE9fTFZMX0NUTF9GSUxURVIJMHgyOAorLyogUmVzZXJ2ZWQgMHgyOSovCisjZGVmaW5lIFRWUDcwMDJfRklORV9DTEFNUF9DVEwJCTB4MmEKKyNkZWZpbmUgVFZQNzAwMl9QV1JfQ1RMCQkJMHgyYgorI2RlZmluZSBUVlA3MDAyX0FEQ19TRVRVUAkJMHgyYworI2RlZmluZSBUVlA3MDAyX0NPQVJTRV9DTEFNUF9DVEwJMHgyZAorI2RlZmluZSBUVlA3MDAyX1NPR19DTEFNUAkJMHgyZQorI2RlZmluZSBUVlA3MDAyX1JHQl9DT0FSU0VfQ0xBTVBfQ1RMCTB4MmYKKyNkZWZpbmUgVFZQNzAwMl9TT0dfQ09BUlNFX0NMQU1QX0NUTAkweDMwCisjZGVmaW5lIFRWUDcwMDJfQUxDX1BMQUNFTUVOVAkJMHgzMQorLyogUmVzZXJ2ZWQgMHgzMiAqLworLyogUmVzZXJ2ZWQgMHgzMyAqLworI2RlZmluZSBUVlA3MDAyX01WSVNfU1RSSVBQRVJfVwkJMHgzNAorI2RlZmluZSBUVlA3MDAyX1ZTWU5DX0FMR04JCTB4MzUKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX0JZUEFTUwkJMHgzNgorI2RlZmluZSBUVlA3MDAyX0xfRlJBTUVfU1RBVF9MU0JTCTB4MzcKKyNkZWZpbmUgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTVNCUwkweDM4CisjZGVmaW5lIFRWUDcwMDJfQ0xLX0xfU1RBVF9MU0JTCQkweDM5CisjZGVmaW5lIFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTICAgICAgCTB4M2EKKyNkZWZpbmUgVFZQNzAwMl9IU1lOQ19XCQkJMHgzYgorI2RlZmluZSBUVlA3MDAyX1ZTWU5DX1cgICAgICAgICAgICAgICAgIDB4M2MKKyNkZWZpbmUgVFZQNzAwMl9MX0xFTkdUSF9UT0wgCQkweDNkCisvKiBSZXNlcnZlZCAweDNlICovCisjZGVmaW5lIFRWUDcwMDJfVklERU9fQldUSF9DVEwJCTB4M2YKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMJMHg0MAorI2RlZmluZSBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUyAgIDB4NDEKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUyAgCTB4NDIKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUyAgICAweDQzCisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYJMHg0NAorI2RlZmluZSBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGICAgIDB4NDUKKyNkZWZpbmUgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTgkweDQ2CisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04gICAgICAgMHg0NworI2RlZmluZSBUVlA3MDAyX0ZCSVRfRl8wX1NUQVJUX0xfT0ZGCTB4NDgKKyNkZWZpbmUgVFZQNzAwMl9GQklUX0ZfMV9TVEFSVF9MX09GRiAgICAweDQ5CisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfR19DT0VGX0xTQlMJMHg0YQorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX0dfQ09FRl9NU0JTICAgICAgIDB4NGIKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTFNCUyAgICAgICAweDRjCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfQl9DT0VGX01TQlMgICAgICAgMHg0ZAorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX1JfQ09FRl9MU0JTICAgICAgIDB4NGUKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTVNCUyAgICAgICAweDRmCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfR19DT0VGX0xTQlMgICAgICAgMHg1MAorI2RlZmluZSBUVlA3MDAyX1lVVl9VX0dfQ09FRl9NU0JTICAgICAgIDB4NTEKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTFNCUyAgICAgICAweDUyCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfQl9DT0VGX01TQlMgICAgICAgMHg1MworI2RlZmluZSBUVlA3MDAyX1lVVl9VX1JfQ09FRl9MU0JTICAgICAgIDB4NTQKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTVNCUyAgICAgICAweDU1CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfR19DT0VGX0xTQlMgICAgICAgMHg1NgorI2RlZmluZSBUVlA3MDAyX1lVVl9WX0dfQ09FRl9NU0JTICAgICAgIDB4NTcKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTFNCUyAgICAgICAweDU4CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfQl9DT0VGX01TQlMgICAgICAgMHg1OQorI2RlZmluZSBUVlA3MDAyX1lVVl9WX1JfQ09FRl9MU0JTICAgICAgIDB4NWEKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTVNCUyAgICAgICAweDViCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCmluZGV4IDViODAxYTYuLjc2YmU3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwpAQCAtMjMzLDEwICsyMzMsMTAgQEAKIH07CiAKIHN0cnVjdCB0dzk5MTBfcHJpdiB7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgICAgIHN1YmRldjsKLQlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87Ci0JY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOworCXN0cnVjdCB2NGwyX3N1YmRldgkJc3ViZGV2OworCXN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbwkqaW5mbzsKKwljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwJKnNjYWxlOworCXUzMgkJCQlyZXZpc2lvbjsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgdHc5OTEwX250c2Nfc2NhbGVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDEwNTQ1NDYuLjdjMTdlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC0xNDg3LDcgKzE0ODcsNyBAQAogCQl1c2J2aXNpb24tPnZiaSA9IHVzYnZpc2lvbl92ZGV2X2luaXQodXNidmlzaW9uLAogCQkJCQkJICAgICAmdXNidmlzaW9uX3ZiaV90ZW1wbGF0ZSwKIAkJCQkJCSAgICAgIlVTQlZpc2lvbiBWQkkiKTsKLQkJaWYgKHVzYnZpc2lvbi0+dmRldiA9PSBOVUxMKSB7CisJCWlmICh1c2J2aXNpb24tPnZiaSA9PSBOVUxMKSB7CiAJCQlnb3RvIGVycl9leGl0OwogCQl9CiAJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT52YmksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBlYzhlZjhjLi4zYjJlNzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTIzLDkgKzIzLDEzIEBACiAKICNpbmNsdWRlICJ1dmN2aWRlby5oIgogCi0jZGVmaW5lIFVWQ19DVFJMX05EQVRBCQkyCiAjZGVmaW5lIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVAkwCiAjZGVmaW5lIFVWQ19DVFJMX0RBVEFfQkFDS1VQCTEKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9NSU4JMgorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX01BWAkzCisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfUkVTCTQKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9ERUYJNQorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX0xBU1QJNgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbnRyb2xzCkBAIC03NTUsNiArNzU5LDQ5IEBACiAJcmV0dXJuIGN0cmw7CiB9CiAKK3N0YXRpYyBpbnQgdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCisJc3RydWN0IHV2Y19jb250cm9sICpjdHJsKQoreworCWludCByZXQ7CisKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfREVGKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfREVGLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfREVGKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01JTiksCisJCQkJICAgICBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUFYKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfTUFYLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUFYKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpIHsKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9SRVMsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpLAorCQkJCSAgICAgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljdHJsLT5jYWNoZWQgPSAxOworCXJldHVybiAwOworfQorCiBpbnQgdXZjX3F1ZXJ5X3Y0bDJfY3RybChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnY0bDJfY3RybCkKIHsKQEAgLTc2MiwxNyArODA5LDEyIEBACiAJc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmc7CiAJc3RydWN0IHV2Y19tZW51X2luZm8gKm1lbnU7CiAJdW5zaWduZWQgaW50IGk7Ci0JX191OCAqZGF0YTsKIAlpbnQgcmV0OwogCiAJY3RybCA9IHV2Y19maW5kX2NvbnRyb2woY2hhaW4sIHY0bDJfY3RybC0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRhdGEgPSBrbWFsbG9jKGN0cmwtPmluZm8tPnNpemUsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJbWVtc2V0KHY0bDJfY3RybCwgMCwgc2l6ZW9mICp2NGwyX2N0cmwpOwogCXY0bDJfY3RybC0+aWQgPSBtYXBwaW5nLT5pZDsKIAl2NGwyX2N0cmwtPnR5cGUgPSBtYXBwaW5nLT52NGwyX3R5cGU7CkBAIC03ODIsMTQgKzgyNCwxNSBAQAogCWlmICghKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfU0VUX0NVUikpCiAJCXY0bDJfY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOwogCi0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0RFRikgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX0RFRiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7CisJaWYgKCFjdHJsLT5jYWNoZWQpIHsKKwkJcmV0ID0gdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoY2hhaW4sIGN0cmwpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPmRlZmF1bHRfdmFsdWUgPQotCQkJbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfREVGLCBkYXRhKTsKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0RFRikgeworCQl2NGwyX2N0cmwtPmRlZmF1bHRfdmFsdWUgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9ERUYsCisJCQkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0RFRikpOwogCX0KIAogCXN3aXRjaCAobWFwcGluZy0+djRsMl90eXBlKSB7CkBAIC04MDYsNTYgKzg0OSwzNyBAQAogCQkJfQogCQl9CiAKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgogCQl2NGwyX2N0cmwtPm1pbmltdW0gPSAwOwogCQl2NGwyX2N0cmwtPm1heGltdW0gPSAxOwogCQl2NGwyX2N0cmwtPnN0ZXAgPSAxOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjoKIAkJdjRsMl9jdHJsLT5taW5pbXVtID0gMDsKIAkJdjRsMl9jdHJsLT5tYXhpbXVtID0gMDsKIAkJdjRsMl9jdHJsLT5zdGVwID0gMDsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+bWluaW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01JTiwgZGF0YSk7Ci0JfQotCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NQVgpIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPm1heGltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NQVgsIGRhdGEpOwotCX0KLQlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfUkVTKSB7Ci0JCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5zdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfUkVTLCBkYXRhKTsKLQl9CisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikKKwkJdjRsMl9jdHJsLT5taW5pbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUlOLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01JTikpOwogCi0JcmV0ID0gMDsKLW91dDoKLQlrZnJlZShkYXRhKTsKLQlyZXR1cm4gcmV0OworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NQVgpCisJCXY0bDJfY3RybC0+bWF4aW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NQVgpKTsKKworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpCisJCXY0bDJfY3RybC0+c3RlcCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX1JFUywKKwkJCQkgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpKTsKKworCXJldHVybiAwOwogfQogCiAKQEAgLTk5NywxOSArMTAyMSw1NyBAQAogewogCXN0cnVjdCB1dmNfY29udHJvbCAqY3RybDsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZzsKLQlzMzIgdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJczMyIHZhbHVlOworCXUzMiBzdGVwOworCXMzMiBtaW47CisJczMyIG1heDsKIAlpbnQgcmV0OwogCiAJY3RybCA9IHV2Y19maW5kX2NvbnRyb2woY2hhaW4sIHhjdHJsLT5pZCwgJm1hcHBpbmcpOwogCWlmIChjdHJsID09IE5VTEwgfHwgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfU0VUX0NVUikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWFwcGluZy0+djRsMl90eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpIHsKLQkJaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSBtYXBwaW5nLT5tZW51X2NvdW50KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXZhbHVlID0gbWFwcGluZy0+bWVudV9pbmZvW3ZhbHVlXS52YWx1ZTsKKwkvKiBDbGFtcCBvdXQgb2YgcmFuZ2UgdmFsdWVzLiAqLworCXN3aXRjaCAobWFwcGluZy0+djRsMl90eXBlKSB7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgorCQlpZiAoIWN0cmwtPmNhY2hlZCkgeworCQkJcmV0ID0gdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoY2hhaW4sIGN0cmwpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCW1pbiA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01JTiwKKwkJCQkgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUlOKSk7CisJCW1heCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwKKwkJCQkgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUFYKSk7CisJCXN0ZXAgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9SRVMsCisJCQkJICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpKTsKKworCQl4Y3RybC0+dmFsdWUgPSBtaW4gKyAoeGN0cmwtPnZhbHVlIC0gbWluICsgc3RlcC8yKSAvIHN0ZXAgKiBzdGVwOworCQl4Y3RybC0+dmFsdWUgPSBjbGFtcCh4Y3RybC0+dmFsdWUsIG1pbiwgbWF4KTsKKwkJdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgorCQl4Y3RybC0+dmFsdWUgPSBjbGFtcCh4Y3RybC0+dmFsdWUsIDAsIDEpOworCQl2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJCWlmICh4Y3RybC0+dmFsdWUgPCAwIHx8IHhjdHJsLT52YWx1ZSA+PSBtYXBwaW5nLT5tZW51X2NvdW50KQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCXZhbHVlID0gbWFwcGluZy0+bWVudV9pbmZvW3hjdHJsLT52YWx1ZV0udmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJCWJyZWFrOwogCX0KIAorCS8qIElmIHRoZSBtYXBwaW5nIGRvZXNuJ3Qgc3BhbiB0aGUgd2hvbGUgVVZDIGNvbnRyb2wsIHRoZSBjdXJyZW50IHZhbHVlCisJICogbmVlZHMgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIHRoZSByZWFkLW1vZGlmeS13cml0ZQorCSAqIG9wZXJhdGlvbi4KKwkgKi8KIAlpZiAoIWN0cmwtPmxvYWRlZCAmJiAoY3RybC0+aW5mby0+c2l6ZSAqIDgpICE9IG1hcHBpbmctPnNpemUpIHsKIAkJaWYgKChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpID09IDApIHsKIAkJCW1lbXNldCh1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksCkBAIC0xMDI3LDYgKzEwODksNyBAQAogCQljdHJsLT5sb2FkZWQgPSAxOwogCX0KIAorCS8qIEJhY2t1cCB0aGUgY3VycmVudCB2YWx1ZSBpbiBjYXNlIHdlIG5lZWQgdG8gcm9sbGJhY2sgbGF0ZXIuICovCiAJaWYgKCFjdHJsLT5kaXJ0eSkgewogCQltZW1jcHkodXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0JBQ0tVUCksCiAJCSAgICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksCkBAIC0xMDgwLDEwICsxMTQzLDggQEAKIAl9CiAKIAlpZiAoIWZvdW5kKSB7Ci0JCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKLQkJCSJDb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgbm90IGZvdW5kLlxuIiwKLQkJCVVWQ19HVUlEX0FSR1MoZW50aXR5LT5leHRlbnNpb24uZ3VpZEV4dGVuc2lvbkNvZGUpLAotCQkJeGN0cmwtPnNlbGVjdG9yKTsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAlcFVsLyV1IG5vdCBmb3VuZC5cbiIsCisJCQllbnRpdHktPmV4dGVuc2lvbi5ndWlkRXh0ZW5zaW9uQ29kZSwgeGN0cmwtPnNlbGVjdG9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTU5LDkgKzEyMjAsOSBAQAogCQkJICAgIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1JFU1RPUkUpID09IDApCiAJCQkJY29udGludWU7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gInJlc3RvcmluZyBjb250cm9sICIgVVZDX0dVSURfRk9STUFUCi0JCQkJIi8ldS8ldVxuIiwgVVZDX0dVSURfQVJHUyhjdHJsLT5pbmZvLT5lbnRpdHkpLAotCQkJCWN0cmwtPmluZm8tPmluZGV4LCBjdHJsLT5pbmZvLT5zZWxlY3Rvcik7CisJCQlwcmludGsoS0VSTl9JTkZPICJyZXN0b3JpbmcgY29udHJvbCAlcFVsLyV1LyV1XG4iLAorCQkJCWN0cmwtPmluZm8tPmVudGl0eSwgY3RybC0+aW5mby0+aW5kZXgsCisJCQkJY3RybC0+aW5mby0+c2VsZWN0b3IpOwogCQkJY3RybC0+ZGlydHkgPSAxOwogCQl9CiAKQEAgLTEyMTUsNDcgKzEyNzYsNDMgQEAKIAkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfR0VUX0xFTiwgY3RybC0+ZW50aXR5LT5pZCwKIAkJCWRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsIChfX3U4ICopJnNpemUsIDIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiR0VUX0xFTiBmYWlsZWQgb24gIgotCQkJCSJjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgKCVkKS5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3RvciwKLQkJCQlyZXQpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJHRVRfTEVOIGZhaWxlZCBvbiBjb250cm9sICVwVWwvJXUgKCVkKS5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3RvciwgcmV0KTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWlmIChpbmZvLT5zaXplICE9IGxlMTZfdG9fY3B1KHNpemUpKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIgVVZDX0dVSURfRk9STUFUCi0JCQkJIi8ldSBzaXplIGRvZXNuJ3QgbWF0Y2ggdXNlciBzdXBwbGllZCAiCi0JCQkJInZhbHVlLlxuIiwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgJXBVbC8ldSBzaXplICIKKwkJCQkiZG9lc24ndCBtYXRjaCB1c2VyIHN1cHBsaWVkIHZhbHVlLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGRldiwgVVZDX0dFVF9JTkZPLCBjdHJsLT5lbnRpdHktPmlkLAogCQkJZGV2LT5pbnRmbnVtLCBpbmZvLT5zZWxlY3RvciwgJmluZiwgMSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJHRVRfSU5GTyBmYWlsZWQgb24gIgotCQkJCSJjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgKCVkKS5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3RvciwKLQkJCQlyZXQpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJHRVRfSU5GTyBmYWlsZWQgb24gY29udHJvbCAlcFVsLyV1ICglZCkuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IsIHJldCk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlmbGFncyA9IGluZm8tPmZsYWdzOwogCQlpZiAoKChmbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpICYmICEoaW5mICYgKDEgPDwgMCkpKSB8fAogCQkgICAgKChmbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpICYmICEoaW5mICYgKDEgPDwgMSkpKSkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICIvJXUgZmxhZ3MgZG9uJ3QgbWF0Y2ggIgotCQkJCSJzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3Rvcik7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICVwVWwvJXUgZmxhZ3MgIgorCQkJCSJkb24ndCBtYXRjaCBzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAljdHJsLT5pbmZvID0gaW5mbzsKLQljdHJsLT5kYXRhID0ga21hbGxvYyhjdHJsLT5pbmZvLT5zaXplICogVVZDX0NUUkxfTkRBVEEsIEdGUF9LRVJORUwpOwotCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkFkZGVkIGNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldSAiCi0JCSJ0byBkZXZpY2UgJXMgZW50aXR5ICV1XG4iLCBVVkNfR1VJRF9BUkdTKGN0cmwtPmluZm8tPmVudGl0eSksCi0JCWN0cmwtPmluZm8tPnNlbGVjdG9yLCBkZXYtPnVkZXYtPmRldnBhdGgsIGVudGl0eS0+aWQpOworCWN0cmwtPmRhdGEgPSBrbWFsbG9jKGN0cmwtPmluZm8tPnNpemUgKiBVVkNfQ1RSTF9EQVRBX0xBU1QsIEdGUF9LRVJORUwpOworCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkFkZGVkIGNvbnRyb2wgJXBVbC8ldSB0byBkZXZpY2UgJXMgIgorCQkiZW50aXR5ICV1XG4iLCBjdHJsLT5pbmZvLT5lbnRpdHksIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQlkZXYtPnVkZXYtPmRldnBhdGgsIGVudGl0eS0+aWQpOwogfQogCiAvKgpAQCAtMTI4MSwxNyArMTMzOCwxNiBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGN0cmwtPnNlbGVjdG9yID09IGluZm8tPnNlbGVjdG9yKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIKLQkJCQlVVkNfR1VJRF9GT1JNQVQgIi8ldSBpcyBhbHJlYWR5IGRlZmluZWQuXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJDb250cm9sICVwVWwvJXUgaXMgYWxyZWFkeSBkZWZpbmVkLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldCA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVuZDsKIAkJfQogCQlpZiAoY3RybC0+aW5kZXggPT0gaW5mby0+aW5kZXgpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgIgotCQkJCVVWQ19HVUlEX0ZPUk1BVCAiLyV1IHdvdWxkIG92ZXJ3cml0ZSBpbmRleCAiCi0JCQkJIiVkLlxuIiwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yLCBpbmZvLT5pbmRleCk7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIkNvbnRyb2wgJXBVbC8ldSB3b3VsZCBvdmVyd3JpdGUgaW5kZXggJWQuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IsIGluZm8tPmluZGV4KTsKIAkJCXJldCA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVuZDsKIAkJfQpAQCAtMTMzMiwxMCArMTM4OCw5IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoaW5mby0+c2l6ZSAqIDggPCBtYXBwaW5nLT5zaXplICsgbWFwcGluZy0+b2Zmc2V0KSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJNYXBwaW5nICclcycgd291bGQgIgotCQkJCSJvdmVyZmxvdyBjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXVcbiIsCi0JCQkJbWFwcGluZy0+bmFtZSwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiTWFwcGluZyAnJXMnIHdvdWxkIG92ZXJmbG93IGNvbnRyb2wgJXBVbC8ldVxuIiwKKwkJCQltYXBwaW5nLT5uYW1lLCBpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldCA9IC1FT1ZFUkZMT1c7CiAJCQlnb3RvIGVuZDsKIAkJfQpAQCAtMTM1NCw5ICsxNDA5LDkgQEAKIAogCQltYXBwaW5nLT5jdHJsID0gaW5mbzsKIAkJbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bGlzdCwgJmluZm8tPm1hcHBpbmdzKTsKLQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQWRkaW5nIG1hcHBpbmcgJXMgdG8gY29udHJvbCAiCi0JCQlVVkNfR1VJRF9GT1JNQVQgIi8ldS5cbiIsIG1hcHBpbmctPm5hbWUsCi0JCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yKTsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJIkFkZGluZyBtYXBwaW5nICVzIHRvIGNvbnRyb2wgJXBVbC8ldS5cbiIsCisJCQltYXBwaW5nLT5uYW1lLCBpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTEzNzgsNiArMTQzMyw3IEBACiAJCXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkOwogCQl1OCBpbmRleDsKIAl9IGJsYWNrbGlzdFtdID0geworCQl7IHsgVVNCX0RFVklDRSgweDEzZDMsIDB4NTA5YikgfSwgOSB9LCAvKiBHYWluICovCiAJCXsgeyBVU0JfREVWSUNFKDB4MWM0ZiwgMHgzMDAwKSB9LCA2IH0sIC8qIFdCIFRlbXBlcmF0dXJlICovCiAJCXsgeyBVU0JfREVWSUNFKDB4NTk4NiwgMHgwMjQxKSB9LCAyIH0sIC8qIEh1ZSAqLwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKaW5kZXggMzkxY2NjYy4uYTgxNDgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwpAQCAtNDMsOCArNDMsOSBAQAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInYwLjEuMCIKICNlbmRpZgogCit1bnNpZ25lZCBpbnQgdXZjX2Nsb2NrX3BhcmFtID0gQ0xPQ0tfTU9OT1RPTklDOwogdW5zaWduZWQgaW50IHV2Y19ub19kcm9wX3BhcmFtOwotc3RhdGljIHVuc2lnbmVkIGludCB1dmNfcXVpcmtzX3BhcmFtOworc3RhdGljIHVuc2lnbmVkIGludCB1dmNfcXVpcmtzX3BhcmFtID0gLTE7CiB1bnNpZ25lZCBpbnQgdXZjX3RyYWNlX3BhcmFtOwogdW5zaWduZWQgaW50IHV2Y190aW1lb3V0X3BhcmFtID0gVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQ7CiAKQEAgLTU5LDYgKzYwLDExIEBACiAJCS5mY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsCiAJfSwKIAl7CisJCS5uYW1lCQk9ICJZVVYgNDoyOjIgKFlVWVYpIiwKKwkJLmd1aWQJCT0gVVZDX0dVSURfRk9STUFUX1lVWTJfSVNJR0hULAorCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCX0sCisJewogCQkubmFtZQkJPSAiWVVWIDQ6MjowIChOVjEyKSIsCiAJCS5ndWlkCQk9IFVWQ19HVUlEX0ZPUk1BVF9OVjEyLAogCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9OVjEyLApAQCAtMzA5LDExICszMTUsMTAgQEAKIAkJCQlzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWZvcm1hdC0+ZmNjID0gZm10ZGVzYy0+ZmNjOwogCQl9IGVsc2UgewotCQkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJVbmtub3duIHZpZGVvIGZvcm1hdCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICJcbiIsCi0JCQkJVVZDX0dVSURfQVJHUygmYnVmZmVyWzVdKSk7Ci0JCQlzbnByaW50Zihmb3JtYXQtPm5hbWUsIHNpemVvZiBmb3JtYXQtPm5hbWUsCi0JCQkJVVZDX0dVSURfRk9STUFULCBVVkNfR1VJRF9BUkdTKCZidWZmZXJbNV0pKTsKKwkJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiVW5rbm93biB2aWRlbyBmb3JtYXQgJXBVbFxuIiwKKwkJCQkmYnVmZmVyWzVdKTsKKwkJCXNucHJpbnRmKGZvcm1hdC0+bmFtZSwgc2l6ZW9mKGZvcm1hdC0+bmFtZSksICIlcFVsXG4iLAorCQkJCSZidWZmZXJbNV0pOwogCQkJZm9ybWF0LT5mY2MgPSAwOwogCQl9CiAKQEAgLTE3NTAsNyArMTc1NSw4IEBACiAJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CiAJZGV2LT5pbnRmID0gdXNiX2dldF9pbnRmKGludGYpOwogCWRldi0+aW50Zm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JZGV2LT5xdWlya3MgPSBpZC0+ZHJpdmVyX2luZm8gfCB1dmNfcXVpcmtzX3BhcmFtOworCWRldi0+cXVpcmtzID0gKHV2Y19xdWlya3NfcGFyYW0gPT0gLTEpCisJCSAgICA/IGlkLT5kcml2ZXJfaW5mbyA6IHV2Y19xdWlya3NfcGFyYW07CiAKIAlpZiAodWRldi0+cHJvZHVjdCAhPSBOVUxMKQogCQlzdHJsY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CkBAIC0xNzczLDkgKzE3NzksOSBAQAogCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAotCWlmICh1dmNfcXVpcmtzX3BhcmFtICE9IDApIHsKLQkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJGb3JjaW5nIGRldmljZSBxdWlya3MgMHgleCBieSBtb2R1bGUgIgotCQkJInBhcmFtZXRlciBmb3IgdGVzdGluZyBwdXJwb3NlLlxuIiwgdXZjX3F1aXJrc19wYXJhbSk7CisJaWYgKGRldi0+cXVpcmtzICE9IGlkLT5kcml2ZXJfaW5mbykgeworCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIkZvcmNpbmcgZGV2aWNlIHF1aXJrcyB0byAweCV4IGJ5IG1vZHVsZSAiCisJCQkicGFyYW1ldGVyIGZvciB0ZXN0aW5nIHB1cnBvc2UuXG4iLCBkZXYtPnF1aXJrcyk7CiAJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiUGxlYXNlIHJlcG9ydCByZXF1aXJlZCBxdWlya3MgdG8gdGhlICIKIAkJCSJsaW51eC11dmMtZGV2ZWwgbWFpbGluZyBsaXN0LlxuIik7CiAJfQpAQCAtMTg5Miw2ICsxODk4LDQ1IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTW9kdWxlIHBhcmFtZXRlcnMKKyAqLworCitzdGF0aWMgaW50IHV2Y19jbG9ja19wYXJhbV9nZXQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAodXZjX2Nsb2NrX3BhcmFtID09IENMT0NLX01PTk9UT05JQykKKwkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiQ0xPQ0tfTU9OT1RPTklDIik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWZmZXIsICJDTE9DS19SRUFMVElNRSIpOworfQorCitzdGF0aWMgaW50IHV2Y19jbG9ja19wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoc3RybmNhc2VjbXAodmFsLCAiY2xvY2tfIiwgc3RybGVuKCJjbG9ja18iKSkgPT0gMCkKKwkJdmFsICs9IHN0cmxlbigiY2xvY2tfIik7CisKKwlpZiAoc3RyY2FzZWNtcCh2YWwsICJtb25vdG9uaWMiKSA9PSAwKQorCQl1dmNfY2xvY2tfcGFyYW0gPSBDTE9DS19NT05PVE9OSUM7CisJZWxzZSBpZiAoc3RyY2FzZWNtcCh2YWwsICJyZWFsdGltZSIpID09IDApCisJCXV2Y19jbG9ja19wYXJhbSA9IENMT0NLX1JFQUxUSU1FOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX3BhcmFtX2NhbGwoY2xvY2ssIHV2Y19jbG9ja19wYXJhbV9zZXQsIHV2Y19jbG9ja19wYXJhbV9nZXQsCisJCSAgJnV2Y19jbG9ja19wYXJhbSwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xvY2ssICJWaWRlbyBidWZmZXJzIHRpbWVzdGFtcCBjbG9jayIpOworbW9kdWxlX3BhcmFtX25hbWVkKG5vZHJvcCwgdXZjX25vX2Ryb3BfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG5vZHJvcCwgIkRvbid0IGRyb3AgaW5jb21wbGV0ZSBmcmFtZXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChxdWlya3MsIHV2Y19xdWlya3NfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHF1aXJrcywgIkZvcmNlZCBkZXZpY2UgcXVpcmtzIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodHJhY2UsIHV2Y190cmFjZV9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhY2UsICJUcmFjZSBsZXZlbCBiaXRtYXNrIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodGltZW91dCwgdXZjX3RpbWVvdXRfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJTdHJlYW1pbmcgY29udHJvbCByZXF1ZXN0cyB0aW1lb3V0Iik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwCiAgKi8KIApAQCAtMjE5NywxNSArMjI0Miw2IEBACiBtb2R1bGVfaW5pdCh1dmNfaW5pdCk7CiBtb2R1bGVfZXhpdCh1dmNfY2xlYW51cCk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChub2Ryb3AsIHV2Y19ub19kcm9wX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhub2Ryb3AsICJEb24ndCBkcm9wIGluY29tcGxldGUgZnJhbWVzIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCB1dmNfcXVpcmtzX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhxdWlya3MsICJGb3JjZWQgZGV2aWNlIHF1aXJrcyIpOwotbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCB1dmNfdHJhY2VfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHRyYWNlLCAiVHJhY2UgbGV2ZWwgYml0bWFzayIpOwotbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVvdXQsIHV2Y190aW1lb3V0X3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiU3RyZWFtaW5nIGNvbnRyb2wgcmVxdWVzdHMgdGltZW91dCIpOwotCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKaW5kZXggZWExMTgzOS4uNGE5MjVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKQEAgLTUwMiw3ICs1MDIsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pcnFsb2NrLCBmbGFncyk7CiAKIAlidWYtPmJ1Zi5zZXF1ZW5jZSA9IHF1ZXVlLT5zZXF1ZW5jZSsrOwotCWRvX2dldHRpbWVvZmRheSgmYnVmLT5idWYudGltZXN0YW1wKTsKIAogCXdha2VfdXAoJmJ1Zi0+d2FpdCk7CiAJcmV0dXJuIG5leHRidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCAyMzIzOWE0Li40MzE1MmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQl4Y3RybC5pZCA9IGN0cmwtPmlkOwogCQl4Y3RybC52YWx1ZSA9IGN0cmwtPnZhbHVlOwogCi0JCXV2Y19jdHJsX2JlZ2luKGNoYWluKTsKKwkJcmV0ID0gdXZjX2N0cmxfYmVnaW4oY2hhaW4pOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTU0OSw2ICs1NDksOCBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlyZXQgPSB1dmNfY3RybF9jb21taXQoY2hhaW4pOworCQlpZiAocmV0ID09IDApCisJCQljdHJsLT52YWx1ZSA9IHhjdHJsLnZhbHVlOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggN2RjZjUzNC4uNmIwNjY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTQxMCw2ICs0MTAsOCBAQAogCSAqIHdoZW4gdGhlIEVPRiBiaXQgaXMgc2V0IHRvIGZvcmNlIHN5bmNocm9uaXNhdGlvbiBvbiB0aGUgbmV4dCBwYWNrZXQuCiAJICovCiAJaWYgKGJ1Zi0+c3RhdGUgIT0gVVZDX0JVRl9TVEFURV9BQ1RJVkUpIHsKKwkJc3RydWN0IHRpbWVzcGVjIHRzOworCiAJCWlmIChmaWQgPT0gc3RyZWFtLT5sYXN0X2ZpZCkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9GUkFNRSwgIkRyb3BwaW5nIHBheWxvYWQgKG91dCBvZiAiCiAJCQkJInN5bmMpLlxuIik7CkBAIC00MTksNiArNDIxLDE0IEBACiAJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAorCQlpZiAodXZjX2Nsb2NrX3BhcmFtID09IENMT0NLX01PTk9UT05JQykKKwkJCWt0aW1lX2dldF90cygmdHMpOworCQllbHNlCisJCQlrdGltZV9nZXRfcmVhbF90cygmdHMpOworCisJCWJ1Zi0+YnVmLnRpbWVzdGFtcC50dl9zZWMgPSB0cy50dl9zZWM7CisJCWJ1Zi0+YnVmLnRpbWVzdGFtcC50dl91c2VjID0gdHMudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUM7CisKIAkJLyogVE9ETzogSGFuZGxlIFBUUyBhbmQgU0NSLiAqLwogCQlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9BQ1RJVkU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggMjMzNzU4NS4uMmJiYTA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC0xMTMsNiArMTEzLDkgQEAKICNkZWZpbmUgVVZDX0dVSURfRk9STUFUX1lVWTIgXAogCXsgJ1knLCAgJ1UnLCAgJ1knLCAgJzInLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCBcCiAJIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4MDAsIDB4MzgsIDB4OWIsIDB4NzF9CisjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9ZVVkyX0lTSUdIVCBcCisJeyAnWScsICAnVScsICAnWScsICAnMicsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIFwKKwkgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5YiwgMHg3MX0KICNkZWZpbmUgVVZDX0dVSURfRk9STUFUX05WMTIgXAogCXsgJ04nLCAgJ1YnLCAgJzEnLCAgJzInLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCBcCiAJIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4MDAsIDB4MzgsIDB4OWIsIDB4NzF9CkBAIC0xNDksNyArMTUyLDcgQEAKICNkZWZpbmUgVVZDX01BWF9TVEFUVVNfU0laRQkxNgogCiAjZGVmaW5lIFVWQ19DVFJMX0NPTlRST0xfVElNRU9VVAkzMDAKLSNkZWZpbmUgVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQJMzAwMAorI2RlZmluZSBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVAk1MDAwCiAKIC8qIERldmljZXMgcXVpcmtzICovCiAjZGVmaW5lIFVWQ19RVUlSS19TVEFUVVNfSU5URVJWQUwJMHgwMDAwMDAwMQpAQCAtMjQyLDcgKzI0NSw4IEBACiAJCQkgICB1dmNfY29udHJvbF9pbmZvLiAqLwogCV9fdTggZGlydHkgOiAxLAogCSAgICAgbG9hZGVkIDogMSwKLQkgICAgIG1vZGlmaWVkIDogMTsKKwkgICAgIG1vZGlmaWVkIDogMSwKKwkgICAgIGNhY2hlZCA6IDE7CiAKIAlfX3U4ICpkYXRhOwogfTsKQEAgLTUzMyw2ICs1MzcsNyBAQAogI2RlZmluZSBVVkNfV0FSTl9NSU5NQVgJCTAKICNkZWZpbmUgVVZDX1dBUk5fUFJPQkVfREVGCTEKIAorZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfY2xvY2tfcGFyYW07CiBleHRlcm4gdW5zaWduZWQgaW50IHV2Y19ub19kcm9wX3BhcmFtOwogZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfdHJhY2VfcGFyYW07CiBleHRlcm4gdW5zaWduZWQgaW50IHV2Y190aW1lb3V0X3BhcmFtOwpAQCAtNTUyLDE2ICs1NTcsNiBAQAogI2RlZmluZSB1dmNfcHJpbnRrKGxldmVsLCBtc2cuLi4pIFwKIAlwcmludGsobGV2ZWwgInV2Y3ZpZGVvOiAiIG1zZykKIAotI2RlZmluZSBVVkNfR1VJRF9GT1JNQVQgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtIiBcCi0JCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IgotI2RlZmluZSBVVkNfR1VJRF9BUkdTKGd1aWQpIFwKLQkoZ3VpZClbM10sICAoZ3VpZClbMl0sICAoZ3VpZClbMV0sICAoZ3VpZClbMF0sIFwKLQkoZ3VpZClbNV0sICAoZ3VpZClbNF0sIFwKLQkoZ3VpZClbN10sICAoZ3VpZClbNl0sIFwKLQkoZ3VpZClbOF0sICAoZ3VpZClbOV0sIFwKLQkoZ3VpZClbMTBdLCAoZ3VpZClbMTFdLCAoZ3VpZClbMTJdLCBcCi0JKGd1aWQpWzEzXSwgKGd1aWQpWzE0XSwgKGd1aWQpWzE1XQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSW50ZXJuYWwgZnVuY3Rpb25zLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCmluZGV4IGM0MTUwYmQuLmY3N2Y4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGludCBwdXRfdjRsMl93aW5kb3czMihzdHJ1Y3QgdjRsMl93aW5kb3cgKmtwLCBzdHJ1Y3QgdjRsMl93aW5kb3czMiBfX3VzZXIgKnVwKQogewotCWlmIChjb3B5X3RvX3VzZXIoJnVwLT53LCAma3AtPncsIHNpemVvZih1cC0+dykpIHx8CisJaWYgKGNvcHlfdG9fdXNlcigmdXAtPncsICZrcC0+dywgc2l6ZW9mKGtwLT53KSkgfHwKIAkJcHV0X3VzZXIoa3AtPmZpZWxkLCAmdXAtPmZpZWxkKSB8fAogCQlwdXRfdXNlcihrcC0+Y2hyb21ha2V5LCAmdXAtPmNocm9tYWtleSkgfHwKIAkJcHV0X3VzZXIoa3AtPmNsaXBjb3VudCwgJnVwLT5jbGlwY291bnQpKQpAQCAtNDc1LDYgKzQ3NSw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAlzd2l0Y2ggKGtwLT5tZW1vcnkpIHsKIAljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWlmIChnZXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCkgfHwKKwkJCWdldF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCBmYTc4NTU1Li5mY2QwNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKQEAgLTQxOCw2ICs0MTgsOCBAQAogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCiAJdmIgPSBremFsbG9jKHNpemUrc2l6ZW9mKCptZW0pLEdGUF9LRVJORUwpOworCWlmICghdmIpCisJCXJldHVybiB2YjsKIAogCW1lbSA9IHZiLT5wcml2ID0gKChjaGFyICopdmIpK3NpemU7CiAJbWVtLT5tYWdpYz1NQUdJQ19TR19NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCmluZGV4IGQ2ZTZhMjguLjEzNmUwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC0xMzgsNiArMTM4LDggQEAKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKIAogCXZiID0ga3phbGxvYyhzaXplK3NpemVvZigqbWVtKSxHRlBfS0VSTkVMKTsKKwlpZiAoIXZiKQorCQlyZXR1cm4gdmI7CiAKIAltZW0gPSB2Yi0+cHJpdiA9ICgoY2hhciAqKXZiKStzaXplOwogCW1lbS0+bWFnaWM9TUFHSUNfVk1BTF9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDM3NjMyYTA2NC4uY2RiZTcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTEzNzEsNyArMTM3MSw3IEBACiAJLyogTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lLCBsZXQncyBhZGQgaXQgdG8gZGV2aWNlIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZkZXYtPnZpdmlfZGV2bGlzdCwgJnZpdmlfZGV2bGlzdCk7CiAKLQlpZiAodmlkZW9fbnIgPj0gMCkKKwlpZiAodmlkZW9fbnIgIT0gLTEpCiAJCXZpZGVvX25yKys7CiAKIAlkZXYtPnZmZCA9IHZmZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCmluZGV4IGVkYjAwMjkuLmE3ZTYxMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwpAQCAtMSw3ICsxLDExIEBACiBjb25maWcgVVNCX1pDMDMwMQotCXRyaXN0YXRlICJVU0IgWkMwMzAxW1BdIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQiBaQzAzMDFbUF0gd2ViY2FtIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2EgemMzeHggbW9kdWxlCisJICBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFpDMDMwMSBvcgogCSAgWkMwMzAxUCBJbWFnZSBQcm9jZXNzb3JzIGFuZCBDb250cm9sIENoaXBzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwppbmRleCBmNmMyZmI0Li5lNmFkNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKQEAgLTExOTYsNyArMTE5Niw4IEBACiBzdGF0aWMgdm9pZCB6b3Jhbl9yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpCiB7CiAJLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCi0JaW50IHN0YXR1cyA9IDAsIG1vZGU7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJaW50IG1vZGU7CiAKIAlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CiAJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKQEAgLTEyMjgsNyArMTIyOSw3IEBACiAJICAgICAgIHUzMiAgICAgICAgICAgYXN0YXQsCiAJICAgICAgIHUzMiAgICAgICAgICAgc3RhdCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCS8qIFRoaXMgaXMgSlBFRyBlcnJvciBoYW5kbGluZyBwYXJ0ICovCiAJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgpAQCAtMTI3OSw2ICsxMjgwLDcgQEAKIAkvKiBSZXBvcnQgZXJyb3IgKi8KIAlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYgenItPm51bV9lcnJvcnMgPD0gOCkgewogCQlsb25nIGZyYW1lOworCQlpbnQgajsKIAogCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwogCQlwcmludGsoS0VSTl9FUlIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDJkZGZmZWQuLmVjNDEzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCS8qIEFsbG9jYXRlIGZyYWdtZW50IHRhYmxlIGZvciB0aGlzIGJ1ZmZlciAqLwogCiAJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAobWVtID09IDApIHsKKwkJaWYgKCFtZW0pIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogJXMgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAJfQogCiAJaWYgKG5vcm0gPT0gVjRMMl9TVERfQUxMKSB7Ci0JCWludCBzdGF0dXMgPSAwOworCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAkJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAogCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBxdWVyeXN0ZCwgJnN0ZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCmluZGV4IGYwZWFlODMuLjNkNGJhYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lIE1FVEhPRDAgMAogI2RlZmluZSBNRVRIT0QxIDEKICNkZWZpbmUgTUVUSE9EMiAyCisjZGVmaW5lIE1FVEhPRDMgMwogCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0xMTQsNyArMTE1LDcgQEAKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzYiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA0ZSksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKLQl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDMgfSwKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMzAyLDcgKzMwMyw3IEBACiB9OwogCiAvKiBpbml0IHRhYmxlICovCi1zdGF0aWMgbWVzc2FnZSAqaW5pdFszXSA9IHsgbTAsIG0xLCBtMiB9Oworc3RhdGljIG1lc3NhZ2UgKmluaXRbNF0gPSB7IG0wLCBtMSwgbTIsIG0yIH07CiAKIAogLyogSlBFRyBzdGF0aWMgZGF0YSBpbiBoZWFkZXIgKEh1ZmZtYW4gdGFibGUsIGV0YykgKi8KQEAgLTk2Nyw2ICs5NjgsMjIgQEAKIAltMGQxWzBdID0gbW9kZTsKIAltMVsyXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CiAJbTJbMV0udmFsdWUgPSAweGYwMDAgKyBtb2RlOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBNRVRIT0QzLCB0aGUgbW9kZXMgYXJlIGRpZmZlcmVudCAqLworCWlmIChjYW0tPm1ldGhvZCA9PSBNRVRIT0QzKSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDE7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWhlYWRlcjJbNDM3XSA9IGNhbS0+aGVpZ2h0IC8gMjU2OwogCWhlYWRlcjJbNDM4XSA9IGNhbS0+aGVpZ2h0ICUgMjU2OwogCWhlYWRlcjJbNDM5XSA9IGNhbS0+d2lkdGggLyAyNTY7CkBAIC0xNTgyLDYgKzE1OTksMjIgQEAKIAltMGQxWzBdID0gbW9kZTsKIAltMVsyXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CiAJbTJbMV0udmFsdWUgPSAweGYwMDAgKyBtb2RlOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBNRVRIT0QzLCB0aGUgbW9kZXMgYXJlIGRpZmZlcmVudCAqLworCWlmIChjYW0tPm1ldGhvZCA9PSBNRVRIT0QzKSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDE7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWhlYWRlcjJbNDM3XSA9IGNhbS0+aGVpZ2h0IC8gMjU2OwogCWhlYWRlcjJbNDM4XSA9IGNhbS0+aGVpZ2h0ICUgMjU2OwogCWhlYWRlcjJbNDM5XSA9IGNhbS0+d2lkdGggLyAyNTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IGJkODNmYTBhLi45NzJiODcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTEyMjYsOSArMTIyNiw4IEBACiAJYmxrX3F1ZXVlX3ByZXBfcnEobXNiLT5xdWV1ZSwgbXNwcm9fYmxvY2tfcHJlcGFyZV9yZXEpOwogCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChtc2ItPnF1ZXVlLCBsaW1pdCk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9QQUdFUyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobXNiLT5xdWV1ZSwgTVNQUk9fQkxPQ0tfTUFYX1BBR0VTKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShtc2ItPnF1ZXVlLAogCQkJCSAgIE1TUFJPX0JMT0NLX01BWF9QQUdFUyAqIG1zYi0+cGFnZV9zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA0NGQyMDM3Li41MzgyYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMTI2LDggKzEyNiw2IEBACiAgKiAgUHVibGljIGRhdGEuLi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICptcHRfcHJvY19yb290X2RpcjsKLQogI2RlZmluZSBXSE9JTklUX1VOS05PV04JCTB4QUEKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMTQ2LDYgKzE0NCw5IEBACiBzdGF0aWMgTVBUX1JFU0VUSEFORExFUgkJIE1wdFJlc2V0SGFuZGxlcnNbTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTXTsKIHN0YXRpYyBzdHJ1Y3QgbXB0X3BjaV9kcml2ZXIgCSpNcHREZXZpY2VEcml2ZXJIYW5kbGVyc1tNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlNdOwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgCSptcHRfcHJvY19yb290X2RpcjsKKyNlbmRpZgogCiAvKgogICogIERyaXZlciBDYWxsYmFjayBJbmRleCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGI0OTQ4NjcxLi45NzE4YzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTMiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xMyIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE0IgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTQiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCAzNTJhY2QwLi5jYWE4ZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTM2MCw4ICszNjAsOCBAQAogCXUxNgkJIGlvY3N0YXR1czsKIAogCS8qIGJ1cyByZXNldCBpcyBvbmx5IGdvb2QgZm9yIFNDU0kgSU8sIFJBSUQgUEFTU1RIUlUgKi8KLQlpZiAoIShmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSB8fAotCSAgICAoZnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkpIHsKKwlpZiAoIShmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIIHx8CisJCWZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QpKSB7CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX1dBUk5fRk1UCiAJCQkiVGFza01nbXQsIG5vdCBTQ1NJX0lPISFcbiIsIGlvYy0+bmFtZSkpOwogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGViZjZhZTAuLjYxMmFiM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTE5NSwyOSArMTk1LDM0IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJaW50CQkJcmVhZHk7CiAJTVBUX0FEQVBURVIgCQkqaW9jOworCWludAkJCWxvb3BzID0gNDA7CS8qIHNlY29uZHMgKi8KIAogCWhkID0gc2hvc3RfcHJpdihTQ3BudC0+ZGV2aWNlLT5ob3N0KTsKIAlpb2MgPSBoZC0+aW9jOwogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoKHJlYWR5ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpID4+IDE2KSA9PSBESURfSU1NX1JFVFJZKSB7CisJd2hpbGUgKChyZWFkeSA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSA+PiAxNikgPT0gRElEX0lNTV9SRVRSWQorCSB8fCAobG9vcHMgPiAwICYmIGlvYy0+YWN0aXZlID09IDApKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlkZmNwcmludGsgKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCiAJCQkibXB0ZmNfYmxvY2tfZXJyb3JfaGFuZGxlci4lZDogJWQ6JWQsIHBvcnQgc3RhdHVzIGlzICIKLQkJCSJESURfSU1NX1JFVFJZLCBkZWZlcnJpbmcgJXMgcmVjb3ZlcnkuXG4iLAorCQkJIiV4LCBhY3RpdmUgZmxhZyAlZCwgZGVmZXJyaW5nICVzIHJlY292ZXJ5LlxuIiwKIAkJCWlvYy0+bmFtZSwgaW9jLT5zaC0+aG9zdF9ubywKLQkJCVNDcG50LT5kZXZpY2UtPmlkLCBTQ3BudC0+ZGV2aWNlLT5sdW4sIGNhbGxlcikpOworCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwKKwkJCXJlYWR5LCBpb2MtPmFjdGl2ZSwgY2FsbGVyKSk7CiAJCW1zbGVlcCgxMDAwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlsb29wcyAtLTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlpZiAocmVhZHkgPT0gRElEX05PX0NPTk5FQ1QgfHwgIVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSB7CisJaWYgKHJlYWR5ID09IERJRF9OT19DT05ORUNUIHx8ICFTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YQorCSB8fCBpb2MtPmFjdGl2ZSA9PSAwKSB7CiAJCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJCSIlcy4lZDogJWQ6JWQsIGZhaWxpbmcgcmVjb3ZlcnksICIKLQkJCSJwb3J0IHN0YXRlICVkLCB2ZGV2aWNlICVwLlxuIiwgY2FsbGVyLAorCQkJInBvcnQgc3RhdGUgJXgsIGFjdGl2ZSAlZCwgdmRldmljZSAlcC5cbiIsIGNhbGxlciwKIAkJCWlvYy0+bmFtZSwgaW9jLT5zaC0+aG9zdF9ubywKIAkJCVNDcG50LT5kZXZpY2UtPmlkLCBTQ3BudC0+ZGV2aWNlLT5sdW4sIHJlYWR5LAotCQkJU0NwbnQtPmRldmljZS0+aG9zdGRhdGEpKTsKKwkJCWlvYy0+YWN0aXZlLCBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YSkpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAlkZmNwcmludGsgKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCA4Mzg3M2UzLi5jMjBiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTEwNzUsNiArMTA3NSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbXB0c2FzX2Jsb2NrX2lvX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQoreworCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0JMT0NLKTsKK30KKworc3RhdGljIHZvaWQKK21wdHNhc19ibG9ja19pb19zdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlpZiAoc3RhcmdldCkKKwkJc3RhcmdldF9mb3JfZWFjaF9kZXZpY2Uoc3RhcmdldCwgTlVMTCwgbXB0c2FzX2Jsb2NrX2lvX3NkZXYpOworfQorCiAvKioKICAqIG1wdHNhc190YXJnZXRfcmVzZXRfcXVldWUKICAqCkBAIC0xMDk4LDEwICsxMTExLDExIEBACiAJaWQgPSBzYXNfZXZlbnRfZGF0YS0+VGFyZ2V0SUQ7CiAJY2hhbm5lbCA9IHNhc19ldmVudF9kYXRhLT5CdXM7CiAKLQlpZiAoISh2dGFyZ2V0ID0gbXB0c2FzX2ZpbmRfdnRhcmdldChpb2MsIGNoYW5uZWwsIGlkKSkpCi0JCXJldHVybjsKLQotCXZ0YXJnZXQtPmRlbGV0ZWQgPSAxOyAvKiBibG9jayBJTyAqLworCXZ0YXJnZXQgPSBtcHRzYXNfZmluZF92dGFyZ2V0KGlvYywgY2hhbm5lbCwgaWQpOworCWlmICh2dGFyZ2V0KSB7CisJCW1wdHNhc19ibG9ja19pb19zdGFyZ2V0KHZ0YXJnZXQtPnN0YXJnZXQpOworCQl2dGFyZ2V0LT5kZWxldGVkID0gMTsgLyogYmxvY2sgSU8gKi8KKwl9CiAKIAl0YXJnZXRfcmVzZXRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcHRzYXNfdGFyZ2V0X3Jlc2V0X2V2ZW50KSwKIAkgICAgR0ZQX0FUT01JQyk7CkBAIC0xODY4LDcgKzE4ODIsOCBAQAogCWlmIChpb2MtPnNhc19kaXNjb3ZlcnlfcXVpZXNjZV9pbykKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKLS8vCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisJaWYgKGlvYy0+ZGVidWdfbGV2ZWwgJiBNUFRfREVCVUdfU0NTSSkKKwkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAogCXJldHVybiBtcHRzY3NpaF9xY21kKFNDcG50LGRvbmUpOwogfQpAQCAtMjY4Niw2ICsyNzAxLDE4NyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RydWN0IHJlcF9tYW51X3JlcXVlc3R7CisJdTggc21wX2ZyYW1lX3R5cGU7CisJdTggZnVuY3Rpb247CisJdTggcmVzZXJ2ZWQ7CisJdTggcmVxdWVzdF9sZW5ndGg7Cit9OworCitzdHJ1Y3QgcmVwX21hbnVfcmVwbHl7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDEgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHgwMSAqLworCXU4IGZ1bmN0aW9uX3Jlc3VsdDsKKwl1OCByZXNwb25zZV9sZW5ndGg7CisJdTE2IGV4cGFuZGVyX2NoYW5nZV9jb3VudDsKKwl1OCByZXNlcnZlZDBbMl07CisJdTggc2FzX2Zvcm1hdDoxOworCXU4IHJlc2VydmVkMTo3OworCXU4IHJlc2VydmVkMlszXTsKKwl1OCB2ZW5kb3JfaWRbU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU5dOworCXU4IHByb2R1Y3RfaWRbU0FTX0VYUEFOREVSX1BST0RVQ1RfSURfTEVOXTsKKwl1OCBwcm9kdWN0X3JldltTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOXTsKKwl1OCBjb21wb25lbnRfdmVuZG9yX2lkW1NBU19FWFBBTkRFUl9DT01QT05FTlRfVkVORE9SX0lEX0xFTl07CisJdTE2IGNvbXBvbmVudF9pZDsKKwl1OCBjb21wb25lbnRfcmV2aXNpb25faWQ7CisJdTggcmVzZXJ2ZWQzOworCXU4IHZlbmRvcl9zcGVjaWZpY1s4XTsKK307CisKKy8qKgorICAqIG1wdHNhc19leHBfcmVwbWFudWZhY3R1cmVfaW5mbyAtCisgICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgICogQHNhc19hZGRyZXNzOiBleHBhbmRlciBzYXMgYWRkcmVzcworICAqIEBlZGV2OiB0aGUgc2FzX2V4cGFuZGVyX2RldmljZSBvYmplY3QKKyAgKgorICAqIEZpbGxzIGluIHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdCB3aGVuIFNNUCBwb3J0IGlzIGNyZWF0ZWQuCisgICoKKyAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICAqLworc3RhdGljIGludAorbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvKE1QVF9BREFQVEVSICppb2MsCisJdTY0IHNhc19hZGRyZXNzLCBzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSAqZWRldikKK3sKKwlNUFRfRlJBTUVfSERSICptZjsKKwlTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCAqc21wcmVxOworCVNtcFBhc3N0aHJvdWdoUmVwbHlfdCAqc21wcmVwOworCXN0cnVjdCByZXBfbWFudV9yZXBseSAqbWFudWZhY3R1cmVfcmVwbHk7CisJc3RydWN0IHJlcF9tYW51X3JlcXVlc3QgKm1hbnVmYWN0dXJlX3JlcXVlc3Q7CisJaW50IHJldDsKKwlpbnQgZmxhZ3NMZW5ndGg7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwljaGFyICpwc2dlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGF0YV9vdXQgPSBOVUxMOworCWRtYV9hZGRyX3QgZGF0YV9vdXRfZG1hID0gMDsKKwl1MzIgc3o7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkJX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnRhc2ttZ210X2xvY2ssIGZsYWdzKTsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT5zYXNfbWdtdC5tdXRleCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwltZiA9IG1wdF9nZXRfbXNnX2ZyYW1lKG1wdHNhc01nbXRDdHgsIGlvYyk7CisJaWYgKCFtZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJc21wcmVxID0gKFNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICopbWY7CisJbWVtc2V0KHNtcHJlcSwgMCwgc2l6ZW9mKCpzbXByZXEpKTsKKworCXN6ID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpOworCisJZGF0YV9vdXQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBjaWRldiwgc3osICZkYXRhX291dF9kbWEpOworCWlmICghZGF0YV9vdXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcHV0X21mOworCX0KKworCW1hbnVmYWN0dXJlX3JlcXVlc3QgPSBkYXRhX291dDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5zbXBfZnJhbWVfdHlwZSA9IDB4NDA7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+ZnVuY3Rpb24gPSAxOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlc2VydmVkID0gMDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5yZXF1ZXN0X2xlbmd0aCA9IDA7CisKKwlzbXByZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKKwlzbXByZXEtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJKigodTY0ICopJnNtcHJlcS0+U0FTQWRkcmVzcykgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CisJc21wcmVxLT5SZXF1ZXN0RGF0YUxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisKKwlwc2dlID0gKGNoYXIgKikKKwkJKCgoaW50ICopIG1mKSArIChvZmZzZXRvZihTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCwgU0dMKSAvIDQpKTsKKworCWZsYWdzTGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCU1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAorCQlNUElfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DIHwKKwkJTVBJX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSOworCWZsYWdzTGVuZ3RoID0gZmxhZ3NMZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKKwlmbGFnc0xlbmd0aCB8PSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpOworCisJaW9jLT5hZGRfc2dlKHBzZ2UsIGZsYWdzTGVuZ3RoLCBkYXRhX291dF9kbWEpOworCXBzZ2UgKz0gaW9jLT5TR0Vfc2l6ZTsKKworCWZsYWdzTGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCU1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAorCQlNUElfU0dFX0ZMQUdTX0lPQ19UT19IT1NUIHwKKwkJTVBJX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSOworCWZsYWdzTGVuZ3RoID0gZmxhZ3NMZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKKwlmbGFnc0xlbmd0aCB8PSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KTsKKwlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NMZW5ndGgsIGRhdGFfb3V0X2RtYSArCisJc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSk7CisKKwlJTklUSUFMSVpFX01HTVRfU1RBVFVTKGlvYy0+c2FzX21nbXQuc3RhdHVzKQorCW1wdF9wdXRfbXNnX2ZyYW1lKG1wdHNhc01nbXRDdHgsIGlvYywgbWYpOworCisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+c2FzX21nbXQuZG9uZSwgMTAgKiBIWik7CisJaWYgKCEoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfQ09NTUFORF9HT09EKSkgeworCQlyZXQgPSAtRVRJTUU7CisJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKKwkJbWYgPSBOVUxMOworCQlpZiAoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfRElEX0lPQ1JFU0VUKQorCQkJZ290byBvdXRfZnJlZTsKKwkJaWYgKCF0aW1lbGVmdCkKKwkJCW1wdF9IYXJkUmVzZXRIYW5kbGVyKGlvYywgQ0FOX1NMRUVQKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwltZiA9IE5VTEw7CisKKwlpZiAoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfUkZfVkFMSUQpIHsKKwkJdTggKnRtcDsKKworCXNtcHJlcCA9IChTbXBQYXNzdGhyb3VnaFJlcGx5X3QgKilpb2MtPnNhc19tZ210LnJlcGx5OworCWlmIChsZTE2X3RvX2NwdShzbXByZXAtPlJlc3BvbnNlRGF0YUxlbmd0aCkgIT0KKwkJc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSkpCisJCQlnb3RvIG91dF9mcmVlOworCisJbWFudWZhY3R1cmVfcmVwbHkgPSBkYXRhX291dCArIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisJc3RybmNweShlZGV2LT52ZW5kb3JfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT52ZW5kb3JfaWQsCisJCVNBU19FWFBBTkRFUl9WRU5ET1JfSURfTEVOKTsKKwlzdHJuY3B5KGVkZXYtPnByb2R1Y3RfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X2lkLAorCQlTQVNfRVhQQU5ERVJfUFJPRFVDVF9JRF9MRU4pOworCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9yZXYsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X3JldiwKKwkJU0FTX0VYUEFOREVSX1BST0RVQ1RfUkVWX0xFTik7CisJZWRldi0+bGV2ZWwgPSBtYW51ZmFjdHVyZV9yZXBseS0+c2FzX2Zvcm1hdDsKKwlpZiAobWFudWZhY3R1cmVfcmVwbHktPnNhc19mb3JtYXQpIHsKKwkJc3RybmNweShlZGV2LT5jb21wb25lbnRfdmVuZG9yX2lkLAorCQkJbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQkJU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOKTsKKwkJdG1wID0gKHU4ICopJm1hbnVmYWN0dXJlX3JlcGx5LT5jb21wb25lbnRfaWQ7CisJCWVkZXYtPmNvbXBvbmVudF9pZCA9IHRtcFswXSA8PCA4IHwgdG1wWzFdOworCQllZGV2LT5jb21wb25lbnRfcmV2aXNpb25faWQgPQorCQkJbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9yZXZpc2lvbl9pZDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQKKwkJCSIlczogc21wIHBhc3N0aHJ1IHJlcGx5IGZhaWxlZCB0byBiZSByZXR1cm5lZFxuIiwKKwkJCWlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXQgPSAtRU5YSU87CisJfQorb3V0X2ZyZWU6CisJaWYgKGRhdGFfb3V0X2RtYSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgc3osIGRhdGFfb3V0LCBkYXRhX291dF9kbWEpOworcHV0X21mOgorCWlmIChtZikKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworb3V0X3VubG9jazoKKwlDTEVBUl9NR01UX1NUQVRVUyhpb2MtPnNhc19tZ210LnN0YXR1cykKKwltdXRleF91bmxvY2soJmlvYy0+c2FzX21nbXQubXV0ZXgpOworb3V0OgorCXJldHVybiByZXQ7CisgfQorCiBzdGF0aWMgdm9pZAogbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKHN0cnVjdCBzYXNfaWRlbnRpZnkgKmlkZW50aWZ5LAogCQlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gKmRldmljZV9pbmZvKQpAQCAtMjk2Nyw2ICszMTYzLDExIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQltcHRzYXNfc2V0X3JwaHkoaW9jLCBwaHlfaW5mbywgcnBoeSk7CisJCWlmIChpZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0UgfHwKKwkJCWlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFKQorCQkJCW1wdHNhc19leHBfcmVwbWFudWZhY3R1cmVfaW5mbyhpb2MsCisJCQkJCWlkZW50aWZ5LnNhc19hZGRyZXNzLAorCQkJCQlycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KSk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDgxMjc5YjMuLjRhN2QxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE0MzgsOSArMTQzOCwxNCBAQAogCSAgICAmJiAodmRldmljZS0+dnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykKIAkgICAgJiYgKFNDcG50LT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpKSB7CiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlIHsKKwkJaWYgKFNDcG50LT5yZXF1ZXN0ICYmIFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8pIHsKKwkJCWlmICgoKFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8gJiAweDcpID09IDEpIHx8CisJCQkJIShTQ3BudC0+cmVxdWVzdC0+aW9wcmlvICYgMHg3KSkKKwkJCQlzY3NpY3RsIHw9IE1QSV9TQ1NJSU9fQ09OVFJPTF9IRUFET0ZROworCQl9CisJfSBlbHNlCiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1VOVEFHR0VEOwotCX0KKwogCiAJLyogVXNlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiB0byBzZXQgdXAgdGhlIG1lc3NhZ2UgZnJhbWUKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCmluZGV4IGUzOTk4NmEuLjI2NThiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwpAQCAtMTA2NSw5ICsxMDY1LDggQEAKIAlxdWV1ZSA9IGdkLT5xdWV1ZTsKIAlxdWV1ZS0+cXVldWVkYXRhID0gaTJvX2Jsa19kZXY7CiAKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocXVldWUsIEkyT19NQVhfUEhZU19TRUdNRU5UUyk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHF1ZXVlLCBtYXhfc2VjdG9ycyk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxdWV1ZSwgaTJvX3NnX3RhYmxlc2l6ZShjLCBib2R5X3NpemUpKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocXVldWUsIG1heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHF1ZXVlLCBpMm9fc2dfdGFibGVzaXplKGMsIGJvZHlfc2l6ZSkpOwogCiAJb3NtX2RlYnVnKCJtYXggc2VjdG9ycyA9ICVkXG4iLCBxdWV1ZS0+bWF4X3NlY3RvcnMpOwogCW9zbV9kZWJ1ZygicGh5cyBzZWdtZW50cyA9ICVkXG4iLCBxdWV1ZS0+bWF4X3BoeXNfc2VnbWVudHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCmluZGV4IDcwNDVjNDUuLjk0OWE2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKQEAgLTExMSwxMCArMTExLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEkyT19TTkZPUk1BVF9MQU40OF9NQUM6CS8qIExBTi00OCBNQUMgQWRkcmVzcyAqLwotCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICJMQU4tNDggTUFDIGFkZHJlc3MgQCAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0JCQkgICBzZXJpYWxub1syXSwgc2VyaWFsbm9bM10sCi0JCQkgICBzZXJpYWxub1s0XSwgc2VyaWFsbm9bNV0sIHNlcmlhbG5vWzZdLCBzZXJpYWxub1s3XSk7CisJCXNlcV9wcmludGYoc2VxLCAiTEFOLTQ4IE1BQyBhZGRyZXNzIEAgJXBNIiwgJnNlcmlhbG5vWzJdKTsKIAkJYnJlYWs7CiAKIAljYXNlIEkyT19TTkZPUk1BVF9XQU46CS8qIFdBTiBNQUMgQWRkcmVzcyAqLwpAQCAtMTI2LDEwICsxMjMsOCBAQAogCWNhc2UgSTJPX1NORk9STUFUX0xBTjY0X01BQzoJLyogTEFOLTY0IE1BQyBBZGRyZXNzICovCiAJCS8qIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgYSBMQU4tNjQgYWRkcmVzcyByZWFsbHkgbG9va3MgbGlrZT8/ICovCiAJCXNlcV9wcmludGYoc2VxLAotCQkJICAgIkxBTi02NCBNQUMgYWRkcmVzcyBAIFs/OiUwMlg6JTAyWDo/XSAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0JCQkgICBzZXJpYWxub1s4XSwgc2VyaWFsbm9bOV0sCi0JCQkgICBzZXJpYWxub1syXSwgc2VyaWFsbm9bM10sCi0JCQkgICBzZXJpYWxub1s0XSwgc2VyaWFsbm9bNV0sIHNlcmlhbG5vWzZdLCBzZXJpYWxub1s3XSk7CisJCQkgICAiTEFOLTY0IE1BQyBhZGRyZXNzIEAgWz86JTAyWDolMDJYOj9dICVwTSIsCisJCQkgICBzZXJpYWxub1s4XSwgc2VyaWFsbm9bOV0sICZzZXJpYWxub1syXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJMk9fU05GT1JNQVRfRERNOgkvKiBJMk8gRERNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA4NzgyOTc4Li5iNjcwZDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTk0LDcgKzk0LDcgQEAKIAogY29uZmlnIE1FTkVMQVVTCiAJYm9vbCAiVGV4YXMgSW5zdHJ1bWVudHMgVFdMOTIzMzAvTWVuZWxhdXMgUE0gY2hpcCIKLQlkZXBlbmRzIG9uIEkyQz15ICYmIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEkyQz15ICYmIEFSQ0hfT01BUDIKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzCiAJICBUV0w5MjMzMC9NZW5lbGF1cyBQb3dlciBNYW5hZ2VtZW50IGNoaXAuIFRoaXMgaW5jbHVkZSB2b2x0YWdlCkBAIC0zNDgsNiArMzQ4LDE2IEBACiAJICByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGRldmljZXMgdG8gZ2V0IGFjY2VzcyB0byB0aGlzIGNoaXAuCiAJICBUaGlzIGNoaXAgZW1iZWRzIHZhcmlvdXMgb3RoZXIgbXVsdGltZWRpYSBmdW50aW9uYWxpdGllcyBhcyB3ZWxsLgogCitjb25maWcgTUZEX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIFRpbWJlcmRhbGUgRlBHQSIKKwlzZWxlY3QgTUZEX0NPUkUKKwlkZXBlbmRzIG9uIFBDSSAmJiBHUElPTElCCisJLS0taGVscC0tLQorCVRoaXMgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciB0aGUgdGltYmVyZGFsZSBGUEdBLiBUaGlzIGRldmljZSBpcyBhCisJbXVsdGlmdW5jdGlvbiBkZXZpY2Ugd2hpY2ggZXhwb3NlcyBudW1lcm91cyBwbGF0Zm9ybSBkZXZpY2VzLgorCisJVGhlIHRpbWJlcmRhbGUgRlBHQSBjYW4gYmUgZm91bmQgb24gdGhlIEludGVsIEF0b20gZGV2ZWxvcG1lbnQgYm9hcmQKKwlmb3IgaW4tdmVoaWNsZSBpbmZvbnRhaW5tZW50LCBjYWxsZWQgUnVzc2VsbHZpbGxlLgogZW5kbWVudQogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IGUwOWViNDguLjc4Mjk1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC01NCw1ICs1NCw2IEBACiBvYmotJChDT05GSUdfQUIzMTAwX0NPUkUpCSs9IGFiMzEwMC1jb3JlLm8KIG9iai0kKENPTkZJR19BQjMxMDBfT1RQKQkrPSBhYjMxMDAtb3RwLm8KIG9iai0kKENPTkZJR19BQjQ1MDBfQ09SRSkJKz0gYWI0NTAwLWNvcmUubworb2JqLSQoQ09ORklHX01GRF9USU1CRVJEQUxFKSAgICArPSB0aW1iZXJkYWxlLm8KIG9iai0kKENPTkZJR19NRkRfODhQTTg2MDcpCSs9IDg4cG04NjA3Lm8KLW9iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDQ0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qCisgKiB0aW1iZXJkYWxlLmMgdGltYmVyZGFsZSBGUEdBIE1GRCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogVGltYmVyZGFsZSBGUEdBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1iX2dwaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1vY29yZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHNjMjAwNy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS94aWxpbnhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21heDczMDEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWMzMzg4MC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjaW5jbHVkZSAidGltYmVyZGFsZS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iZXJkYWxlIgorCitzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgeworCXJlc291cmNlX3NpemVfdAkJY3RsX21hcGJhc2U7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICAgKmN0bF9tZW1iYXNlOworCXN0cnVjdCB7CisJCXUzMiBtYWpvcjsKKwkJdTMyIG1pbm9yOworCQl1MzIgY29uZmlnOworCX0gZnc7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV90c2MyMDA3X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGVsID0gMjAwMywKKwkueF9wbGF0ZV9vaG1zID0gMTAwCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0c2MyMDA3IiwgMHg0OCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfdHNjMjAwN19wbGF0Zm9ybV9kYXRhLAorCQkuaXJxID0gSVJRX1RJTUJFUkRBTEVfVFNDX0lOVAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3Qgb2NvcmVzX2kyY19wbGF0Zm9ybV9kYXRhCit0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhID0geworCS5yZWdzdGVwID0gNCwKKwkuY2xvY2tfa2h6ID0gNjI1MDAsCisJLmRldmljZXMgPSB0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvLAorCS5udW1fZGV2aWNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mbykKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPQ09SRVNPRkZTRVQsCisJCS5lbmQJPSBPQ09SRVNFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgCT0gSVJRX1RJTUJFUkRBTEVfSTJDLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX21heDczMDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYmFzZSA9IDIwMAorfTsKKworY29uc3Qgc3RydWN0IG1jMzM4ODBfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX21jMzM4ODBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYmFzZSA9IDEwMAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3NwaV8xNmJpdF9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMgPSAibWF4NzMwMSIsCisJCS5tYXhfc3BlZWRfaHogPSAyNjAwMCwKKwkJLmNoaXBfc2VsZWN0ID0gMiwKKwkJLm1vZGUgPSBTUElfTU9ERV8wLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX21heDczMDFfcGxhdGZvcm1fZGF0YQorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMzM4ODAiLAorCQkubWF4X3NwZWVkX2h6ID0gNDAwMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLm1vZGUgPSBTUElfTU9ERV8xLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX21jMzM4ODBfcGxhdGZvcm1fZGF0YQorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhID0geworCS5udW1fY2hpcHNlbGVjdCA9IDMsCisJLmxpdHRsZV9lbmRpYW4gPSB0cnVlLAorCS8qIGJpdHMgcGVyIHdvcmQgYW5kIGRldmljZXMgd2lsbCBiZSBmaWxsZWQgaW4gcnVudGltZSBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgSFcgY29uZmlnCisJICovCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0IAk9IFNQSU9GRlNFVCwKKwkJLmVuZAk9IFNQSUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1NQSSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1NQSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBFVEhPRkZTRVQsCisJCS5lbmQJPSBFVEhFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9FVEhTV19JRiwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0VUSFNXX0lGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHRpbWJncGlvX3BsYXRmb3JtX2RhdGEKKwl0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlID0gMCwKKwkubnJfcGlucyA9IEdQSU9fTlJfUElOUywKKwkuaXJxX2Jhc2UgPSAyMDAsCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEdQSU9PRkZTRVQsCisJCS5lbmQJPSBHUElPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfR1BJTywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0dQSU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTUxDT1JFT0ZGU0VULAorCQkuZW5kCT0gTUxDT1JFRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFX0JVRiwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX01MQ09SRV9CVUYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFVBUlRPRkZTRVQsCisJCS5lbmQJPSBVQVJURU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfVUFSVCwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1VBUlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBVQVJUTElURU9GRlNFVCwKKwkJLmVuZAk9IFVBUlRMSVRFRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfVUFSVExJVEUsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9VQVJUTElURSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFJEU09GRlNFVCwKKwkJLmVuZAk9IFJEU0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1JEUywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1JEUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oInRlZjY4NjIiLCAweDYwKQorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygic2FhNzcwNmgiLCAweDFDKQorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHRpbWJfcmFkaW9fcGxhdGZvcm1fZGF0YQorCXRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSA9IHsKKwkuaTJjX2FkYXB0ZXIgPSAwLAorCS50dW5lciA9IHsKKwkJLm1vZHVsZV9uYW1lID0gInRlZjY4NjIiLAorCQkuaW5mbyA9ICZ0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8KKwl9LAorCS5kc3AgPSB7CisJCS5tb2R1bGVfbmFtZSA9ICJzYWE3NzA2aCIsCisJCS5pbmZvID0gJnRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbworCX0KK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBETUFPRkZTRVQsCisJCS5lbmQJPSBETUFFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9ETUEsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzBbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJrczg4NDIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1kbWEiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcxW10gPSB7CisJeworCQkubmFtZSA9ICJ0aW1iLXVhcnQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ1YXJ0bGl0ZSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRsaXRlX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRsaXRlX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLW1sb2dpY29yZSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX21sb2dpY29yZV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9tbG9naWNvcmVfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzJbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzNbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIm9jb3Jlcy1pMmMiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfb2NvcmVzX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9vY29yZXNfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgY29uc3QgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXNbXSA9IHsKKwkvKiBsb2NhdGVkIGluIGJhciAxIGFuZCBiYXIgMiAqLworCXsKKwkJLnN0YXJ0CT0gU0RIQzBPRkZTRVQsCisJCS5lbmQJPSBTREhDMEVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1NESEMsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9TREhDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMVtdID0geworCXsKKwkJLm5hbWUgPSAic2RoY2kiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIyW10gPSB7CisJeworCQkubmFtZSA9ICJzZGhjaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB0aW1iZXJkYWxlX2RldmljZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkLiVkXG4iLCBwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsCisJCXByaXYtPmZ3LmNvbmZpZyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmd192ZXIsIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2OworCWludCBlcnIsIGk7CisJcmVzb3VyY2Vfc2l6ZV90IG1hcGJhc2U7CisJc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllcyA9IE5VTEw7CisJdTggaXBfc2V0dXA7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2VuYWJsZTsKKworCW1hcGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpZiAoIW1hcGJhc2UpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyByZXNvdXJjZVxuIik7CisJCWdvdG8gZXJyX3N0YXJ0OworCX0KKworCS8qIGNyZWF0ZSBhIHJlc291cmNlIGZvciB0aGUgUENJIG1hc3RlciByZWdpc3RlciAqLworCXByaXYtPmN0bF9tYXBiYXNlID0gbWFwYmFzZSArIENISVBDVExPRkZTRVQ7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFLCAidGltYi1jdGwiKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGN0bCBtZW1cbiIpOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KKworCXByaXYtPmN0bF9tZW1iYXNlID0gaW9yZW1hcChwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUpOworCWlmICghcHJpdi0+Y3RsX21lbWJhc2UpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgY3RsIG1lbVxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJLyogcmVhZCB0aGUgSFcgY29uZmlnICovCisJcHJpdi0+ZncubWFqb3IgPSBpb3JlYWQzMihwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfUkVWX01BSk9SKTsKKwlwcml2LT5mdy5taW5vciA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9SRVZfTUlOT1IpOworCXByaXYtPmZ3LmNvbmZpZyA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9IV19DT05GSUcpOworCisJaWYgKHByaXYtPmZ3Lm1ham9yID4gVElNQl9TVVBQT1JURURfTUFKT1IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJUaGUgZHJpdmVyIHN1cHBvcnRzIGFuIG9sZGVyICIKKwkJCSJ2ZXJzaW9uIG9mIHRoZSBGUEdBLCBwbGVhc2UgdXBkYXRlIHRoZSBkcml2ZXIgdG8gIgorCQkJInN1cHBvcnQgJWQuJWRcbiIsIHByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vcik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCWlmIChwcml2LT5mdy5tYWpvciA8IFRJTUJfU1VQUE9SVEVEX01BSk9SIHx8CisJCXByaXYtPmZ3Lm1pbm9yIDwgVElNQl9SRVFVSVJFRF9NSU5PUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZSBGUEdBIGltYWdlIGlzIHRvbyBvbGQgKCVkLiVkKSwgIgorCQkJInBsZWFzZSB1cGdyYWRlIHRoZSBGUEdBIHRvIGF0IGxlYXN0OiAlZC4lZFxuIiwKKwkJCXByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwKKwkJCVRJTUJfU1VQUE9SVEVEX01BSk9SLCBUSU1CX1JFUVVJUkVEX01JTk9SKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwltc2l4X2VudHJpZXMgPSBremFsbG9jKFRJTUJFUkRBTEVfTlJfSVJRUyAqIHNpemVvZigqbXNpeF9lbnRyaWVzKSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2l4X2VudHJpZXMpCisJCWdvdG8gZXJyX2lvcmVtYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgVElNQkVSREFMRV9OUl9JUlFTOyBpKyspCisJCW1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CisKKwllcnIgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIFRJTUJFUkRBTEVfTlJfSVJRUyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJNU0ktWCBpbml0IGZhaWxlZDogJWQsIGV4cGVjdGVkIGVudHJpZXM6ICVkXG4iLAorCQkJZXJyLCBUSU1CRVJEQUxFX05SX0lSUVMpOworCQlnb3RvIGVycl9tc2l4OworCX0KKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NyZWF0ZV9maWxlOworCisJLyogUmVzZXQgYWxsIEZQR0EgUExCIHBlcmlwaGVyYWxzICovCisJaW93cml0ZTMyKDB4MSwgcHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX1NXX1JTVCk7CisKKwkvKiB1cGRhdGUgSVJRIG9mZnNldHMgaW4gSTJDIGJvYXJkIGluZm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvKTsgaSsrKQorCQl0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvW2ldLmlycSA9CisJCQltc2l4X2VudHJpZXNbdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mb1tpXS5pcnFdLnZlY3RvcjsKKworCS8qIFVwZGF0ZSB0aGUgU1BJIGNvbmZpZ3VyYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBIVyAoOCBvciAxNiBiaXQpICovCisJaWYgKHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfQ09ORklHX1NQSV84QklUKSB7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmJpdHNfcGVyX3dvcmQgPSA4OworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5kZXZpY2VzID0KKwkJCXRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mbzsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEubnVtX2RldmljZXMgPQorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV84Yml0X2JvYXJkX2luZm8pOworCX0gZWxzZSB7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmJpdHNfcGVyX3dvcmQgPSAxNjsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuZGV2aWNlcyA9CisJCQl0aW1iZXJkYWxlX3NwaV8xNmJpdF9ib2FyZF9pbmZvOworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5udW1fZGV2aWNlcyA9CisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm8pOworCX0KKworCWlwX3NldHVwID0gcHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSzsKKwlzd2l0Y2ggKGlwX3NldHVwKSB7CisJY2FzZSBUSU1CX0hXX1ZFUjA6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzAsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcwKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjE6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzEsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcxKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjI6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzIsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcyKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjM6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzMsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmczKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmZGV2LT5kZXYsICJVa25vd24gSVAgc2V0dXA6ICVkLiVkLiVkXG4iLAorCQkJcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLCBpcF9zZXR1cCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX21mZDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9tZmQ7CisJfQorCisJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwKKwkJdGltYmVyZGFsZV9jZWxsc19iYXIxLCBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMSksCisJCSZkZXYtPnJlc291cmNlWzFdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX21mZDI7CisJfQorCisJLyogb25seSB2ZXJzaW9uIDAgYW5kIDMgaGF2ZSB0aGUgaU5hbmQgcm91dGVkIHRvIFNESENJICovCisJaWYgKCgocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSykgPT0gVElNQl9IV19WRVIwKSB8fAorCQkoKHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfVkVSX01BU0spID09IFRJTUJfSFdfVkVSMykpIHsKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMSwgdGltYmVyZGFsZV9jZWxsc19iYXIyLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjIpLAorCQkJJmRldi0+cmVzb3VyY2VbMl0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQkJZ290byBlcnJfbWZkMjsKKwkJfQorCX0KKworCWtmcmVlKG1zaXhfZW50cmllcyk7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsCisJCSJGb3VuZCBUaW1iZXJkYWxlIENhcmQuIFJldjogJWQuJWQsIEhXIGNvbmZpZzogMHglMDJ4XG4iLAorCQlwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsIHByaXYtPmZ3LmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKKworZXJyX21mZDI6CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CitlcnJfbWZkOgorCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworZXJyX2NyZWF0ZV9maWxlOgorCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKK2Vycl9tc2l4OgorCWlvdW5tYXAocHJpdi0+Y3RsX21lbWJhc2UpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CitlcnJfcmVxdWVzdDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKK2Vycl9zdGFydDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK2Vycl9lbmFibGU6CisJa2ZyZWUobXNpeF9lbnRyaWVzKTsKKwlrZnJlZShwcml2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHRpbWJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworCisJaW91bm1hcChwcml2LT5jdGxfbWVtYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CisKKwlwY2lfZGlzYWJsZV9tc2l4KGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJa2ZyZWUocHJpdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aW1iZXJkYWxlX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9USU1CLCBQQ0lfREVWSUNFX0lEX1RJTUIpIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdGltYmVyZGFsZV9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRpbWJlcmRhbGVfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHRpbWJlcmRhbGVfcGNpX3RibCwKKwkucHJvYmUgPSB0aW1iX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0aW1iX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1iZXJkYWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdGltYmVyZGFsZV9wY2lfZHJpdmVyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgUENJIGRyaXZlciBmb3IgJXMgZGV2aWNlLlxuIiwKKwkJCXRpbWJlcmRhbGVfcGNpX2RyaXZlci5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiRHJpdmVyIGZvciAlcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC5cbiIsCisJCXRpbWJlcmRhbGVfcGNpX2RyaXZlci5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltYmVyZGFsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0aW1iZXJkYWxlX3BjaV9kcml2ZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRHJpdmVyIGZvciAlcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5yZWdpc3RlcmVkLlxuIiwKKwkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworfQorCittb2R1bGVfaW5pdCh0aW1iZXJkYWxlX2luaXQpOworbW9kdWxlX2V4aXQodGltYmVyZGFsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyA8aW5mb0Btb2NlYW4tbGFicy5jb20+Iik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmggYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyN2ZmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIHRpbWJlcmRhbGUuaCB0aW1iZXJkYWxlIEZQR0EgTUZEIGRyaXZlciBkZWZpbmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFRpbWJlcmRhbGUgRlBHQQorICovCisKKyNpZm5kZWYgTUZEX1RJTUJFUkRBTEVfSAorI2RlZmluZSBNRkRfVElNQkVSREFMRV9ICisKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjEiCisKKy8qIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydCB2ZXJzaW9ucyA+PSAzLjggYW5kIDwgNC4wICAqLworI2RlZmluZSBUSU1CX1NVUFBPUlRFRF9NQUpPUgkzCisKKy8qIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydCBtaW5vciA+PSA4ICovCisjZGVmaW5lIFRJTUJfUkVRVUlSRURfTUlOT1IJOAorCisvKiBSZWdpc3RlcnMgb2YgdGhlIGNvbnRyb2wgYXJlYSAqLworI2RlZmluZSBUSU1CX1JFVl9NQUpPUgkweDAwCisjZGVmaW5lIFRJTUJfUkVWX01JTk9SCTB4MDQKKyNkZWZpbmUgVElNQl9IV19DT05GSUcJMHgwOAorI2RlZmluZSBUSU1CX1NXX1JTVAkweDQwCisKKy8qIGJpdHMgaW4gdGhlIFRJTUJfSFdfQ09ORklHIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJTUJfSFdfQ09ORklHX1NQSV84QklUCTB4ODAKKworI2RlZmluZSBUSU1CX0hXX1ZFUl9NQVNLCTB4MGYKKyNkZWZpbmUgVElNQl9IV19WRVIwCQkweDAwCisjZGVmaW5lIFRJTUJfSFdfVkVSMQkJMHgwMQorI2RlZmluZSBUSU1CX0hXX1ZFUjIJCTB4MDIKKyNkZWZpbmUgVElNQl9IV19WRVIzCQkweDAzCisKKyNkZWZpbmUgT0NPUkVTT0ZGU0VUCTB4MAorI2RlZmluZSBPQ09SRVNFTkQJMHgxZgorCisjZGVmaW5lIFNQSU9GRlNFVAkweDgwCisjZGVmaW5lIFNQSUVORAkJMHhmZgorCisjZGVmaW5lIFVBUlRMSVRFT0ZGU0VUCTB4MTAwCisjZGVmaW5lIFVBUlRMSVRFRU5ECTB4MTBmCisKKyNkZWZpbmUgUkRTT0ZGU0VUCTB4MTgwCisjZGVmaW5lIFJEU0VORAkJMHgxODMKKworI2RlZmluZSBFVEhPRkZTRVQJMHgzMDAKKyNkZWZpbmUgRVRIRU5ECQkweDNmZgorCisjZGVmaW5lIEdQSU9PRkZTRVQJMHg0MDAKKyNkZWZpbmUgR1BJT0VORAkJMHg3ZmYKKworI2RlZmluZSBDSElQQ1RMT0ZGU0VUCTB4ODAwCisjZGVmaW5lIENISVBDVExFTkQJMHg4ZmYKKyNkZWZpbmUgQ0hJUENUTFNJWkUJKENISVBDVExFTkQgLSBDSElQQ1RMT0ZGU0VUKQorCisjZGVmaW5lIElOVENPRkZTRVQJMHhjMDAKKyNkZWZpbmUgSU5UQ0VORAkJMHhmZmYKKyNkZWZpbmUgSU5UQ1NJWkUJKElOVENFTkQgLSBJTlRDT0ZGU0VUKQorCisjZGVmaW5lIE1PU1RPRkZTRVQJMHgxMDAwCisjZGVmaW5lIE1PU1RFTkQJCTB4MTNmZgorCisjZGVmaW5lIFVBUlRPRkZTRVQJMHgxNDAwCisjZGVmaW5lIFVBUlRFTkQJCTB4MTdmZgorCisjZGVmaW5lIFhJSUNPRkZTRVQJMHgxODAwCisjZGVmaW5lIFhJSUNFTkQJCTB4MTlmZgorCisjZGVmaW5lIEkyU09GRlNFVAkweDFDMDAKKyNkZWZpbmUgSTJTRU5ECQkweDFmZmYKKworI2RlZmluZSBMT0dJV09GRlNFVAkweDMwMDAwCisjZGVmaW5lIExPR0lXRU5ECTB4MzdmZmYKKworI2RlZmluZSBNTENPUkVPRkZTRVQJMHg0MDAwMAorI2RlZmluZSBNTENPUkVFTkQJMHg0M2ZmZgorCisjZGVmaW5lIERNQU9GRlNFVAkweDAxMDAwMDAwCisjZGVmaW5lIERNQUVORAkJMHgwMTNmZmZmZgorCisvKiBTREhDMCBpcyBwbGFjZWQgaW4gUENJIGJhciAxICovCisjZGVmaW5lIFNESEMwT0ZGU0VUCTB4MDAKKyNkZWZpbmUgU0RIQzBFTkQJMHhmZgorCisvKiBTREhDMSBpcyBwbGFjZWQgaW4gUENJIGJhciAyICovCisjZGVmaW5lIFNESEMxT0ZGU0VUCTB4MDAKKyNkZWZpbmUgU0RIQzFFTkQJMHhmZgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElNQgkweDEwZWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USU1CCTB4YTEyMworCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0lOSUMJCTAKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfTUxCCQkxCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0dQSU8JCTIKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSTJDCQkzCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1VBUlQJCTQKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfRE1BCQk1CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0kyUwkJNgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9UU0NfSU5UCQk3CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1NESEMJCTgKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfQURWNzE4MAkJOQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9FVEhTV19JRgkJMTAKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfU1BJCQkxMQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9VQVJUTElURQkJMTIKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfTUxDT1JFCQkxMworI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTENPUkVfQlVGCTE0CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1JEUwkJMTUKKyNkZWZpbmUgVElNQkVSREFMRV9OUl9JUlFTCQkxNgorCisjZGVmaW5lIEdQSU9fUElOX0FTQ0IJCTgKKyNkZWZpbmUgR1BJT19QSU5fSU5JQ19SU1QJMTQKKyNkZWZpbmUgR1BJT19QSU5fQlRfUlNUCQkxNQorI2RlZmluZSBHUElPX05SX1BJTlMJCTE2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKaW5kZXggMmE3NjA2NS4uMTlhOTMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCkBAIC0xMTUsNyArMTE1LDggQEAKICNkZWZpbmUgdHdsX2hhc193YXRjaGRvZygpICAgICAgICBmYWxzZQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDX01PRFVMRSkgfHxcCisJZGVmaW5lZChDT05GSUdfU05EX1NPQ19UV0w2MDMwKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU09DX1RXTDYwMzBfTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJdHJ1ZQogI2Vsc2UKICNkZWZpbmUgdHdsX2hhc19jb2RlYygpCWZhbHNlCkBAIC03MTEsOCArNzEyLDE5IEBACiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAJfQogCi0JaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMpIHsKLQkJY2hpbGQgPSBhZGRfY2hpbGQoMSwgInR3bDQwMzBfY29kZWMiLAorCWlmICh0d2xfaGFzX2NvZGVjKCkgJiYgcGRhdGEtPmNvZGVjICYmIHR3bF9jbGFzc19pc180MDMwKCkpIHsKKwkJc3ViX2NoaXBfaWQgPSB0d2xfbWFwW1RXTF9NT0RVTEVfQVVESU9fVk9JQ0VdLnNpZDsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2w0MDMwX2NvZGVjIiwKKwkJCQlwZGF0YS0+Y29kZWMsIHNpemVvZigqcGRhdGEtPmNvZGVjKSwKKwkJCQlmYWxzZSwgMCwgMCk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCX0KKworCS8qIFBob2VuaXgqLworCWlmICh0d2xfaGFzX2NvZGVjKCkgJiYgcGRhdGEtPmNvZGVjICYmIHR3bF9jbGFzc19pc182MDMwKCkpIHsKKwkJc3ViX2NoaXBfaWQgPSB0d2xfbWFwW1RXTF9NT0RVTEVfQVVESU9fVk9JQ0VdLnNpZDsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2w2MDMwX2NvZGVjIiwKIAkJCQlwZGF0YS0+Y29kZWMsIHNpemVvZigqcGRhdGEtPmNvZGVjKSwKIAkJCQlmYWxzZSwgMCwgMCk7CiAJCWlmIChJU19FUlIoY2hpbGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2Z3LWRvd25sb2FkLmMgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvZnctZG93bmxvYWQuYwppbmRleCA1MGQ0MzFlNC4uOWRiYWViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2Z3LWRvd25sb2FkLmMKKysrIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2Z3LWRvd25sb2FkLmMKQEAgLTQzLDE1ICs0MywxNCBAQAogCXN0cnVjdCBpd21jdF9wYXJzZXIgKnBhcnNlciA9ICZwcml2LT5wYXJzZXI7CiAJc3RydWN0IGl3bWN0X2Z3X2hkciAqZndfaGRyID0gJnBhcnNlci0+dmVyc2lvbnM7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICItLT5cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIi0tPlxuIik7CiAKIAlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgImZpbGVfc2l6ZT0lemRcbiIsIGZpbGVfc2l6ZSk7CiAKIAlwYXJzZXItPmZpbGUgPSBmaWxlOwogCXBhcnNlci0+ZmlsZV9zaXplID0gZmlsZV9zaXplOwogCXBhcnNlci0+Y3VyX3BvcyA9IDA7Ci0JcGFyc2VyLT5idWYgPSBOVUxMOwotCisJcGFyc2VyLT5lbnRyeV9wb2ludCA9IDA7CiAJcGFyc2VyLT5idWYgPSBremFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghcGFyc2VyLT5idWYpIHsKIAkJTE9HX0VSUk9SKHByaXYsIEZXX0RPV05MT0FELCAia3phbGxvYyBlcnJvclxuIik7CkBAIC03MCw3ICs2OSw3IEBACiAKIAlwYXJzZXItPmN1cl9wb3MgKz0gc2l6ZW9mKHN0cnVjdCBpd21jdF9md19oZHIpOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiPC0tXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICI8LS1cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTMsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgaXdtY3RfZGJnICpkYmcgPSAmcHJpdi0+ZGJnOwogCXN0cnVjdCBpd21jdF9md19zZWNfaGRyICpzZWNfaGRyOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiLS0+XG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICItLT5cbiIpOwogCiAJd2hpbGUgKHBhcnNlci0+Y3VyX3BvcyArIHNpemVvZihzdHJ1Y3QgaXdtY3RfZndfc2VjX2hkcikKIAkJPD0gcGFyc2VyLT5maWxlX3NpemUpIHsKQEAgLTE1Miw3ICsxNTEsNyBAQAogCQkJImZpbmlzaGVkIHdpdGggc2VjdGlvbiBjdXJfcG9zPSV6ZFxuIiwgcGFyc2VyLT5jdXJfcG9zKTsKIAl9CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICI8LS1cbiIpOworCUxPR19UUkFDRShwcml2LCBJTklULCAiPC0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY3LDcgKzE2Niw3IEBACiAJaW50IHJldCA9IDA7CiAJdTMyIGNtZCA9IDA7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICItLT5cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIi0tPlxuIik7CiAJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJEb3dubG9hZCBhZGRyZXNzIDB4JXggc2l6ZSAweCV6eFxuIiwKIAkJCQlhZGRyLCBzZWNfc2l6ZSk7CiAKQEAgLTIyOSw3ICsyMjgsNyBAQAogCQloZHItPmNtZCA9IGNwdV90b19sZTMyKGNtZCk7CiAJCS8qIHNlbmQgaXQgZG93biAqLwogCQkvKiBUT0RPOiBhZGQgbW9yZSBwcm9wZXIgc2VuZGluZyBhbmQgZXJyb3IgY2hlY2tpbmcgKi8KLQkJcmV0ID0gaXdtY3RfdHgocHJpdiwgMCwgcGFyc2VyLT5idWYsIHRyYW5zX3NpemUpOworCQlyZXQgPSBpd21jdF90eChwcml2LCBwYXJzZXItPmJ1ZiwgdHJhbnNfc2l6ZSk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsCiAJCQkJIml3bWN0X3R4IHJldHVybmVkICVkXG4iLCByZXQpOwpAQCAtMjUxLDcgKzI1MCw3IEBACiAJaWYgKHNlbnQgPCBzZWNfc2l6ZSkKIAkJcmV0ID0gLUVJTlZBTDsKIGV4aXQ6Ci0JTE9HX0lORk9FWChwcml2LCBJTklULCAiPC0tXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICI8LS1cbiIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI2Miw3ICsyNjEsNyBAQAogCWludCByZXQ7CiAJdTMyIGNtZDsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIi0tPlxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiLS0+XG4iKTsKIAogCW1lbXNldChwYXJzZXItPmJ1ZiwgMCwgcGFyc2VyLT5idWZfc2l6ZSk7CiAJY21kID0gSVdNQ19DTURfU0lHTkFUVVJFIDw8IENNRF9IRFJfU0lHTkFUVVJFX1BPUzsKQEAgLTI4MSwxMSArMjgwLDExIEBACiAJTE9HX0hFWERVTVAoRldfRE9XTkxPQUQsIHBhcnNlci0+YnVmLCBzaXplb2YoKmhkcikpOwogCS8qIHNlbmQgaXQgZG93biAqLwogCS8qIFRPRE86IGFkZCBtb3JlIHByb3BlciBzZW5kaW5nIGFuZCBlcnJvciBjaGVja2luZyAqLwotCXJldCA9IGl3bWN0X3R4KHByaXYsIDAsIHBhcnNlci0+YnVmLCBJV01DX1NESU9fQkxLX1NJWkUpOworCXJldCA9IGl3bWN0X3R4KHByaXYsIHBhcnNlci0+YnVmLCBJV01DX1NESU9fQkxLX1NJWkUpOwogCWlmIChyZXQpCiAJCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiaXdtY3RfdHggcmV0dXJuZWQgJWQiLCByZXQpOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiPC0tXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICI8LS1cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTgsOCArMjk3LDE2IEBACiAJX19sZTMyIGFkZHI7CiAJaW50IHJldDsKIAotCS8qIGNsZWFyIHBhcnNlciBzdHJ1Y3QgKi8KLQltZW1zZXQoJnByaXYtPnBhcnNlciwgMCwgc2l6ZW9mKHN0cnVjdCBpd21jdF9wYXJzZXIpKTsKKworCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiYmFya2VyIGRvd25sb2FkIHJlcXVlc3QgMHgleCBpczpcbiIsCisJCQlwcml2LT5iYXJrZXIpOworCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiKioqKioqKiAgVG9wIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKKwkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX1RPUF9NU0spID8gIndhcyIgOiAibm90Iik7CisJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICIqKioqKioqICBHUFMgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAorCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfR1BTX01TSykgPyAid2FzIiA6ICJub3QiKTsKKwlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIioqKioqKiogIEJUIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKKwkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0JUX01TSykgPyAid2FzIiA6ICJub3QiKTsKKwogCiAJLyogZ2V0IHRoZSBmaXJtd2FyZSAqLwogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnJhdywgZndfbmFtZSwgJnByaXYtPmZ1bmMtPmRldik7CkBAIC0zMTcsNiArMzI0LDcgQEAKIAogCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiUmVhZCBmaXJtd2FyZSAnJXMnXG4iLCBmd19uYW1lKTsKIAorCS8qIGNsZWFyIHBhcnNlciBzdHJ1Y3QgKi8KIAlyZXQgPSBpd21jdF9md19wYXJzZXJfaW5pdChwcml2LCByYXctPmRhdGEsIHJhdy0+c2l6ZSwgcHJpdi0+dHJhbnNfbGVuKTsKIAlpZiAocmV0IDwgMCkgewogCQlMT0dfRVJST1IocHJpdiwgRldfRE9XTkxPQUQsCkBAIC0zMjQsNyArMzMyLDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCS8qIGNoZWNrc3VtICAqLwogCWlmICghaXdtY3RfY2hlY2tzdW0ocHJpdikpIHsKIAkJTE9HX0VSUk9SKHByaXYsIEZXX0RPV05MT0FELCAiY2hlY2tzdW0gZXJyb3JcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMzMzLDIzICszNDAsMTggQEAKIAogCS8qIGRvd25sb2FkIGZpcm13YXJlIHRvIGRldmljZSAqLwogCXdoaWxlIChpd21jdF9wYXJzZV9uZXh0X3NlY3Rpb24ocHJpdiwgJnBkYXRhLCAmbGVuLCAmYWRkcikpIHsKLQkJaWYgKGl3bWN0X2Rvd25sb2FkX3NlY3Rpb24ocHJpdiwgcGRhdGEsIGxlbiwgYWRkcikpIHsKKwkJcmV0ID0gaXdtY3RfZG93bmxvYWRfc2VjdGlvbihwcml2LCBwZGF0YSwgbGVuLCBhZGRyKTsKKwkJaWYgKHJldCkgewogCQkJTE9HX0VSUk9SKHByaXYsIEZXX0RPV05MT0FELAogCQkJCSAgIiVzIGRvd25sb2FkIHNlY3Rpb24gZmFpbGVkXG4iLCBmd19uYW1lKTsKLQkJCXJldCA9IC1FSU87CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKLQlpd21jdF9raWNrX2Z3KHByaXYsICEhKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfSlVNUF9NU0spKTsKKwlyZXQgPSBpd21jdF9raWNrX2Z3KHByaXYsICEhKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfSlVNUF9NU0spKTsKIAogZXhpdDoKIAlrZnJlZShwcml2LT5wYXJzZXIuYnVmKTsKLQotCWlmIChyYXcpCi0JCXJlbGVhc2VfZmlybXdhcmUocmF3KTsKLQotCXJhdyA9IE5VTEw7Ci0KKwlyZWxlYXNlX2Zpcm13YXJlKHJhdyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9pd21jMzIwMHRvcC5oIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2l3bWMzMjAwdG9wLmgKaW5kZXggNDNiZDUxMC4uNzQwZmYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2l3bWMzMjAwdG9wLmgKKysrIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2l3bWMzMjAwdG9wLmgKQEAgLTE5Niw5ICsxOTYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcmVhZF9yZXFfbGlzdDsKIH07CiAKLWV4dGVybiBpbnQgaXdtY3RfdHgoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCQl2b2lkICpzcmMsIGludCBjb3VudCk7Ci0KK2V4dGVybiBpbnQgaXdtY3RfdHgoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHZvaWQgKnNyYywgaW50IGNvdW50KTsKIGV4dGVybiBpbnQgaXdtY3RfZndfbG9hZChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdik7CiAKIGV4dGVybiB2b2lkIGl3bWN0X2RiZ19pbml0X3BhcmFtcyhzdHJ1Y3QgaXdtY3RfcHJpdiAqZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9sb2cuaCBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9sb2cuaAppbmRleCBhYmE4MTIxLi40NDM0YmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbG9nLmgKKysrIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2xvZy5oCkBAIC0zNywxMyArMzcsMjYgQEAKICNkZWZpbmUgTE9HX1NFVl9JTkZPCQkJMwogI2RlZmluZSBMT0dfU0VWX0lORk9FWAkJCTQKIAotI2RlZmluZSBMT0dfU0VWX0ZJTFRFUl9BTEwJCVwKLQkoQklUKExPR19TRVZfQ1JJVElDQUwpIHwJXAotCSBCSVQoTE9HX1NFVl9FUlJPUikgICAgfAlcCi0JIEJJVChMT0dfU0VWX1dBUk5JTkcpICB8IAlcCi0JIEJJVChMT0dfU0VWX0lORk8pICAgICB8CVwKKy8qIExvZyBsZXZlbHMgbm90IGRlZmluZWQgZm9yIEZXICovCisjZGVmaW5lIExPR19TRVZfVFJBQ0UJCQk1CisjZGVmaW5lIExPR19TRVZfRFVNUAkJCTYKKworI2RlZmluZSBMT0dfU0VWX0ZXX0ZJTFRFUl9BTEwJCVwKKwkoQklUKExPR19TRVZfQ1JJVElDQUwpCXwJXAorCSBCSVQoTE9HX1NFVl9FUlJPUikJfAlcCisJIEJJVChMT0dfU0VWX1dBUk5JTkcpCXwgCVwKKwkgQklUKExPR19TRVZfSU5GTykJfAlcCiAJIEJJVChMT0dfU0VWX0lORk9FWCkpCiAKKyNkZWZpbmUgTE9HX1NFVl9GSUxURVJfQUxMCQlcCisJKEJJVChMT0dfU0VWX0NSSVRJQ0FMKQl8CVwKKwkgQklUKExPR19TRVZfRVJST1IpCXwJXAorCSBCSVQoTE9HX1NFVl9XQVJOSU5HKQl8IAlcCisJIEJJVChMT0dfU0VWX0lORk8pCXwJXAorCSBCSVQoTE9HX1NFVl9JTkZPRVgpCXwJXAorCSBCSVQoTE9HX1NFVl9UUkFDRSkJfAlcCisJIEJJVChMT0dfU0VWX0RVTVApKQorCiAvKiBsb2cgc291cmNlICovCiAjZGVmaW5lIExPR19TUkNfSU5JVAkJCTAKICNkZWZpbmUgTE9HX1NSQ19ERUJVR0ZTCQkJMQpAQCAtMTA0LDE2ICsxMTcsMTYgQEAKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sICMjYXJncyk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBMT0dfSU5GT0VYKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQkJCQlcCisjZGVmaW5lIExPR19UUkFDRShwcml2LCBzcmMsIGZtdCwgYXJncy4uLikJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoaXdtY3RfbG9nZGVmc1tMT0dfU1JDXyAjIyBzcmNdICYgQklUKExPR19TRVZfSU5GT0VYKSkJXAorCWlmIChpd21jdF9sb2dkZWZzW0xPR19TUkNfICMjIHNyY10gJiBCSVQoTE9HX1NFVl9UUkFDRSkpCVwKIAkJZGV2X2RiZyhwcml2MmRldihwcml2KSwgIiVzICVkOiAiIGZtdCwJCQlcCiAJCQkgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpOwkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgTE9HX0hFWERVTVAoc3JjLCBwdHIsIGxlbikJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKGl3bWN0X2xvZ2RlZnNbTE9HX1NSQ18gIyMgc3JjXSAmIEJJVChMT0dfU0VWX0lORk9FWCkpCVwKKwlpZiAoaXdtY3RfbG9nZGVmc1tMT0dfU1JDXyAjIyBzcmNdICYgQklUKExPR19TRVZfRFVNUCkpCVwKIAkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX05PTkUsCVwKIAkJCQkxNiwgMSwgcHRyLCBsZW4sIGZhbHNlKTsJCVwKIH0gd2hpbGUgKDApCkBAIC0xNDIsNyArMTU1LDcgQEAKICNkZWZpbmUgTE9HX0VSUk9SKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQogI2RlZmluZSBMT0dfV0FSTklORyhwcml2LCBzcmMsIGZtdCwgYXJncy4uLikKICNkZWZpbmUgTE9HX0lORk8ocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIExPR19JTkZPRVgocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIExPR19UUkFDRShwcml2LCBzcmMsIGZtdCwgYXJncy4uLikKICNkZWZpbmUgTE9HX0hFWERVTVAoc3JjLCBwdHIsIGxlbikKIAogc3RhdGljIGlubGluZSB2b2lkIGl3bWN0X2xvZ190b3BfbWVzc2FnZShzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCmluZGV4IGZhZmNhYTQuLmRkMGEzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYwpAQCAtNDksNiArNDksMjAgQEAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0NPUFlSSUdIVCk7CiBNT0RVTEVfRklSTVdBUkUoRldfTkFNRShGV19BUElfVkVSKSk7CiAKKworc3RhdGljIGlubGluZSBpbnQgX19pd21jdF90eChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgdm9pZCAqc3JjLCBpbnQgY291bnQpCit7CisJcmV0dXJuIHNkaW9fbWVtY3B5X3RvaW8ocHJpdi0+ZnVuYywgSVdNQ19TRElPX0RBVEFfQUREUiwgc3JjLCBjb3VudCk7CisKK30KK2ludCBpd21jdF90eChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgdm9pZCAqc3JjLCBpbnQgY291bnQpCit7CisJaW50IHJldDsKKwlzZGlvX2NsYWltX2hvc3QocHJpdi0+ZnVuYyk7CisJcmV0ID0gIF9faXdtY3RfdHgocHJpdiwgc3JjLCBjb3VudCk7CisJc2Rpb19yZWxlYXNlX2hvc3QocHJpdi0+ZnVuYyk7CisJcmV0dXJuIHJldDsKK30KIC8qCiAgKiBUaGlzIHdvcmtlcnMgbWFpbiB0YXNrIGlzIHRvIHdhaXQgZm9yIE9QX09QUl9BTElWRQogICogZnJvbSBUT1AgRlcgdW50aWwgQUxJVkVfTVNHX1RJTU9VVCB0aW1lb3V0IGlzIGVsYXBzZWQuCkBAIC02Niw3ICs4MCw3IEBACiAKIAlyZXQgPSBidXNfcmVzY2FuX2RldmljZXMocHJpdi0+ZnVuYy0+ZGV2LmJ1cyk7CiAJaWYgKHJldCA8IDApCi0JCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiYnVzX3Jlc2Nhbl9kZXZpY2VzIEZBSUxFRCEhIVxuIik7CisJCUxPR19JTkZPKHByaXYsIElOSVQsICJidXNfcmVzY2FuX2RldmljZXMgRkFJTEVEISEhXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgb3BfdG9wX21lc3NhZ2Uoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHN0cnVjdCB0b3BfbXNnICptc2cpCkBAIC0xMzcsNyArMTUxLDcgQEAKIAlpbnQgcmV0OwogCXU4ICpidWY7CiAKLQlMT0dfSU5GT0VYKHByaXYsIEZXX01TRywgIlNlbmRpbmcgaGNtZDpcbiIpOworCUxPR19UUkFDRShwcml2LCBGV19NU0csICJTZW5kaW5nIGhjbWQ6XG4iKTsKIAogCS8qIGFkZCBwYWRkaW5nIHRvIDI1NiBmb3IgSVdNQyAqLwogCSgoc3RydWN0IHRvcF9tc2cgKiljbWQpLT5oZHIuZmxhZ3MgfD0gQ01EX0ZMQUdfUEFERElOR18yNTY7CkBAIC0xNTgsMjcgKzE3MiwxMiBAQAogCX0KIAogCW1lbWNweShidWYsIGNtZCwgbGVuKTsKLQotCXNkaW9fY2xhaW1faG9zdChwcml2LT5mdW5jKTsKLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHByaXYtPmZ1bmMsIElXTUNfU0RJT19EQVRBX0FERFIsIGJ1ZiwKLQkJCSAgICAgICBGV19IQ01EX0JMT0NLX1NJWkUpOwotCXNkaW9fcmVsZWFzZV9ob3N0KHByaXYtPmZ1bmMpOworCXJldCA9IGl3bWN0X3R4KHByaXYsIGJ1ZiwgRldfSENNRF9CTE9DS19TSVpFKTsKIAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bWN0X3R4KHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQl2b2lkICpzcmMsIGludCBjb3VudCkKLXsKLQlpbnQgcmV0OwotCi0Jc2Rpb19jbGFpbV9ob3N0KHByaXYtPmZ1bmMpOwotCXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocHJpdi0+ZnVuYywgYWRkciwgc3JjLCBjb3VudCk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QocHJpdi0+ZnVuYyk7Ci0KLQlyZXR1cm4gcmV0OwotfQogCiBzdGF0aWMgdm9pZCBpd21jdF9pcnFfcmVhZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIHsKQEAgLTE5Miw3ICsxOTEsNyBAQAogCiAJcHJpdiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IGl3bWN0X3ByaXYsIGlzcl93b3JrZXIpOwogCi0JTE9HX0lORk8ocHJpdiwgSVJRLCAiZW50ZXIgaXdtY3RfaXJxX3JlYWRfd29ya2VyICVwXG4iLCB3cyk7CisJTE9HX1RSQUNFKHByaXYsIElSUSwgImVudGVyIGl3bWN0X2lycV9yZWFkX3dvcmtlciAlcFxuIiwgd3MpOwogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhbmRzaGFrZSB3aXRoIGRldmljZSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCXNkaW9fY2xhaW1faG9zdChwcml2LT5mdW5jKTsKQEAgLTI3Myw4ICsyNzIsNyBAQAogCiAJCWlmIChiYXJrZXIgJiBCQVJLRVJfRE5MT0FEX1NZTkNfTVNLKSB7CiAJCQkvKiBTZW5kIHRoZSBzYW1lIGJhcmtlciBiYWNrICovCi0JCQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHByaXYtPmZ1bmMsIElXTUNfU0RJT19EQVRBX0FERFIsCi0JCQkJCSAgICAgICBidWYsIGlvc2l6ZSk7CisJCQlyZXQgPSBfX2l3bWN0X3R4KHByaXYsIGJ1ZiwgaW9zaXplKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlMT0dfRVJST1IocHJpdiwgSVJRLAogCQkJCQkgImVycm9yICVkIGVjaG9pbmcgYmFya2VyXG4iLCByZXQpOwpAQCAtMjkyLDE1ICsyOTAsNiBAQAogCiAJc2Rpb19yZWxlYXNlX2hvc3QocHJpdi0+ZnVuYyk7CiAKLQotCUxPR19JTkZPKHByaXYsIElSUSwgImJhcmtlciBkb3dubG9hZCByZXF1ZXN0IDB4JXggaXM6XG4iLCBwcml2LT5iYXJrZXIpOwotCUxPR19JTkZPKHByaXYsIElSUSwgIioqKioqKiogIFRvcCBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCi0JCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9UT1BfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOwotCUxPR19JTkZPKHByaXYsIElSUSwgIioqKioqKiogIEdQUyBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCi0JCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9HUFNfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOwotCUxPR19JTkZPKHByaXYsIElSUSwgIioqKioqKiogIEJUIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKLQkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0JUX01TSykgPyAid2FzIiA6ICJub3QiKTsKLQogCWlmIChwcml2LT5kYmcuZndfZG93bmxvYWQpCiAJCWl3bWN0X2Z3X2xvYWQocHJpdik7CiAJZWxzZQpAQCAtMzEyLDcgKzMwMSw3IEBACiAJc2Rpb19yZWxlYXNlX2hvc3QocHJpdi0+ZnVuYyk7CiBleGl0OgogCWtmcmVlKGJ1Zik7Ci0JTE9HX0lORk8ocHJpdiwgSVJRLCAiZXhpdCBpd21jdF9pcnFfcmVhZF93b3JrZXJcbiIpOworCUxPR19UUkFDRShwcml2LCBJUlEsICJleGl0IGl3bWN0X2lycV9yZWFkX3dvcmtlclxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bWN0X2lycShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQpAQCAtMzI1LDEyICszMTQsMTIgQEAKIAogCXByaXYgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwogCi0JTE9HX0lORk8ocHJpdiwgSVJRLCAiZW50ZXIgaXdtY3RfaXJxXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgSVJRLCAiZW50ZXIgaXdtY3RfaXJxXG4iKTsKIAogCS8qIHJlYWQgdGhlIGZ1bmN0aW9uJ3Mgc3RhdHVzIHJlZ2lzdGVyICovCiAJdmFsID0gc2Rpb19yZWFkYihmdW5jLCBJV01DX1NESU9fSU5UUl9TVEFUVVNfQUREUiwgJnJldCk7CiAKLQlMT0dfSU5GTyhwcml2LCBJUlEsICJpaXIgdmFsdWUgPSAlZCwgcmV0PSVkXG4iLCB2YWwsIHJldCk7CisJTE9HX1RSQUNFKHByaXYsIElSUSwgImlpciB2YWx1ZSA9ICVkLCByZXQ9JWRcbiIsIHZhbCwgcmV0KTsKIAogCWlmICghdmFsKSB7CiAJCUxPR19FUlJPUihwcml2LCBJUlEsICJpaXIgPSAwLCBleGl0aW5nIElTUlxuIik7CkBAIC0zNzIsNyArMzYxLDcgQEAKIAogCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5pc3Jfd29ya2VyKTsKIAotCUxPR19JTkZPKHByaXYsIElSUSwgImV4aXQgaXdtY3RfaXJxXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgSVJRLCAiZXhpdCBpd21jdF9pcnFcbiIpOwogCiAJcmV0dXJuOwogCkBAIC02NjAsNyArNjQ5LDcgQEAKIAogCS8qIERlZmF1bHQgbG9nIGZpbHRlciBzZXR0aW5ncyAqLwogCWl3bWN0X2xvZ19zZXRfZmlsdGVyKExPR19TUkNfQUxMLCBMT0dfU0VWX0ZJTFRFUl9SVU5USU1FKTsKLQlpd21jdF9sb2dfc2V0X2ZpbHRlcihMT0dfU1JDX0ZXX01TRywgTE9HX1NFVl9GSUxURVJfQUxMKTsKKwlpd21jdF9sb2dfc2V0X2ZpbHRlcihMT0dfU1JDX0ZXX01TRywgTE9HX1NFVl9GV19GSUxURVJfQUxMKTsKIAlpd21jdF9sb2dfc2V0X2Z3X2ZpbHRlcihMT0dfU1JDX0FMTCwgRldfTE9HX1NFVl9GSUxURVJfUlVOVElNRSk7CiAKIAlyYyA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZpd21jdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCmluZGV4IGM1YTdhODUuLjM4MWZlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKQEAgLTE1NCw5ICsxNTQsOCBAQAogCiAJCWlmIChtcS0+Ym91bmNlX2J1ZikgewogCQkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChtcS0+cXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKLQkJCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKLQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CisJCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1xLT5xdWV1ZSwgYm91bmNlc3ogLyA1MTIpOwogCQkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUobXEtPnF1ZXVlLCBib3VuY2Vzeik7CiAKIAkJCW1xLT5zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksCkBAIC0xODAsMTAgKzE3OSw5IEBACiAKIAlpZiAoIW1xLT5ib3VuY2VfYnVmKSB7CiAJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobXEtPnF1ZXVlLCBsaW1pdCk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtcS0+cXVldWUsCisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtcS0+cXVldWUsCiAJCQltaW4oaG9zdC0+bWF4X2Jsa19jb3VudCwgaG9zdC0+bWF4X3JlcV9zaXplIC8gNTEyKSk7Ci0JCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhtcS0+cXVldWUsIGhvc3QtPm1heF9waHlzX3NlZ3MpOwotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X2h3X3NlZ3MpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X2h3X3NlZ3MpOwogCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShtcS0+cXVldWUsIGhvc3QtPm1heF9zZWdfc2l6ZSk7CiAKIAkJbXEtPnNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jIGIvZHJpdmVycy9tbWMvY2FyZC9zZGlvX3VhcnQuYwppbmRleCBmNTM3NTU1Li4zZmFiNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvc2Rpb191YXJ0LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CkBAIC00NywxOSArNDgsOSBAQAogI2RlZmluZSBVQVJUX05SCQk4CS8qIE51bWJlciBvZiBVQVJUcyB0aGlzIGRyaXZlciBjYW4gaGFuZGxlICovCiAKIAotI2RlZmluZSBVQVJUX1hNSVRfU0laRQlQQUdFX1NJWkUKKyNkZWZpbmUgRklGT19TSVpFCVBBR0VfU0laRQogI2RlZmluZSBXQUtFVVBfQ0hBUlMJMjU2CiAKLSNkZWZpbmUgY2lyY19lbXB0eShjaXJjKQkoKGNpcmMpLT5oZWFkID09IChjaXJjKS0+dGFpbCkKLSNkZWZpbmUgY2lyY19jbGVhcihjaXJjKQkoKGNpcmMpLT5oZWFkID0gKGNpcmMpLT50YWlsID0gMCkKLQotI2RlZmluZSBjaXJjX2NoYXJzX3BlbmRpbmcoY2lyYykgXAotCQkoQ0lSQ19DTlQoKGNpcmMpLT5oZWFkLCAoY2lyYyktPnRhaWwsIFVBUlRfWE1JVF9TSVpFKSkKLQotI2RlZmluZSBjaXJjX2NoYXJzX2ZyZWUoY2lyYykgXAotCQkoQ0lSQ19TUEFDRSgoY2lyYyktPmhlYWQsIChjaXJjKS0+dGFpbCwgVUFSVF9YTUlUX1NJWkUpKQotCi0KIHN0cnVjdCB1YXJ0X2ljb3VudCB7CiAJX191MzIJY3RzOwogCV9fdTMyCWRzcjsKQEAgLTgyLDcgKzczLDcgQEAKIAlzdHJ1Y3QgbXV0ZXgJCWZ1bmNfbG9jazsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKmluX3NkaW9fdWFydF9pcnE7CiAJdW5zaWduZWQgaW50CQlyZWdzX29mZnNldDsKLQlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7CisJc3RydWN0IGtmaWZvCQl4bWl0X2ZpZm87CiAJc3BpbmxvY2tfdAkJd3JpdGVfbG9jazsKIAlzdHJ1Y3QgdWFydF9pY291bnQJaWNvdW50OwogCXVuc2lnbmVkIGludAkJdWFydGNsazsKQEAgLTEwNSw2ICs5Niw4IEBACiAJa3JlZl9pbml0KCZwb3J0LT5rcmVmKTsKIAltdXRleF9pbml0KCZwb3J0LT5mdW5jX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwb3J0LT53cml0ZV9sb2NrKTsKKwlpZiAoa2ZpZm9fYWxsb2MoJnBvcnQtPnhtaXRfZmlmbywgRklGT19TSVpFLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJnNkaW9fdWFydF90YWJsZV9sb2NrKTsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBVQVJUX05SOyBpbmRleCsrKSB7CkBAIC0xNDAsNiArMTMzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQgPQogCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNkaW9fdWFydF9wb3J0LCBrcmVmKTsKKwlrZmlmb19mcmVlKCZwb3J0LT54bWl0X2ZpZm8pOwogCWtmcmVlKHBvcnQpOwogfQogCkBAIC00NTYsOSArNDUwLDExIEBACiAKIHN0YXRpYyB2b2lkIHNkaW9fdWFydF90cmFuc21pdF9jaGFycyhzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnhtaXQ7CisJc3RydWN0IGtmaWZvICp4bWl0ID0gJnBvcnQtPnhtaXRfZmlmbzsKIAlpbnQgY291bnQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1OCBpb2J1ZlsxNl07CisJaW50IGxlbjsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKIAkJc2Rpb19vdXQocG9ydCwgVUFSVF9UWCwgcG9ydC0+eF9jaGFyKTsKQEAgLTQ2OSwyNyArNDY1LDI1IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAotCWlmICh0dHkgPT0gTlVMTCB8fCBjaXJjX2VtcHR5KHhtaXQpIHx8CisJaWYgKHR0eSA9PSBOVUxMIHx8ICFrZmlmb19sZW4oeG1pdCkgfHwKIAkJCQl0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKSB7CiAJCXNkaW9fdWFydF9zdG9wX3R4KHBvcnQpOwogCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJcmV0dXJuOwogCX0KIAotCWNvdW50ID0gMTY7Ci0JZG8gewotCQlzZGlvX291dChwb3J0LCBVQVJUX1RYLCB4bWl0LT5idWZbeG1pdC0+dGFpbF0pOwotCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCWxlbiA9IGtmaWZvX291dF9sb2NrZWQoeG1pdCwgaW9idWYsIDE2LCAmcG9ydC0+d3JpdGVfbG9jayk7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGVuOyBjb3VudCsrKSB7CisJCXNkaW9fb3V0KHBvcnQsIFVBUlRfVFgsIGlvYnVmW2NvdW50XSk7CiAJCXBvcnQtPmljb3VudC50eCsrOwotCQlpZiAoY2lyY19lbXB0eSh4bWl0KSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKKwl9CiAKLQlpZiAoY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCWxlbiA9IGtmaWZvX2xlbih4bWl0KTsKKwlpZiAobGVuIDwgV0FLRVVQX0NIQVJTKSB7CiAJCXR0eV93YWtldXAodHR5KTsKLQotCWlmIChjaXJjX2VtcHR5KHhtaXQpKQotCQlzZGlvX3VhcnRfc3RvcF90eChwb3J0KTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJc2Rpb191YXJ0X3N0b3BfdHgocG9ydCk7CisJfQogCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCkBAIC02MzIsNyArNjI2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQgPQogCQkJY29udGFpbmVyX29mKHRwb3J0LCBzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQsIHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTY0MSwyMiArNjM0LDE3IEBACiAJICovCiAJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAotCS8qIEluaXRpYWxpc2UgYW5kIGFsbG9jYXRlIHRoZSB0cmFuc21pdCBidWZmZXIuICovCi0JcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXBvcnQtPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKilwYWdlOwotCWNpcmNfY2xlYXIoJnBvcnQtPnhtaXQpOworCWtmaWZvX3Jlc2V0KCZwb3J0LT54bWl0X2ZpZm8pOwogCiAJcmV0ID0gc2Rpb191YXJ0X2NsYWltX2Z1bmMocG9ydCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIxOworCQlyZXR1cm4gcmV0OwogCXJldCA9IHNkaW9fZW5hYmxlX2Z1bmMocG9ydC0+ZnVuYyk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAJcmV0ID0gc2Rpb19jbGFpbV9pcnEocG9ydC0+ZnVuYywgc2Rpb191YXJ0X2lycSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIzOworCQlnb3RvIGVycjI7CiAKIAkvKgogCSAqIENsZWFyIHRoZSBGSUZPIGJ1ZmZlcnMgYW5kIGRpc2FibGUgdGhlbS4KQEAgLTcwMCwxMiArNjg4LDEwIEBACiAJc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKIAlyZXR1cm4gMDsKIAotZXJyMzoKLQlzZGlvX2Rpc2FibGVfZnVuYyhwb3J0LT5mdW5jKTsKIGVycjI6Ci0Jc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKKwlzZGlvX2Rpc2FibGVfZnVuYyhwb3J0LT5mdW5jKTsKIGVycjE6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBvcnQtPnhtaXQuYnVmKTsKKwlzZGlvX3VhcnRfcmVsZWFzZV9mdW5jKHBvcnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyNyw3ICs3MTMsNyBAQAogCiAJcmV0ID0gc2Rpb191YXJ0X2NsYWltX2Z1bmMocG9ydCk7CiAJaWYgKHJldCkKLQkJZ290byBza2lwOworCQlyZXR1cm47CiAKIAlzZGlvX3VhcnRfc3RvcF9yeChwb3J0KTsKIApAQCAtNzQ5LDEwICs3MzUsNiBAQAogCXNkaW9fZGlzYWJsZV9mdW5jKHBvcnQtPmZ1bmMpOwogCiAJc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKLQotc2tpcDoKLQkvKiBGcmVlIHRoZSB0cmFuc21pdCBidWZmZXIgcGFnZS4gKi8KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG9ydC0+eG1pdC5idWYpOwogfQogCiAvKioKQEAgLTgyMiwyNyArODA0LDEyIEBACiAJCQkgICBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgY2lyY19idWYgKmNpcmMgPSAmcG9ydC0+eG1pdDsKLQlpbnQgYywgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaWYgKCFwb3J0LT5mdW5jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNwaW5fbG9jaygmcG9ydC0+d3JpdGVfbG9jayk7Ci0Jd2hpbGUgKDEpIHsKLQkJYyA9IENJUkNfU1BBQ0VfVE9fRU5EKGNpcmMtPmhlYWQsIGNpcmMtPnRhaWwsIFVBUlRfWE1JVF9TSVpFKTsKLQkJaWYgKGNvdW50IDwgYykKLQkJCWMgPSBjb3VudDsKLQkJaWYgKGMgPD0gMCkKLQkJCWJyZWFrOwotCQltZW1jcHkoY2lyYy0+YnVmICsgY2lyYy0+aGVhZCwgYnVmLCBjKTsKLQkJY2lyYy0+aGVhZCA9IChjaXJjLT5oZWFkICsgYykgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKLQkJYnVmICs9IGM7Ci0JCWNvdW50IC09IGM7Ci0JCXJldCArPSBjOwotCX0KLQlzcGluX3VubG9jaygmcG9ydC0+d3JpdGVfbG9jayk7Ci0KKwlyZXQgPSBrZmlmb19pbl9sb2NrZWQoJnBvcnQtPnhtaXRfZmlmbywgYnVmLCBjb3VudCwgJnBvcnQtPndyaXRlX2xvY2spOwogCWlmICghKHBvcnQtPmllciAmIFVBUlRfSUVSX1RIUkkpKSB7CiAJCWludCBlcnIgPSBzZGlvX3VhcnRfY2xhaW1fZnVuYyhwb3J0KTsKIAkJaWYgKCFlcnIpIHsKQEAgLTg1OSwxMyArODI2LDEzIEBACiBzdGF0aWMgaW50IHNkaW9fdWFydF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gcG9ydCA/IGNpcmNfY2hhcnNfZnJlZSgmcG9ydC0+eG1pdCkgOiAwOworCXJldHVybiBGSUZPX1NJWkUgLSBrZmlmb19sZW4oJnBvcnQtPnhtaXRfZmlmbyk7CiB9CiAKIHN0YXRpYyBpbnQgc2Rpb191YXJ0X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JcmV0dXJuIHBvcnQgPyBjaXJjX2NoYXJzX3BlbmRpbmcoJnBvcnQtPnhtaXQpIDogMDsKKwlyZXR1cm4ga2ZpZm9fbGVuKCZwb3J0LT54bWl0X2ZpZm8pOwogfQogCiBzdGF0aWMgdm9pZCBzZGlvX3VhcnRfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYwppbmRleCBkM2Y1NTYxLi41N2IyMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYwpAQCAtNjUwLDExICs2NTAsMTEgQEAKIAkJCQlmbGFncyA9IERETUFfRkxBR1NfSUU7CiAKIAkJCWlmIChob3N0LT5mbGFncyAmIEhPU1RfRl9YTUlUKSB7Ci0JCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2VfZmxhZ3MoY2hhbm5lbCwKLQkJCQkJKHZvaWQgKilzZ192aXJ0KHNnKSwgbGVuLCBmbGFncyk7CisJCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbm5lbCwKKwkJCQkJc2dfcGh5cyhzZyksIGxlbiwgZmxhZ3MpOwogCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2hhbm5lbCwKLQkJCQkJKHZvaWQgKilzZ192aXJ0KHNnKSwgbGVuLCBmbGFncyk7CisJCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5uZWwsCisJCQkJCXNnX3BoeXMoc2cpLCBsZW4sIGZsYWdzKTsKIAkJCX0KIAogCQkJaWYgKCFyZXQpCkBAIC0xMDE3LDYgKzEwMTcsMTAgQEAKIAl9IGVsc2UKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKIAorCS8qIHBsYXRmb3JtIG1heSBub3QgYmUgYWJsZSB0byB1c2UgYWxsIGFkdmVydGlzZWQgY2FwcyAqLworCWlmIChob3N0LT5wbGF0ZGF0YSkKKwkJbW1jLT5jYXBzICY9IH4oaG9zdC0+cGxhdGRhdGEtPm1hc2tfaG9zdF9jYXBzKTsKKwogCXRhc2tsZXRfaW5pdCgmaG9zdC0+ZGF0YV90YXNrLCBhdTF4bW1jX3Rhc2tsZXRfZGF0YSwKIAkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDkwZDE2OGEuLjg0YzEwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0yLDYgKzIsNyBAQAogICogIGxpbnV4L2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIC0gQVJNIFByaW1lQ2VsbCBNTUNJIFBMMTgwLzEgZHJpdmVyCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zLCBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFNULUVyaWNzc29uIEFCLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzQsOSArMzUsNiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtbWNpLXBsMTh4IgogCi0jZGVmaW5lIERCRyhob3N0LGZtdCxhcmdzLi4uKQlcCi0JcHJfZGVidWcoIiVzOiAlczogIiBmbXQsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBfX2Z1bmNfXyAsIGFyZ3MpCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm1heCA9IDUxNTYzMzsKIAogLyoKQEAgLTEwNSw4ICsxMDMsOCBAQAogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgYmxrc3pfYml0czsKIAotCURCRyhob3N0LCAiYmxrc3ogJTA0eCBibGtzICUwNHggZmxhZ3MgJTA4eFxuIiwKLQkgICAgZGF0YS0+Ymxrc3osIGRhdGEtPmJsb2NrcywgZGF0YS0+ZmxhZ3MpOworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiYmxrc3ogJTA0eCBibGtzICUwNHggZmxhZ3MgJTA4eFxuIiwKKwkJZGF0YS0+Ymxrc3osIGRhdGEtPmJsb2NrcywgZGF0YS0+ZmxhZ3MpOwogCiAJaG9zdC0+ZGF0YSA9IGRhdGE7CiAJaG9zdC0+c2l6ZSA9IGRhdGEtPmJsa3N6OwpAQCAtMTU1LDcgKzE1Myw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gaG9zdC0+YmFzZTsKIAotCURCRyhob3N0LCAib3AgJTAyeCBhcmcgJTA4eCBmbGFncyAlMDh4XG4iLAorCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAib3AgJTAyeCBhcmcgJTA4eCBmbGFncyAlMDh4XG4iLAogCSAgICBjbWQtPm9wY29kZSwgY21kLT5hcmcsIGNtZC0+ZmxhZ3MpOwogCiAJaWYgKHJlYWRsKGJhc2UgKyBNTUNJQ09NTUFORCkgJiBNQ0lfQ1BTTV9FTkFCTEUpIHsKQEAgLTE4NCw4ICsxODIsMjAgQEAKIHsKIAlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkgewogCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKKyNpZmRlZiBDT05GSUdfQVJDSF9VMzAwCisJCS8qCisJCSAqIE9uIHRoZSBVMzAwIHNvbWUgc2lnbmFsIG9yIG90aGVyIGlzCisJCSAqIGJhZGx5IHJvdXRlZCBzbyB0aGF0IGEgZGF0YSB3cml0ZSBkb2VzCisJCSAqIG5vdCBwcm9wZXJseSB0ZXJtaW5hdGUgd2l0aCBhIE1DSV9EQVRBRU5ECisJCSAqIHN0YXR1cyBmbGFnLiBUaGlzIHF1aXJrIHdpbGwgbWFrZSB3cml0ZXMKKwkJICogd29yayBhZ2Fpbi4KKwkJICovCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJc3RhdHVzIHw9IE1DSV9EQVRBRU5EOworI2VuZGlmCiAJfQogCWlmIChzdGF0dXMgJiAoTUNJX0RBVEFDUkNGQUlMfE1DSV9EQVRBVElNRU9VVHxNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkKIAkJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKIAkJZWxzZSBpZiAoc3RhdHVzICYgTUNJX0RBVEFUSU1FT1VUKQpAQCAtMzA3LDcgKzMxNyw3IEBACiAKIAlzdGF0dXMgPSByZWFkbChiYXNlICsgTU1DSVNUQVRVUyk7CiAKLQlEQkcoaG9zdCwgImlycTEgJTA4eFxuIiwgc3RhdHVzKTsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlycTEgKHBpbykgJTA4eFxuIiwgc3RhdHVzKTsKIAogCWRvIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQwMSw3ICs0MTEsNyBAQAogCQlzdGF0dXMgJj0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAJCXdyaXRlbChzdGF0dXMsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCi0JCURCRyhob3N0LCAiaXJxMCAlMDh4XG4iLCBzdGF0dXMpOworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlycTAgKGRhdGErY21kKSAlMDh4XG4iLCBzdGF0dXMpOwogCiAJCWRhdGEgPSBob3N0LT5kYXRhOwogCQlpZiAoc3RhdHVzICYgKE1DSV9EQVRBQ1JDRkFJTHxNQ0lfREFUQVRJTUVPVVR8TUNJX1RYVU5ERVJSVU58CkBAIC00MjgsOCArNDM4LDggQEAKIAlXQVJOX09OKGhvc3QtPm1ycSAhPSBOVUxMKTsKIAogCWlmIChtcnEtPmRhdGEgJiYgIWlzX3Bvd2VyX29mXzIobXJxLT5kYXRhLT5ibGtzeikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5zdXBwb3J0ZWQgYmxvY2sgc2l6ZSAoJWQgYnl0ZXMpXG4iLAotCQkJbW1jX2hvc3RuYW1lKG1tYyksIG1ycS0+ZGF0YS0+Ymxrc3opOworCQlkZXZfZXJyKG1tY19kZXYobW1jKSwgInVuc3VwcG9ydGVkIGJsb2NrIHNpemUgKCVkIGJ5dGVzKVxuIiwKKwkJCW1ycS0+ZGF0YS0+Ymxrc3opOwogCQltcnEtPmNtZC0+ZXJyb3IgPSAtRUlOVkFMOwogCQltbWNfcmVxdWVzdF9kb25lKG1tYywgbXJxKTsKIAkJcmV0dXJuOwpAQCAtNTgyLDggKzU5Miw4IEBACiAKIAlob3N0LT5od19kZXNpZ25lciA9IGFtYmFfbWFuZihkZXYpOwogCWhvc3QtPmh3X3JldmlzaW9uID0gYW1iYV9yZXYoZGV2KTsKLQlEQkcoaG9zdCwgImRlc2lnbmVyIElEID0gMHglMDJ4XG4iLCBob3N0LT5od19kZXNpZ25lcik7Ci0JREJHKGhvc3QsICJyZXZpc2lvbiA9IDB4JTAxeFxuIiwgaG9zdC0+aHdfcmV2aXNpb24pOworCWRldl9kYmcobW1jX2RldihtbWMpLCAiZGVzaWduZXIgSUQgPSAweCUwMnhcbiIsIGhvc3QtPmh3X2Rlc2lnbmVyKTsKKwlkZXZfZGJnKG1tY19kZXYobW1jKSwgInJldmlzaW9uID0gMHglMDF4XG4iLCBob3N0LT5od19yZXZpc2lvbik7CiAKIAlob3N0LT5jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihob3N0LT5jbGspKSB7CkBAIC02MDgsNyArNjE4LDggQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGNsa19kaXNhYmxlOwogCQlob3N0LT5tY2xrID0gY2xrX2dldF9yYXRlKGhvc3QtPmNsayk7Ci0JCURCRyhob3N0LCAiZXZlbnR1YWwgbWNsayByYXRlOiAldSBIelxuIiwgaG9zdC0+bWNsayk7CisJCWRldl9kYmcobW1jX2RldihtbWMpLCAiZXZlbnR1YWwgbWNsayByYXRlOiAldSBIelxuIiwKKwkJCWhvc3QtPm1jbGspOwogCX0KIAlob3N0LT5iYXNlID0gaW9yZW1hcChkZXYtPnJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpKTsKIAlpZiAoIWhvc3QtPmJhc2UpIHsKQEAgLTYxOSw2ICs2MzAsOCBAQAogCW1tYy0+b3BzID0gJm1tY2lfb3BzOwogCW1tYy0+Zl9taW4gPSAoaG9zdC0+bWNsayArIDUxMSkgLyA1MTI7CiAJbW1jLT5mX21heCA9IG1pbihob3N0LT5tY2xrLCBmbWF4KTsKKwlkZXZfZGJnKG1tY19kZXYobW1jKSwgImNsb2NraW5nIGJsb2NrIGF0ICV1IEh6XG4iLCBtbWMtPmZfbWF4KTsKKwogI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIAkvKiBJZiB3ZSdyZSB1c2luZyB0aGUgcmVndWxhdG9yIGZyYW1ld29yaywgdHJ5IHRvIGZldGNoIGEgcmVndWxhdG9yICovCiAJaG9zdC0+dmNjID0gcmVndWxhdG9yX2dldCgmZGV2LT5kZXYsICJ2bW1jIik7CkBAIC03MTIsNyArNzI1LDcgQEAKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1NQ0kgcmV2ICV4IGNmZyAlMDJ4IGF0IDB4JTAxNmxseCBpcnEgJWQsJWRcbiIsCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXM6IE1NQ0kgcmV2ICV4IGNmZyAlMDJ4IGF0IDB4JTAxNmxseCBpcnEgJWQsJWRcbiIsCiAJCW1tY19ob3N0bmFtZShtbWMpLCBhbWJhX3JldihkZXYpLCBhbWJhX2NvbmZpZyhkZXYpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzLnN0YXJ0LCBkZXYtPmlycVswXSwgZGV2LT5pcnFbMV0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDRiMjMyMjUxLi44M2YwYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpAQCAtMTQ2LDYgKzE0OCwxNSBAQAogCXN0cnVjdAljbGsJCSpmY2xrOwogCXN0cnVjdAljbGsJCSppY2xrOwogCXN0cnVjdAljbGsJCSpkYmNsazsKKwkvKgorCSAqIHZjYyA9PSBjb25maWd1cmVkIHN1cHBseQorCSAqIHZjY19hdXggPT0gb3B0aW9uYWwKKwkgKiAgIC0JTU1DMSwgc3VwcGx5IGZvciBEQVQ0Li5EQVQ3CisJICogICAtCU1NQzIvTU1DMiwgZXh0ZXJuYWwgbGV2ZWwgc2hpZnRlciB2b2x0YWdlIHN1cHBseSwgZm9yCisJICoJY2hpcCAoU0RJTywgZU1NQywgZXRjKSBvciB0cmFuc2NlaXZlciAoTU1DMiBvbmx5KQorCSAqLworCXN0cnVjdAlyZWd1bGF0b3IJKnZjYzsKKwlzdHJ1Y3QJcmVndWxhdG9yCSp2Y2NfYXV4OwogCXN0cnVjdAlzZW1hcGhvcmUJc2VtOwogCXN0cnVjdAl3b3JrX3N0cnVjdAltbWNfY2FyZGRldGVjdF93b3JrOwogCXZvaWQJX19pb21lbQkJKmJhc2U7CkBAIC0xNzEsMTAgKzE4MiwzMzcgQEAKIAlpbnQJCQl2ZGQ7CiAJaW50CQkJcHJvdGVjdF9jYXJkOwogCWludAkJCXJlcXNfYmxvY2tlZDsKKwlpbnQJCQl1c2VfcmVnOwogCiAJc3RydWN0CW9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwogfTsKIAorc3RhdGljIGludCBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfd3Aoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJLyogTk9URTogYXNzdW1lcyB3cml0ZSBwcm90ZWN0IHNpZ25hbCBpcyBhY3RpdmUtaGlnaCAqLworCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLmdwaW9fd3ApOworfQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBvbWFwX2hzbW1jX3N1c3BlbmRfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZGlzYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWVuYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lIG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycQlOVUxMCisjZGVmaW5lIG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxCQlOVUxMCisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfMV9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorCQkJCSAgaW50IHZkZCkKK3sKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0KKwkJcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCWludCByZXQ7CisKKwlpZiAobW1jX3Nsb3QoaG9zdCkuYmVmb3JlX3NldF9yZWcpCisJCW1tY19zbG90KGhvc3QpLmJlZm9yZV9zZXRfcmVnKGRldiwgc2xvdCwgcG93ZXJfb24sIHZkZCk7CisKKwlpZiAocG93ZXJfb24pCisJCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIHZkZCk7CisJZWxzZQorCQlyZXQgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCAwKTsKKworCWlmIChtbWNfc2xvdChob3N0KS5hZnRlcl9zZXRfcmVnKQorCQltbWNfc2xvdChob3N0KS5hZnRlcl9zZXRfcmVnKGRldiwgc2xvdCwgcG93ZXJfb24sIHZkZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfMjNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKKwkJCQkgICBpbnQgdmRkKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQorCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHNlZSBhIFZjYyByZWd1bGF0b3IsIGFzc3VtZSBpdCdzIGEgZml4ZWQKKwkgKiB2b2x0YWdlIGFsd2F5cy1vbiByZWd1bGF0b3IuCisJICovCisJaWYgKCFob3N0LT52Y2MpCisJCXJldHVybiAwOworCisJaWYgKG1tY19zbG90KGhvc3QpLmJlZm9yZV9zZXRfcmVnKQorCQltbWNfc2xvdChob3N0KS5iZWZvcmVfc2V0X3JlZyhkZXYsIHNsb3QsIHBvd2VyX29uLCB2ZGQpOworCisJLyoKKwkgKiBBc3N1bWUgVmNjIHJlZ3VsYXRvciBpcyB1c2VkIG9ubHkgdG8gcG93ZXIgdGhlIGNhcmQgLi4uIE9NQVAKKwkgKiBWRERTIGlzIHVzZWQgdG8gcG93ZXIgdGhlIHBpbnMsIG9wdGlvbmFsbHkgd2l0aCBhIHRyYW5zY2VpdmVyIHRvCisJICogc3VwcG9ydCBjYXJkcyB1c2luZyB2b2x0YWdlcyBvdGhlciB0aGFuIFZERFMgKDEuOFYgbm9taW5hbCkuICBXaGVuIGEKKwkgKiB0cmFuc2NlaXZlciBpcyB1c2VkLCBEQVQzLi43IGFyZSBtdXhlZCBhcyB0cmFuc2NlaXZlciBjb250cm9sIHBpbnMuCisJICoKKwkgKiBJbiBzb21lIGNhc2VzIHRoaXMgcmVndWxhdG9yIHdvbid0IHN1cHBvcnQgZW5hYmxlL2Rpc2FibGU7CisJICogZS5nLiBpdCdzIGEgZml4ZWQgcmFpbCBmb3IgYSBXTEFOIGNoaXAuCisJICoKKwkgKiBJbiBvdGhlciBjYXNlcyB2Y2NfYXV4IHN3aXRjaGVzIGludGVyZmFjZSBwb3dlci4gIEV4YW1wbGUsIGZvcgorCSAqIGVNTUMgY2FyZHMgaXQgcmVwcmVzZW50cyBWY2NRLiAgU29tZXRpbWVzIHRyYW5zY2VpdmVycyBvciBTRElPCisJICogY2hpcHMvY2FyZHMgbmVlZCBhbiBpbnRlcmZhY2Ugdm9sdGFnZSByYWlsIHRvby4KKwkgKi8KKwlpZiAocG93ZXJfb24pIHsKKwkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgdmRkKTsKKwkJLyogRW5hYmxlIGludGVyZmFjZSB2b2x0YWdlIHJhaWwsIGlmIG5lZWRlZCAqLworCQlpZiAocmV0ID09IDAgJiYgaG9zdC0+dmNjX2F1eCkgeworCQkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShob3N0LT52Y2NfYXV4KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIDApOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGhvc3QtPnZjY19hdXgpCisJCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2NfYXV4KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgMCk7CisJfQorCisJaWYgKG1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcpCisJCW1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY18xX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsCisJCQkJICBpbnQgdmRkLCBpbnQgY2FyZHNsZWVwKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQorCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJaW50IG1vZGUgPSBzbGVlcCA/IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkgOiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisKKwlyZXR1cm4gcmVndWxhdG9yX3NldF9tb2RlKGhvc3QtPnZjYywgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY18yM19zZXRfc2xlZXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHNsZWVwLAorCQkJCSAgIGludCB2ZGQsIGludCBjYXJkc2xlZXApCit7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9CisJCXBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlpbnQgZXJyLCBtb2RlOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBzZWUgYSBWY2MgcmVndWxhdG9yLCBhc3N1bWUgaXQncyBhIGZpeGVkCisJICogdm9sdGFnZSBhbHdheXMtb24gcmVndWxhdG9yLgorCSAqLworCWlmICghaG9zdC0+dmNjKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBzbGVlcCA/IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkgOiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisKKwlpZiAoIWhvc3QtPnZjY19hdXgpCisJCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoaG9zdC0+dmNjLCBtb2RlKTsKKworCWlmIChjYXJkc2xlZXApIHsKKwkJLyogVkNDIGNhbiBiZSB0dXJuZWQgb2ZmIGlmIGNhcmQgaXMgYXNsZWVwICovCisJCWlmIChzbGVlcCkKKwkJCWVyciA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIDApOworCQllbHNlCisJCQllcnIgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCB2ZGQpOworCX0gZWxzZQorCQllcnIgPSByZWd1bGF0b3Jfc2V0X21vZGUoaG9zdC0+dmNjLCBtb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFtbWNfc2xvdChob3N0KS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXApCisJCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoaG9zdC0+dmNjX2F1eCwgbW9kZSk7CisKKwlpZiAoc2xlZXApCisJCXJldHVybiByZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2NfYXV4KTsKKwllbHNlCisJCXJldHVybiByZWd1bGF0b3JfZW5hYmxlKGhvc3QtPnZjY19hdXgpOworfQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVnX2dldChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCByZWd1bGF0b3IgKnJlZzsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoaG9zdC0+aWQpIHsKKwljYXNlIE9NQVBfTU1DMV9ERVZJRDoKKwkJLyogT24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLworCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBvbWFwX2hzbW1jXzFfc2V0X3Bvd2VyOworCQltbWNfc2xvdChob3N0KS5zZXRfc2xlZXAgPSBvbWFwX2hzbW1jXzFfc2V0X3NsZWVwOworCQlicmVhazsKKwljYXNlIE9NQVBfTU1DMl9ERVZJRDoKKwljYXNlIE9NQVBfTU1DM19ERVZJRDoKKwkJLyogT2ZmLWNoaXAgbGV2ZWwgc2hpZnRpbmcsIG9yIG5vbmUgKi8KKwkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyID0gb21hcF9oc21tY18yM19zZXRfcG93ZXI7CisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IG9tYXBfaHNtbWNfMjNfc2V0X3NsZWVwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIk1NQyVkIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCFcbiIsIGhvc3QtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnID0gcmVndWxhdG9yX2dldChob3N0LT5kZXYsICJ2bW1jIik7CisJaWYgKElTX0VSUihyZWcpKSB7CisJCWRldl9kYmcoaG9zdC0+ZGV2LCAidm1tYyByZWd1bGF0b3IgbWlzc2luZ1xuIik7CisJCS8qCisJCSogSEFDSzogdW50aWwgZml4ZWQuYyByZWd1bGF0b3IgaXMgdXNhYmxlLAorCQkqIHdlIGRvbid0IHJlcXVpcmUgYSBtYWluIHJlZ3VsYXRvcgorCQkqIGZvciBNTUMyIG9yIE1NQzMKKwkJKi8KKwkJaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkgeworCQkJcmV0ID0gUFRSX0VSUihyZWcpOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlob3N0LT52Y2MgPSByZWc7CisJCW1tY19zbG90KGhvc3QpLm9jcl9tYXNrID0gbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhyZWcpOworCisJCS8qIEFsbG93IGFuIGF1eCByZWd1bGF0b3IgKi8KKwkJcmVnID0gcmVndWxhdG9yX2dldChob3N0LT5kZXYsICJ2bW1jX2F1eCIpOworCQlob3N0LT52Y2NfYXV4ID0gSVNfRVJSKHJlZykgPyBOVUxMIDogcmVnOworCisJCS8qCisJCSogVUdMWSBIQUNLOiAgd29ya2Fyb3VuZCByZWd1bGF0b3IgZnJhbWV3b3JrIGJ1Z3MuCisJCSogV2hlbiB0aGUgYm9vdGxvYWRlciBsZWF2ZXMgYSBzdXBwbHkgYWN0aXZlLCBpdCdzCisJCSogaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvIHVzZWNvdW50IC4uLiBhbmQgd2UgY2FuJ3QKKwkJKiBkaXNhYmxlIGl0IHdpdGhvdXQgZmlyc3QgZW5hYmxpbmcgaXQuICBVbnRpbCB0aGUKKwkJKiBmcmFtZXdvcmsgaXMgZml4ZWQsIHdlIG5lZWQgYSB3b3JrYXJvdW5kIGxpa2UgdGhpcworCQkqICh3aGljaCBpcyBzYWZlIGZvciBNTUMsIGJ1dCBub3QgaW4gZ2VuZXJhbCkuCisJCSovCisJCWlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2MpID4gMCkgeworCQkJcmVndWxhdG9yX2VuYWJsZShob3N0LT52Y2MpOworCQkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dmNjKTsKKwkJfQorCQlpZiAoaG9zdC0+dmNjX2F1eCkgeworCQkJaWYgKHJlZ3VsYXRvcl9pc19lbmFibGVkKHJlZykgPiAwKSB7CisJCQkJcmVndWxhdG9yX2VuYWJsZShyZWcpOworCQkJCXJlZ3VsYXRvcl9kaXNhYmxlKHJlZyk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IE5VTEw7CisJbW1jX3Nsb3QoaG9zdCkuc2V0X3NsZWVwID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3JlZ19wdXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CisJcmVndWxhdG9yX3B1dChob3N0LT52Y2NfYXV4KTsKKwltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBOVUxMOworCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfaHNtbWNfaGF2ZV9yZWcodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgb21hcF9oc21tY19yZWdfZ2V0KHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hzbW1jX3JlZ19wdXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcF9oc21tY19oYXZlX3JlZyh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBvbWFwX2hzbW1jX2dwaW9faW5pdChzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IHJldDsKKworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKSkgeworCQlwZGF0YS0+c3VzcGVuZCA9IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycTsKKwkJcGRhdGEtPnJlc3VtZSA9IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxOworCQlpZiAocGRhdGEtPnNsb3RzWzBdLmNvdmVyKQorCQkJcGRhdGEtPnNsb3RzWzBdLmdldF9jb3Zlcl9zdGF0ZSA9CisJCQkJCW9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlOworCQllbHNlCisJCQlwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0OworCQlwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxID0KKwkJCQlncGlvX3RvX2lycShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbiwgIm1tY19jZCIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9zcDsKKwl9IGVsc2UKKwkJcGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOworCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApKSB7CisJCXBkYXRhLT5zbG90c1swXS5nZXRfcm8gPSBvbWFwX2hzbW1jX2dldF93cDsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zbG90c1swXS5ncGlvX3dwLCAibW1jX3dwIik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX2NkOworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX3dwOworCX0gZWxzZQorCQlwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfd3A6CisJZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKK2Vycl9mcmVlX2NkOgorCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKSkKK2Vycl9mcmVlX3NwOgorCQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZ3Bpb19mcmVlKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCkpCisJCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCk7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKQorCQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworfQorCiAvKgogICogU3RvcCBjbG9jayB0byB0aGUgY2FyZAogICovCkBAIC04MzUsNyArMTE3Myw3IEBACiAJc3lzZnNfbm90aWZ5KCZob3N0LT5tbWMtPmNsYXNzX2Rldi5rb2JqLCBOVUxMLCAiY292ZXJfc3dpdGNoIik7CiAKIAlpZiAoc2xvdC0+Y2FyZF9kZXRlY3QpCi0JCWNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChzbG90LT5jYXJkX2RldGVjdF9pcnEpOworCQljYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3QoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKTsKIAllbHNlIHsKIAkJb21hcF9oc21tY19wcm90ZWN0X2NhcmQoaG9zdCk7CiAJCWNhcmRkZXRlY3QgPSAtRU5PU1lTOwpAQCAtMTI0Miw3ICsxNTgwLDcgQEAKIAogCWlmICghbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QpCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEpOworCXJldHVybiBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpOwogfQogCiBzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQpAQCAtMTMxMSw3ICsxNjQ5LDcgQEAKIAlpZiAoaG9zdC0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX1NMRUVQX1RJTUVPVVQpOworCXJldHVybiBPTUFQX01NQ19TTEVFUF9USU1FT1VUOwogfQogCiAvKiBIYW5kbGVyIGZvciBbRElTQUJMRUQgLT4gUkVHU0xFRVAgLyBDQVJEU0xFRVBdIHRyYW5zaXRpb24gKi8KQEAgLTEzNDcsMTEgKzE2ODUsMTQgQEAKIAlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkRJU0FCTEVEIC0+ICVzXG4iLAogCQlob3N0LT5kcG1fc3RhdGUgPT0gQ0FSRFNMRUVQID8gIkNBUkRTTEVFUCIgOiAiUkVHU0xFRVAiKTsKIAorCWlmIChtbWNfc2xvdChob3N0KS5ub19vZmYpCisJCXJldHVybiAwOworCiAJaWYgKChob3N0LT5tbWMtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSkgfHwKIAkgICAgbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QgfHwKIAkgICAgKG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSAmJgogCSAgICAgbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCkpKQotCQlyZXR1cm4gbXNlY3NfdG9famlmZmllcyhPTUFQX01NQ19PRkZfVElNRU9VVCk7CisJCXJldHVybiBPTUFQX01NQ19PRkZfVElNRU9VVDsKIAogCXJldHVybiAwOwogfQpAQCAtMTM2Miw2ICsxNzAzLDkgQEAKIAlpZiAoIW1tY190cnlfY2xhaW1faG9zdChob3N0LT5tbWMpKQogCQlyZXR1cm4gMDsKIAorCWlmIChtbWNfc2xvdChob3N0KS5ub19vZmYpCisJCXJldHVybiAwOworCiAJaWYgKCEoKGhvc3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfTk9OUkVNT1ZBQkxFKSB8fAogCSAgICAgIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0IHx8CiAJICAgICAgKG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSAmJgpAQCAtMTYxNiw3ICsxOTYwLDcgQEAKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgcmV0ID0gMCwgaXJxOworCWludCByZXQsIGlycTsKIAogCWlmIChwZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBsYXRmb3JtIERhdGEgaXMgbWlzc2luZ1xuIik7CkBAIC0xNjM4LDEwICsxOTgyLDE0IEBACiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCisJcmV0ID0gb21hcF9oc21tY19ncGlvX2luaXQocGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfYWxsb2M7CiAJfQogCiAJaG9zdAkJPSBtbWNfcHJpdihtbWMpOwpAQCAtMTY1Niw3ICsyMDA0LDcgQEAKIAlob3N0LT5zbG90X2lkCT0gMDsKIAlob3N0LT5tYXBiYXNlCT0gcmVzLT5zdGFydDsKIAlob3N0LT5iYXNlCT0gaW9yZW1hcChob3N0LT5tYXBiYXNlLCBTWl80Syk7Ci0JaG9zdC0+cG93ZXJfbW9kZSA9IC0xOworCWhvc3QtPnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT0ZGOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CiAJSU5JVF9XT1JLKCZob3N0LT5tbWNfY2FyZGRldGVjdF93b3JrLCBvbWFwX2hzbW1jX2RldGVjdCk7CkBAIC0xNjY2LDYgKzIwMTQsMTMgQEAKIAllbHNlCiAJCW1tYy0+b3BzCT0gJm9tYXBfaHNtbWNfb3BzOwogCisJLyoKKwkgKiBJZiByZWd1bGF0b3JfZGlzYWJsZSBjYW4gb25seSBwdXQgdmNjX2F1eCB0byBzbGVlcCB0aGVuIHRoZXJlIGlzCisJICogbm8gb2ZmIHN0YXRlLgorCSAqLworCWlmIChtbWNfc2xvdChob3N0KS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXApCisJCW1tY19zbG90KGhvc3QpLm5vX29mZiA9IDE7CisKIAltbWMtPmZfbWluCT0gNDAwMDAwOwogCW1tYy0+Zl9tYXgJPSA1MjAwMDAwMDsKIApAQCAtMTc4MSw3ICsyMTM2LDYgQEAKIAkJZ290byBlcnJfaXJxOwogCX0KIAotCS8qIGluaXRpYWxpemUgcG93ZXIgc3VwcGxpZXMsIGdwaW9zLCBldGMgKi8KIAlpZiAocGRhdGEtPmluaXQgIT0gTlVMTCkgewogCQlpZiAocGRhdGEtPmluaXQoJnBkZXYtPmRldikgIT0gMCkgewogCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCkBAIC0xNzg5LDYgKzIxNDMsMTQgQEAKIAkJCWdvdG8gZXJyX2lycV9jZF9pbml0OwogCQl9CiAJfQorCisJaWYgKG9tYXBfaHNtbWNfaGF2ZV9yZWcoKSAmJiAhbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKSB7CisJCXJldCA9IG9tYXBfaHNtbWNfcmVnX2dldChob3N0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3JlZzsKKwkJaG9zdC0+dXNlX3JlZyA9IDE7CisJfQorCiAJbW1jLT5vY3JfYXZhaWwgPSBtbWNfc2xvdChob3N0KS5vY3JfbWFzazsKIAogCS8qIFJlcXVlc3QgSVJRIGZvciBjYXJkIGRldGVjdCAqLwpAQCAtMTgyMywxOSArMjE4NSwyMiBAQAogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LAogCQkJCQkmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycl9jb3Zlcl9zd2l0Y2g7CisJCQlnb3RvIGVycl9zbG90X25hbWU7CiAJfQogCiAJb21hcF9oc21tY19kZWJ1Z2ZzKG1tYyk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2NvdmVyX3N3aXRjaDoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LCAmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKIGVycl9zbG90X25hbWU6CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7Ci1lcnJfaXJxX2NkOgogCWZyZWVfaXJxKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSwgaG9zdCk7CitlcnJfaXJxX2NkOgorCWlmIChob3N0LT51c2VfcmVnKQorCQlvbWFwX2hzbW1jX3JlZ19wdXQoaG9zdCk7CitlcnJfcmVnOgorCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKKwkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiBlcnJfaXJxX2NkX2luaXQ6CiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIGVycl9pcnE6CkBAIC0xODQ3LDE0ICsyMjEyLDE0IEBACiAJCWNsa19kaXNhYmxlKGhvc3QtPmRiY2xrKTsKIAkJY2xrX3B1dChob3N0LT5kYmNsayk7CiAJfQotCiBlcnIxOgogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbW1jX2ZyZWVfaG9zdChtbWMpOworZXJyX2FsbG9jOgorCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKHBkYXRhKTsKIGVycjoKLQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIlByb2JlIEZhaWxlZFxuIik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWlmIChob3N0KQotCQltbWNfZnJlZV9ob3N0KG1tYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg2Niw2ICsyMjMxLDggQEAKIAlpZiAoaG9zdCkgewogCQltbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKTsKIAkJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CisJCWlmIChob3N0LT51c2VfcmVnKQorCQkJb21hcF9oc21tY19yZWdfcHV0KGhvc3QpOwogCQlpZiAoaG9zdC0+cGRhdGEtPmNsZWFudXApCiAJCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIAkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKQEAgLTE4ODQsNiArMjI1MSw3IEBACiAKIAkJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOwogCQlpb3VubWFwKGhvc3QtPmJhc2UpOworCQlvbWFwX2hzbW1jX2dwaW9fZnJlZShwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAyZGUwY2M4Li5hYTI4MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0yNTEsMTIgKzI1MSw2IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgZmxhc2ggY2hpcHMgb24gTkVUdGVsL1NlY3VyZUVkZ2UvU25hcEdlYXIgYm9hcmRzLgogCi1jb25maWcgTVREX0FMQ0hFTVkKLQl0cmlzdGF0ZSAiQU1EIEFsY2hlbXkgUGIxeHh4L0RiMXh4eC9SREsgTVREIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRkkKLQloZWxwCi0JICBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIEFNRCBBbGNoZW15IFBiL0RiL1JESyBSZWZlcmVuY2UgQm9hcmRzCi0KIGNvbmZpZyBNVERfRElMTkVUUEMKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gRElML05ldCBQQyIKIAlkZXBlbmRzIG9uIFg4NiAmJiBNVERfQ09OQ0FUICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRklfSU5URUxFWFQgJiYgQlJPS0VOCkBAIC00MjgsMTUgKzQyMiw2IEBACiAJICBUaGlzIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSHluaXggZXZhbHVhdGlvbiBib2FyZHMuCiAJICBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHNheSAnWScuCiAKLWNvbmZpZyBNVERfT01BUF9OT1IKLQl0cmlzdGF0ZSAiVEkgT01BUCBib2FyZCBtYXBwaW5ncyIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgQVJDSF9PTUFQCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgTk9SIGZsYXNoIGNoaXBzIG9uIFRJIE9NQVAtYmFzZWQKLQkgIGJvYXJkcyBkZWZpbmluZyBmbGFzaCBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBmbGFzaCBwbGF0Zm9ybSBkYXRhLgotCSAgVGhlc2UgYm9hcmRzIGluY2x1ZGUgdGhlIElubm92YXRvciwgSDIsIEgzLCBPU0ssIFBlcnNldXMyLCBhbmQKLQkgIG1vcmUuICBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHNheSAnWScuCi0KICMgVGhpcyBuZWVkcyBDRkkgb3IgSkVERUMsIGRlcGVuZGluZyBvbiB0aGUgY2FyZHMgZm91bmQuCiBjb25maWcgTVREX1BDSQogCXRyaXN0YXRlICJQQ0kgTVREIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IGNlMzE1MjEuLmJiMDM1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNiBAQAogb2JqLSQoQ09ORklHX01URF9EQk9YMikJCSs9IGRib3gyLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfU09MVVRJT05FTkdJTkUpKz0gc29sdXRpb25lbmdpbmUubwogb2JqLSQoQ09ORklHX01URF9QQ0kpCQkrPSBwY2kubwotb2JqLSQoQ09ORklHX01URF9BTENIRU1ZKSAgICAgICArPSBhbGNoZW15LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfQVVUQ1BVMTIpCSs9IGF1dGNwdTEyLW52cmFtLm8KIG9iai0kKENPTkZJR19NVERfRURCNzMxMikJKz0gZWRiNzMxMi5vCiBvYmotJChDT05GSUdfTVREX0lNUEE3KQkJKz0gaW1wYTcubwpAQCAtNTUsNyArNTQsNiBAQAogb2JqLSQoQ09ORklHX01URF9XUlNCQzgyNjApCSs9IHdyX3NiYzgyeHhfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9ETVYxODIpCSs9IGRtdjE4Mi5vCiBvYmotJChDT05GSUdfTVREX1BMQVRSQU0pCSs9IHBsYXQtcmFtLm8KLW9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfUkJUWDQ5MzkpCSs9IHJidHg0OTM5LWZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NWFkNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gQU1EIEFsY2hlbXkgZXZhbHVhdGlvbiBib2FyZHMKLSAqCi0gKiAoQykgMjAwMywgMjAwNCBQZXRlIFBvcG92IDxwcG9wb3ZAZW1iZWRkZWRhbGxleS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTAwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAwODAwMDAwIC8qIDhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggMiAvKiAxNi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTAwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMDAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDIwMDAwMDAgLyogMzJNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMjAwMDAwMCAvKiAzMk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAyMDAwMDAwIC8qIDMyTUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkJvc3BvcnVzIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDEwMDAwMDAgLyogMTZNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJNaXJhZ2UgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2RlZmluZSBVU0VfTE9DQUxfQUNDRVNTT1JTIC8qIHdoeT8gKi8KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGFsY2hlbXlfbWFwID0gewotCS5uYW1lID0JQk9BUkRfTUFQX05BTUUsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYWxjaGVteV9wYXJ0aXRpb25zW10gPSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJVc2VyIEZTIiwKLSAgICAgICAgICAgICAgICAuc2l6ZSA9IEJPQVJEX0ZMQVNIX1NJWkUgLSAweDAwNDAwMDAwLAotICAgICAgICAgICAgICAgIC5vZmZzZXQgPSAweDAwMDAwMDAKLSAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgLm5hbWUgPSAiWUFNT04iLAotICAgICAgICAgICAgICAgIC5zaXplID0gMHgwMTAwMDAwLAotCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAotICAgICAgICAgICAgICAgIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRQotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJyYXcga2VybmVsIiwKLQkJLnNpemUgPSAoMHgzMDAwMDAgLSAweDQwMDAwKSwgLyogbGFzdCAyNTZLQiBpcyB5YW1vbiBlbnYgKi8KLQkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKLSAgICAgICAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfbXRkX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5iX3BhcnRzID0gMDsKLQl1bnNpZ25lZCBsb25nIHdpbmRvd19hZGRyOwotCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7Ci0KLQkvKiBEZWZhdWx0IGZsYXNoIGJ1c3dpZHRoICovCi0JYWxjaGVteV9tYXAuYmFua3dpZHRoID0gQk9BUkRfRkxBU0hfV0lEVEg7Ci0KLQl3aW5kb3dfYWRkciA9IDB4MjAwMDAwMDAgLSBCT0FSRF9GTEFTSF9TSVpFOwotCXdpbmRvd19zaXplID0gQk9BUkRfRkxBU0hfU0laRTsKLQotCS8qCi0JICogU3RhdGljIHBhcnRpdGlvbiBkZWZpbml0aW9uIHNlbGVjdGlvbgotCSAqLwotCXBhcnRzID0gYWxjaGVteV9wYXJ0aXRpb25zOwotCW5iX3BhcnRzID0gQVJSQVlfU0laRShhbGNoZW15X3BhcnRpdGlvbnMpOwotCWFsY2hlbXlfbWFwLnNpemUgPSB3aW5kb3dfc2l6ZTsKLQotCS8qCi0JICogTm93IGxldCdzIHByb2JlIGZvciB0aGUgYWN0dWFsIGZsYXNoLiAgRG8gaXQgaGVyZSBzaW5jZQotCSAqIHNwZWNpZmljIG1hY2hpbmUgc2V0dGluZ3MgbWlnaHQgaGF2ZSBiZWVuIHNldCBhYm92ZS4KLQkgKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgQk9BUkRfTUFQX05BTUUgIjogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLAotCQkJYWxjaGVteV9tYXAuYmFua3dpZHRoKjgpOwotCWFsY2hlbXlfbWFwLnZpcnQgPSBpb3JlbWFwKHdpbmRvd19hZGRyLCB3aW5kb3dfc2l6ZSk7Ci0JbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZhbGNoZW15X21hcCk7Ci0JaWYgKCFteW10ZCkgewotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQlteW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQotCWFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5iX3BhcnRzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsY2hlbXlfbXRkX2NsZWFudXAodm9pZCkKLXsKLQlpZiAobXltdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCX0KLX0KLQotbW9kdWxlX2luaXQoYWxjaGVteV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChhbGNoZW15X210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMiKTsKLU1PRFVMRV9ERVNDUklQVElPTihCT0FSRF9NQVBfTkFNRSAiIE1URCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCBlYWQwYjJmLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICogRmxhc2ggbWVtb3J5IHN1cHBvcnQgZm9yIHZhcmlvdXMgVEkgT01BUCBib2FyZHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFRleGFzIEluc3RydW1lbnRzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKglBc3NlbWJsZWQgdXNpbmcgZHJpdmVyIGNvZGUgY29weXJpZ2h0IHRoZSBjb21wYW5pZXMgYWJvdmUKLSAqCWFuZCB3cml0dGVuIGJ5IERhdmlkIEJyb3duZWxsLCBKaWFuIFpoYW5nIDxqemhhbmdAdGkuY29tPiwKLSAqIAlUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPiBhbmQgb3RoZXJzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPHBsYXQvdGMuaD4KLQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7IC8qICJSZWRCb290IiwgKi8gImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwotI2VuZGlmCi0KLXN0cnVjdCBvbWFwZmxhc2hfaW5mbyB7Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOwotCXN0cnVjdCBtdGRfaW5mbwkJKm10ZDsKLQlzdHJ1Y3QgbWFwX2luZm8JCW1hcDsKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IGVuYWJsZSkKLXsKLQlzdGF0aWMgaW50CWNvdW50OwotCXUzMiBsOwotCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWlmIChjb3VudCsrID09IDApIHsKLQkJCQlsID0gb21hcF9yZWFkbChFTUlGU19DT05GSUcpOwotCQkJCWwgfD0gT01BUF9FTUlGU19DT05GSUdfV1A7Ci0JCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChjb3VudCAmJiAoLS1jb3VudCA9PSAwKSkgewotCQkJCWwgPSBvbWFwX3JlYWRsKEVNSUZTX0NPTkZJRyk7Ci0JCQkJbCAmPSB+T01BUF9FTUlGU19DT05GSUdfV1A7Ci0JCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgb21hcGZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm87Ci0Jc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwZmxhc2hfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCAiZmxhc2giKSkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2ZyZWVfaW5mbzsKLQl9Ci0KLQlpbmZvLT5tYXAudmlydAkJPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOwotCWlmICghaW5mby0+bWFwLnZpcnQpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOwotCX0KLQlpbmZvLT5tYXAubmFtZQkJPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKLQlpbmZvLT5tYXAucGh5cwkJPSByZXMtPnN0YXJ0OwotCWluZm8tPm1hcC5zaXplCQk9IHNpemU7Ci0JaW5mby0+bWFwLmJhbmt3aWR0aAk9IHBkYXRhLT53aWR0aDsKLQlpbmZvLT5tYXAuc2V0X3ZwcAk9IG9tYXBfc2V0X3ZwcDsKLQotCXNpbXBsZV9tYXBfaW5pdCgmaW5mby0+bWFwKTsKLQlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUocGRhdGEtPm1hcF9uYW1lLCAmaW5mby0+bWFwKTsKLQlpZiAoIWluZm8tPm10ZCkgewotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQlpbmZvLT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlpbmZvLT5tdGQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCi0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwYXJ0X3Byb2JlcywgJmluZm8tPnBhcnRzLCAwKTsKLQlpZiAoZXJyID4gMCkKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgaW5mby0+cGFydHMsIGVycik7Ci0JZWxzZSBpZiAoZXJyIDw9IDAgJiYgcGRhdGEtPnBhcnRzKQotCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7Ci0JZWxzZQotI2VuZGlmCi0JCWFkZF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKLQotCXJldHVybiAwOwotCi1vdXRfaW91bm1hcDoKLQlpb3VubWFwKGluZm8tPm1hcC52aXJ0KTsKLW91dF9yZWxlYXNlX21lbV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUpOwotb3V0X2ZyZWVfaW5mbzoKLQlrZnJlZShpbmZvKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19leGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCi0JaWYgKGluZm8pIHsKLQkJaWYgKGluZm8tPnBhcnRzKSB7Ci0JCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKLQkJCWtmcmVlKGluZm8tPnBhcnRzKTsKLQkJfSBlbHNlCi0JCQlkZWxfbXRkX2RldmljZShpbmZvLT5tdGQpOwotCQltYXBfZGVzdHJveShpbmZvLT5tdGQpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+bWFwLnBoeXMsIGluZm8tPm1hcC5zaXplKTsKLQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGluZm8tPm1hcC52aXJ0KTsKLQkJa2ZyZWUoaW5mbyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBmbGFzaF9kcml2ZXIgPSB7Ci0JLnJlbW92ZQk9IF9fZXhpdF9wKG9tYXBmbGFzaF9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIm9tYXBmbGFzaCIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwZmxhc2hfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXBmbGFzaF9kcml2ZXIsIG9tYXBmbGFzaF9wcm9iZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwZmxhc2hfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwZmxhc2hfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQob21hcGZsYXNoX2luaXQpOwotbW9kdWxlX2V4aXQob21hcGZsYXNoX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBOT1IgbWFwIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06b21hcGZsYXNoIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggNjc3Y2Q1My4uYmI2NDY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtNDU3LDEwICs0NTcsMTAgQEAKIAogY29uZmlnIE1URF9OQU5EX1NIX0ZMQ1RMCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gUmVuZXNhcyBTdXBlckggRkxDVEwiCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTVVBFUkggJiYgQ1BVX1NVQlRZUEVfU0g3NzIzCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTVVBFUkgKIAloZWxwCiAJICBTZXZlcmFsIFJlbmVzYXMgU3VwZXJIIENQVSBoYXMgRkxDVEwuIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydAotCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzIzLgorCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuCiAKIGNvbmZpZyBNVERfTkFORF9EQVZJTkNJCiAgICAgICAgIHRyaXN0YXRlICJTdXBwb3J0IE5BTkQgb24gRGFWaW5jaSBTb0MiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKaW5kZXggOTJjMzM0Zi4uNDNkNDZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKIC8qCiAgKiBNVEQgc3RydWN0dXJlIGZvciBOQU5EIGNvbnRyb2xsZXIKQEAgLTQ3NSw3ICs0NzYsOCBAQAogCS8qIHNldCBncGlvMjA2IGhpZ2ggKi8KIAlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfRElSKSAmIH4oMSA8PCA2KSwgR1BJTzJfRElSKTsKIAotCWJvb3Rfc3dhcGJvb3QgPSAoYXVfcmVhZGwoTUVNX1NUU1RBVCkgJiAoMHg3IDw8IDEpKSB8ICgoYmNzci0+c3RhdHVzID4+IDYpICYgMHgxKTsKKwlib290X3N3YXBib290ID0gKGF1X3JlYWRsKE1FTV9TVFNUQVQpICYgKDB4NyA8PCAxKSkgfCAoKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgPj4gNikgJiAweDEpOworCiAJc3dpdGNoIChib290X3N3YXBib290KSB7CiAJY2FzZSAwOgogCWNhc2UgMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYwppbmRleCAxYmI3OTlmLi4yNmFlYzAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYwpAQCAtMzAsMTIgKzMwLDggQEAKIAogI2RlZmluZQlEUklWRVJfTkFNRQkib21hcDItbmFuZCIKIAotLyogc2l6ZSAoNCBLaUIpIGZvciBJTyBtYXBwaW5nICovCi0jZGVmaW5lCU5BTkRfSU9fU0laRQlTWl80SwotCiAjZGVmaW5lCU5BTkRfV1BfT0ZGCTAKICNkZWZpbmUgTkFORF9XUF9CSVQJMHgwMDAwMDAxMAotI2RlZmluZSBXUl9SRF9QSU5fTU9OSVRPUklORwkweDAwNjAwMDAwCiAKICNkZWZpbmUJR1BNQ19CVUZfRlVMTAkweDAwMDAwMDAxCiAjZGVmaW5lCUdQTUNfQlVGX0VNUFRZCTB4MDAwMDAwMDAKQEAgLTg4Miw4ICs4NzgsNiBAQAogCXN0cnVjdCBvbWFwX25hbmRfaW5mbwkJKmluZm87CiAJc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKIAlpbnQJCQkJZXJyOwotCXVuc2lnbmVkIGxvbmcgCQkJdmFsOwotCiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChwZGF0YSA9PSBOVUxMKSB7CkBAIC05MDUsMjggKzg5OSwxNCBAQAogCWluZm8tPmdwbWNfY3MJCT0gcGRhdGEtPmNzOwogCWluZm8tPmdwbWNfYmFzZWFkZHIJPSBwZGF0YS0+Z3BtY19iYXNlYWRkcjsKIAlpbmZvLT5ncG1jX2NzX2Jhc2VhZGRyCT0gcGRhdGEtPmdwbWNfY3NfYmFzZWFkZHI7CisJaW5mby0+cGh5c19iYXNlCQk9IHBkYXRhLT5waHlzX2Jhc2U7CiAKIAlpbmZvLT5tdGQucHJpdgkJPSAmaW5mby0+bmFuZDsKIAlpbmZvLT5tdGQubmFtZQkJPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlpbmZvLT5tdGQub3duZXIJCT0gVEhJU19NT0RVTEU7CiAKLQllcnIgPSBncG1jX2NzX3JlcXVlc3QoaW5mby0+Z3BtY19jcywgTkFORF9JT19TSVpFLCAmaW5mby0+cGh5c19iYXNlKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCX0KLQotCS8qIEVuYWJsZSBSRCBQSU4gTW9uaXRvcmluZyBSZWcgKi8KLQlpZiAocGRhdGEtPmRldl9yZWFkeSkgewotCQl2YWwgID0gZ3BtY19jc19yZWFkX3JlZyhpbmZvLT5ncG1jX2NzLCBHUE1DX0NTX0NPTkZJRzEpOwotCQl2YWwgfD0gV1JfUkRfUElOX01PTklUT1JJTkc7Ci0JCWdwbWNfY3Nfd3JpdGVfcmVnKGluZm8tPmdwbWNfY3MsIEdQTUNfQ1NfQ09ORklHMSwgdmFsKTsKLQl9Ci0KLQl2YWwgID0gZ3BtY19jc19yZWFkX3JlZyhpbmZvLT5ncG1jX2NzLCBHUE1DX0NTX0NPTkZJRzcpOwotCXZhbCAmPSB+KDB4ZiA8PCA4KTsKLQl2YWwgfD0gICgweGMgJiAweGYpIDw8IDg7Ci0JZ3BtY19jc193cml0ZV9yZWcoaW5mby0+Z3BtY19jcywgR1BNQ19DU19DT05GSUc3LCB2YWwpOworCWluZm8tPm5hbmQub3B0aW9ucwl8PSBwZGF0YS0+ZGV2c2l6ZSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOworCWluZm8tPm5hbmQub3B0aW9ucwl8PSBOQU5EX1NLSVBfQkJUU0NBTjsKIAogCS8qIE5BTkQgd3JpdGUgcHJvdGVjdCBvZmYgKi8KIAlvbWFwX25hbmRfd3AoJmluZm8tPm10ZCwgTkFORF9XUF9PRkYpOwpAQCAtOTM0LDcgKzkxNCw3IEBACiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+cGh5c19iYXNlLCBOQU5EX0lPX1NJWkUsCiAJCQkJcGRldi0+ZGV2LmRyaXZlci0+bmFtZSkpIHsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dF9mcmVlX2NzOworCQlnb3RvIG91dF9mcmVlX2luZm87CiAJfQogCiAJaW5mby0+bmFuZC5JT19BRERSX1IgPSBpb3JlbWFwKGluZm8tPnBoeXNfYmFzZSwgTkFORF9JT19TSVpFKTsKQEAgLTk2MywxMSArOTQzLDYgQEAKIAkJaW5mby0+bmFuZC5jaGlwX2RlbGF5ID0gNTA7CiAJfQogCi0JaW5mby0+bmFuZC5vcHRpb25zICB8PSBOQU5EX1NLSVBfQkJUU0NBTjsKLQlpZiAoKGdwbWNfY3NfcmVhZF9yZWcoaW5mby0+Z3BtY19jcywgR1BNQ19DU19DT05GSUcxKSAmIDB4MzAwMCkKLQkJCQkJCQkJPT0gMHgxMDAwKQotCQlpbmZvLT5uYW5kLm9wdGlvbnMgIHw9IE5BTkRfQlVTV0lEVEhfMTY7Ci0KIAlpZiAodXNlX3ByZWZldGNoKSB7CiAJCS8qIGNvcHkgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiBuYW5kIGJhc2UgZm9yIGZpZm8gYWNjZXNzICovCiAJCWluZm8tPm5hbmRfcHJlZl9maWZvX2FkZCA9IGluZm8tPm5hbmQuSU9fQUREUl9SOwpAQCAtMTA0Myw4ICsxMDE4LDYgQEAKIAogb3V0X3JlbGVhc2VfbWVtX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+cGh5c19iYXNlLCBOQU5EX0lPX1NJWkUpOwotb3V0X2ZyZWVfY3M6Ci0JZ3BtY19jc19mcmVlKGluZm8tPmdwbWNfY3MpOwogb3V0X2ZyZWVfaW5mbzoKIAlrZnJlZShpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDAyYmVmMjEuLjE4NDJkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCiAgKgotICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCDCqSAyMDA4IEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCiAgKgotICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03NSw2ICs3NSwxMSBAQAogCXdyaXRlYihUUlNUUlQsIEZMVFJDUihmbGN0bCkpOwogfQogCitzdGF0aWMgdm9pZCB0aW1lb3V0X2Vycm9yKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlkZXZfZXJyKCZmbGN0bC0+cGRldi0+ZGV2LCAiVGltZW91dCBvY2N1cmVkIGluICVzXG4iLCBzdHIpOworfQorCiBzdGF0aWMgdm9pZCB3YWl0X2NvbXBsZXRpb24oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKIHsKIAl1aW50MzJfdCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKQEAgLTg3LDcgKzkyLDcgQEAKIAkJdWRlbGF5KDEpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIAl3cml0ZWIoMHgwLCBGTFRSQ1IoZmxjdGwpKTsKIH0KIApAQCAtMTAwLDYgKzEwNSw4IEBACiAJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLwogCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CiAJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOwogCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgewogCQkJYWRkciA9IGNvbHVtbiAmIDB4MEZGRjsKIAkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDE2OwpAQCAtMTMyLDcgKzEzOSw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgd2FpdF93Zmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQpAQCAtMTQ2LDcgKzE1Myw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGludCB3YWl0X3JlY2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHNlY3Rvcl9udW1iZXIpCkBAIC0xOTgsNyArMjA1LDcgQEAKIAkJd3JpdGVsKDAsIEZMNEVDQ0NSKGZsY3RsKSk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCiB9CiAKQEAgLTIxNCw3ICsyMjEsNyBAQAogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9kYXRhcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBvZmZzZXQpCkBAIC0yNzUsNyArMjgyLDcgQEAKIHN0YXRpYyB2b2lkIHNldF9jbWRfcmVncyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDMyX3QgY21kLCB1aW50MzJfdCBmbGNtY2RyX3ZhbCkKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7Ci0JdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSk7CisJdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+U0VMXzE2QklUOwogCXVpbnQzMl90IGZsY21kY3JfdmFsLCBhZGRyX2xlbl9ieXRlcyA9IDA7CiAKIAkvKiBTZXQgU05BTkQgYml0IGlmIHBhZ2Ugc2l6ZSBpcyAyMDQ4Ynl0ZSAqLwpAQCAtMjk3LDYgKzMwNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9SRUFET09COgogCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CiAJCWZsY21kY3JfdmFsIHw9IENEU1JDX0U7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWZsY21uY3JfdmFsIHw9IFNFTF8xNkJJVDsKIAkJYnJlYWs7CiAJY2FzZSBOQU5EX0NNRF9TRVFJTjoKIAkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLwpAQCAtMzA1LDYgKzMxNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKIAkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOwogCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJZmxjbW5jcl92YWwgfD0gU0VMXzE2QklUOwogCQlicmVhazsKIAljYXNlIE5BTkRfQ01EX1JFQURJRDoKIAkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CkBAIC01MjMsNiArNTM0LDggQEAKIAkJc2V0X2FkZHIobXRkLCAwLCBwYWdlX2FkZHIpOwogCiAJCWZsY3RsLT5yZWFkX2J5dGVzID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWNvbHVtbiA+Pj0gMTsKIAkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKIAkJZ290byByZWFkX25vcm1hbF9leGl0OwogCkBAIC02ODYsNiArNjk5LDE4IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBmbGN0bF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisgICAgICAgc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworICAgICAgIGludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKyAgICAgICB1aW50MTZfdCBkYXRhOworICAgICAgIHVpbnQxNl90ICpidWYgPSAodWludDE2X3QgKikmZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisKKyAgICAgICBkYXRhID0gKmJ1ZjsKKyAgICAgICBmbGN0bC0+aW5kZXggKz0gMjsKKyAgICAgICByZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHZvaWQgZmxjdGxfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKQEAgLTc2OSwzOCArNzk0LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmbGN0bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGw7CiAJc3RydWN0IG10ZF9pbmZvICpmbGN0bF9tdGQ7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKIAlzdHJ1Y3Qgc2hfZmxjdGxfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOWElPOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbGN0bCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9mbGN0bCksIEdGUF9LRVJORUwpOwogCWlmICghZmxjdGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2IHN0cnVjdHVyZS5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc291cmNlIG5vdCBmb3VuZC5cbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC04MDgsNiArODMxLDcgQEAKIAlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKIAluYW5kID0gJmZsY3RsLT5jaGlwOwogCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPnBkZXYgPSBwZGV2OwogCWZsY3RsLT5od2VjYyA9IHBkYXRhLT5oYXNfaHdlY2M7CiAKIAlmbGN0bF9yZWdpc3Rlcl9pbml0KGZsY3RsLCBwZGF0YS0+ZmxjbW5jcl92YWwpOwpAQCAtODI1LDYgKzg0OSwxMSBAQAogCW5hbmQtPnNlbGVjdF9jaGlwID0gZmxjdGxfc2VsZWN0X2NoaXA7CiAJbmFuZC0+Y21kZnVuYyA9IGZsY3RsX2NtZGZ1bmM7CiAKKwlpZiAocGRhdGEtPmZsY21uY3JfdmFsICYgU0VMXzE2QklUKSB7CisJCW5hbmQtPm9wdGlvbnMgfD0gTkFORF9CVVNXSURUSF8xNjsKKwkJbmFuZC0+cmVhZF93b3JkID0gZmxjdGxfcmVhZF93b3JkOworCX0KKwogCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwpAQCAtODQ2LDcgKzg3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgZmxjdGxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDRkNGNhZDMuLmI2ZGU3YjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJb3V0YihSWF9QUk9NLCBSWF9DTUQpOwogCQlpbmIoUlhfU1RBVFVTKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfbGlzdCB8fCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkvKiBNdWx0aWNhc3Qgb3IgYWxsIG11bHRpY2FzdCBpcyB0aGUgc2FtZSAqLwogCQlvdXRiKFJYX01VTFQsIFJYX0NNRCk7CiAJCWluYihSWF9TVEFUVVMpOwkJLyogQ2xlYXIgc3RhdHVzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDUuYyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKaW5kZXggOTI1N2Q3Yy4uMDRiNWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDUuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNS5jCkBAIC0xMjE2LDcgKzEyMTYsNyBAQAogc3RhdGljIHZvaWQgZWxwX3NldF9tY19saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZWxwX2RldmljZSAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTIyOSwxMSArMTIyOSwxMCBAQAogCQkvKiBzZW5kIGEgImxvYWQgbXVsdGljYXN0IGxpc3QiIGNvbW1hbmQgdG8gdGhlIGJvYXJkLCBtYXggMTAgYWRkcnMvY21kICovCiAJCS8qIGlmIG51bV9hZGRycz09MCB0aGUgbGlzdCB3aWxsIGJlIGNsZWFyZWQgKi8KIAkJYWRhcHRlci0+dHhfcGNiLmNvbW1hbmQgPSBDTURfTE9BRF9NVUxUSUNBU1RfTElTVDsKLQkJYWRhcHRlci0+dHhfcGNiLmxlbmd0aCA9IDYgKiBkZXYtPm1jX2NvdW50OwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7Ci0JCQltZW1jcHkoYWRhcHRlci0+dHhfcGNiLmRhdGEubXVsdGljYXN0W2ldLCBkbWktPmRtaV9hZGRyLCA2KTsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKLQkJfQorCQlhZGFwdGVyLT50eF9wY2IubGVuZ3RoID0gNiAqIG5ldGRldl9tY19jb3VudChkZXYpOworCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCisJCQltZW1jcHkoYWRhcHRlci0+dHhfcGNiLmRhdGEubXVsdGljYXN0W2krK10sIGRtaS0+ZG1pX2FkZHIsIDYpOwogCQlhZGFwdGVyLT5nb3RbQ01EX0xPQURfTVVMVElDQVNUX0xJU1RdID0gMDsKIAkJaWYgKCFzZW5kX3BjYihkZXYsICZhZGFwdGVyLT50eF9wY2IpKQogCQkJcHJfZXJyKCIlczogY291bGRuJ3Qgc2VuZCBzZXRfbXVsdGljYXN0IGNvbW1hbmRcbiIsIGRldi0+bmFtZSk7CkBAIC0xMjQ0LDcgKzEyNDMsNyBAQAogCQkJCVRJTUVPVVRfTVNHKF9fTElORV9fKTsKIAkJCX0KIAkJfQotCQlpZiAoZGV2LT5tY19jb3VudCkKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKIAkJCWFkYXB0ZXItPnR4X3BjYi5kYXRhLmNvbmZpZ3VyZSA9IE5PX0xPT1BCQUNLIHwgUkVDVl9CUk9BRCB8IFJFQ1ZfTVVMVEk7CiAJCWVsc2UJCS8qIG51bV9hZGRycyA9PSAwICovCiAJCQlhZGFwdGVyLT50eF9wY2IuZGF0YS5jb25maWd1cmUgPSBOT19MT09QQkFDSyB8IFJFQ1ZfQlJPQUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwOS5jIGIvZHJpdmVycy9uZXQvM2M1MDkuYwppbmRleCA5ZDg1ZWZjLi45MDI0MzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwOS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKQEAgLTExMTEsMTIgKzExMTEsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCWlmIChlbDNfZGVidWcgPiAxKSB7CiAJCXN0YXRpYyBpbnQgb2xkOwotCQlpZiAob2xkICE9IGRldi0+bWNfY291bnQpIHsKLQkJCW9sZCA9IGRldi0+bWNfY291bnQ7Ci0JCQlwcl9kZWJ1ZygiJXM6IFNldHRpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLCBkZXYtPm5hbWUsIGRldi0+bWNfY291bnQpOworCQlpZiAob2xkICE9IG1jX2NvdW50KSB7CisJCQlvbGQgPSBtY19jb3VudDsKKwkJCXByX2RlYnVnKCIlczogU2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCisJCQkJIGRldi0+bmFtZSwgbWNfY291bnQpOwogCQl9CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtMTEyNCw3ICsxMTI2LDcgQEAKIAkJb3V0dyhTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4TXVsdGljYXN0IHwgUnhCcm9hZGNhc3QgfCBSeFByb20sCiAJCQkgaW9hZGRyICsgRUwzX0NNRCk7CiAJfQotCWVsc2UgaWYgKGRldi0+bWNfY291bnQgfHwgKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSkgeworCWVsc2UgaWYgKG1jX2NvdW50IHx8IChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSkpIHsKIAkJb3V0dyhTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4TXVsdGljYXN0IHwgUnhCcm9hZGNhc3QsIGlvYWRkciArIEVMM19DTUQpOwogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUxNS5jIGIvZHJpdmVycy9uZXQvM2M1MTUuYwppbmRleCAwNjNiMDQ5Li4xZTg5OGIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCQkJcHJfZGVidWcoIiVzOiBTZXR0aW5nIHByb21pc2N1b3VzIG1vZGUuXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCW5ld19tb2RlID0gU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeE11bHRpY2FzdCB8IFJ4QnJvYWRjYXN0IHwgUnhQcm9tOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfbGlzdCkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQluZXdfbW9kZSA9IFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhNdWx0aWNhc3QgfCBSeEJyb2FkY2FzdDsKIAl9IGVsc2UKIAkJbmV3X21vZGUgPSBTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggMjdkODBjYS4uYmVlZDRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC02MjUsOCArNjI1LDggQEAKIAl2b2xhdGlsZSBzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0ICppYXNfY21kOwogCXZvbGF0aWxlIHN0cnVjdCB0ZHJfY21kX3N0cnVjdCAqdGRyX2NtZDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWNzZXR1cF9jbWRfc3RydWN0ICptY19jbWQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CisJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJcHRyID0gKHZvaWQgKikgKChjaGFyICopIHAtPnNjYiArIHNpemVvZihzdHJ1Y3Qgc2NiX3N0cnVjdCkpOwogCkBAIC03NzEsNyArNzcxLDcgQEAKIAkgKiBNdWx0aWNhc3Qgc2V0dXAKIAkgKi8KIAotCWlmIChkZXYtPm1jX2NvdW50KSB7CisJaWYgKG51bV9hZGRycykgewogCQkvKiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpczogZG8gd2UgcmVhbGx5IG5lZWQgbWVtb3J5IGFmdGVyIHRoZSBpbml0PyAqLwogCQlpbnQgbGVuID0gKChjaGFyICopIHAtPmlzY3AgLSAoY2hhciAqKSBwdHIgLSA4KSAvIDY7CiAJCWlmIChsZW4gPD0gMCkgewpAQCAtNzg3LDEwICs3ODcsOSBAQAogCQkJbWNfY21kLT5jbWRfY21kID0gQ01EX01DU0VUVVAgfCBDTURfTEFTVDsKIAkJCW1jX2NtZC0+Y21kX2xpbmsgPSAweGZmZmY7CiAJCQltY19jbWQtPm1jX2NudCA9IG51bV9hZGRycyAqIDY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FkZHJzOyBpKyspIHsKLQkJCQltZW1jcHkoKGNoYXIgKikgbWNfY21kLT5tY19saXN0W2ldLCBkbWktPmRtaV9hZGRyLCA2KTsKLQkJCQlkbWkgPSBkbWktPm5leHQ7Ci0JCQl9CisJCQlpID0gMDsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQorCQkJCW1lbWNweSgoY2hhciAqKSBtY19jbWQtPm1jX2xpc3RbaSsrXSwgZG1pLT5kbWlfYWRkciwgNik7CiAJCQlwLT5zY2ItPmNibF9vZmZzZXQgPSBtYWtlMTYobWNfY21kKTsKIAkJCXAtPnNjYi0+Y21kID0gQ1VDX1NUQVJUOwogCQkJZWxtY19pZF9hdHRuNTg2KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAzNmM0MTkxLi41YzA3YjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTE1MjYsMzIgKzE1MjYsMjkgQEAKIAogCWlmICgoZGV2LT5mbGFncyZJRkZfUFJPTUlTQykgfHwKIAkgICAgKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gMTApCisJICAgIG5ldGRldl9tY19jb3VudChkZXYpID4gMTApCiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCWZpbHQgfD0gMTsKLQllbHNlIGlmKGRldi0+bWNfY291bnQpCisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKQogCXsKIAkJdW5zaWduZWQgY2hhciBibG9ja1s2Ml07CiAJCXVuc2lnbmVkIGNoYXIgKmJwOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtYz1kZXYtPm1jX2xpc3Q7Ci0KLQkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1jOwogCiAJCWlmKHJldHJ5PT0wKQogCQkJbHAtPm1jX2xpc3RfdmFsaWQgPSAwOwogCQlpZighbHAtPm1jX2xpc3RfdmFsaWQpCiAJCXsKIAkJCWJsb2NrWzFdPTA7Ci0JCQlibG9ja1swXT1kZXYtPm1jX2NvdW50OworCQkJYmxvY2tbMF09bmV0ZGV2X21jX2NvdW50KGRldik7CiAJCQlicD1ibG9jaysyOwogCi0JCQlmb3IoaT0wO2k8ZGV2LT5tY19jb3VudDtpKyspCi0JCQl7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWMsIGRldikgewogCQkJCW1lbWNweShicCwgZG1jLT5kbWlfYWRkciwgNik7CiAJCQkJYnArPTY7Ci0JCQkJZG1jPWRtYy0+bmV4dDsKIAkJCX0KLQkJCWlmKG1jMzJfY29tbWFuZF9ub3dhaXQoZGV2LCAyLCBibG9jaywgMis2KmRldi0+bWNfY291bnQpPT0tMSkKKwkJCWlmKG1jMzJfY29tbWFuZF9ub3dhaXQoZGV2LCAyLCBibG9jaywKKwkJCQkJICAgICAgIDIrNipuZXRkZXZfbWNfY291bnQoZGV2KSk9PS0xKQogCQkJewogCQkJCWxwLT5tY19yZWxvYWRfd2FpdCA9IDE7CiAJCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggMzlkYjBlOS4uZjk2NTQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0zNzUsNyArMzc1LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZvcnRleF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodm9ydGV4X3BjaV90YmwpID0gewogCXsgMHgxMEI3LCAweDU5MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIXzNDNTkwIH0sCiAJeyAweDEwQjcsIDB4NTkyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfM0M1OTIgfSwKIAl7IDB4MTBCNywgMHg1OTcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF8zQzU5NyB9LApAQCAtMjk3MCw3ICsyOTcwLDcgQEAKIAkJaWYgKHZvcnRleF9kZWJ1ZyA+IDMpCiAJCQlwcl9ub3RpY2UoIiVzOiBTZXR0aW5nIHByb21pc2N1b3VzIG1vZGUuXG4iLCBkZXYtPm5hbWUpOwogCQluZXdfbW9kZSA9IFNldFJ4RmlsdGVyfFJ4U3RhdGlvbnxSeE11bHRpY2FzdHxSeEJyb2FkY2FzdHxSeFByb207Ci0JfSBlbHNlCWlmICgoZGV2LT5tY19saXN0KSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZQlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJbmV3X21vZGUgPSBTZXRSeEZpbHRlcnxSeFN0YXRpb258UnhNdWx0aWNhc3R8UnhCcm9hZGNhc3Q7CiAJfSBlbHNlCiAJCW5ld19tb2RlID0gU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeEJyb2FkY2FzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0Lzc5OTAuYyBiL2RyaXZlcnMvbmV0Lzc5OTAuYwppbmRleCBiMWU1NzY0Li40ZTlhNWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC83OTkwLmMKKysrIGIvZHJpdmVycy9uZXQvNzk5MC5jCkBAIC01OTUsOSArNTk1LDggQEAKICAgICAgICAgc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICAgICAgdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7CiAgICAgICAgIHZvbGF0aWxlIHUxNiAqbWNhc3RfdGFibGUgPSAodTE2ICopJmliLT5maWx0ZXI7Ci0gICAgICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKICAgICAgICAgY2hhciAqYWRkcnM7Ci0gICAgICAgIGludCBpOwogICAgICAgICB1MzIgY3JjOwogCiAgICAgICAgIC8qIHNldCBhbGwgbXVsdGljYXN0IGJpdHMgKi8KQEAgLTYxMSw5ICs2MTAsOCBAQAogICAgICAgICBpYi0+ZmlsdGVyIFsxXSA9IDA7CiAKICAgICAgICAgLyogQWRkIGFkZHJlc3NlcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKXsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogICAgICAgICAgICAgICAgIGFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLSAgICAgICAgICAgICAgICBkbWkgICA9IGRtaS0+bmV4dDsKIAogICAgICAgICAgICAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogICAgICAgICAgICAgICAgIGlmICghKCphZGRycyAmIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCAzZjQ1MmJjYi4uM2Q0NDA2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC00Niw2ICs0Niw4IEBACiAKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJCSI4MTM5Y3AiCiAjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4zIgogI2RlZmluZSBEUlZfUkVMREFURQkJIk1hciAyMiwgMjAwNCIKQEAgLTEwNCw4ICsxMDYsNiBAQAogbW9kdWxlX3BhcmFtKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDIChtdWx0aWNhc3RfZmlsdGVyX2xpbWl0LCAiODEzOWNwOiBtYXhpbXVtIG51bWJlciBvZiBmaWx0ZXJlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIik7CiAKLSNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgotCiAjZGVmaW5lIENQX0RFRl9NU0dfRU5BQkxFCShORVRJRl9NU0dfRFJWCQl8IFwKIAkJCQkgTkVUSUZfTVNHX1BST0JFIAl8IFwKIAkJCQkgTkVUSUZfTVNHX0xJTkspCkBAIC0zOTQsNyArMzk0LDcgQEAKIHN0YXRpYyBpbnQgY3Bfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjcF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3BfcGNpX3RibCkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywJUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkpLCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RUVEVDSCwJUENJX0RFVklDRV9JRF9UVFRFQ0hfTUMzMjIpLCB9LAogCXsgfSwKQEAgLTQ3MCw5ICs0NzAsOCBAQAogc3RhdGljIHZvaWQgY3BfcnhfZXJyX2FjY3QgKHN0cnVjdCBjcF9wcml2YXRlICpjcCwgdW5zaWduZWQgcnhfdGFpbCwKIAkJCSAgICB1MzIgc3RhdHVzLCB1MzIgbGVuKQogewotCWlmIChuZXRpZl9tc2dfcnhfZXJyIChjcCkpCi0JCXByX2RlYnVnKCIlczogcnggZXJyLCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKLQkJCWNwLT5kZXYtPm5hbWUsIHJ4X3RhaWwsIHN0YXR1cywgbGVuKTsKKwluZXRpZl9kYmcoY3AsIHJ4X2VyciwgY3AtPmRldiwgInJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCisJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4pOwogCWNwLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWlmIChzdGF0dXMgJiBSeEVyckZyYW1lKQogCQljcC0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKQEAgLTU0NSw5ICs1NDQsOCBAQAogCQkJZ290byByeF9uZXh0OwogCQl9CiAKLQkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoY3ApKQotCQkJcHJfZGVidWcoIiVzOiByeCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHJ4X3RhaWwsIHN0YXR1cywgbGVuKTsKKwkJbmV0aWZfZGJnKGNwLCByeF9zdGF0dXMsIGRldiwgInJ4IHNsb3QgJWQgc3RhdHVzIDB4JXggbGVuICVkXG4iLAorCQkJICByeF90YWlsLCBzdGF0dXMsIGxlbik7CiAKIAkJbmV3X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LCBidWZsZW4pOwogCQlpZiAoIW5ld19za2IpIHsKQEAgLTYyMSw5ICs2MTksOCBAQAogCWlmICghc3RhdHVzIHx8IChzdGF0dXMgPT0gMHhGRkZGKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKLQkJcHJfZGVidWcoIiVzOiBpbnRyLCBzdGF0dXMgJTA0eCBjbWQgJTAyeCBjcGNtZCAlMDR4XG4iLAotCQkgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzLCBjcHI4KENtZCksIGNwcjE2KENwQ21kKSk7CisJbmV0aWZfZGJnKGNwLCBpbnRyLCBkZXYsICJpbnRyLCBzdGF0dXMgJTA0eCBjbWQgJTAyeCBjcGNtZCAlMDR4XG4iLAorCQkgIHN0YXR1cywgY3ByOChDbWQpLCBjcHIxNihDcENtZCkpOwogCiAJY3B3MTYoSW50clN0YXR1cywgc3RhdHVzICYgfmNwX3J4X2ludHJfbWFzayk7CiAKQEAgLTY1NCw4ICs2NTEsOCBAQAogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGNwLT5wZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChjcC0+cGRldiwgUENJX1NUQVRVUywgcGNpX3N0YXR1cyk7Ci0JCXByX2VycigiJXM6IFBDSSBidXMgZXJyb3IsIHN0YXR1cz0lMDR4LCBQQ0kgc3RhdHVzPSUwNHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgcGNpX3N0YXR1cyk7CisJCW5ldGRldl9lcnIoZGV2LCAiUENJIGJ1cyBlcnJvciwgc3RhdHVzPSUwNHgsIFBDSSBzdGF0dXM9JTA0eFxuIiwKKwkJCSAgIHN0YXR1cywgcGNpX3N0YXR1cyk7CiAKIAkJLyogVE9ETzogcmVzZXQgaGFyZHdhcmUgKi8KIAl9CkBAIC03MDAsOSArNjk3LDggQEAKIAogCQlpZiAoc3RhdHVzICYgTGFzdEZyYWcpIHsKIAkJCWlmIChzdGF0dXMgJiAoVHhFcnJvciB8IFR4RklGT1VuZGVyKSkgewotCQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGNwKSkKLQkJCQkJcHJfZGVidWcoIiVzOiB0eCBlcnIsIHN0YXR1cyAweCV4XG4iLAotCQkJCQkgICAgICAgY3AtPmRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQluZXRpZl9kYmcoY3AsIHR4X2VyciwgY3AtPmRldiwKKwkJCQkJICAidHggZXJyLCBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAkJCQljcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgVHhPV0MpCiAJCQkJCWNwLT5kZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKQEAgLTcxNyw4ICs3MTMsOCBAQAogCQkJCQkoKHN0YXR1cyA+PiBUeENvbENudFNoaWZ0KSAmIFR4Q29sQ250TWFzayk7CiAJCQkJY3AtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWNwLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJCWlmIChuZXRpZl9tc2dfdHhfZG9uZShjcCkpCi0JCQkJCXByX2RlYnVnKCIlczogdHggZG9uZSwgc2xvdCAlZFxuIiwgY3AtPmRldi0+bmFtZSwgdHhfdGFpbCk7CisJCQkJbmV0aWZfZGJnKGNwLCB0eF9kb25lLCBjcC0+ZGV2LAorCQkJCQkgICJ0eCBkb25lLCBzbG90ICVkXG4iLCB0eF90YWlsKTsKIAkJCX0KIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KQEAgLTc1Miw4ICs3NDgsNyBAQAogCWlmIChUWF9CVUZGU19BVkFJTChjcCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBpbnRyX2ZsYWdzKTsKLQkJcHJfZXJyKFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTg3OCw5ICs4NzMsOCBAQAogCQl3bWIoKTsKIAl9CiAJY3AtPnR4X2hlYWQgPSBlbnRyeTsKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChjcCkpCi0JCXByX2RlYnVnKCIlczogdHggcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBza2ItPmxlbik7CisJbmV0aWZfZGJnKGNwLCB0eF9xdWV1ZWQsIGNwLT5kZXYsICJ0eCBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZFxuIiwKKwkJICBlbnRyeSwgc2tiLT5sZW4pOwogCWlmIChUWF9CVUZGU19BVkFJTChjcCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC04OTksNyArODkzLDcgQEAKIHsKIAlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwotCWludCBpLCByeF9tb2RlOworCWludCByeF9tb2RlOwogCXUzMiB0bXA7CiAKIAkvKiBOb3RlOiBkbyBub3QgcmVvcmRlciwgR0NDIGlzIGNsZXZlciBhYm91dCBjb21tb24gc3RhdGVtZW50cy4gKi8KQEAgLTkwOSw3ICs5MDMsNyBAQAogCQkgICAgQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzIHwKIAkJICAgIEFjY2VwdEFsbFBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CkBAIC05MTgsOCArOTEyLDcgQEAKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CkBAIC05OTMsNyArOTg2LDcgQEAKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMTApOwogCX0KIAotCXByX2VycigiJXM6IGhhcmR3YXJlIHJlc2V0IHRpbWVvdXRcbiIsIGNwLT5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIoY3AtPmRldiwgImhhcmR3YXJlIHJlc2V0IHRpbWVvdXRcbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Bfc3RhcnRfaHcgKHN0cnVjdCBjcF9wcml2YXRlICpjcCkKQEAgLTExNjAsOCArMTE1Myw3IEBACiAJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmM7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoY3ApKQotCQlwcl9kZWJ1ZygiJXM6IGVuYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9kYmcoY3AsIGlmdXAsIGRldiwgImVuYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlyYyA9IGNwX2FsbG9jX3JpbmdzKGNwKTsKIAlpZiAocmMpCkBAIC0xMTk1LDggKzExODcsNyBAQAogCiAJbmFwaV9kaXNhYmxlKCZjcC0+bmFwaSk7CiAKLQlpZiAobmV0aWZfbXNnX2lmZG93bihjcCkpCi0JCXByX2RlYnVnKCIlczogZGlzYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9kYmcoY3AsIGlmZG93biwgZGV2LCAiZGlzYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTIxOSw5ICsxMjEwLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAotCXByX3dhcm5pbmcoIiVzOiBUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTJ4ICU0eCAlNHggJTR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGNwcjgoQ21kKSwgY3ByMTYoQ3BDbWQpLAotCSAgICAgICBjcHIxNihJbnRyU3RhdHVzKSwgY3ByMTYoSW50ck1hc2spKTsKKwluZXRkZXZfd2FybihkZXYsICJUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTJ4ICU0eCAlNHggJTR4XG4iLAorCQkgICAgY3ByOChDbWQpLCBjcHIxNihDcENtZCksCisJCSAgICBjcHIxNihJbnRyU3RhdHVzKSwgY3ByMTYoSW50ck1hc2spKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xODc0LDggKzE4NjUsOCBAQAogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9SRUFMVEVLICYmCiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAmJiBwZGV2LT5yZXZpc2lvbiA8IDB4MjApIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwKLQkJCSAgICJUaGlzIChpZCAlMDR4OiUwNHggcmV2ICUwMngpIGlzIG5vdCBhbiA4MTM5QysgY29tcGF0aWJsZSBjaGlwLCB1c2UgODEzOXRvb1xuIiwKLQkJICAgICAgICAgICBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGRldi0+cmV2aXNpb24pOworCQkJICJUaGlzIChpZCAlMDR4OiUwNHggcmV2ICUwMngpIGlzIG5vdCBhbiA4MTM5QysgY29tcGF0aWJsZSBjaGlwLCB1c2UgODEzOXRvb1xuIiwKKwkJCSBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGRldi0+cmV2aXNpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE5MzMsMTQgKzE5MjQsMTMgQEAKIAkJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQlpZiAocmMpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkgICAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZy5cbiIpOworCQkJCSJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF9yZXM7CiAJCX0KIAkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChyYykgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSAgICJObyB1c2FibGUgY29uc2lzdGVudCBETUEgY29uZmlndXJhdGlvbiwgIgotCQkJICAgICAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJCQkiTm8gdXNhYmxlIGNvbnNpc3RlbnQgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF9yZXM7CiAJCX0KIAl9CkBAIC0xOTUyLDcgKzE5NDIsNyBAQAogCWlmICghcmVncykgewogCQlyYyA9IC1FSU87CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVMeEAlTHgpXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lhZGRyKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CkBAIC0xOTkwLDExICsxOTgwLDggQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAotCXByX2luZm8oIiVzOiBSVEwtODEzOUMrIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwKLQkJZGV2LT5uYW1lLAotCQlkZXYtPmJhc2VfYWRkciwKLQkJZGV2LT5kZXZfYWRkciwKLQkJZGV2LT5pcnEpOworCW5ldGRldl9pbmZvKGRldiwgIlJUTC04MTM5QysgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAorCQkgICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggMjVmNzMzOS4uYjRlZmM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtODksNiArODksOCBAQAogCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJIjgxMzl0b28iCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjkuMjgiCiAKQEAgLTExMSw3ICsxMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2RlZmluZSBSVEw4MTM5X0RSSVZFUl9OQU1FICAgRFJWX05BTUUgIiBGYXN0IEV0aGVybmV0IGRyaXZlciAiIERSVl9WRVJTSU9OCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCiAKIC8qIERlZmF1bHQgTWVzc2FnZSBsZXZlbCAqLwogI2RlZmluZSBSVEw4MTM5X0RFRl9NU0dfRU5BQkxFICAgKE5FVElGX01TR19EUlYgICB8IFwKQEAgLTEzMCw5ICsxMzEsOSBAQAogIyAgZGVmaW5lIGFzc2VydChleHByKSBkbyB7fSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgYXNzZXJ0KGV4cHIpIFwKLSAgICAgICAgaWYodW5saWtlbHkoIShleHByKSkpIHsJCQkJICAgICAgICBcCi0gICAgICAgIHByX2VycigiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwJXAotCSNleHByLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsJCQlcCisgICAgICAgIGlmICh1bmxpa2VseSghKGV4cHIpKSkgewkJCQlcCisJCXByX2VycigiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwJXAorCQkgICAgICAgI2V4cHIsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yMzEsNyArMjMyLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxMzlfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0bDgxMzlfcGNpX3RibCkgPSB7CiAJezB4MTBlYywgMHg4MTM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCiAJezB4MTBlYywgMHg4MTM4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCiAJezB4MTExMywgMHgxMjExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCkBAIC05NTcsNyArOTU4LDcgQEAKIAkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5ICYmCiAJICAgIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEhFUk9TICYmCiAJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkpIHsKLQkJcHJfaW5mbygiODEzOXRvbzogT1FPIE1vZGVsIDIgZGV0ZWN0ZWQuIEZvcmNpbmcgUElPXG4iKTsKKwkJcHJfaW5mbygiT1FPIE1vZGVsIDIgZGV0ZWN0ZWQuIEZvcmNpbmcgUElPXG4iKTsKIAkJdXNlX2lvID0gMTsKIAl9CiAKQEAgLTEwMTAsMjEgKzEwMTEsMTkgQEAKIAl0cC0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAKIAkvKiBkZXYgaXMgZnVsbHkgc2V0IHVwIGFuZCByZWFkeSB0byB1c2Ugbm93ICovCi0JcHJfZGVidWcoImFib3V0IHRvIHJlZ2lzdGVyIGRldmljZSBuYW1lZCAlcyAoJXApLi4uXG4iLCBkZXYtPm5hbWUsIGRldik7CisJcHJfZGVidWcoImFib3V0IHRvIHJlZ2lzdGVyIGRldmljZSBuYW1lZCAlcyAoJXApLi4uXG4iLAorCQkgZGV2LT5uYW1lLCBkZXYpOwogCWkgPSByZWdpc3Rlcl9uZXRkZXYgKGRldik7CiAJaWYgKGkpIGdvdG8gZXJyX291dDsKIAogCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgZGV2KTsKIAotCXByX2luZm8oIiVzOiAlcyBhdCAweCVseCwgJXBNLCBJUlEgJWRcbiIsCi0JCWRldi0+bmFtZSwKLQkJYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAotCQlkZXYtPmJhc2VfYWRkciwKLQkJZGV2LT5kZXZfYWRkciwKLQkJZGV2LT5pcnEpOworCW5ldGRldl9pbmZvKGRldiwgIiVzIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwKKwkJICAgIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKKwkJICAgIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CiAKLQlwcl9kZWJ1ZygiJXM6ICBJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICclcydcbiIsCi0JCWRldi0+bmFtZSwgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSk7CisJbmV0ZGV2X2RiZyhkZXYsICJJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICclcydcbiIsCisJCSAgIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUpOwogCiAJLyogRmluZCB0aGUgY29ubmVjdGVkIE1JSSB4Y3Zycy4KIAkgICBEb2luZyB0aGlzIGluIG9wZW4oKSB3b3VsZCBhbGxvdyBkZXRlY3RpbmcgZXh0ZXJuYWwgeGN2cnMgbGF0ZXIsIGJ1dApAQCAtMTAzNywxMyArMTAzNiwxMiBAQAogCQkJaWYgKG1paV9zdGF0dXMgIT0gMHhmZmZmICAmJiAgbWlpX3N0YXR1cyAhPSAweDAwMDApIHsKIAkJCQl1MTYgYWR2ZXJ0aXNpbmcgPSBtZGlvX3JlYWQoZGV2LCBwaHksIDQpOwogCQkJCXRwLT5waHlzW3BoeV9pZHgrK10gPSBwaHk7Ci0JCQkJcHJfaW5mbygiJXM6IE1JSSB0cmFuc2NlaXZlciAlZCBzdGF0dXMgMHglNC40eCBhZHZlcnRpc2luZyAlNC40eC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgcGh5LCBtaWlfc3RhdHVzLCBhZHZlcnRpc2luZyk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAiTUlJIHRyYW5zY2VpdmVyICVkIHN0YXR1cyAweCUwNHggYWR2ZXJ0aXNpbmcgJTA0eFxuIiwKKwkJCQkJICAgIHBoeSwgbWlpX3N0YXR1cywgYWR2ZXJ0aXNpbmcpOwogCQkJfQogCQl9CiAJCWlmIChwaHlfaWR4ID09IDApIHsKLQkJCXByX2luZm8oIiVzOiBObyBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kISBBc3N1bWluZyBTWU0gdHJhbnNjZWl2ZXIuXG4iLAotCQkJCSAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJObyBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kISBBc3N1bWluZyBTWU0gdHJhbnNjZWl2ZXJcbiIpOwogCQkJdHAtPnBoeXNbMF0gPSAzMjsKIAkJfQogCX0gZWxzZQpAQCAtMTA2MiwxNSArMTA2MCwxNSBAQAogCWlmIChib2FyZF9pZHggPCBNQVhfVU5JVFMgICYmICBmdWxsX2R1cGxleFtib2FyZF9pZHhdID4gMCkKIAkJdHAtPm1paS5mdWxsX2R1cGxleCA9IGZ1bGxfZHVwbGV4W2JvYXJkX2lkeF07CiAJaWYgKHRwLT5taWkuZnVsbF9kdXBsZXgpIHsKLQkJcHJfaW5mbygiJXM6IE1lZGlhIHR5cGUgZm9yY2VkIHRvIEZ1bGwgRHVwbGV4LlxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiTWVkaWEgdHlwZSBmb3JjZWQgdG8gRnVsbCBEdXBsZXhcbiIpOwogCQkvKiBDaGFuZ2luZyB0aGUgTUlJLWFkdmVydGlzZWQgbWVkaWEgYmVjYXVzZSBtaWdodCBwcmV2ZW50CiAJCSAgIHJlLWNvbm5lY3Rpb24uICovCiAJCXRwLT5taWkuZm9yY2VfbWVkaWEgPSAxOwogCX0KIAlpZiAodHAtPmRlZmF1bHRfcG9ydCkgewotCQlwcl9pbmZvKCIgIEZvcmNpbmcgJWRNYnBzICVzLWR1cGxleCBvcGVyYXRpb24uXG4iLAotCQkJICAgKG9wdGlvbiAmIDB4MjAgPyAxMDAgOiAxMCksCi0JCQkgICAob3B0aW9uICYgMHgxMCA/ICJmdWxsIiA6ICJoYWxmIikpOworCQluZXRkZXZfaW5mbyhkZXYsICIgIEZvcmNpbmcgJWRNYnBzICVzLWR1cGxleCBvcGVyYXRpb25cbiIsCisJCQkgICAgKG9wdGlvbiAmIDB4MjAgPyAxMDAgOiAxMCksCisJCQkgICAgKG9wdGlvbiAmIDB4MTAgPyAiZnVsbCIgOiAiaGFsZiIpKTsKIAkJbWRpb193cml0ZShkZXYsIHRwLT5waHlzWzBdLCAwLAogCQkJCSAgICgob3B0aW9uICYgMHgyMCkgPyAweDIwMDAgOiAwKSB8IAkvKiAxMDBNYnBzPyAqLwogCQkJCSAgICgob3B0aW9uICYgMHgxMCkgPyAweDAxMDAgOiAwKSk7IC8qIEZ1bGwgZHVwbGV4PyAqLwpAQCAtMTMzMCwxMiArMTMyOCwxMiBAQAogCXJ0bDgxMzlfaHdfc3RhcnQgKGRldik7CiAJbmV0aWZfc3RhcnRfcXVldWUgKGRldik7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAodHApKQotCQlwcl9kZWJ1ZygiJXM6IHJ0bDgxMzlfb3BlbigpIGlvYWRkciAlI2xseCBJUlEgJWQiCi0JCQkiIEdQIFBpbnMgJTIuMnggJXMtZHVwbGV4LlxuIiwgZGV2LT5uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQgKHRwLT5wY2lfZGV2LCAxKSwKLQkJCWRldi0+aXJxLCBSVExfUjggKE1lZGlhU3RhdHVzKSwKLQkJCXRwLT5taWkuZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOworCW5ldGlmX2RiZyh0cCwgaWZ1cCwgZGV2LAorCQkgICIlcygpIGlvYWRkciAlI2xseCBJUlEgJWQgR1AgUGlucyAlMDJ4ICVzLWR1cGxleFxuIiwKKwkJICBfX2Z1bmNfXywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydCAodHAtPnBjaV9kZXYsIDEpLAorCQkgIGRldi0+aXJxLCBSVExfUjggKE1lZGlhU3RhdHVzKSwKKwkJICB0cC0+bWlpLmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKIAogCXJ0bDgxMzlfc3RhcnRfdGhyZWFkKHRwKTsKIApAQCAtMTM5Myw3ICsxMzkxLDcgQEAKIAkJUlRMX1c4IChDb25maWczLCBSVExfUjggKENvbmZpZzMpICYgfkNmZzNfTWFnaWMpOwogCX0KIAotCXByX2RlYnVnKCJpbml0IGJ1ZmZlciBhZGRyZXNzZXNcbiIpOworCW5ldGRldl9kYmcoZGV2LCAiaW5pdCBidWZmZXIgYWRkcmVzc2VzXG4iKTsKIAogCS8qIExvY2sgQ29uZmlnWzAxMjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KIAlSVExfVzggKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CkBAIC0xNTU1LDE0ICsxNTUzLDExIEBACiAJCQl0cC0+bWlpLmZ1bGxfZHVwbGV4ID0gZHVwbGV4OwogCiAJCQlpZiAobWlpX2xwYSkgewotCQkJCXByX2luZm8oIiVzOiBTZXR0aW5nICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkIGxpbmsiCi0JCQkJCSIgcGFydG5lciBhYmlsaXR5IG9mICU0LjR4LlxuIiwKLQkJCQkJZGV2LT5uYW1lLAotCQkJCQl0cC0+bWlpLmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAotCQkJCQl0cC0+cGh5c1swXSwgbWlpX2xwYSk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAiU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJICMlZCBsaW5rIHBhcnRuZXIgYWJpbGl0eSBvZiAlMDR4XG4iLAorCQkJCQkgICAgdHAtPm1paS5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJCQkJICAgIHRwLT5waHlzWzBdLCBtaWlfbHBhKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJfaW5mbygiJXM6IG1lZGlhIGlzIHVuY29ubmVjdGVkLCBsaW5rIGRvd24sIG9yIGluY29tcGF0aWJsZSBjb25uZWN0aW9uXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCW5ldGRldl9pbmZvKGRldiwgIm1lZGlhIGlzIHVuY29ubmVjdGVkLCBsaW5rIGRvd24sIG9yIGluY29tcGF0aWJsZSBjb25uZWN0aW9uXG4iKTsKIAkJCX0KICNpZiAwCiAJCQlSVExfVzggKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKQEAgLTE1NzYsMTMgKzE1NzEsMTIgQEAKIAogCXJ0bDgxMzlfdHVuZV90d2lzdGVyIChkZXYsIHRwKTsKIAotCXByX2RlYnVnKCIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssIExpbmsgcGFydG5lciAlNC40eC5cbiIsCi0JCSBkZXYtPm5hbWUsIFJUTF9SMTYgKE5XYXlMUEFSKSk7Ci0JcHJfZGVidWcoIiVzOiAgT3RoZXIgcmVnaXN0ZXJzIGFyZSBJbnRNYXNrICU0LjR4IEludFN0YXR1cyAlNC40eFxuIiwKLQkJIGRldi0+bmFtZSwgUlRMX1IxNiAoSW50ck1hc2spLCBSVExfUjE2IChJbnRyU3RhdHVzKSk7Ci0JcHJfZGVidWcoIiVzOiAgQ2hpcCBjb25maWcgJTIuMnggJTIuMnguXG4iLAotCQkgZGV2LT5uYW1lLCBSVExfUjggKENvbmZpZzApLAotCQkgUlRMX1I4IChDb25maWcxKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJNZWRpYSBzZWxlY3Rpb24gdGljaywgTGluayBwYXJ0bmVyICUwNHhcbiIsCisJCSAgIFJUTF9SMTYoTldheUxQQVIpKTsKKwluZXRkZXZfZGJnKGRldiwgIk90aGVyIHJlZ2lzdGVycyBhcmUgSW50TWFzayAlMDR4IEludFN0YXR1cyAlMDR4XG4iLAorCQkgICBSVExfUjE2KEludHJNYXNrKSwgUlRMX1IxNihJbnRyU3RhdHVzKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJDaGlwIGNvbmZpZyAlMDJ4ICUwMnhcbiIsCisJCSAgIFJUTF9SOChDb25maWcwKSwgUlRMX1I4KENvbmZpZzEpKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODEzOV90aHJlYWQgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE2NDAsMTcgKzE2MzQsMTcgQEAKIAlpbnQgaTsKIAl1OCB0bXA4OwogCi0JcHJfZGVidWcoIiVzOiBUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTIuMnggJTQuNHggJTQuNHggbWVkaWEgJTIuMnguXG4iLAotCQlkZXYtPm5hbWUsIFJUTF9SOCAoQ2hpcENtZCksCi0JCVJUTF9SMTYoSW50clN0YXR1cyksIFJUTF9SMTYoSW50ck1hc2spLCBSVExfUjgoTWVkaWFTdGF0dXMpKTsKKwluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IHRpbWVvdXQsIHN0YXR1cyAlMDJ4ICUwNHggJTA0eCBtZWRpYSAlMDJ4XG4iLAorCQkgICBSVExfUjgoQ2hpcENtZCksIFJUTF9SMTYoSW50clN0YXR1cyksCisJCSAgIFJUTF9SMTYoSW50ck1hc2spLCBSVExfUjgoTWVkaWFTdGF0dXMpKTsKIAkvKiBFbWl0IGluZm8gdG8gZmlndXJlIG91dCB3aGF0IHdlbnQgd3JvbmcuICovCi0JcHJfZGVidWcoIiVzOiBUeCBxdWV1ZSBzdGFydCBlbnRyeSAlbGQgIGRpcnR5IGVudHJ5ICVsZC5cbiIsCi0JCWRldi0+bmFtZSwgdHAtPmN1cl90eCwgdHAtPmRpcnR5X3R4KTsKKwluZXRkZXZfZGJnKGRldiwgIlR4IHF1ZXVlIHN0YXJ0IGVudHJ5ICVsZCAgZGlydHkgZW50cnkgJWxkXG4iLAorCQkgICB0cC0+Y3VyX3R4LCB0cC0+ZGlydHlfdHgpOwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKQotCQlwcl9kZWJ1ZygiJXM6ICBUeCBkZXNjcmlwdG9yICVkIGlzICU4LjhseC4lc1xuIiwKLQkJCWRldi0+bmFtZSwgaSwgUlRMX1IzMiAoVHhTdGF0dXMwICsgKGkgKiA0KSksCi0JCQlpID09IHRwLT5kaXJ0eV90eCAlIE5VTV9UWF9ERVNDID8KLQkJCQkiIChxdWV1ZSBoZWFkKSIgOiAiIik7CisJCW5ldGRldl9kYmcoZGV2LCAiVHggZGVzY3JpcHRvciAlZCBpcyAlMDhseCVzXG4iLAorCQkJICAgaSwgUlRMX1IzMihUeFN0YXR1czAgKyAoaSAqIDQpKSwKKwkJCSAgIGkgPT0gdHAtPmRpcnR5X3R4ICUgTlVNX1RYX0RFU0MgPworCQkJICAgIiAocXVldWUgaGVhZCkiIDogIiIpOwogCiAJdHAtPnhzdGF0cy50eF90aW1lb3V0cysrOwogCkBAIC0xNzI5LDkgKzE3MjMsOCBAQAogCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZCh0cCkpCi0JCXByX2RlYnVnKCIlczogUXVldWVkIFR4IHBhY2tldCBzaXplICV1IHRvIHNsb3QgJWQuXG4iLAotCQkJZGV2LT5uYW1lLCBsZW4sIGVudHJ5KTsKKwluZXRpZl9kYmcodHAsIHR4X3F1ZXVlZCwgZGV2LCAiUXVldWVkIFR4IHBhY2tldCBzaXplICV1IHRvIHNsb3QgJWRcbiIsCisJCSAgbGVuLCBlbnRyeSk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTc2MCw5ICsxNzUzLDggQEAKIAkJLyogTm90ZTogVHhDYXJyaWVyTG9zdCBpcyBhbHdheXMgYXNzZXJ0ZWQgYXQgMTAwbWJwcy4gKi8KIAkJaWYgKHR4c3RhdHVzICYgKFR4T3V0T2ZXaW5kb3cgfCBUeEFib3J0ZWQpKSB7CiAJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KLQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHRwKSkKLQkJCQlwcl9kZWJ1ZygiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQlkZXYtPm5hbWUsIHR4c3RhdHVzKTsKKwkJCW5ldGlmX2RiZyh0cCwgdHhfZXJyLCBkZXYsICJUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJICB0eHN0YXR1cyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4c3RhdHVzICYgVHhBYm9ydGVkKSB7CiAJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwpAQCAtMTc5Miw4ICsxNzg0LDggQEAKIAogI2lmbmRlZiBSVEw4MTM5X05ERUJVRwogCWlmICh0cC0+Y3VyX3R4IC0gZGlydHlfdHggPiBOVU1fVFhfREVTQykgewotCQlwcl9lcnIoIiVzOiBPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlbGQgdnMuICVsZC5cbiIsCi0JCSAgICAgICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CisJCW5ldGRldl9lcnIoZGV2LCAiT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWxkIHZzLiAlbGRcbiIsCisJCQkgICBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CiAJCWRpcnR5X3R4ICs9IE5VTV9UWF9ERVNDOwogCX0KICNlbmRpZiAvKiBSVEw4MTM5X05ERUJVRyAqLwpAQCAtMTgxNiwxNCArMTgwOCwxMyBAQAogCWludCB0bXBfd29yazsKICNlbmRpZgogCi0JaWYgKG5ldGlmX21zZ19yeF9lcnIgKHRwKSkKLQkJcHJfZGVidWcoIiVzOiBFdGhlcm5ldCBmcmFtZSBoYWQgZXJyb3JzLCBzdGF0dXMgJTguOHguXG4iLAotCQkJZGV2LT5uYW1lLCByeF9zdGF0dXMpOworCW5ldGlmX2RiZyh0cCwgcnhfZXJyLCBkZXYsICJFdGhlcm5ldCBmcmFtZSBoYWQgZXJyb3JzLCBzdGF0dXMgJTA4eFxuIiwKKwkJICByeF9zdGF0dXMpOwogCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJaWYgKCEocnhfc3RhdHVzICYgUnhTdGF0dXNPSykpIHsKIAkJaWYgKHJ4X3N0YXR1cyAmIFJ4VG9vTG9uZykgewotCQkJcHJfZGVidWcoIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUsIHN0YXR1cyAlNC40eCFcbiIsCi0JCQkgCWRldi0+bmFtZSwgcnhfc3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lLCBzdGF0dXMgJTA0eCFcbiIsCisJCQkJICAgcnhfc3RhdHVzKTsKIAkJCS8qIEEuQy46IFRoZSBjaGlwIGhhbmdzIGhlcmUuICovCiAJCX0KIAkJaWYgKHJ4X3N0YXR1cyAmIChSeEJhZFN5bWJvbCB8IFJ4QmFkQWxpZ24pKQpAQCAtMTg1NSw3ICsxODQ2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAodG1wX3dvcmsgPD0gMCkKLQkJcHJfd2FybmluZyhQRlggInJ4IHN0b3Agd2FpdCB0b28gbG9uZ1xuIik7CisJCW5ldGRldl93YXJuKGRldiwgInJ4IHN0b3Agd2FpdCB0b28gbG9uZ1xuIik7CiAJLyogcmVzdGFydCByZWNlaXZlICovCiAJdG1wX3dvcmsgPSAyMDA7CiAJd2hpbGUgKC0tdG1wX3dvcmsgPiAwKSB7CkBAIC0xODY2LDcgKzE4NTcsNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmICh0bXBfd29yayA8PSAwKQotCQlwcl93YXJuaW5nKFBGWCAidHgvcnggZW5hYmxlIHdhaXQgdG9vIGxvbmdcbiIpOworCQluZXRkZXZfd2FybihkZXYsICJ0eC9yeCBlbmFibGUgd2FpdCB0b28gbG9uZ1xuIik7CiAKIAkvKiBhbmQgcmVpbml0aWFsaXplIGFsbCByeCByZWxhdGVkIHJlZ2lzdGVycyAqLwogCVJUTF9XOF9GIChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CkBAIC0xODc3LDcgKzE4NjgsNyBAQAogCVJUTF9XMzIgKFJ4Q29uZmlnLCB0cC0+cnhfY29uZmlnKTsKIAl0cC0+Y3VyX3J4ID0gMDsKIAotCXByX2RlYnVnKCJpbml0IGJ1ZmZlciBhZGRyZXNzZXNcbiIpOworCW5ldGRldl9kYmcoZGV2LCAiaW5pdCBidWZmZXIgYWRkcmVzc2VzXG4iKTsKIAogCS8qIExvY2sgQ29uZmlnWzAxMjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KIAlSVExfVzggKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CkBAIC0xOTMxLDEwICsxOTIyLDkgQEAKIAl1bnNpZ25lZCBpbnQgY3VyX3J4ID0gdHAtPmN1cl9yeDsKIAl1bnNpZ25lZCBpbnQgcnhfc2l6ZSA9IDA7CiAKLQlwcl9kZWJ1ZygiJXM6IEluIHJ0bDgxMzlfcngoKSwgY3VycmVudCAlNC40eCBCdWZBZGRyICU0LjR4LCIKLQkJICIgZnJlZSB0byAlNC40eCwgQ21kICUyLjJ4LlxuIiwgZGV2LT5uYW1lLCAodTE2KWN1cl9yeCwKLQkJIFJUTF9SMTYgKFJ4QnVmQWRkciksCi0JCSBSVExfUjE2IChSeEJ1ZlB0ciksIFJUTF9SOCAoQ2hpcENtZCkpOworCW5ldGRldl9kYmcoZGV2LCAiSW4gJXMoKSwgY3VycmVudCAlMDR4IEJ1ZkFkZHIgJTA0eCwgZnJlZSB0byAlMDR4LCBDbWQgJTAyeFxuIiwKKwkJICAgX19mdW5jX18sICh1MTYpY3VyX3J4LAorCQkgICBSVExfUjE2KFJ4QnVmQWRkciksIFJUTF9SMTYoUnhCdWZQdHIpLCBSVExfUjgoQ2hpcENtZCkpOwogCiAJd2hpbGUgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiByZWNlaXZlZCA8IGJ1ZGdldCAmJgogCSAgICAgICAoUlRMX1I4IChDaGlwQ21kKSAmIFJ4QnVmRW1wdHkpID09IDApIHsKQEAgLTE5NTAsMTkgKzE5NDAsMTIgQEAKIAkJcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKIAkJcGt0X3NpemUgPSByeF9zaXplIC0gNDsKIAotCQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyh0cCkpCi0JCQlwcl9kZWJ1ZygiJXM6ICBydGw4MTM5X3J4KCkgc3RhdHVzICU0LjR4LCBzaXplICU0LjR4LCIKLQkJCQkiIGN1ciAlNC40eC5cbiIsIGRldi0+bmFtZSwgcnhfc3RhdHVzLAotCQkJIHJ4X3NpemUsIGN1cl9yeCk7CisJCW5ldGlmX2RiZyh0cCwgcnhfc3RhdHVzLCBkZXYsICIlcygpIHN0YXR1cyAlMDR4LCBzaXplICUwNHgsIGN1ciAlMDR4XG4iLAorCQkJICBfX2Z1bmNfXywgcnhfc3RhdHVzLCByeF9zaXplLCBjdXJfcngpOwogI2lmIFJUTDgxMzlfREVCVUcgPiAyCi0JCXsKLQkJCWludCBpOwotCQkJcHJfZGVidWcoIiVzOiBGcmFtZSBjb250ZW50cyAiLCBkZXYtPm5hbWUpOwotCQkJZm9yIChpID0gMDsgaSA8IDcwOyBpKyspCi0JCQkJcHJfY29udCgiICUyLjJ4IiwKLQkJCQkJcnhfcmluZ1tyaW5nX29mZnNldCArIGldKTsKLQkJCXByX2NvbnQoIi5cbiIpOwotCQl9CisJCXByaW50X2R1bXBfaGV4KEtFUk5fREVCVUcsICJGcmFtZSBjb250ZW50czogIiwKKwkJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAorCQkJICAgICAgICZyeF9yaW5nW3Jpbmdfb2Zmc2V0XSwgNzAsIHRydWUpOwogI2VuZGlmCiAKIAkJLyogUGFja2V0IGNvcHkgZnJvbSBGSUZPIHN0aWxsIGluIHByb2dyZXNzLgpAQCAtMTk3MywxNCArMTk1NiwxMSBAQAogCQkJaWYgKCF0cC0+Zmlmb19jb3B5X3RpbWVvdXQpCiAJCQkJdHAtPmZpZm9fY29weV90aW1lb3V0ID0gamlmZmllcyArIDI7CiAJCQllbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRwLT5maWZvX2NvcHlfdGltZW91dCkpIHsKLQkJCQlwcl9kZWJ1ZygiJXM6IGh1bmcgRklGTy4gUmVzZXQuIiwgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgImh1bmcgRklGTy4gUmVzZXRcbiIpOwogCQkJCXJ4X3NpemUgPSAwOwogCQkJCWdvdG8gbm9fZWFybHlfcng7CiAJCQl9Ci0JCQlpZiAobmV0aWZfbXNnX2ludHIodHApKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiBmaWZvIGNvcHkgaW4gcHJvZ3Jlc3MuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCX0KKwkJCW5ldGlmX2RiZyh0cCwgaW50ciwgZGV2LCAiZmlmbyBjb3B5IGluIHByb2dyZXNzXG4iKTsKIAkJCXRwLT54c3RhdHMuZWFybHlfcngrKzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDIxLDggKzIwMDEsNyBAQAogCQkJbmV0aWZfcmVjZWl2ZV9za2IgKHNrYik7CiAJCX0gZWxzZSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByX3dhcm5pbmcoIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfd2FybihkZXYsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iKTsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9CiAJCXJlY2VpdmVkKys7CkBAIC0yMDM2LDEwICsyMDE1LDkgQEAKIAlpZiAodW5saWtlbHkoIXJlY2VpdmVkIHx8IHJ4X3NpemUgPT0gMHhmZmYwKSkKIAkJcnRsODEzOV9pc3JfYWNrKHRwKTsKIAotCXByX2RlYnVnKCIlczogRG9uZSBydGw4MTM5X3J4KCksIGN1cnJlbnQgJTQuNHggQnVmQWRkciAlNC40eCwiCi0JCSAiIGZyZWUgdG8gJTQuNHgsIENtZCAlMi4yeC5cbiIsIGRldi0+bmFtZSwgY3VyX3J4LAotCQkgUlRMX1IxNiAoUnhCdWZBZGRyKSwKLQkJIFJUTF9SMTYgKFJ4QnVmUHRyKSwgUlRMX1I4IChDaGlwQ21kKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJEb25lICVzKCksIGN1cnJlbnQgJTA0eCBCdWZBZGRyICUwNHgsIGZyZWUgdG8gJTA0eCwgQ21kICUwMnhcbiIsCisJCSAgIF9fZnVuY19fLCBjdXJfcngsCisJCSAgIFJUTF9SMTYoUnhCdWZBZGRyKSwgUlRMX1IxNihSeEJ1ZlB0ciksIFJUTF9SOChDaGlwQ21kKSk7CiAKIAl0cC0+Y3VyX3J4ID0gY3VyX3J4OwogCkBAIC0yMDYwLDggKzIwMzgsNyBAQAogCQkJCSAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIsCiAJCQkJICAgICBpbnQgc3RhdHVzLCBpbnQgbGlua19jaGFuZ2VkKQogewotCXByX2RlYnVnKCIlczogQWJub3JtYWwgaW50ZXJydXB0LCBzdGF0dXMgJTguOHguXG4iLAotCQkgZGV2LT5uYW1lLCBzdGF0dXMpOworCW5ldGRldl9kYmcoZGV2LCAiQWJub3JtYWwgaW50ZXJydXB0LCBzdGF0dXMgJTA4eFxuIiwgc3RhdHVzKTsKIAogCWFzc2VydCAoZGV2ICE9IE5VTEwpOwogCWFzc2VydCAodHAgIT0gTlVMTCk7CkBAIC0yMDg5LDggKzIwNjYsNyBAQAogCQlwY2lfcmVhZF9jb25maWdfd29yZCAodHAtPnBjaV9kZXYsIFBDSV9TVEFUVVMsICZwY2lfY21kX3N0YXR1cyk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZCAodHAtPnBjaV9kZXYsIFBDSV9TVEFUVVMsIHBjaV9jbWRfc3RhdHVzKTsKIAotCQlwcl9lcnIoIiVzOiBQQ0kgQnVzIGVycm9yICU0LjR4LlxuIiwKLQkJCWRldi0+bmFtZSwgcGNpX2NtZF9zdGF0dXMpOworCQluZXRkZXZfZXJyKGRldiwgIlBDSSBCdXMgZXJyb3IgJTA0eFxuIiwgcGNpX2NtZF9zdGF0dXMpOwogCX0KIH0KIApAQCAtMjE4Myw4ICsyMTU5LDggQEAKICBvdXQ6CiAJc3Bpbl91bmxvY2sgKCZ0cC0+bG9jayk7CiAKLQlwcl9kZWJ1ZygiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBpbnRyX3N0YXR1cz0lIzQuNHguXG4iLAotCQkgZGV2LT5uYW1lLCBSVExfUjE2IChJbnRyU3RhdHVzKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJleGl0aW5nIGludGVycnVwdCwgaW50cl9zdGF0dXM9JSM0LjR4XG4iLAorCQkgICBSVExfUjE2KEludHJTdGF0dXMpKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIApAQCAtMjIzMyw5ICsyMjA5LDggQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbmFwaV9kaXNhYmxlKCZ0cC0+bmFwaSk7CiAKLQlpZiAobmV0aWZfbXNnX2lmZG93bih0cCkpCi0JCXByX2RlYnVnKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgMHglNC40eC5cbiIsCi0JCQlkZXYtPm5hbWUsIFJUTF9SMTYgKEludHJTdGF0dXMpKTsKKwluZXRpZl9kYmcodHAsIGlmZG93biwgZGV2LCAiU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgMHglMDR4XG4iLAorCQkgIFJUTF9SMTYoSW50clN0YXR1cykpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yNTA5LDExICsyNDg0LDExIEBACiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KLQlpbnQgaSwgcnhfbW9kZTsKKwlpbnQgcnhfbW9kZTsKIAl1MzIgdG1wOwogCi0JcHJfZGVidWcoIiVzOiAgIHJ0bDgxMzlfc2V0X3J4X21vZGUoJTQuNHgpIGRvbmUgLS0gUnggY29uZmlnICU4LjhseC5cbiIsCi0JCQlkZXYtPm5hbWUsIGRldi0+ZmxhZ3MsIFJUTF9SMzIgKFJ4Q29uZmlnKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJydGw4MTM5X3NldF9yeF9tb2RlKCUwNHgpIGRvbmUgLS0gUnggY29uZmlnICUwOGx4XG4iLAorCQkgICBkZXYtPmZsYWdzLCBSVExfUjMyKFJ4Q29uZmlnKSk7CiAKIAkvKiBOb3RlOiBkbyBub3QgcmVvcmRlciwgR0NDIGlzIGNsZXZlciBhYm91dCBjb21tb24gc3RhdGVtZW50cy4gKi8KIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC0yNTIxLDcgKzI0OTYsNyBAQAogCQkgICAgQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzIHwKIAkJICAgIEFjY2VwdEFsbFBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CkBAIC0yNTMwLDggKzI1MDUsNyBAQAogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IDE2NjNiYzkuLmY5NGQxN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtMTUwNSw3ICsxNTA1LDcgQEAKIAlpbnQgY29uZmlnID0gMCwgY250OwogCiAJREVCKERFQl9NVUxUSSxwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldCBtdWx0aWNhc3QgbGlzdCwgJWQgZW50cmllcywgcHJvbWlzYyAlcywgYWxsbXVsdGkgJXNcbiIsCi0JCWRldi0+bmFtZSwgZGV2LT5tY19jb3VudCwKKwkJZGV2LT5uYW1lLCBuZXRkZXZfbWNfY291bnQoZGV2KSwKIAkJZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDICA/ICJPTiIgOiAiT0ZGIiwKIAkJZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSA/ICJPTiIgOiAiT0ZGIikpOwogCkBAIC0xNTMzLDcgKzE1MzMsNyBAQAogCQlpNTk2X2FkZF9jbWQoZGV2LCAmbHAtPmNmX2NtZC5jbWQpOwogCX0KIAotCWNudCA9IGRldi0+bWNfY291bnQ7CisJY250ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJaWYgKGNudCA+IE1BWF9NQ19DTlQpCiAJewogCQljbnQgPSBNQVhfTUNfQ05UOwpAQCAtMTU0MSw3ICsxNTQxLDcgQEAKIAkJCWRldi0+bmFtZSwgY250KTsKIAl9CiAKLQlpZiAoZGV2LT5tY19jb3VudCA+IDApIHsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQl1bnNpZ25lZCBjaGFyICpjcDsKIAkJc3RydWN0IG1jX2NtZCAqY21kOwpAQCAtMTU1MCwxMyArMTU1MCwxNiBAQAogCQkJcmV0dXJuOwogCQljbWQgPSAmbHAtPm1jX2NtZDsKIAkJY21kLT5jbWQuY29tbWFuZCA9IENtZE11bHRpY2FzdExpc3Q7Ci0JCWNtZC0+bWNfY250ID0gZGV2LT5tY19jb3VudCAqIDY7CisJCWNtZC0+bWNfY250ID0gY250ICogRVRIX0FMRU47CiAJCWNwID0gY21kLT5tY19hZGRyczsKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7IGNudCAmJiBkbWkgIT0gTlVMTDsgZG1pID0gZG1pLT5uZXh0LCBjbnQtLSwgY3AgKz0gNikgewotCQkJbWVtY3B5KGNwLCBkbWktPmRtaV9hZGRyLCA2KTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJCWlmICghY250LS0pCisJCQkJYnJlYWs7CisJCQltZW1jcHkoY3AsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJCWlmIChpNTk2X2RlYnVnID4gMSkKIAkJCQlERUIoREVCX01VTFRJLHByaW50ayhLRVJOX0lORk8gIiVzOiBBZGRpbmcgYWRkcmVzcyAlcE1cbiIsCiAJCQkJCQlkZXYtPm5hbWUsIGNwKSk7CisJCQljcCArPSBFVEhfQUxFTjsKIAkJfQogCQlpNTk2X2FkZF9jbWQoZGV2LCAmY21kLT5jbWQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGRkOWEwOWMuLjcwMjljZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtOTAsNiArOTAsMTggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1hY3ZsYW4uCiAKK2NvbmZpZyBNQUNWVEFQCisJdHJpc3RhdGUgIk1BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBNQUNWTEFOCisJaGVscAorCSAgVGhpcyBhZGRzIGEgc3BlY2lhbGl6ZWQgdGFwIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgYmFzZWQKKwkgIG9uIHRoZSBNQUMtVkxBTiBuZXR3b3JrIGludGVyZmFjZSwgY2FsbGVkIG1hY3Z0YXAuIEEgbWFjdnRhcCBkZXZpY2UKKwkgIGNhbiBiZSBhZGRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYSBtYWN2bGFuIGRldmljZSwgdXNpbmcgJ3R5cGUKKwkgIG1hY3ZsYW4nLCBhbmQgdGhlbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB0YXAgdXNlciBzcGFjZSBpbnRlcmZhY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG1hY3Z0YXAuCisKIGNvbmZpZyBFUVVBTElaRVIKIAl0cmlzdGF0ZSAiRVFMIChzZXJpYWwgbGluZSBsb2FkIGJhbGFuY2luZykgc3VwcG9ydCIKIAktLS1oZWxwLS0tCkBAIC04NjgsOCArODgwLDggQEAKIAkgIFNldCB0aGUgbnVtYmVyIG9mIGJ1ZmZlciBwYWNrZXRzIHVzZWQgaW4gZHJpdmVyLgogCiBjb25maWcgQkZJTl9NQUNfUk1JSQotCWJvb2wgIlJNSUkgUEhZIEludGVyZmFjZSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEJGSU5fTUFDICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlJNSUkgUEhZIEludGVyZmFjZSIKKwlkZXBlbmRzIG9uIEJGSU5fTUFDCiAJZGVmYXVsdCB5IGlmIEJGSU41MjdfRVpLSVQKIAlkZWZhdWx0IG4gaWYgQkZJTjUzN19TVEFNUAogCWhlbHAKQEAgLTkyMCw3ICs5MzIsNyBAQAogCiBjb25maWcgVElfREFWSU5DSV9FTUFDCiAJdHJpc3RhdGUgIlRJIERhVmluY2kgRU1BQyBTdXBwb3J0IgotCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfREFWSU5DSQorCWRlcGVuZHMgb24gQVJNICYmICggQVJDSF9EQVZJTkNJIHx8IEFSQ0hfT01BUDMgKQogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBUSSdzIERhVmluY2kgRXRoZXJuZXQgLgpAQCAtOTgzLDYgKzk5NSwxNCBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDLgogCitjb25maWcgR1JFVEgKKwl0cmlzdGF0ZSAiQWVyb2ZsZXggR2Fpc2xlciBHUkVUSCBFdGhlcm5ldCBNQUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNQQVJDCisJc2VsZWN0IFBIWUxJQgorCXNlbGVjdCBDUkMzMgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBBZXJvZmxleCBHYWlzbGVyIEdSRVRIIEV0aGVybmV0IE1BQy4KKwogY29uZmlnIFNNQzkxMVgKIAl0cmlzdGF0ZSAiU01TQyBMQU45MTFbNTY3OF0gc3VwcG9ydCIKIAlzZWxlY3QgQ1JDMzIKQEAgLTEzNjgsNiArMTM4OCwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWMzMjAwLgogCitjb25maWcgS1NaODg0WF9QQ0kKKwl0cmlzdGF0ZSAiTWljcmVsIEtTWjg4NDEvMiBQQ0kiCisJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSQorCXNlbGVjdCBNSUkKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBUaGlzIFBDSSBkcml2ZXIgaXMgZm9yIE1pY3JlbCBLU1o4ODQxL0tTWjg4NDIgUENJIEV0aGVybmV0IGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGtzejg4NHguCisKIGNvbmZpZyBBUFJJQ09UCiAJdHJpc3RhdGUgIkFwcmljb3QgWGVuLUlJIG9uIGJvYXJkIEV0aGVybmV0IgogCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBJU0EKQEAgLTE4ODMsNyArMTkxNCw4IEBACiAKIGNvbmZpZyBGRUMKIAlib29sICJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKSIKLQlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IE1BQ0hfTVgyNyB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDI1CisJZGVwZW5kcyBvbiBNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBcCisJCU1BQ0hfTVgyNyB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDI1IHx8IEFSQ0hfTVg1CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0CiAJICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgYW5kIEZyZWVzY2FsZSBpLk1YIHByb2Nlc3NvcnMuCkBAIC0xOTM5LDYgKzE5NzEsNyBAQAogY29uZmlnIFhJTElOWF9FTUFDTElURQogCXRyaXN0YXRlICJYaWxpbnggMTAvMTAwIEV0aGVybmV0IExpdGUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBQQzMyIHx8IE1JQ1JPQkxBWkUKKwlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMCBFdGhlcm5ldCBMaXRlIGZyb20gWGlsaW54LgogCkBAIC0yMzU2LDIwICsyMzg5LDYgQEAKIAkgIHRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBkaXN0aW5ndWlzaGVzIHRoZSBtb2RlbHMsIHlvdSBjYW4KIAkgIHNhZmVseSBlbmFibGUgdGhpcyBvcHRpb24gZXZlbiBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzLWxlc3MgbW9kZWwuCiAKLWNvbmZpZyBHRUxJQ19XSVJFTEVTU19PTERfUFNLX0lOVEVSRkFDRQotICAgICAgIGJvb2wgIlBTMyBXaXJlbGVzcyBwcml2YXRlIFBTSyBpbnRlcmZhY2UgKE9CU09MRVRFKSIKLSAgICAgICBkZXBlbmRzIG9uIEdFTElDX1dJUkVMRVNTCi0gICAgICAgc2VsZWN0IFdFWFRfUFJJVgotICAgICAgIGhlbHAKLSAgICAgICAgICBUaGlzIG9wdGlvbiByZXRhaW5zIHRoZSBvYnNvbGV0ZSBwcml2YXRlIGludGVyZmFjZSB0byBwYXNzCi0gICAgICAgICAgdGhlIFBTSyBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbXMgdG8gdGhlIGRyaXZlci4gIFRoZSBQU0sKLSAgICAgICAgICBzdGFuZHMgZm9yICdQcmUgU2hhcmVkIEtleScgYW5kIGlzIHVzZWQgZm9yIFdQQVsyXS1QU0sKLSAgICAgICAgICAoV1BBLVBlcnNvbmFsKSBlbnZpcm9ubWVudC4KLSAgICAgICAgICBJZiBXUEFbMl0tUFNLIGlzIHVzZWQgYW5kIHlvdSBuZWVkIHRvIHVzZSBvbGQgcHJvZ3JhbXMgdGhhdAotICAgICAgICAgIHN1cHBvcnQgb25seSB0aGlzIG9sZCBpbnRlcmZhY2UsIHNheSBZLiAgT3RoZXJ3aXNlIE4uCi0KLSAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgRlNMX1BRX01ESU8KIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFBRIE1ESU8iCiAJZGVwZW5kcyBvbiBGU0xfU09DCkBAIC0yNjE4LDYgKzI2MzcsMjggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIElYR0JFVkYKKyAgICAgICB0cmlzdGF0ZSAiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gUENJX01TSQorICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDgyNTk5IHZpcnR1YWwgZnVuY3Rpb25zLiAgRm9yIG1vcmUKKyAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKKyAgICAgICAgIERyaXZlciBJRCBHdWlkZSBhdDoKKworICAgICAgICAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bT4KKworICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0CisgICAgICAgICB3ZWJzaXRlIGF0OgorCisgICAgICAgICA8aHR0cDovL3N1cHBvcnQuaW50ZWwuY29tPgorCisgICAgICAgICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW4KKyAgICAgICAgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZXZmLnR4dD4uCisKKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKyAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGl4Z2JldmYuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZAorICAgICAgICAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LgorCiBjb25maWcgSVhHQgogCXRyaXN0YXRlICJJbnRlbChSKSBQUk8vMTBHYkUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtMjc1Niw2ICsyNzk3LDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBibngyeC4gIFRoaXMgaXMgcmVjb21tZW5kZWQuCiAKK2NvbmZpZyBRTENOSUMKKwl0cmlzdGF0ZSAiUUxPR0lDIFFMQ05JQyAxLzEwR2IgQ29udmVyZ2VkIEV0aGVybmV0IE5JQyBTdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgUUxvZ2ljIFFMRTgyNDAgYW5kIFFMRTgyNDIgQ29udmVyZ2VkIEV0aGVybmV0CisJICBkZXZpY2VzLgorCiBjb25maWcgUUxHRQogCXRyaXN0YXRlICJRTG9naWMgUUxHRSAxMEdiIEV0aGVybmV0IERyaXZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGFkMTM0NmQuLjQ3ODg4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfSUdCKSArPSBpZ2IvCiBvYmotJChDT05GSUdfSUdCVkYpICs9IGlnYnZmLwogb2JqLSQoQ09ORklHX0lYR0JFKSArPSBpeGdiZS8KK29iai0kKENPTkZJR19JWEdCRVZGKSArPSBpeGdiZXZmLwogb2JqLSQoQ09ORklHX0lYR0IpICs9IGl4Z2IvCiBvYmotJChDT05GSUdfSVAxMDAwKSArPSBpcGcubwogb2JqLSQoQ09ORklHX0NIRUxTSU9fVDEpICs9IGNoZWxzaW8vCkBAIC05NSw2ICs5Niw3IEBACiBvYmotJChDT05GSUdfS1M4ODQyKQkrPSBrczg4NDIubwogb2JqLSQoQ09ORklHX0tTODg1MSkJKz0ga3M4ODUxLm8KIG9iai0kKENPTkZJR19LUzg4NTFfTUxMKQkrPSBrczg4NTFfbWxsLm8KK29iai0kKENPTkZJR19LU1o4ODRYX1BDSSkJKz0ga3N6ODg0eC5vCiBvYmotJChDT05GSUdfVklBX1JISU5FKSArPSB2aWEtcmhpbmUubwogb2JqLSQoQ09ORklHX1ZJQV9WRUxPQ0lUWSkgKz0gdmlhLXZlbG9jaXR5Lm8KIG9iai0kKENPTkZJR19BREFQVEVDX1NUQVJGSVJFKSArPSBzdGFyZmlyZS5vCkBAIC0xNDgsNiArMTUwLDcgQEAKIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm8KIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICs9IHhpbGlueF9lbWFjbGl0ZS5vCiBvYmotJChDT05GSUdfUUxBM1hYWCkgKz0gcWxhM3h4eC5vCitvYmotJChDT05GSUdfUUxDTklDKSArPSBxbGNuaWMvCiBvYmotJChDT05GSUdfUUxHRSkgKz0gcWxnZS8KIAogb2JqLSQoQ09ORklHX1BQUCkgKz0gcHBwX2dlbmVyaWMubwpAQCAtMTY3LDYgKzE3MCw3IEBACiBvYmotJChDT05GSUdfRFVNTVkpICs9IGR1bW15Lm8KIG9iai0kKENPTkZJR19JRkIpICs9IGlmYi5vCiBvYmotJChDT05GSUdfTUFDVkxBTikgKz0gbWFjdmxhbi5vCitvYmotJChDT05GSUdfTUFDVlRBUCkgKz0gbWFjdnRhcC5vCiBvYmotJChDT05GSUdfREU2MDApICs9IGRlNjAwLm8KIG9iai0kKENPTkZJR19ERTYyMCkgKz0gZGU2MjAubwogb2JqLSQoQ09ORklHX0xBTkNFKSArPSBsYW5jZS5vCkBAIC0yNDYsNiArMjUwLDcgQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpICs9IG1seDQvCiBvYmotJChDT05GSUdfRU5DMjhKNjApICs9IGVuYzI4ajYwLm8KIG9iai0kKENPTkZJR19FVEhPQykgKz0gZXRob2Mubworb2JqLSQoQ09ORklHX0dSRVRIKSArPSBncmV0aC5vCiAKIG9iai0kKENPTkZJR19YVEVOU0FfWFQyMDAwX1NPTklDKSArPSB4dHNvbmljLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYTIwNjUuYyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKaW5kZXggYjdlYzAzNi4uYmQ0ZDgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYTIwNjUuYworKysgYi9kcml2ZXJzL25ldC9hMjA2NS5jCkBAIC02MDMsOSArNjAzLDggQEAKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrICppYiA9IGxwLT5pbml0X2Jsb2NrOwogCXZvbGF0aWxlIHUxNiAqbWNhc3RfdGFibGUgPSAodTE2ICopJmliLT5maWx0ZXI7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWk9ZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWNoYXIgKmFkZHJzOwotCWludCBpOwogCXUzMiBjcmM7CiAKIAkvKiBzZXQgYWxsIG11bHRpY2FzdCBiaXRzICovCkBAIC02MTksOSArNjE4LDggQEAKIAlpYi0+ZmlsdGVyIFsxXSA9IDA7CiAKIAkvKiBBZGQgYWRkcmVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKyl7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQlkbWkgICA9IGRtaS0+bmV4dDsKIAogCQkvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8KIAkJaWYgKCEoKmFkZHJzICYgMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IGQ4MmE5YTkuLjRhZTc1MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TR0lfQUNFTklDCTB4MDAwOQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhY2VuaWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFjZW5pY19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfQUxURU9OLCBQQ0lfREVWSUNFX0lEX0FMVEVPTl9BQ0VOSUNfRklCUkUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4LCAweGZmZmYwMCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQUxURU9OLCBQQ0lfREVWSUNFX0lEX0FMVEVPTl9BQ0VOSUNfQ09QUEVSLApAQCAtMjg0NSw3ICsyODQ1LDcgQEAKIAkgKiBzZXQgdGhlIGVudGlyZSBtdWx0aWNhc3QgbGlzdCBhdCBhIHRpbWUgYW5kIGtlZXBpbmcgdHJhY2sgb2YKIAkgKiBpdCBoZXJlIGlzIGdvaW5nIHRvIGJlIG1lc3N5LgogCSAqLwotCWlmICgoZGV2LT5tY19jb3VudCkgJiYgIShhcC0+bWNhc3RfYWxsKSkgeworCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgJiYgIWFwLT5tY2FzdF9hbGwpIHsKIAkJY21kLmV2dCA9IENfU0VUX01VTFRJQ0FTVF9NT0RFOwogCQljbWQuY29kZSA9IENfQ19NQ0FTVF9FTkFCTEU7CiAJCWNtZC5pZHggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggNzY2YWFiZi4uYjhhNTlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShkeW5hbWljX2lwZywgYm9vbCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaXBnLCAiRW5hYmxlIG9yIERpc2FibGUgZHluYW1pYyBJUEcsIDE6IEVuYWJsZSwgMDogRGlzYWJsZSIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMWVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFtZDgxMTFlX3BjaV90YmwpID0gewogCiAJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTUQ4MTExRV83NDYyLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKQEAgLTExNzYsOCArMTE3Niw3IEBACiAJCQkvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqLwogCQkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJCX0gZWxzZSBpZiAoaW50cmVuMCAmIFJJTlRFTjApIHsKLQkJCXByaW50aygiKioqKioqKioqKioqRHJpdmVyIGJ1ZyEgXAotCQkJCWludGVycnVwdCB3aGlsZSBpbiBwb2xsXG4iKTsKKwkJCXByaW50aygiKioqKioqKioqKioqRHJpdmVyIGJ1ZyEgaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOwogCQkJLyogRml4IGJ5IGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzICovCiAJCQl3cml0ZWwoUklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCX0KQEAgLTEzNzgsMjggKzEzNzcsMjggQEAKICovCiBzdGF0aWMgdm9pZCBhbWQ4MTExZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QqIG1jX3B0cjsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBtY19maWx0ZXJbMl0gOwotCWludCBpLGJpdF9udW07CisJaW50IGJpdF9udW07CisKIAlpZihkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpewogCQl3cml0ZWwoIFZBTDIgfCBQUk9NLCBscC0+bW1pbyArIENNRDIpOwogCQlyZXR1cm47CiAJfQogCWVsc2UKIAkJd3JpdGVsKCBQUk9NLCBscC0+bW1pbyArIENNRDIpOwotCWlmKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IE1BWF9GSUxURVJfU0laRSl7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBNQVhfRklMVEVSX1NJWkUpIHsKIAkJLyogZ2V0IGFsbCBtdWx0aWNhc3QgcGFja2V0ICovCiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7Ci0JCWxwLT5tY19saXN0ID0gZGV2LT5tY19saXN0OwogCQlscC0+b3B0aW9ucyB8PSBPUFRJT05fTVVMVElDQVNUX0VOQUJMRTsKIAkJYW1kODExMWVfd3JpdGVxKCoodTY0KiltY19maWx0ZXIsbHAtPm1taW8gKyBMQURSRik7CiAJCXJldHVybjsKIAl9Ci0JaWYoIGRldi0+bWNfY291bnQgPT0gMCApeworCWlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkvKiBnZXQgb25seSBvd24gcGFja2V0cyAqLwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlscC0+bWNfbGlzdCA9IE5VTEw7CiAJCWxwLT5vcHRpb25zICY9IH5PUFRJT05fTVVMVElDQVNUX0VOQUJMRTsKIAkJYW1kODExMWVfd3JpdGVxKCoodTY0KiltY19maWx0ZXIsbHAtPm1taW8gKyBMQURSRik7CiAJCS8qIGRpc2FibGUgcHJvbWlzY291cyBtb2RlICovCkBAIC0xNDA4LDEwICsxNDA3LDggQEAKIAl9CiAJLyogbG9hZCBhbGwgdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlIGxvZ2ljIGZpbHRlciAqLwogCWxwLT5vcHRpb25zIHw9IE9QVElPTl9NVUxUSUNBU1RfRU5BQkxFOwotCWxwLT5tY19saXN0ID0gZGV2LT5tY19saXN0OwogCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JZm9yIChpID0gMCwgbWNfcHRyID0gZGV2LT5tY19saXN0OyBtY19wdHIgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIGRldikgewogCQliaXRfbnVtID0gKGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNfcHRyLT5kbWlfYWRkcikgPj4gMjYpICYgMHgzZjsKIAkJbWNfZmlsdGVyW2JpdF9udW0gPj4gNV0gfD0gMSA8PCAoYml0X251bSAmIDMxKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5oIGIvZHJpdmVycy9uZXQvYW1kODExMWUuaAppbmRleCAyOGM2MGE3Li5hYzM2ZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5oCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmgKQEAgLTc4OSw3ICs3ODksNiBAQAogCWNoYXIgb3BlbmVkOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGludCBkcnZfcnhfZXJyb3JzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCogbWNfbGlzdDsKIAlzdHJ1Y3QgYW1kODExMWVfY29hbGVzY2VfY29uZiBjb2FsX2NvbmY7CiAKIAlzdHJ1Y3QgaXBnX2luZm8gIGlwZ19kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKaW5kZXggZGJmYmQzYi4uOGVhNGVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCkBAIC0xMTI1LDcgKzExMjUsNiBAQAogCQlwcmludGsoS0VSTl9JTkZPICJBcHBsZS9GYXJhbGxvbiBMb2NhbFRhbGstUEMgY2FyZCBhdCAlMDN4LCBETUElZC4gIFVzaW5nIHBvbGxlZCBtb2RlLlxuIixpbyxkbWEpOwogCiAJZGV2LT5uZXRkZXZfb3BzID0gJmx0cGNfbmV0ZGV2OwotCWRldi0+bWNfbGlzdCA9IE5VTEw7CiAJZGV2LT5iYXNlX2FkZHIgPSBpbzsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmRtYSA9IGRtYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwppbmRleCBkYmY0ZGUzLi5iNjhlMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlmcmVlX25ldGRldihkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY29tMjAwMjBwY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjb20yMDAyMHBjaV9pZF90YWJsZSkgPSB7CiAJeyAweDE1NzEsIDB4YTAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgMHgxNTcxLCAweGEwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IDB4MTU3MSwgMHhhMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMgYi9kcml2ZXJzL25ldC9hcmlhZG5lLmMKaW5kZXggYzM1YWYzZS4uMDhkOGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJpYWRuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwpAQCAtMTIzLDkgKzEyMyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgYXJpYWRuZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGFyaWFkbmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmFyaWFkbmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2lmZGVmIEhBVkVfTVVMVElDQVNUCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jZW5kaWYKIAogCiBzdGF0aWMgdm9pZCBtZW1jcHl3KHZvbGF0aWxlIHVfc2hvcnQgKmRlc3QsIHVfc2hvcnQgKnNyYywgaW50IGxlbikKQEAgLTgyMSw3ICs4MTksNyBAQAogCWxhbmNlLT5SRFAgPSBQUk9NOwkJLyogU2V0IHByb21pc2N1b3VzIG1vZGUgKi8KICAgICB9IGVsc2UgewogCXNob3J0IG11bHRpY2FzdF90YWJsZVs0XTsKLQlpbnQgbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKwlpbnQgbnVtX2FkZHJzID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJaW50IGk7CiAJLyogV2UgZG9uJ3QgdXNlIHRoZSBtdWx0aWNhc3QgdGFibGUsIGJ1dCByZWx5IG9uIHVwcGVyLWxheWVyIGZpbHRlcmluZy4gKi8KIAltZW1zZXQobXVsdGljYXN0X3RhYmxlLCAobnVtX2FkZHJzID09IDApID8gMCA6IC0xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IDE2NGIzN2UuLmYxZjU4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTM1MSwxMyArMzUxLDEzIEBACiAJcmV0dXJuICZwcml2LT5zdGF0czsKIH0KIAotc3RhdGljIHZvaWQgYW03OWM5NjFfbWNfaGFzaChzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgdW5zaWduZWQgc2hvcnQgKmhhc2gpCitzdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKGNoYXIgKmFkZHIsIHVuc2lnbmVkIHNob3J0ICpoYXNoKQogewotCWlmIChkbWktPmRtaV9hZGRybGVuID09IEVUSF9BTEVOICYmIGRtaS0+ZG1pX2FkZHJbMF0gJiAweDAxKSB7CisJaWYgKGFkZHJbMF0gJiAweDAxKSB7CiAJCWludCBpZHgsIGJpdDsKIAkJdTMyIGNyYzsKIAotCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGRtaS0+ZG1pX2FkZHIpOworCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHIpOwogCiAJCWlkeCA9IGNyYyA+PiAzMDsKIAkJYml0ID0gKGNyYyA+PiAyNikgJiAxNTsKQEAgLTM4Nyw4ICszODcsOCBAQAogCiAJCW1lbXNldChtdWx0aV9oYXNoLCAweDAwLCBzaXplb2YobXVsdGlfaGFzaCkpOwogCi0JCWZvciAoZG1pID0gZGV2LT5tY19saXN0OyBkbWk7IGRtaSA9IGRtaS0+bmV4dCkKLQkJCWFtNzljOTYxX21jX2hhc2goZG1pLCBtdWx0aV9oYXNoKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCisJCQlhbTc5Yzk2MV9tY19oYXNoKGRtaS0+ZG1pX2FkZHIsIG11bHRpX2hhc2gpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jaGlwX2xvY2ssIGZsYWdzKTsKQEAgLTY4MCw3ICs2ODAsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhbTc5Yzk2MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgYW03OWM5NjFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKaW5kZXggYzhiYzYwYTcuLjhiMjNkNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwpAQCAtNTU4LDE0ICs1NTgsMTEgQEAKIHsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cnI7CiAJdW5zaWduZWQgbG9uZyBtY19maWx0ZXJbMl07Ci0JdW5zaWduZWQgaW50IGksIGJpdG5yOworCXVuc2lnbmVkIGludCBiaXRucjsKIAogCW1jX2ZpbHRlclswXSA9IG1jX2ZpbHRlclsxXSA9IDA7CiAKLQljdXJyID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cnIgPSBjdXJyLT5uZXh0KSB7Ci0JCWlmICghY3VycikgYnJlYWs7CS8qIHVuZXhwZWN0ZWQgZW5kIG9mIGxpc3QgKi8KLQorCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGN1cnIsIGRldikgewogCQliaXRuciA9IGhhc2hfZ2V0X2luZGV4KGN1cnItPmRtaV9hZGRyKTsKIAkJbWNfZmlsdGVyW2JpdG5yID4+IDVdIHw9IDEgPDwgKGJpdG5yICYgMzEpOwogCX0KQEAgLTU5Miw3ICs1ODksNyBAQAogCQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTSCwgLTEpOwogCQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTTCwgLTEpOwogCQljZmcgfD0gQVQ5MV9FTUFDX01USTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CQkJLyogRW5hYmxlIHNwZWNpZmljIG11bHRpY2FzdHMgKi8KKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeyAvKiBFbmFibGUgc3BlY2lmaWMgbXVsdGljYXN0cyAqLwogCQlhdDkxZXRoZXJfc2V0aGFzaHRhYmxlKGRldik7CiAJCWNmZyB8PSBBVDkxX0VNQUNfTVRJOwogCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmICh+SUZGX0FMTE1VTFRJKSkgewkvKiBEaXNhYmxlIGFsbCBtdWx0aWNhc3QgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggYjI1NDY3YS4uYmY3MmQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC05LDYgKzksOCBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXworCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwLDkgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bWFjaC9lcDkzeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImVwOTN4eC1ldGgiCiAjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC4xIgpAQCAtMTg1LDcgKzE4Nyw0NyBAQAogI2RlZmluZSB3cncoZXAsIG9mZiwgdmFsKQlfX3Jhd193cml0ZXcoKHZhbCksIChlcCktPmJhc2VfYWRkciArIChvZmYpKQogI2RlZmluZSB3cmwoZXAsIG9mZiwgdmFsKQlfX3Jhd193cml0ZWwoKHZhbCksIChlcCktPmJhc2VfYWRkciArIChvZmYpKQogCi1zdGF0aWMgaW50IGVwOTN4eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZyk7CitzdGF0aWMgaW50IGVwOTN4eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZGF0YTsKKwlpbnQgaTsKKworCXdybChlcCwgUkVHX01JSUNNRCwgUkVHX01JSUNNRF9SRUFEIHwgKHBoeV9pZCA8PCA1KSB8IHJlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoKHJkbChlcCwgUkVHX01JSVNUUykgJiBSRUdfTUlJU1RTX0JVU1kpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpID09IDEwKSB7CisJCXByX2luZm8oIm1kaW8gcmVhZCB0aW1lZCBvdXRcbiIpOworCQlkYXRhID0gMHhmZmZmOworCX0gZWxzZSB7CisJCWRhdGEgPSByZGwoZXAsIFJFR19NSUlEQVRBKTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZywgaW50IGRhdGEpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwl3cmwoZXAsIFJFR19NSUlEQVRBLCBkYXRhKTsKKwl3cmwoZXAsIFJFR19NSUlDTUQsIFJFR19NSUlDTURfV1JJVEUgfCAocGh5X2lkIDw8IDUpIHwgcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmICgocmRsKGVwLCBSRUdfTUlJU1RTKSAmIFJFR19NSUlTVFNfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCisJaWYgKGkgPT0gMTApCisJCXByX2luZm8oIm1kaW8gd3JpdGUgdGltZWQgb3V0XG4iKTsKK30KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplcDkzeHhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yMTcsMTQgKzI1OSwxMSBAQAogCQlyc3RhdC0+cnN0YXQxID0gMDsKIAogCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfRU9GKSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogbm90IGVuZC1vZi1mcmFtZSAiCi0JCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQkJcHJfY3JpdCgibm90IGVuZC1vZi1mcmFtZSAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX0VPQikpCi0JCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IG5vdCBlbmQtb2YtYnVmZmVyICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CisJCQlwcl9jcml0KCJub3QgZW5kLW9mLWJ1ZmZlciAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAkJaWYgKChyc3RhdDEgJiBSU1RBVDFfQlVGRkVSX0lOREVYKSA+PiAxNiAhPSBlbnRyeSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogZW50cnkgbWlzbWF0Y2ggIgotCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJCXByX2NyaXQoImVudHJ5IG1pc21hdGNoICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOwogCiAJCWlmICghKHJzdGF0MCAmIFJTVEFUMF9SV0UpKSB7CiAJCQllcC0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC0yNDEsOCArMjgwLDcgQEAKIAogCQlsZW5ndGggPSByc3RhdDEgJiBSU1RBVDFfRlJBTUVfTEVOR1RIOwogCQlpZiAobGVuZ3RoID4gTUFYX1BLVF9TSVpFKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImVwOTN4eF9yeDogaW52YWxpZCBsZW5ndGggIgotCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJCXByX25vdGljZSgiaW52YWxpZCBsZW5ndGggJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAJCQlnb3RvIGVycjsKIAkJfQogCkBAIC0zNzEsMTEgKzQwOSw5IEBACiAJCXRzdGF0LT50c3RhdDAgPSAwOwogCiAJCWlmICh0c3RhdDAgJiBUU1RBVDBfRkEpCi0JCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfdHhfY29tcGxldGU6IGZyYW1lIGFib3J0ZWQgIgotCQkJCQkgIiAlLjh4XG4iLCB0c3RhdDApOworCQkJcHJfY3JpdCgiZnJhbWUgYWJvcnRlZCAlLjh4XG4iLCB0c3RhdDApOwogCQlpZiAoKHRzdGF0MCAmIFRTVEFUMF9CVUZGRVJfSU5ERVgpICE9IGVudHJ5KQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3R4X2NvbXBsZXRlOiBlbnRyeSBtaXNtYXRjaCAiCi0JCQkJCSAiICUuOHhcbiIsIHRzdGF0MCk7CisJCQlwcl9jcml0KCJlbnRyeSBtaXNtYXRjaCAlLjh4XG4iLCB0c3RhdDApOwogCiAJCWlmICh0c3RhdDAgJiBUU1RBVDBfVFhXRSkgewogCQkJaW50IGxlbmd0aCA9IGVwLT5kZXNjcy0+dGRlc2NbZW50cnldLnRkZXNjMSAmIDB4ZmZmOwpAQCAtNTM2LDcgKzU3Miw3IEBACiAJfQogCiAJaWYgKGkgPT0gMTApIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTU9EVUxFX05BTUUgIjogaHcgZmFpbGVkIHRvIHJlc2V0XG4iKTsKKwkJcHJfY3JpdCgiaHcgZmFpbGVkIHRvIHJlc2V0XG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC01ODEsNyArNjE3LDcgQEAKIAl9CiAKIAlpZiAoaSA9PSAxMCkgewotCQlwcmludGsoS0VSTl9DUklUIERSVl9NT0RVTEVfTkFNRSAiOiBodyBmYWlsZWQgdG8gc3RhcnRcbiIpOworCQlwcl9jcml0KCJodyBmYWlsZWQgdG8gc3RhcnRcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTYxNyw3ICs2NTMsNyBAQAogCX0KIAogCWlmIChpID09IDEwKQotCQlwcmludGsoS0VSTl9DUklUIERSVl9NT0RVTEVfTkFNRSAiOiBodyBmYWlsZWQgdG8gcmVzZXRcbiIpOworCQlwcl9jcml0KCJodyBmYWlsZWQgdG8gcmVzZXRcbiIpOwogfQogCiBzdGF0aWMgaW50IGVwOTN4eF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02ODEsNDggKzcxNyw2IEBACiAJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZlcC0+bWlpLCBkYXRhLCBjbWQsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGVwOTN4eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZykKLXsKLQlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZGF0YTsKLQlpbnQgaTsKLQotCXdybChlcCwgUkVHX01JSUNNRCwgUkVHX01JSUNNRF9SRUFEIHwgKHBoeV9pZCA8PCA1KSB8IHJlZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlpZiAoKHJkbChlcCwgUkVHX01JSVNUUykgJiBSRUdfTUlJU1RTX0JVU1kpID09IDApCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQotCWlmIChpID09IDEwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gRFJWX01PRFVMRV9OQU1FICI6IG1kaW8gcmVhZCB0aW1lZCBvdXRcbiIpOwotCQlkYXRhID0gMHhmZmZmOwotCX0gZWxzZSB7Ci0JCWRhdGEgPSByZGwoZXAsIFJFR19NSUlEQVRBKTsKLQl9Ci0KLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgZXA5M3h4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZywgaW50IGRhdGEpCi17Ci0Jc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0KLQl3cmwoZXAsIFJFR19NSUlEQVRBLCBkYXRhKTsKLQl3cmwoZXAsIFJFR19NSUlDTUQsIFJFR19NSUlDTURfV1JJVEUgfCAocGh5X2lkIDw8IDUpIHwgcmVnKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWlmICgocmRsKGVwLCBSRUdfTUlJU1RTKSAmIFJFR19NSUlTVFNfQlVTWSkgPT0gMCkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCi0JaWYgKGkgPT0gMTApCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX01PRFVMRV9OQU1FICI6IG1kaW8gd3JpdGUgdGltZWQgb3V0XG4iKTsKLX0KLQogc3RhdGljIHZvaWQgZXA5M3h4X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CiAJc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FKTsKQEAgLTgyNSwxMiArODE5LDE5IEBACiAJc3RydWN0IGVwOTN4eF9ldGhfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXA7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IGlycTsKIAlpbnQgZXJyOwogCiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghbWVtIHx8IGlycSA8IDApCisJCXJldHVybiAtRU5YSU87CisKIAlkZXYgPSBlcDkzeHhfZGV2X2FsbG9jKGRhdGEpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwpAQCAtODQyLDIzICs4NDMsMjEgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQllcC0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxLAotCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCWVwLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pLAorCQkJCSAgICAgZGV2X25hbWUoJnBkZXYtPmRldikpOwogCWlmIChlcC0+cmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQllcC0+YmFzZV9hZGRyID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKLQkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0KTsKKwllcC0+YmFzZV9hZGRyID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOwogCWlmIChlcC0+YmFzZV9hZGRyID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgZXRoZXJuZXQgcmVnaXN0ZXJzXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0OwogCX0KLQllcC0+aXJxID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJZXAtPmlycSA9IGlycTsKIAogCWVwLT5taWkucGh5X2lkID0gZGF0YS0+cGh5X2lkOwogCWVwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOwpAQCAtODc3LDExICs4NzYsOCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVwOTN4eCBvbi1jaGlwIGV0aGVybmV0LCBJUlEgJWQsICIKLQkJCSAiJS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4OiUuMnguXG4iLCBkZXYtPm5hbWUsCi0JCQllcC0+aXJxLCBkYXRhLT5kZXZfYWRkclswXSwgZGF0YS0+ZGV2X2FkZHJbMV0sCi0JCQlkYXRhLT5kZXZfYWRkclsyXSwgZGF0YS0+ZGV2X2FkZHJbM10sCi0JCQlkYXRhLT5kZXZfYWRkcls0XSwgZGF0YS0+ZGV2X2FkZHJbNV0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBlcDkzeHggb24tY2hpcCBldGhlcm5ldCwgSVJRICVkLCAlcE1cbiIsCisJCQlkZXYtPm5hbWUsIGVwLT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYwppbmRleCAxZjdhNjljLi5kOWRlOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCkBAIC00NjMsNyArNDYzLDcgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCS8qIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJcHJpdihkZXYpLT5yZWdzLmNvbmZpZzEgfD0gQ0ZHMV9SRUNWUFJPTUlTQzsKLQl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCkgeworCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJcHJpdihkZXYpLT5yZWdzLmNvbmZpZzEgfD0gQ0ZHMV9SRUNWU1BFQ0JSTVVMVEk7CiAJfSBlbHNlCiAJCXByaXYoZGV2KS0+cmVncy5jb25maWcxIHw9IENGRzFfUkVDVlNQRUNCUk9BRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IGMzZGZiZGQuLjZlMmFlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNzM1LDIyICs3MzUsMjUgQEAKIHN0YXRpYyB2b2lkIGV0aF9zZXRfbWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAl1OCBkaWZmc1tFVEhfQUxFTl0sICphZGRyOwotCWludCBjbnQgPSBkZXYtPm1jX2NvdW50LCBpOworCWludCBpOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8ICFtY2xpc3QgfHwgIWNudCkgeworCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCBuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlfX3Jhd193cml0ZWwoREVGQVVMVF9SWF9DTlRSTDAgJiB+UlhfQ05UUkwwX0FERFJfRkxUUl9FTiwKIAkJCSAgICAgJnBvcnQtPnJlZ3MtPnJ4X2NvbnRyb2xbMF0pOwogCQlyZXR1cm47CiAJfQogCiAJbWVtc2V0KGRpZmZzLCAwLCBFVEhfQUxFTik7Ci0JYWRkciA9IG1jbGlzdC0+ZG1pX2FkZHI7IC8qIGZpcnN0IE1BQyBhZGRyZXNzICovCiAKLQl3aGlsZSAoLS1jbnQgJiYgKG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkpCisJYWRkciA9IE5VTEw7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKKwkJaWYgKCFhZGRyKQorCQkJYWRkciA9IG1jbGlzdC0+ZG1pX2FkZHI7IC8qIGZpcnN0IE1BQyBhZGRyZXNzICovCiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQkJZGlmZnNbaV0gfD0gYWRkcltpXSBeIG1jbGlzdC0+ZG1pX2FkZHJbaV07CisJfQogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKIAkJX19yYXdfd3JpdGVsKGFkZHJbaV0sICZwb3J0LT5yZWdzLT5tY2FzdF9hZGRyW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwppbmRleCBiZTI1NmIzLi44Y2E2MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCkBAIC0zMjcsMjUgKzMyNywyNCBAQAogICovCiBzdGF0aWMgdm9pZAoga3M4Njk1X2luaXRfcGFydGlhbF9tdWx0aWNhc3Qoc3RydWN0IGtzODY5NV9wcml2ICprc3AsCi0JCQkgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmFkZHIsCi0JCQkgICAgICBpbnQgbnJfYWRkcikKKwkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXUzMiBsb3csIGhpZ2g7CiAJaW50IGk7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfYWRkcjsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkgewotCQkvKiBSYW4gb3V0IG9mIGFkZHJlc3Nlcz8gKi8KLQkJaWYgKCFhZGRyKQotCQkJYnJlYWs7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBuZGV2KSB7CiAJCS8qIFJhbiBvdXQgb2Ygc3BhY2UgaW4gY2hpcD8gKi8KIAkJQlVHX09OKGkgPT0gS1M4Njk1X05SX0FERFJFU1NFUyk7CiAKLQkJbG93ID0gKGFkZHItPmRtaV9hZGRyWzJdIDw8IDI0KSB8IChhZGRyLT5kbWlfYWRkclszXSA8PCAxNikgfAotCQkJKGFkZHItPmRtaV9hZGRyWzRdIDw8IDgpIHwgKGFkZHItPmRtaV9hZGRyWzVdKTsKLQkJaGlnaCA9IChhZGRyLT5kbWlfYWRkclswXSA8PCA4KSB8IChhZGRyLT5kbWlfYWRkclsxXSk7CisJCWxvdyA9IChkbWktPmRtaV9hZGRyWzJdIDw8IDI0KSB8IChkbWktPmRtaV9hZGRyWzNdIDw8IDE2KSB8CisJCSAgICAgIChkbWktPmRtaV9hZGRyWzRdIDw8IDgpIHwgKGRtaS0+ZG1pX2FkZHJbNV0pOworCQloaWdoID0gKGRtaS0+ZG1pX2FkZHJbMF0gPDwgOCkgfCAoZG1pLT5kbWlfYWRkclsxXSk7CiAKIAkJa3M4Njk1X3dyaXRlcmVnKGtzcCwgS1M4Njk1X0FBTF8oaSksIGxvdyk7CiAJCWtzODY5NV93cml0ZXJlZyhrc3AsIEtTODY5NV9BQUhfKGkpLCBBQUhfRSB8IGhpZ2gpOworCQlpKys7CiAJfQogCiAJLyogQ2xlYXIgdGhlIHJlbWFpbmluZyBBZGRpdGlvbmFsIFN0YXRpb24gQWRkcmVzc2VzICovCkBAIC0xMjA3LDcgKzEyMDYsNyBAQAogCWlmIChuZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkvKiBlbmFibGUgYWxsIG11bHRpY2FzdCBtb2RlICovCiAJCWN0cmwgfD0gRFJYQ19STTsKLQl9IGVsc2UgaWYgKG5kZXYtPm1jX2NvdW50ID4gS1M4Njk1X05SX0FERFJFU1NFUykgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2NvdW50KG5kZXYpID4gS1M4Njk1X05SX0FERFJFU1NFUykgewogCQkvKiBtb3JlIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgdGhhbiBjYW4gYmUKIAkJICogaGFuZGxlZCBpbiBoYXJkd2FyZQogCQkgKi8KQEAgLTEyMTUsOCArMTIxNCw3IEBACiAJfSBlbHNlIHsKIAkJLyogZW5hYmxlIHNwZWNpZmljIG11bHRpY2FzdHMgKi8KIAkJY3RybCAmPSB+RFJYQ19STTsKLQkJa3M4Njk1X2luaXRfcGFydGlhbF9tdWx0aWNhc3Qoa3NwLCBuZGV2LT5tY19saXN0LAotCQkJCQkgICAgICBuZGV2LT5tY19jb3VudCk7CisJCWtzODY5NV9pbml0X3BhcnRpYWxfbXVsdGljYXN0KGtzcCwgbmRldik7CiAJfQogCiAJa3M4Njk1X3dyaXRlcmVnKGtzcCwgS1M4Njk1X0RSWEMsIGN0cmwpOwpAQCAtMTMzNSw3ICsxMzMzLDYgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJbmFwaV9kaXNhYmxlKCZrc3AtPm5hcGkpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCiAJa3M4Njk1X3NodXRkb3duKGtzcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCmluZGV4IGI3ZjM4NjYuLmZlYmQ4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYwpAQCAtODU4LDEwICs4NTgsMTAgQEAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJ4X21vZGUgPSBDQU1DTVJfQVVQIHwgQ0FNQ01SX0FNUCB8IENBTUNNUl9BQlAgfCBDQU1DTVJfRUNNUDsKLQllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19saXN0KQotCQkJcnhfbW9kZSA9IENBTUNNUl9BTVAgfCBDQU1DTVJfQUJQIHwgQ0FNQ01SX0VDTVA7Ci0JCWVsc2UKLQkJCQlyeF9tb2RlID0gQ0FNQ01SX0VDTVAgfCBDQU1DTVJfQUJQOworCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpCisJCXJ4X21vZGUgPSBDQU1DTVJfQU1QIHwgQ0FNQ01SX0FCUCB8IENBTUNNUl9FQ01QOworCWVsc2UKKwkJcnhfbW9kZSA9IENBTUNNUl9FQ01QIHwgQ0FNQ01SX0FCUDsKIAlfX3Jhd193cml0ZWwocnhfbW9kZSwgZXRoZXItPnJlZyArIFJFR19DQU1DTVIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdDE3MDAuYyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCmluZGV4IGIxNGY0NzkuLjMwOTg0M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC04MzksMjEgKzgzOSwxOSBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQlvdXRiKDMsIGlvYWRkciArIFJYX01PREUpOwkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IE1DX0ZJTFRFUkJSRUFLIHx8CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IE1DX0ZJTFRFUkJSRUFLIHx8CiAJCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJb3V0YigyLCBpb2FkZHIgKyBSWF9NT0RFKTsJLyogVXNlIG5vcm1hbCBtb2RlLiAqLwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA9PSAwKSB7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQltZW1zZXQobWNfZmlsdGVyLCAweDAwLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCW91dGIoMSwgaW9hZGRyICsgUlhfTU9ERSk7CS8qIElnbm9yZSBhbG1vc3QgYWxsIG11bHRpY2FzdHMuICovCiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOwogCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCXVuc2lnbmVkIGludCBiaXQgPQogCQkJCWV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAJCQltY19maWx0ZXJbYml0ID4+IDNdIHw9ICgxIDw8IGJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKaW5kZXggY2M5ZWQ4Ni4uMjgwY2ZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAkJUkVHQSggQ1NSMTUgKSA9IDB4ODAwMDsgLyogU2V0IHByb21pc2N1b3VzIG1vZGUgKi8KIAl9IGVsc2UgewogCQlzaG9ydCBtdWx0aWNhc3RfdGFibGVbNF07Ci0JCWludCBudW1fYWRkcnMgPSBkZXYtPm1jX2NvdW50OworCQlpbnQgbnVtX2FkZHJzID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJCWludCBpOwogCQkvKiBXZSBkb24ndCB1c2UgdGhlIG11bHRpY2FzdCB0YWJsZSwgYnV0IHJlbHkgb24gdXBwZXItbGF5ZXIKIAkJICogZmlsdGVyaW5nLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKaW5kZXggZWZlNTQzNS4uODRhZTkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCkBAIC0zMTMsNiArMzEzLDkgQEAKIGVudW0gYXRsMWNfbmljX3R5cGUgewogCWF0aHJfbDFjID0gMCwKIAlhdGhyX2wyYyA9IDEsCisJYXRocl9sMmNfYiwKKwlhdGhyX2wyY19iMiwKKwlhdGhyX2wxZCwKIH07CiAKIGVudW0gYXRsMWNfdHJhbnNfcXVldWUgewpAQCAtNDI2LDggKzQyOSwxMiBAQAogI2RlZmluZSBBVEwxQ19BU1BNX0wxX1NVUFBPUlQJCTB4MDEwMAogI2RlZmluZSBBVEwxQ19BU1BNX0NUUkxfTU9OCQkweDAyMDAKICNkZWZpbmUgQVRMMUNfSElCX0RJU0FCTEUJCTB4MDQwMAotI2RlZmluZSBBVEwxQ19MSU5LX0NBUF8xMDAwTQkJMHgwODAwCi0jZGVmaW5lIEFUTDFDX0ZQR0FfVkVSU0lPTgkJMHg4MDAwCisjZGVmaW5lIEFUTDFDX0FQU19NT0RFX0VOQUJMRSAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEFUTDFDX0xJTktfRVhUX1NZTkMgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEFUTDFDX0NMS19HQVRJTkdfRU4gICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFUTDFDX0ZQR0FfVkVSU0lPTiAgICAgICAgICAgICAgMHg4MDAwCisJdTE2IGxpbmtfY2FwX2ZsYWdzOworI2RlZmluZSBBVEwxQ19MSU5LX0NBUF8xMDAwTQkJMHgwMDAxCiAJdTE2IGNtYl90cGQ7CiAJdTE2IGNtYl9ycmQ7CiAJdTE2IGNtYl9yeF90aW1lcjsgLyogMnVzIHJlc29sdXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYwppbmRleCA5YjFlMGVhLi42MWEwZjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCkBAIC0zNyw3ICszNyw3IEBACiAJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJCQkgICBTVVBQT1JURURfQXV0b25lZyAgICAgICB8CiAJCQkgICBTVVBQT1JURURfVFApOwotCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0xJTktfQ0FQXzEwMDBNKQorCWlmIChody0+bGlua19jYXBfZmxhZ3MgJiBBVEwxQ19MSU5LX0NBUF8xMDAwTSkKIAkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKIAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5jCmluZGV4IDNlNjliOTQuLmYxMzg5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYwpAQCAtNzAsMTcgKzcwLDM5IEBACiAJdTMyIG90cF9jdHJsX2RhdGE7CiAJdTMyIHR3c2lfY3RybF9kYXRhOwogCXU4ICBldGhfYWRkcltFVEhfQUxFTl07CisJdTE2IHBoeV9kYXRhOworCWJvb2wgcmFpc2Vfdm9sID0gZmFsc2U7CiAKIAkvKiBpbml0ICovCiAJYWRkclswXSA9IGFkZHJbMV0gPSAwOwogCUFUX1JFQURfUkVHKGh3LCBSRUdfT1RQX0NUUkwsICZvdHBfY3RybF9kYXRhKTsKIAlpZiAoYXRsMWNfY2hlY2tfZWVwcm9tX2V4aXN0KGh3KSkgewotCQkvKiBFbmFibGUgT1RQIENMSyAqLwotCQlpZiAoIShvdHBfY3RybF9kYXRhICYgT1RQX0NUUkxfQ0xLX0VOKSkgewotCQkJb3RwX2N0cmxfZGF0YSB8PSBPVFBfQ1RSTF9DTEtfRU47Ci0JCQlBVF9XUklURV9SRUcoaHcsIFJFR19PVFBfQ1RSTCwgb3RwX2N0cmxfZGF0YSk7Ci0JCQlBVF9XUklURV9GTFVTSChodyk7Ci0JCQltc2xlZXAoMSk7CisJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWMgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpIHsKKwkJCS8qIEVuYWJsZSBPVFAgQ0xLICovCisJCQlpZiAoIShvdHBfY3RybF9kYXRhICYgT1RQX0NUUkxfQ0xLX0VOKSkgeworCQkJCW90cF9jdHJsX2RhdGEgfD0gT1RQX0NUUkxfQ0xLX0VOOworCQkJCUFUX1dSSVRFX1JFRyhodywgUkVHX09UUF9DVFJMLCBvdHBfY3RybF9kYXRhKTsKKwkJCQlBVF9XUklURV9GTFVTSChodyk7CisJCQkJbXNsZWVwKDEpOworCQkJfQorCQl9CisKKwkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8CisJCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIgfHwKKwkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkgeworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDAwKTsKKwkJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJnBoeV9kYXRhKSkKKwkJCQlnb3RvIG91dDsKKwkJCXBoeV9kYXRhICY9IDB4RkY3RjsKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEpOworCisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4M0IpOworCQkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAmcGh5X2RhdGEpKQorCQkJCWdvdG8gb3V0OworCQkJcGh5X2RhdGEgfD0gMHg4OworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCBwaHlfZGF0YSk7CisJCQl1ZGVsYXkoMjApOworCQkJcmFpc2Vfdm9sID0gdHJ1ZTsKIAkJfQogCiAJCUFUX1JFQURfUkVHKGh3LCBSRUdfVFdTSV9DVFJMLCAmdHdzaV9jdHJsX2RhdGEpOwpAQCAtOTYsMTEgKzExOCwzMSBAQAogCQkJcmV0dXJuIC0xOwogCX0KIAkvKiBEaXNhYmxlIE9UUF9DTEsgKi8KLQlpZiAob3RwX2N0cmxfZGF0YSAmIE9UUF9DVFJMX0NMS19FTikgewotCQlvdHBfY3RybF9kYXRhICY9IH5PVFBfQ1RSTF9DTEtfRU47Ci0JCUFUX1dSSVRFX1JFRyhodywgUkVHX09UUF9DVFJMLCBvdHBfY3RybF9kYXRhKTsKLQkJQVRfV1JJVEVfRkxVU0goaHcpOwotCQltc2xlZXAoMSk7CisJaWYgKChody0+bmljX3R5cGUgPT0gYXRocl9sMWMgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjKSkgeworCQlpZiAob3RwX2N0cmxfZGF0YSAmIE9UUF9DVFJMX0NMS19FTikgeworCQkJb3RwX2N0cmxfZGF0YSAmPSB+T1RQX0NUUkxfQ0xLX0VOOworCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfT1RQX0NUUkwsIG90cF9jdHJsX2RhdGEpOworCQkJQVRfV1JJVEVfRkxVU0goaHcpOworCQkJbXNsZWVwKDEpOworCQl9CisJfQorCWlmIChyYWlzZV92b2wpIHsKKwkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8CisJCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIgfHwKKwkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkgeworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDAwKTsKKwkJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJnBoeV9kYXRhKSkKKwkJCQlnb3RvIG91dDsKKwkJCXBoeV9kYXRhIHw9IDB4ODA7CisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIHBoeV9kYXRhKTsKKworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDNCKTsKKwkJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJnBoeV9kYXRhKSkKKwkJCQlnb3RvIG91dDsKKwkJCXBoeV9kYXRhICY9IDB4RkZGNzsKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEpOworCQkJdWRlbGF5KDIwKTsKKwkJfQogCX0KIAogCS8qIG1heWJlIE1BQy1hZGRyZXNzIGlzIGZyb20gQklPUyAqLwpAQCAtMTE0LDYgKzE1Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAorb3V0OgogCXJldHVybiAtMTsKIH0KIApAQCAtMzA3LDcgKzM1MCw3IEBACiAJCW1paV9hZHZfZGF0YSB8PSBBRFZFUlRJU0VfMTBIQUxGICB8IEFEVkVSVElTRV8xMEZVTEwgfAogCQkJCUFEVkVSVElTRV8xMDBIQUxGIHwgQURWRVJUSVNFXzEwMEZVTEw7CiAKLQlpZiAoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19MSU5LX0NBUF8xMDAwTSkgeworCWlmIChody0+bGlua19jYXBfZmxhZ3MgJiBBVEwxQ19MSU5LX0NBUF8xMDAwTSkgewogCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCiAJCQltaWlfZ2lnYV9jdHJsX2RhdGEgfD0gQURWRVJUSVNFXzEwMDBIQUxGOwogCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCkBAIC0zODksNiArNDMyLDcgQEAKIHsKIAlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5hZGFwdGVyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1MTYgcGh5X2RhdGE7CiAJdTMyIHBoeV9jdHJsX2RhdGEgPSBHUEhZX0NUUkxfREVGQVVMVDsKIAl1MzIgbWlpX2llcl9kYXRhID0gSUVSX0xJTktfVVAgfCBJRVJfTElOS19ET1dOOwogCWludCBlcnI7CkBAIC00MDQsNiArNDQ4LDIxIEBACiAJQVRfV1JJVEVfRkxVU0goaHcpOwogCW1zbGVlcCgxMCk7CiAKKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpIHsKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDBBKTsKKwkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsICZwaHlfZGF0YSk7CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEgJiAweERGRkYpOworCX0KKworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fAorCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIgfHwKKwkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkKSB7CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHgzQik7CisJCWF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAmcGh5X2RhdGEpOworCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIHBoeV9kYXRhICYgMHhGRkY3KTsKKwkJbXNsZWVwKDIwKTsKKwl9CisKIAkvKkVuYWJsZSBQSFkgTGlua0NoYW5nZSBJbnRlcnJ1cHQgKi8KIAllcnIgPSBhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfSUVSLCBtaWlfaWVyX2RhdGEpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5oCmluZGV4IGMyYzczOGQuLjFlZWIzZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmgKQEAgLTU3LDYgKzU3LDcgQEAKICNkZWZpbmUgUkVHX0xJTktfQ1RSTAkJCTB4NjgKICNkZWZpbmUgTElOS19DVFJMX0wwU19FTgkJMHgwMQogI2RlZmluZSBMSU5LX0NUUkxfTDFfRU4JCQkweDAyCisjZGVmaW5lIExJTktfQ1RSTF9FWFRfU1lOQwkJMHg4MAogCiAjZGVmaW5lIFJFR19WUERfQ0FQCQkJMHg2QwogI2RlZmluZSBWUERfQ0FQX0lEX01BU0sgICAgICAgICAgICAgICAgIDB4ZmYKQEAgLTE1Niw2ICsxNTcsOCBAQAogI2RlZmluZSBQTV9DVFJMX1BNX1JFUV9USU1FUl9TSElGVAkyMAogI2RlZmluZSBQTV9DVFJMX0xDS0RFVF9USU1FUl9NQVNLCTB4M0YKICNkZWZpbmUgUE1fQ1RSTF9MQ0tERVRfVElNRVJfU0hJRlQJMjQKKyNkZWZpbmUgUE1fQ1RSTF9FTl9CVUZTX1JYX0wwUwkJMHgxMDAwMDAwMAorI2RlZmluZSBQTV9DVFJMX1NBX0RMWV9FTgkJMHgyMDAwMDAwMAogI2RlZmluZSBQTV9DVFJMX01BQ19BU1BNX0NISwkJMHg0MDAwMDAwMAogI2RlZmluZSBQTV9DVFJMX0hPVFJTVAkJCTB4ODAwMDAwMDAKIApAQCAtMzE0LDYgKzMxNyw4IEBACiAjZGVmaW5lIE1BQ19DVFJMX0JDX0VOICAgICAgICAgICAgICAJMHg0MDAwMDAwCiAjZGVmaW5lIE1BQ19DVFJMX0RCRyAgICAgICAgICAgICAgICAJMHg4MDAwMDAwCiAjZGVmaW5lIE1BQ19DVFJMX1NJTkdMRV9QQVVTRV9FTgkweDEwMDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX0hBU0hfQUxHX0NSQzMyCQkweDIwMDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1NQRUVEX01PREVfU1cJCTB4NDAwMDAwMDAKIAogLyogTUFDIElQRy9JRkcgQ29udHJvbCBSZWdpc3RlciAgKi8KICNkZWZpbmUgUkVHX01BQ19JUEdfSUZHICAgICAgICAgICAgIAkweDE0ODQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCAyZjRiZTU5Li41MGRjNTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0yMSwxMSArMjEsMTggQEAKIAogI2luY2x1ZGUgImF0bDFjLmgiCiAKLSNkZWZpbmUgQVRMMUNfRFJWX1ZFUlNJT04gIjEuMC4wLjEtTkFQSSIKKyNkZWZpbmUgQVRMMUNfRFJWX1ZFUlNJT04gIjEuMC4wLjItTkFQSSIKIGNoYXIgYXRsMWNfZHJpdmVyX25hbWVbXSA9ICJhdGwxYyI7CiBjaGFyIGF0bDFjX2RyaXZlcl92ZXJzaW9uW10gPSBBVEwxQ19EUlZfVkVSU0lPTjsKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMkMgICAgICAweDEwNjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMUMgICAgICAweDEwNjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CCTB4MjA2MCAvKiBBUjgxNTIgdjEuMSBGYXN0IDEwLzEwMCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IyCTB4MjA2MiAvKiBBUjgxNTIgdjIuMCBGYXN0IDEwLzEwMCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFECTB4MTA3MyAvKiBBUjgxNTEgdjEuMCBHaWdhYml0IDEwMDAgKi8KKworI2RlZmluZSBMMkNCX1YxMAkJCTB4YzAKKyNkZWZpbmUgTDJDQl9WMTEJCQkweGMxCisKIC8qCiAgKiBhdGwxY19wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICoKQEAgLTM1LDkgKzQyLDEyIEBACiAgKiB7IFZlbmRvciBJRCwgRGV2aWNlIElELCBTdWJWZW5kb3IgSUQsIFN1YkRldmljZSBJRCwKICAqICAgQ2xhc3MsIENsYXNzIE1hc2ssIHByaXZhdGUgZGF0YSAobm90IHVzZWQpIH0KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDFjX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhdGwxY19wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wxQyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDJDKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMUQpfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJeyAwIH0KIH07CkBAIC0zNjcsNyArMzc3LDcgQEAKIAlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19SWF9IQVNIX1RBQkxFLCAxLCAwKTsKIAogCS8qIGNvbW91dGUgbWMgYWRkcmVzc2VzJyBoYXNoIHZhbHVlICxhbmQgcHV0IGl0IGludG8gaGFzaCB0YWJsZSAqLwotCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KSB7CiAJCWhhc2hfdmFsdWUgPSBhdGwxY19oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGwxY19oYXNoX3NldChodywgaGFzaF92YWx1ZSk7CiAJfQpAQCAtNTkzLDExICs2MDMsMTggQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDJDOgogCQlody0+bmljX3R5cGUgPSBhdGhyX2wyYzsKIAkJYnJlYWs7Ci0KIAljYXNlIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFDOgogCQlody0+bmljX3R5cGUgPSBhdGhyX2wxYzsKIAkJYnJlYWs7Ci0KKwljYXNlIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQjoKKwkJaHctPm5pY190eXBlID0gYXRocl9sMmNfYjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IyOgorCQlody0+bmljX3R5cGUgPSBhdGhyX2wyY19iMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEOgorCQlody0+bmljX3R5cGUgPSBhdGhyX2wxZDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjIwLDEwICs2MzcsMTMgQEAKIAkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfQVNQTV9MMFNfU1VQUE9SVDsKIAlpZiAobGlua19jdHJsX2RhdGEgJiBMSU5LX0NUUkxfTDFfRU4pCiAJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fTDFfU1VQUE9SVDsKKwlpZiAobGlua19jdHJsX2RhdGEgJiBMSU5LX0NUUkxfRVhUX1NZTkMpCisJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0xJTktfRVhUX1NZTkM7CiAKLQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFjKSB7CisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxYyB8fAorCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWQpIHsKIAkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfQVNQTV9DVFJMX01PTjsKLQkJaHctPmN0cmxfZmxhZ3MgfD0gQVRMMUNfTElOS19DQVBfMTAwME07CisJCWh3LT5saW5rX2NhcF9mbGFncyB8PSBBVEwxQ19MSU5LX0NBUF8xMDAwTTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjM0LDIxICsxMjU0LDkyIEBACiBzdGF0aWMgdm9pZCBhdGwxY19zZXRfYXNwbShzdHJ1Y3QgYXRsMWNfaHcgKmh3LCBib29sIGxpbmt1cCkKIHsKIAl1MzIgcG1fY3RybF9kYXRhOworCXUzMiBsaW5rX2N0cmxfZGF0YTsKIAogCUFUX1JFQURfUkVHKGh3LCBSRUdfUE1fQ1RSTCwgJnBtX2N0cmxfZGF0YSk7Ci0KKwlBVF9SRUFEX1JFRyhodywgUkVHX0xJTktfQ1RSTCwgJmxpbmtfY3RybF9kYXRhKTsKIAlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0VSREVTX1BEX0VYX0wxOworCiAJcG1fY3RybF9kYXRhICY9ICB+KFBNX0NUUkxfTDFfRU5UUllfVElNRVJfTUFTSyA8PAogCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVCk7CisJcG1fY3RybF9kYXRhICY9IH4oUE1fQ1RSTF9MQ0tERVRfVElNRVJfTUFTSyA8PAorCQkJICBQTV9DVFJMX0xDS0RFVF9USU1FUl9TSElGVCk7CiAKIAlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9NQUNfQVNQTV9DSEs7CisJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CisJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfUkJFUl9FTjsKKwlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TREVTX0VOOworCisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8CisJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCB8fAorCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIpIHsKKwkJbGlua19jdHJsX2RhdGEgJj0gfkxJTktfQ1RSTF9FWFRfU1lOQzsKKwkJaWYgKCEoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19BUFNfTU9ERV9FTkFCTEUpKSB7CisJCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgJiYKKwkJCSAgICBody0+cmV2aXNpb25faWQgPT0gTDJDQl9WMTApCisJCQkJbGlua19jdHJsX2RhdGEgfD0gTElOS19DVFJMX0VYVF9TWU5DOworCQl9CisKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTElOS19DVFJMLCBsaW5rX2N0cmxfZGF0YSk7CisKKwkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfUENJRV9SRUNWOworCQlwbV9jdHJsX2RhdGEgfD0gQVRfQVNQTV9MMV9USU1FUiA8PCBQTV9DVFJMX1BNX1JFUV9USU1FUl9TSElGVDsKKwkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0VOX0JVRlNfUlhfTDBTOworCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0FfRExZX0VOOworCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfSE9UUlNUOworCQlwbV9jdHJsX2RhdGEgfD0gMSA8PCBQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX1NISUZUOworCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfUERfRVhfTDE7CisJfQogCiAJaWYgKGxpbmt1cCkgewotCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOwotCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQ0xLX1NXSF9MMTsKKwkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CisJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wwU19FTjsKKwkJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9MMV9TVVBQT1JUKQorCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfQVNQTV9MMV9FTjsKKwkJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9MMFNfU1VQUE9SVCkKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0FTUE1fTDBTX0VOOwogCi0JCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOOwotCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfTDFfRU47CisJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fAorCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkIHx8CisJCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIpIHsKKwkJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYikKKwkJCQlpZiAoIShody0+Y3RybF9mbGFncyAmIEFUTDFDX0FQU19NT0RFX0VOQUJMRSkpCisJCQkJCXBtX2N0cmxfZGF0YSAmPSBQTV9DVFJMX0FTUE1fTDBTX0VOOworCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOworCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOOworCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfQ0xLX1NXSF9MMTsKKwkJCWlmIChody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAgfHwKKwkJCSAgICBody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCQkJcG1fY3RybF9kYXRhICY9CisJCQkJCX4oUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9NQVNLIDw8CisJCQkJCSAgUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVCk7CisJCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkKKwkJCQkJcG1fY3RybF9kYXRhIHw9IDB4RiA8PAorCQkJCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVDsKKwkJCQllbHNlCisJCQkJCXBtX2N0cmxfZGF0YSB8PSA3IDw8CisJCQkJCQlQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX1NISUZUOworCQkJfQorCQl9IGVsc2UgeworCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0VSREVTX0wxX0VOOworCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0VSREVTX1BMTF9MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOOworCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0NMS19TV0hfTDE7CisJCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMFNfRU47CisJCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMV9FTjsKKwkJfQorCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4MjkpOworCQlpZiAoaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTApCisJCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFkKQorCQkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHhCNjlEKTsKKwkJCWVsc2UKKwkJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIDB4QjZERCk7CisJCWVsc2UgaWYgKGh3LT5hZGFwdGVyLT5saW5rX3NwZWVkID09IFNQRUVEXzEwMCkKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgMHhCMkREKTsKKwkJZWxzZQorCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweDk2REQpOworCiAJfSBlbHNlIHsKIAkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOOwogCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0VSREVTX0wxX0VOOwpAQCAtMTMwMiw2ICsxMzkzLDEwIEBACiAJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOwogCiAJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9TSU5HTEVfUEFVU0VfRU47CisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCB8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIpIHsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9TUEVFRF9NT0RFX1NXOworCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX0hBU0hfQUxHX0NSQzMyOworCX0KIAlBVF9XUklURV9SRUcoaHcsIFJFR19NQUNfQ1RSTCwgbWFjX2N0cmxfZGF0YSk7CiB9CiAKQEAgLTI1OTYsMTEgKzI2OTEsOCBAQAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJaWYgKG5ldGlmX21zZ19wcm9iZShhZGFwdGVyKSkKLQkJZGV2X2RiZygmcGRldi0+ZGV2LAotCQkJIm1hYyBhZGRyZXNzIDogJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnhcbiIsCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkclswXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbMV0sCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkclsyXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbM10sCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkcls0XSwgYWRhcHRlci0+aHcubWFjX2FkZHJbNV0pOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJtYWMgYWRkcmVzcyA6ICVwTVxuIiwKKwkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyKTsKIAogCWF0bDFjX2h3X3NldF9tYWNfYWRkcigmYWRhcHRlci0+aHcpOwogCUlOSVRfV09SSygmYWRhcHRlci0+Y29tbW9uX3Rhc2ssIGF0bDFjX2NvbW1vbl90YXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2h3LmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5jCmluZGV4IDRhNzcwMDYyLi43NmNjMDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2h3LmMKQEAgLTM5NCw3ICszOTQsNiBAQAogaW50IGF0bDFlX3BoeV9jb21taXQoc3RydWN0IGF0bDFlX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5hZGFwdGVyOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGE7CiAKQEAgLTQxNSwxMiArNDE0LDEyIEBACiAJCX0KIAogCQlpZiAoMCAhPSAodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJwY2llIGxpbmtkb3duIGF0IGxlYXN0IGZvciAyNW1zXG4iKTsKKwkJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJCSAgICJwY2llIGxpbmtkb3duIGF0IGxlYXN0IGZvciAyNW1zXG4iKTsKIAkJCXJldHVybiByZXRfdmFsOwogCQl9CiAKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpZSBsaW5rdXAgYWZ0ZXIgJWQgbXNcbiIsIGkpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgInBjaWUgbGlua3VwIGFmdGVyICVkIG1zXG4iLCBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00MjgsNyArNDI3LDYgQEAKIGludCBhdGwxZV9waHlfaW5pdChzdHJ1Y3QgYXRsMWVfaHcgKmh3KQogewogCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmFkYXB0ZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfdmFsOwogCkBAIC00OTIsMjAgKzQ5MCwyMiBAQAogCS8qRW5hYmxlIFBIWSBMaW5rQ2hhbmdlIEludGVycnVwdCAqLwogCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfSU5UX0NUUkwsIDB4QzAwKTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBlbmFibGUgUEhZIGxpbmtDaGFuZ2UgSW50ZXJydXB0XG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiRXJyb3IgZW5hYmxlIFBIWSBsaW5rQ2hhbmdlIEludGVycnVwdFxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KIAkvKiBzZXR1cCBBdXRvTmVnIHBhcmFtZXRlcnMgKi8KIAlyZXRfdmFsID0gYXRsMWVfcGh5X3NldHVwX2F1dG9uZWdfYWR2KGh3KTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgICJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOwogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAJLyogU1cuUmVzZXQgJiBFbi1BdXRvLU5lZyB0byByZXN0YXJ0IEF1dG8tTmVnKi8KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZXN0YXJ0aW5nIEF1dG8tTmVnIik7CisJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsICJSZXN0YXJ0aW5nIEF1dG8tTmVnb3RpYXRpb25cbiIpOwogCXJldF92YWwgPSBhdGwxZV9waHlfY29tbWl0KGh3KTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBSZXNldHRpbmcgdGhlIHBoeSIpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgIkVycm9yIHJlc2V0dGluZyB0aGUgcGh5XG4iKTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCkBAIC01NTksOSArNTU5LDggQEAKIAl9CiAKIAlpZiAodGltZW91dCA+PSBBVF9IV19NQVhfSURMRV9ERUxBWSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiTUFDIHN0YXRlIG1hY2hpbmUgY2Fubid0IGJlIGlkbGUgc2luY2UiCi0JCQkiIGRpc2FibGVkIGZvciAxMG1zIHNlY29uZFxuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIk1BQyBzdGF0ZSBtYWNoaW5lIGNhbid0IGJlIGlkbGUgc2luY2UgZGlzYWJsZWQgZm9yIDEwbXMgc2Vjb25kXG4iKTsKIAkJcmV0dXJuIEFUX0VSUl9USU1FT1VUOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IDA4ZjhjMDkuLjczMzAyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMWVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDFlX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFFKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgMHgxMDY2KX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtMTY0LDExICsxNjQsMTAgQEAKIHsKIAlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IGVyciA9IDA7CiAJdTE2IHNwZWVkLCBkdXBsZXgsIHBoeV9kYXRhOwogCi0JLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aXNlICovCisJLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aWNlICovCiAJYXRsMWVfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKIAlhdGwxZV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOwogCWlmICgocGh5X2RhdGEgJiBCTVNSX0xTVEFUVVMpID09IDApIHsKQEAgLTE5NSwxMiArMTk0LDExIEBACiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkICA9IHNwZWVkOwogCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSBkdXBsZXg7CiAJCQlhdGwxZV9zZXR1cF9tYWNfY3RybChhZGFwdGVyKTsKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkJIiVzOiAlcyBOSUMgTGluayBpcyBVcDwlZCBNYnBzICVzPlxuIiwKLQkJCQlhdGwxZV9kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLAotCQkJCWFkYXB0ZXItPmxpbmtfc3BlZWQsCi0JCQkJYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVggPwotCQkJCSJGdWxsIER1cGxleCIgOiAiSGFsZiBEdXBsZXgiKTsKKwkJCW5ldGRldl9pbmZvKG5ldGRldiwKKwkJCQkgICAgIk5JQyBMaW5rIGlzIFVwIDwlZCBNYnBzICVzIER1cGxleD5cbiIsCisJCQkJICAgIGFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJICAgIGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkgICAgIkZ1bGwiIDogIkhhbGYiKTsKIAkJfQogCiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CkBAIC0yMzAsNyArMjI4LDYgQEAKIHN0YXRpYyB2b2lkIGF0bDFlX2xpbmtfY2hnX2V2ZW50KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CiAJdTE2IHBoeV9kYXRhID0gMDsKIAl1MTYgbGlua191cCA9IDA7CiAKQEAgLTI0Myw4ICsyNDAsNyBAQAogCWlmICghbGlua191cCkgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQkvKiBvbGQgbGluayBzdGF0ZTogVXAgKi8KLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogJXMgTklDIExpbmsgaXMgRG93blxuIiwKLQkJCQkJYXRsMWVfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhuZXRkZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKIAkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQl9CkBAIC0zMTEsNyArMzA3LDcgQEAKIAlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19SWF9IQVNIX1RBQkxFLCAxLCAwKTsKIAogCS8qIGNvbW91dGUgbWMgYWRkcmVzc2VzJyBoYXNoIHZhbHVlICxhbmQgcHV0IGl0IGludG8gaGFzaCB0YWJsZSAqLwotCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KSB7CiAJCWhhc2hfdmFsdWUgPSBhdGwxZV9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGwxZV9oYXNoX3NldChodywgaGFzaF92YWx1ZSk7CiAJfQpAQCAtMzIxLDEwICszMTcsOSBAQAogCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAl1MzIgbWFjX2N0cmxfZGF0YSA9IDA7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhdGwxZV92bGFuX3J4X3JlZ2lzdGVyXG4iKTsKKwluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlhdGwxZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMzQ1LDkgKzM0MCw3IEBACiAKIHN0YXRpYyB2b2lkIGF0bDFlX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhdGwxZV9yZXN0b3JlX3ZsYW4gISIpOworCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAlhdGwxZV92bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOwogfQogLyoKQEAgLTM5MSw3ICszODQsNyBAQAogCiAJaWYgKChtYXhfZnJhbWUgPCBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSB8fAogCQkJKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgewotCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiaW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CisJCW5ldGRldl93YXJuKGFkYXB0ZXItPm5ldGRldiwgImludmFsaWQgTVRVIHNldHRpbmdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogc2V0IE1UVSAqLwpAQCAtNDM4LDcgKzQzMSw2IEBACiAJCQkgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbCA9IDA7CkBAIC00NjYsOCArNDU4LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiPGF0bDFlX21paV9pb2N0bD4gd3JpdGUgJXggJXgiLAotCQkJCWRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiPGF0bDFlX21paV9pb2N0bD4gd3JpdGUgJXggJXhcbiIsCisJCQkgICBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4pOwogCQlpZiAoYXRsMWVfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsCiAJCQkJICAgICBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4pKSB7CiAJCQlyZXR2YWwgPSAtRUlPOwpAQCAtNjAyLDcgKzU5NCw3IEBACiAJaHctPmRtYXdfZGx5X2NudCA9IDQ7CiAKIAlpZiAoYXRsMWVfYWxsb2NfcXVldWVzKGFkYXB0ZXIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWVzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04MDAsOCArNzkyLDggQEAKIAkJCWFkYXB0ZXItPnJpbmdfc2l6ZSwgJmFkYXB0ZXItPnJpbmdfZG1hKTsKIAogCWlmIChhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkLCAiCi0JCQkJICAgICJzaXplID0gRCVkIiwgc2l6ZSk7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZCwgc2l6ZSA9IEQlZFxuIiwgc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODE3LDcgKzgwOSw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMWVfdHhfYnVmZmVyKSAqICh0eF9yaW5nLT5jb3VudCk7CiAJdHhfcmluZy0+dHhfYnVmZmVyID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAodHhfcmluZy0+dHhfYnVmZmVyID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBmYWlsZWQgLCBzaXplID0gRCVkIiwgc2l6ZSk7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAia3phbGxvYyBmYWlsZWQsIHNpemUgPSBEJWRcbiIsCisJCQkgICBzaXplKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtODUyLDggKzg0NSw4IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KG9mZnNldCA+IGFkYXB0ZXItPnJpbmdfc2l6ZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAib2Zmc2V0KCVkKSA+IHJpbmcgc2l6ZSglZCkgISFcbiIsCi0JCQkJb2Zmc2V0LCBhZGFwdGVyLT5yaW5nX3NpemUpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgIm9mZnNldCglZCkgPiByaW5nIHNpemUoJWQpICEhXG4iLAorCQkJICAgb2Zmc2V0LCBhZGFwdGVyLT5yaW5nX3NpemUpOwogCQllcnIgPSAtMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTA3Nyw3ICsxMDcwLDYgQEAKIHN0YXRpYyBpbnQgYXRsMWVfY29uZmlndXJlKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJdTMyIGludHJfc3RhdHVzX2RhdGEgPSAwOwogCkBAIC0xMTMwLDggKzExMjIsOCBAQAogCiAJaW50cl9zdGF0dXNfZGF0YSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfSVNSKTsKIAlpZiAodW5saWtlbHkoKGludHJfc3RhdHVzX2RhdGEgJiBJU1JfUEhZX0xJTktET1dOKSAhPSAwKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhdGwxZV9jb25maWd1cmUgZmFpbGVkLCIKLQkJCQkiUENJRSBwaHkgbGluayBkb3duXG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiYXRsMWVfY29uZmlndXJlIGZhaWxlZCwgUENJRSBwaHkgbGluayBkb3duXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTI2Miw3ICsxMjU0LDYgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICA9IGRhdGE7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBtYXhfaW50cyA9IEFUX01BWF9JTlRfV09SSzsKIAlpbnQgaGFuZGxlZCA9IElSUV9OT05FOwpAQCAtMTI4NSw4ICsxMjc2LDggQEAKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCQkvKiBjaGVjayBpZiBQQ0lFIFBIWSBMaW5rIGRvd24gKi8KIAkJaWYgKHN0YXR1cyAmIElTUl9QSFlfTElOS0RPV04pIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicGNpZSBwaHkgbGlua2Rvd24gJXhcbiIsIHN0YXR1cyk7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAicGNpZSBwaHkgbGlua2Rvd24gJXhcbiIsIHN0YXR1cyk7CiAJCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCQkJLyogcmVzZXQgTUFDICovCiAJCQkJYXRsMWVfaXJxX3Jlc2V0KGFkYXB0ZXIpOwpAQCAtMTI5Nyw5ICsxMjg4LDkgQEAKIAogCQkvKiBjaGVjayBpZiBETUEgcmVhZC93cml0ZSBlcnJvciAqLwogCQlpZiAoc3RhdHVzICYgKElTUl9ETUFSX1RPX1JTVCB8IElTUl9ETUFXX1RPX1JTVCkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiUENJRSBETUEgUlcgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAotCQkJCXN0YXR1cyk7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAiUENJRSBETUEgUlcgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAorCQkJCSAgIHN0YXR1cyk7CiAJCQlhdGwxZV9pcnFfcmVzZXQoYWRhcHRlcik7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCWJyZWFrOwpAQCAtMTM4Miw3ICsxMzczLDYgQEAKIHN0YXRpYyB2b2lkIGF0bDFlX2NsZWFuX3J4X2lycShzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciwgdTggcXVlLAogCQkgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBhdGwxZV9yeF9yaW5nICpyeF9yaW5nID0gKHN0cnVjdCBhdGwxZV9yeF9yaW5nICopCiAJCQkJCSAmYWRhcHRlci0+cnhfcmluZzsKQEAgLTE0MDQsMTEgKzEzOTQsMTAgQEAKIAkJCQkJCSByeF9wYWdlLT5yZWFkX29mZnNldCk7CiAJCQkvKiBjaGVjayBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJCWlmIChwcnJzLT5zZXFfbnVtICE9IHJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKSB7Ci0JCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkicnggc2VxdWVuY2UgbnVtYmVyIgotCQkJCQkiIGVycm9yIChyeD0lZCkgKGV4cGVjdD0lZClcbiIsCi0JCQkJCXBycnMtPnNlcV9udW0sCi0JCQkJCXJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKTsKKwkJCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCQkJICAgInJ4IHNlcXVlbmNlIG51bWJlciBlcnJvciAocng9JWQpIChleHBlY3Q9JWQpXG4iLAorCQkJCQkgICBwcnJzLT5zZXFfbnVtLAorCQkJCQkgICByeF9wYWdlX2Rlc2NbcXVlXS5yeF9ueHNlcSk7CiAJCQkJcnhfcGFnZV9kZXNjW3F1ZV0ucnhfbnhzZXErKzsKIAkJCQkvKiBqdXN0IGZvciBkZWJ1ZyB1c2UgKi8KIAkJCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfREVCVUdfREFUQTAsCkBAIC0xNDI0LDkgKzE0MTMsOSBAQAogCQkJCQlSUlNfRVJSX0RSSUJCTEUgfCBSUlNfRVJSX0NPREUgfAogCQkJCQlSUlNfRVJSX1RSVU5DKSkgewogCQkJCS8qIGhhcmR3YXJlIGVycm9yLCBkaXNjYXJkIHRoaXMgcGFja2V0Ki8KLQkJCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkJInJ4IHBhY2tldCBkZXNjIGVycm9yICV4XG4iLAotCQkJCQkJKigodTMyICopcHJycyArIDEpKTsKKwkJCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJCQkgICAicnggcGFja2V0IGRlc2MgZXJyb3IgJXhcbiIsCisJCQkJCQkgICAqKCh1MzIgKilwcnJzICsgMSkpOwogCQkJCQlnb3RvIHNraXBfcGt0OwogCQkJCX0KIAkJCX0KQEAgLTE0MzUsOCArMTQyNCw4IEBACiAJCQkJCVJSU19QS1RfU0laRV9NQVNLKSAtIDQ7IC8qIENSQyAqLwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIHBhY2tldF9zaXplKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogTWVtb3J5IHNxdWVlemUsIgotCQkJCQkiZGVmZXJyaW5nIHBhY2tldC5cbiIsIG5ldGRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X3dhcm4obmV0ZGV2LAorCQkJCQkgICAgIk1lbW9yeSBzcXVlZXplLCBkZWZlcnJpbmcgcGFja2V0XG4iKTsKIAkJCQlnb3RvIHNraXBfcGt0OwogCQkJfQogCQkJc2tiLT5kZXYgPSBuZXRkZXY7CkBAIC0xNDUwLDkgKzE0MzksOSBAQAogCQkJCXUxNiB2bGFuX3RhZyA9IChwcnJzLT52dGFnID4+IDQpIHwKIAkJCQkJICAgICAgICgocHJycy0+dnRhZyAmIDcpIDw8IDEzKSB8CiAJCQkJCSAgICAgICAoKHBycnMtPnZ0YWcgJiA4KSA8PCA5KTsKLQkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkJCSJSWEQgVkxBTiBUQUc8UlJEPj0weCUwNHhcbiIsCi0JCQkJCXBycnMtPnZ0YWcpOworCQkJCW5ldGRldl9kYmcobmV0ZGV2LAorCQkJCQkgICAiUlhEIFZMQU4gVEFHPFJSRD49MHglMDR4XG4iLAorCQkJCQkgICBwcnJzLT52dGFnKTsKIAkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKIAkJCQkJCQkgdmxhbl90YWcpOwogCQkJfSBlbHNlIHsKQEAgLTE1MDAsNyArMTQ4OSw2IEBACiB7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBhdGwxZV9hZGFwdGVyLCBuYXBpKTsKLQlzdHJ1Y3QgcGNpX2RldiAgICAqcGRldiAgICA9IGFkYXB0ZXItPnBkZXY7CiAJdTMyIGltcl9kYXRhOwogCWludCB3b3JrX2RvbmUgPSAwOwogCkBAIC0xNTE5LDggKzE1MDcsOCBAQAogCQkvKiB0ZXN0IGRlYnVnICovCiAJCWlmICh0ZXN0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncykpIHsKIAkJCWF0b21pY19kZWMoJmFkYXB0ZXItPmlycV9zZW0pOwotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJhdGwxZV9jbGVhbiBpcyBjYWxsZWQgd2hlbiBBVF9ET1dOXG4iKTsKKwkJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJCSAgICJhdGwxZV9jbGVhbiBpcyBjYWxsZWQgd2hlbiBBVF9ET1dOXG4iKTsKIAkJfQogCQkvKiByZWVuYWJsZSBSWCBpbnRyICovCiAJCS8qYXRsMWVfaXJxX2VuYWJsZShhZGFwdGVyKTsgKi8KQEAgLTE2MTgsNyArMTYwNiw2IEBACiBzdGF0aWMgaW50IGF0bDFlX3Rzb19jc3VtKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF0bDFlX3RwZF9kZXNjICp0cGQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXU4IGhkcl9sZW47CiAJdTMyIHJlYWxfbGVuOwogCXVuc2lnbmVkIHNob3J0IG9mZmxvYWRfdHlwZTsKQEAgLTE2NDIsOCArMTYyOSw4IEBACiAJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOwogCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IGhkcl9sZW4pKSB7CiAJCQkJLyogb25seSB4c3VtIG5lZWQgKi8KLQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJCSAgICAgICJJUFY0IHRzbyB3aXRoIHplcm8gZGF0YT8/XG4iKTsKKwkJCQluZXRkZXZfd2FybihhZGFwdGVyLT5uZXRkZXYsCisJCQkJCSAgICAiSVBWNCB0c28gd2l0aCB6ZXJvIGRhdGE/P1xuIik7CiAJCQkJZ290byBjaGVja19zdW07CiAJCQl9IGVsc2UgewogCQkJCWlwX2hkcihza2IpLT5jaGVjayA9IDA7CkBAIC0xNjcyLDggKzE2NTksOCBAQAogCiAJCWNzbyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CiAJCWlmICh1bmxpa2VseShjc28gJiAweDEpKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkgICAicGF5IGxvYWQgb2Zmc2V0IHNob3VsZCBub3QgYW50IGV2ZW50IG51bWJlclxuIik7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAicGF5bG9hZCBvZmZzZXQgc2hvdWxkIG5vdCBhbnQgZXZlbnQgbnVtYmVyXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfSBlbHNlIHsKIAkJCWNzcyA9IGNzbyArIHNrYi0+Y3N1bV9vZmZzZXQ7CkBAIC0xODg2LDggKzE4NzMsOCBAQAogCWFkYXB0ZXItPmhhdmVfbXNpID0gdHJ1ZTsKIAllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBNU0kgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKIAkJYWRhcHRlci0+aGF2ZV9tc2kgPSBmYWxzZTsKIAl9IGVsc2UKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CkBAIC0xODk4LDEzICsxODg1LDEzIEBACiAJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBhdGwxZV9pbnRyLCBmbGFncywKIAkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKKwkJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCWlmIChhZGFwdGVyLT5oYXZlX21zaSkKIAkJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAiYXRsMWVfcmVxdWVzdF9pcnEgT0tcbiIpOworCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiYXRsMWVfcmVxdWVzdF9pcnEgT0tcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwNzgsNyArMjA2NSw3IEBACiAJCSAgICAoYXRsMWVfd3JpdGVfcGh5X3JlZyhodywKIAkJCSAgIE1JSV9BRFZFUlRJU0UsIG1paV9hZHZlcnRpc2VfZGF0YSkgIT0gMCkgfHwKIAkJICAgIChhdGwxZV9waHlfY29tbWl0KGh3KSkgIT0gMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAic2V0IHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOworCQkJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsICJzZXQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCQlnb3RvIHdvbF9kaXM7CiAJCX0KIApAQCAtMjEwMCwxNyArMjA4NywxNCBAQAogCQkJCX0KIAogCQkJCWlmICgobWlpX2Jtc3JfZGF0YSAmIEJNU1JfTFNUQVRVUykgPT0gMCkKLQkJCQkJZGV2X2RiZygmcGRldi0+ZGV2LAotCQkJCQkJIiVzOiBMaW5rIG1heSBjaGFuZ2UiCi0JCQkJCQkid2hlbiBzdXNwZW5kXG4iLAotCQkJCQkJYXRsMWVfZHJpdmVyX25hbWUpOworCQkJCQluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJCSAgICJMaW5rIG1heSBjaGFuZ2Ugd2hlbiBzdXNwZW5kXG4iKTsKIAkJCX0KIAkJCXdvbF9jdHJsX2RhdGEgfD0gIFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU47CiAJCQkvKiBvbmx5IGxpbmsgdXAgY2FuIHdha2UgdXAgKi8KIAkJCWlmIChhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfSU5UX0NUUkwsIDB4NDAwKSAhPSAwKSB7Ci0JCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IHJlYWQgd3JpdGUgcGh5ICIKLQkJCQkJCSAgInJlZ2lzdGVyIGZhaWxlZC5cbiIsCi0JCQkJCQkgIGF0bDFlX2RyaXZlcl9uYW1lKTsKKwkJCQluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJICAgInJlYWQgd3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCQkJZ290byB3b2xfZGlzOwogCQkJfQogCQl9CkBAIC0yMTMxLDkgKzIxMTUsOCBAQAogCQlpZiAod3VmYyAmIEFUX1dVRkNfTUFHKQogCQkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9CQ19FTjsKIAotCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkiJXM6IHN1c3BlbmQgTUFDPTB4JXhcbiIsCi0JCQlhdGwxZV9kcml2ZXJfbmFtZSwgbWFjX2N0cmxfZGF0YSk7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAic3VzcGVuZCBNQUM9MHgleFxuIiwKKwkJCSAgIG1hY19jdHJsX2RhdGEpOwogCiAJCUFUX1dSSVRFX1JFRyhodywgUkVHX1dPTF9DVFJMLCB3b2xfY3RybF9kYXRhKTsKIAkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOwpAQCAtMjE4Myw4ICsyMTY2LDggQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQVRMMWU6IENhbm5vdCBlbmFibGUgUENJIgotCQkJCSIgZGV2aWNlIGZyb20gc3VzcGVuZFxuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMjMxNSw3ICsyMjk4LDcgQEAKIAogCWVyciA9IGF0bDFlX2luaXRfbmV0ZGV2KG5ldGRldiwgcGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0IG5ldGRldmljZSBmYWlsZWRcbiIpOworCQluZXRkZXZfZXJyKG5ldGRldiwgImluaXQgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2luaXRfbmV0ZGV2OwogCX0KIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTIzMjYsNyArMjMwOSw3IEBACiAJYWRhcHRlci0+aHcuaHdfYWRkciA9IHBjaV9pb21hcChwZGV2LCBCQVJfMCwgMCk7CiAJaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKSB7CiAJCWVyciA9IC1FSU87Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIik7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAiY2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iKTsKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAJbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5ody5od19hZGRyOwpAQCAtMjM1Niw3ICsyMzM5LDcgQEAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAllcnIgPSBhdGwxZV9zd19pbml0KGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibmV0IGRldmljZSBwcml2YXRlIGRhdGEgaW5pdCBmYWlsZWRcbiIpOworCQluZXRkZXZfZXJyKG5ldGRldiwgIm5ldCBkZXZpY2UgcHJpdmF0ZSBkYXRhIGluaXQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfc3dfaW5pdDsKIAl9CiAKQEAgLTIzNzIsMjIgKzIzNTUsMTkgQEAKIAogCWlmIChhdGwxZV9yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odykgIT0gMCkgewogCQllcnIgPSAtRUlPOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJnZXQgbWFjIGFkZHJlc3MgZmFpbGVkXG4iKTsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJnZXQgbWFjIGFkZHJlc3MgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAibWFjIGFkZHJlc3MgOiAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzBdLCBhZGFwdGVyLT5ody5tYWNfYWRkclsxXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzJdLCBhZGFwdGVyLT5ody5tYWNfYWRkclszXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzRdLCBhZGFwdGVyLT5ody5tYWNfYWRkcls1XSk7CisJbmV0ZGV2X2RiZyhuZXRkZXYsICJtYWMgYWRkcmVzcyA6ICVwTVxuIiwgYWRhcHRlci0+aHcubWFjX2FkZHIpOwogCiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBhdGwxZV9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2ssIGF0bDFlX2xpbmtfY2hnX3Rhc2spOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAicmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCX0KIApAQCAtMjQ4OCw4ICsyNDY4LDggQEAKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAgICAgIkFUTDFlOiBDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtMjUxNyw4ICsyNDk3LDggQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaWYgKGF0bDFlX3VwKGFkYXB0ZXIpKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkgICJBVEwxZTogY2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXRcbiIpOworCQkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAgImNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCmluZGV4IGIzYmU1OWYuLjBjZTYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJfSBhcmc7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxZV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFlX29wdGlvbiAqb3B0LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFlX3ZhbGlkYXRlX29wdGlvbihpbnQgKnZhbHVlLCBzdHJ1Y3QgYXRsMWVfb3B0aW9uICpvcHQsIHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCWlmICgqdmFsdWUgPT0gT1BUSU9OX1VOU0VUKSB7CiAJCSp2YWx1ZSA9IG9wdC0+ZGVmOwpAQCAtMTI3LDE2ICsxMjcsMTkgQEAKIAljYXNlIGVuYWJsZV9vcHRpb246CiAJCXN3aXRjaCAoKnZhbHVlKSB7CiAJCWNhc2UgT1BUSU9OX0VOQUJMRUQ6Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgRW5hYmxlZFxuIiwgb3B0LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAgIiVzIEVuYWJsZWRcbiIsIG9wdC0+bmFtZSk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBPUFRJT05fRElTQUJMRUQ6Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgRGlzYWJsZWRcbiIsIG9wdC0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAgICIlcyBEaXNhYmxlZFxuIiwgb3B0LT5uYW1lKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgcmFuZ2Vfb3B0aW9uOgogCQlpZiAoKnZhbHVlID49IG9wdC0+YXJnLnIubWluICYmICp2YWx1ZSA8PSBvcHQtPmFyZy5yLm1heCkgewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHNldCB0byAlaVxuIiwgb3B0LT5uYW1lLCAqdmFsdWUpOworCQkJbmV0ZGV2X2luZm8oYWRhcHRlci0+bmV0ZGV2LCAiJXMgc2V0IHRvICVpXG4iLAorCQkJCSAgICBvcHQtPm5hbWUsICp2YWx1ZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlicmVhazsKQEAgLTE0OCw4ICsxNTEsOCBAQAogCQkJCWVudCA9ICZvcHQtPmFyZy5sLnBbaV07CiAJCQkJaWYgKCp2YWx1ZSA9PSBlbnQtPmkpIHsKIAkJCQkJaWYgKGVudC0+c3RyWzBdICE9ICdcMCcpCi0JCQkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXNcbiIsCi0JCQkJCQkJZW50LT5zdHIpOworCQkJCQkJbmV0ZGV2X2luZm8oYWRhcHRlci0+bmV0ZGV2LAorCQkJCQkJCSAgICAiJXNcbiIsIGVudC0+c3RyKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQpAQCAtMTU5LDggKzE2Miw4IEBACiAJCUJVRygpOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAotCQkJb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKKwluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsICJJbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAorCQkgICAgb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKIAkqdmFsdWUgPSBvcHQtPmRlZjsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNzYsMTEgKzE3OSwxMyBAQAogICovCiB2b2lkIF9fZGV2aW5pdCBhdGwxZV9jaGVja19vcHRpb25zKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgYmQgPSBhZGFwdGVyLT5iZF9udW1iZXI7CisKIAlpZiAoYmQgPj0gQVRMMUVfTUFYX05JQykgewotCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCAjJWlcbiIsIGJkKTsKLQkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOworCQluZXRkZXZfbm90aWNlKGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgICAgICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCAjJWlcbiIsIGJkKTsKKwkJbmV0ZGV2X25vdGljZShhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAgICAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOwogCX0KIAogCXsgCQkvKiBUcmFuc21pdCBSaW5nIFNpemUgKi8KQEAgLTE5Niw3ICsyMDEsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX3R4X2Rlc2NfY250ID4gYmQpIHsKIAkJCXZhbCA9IHR4X2Rlc2NfY250W2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPnR4X3JpbmcuY291bnQgPSAodTE2KSB2YWwgJiAweEZGRkM7CiAJCX0gZWxzZQogCQkJYWRhcHRlci0+dHhfcmluZy5jb3VudCA9ICh1MTYpb3B0LmRlZjsKQEAgLTIxNSw3ICsyMjAsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX3J4X21lbV9zaXplID4gYmQpIHsKIAkJCXZhbCA9IHJ4X21lbV9zaXplW2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPnJ4X3JpbmcucGFnZV9zaXplID0gKHUzMil2YWwgKiAxMDI0OwogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+cnhfcmluZy5wYWdlX3NpemUgPSAodTMyKW9wdC5kZWYgKiAxMDI0OwpAQCAtMjM1LDcgKzI0MCw3IEBACiAJCWludCB2YWw7CiAJCWlmIChudW1faW50X21vZF90aW1lciA+IGJkKSB7CiAJCQl2YWwgPSBpbnRfbW9kX3RpbWVyW2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPmh3LmltdCA9ICh1MTYpIHZhbDsKIAkJfSBlbHNlCiAJCQlhZGFwdGVyLT5ody5pbXQgPSAodTE2KShvcHQuZGVmKTsKQEAgLTI1NCw3ICsyNTksNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX21lZGlhX3R5cGUgPiBiZCkgewogCQkJdmFsID0gbWVkaWFfdHlwZVtiZF07Ci0JCQlhdGwxZV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgcGRldik7CisJCQlhdGwxZV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgYWRhcHRlcik7CiAJCQlhZGFwdGVyLT5ody5tZWRpYV90eXBlID0gKHUxNikgdmFsOwogCQl9IGVsc2UKIAkJCWFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPSAodTE2KShvcHQuZGVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggYjZjZjMyNi4uOWJhNTQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogLyoKICAqIGF0bDFfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDFfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDFfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMSl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCmluZGV4IGVjNTI1MjkuLjcwNjFkNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCkBAIC02Myw3ICs2Myw3IEBACiAvKgogICogYXRsMl9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRsMl9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wyKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCUFUTDJfV1JJVEVfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMSwgMCk7CiAKIAkvKiBjb21vdXRlIG1jIGFkZHJlc3NlcycgaGFzaCB2YWx1ZSAsYW5kIHB1dCBpdCBpbnRvIGhhc2ggdGFibGUgKi8KLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikgewogCQloYXNoX3ZhbHVlID0gYXRsMl9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGwyX2hhc2hfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bHguYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jCmluZGV4IDNkYzAxNDIuLjcyZjMzMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlpb3dyaXRlMzIoMCwgKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKDEgPDwgMikpOwogCiAJLyogY29tcHV0ZSBtYyBhZGRyZXNzZXMnIGhhc2ggdmFsdWUgLGFuZCBwdXQgaXQgaW50byBoYXNoIHRhYmxlICovCi0JZm9yIChtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jX3B0cjsgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpIHsKIAkJaGFzaF92YWx1ZSA9IGF0bHhfaGFzaF9tY19hZGRyKGh3LCBtY19wdHItPmRtaV9hZGRyKTsKIAkJYXRseF9oYXNoX3NldChodywgaGFzaF92YWx1ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRwLmMgYi9kcml2ZXJzL25ldC9hdHAuYwppbmRleCAyZjgyNjFjLi42YWQxNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdHAuYworKysgYi9kcml2ZXJzL25ldC9hdHAuYwpAQCAtODYxLDcgKzg2MSw3IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQlpZiAoZGV2LT5tY19jb3VudCA+IDAgfHwgKGRldi0+ZmxhZ3MgJiAoSUZGX0FMTE1VTFRJfElGRl9QUk9NSVNDKSkpCisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIChJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKSkKIAkJbHAtPmFkZHJfbW9kZSA9IENNUjJoX1BST01JU0M7CiAJZWxzZQogCQlscC0+YWRkcl9tb2RlID0gQ01SMmhfTm9ybWFsOwpAQCAtODc3LDcgKzg3Nyw4IEBACiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQluZXdfbW9kZSA9IENNUjJoX1BST01JU0M7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiAxMDAwKSB8fAorCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJbmV3X21vZGUgPSBDTVIyaF9Ob3JtYWw7CkBAIC04ODUsOSArODg2LDcgQEAKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkKLQkJeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJaW50IGZpbHRlcmJpdCA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgJiAweDNmOwogCQkJbWNfZmlsdGVyW2ZpbHRlcmJpdCA+PiA1XSB8PSAxIDw8IChmaWx0ZXJiaXQgJiAzMSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA2YmFjMDQ2Li40ZGExOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgPGF1MTAwMC5oPgorI2luY2x1ZGUgPGF1MXh4eF9ldGguaD4KICNpbmNsdWRlIDxwcm9tLmg+CiAKICNpbmNsdWRlICJhdTEwMDBfZXRoLmgiCkBAIC0xMTIsMTUgKzExNCwxNSBAQAogICoKICAqIFBIWSBkZXRlY3Rpb24gYWxnb3JpdGhtCiAgKgotICogSWYgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHIGlzIHVuZGVmaW5lZCwgdGhlIFBIWSBzZXR1cCBpcworICogSWYgcGh5X3N0YXRpY19jb25maWcgaXMgdW5kZWZpbmVkLCB0aGUgUEhZIHNldHVwIGlzCiAgKiBhdXRvZGV0ZWN0ZWQ6CiAgKgogICogbWlpX3Byb2JlKCkgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyBmb3IgYSBQSFksCi0gKiBzZWxlY3RpbmcgdGhlIGZpcnN0IChvciBsYXN0LCBpZiBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIgaXMKKyAqIHNlbGVjdGluZyB0aGUgZmlyc3QgKG9yIGxhc3QsIGlmIHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyIGlzCiAgKiBkZWZpbmVkKSBQSFkgYWRkcmVzcyBub3QgYWxyZWFkeSBjbGFpbWVkIGJ5IGFub3RoZXIgbmV0ZGV2LgogICoKICAqIElmIG5vdGhpbmcgd2FzIGZvdW5kIHRoYXQgd2F5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgMm5kIGV0aGVybmV0Ci0gKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCBpcyBkZWZpbmVkLCB0aGVuCisgKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBwaHkxX3NlYXJjaF9tYWMwIGlzIGRlZmluZWQsIHRoZW4KICAqIHRoZSBmaXJzdCBNSUkgYnVzIGlzIHNlYXJjaGVkIGFzIHdlbGwgZm9yIGFuIHVuY2xhaW1lZCBQSFk7IHRoaXMgaXMKICAqIG5lZWRlZCBpbiBjYXNlIG9mIGEgZHVhbC1QSFkgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIE1BQzAncyBNSUkKICAqIGJ1cy4KQEAgLTEyOSw5ICsxMzEsNyBAQAogICogY29udHJvbGxlciBpcyBub3QgcmVnaXN0ZXJlZCB0byB0aGUgbmV0d29yayBzdWJzeXN0ZW0uCiAgKi8KIAotLyogYXV0b2RldGVjdGlvbiBkZWZhdWx0cyAqLwotI3VuZGVmICBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIKLSNkZWZpbmUgQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzAKKy8qIGF1dG9kZXRlY3Rpb24gZGVmYXVsdHM6IHBoeTFfc2VhcmNoX21hYzAgKi8KIAogLyogc3RhdGljIFBIWSBzZXR1cAogICoKQEAgLTE0OCwyOSArMTQ4LDYgQEAKICAqIHNwZWNpZmljIGlycS1tYXAKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykKLS8qCi0gKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKLSAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQotICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5Ci0gKiB0byB0aGUgc3dpdGNoLgotICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAotICovCi0jIGRlZmluZSBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcKLQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQUREUiAgNQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQlVTSUQgMAotIyAgdW5kZWYgQVUxWFhYX1BIWTBfSVJRCi0KLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0FERFIKLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0JVU0lECi0jICB1bmRlZiBBVTFYWFhfUEhZMV9JUlEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9CVVNJRCkgJiYgKEFVMVhYWF9QSFkwX0JVU0lEID4gMCkKLSMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM5MCw2NyArMzY3LDU1IEBACiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOwogCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCi0JQlVHX09OKGF1cC0+bWFjX2lkIDwgMCB8fCBhdXAtPm1hY19pZCA+IDEpOworCWlmIChhdXAtPnBoeV9zdGF0aWNfY29uZmlnKSB7CisJCUJVR19PTihhdXAtPm1hY19pZCA8IDAgfHwgYXVwLT5tYWNfaWQgPiAxKTsKIAotCWlmKGF1cC0+bWFjX2lkID09IDApIHsgLyogZ2V0IFBIWTAgKi8KLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKQotCQlwaHlkZXYgPSBhdV9tYWNzW0FVMVhYWF9QSFkwX0JVU0lEXS0+bWlpX2J1cy0+cGh5X21hcFtBVTFYWFhfUEhZMF9BRERSXTsKLSMgZWxzZQotCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKLQkJCWRldi0+bmFtZSk7CisJCWlmIChhdXAtPnBoeV9hZGRyKQorCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLT5waHlfbWFwW2F1cC0+cGh5X2FkZHJdOworCQllbHNlCisJCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQlyZXR1cm4gMDsKLSMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKSAqLwotCX0gZWxzZSBpZiAoYXVwLT5tYWNfaWQgPT0gMSkgeyAvKiBnZXQgUEhZMSAqLwotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpCi0JCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTFfQlVTSURdLT5taWlfYnVzLT5waHlfbWFwW0FVMVhYWF9QSFkxX0FERFJdOwotIyBlbHNlCi0JCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6JXM6IHVzaW5nIFBIWS1sZXNzIHNldHVwXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfQUREUikgKi8KLQl9CisJfSBlbHNlIHsKKwkJaW50IHBoeV9hZGRyOwogCi0jZWxzZSAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KLQlpbnQgcGh5X2FkZHI7CisJCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgUEhZIG9uIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgKi8KKwkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKQorCQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCQlwaHlkZXYgPSBhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOworCQkJCWlmICghYXVwLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkcikKKwkJCQkJYnJlYWs7IC8qIGJyZWFrIG91dCB3aXRoIGZpcnN0IG9uZSBmb3VuZCAqLworCQkJfQogCi0JLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBQSFkgb24gdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyAqLwotCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykKLQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKLQkJCXBoeWRldiA9IGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07Ci0jIGlmICFkZWZpbmVkKEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUikKLQkJCWJyZWFrOyAvKiBicmVhayBvdXQgd2l0aCBmaXJzdCBvbmUgZm91bmQgKi8KLSMgZW5kaWYKLQkJfQorCQlpZiAoYXVwLT5waHkxX3NlYXJjaF9tYWMwKSB7CisJCQkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8KKwkJCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgeworCQkJCS8qIG5vIFBIWSBmb3VuZCwgbWF5YmUgd2UgaGF2ZSBhIGR1YWwgUEhZPyAqLworCQkJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCAiCisJCQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKIAotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwKQotCS8qIHRyeSBoYXJkZXIgdG8gZmluZCBhIFBIWSAqLwotCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgewotCQkvKiBubyBQSFkgZm91bmQsIG1heWJlIHdlIGhhdmUgYSBkdWFsIFBIWT8gKi8KLQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gUEhZIGZvdW5kIG9uIE1BQzEsICIKLQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hlZCBQSFkgb24KKwkJCQkgKiB0aGUgTUFDMCBNSUkgYnVzICovCisJCQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7CisJCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpjb25zdCB0bXBfcGh5ZGV2ID0KKwkJCQkJCQlhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwogCi0JCUJVR19PTighYXVfbWFjc1swXSk7CisJCQkJCWlmIChhdXAtPm1hY19pZCA9PSAxKQorCQkJCQkJYnJlYWs7CiAKLQkJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBub24tYXR0YWNoZWQgUEhZIG9uCi0JCSAqIHRoZSBNQUMwIE1JSSBidXMgKi8KLQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqY29uc3QgdG1wX3BoeWRldiA9Ci0JCQkJYXVfbWFjc1swXS0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQkJCWlmICghdG1wX3BoeWRldikKKwkJCQkJCWNvbnRpbnVlOyAvKiBubyBQSFkgaGVyZS4uLiAqLwogCi0JCQlpZiAoIXRtcF9waHlkZXYpCi0JCQkJY29udGludWU7IC8qIG5vIFBIWSBoZXJlLi4uICovCisJCQkJCWlmICh0bXBfcGh5ZGV2LT5hdHRhY2hlZF9kZXYpCisJCQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KIAotCQkJaWYgKHRtcF9waHlkZXYtPmF0dGFjaGVkX2RldikKLQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KLQotCQkJcGh5ZGV2ID0gdG1wX3BoeWRldjsKLQkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLworCQkJCQlwaHlkZXYgPSB0bXBfcGh5ZGV2OworCQkJCQlicmVhazsgLyogZm91bmQgaXQgKi8KKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfU0VBUkNIX09USEVSX0JVUykgKi8KIAotI2VuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKSAqLwogCWlmICghcGh5ZGV2KSB7CiAJCXByaW50ayAoS0VSTl9FUlIgRFJWX05BTUUgIjolczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CkBAIC01NzgsMzEgKzU0Myw2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHsKLQl1MzIgYmFzZV9hZGRyOwotCXUzMiBtYWNlbl9hZGRyOwotCWludCBpcnE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLX0gaWZsaXN0WzJdID0gewotI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi0Je0FVMTAwMF9FVEgwX0JBU0UsIEFVMTAwMF9NQUMwX0VOQUJMRSwgQVUxMDAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTAwMF9FVEgxX0JBU0UsIEFVMTAwMF9NQUMxX0VOQUJMRSwgQVUxMDAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi0Je0FVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi0Je0FVMTUwMF9FVEgwX0JBU0UsIEFVMTUwMF9NQUMwX0VOQUJMRSwgQVUxNTAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTUwMF9FVEgxX0JBU0UsIEFVMTUwMF9NQUMxX0VOQUJMRSwgQVUxNTAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCi0Je0FVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBudW1faWZzOwotCiAvKgogICogZXRodG9vbCBvcGVyYXRpb25zCiAgKi8KQEAgLTcxMSw3ICs2NTEsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCiB7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwogCiAJcHMtPnJ4X3BhY2tldHMrKzsKQEAgLTk2OSw3ICs5MDgsNyBAQAogCX0KIAogCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKXBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKIAlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgewogCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgewogCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOwpAQCAtMTAxMywyMSArOTUyLDE4IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KIAkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BST01JU0NVT1VTOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICB8fAotCQkJICAgZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9GSUxURVJfTElNSVQpIHsKKwkJCSAgIG5ldGRldl9tY19jb3VudChkZXYpID4gTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCkgewogCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUEFTU19BTExfTVVMVEk7CiAJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXNzIGFsbCBtdWx0aWNhc3RcbiIsIGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKLQkJaW50IGk7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KIAogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikKIAkJCXNldF9iaXQoZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKT4+MjYsCiAJCQkJCShsb25nICopbWNfZmlsdGVyKTsKLQkJfQogCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9oaWdoID0gbWNfZmlsdGVyWzFdOwogCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9sb3cgPSBtY19maWx0ZXJbMF07CiAJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CkBAIC0xMDU4LDUzICs5OTQsNTkgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKQorc3RhdGljIGludCBfX2RldmluaXQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBOVUxMOworCXN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgKnBkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCWRiX2Rlc3RfdCAqcERCLCAqcERCZnJlZTsKKwlpbnQgaXJxLCBpLCBlcnIgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqYmFzZSwgKm1hY2VuOwogCWNoYXIgZXRoYWRkcls2XTsKLQlpbnQgaXJxLCBpLCBlcnI7Ci0JdTMyIGJhc2UsIG1hY2VuOwogCi0JaWYgKHBvcnRfbnVtID49IE5VTV9FVEhfSU5URVJGQUNFUykKLQkJcmV0dXJuIE5VTEw7CisJYmFzZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmV0cmlldmUgYmFzZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAotCWJhc2UgID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyICk7Ci0JbWFjZW4gPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyKTsKLQlpcnEgPSBpZmxpc3RbcG9ydF9udW1dLmlycTsKKwltYWNlbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFtYWNlbikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJldHJpZXZlIE1BQyBFbmFibGUgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSwgIkF1MXgwMCBFTkVUIikgfHwKLQkgICAgIXJlcXVlc3RfbWVtX3JlZ2lvbihtYWNlbiwgNCwgIkF1MXgwMCBFTkVUIikpCi0JCXJldHVybiBOVUxMOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXRyaWV2ZSBJUlFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKLQkJcHJpbnRrKCIlcyB2ZXJzaW9uICVzICVzXG4iLCBEUlZfTkFNRSwgRFJWX1ZFUlNJT04sIERSVl9BVVRIT1IpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpLCBwZGV2LT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvbiBmb3IgYmFzZSByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbiksIHBkZXYtPm5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uIGZvciBNQUMgZW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhbGxvY19ldGhlcmRldiBmYWlsZWRcbiIsIERSVl9OQU1FKTsKLQkJcmV0dXJuIE5VTEw7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOwogCX0KIAotCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKLQkJCQlEUlZfTkFNRSwgZXJyKTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcHJpbnRrKCIlczogQXUxeHgwIEV0aGVybmV0IGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwKLQkJZGV2LT5uYW1lLCBiYXNlLCBpcnEpOwotCisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCWF1cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmYXVwLT5sb2NrKTsKQEAgLTExMTUsMjEgKzEwNTcsMjkgQEAKIAkJCQkJCShOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAogCQkJCQkJJmF1cC0+ZG1hX2FkZHIsCTApOwogCWlmICghYXVwLT52YWRkcikgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUpOwotCQlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4sIDQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBhbGxvY2F0ZSBkYXRhIGJ1ZmZlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl92YWRkcjsKIAl9CiAKIAkvKiBhdXAtPm1hYyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBNQUMncyByZWdpc3RlcnMgKi8KLQlhdXAtPm1hYyA9ICh2b2xhdGlsZSBtYWNfcmVnX3QgKilpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkcjsKKwlhdXAtPm1hYyA9ICh2b2xhdGlsZSBtYWNfcmVnX3QgKilpb3JlbWFwX25vY2FjaGUoYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworCWlmICghYXVwLT5tYWMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBpb3JlbWFwIE1BQyByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlbWFwMTsKKwl9CiAKLQkvKiBTZXR1cCBzb21lIHZhcmlhYmxlcyBmb3IgcXVpY2sgcmVnaXN0ZXIgYWRkcmVzcyBhY2Nlc3MgKi8KLQlhdXAtPmVuYWJsZSA9ICh2b2xhdGlsZSB1MzIgKilpZmxpc3RbcG9ydF9udW1dLm1hY2VuX2FkZHI7Ci0JYXVwLT5tYWNfaWQgPSBwb3J0X251bTsKLQlhdV9tYWNzW3BvcnRfbnVtXSA9IGF1cDsKKyAgICAgICAgLyogU2V0dXAgc29tZSB2YXJpYWJsZXMgZm9yIHF1aWNrIHJlZ2lzdGVyIGFkZHJlc3MgYWNjZXNzICovCisJYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopaW9yZW1hcF9ub2NhY2hlKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbikpOworCWlmICghYXVwLT5lbmFibGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBpb3JlbWFwIE1BQyBlbmFibGUgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlbWFwMjsKKwl9CisJYXVwLT5tYWNfaWQgPSBwZGV2LT5pZDsKIAotCWlmIChwb3J0X251bSA9PSAwKSB7CisJaWYgKHBkZXYtPmlkID09IDApIHsKIAkJaWYgKHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcikgPT0gMCkKIAkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKIAkJZWxzZSB7CkBAIC0xMTM5LDcgKzEwODksNyBAQAogCQl9CiAKIAkJc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMwX1JYX0RNQV9BRERSLCBNQUMwX1RYX0RNQV9BRERSKTsKLQl9IGVsc2UgaWYgKHBvcnRfbnVtID09IDEpCisJfSBlbHNlIGlmIChwZGV2LT5pZCA9PSAxKQogCQlzZXR1cF9od19yaW5ncyhhdXAsIE1BQzFfUlhfRE1BX0FERFIsIE1BQzFfVFhfRE1BX0FERFIpOwogCiAJLyoKQEAgLTExNDcsMTQgKzEwOTcsMzcgQEAKIAkgKiB0byBtYXRjaCB0aG9zZSB0aGF0IGFyZSBwcmludGVkIG9uIHRoZWlyIHN0aWNrZXJzCiAJICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF1MTAwMF9tYWNfYWRkciwgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOwotCWRldi0+ZGV2X2FkZHJbNV0gKz0gcG9ydF9udW07CisJZGV2LT5kZXZfYWRkcls1XSArPSBwZGV2LT5pZDsKIAogCSphdXAtPmVuYWJsZSA9IDA7CiAJYXVwLT5tYWNfZW5hYmxlZCA9IDA7CiAKKwlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBubyBwbGF0Zm9ybV9kYXRhIHBhc3NlZCwgUEhZIHNlYXJjaCBvbiBNQUMwXG4iKTsKKwkJYXVwLT5waHkxX3NlYXJjaF9tYWMwID0gMTsKKwl9IGVsc2UgeworCQlhdXAtPnBoeV9zdGF0aWNfY29uZmlnID0gcGQtPnBoeV9zdGF0aWNfY29uZmlnOworCQlhdXAtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyID0gcGQtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCQlhdXAtPnBoeTFfc2VhcmNoX21hYzAgPSBwZC0+cGh5MV9zZWFyY2hfbWFjMDsKKwkJYXVwLT5waHlfYWRkciA9IHBkLT5waHlfYWRkcjsKKwkJYXVwLT5waHlfYnVzaWQgPSBwZC0+cGh5X2J1c2lkOworCQlhdXAtPnBoeV9pcnEgPSBwZC0+cGh5X2lycTsKKwl9CisKKwlpZiAoYXVwLT5waHlfYnVzaWQgJiYgYXVwLT5waHlfYnVzaWQgPiAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBNQUMwLWFzc29jaWF0ZWQgUEhZIGF0dGFjaGVkIDJuZCBNQUNzIE1JSSIKKwkJCQkiYnVzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfbWRpb2J1c19hbGxvYzsKKwl9CisKIAlhdXAtPm1paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKGF1cC0+bWlpX2J1cyA9PSBOVUxMKQotCQlnb3RvIGVycl9vdXQ7CisJaWYgKGF1cC0+bWlpX2J1cyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWRpb2J1cyBzdHJ1Y3R1cmVcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tZGlvYnVzX2FsbG9jOworCX0KIAogCWF1cC0+bWlpX2J1cy0+cHJpdiA9IGRldjsKIAlhdXAtPm1paV9idXMtPnJlYWQgPSBhdTEwMDBfbWRpb2J1c19yZWFkOwpAQCAtMTE2OCwyNCArMTE0MSwyMCBAQAogCiAJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCiAJCWF1cC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7Ci0KIAkvKiBpZiBrbm93biwgc2V0IGNvcnJlc3BvbmRpbmcgUEhZIElSUXMgKi8KLSNpZiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykKLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9JUlEpCi0JaWYgKEFVMVhYWF9QSFkwX0JVU0lEID09IGF1cC0+bWFjX2lkKQotCQlhdXAtPm1paV9idXMtPmlycVtBVTFYWFhfUEhZMF9BRERSXSA9IEFVMVhYWF9QSFkwX0lSUTsKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMV9JUlEpCi0JaWYgKEFVMVhYWF9QSFkxX0JVU0lEID09IGF1cC0+bWFjX2lkKQotCQlhdXAtPm1paV9idXMtPmlycVtBVTFYWFhfUEhZMV9BRERSXSA9IEFVMVhYWF9QSFkxX0lSUTsKLSMgZW5kaWYKLSNlbmRpZgotCW1kaW9idXNfcmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwlpZiAoYXVwLT5waHlfc3RhdGljX2NvbmZpZykKKwkJaWYgKGF1cC0+cGh5X2lycSAmJiBhdXAtPnBoeV9idXNpZCA9PSBhdXAtPm1hY19pZCkKKwkJCWF1cC0+bWlpX2J1cy0+aXJxW2F1cC0+cGh5X2FkZHJdID0gYXVwLT5waHlfaXJxOwogCi0JaWYgKG1paV9wcm9iZShkZXYpICE9IDApIHsKLQkJZ290byBlcnJfb3V0OworCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiIGZhaWxlZCB0byByZWdpc3RlciBNRElPIGJ1c1xuIik7CisJCWdvdG8gZXJyX21kaW9idXNfcmVnOwogCX0KIAorCWlmIChtaWlfcHJvYmUoZGV2KSAhPSAwKQorCQlnb3RvIGVycl9vdXQ7CisKIAlwREJmcmVlID0gTlVMTDsKIAkvKiBzZXR1cCB0aGUgZGF0YSBidWZmZXIgZGVzY3JpcHRvcnMgYW5kIGF0dGFjaCBhIGJ1ZmZlciB0byBlYWNoIG9uZSAqLwogCXBEQiA9IGF1cC0+ZGI7CkBAIC0xMjE2LDE5ICsxMTg1LDM1IEBACiAJCWF1cC0+dHhfZGJfaW51c2VbaV0gPSBwREI7CiAJfQogCisJZGV2LT5iYXNlX2FkZHIgPSBiYXNlLT5zdGFydDsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOworCiAJLyoKIAkgKiBUaGUgYm9vdCBjb2RlIHVzZXMgdGhlIGV0aGVybmV0IGNvbnRyb2xsZXIsIHNvIHJlc2V0IGl0IHRvIHN0YXJ0CiAJICogZnJlc2guICBhdTEwMDBfaW5pdCgpIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIGlzIGluIHJlc2V0IHN0YXRlLgogCSAqLwogCXJlc2V0X21hYyhkZXYpOwogCi0JcmV0dXJuIGRldjsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlwcmludGsoIiVzOiBBdTF4eDAgRXRoZXJuZXQgZm91bmQgYXQgMHglbHgsIGlycSAlZFxuIiwKKwkJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpYmFzZS0+c3RhcnQsIGlycSk7CisJaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCisJCXByaW50aygiJXMgdmVyc2lvbiAlcyAlc1xuIiwgRFJWX05BTUUsIERSVl9WRVJTSU9OLCBEUlZfQVVUSE9SKTsKKworCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWlmIChhdXAtPm1paV9idXMgIT0gTlVMTCkgeworCWlmIChhdXAtPm1paV9idXMgIT0gTlVMTCkKIAkJbWRpb2J1c191bnJlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7Ci0JCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOwotCX0KIAogCS8qIGhlcmUgd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBkZXYgcGx1cyBhdXAtPiByZWdpc3RlciBhZGRyZXNzZXMKIAkgKiBzbyB3ZSBjYW4gcmVzZXQgdGhlIG1hYyBwcm9wZXJseS4qLwpAQCAtMTI0Miw2NyArMTIyNyw4NCBAQAogCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtpXSkKIAkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2VbaV0pOwogCX0KK2Vycl9tZGlvYnVzX3JlZzoKKwltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKK2Vycl9tZGlvYnVzX2FsbG9jOgorCWlvdW5tYXAoYXVwLT5lbmFibGUpOworZXJyX3JlbWFwMjoKKwlpb3VubWFwKGF1cC0+bWFjKTsKK2Vycl9yZW1hcDE6CiAJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICogKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCiAJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKK2Vycl92YWRkcjoKIAlmcmVlX25ldGRldihkZXYpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLCA0KTsKLQlyZXR1cm4gTlVMTDsKK2Vycl9hbGxvYzoKKwlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSk7CitlcnJfcmVxdWVzdDoKKwlyZWxlYXNlX21lbV9yZWdpb24oYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBTZXR1cCB0aGUgYmFzZSBhZGRyZXNzIGFuZCBpbnRlcnJ1cHQgb2YgdGhlIEF1MXh4eCBldGhlcm5ldCBtYWNzCi0gKiBiYXNlZCBvbiBjcHUgdHlwZSBhbmQgd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaW4gc3lzX3BpbmZ1bmMKLSAqIHJlZ2lzdGVyLiBUaGUgbGFzdCBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpZiBTWVNfUEZfTkkyIChiaXQgNCkgaXMgMC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdTEwMDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IG5pID0gKGludCkoKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpKFNZU19QRl9OSTIpKSA+PiA0KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCBpLCBmb3VuZF9vbmUgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisJc3RydWN0IHJlc291cmNlICpiYXNlLCAqbWFjZW47CiAKLQludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKLQlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOwotCQlpZmxpc3RbaV0uZGV2ID0gZGV2OwotCQlpZiAoZGV2KQotCQkJZm91bmRfb25lKys7Ci0JfQotCWlmICghZm91bmRfb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCW1kaW9idXNfdW5yZWdpc3RlcihhdXAtPm1paV9idXMpOworCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykKKwkJaWYgKGF1cC0+cnhfZGJfaW51c2VbaV0pCisJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnJ4X2RiX2ludXNlW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfRE1BOyBpKyspCisJCWlmIChhdXAtPnR4X2RiX2ludXNlW2ldKQorCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtpXSk7CisKKwlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOworCisJaW91bm1hcChhdXAtPm1hYyk7CisJaW91bm1hcChhdXAtPmVuYWJsZSk7CisKKwliYXNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworCisJbWFjZW4gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pKTsKKworCWZyZWVfbmV0ZGV2KGRldik7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGF1MTAwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCBpLCBqOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTEwMDBfZXRoX2RyaXZlciA9IHsKKwkucHJvYmUgID0gYXUxMDAwX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhdTEwMDBfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gImF1MTAwMC1ldGgiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF1MTAwMC1ldGgiKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gaWZsaXN0W2ldLmRldjsKLQkJaWYgKGRldikgewotCQkJYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCQltZGlvYnVzX3VucmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKLQkJCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOwotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9SWF9ETUE7IGorKykKLQkJCQlpZiAoYXVwLT5yeF9kYl9pbnVzZVtqXSkKLQkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT5yeF9kYl9pbnVzZVtqXSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgTlVNX1RYX0RNQTsgaisrKQotCQkJCWlmIChhdXAtPnR4X2RiX2ludXNlW2pdKQotCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2pdKTsKLQkJCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCi0JCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCi0JCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUFDX0lPU0laRSk7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7Ci0JCQlmcmVlX25ldGRldihkZXYpOwotCQl9Ci0JfQorCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTEwMDBfZXRoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdTEwMDBfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMDAwX2V0aF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhdTEwMDBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYXUxMDAwX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KGF1MTAwMF9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmggYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKaW5kZXggODI0ZWNkNS4uZjlkMjlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaApAQCAtMTA4LDYgKzEwOCwxNSBAQAogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OwogCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOwogCisJLyogUEhZIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgcGh5X3N0YXRpY19jb25maWc7CisJaW50IHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCWludCBwaHkxX3NlYXJjaF9tYWMwOworCisJaW50IHBoeV9hZGRyOworCWludCBwaHlfYnVzaWQ7CisJaW50IHBoeV9pcnE7CisKIAkvKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGp1c3QgZm9yIHF1aWNrIGFjY2VzcyB0byBjZXJ0YWluIHJlZ3MgYWRkcmVzc2VzLiAqLwogCXZvbGF0aWxlIG1hY19yZWdfdCAqbWFjOyAgLyogbWFjIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAqLwogCXZvbGF0aWxlIHUzMiAqZW5hYmxlOyAgICAgLyogYWRkcmVzcyBvZiBNQUMgRW5hYmxlIFJlZ2lzdGVyICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCA0ODY5YWRiLi4zMzJjNjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTAsNiArMTAsOCBAQAogICogRGlzdHJpYnV0ZSB1bmRlciBHUEwuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTM0LDcgKzM2LDYgQEAKICNpbmNsdWRlICJiNDQuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJiNDQiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMCIKIAogI2RlZmluZSBCNDRfREVGX01TR19FTkFCTEUJICBcCkBAIC0xMDIsNyArMTAzLDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX0I0NF9QQ0kKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiNDRfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGI0NF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9CQ000NDAxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9CQ000NDAxQjEpIH0sCkBAIC0xODksMTEgKzE5MCwxMCBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAlpZiAoaSA9PSB0aW1lb3V0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchICBUaW1lb3V0IHdhaXRpbmcgZm9yIGJpdCAlMDh4IG9mIHJlZ2lzdGVyICIKLQkJICAgICAgICIlbHggdG8gJXMuXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwKLQkJICAgICAgIGJpdCwgcmVnLAotCQkgICAgICAgKGNsZWFyID8gImNsZWFyIiA6ICJzZXQiKSk7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRkZXZfZXJyKGJwLT5kZXYsICJCVUchICBUaW1lb3V0IHdhaXRpbmcgZm9yIGJpdCAlMDh4IG9mIHJlZ2lzdGVyICVseCB0byAlc1xuIiwKKwkJCQkgICBiaXQsIHJlZywgY2xlYXIgPyAiY2xlYXIiIDogInNldCIpOworCiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMzMywxMyArMzMzLDEyIEBACiAJZXJyID0gYjQ0X3JlYWRwaHkoYnAsIE1JSV9CTUNSLCAmdmFsKTsKIAlpZiAoIWVycikgewogCQlpZiAodmFsICYgQk1DUl9SRVNFVCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFBIWSBSZXNldCB3b3VsZCBub3QgY29tcGxldGUuXG4iLAotCQkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihicC0+ZGV2LCAiUEhZIFJlc2V0IHdvdWxkIG5vdCBjb21wbGV0ZVxuIik7CiAJCQllcnIgPSAtRU5PREVWOwogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19iNDRfc2V0X2Zsb3dfY3RybChzdHJ1Y3QgYjQ0ICpicCwgdTMyIHBhdXNlX2ZsYWdzKQpAQCAtNDEzLDcgKzQxMiw3IEBACiAJfQogCXJldHVybjsKIGVycm9yOgotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJQSFk6IGNhbm5vdCByZXNldCBNSUkgdHJhbnNjZWl2ZXIgaXNvbGF0ZSBiaXQuXG4iKTsKKwlwcl93YXJuaW5nKCJQSFk6IGNhbm5vdCByZXNldCBNSUkgdHJhbnNjZWl2ZXIgaXNvbGF0ZSBiaXRcbiIpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDRfd2FwNTRnMTBfd29ya2Fyb3VuZChzdHJ1Y3QgYjQ0ICpicCkKQEAgLTUwNiwxOCArNTA1LDE1IEBACiBzdGF0aWMgdm9pZCBiNDRfbGlua19yZXBvcnQoc3RydWN0IGI0NCAqYnApCiB7CiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGJwLT5kZXYpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgYnAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGJwLT5kZXYsICJMaW5rIGlzIGRvd25cbiIpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXguXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwKLQkJICAgICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR18xMDBfQkFTRV9UKSA/IDEwMCA6IDEwLAotCQkgICAgICAgKGJwLT5mbGFncyAmIEI0NF9GTEFHX0ZVTExfRFVQTEVYKSA/ICJmdWxsIiA6ICJoYWxmIik7CisJCW5ldGRldl9pbmZvKGJwLT5kZXYsICJMaW5rIGlzIHVwIGF0ICVkIE1icHMsICVzIGR1cGxleFxuIiwKKwkJCSAgICAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfMTAwX0JBU0VfVCkgPyAxMDAgOiAxMCwKKwkJCSAgICAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfRlVMTF9EVVBMRVgpID8gImZ1bGwiIDogImhhbGYiKTsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IEZsb3cgY29udHJvbCBpcyAlcyBmb3IgVFggYW5kICIKLQkJICAgICAgICIlcyBmb3IgUlguXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwKLQkJICAgICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19UWF9QQVVTRSkgPyAib24iIDogIm9mZiIsCi0JCSAgICAgICAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfUlhfUEFVU0UpID8gIm9uIiA6ICJvZmYiKTsKKwkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIkZsb3cgY29udHJvbCBpcyAlcyBmb3IgVFggYW5kICVzIGZvciBSWFxuIiwKKwkJCSAgICAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfVFhfUEFVU0UpID8gIm9uIiA6ICJvZmYiLAorCQkJICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19SWF9QQVVTRSkgPyAib24iIDogIm9mZiIpOwogCX0KIH0KIApAQCAtNTc2LDExICs1NzIsOSBAQAogCQl9CiAKIAkJaWYgKGJtc3IgJiBCTVNSX1JGQVVMVCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogUmVtb3RlIGZhdWx0IGRldGVjdGVkIGluIFBIWVxuIiwKLQkJCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKGJwLT5kZXYsICJSZW1vdGUgZmF1bHQgZGV0ZWN0ZWQgaW4gUEhZXG4iKTsKIAkJaWYgKGJtc3IgJiBCTVNSX0pDRCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogSmFiYmVyIGRldGVjdGVkIGluIFBIWVxuIiwKLQkJCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKGJwLT5kZXYsICJKYWJiZXIgZGV0ZWN0ZWQgaW4gUEhZXG4iKTsKIAl9CiB9CiAKQEAgLTgxNSw3ICs4MDksNyBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKmNvcHlfc2tiOwogCiAJCQliNDRfcmVjeWNsZV9yeChicCwgY29ucywgYnAtPnJ4X3Byb2QpOwotCQkJY29weV9za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIDIpOworCQkJY29weV9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGxlbiArIDIpOwogCQkJaWYgKGNvcHlfc2tiID09IE5VTEwpCiAJCQkJZ290byBkcm9wX2l0X25vX3JlY3ljbGU7CiAKQEAgLTkwMSw3ICs4OTUsNyBAQAogCQloYW5kbGVkID0gMTsKIAogCQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsYXRlIGludGVycnVwdC5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJsYXRlIGludGVycnVwdFxuIik7CiAJCQlnb3RvIGlycV9hY2s7CiAJCX0KIApAQCAtOTI2LDggKzkyMCw3IEBACiB7CiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iLAotCSAgICAgICBkZXYtPm5hbWUpOworCW5ldGRldl9lcnIoZGV2LCAidHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIpOwogCiAJc3Bpbl9sb2NrX2lycSgmYnAtPmxvY2spOwogCkBAIC05NTYsOCArOTQ5LDcgQEAKIAkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTChicCkgPCAxKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC0xMzMzLDcgKzEzMjUsNyBAQAogCS8qIHJlc2V0IFBIWSAqLwogCWI0NF9waHlfcmVzZXQoYnApOwogCS8qIHBvd2VyIGRvd24gUEhZICovCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBwb3dlcmluZyBkb3duIFBIWVxuIiwgYnAtPmRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8oYnAtPmRldiwgInBvd2VyaW5nIGRvd24gUEhZXG4iKTsKIAlidzMyKGJwLCBCNDRfTUFDX0NUUkwsIE1BQ19DVFJMX1BIWV9QRE9XTik7CiAJLyogbm93IHJlc2V0IHRoZSBjaGlwLCBidXQgd2l0aG91dCBlbmFibGluZyB0aGUgTUFDJlBIWQogCSAqIHBhcnQgb2YgaXQuIFRoaXMgaGFzIHRvIGJlIGRvbmUgX2FmdGVyXyB3ZSBzaHV0IGRvd24gdGhlIFBIWSAqLwpAQCAtMTUyNCw3ICsxNTE2LDcgQEAKIAogCXB3b2xfcGF0dGVybiA9IGt6YWxsb2MoQjQ0X1BBVFRFUk5fU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwd29sX3BhdHRlcm4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTWVtb3J5IG5vdCBhdmFpbGFibGUgZm9yIFdPTFxuIik7CisJCXByX2VycigiTWVtb3J5IG5vdCBhdmFpbGFibGUgZm9yIFdPTFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2OTEsMTAgKzE2ODMsMTIgQEAKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAlpbnQgaSwgbnVtX2VudHM7CiAKLQludW1fZW50cyA9IG1pbl90KGludCwgZGV2LT5tY19jb3VudCwgQjQ0X01DQVNUX1RBQkxFX1NJWkUpOwotCW1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQlmb3IgKGkgPSAwOyBtY2xpc3QgJiYgaSA8IG51bV9lbnRzOyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCQlfX2I0NF9jYW1fd3JpdGUoYnAsIG1jbGlzdC0+ZG1pX2FkZHIsIGkgKyAxKTsKKwludW1fZW50cyA9IG1pbl90KGludCwgbmV0ZGV2X21jX2NvdW50KGRldiksIEI0NF9NQ0FTVF9UQUJMRV9TSVpFKTsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgeworCQlpZiAoaSA9PSBudW1fZW50cykKKwkJCWJyZWFrOworCQlfX2I0NF9jYW1fd3JpdGUoYnAsIG1jbGlzdC0+ZG1pX2FkZHIsIGkrKyArIDEpOwogCX0KIAlyZXR1cm4gaSsxOwogfQpAQCAtMTcxNiw3ICsxNzEwLDcgQEAKIAkJX19iNDRfc2V0X21hY19hZGRyKGJwKTsKIAogCQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCSAgICAoZGV2LT5tY19jb3VudCA+IEI0NF9NQ0FTVF9UQUJMRV9TSVpFKSkKKwkJICAgIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEI0NF9NQ0FTVF9UQUJMRV9TSVpFKSkKIAkJCXZhbCB8PSBSWENPTkZJR19BTExNVUxUSTsKIAkJZWxzZQogCQkJaSA9IF9fYjQ0X2xvYWRfbWNhc3QoYnAsIGRldik7CkBAIC0yMDk3LDcgKzIwOTEsNyBAQAogCW1lbWNweShicC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgNik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoJmJwLT5kZXYtPmRldl9hZGRyWzBdKSl7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkludmFsaWQgTUFDIGFkZHJlc3MgZm91bmQgaW4gRUVQUk9NXG4iKTsKKwkJcHJfZXJyKCJJbnZhbGlkIE1BQyBhZGRyZXNzIGZvdW5kIGluIEVFUFJPTVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjE0MiwxMiArMjEzNiwxMiBAQAogCWluc3RhbmNlKys7CiAKIAlpZiAoYjQ0X3ZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKIAlpZiAoIWRldikgewotCQlkZXZfZXJyKHNkZXYtPmRldiwgIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihzZGV2LT5kZXYsICJFdGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjE4NiwxMyArMjE4MCwxMyBAQAogCWVyciA9IHNzYl9kbWFfc2V0X21hc2soc2RldiwgRE1BX0JJVF9NQVNLKDMwKSk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKHNkZXYtPmRldiwKLQkJCSJSZXF1aXJlZCAzMEJJVCBETUEgbWFzayB1bnN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLlxuIik7CisJCQkiUmVxdWlyZWQgMzBCSVQgRE1BIG1hc2sgdW5zdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbVxuIik7CiAJCWdvdG8gZXJyX291dF9wb3dlcmRvd247CiAJfQogCWVyciA9IGI0NF9nZXRfaW52YXJpYW50cyhicCk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKHNkZXYtPmRldiwKLQkJCSJQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgb2YgY2hpcCwgYWJvcnRpbmcuXG4iKTsKKwkJCSJQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgb2YgY2hpcCwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfcG93ZXJkb3duOwogCX0KIApAQCAtMjIxMiw3ICsyMjA2LDcgQEAKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihzZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihzZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfcG93ZXJkb3duOwogCX0KIApAQCAtMjIyMyw4ICsyMjE3LDEyIEBACiAJICovCiAJYjQ0X2NoaXBfcmVzZXQoYnAsIEI0NF9DSElQX1JFU0VUX0ZVTEwpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY29tIDQ0eHgvNDd4eCAxMC8xMDBCYXNlVCBFdGhlcm5ldCAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CisJLyogZG8gYSBwaHkgcmVzZXQgdG8gdGVzdCBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgcGh5ICovCisJaWYgKGI0NF9waHlfcmVzZXQoYnApIDwgMCkKKwkJYnAtPnBoeV9hZGRyID0gQjQ0X1BIWV9BRERSX05PX1BIWTsKKworCW5ldGRldl9pbmZvKGRldiwgIkJyb2FkY29tIDQ0eHgvNDd4eCAxMC8xMDBCYXNlVCBFdGhlcm5ldCAlcE1cbiIsCisJCSAgICBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCkBAIC0yMjk3LDcgKzIyOTUsNyBAQAogCiAJcmMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCmluZGV4IDBiZDQ3ZDMuLjhjZGNhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCkBAIC02MTksNyArNjE5LDcgQEAKIAogCS8qIG9ubHkgMyBwZXJmZWN0IG1hdGNoIHJlZ2lzdGVycyBsZWZ0LCBmaXJzdCBvbmUgaXMgdXNlZCBmb3IKIAkgKiBvd24gbWFjIGFkZHJlc3MgKi8KLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IGRldi0+bWNfY291bnQgPiAzKQorCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgbmV0ZGV2X21jX2NvdW50KGRldikgPiAzKQogCQl2YWwgfD0gRU5FVF9SWENGR19BTExNQ0FTVF9NQVNLOwogCWVsc2UKIAkJdmFsICY9IH5FTkVUX1JYQ0ZHX0FMTE1DQVNUX01BU0s7CkBAIC02MzEsMTYgKzYzMSwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMCwgbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkgICAgIChtY19saXN0ICE9IE5VTEwpICYmIChpIDwgZGV2LT5tY19jb3VudCkgJiYgKGkgPCAzKTsKLQkgICAgIGkrKywgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBkZXYpIHsKIAkJdTggKmRtaV9hZGRyOwogCQl1MzIgdG1wOwogCi0JCS8qIGZpbHRlciBub24gZXRoZXJuZXQgYWRkcmVzcyAqLwotCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gIT0gNikKLQkJCWNvbnRpbnVlOwotCisJCWlmIChpID09IDMpCisJCQlicmVhazsKIAkJLyogdXBkYXRlIHBlcmZlY3QgbWF0Y2ggcmVnaXN0ZXJzICovCiAJCWRtaV9hZGRyID0gbWNfbGlzdC0+ZG1pX2FkZHI7CiAJCXRtcCA9IChkbWlfYWRkclsyXSA8PCAyNCkgfCAoZG1pX2FkZHJbM10gPDwgMTYpIHwKQEAgLTY0OSw3ICs2NDYsNyBAQAogCiAJCXRtcCA9IChkbWlfYWRkclswXSA8PCA4IHwgZG1pX2FkZHJbMV0pOwogCQl0bXAgfD0gRU5FVF9QTUhfREFUQVZBTElEX01BU0s7Ci0JCWVuZXRfd3JpdGVsKHByaXYsIHRtcCwgRU5FVF9QTUhfUkVHKGkgKyAxKSk7CisJCWVuZXRfd3JpdGVsKHByaXYsIHRtcCwgRU5FVF9QTUhfUkVHKGkrKyArIDEpKTsKIAl9CiAKIAlmb3IgKDsgaSA8IDM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2JlbmV0L0tjb25maWcKaW5kZXggZmRiNmU4MS4uMWE0MWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEJFMk5FVAotCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiIKKwl0cmlzdGF0ZSAiU2VydmVyRW5naW5lcycgMTBHYnBzIE5JQyAtIEJsYWRlRW5naW5lIgogCWRlcGVuZHMgb24gUENJICYmIElORVQKIAloZWxwCiAJVGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgTklDIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMnCi0JMTBHYnBzIG5ldHdvcmsgYWRhcHRlciAtIEJsYWRlRW5naW5lIDIuCisJMTBHYnBzIG5ldHdvcmsgYWRhcHRlciAtIEJsYWRlRW5naW5lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggNWJjNzQ1OS4uYmU4MWZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMyLDI4ICszMiwyNiBAQAogCiAjaW5jbHVkZSAiYmVfaHcuaCIKIAotI2RlZmluZSBEUlZfVkVSCQkJIjIuMTAxLjM0NnUiCisjZGVmaW5lIERSVl9WRVIJCQkiMi4xMDIuMTQ3dSIKICNkZWZpbmUgRFJWX05BTUUJCSJiZTJuZXQiCiAjZGVmaW5lIEJFX05BTUUJCQkiU2VydmVyRW5naW5lcyBCbGFkZUVuZ2luZTIgMTBHYnBzIE5JQyIKICNkZWZpbmUgQkUzX05BTUUJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMyAxMEdicHMgTklDIgogI2RlZmluZSBPQ19OQU1FCQkJIkVtdWxleCBPbmVDb25uZWN0IDEwR2JwcyBOSUMiCiAjZGVmaW5lIE9DX05BTUUxCQkiRW11bGV4IE9uZUNvbm5lY3QgMTBHYnBzIE5JQyAoYmUzKSIKLSNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIkRyaXZlciIKKyNkZWZpbmUgRFJWX0RFU0MJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lIDEwR2JwcyBOSUMgRHJpdmVyIgogCiAjZGVmaW5lIEJFX1ZFTkRPUl9JRCAJCTB4MTlhMgogI2RlZmluZSBCRV9ERVZJQ0VfSUQxCQkweDIxMQogI2RlZmluZSBCRV9ERVZJQ0VfSUQyCQkweDIyMQogI2RlZmluZSBPQ19ERVZJQ0VfSUQxCQkweDcwMAotI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcwMQotI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweDcxMAorI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcxMAogCiBzdGF0aWMgaW5saW5lIGNoYXIgKm5pY19uYW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBPQ19ERVZJQ0VfSUQxOgotCWNhc2UgT0NfREVWSUNFX0lEMjoKIAkJcmV0dXJuIE9DX05BTUU7Ci0JY2FzZSBPQ19ERVZJQ0VfSUQzOgorCWNhc2UgT0NfREVWSUNFX0lEMjoKIAkJcmV0dXJuIE9DX05BTUUxOwogCWNhc2UgQkVfREVWSUNFX0lEMjoKIAkJcmV0dXJuIEJFM19OQU1FOwpAQCAtMTUzLDYgKzE1MSw3IEBACiBzdHJ1Y3QgYmVfbWNjX29iaiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gcTsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBjcTsKKwlib29sIHJlYXJtX2NxOwogfTsKIAogc3RydWN0IGJlX2RydnJfc3RhdHMgewpAQCAtMTY1LDYgKzE2NCw3IEBACiAJdWxvbmcgYmVfdHhfamlmZmllczsKIAl1NjQgYmVfdHhfYnl0ZXM7CiAJdTY0IGJlX3R4X2J5dGVzX3ByZXY7CisJdTY0IGJlX3R4X3BrdHM7CiAJdTMyIGJlX3R4X3JhdGU7CiAKIAl1MzIgY2FjaGVfYmFycmllclsxNl07CkBAIC0xNzYsNiArMTc2LDcgQEAKIAl1bG9uZyBiZV9yeF9qaWZmaWVzOwogCXU2NCBiZV9yeF9ieXRlczsKIAl1NjQgYmVfcnhfYnl0ZXNfcHJldjsKKwl1NjQgYmVfcnhfcGt0czsKIAl1MzIgYmVfcnhfcmF0ZTsKIAkvKiBudW1iZXIgb2Ygbm9uIGV0aGVyIHR5cGUgSUkgZnJhbWVzIGRyb3BwZWQgd2hlcmUKIAkgKiBmcmFtZSBsZW4gPiBsZW5ndGggZmllbGQgb2YgTWFjIEhkciAqLwpAQCAtMjUyLDcgKzI1Myw4IEBACiAJYm9vbCByeF9wb3N0X3N0YXJ2ZWQ7CS8qIFplcm8gcnggZnJhZ3MgaGF2ZSBiZWVuIHBvc3RlZCB0byBCRSAqLwogCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5fZ3JwOwotCXUxNiBudW1fdmxhbnM7CisJdTE2IHZsYW5zX2FkZGVkOworCXUxNiBtYXhfdmxhbnM7CS8qIE51bWJlciBvZiB2bGFucyBzdXBwb3J0ZWQgKi8KIAl1OCB2bGFuX3RhZ1tWTEFOX0dST1VQX0FSUkFZX0xFTl07CiAJc3RydWN0IGJlX2RtYV9tZW0gbWNfY21kX21lbTsKIApAQCAtMjY2LDYgKzI2OCw3IEBACiAJdTMyIGlmX2hhbmRsZTsJCS8qIFVzZWQgdG8gY29uZmlndXJlIGZpbHRlcmluZyAqLwogCXUzMiBwbWFjX2lkOwkJLyogTUFDIGFkZHIgaGFuZGxlIHVzZWQgYnkgQkUgY2FyZCAqLwogCisJYm9vbCBlZWhfZXJyOwogCWJvb2wgbGlua191cDsKIAl1MzIgcG9ydF9udW07CiAJYm9vbCBwcm9taXNjdW91czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCAwMDZjYjJlZi4uNGIxZjgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDQsMTAgKzEwNCwyNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGJlX2FzeW5jX21jY19lbmFibGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7CisKKwliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+bWNjX29iai5jcS5pZCwgdHJ1ZSwgMCk7CisJYWRhcHRlci0+bWNjX29iai5yZWFybV9jcSA9IHRydWU7CisKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOworfQorCit2b2lkIGJlX2FzeW5jX21jY19kaXNhYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWFkYXB0ZXItPm1jY19vYmoucmVhcm1fY3EgPSBmYWxzZTsKK30KKworaW50IGJlX3Byb2Nlc3NfbWNjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbDsKLQlpbnQgbnVtID0gMCwgc3RhdHVzID0gMDsKKwlpbnQgbnVtID0gMDsKKwlzdHJ1Y3QgYmVfbWNjX29iaiAqbWNjX29iaiA9ICZhZGFwdGVyLT5tY2Nfb2JqOwogCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7CiAJd2hpbGUgKChjb21wbCA9IGJlX21jY19jb21wbF9nZXQoYWRhcHRlcikpKSB7CkBAIC0xMTksMzEgKzEzNSwzMSBAQAogCQkJYmVfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKGFkYXB0ZXIsCiAJCQkJKHN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICopIGNvbXBsKTsKIAkJfSBlbHNlIGlmIChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0spIHsKLQkJCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBjb21wbCk7Ci0JCQkJYXRvbWljX2RlYygmYWRhcHRlci0+bWNjX29iai5xLnVzZWQpOworCQkJCSpzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBjb21wbCk7CisJCQkJYXRvbWljX2RlYygmbWNjX29iai0+cS51c2VkKTsKIAkJfQogCQliZV9tY2NfY29tcGxfdXNlKGNvbXBsKTsKIAkJbnVtKys7CiAJfQogCi0JaWYgKG51bSkKLQkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIGFkYXB0ZXItPm1jY19vYmouY3EuaWQsIHRydWUsIG51bSk7Ci0KIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIG51bTsKIH0KIAogLyogV2FpdCB0aWxsIG5vIG1vcmUgcGVuZGluZyBtY2MgcmVxdWVzdHMgYXJlIHByZXNlbnQgKi8KIHN0YXRpYyBpbnQgYmVfbWNjX3dhaXRfY29tcGwoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAjZGVmaW5lIG1jY190aW1lb3V0CQkxMjAwMDAgLyogMTJzIHRpbWVvdXQgKi8KLQlpbnQgaSwgc3RhdHVzOwotCWZvciAoaSA9IDA7IGkgPCBtY2NfdGltZW91dDsgaSsrKSB7Ci0JCXN0YXR1cyA9IGJlX3Byb2Nlc3NfbWNjKGFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzKQotCQkJcmV0dXJuIHN0YXR1czsKKwlpbnQgaSwgbnVtLCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9tY2Nfb2JqICptY2Nfb2JqID0gJmFkYXB0ZXItPm1jY19vYmo7CiAKLQkJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5tY2Nfb2JqLnEudXNlZCkgPT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgbWNjX3RpbWVvdXQ7IGkrKykgeworCQludW0gPSBiZV9wcm9jZXNzX21jYyhhZGFwdGVyLCAmc3RhdHVzKTsKKwkJaWYgKG51bSkKKwkJCWJlX2NxX25vdGlmeShhZGFwdGVyLCBtY2Nfb2JqLT5jcS5pZCwKKwkJCQltY2Nfb2JqLT5yZWFybV9jcSwgbnVtKTsKKworCQlpZiAoYXRvbWljX3JlYWQoJm1jY19vYmotPnEudXNlZCkgPT0gMCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTAwKTsKIAl9CkBAIC0xNTEsNyArMTY3LDcgQEAKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAibWNjcSBwb2xsIHRpbWVkIG91dFxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogTm90aWZ5IE1DQyByZXF1ZXN0cyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqLwpAQCAtMTY3LDcgKzE4MywxNCBAQAogCXUzMiByZWFkeTsKIAogCWRvIHsKLQkJcmVhZHkgPSBpb3JlYWQzMihkYikgJiBNUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwkJcmVhZHkgPSBpb3JlYWQzMihkYik7CisJCWlmIChyZWFkeSA9PSAweGZmZmZmZmZmKSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJInBjaSBzbG90IGRpc2Nvbm5lY3RlZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlyZWFkeSAmPSBNUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKIAkJaWYgKHJlYWR5KQogCQkJYnJlYWs7CiAKQEAgLTE5OCw2ICsyMjEsMTEgQEAKIAlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7CiAJc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwgPSAmbWJveC0+Y29tcGw7CiAKKwkvKiB3YWl0IGZvciByZWFkeSB0byBiZSBzZXQgKi8KKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoYWRhcHRlciwgZGIpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKwogCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOwogCS8qIGF0IGJpdHMgMiAtIDMxIHBsYWNlIG1ib3ggZG1hIGFkZHIgbXNiIGJpdHMgMzQgLSA2MyAqLwogCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOwpAQCAtMzk3LDYgKzQyNSw5IEBACiAJdTggKndyYjsKIAlpbnQgc3RhdHVzOwogCisJaWYgKGFkYXB0ZXItPmVlaF9lcnIpCisJCXJldHVybiAtRUlPOworCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJd3JiID0gKHU4ICopd3JiX2Zyb21fbWJveChhZGFwdGVyKTsKQEAgLTc2OSw2ICs4MDAsOSBAQAogCXU4IHN1YnN5cyA9IDAsIG9wY29kZSA9IDA7CiAJaW50IHN0YXR1czsKIAorCWlmIChhZGFwdGVyLT5lZWhfZXJyKQorCQlyZXR1cm4gLUVJTzsKKwogCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXdyYiA9IHdyYl9mcm9tX21ib3goYWRhcHRlcik7CkBAIC04NTcsNiArODkxLDkgQEAKIAlzdHJ1Y3QgYmVfY21kX3JlcV9pZl9kZXN0cm95ICpyZXE7CiAJaW50IHN0YXR1czsKIAorCWlmIChhZGFwdGVyLT5lZWhfZXJyKQorCQlyZXR1cm4gLUVJTzsKKwogCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXdyYiA9IHdyYl9mcm9tX21ib3goYWRhcHRlcik7CkBAIC0xMDk3LDggKzExMzQsNyBAQAogICogKG1jID09IE5VTEwpID0+IG11bHRpY2FzdCBwcm9taXNjb3VzCiAgKi8KIGludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLAotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QsIHUzMiBtY19jb3VudCwKLQkJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSkKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGJlX2RtYV9tZW0gKm1lbSkKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfcmVxX21jYXN0X21hY19jb25maWcgKnJlcSA9IG1lbS0+dmE7CkBAIC0xMTI1LDEzICsxMTYxLDE0IEBACiAJCU9QQ09ERV9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VULCBzaXplb2YoKnJlcSkpOwogCiAJcmVxLT5pbnRlcmZhY2VfaWQgPSBpZl9pZDsKLQlpZiAobWNfbGlzdCkgeworCWlmIChuZXRkZXYpIHsKIAkJaW50IGk7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAKLQkJcmVxLT5udW1fbWFjID0gY3B1X3RvX2xlMTYobWNfY291bnQpOworCQlyZXEtPm51bV9tYWMgPSBjcHVfdG9fbGUxNihuZXRkZXZfbWNfY291bnQobmV0ZGV2KSk7CiAKLQkJZm9yIChtYyA9IG1jX2xpc3QsIGkgPSAwOyBtYzsgbWMgPSBtYy0+bmV4dCwgaSsrKQorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIG5ldGRldikKIAkJCW1lbWNweShyZXEtPm1hY1tpXS5ieXRlLCBtYy0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAl9IGVsc2UgewogCQlyZXEtPnByb21pc2N1b3VzID0gMTsKQEAgLTEzNzUsNyArMTQxMiw3IEBACiAJCQl1MzIgZmxhc2hfdHlwZSwgdTMyIGZsYXNoX29wY29kZSwgdTMyIGJ1Zl9zaXplKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7Ci0Jc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSAqcmVxID0gY21kLT52YTsKKwlzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tICpyZXE7CiAJc3RydWN0IGJlX3NnZSAqc2dlOwogCWludCBzdGF0dXM7CiAKQEAgLTE0MDksNyArMTQ0Niw4IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9nZXRfZmxhc2hfY3JjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZmxhc2hlZF9jcmMpCitpbnQgYmVfY21kX2dldF9mbGFzaF9jcmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmbGFzaGVkX2NyYywKKwkJCSBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSAqcmVxOwpAQCAtMTQzMCw5ICsxNDY4LDkgQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9SRUFEX0ZMQVNIUk9NLCBzaXplb2YoKnJlcSkrNCk7CiAKLQlyZXEtPnBhcmFtcy5vcF90eXBlID0gY3B1X3RvX2xlMzIoRkxBU0hST01fVFlQRV9SRURCT09UKTsKKwlyZXEtPnBhcmFtcy5vcF90eXBlID0gY3B1X3RvX2xlMzIoSU1HX1RZUEVfUkVEQk9PVCk7CiAJcmVxLT5wYXJhbXMub3BfY29kZSA9IGNwdV90b19sZTMyKEZMQVNIUk9NX09QRVJfUkVQT1JUKTsKLQlyZXEtPnBhcmFtcy5vZmZzZXQgPSAweDNGRkZDOworCXJlcS0+cGFyYW1zLm9mZnNldCA9IG9mZnNldDsKIAlyZXEtPnBhcmFtcy5kYXRhX2J1Zl9zaXplID0gMHg0OwogCiAJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwpAQCAtMTYwOCwzICsxNjQ2LDMzIEBACiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQorCitleHRlcm4gaW50IGJlX2NtZF9nZXRfc2VlcHJvbV9kYXRhKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX2NtZF9yZXFfc2VlcHJvbV9yZWFkICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJcmVxID0gbm9uZW1iX2NtZC0+dmE7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxLAorCQkJT1BDT0RFX0NPTU1PTl9TRUVQUk9NX1JFQUQpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX1NFRVBST01fUkVBRCwgc2l6ZW9mKCpyZXEpKTsKKworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQtPmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPnNpemUpOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworCisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IDEzYjMzYzguLmNjZTYxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTI0LDYgKzEyNCw3IEBACiAjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFCQkJCTEyCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFCQkJCTEzCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0NSRUFURSAgICAgICAgCQkyMQorI2RlZmluZSBPUENPREVfQ09NTU9OX1NFRVBST01fUkVBRAkJCTMwCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19SWF9GSUxURVIgICAgCQkzNAogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MCQkJMzYKQEAgLTg1NSw2ICs4NTYsMTkgQEAKIAl1OCAgcmN2X2J1ZmZbNDA5Nl07CiB9OwogCisvKioqKioqKioqKioqKioqKioqKioqKiogU0VFUFJPTSBSZWFkICoqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEJFX1JFQURfU0VFUFJPTV9MRU4gMTAyNAorc3RydWN0IGJlX2NtZF9yZXFfc2VlcHJvbV9yZWFkIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHJzdmQwW0JFX1JFQURfU0VFUFJPTV9MRU5dOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX3NlZXByb21fcmVhZCB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCBzZWVwcm9tX2RhdGFbQkVfUkVBRF9TRUVQUk9NX0xFTl07Cit9OworCiBleHRlcm4gaW50IGJlX3BjaV9mbnVtX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCkBAIC04OTgsOCArOTEyLDcgQEAKIGV4dGVybiBpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXU4IHBvcnRfbnVtLCBib29sIGVuKTsKIGV4dGVybiBpbnQgYmVfY21kX211bHRpY2FzdF9zZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKLQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCwgdTMyIG1jX2NvdW50LAotCQkJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSk7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKTsKIGV4dGVybiBpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgdHhfZmMsIHUzMiByeF9mYyk7CiBleHRlcm4gaW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtOTA3LDcgKzkyMCw3IEBACiBleHRlcm4gaW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgKnBvcnRfbnVtLCB1MzIgKmNhcCk7CiBleHRlcm4gaW50IGJlX2NtZF9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gaW50IGJlX3Byb2Nlc3NfbWNjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBpbnQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCAqc3RhdHVzKTsKIGV4dGVybiBpbnQgYmVfY21kX3NldF9iZWFjb25fc3RhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1OCBwb3J0X251bSwgdTggYmVhY29uLCB1OCBzdGF0dXMsIHU4IHN0YXRlKTsKIGV4dGVybiBpbnQgYmVfY21kX2dldF9iZWFjb25fc3RhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC05MTcsMTUgKzkzMCwyMSBAQAogZXh0ZXJuIGludCBiZV9jbWRfd3JpdGVfZmxhc2hyb20oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLCB1MzIgZmxhc2hfb3BlciwKIAkJCXUzMiBmbGFzaF9vcGNvZGUsIHUzMiBidWZfc2l6ZSk7Ci1leHRlcm4gaW50IGJlX2NtZF9nZXRfZmxhc2hfY3JjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZmxhc2hlZF9jcmMpOworaW50IGJlX2NtZF9nZXRfZmxhc2hfY3JjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZmxhc2hlZF9jcmMsCisJCQkJaW50IG9mZnNldCk7CiBleHRlcm4gaW50IGJlX2NtZF9lbmFibGVfbWFnaWNfd29sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjLAogCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKTsKIGV4dGVybiBpbnQgYmVfY21kX2Z3X2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfZndfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgYmVfYXN5bmNfbWNjX2VuYWJsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBiZV9hc3luY19tY2NfZGlzYWJsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9sb29wYmFja190ZXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcG9ydF9udW0sCiAJCQkJdTMyIGxvb3BiYWNrX3R5cGUsIHUzMiBwa3Rfc2l6ZSwKIAkJCQl1MzIgbnVtX3BrdHMsIHU2NCBwYXR0ZXJuKTsKIGV4dGVybiBpbnQgYmVfY21kX2Rkcl9kbWFfdGVzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTY0IHBhdHRlcm4sCiAJCQl1MzIgYnl0ZV9jbnQsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3NlZXByb21fZGF0YShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCk7CiBleHRlcm4gaW50IGJlX2NtZF9zZXRfbG9vcGJhY2soc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHBvcnRfbnVtLAogCQkJCXU4IGxvb3BiYWNrX3R5cGUsIHU4IGVuYWJsZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwppbmRleCA1ZDAwMWM0ZC4uOTU2MGQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMTIsNiArMTEyLDcgQEAKIAkiUEhZIExvb3BiYWNrIHRlc3QiLAogCSJFeHRlcm5hbCBMb29wYmFjayB0ZXN0IiwKIAkiRERSIERNQSB0ZXN0IgorCSJMaW5rIHRlc3QiCiB9OwogCiAjZGVmaW5lIEVUSFRPT0xfVEVTVFNfTlVNIEFSUkFZX1NJWkUoZXRfc2VsZl90ZXN0cykKQEAgLTUyOSw2ICs1MzAsOSBAQAogYmVfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYm9vbCBsaW5rX3VwOworCXU4IG1hY19zcGVlZCA9IDA7CisJdTE2IHFvc19saW5rX3NwZWVkID0gMDsKIAogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIEVUSFRPT0xfVEVTVFNfTlVNKTsKIApAQCAtNTQ1LDEyICs1NDksMjAgQEAKIAkJCQkJCSZkYXRhWzJdKSAhPSAwKSB7CiAJCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAJCX0KLQotCQlkYXRhWzNdID0gYmVfdGVzdF9kZHJfZG1hKGFkYXB0ZXIpOwotCQlpZiAoZGF0YVszXSAhPSAwKQotCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCX0KIAorCWlmIChiZV90ZXN0X2Rkcl9kbWEoYWRhcHRlcikgIT0gMCkgeworCQlkYXRhWzNdID0gMTsKKwkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCX0KKworCWlmIChiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoYWRhcHRlciwgJmxpbmtfdXAsICZtYWNfc3BlZWQsCisJCQkJJnFvc19saW5rX3NwZWVkKSAhPSAwKSB7CisJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJZGF0YVs0XSA9IC0xOworCX0gZWxzZSBpZiAobWFjX3NwZWVkKSB7CisJCWRhdGFbNF0gPSAxOworCX0KIH0KIAogc3RhdGljIGludApAQCAtNTY3LDEyICs1NzksNTcgQEAKIAlyZXR1cm4gYmVfbG9hZF9mdyhhZGFwdGVyLCBmaWxlX25hbWUpOwogfQogCitzdGF0aWMgaW50CitiZV9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJldHVybiBCRV9SRUFEX1NFRVBST01fTEVOOworfQorCitzdGF0aWMgaW50CitiZV9yZWFkX2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKKwkJCXVpbnQ4X3QgKmRhdGEpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9kbWFfbWVtIGVlcHJvbV9jbWQ7CisJc3RydWN0IGJlX2NtZF9yZXNwX3NlZXByb21fcmVhZCAqcmVzcDsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFlZXByb20tPmxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZXByb20tPm1hZ2ljID0gQkVfVkVORE9SX0lEIHwgKGFkYXB0ZXItPnBkZXYtPmRldmljZTw8MTYpOworCisJbWVtc2V0KCZlZXByb21fY21kLCAwLCBzaXplb2Yoc3RydWN0IGJlX2RtYV9tZW0pKTsKKwllZXByb21fY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfc2VlcHJvbV9yZWFkKTsKKwllZXByb21fY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZWVwcm9tX2NtZC5zaXplLAorCQkJCSZlZXByb21fY21kLmRtYSk7CisKKwlpZiAoIWVlcHJvbV9jbWQudmEpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuIENvdWxkIG5vdCByZWFkIGVlcHJvbVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN0YXR1cyA9IGJlX2NtZF9nZXRfc2VlcHJvbV9kYXRhKGFkYXB0ZXIsICZlZXByb21fY21kKTsKKworCWlmICghc3RhdHVzKSB7CisJCXJlc3AgPSAoc3RydWN0IGJlX2NtZF9yZXNwX3NlZXByb21fcmVhZCAqKSBlZXByb21fY21kLnZhOworCQltZW1jcHkoZGF0YSwgcmVzcC0+c2VlcHJvbV9kYXRhICsgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+bGVuKTsKKwl9CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBlZXByb21fY21kLnNpemUsIGVlcHJvbV9jbWQudmEsCisJCQllZXByb21fY21kLmRtYSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGJlX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBiZV9nZXRfZHJ2aW5mbywKIAkuZ2V0X3dvbCA9IGJlX2dldF93b2wsCiAJLnNldF93b2wgPSBiZV9zZXRfd29sLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9lZXByb21fbGVuID0gYmVfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBiZV9yZWFkX2VlcHJvbSwKIAkuZ2V0X2NvYWxlc2NlID0gYmVfZ2V0X2NvYWxlc2NlLAogCS5zZXRfY29hbGVzY2UgPSBiZV9zZXRfY29hbGVzY2UsCiAJLmdldF9yaW5ncGFyYW0gPSBiZV9nZXRfcmluZ3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKaW5kZXggZTJiM2JlZi4uNWZmYjE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTk5LDYgKzk5LDYzIEBACiAvKiBOdW1iZXIgb2YgZW50cmllcyBwb3N0ZWQgKi8KICNkZWZpbmUgREJfTUNDUV9OVU1fUE9TVEVEX1NISUZUCSgxNikJLyogYml0cyAxNiAtIDI5ICovCiAKKy8qIEZsYXNocm9tIHJlbGF0ZWQgZGVzY3JpcHRvcnMgKi8KKyNkZWZpbmUgSU1BR0VfVFlQRV9GSVJNV0FSRQkJMTYwCisjZGVmaW5lIElNQUdFX1RZUEVfQk9PVENPREUJCTIyNAorI2RlZmluZSBJTUFHRV9UWVBFX09QVElPTlJPTQkJMzIKKworI2RlZmluZSBOVU1fRkxBU0hESVJfRU5UUklFUwkJMzIKKworI2RlZmluZSBJTUdfVFlQRV9JU0NTSV9BQ1RJVkUJCTAKKyNkZWZpbmUgSU1HX1RZUEVfUkVEQk9PVAkJMQorI2RlZmluZSBJTUdfVFlQRV9CSU9TCQkJMgorI2RlZmluZSBJTUdfVFlQRV9QWEVfQklPUwkJMworI2RlZmluZSBJTUdfVFlQRV9GQ09FX0JJT1MJCTgKKyNkZWZpbmUgSU1HX1RZUEVfSVNDU0lfQkFDS1VQCQk5CisjZGVmaW5lIElNR19UWVBFX0ZDT0VfRldfQUNUSVZFCQkxMAorI2RlZmluZSBJTUdfVFlQRV9GQ09FX0ZXX0JBQ0tVUCAJMTEKKyNkZWZpbmUgSU1HX1RZUEVfTkNTSV9CSVRGSUxFCQkxMworI2RlZmluZSBJTUdfVFlQRV9OQ1NJXzgwNTEJCTE0CisKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9GTEFTSAkJMQorI2RlZmluZSBGTEFTSFJPTV9PUEVSX1NBVkUJCTIKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9SRVBPUlQJCTQKKworI2RlZmluZSBGTEFTSF9JTUFHRV9NQVhfU0laRV9nMiAgICAgICAgICAgICgxMzEwNzIwKSAvKiBNYXggZmlybXdhcmUgaW1hZ2Ugc3ogKi8KKyNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMiAgICAgICAoMjYyMTQ0KSAgLyogTWF4IE9QVElPTiBST00gaW1nIHN6ICovCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzIJICAoMjYyMTQ0KSAgLyogTWF4IFJlZGJvb3QgaW1hZ2Ugc3ogKi8KKyNkZWZpbmUgRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzMgICAgICAgICAgICAoMjA5NzE1MikgLyogTWF4IGZ3IGltYWdlIHNpemUgKi8KKyNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMyAgICAgICAoNTI0Mjg4KSAgLyogTWF4IE9QVElPTiBST00gaW1nIHN6ICovCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzMJICAoMTA0ODU3NikgIC8qIE1heCBSZWRib290IGltYWdlIHN6ICovCisKKyNkZWZpbmUgRkxBU0hfTkNTSV9NQUdJQwkJKDB4MTYwMzIwMDkpCisjZGVmaW5lIEZMQVNIX05DU0lfRElTQUJMRUQJCSgwKQorI2RlZmluZSBGTEFTSF9OQ1NJX0VOQUJMRUQJCSgxKQorCisjZGVmaW5lIEZMQVNIX05DU0lfQklURklMRV9IRFJfT0ZGU0VUCSgweDYwMDAwMCkKKworLyogT2Zmc2V0cyBmb3IgY29tcG9uZW50cyBvbiBGbGFzaC4gKi8KKyNkZWZpbmUgRkxBU0hfaVNDU0lfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMiAoMTA0ODU3NikKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUX2cyICAoMjM1OTI5NikKKyNkZWZpbmUgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUX2cyICAoMzY3MDAxNikKKyNkZWZpbmUgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlRfZzIgICAoNDk4MDczNikKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQklPU19TVEFSVF9nMiAgICAgICAgICAoNzM0MDAzMikKKyNkZWZpbmUgRkxBU0hfUFhFX0JJT1NfU1RBUlRfZzIgICAgICAgICAgICAoNzg2NDMyMCkKKyNkZWZpbmUgRkxBU0hfRkNvRV9CSU9TX1NUQVJUX2cyICAgICAgICAgICAoNTI0Mjg4KQorI2RlZmluZSBGTEFTSF9SRURCT09UX1NUQVJUX2cyCQkgICgwKQorCisjZGVmaW5lIEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzMgKDIwOTcxNTIpCisjZGVmaW5lIEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMyAgKDQxOTQzMDQpCisjZGVmaW5lIEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMyAgKDYyOTE0NTYpCisjZGVmaW5lIEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUX2czICAgKDgzODg2MDgpCisjZGVmaW5lIEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlRfZzMgICAgICAgICAgKDEyNTgyOTEyKQorI2RlZmluZSBGTEFTSF9QWEVfQklPU19TVEFSVF9nMyAgICAgICAgICAgICgxMzEwNzIwMCkKKyNkZWZpbmUgRkxBU0hfRkNvRV9CSU9TX1NUQVJUX2czICAgICAgICAgICAoMTM2MzE0ODgpCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfU1RBUlRfZzMgICAgICAgICAgICAgKDI2MjE0NCkKKworCisKKwogLyoKICAqIEJFIGRlc2NyaXB0b3JzOiBob3N0IG1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgd2hvc2UgZm9ybWF0cwogICogYXJlIGhhcmR3aXJlZCBpbiBCRSBzaWxpY29uLgpAQCAtMTA3LDYgKzE2NCw3IEBACiAjZGVmaW5lIEVRX0VOVFJZX1ZBTElEX01BU0sgCQkweDEJLyogYml0IDAgKi8KICNkZWZpbmUgRVFfRU5UUllfUkVTX0lEX01BU0sgCQkweEZGRkYJLyogYml0cyAxNiAtIDMxICovCiAjZGVmaW5lIEVRX0VOVFJZX1JFU19JRF9TSElGVCAJCTE2CisKIHN0cnVjdCBiZV9lcV9lbnRyeSB7CiAJdTMyIGV2dDsKIH07CkBAIC0yMjEsNDEgKzI3OSw2IEBACiAJdTMyIGR3WzRdOwogfTsKIAotLyogRmxhc2hyb20gcmVsYXRlZCBkZXNjcmlwdG9ycyAqLwotI2RlZmluZSBJTUFHRV9UWVBFX0ZJUk1XQVJFCQkxNjAKLSNkZWZpbmUgSU1BR0VfVFlQRV9CT09UQ09ERQkJMjI0Ci0jZGVmaW5lIElNQUdFX1RZUEVfT1BUSU9OUk9NCQkzMgotCi0jZGVmaW5lIE5VTV9GTEFTSERJUl9FTlRSSUVTCQkzMgotCi0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfSVNDU0lfQUNUSVZFCTAKLSNkZWZpbmUgRkxBU0hST01fVFlQRV9SRURCT09UCQkxCi0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfQklPUwkJMgotI2RlZmluZSBGTEFTSFJPTV9UWVBFX1BYRV9CSU9TCQkzCi0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfRkNPRV9CSU9TCQk4Ci0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfSVNDU0lfQkFDS1VQCTkKLSNkZWZpbmUgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0FDVElWRQkxMAotI2RlZmluZSBGTEFTSFJPTV9UWVBFX0ZDT0VfRldfQkFDS1VQIAkxMQotCi0jZGVmaW5lIEZMQVNIUk9NX09QRVJfRkxBU0gJCTEKLSNkZWZpbmUgRkxBU0hST01fT1BFUl9TQVZFCQkyCi0jZGVmaW5lIEZMQVNIUk9NX09QRVJfUkVQT1JUCQk0Ci0KLSNkZWZpbmUgRkxBU0hfSU1BR0VfTUFYX1NJWkUgICAgICAgICAgICAoMTMxMDcyMCkgLyogTWF4IGZpcm13YXJlIGltYWdlIHNpemUgKi8KLSNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRSAgICAgICAoMjYyMTQ0KSAgLyogTWF4IE9QVElPTiBST00gaW1hZ2Ugc3ogKi8KLSNkZWZpbmUgRkxBU0hfUkVEQk9PVF9JTUFHRV9NQVhfU0laRSAgICAoMjYyMTQ0KSAgLyogTWF4IHJlZGJvb3QgaW1hZ2Ugc3ogKi8KLQotLyogT2Zmc2V0cyBmb3IgY29tcG9uZW50cyBvbiBGbGFzaC4gKi8KLSNkZWZpbmUgRkxBU0hfaVNDU0lfUFJJTUFSWV9JTUFHRV9TVEFSVCAoMTA0ODU3NikKLSNkZWZpbmUgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUICAoMjM1OTI5NikKLSNkZWZpbmUgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUICAoMzY3MDAxNikKLSNkZWZpbmUgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlQgICAoNDk4MDczNikKLSNkZWZpbmUgRkxBU0hfaVNDU0lfQklPU19TVEFSVCAgICAgICAgICAoNzM0MDAzMikKLSNkZWZpbmUgRkxBU0hfUFhFX0JJT1NfU1RBUlQgICAgICAgICAgICAoNzg2NDMyMCkKLSNkZWZpbmUgRkxBU0hfRkNvRV9CSU9TX1NUQVJUICAgICAgICAgICAoNTI0Mjg4KQotI2RlZmluZSBGTEFTSF9SRURCT09UX1NUQVJUCQkoMzI3NjgpCi0jZGVmaW5lIEZMQVNIX1JFREJPT1RfSVNNX1NUQVJUCQkoMCkKLQogc3RydWN0IGNvbnRyb2xsZXJfaWQgewogCXUzMiB2ZW5kb3I7CiAJdTMyIGRldmljZTsKQEAgLTI2Myw3ICsyODYsMjAgQEAKIAl1MzIgc3ViZGV2aWNlOwogfTsKIAotc3RydWN0IGZsYXNoX2ZpbGVfaGRyIHsKK3N0cnVjdCBmbGFzaF9jb21wIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlpbnQgb3B0eXBlOworCWludCBzaXplOworfTsKKworc3RydWN0IGltYWdlX2hkciB7CisJdTMyIGltYWdlaWQ7CisJdTMyIGltYWdlb2Zmc2V0OworCXUzMiBpbWFnZWxlbmd0aDsKKwl1MzIgaW1hZ2VfY2hlY2tzdW07CisJdTggaW1hZ2VfdmVyc2lvblszMl07Cit9Oworc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyIHsKIAl1OCBzaWduWzMyXTsKIAl1MzIgY2tzdW07CiAJdTMyIGFudGlkb3RlOwpAQCAtMjc1LDYgKzMxMSwxNyBAQAogCXU4IGJ1aWxkWzI0XTsKIH07CiAKK3N0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyB7CisJdTggc2lnbls1Ml07CisJdTggdWZpX3ZlcnNpb25bNF07CisJdTMyIGZpbGVfbGVuOworCXUzMiBja3N1bTsKKwl1MzIgYW50aWRvdGU7CisJdTMyIG51bV9pbWdzOworCXU4IGJ1aWxkWzI0XTsKKwl1OCByc3ZkWzMyXTsKK307CisKIHN0cnVjdCBmbGFzaF9zZWN0aW9uX2hkciB7CiAJdTMyIGZvcm1hdF9yZXY7CiAJdTMyIGNrc3VtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDYyNmI3NmMuLmE3MDNlZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsNyArMzQsNiBAQAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAotCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDMpIH0sCiAJeyAwIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVfZGV2X2lkcyk7CkBAIC02OSw2ICs2OCw5IEBACiAJdTMyIHJlZyA9IGlvcmVhZDMyKGFkZHIpOwogCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKIAorCWlmIChhZGFwdGVyLT5lZWhfZXJyKQorCQlyZXR1cm47CisKIAlpZiAoIWVuYWJsZWQgJiYgZW5hYmxlKQogCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKIAllbHNlIGlmIChlbmFibGVkICYmICFlbmFibGUpCkBAIC0xMDAsNiArMTAyLDEwIEBACiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX0VRX1JJTkdfSURfTUFTSzsKKworCWlmIChhZGFwdGVyLT5lZWhfZXJyKQorCQlyZXR1cm47CisKIAlpZiAoYXJtKQogCQl2YWwgfD0gMSA8PCBEQl9FUV9SRUFSTV9TSElGVDsKIAlpZiAoY2xlYXJfaW50KQpAQCAtMTEzLDYgKzExOSwxMCBAQAogewogCXUzMiB2YWwgPSAwOwogCXZhbCB8PSBxaWQgJiBEQl9DUV9SSU5HX0lEX01BU0s7CisKKwlpZiAoYWRhcHRlci0+ZWVoX2VycikKKwkJcmV0dXJuOworCiAJaWYgKGFybSkKIAkJdmFsIHw9IDEgPDwgREJfQ1FfUkVBUk1fU0hJRlQ7CiAJdmFsIHw9IG51bV9wb3BwZWQgPDwgREJfQ1FfTlVNX1BPUFBFRF9TSElGVDsKQEAgLTE0OSwxMyArMTU5LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9zdGF0cyA9ICZhZGFwdGVyLT5uZXRkZXYtPnN0YXRzOwogCXN0cnVjdCBiZV9lcnhfc3RhdHMgKmVyeF9zdGF0cyA9ICZod19zdGF0cy0+ZXJ4OwogCi0JZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gcG9ydF9zdGF0cy0+cnhfdG90YWxfZnJhbWVzOwotCWRldl9zdGF0cy0+dHhfcGFja2V0cyA9IHBvcnRfc3RhdHMtPnR4X3VuaWNhc3RmcmFtZXMgKwotCQlwb3J0X3N0YXRzLT50eF9tdWx0aWNhc3RmcmFtZXMgKyBwb3J0X3N0YXRzLT50eF9icm9hZGNhc3RmcmFtZXM7Ci0JZGV2X3N0YXRzLT5yeF9ieXRlcyA9ICh1NjQpIHBvcnRfc3RhdHMtPnJ4X2J5dGVzX21zZCA8PCAzMiB8Ci0JCQkJKHU2NCkgcG9ydF9zdGF0cy0+cnhfYnl0ZXNfbHNkOwotCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAodTY0KSBwb3J0X3N0YXRzLT50eF9ieXRlc19tc2QgPDwgMzIgfAotCQkJCSh1NjQpIHBvcnRfc3RhdHMtPnR4X2J5dGVzX2xzZDsKKwlkZXZfc3RhdHMtPnJ4X3BhY2tldHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV9yeF9wa3RzOworCWRldl9zdGF0cy0+dHhfcGFja2V0cyA9IGRydnJfc3RhdHMoYWRhcHRlciktPmJlX3R4X3BrdHM7CisJZGV2X3N0YXRzLT5yeF9ieXRlcyA9IGRydnJfc3RhdHMoYWRhcHRlciktPmJlX3J4X2J5dGVzOworCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9ieXRlczsKIAogCS8qIGJhZCBwa3RzIHJlY2VpdmVkICovCiAJZGV2X3N0YXRzLT5yeF9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzICsKQEAgLTMxMiwxMiArMzE5LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIGJlX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCXUzMiB3cmJfY250LCB1MzIgY29waWVkLCBib29sIHN0b3BwZWQpCisJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgdTMyIGdzb19zZWdzLCBib29sIHN0b3BwZWQpCiB7CiAJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKIAlzdGF0cy0+YmVfdHhfcmVxcysrOwogCXN0YXRzLT5iZV90eF93cmJzICs9IHdyYl9jbnQ7CiAJc3RhdHMtPmJlX3R4X2J5dGVzICs9IGNvcGllZDsKKwlzdGF0cy0+YmVfdHhfcGt0cyArPSAoZ3NvX3NlZ3MgPyBnc29fc2VncyA6IDEpOwogCWlmIChzdG9wcGVkKQogCQlzdGF0cy0+YmVfdHhfc3RvcHMrKzsKIH0KQEAgLTQ2Miw3ICs0NzAsOCBAQAogCiAJCWJlX3R4cV9ub3RpZnkoYWRhcHRlciwgdHhxLT5pZCwgd3JiX2NudCk7CiAKLQkJYmVfdHhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHdyYl9jbnQsIGNvcGllZCwgc3RvcHBlZCk7CisJCWJlX3R4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCB3cmJfY250LCBjb3BpZWQsCisJCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2Vncywgc3RvcHBlZCk7CiAJfSBlbHNlIHsKIAkJdHhxLT5oZWFkID0gc3RhcnQ7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC00NzQsMTAgKzQ4MywxMiBAQAogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpZiAobmV3X210dSA8IEJFX01JTl9NVFUgfHwKLQkJCW5ld19tdHUgPiBCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSkgeworCQkJbmV3X210dSA+IChCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtCisJCQkJCShFVEhfSExFTiArIEVUSF9GQ1NfTEVOKSkpIHsKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCSJNVFUgbXVzdCBiZSBiZXR3ZWVuICVkIGFuZCAlZCBieXRlc1xuIiwKLQkJCUJFX01JTl9NVFUsIEJFX01BWF9KVU1CT19GUkFNRV9TSVpFKTsKKwkJCUJFX01JTl9NVFUsCisJCQkoQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgLSAoRVRIX0hMRU4gKyBFVEhfRkNTX0xFTikpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJNVFUgY2hhbmdlZCBmcm9tICVkIHRvICVkIGJ5dGVzXG4iLApAQCAtNDg3LDE3ICs0OTgsMTYgQEAKIH0KIAogLyoKLSAqIGlmIHRoZXJlIGFyZSBCRV9OVU1fVkxBTlNfU1VQUE9SVEVEIG9yIGxlc3NlciBudW1iZXIgb2YgVkxBTlMgY29uZmlndXJlZCwKLSAqIHByb2dyYW0gdGhlbSBpbiBCRS4gIElmIG1vcmUgdGhhbiBCRV9OVU1fVkxBTlNfU1VQUE9SVEVEIGFyZSBjb25maWd1cmVkLAotICogc2V0IHRoZSBCRSBpbiBwcm9taXNjdW91cyBWTEFOIG1vZGUuCisgKiBBIG1heCBvZiA2NCAoQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCkgdmxhbnMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gQkUuCisgKiBJZiB0aGUgdXNlciBjb25maWd1cmVzIG1vcmUsIHBsYWNlIEJFIGluIHZsYW4gcHJvbWlzY3VvdXMgbW9kZS4KICAqLwogc3RhdGljIGludCBiZV92aWRfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXUxNiB2dGFnW0JFX05VTV9WTEFOU19TVVBQT1JURURdOwogCXUxNiBudGFncyA9IDAsIGk7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gMDsKIAotCWlmIChhZGFwdGVyLT5udW1fdmxhbnMgPD0gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCkgIHsKKwlpZiAoYWRhcHRlci0+dmxhbnNfYWRkZWQgPD0gYWRhcHRlci0+bWF4X3ZsYW5zKSAgewogCQkvKiBDb25zdHJ1Y3QgVkxBTiBUYWJsZSB0byBnaXZlIHRvIEhXICovCiAJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CiAJCQlpZiAoYWRhcHRlci0+dmxhbl90YWdbaV0pIHsKQEAgLTUzMSwyMSArNTQxLDIxIEBACiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JYWRhcHRlci0+bnVtX3ZsYW5zKys7CiAJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDE7Ci0KLQliZV92aWRfY29uZmlnKGFkYXB0ZXIpOworCWFkYXB0ZXItPnZsYW5zX2FkZGVkKys7CisJaWYgKGFkYXB0ZXItPnZsYW5zX2FkZGVkIDw9IChhZGFwdGVyLT5tYXhfdmxhbnMgKyAxKSkKKwkJYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgYmVfdmxhbl9yZW1fdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JYWRhcHRlci0+bnVtX3ZsYW5zLS07CiAJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDA7Ci0KIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxhbl9ncnAsIHZpZCwgTlVMTCk7Ci0JYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKKwlhZGFwdGVyLT52bGFuc19hZGRlZC0tOworCWlmIChhZGFwdGVyLT52bGFuc19hZGRlZCA8PSBhZGFwdGVyLT5tYXhfdmxhbnMpCisJCWJlX3ZpZF9jb25maWcoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNTY1LDE0ICs1NzUsMTUgQEAKIAl9CiAKIAkvKiBFbmFibGUgbXVsdGljYXN0IHByb21pc2MgaWYgbnVtIGNvbmZpZ3VyZWQgZXhjZWVkcyB3aGF0IHdlIHN1cHBvcnQgKi8KLQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBuZXRkZXYtPm1jX2NvdW50ID4gQkVfTUFYX01DKSB7Ci0JCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwgTlVMTCwgMCwKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAorCSAgICBuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IEJFX01BWF9NQykgeworCQliZV9jbWRfbXVsdGljYXN0X3NldChhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsIE5VTEwsCiAJCQkJJmFkYXB0ZXItPm1jX2NtZF9tZW0pOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JYmVfY21kX211bHRpY2FzdF9zZXQoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCBuZXRkZXYtPm1jX2xpc3QsCi0JCW5ldGRldi0+bWNfY291bnQsICZhZGFwdGVyLT5tY19jbWRfbWVtKTsKKwliZV9jbWRfbXVsdGljYXN0X3NldChhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsIG5ldGRldiwKKwkJJmFkYXB0ZXItPm1jX2NtZF9tZW0pOwogZG9uZToKIAlyZXR1cm47CiB9CkBAIC02MDcsNiArNjE4LDcgQEAKIAlzdGF0cy0+YmVfcnhfY29tcGwrKzsKIAlzdGF0cy0+YmVfcnhfZnJhZ3MgKz0gbnVtZnJhZ3M7CiAJc3RhdHMtPmJlX3J4X2J5dGVzICs9IHBrdHNpemU7CisJc3RhdHMtPmJlX3J4X3BrdHMrKzsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGRvX3BrdF9jc3VtKHN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3AsIGJvb2wgY3NvKQpAQCAtNjM0LDkgKzY0NiwxMSBAQAogCXJ4X3BhZ2VfaW5mbyA9ICZhZGFwdGVyLT5yeF9vYmoucGFnZV9pbmZvX3RibFtmcmFnX2lkeF07CiAJQlVHX09OKCFyeF9wYWdlX2luZm8tPnBhZ2UpOwogCi0JaWYgKHJ4X3BhZ2VfaW5mby0+bGFzdF9wYWdlX3VzZXIpCisJaWYgKHJ4X3BhZ2VfaW5mby0+bGFzdF9wYWdlX3VzZXIpIHsKIAkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLAogCQkJYWRhcHRlci0+YmlnX3BhZ2Vfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhfcGFnZV9pbmZvLT5sYXN0X3BhZ2VfdXNlciA9IGZhbHNlOworCX0KIAogCWF0b21pY19kZWMoJnJ4cS0+dXNlZCk7CiAJcmV0dXJuIHJ4X3BhZ2VfaW5mbzsKQEAgLTY2NiwxNyArNjgwLDE3IEBACiAgKiBpbmRpY2F0ZWQgYnkgcnhjcC4KICAqLwogc3RhdGljIHZvaWQgc2tiX2ZpbGxfcnhfZGF0YShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwLAorCQkJdTE2IG51bV9yY3ZkKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CiAJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcGFnZV9pbmZvOwotCXUxNiByeHFfaWR4LCBpLCBudW1fcmN2ZCwgajsKKwl1MTYgcnhxX2lkeCwgaSwgajsKIAl1MzIgcGt0c2l6ZSwgaGRyX2xlbiwgY3Vycl9mcmFnX2xlbiwgc2l6ZTsKIAl1OCAqc3RhcnQ7CiAKIAlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOwogCXBrdHNpemUgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgcGt0c2l6ZSwgcnhjcCk7Ci0JbnVtX3JjdmQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbnVtZnJhZ3MsIHJ4Y3ApOwogCiAJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCByeHFfaWR4KTsKIApAQCAtNzA0LDcgKzcxOCw3IEBACiAJCXNrYi0+ZGF0YV9sZW4gPSBjdXJyX2ZyYWdfbGVuIC0gaGRyX2xlbjsKIAkJc2tiLT50YWlsICs9IGhkcl9sZW47CiAJfQotCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJcGFnZV9pbmZvLT5wYWdlID0gTlVMTDsKIAogCWlmIChwa3RzaXplIDw9IHJ4X2ZyYWdfc2l6ZSkgewogCQlCVUdfT04obnVtX3JjdmQgIT0gMSk7CkBAIC03MzcsNyArNzUxLDcgQEAKIAkJc2tiLT5sZW4gKz0gY3Vycl9mcmFnX2xlbjsKIAkJc2tiLT5kYXRhX2xlbiArPSBjdXJyX2ZyYWdfbGVuOwogCi0JCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJCXBhZ2VfaW5mby0+cGFnZSA9IE5VTEw7CiAJfQogCUJVR19PTihqID4gTUFYX1NLQl9GUkFHUyk7CiAKQEAgLTc1MiwyNSArNzY2LDIzIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgdmxhbmYsIHZpZDsKKwl1MTYgbnVtX3JjdmQ7CiAJdTggdnRtOwogCi0JdmxhbmYgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRwLCByeGNwKTsKLQl2dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRtLCByeGNwKTsKLQotCS8qIHZsYW5mIGNvdWxkIGJlIHdyb25nbHkgc2V0IGluIHNvbWUgY2FyZHMuCi0JICogaWdub3JlIGlmIHZ0bSBpcyBub3Qgc2V0ICovCi0JaWYgKChhZGFwdGVyLT5jYXAgJiAweDQwMCkgJiYgIXZ0bSkKLQkJdmxhbmYgPSAwOworCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKKwkvKiBJcyBpdCBhIGZsdXNoIGNvbXBsIHRoYXQgaGFzIG5vIGRhdGEgKi8KKwlpZiAodW5saWtlbHkobnVtX3JjdmQgPT0gMCkpCisJCXJldHVybjsKIAogCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oYWRhcHRlci0+bmV0ZGV2LCBCRV9IRFJfTEVOKTsKLQlpZiAoIXNrYikgeworCWlmICh1bmxpa2VseSghc2tiKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgInNrYiBhbGxvYyBmYWlsZWRcbiIpOwogCQliZV9yeF9jb21wbF9kaXNjYXJkKGFkYXB0ZXIsIHJ4Y3ApOwogCQlyZXR1cm47CiAJfQogCi0Jc2tiX2ZpbGxfcnhfZGF0YShhZGFwdGVyLCBza2IsIHJ4Y3ApOworCXNrYl9maWxsX3J4X2RhdGEoYWRhcHRlciwgc2tiLCByeGNwLCBudW1fcmN2ZCk7CiAKIAlpZiAoZG9fcGt0X2NzdW0ocnhjcCwgYWRhcHRlci0+cnhfY3N1bSkpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKQEAgLTc4MSw4ICs3OTMsMTYgQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwdGVyLT5uZXRkZXYpOwogCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCi0JaWYgKHZsYW5mKSB7Ci0JCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+bnVtX3ZsYW5zID09IDApIHsKKwl2bGFuZiA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2dHAsIHJ4Y3ApOworCXZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2dG0sIHJ4Y3ApOworCisJLyogdmxhbmYgY291bGQgYmUgd3JvbmdseSBzZXQgaW4gc29tZSBjYXJkcy4KKwkgKiBpZ25vcmUgaWYgdnRtIGlzIG5vdCBzZXQgKi8KKwlpZiAoKGFkYXB0ZXItPmNhcCAmIDB4NDAwKSAmJiAhdnRtKQorCQl2bGFuZiA9IDA7CisKKwlpZiAodW5saWtlbHkodmxhbmYpKSB7CisJCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+dmxhbnNfYWRkZWQgPT0gMCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTgwOSw2ICs4MjksMTAgQEAKIAl1OCB2dG07CiAKIAludW1fcmN2ZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBudW1mcmFncywgcnhjcCk7CisJLyogSXMgaXQgYSBmbHVzaCBjb21wbCB0aGF0IGhhcyBubyBkYXRhICovCisJaWYgKHVubGlrZWx5KG51bV9yY3ZkID09IDApKQorCQlyZXR1cm47CisKIAlwa3Rfc2l6ZSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBwa3RzaXplLCByeGNwKTsKIAl2bGFuZiA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2dHAsIHJ4Y3ApOwogCXJ4cV9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgZnJhZ25keCwgcnhjcCk7CkBAIC04NjIsNyArODg2LDcgQEAKIAkJdmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZsYW5fdGFnLCByeGNwKTsKIAkJdmlkID0gYmUxNl90b19jcHUodmlkKTsKIAotCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPm51bV92bGFucyA9PSAwKQorCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPnZsYW5zX2FkZGVkID09IDApCiAJCQlyZXR1cm47CiAKIAkJdmxhbl9ncm9fZnJhZ3MoJmVxX29iai0+bmFwaSwgYWRhcHRlci0+dmxhbl9ncnAsIHZpZCk7CkBAIC0xMTA0LDYgKzExMjgsOSBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CiAJc3RydWN0IGJlX2V0aF90eF9jb21wbCAqdHhjcDsKIAl1MTYgZW5kX2lkeCwgY21wbCA9IDAsIHRpbWVvID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNlbnRfc2ticyA9IGFkYXB0ZXItPnR4X29iai5zZW50X3NrYl9saXN0OworCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKKwlib29sIGR1bW15X3dyYjsKIAogCS8qIFdhaXQgZm9yIGEgbWF4IG9mIDIwMG1zIGZvciBhbGwgdGhlIHR4LWNvbXBsZXRpb25zIHRvIGFycml2ZS4gKi8KIAlkbyB7CkBAIC0xMTI3LDYgKzExNTQsMTUgQEAKIAlpZiAoYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpCiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVkIHBlbmRpbmcgdHgtY29tcGxldGlvbnNcbiIsCiAJCQlhdG9taWNfcmVhZCgmdHhxLT51c2VkKSk7CisKKwkvKiBmcmVlIHBvc3RlZCB0eCBmb3Igd2hpY2ggY29tcGxzIHdpbGwgbmV2ZXIgYXJyaXZlICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKSB7CisJCXNlbnRfc2tiID0gc2VudF9za2JzW3R4cS0+dGFpbF07CisJCWVuZF9pZHggPSB0eHEtPnRhaWw7CisJCWluZGV4X2FkdigmZW5kX2lkeCwKKwkJCXdyYl9jbnRfZm9yX3NrYihzZW50X3NrYiwgJmR1bW15X3dyYikgLSAxLCB0eHEtPmxlbik7CisJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBiZV9tY2NfcXVldWVzX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xMjU5LDYgKzEyOTUsMTEgQEAKIAlxID0gJmFkYXB0ZXItPnJ4X29iai5xOwogCWlmIChxLT5jcmVhdGVkKSB7CiAJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfUlhRKTsKKworCQkvKiBBZnRlciB0aGUgcnhxIGlzIGludmFsaWRhdGVkLCB3YWl0IGZvciBhIGdyYWNlIHRpbWUKKwkJICogb2YgMW1zIGZvciBhbGwgZG1hIHRvIGVuZCBhbmQgdGhlIGZsdXNoIGNvbXBsIHRvIGFycml2ZQorCQkgKi8KKwkJbWRlbGF5KDEpOwogCQliZV9yeF9xX2NsZWFuKGFkYXB0ZXIpOwogCX0KIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwpAQCAtMTQyOCwyMyArMTQ2OSwzOCBAQAogCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKLXZvaWQgYmVfcHJvY2Vzc190eChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKKy8qIEFzIFRYIGFuZCBNQ0Mgc2hhcmUgdGhlIHNhbWUgRVEgY2hlY2sgZm9yIGJvdGggVFggYW5kIE1DQyBjb21wbGV0aW9ucy4KKyAqIEZvciBUWC9NQ0Mgd2UgZG9uJ3QgaG9ub3VyIGJ1ZGdldDsgY29uc3VtZSBldmVyeXRoaW5nCisgKi8KK3N0YXRpYyBpbnQgYmVfcG9sbF90eF9tY2Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogeworCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiZV9lcV9vYmosIG5hcGkpOworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0KKwkJY29udGFpbmVyX29mKHR4X2VxLCBzdHJ1Y3QgYmVfYWRhcHRlciwgdHhfZXEpOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4X2NxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKIAlzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICp0eGNwOwotCXUzMiBudW1fY21wbCA9IDA7CisJaW50IHR4X2NvbXBsID0gMCwgbWNjX2NvbXBsLCBzdGF0dXMgPSAwOwogCXUxNiBlbmRfaWR4OwogCiAJd2hpbGUgKCh0eGNwID0gYmVfdHhfY29tcGxfZ2V0KHR4X2NxKSkpIHsKIAkJZW5kX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLAotCQkJCQl3cmJfaW5kZXgsIHR4Y3ApOworCQkJCXdyYl9pbmRleCwgdHhjcCk7CiAJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7Ci0JCW51bV9jbXBsKys7CisJCXR4X2NvbXBsKys7CiAJfQogCi0JaWYgKG51bV9jbXBsKSB7Ci0JCWJlX2NxX25vdGlmeShhZGFwdGVyLCB0eF9jcS0+aWQsIHRydWUsIG51bV9jbXBsKTsKKwltY2NfY29tcGwgPSBiZV9wcm9jZXNzX21jYyhhZGFwdGVyLCAmc3RhdHVzKTsKKworCW5hcGlfY29tcGxldGUobmFwaSk7CisKKwlpZiAobWNjX2NvbXBsKSB7CisJCXN0cnVjdCBiZV9tY2Nfb2JqICptY2Nfb2JqID0gJmFkYXB0ZXItPm1jY19vYmo7CisJCWJlX2NxX25vdGlmeShhZGFwdGVyLCBtY2Nfb2JqLT5jcS5pZCwgdHJ1ZSwgbWNjX2NvbXBsKTsKKwl9CisKKwlpZiAodHhfY29tcGwpIHsKKwkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIGFkYXB0ZXItPnR4X29iai5jcS5pZCwgdHJ1ZSwgdHhfY29tcGwpOwogCiAJCS8qIEFzIFR4IHdyYnMgaGF2ZSBiZWVuIGZyZWVkIHVwLCB3YWtlIHVwIG5ldGRldiBxdWV1ZSBpZgogCQkgKiBpdCB3YXMgc3RvcHBlZCBkdWUgdG8gbGFjayBvZiB0eCB3cmJzLgpAQCAtMTQ1NSwyNCArMTUxMSw4IEBACiAJCX0KIAogCQlkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9ldmVudHMrKzsKLQkJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfY29tcGwgKz0gbnVtX2NtcGw7CisJCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3R4X2NvbXBsICs9IHR4X2NvbXBsOwogCX0KLX0KLQotLyogQXMgVFggYW5kIE1DQyBzaGFyZSB0aGUgc2FtZSBFUSBjaGVjayBmb3IgYm90aCBUWCBhbmQgTUNDIGNvbXBsZXRpb25zLgotICogRm9yIFRYL01DQyB3ZSBkb24ndCBob25vdXIgYnVkZ2V0OyBjb25zdW1lIGV2ZXJ5dGhpbmcKLSAqLwotc3RhdGljIGludCBiZV9wb2xsX3R4X21jYyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJlX2VxX29iaiwgbmFwaSk7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPQotCQljb250YWluZXJfb2YodHhfZXEsIHN0cnVjdCBiZV9hZGFwdGVyLCB0eF9lcSk7Ci0KLQluYXBpX2NvbXBsZXRlKG5hcGkpOwotCi0JYmVfcHJvY2Vzc190eChhZGFwdGVyKTsKLQotCWJlX3Byb2Nlc3NfbWNjKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xNjQxLDYgKzE2ODEsOSBAQAogCS8qIFJ4IGNvbXBsIHF1ZXVlIG1heSBiZSBpbiB1bmFybWVkIHN0YXRlOyByZWFybSBpdCAqLwogCWJlX2NxX25vdGlmeShhZGFwdGVyLCBhZGFwdGVyLT5yeF9vYmouY3EuaWQsIHRydWUsIDApOwogCisJLyogTm93IHRoYXQgaW50ZXJydXB0cyBhcmUgb24gd2UgY2FuIHByb2Nlc3MgYXN5bmMgbWNjICovCisJYmVfYXN5bmNfbWNjX2VuYWJsZShhZGFwdGVyKTsKKwogCXN0YXR1cyA9IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShhZGFwdGVyLCAmbGlua191cCwgJm1hY19zcGVlZCwKIAkJCSZsaW5rX3NwZWVkKTsKIAlpZiAoc3RhdHVzKQpAQCAtMTc2Niw2ICsxODA5LDggQEAKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+d29yayk7CiAKKwliZV9hc3luY19tY2NfZGlzYWJsZShhZGFwdGVyKTsKKwogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCWFkYXB0ZXItPmxpbmtfdXAgPSBmYWxzZTsKQEAgLTE3OTgsMTUgKzE4NDMsMTkgQEAKIAkJCQkiSCBESVJFQ1RPUlkgKioqICJ9OwogCiBzdGF0aWMgYm9vbCBiZV9mbGFzaF9yZWRib290KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJY29uc3QgdTggKnApCisJCQljb25zdCB1OCAqcCwgdTMyIGltZ19zdGFydCwgaW50IGltYWdlX3NpemUsCisJCQlpbnQgaGRyX3NpemUpCiB7CiAJdTMyIGNyY19vZmZzZXQ7CiAJdTggZmxhc2hlZF9jcmNbNF07CiAJaW50IHN0YXR1czsKLQljcmNfb2Zmc2V0ID0gRkxBU0hfUkVEQk9PVF9TVEFSVCArIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkUgLSA0Ci0JCQkrIHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIpIC0gMzIqMTAyNDsKKworCWNyY19vZmZzZXQgPSBoZHJfc2l6ZSArIGltZ19zdGFydCArIGltYWdlX3NpemUgLSA0OworCiAJcCArPSBjcmNfb2Zmc2V0OwotCXN0YXR1cyA9IGJlX2NtZF9nZXRfZmxhc2hfY3JjKGFkYXB0ZXIsIGZsYXNoZWRfY3JjKTsKKworCXN0YXR1cyA9IGJlX2NtZF9nZXRfZmxhc2hfY3JjKGFkYXB0ZXIsIGZsYXNoZWRfY3JjLAorCQkJKGltZ19zdGFydCArIGltYWdlX3NpemUgLSA0KSk7CiAJaWYgKHN0YXR1cykgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCSJjb3VsZCBub3QgZ2V0IGNyYyBmcm9tIGZsYXNoLCBub3QgZmxhc2hpbmcgcmVkYm9vdFxuIik7CkBAIC0xODE4LDEwMiArMTg2NywxMjQgQEAKIAkJcmV0dXJuIGZhbHNlOwogCWVsc2UKIAkJcmV0dXJuIHRydWU7Ci0KIH0KIAotc3RhdGljIGludCBiZV9mbGFzaF9pbWFnZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKK3N0YXRpYyBpbnQgYmVfZmxhc2hfZGF0YShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCi0JCQlzdHJ1Y3QgYmVfZG1hX21lbSAqZmxhc2hfY21kLCB1MzIgZmxhc2hfdHlwZSkKKwkJCXN0cnVjdCBiZV9kbWFfbWVtICpmbGFzaF9jbWQsIGludCBudW1fb2ZfaW1hZ2VzKQorCiB7Ci0JaW50IHN0YXR1czsKLQl1MzIgZmxhc2hfb3AsIGltYWdlX29mZnNldCA9IDAsIHRvdGFsX2J5dGVzLCBpbWFnZV9zaXplID0gMDsKKwlpbnQgc3RhdHVzID0gMCwgaSwgZmlsZWhkcl9zaXplID0gMDsKKwl1MzIgdG90YWxfYnl0ZXMgPSAwLCBmbGFzaF9vcDsKIAlpbnQgbnVtX2J5dGVzOwogCWNvbnN0IHU4ICpwID0gZnctPmRhdGE7CiAJc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSAqcmVxID0gZmxhc2hfY21kLT52YTsKKwlzdHJ1Y3QgZmxhc2hfY29tcCAqcGZsYXNoY29tcDsKIAotCXN3aXRjaCAoZmxhc2hfdHlwZSkgewotCWNhc2UgRkxBU0hST01fVFlQRV9JU0NTSV9BQ1RJVkU6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlQ7Ci0JCWltYWdlX3NpemUgPSBGTEFTSF9JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0JBQ0tVUDoKLQkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0FDVElWRToKLQkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0JBQ0tVUDoKLQkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlQ7Ci0JCWltYWdlX3NpemUgPSBGTEFTSF9JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSFJPTV9UWVBFX0JJT1M6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlQ7Ci0JCWltYWdlX3NpemUgPSBGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFOwotCQlicmVhazsKLQljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9CSU9TOgotCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9GQ29FX0JJT1NfU1RBUlQ7Ci0JCWltYWdlX3NpemUgPSBGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFOwotCQlicmVhazsKLQljYXNlIEZMQVNIUk9NX1RZUEVfUFhFX0JJT1M6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX1BYRV9CSU9TX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSFJPTV9UWVBFX1JFREJPT1Q6Ci0JCWlmICghYmVfZmxhc2hfcmVkYm9vdChhZGFwdGVyLCBmdy0+ZGF0YSkpCi0JCQlyZXR1cm4gMDsKLQkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfUkVEQk9PVF9JU01fU1RBUlQ7Ci0JCWltYWdlX3NpemUgPSBGTEFTSF9SRURCT09UX0lNQUdFX01BWF9TSVpFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKKwlzdHJ1Y3QgZmxhc2hfY29tcCBnZW4zX2ZsYXNoX3R5cGVzWzhdID0geworCQl7IEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzMsIElNR19UWVBFX0lTQ1NJX0FDVElWRSwKKwkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2czfSwKKwkJeyBGTEFTSF9SRURCT09UX1NUQVJUX2czLCBJTUdfVFlQRV9SRURCT09ULAorCQkJRkxBU0hfUkVEQk9PVF9JTUFHRV9NQVhfU0laRV9nM30sCisJCXsgRkxBU0hfaVNDU0lfQklPU19TVEFSVF9nMywgSU1HX1RZUEVfQklPUywKKwkJCUZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzN9LAorCQl7IEZMQVNIX1BYRV9CSU9TX1NUQVJUX2czLCBJTUdfVFlQRV9QWEVfQklPUywKKwkJCUZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzN9LAorCQl7IEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMywgSU1HX1RZUEVfRkNPRV9CSU9TLAorCQkJRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nM30sCisJCXsgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUX2czLCBJTUdfVFlQRV9JU0NTSV9CQUNLVVAsCisJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nM30sCisJCXsgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUX2czLCBJTUdfVFlQRV9GQ09FX0ZXX0FDVElWRSwKKwkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2czfSwKKwkJeyBGTEFTSF9GQ29FX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMywgSU1HX1RZUEVfRkNPRV9GV19CQUNLVVAsCisJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nM30KKwl9OworCXN0cnVjdCBmbGFzaF9jb21wIGdlbjJfZmxhc2hfdHlwZXNbOF0gPSB7CisJCXsgRkxBU0hfaVNDU0lfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMiwgSU1HX1RZUEVfSVNDU0lfQUNUSVZFLAorCQkJRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzJ9LAorCQl7IEZMQVNIX1JFREJPT1RfU1RBUlRfZzIsIElNR19UWVBFX1JFREJPT1QsCisJCQlGTEFTSF9SRURCT09UX0lNQUdFX01BWF9TSVpFX2cyfSwKKwkJeyBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUX2cyLCBJTUdfVFlQRV9CSU9TLAorCQkJRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMn0sCisJCXsgRkxBU0hfUFhFX0JJT1NfU1RBUlRfZzIsIElNR19UWVBFX1BYRV9CSU9TLAorCQkJRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMn0sCisJCXsgRkxBU0hfRkNvRV9CSU9TX1NUQVJUX2cyLCBJTUdfVFlQRV9GQ09FX0JJT1MsCisJCQlGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFX2cyfSwKKwkJeyBGTEFTSF9pU0NTSV9CQUNLVVBfSU1BR0VfU1RBUlRfZzIsIElNR19UWVBFX0lTQ1NJX0JBQ0tVUCwKKwkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2cyfSwKKwkJeyBGTEFTSF9GQ29FX1BSSU1BUllfSU1BR0VfU1RBUlRfZzIsIElNR19UWVBFX0ZDT0VfRldfQUNUSVZFLAorCQkJRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzJ9LAorCQl7IEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUX2cyLCBJTUdfVFlQRV9GQ09FX0ZXX0JBQ0tVUCwKKwkJCSBGTEFTSF9JTUFHRV9NQVhfU0laRV9nMn0KKwl9OworCisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgeworCQlwZmxhc2hjb21wID0gZ2VuM19mbGFzaF90eXBlczsKKwkJZmlsZWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyk7CisJfSBlbHNlIHsKKwkJcGZsYXNoY29tcCA9IGdlbjJfZmxhc2hfdHlwZXM7CisJCWZpbGVoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzIpOwogCX0KLQotCXAgKz0gc2l6ZW9mKHN0cnVjdCBmbGFzaF9maWxlX2hkcikgKyBpbWFnZV9vZmZzZXQ7Ci0JaWYgKHAgKyBpbWFnZV9zaXplID4gZnctPmRhdGEgKyBmdy0+c2l6ZSkKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgocGZsYXNoY29tcFtpXS5vcHR5cGUgPT0gSU1HX1RZUEVfUkVEQk9PVCkgJiYKKwkJCSghYmVfZmxhc2hfcmVkYm9vdChhZGFwdGVyLCBmdy0+ZGF0YSwKKwkJCSBwZmxhc2hjb21wW2ldLm9mZnNldCwgcGZsYXNoY29tcFtpXS5zaXplLAorCQkJIGZpbGVoZHJfc2l6ZSkpKQorCQkJY29udGludWU7CisJCXAgPSBmdy0+ZGF0YTsKKwkJcCArPSBmaWxlaGRyX3NpemUgKyBwZmxhc2hjb21wW2ldLm9mZnNldAorCQkJKyAobnVtX29mX2ltYWdlcyAqIHNpemVvZihzdHJ1Y3QgaW1hZ2VfaGRyKSk7CisJaWYgKHAgKyBwZmxhc2hjb21wW2ldLnNpemUgPiBmdy0+ZGF0YSArIGZ3LT5zaXplKQogCQlyZXR1cm4gLTE7CisJdG90YWxfYnl0ZXMgPSBwZmxhc2hjb21wW2ldLnNpemU7CisJCXdoaWxlICh0b3RhbF9ieXRlcykgeworCQkJaWYgKHRvdGFsX2J5dGVzID4gMzIqMTAyNCkKKwkJCQludW1fYnl0ZXMgPSAzMioxMDI0OworCQkJZWxzZQorCQkJCW51bV9ieXRlcyA9IHRvdGFsX2J5dGVzOworCQkJdG90YWxfYnl0ZXMgLT0gbnVtX2J5dGVzOwogCi0JdG90YWxfYnl0ZXMgPSBpbWFnZV9zaXplOwotCi0Jd2hpbGUgKHRvdGFsX2J5dGVzKSB7Ci0JCWlmICh0b3RhbF9ieXRlcyA+IDMyKjEwMjQpCi0JCQludW1fYnl0ZXMgPSAzMioxMDI0OwotCQllbHNlCi0JCQludW1fYnl0ZXMgPSB0b3RhbF9ieXRlczsKLQkJdG90YWxfYnl0ZXMgLT0gbnVtX2J5dGVzOwotCi0JCWlmICghdG90YWxfYnl0ZXMpCi0JCQlmbGFzaF9vcCA9IEZMQVNIUk9NX09QRVJfRkxBU0g7Ci0JCWVsc2UKLQkJCWZsYXNoX29wID0gRkxBU0hST01fT1BFUl9TQVZFOwotCQltZW1jcHkocmVxLT5wYXJhbXMuZGF0YV9idWYsIHAsIG51bV9ieXRlcyk7Ci0JCXAgKz0gbnVtX2J5dGVzOwotCQlzdGF0dXMgPSBiZV9jbWRfd3JpdGVfZmxhc2hyb20oYWRhcHRlciwgZmxhc2hfY21kLAotCQkJCWZsYXNoX3R5cGUsIGZsYXNoX29wLCBudW1fYnl0ZXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkiY21kIHRvIHdyaXRlIHRvIGZsYXNoIHJvbSBmYWlsZWQuIHR5cGUvb3AgJWQvJWRcbiIsCi0JCQlmbGFzaF90eXBlLCBmbGFzaF9vcCk7Ci0JCQlyZXR1cm4gLTE7CisJCQlpZiAoIXRvdGFsX2J5dGVzKQorCQkJCWZsYXNoX29wID0gRkxBU0hST01fT1BFUl9GTEFTSDsKKwkJCWVsc2UKKwkJCQlmbGFzaF9vcCA9IEZMQVNIUk9NX09QRVJfU0FWRTsKKwkJCW1lbWNweShyZXEtPnBhcmFtcy5kYXRhX2J1ZiwgcCwgbnVtX2J5dGVzKTsKKwkJCXAgKz0gbnVtX2J5dGVzOworCQkJc3RhdHVzID0gYmVfY21kX3dyaXRlX2ZsYXNocm9tKGFkYXB0ZXIsIGZsYXNoX2NtZCwKKwkJCQlwZmxhc2hjb21wW2ldLm9wdHlwZSwgZmxhc2hfb3AsIG51bV9ieXRlcyk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiY21kIHRvIHdyaXRlIHRvIGZsYXNoIHJvbSBmYWlsZWQuXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl5aWVsZCgpOwogCQl9Ci0JCXlpZWxkKCk7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X3VmaWdlbl90eXBlKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMiAqZmhkcikKK3sKKwlpZiAoZmhkciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoZmhkci0+YnVpbGRbMF0gPT0gJzMnKQorCQlyZXR1cm4gQkVfR0VOMzsKKwllbHNlIGlmIChmaGRyLT5idWlsZFswXSA9PSAnMicpCisJCXJldHVybiBCRV9HRU4yOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIGludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZnVuYykKIHsKIAljaGFyIGZ3X2ZpbGVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUVdOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0Jc3RydWN0IGZsYXNoX2ZpbGVfaGRyICpmaGRyOwotCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm8gKmZzZWMgPSBOVUxMOworCXN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMiAqZmhkcjsKKwlzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMgKmZoZHIzOworCXN0cnVjdCBpbWFnZV9oZHIgKmltZ19oZHJfcHRyID0gTlVMTDsKIAlzdHJ1Y3QgYmVfZG1hX21lbSBmbGFzaF9jbWQ7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCBpID0gMDsKIAljb25zdCB1OCAqcDsKLQlib29sIGVudHJ5X2ZvdW5kID0gZmFsc2U7Ci0JaW50IGZsYXNoX3R5cGU7CiAJY2hhciBmd192ZXJbRldfVkVSX0xFTl07CiAJY2hhciBmd19jZmc7CiAKQEAgLTE5MzEsMzQgKzIwMDIsOSBAQAogCQlnb3RvIGZ3X2V4aXQ7CiAKIAlwID0gZnctPmRhdGE7Ci0JZmhkciA9IChzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIgKikgcDsKLQlpZiAobWVtY21wKGZoZHItPnNpZ24sIEZXX0ZJTEVfSERSX1NJR04sIHN0cmxlbihGV19GSUxFX0hEUl9TSUdOKSkpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJIkZpcm13YXJlKCVzKSBsb2FkIGVycm9yIChzaWduYXR1cmUgZGlkIG5vdCBtYXRjaClcbiIsCi0JCQkJZndfZmlsZSk7Ci0JCXN0YXR1cyA9IC0xOwotCQlnb3RvIGZ3X2V4aXQ7Ci0JfQotCisJZmhkciA9IChzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzIgKikgcDsKIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmxhc2hpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZSk7CiAKLQlwICs9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIpOwotCXdoaWxlIChwIDwgKGZ3LT5kYXRhICsgZnctPnNpemUpKSB7Ci0JCWZzZWMgPSAoc3RydWN0IGZsYXNoX3NlY3Rpb25faW5mbyAqKXA7Ci0JCWlmICghbWVtY21wKGZsYXNoX2Nvb2tpZSwgZnNlYy0+Y29va2llLCBzaXplb2YoZmxhc2hfY29va2llKSkpIHsKLQkJCWVudHJ5X2ZvdW5kID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXAgKz0gMzI7Ci0JfQotCi0JaWYgKCFlbnRyeV9mb3VuZCkgewotCQlzdGF0dXMgPSAtMTsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJIkZsYXNoIGNvb2tpZSBub3QgZm91bmQgaW4gZmlybXdhcmUgaW1hZ2VcbiIpOwotCQlnb3RvIGZ3X2V4aXQ7Ci0JfQotCiAJZmxhc2hfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSkgKyAzMioxMDI0OwogCWZsYXNoX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGZsYXNoX2NtZC5zaXplLAogCQkJCQkmZmxhc2hfY21kLmRtYSk7CkBAIC0xOTY5LDEyICsyMDE1LDI2IEBACiAJCWdvdG8gZndfZXhpdDsKIAl9CiAKLQlmb3IgKGZsYXNoX3R5cGUgPSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0FDVElWRTsKLQkJZmxhc2hfdHlwZSA8PSBGTEFTSFJPTV9UWVBFX0ZDT0VfRldfQkFDS1VQOyBmbGFzaF90eXBlKyspIHsKLQkJc3RhdHVzID0gYmVfZmxhc2hfaW1hZ2UoYWRhcHRlciwgZncsICZmbGFzaF9jbWQsCi0JCQkJZmxhc2hfdHlwZSk7Ci0JCWlmIChzdGF0dXMpCi0JCQlicmVhazsKKwlpZiAoKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgJiYKKwkJCShnZXRfdWZpZ2VuX3R5cGUoZmhkcikgPT0gQkVfR0VOMykpIHsKKwkJZmhkcjMgPSAoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czICopIGZ3LT5kYXRhOworCQlmb3IgKGkgPSAwOyBpIDwgZmhkcjMtPm51bV9pbWdzOyBpKyspIHsKKwkJCWltZ19oZHJfcHRyID0gKHN0cnVjdCBpbWFnZV9oZHIgKikgKGZ3LT5kYXRhICsKKwkJCQkJKHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMpICsKKwkJCQkJaSAqIHNpemVvZihzdHJ1Y3QgaW1hZ2VfaGRyKSkpOworCQkJaWYgKGltZ19oZHJfcHRyLT5pbWFnZWlkID09IDEpIHsKKwkJCQlzdGF0dXMgPSBiZV9mbGFzaF9kYXRhKGFkYXB0ZXIsIGZ3LAorCQkJCQkJJmZsYXNoX2NtZCwgZmhkcjMtPm51bV9pbWdzKTsKKwkJCX0KKworCQl9CisJfSBlbHNlIGlmICgoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKSAmJgorCQkJKGdldF91ZmlnZW5fdHlwZShmaGRyKSA9PSBCRV9HRU4yKSkgeworCQlzdGF0dXMgPSBiZV9mbGFzaF9kYXRhKGFkYXB0ZXIsIGZ3LCAmZmxhc2hfY21kLCAwKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiVUZJIGFuZCBJbnRlcmZhY2UgYXJlIG5vdCBjb21wYXRpYmxlIGZvciBmbGFzaGluZ1xuIik7CisJCXN0YXR1cyA9IC0xOwogCX0KIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZmxhc2hfY21kLnNpemUsIGZsYXNoX2NtZC52YSwKQEAgLTIxMzYsNiArMjE5Niw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOwogCisJcGNpX3NhdmVfc3RhdGUoYWRhcHRlci0+cGRldik7CiAJcmV0dXJuIDA7CiAKIGZyZWVfbWJveDoKQEAgLTIyMjIsNiArMjI4MywxMSBAQAogCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCBtYWMsIEVUSF9BTEVOKTsKIAltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5wZXJtX2FkZHIsIG1hYywgRVRIX0FMRU4pOwogCisJaWYgKGFkYXB0ZXItPmNhcCAmIDB4NDAwKQorCQlhZGFwdGVyLT5tYXhfdmxhbnMgPSBCRV9OVU1fVkxBTlNfU1VQUE9SVEVELzQ7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfdmxhbnMgPSBCRV9OVU1fVkxBTlNfU1VQUE9SVEVEOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOTQsMTMgKzI0NjAsMTIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBBbiBGTFIgd2lsbCBzdG9wIEJFIGZyb20gRE1BaW5nIGFueSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT53b2wpCisJCWJlX3NldHVwX3dvbChhZGFwdGVyLCB0cnVlKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybjsKK30KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYmVfZWVoX2Vycl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAgYWRhcHRlci0+bmV0ZGV2OworCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRUVIIGVycm9yIGRldGVjdGVkXG4iKTsKKworCWFkYXB0ZXItPmVlaF9lcnIgPSB0cnVlOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlydG5sX2xvY2soKTsKKwkJYmVfY2xvc2UobmV0ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisJYmVfY2xlYXIoYWRhcHRlcik7CisKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBiZV9lZWhfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHN0YXR1czsKKworCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJFRUggcmVzZXRcbiIpOworCWFkYXB0ZXItPmVlaF9lcnIgPSBmYWxzZTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qIENoZWNrIGlmIGNhcmQgaXMgb2sgYW5kIGZ3IGlzIHJlYWR5ICovCisJc3RhdHVzID0gYmVfY21kX1BPU1QoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCitzdGF0aWMgdm9pZCBiZV9lZWhfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAgYWRhcHRlci0+bmV0ZGV2OworCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkVFSCByZXN1bWVcbiIpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwkvKiB0ZWxsIGZ3IHdlJ3JlIHJlYWR5IHRvIGZpcmUgY21kcyAqLworCXN0YXR1cyA9IGJlX2NtZF9md19pbml0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJc3RhdHVzID0gYmVfc2V0dXAoYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXN0YXR1cyA9IGJlX29wZW4obmV0ZGV2KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZXJyOworCX0KKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJcmV0dXJuOworZXJyOgorCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkVFSCByZXN1bWUgZmFpbGVkXG4iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGJlX2VlaF9oYW5kbGVycyA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBiZV9lZWhfZXJyX2RldGVjdGVkLAorCS5zbG90X3Jlc2V0ID0gYmVfZWVoX3Jlc2V0LAorCS5yZXN1bWUgPSBiZV9lZWhfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJlX2RyaXZlciA9IHsKIAkubmFtZSA9IERSVl9OQU1FLAogCS5pZF90YWJsZSA9IGJlX2Rldl9pZHMsCiAJLnByb2JlID0gYmVfcHJvYmUsCiAJLnJlbW92ZSA9IGJlX3JlbW92ZSwKIAkuc3VzcGVuZCA9IGJlX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGJlX3Jlc3VtZQorCS5yZXN1bWUgPSBiZV9yZXN1bWUsCisJLnNodXRkb3duID0gYmVfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmJlX2VlaF9oYW5kbGVycwogfTsKIAogc3RhdGljIGludCBfX2luaXQgYmVfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCmluZGV4IDBiMjNiYzQuLjU4N2Y5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwpAQCAtODEyLDE2ICs4MTIsMTQgQEAKIHN0YXRpYyB2b2lkIGJmaW5fbWFjX211bHRpY2FzdF9oYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdTMyIGVtYWNfaGFzaGhpLCBlbWFjX2hhc2hsbzsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKLQlpbnQgaTsKIAl1MzIgY3JjOwogCiAJZW1hY19oYXNoaGkgPSBlbWFjX2hhc2hsbyA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJLyogc2tpcCBub24tbXVsdGljYXN0IGFkZHJlc3NlcyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKQEAgLTg2Miw3ICs4NjAsNyBAQAogCQlzeXNjdGwgPSBiZmluX3JlYWRfRU1BQ19PUE1PREUoKTsKIAkJc3lzY3RsIHw9IFBBTTsKIAkJYmZpbl93cml0ZV9FTUFDX09QTU9ERShzeXNjdGwpOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIHNldCB1cCBtdWx0aWNhc3QgaGFzaCB0YWJsZSAqLwogCQlzeXNjdGwgPSBiZmluX3JlYWRfRU1BQ19PUE1PREUoKTsKIAkJc3lzY3RsIHw9IEhNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDliNTg3YzMuLjExOTQ2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXN0cnVjdCBibWFjX2RhdGEgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKwlpbnQgbnVtX2FkZHJzID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJdW5zaWduZWQgc2hvcnQgcnhfY2ZnOwogCWludCBpOwogCkBAIC05ODIsNyArOTgyLDcgQEAKIAogCVhYREVCVUcoKCJibWFjOiBlbnRlciBibWFjX3NldF9tdWx0aWNhc3QsIG5fYWRkcnM9JWRcbiIsIG51bV9hZGRycykpOwogCi0JaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gNjQpKSB7CisJaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQlmb3IgKGk9MDsgaTw0OyBpKyspIGJwLT5oYXNoX3RhYmxlX21hc2tbaV0gPSAweGZmZmY7CiAJCWJtYWNfdXBkYXRlX2hhc2hfdGFibGVfbWFzayhkZXYsIGJwKTsKIAkJcnhfY2ZnID0gYm1hY19yeF9vbihkZXYsIDEsIDApOwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAkJCXJ4X2NmZyA9IGJtYWNfcnhfb24oZGV2LCAwLCAwKTsKIAkJCVhYREVCVUcoKCJibWFjOiBtdWx0aSBkaXNhYmxlZCwgcnhfY2ZnPSUjMDh4XG4iLCByeF9jZmcpKTsKIAkJfSBlbHNlIHsKLQkJCWZvciAoZG1pPWRldi0+bWNfbGlzdDsgZG1pIT1OVUxMOyBkbWk9ZG1pLT5uZXh0KQorCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCiAJCQkJYm1hY19hZGRoYXNoKGJwLCBkbWktPmRtaV9hZGRyKTsKIAkJCWJtYWNfdXBkYXRlX2hhc2hfdGFibGVfbWFzayhkZXYsIGJwKTsKIAkJCXJ4X2NmZyA9IGJtYWNfcnhfb24oZGV2LCAxLCAwKTsKQEAgLTEwMTUsMTMgKzEwMTUsMTMgQEAKIAogc3RhdGljIHZvaWQgYm1hY19zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJY2hhciAqYWRkcnM7CiAJaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgcnhfY2ZnOwogCXUzMiBjcmM7CiAKLQlpZigoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA2NCkpIHsKKwlpZigoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpKSB7CiAJCWJtd3JpdGUoZGV2LCBCSEFTSDAsIDB4ZmZmZik7CiAJCWJtd3JpdGUoZGV2LCBCSEFTSDEsIDB4ZmZmZik7CiAJCWJtd3JpdGUoZGV2LCBCSEFTSDIsIDB4ZmZmZik7CkBAIC0xMDM5LDkgKzEwMzksOCBAQAogCiAJCWZvcihpID0gMDsgaSA8IDQ7IGkrKykgaGFzaF90YWJsZVtpXSA9IDA7CiAKLQkJZm9yKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJCWlmKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNjVkZjFkZS4uMzgxODg3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDIuYzogQnJvYWRjb20gTlgyIG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtOSw2ICs5LDcgQEAKICAqIFdyaXR0ZW4gYnk6IE1pY2hhZWwgQ2hhbiAgKG1jaGFuQGJyb2FkY29tLmNvbSkKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ05JQykgfHwgZGVmaW5lZChDT05GSUdfQ05JQ19NT0RVTEUpCiAjZGVmaW5lIEJDTV9DTklDIDEKQEAgLTU4LDE0ICs1OCwxMyBAQAogI2luY2x1ZGUgImJueDJfZncuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyIgotI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuMyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWMgMDMsIDIwMDkiCi0jZGVmaW5lIEZXX01JUFNfRklMRV8wNgkJImJueDIvYm54Mi1taXBzLTA2LTUuMC4wLmozLmZ3IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMC44IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYiAxNSwgMjAxMCIKKyNkZWZpbmUgRldfTUlQU19GSUxFXzA2CQkiYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZnciCiAjZGVmaW5lIEZXX1JWMlBfRklMRV8wNgkJImJueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3IgotI2RlZmluZSBGV19NSVBTX0ZJTEVfMDkJCSJibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdyIKLSNkZWZpbmUgRldfUlYyUF9GSUxFXzA5X0F4CSJibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3IgotI2RlZmluZSBGV19SVjJQX0ZJTEVfMDkJCSJibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdyIKKyNkZWZpbmUgRldfTUlQU19GSUxFXzA5CQkiYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZnciCisjZGVmaW5lIEZXX1JWMlBfRklMRV8wOV9BeAkiYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZnciCisjZGVmaW5lIEZXX1JWMlBfRklMRV8wOQkJImJueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmoxMC5mdyIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTk4MCwzMyArOTc5LDI3IEBACiB7CiAJaWYgKGJwLT5saW5rX3VwKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oYnAtPmRldik7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlcyBOSUMgJXMgTGluayBpcyBVcCwgIiwgYnAtPmRldi0+bmFtZSwKLQkJICAgICAgIGJueDJfeGNlaXZlcl9zdHIoYnApKTsKLQotCQlwcmludGsoIiVkIE1icHMgIiwgYnAtPmxpbmVfc3BlZWQpOwotCi0JCWlmIChicC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJcHJpbnRrKCJmdWxsIGR1cGxleCIpOwotCQllbHNlCi0JCQlwcmludGsoImhhbGYgZHVwbGV4Iik7CisJCW5ldGRldl9pbmZvKGJwLT5kZXYsICJOSUMgJXMgTGluayBpcyBVcCwgJWQgTWJwcyAlcyBkdXBsZXgiLAorCQkJICAgIGJueDJfeGNlaXZlcl9zdHIoYnApLAorCQkJICAgIGJwLT5saW5lX3NwZWVkLAorCQkJICAgIGJwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIpOwogCiAJCWlmIChicC0+Zmxvd19jdHJsKSB7CiAJCQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9SWCkgewotCQkJCXByaW50aygiLCByZWNlaXZlICIpOworCQkJCXByX2NvbnQoIiwgcmVjZWl2ZSAiKTsKIAkJCQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9UWCkKLQkJCQkJcHJpbnRrKCImIHRyYW5zbWl0ICIpOworCQkJCQlwcl9jb250KCImIHRyYW5zbWl0ICIpOwogCQkJfQogCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKCIsIHRyYW5zbWl0ICIpOworCQkJCXByX2NvbnQoIiwgdHJhbnNtaXQgIik7CiAJCQl9Ci0JCQlwcmludGsoImZsb3cgY29udHJvbCBPTiIpOworCQkJcHJfY29udCgiZmxvdyBjb250cm9sIE9OIik7CiAJCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLQllbHNlIHsKKwkJcHJfY29udCgiXG4iKTsKKwl9IGVsc2UgewogCQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgTklDICVzIExpbmsgaXMgRG93blxuIiwgYnAtPmRldi0+bmFtZSwKLQkJICAgICAgIGJueDJfeGNlaXZlcl9zdHIoYnApKTsKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDICVzIExpbmsgaXMgRG93blxuIiwKKwkJCSAgIGJueDJfeGNlaXZlcl9zdHIoYnApKTsKIAl9CiAKIAlibngyX3JlcG9ydF9md19saW5rKGJwKTsKQEAgLTEyNzgsNyArMTI3MSw3IEBACiAJCWlmIChsb193YXRlciA+PSBicC0+cnhfcmluZ19zaXplKQogCQkJbG9fd2F0ZXIgPSAwOwogCi0JCWhpX3dhdGVyID0gYnAtPnJ4X3Jpbmdfc2l6ZSAvIDQ7CisJCWhpX3dhdGVyID0gbWluX3QoaW50LCBicC0+cnhfcmluZ19zaXplIC8gNCwgbG9fd2F0ZXIgKyAxNik7CiAKIAkJaWYgKGhpX3dhdGVyIDw9IGxvX3dhdGVyKQogCQkJbG9fd2F0ZXIgPSAwOwpAQCAtMjQ4Myw4ICsyNDc2LDcgQEAKIAkvKiBJZiB3ZSB0aW1lZCBvdXQsIGluZm9ybSB0aGUgZmlybXdhcmUgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLiAqLwogCWlmICgodmFsICYgQk5YMl9GV19NU0dfQUNLKSAhPSAobXNnX2RhdGEgJiBCTlgyX0RSVl9NU0dfU0VRKSkgewogCQlpZiAoIXNpbGVudCkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZ3IHN5bmMgdGltZW91dCwgcmVzZXQgY29kZSA9ICIKLQkJCQkJICAgICIleFxuIiwgbXNnX2RhdGEpOworCQkJcHJfZXJyKCJmdyBzeW5jIHRpbWVvdXQsIHJlc2V0IGNvZGUgPSAleFxuIiwgbXNnX2RhdGEpOwogCiAJCW1zZ19kYXRhICY9IH5CTlgyX0RSVl9NU0dfQ09ERTsKIAkJbXNnX2RhdGEgfD0gQk5YMl9EUlZfTVNHX0NPREVfRldfVElNRU9VVDsKQEAgLTI2MDAsOCArMjU5Miw3IEBACiAKIAlnb29kX21idWYgPSBrbWFsbG9jKDUxMiAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZ29vZF9tYnVmID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiAiCi0JCQkJICAgICJibngyX2FsbG9jX2JhZF9yYnVmXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICVzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzU2MSw5ICszNTUyLDcgQEAKIAogCQltZW1zZXQobWNfZmlsdGVyLCAwLCA0ICogTlVNX01DX0hBU0hfUkVHSVNURVJTKTsKIAotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpOwogCQkJYml0ID0gY3JjICYgMHhmZjsKIAkJCXJlZ2lkeCA9IChiaXQgJiAweGUwKSA+PiA1OwpAQCAtMzU3OSwxNCArMzU2OCwxNCBAQAogCQlzb3J0X21vZGUgfD0gQk5YMl9SUE1fU09SVF9VU0VSMF9NQ19IU0hfRU47CiAJfQogCi0JaWYgKGRldi0+dWMuY291bnQgPiBCTlgyX01BWF9VTklDQVNUX0FERFJFU1NFUykgeworCWlmIChuZXRkZXZfdWNfY291bnQoZGV2KSA+IEJOWDJfTUFYX1VOSUNBU1RfQUREUkVTU0VTKSB7CiAJCXJ4X21vZGUgfD0gQk5YMl9FTUFDX1JYX01PREVfUFJPTUlTQ1VPVVM7CiAJCXNvcnRfbW9kZSB8PSBCTlgyX1JQTV9TT1JUX1VTRVIwX1BST01fRU4gfAogCQkJICAgICBCTlgyX1JQTV9TT1JUX1VTRVIwX1BST01fVkxBTjsKIAl9IGVsc2UgaWYgKCEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkgewogCQkvKiBBZGQgYWxsIGVudHJpZXMgaW50byB0byB0aGUgbWF0Y2ggZmlsdGVyIGxpc3QgKi8KIAkJaSA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZkZXYtPnVjLmxpc3QsIGxpc3QpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgewogCQkJYm54Ml9zZXRfbWFjX2FkZHIoYnAsIGhhLT5hZGRyLAogCQkJCQkgIGkgKyBCTlgyX1NUQVJUX1VOSUNBU1RfQUREUkVTU19JTkRFWCk7CiAJCQlzb3J0X21vZGUgfD0gKDEgPDwKQEAgLTM2NTcsMTUgKzM2NDYsMTMgQEAKIAogCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmYnAtPm1pcHNfZmlybXdhcmUsIG1pcHNfZndfZmlsZSwgJmJwLT5wZGV2LT5kZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgXCIlc1wiXG4iLAotCQkgICAgICAgbWlwc19md19maWxlKTsKKwkJcHJfZXJyKCJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgXCIlc1wiXG4iLCBtaXBzX2Z3X2ZpbGUpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZicC0+cnYycF9maXJtd2FyZSwgcnYycF9md19maWxlLCAmYnAtPnBkZXYtPmRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGxvYWQgZmlybXdhcmUgZmlsZSBcIiVzXCJcbiIsCi0JCSAgICAgICBydjJwX2Z3X2ZpbGUpOworCQlwcl9lcnIoIkNhbid0IGxvYWQgZmlybXdhcmUgZmlsZSBcIiVzXCJcbiIsIHJ2MnBfZndfZmlsZSk7CiAJCXJldHVybiByYzsKIAl9CiAJbWlwc19mdyA9IChjb25zdCBzdHJ1Y3QgYm54Ml9taXBzX2Z3X2ZpbGUgKikgYnAtPm1pcHNfZmlybXdhcmUtPmRhdGE7CkBAIC0zNjc2LDE1ICszNjYzLDEzIEBACiAJICAgIGNoZWNrX21pcHNfZndfZW50cnkoYnAtPm1pcHNfZmlybXdhcmUsICZtaXBzX2Z3LT5yeHApIHx8CiAJICAgIGNoZWNrX21pcHNfZndfZW50cnkoYnAtPm1pcHNfZmlybXdhcmUsICZtaXBzX2Z3LT50cGF0KSB8fAogCSAgICBjaGVja19taXBzX2Z3X2VudHJ5KGJwLT5taXBzX2Zpcm13YXJlLCAmbWlwc19mdy0+dHhwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBpcyBpbnZhbGlkXG4iLAotCQkgICAgICAgbWlwc19md19maWxlKTsKKwkJcHJfZXJyKCJGaXJtd2FyZSBmaWxlIFwiJXNcIiBpcyBpbnZhbGlkXG4iLCBtaXBzX2Z3X2ZpbGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGJwLT5ydjJwX2Zpcm13YXJlLT5zaXplIDwgc2l6ZW9mKCpydjJwX2Z3KSB8fAogCSAgICBjaGVja19md19zZWN0aW9uKGJwLT5ydjJwX2Zpcm13YXJlLCAmcnYycF9mdy0+cHJvYzEucnYycCwgOCwgdHJ1ZSkgfHwKIAkgICAgY2hlY2tfZndfc2VjdGlvbihicC0+cnYycF9maXJtd2FyZSwgJnJ2MnBfZnctPnByb2MyLnJ2MnAsIDgsIHRydWUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZpcm13YXJlIGZpbGUgXCIlc1wiIGlzIGludmFsaWRcbiIsCi0JCSAgICAgICBydjJwX2Z3X2ZpbGUpOworCQlwcl9lcnIoIkZpcm13YXJlIGZpbGUgXCIlc1wiIGlzIGludmFsaWRcbiIsIHJ2MnBfZndfZmlsZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDMxOCw3ICs0MzAzLDcgQEAKIAogCWlmIChqID09IGVudHJ5X2NvdW50KSB7CiAJCWJwLT5mbGFzaF9pbmZvID0gTlVMTDsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJVbmtub3duIGZsYXNoL0VFUFJPTSB0eXBlLlxuIik7CisJCXByX2FsZXJ0KCJVbmtub3duIGZsYXNoL0VFUFJPTSB0eXBlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC00NzM4LDcgKzQ3MjMsNyBAQAogCiAJCWlmICh2YWwgJiAoQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfUkVRIHwKIAkJCSAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX0JTWSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNoaXAgcmVzZXQgZGlkIG5vdCBjb21wbGV0ZVxuIik7CisJCQlwcl9lcnIoIkNoaXAgcmVzZXQgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQpAQCAtNDc0Niw3ICs0NzMxLDcgQEAKIAkvKiBNYWtlIHN1cmUgYnl0ZSBzd2FwcGluZyBpcyBwcm9wZXJseSBjb25maWd1cmVkLiAqLwogCXZhbCA9IFJFR19SRChicCwgQk5YMl9QQ0lfU1dBUF9ESUFHMCk7CiAJaWYgKHZhbCAhPSAweDAxMDIwMzA0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNoaXAgbm90IGluIGNvcnJlY3QgZW5kaWFuIG1vZGVcbiIpOworCQlwcl9lcnIoIkNoaXAgbm90IGluIGNvcnJlY3QgZW5kaWFuIG1vZGVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQ5NDEsNyArNDkyNiw3IEBACiAJCSAgICAgIEJOWDJfSENfQ09ORklHX0NPTExFQ1RfU1RBVFM7CiAJfQogCi0JaWYgKGJwLT5pcnFfbnZlY3MgPiAxKSB7CisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0lYKSB7CiAJCVJFR19XUihicCwgQk5YMl9IQ19NU0lYX0JJVF9WRUNUT1IsCiAJCSAgICAgICBCTlgyX0hDX01TSVhfQklUX1ZFQ1RPUl9WQUwpOwogCkBAIC01MTY3LDkgKzUxNTIsOCBAQAogCXJpbmdfcHJvZCA9IHByb2QgPSByeHItPnJ4X3BnX3Byb2Q7CiAJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9wZ19yaW5nX3NpemU7IGkrKykgewogCQlpZiAoYm54Ml9hbGxvY19yeF9wYWdlKGJwLCByeHIsIHJpbmdfcHJvZCkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IGluaXQnZWQgcnggcGFnZSByaW5nICVkICIKLQkJCQkJCSJ3aXRoICVkLyVkIHBhZ2VzIG9ubHlcbiIsCi0JCQkgICAgICAgYnAtPmRldi0+bmFtZSwgcmluZ19udW0sIGksIGJwLT5yeF9wZ19yaW5nX3NpemUpOworCQkJbmV0ZGV2X3dhcm4oYnAtPmRldiwgImluaXQnZWQgcnggcGFnZSByaW5nICVkIHdpdGggJWQvJWQgcGFnZXMgb25seVxuIiwKKwkJCQkgICAgcmluZ19udW0sIGksIGJwLT5yeF9wZ19yaW5nX3NpemUpOwogCQkJYnJlYWs7CiAJCX0KIAkJcHJvZCA9IE5FWFRfUlhfQkQocHJvZCk7CkBAIC01MTgwLDkgKzUxNjQsOCBAQAogCXJpbmdfcHJvZCA9IHByb2QgPSByeHItPnJ4X3Byb2Q7CiAJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9yaW5nX3NpemU7IGkrKykgewogCQlpZiAoYm54Ml9hbGxvY19yeF9za2IoYnAsIHJ4ciwgcmluZ19wcm9kKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogaW5pdCdlZCByeCByaW5nICVkIHdpdGggIgotCQkJCQkJIiVkLyVkIHNrYnMgb25seVxuIiwKLQkJCSAgICAgICBicC0+ZGV2LT5uYW1lLCByaW5nX251bSwgaSwgYnAtPnJ4X3Jpbmdfc2l6ZSk7CisJCQluZXRkZXZfd2FybihicC0+ZGV2LCAiaW5pdCdlZCByeCByaW5nICVkIHdpdGggJWQvJWQgc2ticyBvbmx5XG4iLAorCQkJCSAgICByaW5nX251bSwgaSwgYnAtPnJ4X3Jpbmdfc2l6ZSk7CiAJCQlicmVhazsKIAkJfQogCQlwcm9kID0gTkVYVF9SWF9CRChwcm9kKTsKQEAgLTYxNDUsNiArNjEyOCwxMCBAQAogCVJFR19XUihicCwgQk5YMl9QQ0lfTVNJWF9UQkxfT0ZGX0JJUiwgQk5YMl9QQ0lfR1JDX1dJTkRPVzJfQkFTRSk7CiAJUkVHX1dSKGJwLCBCTlgyX1BDSV9NU0lYX1BCQV9PRkZfQklULCBCTlgyX1BDSV9HUkNfV0lORE9XM19CQVNFKTsKIAorCS8qICBOZWVkIHRvIGZsdXNoIHRoZSBwcmV2aW91cyB0aHJlZSB3cml0ZXMgdG8gZW5zdXJlIE1TSS1YCisJICogIGlzIHNldHVwIHByb3Blcmx5ICovCisJUkVHX1JEKGJwLCBCTlgyX1BDSV9NU0lYX0NPTlRST0wpOworCiAJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJbXNpeF9lbnRbaV0uZW50cnkgPSBpOwogCQltc2l4X2VudFtpXS52ZWN0b3IgPSAwOwpAQCAtNjIyNyw2ICs2MjE0LDggQEAKIAogCWF0b21pY19zZXQoJmJwLT5pbnRyX3NlbSwgMCk7CiAKKwltZW1zZXQoYnAtPnRlbXBfc3RhdHNfYmxrLCAwLCBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2spKTsKKwogCWJueDJfZW5hYmxlX2ludChicCk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSSkgewpAQCAtNjIzNCwxMSArNjIyMyw3IEBACiAJCSAqIElmIE1TSSB0ZXN0IGZhaWxzLCBnbyBiYWNrIHRvIElOVHggbW9kZQogCQkgKi8KIAkJaWYgKGJueDJfdGVzdF9pbnRyKGJwKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE5vIGludGVycnVwdCB3YXMgZ2VuZXJhdGVkIgotCQkJICAgICAgICIgdXNpbmcgTVNJLCBzd2l0Y2hpbmcgdG8gSU5UeCBtb2RlLiBQbGVhc2UiCi0JCQkgICAgICAgIiByZXBvcnQgdGhpcyBmYWlsdXJlIHRvIHRoZSBQQ0kgbWFpbnRhaW5lciIKLQkJCSAgICAgICAiIGFuZCBpbmNsdWRlIHN5c3RlbSBjaGlwc2V0IGluZm9ybWF0aW9uLlxuIiwKLQkJCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKGJwLT5kZXYsICJObyBpbnRlcnJ1cHQgd2FzIGdlbmVyYXRlZCB1c2luZyBNU0ksIHN3aXRjaGluZyB0byBJTlR4IG1vZGUuIFBsZWFzZSByZXBvcnQgdGhpcyBmYWlsdXJlIHRvIHRoZSBQQ0kgbWFpbnRhaW5lciBhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIpOwogCiAJCQlibngyX2Rpc2FibGVfaW50KGJwKTsKIAkJCWJueDJfZnJlZV9pcnEoYnApOwpAQCAtNjI1OCw5ICs2MjQzLDkgQEAKIAkJfQogCX0KIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0lcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgInVzaW5nIE1TSVxuIik7CiAJZWxzZSBpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJWFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAidXNpbmcgTVNJWFxuIik7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKQEAgLTYyOTksMjAgKzYyODQsMTggQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKIAotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIERFQlVHOiBpbnRyX3NlbVsleF1cbiIsIGRldi0+bmFtZSwKLQkJYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIERFQlVHOiBFTUFDX1RYX1NUQVRVU1slMDh4XSAiCi0JCQkgICAgIlJQTV9NR01UX1BLVF9DVFJMWyUwOHhdXG4iLCBkZXYtPm5hbWUsCi0JCVJFR19SRChicCwgQk5YMl9FTUFDX1RYX1NUQVRVUyksCi0JCVJFR19SRChicCwgQk5YMl9SUE1fTUdNVF9QS1RfQ1RSTCkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIERFQlVHOiBNQ1BfU1RBVEVfUDBbJTA4eF0gTUNQX1NUQVRFX1AxWyUwOHhdXG4iLAotCQlkZXYtPm5hbWUsIGJueDJfcmVnX3JkX2luZChicCwgQk5YMl9NQ1BfU1RBVEVfUDApLAotCQlibngyX3JlZ19yZF9pbmQoYnAsIEJOWDJfTUNQX1NUQVRFX1AxKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgREVCVUc6IEhDX1NUQVRTX0lOVEVSUlVQVF9TVEFUVVNbJTA4eF1cbiIsCi0JCWRldi0+bmFtZSwgUkVHX1JEKGJwLCBCTlgyX0hDX1NUQVRTX0lOVEVSUlVQVF9TVEFUVVMpKTsKKwluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBpbnRyX3NlbVsleF1cbiIsIGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pKTsKKwluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBFTUFDX1RYX1NUQVRVU1slMDh4XSBSUE1fTUdNVF9QS1RfQ1RSTFslMDh4XVxuIiwKKwkJICAgUkVHX1JEKGJwLCBCTlgyX0VNQUNfVFhfU1RBVFVTKSwKKwkJICAgUkVHX1JEKGJwLCBCTlgyX1JQTV9NR01UX1BLVF9DVFJMKSk7CisJbmV0ZGV2X2VycihkZXYsICJERUJVRzogTUNQX1NUQVRFX1AwWyUwOHhdIE1DUF9TVEFURV9QMVslMDh4XVxuIiwKKwkJICAgYm54Ml9yZWdfcmRfaW5kKGJwLCBCTlgyX01DUF9TVEFURV9QMCksCisJCSAgIGJueDJfcmVnX3JkX2luZChicCwgQk5YMl9NQ1BfU1RBVEVfUDEpKTsKKwluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBIQ19TVEFUU19JTlRFUlJVUFRfU1RBVFVTWyUwOHhdXG4iLAorCQkgICBSRUdfUkQoYnAsIEJOWDJfSENfU1RBVFNfSU5URVJSVVBUX1NUQVRVUykpOwogCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfVVNJTkdfTVNJWCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgREVCVUc6IFBCQVslMDh4XVxuIiwgZGV2LT5uYW1lLAotCQkJUkVHX1JEKGJwLCBCTlgyX1BDSV9HUkNfV0lORE9XM19CQVNFKSk7CisJCW5ldGRldl9lcnIoZGV2LCAiREVCVUc6IFBCQVslMDh4XVxuIiwKKwkJCSAgIFJFR19SRChicCwgQk5YMl9QQ0lfR1JDX1dJTkRPVzNfQkFTRSkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjM3Niw4ICs2MzU5LDcgQEAKIAlpZiAodW5saWtlbHkoYm54Ml90eF9hdmFpbChicCwgdHhyKSA8CiAJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7CiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTY1MzgsOTIgKzY1MjAsMTIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgR0VUX05FVF9TVEFUUzY0KGN0cikJCQkJCVwKK3N0YXRpYyB2b2lkCitibngyX3NhdmVfc3RhdHMoc3RydWN0IGJueDIgKmJwKQoreworCXUzMiAqaHdfc3RhdHMgPSAodTMyICopIGJwLT5zdGF0c19ibGs7CisJdTMyICp0ZW1wX3N0YXRzID0gKHUzMiAqKSBicC0+dGVtcF9zdGF0c19ibGs7CisJaW50IGk7CisKKwkvKiBUaGUgMXN0IDEwIGNvdW50ZXJzIGFyZSA2NC1iaXQgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkgKz0gMikgeworCQl1MzIgaGk7CisJCXU2NCBsbzsKKworCQloaSA9IHRlbXBfc3RhdHNbaV0gKyBod19zdGF0c1tpXTsKKwkJbG8gPSAodTY0KSB0ZW1wX3N0YXRzW2kgKyAxXSArICh1NjQpIGh3X3N0YXRzW2kgKyAxXTsKKwkJaWYgKGxvID4gMHhmZmZmZmZmZikKKwkJCWhpKys7CisJCXRlbXBfc3RhdHNbaV0gPSBoaTsKKwkJdGVtcF9zdGF0c1tpICsgMV0gPSBsbyAmIDB4ZmZmZmZmZmY7CisJfQorCisJZm9yICggOyBpIDwgc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2Jsb2NrKSAvIDQ7IGkrKykKKwkJdGVtcF9zdGF0c1tpXSArPSBod19zdGF0c1tpXTsKK30KKworI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTNjQoY3RyKQkJCQlcCiAJKHVuc2lnbmVkIGxvbmcpICgodW5zaWduZWQgbG9uZykgKGN0ciMjX2hpKSA8PCAzMikgKwlcCiAJKHVuc2lnbmVkIGxvbmcpIChjdHIjI19sbykKIAotI2RlZmluZSBHRVRfTkVUX1NUQVRTMzIoY3RyKQkJXAorI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTMzIoY3RyKQkJCQlcCiAJKGN0ciMjX2xvKQogCiAjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCi0jZGVmaW5lIEdFVF9ORVRfU1RBVFMJR0VUX05FVF9TVEFUUzY0CisjZGVmaW5lIEdFVF82NEJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCisJR0VUXzY0QklUX05FVF9TVEFUUzY0KGJwLT5zdGF0c19ibGstPmN0cikgKwkJXAorCUdFVF82NEJJVF9ORVRfU1RBVFM2NChicC0+dGVtcF9zdGF0c19ibGstPmN0cikKICNlbHNlCi0jZGVmaW5lIEdFVF9ORVRfU1RBVFMJR0VUX05FVF9TVEFUUzMyCisjZGVmaW5lIEdFVF82NEJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCisJR0VUXzY0QklUX05FVF9TVEFUUzMyKGJwLT5zdGF0c19ibGstPmN0cikgKwkJXAorCUdFVF82NEJJVF9ORVRfU1RBVFMzMihicC0+dGVtcF9zdGF0c19ibGstPmN0cikKICNlbmRpZgogCisjZGVmaW5lIEdFVF8zMkJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCisJKHVuc2lnbmVkIGxvbmcpIChicC0+c3RhdHNfYmxrLT5jdHIgKwkJCVwKKwkJCSBicC0+dGVtcF9zdGF0c19ibGstPmN0cikKKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKIGJueDJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jayAqc3RhdHNfYmxrID0gYnAtPnN0YXRzX2JsazsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJmRldi0+c3RhdHM7CiAKIAlpZiAoYnAtPnN0YXRzX2JsayA9PSBOVUxMKSB7CiAJCXJldHVybiBuZXRfc3RhdHM7CiAJfQogCW5ldF9zdGF0cy0+cnhfcGFja2V0cyA9Ci0JCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENJblVjYXN0UGt0cykgKwotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDSW5NdWx0aWNhc3RQa3RzKSArCi0JCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENJbkJyb2FkY2FzdFBrdHMpOworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ0luVWNhc3RQa3RzKSArCisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDSW5NdWx0aWNhc3RQa3RzKSArCisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDSW5Ccm9hZGNhc3RQa3RzKTsKIAogCW5ldF9zdGF0cy0+dHhfcGFja2V0cyA9Ci0JCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENPdXRVY2FzdFBrdHMpICsKLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ091dE11bHRpY2FzdFBrdHMpICsKLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ091dEJyb2FkY2FzdFBrdHMpOworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ091dFVjYXN0UGt0cykgKworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ091dE11bHRpY2FzdFBrdHMpICsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENPdXRCcm9hZGNhc3RQa3RzKTsKIAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPQotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDSW5PY3RldHMpOworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ0luT2N0ZXRzKTsKIAogCW5ldF9zdGF0cy0+dHhfYnl0ZXMgPQotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDT3V0T2N0ZXRzKTsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENPdXRPY3RldHMpOwogCiAJbmV0X3N0YXRzLT5tdWx0aWNhc3QgPQotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDT3V0TXVsdGljYXN0UGt0cyk7CisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDT3V0TXVsdGljYXN0UGt0cyk7CiAKIAluZXRfc3RhdHMtPmNvbGxpc2lvbnMgPQotCQkodW5zaWduZWQgbG9uZykgc3RhdHNfYmxrLT5zdGF0X0V0aGVyU3RhdHNDb2xsaXNpb25zOworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfRXRoZXJTdGF0c0NvbGxpc2lvbnMpOwogCiAJbmV0X3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0KLQkJKHVuc2lnbmVkIGxvbmcpIChzdGF0c19ibGstPnN0YXRfRXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMgKwotCQlzdGF0c19ibGstPnN0YXRfRXRoZXJTdGF0c092ZXJyc2l6ZVBrdHMpOworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfRXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMpICsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0V0aGVyU3RhdHNPdmVycnNpemVQa3RzKTsKIAogCW5ldF9zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPQotCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluRlRRRGlzY2FyZHMgKwotCQlzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkcyk7CisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9JZkluRlRRRGlzY2FyZHMpICsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0lmSW5NQlVGRGlzY2FyZHMpOwogCiAJbmV0X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQotCQkodW5zaWduZWQgbG9uZykgc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0FsaWdubWVudEVycm9yczsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0RvdDNTdGF0c0FsaWdubWVudEVycm9ycyk7CiAKIAluZXRfc3RhdHMtPnJ4X2NyY19lcnJvcnMgPQotCQkodW5zaWduZWQgbG9uZykgc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0ZDU0Vycm9yczsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0RvdDNTdGF0c0ZDU0Vycm9ycyk7CiAKIAluZXRfc3RhdHMtPnJ4X2Vycm9ycyA9IG5ldF9zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyArCiAJCW5ldF9zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKyBuZXRfc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyArCiAJCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9yczsKIAogCW5ldF9zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQotICAgIAkJKHVuc2lnbmVkIGxvbmcpIChzdGF0c19ibGstPnN0YXRfRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyArCi0JCXN0YXRzX2Jsay0+c3RhdF9Eb3QzU3RhdHNMYXRlQ29sbGlzaW9ucyk7CisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9Eb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zKSArCisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9Eb3QzU3RhdHNMYXRlQ29sbGlzaW9ucyk7CiAKIAlpZiAoKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2KSB8fAogCSAgICAoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA4X0EwKSkKIAkJbmV0X3N0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9IDA7CiAJZWxzZSB7CiAJCW5ldF9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPQotCQkJKHVuc2lnbmVkIGxvbmcpCi0JCQlzdGF0c19ibGstPnN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzOworCQkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0RvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyk7CiAJfQogCiAJbmV0X3N0YXRzLT50eF9lcnJvcnMgPQotICAgIAkJKHVuc2lnbmVkIGxvbmcpCi0JCXN0YXRzX2Jsay0+c3RhdF9lbWFjX3R4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycwotCQkrCisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9lbWFjX3R4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycykgKwogCQluZXRfc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICsKIAkJbmV0X3N0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKIAogCW5ldF9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9Ci0JCSh1bnNpZ25lZCBsb25nKSAoc3RhdHNfYmxrLT5zdGF0X0lmSW5GVFFEaXNjYXJkcyArCi0JCXN0YXRzX2Jsay0+c3RhdF9JZkluTUJVRkRpc2NhcmRzICsgc3RhdHNfYmxrLT5zdGF0X0Z3UnhEcm9wKTsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0lmSW5GVFFEaXNjYXJkcykgKworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfSWZJbk1CVUZEaXNjYXJkcykgKworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfRndSeERyb3ApOwogCiAJcmV0dXJuIG5ldF9zdGF0czsKIH0KQEAgLTY3MTcsMzIgKzY3MjgsMTUgQEAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWF1dG9uZWcgfD0gQVVUT05FR19TUEVFRDsKIAotCQljbWQtPmFkdmVydGlzaW5nICY9IEVUSFRPT0xfQUxMX0NPUFBFUl9TUEVFRDsKLQotCQkvKiBhbGxvdyBhZHZlcnRpc2luZyAxIHNwZWVkICovCi0JCWlmICgoY21kLT5hZHZlcnRpc2luZyA9PSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikgfHwKLQkJCShjbWQtPmFkdmVydGlzaW5nID09IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKSB8fAotCQkJKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKSB8fAotCQkJKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSkgewotCi0JCQlpZiAoY21kLT5wb3J0ID09IFBPUlRfRklCUkUpCi0JCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQotCQkJYWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOwotCi0JCX0gZWxzZSBpZiAoY21kLT5hZHZlcnRpc2luZyA9PSBBRFZFUlRJU0VEXzI1MDBiYXNlWF9GdWxsKSB7Ci0JCQlpZiAoIShicC0+cGh5X2ZsYWdzICYgQk5YMl9QSFlfRkxBR18yXzVHX0NBUEFCTEUpIHx8Ci0JCQkgICAgKGNtZC0+cG9ydCA9PSBQT1JUX1RQKSkKLQkJCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCQl9IGVsc2UgaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKLQkJCWFkdmVydGlzaW5nID0gY21kLT5hZHZlcnRpc2luZzsKLQkJZWxzZSBpZiAoY21kLT5hZHZlcnRpc2luZyA9PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQkJZWxzZSB7Ci0JCQlpZiAoY21kLT5wb3J0ID09IFBPUlRfRklCUkUpCi0JCQkJYWR2ZXJ0aXNpbmcgPSBFVEhUT09MX0FMTF9GSUJSRV9TUEVFRDsKLQkJCWVsc2UKKwkJYWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOworCQlpZiAoY21kLT5wb3J0ID09IFBPUlRfVFApIHsKKwkJCWFkdmVydGlzaW5nICY9IEVUSFRPT0xfQUxMX0NPUFBFUl9TUEVFRDsKKwkJCWlmICghYWR2ZXJ0aXNpbmcpCiAJCQkJYWR2ZXJ0aXNpbmcgPSBFVEhUT09MX0FMTF9DT1BQRVJfU1BFRUQ7CisJCX0gZWxzZSB7CisJCQlhZHZlcnRpc2luZyAmPSBFVEhUT09MX0FMTF9GSUJSRV9TUEVFRDsKKwkJCWlmICghYWR2ZXJ0aXNpbmcpCisJCQkJYWR2ZXJ0aXNpbmcgPSBFVEhUT09MX0FMTF9GSUJSRV9TUEVFRDsKIAkJfQogCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CiAJfQpAQCAtNzA4Myw2ICs3MDc3LDkgQEAKIGJueDJfY2hhbmdlX3Jpbmdfc2l6ZShzdHJ1Y3QgYm54MiAqYnAsIHUzMiByeCwgdTMyIHR4KQogewogCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7CisJCS8qIFJlc2V0IHdpbGwgZXJhc2UgY2hpcHNldCBzdGF0czsgc2F2ZSB0aGVtICovCisJCWJueDJfc2F2ZV9zdGF0cyhicCk7CisKIAkJYm54Ml9uZXRpZl9zdG9wKGJwKTsKIAkJYm54Ml9yZXNldF9jaGlwKGJwLCBCTlgyX0RSVl9NU0dfQ09ERV9SRVNFVCk7CiAJCWJueDJfZnJlZV9za2JzKGJwKTsKQEAgLTcxMDQsNiArNzEwMSwxMyBAQAogCQkJZGV2X2Nsb3NlKGJwLT5kZXYpOwogCQkJcmV0dXJuIHJjOwogCQl9CisjaWZkZWYgQkNNX0NOSUMKKwkJbXV0ZXhfbG9jaygmYnAtPmNuaWNfbG9jayk7CisJCS8qIExldCBjbmljIGtub3cgYWJvdXQgdGhlIG5ldyBzdGF0dXMgYmxvY2suICovCisJCWlmIChicC0+Y25pY19ldGhfZGV2LmRydl9zdGF0ZSAmIENOSUNfRFJWX1NUQVRFX1JFR0QpCisJCQlibngyX3NldHVwX2NuaWNfaXJxX2luZm8oYnApOworCQltdXRleF91bmxvY2soJmJwLT5jbmljX2xvY2spOworI2VuZGlmCiAJCWJueDJfbmV0aWZfc3RhcnQoYnApOwogCX0KIAlyZXR1cm4gMDsKQEAgLTc0MjcsNiArNzQzMSw3IEBACiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAl1MzIgKmh3X3N0YXRzID0gKHUzMiAqKSBicC0+c3RhdHNfYmxrOworCXUzMiAqdGVtcF9zdGF0cyA9ICh1MzIgKikgYnAtPnRlbXBfc3RhdHNfYmxrOwogCXU4ICpzdGF0c19sZW5fYXJyID0gTlVMTDsKIAogCWlmIChod19zdGF0cyA9PSBOVUxMKSB7CkBAIC03NDQzLDIxICs3NDQ4LDI2IEBACiAJCXN0YXRzX2xlbl9hcnIgPSBibngyXzU3MDhfc3RhdHNfbGVuX2FycjsKIAogCWZvciAoaSA9IDA7IGkgPCBCTlgyX05VTV9TVEFUUzsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCiAJCWlmIChzdGF0c19sZW5fYXJyW2ldID09IDApIHsKIAkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCiAJCQlidWZbaV0gPSAwOwogCQkJY29udGludWU7CiAJCX0KKworCQlvZmZzZXQgPSBibngyX3N0YXRzX29mZnNldF9hcnJbaV07CiAJCWlmIChzdGF0c19sZW5fYXJyW2ldID09IDQpIHsKIAkJCS8qIDQtYnl0ZSBjb3VudGVyICovCi0JCQlidWZbaV0gPSAodTY0KQotCQkJCSooaHdfc3RhdHMgKyBibngyX3N0YXRzX29mZnNldF9hcnJbaV0pOworCQkJYnVmW2ldID0gKHU2NCkgKihod19zdGF0cyArIG9mZnNldCkgKworCQkJCSAqKHRlbXBfc3RhdHMgKyBvZmZzZXQpOwogCQkJY29udGludWU7CiAJCX0KIAkJLyogOC1ieXRlIGNvdW50ZXIgKi8KLQkJYnVmW2ldID0gKCgodTY0KSAqKGh3X3N0YXRzICsKLQkJCQkJYm54Ml9zdGF0c19vZmZzZXRfYXJyW2ldKSkgPDwgMzIpICsKLQkJCQkqKGh3X3N0YXRzICsgYm54Ml9zdGF0c19vZmZzZXRfYXJyW2ldICsgMSk7CisJCWJ1ZltpXSA9ICgoKHU2NCkgKihod19zdGF0cyArIG9mZnNldCkpIDw8IDMyKSArCisJCQkgKihod19zdGF0cyArIG9mZnNldCArIDEpICsKKwkJCSAoKCh1NjQpICoodGVtcF9zdGF0cyArIG9mZnNldCkpIDw8IDMyKSArCisJCQkgKih0ZW1wX3N0YXRzICsgb2Zmc2V0ICsgMSk7CiAJfQogfQogCkBAIC03NjI1LDcgKzc2MzUsNyBAQAogCXJldHVybiAoYm54Ml9jaGFuZ2VfcmluZ19zaXplKGJwLCBicC0+cnhfcmluZ19zaXplLCBicC0+dHhfcmluZ19zaXplKSk7CiB9CiAKLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZAogcG9sbF9ibngyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC03NzMzLDEwICs3NzQzLDkgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogYm54Ml9yZWFkX3ZwZF9md192ZXIoc3RydWN0IGJueDIgKmJwKQogewotCWludCByYywgaSwgdjBfbGVuID0gMDsKKwlpbnQgcmMsIGksIGo7CiAJdTggKmRhdGE7Ci0JdTggKnYwX3N0ciA9IE5VTEw7Ci0JYm9vbCBtbl9tYXRjaCA9IGZhbHNlOworCXVuc2lnbmVkIGludCBibG9ja19lbmQsIHJvc2l6ZSwgbGVuOwogCiAjZGVmaW5lIEJOWDJfVlBEX05WUkFNX09GRlNFVAkweDMwMAogI2RlZmluZSBCTlgyX1ZQRF9MRU4JCTEyOApAQCAtNzc1OCw1MyArNzc2Nyw0MiBAQAogCQlkYXRhW2kgKyAzXSA9IGRhdGFbaSArIEJOWDJfVlBEX0xFTl07CiAJfQogCi0JZm9yIChpID0gMDsgaSA8PSBCTlgyX1ZQRF9MRU4gLSAzOyApIHsKLQkJdW5zaWduZWQgY2hhciB2YWwgPSBkYXRhW2ldOwotCQl1bnNpZ25lZCBpbnQgYmxvY2tfZW5kOwotCi0JCWlmICh2YWwgPT0gMHg4MiB8fCB2YWwgPT0gMHg5MSkgewotCQkJaSA9IChpICsgMyArIChkYXRhW2kgKyAxXSArIChkYXRhW2kgKyAyXSA8PCA4KSkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAodmFsICE9IDB4OTApCi0JCQlnb3RvIHZwZF9kb25lOwotCi0JCWJsb2NrX2VuZCA9IChpICsgMyArIChkYXRhW2kgKyAxXSArIChkYXRhW2kgKyAyXSA8PCA4KSkpOwotCQlpICs9IDM7Ci0KLQkJaWYgKGJsb2NrX2VuZCA+IEJOWDJfVlBEX0xFTikKLQkJCWdvdG8gdnBkX2RvbmU7Ci0KLQkJd2hpbGUgKGkgPCAoYmxvY2tfZW5kIC0gMikpIHsKLQkJCWludCBsZW4gPSBkYXRhW2kgKyAyXTsKLQotCQkJaWYgKGkgKyAzICsgbGVuID4gYmxvY2tfZW5kKQotCQkJCWdvdG8gdnBkX2RvbmU7Ci0KLQkJCWlmIChkYXRhW2ldID09ICdNJyAmJiBkYXRhW2kgKyAxXSA9PSAnTicpIHsKLQkJCQlpZiAobGVuICE9IDQgfHwKLQkJCQkgICAgbWVtY21wKCZkYXRhW2kgKyAzXSwgIjEwMjgiLCA0KSkKLQkJCQkJZ290byB2cGRfZG9uZTsKLQkJCQltbl9tYXRjaCA9IHRydWU7Ci0KLQkJCX0gZWxzZSBpZiAoZGF0YVtpXSA9PSAnVicgJiYgZGF0YVtpICsgMV0gPT0gJzAnKSB7Ci0JCQkJaWYgKGxlbiA+IEJOWDJfTUFYX1ZFUl9TTEVOKQotCQkJCQlnb3RvIHZwZF9kb25lOwotCi0JCQkJdjBfbGVuID0gbGVuOwotCQkJCXYwX3N0ciA9ICZkYXRhW2kgKyAzXTsKLQkJCX0KLQkJCWkgKz0gMyArIGxlbjsKLQotCQkJaWYgKG1uX21hdGNoICYmIHYwX3N0cikgewotCQkJCW1lbWNweShicC0+ZndfdmVyc2lvbiwgdjBfc3RyLCB2MF9sZW4pOwotCQkJCWJwLT5md192ZXJzaW9uW3YwX2xlbl0gPSAnICc7Ci0JCQkJZ290byB2cGRfZG9uZTsKLQkJCX0KLQkJfQorCWkgPSBwY2lfdnBkX2ZpbmRfdGFnKGRhdGEsIDAsIEJOWDJfVlBEX0xFTiwgUENJX1ZQRF9MUkRUX1JPX0RBVEEpOworCWlmIChpIDwgMCkKIAkJZ290byB2cGRfZG9uZTsKLQl9CisKKwlyb3NpemUgPSBwY2lfdnBkX2xyZHRfc2l6ZSgmZGF0YVtpXSk7CisJaSArPSBQQ0lfVlBEX0xSRFRfVEFHX1NJWkU7CisJYmxvY2tfZW5kID0gaSArIHJvc2l6ZTsKKworCWlmIChibG9ja19lbmQgPiBCTlgyX1ZQRF9MRU4pCisJCWdvdG8gdnBkX2RvbmU7CisKKwlqID0gcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZChkYXRhLCBpLCByb3NpemUsCisJCQkJICAgICAgUENJX1ZQRF9ST19LRVlXT1JEX01GUl9JRCk7CisJaWYgKGogPCAwKQorCQlnb3RvIHZwZF9kb25lOworCisJbGVuID0gcGNpX3ZwZF9pbmZvX2ZpZWxkX3NpemUoJmRhdGFbal0pOworCisJaiArPSBQQ0lfVlBEX0lORk9fRkxEX0hEUl9TSVpFOworCWlmIChqICsgbGVuID4gYmxvY2tfZW5kIHx8IGxlbiAhPSA0IHx8CisJICAgIG1lbWNtcCgmZGF0YVtqXSwgIjEwMjgiLCA0KSkKKwkJZ290byB2cGRfZG9uZTsKKworCWogPSBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKGRhdGEsIGksIHJvc2l6ZSwKKwkJCQkgICAgICBQQ0lfVlBEX1JPX0tFWVdPUkRfVkVORE9SMCk7CisJaWYgKGogPCAwKQorCQlnb3RvIHZwZF9kb25lOworCisJbGVuID0gcGNpX3ZwZF9pbmZvX2ZpZWxkX3NpemUoJmRhdGFbal0pOworCisJaiArPSBQQ0lfVlBEX0lORk9fRkxEX0hEUl9TSVpFOworCWlmIChqICsgbGVuID4gYmxvY2tfZW5kIHx8IGxlbiA+IEJOWDJfTUFYX1ZFUl9TTEVOKQorCQlnb3RvIHZwZF9kb25lOworCisJbWVtY3B5KGJwLT5md192ZXJzaW9uLCAmZGF0YVtqXSwgbGVuKTsKKwlicC0+ZndfdmVyc2lvbltsZW5dID0gJyAnOwogCiB2cGRfZG9uZToKIAlrZnJlZShkYXRhKTsKQEAgLTc4MjUsMjMgKzc4MjMsMzEgQEAKIAlicC0+ZmxhZ3MgPSAwOwogCWJwLT5waHlfZmxhZ3MgPSAwOwogCisJYnAtPnRlbXBfc3RhdHNfYmxrID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2spLCBHRlBfS0VSTkVMKTsKKworCWlmIChicC0+dGVtcF9zdGF0c19ibGsgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisKIAkvKiBlbmFibGUgZGV2aWNlIChpbmNsLiBQQ0kgUE0gd2FrZXVwKSwgYW5kIGJ1cy1tYXN0ZXJpbmcgKi8KIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJDYW5ub3QgZmluZCBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzcywgYWJvcnRpbmcuXG4iKTsKKwkJCSJDYW5ub3QgZmluZCBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzcywgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KIAogCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwogCWlmIChyYykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKQEAgLTc4NTEsNyArNzg1Nyw3IEBACiAJYnAtPnBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CiAJaWYgKGJwLT5wbV9jYXAgPT0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiQ2Fubm90IGZpbmQgcG93ZXIgbWFuYWdlbWVudCBjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOworCQkJIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCX0KQEAgLTc4NzQsNyArNzg4MCw3IEBACiAJYnAtPnJlZ3ZpZXcgPSBpb3JlbWFwX25vY2FjaGUoZGV2LT5iYXNlX2FkZHIsIG1lbV9sZW4pOwogCiAJaWYgKCFicC0+cmVndmlldykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIHJlZ2lzdGVyIHNwYWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIHJlZ2lzdGVyIHNwYWNlLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJfQpAQCAtNzg5NCw3ICs3OTAwLDcgQEAKIAlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpIHsKIAkJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApID09IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiQ2Fubm90IGZpbmQgUENJRSBjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOworCQkJCSJDYW5ub3QgZmluZCBQQ0lFIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF91bm1hcDsKIAkJfQpAQCAtNzkwNSw3ICs3OTExLDcgQEAKIAkJYnAtPnBjaXhfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCQlpZiAoYnAtPnBjaXhfY2FwID09IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiQ2Fubm90IGZpbmQgUENJWCBjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOworCQkJCSJDYW5ub3QgZmluZCBQQ0lYIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF91bm1hcDsKIAkJfQpAQCAtNzkzNCwxMSArNzk0MCwxMSBAQAogCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBwZXJzaXN0X2RtYV9tYXNrKTsKIAkJaWYgKHJjKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJInBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCQkJInBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF91bm1hcDsKIAkJfQogCX0gZWxzZSBpZiAoKHJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBETUEsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IERNQSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCkBAIC03OTU1LDcgKzc5NjEsNyBAQAogCQkhKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lYKSkgewogCiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSI1NzA2IEExIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBQQ0lYIGJ1cywgYWJvcnRpbmcuXG4iKTsKKwkJCSI1NzA2IEExIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBQQ0lYIGJ1cywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCkBAIC03OTc4LDcgKzc5ODQsNyBAQAogCiAJaWYgKChyZWcgJiBCTlgyX0RFVl9JTkZPX1NJR05BVFVSRV9NQUdJQ19NQVNLKSAhPQogCSAgICBCTlgyX0RFVl9JTkZPX1NJR05BVFVSRV9NQUdJQykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGaXJtd2FyZSBub3QgcnVubmluZywgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmlybXdhcmUgbm90IHJ1bm5pbmcsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQpAQCAtODIyOSw3ICs4MjM1LDcgQEAKICNpZmRlZiBCQ01fVkxBTgogCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IGJueDJfdmxhbl9yeF9yZWdpc3RlciwKICNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9QT0xMX0NPTlRST0xMRVIpIHx8IGRlZmluZWQoQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIpCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfYm54MiwKICNlbmRpZgogfTsKQEAgLTgyNTEsNyArODI1Nyw3IEBACiAJY2hhciBzdHJbNDBdOwogCiAJaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKIAkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KIAlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgVFhfTUFYX1JJTkdTKTsKQEAgLTgzMDEsMTUgKzgzMDcsMTMgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpICVzIGZvdW5kIGF0IG1lbSAlbHgsICIKLQkJIklSUSAlZCwgbm9kZSBhZGRyICVwTVxuIiwKLQkJZGV2LT5uYW1lLAotCQlib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCi0JCSgoQ0hJUF9JRChicCkgJiAweGYwMDApID4+IDEyKSArICdBJywKLQkJKChDSElQX0lEKGJwKSAmIDB4MGZmMCkgPj4gNCksCi0JCWJueDJfYnVzX3N0cmluZyhicCwgc3RyKSwKLQkJZGV2LT5iYXNlX2FkZHIsCi0JCWJwLT5wZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOworCW5ldGRldl9pbmZvKGRldiwgIiVzICglYyVkKSAlcyBmb3VuZCBhdCBtZW0gJWx4LCBJUlEgJWQsIG5vZGUgYWRkciAlcE1cbiIsCisJCSAgICBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCisJCSAgICAoKENISVBfSUQoYnApICYgMHhmMDAwKSA+PiAxMikgKyAnQScsCisJCSAgICAoKENISVBfSUQoYnApICYgMHgwZmYwKSA+PiA0KSwKKwkJICAgIGJueDJfYnVzX3N0cmluZyhicCwgc3RyKSwKKwkJICAgIGRldi0+YmFzZV9hZGRyLAorCQkgICAgYnAtPnBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODM0Niw2ICs4MzUwLDggQEAKIAlpZiAoYnAtPnJlZ3ZpZXcpCiAJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOwogCisJa2ZyZWUoYnAtPnRlbXBfc3RhdHNfYmxrKTsKKwogCWZyZWVfbmV0ZGV2KGRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC04NDQyLDcgKzg0NDgsNyBAQAogCXJ0bmxfbG9jaygpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDkzOWRjNDQuLmNkNGIwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTM0OSw3ICszNDksNyBAQAogI2RlZmluZSBCTlgyX0wyQ1RYX0JEX1BSRV9SRUFECQkJCTB4MDAwMDAwMDAKICNkZWZpbmUgQk5YMl9MMkNUWF9DVFhfU0laRQkJCQkweDAwMDAwMDAwCiAjZGVmaW5lIEJOWDJfTDJDVFhfQ1RYX1RZUEUJCQkJMHgwMDAwMDAwMAotI2RlZmluZSBCTlgyX0wyQ1RYX0xPX1dBVEVSX01BUktfREVGQVVMVAkJIDMyCisjZGVmaW5lIEJOWDJfTDJDVFhfTE9fV0FURVJfTUFSS19ERUZBVUxUCQkgNAogI2RlZmluZSBCTlgyX0wyQ1RYX0xPX1dBVEVSX01BUktfU0NBTEUJCQkgNAogI2RlZmluZSBCTlgyX0wyQ1RYX0xPX1dBVEVSX01BUktfRElTCQkJIDAKICNkZWZpbmUgQk5YMl9MMkNUWF9ISV9XQVRFUl9NQVJLX1NISUZUCQkJIDQKQEAgLTY4NTEsNiArNjg1MSw3IEBACiAJZG1hX2FkZHJfdAkJc3RhdHVzX2Jsa19tYXBwaW5nOwogCiAJc3RydWN0IHN0YXRpc3RpY3NfYmxvY2sJKnN0YXRzX2JsazsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jawkqdGVtcF9zdGF0c19ibGs7CiAJZG1hX2FkZHJfdAkJc3RhdHNfYmxrX21hcHBpbmc7CiAKIAlpbnQJCQljdHhfcGFnZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MnguaAppbmRleCA2MDJhYjg2Li4zYzQ4YTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeC5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDQsNyArNDQsNiBAQAogLyogZXJyb3IvZGVidWcgcHJpbnRzICovCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MngiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogCiAvKiBmb3IgbWVzc2FnZXMgdGhhdCBhcmUgY3VycmVudGx5IG9mZiAqLwogI2RlZmluZSBCTlgyWF9NU0dfT0ZGCQkJMApAQCAtNTgsMzAgKzU3LDQwIEBACiAjZGVmaW5lIERQX0xFVkVMCQkJS0VSTl9OT1RJQ0UJLyogd2FzOiBLRVJOX0RFQlVHICovCiAKIC8qIHJlZ3VsYXIgZGVidWcgcHJpbnQgKi8KLSNkZWZpbmUgRFAoX19tYXNrLCBfX2ZtdCwgX19hcmdzLi4uKSBkbyB7IFwKLQlpZiAoYnAtPm1zZ2xldmVsICYgKF9fbWFzaykpIFwKLQkJcHJpbnRrKERQX0xFVkVMICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgXAotCQkJYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwgIyNfX2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFAoX19tYXNrLCBfX2ZtdCwgX19hcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKGJwLT5tc2dfZW5hYmxlICYgKF9fbWFzaykpCQkJCVwKKwkJcHJpbnRrKERQX0xFVkVMICJbJXM6JWQoJXMpXSIgX19mbXQsCQlcCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCQkJXAorCQkgICAgICAgYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwJCVwKKwkJICAgICAgICMjX19hcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKIAogLyogZXJyb3JzIGRlYnVnIHByaW50ICovCi0jZGVmaW5lIEJOWDJYX0RCR19FUlIoX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JaWYgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19QUk9CRSkgXAotCQlwcmludGsoS0VSTl9FUlIgIlslczolZCglcyldIiBfX2ZtdCwgX19mdW5jX18sIF9fTElORV9fLCBcCi0JCQlicC0+ZGV2ID8gKGJwLT5kZXYtPm5hbWUpIDogIj8iLCAjI19fYXJncyk7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBCTlgyWF9EQkdfRVJSKF9fZm10LCBfX2FyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAobmV0aWZfbXNnX3Byb2JlKGJwKSkJCQkJXAorCQlwcl9lcnIoIlslczolZCglcyldIiBfX2ZtdCwJCQlcCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCQkJXAorCQkgICAgICAgYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwJCVwKKwkJICAgICAgICMjX19hcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKIAogLyogZm9yIGVycm9ycyAobmV2ZXIgbWFza2VkKSAqLwotI2RlZmluZSBCTlgyWF9FUlIoX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fRVJSICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgXAotCQlicC0+ZGV2ID8gKGJwLT5kZXYtPm5hbWUpIDogIj8iLCAjI19fYXJncyk7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBCTlgyWF9FUlIoX19mbXQsIF9fYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQkJXAorCXByX2VycigiWyVzOiVkKCVzKV0iIF9fZm10LAkJCQlcCisJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywJCQkJXAorCSAgICAgICBicC0+ZGV2ID8gKGJwLT5kZXYtPm5hbWUpIDogIj8iLAkJCVwKKwkgICAgICAgIyNfX2FyZ3MpOwkJCQkJXAorfSB3aGlsZSAoMCkKIAogLyogYmVmb3JlIHdlIGhhdmUgYSBkZXYtPm5hbWUgdXNlIGRldl9pbmZvKCkgKi8KLSNkZWZpbmUgQk5YMlhfREVWX0lORk8oX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JaWYgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19QUk9CRSkgXAotCQlkZXZfaW5mbygmYnAtPnBkZXYtPmRldiwgX19mbXQsICMjX19hcmdzKTsgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIEJOWDJYX0RFVl9JTkZPKF9fZm10LCBfX2FyZ3MuLi4pCQkJIFwKK2RvIHsJCQkJCQkJCSBcCisJaWYgKG5ldGlmX21zZ19wcm9iZShicCkpCQkJCSBcCisJCWRldl9pbmZvKCZicC0+cGRldi0+ZGV2LCBfX2ZtdCwgIyNfX2FyZ3MpOwkgXAorfSB3aGlsZSAoMCkKIAogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgpAQCAtMTMwLDcgKzEzOSw3IEBACiAJCQkJIG9mZnNldCwgbGVuMzIpOyBcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4zMikgXAorI2RlZmluZSBWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4zMiwgbGUzMl9zd2FwKSBcCiAJZG8geyBcCiAJCW1lbWNweShHVU5aSVBfQlVGKGJwKSwgZGF0YSwgKGxlbjMyKSAqIDQpOyBcCiAJCWJueDJ4X3dyaXRlX2JpZ19idWZfd2IoYnAsIGFkZHIsIGxlbjMyKTsgXApAQCAtODgyLDcgKzg5MSw3IEBACiAJLyogRW5kIG9mIGZpZWxkcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZSBjb2RlIHBhdGhzICovCiAKIAlpbnQJCQlwYW5pYzsKLQlpbnQJCQltc2dsZXZlbDsKKwlpbnQJCQltc2dfZW5hYmxlOwogCiAJdTMyCQkJZmxhZ3M7CiAjZGVmaW5lIFBDSVhfRkxBRwkJCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaAppbmRleCA5MzFkY2FjLi4wOGQ3MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZGVmcy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDcxLDYgKzQ3MSwxMSBAQAogCiAKIC8qIEhvc3QgY29hbGVzY2luZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgSENfSUdVX0JDX01PREUgMAorI2RlZmluZSBIQ19JR1VfTkJDX01PREUgMQorCisjZGVmaW5lIEhDX1JFR1VMQVJfU0VHTUVOVCAwCisjZGVmaW5lIEhDX0RFRkFVTFRfU0VHTUVOVCAxCiAKIC8qIGluZGV4IG51bWJlcnMgKi8KICNkZWZpbmUgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCmluZGV4IDUyNTg1MzMuLjc2MDA2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfaHNpLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMjYxLDcgKzEyNjEsNyBAQAogCiAjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk1CiAjZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQkyCi0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQk3CisjZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkxMwogI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OIAkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCkBAIC0yNDMzLDggKzI0MzMsMTAgQEAKIAl1OCByYW1yb2RfdHlwZTsKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEUgKDB4MTw8MCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAotI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDdGPDwxKQotI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDEKKyNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0VSUk9SICgweDE8PDEpCisjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9FUlJPUl9TSElGVCAxCisjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9SRVNFUlZFRDAgKDB4M0Y8PDIpCisjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9SRVNFUlZFRDBfU0hJRlQgMgogCXU4IGNvbm5fdHlwZTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiBjb25uX2FuZF9jbWRfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X29wcy5oCmluZGV4IDM4Yjk3MGEuLjJiMTM2M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaApAQCAtMiw3ICsyLDcgQEAKICAqICAgICAgICAgICAgICAgU3RhdGljIGZ1bmN0aW9ucyBuZWVkZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi4KICAqICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzICJpbmNsdWRlZCIgaW4gYm54MnhfbWFpbi5jLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTM4LDExICsxMzgsMTYgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfd3Jfd2Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGNvbnN0IHUzMiAqZGF0YSwKIAkJCSAgICAgdTMyIGxlbikKIHsKKwljb25zdCB1MzIgKm9sZF9kYXRhID0gZGF0YTsKKwogCWRhdGEgPSAoY29uc3QgdTMyICopYm54Mnhfc2VsX2Jsb2IoYnAsIGFkZHIsIChjb25zdCB1OCAqKWRhdGEpOwogCi0JaWYgKGJwLT5kbWFlX3JlYWR5KQotCQlWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4pOwotCWVsc2UKKwlpZiAoYnAtPmRtYWVfcmVhZHkpIHsKKwkJaWYgKG9sZF9kYXRhICE9IGRhdGEpCisJCQlWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4sIDEpOworCQllbHNlCisJCQlWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4sIDApOworCX0gZWxzZQogCQlibngyeF9pbml0X2luZF93cihicCwgYWRkciwgZGF0YSwgbGVuKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCmluZGV4IGNmNTc3ODkuLjMyZTc5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKQEAgLTE0LDYgKzE0LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTI5ODcsMTEgKzI5ODksOCBAQAogCWVsc2UKIAkJdmVuZG9yX3BuW1NGUF9FRVBST01fUEFSVF9OT19TSVpFXSA9ICdcMCc7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAgIldhcm5pbmc6ICIKLQkJCSAiVW5xdWFsaWZpZWQgU0ZQKyBtb2R1bGUgIgotCQkJICJkZXRlY3RlZCBvbiAlcywgUG9ydCAlZCBmcm9tICVzIHBhcnQgbnVtYmVyICVzXG4iCi0JCQksIGJwLT5kZXYtPm5hbWUsIHBhcmFtcy0+cG9ydCwKLQkJCXZlbmRvcl9uYW1lLCB2ZW5kb3JfcG4pOworCW5ldGRldl9pbmZvKGJwLT5kZXYsICJXYXJuaW5nOiBVbnF1YWxpZmllZCBTRlArIG1vZHVsZSBkZXRlY3RlZCwgUG9ydCAlZCBmcm9tICVzIHBhcnQgbnVtYmVyICVzXG4iLAorCQkgICAgcGFyYW1zLT5wb3J0LCB2ZW5kb3JfbmFtZSwgdmVuZG9yX3BuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNDg0NiwxNiArNDg0NSw4IEBACiAJCQkJCQkgICAgICIgaGFzIGJlZW4gZGV0ZWN0ZWQgb24gIgogCQkJCQkJICAgICAicG9ydCAlZFxuIiwKIAkJCQkJCSBwYXJhbXMtPnBvcnQpOwotCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICAiRXJyb3I6ICBQb3dlciIKLQkJCQkJCSAiIGZhdWx0IG9uICVzIFBvcnQgJWQgaGFzIgotCQkJCQkJICIgYmVlbiBkZXRlY3RlZCBhbmQgdGhlIgotCQkJCQkJICIgcG93ZXIgdG8gdGhhdCBTRlArIG1vZHVsZSIKLQkJCQkJCSAiIGhhcyBiZWVuIHJlbW92ZWQgdG8gcHJldmVudCIKLQkJCQkJCSAiIGZhaWx1cmUgb2YgdGhlIGNhcmQuIFBsZWFzZSIKLQkJCQkJCSAiIHJlbW92ZSB0aGUgU0ZQKyBtb2R1bGUgYW5kIgotCQkJCQkJICIgcmVzdGFydCB0aGUgc3lzdGVtIHRvIGNsZWFyIgotCQkJCQkJICIgdGhpcyBlcnJvci5cbiIKLQkJCSwgYnAtPmRldi0+bmFtZSwgcGFyYW1zLT5wb3J0KTsKKwkJCQkJbmV0ZGV2X2VycihicC0+ZGV2LCAiRXJyb3I6ICBQb3dlciBmYXVsdCBvbiBQb3J0ICVkIGhhcyBiZWVuIGRldGVjdGVkIGFuZCB0aGUgcG93ZXIgdG8gdGhhdCBTRlArIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIHRvIHByZXZlbnQgZmFpbHVyZSBvZiB0aGUgY2FyZC4gUGxlYXNlIHJlbW92ZSB0aGUgU0ZQKyBtb2R1bGUgYW5kIHJlc3RhcnQgdGhlIHN5c3RlbSB0byBjbGVhciB0aGlzIGVycm9yLlxuIiwKKwkJCQkJCSAgIHBhcmFtcy0+cG9ydCk7CiAJCQkJCS8qCiAJCQkJCSAqIERpc2FibGUgYWxsIFJYX0FMQVJNcyBleGNlcHQgZm9yCiAJCQkJCSAqIG1vZF9hYnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwppbmRleCAzMDZjMmI4Li5lZDc4NWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfbWFpbi5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTcsOCArNTcsOCBAQAogI2luY2x1ZGUgImJueDJ4X2luaXRfb3BzLmgiCiAjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS41Mi4xLTUiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMjAwOS8xMS8wOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjUyLjEtNyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDEwLzAyLzI4IgogI2RlZmluZSBCTlgyWF9CQ19WRVIJCTB4MDQwMjAwCiAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibngyeF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYm54MnhfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTApLCBCQ001NzcxMCB9LAogCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExKSwgQkNNNTc3MTEgfSwKIAl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUpLCBCQ001NzcxMUUgfSwKQEAgLTUxNCwyNCArNTE0LDI0IEBACiAKIAltYXJrID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArIDB4ZjEwNCk7CiAJbWFyayA9ICgobWFyayArIDB4MykgJiB+MHgzKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJiZWdpbiBmdyBkdW1wIChtYXJrIDB4JXgpXG4iLCBtYXJrKTsKKwlwcl9lcnIoImJlZ2luIGZ3IGR1bXAgKG1hcmsgMHgleClcbiIsIG1hcmspOwogCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCk7CisJcHJfZXJyKCIiKTsKIAlmb3IgKG9mZnNldCA9IG1hcmsgLSAweDA4MDAwMDAwOyBvZmZzZXQgPD0gMHhGOTAwOyBvZmZzZXQgKz0gMHg4KjQpIHsKIAkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKIAkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsKIAkJCQkJCSAgb2Zmc2V0ICsgNCp3b3JkKSk7CiAJCWRhdGFbOF0gPSAweDA7Ci0JCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgKGNoYXIgKilkYXRhKTsKKwkJcHJfY29udCgiJXMiLCAoY2hhciAqKWRhdGEpOwogCX0KIAlmb3IgKG9mZnNldCA9IDB4RjEwODsgb2Zmc2V0IDw9IG1hcmsgLSAweDA4MDAwMDAwOyBvZmZzZXQgKz0gMHg4KjQpIHsKIAkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKIAkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsKIAkJCQkJCSAgb2Zmc2V0ICsgNCp3b3JkKSk7CiAJCWRhdGFbOF0gPSAweDA7Ci0JCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgKGNoYXIgKilkYXRhKTsKKwkJcHJfY29udCgiJXMiLCAoY2hhciAqKWRhdGEpOwogCX0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJlbmQgb2YgZncgZHVtcFxuIik7CisJcHJfZXJyKCJlbmQgb2YgZncgZHVtcFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3BhbmljX2R1bXAoc3RydWN0IGJueDJ4ICpicCkKQEAgLTk1NywyMSArOTU3LDM0IEBACiAJZnAtPnR4X3BrdF9jb25zID0gc3dfY29uczsKIAlmcC0+dHhfYmRfY29ucyA9IGJkX2NvbnM7CiAKKwkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2JkX2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCisJICogYmVmb3JlIGNoZWNraW5nIGZvciBuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKCkuICBXaXRob3V0IHRoZQorCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKKwkgKiBzdGFydF94bWl0KCkgd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZAorCSAqIGZvcmV2ZXIuCisJICovCisJc21wX3dtYigpOworCiAJLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCiAJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkpIHsKLQotCQkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2JkX2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCi0JCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKLQkJICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdAotCQkgKiBzdGFydF94bWl0KCkgd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZAotCQkgKiBmb3JldmVyLgorCQkvKiBUYWtpbmcgdHhfbG9jaygpIGlzIG5lZWRlZCB0byBwcmV2ZW50IHJlZW5hYmxpbmcgdGhlIHF1ZXVlCisJCSAqIHdoaWxlIGl0J3MgZW1wdHkuIFRoaXMgY291bGQgaGF2ZSBoYXBwZW4gaWYgcnhfYWN0aW9uKCkgZ2V0cworCQkgKiBzdXNwZW5kZWQgaW4gYm54MnhfdHhfaW50KCkgYWZ0ZXIgdGhlIGNvbmRpdGlvbiBiZWZvcmUKKwkJICogbmV0aWZfdHhfd2FrZV9xdWV1ZSgpLCB3aGlsZSB0eF9hY3Rpb24gKGJueDJ4X3N0YXJ0X3htaXQoKSk6CisJCSAqCisJCSAqIHN0b3BzIHRoZSBxdWV1ZS0+c2VlcyBmcmVzaCB0eF9iZF9jb25zLT5yZWxlYXNlcyB0aGUgcXVldWUtPgorCQkgKiBzZW5kcyBzb21lIHBhY2tldHMgY29uc3VtaW5nIHRoZSB3aG9sZSBxdWV1ZSBhZ2Fpbi0+CisJCSAqIHN0b3BzIHRoZSBxdWV1ZQogCQkgKi8KLQkJc21wX21iKCk7CisKKwkJX19uZXRpZl90eF9sb2NrKHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCQlpZiAoKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgJiYKIAkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKIAkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQogCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjEzNiw3ICsyMTQ5LDcgQEAKIHsKIAlpZiAoYnAtPmZsYWdzICYgTUZfRlVOQ19ESVMpIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIE5JQyBMaW5rIGlzIERvd25cbiIsIGJwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGJwLT5kZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjE0NSw3ICsyMTU4LDcgQEAKIAogCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCiAJCQluZXRpZl9jYXJyaWVyX29uKGJwLT5kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgTklDIExpbmsgaXMgVXAsICIsIGJwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhicC0+ZGV2LCAiTklDIExpbmsgaXMgVXAsICIpOwogCiAJCWxpbmVfc3BlZWQgPSBicC0+bGlua192YXJzLmxpbmVfc3BlZWQ7CiAJCWlmIChJU19FMUhNRihicCkpIHsKQEAgLTIxNTcsMjkgKzIxNzAsMjkgQEAKIAkJCWlmICh2bl9tYXhfcmF0ZSA8IGxpbmVfc3BlZWQpCiAJCQkJbGluZV9zcGVlZCA9IHZuX21heF9yYXRlOwogCQl9Ci0JCXByaW50aygiJWQgTWJwcyAiLCBsaW5lX3NwZWVkKTsKKwkJcHJfY29udCgiJWQgTWJwcyAiLCBsaW5lX3NwZWVkKTsKIAogCQlpZiAoYnAtPmxpbmtfdmFycy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQlwcmludGsoImZ1bGwgZHVwbGV4Iik7CisJCQlwcl9jb250KCJmdWxsIGR1cGxleCIpOwogCQllbHNlCi0JCQlwcmludGsoImhhbGYgZHVwbGV4Iik7CisJCQlwcl9jb250KCJoYWxmIGR1cGxleCIpOwogCiAJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAhPSBCTlgyWF9GTE9XX0NUUkxfTk9ORSkgewogCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSB7Ci0JCQkJcHJpbnRrKCIsIHJlY2VpdmUgIik7CisJCQkJcHJfY29udCgiLCByZWNlaXZlICIpOwogCQkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmCiAJCQkJICAgIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKLQkJCQkJcHJpbnRrKCImIHRyYW5zbWl0ICIpOworCQkJCQlwcl9jb250KCImIHRyYW5zbWl0ICIpOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoIiwgdHJhbnNtaXQgIik7CisJCQkJcHJfY29udCgiLCB0cmFuc21pdCAiKTsKIAkJCX0KLQkJCXByaW50aygiZmxvdyBjb250cm9sIE9OIik7CisJCQlwcl9jb250KCJmbG93IGNvbnRyb2wgT04iKTsKIAkJfQotCQlwcmludGsoIlxuIik7CisJCXByX2NvbnQoIlxuIik7CiAKIAl9IGVsc2UgeyAvKiBsaW5rX2Rvd24gKi8KIAkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIE5JQyBMaW5rIGlzIERvd25cbiIsIGJwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGJwLT5kZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKIAl9CiB9CiAKQEAgLTI4OTgsMTAgKzI5MTEsOCBAQAogCQkgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKIAogCS8qIGxvZyB0aGUgZmFpbHVyZSAqLwotCXByaW50ayhLRVJOX0VSUiBQRlggIkZhbiBGYWlsdXJlIG9uIE5ldHdvcmsgQ29udHJvbGxlciAlcyBoYXMgY2F1c2VkIgotCSAgICAgICAiIHRoZSBkcml2ZXIgdG8gc2h1dGRvd24gdGhlIGNhcmQgdG8gcHJldmVudCBwZXJtYW5lbnQiCi0JICAgICAgICIgZGFtYWdlLiAgUGxlYXNlIGNvbnRhY3QgRGVsbCBTdXBwb3J0IGZvciBhc3Npc3RhbmNlXG4iLAotCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwluZXRkZXZfZXJyKGJwLT5kZXYsICJGYW4gRmFpbHVyZSBvbiBOZXR3b3JrIENvbnRyb2xsZXIgaGFzIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXRkb3duIHRoZSBjYXJkIHRvIHByZXZlbnQgcGVybWFuZW50IGRhbWFnZS5cbiIKKwkJICAgIlBsZWFzZSBjb250YWN0IERlbGwgU3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCkBAIC00Mjk2LDcgKzQzMDcsNyBAQAogCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOwogCWJueDJ4X2Rydl9zdGF0c191cGRhdGUoYnApOwogCi0JaWYgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19USU1FUikgeworCWlmIChuZXRpZl9tc2dfdGltZXIoYnApKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAwX3J4ID0gYnAtPmZwOwogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwMF90eCA9IGJwLT5mcDsKIAkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9CkBAIC00MzA2LDcgKzQzMTcsNyBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOwogCQlpbnQgaTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6XG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBicC0+ZGV2LCAiXG4iKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgdHggYXZhaWwgKCU0eCkgIHR4IGhjIGlkeCAoJXgpIgogCQkJCSAgIiAgdHggcGt0ICglbHgpXG4iLAogCQkgICAgICAgYm54MnhfdHhfYXZhaWwoZnAwX3R4KSwKQEAgLTQ0NjQsNyArNDQ3NSw3IEBACiAJLyogTWFrZSBzdXJlIHRoZSBzdGF0ZSBoYXMgYmVlbiAiY2hhbmdlZCIgKi8KIAlzbXBfd21iKCk7CiAKLQlpZiAoKGV2ZW50ICE9IFNUQVRTX0VWRU5UX1VQREFURSkgfHwgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19USU1FUikpCisJaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IG5ldGlmX21zZ190aW1lcihicCkpCiAJCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRlICVkIC0+IGV2ZW50ICVkIC0+IHN0YXRlICVkXG4iLAogCQkgICBzdGF0ZSwgZXZlbnQsIGJwLT5zdGF0c19zdGF0ZSk7CiB9CkBAIC01Njc0LDggKzU2ODUsNyBAQAogCWJwLT5ndW56aXBfYnVmID0gTlVMTDsKIAogZ3VuemlwX25vbWVtMToKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQ2Fubm90IGFsbG9jYXRlIGZpcm13YXJlIGJ1ZmZlciBmb3IiCi0JICAgICAgICIgdW4tY29tcHJlc3Npb25cbiIsIGJwLT5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIoYnAtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgZm9yIHVuLWNvbXByZXNzaW9uXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNTcyMSwxNCArNTczMSwxMyBAQAogCiAJcmMgPSB6bGliX2luZmxhdGUoYnAtPnN0cm0sIFpfRklOSVNIKTsKIAlpZiAoKHJjICE9IFpfT0spICYmIChyYyAhPSBaX1NUUkVBTV9FTkQpKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogJXNcbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+c3RybS0+bXNnKTsKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogJXNcbiIsCisJCQkgICBicC0+c3RybS0+bXNnKTsKIAogCWJwLT5ndW56aXBfb3V0bGVuID0gKEZXX0JVRl9TSVpFIC0gYnAtPnN0cm0tPmF2YWlsX291dCk7CiAJaWYgKGJwLT5ndW56aXBfb3V0bGVuICYgMHgzKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjoiCi0JCQkJICAgICIgZ3VuemlwX291dGxlbiAoJWQpIG5vdCBhbGlnbmVkXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPmd1bnppcF9vdXRsZW4pOworCQluZXRkZXZfZXJyKGJwLT5kZXYsICJGaXJtd2FyZSBkZWNvbXByZXNzaW9uIGVycm9yOiBndW56aXBfb3V0bGVuICglZCkgbm90IGFsaWduZWRcbiIsCisJCQkgICBicC0+Z3VuemlwX291dGxlbik7CiAJYnAtPmd1bnppcF9vdXRsZW4gPj49IDI7CiAKIAl6bGliX2luZmxhdGVFbmQoYnAtPnN0cm0pOwpAQCAtNjIxMyw4ICs2MjIyLDggQEAKIAogCWlmIChzaXplb2YodW5pb24gY2R1X2NvbnRleHQpICE9IDEwMjQpCiAJCS8qIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCBhIGNvbnRleHQgaXMgMTAyNCBieXRlcyAqLwotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInBsZWFzZSBhZGp1c3QgdGhlIHNpemUgb2YiCi0JCSAgICAgICAiIGNkdV9jb250ZXh0KCVsZClcbiIsIChsb25nKXNpemVvZih1bmlvbiBjZHVfY29udGV4dCkpOworCQlwcl9hbGVydCgicGxlYXNlIGFkanVzdCB0aGUgc2l6ZSBvZiBjZHVfY29udGV4dCglbGQpXG4iLAorCQkJIChsb25nKXNpemVvZih1bmlvbiBjZHVfY29udGV4dCkpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ0RVX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCXZhbCA9ICg0IDw8IDI0KSArICgwIDw8IDEyKSArIDEwMjQ7CkBAIC02OTM4LDE5ICs2OTQ3LDIxIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54MnhfZnJlZV9pcnEoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkaXNhYmxlX29ubHkpCiB7CiAJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgewotCQlibngyeF9mcmVlX21zaXhfaXJxcyhicCk7CisJCWlmICghZGlzYWJsZV9vbmx5KQorCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOwogCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKIAkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lYX0ZMQUc7CiAKIAl9IGVsc2UgaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7Ci0JCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOworCQlpZiAoIWRpc2FibGVfb25seSkKKwkJCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOwogCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOwogCQlicC0+ZmxhZ3MgJj0gflVTSU5HX01TSV9GTEFHOwogCi0JfSBlbHNlCisJfSBlbHNlIGlmICghZGlzYWJsZV9vbmx5KQogCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKIH0KIApAQCAtNzAxOCwxMSArNzAyOSwxMCBAQAogCX0KIAogCWkgPSBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSS1YICBJUlFzOiBzcCAlZCAgZnBbJWRdICVkIgotCSAgICAgICAiIC4uLiBmcFslZF0gJWRcbiIsCi0JICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKLQkgICAgICAgMCwgYnAtPm1zaXhfdGFibGVbb2Zmc2V0XS52ZWN0b3IsCi0JICAgICAgIGkgLSAxLCBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKKwluZXRkZXZfaW5mbyhicC0+ZGV2LCAidXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcFslZF0gJWQgLi4uIGZwWyVkXSAlZFxuIiwKKwkJICAgIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKKwkJICAgIDAsIGJwLT5tc2l4X3RhYmxlW29mZnNldF0udmVjdG9yLAorCQkgICAgaSAtIDEsIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDQzLDggKzc0NTMsMTAgQEAKIAogCXJjID0gYm54Mnhfc2V0X251bV9xdWV1ZXMoYnApOwogCi0JaWYgKGJueDJ4X2FsbG9jX21lbShicCkpCisJaWYgKGJueDJ4X2FsbG9jX21lbShicCkpIHsKKwkJYm54MnhfZnJlZV9pcnEoYnAsIHRydWUpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9CkBAIC03NDU5LDcgKzc0NzEsNyBAQAogCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpIHsKIAkJcmMgPSBibngyeF9yZXFfbXNpeF9pcnFzKGJwKTsKIAkJaWYgKHJjKSB7Ci0JCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKKwkJCWJueDJ4X2ZyZWVfaXJxKGJwLCB0cnVlKTsKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KIAl9IGVsc2UgewpAQCAtNzQ3MSwxNCArNzQ4MywxMyBAQAogCQlyYyA9IGJueDJ4X3JlcV9pcnEoYnApOwogCQlpZiAocmMpIHsKIAkJCUJOWDJYX0VSUigiSVJRIHJlcXVlc3QgZmFpbGVkICByYyAlZCwgYWJvcnRpbmdcbiIsIHJjKTsKLQkJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKLQkJCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOworCQkJYm54MnhfZnJlZV9pcnEoYnAsIHRydWUpOwogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQogCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKIAkJCWJwLT5kZXYtPmlycSA9IGJwLT5wZGV2LT5pcnE7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSSAgSVJRICVkXG4iLAotCQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5wZGV2LT5pcnEpOworCQkJbmV0ZGV2X2luZm8oYnAtPmRldiwgInVzaW5nIE1TSSAgSVJRICVkXG4iLAorCQkJCSAgICBicC0+cGRldi0+aXJxKTsKIAkJfQogCX0KIApAQCAtNzUyNyw2ICs3NTM4LDkgQEAKIAlyYyA9IGJueDJ4X2luaXRfaHcoYnAsIGxvYWRfY29kZSk7CiAJaWYgKHJjKSB7CiAJCUJOWDJYX0VSUigiSFcgaW5pdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7CisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1ApOworCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOwogCQlnb3RvIGxvYWRfZXJyb3IyOwogCX0KIApAQCAtNzY2NCw3ICs3Njc4LDcgQEAKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwogbG9hZF9lcnJvcjI6CiAJLyogUmVsZWFzZSBJUlFzICovCi0JYm54MnhfZnJlZV9pcnEoYnApOworCWJueDJ4X2ZyZWVfaXJxKGJwLCBmYWxzZSk7CiBsb2FkX2Vycm9yMToKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQpAQCAtNzg1NSw3ICs3ODY5LDcgQEAKIAlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCiAJLyogUmVsZWFzZSBJUlFzICovCi0JYm54MnhfZnJlZV9pcnEoYnApOworCWJueDJ4X2ZyZWVfaXJxKGJwLCBmYWxzZSk7CiAKIAkvKiBXYWl0IHVudGlsIHR4IGZhc3RwYXRoIHRhc2tzIGNvbXBsZXRlICovCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKQEAgLTgyOTcsOCArODMxMSw3IEBACiAJdmFsMyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzhdKTsKIAl2YWw0ID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bMTJdKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJwYXJ0IG51bWJlciAlWC0lWC0lWC0lWFxuIiwKLQkgICAgICAgdmFsLCB2YWwyLCB2YWwzLCB2YWw0KTsKKwlwcl9pbmZvKCJwYXJ0IG51bWJlciAlWC0lWC0lWC0lWFxuIiwgdmFsLCB2YWwyLCB2YWwzLCB2YWw0KTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3VwcG9ydGVkKHN0cnVjdCBibngyeCAqYnAsCkBAIC04OTA5LDE3ICs4OTIyLDE1IEBACiAJCWJueDJ4X3VuZGlfdW5sb2FkKGJwKTsKIAogCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlBHQSBkZXRlY3RlZFxuIik7CisJCXByX2VycigiRlBHQSBkZXRlY3RlZFxuIik7CiAKIAlpZiAoQlBfTk9NQ1AoYnApICYmIChmdW5jID09IDApKQotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiTUNQIGRpc2FibGVkLCBtdXN0IGxvYWQgZGV2aWNlcyBpbiBvcmRlciFcbiIpOworCQlwcl9lcnIoIk1DUCBkaXNhYmxlZCwgbXVzdCBsb2FkIGRldmljZXMgaW4gb3JkZXIhXG4iKTsKIAogCS8qIFNldCBtdWx0aSBxdWV1ZSBtb2RlICovCiAJaWYgKChtdWx0aV9tb2RlICE9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkgJiYKIAkgICAgKChpbnRfbW9kZSA9PSBJTlRfTU9ERV9JTlR4KSB8fCAoaW50X21vZGUgPT0gSU5UX01PREVfTVNJKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAiTXVsdGkgZGlzYWJsZWQgc2luY2UgaW50X21vZGUgcmVxdWVzdGVkIGlzIG5vdCBNU0ktWFxuIik7CisJCXByX2VycigiTXVsdGkgZGlzYWJsZWQgc2luY2UgaW50X21vZGUgcmVxdWVzdGVkIGlzIG5vdCBNU0ktWFxuIik7CiAJCW11bHRpX21vZGUgPSBFVEhfUlNTX01PREVfRElTQUJMRUQ7CiAJfQogCWJwLT5tdWx0aV9tb2RlID0gbXVsdGlfbW9kZTsKQEAgLTkzNDUsNyArOTM1Niw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gYnAtPm1zZ2xldmVsOworCXJldHVybiBicC0+bXNnX2VuYWJsZTsKIH0KIAogc3RhdGljIHZvaWQgYm54Mnhfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKQEAgLTkzNTMsNyArOTM2NCw3IEBACiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJYnAtPm1zZ2xldmVsID0gbGV2ZWw7CisJCWJwLT5tc2dfZW5hYmxlID0gbGV2ZWw7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtOTk2MiwxMiArOTk3MywxNCBAQAogCiAJLyogVFBBIHJlcXVpcmVzIFJ4IENTVU0gb2ZmbG9hZGluZyAqLwogCWlmICgoZGF0YSAmIEVUSF9GTEFHX0xSTykgJiYgYnAtPnJ4X2NzdW0pIHsKLQkJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQkJCWJwLT5mbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7Ci0JCQljaGFuZ2VkID0gMTsKLQkJfQotCisJCWlmICghZGlzYWJsZV90cGEpIHsKKwkJCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpIHsKKwkJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQkJCWJwLT5mbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7CisJCQkJY2hhbmdlZCA9IDE7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUlOVkFMOwogCX0gZWxzZSBpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7CiAJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwogCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKQEAgLTEwNDI1LDcgKzEwNDM4LDggQEAKIAogCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDA7CiAJaWYgKENISVBfSVNfRTEoYnApKQotCQljb25maWctPmhkci5vZmZzZXQgPSAoQlBfUE9SVChicCkgPyAzMiA6IDApOworCQkvKiB1c2UgbGFzdCB1bmljYXN0IGVudHJpZXMgKi8KKwkJY29uZmlnLT5oZHIub2Zmc2V0ID0gKEJQX1BPUlQoYnApID8gNjMgOiAzMSk7CiAJZWxzZQogCQljb25maWctPmhkci5vZmZzZXQgPSBCUF9GVU5DKGJwKTsKIAljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwpAQCAtMTA2NDQsNyArMTA2NTgsNyBAQAogCSgoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfQk9USCkgPT0gU1RBVFNfRkxBR1NfUE9SVCkKICNkZWZpbmUgSVNfRlVOQ19TVEFUKGkpCQkoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfRlVOQykKICNkZWZpbmUgSVNfRTFITUZfTU9ERV9TVEFUKGJwKSBcCi0JCQkoSVNfRTFITUYoYnApICYmICEoYnAtPm1zZ2xldmVsICYgQk5YMlhfTVNHX1NUQVRTKSkKKwkJCShJU19FMUhNRihicCkgJiYgIShicC0+bXNnX2VuYWJsZSAmIEJOWDJYX01TR19TVEFUUykpCiAKIHN0YXRpYyBpbnQgYm54MnhfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmluZ3NldCkKIHsKQEAgLTExNDcxLDcgKzExNDg1LDggQEAKIAkJcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfUFJPTUlTQzsKIAogCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkgKChkZXYtPm1jX2NvdW50ID4gQk5YMlhfTUFYX01VTFRJQ0FTVCkgJiYgQ0hJUF9JU19FMShicCkpKQorCQkgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEJOWDJYX01BWF9NVUxUSUNBU1QpICYmCisJCSAgQ0hJUF9JU19FMShicCkpKQogCQlyeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9BTExNVUxUSTsKIAogCWVsc2UgeyAvKiBzb21lIG11bHRpY2FzdHMgKi8KQEAgLTExNDgxLDEwICsxMTQ5Niw4IEBACiAJCQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPQogCQkJCQkJYm54Mnhfc3AoYnAsIG1jYXN0X2NvbmZpZyk7CiAKLQkJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJCSAgICAgbWNsaXN0ICYmIChpIDwgZGV2LT5tY19jb3VudCk7Ci0JCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0KKwkJCWkgPSAwOworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KIAkJCQkJY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9CiAJCQkJCXN3YWIxNigqKHUxNiAqKSZtY2xpc3QtPmRtaV9hZGRyWzBdKTsKQEAgLTExNTEyLDYgKzExNTI1LDcgQEAKIAkJCQkJCWNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIsCiAJCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCiAJCQkJCQljYW1fZW50cnkubHNiX21hY19hZGRyKTsKKwkJCQlpKys7CiAJCQl9CiAJCQlvbGQgPSBjb25maWctPmhkci5sZW5ndGg7CiAJCQlpZiAob2xkID4gaSkgewpAQCAtMTE1NTMsMTAgKzExNTY3LDcgQEAKIAogCQkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgNCAqIE1DX0hBU0hfU0laRSk7CiAKLQkJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJCSAgICAgbWNsaXN0ICYmIChpIDwgZGV2LT5tY19jb3VudCk7Ci0JCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0KKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJBZGRpbmcgbWNhc3QgTUFDOiAlcE1cbiIsCiAJCQkJICAgbWNsaXN0LT5kbWlfYWRkcik7CiAKQEAgLTExNzMxLDcgKzExNzQyLDcgQEAKIAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBwb2xsX2JueDJ4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMTc1NSw3ICsxMTc2Niw3IEBACiAjaWZkZWYgQkNNX1ZMQU4KIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBibngyeF92bGFuX3J4X3JlZ2lzdGVyLAogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfQ09OVFJPTExFUikgfHwgZGVmaW5lZChDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUikKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF9ibngyeCwKICNlbmRpZgogfTsKQEAgLTExNzc2LDIwICsxMTc4NywxOCBAQAogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CisJCXByX2VycigiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIgotCQkgICAgICAgIiBhYm9ydGluZ1xuIik7CisJCXByX2VycigiQ2Fubm90IGZpbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMikgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgc2Vjb25kIFBDSSBkZXZpY2UiCi0JCSAgICAgICAiIGJhc2UgYWRkcmVzcywgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBmaW5kIHNlY29uZCBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzcywgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KQEAgLTExNzk3LDggKzExODA2LDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJnBkZXYtPmVuYWJsZV9jbnQpID09IDEpIHsKIAkJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9NT0RVTEVfTkFNRSk7CiAJCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCIKLQkJCSAgICAgICAiIGFib3J0aW5nXG4iKTsKKwkJCXByX2VycigiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAkJfQogCkBAIC0xMTgwOCwxNiArMTE4MTYsMTQgQEAKIAogCWJwLT5wbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwogCWlmIChicC0+cG1fY2FwID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgcG93ZXIgbWFuYWdlbWVudCIKLQkJICAgICAgICIgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCX0KIAogCWJwLT5wY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmIChicC0+cGNpZV9jYXAgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCIKLQkJICAgICAgICIgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBmaW5kIFBDSSBFeHByZXNzIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKIAl9CkBAIC0xMTgyNSwxNSArMTE4MzEsMTMgQEAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSA9PSAwKSB7CiAJCWJwLT5mbGFncyB8PSBVU0lOR19EQUNfRkxBRzsKIAkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2siCi0JCQkgICAgICAgIiBmYWlsZWQsIGFib3J0aW5nXG4iKTsKKwkJCXByX2VycigicGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJCX0KIAogCX0gZWxzZSBpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IERNQSwiCi0JCSAgICAgICAiIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBETUEsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKIAl9CkBAIC0xMTg0Niw3ICsxMTg1MCw3IEBACiAKIAlicC0+cmVndmlldyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKIAlpZiAoIWJwLT5yZWd2aWV3KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgcmVnaXN0ZXIgc3BhY2UsIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgbWFwIHJlZ2lzdGVyIHNwYWNlLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJfQpAQCAtMTE4NTUsNyArMTE4NTksNyBAQAogCQkJCQltaW5fdCh1NjQsIEJOWDJYX0RCX1NJWkUsCiAJCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpKTsKIAlpZiAoIWJwLT5kb29yYmVsbHMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBkb29yYmVsbCBzcGFjZSwgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBtYXAgZG9vcmJlbGwgc3BhY2UsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQpAQCAtMTE5NTcsOCArMTE5NjEsNyBAQAogCQlvZmZzZXQgPSBiZTMyX3RvX2NwdShzZWN0aW9uc1tpXS5vZmZzZXQpOwogCQlsZW4gPSBiZTMyX3RvX2NwdShzZWN0aW9uc1tpXS5sZW4pOwogCQlpZiAob2Zmc2V0ICsgbGVuID4gZmlybXdhcmUtPnNpemUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gJWQgbGVuZ3RoIGlzIG91dCBvZiAiCi0JCQkJCSAgICAiYm91bmRzXG4iLCBpKTsKKwkJCXByX2VycigiU2VjdGlvbiAlZCBsZW5ndGggaXMgb3V0IG9mIGJvdW5kc1xuIiwgaSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTExOTcwLDggKzExOTczLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiZTMyX3RvX2NwdShmd19oZHItPmluaXRfb3BzX29mZnNldHMubGVuKSAvIDI7IGkrKykgewogCQlpZiAoYmUxNl90b19jcHUob3BzX29mZnNldHNbaV0pID4gbnVtX29wcykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2VjdGlvbiBvZmZzZXQgJWQgaXMgb3V0IG9mICIKLQkJCQkJICAgICJib3VuZHNcbiIsIGkpOworCQkJcHJfZXJyKCJTZWN0aW9uIG9mZnNldCAlZCBpcyBvdXQgb2YgYm91bmRzXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTE5ODMsOCArMTE5ODUsNyBAQAogCSAgICAoZndfdmVyWzFdICE9IEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04pIHx8CiAJICAgIChmd192ZXJbMl0gIT0gQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTikgfHwKIAkgICAgKGZ3X3ZlclszXSAhPSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJCYWQgRlcgdmVyc2lvbjolZC4lZC4lZC4lZC4iCi0JCQkJICAgICIgU2hvdWxkIGJlICVkLiVkLiVkLiVkXG4iLAorCQlwcl9lcnIoIkJhZCBGVyB2ZXJzaW9uOiVkLiVkLiVkLiVkLiBTaG91bGQgYmUgJWQuJWQuJWQuJWRcbiIsCiAJCSAgICAgICBmd192ZXJbMF0sIGZ3X3ZlclsxXSwgZndfdmVyWzJdLAogCQkgICAgICAgZndfdmVyWzNdLCBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OLAogCQkgICAgICAgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTiwKQEAgLTEyMDM0LDE4ICsxMjAzNSwxNyBAQAogCQl0YXJnZXRbaV0gPSBiZTE2X3RvX2NwdShzb3VyY2VbaV0pOwogfQogCi0jZGVmaW5lIEJOWDJYX0FMTE9DX0FORF9TRVQoYXJyLCBsYmwsIGZ1bmMpIFwKLQlkbyB7IFwKLQkJdTMyIGxlbiA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+YXJyLmxlbik7IFwKLQkJYnAtPmFyciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsgXAotCQlpZiAoIWJwLT5hcnIpIHsgXAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzICIgXAotCQkJCQkgICAgImZvciAiI2FyciJcbiIsIGxlbik7IFwKLQkJCWdvdG8gbGJsOyBcCi0JCX0gXAotCQlmdW5jKGJwLT5maXJtd2FyZS0+ZGF0YSArIGJlMzJfdG9fY3B1KGZ3X2hkci0+YXJyLm9mZnNldCksIFwKLQkJICAgICAodTggKilicC0+YXJyLCBsZW4pOyBcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgQk5YMlhfQUxMT0NfQU5EX1NFVChhcnIsIGxibCwgZnVuYykJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1MzIgbGVuID0gYmUzMl90b19jcHUoZndfaGRyLT5hcnIubGVuKTsJCQkJXAorCWJwLT5hcnIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CQkJCVwKKwlpZiAoIWJwLT5hcnIpIHsJCQkJCQkJXAorCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIiNhcnIiXG4iLCBsZW4pOyBcCisJCWdvdG8gbGJsOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJZnVuYyhicC0+ZmlybXdhcmUtPmRhdGEgKyBiZTMyX3RvX2NwdShmd19oZHItPmFyci5vZmZzZXQpLAlcCisJICAgICAodTggKilicC0+YXJyLCBsZW4pOwkJCQkJXAorfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMjA1OCwxOCArMTIwNTgsMTcgQEAKIAllbHNlCiAJCWZ3X2ZpbGVfbmFtZSA9IEZXX0ZJTEVfTkFNRV9FMUg7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTG9hZGluZyAlc1xuIiwgZndfZmlsZV9uYW1lKTsKKwlwcl9pbmZvKCJMb2FkaW5nICVzXG4iLCBmd19maWxlX25hbWUpOwogCiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZicC0+ZmlybXdhcmUsIGZ3X2ZpbGVfbmFtZSwgZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzXG4iLAotCQkgICAgICAgZndfZmlsZV9uYW1lKTsKKwkJcHJfZXJyKCJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CiAJCWdvdG8gcmVxdWVzdF9maXJtd2FyZV9leGl0OwogCX0KIAogCXJjID0gYm54MnhfY2hlY2tfZmlybXdhcmUoYnApOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3JydXB0IGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CisJCXByX2VycigiQ29ycnVwdCBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlX25hbWUpOwogCQlnb3RvIHJlcXVlc3RfZmlybXdhcmVfZXhpdDsKIAl9CiAKQEAgLTEyMTI4LDEyICsxMjEyNywxMiBAQAogCS8qIGRldiB6ZXJvZWQgaW4gaW5pdF9ldGhlcmRldiAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZigqYnApLCBNQVhfQ09OVEVYVCk7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldCBkZXZpY2VcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWJwLT5tc2dsZXZlbCA9IGRlYnVnOworCWJwLT5tc2dfZW5hYmxlID0gZGVidWc7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIApAQCAtMTIxNTAsNyArMTIxNDksNyBAQAogCS8qIFNldCBpbml0IGFycmF5cyAqLwogCXJjID0gYm54MnhfaW5pdF9maXJtd2FyZShicCwgJnBkZXYtPmRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIGxvYWRpbmcgZmlybXdhcmVcbiIpOworCQlwcl9lcnIoIkVycm9yIGxvYWRpbmcgZmlybXdhcmVcbiIpOwogCQlnb3RvIGluaXRfb25lX2V4aXQ7CiAJfQogCkBAIC0xMjE2MSwxMiArMTIxNjAsMTEgQEAKIAl9CiAKIAlibngyeF9nZXRfcGNpZV93aWR0aF9zcGVlZChicCwgJnBjaWVfd2lkdGgsICZwY2llX3NwZWVkKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKLQkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAotCSAgICAgICAoQ0hJUF9SRVYoYnApID4+IDEyKSArICdBJywgKENISVBfTUVUQUwoYnApID4+IDQpLAotCSAgICAgICBwY2llX3dpZHRoLCAocGNpZV9zcGVlZCA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKLQkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOwotCXByaW50ayhLRVJOX0NPTlQgIm5vZGUgYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCW5ldGRldl9pbmZvKGRldiwgIiVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwgSVJRICVkLCBub2RlIGFkZHIgJXBNXG4iLAorCQkgICAgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQkgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKKwkJICAgIHBjaWVfd2lkdGgsIChwY2llX3NwZWVkID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAorCQkgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEyMTk0LDcgKzEyMTkyLDcgQEAKIAlzdHJ1Y3QgYm54MnggKmJwOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CisJCXByX2VycigiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CiAJCXJldHVybjsKIAl9CiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTIyMjcsNyArMTIyMjUsNyBAQAogCXN0cnVjdCBibngyeCAqYnA7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKKwkJcHJfZXJyKCJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMjU5LDcgKzEyMjU3LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKKwkJcHJfZXJyKCJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMjk4LDcgKzEyMjk2LDcgQEAKIAlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0c19zdGF0ZSAtIERJU0FCTEVEXG4iKTsKIAogCS8qIFJlbGVhc2UgSVJRcyAqLwotCWJueDJ4X2ZyZWVfaXJxKGJwKTsKKwlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOwogCiAJaWYgKENISVBfSVNfRTEoYnApKSB7CiAJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CkBAIC0xMjQ2MiwxNyArMTI0NjAsMTcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogCiAJYm54Mnhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiYm54MngiKTsKIAlpZiAoYm54Mnhfd3EgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CisJCXByX2VycigiQ2Fubm90IGNyZWF0ZSB3b3JrcXVldWVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZibngyeF9wY2lfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBkcml2ZXJcbiIpOworCQlwcl9lcnIoIkNhbm5vdCByZWdpc3RlciBkcml2ZXJcbiIpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShibngyeF93cSk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBlZmEwZTQxLi40MzBjMDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTI2MTUsNiArMjYxNSwxNyBAQAogCXVuc2lnbmVkIGNoYXIgKmFycF9wdHI7CiAJX19iZTMyIHNpcCwgdGlwOwogCisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgeworCQkvKgorCQkgKiBXaGVuIHVzaW5nIFZMQU5TIGFuZCBib25kaW5nLCBkZXYgYW5kIG9yaXZfZGV2IG1heSBiZQorCQkgKiBpbmNvcnJlY3QgaWYgdGhlIHBoeXNpY2FsIGludGVyZmFjZSBzdXBwb3J0cyBWTEFOCisJCSAqIGFjY2VsZXJhdGlvbi4gIFdpdGggdGhpcyBjaGFuZ2UgQVJQIHZhbGlkYXRpb24gbm93CisJCSAqIHdvcmtzIGZvciBob3N0cyBvbmx5IHJlYWNoYWJsZSBvbiB0aGUgVkxBTiBpbnRlcmZhY2UuCisJCSAqLworCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOworCQlvcmlnX2RldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGRldl9uZXQoc2tiLT5kZXYpLHNrYi0+c2tiX2lpZik7CisJfQorCiAJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpIHx8ICEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQogCQlnb3RvIG91dDsKIApAQCAtMzI5Niw3ICszMzA3LDcgQEAKIC8qIENyZWF0ZSB0aGUgYm9uZGluZyBkaXJlY3RvcnkgdW5kZXIgL3Byb2MvbmV0LCBpZiBkb2Vzbid0IGV4aXN0IHlldC4KICAqIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrLgogICovCi1zdGF0aWMgdm9pZCBib25kX2NyZWF0ZV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQorc3RhdGljIHZvaWQgX19uZXRfaW5pdCBib25kX2NyZWF0ZV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQogewogCWlmICghYm4tPnByb2NfZGlyKSB7CiAJCWJuLT5wcm9jX2RpciA9IHByb2NfbWtkaXIoRFJWX05BTUUsIGJuLT5uZXQtPnByb2NfbmV0KTsKQEAgLTMzMDksNyArMzMyMCw3IEBACiAvKiBEZXN0cm95IHRoZSBib25kaW5nIGRpcmVjdG9yeSB1bmRlciAvcHJvYy9uZXQsIGlmIGVtcHR5LgogICogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2suCiAgKi8KLXN0YXRpYyB2b2lkIGJvbmRfZGVzdHJveV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBib25kX2Rlc3Ryb3lfcHJvY19kaXIoc3RydWN0IGJvbmRfbmV0ICpibikKIHsKIAlpZiAoYm4tPnByb2NfZGlyKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBibi0+bmV0LT5wcm9jX25ldCk7CkBAIC0zMzI3LDExICszMzM4LDExIEBACiB7CiB9CiAKLXN0YXRpYyB2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZGlyKHN0cnVjdCBib25kX25ldCAqYm4pCitzdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9jcmVhdGVfcHJvY19kaXIoc3RydWN0IGJvbmRfbmV0ICpibikKIHsKIH0KIAotc3RhdGljIHZvaWQgYm9uZF9kZXN0cm95X3Byb2NfZGlyKHN0cnVjdCBib25kX25ldCAqYm4pCitzdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9kZXN0cm95X3Byb2NfZGlyKHN0cnVjdCBib25kX25ldCAqYm4pCiB7CiB9CiAKQEAgLTM3MzEsNyArMzc0Miw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJvbmRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmYm9uZC0+c3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmJvbmRfZGV2LT5zdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBsb2NhbF9zdGF0czsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwogCWludCBpOwpAQCAtNDkzNSw2ICs0OTQ2LDggQEAKIAl9CiAKIAlyZXMgPSByZWdpc3Rlcl9uZXRkZXZpY2UoYm9uZF9kZXYpOworCWlmIChyZXMgPCAwKQorCQlnb3RvIG91dF9uZXRkZXY7CiAKIG91dDoKIAlydG5sX3VubG9jaygpOwpAQCAtNDk0NCw3ICs0OTU3LDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIGludCBib25kX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBib25kX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgYm9uZF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBib25kX25ldF9pZCk7CiAKQEAgLTQ5NTYsNyArNDk2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJvbmRfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBib25kX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgYm9uZF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBib25kX25ldF9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggNTU4ZWMxMy4uMjU3YTdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTE5Nyw3ICsxOTcsNiBAQAogCXM4CSBzZW5kX2dyYXRfYXJwOwogCXM4CSBzZW5kX3Vuc29sX25hOwogCXM4CSBzZXR1cF9ieV9zbGF2ZTsKLQlzdHJ1Y3QgICBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0ICAgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7CiAJY2hhciAgICAgcHJvY19maWxlX25hbWVbSUZOQU1TSVpdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYwppbmRleCAxNjZjYzdlLi5hMmYyOWEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMKQEAgLTM0Miw2ICszNDIsOSBAQAogCXVuc2lnbmVkIGludCBtYiwgcHJpbzsKIAl1MzIgcmVnX21pZCwgcmVnX21jcjsKIAorCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAltYiA9IGdldF90eF9uZXh0X21iKHByaXYpOwogCXByaW8gPSBnZXRfdHhfbmV4dF9wcmlvKHByaXYpOwogCkBAIC0xMDcwLDYgKzEwNzMsNyBAQAogCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmYXQ5MV9iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9iaXR0aW1pbmcgPSBhdDkxX3NldF9iaXR0aW1pbmc7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gYXQ5MV9zZXRfbW9kZTsKKwlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFXzNfU0FNUExFUzsKIAlwcml2LT5yZWdfYmFzZSA9IGFkZHI7CiAJcHJpdi0+ZGV2ID0gZGV2OwogCXByaXYtPmNsayA9IGNsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9iZmluX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKaW5kZXggMGVjMTUyNC4uYmY3ZjliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKQEAgLTMxOCw2ICszMTgsOSBAQAogCXUxNiB2YWw7CiAJaW50IGk7CiAKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IoZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJLyogZmlsbCBpZCAqLwpAQCAtNjAwLDYgKzYwMyw3IEBACiAJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZiZmluX2Nhbl9iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9iaXR0aW1pbmcgPSBiZmluX2Nhbl9zZXRfYml0dGltaW5nOwogCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IGJmaW5fY2FuX3NldF9tb2RlOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOwogCiAJcmV0dXJuIGRldjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwppbmRleCBjMWJiMjlmLi45MDRhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCkBAIC01NzQsNiArNTc0LDcgQEAKIAlbSUZMQV9DQU5fQklUVElNSU5HX0NPTlNUXQogCQkJCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0KSB9LAogCVtJRkxBX0NBTl9DTE9DS10JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGNhbl9jbG9jaykgfSwKKwlbSUZMQV9DQU5fQkVSUl9DT1VOVEVSXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgY2FuX2JlcnJfY291bnRlcikgfSwKIH07CiAKIHN0YXRpYyBpbnQgY2FuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU5Miw2ICs1OTMsOCBAQAogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKIAkJCXJldHVybiAtRUJVU1k7CiAJCWNtID0gbmxhX2RhdGEoZGF0YVtJRkxBX0NBTl9DVFJMTU9ERV0pOworCQlpZiAoY20tPmZsYWdzICYgfnByaXYtPmN0cmxtb2RlX3N1cHBvcnRlZCkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJcHJpdi0+Y3RybG1vZGUgJj0gfmNtLT5tYXNrOwogCQlwcml2LT5jdHJsbW9kZSB8PSBjbS0+ZmxhZ3M7CiAJfQpAQCAtNjQ3LDYgKzY1MCw4IEBACiAJc2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7ICAvKiBJRkxBX0NBTl9SRVNUQVJUX01TICovCiAJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGNhbl9iaXR0aW1pbmcpOyAvKiBJRkxBX0NBTl9CSVRUSU1JTkcgKi8KIAlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2Nsb2NrKTsgICAgIC8qIElGTEFfQ0FOX0NMT0NLICovCisJaWYgKHByaXYtPmRvX2dldF9iZXJyX2NvdW50ZXIpICAgICAgICAvKiBJRkxBX0NBTl9CRVJSX0NPVU5URVIgKi8KKwkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIpOwogCWlmIChwcml2LT5iaXR0aW1pbmdfY29uc3QpCSAgICAgIC8qIElGTEFfQ0FOX0JJVFRJTUlOR19DT05TVCAqLwogCQlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCk7CiAKQEAgLTY1Nyw2ICs2NjIsNyBAQAogewogCXN0cnVjdCBjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGNhbl9jdHJsbW9kZSBjbSA9IHsuZmxhZ3MgPSBwcml2LT5jdHJsbW9kZX07CisJc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgYmVjOwogCWVudW0gY2FuX3N0YXRlIHN0YXRlID0gcHJpdi0+c3RhdGU7CiAKIAlpZiAocHJpdi0+ZG9fZ2V0X3N0YXRlKQpAQCAtNjY3LDYgKzY3Myw4IEBACiAJTkxBX1BVVChza2IsIElGTEFfQ0FOX0JJVFRJTUlORywKIAkJc2l6ZW9mKHByaXYtPmJpdHRpbWluZyksICZwcml2LT5iaXR0aW1pbmcpOwogCU5MQV9QVVQoc2tiLCBJRkxBX0NBTl9DTE9DSywgc2l6ZW9mKGNtKSwgJnByaXYtPmNsb2NrKTsKKwlpZiAocHJpdi0+ZG9fZ2V0X2JlcnJfY291bnRlciAmJiAhcHJpdi0+ZG9fZ2V0X2JlcnJfY291bnRlcihkZXYsICZiZWMpKQorCQlOTEFfUFVUKHNrYiwgSUZMQV9DQU5fQkVSUl9DT1VOVEVSLCBzaXplb2YoYmVjKSwgJmJlYyk7CiAJaWYgKHByaXYtPmJpdHRpbWluZ19jb25zdCkKIAkJTkxBX1BVVChza2IsIElGTEFfQ0FOX0JJVFRJTUlOR19DT05TVCwKIAkJCXNpemVvZigqcHJpdi0+Yml0dGltaW5nX2NvbnN0KSwgcHJpdi0+Yml0dGltaW5nX2NvbnN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCmluZGV4IDFhNzJjYTAuLmY4Y2MxNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwpAQCAtMTgwLDYgKzE4MCwxNCBAQAogI2RlZmluZSBSWEJFSUQwX09GRiA0CiAjZGVmaW5lIFJYQkRMQ19PRkYgIDUKICNkZWZpbmUgUlhCREFUX09GRiAgNgorI2RlZmluZSBSWEZTSURIKG4pICgobikgKiA0KQorI2RlZmluZSBSWEZTSURMKG4pICgobikgKiA0ICsgMSkKKyNkZWZpbmUgUlhGRUlEOChuKSAoKG4pICogNCArIDIpCisjZGVmaW5lIFJYRkVJRDAobikgKChuKSAqIDQgKyAzKQorI2RlZmluZSBSWE1TSURIKG4pICgobikgKiA0ICsgMHgyMCkKKyNkZWZpbmUgUlhNU0lETChuKSAoKG4pICogNCArIDB4MjEpCisjZGVmaW5lIFJYTUVJRDgobikgKChuKSAqIDQgKyAweDIyKQorI2RlZmluZSBSWE1FSUQwKG4pICgobikgKiA0ICsgMHgyMykKIAogI2RlZmluZSBHRVRfQllURSh2YWwsIGJ5dGUpCQkJXAogCSgoKHZhbCkgPj4gKChieXRlKSAqIDgpKSAmIDB4ZmYpCkBAIC0yMTksNyArMjI3LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OwogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CiAKLQlzdHJ1Y3QgbXV0ZXggc3BpX2xvY2s7IC8qIFNQSSBidWZmZXIgbG9jayAqLworCXN0cnVjdCBtdXRleCBtY3BfbG9jazsgLyogU1BJIGRldmljZSBsb2NrICovCisKIAl1OCAqc3BpX3R4X2J1ZjsKIAl1OCAqc3BpX3J4X2J1ZjsKIAlkbWFfYWRkcl90IHNwaV90eF9kbWE7CkBAIC0yMjcsMTEgKzIzNiwxMSBAQAogCiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAlpbnQgdHhfbGVuOworCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29yazsKLQlzdHJ1Y3QgY29tcGxldGlvbiBhd2FrZTsKLQlpbnQgd2FrZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOworCiAJaW50IGZvcmNlX3F1aXQ7CiAJaW50IGFmdGVyX3N1c3BlbmQ7CiAjZGVmaW5lIEFGVEVSX1NVU1BFTkRfVVAgMQpAQCAtMjQ1LDcgKzI1NCw4IEBACiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldCk7CiAKLQluZXQtPnN0YXRzLnR4X2Vycm9ycysrOworCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKQorCQluZXQtPnN0YXRzLnR4X2Vycm9ycysrOwogCWlmIChwcml2LT50eF9za2IpCiAJCWRldl9rZnJlZV9za2IocHJpdi0+dHhfc2tiKTsKIAlpZiAocHJpdi0+dHhfbGVuKQpAQCAtMzAwLDE2ICszMTAsMTIgQEAKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAJdTggdmFsID0gMDsKIAotCW11dGV4X2xvY2soJnByaXYtPnNwaV9sb2NrKTsKLQogCXByaXYtPnNwaV90eF9idWZbMF0gPSBJTlNUUlVDVElPTl9SRUFEOwogCXByaXYtPnNwaV90eF9idWZbMV0gPSByZWc7CiAKIAltY3AyNTF4X3NwaV90cmFucyhzcGksIDMpOwogCXZhbCA9IHByaXYtPnNwaV9yeF9idWZbMl07CiAKLQltdXRleF91bmxvY2soJnByaXYtPnNwaV9sb2NrKTsKLQogCXJldHVybiB2YWw7CiB9CiAKQEAgLTMxNywxNSArMzIzLDExIEBACiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOwotCiAJcHJpdi0+c3BpX3R4X2J1ZlswXSA9IElOU1RSVUNUSU9OX1dSSVRFOwogCXByaXYtPnNwaV90eF9idWZbMV0gPSByZWc7CiAJcHJpdi0+c3BpX3R4X2J1ZlsyXSA9IHZhbDsKIAogCW1jcDI1MXhfc3BpX3RyYW5zKHNwaSwgMyk7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPnNwaV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgbWNwMjUxeF93cml0ZV9iaXRzKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHJlZywKQEAgLTMzMywxNiArMzM1LDEyIEBACiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOwotCiAJcHJpdi0+c3BpX3R4X2J1ZlswXSA9IElOU1RSVUNUSU9OX0JJVF9NT0RJRlk7CiAJcHJpdi0+c3BpX3R4X2J1ZlsxXSA9IHJlZzsKIAlwcml2LT5zcGlfdHhfYnVmWzJdID0gbWFzazsKIAlwcml2LT5zcGlfdHhfYnVmWzNdID0gdmFsOwogCiAJbWNwMjUxeF9zcGlfdHJhbnMoc3BpLCA0KTsKLQotCW11dGV4X3VubG9jaygmcHJpdi0+c3BpX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBtY3AyNTF4X2h3X3R4X2ZyYW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4ICpidWYsCkBAIC0zNTgsMTAgKzM1Niw4IEBACiAJCQltY3AyNTF4X3dyaXRlX3JlZyhzcGksIFRYQkNUUkwodHhfYnVmX2lkeCkgKyBpLAogCQkJCQkgIGJ1ZltpXSk7CiAJfSBlbHNlIHsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOwogCQltZW1jcHkocHJpdi0+c3BpX3R4X2J1ZiwgYnVmLCBUWEJEQVRfT0ZGICsgbGVuKTsKIAkJbWNwMjUxeF9zcGlfdHJhbnMoc3BpLCBUWEJEQVRfT0ZGICsgbGVuKTsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5zcGlfbG9jayk7CiAJfQogfQogCkBAIC00MDgsMTMgKzQwNCw5IEBACiAJCWZvciAoOyBpIDwgKFJYQkRBVF9PRkYgKyBsZW4pOyBpKyspCiAJCQlidWZbaV0gPSBtY3AyNTF4X3JlYWRfcmVnKHNwaSwgUlhCQ1RSTChidWZfaWR4KSArIGkpOwogCX0gZWxzZSB7Ci0JCW11dGV4X2xvY2soJnByaXYtPnNwaV9sb2NrKTsKLQogCQlwcml2LT5zcGlfdHhfYnVmW1JYQkNUUkxfT0ZGXSA9IElOU1RSVUNUSU9OX1JFQURfUlhCKGJ1Zl9pZHgpOwogCQltY3AyNTF4X3NwaV90cmFucyhzcGksIFNQSV9UUkFOU0ZFUl9CVUZfTEVOKTsKIAkJbWVtY3B5KGJ1ZiwgcHJpdi0+c3BpX3J4X2J1ZiwgU1BJX1RSQU5TRkVSX0JVRl9MRU4pOwotCi0JCW11dGV4X3VubG9jaygmcHJpdi0+c3BpX2xvY2spOwogCX0KIH0KIApAQCAtNDY3LDIxICs0NTksNiBAQAogCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOQ1RSTCwgQ0FOQ1RSTF9SRVFPUF9TTEVFUCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1jcDI1MXhfaHdfd2FrZXVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0JcHJpdi0+d2FrZSA9IDE7Ci0KLQkvKiBDYW4gb25seSB3YWtlIHVwIGJ5IGdlbmVyYXRpbmcgYSB3YWtlLXVwIGludGVycnVwdC4gKi8KLQltY3AyNTF4X3dyaXRlX2JpdHMoc3BpLCBDQU5JTlRFLCBDQU5JTlRFX1dBS0lFLCBDQU5JTlRFX1dBS0lFKTsKLQltY3AyNTF4X3dyaXRlX2JpdHMoc3BpLCBDQU5JTlRGLCBDQU5JTlRGX1dBS0lGLCBDQU5JTlRGX1dBS0lGKTsKLQotCS8qIFdhaXQgdW50aWwgdGhlIGRldmljZSBpcyBhd2FrZSAqLwotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwcml2LT5hd2FrZSwgSFopKQotCQlkZXZfZXJyKCZzcGktPmRldiwgIk1DUDI1MXggZGlkbid0IHdha2UtdXBcbiIpOwotfQotCiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWNwMjUxeF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTQ5MCwxNiArNDY3LDExIEBACiAKIAlpZiAocHJpdi0+dHhfc2tiIHx8IHByaXYtPnR4X2xlbikgewogCQlkZXZfd2Fybigmc3BpLT5kZXYsICJoYXJkX3htaXQgY2FsbGVkIHdoaWxlIHR4IGJ1c3lcbiIpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlpZiAoc2tiLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZHJvcHBpbmcgcGFja2V0IC0gYmFkIGxlbmd0aFxuIik7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJbmV0LT5zdGF0cy50eF9kcm9wcGVkKys7CisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKG5ldCwgc2tiKSkKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAJcHJpdi0+dHhfc2tiID0gc2tiOwpAQCAtNTE1LDEyICs0ODcsMTMgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0FOX01PREVfU1RBUlQ6CisJCW1jcDI1MXhfY2xlYW4obmV0KTsKIAkJLyogV2UgaGF2ZSB0byBkZWxheSB3b3JrIHNpbmNlIFNQSSBJL08gbWF5IHNsZWVwICovCiAJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CiAJCXByaXYtPnJlc3RhcnRfdHggPSAxOwogCQlpZiAocHJpdi0+Y2FuLnJlc3RhcnRfbXMgPT0gMCkKIAkJCXByaXYtPmFmdGVyX3N1c3BlbmQgPSBBRlRFUl9TVVNQRU5EX1JFU1RBUlQ7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5pcnFfd29yayk7CisJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5yZXN0YXJ0X3dvcmspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC01MjksNyArNTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwpAQCAtNTM3LDEyICs1MTAsMTQgQEAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOSU5URSwKIAkJCSAgQ0FOSU5URV9FUlJJRSB8IENBTklOVEVfVFgySUUgfCBDQU5JTlRFX1RYMUlFIHwKLQkJCSAgQ0FOSU5URV9UWDBJRSB8IENBTklOVEVfUlgxSUUgfCBDQU5JTlRFX1JYMElFIHwKLQkJCSAgQ0FOSU5URl9NRVJSRik7CisJCQkgIENBTklOVEVfVFgwSUUgfCBDQU5JTlRFX1JYMUlFIHwgQ0FOSU5URV9SWDBJRSk7CiAKIAlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0xPT1BCQUNLKSB7CiAJCS8qIFB1dCBkZXZpY2UgaW50byBsb29wYmFjayBtb2RlICovCiAJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOQ1RSTCwgQ0FOQ1RSTF9SRVFPUF9MT09QQkFDSyk7CisJfSBlbHNlIGlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfTElTVEVOT05MWSkgeworCQkvKiBQdXQgZGV2aWNlIGludG8gbGlzdGVuLW9ubHkgbW9kZSAqLworCQltY3AyNTF4X3dyaXRlX3JlZyhzcGksIENBTkNUUkwsIENBTkNUUkxfUkVRT1BfTElTVEVOX09OTFkpOwogCX0gZWxzZSB7CiAJCS8qIFB1dCBkZXZpY2UgaW50byBub3JtYWwgbW9kZSAqLwogCQltY3AyNTF4X3dyaXRlX3JlZyhzcGksIENBTkNUUkwsIENBTkNUUkxfUkVRT1BfTk9STUFMKTsKQEAgLTU1NCwxMSArNTI5LDEyIEBACiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiTUNQMjUxeCBkaWRuJ3QiCiAJCQkJCSIgZW50ZXIgaW4gbm9ybWFsIG1vZGVcbiIpOwotCQkJCXJldHVybjsKKwkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9CiAJfQogCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWNwMjUxeF9kb19zZXRfYml0dGltaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCkBAIC01ODksMzMgKzU2NSwzOSBAQAogewogCW1jcDI1MXhfZG9fc2V0X2JpdHRpbWluZyhuZXQpOwogCi0JLyogRW5hYmxlIFJYMC0+UlgxIGJ1ZmZlciByb2xsIG92ZXIgYW5kIGRpc2FibGUgZmlsdGVycyAqLwotCW1jcDI1MXhfd3JpdGVfYml0cyhzcGksIFJYQkNUUkwoMCksCi0JCQkgICBSWEJDVFJMX0JVS1QgfCBSWEJDVFJMX1JYTTAgfCBSWEJDVFJMX1JYTTEsCi0JCQkgICBSWEJDVFJMX0JVS1QgfCBSWEJDVFJMX1JYTTAgfCBSWEJDVFJMX1JYTTEpOwotCW1jcDI1MXhfd3JpdGVfYml0cyhzcGksIFJYQkNUUkwoMSksCi0JCQkgICBSWEJDVFJMX1JYTTAgfCBSWEJDVFJMX1JYTTEsCi0JCQkgICBSWEJDVFJMX1JYTTAgfCBSWEJDVFJMX1JYTTEpOworCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgUlhCQ1RSTCgwKSwKKwkJCSAgUlhCQ1RSTF9CVUtUIHwgUlhCQ1RSTF9SWE0wIHwgUlhCQ1RSTF9SWE0xKTsKKwltY3AyNTF4X3dyaXRlX3JlZyhzcGksIFJYQkNUUkwoMSksCisJCQkgIFJYQkNUUkxfUlhNMCB8IFJYQkNUUkxfUlhNMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1jcDI1MXhfaHdfcmVzZXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgbWNwMjUxeF9od19yZXNldChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCXByaXYtPnNwaV90eF9idWZbMF0gPSBJTlNUUlVDVElPTl9SRVNFVDsKLQogCXJldCA9IHNwaV93cml0ZShzcGksIHByaXYtPnNwaV90eF9idWYsIDEpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5zcGlfbG9jayk7Ci0KLQlpZiAocmV0KQorCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmc3BpLT5kZXYsICJyZXNldCBmYWlsZWQ6IHJldCA9ICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKIAkvKiBXYWl0IGZvciByZXNldCB0byBmaW5pc2ggKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIEhaOwogCW1kZWxheSgxMCk7CisJd2hpbGUgKChtY3AyNTF4X3JlYWRfcmVnKHNwaSwgQ0FOU1RBVCkgJiBDQU5DVFJMX1JFUU9QX01BU0spCisJICAgICAgICE9IENBTkNUUkxfUkVRT1BfQ09ORikgeworCQlzY2hlZHVsZSgpOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJNQ1AyNTF4IGRpZG4ndCIKKwkJCQkiIGVudGVyIGluIGNvbmYgbW9kZSBhZnRlciByZXNldFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1jcDI1MXhfaHdfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTYzOSw2MyArNjIxLDE3IEBACiAJcmV0dXJuIChzdDEgPT0gMHg4MCAmJiBzdDIgPT0gMHgwNykgPyAxIDogMDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IG1jcDI1MXhfY2FuX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQotCS8qIFNjaGVkdWxlIGJvdHRvbSBoYWxmICovCi0JaWYgKCF3b3JrX3BlbmRpbmcoJnByaXYtPmlycV93b3JrKSkKLQkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmlycV93b3JrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBtY3AyNTF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyB2b2lkIG1jcDI1MXhfb3Blbl9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBwcml2LT5zcGk7CiAJc3RydWN0IG1jcDI1MXhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCByZXQ7CiAKLQlyZXQgPSBvcGVuX2NhbmRldihuZXQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmFibGUgdG8gc2V0IGluaXRpYWwgYmF1ZHJhdGUhXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KKwlmcmVlX2lycShzcGktPmlycSwgcHJpdik7CisJbWNwMjUxeF9od19zbGVlcChzcGkpOwogCWlmIChwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKQotCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDEpOwotCi0JcHJpdi0+Zm9yY2VfcXVpdCA9IDA7Ci0JcHJpdi0+dHhfc2tiID0gTlVMTDsKLQlwcml2LT50eF9sZW4gPSAwOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIG1jcDI1MXhfY2FuX2lzciwKLQkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcsIERFVklDRV9OQU1FLCBuZXQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBpcnEgJWRcbiIsIHNwaS0+aXJxKTsKLQkJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCi0JCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDApOwotCQljbG9zZV9jYW5kZXYobmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltY3AyNTF4X2h3X3dha2V1cChzcGkpOwotCW1jcDI1MXhfaHdfcmVzZXQoc3BpKTsKLQlyZXQgPSBtY3AyNTF4X3NldHVwKG5ldCwgcHJpdiwgc3BpKTsKLQlpZiAocmV0KSB7Ci0JCWZyZWVfaXJxKHNwaS0+aXJxLCBuZXQpOwotCQltY3AyNTF4X2h3X3NsZWVwKHNwaSk7Ci0JCWlmIChwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKQotCQkJcGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSgwKTsKLQkJY2xvc2VfY2FuZGV2KG5ldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCW1jcDI1MXhfc2V0X25vcm1hbF9tb2RlKHNwaSk7Ci0JbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwotCi0JcmV0dXJuIDA7CisJCXBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUoMCk7CisJY2xvc2VfY2FuZGV2KG5ldCk7CiB9CiAKIHN0YXRpYyBpbnQgbWNwMjUxeF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCkBAIC03MDYsMTcgKzY0MiwxOSBAQAogCiAJY2xvc2VfY2FuZGV2KG5ldCk7CiAKKwlwcml2LT5mb3JjZV9xdWl0ID0gMTsKKwlmcmVlX2lycShzcGktPmlycSwgcHJpdik7CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d3EpOworCXByaXYtPndxID0gTlVMTDsKKworCW11dGV4X2xvY2soJnByaXYtPm1jcF9sb2NrKTsKKwogCS8qIERpc2FibGUgYW5kIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOSU5URSwgMHgwMCk7CiAJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBDQU5JTlRGLCAweDAwKTsKIAotCXByaXYtPmZvcmNlX3F1aXQgPSAxOwotCWZyZWVfaXJxKHNwaS0+aXJxLCBuZXQpOwotCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53cSk7Ci0KIAltY3AyNTF4X3dyaXRlX3JlZyhzcGksIFRYQkNUUkwoMCksIDApOwotCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKQotCQltY3AyNTF4X2NsZWFuKG5ldCk7CisJbWNwMjUxeF9jbGVhbihuZXQpOwogCiAJbWNwMjUxeF9od19zbGVlcChzcGkpOwogCkBAIC03MjUsOSArNjYzLDI3IEBACiAKIAlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKIAorCW11dGV4X3VubG9jaygmcHJpdi0+bWNwX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1jcDI1MXhfZXJyb3Jfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBjYW5faWQsIGludCBkYXRhMSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBjYW5fZnJhbWUgKmZyYW1lOworCisJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IobmV0LCAmZnJhbWUpOworCWlmIChza2IpIHsKKwkJZnJhbWUtPmNhbl9pZCA9IGNhbl9pZDsKKwkJZnJhbWUtPmRhdGFbMV0gPSBkYXRhMTsKKwkJbmV0aWZfcngoc2tiKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZuZXQtPmRldiwKKwkJCSJjYW5ub3QgYWxsb2NhdGUgZXJyb3Igc2tiXG4iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG1jcDI1MXhfdHhfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IG1jcDI1MXhfcHJpdiwKQEAgLTczNiwzMyArNjkyLDMyIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IHByaXYtPm5ldDsKIAlzdHJ1Y3QgY2FuX2ZyYW1lICpmcmFtZTsKIAorCW11dGV4X2xvY2soJnByaXYtPm1jcF9sb2NrKTsKIAlpZiAocHJpdi0+dHhfc2tiKSB7Ci0JCWZyYW1lID0gKHN0cnVjdCBjYW5fZnJhbWUgKilwcml2LT50eF9za2ItPmRhdGE7Ci0KIAkJaWYgKHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgewogCQkJbWNwMjUxeF9jbGVhbihuZXQpOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwotCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZnJhbWUgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXByaXYtPnR4X3NrYi0+ZGF0YTsKKworCQkJaWYgKGZyYW1lLT5jYW5fZGxjID4gQ0FOX0ZSQU1FX01BWF9EQVRBX0xFTikKKwkJCQlmcmFtZS0+Y2FuX2RsYyA9IENBTl9GUkFNRV9NQVhfREFUQV9MRU47CisJCQltY3AyNTF4X2h3X3R4KHNwaSwgZnJhbWUsIDApOworCQkJcHJpdi0+dHhfbGVuID0gMSArIGZyYW1lLT5jYW5fZGxjOworCQkJY2FuX3B1dF9lY2hvX3NrYihwcml2LT50eF9za2IsIG5ldCwgMCk7CisJCQlwcml2LT50eF9za2IgPSBOVUxMOwogCQl9Ci0JCWlmIChmcmFtZS0+Y2FuX2RsYyA+IENBTl9GUkFNRV9NQVhfREFUQV9MRU4pCi0JCQlmcmFtZS0+Y2FuX2RsYyA9IENBTl9GUkFNRV9NQVhfREFUQV9MRU47Ci0JCW1jcDI1MXhfaHdfdHgoc3BpLCBmcmFtZSwgMCk7Ci0JCXByaXYtPnR4X2xlbiA9IDEgKyBmcmFtZS0+Y2FuX2RsYzsKLQkJY2FuX3B1dF9lY2hvX3NrYihwcml2LT50eF9za2IsIG5ldCwgMCk7Ci0JCXByaXYtPnR4X3NrYiA9IE5VTEw7CiAJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bWNwX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBtY3AyNTF4X2lycV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK3N0YXRpYyB2b2lkIG1jcDI1MXhfcmVzdGFydF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWNwMjUxeF9wcml2LAotCQkJCQkJIGlycV93b3JrKTsKKwkJCQkJCSByZXN0YXJ0X3dvcmspOwogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBwcml2LT5zcGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IHByaXYtPm5ldDsKLQl1OCB0eGJuY3RybDsKLQl1OCBpbnRmOwotCWVudW0gY2FuX3N0YXRlIG5ld19zdGF0ZTsKIAorCW11dGV4X2xvY2soJnByaXYtPm1jcF9sb2NrKTsKIAlpZiAocHJpdi0+YWZ0ZXJfc3VzcGVuZCkgewogCQltZGVsYXkoMTApOwogCQltY3AyNTF4X2h3X3Jlc2V0KHNwaSk7CkBAIC03NzEsNDUgKzcyNiw1NCBAQAogCQkJbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3BpKTsKIAkJfSBlbHNlIGlmIChwcml2LT5hZnRlcl9zdXNwZW5kICYgQUZURVJfU1VTUEVORF9VUCkgewogCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXQpOwotCQkJLyogQ2xlYW4gc2luY2Ugd2UgbG9zdCB0eCBidWZmZXIgKi8KLQkJCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKSB7Ci0JCQkJbWNwMjUxeF9jbGVhbihuZXQpOwotCQkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKLQkJCX0KKwkJCW1jcDI1MXhfY2xlYW4obmV0KTsKIAkJCW1jcDI1MXhfc2V0X25vcm1hbF9tb2RlKHNwaSk7CisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CiAJCX0gZWxzZSB7CiAJCQltY3AyNTF4X2h3X3NsZWVwKHNwaSk7CiAJCX0KIAkJcHJpdi0+YWZ0ZXJfc3VzcGVuZCA9IDA7CisJCXByaXYtPmZvcmNlX3F1aXQgPSAwOwogCX0KIAotCWlmIChwcml2LT5jYW4ucmVzdGFydF9tcyA9PSAwICYmIHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikKLQkJcmV0dXJuOworCWlmIChwcml2LT5yZXN0YXJ0X3R4KSB7CisJCXByaXYtPnJlc3RhcnRfdHggPSAwOworCQltY3AyNTF4X3dyaXRlX3JlZyhzcGksIFRYQkNUUkwoMCksIDApOworCQltY3AyNTF4X2NsZWFuKG5ldCk7CisJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKKwkJbWNwMjUxeF9lcnJvcl9za2IobmV0LCBDQU5fRVJSX1JFU1RBUlRFRCwgMCk7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bWNwX2xvY2spOworfQogCi0Jd2hpbGUgKCFwcml2LT5mb3JjZV9xdWl0ICYmICFmcmVlemluZyhjdXJyZW50KSkgewotCQl1OCBlZmxhZyA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBFRkxHKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY3AyNTF4X2Nhbl9pc3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHByaXYtPnNwaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gcHJpdi0+bmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNwX2xvY2spOworCXdoaWxlICghcHJpdi0+Zm9yY2VfcXVpdCkgeworCQllbnVtIGNhbl9zdGF0ZSBuZXdfc3RhdGU7CisJCXU4IGludGYgPSBtY3AyNTF4X3JlYWRfcmVnKHNwaSwgQ0FOSU5URik7CisJCXU4IGVmbGFnOwogCQlpbnQgY2FuX2lkID0gMCwgZGF0YTEgPSAwOwogCi0JCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgRUZMRywgMHgwMCk7Ci0KLQkJaWYgKHByaXYtPnJlc3RhcnRfdHgpIHsKLQkJCXByaXYtPnJlc3RhcnRfdHggPSAwOwotCQkJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBUWEJDVFJMKDApLCAwKTsKLQkJCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKQotCQkJCW1jcDI1MXhfY2xlYW4obmV0KTsKLQkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKLQkJCWNhbl9pZCB8PSBDQU5fRVJSX1JFU1RBUlRFRDsKKwkJaWYgKGludGYgJiBDQU5JTlRGX1JYMElGKSB7CisJCQltY3AyNTF4X2h3X3J4KHNwaSwgMCk7CisJCQkvKiBGcmVlIG9uZSBidWZmZXIgQVNBUCAqLworCQkJbWNwMjUxeF93cml0ZV9iaXRzKHNwaSwgQ0FOSU5URiwgaW50ZiAmIENBTklOVEZfUlgwSUYsCisJCQkJCSAgIDB4MDApOwogCQl9CiAKLQkJaWYgKHByaXYtPndha2UpIHsKLQkJCS8qIFdhaXQgd2hpbHN0IHRoZSBkZXZpY2Ugd2FrZXMgdXAgKi8KLQkJCW1kZWxheSgxMCk7Ci0JCQlwcml2LT53YWtlID0gMDsKLQkJfQorCQlpZiAoaW50ZiAmIENBTklOVEZfUlgxSUYpCisJCQltY3AyNTF4X2h3X3J4KHNwaSwgMSk7CiAKLQkJaW50ZiA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBDQU5JTlRGKTsKIAkJbWNwMjUxeF93cml0ZV9iaXRzKHNwaSwgQ0FOSU5URiwgaW50ZiwgMHgwMCk7CiAKKwkJZWZsYWcgPSBtY3AyNTF4X3JlYWRfcmVnKHNwaSwgRUZMRyk7CisJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgRUZMRywgMHgwMCk7CisKIAkJLyogVXBkYXRlIGNhbiBzdGF0ZSAqLwogCQlpZiAoZWZsYWcgJiBFRkxHX1RYQk8pIHsKIAkJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOwpAQCAtODUwLDU5ICs4MTQsMzEgQEAKIAkJfQogCQlwcml2LT5jYW4uc3RhdGUgPSBuZXdfc3RhdGU7CiAKLQkJaWYgKChpbnRmICYgQ0FOSU5URl9FUlJJRikgfHwgKGNhbl9pZCAmIENBTl9FUlJfUkVTVEFSVEVEKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCXN0cnVjdCBjYW5fZnJhbWUgKmZyYW1lOwotCi0JCQkvKiBDcmVhdGUgZXJyb3IgZnJhbWUgKi8KLQkJCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKG5ldCwgJmZyYW1lKTsKLQkJCWlmIChza2IpIHsKLQkJCQkvKiBTZXQgZXJyb3IgZnJhbWUgZmxhZ3MgYmFzZWQgb24gYnVzIHN0YXRlICovCi0JCQkJZnJhbWUtPmNhbl9pZCA9IGNhbl9pZDsKLQkJCQlmcmFtZS0+ZGF0YVsxXSA9IGRhdGExOwotCi0JCQkJLyogVXBkYXRlIG5ldCBzdGF0cyBmb3Igb3ZlcmZsb3dzICovCi0JCQkJaWYgKGVmbGFnICYgKEVGTEdfUlgwT1ZSIHwgRUZMR19SWDFPVlIpKSB7Ci0JCQkJCWlmIChlZmxhZyAmIEVGTEdfUlgwT1ZSKQotCQkJCQkJbmV0LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCQlpZiAoZWZsYWcgJiBFRkxHX1JYMU9WUikKLQkJCQkJCW5ldC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJCQkJZnJhbWUtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7Ci0JCQkJCWZyYW1lLT5kYXRhWzFdIHw9Ci0JCQkJCQlDQU5fRVJSX0NSVExfUlhfT1ZFUkZMT1c7Ci0JCQkJfQotCi0JCQkJbmV0aWZfcngoc2tiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2X2luZm8oJnNwaS0+ZGV2LAotCQkJCQkgImNhbm5vdCBhbGxvY2F0ZSBlcnJvciBza2JcbiIpOworCQlpZiAoaW50ZiAmIENBTklOVEZfRVJSSUYpIHsKKwkJCS8qIEhhbmRsZSBvdmVyZmxvdyBjb3VudGVycyAqLworCQkJaWYgKGVmbGFnICYgKEVGTEdfUlgwT1ZSIHwgRUZMR19SWDFPVlIpKSB7CisJCQkJaWYgKGVmbGFnICYgRUZMR19SWDBPVlIpCisJCQkJCW5ldC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQlpZiAoZWZsYWcgJiBFRkxHX1JYMU9WUikKKwkJCQkJbmV0LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCWNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQkJZGF0YTEgfD0gQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XOwogCQkJfQorCQkJbWNwMjUxeF9lcnJvcl9za2IobmV0LCBjYW5faWQsIGRhdGExKTsKIAkJfQogCiAJCWlmIChwcml2LT5jYW4uc3RhdGUgPT0gQ0FOX1NUQVRFX0JVU19PRkYpIHsKIAkJCWlmIChwcml2LT5jYW4ucmVzdGFydF9tcyA9PSAwKSB7CisJCQkJcHJpdi0+Zm9yY2VfcXVpdCA9IDE7CiAJCQkJY2FuX2J1c19vZmYobmV0KTsKIAkJCQltY3AyNTF4X2h3X3NsZWVwKHNwaSk7Ci0JCQkJcmV0dXJuOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKIAkJaWYgKGludGYgPT0gMCkKIAkJCWJyZWFrOwogCi0JCWlmIChpbnRmICYgQ0FOSU5URl9XQUtJRikKLQkJCWNvbXBsZXRlKCZwcml2LT5hd2FrZSk7Ci0KLQkJaWYgKGludGYgJiBDQU5JTlRGX01FUlJGKSB7Ci0JCQkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBUeCBidWZmZXJzLCByZXN0YXJ0IHF1ZXVlICovCi0JCQl0eGJuY3RybCA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBUWEJDVFJMKDApKTsKLQkJCWlmICghKHR4Ym5jdHJsICYgVFhCQ1RSTF9UWFJFUSkpIHsKLQkJCQlpZiAocHJpdi0+dHhfc2tiIHx8IHByaXYtPnR4X2xlbikKLQkJCQkJbWNwMjUxeF9jbGVhbihuZXQpOwotCQkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKLQkJCX0KLQkJfQotCiAJCWlmIChpbnRmICYgKENBTklOVEZfVFgySUYgfCBDQU5JTlRGX1RYMUlGIHwgQ0FOSU5URl9UWDBJRikpIHsKIAkJCW5ldC0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJbmV0LT5zdGF0cy50eF9ieXRlcyArPSBwcml2LT50eF9sZW4gLSAxOwpAQCAtOTEzLDEyICs4NDksNjYgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKIAkJfQogCi0JCWlmIChpbnRmICYgQ0FOSU5URl9SWDBJRikKLQkJCW1jcDI1MXhfaHdfcngoc3BpLCAwKTsKLQotCQlpZiAoaW50ZiAmIENBTklOVEZfUlgxSUYpCi0JCQltY3AyNTF4X2h3X3J4KHNwaSwgMSk7CiAJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bWNwX2xvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtY3AyNTF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gcHJpdi0+c3BpOworCXN0cnVjdCBtY3AyNTF4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gb3Blbl9jYW5kZXYobmV0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5hYmxlIHRvIHNldCBpbml0aWFsIGJhdWRyYXRlIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNwX2xvY2spOworCWlmIChwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKQorCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDEpOworCisJcHJpdi0+Zm9yY2VfcXVpdCA9IDA7CisJcHJpdi0+dHhfc2tiID0gTlVMTDsKKwlwcml2LT50eF9sZW4gPSAwOworCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoc3BpLT5pcnEsIE5VTEwsIG1jcDI1MXhfY2FuX2lzdCwKKwkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcsIERFVklDRV9OQU1FLCBwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgaXJxICVkXG4iLCBzcGktPmlycSk7CisJCWlmIChwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKQorCQkJcGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSgwKTsKKwkJY2xvc2VfY2FuZGV2KG5ldCk7CisJCWdvdG8gb3Blbl91bmxvY2s7CisJfQorCisJcHJpdi0+d3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoIm1jcDI1MXhfd3EiKTsKKwlJTklUX1dPUksoJnByaXYtPnR4X3dvcmssIG1jcDI1MXhfdHhfd29ya19oYW5kbGVyKTsKKwlJTklUX1dPUksoJnByaXYtPnJlc3RhcnRfd29yaywgbWNwMjUxeF9yZXN0YXJ0X3dvcmtfaGFuZGxlcik7CisKKwlyZXQgPSBtY3AyNTF4X2h3X3Jlc2V0KHNwaSk7CisJaWYgKHJldCkgeworCQltY3AyNTF4X29wZW5fY2xlYW4obmV0KTsKKwkJZ290byBvcGVuX3VubG9jazsKKwl9CisJcmV0ID0gbWNwMjUxeF9zZXR1cChuZXQsIHByaXYsIHNwaSk7CisJaWYgKHJldCkgeworCQltY3AyNTF4X29wZW5fY2xlYW4obmV0KTsKKwkJZ290byBvcGVuX3VubG9jazsKKwl9CisJcmV0ID0gbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3BpKTsKKwlpZiAocmV0KSB7CisJCW1jcDI1MXhfb3Blbl9jbGVhbihuZXQpOworCQlnb3RvIG9wZW5fdW5sb2NrOworCX0KKwluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CisKK29wZW5fdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bWNwX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNwMjUxeF9uZXRkZXZfb3BzID0gewpAQCAtOTUyLDExICs5NDIsMTMgQEAKIAlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJm1jcDI1MXhfYml0dGltaW5nX2NvbnN0OwogCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IG1jcDI1MXhfZG9fc2V0X21vZGU7CiAJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBwZGF0YS0+b3NjaWxsYXRvcl9mcmVxdWVuY3kgLyAyOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIHwKKwkJQ0FOX0NUUkxNT0RFX0xPT1BCQUNLIHwgQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFk7CiAJcHJpdi0+bmV0ID0gbmV0OwogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHByaXYpOwogCiAJcHJpdi0+c3BpID0gc3BpOwotCW11dGV4X2luaXQoJnByaXYtPnNwaV9sb2NrKTsKKwltdXRleF9pbml0KCZwcml2LT5tY3BfbG9jayk7CiAKIAkvKiBJZiByZXF1ZXN0ZWQsIGFsbG9jYXRlIERNQSBidWZmZXJzICovCiAJaWYgKG1jcDI1MXhfZW5hYmxlX2RtYSkgewpAQCAtMTAwNSwxOCArOTk3LDEyIEBACiAKIAlTRVRfTkVUREVWX0RFVihuZXQsICZzcGktPmRldik7CiAKLQlwcml2LT53cSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWNwMjUxeF93cSIpOwotCi0JSU5JVF9XT1JLKCZwcml2LT50eF93b3JrLCBtY3AyNTF4X3R4X3dvcmtfaGFuZGxlcik7Ci0JSU5JVF9XT1JLKCZwcml2LT5pcnFfd29yaywgbWNwMjUxeF9pcnFfd29ya19oYW5kbGVyKTsKLQotCWluaXRfY29tcGxldGlvbigmcHJpdi0+YXdha2UpOwotCiAJLyogQ29uZmlndXJlIHRoZSBTUEkgYnVzICovCiAJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKIAlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCXNwaV9zZXR1cChzcGkpOwogCisJLyogSGVyZSBpcyBPSyB0byBub3QgbG9jayB0aGUgTUNQLCBubyBvbmUga25vd3MgYWJvdXQgaXQgeWV0ICovCiAJaWYgKCFtY3AyNTF4X2h3X3Byb2JlKHNwaSkpIHsKIAkJZGV2X2luZm8oJnNwaS0+ZGV2LCAiUHJvYmUgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9wcm9iZTsKQEAgLTEwNTksMTAgKzEwNDUsNiBAQAogCXVucmVnaXN0ZXJfY2FuZGV2KG5ldCk7CiAJZnJlZV9jYW5kZXYobmV0KTsKIAotCXByaXYtPmZvcmNlX3F1aXQgPSAxOwotCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53cSk7Ci0JZGVzdHJveV93b3JrcXVldWUocHJpdi0+d3EpOwotCiAJaWYgKG1jcDI1MXhfZW5hYmxlX2RtYSkgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmc3BpLT5kZXYsIFBBR0VfU0laRSwKIAkJCQkgIHByaXYtPnNwaV90eF9idWYsIHByaXYtPnNwaV90eF9kbWEpOwpAQCAtMTA4NCw2ICsxMDY2LDEyIEBACiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBwcml2LT5uZXQ7CiAKKwlwcml2LT5mb3JjZV9xdWl0ID0gMTsKKwlkaXNhYmxlX2lycShzcGktPmlycSk7CisJLyoKKwkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IG5laXRoZXIgSVNUIG5vciB3b3JrcXVldWVzIGFyZSBydW5uaW5nLgorCSAqIG9wZW4vc3RvcCBjYW5ub3QgYmUgY2FsbGVkIGFueXdheSBzbyBsb2NraW5nIGlzIG5vdCBuZWVkZWQKKwkgKi8KIAlpZiAobmV0aWZfcnVubmluZyhuZXQpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0KTsKIApAQCAtMTExMCwxNiArMTA5OCwxOCBAQAogCiAJaWYgKHByaXYtPmFmdGVyX3N1c3BlbmQgJiBBRlRFUl9TVVNQRU5EX1BPV0VSKSB7CiAJCXBkYXRhLT5wb3dlcl9lbmFibGUoMSk7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5pcnFfd29yayk7CisJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5yZXN0YXJ0X3dvcmspOwogCX0gZWxzZSB7CiAJCWlmIChwcml2LT5hZnRlcl9zdXNwZW5kICYgQUZURVJfU1VTUEVORF9VUCkgewogCQkJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCiAJCQkJcGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSgxKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5pcnFfd29yayk7CisJCQlxdWV1ZV93b3JrKHByaXYtPndxLCAmcHJpdi0+cmVzdGFydF93b3JrKTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFmdGVyX3N1c3BlbmQgPSAwOwogCQl9CiAJfQorCXByaXYtPmZvcmNlX3F1aXQgPSAwOworCWVuYWJsZV9pcnEoc3BpLT5pcnEpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKaW5kZXggY2QwZjJkNi4uMjdkMWQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKQEAgLTExLDEyICsxMSwxMyBAQAogCiBjb25maWcgQ0FOX01QQzVYWFgKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzV4eHggb25ib2FyZCBDQU4gY29udHJvbGxlciIKLQlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4CisJZGVwZW5kcyBvbiAoUFBDX01QQzUyeHggfHwgUFBDX01QQzUxMngpCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEZyZWVzY2FsZSdzIE1QQzV4eHgKLQkgIG9uYm9hcmQgQ0FOIGNvbnRyb2xsZXIuCisJICBvbmJvYXJkIENBTiBjb250cm9sbGVyLiBDdXJyZW50bHksIHRoZSBNUEM1MjAwLCBNUEM1MjAwQiBhbmQKKwkgIE1QQzUxMjEgKFJldi4gMiBhbmQgbGF0ZXIpIGFyZSBzdXBwb3J0ZWQuCiAKLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbXNjYW4tbXBjNXh4eC5rby4KIAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKaW5kZXggMWRlNmY2My4uMDNlN2M0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KIApAQCAtMzYsMjIgKzM3LDIxIEBACiAKICNkZWZpbmUgRFJWX05BTUUgIm1wYzV4eHhfY2FuIgogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2NkbV9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgeworCXVuc2lnbmVkIGludCB0eXBlOworCXUzMiAoKmdldF9jbG9jaykoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkgaW50ICptc2Nhbl9jbGtzcmMpOworfTsKKworI2lmZGVmIENPTkZJR19QUENfTVBDNTJ4eAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBtcGM1Mnh4X2NkbV9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWNkbSIsIH0sCiAJe30KIH07CiAKLS8qCi0gKiBHZXQgZnJlcXVlbmN5IG9mIHRoZSBNU0NBTiBjbG9jayBzb3VyY2UKLSAqCi0gKiBFaXRoZXIgdGhlIG9zY2lsbGF0b3IgY2xvY2sgKFNZU19YVEFMX0lOKSBvciB0aGUgSVAgYnVzIGNsb2NrIChJUF9DTEspCi0gKiBjYW4gYmUgc2VsZWN0ZWQuIEFjY29yZGluZyB0byB0aGUgTVBDNTIwMCB1c2VyJ3MgbWFudWFsLCB0aGUgb3NjaWxsYXRvcgotICogY2xvY2sgaXMgdGhlIGJldHRlciBjaG9pY2UgYXMgaXQgaGFzIGxlc3Mgaml0dGVyIGJ1dCBkdWUgdG8gYSBoYXJkd2FyZQotICogYnVnLCBpdCBjYW4gbm90IGJlIHNlbGVjdGVkIGZvciB0aGUgb2xkIE1QQzUyMDAgUmV2LiBBIGNoaXBzLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgIF9fZGV2aW5pdCBtcGM1Mnh4X2Nhbl9jbG9ja19mcmVxKHN0cnVjdCBvZl9kZXZpY2UgKm9mLAotCQkJCQkJICAgICAgaW50IGNsb2NrX3NyYykKK3N0YXRpYyB1MzIgX19kZXZpbml0IG1wYzUyeHhfY2FuX2dldF9jbG9jayhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkJICAgY29uc3QgY2hhciAqY2xvY2tfbmFtZSwKKwkJCQkJICAgaW50ICptc2Nhbl9jbGtzcmMpCiB7CiAJdW5zaWduZWQgaW50IHB2cjsKIAlzdHJ1Y3QgbXBjNTJ4eF9jZG0gIF9faW9tZW0gKmNkbTsKQEAgLTYxLDIxICs2MSwzMyBAQAogCiAJcHZyID0gbWZzcHIoU1BSTl9QVlIpOwogCi0JZnJlcSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob2YtPm5vZGUpOworCS8qCisJICogRWl0aGVyIHRoZSBvc2NpbGxhdG9yIGNsb2NrIChTWVNfWFRBTF9JTikgb3IgdGhlIElQIGJ1cyBjbG9jaworCSAqIChJUF9DTEspIGNhbiBiZSBzZWxlY3RlZCBhcyBNU0NBTiBjbG9jayBzb3VyY2UuIEFjY29yZGluZyB0bworCSAqIHRoZSBNUEM1MjAwIHVzZXIncyBtYW51YWwsIHRoZSBvc2NpbGxhdG9yIGNsb2NrIGlzIHRoZSBiZXR0ZXIKKwkgKiBjaG9pY2UgYXMgaXQgaGFzIGxlc3Mgaml0dGVyLiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIHNlbGVjdGVkCisJICogYnkgZGVmYXVsdC4gVW5mb3J0dW5hdGVseSwgaXQgY2FuIG5vdCBiZSBzZWxlY3RlZCBmb3IgdGhlIG9sZAorCSAqIE1QQzUyMDAgUmV2LiBBIGNoaXBzIGR1ZSB0byBhIGhhcmR3YXJlIGJ1ZyAoY2hlY2sgZXJyYXRhKS4KKwkgKi8KKwlpZiAoY2xvY2tfbmFtZSAmJiBzdHJjbXAoY2xvY2tfbmFtZSwgImlwIikgPT0gMCkKKwkJKm1zY2FuX2Nsa3NyYyA9IE1TQ0FOX0NMS1NSQ19CVVM7CisJZWxzZQorCQkqbXNjYW5fY2xrc3JjID0gTVNDQU5fQ0xLU1JDX1hUQUw7CisKKwlmcmVxID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShvZmRldi0+bm9kZSk7CiAJaWYgKCFmcmVxKQogCQlyZXR1cm4gMDsKIAotCWlmIChjbG9ja19zcmMgPT0gTVNDQU5fQ0xLU1JDX0JVUyB8fCBwdnIgPT0gMHg4MDgyMjAxMSkKKwlpZiAoKm1zY2FuX2Nsa3NyYyA9PSBNU0NBTl9DTEtTUkNfQlVTIHx8IHB2ciA9PSAweDgwODIyMDExKQogCQlyZXR1cm4gZnJlcTsKIAogCS8qIERldGVybWluZSBTWVNfWFRBTF9JTiBmcmVxdWVuY3kgZnJvbSB0aGUgY2xvY2sgZG9tYWluIHNldHRpbmdzICovCiAJbnBfY2RtID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG1wYzUyeHhfY2RtX2lkcyk7CiAJaWYgKCFucF9jZG0pIHsKLQkJZGV2X2Vycigmb2YtPmRldiwgImNhbid0IGdldCBjbG9jayBub2RlIVxuIik7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjYW4ndCBnZXQgY2xvY2sgbm9kZSFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2RtID0gb2ZfaW9tYXAobnBfY2RtLCAwKTsKLQlvZl9ub2RlX3B1dChucF9jZG0pOwogCiAJaWYgKGluXzgoJmNkbS0+aXBiX2Nsa19zZWwpICYgMHgxKQogCQlmcmVxICo9IDI7CkBAIC04NCwyNiArOTYsMTc0IEBACiAJZnJlcSAqPSAodmFsICYgKDEgPDwgNSkpID8gOCA6IDQ7CiAJZnJlcSAvPSAodmFsICYgKDEgPDwgNikpID8gMTIgOiAxNjsKIAorCW9mX25vZGVfcHV0KG5wX2NkbSk7CiAJaW91bm1hcChjZG0pOwogCiAJcmV0dXJuIGZyZXE7CiB9CisjZWxzZSAvKiAhQ09ORklHX1BQQ19NUEM1Mnh4ICovCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1Mnh4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTJ4eCAqLworCisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CitzdHJ1Y3QgbXBjNTEyeF9jbG9ja2N0bCB7CisJdTMyIHNwbXI7CQkvKiBTeXN0ZW0gUExMIE1vZGUgUmVnICovCisJdTMyIHNjY3JbMl07CQkvKiBTeXN0ZW0gQ2xrIEN0cmwgUmVnIDEgJiAyICovCisJdTMyIHNjZnIxOwkJLyogU3lzdGVtIENsayBGcmVxIFJlZyAxICovCisJdTMyIHNjZnIyOwkJLyogU3lzdGVtIENsayBGcmVxIFJlZyAyICovCisJdTMyIHJlc2VydmVkOworCXUzMiBiY3I7CQkvKiBCcmVhZCBDcnVtYiBSZWcgKi8KKwl1MzIgcGNjclsxMl07CQkvKiBQU0MgQ2xrIEN0cmwgUmVnIDAtMTEgKi8KKwl1MzIgc3BjY3I7CQkvKiBTUERJRiBDbGsgQ3RybCBSZWcgKi8KKwl1MzIgY2NjcjsJCS8qIENGTSBDbGsgQ3RybCBSZWcgKi8KKwl1MzIgZGNjcjsJCS8qIERJVSBDbGsgQ25mZyBSZWcgKi8KKwl1MzIgbWNjcls0XTsJCS8qIE1TQ0FOIENsayBDdHJsIFJlZyAxLTMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbXBjNTEyeF9jbG9ja19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWNsb2NrIiwgfSwKKwl7fQorfTsKKworc3RhdGljIHUzMiBfX2RldmluaXQgbXBjNTEyeF9jYW5fZ2V0X2Nsb2NrKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpjbG9ja19uYW1lLAorCQkJCQkgICBpbnQgKm1zY2FuX2Nsa3NyYykKK3sKKwlzdHJ1Y3QgbXBjNTEyeF9jbG9ja2N0bCBfX2lvbWVtICpjbG9ja2N0bDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wX2Nsb2NrOworCXN0cnVjdCBjbGsgKnN5c19jbGssICpyZWZfY2xrOworCWludCBwbGVuLCBjbG9ja2lkeCwgY2xvY2tzcmMgPSAtMTsKKwl1MzIgc3lzX2ZyZXEsIHZhbCwgY2xvY2tkaXYgPSAxLCBmcmVxID0gMDsKKwljb25zdCB1MzIgKnB2YWw7CisKKwlucF9jbG9jayA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBtcGM1MTJ4X2Nsb2NrX2lkcyk7CisJaWYgKCFucF9jbG9jaykgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCBjbG9jayBub2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsb2NrY3RsID0gb2ZfaW9tYXAobnBfY2xvY2ssIDApOworCWlmICghY2xvY2tjdGwpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IG1hcCBjbG9jayByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIE1TQ0FOIGRldmljZSBpbmRleCBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCisJcHZhbCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgInJlZyIsICZwbGVuKTsKKwlCVUdfT04oIXB2YWwgfHwgcGxlbiA8IHNpemVvZigqcHZhbCkpOworCWNsb2NraWR4ID0gKCpwdmFsICYgMHg4MCkgPyAxIDogMDsKKwlpZiAoKnB2YWwgJiAweDIwMDApCisJCWNsb2NraWR4ICs9IDI7CisKKwkvKgorCSAqIENsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciBzZWxlY3Rpb246IDMgZGlmZmVyZW50IGNsb2NrIHNvdXJjZXMKKwkgKiBjYW4gYmUgc2VsZWN0ZWQ6ICJpcCIsICJyZWYiIG9yICJzeXMiLiBGb3IgdGhlIGxhdHRlciB0d28sIGEKKwkgKiBjbG9jayBkaXZpZGVyIGNhbiBiZSBkZWZpbmVkIGFzIHdlbGwuIElmIHRoZSBjbG9jayBzb3VyY2UgaXMKKwkgKiBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBkZXZpY2UgdHJlZSwgd2UgZmlyc3QgdHJ5IHRvIGZpbmQgYW4KKwkgKiBvcHRpbWFsIENBTiBzb3VyY2UgY2xvY2sgYmFzZWQgb24gdGhlIHN5c3RlbSBjbG9jay4gSWYgdGhhdAorCSAqIGlzIG5vdCBwb3NzbGlibGUsIHRoZSByZWZlcmVuY2UgY2xvY2sgd2lsbCBiZSB1c2VkLgorCSAqLworCWlmIChjbG9ja19uYW1lICYmICFzdHJjbXAoY2xvY2tfbmFtZSwgImlwIikpIHsKKwkJKm1zY2FuX2Nsa3NyYyA9IE1TQ0FOX0NMS1NSQ19JUFM7CisJCWZyZXEgPSBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KG9mZGV2LT5ub2RlKTsKKwl9IGVsc2UgeworCQkqbXNjYW5fY2xrc3JjID0gTVNDQU5fQ0xLU1JDX0JVUzsKKworCQlwdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLAorCQkJCSAgICAgICAiZnNsLG1zY2FuLWNsb2NrLWRpdmlkZXIiLCAmcGxlbik7CisJCWlmIChwdmFsICYmIHBsZW4gPT0gc2l6ZW9mKCpwdmFsKSkKKwkJCWNsb2NrZGl2ID0gKnB2YWw7CisJCWlmICghY2xvY2tkaXYpCisJCQljbG9ja2RpdiA9IDE7CisKKwkJaWYgKCFjbG9ja19uYW1lIHx8ICFzdHJjbXAoY2xvY2tfbmFtZSwgInN5cyIpKSB7CisJCQlzeXNfY2xrID0gY2xrX2dldCgmb2ZkZXYtPmRldiwgInN5c19jbGsiKTsKKwkJCWlmICghc3lzX2NsaykgeworCQkJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgc3lzX2Nsa1xuIik7CisJCQkJZ290byBleGl0X3VubWFwOworCQkJfQorCQkJLyogR2V0IGFuZCByb3VuZCB1cC9kb3duIHN5cyBjbG9jayByYXRlICovCisJCQlzeXNfZnJlcSA9IDEwMDAwMDAgKgorCQkJCSgoY2xrX2dldF9yYXRlKHN5c19jbGspICsgNDk5OTk5KSAvIDEwMDAwMDApOworCisJCQlpZiAoIWNsb2NrX25hbWUpIHsKKwkJCQkvKiBBIG11bHRpcGxlIG9mIDE2IE1IeiB3b3VsZCBiZSBvcHRpbWFsICovCisJCQkJaWYgKChzeXNfZnJlcSAlIDE2MDAwMDAwKSA9PSAwKSB7CisJCQkJCWNsb2Nrc3JjID0gMDsKKwkJCQkJY2xvY2tkaXYgPSBzeXNfZnJlcSAvIDE2MDAwMDAwOworCQkJCQlmcmVxID0gc3lzX2ZyZXEgLyBjbG9ja2RpdjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWNsb2Nrc3JjID0gMDsKKwkJCQlmcmVxID0gc3lzX2ZyZXEgLyBjbG9ja2RpdjsKKwkJCX0KKwkJfQorCisJCWlmIChjbG9ja3NyYyA8IDApIHsKKwkJCXJlZl9jbGsgPSBjbGtfZ2V0KCZvZmRldi0+ZGV2LCAicmVmX2NsayIpOworCQkJaWYgKCFyZWZfY2xrKSB7CisJCQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IGdldCByZWZfY2xrXG4iKTsKKwkJCQlnb3RvIGV4aXRfdW5tYXA7CisJCQl9CisJCQljbG9ja3NyYyA9IDE7CisJCQlmcmVxID0gY2xrX2dldF9yYXRlKHJlZl9jbGspIC8gY2xvY2tkaXY7CisJCX0KKwl9CisKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJb3V0X2JlMzIoJmNsb2NrY3RsLT5tY2NyW2Nsb2NraWR4XSwgMHgwKTsKKwlpZiAoY2xvY2tzcmMgPj0gMCkgeworCQkvKiBTZXQgc291cmNlIGFuZCBkaXZpZGVyICovCisJCXZhbCA9IChjbG9ja3NyYyA8PCAxNCkgfCAoKGNsb2NrZGl2IC0gMSkgPDwgMTcpOworCQlvdXRfYmUzMigmY2xvY2tjdGwtPm1jY3JbY2xvY2tpZHhdLCB2YWwpOworCQkvKiBFbmFibGUgY2xvY2sgKi8KKwkJb3V0X2JlMzIoJmNsb2NrY3RsLT5tY2NyW2Nsb2NraWR4XSwgdmFsIHwgMHgxMDAwMCk7CisJfQorCisJLyogRW5hYmxlIE1TQ0FOIGNsb2NrIGRvbWFpbiAqLworCXZhbCA9IGluX2JlMzIoJmNsb2NrY3RsLT5zY2NyWzFdKTsKKwlpZiAoISh2YWwgJiAoMSA8PCAyNSkpKQorCQlvdXRfYmUzMigmY2xvY2tjdGwtPnNjY3JbMV0sIHZhbCB8ICgxIDw8IDI1KSk7CisKKwlkZXZfZGJnKCZvZmRldi0+ZGV2LCAidXNpbmcgJyVzJyB3aXRoIGZyZXF1ZW5jeSBkaXZpZGVyICVkXG4iLAorCQkqbXNjYW5fY2xrc3JjID09IE1TQ0FOX0NMS1NSQ19JUFMgPyAiaXBzX2NsayIgOgorCQljbG9ja3NyYyA9PSAxID8gInJlZl9jbGsiIDogInN5c19jbGsiLCBjbG9ja2Rpdik7CisKK2V4aXRfdW5tYXA6CisJb2Zfbm9kZV9wdXQobnBfY2xvY2spOworCWlvdW5tYXAoY2xvY2tjdGwpOworCisJcmV0dXJuIGZyZXE7Cit9CisjZWxzZSAvKiAhQ09ORklHX1BQQ19NUEM1MTJ4ICovCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1MTJ4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1eHh4X2Nhbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKmRhdGEgPSAoc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKilpZC0+ZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdjsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JY29uc3QgY2hhciAqY2xrX3NyYzsKLQlpbnQgZXJyLCBpcnEsIGNsb2NrX3NyYzsKKwljb25zdCBjaGFyICpjbG9ja19uYW1lID0gTlVMTDsKKwlpbnQgaXJxLCBtc2Nhbl9jbGtzcmMgPSAwOworCWludCBlcnIgPSAtRU5PTUVNOwogCi0JYmFzZSA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgaW9yZW1hcFxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX21lbTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CkBAIC0xMTQsMzcgKzI3NCwyNyBAQAogCX0KIAogCWRldiA9IGFsbG9jX21zY2FuZGV2KCk7Ci0JaWYgKCFkZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKKwlpZiAoIWRldikKIAkJZ290byBleGl0X2Rpc3Bvc2VfaXJxOwotCX0KIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPnJlZ19iYXNlID0gYmFzZTsKIAlkZXYtPmlycSA9IGlycTsKIAotCS8qCi0JICogRWl0aGVyIHRoZSBvc2NpbGxhdG9yIGNsb2NrIChTWVNfWFRBTF9JTikgb3IgdGhlIElQIGJ1cyBjbG9jawotCSAqIChJUF9DTEspIGNhbiBiZSBzZWxlY3RlZCBhcyBNU0NBTiBjbG9jayBzb3VyY2UuIEFjY29yZGluZyB0bwotCSAqIHRoZSBNUEM1MjAwIHVzZXIncyBtYW51YWwsIHRoZSBvc2NpbGxhdG9yIGNsb2NrIGlzIHRoZSBiZXR0ZXIKLQkgKiBjaG9pY2UgYXMgaXQgaGFzIGxlc3Mgaml0dGVyLiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIHNlbGVjdGVkCi0JICogYnkgZGVmYXVsdC4KLQkgKi8KLQljbGtfc3JjID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZnNsLG1zY2FuLWNsb2NrLXNvdXJjZSIsIE5VTEwpOwotCWlmIChjbGtfc3JjICYmIHN0cmNtcChjbGtfc3JjLCAiaXAiKSA9PSAwKQotCQljbG9ja19zcmMgPSBNU0NBTl9DTEtTUkNfQlVTOwotCWVsc2UKLQkJY2xvY2tfc3JjID0gTVNDQU5fQ0xLU1JDX1hUQUw7Ci0JcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBtcGM1Mnh4X2Nhbl9jbG9ja19mcmVxKG9mZGV2LCBjbG9ja19zcmMpOworCWNsb2NrX25hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmc2wsbXNjYW4tY2xvY2stc291cmNlIiwgTlVMTCk7CisKKwlCVUdfT04oIWRhdGEpOworCXByaXYtPnR5cGUgPSBkYXRhLT50eXBlOworCXByaXYtPmNhbi5jbG9jay5mcmVxID0gZGF0YS0+Z2V0X2Nsb2NrKG9mZGV2LCBjbG9ja19uYW1lLAorCQkJCQkgICAgICAgJm1zY2FuX2Nsa3NyYyk7CiAJaWYgKCFwcml2LT5jYW4uY2xvY2suZnJlcSkgewotCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgZ2V0IE1TQ0FOIGNsb2NrIGZyZXF1ZW5jeVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgTVNDQU4gY2xvY2sgcHJvcGVydGllc1xuIik7CiAJCWdvdG8gZXhpdF9mcmVlX21zY2FuOwogCX0KIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCi0JZXJyID0gcmVnaXN0ZXJfbXNjYW5kZXYoZGV2LCBjbG9ja19zcmMpOworCWVyciA9IHJlZ2lzdGVyX21zY2FuZGV2KGRldiwgbXNjYW5fY2xrc3JjKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJyZWdpc3RlcmluZyAlcyBmYWlsZWQgKGVycj0lZClcbiIsCiAJCQlEUlZfTkFNRSwgZXJyKTsKQEAgLTE2NCw3ICszMTQsNyBAQAogCWlycV9kaXNwb3NlX21hcHBpbmcoaXJxKTsKIGV4aXRfdW5tYXBfbWVtOgogCWlvdW5tYXAoYmFzZSk7Ci1leGl0X3JlbGVhc2VfbWVtOgorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjI1LDggKzM3NSwyMCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSBfX2RldmluaXRkYXRhIG1wYzUyMDBfY2FuX2RhdGEgPSB7CisJLnR5cGUgPSBNU0NBTl9UWVBFX01QQzUyMDAsCisJLmdldF9jbG9jayA9IG1wYzUyeHhfY2FuX2dldF9jbG9jaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSBfX2RldmluaXRkYXRhIG1wYzUxMjFfY2FuX2RhdGEgPSB7CisJLnR5cGUgPSBNU0NBTl9UWVBFX01QQzUxMjEsCisJLmdldF9jbG9jayA9IG1wYzUxMnhfY2FuX2dldF9jbG9jaywKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbXBjNXh4eF9jYW5fdGFibGVbXSA9IHsKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4ifSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIiwgLmRhdGEgPSAmbXBjNTIwMF9jYW5fZGF0YSwgfSwKKwkvKiBOb3RlIHRoYXQgb25seSBNUEM1MTIxIFJldi4gMiAoYW5kIGxhdGVyKSBpcyBzdXBwb3J0ZWQgKi8KKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIiwgLmRhdGEgPSAmbXBjNTEyMV9jYW5fZGF0YSwgfSwKIAl7fSwKIH07CiAKQEAgLTI1NSw1ICs0MTcsNSBAQAogbW9kdWxlX2V4aXQobXBjNXh4eF9jYW5fZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIldvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTVBDNTIwMCBDQU4gZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNUEM1eHh4IENBTiBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKaW5kZXggMDczNDZmODguLjZiN2RkNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgQW5kcmV5IFZvbGtvdiA8YXZvbGtvdkB2YXJtYS1lbC5jb20+LAogICogICAgICAgICAgICAgICAgICAgICAgICAgVmFybWEgRWxlY3Ryb25pY3MgT3kKICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPgotICogQ29weXRpZ2h0IChDKSAyMDA4LTIwMDkgUGVuZ3V0cm9uaXggPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBlbmd1dHJvbml4IDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUyLDYgKzE1MiwxMiBAQAogCXByaXYtPnNoYWRvd19jYW5yaWVyID0gMDsKIAlwcml2LT5mbGFncyA9IDA7CiAKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJLyogQ2xlYXIgcGVuZGluZyBidXMtb2ZmIGNvbmRpdGlvbiAqLworCQlpZiAoaW5fOCgmcmVncy0+Y2FubWlzYykgJiBNU0NBTl9CT0hPTEQpCisJCQlvdXRfOCgmcmVncy0+Y2FubWlzYywgTVNDQU5fQk9IT0xEKTsKKwl9CisKIAllcnIgPSBtc2Nhbl9zZXRfbW9kZShkZXYsIE1TQ0FOX05PUk1BTF9NT0RFKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTYzLDggKzE2OSwyOSBAQAogCW91dF84KCZyZWdzLT5jYW50aWVyLCAwKTsKIAogCS8qIEVuYWJsZSByZWNlaXZlIGludGVycnVwdHMuICovCi0Jb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIE1TQ0FOX09WUklFIHwgTVNDQU5fUlhGSUUgfCBNU0NBTl9DU0NJRSB8Ci0JICAgICAgTVNDQU5fUlNUQVRFMSB8IE1TQ0FOX1JTVEFURTAgfCBNU0NBTl9UU1RBVEUxIHwgTVNDQU5fVFNUQVRFMCk7CisJb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIE1TQ0FOX1JYX0lOVFNfRU5BQkxFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zY2FuX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJc3RydWN0IG1zY2FuX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IG1zY2FuX3JlZ3MgKilwcml2LT5yZWdfYmFzZTsKKworCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQlXQVJOKCEoaW5fOCgmcmVncy0+Y2FubWlzYykgJiBNU0NBTl9CT0hPTEQpLAorCQkgICAgICJidXMtb2ZmIHN0YXRlIGV4cGVjdGVkIik7CisJCW91dF84KCZyZWdzLT5jYW5taXNjLCBNU0NBTl9CT0hPTEQpOworCQkvKiBSZS1lbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLworCQlvdXRfOCgmcmVncy0+Y2FucmllciwgTVNDQU5fUlhfSU5UU19FTkFCTEUpOworCX0gZWxzZSB7CisJCWlmIChwcml2LT5jYW4uc3RhdGUgPD0gQ0FOX1NUQVRFX0JVU19PRkYpCisJCQltc2Nhbl9zZXRfbW9kZShkZXYsIE1TQ0FOX0lOSVRfTU9ERSk7CisJCXJldHVybiBtc2Nhbl9zdGFydChkZXYpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTc3LDggKzIwNCw4IEBACiAJaW50IGksIHJ0ciwgYnVmX2lkOwogCXUzMiBjYW5faWQ7CiAKLQlpZiAoZnJhbWUtPmNhbl9kbGMgPiA4KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IoZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJb3V0XzgoJnJlZ3MtPmNhbnRpZXIsIDApOwogCkBAIC0zNTksOSArMzg2LDEyIEBACiAJCQkgKiBhdXRvbWF0aWNhbGx5LiBUbyBhdm9pZCB0aGF0IHdlIHN0b3AgdGhlIGNoaXAgZG9pbmcKIAkJCSAqIGEgbGlnaHQtd2VpZ2h0IHN0b3AgKHdlIGFyZSBpbiBpcnEtY29udGV4dCkuCiAJCQkgKi8KLQkJCW91dF84KCZyZWdzLT5jYW50aWVyLCAwKTsKLQkJCW91dF84KCZyZWdzLT5jYW5yaWVyLCAwKTsKLQkJCXNldGJpdHM4KCZyZWdzLT5jYW5jdGwwLCBNU0NBTl9TTFBSUSB8IE1TQ0FOX0lOSVRSUSk7CisJCQlpZiAocHJpdi0+dHlwZSAhPSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJCQlvdXRfOCgmcmVncy0+Y2FudGllciwgMCk7CisJCQkJb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIDApOworCQkJCXNldGJpdHM4KCZyZWdzLT5jYW5jdGwwLAorCQkJCQkgTVNDQU5fU0xQUlEgfCBNU0NBTl9JTklUUlEpOworCQkJfQogCQkJY2FuX2J1c19vZmYoZGV2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDkxLDkgKzUyMSw3IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENBTl9NT0RFX1NUQVJUOgotCQlpZiAocHJpdi0+Y2FuLnN0YXRlIDw9IENBTl9TVEFURV9CVVNfT0ZGKQotCQkJbXNjYW5fc2V0X21vZGUoZGV2LCBNU0NBTl9JTklUX01PREUpOwotCQlyZXQgPSBtc2Nhbl9zdGFydChkZXYpOworCQlyZXQgPSBtc2Nhbl9yZXN0YXJ0KGRldik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKQEAgLTU5MiwxOCArNjIwLDIxIEBACiAgICAgICAgLm5kb19zdGFydF94bWl0ICAgICAgICAgPSBtc2Nhbl9zdGFydF94bWl0LAogfTsKIAotaW50IHJlZ2lzdGVyX21zY2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjbG9ja19zcmMpCitpbnQgcmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1zY2FuX2Nsa3NyYykKIHsKIAlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1zY2FuX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IG1zY2FuX3JlZ3MgKilwcml2LT5yZWdfYmFzZTsKIAl1OCBjdGwxOwogCiAJY3RsMSA9IGluXzgoJnJlZ3MtPmNhbmN0bDEpOwotCWlmIChjbG9ja19zcmMpCisJaWYgKG1zY2FuX2Nsa3NyYykKIAkJY3RsMSB8PSBNU0NBTl9DTEtTUkM7CiAJZWxzZQogCQljdGwxICY9IH5NU0NBTl9DTEtTUkM7CiAKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpCisJCWN0bDEgfD0gTVNDQU5fQk9STTsgLyogYnVzLW9mZiByZWNvdmVyeSB1cG9uIHJlcXVlc3QgKi8KKwogCWN0bDEgfD0gTVNDQU5fQ0FORTsKIAlvdXRfOCgmcmVncy0+Y2FuY3RsMSwgY3RsMSk7CiAJdWRlbGF5KDEwMCk7CkBAIC02NTUsNiArNjg2LDcgQEAKIAlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJm1zY2FuX2JpdHRpbWluZ19jb25zdDsKIAlwcml2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IG1zY2FuX2RvX3NldF9iaXR0aW1pbmc7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gbXNjYW5fZG9fc2V0X21vZGU7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfU0laRTsgaSsrKSB7CiAJCXByaXYtPnR4X3F1ZXVlW2ldLmlkID0gaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5oIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKaW5kZXggMDBmYzRhYS4uNGZmOTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKQEAgLTM4LDE4ICszOCwyMCBAQAogI2RlZmluZSBNU0NBTl9DTEtTUkMJCTB4NDAKICNkZWZpbmUgTVNDQU5fTE9PUEIJCTB4MjAKICNkZWZpbmUgTVNDQU5fTElTVEVOCQkweDEwCisjZGVmaW5lIE1TQ0FOX0JPUk0JCTB4MDgKICNkZWZpbmUgTVNDQU5fV1VQTQkJMHgwNAogI2RlZmluZSBNU0NBTl9TTFBBSwkJMHgwMgogI2RlZmluZSBNU0NBTl9JTklUQUsJCTB4MDEKIAotLyogVXNlIHRoZSBNUEM1MjAwIE1TQ0FOIHZhcmlhbnQ/ICovCisvKiBVc2UgdGhlIE1QQzVYWFggTVNDQU4gdmFyaWFudD8gKi8KICNpZmRlZiBDT05GSUdfUFBDCi0jZGVmaW5lIE1TQ0FOX0ZPUl9NUEM1MjAwCisjZGVmaW5lIE1TQ0FOX0ZPUl9NUEM1WFhYCiAjZW5kaWYKIAotI2lmZGVmIE1TQ0FOX0ZPUl9NUEM1MjAwCisjaWZkZWYgTVNDQU5fRk9SX01QQzVYWFgKICNkZWZpbmUgTVNDQU5fQ0xLU1JDX0JVUwkwCiAjZGVmaW5lIE1TQ0FOX0NMS1NSQ19YVEFMCU1TQ0FOX0NMS1NSQworI2RlZmluZSBNU0NBTl9DTEtTUkNfSVBTCU1TQ0FOX0NMS1NSQwogI2Vsc2UKICNkZWZpbmUgTVNDQU5fQ0xLU1JDX0JVUwlNU0NBTl9DTEtTUkMKICNkZWZpbmUgTVNDQU5fQ0xLU1JDX1hUQUwJMApAQCAtMTM2LDcgKzEzOCw3IEBACiAjZGVmaW5lIE1TQ0FOX0VGRl9SVFJfU0hJRlQJMAogI2RlZmluZSBNU0NBTl9FRkZfRkxBR1MJCTB4MTgJLyogSURFICsgU1JSICovCiAKLSNpZmRlZiBNU0NBTl9GT1JfTVBDNTIwMAorI2lmZGVmIE1TQ0FOX0ZPUl9NUEM1WFhYCiAjZGVmaW5lIF9NU0NBTl9SRVNFUlZFRF8obiwgbnVtKSB1OCBfcmVzIyNuW251bV0KICNkZWZpbmUgX01TQ0FOX1JFU0VSVkVEX0RTUl9TSVpFCTIKICNlbHNlCkBAIC0xNjUsNjcgKzE2Nyw2NiBAQAogCXU4IGNhbnRic2VsOwkJCQkvKiArIDB4MTQgICAgIDB4MGEgKi8KIAl1OCBjYW5pZGFjOwkJCQkvKiArIDB4MTUgICAgIDB4MGIgKi8KIAl1OCByZXNlcnZlZDsJCQkJLyogKyAweDE2ICAgICAweDBjICovCi0JX01TQ0FOX1JFU0VSVkVEXyg2LCA1KTsJCQkvKiArIDB4MTcgICAgICAgICAgKi8KLSNpZm5kZWYgTVNDQU5fRk9SX01QQzUyMDAKLQl1OCBjYW5taXNjOwkJCQkvKiAgICAgICAgICAgIDB4MGQgKi8KLSNlbmRpZgorCV9NU0NBTl9SRVNFUlZFRF8oNiwgMik7CQkJLyogKyAweDE3ICAgICAgICAgICovCisJdTggY2FubWlzYzsJCQkJLyogKyAweDE5ICAgICAweDBkICovCisJX01TQ0FOX1JFU0VSVkVEXyg3LCAyKTsJCQkvKiArIDB4MWEgICAgICAgICAgKi8KIAl1OCBjYW5yeGVycjsJCQkJLyogKyAweDFjICAgICAweDBlICovCiAJdTggY2FudHhlcnI7CQkJCS8qICsgMHgxZCAgICAgMHgwZiAqLwotCV9NU0NBTl9SRVNFUlZFRF8oNywgMik7CQkJLyogKyAweDFlICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXyg4LCAyKTsJCQkvKiArIDB4MWUgICAgICAgICAgKi8KIAl1MTYgY2FuaWRhcjFfMDsJCQkJLyogKyAweDIwICAgICAweDEwICovCi0JX01TQ0FOX1JFU0VSVkVEXyg4LCAyKTsJCQkvKiArIDB4MjIgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDksIDIpOwkJCS8qICsgMHgyMiAgICAgICAgICAqLwogCXUxNiBjYW5pZGFyM18yOwkJCQkvKiArIDB4MjQgICAgIDB4MTIgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDksIDIpOwkJCS8qICsgMHgyNiAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTAsIDIpOwkJLyogKyAweDI2ICAgICAgICAgICovCiAJdTE2IGNhbmlkbXIxXzA7CQkJCS8qICsgMHgyOCAgICAgMHgxNCAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTAsIDIpOwkJLyogKyAweDJhICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxMSwgMik7CQkvKiArIDB4MmEgICAgICAgICAgKi8KIAl1MTYgY2FuaWRtcjNfMjsJCQkJLyogKyAweDJjICAgICAweDE2ICovCi0JX01TQ0FOX1JFU0VSVkVEXygxMSwgMik7CQkvKiArIDB4MmUgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDEyLCAyKTsJCS8qICsgMHgyZSAgICAgICAgICAqLwogCXUxNiBjYW5pZGFyNV80OwkJCQkvKiArIDB4MzAgICAgIDB4MTggKi8KLQlfTVNDQU5fUkVTRVJWRURfKDEyLCAyKTsJCS8qICsgMHgzMiAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTMsIDIpOwkJLyogKyAweDMyICAgICAgICAgICovCiAJdTE2IGNhbmlkYXI3XzY7CQkJCS8qICsgMHgzNCAgICAgMHgxYSAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTMsIDIpOwkJLyogKyAweDM2ICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxNCwgMik7CQkvKiArIDB4MzYgICAgICAgICAgKi8KIAl1MTYgY2FuaWRtcjVfNDsJCQkJLyogKyAweDM4ICAgICAweDFjICovCi0JX01TQ0FOX1JFU0VSVkVEXygxNCwgMik7CQkvKiArIDB4M2EgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDE1LCAyKTsJCS8qICsgMHgzYSAgICAgICAgICAqLwogCXUxNiBjYW5pZG1yN182OwkJCQkvKiArIDB4M2MgICAgIDB4MWUgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDE1LCAyKTsJCS8qICsgMHgzZSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTYsIDIpOwkJLyogKyAweDNlICAgICAgICAgICovCiAJc3RydWN0IHsKIAkJdTE2IGlkcjFfMDsJCQkvKiArIDB4NDAgICAgIDB4MjAgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMTYsIDIpOwkvKiArIDB4NDIgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygxNywgMik7CS8qICsgMHg0MiAgICAgICAgICAqLwogCQl1MTYgaWRyM18yOwkJCS8qICsgMHg0NCAgICAgMHgyMiAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygxNywgMik7CS8qICsgMHg0NiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDE4LCAyKTsJLyogKyAweDQ2ICAgICAgICAgICovCiAJCXUxNiBkc3IxXzA7CQkJLyogKyAweDQ4ICAgICAweDI0ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDE4LCAyKTsJLyogKyAweDRhICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMTksIDIpOwkvKiArIDB4NGEgICAgICAgICAgKi8KIAkJdTE2IGRzcjNfMjsJCQkvKiArIDB4NGMgICAgIDB4MjYgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMTksIDIpOwkvKiArIDB4NGUgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyMCwgMik7CS8qICsgMHg0ZSAgICAgICAgICAqLwogCQl1MTYgZHNyNV80OwkJCS8qICsgMHg1MCAgICAgMHgyOCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyMCwgMik7CS8qICsgMHg1MiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDIxLCAyKTsJLyogKyAweDUyICAgICAgICAgICovCiAJCXUxNiBkc3I3XzY7CQkJLyogKyAweDU0ICAgICAweDJhICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDIxLCAyKTsJLyogKyAweDU2ICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjIsIDIpOwkvKiArIDB4NTYgICAgICAgICAgKi8KIAkJdTggZGxyOwkJCQkvKiArIDB4NTggICAgIDB4MmMgKi8KLQkJIHU4Ojg7CQkJCS8qICsgMHg1OSAgICAgMHgyZCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyMiwgMik7CS8qICsgMHg1YSAgICAgICAgICAqLworCQl1OCByZXNlcnZlZDsJCQkvKiArIDB4NTkgICAgIDB4MmQgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyMywgMik7CS8qICsgMHg1YSAgICAgICAgICAqLwogCQl1MTYgdGltZTsJCQkvKiArIDB4NWMgICAgIDB4MmUgKi8KIAl9IHJ4OwotCSBfTVNDQU5fUkVTRVJWRURfKDIzLCAyKTsJCS8qICsgMHg1ZSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMjQsIDIpOwkJLyogKyAweDVlICAgICAgICAgICovCiAJc3RydWN0IHsKIAkJdTE2IGlkcjFfMDsJCQkvKiArIDB4NjAgICAgIDB4MzAgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjQsIDIpOwkvKiArIDB4NjIgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyNSwgMik7CS8qICsgMHg2MiAgICAgICAgICAqLwogCQl1MTYgaWRyM18yOwkJCS8qICsgMHg2NCAgICAgMHgzMiAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyNSwgMik7CS8qICsgMHg2NiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDI2LCAyKTsJLyogKyAweDY2ICAgICAgICAgICovCiAJCXUxNiBkc3IxXzA7CQkJLyogKyAweDY4ICAgICAweDM0ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI2LCAyKTsJLyogKyAweDZhICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjcsIDIpOwkvKiArIDB4NmEgICAgICAgICAgKi8KIAkJdTE2IGRzcjNfMjsJCQkvKiArIDB4NmMgICAgIDB4MzYgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjcsIDIpOwkvKiArIDB4NmUgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyOCwgMik7CS8qICsgMHg2ZSAgICAgICAgICAqLwogCQl1MTYgZHNyNV80OwkJCS8qICsgMHg3MCAgICAgMHgzOCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyOCwgMik7CS8qICsgMHg3MiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDI5LCAyKTsJLyogKyAweDcyICAgICAgICAgICovCiAJCXUxNiBkc3I3XzY7CQkJLyogKyAweDc0ICAgICAweDNhICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI5LCAyKTsJLyogKyAweDc2ICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMzAsIDIpOwkvKiArIDB4NzYgICAgICAgICAgKi8KIAkJdTggZGxyOwkJCQkvKiArIDB4NzggICAgIDB4M2MgKi8KIAkJdTggdGJwcjsJCQkvKiArIDB4NzkgICAgIDB4M2QgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMzAsIDIpOwkvKiArIDB4N2EgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygzMSwgMik7CS8qICsgMHg3YSAgICAgICAgICAqLwogCQl1MTYgdGltZTsJCQkvKiArIDB4N2MgICAgIDB4M2UgKi8KIAl9IHR4OwotCSBfTVNDQU5fUkVTRVJWRURfKDMxLCAyKTsJCS8qICsgMHg3ZSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMzIsIDIpOwkJLyogKyAweDdlICAgICAgICAgICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI3VuZGVmIF9NU0NBTl9SRVNFUlZFRF8KQEAgLTIzNyw2ICsyMzgsMTUgQEAKICNkZWZpbmUgTVNDQU5fUE9XRVJPRkZfTU9ERQkoTVNDQU5fQ1NXQUkgfCBNU0NBTl9TTFBSUSkKICNkZWZpbmUgTVNDQU5fU0VUX01PREVfUkVUUklFUwkyNTUKICNkZWZpbmUgTVNDQU5fRUNIT19TS0JfTUFYCTMKKyNkZWZpbmUgTVNDQU5fUlhfSU5UU19FTkFCTEUJKE1TQ0FOX09WUklFIHwgTVNDQU5fUlhGSUUgfCBNU0NBTl9DU0NJRSB8IFwKKwkJCQkgTVNDQU5fUlNUQVRFMSB8IE1TQ0FOX1JTVEFURTAgfCBcCisJCQkJIE1TQ0FOX1RTVEFURTEgfCBNU0NBTl9UU1RBVEUwKQorCisvKiBNU0NBTiB0eXBlIHZhcmlhbnRzICovCitlbnVtIHsKKwlNU0NBTl9UWVBFX01QQzUyMDAsCisJTVNDQU5fVFlQRV9NUEM1MTIxCit9OwogCiAjZGVmaW5lIEJUUjBfQlJQX01BU0sJCTB4M2YKICNkZWZpbmUgQlRSMF9TSldfU0hJRlQJCTYKQEAgLTI3MCw2ICsyODAsNyBAQAogCiBzdHJ1Y3QgbXNjYW5fcHJpdiB7CiAJc3RydWN0IGNhbl9wcml2IGNhbjsJLyogbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyICovCisJdW5zaWduZWQgaW50IHR5cGU7IAkvKiBNU0NBTiB0eXBlIHZhcmlhbnRzICovCiAJbG9uZyBvcGVuX3RpbWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwkvKiBpb3JlbWFwJ2VkIGFkZHJlc3MgdG8gcmVnaXN0ZXJzICovCkBAIC0yODUsMTIgKzI5Niw3IEBACiB9OwogCiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX21zY2FuZGV2KHZvaWQpOwotLyoKLSAqIGNsb2NrX3NyYzoKLSAqCTEgPSBUaGUgTVNDQU4gY2xvY2sgc291cmNlIGlzIHRoZSBvbmNoaXAgQnVzIENsb2NrLgotICoJMCA9IFRoZSBNU0NBTiBjbG9jayBzb3VyY2UgaXMgdGhlIGNoaXAgT3NjaWxsYXRvciBDbG9jay4KLSAqLwotZXh0ZXJuIGludCByZWdpc3Rlcl9tc2NhbmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2xvY2tfc3JjKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1zY2FuX2Nsa3NyYyk7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21zY2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjZW5kaWYgLyogX19NU0NBTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnCmluZGV4IDRjNjc0OTIuLjllMjc3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvS2NvbmZpZwpAQCAtNDQsNCArNDQsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgdGhlIFBDSWNhbnggYW5kIFBDSWNhbiBjYXJkcyAoMSwgMiBvcgogCSAgNCBjaGFubmVsKSBmcm9tIEt2YXNlciAoaHR0cDovL3d3dy5rdmFzZXIuY29tKS4KIAorY29uZmlnIENBTl9QTFhfUENJCisJdHJpc3RhdGUgIlBMWDkweHggUENJLWJyaWRnZSBiYXNlZCBDYXJkcyIKKwlkZXBlbmRzIG9uIFBDSQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBDQU4gaW50ZXJmYWNlIGNhcmRzIGJhc2VkIG9uCisJICB0aGUgUExYOTB4eCBQQ0kgYnJpZGdlLgorCSAgRHJpdmVyIHN1cHBvcnRzIG5vdzoKKwkgICAtIEFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEgY2FyZCAoaHR0cDovL3d3dy5hZGxpbmt0ZWNoLmNvbS8pCisJICAgLSBBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxIFNFIGNhcmQKKwkgICAtIE1hcmF0aG9uIENBTi1idXMtUENJIGNhcmQgKGh0dHA6Ly93d3cubWFyYXRob24ucnUvKQorCSAgIC0gVEVXUyBURUNITk9MT0dJRVMgVFBNQzgxMCBjYXJkIChodHRwOi8vd3d3LnRld3MuY29tLykKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKaW5kZXggOWQyNDVhYy4uY2U5MjQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKQEAgLTgsNSArOCw2IEBACiBvYmotJChDT05GSUdfQ0FOX1NKQTEwMDBfT0ZfUExBVEZPUk0pICs9IHNqYTEwMDBfb2ZfcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX0NBTl9FTVNfUENJKSArPSBlbXNfcGNpLm8KIG9iai0kKENPTkZJR19DQU5fS1ZBU0VSX1BDSSkgKz0ga3Zhc2VyX3BjaS5vCitvYmotJChDT05GSUdfQ0FOX1BMWF9QQ0kpICs9IHBseF9wY2kubwogCiBjY2ZsYWdzLSQoQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMKaW5kZXggZmQwNDc4OS4uODczMDA2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICNkZWZpbmUgRU1TX1BDSV9CQVNFX1NJWkUgIDQwOTYgLyogc2l6ZSBvZiBjb250cm9sbGVyIGFyZWEgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVtc19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZW1zX3BjaV90YmwpID0gewogCS8qIENQQy1QQ0kgdjEgKi8KIAl7UENJX1ZFTkRPUl9JRF9TSUVNRU5TLCAweDIxMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBDUEMtUENJIHYyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMKaW5kZXggN2RkNzc2OS4uNDQxZTc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAva3Zhc2VyX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2t2YXNlcl9wY2kuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEtWQVNFUl9QQ0lfVkVORE9SX0lEMiAgICAgMHgxYTA3ICAgIC8qIHRoZSBQQ0kgZGV2aWNlIGFuZCB2ZW5kb3IgSURzICovCiAjZGVmaW5lIEtWQVNFUl9QQ0lfREVWSUNFX0lEMiAgICAgMHgwMDA4CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrdmFzZXJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGt2YXNlcl9wY2lfdGJsKSA9IHsKIAl7S1ZBU0VSX1BDSV9WRU5ET1JfSUQxLCBLVkFTRVJfUENJX0RFVklDRV9JRDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7S1ZBU0VSX1BDSV9WRU5ET1JfSUQyLCBLVkFTRVJfUENJX0RFVklDRV9JRDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDZhNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgUGF2ZWwgQ2hlYmxha292IDxQLkIuQ2hlYmxha292QGlucC5uc2suc3U+CisgKgorICogRGVyaXZlZCBmcm9tIHRoZSBlbXNfcGNpLmMgZHJpdmVyOgorICoJQ29weXJpZ2h0IChDKSAyMDA3IFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPgorICoJQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBQbGVzc2luZyA8cGxlc3NpbmdAZW1zLXd1ZW5zY2hlLmNvbT4KKyAqCUNvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gSGFhcyA8aGFhc0BlbXMtd3VlbnNjaGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgInNqYTEwMDAuaCIKKworI2RlZmluZSBEUlZfTkFNRSAgInNqYTEwMDBfcGx4X3BjaSIKKworTU9EVUxFX0FVVEhPUigiUGF2ZWwgQ2hlYmxha292IDxQLkIuQ2hlYmxha292QGlucC5uc2suc3U+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvY2tldC1DQU4gZHJpdmVyIGZvciBQTFg5MHh4IFBDSS1icmlkZ2UgY2FyZHMgd2l0aCAiCisJCSAgICJ0aGUgU0pBMTAwMCBjaGlwcyIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEsICIKKwkJCSJBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxIFNFLCAiCisJCQkiTWFyYXRob24gQ0FOLWJ1cy1QQ0ksICIKKwkJCSJURVdTIFRFQ0hOT0xPR0lFUyBUUE1DODEwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKKyNkZWZpbmUgUExYX1BDSV9NQVhfQ0hBTiAyCisKK3N0cnVjdCBwbHhfcGNpX2NhcmQgeworCWludCBjaGFubmVsczsJCQkvKiBkZXRlY3RlZCBjaGFubmVscyBjb3VudCAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2W1BMWF9QQ0lfTUFYX0NIQU5dOworCXZvaWQgX19pb21lbSAqY29uZl9hZGRyOworfTsKKworI2RlZmluZSBQTFhfUENJX0NBTl9DTE9DSyAoMTYwMDAwMDAgLyAyKQorCisvKiBQTFg5MHh4IHJlZ2lzdGVycyAqLworI2RlZmluZSBQTFhfSU5UQ1NSCTB4NGMJCS8qIEludGVycnVwdCBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBQTFhfQ05UUkwJMHg1MAkJLyogVXNlciBJL08sIERpcmVjdCBTbGF2ZSBSZXNwb25zZSwKKwkJCQkJICogU2VyaWFsIEVFUFJPTSwgYW5kIEluaXRpYWxpemF0aW9uCisJCQkJCSAqIENvbnRyb2wgcmVnaXN0ZXIKKwkJCQkJICovCisKKyNkZWZpbmUgUExYX0xJTlQxX0VOCTB4MQkJLyogTG9jYWwgaW50ZXJydXB0IDEgZW5hYmxlICovCisjZGVmaW5lIFBMWF9MSU5UMl9FTgkoMSA8PCAzKQkvKiBMb2NhbCBpbnRlcnJ1cHQgMiBlbmFibGUgKi8KKyNkZWZpbmUgUExYX1BDSV9JTlRfRU4JKDEgPDwgNikJLyogUENJIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYX1BDSV9SRVNFVAkoMSA8PCAzMCkJLyogUENJIEFkYXB0ZXIgU29mdHdhcmUgUmVzZXQgKi8KKworLyoKKyAqIFRoZSBib2FyZCBjb25maWd1cmF0aW9uIGlzIHByb2JhYmx5IGZvbGxvd2luZzoKKyAqIFJYMSBpcyBjb25uZWN0ZWQgdG8gZ3JvdW5kLgorICogVFgxIGlzIG5vdCBjb25uZWN0ZWQuCisgKiBDTEtPIGlzIG5vdCBjb25uZWN0ZWQuCisgKiBTZXR0aW5nIHRoZSBPQ1IgcmVnaXN0ZXIgdG8gMHhEQSBpcyBhIGdvb2QgaWRlYS4KKyAqIFRoaXMgbWVhbnMgbm9ybWFsIG91dHB1dCBtb2RlLCBwdXNoLXB1bGwgYW5kIHRoZSBjb3JyZWN0IHBvbGFyaXR5LgorICovCisjZGVmaW5lIFBMWF9QQ0lfT0NSCShPQ1JfVFgwX1BVU0hQVUxMIHwgT0NSX1RYMV9QVVNIUFVMTCkKKworLyoKKyAqIEluIHRoZSBDRFIgcmVnaXN0ZXIsIHlvdSBzaG91bGQgc2V0IENCUCB0byAxLgorICogWW91IHdpbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIHNldCB0aGUgY2xvY2sgZGl2aWRlciB2YWx1ZSB0byA3CisgKiAobWVhbmluZyBkaXJlY3Qgb3NjaWxsYXRvciBvdXRwdXQpIGJlY2F1c2UgdGhlIHNlY29uZCBTSkExMDAwIGNoaXAKKyAqIGlzIGRyaXZlbiBieSB0aGUgZmlyc3Qgb25lIENMS09VVCBvdXRwdXQuCisgKi8KKyNkZWZpbmUgUExYX1BDSV9DRFIJCQkoQ0RSX0NCUCB8IENEUl9DTEtPVVRfTUFTSykKKworLyogU0pBMTAwMCBDb250cm9sIFJlZ2lzdGVyIGluIHRoZSBCYXNpY0NBTiBNb2RlICovCisjZGVmaW5lIFJFR19DUgkJCQkweDAwCisKKy8qIFN0YXRlcyBvZiBzb21lIFNKQTEwMDAgcmVnaXN0ZXJzIGFmdGVyIGhhcmR3YXJlIHJlc2V0IGluIHRoZSBCYXNpY0NBTiBtb2RlKi8KKyNkZWZpbmUgUkVHX0NSX0JBU0lDQ0FOX0lOSVRJQUwJCTB4MjEKKyNkZWZpbmUgUkVHX0NSX0JBU0lDQ0FOX0lOSVRJQUxfTUFTSwkweGExCisjZGVmaW5lIFJFR19TUl9CQVNJQ0NBTl9JTklUSUFMCQkweDBjCisjZGVmaW5lIFJFR19JUl9CQVNJQ0NBTl9JTklUSUFMCQkweGUwCisKKy8qIFN0YXRlcyBvZiBzb21lIFNKQTEwMDAgcmVnaXN0ZXJzIGFmdGVyIGhhcmR3YXJlIHJlc2V0IGluIHRoZSBQZWxpQ0FOIG1vZGUqLworI2RlZmluZSBSRUdfTU9EX1BFTElDQU5fSU5JVElBTAkJMHgwMQorI2RlZmluZSBSRUdfU1JfUEVMSUNBTl9JTklUSUFMCQkweDNjCisjZGVmaW5lIFJFR19JUl9QRUxJQ0FOX0lOSVRJQUwJCTB4MDAKKworI2RlZmluZSBBRExJTktfUENJX1ZFTkRPUl9JRAkJMHgxNDRBCisjZGVmaW5lIEFETElOS19QQ0lfREVWSUNFX0lECQkweDc4NDEKKworI2RlZmluZSBNQVJBVEhPTl9QQ0lfREVWSUNFX0lECQkweDI3MTUKKworI2RlZmluZSBURVdTX1BDSV9WRU5ET1JfSUQJCTB4MTQ5OAorI2RlZmluZSBURVdTX1BDSV9ERVZJQ0VfSURfVE1QQzgxMAkweDAzMkEKKworc3RhdGljIHZvaWQgcGx4X3BjaV9yZXNldF9jb21tb24oc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIHZvaWQgcGx4X3BjaV9yZXNldF9tYXJhdGhvbihzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKK3N0cnVjdCBwbHhfcGNpX2NoYW5uZWxfbWFwIHsKKwl1MzIgYmFyOworCXUzMiBvZmZzZXQ7CisJdTMyIHNpemU7CQkvKiAweDAwIC0gYXV0bywgZS5nLiBsZW5ndGggb2YgZW50aXJlIGJhciAqLworfTsKKworc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBjaGFubmVsX2NvdW50OworCXUzMiBjYW5fY2xvY2s7CisJdTggb2NyOwkJCS8qIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisJdTggY2RyOwkJCS8qIGNsb2NrIGRpdmlkZXIgcmVnaXN0ZXIgKi8KKworCS8qIFBhcmFtZXRlcnMgZm9yIG1hcHBpbmcgbG9jYWwgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCXN0cnVjdCBwbHhfcGNpX2NoYW5uZWxfbWFwIGNvbmZfbWFwOworCisJLyogUGFyYW1ldGVycyBmb3IgbWFwcGluZyB0aGUgU0pBMTAwMCBjaGlwcyAqLworCXN0cnVjdCBwbHhfcGNpX2NoYW5uZWxfbWFwIGNoYW5fbWFwX3RibFtQTFhfUENJX01BWF9DSEFOXTsKKworCS8qIFBvaW50ZXIgdG8gZGV2aWNlLWRlcGVuZGVudCByZXNldCBmdW5jdGlvbiAqLworCXZvaWQgKCpyZXNldF9mdW5jKShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit9OworCitzdGF0aWMgc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvIHBseF9wY2lfY2FyZF9pbmZvX2FkbGluayBfX2RldmluaXRkYXRhID0geworCSJBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxIiwgMiwKKwlQTFhfUENJX0NBTl9DTE9DSywgUExYX1BDSV9PQ1IsIFBMWF9QQ0lfQ0RSLAorCXsxLCAweDAwLCAweDAwfSwgeyB7MiwgMHgwMCwgMHg4MH0sIHsyLCAweDgwLCAweDgwfSB9LAorCSZwbHhfcGNpX3Jlc2V0X2NvbW1vbgorCS8qIGJhc2VkIG9uIFBMWDkwNTIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGx4X3BjaV9jYXJkX2luZm8gcGx4X3BjaV9jYXJkX2luZm9fYWRsaW5rX3NlIF9fZGV2aW5pdGRhdGEgPSB7CisJIkFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEgU0UiLCAyLAorCVBMWF9QQ0lfQ0FOX0NMT0NLLCBQTFhfUENJX09DUiwgUExYX1BDSV9DRFIsCisJezAsIDB4MDAsIDB4MDB9LCB7IHsyLCAweDAwLCAweDgwfSwgezIsIDB4ODAsIDB4ODB9IH0sCisJJnBseF9wY2lfcmVzZXRfY29tbW9uCisJLyogYmFzZWQgb24gUExYOTA1MiAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbHhfcGNpX2NhcmRfaW5mbyBwbHhfcGNpX2NhcmRfaW5mb19tYXJhdGhvbiBfX2RldmluaXRkYXRhID0geworCSJNYXJhdGhvbiBDQU4tYnVzLVBDSSIsIDIsCisJUExYX1BDSV9DQU5fQ0xPQ0ssIFBMWF9QQ0lfT0NSLCBQTFhfUENJX0NEUiwKKwl7MCwgMHgwMCwgMHgwMH0sIHsgezIsIDB4MDAsIDB4MDB9LCB7NCwgMHgwMCwgMHgwMH0gfSwKKwkmcGx4X3BjaV9yZXNldF9tYXJhdGhvbgorCS8qIGJhc2VkIG9uIFBMWDkwNTIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGx4X3BjaV9jYXJkX2luZm8gcGx4X3BjaV9jYXJkX2luZm9fdGV3cyBfX2RldmluaXRkYXRhID0geworCSJURVdTIFRFQ0hOT0xPR0lFUyBUUE1DODEwIiwgMiwKKwlQTFhfUENJX0NBTl9DTE9DSywgUExYX1BDSV9PQ1IsIFBMWF9QQ0lfQ0RSLAorCXswLCAweDAwLCAweDAwfSwgeyB7MiwgMHgwMDAsIDB4ODB9LCB7MiwgMHgxMDAsIDB4ODB9IH0sCisJJnBseF9wY2lfcmVzZXRfY29tbW9uCisJLyogYmFzZWQgb24gUExYOTAzMCAqLworfTsKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBseF9wY2lfdGJsKSA9IHsKKwl7CisJCS8qIEFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEgKi8KKwkJQURMSU5LX1BDSV9WRU5ET1JfSUQsIEFETElOS19QQ0lfREVWSUNFX0lELAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQlQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUiA8PCA4LCB+MCwKKwkJKGtlcm5lbF91bG9uZ190KSZwbHhfcGNpX2NhcmRfaW5mb19hZGxpbmsKKwl9LAorCXsKKwkJLyogQWRsaW5rIFBDSS03ODQxL2NQQ0ktNzg0MSBTRSAqLworCQlBRExJTktfUENJX1ZFTkRPUl9JRCwgQURMSU5LX1BDSV9ERVZJQ0VfSUQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCVBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX09USEVSIDw8IDgsIH4wLAorCQkoa2VybmVsX3Vsb25nX3QpJnBseF9wY2lfY2FyZF9pbmZvX2FkbGlua19zZQorCX0sCisJeworCQkvKiBNYXJhdGhvbiBDQU4tYnVzLVBDSSBjYXJkICovCisJCVBDSV9WRU5ET1JfSURfUExYLCBNQVJBVEhPTl9QQ0lfREVWSUNFX0lELAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkoa2VybmVsX3Vsb25nX3QpJnBseF9wY2lfY2FyZF9pbmZvX21hcmF0aG9uCisJfSwKKwl7CisJCS8qIFRFV1MgVEVDSE5PTE9HSUVTIFRQTUM4MTAgY2FyZCAqLworCQlURVdTX1BDSV9WRU5ET1JfSUQsIFRFV1NfUENJX0RFVklDRV9JRF9UTVBDODEwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkoa2VybmVsX3Vsb25nX3QpJnBseF9wY2lfY2FyZF9pbmZvX3Rld3MKKwl9LAorCXsgMCx9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBseF9wY2lfdGJsKTsKKworc3RhdGljIHU4IHBseF9wY2lfcmVhZF9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJcmV0dXJuIGlvcmVhZDgocHJpdi0+cmVnX2Jhc2UgKyBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgcGx4X3BjaV93cml0ZV9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHU4IHZhbCkKK3sKKwlpb3dyaXRlOCh2YWwsIHByaXYtPnJlZ19iYXNlICsgcG9ydCk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIENBTiBjb250cm9sbGVyIGlzIHByZXNlbnQgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbgorICogYnkgdHJ5aW5nIHRvIHN3aXRjaCAnZW0gZnJvbSB0aGUgQmFzaWMgbW9kZSBpbnRvIHRoZSBQZWxpQ0FOIG1vZGUuCisgKiBBbHNvIGNoZWNrIHN0YXRlcyBvZiBzb21lIHJlZ2lzdGVycyBpbiByZXNldCBtb2RlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwbHhfcGNpX2NoZWNrX3NqYTEwMDAoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdikKK3sKKwlpbnQgZmxhZyA9IDA7CisKKwkvKgorCSAqIENoZWNrIHJlZ2lzdGVycyBhZnRlciBoYXJkd2FyZSByZXNldCAodGhlIEJhc2ljIG1vZGUpCisJICogU2VlIHN0YXRlcyBvbiBwLiAxMCBvZiB0aGUgRGF0YXNoZWV0LgorCSAqLworCWlmICgocHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX0NSKSAmIFJFR19DUl9CQVNJQ0NBTl9JTklUSUFMX01BU0spID09CisJICAgIFJFR19DUl9CQVNJQ0NBTl9JTklUSUFMICYmCisJICAgIChwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfU1IpID09IFJFR19TUl9CQVNJQ0NBTl9JTklUSUFMKSAmJgorCSAgICAocHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX0lSKSA9PSBSRUdfSVJfQkFTSUNDQU5fSU5JVElBTCkpCisJCWZsYWcgPSAxOworCisJLyogQnJpbmcgdGhlIFNKQTEwMDAgaW50byB0aGUgUGVsaUNBTiBtb2RlKi8KKwlwcml2LT53cml0ZV9yZWcocHJpdiwgUkVHX0NEUiwgQ0RSX1BFTElDQU4pOworCisJLyoKKwkgKiBDaGVjayByZWdpc3RlcnMgYWZ0ZXIgcmVzZXQgaW4gdGhlIFBlbGlDQU4gbW9kZS4KKwkgKiBTZWUgc3RhdGVzIG9uIHAuIDIzIG9mIHRoZSBEYXRhc2hlZXQuCisJICovCisJaWYgKHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19NT0QpID09IFJFR19NT0RfUEVMSUNBTl9JTklUSUFMICYmCisJICAgIHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19TUikgPT0gUkVHX1NSX1BFTElDQU5fSU5JVElBTCAmJgorCSAgICBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfSVIpID09IFJFR19JUl9QRUxJQ0FOX0lOSVRJQUwpCisJCXJldHVybiBmbGFnOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQTFg5MHh4IHNvZnR3YXJlIHJlc2V0CisgKiBBbHNvIExSRVNFVCMgYXNzZXJ0cyBhbmQgYnJpbmdzIHRvIHJlc2V0IGRldmljZSBvbiB0aGUgTG9jYWwgQnVzIChpZiB3aXJlZCkuCisgKiBGb3IgbW9zdCBjYXJkcyBpdCdzIGVub3VnaCBmb3IgcmVzZXQgdGhlIFNKQTEwMDAgY2hpcHMuCisgKi8KK3N0YXRpYyB2b2lkIHBseF9wY2lfcmVzZXRfY29tbW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbHhfcGNpX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdTMyIGNudHJsOworCisJY250cmwgPSBpb3JlYWQzMihjYXJkLT5jb25mX2FkZHIgKyBQTFhfQ05UUkwpOworCWNudHJsIHw9IFBMWF9QQ0lfUkVTRVQ7CisJaW93cml0ZTMyKGNudHJsLCBjYXJkLT5jb25mX2FkZHIgKyBQTFhfQ05UUkwpOworCXVkZWxheSgxMDApOworCWNudHJsIF49IFBMWF9QQ0lfUkVTRVQ7CisJaW93cml0ZTMyKGNudHJsLCBjYXJkLT5jb25mX2FkZHIgKyBQTFhfQ05UUkwpOworfTsKKworLyogU3BlY2lhbCByZXNldCBmdW5jdGlvbiBmb3IgTWFyYXRob24gY2FyZCAqLworc3RhdGljIHZvaWQgcGx4X3BjaV9yZXNldF9tYXJhdGhvbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl2b2lkIF9faW9tZW0gKnJlc2V0X2FkZHI7CisJaW50IGk7CisJaW50IHJlc2V0X2JhclsyXSA9IHszLCA1fTsKKworCXBseF9wY2lfcmVzZXRfY29tbW9uKHBkZXYpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlyZXNldF9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIHJlc2V0X2JhcltpXSwgMCk7CisJCWlmICghcmVzZXRfYWRkcikgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlbWFwIHJlc2V0ICIKKwkJCQkic3BhY2UgJWQgKEJBUiVkKVxuIiwgaSwgcmVzZXRfYmFyW2ldKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJlc2V0IHRoZSBTSkExMDAwIGNoaXAgKi8KKwkJCWlvd3JpdGU4KDB4MSwgcmVzZXRfYWRkcik7CisJCQl1ZGVsYXkoMTAwKTsKKwkJCXBjaV9pb3VubWFwKHBkZXYsIHJlc2V0X2FkZHIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwbHhfcGNpX2RlbF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbHhfcGNpX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2OworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jaGFubmVsczsgaSsrKSB7CisJCWRldiA9IGNhcmQtPm5ldF9kZXZbaV07CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlJlbW92aW5nICVzXG4iLCBkZXYtPm5hbWUpOworCQl1bnJlZ2lzdGVyX3NqYTEwMDBkZXYoZGV2KTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJCWlmIChwcml2LT5yZWdfYmFzZSkKKwkJCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ19iYXNlKTsKKwkJZnJlZV9zamExMDAwZGV2KGRldik7CisJfQorCisJcGx4X3BjaV9yZXNldF9jb21tb24ocGRldik7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cyBmcm9tIFBDSS1jYXJkIChQTFg5MHh4KSBhbmQgZGlzYWJsZSBMb2NhbF8xLAorCSAqIExvY2FsXzIgaW50ZXJydXB0cworCSAqLworCWlvd3JpdGUzMigweDAsIGNhcmQtPmNvbmZfYWRkciArIFBMWF9JTlRDU1IpOworCisJaWYgKGNhcmQtPmNvbmZfYWRkcikKKwkJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+Y29uZl9hZGRyKTsKKworCWtmcmVlKGNhcmQpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKworLyoKKyAqIFByb2JlIFBMWDkweHggYmFzZWQgZGV2aWNlIGZvciB0aGUgU0pBMTAwMCBjaGlwcyBhbmQgcmVnaXN0ZXIgZWFjaAorICogYXZhaWxhYmxlIENBTiBjaGFubmVsIHRvIFNKQTEwMDAgU29ja2V0LUNBTiBzdWJzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBseF9wY2lfYWRkX2NhcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHBseF9wY2lfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGx4X3BjaV9jYXJkX2luZm8gKmNpOworCWludCBlcnIsIGk7CisJdTMyIHZhbDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwljaSA9IChzdHJ1Y3QgcGx4X3BjaV9jYXJkX2luZm8gKillbnQtPmRyaXZlcl9kYXRhOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGV0ZWN0ZWQgXCIlc1wiIGNhcmQgYXQgc2xvdCAjJWlcbiIsCisJCSBjaS0+bmFtZSwgUENJX1NMT1QocGRldi0+ZGV2Zm4pKTsKKworCS8qIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlcyB0byBob2xkIGFkZHJlc3NlcywgLi4uICovCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCWNhcmQtPmNoYW5uZWxzID0gMDsKKworCS8qIFJlbWFwIFBMWDkweHggY29uZmlndXJhdGlvbiBzcGFjZSAqLworCWFkZHIgPSBwY2lfaW9tYXAocGRldiwgY2ktPmNvbmZfbWFwLmJhciwgY2ktPmNvbmZfbWFwLnNpemUpOworCWlmICghYWRkcikgeworCQllcnIgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVtYXAgY29uZmlndXJhdGlvbiBzcGFjZSAiCisJCQkiKEJBUiVkKVxuIiwgY2ktPmNvbmZfbWFwLmJhcik7CisJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOworCX0KKwljYXJkLT5jb25mX2FkZHIgPSBhZGRyICsgY2ktPmNvbmZfbWFwLm9mZnNldDsKKworCWNpLT5yZXNldF9mdW5jKHBkZXYpOworCisJLyogRGV0ZWN0IGF2YWlsYWJsZSBjaGFubmVscyAqLworCWZvciAoaSA9IDA7IGkgPCBjaS0+Y2hhbm5lbF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBwbHhfcGNpX2NoYW5uZWxfbWFwICpjbSA9ICZjaS0+Y2hhbl9tYXBfdGJsW2ldOworCisJCWRldiA9IGFsbG9jX3NqYTEwMDBkZXYoMCk7CisJCWlmICghZGV2KSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmYWlsdXJlX2NsZWFudXA7CisJCX0KKworCQljYXJkLT5uZXRfZGV2W2ldID0gZGV2OworCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJcHJpdi0+cHJpdiA9IGNhcmQ7CisJCXByaXYtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCisJCWRldi0+aXJxID0gcGRldi0+aXJxOworCisJCS8qCisJCSAqIFJlbWFwIElPIHNwYWNlIG9mIHRoZSBTSkExMDAwIGNoaXBzCisJCSAqIFRoaXMgaXMgZGV2aWNlLWRlcGVuZGVudCBtYXBwaW5nCisJCSAqLworCQlhZGRyID0gcGNpX2lvbWFwKHBkZXYsIGNtLT5iYXIsIGNtLT5zaXplKTsKKwkJaWYgKCFhZGRyKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlbWFwIEJBUiVkXG4iLCBjbS0+YmFyKTsKKwkJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOworCQl9CisKKwkJcHJpdi0+cmVnX2Jhc2UgPSBhZGRyICsgY20tPm9mZnNldDsKKwkJcHJpdi0+cmVhZF9yZWcgPSBwbHhfcGNpX3JlYWRfcmVnOworCQlwcml2LT53cml0ZV9yZWcgPSBwbHhfcGNpX3dyaXRlX3JlZzsKKworCQkvKiBDaGVjayBpZiBjaGFubmVsIGlzIHByZXNlbnQgKi8KKwkJaWYgKHBseF9wY2lfY2hlY2tfc2phMTAwMChwcml2KSkgeworCQkJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBjaS0+Y2FuX2Nsb2NrOworCQkJcHJpdi0+b2NyID0gY2ktPm9jcjsKKwkJCXByaXYtPmNkciA9IGNpLT5jZHI7CisKKwkJCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisKKwkJCS8qIFJlZ2lzdGVyIFNKQTEwMDAgZGV2aWNlICovCisJCQllcnIgPSByZWdpc3Rlcl9zamExMDAwZGV2KGRldik7CisJCQlpZiAoZXJyKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiUmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZCAiCisJCQkJCSIoZXJyPSVkKVxuIiwgZXJyKTsKKwkJCQlmcmVlX3NqYTEwMDBkZXYoZGV2KTsKKwkJCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKKwkJCX0KKworCQkJY2FyZC0+Y2hhbm5lbHMrKzsKKworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNoYW5uZWwgIyVkIGF0IDB4JXAsIGlycSAlZCAiCisJCQkJICJyZWdpc3RlcmVkIGFzICVzXG4iLCBpICsgMSwgcHJpdi0+cmVnX2Jhc2UsCisJCQkJIGRldi0+aXJxLCBkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2hhbm5lbCAjJWQgbm90IGRldGVjdGVkXG4iLAorCQkJCWkgKyAxKTsKKwkJCWZyZWVfc2phMTAwMGRldihkZXYpOworCQl9CisJfQorCisJaWYgKCFjYXJkLT5jaGFubmVscykgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gUENJLWNhcmQgKFBMWDkweHgpIGFuZCBlbmFibGUgTG9jYWxfMSwKKwkgKiBMb2NhbF8yIGludGVycnVwdHMgZnJvbSB0aGUgU0pBMTAwMCBjaGlwcworCSAqLworCXZhbCA9IGlvcmVhZDMyKGNhcmQtPmNvbmZfYWRkciArIFBMWF9JTlRDU1IpOworCXZhbCB8PSBQTFhfTElOVDFfRU4gfCBQTFhfTElOVDJfRU4gfCBQTFhfUENJX0lOVF9FTjsKKwlpb3dyaXRlMzIodmFsLCBjYXJkLT5jb25mX2FkZHIgKyBQTFhfSU5UQ1NSKTsKKworCXJldHVybiAwOworCitmYWlsdXJlX2NsZWFudXA6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3I6ICVkLiBDbGVhbmluZyBVcC5cbiIsIGVycik7CisKKwlwbHhfcGNpX2RlbF9jYXJkKHBkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBseF9wY2lfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkX3RhYmxlID0gcGx4X3BjaV90YmwsCisJLnByb2JlID0gcGx4X3BjaV9hZGRfY2FyZCwKKwkucmVtb3ZlID0gcGx4X3BjaV9kZWxfY2FyZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBseF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwbHhfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbHhfcGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBseF9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGx4X3BjaV9pbml0KTsKK21vZHVsZV9leGl0KHBseF9wY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKaW5kZXggNTQyYTRmNy4uMTQ1YjFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYwpAQCAtMTMwLDggKzEzMCwxMiBAQAogCQkvKiBjaGVjayByZXNldCBiaXQgKi8KIAkJaWYgKChzdGF0dXMgJiBNT0RfUk0pID09IDApIHsKIAkJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7Ci0JCQkvKiBlbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQkJCXByaXYtPndyaXRlX3JlZyhwcml2LCBSRUdfSUVSLCBJUlFfQUxMKTsKKwkJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCQlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HKQorCQkJCXByaXYtPndyaXRlX3JlZyhwcml2LCBSRUdfSUVSLCBJUlFfQUxMKTsKKwkJCWVsc2UKKwkJCQlwcml2LT53cml0ZV9yZWcocHJpdiwgUkVHX0lFUiwKKwkJCQkJCUlSUV9BTEwgJiB+SVJRX0JFSSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjAzLDYgKzIwNywxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNqYTEwMDBfZ2V0X2JlcnJfY291bnRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVjKQoreworCXN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJYmVjLT50eGVyciA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19UWEVSUik7CisJYmVjLT5yeGVyciA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19SWEVSUik7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGluaXRpYWxpemUgU0pBMTAwMCBjaGlwOgogICogICAtIHJlc2V0IGNoaXAKQEAgLTI0OSw2ICsyNjQsOSBAQAogCXVpbnQ4X3QgZHJlZzsKIAlpbnQgaTsKIAorCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlmaSA9IGRsYyA9IGNmLT5jYW5fZGxjOwpAQCAtNDM0LDYgKzQ1Miw4IEBACiAJCQkJQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkUgOgogCQkJCUNBTl9FUlJfQ1JUTF9SWF9QQVNTSVZFOwogCQl9CisJCWNmLT5kYXRhWzZdID0gdHhlcnI7CisJCWNmLT5kYXRhWzddID0gcnhlcnI7CiAJfQogCiAJcHJpdi0+Y2FuLnN0YXRlID0gc3RhdGU7CkBAIC01NjQsNiArNTg0LDkgQEAKIAlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJnNqYTEwMDBfYml0dGltaW5nX2NvbnN0OwogCXByaXYtPmNhbi5kb19zZXRfYml0dGltaW5nID0gc2phMTAwMF9zZXRfYml0dGltaW5nOwogCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IHNqYTEwMDBfc2V0X21vZGU7CisJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBzamExMDAwX2dldF9iZXJyX2NvdW50ZXI7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVMgfAorCQlDQU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkc7CiAKIAlpZiAoc2l6ZW9mX3ByaXYpCiAJCXByaXYtPnByaXYgPSAodm9pZCAqKXByaXYgKyBzaXplb2Yoc3RydWN0IHNqYTEwMDBfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jIGIvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYwppbmRleCA1Yzk5M2MyLi4wYzNkMmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKQEAgLTI4LDkgKzI4LDExIEBACiAgKiAgICAgICAgIC5tYnhfb2Zmc2V0ICAgICAgICAgICAgID0gMHgyMDAwLAogICogICAgICAgICAuaW50X2xpbmUgICAgICAgICAgICAgICA9IDAsCiAgKiAgICAgICAgIC5yZXZpc2lvbiAgICAgICAgICAgICAgID0gMSwKKyAqICAgICAgICAgLnRyYW5zY2VpdmVyX3N3aXRjaCAgICAgPSBoZWNjX3BoeV9jb250cm9sLAogICogfTsKICAqCi0gKiBQbGVhc2Ugc2VlIGluY2x1ZGUvY2FuL3BsYXRmb3JtL3RpX2hlY2MuaCBmb3IgZGVzY3JpcHRpb24gb2YgYWJvdmUgZmllbGRzCisgKiBQbGVhc2Ugc2VlIGluY2x1ZGUvbGludXgvY2FuL3BsYXRmb3JtL3RpX2hlY2MuaCBmb3IgZGVzY3JpcHRpb24gb2YKKyAqIGFib3ZlIGZpZWxkcy4KICAqCiAgKi8KIApAQCAtMjIwLDYgKzIyMiw3IEBACiAJdTMyIHR4X2hlYWQ7CiAJdTMyIHR4X3RhaWw7CiAJdTMyIHJ4X25leHQ7CisJdm9pZCAoKnRyYW5zY2VpdmVyX3N3aXRjaCkoaW50KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF90eF9oZWFkX21iKHN0cnVjdCB0aV9oZWNjX3ByaXYgKnByaXYpCkBAIC0zMTcsNiArMzIwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHRpX2hlY2NfdHJhbnNjZWl2ZXJfc3dpdGNoKGNvbnN0IHN0cnVjdCB0aV9oZWNjX3ByaXYgKnByaXYsCisJCQkJCWludCBvbikKK3sKKwlpZiAocHJpdi0+dHJhbnNjZWl2ZXJfc3dpdGNoKQorCQlwcml2LT50cmFuc2NlaXZlcl9zd2l0Y2gob24pOworfQorCiBzdGF0aWMgdm9pZCB0aV9oZWNjX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXUzMiBjbnQ7CkBAIC00NzcsNiArNDg3LDkgQEAKIAl1MzIgbWJ4bm8sIG1ieF9tYXNrLCBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IobmRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCW1ieG5vID0gZ2V0X3R4X2hlYWRfbWIocHJpdik7CiAJbWJ4X21hc2sgPSBCSVQobWJ4bm8pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tYnhfbG9jaywgZmxhZ3MpOwpAQCAtNDkxLDcgKzUwNCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bWJ4X2xvY2ssIGZsYWdzKTsKIAogCS8qIFByZXBhcmUgbWFpbGJveCBmb3IgdHJhbnNtaXNzaW9uICovCi0JZGF0YSA9IG1pbl90KHU4LCBjZi0+Y2FuX2RsYywgOCk7CiAJaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpIC8qIFJlbW90ZSB0cmFuc21pc3Npb24gcmVxdWVzdCAqLwogCQlkYXRhIHw9IEhFQ0NfQ0FOTUNGX1JUUjsKIAlkYXRhIHw9IGdldF90eF9oZWFkX3ByaW8ocHJpdikgPDwgODsKQEAgLTgxNiwxNSArODI4LDE3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJdGlfaGVjY190cmFuc2NlaXZlcl9zd2l0Y2gocHJpdiwgMSk7CisKIAkvKiBPcGVuIGNvbW1vbiBjYW4gZGV2aWNlICovCiAJZXJyID0gb3Blbl9jYW5kZXYobmRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKG5kZXYtPmRldi5wYXJlbnQsICJvcGVuX2NhbmRldigpIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJdGlfaGVjY190cmFuc2NlaXZlcl9zd2l0Y2gocHJpdiwgMCk7CiAJCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JY2xrX2VuYWJsZShwcml2LT5jbGspOwogCXRpX2hlY2Nfc3RhcnQobmRldik7CiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpOwpAQCAtODQwLDggKzg1NCw4IEBACiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIAl0aV9oZWNjX3N0b3AobmRldik7CiAJZnJlZV9pcnEobmRldi0+aXJxLCBuZGV2KTsKLQljbGtfZGlzYWJsZShwcml2LT5jbGspOwogCWNsb3NlX2NhbmRldihuZGV2KTsKKwl0aV9oZWNjX3RyYW5zY2VpdmVyX3N3aXRjaChwcml2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTAzLDEwICs5MTcsMTIgQEAKIAlwcml2LT5oZWNjX3JhbV9vZmZzZXQgPSBwZGF0YS0+aGVjY19yYW1fb2Zmc2V0OwogCXByaXYtPm1ieF9vZmZzZXQgPSBwZGF0YS0+bWJ4X29mZnNldDsKIAlwcml2LT5pbnRfbGluZSA9IHBkYXRhLT5pbnRfbGluZTsKKwlwcml2LT50cmFuc2NlaXZlcl9zd2l0Y2ggPSBwZGF0YS0+dHJhbnNjZWl2ZXJfc3dpdGNoOwogCiAJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZ0aV9oZWNjX2JpdHRpbWluZ19jb25zdDsKIAlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSB0aV9oZWNjX2RvX3NldF9tb2RlOwogCXByaXYtPmNhbi5kb19nZXRfc3RhdGUgPSB0aV9oZWNjX2dldF9zdGF0ZTsKKwlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFXzNfU0FNUExFUzsKIAogCW5kZXYtPmlycSA9IGlycS0+c3RhcnQ7CiAJbmRldi0+ZmxhZ3MgfD0gSUZGX0VDSE87CkBAIC05MjUsNiArOTQxLDcgQEAKIAluZXRpZl9uYXBpX2FkZChuZGV2LCAmcHJpdi0+bmFwaSwgdGlfaGVjY19yeF9wb2xsLAogCQlIRUNDX0RFRl9OQVBJX1dFSUdIVCk7CiAKKwljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAJZXJyID0gcmVnaXN0ZXJfY2FuZGV2KG5kZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXJfY2FuZGV2KCkgZmFpbGVkXG4iKTsKQEAgLTk1Myw2ICs5NzAsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHRpX2hlY2NfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKIAljbGtfcHV0KHByaXYtPmNsayk7CiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpb3VubWFwKHByaXYtPmJhc2UpOwpAQCAtOTY0LDYgKzk4Miw0OCBAQAogCXJldHVybiAwOwogfQogCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdGlfaGVjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRpX2hlY2NfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCX0KKworCWhlY2Nfc2V0X2JpdChwcml2LCBIRUNDX0NBTk1DLCBIRUNDX0NBTk1DX1BEUik7CisJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NMRUVQSU5HOworCisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpX2hlY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB0aV9oZWNjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY2xrX2VuYWJsZShwcml2LT5jbGspOworCisJaGVjY19jbGVhcl9iaXQocHJpdiwgSEVDQ19DQU5NQywgSEVDQ19DQU5NQ19QRFIpOworCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHRpX2hlY2Nfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHRpX2hlY2NfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiAvKiBUSSBIRUNDIG5ldGRldmljZSBkcml2ZXI6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRpX2hlY2NfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CkBAIC05NzIsNiArMTAzMiw4IEBACiAJfSwKIAkucHJvYmUgPSB0aV9oZWNjX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0aV9oZWNjX3JlbW92ZSksCisJLnN1c3BlbmQgPSB0aV9oZWNjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRpX2hlY2NfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGlfaGVjY19pbml0X2RyaXZlcih2b2lkKQpAQCAtOTc5LDE0ICsxMDQxLDE1IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfREVTQyAiXG4iKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aV9oZWNjX2RyaXZlcik7CiB9Ci1tb2R1bGVfaW5pdCh0aV9oZWNjX2luaXRfZHJpdmVyKTsKIAogc3RhdGljIHZvaWQgX19leGl0IHRpX2hlY2NfZXhpdF9kcml2ZXIodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9ERVNDICIgdW5sb2FkZWRcbiIpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aV9oZWNjX2RyaXZlcik7CiB9CisKIG1vZHVsZV9leGl0KHRpX2hlY2NfZXhpdF9kcml2ZXIpOworbW9kdWxlX2luaXQodGlfaGVjY19pbml0X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIkFuYW50IEdvbGUgPGFuYW50Z29sZUB0aS5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWcKaW5kZXggYmJjNzhlMC4uOTdmZjZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwpAQCAtNSw2ICs1LDYgQEAKIAl0cmlzdGF0ZSAiRU1TIENQQy1VU0IvQVJNNyBDQU4vVVNCIGludGVyZmFjZSIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIG9uZSBjaGFubmVsIENQQy1VU0IvQVJNNyBDQU4vVVNCIGludGVyZmFjZQotCSAgZnJvbSBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlIChodHRwOi8vd3d3LmVtcy13dWVuc2NoZS5kZSkuCisJICBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlIChodHRwOi8vd3d3LmVtcy13dWVuc2NoZS5kZSkuCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKaW5kZXggZWZiYjA1YzcuLjExYzg3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCkBAIC03NjcsNiArNzY3LDkgQEAKIAlzaXplX3Qgc2l6ZSA9IENQQ19IRUFERVJfU0laRSArIENQQ19NU0dfSEVBREVSX0xFTgogCQkJKyBzaXplb2Yoc3RydWN0IGNwY19jYW5fbXNnKTsKIAorCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihuZXRkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAkvKiBjcmVhdGUgYSBVUkIsIGFuZCBhIGJ1ZmZlciBmb3IgaXQsIGFuZCBjb3B5IHRoZSBkYXRhIHRvIHRoZSBVUkIgKi8KIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKSB7CkBAIC0xMDE5LDggKzEwMjIsNyBAQAogCWRldi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZlbXNfdXNiX2JpdHRpbWluZ19jb25zdDsKIAlkZXYtPmNhbi5kb19zZXRfYml0dGltaW5nID0gZW1zX3VzYl9zZXRfYml0dGltaW5nOwogCWRldi0+Y2FuLmRvX3NldF9tb2RlID0gZW1zX3VzYl9zZXRfbW9kZTsKLQotCW5ldGRldi0+ZmxhZ3MgfD0gSUZGX0VDSE87IC8qIHdlIHN1cHBvcnQgbG9jYWwgZWNobyAqLworCWRldi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmZW1zX3VzYl9uZXRkZXZfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdmNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYwppbmRleCA4MGFjNTYzMS4uZDEyNGQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vdmNhbi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBjb25zdCBjaGFyIGJhbm5lcltdID0KQEAgLTcwLDEwICs3MSwxMSBAQAogCiBzdGF0aWMgdm9pZCB2Y2FuX3J4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAogCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIAogCXNrYi0+cHJvdG9jb2wgID0gaHRvbnMoRVRIX1BfQ0FOKTsKIAlza2ItPnBrdF90eXBlICA9IFBBQ0tFVF9CUk9BRENBU1Q7CkBAIC04NSwxMSArODcsMTUgQEAKIAogc3RhdGljIG5ldGRldl90eF90IHZjYW5fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCWludCBsb29wOwogCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXN0YXRzLT50eF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIAogCS8qIHNldCBmbGFnIHdoZXRoZXIgdGhpcyBwYWNrZXQgaGFzIHRvIGJlIGxvb3BlZCBiYWNrICovCiAJbG9vcCA9IHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLOwpAQCAtMTAzLDcgKzEwOSw3IEBACiAJCQkgKiBDQU4gY29yZSBhbHJlYWR5IGRpZCB0aGUgZWNobyBmb3IgdXMKIAkJCSAqLwogCQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIAkJfQogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBmODU3YWZlLi43Y2JjZmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC02Niw2ICs2Niw3IEBACiAgKiBieSBkZWZhdWx0LCB0aGUgc2VsZWN0aXZlIGNsZWFyIG1hc2sgaXMgc2V0IHVwIHRvIHByb2Nlc3MgcnggcGFja2V0cy4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwNiw3ICsxMDcsNyBAQAogI2RlZmluZSBjYXNfcGFnZV91bm1hcCh4KSAgICBrdW5tYXBfYXRvbWljKCh4KSwgS01fU0tCX0RBVEFfU09GVElSUSkKICNkZWZpbmUgQ0FTX05DUFVTICAgICAgICAgICAgbnVtX29ubGluZV9jcHVzKCkKIAotI2lmIGRlZmluZWQoQ09ORklHX0NBU1NJTklfTkFQSSkgJiYgZGVmaW5lZChIQVZFX05FVERFVl9QT0xMKQorI2lmZGVmIENPTkZJR19DQVNTSU5JX05BUEkKICNkZWZpbmUgVVNFX05BUEkKICNkZWZpbmUgY2FzX3NrYl9yZWxlYXNlKHgpICBuZXRpZl9yZWNlaXZlX3NrYih4KQogI2Vsc2UKQEAgLTE0Myw3ICsxNDQsNiBAQAogI3VuZGVmICBSWF9DT1VOVF9CVUZGRVJTICAgIC8qIGRlZmluZSB0byBjYWxjdWxhdGUgUlggYnVmZmVyIHN0YXRzICovCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiY2Fzc2luaSIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCiAjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS42IgogI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIxIE1heSAyMDA4IgogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlDQVNfQk1DUl9TUEVFRDEwMDB8Qk1DUl9GVUxMRFBMWCAvKiA1IDogMTAwMGJ0IGZ1bGwgZHVwbGV4ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FzX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNhc19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU1VOLCBQQ0lfREVWSUNFX0lEX1NVTl9DQVNTSU5JLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05TLCBQQ0lfREVWSUNFX0lEX05TX1NBVFVSTiwKQEAgLTY0OSw5ICs2NDksOCBAQAogCQljYXNfc3BhcmVfcmVjb3ZlcihjcCwgR0ZQX0FUT01JQyk7CiAJCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOwogCQlpZiAobGlzdF9lbXB0eSgmY3AtPnJ4X3NwYXJlX2xpc3QpKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gc3BhcmUgYnVmZmVycyAiCi0JCQkJICAgICAgICJhdmFpbGFibGUuXG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2VycihjcCwgcnhfZXJyLCBjcC0+ZGV2LAorCQkJCSAgIm5vIHNwYXJlIGJ1ZmZlcnMgYXZhaWxhYmxlXG4iKTsKIAkJCXNwaW5fdW5sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNzI4LDEyICs3MjcsMTAgQEAKICNlbmRpZgogc3RhcnRfYW5lZzoKIAlpZiAoY3AtPmxzdGF0ZSA9PSBsaW5rX3VwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ1MgbGluayBkb3duLlxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhjcC0+ZGV2LCAiUENTIGxpbmsgZG93blxuIik7CiAJfSBlbHNlIHsKIAkJaWYgKGNoYW5nZWQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGNvbmZpZ3VyYXRpb24gY2hhbmdlZFxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGNwLT5kZXYsICJsaW5rIGNvbmZpZ3VyYXRpb24gY2hhbmdlZFxuIik7CiAJCX0KIAl9CiAJY3AtPmxzdGF0ZSA9IGxpbmtfZG93bjsKQEAgLTgyNiwxMiArODIzLDEyIEBACiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNwLT5wZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYXNzaW5pOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCXByX2VycigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAogCQkgICAgICAgZndfbmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChmdy0+c2l6ZSA8IDIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYXNzaW5pOiBib2d1cyBsZW5ndGggJXp1IGluIFwiJXNcIlxuIiwKKwkJcHJfZXJyKCJib2d1cyBsZW5ndGggJXp1IGluIFwiJXNcIlxuIiwKIAkJICAgICAgIGZ3LT5zaXplLCBmd19uYW1lKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC04NDEsNyArODM4LDcgQEAKIAljcC0+ZndfZGF0YSA9IHZtYWxsb2MoY3AtPmZ3X3NpemUpOwogCWlmICghY3AtPmZ3X2RhdGEpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYXNzaW5pOiBcIiVzXCIgRmFpbGVkICVkXG4iLCBmd19uYW1lLCBlcnIpOworCQlwcl9lcnIoIlwiJXNcIiBGYWlsZWQgJWRcbiIsIGZ3X25hbWUsIGVycik7CiAJCWdvdG8gb3V0OwogCX0KIAltZW1jcHkoY3AtPmZ3X2RhdGEsICZmdy0+ZGF0YVsyXSwgY3AtPmZ3X3NpemUpOwpAQCAtOTg2LDkgKzk4Myw4IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGxpbWl0IDw9IDApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUENTIHJlc2V0IGJpdCB3b3VsZCBub3QgIgotCQkJICAgICAgICJjbGVhciBbJTA4eF0uXG4iLCBjcC0+ZGV2LT5uYW1lLAotCQkJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19TVEFURV9NQUNISU5FKSk7CisJCQluZXRkZXZfd2FybihjcC0+ZGV2LCAiUENTIHJlc2V0IGJpdCB3b3VsZCBub3QgY2xlYXIgWyUwOHhdXG4iLAorCQkJCSAgICByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfU1RBVEVfTUFDSElORSkpOwogCiAJCS8qIE1ha2Ugc3VyZSBQQ1MgaXMgZGlzYWJsZWQgd2hpbGUgY2hhbmdpbmcgYWR2ZXJ0aXNlbWVudAogCQkgKiBjb25maWd1cmF0aW9uLgpAQCAtMTAzMCwxMSArMTAyNiw4IEBACiAJICovCiAJaWYgKChzdGF0ICYgKFBDU19NSUlfU1RBVFVTX0FVVE9ORUdfQ09NUCB8CiAJCSAgICAgUENTX01JSV9TVEFUVVNfUkVNT1RFX0ZBVUxUKSkgPT0KLQkgICAgKFBDU19NSUlfU1RBVFVTX0FVVE9ORUdfQ09NUCB8IFBDU19NSUlfU1RBVFVTX1JFTU9URV9GQVVMVCkpIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKGNwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ1MgUmVtb3RlRmF1bHRcbiIsCi0JCQkgICAgICAgY3AtPmRldi0+bmFtZSk7Ci0JfQorCSAgICAoUENTX01JSV9TVEFUVVNfQVVUT05FR19DT01QIHwgUENTX01JSV9TVEFUVVNfUkVNT1RFX0ZBVUxUKSkKKwkJbmV0aWZfaW5mbyhjcCwgbGluaywgY3AtPmRldiwgIlBDUyBSZW1vdGVGYXVsdFxuIik7CiAKIAkvKiB3b3JrIGFyb3VuZCBsaW5rIGRldGVjdGlvbiBpc3N1ZSBieSBxdWVyeWluZyB0aGUgUENTIHN0YXRlCiAJICogbWFjaGluZSBkaXJlY3RseS4KQEAgLTEwODEsMTAgKzEwNzQsOCBAQAogCQkJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9PTl9GQUlMVVJFOwogCQl9CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGNwLT5kZXYpOwotCQlpZiAoY3AtPm9wZW5lZCAmJiBuZXRpZl9tc2dfbGluayhjcCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ1MgbGluayBkb3duLlxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKLQkJfQorCQlpZiAoY3AtPm9wZW5lZCkKKwkJCW5ldGlmX2luZm8oY3AsIGxpbmssIGNwLT5kZXYsICJQQ1MgbGluayBkb3duXG4iKTsKIAogCQkvKiBDYXNzaW5pIG9ubHk6IGlmIHlvdSBmb3JjZSBhIG1vZGUsIHRoZXJlIGNhbiBiZQogCQkgKiBzeW5jIHByb2JsZW1zIG9uIGxpbmsgZG93bi4gdG8gZml4IHRoYXQsIHRoZSBmb2xsb3dpbmcKQEAgLTExMzksOSArMTEzMCw4IEBACiAJaWYgKCF0eG1hY19zdGF0KQogCQlyZXR1cm4gMDsKIAotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHhtYWMgaW50ZXJydXB0LCB0eG1hY19zdGF0OiAweCV4XG4iLAotCQkJY3AtPmRldi0+bmFtZSwgdHhtYWNfc3RhdCk7CisJbmV0aWZfcHJpbnRrKGNwLCBpbnRyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkgICAgICJ0eG1hYyBpbnRlcnJ1cHQsIHR4bWFjX3N0YXQ6IDB4JXhcbiIsIHR4bWFjX3N0YXQpOwogCiAJLyogRGVmZXIgdGltZXIgZXhwaXJhdGlvbiBpcyBxdWl0ZSBub3JtYWwsCiAJICogZG9uJ3QgZXZlbiBsb2cgdGhlIGV2ZW50LgpAQCAtMTE1MiwxNCArMTE0MiwxMiBAQAogCiAJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKIAlpZiAodHhtYWNfc3RhdCAmIE1BQ19UWF9VTkRFUlJVTikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUWCBNQUMgeG1pdCB1bmRlcnJ1bi5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIlRYIE1BQyB4bWl0IHVuZGVycnVuXG4iKTsKIAkJY3AtPm5ldF9zdGF0c1swXS50eF9maWZvX2Vycm9ycysrOwogCX0KIAogCWlmICh0eG1hY19zdGF0ICYgTUFDX1RYX01BWF9QQUNLRVRfRVJSKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRYIE1BQyBtYXggcGFja2V0IHNpemUgZXJyb3IuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJUWCBNQUMgbWF4IHBhY2tldCBzaXplIGVycm9yXG4iKTsKIAkJY3AtPm5ldF9zdGF0c1swXS50eF9lcnJvcnMrKzsKIAl9CiAKQEAgLTE0ODcsOCArMTQ3NSw3IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChsaW1pdCA9PSBTVE9QX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYIE1BQyB3aWxsIG5vdCBkaXNhYmxlLCByZXNldHRpbmcgd2hvbGUgIgotCQkgICAgICAgImNoaXAuXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIlJYIE1BQyB3aWxsIG5vdCBkaXNhYmxlLCByZXNldHRpbmcgd2hvbGUgY2hpcFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTUwMCw4ICsxNDg3LDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGxpbWl0ID09IFNUT1BfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUlggRE1BIHdpbGwgbm90IGRpc2FibGUsIHJlc2V0dGluZyB3aG9sZSAiCi0JCSAgICAgICAiY2hpcC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiUlggRE1BIHdpbGwgbm90IGRpc2FibGUsIHJlc2V0dGluZyB3aG9sZSBjaGlwXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNTE1LDggKzE1MDEsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAlpZiAobGltaXQgPT0gU1RPUF9UUklFUykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSWCByZXNldCBjb21tYW5kIHdpbGwgbm90IGV4ZWN1dGUsICIKLQkJICAgICAgICJyZXNldHRpbmcgd2hvbGUgY2hpcC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiUlggcmVzZXQgY29tbWFuZCB3aWxsIG5vdCBleGVjdXRlLCByZXNldHRpbmcgd2hvbGUgY2hpcFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTU0NSw5ICsxNTMwLDcgQEAKIAlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeG1hYyBpbnRlcnJ1cHQsIHN0YXQ6IDB4JXhcbiIsCi0JCQljcC0+ZGV2LT5uYW1lLCBzdGF0KTsKKwluZXRpZl9kYmcoY3AsIGludHIsIGNwLT5kZXYsICJyeG1hYyBpbnRlcnJ1cHQsIHN0YXQ6IDB4JXhcbiIsIHN0YXQpOwogCiAJLyogdGhlc2UgYXJlIGFsbCByb2xsb3ZlcnMgKi8KIAlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMF0pOwpAQCAtMTU4MCw5ICsxNTYzLDggQEAKIAlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtYWMgaW50ZXJydXB0LCBzdGF0OiAweCV4XG4iLAotCQkJY3AtPmRldi0+bmFtZSwgc3RhdCk7CisJbmV0aWZfcHJpbnRrKGNwLCBpbnRyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkgICAgICJtYWMgaW50ZXJydXB0LCBzdGF0OiAweCV4XG4iLCBzdGF0KTsKIAogCS8qIFRoaXMgaW50ZXJydXB0IGlzIGp1c3QgZm9yIHBhdXNlIGZyYW1lIGFuZCBwYXVzZQogCSAqIHRyYWNraW5nLiAgSXQgaXMgdXNlZnVsIGZvciBkaWFnbm9zdGljcyBhbmQgZGVidWcKQEAgLTE2MDUsOSArMTU4Nyw3IEBACiAKIAlzd2l0Y2ggKGNwLT5sc3RhdGUpIHsKIAljYXNlIGxpbmtfZm9yY2VfcmV0OgotCQlpZiAobmV0aWZfbXNnX2xpbmsoY3ApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG9uZWcgZmFpbGVkIGFnYWluLCBrZWVwaW5nIgotCQkJCSIgZm9yY2VkIG1vZGVcbiIsIGNwLT5kZXYtPm5hbWUpOworCQluZXRpZl9pbmZvKGNwLCBsaW5rLCBjcC0+ZGV2LCAiQXV0b25lZyBmYWlsZWQgYWdhaW4sIGtlZXBpbmcgZm9yY2VkIG1vZGVcbiIpOwogCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgY3AtPmxpbmtfZmNudGwpOwogCQljcC0+dGltZXJfdGlja3MgPSA1OwogCQljcC0+bHN0YXRlID0gbGlua19mb3JjZV9vazsKQEAgLTE2NzUsOSArMTY1NSw5IEBACiAJCQljYXNfbWlmX3BvbGwoY3AsIDApOwogCQkJY3AtPmxpbmtfZmNudGwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKIAkJCWNwLT50aW1lcl90aWNrcyA9IDU7Ci0JCQlpZiAoY3AtPm9wZW5lZCAmJiBuZXRpZl9tc2dfbGluayhjcCkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdvdCBsaW5rIGFmdGVyIGZhbGxiYWNrLCByZXRyeWluZyIKLQkJCQkgICAgICAgIiBhdXRvbmVnIG9uY2UuLi5cbiIsIGNwLT5kZXYtPm5hbWUpOworCQkJaWYgKGNwLT5vcGVuZWQpCisJCQkJbmV0aWZfaW5mbyhjcCwgbGluaywgY3AtPmRldiwKKwkJCQkJICAgIkdvdCBsaW5rIGFmdGVyIGZhbGxiYWNrLCByZXRyeWluZyBhdXRvbmVnIG9uY2UuLi5cbiIpOwogCQkJY2FzX3BoeV93cml0ZShjcCwgTUlJX0JNQ1IsCiAJCQkJICAgICAgY3AtPmxpbmtfZmNudGwgfCBCTUNSX0FORU5BQkxFIHwKIAkJCQkgICAgICBCTUNSX0FOUkVTVEFSVCk7CkBAIC0xNzA0LDkgKzE2ODQsOCBAQAogCQljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX0xJTktfRE9XTjsKIAogCQluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKLQkJaWYgKGNwLT5vcGVuZWQgJiYgbmV0aWZfbXNnX2xpbmsoY3ApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgZG93blxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJaWYgKGNwLT5vcGVuZWQpCisJCQluZXRpZl9pbmZvKGNwLCBsaW5rLCBjcC0+ZGV2LCAiTGluayBkb3duXG4iKTsKIAkJcmVzdGFydCA9IDE7CiAKIAl9IGVsc2UgaWYgKCsrY3AtPnRpbWVyX3RpY2tzID4gMTApCkBAIC0xNzM3LDIzICsxNzE2LDIzIEBACiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBlcnJvciBbJTA0eDolMDR4XSAiLCBkZXYtPm5hbWUsIHN0YXQsCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0JJTV9ESUFHKSk7CisJbmV0ZGV2X2VycihkZXYsICJQQ0kgZXJyb3IgWyUwNHg6JTA0eF0iLAorCQkgICBzdGF0LCByZWFkbChjcC0+cmVncyArIFJFR19CSU1fRElBRykpOwogCiAJLyogY2Fzc2luaSsgaGFzIHRoaXMgcmVzZXJ2ZWQgKi8KIAlpZiAoKHN0YXQgJiBQQ0lfRVJSX0JBREFDSykgJiYKIAkgICAgKChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpID09IDApKQotCQlwcmludGsoIjxObyBBQ0s2NCMgZHVyaW5nIEFCUzY0IGN5Y2xlPiAiKTsKKwkJcHJfY29udCgiIDxObyBBQ0s2NCMgZHVyaW5nIEFCUzY0IGN5Y2xlPiIpOwogCiAJaWYgKHN0YXQgJiBQQ0lfRVJSX0RUUlRPKQotCQlwcmludGsoIjxEZWxheWVkIHRyYW5zYWN0aW9uIHRpbWVvdXQ+ICIpOworCQlwcl9jb250KCIgPERlbGF5ZWQgdHJhbnNhY3Rpb24gdGltZW91dD4iKTsKIAlpZiAoc3RhdCAmIFBDSV9FUlJfT1RIRVIpCi0JCXByaW50aygiPG90aGVyPiAiKTsKKwkJcHJfY29udCgiIDxvdGhlcj4iKTsKIAlpZiAoc3RhdCAmIFBDSV9FUlJfQklNX0RNQV9XUklURSkKLQkJcHJpbnRrKCI8QklNIERNQSAwIHdyaXRlIHJlcT4gIik7CisJCXByX2NvbnQoIiA8QklNIERNQSAwIHdyaXRlIHJlcT4iKTsKIAlpZiAoc3RhdCAmIFBDSV9FUlJfQklNX0RNQV9SRUFEKQotCQlwcmludGsoIjxCSU0gRE1BIDAgcmVhZCByZXE+ICIpOwotCXByaW50aygiXG4iKTsKKwkJcHJfY29udCgiIDxCSU0gRE1BIDAgcmVhZCByZXE+Iik7CisJcHJfY29udCgiXG4iKTsKIAogCWlmIChzdGF0ICYgUENJX0VSUl9PVEhFUikgewogCQl1MTYgY2ZnOwpAQCAtMTc2MiwyNSArMTc0MSwxOSBAQAogCQkgKiB0cnVlIGNhdXNlLgogCQkgKi8KIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY3AtPnBkZXYsIFBDSV9TVEFUVVMsICZjZmcpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZWFkIFBDSSBjZmcgc3BhY2Ugc3RhdHVzIFslMDR4XVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgY2ZnKTsKKwkJbmV0ZGV2X2VycihkZXYsICJSZWFkIFBDSSBjZmcgc3BhY2Ugc3RhdHVzIFslMDR4XVxuIiwgY2ZnKTsKIAkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfUEFSSVRZKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIHBhcml0eSBlcnJvciBkZXRlY3RlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUENJIHBhcml0eSBlcnJvciBkZXRlY3RlZFxuIik7CiAJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgdGFyZ2V0IGFib3J0LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJQQ0kgdGFyZ2V0IGFib3J0XG4iKTsKIAkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBtYXN0ZXIgYWNrcyB0YXJnZXQgYWJvcnQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlBDSSBtYXN0ZXIgYWNrcyB0YXJnZXQgYWJvcnRcbiIpOwogCQlpZiAoY2ZnICYgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIG1hc3RlciBhYm9ydC5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlBDSSBtYXN0ZXIgYWJvcnRcbiIpOwogCQlpZiAoY2ZnICYgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIHN5c3RlbSBlcnJvciBTRVJSIy5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUENJIHN5c3RlbSBlcnJvciBTRVJSI1xuIik7CiAJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBwYXJpdHkgZXJyb3IuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlBDSSBwYXJpdHkgZXJyb3JcbiIpOwogCiAJCS8qIFdyaXRlIHRoZSBlcnJvciBiaXRzIGJhY2sgdG8gY2xlYXIgdGhlbS4gKi8KIAkJY2ZnICY9IChQQ0lfU1RBVFVTX1BBUklUWSB8CkBAIC0xODA2LDkgKzE3NzksOCBAQAogewogCWlmIChzdGF0dXMgJiBJTlRSX1JYX1RBR19FUlJPUikgewogCQkvKiBjb3JydXB0IFJYIHRhZyBmcmFtaW5nICovCi0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNwKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogY29ycnVwdCByeCB0YWcgZnJhbWluZ1xuIiwKLQkJCQljcC0+ZGV2LT5uYW1lKTsKKwkJbmV0aWZfcHJpbnRrKGNwLCByeF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkgICAgICJjb3JydXB0IHJ4IHRhZyBmcmFtaW5nXG4iKTsKIAkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKIAkJY3AtPm5ldF9zdGF0c1swXS5yeF9lcnJvcnMrKzsKIAkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMF0pOwpAQCAtMTgxNyw5ICsxNzg5LDggQEAKIAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0xFTl9NSVNNQVRDSCkgewogCQkvKiBsZW5ndGggbWlzbWF0Y2guICovCi0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNwKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogbGVuZ3RoIG1pc21hdGNoIGZvciByeCBmcmFtZVxuIiwKLQkJCQljcC0+ZGV2LT5uYW1lKTsKKwkJbmV0aWZfcHJpbnRrKGNwLCByeF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkgICAgICJsZW5ndGggbWlzbWF0Y2ggZm9yIHJ4IGZyYW1lXG4iKTsKIAkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKIAkJY3AtPm5ldF9zdGF0c1swXS5yeF9lcnJvcnMrKzsKIAkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMF0pOwpAQCAtMTg2MSwxMiArMTgzMiwxMSBAQAogI2lmIDEKIAlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKIAlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX2FsbCk7Ci0JcHJpbnRrKEtFUk5fRVJSICIlczpyZXNldCBjYWxsZWQgaW4gY2FzX2Fibm9ybWFsX2lycSBbMHgleF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwluZXRkZXZfZXJyKGRldiwgInJlc2V0IGNhbGxlZCBpbiBjYXNfYWJub3JtYWxfaXJxIFsweCV4XVxuIiwgc3RhdHVzKTsKIAlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CiAjZWxzZQogCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIENBU19SRVNFVF9BTEwpOwotCXByaW50ayhLRVJOX0VSUiAicmVzZXQgY2FsbGVkIGluIGNhc19hYm5vcm1hbF9pcnFcbiIpOworCW5ldGRldl9lcnIoZGV2LCAicmVzZXQgY2FsbGVkIGluIGNhc19hYm5vcm1hbF9pcnFcbiIpOwogCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKICNlbmRpZgogCXJldHVybiAxOwpAQCAtMTkyMCw5ICsxODkwLDggQEAKIAkJaWYgKGNvdW50IDwgMCkKIAkJCWJyZWFrOwogCi0JCWlmIChuZXRpZl9tc2dfdHhfZG9uZShjcCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4WyVkXSBkb25lLCBzbG90ICVkXG4iLAotCQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHJpbmcsIGVudHJ5KTsKKwkJbmV0aWZfcHJpbnRrKGNwLCB0eF9kb25lLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJICAgICAidHhbJWRdIGRvbmUsIHNsb3QgJWRcbiIsIHJpbmcsIGVudHJ5KTsKIAogCQlza2JzW2VudHJ5XSA9IE5VTEw7CiAJCWNwLT50eF90aW55X3VzZVtyaW5nXVtlbnRyeV0ubmJ1ZnMgPSAwOwpAQCAtMTk2OSw5ICsxOTM4LDkgQEAKICNpZmRlZiBVU0VfVFhfQ09NUFdCCiAJdTY0IGNvbXB3YiA9IGxlNjRfdG9fY3B1KGNwLT5pbml0X2Jsb2NrLT50eF9jb21wd2IpOwogI2VuZGlmCi0JaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBpbnRlcnJ1cHQsIHN0YXR1czogMHgleCwgJWxseFxuIiwKLQkJCWNwLT5kZXYtPm5hbWUsIHN0YXR1cywgKHVuc2lnbmVkIGxvbmcgbG9uZyljb21wd2IpOworCW5ldGlmX3ByaW50ayhjcCwgaW50ciwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJICAgICAidHggaW50ZXJydXB0LCBzdGF0dXM6IDB4JXgsICVsbHhcbiIsCisJCSAgICAgc3RhdHVzLCAodW5zaWduZWQgbG9uZyBsb25nKWNvbXB3Yik7CiAJLyogcHJvY2VzcyBhbGwgdGhlIHJpbmdzICovCiAJZm9yIChyaW5nID0gMDsgcmluZyA8IE5fVFhfUklOR1M7IHJpbmcrKykgewogI2lmZGVmIFVTRV9UWF9DT01QV0IKQEAgLTIwNTAsMTAgKzIwMTksOCBAQAogCiAJCWhsZW4gPSBtaW4oY3AtPnBhZ2Vfc2l6ZSAtIG9mZiwgZGxlbik7CiAJCWlmIChobGVuIDwgMCkgewotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoY3ApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeCBwYWdlIG92ZXJmbG93OiAiCi0JCQkJICAgICAgICIlZFxuIiwgY3AtPmRldi0+bmFtZSwgaGxlbik7Ci0JCQl9CisJCQluZXRpZl9wcmludGsoY3AsIHJ4X2VyciwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJCQkgICAgICJyeCBwYWdlIG92ZXJmbG93OiAlZFxuIiwgaGxlbik7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC0yMTMwLDEwICsyMDk3LDggQEAKIAkJb2ZmID0gQ0FTX1ZBTChSWF9DT01QMV9EQVRBX09GRiwgd29yZHNbMF0pICsgc3dpdmVsOwogCQlobGVuID0gbWluKGNwLT5wYWdlX3NpemUgLSBvZmYsIGRsZW4pOwogCQlpZiAoaGxlbiA8IDApIHsKLQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNwKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnggcGFnZSBvdmVyZmxvdzogIgotCQkJCSAgICAgICAiJWRcbiIsIGNwLT5kZXYtPm5hbWUsIGhsZW4pOwotCQkJfQorCQkJbmV0aWZfcHJpbnRrKGNwLCByeF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkJICAgICAicnggcGFnZSBvdmVyZmxvdzogJWRcbiIsIGhsZW4pOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMjI2NSw5ICsyMjMwLDggQEAKIAogCWVudHJ5ID0gY3AtPnJ4X29sZFtyaW5nXTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhkWyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkXG4iLAotCQkgICAgICAgY3AtPmRldi0+bmFtZSwgcmluZywgZW50cnkpOworCW5ldGlmX3ByaW50ayhjcCwgaW50ciwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJICAgICAicnhkWyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkXG4iLCByaW5nLCBlbnRyeSk7CiAKIAljbHVzdGVyID0gLTE7CiAJY291bnQgPSBlbnRyeSAmIDB4MzsKQEAgLTIzMzcsMTEgKzIzMDEsMTAgQEAKIAlpbnQgZW50cnksIGRyb3BzOwogCWludCBucGFja2V0cyA9IDA7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4WyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkLyVkXG4iLAotCQkgICAgICAgY3AtPmRldi0+bmFtZSwgcmluZywKLQkJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfSEVBRCksCi0JCSAgICAgICBjcC0+cnhfbmV3W3JpbmddKTsKKwluZXRpZl9wcmludGsoY3AsIGludHIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCSAgICAgInJ4WyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkLyVkXG4iLAorCQkgICAgIHJpbmcsCisJCSAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwgY3AtPnJ4X25ld1tyaW5nXSk7CiAKIAllbnRyeSA9IGNwLT5yeF9uZXdbcmluZ107CiAJZHJvcHMgPSAwOwpAQCAtMjQ0Miw4ICsyNDA1LDcgQEAKIAljcC0+cnhfbmV3W3JpbmddID0gZW50cnk7CiAKIAlpZiAoZHJvcHMpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZGVmZXJyaW5nIHBhY2tldC5cbiIsCi0JCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oY3AtPmRldiwgIk1lbW9yeSBzcXVlZXplLCBkZWZlcnJpbmcgcGFja2V0XG4iKTsKIAlyZXR1cm4gbnBhY2tldHM7CiB9CiAKQEAgLTI0NTcsMTAgKzI0MTksOSBAQAogCiAJbGFzdCA9IGNwLT5yeF9jdXJbcmluZ107CiAJZW50cnkgPSBjcC0+cnhfbmV3W3JpbmddOwotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhjWyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkLyVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCByaW5nLCByZWFkbChjcC0+cmVncyArIFJFR19SWF9DT01QX0hFQUQpLAotCQkgICAgICAgZW50cnkpOworCW5ldGlmX3ByaW50ayhjcCwgaW50ciwgS0VSTl9ERUJVRywgZGV2LAorCQkgICAgICJyeGNbJWRdIGludGVycnVwdCwgZG9uZTogJWQvJWRcbiIsCisJCSAgICAgcmluZywgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwgZW50cnkpOwogCiAJLyogemVybyBhbmQgcmUtbWFyayBkZXNjcmlwdG9ycyAqLwogCXdoaWxlIChsYXN0ICE9IGVudHJ5KSB7CkBAIC0yNzI5LDQyICsyNjkwLDM4IEBACiB7CiAJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X2VycihkZXYsICJ0cmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIik7CiAJaWYgKCFjcC0+aHdfcnVubmluZykgewotCQlwcmludGsoIiVzOiBocm0uLiBodyBub3QgcnVubmluZyFcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiaHJtLi4gaHcgbm90IHJ1bm5pbmchXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IE1JRl9TVEFURVslMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSkpOworCW5ldGRldl9lcnIoZGV2LCAiTUlGX1NUQVRFWyUwOHhdXG4iLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSkpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogTUFDX1NUQVRFWyUwOHhdXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisJbmV0ZGV2X2VycihkZXYsICJNQUNfU1RBVEVbJTA4eF1cbiIsCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBUWF9TVEFURVslMDh4OiUwOHg6JTA4eF0gIgotCSAgICAgICAiRklGT1slMDh4OiUwOHg6JTA4eF0gU00xWyUwOHhdIFNNMlslMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9DRkcpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfU1RBVFVTKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX0NGRyksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fUEtUX0NOVCksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fV1JJVEVfUFRSKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19SRUFEX1BUUiksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX1NNXzEpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9TTV8yKSk7CisJbmV0ZGV2X2VycihkZXYsICJUWF9TVEFURVslMDh4OiUwOHg6JTA4eF0gRklGT1slMDh4OiUwOHg6JTA4eF0gU00xWyUwOHhdIFNNMlslMDh4XVxuIiwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1NUQVRVUyksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9DRkcpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1BLVF9DTlQpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1dSSVRFX1BUUiksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fUkVBRF9QVFIpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9TTV8xKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfU01fMikpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogUlhfU1RBVEVbJTA4eDolMDh4OiUwOHhdXG4iLAotCSAgICAgICBkZXYtPm5hbWUsCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NGRyksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9TVEFUVVMpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKSk7CisJbmV0ZGV2X2VycihkZXYsICJSWF9TVEFURVslMDh4OiUwOHg6JTA4eF1cbiIsCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NGRyksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9TVEFUVVMpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKSk7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBIUF9TVEFURVslMDh4OiUwOHg6JTA4eDolMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFURV9NQUNISU5FKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVFVTMCksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRVUzEpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFUVVMyKSk7CisJbmV0ZGV2X2VycihkZXYsICJIUF9TVEFURVslMDh4OiUwOHg6JTA4eDolMDh4XVxuIiwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVEVfTUFDSElORSksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRVUzApLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFUVVMxKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVFVTMikpOwogCiAjaWYgMQogCWF0b21pY19pbmMoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcpOwpAQCAtMjgzMCw4ICsyNzg3LDcgQEAKIAkgICAgQ0FTX1RBQk9SVChjcCkqKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT50eF9sb2NrW3JpbmddLCBmbGFncyk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuICIKLQkJICAgICAgICJxdWV1ZSBhd2FrZSFcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTI5MDgsMTEgKzI4NjQsOSBAQAogCWlmIChUWF9CVUZGU19BVkFJTChjcCwgcmluZykgPD0gQ0FTX1RBQk9SVChjcCkqKE1BWF9TS0JfRlJBR1MgKyAxKSkKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQoY3ApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4WyVkXSBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZCwgIgotCQkgICAgICAgImF2YWlsICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCByaW5nLCBlbnRyeSwgc2tiLT5sZW4sCi0JCSAgICAgICBUWF9CVUZGU19BVkFJTChjcCwgcmluZykpOworCW5ldGlmX3ByaW50ayhjcCwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgInR4WyVkXSBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZCwgYXZhaWwgJWRcbiIsCisJCSAgICAgcmluZywgZW50cnksIHNrYi0+bGVuLCBUWF9CVUZGU19BVkFJTChjcCwgcmluZykpOwogCXdyaXRlbChlbnRyeSwgY3AtPnJlZ3MgKyBSRUdfVFhfS0lDS04ocmluZykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT50eF9sb2NrW3JpbmddLCBmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0yOTk5LDYgKzI5NTMsNDAgQEAKIAljYXNfaW5pdF9yeF9kbWEoY3ApOwogfQogCitzdGF0aWMgdm9pZCBjYXNfcHJvY2Vzc19tY19saXN0KHN0cnVjdCBjYXMgKmNwKQoreworCXUxNiBoYXNoX3RhYmxlWzE2XTsKKwl1MzIgY3JjOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCWludCBpID0gMTsKKworCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgY3AtPmRldikgeworCQlpZiAoaSA8PSBDQVNfTUNfRVhBQ1RfTUFUQ0hfU0laRSkgeworCQkJLyogdXNlIHRoZSBhbHRlcm5hdGUgbWFjIGFkZHJlc3MgcmVnaXN0ZXJzIGZvciB0aGUKKwkJCSAqIGZpcnN0IDE1IG11bHRpY2FzdCBhZGRyZXNzZXMKKwkJCSAqLworCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzRdIDw8IDgpIHwgZG1pLT5kbWlfYWRkcls1XSwKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMCkpOworCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzJdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclszXSwKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMSkpOworCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzBdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclsxXSwKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMikpOworCQkJaSsrOworCQl9CisJCWVsc2UgeworCQkJLyogdXNlIGh3IGhhc2ggdGFibGUgZm9yIHRoZSBuZXh0IHNlcmllcyBvZgorCQkJICogbXVsdGljYXN0IGFkZHJlc3NlcworCQkJICovCisJCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGRtaS0+ZG1pX2FkZHIpOworCQkJY3JjID4+PSAyNDsKKwkJCWhhc2hfdGFibGVbY3JjID4+IDRdIHw9IDEgPDwgKDE1IC0gKGNyYyAmIDB4ZikpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQl3cml0ZWwoaGFzaF90YWJsZVtpXSwgY3AtPnJlZ3MgKyBSRUdfTUFDX0hBU0hfVEFCTEVOKGkpKTsKK30KKwogLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGNwLT5sb2NrLiAqLwogc3RhdGljIHUzMiBjYXNfc2V0dXBfbXVsdGljYXN0KHN0cnVjdCBjYXMgKmNwKQogewpAQCAtMzAxNCw0MyArMzAwMiw3IEBACiAJCXJ4Y2ZnIHw9IE1BQ19SWF9DRkdfSEFTSF9GSUxURVJfRU47CiAKIAl9IGVsc2UgewotCQl1MTYgaGFzaF90YWJsZVsxNl07Ci0JCXUzMiBjcmM7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gY3AtPmRldi0+bWNfbGlzdDsKLQkJaW50IGk7Ci0KLQkJLyogdXNlIHRoZSBhbHRlcm5hdGUgbWFjIGFkZHJlc3MgcmVnaXN0ZXJzIGZvciB0aGUKLQkJICogZmlyc3QgMTUgbXVsdGljYXN0IGFkZHJlc3NlcwotCQkgKi8KLQkJZm9yIChpID0gMTsgaSA8PSBDQVNfTUNfRVhBQ1RfTUFUQ0hfU0laRTsgaSsrKSB7Ci0JCQlpZiAoIWRtaSkgewotCQkJCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAwKSk7Ci0JCQkJd3JpdGVsKDB4MCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDEpKTsKLQkJCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMikpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzRdIDw8IDgpIHwgZG1pLT5kbWlfYWRkcls1XSwKLQkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMCkpOwotCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzJdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclszXSwKLQkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMSkpOwotCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzBdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclsxXSwKLQkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMikpOwotCQkJZG1pID0gZG1pLT5uZXh0OwotCQl9Ci0KLQkJLyogdXNlIGh3IGhhc2ggdGFibGUgZm9yIHRoZSBuZXh0IHNlcmllcyBvZgotCQkgKiBtdWx0aWNhc3QgYWRkcmVzc2VzCi0JCSAqLwotCQltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKLQkJd2hpbGUgKGRtaSkgewotIAkJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7Ci0JCQljcmMgPj49IDI0OwotCQkJaGFzaF90YWJsZVtjcmMgPj4gNF0gfD0gMSA8PCAoMTUgLSAoY3JjICYgMHhmKSk7Ci0JCQlkbWkgPSBkbWktPm5leHQ7Ci0JCX0KLQkgICAgCWZvciAoaT0wOyBpIDwgMTY7IGkrKykKLQkJCXdyaXRlbChoYXNoX3RhYmxlW2ldLCBjcC0+cmVncyArCi0JCQkgICAgICAgUkVHX01BQ19IQVNIX1RBQkxFTihpKSk7CisJCWNhc19wcm9jZXNzX21jX2xpc3QoY3ApOwogCQlyeGNmZyB8PSBNQUNfUlhfQ0ZHX0hBU0hfRklMVEVSX0VOOwogCX0KIApAQCAtMzEwMCwxMCArMzA1MiwxMCBAQAogCiAJaWYgKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9SRVNFVCkgfAogCSAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfUkVTRVQpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtYWMgdHhbJWRdL3J4WyVkXSByZXNldCBmYWlsZWQgWyUwOHhdXG4iLAotCQkgICAgICAgY3AtPmRldi0+bmFtZSwgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1JFU0VUKSwKLQkJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9SRVNFVCksCi0JCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfU1RBVEVfTUFDSElORSkpOworCQluZXRkZXZfZXJyKGNwLT5kZXYsICJtYWMgdHhbJWRdL3J4WyVkXSByZXNldCBmYWlsZWQgWyUwOHhdXG4iLAorCQkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1JFU0VUKSwKKwkJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9SRVNFVCksCisJCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfU1RBVEVfTUFDSElORSkpOwogfQogCiAKQEAgLTM0MjMsNyArMzM3NSw3IEBACiAJCWdvdG8gZG9uZTsKIAogCS8qIFN1biBNQUMgcHJlZml4IHRoZW4gMyByYW5kb20gYnl0ZXMuICovCi0JcHJpbnRrKFBGWCAiTUFDIGFkZHJlc3Mgbm90IGZvdW5kIGluIFJPTSBWUERcbiIpOworCXByX2luZm8oIk1BQyBhZGRyZXNzIG5vdCBmb3VuZCBpbiBST00gVlBEXG4iKTsKIAlkZXZfYWRkclswXSA9IDB4MDg7CiAJZGV2X2FkZHJbMV0gPSAweDAwOwogCWRldl9hZGRyWzJdID0gMHgyMDsKQEAgLTM0ODQsNyArMzQzNiw3IEBACiAJCQlfX2ZyZWVfcGFnZXMocGFnZSwgQ0FTX0pVTUJPX1BBR0VfU0hJRlQgLSBQQUdFX1NISUZUKTsKIAkJCWNwLT5wYWdlX29yZGVyID0gQ0FTX0pVTUJPX1BBR0VfU0hJRlQgLSBQQUdFX1NISUZUOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKFBGWCAiTVRVIGxpbWl0ZWQgdG8gJWQgYnl0ZXNcbiIsIENBU19NQVhfTVRVKTsKKwkJCXByaW50aygiTVRVIGxpbWl0ZWQgdG8gJWQgYnl0ZXNcbiIsIENBU19NQVhfTVRVKTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMzUyOSw3ICszNDgxLDcgQEAKIAkJCX0KIAkJfQogCX0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJNSUkgcGh5IGRpZCBub3QgcmVzcG9uZCBbJTA4eF1cbiIsCisJcHJfZXJyKCJNSUkgcGh5IGRpZCBub3QgcmVzcG9uZCBbJTA4eF1cbiIsCiAJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSk7CiAJcmV0dXJuIC0xOwogCkBAIC0zNTc0LDIxICszNTI2LDE5IEBACiAJCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOwogCQlpZiAoKHZhbCAmIE1BQ19SWF9DRkdfRU4pKSB7CiAJCQlpZiAodHhmYWlsZWQpIHsKLQkJCSAgcHJpbnRrKEtFUk5fRVJSCi0JCQkJICIlczogZW5hYmxpbmcgbWFjIGZhaWxlZCBbdHg6JTA4eDolMDh4XS5cbiIsCi0JCQkJIGNwLT5kZXYtPm5hbWUsCi0JCQkJIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSwKLQkJCQkgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKKwkJCQluZXRkZXZfZXJyKGNwLT5kZXYsCisJCQkJCSAgICJlbmFibGluZyBtYWMgZmFpbGVkIFt0eDolMDh4OiUwOHhdXG4iLAorCQkJCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCisJCQkJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CiAJCQl9CiAJCQlnb3RvIGVuYWJsZV9yeF9kb25lOwogCQl9CiAJCXVkZWxheSgxMCk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAiJXM6IGVuYWJsaW5nIG1hYyBmYWlsZWQgWyVzOiUwOHg6JTA4eF0uXG4iLAotCSAgICAgICBjcC0+ZGV2LT5uYW1lLAotCSAgICAgICAodHhmYWlsZWQ/ICJ0eCxyeCI6InJ4IiksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKKwluZXRkZXZfZXJyKGNwLT5kZXYsICJlbmFibGluZyBtYWMgZmFpbGVkIFslczolMDh4OiUwOHhdXG4iLAorCQkgICAodHhmYWlsZWQgPyAidHgscngiIDogInJ4IiksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKIAogZW5hYmxlX3J4X2RvbmU6CiAJY2FzX3VubWFza19pbnRyKGNwKTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KQEAgLTM2OTAsOSArMzY0MCw4IEBACiAJCX0KIAl9CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsoY3ApKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayB1cCBhdCAlZCBNYnBzLCAlcy1kdXBsZXguXG4iLAotCQkgICAgICAgY3AtPmRldi0+bmFtZSwgc3BlZWQsIChmdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIikpOworCW5ldGlmX2luZm8oY3AsIGxpbmssIGNwLT5kZXYsICJMaW5rIHVwIGF0ICVkIE1icHMsICVzLWR1cGxleFxuIiwKKwkJICAgc3BlZWQsIGZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKIAogCXZhbCA9IE1BQ19YSUZfVFhfTUlJX09VVFBVVF9FTiB8IE1BQ19YSUZfTElOS19MRUQ7CiAJaWYgKENBU19QSFlfTUlJKGNwLT5waHlfdHlwZSkpIHsKQEAgLTM3NjIsMTggKzM3MTEsMTQgQEAKIAogCWlmIChuZXRpZl9tc2dfbGluayhjcCkpIHsKIAkJaWYgKHBhdXNlICYgMHgwMSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhdXNlIGlzIGVuYWJsZWQgIgotCQkJICAgICAgICIocnhmaWZvOiAlZCBvZmY6ICVkIG9uOiAlZClcbiIsCi0JCQkgICAgICAgY3AtPmRldi0+bmFtZSwKLQkJCSAgICAgICBjcC0+cnhfZmlmb19zaXplLAotCQkJICAgICAgIGNwLT5yeF9wYXVzZV9vZmYsCi0JCQkgICAgICAgY3AtPnJ4X3BhdXNlX29uKTsKKwkJCW5ldGRldl9pbmZvKGNwLT5kZXYsICJQYXVzZSBpcyBlbmFibGVkIChyeGZpZm86ICVkIG9mZjogJWQgb246ICVkKVxuIiwKKwkJCQkgICAgY3AtPnJ4X2ZpZm9fc2l6ZSwKKwkJCQkgICAgY3AtPnJ4X3BhdXNlX29mZiwKKwkJCQkgICAgY3AtPnJ4X3BhdXNlX29uKTsKIAkJfSBlbHNlIGlmIChwYXVzZSAmIDB4MTApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUWCBwYXVzZSBlbmFibGVkXG4iLAotCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oY3AtPmRldiwgIlRYIHBhdXNlIGVuYWJsZWRcbiIpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhdXNlIGlzIGRpc2FibGVkXG4iLAotCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oY3AtPmRldiwgIlBhdXNlIGlzIGRpc2FibGVkXG4iKTsKIAkJfQogCX0KIApAQCAtMzg0OSw3ICszNzk0LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJdWRlbGF5KDEwKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogc3cgcmVzZXQgZmFpbGVkLlxuIiwgY3AtPmRldi0+bmFtZSk7CisJbmV0ZGV2X2VycihjcC0+ZGV2LCAic3cgcmVzZXQgZmFpbGVkXG4iKTsKIAogZG9uZToKIAkvKiBlbmFibGUgdmFyaW91cyBCSU0gaW50ZXJydXB0cyAqLwpAQCAtMzk1NSw3ICszOTAwLDcgQEAKICNlbHNlCiAJYXRvbWljX3NldCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZywgKGNwLT5waHlfdHlwZSAmIENBU19QSFlfU0VSREVTKSA/CiAJCSAgIENBU19SRVNFVF9BTEwgOiBDQVNfUkVTRVRfTVRVKTsKLQlwcmludGsoS0VSTl9FUlIgInJlc2V0IGNhbGxlZCBpbiBjYXNfY2hhbmdlX210dVxuIik7CisJcHJfZXJyKCJyZXNldCBjYWxsZWQgaW4gY2FzX2NoYW5nZV9tdHVcbiIpOwogCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKICNlbmRpZgogCkBAIC00MjM3LDEwICs0MTgyLDggQEAKIAogCQlpZiAoKCh0bG0gPT0gMHg1KSB8fCAodGxtID09IDB4MykpICYmCiAJCSAgICAoQ0FTX1ZBTChNQUNfU01fRU5DQVBfU00sIHZhbCkgPT0gMCkpIHsKLQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGNwKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGVycjogIgotCQkJCSAgICAgICAiTUFDX1NUQVRFWyUwOHhdXG4iLAotCQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCB2YWwpOworCQkJbmV0aWZfcHJpbnRrKGNwLCB0eF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkJICAgICAidHggZXJyOiBNQUNfU1RBVEVbJTA4eF1cbiIsIHZhbCk7CiAJCQlyZXNldCA9IDE7CiAJCQlnb3RvIGRvbmU7CiAJCX0KQEAgLTQyNDksMTAgKzQxOTIsOSBAQAogCQl3cHRyID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19XUklURV9QVFIpOwogCQlycHRyID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19SRUFEX1BUUik7CiAJCWlmICgodmFsID09IDApICYmICh3cHRyICE9IHJwdHIpKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBlcnI6ICIKLQkJCQkgICAgICAgIlRYX0ZJRk9bJTA4eDolMDh4OiUwOHhdXG4iLAotCQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCB2YWwsIHdwdHIsIHJwdHIpOworCQkJbmV0aWZfcHJpbnRrKGNwLCB0eF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkJICAgICAidHggZXJyOiBUWF9GSUZPWyUwOHg6JTA4eDolMDh4XVxuIiwKKwkJCQkgICAgIHZhbCwgd3B0ciwgcnB0cik7CiAJCQlyZXNldCA9IDE7CiAJCX0KIApAQCAtNDI2OCw3ICs0MjEwLDcgQEAKIAkJc2NoZWR1bGVfd29yaygmY3AtPnJlc2V0X3Rhc2spOwogI2Vsc2UKIAkJYXRvbWljX3NldCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZywgQ0FTX1JFU0VUX0FMTCk7Ci0JCXByaW50ayhLRVJOX0VSUiAicmVzZXQgY2FsbGVkIGluIGNhc19saW5rX3RpbWVyXG4iKTsKKwkJcHJfZXJyKCJyZXNldCBjYWxsZWQgaW4gY2FzX2xpbmtfdGltZXJcbiIpOwogCQlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CiAjZW5kaWYKIAl9CkBAIC00MzYxLDggKzQzMDMsNyBAQAogCSAqLwogCWlmIChyZXF1ZXN0X2lycShjcC0+cGRldi0+aXJxLCBjYXNfaW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgKHZvaWQgKikgZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgIVxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGNwLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgIVxuIik7CiAJCWVyciA9IC1FQUdBSU47CiAJCWdvdG8gZXJyX3NwYXJlOwogCX0KQEAgLTUwMDIsMjQgKzQ5NDMsMjQgQEAKIAl1OCBvcmlnX2NhY2hlbGluZV9zaXplID0gMCwgY2FzX2NhY2hlbGluZV9zaXplID0gMDsKIAogCWlmIChjYXNfdmVyc2lvbl9wcmludGVkKysgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgIgotCQkgICAgICAgImJhc2UgYWRkcmVzcywgYWJvcnRpbmcuXG4iKTsKKwkJICAgICAgICJiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKIAl9CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmNwKSk7CiAJaWYgKCFkZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFdGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKIAl9CkBAIC01MDI3LDcgKzQ5NjgsNyBAQAogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBkZXYtPm5hbWUpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTUwNDEsOCArNDk4Miw3IEBACiAJcGNpX2NtZCB8PSBQQ0lfQ09NTUFORF9QQVJJVFk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKIAlpZiAocGNpX3RyeV9zZXRfbXdpKHBkZXYpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiQ291bGQgbm90IGVuYWJsZSBNV0kgZm9yICVzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZW5hYmxlIE1XSSBmb3IgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAogCWNhc19wcm9ncmFtX2JyaWRnZShwZGV2KTsKIApAQCAtNTA4NSw3ICs1MDI1LDcgQEAKIAkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCi0JCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCQkgICAgICAgImFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKQEAgLTUxNDQsNyArNTA4NCw3IEBACiAJLyogZ2l2ZSB1cyBhY2Nlc3MgdG8gY2Fzc2luaSByZWdpc3RlcnMgKi8KIAljcC0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCBjYXNyZWdfbGVuKTsKIAlpZiAoIWNwLT5yZWdzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9CiAJY3AtPmNhc3JlZ19sZW4gPSBjYXNyZWdfbGVuOwpAQCAtNTE2Myw3ICs1MTAzLDcgQEAKIAkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHN0cnVjdCBjYXNfaW5pdF9ibG9jayksCiAJCQkJICAgICAmY3AtPmJsb2NrX2R2bWEpOwogCWlmICghY3AtPmluaXRfYmxvY2spIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGluaXQgYmxvY2ssIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBpbml0IGJsb2NrLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIApAQCAtNTE5NywxOCArNTEzNywxNyBAQAogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfY29uc2lzdGVudDsKIAl9CiAKIAlpID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfQklNX0NGRyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN1biBDYXNzaW5pJXMgKCVzYml0LyVzTUh6IFBDSS8lcykgIgotCSAgICAgICAiRXRoZXJuZXRbJWRdICVwTVxuIiwgIGRldi0+bmFtZSwKLQkgICAgICAgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgPyAiKyIgOiAiIiwKLQkgICAgICAgKGkgJiBCSU1fQ0ZHXzMyQklUKSA/ICIzMiIgOiAiNjQiLAotCSAgICAgICAoaSAmIEJJTV9DRkdfNjZNSFopID8gIjY2IiA6ICIzMyIsCi0JICAgICAgIChjcC0+cGh5X3R5cGUgPT0gQ0FTX1BIWV9TRVJERVMpID8gIkZpIiA6ICJDdSIsIHBkZXYtPmlycSwKLQkgICAgICAgZGV2LT5kZXZfYWRkcik7CisJbmV0ZGV2X2luZm8oZGV2LCAiU3VuIENhc3NpbmklcyAoJXNiaXQvJXNNSHogUENJLyVzKSBFdGhlcm5ldFslZF0gJXBNXG4iLAorCQkgICAgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgPyAiKyIgOiAiIiwKKwkJICAgIChpICYgQklNX0NGR18zMkJJVCkgPyAiMzIiIDogIjY0IiwKKwkJICAgIChpICYgQklNX0NGR182Nk1IWikgPyAiNjYiIDogIjMzIiwKKwkJICAgIChjcC0+cGh5X3R5cGUgPT0gQ0FTX1BIWV9TRVJERVMpID8gIkZpIiA6ICJDdSIsIHBkZXYtPmlycSwKKwkJICAgIGRldi0+ZGV2X2FkZHIpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJY3AtPmh3X3J1bm5pbmcgPSAxOwpAQCAtNTMyMiw3ICs1MjYxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXN1bWluZ1xuIiwgZGV2LT5uYW1lKTsKKwluZXRkZXZfaW5mbyhkZXYsICJyZXN1bWluZ1xuIik7CiAKIAltdXRleF9sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCWNhc19oYXJkX3Jlc2V0KGNwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCmluZGV4IDY5OWQyMmMuLjJkMTFhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaApAQCAtMzYsNiArMzYsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAiY3hnYjogIiBmbXQKKwogI2lmbmRlZiBfQ1hHQl9DT01NT05fSF8KICNkZWZpbmUgX0NYR0JfQ09NTU9OX0hfCiAKQEAgLTU1LDI4ICs1Nyw2IEBACiAjZGVmaW5lIERSVl9ERVNDUklQVElPTiAiQ2hlbHNpbyAxMEdiIEV0aGVybmV0IERyaXZlciIKICNkZWZpbmUgRFJWX05BTUUgImN4Z2IiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIyLjIiCi0jZGVmaW5lIFBGWCAgICAgIERSVl9OQU1FICI6ICIKLQotI2RlZmluZSBDSF9FUlIoZm10LCAuLi4pICAgcHJpbnRrKEtFUk5fRVJSIFBGWCBmbXQsICMjIF9fVkFfQVJHU19fKQotI2RlZmluZSBDSF9XQVJOKGZtdCwgLi4uKSAgcHJpbnRrKEtFUk5fV0FSTklORyBQRlggZm10LCAjIyBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQ0hfQUxFUlQoZm10LCAuLi4pIHByaW50ayhLRVJOX0FMRVJUIFBGWCBmbXQsICMjIF9fVkFfQVJHU19fKQotCi0vKgotICogTW9yZSBwb3dlcmZ1bCBtYWNybyB0aGF0IHNlbGVjdGl2ZWx5IHByaW50cyBtZXNzYWdlcyBiYXNlZCBvbiBtc2dfZW5hYmxlLgotICogRm9yIGluZm8gYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KLSAqLwotI2RlZmluZSBDSF9NU0coYWRhcHRlciwgbGV2ZWwsIGNhdGVnb3J5LCBmbXQsIC4uLikgZG8geyBcCi0JaWYgKChhZGFwdGVyKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR18jI2NhdGVnb3J5KSBcCi0JCXByaW50ayhLRVJOXyMjbGV2ZWwgUEZYICIlczogIiBmbXQsIChhZGFwdGVyKS0+bmFtZSwgXAotCQkgICAgICAgIyMgX19WQV9BUkdTX18pOyBcCi19IHdoaWxlICgwKQotCi0jaWZkZWYgREVCVUcKLSMgZGVmaW5lIENIX0RCRyhhZGFwdGVyLCBjYXRlZ29yeSwgZm10LCAuLi4pIFwKLQlDSF9NU0coYWRhcHRlciwgREVCVUcsIGNhdGVnb3J5LCBmbXQsICMjIF9fVkFfQVJHU19fKQotI2Vsc2UKLSMgZGVmaW5lIENIX0RCRyhmbXQsIC4uLikKLSNlbmRpZgogCiAjZGVmaW5lIENIX0RFVklDRShkZXZpZCwgc3NpZCwgaWR4KSBcCiAJeyBQQ0lfVkVORE9SX0lEX0NIRUxTSU8sIGRldmlkLCBQQ0lfQU5ZX0lELCBzc2lkLCAwLCAwLCBpZHggfQpAQCAtOTAsMjUgKzcwLDEzIEBACiB0eXBlZGVmIHN0cnVjdCBhZGFwdGVyIGFkYXB0ZXJfdDsKIAogc3RydWN0IHQxX3J4X21vZGUgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdTMyIGlkeDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3Q7CisgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIH07CiAKICNkZWZpbmUgdDFfcnhfbW9kZV9wcm9taXNjKHJtKQkocm0tPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKICNkZWZpbmUgdDFfcnhfbW9kZV9hbGxtdWx0aShybSkJKHJtLT5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQotI2RlZmluZSB0MV9yeF9tb2RlX21jX2NudChybSkJKHJtLT5kZXYtPm1jX2NvdW50KQotCi1zdGF0aWMgaW5saW5lIHU4ICp0MV9nZXRfbmV4dF9tY2FkZHIoc3RydWN0IHQxX3J4X21vZGUgKnJtKQotewotCXU4ICphZGRyID0gTlVMTDsKLQotCWlmIChybS0+aWR4KysgPCBybS0+ZGV2LT5tY19jb3VudCkgewotCQlhZGRyID0gcm0tPmxpc3QtPmRtaV9hZGRyOwotCQlybS0+bGlzdCA9IHJtLT5saXN0LT5uZXh0OwotCX0KLQlyZXR1cm4gYWRkcjsKLX0KKyNkZWZpbmUgdDFfcnhfbW9kZV9tY19jbnQocm0pCShuZXRkZXZfbWNfY291bnQocm0tPmRldikpCisjZGVmaW5lIHQxX2dldF9uZXRkZXYocm0pCShybS0+ZGV2KQogCiAjZGVmaW5lCU1BWF9OUE9SVFMgNAogI2RlZmluZSBQT1JUX01BU0sgKCgxIDw8IE1BWF9OUE9SVFMpIC0gMSkKQEAgLTMzNCw3ICszMDIsNyBAQAogCXJldHVybiBhZGFwdGVyLT5wYXJhbXMuaXNfYXNpYzsKIH0KIAotZXh0ZXJuIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHQxX3BjaV90YmxbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0MV9wY2lfdGJsW107CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFkYXB0ZXJfbWF0Y2hlc190eXBlKGNvbnN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCQkgICAgICAgaW50IHZlcnNpb24sIGludCByZXZpc2lvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwppbmRleCAwODJjZGIyOC4uMGY3MTMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwpAQCAtMTI1LDggKzEyNSw2IEBACiAJc3RydWN0IHQxX3J4X21vZGUgcm07CiAKIAlybS5kZXYgPSBkZXY7Ci0Jcm0uaWR4ID0gMDsKLQlybS5saXN0ID0gZGV2LT5tY19saXN0OwogCW1hYy0+b3BzLT5zZXRfcnhfbW9kZShtYWMsICZybSk7CiB9CiAKQEAgLTk3Niw3ICs5NzQsNyBAQAogCQl0MV9zZ2Vfc3RvcChhZGFwdGVyLT5zZ2UpOwogCQl0MV9pbnRlcnJ1cHRzX2Rpc2FibGUoYWRhcHRlcik7CiAJfQotCUNIX0FMRVJUKCIlczogZW5jb3VudGVyZWQgZmF0YWwgZXJyb3IsIG9wZXJhdGlvbiBzdXNwZW5kZWRcbiIsCisJcHJfYWxlcnQoIiVzOiBlbmNvdW50ZXJlZCBmYXRhbCBlcnJvciwgb3BlcmF0aW9uIHN1c3BlbmRlZFxuIiwKIAkJIGFkYXB0ZXItPm5hbWUpOwogfQogCkBAIC0xMDIwLDcgKzEwMTgsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCUNIX0VSUigiJXM6IGNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgbWVtb3J5IGJhc2UgYWRkcmVzc1xuIiwKKwkJcHJfZXJyKCIlczogY2Fubm90IGZpbmQgUENJIGRldmljZSBtZW1vcnkgYmFzZSBhZGRyZXNzXG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CkBAIC0xMDMwLDIwICsxMDI4LDIwIEBACiAJCXBjaV91c2luZ19kYWMgPSAxOwogCiAJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKLQkJCUNIX0VSUigiJXM6IHVuYWJsZSB0byBvYnRhaW4gNjQtYml0IERNQSBmb3IgIgorCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIG9idGFpbiA2NC1iaXQgRE1BIGZvciAiCiAJCQkgICAgICAgImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJCX0KIAogCX0gZWxzZSBpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpICE9IDApIHsKLQkJQ0hfRVJSKCIlczogbm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiJXM6IG5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKGVycikgewotCQlDSF9FUlIoIiVzOiBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKIAl9CiAKQEAgLTEwNzEsNyArMTA2OSw3IEBACiAKIAkJCWFkYXB0ZXItPnJlZ3MgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAkJCWlmICghYWRhcHRlci0+cmVncykgewotCQkJCUNIX0VSUigiJXM6IGNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwKKwkJCQlwcl9lcnIoIiVzOiBjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIsCiAJCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCWdvdG8gb3V0X2ZyZWVfZGV2OwpAQCAtMTE1MCw4ICsxMTQ4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgYmktPnBvcnRfbnVtYmVyOyArK2kpIHsKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPnBvcnRbaV0uZGV2KTsKIAkJaWYgKGVycikKLQkJCUNIX1dBUk4oIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywgc2tpcHBpbmdcbiIsCi0JCQkJcGNpX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRbaV0uZGV2LT5uYW1lKTsKKwkJCXByX3dhcm5pbmcoIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywgc2tpcHBpbmdcbiIsCisJCQkJICAgcGNpX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRbaV0uZGV2LT5uYW1lKTsKIAkJZWxzZSB7CiAJCQkvKgogCQkJICogQ2hhbmdlIHRoZSBuYW1lIHdlIHVzZSBmb3IgbWVzc2FnZXMgdG8gdGhlIG5hbWUgb2YKQEAgLTExNjQsNyArMTE2Miw3IEBACiAJCX0KIAl9CiAJaWYgKCFhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApIHsKLQkJQ0hfRVJSKCIlczogY291bGQgbm90IHJlZ2lzdGVyIGFueSBuZXQgZGV2aWNlc1xuIiwKKwkJcHJfZXJyKCIlczogY291bGQgbm90IHJlZ2lzdGVyIGFueSBuZXQgZGV2aWNlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBvdXRfcmVsZWFzZV9hZGFwdGVyX3JlczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2VzcGkuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCmluZGV4IDFlMDc0OWUuLjYzOWZmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCkBAIC03Niw3ICs3Niw3IEBACiAJfSB3aGlsZSAoYnVzeSAmJiAtLWF0dGVtcHRzKTsKIAogCWlmIChidXN5KQotCQlDSF9FUlIoIiVzOiBUUklDTiB3cml0ZSB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOworCQlwcl9lcnIoIiVzOiBUUklDTiB3cml0ZSB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOwogCiAJcmV0dXJuIGJ1c3k7CiB9CkBAIC04Niw3ICs4Niw3IEBACiAJaW50IGksIHNtZSA9IDE7CiAKIAlpZiAoIShyZWFkbChhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKSAgJiBGX1JYX0NMS19TVEFUVVMpKSB7Ci0JCUNIX0VSUigiJXM6IEVTUEkgY2xvY2sgbm90IHJlYWR5XG4iLCBhZGFwdGVyLT5uYW1lKTsKKwkJcHJfZXJyKCIlczogRVNQSSBjbG9jayBub3QgcmVhZHlcbiIsIGFkYXB0ZXItPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9wbTMzOTMuYwppbmRleCAyMTE3YzRmLi5hNmViMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMKQEAgLTI1MSw4ICsyNTEsOSBAQAogCS8qIFJlYWQgdGhlIG1hc3RlciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAqLwogCXBtcmVhZChjbWFjLCBTVU5JMXgxMEdFWFBfUkVHX01BU1RFUl9JTlRFUlJVUFRfU1RBVFVTLAogCSAgICAgICAmbWFzdGVyX2ludHJfc3RhdHVzKTsKLQlDSF9EQkcoY21hYy0+YWRhcHRlciwgSU5UUiwgIlBNMzM5MyBpbnRyIGNhdXNlIDB4JXhcbiIsCi0JICAgICAgIG1hc3Rlcl9pbnRyX3N0YXR1cyk7CisJaWYgKG5ldGlmX21zZ19pbnRyKGNtYWMtPmFkYXB0ZXIpKQorCQlkZXZfZGJnKCZjbWFjLT5hZGFwdGVyLT5wZGV2LT5kZXYsICJQTTMzOTMgaW50ciBjYXVzZSAweCV4XG4iLAorCQkJbWFzdGVyX2ludHJfc3RhdHVzKTsKIAogCS8qIFRCRCBYWFggTGV0cyBqdXN0IGNsZWFyIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwogCXBtMzM5M19pbnRlcnJ1cHRfY2xlYXIoY21hYyk7CkBAIC0zNzUsMTIgKzM3NiwxMiBAQAogCQlyeF9tb2RlIHw9IFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19NSEFTSF9FTjsKIAl9IGVsc2UgaWYgKHQxX3J4X21vZGVfbWNfY250KHJtKSkgewogCQkvKiBBY2NlcHQgb25lIG9yIG1vcmUgbXVsdGljYXN0KHMpLiAqLwotCQl1OCAqYWRkcjsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCWludCBiaXQ7CiAJCXUxNiBtY19maWx0ZXJbNF0gPSB7IDAsIH07CiAKLQkJd2hpbGUgKChhZGRyID0gdDFfZ2V0X25leHRfbWNhZGRyKHJtKSkpIHsKLQkJCWJpdCA9IChldGhlcl9jcmMoRVRIX0FMRU4sIGFkZHIpID4+IDIzKSAmIDB4M2Y7CS8qIGJpdFsyMzoyOF0gKi8KKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCB0MV9nZXRfbmV0ZGV2KHJtKSkgeworCQkJYml0ID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcikgPj4gMjMpICYgMHgzZjsgLyogYml0WzIzOjI4XSAqLwogCQkJbWNfZmlsdGVyW2JpdCA+PiA0XSB8PSAxIDw8IChiaXQgJiAweGYpOwogCQl9CiAJCXBtd3JpdGUoY21hYywgU1VOSTF4MTBHRVhQX1JFR19SWFhHX01VTFRJQ0FTVF9IQVNIX0xPVywgbWNfZmlsdGVyWzBdKTsKQEAgLTc3NiwxMSArNzc3LDEyIEBACiAJCXN1Y2Nlc3NmdWxfcmVzZXQgPSAoaXNfcGw0X3Jlc2V0X2ZpbmlzaGVkICYmICFpc19wbDRfb3V0b2ZfbG9jawogCQkJCSAgICAmJiBpc194YXVpX21hYmNfcGxsX2xvY2tlZCk7CiAKLQkJQ0hfREJHKGFkYXB0ZXIsIEhXLAotCQkgICAgICAgIlBNMzM5MyBIVyByZXNldCAlZDogcGw0X3Jlc2V0IDB4JXgsIHZhbCAweCV4LCAiCi0JCSAgICAgICAiaXNfcGw0X291dG9mX2xvY2sgMHgleCwgeGF1aV9sb2NrZWQgMHgleFxuIiwKLQkJICAgICAgIGksIGlzX3BsNF9yZXNldF9maW5pc2hlZCwgdmFsLCBpc19wbDRfb3V0b2ZfbG9jaywKLQkJICAgICAgIGlzX3hhdWlfbWFiY19wbGxfbG9ja2VkKTsKKwkJaWYgKG5ldGlmX21zZ19odyhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiUE0zMzkzIEhXIHJlc2V0ICVkOiBwbDRfcmVzZXQgMHgleCwgdmFsIDB4JXgsICIKKwkJCQkiaXNfcGw0X291dG9mX2xvY2sgMHgleCwgeGF1aV9sb2NrZWQgMHgleFxuIiwKKwkJCQlpLCBpc19wbDRfcmVzZXRfZmluaXNoZWQsIHZhbCwKKwkJCQlpc19wbDRfb3V0b2ZfbG9jaywgaXNfeGF1aV9tYWJjX3BsbF9sb2NrZWQpOwogCX0KIAlyZXR1cm4gc3VjY2Vzc2Z1bF9yZXNldCA/IDAgOiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggMTA5ZDI3OC4uNzEzODQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkqZXNwaWJ1Z19za2JbTUFYX05QT1JUU107CiAJdTMyCQlzZ2VfY29udHJvbDsJLyogc2hhZG93IHZhbHVlIG9mIHNnZSBjb250cm9sIHJlZyAqLwogCXN0cnVjdCBzZ2VfaW50cl9jb3VudHMgc3RhdHM7Ci0Jc3RydWN0IHNnZV9wb3J0X3N0YXRzICpwb3J0X3N0YXRzW01BWF9OUE9SVFNdOworCXN0cnVjdCBzZ2VfcG9ydF9zdGF0cyBfX3BlcmNwdSAqcG9ydF9zdGF0c1tNQVhfTlBPUlRTXTsKIAlzdHJ1Y3Qgc2NoZWQJKnR4X3NjaGVkOwogCXN0cnVjdCBjbWRRIGNtZFFbU0dFX0NNRFFfTl0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CkBAIC05NTMsNyArOTUzLDcgQEAKIAkJc2dlLT5zdGF0cy5yZXNwUV9lbXB0eSsrOwogCWlmIChjYXVzZSAmIEZfUkVTUFFfT1ZFUkZMT1cpIHsKIAkJc2dlLT5zdGF0cy5yZXNwUV9vdmVyZmxvdysrOwotCQlDSF9BTEVSVCgiJXM6IFNHRSByZXNwb25zZSBxdWV1ZSBvdmVyZmxvd1xuIiwKKwkJcHJfYWxlcnQoIiVzOiBTR0UgcmVzcG9uc2UgcXVldWUgb3ZlcmZsb3dcbiIsCiAJCQkgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIEZfRkxfRVhIQVVTVEVEKSB7CkBAIC05NjIsMTIgKzk2MiwxMiBAQAogCX0KIAlpZiAoY2F1c2UgJiBGX1BBQ0tFVF9UT09fQklHKSB7CiAJCXNnZS0+c3RhdHMucGt0X3Rvb19iaWcrKzsKLQkJQ0hfQUxFUlQoIiVzOiBTR0UgbWF4IHBhY2tldCBzaXplIGV4Y2VlZGVkXG4iLAorCQlwcl9hbGVydCgiJXM6IFNHRSBtYXggcGFja2V0IHNpemUgZXhjZWVkZWRcbiIsCiAJCQkgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIEZfUEFDS0VUX01JU01BVENIKSB7CiAJCXNnZS0+c3RhdHMucGt0X21pc21hdGNoKys7Ci0JCUNIX0FMRVJUKCIlczogU0dFIHBhY2tldCBtaXNtYXRjaFxuIiwgYWRhcHRlci0+bmFtZSk7CisJCXByX2FsZXJ0KCIlczogU0dFIHBhY2tldCBtaXNtYXRjaFxuIiwgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIFNHRV9JTlRfRkFUQUwpCiAJCXQxX2ZhdGFsX2VycihhZGFwdGVyKTsKQEAgLTExMDEsNyArMTEwMSw3IEBACiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcHRlci0+cGRldiwgcGNpX3VubWFwX2FkZHIoY2UsIGRtYV9hZGRyKSwKIAkJCSAgICBwY2lfdW5tYXBfbGVuKGNlLCBkbWFfbGVuKSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlDSF9FUlIoIiVzOiB1bmV4cGVjdGVkIG9mZmxvYWQgcGFja2V0LCBjbWQgJXVcbiIsCisJcHJfZXJyKCIlczogdW5leHBlY3RlZCBvZmZsb2FkIHBhY2tldCwgY21kICV1XG4iLAogCSAgICAgICBhZGFwdGVyLT5uYW1lLCAqc2tiLT5kYXRhKTsKIAlyZWN5Y2xlX2ZsX2J1ZihmbCwgZmwtPmNpZHgpOwogfQpAQCAtMTY4Nyw3ICsxNjg3LDcgQEAKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJCXNldF9iaXQoZGV2LT5pZl9wb3J0LCAmc2dlLT5zdG9wcGVkX3R4X3F1ZXVlcyk7CiAJCQlzZ2UtPnN0YXRzLmNtZFFfZnVsbFsyXSsrOwotCQkJQ0hfRVJSKCIlczogVHggcmluZyBmdWxsIHdoaWxlIHF1ZXVlIGF3YWtlIVxuIiwKKwkJCXByX2VycigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCiAJCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnEtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwppbmRleCAxNzcyMGM2Li41M2JkZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwpAQCAtOTAsNyArOTAsNyBAQAogCXRwaV9idXN5ID0gdDFfd2FpdF9vcF9kb25lKGFkYXB0ZXIsIEFfVFBJX0NTUiwgRl9UUElSRFksIDEsCiAJCQkJICAgVFBJX0FUVEVNUFRTLCAzKTsKIAlpZiAodHBpX2J1c3kpCi0JCUNIX0FMRVJUKCIlczogVFBJIHdyaXRlIHRvIDB4JXggZmFpbGVkXG4iLAorCQlwcl9hbGVydCgiJXM6IFRQSSB3cml0ZSB0byAweCV4IGZhaWxlZFxuIiwKIAkJCSBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAlyZXR1cm4gdHBpX2J1c3k7CiB9CkBAIC0xMTgsNyArMTE4LDcgQEAKIAl0cGlfYnVzeSA9IHQxX3dhaXRfb3BfZG9uZShhZGFwdGVyLCBBX1RQSV9DU1IsIEZfVFBJUkRZLCAxLAogCQkJCSAgIFRQSV9BVFRFTVBUUywgMyk7CiAJaWYgKHRwaV9idXN5KQotCQlDSF9BTEVSVCgiJXM6IFRQSSByZWFkIGZyb20gMHgleCBmYWlsZWRcbiIsCisJCXByX2FsZXJ0KCIlczogVFBJIHJlYWQgZnJvbSAweCV4IGZhaWxlZFxuIiwKIAkJCSBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAllbHNlCiAJCSp2YWxwID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfVFBJX1JEX0RBVEEpOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCQl1ZGVsYXkoMTApOwogCX0gd2hpbGUgKGJ1c3kgJiYgLS1hdHRlbXB0cyk7CiAJaWYgKGJ1c3kpCi0JCUNIX0FMRVJUKCIlczogTURJTyBvcGVyYXRpb24gdGltZWQgb3V0XG4iLCBhZGFwdGVyLT5uYW1lKTsKKwkJcHJfYWxlcnQoIiVzOiBNRElPIG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOwogCXJldHVybiBidXN5OwogfQogCkBAIC01MjgsNyArNTI4LDcgQEAKIAogfTsKIAotc3RydWN0IHBjaV9kZXZpY2VfaWQgdDFfcGNpX3RibFtdID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodDFfcGNpX3RibCkgPSB7CiAJQ0hfREVWSUNFKDgsIDAsIENIX0JSRF9UMTEwXzFDVSksCiAJQ0hfREVWSUNFKDgsIDEsIENIX0JSRF9UMTEwXzFDVSksCiAJQ0hfREVWSUNFKDcsIDAsIENIX0JSRF9OMTEwXzFGKSwKQEAgLTU4MSw3ICs1ODEsNyBAQAogCX0gd2hpbGUgKCEodmFsICYgRl9WUERfT1BfRkxBRykgJiYgLS1pKTsKIAogCWlmICghKHZhbCAmIEZfVlBEX09QX0ZMQUcpKSB7Ci0JCUNIX0VSUigiJXM6IHJlYWRpbmcgRUVQUk9NIGFkZHJlc3MgMHgleCBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IHJlYWRpbmcgRUVQUk9NIGFkZHJlc3MgMHgleCBmYWlsZWRcbiIsCiAJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNzM0LDggKzczNCw5IEBACiAJCWJyZWFrOwogCWNhc2UgQ0hCVF9CT0FSRF84MDAwOgogCWNhc2UgQ0hCVF9CT0FSRF9DSFQxMTA6Ci0JCUNIX0RCRyhhZGFwdGVyLCBJTlRSLCAiRXh0ZXJuYWwgaW50ZXJydXB0IGNhdXNlIDB4JXhcbiIsCi0JCSAgICAgICBjYXVzZSk7CisJCWlmIChuZXRpZl9tc2dfaW50cihhZGFwdGVyKSkKKwkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiRXh0ZXJuYWwgaW50ZXJydXB0IGNhdXNlIDB4JXhcbiIsIGNhdXNlKTsKIAkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDEpIHsgICAgICAgIC8qIFBNQzMzOTMgSU5UQiAqLwogCQkJc3RydWN0IGNtYWMgKm1hYyA9IGFkYXB0ZXItPnBvcnRbMF0ubWFjOwogCkBAIC03NDYsOCArNzQ3LDkgQEAKIAogCQkJdDFfdHBpX3JlYWQoYWRhcHRlciwKIAkJCQkJQV9FTE1FUjBfR1BJX1NUQVQsICZtb2RfZGV0ZWN0KTsKLQkJCUNIX01TRyhhZGFwdGVyLCBJTkZPLCBMSU5LLCAiWFBBSyAlc1xuIiwKLQkJCSAgICAgICBtb2RfZGV0ZWN0ID8gInJlbW92ZWQiIDogImluc2VydGVkIik7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlhQQUsgJXNcbiIsCisJCQkJCSBtb2RfZGV0ZWN0ID8gInJlbW92ZWQiIDogImluc2VydGVkIik7CiAJCX0KIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCkBAIC0xMDg0LDcgKzEwODYsNyBAQAogCiAjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCiAJaWYgKGJpLT5jbG9ja19jc3BpICYmICEoYWRhcHRlci0+Y3NwaSA9IHQxX2NzcGlfY3JlYXRlKGFkYXB0ZXIpKSkgewotCQlDSF9FUlIoIiVzOiBDU1BJIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJcHJfZXJyKCIlczogQ1NQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCiAJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xMTA1LDIwICsxMTA3LDIwIEBACiAKIAlhZGFwdGVyLT5zZ2UgPSB0MV9zZ2VfY3JlYXRlKGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMuc2dlKTsKIAlpZiAoIWFkYXB0ZXItPnNnZSkgewotCQlDSF9FUlIoIiVzOiBTR0UgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQlwcl9lcnIoIiVzOiBTR0UgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJaWYgKGJpLT5lc3BpX25wb3J0cyAmJiAhKGFkYXB0ZXItPmVzcGkgPSB0MV9lc3BpX2NyZWF0ZShhZGFwdGVyKSkpIHsKLQkJQ0hfRVJSKCIlczogRVNQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IEVTUEkgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJYWRhcHRlci0+dHAgPSB0MV90cF9jcmVhdGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy50cCk7CiAJaWYgKCFhZGFwdGVyLT50cCkgewotCQlDSF9FUlIoIiVzOiBUUCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IFRQIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJICAgICAgIGFkYXB0ZXItPm5hbWUpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTExMzgsMTQgKzExNDAsMTQgQEAKIAkJYWRhcHRlci0+cG9ydFtpXS5waHkgPSBiaS0+Z3BoeS0+Y3JlYXRlKGFkYXB0ZXItPnBvcnRbaV0uZGV2LAogCQkJCQkJCXBoeV9hZGRyLCBiaS0+bWRpb19vcHMpOwogCQlpZiAoIWFkYXB0ZXItPnBvcnRbaV0ucGh5KSB7Ci0JCQlDSF9FUlIoIiVzOiBQSFkgJWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJcHJfZXJyKCIlczogUEhZICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAogCQlhZGFwdGVyLT5wb3J0W2ldLm1hYyA9IG1hYyA9IGJpLT5nbWFjLT5jcmVhdGUoYWRhcHRlciwgaSk7CiAJCWlmICghbWFjKSB7Ci0JCQlDSF9FUlIoIiVzOiBNQUMgJWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJcHJfZXJyKCIlczogTUFDICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTExNTcsNyArMTE1OSw3IEBACiAJCWlmICghdDFfaXNfYXNpYyhhZGFwdGVyKSB8fCBiaS0+Y2hpcF9tYWMgPT0gQ0hCVF9NQUNfRFVNTVkpCiAJCQltYWMtPm9wcy0+bWFjYWRkcmVzc19nZXQobWFjLCBod19hZGRyKTsKIAkJZWxzZSBpZiAodnBkX21hY2FkZHJlc3NfZ2V0KGFkYXB0ZXIsIGksIGh3X2FkZHIpKSB7Ci0JCQlDSF9FUlIoIiVzOiBjb3VsZCBub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tIFZQRCBST01cbiIsCisJCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tIFZQRCBST01cbiIsCiAJCQkgICAgICAgYWRhcHRlci0+cG9ydFtpXS5kZXYtPm5hbWUpOwogCQkJZ290byBlcnJvcjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYwppbmRleCA5OWI1MWY2Li5jODQ0MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYwpAQCAtNDgsMTQgKzQ4LDE0IEBACiAJCWkrKzsKIAl9IHdoaWxlICgoKHN0YXR1cyAmIDEpID09IDApICYmIChpIDwgNTApKTsKIAlpZiAoaSA9PSA1MCkKLQkJQ0hfRVJSKCJJbnZhbGlkIHRwaSByZWFkIGZyb20gTUFDLCBicmVha2luZyBsb29wLlxuIik7CisJCXByX2VycigiSW52YWxpZCB0cGkgcmVhZCBmcm9tIE1BQywgYnJlYWtpbmcgbG9vcC5cbiIpOwogCiAJdDFfdHBpX3JlYWQoYWRhcHRlciwgKFJFR19MT0NBTF9EQVRBIDw8IDIpICsgNCwgJnZsbyk7CiAJdDFfdHBpX3JlYWQoYWRhcHRlciwgUkVHX0xPQ0FMX0RBVEEgPDwgMiwgJnZoaSk7CiAKIAkqdmFsID0gKHZoaSA8PCAxNikgfCB2bG87CiAKLQkvKiBDSF9FUlIoInJkOiBibG9jazogMHgleCAgc3VibG9jazogMHgleCAgcmVnOiAweCV4ICBkYXRhOiAweCV4XG4iLAorCS8qIHByX2VycigicmQ6IGJsb2NrOiAweCV4ICBzdWJsb2NrOiAweCV4ICByZWc6IDB4JXggIGRhdGE6IDB4JXhcbiIsCiAJCSgoYWRkciYweGUwMDApPj4xMyksICgoYWRkciYweDFlMDApPj45KSwKIAkJKChhZGRyJjB4MDFmZSk+PjEpLCAqdmFsKTsgKi8KIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWFjX2xvY2spOwpAQCAtNjYsNyArNjYsNyBAQAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWFjX2xvY2spOwogCXQxX3RwaV93cml0ZShhZGFwdGVyLCAoYWRkciA8PCAyKSArIDQsIGRhdGEgJiAweEZGRkYpOwogCXQxX3RwaV93cml0ZShhZGFwdGVyLCBhZGRyIDw8IDIsIChkYXRhID4+IDE2KSAmIDB4RkZGRik7Ci0JLyogQ0hfRVJSKCJ3cjogYmxvY2s6IDB4JXggIHN1YmxvY2s6IDB4JXggIHJlZzogMHgleCAgZGF0YTogMHgleFxuIiwKKwkvKiBwcl9lcnIoIndyOiBibG9jazogMHgleCAgc3VibG9jazogMHgleCAgcmVnOiAweCV4ICBkYXRhOiAweCV4XG4iLAogCQkoKGFkZHImMHhlMDAwKT4+MTMpLCAoKGFkZHImMHgxZTAwKT4+OSksCiAJCSgoYWRkciYweDAxZmUpPj4xKSwgZGF0YSk7ICovCiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1hY19sb2NrKTsKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAoaWJbaV0uYWRkciA9PSBJTklUQkxPQ0tfU0xFRVApIHsKIAkJCXVkZWxheSggaWJbaV0uZGF0YSApOwotCQkJQ0hfRVJSKCJzbGVlcCAlZCB1c1xuIixpYltpXS5kYXRhKTsKKwkJCXByX2Vycigic2xlZXAgJWQgdXNcbiIsaWJbaV0uZGF0YSk7CiAJCX0gZWxzZQogCQkJdnNjX3dyaXRlKCBhZGFwdGVyLCBpYltpXS5hZGRyLCBpYltpXS5kYXRhICk7CiAJfQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJICAgIChhZGRyZXNzICE9IDB4MikgJiYKIAkgICAgKGFkZHJlc3MgIT0gMHhkKSAmJgogCSAgICAoYWRkcmVzcyAhPSAweGUpKQotCQkJQ0hfRVJSKCJObyBiaXN0IGFkZHJlc3M6IDB4JXhcbiIsIGFkZHJlc3MpOworCQkJcHJfZXJyKCJObyBiaXN0IGFkZHJlc3M6IDB4JXhcbiIsIGFkZHJlc3MpOwogCiAJZGF0YSA9ICgoMHgwMCA8PCAyNCkgfCAoKGFkZHJlc3MgJiAweGZmKSA8PCAxNikgfCAoMHgwMCA8PCA4KSB8CiAJCSgobW9kdWxlaWQgJiAweGZmKSA8PCAwKSk7CkBAIC0yNTEsOSArMjUxLDkgQEAKIAogCXZzY19yZWFkKGFkYXB0ZXIsIFJFR19SQU1fQklTVF9SRVNVTFQsICZyZXN1bHQpOwogCWlmICgocmVzdWx0ICYgKDEgPDwgOSkpICE9IDB4MCkKLQkJQ0hfRVJSKCJTdGlsbCBpbiBiaXN0IHJlYWQ6IDB4JXhcbiIsIHJlc3VsdCk7CisJCXByX2VycigiU3RpbGwgaW4gYmlzdCByZWFkOiAweCV4XG4iLCByZXN1bHQpOwogCWVsc2UgaWYgKChyZXN1bHQgJiAoMSA8PCA4KSkgIT0gMHgwKQotCQlDSF9FUlIoImJpc3QgcmVhZCBlcnJvcjogMHgleFxuIiwgcmVzdWx0KTsKKwkJcHJfZXJyKCJiaXN0IHJlYWQgZXJyb3I6IDB4JXhcbiIsIHJlc3VsdCk7CiAKIAlyZXR1cm4gKHJlc3VsdCAmIDB4ZmYpOwogfQpAQCAtMjY4LDEwICsyNjgsMTAgQEAKIAkgICAgKGFkZHJlc3MgIT0gMHgyKSAmJgogCSAgICAoYWRkcmVzcyAhPSAweGQpICYmCiAJICAgIChhZGRyZXNzICE9IDB4ZSkpCi0JCQlDSF9FUlIoIk5vIGJpc3QgYWRkcmVzczogMHgleFxuIiwgYWRkcmVzcyk7CisJCQlwcl9lcnIoIk5vIGJpc3QgYWRkcmVzczogMHgleFxuIiwgYWRkcmVzcyk7CiAKIAlpZiAodmFsdWUgPiAyNTUpCi0JCUNIX0VSUigiU3VzcGljaW91cyB3cml0ZSBvdXQgb2YgcmFuZ2UgdmFsdWU6IDB4JXhcbiIsIHZhbHVlKTsKKwkJcHJfZXJyKCJTdXNwaWNpb3VzIHdyaXRlIG91dCBvZiByYW5nZSB2YWx1ZTogMHgleFxuIiwgdmFsdWUpOwogCiAJZGF0YSA9ICgoMHgwMSA8PCAyNCkgfCAoKGFkZHJlc3MgJiAweGZmKSA8PCAxNikgfCAodmFsdWUgPDwgOCkgfAogCQkoKG1vZHVsZWlkICYgMHhmZikgPDwgMCkpOwpAQCAtMjgxLDkgKzI4MSw5IEBACiAKIAl2c2NfcmVhZChhZGFwdGVyLCBSRUdfUkFNX0JJU1RfQ01ELCAmcmVzdWx0KTsKIAlpZiAoKHJlc3VsdCAmICgxIDw8IDI3KSkgIT0gMHgwKQotCQlDSF9FUlIoIlN0aWxsIGluIGJpc3Qgd3JpdGU6IDB4JXhcbiIsIHJlc3VsdCk7CisJCXByX2VycigiU3RpbGwgaW4gYmlzdCB3cml0ZTogMHgleFxuIiwgcmVzdWx0KTsKIAllbHNlIGlmICgocmVzdWx0ICYgKDEgPDwgMjYpKSAhPSAweDApCi0JCUNIX0VSUigiYmlzdCB3cml0ZSBlcnJvcjogMHgleFxuIiwgcmVzdWx0KTsKKwkJcHJfZXJyKCJiaXN0IHdyaXRlIGVycm9yOiAweCV4XG4iLCByZXN1bHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDYsNyArMzA2LDcgQEAKIAljb2x1bW4gPSAoKGJpc3RfcmQoYWRhcHRlcixtb2R1bGVpZCwgMHgwZSk8PDgpICsKIAkJCShiaXN0X3JkKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MGQpKSk7CiAJaWYgKChyZXN1bHQgJiAzKSAhPSAweDMpCi0JCUNIX0VSUigiUmVzdWx0OiAweCV4ICBCSVNUIGVycm9yIGluIHJhbSAlZCwgY29sdW1uOiAweCUwNHhcbiIsCisJCXByX2VycigiUmVzdWx0OiAweCV4ICBCSVNUIGVycm9yIGluIHJhbSAlZCwgY29sdW1uOiAweCUwNHhcbiIsCiAJCQlyZXN1bHQsIG1vZHVsZWlkLCBjb2x1bW4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5jIGIvZHJpdmVycy9uZXQvY25pYy5jCmluZGV4IDQzMzJiM2EuLjk3ODE5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuYworKysgYi9kcml2ZXJzL25ldC9jbmljLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljLmM6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEwLDYgKzEwLDggQEAKICAqIE1vZGlmaWVkIGFuZCBtYWludGFpbmVkIGJ5OiBNaWNoYWVsIENoYW4gPG1jaGFuQGJyb2FkY29tLmNvbT4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDcsNyArNDksNiBAQAogI2luY2x1ZGUgImNuaWNfZGVmcy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImNuaWMiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBDTklDIERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSAiIHYiIENOSUNfTU9EVUxFX1ZFUlNJT04gIiAoIiBDTklDX01PRFVMRV9SRUxEQVRFICIpXG4iOwpAQCAtMzI2LDYgKzMyNywxMiBAQAogCQlpZiAobDVfY2lkID49IE1BWF9DTV9TS19UQkxfU1opCiAJCQlicmVhazsKIAorCQlyY3VfcmVhZF9sb2NrKCk7CisJCWlmICghcmN1X2RlcmVmZXJlbmNlKGNwLT51bHBfb3BzW0NOSUNfVUxQX0w0XSkpIHsKKwkJCXJjID0gLUVOT0RFVjsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJYnJlYWs7CisJCX0KIAkJY3NrID0gJmNwLT5jc2tfdGJsW2w1X2NpZF07CiAJCWNza19ob2xkKGNzayk7CiAJCWlmIChjbmljX2luX3VzZShjc2spKSB7CkBAIC0zNDAsNiArMzQ3LDcgQEAKIAkJCQljbmljX2NtX3NldF9wZyhjc2spOwogCQl9CiAJCWNza19wdXQoY3NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJjID0gMDsKIAl9CiAJfQpAQCAtNDA5LDE0ICs0MTcsMTMgQEAKIAlzdHJ1Y3QgY25pY19kZXYgKmRldjsKIAogCWlmICh1bHBfdHlwZSA8IDAgfHwgdWxwX3R5cGUgPj0gTUFYX0NOSUNfVUxQX1RZUEUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kcml2ZXI6IEJhZCB0eXBlICVkXG4iLAotCQkgICAgICAgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBCYWQgdHlwZSAlZFxuIiwgX19mdW5jX18sIHVscF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJmNuaWNfbG9jayk7CiAJaWYgKGNuaWNfdWxwX3RibFt1bHBfdHlwZV0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kcml2ZXI6IFR5cGUgJWQgaGFzIGFscmVhZHkgIgotCQkJCSAgICAiYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IFR5cGUgJWQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHVscF90eXBlKTsKIAkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTQ1NSwxNSArNDYyLDE0IEBACiAJaW50IGkgPSAwOwogCiAJaWYgKHVscF90eXBlIDwgMCB8fCB1bHBfdHlwZSA+PSBNQVhfQ05JQ19VTFBfVFlQRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBCYWQgdHlwZSAlZFxuIiwKLQkJICAgICAgIHVscF90eXBlKTsKKwkJcHJfZXJyKCIlczogQmFkIHR5cGUgJWRcbiIsIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAltdXRleF9sb2NrKCZjbmljX2xvY2spOwogCXVscF9vcHMgPSBjbmljX3VscF90YmxbdWxwX3R5cGVdOwogCWlmICghdWxwX29wcykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBUeXBlICVkIGhhcyBub3QgIgotCQkJCSAgICAiYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IFR5cGUgJWQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCXJlYWRfbG9jaygmY25pY19kZXZfbG9jayk7CkBAIC00NzEsOCArNDc3LDggQEAKIAkJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAKIAkJaWYgKHJjdV9kZXJlZmVyZW5jZShjcC0+dWxwX29wc1t1bHBfdHlwZV0pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBUeXBlICVkICIKLQkJCSAgICAgICAic3RpbGwgaGFzIGRldmljZXMgcmVnaXN0ZXJlZFxuIiwgdWxwX3R5cGUpOworCQkJcHJfZXJyKCIlczogVHlwZSAlZCBzdGlsbCBoYXMgZGV2aWNlcyByZWdpc3RlcmVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCQlyZWFkX3VubG9jaygmY25pY19kZXZfbG9jayk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KQEAgLTQ5Miw4ICs0OTgsNyBAQAogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmdWxwX29wcy0+cmVmX2NvdW50KSAhPSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28iCi0JCQkJCSIgdG8gemVyby5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXRkZXYsICJGYWlsZWQgd2FpdGluZyBmb3IgcmVmIGNvdW50IHRvIGdvIHRvIHplcm9cbiIpOwogCXJldHVybiAwOwogCiBvdXRfdW5sb2NrOgpAQCAtNTExLDIwICs1MTYsMTkgQEAKIAlzdHJ1Y3QgY25pY191bHBfb3BzICp1bHBfb3BzOwogCiAJaWYgKHVscF90eXBlIDwgMCB8fCB1bHBfdHlwZSA+PSBNQVhfQ05JQ19VTFBfVFlQRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3JlZ2lzdGVyX2RldmljZTogQmFkIHR5cGUgJWRcbiIsCi0JCSAgICAgICB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IEJhZCB0eXBlICVkXG4iLCBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbXV0ZXhfbG9jaygmY25pY19sb2NrKTsKIAlpZiAoY25pY191bHBfdGJsW3VscF90eXBlXSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNuaWNfcmVnaXN0ZXJfZGV2aWNlOiBEcml2ZXIgd2l0aCB0eXBlICVkICIKLQkJCQkgICAgImhhcyBub3QgYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IERyaXZlciB3aXRoIHR5cGUgJWQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQltdXRleF91bmxvY2soJmNuaWNfbG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAlpZiAocmN1X2RlcmVmZXJlbmNlKGNwLT51bHBfb3BzW3VscF90eXBlXSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kZXZpY2U6IFR5cGUgJWQgaGFzIGFscmVhZHkgIgotCQkgICAgICAgImJlZW4gcmVnaXN0ZXJlZCB0byB0aGlzIGRldmljZVxuIiwgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBUeXBlICVkIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCB0byB0aGlzIGRldmljZVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC01NTIsOCArNTU2LDcgQEAKIAlpbnQgaSA9IDA7CiAKIAlpZiAodWxwX3R5cGUgPCAwIHx8IHVscF90eXBlID49IE1BWF9DTklDX1VMUF9UWVBFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNuaWNfdW5yZWdpc3Rlcl9kZXZpY2U6IEJhZCB0eXBlICVkXG4iLAotCQkgICAgICAgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBCYWQgdHlwZSAlZFxuIiwgX19mdW5jX18sIHVscF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJmNuaWNfbG9jayk7CkBAIC01NjEsOCArNTY0LDggQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGNwLT51bHBfb3BzW3VscF90eXBlXSwgTlVMTCk7CiAJCWNuaWNfcHV0KGRldik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY191bnJlZ2lzdGVyX2RldmljZTogZGV2aWNlIG5vdCAiCi0JCSAgICAgICAicmVnaXN0ZXJlZCB0byB0aGlzIHVscCB0eXBlICVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IGRldmljZSBub3QgcmVnaXN0ZXJlZCB0byB0aGlzIHVscCB0eXBlICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHVscF90eXBlKTsKIAkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NzYsOCArNTc5LDcgQEAKIAkJaSsrOwogCX0KIAlpZiAodGVzdF9iaXQoVUxQX0ZfQ0FMTF9QRU5ESU5HLCAmY3AtPnVscF9mbGFnc1t1bHBfdHlwZV0pKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciBVTFAgdXAgY2FsbCIKLQkJCQkJIiB0byBjb21wbGV0ZS5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXRkZXYsICJGYWlsZWQgd2FpdGluZyBmb3IgVUxQIHVwIGNhbGwgdG8gY29tcGxldGVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyArOTAwLDggQEAKIAl1aW5mby0+bWVtWzBdLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CiAKIAlpZiAodGVzdF9iaXQoQ05JQ19GX0JOWDJfQ0xBU1MsICZkZXYtPmZsYWdzKSkgewotCQl1aW5mby0+bWVtWzFdLmFkZHIgPSAodW5zaWduZWQgbG9uZykgY3AtPnN0YXR1c19ibGsgJiBQQUdFX01BU0s7CisJCXVpbmZvLT5tZW1bMV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+c3RhdHVzX2Jsay5nZW4gJgorCQkJUEFHRV9NQVNLOwogCQlpZiAoY3AtPmV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkKIAkJCXVpbmZvLT5tZW1bMV0uc2l6ZSA9IEJOWDJfU0JMS19NU0lYX0FMSUdOX1NJWkUgKiA5OwogCQllbHNlCkBAIC0xMTAxLDEwICsxMTA0LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JY3AtPmJueDJ4X3N0YXR1c19ibGsgPSBjcC0+c3RhdHVzX2JsazsKIAljcC0+Ym54MnhfZGVmX3N0YXR1c19ibGsgPSBjcC0+ZXRoZGV2LT5pcnFfYXJyWzFdLnN0YXR1c19ibGs7CiAKLQltZW1zZXQoY3AtPmJueDJ4X3N0YXR1c19ibGssIDAsIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKKwltZW1zZXQoY3AtPnN0YXR1c19ibGsuYm54MngsIDAsIHNpemVvZigqY3AtPnN0YXR1c19ibGsuYm54MngpKTsKIAogCWNwLT5sMl9yeF9yaW5nX3NpemUgPSAxNTsKIApAQCAtMTg2NSw4ICsxODY3LDcgQEAKIAl9CiAKIAlpZiAoc2l6ZW9mKCpjb25uX2J1ZikgPiBDTklDX0tXUTE2X0RBVEFfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY29ubl9idWYgc2l6ZSB0b28gYmlnXG4iLAotCQkJICAgICAgIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgImNvbm5fYnVmIHNpemUgdG9vIGJpZ1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAljb25uX2J1ZiA9IGNuaWNfZ2V0X2t3cWVfMTZfZGF0YShjcCwgbDVfY2lkLCAmbDVfZGF0YSk7CkBAIC0yMDI2LDEzICsyMDI3LDEzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IDA7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogVW5rbm93biB0eXBlIG9mIEtXUUUoMHgleClcbiIsCi0JCQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUsIG9wY29kZSk7CisJCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiVW5rbm93biB0eXBlIG9mIEtXUUUoMHgleClcbiIsCisJCQkJICAgb3Bjb2RlKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEtXUUUoMHgleCkgZmFpbGVkXG4iLAotCQkJICAgICAgIGRldi0+bmV0ZGV2LT5uYW1lLCBvcGNvZGUpOworCQkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIktXUUUoMHgleCkgZmFpbGVkXG4iLAorCQkJCSAgIG9wY29kZSk7CiAJCWkgKz0gd29yazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMDc0LDggKzIwNzUsOCBAQAogCQllbHNlIGlmIChrY3FlX2xheWVyID09IEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MMikKIAkJCWdvdG8gZW5kOwogCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBVbmtub3duIHR5cGUgb2YgS0NRRSgweCV4KVxuIiwKLQkJCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSwga2NxZV9vcF9mbGFnKTsKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJVbmtub3duIHR5cGUgb2YgS0NRRSgweCV4KVxuIiwKKwkJCQkgICBrY3FlX29wX2ZsYWcpOwogCQkJZ290byBlbmQ7CiAJCX0KIApAQCAtMjIwNCw3ICsyMjA1LDcgQEAKIHsKIAlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IChzdHJ1Y3QgY25pY19kZXYgKikgZGF0YTsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnN0YXR1c19ibGsgPSBjcC0+Ym54Ml9zdGF0dXNfYmxrOworCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc3RhdHVzX2JsayA9IGNwLT5zdGF0dXNfYmxrLmJueDI7CiAJdTMyIHN0YXR1c19pZHggPSBzdGF0dXNfYmxrLT5zdGF0dXNfaWR4OwogCXUxNiBod19wcm9kLCBzd19wcm9kOwogCWludCBrY3FlX2NudDsKQEAgLTIyNTAsNyArMjI1MSw3IEBACiAJaWYgKGNwLT5hY2tfaW50KQogCQljcC0+YWNrX2ludChkZXYpOwogCi0JcHJlZmV0Y2goY3AtPnN0YXR1c19ibGspOworCXByZWZldGNoKGNwLT5zdGF0dXNfYmxrLmdlbik7CiAJcHJlZmV0Y2goJmNwLT5rY3FbS0NRX1BHKHByb2QpXVtLQ1FfSURYKHByb2QpXSk7CiAKIAlpZiAobGlrZWx5KHRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpKQpAQCAtMjI5MSw3ICsyMjkyLDcgQEAKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAl1MTYgaHdfcHJvZCwgc3dfcHJvZDsKIAlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja19jICpzYmxrID0KLQkJJmNwLT5ibngyeF9zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jazsKKwkJJmNwLT5zdGF0dXNfYmxrLmJueDJ4LT5jX3N0YXR1c19ibG9jazsKIAl1MzIgc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19ibG9ja19pbmRleDsKIAlpbnQga2NxZV9jbnQ7CiAKQEAgLTIzMzMsNyArMjMzNCw3IEBACiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAJdTE2IHByb2QgPSBjcC0+a2NxX3Byb2RfaWR4ICYgTUFYX0tDUV9JRFg7CiAKLQlwcmVmZXRjaChjcC0+c3RhdHVzX2Jsayk7CisJcHJlZmV0Y2goY3AtPnN0YXR1c19ibGsuYm54MngpOwogCXByZWZldGNoKCZjcC0+a2NxW0tDUV9QRyhwcm9kKV1bS0NRX0lEWChwcm9kKV0pOwogCiAJaWYgKGxpa2VseSh0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkKQEAgLTI1MTMsNyArMjUxNCw3IEBACiAJbDRrd3FlLT5zYTUgPSBkZXYtPm1hY19hZGRyWzVdOwogCiAJbDRrd3FlLT5ldHlwZSA9IEVUSF9QX0lQOwotCWw0a3dxZS0+aXBpZF9jb3VudCA9IERFRl9JUElEX0NPVU5UOworCWw0a3dxZS0+aXBpZF9zdGFydCA9IERFRl9JUElEX1NUQVJUOwogCWw0a3dxZS0+aG9zdF9vcGFxdWUgPSBjc2stPmw1X2NpZDsKIAogCWlmIChjc2stPnZsYW5faWQpIHsKQEAgLTI4NTksOCArMjg2MCw4IEBACiB7CiAJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBjc2stPmRldjsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQlpbnQgaXNfdjYsIGVyciwgcmMgPSAtRU5FVFVOUkVBQ0g7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCWludCBpc192NiwgcmMgPSAwOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxkZXY7CiAJdTMyIGxvY2FsX3BvcnQ7CiAKQEAgLTI4NzYsMzkgKzI4NzcsMzEgQEAKIAljbGVhcl9iaXQoU0tfRl9JUFY2LCAmY3NrLT5mbGFncyk7CiAKIAlpZiAoaXNfdjYpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCAoZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIAkJc2V0X2JpdChTS19GX0lQVjYsICZjc2stPmZsYWdzKTsKLQkJZXJyID0gY25pY19nZXRfdjZfcm91dGUoJnNhZGRyLT5yZW1vdGUudjYsICZkc3QpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAoIWRzdCB8fCBkc3QtPmVycm9yIHx8ICFkc3QtPmRldikKLQkJCWdvdG8gZXJyX291dDsKKwkJY25pY19nZXRfdjZfcm91dGUoJnNhZGRyLT5yZW1vdGUudjYsICZkc3QpOwogCiAJCW1lbWNweSgmY3NrLT5kc3RfaXBbMF0sICZzYWRkci0+cmVtb3RlLnY2LnNpbjZfYWRkciwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJY3NrLT5kc3RfcG9ydCA9IHNhZGRyLT5yZW1vdGUudjYuc2luNl9wb3J0OwogCQlsb2NhbF9wb3J0ID0gc2FkZHItPmxvY2FsLnY2LnNpbjZfcG9ydDsKLSNlbHNlCi0JCXJldHVybiByYzsKLSNlbmRpZgogCiAJfSBlbHNlIHsKLQkJZXJyID0gY25pY19nZXRfdjRfcm91dGUoJnNhZGRyLT5yZW1vdGUudjQsICZkc3QpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAoIWRzdCB8fCBkc3QtPmVycm9yIHx8ICFkc3QtPmRldikKLQkJCWdvdG8gZXJyX291dDsKKwkJY25pY19nZXRfdjRfcm91dGUoJnNhZGRyLT5yZW1vdGUudjQsICZkc3QpOwogCiAJCWNzay0+ZHN0X2lwWzBdID0gc2FkZHItPnJlbW90ZS52NC5zaW5fYWRkci5zX2FkZHI7CiAJCWNzay0+ZHN0X3BvcnQgPSBzYWRkci0+cmVtb3RlLnY0LnNpbl9wb3J0OwogCQlsb2NhbF9wb3J0ID0gc2FkZHItPmxvY2FsLnY0LnNpbl9wb3J0OwogCX0KIAotCWNzay0+dmxhbl9pZCA9IGNuaWNfZ2V0X3ZsYW4oZHN0LT5kZXYsICZyZWFsZGV2KTsKLQlpZiAocmVhbGRldiAhPSBkZXYtPm5ldGRldikKLQkJZ290byBlcnJfb3V0OworCWNzay0+dmxhbl9pZCA9IDA7CisJY3NrLT5tdHUgPSBkZXYtPm5ldGRldi0+bXR1OworCWlmIChkc3QgJiYgZHN0LT5kZXYpIHsKKwkJdTE2IHZsYW4gPSBjbmljX2dldF92bGFuKGRzdC0+ZGV2LCAmcmVhbGRldik7CisJCWlmIChyZWFsZGV2ID09IGRldi0+bmV0ZGV2KSB7CisJCQljc2stPnZsYW5faWQgPSB2bGFuOworCQkJY3NrLT5tdHUgPSBkc3RfbXR1KGRzdCk7CisJCX0KKwl9CiAKIAlpZiAobG9jYWxfcG9ydCA+PSBDTklDX0xPQ0FMX1BPUlRfTUlOICYmCiAJICAgIGxvY2FsX3BvcnQgPCBDTklDX0xPQ0FMX1BPUlRfTUFYKSB7CkBAIC0yOTI2LDkgKzI5MTksNiBAQAogCX0KIAljc2stPnNyY19wb3J0ID0gbG9jYWxfcG9ydDsKIAotCWNzay0+bXR1ID0gZHN0X210dShkc3QpOwotCXJjID0gMDsKLQogZXJyX291dDoKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiByYzsKQEAgLTMwNTIsNiArMzA0MiwxNCBAQAogCQljbGVhcl9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpOwogCQlnb3RvIGRvbmU7CiAJfQorCS8qIFBvc3NpYmxlIFBHIGtjcWUgc3RhdHVzOiAgU1VDQ0VTUywgT0ZGTE9BREVEX1BHLCBvciBDVFhfQUxMT0NfRkFJTCAqLworCWlmIChrY3FlLT5zdGF0dXMgPT0gTDRfS0NRRV9DT01QTEVUSU9OX1NUQVRVU19DVFhfQUxMT0NfRkFJTCkgeworCQljbGVhcl9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpOworCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLAorCQkJICAgICAgIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX0NPTk5FQ1RfQ09NUExFVEUpOworCQlnb3RvIGRvbmU7CisJfQorCiAJY3NrLT5wZ19jaWQgPSBrY3FlLT5wZ19jaWQ7CiAJc2V0X2JpdChTS19GX1BHX09GRkxEX0NPTVBMRVRFLCAmY3NrLT5mbGFncyk7CiAJY25pY19jbV9jb25uX3JlcShjc2spOwpAQCAtMzA4OSw2ICszMDg3LDEzIEBACiAJfQogCiAJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIEw1Q01fUkFNUk9EX0NNRF9JRF9UQ1BfQ09OTkVDVDoKKwkJaWYgKGw0a2NxZS0+c3RhdHVzICE9IDApIHsKKwkJCWNsZWFyX2JpdChTS19GX09GRkxEX1NDSEVELCAmY3NrLT5mbGFncyk7CisJCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLAorCQkJCSAgICAgICBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DT05ORUNUX0NPTVBMRVRFKTsKKwkJfQorCQlicmVhazsKIAljYXNlIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX0NPTk5FQ1RfQ09NUExFVEU6CiAJCWlmIChsNGtjcWUtPnN0YXR1cyA9PSAwKQogCQkJc2V0X2JpdChTS19GX09GRkxEX0NPTVBMRVRFLCAmY3NrLT5mbGFncyk7CkBAIC0zMDk5LDcgKzMxMDQsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX1JFQ0VJVkVEOgotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNLX0ZfT0ZGTERfQ09NUExFVEUsICZjc2stPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyX0NMQVNTLCAmZGV2LT5mbGFncykpIHsKKwkJCWNuaWNfY21fdXBjYWxsKGNwLCBjc2ssIG9wY29kZSk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU0tfRl9PRkZMRF9DT01QTEVURSwgJmNzay0+ZmxhZ3MpKQogCQkJY3NrLT5zdGF0ZSA9IG9wY29kZTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DTE9TRV9DT01QOgpAQCAtMzE2Myw2ICszMTcxLDE2IEBACiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTS19GX0NMT1NJTkcsICZjc2stPmZsYWdzKSkKIAkJCXJldHVybiAxOwogCX0KKwkvKiA1NzcxMCsgb25seSAgd29ya2Fyb3VuZCB0byBoYW5kbGUgdW5zb2xpY2l0ZWQgUkVTRVRfQ09NUAorCSAqIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBsaWtlIGEgUkVTRVQgUkNWRCBub3RpZmljYXRpb24KKwkgKiB3aGljaCB0cmlnZ2VycyB0aGUgY2xlYW4gdXAgcHJvY2VkdXJlCisJICovCisJZWxzZSBpZiAob3Bjb2RlID09IEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX0NPTVApIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNLX0ZfQ0xPU0lORywgJmNzay0+ZmxhZ3MpKSB7CisJCQljc2stPnN0YXRlID0gTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfUkVDRUlWRUQ7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE3MiwxMCArMzE5MCw4IEBACiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAKIAljbGVhcl9iaXQoU0tfRl9DT05ORUNUX1NUQVJULCAmY3NrLT5mbGFncyk7Ci0JaWYgKGNuaWNfcmVhZHlfdG9fY2xvc2UoY3NrLCBvcGNvZGUpKSB7Ci0JCWNuaWNfY2xvc2VfY29ubihjc2spOwotCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLCBvcGNvZGUpOwotCX0KKwljbmljX2Nsb3NlX2Nvbm4oY3NrKTsKKwljbmljX2NtX3VwY2FsbChjcCwgY3NrLCBvcGNvZGUpOwogfQogCiBzdGF0aWMgdm9pZCBjbmljX2NtX3N0b3BfYm54Ml9odyhzdHJ1Y3QgY25pY19kZXYgKmRldikKQEAgLTMzOTMsOCArMzQwOSw3IEBACiAJCUNOSUNfV1IoZGV2LCBiYXNlICsgQk5YMl9IQ19DT01fVElDS1NfT0ZGLCAoNjQgPDwgMTYpIHwgMjIwKTsKIAkJQ05JQ19XUihkZXYsIGJhc2UgKyBCTlgyX0hDX0NNRF9USUNLU19PRkYsICg2NCA8PCAxNikgfCAyMjApOwogCi0JCWNwLT5ibngyX3N0YXR1c19ibGsgPSBjcC0+c3RhdHVzX2JsazsKLQkJY3AtPmxhc3Rfc3RhdHVzX2lkeCA9IGNwLT5ibngyX3N0YXR1c19ibGstPnN0YXR1c19pZHg7CisJCWNwLT5sYXN0X3N0YXR1c19pZHggPSBjcC0+c3RhdHVzX2Jsay5ibngyLT5zdGF0dXNfaWR4OwogCQl0YXNrbGV0X2luaXQoJmNwLT5jbmljX2lycV90YXNrLCBjbmljX3NlcnZpY2VfYm54Ml9tc2l4LAogCQkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKIAkJZXJyID0gcmVxdWVzdF9pcnEoZXRoZGV2LT5pcnFfYXJyWzBdLnZlY3RvciwgY25pY19pcnEsIDAsCkBAIC0zNDAzLDcgKzM0MTgsNyBAQAogCQkJdGFza2xldF9kaXNhYmxlKCZjcC0+Y25pY19pcnFfdGFzayk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXdoaWxlIChjcC0+Ym54Ml9zdGF0dXNfYmxrLT5zdGF0dXNfY29tcGxldGlvbl9wcm9kdWNlcl9pbmRleCAmJgorCQl3aGlsZSAoY3AtPnN0YXR1c19ibGsuYm54Mi0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXggJiYKIAkJICAgICAgIGkgPCAxMCkgewogCQkJQ05JQ19XUihkZXYsIEJOWDJfSENfQ09BTEVTQ0VfTk9XLAogCQkJCTEgPDwgKDExICsgc2Jsa19udW0pKTsKQEAgLTM0MTEsMTMgKzM0MjYsMTMgQEAKIAkJCWkrKzsKIAkJCWJhcnJpZXIoKTsKIAkJfQotCQlpZiAoY3AtPmJueDJfc3RhdHVzX2Jsay0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXgpIHsKKwkJaWYgKGNwLT5zdGF0dXNfYmxrLmJueDItPnN0YXR1c19jb21wbGV0aW9uX3Byb2R1Y2VyX2luZGV4KSB7CiAJCQljbmljX2ZyZWVfaXJxKGRldik7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJfSBlbHNlIHsKLQkJc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IGNwLT5zdGF0dXNfYmxrOworCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gY3AtPnN0YXR1c19ibGsuZ2VuOwogCQl1MzIgaGNfY21kID0gQ05JQ19SRChkZXYsIEJOWDJfSENfQ09NTUFORCk7CiAJCWludCBpID0gMDsKIApAQCAtMzQzNSw4ICszNDUwLDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAiICJLQ1EgaW5kZXggbm90IHJlc2V0dGluZyB0byAwLlxuIiwKLQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUpOworCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJLQ1EgaW5kZXggbm90IHJlc2V0dGluZyB0byAwXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0zNDc1LDcgKzM0ODksNyBAQAogCWludCBpOwogCXN0cnVjdCB0eF9iZCAqdHhiZDsKIAlkbWFfYWRkcl90IGJ1Zl9tYXA7Ci0Jc3RydWN0IHN0YXR1c19ibG9jayAqc19ibGsgPSBjcC0+c3RhdHVzX2JsazsKKwlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzX2JsayA9IGNwLT5zdGF0dXNfYmxrLmdlbjsKIAogCXNiX2lkID0gY3AtPnN0YXR1c19ibGtfbnVtOwogCXR4X2NpZCA9IDIwOwpAQCAtMzQ4Myw3ICszNDk3LDcgQEAKIAljbmljX2luaXRfY29udGV4dChkZXYsIHR4X2NpZCArIDEpOwogCWNwLT50eF9jb25zX3B0ciA9ICZzX2Jsay0+c3RhdHVzX3R4X3F1aWNrX2NvbnN1bWVyX2luZGV4MjsKIAlpZiAoZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKSB7Ci0JCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc2JsayA9IGNwLT5zdGF0dXNfYmxrOworCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGsgPSBjcC0+c3RhdHVzX2Jsay5ibngyOwogCiAJCXR4X2NpZCA9IFRYX1RTU19DSUQgKyBzYl9pZCAtIDE7CiAJCWNuaWNfaW5pdF9jb250ZXh0KGRldiwgdHhfY2lkKTsKQEAgLTM1MzksNyArMzU1Myw3IEBACiAJdTMyIGNpZF9hZGRyLCBzYl9pZCwgdmFsLCBjb2FsX3JlZywgY29hbF92YWw7CiAJaW50IGk7CiAJc3RydWN0IHJ4X2JkICpyeGJkOwotCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNfYmxrID0gY3AtPnN0YXR1c19ibGs7CisJc3RydWN0IHN0YXR1c19ibG9jayAqc19ibGsgPSBjcC0+c3RhdHVzX2Jsay5nZW47CiAKIAlzYl9pZCA9IGNwLT5zdGF0dXNfYmxrX251bTsKIAljbmljX2luaXRfY29udGV4dChkZXYsIDIpOwpAQCAtMzU0Nyw3ICszNTYxLDcgQEAKIAljb2FsX3JlZyA9IEJOWDJfSENfQ09NTUFORDsKIAljb2FsX3ZhbCA9IENOSUNfUkQoZGV2LCBjb2FsX3JlZyk7CiAJaWYgKGV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkgewotCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGsgPSBjcC0+c3RhdHVzX2JsazsKKwkJc3RydWN0IHN0YXR1c19ibG9ja19tc2l4ICpzYmxrID0gY3AtPnN0YXR1c19ibGsuYm54MjsKIAogCQljcC0+cnhfY29uc19wdHIgPSAmc2Jsay0+c3RhdHVzX3J4X3F1aWNrX2NvbnN1bWVyX2luZGV4OwogCQljb2FsX3JlZyA9IEJOWDJfSENfQ09BTEVTQ0VfTk9XOwpAQCAtMzY0Niw3ICszNjYwLDcgQEAKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAlzdHJ1Y3QgY25pY19ldGhfZGV2ICpldGhkZXYgPSBjcC0+ZXRoZGV2OwotCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBjcC0+c3RhdHVzX2JsazsKKwlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gY3AtPnN0YXR1c19ibGsuZ2VuOwogCXUzMiB2YWw7CiAJaW50IGVycjsKIApAQCAtMzc1OCw4ICszNzcyLDcgQEAKIAogCWVyciA9IGNuaWNfaW5pdF9ibngyX2lycShkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNuaWNfaW5pdF9pcnEgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiY25pY19pbml0X2lycSBmYWlsZWRcbiIpOwogCQljbmljX3JlZ193cl9pbmQoZGV2LCBCTlgyX0NQX1NDUkFUQ0ggKyAweDIwLCAwKTsKIAkJY25pY19yZWdfd3JfaW5kKGRldiwgQk5YMl9DT01fU0NSQVRDSCArIDB4MjAsIDApOwogCQlyZXR1cm4gZXJyOwpAQCAtNDEyMiw4ICs0MTM1LDcgQEAKIAkJCSAgIG9mZnNldG9mKHN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrX2MsCiAJCQkJICAgIGluZGV4X3ZhbHVlc1tIQ19JTkRFWF9DX0lTQ1NJX0VRX0NPTlNdKSk7CiAJaWYgKGVxX2lkeCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFUSBjb25zIGluZGV4ICV4ICE9IDBcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSwgZXFfaWR4KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIkVRIGNvbnMgaW5kZXggJXggIT0gMFxuIiwgZXFfaWR4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcmV0ID0gY25pY19pbml0X2JueDJ4X2lycShkZXYpOwpAQCAtNDIwOCw4ICs0MjIwLDcgQEAKIAogCWVyciA9IGV0aGRldi0+ZHJ2X3JlZ2lzdGVyX2NuaWMoZGV2LT5uZXRkZXYsIGNwLT5jbmljX29wcywgZGV2KTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVnaXN0ZXJfY25pYyBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJyZWdpc3Rlcl9jbmljIGZhaWxlZFxuIik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDIzOCwxMyArNDI0OSwxMiBAQAogCWNwLT5jaGlwX2lkID0gZXRoZGV2LT5jaGlwX2lkOwogCXBjaV9kZXZfZ2V0KGRldi0+cGNpZGV2KTsKIAljcC0+ZnVuYyA9IFBDSV9GVU5DKGRldi0+cGNpZGV2LT5kZXZmbik7Ci0JY3AtPnN0YXR1c19ibGsgPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2JsazsKKwljcC0+c3RhdHVzX2Jsay5nZW4gPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2JsazsKIAljcC0+c3RhdHVzX2Jsa19udW0gPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2Jsa19udW07CiAKIAllcnIgPSBjcC0+YWxsb2NfcmVzYyhkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGFsbG9jYXRlIHJlc291cmNlIGZhaWx1cmVcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJhbGxvY2F0ZSByZXNvdXJjZSBmYWlsdXJlXG4iKTsKIAkJZ290byBlcnIxOwogCX0KIApAQCAtNDMyNiwxMCArNDMzNiw5IEBACiAJCWkrKzsKIAl9CiAJaWYgKGF0b21pY19yZWFkKCZkZXYtPnJlZl9jb3VudCkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28iCi0JCQkJICAgICIgdG8gemVyby5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIkZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28gdG8gemVyb1xuIik7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUmVtb3ZlZCBDTklDIGRldmljZTogJXNcbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwluZXRkZXZfaW5mbyhkZXYtPm5ldGRldiwgIlJlbW92ZWQgQ05JQyBkZXZpY2VcbiIpOwogCWRldl9wdXQoZGV2LT5uZXRkZXYpOwogCWtmcmVlKGRldik7CiB9CkBAIC00MzQ1LDggKzQzNTQsNyBAQAogCiAJY2RldiA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSAsIEdGUF9LRVJORUwpOwogCWlmIChjZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGFsbG9jYXRlIGRldiBzdHJ1Y3QgZmFpbHVyZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiYWxsb2NhdGUgZGV2IHN0cnVjdCBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MzY0LDcgKzQzNzIsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmNwLT5jbmljX3VscF9sb2NrKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJBZGRlZCBDTklDIGRldmljZTogJXNcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiQWRkZWQgQ05JQyBkZXZpY2VcbiIpOwogCiAJcmV0dXJuIGNkZXY7CiB9CkBAIC00NjA1LDcgKzQ2MTMsNyBAQAogewogCWludCByYyA9IDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKIAlyYyA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY25pY19uZXRkZXZfbm90aWZpZXIpOwogCWlmIChyYykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5oIGIvZHJpdmVycy9uZXQvY25pYy5oCmluZGV4IDI0MWQwOWEuLmEwZDg1M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuaAorKysgYi9kcml2ZXJzL25ldC9jbmljLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljLmg6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBCTlgyWF9LV1FfREFUQShjcCwgeCkJCQkJCQlcCiAJJihjcCktPmt3cV8xNl9kYXRhW0JOWDJYX0tXUV9EQVRBX1BHKGNwLCB4KV1bQk5YMlhfS1dRX0RBVEFfSURYKGNwLCB4KV0KIAotI2RlZmluZSBERUZfSVBJRF9DT1VOVAkJMHhjMDAxCisjZGVmaW5lIERFRl9JUElEX1NUQVJUCQkweDgwMDAKIAogI2RlZmluZSBERUZfS0FfVElNRU9VVAkJMTAwMDAKICNkZWZpbmUgREVGX0tBX0lOVEVSVkFMCQkzMDAwMDAKQEAgLTIyNCw5ICsyMjQsMTIgQEAKIAl1MTYJCWtjcV9wcm9kX2lkeDsKIAl1MzIJCWtjcV9pb19hZGRyOwogCi0Jdm9pZAkJCQkqc3RhdHVzX2JsazsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXgJKmJueDJfc3RhdHVzX2JsazsKLQlzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2sJKmJueDJ4X3N0YXR1c19ibGs7CisJdW5pb24geworCQl2b2lkCQkJCSpnZW47CisJCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeAkqYm54MjsKKwkJc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrCSpibngyeDsKKwl9IHN0YXR1c19ibGs7CisKIAlzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrCSpibngyeF9kZWZfc3RhdHVzX2JsazsKIAogCXUzMgkJCQlzdGF0dXNfYmxrX251bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWNfZGVmcy5oIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKaW5kZXggOTgyN2IyNy4uN2NlNjk0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKQEAgLTEsNyArMSw3IEBACiAKIC8qIGNuaWMuYzogQnJvYWRjb20gQ05JQyBjb3JlIG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pY19pZi5oIGIvZHJpdmVycy9uZXQvY25pY19pZi5oCmluZGV4IDhhYWY5OGIuLjExMGM2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWNfaWYuaAorKysgYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljX2lmLmg6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMiw4ICsxMiw4IEBACiAjaWZuZGVmIENOSUNfSUZfSAogI2RlZmluZSBDTklDX0lGX0gKIAotI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMCIKLSNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiT2N0IDEwLCAyMDA5IgorI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMSIKKyNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiRmViIDIyLCAyMDEwIgogCiAjZGVmaW5lIENOSUNfVUxQX1JETUEJCTAKICNkZWZpbmUgQ05JQ19VTFBfSVNDU0kJCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IDhkMGJlMjYuLmI4NWM4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTI5NCw5ICsyOTUsMTYgQEAKIAogc3RhdGljIGludCBjcG1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CisJc3RydWN0IGNsayAqY3BtYWNfY2xrOworCisJY3BtYWNfY2xrID0gY2xrX2dldCgmYnVzLT5kZXYsICJjcG1hYyIpOworCWlmIChJU19FUlIoY3BtYWNfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBnZXQgY3BtYWMgY2xvY2tcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCWFyN19kZXZpY2VfcmVzZXQoQVI3X1JFU0VUX0JJVF9NRElPKTsKIAljcG1hY193cml0ZShidXMtPnByaXYsIENQTUFDX01ESU9fQ09OVFJPTCwgTURJT0NfRU5BQkxFIHwKLQkJICAgIE1ESU9DX0NMS0RJVihhcjdfY3BtYWNfZnJlcSgpIC8gMjIwMDAwMCAtIDEpKTsKKwkJICAgIE1ESU9DX0NMS0RJVihjbGtfZ2V0X3JhdGUoY3BtYWNfY2xrKSAvIDIyMDAwMDAgLSAxKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMCw3ICszMjgsNiBAQAogc3RhdGljIHZvaWQgY3BtYWNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldl9tY19saXN0ICppdGVyOwotCWludCBpOwogCXU4IHRtcDsKIAl1MzIgbWJwLCBiaXQsIGhhc2hbMl0gPSB7IDAsIH07CiAJc3RydWN0IGNwbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzQwLDggKzM0Nyw3IEBACiAJCQkgKiBjcG1hYyB1c2VzIHNvbWUgc3RyYW5nZSBtYWMgYWRkcmVzcyBoYXNoaW5nCiAJCQkgKiAobm90IGNyYzMyKQogCQkJICovCi0JCQlmb3IgKGkgPSAwLCBpdGVyID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSAgICAgaSsrLCBpdGVyID0gaXRlci0+bmV4dCkgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaXRlciwgZGV2KSB7CiAJCQkJYml0ID0gMDsKIAkJCQl0bXAgPSBpdGVyLT5kbWlfYWRkclswXTsKIAkJCQliaXQgIF49ICh0bXAgPj4gMikgXiAodG1wIDw8IDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwppbmRleCBhMjRiZTM0Li5kZDI0YWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYworKysgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwpAQCAtMTU2NCw3ICsxNTY0LDcgQEAKIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbnVtX2FkZHIgPSBkZXYtPm1jX2NvdW50OworCWludCBudW1fYWRkciA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCXVuc2lnbmVkIGxvbmcgaW50IGxvX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBpbnQgaGlfYml0czsKIApAQCAtMTU5NiwxMyArMTU5NiwxMiBAQAogCX0gZWxzZSB7CiAJCS8qIE1DIG1vZGUsIHJlY2VpdmUgbm9ybWFsIGFuZCBNQyBwYWNrZXRzICovCiAJCWNoYXIgaGFzaF9peDsKLQkJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJY2hhciAqYmFkZHI7CiAKIAkJbG9fYml0cyA9IDB4MDAwMDAwMDB1bDsKIAkJaGlfYml0cyA9IDB4MDAwMDAwMDB1bDsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9hZGRyOyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCS8qIENhbGN1bGF0ZSB0aGUgaGFzaCBpbmRleCBmb3IgdGhlIEdBIHJlZ2lzdGVycyAqLwogCiAJCQloYXNoX2l4ID0gMDsKQEAgLTE2MzIsNyArMTYzMSw2IEBACiAJCQl9IGVsc2UgewogCQkJCWxvX2JpdHMgfD0gKDEgPDwgaGFzaF9peCk7CiAJCQl9Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAJCX0KIAkJLyogRGlzYWJsZSBpbmRpdmlkdWFsIHJlY2VpdmUgKi8KIAkJU0VUUyhuZXR3b3JrX3JlY19jb25maWdfc2hhZG93LCBSX05FVFdPUktfUkVDX0NPTkZJRywgaW5kaXZpZHVhbCwgZGlzY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IDBlNzljZWYuLjE0NjI0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0xNzg1LDcgKzE3ODUsNyBAQAogCXsKIAkJbHAtPnJ4X21vZGUgPSBSWF9BTExfQUNDRVBUOwogCX0KLQllbHNlIGlmKChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSl8fGRldi0+bWNfbGlzdCkKKwllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKQogCXsKIAkJLyogVGhlIG11bHRpY2FzdC1hY2NlcHQgbGlzdCBpcyBpbml0aWFsaXplZCB0byBhY2NlcHQtYWxsLCBhbmQgd2UKIAkJICAgcmVseSBvbiBoaWdoZXItbGV2ZWwgZmlsdGVyaW5nIGZvciBub3cuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggM2U4NjE4Yi4uNGNkN2Y0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKQEAgLTI2NCw2ICsyNjQsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2ZhdWx0X2hhbmRsZXJfdGFzazsKIAorCXN0cnVjdCB3b3JrX3N0cnVjdCBkYl9mdWxsX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGRiX2VtcHR5X3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGRiX2Ryb3BfdGFzazsKKwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAogCXN0cnVjdCBtdXRleCBtZGlvX2xvY2s7CkBAIC0zMzUsNiArMzM5LDcgQEAKIGludCB0M19nZXRfZGVzYyhjb25zdCBzdHJ1Y3Qgc2dlX3FzZXQgKnFzLCB1bnNpZ25lZCBpbnQgcW51bSwgdW5zaWduZWQgaW50IGlkeCwKIAkJdW5zaWduZWQgY2hhciAqZGF0YSk7CiBpcnFyZXR1cm5fdCB0M19zZ2VfaW50cl9tc2l4KGludCBpcnEsIHZvaWQgKmNvb2tpZSk7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN4Z2IzX3dxOwogCiBpbnQgdDNfZ2V0X2VkY19mdyhzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgZWRjX2lkeCwgaW50IHNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCmluZGV4IDZmZjM1NmQ0Li5mZTA4YTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaApAQCAtNjcsMzIgKzY3LDYgQEAKIC8qIEFkZGl0aW9uYWwgTkVUSUZfTVNHXyogY2F0ZWdvcmllcyAqLwogI2RlZmluZSBORVRJRl9NU0dfTU1JTyAweDgwMDAwMDAKIAotc3RydWN0IHQzX3J4X21vZGUgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J4X21vZGUoc3RydWN0IHQzX3J4X21vZGUgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCi17Ci0JcC0+ZGV2ID0gZGV2OwotCXAtPm1jbGlzdCA9IG1jbGlzdDsKLQlwLT5pZHggPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHU4ICp0M19nZXRfbmV4dF9tY2FkZHIoc3RydWN0IHQzX3J4X21vZGUgKnJtKQotewotCXU4ICphZGRyID0gTlVMTDsKLQotCWlmIChybS0+bWNsaXN0ICYmIHJtLT5pZHggPCBybS0+ZGV2LT5tY19jb3VudCkgewotCQlhZGRyID0gcm0tPm1jbGlzdC0+ZG1pX2FkZHI7Ci0JCXJtLT5tY2xpc3QgPSBybS0+bWNsaXN0LT5uZXh0OwotCQlybS0+aWR4Kys7Ci0JfQotCXJldHVybiBhZGRyOwotfQotCiBlbnVtIHsKIAlNQVhfTlBPUlRTID0gMiwJCS8qIG1heCAjIG9mIHBvcnRzICovCiAJTUFYX0ZSQU1FX1NJWkUgPSAxMDI0MCwJLyogbWF4IE1BQyBmcmFtZSBzaXplLCBpbmNsdWRpbmcgaGVhZGVyICsgRkNTICovCkBAIC03NDYsNyArNzIwLDcgQEAKIGludCB0M19tYWNfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX2Rpc2FibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKTsKIGludCB0M19tYWNfc2V0X210dShzdHJ1Y3QgY21hYyAqbWFjLCB1bnNpZ25lZCBpbnQgbXR1KTsKLWludCB0M19tYWNfc2V0X3J4X21vZGUoc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IHQzX3J4X21vZGUgKnJtKTsKK2ludCB0M19tYWNfc2V0X3J4X21vZGUoc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgdDNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBjbWFjICptYWMsIHVuc2lnbmVkIGludCBpZHgsIHU4IGFkZHJbNl0pOwogaW50IHQzX21hY19zZXRfbnVtX3VjYXN0KHN0cnVjdCBjbWFjICptYWMsIGludCBuKTsKIGNvbnN0IHN0cnVjdCBtYWNfc3RhdHMgKnQzX21hY191cGRhdGVfc3RhdHMoc3RydWN0IGNtYWMgKm1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggODliZWM5Yy4uM2U0NTNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtODAsNyArODEsNyBAQAogI2RlZmluZSBDSF9ERVZJQ0UoZGV2aWQsIGlkeCkgXAogCXsgUENJX1ZFTkRPUl9JRF9DSEVMU0lPLCBkZXZpZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWR4IH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4Z2IzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjeGdiM19wY2lfdGJsKSA9IHsKIAlDSF9ERVZJQ0UoMHgyMCwgMCksCS8qIFBFOTAwMCAqLwogCUNIX0RFVklDRSgweDIxLCAxKSwJLyogVDMwMkUgKi8KIAlDSF9ERVZJQ0UoMHgyMiwgMiksCS8qIFQzMTBFICovCkBAIC0xNDAsNyArMTQxLDcgQEAKICAqIHdpbGwgYmxvY2sga2V2ZW50ZCBhcyBpdCBuZWVkcyB0aGUgcnRubCBsb2NrLCBhbmQgd2UnbGwgZGVhZGxvY2sgd2FpdGluZwogICogZm9yIG91ciB3b3JrIHRvIGNvbXBsZXRlLiAgR2V0IG91ciBvd24gd29yayBxdWV1ZSB0byBzb2x2ZSB0aGlzLgogICovCi1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN4Z2IzX3dxOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN4Z2IzX3dxOwogCiAvKioKICAqCWxpbmtfcmVwb3J0IC0gc2hvdyBsaW5rIHN0YXR1cyBhbmQgbGluayBzcGVlZC9kdXBsZXgKQEAgLTMyNCwxMSArMzI1LDkgQEAKIAogc3RhdGljIHZvaWQgY3hnYl9zZXRfcnhtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHQzX3J4X21vZGUgcm07CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaW5pdF9yeF9tb2RlKCZybSwgZGV2LCBkZXYtPm1jX2xpc3QpOwotCXQzX21hY19zZXRfcnhfbW9kZSgmcGktPm1hYywgJnJtKTsKKwl0M19tYWNfc2V0X3J4X21vZGUoJnBpLT5tYWMsIGRldik7CiB9CiAKIC8qKgpAQCAtMzM5LDE3ICszMzgsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgbGlua19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0M19yeF9tb2RlIHJtOwogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CiAKLQlpbml0X3J4X21vZGUoJnJtLCBkZXYsIGRldi0+bWNfbGlzdCk7CiAJdDNfbWFjX3Jlc2V0KG1hYyk7CiAJdDNfbWFjX3NldF9udW1fdWNhc3QobWFjLCBNQVhfTUFDX0lEWCk7CiAJdDNfbWFjX3NldF9tdHUobWFjLCBkZXYtPm10dSk7CiAJdDNfbWFjX3NldF9hZGRyZXNzKG1hYywgTEFOX01BQ19JRFgsIGRldi0+ZGV2X2FkZHIpOwogCXQzX21hY19zZXRfYWRkcmVzcyhtYWMsIFNBTl9NQUNfSURYLCBwaS0+aXNjc2ljLm1hY19hZGRyKTsKLQl0M19tYWNfc2V0X3J4X21vZGUobWFjLCAmcm0pOworCXQzX21hY19zZXRfcnhfbW9kZShtYWMsIGRldik7CiAJdDNfbGlua19zdGFydCgmcGktPnBoeSwgbWFjLCAmcGktPmxpbmtfY29uZmlnKTsKIAl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCB8IE1BQ19ESVJFQ1RJT05fVFgpOwogfQpAQCAtNTkwLDYgKzU4NywxOSBAQAogCQkgICAgICBWX1JSQ1BMQ1BVU0laRSg2KSB8IEZfSEFTSFRPRVBMSVRaLCBjcHVzLCByc3BxX21hcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJpbmdfZGJzKHN0cnVjdCBhZGFwdGVyICphZGFwKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IFNHRV9RU0VUUzsgaSsrKSB7CisJCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAmYWRhcC0+c2dlLnFzW2ldOworCisJCWlmIChxcy0+YWRhcCkKKwkJCWZvciAoaiA9IDA7IGogPCBTR0VfVFhRX1BFUl9TRVQ7IGorKykKKwkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIEZfU0VMRUdSQ05UWCB8IFZfRUdSQ05UWChxcy0+dHhxW2pdLmNudHh0X2lkKSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpbml0X25hcGkoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJaW50IGk7CkBAIC0yNzU0LDYgKzI3NjQsNDIgQEAKIAlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIGRiX2Z1bGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCisJCQkJCSAgICAgICBkYl9mdWxsX3Rhc2spOworCisJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX0RCX0ZVTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBkYl9lbXB0eV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKKwkJCQkJICAgICAgIGRiX2VtcHR5X3Rhc2spOworCisJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX0RCX0VNUFRZLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGJfZHJvcF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKKwkJCQkJICAgICAgIGRiX2Ryb3BfdGFzayk7CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IDEwMDA7CisJdW5zaWduZWQgc2hvcnQgcjsKKworCWN4Z2IzX2V2ZW50X25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9EQl9EUk9QLCAwKTsKKworCS8qCisJICogU2xlZXAgYSB3aGlsZSBiZWZvcmUgcmluZ2luZyB0aGUgZHJpdmVyIHFzZXQgZGJzLgorCSAqIFRoZSBkZWxheSBpcyBiZXR3ZWVuIDEwMDAtMjAyMyB1c2Vjcy4KKwkgKi8KKwlnZXRfcmFuZG9tX2J5dGVzKCZyLCAyKTsKKwlkZWxheSArPSByICYgMTAyMzsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dCh1c2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CisJcmluZ19kYnMoYWRhcHRlcik7Cit9CisKIC8qCiAgKiBQcm9jZXNzZXMgZXh0ZXJuYWwgKFBIWSkgaW50ZXJydXB0cyBpbiBwcm9jZXNzIGNvbnRleHQuCiAgKi8KQEAgLTMyMjIsNiArMzI2OCwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5hZGFwdGVyX2xpc3QpOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrLCBleHRfaW50cl90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPmZhdGFsX2Vycm9yX2hhbmRsZXJfdGFzaywgZmF0YWxfZXJyb3JfdGFzayk7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPmRiX2Z1bGxfdGFzaywgZGJfZnVsbF90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmRiX2VtcHR5X3Rhc2ssIGRiX2VtcHR5X3Rhc2spOworCUlOSVRfV09SSygmYWRhcHRlci0+ZGJfZHJvcF90YXNrLCBkYl9kcm9wX3Rhc2spOworCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFkYXB0ZXItPmFkYXBfY2hlY2tfdGFzaywgdDNfYWRhcF9jaGVja190YXNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhaS0+bnBvcnRzMCArIGFpLT5ucG9ydHMxOyArK2kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwppbmRleCA3NTA2NGVlLi45NDk4MzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCkBAIC0xMjUyLDcgKzEyNTIsNyBAQAogCXN0cnVjdCBtdHV0YWIgbXR1dGFiOwogCXVuc2lnbmVkIGludCBsMnRfY2FwYWNpdHk7CiAKLQl0ID0ga2NhbGxvYygxLCBzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKaW5kZXggNjcwYWE2Mi4uOTI5YzI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaApAQCAtNzMsNyArNzMsMTAgQEAKIAlPRkZMT0FEX1NUQVRVU19VUCwKIAlPRkZMT0FEX1NUQVRVU19ET1dOLAogCU9GRkxPQURfUE9SVF9ET1dOLAotCU9GRkxPQURfUE9SVF9VUAorCU9GRkxPQURfUE9SVF9VUCwKKwlPRkZMT0FEX0RCX0ZVTEwsCisJT0ZGTE9BRF9EQl9FTVBUWSwKKwlPRkZMT0FEX0RCX0RST1AKIH07CiAKIHN0cnVjdCBjeGdiM19jbGllbnQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCmluZGV4IDFiNTMyN2IuLmNiNDIzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9yZWdzLmgKQEAgLTI1NCw2ICsyNTQsMjIgQEAKICNkZWZpbmUgVl9MT1BJT0RSQkRST1BFUlIoeCkgKCh4KSA8PCBTX0xPUElPRFJCRFJPUEVSUikKICNkZWZpbmUgRl9MT1BJT0RSQkRST1BFUlIgICAgVl9MT1BJT0RSQkRST1BFUlIoMVUpCiAKKyNkZWZpbmUgU19ISVBSSU9SSVRZREJGVUxMICAgIDcKKyNkZWZpbmUgVl9ISVBSSU9SSVRZREJGVUxMKHgpICgoeCkgPDwgU19ISVBSSU9SSVRZREJGVUxMKQorI2RlZmluZSBGX0hJUFJJT1JJVFlEQkZVTEwgICAgVl9ISVBSSU9SSVRZREJGVUxMKDFVKQorCisjZGVmaW5lIFNfSElQUklPUklUWURCRU1QVFkgICA2CisjZGVmaW5lIFZfSElQUklPUklUWURCRU1QVFkoeCkgKCh4KSA8PCBTX0hJUFJJT1JJVFlEQkVNUFRZKQorI2RlZmluZSBGX0hJUFJJT1JJVFlEQkVNUFRZICAgIFZfSElQUklPUklUWURCRU1QVFkoMVUpCisKKyNkZWZpbmUgU19MT1BSSU9SSVRZREJGVUxMICAgIDUKKyNkZWZpbmUgVl9MT1BSSU9SSVRZREJGVUxMKHgpICgoeCkgPDwgU19MT1BSSU9SSVRZREJGVUxMKQorI2RlZmluZSBGX0xPUFJJT1JJVFlEQkZVTEwgICAgVl9MT1BSSU9SSVRZREJGVUxMKDFVKQorCisjZGVmaW5lIFNfTE9QUklPUklUWURCRU1QVFkgICA0CisjZGVmaW5lIFZfTE9QUklPUklUWURCRU1QVFkoeCkgKCh4KSA8PCBTX0xPUFJJT1JJVFlEQkVNUFRZKQorI2RlZmluZSBGX0xPUFJJT1JJVFlEQkVNUFRZICAgIFZfTE9QUklPUklUWURCRU1QVFkoMVUpCisKICNkZWZpbmUgU19SU1BRRElTQUJMRUQgICAgMwogI2RlZmluZSBWX1JTUFFESVNBQkxFRCh4KSAoKHgpIDw8IFNfUlNQUURJU0FCTEVEKQogI2RlZmluZSBGX1JTUFFESVNBQkxFRCAgICBWX1JTUFFESVNBQkxFRCgxVSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggMzE4YTAxOC4uNzhlMjY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJzZ2VfZGVmcy5oIgogI2luY2x1ZGUgInQzX2NwbC5oIgogI2luY2x1ZGUgImZpcm13YXJlX2V4cG9ydHMuaCIKKyNpbmNsdWRlICJjeGdiM19vZmZsb2FkLmgiCiAKICNkZWZpbmUgVVNFX0dUUyAwCiAKQEAgLTQ4MCw2ICs0ODEsNyBAQAogewogCWlmIChxLT5wZW5kX2NyZWQgPj0gcS0+Y3JlZGl0cyAvIDQpIHsKIAkJcS0+cGVuZF9jcmVkID0gMDsKKwkJd21iKCk7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CiAJfQogfQpAQCAtMjI4NiwxMSArMjI4OCwxNCBAQAogCXdoaWxlIChsaWtlbHkoYnVkZ2V0X2xlZnQgJiYgaXNfbmV3X3Jlc3BvbnNlKHIsIHEpKSkgewogCQlpbnQgcGFja2V0X2NvbXBsZXRlLCBldGgsIGV0aHBhZCA9IDIsIGxybyA9IHFzLT5scm9fZW5hYmxlZDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JCXUzMiBsZW4sIGZsYWdzID0gbnRvaGwoci0+ZmxhZ3MpOwotCQlfX2JlMzIgcnNzX2hpID0gKihjb25zdCBfX2JlMzIgKilyLAotCQkgICAgICAgcnNzX2xvID0gci0+cnNzX2hkci5yc3NfaGFzaF92YWw7CisJCXUzMiBsZW4sIGZsYWdzOworCQlfX2JlMzIgcnNzX2hpLCByc3NfbG87CiAKKwkJcm1iKCk7CiAJCWV0aCA9IHItPnJzc19oZHIub3Bjb2RlID09IENQTF9SWF9QS1Q7CisJCXJzc19oaSA9ICooY29uc3QgX19iZTMyICopcjsKKwkJcnNzX2xvID0gci0+cnNzX2hkci5yc3NfaGFzaF92YWw7CisJCWZsYWdzID0gbnRvaGwoci0+ZmxhZ3MpOwogCiAJCWlmICh1bmxpa2VseShmbGFncyAmIEZfUlNQRF9BU1lOQ19OT1RJRikpIHsKIAkJCXNrYiA9IGFsbG9jX3NrYihBTl9QS1RfU0laRSwgR0ZQX0FUT01JQyk7CkBAIC0yNTAxLDcgKzI1MDYsMTAgQEAKIAkJCXJlZmlsbF9yc3BxKGFkYXAsIHEsIHEtPmNyZWRpdHMpOwogCQkJcS0+Y3JlZGl0cyA9IDA7CiAJCX0KLQl9IHdoaWxlIChpc19uZXdfcmVzcG9uc2UociwgcSkgJiYgaXNfcHVyZV9yZXNwb25zZShyKSk7CisJCWlmICghaXNfbmV3X3Jlc3BvbnNlKHIsIHEpKQorCQkJYnJlYWs7CisJCXJtYigpOworCX0gd2hpbGUgKGlzX3B1cmVfcmVzcG9uc2UocikpOwogCiAJaWYgKHNsZWVwaW5nKQogCQljaGVja19yaW5nX2RiKGFkYXAsIHFzLCBzbGVlcGluZyk7CkBAIC0yNTM1LDYgKzI1NDMsNyBAQAogCiAJaWYgKCFpc19uZXdfcmVzcG9uc2UociwgcSkpCiAJCXJldHVybiAtMTsKKwlybWIoKTsKIAlpZiAoaXNfcHVyZV9yZXNwb25zZShyKSAmJiBwcm9jZXNzX3B1cmVfcmVzcG9uc2VzKGFkYXAsIHFzLCByKSA9PSAwKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0dUUywgVl9SU1BRKHEtPmNudHh0X2lkKSB8CiAJCQkgICAgIFZfTkVXVElNRVIocS0+aG9sZG9mZl90bXIpIHwgVl9ORVdJTkRFWChxLT5jaWR4KSk7CkBAIC0yODMzLDggKzI4NDIsMTMgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgKEZfSElQSU9EUkJEUk9QRVJSIHwgRl9MT1BJT0RSQkRST1BFUlIpKQotCQlDSF9BTEVSVChhZGFwdGVyLCAiU0dFIGRyb3BwZWQgJXMgcHJpb3JpdHkgZG9vcmJlbGxcbiIsCi0JCQkgc3RhdHVzICYgRl9ISVBJT0RSQkRST1BFUlIgPyAiaGlnaCIgOiAibG8iKTsKKwkJcXVldWVfd29yayhjeGdiM193cSwgJmFkYXB0ZXItPmRiX2Ryb3BfdGFzayk7CisKKwlpZiAoc3RhdHVzICYgKEZfSElQUklPUklUWURCRlVMTCB8IEZfTE9QUklPUklUWURCRlVMTCkpCisJCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5kYl9mdWxsX3Rhc2spOworCisJaWYgKHN0YXR1cyAmIChGX0hJUFJJT1JJVFlEQkVNUFRZIHwgRl9MT1BSSU9SSVRZREJFTVBUWSkpCisJCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5kYl9lbXB0eV90YXNrKTsKIAogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSwgc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgIFNHRV9GQVRBTEVSUikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IDAzMmNmZTAuLjk1YThiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtMTI2Miw3ICsxMjYyLDggQEAKIAkJbGMtPmZjID0gZmM7CiAJfQogCi0JdDNfb3NfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjKTsKKwl0M19vc19saW5rX2NoYW5nZWQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vayAmJiAhcGktPmxpbmtfZmF1bHQsCisJCQkgICBzcGVlZCwgZHVwbGV4LCBmYyk7CiB9CiAKIHZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCkBAIC0xNDMyLDcgKzE0MzMsMTAgQEAKIAkJICAgICAgIEZfSVJQQVJJVFlFUlJPUiB8IFZfSVRQQVJJVFlFUlJPUihNX0lUUEFSSVRZRVJST1IpIHwgXAogCQkgICAgICAgVl9GTFBBUklUWUVSUk9SKE1fRkxQQVJJVFlFUlJPUikgfCBGX0xPRFJCUEFSSVRZRVJST1IgfCBcCiAJCSAgICAgICBGX0hJRFJCUEFSSVRZRVJST1IgfCBGX0xPUkNRUEFSSVRZRVJST1IgfCBcCi0JCSAgICAgICBGX0hJUkNRUEFSSVRZRVJST1IpCisJCSAgICAgICBGX0hJUkNRUEFSSVRZRVJST1IgfCBGX0xPUFJJT1JJVFlEQkZVTEwgfCBcCisJCSAgICAgICBGX0hJUFJJT1JJVFlEQkZVTEwgfCBGX0xPUFJJT1JJVFlEQkVNUFRZIHwgXAorCQkgICAgICAgRl9ISVBSSU9SSVRZREJFTVBUWSB8IEZfSElQSU9EUkJEUk9QRVJSIHwgXAorCQkgICAgICAgRl9MT1BJT0RSQkRST1BFUlIpCiAjZGVmaW5lIE1DNV9JTlRSX01BU0sgKEZfUEFSSVRZRVJSIHwgRl9BQ1RSR05GVUxMIHwgRl9VTktOT1dOQ01EIHwgXAogCQkgICAgICAgRl9SRVFRUEFSRVJSIHwgRl9ESVNQUVBBUkVSUiB8IEZfREVMQUNURU1QVFkgfCBcCiAJCSAgICAgICBGX05GQVNSQ0hGQUlMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKaW5kZXggMDEwOWVlNGYuLmMxNDJhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwpAQCAtMjk3LDI5ICsyOTcsMzAgQEAKIAlyZXR1cm4gaGFzaDsKIH0KIAotaW50IHQzX21hY19zZXRfcnhfbW9kZShzdHJ1Y3QgY21hYyAqbWFjLCBzdHJ1Y3QgdDNfcnhfbW9kZSAqcm0pCitpbnQgdDNfbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdTMyIHZhbCwgaGFzaF9sbywgaGFzaF9oaTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG1hYy0+YWRhcHRlcjsKIAl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQ7CiAKIAl2YWwgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBvZnQpICYgfkZfQ09QWUFMTEZSQU1FUzsKLQlpZiAocm0tPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQl2YWwgfD0gRl9DT1BZQUxMRlJBTUVTOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBvZnQsIHZhbCk7CiAKLQlpZiAocm0tPmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCWhhc2hfbG8gPSBoYXNoX2hpID0gMHhmZmZmZmZmZjsKIAllbHNlIHsKLQkJdTggKmFkZHI7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQlpbnQgZXhhY3RfYWRkcl9pZHggPSBtYWMtPm51Y2FzdDsKIAogCQloYXNoX2xvID0gaGFzaF9oaSA9IDA7Ci0JCXdoaWxlICgoYWRkciA9IHQzX2dldF9uZXh0X21jYWRkcihybSkpKQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAkJCWlmIChleGFjdF9hZGRyX2lkeCA8IEVYQUNUX0FERFJfRklMVEVSUykKLQkJCQlzZXRfYWRkcl9maWx0ZXIobWFjLCBleGFjdF9hZGRyX2lkeCsrLCBhZGRyKTsKKwkJCQlzZXRfYWRkcl9maWx0ZXIobWFjLCBleGFjdF9hZGRyX2lkeCsrLAorCQkJCQkJZG1pLT5kbWlfYWRkcik7CiAJCQllbHNlIHsKLQkJCQlpbnQgaGFzaCA9IGhhc2hfaHdfYWRkcihhZGRyKTsKKwkJCQlpbnQgaGFzaCA9IGhhc2hfaHdfYWRkcihkbWktPmRtaV9hZGRyKTsKIAogCQkJCWlmIChoYXNoIDwgMzIpCiAJCQkJCWhhc2hfbG8gfD0gKDEgPDwgaGFzaCk7CkBAIC0zNTMsNiArMzU0LDkgQEAKIAkgKiBwYWNrZXQgc2l6ZSByZWdpc3RlciBpbmNsdWRlcyBoZWFkZXIsIGJ1dCBub3QgRkNTLgogCSAqLwogCW10dSArPSAxNDsKKwlpZiAobXR1ID4gMTUzNikKKwkJbXR1ICs9IDQ7CisKIAlpZiAobXR1ID4gTUFYX0ZSQU1FX1NJWkUgLSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfTUFYX1BLVF9TSVpFICsgbWFjLT5vZmZzZXQsIG10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDMzYzRmZTIuLjFhYzk0NDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtNjIsMTIgKzYyLDExIEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGF2aW5jaV9lbWFjLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2luY2x1ZGUgPG1hY2gvZW1hYy5oPgotCiBzdGF0aWMgaW50IGRlYnVnX2xldmVsOwogbW9kdWxlX3BhcmFtKGRlYnVnX2xldmVsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkRhVmluY2kgRU1BQyBkZWJ1ZyBsZXZlbCAoTkVUSUZfTVNHIGJpdHMpIik7CkBAIC00NjUsNiArNDY0LDcgQEAKIAl2b2lkIF9faW9tZW0gKmN0cmxfYmFzZTsKIAl2b2lkIF9faW9tZW0gKmVtYWNfY3RybF9yYW07CiAJdTMyIGN0cmxfcmFtX3NpemU7CisJdTMyIGh3X3JhbV9hZGRyOwogCXN0cnVjdCBlbWFjX3R4Y2ggKnR4Y2hbRU1BQ19ERUZfTUFYX1RYX0NIXTsKIAlzdHJ1Y3QgZW1hY19yeGNoICpyeGNoW0VNQUNfREVGX01BWF9SWF9DSF07CiAJdTMyIGxpbms7IC8qIDE9bGluayBvbiwgMD1saW5rIG9mZiAqLwpAQCAtNDg4LDYgKzQ4OCw5IEBACiAJc3RydWN0IG1paV9idXMgKm1paV9idXM7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzcGlubG9ja190IGxvY2s7CisJLypwbGF0Zm9ybSBzcGVjaWZpYyBtZW1iZXJzKi8KKwl2b2lkICgqaW50X2VuYWJsZSkgKHZvaWQpOworCXZvaWQgKCppbnRfZGlzYWJsZSkgKHZvaWQpOwogfTsKIAogLyogY2xvY2sgZnJlcXVlbmN5IGZvciBFTUFDICovCkBAIC00OTUsMTEgKzQ5OCw5IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbWFjX2J1c19mcmVxdWVuY3k7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtZGlvX21heF9mcmVxOwogCi0vKiBFTUFDIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGVtYWNfdmlydF90b19waHlzKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gKHUzMiBfX2ZvcmNlKSBpb192MnAoYWRkcik7Ci19CisjZGVmaW5lIGVtYWNfdmlydF90b19waHlzKGFkZHIsIHByaXYpIFwKKwkoKCh1MzIgX19mb3JjZSkoYWRkcikgLSAodTMyIF9fZm9yY2UpKHByaXYtPmVtYWNfY3RybF9yYW0pKSBcCisJKyBwcml2LT5od19yYW1fYWRkcikKIAogLyogQ2FjaGUgbWFjcm9zIC0gUGFja2V0IGJ1ZmZlcnMgd291bGQgYmUgZnJvbSBza2IgcG9vbCB3aGljaCBpcyBjYWNoZWQgKi8KICNkZWZpbmUgRU1BQ19WSVJUX05PQ0FDSEUoYWRkcikgKGFkZHIpCkBAIC05NTYsMTkgKzk1NywxOCBAQAogCX0gZWxzZSB7CiAJCW1icF9lbmFibGUgPSAobWJwX2VuYWJsZSAmIH5FTUFDX01CUF9SWFBST01JU0MpOwogCQlpZiAoKG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkgICAgKG5kZXYtPm1jX2NvdW50ID4gRU1BQ19ERUZfTUFYX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CisJCSAgICBuZXRkZXZfbWNfY291bnQobmRldikgPiBFTUFDX0RFRl9NQVhfTVVMVElDQVNUX0FERFJFU1NFUykgewogCQkJbWJwX2VuYWJsZSA9IChtYnBfZW5hYmxlIHwgRU1BQ19NQlBfUlhNQ0FTVCk7CiAJCQllbWFjX2FkZF9tY2FzdChwcml2LCBFTUFDX0FMTF9NVUxUSV9TRVQsIE5VTEwpOwogCQl9Ci0JCWlmIChuZGV2LT5tY19jb3VudCA+IDApIHsKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmRldikpIHsKIAkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwogCQkJbWJwX2VuYWJsZSA9IChtYnBfZW5hYmxlIHwgRU1BQ19NQlBfUlhNQ0FTVCk7CiAJCQllbWFjX2FkZF9tY2FzdChwcml2LCBFTUFDX0FMTF9NVUxUSV9DTFIsIE5VTEwpOwogCQkJLyogcHJvZ3JhbSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0IGludG8gRU1BQyBoYXJkd2FyZSAqLwotCQkJZm9yIChtY19wdHIgPSBuZGV2LT5tY19saXN0OyBtY19wdHI7Ci0JCQkgICAgIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZGV2KSB7CiAJCQkJZW1hY19hZGRfbWNhc3QocHJpdiwgRU1BQ19NVUxUSUNBU1RfQURELAotCQkJCQkgICAgICAgKHU4ICopbWNfcHRyLT5kbWlfYWRkcik7CisJCQkJCSAgICAgICAodTggKikgbWNfcHRyLT5kbWlfYWRkcik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQltYnBfZW5hYmxlID0gKG1icF9lbmFibGUgJiB+RU1BQ19NQlBfUlhNQ0FTVCk7CkBAIC0xMDAyLDYgKzEwMDIsOCBAQAogCQllbWFjX2N0cmxfd3JpdGUoRU1BQ19ETTY0NlhfQ01SWElOVEVOLCAweDApOwogCQllbWFjX2N0cmxfd3JpdGUoRU1BQ19ETTY0NlhfQ01UWElOVEVOLCAweDApOwogCQkvKiBOT1RFOiBSeCBUaHJlc2hvbGQgYW5kIE1pc2MgaW50ZXJydXB0cyBhcmUgbm90IGRpc2FibGVkICovCisJCWlmIChwcml2LT5pbnRfZGlzYWJsZSkKKwkJCXByaXYtPmludF9kaXNhYmxlKCk7CiAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0xMDIxLDYgKzEwMjMsOSBAQAogc3RhdGljIHZvaWQgZW1hY19pbnRfZW5hYmxlKHN0cnVjdCBlbWFjX3ByaXYgKnByaXYpCiB7CiAJaWYgKHByaXYtPnZlcnNpb24gPT0gRU1BQ19WRVJTSU9OXzIpIHsKKwkJaWYgKHByaXYtPmludF9lbmFibGUpCisJCQlwcml2LT5pbnRfZW5hYmxlKCk7CisKIAkJZW1hY19jdHJsX3dyaXRlKEVNQUNfRE02NDZYX0NNUlhJTlRFTiwgMHhmZik7CiAJCWVtYWNfY3RybF93cml0ZShFTUFDX0RNNjQ2WF9DTVRYSU5URU4sIDB4ZmYpOwogCkBAIC0xMzAyLDcgKzEzMDcsNyBAQAogCWN1cnJfYmQgPSB0eGNoLT5hY3RpdmVfcXVldWVfaGVhZDsKIAlpZiAoTlVMTCA9PSBjdXJyX2JkKSB7CiAJCWVtYWNfd3JpdGUoRU1BQ19UWENQKGNoKSwKLQkJCSAgIGVtYWNfdmlydF90b19waHlzKHR4Y2gtPmxhc3RfaHdfYmRwcm9jZXNzZWQpKTsKKwkJCSAgIGVtYWNfdmlydF90b19waHlzKHR4Y2gtPmxhc3RfaHdfYmRwcm9jZXNzZWQsIHByaXYpKTsKIAkJdHhjaC0+bm9fYWN0aXZlX3BrdHMrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKQEAgLTEzMTIsNyArMTMxNyw3IEBACiAJd2hpbGUgKChjdXJyX2JkKSAmJgogCSAgICAgICgoZnJhbWVfc3RhdHVzICYgRU1BQ19DUFBJX09XTkVSU0hJUF9CSVQpID09IDApICYmCiAJICAgICAgKHBrdHNfcHJvY2Vzc2VkIDwgYnVkZ2V0KSkgewotCQllbWFjX3dyaXRlKEVNQUNfVFhDUChjaCksIGVtYWNfdmlydF90b19waHlzKGN1cnJfYmQpKTsKKwkJZW1hY193cml0ZShFTUFDX1RYQ1AoY2gpLCBlbWFjX3ZpcnRfdG9fcGh5cyhjdXJyX2JkLCBwcml2KSk7CiAJCXR4Y2gtPmFjdGl2ZV9xdWV1ZV9oZWFkID0gY3Vycl9iZC0+bmV4dDsKIAkJaWYgKGZyYW1lX3N0YXR1cyAmIEVNQUNfQ1BQSV9FT1FfQklUKSB7CiAJCQlpZiAoY3Vycl9iZC0+bmV4dCkgewkvKiBtaXNxdWV1ZWQgcGFja2V0ICovCkBAIC0xMzk5LDcgKzE0MDQsNyBAQAogCQl0eGNoLT5hY3RpdmVfcXVldWVfdGFpbCA9IGN1cnJfYmQ7CiAJCWlmICgxICE9IHR4Y2gtPnF1ZXVlX2FjdGl2ZSkgewogCQkJZW1hY193cml0ZShFTUFDX1RYSERQKGNoKSwKLQkJCQkJZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCkpOworCQkJCQllbWFjX3ZpcnRfdG9fcGh5cyhjdXJyX2JkLCBwcml2KSk7CiAJCQl0eGNoLT5xdWV1ZV9hY3RpdmUgPSAxOwogCQl9CiAJCSsrdHhjaC0+cXVldWVfcmVpbml0OwpAQCAtMTQxMSwxMCArMTQxNiwxMSBAQAogCQl0YWlsX2JkLT5uZXh0ID0gY3Vycl9iZDsKIAkJdHhjaC0+YWN0aXZlX3F1ZXVlX3RhaWwgPSBjdXJyX2JkOwogCQl0YWlsX2JkID0gRU1BQ19WSVJUX05PQ0FDSEUodGFpbF9iZCk7Ci0JCXRhaWxfYmQtPmhfbmV4dCA9IChpbnQpZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCk7CisJCXRhaWxfYmQtPmhfbmV4dCA9IChpbnQpZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCwgcHJpdik7CiAJCWZyYW1lX3N0YXR1cyA9IHRhaWxfYmQtPm1vZGU7CiAJCWlmIChmcmFtZV9zdGF0dXMgJiBFTUFDX0NQUElfRU9RX0JJVCkgewotCQkJZW1hY193cml0ZShFTUFDX1RYSERQKGNoKSwgZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCkpOworCQkJZW1hY193cml0ZShFTUFDX1RYSERQKGNoKSwKKwkJCQllbWFjX3ZpcnRfdG9fcGh5cyhjdXJyX2JkLCBwcml2KSk7CiAJCQlmcmFtZV9zdGF0dXMgJj0gfihFTUFDX0NQUElfRU9RX0JJVCk7CiAJCQl0YWlsX2JkLT5tb2RlID0gZnJhbWVfc3RhdHVzOwogCQkJKyt0eGNoLT5lbmRfb2ZfcXVldWVfYWRkOwpAQCAtMTYwNCw3ICsxNjEwLDggQEAKIAkJfQogCiAJCS8qIHBvcHVsYXRlIHRoZSBoYXJkd2FyZSBkZXNjcmlwdG9yICovCi0JCWN1cnJfYmQtPmhfbmV4dCA9IGVtYWNfdmlydF90b19waHlzKHJ4Y2gtPmFjdGl2ZV9xdWV1ZV9oZWFkKTsKKwkJY3Vycl9iZC0+aF9uZXh0ID0gZW1hY192aXJ0X3RvX3BoeXMocnhjaC0+YWN0aXZlX3F1ZXVlX2hlYWQsCisJCQkJcHJpdik7CiAJCS8qIEZJWE1FIGJ1ZmZfcHRyID0gZG1hX21hcF9zaW5nbGUoLi4uIGRhdGFfcHRyIC4uLikgKi8KIAkJY3Vycl9iZC0+YnVmZl9wdHIgPSB2aXJ0X3RvX3BoeXMoY3Vycl9iZC0+ZGF0YV9wdHIpOwogCQljdXJyX2JkLT5vZmZfYl9sZW4gPSByeGNoLT5idWZfc2l6ZTsKQEAgLTE4NzksNyArMTg4Niw3IEBACiAJCXJ4Y2gtPmFjdGl2ZV9xdWV1ZV90YWlsID0gY3Vycl9iZDsKIAkJaWYgKDAgIT0gcnhjaC0+cXVldWVfYWN0aXZlKSB7CiAJCQllbWFjX3dyaXRlKEVNQUNfUlhIRFAoY2gpLAotCQkJCSAgIGVtYWNfdmlydF90b19waHlzKHJ4Y2gtPmFjdGl2ZV9xdWV1ZV9oZWFkKSk7CisJCQkgICBlbWFjX3ZpcnRfdG9fcGh5cyhyeGNoLT5hY3RpdmVfcXVldWVfaGVhZCwgcHJpdikpOwogCQkJcnhjaC0+cXVldWVfYWN0aXZlID0gMTsKIAkJfQogCX0gZWxzZSB7CkBAIC0xODkwLDExICsxODk3LDExIEBACiAJCXJ4Y2gtPmFjdGl2ZV9xdWV1ZV90YWlsID0gY3Vycl9iZDsKIAkJdGFpbF9iZC0+bmV4dCA9IGN1cnJfYmQ7CiAJCXRhaWxfYmQgPSBFTUFDX1ZJUlRfTk9DQUNIRSh0YWlsX2JkKTsKLQkJdGFpbF9iZC0+aF9uZXh0ID0gZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCk7CisJCXRhaWxfYmQtPmhfbmV4dCA9IGVtYWNfdmlydF90b19waHlzKGN1cnJfYmQsIHByaXYpOwogCQlmcmFtZV9zdGF0dXMgPSB0YWlsX2JkLT5tb2RlOwogCQlpZiAoZnJhbWVfc3RhdHVzICYgRU1BQ19DUFBJX0VPUV9CSVQpIHsKIAkJCWVtYWNfd3JpdGUoRU1BQ19SWEhEUChjaCksCi0JCQkJCWVtYWNfdmlydF90b19waHlzKGN1cnJfYmQpKTsKKwkJCQkJZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCwgcHJpdikpOwogCQkJZnJhbWVfc3RhdHVzICY9IH4oRU1BQ19DUFBJX0VPUV9CSVQpOwogCQkJdGFpbF9iZC0+bW9kZSA9IGZyYW1lX3N0YXR1czsKIAkJCSsrcnhjaC0+ZW5kX29mX3F1ZXVlX2FkZDsKQEAgLTE5ODcsNyArMTk5NCw3IEBACiAJCWN1cnJfcGt0LT5udW1fYnVmcyA9IDE7CiAJCWN1cnJfcGt0LT5wa3RfbGVuZ3RoID0KIAkJCShmcmFtZV9zdGF0dXMgJiBFTUFDX1JYX0JEX1BLVF9MRU5HVEhfTUFTSyk7Ci0JCWVtYWNfd3JpdGUoRU1BQ19SWENQKGNoKSwgZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCkpOworCQllbWFjX3dyaXRlKEVNQUNfUlhDUChjaCksIGVtYWNfdmlydF90b19waHlzKGN1cnJfYmQsIHByaXYpKTsKIAkJKytyeGNoLT5wcm9jZXNzZWRfYmQ7CiAJCWxhc3RfYmQgPSBjdXJyX2JkOwogCQljdXJyX2JkID0gbGFzdF9iZC0+bmV4dDsKQEAgLTE5OTgsNyArMjAwNSw3IEBACiAJCQlpZiAoY3Vycl9iZCkgewogCQkJCSsrcnhjaC0+bWlzX3F1ZXVlZF9wYWNrZXRzOwogCQkJCWVtYWNfd3JpdGUoRU1BQ19SWEhEUChjaCksCi0JCQkJCSAgIGVtYWNfdmlydF90b19waHlzKGN1cnJfYmQpKTsKKwkJCQkJICAgZW1hY192aXJ0X3RvX3BoeXMoY3Vycl9iZCwgcHJpdikpOwogCQkJfSBlbHNlIHsKIAkJCQkrK3J4Y2gtPmVuZF9vZl9xdWV1ZTsKIAkJCQlyeGNoLT5xdWV1ZV9hY3RpdmUgPSAwOwpAQCAtMjA5OSw3ICsyMTA2LDcgQEAKIAkJZW1hY193cml0ZShFTUFDX1JYSU5UTUFTS1NFVCwgQklUKGNoKSk7CiAJCXJ4Y2gtPnF1ZXVlX2FjdGl2ZSA9IDE7CiAJCWVtYWNfd3JpdGUoRU1BQ19SWEhEUChjaCksCi0JCQkgICBlbWFjX3ZpcnRfdG9fcGh5cyhyeGNoLT5hY3RpdmVfcXVldWVfaGVhZCkpOworCQkJICAgZW1hY192aXJ0X3RvX3BoeXMocnhjaC0+YWN0aXZlX3F1ZXVlX2hlYWQsIHByaXYpKTsKIAl9CiAKIAkvKiBFbmFibGUgTUlJICovCkBAIC0yNjYwLDYgKzI2NjcsOSBAQAogCXByaXYtPnBoeV9tYXNrID0gcGRhdGEtPnBoeV9tYXNrOwogCXByaXYtPnJtaWlfZW4gPSBwZGF0YS0+cm1paV9lbjsKIAlwcml2LT52ZXJzaW9uID0gcGRhdGEtPnZlcnNpb247CisJcHJpdi0+aW50X2VuYWJsZSA9IHBkYXRhLT5pbnRlcnJ1cHRfZW5hYmxlOworCXByaXYtPmludF9kaXNhYmxlID0gcGRhdGEtPmludGVycnVwdF9kaXNhYmxlOworCiAJZW1hY19kZXYgPSAmbmRldi0+ZGV2OwogCS8qIEdldCBFTUFDIHBsYXRmb3JtIGRhdGEgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMjY3Miw4ICsyNjgyLDcgQEAKIAlwcml2LT5lbWFjX2Jhc2VfcGh5cyA9IHJlcy0+c3RhcnQgKyBwZGF0YS0+Y3RybF9yZWdfb2Zmc2V0OwogCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIG5kZXYtPm5hbWUpKSB7Ci0JCWRldl9lcnIoZW1hY19kZXYsICJEYVZpbmNpIEVNQUM6IGZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24oKSBcCi0JCQkJCSBmb3IgcmVnc1xuIik7CisJCWRldl9lcnIoZW1hY19kZXYsICJEYVZpbmNpIEVNQUM6IGZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgcmVnc1xuIik7CiAJCXJjID0gLUVOWElPOwogCQlnb3RvIHByb2JlX3F1aXQ7CiAJfQpAQCAtMjY5Miw2ICsyNzAxLDEyIEBACiAJcHJpdi0+Y3RybF9yYW1fc2l6ZSA9IHBkYXRhLT5jdHJsX3JhbV9zaXplOwogCXByaXYtPmVtYWNfY3RybF9yYW0gPSBwcml2LT5yZW1hcF9hZGRyICsgcGRhdGEtPmN0cmxfcmFtX29mZnNldDsKIAorCWlmIChwZGF0YS0+aHdfcmFtX2FkZHIpCisJCXByaXYtPmh3X3JhbV9hZGRyID0gcGRhdGEtPmh3X3JhbV9hZGRyOworCWVsc2UKKwkJcHJpdi0+aHdfcmFtX2FkZHIgPSAodTMyIF9fZm9yY2UpcmVzLT5zdGFydCArCisJCQkJCXBkYXRhLT5jdHJsX3JhbV9vZmZzZXQ7CisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoZW1hY19kZXYsICJEYVZpbmNpIEVNQUM6IEVycm9yIGdldHRpbmcgaXJxIHJlc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZTYyMC5jIGIvZHJpdmVycy9uZXQvZGU2MjAuYwppbmRleCA0NTc5NGY2Li5hMGE2ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZTYyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlNjIwLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCiBzdGF0aWMgdm9pZCBkZTYyMF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2LT5tY19jb3VudCB8fCBkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKQorCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgZGV2LT5mbGFncyYoSUZGX0FMTE1VTFRJfElGRl9QUk9NSVNDKSkKIAl7IC8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCWRlNjIwX3NldF9yZWdpc3RlcihkZXYsIFdfVENSLCAoVENSX0RFRiAmIH5SWFBCTSkgfCBSWEFMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggYmU5NTkwMi4uOGNmM2NjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC05NDAsOSArOTQwLDggQEAKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHUxNiAqaWIgPSAodm9sYXRpbGUgdTE2ICopZGV2LT5tZW1fc3RhcnQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJY2hhciAqYWRkcnM7Ci0JaW50IGk7CiAJdTMyIGNyYzsKIAogCS8qIHNldCBhbGwgbXVsdGljYXN0IGJpdHMgKi8KQEAgLTk2MCw5ICs5NTksOCBAQAogCSpsaWJfcHRyKGliLCBmaWx0ZXJbM10sIGxwLT50eXBlKSA9IDA7CiAKIAkvKiBBZGQgYWRkcmVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlZnh4LmMgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCmluZGV4IDZhNmVhMDMuLmVkNTNhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguYwpAQCAtMTA1MiwxMiArMTA1Miw5IEBACiAJCWJvYXJkX25hbWUgPSAiREVGRUEiOwogCWlmIChkZnhfYnVzX3BjaSkKIAkJYm9hcmRfbmFtZSA9ICJERUZQQSI7Ci0JcHJfaW5mbygiJXM6ICVzIGF0ICVzYWRkciA9IDB4JWxseCwgSVJRID0gJWQsICIKLQkJIkhhcmR3YXJlIGFkZHIgPSAlMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWFxuIiwKKwlwcl9pbmZvKCIlczogJXMgYXQgJXNhZGRyID0gMHglbGx4LCBJUlEgPSAlZCwgSGFyZHdhcmUgYWRkciA9ICVwTUZcbiIsCiAJCXByaW50X25hbWUsIGJvYXJkX25hbWUsIGRmeF91c2VfbW1pbyA/ICIiIDogIkkvTyAiLAotCQkobG9uZyBsb25nKWJhcl9zdGFydCwgZGV2LT5pcnEsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCQkobG9uZyBsb25nKWJhcl9zdGFydCwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCiAJLyoKIAkgKiBHZXQgbWVtb3J5IGZvciBkZXNjcmlwdG9yIGJsb2NrLCBjb25zdW1lciBibG9jaywgYW5kIG90aGVyIGJ1ZmZlcnMKQEAgLTIyMzAsNyArMjIyNyw3IEBACiAJCSAqCQkgcGVyZmVjdCBmaWx0ZXJpbmcgd2lsbCBiZSB1c2VkLgogCQkgKi8KIAotCQlpZiAoZGV2LT5tY19jb3VudCA+IChQSV9DTURfQUREUl9GSUxURVJfS19TSVpFIC0gYnAtPnVjX2NvdW50KSkKKwkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gKFBJX0NNRF9BRERSX0ZJTFRFUl9LX1NJWkUgLSBicC0+dWNfY291bnQpKQogCQkJewogCQkJYnAtPmdyb3VwX3Byb20JPSBQSV9GU1RBVEVfS19QQVNTOwkJLyogRW5hYmxlIExMQyBncm91cCBwcm9tIG1vZGUgKi8KIAkJCWJwLT5tY19jb3VudAk9IDA7CQkJCQkvKiBEb24ndCBhZGQgbWMgYWRkcnMgdG8gQ0FNICovCkBAIC0yMjM4LDE3ICsyMjM1LDE2IEBACiAJCWVsc2UKIAkJCXsKIAkJCWJwLT5ncm91cF9wcm9tCT0gUElfRlNUQVRFX0tfQkxPQ0s7CS8qIERpc2FibGUgTExDIGdyb3VwIHByb20gbW9kZSAqLwotCQkJYnAtPm1jX2NvdW50CT0gZGV2LT5tY19jb3VudDsJCS8qIEFkZCBtYyBhZGRycyB0byBDQU0gKi8KKwkJCWJwLT5tY19jb3VudAk9IG5ldGRldl9tY19jb3VudChkZXYpOwkJLyogQWRkIG1jIGFkZHJzIHRvIENBTSAqLwogCQkJfQogCiAJCS8qIENvcHkgYWRkcmVzc2VzIHRvIG11bHRpY2FzdCBhZGRyZXNzIHRhYmxlLCB0aGVuIHVwZGF0ZSBhZGFwdGVyIENBTSAqLwogCi0JCWRtaSA9IGRldi0+bWNfbGlzdDsJCQkJLyogcG9pbnQgdG8gZmlyc3QgbXVsdGljYXN0IGFkZHIgKi8KLQkJZm9yIChpPTA7IGkgPCBicC0+bWNfY291bnQ7IGkrKykKLQkJCXsKLQkJCW1lbWNweSgmYnAtPm1jX3RhYmxlW2kqRkRESV9LX0FMRU5dLCBkbWktPmRtaV9hZGRyLCBGRERJX0tfQUxFTik7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CQkJLyogcG9pbnQgdG8gbmV4dCBtdWx0aWNhc3QgYWRkciAqLwotCQkJfQorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCisJCQltZW1jcHkoJmJwLT5tY190YWJsZVtpKysgKiBGRERJX0tfQUxFTl0sCisJCQkgICAgICAgZG1pLT5kbWlfYWRkciwgRkRESV9LX0FMRU4pOworCiAJCWlmIChkZnhfY3RsX3VwZGF0ZV9jYW0oYnApICE9IERGWF9LX1NVQ0NFU1MpCiAJCQl7CiAJCQlEQkdfcHJpbnRrKCIlczogQ291bGQgbm90IHVwZGF0ZSBtdWx0aWNhc3QgYWRkcmVzcyB0YWJsZSFcbiIsIGRldi0+bmFtZSk7CkBAIC0zNjMxLDcgKzM2MjcsNyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwogc3RhdGljIHZvaWQgX19kZXZleGl0IGRmeF9wY2lfdW5yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRmeF9wY2lfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkZnhfcGNpX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDX0ZEREkpIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggMGMxZjQ5MS4uNzQ0YzE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0xMjcyLDcgKzEyNzIsNyBAQAogc3RhdGljIHZvaWQgU2V0TXVsdGljYXN0RmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKIAlpbnQgaSwgaiwgYml0LCBieXRlOwogCXUxNiBoYXNoY29kZTsKQEAgLTEyODcsOSArMTI4Nyw4IEBACiAJCQlscC0+aW5pdF9ibG9jay5tY2FzdF90YWJsZVtpXSA9IDA7CiAJCX0KIAkJLyogQWRkIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgewkvKiBmb3IgZWFjaCBhZGRyZXNzIGluIHRoZSBsaXN0ICovCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAJCQlpZiAoKCphZGRycyAmIDB4MDEpID09IDEpIHsJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAJCQkJY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBhZGRycyk7CiAJCQkJaGFzaGNvZGUgPSAoY3JjICYgMSk7CS8qIGhhc2hjb2RlIGlzIDYgTFNiIG9mIENSQyAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCAyYThiNmE3Li5iMDViYWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0xMTI4LDE5ICsxMTI4LDE2IEBACiAJCS8qIFJlY2VpdmUgYWxsIGZyYW1lcyBwcm9taXNjdW91c2x5LiAqLwogCQlyeF9tb2RlID0gUmVjZWl2ZUFsbEZyYW1lczsKIAl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkJKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSkgeworCQkJKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkpIHsKIAkJLyogUmVjZWl2ZSBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmcmFtZXMgKi8KIAkJcnhfbW9kZSA9IFJlY2VpdmVCcm9hZGNhc3QgfCBSZWNlaXZlTXVsdGljYXN0IHwgUmVjZWl2ZVVuaWNhc3Q7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlpbnQgaTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJLyogUmVjZWl2ZSBicm9hZGNhc3QgZnJhbWVzIGFuZCBtdWx0aWNhc3QgZnJhbWVzIGZpbHRlcmluZwogCQkgICBieSBIYXNodGFibGUgKi8KIAkJcnhfbW9kZSA9CiAJCSAgICBSZWNlaXZlQnJvYWRjYXN0IHwgUmVjZWl2ZU11bHRpY2FzdEhhc2ggfCBSZWNlaXZlVW5pY2FzdDsKLQkJZm9yIChpPTAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJCWkrKywgbWNsaXN0PW1jbGlzdC0+bmV4dCkKLQkJeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJaW50IGJpdCwgaW5kZXggPSAwOwogCQkJaW50IGNyYyA9IGV0aGVyX2NyY19sZSAoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpOwogCQkJLyogVGhlIGludmVydGVkIGhpZ2ggc2lnbmlmaWNhbnQgNiBiaXRzIG9mIENSQyBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuaCBiL2RyaXZlcnMvbmV0L2RsMmsuaAppbmRleCAyNjZlYzg3Li43Y2FhYjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmgKKysrIGIvZHJpdmVycy9uZXQvZGwyay5oCkBAIC01MzcsNyArNTM3LDcgQEAKICAgICAgICAgZHJpdmVyX2RhdGEgICAgICAgICAgICAgRGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIuCiAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcmlvX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShyaW9fcGNpX3RibCkgPSB7CiAJezB4MTE4NiwgMHg0MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsweDEzZjAsIDB4MTAyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggYjM3NzMwMC4uMWM2N2YxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTcyNCw4ICs3MjQsNyBAQAogZG05MDAwX2hhc2hfdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlib2FyZF9pbmZvX3QgKmRiID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jcHRyID0gZGV2LT5tY19saXN0OwotCWludCBtY19jbnQgPSBkZXYtPm1jX2NvdW50OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHI7CiAJaW50IGksIG9mdDsKIAl1MzIgaGFzaF92YWw7CiAJdTE2IGhhc2hfdGFibGVbNF07CkBAIC03NTMsNyArNzUyLDcgQEAKIAkJcmNyIHw9IFJDUl9BTEw7CiAKIAkvKiB0aGUgbXVsdGljYXN0IGFkZHJlc3MgaW4gSGFzaCBUYWJsZSA6IDY0IGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWNfY250OyBpKyssIG1jcHRyID0gbWNwdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY3B0ciwgZGV2KSB7CiAJCWhhc2hfdmFsID0gZXRoZXJfY3JjX2xlKDYsIG1jcHRyLT5kbWlfYWRkcikgJiAweDNmOwogCQloYXNoX3RhYmxlW2hhc2hfdmFsIC8gMTZdIHw9ICh1MTYpIDEgPDwgKGhhc2hfdmFsICUgMTYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA4MzlmYjJiLi5hMjZjY2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKICNkZWZpbmUgSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKGRldmljZV9pZCwgaWNoKSB7XAogCVBDSV9WRU5ET1JfSURfSU5URUwsIGRldmljZV9pZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgXAogCVBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIDB4RkZGRjAwLCBpY2ggfQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGUxMDBfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlMTAwX2lkX3RhYmxlKSA9IHsKIAlJTlRFTF84MjU1WF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDI5LCAwKSwKIAlJTlRFTF84MjU1WF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDMwLCAwKSwKIAlJTlRFTF84MjU1WF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDMxLCAzKSwKQEAgLTE1MzcsMTQgKzE1MzcsMTggQEAKIHN0YXRpYyB2b2lkIGUxMDBfbXVsdGkoc3RydWN0IG5pYyAqbmljLCBzdHJ1Y3QgY2IgKmNiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuaWMtPm5ldGRldjsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7Ci0JdTE2IGksIGNvdW50ID0gbWluKG5ldGRldi0+bWNfY291bnQsIEUxMDBfTUFYX01VTFRJQ0FTVF9BRERSUyk7CisJc3RydWN0IGRldl9tY19saXN0ICpsaXN0OworCXUxNiBpLCBjb3VudCA9IG1pbihuZXRkZXZfbWNfY291bnQobmV0ZGV2KSwgRTEwMF9NQVhfTVVMVElDQVNUX0FERFJTKTsKIAogCWNiLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY2JfbXVsdGkpOwogCWNiLT51Lm11bHRpLmNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQgKiBFVEhfQUxFTik7Ci0JZm9yIChpID0gMDsgbGlzdCAmJiBpIDwgY291bnQ7IGkrKywgbGlzdCA9IGxpc3QtPm5leHQpCi0JCW1lbWNweSgmY2ItPnUubXVsdGkuYWRkcltpKkVUSF9BTEVOXSwgJmxpc3QtPmRtaV9hZGRyLAorCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIG5ldGRldikgeworCQlpZiAoaSA9PSBjb3VudCkKKwkJCWJyZWFrOworCQltZW1jcHkoJmNiLT51Lm11bHRpLmFkZHJbaSsrICogRVRIX0FMRU5dLCAmbGlzdC0+ZG1pX2FkZHIsCiAJCQlFVEhfQUxFTik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBlMTAwX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMTU1Miw3ICsxNTU2LDcgQEAKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJRFBSSU5USyhIVywgREVCVUcsICJtY19jb3VudD0lZCwgZmxhZ3M9MHglMDRYXG4iLAotCQluZXRkZXYtPm1jX2NvdW50LCBuZXRkZXYtPmZsYWdzKTsKKwkJbmV0ZGV2X21jX2NvdW50KG5ldGRldiksIG5ldGRldi0+ZmxhZ3MpOwogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJbmljLT5mbGFncyB8PSBwcm9taXNjdW91czsKQEAgLTE1NjAsNyArMTU2NCw3IEBACiAJCW5pYy0+ZmxhZ3MgJj0gfnByb21pc2N1b3VzOwogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKLQkJbmV0ZGV2LT5tY19jb3VudCA+IEUxMDBfTUFYX01VTFRJQ0FTVF9BRERSUykKKwkJbmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBFMTAwX01BWF9NVUxUSUNBU1RfQUREUlMpCiAJCW5pYy0+ZmxhZ3MgfD0gbXVsdGljYXN0X2FsbDsKIAllbHNlCiAJCW5pYy0+ZmxhZ3MgJj0gfm11bHRpY2FzdF9hbGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCBlODkzMmRiLi45OTAyYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTM0OSw2ICszNDksNyBAQAogZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGJvb2wgZTEwMDBfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfcG93ZXJfdXBfcGh5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgZTEwMDBfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogZXh0ZXJuIHZvaWQgZTEwMDBfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggMTNlOWVjZS4uYzY3ZTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMjE1LDYgKzIxNSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIGUxMDAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyoKKwkgKiBJZiB0aGUgbGluayBpcyBub3QgcmVwb3J0ZWQgdXAgdG8gbmV0ZGV2LCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKKwkgKiBhbmQgc28gdGhlIHBoeXNpY2FsIGxpbmsgc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0CisJICogbG9va2VkLiBTZXQgZ2V0X2xpbmtfc3RhdHVzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0cnVlIGxpbmsKKwkgKiBzdGF0ZSBpcyBpbnRlcnJvZ2F0ZWQsIHJhdGhlciB0aGFuIHB1bGxpbmcgYSBjYWNoZWQgYW5kIHBvc3NpYmx5CisJICogc3RhbGUgbGluayBzdGF0ZSBmcm9tIHRoZSBkcml2ZXIuCisJICovCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCWFkYXB0ZXItPmh3LmdldF9saW5rX3N0YXR1cyA9IDE7CisKKwlyZXR1cm4gZTEwMDBfaGFzX2xpbmsoYWRhcHRlcik7Cit9CisKIHN0YXRpYyB2b2lkIGUxMDAwX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQogewpAQCAtMTg5Miw3ICsxOTA5LDcgQEAKIAkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IGUxMDAwX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGUxMDAwX3NldF9tc2dsZXZlbCwKIAkubndheV9yZXNldCAgICAgICAgICAgICA9IGUxMDAwX253YXlfcmVzZXQsCi0JLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZTEwMDBfZ2V0X2xpbmssCiAJLmdldF9lZXByb21fbGVuICAgICAgICAgPSBlMTAwMF9nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbSAgICAgICAgICAgICA9IGUxMDAwX2dldF9lZXByb20sCiAJLnNldF9lZXByb20gICAgICAgICAgICAgPSBlMTAwMF9zZXRfZWVwcm9tLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDc2NTU0MzYuLjhiZTZmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqIE1hY3JvIGV4cGFuZHMgdG8uLi4KICAqICAge1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgZGV2aWNlX2lkKX0KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGUxMDAwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlMTAwMF9wY2lfdGJsKSA9IHsKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDAwKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDAxKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDA0KSwKQEAgLTg0Nyw2ICs4NDcsOSBAQAogCQlnb3RvIGVycl9wY2lfcmVnOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CisJZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfYWxsb2NfZXRoZXJkZXY7CiAKIAllcnIgPSAtRU5PTUVNOwogCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZTEwMDBfYWRhcHRlcikpOwpAQCAtMjEyNyw3ICsyMTMwLDcgQEAKIAkJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CiAJfQogCi0JaWYgKG5ldGRldi0+dWMuY291bnQgPiByYXJfZW50cmllcyAtIDEpIHsKKwlpZiAobmV0ZGV2X3VjX2NvdW50KG5ldGRldikgPiByYXJfZW50cmllcyAtIDEpIHsKIAkJcmN0bCB8PSBFMTAwMF9SQ1RMX1VQRTsKIAl9IGVsc2UgaWYgKCEobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkgewogCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1VQRTsKQEAgLTIxNTAsNyArMjE1Myw3IEBACiAJICovCiAJaSA9IDE7CiAJaWYgKHVzZV91YykKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgJm5ldGRldi0+dWMubGlzdCwgbGlzdCkgeworCQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmV0ZGV2KSB7CiAJCQlpZiAoaSA9PSByYXJfZW50cmllcykKIAkJCQlicmVhazsKIAkJCWUxMDAwX3Jhcl9zZXQoaHcsIGhhLT5hZGRyLCBpKyspOwpAQCAtMjE1OCwyOSArMjE2MSwyNSBAQAogCiAJV0FSTl9PTihpID09IHJhcl9lbnRyaWVzKTsKIAotCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKLQotCWZvciAoOyBpIDwgcmFyX2VudHJpZXM7IGkrKykgewotCQlpZiAobWNfcHRyKSB7Ci0JCQllMTAwMF9yYXJfc2V0KGh3LCBtY19wdHItPmRhX2FkZHIsIGkpOwotCQkJbWNfcHRyID0gbWNfcHRyLT5uZXh0OworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KSB7CisJCWlmIChpID09IHJhcl9lbnRyaWVzKSB7CisJCQkvKiBsb2FkIGFueSByZW1haW5pbmcgYWRkcmVzc2VzIGludG8gdGhlIGhhc2ggdGFibGUgKi8KKwkJCXUzMiBoYXNoX3JlZywgaGFzaF9iaXQsIG10YTsKKwkJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZGFfYWRkcik7CisJCQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgMHg3RjsKKwkJCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7CisJCQltdGEgPSAoMSA8PCBoYXNoX2JpdCk7CisJCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CiAJCX0gZWxzZSB7Ci0JCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCBpIDw8IDEsIDApOwotCQkJRTEwMDBfV1JJVEVfRkxVU0goKTsKLQkJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpICsgMSwgMCk7Ci0JCQlFMTAwMF9XUklURV9GTFVTSCgpOworCQkJZTEwMDBfcmFyX3NldChodywgbWNfcHRyLT5kYV9hZGRyLCBpKyspOwogCQl9CiAJfQogCi0JLyogbG9hZCBhbnkgcmVtYWluaW5nIGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRhYmxlICovCi0KLQlmb3IgKDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKLQkJdTMyIGhhc2hfcmVnLCBoYXNoX2JpdCwgbXRhOwotCQloYXNoX3ZhbHVlID0gZTEwMDBfaGFzaF9tY19hZGRyKGh3LCBtY19wdHItPmRhX2FkZHIpOwotCQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgMHg3RjsKLQkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKLQkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOwotCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CisJZm9yICg7IGkgPCByYXJfZW50cmllczsgaSsrKSB7CisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIGkgPDwgMSwgMCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpICsgMSwgMCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJfQogCiAJLyogd3JpdGUgdGhlIGhhc2ggdGFibGUgY29tcGxldGVseSwgd3JpdGUgZnJvbSBib3R0b20gdG8gYXZvaWQKQEAgLTIyNDYsNyArMjI0NSw3IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK2Jvb2wgZTEwMDBfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlib29sIGxpbmtfYWN0aXZlID0gZmFsc2U7CkBAIC00NjEzLDYgKzQ2MTIsNyBAQAogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJaWYgKGFkYXB0ZXItPm5lZWRfaW9wb3J0KQogCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggMDJkNjdkMC4uM2M5NWFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKQEAgLTI2Nyw4ICsyNjcsMTQgQEAKIAl9CiAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJCWZ1bmMtPnNldF9sYW5faWQgPSBlMTAwMF9zZXRfbGFuX2lkX3NpbmdsZV9wb3J0OworCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwZV9jaGVja19tbmdfbW9kZV9nZW5lcmljOworCQlmdW5jLT5sZWRfb24gPSBlMTAwMGVfbGVkX29uX2dlbmVyaWM7CisJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CiAJY2FzZSBlMTAwMF84MjU4MzoKKwkJZnVuYy0+c2V0X2xhbl9pZCA9IGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQ7CiAJCWZ1bmMtPmNoZWNrX21uZ19tb2RlID0gZTEwMDBfY2hlY2tfbW5nX21vZGVfODI1NzQ7CiAJCWZ1bmMtPmxlZF9vbiA9IGUxMDAwX2xlZF9vbl84MjU3NDsKIAkJYnJlYWs7CkBAIC05MjIsOSArOTI4LDEyIEBACiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwogCWljciA9IGVyMzIoSUNSKTsKIAotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEgJiYKLQkJaHctPmRldl9zcGVjLmU4MjU3MS5hbHRfbWFjX2FkZHJfaXNfcHJlc2VudCkKLQkJCWUxMDAwZV9zZXRfbGFhX3N0YXRlXzgyNTcxKGh3LCB0cnVlKTsKKwkvKiBJbnN0YWxsIGFueSBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgaW50byBSQVIwICovCisJcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX2FsdF9tYWNfYWRkcl9nZW5lcmljKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwllMTAwMGVfc2V0X2xhYV9zdGF0ZV84MjU3MShodywgdHJ1ZSk7CiAKIAkvKiBSZWluaXRpYWxpemUgdGhlIDgyNTcxIHNlcmRlcyBsaW5rIHN0YXRlIG1hY2hpbmUgKi8KIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKQpAQCAtMTIyNSwzMiArMTIzNCw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzEgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCi0gKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KLSAqICBAcmFyX3VzZWRfY291bnQ6IHRoZSBmaXJzdCBSQVIgcmVnaXN0ZXIgZnJlZSB0byBwcm9ncmFtCi0gKiAgQHJhcl9jb3VudDogdG90YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXJzCi0gKgotICogIFVwZGF0ZXMgdGhlIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMgYW5kIE11bHRpY2FzdCBUYWJsZSBBcnJheS4KLSAqICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBhIHBhY2tlZCBtY19hZGRyX2xpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KLSAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKLSAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCi0gKiovCi1zdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0JCQkJCSAgICB1OCAqbWNfYWRkcl9saXN0LAotCQkJCQkgICAgdTMyIG1jX2FkZHJfY291bnQsCi0JCQkJCSAgICB1MzIgcmFyX3VzZWRfY291bnQsCi0JCQkJCSAgICB1MzIgcmFyX2NvdW50KQotewotCWlmIChlMTAwMGVfZ2V0X2xhYV9zdGF0ZV84MjU3MShodykpCi0JCXJhcl9jb3VudC0tOwotCi0JZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyhodywgbWNfYWRkcl9saXN0LCBtY19hZGRyX2NvdW50LAotCQkJCQkgICByYXJfdXNlZF9jb3VudCwgcmFyX2NvdW50KTsKLX0KLQotLyoqCiAgKiAgZTEwMDBfc2V0dXBfbGlua184MjU3MSAtIFNldHVwIGZsb3cgY29udHJvbCBhbmQgbGluayBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMTYyMSw2ICsxNjA0LDI5IEBACiB9CiAKIC8qKgorICogIGUxMDAwX3JlYWRfbWFjX2FkZHJfODI1NzEgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiovCitzdGF0aWMgczMyIGUxMDAwX3JlYWRfbWFjX2FkZHJfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwkvKgorCSAqIElmIHRoZXJlJ3MgYW4gYWx0ZXJuYXRlIE1BQyBhZGRyZXNzIHBsYWNlIGl0IGluIFJBUjAKKwkgKiBzbyB0aGF0IGl0IHdpbGwgb3ZlcnJpZGUgdGhlIFNpIGluc3RhbGxlZCBkZWZhdWx0IHBlcm0KKwkgKiBhZGRyZXNzLgorCSAqLworCXJldF92YWwgPSBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiBlMTAwMF9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzEgLSBSZW1vdmUgbGluayBkdXJpbmcgUEhZIHBvd2VyIGRvd24KICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMTY5NSwxMCArMTcwMSwxMSBAQAogCS5jbGVhbnVwX2xlZAkJPSBlMTAwMGVfY2xlYW51cF9sZWRfZ2VuZXJpYywKIAkuY2xlYXJfaHdfY250cnMJCT0gZTEwMDBfY2xlYXJfaHdfY250cnNfODI1NzEsCiAJLmdldF9idXNfaW5mbwkJPSBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUsCisJLnNldF9sYW5faWQJCT0gZTEwMDBfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLyogLmdldF9saW5rX3VwX2luZm86IG1lZGlhIHR5cGUgZGVwZW5kZW50ICovCiAJLyogLmxlZF9vbjogbWFjIHR5cGUgZGVwZW5kZW50ICovCiAJLmxlZF9vZmYJCT0gZTEwMDBlX2xlZF9vZmZfZ2VuZXJpYywKLQkudXBkYXRlX21jX2FkZHJfbGlzdAk9IGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzEsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QJPSBlMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLAogCS53cml0ZV92ZnRhCQk9IGUxMDAwX3dyaXRlX3ZmdGFfZ2VuZXJpYywKIAkuY2xlYXJfdmZ0YQkJPSBlMTAwMF9jbGVhcl92ZnRhXzgyNTcxLAogCS5yZXNldF9odwkJPSBlMTAwMF9yZXNldF9od184MjU3MSwKQEAgLTE3MDYsNiArMTcxMyw3IEBACiAJLnNldHVwX2xpbmsJCT0gZTEwMDBfc2V0dXBfbGlua184MjU3MSwKIAkvKiAuc2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlOiBtZWRpYSB0eXBlIGRlcGVuZGVudCAqLwogCS5zZXR1cF9sZWQJCT0gZTEwMDBlX3NldHVwX2xlZF9nZW5lcmljLAorCS5yZWFkX21hY19hZGRyCQk9IGUxMDAwX3JlYWRfbWFjX2FkZHJfODI1NzEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIGU4Ml9waHlfb3BzX2lncCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGUwMmUzODIuLmRiMDVlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNDYwLDYgKzQ2MCw4IEBACiAgKi8KICNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVMgICAgIDE1CiAjZGVmaW5lIEUxMDAwX1JBSF9BViAgMHg4MDAwMDAwMCAgICAgICAgLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHZhbGlkICovCisjZGVmaW5lIEUxMDAwX1JBTF9NQUNfQUREUl9MRU4gNAorI2RlZmluZSBFMTAwMF9SQUhfTUFDX0FERFJfTEVOIDIKIAogLyogRXJyb3IgQ29kZXMgKi8KICNkZWZpbmUgRTEwMDBfRVJSX05WTSAgICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggZDIzNmVmYS4uYzJlYzA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTQ1OSw3ICs0NTksNyBAQAogZXh0ZXJuIHZvaWQgZTEwMDBlX2ZyZWVfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfdXBkYXRlX3N0YXRzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiBib29sIGUxMDAwX2hhc19saW5rKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBib29sIGUxMDAwZV9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiAKQEAgLTUwMyw2ICs1MDMsOCBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfbGVkX29uX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9sZWRfb2ZmX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9nZXRfYnVzX2luZm9fcGNpZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGUxMDAwX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llKHN0cnVjdCBlMTAwMF9odyAqaHcpOworZXh0ZXJuIHZvaWQgZTEwMDBfc2V0X2xhbl9pZF9zaW5nbGVfcG9ydChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgKnNwZWVkLCB1MTYgKmR1cGxleCk7CiBleHRlcm4gczMyIGUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9maWJlcl9zZXJkZXMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZGlzYWJsZV9wY2llX21hc3RlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTUxNyw5ICs1MTksNyBAQAogZXh0ZXJuIHZvaWQgZTEwMDBlX2luaXRfcnhfYWRkcnMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHJhcl9jb3VudCk7CiBleHRlcm4gdm9pZCBlMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAJCQkJCSAgICAgICB1OCAqbWNfYWRkcl9saXN0LAotCQkJCQkgICAgICAgdTMyIG1jX2FkZHJfY291bnQsCi0JCQkJCSAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsCi0JCQkJCSAgICAgICB1MzIgcmFyX2NvdW50KTsKKwkJCQkJICAgICAgIHUzMiBtY19hZGRyX2NvdW50KTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwogZXh0ZXJuIHMzMiBlMTAwMGVfc2V0X2ZjX3dhdGVybWFya3Moc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfc2V0X3BjaWVfbm9fc25vb3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG5vX3Nub29wKTsKQEAgLTUzMCw2ICs1MzAsNyBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfYmxpbmtfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBfd3JpdGVfdmZ0YV9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7CitleHRlcm4gczMyIGUxMDAwX2NoZWNrX2FsdF9tYWNfYWRkcl9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3Jlc2V0X2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIApAQCAtNjI5LDcgKzYzMCwxNSBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfdmFsaWRhdGVfbnZtX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmVsZWFzZV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmVsb2FkX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWV4dGVybiBzMzIgZTEwMDBlX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodyk7CitleHRlcm4gczMyIGUxMDAwX3JlYWRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKworc3RhdGljIGlubGluZSBzMzIgZTEwMDBlX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlpZiAoaHctPm1hYy5vcHMucmVhZF9tYWNfYWRkcikKKwkJcmV0dXJuIGh3LT5tYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpOworCisJcmV0dXJuIGUxMDAwX3JlYWRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgczMyIGUxMDAwX3ZhbGlkYXRlX252bV9jaGVja3N1bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCmluZGV4IGUyYWEzYjc4Li4yN2QyMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCkBAIC0yNDYsNiArMjQ2LDkgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogc2V0IGxhbiBpZCBmb3IgcG9ydCB0byBkZXRlcm1pbmUgd2hpY2ggcGh5IGxvY2sgdG8gdXNlICovCisJaHctPm1hYy5vcHMuc2V0X2xhbl9pZChodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE0LDcgKzgxNyw5IEBACiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwogCWljciA9IGVyMzIoSUNSKTsKIAotCXJldHVybiAwOworCXJldF92YWwgPSBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyoqCkBAIC0xMzQwLDYgKzEzNDUsMjkgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbiAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKworCS8qCisJICogSWYgdGhlcmUncyBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgcGxhY2UgaXQgaW4gUkFSMAorCSAqIHNvIHRoYXQgaXQgd2lsbCBvdmVycmlkZSB0aGUgU2kgaW5zdGFsbGVkIGRlZmF1bHQgcGVybQorCSAqIGFkZHJlc3MuCisJICovCisJcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX2FsdF9tYWNfYWRkcl9nZW5lcmljKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9tYWNfYWRkcl9nZW5lcmljKGh3KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqIGUxMDAwX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcl84MDAwM2VzMmxhbiAtIFJlbW92ZSBsaW5rIGR1cmluZyBQSFkgcG93ZXIgZG93bgogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xNDAzLDEyICsxNDMxLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgZXMyX21hY19vcHMgPSB7CisJLnJlYWRfbWFjX2FkZHIJCT0gZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbiwKIAkuaWRfbGVkX2luaXQJCT0gZTEwMDBlX2lkX2xlZF9pbml0LAogCS5jaGVja19tbmdfbW9kZQkJPSBlMTAwMGVfY2hlY2tfbW5nX21vZGVfZ2VuZXJpYywKIAkvKiBjaGVja19mb3JfbGluayBkZXBlbmRlbnQgb24gbWVkaWEgdHlwZSAqLwogCS5jbGVhbnVwX2xlZAkJPSBlMTAwMGVfY2xlYW51cF9sZWRfZ2VuZXJpYywKIAkuY2xlYXJfaHdfY250cnMJCT0gZTEwMDBfY2xlYXJfaHdfY250cnNfODAwMDNlczJsYW4sCiAJLmdldF9idXNfaW5mbwkJPSBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUsCisJLnNldF9sYW5faWQJCT0gZTEwMDBfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLmdldF9saW5rX3VwX2luZm8JPSBlMTAwMF9nZXRfbGlua191cF9pbmZvXzgwMDAzZXMybGFuLAogCS5sZWRfb24JCQk9IGUxMDAwZV9sZWRfb25fZ2VuZXJpYywKIAkubGVkX29mZgkJPSBlMTAwMGVfbGVkX29mZl9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMGFhNTBjMi4uYjMzZTNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKIAkJbWFjLT5nZXRfbGlua19zdGF0dXMgPSAxOwogCi0JcmV0dXJuIGUxMDAwX2hhc19saW5rKGFkYXB0ZXIpOworCXJldHVybiBlMTAwMGVfaGFzX2xpbmsoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKaW5kZXggZWNjZjI5Yi4uOGJkY2Q1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC0zODksNiArMzg5LDkgQEAKIAogI2RlZmluZSBFMTAwMF9GVU5DXzEgMQogCisjZGVmaW5lIEUxMDAwX0FMVF9NQUNfQUREUkVTU19PRkZTRVRfTEFOMCAgIDAKKyNkZWZpbmUgRTEwMDBfQUxUX01BQ19BRERSRVNTX09GRlNFVF9MQU4xICAgMworCiBlbnVtIGUxMDAwX21hY190eXBlIHsKIAllMTAwMF84MjU3MSwKIAllMTAwMF84MjU3MiwKQEAgLTc0NiwxNiArNzQ5LDE4IEBACiAJdm9pZCAoKmNsZWFyX2h3X2NudHJzKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJdm9pZCAoKmNsZWFyX3ZmdGEpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X2J1c19pbmZvKShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJdm9pZCAoKnNldF9sYW5faWQpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X2xpbmtfdXBfaW5mbykoc3RydWN0IGUxMDAwX2h3ICosIHUxNiAqLCB1MTYgKik7CiAJczMyICAoKmxlZF9vbikoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpsZWRfb2ZmKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0Jdm9pZCAoKnVwZGF0ZV9tY19hZGRyX2xpc3QpKHN0cnVjdCBlMTAwMF9odyAqLCB1OCAqLCB1MzIsIHUzMiwgdTMyKTsKKwl2b2lkICgqdXBkYXRlX21jX2FkZHJfbGlzdCkoc3RydWN0IGUxMDAwX2h3ICosIHU4ICosIHUzMik7CiAJczMyICAoKnJlc2V0X2h3KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmluaXRfaHcpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqc2V0dXBfbGluaykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqc2V0dXBfbGVkKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJdm9pZCAoKndyaXRlX3ZmdGEpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUzMik7CisJczMyICAoKnJlYWRfbWFjX2FkZHIpKHN0cnVjdCBlMTAwMF9odyAqKTsKIH07CiAKIC8qIEZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgUEhZLiAqLwpAQCAtODE0LDYgKzgxOSwxMCBAQAogCXUxNiBpZnNfcmF0aW87CiAJdTE2IGlmc19zdGVwX3NpemU7CiAJdTE2IG10YV9yZWdfY291bnQ7CisKKwkvKiBNYXhpbXVtIHNpemUgb2YgdGhlIE1UQSByZWdpc3RlciB0YWJsZSBpbiBhbGwgc3VwcG9ydGVkIGFkYXB0ZXJzICovCisJI2RlZmluZSBNQVhfTVRBX1JFRyAxMjgKKwl1MzIgbXRhX3NoYWRvd1tNQVhfTVRBX1JFR107CiAJdTE2IHJhcl9lbnRyeV9jb3VudDsKIAogCXU4ICBmb3JjZWRfc3BlZWRfZHVwbGV4OwpAQCAtODk3LDcgKzkwNiw2IEBACiAKIHN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3MSB7CiAJYm9vbCBsYWFfaXNfcHJlc2VudDsKLQlib29sIGFsdF9tYWNfYWRkcl9pc19wcmVzZW50OwogCXUzMiBzbWJfY291bnRlcjsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCmluZGV4IDhiNmVjZDEuLjU0ZDAzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwpAQCAtMzM2OCw2ICszMzY4LDcgQEAKIAkvKiBjbGVhbnVwX2xlZCBkZXBlbmRlbnQgb24gbWFjIHR5cGUgKi8KIAkuY2xlYXJfaHdfY250cnMJCT0gZTEwMDBfY2xlYXJfaHdfY250cnNfaWNoOGxhbiwKIAkuZ2V0X2J1c19pbmZvCQk9IGUxMDAwX2dldF9idXNfaW5mb19pY2g4bGFuLAorCS5zZXRfbGFuX2lkCQk9IGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQsCiAJLmdldF9saW5rX3VwX2luZm8JPSBlMTAwMF9nZXRfbGlua191cF9pbmZvX2ljaDhsYW4sCiAJLyogbGVkX29uIGRlcGVuZGVudCBvbiBtYWMgdHlwZSAqLwogCS8qIGxlZF9vZmYgZGVwZW5kZW50IG9uIG1hYyB0eXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggMmZhOWIzNmEuLjI0MjVlZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKQEAgLTUxLDEwICs1MSwxMCBAQAogICoqLwogczMyIGUxMDAwZV9nZXRfYnVzX2luZm9fcGNpZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogeworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJc3RydWN0IGUxMDAwX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5hZGFwdGVyOwotCXUzMiBzdGF0dXM7Ci0JdTE2IHBjaWVfbGlua19zdGF0dXMsIHBjaV9oZWFkZXJfdHlwZSwgY2FwX29mZnNldDsKKwl1MTYgcGNpZV9saW5rX3N0YXR1cywgY2FwX29mZnNldDsKIAogCWNhcF9vZmZzZXQgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAlpZiAoIWNhcF9vZmZzZXQpIHsKQEAgLTY4LDIwICs2OCw0NiBAQAogCQkJCQkJICAgIFBDSUVfTElOS19XSURUSF9TSElGVCk7CiAJfQogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSLAotCQkJICAgICAmcGNpX2hlYWRlcl90eXBlKTsKLQlpZiAocGNpX2hlYWRlcl90eXBlICYgUENJX0hFQURFUl9UWVBFX01VTFRJRlVOQykgewotCQlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7Ci0JCWJ1cy0+ZnVuYyA9IChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRlVOQ19NQVNLKQotCQkJICAgID4+IEUxMDAwX1NUQVRVU19GVU5DX1NISUZUOwotCX0gZWxzZSB7Ci0JCWJ1cy0+ZnVuYyA9IDA7Ci0JfQorCW1hYy0+b3BzLnNldF9sYW5faWQoaHcpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgorICogIGUxMDAwX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llIC0gU2V0IExBTiBpZCBmb3IgUENJZSBtdWx0aXBsZSBwb3J0IGRldmljZXMKKyAqCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgTEFOIGZ1bmN0aW9uIGlkIGJ5IHJlYWRpbmcgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMKKyAqICBhbmQgc3dhcHMgdGhlIHBvcnQgdmFsdWUgaWYgcmVxdWVzdGVkLgorICoqLwordm9pZCBlMTAwMF9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9idXNfaW5mbyAqYnVzID0gJmh3LT5idXM7CisJdTMyIHJlZzsKKworCS8qCisJICogVGhlIHN0YXR1cyByZWdpc3RlciByZXBvcnRzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG51bWJlcgorCSAqIGZvciB0aGUgZGV2aWNlIHJlZ2FyZGxlc3Mgb2YgZnVuY3Rpb24gc3dhcCBzdGF0ZS4KKwkgKi8KKwlyZWcgPSBlcjMyKFNUQVRVUyk7CisJYnVzLT5mdW5jID0gKHJlZyAmIEUxMDAwX1NUQVRVU19GVU5DX01BU0spID4+IEUxMDAwX1NUQVRVU19GVU5DX1NISUZUOworfQorCisvKioKKyAqICBlMTAwMF9zZXRfbGFuX2lkX3NpbmdsZV9wb3J0IC0gU2V0IExBTiBpZCBmb3IgYSBzaW5nbGUgcG9ydCBkZXZpY2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHRoZSBMQU4gZnVuY3Rpb24gaWQgdG8gemVybyBmb3IgYSBzaW5nbGUgcG9ydCBkZXZpY2UuCisgKiovCit2b2lkIGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCisJYnVzLT5mdW5jID0gMDsKK30KKworLyoqCiAgKiAgZTEwMDBfY2xlYXJfdmZ0YV9nZW5lcmljIC0gQ2xlYXIgVkxBTiBmaWx0ZXIgdGFibGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKQEAgLTEzOSw2ICsxNjUsNjggQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyX2dlbmVyaWMgLSBDaGVjayBmb3IgYWx0ZXJuYXRlIE1BQyBhZGRyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2hlY2tzIHRoZSBudm0gZm9yIGFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcy4gIEFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcworICogIGNhbiBiZSBzZXR1cCBieSBwcmUtYm9vdCBzb2Z0d2FyZSBhbmQgbXVzdCBiZSB0cmVhdGVkIGxpa2UgYSBwZXJtYW5lbnQKKyAqICBhZGRyZXNzIGFuZCBtdXN0IG92ZXJyaWRlIHRoZSBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiBJZiBhbgorICogIGFsdGVybmF0ZSBNQUMgYWRkcmVzcyBpcyBmb3VuZCBpdCBpcyBwcm9ncmFtbWVkIGludG8gUkFSMCwgcmVwbGFjaW5nCisgKiAgdGhlIHBlcm1hbmVudCBhZGRyZXNzIHRoYXQgd2FzIGluc3RhbGxlZCBpbnRvIFJBUjAgYnkgdGhlIFNpIG9uIHJlc2V0LgorICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gU1VDQ0VTUyB1bmxlc3MgaXQgZW5jb3VudGVycyBhbiBlcnJvciB3aGlsZQorICogIHJlYWRpbmcgdGhlIEVFUFJPTS4KKyAqKi8KK3MzMiBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBpOworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgb2Zmc2V0LCBudm1fYWx0X21hY19hZGRyX29mZnNldCwgbnZtX2RhdGE7CisJdTggYWx0X21hY19hZGRyW0VUSF9BTEVOXTsKKworCXJldF92YWwgPSBlMTAwMF9yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICZudm1fYWx0X21hY19hZGRyX29mZnNldCk7CisJaWYgKHJldF92YWwpIHsKKwkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0ID09IDB4RkZGRikgeworCQkvKiBUaGVyZSBpcyBubyBBbHRlcm5hdGUgTUFDIEFkZHJlc3MgKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCisJCW52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0ICs9IEUxMDAwX0FMVF9NQUNfQUREUkVTU19PRkZTRVRfTEFOMTsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgeworCQlvZmZzZXQgPSBudm1fYWx0X21hY19hZGRyX29mZnNldCArIChpID4+IDEpOworCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWFsdF9tYWNfYWRkcltpXSA9ICh1OCkobnZtX2RhdGEgJiAweEZGKTsKKwkJYWx0X21hY19hZGRyW2kgKyAxXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7CisJfQorCisJLyogaWYgbXVsdGljYXN0IGJpdCBpcyBzZXQsIHRoZSBhbHRlcm5hdGUgYWRkcmVzcyB3aWxsIG5vdCBiZSB1c2VkICovCisJaWYgKGFsdF9tYWNfYWRkclswXSAmIDB4MDEpIHsKKwkJZV9kYmcoIklnbm9yaW5nIEFsdGVybmF0ZSBNYWMgQWRkcmVzcyB3aXRoIE1DIGJpdCBzZXRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgYSB2YWxpZCBhbHRlcm5hdGUgTUFDIGFkZHJlc3MsIGFuZCB3ZSB3YW50IHRvIHRyZWF0IGl0IHRoZQorCSAqIHNhbWUgYXMgdGhlIG5vcm1hbCBwZXJtYW5lbnQgTUFDIGFkZHJlc3Mgc3RvcmVkIGJ5IHRoZSBIVyBpbnRvIHRoZQorCSAqIFJBUi4gRG8gdGhpcyBieSBtYXBwaW5nIHRoaXMgYWRkcmVzcyBpbnRvIFJBUjAuCisJICovCisJZTEwMDBlX3Jhcl9zZXQoaHcsIGFsdF9tYWNfYWRkciwgMCk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgZTEwMDBlX3Jhcl9zZXQgLSBTZXQgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAYWRkcjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBhZGRyZXNzCkBAIC0yNTIsNjIgKzM0MCwzNCBAQAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCiAgKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KLSAqICBAcmFyX3VzZWRfY291bnQ6IHRoZSBmaXJzdCBSQVIgcmVnaXN0ZXIgZnJlZSB0byBwcm9ncmFtCi0gKiAgQHJhcl9jb3VudDogdG90YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXJzCiAgKgotICogIFVwZGF0ZXMgdGhlIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMgYW5kIE11bHRpY2FzdCBUYWJsZSBBcnJheS4KKyAqICBVcGRhdGVzIGVudGlyZSBNdWx0aWNhc3QgVGFibGUgQXJyYXkuCiAgKiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgYSBwYWNrZWQgbWNfYWRkcl9saXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCi0gKiAgVGhlIHBhcmFtZXRlciByYXJfY291bnQgd2lsbCB1c3VhbGx5IGJlIGh3LT5tYWMucmFyX2VudHJ5X2NvdW50Ci0gKiAgdW5sZXNzIHRoZXJlIGFyZSB3b3JrYXJvdW5kcyB0aGF0IGNoYW5nZSB0aGlzLgogICoqLwogdm9pZCBlMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0JCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAotCQkJCQl1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCisJCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50KQogewotCXUzMiBpOwotCXUzMiAqbWNhcnJheSA9IGt6YWxsb2MoaHctPm1hYy5tdGFfcmVnX2NvdW50ICogc2l6ZW9mKHUzMiksIEdGUF9BVE9NSUMpOworCXUzMiBoYXNoX3ZhbHVlLCBoYXNoX2JpdCwgaGFzaF9yZWc7CisJaW50IGk7CiAKLQlpZiAoIW1jYXJyYXkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aWNhc3QgYXJyYXkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KKwkvKiBjbGVhciBtdGFfc2hhZG93ICovCisJbWVtc2V0KCZody0+bWFjLm10YV9zaGFkb3csIDAsIHNpemVvZihody0+bWFjLm10YV9zaGFkb3cpKTsKIAotCS8qCi0JICogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKLQkgKiBmaWx0ZXJzIChSQVIpLiAgSWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggdG8gZmlsbCB0aGUgUkFSCi0JICogYXJyYXksIGNsZWFyIHRoZSBmaWx0ZXJzLgotCSAqLwotCWZvciAoaSA9IHJhcl91c2VkX2NvdW50OyBpIDwgcmFyX2NvdW50OyBpKyspIHsKLQkJaWYgKG1jX2FkZHJfY291bnQpIHsKLQkJCWUxMDAwZV9yYXJfc2V0KGh3LCBtY19hZGRyX2xpc3QsIGkpOwotCQkJbWNfYWRkcl9jb3VudC0tOwotCQkJbWNfYWRkcl9saXN0ICs9IEVUSF9BTEVOOwotCQl9IGVsc2UgewotCQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9SQSwgaSA8PCAxLCAwKTsKLQkJCWUxZV9mbHVzaCgpOwotCQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9SQSwgKGkgPDwgMSkgKyAxLCAwKTsKLQkJCWUxZV9mbHVzaCgpOwotCQl9Ci0JfQotCi0JLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KLQlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgewotCQl1MzIgaGFzaF92YWx1ZSwgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7CisJLyogdXBkYXRlIG10YV9zaGFkb3cgZnJvbSBtY19hZGRyX2xpc3QgKi8KKwlmb3IgKGkgPSAwOyAodTMyKSBpIDwgbWNfYWRkcl9jb3VudDsgaSsrKSB7CiAJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7Ci0JCWVfZGJnKCJIYXNoIHZhbHVlID0gMHglMDNYXG4iLCBoYXNoX3ZhbHVlKTsKKwogCQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOwogCQloYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOwotCQltdGEgPSAoMSA8PCBoYXNoX2JpdCk7Ci0JCW1jYXJyYXlbaGFzaF9yZWddIHw9IG10YTsKLQkJbWNfYWRkcl9saXN0ICs9IEVUSF9BTEVOOworCisJCWh3LT5tYWMubXRhX3NoYWRvd1toYXNoX3JlZ10gfD0gKDEgPDwgaGFzaF9iaXQpOworCQltY19hZGRyX2xpc3QgKz0gKEVUSF9BTEVOKTsKIAl9CiAKLQkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5ICovCi0JZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKQotCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgbWNhcnJheVtpXSk7Ci0KKwkvKiByZXBsYWNlIHRoZSBlbnRpcmUgTVRBIHRhYmxlICovCisJZm9yIChpID0gaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMTsgaSA+PSAwOyBpLS0pCisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCBody0+bWFjLm10YV9zaGFkb3dbaV0pOwogCWUxZV9mbHVzaCgpOwotCWtmcmVlKG1jYXJyYXkpOwogfQogCiAvKioKQEAgLTIwNzIsNjcgKzIxMzIsMjcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBlX3JlYWRfbWFjX2FkZHIgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcworICogIGUxMDAwX3JlYWRfbWFjX2FkZHJfZ2VuZXJpYyAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmVhZHMgdGhlIGRldmljZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBFRVBST00gYW5kIHN0b3JlcyB0aGUgdmFsdWUuCiAgKiAgU2luY2UgZGV2aWNlcyB3aXRoIHR3byBwb3J0cyB1c2UgdGhlIHNhbWUgRUVQUk9NLCB3ZSBpbmNyZW1lbnQgdGhlCiAgKiAgbGFzdCBiaXQgaW4gdGhlIE1BQyBhZGRyZXNzIGZvciB0aGUgc2Vjb25kIHBvcnQuCiAgKiovCi1zMzIgZTEwMDBlX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMF9yZWFkX21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlzMzIgcmV0X3ZhbDsKLQl1MTYgb2Zmc2V0LCBudm1fZGF0YSwgaTsKLQl1MTYgbWFjX2FkZHJfb2Zmc2V0ID0gMDsKKwl1MzIgcmFyX2hpZ2g7CisJdTMyIHJhcl9sb3c7CisJdTE2IGk7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcxKSB7Ci0JCS8qIENoZWNrIGZvciBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MuICBBbiBhbHRlcm5hdGUgTUFDCi0JCSAqIGFkZHJlc3MgY2FuIGJlIHNldHVwIGJ5IHByZS1ib290IHNvZnR3YXJlIGFuZCBtdXN0IGJlCi0JCSAqIHRyZWF0ZWQgbGlrZSBhIHBlcm1hbmVudCBhZGRyZXNzIGFuZCBtdXN0IG92ZXJyaWRlIHRoZQotCQkgKiBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiovCi0JCXJldF92YWwgPSBlMTAwMF9yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCi0JCQkJCSAmbWFjX2FkZHJfb2Zmc2V0KTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQotCQlpZiAobWFjX2FkZHJfb2Zmc2V0ID09IDB4RkZGRikKLQkJCW1hY19hZGRyX29mZnNldCA9IDA7CisJcmFyX2hpZ2ggPSBlcjMyKFJBSCgwKSk7CisJcmFyX2xvdyA9IGVyMzIoUkFMKDApKTsKIAotCQlpZiAobWFjX2FkZHJfb2Zmc2V0KSB7Ci0JCQlpZiAoaHctPmJ1cy5mdW5jID09IEUxMDAwX0ZVTkNfMSkKLQkJCQltYWNfYWRkcl9vZmZzZXQgKz0gRVRIX0FMRU4vc2l6ZW9mKHUxNik7CisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBTF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKHJhcl9sb3cgPj4gKGkqOCkpOwogCi0JCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIG1hYyBhZGRyZXNzIGhlcmUKLQkJCSogYmVmb3JlIHVzaW5nIGl0ICovCi0JCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIG1hY19hZGRyX29mZnNldCwgMSwKLQkJCQkJCSAmbnZtX2RhdGEpOwotCQkJaWYgKHJldF92YWwpIHsKLQkJCQllX2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwotCQkJCXJldHVybiByZXRfdmFsOwotCQkJfQotCQkJaWYgKG52bV9kYXRhICYgMHgwMDAxKQotCQkJCW1hY19hZGRyX29mZnNldCA9IDA7Ci0JCX0KLQotCQlpZiAobWFjX2FkZHJfb2Zmc2V0KQotCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50ID0gMTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgewotCQlvZmZzZXQgPSBtYWNfYWRkcl9vZmZzZXQgKyAoaSA+PiAxKTsKLQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7Ci0JCWlmIChyZXRfdmFsKSB7Ci0JCQllX2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwotCQkJcmV0dXJuIHJldF92YWw7Ci0JCX0KLQkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKG52bV9kYXRhICYgMHhGRik7Ci0JCWh3LT5tYWMucGVybV9hZGRyW2krMV0gPSAodTgpKG52bV9kYXRhID4+IDgpOwotCX0KLQotCS8qIEZsaXAgbGFzdCBiaXQgb2YgbWFjIGFkZHJlc3MgaWYgd2UncmUgb24gc2Vjb25kIHBvcnQgKi8KLQlpZiAoIW1hY19hZGRyX29mZnNldCAmJiBody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQotCQlody0+bWFjLnBlcm1fYWRkcls1XSBePSAxOworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9SQUhfTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5tYWMucGVybV9hZGRyW2krNF0gPSAodTgpKHJhcl9oaWdoID4+IChpKjgpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlody0+bWFjLmFkZHJbaV0gPSBody0+bWFjLnBlcm1fYWRkcltpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCA1N2YxNDliLi44OGQ1NGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC0yNTQxLDIyICsyNTQxLDE0IEBACiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KICAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQotICogIEByYXJfdXNlZF9jb3VudDogdGhlIGZpcnN0IFJBUiByZWdpc3RlciBmcmVlIHRvIHByb2dyYW0KLSAqICBAcmFyX2NvdW50OiB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMKICAqCi0gKiAgVXBkYXRlcyB0aGUgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycyBhbmQgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICogIFVwZGF0ZXMgdGhlIE11bHRpY2FzdCBUYWJsZSBBcnJheS4KICAqICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBhIHBhY2tlZCBtY19hZGRyX2xpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KLSAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKLSAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuICBDdXJyZW50bHkgbm8gZnVuYyBwb2ludGVyCi0gKiAgZXhpc3RzIGFuZCBhbGwgaW1wbGVtZW50YXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBnZW5lcmljIHZlcnNpb24gb2YgdGhpcwotICogIGZ1bmN0aW9uLgogICoqLwogc3RhdGljIHZvaWQgZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcl9saXN0LAotCQkJCSAgICAgIHUzMiBtY19hZGRyX2NvdW50LCB1MzIgcmFyX3VzZWRfY291bnQsCi0JCQkJICAgICAgdTMyIHJhcl9jb3VudCkKKwkJCQkgICAgICB1MzIgbWNfYWRkcl9jb3VudCkKIHsKLQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtY19hZGRyX2xpc3QsIG1jX2FkZHJfY291bnQsCi0JCQkJICAgICAgICByYXJfdXNlZF9jb3VudCwgcmFyX2NvdW50KTsKKwlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtY19hZGRyX2xpc3QsIG1jX2FkZHJfY291bnQpOwogfQogCiAvKioKQEAgLTI1NzIsNyArMjU2NCw2IEBACiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKIAl1OCAgKm10YV9saXN0OwogCXUzMiByY3RsOwpAQCAtMjU5OCwzMSArMjU4OSwyNSBAQAogCiAJZXczMihSQ1RMLCByY3RsKTsKIAotCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7Ci0JCW10YV9saXN0ID0ga21hbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgeworCQltdGFfbGlzdCA9IGttYWxsb2MobmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiA2LCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFtdGFfbGlzdCkKIAkJCXJldHVybjsKIAogCQkvKiBwcmVwYXJlIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwotCQltY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikKKwkJCW1lbWNweShtdGFfbGlzdCArIChpKysgKiBFVEhfQUxFTiksCisJCQkgICAgICAgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyspIHsKLQkJCWlmICghbWNfcHRyKQotCQkJCWJyZWFrOwotCQkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKLQkJfQotCi0JCWUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpLCAxLAotCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwkJZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGkpOwogCQlrZnJlZShtdGFfbGlzdCk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogaWYgd2UncmUgY2FsbGVkIGZyb20gcHJvYmUsIHdlIG1pZ2h0IG5vdCBoYXZlCiAJCSAqIGFueXRoaW5nIHRvIGRvIGhlcmUsIHNvIGNsZWFyIG91dCB0aGUgbGlzdAogCQkgKi8KLQkJZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdChodywgTlVMTCwgMCwgMSwgbWFjLT5yYXJfZW50cnlfY291bnQpOworCQllMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwKTsKIAl9CiB9CiAKQEAgLTM0ODIsNyArMzQ2Nyw3IEBACiAJICAgICAgICgoY3RybCAmIEUxMDAwX0NUUkxfVEZDRSkgPyAiVFgiIDogIk5vbmUiICkpKTsKIH0KIAotYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK2Jvb2wgZTEwMDBlX2hhc19saW5rKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJYm9vbCBsaW5rX2FjdGl2ZSA9IDA7CkBAIC0zNTYzLDcgKzM1NDgsNyBAQAogCXUzMiBsaW5rLCB0Y3RsOwogCWludCB0eF9wZW5kaW5nID0gMDsKIAotCWxpbmsgPSBlMTAwMF9oYXNfbGluayhhZGFwdGVyKTsKKwlsaW5rID0gZTEwMDBlX2hhc19saW5rKGFkYXB0ZXIpOwogCWlmICgobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSAmJiBsaW5rKSB7CiAJCWUxMDAwZV9lbmFibGVfcmVjZWl2ZXMoYWRhcHRlcik7CiAJCWdvdG8gbGlua191cDsKQEAgLTUxMzQsNyArNTExOSw3IEBACiAKIAllMTAwMF9lZXByb21fY2hlY2tzKGFkYXB0ZXIpOwogCi0JLyogY29weSB0aGUgTUFDIGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi8KKwkvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyAqLwogCWlmIChlMTAwMGVfcmVhZF9tYWNfYWRkcigmYWRhcHRlci0+aHcpKQogCQllX2VycigiTlZNIFJlYWQgRXJyb3Igd2hpbGUgcmVhZGluZyBNQUMgYWRkcmVzc1xuIik7CiAKQEAgLTUzMjYsNyArNTMxMSw3IEBACiAJLnJlc3VtZSA9IGUxMDAwX2lvX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlMTAwMF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZTEwMDBfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcxRUJfQ09QUEVSKSwgYm9hcmRfODI1NzEgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUiksIGJvYXJkXzgyNTcxIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3MSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8uYyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKaW5kZXggOTRjNTk0OS4uMWIwNWJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8uYworKysgYi9kcml2ZXJzL25ldC9lZXByby5jCkBAIC0xMjg3LDkgKzEyODcsMTAgQEAKIAlzdHJ1Y3QgZWVwcm9fbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzaG9ydCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBtb2RlOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKKwlpbnQgbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAotCWlmIChkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpIHx8IGRldi0+bWNfY291bnQgPiA2MykKKwlpZiAoZGV2LT5mbGFncyYoSUZGX0FMTE1VTFRJfElGRl9QUk9NSVNDKSB8fCBtY19jb3VudCA+IDYzKQogCXsKIAkJZWVwcm9fc3cyYmFuazIoaW9hZGRyKTsgLyogYmUgQ0FSRUZVTCwgQkFOSyAyIG5vdyAqLwogCQltb2RlID0gaW5iKGlvYWRkciArIFJFRzIpOwpAQCAtMTI5OSw3ICsxMzAwLDcgQEAKIAkJZWVwcm9fc3cyYmFuazAoaW9hZGRyKTsgLyogUmV0dXJuIHRvIEJBTksgMCBub3cgKi8KIAl9CiAKLQllbHNlIGlmIChkZXYtPm1jX2NvdW50PT0wICkKKwllbHNlIGlmIChtY19jb3VudCA9PSAwKQogCXsKIAkJZWVwcm9fc3cyYmFuazIoaW9hZGRyKTsgLyogYmUgQ0FSRUZVTCwgQkFOSyAyIG5vdyAqLwogCQltb2RlID0gaW5iKGlvYWRkciArIFJFRzIpOwpAQCAtMTMyOSwxMiArMTMzMCwxMCBAQAogCQlvdXR3KE1DX1NFVFVQLCBpb2FkZHIgKyBJT19QT1JUKTsKIAkJb3V0dygwLCBpb2FkZHIgKyBJT19QT1JUKTsKIAkJb3V0dygwLCBpb2FkZHIgKyBJT19QT1JUKTsKLQkJb3V0dyg2KihkZXYtPm1jX2NvdW50ICsgMSksIGlvYWRkciArIElPX1BPUlQpOworCQlvdXR3KDYgKiAobWNfY291bnQgKyAxKSwgaW9hZGRyICsgSU9fUE9SVCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykKLQkJewotCQkJZWFkZHJzPSh1bnNpZ25lZCBzaG9ydCAqKWRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWk9ZG1pLT5uZXh0OworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQkJZWFkZHJzID0gKHVuc2lnbmVkIHNob3J0ICopIGRtaS0+ZG1pX2FkZHI7CiAJCQlvdXR3KCplYWRkcnMrKywgaW9hZGRyICsgSU9fUE9SVCk7CiAJCQlvdXR3KCplYWRkcnMrKywgaW9hZGRyICsgSU9fUE9SVCk7CiAJCQlvdXR3KCplYWRkcnMrKywgaW9hZGRyICsgSU9fUE9SVCk7CkBAIC0xMzQ4LDcgKzEzNDcsNyBAQAogCQlvdXRiKE1DX1NFVFVQLCBpb2FkZHIpOwogCiAJCS8qIFVwZGF0ZSB0aGUgdHJhbnNtaXQgcXVldWUgKi8KLQkJaSA9IGxwLT50eF9lbmQgKyBYTVRfSEVBREVSICsgNiooZGV2LT5tY19jb3VudCArIDEpOworCQlpID0gbHAtPnR4X2VuZCArIFhNVF9IRUFERVIgKyA2ICogKG1jX2NvdW50ICsgMSk7CiAKIAkJaWYgKGxwLT50eF9zdGFydCAhPSBscC0+dHhfZW5kKQogCQl7CkBAIC0xMzgwLDggKzEzNzksOCBAQAogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgaWYgKChpICYgMHgwZikgPT0gMHgwMykJeyAvKiBNQy1Eb25lICovCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0IFJ4IG1vZGUgdG8gJWQgYWRkcmVzcyVzLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZGV2LT5tY19jb3VudCwKLQkJCQkJCWRldi0+bWNfY291bnQgPiAxID8gImVzIjoiIik7CisJCQkJCQlkZXYtPm5hbWUsIG1jX2NvdW50LAorCQkJCQkJbWNfY291bnQgPiAxID8gImVzIjoiIik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDZmYmZjOGUuLjcwMTNkYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAl1bnNpZ25lZCBzaG9ydCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgY291bnQgPSBkZXYtPm1jX2NvdW50OworCWludCBjb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCWludCBpOwogCWlmIChjb3VudCA+IDgpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRvbyBtYW55IG11bHRpY2FzdCBhZGRyZXNzZXMgKCVkKVxuIiwKQEAgLTE1ODgsMjMgKzE1ODgsMTkgQEAKIAogCW91dHcoQ09ORl9OUl9NVUxUSUNBU1QgJiB+MzEsIGlvYWRkcitTTV9QVFIpOwogCW91dHcoNipjb3VudCwgaW9hZGRyK1NIQURPVyhDT05GX05SX01VTFRJQ0FTVCkpOwotCWZvciAoaSA9IDAsIGRtaSA9IGRldi0+bWNfbGlzdDsgaSA8IGNvdW50OyBpKyssIGRtaSA9IGRtaS0+bmV4dCkgewotCQl1bnNpZ25lZCBzaG9ydCAqZGF0YTsKLQkJaWYgKCFkbWkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0b28gZmV3IG11bHRpY2FzdCBhZGRyZXNzZXNcbiIsIGRldi0+bmFtZSk7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJdW5zaWduZWQgc2hvcnQgKmRhdGEgPSAodW5zaWduZWQgc2hvcnQgKikgZG1pLT5kbWlfYWRkcjsKKworCQlpZiAoaSA9PSBjb3VudCkKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChkbWktPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGggZ2l2ZW4uXG4iLCBkZXYtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZGF0YSA9ICh1bnNpZ25lZCBzaG9ydCAqKWRtaS0+ZG1pX2FkZHI7CiAJCW91dHcoKENPTkZfTVVMVElDQVNUKyg2KmkpKSAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJCW91dHcoZGF0YVswXSwgaW9hZGRyK1NIQURPVyhDT05GX01VTFRJQ0FTVCsoNippKSkpOwogCQlvdXR3KChDT05GX01VTFRJQ0FTVCsoNippKSsyKSAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJCW91dHcoZGF0YVsxXSwgaW9hZGRyK1NIQURPVyhDT05GX01VTFRJQ0FTVCsoNippKSsyKSk7CiAJCW91dHcoKENPTkZfTVVMVElDQVNUKyg2KmkpKzQpICYgfjMxLCBpb2FkZHIrU01fUFRSKTsKIAkJb3V0dyhkYXRhWzJdLCBpb2FkZHIrU0hBRE9XKENPTkZfTVVMVElDQVNUKyg2KmkpKzQpKTsKKwkJaSsrOwogCX0KIH0KIApAQCAtMTYyNyw5ICsxNjIzLDkgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CiAgICAgICAgICAgICAgICAgZWV4cF9zZXR1cF9maWx0ZXIoZGV2KTsKLSAgICAgICAgICAgICAgICBpZiAobHAtPm9sZF9tY19jb3VudCAhPSBkZXYtPm1jX2NvdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGxwLT5vbGRfbWNfY291bnQgIT0gbmV0ZGV2X21jX2NvdW50KGRldikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtpY2sgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgbHAtPm9sZF9tY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBscC0+b2xkX21jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChraWNrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCA3YjYyMzM2Li5iMDA0ZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTE5NjcsNyArMTk2Nyw3IEBACiB7CiAJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGRldl9tY19saXN0ICprX21jbF9lbnRyeTsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWVoZWFfcHJvbWlzY3VvdXMoZGV2LCAxKTsKQEAgLTE5ODEsNyArMTk4MSw3IEBACiAJfQogCWVoZWFfYWxsbXVsdGkoZGV2LCAwKTsKIAotCWlmIChkZXYtPm1jX2NvdW50KSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlyZXQgPSBlaGVhX2Ryb3BfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAkJaWYgKHJldCkgewogCQkJLyogRHJvcHBpbmcgdGhlIGN1cnJlbnQgbXVsdGljYXN0IGxpc3QgZmFpbGVkLgpAQCAtMTk5MCwxNSArMTk5MCwxNCBAQAogCQkJZWhlYV9hbGxtdWx0aShkZXYsIDEpOwogCQl9CiAKLQkJaWYgKGRldi0+bWNfY291bnQgPiBwb3J0LT5hZGFwdGVyLT5tYXhfbWNfbWFjKSB7CisJCWlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IHBvcnQtPmFkYXB0ZXItPm1heF9tY19tYWMpIHsKIAkJCWVoZWFfaW5mbygiTWNhc3QgcmVnaXN0cmF0aW9uIGxpbWl0IHJlYWNoZWQgKDB4JWxseCkuICIKIAkJCQkgICJVc2UgQUxMTVVMVEkhIiwKIAkJCQkgIHBvcnQtPmFkYXB0ZXItPm1heF9tY19tYWMpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlmb3IgKGkgPSAwLCBrX21jbF9lbnRyeSA9IGRldi0+bWNfbGlzdDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywKLQkJCSAgICAga19tY2xfZW50cnkgPSBrX21jbF9lbnRyeS0+bmV4dCkKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoa19tY2xfZW50cnksIGRldikKIAkJCWVoZWFfYWRkX211bHRpY2FzdF9lbnRyeShwb3J0LCBrX21jbF9lbnRyeS0+ZG1pX2FkZHIpOwogCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggNjY4MTNjOS4uM2VlMzJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogCQlpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpCiAJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJwcm9taXNjdW91cyBtb2RlXG4iKTsKIAkJcHJpdi0+cnhmaWx0ZXIgPSBSWEZJTFRFUl9QUk9NSVNDOwotCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IGRldi0+bWNfY291bnQpIHsKKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJaWYgKG5ldGlmX21zZ19saW5rKHByaXYpKQogCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXNtdWx0aWNhc3QgbW9kZVxuIiwKIAkJCQkoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgPyAiYWxsLSIgOiAiIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCmluZGV4IGUxYzIwNzYuLmVlMDFmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyAxMEcgRXRoZXJuZXQgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMS4wLjEwMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEuMC4yNDFhIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDgtMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKIApAQCAtODksOSArODksMTIgQEAKIAlzcGlubG9ja190IGRldmNtZF9sb2NrOwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCBtY19hZGRyW0VOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOworCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWNfY291bnQ7CiAJaW50IGNzdW1fcnhfZW5hYmxlZDsKIAl1MzIgcG9ydF9tdHU7CisJdTMyIHJ4X2NvYWxlc2NlX3VzZWNzOworCXUzMiB0eF9jb2FsZXNjZV91c2VjczsKIAogCS8qIHdvcmsgcXVldWUgY2FjaGUgbGluZSBzZWN0aW9uICovCiAJX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3dxIHdxW0VOSUNfV1FfTUFYXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IGY4NzU3NTEuLmNmMDk4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNTEsNyArNTEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUICAgICAgICAgMHgwMDQzICAvKiBldGhlcm5ldCB2bmljICovCiAKIC8qIFN1cHBvcnRlZCBkZXZpY2VzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW5pY19pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGVuaWNfaWRfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoQ0lTQ08sIFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVQpIH0sCiAJeyAwLCB9CS8qIGVuZCBvZiB0YWJsZSAqLwogfTsKQEAgLTI2MSw2ICsyNjEsNjIgQEAKIAllbmljLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWNtZCkKK3sKKwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwllY21kLT50eF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtPnR4X2NvYWxlc2NlX3VzZWNzOworCWVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZW5pYy0+cnhfY29hbGVzY2VfdXNlY3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmljX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplY21kKQoreworCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgdHhfY29hbGVzY2VfdXNlY3M7CisJdTMyIHJ4X2NvYWxlc2NlX3VzZWNzOworCisJdHhfY29hbGVzY2VfdXNlY3MgPSBtaW5fdCh1MzIsCisJCUlOVFJfQ09BTEVTQ0VfSFdfVE9fVVNFQyhWTklDX0lOVFJfVElNRVJfTUFYKSwKKwkJZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MpOworCXJ4X2NvYWxlc2NlX3VzZWNzID0gbWluX3QodTMyLAorCQlJTlRSX0NPQUxFU0NFX0hXX1RPX1VTRUMoVk5JQ19JTlRSX1RJTUVSX01BWCksCisJCWVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKworCXN3aXRjaCAodm5pY19kZXZfZ2V0X2ludHJfbW9kZShlbmljLT52ZGV2KSkgeworCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX0lOVFg6CisJCWlmICh0eF9jb2FsZXNjZV91c2VjcyAhPSByeF9jb2FsZXNjZV91c2VjcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXZuaWNfaW50cl9jb2FsZXNjaW5nX3RpbWVyX3NldCgmZW5pYy0+aW50cltFTklDX0lOVFhfV1FfUlFdLAorCQkJSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHR4X2NvYWxlc2NlX3VzZWNzKSk7CisJCWJyZWFrOworCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSToKKwkJaWYgKHR4X2NvYWxlc2NlX3VzZWNzICE9IHJ4X2NvYWxlc2NlX3VzZWNzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KCZlbmljLT5pbnRyWzBdLAorCQkJSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHR4X2NvYWxlc2NlX3VzZWNzKSk7CisJCWJyZWFrOworCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSVg6CisJCXZuaWNfaW50cl9jb2FsZXNjaW5nX3RpbWVyX3NldCgmZW5pYy0+aW50cltFTklDX01TSVhfV1FdLAorCQkJSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHR4X2NvYWxlc2NlX3VzZWNzKSk7CisJCXZuaWNfaW50cl9jb2FsZXNjaW5nX3RpbWVyX3NldCgmZW5pYy0+aW50cltFTklDX01TSVhfUlFdLAorCQkJSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHJ4X2NvYWxlc2NlX3VzZWNzKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWVuaWMtPnR4X2NvYWxlc2NlX3VzZWNzID0gdHhfY29hbGVzY2VfdXNlY3M7CisJZW5pYy0+cnhfY29hbGVzY2VfdXNlY3MgPSByeF9jb2FsZXNjZV91c2VjczsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVuaWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGVuaWNfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IGVuaWNfZ2V0X2RydmluZm8sCkBAIC0yNzgsNiArMzM0LDggQEAKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCiAJLnNldF90c28gPSBlbmljX3NldF90c28sCisJLmdldF9jb2FsZXNjZSA9IGVuaWNfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgPSBlbmljX3NldF9jb2FsZXNjZSwKIAkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCiAJLnNldF9mbGFncyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAogfTsKQEAgLTM2MywxMiArNDIxLDEyIEBACiAJdTMyIG10dSA9IHZuaWNfZGV2X210dShlbmljLT52ZGV2KTsKIAogCWlmIChtdHUgJiYgbXR1ICE9IGVuaWMtPnBvcnRfbXR1KSB7CisJCWVuaWMtPnBvcnRfbXR1ID0gbXR1OwogCQlpZiAobXR1IDwgZW5pYy0+bmV0ZGV2LT5tdHUpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkJCSIlczogaW50ZXJmYWNlIE1UVSAoJWQpIHNldCBoaWdoZXIgIgogCQkJCSJ0aGFuIHN3aXRjaCBwb3J0IE1UVSAoJWQpXG4iLAogCQkJCWVuaWMtPm5ldGRldi0+bmFtZSwgZW5pYy0+bmV0ZGV2LT5tdHUsIG10dSk7Ci0JCWVuaWMtPnBvcnRfbXR1ID0gbXR1OwogCX0KIH0KIApAQCAtNjczLDcgKzczMSw3IEBACiAKIC8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkLCBvciBCSCAqLwogc3RhdGljIG5ldGRldl90eF90IGVuaWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IHZuaWNfd3EgKndxID0gJmVuaWMtPndxWzBdOwpAQCAtNzY0LDE1ICs4MjIsMTYgQEAKIHN0YXRpYyB2b2lkIGVuaWNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdCA9IG5ldGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3Q7CiAJaW50IGRpcmVjdGVkID0gMTsKIAlpbnQgbXVsdGljYXN0ID0gKG5ldGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSA/IDEgOiAwOwogCWludCBicm9hZGNhc3QgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpID8gMSA6IDA7CiAJaW50IHByb21pc2MgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA/IDEgOiAwOworCXVuc2lnbmVkIGludCBtY19jb3VudCA9IG5ldGRldl9tY19jb3VudChuZXRkZXYpOwogCWludCBhbGxtdWx0aSA9IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgICAobmV0ZGV2LT5tY19jb3VudCA+IEVOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSUyk7CisJCSAgICAgICBtY19jb3VudCA+IEVOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSUzsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBuZXRkZXYtPmZsYWdzIHwgKGFsbG11bHRpID8gSUZGX0FMTE1VTFRJIDogMCk7CiAJdTggbWNfYWRkcltFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlNdW0VUSF9BTEVOXTsKLQl1bnNpZ25lZCBpbnQgbWNfY291bnQgPSBuZXRkZXYtPm1jX2NvdW50OwogCXVuc2lnbmVkIGludCBpLCBqOwogCiAJaWYgKG1jX2NvdW50ID4gRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTKQpAQCAtNzgwLDggKzgzOSwxMSBAQAogCiAJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAKLQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGVuaWMtPnZkZXYsIGRpcmVjdGVkLAotCQltdWx0aWNhc3QsIGJyb2FkY2FzdCwgcHJvbWlzYywgYWxsbXVsdGkpOworCWlmIChlbmljLT5mbGFncyAhPSBmbGFncykgeworCQllbmljLT5mbGFncyA9IGZsYWdzOworCQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGVuaWMtPnZkZXYsIGRpcmVjdGVkLAorCQkJbXVsdGljYXN0LCBicm9hZGNhc3QsIHByb21pc2MsIGFsbG11bHRpKTsKKwl9CiAKIAkvKiBJcyB0aGVyZSBhbiBlYXNpZXIgd2F5PyAgVHJ5aW5nIHRvIG1pbmltaXplIHRvCiAJICogY2FsbHMgdG8gYWRkL2RlbCBtdWx0aWNhc3QgYWRkcnMuICBXZSBrZWVwIHRoZQpAQCAtNzg5LDkgKzg1MSwxMSBAQAogCSAqIGxvb2sgZm9yIGNoYW5nZXMgdG8gYWRkL2RlbC4KIAkgKi8KIAotCWZvciAoaSA9IDA7IGxpc3QgJiYgaSA8IG1jX2NvdW50OyBpKyspIHsKLQkJbWVtY3B5KG1jX2FkZHJbaV0sIGxpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIG5ldGRldikgeworCQlpZiAoaSA9PSBtY19jb3VudCkKKwkJCWJyZWFrOworCQltZW1jcHkobWNfYWRkcltpKytdLCBsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5tY19jb3VudDsgaSsrKSB7CkBAIC0xMDg0LDM0ICsxMTQ4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19ycV9kcm9wX2J1ZihzdHJ1Y3Qgdm5pY19ycSAqcnEsCi0Jc3RydWN0IGNxX2Rlc2MgKmNxX2Rlc2MsIHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmLAotCWludCBza2lwcGVkLCB2b2lkICpvcGFxdWUpCi17Ci0Jc3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHJxLT52ZGV2KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYnVmLT5vc19idWY7Ci0KLQlpZiAoc2tpcHBlZCkKLQkJcmV0dXJuOwotCi0JcGNpX3VubWFwX3NpbmdsZShlbmljLT5wZGV2LCBidWYtPmRtYV9hZGRyLAotCQlidWYtPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci19Ci0KLXN0YXRpYyBpbnQgZW5pY19ycV9zZXJ2aWNlX2Ryb3Aoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBzdHJ1Y3QgY3FfZGVzYyAqY3FfZGVzYywKLQl1OCB0eXBlLCB1MTYgcV9udW1iZXIsIHUxNiBjb21wbGV0ZWRfaW5kZXgsIHZvaWQgKm9wYXF1ZSkKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IHZuaWNfZGV2X3ByaXYodmRldik7Ci0KLQl2bmljX3JxX3NlcnZpY2UoJmVuaWMtPnJxW3FfbnVtYmVyXSwgY3FfZGVzYywKLQkJY29tcGxldGVkX2luZGV4LCBWTklDX1JRX1JFVFVSTl9ERVNDLAotCQllbmljX3JxX2Ryb3BfYnVmLCBvcGFxdWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZW5pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZW5pYywgbmFwaSk7CkBAIC0xMTE5LDYgKzExNTUsNyBAQAogCXVuc2lnbmVkIGludCBycV93b3JrX3RvX2RvID0gYnVkZ2V0OwogCXVuc2lnbmVkIGludCB3cV93b3JrX3RvX2RvID0gLTE7IC8qIG5vIGxpbWl0ICovCiAJdW5zaWduZWQgaW50ICB3b3JrX2RvbmUsIHJxX3dvcmtfZG9uZSwgd3Ffd29ya19kb25lOworCWludCBlcnI7CiAKIAkvKiBTZXJ2aWNlIFJRIChmaXJzdCkgYW5kIFdRCiAJICovCkBAIC0xMTQyLDE2ICsxMTc5LDE5IEBACiAJCQkwIC8qIGRvbid0IHVubWFzayBpbnRyICovLAogCQkJMCAvKiBkb24ndCByZXNldCBpbnRyIHRpbWVyICovKTsKIAotCWlmIChycV93b3JrX2RvbmUgPiAwKSB7CisJZXJyID0gdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKIAotCQkvKiBSZXBsZW5pc2ggUlEKLQkJICovCisJLyogQnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkLiBTdGF5IGluIHBvbGxpbmcKKwkgKiBtb2RlIHNvIHdlIGNhbiB0cnkgdG8gZmlsbCB0aGUgcmluZyBhZ2Fpbi4KKwkgKi8KIAotCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljLT5ycV9hbGxvY19idWYpOworCWlmIChlcnIpCisJCXJxX3dvcmtfZG9uZSA9IHJxX3dvcmtfdG9fZG87CiAKLQl9IGVsc2UgeworCWlmIChycV93b3JrX2RvbmUgPCBycV93b3JrX3RvX2RvKSB7CiAKLQkJLyogSWYgbm8gd29yayBkb25lLCBmbHVzaCBhbGwgTFJPcyBhbmQgZXhpdCBwb2xsaW5nCisJCS8qIFNvbWUgd29yayBkb25lLCBidXQgbm90IGVub3VnaCB0byBzdGF5IGluIHBvbGxpbmcsCisJCSAqIGZsdXNoIGFsbCBMUk9zIGFuZCBleGl0IHBvbGxpbmcKIAkJICovCiAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKQEAgLTExNzAsNiArMTIxMCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKIAl1bnNpZ25lZCBpbnQgd29ya190b19kbyA9IGJ1ZGdldDsKIAl1bnNpZ25lZCBpbnQgd29ya19kb25lOworCWludCBlcnI7CiAKIAkvKiBTZXJ2aWNlIFJRCiAJICovCkBAIC0xMTc3LDI1ICsxMjE4LDMwIEBACiAJd29ya19kb25lID0gdm5pY19jcV9zZXJ2aWNlKCZlbmljLT5jcVtFTklDX0NRX1JRXSwKIAkJd29ya190b19kbywgZW5pY19ycV9zZXJ2aWNlLCBOVUxMKTsKIAotCWlmICh3b3JrX2RvbmUgPiAwKSB7CisJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCisJICogY3ljbGUuICBBbiBpbnRyIGV2ZW50IGlzIHRoZSBjb21wbGV0aW9uIG9mIGEKKwkgKiBSUSBwYWNrZXQuCisJICovCiAKLQkJLyogUmVwbGVuaXNoIFJRCi0JCSAqLwotCi0JCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7Ci0KLQkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCi0JCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCi0JCSAqIFJRIHBhY2tldC4KLQkJICovCi0KKwlpZiAod29ya19kb25lID4gMCkKIAkJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0sCiAJCQl3b3JrX2RvbmUsCiAJCQkwIC8qIGRvbid0IHVubWFzayBpbnRyICovLAogCQkJMCAvKiBkb24ndCByZXNldCBpbnRyIHRpbWVyICovKTsKLQl9IGVsc2UgewogCi0JCS8qIElmIG5vIHdvcmsgZG9uZSwgZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZworCWVyciA9IHZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CisKKwkvKiBCdWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuIFN0YXkgaW4gcG9sbGluZyBtb2RlCisJICogc28gd2UgY2FuIHRyeSB0byBmaWxsIHRoZSByaW5nIGFnYWluLgorCSAqLworCisJaWYgKGVycikKKwkJd29ya19kb25lID0gd29ya190b19kbzsKKworCWlmICh3b3JrX2RvbmUgPCB3b3JrX3RvX2RvKSB7CisKKwkJLyogU29tZSB3b3JrIGRvbmUsIGJ1dCBub3QgZW5vdWdoIHRvIHN0YXkgaW4gcG9sbGluZywKKwkJICogZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZwogCQkgKi8KIAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQpAQCAtMTMwNCw2ICsxMzUwLDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgZW5pY19zeW5jaHJvbml6ZV9pcnFzKHN0cnVjdCBlbmljICplbmljKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfSU5UWDoKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0k6CisJCXN5bmNocm9uaXplX2lycShlbmljLT5wZGV2LT5pcnEpOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgorCQlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGVuaWMtPm1zaXhfZW50cnlbaV0udmVjdG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGVuaWNfbm90aWZ5X3NldChzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAlpbnQgZXJyOwpAQCAtMTM2MCwxMSArMTQyNCwxMyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKSB7Ci0JCWVyciA9IHZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbaV0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7Ci0JCWlmIChlcnIpIHsKKwkJdm5pY19ycV9maWxsKCZlbmljLT5ycVtpXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKKwkJLyogTmVlZCBhdCBsZWFzdCBvbmUgYnVmZmVyIG9uIHJpbmcgdG8gZ2V0IGdvaW5nICovCisJCWlmICh2bmljX3JxX2Rlc2NfdXNlZCgmZW5pYy0+cnFbaV0pID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCQkiJXM6IFVuYWJsZSB0byBhbGxvYyByZWNlaXZlIGJ1ZmZlcnMuXG4iLAogCQkJCW5ldGRldi0+bmFtZSk7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X25vdGlmeV91bnNldDsKIAkJfQogCX0KQEAgLTE0MDksMTYgKzE0NzUsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCisJZm9yIChpID0gMDsgaSA8IGVuaWMtPmludHJfY291bnQ7IGkrKykKKwkJdm5pY19pbnRyX21hc2soJmVuaWMtPmludHJbaV0pOworCisJZW5pY19zeW5jaHJvbml6ZV9pcnFzKGVuaWMpOworCiAJZGVsX3RpbWVyX3N5bmMoJmVuaWMtPm5vdGlmeV90aW1lcik7CiAKIAlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAl2bmljX2Rldl9kaXNhYmxlKGVuaWMtPnZkZXYpOwogCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJbmFwaV9kaXNhYmxlKCZlbmljLT5uYXBpKTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQotCQl2bmljX2ludHJfbWFzaygmZW5pYy0+aW50cltpXSk7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+d3FfY291bnQ7IGkrKykgewogCQllcnIgPSB2bmljX3dxX2Rpc2FibGUoJmVuaWMtPndxW2ldKTsKQEAgLTE0MzYsMTEgKzE1MDUsNiBAQAogCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKLQkodm9pZCl2bmljX2NxX3NlcnZpY2UoJmVuaWMtPmNxW0VOSUNfQ1FfUlFdLAotCQktMSwgZW5pY19ycV9zZXJ2aWNlX2Ryb3AsIE5VTEwpOwotCSh2b2lkKXZuaWNfY3Ffc2VydmljZSgmZW5pYy0+Y3FbRU5JQ19DUV9XUV0sCi0JCS0xLCBlbmljX3dxX3NlcnZpY2UsIE5VTEwpOwotCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPndxX2NvdW50OyBpKyspCiAJCXZuaWNfd3FfY2xlYW4oJmVuaWMtPndxW2ldLCBlbmljX2ZyZWVfd3FfYnVmKTsKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+cnFfY291bnQ7IGkrKykKQEAgLTE3NjIsNyArMTgyNiw4IEBACiAJZXJyID0gZW5pY19zZXRfaW50cl9tb2RlKGVuaWMpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlLCBhYm9ydGluZy5cbiIpOworCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlIGJhc2VkIG9uIHJlc291cmNlICIKKwkJCSJjb3VudHMgYW5kIHN5c3RlbSBjYXBhYmlsaXRpZXMsIGFib3J0aW5nLlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xOTg2LDYgKzIwNTEsOSBAQAogCQlnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDsKIAl9CiAKKwllbmljLT50eF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtPmNvbmZpZy5pbnRyX3RpbWVyX3VzZWM7CisJZW5pYy0+cnhfY29hbGVzY2VfdXNlY3MgPSBlbmljLT50eF9jb2FsZXNjZV91c2VjczsKKwogCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZlbmljX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmVuaWNfZXRodG9vbF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKaW5kZXggMzIxMTExNC4uMDI4MzliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwpAQCAtNjYsMjEgKzY2LDIxIEBACiAJR0VUX0NPTkZJRyh3cV9kZXNjX2NvdW50KTsKIAlHRVRfQ09ORklHKHJxX2Rlc2NfY291bnQpOwogCUdFVF9DT05GSUcobXR1KTsKLQlHRVRfQ09ORklHKGludHJfdGltZXIpOwogCUdFVF9DT05GSUcoaW50cl90aW1lcl90eXBlKTsKIAlHRVRfQ09ORklHKGludHJfbW9kZSk7CisJR0VUX0NPTkZJRyhpbnRyX3RpbWVyX3VzZWMpOwogCiAJYy0+d3FfZGVzY19jb3VudCA9CiAJCW1pbl90KHUzMiwgRU5JQ19NQVhfV1FfREVTQ1MsCiAJCW1heF90KHUzMiwgRU5JQ19NSU5fV1FfREVTQ1MsCiAJCWMtPndxX2Rlc2NfY291bnQpKTsKLQljLT53cV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZjA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMTYgKi8KKwljLT53cV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZTA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMzIgKi8KIAogCWMtPnJxX2Rlc2NfY291bnQgPQogCQltaW5fdCh1MzIsIEVOSUNfTUFYX1JRX0RFU0NTLAogCQltYXhfdCh1MzIsIEVOSUNfTUlOX1JRX0RFU0NTLAogCQljLT5ycV9kZXNjX2NvdW50KSk7Ci0JYy0+cnFfZGVzY19jb3VudCAmPSAweGZmZmZmZmYwOyAvKiBtdXN0IGJlIGFsaWduZWQgdG8gZ3JvdXBzIG9mIDE2ICovCisJYy0+cnFfZGVzY19jb3VudCAmPSAweGZmZmZmZmUwOyAvKiBtdXN0IGJlIGFsaWduZWQgdG8gZ3JvdXBzIG9mIDMyICovCiAKIAlpZiAoYy0+bXR1ID09IDApCiAJCWMtPm10dSA9IDE1MDA7CkBAIC04OCwxNSArODgsMTcgQEAKIAkJbWF4X3QodTE2LCBFTklDX01JTl9NVFUsCiAJCWMtPm10dSkpOwogCi0JYy0+aW50cl90aW1lciA9IG1pbl90KHUxNiwgVk5JQ19JTlRSX1RJTUVSX01BWCwgYy0+aW50cl90aW1lcik7CisJYy0+aW50cl90aW1lcl91c2VjID0gbWluX3QodTMyLAorCQlJTlRSX0NPQUxFU0NFX0hXX1RPX1VTRUMoVk5JQ19JTlRSX1RJTUVSX01BWCksCisJCWMtPmludHJfdGltZXJfdXNlYyk7CiAKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBNQUMgYWRkciAlcE0gd3EvcnEgJWQvJWRcbiIsCiAJCWVuaWMtPm1hY19hZGRyLCBjLT53cV9kZXNjX2NvdW50LCBjLT5ycV9kZXNjX2NvdW50KTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBtdHUgJWQgY3N1bSB0eC9yeCAlZC8lZCB0c28vbHJvICVkLyVkICIKLQkJImludHIgdGltZXIgJWRcbiIsCisJCSJpbnRyIHRpbWVyICVkIHVzZWNcbiIsCiAJCWMtPm10dSwgRU5JQ19TRVRUSU5HKGVuaWMsIFRYQ1NVTSksCiAJCUVOSUNfU0VUVElORyhlbmljLCBSWENTVU0pLCBFTklDX1NFVFRJTkcoZW5pYywgVFNPKSwKLQkJRU5JQ19TRVRUSU5HKGVuaWMsIExSTyksIGMtPmludHJfdGltZXIpOworCQlFTklDX1NFVFRJTkcoZW5pYywgTFJPKSwgYy0+aW50cl90aW1lcl91c2VjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDcgKzMwNSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKSB7CiAJCXZuaWNfaW50cl9pbml0KCZlbmljLT5pbnRyW2ldLAotCQkJZW5pYy0+Y29uZmlnLmludHJfdGltZXIsCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcoZW5pYy0+Y29uZmlnLmludHJfdGltZXJfdXNlYyksCiAJCQllbmljLT5jb25maWcuaW50cl90aW1lcl90eXBlLAogCQkJbWFza19vbl9hc3NlcnRpb24pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwppbmRleCAyOWE0OGU4Li42OWI5YjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCkBAIC0zNiw3ICszNiw2IEBACiB9OwogCiAjZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQotI2RlZmluZSBWTklDX0RFVl9DQVBfUEVSQkkJMHgwMDAyCiAKIHN0cnVjdCB2bmljX2RldiB7CiAJdm9pZCAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZW5ldC5oCmluZGV4IDYzMzJhYzkuLjhlZWI2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2VuZXQuaApAQCAtMjAsNiArMjAsMTAgQEAKICNpZm5kZWYgX1ZOSUNfRU5JQ19IXwogI2RlZmluZSBfVk5JQ19FTklDX0hfCiAKKy8qIEhhcmR3YXJlIGludHIgY29hbGVzY2UgdGltZXIgaXMgaW4gdW5pdHMgb2YgMS41dXMgKi8KKyNkZWZpbmUgSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHVzZWMpICgodXNlYykgKiAyLzMpCisjZGVmaW5lIElOVFJfQ09BTEVTQ0VfSFdfVE9fVVNFQyh1c2VjKSAoKHVzZWMpICogMy8yKQorCiAvKiBEZXZpY2Utc3BlY2lmaWMgcmVnaW9uOiBlbmV0IGNvbmZpZ3VyYXRpb24gKi8KIHN0cnVjdCB2bmljX2VuZXRfY29uZmlnIHsKIAl1MzIgZmxhZ3M7CkBAIC0zMCw2ICszNCw3IEBACiAJdTggaW50cl90aW1lcl90eXBlOwogCXU4IGludHJfbW9kZTsKIAljaGFyIGRldm5hbWVbMTZdOworCXUzMiBpbnRyX3RpbWVyX3VzZWM7CiB9OwogCiAjZGVmaW5lIFZFTkVURl9UU08JCTB4MQkvKiBUU08gZW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKaW5kZXggMWY4Nzg2ZC4uMzkzNDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCkBAIC01MCwxMiArNTAsMTggQEAKIHZvaWQgdm5pY19pbnRyX2luaXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwgdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIsCiAJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdHlwZSwgdW5zaWduZWQgaW50IG1hc2tfb25fYXNzZXJ0aW9uKQogewotCWlvd3JpdGUzMihjb2FsZXNjaW5nX3RpbWVyLCAmaW50ci0+Y3RybC0+Y29hbGVzY2luZ190aW1lcik7CisJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KGludHIsIGNvYWxlc2NpbmdfdGltZXIpOwogCWlvd3JpdGUzMihjb2FsZXNjaW5nX3R5cGUsICZpbnRyLT5jdHJsLT5jb2FsZXNjaW5nX3R5cGUpOwogCWlvd3JpdGUzMihtYXNrX29uX2Fzc2VydGlvbiwgJmludHItPmN0cmwtPm1hc2tfb25fYXNzZXJ0aW9uKTsKIAlpb3dyaXRlMzIoMCwgJmludHItPmN0cmwtPmludF9jcmVkaXRzKTsKIH0KIAordm9pZCB2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwKKwl1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190aW1lcikKK3sKKwlpb3dyaXRlMzIoY29hbGVzY2luZ190aW1lciwgJmludHItPmN0cmwtPmNvYWxlc2NpbmdfdGltZXIpOworfQorCiB2b2lkIHZuaWNfaW50cl9jbGVhbihzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQogewogCWlvd3JpdGUzMigwLCAmaW50ci0+Y3RybC0+aW50X2NyZWRpdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKaW5kZXggOWE1MzYwNC4uMmZlNmM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCkBAIC02MSw2ICs2MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdm5pY19pbnRyX21hc2soc3RydWN0IHZuaWNfaW50ciAqaW50cikKIHsKIAlpb3dyaXRlMzIoMSwgJmludHItPmN0cmwtPm1hc2spOworCSh2b2lkKWlvcmVhZDMyKCZpbnRyLT5jdHJsLT5tYXNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cyhzdHJ1Y3Qgdm5pY19pbnRyICppbnRyLApAQCAtMTAxLDYgKzEwMiw4IEBACiAJdW5zaWduZWQgaW50IGluZGV4KTsKIHZvaWQgdm5pY19pbnRyX2luaXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwgdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIsCiAJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdHlwZSwgdW5zaWduZWQgaW50IG1hc2tfb25fYXNzZXJ0aW9uKTsKK3ZvaWQgdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KHN0cnVjdCB2bmljX2ludHIgKmludHIsCisJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIpOwogdm9pZCB2bmljX2ludHJfY2xlYW4oc3RydWN0IHZuaWNfaW50ciAqaW50cik7CiAKICNlbmRpZiAvKiBfVk5JQ19JTlRSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKaW5kZXggZWVhZjMyOS4uY2Y4MGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaApAQCAtNDEsMTIgKzQxLDEyIEBACiAjZGVmaW5lIE5JQ19DRkdfSUdfVkxBTl9TVFJJUF9FTl9NQVNLX0ZJRUxECTFVTAogI2RlZmluZSBOSUNfQ0ZHX0lHX1ZMQU5fU1RSSVBfRU5fU0hJRlQJCTI0CiAKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjQJCSgxIDw8IDApCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNAkJKDEgPDwgMSkKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjYJCSgxIDw8IDIpCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNgkJKDEgPDwgMykKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjZfRVgJCSgxIDw8IDQpCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNl9FWAkoMSA8PCA1KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNAkJKDEgPDwgMSkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY0CQkoMSA8PCAyKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNgkJKDEgPDwgMykKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2CQkoMSA8PCA0KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNl9FWAkJKDEgPDwgNSkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2X0VYCSgxIDw8IDYpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX3NldF9uaWNfY2ZnKHUzMiAqbmljX2NmZywKIAl1OCByc3NfZGVmYXVsdF9jcHUsIHU4IHJzc19oYXNoX3R5cGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggNDE0OTRmNy4uMzljMjcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlcGljX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlcGljX3BjaV90YmwpID0gewogCXsgMHgxMEI4LCAweDAwMDUsIDB4MTA5MiwgMHgwQUI0LCAwLCAwLCBTTVNDXzgzQzE3MF8wIH0sCiAJeyAweDEwQjgsIDB4MDAwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU01TQ184M0MxNzAgfSwKIAl7IDB4MTBCOCwgMHgwMDA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtMTM5MCwyMSArMTM5MCwyMCBAQAogCQlvdXRsKDB4MDAyQywgaW9hZGRyICsgUnhDdHJsKTsKIAkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiAwKSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZSBpZiAoKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRoZXJlIGlzIGFwcGFyZW50bHkgYSBjaGlwIGJ1Zywgc28gdGhlIG11bHRpY2FzdCBmaWx0ZXIKIAkJICAgaXMgbmV2ZXIgZW5hYmxlZC4gKi8KIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJb3V0bCgweDAwMEMsIGlvYWRkciArIFJ4Q3RybCk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDApIHsKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCW91dGwoMHgwMDA0LCBpb2FkZHIgKyBSeEN0cmwpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsJCQkJCS8qIE5ldmVyIGV4ZWN1dGVkLCBmb3Igbm93LiAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQl1bnNpZ25lZCBpbnQgYml0X25yID0KIAkJCQlldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgzZjsKIAkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gM10gfD0gKDEgPDwgYml0X25yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKaW5kZXggNzFiZmVlYy4uZDNhYmVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoMTZpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKQEAgLTEzNTksNyArMTM1OSw3IEBACiB7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCi0JaWYoZGV2LT5tY19jb3VudCB8fCBkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKQorCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgZGV2LT5mbGFncyYoSUZGX0FMTE1VTFRJfElGRl9QUk9NSVNDKSkKIAl7CiAJCW91dGIoMywgaW9hZGRyICsgUkVDRUlWRV9NT0RFX1JFRyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aG9jLmMgYi9kcml2ZXJzL25ldC9ldGhvYy5jCmluZGV4IGJkMWRiOTIuLjIwOTc0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aG9jLmMKKysrIGIvZHJpdmVycy9uZXQvZXRob2MuYwpAQCAtNzU1LDcgKzc1NSw3IEBACiB7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbW9kZSA9IGV0aG9jX3JlYWQocHJpdiwgTU9ERVIpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWMgPSBOVUxMOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAJdTMyIGhhc2hbMl0gPSB7IDAsIDAgfTsKIAogCS8qIHNldCBsb29wYmFjayBtb2RlIGlmIHJlcXVlc3RlZCAqLwpAQCAtNzgzLDggKzc4Myw4IEBACiAJCWhhc2hbMF0gPSAweGZmZmZmZmZmOwogCQloYXNoWzFdID0gMHhmZmZmZmZmZjsKIAl9IGVsc2UgewotCQlmb3IgKG1jID0gZGV2LT5tY19saXN0OyBtYzsgbWMgPSBtYy0+bmV4dCkgewotCQkJdTMyIGNyYyA9IGV0aGVyX2NyYyhtYy0+ZG1pX2FkZHJsZW4sIG1jLT5kbWlfYWRkcik7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jLCBkZXYpIHsKKwkJCXUzMiBjcmMgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jLT5kbWlfYWRkcik7CiAJCQlpbnQgYml0ID0gKGNyYyA+PiAyNikgJiAweDNmOwogCQkJaGFzaFtiaXQgPj4gNV0gfD0gMSA8PCAoYml0ICYgMHgxZik7CiAJCX0KQEAgLTkwNCw3ICs5MDQsNyBAQAogCX0KIAogCW1taW8gPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAotCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwkJCXJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKIAlpZiAoIW1taW8pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSBzcGFjZVxuIik7CiAJCXJldCA9IC1FTlhJTzsKQEAgLTkxNyw3ICs5MTcsNyBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CiAJaWYgKHJlcykgewogCQltZW0gPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAotCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwkJCXJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKIAkJaWYgKCFtZW0pIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IG1lbW9yeSBzcGFjZVxuIik7CiAJCQlyZXQgPSAtRU5YSU87CkBAIC05NDUsNyArOTQ1LDcgQEAKIAlwcml2LT5kbWFfYWxsb2MgPSAwOwogCiAJcHJpdi0+aW9iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgbmV0ZGV2LT5iYXNlX2FkZHIsCi0JCQltbWlvLT5lbmQgLSBtbWlvLT5zdGFydCArIDEpOworCQkJcmVzb3VyY2Vfc2l6ZShtbWlvKSk7CiAJaWYgKCFwcml2LT5pb2Jhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIEkvTyBtZW1vcnkgc3BhY2VcbiIpOwogCQlyZXQgPSAtRU5YSU87CkBAIC05NTQsNyArOTU0LDcgQEAKIAogCWlmIChuZXRkZXYtPm1lbV9lbmQpIHsKIAkJcHJpdi0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsCi0JCQluZXRkZXYtPm1lbV9zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CisJCQluZXRkZXYtPm1lbV9zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAkJaWYgKCFwcml2LT5tZW1iYXNlKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgbWVtb3J5IHNwYWNlXG4iKTsKIAkJCXJldCA9IC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V3cmszLmMgYi9kcml2ZXJzL25ldC9ld3JrMy5jCmluZGV4IGRkNGJhMDEuLjkxZTU5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V3cmszLmMKKysrIGIvZHJpdmVycy9uZXQvZXdyazMuYwpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIHN0YXRpYyB2b2lkIFNldE11bHRpY2FzdEZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBld3JrM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCWludCBpOwogCWNoYXIgKmFkZHJzLCBiaXQsIGJ5dGU7CkBAIC0xMjEzLDkgKzEyMTMsOCBAQAogCQl9CiAKIAkJLyogVXBkYXRlIHRhYmxlICovCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsJLyogZm9yIGVhY2ggYWRkcmVzcyBpbiB0aGUgbGlzdCAqLworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQkJZG1pID0gZG1pLT5uZXh0OwogCQkJaWYgKCgqYWRkcnMgJiAweDAxKSA9PSAxKSB7CS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQkJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgYWRkcnMpOwogCQkJCWhhc2hjb2RlID0gY3JjICYgKCgxIDw8IDkpIC0gMSk7CS8qIGhhc2hjb2RlIGlzIDkgTFNiIG9mIENSQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCBkYWM0ZTU5Li45ZDVhZDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtMTc4NiwxOCArMTc4NiwxNiBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBDUl9XX1BST00gfCBDUl9XX0FCIHwgQ1JfV19BTTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBDUl9XX0FCIHwgQ1JfV19BTTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJaW50IGk7CiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJdW5zaWduZWQgaW50IGJpdDsKIAkJCWJpdCA9IChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2KSBeIDB4M0Y7CiAJCQltY19maWx0ZXJbYml0ID4+IDVdIHw9ICgxIDw8IGJpdCk7CkBAIC0xOTQxLDcgKzE5MzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZmVhbG54X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShmZWFsbnhfcGNpX3RibCkgPSB7CiAJezB4MTUxNiwgMHgwODAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7MHgxNTE2LCAweDA4MDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAogCXsweDE1MTYsIDB4MDg5MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IDE2YTFkNTguLjlmOThjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC0xMTI4LDYgKzExMjgsMjYgQEAKIAl9LAogfTsKIAorc3RhdGljIHBoeV9pbmZvX3QgcGh5X2luZm9fbGFuODcwMCA9IHsKKwkweDAwMDdDMEMsCisJIkxBTjg3MDAiLAorCShjb25zdCBwaHlfY21kX3QgW10pIHsgLyogY29uZmlnICovCisJCXsgbWtfbWlpX3JlYWQoTUlJX1JFR19DUiksIG1paV9wYXJzZV9jciB9LAorCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfQU5BUiksIG1paV9wYXJzZV9hbmFyIH0sCisJCXsgbWtfbWlpX2VuZCwgfQorCX0sCisJKGNvbnN0IHBoeV9jbWRfdCBbXSkgeyAvKiBzdGFydHVwICovCisJCXsgbWtfbWlpX3dyaXRlKE1JSV9SRUdfQ1IsIDB4MTIwMCksIE5VTEwgfSwgLyogYXV0b25lZ290aWF0ZSAqLworCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfU1IpLCBtaWlfcGFyc2Vfc3IgfSwKKwkJeyBta19taWlfZW5kLCB9CisJfSwKKwkoY29uc3QgcGh5X2NtZF90IFtdKSB7IC8qIGFjdF9pbnQgKi8KKwkJeyBta19taWlfZW5kLCB9CisJfSwKKwkoY29uc3QgcGh5X2NtZF90IFtdKSB7IC8qIHNodXRkb3duICovCisJCXsgbWtfbWlpX2VuZCwgfQorCX0sCit9OwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgcGh5X2luZm9fdCBjb25zdCAqIGNvbnN0IHBoeV9pbmZvW10gPSB7CkBAIC0xMTM3LDYgKzExNTcsNyBAQAogCSZwaHlfaW5mb19hbTc5Yzg3NCwKIAkmcGh5X2luZm9fa3M4NzIxYmwsCiAJJnBoeV9pbmZvX2RwODM4NDgsCisJJnBoeV9pbmZvX2xhbjg3MDAsCiAJTlVMTAogfTsKIApAQCAtMTU1NCw3ICsxNTc1LDcgQEAKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgYml0LCBkYXRhLCBjcmMsIHRtcDsKKwl1bnNpZ25lZCBpbnQgaSwgYml0LCBkYXRhLCBjcmMsIHRtcDsKIAl1bnNpZ25lZCBjaGFyIGhhc2g7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC0xNTgzLDkgKzE2MDQsNyBAQAogCXdyaXRlbCgwLCBmZXAtPmh3cCArIEZFQ19HUlBfSEFTSF9UQUJMRV9ISUdIKTsKIAl3cml0ZWwoMCwgZmVwLT5od3AgKyBGRUNfR1JQX0hBU0hfVEFCTEVfTE9XKTsKIAotCWRtaSA9IGRldi0+bWNfbGlzdDsKLQotCWZvciAoaiA9IDA7IGogPCBkZXYtPm1jX2NvdW50OyBqKyssIGRtaSA9IGRtaS0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCS8qIE9ubHkgc3VwcG9ydCBncm91cCBtdWx0aWNhc3QgZm9yIG5vdyAqLwogCQlpZiAoIShkbWktPmRtaV9hZGRyWzBdICYgMSkpCiAJCQljb250aW51ZTsKQEAgLTE2NTgsNiArMTY3Nyw3IEBACiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJ1ZmRlc2MgKmNiZF9iYXNlOworCXN0cnVjdCBidWZkZXNjICpiZHA7CiAJaW50IGk7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KQEAgLTE3MTAsNiArMTczMCwzNCBAQAogCS8qIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IeiAqLwogCWZlcC0+cGh5X3NwZWVkID0gKCgoKGNsa19nZXRfcmF0ZShmZXAtPmNsaykgLyAyICsgNDk5OTk5OSkKIAkJCQkJLyAyNTAwMDAwKSAvIDIpICYgMHgzRikgPDwgMTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLworCWJkcCA9IGZlcC0+cnhfYmRfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKKworCQkvKiBJbml0aWFsaXplIHRoZSBCRCBmb3IgZXZlcnkgZnJhZ21lbnQgaW4gdGhlIHBhZ2UuICovCisJCWJkcC0+Y2JkX3NjID0gMDsKKwkJYmRwKys7CisJfQorCisJLyogU2V0IHRoZSBsYXN0IGJ1ZmZlciB0byB3cmFwICovCisJYmRwLS07CisJYmRwLT5jYmRfc2MgfD0gQkRfU0NfV1JBUDsKKworCS8qIC4uLmFuZCB0aGUgc2FtZSBmb3IgdHJhbnNtaXQgKi8KKwliZHAgPSBmZXAtPnR4X2JkX2Jhc2U7CisJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgQkQgZm9yIGV2ZXJ5IGZyYWdtZW50IGluIHRoZSBwYWdlLiAqLworCQliZHAtPmNiZF9zYyA9IDA7CisJCWJkcC0+Y2JkX2J1ZmFkZHIgPSAwOworCQliZHArKzsKKwl9CisKKwkvKiBTZXQgdGhlIGxhc3QgYnVmZmVyIHRvIHdyYXAgKi8KKwliZHAtLTsKKwliZHAtPmNiZF9zYyB8PSBCRF9TQ19XUkFQOworCiAJZmVjX3Jlc3RhcnQoZGV2LCAwKTsKIAogCS8qIFF1ZXVlIHVwIGNvbW1hbmQgdG8gZGV0ZWN0IHRoZSBQSFkgYW5kIGluaXRpYWxpemUgdGhlCkBAIC0xNzMwLDcgKzE3NzgsNiBAQAogZmVjX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGR1cGxleCkKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgYnVmZGVzYyAqYmRwOwogCWludCBpOwogCiAJLyogV2hhY2sgYSByZXNldC4gIFdlIHNob3VsZCB3YWl0IGZvciB0aGlzLiAqLwpAQCAtMTc2OCwzMyArMTgxNSw2IEBACiAJCX0KIAl9CiAKLQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KLQliZHAgPSBmZXAtPnJ4X2JkX2Jhc2U7Ci0JZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7Ci0KLQkJLyogSW5pdGlhbGl6ZSB0aGUgQkQgZm9yIGV2ZXJ5IGZyYWdtZW50IGluIHRoZSBwYWdlLiAqLwotCQliZHAtPmNiZF9zYyA9IEJEX0VORVRfUlhfRU1QVFk7Ci0JCWJkcCsrOwotCX0KLQotCS8qIFNldCB0aGUgbGFzdCBidWZmZXIgdG8gd3JhcCAqLwotCWJkcC0tOwotCWJkcC0+Y2JkX3NjIHw9IEJEX1NDX1dSQVA7Ci0KLQkvKiAuLi5hbmQgdGhlIHNhbWUgZm9yIHRyYW5zbWl0ICovCi0JYmRwID0gZmVwLT50eF9iZF9iYXNlOwotCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewotCi0JCS8qIEluaXRpYWxpemUgdGhlIEJEIGZvciBldmVyeSBmcmFnbWVudCBpbiB0aGUgcGFnZS4gKi8KLQkJYmRwLT5jYmRfc2MgPSAwOwotCQliZHAtPmNiZF9idWZhZGRyID0gMDsKLQkJYmRwKys7Ci0JfQotCi0JLyogU2V0IHRoZSBsYXN0IGJ1ZmZlciB0byB3cmFwICovCi0JYmRwLS07Ci0JYmRwLT5jYmRfc2MgfD0gQkRfU0NfV1JBUDsKLQogCS8qIEVuYWJsZSBNSUkgbW9kZSAqLwogCWlmIChkdXBsZXgpIHsKIAkJLyogTUlJIGVuYWJsZSAvIEZEIGVuYWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggODQ4ZTg0MC4uMGRiZDcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC01NzUsMTkgKzU3NSwxNiBAQAogCQkJb3V0X2JlMzIoJmZlYy0+Z2FkZHIyLCAweGZmZmZmZmZmKTsKIAkJfSBlbHNlIHsKIAkJCXUzMiBjcmM7Ci0JCQlpbnQgaTsKIAkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQkJdTMyIGdhZGRyMSA9IDB4MDAwMDAwMDA7CiAJCQl1MzIgZ2FkZHIyID0gMHgwMDAwMDAwMDsKIAotCQkJZG1pID0gZGV2LT5tY19saXN0OwotCQkJZm9yIChpPTA7IGk8ZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJCWNyYyA9IGV0aGVyX2NyY19sZSg2LCBkbWktPmRtaV9hZGRyKSA+PiAyNjsKIAkJCQlpZiAoY3JjID49IDMyKQogCQkJCQlnYWRkcjEgfD0gMSA8PCAoY3JjLTMyKTsKIAkJCQllbHNlCiAJCQkJCWdhZGRyMiB8PSAxIDw8IGNyYzsKLQkJCQlkbWkgPSBkbWktPm5leHQ7CiAJCQl9CiAJCQlvdXRfYmUzMigmZmVjLT5nYWRkcjEsIGdhZGRyMSk7CiAJCQlvdXRfYmUzMigmZmVjLT5nYWRkcjIsIGdhZGRyMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDNjMzQwNDguLmNhMDVlNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0zMDk1LDcgKzMwOTUsNyBAQAogCX0gZWxzZSB7CiAJCXBmZiB8PSBOVlJFR19QRkZfTVlBRERSOwogCi0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IGRldi0+bWNfbGlzdCkgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJCXUzMiBhbHdheXNPZmZbMl07CiAJCQl1MzIgYWx3YXlzT25bMl07CiAKQEAgLTMxMDUsOCArMzEwNSw3IEBACiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqd2FsazsKIAotCQkJCXdhbGsgPSBkZXYtPm1jX2xpc3Q7Ci0JCQkJd2hpbGUgKHdhbGsgIT0gTlVMTCkgeworCQkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKHdhbGssIGRldikgewogCQkJCQl1MzIgYSwgYjsKIAkJCQkJYSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIHdhbGstPmRtaV9hZGRyKTsKIAkJCQkJYiA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopICgmd2Fsay0+ZG1pX2FkZHJbNF0pKTsKQEAgLTMxMTQsNyArMzExMyw2IEBACiAJCQkJCWFsd2F5c09mZlswXSAmPSB+YTsKIAkJCQkJYWx3YXlzT25bMV0gJj0gYjsKIAkJCQkJYWx3YXlzT2ZmWzFdICY9IH5iOwotCQkJCQl3YWxrID0gd2Fsay0+bmV4dDsKIAkJCQl9CiAJCQl9CiAJCQlhZGRyWzBdID0gYWx3YXlzT25bMF07CkBAIC02MTk4LDcgKzYxOTYsNyBAQAogI2RlZmluZSBudl9yZXN1bWUgTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaV90YmwpID0gewogCXsJLyogbkZvcmNlIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDFDMyksCiAJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvS2NvbmZpZwppbmRleCA1NjJlYTY4Li5mYzA3M2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9LY29uZmlnCkBAIC0xLDkgKzEsMTMgQEAKIGNvbmZpZyBGU19FTkVUCiAgICAgICAgdHJpc3RhdGUgIkZyZWVzY2FsZSBFdGhlcm5ldCBEcml2ZXIiCi0gICAgICAgZGVwZW5kcyBvbiBDUE0xIHx8IENQTTIKKyAgICAgICBkZXBlbmRzIG9uIENQTTEgfHwgQ1BNMiB8fCBQUENfTVBDNTEyeAogICAgICAgIHNlbGVjdCBNSUkKICAgICAgICBzZWxlY3QgUEhZTElCCiAKK2NvbmZpZyBGU19FTkVUX01QQzUxMjFfRkVDCisJZGVmX2Jvb2wgeSBpZiAoRlNfRU5FVCAmJiBQUENfTVBDNTEyeCkKKwlzZWxlY3QgRlNfRU5FVF9IQVNfRkVDCisKIGNvbmZpZyBGU19FTkVUX0hBU19TQ0MKIAlib29sICJDaGlwIGhhcyBhbiBTQ0MgdXNhYmxlIGZvciBldGhlcm5ldCIKIAlkZXBlbmRzIG9uIEZTX0VORVQgJiYgKENQTTEgfHwgQ1BNMikKQEAgLTE2LDEzICsyMCwxMyBAQAogCiBjb25maWcgRlNfRU5FVF9IQVNfRkVDCiAJYm9vbCAiQ2hpcCBoYXMgYW4gRkVDIHVzYWJsZSBmb3IgZXRoZXJuZXQiCi0JZGVwZW5kcyBvbiBGU19FTkVUICYmIENQTTEKKwlkZXBlbmRzIG9uIEZTX0VORVQgJiYgKENQTTEgfHwgRlNfRU5FVF9NUEM1MTIxX0ZFQykKIAlzZWxlY3QgRlNfRU5FVF9NRElPX0ZFQwogCWRlZmF1bHQgeQogCiBjb25maWcgRlNfRU5FVF9NRElPX0ZFQwogCXRyaXN0YXRlICJNRElPIGRyaXZlciBmb3IgRkVDIgotCWRlcGVuZHMgb24gRlNfRU5FVCAmJiBDUE0xCisJZGVwZW5kcyBvbiBGU19FTkVUICYmIChDUE0xIHx8IEZTX0VORVRfTVBDNTEyMV9GRUMpCiAKIGNvbmZpZyBGU19FTkVUX01ESU9fRkNDCiAJdHJpc3RhdGUgIk1ESU8gZHJpdmVyIGZvciBGQ0MiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCBlYzJmNTAzLi4wNzcwZTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTEwOCw5ICsxMDgsNyBAQAogCQkgKiB0aGUgbGFzdCBpbmRpY2F0b3Igc2hvdWxkIGJlIHNldC4KIAkJICovCiAJCWlmICgoc2MgJiBCRF9FTkVUX1JYX0xBU1QpID09IDApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIHJjdiBpcyBub3QgK2xhc3RcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKGZlcC0+ZGV2LCAicmN2IGlzIG5vdCArbGFzdFxuIik7CiAKIAkJLyoKIAkJICogQ2hlY2sgZm9yIGVycm9ycy4KQEAgLTE3OCw5ICsxNzYsOCBAQAogCQkJCXJlY2VpdmVkKys7CiAJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJCQkgICAgICAgIjogJXMgTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJZGV2X3dhcm4oZmVwLT5kZXYsCisJCQkJCSAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwogCQkJCWZlcC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXNrYm4gPSBza2I7CiAJCQl9CkBAIC0yNDIsOSArMjM5LDcgQEAKIAkJICogdGhlIGxhc3QgaW5kaWNhdG9yIHNob3VsZCBiZSBzZXQuCiAJCSAqLwogCQlpZiAoKHNjICYgQkRfRU5FVF9SWF9MQVNUKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJCSAgICAgICAiOiAlcyByY3YgaXMgbm90ICtsYXN0XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2FybihmZXAtPmRldiwgInJjdiBpcyBub3QgK2xhc3RcbiIpOwogCiAJCS8qCiAJCSAqIENoZWNrIGZvciBlcnJvcnMuCkBAIC0zMTMsOSArMzA4LDggQEAKIAkJCQlyZWNlaXZlZCsrOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JCQkJICAgICAgICI6ICVzIE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWRldl93YXJuKGZlcC0+ZGV2LAorCQkJCQkgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKIAkJCQlmZXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQlza2JuID0gc2tiOwogCQkJfQpAQCAtMzg4LDEwICszODIsMTAgQEAKIAkJfSBlbHNlCiAJCQlmZXAtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAotCQlpZiAoc2MgJiBCRF9FTkVUX1RYX1JFQURZKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJCSAgICAgICAiOiAlcyBIRVkhIEVuZXQgeG1pdCBpbnRlcnJ1cHQgYW5kIFRYX1JFQURZLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQlpZiAoc2MgJiBCRF9FTkVUX1RYX1JFQURZKSB7CisJCQlkZXZfd2FybihmZXAtPmRldiwKKwkJCQkgIkhFWSEgRW5ldCB4bWl0IGludGVycnVwdCBhbmQgVFhfUkVBRFkuXG4iKTsKKwkJfQogCiAJCS8qCiAJCSAqIERlZmVycmVkIG1lYW5zIHNvbWUgY29sbGlzaW9ucyBvY2N1cnJlZCBkdXJpbmcgdHJhbnNtaXQsCkBAIC01MTEsOSArNTA1LDggQEAKIAlmb3IgKGkgPSAwLCBiZHAgPSBmZXAtPnJ4X2JkX2Jhc2U7IGkgPCBmZXAtPnJ4X3Jpbmc7IGkrKywgYmRwKyspIHsKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihFTkVUX1JYX0ZSU0laRSk7CiAJCWlmIChza2IgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJCSAgICAgICAiOiAlcyBNZW1vcnkgc3F1ZWV6ZSwgdW5hYmxlIHRvIGFsbG9jYXRlIHNrYlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oZmVwLT5kZXYsCisJCQkJICJNZW1vcnkgc3F1ZWV6ZSwgdW5hYmxlIHRvIGFsbG9jYXRlIHNrYlxuIik7CiAJCQlicmVhazsKIAkJfQogCQlza2JfYWxpZ24oc2tiLCBFTkVUX1JYX0FMSUdOKTsKQEAgLTU4Nyw2ICs1ODAsNDAgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQworLyoKKyAqIE1QQzUxMjEgRkVDIHJlcXVlcmllcyA0LWJ5dGUgYWxpZ25tZW50IGZvciBUWCBkYXRhIGJ1ZmZlciEKKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICp0eF9za2JfYWxpZ25fd29ya2Fyb3VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKwlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogQWxsb2MgbmV3IHNrYiAqLworCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgNCk7CisJaWYgKCFuZXdfc2tiKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCWRldl93YXJuKGZlcC0+ZGV2LAorCQkJCSAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHR4IHBhY2tldC5cbiIpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIE1ha2Ugc3VyZSBuZXcgc2tiIGlzIHByb3Blcmx5IGFsaWduZWQgKi8KKwlza2JfYWxpZ24obmV3X3NrYiwgNCk7CisKKwkvKiBDb3B5IGRhdGEgdG8gbmV3IHNrYiAuLi4gKi8KKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgbmV3X3NrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXNrYl9wdXQobmV3X3NrYiwgc2tiLT5sZW4pOworCisJLyogLi4uIGFuZCBmcmVlIGFuIG9sZCBvbmUgKi8KKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJcmV0dXJuIG5ld19za2I7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBmc19lbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTk1LDYgKzYyMiwxOSBAQAogCXUxNiBzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisjaWZkZWYgQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUMKKwlpZiAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJiAweDMpIHsKKwkJc2tiID0gdHhfc2tiX2FsaWduX3dvcmthcm91bmQoZGV2LCBza2IpOworCQlpZiAoIXNrYikgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgbG9zdCBwYWNrZXQgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisJCQkgKiBpbiB0eF9za2JfYWxpZ25fd29ya2Fyb3VuZCgpLiBIb3BlZnVsbHkgb3JpZ2luYWwKKwkJCSAqIHNrYiBpcyBzdGlsbCB2YWxpZCwgc28gdHJ5IHRyYW5zbWl0IGl0IGxhdGVyLgorCQkJICovCisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9CisjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZmVwLT50eF9sb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNjEwLDggKzY1MCw3IEBACiAJCSAqIE9vb3BzLiAgQWxsIHRyYW5zbWl0IGJ1ZmZlcnMgYXJlIGZ1bGwuICBCYWlsIG91dC4KIAkJICogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc2luY2UgdGhlIHR4IHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIHR4IHF1ZXVlIGZ1bGwhLlxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oZmVwLT5kZXYsICJ0eCBxdWV1ZSBmdWxsIS5cbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC03ODgsOCArODI3LDcgQEAKIAlyID0gcmVxdWVzdF9pcnEoZmVwLT5pbnRlcnJ1cHQsIGZzX2VuZXRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSJmc19lbmV0LW1hYyIsIGRldik7CiAJaWYgKHIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAiOiAlcyBDb3VsZCBub3QgYWxsb2NhdGUgRlNfRU5FVCBJUlEhIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2VycihmZXAtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBGU19FTkVUIElSUSEiKTsKIAkJaWYgKGZlcC0+ZnBpLT51c2VfbmFwaSkKIAkJCW5hcGlfZGlzYWJsZSgmZmVwLT5uYXBpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDUzLDcgKzEwOTEsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfYmQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogZnNfZW5ldDogJXBNXG4iLCBuZGV2LT5uYW1lLCBuZGV2LT5kZXZfYWRkcik7CisJcHJfaW5mbygiJXM6IGZzX2VuZXQ6ICVwTVxuIiwgbmRldi0+bmFtZSwgbmRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExMDMsMTEgKzExNDEsMTggQEAKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZTX0VORVRfSEFTX0ZFQworI2lmZGVmIENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1mZWMiLAorCQkuZGF0YSA9ICh2b2lkICopJmZzX2ZlY19vcHMsCisJfSwKKyNlbHNlCiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wscHExLWZlYy1lbmV0IiwKIAkJLmRhdGEgPSAodm9pZCAqKSZmc19mZWNfb3BzLAogCX0sCiAjZW5kaWYKKyNlbmRpZgogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNfZW5ldF9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCmluZGV4IGVmMDFlMDkuLjFlY2U0YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oCkBAIC0xMyw5ICsxMyw1NiBAQAogCiAjaWZkZWYgQ09ORklHX0NQTTEKICNpbmNsdWRlIDxhc20vY3BtMS5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GU19FTkVUX0hBU19GRUMpCisjaW5jbHVkZSA8YXNtL2NwbS5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQykKKy8qIE1QQzUxMjEgRkVDIGhhcyBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0ICovCitzdHJ1Y3QgZmVjIHsKKwl1MzIgZmVjX3Jlc2VydmVkMDsKKwl1MzIgZmVjX2lldmVudDsJCQkvKiBJbnRlcnJ1cHQgZXZlbnQgcmVnICovCisJdTMyIGZlY19pbWFzazsJCQkvKiBJbnRlcnJ1cHQgbWFzayByZWcgKi8KKwl1MzIgZmVjX3Jlc2VydmVkMTsKKwl1MzIgZmVjX3JfZGVzX2FjdGl2ZTsJCS8qIFJlY2VpdmUgZGVzY3JpcHRvciByZWcgKi8KKwl1MzIgZmVjX3hfZGVzX2FjdGl2ZTsJCS8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgcmVnICovCisJdTMyIGZlY19yZXNlcnZlZDJbM107CisJdTMyIGZlY19lY250cmw7CQkJLyogRXRoZXJuZXQgY29udHJvbCByZWcgKi8KKwl1MzIgZmVjX3Jlc2VydmVkM1s2XTsKKwl1MzIgZmVjX21paV9kYXRhOwkJLyogTUlJIG1hbmFnZSBmcmFtZSByZWcgKi8KKwl1MzIgZmVjX21paV9zcGVlZDsJCS8qIE1JSSBzcGVlZCBjb250cm9sIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQ0WzddOworCXUzMiBmZWNfbWliX2N0cmxzdGF0OwkJLyogTUlCIGNvbnRyb2wvc3RhdHVzIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQ1WzddOworCXUzMiBmZWNfcl9jbnRybDsJCS8qIFJlY2VpdmUgY29udHJvbCByZWcgKi8KKwl1MzIgZmVjX3Jlc2VydmVkNlsxNV07CisJdTMyIGZlY194X2NudHJsOwkJLyogVHJhbnNtaXQgQ29udHJvbCByZWcgKi8KKwl1MzIgZmVjX3Jlc2VydmVkN1s3XTsKKwl1MzIgZmVjX2FkZHJfbG93OwkJLyogTG93IDMyYml0cyBNQUMgYWRkcmVzcyAqLworCXUzMiBmZWNfYWRkcl9oaWdoOwkJLyogSGlnaCAxNmJpdHMgTUFDIGFkZHJlc3MgKi8KKwl1MzIgZmVjX29wZDsJCQkvKiBPcGNvZGUgKyBQYXVzZSBkdXJhdGlvbiAqLworCXUzMiBmZWNfcmVzZXJ2ZWQ4WzEwXTsKKwl1MzIgZmVjX2hhc2hfdGFibGVfaGlnaDsJLyogSGlnaCAzMmJpdHMgaGFzaCB0YWJsZSAqLworCXUzMiBmZWNfaGFzaF90YWJsZV9sb3c7CQkvKiBMb3cgMzJiaXRzIGhhc2ggdGFibGUgKi8KKwl1MzIgZmVjX2dycF9oYXNoX3RhYmxlX2hpZ2g7CS8qIEhpZ2ggMzJiaXRzIGhhc2ggdGFibGUgKi8KKwl1MzIgZmVjX2dycF9oYXNoX3RhYmxlX2xvdzsJLyogTG93IDMyYml0cyBoYXNoIHRhYmxlICovCisJdTMyIGZlY19yZXNlcnZlZDlbN107CisJdTMyIGZlY194X3dtcms7CQkJLyogRklGTyB0cmFuc21pdCB3YXRlciBtYXJrICovCisJdTMyIGZlY19yZXNlcnZlZDEwOworCXUzMiBmZWNfcl9ib3VuZDsJCS8qIEZJRk8gcmVjZWl2ZSBib3VuZCByZWcgKi8KKwl1MzIgZmVjX3JfZnN0YXJ0OwkJLyogRklGTyByZWNlaXZlIHN0YXJ0IHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQxMVsxMV07CisJdTMyIGZlY19yX2Rlc19zdGFydDsJCS8qIFJlY2VpdmUgZGVzY3JpcHRvciByaW5nICovCisJdTMyIGZlY194X2Rlc19zdGFydDsJCS8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZyAqLworCXUzMiBmZWNfcl9idWZmX3NpemU7CQkvKiBNYXhpbXVtIHJlY2VpdmUgYnVmZiBzaXplICovCisJdTMyIGZlY19yZXNlcnZlZDEyWzI2XTsKKwl1MzIgZmVjX2RtYV9jb250cm9sOwkJLyogRE1BIEVuZGlhbiBhbmQgb3RoZXIgY3RybCAqLworfTsKKyNlbmRpZgogCiBzdHJ1Y3QgZmVjX2luZm8gewotCWZlY190IF9faW9tZW0gKmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwOwogCXUzMiBtaWlfc3BlZWQ7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCmluZGV4IDIyZTVhODQuLmNmNGY2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAogCS8qIGlmIGFsbCBtdWx0aSBvciB0b28gbWFueSBtdWx0aWNhc3RzOyBqdXN0IGVuYWJsZSBhbGwgKi8KIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICE9IDAgfHwKLQkgICAgZGV2LT5tY19jb3VudCA+IEZDQ19NQVhfTVVMVElDQVNUX0FERFJTKSB7CisJICAgIG5ldGRldl9tY19jb3VudChkZXYpID4gRkNDX01BWF9NVUxUSUNBU1RfQUREUlMpIHsKIAogCQlXMzIoZXAsIGZlbl9nYWRkcmgsIDB4ZmZmZmZmZmYpOwogCQlXMzIoZXAsIGZlbl9nYWRkcmwsIDB4ZmZmZmZmZmYpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPT0gMCkgewogCQlzZXRfbXVsdGljYXN0X3N0YXJ0KGRldik7Ci0JCWZvciAocG1jID0gZGV2LT5tY19saXN0OyBwbWMgIT0gTlVMTDsgcG1jID0gcG1jLT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwbWMsIGRldikKIAkJCXNldF9tdWx0aWNhc3Rfb25lKGRldiwgcG1jLT5kbWlfYWRkcik7CiAJCXNldF9tdWx0aWNhc3RfZmluaXNoKGRldik7CiAJfSBlbHNlCkBAIC00NzYsOCArNDc2LDkgQEAKIAogc3RhdGljIHZvaWQgZXZfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGludF9ldmVudHMpCiB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkgICAgICAgIjogJXMgRlNfRU5FVCBFUlJPUihzKSAweCV4XG4iLCBkZXYtPm5hbWUsIGludF9ldmVudHMpOworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXZfd2FybihmZXAtPmRldiwgIkZTX0VORVQgRVJST1IocykgMHgleFxuIiwgaW50X2V2ZW50cyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCwgaW50ICpzaXplcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKaW5kZXggY2E3YmNiOC4uY2QyYzZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKQEAgLTgwLDcgKzgwLDcgQEAKICAqLwogI2RlZmluZSBGRUNfUkVTRVRfREVMQVkJCTUwCiAKLXN0YXRpYyBpbnQgd2hhY2tfcmVzZXQoZmVjX3QgX19pb21lbSAqZmVjcCkKK3N0YXRpYyBpbnQgd2hhY2tfcmVzZXQoc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwKQogewogCWludCBpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOwogCiAJRlMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9QUk9NKTsKIH0KQEAgLTIxNiwxMSArMjE2LDExIEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2ZpbmlzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCS8qIGlmIGFsbCBtdWx0aSBvciB0b28gbWFueSBtdWx0aWNhc3RzOyBqdXN0IGVuYWJsZSBhbGwgKi8KIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICE9IDAgfHwKLQkgICAgZGV2LT5tY19jb3VudCA+IEZFQ19NQVhfTVVMVElDQVNUX0FERFJTKSB7CisJICAgIG5ldGRldl9tY19jb3VudChkZXYpID4gRkVDX01BWF9NVUxUSUNBU1RfQUREUlMpIHsKIAkJZmVwLT5mZWMuaHRoaSA9IDB4ZmZmZmZmZmZVOwogCQlmZXAtPmZlYy5odGxvID0gMHhmZmZmZmZmZlU7CiAJfQpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPT0gMCkgewogCQlzZXRfbXVsdGljYXN0X3N0YXJ0KGRldik7Ci0JCWZvciAocG1jID0gZGV2LT5tY19saXN0OyBwbWMgIT0gTlVMTDsgcG1jID0gcG1jLT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwbWMsIGRldikKIAkJCXNldF9tdWx0aWNhc3Rfb25lKGRldiwgcG1jLT5kbWlfYWRkcik7CiAJCXNldF9tdWx0aWNhc3RfZmluaXNoKGRldik7CiAJfSBlbHNlCkBAIC0yNDYsNyArMjQ2LDcgQEAKIHN0YXRpYyB2b2lkIHJlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAJY29uc3Qgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IGZlcC0+ZnBpOwogCWRtYV9hZGRyX3QgcnhfYmRfYmFzZV9waHlzLCB0eF9iZF9iYXNlX3BoeXM7CiAJaW50IHI7CkBAIC0yNTcsOCArMjU3LDcgQEAKIAogCXIgPSB3aGFja19yZXNldChmZXAtPmZlYy5mZWNwKTsKIAlpZiAociAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCQkJIjogJXMgRkVDIFJlc2V0IEZBSUxFRCFcbiIsIGRldi0+bmFtZSk7CisJCWRldl9lcnIoZmVwLT5kZXYsICJGRUMgUmVzZXQgRkFJTEVEIVxuIik7CiAJLyoKIAkgKiBTZXQgc3RhdGlvbiBhZGRyZXNzLgogCSAqLwpAQCAtMjgxLDcgKzI4MCwxMSBAQAogCSAqIFNldCBtYXhpbXVtIHJlY2VpdmUgYnVmZmVyIHNpemUuCiAJICovCiAJRlcoZmVjcCwgcl9idWZmX3NpemUsIFBLVF9NQVhCTFJfU0laRSk7CisjaWZkZWYgQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUMKKwlGVyhmZWNwLCByX2NudHJsLCBQS1RfTUFYQlVGX1NJWkUgPDwgMTYpOworI2Vsc2UKIAlGVyhmZWNwLCByX2hhc2gsIFBLVF9NQVhCVUZfU0laRSk7CisjZW5kaWYKIAogCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzICovCiAJcnhfYmRfYmFzZV9waHlzID0gZmVwLT5yaW5nX21lbV9hZGRyOwpAQCAtMjk4LDcgKzMwMSwxMSBAQAogCS8qCiAJICogRW5hYmxlIGJpZyBlbmRpYW4gYW5kIGRvbid0IGNhcmUgYWJvdXQgU0RNQSBGQy4KIAkgKi8KKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQworCUZTKGZlY3AsIGRtYV9jb250cm9sLCAweEMwMDAwMDAwKTsKKyNlbHNlCiAJRlcoZmVjcCwgZnVuX2NvZGUsIDB4NzgwMDAwMDApOworI2VuZGlmCiAKIAkvKgogCSAqIFNldCBNSUkgc3BlZWQuCkBAIC0zMDksOSArMzE2LDE3IEBACiAJICogQ2xlYXIgYW55IG91dHN0YW5kaW5nIGludGVycnVwdC4KIAkgKi8KIAlGVyhmZWNwLCBpZXZlbnQsIDB4ZmZjMCk7CisjaWZuZGVmIENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDCiAJRlcoZmVjcCwgaXZlYywgKHZpcnFfdG9faHcoZmVwLT5pbnRlcnJ1cHQpIC8gMikgPDwgMjkpOwogCiAJRlcoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CS8qIE1JSSBlbmFibGUgKi8KKyNlbHNlCisJLyoKKwkgKiBPbmx5IHNldCBNSUkgbW9kZSAtIGRvIG5vdCB0b3VjaCBtYXhpbXVtIGZyYW1lIGxlbmd0aAorCSAqIGNvbmZpZ3VyZWQgYmVmb3JlLgorCSAqLworCUZTKGZlY3AsIHJfY250cmwsIEZFQ19SQ05UUkxfTUlJX01PREUpOworI2VuZGlmCiAJLyoKIAkgKiBhZGp1c3QgdG8gZHVwbGV4IG1vZGUKIAkgKi8KQEAgLTM0MCw3ICszNTUsNyBAQAogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3Qgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IGZlcC0+ZnBpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlzdHJ1Y3QgZmVjX2luZm8qIGZlY2k9IGZlcC0+cGh5ZGV2LT5idXMtPnByaXY7CiAKQEAgLTM1NSw5ICszNzAsNyBAQAogCQl1ZGVsYXkoMSk7CiAKIAlpZiAoaSA9PSBGRUNfUkVTRVRfREVMQVkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAiOiAlcyBGRUMgdGltZW91dCBvbiBncmFjZWZ1bCB0cmFuc21pdCBzdG9wXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oZmVwLT5kZXYsICJGRUMgdGltZW91dCBvbiBncmFjZWZ1bCB0cmFuc21pdCBzdG9wXG4iKTsKIAkvKgogCSAqIERpc2FibGUgRkVDLiBMZXQgb25seSBNSUkgaW50ZXJydXB0cy4KIAkgKi8KQEAgLTM3OCw3ICszOTEsNyBAQAogc3RhdGljIHZvaWQgbmFwaV9jbGVhcl9yeF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCUZXKGZlY3AsIGlldmVudCwgRkVDX05BUElfUlhfRVZFTlRfTVNLKTsKIH0KQEAgLTM4Niw3ICszOTksNyBAQAogc3RhdGljIHZvaWQgbmFwaV9lbmFibGVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGUyhmZWNwLCBpbWFzaywgRkVDX05BUElfUlhfRVZFTlRfTVNLKTsKIH0KQEAgLTM5NCw3ICs0MDcsNyBAQAogc3RhdGljIHZvaWQgbmFwaV9kaXNhYmxlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOwogCiAJRkMoZmVjcCwgaW1hc2ssIEZFQ19OQVBJX1JYX0VWRU5UX01TSyk7CiB9CkBAIC00MDIsNyArNDE1LDcgQEAKIHN0YXRpYyB2b2lkIHJ4X2JkX2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGVyhmZWNwLCByX2Rlc19hY3RpdmUsIDB4MDEwMDAwMDApOwogfQpAQCAtNDEwLDcgKzQyMyw3IEBACiBzdGF0aWMgdm9pZCB0eF9raWNrc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGVyhmZWNwLCB4X2Rlc19hY3RpdmUsIDB4MDEwMDAwMDApOwogfQpAQCAtNDE4LDcgKzQzMSw3IEBACiBzdGF0aWMgdTMyIGdldF9pbnRfZXZlbnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOwogCiAJcmV0dXJuIEZSKGZlY3AsIGlldmVudCkgJiBGUihmZWNwLCBpbWFzayk7CiB9CkBAIC00MjYsMzIgKzQzOSwzMyBAQAogc3RhdGljIHZvaWQgY2xlYXJfaW50X2V2ZW50cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaW50X2V2ZW50cykKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGVyhmZWNwLCBpZXZlbnQsIGludF9ldmVudHMpOwogfQogCiBzdGF0aWMgdm9pZCBldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaW50X2V2ZW50cykKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCSAgICAgICAiOiAlcyBGRUMgRVJST1IocykgMHgleFxuIiwgZGV2LT5uYW1lLCBpbnRfZXZlbnRzKTsKKwlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2X3dhcm4oZmVwLT5kZXYsICJGRUMgRVJST1IocykgMHgleFxuIiwgaW50X2V2ZW50cyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCwgaW50ICpzaXplcCkKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKCpzaXplcCA8IHNpemVvZihmZWNfdCkpCisJaWYgKCpzaXplcCA8IHNpemVvZihzdHJ1Y3QgZmVjKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1jcHlfZnJvbWlvKHAsIGZlcC0+ZmVjLmZlY3AsIHNpemVvZihmZWNfdCkpOworCW1lbWNweV9mcm9taW8ocCwgZmVwLT5mZWMuZmVjcCwgc2l6ZW9mKHN0cnVjdCBmZWMpKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGdldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBzaXplb2YoZmVjX3QpOworCXJldHVybiBzaXplb2Yoc3RydWN0IGZlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHR4X3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKaW5kZXggMDA4Y2RkOS4uYzQ5MGE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAJLyogaWYgYWxsIG11bHRpIG9yIHRvbyBtYW55IG11bHRpY2FzdHM7IGp1c3QgZW5hYmxlIGFsbCAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIT0gMCB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gU0NDX01BWF9NVUxUSUNBU1RfQUREUlMpIHsKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBTQ0NfTUFYX01VTFRJQ0FTVF9BRERSUykgewogCiAJCVcxNihlcCwgc2VuX2dhZGRyMSwgMHhmZmZmKTsKIAkJVzE2KGVwLCBzZW5fZ2FkZHIyLCAweGZmZmYpOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPT0gMCkgewogCQlzZXRfbXVsdGljYXN0X3N0YXJ0KGRldik7Ci0JCWZvciAocG1jID0gZGV2LT5tY19saXN0OyBwbWMgIT0gTlVMTDsgcG1jID0gcG1jLT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwbWMsIGRldikKIAkJCXNldF9tdWx0aWNhc3Rfb25lKGRldiwgcG1jLT5kbWlfYWRkcik7CiAJCXNldF9tdWx0aWNhc3RfZmluaXNoKGRldik7CiAJfSBlbHNlCkBAIC0zNjcsOSArMzY3LDcgQEAKIAkJdWRlbGF5KDEpOwogCiAJaWYgKGkgPT0gU0NDX1JFU0VUX0RFTEFZKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgIjogJXMgU0NDIHRpbWVvdXQgb24gZ3JhY2VmdWwgdHJhbnNtaXQgc3RvcFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCWRldl93YXJuKGZlcC0+ZGV2LCAiU0NDIHRpbWVvdXQgb24gZ3JhY2VmdWwgdHJhbnNtaXQgc3RvcFxuIik7CiAKIAlXMTYoc2NjcCwgc2NjX3NjY20sIDApOwogCUMzMihzY2NwLCBzY2NfZ3NtcmwsIFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKTsKQEAgLTQyOSw4ICs0MjcsOSBAQAogCiBzdGF0aWMgdm9pZCBldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaW50X2V2ZW50cykKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCSAgICAgICAiOiAlcyBTQ0MgRVJST1IocykgMHgleFxuIiwgZGV2LT5uYW1lLCBpbnRfZXZlbnRzKTsKKwlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2X3dhcm4oZmVwLT5kZXYsICJTQ0MgRVJST1IocykgMHgleFxuIiwgaW50X2V2ZW50cyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCwgaW50ICpzaXplcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKaW5kZXggOTZlYmE0Mi4uNTk0NGI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgZnNfZW5ldF9mZWNfbWlpX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cyAsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgZmVjX2luZm8qIGZlYyA9IGJ1cy0+cHJpdjsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVjLT5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlYy0+ZmVjcDsKIAlpbnQgaSwgcmV0ID0gLTE7CiAKIAlCVUdfT04oKGluX2JlMzIoJmZlY3AtPmZlY19yX2NudHJsKSAmIEZFQ19SQ05UUkxfTUlJX01PREUpID09IDApOwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIGludCBmc19lbmV0X2ZlY19taWlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCB1MTYgdmFsKQogewogCXN0cnVjdCBmZWNfaW5mbyogZmVjID0gYnVzLT5wcml2OwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZWMtPmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVjLT5mZWNwOwogCWludCBpOwogCiAJLyogdGhpcyBtdXN0IG5ldmVyIGhhcHBlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDhiZDNjOWYuLjZhYTUyNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTI4NjMsMTEgKzI4NjMsMTEgQEAKIAkJCWVtX251bSA9IDA7CiAJCX0KIAotCQlpZiAoZGV2LT5tY19jb3VudCA9PSAwKQorCQlpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCQlyZXR1cm47CiAKIAkJLyogUGFyc2UgdGhlIGxpc3QsIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJpdHMgKi8KLQkJZm9yKG1jX3B0ciA9IGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBkZXYpIHsKIAkJCWlmIChpZHggPCBlbV9udW0pIHsKIAkJCQlnZmFyX3NldF9tYWNfZm9yX2FkZHIoZGV2LCBpZHgsCiAJCQkJCQltY19wdHItPmRtaV9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dyZXRoLmMgYi9kcml2ZXJzL25ldC9ncmV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ncmV0aC5jCkBAIC0wLDAgKzEsMTYzNCBAQAorLyoKKyAqIEFlcm9mbGV4IEdhaXNsZXIgR1JFVEggMTAvMTAwLzFHIEV0aGVybmV0IE1BQy4KKyAqCisgKiAyMDA1LTIwMDkgKGMpIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyBHUkVUSCAxMC8xMDAgYW5kIEdSRVRIIDEwLzEwMC8xRyBFdGhlcm5ldCBNQUNzCisgKiBhdmFpbGFibGUgaW4gdGhlIEdSTElCIFZIREwgSVAgY29yZSBsaWJyYXJ5LgorICoKKyAqIEZ1bGwgZG9jdW1lbnRhdGlvbiBvZiBib3RoIGNvcmVzIGNhbiBiZSBmb3VuZCBoZXJlOgorICogaHR0cDovL3d3dy5nYWlzbGVyLmNvbS9wcm9kdWN0cy9ncmxpYi9ncmlwLnBkZgorICoKKyAqIFRoZSBHaWdhYml0IHZlcnNpb24gc3VwcG9ydHMgc2NhdHRlci9nYXRoZXIgRE1BLCBhbnkgYWxpZ25tZW50IG9mCisgKiBidWZmZXJzIGFuZCBjaGVja3N1bSBvZmZsb2FkaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQ29udHJpYnV0b3JzOiBLcmlzdG9mZmVyIEdsZW1ibworICogICAgICAgICAgICAgICBEYW5pZWwgSGVsbHN0cm9tCisgKiAgICAgICAgICAgICAgIE1hcmtvIElzb21ha2kKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIENPTkZJR19TUEFSQworI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZ3JldGguaCIKKworI2RlZmluZSBHUkVUSF9ERUZfTVNHX0VOQUJMRQkgIFwKKwkoTkVUSUZfTVNHX0RSVgkJfCBcCisJIE5FVElGX01TR19QUk9CRQl8IFwKKwkgTkVUSUZfTVNHX0xJTksJCXwgXAorCSBORVRJRl9NU0dfSUZET1dOCXwgXAorCSBORVRJRl9NU0dfSUZVUAkJfCBcCisJIE5FVElGX01TR19SWF9FUlIJfCBcCisJIE5FVElGX01TR19UWF9FUlIpCisKK3N0YXRpYyBpbnQgZ3JldGhfZGVidWcgPSAtMTsJLyogLTEgPT0gdXNlIEdSRVRIX0RFRl9NU0dfRU5BQkxFIGFzIHZhbHVlICovCittb2R1bGVfcGFyYW0oZ3JldGhfZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGdyZXRoX2RlYnVnLCAiR1JFVEggYml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOworCisvKiBBY2NlcHQgTUFDIGFkZHJlc3Mgb2YgdGhlIGZvcm0gbWFjYWRkcj0weDA4LDB4MDAsMHgyMCwweDMwLDB4NDAsMHg1MCAqLworc3RhdGljIGludCBtYWNhZGRyWzZdOworbW9kdWxlX3BhcmFtX2FycmF5KG1hY2FkZHIsIGludCwgTlVMTCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1hY2FkZHIsICJHUkVUSCBFdGhlcm5ldCBNQUMgYWRkcmVzcyIpOworCitzdGF0aWMgaW50IGdyZXRoX2VkY2wgPSAxOworbW9kdWxlX3BhcmFtKGdyZXRoX2VkY2wsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGdyZXRoX2VkY2wsICJHUkVUSCBFRENMIHVzYWdlIGluZGljYXRvci4gU2V0IHRvIDEgaWYgRURDTCBpcyB1c2VkLiIpOworCitzdGF0aWMgaW50IGdyZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGdyZXRoX3N0YXJ0X3htaXRfZ2JpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBncmV0aF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpOworc3RhdGljIGludCBncmV0aF9yeF9nYml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBncmV0aF9jbGVhbl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGdyZXRoX2NsZWFuX3R4X2diaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgZ3JldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaW50IGdyZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBncmV0aF9zZXRfbWFjX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkIGdyZXRoX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworI2RlZmluZSBHUkVUSF9SRUdMT0FEKGEpCSAgICAoYmUzMl90b19jcHUoX19yYXdfcmVhZGwoJihhKSkpKQorI2RlZmluZSBHUkVUSF9SRUdTQVZFKGEsIHYpICAgICAgICAgKF9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2KSwgJihhKSkpCisjZGVmaW5lIEdSRVRIX1JFR09SSU4oYSwgdikgICAgICAgICAoR1JFVEhfUkVHU0FWRShhLCAoR1JFVEhfUkVHTE9BRChhKSB8ICh2KSkpKQorI2RlZmluZSBHUkVUSF9SRUdBTkRJTihhLCB2KSAgICAgICAgKEdSRVRIX1JFR1NBVkUoYSwgKEdSRVRIX1JFR0xPQUQoYSkgJiAodikpKSkKKworI2RlZmluZSBORVhUX1RYKE4pICAgICAgKCgoTikgKyAxKSAmIEdSRVRIX1RYQkRfTlVNX01BU0spCisjZGVmaW5lIFNLSVBfVFgoTiwgQykgICAoKChOKSArIEMpICYgR1JFVEhfVFhCRF9OVU1fTUFTSykKKyNkZWZpbmUgTkVYVF9SWChOKSAgICAgICgoKE4pICsgMSkgJiBHUkVUSF9SWEJEX05VTV9NQVNLKQorCitzdGF0aWMgdm9pZCBncmV0aF9wcmludF9yeF9wYWNrZXQodm9pZCAqYWRkciwgaW50IGxlbikKK3sKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiUlg6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCisJCQlhZGRyLCBsZW4sIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9wcmludF90eF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaTsKKwlpbnQgbGVuZ3RoOworCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkKKwkJbGVuZ3RoID0gc2tiLT5sZW47CisJZWxzZQorCQlsZW5ndGggPSBza2JfaGVhZGxlbihza2IpOworCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIlRYOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAorCQkJc2tiLT5kYXRhLCBsZW5ndGgsIHRydWUpOworCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCisJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJUWDogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKKwkJCSAgICAgICBwaHlzX3RvX3ZpcnQocGFnZV90b19waHlzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSkpICsKKwkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAorCQkJICAgICAgIGxlbmd0aCwgdHJ1ZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JldGhfZW5hYmxlX3R4KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwl3bWIoKTsKKwlHUkVUSF9SRUdPUklOKGdyZXRoLT5yZWdzLT5jb250cm9sLCBHUkVUSF9UWEVOKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXRoX2Rpc2FibGVfdHgoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCUdSRVRIX1JFR0FORElOKGdyZXRoLT5yZWdzLT5jb250cm9sLCB+R1JFVEhfVFhFTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF9lbmFibGVfcngoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCXdtYigpOworCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIEdSRVRIX1JYRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JldGhfZGlzYWJsZV9yeChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJR1JFVEhfUkVHQU5ESU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIH5HUkVUSF9SWEVOKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXRoX2VuYWJsZV9pcnFzKHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlHUkVUSF9SRUdPUklOKGdyZXRoLT5yZWdzLT5jb250cm9sLCBHUkVUSF9SWEkgfCBHUkVUSF9UWEkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JldGhfZGlzYWJsZV9pcnFzKHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlHUkVUSF9SRUdBTkRJTihncmV0aC0+cmVncy0+Y29udHJvbCwgfihHUkVUSF9SWEl8R1JFVEhfVFhJKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF93cml0ZV9iZCh1MzIgKmJkLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2YWwpLCBiZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdyZXRoX3JlYWRfYmQodTMyICpiZCkKK3sKKwlyZXR1cm4gYmUzMl90b19jcHUoX19yYXdfcmVhZGwoYmQpKTsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfY2xlYW5fcmluZ3Moc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCWludCBpOworCXN0cnVjdCBncmV0aF9iZCAqcnhfYmRwID0gZ3JldGgtPnJ4X2JkX2Jhc2U7CisJc3RydWN0IGdyZXRoX2JkICp0eF9iZHAgPSBncmV0aC0+dHhfYmRfYmFzZTsKKworCWlmIChncmV0aC0+Z2JpdF9tYWMpIHsKKworCQkvKiBGcmVlIGFuZCB1bm1hcCBSWCBidWZmZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCBHUkVUSF9SWEJEX05VTTsgaSsrLCByeF9iZHArKykgeworCQkJaWYgKGdyZXRoLT5yeF9za2J1ZmZbaV0gIT0gTlVMTCkgeworCQkJCWRldl9rZnJlZV9za2IoZ3JldGgtPnJ4X3NrYnVmZltpXSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkJIGdyZXRoX3JlYWRfYmQoJnJ4X2JkcC0+YWRkciksCisJCQkJCQkgTUFYX0ZSQU1FX1NJWkUrTkVUX0lQX0FMSUdOLAorCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCQl9CisJCX0KKworCQkvKiBUWCBidWZmZXJzICovCisJCXdoaWxlIChncmV0aC0+dHhfZnJlZSA8IEdSRVRIX1RYQkRfTlVNKSB7CisKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBncmV0aC0+dHhfc2tidWZmW2dyZXRoLT50eF9sYXN0XTsKKwkJCWludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCQl0eF9iZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9sYXN0OworCQkJZ3JldGgtPnR4X2xhc3QgPSBORVhUX1RYKGdyZXRoLT50eF9sYXN0KTsKKworCQkJZG1hX3VubWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkgZ3JldGhfcmVhZF9iZCgmdHhfYmRwLT5hZGRyKSwKKwkJCQkJIHNrYl9oZWFkbGVuKHNrYiksCisJCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQkJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQkJdHhfYmRwID0gZ3JldGgtPnR4X2JkX2Jhc2UgKyBncmV0aC0+dHhfbGFzdDsKKworCQkJCWRtYV91bm1hcF9wYWdlKGdyZXRoLT5kZXYsCisJCQkJCSAgICAgICBncmV0aF9yZWFkX2JkKCZ0eF9iZHAtPmFkZHIpLAorCQkJCQkgICAgICAgZnJhZy0+c2l6ZSwKKwkJCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOworCisJCQkJZ3JldGgtPnR4X2xhc3QgPSBORVhUX1RYKGdyZXRoLT50eF9sYXN0KTsKKwkJCX0KKwkJCWdyZXRoLT50eF9mcmVlICs9IG5yX2ZyYWdzKzE7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCisJfSBlbHNlIHsgLyogMTAvMTAwIE1icHMgTUFDICovCisKKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1JYQkRfTlVNOyBpKyssIHJ4X2JkcCsrKSB7CisJCQlrZnJlZShncmV0aC0+cnhfYnVmc1tpXSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCSBncmV0aF9yZWFkX2JkKCZyeF9iZHAtPmFkZHIpLAorCQkJCQkgTUFYX0ZSQU1FX1NJWkUsCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBHUkVUSF9UWEJEX05VTTsgaSsrLCB0eF9iZHArKykgeworCQkJa2ZyZWUoZ3JldGgtPnR4X2J1ZnNbaV0pOworCQkJZG1hX3VubWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkgZ3JldGhfcmVhZF9iZCgmdHhfYmRwLT5hZGRyKSwKKwkJCQkJIE1BWF9GUkFNRV9TSVpFLAorCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfaW5pdF9yaW5ncyhzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgZ3JldGhfYmQgKnJ4X2JkLCAqdHhfYmQ7CisJdTMyIGRtYV9hZGRyOworCWludCBpOworCisJcnhfYmQgPSBncmV0aC0+cnhfYmRfYmFzZTsKKwl0eF9iZCA9IGdyZXRoLT50eF9iZF9iYXNlOworCisJLyogSW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJpbmdzIGFuZCBidWZmZXJzICovCisJaWYgKGdyZXRoLT5nYml0X21hYykgeworCisJCWZvciAoaSA9IDA7IGkgPCBHUkVUSF9SWEJEX05VTTsgaSsrKSB7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGdyZXRoLT5uZXRkZXYsIE1BWF9GUkFNRV9TSVpFK05FVF9JUF9BTElHTik7CisJCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIERNQSByaW5nLlxuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkJICBza2ItPmRhdGEsCisJCQkJCQkgIE1BWF9GUkFNRV9TSVpFK05FVF9JUF9BTElHTiwKKwkJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGdyZXRoLT5kZXYsIGRtYV9hZGRyKSkgeworCQkJCWlmIChuZXRpZl9tc2dfaWZ1cChncmV0aCkpCisJCQkJCWRldl9lcnIoZ3JldGgtPmRldiwgIkNvdWxkIG5vdCBjcmVhdGUgaW5pdGlhbCBETUEgbWFwcGluZ1xuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJZ3JldGgtPnJ4X3NrYnVmZltpXSA9IHNrYjsKKwkJCWdyZXRoX3dyaXRlX2JkKCZyeF9iZFtpXS5hZGRyLCBkbWFfYWRkcik7CisJCQlncmV0aF93cml0ZV9iZCgmcnhfYmRbaV0uc3RhdCwgR1JFVEhfQkRfRU4gfCBHUkVUSF9CRF9JRSk7CisJCX0KKworCX0gZWxzZSB7CisKKwkJLyogMTAvMTAwIE1BQyB1c2VzIGEgZml4ZWQgc2V0IG9mIGJ1ZmZlcnMgYW5kIGNvcHkgdG8vZnJvbSBTS0JzICovCisJCWZvciAoaSA9IDA7IGkgPCBHUkVUSF9SWEJEX05VTTsgaSsrKSB7CisKKwkJCWdyZXRoLT5yeF9idWZzW2ldID0ga21hbGxvYyhNQVhfRlJBTUVfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmIChncmV0aC0+cnhfYnVmc1tpXSA9PSBOVUxMKSB7CisJCQkJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJCQkJZGV2X2VycihncmV0aC0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBETUEgcmluZy5cbiIpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKworCQkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkJICBncmV0aC0+cnhfYnVmc1tpXSwKKwkJCQkJCSAgTUFYX0ZSQU1FX1NJWkUsCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcihncmV0aC0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIGluaXRpYWwgRE1BIG1hcHBpbmdcbiIpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCWdyZXRoX3dyaXRlX2JkKCZyeF9iZFtpXS5hZGRyLCBkbWFfYWRkcik7CisJCQlncmV0aF93cml0ZV9iZCgmcnhfYmRbaV0uc3RhdCwgR1JFVEhfQkRfRU4gfCBHUkVUSF9CRF9JRSk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1RYQkRfTlVNOyBpKyspIHsKKworCQkJZ3JldGgtPnR4X2J1ZnNbaV0gPSBrbWFsbG9jKE1BWF9GUkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKGdyZXRoLT50eF9idWZzW2ldID09IE5VTEwpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIERNQSByaW5nLlxuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCisJCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCQkgIGdyZXRoLT50eF9idWZzW2ldLAorCQkJCQkJICBNQVhfRlJBTUVfU0laRSwKKwkJCQkJCSAgRE1BX1RPX0RFVklDRSk7CisKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcihncmV0aC0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIGluaXRpYWwgRE1BIG1hcHBpbmdcbiIpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCWdyZXRoX3dyaXRlX2JkKCZ0eF9iZFtpXS5hZGRyLCBkbWFfYWRkcik7CisJCQlncmV0aF93cml0ZV9iZCgmdHhfYmRbaV0uc3RhdCwgMCk7CisJCX0KKwl9CisJZ3JldGhfd3JpdGVfYmQoJnJ4X2JkW0dSRVRIX1JYQkRfTlVNIC0gMV0uc3RhdCwKKwkJICAgICAgIGdyZXRoX3JlYWRfYmQoJnJ4X2JkW0dSRVRIX1JYQkRfTlVNIC0gMV0uc3RhdCkgfCBHUkVUSF9CRF9XUik7CisKKwkvKiBJbml0aWFsaXplIHBvaW50ZXJzLiAqLworCWdyZXRoLT5yeF9jdXIgPSAwOworCWdyZXRoLT50eF9uZXh0ID0gMDsKKwlncmV0aC0+dHhfbGFzdCA9IDA7CisJZ3JldGgtPnR4X2ZyZWUgPSBHUkVUSF9UWEJEX05VTTsKKworCS8qIEluaXRpYWxpemUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwlHUkVUSF9SRUdTQVZFKGdyZXRoLT5yZWdzLT50eF9kZXNjX3AsIGdyZXRoLT50eF9iZF9iYXNlX3BoeXMpOworCUdSRVRIX1JFR1NBVkUoZ3JldGgtPnJlZ3MtPnJ4X2Rlc2NfcCwgZ3JldGgtPnJ4X2JkX2Jhc2VfcGh5cyk7CisKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlncmV0aF9jbGVhbl9yaW5ncyhncmV0aCk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWVyciA9IGdyZXRoX2luaXRfcmluZ3MoZ3JldGgpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgRE1BIHJpbmdzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShncmV0aC0+aXJxLCBncmV0aF9pbnRlcnJ1cHQsIDAsICJldGgiLCAodm9pZCAqKSBkZXYpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGludGVycnVwdCAlZFxuIiwgZGV2LT5pcnEpOworCQlncmV0aF9jbGVhbl9yaW5ncyhncmV0aCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIgc3RhcnRpbmcgcXVldWVcbiIpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwluYXBpX2VuYWJsZSgmZ3JldGgtPm5hcGkpOworCisJZ3JldGhfZW5hYmxlX2lycXMoZ3JldGgpOworCWdyZXRoX2VuYWJsZV90eChncmV0aCk7CisJZ3JldGhfZW5hYmxlX3J4KGdyZXRoKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGdyZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5hcGlfZGlzYWJsZSgmZ3JldGgtPm5hcGkpOworCisJZ3JldGhfZGlzYWJsZV90eChncmV0aCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlmcmVlX2lycShncmV0aC0+aXJxLCAodm9pZCAqKSBkZXYpOworCisJZ3JldGhfY2xlYW5fcmluZ3MoZ3JldGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZXRkZXZfdHhfdAorZ3JldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdyZXRoX2JkICpiZHA7CisJaW50IGVyciA9IE5FVERFVl9UWF9PSzsKKwl1MzIgc3RhdHVzLCBkbWFfYWRkcjsKKworCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X25leHQ7CisKKwlpZiAodW5saWtlbHkoZ3JldGgtPnR4X2ZyZWUgPD0gMCkpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKG5ldGlmX21zZ19wa3RkYXRhKGdyZXRoKSkKKwkJZ3JldGhfcHJpbnRfdHhfcGFja2V0KHNrYik7CisKKworCWlmICh1bmxpa2VseShza2ItPmxlbiA+IE1BWF9GUkFNRV9TSVpFKSkgeworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlnb3RvIG91dDsKKwl9CisKKwlkbWFfYWRkciA9IGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkcik7CisKKwltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikgcGh5c190b192aXJ0KGRtYV9hZGRyKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShncmV0aC0+ZGV2LCBkbWFfYWRkciwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCisJc3RhdHVzID0gR1JFVEhfQkRfRU4gfCAoc2tiLT5sZW4gJiBHUkVUSF9CRF9MRU4pOworCisJLyogV3JhcCBhcm91bmQgZGVzY3JpcHRvciByaW5nICovCisJaWYgKGdyZXRoLT50eF9uZXh0ID09IEdSRVRIX1RYQkRfTlVNX01BU0spIHsKKwkJc3RhdHVzIHw9IEdSRVRIX0JEX1dSOworCX0KKworCWdyZXRoLT50eF9uZXh0ID0gTkVYVF9UWChncmV0aC0+dHhfbmV4dCk7CisJZ3JldGgtPnR4X2ZyZWUtLTsKKworCS8qIE5vIG1vcmUgZGVzY3JpcHRvcnMgKi8KKwlpZiAodW5saWtlbHkoZ3JldGgtPnR4X2ZyZWUgPT0gMCkpIHsKKworCQkvKiBGcmVlIHRyYW5zbWl0dGVkIGRlc2NyaXB0b3JzICovCisJCWdyZXRoX2NsZWFuX3R4KGRldik7CisKKwkJLyogSWYgbm90aGluZyB3YXMgY2xlYW5lZCwgc3RvcCBxdWV1ZSAmIHdhaXQgZm9yIGlycSAqLworCQlpZiAodW5saWtlbHkoZ3JldGgtPnR4X2ZyZWUgPT0gMCkpIHsKKwkJCXN0YXR1cyB8PSBHUkVUSF9CRF9JRTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJfQorCX0KKworCS8qIFdyaXRlIGRlc2NyaXB0b3IgY29udHJvbCB3b3JkIGFuZCBlbmFibGUgdHJhbnNtaXNzaW9uICovCisJZ3JldGhfd3JpdGVfYmQoJmJkcC0+c3RhdCwgc3RhdHVzKTsKKwlncmV0aF9lbmFibGVfdHgoZ3JldGgpOworCitvdXQ6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIG5ldGRldl90eF90CitncmV0aF9zdGFydF94bWl0X2diaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBncmV0aF9iZCAqYmRwOworCXUzMiBzdGF0dXMgPSAwLCBkbWFfYWRkcjsKKwlpbnQgY3Vycl90eCwgbnJfZnJhZ3MsIGksIGVyciA9IE5FVERFVl9UWF9PSzsKKworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCWlmIChncmV0aC0+dHhfZnJlZSA8IG5yX2ZyYWdzICsgMSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWVyciA9IE5FVERFVl9UWF9CVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobmV0aWZfbXNnX3BrdGRhdGEoZ3JldGgpKQorCQlncmV0aF9wcmludF90eF9wYWNrZXQoc2tiKTsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiA+IE1BWF9GUkFNRV9TSVpFKSkgeworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTYXZlIHNrYiBwb2ludGVyLiAqLworCWdyZXRoLT50eF9za2J1ZmZbZ3JldGgtPnR4X25leHRdID0gc2tiOworCisJLyogTGluZWFyIGJ1ZiAqLworCWlmIChucl9mcmFncyAhPSAwKQorCQlzdGF0dXMgPSBHUkVUSF9UWEJEX01PUkU7CisKKwlzdGF0dXMgfD0gR1JFVEhfVFhCRF9DU0FMTDsKKwlzdGF0dXMgfD0gc2tiX2hlYWRsZW4oc2tiKSAmIEdSRVRIX0JEX0xFTjsKKwlpZiAoZ3JldGgtPnR4X25leHQgPT0gR1JFVEhfVFhCRF9OVU1fTUFTSykKKwkJc3RhdHVzIHw9IEdSRVRIX0JEX1dSOworCisKKwliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9uZXh0OworCWdyZXRoX3dyaXRlX2JkKCZiZHAtPnN0YXQsIHN0YXR1cyk7CisJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShncmV0aC0+ZGV2LCBza2ItPmRhdGEsIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGdyZXRoLT5kZXYsIGRtYV9hZGRyKSkpCisJCWdvdG8gbWFwX2Vycm9yOworCisJZ3JldGhfd3JpdGVfYmQoJmJkcC0+YWRkciwgZG1hX2FkZHIpOworCisJY3Vycl90eCA9IE5FWFRfVFgoZ3JldGgtPnR4X25leHQpOworCisJLyogRnJhZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfZnJhZ3M7IGkrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCWdyZXRoLT50eF9za2J1ZmZbY3Vycl90eF0gPSBOVUxMOworCQliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGN1cnJfdHg7CisKKwkJc3RhdHVzID0gR1JFVEhfVFhCRF9DU0FMTDsKKwkJc3RhdHVzIHw9IGZyYWctPnNpemUgJiBHUkVUSF9CRF9MRU47CisKKwkJLyogV3JhcCBhcm91bmQgZGVzY3JpcHRvciByaW5nICovCisJCWlmIChjdXJyX3R4ID09IEdSRVRIX1RYQkRfTlVNX01BU0spCisJCQlzdGF0dXMgfD0gR1JFVEhfQkRfV1I7CisKKwkJLyogTW9yZSBmcmFnbWVudHMgbGVmdCAqLworCQlpZiAoaSA8IG5yX2ZyYWdzIC0gMSkKKwkJCXN0YXR1cyB8PSBHUkVUSF9UWEJEX01PUkU7CisKKwkJLyogLi4uIGxhc3QgZnJhZ21lbnQsIGNoZWNrIGlmIG91dCBvZiBkZXNjcmlwdG9ycyAgKi8KKwkJZWxzZSBpZiAoZ3JldGgtPnR4X2ZyZWUgLSBucl9mcmFncyAtIDEgPCAoTUFYX1NLQl9GUkFHUyArIDEpKSB7CisKKwkJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCBzdG9wIHF1ZXVlICovCisJCQlzdGF0dXMgfD0gR1JFVEhfQkRfSUU7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCX0KKworCQlncmV0aF93cml0ZV9iZCgmYmRwLT5zdGF0LCBzdGF0dXMpOworCisJCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKGdyZXRoLT5kZXYsCisJCQkJCWZyYWctPnBhZ2UsCisJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQlmcmFnLT5zaXplLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoZ3JldGgtPmRldiwgZG1hX2FkZHIpKSkKKwkJCWdvdG8gZnJhZ19tYXBfZXJyb3I7CisKKwkJZ3JldGhfd3JpdGVfYmQoJmJkcC0+YWRkciwgZG1hX2FkZHIpOworCisJCWN1cnJfdHggPSBORVhUX1RYKGN1cnJfdHgpOworCX0KKworCXdtYigpOworCisJLyogRW5hYmxlIHRoZSBkZXNjcmlwdG9ycyB0aGF0IHdlIGNvbmZpZ3VyZWQgLi4uICAqLworCWZvciAoaSA9IDA7IGkgPCBucl9mcmFncyArIDE7IGkrKykgeworCQliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9uZXh0OworCQlncmV0aF93cml0ZV9iZCgmYmRwLT5zdGF0LCBncmV0aF9yZWFkX2JkKCZiZHAtPnN0YXQpIHwgR1JFVEhfQkRfRU4pOworCQlncmV0aC0+dHhfbmV4dCA9IE5FWFRfVFgoZ3JldGgtPnR4X25leHQpOworCQlncmV0aC0+dHhfZnJlZS0tOworCX0KKworCWdyZXRoX2VuYWJsZV90eChncmV0aCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitmcmFnX21hcF9lcnJvcjoKKwkvKiBVbm1hcCBTS0IgbWFwcGluZ3MgdGhhdCBzdWNjZWVkZWQgKi8KKwlmb3IgKGkgPSAwOyBncmV0aC0+dHhfbmV4dCArIGkgIT0gY3Vycl90eDsgaSsrKSB7CisJCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X25leHQgKyBpOworCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJIGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkciksCisJCQkJIGdyZXRoX3JlYWRfYmQoJmJkcC0+c3RhdCkgJiBHUkVUSF9CRF9MRU4sCisJCQkJIERNQV9UT19ERVZJQ0UpOworCX0KK21hcF9lcnJvcjoKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlkZXZfd2FybihncmV0aC0+ZGV2LCAiQ291bGQgbm90IGNyZWF0ZSBUWCBETUEgbWFwcGluZ1xuIik7CisJZGV2X2tmcmVlX3NrYihza2IpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IGdyZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGg7CisJdTMyIHN0YXR1czsKKwlpcnFyZXR1cm5fdCByZXR2YWwgPSBJUlFfTk9ORTsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9jaygmZ3JldGgtPmRldmxvY2spOworCisJLyogR2V0IHRoZSBpbnRlcnJ1cHQgZXZlbnRzIHRoYXQgY2F1c2VkIHVzIHRvIGJlIGhlcmUuICovCisJc3RhdHVzID0gR1JFVEhfUkVHTE9BRChncmV0aC0+cmVncy0+c3RhdHVzKTsKKworCS8qIEhhbmRsZSByeCBhbmQgdHggaW50ZXJydXB0cyB0aHJvdWdoIHBvbGwgKi8KKwlpZiAoc3RhdHVzICYgKEdSRVRIX0lOVF9SWCB8IEdSRVRIX0lOVF9UWCkpIHsKKworCQkvKiBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCisJCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPnN0YXR1cywKKwkJCSAgICAgIHN0YXR1cyAmIChHUkVUSF9JTlRfUlggfCBHUkVUSF9JTlRfVFgpKTsKKworCQlyZXR2YWwgPSBJUlFfSEFORExFRDsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHNjaGVkdWxlIHBvbGwoKSAqLworCQlncmV0aF9kaXNhYmxlX2lycXMoZ3JldGgpOworCQluYXBpX3NjaGVkdWxlKCZncmV0aC0+bmFwaSk7CisJfQorCisJbW1pb3diKCk7CisJc3Bpbl91bmxvY2soJmdyZXRoLT5kZXZsb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX2NsZWFuX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9iZCAqYmRwOworCXUzMiBzdGF0OworCisJZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJd2hpbGUgKDEpIHsKKwkJYmRwID0gZ3JldGgtPnR4X2JkX2Jhc2UgKyBncmV0aC0+dHhfbGFzdDsKKwkJc3RhdCA9IGdyZXRoX3JlYWRfYmQoJmJkcC0+c3RhdCk7CisKKwkJaWYgKHVubGlrZWx5KHN0YXQgJiBHUkVUSF9CRF9FTikpCisJCQlicmVhazsKKworCQlpZiAoZ3JldGgtPnR4X2ZyZWUgPT0gR1JFVEhfVFhCRF9OVU0pCisJCQlicmVhazsKKworCQkvKiBDaGVjayBzdGF0dXMgZm9yIGVycm9ycyAqLworCQlpZiAodW5saWtlbHkoc3RhdCAmIEdSRVRIX1RYQkRfU1RBVFVTKSkgeworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0ICYgR1JFVEhfVFhCRF9FUlJfQUwpCisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJaWYgKHN0YXQgJiBHUkVUSF9UWEJEX0VSUl9VRSkKKwkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCX0KKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWdyZXRoLT50eF9sYXN0ID0gTkVYVF9UWChncmV0aC0+dHhfbGFzdCk7CisJCWdyZXRoLT50eF9mcmVlKys7CisJfQorCisJaWYgKGdyZXRoLT50eF9mcmVlID4gMCkgeworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF91cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXQpCit7CisJLyogQ2hlY2sgc3RhdHVzIGZvciBlcnJvcnMgKi8KKwlpZiAodW5saWtlbHkoc3RhdCAmIEdSRVRIX1RYQkRfU1RBVFVTKSkgeworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlpZiAoc3RhdCAmIEdSRVRIX1RYQkRfRVJSX0FMKQorCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlpZiAoc3RhdCAmIEdSRVRIX1RYQkRfRVJSX1VFKQorCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQlpZiAoc3RhdCAmIEdSRVRIX1RYQkRfRVJSX0xDKQorCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCX0KKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfY2xlYW5fdHhfZ2JpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aDsKKwlzdHJ1Y3QgZ3JldGhfYmQgKmJkcCwgKmJkcF9sYXN0X2ZyYWc7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgc3RhdDsKKwlpbnQgbnJfZnJhZ3MsIGk7CisKKwlncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwl3aGlsZSAoZ3JldGgtPnR4X2ZyZWUgPCBHUkVUSF9UWEJEX05VTSkgeworCisJCXNrYiA9IGdyZXRoLT50eF9za2J1ZmZbZ3JldGgtPnR4X2xhc3RdOworCisJCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCQkvKiBXZSBvbmx5IGNsZWFuIGZ1bGx5IGNvbXBsZXRlZCBTS0JzICovCisJCWJkcF9sYXN0X2ZyYWcgPSBncmV0aC0+dHhfYmRfYmFzZSArIFNLSVBfVFgoZ3JldGgtPnR4X2xhc3QsIG5yX2ZyYWdzKTsKKwkJc3RhdCA9IGJkcF9sYXN0X2ZyYWctPnN0YXQ7CisKKwkJaWYgKHN0YXQgJiBHUkVUSF9CRF9FTikKKwkJCWJyZWFrOworCisJCWdyZXRoLT50eF9za2J1ZmZbZ3JldGgtPnR4X2xhc3RdID0gTlVMTDsKKworCQlncmV0aF91cGRhdGVfdHhfc3RhdHMoZGV2LCBzdGF0KTsKKworCQliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9sYXN0OworCisJCWdyZXRoLT50eF9sYXN0ID0gTkVYVF9UWChncmV0aC0+dHhfbGFzdCk7CisKKwkJZG1hX3VubWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCSBncmV0aF9yZWFkX2JkKCZiZHAtPmFkZHIpLAorCQkJCSBza2JfaGVhZGxlbihza2IpLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfZnJhZ3M7IGkrKykgeworCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQkJYmRwID0gZ3JldGgtPnR4X2JkX2Jhc2UgKyBncmV0aC0+dHhfbGFzdDsKKworCQkJZG1hX3VubWFwX3BhZ2UoZ3JldGgtPmRldiwKKwkJCQkgICAgICAgZ3JldGhfcmVhZF9iZCgmYmRwLT5hZGRyKSwKKwkJCQkgICAgICAgZnJhZy0+c2l6ZSwKKwkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisKKwkJCWdyZXRoLT50eF9sYXN0ID0gTkVYVF9UWChncmV0aC0+dHhfbGFzdCk7CisJCX0KKwkJZ3JldGgtPnR4X2ZyZWUgKz0gbnJfZnJhZ3MrMTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKwlpZiAoZ3JldGgtPnR4X2ZyZWUgPiAoTUFYX1NLQl9GUkFHUyArIDEpKSB7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfcGVuZGluZ19wYWNrZXRzKHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlzdHJ1Y3QgZ3JldGhfYmQgKmJkcDsKKwl1MzIgc3RhdHVzOworCWJkcCA9IGdyZXRoLT5yeF9iZF9iYXNlICsgZ3JldGgtPnJ4X2N1cjsKKwlzdGF0dXMgPSBncmV0aF9yZWFkX2JkKCZiZHAtPnN0YXQpOworCWlmIChzdGF0dXMgJiBHUkVUSF9CRF9FTikKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBncmV0aF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9iZCAqYmRwOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHBrdF9sZW47CisJaW50IGJhZCwgY291bnQ7CisJdTMyIHN0YXR1cywgZG1hX2FkZHI7CisKKwlncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgeworCisJCWJkcCA9IGdyZXRoLT5yeF9iZF9iYXNlICsgZ3JldGgtPnJ4X2N1cjsKKwkJc3RhdHVzID0gZ3JldGhfcmVhZF9iZCgmYmRwLT5zdGF0KTsKKwkJZG1hX2FkZHIgPSBncmV0aF9yZWFkX2JkKCZiZHAtPmFkZHIpOworCQliYWQgPSAwOworCisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBHUkVUSF9CRF9FTikpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2hlY2sgc3RhdHVzIGZvciBlcnJvcnMuICovCisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBHUkVUSF9SWEJEX1NUQVRVUykpIHsKKwkJCWlmIChzdGF0dXMgJiBHUkVUSF9SWEJEX0VSUl9GVCkgeworCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9CisJCQlpZiAoc3RhdHVzICYgKEdSRVRIX1JYQkRfRVJSX0FFIHwgR1JFVEhfUlhCRF9FUlJfT0UpKSB7CisJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQliYWQgPSAxOworCQkJfQorCQkJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfRVJSX0NSQykgeworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9CisJCX0KKwkJaWYgKHVubGlrZWx5KGJhZCkpIHsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisKKwkJfSBlbHNlIHsKKworCQkJcGt0X2xlbiA9IHN0YXR1cyAmIEdSRVRIX0JEX0xFTjsKKworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHBrdF9sZW4gKyBORVRfSVBfQUxJR04pOworCisJCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CisKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJsb3cgb24gbWVtb3J5IC0gIiAicGFja2V0IGRyb3BwZWRcbiIpOworCisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisKKwkJCX0gZWxzZSB7CisJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQkJCXNrYi0+ZGV2ID0gZGV2OworCisJCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZ3JldGgtPmRldiwKKwkJCQkJCQlkbWFfYWRkciwKKwkJCQkJCQlwa3RfbGVuLAorCQkJCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwkJCQlpZiAobmV0aWZfbXNnX3BrdGRhdGEoZ3JldGgpKQorCQkJCQlncmV0aF9wcmludF9yeF9wYWNrZXQocGh5c190b192aXJ0KGRtYV9hZGRyKSwgcGt0X2xlbik7CisKKwkJCQltZW1jcHkoc2tiX3B1dChza2IsIHBrdF9sZW4pLCBwaHlzX3RvX3ZpcnQoZG1hX2FkZHIpLCBwa3RfbGVuKTsKKworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCX0KKwkJfQorCisJCXN0YXR1cyA9IEdSRVRIX0JEX0VOIHwgR1JFVEhfQkRfSUU7CisJCWlmIChncmV0aC0+cnhfY3VyID09IEdSRVRIX1JYQkRfTlVNX01BU0spIHsKKwkJCXN0YXR1cyB8PSBHUkVUSF9CRF9XUjsKKwkJfQorCisJCXdtYigpOworCQlncmV0aF93cml0ZV9iZCgmYmRwLT5zdGF0LCBzdGF0dXMpOworCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGdyZXRoLT5kZXYsIGRtYV9hZGRyLCBNQVhfRlJBTUVfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKworCQlncmV0aF9lbmFibGVfcngoZ3JldGgpOworCisJCWdyZXRoLT5yeF9jdXIgPSBORVhUX1JYKGdyZXRoLT5yeF9jdXIpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaHdfY2hlY2tzdW1tZWQodTMyIHN0YXR1cykKK3sKKworCWlmIChzdGF0dXMgJiBHUkVUSF9SWEJEX0lQX0ZSQUcpCisJCXJldHVybiAwOworCisJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfSVAgJiYgc3RhdHVzICYgR1JFVEhfUlhCRF9JUF9DU0VSUikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdHVzICYgR1JFVEhfUlhCRF9VRFAgJiYgc3RhdHVzICYgR1JFVEhfUlhCRF9VRFBfQ1NFUlIpCisJCXJldHVybiAwOworCisJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfVENQICYmIHN0YXR1cyAmIEdSRVRIX1JYQkRfVENQX0NTRVJSKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdyZXRoX3J4X2diaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aDsKKwlzdHJ1Y3QgZ3JldGhfYmQgKmJkcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV3c2tiOworCWludCBwa3RfbGVuOworCWludCBiYWQsIGNvdW50ID0gMDsKKwl1MzIgc3RhdHVzLCBkbWFfYWRkcjsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGxpbWl0OyArK2NvdW50KSB7CisKKwkJYmRwID0gZ3JldGgtPnJ4X2JkX2Jhc2UgKyBncmV0aC0+cnhfY3VyOworCQlza2IgPSBncmV0aC0+cnhfc2tidWZmW2dyZXRoLT5yeF9jdXJdOworCQlzdGF0dXMgPSBncmV0aF9yZWFkX2JkKCZiZHAtPnN0YXQpOworCQliYWQgPSAwOworCisJCWlmIChzdGF0dXMgJiBHUkVUSF9CRF9FTikKKwkJCWJyZWFrOworCisJCS8qIENoZWNrIHN0YXR1cyBmb3IgZXJyb3JzLiAqLworCQlpZiAodW5saWtlbHkoc3RhdHVzICYgR1JFVEhfUlhCRF9TVEFUVVMpKSB7CisKKwkJCWlmIChzdGF0dXMgJiBHUkVUSF9SWEJEX0VSUl9GVCkgeworCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9IGVsc2UgaWYgKHN0YXR1cyAmCisJCQkJICAgKEdSRVRIX1JYQkRfRVJSX0FFIHwgR1JFVEhfUlhCRF9FUlJfT0UgfCBHUkVUSF9SWEJEX0VSUl9MRSkpIHsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9IGVsc2UgaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfRVJSX0NSQykgeworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9CisJCX0KKworCQkvKiBBbGxvY2F0ZSBuZXcgc2tiIHRvIHJlcGxhY2UgY3VycmVudCAqLworCQluZXdza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgTUFYX0ZSQU1FX1NJWkUgKyBORVRfSVBfQUxJR04pOworCisJCWlmICghYmFkICYmIG5ld3NrYikgeworCQkJc2tiX3Jlc2VydmUobmV3c2tiLCBORVRfSVBfQUxJR04pOworCisJCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCQkgICAgICBuZXdza2ItPmRhdGEsCisJCQkJCQkgICAgICBNQVhfRlJBTUVfU0laRSArIE5FVF9JUF9BTElHTiwKKwkJCQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCWlmICghZG1hX21hcHBpbmdfZXJyb3IoZ3JldGgtPmRldiwgZG1hX2FkZHIpKSB7CisJCQkJLyogUHJvY2VzcyB0aGUgaW5jb21pbmcgZnJhbWUuICovCisJCQkJcGt0X2xlbiA9IHN0YXR1cyAmIEdSRVRIX0JEX0xFTjsKKworCQkJCWRtYV91bm1hcF9zaW5nbGUoZ3JldGgtPmRldiwKKwkJCQkJCSBncmV0aF9yZWFkX2JkKCZiZHAtPmFkZHIpLAorCQkJCQkJIE1BWF9GUkFNRV9TSVpFICsgTkVUX0lQX0FMSUdOLAorCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCQlpZiAobmV0aWZfbXNnX3BrdGRhdGEoZ3JldGgpKQorCQkJCQlncmV0aF9wcmludF9yeF9wYWNrZXQocGh5c190b192aXJ0KGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkcikpLCBwa3RfbGVuKTsKKworCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKKworCQkJCWlmIChncmV0aC0+ZmxhZ3MgJiBHUkVUSF9GTEFHX1JYX0NTVU0gJiYgaHdfY2hlY2tzdW1tZWQoc3RhdHVzKSkKKwkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQllbHNlCisJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQkJCXNrYi0+ZGV2ID0gZGV2OworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCQkJCWdyZXRoLT5yeF9za2J1ZmZbZ3JldGgtPnJ4X2N1cl0gPSBuZXdza2I7CisJCQkJZ3JldGhfd3JpdGVfYmQoJmJkcC0+YWRkciwgZG1hX2FkZHIpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfd2FybihncmV0aC0+ZGV2LCAiQ291bGQgbm90IGNyZWF0ZSBETUEgbWFwcGluZywgZHJvcHBpbmcgcGFja2V0XG4iKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKG5ld3NrYik7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCWRldl93YXJuKGdyZXRoLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgU0tCLCBkcm9wcGluZyBwYWNrZXRcbiIpOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCX0KKworCQlzdGF0dXMgPSBHUkVUSF9CRF9FTiB8IEdSRVRIX0JEX0lFOworCQlpZiAoZ3JldGgtPnJ4X2N1ciA9PSBHUkVUSF9SWEJEX05VTV9NQVNLKSB7CisJCQlzdGF0dXMgfD0gR1JFVEhfQkRfV1I7CisJCX0KKworCQl3bWIoKTsKKwkJZ3JldGhfd3JpdGVfYmQoJmJkcC0+c3RhdCwgc3RhdHVzKTsKKwkJZ3JldGhfZW5hYmxlX3J4KGdyZXRoKTsKKwkJZ3JldGgtPnJ4X2N1ciA9IE5FWFRfUlgoZ3JldGgtPnJ4X2N1cik7CisJfQorCisJcmV0dXJuIGNvdW50OworCit9CisKK3N0YXRpYyBpbnQgZ3JldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCWludCB3b3JrX2RvbmUgPSAwOworCWdyZXRoID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBncmV0aF9wcml2YXRlLCBuYXBpKTsKKworCWlmIChncmV0aC0+Z2JpdF9tYWMpIHsKKwkJZ3JldGhfY2xlYW5fdHhfZ2JpdChncmV0aC0+bmV0ZGV2KTsKKwl9IGVsc2UgeworCQlncmV0aF9jbGVhbl90eChncmV0aC0+bmV0ZGV2KTsKKwl9CisKK3Jlc3RhcnRfcG9sbDoKKwlpZiAoZ3JldGgtPmdiaXRfbWFjKSB7CisJCXdvcmtfZG9uZSArPSBncmV0aF9yeF9nYml0KGdyZXRoLT5uZXRkZXYsIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CisJfSBlbHNlIHsKKwkJd29ya19kb25lICs9IGdyZXRoX3J4KGdyZXRoLT5uZXRkZXYsIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CisJfQorCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCisJCW5hcGlfY29tcGxldGUobmFwaSk7CisKKwkJaWYgKGdyZXRoX3BlbmRpbmdfcGFja2V0cyhncmV0aCkpIHsKKwkJCW5hcGlfcmVzY2hlZHVsZShuYXBpKTsKKwkJCWdvdG8gcmVzdGFydF9wb2xsOworCQl9CisJfQorCisJZ3JldGhfZW5hYmxlX2lycXMoZ3JldGgpOworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfc2V0X21hY19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aDsKKwlzdHJ1Y3QgZ3JldGhfcmVncyAqcmVnczsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZWdzID0gKHN0cnVjdCBncmV0aF9yZWdzICopIGdyZXRoLT5yZWdzOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCUdSRVRIX1JFR1NBVkUocmVncy0+ZXNhX21zYiwgYWRkci0+c2FfZGF0YVswXSA8PCA4IHwgYWRkci0+c2FfZGF0YVsxXSk7CisJR1JFVEhfUkVHU0FWRShyZWdzLT5lc2FfbHNiLAorCQkgICAgICBhZGRyLT5zYV9kYXRhWzJdIDw8IDI0IHwgYWRkci0+CisJCSAgICAgIHNhX2RhdGFbM10gPDwgMTYgfCBhZGRyLT5zYV9kYXRhWzRdIDw8IDggfCBhZGRyLT5zYV9kYXRhWzVdKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBncmV0aF9oYXNoX2dldF9pbmRleChfX3U4ICphZGRyKQoreworCXJldHVybiAoZXRoZXJfY3JjKDYsIGFkZHIpKSAmIDB4M0Y7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX3NldF9oYXNoX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VycjsKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBncmV0aF9yZWdzICpyZWdzID0gKHN0cnVjdCBncmV0aF9yZWdzICopIGdyZXRoLT5yZWdzOworCXUzMiBtY19maWx0ZXJbMl07CisJdW5zaWduZWQgaW50IGJpdG5yOworCisJbWNfZmlsdGVyWzBdID0gbWNfZmlsdGVyWzFdID0gMDsKKworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGN1cnIsIGRldikgeworCQliaXRuciA9IGdyZXRoX2hhc2hfZ2V0X2luZGV4KGN1cnItPmRtaV9hZGRyKTsKKwkJbWNfZmlsdGVyW2JpdG5yID4+IDVdIHw9IDEgPDwgKGJpdG5yICYgMzEpOworCX0KKworCUdSRVRIX1JFR1NBVkUocmVncy0+aGFzaF9tc2IsIG1jX2ZpbHRlclsxXSk7CisJR1JFVEhfUkVHU0FWRShyZWdzLT5oYXNoX2xzYiwgbWNfZmlsdGVyWzBdKTsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGNmZzsKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBncmV0aF9yZWdzICpyZWdzID0gKHN0cnVjdCBncmV0aF9yZWdzICopIGdyZXRoLT5yZWdzOworCisJY2ZnID0gR1JFVEhfUkVHTE9BRChyZWdzLT5jb250cm9sKTsKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQljZmcgfD0gR1JFVEhfQ1RSTF9QUjsKKwllbHNlCisJCWNmZyAmPSB+R1JFVEhfQ1RSTF9QUjsKKworCWlmIChncmV0aC0+bXVsdGljYXN0KSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQlHUkVUSF9SRUdTQVZFKHJlZ3MtPmhhc2hfbXNiLCAtMSk7CisJCQlHUkVUSF9SRUdTQVZFKHJlZ3MtPmhhc2hfbHNiLCAtMSk7CisJCQljZmcgfD0gR1JFVEhfQ1RSTF9NQ0VOOworCQkJR1JFVEhfUkVHU0FWRShyZWdzLT5jb250cm9sLCBjZmcpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CisJCQljZmcgJj0gfkdSRVRIX0NUUkxfTUNFTjsKKwkJCUdSRVRIX1JFR1NBVkUocmVncy0+Y29udHJvbCwgY2ZnKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFNldHVwIG11bHRpY2FzdCBmaWx0ZXIgKi8KKwkJZ3JldGhfc2V0X2hhc2hfZmlsdGVyKGRldik7CisJCWNmZyB8PSBHUkVUSF9DVFJMX01DRU47CisJfQorCUdSRVRIX1JFR1NBVkUocmVncy0+Y29udHJvbCwgY2ZnKTsKK30KKworc3RhdGljIHUzMiBncmV0aF9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBncmV0aC0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCWdyZXRoLT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CitzdGF0aWMgaW50IGdyZXRoX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBncmV0aC0+cGh5OworCisJaWYgKCFwaHkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocGh5LCBjbWQpOworfQorCitzdGF0aWMgaW50IGdyZXRoX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBncmV0aC0+cGh5OworCisJaWYgKCFwaHkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocGh5LCBjbWQpOworfQorCitzdGF0aWMgaW50IGdyZXRoX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBzaXplb2Yoc3RydWN0IGdyZXRoX3JlZ3MpOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgZGV2X2RyaXZlcl9zdHJpbmcoZ3JldGgtPmRldiksIDMyKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sICJyZXZpc2lvbjogMS4wIiwgMzIpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGdyZXRoLT5kZXYtPmJ1cy0+bmFtZSwgMzIpOworCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDMyKTsKKwlpbmZvLT5lZWR1bXBfbGVuID0gMDsKKwlpbmZvLT5yZWdkdW1wX2xlbiA9IHNpemVvZihzdHJ1Y3QgZ3JldGhfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApCit7CisJaW50IGk7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgX19pb21lbSAqZ3JldGhfcmVncyA9ICh1MzIgX19pb21lbSAqKSBncmV0aC0+cmVnczsKKwl1MzIgKmJ1ZmYgPSBwOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgZ3JldGhfcmVncykgLyBzaXplb2YodTMyKTsgaSsrKQorCQlidWZmW2ldID0gZ3JldGhfcmVhZF9iZCgmZ3JldGhfcmVnc1tpXSk7Cit9CisKK3N0YXRpYyB1MzIgZ3JldGhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiAoZ3JldGgtPmZsYWdzICYgR1JFVEhfRkxBR19SWF9DU1VNKSAhPSAwOworfQorCitzdGF0aWMgaW50IGdyZXRoX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfYmgoJmdyZXRoLT5kZXZsb2NrKTsKKworCWlmIChkYXRhKQorCQlncmV0aC0+ZmxhZ3MgfD0gR1JFVEhfRkxBR19SWF9DU1VNOworCWVsc2UKKwkJZ3JldGgtPmZsYWdzICY9IH5HUkVUSF9GTEFHX1JYX0NTVU07CisKKwlzcGluX3VubG9ja19iaCgmZ3JldGgtPmRldmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ3JldGhfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCWV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBncmV0aF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X21zZ2xldmVsCQk9IGdyZXRoX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IGdyZXRoX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3NldHRpbmdzCQk9IGdyZXRoX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGdyZXRoX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JCT0gZ3JldGhfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiAgICAgICAgICAgPSBncmV0aF9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBncmV0aF9nZXRfcmVncywKKwkuZ2V0X3J4X2NzdW0JCT0gZ3JldGhfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IGdyZXRoX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bQkJPSBncmV0aF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZ3JldGhfc2V0X3R4X2NzdW0sCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZ3JldGhfb3BlbiwKKwkubmRvX3N0b3AgPSBncmV0aF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBncmV0aF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZ3JldGhfc2V0X21hY19hZGQsCisJLm5kb192YWxpZGF0ZV9hZGRyIAk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgd2FpdF9mb3JfbWRpbyhzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDQqSFovMTAwOworCXdoaWxlIChHUkVUSF9SRUdMT0FEKGdyZXRoLT5yZWdzLT5tZGlvKSAmIEdSRVRIX01JSV9CVVNZKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdyZXRoX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5LCBpbnQgcmVnKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IGJ1cy0+cHJpdjsKKwlpbnQgZGF0YTsKKworCWlmICghd2FpdF9mb3JfbWRpbyhncmV0aCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlHUkVUSF9SRUdTQVZFKGdyZXRoLT5yZWdzLT5tZGlvLCAoKHBoeSAmIDB4MUYpIDw8IDExKSB8ICgocmVnICYgMHgxRikgPDwgNikgfCAyKTsKKworCWlmICghd2FpdF9mb3JfbWRpbyhncmV0aCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIShHUkVUSF9SRUdMT0FEKGdyZXRoLT5yZWdzLT5tZGlvKSAmIEdSRVRIX01JSV9OVkFMSUQpKSB7CisJCWRhdGEgPSAoR1JFVEhfUkVHTE9BRChncmV0aC0+cmVncy0+bWRpbykgPj4gMTYpICYgMHhGRkZGOworCQlyZXR1cm4gZGF0YTsKKworCX0gZWxzZSB7CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5LCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IGJ1cy0+cHJpdjsKKworCWlmICghd2FpdF9mb3JfbWRpbyhncmV0aCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlHUkVUSF9SRUdTQVZFKGdyZXRoLT5yZWdzLT5tZGlvLAorCQkgICAgICAoKHZhbCAmIDB4RkZGRikgPDwgMTYpIHwgKChwaHkgJiAweDFGKSA8PCAxMSkgfCAoKHJlZyAmIDB4MUYpIDw8IDYpIHwgMSk7CisKKwlpZiAoIXdhaXRfZm9yX21kaW8oZ3JldGgpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9saW5rX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGdyZXRoLT5waHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWludCBzdGF0dXNfY2hhbmdlID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncmV0aC0+ZGV2bG9jaywgZmxhZ3MpOworCisJaWYgKHBoeWRldi0+bGluaykgeworCisJCWlmICgoZ3JldGgtPnNwZWVkICE9IHBoeWRldi0+c3BlZWQpIHx8IChncmV0aC0+ZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSkgeworCisJCQlHUkVUSF9SRUdBTkRJTihncmV0aC0+cmVncy0+Y29udHJvbCwKKwkJCQkgICAgICAgfihHUkVUSF9DVFJMX0ZEIHwgR1JFVEhfQ1RSTF9TUCB8IEdSRVRIX0NUUkxfR0IpKTsKKworCQkJaWYgKHBoeWRldi0+ZHVwbGV4KQorCQkJCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIEdSRVRIX0NUUkxfRkQpOworCisJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKworCQkJCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIEdSRVRIX0NUUkxfU1ApOworCQkJfQorCisJCQllbHNlIGlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCQkJR1JFVEhfUkVHT1JJTihncmV0aC0+cmVncy0+Y29udHJvbCwgR1JFVEhfQ1RSTF9HQik7CisKKwkJCWdyZXRoLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCQlncmV0aC0+ZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJCQlzdGF0dXNfY2hhbmdlID0gMTsKKwkJfQorCX0KKworCWlmIChwaHlkZXYtPmxpbmsgIT0gZ3JldGgtPmxpbmspIHsKKwkJaWYgKCFwaHlkZXYtPmxpbmspIHsKKwkJCWdyZXRoLT5zcGVlZCA9IDA7CisJCQlncmV0aC0+ZHVwbGV4ID0gLTE7CisJCX0KKwkJZ3JldGgtPmxpbmsgPSBwaHlkZXYtPmxpbms7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JldGgtPmRldmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXNfY2hhbmdlKSB7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcl9kZWJ1ZygiJXM6IGxpbmsgdXAgKCVkLyVzKVxuIiwKKwkJCQlkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQsCisJCQkJRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXggPyAiRnVsbCIgOiAiSGFsZiIpOworCQllbHNlCisJCQlwcl9kZWJ1ZygiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfbWRpb19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IE5VTEw7CisJaW50IHJldDsKKworCS8qIEZpbmQgdGhlIGZpcnN0IFBIWSAqLworCXBoeSA9IHBoeV9maW5kX2ZpcnN0KGdyZXRoLT5tZGlvKTsKKworCWlmICghcGh5KSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJubyBQSFkgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYsIHBoeSwgJmdyZXRoX2xpbmtfY2hhbmdlLAorCQkJMCwgZ3JldGgtPmdiaXRfbWFjID8KKwkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDoKKwkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCWlmIChyZXQpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChncmV0aC0+Z2JpdF9tYWMpCisJCXBoeS0+c3VwcG9ydGVkICY9IFBIWV9HQklUX0ZFQVRVUkVTOworCWVsc2UKKwkJcGh5LT5zdXBwb3J0ZWQgJj0gUEhZX0JBU0lDX0ZFQVRVUkVTOworCisJcGh5LT5hZHZlcnRpc2luZyA9IHBoeS0+c3VwcG9ydGVkOworCisJZ3JldGgtPmxpbmsgPSAwOworCWdyZXRoLT5zcGVlZCA9IDA7CisJZ3JldGgtPmR1cGxleCA9IC0xOworCWdyZXRoLT5waHkgPSBwaHk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGh5X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAocmV0dmFsICYgQk1TUl9BTkVHQ09NUExFVEUpOworfQorCitzdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJaW50IHJldCwgcGh5OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWdyZXRoLT5tZGlvID0gbWRpb2J1c19hbGxvYygpOworCWlmICghZ3JldGgtPm1kaW8pIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZ3JldGgtPm1kaW8tPm5hbWUgPSAiZ3JldGgtbWRpbyI7CisJc25wcmludGYoZ3JldGgtPm1kaW8tPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcy0lZCIsIGdyZXRoLT5tZGlvLT5uYW1lLCBncmV0aC0+aXJxKTsKKwlncmV0aC0+bWRpby0+cmVhZCA9IGdyZXRoX21kaW9fcmVhZDsKKwlncmV0aC0+bWRpby0+d3JpdGUgPSBncmV0aF9tZGlvX3dyaXRlOworCWdyZXRoLT5tZGlvLT5yZXNldCA9IGdyZXRoX21kaW9fcmVzZXQ7CisJZ3JldGgtPm1kaW8tPnByaXYgPSBncmV0aDsKKworCWdyZXRoLT5tZGlvLT5pcnEgPSBncmV0aC0+bWRpb19pcnFzOworCisJZm9yIChwaHkgPSAwOyBwaHkgPCBQSFlfTUFYX0FERFI7IHBoeSsrKQorCQlncmV0aC0+bWRpby0+aXJxW3BoeV0gPSBQSFlfUE9MTDsKKworCXJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtPm1kaW8pOworCWlmIChyZXQpIHsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSBncmV0aF9tZGlvX3Byb2JlKGdyZXRoLT5uZXRkZXYpOworCWlmIChyZXQpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKCZncmV0aC0+bmV0ZGV2LT5kZXYsICJmYWlsZWQgdG8gcHJvYmUgTURJTyBidXNcbiIpOworCQlnb3RvIHVucmVnX21kaW87CisJfQorCisJcGh5X3N0YXJ0KGdyZXRoLT5waHkpOworCisJLyogSWYgRXRoZXJuZXQgZGVidWcgbGluayBpcyB1c2VkIG1ha2UgYXV0b25lZyBoYXBwZW4gcmlnaHQgYXdheSAqLworCWlmIChncmV0aC0+ZWRjbCAmJiBncmV0aF9lZGNsID09IDEpIHsKKwkJcGh5X3N0YXJ0X2FuZWcoZ3JldGgtPnBoeSk7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgNipIWjsKKwkJd2hpbGUgKCFwaHlfYW5lZ19kb25lKGdyZXRoLT5waHkpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCX0KKwkJZ2VucGh5X3JlYWRfc3RhdHVzKGdyZXRoLT5waHkpOworCQlncmV0aF9saW5rX2NoYW5nZShncmV0aC0+bmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKKwordW5yZWdfbWRpbzoKKwltZGlvYnVzX3VucmVnaXN0ZXIoZ3JldGgtPm1kaW8pOworZXJyb3I6CisJbWRpb2J1c19mcmVlKGdyZXRoLT5tZGlvKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBJbml0aWFsaXplIHRoZSBHUkVUSCBNQUMgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGdyZXRoX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aDsKKwlzdHJ1Y3QgZ3JldGhfcmVncyAqcmVnczsKKworCWludCBpOworCWludCBlcnI7CisJaW50IHRtcDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGdyZXRoX3ByaXZhdGUpKTsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJZ3JldGgtPm5ldGRldiA9IGRldjsKKwlncmV0aC0+ZGV2ID0gJm9mZGV2LT5kZXY7CisKKwlpZiAoZ3JldGhfZGVidWcgPiAwKQorCQlncmV0aC0+bXNnX2VuYWJsZSA9IGdyZXRoX2RlYnVnOworCWVsc2UKKwkJZ3JldGgtPm1zZ19lbmFibGUgPSBHUkVUSF9ERUZfTVNHX0VOQUJMRTsKKworCXNwaW5fbG9ja19pbml0KCZncmV0aC0+ZGV2bG9jayk7CisKKwlncmV0aC0+cmVncyA9IG9mX2lvcmVtYXAoJm9mZGV2LT5yZXNvdXJjZVswXSwgMCwKKwkJCQkgcmVzb3VyY2Vfc2l6ZSgmb2ZkZXYtPnJlc291cmNlWzBdKSwKKwkJCQkgImdybGliLWdyZXRoIHJlZ3MiKTsKKworCWlmIChncmV0aC0+cmVncyA9PSBOVUxMKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycihncmV0aC0+ZGV2LCAiaW9yZW1hcCBmYWlsdXJlLlxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyb3IxOworCX0KKworCXJlZ3MgPSAoc3RydWN0IGdyZXRoX3JlZ3MgKikgZ3JldGgtPnJlZ3M7CisJZ3JldGgtPmlycSA9IG9mZGV2LT5pcnFzWzBdOworCisJZGV2X3NldF9kcnZkYXRhKGdyZXRoLT5kZXYsIGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCBncmV0aC0+ZGV2KTsKKworCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQlkZXZfZGJnKGdyZXRoLT5kZXYsICJyZXNldGluZyBjb250cm9sbGVyLlxuIik7CisKKwkvKiBSZXNldCB0aGUgY29udHJvbGxlci4gKi8KKwlHUkVUSF9SRUdTQVZFKHJlZ3MtPmNvbnRyb2wsIEdSRVRIX1JFU0VUKTsKKworCS8qIFdhaXQgZm9yIE1BQyB0byByZXNldCBpdHNlbGYgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIEhaLzEwMDsKKwl3aGlsZSAoR1JFVEhfUkVHTE9BRChyZWdzLT5jb250cm9sKSAmIEdSRVRIX1JFU0VUKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQllcnIgPSAtRUlPOworCQkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQkJZGV2X2VycihncmV0aC0+ZGV2LCAidGltZW91dCB3aGVuIHdhaXRpbmcgZm9yIHJlc2V0LlxuIik7CisJCQlnb3RvIGVycm9yMjsKKwkJfQorCX0KKworCS8qIEdldCBkZWZhdWx0IFBIWSBhZGRyZXNzICAqLworCWdyZXRoLT5waHlhZGRyID0gKEdSRVRIX1JFR0xPQUQocmVncy0+bWRpbykgPj4gMTEpICYgMHgxRjsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgR0JJVCBjYXBhYmxlIE1BQyAqLworCXRtcCA9IEdSRVRIX1JFR0xPQUQocmVncy0+Y29udHJvbCk7CisJZ3JldGgtPmdiaXRfbWFjID0gKHRtcCA+PiAyNykgJiAxOworCisJLyogQ2hlY2sgZm9yIG11bHRpY2FzdCBjYXBhYmlsaXR5ICovCisJZ3JldGgtPm11bHRpY2FzdCA9ICh0bXAgPj4gMjUpICYgMTsKKworCWdyZXRoLT5lZGNsID0gKHRtcCA+PiAzMSkgJiAxOworCisJLyogSWYgd2UgaGF2ZSBFRENMIHdlIGRpc2FibGUgdGhlIEVEQ0wgc3BlZWQtZHVwbGV4IEZTTSBzbworCSAqIGl0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHNvZnR3YXJlICovCisJaWYgKGdyZXRoLT5lZGNsICE9IDApCisJCUdSRVRIX1JFR09SSU4ocmVncy0+Y29udHJvbCwgR1JFVEhfQ1RSTF9ESVNEVVBMRVgpOworCisJLyogQ2hlY2sgaWYgTUFDIGNhbiBoYW5kbGUgTURJTyBpbnRlcnJ1cHRzICovCisJZ3JldGgtPm1kaW9faW50X2VuID0gKHRtcCA+PiAyNikgJiAxOworCisJZXJyID0gZ3JldGhfbWRpb19pbml0KGdyZXRoKTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycihncmV0aC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzXG4iKTsKKwkJZ290byBlcnJvcjI7CisJfQorCisJLyogQWxsb2NhdGUgVFggZGVzY3JpcHRvciByaW5nIGluIGNvaGVyZW50IG1lbW9yeSAqLworCWdyZXRoLT50eF9iZF9iYXNlID0gKHN0cnVjdCBncmV0aF9iZCAqKSBkbWFfYWxsb2NfY29oZXJlbnQoZ3JldGgtPmRldiwKKwkJCQkJCQkJICAgMTAyNCwKKwkJCQkJCQkJICAgJmdyZXRoLT50eF9iZF9iYXNlX3BoeXMsCisJCQkJCQkJCSAgIEdGUF9LRVJORUwpOworCisJaWYgKCFncmV0aC0+dHhfYmRfYmFzZSkgeworCQlpZiAobmV0aWZfbXNnX3Byb2JlKGdyZXRoKSkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRlc2NyaXB0b3IgbWVtb3J5LlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3IzOworCX0KKworCW1lbXNldChncmV0aC0+dHhfYmRfYmFzZSwgMCwgMTAyNCk7CisKKwkvKiBBbGxvY2F0ZSBSWCBkZXNjcmlwdG9yIHJpbmcgaW4gY29oZXJlbnQgbWVtb3J5ICovCisJZ3JldGgtPnJ4X2JkX2Jhc2UgPSAoc3RydWN0IGdyZXRoX2JkICopIGRtYV9hbGxvY19jb2hlcmVudChncmV0aC0+ZGV2LAorCQkJCQkJCQkgICAxMDI0LAorCQkJCQkJCQkgICAmZ3JldGgtPnJ4X2JkX2Jhc2VfcGh5cywKKwkJCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWdyZXRoLT5yeF9iZF9iYXNlKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycihncmV0aC0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRlc2NyaXB0b3IgbWVtb3J5LlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I0OworCX0KKworCW1lbXNldChncmV0aC0+cnhfYmRfYmFzZSwgMCwgMTAyNCk7CisKKwkvKiBHZXQgTUFDIGFkZHJlc3MgZnJvbTogbW9kdWxlIHBhcmFtLCBPRiBwcm9wZXJ0eSBvciBJRCBwcm9tICovCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpZiAobWFjYWRkcltpXSAhPSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDYpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKKwkJaW50IGxlbjsKKwkJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImxvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJCWlmIChhZGRyICE9IE5VTEwgJiYgbGVuID09IDYpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQkJbWFjYWRkcltpXSA9ICh1bnNpZ25lZCBpbnQpIGFkZHJbaV07CisJCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX1NQQVJDCisJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJCW1hY2FkZHJbaV0gPSAodW5zaWduZWQgaW50KSBpZHByb20tPmlkX2V0aGFkZHJbaV07CisjZW5kaWYKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWRldi0+ZGV2X2FkZHJbaV0gPSBtYWNhZGRyW2ldOworCisJbWFjYWRkcls1XSsrOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZkZXYtPmRldl9hZGRyWzBdKSkgeworCQlpZiAobmV0aWZfbXNnX3Byb2JlKGdyZXRoKSkKKwkJCWRldl9lcnIoZ3JldGgtPmRldiwgIm5vIHZhbGlkIGV0aGVybmV0IGFkZHJlc3MsIGFib3J0aW5nLlxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I1OworCX0KKworCUdSRVRIX1JFR1NBVkUocmVncy0+ZXNhX21zYiwgZGV2LT5kZXZfYWRkclswXSA8PCA4IHwgZGV2LT5kZXZfYWRkclsxXSk7CisJR1JFVEhfUkVHU0FWRShyZWdzLT5lc2FfbHNiLCBkZXYtPmRldl9hZGRyWzJdIDw8IDI0IHwgZGV2LT5kZXZfYWRkclszXSA8PCAxNiB8CisJCSAgICAgIGRldi0+ZGV2X2FkZHJbNF0gPDwgOCB8IGRldi0+ZGV2X2FkZHJbNV0pOworCisJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyBleGNlcHQgUEhZIGlycSAqLworCUdSRVRIX1JFR1NBVkUocmVncy0+c3RhdHVzLCAweEZGKTsKKworCWlmIChncmV0aC0+Z2JpdF9tYWMpIHsKKwkJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hJR0hETUE7CisJCWdyZXRoX25ldGRldl9vcHMubmRvX3N0YXJ0X3htaXQgPSBncmV0aF9zdGFydF94bWl0X2diaXQ7CisJCWdyZXRoLT5mbGFncyA9IEdSRVRIX0ZMQUdfUlhfQ1NVTTsKKwl9CisKKwlpZiAoZ3JldGgtPm11bHRpY2FzdCkgeworCQlncmV0aF9uZXRkZXZfb3BzLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBncmV0aF9zZXRfbXVsdGljYXN0X2xpc3Q7CisJCWRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKKwl9IGVsc2UgeworCQlkZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOworCX0KKworCWRldi0+bmV0ZGV2X29wcyA9ICZncmV0aF9uZXRkZXZfb3BzOworCWRldi0+ZXRodG9vbF9vcHMgPSAmZ3JldGhfZXRodG9vbF9vcHM7CisKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJuZXRkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZC5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yNTsKKwl9CisKKwkvKiBzZXR1cCBOQVBJICovCisJbWVtc2V0KCZncmV0aC0+bmFwaSwgMCwgc2l6ZW9mKGdyZXRoLT5uYXBpKSk7CisJbmV0aWZfbmFwaV9hZGQoZGV2LCAmZ3JldGgtPm5hcGksIGdyZXRoX3BvbGwsIDY0KTsKKworCXJldHVybiAwOworCitlcnJvcjU6CisJZG1hX2ZyZWVfY29oZXJlbnQoZ3JldGgtPmRldiwgMTAyNCwgZ3JldGgtPnJ4X2JkX2Jhc2UsIGdyZXRoLT5yeF9iZF9iYXNlX3BoeXMpOworZXJyb3I0OgorCWRtYV9mcmVlX2NvaGVyZW50KGdyZXRoLT5kZXYsIDEwMjQsIGdyZXRoLT50eF9iZF9iYXNlLCBncmV0aC0+dHhfYmRfYmFzZV9waHlzKTsKK2Vycm9yMzoKKwltZGlvYnVzX3VucmVnaXN0ZXIoZ3JldGgtPm1kaW8pOworZXJyb3IyOgorCW9mX2lvdW5tYXAoJm9mZGV2LT5yZXNvdXJjZVswXSwgZ3JldGgtPnJlZ3MsIHJlc291cmNlX3NpemUoJm9mZGV2LT5yZXNvdXJjZVswXSkpOworZXJyb3IxOgorCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZ3JldGhfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZfZGV2LT5kZXYpOworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJLyogRnJlZSBkZXNjcmlwdG9yIGFyZWFzICovCisJZG1hX2ZyZWVfY29oZXJlbnQoJm9mX2Rldi0+ZGV2LCAxMDI0LCBncmV0aC0+cnhfYmRfYmFzZSwgZ3JldGgtPnJ4X2JkX2Jhc2VfcGh5cyk7CisKKwlkbWFfZnJlZV9jb2hlcmVudCgmb2ZfZGV2LT5kZXYsIDEwMjQsIGdyZXRoLT50eF9iZF9iYXNlLCBncmV0aC0+dHhfYmRfYmFzZV9waHlzKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZfZGV2LT5kZXYsIE5VTEwpOworCisJaWYgKGdyZXRoLT5waHkpCisJCXBoeV9zdG9wKGdyZXRoLT5waHkpOworCW1kaW9idXNfdW5yZWdpc3RlcihncmV0aC0+bWRpbyk7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlmcmVlX25ldGRldihuZGV2KTsKKworCW9mX2lvdW5tYXAoJm9mX2Rldi0+cmVzb3VyY2VbMF0sIGdyZXRoLT5yZWdzLCByZXNvdXJjZV9zaXplKCZvZl9kZXYtPnJlc291cmNlWzBdKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ3JldGhfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJIC5uYW1lID0gIkdBSVNMRVJfRVRITUFDIiwKKwkgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdyZXRoX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZ3JldGhfb2ZfZHJpdmVyID0geworCS5uYW1lID0gImdybGliLWdyZXRoIiwKKwkubWF0Y2hfdGFibGUgPSBncmV0aF9vZl9tYXRjaCwKKwkucHJvYmUgPSBncmV0aF9vZl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZ3JldGhfb2ZfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgLm5hbWUgPSAiZ3JsaWItZ3JldGgiLAorCQkgICB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3JldGhfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdyZXRoX29mX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBncmV0aF9jbGVhbnVwKHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdyZXRoX29mX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGdyZXRoX2luaXQpOworbW9kdWxlX2V4aXQoZ3JldGhfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIkFlcm9mbGV4IEdhaXNsZXIgQUIuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFlcm9mbGV4IEdhaXNsZXIgRXRoZXJuZXQgTUFDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3JldGguaCBiL2RyaXZlcnMvbmV0L2dyZXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczMzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2dyZXRoLmgKQEAgLTAsMCArMSwxNDMgQEAKKyNpZm5kZWYgR1JFVEhfSAorI2RlZmluZSBHUkVUSF9ICisKKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworLyogUmVnaXN0ZXIgYml0cyBhbmQgbWFza3MgKi8KKyNkZWZpbmUgR1JFVEhfUkVTRVQgMHg0MAorI2RlZmluZSBHUkVUSF9NSUlfQlVTWSAweDgKKyNkZWZpbmUgR1JFVEhfTUlJX05WQUxJRCAweDEwCisKKyNkZWZpbmUgR1JFVEhfQ1RSTF9GRCAgICAgICAgIDB4MTAKKyNkZWZpbmUgR1JFVEhfQ1RSTF9QUiAgICAgICAgIDB4MjAKKyNkZWZpbmUgR1JFVEhfQ1RSTF9TUCAgICAgICAgIDB4ODAKKyNkZWZpbmUgR1JFVEhfQ1RSTF9HQiAgICAgICAgIDB4MTAwCisjZGVmaW5lIEdSRVRIX0NUUkxfUFNUQVRJRU4gICAweDQwMAorI2RlZmluZSBHUkVUSF9DVFJMX01DRU4gICAgICAgMHg4MDAKKyNkZWZpbmUgR1JFVEhfQ1RSTF9ESVNEVVBMRVggIDB4MTAwMAorI2RlZmluZSBHUkVUSF9TVEFUVVNfUEhZU1RBVCAgMHgxMDAKKworI2RlZmluZSBHUkVUSF9CRF9FTiAweDgwMAorI2RlZmluZSBHUkVUSF9CRF9XUiAweDEwMDAKKyNkZWZpbmUgR1JFVEhfQkRfSUUgMHgyMDAwCisjZGVmaW5lIEdSRVRIX0JEX0xFTiAweDdGRgorCisjZGVmaW5lIEdSRVRIX1RYRU4gMHgxCisjZGVmaW5lIEdSRVRIX0lOVF9UWCAweDgKKyNkZWZpbmUgR1JFVEhfVFhJIDB4NAorI2RlZmluZSBHUkVUSF9UWEJEX1NUQVRVUyAweDAwMDFDMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfTU9SRSAweDIwMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfSVBDUyAweDQwMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfVENQQ1MgMHg4MDAwMAorI2RlZmluZSBHUkVUSF9UWEJEX1VEUENTIDB4MTAwMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfQ1NBTEwgKEdSRVRIX1RYQkRfSVBDUyB8IEdSRVRIX1RYQkRfVENQQ1MgfCBHUkVUSF9UWEJEX1VEUENTKQorI2RlZmluZSBHUkVUSF9UWEJEX0VSUl9MQyAweDEwMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfRVJSX1VFIDB4NDAwMAorI2RlZmluZSBHUkVUSF9UWEJEX0VSUl9BTCAweDgwMDAKKworI2RlZmluZSBHUkVUSF9JTlRfUlggICAgICAgICAweDQKKyNkZWZpbmUgR1JFVEhfUlhFTiAgICAgICAgICAgMHgyCisjZGVmaW5lIEdSRVRIX1JYSSAgICAgICAgICAgIDB4OAorI2RlZmluZSBHUkVUSF9SWEJEX1NUQVRVUyAgICAweEZGRkZDMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfRVJSX0FFICAgIDB4NDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0VSUl9GVCAgICAweDgwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9FUlJfQ1JDICAgMHgxMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0VSUl9PRSAgICAweDIwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfRVJSX0xFICAgIDB4NDAwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9JUCAgICAgICAgMHg4MDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0lQX0NTRVJSICAweDEwMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX1VEUCAgICAgICAweDIwMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX1VEUF9DU0VSUiAweDQwMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX1RDUCAgICAgICAweDgwMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX1RDUF9DU0VSUiAweDEwMDAwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9JUF9GUkFHICAgMHgyMDAwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfTUNBU1QgICAgIDB4NDAwMDAwMAorCisvKiBEZXNjcmlwdG9yIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgR1JFVEhfVFhCRF9OVU0gMTI4CisjZGVmaW5lIEdSRVRIX1RYQkRfTlVNX01BU0sgKEdSRVRIX1RYQkRfTlVNLTEpCisjZGVmaW5lIEdSRVRIX1RYX0JVRl9TSVpFIDIwNDgKKyNkZWZpbmUgR1JFVEhfUlhCRF9OVU0gMTI4CisjZGVmaW5lIEdSRVRIX1JYQkRfTlVNX01BU0sgKEdSRVRIX1JYQkRfTlVNLTEpCisjZGVmaW5lIEdSRVRIX1JYX0JVRl9TSVpFIDIwNDgKKworLyogQnVmZmVycyBwZXIgcGFnZSAqLworI2RlZmluZSBHUkVUSF9SWF9CVUZfUFBHQUUJKFBBR0VfU0laRS9HUkVUSF9SWF9CVUZfU0laRSkKKyNkZWZpbmUgR1JFVEhfVFhfQlVGX1BQR0FFCShQQUdFX1NJWkUvR1JFVEhfVFhfQlVGX1NJWkUpCisKKy8qIEhvdyBtYW55IHBhZ2VzIGFyZSBuZWVkZWQgZm9yIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgR1JFVEhfUlhfQlVGX1BBR0VfTlVNCShHUkVUSF9SWEJEX05VTS9HUkVUSF9SWF9CVUZfUFBHQUUpCisjZGVmaW5lIEdSRVRIX1RYX0JVRl9QQUdFX05VTQkoR1JFVEhfVFhCRF9OVU0vR1JFVEhfVFhfQlVGX1BQR0FFKQorCisvKiBCdWZmZXIgc2l6ZS4KKyAqIEdiaXQgTUFDIHVzZXMgdGFnZ2VkIG1heGltdW0gZnJhbWUgc2l6ZSB3aGljaCBpcyAxNTE4IGV4Y2x1ZGluZyBDUkMuCisgKiBTZXQgdG8gMTUyMCB0byBtYWtlIGFsbCBidWZmZXJzIHdvcmQgYWxpZ25lZCBmb3Igbm9uLWdiaXQgTUFDLgorICovCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFCQkxNTIwCisKKy8qIEZsYWdzICovCisjZGVmaW5lIEdSRVRIX0ZMQUdfUlhfQ1NVTSAweDEKKworLyogR1JFVEggQVBCIHJlZ2lzdGVycyAqLworc3RydWN0IGdyZXRoX3JlZ3MgeworCXUzMiBjb250cm9sOworCXUzMiBzdGF0dXM7CisJdTMyIGVzYV9tc2I7CisJdTMyIGVzYV9sc2I7CisJdTMyIG1kaW87CisJdTMyIHR4X2Rlc2NfcDsKKwl1MzIgcnhfZGVzY19wOworCXUzMiBlZGNsaXA7CisJdTMyIGhhc2hfbXNiOworCXUzMiBoYXNoX2xzYjsKK307CisKKy8qIEdSRVRIIGJ1ZmZlciBkZXNjcmlwdG9yICovCitzdHJ1Y3QgZ3JldGhfYmQgeworCXUzMiBzdGF0OworCXUzMiBhZGRyOworfTsKKworc3RydWN0IGdyZXRoX3ByaXZhdGUgeworCXN0cnVjdCBza19idWZmICpyeF9za2J1ZmZbR1JFVEhfUlhCRF9OVU1dOworCXN0cnVjdCBza19idWZmICp0eF9za2J1ZmZbR1JFVEhfVFhCRF9OVU1dOworCisJdW5zaWduZWQgY2hhciAqdHhfYnVmc1tHUkVUSF9UWEJEX05VTV07CisJdW5zaWduZWQgY2hhciAqcnhfYnVmc1tHUkVUSF9SWEJEX05VTV07CisKKwl1MTYgdHhfbmV4dDsKKwl1MTYgdHhfbGFzdDsKKwl1MTYgdHhfZnJlZTsKKwl1MTYgcnhfY3VyOworCisJc3RydWN0IGdyZXRoX3JlZ3MgKnJlZ3M7CS8qIEFkZHJlc3Mgb2YgY29udHJvbGxlciByZWdpc3RlcnMuICovCisJc3RydWN0IGdyZXRoX2JkICpyeF9iZF9iYXNlOwkvKiBBZGRyZXNzIG9mIFJ4IEJEcy4gKi8KKwlzdHJ1Y3QgZ3JldGhfYmQgKnR4X2JkX2Jhc2U7CS8qIEFkZHJlc3Mgb2YgVHggQkRzLiAqLworCWRtYV9hZGRyX3QgcnhfYmRfYmFzZV9waHlzOworCWRtYV9hZGRyX3QgdHhfYmRfYmFzZV9waHlzOworCisJaW50IGlycTsKKworCXN0cnVjdCBkZXZpY2UgKmRldjsJICAgICAgICAvKiBQb2ludGVyIHRvIG9mX2RldmljZS0+ZGV2ICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzcGlubG9ja190IGRldmxvY2s7CisKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OworCXN0cnVjdCBtaWlfYnVzICptZGlvOworCWludCBtZGlvX2lycXNbUEhZX01BWF9BRERSXTsKKwl1bnNpZ25lZCBpbnQgbGluazsKKwl1bnNpZ25lZCBpbnQgc3BlZWQ7CisJdW5zaWduZWQgaW50IGR1cGxleDsKKworCXUzMiBtc2dfZW5hYmxlOworCXUzMiBmbGFnczsKKworCXU4IHBoeWFkZHI7CisJdTggbXVsdGljYXN0OworCXU4IGdiaXRfbWFjOworCXU4IG1kaW9faW50X2VuOworCXU4IGVkY2w7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCBlYTg1MDc1Li4zNzM1NDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xODU0LDE3ICsxODU0LDE4IEBACiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQl3cml0ZXcoMHgwMDBGLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDYzKSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gNjMpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQl3cml0ZXcoMHgwMDBCLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeyAvKiBNdXN0IHVzZSB0aGUgQ0FNIGZpbHRlci4gKi8KKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeyAvKiBNdXN0IHVzZSB0aGUgQ0FNIGZpbHRlci4gKi8KIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQlpbnQgaSA9IDA7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCXdyaXRlbCgqKHUzMiopKG1jbGlzdC0+ZG1pX2FkZHIpLCBpb2FkZHIgKyAweDEwMCArIGkqOCk7CiAJCQl3cml0ZWwoMHgyMDAwMCB8ICgqKHUxNiopJm1jbGlzdC0+ZG1pX2FkZHJbNF0pLAogCQkJCSAgIGlvYWRkciArIDB4MTA0ICsgaSo4KTsKKwkJCWkrKzsKIAkJfQogCQkvKiBDbGVhciByZW1haW5pbmcgZW50cmllcy4gKi8KIAkJZm9yICg7IGkgPCA2NDsgaSsrKQpAQCAtMTk5MCw3ICsxOTkxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoYW1hY2hpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShoYW1hY2hpX3BjaV90YmwpID0gewogCXsgMHgxMzE4LCAweDA5MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggOTBmODkwZS4uYjc2NmE2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0yMTAsNyArMjEwLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwMTAwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShocDEwMF9wY2lfdGJsKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjU4NUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjU4NUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjk3MEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKQEAgLTIwOTAsNyArMjA5MCw3IEBACiAJCWxwLT5tYWMyX21vZGUgPSBIUDEwMF9NQUMyTU9ERTY7CS8qIHByb21pc2N1b3VzIG1vZGUgPSBnZXQgYWxsIGdvb2QgKi8KIAkJbHAtPm1hYzFfbW9kZSA9IEhQMTAwX01BQzFNT0RFNjsJLyogcGFja2V0cyBvbiB0aGUgbmV0ICovCiAJCW1lbXNldCgmbHAtPmhhc2hfYnl0ZXMsIDB4ZmYsIDgpOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJbHAtPm1hYzJfbW9kZSA9IEhQMTAwX01BQzJNT0RFNTsJLyogbXVsdGljYXN0IG1vZGUgPSBnZXQgcGFja2V0cyBmb3IgKi8KIAkJbHAtPm1hYzFfbW9kZSA9IEhQMTAwX01BQzFNT0RFNTsJLyogbWUsIGJyb2FkY2FzdHMgYW5kIGFsbCBtdWx0aWNhc3RzICovCiAjaWZkZWYgSFAxMDBfTVVMVElDQVNUX0ZJTFRFUgkvKiBkb2Vzbid0IHdvcmshISEgKi8KQEAgLTIwOTgsMjIgKzIwOTgsMjMgQEAKIAkJCS8qIHNldCBoYXNoIGZpbHRlciB0byByZWNlaXZlIGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwogCQkJbWVtc2V0KCZscC0+aGFzaF9ieXRlcywgMHhmZiwgOCk7CiAJCX0gZWxzZSB7Ci0JCQlpbnQgaSwgaiwgaWR4OworCQkJaW50IGksIGlkeDsKIAkJCXVfY2hhciAqYWRkcnM7CiAJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogCQkJbWVtc2V0KCZscC0+aGFzaF9ieXRlcywgMHgwMCwgOCk7CiAjaWZkZWYgSFAxMDBfREVCVUcKLQkJCXByaW50aygiaHAxMDA6ICVzOiBjb21wdXRpbmcgaGFzaCBmaWx0ZXIgLSBtY19jb3VudCA9ICVpXG4iLCBkZXYtPm5hbWUsIGRldi0+bWNfY291bnQpOworCQkJcHJpbnRrKCJocDEwMDogJXM6IGNvbXB1dGluZyBoYXNoIGZpbHRlciAtIG1jX2NvdW50ID0gJWlcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBuZXRkZXZfbWNfY291bnQoZGV2KSk7CiAjZW5kaWYKLQkJCWZvciAoaSA9IDAsIGRtaSA9IGRldi0+bWNfbGlzdDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgZG1pID0gZG1pLT5uZXh0KSB7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAkJCQlpZiAoKCphZGRycyAmIDB4MDEpID09IDB4MDEpIHsJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAjaWZkZWYgSFAxMDBfREVCVUcKIAkJCQkJcHJpbnRrKCJocDEwMDogJXM6IG11bHRpY2FzdCA9ICVwTSwgIiwKIAkJCQkJCSAgICAgZGV2LT5uYW1lLCBhZGRycyk7CiAjZW5kaWYKLQkJCQkJZm9yIChqID0gaWR4ID0gMDsgaiA8IDY7IGorKykgeworCQkJCQlmb3IgKGkgPSBpZHggPSAwOyBpIDwgNjsgaSsrKSB7CiAJCQkJCQlpZHggXj0gKmFkZHJzKysgJiAweDNmOwogCQkJCQkJcHJpbnRrKCI6JTAyeDoiLCBpZHgpOwogCQkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggZmI1ZTAxOS4uZmIwYWM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMzkxLDExICszOTEsMTEgQEAKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAlpbnQgaTsKIAotCURCRyhkZXYsICJoYXNoX21jICVkIiBOTCwgZGV2LT5uZGV2LT5tY19jb3VudCk7CisJREJHKGRldiwgImhhc2hfbWMgJWQiIE5MLCBuZXRkZXZfbWNfY291bnQoZGV2LT5uZGV2KSk7CiAKIAltZW1zZXQoZ2FodF90ZW1wLCAwLCBzaXplb2YgKGdhaHRfdGVtcCkpOwogCi0JZm9yIChkbWkgPSBkZXYtPm5kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pID0gZG1pLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYtPm5kZXYpIHsKIAkJaW50IHNsb3QsIHJlZywgbWFzazsKIAkJREJHMihkZXYsICJtYyAlcE0iIE5MLCBkbWktPmRtaV9hZGRyKTsKIApAQCAtNDI1LDkgKzQyNSw5IEBACiAJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXIgfD0gRU1BQ19STVJfUE1FOwogCWVsc2UgaWYgKG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCQkgKG5kZXYtPm1jX2NvdW50ID4gRU1BQ19YQUhUX1NMT1RTKGRldikpKQorCQkJIChuZXRkZXZfbWNfY291bnQobmRldikgPiBFTUFDX1hBSFRfU0xPVFMoZGV2KSkpCiAJCXIgfD0gRU1BQ19STVJfUE1NRTsKLQllbHNlIGlmIChuZGV2LT5tY19jb3VudCA+IDApCisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShuZGV2KSkKIAkJciB8PSBFTUFDX1JNUl9NQUU7CiAKIAlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCAwNTJjNzQwLi5iNWQwZjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC00MjAsNyArNDIwLDcgQEAKIAkvKiBzdGFydCBwdXR0aW5nIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIENBTSBsaXN0LiAgU3RvcCBpZgogCSAgIGl0IGlzIGZ1bGwuICovCiAKLQlmb3IgKG1jcHRyID0gZGV2LT5tY19saXN0OyBtY3B0ciAhPSBOVUxMOyBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNwdHIsIGRldikgewogCQlwdXRjYW0oY2FtcywgJmNhbWNudCwgbWNwdHItPmRtaV9hZGRyKTsKIAkJaWYgKGNhbWNudCA9PSAxNikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGE4NjY5MzkuLmYyYjkzNzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0xMDYyLDcgKzEwNjIsOCBAQAogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAotCWlmKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChuZXRkZXYtPm1jX2NvdW50ID4gYWRhcHRlci0+bWNhc3RGaWx0ZXJTaXplKSkgeworCWlmICgobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fAorCSAgICAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBhZGFwdGVyLT5tY2FzdEZpbHRlclNpemUpKSB7CiAJCWxwYXJfcmMgPSBoX211bHRpY2FzdF9jdHJsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJICAgSWJtVmV0aE1jYXN0RW5hYmxlUmVjdiB8CiAJCQkJCSAgIElibVZldGhNY2FzdERpc2FibGVGaWx0ZXJpbmcsCkBAIC0xMDcxLDggKzEwNzIsNyBAQAogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gZW50ZXJpbmcgcHJvbWlzYyBtb2RlXG4iLCBscGFyX3JjKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gbmV0ZGV2LT5tY19saXN0OwotCQlpbnQgaTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCS8qIGNsZWFyIHRoZSBmaWx0ZXIgdGFibGUgJiBkaXNhYmxlIGZpbHRlcmluZyAqLwogCQlscGFyX3JjID0gaF9tdWx0aWNhc3RfY3RybChhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsCiAJCQkJCSAgIElibVZldGhNY2FzdEVuYWJsZVJlY3YgfApAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX211bHRpY2FzdF9jdHJsIHJjPSVsZCB3aGVuIGF0dGVtcHRpbmcgdG8gY2xlYXIgZmlsdGVyIHRhYmxlXG4iLCBscGFyX3JjKTsKIAkJfQogCQkvKiBhZGQgdGhlIGFkZHJlc3NlcyB0byB0aGUgZmlsdGVyIHRhYmxlICovCi0JCWZvcihpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7ICsraSwgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgbmV0ZGV2KSB7CiAJCQkvLyBhZGQgdGhlIG11bHRpY2FzdCBhZGRyZXNzIHRvIHRoZSBmaWx0ZXIgdGFibGUKIAkJCXVuc2lnbmVkIGxvbmcgbWNhc3RfYWRkciA9IDA7CiAJCQltZW1jcHkoKChjaGFyICopJm1jYXN0X2FkZHIpKzIsIG1jbGlzdC0+ZG1pX2FkZHIsIDYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCBjNTA1YjUwZC4uOWQ3ZmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTcyNyw2ICs3MjcsMzQgQEAKIH0KIAogLyoqCisgKiAgaWdiX3Bvd2VyX3VwX3NlcmRlc19saW5rXzgyNTc1IC0gUG93ZXIgdXAgdGhlIHNlcmRlcyBsaW5rIGFmdGVyIHNodXRkb3duCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqKi8KK3ZvaWQgaWdiX3Bvd2VyX3VwX3NlcmRlc19saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIHJlZzsKKworCisJaWYgKChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpICYmCisJICAgICFpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIFBDUyB0byB0dXJuIG9uIGxpbmsgKi8KKwlyZWcgPSByZDMyKEUxMDAwX1BDU19DRkcwKTsKKwlyZWcgfD0gRTEwMDBfUENTX0NGR19QQ1NfRU47CisJd3IzMihFMTAwMF9QQ1NfQ0ZHMCwgcmVnKTsKKworCS8qIFBvd2VyIHVwIHRoZSBsYXNlciAqLworCXJlZyA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOworCXJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfU0RQM19EQVRBOworCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIHJlZyk7CisKKwkvKiBmbHVzaCB0aGUgd3JpdGUgdG8gdmVyaWZ5IGNvbXBsZXRpb24gKi8KKwl3cmZsKCk7CisJbXNsZWVwKDEpOworfQorCisvKioKICAqICBpZ2JfZ2V0X3Bjc19zcGVlZF9hbmRfZHVwbGV4XzgyNTc1IC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCkBAIC03OTEsMjcgKzgxOSwxMiBAQAogdm9pZCBpZ2Jfc2h1dGRvd25fc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAl1MzIgcmVnOwotCXUxNiBlZXByb21fZGF0YSA9IDA7CiAKLQlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzIHx8CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyAmJgogCSAgICBpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkKIAkJcmV0dXJuOwogCi0JaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzApCi0JCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwgJmVlcHJvbV9kYXRhKTsKLQllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1ODApCi0JCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSArCi0JCSAgICAgICAgICAgICAgICAgTlZNXzgyNTgwX0xBTl9GVU5DX09GRlNFVChody0+YnVzLmZ1bmMpLCAxLAotCQkgICAgICAgICAgICAgICAgICZlZXByb21fZGF0YSk7Ci0JZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IEUxMDAwX0ZVTkNfMSkKLQkJaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9CLCAxLCAmZWVwcm9tX2RhdGEpOwotCi0JLyoKLQkgKiBJZiBBUE0gaXMgbm90IGVuYWJsZWQgaW4gdGhlIEVFUFJPTSBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMKLQkgKiBub3QgZW5hYmxlZCwgdGhlbiBwb3dlciBkb3duLgotCSAqLwotCWlmICghKGVlcHJvbV9kYXRhICYgRTEwMDBfTlZNX0FQTUVfODI1NzUpICYmCi0JICAgICFpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoaHcpKSB7CisJaWYgKCFpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoaHcpKSB7CiAJCS8qIERpc2FibGUgUENTIHRvIHR1cm4gb2ZmIGxpbmsgKi8KIAkJcmVnID0gcmQzMihFMTAwMF9QQ1NfQ0ZHMCk7CiAJCXJlZyAmPSB+RTEwMDBfUENTX0NGR19QQ1NfRU47CkBAIC04MjYsOCArODM5LDYgQEAKIAkJd3JmbCgpOwogCQltc2xlZXAoMSk7CiAJfQotCi0JcmV0dXJuOwogfQogCiAvKioKQEAgLTExODMsNiArMTE5NCwyMiBAQAogfQogCiAvKioKKyAqIGlnYl9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzUgLSBSZW1vdmUgbGluayBkdXJpbmcgUEhZIHBvd2VyIGRvd24KKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogSW4gdGhlIGNhc2Ugb2YgYSBQSFkgcG93ZXIgZG93biB0byBzYXZlIHBvd2VyLCBvciB0byB0dXJuIG9mZiBsaW5rIGR1cmluZyBhCisgKiBkcml2ZXIgdW5sb2FkLCBvciB3YWtlIG9uIGxhbiBpcyBub3QgZW5hYmxlZCwgcmVtb3ZlIHRoZSBsaW5rLgorICoqLwordm9pZCBpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJLyogSWYgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGlzIG5vdCBlbmFibGVkLCB0aGVuIHBvd2VyIGRvd24gKi8KKwlpZiAoIShpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoaHcpIHx8IGlnYl9jaGVja19yZXNldF9ibG9jayhodykpKQorCQlpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyKGh3KTsKKworCXJldHVybjsKK30KKworLyoqCiAgKiAgaWdiX2NsZWFyX2h3X2NudHJzXzgyNTc1IC0gQ2xlYXIgZGV2aWNlIHNwZWNpZmljIGhhcmR3YXJlIGNvdW50ZXJzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCmluZGV4IGQ1MWM5OTIuLmZiZTFjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCkBAIC0yOSw2ICsyOSw4IEBACiAjZGVmaW5lIF9FMTAwMF84MjU3NV9IXwogCiBleHRlcm4gdm9pZCBpZ2Jfc2h1dGRvd25fc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitleHRlcm4gdm9pZCBpZ2JfcG93ZXJfdXBfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitleHRlcm4gdm9pZCBpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKICNkZWZpbmUgSURfTEVEX0RFRkFVTFRfODI1NzVfU0VSREVTICgoSURfTEVEX0RFRjFfREVGMiA8PCAxMikgfCBcCkBAIC0yMTksNiArMjIxLDkgQEAKICNkZWZpbmUgRTEwMDBfVkxWRl9MVkxBTiAgICAgICAgICAweDAwMTAwMDAwCiAjZGVmaW5lIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSAgMHg4MDAwMDAwMAogCisjZGVmaW5lIEUxMDAwX1ZNVklSX1ZMQU5BX0RFRkFVTFQgICAgICAweDQwMDAwMDAwIC8qIEFsd2F5cyB1c2UgZGVmYXVsdCBWTEFOICovCisjZGVmaW5lIEUxMDAwX1ZNVklSX1ZMQU5BX05FVkVSICAgICAgICAweDgwMDAwMDAwIC8qIE5ldmVyIGluc2VydCBWTEFOIHRhZyAqLworCiAjZGVmaW5lIEUxMDAwX0lPVkNUTCAweDA1QkJDCiAjZGVmaW5lIEUxMDAwX0lPVkNUTF9SRVVTRV9WRlEgMHgwMDAwMDAwMQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAppbmRleCA2ZTAzNmFlLi5mZTZjZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTMxMywxMiArMzEzLDYgQEAKICNkZWZpbmUgRTEwMDBfUEJBXzM0SyAweDAwMjIKICNkZWZpbmUgRTEwMDBfUEJBXzY0SyAweDAwNDAgICAgLyogNjRLQiAqLwogCi0jZGVmaW5lIElGU19NQVggICAgICAgODAKLSNkZWZpbmUgSUZTX01JTiAgICAgICA0MAotI2RlZmluZSBJRlNfUkFUSU8gICAgIDQKLSNkZWZpbmUgSUZTX1NURVAgICAgICAxMAotI2RlZmluZSBNSU5fTlVNX1hNSVRTIDEwMDAKLQogLyogU1cgU2VtYXBob3JlIFJlZ2lzdGVyICovCiAjZGVmaW5lIEUxMDAwX1NXU01fU01CSSAgICAgICAgIDB4MDAwMDAwMDEgLyogRHJpdmVyIFNlbWFwaG9yZSBiaXQgKi8KICNkZWZpbmUgRTEwMDBfU1dTTV9TV0VTTUJJICAgICAgMHgwMDAwMDAwMiAvKiBGVyBTZW1hcGhvcmUgYml0ICovCkBAIC00ODEsNiArNDc1LDcgQEAKIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWCAgICAgIDB4MDEwMCAgLyogRkRYID0xLCBoYWxmIGR1cGxleCA9MCAqLwogI2RlZmluZSBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLworI2RlZmluZSBNSUlfQ1JfUE9XRVJfRE9XTiAgICAgICAweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KICNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgMHgxMDAwICAvKiBBdXRvIE5lZyBFbmFibGUgKi8KICNkZWZpbmUgTUlJX0NSX0xPT1BCQUNLICAgICAgICAgMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KICNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgMHg4MDAwICAvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IGRiYWViNWY1Li40NDgwMDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaApAQCAtMzM5LDE5ICszMzksMTIgQEAKIAogCWVudW0gZTEwMDBfbWFjX3R5cGUgdHlwZTsKIAotCXUzMiBjb2xsaXNpb25fZGVsdGE7CiAJdTMyIGxlZGN0bF9kZWZhdWx0OwogCXUzMiBsZWRjdGxfbW9kZTE7CiAJdTMyIGxlZGN0bF9tb2RlMjsKIAl1MzIgbWNfZmlsdGVyX3R5cGU7Ci0JdTMyIHR4X3BhY2tldF9kZWx0YTsKIAl1MzIgdHhjdzsKIAotCXUxNiBjdXJyZW50X2lmc192YWw7Ci0JdTE2IGlmc19tYXhfdmFsOwotCXUxNiBpZnNfbWluX3ZhbDsKLQl1MTYgaWZzX3JhdGlvOwotCXUxNiBpZnNfc3RlcF9zaXplOwogCXUxNiBtdGFfcmVnX2NvdW50OwogCXUxNiB1dGFfcmVnX2NvdW50OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKaW5kZXggMmFkMzU4YS4uMmE4YTg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwpAQCAtMTMwNCw3NiArMTMwNCw2IEBACiB9CiAKIC8qKgotICogIGlnYl9yZXNldF9hZGFwdGl2ZSAtIFJlc2V0IEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJlc2V0IHRoZSBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcgdGhyb3R0bGUgdG8gZGVmYXVsdCB2YWx1ZXMuCi0gKiovCi12b2lkIGlnYl9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7Ci0KLQlpZiAoIW1hYy0+YWRhcHRpdmVfaWZzKSB7Ci0JCWh3X2RiZygiTm90IGluIEFkYXB0aXZlIElGUyBtb2RlIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghbWFjLT5pZnNfcGFyYW1zX2ZvcmNlZCkgewotCQltYWMtPmN1cnJlbnRfaWZzX3ZhbCA9IDA7Ci0JCW1hYy0+aWZzX21pbl92YWwgPSBJRlNfTUlOOwotCQltYWMtPmlmc19tYXhfdmFsID0gSUZTX01BWDsKLQkJbWFjLT5pZnNfc3RlcF9zaXplID0gSUZTX1NURVA7Ci0JCW1hYy0+aWZzX3JhdGlvID0gSUZTX1JBVElPOwotCX0KLQotCW1hYy0+aW5faWZzX21vZGUgPSBmYWxzZTsKLQl3cjMyKEUxMDAwX0FJVCwgMCk7Ci1vdXQ6Ci0JcmV0dXJuOwotfQotCi0vKioKLSAqICBpZ2JfdXBkYXRlX2FkYXB0aXZlIC0gVXBkYXRlIEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFVwZGF0ZSB0aGUgQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIFRocm90dGxlIHZhbHVlIGJhc2VkIG9uIHRoZQotICogIHRpbWUgYmV0d2VlbiB0cmFuc21pdHRlZCBwYWNrZXRzIGFuZCB0aW1lIGJldHdlZW4gY29sbGlzaW9ucy4KLSAqKi8KLXZvaWQgaWdiX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7Ci0KLQlpZiAoIW1hYy0+YWRhcHRpdmVfaWZzKSB7Ci0JCWh3X2RiZygiTm90IGluIEFkYXB0aXZlIElGUyBtb2RlIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgobWFjLT5jb2xsaXNpb25fZGVsdGEgKiBtYWMtPmlmc19yYXRpbykgPiBtYWMtPnR4X3BhY2tldF9kZWx0YSkgewotCQlpZiAobWFjLT50eF9wYWNrZXRfZGVsdGEgPiBNSU5fTlVNX1hNSVRTKSB7Ci0JCQltYWMtPmluX2lmc19tb2RlID0gdHJ1ZTsKLQkJCWlmIChtYWMtPmN1cnJlbnRfaWZzX3ZhbCA8IG1hYy0+aWZzX21heF92YWwpIHsKLQkJCQlpZiAoIW1hYy0+Y3VycmVudF9pZnNfdmFsKQotCQkJCQltYWMtPmN1cnJlbnRfaWZzX3ZhbCA9IG1hYy0+aWZzX21pbl92YWw7Ci0JCQkJZWxzZQotCQkJCQltYWMtPmN1cnJlbnRfaWZzX3ZhbCArPQotCQkJCQkJbWFjLT5pZnNfc3RlcF9zaXplOwotCQkJCXdyMzIoRTEwMDBfQUlULAotCQkJCQkJbWFjLT5jdXJyZW50X2lmc192YWwpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1hYy0+aW5faWZzX21vZGUgJiYKLQkJICAgIChtYWMtPnR4X3BhY2tldF9kZWx0YSA8PSBNSU5fTlVNX1hNSVRTKSkgewotCQkJbWFjLT5jdXJyZW50X2lmc192YWwgPSAwOwotCQkJbWFjLT5pbl9pZnNfbW9kZSA9IGZhbHNlOwotCQkJd3IzMihFMTAwMF9BSVQsIDApOwotCQl9Ci0JfQotb3V0OgotCXJldHVybjsKLX0KLQotLyoqCiAgKiAgaWdiX3ZhbGlkYXRlX21kaV9zZXR0aW5nIC0gVmVyaWZ5IE1ESS9NREl4IHNldHRpbmdzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKaW5kZXggYmNhMTdkODguLjYwMWJlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKQEAgLTY3LDggKzY3LDYgQEAKIHZvaWQgaWdiX3B1dF9od19zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwogczMyICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotdm9pZCBpZ2JfcmVzZXRfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci12b2lkIGlnYl91cGRhdGVfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIGJvb2wgaWdiX2VuYWJsZV9tbmdfcGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKaW5kZXggMzY3MGE2Ni4uY2YxZjMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwpAQCAtMTkzMSw2ICsxOTMxLDQxIEBACiB9CiAKIC8qKgorICogaWdiX3Bvd2VyX3VwX3BoeV9jb3BwZXIgLSBSZXN0b3JlIGNvcHBlciBsaW5rIGluIGNhc2Ugb2YgUEhZIHBvd2VyIGRvd24KKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogSW4gdGhlIGNhc2Ugb2YgYSBQSFkgcG93ZXIgZG93biB0byBzYXZlIHBvd2VyLCBvciB0byB0dXJuIG9mZiBsaW5rIGR1cmluZyBhCisgKiBkcml2ZXIgdW5sb2FkLCByZXN0b3JlIHRoZSBsaW5rIHRvIHByZXZpb3VzIHNldHRpbmdzLgorICoqLwordm9pZCBpZ2JfcG93ZXJfdXBfcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUxNiBtaWlfcmVnID0gMDsKKworCS8qIFRoZSBQSFkgd2lsbCByZXRhaW4gaXRzIHNldHRpbmdzIGFjcm9zcyBhIHBvd2VyIGRvd24vdXAgY3ljbGUgKi8KKwlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZtaWlfcmVnKTsKKwltaWlfcmVnICY9IH5NSUlfQ1JfUE9XRVJfRE9XTjsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBtaWlfcmVnKTsKK30KKworLyoqCisgKiBpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyIC0gUG93ZXIgZG93biBjb3BwZXIgUEhZCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqIFBvd2VyIGRvd24gUEhZIHRvIHNhdmUgcG93ZXIgd2hlbiBpbnRlcmZhY2UgaXMgZG93biBhbmQgd2FrZSBvbiBsYW4KKyAqIGlzIG5vdCBlbmFibGVkLgorICoqLwordm9pZCBpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTE2IG1paV9yZWcgPSAwOworCisJLyogVGhlIFBIWSB3aWxsIHJldGFpbiBpdHMgc2V0dGluZ3MgYWNyb3NzIGEgcG93ZXIgZG93bi91cCBjeWNsZSAqLworCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJm1paV9yZWcpOworCW1paV9yZWcgfD0gTUlJX0NSX1BPV0VSX0RPV047CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgbWlpX3JlZyk7CisJbXNsZWVwKDEpOworfQorCisvKioKICAqICBpZ2JfY2hlY2tfcG9sYXJpdHlfODI1ODAgLSBDaGVja3MgdGhlIHBvbGFyaXR5LgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCmluZGV4IDU1NWViNTRiLi41NjVhNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCkBAIC02MCw2ICs2MCw4IEBACiBzMzIgIGlnYl93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgIGlnYl9waHlfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGl0ZXJhdGlvbnMsCiAJCQkJdTMyIHVzZWNfaW50ZXJ2YWwsIGJvb2wgKnN1Y2Nlc3MpOwordm9pZCBpZ2JfcG93ZXJfdXBfcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3ZvaWQgaWdiX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX3BoeV9pbml0X3NjcmlwdF9pZ3AzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfcmVhZF9waHlfcmVnX21kaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKIHMzMiAgaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAppbmRleCBkZDRlNmZmZDIuLmFiYjczMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMzEwLDYgKzMxMCw3IEBACiAjZGVmaW5lIEUxMDAwX1ZNT0xSKF9uKSAgICAgICAgKDB4MDVBRDAgKyAoNCAqIChfbikpKQogI2RlZmluZSBFMTAwMF9WTFZGKF9uKSAgICAgICAgICgweDA1RDAwICsgKDQgKiAoX24pKSkgLyogVkxBTiBWaXJ0dWFsIE1hY2hpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZpbHRlciAtIFJXICovCisjZGVmaW5lIEUxMDAwX1ZNVklSKF9uKSAgICAgICAgKDB4MDM3MDAgKyAoNCAqIChfbikpKQogCiAjZGVmaW5lIHdyMzIocmVnLCB2YWx1ZSkgKHdyaXRlbCh2YWx1ZSwgaHctPmh3X2FkZHIgKyByZWcpKQogI2RlZmluZSByZDMyKHJlZykgKHJlYWRsKGh3LT5od19hZGRyICsgcmVnKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaCBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAppbmRleCBiMWMxZWI4Li5hMTc3NTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCkBAIC03NSwxMSArNzUsMTQgQEAKIAl1MTYgdmxhbnNfZW5hYmxlZDsKIAl1MzIgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBsYXN0X25hY2s7CisJdTE2IHBmX3ZsYW47IC8qIFdoZW4gc2V0LCBndWVzdCBWTEFOIGNvbmZpZyBub3QgYWxsb3dlZC4gKi8KKwl1MTYgcGZfcW9zOwogfTsKIAogI2RlZmluZSBJR0JfVkZfRkxBR19DVFMgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFZGIGlzIGNsZWFyIHRvIHNlbmQgZGF0YSAqLwogI2RlZmluZSBJR0JfVkZfRkxBR19VTklfUFJPTUlTQyAgICAweDAwMDAwMDAyIC8qIFZGIGhhcyB1bmljYXN0IHByb21pc2MgKi8KICNkZWZpbmUgSUdCX1ZGX0ZMQUdfTVVMVElfUFJPTUlTQyAgMHgwMDAwMDAwNCAvKiBWRiBoYXMgbXVsdGljYXN0IHByb21pc2MgKi8KKyNkZWZpbmUgSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQyAgICAgMHgwMDAwMDAwOCAvKiBQRiBoYXMgc2V0IE1BQyBhZGRyZXNzICovCiAKIC8qIFJYIGRlc2NyaXB0b3IgY29udHJvbCB0aHJlc2hvbGRzLgogICogUFRIUkVTSCAtIE1BQyB3aWxsIGNvbnNpZGVyIHByZWZldGNoIGlmIGl0IGhhcyBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mCkBAIC05MiwxMyArOTUsMTMgQEAKICAqICAgICAgICAgICBkZXNjcmlwdG9ycyB1bnRpbCBlaXRoZXIgaXQgaGFzIHRoaXMgbWFueSB0byB3cml0ZSBiYWNrLCBvciB0aGUKICAqICAgICAgICAgICBJVFIgdGltZXIgZXhwaXJlcy4KICAqLwotI2RlZmluZSBJR0JfUlhfUFRIUkVTSCAgICAgICAgICAgICAgICAgICAgKGh3LT5tYWMudHlwZSA8PSBlMTAwMF84MjU3NiA/IDE2IDogOCkKKyNkZWZpbmUgSUdCX1JYX1BUSFJFU0ggICAgICAgICAgICAgICAgICAgICA4CiAjZGVmaW5lIElHQl9SWF9IVEhSRVNIICAgICAgICAgICAgICAgICAgICAgOAogI2RlZmluZSBJR0JfUlhfV1RIUkVTSCAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgSUdCX1RYX1BUSFJFU0ggICAgICAgICAgICAgICAgICAgICA4CiAjZGVmaW5lIElHQl9UWF9IVEhSRVNIICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBJR0JfVFhfV1RIUkVTSCAgICAgICAgICAgICAgICAgICAgICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2ICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm1zaXhfZW50cmllcykgPyAwIDogMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5tc2l4X2VudHJpZXMpID8gMSA6IDE2KQogCiAvKiB0aGlzIGlzIHRoZSBzaXplIHBhc3Qgd2hpY2ggaGFyZHdhcmUgd2lsbCBkcm9wIHBhY2tldHMgd2hlbiBzZXR0aW5nIExQRT0wICovCiAjZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFIDE1MjIKQEAgLTEzOCw2ICsxNDEsNyBAQAogCQkJdTE2IGxlbmd0aDsKIAkJCXUxNiBuZXh0X3RvX3dhdGNoOwogCQkJdTE2IG1hcHBlZF9hc19wYWdlOworCQkJdTE2IGdzb19zZWdzOwogCQl9OwogCQkvKiBSWCAqLwogCQlzdHJ1Y3QgewpAQCAtMTczLDcgKzE3Nyw2IEBACiAKIAl1MTYgaXRyX3ZhbDsKIAl1OCBzZXRfaXRyOwotCXU4IGl0cl9zaGlmdDsKIAl2b2lkIF9faW9tZW0gKml0cl9yZWdpc3RlcjsKIAogCWNoYXIgbmFtZVtJRk5BTVNJWiArIDldOwpAQCAtMjM4LDcgKzI0MSw2IEBACiB9CiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KLQogc3RydWN0IGlnYl9hZGFwdGVyIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwaHlfaW5mb190aW1lcjsKQEAgLTI2NCwxMiArMjY2LDEyIEBACiAJdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwogCiAJLyogVFggKi8KLQlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3Jpbmc7ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmdbMTZdOwogCXVuc2lnbmVkIGxvbmcgdHhfcXVldWVfbGVuOwogCXUzMiB0eF90aW1lb3V0X2NvdW50OwogCiAJLyogUlggKi8KLQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3Jpbmc7ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmdbMTZdOwogCWludCBudW1fdHhfcXVldWVzOwogCWludCBudW1fcnhfcXVldWVzOwogCkBAIC0zNTQsNyArMzU2LDkgQEAKIAkJCQkJICAgc3RydWN0IGlnYl9idWZmZXIgKik7CiBleHRlcm4gdm9pZCBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICosIGludCk7CiBleHRlcm4gdm9pZCBpZ2JfdXBkYXRlX3N0YXRzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK2V4dGVybiBib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgaWdiX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGlnYl9wb3dlcl91cF9saW5rKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIAogc3RhdGljIGlubGluZSBzMzIgaWdiX3Jlc2V0X3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBmNzcxYTZjLi5hNGNlYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMjM0LDYgKzIzNCwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIGlnYl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmYWRhcHRlci0+aHcubWFjOworCisJLyoKKwkgKiBJZiB0aGUgbGluayBpcyBub3QgcmVwb3J0ZWQgdXAgdG8gbmV0ZGV2LCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKKwkgKiBhbmQgc28gdGhlIHBoeXNpY2FsIGxpbmsgc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0CisJICogbG9va2VkLiBTZXQgZ2V0X2xpbmtfc3RhdHVzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0cnVlIGxpbmsKKwkgKiBzdGF0ZSBpcyBpbnRlcnJvZ2F0ZWQsIHJhdGhlciB0aGFuIHB1bGxpbmcgYSBjYWNoZWQgYW5kIHBvc3NpYmx5CisJICogc3RhbGUgbGluayBzdGF0ZSBmcm9tIHRoZSBkcml2ZXIuCisJICovCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCW1hYy0+Z2V0X2xpbmtfc3RhdHVzID0gMTsKKworCXJldHVybiBpZ2JfaGFzX2xpbmsoYWRhcHRlcik7Cit9CisKIHN0YXRpYyB2b2lkIGlnYl9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQogewpAQCAtMjk2LDcgKzMxNCw3IEBACiBzdGF0aWMgdTMyIGlnYl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuICEhKGFkYXB0ZXItPnJ4X3JpbmdbMF0uZmxhZ3MgJiBJR0JfUklOR19GTEFHX1JYX0NTVU0pOworCXJldHVybiAhIShhZGFwdGVyLT5yeF9yaW5nWzBdLT5mbGFncyAmIElHQl9SSU5HX0ZMQUdfUlhfQ1NVTSk7CiB9CiAKIHN0YXRpYyBpbnQgaWdiX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQpAQCAtMzA2LDkgKzMyNCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCWlmIChkYXRhKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5mbGFncyB8PSBJR0JfUklOR19GTEFHX1JYX0NTVU07CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5mbGFncyB8PSBJR0JfUklOR19GTEFHX1JYX0NTVU07CiAJCWVsc2UKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uZmxhZ3MgJj0gfklHQl9SSU5HX0ZMQUdfUlhfQ1NVTTsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPmZsYWdzICY9IH5JR0JfUklOR19GTEFHX1JYX0NTVU07CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NzEsOSArNzg5LDkgQEAKIAogCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+Y291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CiAJCWdvdG8gY2xlYXJfcmVzZXQ7CkBAIC03OTcsMTAgKzgxNSwxMCBAQAogCSAqIHRvIHRoZSB0eCBhbmQgcnggcmluZyBzdHJ1Y3RzLgogCSAqLwogCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgewotCQltZW1jcHkodGVtcF9yaW5nLCBhZGFwdGVyLT50eF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKLQogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQltZW1jcHkoJnRlbXBfcmluZ1tpXSwgYWRhcHRlci0+dHhfcmluZ1tpXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7CisKIAkJCXRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKIAkJCWVyciA9IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMoJnRlbXBfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CkBAIC04MTIsMjAgKzgzMCwyMSBAQAogCQkJfQogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCWlnYl9mcmVlX3R4X3Jlc291cmNlcygmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCWlnYl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKIAotCQltZW1jcHkoYWRhcHRlci0+dHhfcmluZywgdGVtcF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKKwkJCW1lbWNweShhZGFwdGVyLT50eF9yaW5nW2ldLCAmdGVtcF9yaW5nW2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKKwkJfQogCiAJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJfQogCi0JaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nLT5jb3VudCkgewotCQltZW1jcHkodGVtcF9yaW5nLCBhZGFwdGVyLT5yeF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKLQorCWlmIChuZXdfcnhfY291bnQgIT0gYWRhcHRlci0+cnhfcmluZ19jb3VudCkgewogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQltZW1jcHkoJnRlbXBfcmluZ1tpXSwgYWRhcHRlci0+cnhfcmluZ1tpXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7CisKIAkJCXRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKIAkJCWVyciA9IGlnYl9zZXR1cF9yeF9yZXNvdXJjZXMoJnRlbXBfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CkBAIC04MzgsMTEgKzg1NywxMiBAQAogCiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKCZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCi0JCW1lbWNweShhZGFwdGVyLT5yeF9yaW5nLCB0ZW1wX3JpbmcsCi0JCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOworCQkJbWVtY3B5KGFkYXB0ZXItPnJ4X3JpbmdbaV0sICZ0ZW1wX3JpbmdbaV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOworCQl9CiAKIAkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIAl9CkBAIC0xNzA0LDYgKzE3MjQsOSBAQAogCiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCisJCS8qIHBvd2VyIHVwIGxpbmsgZm9yIGxpbmsgdGVzdCAqLworCQlpZ2JfcG93ZXJfdXBfbGluayhhZGFwdGVyKTsKKwogCQkvKiBMaW5rIHRlc3QgcGVyZm9ybWVkIGJlZm9yZSBoYXJkd2FyZSByZXNldCBzbyBhdXRvbmVnIGRvZXNuJ3QKIAkJICogaW50ZXJmZXJlIHdpdGggdGVzdCByZXN1bHQgKi8KIAkJaWYgKGlnYl9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQpAQCAtMTcyNyw2ICsxNzUwLDggQEAKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKIAkJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCQkvKiBwb3dlciB1cCBsaW5rIGZvciBsb29wYmFjayB0ZXN0ICovCisJCWlnYl9wb3dlcl91cF9saW5rKGFkYXB0ZXIpOwogCQlpZiAoaWdiX2xvb3BiYWNrX3Rlc3QoYWRhcHRlciwgJmRhdGFbM10pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIApAQCAtMTc0NSw5ICsxNzcwLDE0IEBACiAJCQlkZXZfb3BlbihuZXRkZXYpOwogCX0gZWxzZSB7CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7Ci0JCS8qIE9ubGluZSB0ZXN0cyAqLwotCQlpZiAoaWdiX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCi0JCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCisJCS8qIFBIWSBpcyBwb3dlcmVkIGRvd24gd2hlbiBpbnRlcmZhY2UgaXMgZG93biAqLworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJZGF0YVs0XSA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoaWdiX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCisJCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJfQogCiAJCS8qIE9ubGluZSB0ZXN0cyBhcmVuJ3QgcnVuOyBwYXNzIGJ5IGRlZmF1bHQgKi8KIAkJZGF0YVswXSA9IDA7CkBAIC0xODEyLDcgKzE4NDIsOCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKLQkJCSBXQUtFX0JDQVNUIHwgV0FLRV9NQUdJQzsKKwkgICAgICAgICAgICAgICAgIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDIHwKKwkgICAgICAgICAgICAgICAgIFdBS0VfUEhZOwogCXdvbC0+d29sb3B0cyA9IDA7CiAKIAkvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgc2V0IC0+c3VwcG9ydGVkID0gMCBhbmQgcmV0dXJuIDEgaWYgd29sIGlzIG5vdApAQCAtMTgzNSwxNSArMTg2NiwxNSBAQAogCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKIAlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19NQUcpCiAJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOwotCi0JcmV0dXJuOworCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0xOS0MpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1BIWTsKIH0KIAogc3RhdGljIGludCBpZ2Jfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQorCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGlnYl93b2xfZXhjbHVzaW9uKGFkYXB0ZXIsIHdvbCkgfHwKQEAgLTE4NjEsNiArMTg5Miw4IEBACiAJCWFkYXB0ZXItPndvbCB8PSBFMTAwMF9XVUZDX0JDOwogCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQogCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19NQUc7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZKQorCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19MTktDOwogCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOwogCiAJcmV0dXJuIDA7CkBAIC0yMDA1LDEyICsyMDM4LDEyIEBACiAJCQlzaXplb2YodTY0KSkgPyAqKHU2NCAqKXAgOiAqKHUzMiAqKXA7CiAJfQogCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBqKyspIHsKLQkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+dHhfcmluZ1tqXS50eF9zdGF0czsKKwkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+dHhfcmluZ1tqXS0+dHhfc3RhdHM7CiAJCWZvciAoayA9IDA7IGsgPCBJR0JfVFhfUVVFVUVfU1RBVFNfTEVOOyBrKyssIGkrKykKIAkJCWRhdGFbaV0gPSBxdWV1ZV9zdGF0W2tdOwogCX0KIAlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnJ4X3Jpbmdbal0ucnhfc3RhdHM7CisJCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnJ4X3Jpbmdbal0tPnJ4X3N0YXRzOwogCQlmb3IgKGsgPSAwOyBrIDwgSUdCX1JYX1FVRVVFX1NUQVRTX0xFTjsgaysrLCBpKyspCiAJCQlkYXRhW2ldID0gcXVldWVfc3RhdFtrXTsKIAl9CkBAIC0yMDc0LDcgKzIxMDcsNyBAQAogCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaWdiX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGlnYl9zZXRfbXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpZ2JfbndheV9yZXNldCwKLQkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBpZ2JfZ2V0X2xpbmssCiAJLmdldF9lZXByb21fbGVuICAgICAgICAgPSBpZ2JfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gICAgICAgICAgICAgPSBpZ2JfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbSAgICAgICAgICAgICA9IGlnYl9zZXRfZWVwcm9tLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBjODgxMzQ3Li41ODNhMjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtNjAsNyArNjAsNyBAQAogCVtib2FyZF84MjU3NV0gPSAmZTEwMDBfODI1NzVfaW5mbywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZ2JfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlnYl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1ODBfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1ODBfRklCRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU4MF9TRVJERVMpLCBib2FyZF84MjU3NSB9LApAQCAtMTMzLDYgKzEzMywxMiBAQAogc3RhdGljIHZvaWQgaWdiX3ZtbV9jb250cm9sKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIHN0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICosIGludCwgdW5zaWduZWQgY2hhciAqKTsKIHN0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgaWdiX25kb19zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTggKm1hYyk7CitzdGF0aWMgaW50IGlnYl9uZG9fc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgICBpbnQgdmYsIHUxNiB2bGFuLCB1OCBxb3MpOworc3RhdGljIGludCBpZ2JfbmRvX3NldF92Zl9idyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIGludCB0eF9yYXRlKTsKK3N0YXRpYyBpbnQgaWdiX25kb19nZXRfdmZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwKKwkJCQkgc3RydWN0IGlmbGFfdmZfaW5mbyAqaXZpKTsKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqLCBwbV9tZXNzYWdlX3QpOwpAQCAtMzEyLDMxICszMTgsMzUgQEAKIAkJICovCiAJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB7CiAJCQlmb3IgKDsgaSA8IGFkYXB0ZXItPnJzc19xdWV1ZXM7IGkrKykKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKwotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGkpOworCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKIAkJCWZvciAoOyBqIDwgYWRhcHRlci0+cnNzX3F1ZXVlczsgaisrKQotCQkJCWFkYXB0ZXItPnR4X3Jpbmdbal0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUV9JRFhfODI1NzYoaik7CisJCQkJYWRhcHRlci0+dHhfcmluZ1tqXS0+cmVnX2lkeCA9IHJiYXNlX29mZnNldCArCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGopOwogCQl9CiAJY2FzZSBlMTAwMF84MjU3NToKIAljYXNlIGUxMDAwXzgyNTgwOgogCWRlZmF1bHQ6CiAJCWZvciAoOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsgaTsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKyBpOwogCQlmb3IgKDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykKLQkJCWFkYXB0ZXItPnR4X3Jpbmdbal0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArIGo7CisJCQlhZGFwdGVyLT50eF9yaW5nW2pdLT5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsgajsKIAkJYnJlYWs7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBpZ2JfZnJlZV9xdWV1ZXMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewotCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwotCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCWludCBpOwogCi0JYWRhcHRlci0+dHhfcmluZyA9IE5VTEw7Ci0JYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlhZGFwdGVyLT50eF9yaW5nW2ldID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXSA9IE5VTEw7CisJfQogCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAwOwogCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAwOwogfQpAQCAtMzUwLDIwICszNjAsMTMgQEAKICAqKi8KIHN0YXRpYyBpbnQgaWdiX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGlnYl9yaW5nICpyaW5nOwogCWludCBpOwogCi0JYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKLQkJCQkgICBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT50eF9yaW5nKQotCQlnb3RvIGVycjsKLQotCWFkYXB0ZXItPnJ4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghYWRhcHRlci0+cnhfcmluZykKLQkJZ290byBlcnI7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCXJpbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyaW5nKQorCQkJZ290byBlcnI7CiAJCXJpbmctPmNvdW50ID0gYWRhcHRlci0+dHhfcmluZ19jb3VudDsKIAkJcmluZy0+cXVldWVfaW5kZXggPSBpOwogCQlyaW5nLT5wZGV2ID0gYWRhcHRlci0+cGRldjsKQEAgLTM3MSwxMCArMzc0LDEzIEBACiAJCS8qIEZvciA4MjU3NSwgY29udGV4dCBpbmRleCBtdXN0IGJlIHVuaXF1ZSBwZXIgcmluZy4gKi8KIAkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGUxMDAwXzgyNTc1KQogCQkJcmluZy0+ZmxhZ3MgPSBJR0JfUklOR19GTEFHX1RYX0NUWF9JRFg7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0gPSByaW5nOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJpbmcpCisJCQlnb3RvIGVycjsKIAkJcmluZy0+Y291bnQgPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50OwogCQlyaW5nLT5xdWV1ZV9pbmRleCA9IGk7CiAJCXJpbmctPnBkZXYgPSBhZGFwdGVyLT5wZGV2OwpAQCAtMzg0LDYgKzM5MCw3IEBACiAJCS8qIHNldCBmbGFnIGluZGljYXRpbmcgcmluZyBzdXBwb3J0cyBTQ1RQIGNoZWNrc3VtIG9mZmxvYWQgKi8KIAkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID49IGUxMDAwXzgyNTc2KQogCQkJcmluZy0+ZmxhZ3MgfD0gSUdCX1JJTkdfRkxBR19SWF9TQ1RQX0NTVU07CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSByaW5nOwogCX0KIAogCWlnYl9jYWNoZV9yaW5nX3JlZ2lzdGVyKGFkYXB0ZXIpOwpAQCAtNDk4LDYgKzUwNSwxMiBAQAogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQorCisJLyogYWRkIHFfdmVjdG9yIGVpbXMgdmFsdWUgdG8gZ2xvYmFsIGVpbXNfZW5hYmxlX21hc2sgKi8KKwlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrIHw9IHFfdmVjdG9yLT5laW1zX3ZhbHVlOworCisJLyogY29uZmlndXJlIHFfdmVjdG9yIHRvIHNldCBpdHIgb24gZmlyc3QgaW50ZXJydXB0ICovCisJcV92ZWN0b3ItPnNldF9pdHIgPSAxOwogfQogCiAvKioKQEAgLTU1NSwxMSArNTY4LDggQEAKIAogCWFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgfD0gYWRhcHRlci0+ZWltc19vdGhlcjsKIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcV92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKLQkJaWdiX2Fzc2lnbl92ZWN0b3IocV92ZWN0b3IsIHZlY3RvcisrKTsKLQkJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayB8PSBxX3ZlY3Rvci0+ZWltc192YWx1ZTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9xX3ZlY3RvcnM7IGkrKykKKwkJaWdiX2Fzc2lnbl92ZWN0b3IoYWRhcHRlci0+cV92ZWN0b3JbaV0sIHZlY3RvcisrKTsKIAogCXdyZmwoKTsKIH0KQEAgLTYzOSw2ICs2NDksOCBAQAogCWZvciAodl9pZHggPSAwOyB2X2lkeCA8IGFkYXB0ZXItPm51bV9xX3ZlY3RvcnM7IHZfaWR4KyspIHsKIAkJc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF07CiAJCWFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XSA9IE5VTEw7CisJCWlmICghcV92ZWN0b3IpCisJCQljb250aW51ZTsKIAkJbmV0aWZfbmFwaV9kZWwoJnFfdmVjdG9yLT5uYXBpKTsKIAkJa2ZyZWUocV92ZWN0b3IpOwogCX0KQEAgLTc1MCwzMyArNzYyLDI0IEBACiAJCWlmICghcV92ZWN0b3IpCiAJCQlnb3RvIGVycl9vdXQ7CiAJCXFfdmVjdG9yLT5hZGFwdGVyID0gYWRhcHRlcjsKLQkJcV92ZWN0b3ItPml0cl9zaGlmdCA9IChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzUpID8gMTYgOiAwOwogCQlxX3ZlY3Rvci0+aXRyX3JlZ2lzdGVyID0gaHctPmh3X2FkZHIgKyBFMTAwMF9FSVRSKDApOwogCQlxX3ZlY3Rvci0+aXRyX3ZhbCA9IElHQl9TVEFSVF9JVFI7Ci0JCXFfdmVjdG9yLT5zZXRfaXRyID0gMTsKIAkJbmV0aWZfbmFwaV9hZGQoYWRhcHRlci0+bmV0ZGV2LCAmcV92ZWN0b3ItPm5hcGksIGlnYl9wb2xsLCA2NCk7CiAJCWFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XSA9IHFfdmVjdG9yOwogCX0KIAlyZXR1cm4gMDsKIAogZXJyX291dDoKLQl3aGlsZSAodl9pZHgpIHsKLQkJdl9pZHgtLTsKLQkJcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF07Ci0JCW5ldGlmX25hcGlfZGVsKCZxX3ZlY3Rvci0+bmFwaSk7Ci0JCWtmcmVlKHFfdmVjdG9yKTsKLQkJYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdID0gTlVMTDsKLQl9CisJaWdiX2ZyZWVfcV92ZWN0b3JzKGFkYXB0ZXIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfbWFwX3J4X3JpbmdfdG9fdmVjdG9yKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJpbmdfaWR4LCBpbnQgdl9pZHgpCiB7Ci0Jc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3I7CisJc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF07CiAKLQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKLQlxX3ZlY3Rvci0+cnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW3JpbmdfaWR4XTsKKwlxX3ZlY3Rvci0+cnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbcmluZ19pZHhdOwogCXFfdmVjdG9yLT5yeF9yaW5nLT5xX3ZlY3RvciA9IHFfdmVjdG9yOwogCXFfdmVjdG9yLT5pdHJfdmFsID0gYWRhcHRlci0+cnhfaXRyX3NldHRpbmc7CiAJaWYgKHFfdmVjdG9yLT5pdHJfdmFsICYmIHFfdmVjdG9yLT5pdHJfdmFsIDw9IDMpCkBAIC03ODYsMTAgKzc4OSw5IEBACiBzdGF0aWMgdm9pZCBpZ2JfbWFwX3R4X3JpbmdfdG9fdmVjdG9yKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJpbmdfaWR4LCBpbnQgdl9pZHgpCiB7Ci0Jc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3I7CisJc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF07CiAKLQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKLQlxX3ZlY3Rvci0+dHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW3JpbmdfaWR4XTsKKwlxX3ZlY3Rvci0+dHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbcmluZ19pZHhdOwogCXFfdmVjdG9yLT50eF9yaW5nLT5xX3ZlY3RvciA9IHFfdmVjdG9yOwogCXFfdmVjdG9yLT5pdHJfdmFsID0gYWRhcHRlci0+dHhfaXRyX3NldHRpbmc7CiAJaWYgKHFfdmVjdG9yLT5pdHJfdmFsICYmIHFfdmVjdG9yLT5pdHJfdmFsIDw9IDMpCkBAIC0xMDk5LDcgKzExMDEsNyBAQAogCSAqIGF0IGxlYXN0IDEgZGVzY3JpcHRvciB1bnVzZWQgdG8gbWFrZSBzdXJlCiAJICogbmV4dF90b191c2UgIT0gbmV4dF90b19jbGVhbiAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CiAJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyaW5nLCBpZ2JfZGVzY191bnVzZWQocmluZykpOwogCX0KIApAQCAtMTEwNyw2ICsxMTA5LDI5IEBACiAJYWRhcHRlci0+dHhfcXVldWVfbGVuID0gbmV0ZGV2LT50eF9xdWV1ZV9sZW47CiB9CiAKKy8qKgorICogaWdiX3Bvd2VyX3VwX2xpbmsgLSBQb3dlciB1cCB0aGUgcGh5L3NlcmRlcyBsaW5rCisgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLwordm9pZCBpZ2JfcG93ZXJfdXBfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCQlpZ2JfcG93ZXJfdXBfcGh5X2NvcHBlcigmYWRhcHRlci0+aHcpOworCWVsc2UKKwkJaWdiX3Bvd2VyX3VwX3NlcmRlc19saW5rXzgyNTc1KCZhZGFwdGVyLT5odyk7Cit9CisKKy8qKgorICogaWdiX3Bvd2VyX2Rvd25fbGluayAtIFBvd2VyIGRvd24gdGhlIHBoeS9zZXJkZXMgbGluaworICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgaWdiX3Bvd2VyX2Rvd25fbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCQlpZ2JfcG93ZXJfZG93bl9waHlfY29wcGVyXzgyNTc1KCZhZGFwdGVyLT5odyk7CisJZWxzZQorCQlpZ2Jfc2h1dGRvd25fc2VyZGVzX2xpbmtfODI1NzUoJmFkYXB0ZXItPmh3KTsKK30KIAogLyoqCiAgKiBpZ2JfdXAgLSBPcGVuIHRoZSBpbnRlcmZhY2UgYW5kIHByZXBhcmUgaXQgdG8gaGFuZGxlIHRyYWZmaWMKQEAgLTEzMjgsMTIgKzEzNTMsMTQgQEAKIAkJd3IzMihFMTAwMF9QQ0lFTUlTQywKIAkJICAgICAgICAgICAgICAgIHJlZyAmIH5FMTAwMF9QQ0lFTUlTQ19MWF9ERUNJU0lPTik7CiAJfQorCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQorCQlpZ2JfcG93ZXJfZG93bl9saW5rKGFkYXB0ZXIpOworCiAJaWdiX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKIAogCS8qIEVuYWJsZSBoL3cgdG8gcmVjb2duaXplIGFuIDgwMi4xUSBWTEFOIEV0aGVybmV0IHBhY2tldCAqLwogCXdyMzIoRTEwMDBfVkVULCBFVEhFUk5FVF9JRUVFX1ZMQU5fVFlQRSk7CiAKLQlpZ2JfcmVzZXRfYWRhcHRpdmUoaHcpOwogCWlnYl9nZXRfcGh5X2luZm8oaHcpOwogfQogCkBAIC0xMzUyLDYgKzEzNzksMTAgQEAKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBpZ2Jfdmxhbl9yeF9yZWdpc3RlciwKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGlnYl92bGFuX3J4X2FkZF92aWQsCiAJLm5kb192bGFuX3J4X2tpbGxfdmlkCT0gaWdiX3ZsYW5fcnhfa2lsbF92aWQsCisJLm5kb19zZXRfdmZfbWFjCQk9IGlnYl9uZG9fc2V0X3ZmX21hYywKKwkubmRvX3NldF92Zl92bGFuCT0gaWdiX25kb19zZXRfdmZfdmxhbiwKKwkubmRvX3NldF92Zl90eF9yYXRlCT0gaWdiX25kb19zZXRfdmZfYncsCisJLm5kb19nZXRfdmZfY29uZmlnCT0gaWdiX25kb19nZXRfdmZfY29uZmlnLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBpZ2JfbmV0cG9sbCwKICNlbmRpZgpAQCAtMTQ3Miw3ICsxNTAzLDYgQEAKIAlpZ2JfZ2V0X2J1c19pbmZvX3BjaWUoaHcpOwogCiAJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBmYWxzZTsKLQlody0+bWFjLmFkYXB0aXZlX2lmcyA9IHRydWU7CiAKIAkvKiBDb3BwZXIgb3B0aW9ucyAqLwogCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKQEAgLTE3MDYsOSArMTczNiw2IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCi0JaWYgKCFpZ2JfY2hlY2tfcmVzZXRfYmxvY2soaHcpKQotCQlpZ2JfcmVzZXRfcGh5KGh3KTsKLQogCWlnYl9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKQEAgLTE5ODQsNyArMjAxMSw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc2V0dXBfcng7CiAKLQkvKiBlMTAwMF9wb3dlcl91cF9waHkoYWRhcHRlcik7ICovCisJaWdiX3Bvd2VyX3VwX2xpbmsoYWRhcHRlcik7CiAKIAkvKiBiZWZvcmUgd2UgYWxsb2NhdGUgYW4gaW50ZXJydXB0LCB3ZSBtdXN0IGJlIHJlYWR5IHRvIGhhbmRsZSBpdC4KIAkgKiBTZXR0aW5nIERFQlVHX1NISVJRIGluIHRoZSBrZXJuZWwgbWFrZXMgaXQgZmlyZSBhbiBpbnRlcnJ1cHQKQEAgLTIwMjYsNyArMjA1Myw3IEBACiAKIGVycl9yZXFfaXJxOgogCWlnYl9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7Ci0JLyogZTEwMDBfcG93ZXJfZG93bl9waHkoYWRhcHRlcik7ICovCisJaWdiX3Bvd2VyX2Rvd25fbGluayhhZGFwdGVyKTsKIAlpZ2JfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogZXJyX3NldHVwX3J4OgogCWlnYl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CkBAIC0yMTE0LDE5ICsyMTQxLDE5IEBACiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWVyciA9IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQllcnIgPSBpZ2Jfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJIkFsbG9jYXRpb24gZm9yIFR4IFF1ZXVlICV1IGZhaWxlZFxuIiwgaSk7CiAJCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCQkJaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJR0JfQUJTX01BWF9UWF9RVUVVRVM7IGkrKykgewogCQlpbnQgcl9pZHggPSBpICUgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKLQkJYWRhcHRlci0+bXVsdGlfdHhfdGFibGVbaV0gPSAmYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CisJCWFkYXB0ZXItPm11bHRpX3R4X3RhYmxlW2ldID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0yMjA5LDcgKzIyMzYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NvbmZpZ3VyZV90eF9yaW5nKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWdiX2NvbmZpZ3VyZV90eF9yaW5nKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTIyNjcsMTIgKzIyOTQsMTIgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJZXJyID0gaWdiX3NldHVwX3J4X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWVyciA9IGlnYl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlci0+cnhfcmluZ1tpXSk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKIAkJCWZvciAoaS0tOyBpID49IDA7IGktLSkKLQkJCQlpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjQ3OSw3ICsyNTA2LDggQEAKIAl3cjMyKEUxMDAwX1JMUE1MLCBtYXhfZnJhbWVfc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3Ztb2xyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50IHZmbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3Ztb2xyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgaW50IHZmbiwgYm9vbCBhdXBlKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZtb2xyOwpAQCAtMjQ5Miw4ICsyNTIwLDExIEBACiAJCXJldHVybjsKIAogCXZtb2xyID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKLQl2bW9sciB8PSBFMTAwMF9WTU9MUl9BVVBFIHwgICAgICAgIC8qIEFjY2VwdCB1bnRhZ2dlZCBwYWNrZXRzICovCi0JICAgICAgICAgRTEwMDBfVk1PTFJfU1RSVkxBTjsgICAgICAvKiBTdHJpcCB2bGFuIHRhZ3MgKi8KKwl2bW9sciB8PSBFMTAwMF9WTU9MUl9TVFJWTEFOOyAgICAgIC8qIFN0cmlwIHZsYW4gdGFncyAqLworCWlmIChhdXBlKQorCQl2bW9sciB8PSBFMTAwMF9WTU9MUl9BVVBFOyAgICAgICAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKwllbHNlCisJCXZtb2xyICY9IH4oRTEwMDBfVk1PTFJfQVVQRSk7IC8qIFRhZ2dlZCBwYWNrZXRzIE9OTFkgKi8KIAogCS8qIGNsZWFyIGFsbCBiaXRzIHRoYXQgbWlnaHQgbm90IGJlIHNldCAqLwogCXZtb2xyICY9IH4oRTEwMDBfVk1PTFJfQkFNIHwgRTEwMDBfVk1PTFJfUlNTRSk7CkBAIC0yNTYwLDExICsyNTkxLDE0IEBACiAJCSAgICAgICAgIEUxMDAwX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGOwogCX0KKwkvKiBPbmx5IHNldCBEcm9wIEVuYWJsZSBpZiB3ZSBhcmUgc3VwcG9ydGluZyBtdWx0aXBsZSBxdWV1ZXMgKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCB8fCBhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMSkKKwkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9EUk9QX0VOOwogCiAJd3IzMihFMTAwMF9TUlJDVEwocmVnX2lkeCksIHNycmN0bCk7CiAKIAkvKiBzZXQgZmlsdGVyaW5nIGZvciBWTURRIHBvb2xzICovCi0JaWdiX3NldF92bW9scihhZGFwdGVyLCByZWdfaWR4ICYgMHg3KTsKKwlpZ2Jfc2V0X3Ztb2xyKGFkYXB0ZXIsIHJlZ19pZHggJiAweDcsIHRydWUpOwogCiAJLyogZW5hYmxlIHJlY2VpdmUgZGVzY3JpcHRvciBmZXRjaGluZyAqLwogCXJ4ZGN0bCA9IHJkMzIoRTEwMDBfUlhEQ1RMKHJlZ19pZHgpKTsKQEAgLTI1OTYsNyArMjYzMCw3IEBACiAJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY29uZmlndXJlX3J4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZ2JfY29uZmlndXJlX3J4X3JpbmcoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMjYzMyw3ICsyNjY3LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9mcmVlX3R4X3Jlc291cmNlcygmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWlnYl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogdm9pZCBpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLApAQCAtMjcwMCw3ICsyNzM0LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl90eF9yaW5nKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWdiX2NsZWFuX3R4X3JpbmcoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMjczNyw3ICsyNzcxLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9mcmVlX3J4X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0yODAxLDcgKzI4MzUsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X3JpbmcoJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZ2JfY2xlYW5fcnhfcmluZyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0yODQzLDM4ICsyODc3LDMwIEBACiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwogCXU4ICAqbXRhX2xpc3Q7Ci0JdTMyIHZtb2xyID0gMDsKIAlpbnQgaTsKIAotCWlmICghbmV0ZGV2LT5tY19jb3VudCkgeworCWlmIChuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgewogCQkvKiBub3RoaW5nIHRvIHByb2dyYW0sIHNvIGNsZWFyIG1jIGxpc3QgKi8KIAkJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIE5VTEwsIDApOwogCQlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQltdGFfbGlzdCA9IGt6YWxsb2MobmV0ZGV2LT5tY19jb3VudCAqIDYsIEdGUF9BVE9NSUMpOworCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXZfbWNfY291bnQobmV0ZGV2KSAqIDYsIEdGUF9BVE9NSUMpOwogCWlmICghbXRhX2xpc3QpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogc2V0IHZtb2xyIHJlY2VpdmUgb3ZlcmZsb3cgbXVsdGljYXN0IGJpdCAqLwotCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX1JPTVBFOwotCiAJLyogVGhlIHNoYXJlZCBmdW5jdGlvbiBleHBlY3RzIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwotCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikKKwkJbWVtY3B5KG10YV9saXN0ICsgKGkrKyAqIEVUSF9BTEVOKSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCi0JZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgewotCQlpZiAoIW1jX3B0cikKLQkJCWJyZWFrOwotCQltZW1jcHkobXRhX2xpc3QgKyAoaSpFVEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJbWNfcHRyID0gbWNfcHRyLT5uZXh0OwotCX0KIAlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGkpOwogCWtmcmVlKG10YV9saXN0KTsKIAotCXJldHVybiBuZXRkZXYtPm1jX2NvdW50OworCXJldHVybiBuZXRkZXZfbWNfY291bnQobmV0ZGV2KTsKIH0KIAogLyoqCkBAIC0yODk1LDEyICsyOTIxLDEzIEBACiAJaW50IGNvdW50ID0gMDsKIAogCS8qIHJldHVybiBFTk9NRU0gaW5kaWNhdGluZyBpbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBhZGRyZXNzZXMgKi8KLQlpZiAobmV0ZGV2LT51Yy5jb3VudCA+IHJhcl9lbnRyaWVzKQorCWlmIChuZXRkZXZfdWNfY291bnQobmV0ZGV2KSA+IHJhcl9lbnRyaWVzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChuZXRkZXYtPnVjLmNvdW50ICYmIHJhcl9lbnRyaWVzKSB7CisJaWYgKCFuZXRkZXZfdWNfZW1wdHkobmV0ZGV2KSAmJiByYXJfZW50cmllcykgewogCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmbmV0ZGV2LT51Yy5saXN0LCBsaXN0KSB7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5ldGRldikgewogCQkJaWYgKCFyYXJfZW50cmllcykKIAkJCQlicmVhazsKIAkJCWlnYl9yYXJfc2V0X3FzZWwoYWRhcHRlciwgaGEtPmFkZHIsCkBAIC0zMDA0LDcgKzMwMzEsNyBAQAogICogaWdiX2hhc19saW5rIC0gY2hlY2sgc2hhcmVkIGNvZGUgZm9yIGxpbmsgYW5kIGRldGVybWluZSB1cC9kb3duCiAgKiBAYWRhcHRlcjogcG9pbnRlciB0byBkcml2ZXIgcHJpdmF0ZSBpbmZvCiAgKiovCi1zdGF0aWMgYm9vbCBpZ2JfaGFzX2xpbmsoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQorYm9vbCBpZ2JfaGFzX2xpbmsoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJYm9vbCBsaW5rX2FjdGl2ZSA9IGZhbHNlOwpAQCAtMzEyMSwxMCArMzE0OCw5IEBACiAJfQogCiAJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKLQlpZ2JfdXBkYXRlX2FkYXB0aXZlKGh3KTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbaV07CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQkvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKIAkJCSAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nCkBAIC0zMjI1LDYgKzMyNTEsMTAgQEAKIAllbHNlCiAJCW5ld192YWwgPSBhdmdfd2lyZV9zaXplIC8gMjsKIAorCS8qIHdoZW4gaW4gaXRyIG1vZGUgMyBkbyBub3QgZXhjZWVkIDIwSyBpbnRzL3NlYyAqLworCWlmIChhZGFwdGVyLT5yeF9pdHJfc2V0dGluZyA9PSAzICYmIG5ld192YWwgPCAxOTYpCisJCW5ld192YWwgPSAxOTY7CisKIHNldF9pdHJfdmFsOgogCWlmIChuZXdfdmFsICE9IHFfdmVjdG9yLT5pdHJfdmFsKSB7CiAJCXFfdmVjdG9yLT5pdHJfdmFsID0gbmV3X3ZhbDsKQEAgLTMzMjAsMTMgKzMzNTAsMTMgQEAKIAogCWFkYXB0ZXItPnJ4X2l0ciA9IGlnYl91cGRhdGVfaXRyKGFkYXB0ZXIsCiAJCQkJICAgIGFkYXB0ZXItPnJ4X2l0ciwKLQkJCQkgICAgYWRhcHRlci0+cnhfcmluZy0+dG90YWxfcGFja2V0cywKLQkJCQkgICAgYWRhcHRlci0+cnhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkJCSAgICBxX3ZlY3Rvci0+cnhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkgICAgcV92ZWN0b3ItPnJ4X3JpbmctPnRvdGFsX2J5dGVzKTsKIAogCWFkYXB0ZXItPnR4X2l0ciA9IGlnYl91cGRhdGVfaXRyKGFkYXB0ZXIsCiAJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKLQkJCQkgICAgYWRhcHRlci0+dHhfcmluZy0+dG90YWxfcGFja2V0cywKLQkJCQkgICAgYWRhcHRlci0+dHhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkJCSAgICBxX3ZlY3Rvci0+dHhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkgICAgcV92ZWN0b3ItPnR4X3JpbmctPnRvdGFsX2J5dGVzKTsKIAljdXJyZW50X2l0ciA9IG1heChhZGFwdGVyLT5yeF9pdHIsIGFkYXB0ZXItPnR4X2l0cik7CiAKIAkvKiBjb25zZXJ2YXRpdmUgbW9kZSAoaXRyIDMpIGVsaW1pbmF0ZXMgdGhlIGxvd2VzdF9sYXRlbmN5IHNldHRpbmcgKi8KQEAgLTMzNDksMTAgKzMzNzksMTAgQEAKIAl9CiAKIHNldF9pdHJfbm93OgotCWFkYXB0ZXItPnJ4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKLQlhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKLQlhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7Ci0JYWRhcHRlci0+dHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CisJcV92ZWN0b3ItPnJ4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwlxX3ZlY3Rvci0+cnhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CisJcV92ZWN0b3ItPnR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwlxX3ZlY3Rvci0+dHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+aXRyX3ZhbCkgewogCQkvKiB0aGlzIGF0dGVtcHRzIHRvIGJpYXMgdGhlIGludGVycnVwdCByYXRlIHRvd2FyZHMgQnVsawpAQCAtMzM5Miw4ICszNDIyLDggQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAl1MzIgaW5mbyA9IDAsIHR1X2NtZCA9IDA7Ci0JdTMyIG1zc19sNGxlbl9pZHgsIGw0bGVuOwotCSpoZHJfbGVuID0gMDsKKwl1MzIgbXNzX2w0bGVuX2lkeDsKKwl1OCBsNGxlbjsKIAogCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CiAJCWVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTsKQEAgLTM1OTksNiArMzYyOSw3IEBACiAJfQogCiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOworCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA/OiAxOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIAogCXJldHVybiArK2NvdW50OwpAQCAtMzYxMiwxNCArMzY0MywxMiBAQAogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSAwOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKIAlidWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UgPSBmYWxzZTsKLQljb3VudC0tOwogCiAJLyogY2xlYXIgdGltZXN0YW1wIGFuZCBkbWEgbWFwcGluZ3MgZm9yIHJlbWFpbmluZyBwb3J0aW9uIG9mIHBhY2tldCAqLwotCXdoaWxlIChjb3VudCA+PSAwKSB7Ci0JCWNvdW50LS07CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJaWYgKGkgPT0gMCkKKwkJCWkgPSB0eF9yaW5nLT5jb3VudDsKIAkJaS0tOwotCQlpZiAoaSA8IDApCi0JCQlpICs9IHR4X3JpbmctPmNvdW50OwogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJaWdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHR4X3JpbmcsIGJ1ZmZlcl9pbmZvKTsKIAl9CkBAIC0zNjI4LDcgKzM2NTcsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3R4X3F1ZXVlX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcsCi0JCQkJICAgIGludCB0eF9mbGFncywgaW50IGNvdW50LCB1MzIgcGF5bGVuLAorCQkJCSAgICB1MzIgdHhfZmxhZ3MsIGludCBjb3VudCwgdTMyIHBheWxlbiwKIAkJCQkgICAgdTggaGRyX2xlbikKIHsKIAl1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyAqdHhfZGVzYzsKQEAgLTM3MTYsNyArMzc0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGlnYl9tYXliZV9zdG9wX3R4KHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywgaW50IHNpemUpCiB7CiAJaWYgKGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBzaXplKQogCQlyZXR1cm4gMDsKQEAgLTM3MjcsMTAgKzM3NTYsMTAgQEAKIAkJCQkgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHR4X3JpbmctPm5ldGRldik7Ci0JdW5zaWduZWQgaW50IGZpcnN0OwotCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7Ci0JdTggaGRyX2xlbiA9IDA7CiAJaW50IHRzbyA9IDAsIGNvdW50OworCXUzMiB0eF9mbGFncyA9IDA7CisJdTE2IGZpcnN0OworCXU4IGhkcl9sZW4gPSAwOwogCXVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHggPSBza2JfdHgoc2tiKTsKIAogCS8qIG5lZWQ6IDEgZGVzY3JpcHRvciBwZXIgcGFnZSwKQEAgLTM5MTEsNyArMzk0MCw3IEBACiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9idWZmZXJfbGVuID0gcnhfYnVmZmVyX2xlbjsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cnhfYnVmZmVyX2xlbiA9IHJ4X2J1ZmZlcl9sZW47CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpZ2JfdXAoYWRhcHRlcik7CkBAIC0zOTMzLDcgKzM5NjIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfc3RhdHMgPSBpZ2JfZ2V0X3N0YXRzKGFkYXB0ZXItPm5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JdTMyIHJuYmM7CisJdTMyIHJuYmMsIHJlZzsKIAl1MTYgcGh5X3RtcDsKIAlpbnQgaTsKIAl1NjQgYnl0ZXMsIHBhY2tldHM7CkBAIC0zOTUzLDEwICszOTgyLDExIEBACiAJcGFja2V0cyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQl1MzIgcnFkcGNfdG1wID0gcmQzMihFMTAwMF9SUURQQyhpKSkgJiAweDBGRkY7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfc3RhdHMuZHJvcHMgKz0gcnFkcGNfdG1wOworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT5yeF9yaW5nW2ldOworCQlyaW5nLT5yeF9zdGF0cy5kcm9wcyArPSBycWRwY190bXA7CiAJCW5ldF9zdGF0cy0+cnhfZmlmb19lcnJvcnMgKz0gcnFkcGNfdG1wOwotCQlieXRlcyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJ4X3N0YXRzLmJ5dGVzOwotCQlwYWNrZXRzICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfc3RhdHMucGFja2V0czsKKwkJYnl0ZXMgKz0gcmluZy0+cnhfc3RhdHMuYnl0ZXM7CisJCXBhY2tldHMgKz0gcmluZy0+cnhfc3RhdHMucGFja2V0czsKIAl9CiAKIAluZXRfc3RhdHMtPnJ4X2J5dGVzID0gYnl0ZXM7CkBAIC0zOTY1LDggKzM5OTUsOSBAQAogCWJ5dGVzID0gMDsKIAlwYWNrZXRzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWJ5dGVzICs9IGFkYXB0ZXItPnR4X3JpbmdbaV0udHhfc3RhdHMuYnl0ZXM7Ci0JCXBhY2tldHMgKz0gYWRhcHRlci0+dHhfcmluZ1tpXS50eF9zdGF0cy5wYWNrZXRzOworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQlieXRlcyArPSByaW5nLT50eF9zdGF0cy5ieXRlczsKKwkJcGFja2V0cyArPSByaW5nLT50eF9zdGF0cy5wYWNrZXRzOwogCX0KIAluZXRfc3RhdHMtPnR4X2J5dGVzID0gYnl0ZXM7CiAJbmV0X3N0YXRzLT50eF9wYWNrZXRzID0gcGFja2V0czsKQEAgLTQwMjQsMTUgKzQwNTUsMTcgQEAKIAlhZGFwdGVyLT5zdGF0cy5tcHRjICs9IHJkMzIoRTEwMDBfTVBUQyk7CiAJYWRhcHRlci0+c3RhdHMuYnB0YyArPSByZDMyKEUxMDAwX0JQVEMpOwogCi0JLyogdXNlZCBmb3IgYWRhcHRpdmUgSUZTICovCi0JaHctPm1hYy50eF9wYWNrZXRfZGVsdGEgPSByZDMyKEUxMDAwX1RQVCk7Ci0JYWRhcHRlci0+c3RhdHMudHB0ICs9IGh3LT5tYWMudHhfcGFja2V0X2RlbHRhOwotCWh3LT5tYWMuY29sbGlzaW9uX2RlbHRhID0gcmQzMihFMTAwMF9DT0xDKTsKLQlhZGFwdGVyLT5zdGF0cy5jb2xjICs9IGh3LT5tYWMuY29sbGlzaW9uX2RlbHRhOworCWFkYXB0ZXItPnN0YXRzLnRwdCArPSByZDMyKEUxMDAwX1RQVCk7CisJYWRhcHRlci0+c3RhdHMuY29sYyArPSByZDMyKEUxMDAwX0NPTEMpOwogCiAJYWRhcHRlci0+c3RhdHMuYWxnbmVycmMgKz0gcmQzMihFMTAwMF9BTEdORVJSQyk7Ci0JYWRhcHRlci0+c3RhdHMucnhlcnJjICs9IHJkMzIoRTEwMDBfUlhFUlJDKTsKLQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSByZDMyKEUxMDAwX1ROQ1JTKTsKKwkvKiByZWFkIGludGVybmFsIHBoeSBzcGVjaWZpYyBzdGF0cyAqLworCXJlZyA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOworCWlmICghKHJlZyAmIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLKSkgeworCQlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gcmQzMihFMTAwMF9SWEVSUkMpOworCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSByZDMyKEUxMDAwX1ROQ1JTKTsKKwl9CisKIAlhZGFwdGVyLT5zdGF0cy50c2N0YyArPSByZDMyKEUxMDAwX1RTQ1RDKTsKIAlhZGFwdGVyLT5zdGF0cy50c2N0ZmMgKz0gcmQzMihFMTAwMF9UU0NURkMpOwogCkBAIC00MDk1LDYgKzQxMjgsOSBAQAogCXUzMiBpY3IgPSByZDMyKEUxMDAwX0lDUik7CiAJLyogcmVhZGluZyBJQ1IgY2F1c2VzIGJpdCAzMSBvZiBFSUNSIHRvIGJlIGNsZWFyZWQgKi8KIAorCWlmIChpY3IgJiBFMTAwMF9JQ1JfRFJTVEEpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCiAJaWYgKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgewogCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCiAJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKQEAgLTQxMjQsNiArNDE2MCw3IEBACiAKIHN0YXRpYyB2b2lkIGlnYl93cml0ZV9pdHIoc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IpCiB7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CiAJdTMyIGl0cl92YWwgPSBxX3ZlY3Rvci0+aXRyX3ZhbCAmIDB4N0ZGQzsKIAogCWlmICghcV92ZWN0b3ItPnNldF9pdHIpCkBAIC00MTMyLDggKzQxNjksOCBAQAogCWlmICghaXRyX3ZhbCkKIAkJaXRyX3ZhbCA9IDB4NDsKIAotCWlmIChxX3ZlY3Rvci0+aXRyX3NoaWZ0KQotCQlpdHJfdmFsIHw9IGl0cl92YWwgPDwgcV92ZWN0b3ItPml0cl9zaGlmdDsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gZTEwMDBfODI1NzUpCisJCWl0cl92YWwgfD0gaXRyX3ZhbCA8PCAxNjsKIAllbHNlCiAJCWl0cl92YWwgfD0gMHg4MDAwMDAwOwogCkBAIC00MjEwLDkgKzQyNDcsOCBAQAogCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3FfdmVjdG9yczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbaV07Ci0JCXFfdmVjdG9yLT5jcHUgPSAtMTsKLQkJaWdiX3VwZGF0ZV9kY2EocV92ZWN0b3IpOworCQlhZGFwdGVyLT5xX3ZlY3RvcltpXS0+Y3B1ID0gLTE7CisJCWlnYl91cGRhdGVfZGNhKGFkYXB0ZXItPnFfdmVjdG9yW2ldKTsKIAl9CiB9CiAKQEAgLTQ0ODYsMTAgKzQ1MjIsNTcgQEAKIAkJCQlyZWcgfD0gc2l6ZTsKIAkJCQl3cjMyKEUxMDAwX1ZNT0xSKHZmKSwgcmVnKTsKIAkJCX0KLQkJCXJldHVybiAwOwogCQl9CiAJfQotCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdiX3NldF92bXZpcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2aWQsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKHZpZCkKKwkJd3IzMihFMTAwMF9WTVZJUih2ZiksICh2aWQgfCBFMTAwMF9WTVZJUl9WTEFOQV9ERUZBVUxUKSk7CisJZWxzZQorCQl3cjMyKEUxMDAwX1ZNVklSKHZmKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaWdiX25kb19zZXRfdmZfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCh2ZiA+PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB8fCAodmxhbiA+IDQwOTUpIHx8IChxb3MgPiA3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZsYW4gfHwgcW9zKSB7CisJCWVyciA9IGlnYl92bHZmX3NldChhZGFwdGVyLCB2bGFuLCAhIXZsYW4sIHZmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlpZ2Jfc2V0X3ZtdmlyKGFkYXB0ZXIsIHZsYW4gfCAocW9zIDw8IFZMQU5fUFJJT19TSElGVCksIHZmKTsKKwkJaWdiX3NldF92bW9scihhZGFwdGVyLCB2ZiwgIXZsYW4pOworCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuID0gdmxhbjsKKwkJYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfcW9zID0gcW9zOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJICJTZXR0aW5nIFZMQU4gJWQsIFFPUyAweCV4IG9uIFZGICVkXG4iLCB2bGFuLCBxb3MsIHZmKTsKKwkJaWYgKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJICJUaGUgVkYgVkxBTiBoYXMgYmVlbiBzZXQsIgorCQkJCSAiIGJ1dCB0aGUgUEYgZGV2aWNlIGlzIG5vdCB1cC5cbiIpOworCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkgIkJyaW5nIHRoZSBQRiBkZXZpY2UgdXAgYmVmb3JlIgorCQkJCSAiIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBWRiBkZXZpY2UuXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCWlnYl92bHZmX3NldChhZGFwdGVyLCBhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuLAorCQkJCSAgIGZhbHNlLCB2Zik7CisJCWlnYl9zZXRfdm12aXIoYWRhcHRlciwgdmxhbiwgdmYpOworCQlpZ2Jfc2V0X3Ztb2xyKGFkYXB0ZXIsIHZmLCB0cnVlKTsKKwkJYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfdmxhbiA9IDA7CisJCWFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3FvcyA9IDA7CisgICAgICAgfQorb3V0OgorICAgICAgIHJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaWdiX3NldF92Zl92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyICptc2didWYsIHUzMiB2ZikKQEAgLTQ1MDIsMTUgKzQ1ODUsMjEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKIHsKLQkvKiBjbGVhciBhbGwgZmxhZ3MgKi8KLQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5mbGFncyA9IDA7CisJLyogY2xlYXIgZmxhZ3MgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5mbGFncyAmPSB+KElHQl9WRl9GTEFHX1BGX1NFVF9NQUMpOwogCWFkYXB0ZXItPnZmX2RhdGFbdmZdLmxhc3RfbmFjayA9IGppZmZpZXM7CiAKIAkvKiByZXNldCBvZmZsb2FkcyB0byBkZWZhdWx0cyAqLwotCWlnYl9zZXRfdm1vbHIoYWRhcHRlciwgdmYpOworCWlnYl9zZXRfdm1vbHIoYWRhcHRlciwgdmYsIHRydWUpOwogCiAJLyogcmVzZXQgdmxhbnMgZm9yIGRldmljZSAqLwogCWlnYl9jbGVhcl92Zl92ZnRhKGFkYXB0ZXIsIHZmKTsKKwlpZiAoYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfdmxhbikKKwkJaWdiX25kb19zZXRfdmZfdmxhbihhZGFwdGVyLT5uZXRkZXYsIHZmLAorCQkJCSAgICBhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuLAorCQkJCSAgICBhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl9xb3MpOworCWVsc2UKKwkJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOwogCiAJLyogcmVzZXQgbXVsdGljYXN0IHRhYmxlIGFycmF5IGZvciB2ZiAqLwogCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOwpAQCAtNDUyNCw3ICs0NjEzLDggQEAKIAl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOwogCiAJLyogZ2VuZXJhdGUgYSBuZXcgbWFjIGFkZHJlc3MgYXMgd2Ugd2VyZSBob3RwbHVnIHJlbW92ZWQvYWRkZWQgKi8KLQlyYW5kb21fZXRoZXJfYWRkcih2Zl9tYWMpOworCWlmICghKGFkYXB0ZXItPnZmX2RhdGFbdmZdLmZsYWdzICYgSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQykpCisJCXJhbmRvbV9ldGhlcl9hZGRyKHZmX21hYyk7CiAKIAkvKiBwcm9jZXNzIHJlbWFpbmluZyByZXNldCBldmVudHMgKi8KIAlpZ2JfdmZfcmVzZXQoYWRhcHRlciwgdmYpOwpAQCAtNDYzNyw3ICs0NzI3LDEwIEBACiAJCXJldHZhbCA9IGlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbXNnYnVmWzFdLCB2Zik7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfVkZfU0VUX1ZMQU46Ci0JCXJldHZhbCA9IGlnYl9zZXRfdmZfdmxhbihhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJaWYgKGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3ZsYW4pCisJCQlyZXR2YWwgPSAtMTsKKwkJZWxzZQorCQkJcmV0dmFsID0gaWdiX3NldF92Zl92bGFuKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmhhbmRsZWQgTXNnICUwOHhcbiIsIG1zZ2J1ZlswXSk7CkBAIC00NzE4LDYgKzQ4MTEsOSBAQAogCiAJaWdiX3dyaXRlX2l0cihxX3ZlY3Rvcik7CiAKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0RSU1RBKQorCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKKwogCWlmIChpY3IgJiBFMTAwMF9JQ1JfRE9VVFNZTkMpIHsKIAkJLyogSFcgaXMgcmVwb3J0aW5nIERNQSBpcyBvdXQgb2Ygc3luYyAqLwogCQlhZGFwdGVyLT5zdGF0cy5kb29zeW5jKys7CkBAIC00NzU3LDYgKzQ4NTMsOSBAQAogCWlmICghKGljciAmIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0RSU1RBKQorCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKKwogCWlmIChpY3IgJiBFMTAwMF9JQ1JfRE9VVFNZTkMpIHsKIAkJLyogSFcgaXMgcmVwb3J0aW5nIERNQSBpcyBvdXQgb2Ygc3luYyAqLwogCQlhZGFwdGVyLT5zdGF0cy5kb29zeW5jKys7CkBAIC00OTIwLDcgKzUwMTksNyBAQAogCQkJaWYgKHNrYikgewogCQkJCXVuc2lnbmVkIGludCBzZWdzLCBieXRlY291bnQ7CiAJCQkJLyogZ3NvX3NlZ3MgaXMgY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIHRjcCAqLwotCQkJCXNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID86IDE7CisJCQkJc2VncyA9IGJ1ZmZlcl9pbmZvLT5nc29fc2VnczsKIAkJCQkvKiBtdWx0aXBseSBkYXRhIGNodW5rcyBieSBzaXplIG9mIGhlYWRlcnMgKi8KIAkJCQlieXRlY291bnQgPSAoKHNlZ3MgLSAxKSAqIHNrYl9oZWFkbGVuKHNrYikpICsKIAkJCQkJICAgIHNrYi0+bGVuOwpAQCAtNTczOCw3ICs1ODM3LDkgQEAKIAogCSplbmFibGVfd2FrZSA9IHd1ZmMgfHwgYWRhcHRlci0+ZW5fbW5nX3B0OwogCWlmICghKmVuYWJsZV93YWtlKQotCQlpZ2Jfc2h1dGRvd25fc2VyZGVzX2xpbmtfODI1NzUoaHcpOworCQlpZ2JfcG93ZXJfZG93bl9saW5rKGFkYXB0ZXIpOworCWVsc2UKKwkJaWdiX3Bvd2VyX3VwX2xpbmsoYWRhcHRlcik7CiAKIAkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LiAqLwpAQCAtNTc3OCw2ICs1ODc5LDcgQEAKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC01Nzk1LDggKzU4OTcsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiBlMTAwMF9wb3dlcl91cF9waHkoYWRhcHRlcik7ICovCi0KIAlpZ2JfcmVzZXQoYWRhcHRlcik7CiAKIAkvKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCkBAIC01OTA1LDYgKzYwMDUsNyBAQAogCX0gZWxzZSB7CiAJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwkJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKQEAgLTU5OTMsNiArNjA5NCw0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlnYl9uZG9fc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHU4ICptYWMpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSB8fCAodmYgPj0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkpCisJCXJldHVybiAtRUlOVkFMOworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLmZsYWdzIHw9IElHQl9WRl9GTEFHX1BGX1NFVF9NQUM7CisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgInNldHRpbmcgTUFDICVwTSBvbiBWRiAlZFxuIiwgbWFjLCB2Zik7CisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlJlbG9hZCB0aGUgVkYgZHJpdmVyIHRvIG1ha2UgdGhpcyIKKwkJCQkgICAgICAiIGNoYW5nZSBlZmZlY3RpdmUuIik7CisJaWYgKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRoZSBWRiBNQUMgYWRkcmVzcyBoYXMgYmVlbiBzZXQsIgorCQkJICIgYnV0IHRoZSBQRiBkZXZpY2UgaXMgbm90IHVwLlxuIik7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJCcmluZyB0aGUgUEYgZGV2aWNlIHVwIGJlZm9yZSIKKwkJCSAiIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBWRiBkZXZpY2UuXG4iKTsKKwl9CisJcmV0dXJuIGlnYl9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBtYWMpOworfQorCitzdGF0aWMgaW50IGlnYl9uZG9fc2V0X3ZmX2J3KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgaW50IHR4X3JhdGUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGlnYl9uZG9fZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBpbnQgdmYsIHN0cnVjdCBpZmxhX3ZmX2luZm8gKml2aSkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmICh2ZiA+PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpdmktPnZmID0gdmY7CisJbWVtY3B5KCZpdmktPm1hYywgYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlcywgRVRIX0FMRU4pOworCWl2aS0+dHhfcmF0ZSA9IDA7CisJaXZpLT52bGFuID0gYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfdmxhbjsKKwlpdmktPnFvcyA9IGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3FvczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaWdiX3ZtbV9jb250cm9sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCAyYWE3MWE3Li5hNzdhZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtMTQwMyw4ICsxNDAzLDggQEAKIAl1OCAgKm10YV9saXN0ID0gTlVMTDsKIAlpbnQgaTsKIAotCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7Ci0JCW10YV9saXN0ID0ga21hbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgeworCQltdGFfbGlzdCA9IGttYWxsb2MobmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiA2LCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFtdGFfbGlzdCkgewogCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJICAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIG11bHRpY2FzdCBmaWx0ZXIgbGlzdFxuIik7CkBAIC0xNDEzLDE1ICsxNDEzLDkgQEAKIAl9CiAKIAkvKiBwcmVwYXJlIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwotCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKLQotCWZvciAoaSA9IDA7IGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyspIHsKLQkJaWYgKCFtY19wdHIpCi0JCQlicmVhazsKLQkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOwotCQltY19wdHIgPSBtY19wdHItPm5leHQ7Ci0JfQorCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KQorCQltZW1jcHkobXRhX2xpc3QgKyAoaSsrICogRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAKIAlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSwgMCwgMCk7CiAJa2ZyZWUobXRhX2xpc3QpOwpAQCAtMjYwOSwxMSArMjYwMyw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb25cbiIpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBZGRyZXNzOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgICAvKiBNQUMgYWRkcmVzcyAqLwotCSAgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sCi0JICAgICAgICAgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKLQkgICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQWRkcmVzczogJXBNXG4iLCBuZXRkZXYtPmRldl9hZGRyKTsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZFxuIiwgaHctPm1hYy50eXBlKTsKIH0KIApAQCAtMjc3OSwxMSArMjc2OSw4IEBACiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgTUFDIEFkZHJlc3M6ICIKLQkJICAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKLQkJICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLAotCQkgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIE1BQyBBZGRyZXNzOiAlcE1cbiIsCisJCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX2h3X2luaXQ7CiAJfQpAQCAtMjg4NSw3ICsyODcyLDcgQEAKIAkucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlnYnZmX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZ2J2Zl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfVkYpLCBib2FyZF92ZiB9LAogCXsgfSAvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IDhlYzE1YWIuLjcwODcxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlvYzNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlvYzNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NHSSwgUENJX0RFVklDRV9JRF9TR0lfSU9DMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCB9CiB9OwpAQCAtMTY2NCwxMSArMTY2NCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpb2MzX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaW9jMyAqaW9jMyA9IGlwLT5yZWdzOwogCXU2NCBlaGFyID0gMDsKLQlpbnQgaTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsJCQkJLyogTG9jayBvdXQgb3RoZXJzLiAqLwogCkBAIC0xNjgxLDE2ICsxNjgwLDE2IEBACiAJCWlvYzNfd19lbWNyKGlwLT5lbWNyKTsJCQkvKiBDbGVhciBwcm9taXNjdW91cy4gKi8KIAkJKHZvaWQpIGlvYzNfcl9lbWNyKCk7CiAKLQkJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDY0KSkgeworCQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJCSAgICAobmV0ZGV2X21jX2NvdW50KGRldikgPiA2NCkpIHsKIAkJCS8qIFRvbyBtYW55IGZvciBoYXNoaW5nIHRvIG1ha2Ugc2Vuc2Ugb3Igd2Ugd2FudCBhbGwKIAkJCSAgIG11bHRpY2FzdCBwYWNrZXRzIGFueXdheSwgIHNvIHNraXAgY29tcHV0aW5nIGFsbCB0aGUKIAkJCSAgIGhhc2hlcyBhbmQganVzdCBhY2NlcHQgYWxsIHBhY2tldHMuICAqLwogCQkJaXAtPmVoYXJfaCA9IDB4ZmZmZmZmZmY7CiAJCQlpcC0+ZWhhcl9sID0gMHhmZmZmZmZmZjsKIAkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJY2hhciAqYWRkciA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCQkJaWYgKCEoKmFkZHIgJiAxKSkKIAkJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcGcuYyBiL2RyaXZlcnMvbmV0L2lwZy5jCmluZGV4IGJhOGQyNDYuLjE1MDQxNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwZy5jCisrKyBiL2RyaXZlcnMvbmV0L2lwZy5jCkBAIC04OCwxNyArODgsMTUgQEAKIAkiU3VuZGFuY2UgVGVjaG5vbG9neSBTVDIwMjEgYmFzZWQgTklDIiwKIAkiVGFtYXJhY2sgTWljcm9lbGVjdHJvbmljcyBUQzkwMjAvOTAyMSBiYXNlZCBOSUMiLAogCSJUYW1hcmFjayBNaWNyb2VsZWN0cm9uaWNzIFRDOTAyMC85MDIxIGJhc2VkIE5JQyIsCi0JIkQtTGluayBOSUMiLAogCSJELUxpbmsgTklDIElQMTAwMEEiCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXBnX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlwZ19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKFNVTkRBTkNFLAkweDEwMjMpLCAwIH0sCiAJeyBQQ0lfVkRFVklDRShTVU5EQU5DRSwJMHgyMDIxKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MTAyMSksIDIgfSwKIAl7IFBDSV9WREVWSUNFKERMSU5LLAkweDkwMjEpLCAzIH0sCi0JeyBQQ0lfVkRFVklDRShETElOSywJMHg0MDAwKSwgNCB9LAotCXsgUENJX1ZERVZJQ0UoRExJTkssCTB4NDAyMCksIDUgfSwKKwl7IFBDSV9WREVWSUNFKERMSU5LLAkweDQwMjApLCA0IH0sCiAJeyAwLCB9CiB9OwogCkBAIC01ODUsMTEgKzU4MywxMSBAQAogCQlyZWNlaXZlbW9kZSA9IElQR19STV9SRUNFSVZFQUxMRlJBTUVTOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CiAJCSAgICgoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmCi0JCSAgICAoZGV2LT5tY19jb3VudCA+IElQR19NVUxUSUNBU1RfSEFTSFRBQkxFX1NJWkUpKSkgeworCQkgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gSVBHX01VTFRJQ0FTVF9IQVNIVEFCTEVfU0laRSkpKSB7CiAJCS8qIE5JQyB0byBiZSBjb25maWd1cmVkIHRvIHJlY2VpdmUgYWxsIG11bHRpY2FzdAogCQkgKiBmcmFtZXMuICovCiAJCXJlY2VpdmVtb2RlIHw9IElQR19STV9SRUNFSVZFTVVMVElDQVNUOwotCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSAmJiAoZGV2LT5tY19jb3VudCA+IDApKSB7CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkvKiBOSUMgdG8gYmUgY29uZmlndXJlZCB0byByZWNlaXZlIHNlbGVjdGVkCiAJCSAqIG11bHRpY2FzdCBhZGRyZXNzZXMuICovCiAJCXJlY2VpdmVtb2RlIHw9IElQR19STV9SRUNFSVZFTVVMVElDQVNUSEFTSDsKQEAgLTYxMCw4ICs2MDgsNyBAQAogCWhhc2h0YWJsZVsxXSA9IDB4MDAwMDAwMDA7CiAKIAkvKiBDeWNsZSB0aHJvdWdoIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlci4gKi8KLQlmb3IgKG1jX2xpc3RfcHRyID0gZGV2LT5tY19saXN0OwotCSAgICAgbWNfbGlzdF9wdHIgIT0gTlVMTDsgbWNfbGlzdF9wdHIgPSBtY19saXN0X3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3RfcHRyLCBkZXYpIHsKIAkJLyogQ2FsY3VsYXRlIENSQyByZXN1bHQgZm9yIGVhY2ggbXVsdGljYXN0IGFkZHJlc3MuICovCiAJCWhhc2hpbmRleCA9IGNyYzMyX2xlKDB4ZmZmZmZmZmYsIG1jX2xpc3RfcHRyLT5kbWlfYWRkciwKIAkJCQkgICAgIEVUSF9BTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwppbmRleCBmNzYzODQyLi5hZjEwZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCkBAIC02NCw2ICs2NCwxNiBAQAogCiBjb21tZW50ICJEb25nbGUgc3VwcG9ydCIKIAorY29uZmlnIFNIX1NJUgorCXRyaXN0YXRlICJTdXBlckggU0lSIG9uIFVBUlQiCisJZGVwZW5kcyBvbiBJUkRBICYmIFNVUEVSSCAmJiBcCisJCShDUFVfU1VCVFlQRV9TSDc3MjIgfHwgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IFwKKwkJIENQVV9TVUJUWVBFX1NINzcyNCkKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgd2FudCB0byBlbmFibGUgU0lSIGZ1bmN0aW9uIG9uIFN1cGVySCBVQVJUCisJICBkZXZpY2VzLgorCiBjb25maWcgRE9OR0xFCiAJYm9vbCAiU2VyaWFsIGRvbmdsZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVJUVFlfU0lSCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQppbmRleCBkODJlMWUzLi5lMDMwZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKQEAgLTIyLDYgKzIyLDcgQEAKICMgU0lSIGRyaXZlcnMKIG9iai0kKENPTkZJR19JUlRUWV9TSVIpCQkrPSBpcnR0eS1zaXIubwlzaXItZGV2Lm8KIG9iai0kKENPTkZJR19CRklOX1NJUikJCSs9IGJmaW5fc2lyLm8KK29iai0kKENPTkZJR19TSF9TSVIpCQkrPSBzaF9zaXIubwogIyBkb25nbGUgZHJpdmVycyBmb3IgU0lSIGRyaXZlcnMKIG9iai0kKENPTkZJR19FU0lfRE9OR0xFKQkrPSBlc2ktc2lyLm8KIG9iai0kKENPTkZJR19URUtSQU1fRE9OR0xFKQkrPSB0ZWtyYW0tc2lyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKaW5kZXggOWIyZWViZC4uYjVjYmQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vcGIxMDAwLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCiAjaW5jbHVkZSA8YXNtL2RiMXgwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAjZWxzZSAKICNlcnJvciBhdTFrX2lyOiB1bnN1cHBvcnRlZCBib2FyZAogI2VuZGlmCkBAIC02NiwxMCArNjcsNiBAQAogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopMHhBRTAwMDAwMDsKLSNlbmRpZgotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlyX2xvY2spOwogCiAvKgpAQCAtMjgyLDkgKzI3OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCiAJLyogcG93ZXIgb24gKi8KLQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLOwotCWJjc3ItPnJlc2V0cyB8PSBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTDsKLQlhdV9zeW5jKCk7CisJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLLAorCQkJICAgICAgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEwpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTcyMCwxNCArNzE2LDE0IEBACiAKIAlpZiAoc3BlZWQgPT0gNDAwMDAwMCkgewogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKLQkJYmNzci0+cmVzZXRzIHw9IEJDU1JfUkVTRVRTX0ZJUl9TRUw7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19GSVJfU0VMKTsKICNlbHNlIC8qIFBiMTAwMCBhbmQgUGIxMTAwICovCiAJCXdyaXRlbCgxPDwxMywgQ1BMRF9BVVgxKTsKICNlbmRpZgogCX0KIAllbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi0JCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfRklSX1NFTDsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0ZJUl9TRUwsIDApOwogI2Vsc2UgLyogUGIxMDAwIGFuZCBQYjExMDAgKi8KIAkJd3JpdGVsKHJlYWRsKENQTERfQVVYMSkgJiB+KDE8PDEzKSwgQ1BMRF9BVVgxKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDJkN2I1YzEuLmI3ZTY2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogI2RlZmluZSBDT05GSUcwSF9ETUFfT05fTk9SWCBDT05GSUcwSF9ETUFfT0ZGfCBPQk9FX0NPTkZJRzBIX0VORE1BQwogI2RlZmluZSBDT05GSUcwSF9ETUFfT04gQ09ORklHMEhfRE1BX09OX05PUlggfCBPQk9FX0NPTkZJRzBIX0VOUlgKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRvc2hvYm9lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0b3Nob2JvZV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfVE9TSElCQSwgUENJX0RFVklDRV9JRF9GSVI3MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIFBDSV9ERVZJQ0VfSURfRklSRDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NoX3Npci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M5ODNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYwpAQCAtMCwwICsxLDgyMyBAQAorLyoKKyAqIFN1cGVySCBJckRBIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIGJmaW5fc2lyLmMKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL3dyYXBwZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJzaF9zaXIiCisKKyNkZWZpbmUgUlhfUEhBU0UJKDEgPDwgMCkKKyNkZWZpbmUgVFhfUEhBU0UJKDEgPDwgMSkKKyNkZWZpbmUgVFhfQ09NUF9QSEFTRQkoMSA8PCAyKSAvKiB0eCBjb21wbGV0ZSAqLworI2RlZmluZSBOT05FX1BIQVNFCSgxIDw8IDMxKQorCisjZGVmaW5lIElSSUZfUklOVENMUgkweDAwMTYgLyogRE1BIHJ4IGludGVycnVwdCBzb3VyY2UgY2xlYXIgKi8KKyNkZWZpbmUgSVJJRl9USU5UQ0xSCTB4MDAxOCAvKiBETUEgdHggaW50ZXJydXB0IHNvdXJjZSBjbGVhciAqLworI2RlZmluZSBJUklGX1NJUjAJMHgwMDIwIC8qIElyREEtU0lSMTAgY29udHJvbCAqLworI2RlZmluZSBJUklGX1NJUjEJMHgwMDIyIC8qIElyREEtU0lSMTAgYmF1ZHJhdGUgZXJyb3IgY29ycmVjdGlvbiAqLworI2RlZmluZSBJUklGX1NJUjIJMHgwMDI0IC8qIElyREEtU0lSMTAgYmF1ZHJhdGUgY291bnQgKi8KKyNkZWZpbmUgSVJJRl9TSVIzCTB4MDAyNiAvKiBJckRBLVNJUjEwIHN0YXR1cyAqLworI2RlZmluZSBJUklGX1NJUl9GUk0JMHgwMDI4IC8qIEhhcmR3YXJlIGZyYW1lIHByb2Nlc3Npbmcgc2V0ICovCisjZGVmaW5lIElSSUZfU0lSX0VPRgkweDAwMkEgLyogRU9GIHZhbHVlICovCisjZGVmaW5lIElSSUZfU0lSX0ZMRwkweDAwMkMgLyogRmxhZyBjbGVhciAqLworI2RlZmluZSBJUklGX1VBUlRfU1RTMgkweDAwMkUgLyogVUFSVCBzdGF0dXMgMiAqLworI2RlZmluZSBJUklGX1VBUlQwCTB4MDAzMCAvKiBVQVJUIGNvbnRyb2wgKi8KKyNkZWZpbmUgSVJJRl9VQVJUMQkweDAwMzIgLyogVUFSVCBzdGF0dXMgKi8KKyNkZWZpbmUgSVJJRl9VQVJUMgkweDAwMzQgLyogVUFSVCBtb2RlICovCisjZGVmaW5lIElSSUZfVUFSVDMJMHgwMDM2IC8qIFVBUlQgdHJhbnNtaXQgZGF0YSAqLworI2RlZmluZSBJUklGX1VBUlQ0CTB4MDAzOCAvKiBVQVJUIHJlY2VpdmUgZGF0YSAqLworI2RlZmluZSBJUklGX1VBUlQ1CTB4MDAzQSAvKiBVQVJUIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSSUZfVUFSVDYJMHgwMDNDIC8qIFVBUlQgYmF1ZCByYXRlIGVycm9yIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgSVJJRl9VQVJUNwkweDAwM0UgLyogVUFSVCBiYXVkIHJhdGUgY291bnQgc2V0ICovCisjZGVmaW5lIElSSUZfQ1JDMAkweDAwNDAgLyogQ1JDIGVuZ2luZSBjb250cm9sICovCisjZGVmaW5lIElSSUZfQ1JDMQkweDAwNDIgLyogQ1JDIGVuZ2luZSBpbnB1dCBkYXRhICovCisjZGVmaW5lIElSSUZfQ1JDMgkweDAwNDQgLyogQ1JDIGVuZ2luZSBjYWxjdWxhdGlvbiAqLworI2RlZmluZSBJUklGX0NSQzMJMHgwMDQ2IC8qIENSQyBlbmdpbmUgb3V0cHV0IGRhdGEgMSAqLworI2RlZmluZSBJUklGX0NSQzQJMHgwMDQ4IC8qIENSQyBlbmdpbmUgb3V0cHV0IGRhdGEgMiAqLworCisvKiBJUklGX1NJUjAgKi8KKyNkZWZpbmUgSVJUUFcJCSgxIDw8IDEpIC8qIHRyYW5zbWl0IHB1bHNlIHdpZHRoIHNlbGVjdCAqLworI2RlZmluZSBJUkVSUkMJCSgxIDw8IDApIC8qIENsZWFyIHJlY2VpdmUgcHVsc2Ugd2lkdGggZXJyb3IgKi8KKworLyogSVJJRl9TSVIzICovCisjZGVmaW5lIElSRVJSCQkoMSA8PCAwKSAvKiByZWNlaXZlZCBwdWxzZSB3aWR0aCBFcnJvciAqLworCisvKiBJUklGX1NJUl9GUk0gKi8KKyNkZWZpbmUgRU9GRAkJKDEgPDwgOSkgLyogRU9GIGRldGVjdGlvbiBmbGFnICovCisjZGVmaW5lIEZSRVIJCSgxIDw8IDgpIC8qIEZyYW1lIEVycm9yIGJpdCAqLworI2RlZmluZSBGUlAJCSgxIDw8IDApIC8qIEZyYW1lIHByb2Nlc3Npbmcgc2V0ICovCisKKy8qIElSSUZfVUFSVF9TVFMyICovCisjZGVmaW5lIElSU01FCQkoMSA8PCA2KSAvKiBSZWNlaXZlIFN1bSAgICAgRXJyb3IgZmxhZyAqLworI2RlZmluZSBJUk9WRQkJKDEgPDwgNSkgLyogUmVjZWl2ZSBPdmVycnVuIEVycm9yIGZsYWcgKi8KKyNkZWZpbmUgSVJGUkUJCSgxIDw8IDQpIC8qIFJlY2VpdmUgRnJhbWluZyBFcnJvciBmbGFnICovCisjZGVmaW5lIElSUFJFCQkoMSA8PCAzKSAvKiBSZWNlaXZlIFBhcml0eSAgRXJyb3IgZmxhZyAqLworCisvKiBJUklGX1VBUlQwXyovCisjZGVmaW5lIFRCRUMJCSgxIDw8IDIpIC8qIFRyYW5zbWl0IERhdGEgQ2xlYXIgKi8KKyNkZWZpbmUgUklFCQkoMSA8PCAxKSAvKiBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSBUSUUJCSgxIDw8IDApIC8qIFRyYW5zbWl0IEVuYWJsZSAqLworCisvKiBJUklGX1VBUlQxICovCisjZGVmaW5lIFVSU01FCQkoMSA8PCA2KSAvKiBSZWNlaXZlIFN1bSBFcnJvciBGbGFnICovCisjZGVmaW5lIFVST1ZFCQkoMSA8PCA1KSAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3IgRmxhZyAqLworI2RlZmluZSBVUkZSRQkJKDEgPDwgNCkgLyogUmVjZWl2ZSBGcmFtaW5nIEVycm9yIEZsYWcgKi8KKyNkZWZpbmUgVVJQUkUJCSgxIDw8IDMpIC8qIFJlY2VpdmUgUGFyaXR5IEVycm9yIEZsYWcgKi8KKyNkZWZpbmUgUkJGCQkoMSA8PCAyKSAvKiBSZWNlaXZlIEJ1ZmZlciBGdWxsIEZsYWcgKi8KKyNkZWZpbmUgVFNCRQkJKDEgPDwgMSkgLyogVHJhbnNtaXQgU2hpZnQgQnVmZmVyIEVtcHR5IEZsYWcgKi8KKyNkZWZpbmUgVEJFCQkoMSA8PCAwKSAvKiBUcmFuc21pdCBCdWZmZXIgRW1wdHkgZmxhZyAqLworI2RlZmluZSBUQkNPTVAJCShUU0JFIHwgVEJFKQorCisvKiBJUklGX1VBUlQ1ICovCisjZGVmaW5lIFJTRUlNCQkoMSA8PCA2KSAvKiBSZWNlaXZlIFN1bSBFcnJvciBGbGFnIElSUSBNYXNrICovCisjZGVmaW5lIFJCRklNCQkoMSA8PCAyKSAvKiBSZWNlaXZlIEJ1ZmZlciBGdWxsIEZsYWcgSVJRIE1hc2sgKi8KKyNkZWZpbmUgVFNCRUlNCQkoMSA8PCAxKSAvKiBUcmFuc21pdCBTaGlmdCBCdWZmZXIgRW1wdHkgRmxhZyBJUlEgTWFzayAqLworI2RlZmluZSBUQkVJTQkJKDEgPDwgMCkgLyogVHJhbnNtaXQgQnVmZmVyIEVtcHR5IEZsYWcgSVJRIE1hc2sgKi8KKyNkZWZpbmUgUlhfTUFTSwkJKFJTRUlNICB8IFJCRklNKQorCisvKiBJUklGX0NSQzAgKi8KKyNkZWZpbmUgQ1JDX1JTVAkJKDEgPDwgMTUpIC8qIENSQyBFbmdpbmUgUmVzZXQgKi8KKyNkZWZpbmUgQ1JDX0NUX01BU0sJMHgwRkZGCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlzdHJ1Y3R1cmUKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2hfc2lyX3NlbGYgeworCXZvaWQgX19pb21lbQkJKm1lbWJhc2U7CisJdW5zaWduZWQgaW50CQkgaXJxOworCXN0cnVjdCBjbGsJCSpjbGs7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsKKworCXN0cnVjdCBpcmxhcF9jYgkJKmlybGFwOworCXN0cnVjdCBxb3NfaW5mbwkJcW9zOworCisJaW9idWZmX3QJCXR4X2J1ZmY7CisJaW9idWZmX3QJCXJ4X2J1ZmY7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJY29tbW9uIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2hfc2lyX3dyaXRlKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgdTMyIG9mZnNldCwgdTE2IGRhdGEpCit7CisJaW93cml0ZTE2KGRhdGEsIHNlbGYtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdTE2IHNoX3Npcl9yZWFkKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gaW9yZWFkMTYoc2VsZi0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3Npcl91cGRhdGVfYml0cyhzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIHUzMiBvZmZzZXQsCisJCQkgICAgICAgdTE2IG1hc2ssIHUxNiBkYXRhKQoreworCXUxNiBvbGQsIG5ldzsKKworCW9sZCA9IHNoX3Npcl9yZWFkKHNlbGYsIG9mZnNldCk7CisJbmV3ID0gKG9sZCAmIH5tYXNrKSB8IGRhdGE7CisJaWYgKG9sZCAhPSBuZXcpCisJCXNoX3Npcl93cml0ZShzZWxmLCBvZmZzZXQsIG5ldyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlDUkMgZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBzaF9zaXJfY3JjX3Jlc2V0KHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9DUkMwLCBDUkNfUlNUKTsKK30KKworc3RhdGljIHZvaWQgc2hfc2lyX2NyY19hZGQoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmLCB1OCBkYXRhKQoreworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX0NSQzEsICh1MTYpZGF0YSk7Cit9CisKK3N0YXRpYyB1MTYgc2hfc2lyX2NyY19jbnQoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCXJldHVybiBDUkNfQ1RfTUFTSyAmIHNoX3Npcl9yZWFkKHNlbGYsIElSSUZfQ1JDMCk7Cit9CisKK3N0YXRpYyB1MTYgc2hfc2lyX2NyY19vdXQoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCXJldHVybiBzaF9zaXJfcmVhZChzZWxmLCBJUklGX0NSQzQpOworfQorCitzdGF0aWMgaW50IHNoX3Npcl9jcmNfaW5pdChzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlbGYtPm5kZXYtPmRldjsKKwlpbnQgcmV0ID0gLUVJTzsKKwl1MTYgdmFsOworCisJc2hfc2lyX2NyY19yZXNldChzZWxmKTsKKworCXNoX3Npcl9jcmNfYWRkKHNlbGYsIDB4Q0MpOworCXNoX3Npcl9jcmNfYWRkKHNlbGYsIDB4RjUpOworCXNoX3Npcl9jcmNfYWRkKHNlbGYsIDB4RjEpOworCXNoX3Npcl9jcmNfYWRkKHNlbGYsIDB4QTcpOworCisJdmFsID0gc2hfc2lyX2NyY19jbnQoc2VsZik7CisJaWYgKDQgIT0gdmFsKSB7CisJCWRldl9lcnIoZGV2LCAiQ1JDIGNvdW50IGVycm9yICV4XG4iLCB2YWwpOworCQlnb3RvIGNyY19pbml0X291dDsKKwl9CisKKwl2YWwgPSBzaF9zaXJfY3JjX291dChzZWxmKTsKKwlpZiAoMHg1MURGICE9IHZhbCkgeworCQlkZXZfZXJyKGRldiwgIkNSQyByZXN1bHQgZXJyb3IleFxuIiwgdmFsKTsKKwkJZ290byBjcmNfaW5pdF9vdXQ7CisJfQorCisJcmV0ID0gMDsKKworY3JjX2luaXRfb3V0OgorCisJc2hfc2lyX2NyY19yZXNldChzZWxmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJYmF1ZCByYXRlIGZ1bmN0aW9ucworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU0NMS19CQVNFIDE4NDMyMDAgLyogMS44NDMyTUh6ICovCisKK3N0YXRpYyB1MzIgc2hfc2lyX2ZpbmRfc2NsayhzdHJ1Y3QgY2xrICppcmRhX2NsaykKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGUgPSBpcmRhX2Nsay0+ZnJlcV90YWJsZTsKKwlzdHJ1Y3QgY2xrICpwY2xrID0gY2xrX2dldChOVUxMLCAicGVyaXBoZXJhbF9jbGsiKTsKKwl1MzIgbGltaXQsIG1pbiA9IDB4ZmZmZmZmZmYsIHRtcDsKKwlpbnQgaSwgaW5kZXggPSAwOworCisJbGltaXQgPSBjbGtfZ2V0X3JhdGUocGNsayk7CisJY2xrX3B1dChwY2xrKTsKKworCS8qIElyREEgY2FuIG5vdCBzZXQgb3ZlciBwZXJpcGhlcmFsX2NsayAqLworCWZvciAoaSA9IDA7CisJICAgICBmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsKKwkgICAgIGkrKykgeworCQl1MzIgZnJlcSA9IGZyZXFfdGFibGVbaV0uZnJlcXVlbmN5OworCisJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKKwkJCWNvbnRpbnVlOworCisJCS8qIElyREEgc2hvdWxkIG5vdCBvdmVyIHBlcmlwaGVyYWxfY2xrICovCisJCWlmIChmcmVxID4gbGltaXQpCisJCQljb250aW51ZTsKKworCQl0bXAgPSBmcmVxICUgU0NMS19CQVNFOworCQlpZiAodG1wIDwgbWluKSB7CisJCQltaW4gPSB0bXA7CisJCQlpbmRleCA9IGk7CisJCX0KKwl9CisKKwlyZXR1cm4gZnJlcV90YWJsZVtpbmRleF0uZnJlcXVlbmN5OworfQorCisjZGVmaW5lIEVSUl9ST1VORElORyhhKSAoKGEgKyA1MDAwKSAvIDEwMDAwKQorc3RhdGljIGludCBzaF9zaXJfc2V0X2JhdWRyYXRlKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgdTMyIGJhdWRyYXRlKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VsZi0+bmRldi0+ZGV2OworCXUzMiByYXRlOworCXUxNiB1YWJjYSwgdWFiYzsKKwl1MTYgaXJiY2EsIGlyYmM7CisJdTMyIG1pbiwgcmVyciwgdG1wOworCWludCBpOworCisJLyogQmF1ZCBSYXRlIEVycm9yIENvcnJlY3Rpb24geCAxMDAwMCAqLworCXUzMiByYXRlX2Vycl9hcnJheVtdID0geworCQkwMDAwLCAwNjI1LCAxMjUwLCAxODc1LAorCQkyNTAwLCAzMTI1LCAzNzUwLCA0Mzc1LAorCQk1MDAwLCA1NjI1LCA2MjUwLCA2ODc1LAorCQk3NTAwLCA4MTI1LCA4NzUwLCA5Mzc1LAorCX07CisKKwkvKgorCSAqIEZJWE1FCisJICoKKwkgKiBpdCBzdXBwb3J0IDk2MDAgb25seSBub3cKKwkgKi8KKwlzd2l0Y2ggKGJhdWRyYXRlKSB7CisJY2FzZSA5NjAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVuLXN1cHBvcnRlZCBiYXVkcmF0ZSAlZFxuIiwgYmF1ZHJhdGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJpcmRhX2NsayIpOworCWlmICghY2xrKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuIG5vdCBnZXQgaXJkYV9jbGtcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljbGtfc2V0X3JhdGUoY2xrLCBzaF9zaXJfZmluZF9zY2xrKGNsaykpOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwljbGtfcHV0KGNsayk7CisKKwlkZXZfZGJnKGRldiwgInNlbGVjdGVkIHNjbGsgPSAlZFxuIiwgcmF0ZSk7CisKKwkvKgorCSAqIENBTENVTEFUSU9OCisJICoKKwkgKiAxODQzMjAwID0gc3lzdGVtIHJhdGUgLyAoaXJiY2EgKyAoaXJiYyArIDEpKQorCSAqLworCisJaXJiYyA9IHJhdGUgLyBTQ0xLX0JBU0U7CisKKwl0bXAgPSByYXRlIC0gKFNDTEtfQkFTRSAqIGlyYmMpOworCXRtcCAqPSAxMDAwMDsKKworCXJlcnIgPSB0bXAgLyBTQ0xLX0JBU0U7CisKKwltaW4gPSAweGZmZmZmZmZmOworCWlyYmNhID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlX2Vycl9hcnJheSk7IGkrKykgeworCQl0bXAgPSBhYnMocmF0ZV9lcnJfYXJyYXlbaV0gLSByZXJyKTsKKwkJaWYgKG1pbiA+IHRtcCkgeworCQkJbWluID0gdG1wOworCQkJaXJiY2EgPSBpOworCQl9CisJfQorCisJdG1wID0gcmF0ZSAvIChpcmJjICsgRVJSX1JPVU5ESU5HKHJhdGVfZXJyX2FycmF5W2lyYmNhXSkpOworCWlmICgoU0NMS19CQVNFIC8gMTAwKSA8IGFicyh0bXAgLSBTQ0xLX0JBU0UpKQorCQlkZXZfd2FybihkZXYsICJJckRBIGZyZXEgZXJyb3IgbWFyZ2luIG92ZXIgJWRcbiIsIHRtcCk7CisKKwlkZXZfZGJnKGRldiwgInRhcmdldCA9ICVkLCByZXN1bHQgPSAlZCwgaW5mcmFyZWQgPSAlZC4lZFxuIiwKKwkgICAgICAgU0NMS19CQVNFLCB0bXAsIGlyYmMsIHJhdGVfZXJyX2FycmF5W2lyYmNhXSk7CisKKwlpcmJjYSA9IChpcmJjYSAmIDB4RikgPDwgNDsKKwlpcmJjICA9IChpcmJjIC0gMSkgJiAweEY7CisKKwlpZiAoIWlyYmMpIHsKKwkJZGV2X2VycihkZXYsICJzaF9zaXIgY2FuIG5vdCBzZXQgMCBpbiBJUklGX1NJUjJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9TSVIwLCBJUlRQVyB8IElSRVJSQyk7CisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfU0lSMSwgaXJiY2EpOworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1NJUjIsIGlyYmMpOworCisJLyoKKwkgKiBDQUxDVUxBVElPTgorCSAqCisJICogQmF1ZFJhdGVbYnBzXSA9IHN5c3RlbSByYXRlIC8gKHVhYmNhICsgKHVhYmMgKyAxKSB4IDE2KQorCSAqLworCisJdWFiYyA9IHJhdGUgLyBiYXVkcmF0ZTsKKwl1YWJjID0gKHVhYmMgLyAxNikgLSAxOworCXVhYmMgPSAodWFiYyArIDEpICogMTY7CisKKwl0bXAgPSByYXRlIC0gKHVhYmMgKiBiYXVkcmF0ZSk7CisJdG1wICo9IDEwMDAwOworCisJcmVyciA9IHRtcCAvIGJhdWRyYXRlOworCisJbWluID0gMHhmZmZmZmZmZjsKKwl1YWJjYSA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZV9lcnJfYXJyYXkpOyBpKyspIHsKKwkJdG1wID0gYWJzKHJhdGVfZXJyX2FycmF5W2ldIC0gcmVycik7CisJCWlmIChtaW4gPiB0bXApIHsKKwkJCW1pbiA9IHRtcDsKKwkJCXVhYmNhID0gaTsKKwkJfQorCX0KKworCXRtcCA9IHJhdGUgLyAodWFiYyArIEVSUl9ST1VORElORyhyYXRlX2Vycl9hcnJheVt1YWJjYV0pKTsKKwlpZiAoKGJhdWRyYXRlIC8gMTAwKSA8IGFicyh0bXAgLSBiYXVkcmF0ZSkpCisJCWRldl93YXJuKGRldiwgIlVBUlQgZnJlcSBlcnJvciBtYXJnaW4gb3ZlciAlZFxuIiwgdG1wKTsKKworCWRldl9kYmcoZGV2LCAidGFyZ2V0ID0gJWQsIHJlc3VsdCA9ICVkLCB1YXJ0ID0gJWQuJWRcbiIsCisJICAgICAgIGJhdWRyYXRlLCB0bXAsCisJICAgICAgIHVhYmMsIHJhdGVfZXJyX2FycmF5W3VhYmNhXSk7CisKKwl1YWJjYSA9ICh1YWJjYSAmIDB4RikgPDwgNDsKKwl1YWJjICA9ICh1YWJjIC8gMTYpIC0gMTsKKworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1VBUlQ2LCB1YWJjYSk7CisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfVUFSVDcsIHVhYmMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlpb2J1ZiBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19zaF9zaXJfaW5pdF9pb2J1Zihpb2J1ZmZfdCAqaW8sIGludCBzaXplKQoreworCWlvLT5oZWFkID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvLT5oZWFkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvLT50cnVlc2l6ZQk9IHNpemU7CisJaW8tPmluX2ZyYW1lCT0gRkFMU0U7CisJaW8tPnN0YXRlCT0gT1VUU0lERV9GUkFNRTsKKwlpby0+ZGF0YQk9IGlvLT5oZWFkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3Npcl9yZW1vdmVfaW9idWYoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCWtmcmVlKHNlbGYtPnJ4X2J1ZmYuaGVhZCk7CisJa2ZyZWUoc2VsZi0+dHhfYnVmZi5oZWFkKTsKKworCXNlbGYtPnJ4X2J1ZmYuaGVhZCA9IE5VTEw7CisJc2VsZi0+dHhfYnVmZi5oZWFkID0gTlVMTDsKK30KKworc3RhdGljIGludCBzaF9zaXJfaW5pdF9pb2J1ZihzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIGludCByeHNpemUsIGludCB0eHNpemUpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAoc2VsZi0+cnhfYnVmZi5oZWFkIHx8CisJICAgIHNlbGYtPnR4X2J1ZmYuaGVhZCkgeworCQlkZXZfZXJyKCZzZWxmLT5uZGV2LT5kZXYsICJpb2J1ZmYgaGFzIGFscmVhZHkgZXhpc3RlZC4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBfX3NoX3Npcl9pbml0X2lvYnVmKCZzZWxmLT5yeF9idWZmLCByeHNpemUpOworCWlmIChlcnIpCisJCWdvdG8gaW9idWZfZXJyOworCisJZXJyID0gX19zaF9zaXJfaW5pdF9pb2J1Zigmc2VsZi0+dHhfYnVmZiwgdHhzaXplKTsKKworaW9idWZfZXJyOgorCWlmIChlcnIpCisJCXNoX3Npcl9yZW1vdmVfaW9idWYoc2VsZik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJc3RhdHVzIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2hfc2lyX2NsZWFyX2FsbF9lcnIoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCS8qIENsZWFyIGVycm9yIGZsYWcgZm9yIHJlY2VpdmUgcHVsc2Ugd2lkdGggKi8KKwlzaF9zaXJfdXBkYXRlX2JpdHMoc2VsZiwgSVJJRl9TSVIwLCBJUkVSUkMsIElSRVJSQyk7CisKKwkvKiBDbGVhciBmcmFtZSAvIEVPRiBlcnJvciBmbGFnICovCisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfU0lSX0ZMRywgMHhmZmZmKTsKKworCS8qIENsZWFyIGFsbCBzdGF0dXMgZXJyb3IgKi8KKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9VQVJUX1NUUzIsIDApOworfQorCitzdGF0aWMgdm9pZCBzaF9zaXJfc2V0X3BoYXNlKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgaW50IHBoYXNlKQoreworCXUxNiB1YXJ0NSA9IDA7CisJdTE2IHVhcnQwID0gMDsKKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIFRYX1BIQVNFOgorCQl1YXJ0NSA9IFRCRUlNOworCQl1YXJ0MCA9IFRCRUMgfCBUSUU7CisJCWJyZWFrOworCWNhc2UgVFhfQ09NUF9QSEFTRToKKwkJdWFydDUgPSBUU0JFSU07CisJCXVhcnQwID0gVElFOworCQlicmVhazsKKwljYXNlIFJYX1BIQVNFOgorCQl1YXJ0NSA9IFJYX01BU0s7CisJCXVhcnQwID0gUklFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9VQVJUNSwgdWFydDUpOworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1VBUlQwLCB1YXJ0MCk7Cit9CisKK3N0YXRpYyBpbnQgc2hfc2lyX2lzX3doaWNoX3BoYXNlKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwl1MTYgdmFsID0gc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9VQVJUNSk7CisKKwlpZiAodmFsICYgVEJFSU0pCisJCXJldHVybiBUWF9QSEFTRTsKKworCWlmICh2YWwgJiBUU0JFSU0pCisJCXJldHVybiBUWF9DT01QX1BIQVNFOworCisJaWYgKHZhbCAmIFJYX01BU0spCisJCXJldHVybiBSWF9QSEFTRTsKKworCXJldHVybiBOT05FX1BIQVNFOworfQorCitzdGF0aWMgdm9pZCBzaF9zaXJfdHgoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmLCBpbnQgcGhhc2UpCit7CisJc3dpdGNoIChwaGFzZSkgeworCWNhc2UgVFhfUEhBU0U6CisJCWlmICgwID49IHNlbGYtPnR4X2J1ZmYubGVuKSB7CisJCQlzaF9zaXJfc2V0X3BoYXNlKHNlbGYsIFRYX0NPTVBfUEhBU0UpOworCQl9IGVsc2UgeworCQkJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfVUFSVDMsIHNlbGYtPnR4X2J1ZmYuZGF0YVswXSk7CisJCQlzZWxmLT50eF9idWZmLmxlbi0tOworCQkJc2VsZi0+dHhfYnVmZi5kYXRhKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUWF9DT01QX1BIQVNFOgorCQlzaF9zaXJfc2V0X3BoYXNlKHNlbGYsIFJYX1BIQVNFKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShzZWxmLT5uZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycigmc2VsZi0+bmRldi0+ZGV2LCAic2hvdWxkIG5vdCBoYXBwZW5cbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hfc2lyX3JlYWRfZGF0YShzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYpCit7CisJdTE2IHZhbDsKKwlpbnQgdGltZW91dCA9IDEwMjQ7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXZhbCA9IHNoX3Npcl9yZWFkKHNlbGYsIElSSUZfVUFSVDEpOworCisJCS8qIGRhdGEgZ2V0ICovCisJCWlmICh2YWwgJiBSQkYpIHsKKwkJCWlmICh2YWwgJiAoVVJTTUUgfCBVUk9WRSB8IFVSRlJFIHwgVVJQUkUpKQorCQkJCWJyZWFrOworCisJCQlyZXR1cm4gKGludClzaF9zaXJfcmVhZChzZWxmLCBJUklGX1VBUlQ0KTsKKwkJfQorCisJCXVkZWxheSgxKTsKKwl9CisKKwlkZXZfZXJyKCZzZWxmLT5uZGV2LT5kZXYsICJVQVJUMSAlMDR4IDogU1RBVFVTICUwNHhcbiIsCisJCXZhbCwgc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9VQVJUX1NUUzIpKTsKKworCS8qIHJlYWQgZGF0YSByZWdpc3RlciBmb3IgY2xlYXIgZXJyb3IgKi8KKwlzaF9zaXJfcmVhZChzZWxmLCBJUklGX1VBUlQ0KTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2hfc2lyX3J4KHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwlpbnQgdGltZW91dCA9IDEwMjQ7CisJaW50IGRhdGE7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWRhdGEgPSBzaF9zaXJfcmVhZF9kYXRhKHNlbGYpOworCQlpZiAoZGF0YSA8IDApCisJCQlicmVhazsKKworCQlhc3luY191bndyYXBfY2hhcihzZWxmLT5uZGV2LCAmc2VsZi0+bmRldi0+c3RhdHMsCisJCQkJICAmc2VsZi0+cnhfYnVmZiwgKHU4KWRhdGEpOworCQlzZWxmLT5uZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQlpZiAoRU9GRCAmIHNoX3Npcl9yZWFkKHNlbGYsIElSSUZfU0lSX0ZSTSkpCisJCQljb250aW51ZTsKKworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9zaXJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYgPSBkZXZfaWQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlbGYtPm5kZXYtPmRldjsKKwlpbnQgcGhhc2UgPSBzaF9zaXJfaXNfd2hpY2hfcGhhc2Uoc2VsZik7CisKKwlzd2l0Y2ggKHBoYXNlKSB7CisJY2FzZSBUWF9DT01QX1BIQVNFOgorCWNhc2UgVFhfUEhBU0U6CisJCXNoX3Npcl90eChzZWxmLCBwaGFzZSk7CisJCWJyZWFrOworCWNhc2UgUlhfUEhBU0U6CisJCWlmIChzaF9zaXJfcmVhZChzZWxmLCBJUklGX1NJUjMpKQorCQkJZGV2X2VycihkZXYsICJyY3YgcHVsc2Ugd2lkdGggZXJyb3Igb2NjdXJyZWRcbiIpOworCisJCXNoX3Npcl9yeChzZWxmKTsKKwkJc2hfc2lyX2NsZWFyX2FsbF9lcnIoc2VsZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAidW5rbm93biBpbnRlcnJ1cHRcbiIpOworCX0KKworCSByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQluZXRfZGV2aWNlX29wcyBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2hfc2lyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgc3BlZWQgPSBpcmRhX2dldF9uZXh0X3NwZWVkKHNrYik7CisKKwlpZiAoKDAgPCBzcGVlZCkgJiYKKwkgICAgKDk2MDAgIT0gc3BlZWQpKSB7CisJCWRldl9lcnIoJm5kZXYtPmRldiwgInN1cHBvcnQgOTYwMCBvbmx5ICglZClcbiIsIHNwZWVkKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCXNlbGYtPnR4X2J1ZmYuZGF0YSA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKKwlzZWxmLT50eF9idWZmLmxlbiA9IDA7CisJaWYgKHNrYi0+bGVuKQorCQlzZWxmLT50eF9idWZmLmxlbiA9IGFzeW5jX3dyYXBfc2tiKHNrYiwgc2VsZi0+dHhfYnVmZi5kYXRhLAorCQkJCQkJICAgc2VsZi0+dHhfYnVmZi50cnVlc2l6ZSk7CisKKwlzaF9zaXJfc2V0X3BoYXNlKHNlbGYsIFRYX1BIQVNFKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9zaXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBpZnJlcSAqaWZyZXEsIGludCBjbWQpCit7CisJLyoKKwkgKiBGSVhNRQorCSAqCisJICogVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgZm9yIGlyZGEgZnJhbWV3b3JrLgorCSAqIEJ1dCBub3RoaW5nIHRvIGRvIG5vdworCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNoX3Npcl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXJldHVybiAmc2VsZi0+bmRldi0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgc2hfc2lyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGVycjsKKworCWNsa19lbmFibGUoc2VsZi0+Y2xrKTsKKwllcnIgPSBzaF9zaXJfY3JjX2luaXQoc2VsZik7CisJaWYgKGVycikKKwkJZ290byBvcGVuX2VycjsKKworCXNoX3Npcl9zZXRfYmF1ZHJhdGUoc2VsZiwgOTYwMCk7CisKKwlzZWxmLT5pcmxhcCA9IGlybGFwX29wZW4obmRldiwgJnNlbGYtPnFvcywgRFJJVkVSX05BTUUpOworCWlmICghc2VsZi0+aXJsYXApCisJCWdvdG8gb3Blbl9lcnI7CisKKwkvKgorCSAqIE5vdyBlbmFibGUgdGhlIGludGVycnVwdCB0aGVuIHN0YXJ0IHRoZSBxdWV1ZQorCSAqLworCXNoX3Npcl91cGRhdGVfYml0cyhzZWxmLCBJUklGX1NJUl9GUk0sIEZSUCwgRlJQKTsKKwlzaF9zaXJfcmVhZChzZWxmLCBJUklGX1VBUlQxKTsgLyogZmxhZyBjbGVhciAqLworCXNoX3Npcl9yZWFkKHNlbGYsIElSSUZfVUFSVDQpOyAvKiBmbGFnIGNsZWFyICovCisJc2hfc2lyX3NldF9waGFzZShzZWxmLCBSWF9QSEFTRSk7CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKKworCWRldl9pbmZvKCZzZWxmLT5uZGV2LT5kZXYsICJvcGVuZWRcbiIpOworCisJcmV0dXJuIDA7CisKK29wZW5fZXJyOgorCWNsa19kaXNhYmxlKHNlbGYtPmNsayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNoX3Npcl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJLyogU3RvcCBJckxBUCAqLworCWlmIChzZWxmLT5pcmxhcCkgeworCQlpcmxhcF9jbG9zZShzZWxmLT5pcmxhcCk7CisJCXNlbGYtPmlybGFwID0gTlVMTDsKKwl9CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCisJZGV2X2luZm8oJm5kZXYtPmRldiwgInN0b3BlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzaF9zaXJfbmRvID0geworCS5uZG9fb3BlbgkJPSBzaF9zaXJfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2hfc2lyX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHNoX3Npcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bAkJPSBzaF9zaXJfaW9jdGwsCisJLm5kb19nZXRfc3RhdHMJCT0gc2hfc2lyX3N0YXRzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCXBsYXRmb3JtX2RyaXZlciBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoX3Npcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwljaGFyIGNsa19uYW1lWzhdOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCBlcnIgPSAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghcmVzIHx8IGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm90IGVub3VnaCBwbGF0Zm9ybSByZXNvdXJjZXMuXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCW5kZXYgPSBhbGxvY19pcmRhZGV2KHNpemVvZigqc2VsZikpOworCWlmICghbmRldikKKwkJZ290byBleGl0OworCisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmFzZSkgeworCQllcnIgPSAtRU5YSU87CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwLlxuIik7CisJCWdvdG8gZXJyX21lbV8xOworCX0KKworCXNlbGYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwllcnIgPSBzaF9zaXJfaW5pdF9pb2J1ZihzZWxmLCBJUkRBX1NLQl9NQVhfTVRVLCBJUkRBX1NJUl9NQVhfRlJBTUUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX21lbV8yOworCisJc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksICJpcmRhJWQiLCBwZGV2LT5pZCk7CisJc2VsZi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBjbGtfbmFtZSk7CisJaWYgKElTX0VSUihzZWxmLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2sgXCIlc1wiXG4iLCBjbGtfbmFtZSk7CisJCWdvdG8gZXJyX21lbV8zOworCX0KKworCWlyZGFfaW5pdF9tYXhfcW9zX2NhcGFiaWxpZXMoJnNlbGYtPnFvcyk7CisKKwluZGV2LT5uZXRkZXZfb3BzCT0gJnNoX3Npcl9uZG87CisJbmRldi0+aXJxCQk9IGlycTsKKworCXNlbGYtPm1lbWJhc2UJCQk9IGJhc2U7CisJc2VsZi0+bmRldgkJCT0gbmRldjsKKwlzZWxmLT5xb3MuYmF1ZF9yYXRlLmJpdHMJJj0gSVJfOTYwMDsgLyogRklYTUUgKi8KKwlzZWxmLT5xb3MubWluX3R1cm5fdGltZS5iaXRzCT0gMTsgLyogMTAgbXMgb3IgbW9yZSAqLworCisJaXJkYV9xb3NfYml0c190b192YWx1ZSgmc2VsZi0+cW9zKTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tZW1fNDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc2hfc2lyX2lycSwgSVJRRl9ESVNBQkxFRCwgInNoX3NpciIsIHNlbGYpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYXR0YWNoIHNoX3NpciBpbnRlcnJ1cHRcbiIpOworCQlnb3RvIGVycl9tZW1fNDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU3VwZXJIIElyREEgcHJvYmVkXG4iKTsKKworCWdvdG8gZXhpdDsKKworZXJyX21lbV80OgorCWNsa19wdXQoc2VsZi0+Y2xrKTsKK2Vycl9tZW1fMzoKKwlzaF9zaXJfcmVtb3ZlX2lvYnVmKHNlbGYpOworZXJyX21lbV8yOgorCWlvdW5tYXAoc2VsZi0+bWVtYmFzZSk7CitlcnJfbWVtXzE6CisJZnJlZV9uZXRkZXYobmRldik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNoX3Npcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKCFzZWxmKQorCQlyZXR1cm4gMDsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWNsa19wdXQoc2VsZi0+Y2xrKTsKKwlzaF9zaXJfcmVtb3ZlX2lvYnVmKHNlbGYpOworCWlvdW5tYXAoc2VsZi0+bWVtYmFzZSk7CisJZnJlZV9uZXRkZXYobmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfc2lyX2RyaXZlciA9IHsKKwkucHJvYmUgICA9IHNoX3Npcl9wcm9iZSwKKwkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKHNoX3Npcl9yZW1vdmUpLAorCS5kcml2ZXIgID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9zaXJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX3Npcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfc2lyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2hfc2lyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNoX3Npcl9pbml0KTsKK21vZHVsZV9leGl0KHNoX3Npcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggSXJEQSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwppbmRleCBmZGRiNGVmLi42NTMzYzAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh2aWFfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHg4MjMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHgzMTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwxIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHgzMDc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IGJkM2M2YjUuLjIwOWQ0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC01OSw3ICs1OSw3IEBACiAKIHN0YXRpYyAvKiBjb25zdCAqLyBjaGFyIGRyaXZlcm5hbWVbXSA9IERSSVZFUl9OQU1FOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmxzaV9pcmRhX3RhYmxlIFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZsc2lfaXJkYV90YWJsZSkgPSB7CiAJewogCQkuY2xhc3MgPSAgICAgICAgUENJX0NMQVNTX1dJUkVMRVNTX0lSREEgPDwgOCwKIAkJLmNsYXNzX21hc2sgPQlQQ0lfQ0xBU1NfU1VCQ0xBU1NfTUFTSyA8PCA4LCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jIGIvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZDA1MDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTggKzAsMCBAQAotLyogaXNhLXNrZWxldG9uLmM6IEEgbmV0d29yayBkcml2ZXIgb3V0bGluZSBmb3IgbGludXguCi0gKgotICoJV3JpdHRlbiAxOTkzLTk0IGJ5IERvbmFsZCBCZWNrZXIuCi0gKgotICoJQ29weXJpZ2h0IDE5OTMgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IHRoZQotICoJRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeS4KLSAqCi0gKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0gKglvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotICoKLSAqCVRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgYmVja2VyQHNjeWxkLmNvbSwgb3IgQy9PCi0gKglTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24KLSAqCTQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwCi0gKglBbm5hcG9saXMgTUQgMjE0MDMKLSAqCi0gKglUaGlzIGZpbGUgaXMgYW4gb3V0bGluZSBmb3Igd3JpdGluZyBhIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgdGhlCi0gKgl0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4KLSAqCi0gKglUbyB3cml0ZSAob3IgdW5kZXJzdGFuZCkgYSBkcml2ZXIsIGhhdmUgYSBsb29rIGF0IHRoZSAibG9vcGJhY2suYyIgZmlsZSB0bwotICoJZ2V0IGEgZmVlbCBvZiB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgdGhlbiB1c2UgdGhlIGNvZGUgYmVsb3cgYXMgYSBza2VsZXRvbgotICoJZm9yIHRoZSBuZXcgZHJpdmVyLgotICoKLSAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9Ci0JImlzYS1za2VsZXRvbi5jOnYxLjUxIDkvMjQvOTQgRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKLQotLyoKLSAqICBTb3VyY2VzOgotICoJTGlzdCB5b3VyIHNvdXJjZXMgb2YgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gdG8gZG9jdW1lbnQgdGhhdAotICoJdGhlIGRyaXZlciBpcyB5b3VyIG93biBjcmVhdGlvbiwgYW5kIGdpdmUgZHVlIGNyZWRpdCB0byBvdGhlcnMKLSAqCXRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIHdvcmsuIFJlbWVtYmVyIHRoYXQgR05VIHByb2plY3QgY29kZQotICoJY2Fubm90IHVzZSBwcm9wcmlldGFyeSBvciB0cmFkZSBzZWNyZXQgaW5mb3JtYXRpb24uIEludGVyZmFjZQotICoJZGVmaW5pdGlvbnMgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIG5vbi1jb3B5cmlnaHRhYmxlIHRvIHRoZQotICoJZXh0ZW50IHRoYXQgdGhlIHNhbWUgbmFtZXMgYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSB1c2VkIHRvIGJlCi0gKgljb21wYXRpYmxlLgotICoKLSAqCUZpbmFsbHksIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBMaW51eCBrZXJuZWwgaXMgaGFzIGFuIEFQSSwgbm90Ci0gKglBQkkuIFByb3ByaWV0YXJ5IG9iamVjdC1jb2RlLW9ubHkgZGlzdHJpYnV0aW9ucyBhcmUgbm90IHBlcm1pdHRlZAotICoJdW5kZXIgdGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLS8qCi0gKiBUaGUgbmFtZSBvZiB0aGUgY2FyZC4gSXMgdXNlZCBmb3IgbWVzc2FnZXMgYW5kIGluIHRoZSByZXF1ZXN0cyBmb3IKLSAqIGlvIHJlZ2lvbnMsIGlycXMgYW5kIGRtYSBjaGFubmVscwotICovCi1zdGF0aWMgY29uc3QgY2hhciogY2FyZG5hbWUgPSAibmV0Y2FyZCI7Ci0KLS8qIEZpcnN0LCBhIGZldyBkZWZpbml0aW9ucyB0aGF0IHRoZSBicmF2ZSBtaWdodCBjaGFuZ2UuICovCi0KLS8qIEEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgSS9PIGFkZHJlc3NlcyB0byBiZSBwcm9iZWQuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0KLSAgIHsgMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB9OwotCi0vKiB1c2UgMCBmb3IgcHJvZHVjdGlvbiwgMSBmb3IgdmVyaWZpY2F0aW9uLCA+MiBmb3IgZGVidWcgKi8KLSNpZm5kZWYgTkVUX0RFQlVHCi0jZGVmaW5lIE5FVF9ERUJVRyAyCi0jZW5kaWYKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0X2RlYnVnID0gTkVUX0RFQlVHOwotCi0vKiBUaGUgbnVtYmVyIG9mIGxvdyBJL08gcG9ydHMgdXNlZCBieSB0aGUgZXRoZXJjYXJkLiAqLwotI2RlZmluZSBORVRDQVJEX0lPX0VYVEVOVAkzMgotCi0jZGVmaW5lIE1ZX1RYX1RJTUVPVVQgICgoNDAwKkhaKS8xMDAwKQotCi0vKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KLXN0cnVjdCBuZXRfbG9jYWwgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCWxvbmcgb3Blbl90aW1lOwkJCS8qIFVzZWxlc3MgZXhhbXBsZSBsb2NhbCBpbmZvLiAqLwotCi0JLyogVHggY29udHJvbCBsb2NrLiAgVGhpcyBwcm90ZWN0cyB0aGUgdHJhbnNtaXQgYnVmZmVyIHJpbmcKLQkgKiBzdGF0ZSBhbG9uZyB3aXRoIHRoZSAidHggZnVsbCIgc3RhdGUgb2YgdGhlIGRyaXZlci4gIFRoaXMKLQkgKiBtZWFucyBhbGwgbmV0aWZfcXVldWUgZmxvdyBjb250cm9sIGFjdGlvbnMgYXJlIHByb3RlY3RlZAotCSAqIGJ5IHRoaXMgbG9jayBhcyB3ZWxsLgotCSAqLwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLS8qIFRoZSBzdGF0aW9uIChldGhlcm5ldCkgYWRkcmVzcyBwcmVmaXgsIHVzZWQgZm9yIElEaW5nIHRoZSBib2FyZC4gKi8KLSNkZWZpbmUgU0FfQUREUjAgMHgwMAotI2RlZmluZSBTQV9BRERSMSAweDQyCi0jZGVmaW5lIFNBX0FERFIyIDB4NjUKLQotLyogSW5kZXggdG8gZnVuY3Rpb25zLCBhcyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLwotCi1zdGF0aWMgaW50CW5ldGNhcmRfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpOwotc3RhdGljIGludAluZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGlycXJldHVybl90IG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyB2b2lkCW5ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQJc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgICAgIG5ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0KLS8qIEV4YW1wbGUgcm91dGluZXMgeW91IG11c3Qgd3JpdGUgOy0+LiAqLwotI2RlZmluZSB0eF9kb25lKGRldikgMQotc3RhdGljIHZvaWQJaGFyZHdhcmVfc2VuZF9wYWNrZXQoc2hvcnQgaW9hZGRyLCBjaGFyICpidWYsIGludCBsZW5ndGgpOwotc3RhdGljIHZvaWQgCWNoaXBzZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnRwKTsKLQotLyoKLSAqIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmZiBvbmUgZXhpc3RzLgotICogSWYgZGV2LT5iYXNlX2FkZHIgPT0gMCwgcHJvYmUgYWxsIGxpa2VseSBsb2NhdGlvbnMuCi0gKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAxLCBhbHdheXMgcmV0dXJuIGZhaWx1cmUuCi0gKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAyLCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGRldmljZSBhbmQgcmV0dXJuIHN1Y2Nlc3MKLSAqIChkZXRhY2hhYmxlIGRldmljZXMgb25seSkuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRvX25ldGNhcmRfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQlpbnQgYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JaW50IGlycSA9IGRldi0+aXJxOwotCi0JaWYgKGJhc2VfYWRkciA+IDB4MWZmKSAgICAvKiBDaGVjayBhIHNpbmdsZSBzcGVjaWZpZWQgbG9jYXRpb24uICovCi0JCXJldHVybiBuZXRjYXJkX3Byb2JlMShkZXYsIGJhc2VfYWRkcik7Ci0JZWxzZSBpZiAoYmFzZV9hZGRyICE9IDApICAvKiBEb24ndCBwcm9iZSBhdCBhbGwuICovCi0JCXJldHVybiAtRU5YSU87Ci0KLQlmb3IgKGkgPSAwOyBuZXRjYXJkX3BvcnRsaXN0W2ldOyBpKyspIHsKLQkJaW50IGlvYWRkciA9IG5ldGNhcmRfcG9ydGxpc3RbaV07Ci0JCWlmIChuZXRjYXJkX3Byb2JlMShkZXYsIGlvYWRkcikgPT0gMCkKLQkJCXJldHVybiAwOwotCQlkZXYtPmlycSA9IGlycTsKLQl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW51cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0jaWZkZWYganVtcGVyZWRfZG1hCi0JZnJlZV9kbWEoZGV2LT5kbWEpOwotI2VuZGlmCi0jaWZkZWYganVtcGVyZWRfaW50ZXJydXB0cwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotI2VuZGlmCi0JcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE5FVENBUkRfSU9fRVhURU5UKTsKLX0KLQotI2lmbmRlZiBNT0RVTEUKLXN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5ldGNhcmRfcHJvYmUoaW50IHVuaXQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7Ci0JaW50IGVycjsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXNwcmludGYoZGV2LT5uYW1lLCAiZXRoJWQiLCB1bml0KTsKLQluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwotCi0JZXJyID0gZG9fbmV0Y2FyZF9wcm9iZShkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCXJldHVybiBkZXY7Ci1vdXQ6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0Y2FyZF9uZXRkZXZfb3BzID0gewotCS5uZG9fb3BlbgkJPSBuZXRfb3BlbiwKLQkubmRvX3N0b3AJCT0gbmV0X2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRfc2VuZF9wYWNrZXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNldF9tdWx0aWNhc3RfbGlzdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gbmV0X3R4X3RpbWVvdXQsCi0JLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gTGludXggaGFzIGEgaGlzdG9yeSBvZiBmcmllbmRseSBkZXZpY2UKLSAqIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCi0gKiB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgbmV0Y2FyZF9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucDsKLQlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwotCWludCBpOwotCWludCBlcnIgPSAtRU5PREVWOwotCi0JLyogR3JhYiB0aGUgcmVnaW9uIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gcHJvYmUgb3VyIGlvcG9ydHMuICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIE5FVENBUkRfSU9fRVhURU5ULCBjYXJkbmFtZSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKgotCSAqIEZvciBldGhlcm5ldCBhZGFwdG9ycyB0aGUgZmlyc3QgdGhyZWUgb2N0ZXRzIG9mIHRoZSBzdGF0aW9uIGFkZHJlc3MKLQkgKiBjb250YWlucyB0aGUgbWFudWZhY3R1cmVyJ3MgdW5pcXVlIGNvZGUuIFRoYXQgbWlnaHQgYmUgYSBnb29kIHByb2JlCi0JICogbWV0aG9kLiBJZGVhbGx5IHlvdSB3b3VsZCBhZGQgYWRkaXRpb25hbCBjaGVja3MuCi0JICovCi0JaWYgKGluYihpb2FkZHIgKyAwKSAhPSBTQV9BRERSMCB8fAotCSAgICBpbmIoaW9hZGRyICsgMSkgIT0gU0FfQUREUjEgfHwKLQkgICAgaW5iKGlvYWRkciArIDIpICE9IFNBX0FERFIyKQotCQlnb3RvIG91dDsKLQotCWlmIChuZXRfZGVidWcgICYmICB2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMiLCB2ZXJzaW9uKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBmb3VuZCBhdCAlIzN4LCAiLCBkZXYtPm5hbWUsIGNhcmRuYW1lLCBpb2FkZHIpOwotCi0JLyogRmlsbCBpbiB0aGUgJ2RldicgZmllbGRzLiAqLwotCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwotCi0JLyogUmV0cmlldmUgYW5kIHByaW50IHRoZSBldGhlcm5ldCBhZGRyZXNzLiAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWRldi0+ZGV2X2FkZHJbaV0gPSBpbmIoaW9hZGRyICsgaSk7Ci0KLQlwcmludGsoIiVwTSIsIGRldi0+ZGV2X2FkZHIpOwotCi0JZXJyID0gLUVBR0FJTjsKLSNpZmRlZiBqdW1wZXJlZF9pbnRlcnJ1cHRzCi0JLyoKLQkgKiBJZiB0aGlzIGJvYXJkIGhhcyBqdW1wZXJlZCBpbnRlcnJ1cHRzLCBhbGxvY2F0ZSB0aGUgaW50ZXJydXB0Ci0JICogdmVjdG9yIG5vdy4gVGhlcmUgaXMgbm8gcG9pbnQgaW4gd2FpdGluZyBzaW5jZSBubyBvdGhlciBkZXZpY2UKLQkgKiBjYW4gdXNlIHRoZSBpbnRlcnJ1cHQsIGFuZCB0aGlzIG1hcmtzIHRoZSBpcnEgYXMgYnVzeS4gSnVtcGVyZWQKLQkgKiBpbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkgbm90IHJlcG9ydGVkIGJ5IHRoZSBib2FyZHMsIGFuZCB3ZSBtdXN0Ci0JICogdXNlZCBhdXRvSVJRIHRvIGZpbmQgdGhlbS4KLQkgKi8KLQotCWlmIChkZXYtPmlycSA9PSAtMSkKLQkJOwkvKiBEbyBub3RoaW5nOiBhIHVzZXItbGV2ZWwgcHJvZ3JhbSB3aWxsIHNldCBpdC4gKi8KLQllbHNlIGlmIChkZXYtPmlycSA8IDIpIHsJLyogIkF1dG8tSVJRIiAqLwotCQl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7Ci0JCS8qIFRyaWdnZXIgYW4gaW50ZXJydXB0IGhlcmUuICovCi0KLQkJZGV2LT5pcnEgPSBwcm9iZV9pcnFfb2ZmKGlycV9tYXNrKTsKLQkJaWYgKG5ldF9kZWJ1ZyA+PSAyKQotCQkJcHJpbnRrKCIgYXV0b2lycSBpcyAlZCIsIGRldi0+aXJxKTsKLQl9IGVsc2UgaWYgKGRldi0+aXJxID09IDIpCi0JCS8qCi0JCSAqIEZpeHVwIGZvciB1c2VycyB0aGF0IGRvbid0IGtub3cgdGhhdCBJUlEgMiBpcyByZWFsbHkKLQkJICogSVJROSwgb3IgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gc2V0LgotCQkgKi8KLQkJZGV2LT5pcnEgPSA5OwotCi0JewotCQlpbnQgaXJxdmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5ldF9pbnRlcnJ1cHQsIDAsIGNhcmRuYW1lLCBkZXYpOwotCQlpZiAoaXJxdmFsKSB7Ci0JCQlwcmludGsoIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZCAoaXJxdmFsPSVkKS5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgaXJxdmFsKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotI2VuZGlmCS8qIGp1bXBlcmVkIGludGVycnVwdCAqLwotI2lmZGVmIGp1bXBlcmVkX2RtYQotCS8qCi0JICogSWYgd2UgdXNlIGEganVtcGVyZWQgRE1BIGNoYW5uZWwsIHRoYXQgc2hvdWxkIGJlIHByb2JlZCBmb3IgYW5kCi0JICogYWxsb2NhdGVkIGhlcmUgYXMgd2VsbC4gU2VlIGxhbmNlLmMgZm9yIGFuIGV4YW1wbGUuCi0JICovCi0JaWYgKGRldi0+ZG1hID09IDApIHsKLQkJaWYgKHJlcXVlc3RfZG1hKGRldi0+ZG1hLCBjYXJkbmFtZSkpIHsKLQkJCXByaW50aygiRE1BICVkIGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5kbWEpOwotCQkJZ290byBvdXQxOwotCQl9IGVsc2UKLQkJCXByaW50aygiLCBhc3NpZ25lZCBETUEgJWQuXG4iLCBkZXYtPmRtYSk7Ci0JfSBlbHNlIHsKLQkJc2hvcnQgZG1hX3N0YXR1cywgbmV3X2RtYV9zdGF0dXM7Ci0KLQkJLyogUmVhZCB0aGUgRE1BIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVycy4gKi8KLQkJZG1hX3N0YXR1cyA9ICgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikgfAotCQkJKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOwotCQkvKiBUcmlnZ2VyIGEgRE1BIHJlcXVlc3QsIHBlcmhhcHMgcGF1c2UgYSBiaXQuICovCi0JCW91dHcoMHgxMjM0LCBpb2FkZHIgKyA4KTsKLQkJLyogUmUtcmVhZCB0aGUgRE1BIHN0YXR1cyByZWdpc3RlcnMuICovCi0JCW5ld19kbWFfc3RhdHVzID0gKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKSB8Ci0JCQkoaW5iKERNQTJfU1RBVF9SRUcpICYgMHhmMCk7Ci0JCS8qCi0JCSAqIEVsaW1pbmF0ZSB0aGUgb2xkIGFuZCBmbG9hdGluZyByZXF1ZXN0cywKLQkJICogYW5kIERNQTQgdGhlIGNhc2NhZGUuCi0JCSAqLwotCQluZXdfZG1hX3N0YXR1cyBePSBkbWFfc3RhdHVzOwotCQluZXdfZG1hX3N0YXR1cyAmPSB+MHgxMDsKLQkJZm9yIChpID0gNzsgaSA+IDA7IGktLSkKLQkJCWlmICh0ZXN0X2JpdChpLCAmbmV3X2RtYV9zdGF0dXMpKSB7Ci0JCQkJZGV2LT5kbWEgPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQlpZiAoaSA8PSAwKSB7Ci0JCQlwcmludGsoIkRNQSBwcm9iZSBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gb3V0MTsKLQkJfQotCQlpZiAocmVxdWVzdF9kbWEoZGV2LT5kbWEsIGNhcmRuYW1lKSkgewotCQkJcHJpbnRrKCJwcm9iZWQgRE1BICVkIGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5kbWEpOwotCQkJZ290byBvdXQxOwotCQl9Ci0JfQotI2VuZGlmCS8qIGp1bXBlcmVkIERNQSAqLwotCi0JbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pbml0KCZucC0+bG9jayk7Ci0KLSAgICAgICAgZGV2LT5uZXRkZXZfb3BzCQk9ICZuZXRjYXJkX25ldGRldl9vcHM7Ci0gICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBNWV9UWF9USU1FT1VUOwotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQyOwotCXJldHVybiAwOwotb3V0MjoKLSNpZmRlZiBqdW1wZXJlZF9kbWEKLQlmcmVlX2RtYShkZXYtPmRtYSk7Ci0jZW5kaWYKLW91dDE6Ci0jaWZkZWYganVtcGVyZWRfaW50ZXJydXB0cwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotI2VuZGlmCi1vdXQ6Ci0JcmVsZWFzZV9yZWdpb24oYmFzZV9hZGRyLCBORVRDQVJEX0lPX0VYVEVOVCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCAlcz9cbiIsIGRldi0+bmFtZSwKLQkgICAgICAgdHhfZG9uZShkZXYpID8gIklSUSBjb25mbGljdCIgOiAibmV0d29yayBjYWJsZSBwcm9ibGVtIik7Ci0KLQkvKiBUcnkgdG8gcmVzdGFydCB0aGUgYWRhcHRvci4gKi8KLQljaGlwc2V0X2luaXQoZGV2LCAxKTsKLQotCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKLQotCS8qIElmIHdlIGhhdmUgc3BhY2UgYXZhaWxhYmxlIHRvIGFjY2VwdCBuZXcgdHJhbnNtaXQKLQkgKiByZXF1ZXN0cywgd2FrZSB1cCB0aGUgcXVldWVpbmcgbGF5ZXIuICBUaGlzIHdvdWxkCi0JICogYmUgdGhlIGNhc2UgaWYgdGhlIGNoaXBzZXRfaW5pdCgpIGNhbGwgYWJvdmUganVzdAotCSAqIGZsdXNoZXMgb3V0IHRoZSB0eCBxdWV1ZSBhbmQgZW1wdGllcyBpdC4KLQkgKgotCSAqIElmIGluc3RlYWQsIHRoZSB0eCBxdWV1ZSBpcyByZXRhaW5lZCB0aGVuIHRoZQotCSAqIG5ldGlmX3dha2VfcXVldWUoKSBjYWxsIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCi0JICogVFggY29tcGxldGlvbiBpbnRlcnJ1cHQgaGFuZGxlciBvZiB0aGUgZHJpdmVyIGluc3RlYWQKLQkgKiBvZiBoZXJlLgotCSAqLwotCWlmICghdHhfZnVsbChkZXYpKQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLS8qCi0gKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiBUaGlzIGlzIGNhbGxlZCAoaW4gdGhlIGN1cnJlbnQga2VybmVsKQotICogc29tZXRpbWUgYWZ0ZXIgYm9vdGluZyB3aGVuIHRoZSAnaWZjb25maWcnIHByb2dyYW0gaXMgcnVuLgotICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgc2V0IGV2ZXJ5dGhpbmcgdXAgYW5ldyBhdCBlYWNoIG9wZW4sIGV2ZW4KLSAqIHJlZ2lzdGVycyB0aGF0ICJzaG91bGQiIG9ubHkgbmVlZCB0byBiZSBzZXQgb25jZSBhdCBib290LCBzbyB0aGF0Ci0gKiB0aGVyZSBpcyBub24tcmVib290IHdheSB0byByZWNvdmVyIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgotICovCi1zdGF0aWMgaW50Ci1uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfbG9jYWwgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JLyoKLQkgKiBUaGlzIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCBsaW5lIGNhbiB0dXJuZWQgb2ZmIChzaGFyZWQpLgotCSAqIFNlZSAzYzUwMy5jIGZvciBhbiBleGFtcGxlIG9mIHNlbGVjdGluZyB0aGUgSVJRIGF0IGNvbmZpZy10aW1lLgotCSAqLwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgbmV0X2ludGVycnVwdCwgMCwgY2FyZG5hbWUsIGRldikpIHsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCS8qCi0JICogQWx3YXlzIGFsbG9jYXRlIHRoZSBETUEgY2hhbm5lbCBhZnRlciB0aGUgSVJRLAotCSAqIGFuZCBjbGVhbiB1cCBvbiBmYWlsdXJlLgotCSAqLwotCWlmIChyZXF1ZXN0X2RtYShkZXYtPmRtYSwgY2FyZG5hbWUpKSB7Ci0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQkvKiBSZXNldCB0aGUgaGFyZHdhcmUgaGVyZS4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgc3RhdGlvbiBhZGRyZXNzLiAqLwotCWNoaXBzZXRfaW5pdChkZXYsIDEpOwotCW91dGIoMHgwMCwgaW9hZGRyKTsKLQlucC0+b3Blbl90aW1lID0gamlmZmllczsKLQotCS8qIFdlIGFyZSBub3cgcmVhZHkgdG8gYWNjZXB0IHRyYW5zbWl0IHJlcXVldXN0cyBmcm9tCi0JICogdGhlIHF1ZXVlaW5nIGxheWVyIG9mIHRoZSBuZXR3b3JraW5nLgotCSAqLwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyB3aWxsIG9ubHkgYmUgaW52b2tlZCBpZiB5b3VyIGRyaXZlciBpcyBfbm90XyBpbiBYT0ZGIHN0YXRlLgotICogV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgeW91IG5lZWQgbm90IGNoZWNrIGl0LCBhbmQgdGhhdCB0aGlzCi0gKiBpbnZhcmlhbnQgd2lsbCBob2xkIGlmIHlvdSBtYWtlIHN1cmUgdGhhdCB0aGUgbmV0aWZfKl9xdWV1ZSgpCi0gKiBjYWxscyBhcmUgZG9uZSBhdCB0aGUgcHJvcGVyIHRpbWVzLgotICovCi1zdGF0aWMgaW50IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfbG9jYWwgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc2hvcnQgbGVuZ3RoID0gRVRIX1pMRU4gPCBza2ItPmxlbiA/IHNrYi0+bGVuIDogRVRIX1pMRU47Ci0JdW5zaWduZWQgY2hhciAqYnVmID0gc2tiLT5kYXRhOwotCi0JLyogSWYgc29tZSBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHRyYW5zbWl0IHRoaXMKLQkgKiBwYWNrZXQsIHlvdSBzaG91bGQgcmV0dXJuICcxJyBmcm9tIHRoaXMgZnVuY3Rpb24uCi0JICogSW4gc3VjaCBhIGNhc2UgeW91IF9tYXkgbm90XyBkbyBhbnl0aGluZyB0byB0aGUKLQkgKiBTS0IsIGl0IGlzIHN0aWxsIG93bmVkIGJ5IHRoZSBuZXR3b3JrIHF1ZXVlaW5nCi0JICogbGF5ZXIgd2hlbiBhbiBlcnJvciBpcyByZXR1cm5lZC4gIFRoaXMgbWVhbnMgeW91Ci0JICogbWF5IG5vdCBtb2RpZnkgYW55IFNLQiBmaWVsZHMsIHlvdSBtYXkgbm90IGZyZWUKLQkgKiB0aGUgU0tCLCBldGMuCi0JICovCi0KLSNpZiBUWF9SSU5HCi0JLyogVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBmb3IgbW9kZXJuIGhhcmR3YXJlLgotCSAqIFRoZSBzcGlubG9jayBwcm90ZWN0cyB0aGlzIGNvZGUgZnJvbSB0aGUgVFggY29tcGxldGUKLQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFF1ZXVlIGZsb3cgY29udHJvbCBpcwotCSAqIHRodXMgbWFuYWdlZCB1bmRlciB0aGlzIGxvY2sgYXMgd2VsbC4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JYWRkX3RvX3R4X3JpbmcobnAsIHNrYiwgbGVuZ3RoKTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCS8qIElmIHdlIGp1c3QgdXNlZCB1cCB0aGUgdmVyeSBsYXN0IGVudHJ5IGluIHRoZQotCSAqIFRYIHJpbmcgb24gdGhpcyBkZXZpY2UsIHRlbGwgdGhlIHF1ZXVlaW5nCi0JICogbGF5ZXIgdG8gc2VuZCBubyBtb3JlLgotCSAqLwotCWlmICh0eF9mdWxsKGRldikpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIFdoZW4gdGhlIFRYIGNvbXBsZXRpb24gaHcgaW50ZXJydXB0IGFycml2ZXMsIHRoaXMKLQkgKiBpcyB3aGVuIHRoZSB0cmFuc21pdCBzdGF0aXN0aWNzIGFyZSB1cGRhdGVkLgotCSAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKLSNlbHNlCi0JLyogVGhpcyBpcyB0aGUgY2FzZSBmb3Igb2xkZXIgaGFyZHdhcmUgd2hpY2ggdGFrZXMKLQkgKiBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgYXQgYSB0aW1lLCBhbmQgaXQgaXMKLQkgKiBqdXN0IHdyaXR0ZW4gdG8gdGhlIGRldmljZSB2aWEgUElPLgotCSAqCi0JICogTm8gc3BpbiBsb2NraW5nIGlzIG5lZWRlZCBzaW5jZSB0aGVyZSBpcyBubyBUWCBjb21wbGV0ZQotCSAqIGV2ZW50LiAgSWYgYnkgY2hhbmNlIHlvdXIgY2FyZCBkb2VzIGhhdmUgYSBUWCBjb21wbGV0ZQotCSAqIGhhcmR3YXJlIElSUSB0aGVuIHlvdSBtYXkgbmVlZCB0byB1dGlsaXplIG5wLT5sb2NrIGhlcmUuCi0JICovCi0JaGFyZHdhcmVfc2VuZF9wYWNrZXQoaW9hZGRyLCBidWYsIGxlbmd0aCk7Ci0JbnAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkvKiBZb3UgbWlnaHQgbmVlZCB0byBjbGVhbiB1cCBhbmQgcmVjb3JkIFR4IHN0YXRpc3RpY3MgaGVyZS4gKi8KLQlpZiAoaW53KGlvYWRkcikgPT0gLypSVSovODEpCi0JCW5wLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCWRldl9rZnJlZV9za2IgKHNrYik7Ci0jZW5kaWYKLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KLSNpZiBUWF9SSU5HCi0vKiBUaGlzIGhhbmRsZXMgVFggY29tcGxldGUgZXZlbnRzIHBvc3RlZCBieSB0aGUgZGV2aWNlCi0gKiB2aWEgaW50ZXJydXB0cy4KLSAqLwotdm9pZCBuZXRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVudHJ5OwotCi0JLyogVGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNvbmN1cnJlbnQgZXhlY3V0aW9uIG9mCi0JICogb3VyIGRldi0+aGFyZF9zdGFydF94bWl0IGZ1bmN0aW9uIGFib3ZlLgotCSAqLwotCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCi0JZW50cnkgPSBucC0+dHhfb2xkOwotCXdoaWxlICh0eF9lbnRyeV9pc19zZW50KG5wLCBlbnRyeSkpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5wLT5za2JzW2VudHJ5XTsKLQotCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwotCi0JCWVudHJ5ID0gbmV4dF90eF9lbnRyeShucCwgZW50cnkpOwotCX0KLQlucC0+dHhfb2xkID0gZW50cnk7Ci0KLQkvKiBJZiB3ZSBoYWQgc3RvcHBlZCB0aGUgcXVldWUgZHVlIHRvIGEgInR4IGZ1bGwiCi0JICogY29uZGl0aW9uLCBhbmQgc3BhY2UgaGFzIG5vdyBiZWVuIG1hZGUgYXZhaWxhYmxlLAotCSAqIHdha2UgdXAgdGhlIHF1ZXVlLgotCSAqLwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYgISB0eF9mdWxsKGRldikpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQotCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6Ci0gKiBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCBuZXRfbG9jYWwgKm5wOwotCWludCBpb2FkZHIsIHN0YXR1czsKLQlpbnQgaGFuZGxlZCA9IDA7Ci0KLQlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCW5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdGF0dXMgPSBpbncoaW9hZGRyICsgMCk7Ci0KLQlpZiAoc3RhdHVzID09IDApCi0JCWdvdG8gb3V0OwotCWhhbmRsZWQgPSAxOwotCi0JaWYgKHN0YXR1cyAmIFJYX0lOVFIpIHsKLQkJLyogR290IGEgcGFja2V0KHMpLiAqLwotCQluZXRfcngoZGV2KTsKLQl9Ci0jaWYgVFhfUklORwotCWlmIChzdGF0dXMgJiBUWF9JTlRSKSB7Ci0JCS8qIFRyYW5zbWl0IGNvbXBsZXRlLiAqLwotCQluZXRfdHgoZGV2KTsKLQkJbnAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLSNlbmRpZgotCWlmIChzdGF0dXMgJiBDT1VOVEVSU19JTlRSKSB7Ci0JCS8qIEluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgJ2xvY2Fsc3RhdHMnIGZpZWxkLiAqLwotCQlucC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwotCX0KLW91dDoKLQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKLX0KLQotLyogV2UgaGF2ZSBhIGdvb2QgcGFja2V0KHMpLCBnZXQgaXQvdGhlbSBvdXQgb2YgdGhlIGJ1ZmZlcnMuICovCi1zdGF0aWMgdm9pZAotbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgYm9ndXNjb3VudCA9IDEwOwotCi0JZG8gewotCQlpbnQgc3RhdHVzID0gaW53KGlvYWRkcik7Ci0JCWludCBwa3RfbGVuID0gaW53KGlvYWRkcik7Ci0KLQkJaWYgKHBrdF9sZW4gPT0gMCkJCS8qIFJlYWQgYWxsIHRoZSBmcmFtZXM/ICovCi0JCQlicmVhazsJCQkvKiBEb25lIGZvciBub3cgKi8KLQotCQlpZiAoc3RhdHVzICYgMHg0MCkgewkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCi0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgyMCkgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MTApIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MDgpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgwNCkgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJCWxwLT5zdGF0cy5yeF9ieXRlcys9cGt0X2xlbjsKLQotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKTsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUpOwotCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlza2ItPmRldiA9IGRldjsKLQotCQkJLyogJ3NrYi0+ZGF0YScgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBza19idWZmIGRhdGEgYXJlYS4gKi8KLQkJCW1lbWNweShza2JfcHV0KHNrYixwa3RfbGVuKSwgKHZvaWQqKWRldi0+cm1lbV9zdGFydCwKLQkJCQkgICBwa3RfbGVuKTsKLQkJCS8qIG9yICovCi0JCQlpbnN3KGlvYWRkciwgc2tiLT5kYXRhLCAocGt0X2xlbiArIDEpID4+IDEpOwotCi0JCQluZXRpZl9yeChza2IpOwotCQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCQl9Ci0JfSB3aGlsZSAoLS1ib2d1c2NvdW50KTsKLQotCXJldHVybjsKLX0KLQotLyogVGhlIGludmVyc2Ugcm91dGluZSB0byBuZXRfb3BlbigpLiAqLwotc3RhdGljIGludAotbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCWxwLT5vcGVuX3RpbWUgPSAwOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogRmx1c2ggdGhlIFR4IGFuZCBkaXNhYmxlIFJ4IGhlcmUuICovCi0KLQlkaXNhYmxlX2RtYShkZXYtPmRtYSk7Ci0KLQkvKiBJZiBub3QgSVJRIG9yIERNQSBqdW1wZXJlZCwgZnJlZSB1cCB0aGUgbGluZS4gKi8KLQlvdXR3KDB4MDAsIGlvYWRkciswKTsJLyogUmVsZWFzZSB0aGUgcGh5c2ljYWwgaW50ZXJydXB0IGxpbmUuICovCi0KLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQlmcmVlX2RtYShkZXYtPmRtYSk7Ci0KLQkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgaGVyZS4gKi8KLQotCXJldHVybiAwOwotCi19Ci0KLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IgY2xvc2VkLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc2hvcnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0KLQkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gKi8KLQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IGludyhpb2FkZHIrMSk7Ci0JcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KLS8qCi0gKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KLSAqIG51bV9hZGRycyA9PSAtMQlQcm9taXNjdW91cyBtb2RlLCByZWNlaXZlIGFsbCBwYWNrZXRzCi0gKiBudW1fYWRkcnMgPT0gMAlOb3JtYWwgbW9kZSwgY2xlYXIgbXVsdGljYXN0IGxpc3QKLSAqIG51bV9hZGRycyA+IDAJTXVsdGljYXN0IG1vZGUsIHJlY2VpdmUgbm9ybWFsIGFuZCBNQyBwYWNrZXRzLAotICoJCQlhbmQgZG8gYmVzdC1lZmZvcnQgZmlsdGVyaW5nLgotICovCi1zdGF0aWMgdm9pZAotc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc2hvcnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JaWYgKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpCi0JewotCQkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwotCQlvdXR3KE1VTFRJQ0FTVHxQUk9NSVNDLCBpb2FkZHIpOwotCX0KLQllbHNlIGlmKChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCA+IEhXX01BWF9BRERSUykKLQl7Ci0JCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgdXNlIG5vcm1hbCBtb2RlLiAqLwotCQloYXJkd2FyZV9zZXRfZmlsdGVyKE5VTEwpOwotCi0JCW91dHcoTVVMVElDQVNULCBpb2FkZHIpOwotCX0KLQllbHNlIGlmKGRldi0+bWNfY291bnQpCi0JewotCQkvKiBXYWxrIHRoZSBhZGRyZXNzIGxpc3QsIGFuZCBsb2FkIHRoZSBmaWx0ZXIgKi8KLQkJaGFyZHdhcmVfc2V0X2ZpbHRlcihkZXYtPm1jX2xpc3QpOwotCi0JCW91dHcoTVVMVElDQVNULCBpb2FkZHIpOwotCX0KLQllbHNlCi0JCW91dHcoMCwgaW9hZGRyKTsKLX0KLQotI2lmZGVmIE1PRFVMRQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnRoaXNfZGV2aWNlOwotc3RhdGljIGludCBpbyA9IDB4MzAwOwotc3RhdGljIGludCBpcnE7Ci1zdGF0aWMgaW50IGRtYTsKLXN0YXRpYyBpbnQgbWVtOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXN1bHQ7Ci0KLQlpZiAoaW8gPT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFlvdSBzaG91bGRuJ3QgdXNlIGF1dG8tcHJvYmluZyB3aXRoIGluc21vZCFcbiIsCi0JCQkgICBjYXJkbmFtZSk7Ci0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBDb3B5IHRoZSBwYXJhbWV0ZXJzIGZyb20gaW5zbW9kIGludG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5iYXNlX2FkZHIgPSBpbzsKLQlkZXYtPmlycSAgICAgICA9IGlycTsKLQlkZXYtPmRtYSAgICAgICA9IGRtYTsKLQlkZXYtPm1lbV9zdGFydCA9IG1lbTsKLQlpZiAoZG9fbmV0Y2FyZF9wcm9iZShkZXYpID09IDApIHsKLQkJdGhpc19kZXZpY2UgPSBkZXY7Ci0JCXJldHVybiAwOwotCX0KLQlmcmVlX25ldGRldihkZXYpOwotCXJldHVybiAtRU5YSU87Ci19Ci0KLXZvaWQKLWNsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9uZXRkZXYodGhpc19kZXZpY2UpOwotCWNsZWFudXBfY2FyZCh0aGlzX2RldmljZSk7Ci0JZnJlZV9uZXRkZXYodGhpc19kZXZpY2UpOwotfQotCi0jZW5kaWYgLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IDE2YzkxOTEuLjk2NmRlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC05NTgsMTggKzk1OCwxNyBAQAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bWNhc3RfZ2F0ZSwgZmxhZ3MpOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkJKGRldi0+bWNfY291bnQgPiBWRVRIX01BWF9NQ0FTVCkpIHsKKwkJCShuZXRkZXZfbWNfY291bnQoZGV2KSA+IFZFVEhfTUFYX01DQVNUKSkgewogCQlwb3J0LT5wcm9taXNjdW91cyA9IDE7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogCQlwb3J0LT5wcm9taXNjdW91cyA9IDA7CiAKIAkJLyogVXBkYXRlIHRhYmxlICovCiAJCXBvcnQtPm51bV9tY2FzdCA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJdTggKmFkZHIgPSBkbWktPmRtaV9hZGRyOwogCQkJdTY0IHhhZGRyID0gMDsKIApAQCAtOTc4LDcgKzk3Nyw2IEBACiAJCQkJcG9ydC0+bWNhc3RfYWRkcltwb3J0LT5udW1fbWNhc3RdID0geGFkZHI7CiAJCQkJcG9ydC0+bnVtX21jYXN0Kys7CiAJCQl9Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggNTI1N2FlMC4uOTJkMmU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTc1LDE5ICs3NSwxNCBAQAogI2luY2x1ZGUgIml4Z2JfZWUuaCIKICNpbmNsdWRlICJpeGdiX2lkcy5oIgogCisjZGVmaW5lIFBGWCAiaXhnYjogIgorCiAjaWZkZWYgX0RFQlVHX0RSSVZFUl8KLSNkZWZpbmUgSVhHQl9EQkcoYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIml4Z2I6ICIgYXJncykKKyNkZWZpbmUgSVhHQl9EQkcoYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBJWEdCX0RCRyhhcmdzLi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgUEZYICJpeGdiOiAiCi0jZGVmaW5lIERQUklOVEsobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSh2b2lkKSgoTkVUSUZfTVNHXyMjbmxldmVsICYgYWRhcHRlci0+bXNnX2VuYWJsZSkgJiYgXAotCXByaW50ayhLRVJOXyMja2xldmVsIFBGWCAiJXM6ICVzOiAiIGZtdCwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBcCi0JCV9fZnVuY19fICwgIyMgYXJncykpCi0KLQogLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCiAjZGVmaW5lIERFRkFVTFRfVFhEICAgICAgMjU2CiAjZGVmaW5lIE1BWF9UWEQgICAgICAgICA0MDk2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCA1OTNkMWE0Li5jOWZlZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYl9wY2lfdGJsKSA9IHsKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNCwKQEAgLTIzOCw4ICsyMzgsOCBAQAogCWlmIChlcnIpIHsKIAkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQogCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CisJCW5ldGlmX2VycihhZGFwdGVyLCBwcm9iZSwgYWRhcHRlci0+bmV0ZGV2LAorCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogCWl4Z2JfYWRhcHRlcl9zdG9wKGh3KTsKIAlpZiAoIWl4Z2JfaW5pdF9odyhodykpCi0JCURQUklOVEsoUFJPQkUsIEVSUiwgIml4Z2JfaW5pdF9odyBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsICJpeGdiX2luaXRfaHcgZmFpbGVkXG4iKTsKIAogCS8qIHJlc3RvcmUgZnJhbWUgc2l6ZSBpbmZvcm1hdGlvbiAqLwogCUlYR0JfV1JJVEVfUkVHKGh3LCBNRlMsIGh3LT5tYXhfZnJhbWVfc2l6ZSA8PCBJWEdCX01GU19TSElGVCk7CkBAIC00NDcsNyArNDQ3LDggQEAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAKIAlpZiAoIWl4Z2JfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KQEAgLTQ1Niw3ICs0NTcsNyBAQAogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtNDc3LDcgKzQ3OCw4IEBACiAJLyogY2FycmllciBvZmYgcmVwb3J0aW5nIGlzIGltcG9ydGFudCB0byBldGh0b29sIGV2ZW4gQkVGT1JFIG9wZW4gKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0JRFBSSU5USyhQUk9CRSwgSU5GTywgIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOworCW5ldGlmX2luZm8oYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJICAgIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOwogCWl4Z2JfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAkvKiByZXNldCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCiAKQEAgLTU1MiwxNCArNTU0LDE0IEBACiAJaHctPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFTkVUX0hFQURFUl9TSVpFICsgRU5FVF9GQ1NfTEVOR1RIOwogCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBody0+bWF4X2ZyYW1lX3NpemUgKyA4OyAvKiArIDggZm9yIGVycmF0YSAqLwogCi0JaWYgKChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVgpCi0JICAgfHwgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQpCi0JICAgfHwgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9MUikKLQkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX1NSKSkKKwlpZiAoKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWCkgfHwKKwkgICAgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQpIHx8CisJICAgIChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIpIHx8CisJICAgIChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IpKQogCQlody0+bWFjX3R5cGUgPSBpeGdiXzgyNTk3OwogCWVsc2UgewogCQkvKiBzaG91bGQgbmV2ZXIgaGF2ZSBsb2FkZWQgb24gdGhpcyBkZXZpY2UgKi8KLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAidW5zdXBwb3J0ZWQgZGV2aWNlIGlkXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsICJ1bnN1cHBvcnRlZCBkZXZpY2UgaWRcbiIpOwogCX0KIAogCS8qIGVuYWJsZSBmbG93IGNvbnRyb2wgdG8gYmUgcHJvZ3JhbW1lZCAqLwpAQCAtNjYxLDggKzY2Myw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYl9idWZmZXIpICogdHhkci0+Y291bnQ7CiAJdHhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghdHhkci0+YnVmZmVyX2luZm8pIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5XG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQodHhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtNjc1LDggKzY3Nyw4IEBACiAJdHhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4ZHItPnNpemUsICZ0eGRyLT5kbWEpOwogCWlmICghdHhkci0+ZGVzYykgewogCQl2ZnJlZSh0eGRyLT5idWZmZXJfaW5mbyk7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwKLQkJICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciBtZW1vcnlcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQodHhkci0+ZGVzYywgMCwgdHhkci0+c2l6ZSk7CkBAIC03NTAsOCArNzUyLDggQEAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiX2J1ZmZlcikgKiByeGRyLT5jb3VudDsKIAlyeGRyLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CiAJaWYgKCFyeGRyLT5idWZmZXJfaW5mbykgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHJ4ZHItPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKQEAgLTc2NSw4ICs3NjcsOCBAQAogCiAJaWYgKCFyeGRyLT5kZXNjKSB7CiAJCXZmcmVlKHJ4ZHItPmJ1ZmZlcl9pbmZvKTsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3JzXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocnhkci0+ZGVzYywgMCwgcnhkci0+c2l6ZSk7CkBAIC0xMDc3LDcgKzEwNzksNyBAQAogCQlyY3RsIHw9IElYR0JfUkNUTF9WRkU7CiAJfQogCi0JaWYgKG5ldGRldi0+bWNfY291bnQgPiBJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUykgeworCWlmIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IElYR0JfTUFYX05VTV9NVUxUSUNBU1RfQUREUkVTU0VTKSB7CiAJCXJjdGwgfD0gSVhHQl9SQ1RMX01QRTsKIAkJSVhHQl9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogCX0gZWxzZSB7CkBAIC0xMDg2LDEzICsxMDg4LDEyIEBACiAKIAkJSVhHQl9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogCi0JCWZvciAoaSA9IDAsIG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKLQkJICAgICBtY19wdHI7Ci0JCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpCi0JCQltZW1jcHkoJm10YVtpICogSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1NdLAorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpCisJCQltZW1jcHkoJm10YVtpKysgKiBJWEdCX0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCiAJCQkgICAgICAgbWNfcHRyLT5kbWlfYWRkciwgSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1MpOwogCi0JCWl4Z2JfbWNfYWRkcl9saXN0X3VwZGF0ZShodywgbXRhLCBuZXRkZXYtPm1jX2NvdW50LCAwKTsKKwkJaXhnYl9tY19hZGRyX2xpc3RfdXBkYXRlKGh3LCBtdGEsIG5ldGRldl9tY19jb3VudChuZXRkZXYpLCAwKTsKIAl9CiB9CiAKQEAgLTE1ODAsNyArMTU4MSw4IEBACiAJLyogTVRVIDwgNjggaXMgYW4gZXJyb3IgZm9yIElQdjQgdHJhZmZpYywganVzdCBkb24ndCBhbGxvdyBpdCAqLwogCWlmICgobmV3X210dSA8IDY4KSB8fAogCSAgICAobWF4X2ZyYW1lID4gSVhHQl9NQVhfSlVNQk9fRlJBTUVfU0laRSArIEVORVRfRkNTX0xFTkdUSCkpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSW52YWxpZCBNVFUgc2V0dGluZyAlZFxuIiwgbmV3X210dSk7CisJCW5ldGlmX2VycihhZGFwdGVyLCBwcm9iZSwgYWRhcHRlci0+bmV0ZGV2LAorCQkJICAiSW52YWxpZCBNVFUgc2V0dGluZyAlZFxuIiwgbmV3X210dSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTYxNiw3ICsxNjE4LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgIChuZXRkZXYtPm1jX2NvdW50ID4gSVhHQl9NQVhfTlVNX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CisJICAgKG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gSVhHQl9NQVhfTlVNX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CiAJCXU2NCBtdWx0aSA9IElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNUFJDTCk7CiAJCXUzMiBiY2FzdF9sID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIEJQUkNMKTsKIAkJdTMyIGJjYXN0X2ggPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQlBSQ0gpOwpAQCAtMTg1NCwyNCArMTg1NiwyNSBAQAogCQkgICAmJiAhKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKIAkJICAgICAgICBJWEdCX1NUQVRVU19UWE9GRikpIHsKIAkJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLwotCQkJRFBSSU5USyhEUlYsIEVSUiwgIkRldGVjdGVkIFR4IFVuaXQgSGFuZ1xuIgotCQkJCQkiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCi0JCQkJCSIgIFREVCAgICAgICAgICAgICAgICAgIDwleD5cbiIKLQkJCQkJIiAgbmV4dF90b191c2UgICAgICAgICAgPCV4PlxuIgotCQkJCQkiICBuZXh0X3RvX2NsZWFuICAgICAgICA8JXg+XG4iCi0JCQkJCSJidWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgotCQkJCQkiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgotCQkJCQkiICBuZXh0X3RvX3dhdGNoICAgICAgICA8JXg+XG4iCi0JCQkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iCi0JCQkJCSIgIG5leHRfdG9fd2F0Y2guc3RhdHVzIDwleD5cbiIsCi0JCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRESCksCi0JCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFREVCksCi0JCQkJdHhfcmluZy0+bmV4dF90b191c2UsCi0JCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCi0JCQkJZW9wLAotCQkJCWppZmZpZXMsCi0JCQkJZW9wX2Rlc2MtPnN0YXR1cyk7CisJCQluZXRpZl9lcnIoYWRhcHRlciwgZHJ2LCBhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCisJCQkJICAiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBURFQgICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBuZXh0X3RvX3VzZSAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBuZXh0X3RvX2NsZWFuICAgICAgICA8JXg+XG4iCisJCQkJICAiYnVmZmVyX2luZm9bbmV4dF90b19jbGVhbl1cbiIKKwkJCQkgICIgIHRpbWVfc3RhbXAgICAgICAgICAgIDwlbHg+XG4iCisJCQkJICAiICBuZXh0X3RvX3dhdGNoICAgICAgICA8JXg+XG4iCisJCQkJICAiICBqaWZmaWVzICAgICAgICAgICAgICA8JWx4PlxuIgorCQkJCSAgIiAgbmV4dF90b193YXRjaC5zdGF0dXMgPCV4PlxuIiwKKwkJCQkgIElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUREgpLAorCQkJCSAgSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFREVCksCisJCQkJICB0eF9yaW5nLT5uZXh0X3RvX3VzZSwKKwkJCQkgIHR4X3JpbmctPm5leHRfdG9fY2xlYW4sCisJCQkJICB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJICBlb3AsCisJCQkJICBqaWZmaWVzLAorCQkJCSAgZW9wX2Rlc2MtPnN0YXR1cyk7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9CkBAIC0yMjY5LDcgKzIyNzIsOCBAQAogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldFxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIApAQCAtMjI4NSwxNCArMjI4OSwxNiBAQAogCiAJLyogTWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwogCWlmICghaXhnYl92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oJmFkYXB0ZXItPmh3KSkgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBZnRlciByZXNldCwgdGhlIEVFUFJPTSBjaGVja3N1bSBpcyBub3QgdmFsaWQuXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJBZnRlciByZXNldCwgdGhlIEVFUFJPTSBjaGVja3N1bSBpcyBub3QgdmFsaWRcbiIpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAl9CiAJaXhnYl9nZXRfZWVfbWFjX2FkZHIoJmFkYXB0ZXItPmh3LCBuZXRkZXYtPmRldl9hZGRyKTsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBZnRlciByZXNldCwgaW52YWxpZCBNQUMgYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIkFmdGVyIHJlc2V0LCBpbnZhbGlkIE1BQyBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCmluZGV4IGJmZWYwZWIuLjhmODFlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCkBAIC0zMyw3ICszMyw4IEBACiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLm8KIAogaXhnYmUtb2JqcyA6PSBpeGdiZV9tYWluLm8gaXhnYmVfY29tbW9uLm8gaXhnYmVfZXRodG9vbC5vIFwKLSAgICAgICAgICAgICAgaXhnYmVfODI1OTkubyBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vCisgICAgICAgICAgICAgIGl4Z2JlXzgyNTk5Lm8gaXhnYmVfODI1OTgubyBpeGdiZV9waHkubyBpeGdiZV9zcmlvdi5vIFwKKyAgICAgICAgICAgICAgaXhnYmVfbWJ4Lm8KIAogaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfZGNiXzgyNTk5Lm8gaXhnYmVfZGNiX25sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IDMwM2U3YmQuLjE5ZTk0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtOTgsNiArOTgsMjIgQEAKIAogI2RlZmluZSBJWEdCRV9NQVhfUlNDX0lOVF9SQVRFICAgICAgICAgIDE2Mjc2MAogCisjZGVmaW5lIElYR0JFX01BWF9WRl9NQ19FTlRSSUVTICAgICAgICAgMzAKKyNkZWZpbmUgSVhHQkVfTUFYX1ZGX0ZVTkNUSU9OUyAgICAgICAgICA2NAorI2RlZmluZSBJWEdCRV9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgIDEyOAorI2RlZmluZSBNQVhfRU1VTEFUSU9OX01BQ19BRERSUyAgICAgICAgIDE2CisjZGVmaW5lIFZNRFFfUChwKSAgICgocCkgKyBhZGFwdGVyLT5udW1fdmZzKQorCitzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHsKKwl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyZXNzZXNbRVRIX0FMRU5dOworCXUxNiB2Zl9tY19oYXNoZXNbSVhHQkVfTUFYX1ZGX01DX0VOVFJJRVNdOworCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCXUxNiBkZWZhdWx0X3ZmX3ZsYW5faWQ7CisJdTE2IHZsYW5zX2VuYWJsZWQ7CisJYm9vbCBjbGVhcl90b19zZW5kOworCWludCByYXI7Cit9OworCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE1OSw2ICsxNzUsNyBAQAogCiAJc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgcmVpbml0X3N0YXRlOworCWludCBudW1hX25vZGU7CiAJdTY0IHJzY19jb3VudDsJCQkvKiBzdGF0IGZvciBjb2FsZXNjZWQgcGFja2V0cyAqLwogCXU2NCByc2NfZmx1c2g7CQkJLyogc3RhdHMgZm9yIGZsdXNoZWQgcGFja2V0cyAqLwogCXUzMiByZXN0YXJ0X3F1ZXVlOwkJLyogdHJhY2sgdHggcXVldWUgcmVzdGFydHMgKi8KQEAgLTE3MSw3ICsxODgsNyBAQAogZW51bSBpeGdiZV9yaW5nX2ZfZW51bSB7CiAJUklOR19GX05PTkUgPSAwLAogCVJJTkdfRl9EQ0IsCi0JUklOR19GX1ZNRFEsCisJUklOR19GX1ZNRFEsICAvKiBTUi1JT1YgdXNlcyB0aGUgc2FtZSByaW5nIGZlYXR1cmUgKi8KIAlSSU5HX0ZfUlNTLAogCVJJTkdfRl9GRElSLAogI2lmZGVmIElYR0JFX0ZDT0UKQEAgLTE4Myw3ICsyMDAsNyBAQAogCiAjZGVmaW5lIElYR0JFX01BWF9EQ0JfSU5ESUNFUyAgIDgKICNkZWZpbmUgSVhHQkVfTUFYX1JTU19JTkRJQ0VTICAxNgotI2RlZmluZSBJWEdCRV9NQVhfVk1EUV9JTkRJQ0VTIDE2CisjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgNjQKICNkZWZpbmUgSVhHQkVfTUFYX0ZESVJfSU5ESUNFUyA2NAogI2lmZGVmIElYR0JFX0ZDT0UKICNkZWZpbmUgSVhHQkVfTUFYX0ZDT0VfSU5ESUNFUyAgOApAQCAtMjc3LDcgKzI5NCw3IEBACiAJdTE2IGVpdHJfaGlnaDsKIAogCS8qIFRYICovCi0Jc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZ1tNQVhfVFhfUVVFVUVTXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCWludCBudW1fdHhfcXVldWVzOwogCXUzMiB0eF90aW1lb3V0X2NvdW50OwogCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CkBAIC0yODYsOCArMzAzLDEwIEBACiAJdTY0IGxzY19pbnQ7CiAKIAkvKiBSWCAqLwotCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7IC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCisJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmdbTUFYX1JYX1FVRVVFU10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKKwlpbnQgbnVtX3J4X3Bvb2xzOwkJLyogPT0gbnVtX3J4X3F1ZXVlcyBpbiA4MjU5OCAqLworCWludCBudW1fcnhfcXVldWVzX3Blcl9wb29sOwkvKiAxIGlmIDgyNTk4LCBjYW4gYmUgbWFueSBpZiA4MjU5OSAqLwogCXU2NCBod19jc3VtX3J4X2Vycm9yOwogCXU2NCBod19yeF9ub19kbWFfcmVzb3VyY2VzOwogCXU2NCBub25fZW9wX2Rlc2NzOwpAQCAtMzIzLDEzICszNDIsMTQgQEAKICNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTkpCiAjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQogI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQotI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKLSNkZWZpbmUgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSAgICAgICAgICAgICh1MzIpKDEgPDwgMjYpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDI3KQotI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOCkKLSNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjkpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDIzKQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSAgICAgICAgICAgICh1MzIpKDEgPDwgMjUpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDI2KQorI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNykKKyNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjgpCisjZGVmaW5lIElYR0JFX0ZMQUdfU1JJT1ZfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI5KQorI2RlZmluZSBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAzMCkKIAogCXUzMiBmbGFnczI7CiAjZGVmaW5lIElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxKQpAQCAtMzc5LDYgKzM5OSwxMyBAQAogCXU2NCByc2NfdG90YWxfZmx1c2g7CiAJdTMyIHdvbDsKIAl1MTYgZWVwcm9tX3ZlcnNpb247CisKKwlpbnQgbm9kZTsKKworCS8qIFNSLUlPViAqLworCURFQ0xBUkVfQklUTUFQKGFjdGl2ZV92ZnMsIElYR0JFX01BWF9WRl9GVU5DVElPTlMpOworCXVuc2lnbmVkIGludCBudW1fdmZzOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmaW5mbzsKIH07CiAKIGVudW0gaXhiZ2Vfc3RhdGVfdCB7CkBAIC00MjYsNiArNDUzLDEwIEBACiBleHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSk7CitleHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzICppbnB1dF9tYXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsIHU4IHF1ZXVlKTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZsYW5faWQpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LApAQCAtNDQwLDYgKzQ3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBmbGV4X2J5dGUpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbDR0eXBlKTsKK2V4dGVybiB2b2lkIGl4Z2JlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogI2lmZGVmIElYR0JFX0ZDT0UKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgaXhnYmVfZnNvKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKaW5kZXggYjQ5YmQ2Yi4uMWYzMGUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgorI2luY2x1ZGUgIml4Z2JlX21ieC5oIgogCiAjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVMgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVMgMTI4CkBAIC04ODksNyArODkwLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKLQl1MzIgY3RybCwgY3RybF9leHQ7CisJdTMyIGN0cmw7CiAJdTMyIGk7CiAJdTMyIGF1dG9jOwogCXUzMiBhdXRvYzI7CkBAIC05NDQsMTUgKzk0NSw5IEBACiAJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CiAJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CiAJfQotCS8qIENsZWFyIFBGIFJlc2V0IERvbmUgYml0IHNvIFBGL1ZGIE1haWwgT3BzIGNhbiB3b3JrICovCi0JY3RybF9leHQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQpOwotCWN0cmxfZXh0IHw9IElYR0JFX0NUUkxfRVhUX1BGUlNURDsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkxfRVhULCBjdHJsX2V4dCk7CiAKIAltc2xlZXAoNTApOwogCi0KLQogCS8qCiAJICogU3RvcmUgdGhlIG9yaWdpbmFsIEFVVE9DL0FVVE9DMiB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vdCBiZWVuCiAJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCkBAIC0xMDk1LDkgKzEwOTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQogewogCXUzMiByZWdpbmRleDsKKwl1MzIgdmx2Zl9pbmRleDsKIAl1MzIgYml0aW5kZXg7CiAJdTMyIGJpdHM7CiAJdTMyIGZpcnN0X2VtcHR5X3Nsb3Q7CisJdTMyIHZ0X2N0bDsKIAogCWlmICh2bGFuID4gNDA5NSkKIAkJcmV0dXJuIElYR0JFX0VSUl9QQVJBTTsKQEAgLTExMjQsNzcgKzExMjEsODUgQEAKIAogCiAJLyogUGFydCAyCi0JICogSWYgdGhlIHZpbmQgaXMgc2V0CisJICogSWYgVlQgbW9kZSBpcyBzZXQKIAkgKiAgIEVpdGhlciB2bGFuX29uCiAJICogICAgIG1ha2Ugc3VyZSB0aGUgdmxhbiBpcyBpbiBWTFZGCiAJICogICAgIHNldCB0aGUgdmluZCBiaXQgaW4gdGhlIG1hdGNoaW5nIFZMVkZCCiAJICogICBPciAhdmxhbl9vbgogCSAqICAgICBjbGVhciB0aGUgcG9vbCBiaXQgYW5kIHBvc3NpYmx5IHRoZSB2aW5kCiAJICovCi0JaWYgKHZpbmQpIHsKLQkJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCi0JCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOworCXZ0X2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCWlmICghKHZ0X2N0bCAmIElYR0JFX1ZUX0NUTF9WVF9FTkFCTEUpKQorCQlnb3RvIG91dDsKIAotCQlmb3IgKHJlZ2luZGV4ID0gMTsgcmVnaW5kZXggPCBJWEdCRV9WTFZGX0VOVFJJRVM7IHJlZ2luZGV4KyspIHsKLQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCkpOwotCQkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQotCQkJCWZpcnN0X2VtcHR5X3Nsb3QgPSByZWdpbmRleDsKLQkJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQotCQkJCWJyZWFrOwotCQl9CisJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCisJZmlyc3RfZW1wdHlfc2xvdCA9IDA7CiAKLQkJaWYgKHJlZ2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgewotCQkJaWYgKGZpcnN0X2VtcHR5X3Nsb3QpCi0JCQkJcmVnaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OwotCQkJZWxzZSB7Ci0JCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KLQkJaWYgKHZsYW5fb24pIHsKLQkJCS8qIHNldCB0aGUgcG9vbCBiaXQgKi8KLQkJCWlmICh2aW5kIDwgMzIpIHsKLQkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKLQkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOwotCQkJfSBlbHNlIHsKLQkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKLQkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCi0JCQlpZiAodmluZCA8IDMyKSB7Ci0JCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7Ci0JCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKLQkJCQlJWEdCRV9XUklURV9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKLQkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7Ci0JCQl9IGVsc2UgewotCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOwotCQkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOwotCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKLQkJCX0KLQkJfQotCi0JCWlmIChiaXRzKQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwKLQkJCSAgICAgICAgICAgICAgICAoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOwotCQllbHNlCi0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLCAwKTsKKwlmb3IgKHZsdmZfaW5kZXggPSAxOyB2bHZmX2luZGV4IDwgSVhHQkVfVkxWRl9FTlRSSUVTOyB2bHZmX2luZGV4KyspIHsKKwkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTFZGKHZsdmZfaW5kZXgpKTsKKwkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQorCQkJZmlyc3RfZW1wdHlfc2xvdCA9IHZsdmZfaW5kZXg7CisJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQorCQkJYnJlYWs7CiAJfQogCisJaWYgKHZsdmZfaW5kZXggPj0gSVhHQkVfVkxWRl9FTlRSSUVTKSB7CisJCWlmIChmaXJzdF9lbXB0eV9zbG90KQorCQkJdmx2Zl9pbmRleCA9IGZpcnN0X2VtcHR5X3Nsb3Q7CisJCWVsc2UgeworCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAodmxhbl9vbikgeworCQkvKiBzZXQgdGhlIHBvb2wgYml0ICovCisJCWlmICh2aW5kIDwgMzIpIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkJICAgICAgSVhHQkVfVkxWRkIodmx2Zl9pbmRleCAqIDIpKTsKKwkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJCUlYR0JFX1ZMVkZCKHZsdmZfaW5kZXggKiAyKSwgYml0cyk7CisJCX0gZWxzZSB7CisJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJSVhHQkVfVkxWRkIoKHZsdmZfaW5kZXggKiAyKSArIDEpKTsKKwkJCWJpdHMgfD0gKDEgPDwgKHZpbmQgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBjbGVhciB0aGUgcG9vbCBiaXQgKi8KKwkJaWYgKHZpbmQgPCAzMikgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCQkgICAgICBJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMikpOworCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJCUlYR0JFX1ZMVkZCKHZsdmZfaW5kZXggKiAyKSwgYml0cyk7CisJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCQlJWEdCRV9WTFZGQigodmx2Zl9pbmRleCAqIDIpICsgMSkpOworCQl9IGVsc2UgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSk7CisJCQliaXRzICY9IH4oMSA8PCAodmluZCAtIDMyKSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJSVhHQkVfVkxWRkIoKHZsdmZfaW5kZXggKiAyKSArIDEpLCBiaXRzKTsKKwkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJCSAgICAgICBJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMikpOworCQl9CisJfQorCisJaWYgKGJpdHMpIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHZsdmZfaW5kZXgpLAorCQkJCShJWEdCRV9WTFZGX1ZJRU4gfCB2bGFuKSk7CisJCS8qIGlmIGJpdHMgaXMgbm9uLXplcm8gdGhlbiBzb21lIHBvb2xzL1ZGcyBhcmUgc3RpbGwKKwkJICogdXNpbmcgdGhpcyBWTEFOIElELiAgRm9yY2UgdGhlIFZGVEEgZW50cnkgdG8gb24gKi8KKwkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSk7CisJCWJpdHMgfD0gKDEgPDwgYml0aW5kZXgpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEocmVnaW5kZXgpLCBiaXRzKTsKKwl9CisJZWxzZQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYodmx2Zl9pbmRleCksIDApOworCiBvdXQ6CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDM0LDYgKzE0MzksOSBAQAogCS8qIFNlbmQgaW50ZXJydXB0IHdoZW4gNjQgZmlsdGVycyBhcmUgbGVmdCAqLwogCWZkaXJjdHJsIHw9IDQgPDwgSVhHQkVfRkRJUkNUUkxfRlVMTF9USFJFU0hfU0hJRlQ7CiAKKwkvKiBJbml0aWFsaXplIHRoZSBkcm9wIHF1ZXVlIHRvIFJ4IHF1ZXVlIDEyNyAqLworCWZkaXJjdHJsIHw9ICgxMjcgPDwgSVhHQkVfRkRJUkNUUkxfRFJPUF9RX1NISUZUKTsKKwogCXN3aXRjaCAocGJhbGxvYykgewogCWNhc2UgSVhHQkVfRkRJUl9QQkFMTE9DXzY0SzoKIAkJLyogMmsgLSAxIHBlcmZlY3QgZmlsdGVycyAqLwpAQCAtMTY3NSw4ICsxNjgzLDggQEAKICAqICBAc3JjX2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcl8xLCB1MzIgc3JjX2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMSwgdTMyIHNyY19hZGRyXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCiB7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVRdID0gc3JjX2FkZHJfNCAmIDB4ZmY7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxXSA9CkBAIC0xNzE4LDggKzE3MjYsOCBAQAogICogIEBkc3RfYWRkcl80OiB0aGUgZm91cnRoIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwogczMyIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzEsIHUzMiBkc3RfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8xLCB1MzIgZHN0X2FkZHJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVF0gPSBkc3RfYWRkcl80ICYgMHhmZjsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVCArIDFdID0KQEAgLTE3OTcsNyArMTgwNSw3IEBACiAgKiAgQHZtX3Bvb2w6IHRoZSBWaXJ0dWFsIE1hY2hpbmUgcG9vbCB0byBsb2FkCiAgKiovCiBzMzIgaXhnYmVfYXRyX3NldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1ZNX1BPT0xfT0ZGU0VUXSA9IHZtX3Bvb2w7CiAKQEAgLTE4MjEsOCArMTgyOSw3IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCiAgKiAgQHZsYW46IHRoZSBWTEFOIGlkIHRvIGxvYWQKICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp2bGFuKQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqdmxhbikKIHsKIAkqdmxhbiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVRdOwogCSp2bGFuIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVQgKyAxXSA8PCA4OwpAQCAtMjA3OCwyMyArMjA4NSwyNiBAQAogICogIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5IC0gQWRkcyBhIHBlcmZlY3QgZmlsdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBpbnB1dDogaW5wdXQgYml0c3RyZWFtCisgKiAgQGlucHV0X21hc2tzOiBiaXR3aXNlIG1hc2tzIGZvciByZWxldmFudCBmaWVsZHMKKyAqICBAc29mdF9pZDogc29mdHdhcmUgaW5kZXggaW50byB0aGUgc2lsaWNvbiBoYXNoIHRhYmxlcyBmb3IgZmlsdGVyIHN0b3JhZ2UKICAqICBAcXVldWU6IHF1ZXVlIGluZGV4IHRvIGRpcmVjdCB0cmFmZmljIHRvCiAgKgogICogIE5vdGUgdGhhdCB0aGUgY2FsbGVyIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBsb2NrIGJlZm9yZSBjYWxsaW5nLCBzaW5jZSB0aGUKICAqICBoYXJkd2FyZSB3cml0ZXMgbXVzdCBiZSBwcm90ZWN0ZWQgZnJvbSBvbmUgYW5vdGhlci4KICAqKi8KIHMzMiBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dF9tYXNrcyAqaW5wdXRfbWFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBzb2Z0X2lkLCB1OCBxdWV1ZSkKIHsKIAl1MzIgZmRpcmNtZCA9IDA7CiAJdTMyIGZkaXJoYXNoOwotCXUzMiBzcmNfaXB2NCwgZHN0X2lwdjQ7CisJdTMyIHNyY19pcHY0ID0gMCwgZHN0X2lwdjQgPSAwOwogCXUzMiBzcmNfaXB2Nl8xLCBzcmNfaXB2Nl8yLCBzcmNfaXB2Nl8zLCBzcmNfaXB2Nl80OwogCXUxNiBzcmNfcG9ydCwgZHN0X3BvcnQsIHZsYW5faWQsIGZsZXhfYnl0ZXM7CiAJdTE2IGJ1Y2tldF9oYXNoOwogCXU4ICBsNHR5cGU7CisJdTggIGZkaXJtID0gMDsKIAogCS8qIEdldCBvdXIgaW5wdXQgdmFsdWVzICovCiAJaXhnYmVfYXRyX2dldF9sNHR5cGVfODI1OTkoaW5wdXQsICZsNHR5cGUpOwpAQCAtMjE0OSw3ICsyMTU5LDYgQEAKIAkJLyogSVB2NCAqLwogCQlpeGdiZV9hdHJfZ2V0X3NyY19pcHY0XzgyNTk5KGlucHV0LCAmc3JjX2lwdjQpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJJUFNBLCBzcmNfaXB2NCk7Ci0KIAl9CiAKIAlpeGdiZV9hdHJfZ2V0X2RzdF9pcHY0XzgyNTk5KGlucHV0LCAmZHN0X2lwdjQpOwpAQCAtMjE1OCw3ICsyMTY3LDc4IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVkxBTiwgKHZsYW5faWQgfAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxleF9ieXRlcyA8PCBJWEdCRV9GRElSVkxBTl9GTEVYX1NISUZUKSkpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlBPUlQsIChzcmNfcG9ydCB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAoZHN0X3BvcnQgPDwgSVhHQkVfRkRJUlBPUlRfREVTVElOQVRJT05fU0hJRlQpKSk7CisJICAgICAgICAgICAgICAoZHN0X3BvcnQgPDwgSVhHQkVfRkRJUlBPUlRfREVTVElOQVRJT05fU0hJRlQpKSk7CisKKwkvKgorCSAqIFByb2dyYW0gdGhlIHJlbGV2YW50IG1hc2sgcmVnaXN0ZXJzLiAgSWYgc3JjL2RzdF9wb3J0IG9yIHNyYy9kc3RfYWRkcgorCSAqIGFyZSB6ZXJvLCB0aGVuIGFzc3VtZSBhIGZ1bGwgbWFzayBmb3IgdGhhdCBmaWVsZC4gIEFsc28gYXNzdW1lIHRoYXQKKwkgKiBhIFZMQU4gb2YgMCBpcyB1bnNwZWNpZmllZCwgc28gbWFzayB0aGF0IG91dCBhcyB3ZWxsLiAgTDR0eXBlCisJICogY2Fubm90IGJlIG1hc2tlZCBvdXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKwkgKgorCSAqIFRoaXMgYWxzbyBhc3N1bWVzIElQdjQgb25seS4gIElQdjYgbWFza2luZyBpc24ndCBzdXBwb3J0ZWQgYXQgdGhpcworCSAqIHBvaW50IGluIHRpbWUuCisJICovCisJaWYgKHNyY19pcHY0ID09IDApCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNJUDRNLCAweGZmZmZmZmZmKTsKKwllbHNlCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNJUDRNLCBpbnB1dF9tYXNrcy0+c3JjX2lwX21hc2spOworCisJaWYgKGRzdF9pcHY0ID09IDApCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkRJUDRNLCAweGZmZmZmZmZmKTsKKwllbHNlCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkRJUDRNLCBpbnB1dF9tYXNrcy0+ZHN0X2lwX21hc2spOworCisJc3dpdGNoIChsNHR5cGUgJiBJWEdCRV9BVFJfTDRUWVBFX01BU0spIHsKKwljYXNlIElYR0JFX0FUUl9MNFRZUEVfVENQOgorCQlpZiAoc3JjX3BvcnQgPT0gMCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlRDUE0sIDB4ZmZmZik7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlRDUE0sCisJCQkgICAgICAgICAgICAgICAgaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2spOworCisJCWlmIChkc3RfcG9ydCA9PSAwKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVENQTSwKKwkJCSAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUlRDUE0pIHwKKwkJCSAgICAgICAgICAgICAgICAoMHhmZmZmIDw8IDE2KSkpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJUQ1BNLAorCQkJICAgICAgICAgICAgICAgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSVENQTSkgfAorCQkJICAgICAgICAgICAgICAgIChpbnB1dF9tYXNrcy0+ZHN0X3BvcnRfbWFzayA8PCAxNikpKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9BVFJfTDRUWVBFX1VEUDoKKwkJaWYgKHNyY19wb3J0ID09IDApCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJVRFBNLCAweGZmZmYpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJVRFBNLAorCQkJICAgICAgICAgICAgICAgIGlucHV0X21hc2tzLT5zcmNfcG9ydF9tYXNrKTsKKworCQlpZiAoZHN0X3BvcnQgPT0gMCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlVEUE0sCisJCQkgICAgICAgICAgICAgICAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJVRFBNKSB8CisJCQkgICAgICAgICAgICAgICAgKDB4ZmZmZiA8PCAxNikpKTsKKwkJZWxzZQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVURQTSwKKwkJCSAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUlVEUE0pIHwKKwkJCSAgICAgICAgICAgICAgICAoaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2sgPDwgMTYpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHRoaXMgYWxyZWFkeSB3b3VsZCBoYXZlIGZhaWxlZCBhYm92ZSAqLworCQlicmVhazsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBsYXN0IG1hc2sgcmVnaXN0ZXIsIEZESVJNICovCisJaWYgKGlucHV0X21hc2tzLT52bGFuX2lkX21hc2sgfHwgIXZsYW5faWQpCisJCS8qIE1hc2sgYm90aCBWTEFOIGFuZCBWTEFOUCAtIGJpdHMgMCBhbmQgMSAqLworCQlmZGlybSB8PSAweDM7CisKKwlpZiAoaW5wdXRfbWFza3MtPmRhdGFfbWFzayB8fCAhZmxleF9ieXRlcykKKwkJLyogRmxleCBieXRlcyBuZWVkIG1hc2tpbmcsIHNvIG1hc2sgdGhlIHdob2xlIHRoaW5nIC0gYml0IDQgKi8KKwkJZmRpcm0gfD0gMHgxMDsKKworCS8qIE5vdyBtYXNrIFZNIHBvb2wgYW5kIGRlc3RpbmF0aW9uIElQdjYgLSBiaXRzIDUgYW5kIDIgKi8KKwlmZGlybSB8PSAweDI0OworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSTSwgZmRpcm0pOwogCiAJZmRpcmNtZCB8PSBJWEdCRV9GRElSQ01EX0NNRF9BRERfRkxPVzsKIAlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfRklMVEVSX1VQREFURTsKQEAgLTI2NTUsNCArMjczNSw1IEBACiAJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc184MjU5OSwKIAkuZWVwcm9tX29wcyAgICAgICAgICAgICA9ICZlZXByb21fb3BzXzgyNTk5LAogCS5waHlfb3BzICAgICAgICAgICAgICAgID0gJnBoeV9vcHNfODI1OTksCisJLm1ieF9vcHMgICAgICAgICAgICAgICAgPSAmbWJ4X29wc184MjU5OSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IDIxZjE1OGYuLmViNDkwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgIml4Z2JlLmgiCkBAIC0xMjc4LDE5ICsxMjc3LDExIEBACiAJCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgUkFSMCBmb3IgbGF0ZXIgcmVmZXJlbmNlICovCiAJCWh3LT5tYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctPm1hYy5hZGRyKTsKIAotCQlod19kYmcoaHcsICIgS2VlcGluZyBDdXJyZW50IFJBUjAgQWRkciA9JS4yWCAlLjJYICUuMlggIiwKLQkJICAgICAgIGh3LT5tYWMuYWRkclswXSwgaHctPm1hYy5hZGRyWzFdLAotCQkgICAgICAgaHctPm1hYy5hZGRyWzJdKTsKLQkJaHdfZGJnKGh3LCAiJS4yWCAlLjJYICUuMlhcbiIsIGh3LT5tYWMuYWRkclszXSwKLQkJICAgICAgIGh3LT5tYWMuYWRkcls0XSwgaHctPm1hYy5hZGRyWzVdKTsKKwkJaHdfZGJnKGh3LCAiIEtlZXBpbmcgQ3VycmVudCBSQVIwIEFkZHIgPSVwTVxuIiwgaHctPm1hYy5hZGRyKTsKIAl9IGVsc2UgewogCQkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzLiAqLwogCQlod19kYmcoaHcsICJPdmVycmlkaW5nIE1BQyBBZGRyZXNzIGluIFJBUlswXVxuIik7Ci0JCWh3X2RiZyhodywgIiBOZXcgTUFDIEFkZHIgPSUuMlggJS4yWCAlLjJYICIsCi0JCSAgICAgICBody0+bWFjLmFkZHJbMF0sIGh3LT5tYWMuYWRkclsxXSwKLQkJICAgICAgIGh3LT5tYWMuYWRkclsyXSk7Ci0JCWh3X2RiZyhodywgIiUuMlggJS4yWCAlLjJYXG4iLCBody0+bWFjLmFkZHJbM10sCi0JCSAgICAgICBody0+bWFjLmFkZHJbNF0sIGh3LT5tYWMuYWRkcls1XSk7CisJCWh3X2RiZyhodywgIiBOZXcgTUFDIEFkZHIgPSVwTVxuIiwgaHctPm1hYy5hZGRyKTsKIAogCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDAsIElYR0JFX1JBSF9BVik7CiAJfQpAQCAtMTM1NSw3ICsxMzQ2LDcgQEAKIC8qKgogICogIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyAtIFVwZGF0ZXMgTUFDIGxpc3Qgb2Ygc2Vjb25kYXJ5IGFkZHJlc3NlcwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAdWNfbGlzdDogdGhlIGxpc3Qgb2YgbmV3IGFkZHJlc3NlcworICogIEBuZXRkZXY6IHBvaW50ZXIgdG8gbmV0IGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiAgVGhlIGdpdmVuIGxpc3QgcmVwbGFjZXMgYW55IGV4aXN0aW5nIGxpc3QuICBDbGVhcnMgdGhlIHNlY29uZGFyeSBhZGRycyBmcm9tCiAgKiAgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycy4gIFVzZXMgdW51c2VkIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMgZm9yIHRoZQpAQCAtMTM2NSw3ICsxMzU2LDcgQEAKICAqICBtYW51YWxseSBwdXR0aW5nIHRoZSBkZXZpY2UgaW50byBwcm9taXNjdW91cyBtb2RlLgogICoqLwogczMyIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVjX2xpc3QpCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAl1MzIgaTsKIAl1MzIgb2xkX3Byb21pc2Nfc2V0dGluZyA9IGh3LT5hZGRyX2N0cmwub3ZlcmZsb3dfcHJvbWlzYzsKQEAgLTEzODksNyArMTM4MCw3IEBACiAJfQogCiAJLyogQWRkIHRoZSBuZXcgYWRkcmVzc2VzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgdWNfbGlzdCwgbGlzdCkgeworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZXRkZXYpIHsKIAkJaHdfZGJnKGh3LCAiIEFkZGluZyB0aGUgc2Vjb25kYXJ5IGFkZHJlc3NlczpcbiIpOwogCQlpeGdiZV9hZGRfdWNfYWRkcihodywgaGEtPmFkZHIsIDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggZGZmZjBmZi4uMTM2MDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1jX2FkZHJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX21jX2FkZHJfaXRyIGZ1bmMpOwogczMyIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVjX2xpc3QpOworCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogczMyIGl4Z2JlX2VuYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggZDc3OTYxZi4uNzk0OWE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtNDQxLDEwICs0NDEsOCBAQAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAl9IGVsc2UgewotCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTgzNCw4ICs4MzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmc7CisJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nWzBdOworCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1swXTsKIAogCXJpbmctPnJ4X21heF9wZW5kaW5nID0gSVhHQkVfTUFYX1JYRDsKIAlyaW5nLT50eF9tYXhfcGVuZGluZyA9IElYR0JFX01BWF9UWEQ7CkBAIC04NjcsOCArODY1LDggQEAKIAluZXdfdHhfY291bnQgPSBtaW4obmV3X3R4X2NvdW50LCAodTMyKUlYR0JFX01BWF9UWEQpOwogCW5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgSVhHQkVfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpOwogCi0JaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQpICYmCi0JICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpKSB7CisJaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZ1swXS0+Y291bnQpICYmCisJICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZ1swXS0+Y291bnQpKSB7CiAJCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuIDA7CiAJfQpAQCAtODc4LDI1ICs4NzYsMjQgQEAKIAogCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+Y291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7Ci0JCWdvdG8gZXJyX3NldHVwOworCQlnb3RvIGNsZWFyX3Jlc2V0OwogCX0KIAotCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCXRlbXBfdHhfcmluZyA9IHZtYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCWlmICghdGVtcF90eF9yaW5nKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3NldHVwOworCQlnb3RvIGNsZWFyX3Jlc2V0OwogCX0KIAogCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgewotCQltZW1jcHkodGVtcF90eF9yaW5nLCBhZGFwdGVyLT50eF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQltZW1jcHkoJnRlbXBfdHhfcmluZ1tpXSwgYWRhcHRlci0+dHhfcmluZ1tpXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJCXRlbXBfdHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKIAkJCWVyciA9IGl4Z2JlX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3R4X3JpbmdbaV0pOwpAQCAtOTA0LDI4ICs5MDEsMjQgQEAKIAkJCQl3aGlsZSAoaSkgewogCQkJCQlpLS07CiAJCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3R4X3JpbmdbaV0pOworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CiAJCQkJfQotCQkJCWdvdG8gZXJyX3NldHVwOworCQkJCWdvdG8gY2xlYXJfcmVzZXQ7CiAJCQl9CiAJCX0KIAkJbmVlZF91cGRhdGUgPSB0cnVlOwogCX0KIAotCXRlbXBfcnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICgoIXRlbXBfcnhfcmluZykgJiYgKG5lZWRfdXBkYXRlKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfdHhfcmluZ1tpXSk7Ci0JCWtmcmVlKHRlbXBfdHhfcmluZyk7CisJdGVtcF9yeF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CisJaWYgKCF0ZW1wX3J4X3JpbmcpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfc2V0dXA7CiAJfQogCiAJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7Ci0JCW1lbWNweSh0ZW1wX3J4X3JpbmcsIGFkYXB0ZXItPnJ4X3JpbmcsCi0JCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCW1lbWNweSgmdGVtcF9yeF9yaW5nW2ldLCBhZGFwdGVyLT5yeF9yaW5nW2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQkJdGVtcF9yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OwogCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CkBAIC05NDcsMjIgKzk0MCwzMiBAQAogCiAJCS8qIHR4ICovCiAJCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgewotCQkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Ci0JCQlhZGFwdGVyLT50eF9yaW5nID0gdGVtcF90eF9yaW5nOwotCQkJdGVtcF90eF9yaW5nID0gTlVMTDsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQkJCW1lbWNweShhZGFwdGVyLT50eF9yaW5nW2ldLCAmdGVtcF90eF9yaW5nW2ldLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKKwkJCX0KIAkJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCX0KIAogCQkvKiByeCAqLwogCQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKLQkJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotCQkJYWRhcHRlci0+cnhfcmluZyA9IHRlbXBfcnhfcmluZzsKLQkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CisJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJCQltZW1jcHkoYWRhcHRlci0+cnhfcmluZ1tpXSwgJnRlbXBfcnhfcmluZ1tpXSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CisJCQl9CiAJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCQl9CiAJCWl4Z2JlX3VwKGFkYXB0ZXIpOwogCX0KKworCXZmcmVlKHRlbXBfcnhfcmluZyk7CiBlcnJfc2V0dXA6CisJdmZyZWUodGVtcF90eF9yaW5nKTsKK2NsZWFyX3Jlc2V0OgogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTc0LDYgKzk3Nyw5IEBACiAJCXJldHVybiBJWEdCRV9URVNUX0xFTjsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJcmV0dXJuIElYR0JFX1NUQVRTX0xFTjsKKwljYXNlIEVUSF9TU19OVFVQTEVfRklMVEVSUzoKKwkJcmV0dXJuIChFVEhUT09MX01BWF9OVFVQTEVfTElTVF9FTlRSWSAqCisJCSAgICAgICAgRVRIVE9PTF9NQVhfTlRVUExFX1NUUklOR19QRVJfRU5UUlkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMDA3LDEzICsxMDEzLDEzIEBACiAJCSAgICAgICAgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOwogCX0KIAlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0uc3RhdHM7CisJCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0tPnN0YXRzOwogCQlmb3IgKGsgPSAwOyBrIDwgc3RhdF9jb3VudDsgaysrKQogCQkJZGF0YVtpICsga10gPSBxdWV1ZV9zdGF0W2tdOwogCQlpICs9IGs7CiAJfQogCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKLQkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+cnhfcmluZ1tqXS5zdGF0czsKKwkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+cnhfcmluZ1tqXS0+c3RhdHM7CiAJCWZvciAoayA9IDA7IGsgPCBzdGF0X2NvdW50OyBrKyspCiAJCQlkYXRhW2kgKyBrXSA9IHF1ZXVlX3N0YXRba107CiAJCWkgKz0gazsKQEAgLTE2MjcsNyArMTYzMyw3IEBACiAJcmVnX2RhdGEgfD0gSVhHQkVfUlhEQ1RMX0VOQUJMRTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoMCksIHJlZ19kYXRhKTsKIAlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKLQkJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHg7CisJCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1swXS0+cmVnX2lkeDsKIAkJdTMyIGs7CiAJCWZvciAoayA9IDA7IGsgPCAxMDsgaysrKSB7CiAJCQlpZiAoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LApAQCAtMTg2NywxMSArMTg3MywyMiBAQAogCQlpZiAoaXhnYmVfaW50cl90ZXN0KGFkYXB0ZXIsICZkYXRhWzJdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKKwkJLyogSWYgU1JJT1Ygb3IgVk1EcSBpcyBlbmFibGVkIHRoZW4gc2tpcCBNQUMKKwkJICogbG9vcGJhY2sgZGlhZ25vc3RpYy4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8CisJCQkJICAgICAgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJCQlEUFJJTlRLKEhXLCBJTkZPLCAiU2tpcCBNQUMgbG9vcGJhY2sgZGlhZ25vc3RpYyBpbiBWVCAiCisJCQkJIm1vZGVcbiIpOworCQkJZGF0YVszXSA9IDA7CisJCQlnb3RvIHNraXBfbG9vcGJhY2s7CisJCX0KKwogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAkJRFBSSU5USyhIVywgSU5GTywgImxvb3BiYWNrIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCAmZGF0YVszXSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCitza2lwX2xvb3BiYWNrOgogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAogCQljbGVhcl9iaXQoX19JWEdCRV9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwpAQCAtMjAwMCw3ICsyMDE3LDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQllYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxID0gYWRhcHRlci0+dHhfcmluZ1swXS53b3JrX2xpbWl0OworCWVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgPSBhZGFwdGVyLT50eF9yaW5nWzBdLT53b3JrX2xpbWl0OwogCiAJLyogb25seSB2YWxpZCBpZiBpbiBjb25zdGFudCBJVFIgbW9kZSAqLwogCXN3aXRjaCAoYWRhcHRlci0+cnhfaXRyX3NldHRpbmcpIHsKQEAgLTIwNTMsNyArMjA3MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpCi0JCWFkYXB0ZXItPnR4X3JpbmdbMF0ud29ya19saW1pdCA9IGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CisJCWFkYXB0ZXItPnR4X3JpbmdbMF0tPndvcmtfbGltaXQgPSBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOwogCiAJaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA+IDEpIHsKIAkJLyogY2hlY2sgdGhlIGxpbWl0cyAqLwpAQCAtMjEzNCwyMyArMjE1MSwxMjQgQEAKIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlib29sIG5lZWRfcmVzZXQgPSBmYWxzZTsKIAogCWV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSk7CiAKLQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfQ0FQQUJMRSkpCi0JCXJldHVybiAwOwotCiAJLyogaWYgc3RhdGUgY2hhbmdlcyB3ZSBuZWVkIHRvIHVwZGF0ZSBhZGFwdGVyLT5mbGFncyBhbmQgcmVzZXQgKi8KIAlpZiAoKCEhKGRhdGEgJiBFVEhfRkxBR19MUk8pKSAhPSAKIAkgICAgKCEhKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSkpIHsKIAkJYWRhcHRlci0+ZmxhZ3MyIF49IElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEOworCQluZWVkX3Jlc2V0ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIEZsb3cgRGlyZWN0b3Igbi10dXBsZSBzdXBwb3J0IHdhcyBlbmFibGVkIG9yIGRpc2FibGVkLiAgSWYKKwkgKiB0aGUgc3RhdGUgY2hhbmdlZCwgd2UgbmVlZCB0byByZXNldC4KKwkgKi8KKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkgJiYKKwkgICAgKCEoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpKSB7CisJCS8qIHR1cm4gb2ZmIEZsb3cgRGlyZWN0b3IgcGVyZmVjdCwgc2V0IGhhc2ggYW5kIHJlc2V0ICovCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFOworCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFOworCQluZWVkX3Jlc2V0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKCghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpICYmCisJICAgICAgICAgICAoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpIHsKKwkJLyogdHVybiBvZmYgRmxvdyBEaXJlY3RvciBoYXNoLCBlbmFibGUgcGVyZmVjdCBhbmQgcmVzZXQgKi8KKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEU7CisJCW5lZWRfcmVzZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIG5vIHN0YXRlIGNoYW5nZSAqLworCX0KKworCWlmIChuZWVkX3Jlc2V0KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCQllbHNlCiAJCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAl9Ci0JcmV0dXJuIDA7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpeGdiZV9zZXRfcnhfbnR1cGxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlICpjbWQpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgZnMgPSBjbWQtPmZzOworCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgaW5wdXRfc3RydWN0OworCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgaW5wdXRfbWFza3M7CisJaW50IHRhcmdldF9xdWV1ZTsKKworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyoKKwkgKiBEb24ndCBhbGxvdyBwcm9ncmFtbWluZyBpZiB0aGUgYWN0aW9uIGlzIGEgcXVldWUgZ3JlYXRlciB0aGFuCisJICogdGhlIG51bWJlciBvZiBvbmxpbmUgVHggcXVldWVzLgorCSAqLworCWlmICgoZnMuYWN0aW9uID49IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpIHx8CisJICAgIChmcy5hY3Rpb24gPCBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJmlucHV0X3N0cnVjdCwgMCwgc2l6ZW9mKHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQpKTsKKwltZW1zZXQoJmlucHV0X21hc2tzLCAwLCBzaXplb2Yoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dF9tYXNrcykpOworCisJaW5wdXRfbWFza3Muc3JjX2lwX21hc2sgPSBmcy5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYzsKKwlpbnB1dF9tYXNrcy5kc3RfaXBfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0OworCWlucHV0X21hc2tzLnNyY19wb3J0X21hc2sgPSBmcy5tX3UudGNwX2lwNF9zcGVjLnBzcmM7CisJaW5wdXRfbWFza3MuZHN0X3BvcnRfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMucGRzdDsKKwlpbnB1dF9tYXNrcy52bGFuX2lkX21hc2sgPSBmcy52bGFuX3RhZ19tYXNrOworCS8qIG9ubHkgdXNlIHRoZSBsb3dlc3QgMiBieXRlcyBmb3IgZmxleCBieXRlcyAqLworCWlucHV0X21hc2tzLmRhdGFfbWFzayA9IChmcy5kYXRhX21hc2sgJiAweGZmZmYpOworCisJc3dpdGNoIChmcy5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCQlpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OSgmaW5wdXRfc3RydWN0LCBJWEdCRV9BVFJfTDRUWVBFX1RDUCk7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfVURQKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfU0NUUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBNYXNrIGJpdHMgZnJvbSB0aGUgaW5wdXRzIGJhc2VkIG9uIHVzZXItc3VwcGxpZWQgbWFzayAqLworCWl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkoJmlucHV0X3N0cnVjdCwKKwkgICAgICAgICAgICAoZnMuaF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgJiB+ZnMubV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpKTsKKwlpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KCZpbnB1dF9zdHJ1Y3QsCisJICAgICAgICAgICAgKGZzLmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KSk7CisJLyogODI1OTkgZXhwZWN0cyB0aGVzZSB0byBiZSBieXRlLXN3YXBwZWQgZm9yIHBlcmZlY3QgZmlsdGVyaW5nICovCisJaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OSgmaW5wdXRfc3RydWN0LAorCSAgICAgICAoKG50b2hzKGZzLmhfdS50Y3BfaXA0X3NwZWMucHNyYykpICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMucHNyYykpOworCWl4Z2JlX2F0cl9zZXRfZHN0X3BvcnRfODI1OTkoJmlucHV0X3N0cnVjdCwKKwkgICAgICAgKChudG9ocyhmcy5oX3UudGNwX2lwNF9zcGVjLnBkc3QpKSAmIH5mcy5tX3UudGNwX2lwNF9zcGVjLnBkc3QpKTsKKworCS8qIFZMQU4gYW5kIEZsZXggYnl0ZXMgYXJlIGVpdGhlciBjb21wbGV0ZWx5IG1hc2tlZCBvciBub3QgKi8KKwlpZiAoIWZzLnZsYW5fdGFnX21hc2spCisJCWl4Z2JlX2F0cl9zZXRfdmxhbl9pZF84MjU5OSgmaW5wdXRfc3RydWN0LCBmcy52bGFuX3RhZyk7CisKKwlpZiAoIWlucHV0X21hc2tzLmRhdGFfbWFzaykKKwkJLyogbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHRoZSBmaXJzdCAyIGJ5dGVzIG9mIHVzZXIgZGF0YSAqLworCQlpeGdiZV9hdHJfc2V0X2ZsZXhfYnl0ZV84MjU5OSgmaW5wdXRfc3RydWN0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnMuZGF0YSAmIDB4ZmZmZikpOworCisJLyogZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZHJvcCBvciByb3V0ZSB0aGUgcGFja2V0ICovCisJaWYgKGZzLmFjdGlvbiA9PSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKQorCQl0YXJnZXRfcXVldWUgPSBNQVhfUlhfUVVFVUVTIC0gMTsKKwllbHNlCisJCXRhcmdldF9xdWV1ZSA9IGZzLmFjdGlvbjsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOworCWl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KCZhZGFwdGVyLT5odywgJmlucHV0X3N0cnVjdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXRfbWFza3MsIDAsIHRhcmdldF9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmZkaXJfcGVyZmVjdF9sb2NrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JlX2V0aHRvb2xfb3BzID0gewpAQCAtMjE4OCw2ICsyMzA2LDcgQEAKIAkuc2V0X2NvYWxlc2NlICAgICAgICAgICA9IGl4Z2JlX3NldF9jb2FsZXNjZSwKIAkuZ2V0X2ZsYWdzICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogCS5zZXRfZmxhZ3MgICAgICAgICAgICAgID0gaXhnYmVfc2V0X2ZsYWdzLAorCS5zZXRfcnhfbnR1cGxlICAgICAgICAgID0gaXhnYmVfc2V0X3J4X250dXBsZSwKIH07CiAKIHZvaWQgaXhnYmVfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggZTlhMjBjOC4uNDEyM2RlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9GQ1JFVEFfU0laRTsgaSsrKSB7CiAJCQlmY29lX2kgPSBmLT5tYXNrICsgaSAlIGYtPmluZGljZXM7CiAJCQlmY29lX2kgJj0gSVhHQkVfRkNSRVRBX0VOVFJZX01BU0s7Ci0JCQlmY29lX3EgPSBhZGFwdGVyLT5yeF9yaW5nW2Zjb2VfaV0ucmVnX2lkeDsKKwkJCWZjb2VfcSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZV9pXS0+cmVnX2lkeDsKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSRVRBKGkpLCBmY29lX3EpOwogCQl9CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSRUNUTCwgSVhHQkVfRkNSRUNUTF9FTkEpOwpAQCAtNTMzLDcgKzUzMyw3IEBACiAJfSBlbHNlICB7CiAJCS8qIFVzZSBzaW5nbGUgcnggcXVldWUgZm9yIEZDb0UgKi8KIAkJZmNvZV9pID0gZi0+bWFzazsKLQkJZmNvZV9xID0gYWRhcHRlci0+cnhfcmluZ1tmY29lX2ldLnJlZ19pZHg7CisJCWZjb2VfcSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZV9pXS0+cmVnX2lkeDsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JFQ1RMLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FVFFTKElYR0JFX0VUUUZfRklMVEVSX0ZDT0UpLAogCQkJCUlYR0JFX0VUUVNfUVVFVUVfRU4gfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDk1MWI3M2MuLjQ1ZTM1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQ1LDEyICs0NSwxMyBAQAogI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk5LmgiCisjaW5jbHVkZSAiaXhnYmVfc3Jpb3YuaCIKIAogY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdID0gIml4Z2JlIjsKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC40NC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC42Mi1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtNjcsNyArNjgsNyBAQAogICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYmVfcGNpX3RibCkgPSB7CiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTgpLAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUKSwKQEAgLTEyNCw2ICsxMjUsMTMgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF92ZnM7Cittb2R1bGVfcGFyYW0obWF4X3ZmcywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF92ZnMsICJNYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSAiCisgICAgICAgICAgICAgICAgICJwZXIgcGh5c2ljYWwgZnVuY3Rpb24iKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xMzEsNiArMTM5LDQxIEBACiAKICNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9kaXNhYmxlX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGdjcjsKKwl1MzIgZ3BpZTsKKwl1MzIgdm1kY3RsOworCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJcGNpX2Rpc2FibGVfc3Jpb3YoYWRhcHRlci0+cGRldik7CisjZW5kaWYKKworCS8qIHR1cm4gb2ZmIGRldmljZSBJT1YgbW9kZSAqLworCWdjciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HQ1JfRVhUKTsKKwlnY3IgJj0gfihJWEdCRV9HQ1JfRVhUX1NSSU9WKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dDUl9FWFQsIGdjcik7CisJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisKKwkvKiBzZXQgZGVmYXVsdCBwb29sIGJhY2sgdG8gMCAqLworCXZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCXZtZGN0bCAmPSB+SVhHQkVfVlRfQ1RMX1BPT0xfTUFTSzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZUX0NUTCwgdm1kY3RsKTsKKworCS8qIHRha2UgYSBicmVhdGhlciB0aGVuIGNsZWFuIHVwIGRyaXZlciBkYXRhICovCisJbXNsZWVwKDEwMCk7CisJaWYgKGFkYXB0ZXItPnZmaW5mbykKKwkJa2ZyZWUoYWRhcHRlci0+dmZpbmZvKTsKKwlhZGFwdGVyLT52ZmluZm8gPSBOVUxMOworCisJYWRhcHRlci0+bnVtX3ZmcyA9IDA7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKK30KKwogc3RhdGljIHZvaWQgaXhnYmVfcmVsZWFzZV9od19jb250cm9sKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjdHJsX2V4dDsKQEAgLTQ1MSw3ICs0OTQsNyBAQAogewogCXUzMiByeGN0cmw7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKLQlpbnQgcSA9IHJ4X3JpbmcgLSBhZGFwdGVyLT5yeF9yaW5nOworCWludCBxID0gcnhfcmluZy0+cmVnX2lkeDsKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7CkBAIC00NzksNyArNTIyLDcgQEAKIHsKIAl1MzIgdHhjdHJsOwogCWludCBjcHUgPSBnZXRfY3B1KCk7Ci0JaW50IHEgPSB0eF9yaW5nIC0gYWRhcHRlci0+dHhfcmluZzsKKwlpbnQgcSA9IHR4X3JpbmctPnJlZ19pZHg7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CkBAIC01MTMsMTIgKzU1NiwxMiBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9DVFJMLCAyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jcHUgPSAtMTsKLQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPmNwdSA9IC0xOworCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY3B1ID0gLTE7Ci0JCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5jcHUgPSAtMTsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAl9CiB9CiAKQEAgLTc3NSw2ICs4MTgsMTIgQEAKIAlyZXR1cm4gc2tiOwogfQogCitzdHJ1Y3QgaXhnYmVfcnNjX2NiIHsKKwlkbWFfYWRkcl90IGRtYTsKK307CisKKyNkZWZpbmUgSVhHQkVfUlNDX0NCKHNrYikgKChzdHJ1Y3QgaXhnYmVfcnNjX2NiICopKHNrYiktPmNiKQorCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCkBAIC04MDYsNiArODU1LDcgQEAKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKIAorCQlybWIoKTsgLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CiAJCQloZHJfaW5mbyA9IGxlMTZfdG9fY3B1KGl4Z2JlX2dldF9oZHJfaW5mbyhyeF9kZXNjKSk7CiAJCQlsZW4gPSAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0spID4+CkBAIC04MjMsOSArODczLDIxIEBACiAJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCiAJCWlmIChyeF9idWZmZXJfaW5mby0+ZG1hKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJ4X2J1ZmZlcl9pbmZvLT5kbWEsCi0JCQkgICAgICAgICAgICAgICAgIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCi0JCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSAmJgorCQkJICAgICghKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9FT1ApKSAmJgorCQkJCSAoIShza2ItPnByZXYpKSkKKwkJCQkvKgorCQkJCSAqIFdoZW4gSFdSU0MgaXMgZW5hYmxlZCwgZGVsYXkgdW5tYXBwaW5nCisJCQkJICogb2YgdGhlIGZpcnN0IHBhY2tldC4gSXQgY2FycmllcyB0aGUKKwkJCQkgKiBoZWFkZXIgaW5mb3JtYXRpb24sIEhXIG1heSBzdGlsbAorCQkJCSAqIGFjY2VzcyB0aGUgaGVhZGVyIGFmdGVyIHRoZSB3cml0ZWJhY2suCisJCQkJICogT25seSB1bm1hcCBpdCB3aGVuIEVPUCBpcyByZWFjaGVkCisJCQkJICovCisJCQkJSVhHQkVfUlNDX0NCKHNrYiktPmRtYSA9IHJ4X2J1ZmZlcl9pbmZvLT5kbWE7CisJCQllbHNlCisJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCByeF9idWZmZXJfaW5mby0+ZG1hLAorCQkJCSAgICAgICAgICAgICAgICAgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKIAkJCXNrYl9wdXQoc2tiLCBsZW4pOwogCQl9CkBAIC04NzMsNiArOTM1LDEwIEBACiAJCQlpZiAoc2tiLT5wcmV2KQogCQkJCXNrYiA9IGl4Z2JlX3RyYW5zZm9ybV9yc2NfcXVldWUoc2tiLCAmKHJ4X3JpbmctPnJzY19jb3VudCkpOwogCQkJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSB7CisJCQkJaWYgKElYR0JFX1JTQ19DQihza2IpLT5kbWEpCisJCQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgSVhHQkVfUlNDX0NCKHNrYiktPmRtYSwKKwkJCQkJICAgICAgICAgICAgICAgICByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKQogCQkJCQlyeF9yaW5nLT5yc2NfY291bnQgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAkJCQllbHNlCkBAIC05ODksNyArMTA1NSw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewotCQkJaiA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0tPnJlZ19pZHg7CiAJCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAwLCBqLCB2X2lkeCk7CiAJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKQEAgLTk5OSw3ICsxMDY1LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7Ci0JCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKKwkJCWogPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKIAkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTAyNSw3ICsxMDkxLDEyIEBACiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KIAltYXNrID0gSVhHQkVfRUlNU19FTkFCTEVfTUFTSzsKLQltYXNrICY9IH4oSVhHQkVfRUlNU19PVEhFUiB8IElYR0JFX0VJTVNfTFNDKTsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJbWFzayAmPSB+KElYR0JFX0VJTVNfT1RIRVIgfAorCQkJICBJWEdCRV9FSU1TX01BSUxCT1ggfAorCQkJICBJWEdCRV9FSU1TX0xTQyk7CisJZWxzZQorCQltYXNrICY9IH4oSVhHQkVfRUlNU19PVEhFUiB8IElYR0JFX0VJTVNfTFNDKTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUFDLCBtYXNrKTsKIH0KIApAQCAtMTEzNCw3ICsxMjA1LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKLQkJdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CiAJCXJldF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3ZlY3Rvci0+dHhfaXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9yaW5nLT50b3RhbF9wYWNrZXRzLApAQCAtMTE0OSw3ICsxMjIwLDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJCXJldF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3ZlY3Rvci0+cnhfaXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9yaW5nLT50b3RhbF9wYWNrZXRzLApAQCAtMTI1NCw2ICsxMzI1LDkgQEAKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfTFNDKQogCQlpeGdiZV9jaGVja19sc2MoYWRhcHRlcik7CiAKKwlpZiAoZWljciAmIElYR0JFX0VJQ1JfTUFJTEJPWCkKKwkJaXhnYmVfbXNnX3Rhc2soYWRhcHRlcik7CisKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlpeGdiZV9jaGVja19mYW5fZmFpbHVyZShhZGFwdGVyLCBlaWNyKTsKIApAQCAtMTI2OCw3ICsxMzQyLDcgQEAKIAkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewogCQkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0KLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAmdHhfcmluZy0+cmVpbml0X3N0YXRlKSkKIAkJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+ZmRpcl9yZWluaXRfdGFzayk7CkBAIC0xMzI3LDcgKzE0MDEsNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQl0eF9yaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAkJdHhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCQl0eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTM1NSw3ICsxNDI5LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7ICBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7Ci0JCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOwogCQlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CiAJCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwogCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCkBAIC0xMzg1LDcgKzE0NTksNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQlyaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAkJcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCQlyaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTM5NCw3ICsxNDY4LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJCXJpbmctPnRvdGFsX2J5dGVzID0gMDsKIAkJcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKQEAgLTE0MjUsNyArMTQ5OSw3IEBACiAJbG9uZyByX2lkeDsKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwotCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CkBAIC0xNDY2LDcgKzE1NDAsNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQlyaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIHJpbmcpOwpAQCAtMTQ4Miw3ICsxNTU2LDcgQEAKIAlidWRnZXQgPSBtYXgoYnVkZ2V0LCAxKTsKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7Ci0JCXJpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcmluZyk7CkBAIC0xNDkzLDcgKzE1NjcsNyBAQAogCX0KIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwotCXJpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwlyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwpAQCAtMTUyNiw3ICsxNjAwLDcgQEAKIAlsb25nIHJfaWR4OwogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7Ci0JdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eF9yaW5nKTsKQEAgLTE3MTEsOCArMTc4NSw4IEBACiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yWzBdOwogCXU4IGN1cnJlbnRfaXRyOwogCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1swXTsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nWzBdOworCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1swXTsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbMF07CiAKIAlxX3ZlY3Rvci0+dHhfaXRyID0gaXhnYmVfdXBkYXRlX2l0cihhZGFwdGVyLCBuZXdfaXRyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfdmVjdG9yLT50eF9pdHIsCkBAIC0xNzY4LDYgKzE4NDIsOCBAQAogCQltYXNrIHw9IElYR0JFX0VJTVNfRUNDOwogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CiAJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMjsKKwkJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCQltYXNrIHw9IElYR0JFX0VJTVNfTUFJTEJPWDsKIAl9CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSB8fAogCSAgICBhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUpCkBAIC0xNzc2LDYgKzE4NTIsMTEgQEAKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBtYXNrKTsKIAlpeGdiZV9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCB+MCk7CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKworCWlmIChhZGFwdGVyLT5udW1fdmZzID4gMzIpIHsKKwkJdTMyIGVpdHJzZWwgPSAoMSA8PCAoYWRhcHRlci0+bnVtX3ZmcyAtIDMyKSkgLSAxOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSU0VMLCBlaXRyc2VsKTsKKwl9CiB9CiAKIC8qKgpAQCAtMTgxNywxMCArMTg5OCwxMCBAQAogCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCiAJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmKHFfdmVjdG9yLT5uYXBpKSkpIHsKLQkJYWRhcHRlci0+dHhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKLQkJYWRhcHRlci0+dHhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbMF0udG90YWxfcGFja2V0cyA9IDA7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbMF0udG90YWxfYnl0ZXMgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nWzBdLT50b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+dHhfcmluZ1swXS0+dG90YWxfYnl0ZXMgPSAwOworCQlhZGFwdGVyLT5yeF9yaW5nWzBdLT50b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZ1swXS0+dG90YWxfYnl0ZXMgPSAwOwogCQkvKiB3b3VsZCBkaXNhYmxlIGludGVycnVwdHMgaGVyZSBidXQgRUlBTSBkaXNhYmxlZCBpdCAqLwogCQlfX25hcGlfc2NoZWR1bGUoJihxX3ZlY3Rvci0+bmFwaSkpOwogCX0KQEAgLTE5MDUsNiArMTk4Niw4IEBACiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRjAwMDApOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDApLCB+MCk7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMSksIH4wKTsKKwkJaWYgKGFkYXB0ZXItPm51bV92ZnMgPiAzMikKKwkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFJTRUwsIDApOwogCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CkBAIC0xOTUwLDcgKzIwMzMsNyBAQAogCiAJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwogCQlqID0gcmluZy0+cmVnX2lkeDsKIAkJdGRiYSA9IHJpbmctPmRtYTsKIAkJdGRsZW4gPSByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CkBAIC0xOTYwLDggKzIwNDMsOCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOwotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9UREgoaik7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0udGFpbCA9IElYR0JFX1REVChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS0+aGVhZCA9IElYR0JFX1RESChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS0+dGFpbCA9IElYR0JFX1REVChqKTsKIAkJLyoKIAkJICogRGlzYWJsZSBUeCBIZWFkIFdyaXRlYmFjayBSTyBiaXQsIHNpbmNlIHRoaXMgaG9zZXMKIAkJICogYm9va2tlZXBpbmcgaWYgdGhpbmdzIGFyZW4ndCBkZWxpdmVyZWQgaW4gb3JkZXIuCkBAIC0xOTg5LDE4ICsyMDcyLDMyIEBACiAKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCXUzMiBydHRkY3M7CisJCXUzMiBtYXNrOwogCiAJCS8qIGRpc2FibGUgdGhlIGFyYml0ZXIgd2hpbGUgc2V0dGluZyBNVFFDICovCiAJCXJ0dGRjcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SVFREQ1MpOwogCQlydHRkY3MgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJ0dGRjcyk7CiAKLQkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCAoSVhHQkVfTVRRQ19SVF9FTkEgfAotCQkJICAgICAgICAgICAgICAgIElYR0JFX01UUUNfOFRDXzhUUSkpOwotCQllbHNlCisJCS8qIHNldCB0cmFuc21pdCBwb29sIGxheW91dCAqLworCQltYXNrID0gKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOworCQlzd2l0Y2ggKGFkYXB0ZXItPmZsYWdzICYgbWFzaykgeworCisJCWNhc2UgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCk6CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsCisJCQkJCShJWEdCRV9NVFFDX1ZUX0VOQSB8IElYR0JFX01UUUNfNjRWRikpOworCQkJYnJlYWs7CisKKwkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6CisJCQkvKiBXZSBlbmFibGUgOCB0cmFmZmljIGNsYXNzZXMsIERDQiBvbmx5ICovCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsCisJCQkJICAgICAgKElYR0JFX01UUUNfUlRfRU5BIHwgSVhHQkVfTVRRQ184VENfOFRRKSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCBJWEdCRV9NVFFDXzY0UV8xUEIpOworCQkJYnJlYWs7CisJCX0KIAogCQkvKiByZS1lYWJsZSB0aGUgYXJiaXRlciAqLwogCQlydHRkY3MgJj0gfklYR0JFX1JUVERDU19BUkJESVM7CkBAIC0yMDU5LDEyICsyMTU2LDE2IEBACiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCQkJCSB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQKICNlbmRpZgorCQkJCSB8IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRAogCQkJCSk7CiAKIAlzd2l0Y2ggKG1hc2spIHsKIAljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKIAkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU47CiAJCWJyZWFrOworCWNhc2UgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCk6CisJCW1ycWMgPSBJWEdCRV9NUlFDX1ZNRFFFTjsKKwkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgogCQltcnFjID0gSVhHQkVfTVJRQ19SVDhUQ0VOOwpAQCAtMjA5MCw3ICsyMTkxLDcgQEAKIAl1MzIgcnNjY3RybDsKIAlpbnQgcnhfYnVmX2xlbjsKIAotCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpbmRleF07CisJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaW5kZXhdOwogCWogPSByeF9yaW5nLT5yZWdfaWR4OwogCXJ4X2J1Zl9sZW4gPSByeF9yaW5nLT5yeF9idWZfbGVuOwogCXJzY2N0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlNDQ1RMKGopKTsKQEAgLTIxNDUsNyArMjI0Niw5IEBACiAJaW50IHJ4X2J1Zl9sZW47CiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCi0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCS8qIERvIG5vdCB1c2UgcGFja2V0IHNwbGl0IGlmIHdlJ3JlIGluIFNSLUlPViBNb2RlICovCisJaWYgKCFhZGFwdGVyLT5udW1fdmZzKQorCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CiAKIAkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CkBAIC0yMTU3LDcgKzIyNjAsOSBAQAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjZIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0wySERSOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkJSVhHQkVfUFNSVFlQRShhZGFwdGVyLT5udW1fdmZzKSwKKwkJCQkJcHNydHlwZSk7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkgJiYKQEAgLTIxODQsNyArMjI4OSw3IEBACiAjZW5kaWYKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0hMUkVHMCwgaGxyZWcwKTsKIAotCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CisJcmRsZW4gPSBhZGFwdGVyLT5yeF9yaW5nWzBdLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOwpAQCAtMjE5NCw3ICsyMjk5LDcgQEAKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CiAJCXJkYmEgPSByeF9yaW5nLT5kbWE7CiAJCWogPSByeF9yaW5nLT5yZWdfaWR4OwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEQkFMKGopLCAocmRiYSAmIERNQV9CSVRfTUFTSygzMikpKTsKQEAgLTIyNDMsNiArMjM0OCwzMCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOwogCX0KIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkgeworCQl1MzIgdnRfcmVnX2JpdHM7CisJCXUzMiByZWdfb2Zmc2V0LCB2Zl9zaGlmdDsKKwkJdTMyIHZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCQl2dF9yZWdfYml0cyA9IElYR0JFX1ZNRF9DVExfVk1EUV9FTgorCQkJfCBJWEdCRV9WVF9DVExfUkVQTEVOOworCQl2dF9yZWdfYml0cyB8PSAoYWRhcHRlci0+bnVtX3ZmcyA8PAorCQkJCUlYR0JFX1ZUX0NUTF9QT09MX1NISUZUKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVF9DVEwsIHZtZGN0bCB8IHZ0X3JlZ19iaXRzKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCAwKTsKKworCQl2Zl9zaGlmdCA9IGFkYXB0ZXItPm51bV92ZnMgJSAzMjsKKwkJcmVnX29mZnNldCA9IGFkYXB0ZXItPm51bV92ZnMgLyAzMjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDEpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDEpLCAwKTsKKwkJLyogRW5hYmxlIG9ubHkgdGhlIFBGJ3MgcG9vbCBmb3IgVHgvUnggKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKHJlZ19vZmZzZXQpLCAoMSA8PCB2Zl9zaGlmdCkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEUocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZEVFhHU1dDLCBJWEdCRV9QRkRUWEdTV0NfVlRfTEJFTik7CisJCWl4Z2JlX3NldF92bW9scihodywgYWRhcHRlci0+bnVtX3Zmcyk7CisJfQorCiAJLyogUHJvZ3JhbSBNUlFDIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHF1ZXVlcyAqLwogCW1ycWMgPSBpeGdiZV9zZXR1cF9tcnFjKGFkYXB0ZXIpOwogCkBAIC0yMjc0LDYgKzI0MDMsMjAgQEAKIAl9CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKIAorCWlmIChhZGFwdGVyLT5udW1fdmZzKSB7CisJCXUzMiByZWc7CisKKwkJLyogTWFwIFBGIE1BQyBhZGRyZXNzIGluIFJBUiBFbnRyeSAwIHRvIGZpcnN0IHBvb2wKKwkJICogZm9sbG93aW5nIFZGcyAqLworCQlody0+bWFjLm9wcy5zZXRfdm1kcShodywgMCwgYWRhcHRlci0+bnVtX3Zmcyk7CisKKwkJLyogU2V0IHVwIFZGIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHNlbGVjdGVkIFZUIE1vZGUsIGkuZS4KKwkJICogNjQgVkZzIGZvciBTUi1JT1YgKi8KKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dDUl9FWFQpOworCQlyZWcgfD0gSVhHQkVfR0NSX0VYVF9TUklPVjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HQ1JfRVhULCByZWcpOworCX0KKwogCXJ4Y3N1bSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENTVU0pOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8fApAQCAtMjMxMiwxNSArMjQ1NSwxNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBwb29sX25keCA9IGFkYXB0ZXItPm51bV92ZnM7CiAKIAkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwotCWh3LT5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgdmlkLCAwLCB0cnVlKTsKKwlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgcG9vbF9uZHgsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHBvb2xfbmR4ID0gYWRhcHRlci0+bnVtX3ZmczsKIAogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTIzMzEsNyArMjQ3Niw3IEBACiAJCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CiAKIAkvKiByZW1vdmUgVklEIGZyb20gZmlsdGVyIHRhYmxlICovCi0JaHctPm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCB2aWQsIDAsIGZhbHNlKTsKKwlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgcG9vbF9uZHgsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApAQCAtMjM2MSw3ICsyNTA2LDcgQEAKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJCXUzMiBjdHJsOwotCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4OwogCQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfUlhEQ1RMKGopKTsKIAkJCWN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSwgY3RybCk7CkBAIC0yNDE0LDcgKzI1NTksNyBAQAogICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIHVuaWNhc3QsIG11bHRpY2FzdCBhbmQKICAqIHByb21pc2N1b3VzIG1vZGUuCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQordm9pZCBpeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMjQ0NiwxNCArMjU5MSwxNiBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CiAKIAkvKiByZXByb2dyYW0gc2Vjb25kYXJ5IHVuaWNhc3QgbGlzdCAqLwotCWh3LT5tYWMub3BzLnVwZGF0ZV91Y19hZGRyX2xpc3QoaHcsICZuZXRkZXYtPnVjLmxpc3QpOworCWh3LT5tYWMub3BzLnVwZGF0ZV91Y19hZGRyX2xpc3QoaHcsIG5ldGRldik7CiAKIAkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KLQlhZGRyX2NvdW50ID0gbmV0ZGV2LT5tY19jb3VudDsKKwlhZGRyX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldik7CiAJaWYgKGFkZHJfY291bnQpCiAJCWFkZHJfbGlzdCA9IG5ldGRldi0+bWNfbGlzdC0+ZG1pX2FkZHI7CiAJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgYWRkcl9saXN0LCBhZGRyX2NvdW50LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfYWRkcl9saXN0X2l0cik7CisJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCWl4Z2JlX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjUyMiw3ICsyNjY5LDcgQEAKIAlpeGdiZV9kY2JfaHdfY29uZmlnKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPmRjYl9jZmcpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeDsKIAkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCS8qIFBUaHJlc2ggd29ya2Fyb3VuZCBmb3IgVHggaGFuZyB3aXRoIERGUCBlbmFibGVkLiAqLwogCQl0eGRjdGwgfD0gMzI7CkBAIC0yNTM5LDcgKzI2ODYsNyBAQAogCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHg7CiAJCQl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CiAJCQl2bG5jdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgdmxuY3RybCk7CkBAIC0yNTc5LDcgKzI3MjYsNyBAQAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLmF0cl9zYW1wbGVfcmF0ZSA9CisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5hdHJfc2FtcGxlX3JhdGUgPQogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZTsKIAkJaXhnYmVfaW5pdF9mZGlyX3NpZ25hdHVyZV84MjU5OShodywgYWRhcHRlci0+ZmRpcl9wYmFsbG9jKTsKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkgewpAQCAtMjU4OSw4ICsyNzM2LDggQEAKIAlpeGdiZV9jb25maWd1cmVfdHgoYWRhcHRlcik7CiAJaXhnYmVfY29uZmlndXJlX3J4KGFkYXB0ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CisJCWl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+cnhfcmluZ1tpXS0+Y291bnQgLSAxKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKQEAgLTI2NzMsNyArMjgyMCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnhyKQogewotCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nW3J4cl0tPnJlZ19pZHg7CiAJaW50IGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CkBAIC0yNjg3LDggKzI4MzQsOCBAQAogCQlEUFJJTlRLKERSViwgRVJSLCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCiAJCSAgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKIAl9Ci0JaXhnYmVfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKLQkgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5jb3VudCAtIDEpKTsKKwlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCBhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5yeF9yaW5nW3J4cl0tPmNvdW50IC0gMSkpOwogfQogCiBzdGF0aWMgaW50IGl4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjcwMiw2ICsyODQ5LDcgQEAKIAl1MzIgdHhkY3RsLCByeGRjdGwsIG1oYWRkOwogCXUzMiBkbWF0eGN0bDsKIAl1MzIgZ3BpZTsKKwl1MzIgY3RybF9leHQ7CiAKIAlpeGdiZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIApAQCAtMjcxNCw2ICsyODYyLDEwIEBACiAJCQkvKiBNU0kgb25seSAqLwogCQkJZ3BpZSA9IDA7CiAJCX0KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKSB7CisJCQlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCQkJZ3BpZSB8PSBJWEdCRV9HUElFX1ZUTU9ERV82NDsKKwkJfQogCQkvKiBYWFg6IHRvIGludGVycnVwdCBpbW1lZGlhdGVseSBmb3IgRUlDUyB3cml0ZXMsIGVuYWJsZSB0aGlzICovCiAJCS8qIGdwaWUgfD0gSVhHQkVfR1BJRV9FSU1FTjsgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKQEAgLTI3NzAsNyArMjkyMiw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeDsKIAkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCS8qIGVuYWJsZSBXVEhSRVNIPTggZGVzY3JpcHRvcnMsIHRvIGVuY291cmFnZSBidXJzdCB3cml0ZWJhY2sgKi8KIAkJdHhkY3RsIHw9ICg4IDw8IDE2KTsKQEAgLTI3ODQsMTQgKzI5MzYsMjYgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCwgZG1hdHhjdGwpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4OwogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlpbnQgd2FpdF9sb29wID0gMTA7CisJCQkvKiBwb2xsIGZvciBUeCBFbmFibGUgcmVhZHkgKi8KKwkJCWRvIHsKKwkJCQltc2xlZXAoMSk7CisJCQkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CisJCQl9IHdoaWxlICgtLXdhaXRfbG9vcCAmJgorCQkJICAgICAgICAgISh0eGRjdGwgJiBJWEdCRV9UWERDVExfRU5BQkxFKSk7CisJCQlpZiAoIXdhaXRfbG9vcCkKKwkJCQlEUFJJTlRLKERSViwgRVJSLCAiQ291bGQgbm90IGVuYWJsZSAiCisJCQkJICAgICAgICAiVHggUXVldWUgJWRcbiIsIGopOworCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7Ci0JCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4OwogCQlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFBUSFJFU0g9MzIgZGVzY3JpcHRvcnMgKGhhbGYgdGhlIGludGVybmFsIGNhY2hlKQogCQkgKiBhbmQgSFRIUkVTSD0wIGRlc2NyaXB0b3JzICh0byBtaW5pbWl6ZSBsYXRlbmN5IG9uIGZldGNoKSwKQEAgLTI4NjUsNyArMzAyOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQlzZXRfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLnJlaW5pdF9zdGF0ZSkpOworCQkgICAgICAgICYoYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVpbml0X3N0YXRlKSk7CiAKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwpAQCAtMjg3NSw2ICszMDM5LDEyIEBACiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwogCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7CiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwkvKiBTZXQgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yOTIzLDcgKzMwOTMsOCBAQAogCX0KIAogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwotCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKwlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIGFkYXB0ZXItPm51bV92ZnMsCisJCQkgICAgSVhHQkVfUkFIX0FWKTsKIH0KIAogLyoqCkBAIC0yOTU1LDYgKzMxMjYsMTAgQEAKIAkJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCQkJZG8gewogCQkJCXN0cnVjdCBza19idWZmICp0aGlzID0gc2tiOworCQkJCWlmIChJWEdCRV9SU0NfQ0IodGhpcyktPmRtYSkKKwkJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBJWEdCRV9SU0NfQ0IodGhpcyktPmRtYSwKKwkJCQkJICAgICAgICAgICAgICAgICByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiID0gc2tiLT5wcmV2OwogCQkJCWRldl9rZnJlZV9za2IodGhpcyk7CiAJCQl9IHdoaWxlIChza2IpOwpAQCAtMzAyOSw3ICszMjA0LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpeGdiZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwNDEsNyArMzIxNiw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9jbGVhbl90eF9yaW5nKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaXhnYmVfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogdm9pZCBpeGdiZV9kb3duKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMzA1NSw2ICszMjMwLDE3IEBACiAJLyogc2lnbmFsIHRoYXQgd2UgYXJlIGRvd24gdG8gdGhlIGludGVycnVwdCBoYW5kbGVyICovCiAJc2V0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAKKwkvKiBkaXNhYmxlIHJlY2VpdmUgZm9yIGFsbCBWRnMgYW5kIHdhaXQgb25lIHNlY29uZCAqLworCWlmIChhZGFwdGVyLT5udW1fdmZzKSB7CisJCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+bnVtX3ZmczsgaSsrKQorCQkJYWRhcHRlci0+dmZpbmZvW2ldLmNsZWFyX3RvX3NlbmQgPSAwOworCisJCS8qIHBpbmcgYWxsIHRoZSBhY3RpdmUgdmZzIHRvIGxldCB0aGVtIGtub3cgd2UgYXJlIGdvaW5nIGRvd24gKi8KKwkJaXhnYmVfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCQkvKiBEaXNhYmxlIGFsbCBWRlRFL1ZGUkUgVFgvUlggKi8KKwkJaXhnYmVfZGlzYWJsZV90eF9yeChhZGFwdGVyKTsKKwl9CisKIAkvKiBkaXNhYmxlIHJlY2VpdmVzICovCiAJcnhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1RSTCk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJ4Y3RybCAmIH5JWEdCRV9SWENUUkxfUlhFTik7CkBAIC0zMDgxLDcgKzMyNjcsNyBAQAogCiAJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHg7CiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwKIAkJICAgICAgICAgICAgICAgICh0eGRjdGwgJiB+SVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwpAQCAtMzA5NCw2ICszMjgwLDkgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKKwkvKiBjbGVhciBuLXR1cGxlIGZpbHRlcnMgdGhhdCBhcmUgY2FjaGVkICovCisJZXRodG9vbF9udHVwbGVfZmx1c2gobmV0ZGV2KTsKKwogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAJaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMzEyMSwxMyArMzMxMCwxMyBAQAogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKLQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKLQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKTsKKwkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nWzBdKTsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nWzBdKTsKIAl9CiAjZW5kaWYKIAotCXR4X2NsZWFuX2NvbXBsZXRlID0gaXhnYmVfY2xlYW5fdHhfaXJxKHFfdmVjdG9yLCBhZGFwdGVyLT50eF9yaW5nKTsKLQlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnR4X3JpbmdbMF0pOworCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgYWRhcHRlci0+cnhfcmluZ1swXSwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAogCWlmICghdHhfY2xlYW5fY29tcGxldGUpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKQEAgLTMyOTEsNiArMzQ4MCwxOSBAQAogfQogCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLworLyoqCisgKiBpeGdiZV9zZXRfc3Jpb3ZfcXVldWVzOiBBbGxvY2F0ZSBxdWV1ZXMgZm9yIElPViB1c2UKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogSU9WIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIGFueXRoaW5nLCBzbyBqdXN0IE5BSyB0aGUKKyAqIHJlcXVlc3QgZm9yIG5vdyBhbmQgbGV0IHRoZSBvdGhlciBxdWV1ZSByb3V0aW5lcworICogZmlndXJlIG91dCB3aGF0IHRvIGRvLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfc2V0X3NyaW92X3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQpAQCAtMzMwNCw2ICszNTA2LDE1IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKKwkvKiBTdGFydCB3aXRoIGJhc2UgY2FzZSAqLworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOworCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAxOworCWFkYXB0ZXItPm51bV9yeF9wb29scyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlc19wZXJfcG9vbCA9IDE7CisKKwlpZiAoaXhnYmVfc2V0X3NyaW92X3F1ZXVlcyhhZGFwdGVyKSkKKwkJcmV0dXJuOworCiAjaWZkZWYgSVhHQkVfRkNPRQogCWlmIChpeGdiZV9zZXRfZmNvZV9xdWV1ZXMoYWRhcHRlcikpCiAJCWdvdG8gZG9uZTsKQEAgLTMzOTMsOSArMzYwNCw5IEBACiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCXJldCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJcmV0ID0gZmFsc2U7CkBAIC0zNDIyLDggKzM2MzMsOCBAQAogCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKIAkJCS8qIHRoZSBudW1iZXIgb2YgcXVldWVzIGlzIGFzc3VtZWQgdG8gYmUgc3ltbWV0cmljICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgZGNiX2k7IGkrKykgewotCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMzsKLQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDI7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgMzsKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCAyOwogCQkJfQogCQkJcmV0ID0gdHJ1ZTsKIAkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewpAQCAtMzQ0MSwxOCArMzY1MiwxOCBAQAogCQkJCSAqIFJ4IFRDMC1UQzcgYXJlIG9mZnNldCBieSAxNiBxdWV1ZXMgZWFjaAogCQkJCSAqLwogCQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA1OwotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDU7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDQ7CiAJCQkJfQogCQkJCWZvciAoIDsgaSA8IDU7IGkrKykgewotCQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPQorCQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4ID0KIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICgoaSArIDIpIDw8IDQpOwotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDQ7CiAJCQkJfQogCQkJCWZvciAoIDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0KKwkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9CiAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAoKGkgKyA4KSA8PCAzKTsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCA0OwogCQkJCX0KIAogCQkJCXJldCA9IHRydWU7CkBAIC0zNDY1LDEyICszNjc2LDEyIEBACiAJCQkJICoKIAkJCQkgKiBSeCBUQzAtVEMzIGFyZSBvZmZzZXQgYnkgMzIgcXVldWVzIGVhY2gKIAkJCQkgKi8KLQkJCQlhZGFwdGVyLT50eF9yaW5nWzBdLnJlZ19pZHggPSAwOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbMV0ucmVnX2lkeCA9IDY0OwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbMl0ucmVnX2lkeCA9IDk2OwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbM10ucmVnX2lkeCA9IDExMjsKKwkJCQlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKwkJCQlhZGFwdGVyLT50eF9yaW5nWzFdLT5yZWdfaWR4ID0gNjQ7CisJCQkJYWRhcHRlci0+dHhfcmluZ1syXS0+cmVnX2lkeCA9IDk2OworCQkJCWFkYXB0ZXItPnR4X3JpbmdbM10tPnJlZ19pZHggPSAxMTI7CiAJCQkJZm9yIChpID0gMCA7IGkgPCBkY2JfaTsgaSsrKQotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDU7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDU7CiAKIAkJCQlyZXQgPSB0cnVlOwogCQkJfSBlbHNlIHsKQEAgLTM1MDMsOSArMzcxNCw5IEBACiAJICAgICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFKSB8fAogCSAgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCXJldCA9IHRydWU7CiAJfQogCkBAIC0zNTMzLDggKzM3NDQsOCBAQAogCiAJCQlpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKTsKIAkJCS8qIGZpbmQgb3V0IHF1ZXVlcyBpbiBUQyBmb3IgRkNvRSAqLwotCQkJZmNvZV9yeF9pID0gYWRhcHRlci0+cnhfcmluZ1tmY29lLT50Y10ucmVnX2lkeCArIDE7Ci0JCQlmY29lX3R4X2kgPSBhZGFwdGVyLT50eF9yaW5nW2Zjb2UtPnRjXS5yZWdfaWR4ICsgMTsKKwkJCWZjb2VfcnhfaSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZS0+dGNdLT5yZWdfaWR4ICsgMTsKKwkJCWZjb2VfdHhfaSA9IGFkYXB0ZXItPnR4X3JpbmdbZmNvZS0+dGNdLT5yZWdfaWR4ICsgMTsKIAkJCS8qCiAJCQkgKiBJbiA4MjU5OSwgdGhlIG51bWJlciBvZiBUeCBxdWV1ZXMgZm9yIGVhY2ggdHJhZmZpYwogCQkJICogY2xhc3MgZm9yIGJvdGggOC1UQyBhbmQgNC1UQyBtb2RlcyBhcmU6CkBAIC0zNTY1LDggKzM3NzYsOCBAQAogCQkJZmNvZV90eF9pID0gZi0+bWFzazsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgZi0+aW5kaWNlczsgaSsrLCBmY29lX3J4X2krKywgZmNvZV90eF9pKyspIHsKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbZi0+bWFzayArIGldLnJlZ19pZHggPSBmY29lX3J4X2k7Ci0JCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS5yZWdfaWR4ID0gZmNvZV90eF9pOworCQkJYWRhcHRlci0+cnhfcmluZ1tmLT5tYXNrICsgaV0tPnJlZ19pZHggPSBmY29lX3J4X2k7CisJCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS0+cmVnX2lkeCA9IGZjb2VfdHhfaTsKIAkJfQogCQlyZXQgPSB0cnVlOwogCX0KQEAgLTM1NzUsNiArMzc4NiwyNCBAQAogCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogLyoqCisgKiBpeGdiZV9jYWNoZV9yaW5nX3NyaW92IC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIHNyaW92CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFNSLUlPViBkb2Vzbid0IHVzZSBhbnkgZGVzY3JpcHRvciByaW5ncyBidXQgY2hhbmdlcyB0aGUgZGVmYXVsdCBpZgorICogbm8gb3RoZXIgbWFwcGluZyBpcyB1c2VkLgorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3Jpbmdfc3Jpb3Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+cnhfcmluZ1swXS0+cmVnX2lkeCA9IGFkYXB0ZXItPm51bV92ZnMgKiAyOworCWFkYXB0ZXItPnR4X3JpbmdbMF0tPnJlZ19pZHggPSBhZGFwdGVyLT5udW1fdmZzICogMjsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgogICogaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlciAtIERlc2NyaXB0b3IgcmluZyB0byByZWdpc3RlciBtYXBwaW5nCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKQEAgLTM1ODgsOCArMzgxNywxMSBAQAogc3RhdGljIHZvaWQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAkvKiBzdGFydCB3aXRoIGRlZmF1bHQgY2FzZSAqLwotCWFkYXB0ZXItPnJ4X3JpbmdbMF0ucmVnX2lkeCA9IDA7Ci0JYWRhcHRlci0+dHhfcmluZ1swXS5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT5yeF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKworCWlmIChpeGdiZV9jYWNoZV9yaW5nX3NyaW92KGFkYXB0ZXIpKQorCQlyZXR1cm47CiAKICNpZmRlZiBJWEdCRV9GQ09FCiAJaWYgKGl4Z2JlX2NhY2hlX3JpbmdfZmNvZShhZGFwdGVyKSkKQEAgLTM2MTksMzMgKzM4NTEsNjMgQEAKIHN0YXRpYyBpbnQgaXhnYmVfYWxsb2NfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwotCi0JYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXItPnR4X3JpbmcpCi0JCWdvdG8gZXJyX3R4X3JpbmdfYWxsb2NhdGlvbjsKLQotCWFkYXB0ZXItPnJ4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5yeF9yaW5nKQotCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisJaW50IG9yaWdfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50OwotCQlhZGFwdGVyLT50eF9yaW5nW2ldLnF1ZXVlX2luZGV4ID0gaTsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQlpZiAob3JpZ19ub2RlID09IC0xKSB7CisJCQlpbnQgY3VyX25vZGUgPSBuZXh0X29ubGluZV9ub2RlKGFkYXB0ZXItPm5vZGUpOworCQkJaWYgKGN1cl9ub2RlID09IE1BWF9OVU1OT0RFUykKKwkJCQljdXJfbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOworCQkJYWRhcHRlci0+bm9kZSA9IGN1cl9ub2RlOworCQl9CisJCXJpbmcgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCwKKwkJICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5ub2RlKTsKKwkJaWYgKCFyaW5nKQorCQkJcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmluZykKKwkJCWdvdG8gZXJyX3R4X3JpbmdfYWxsb2NhdGlvbjsKKwkJcmluZy0+Y291bnQgPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50OworCQlyaW5nLT5xdWV1ZV9pbmRleCA9IGk7CisJCXJpbmctPm51bWFfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CisKKwkJYWRhcHRlci0+dHhfcmluZ1tpXSA9IHJpbmc7CiAJfQogCisJLyogUmVzdG9yZSB0aGUgYWRhcHRlcidzIG9yaWdpbmFsIG5vZGUgKi8KKwlhZGFwdGVyLT5ub2RlID0gb3JpZ19ub2RlOworCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCXN0cnVjdCBpeGdiZV9yaW5nICpyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJaWYgKG9yaWdfbm9kZSA9PSAtMSkgeworCQkJaW50IGN1cl9ub2RlID0gbmV4dF9vbmxpbmVfbm9kZShhZGFwdGVyLT5ub2RlKTsKKwkJCWlmIChjdXJfbm9kZSA9PSBNQVhfTlVNTk9ERVMpCisJCQkJY3VyX25vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKKwkJCWFkYXB0ZXItPm5vZGUgPSBjdXJfbm9kZTsKKwkJfQorCQlyaW5nID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwsCisJCSAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bm9kZSk7CisJCWlmICghcmluZykKKwkJCXJpbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJpbmcpCisJCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisJCXJpbmctPmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKKwkJcmluZy0+cXVldWVfaW5kZXggPSBpOworCQlyaW5nLT5udW1hX25vZGUgPSBhZGFwdGVyLT5ub2RlOworCisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSByaW5nOwogCX0KIAorCS8qIFJlc3RvcmUgdGhlIGFkYXB0ZXIncyBvcmlnaW5hbCBub2RlICovCisJYWRhcHRlci0+bm9kZSA9IG9yaWdfbm9kZTsKKwogCWl4Z2JlX2NhY2hlX3JpbmdfcmVnaXN0ZXIoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKIAogZXJyX3J4X3JpbmdfYWxsb2NhdGlvbjoKLQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nW2ldKTsKIGVycl90eF9yaW5nX2FsbG9jYXRpb246CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0zNzAwLDYgKzM5NjIsOSBAQAogCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFOwogCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFOwogCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDA7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQorCQlpeGdiZV9kaXNhYmxlX3NyaW92KGFkYXB0ZXIpOworCiAJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKQEAgLTM3NDEsNyArNDAwNiwxMSBAQAogCX0KIAogCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKLQkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwkJcV92ZWN0b3IgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwsIGFkYXB0ZXItPm5vZGUpOworCQlpZiAoIXFfdmVjdG9yKQorCQkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IpLAorCQkJICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXFfdmVjdG9yKQogCQkJZ290byBlcnJfb3V0OwogCQlxX3ZlY3Rvci0+YWRhcHRlciA9IGFkYXB0ZXI7CkBAIC0zODY4LDEwICs0MTM3LDE2IEBACiAgKiovCiB2b2lkIGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Ja2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Ci0Ja2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7Ci0JYWRhcHRlci0+dHhfcmluZyA9IE5VTEw7Ci0JYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlhZGFwdGVyLT50eF9yaW5nW2ldID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXSA9IE5VTEw7CisJfQogCiAJaXhnYmVfZnJlZV9xX3ZlY3RvcnMoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CkBAIC0zOTQyLDYgKzQyMTcsNyBAQAogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdW5zaWduZWQgaW50IHJzczsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJaW50IGo7CkBAIC0zOTY5LDEwICs0MjQ1LDE4IEBACiAJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OTsKIAkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFOwogCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQ7Ci0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CisJCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OVFVQTEUpIHsKKwkJCS8qIEZsb3cgRGlyZWN0b3IgcGVyZmVjdCBmaWx0ZXIgZW5hYmxlZCAqLworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRTsKKwkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDA7CisJCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOworCQl9IGVsc2UgeworCQkJLyogRmxvdyBEaXJlY3RvciBoYXNoIGZpbHRlcnMgZW5hYmxlZCAqLworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRTsKKwkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDIwOworCQl9CiAJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkRJUl0uaW5kaWNlcyA9CiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTUFYX0ZESVJfSU5ESUNFUzsKLQkJYWRhcHRlci0+YXRyX3NhbXBsZV9yYXRlID0gMjA7CiAJCWFkYXB0ZXItPmZkaXJfcGJhbGxvYyA9IDA7CiAjaWZkZWYgSVhHQkVfRkNPRQogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRTsKQEAgLTQwNDEsNiArNDMyNSw5IEBACiAJLyogZW5hYmxlIHJ4IGNzdW0gYnkgZGVmYXVsdCAqLwogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEOwogCisJLyogZ2V0IGFzc2lnbmVkIE5VTUEgbm9kZSAqLworCWFkYXB0ZXItPm5vZGUgPSBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KTsKKwogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC00MDYwLDcgKzQzNDcsOSBAQAogCWludCBzaXplOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyKSAqIHR4X3JpbmctPmNvdW50OwotCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IHZtYWxsb2Nfbm9kZShzaXplLCB0eF9yaW5nLT5udW1hX25vZGUpOworCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCisJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKIAltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtNDEwMiw3ICs0MzkxLDcgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwpAQCAtNDEyNiw3ICs0NDE1LDkgQEAKIAlpbnQgc2l6ZTsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3J4X2J1ZmZlcikgKiByeF9yaW5nLT5jb3VudDsKLQlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jX25vZGUoc2l6ZSwgYWRhcHRlci0+bm9kZSk7CisJaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykKKwkJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkgICAgICAgICJ2bWFsbG9jIGFsbG9jYXRpb24gZmFpbGVkIGZvciB0aGUgcnggZGVzYyByaW5nXG4iKTsKQEAgLTQxNzIsNyArNDQ2Myw3IEBACiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKQEAgLTQyMTUsOCArNDUwNiw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQotCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS0+ZGVzYykKKwkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTQyNTIsOCArNDU0Myw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS5kZXNjKQotCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS0+ZGVzYykKKwkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTQ1MzAsOCArNDgyMSw4IEBACiAJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CiAJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCQlyc2NfY291bnQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5yc2NfY291bnQ7Ci0JCQlyc2NfZmx1c2ggKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5yc2NfZmx1c2g7CisJCQlyc2NfY291bnQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+cnNjX2NvdW50OworCQkJcnNjX2ZsdXNoICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJzY19mbHVzaDsKIAkJfQogCQlhZGFwdGVyLT5yc2NfdG90YWxfY291bnQgPSByc2NfY291bnQ7CiAJCWFkYXB0ZXItPnJzY190b3RhbF9mbHVzaCA9IHJzY19mbHVzaDsKQEAgLTQ1MzksMTEgKzQ4MzAsMTEgQEAKIAogCS8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSBhZGFwdGVyIHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlyZXN0YXJ0X3F1ZXVlICs9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVzdGFydF9xdWV1ZTsKKwkJcmVzdGFydF9xdWV1ZSArPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZXN0YXJ0X3F1ZXVlOwogCWFkYXB0ZXItPnJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJbm9uX2VvcF9kZXNjcyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLm5vbl9lb3BfZGVzY3M7CisJCW5vbl9lb3BfZGVzY3MgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+bm9uX2VvcF9kZXNjczsKIAlhZGFwdGVyLT5ub25fZW9wX2Rlc2NzID0gbm9uX2VvcF9kZXNjczsKIAogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwpAQCAtNDc4Miw3ICs1MDczLDcgQEAKIAlpZiAoaXhnYmVfcmVpbml0X2ZkaXJfdGFibGVzXzgyNTk5KGh3KSA9PSAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCiAJCQlzZXRfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCQkgICAgICAgICYoYWRhcHRlci0+dHhfcmluZ1tpXS5yZWluaXRfc3RhdGUpKTsKKwkJCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWluaXRfc3RhdGUpKTsKIAl9IGVsc2UgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKIAkJICAgICAgICAiaWdub3JlZCBhZGRpbmcgRkRJUiBBVFIgZmlsdGVycyBcbiIpOwpAQCAtNDc5MSw2ICs1MDgyLDggQEAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGFkYXB0ZXItPm5ldGRldik7CiB9CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaXhnYmVfd2F0Y2hkb2dfbG9jayk7CisKIC8qKgogICogaXhnYmVfd2F0Y2hkb2dfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gYnJpbmcgbGluayB1cAogICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQpAQCAtNDgwMiwxMyArNTA5NSwxNiBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZG9nX3Rhc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7Ci0JYm9vbCBsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKKwl1MzIgbGlua19zcGVlZDsKKwlib29sIGxpbmtfdXA7CiAJaW50IGk7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3Jpbmc7CiAJaW50IHNvbWVfdHhfcGVuZGluZyA9IDA7CiAKLQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisJbXV0ZXhfbG9jaygmaXhnYmVfd2F0Y2hkb2dfbG9jayk7CisKKwlsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKKwlsaW5rX3NwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSkgewogCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKQEAgLTQ4NzksNyArNTE3NSw3IEBACiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJCWlmICh0eF9yaW5nLT5uZXh0X3RvX3VzZSAhPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKSB7CiAJCQkJc29tZV90eF9wZW5kaW5nID0gMTsKIAkJCQlicmVhazsKQEAgLTQ4OTcsNyArNTE5Myw3IEBACiAJfQogCiAJaXhnYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwotCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisJbXV0ZXhfdW5sb2NrKCZpeGdiZV93YXRjaGRvZ19sb2NrKTsKIH0KIAogc3RhdGljIGludCBpeGdiZV90c28oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC01MzQzLDggKzU2MzksMTQgQEAKIAkJcmV0dXJuIHR4cTsKIAl9CiAjZW5kaWYKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQotCQlyZXR1cm4gKHNrYi0+dmxhbl90Y2kgJiBJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSykgPj4gMTM7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlpZiAoc2tiLT5wcmlvcml0eSA9PSBUQ19QUklPX0NPTlRST0wpCisJCQl0eHEgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcy0xOworCQllbHNlCisJCQl0eHEgPSAoc2tiLT52bGFuX3RjaSAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fUFJJT19NQVNLKQorCQkJICAgICAgID4+IDEzOworCQlyZXR1cm4gdHhxOworCX0KIAogCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7CiB9CkBAIC01MzcxLDE3ICs1NjczLDEyIEBACiAJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOwogCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19WTEFOOwogCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7Ci0JCWlmIChza2ItPnByaW9yaXR5ICE9IFRDX1BSSU9fQ09OVFJPTCkgewotCQkJdHhfZmxhZ3MgfD0gKChza2ItPnF1ZXVlX21hcHBpbmcgJiAweDcpIDw8IDEzKTsKLQkJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOwotCQkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVkxBTjsKLQkJfSBlbHNlIHsKLQkJCXNrYi0+cXVldWVfbWFwcGluZyA9Ci0JCQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMtMTsKLQkJfQorCQl0eF9mbGFncyB8PSAoKHNrYi0+cXVldWVfbWFwcGluZyAmIDB4NykgPDwgMTMpOworCQl0eF9mbGFncyA8PD0gSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVkxBTjsKIAl9CiAKLQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmdbc2tiLT5xdWV1ZV9tYXBwaW5nXTsKKwl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tza2ItPnF1ZXVlX21hcHBpbmddOwogCiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgogCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkpIHsKQEAgLTU0ODcsNyArNTc4NCw4IEBACiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShody0+bWFjLmFkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCAwLCBJWEdCRV9SQUhfQVYpOworCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgYWRhcHRlci0+bnVtX3ZmcywKKwkJCSAgICBJWEdCRV9SQUhfQVYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjI0LDYgKzU5MjIsNjEgQEAKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiB9OwogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaXhnYmVfcHJvYmVfdmYoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkpCit7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBlcnI7CisKKwlpZiAoaHctPm1hYy50eXBlICE9IGl4Z2JlX21hY184MjU5OUVCIHx8ICFtYXhfdmZzKQorCQlyZXR1cm47CisKKwkvKiBUaGUgODI1OTkgc3VwcG9ydHMgdXAgdG8gNjQgVkZzIHBlciBwaHlzaWNhbCBmdW5jdGlvbgorCSAqIGJ1dCB0aGlzIGltcGxlbWVudGF0aW9uIGxpbWl0cyBhbGxvY2F0aW9uIHRvIDYzIHNvIHRoYXQKKwkgKiBiYXNpYyBuZXR3b3JraW5nIHJlc291cmNlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIHRvIHRoZQorCSAqIHBoeXNpY2FsIGZ1bmN0aW9uCisJICovCisJYWRhcHRlci0+bnVtX3ZmcyA9IChtYXhfdmZzID4gNjMpID8gNjMgOiBtYXhfdmZzOworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKKwllcnIgPSBwY2lfZW5hYmxlX3NyaW92KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPm51bV92ZnMpOworCWlmIChlcnIpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJIkZhaWxlZCB0byBlbmFibGUgUENJIHNyaW92OiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfbm92ZnM7CisJfQorCS8qIElmIGNhbGwgdG8gZW5hYmxlIFZGcyBzdWNjZWVkZWQgdGhlbiBhbGxvY2F0ZSBtZW1vcnkKKwkgKiBmb3IgcGVyIFZGIGNvbnRyb2wgc3RydWN0dXJlcy4KKwkgKi8KKwlhZGFwdGVyLT52ZmluZm8gPQorCQlrY2FsbG9jKGFkYXB0ZXItPm51bV92ZnMsCisJCQlzaXplb2Yoc3RydWN0IHZmX2RhdGFfc3RvcmFnZSksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT52ZmluZm8pIHsKKwkJLyogTm93IHRoYXQgd2UncmUgc3VyZSBTUi1JT1YgaXMgZW5hYmxlZAorCQkgKiBhbmQgbWVtb3J5IGFsbG9jYXRlZCBzZXQgdXAgdGhlIG1haWxib3ggcGFyYW1ldGVycworCQkgKi8KKwkJaXhnYmVfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKKwkJbWVtY3B5KCZody0+bWJ4Lm9wcywgaWktPm1ieF9vcHMsCisJCSAgICAgICBzaXplb2YoaHctPm1ieC5vcHMpKTsKKworCQkvKiBEaXNhYmxlIFJTQyB3aGVuIGluIFNSLUlPViBtb2RlICovCisJCWFkYXB0ZXItPmZsYWdzMiAmPSB+KElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFIHwKKwkJCQkgICAgIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE9oIG9oICovCisJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgVkYgIgorCQkiRGF0YSBTdG9yYWdlIC0gU1JJT1YgZGlzYWJsZWRcbiIpOworCXBjaV9kaXNhYmxlX3NyaW92KGFkYXB0ZXItPnBkZXYpOworCitlcnJfbm92ZnM6CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKKwlhZGFwdGVyLT5udW1fdmZzID0gMDsKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworfQorCiAvKioKICAqIGl4Z2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdApAQCAtNTY0NCw2ICs1OTk3LDcgQEAKIAljb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkgPSBpeGdiZV9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CisJdW5zaWduZWQgaW50IGluZGljZXMgPSBudW1fcG9zc2libGVfY3B1cygpOwogI2lmZGVmIElYR0JFX0ZDT0UKIAl1MTYgZGV2aWNlX2NhcHM7CiAjZW5kaWYKQEAgLTU2ODIsNyArNjAzNiwxOCBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCi0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSwgTUFYX1RYX1FVRVVFUyk7CisJaWYgKGlpLT5tYWMgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWluZGljZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGluZGljZXMsIElYR0JFX01BWF9SU1NfSU5ESUNFUyk7CisJZWxzZQorCQlpbmRpY2VzID0gbWluX3QodW5zaWduZWQgaW50LCBpbmRpY2VzLCBJWEdCRV9NQVhfRkRJUl9JTkRJQ0VTKTsKKworCWluZGljZXMgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGluZGljZXMsIElYR0JFX01BWF9EQ0JfSU5ESUNFUyk7CisjaWZkZWYgSVhHQkVfRkNPRQorCWluZGljZXMgKz0gbWluX3QodW5zaWduZWQgaW50LCBudW1fcG9zc2libGVfY3B1cygpLAorCQkJIElYR0JFX01BWF9GQ09FX0lORElDRVMpOworI2VuZGlmCisJaW5kaWNlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgaW5kaWNlcywgTUFYX1RYX1FVRVVFUyk7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSwgaW5kaWNlcyk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NfZXRoZXJkZXY7CkBAIC01ODAyLDYgKzYxNjcsOCBAQAogCQlnb3RvIGVycl9zd19pbml0OwogCX0KIAorCWl4Z2JlX3Byb2JlX3ZmKGFkYXB0ZXIsIGlpKTsKKwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9IV19WTEFOX1RYIHwKQEAgLTU4MjIsNiArNjE4OSw5IEBACiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+KElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfAorCQkJCSAgICBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIApAQCAtNTk0OCw2ICs2MzE4LDEzIEBACiAJCWl4Z2JlX3NldHVwX2RjYShhZGFwdGVyKTsKIAl9CiAjZW5kaWYKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgSU5GTywgIklPViBpcyBlbmFibGVkIHdpdGggJWQgVkZzXG4iLAorCQkJYWRhcHRlci0+bnVtX3Zmcyk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdmZzOyBpKyspCisJCQlpeGdiZV92Zl9jb25maWd1cmF0aW9uKHBkZXYsIChpIHwgMHgxMDAwMDAwMCkpOworCX0KKwogCS8qIGFkZCBzYW4gbWFjIGFkZHIgdG8gbmV0ZGV2ICovCiAJaXhnYmVfYWRkX3Nhbm1hY19uZXRkZXYobmV0ZGV2KTsKIApAQCAtNTk2MCw2ICs2MzM3LDggQEAKIAlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6CiBlcnJfZWVwcm9tOgorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC02MDI4LDYgKzY0MDcsOSBAQAogCWlmIChuZXRkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKKwogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWY5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYwpAQCAtMCwwICsxLDQ3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgorI2luY2x1ZGUgIml4Z2JlX21ieC5oIgorCisvKioKKyAqICBpeGdiZV9yZWFkX21ieCAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gcmVhZAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzMzIgaXhnYmVfcmVhZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggKi8KKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJc2l6ZSA9IG1ieC0+c2l6ZTsKKworCWlmIChtYngtPm9wcy5yZWFkKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzMzIgaXhnYmVfd3JpdGVfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlyZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWVsc2UgaWYgKG1ieC0+b3BzLndyaXRlKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfbXNnIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGl4Z2JlX2NoZWNrX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfYWNrIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3QgLSBjaGVja3MgdG8gc2VlIGlmIG90aGVyIHNpZGUgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZV9wb2xsX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIWNvdW50ZG93biB8fCAhbWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCkpIHsKKwkJY291bnRkb3duLS07CisJCWlmICghY291bnRkb3duKQorCQkJYnJlYWs7CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogSVhHQkVfRVJSX01CWDsKK30KKworLyoqCisgKiAgaXhnYmVfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghY291bnRkb3duIHx8ICFtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChjb3VudGRvd24gJiYgbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKSkgeworCQljb3VudGRvd24tLTsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorCisJLyogaWYgd2UgZmFpbGVkLCBhbGwgZnV0dXJlIHBvc3RlZCBtZXNzYWdlcyBmYWlsIHVudGlsIHJlc2V0ICovCisJaWYgKCFjb3VudGRvd24pCisJCW1ieC0+dGltZW91dCA9IDA7CitvdXQ6CisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogIGNvcGllZCBpdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFtYngtPm9wcy5yZWFkKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwkvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAqICByZWNlaXZlZCBhbiBhY2sgdG8gdGhhdCBtZXNzYWdlIHdpdGhpbiBkZWxheSAqIHRpbWVvdXQgcGVyaW9kCisgKiovCitzMzIgaXhnYmVfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogZXhpdCBpZiBlaXRoZXIgd2UgY2FuJ3Qgd3JpdGUgb3IgdGhlcmUgaXNuJ3QgYSBkZWZpbmVkIHRpbWVvdXQgKi8KKwlpZiAoIW1ieC0+b3BzLndyaXRlIHx8ICFtYngtPnRpbWVvdXQpCisJCWdvdG8gb3V0OworCisJLyogc2VuZCBtc2cgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCS8qIGlmIG1zZyBzZW50IHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhbiBhY2sgKi8KKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9hY2soaHcsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljIC0gSW5pdGlhbGl6ZSBNQiBmdW5jdGlvbiBwb2ludGVycworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNldHVwIHRoZSBtYWlsYm94IHJlYWQgYW5kIHdyaXRlIG1lc3NhZ2UgZnVuY3Rpb24gcG9pbnRlcnMKKyAqKi8KK3ZvaWQgaXhnYmVfaW5pdF9tYnhfb3BzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYng7CisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaXhnYmVfd3JpdGVfcG9zdGVkX21ieDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfYml0X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBtYXNrLCBzMzIgaW5kZXgpCit7CisJdTMyIG1idmZpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUJWRklDUihpbmRleCkpOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYnZmaWNyICYgbWFzaykgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NQlZGSUNSKGluZGV4KSwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9tc2dfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfbXNnX3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCXMzMiBpbmRleCA9IElYR0JFX01CVkZJQ1JfSU5ERVgodmZfbnVtYmVyKTsKKwl1MzIgdmZfYml0ID0gdmZfbnVtYmVyICUgMTY7CisKKwlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxIDw8IHZmX2JpdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJlcXMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfY2hlY2tfZm9yX2Fja19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBBQ0tlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2hlY2tfZm9yX2Fja19wZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKwlzMzIgaW5kZXggPSBJWEdCRV9NQlZGSUNSX0lOREVYKHZmX251bWJlcik7CisJdTMyIHZmX2JpdCA9IHZmX251bWJlciAlIDE2OworCisJaWYgKCFpeGdiZV9jaGVja19mb3JfYml0X3BmKGh3LCBJWEdCRV9NQlZGSUNSX1ZGQUNLX1ZGMSA8PCB2Zl9iaXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcmVnX29mZnNldCA9ICh2Zl9udW1iZXIgPCAzMikgPyAwIDogMTsKKwl1MzIgdmZfc2hpZnQgPSB2Zl9udW1iZXIgJSAzMjsKKwl1MzIgdmZscmUgPSAwOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXZmbHJlID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTFJFKHJlZ19vZmZzZXQpKTsKKworCWlmICh2ZmxyZSAmICgxIDw8IHZmX3NoaWZ0KSkgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkxSRUMocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCWh3LT5tYnguc3RhdHMucnN0cysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYgLSBvYnRhaW4gbWFpbGJveCBsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJuIFNVQ0NFU1MgaWYgd2Ugb2J0YWluZWQgdGhlIG1haWxib3ggbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisJdTMyIHAydl9tYWlsYm94OworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9QRlUpOworCisJLyogcmVzZXJ2ZSBtYWlsYm94IGZvciB2ZiB1c2UgKi8KKwlwMnZfbWFpbGJveCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKHAydl9tYWlsYm94ICYgSVhHQkVfUEZNQUlMQk9YX1BGVSkKKwkJcmV0X3ZhbCA9IDA7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfbWJ4X3BmIC0gUGxhY2VzIGEgbWVzc2FnZSBpbiB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfd3JpdGVfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWw7CisJdTE2IGk7CisKKwkvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi8KKwlyZXRfdmFsID0gaXhnYmVfb2J0YWluX21ieF9sb2NrX3BmKGh3LCB2Zl9udW1iZXIpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dF9ub193cml0ZTsKKworCS8qIGZsdXNoIG1zZyBhbmQgYWNrcyBhcyB3ZSBhcmUgb3ZlcndyaXRpbmcgdGhlIG1lc3NhZ2UgYnVmZmVyICovCisJaXhnYmVfY2hlY2tfZm9yX21zZ19wZihodywgdmZfbnVtYmVyKTsKKwlpeGdiZV9jaGVja19mb3JfYWNrX3BmKGh3LCB2Zl9udW1iZXIpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUdfQVJSQVkoaHcsIElYR0JFX1BGTUJNRU0odmZfbnVtYmVyKSwgaSwgbXNnW2ldKTsKKworCS8qIEludGVycnVwdCBWRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGFuZCByZWxlYXNlIGJ1ZmZlciovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSwgSVhHQkVfUEZNQUlMQk9YX1NUUyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfdHgrKzsKKworb3V0X25vX3dyaXRlOgorCXJldHVybiByZXRfdmFsOworCit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfbWJ4X3BmIC0gUmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggYnVmZmVyIHRvIHRoZSBjYWxsZXIncworICogIG1lbW9yeSBidWZmZXIuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlcmUgd2FzCisgKiAgYSBtZXNzYWdlIGR1ZSB0byBhIFZGIHJlcXVlc3Qgc28gbm8gcG9sbGluZyBmb3IgbWVzc2FnZSBpcyBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgaTsKKworCS8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqLworCXJldF92YWwgPSBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoaHcsIHZmX251bWJlcik7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0X25vX3JlYWQ7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltc2dbaV0gPSBJWEdCRV9SRUFEX1JFR19BUlJBWShodywgSVhHQkVfUEZNQk1FTSh2Zl9udW1iZXIpLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlIGFuZCByZWxlYXNlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYgLSBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBJbml0aWFsaXplcyB0aGUgaHctPm1ieCBzdHJ1Y3QgdG8gY29ycmVjdCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqLwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0dXJuOworCisJbWJ4LT50aW1lb3V0ID0gMDsKKwltYngtPnVzZWNfZGVsYXkgPSAwOworCisJbWJ4LT5zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisKKwltYngtPnN0YXRzLm1zZ3NfdHggPSAwOworCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwltYngtPnN0YXRzLmFja3MgPSAwOworCW1ieC0+c3RhdHMucnN0cyA9IDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBtYnhfb3BzXzgyNTk5ID0geworCS5yZWFkICAgICAgICAgICAgICAgICAgID0gaXhnYmVfcmVhZF9tYnhfcGYsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSBpeGdiZV93cml0ZV9tYnhfcGYsCisJLnJlYWRfcG9zdGVkICAgICAgICAgICAgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYngsCisJLndyaXRlX3Bvc3RlZCAgICAgICAgICAgPSBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4LAorCS5jaGVja19mb3JfbXNnICAgICAgICAgID0gaXhnYmVfY2hlY2tfZm9yX21zZ19wZiwKKwkuY2hlY2tfZm9yX2FjayAgICAgICAgICA9IGl4Z2JlX2NoZWNrX2Zvcl9hY2tfcGYsCisJLmNoZWNrX2Zvcl9yc3QgICAgICAgICAgPSBpeGdiZV9jaGVja19mb3JfcnN0X3BmLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdhYjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVhHQkVfTUJYX0hfCisjZGVmaW5lIF9JWEdCRV9NQlhfSF8KKworI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfU0laRSAgICAgICAgMTYgLyogMTYgMzIgYml0IHdvcmRzIC0gNjQgYnl0ZXMgKi8KKyNkZWZpbmUgSVhHQkVfRVJSX01CWCAgICAgICAgICAgICAgIC0xMDAKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1ggICAgICAgICAgICAgMHgwMDJGQworI2RlZmluZSBJWEdCRV9WRk1CTUVNICAgICAgICAgICAgICAgMHgwMDIwMAorCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWCh4KSAgICAgICAgICAoMHgwNEIwMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1BGTUJNRU0odmZuKSAgICAgICAgICAoMHgxMzAwMCArICg2NCAqIHZmbikpCisKKyNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDBGRkZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfTUFTSyAweEZGRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgSVhHQkVfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisKKy8qIElmIGl0J3MgYSBJWEdCRV9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIElYR0JFX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBBQ0sgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHVFlQRV9OQUNLICAgICAweDQwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgdG8gc2VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dJTkZPX1NISUZUICAgIDE2CisvKiBiaXRzIDIzOjE2IGFyZSB1c2VkIGZvciBleHJhIGluZm8gZm9yIGNlcnRhaW4gbWVzc2FnZXMgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHSU5GT19NQVNLICAgICAoMHhGRiA8PCBJWEdCRV9WVF9NU0dJTkZPX1NISUZUKQorCisjZGVmaW5lIElYR0JFX1ZGX1JFU0VUICAgICAgICAgICAgMHgwMSAvKiBWRiByZXF1ZXN0cyByZXNldCAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTUFDX0FERFIgICAgIDB4MDIgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1BQyBhZGRyICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKworLyogbGVuZ3RoIG9mIHBlcm1hbmVudCBhZGRyZXNzIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBQRiAqLworI2RlZmluZSBJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOIDQKKy8qIHdvcmQgaW4gcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSB3aXRoIHRoZSBjdXJyZW50IG11bHRpY2FzdCB0eXBlICovCisjZGVmaW5lIElYR0JFX1ZGX01DX1RZUEVfV09SRCAgICAgMworCisjZGVmaW5lIElYR0JFX1BGX0NPTlRST0xfTVNHICAgICAgMHgwMTAwIC8qIFBGIGNvbnRyb2wgbWVzc2FnZSAqLworCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX1RJTUVPVVQgMjAwMCAvKiBudW1iZXIgb2YgcmV0cmllcyBvbiBtYWlsYm94ICovCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX0RFTEFZICAgNTAwICAvKiBtaWNyb3NlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCisKK3MzMiBpeGdiZV9yZWFkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpeGdiZV93cml0ZV9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGl4Z2JlX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2KTsKK3MzMiBpeGdiZV9jaGVja19mb3JfYWNrKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7Cit2b2lkIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICopOworCitleHRlcm4gc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIG1ieF9vcHNfODI1OTk7CisKKyNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGNkMjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIml4Z2JlLmgiCisKKyNpbmNsdWRlICJpeGdiZV9zcmlvdi5oIgorCitpbnQgaXhnYmVfc2V0X3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgaW50IGVudHJpZXMsIHUxNiAqaGFzaF9saXN0LCB1MzIgdmYpCit7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvID0gJmFkYXB0ZXItPnZmaW5mb1t2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHNvIG1hbnkgaGFzaCB2YWx1ZXMgc3VwcG9ydGVkICovCisJZW50cmllcyA9IG1pbihlbnRyaWVzLCBJWEdCRV9NQVhfVkZfTUNfRU5UUklFUyk7CisKKwkvKgorCSAqIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmaW5mby0+bnVtX3ZmX21jX2hhc2hlcyA9IGVudHJpZXM7CisKKwkvKgorCSAqIFZGcyBhcmUgbGltaXRlZCB0byB1c2luZyB0aGUgTVRBIGhhc2ggdGFibGUgZm9yIHRoZWlyIG11bHRpY2FzdAorCSAqIGFkZHJlc3NlcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJdmZpbmZvLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OworCX0KKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvOworCWludCBpLCBqOworCXUzMiB2ZWN0b3JfYml0OworCXUzMiB2ZWN0b3JfcmVnOworCXUzMiBtdGFfcmVnOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV92ZnM7IGkrKykgeworCQl2ZmluZm8gPSAmYWRhcHRlci0+dmZpbmZvW2ldOworCQlmb3IgKGogPSAwOyBqIDwgdmZpbmZvLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspIHsKKwkJCWh3LT5hZGRyX2N0cmwubXRhX2luX3VzZSsrOworCQkJdmVjdG9yX3JlZyA9ICh2ZmluZm8tPnZmX21jX2hhc2hlc1tqXSA+PiA1KSAmIDB4N0Y7CisJCQl2ZWN0b3JfYml0ID0gdmZpbmZvLT52Zl9tY19oYXNoZXNbal0gJiAweDFGOworCQkJbXRhX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NVEEodmVjdG9yX3JlZykpOworCQkJbXRhX3JlZyB8PSAoMSA8PCB2ZWN0b3JfYml0KTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRBKHZlY3Rvcl9yZWcpLCBtdGFfcmVnKTsKKwkJfQorCX0KK30KKworaW50IGl4Z2JlX3NldF92Zl92bGFuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkLCBpbnQgdmlkLCB1MzIgdmYpCit7CisJdTMyIGN0cmw7CisKKwkvKiBDaGVjayBpZiBnbG9iYWwgVkxBTiBhbHJlYWR5IHNldCwgaWYgbm90IHNldCBpdCAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCWlmICghKGN0cmwgJiBJWEdCRV9WTE5DVFJMX1ZGRSkpIHsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwl9CisKKwlyZXR1cm4gYWRhcHRlci0+aHcubWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgdmYsIChib29sKWFkZCk7Cit9CisKKwordm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmKQoreworCXUzMiB2bW9sciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUih2ZikpOworCXZtb2xyIHw9IChJWEdCRV9WTU9MUl9BVVBFIHwKKwkJICBJWEdCRV9WTU9MUl9ST01QRSB8CisJCSAgSVhHQkVfVk1PTFJfUk9QRSB8CisJCSAgSVhHQkVfVk1PTFJfQkFNKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZNT0xSKHZmKSwgdm1vbHIpOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkvKiByZXNldCBvZmZsb2FkcyB0byBkZWZhdWx0cyAqLworCWl4Z2JlX3NldF92bW9scihodywgdmYpOworCisKKwkvKiByZXNldCBtdWx0aWNhc3QgdGFibGUgYXJyYXkgZm9yIHZmICovCisJYWRhcHRlci0+dmZpbmZvW3ZmXS5udW1fdmZfbWNfaGFzaGVzID0gMDsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyID4gMCkgeworCQlhZGFwdGVyLT5ody5tYWMub3BzLmNsZWFyX3JhcigmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPSAtMTsKKwl9Cit9CisKK2ludCBpeGdiZV9zZXRfdmZfbWFjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA9IGh3LT5tYWMub3BzLnNldF9yYXIoaHcsIHZmICsgMSwgbWFjX2FkZHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZmLCBJWEdCRV9SQUhfQVYpOworCWlmIChhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA8IDApIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIkNvdWxkIG5vdCBzZXQgTUFDIEZpbHRlciBmb3IgVkYgJWRcbiIsIHZmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweShhZGFwdGVyLT52ZmluZm9bdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCA2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spCit7CisJdW5zaWduZWQgY2hhciB2Zl9tYWNfYWRkcls2XTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmZuID0gKGV2ZW50X21hc2sgJiAweDNmKTsKKworCWJvb2wgZW5hYmxlID0gKChldmVudF9tYXNrICYgMHgxMDAwMDAwMFUpICE9IDApOworCisJaWYgKGVuYWJsZSkgeworCQlyYW5kb21fZXRoZXJfYWRkcih2Zl9tYWNfYWRkcik7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJJT1Y6IFZGICVkIGlzIGVuYWJsZWQgIgorCQkgICAgICAgIm1hYyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJICAgICAgIHZmbiwKKwkJICAgICAgIHZmX21hY19hZGRyWzBdLCB2Zl9tYWNfYWRkclsxXSwgdmZfbWFjX2FkZHJbMl0sCisJCSAgICAgICB2Zl9tYWNfYWRkclszXSwgdmZfbWFjX2FkZHJbNF0sIHZmX21hY19hZGRyWzVdKTsKKwkJLyoKKwkJICogU3RvcmUgYXdheSB0aGUgVkYgInBlcm1hbmFuZXQiIE1BQyBhZGRyZXNzLCBpdCB3aWxsIGFzaworCQkgKiBmb3IgaXQgbGF0ZXIuCisJCSAqLworCQltZW1jcHkoYWRhcHRlci0+dmZpbmZvW3Zmbl0udmZfbWFjX2FkZHJlc3NlcywgdmZfbWFjX2FkZHIsIDYpOworCX0KKworCXJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9tc2coc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByZWc7CisJdTMyIHJlZ19vZmZzZXQsIHZmX3NoaWZ0OworCisJdmZfc2hpZnQgPSB2ZiAlIDMyOworCXJlZ19vZmZzZXQgPSB2ZiAvIDMyOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpKTsKKwlyZWcgfD0gKHJlZyB8ICgxIDw8IHZmX3NoaWZ0KSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpLCByZWcpOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCkpOworCXJlZyB8PSAocmVnIHwgKDEgPDwgdmZfc2hpZnQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCksIHJlZyk7CisKKwlpeGdiZV92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmVfcmN2X21zZ19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCWludCBlbnRyaWVzOworCXUxNiAqaGFzaF9saXN0OworCWludCBhZGQsIHZpZDsKKworCXJldHZhbCA9IGl4Z2JlX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKElYR0JFX1ZUX01TR1RZUEVfQUNLIHwgSVhHQkVfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHZpcnR1YWwgZnVuY3Rpb24gcmVzZXQgaXQgc2hvdWxkIG5vdCBiZQorCSAqIGFsbG93ZWQgdG8gc3RhcnQgYW55IGNvbmZpZ3VyYXRpb24uCisJICovCisKKwlpZiAobXNnYnVmWzBdID09IElYR0JFX1ZGX1JFU0VUKSB7CisJCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmaW5mb1t2Zl0udmZfbWFjX2FkZHJlc3NlczsKKwkJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJWRiBSZXNldCBtc2cgcmVjZWl2ZWQgZnJvbSB2ZiAlZFxuIiwgdmYpOworCQlhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQgPSBmYWxzZTsKKwkJaXhnYmVfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCQkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KKwkJbXNnYnVmWzBdID0gSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSzsKKwkJbWVtY3B5KGFkZHIsIHZmX21hYywgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJLyoKKwkJICogUGlnZ3liYWNrIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHR5cGUgc28gVkYgY2FuIGNvbXB1dGUgdGhlCisJCSAqIGNvcnJlY3QgdmVjdG9ycworCQkgKi8KKwkJbXNnYnVmWzNdID0gaHctPm1hYy5tY19maWx0ZXJfdHlwZTsKKwkJaXhnYmVfd3JpdGVfbWJ4KGh3LCBtc2didWYsIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4sIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kKSB7CisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJCWl4Z2JlX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJc3dpdGNoICgobXNnYnVmWzBdICYgMHhGRkZGKSkgeworCWNhc2UgSVhHQkVfVkZfU0VUX01BQ19BRERSOgorCQl7CisJCQl1OCAqbmV3X21hYyA9ICgodTggKikoJm1zZ2J1ZlsxXSkpOworCQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobmV3X21hYykpCisJCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgbmV3X21hYyk7CisJCQllbHNlCisJCQkJcmV0dmFsID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUOgorCQllbnRyaWVzID0gKG1zZ2J1ZlswXSAmIElYR0JFX1ZUX01TR0lORk9fTUFTSykKKwkJICAgICAgICAgID4+IElYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CisJCWhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCQlyZXR2YWwgPSBpeGdiZV9zZXRfdmZfbXVsdGljYXN0cyhhZGFwdGVyLCBlbnRyaWVzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xpc3QsIHZmKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTFBFOgorCQlXQVJOX09OKChtc2didWZbMF0gJiAweEZGRkYpID09IElYR0JFX1ZGX1NFVF9MUEUpOworCQlicmVhazsKKwljYXNlIElYR0JFX1ZGX1NFVF9WTEFOOgorCQlhZGQgPSAobXNnYnVmWzBdICYgSVhHQkVfVlRfTVNHSU5GT19NQVNLKQorCQkgICAgICA+PiBJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCQl2aWQgPSAobXNnYnVmWzFdICYgSVhHQkVfVkxWRl9WTEFOSURfTUFTSyk7CisJCXJldHZhbCA9IGl4Z2JlX3NldF92Zl92bGFuKGFkYXB0ZXIsIGFkZCwgdmlkLCB2Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEsoRFJWLCBFUlIsICJVbmhhbmRsZWQgTXNnICU4Ljh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSBJWEdCRV9FUlJfTUJYOworCQlicmVhazsKKwl9CisKKwkvKiBub3RpZnkgdGhlIFZGIG9mIHRoZSByZXN1bHRzIG9mIHdoYXQgaXQgc2VudCB1cyAqLworCWlmIChyZXR2YWwpCisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJZWxzZQorCQltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9BQ0s7CisKKwltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9DVFM7CisKKwlpeGdiZV93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMSwgdmYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgaXhnYmVfcmN2X2Fja19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gSVhHQkVfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQpCisJCWl4Z2JlX3dyaXRlX21ieChodywgJm1zZywgMSwgdmYpOworfQorCit2b2lkIGl4Z2JlX21zZ190YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZmOworCisJZm9yICh2ZiA9IDA7IHZmIDwgYWRhcHRlci0+bnVtX3ZmczsgdmYrKykgeworCQkvKiBwcm9jZXNzIGFueSByZXNldCByZXF1ZXN0cyAqLworCQlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9yc3QoaHcsIHZmKSkKKwkJCWl4Z2JlX3ZmX3Jlc2V0X2V2ZW50KGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBtZXNzYWdlcyBwZW5kaW5nICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX21zZyhodywgdmYpKQorCQkJaXhnYmVfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX2FjayhodywgdmYpKQorCQkJaXhnYmVfcmN2X2Fja19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKwl9Cit9CisKK3ZvaWQgaXhnYmVfZGlzYWJsZV90eF9yeChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBmb3IgYWxsIHZmcyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZURSgwKSwgMCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDEpLCAwKTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRSgwKSwgMCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDEpLCAwKTsKK30KKwordm9pZCBpeGdiZV9waW5nX2FsbF92ZnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcGluZzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+bnVtX3ZmczsgaSsrKSB7CisJCXBpbmcgPSBJWEdCRV9QRl9DT05UUk9MX01TRzsKKwkJaWYgKGFkYXB0ZXItPnZmaW5mb1tpXS5jbGVhcl90b19zZW5kKQorCQkJcGluZyB8PSBJWEdCRV9WVF9NU0dUWVBFX0NUUzsKKwkJaXhnYmVfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQxMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuaApAQCAtMCwwICsxLDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRV9TUklPVl9IXworI2RlZmluZSBfSVhHQkVfU1JJT1ZfSF8KKworaW50IGl4Z2JlX3NldF92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyaWVzLCB1MTYgKmhhc2hfbGlzdCwgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdiZV9zZXRfdmZfdmxhbihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZCwgaW50IHZpZCwgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfc2V0X3Ztb2xyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2Zik7Cit2b2lkIGl4Z2JlX3ZmX3Jlc2V0X2V2ZW50KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpOwordm9pZCBpeGdiZV92Zl9yZXNldF9tc2coc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2Zik7Cit2b2lkIGl4Z2JlX21zZ190YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdiZV9zZXRfdmZfbWFjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CitpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spOwordm9pZCBpeGdiZV9kaXNhYmxlX3R4X3J4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgaXhnYmVfcGluZ19hbGxfdmZzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgaXhnYmVfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX0lYR0JFX1NSSU9WX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCA5ZWFmZGRmLi4yYmU5MDc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tZGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAvKiBWZW5kb3IgSUQgKi8KICNkZWZpbmUgSVhHQkVfSU5URUxfVkVORE9SX0lEICAgMHg4MDg2CkBAIC0yNzcsNiArMjc3LDcgQEAKICNkZWZpbmUgSVhHQkVfRFRYQ1RMICAgIDB4MDdFMDAKIAogI2RlZmluZSBJWEdCRV9ETUFUWENUTCAgMHgwNEE4MAorI2RlZmluZSBJWEdCRV9QRkRUWEdTV0MgICAgIDB4MDgyMjAKICNkZWZpbmUgSVhHQkVfRFRYTVhTWlJRICAgICAweDA4MTAwCiAjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0wgICAgMHgwNEE4OAogI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdIICAgIDB4MDRBOEMKQEAgLTI4Nyw2ICsyODgsOCBAQAogI2RlZmluZSBJWEdCRV9ETUFUWENUTF9OUyAgICAgICAweDIgLyogTm8gU25vb3AgTFNPIGhkciBidWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfRE1BVFhDVExfR0RWICAgICAgMHg4IC8qIEdsb2JhbCBEb3VibGUgVkxBTiAqLwogI2RlZmluZSBJWEdCRV9ETUFUWENUTF9WVF9TSElGVCAxNiAgLyogVkxBTiBFdGhlclR5cGUgKi8KKworI2RlZmluZSBJWEdCRV9QRkRUWEdTV0NfVlRfTEJFTiAweDEgLyogTG9jYWwgTDIgVlQgc3dpdGNoIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMKF9pKSAgICAoMHgwNzIwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICgwLTE1KSAqLwogLyogVHggRENBIENvbnRyb2wgcmVnaXN0ZXIgOiAxMjggb2YgdGhlc2UgKDAtMTI3KSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KF9pKSAgKDB4MDYwMEMgKyAoKF9pKSAqIDB4NDApKQpAQCAtNDk3LDYgKzUwMCw3IEBACiAvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKICNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMAorI2RlZmluZSBJWEdCRV9SVFREQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIERDQiBhcmJpdGVyIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfUlRUUENTICAgICAgMHgwQ0QwMAogI2RlZmluZSBJWEdCRV9SVFJVUDJUQyAgICAweDAzMDIwCiAjZGVmaW5lIElYR0JFX1JUVFVQMlRDICAgIDB4MEM4MDAKQEAgLTczMCw2ICs3MzQsMTMgQEAKICNkZWZpbmUgSVhHQkVfR0NSX0NNUExfVE1PVVRfUkVTRU5EICAgICAweDAwMDEwMDAwCiAjZGVmaW5lIElYR0JFX0dDUl9DQVBfVkVSMiAgICAgICAgICAgICAgMHgwMDA0MDAwMAogCisjZGVmaW5lIElYR0JFX0dDUl9FWFRfTVNJWF9FTiAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJWEdCRV9HQ1JfRVhUX1ZUX01PREVfMTYgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfR0NSX0VYVF9WVF9NT0RFXzMyICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIElYR0JFX0dDUl9FWFRfVlRfTU9ERV82NCAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9HQ1JfRVhUX1NSSU9WICAgICAgICAgICAgIChJWEdCRV9HQ1JfRVhUX01TSVhfRU4gfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0dDUl9FWFRfVlRfTU9ERV82NCkKKwogLyogVGltZSBTeW5jIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9UU1lOQ1JYQ1RMIDB4MDUxODggLyogUnggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLwogI2RlZmluZSBJWEdCRV9UU1lOQ1RYQ1RMIDB4MDhDMDAgLyogVHggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLwpAQCAtMTA2NSw2ICsxMDc2LDggQEAKIC8qIFZGUkUgYml0bWFzayAqLwogI2RlZmluZSBJWEdCRV9WRlJFX0VOQUJMRV9BTEwgICAweEZGRkZGRkZGCiAKKyNkZWZpbmUgSVhHQkVfVkZfSU5JVF9USU1FT1VUICAgMjAwIC8qIE51bWJlciBvZiByZXRyaWVzIHRvIGNsZWFyIFJTVEkgKi8KKwogLyogUkRITVBOIGFuZCBUREhNUE4gYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNBRERSICAgICAgIDB4MDA3RkY4MDAKICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNSRFJFUSAgICAgIDB4MDA4MDAwMDAKQEAgLTEyOTUsNiArMTMwOCw3IEBACiAvKiBWTEFOIHBvb2wgZmlsdGVyaW5nIG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMVkZfVklFTiAgICAgICAgIDB4ODAwMDAwMDAgIC8qIGZpbHRlciBpcyB2YWxpZCAqLwogI2RlZmluZSBJWEdCRV9WTFZGX0VOVFJJRVMgICAgICA2NAorI2RlZmluZSBJWEdCRV9WTFZGX1ZMQU5JRF9NQVNLICAweDAwMDAwRkZGCiAKICNkZWZpbmUgSVhHQkVfRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuMXEgcHJvdG9jb2wgKi8KIApAQCAtMTg0Myw2ICsxODU3LDEyIEBACiAjZGVmaW5lIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIDB4MDAwRCAvKiBQcmlvcml0eSBpbiB1cHBlciAzIG9mIDE2ICovCiAjZGVmaW5lIElYR0JFX1RYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQKIAorLyogU1ItSU9WIHNwZWNpZmljIG1hY3JvcyAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX0lOREVYKHZmX251bWJlcikgICAodmZfbnVtYmVyID4+IDQpCisjZGVmaW5lIElYR0JFX01CVkZJQ1IoX2kpICAgICAgICAgICAgICAgICgweDAwNzEwICsgKF9pICogNCkpCisjZGVmaW5lIElYR0JFX1ZGTFJFKF9pKSAgICAgICAgICAgICAgICAgICgoKF9pICYgMSkgPyAweDAwMUMwIDogMHgwMDYwMCkpCisjZGVmaW5lIElYR0JFX1ZGTFJFQyhfaSkgICAgICAgICAgICAgICAgICgweDAwNzAwICsgKF9pICogNCkpCisKIC8qIExpdHRsZSBFbmRpYW4gZGVmaW5lcyAqLwogI2lmbmRlZiBfX2xlMzIKICNkZWZpbmUgX19sZTMyICB1MzIKQEAgLTIxMDksNiArMjEyOSwxNSBAQAogCXU4IGJ5dGVfc3RyZWFtWzQyXTsKIH07CiAKK3N0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgeworCXUzMiBzcmNfaXBfbWFzazsKKwl1MzIgZHN0X2lwX21hc2s7CisJdTE2IHNyY19wb3J0X21hc2s7CisJdTE2IGRzdF9wb3J0X21hc2s7CisJdTE2IHZsYW5faWRfbWFzazsKKwl1MTYgZGF0YV9tYXNrOworfTsKKwogZW51bSBpeGdiZV9lZXByb21fdHlwZSB7CiAJaXhnYmVfZWVwcm9tX3VuaW5pdGlhbGl6ZWQgPSAwLAogCWl4Z2JlX2VlcHJvbV9zcGksCkBAIC0yMzg1LDcgKzI0MTQsNyBAQAogCXMzMiAoKnNldF92bWRxKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1MzIpOwogCXMzMiAoKmNsZWFyX3ZtZHEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIsIHUzMik7CiAJczMyICgqaW5pdF9yeF9hZGRycykoc3RydWN0IGl4Z2JlX2h3ICopOwotCXMzMiAoKnVwZGF0ZV91Y19hZGRyX2xpc3QpKHN0cnVjdCBpeGdiZV9odyAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOworCXMzMiAoKnVwZGF0ZV91Y19hZGRyX2xpc3QpKHN0cnVjdCBpeGdiZV9odyAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAlzMzIgKCp1cGRhdGVfbWNfYWRkcl9saXN0KShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKiwgdTMyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX21jX2FkZHJfaXRyKTsKIAlzMzIgKCplbmFibGVfbWMpKHN0cnVjdCBpeGdiZV9odyAqKTsKQEAgLTI0NjMsNiArMjQ5MiwzNyBAQAogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcjsKIH07CiAKKyNpbmNsdWRlICJpeGdiZV9tYnguaCIKKworc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisJczMyICgqcmVhZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpyZWFkX3Bvc3RlZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlX3Bvc3RlZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX2Fjaykoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX3JzdCkoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7Cit9OworCitzdHJ1Y3QgaXhnYmVfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9pbmZvIHsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVzZWNfZGVsYXk7CisJdTMyIHYycF9tYWlsYm94OworCXUxNiBzaXplOworfTsKKwogc3RydWN0IGl4Z2JlX2h3IHsKIAl1OCBfX2lvbWVtCQkJKmh3X2FkZHI7CiAJdm9pZAkJCQkqYmFjazsKQEAgLTI0NzIsNiArMjUzMiw3IEBACiAJc3RydWN0IGl4Z2JlX3BoeV9pbmZvCQlwaHk7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvCWVlcHJvbTsKIAlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8JCWJ1czsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8JCW1ieDsKIAl1MTYJCQkJZGV2aWNlX2lkOwogCXUxNgkJCQl2ZW5kb3JfaWQ7CiAJdTE2CQkJCXN1YnN5c3RlbV9kZXZpY2VfaWQ7CkBAIC0yNDg2LDYgKzI1NDcsNyBAQAogCXN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucwkqbWFjX29wczsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMJKmVlcHJvbV9vcHM7CiAJc3RydWN0IGl4Z2JlX3BoeV9vcGVyYXRpb25zCSpwaHlfb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucwkqbWJ4X29wczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ZTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyMgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyMKKyMgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyMgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisjIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBJbnRlbChSKSA4MjU5OSBWRiBldGhlcm5ldCBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYubworCitpeGdiZXZmLW9ianMgOj0gdmYubyBcCisgICAgICAgICAgICAgICAgbWJ4Lm8gXAorICAgICAgICAgICAgICAgIGV0aHRvb2wubyBcCisgICAgICAgICAgICAgICAgaXhnYmV2Zl9tYWluLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRmZGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFVkZfREVGSU5FU19IXworI2RlZmluZSBfSVhHQkVWRl9ERUZJTkVTX0hfCisKKy8qIERldmljZSBJRHMgKi8KKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1ZGICAgICAgICAgICAweDEwRUQKKworI2RlZmluZSBJWEdCRV9WRl9JUlFfQ0xFQVJfTUFTSyAgICAgICAgIDcKKyNkZWZpbmUgSVhHQkVfVkZfTUFYX1RYX1FVRVVFUyAgICAgICAgICAxCisjZGVmaW5lIElYR0JFX1ZGX01BWF9SWF9RVUVVRVMgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1MgICAgIDYKKworLyogTGluayBzcGVlZCAqLwordHlwZWRlZiB1MzIgaXhnYmVfbGlua19zcGVlZDsKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCAgICAgICAweDAwMjAKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgICAgICAweDAwODAKKworI2RlZmluZSBJWEdCRV9DVFJMX1JTVCAgICAgICAgICAweDA0MDAwMDAwIC8qIFJlc2V0IChTVykgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfVFhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgVHggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfTElOS1NfVVAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRCAgICAgICAweDIwMDAwMDAwCisKKy8qIE51bWJlciBvZiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBEZXNjcmlwdG9ycyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCAqLworI2RlZmluZSBJWEdCRV9SRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSAgOAorI2RlZmluZSBJWEdCRV9SRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSAgOAorI2RlZmluZSBJWEdCRV9SRVFfVFhfQlVGRkVSX0dSQU5VTEFSSVRZICAgMTAyNAorCisvKiBJbnRlcnJ1cHQgVmVjdG9yIEFsbG9jYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0lWQVJfQUxMT0NfVkFMICAgIDB4ODAgLyogSW50ZXJydXB0IEFsbG9jYXRpb24gdmFsaWQgKi8KKworI2RlZmluZSBJWEdCRV9WRl9JTklUX1RJTUVPVVQgICAyMDAgLyogTnVtYmVyIG9mIHJldHJpZXMgdG8gY2xlYXIgUlNUSSAqLworCisvKiBSZWNlaXZlIENvbmZpZyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9SWENUUkxfUlhFTiAgICAgICAweDAwMDAwMDAxICAvKiBFbmFibGUgUmVjZWl2ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlhDVFJMX0RNQllQUyAgICAgMHgwMDAwMDAwMiAgLyogRGVzY3JpcHRvciBNb25pdG9yIEJ5cGFzcyAqLworI2RlZmluZSBJWEdCRV9SWERDVExfRU5BQkxFICAgICAweDAyMDAwMDAwICAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX1ZNRSAgICAgICAgMHg0MDAwMDAwMCAgLyogVkxBTiBtb2RlIGVuYWJsZSAqLworCisvKiBEQ0EgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOICgxIDw8IDExKSAvKiBUeCBEZXNjIHdyaXRlYmFjayBSTyBiaXQgKi8KKworLyogUFNSVFlQRSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9UQ1BIRFIgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX1VEUEhEUiAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNEhEUiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY2SERSICAgMHgwMDAwMDIwMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0wySERSICAgICAweDAwMDAxMDAwCisKKy8qIFNSUkNUTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUICAgICAxMCAgICAgLyogc28gbWFueSBLQnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX1NISUZUICAgICAgICAyMgorI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfTUFTSyAgICAgICAgIDB4MDFDMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RST1BfRU4gICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJfTUFTSyAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0xFR0FDWSAgICAweDAwMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGIDB4MDIwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVCAgMHgwNDAwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfSERSX1JFUExJQ0FUSU9OX0xBUkdFX1BLVCAweDA4MDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTIDB4MEEwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX01BU0sgICAgICAweDBFMDAwMDAwCisKKy8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfREQgICAgICAgICAweDAxICAgIC8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9FT1AgICAgICAgIDB4MDIgICAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9GTE0gICAgICAgIDB4MDQgICAgLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WUCAgICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfTUFTSyAgIDB4MDAwRkZGRjAgLyogTmV4dCBEZXNjcmlwdG9yIEluZGV4ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9ORVhUUF9TSElGVCAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9SWERfU1RBVF9VRFBDUyAgICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MNENTICAgICAgIDB4MjAgICAgLyogTDQgeHN1bSBjYWxjdWxhdGVkICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgICAgMHg0MCAgICAvKiBJUCB4c3VtIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfUElGICAgICAgICAweDgwICAgIC8qIHBhc3NlZCBpbi1leGFjdCBmaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfQ1JDViAgICAgICAweDEwMCAgIC8qIFNwZWN1bGF0aXZlIENSQyBWYWxpZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAgIDB4MjAwICAgLyogMXN0IFZMQU4gZm91bmQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQViAgICAgICAweDQwMCAgIC8qIFZhbGlkIFVEUCBjaGVja3N1bSAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9EWU5JTlQgICAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9UUyAgICAgICAgIDB4MTAwMDAgLyogVGltZSBTdGFtcCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9TRUNQICAgICAgIDB4MjAwMDAgLyogU2VjdXJpdHkgUHJvY2Vzc2luZyAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MQiAgICAgICAgIDB4NDAwMDAgLyogTG9vcGJhY2sgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0FDSyAgICAgICAgMHg4MDAwICAvKiBBQ0sgUGFja2V0IGluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9DRSAgICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERfRVJSX0xFICAgICAgICAgIDB4MDIgICAgLyogTGVuZ3RoIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfUEUgICAgICAgICAgMHgwOCAgICAvKiBQYWNrZXQgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9PU0UgICAgICAgICAweDEwICAgIC8qIE92ZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfVVNFICAgICAgICAgMHgyMCAgICAvKiBVbmRlcnNpemUgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9UQ1BFICAgICAgICAweDQwICAgIC8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9JUEUgICAgICAgICAweDgwICAgIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTUFTSyAgICAgMHhGRkYwMDAwMCAvKiBSREVTQy5FUlJPUlMgbWFzayAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1NISUZUICAgIDIwICAgICAgICAgLyogUkRFU0MuRVJST1JTIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSEJPICAgICAgMHgwMDgwMDAwMCAvKkhlYWRlciBCdWZmZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9DRSAgICAgICAweDAxMDAwMDAwIC8qIENSQyBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0xFICAgICAgIDB4MDIwMDAwMDAgLyogTGVuZ3RoIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfUEUgICAgICAgMHgwODAwMDAwMCAvKiBQYWNrZXQgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9PU0UgICAgICAweDEwMDAwMDAwIC8qIE92ZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfVVNFICAgICAgMHgyMDAwMDAwMCAvKiBVbmRlcnNpemUgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9UQ1BFICAgICAweDQwMDAwMDAwIC8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9JUEUgICAgICAweDgwMDAwMDAwIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9WTEFOX0lEX01BU0sgICAgMHgwRkZGICAvKiBWTEFOIElEIGlzIGluIGxvd2VyIDEyIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1BSSV9NQVNLICAgICAgICAweEUwMDAgIC8qIFByaW9yaXR5IGlzIGluIHVwcGVyIDMgYml0cyAqLworI2RlZmluZSBJWEdCRV9SWERfUFJJX1NISUZUICAgICAgIDEzCisjZGVmaW5lIElYR0JFX1JYRF9DRklfTUFTSyAgICAgICAgMHgxMDAwICAvKiBDRkkgaXMgYml0IDEyICovCisjZGVmaW5lIElYR0JFX1JYRF9DRklfU0hJRlQgICAgICAgMTIKKworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9ERCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0REICAvKiBEb25lICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0VPUCAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRU9QIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkxNICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9GTE0gLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9WUCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX1ZQICAvKiBJRUVFIFZMQU4gUGt0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX01BU0sgICAgICAgICAgMHgwMDBGRkZGRiAvKiBTdGF0L05FWFRQOiBiaXQgMC0xOSAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ0VPRlMgICAgICAgIDB4MDAwMDAwNDAgLyogRkNvRSBFT0YvU09GIFN0YXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNTVEFUICAgICAgICAweDAwMDAwMDMwIC8qIEZDb0UgUGt0IFN0YXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNTVEFUX05PTVRDSCAweDAwMDAwMDAwIC8qIDAwOiBObyBDdHh0IE1hdGNoICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVF9OT0REUCAgMHgwMDAwMDAxMCAvKiAwMTogQ3R4dCB3L28gRERQICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVF9GQ1BSU1AgMHgwMDAwMDAyMCAvKiAxMDogUmVjdi4gRkNQX1JTUCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfRERQICAgIDB4MDAwMDAwMzAgLyogMTE6IEN0eHQgdy8gRERQICovCisKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1JTU1RZUEVfTUFTSyAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0sgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLX0VYICAgIDB4MDAwMUZGRjAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9NQVNLICAgICAweDAwMDA3RkUwCisjZGVmaW5lIElYR0JFX1JYREFEVl9SU0NDTlRfTUFTSyAgICAgICAgMHgwMDFFMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX1NISUZUICAgICAgIDE3CisjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQgICAgNQorI2RlZmluZSBJWEdCRV9SWERBRFZfU1BMSVRIRUFERVJfRU4gICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NQSCAgICAgICAgICAgICAgICAweDgwMDAKKworI2RlZmluZSBJWEdCRV9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfQ0UgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfTEUgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfUEUgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfT1NFIHwgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfVVNFKQorCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX0NFIHwgIFwKKwkJCQkJIElYR0JFX1JYREFEVl9FUlJfTEUgfCAgXAorCQkJCQkgSVhHQkVfUlhEQURWX0VSUl9QRSB8ICBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX09TRSB8IFwKKwkJCQkJIElYR0JFX1JYREFEVl9FUlJfVVNFKQorCisjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19JWFNNIDB4MDEgICAgICAgLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCisjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19UWFNNIDB4MDIgICAgICAgLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9FT1AgICAgMHgwMTAwMDAwMCAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1RYRF9DTURfSUZDUyAgIDB4MDIwMDAwMDAgLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLworI2RlZmluZSBJWEdCRV9UWERfQ01EX0lDICAgICAweDA0MDAwMDAwIC8qIEluc2VydCBDaGVja3N1bSAqLworI2RlZmluZSBJWEdCRV9UWERfQ01EX1JTICAgICAweDA4MDAwMDAwIC8qIFJlcG9ydCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9ERVhUICAgMHgyMDAwMDAwMCAvKiBEZXNjcmlwdG9yIGV4dGVuc2lvbiAoMCA9IGxlZ2FjeSkgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9WTEUgICAgMHg0MDAwMDAwMCAvKiBBZGQgVkxBTiB0YWcgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX1NUQVRfREQgICAgMHgwMDAwMDAwMSAvKiBEZXNjcmlwdG9yIERvbmUgKi8KKworLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCit1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyB7CisJc3RydWN0IHsKKwkJX19sZTY0IGJ1ZmZlcl9hZGRyOyAgICAgIC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmICovCisJCV9fbGUzMiBjbWRfdHlwZV9sZW47CisJCV9fbGUzMiBvbGluZm9fc3RhdHVzOworCX0gcmVhZDsKKwlzdHJ1Y3QgeworCQlfX2xlNjQgcnN2ZDsgICAgICAgLyogUmVzZXJ2ZWQgKi8KKwkJX19sZTMyIG54dHNlcV9zZWVkOworCQlfX2xlMzIgc3RhdHVzOworCX0gd2I7Cit9OworCisvKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwordW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgeworCXN0cnVjdCB7CisJCV9fbGU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCisJCV9fbGU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovCisJfSByZWFkOworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQl1bmlvbiB7CisJCQkJX19sZTMyIGRhdGE7CisJCQkJc3RydWN0IHsKKwkJCQkJX19sZTE2IHBrdF9pbmZvOyAvKiBSU1MsIFBrdCB0eXBlICovCisJCQkJCV9fbGUxNiBoZHJfaW5mbzsgLyogU3BsaXRoZHIsIGhkcmxlbiAqLworCQkJCX0gaHNfcnNzOworCQkJfSBsb19kd29yZDsKKwkJCXVuaW9uIHsKKwkJCQlfX2xlMzIgcnNzOyAvKiBSU1MgSGFzaCAqLworCQkJCXN0cnVjdCB7CisJCQkJCV9fbGUxNiBpcF9pZDsgLyogSVAgaWQgKi8KKwkJCQkJX19sZTE2IGNzdW07IC8qIFBhY2tldCBDaGVja3N1bSAqLworCQkJCX0gY3N1bV9pcDsKKwkJCX0gaGlfZHdvcmQ7CisJCX0gbG93ZXI7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCisJCQlfX2xlMTYgbGVuZ3RoOyAvKiBQYWNrZXQgbGVuZ3RoICovCisJCQlfX2xlMTYgdmxhbjsgLyogVkxBTiB0YWcgKi8KKwkJfSB1cHBlcjsKKwl9IHdiOyAgLyogd3JpdGViYWNrICovCit9OworCisvKiBDb250ZXh0IGRlc2NyaXB0b3JzICovCitzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyB7CisJX19sZTMyIHZsYW5fbWFjaXBfbGVuczsKKwlfX2xlMzIgc2VxbnVtX3NlZWQ7CisJX19sZTMyIHR5cGVfdHVjbWRfbWxobDsKKwlfX2xlMzIgbXNzX2w0bGVuX2lkeDsKK307CisKKy8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9NQVNLICAweDAwRjAwMDAwIC8qIERUWVAgbWFzayAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9DVFhUICAweDAwMjAwMDAwIC8qIEFkdmFuY2VkIENvbnRleHQgRGVzYyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9FT1AgICBJWEdCRV9UWERfQ01EX0VPUCAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9JRkNTICBJWEdCRV9UWERfQ01EX0lGQ1MgLyogSW5zZXJ0IEZDUyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9SUyAgICBJWEdCRV9UWERfQ01EX1JTICAgLyogUmVwb3J0IFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9ERVhUICBJWEdCRV9UWERfQ01EX0RFWFQgLyogRGVzYyBleHQgKDE9QWR2KSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9WTEUgICBJWEdCRV9UWERfQ01EX1ZMRSAgLyogVkxBTiBwa3QgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9EQ01EX1RTRSAgIDB4ODAwMDAwMDAgLyogVENQIFNlZyBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1NUQVRfREQgICAgSVhHQkVfVFhEX1NUQVRfREQgIC8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNCAgICAgIDB4MDAwMDA0MDAgIC8qIElQIFBhY2tldCBUeXBlOiAxPUlQdjQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQVjYgICAgICAweDAwMDAwMDAwICAvKiBJUCBQYWNrZXQgVHlwZTogMD1JUHY2ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVURQICAgMHgwMDAwMDAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVURQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQICAgMHgwMDAwMDgwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVENQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfU0NUUCAgMHgwMDAwMTAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgU0NUUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSURYX1NISUZUICA0IC8qIEFkdiBkZXNjIEluZGV4IHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19TSElGVCAgICAgIDggIC8qIEFkdiBkZXNjIFBPUFRTIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19JWFNNIChJWEdCRV9UWERfUE9QVFNfSVhTTSA8PCBcCisJCQkJIElYR0JFX0FEVlRYRF9QT1BUU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQURWVFhEX1BPUFRTX1RYU00gKElYR0JFX1RYRF9QT1BUU19UWFNNIDw8IFwKKwkJCQkgSVhHQkVfQURWVFhEX1BPUFRTX1NISUZUKQorI2RlZmluZSBJWEdCRV9BRFZUWERfUEFZTEVOX1NISUZUICAgIDE0IC8qIEFkdiBkZXNjIFBBWUxFTiBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTUFDTEVOX1NISUZUICAgIDkgIC8qIEFkdiBjdHh0IGRlc2MgbWFjIGxlbiBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVkxBTl9TSElGVCAgICAgIDE2ICAvKiBBZHYgY3R4dCB2bGFuIHRhZyBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQgICAgIDggIC8qIEFkdiBjdHh0IEw0TEVOIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9NU1NfU0hJRlQgICAgICAgMTYgIC8qIEFkdiBjdHh0IE1TUyBzaGlmdCAqLworCisvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgYml0bWFza3MgKi8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9SVFhfUVVFVUUgICAgMHgwMDAwRkZGRiAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTUFJTEJPWCAgICAgIDB4MDAwODAwMDAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9PVEhFUiAgICAgICAgMHg4MDAwMDAwMCAvKiBJbnRlcnJ1cHQgQ2F1c2UgQWN0aXZlICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBTZXQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNTX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX09USEVSICAgICAgICBJWEdCRV9FSUNSX09USEVSICAgICAvKiBJTlQgQ2F1c2UgQWN0aXZlICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIFNldCAqLworI2RlZmluZSBJWEdCRV9FSU1TX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTVNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCisjZGVmaW5lIElYR0JFX0VJTVNfT1RIRVIgICAgICAgIElYR0JFX0VJQ1JfT1RIRVIgICAgIC8qIElOVCBDYXVzZSBBY3RpdmUgKi8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgQ2xlYXIgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1DX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLworI2RlZmluZSBJWEdCRV9FSU1DX09USEVSICAgICAgICBJWEdCRV9FSUNSX09USEVSICAgICAvKiBJTlQgQ2F1c2UgQWN0aXZlICovCisKKyNkZWZpbmUgSVhHQkVfRUlNU19FTkFCTEVfTUFTSyAoIFwKKwkJCQlJWEdCRV9FSU1TX1JUWF9RVUVVRSAgICAgICB8IFwKKwkJCQlJWEdCRV9FSU1TX01BSUxCT1ggICAgICAgICB8IFwKKwkJCQlJWEdCRV9FSU1TX09USEVSKQorCisjZGVmaW5lIElYR0JFX0VJVFJfQ05UX1dESVMgICAgIDB4ODAwMDAwMDAKKworLyogRXJyb3IgQ29kZXMgKi8KKyNkZWZpbmUgSVhHQkVfRVJSX0lOVkFMSURfTUFDX0FERFIgICAgICAgICAgICAgIC0xCisjZGVmaW5lIElYR0JFX0VSUl9SRVNFVF9GQUlMRUQgICAgICAgICAgICAgICAgICAtMgorCisjZW5kaWYgLyogX0lYR0JFVkZfREVGSU5FU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTliZTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKQEAgLTAsMCArMSw3MTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJpeGdiZXZmLmgiCisKKyNkZWZpbmUgSVhHQkVfQUxMX1JBUl9FTlRSSUVTIDE2CisKKyNpZmRlZiBFVEhUT09MX0dTVEFUUworc3RydWN0IGl4Z2JlX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBzdGF0X29mZnNldDsKKwlpbnQgYmFzZV9zdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgSVhHQkVWRl9TVEFUKG0sIGIpICBzaXplb2YoKChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopMCktPm0pLCBcCisJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgbSksICAgICAgXAorCQkJICAgIG9mZnNldG9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIsIGIpCitzdGF0aWMgc3RydWN0IGl4Z2JlX3N0YXRzIGl4Z2JlX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJeyJyeF9wYWNrZXRzIiwgSVhHQkVWRl9TVEFUKHN0YXRzLnZmZ3ByYywgc3RhdHMuYmFzZV92ZmdwcmMpfSwKKwl7InR4X3BhY2tldHMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZncHRjLCBzdGF0cy5iYXNlX3ZmZ3B0Yyl9LAorCXsicnhfYnl0ZXMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZnb3JjLCBzdGF0cy5iYXNlX3ZmZ29yYyl9LAorCXsidHhfYnl0ZXMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZnb3RjLCBzdGF0cy5iYXNlX3ZmZ290Yyl9LAorCXsidHhfYnVzeSIsIElYR0JFVkZfU1RBVCh0eF9idXN5LCB6ZXJvX2Jhc2UpfSwKKwl7Im11bHRpY2FzdCIsIElYR0JFVkZfU1RBVChzdGF0cy52Zm1wcmMsIHN0YXRzLmJhc2VfdmZtcHJjKX0sCisJeyJyeF9jc3VtX29mZmxvYWRfZ29vZCIsIElYR0JFVkZfU1RBVChod19jc3VtX3J4X2dvb2QsIHplcm9fYmFzZSl9LAorCXsicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIElYR0JFVkZfU1RBVChod19jc3VtX3J4X2Vycm9yLCB6ZXJvX2Jhc2UpfSwKKwl7InR4X2NzdW1fb2ZmbG9hZF9jdHh0IiwgSVhHQkVWRl9TVEFUKGh3X2NzdW1fdHhfZ29vZCwgemVyb19iYXNlKX0sCisJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRVZGX1NUQVQocnhfaGRyX3NwbGl0LCB6ZXJvX2Jhc2UpfSwKK307CisKKyNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIDAKKyNkZWZpbmUgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTglBUlJBWV9TSVpFKGl4Z2JlX2dzdHJpbmdzX3N0YXRzKQorCisjZGVmaW5lIElYR0JFVkZfU1RBVFNfTEVOIChJWEdCRV9HTE9CQUxfU1RBVFNfTEVOICsgSVhHQkVfUVVFVUVfU1RBVFNfTEVOKQorI2VuZGlmIC8qIEVUSFRPT0xfR1NUQVRTICovCisjaWZkZWYgRVRIVE9PTF9URVNUCitzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9nc3RyaW5nc190ZXN0W11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwkiUmVnaXN0ZXIgdGVzdCAgKG9mZmxpbmUpIiwKKwkiTGluayB0ZXN0ICAgKG9uL29mZmxpbmUpIgorfTsKKyNkZWZpbmUgSVhHQkVfVEVTVF9MRU4gKHNpemVvZihpeGdiZV9nc3RyaW5nc190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTikKKyNlbmRpZiAvKiBFVEhUT09MX1RFU1QgKi8KKworc3RhdGljIGludCBpeGdiZXZmX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBsaW5rX3NwZWVkID0gMDsKKwlib29sIGxpbmtfdXA7CisKKwllY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0RVTU1ZMTsKKwllY21kLT5wb3J0ID0gLTE7CisKKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKworCWlmIChsaW5rX3VwKSB7CisJCWVjbWQtPnNwZWVkID0gKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpID8KKwkJCSAgICAgICBTUEVFRF8xMDAwMCA6IFNQRUVEXzEwMDA7CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWVjbWQtPnNwZWVkID0gLTE7CisJCWVjbWQtPmR1cGxleCA9IC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKK30KKworc3RhdGljIGludCBpeGdiZXZmX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChkYXRhKQorCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKKwllbHNlCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKCFhZGFwdGVyLT5kZXZfY2xvc2VkKQorCQkJaXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCX0gZWxzZSB7CisJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIGFkYXB0ZXItPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBkYXRhOworfQorCisjZGVmaW5lIElYR0JFX0dFVF9TVEFUKF9BXywgX1JfKSAoX0FfLT5zdGF0cy5fUl8pCisKK3N0YXRpYyBjaGFyICppeGdiZXZmX3JlZ19uYW1lc1tdID0geworCSJJWEdCRV9WRkNUUkwiLAorCSJJWEdCRV9WRlNUQVRVUyIsCisJIklYR0JFX1ZGTElOS1MiLAorCSJJWEdCRV9WRlJYTUVNV1JBUCIsCisJIklYR0JFX1ZGUlRJTUVSIiwKKwkiSVhHQkVfVlRFSUNSIiwKKwkiSVhHQkVfVlRFSUNTIiwKKwkiSVhHQkVfVlRFSU1TIiwKKwkiSVhHQkVfVlRFSU1DIiwKKwkiSVhHQkVfVlRFSUFDIiwKKwkiSVhHQkVfVlRFSUFNIiwKKwkiSVhHQkVfVlRFSVRSIiwKKwkiSVhHQkVfVlRJVkFSIiwKKwkiSVhHQkVfVlRJVkFSX01JU0MiLAorCSJJWEdCRV9WRlJEQkFMMCIsCisJIklYR0JFX1ZGUkRCQUwxIiwKKwkiSVhHQkVfVkZSREJBSDAiLAorCSJJWEdCRV9WRlJEQkFIMSIsCisJIklYR0JFX1ZGUkRMRU4wIiwKKwkiSVhHQkVfVkZSRExFTjEiLAorCSJJWEdCRV9WRlJESDAiLAorCSJJWEdCRV9WRlJESDEiLAorCSJJWEdCRV9WRlJEVDAiLAorCSJJWEdCRV9WRlJEVDEiLAorCSJJWEdCRV9WRlJYRENUTDAiLAorCSJJWEdCRV9WRlJYRENUTDEiLAorCSJJWEdCRV9WRlNSUkNUTDAiLAorCSJJWEdCRV9WRlNSUkNUTDEiLAorCSJJWEdCRV9WRlBTUlRZUEUiLAorCSJJWEdCRV9WRlREQkFMMCIsCisJIklYR0JFX1ZGVERCQUwxIiwKKwkiSVhHQkVfVkZUREJBSDAiLAorCSJJWEdCRV9WRlREQkFIMSIsCisJIklYR0JFX1ZGVERMRU4wIiwKKwkiSVhHQkVfVkZURExFTjEiLAorCSJJWEdCRV9WRlRESDAiLAorCSJJWEdCRV9WRlRESDEiLAorCSJJWEdCRV9WRlREVDAiLAorCSJJWEdCRV9WRlREVDEiLAorCSJJWEdCRV9WRlRYRENUTDAiLAorCSJJWEdCRV9WRlRYRENUTDEiLAorCSJJWEdCRV9WRlREV0JBTDAiLAorCSJJWEdCRV9WRlREV0JBTDEiLAorCSJJWEdCRV9WRlREV0JBSDAiLAorCSJJWEdCRV9WRlREV0JBSDEiCit9OworCisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gKEFSUkFZX1NJWkUoaXhnYmV2Zl9yZWdfbmFtZXMpKSAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsCisJCQkgICAgIHZvaWQgKnApCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgKnJlZ3NfYnVmZiA9IHA7CisJdTMyIHJlZ3NfbGVuID0gaXhnYmV2Zl9nZXRfcmVnc19sZW4obmV0ZGV2KTsKKwl1OCBpOworCisJbWVtc2V0KHAsIDAsIHJlZ3NfbGVuKTsKKworCXJlZ3MtPnZlcnNpb24gPSAoMSA8PCAyNCkgfCBody0+cmV2aXNpb25faWQgPDwgMTYgfCBody0+ZGV2aWNlX2lkOworCisJLyogR2VuZXJhbCBSZWdpc3RlcnMgKi8KKwlyZWdzX2J1ZmZbMF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZDVFJMKTsKKwlyZWdzX2J1ZmZbMV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZTVEFUVVMpOworCXJlZ3NfYnVmZlsyXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTsKKwlyZWdzX2J1ZmZbM10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWE1FTVdSQVApOworCXJlZ3NfYnVmZls0XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJUSU1FUik7CisKKwkvKiBJbnRlcnJ1cHQgKi8KKwkvKiBkb24ndCByZWFkIEVJQ1IgYmVjYXVzZSBpdCBjYW4gY2xlYXIgaW50ZXJydXB0IGNhdXNlcywgaW5zdGVhZAorCSAqIHJlYWQgRUlDUyB3aGljaCBpcyBhIHNoYWRvdyBidXQgZG9lc24ndCBjbGVhciBFSUNSICovCisJcmVnc19idWZmWzVdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUyk7CisJcmVnc19idWZmWzZdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUyk7CisJcmVnc19idWZmWzddID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlNUyk7CisJcmVnc19idWZmWzhdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlNQyk7CisJcmVnc19idWZmWzldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlBQyk7CisJcmVnc19idWZmWzEwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQU0pOworCXJlZ3NfYnVmZlsxMV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSVRSKDApKTsKKwlyZWdzX2J1ZmZbMTJdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUigwKSk7CisJcmVnc19idWZmWzEzXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVElWQVJfTUlTQyk7CisKKwkvKiBSZWNlaXZlIERNQSAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxNCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxNiArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxOCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRMRU4oaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyMCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMjIgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJEVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzI0ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyNiArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGU1JSQ1RMKGkpKTsKKworCS8qIFJlY2VpdmUgKi8KKwlyZWdzX2J1ZmZbMjhdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUFNSVFlQRSk7CisKKwkvKiBUcmFuc21pdCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyOSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszMSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszMyArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERMRU4oaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszNSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMzcgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzM5ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZls0MSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERXQkFMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbNDMgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREV0JBSChpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpeGdiZXZmX3JlZ19uYW1lcyk7IGkrKykKKwkJaHdfZGJnKGh3LCAiJXNcdCU4Ljh4XG4iLCBpeGdiZXZmX3JlZ19uYW1lc1tpXSwgcmVnc19idWZmW2ldKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJsY3B5KGRydmluZm8tPmRyaXZlciwgaXhnYmV2Zl9kcml2ZXJfbmFtZSwgMzIpOworCXN0cmxjcHkoZHJ2aW5mby0+dmVyc2lvbiwgaXhnYmV2Zl9kcml2ZXJfdmVyc2lvbiwgMzIpOworCisJc3RybGNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgNCk7CisJc3RybGNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmc7CisKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IElYR0JFVkZfTUFYX1JYRDsKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IElYR0JFVkZfTUFYX1RYRDsKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfcGVuZGluZyA9IHJ4X3JpbmctPmNvdW50OworCXJpbmctPnR4X3BlbmRpbmcgPSB0eF9yaW5nLT5jb3VudDsKKwlyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDsKKwlpbnQgaSwgZXJyOworCXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKKwlib29sIG5lZWRfdHhfdXBkYXRlID0gZmFsc2U7CisJYm9vbCBuZWVkX3J4X3VwZGF0ZSA9IGZhbHNlOworCisJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfcnhfY291bnQgPSBtYXgocmluZy0+cnhfcGVuZGluZywgKHUzMilJWEdCRVZGX01JTl9SWEQpOworCW5ld19yeF9jb3VudCA9IG1pbihuZXdfcnhfY291bnQsICh1MzIpSVhHQkVWRl9NQVhfUlhEKTsKKwluZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIElYR0JFX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTsKKworCW5ld190eF9jb3VudCA9IG1heChyaW5nLT50eF9wZW5kaW5nLCAodTMyKUlYR0JFVkZfTUlOX1RYRCk7CisJbmV3X3R4X2NvdW50ID0gbWluKG5ld190eF9jb3VudCwgKHUzMilJWEdCRVZGX01BWF9UWEQpOworCW5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgSVhHQkVfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpOworCisJaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQpICYmCisJICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpKSB7CisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50KSB7CisJCXR4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXR4X3JpbmcpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9zZXR1cDsKKwkJfQorCQltZW1jcHkodHhfcmluZywgYWRhcHRlci0+dHhfcmluZywKKwkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZykpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQl0eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJZXJyID0gaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCQkgJnR4X3JpbmdbaV0pOworCQkJaWYgKGVycikgeworCQkJCXdoaWxlIChpKSB7CisJCQkJCWktLTsKKwkJCQkJaXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJCQkgICZ0eF9yaW5nW2ldKTsKKwkJCQl9CisJCQkJa2ZyZWUodHhfcmluZyk7CisJCQkJZ290byBlcnJfc2V0dXA7CisJCQl9CisJCQl0eF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+dHhfcmluZ1tpXS52X2lkeDsKKwkJfQorCQluZWVkX3R4X3VwZGF0ZSA9IHRydWU7CisJfQorCisJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7CisJCXJ4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoKCFyeF9yaW5nKSAmJiAobmVlZF90eF91cGRhdGUpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfcnhfc2V0dXA7CisJCX0KKwkJbWVtY3B5KHJ4X3JpbmcsIGFkYXB0ZXItPnJ4X3JpbmcsCisJCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3JpbmcpKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJcnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJCWVyciA9IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkJCQkJICZyeF9yaW5nW2ldKTsKKwkJCWlmIChlcnIpIHsKKwkJCQl3aGlsZSAoaSkgeworCQkJCQlpLS07CisJCQkJCWl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCQkJICAmcnhfcmluZ1tpXSk7CisJCQkJfQorCQkJCWtmcmVlKHJ4X3JpbmcpOworCQkJCWdvdG8gZXJyX3J4X3NldHVwOworCQkJfQorCQkJcnhfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0udl9pZHg7CisJCX0KKwkJbmVlZF9yeF91cGRhdGUgPSB0cnVlOworCX0KKworZXJyX3J4X3NldHVwOgorCS8qIGlmIHJpbmdzIG5lZWQgdG8gYmUgdXBkYXRlZCwgaGVyZSdzIHRoZSBwbGFjZSB0byBkbyBpdCBpbiBvbmUgc2hvdCAqLworCWlmIChuZWVkX3R4X3VwZGF0ZSB8fCBuZWVkX3J4X3VwZGF0ZSkgeworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJaXhnYmV2Zl9kb3duKGFkYXB0ZXIpOworCX0KKworCS8qIHR4ICovCisJaWYgKG5lZWRfdHhfdXBkYXRlKSB7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCQlhZGFwdGVyLT50eF9yaW5nID0gdHhfcmluZzsKKwkJdHhfcmluZyA9IE5VTEw7CisJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJfQorCisJLyogcnggKi8KKwlpZiAobmVlZF9yeF91cGRhdGUpIHsKKwkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CisJCWFkYXB0ZXItPnJ4X3JpbmcgPSByeF9yaW5nOworCQlyeF9yaW5nID0gTlVMTDsKKwkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKKwl9CisKKwkvKiBzdWNjZXNzISAqLworCWVyciA9IDA7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJaXhnYmV2Zl91cChhZGFwdGVyKTsKKworZXJyX3NldHVwOgorCWNsZWFyX2JpdChfX0lYR0JFVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaW5nc2V0KQoreworICAgICAgIHN3aXRjaCAoc3RyaW5nc2V0KSB7CisgICAgICAgY2FzZSBFVEhfU1NfVEVTVDoKKwkgICAgICAgcmV0dXJuIElYR0JFX1RFU1RfTEVOOworICAgICAgIGNhc2UgRVRIX1NTX1NUQVRTOgorCSAgICAgICByZXR1cm4gSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsKKyAgICAgICBkZWZhdWx0OgorCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaTsKKworCWl4Z2JldmZfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKKwkJY2hhciAqcCA9IChjaGFyICopYWRhcHRlciArCisJCQlpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKKwkJY2hhciAqYiA9IChjaGFyICopYWRhcHRlciArCisJCQlpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5iYXNlX3N0YXRfb2Zmc2V0OworCQlkYXRhW2ldID0gKChpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQorCQkJICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopcCA6ICoodTMyICopcCkgLQorCQkJICAoKGl4Z2JlX2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09CisJCQkgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKiliIDogKih1MzIgKiliKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwKKwkJCQl1OCAqZGF0YSkKK3sKKwljaGFyICpwID0gKGNoYXIgKilkYXRhOworCWludCBpOworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoZGF0YSwgKml4Z2JlX2dzdHJpbmdzX3Rlc3QsCisJCSAgICAgICBJWEdCRV9URVNUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7CisJCWJyZWFrOworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CisJCQltZW1jcHkocCwgaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsCisJCQkgICAgICAgRVRIX0dTVFJJTkdfTEVOKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpeGdiZXZmX2xpbmtfdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlib29sIGxpbmtfdXA7CisJdTMyIGxpbmtfc3BlZWQgPSAwOworCSpkYXRhID0gMDsKKworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgdHJ1ZSk7CisJaWYgKCFsaW5rX3VwKQorCQkqZGF0YSA9IDE7CisKKwlyZXR1cm4gKmRhdGE7Cit9CisKKy8qIGV0aHRvb2wgcmVnaXN0ZXIgdGVzdCBkYXRhICovCitzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCB7CisJdTE2IHJlZzsKKwl1OCAgYXJyYXlfbGVuOworCXU4ICB0ZXN0X3R5cGU7CisJdTMyIG1hc2s7CisJdTMyIHdyaXRlOworfTsKKworLyogSW4gdGhlIGhhcmR3YXJlLCByZWdpc3RlcnMgYXJlIGxhaWQgb3V0IGVpdGhlciBzaW5nbHksIGluIGFycmF5cworICogc3BhY2VkIDB4NDAgYnl0ZXMgYXBhcnQsIG9yIGluIGNvbnRpZ3VvdXMgdGFibGVzLiAgV2UgYXNzdW1lCisgKiBtb3N0IHRlc3RzIHRha2UgcGxhY2Ugb24gYXJyYXlzIG9yIHNpbmdsZSByZWdpc3RlcnMgKGhhbmRsZWQKKyAqIGFzIGEgc2luZ2xlLWVsZW1lbnQgYXJyYXkpIGFuZCBzcGVjaWFsLWNhc2UgdGhlIHRhYmxlcy4KKyAqIFRhYmxlIHRlc3RzIGFyZSBhbHdheXMgcGF0dGVybiB0ZXN0cy4KKyAqCisgKiBXZSBhbHNvIG1ha2UgcHJvdmlzaW9uIGZvciBzb21lIHJlcXVpcmVkIHNldHVwIHN0ZXBzIGJ5IHNwZWNpZnlpbmcKKyAqIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuIHdpdGhvdXQgYW55IHJlYWQtYmFjayB0ZXN0aW5nLgorICovCisKKyNkZWZpbmUgUEFUVEVSTl9URVNUCTEKKyNkZWZpbmUgU0VUX1JFQURfVEVTVAkyCisjZGVmaW5lIFdSSVRFX05PX1RFU1QJMworI2RlZmluZSBUQUJMRTMyX1RFU1QJNAorI2RlZmluZSBUQUJMRTY0X1RFU1RfTE8JNQorI2RlZmluZSBUQUJMRTY0X1RFU1RfSEkJNgorCisvKiBkZWZhdWx0IFZGIHJlZ2lzdGVyIHRlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCByZWdfdGVzdF92ZltdID0geworCXsgSVhHQkVfVkZSREJBTCgwKSwgMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRjgwIH0sCisJeyBJWEdCRV9WRlJEQkFIKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IElYR0JFX1ZGUkRMRU4oMCksIDIsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRiB9LAorCXsgSVhHQkVfVkZSWERDVEwoMCksIDIsIFdSSVRFX05PX1RFU1QsIDAsIElYR0JFX1JYRENUTF9FTkFCTEUgfSwKKwl7IElYR0JFX1ZGUkRUKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7IElYR0JFX1ZGUlhEQ1RMKDApLCAyLCBXUklURV9OT19URVNULCAwLCAwIH0sCisJeyBJWEdCRV9WRlREQkFMKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IElYR0JFX1ZGVERCQUgoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgSVhHQkVfVkZURExFTigwKSwgMiwgUEFUVEVSTl9URVNULCAweDAwMEZGRjgwLCAweDAwMEZGRjgwIH0sCisJeyAwLCAwLCAwLCAwIH0KK307CisKKyNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1MzIgcGF0LCB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnN0IHUzMiBfdGVzdFtdID0gezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OyBcCisJZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKF90ZXN0KTsgcGF0KyspIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXdyaXRlbCgoX3Rlc3RbcGF0XSAmIFcpLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgXAorCQl2YWwgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKHZhbCAhPSAoX3Rlc3RbcGF0XSAmIFcgJiBNKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICAgICAgICAgICAgICAgICBcCisJCQkiMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlSLCB2YWwsIChfdGVzdFtwYXRdICYgVyAmIE0pKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICBcCisJCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFJFR19TRVRfQU5EX0NIRUNLKFIsIE0sIFcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdTMyIHZhbCwgYmVmb3JlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwliZWZvcmUgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbCgoVyAmIE0pLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoKFcgJiBNKSAhPSAodmFsICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlwcmludGsoS0VSTl9FUlIgInNldC9jaGVjayByZWcgJTA0WCB0ZXN0IGZhaWxlZDogZ290IDB4JTA4WCAiIFwKKwkJCQkgImV4cGVjdGVkIDB4JTA4WFxuIiwgUiwgKHZhbCAmIE0pLCAoVyAmIE0pKTsgXAorCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJd3JpdGVsKGJlZm9yZSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICBcCisJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJd3JpdGVsKGJlZm9yZSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIGludCBpeGdiZXZmX3JlZ190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDsKKwl1MzIgaTsKKworCXRlc3QgPSByZWdfdGVzdF92ZjsKKworCS8qCisJICogUGVyZm9ybSB0aGUgcmVnaXN0ZXIgdGVzdCwgbG9vcGluZyB0aHJvdWdoIHRoZSB0ZXN0IHRhYmxlCisJICogdW50aWwgd2UgZWl0aGVyIGZhaWwgb3IgcmVhY2ggdGhlIG51bGwgZW50cnkuCisJICovCisJd2hpbGUgKHRlc3QtPnJlZykgeworCQlmb3IgKGkgPSAwOyBpIDwgdGVzdC0+YXJyYXlfbGVuOyBpKyspIHsKKwkJCXN3aXRjaCAodGVzdC0+dGVzdF90eXBlKSB7CisJCQljYXNlIFBBVFRFUk5fVEVTVDoKKwkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogMHg0MCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBTRVRfUkVBRF9URVNUOgorCQkJCVJFR19TRVRfQU5EX0NIRUNLKHRlc3QtPnJlZyArIChpICogMHg0MCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBXUklURV9OT19URVNUOgorCQkJCXdyaXRlbCh0ZXN0LT53cml0ZSwKKwkJCQkgICAgICAgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0ZXN0LT5yZWcpCisJCQkJICAgICAgICsgKGkgKiAweDQwKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRBQkxFMzJfVEVTVDoKKwkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogNCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBUQUJMRTY0X1RFU1RfTE86CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDgpLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVEFCTEU2NF9URVNUX0hJOgorCQkJCVJFR19QQVRURVJOX1RFU1QoKHRlc3QtPnJlZyArIDQpICsgKGkgKiA4KSwKKwkJCQkJCXRlc3QtPm1hc2ssCisJCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJdGVzdCsrOworCX0KKworCSpkYXRhID0gMDsKKwlyZXR1cm4gKmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKKworCXNldF9iaXQoX19JWEdCRVZGX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIE9mZmxpbmUgdGVzdHMgKi8KKworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAib2ZmbGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKworCQkvKiBMaW5rIHRlc3QgcGVyZm9ybWVkIGJlZm9yZSBoYXJkd2FyZSByZXNldCBzbyBhdXRvbmVnIGRvZXNuJ3QKKwkJICogaW50ZXJmZXJlIHdpdGggdGVzdCByZXN1bHQgKi8KKwkJaWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzFdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJaWYgKGlmX3J1bm5pbmcpCisJCQkvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi8KKwkJCWRldl9jbG9zZShuZXRkZXYpOworCQllbHNlCisJCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCisJCWh3X2RiZygmYWRhcHRlci0+aHcsICJyZWdpc3RlciB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKwkJaWYgKGl4Z2JldmZfcmVnX3Rlc3QoYWRhcHRlciwgJmRhdGFbMF0pKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCisJCWNsZWFyX2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwkJaWYgKGlmX3J1bm5pbmcpCisJCQlkZXZfb3BlbihuZXRkZXYpOworCX0gZWxzZSB7CisJCWh3X2RiZygmYWRhcHRlci0+aHcsICJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCS8qIE9ubGluZSB0ZXN0cyAqLworCQlpZiAoaXhnYmV2Zl9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbMV0pKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQkvKiBPbmxpbmUgdGVzdHMgYXJlbid0IHJ1bjsgcGFzcyBieSBkZWZhdWx0ICovCisJCWRhdGFbMF0gPSAwOworCisJCWNsZWFyX2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwl9CisJbXNsZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZiAoIWFkYXB0ZXItPmRldl9jbG9zZWQpCisJCQlpeGdiZXZmX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyAgICAgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfcmVncywKKwkubndheV9yZXNldCAgICAgICAgICAgICA9IGl4Z2JldmZfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yaW5ncGFyYW0gICAgICAgICAgPSBpeGdiZXZmX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBpeGdiZXZmX3NldF9yaW5ncGFyYW0sCisJLmdldF9yeF9jc3VtICAgICAgICAgICAgPSBpeGdiZXZmX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0gICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCisJLmdldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZXZmX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3RzbyAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGl4Z2JldmZfc2V0X3RzbywKKwkuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JldmZfZGlhZ190ZXN0LAorCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gaXhnYmV2Zl9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzLAorfTsKKwordm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZpeGdiZXZmX2V0aHRvb2xfb3BzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTVlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oCkBAIC0wLDAgKzEsMzE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRVZGX0hfCisjZGVmaW5lIF9JWEdCRVZGX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgInZmLmgiCisKKy8qIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlciB0byBhIHNvY2tldCBidWZmZXIsCisgKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBidWZmZXIgKi8KK3N0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CisJdTE2IGxlbmd0aDsKKwl1MTYgbmV4dF90b193YXRjaDsKKwl1MTYgbWFwcGVkX2FzX3BhZ2U7Cit9OworCitzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCBkbWE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBwYWdlX2RtYTsKKwl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgaXhnYmV2Zl9yaW5nIHsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOyAgLyogYmFja2xpbmsgKi8KKwl2b2lkICpkZXNjOwkJCS8qIGRlc2NyaXB0b3IgcmluZyBtZW1vcnkgKi8KKwlkbWFfYWRkcl90IGRtYTsJCQkvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogYW1vdW50IG9mIGRlc2NyaXB0b3JzICovCisJdW5zaWduZWQgaW50IG5leHRfdG9fdXNlOworCXVuc2lnbmVkIGludCBuZXh0X3RvX2NsZWFuOworCisJaW50IHF1ZXVlX2luZGV4OyAvKiBuZWVkZWQgZm9yIG11bHRpcXVldWUgcXVldWUgbWFuYWdlbWVudCAqLworCXVuaW9uIHsKKwkJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwkJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKKwl9OworCisJdTE2IGhlYWQ7CisJdTE2IHRhaWw7CisKKwl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7CisJdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldHM7CisKKwl1MTYgcmVnX2lkeDsgLyogaG9sZHMgdGhlIHNwZWNpYWwgdmFsdWUgdGhhdCBnZXRzIHRoZSBoYXJkd2FyZSByZWdpc3RlcgorCQkgICAgICAqIG9mZnNldCBhc3NvY2lhdGVkIHdpdGggdGhpcyByaW5nLCB3aGljaCBpcyBkaWZmZXJlbnQKKwkJICAgICAgKiBmb3IgRENCIGFuZCBSU1MgbW9kZXMgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKwkvKiBjcHUgZm9yIHR4IHF1ZXVlICovCisJaW50IGNwdTsKKyNlbmRpZgorCisJdTY0IHZfaWR4OyAvKiBtYXBzIGRpcmVjdGx5IHRvIHRoZSBpbmRleCBmb3IgdGhpcyByaW5nIGluIHRoZSBoYXJkd2FyZQorCQkgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCisJCSAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KKworCXUxNiB3b3JrX2xpbWl0OyAgICAgICAgICAgICAgICAvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCisJdTE2IHJ4X2J1Zl9sZW47Cit9OworCitlbnVtIGl4Z2JldmZfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKworc3RydWN0IGl4Z2JldmZfcmluZ19mZWF0dXJlIHsKKwlpbnQgaW5kaWNlczsKKwlpbnQgbWFzazsKK307CisKKy8qIEhvdyBtYW55IFJ4IEJ1ZmZlcnMgZG8gd2UgYnVuZGxlIGludG8gb25lIHdyaXRlIHRvIHRoZSBoYXJkd2FyZSA/ICovCisjZGVmaW5lIElYR0JFVkZfUlhfQlVGRkVSX1dSSVRFCTE2CS8qIE11c3QgYmUgcG93ZXIgb2YgMiAqLworCisjZGVmaW5lIE1BWF9SWF9RVUVVRVMgMQorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEKKworI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfVFhEICAgMTAyNAorI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfUlhEICAgNTEyCisjZGVmaW5lIElYR0JFVkZfTUFYX1RYRCAgICAgICA0MDk2CisjZGVmaW5lIElYR0JFVkZfTUlOX1RYRCAgICAgICA2NAorI2RlZmluZSBJWEdCRVZGX01BWF9SWEQgICAgICAgNDA5NgorI2RlZmluZSBJWEdCRVZGX01JTl9SWEQgICAgICAgNjQKKworLyogU3VwcG9ydGVkIFJ4IEJ1ZmZlciBTaXplcyAqLworI2RlZmluZSBJWEdCRVZGX1JYQlVGRkVSXzY0ICAgIDY0ICAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KKyNkZWZpbmUgSVhHQkVWRl9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCisjZGVmaW5lIElYR0JFVkZfUlhCVUZGRVJfMjU2ICAgMjU2ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLworI2RlZmluZSBJWEdCRVZGX1JYQlVGRkVSXzIwNDggIDIwNDgKKyNkZWZpbmUgSVhHQkVWRl9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBzaW5nbGUgZGVzY3JpcHRvciAqLworCisjZGVmaW5lIElYR0JFVkZfUlhfSERSX1NJWkUgSVhHQkVWRl9SWEJVRkZFUl8yNTYKKworI2RlZmluZSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSAoVkxBTl9FVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pCisKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfQ1NVTQkJKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTgkJKHUzMikoMSA8PCAxKQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19UU08JCSh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfSVBWNAkJKHUzMikoMSA8PCAzKQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19GQ09FCQkodTMyKSgxIDw8IDQpCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX0ZTTwkJKHUzMikoMSA8PCA1KQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0sJMHhmZmZmMDAwMAorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSwkweDAwMDBlMDAwCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKKworLyogTUFYX01TSVhfUV9WRUNUT1JTIG9mIHRoZXNlIGFyZSBhbGxvY2F0ZWQsCisgKiBidXQgd2Ugb25seSB1c2Ugb25lIHBlciBxdWV1ZS1zcGVjaWZpYyB2ZWN0b3IuCisgKi8KK3N0cnVjdCBpeGdiZXZmX3FfdmVjdG9yIHsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCURFQ0xBUkVfQklUTUFQKHJ4cl9pZHgsIE1BWF9SWF9RVUVVRVMpOyAvKiBSeCByaW5nIGluZGljZXMgKi8KKwlERUNMQVJFX0JJVE1BUCh0eHJfaWR4LCBNQVhfVFhfUVVFVUVTKTsgLyogVHggcmluZyBpbmRpY2VzICovCisJdTggcnhyX2NvdW50OyAgICAgLyogUnggcmluZyBjb3VudCBhc3NpZ25lZCB0byB0aGlzIHZlY3RvciAqLworCXU4IHR4cl9jb3VudDsgICAgIC8qIFR4IHJpbmcgY291bnQgYXNzaWduZWQgdG8gdGhpcyB2ZWN0b3IgKi8KKwl1OCB0eF9pdHI7CisJdTggcnhfaXRyOworCXUzMiBlaXRyOworCWludCB2X2lkeDsJICAvKiB2ZWN0b3IgaW5kZXggaW4gbGlzdCAqLworfTsKKworLyogSGVscGVyIG1hY3JvcyB0byBzd2l0Y2ggYmV0d2VlbiBpbnRzL3NlYyBhbmQgd2hhdCB0aGUgcmVnaXN0ZXIgdXNlcy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgorICovCisjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAorCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogOCkKKyNkZWZpbmUgRUlUUl9SRUdfVE9fSU5UU19QRVJfU0VDIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRworCisjZGVmaW5lIElYR0JFX0RFU0NfVU5VU0VEKFIpIFwKKwkoKCgoUiktPm5leHRfdG9fY2xlYW4gPiAoUiktPm5leHRfdG9fdXNlKSA/IDAgOiAoUiktPmNvdW50KSArIFwKKwkoUiktPm5leHRfdG9fY2xlYW4gLSAoUiktPm5leHRfdG9fdXNlIC0gMSkKKworI2RlZmluZSBJWEdCRV9SWF9ERVNDX0FEVihSLCBpKQkgICAgXAorCSgmKCgodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCisjZGVmaW5lIElYR0JFX1RYX0RFU0NfQURWKFIsIGkpCSAgICBcCisJKCYoKCh1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKKyNkZWZpbmUgSVhHQkVfVFhfQ1RYVERFU0NfQURWKFIsIGkpCSAgICBcCisJKCYoKChzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKKworI2RlZmluZSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAgICAgICAgMTYxMjgKKworI2RlZmluZSBPVEhFUl9WRUNUT1IgMQorI2RlZmluZSBOT05fUV9WRUNUT1JTIChPVEhFUl9WRUNUT1IpCisKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIDIKKyNkZWZpbmUgTUFYX01TSVhfQ09VTlQgMgorCisjZGVmaW5lIE1JTl9NU0lYX1FfVkVDVE9SUyAyCisjZGVmaW5lIE1JTl9NU0lYX0NPVU5UIChNSU5fTVNJWF9RX1ZFQ1RPUlMgKyBOT05fUV9WRUNUT1JTKQorCisvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CisjZW5kaWYKKwl1MTYgYmRfbnVtYmVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOworCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA5XTsKKworCS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlICovCisJdTMyIGl0cl9zZXR0aW5nOworCXUxNiBlaXRyX2xvdzsKKwl1MTYgZWl0cl9oaWdoOworCisJLyogVFggKi8KKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nOwkvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLworCWludCBudW1fdHhfcXVldWVzOworCXU2NCByZXN0YXJ0X3F1ZXVlOworCXU2NCBod19jc3VtX3R4X2dvb2Q7CisJdTY0IGxzY19pbnQ7CisJdTY0IGh3X3Rzb19jdHh0OworCXU2NCBod190c282X2N0eHQ7CisJdTMyIHR4X3RpbWVvdXRfY291bnQ7CisJYm9vbCBkZXRlY3RfdHhfaHVuZzsKKworCS8qIFJYICovCisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZzsJLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlpbnQgbnVtX3J4X3F1ZXVlczsKKwlpbnQgbnVtX3J4X3Bvb2xzOyAgICAgICAgICAgICAgIC8qID09IG51bV9yeF9xdWV1ZXMgaW4gODI1OTggKi8KKwlpbnQgbnVtX3J4X3F1ZXVlc19wZXJfcG9vbDsJLyogMSBpZiA4MjU5OCwgY2FuIGJlIG1hbnkgaWYgODI1OTkgKi8KKwl1NjQgaHdfY3N1bV9yeF9lcnJvcjsKKwl1NjQgaHdfcnhfbm9fZG1hX3Jlc291cmNlczsKKwl1NjQgaHdfY3N1bV9yeF9nb29kOworCXU2NCBub25fZW9wX2Rlc2NzOworCWludCBudW1fbXNpeF92ZWN0b3JzOworCWludCBtYXhfbXNpeF9xX3ZlY3RvcnM7ICAgICAgICAgLyogdHJ1ZSBjb3VudCBvZiBxX3ZlY3RvcnMgZm9yIGRldmljZSAqLworCXN0cnVjdCBpeGdiZXZmX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbUklOR19GX0FSUkFZX1NJWkVdOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CisKKwl1NjQgcnhfaGRyX3NwbGl0OworCXUzMiBhbGxvY19yeF9wYWdlX2ZhaWxlZDsKKwl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CisKKwkvKiBTb21lIGZlYXR1cmVzIG5lZWQgdHJpLXN0YXRlIGNhcGFiaWxpdHksCisJICogdGh1cyB0aGUgYWRkaXRpb25hbCAqX0NBUEFCTEUgZmxhZ3MuCisJICovCisJdTMyIGZsYWdzOworI2RlZmluZSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRCAgICAgICAgICAgICAgKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEUgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTUlSX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNSkKKyNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKKyNkZWZpbmUgSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFICAgICAgICAgICAgICh1MzIpKDEgPDwgNykKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgOCkKKwkvKiBPUyBkZWZpbmVkIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKworCS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBpeGdiZV92Zi5oICovCisJc3RydWN0IGl4Z2JlX2h3IGh3OworCXUxNiBtc2dfZW5hYmxlOworCXN0cnVjdCBpeGdiZXZmX2h3X3N0YXRzIHN0YXRzOworCXU2NCB6ZXJvX2Jhc2U7CisJLyogSW50ZXJydXB0IFRocm90dGxlIFJhdGUgKi8KKwl1MzIgZWl0cl9wYXJhbTsKKworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTMyICpjb25maWdfc3BhY2U7CisJdTY0IHR4X2J1c3k7CisJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CisJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CisKKwl1MzIgbGlua19zcGVlZDsKKwlib29sIGxpbmtfdXA7CisJdW5zaWduZWQgbG9uZyBsaW5rX2NoZWNrX3RpbWVvdXQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKKwlib29sIG5ldGRldl9yZWdpc3RlcmVkOworCWJvb2wgZGV2X2Nsb3NlZDsKK307CisKK2VudW0gaXhiZ2V2Zl9zdGF0ZV90IHsKKwlfX0lYR0JFVkZfVEVTVElORywKKwlfX0lYR0JFVkZfUkVTRVRUSU5HLAorCV9fSVhHQkVWRl9ET1dOCit9OworCitlbnVtIGl4Z2JldmZfYm9hcmRzIHsKKwlib2FyZF84MjU5OV92ZiwKK307CisKK2V4dGVybiBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfdmZfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9tYnhfb3BzOworCisvKiBuZWVkZWQgYnkgZXRodG9vbC5jICovCitleHRlcm4gY2hhciBpeGdiZXZmX2RyaXZlcl9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uW107CisKK2V4dGVybiBpbnQgaXhnYmV2Zl91cChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfZG93bihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfcmVpbml0X2xvY2tlZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfcmVzZXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiBpbnQgaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKik7CitleHRlcm4gaW50IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiwKKwkJCQkgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICopOworZXh0ZXJuIHZvaWQgaXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICosCisJCQkJICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKKworI2lmZGVmIEVUSFRPT0xfT1BTX0NPTVBBVAorZXh0ZXJuIGludCBldGh0b29sX2lvY3RsKHN0cnVjdCBpZnJlcSAqaWZyKTsKKworI2VuZGlmCitleHRlcm4gdm9pZCBpeGdiZV9uYXBpX2FkZF9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZV9uYXBpX2RlbF9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CisKKyNpZmRlZiBERUJVRworZXh0ZXJuIGNoYXIgKml4Z2JldmZfZ2V0X2h3X2Rldl9uYW1lKHN0cnVjdCBpeGdiZV9odyAqaHcpOworI2RlZmluZSBod19kYmcoaHcsIGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwgaXhnYmV2Zl9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKKyNlbHNlCisjZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfSVhHQkVWRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1YjVmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTAsMCArMSwzNTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBDb3B5cmlnaHQgKGMpMjAwNiAtIDIwMDcgTXlyaWNvbSwgSW5jLiBmb3Igc29tZSBMUk8gc3BlY2lmaWMgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisKKyNpbmNsdWRlICJpeGdiZXZmLmgiCisKK2NoYXIgaXhnYmV2Zl9kcml2ZXJfbmFtZVtdID0gIml4Z2JldmYiOworc3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9kcml2ZXJfc3RyaW5nW10gPQorCSJJbnRlbChSKSA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIjsKKworI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjAtazAiCitjb25zdCBjaGFyIGl4Z2JldmZfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOworc3RhdGljIGNoYXIgaXhnYmV2Zl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gKml4Z2JldmZfaW5mb190YmxbXSA9IHsKKwlbYm9hcmRfODI1OTlfdmZdID0gJml4Z2JldmZfdmZfaW5mbywKK307CisKKy8qIGl4Z2JldmZfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqCisgKiBXaWxkY2FyZCBlbnRyaWVzIChQQ0lfQU5ZX0lEKSBzaG91bGQgY29tZSBsYXN0CisgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCisgKgorICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCisgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZXZmX3BjaV90YmxbXSA9IHsKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9WRiksCisJYm9hcmRfODI1OTlfdmZ9LAorCisJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLworCXswLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl4Z2JldmZfcGNpX3RibCk7CisKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uLCA8bGludXgubmljc0BpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsKFIpIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKKyNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCisKKy8qIGZvcndhcmQgZGVjbHMgKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0X2l0cl9tc2l4KHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3Rvcik7CitzdGF0aWMgdm9pZCBpeGdiZXZmX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LAorCQkJICAgICAgIHUzMiBpdHJfcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCSAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcsCisJCQkJCSAgIHUzMiB2YWwpCit7CisJLyoKKwkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKKwkgKiBzdWNoIGFzIElBLTY0KS4KKwkgKi8KKwl3bWIoKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworfQorCisvKgorICogaXhnYmVfc2V0X2l2YXIgLSBzZXQgdGhlIElWQVIgcmVnaXN0ZXJzLCBtYXBwaW5nIGludGVycnVwdCBjYXVzZXMgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEBkaXJlY3Rpb246IDAgZm9yIFJ4LCAxIGZvciBUeCwgLTEgZm9yIG90aGVyIGNhdXNlcworICogQHF1ZXVlOiBxdWV1ZSB0byBtYXAgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvCisgKiBAbXNpeF92ZWN0b3I6IHRoZSB2ZWN0b3IgdG8gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlCisgKgorICovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdmFyKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHM4IGRpcmVjdGlvbiwKKwkJCSAgICAgdTggcXVldWUsIHU4IG1zaXhfdmVjdG9yKQoreworCXUzMiBpdmFyLCBpbmRleDsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChkaXJlY3Rpb24gPT0gLTEpIHsKKwkJLyogb3RoZXIgY2F1c2VzICovCisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUl9NSVNDKTsKKwkJaXZhciAmPSB+MHhGRjsKKwkJaXZhciB8PSBtc2l4X3ZlY3RvcjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVElWQVJfTUlTQywgaXZhcik7CisJfSBlbHNlIHsKKwkJLyogdHggb3IgcnggY2F1c2VzICovCisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpbmRleCA9ICgoMTYgKiAocXVldWUgJiAxKSkgKyAoOCAqIGRpcmVjdGlvbikpOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUihxdWV1ZSA+PiAxKSk7CisJCWl2YXIgJj0gfigweEZGIDw8IGluZGV4KTsKKwkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZUSVZBUihxdWV1ZSA+PiAxKSwgaXZhcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIKKwkJCQkJICAgICAgICp0eF9idWZmZXJfaW5mbykKK3sKKwlpZiAodHhfYnVmZmVyX2luZm8tPmRtYSkgeworCQlpZiAodHhfYnVmZmVyX2luZm8tPm1hcHBlZF9hc19wYWdlKQorCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgICAgdHhfYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkgICAgICAgdHhfYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCWVsc2UKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJIHR4X2J1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSB0eF9idWZmZXJfaW5mby0+bGVuZ3RoLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOworCX0KKwlpZiAodHhfYnVmZmVyX2luZm8tPnNrYikgeworCQlkZXZfa2ZyZWVfc2tiX2FueSh0eF9idWZmZXJfaW5mby0+c2tiKTsKKwkJdHhfYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQorCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKKwkvKiB0eF9idWZmZXJfaW5mbyBtdXN0IGJlIGNvbXBsZXRlbHkgc2V0IHVwIGluIHRoZSB0cmFuc21pdCBwYXRoICovCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZXZmX2NoZWNrX3R4X2hhbmcoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCQkJCSB1bnNpZ25lZCBpbnQgZW9wKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGhlYWQsIHRhaWw7CisKKwkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCisJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgZW9wICovCisJaGVhZCA9IHJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7CisJdGFpbCA9IHJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CisJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKKwlpZiAoKGhlYWQgIT0gdGFpbCkgJiYKKwkgICAgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopKSB7CisJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLworCQl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYzsKKwkJdHhfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCQlwcmludGsoS0VSTl9FUlIgIkRldGVjdGVkIFR4IFVuaXQgSGFuZ1xuIgorCQkgICAgICAgIiAgVHggUXVldWUgICAgICAgICAgICAgPCVkPlxuIgorCQkgICAgICAgIiAgVERILCBURFQgICAgICAgICAgICAgPCV4PiwgPCV4PlxuIgorCQkgICAgICAgIiAgbmV4dF90b191c2UgICAgICAgICAgPCV4PlxuIgorCQkgICAgICAgIiAgbmV4dF90b19jbGVhbiAgICAgICAgPCV4PlxuIgorCQkgICAgICAgInR4X2J1ZmZlcl9pbmZvW25leHRfdG9fY2xlYW5dXG4iCisJCSAgICAgICAiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgorCQkgICAgICAgIiAgamlmZmllcyAgICAgICAgICAgICAgPCVseD5cbiIsCisJCSAgICAgICB0eF9yaW5nLT5xdWV1ZV9pbmRleCwKKwkJICAgICAgIGhlYWQsIHRhaWwsCisJCSAgICAgICB0eF9yaW5nLT5uZXh0X3RvX3VzZSwgZW9wLAorCQkgICAgICAgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLCBqaWZmaWVzKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElYR0JFX01BWF9UWERfUFdSCTE0CisjZGVmaW5lIElYR0JFX01BWF9EQVRBX1BFUl9UWEQJKDEgPDwgSVhHQkVfTUFYX1RYRF9QV1IpCisKKy8qIFR4IERlc2NyaXB0b3JzIG5lZWRlZCwgd29yc3QgY2FzZSAqLworI2RlZmluZSBUWERfVVNFX0NPVU5UKFMpICgoKFMpID4+IElYR0JFX01BWF9UWERfUFdSKSArIFwKKwkJCSAoKChTKSAmIChJWEdCRV9NQVhfREFUQV9QRVJfVFhEIC0gMSkpID8gMSA6IDApKQorI2lmZGVmIE1BWF9TS0JfRlJBR1MKKyNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAorCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAgICAgIC8qIGZvciBjb250ZXh0ICovCisjZWxzZQorI2RlZmluZSBERVNDX05FRURFRCBUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiB0eCByaW5nIHRvIGNsZWFuCisgKiovCitzdGF0aWMgYm9vbCBpeGdiZXZmX2NsZWFuX3R4X2lycShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdW5zaWduZWQgaW50IGksIGVvcCwgY291bnQgPSAwOworCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlcyA9IDAsIHRvdGFsX3BhY2tldHMgPSAwOworCisJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CisJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCisJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgeworCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CisJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOworCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKKworCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7CisJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKKworCQkJCS8qIGdzb19zZWdzIGlzIGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciB0Y3AgKi8KKwkJCQlzZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA/OiAxOworCQkJCS8qIG11bHRpcGx5IGRhdGEgY2h1bmtzIGJ5IHNpemUgb2YgaGVhZGVycyAqLworCQkJCWJ5dGVjb3VudCA9ICgoc2VncyAtIDEpICogc2tiX2hlYWRsZW4oc2tiKSkgKworCQkJCQkgICAgc2tiLT5sZW47CisJCQkJdG90YWxfcGFja2V0cyArPSBzZWdzOworCQkJCXRvdGFsX2J5dGVzICs9IGJ5dGVjb3VudDsKKwkJCX0KKworCQkJaXhnYmV2Zl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAorCQkJCQkJCSAgIHR4X2J1ZmZlcl9pbmZvKTsKKworCQkJdHhfZGVzYy0+d2Iuc3RhdHVzID0gMDsKKworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KKworCQllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCQllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCX0KKworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCisjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCisJaWYgKHVubGlrZWx5KGNvdW50ICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgorCQkgICAgIChJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CisJCS8qIE1ha2Ugc3VyZSB0aGF0IGFueWJvZHkgc3RvcHBpbmcgdGhlIHF1ZXVlIGFmdGVyIHRoaXMKKwkJICogc2VlcyB0aGUgbmV3IG5leHRfdG9fY2xlYW4uCisJCSAqLworCQlzbXBfbWIoKTsKKyNpZmRlZiBIQVZFX1RYX01RCisJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCkgJiYKKwkJICAgICF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKwkJCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKKwkJfQorI2Vsc2UKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJgorCQkgICAgIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgeworCQlpZiAoaXhnYmV2Zl9jaGVja190eF9oYW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGkpKSB7CisJCQkvKiBzY2hlZHVsZSBpbW1lZGlhdGUgcmVzZXQgaWYgd2UgYmVsaWV2ZSB3ZSBodW5nICovCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInR4IGhhbmcgJWQgZGV0ZWN0ZWQsIHJlc2V0dGluZyBhZGFwdGVyXG4iLAorCQkJICAgICAgIGFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQgKyAxKTsKKwkJCWl4Z2JldmZfdHhfdGltZW91dChhZGFwdGVyLT5uZXRkZXYpOworCQl9CisJfQorCisJLyogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgKi8KKwlpZiAoKGNvdW50ID49IHR4X3JpbmctPndvcmtfbGltaXQpICYmCisJICAgICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSUNTLCB0eF9yaW5nLT52X2lkeCk7CisJfQorCisJdHhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CisJdHhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjaworICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb24KKyAqIEBza2I6IHBhY2tldCB0byBzZW5kIHVwCisgKiBAc3RhdHVzOiBoYXJkd2FyZSBpbmRpY2F0aW9uIG9mIHN0YXR1cyBvZiByZWNlaXZlCisgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBxdWV1ZSkgdG8gc2V0dXAKKyAqIEByeF9kZXNjOiByeCBkZXNjcmlwdG9yCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3JlY2VpdmVfc2tiKHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzdGF0dXMsCisJCQkJc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZywKKwkJCQl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKKwl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CisJaW50IHJldDsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgeworCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbikKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnFfdmVjdG9yLT5uYXBpLAorCQkJCQkgYWRhcHRlci0+dmxncnAsCisJCQkJCSB0YWcsIHNrYik7CisJCWVsc2UKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnFfdmVjdG9yLT5uYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT52bGdycCAmJiBpc192bGFuKQorCQkJcmV0ID0gdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsIHRhZyk7CisJCWVsc2UKKwkJCXJldCA9IG5ldGlmX3J4KHNrYik7CisJfQorfQorCisvKioKKyAqIGl4Z2JldmZfcnhfY2hlY2tzdW0gLSBpbmRpY2F0ZSBpbiBza2IgaWYgaHcgaW5kaWNhdGVkIGEgZ29vZCBja3N1bQorICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBzdGF0dXNfZXJyOiBoYXJkd2FyZSBpbmRpY2F0aW9uIG9mIHN0YXR1cyBvZiByZWNlaXZlCisgKiBAc2tiOiBza2IgY3VycmVudGx5IGJlaW5nIHJlY2VpdmVkIGFuZCBtb2RpZmllZAorICoqLworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcnhfY2hlY2tzdW0oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICAgdTMyIHN0YXR1c19lcnIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJLyogUnggY3N1bSBkaXNhYmxlZCAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQpKQorCQlyZXR1cm47CisKKwkvKiBpZiBJUCBhbmQgZXJyb3IgKi8KKwlpZiAoKHN0YXR1c19lcnIgJiBJWEdCRV9SWERfU1RBVF9JUENTKSAmJgorCSAgICAoc3RhdHVzX2VyciAmIElYR0JFX1JYREFEVl9FUlJfSVBFKSkgeworCQlhZGFwdGVyLT5od19jc3VtX3J4X2Vycm9yKys7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShzdGF0dXNfZXJyICYgSVhHQkVfUlhEX1NUQVRfTDRDUykpCisJCXJldHVybjsKKworCWlmIChzdGF0dXNfZXJyICYgSVhHQkVfUlhEQURWX0VSUl9UQ1BFKSB7CisJCWFkYXB0ZXItPmh3X2NzdW1fcnhfZXJyb3IrKzsKKwkJcmV0dXJuOworCX0KKworCS8qIEl0IG11c3QgYmUgYSBUQ1Agb3IgVURQIHBhY2tldCB3aXRoIGEgdmFsaWQgY2hlY2tzdW0gKi8KKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWFkYXB0ZXItPmh3X2NzdW1fcnhfZ29vZCsrOworfQorCisvKioKKyAqIGl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAorICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZywKKwkJCQkgICAgIGludCBjbGVhbmVkX2NvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgKmJpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGJ1ZnN6ID0gcnhfcmluZy0+cnhfYnVmX2xlbiArIE5FVF9JUF9BTElHTjsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKKwliaSA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKworCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKKwkJcnhfZGVzYyA9IElYR0JFX1JYX0RFU0NfQURWKCpyeF9yaW5nLCBpKTsKKworCQlpZiAoIWJpLT5wYWdlX2RtYSAmJgorCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSkgeworCQkJaWYgKCFiaS0+cGFnZSkgeworCQkJCWJpLT5wYWdlID0gbmV0ZGV2X2FsbG9jX3BhZ2UoYWRhcHRlci0+bmV0ZGV2KTsKKwkJCQlpZiAoIWJpLT5wYWdlKSB7CisJCQkJCWFkYXB0ZXItPmFsbG9jX3J4X3BhZ2VfZmFpbGVkKys7CisJCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCQl9CisJCQkJYmktPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJLyogdXNlIGEgaGFsZiBwYWdlIGlmIHdlJ3JlIHJlLXVzaW5nICovCisJCQkJYmktPnBhZ2Vfb2Zmc2V0IF49IChQQUdFX1NJWkUgLyAyKTsKKwkJCX0KKworCQkJYmktPnBhZ2VfZG1hID0gcGNpX21hcF9wYWdlKHBkZXYsIGJpLT5wYWdlLAorCQkJCQkJICAgIGJpLT5wYWdlX29mZnNldCwKKwkJCQkJCSAgICAoUEFHRV9TSVpFIC8gMiksCisJCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCisJCXNrYiA9IGJpLT5za2I7CisJCWlmICghc2tiKSB7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJCQkgICAgICAgYnVmc3opOworCisJCQlpZiAoIXNrYikgeworCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQkJZ290byBub19idWZmZXJzOworCQkJfQorCisJCQkvKgorCQkJICogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQorCQkJICogdGhpcyB3aWxsIHJlc3VsdCBpbiBhIDE2IGJ5dGUgYWxpZ25lZCBJUCBoZWFkZXIgYWZ0ZXIKKwkJCSAqIHRoZSAxNCBieXRlIE1BQyBoZWFkZXIgaXMgcmVtb3ZlZAorCQkJICovCisJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKKwkJCWJpLT5za2IgPSBza2I7CisJCX0KKwkJaWYgKCFiaS0+ZG1hKSB7CisJCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkJCQkJIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCQkvKiBSZWZyZXNoIHRoZSBkZXNjIGV2ZW4gaWYgYnVmZmVyX2FkZHJzIGRpZG4ndCBjaGFuZ2UgYmVjYXVzZQorCQkgKiBlYWNoIHdyaXRlLWJhY2sgZXJhc2VzIHRoaXMgaW5mby4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYmktPnBhZ2VfZG1hKTsKKwkJCXJ4X2Rlc2MtPnJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NChiaS0+ZG1hKTsKKwkJfSBlbHNlIHsKKwkJCXJ4X2Rlc2MtPnJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChiaS0+ZG1hKTsKKwkJfQorCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisJfQorCitub19idWZmZXJzOgorCWlmIChyeF9yaW5nLT5uZXh0X3RvX3VzZSAhPSBpKSB7CisJCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwkJaWYgKGktLSA9PSAwKQorCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOworCisJCWl4Z2JldmZfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgcnhfcmluZywgaSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgIHU2NCBxbWFzaykKK3sKKwl1MzIgbWFzazsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJbWFzayA9IChxbWFzayAmIDB4RkZGRkZGRkYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1TLCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXhnYmV2Zl9nZXRfaGRyX2luZm8odW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5oZHJfaW5mbzsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXhnYmV2Zl9nZXRfcGt0X2luZm8odW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKK30KKworc3RhdGljIGJvb2wgaXhnYmV2Zl9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yLAorCQkJCSBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nLAorCQkJCSBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYywgKm5leHRfcnhkOworCXN0cnVjdCBpeGdiZXZmX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXUzMiBsZW4sIHN0YXRlcnI7CisJdTE2IGhkcl9pbmZvOworCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCWludCBjbGVhbmVkX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXMgPSAwLCB0b3RhbF9yeF9wYWNrZXRzID0gMDsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCXJ4X2Rlc2MgPSBJWEdCRV9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CisJcnhfYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisKKwl3aGlsZSAoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX0REKSB7CisJCXUzMiB1cHBlcl9sZW4gPSAwOworCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQorCQkJYnJlYWs7CisJCSgqd29ya19kb25lKSsrOworCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQkJaGRyX2luZm8gPSBsZTE2X3RvX2NwdShpeGdiZXZmX2dldF9oZHJfaW5mbyhyeF9kZXNjKSk7CisJCQlsZW4gPSAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0spID4+CisJCQkgICAgICAgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9TSElGVDsKKwkJCWlmIChoZHJfaW5mbyAmIElYR0JFX1JYREFEVl9TUEgpCisJCQkJYWRhcHRlci0+cnhfaGRyX3NwbGl0Kys7CisJCQlpZiAobGVuID4gSVhHQkVWRl9SWF9IRFJfU0laRSkKKwkJCQlsZW4gPSBJWEdCRVZGX1JYX0hEUl9TSVpFOworCQkJdXBwZXJfbGVuID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7CisJCX0KKwkJY2xlYW5lZCA9IHRydWU7CisJCXNrYiA9IHJ4X2J1ZmZlcl9pbmZvLT5za2I7CisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWlmIChyeF9idWZmZXJfaW5mby0+ZG1hKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJ4X2J1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQkJc2tiX3B1dChza2IsIGxlbik7CisJCX0KKworCQlpZiAodXBwZXJfbGVuKSB7CisJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCByeF9idWZmZXJfaW5mby0+cGFnZV9kbWEsCisJCQkJICAgICAgIFBBR0VfU0laRSAvIDIsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeF9idWZmZXJfaW5mby0+cGFnZV9kbWEgPSAwOworCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywKKwkJCQkJICAgcnhfYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJCSAgIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKKwkJCQkJICAgdXBwZXJfbGVuKTsKKworCQkJaWYgKChyeF9yaW5nLT5yeF9idWZfbGVuID4gKFBBR0VfU0laRSAvIDIpKSB8fAorCQkJICAgIChwYWdlX2NvdW50KHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKSAhPSAxKSkKKwkJCQlyeF9idWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCQllbHNlCisJCQkJZ2V0X3BhZ2UocnhfYnVmZmVyX2luZm8tPnBhZ2UpOworCisJCQlza2ItPmxlbiArPSB1cHBlcl9sZW47CisJCQlza2ItPmRhdGFfbGVuICs9IHVwcGVyX2xlbjsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gdXBwZXJfbGVuOworCQl9CisKKwkJaSsrOworCQlpZiAoaSA9PSByeF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCisJCW5leHRfcnhkID0gSVhHQkVfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOworCQlwcmVmZXRjaChuZXh0X3J4ZCk7CisJCWNsZWFuZWRfY291bnQrKzsKKworCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKworCQlpZiAoIShzdGF0ZXJyICYgSVhHQkVfUlhEX1NUQVRfRU9QKSkgeworCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IG5leHRfYnVmZmVyLT5za2I7CisJCQkJcnhfYnVmZmVyX2luZm8tPmRtYSA9IG5leHRfYnVmZmVyLT5kbWE7CisJCQkJbmV4dF9idWZmZXItPnNrYiA9IHNrYjsKKwkJCQluZXh0X2J1ZmZlci0+ZG1hID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJc2tiLT5uZXh0ID0gbmV4dF9idWZmZXItPnNrYjsKKwkJCQlza2ItPm5leHQtPnByZXYgPSBza2I7CisJCQl9CisJCQlhZGFwdGVyLT5ub25fZW9wX2Rlc2NzKys7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCisJCS8qIEVSUl9NQVNLIHdpbGwgb25seSBoYXZlIHZhbGlkIGJpdHMgaWYgRU9QIHNldCAqLworCQlpZiAodW5saWtlbHkoc3RhdGVyciAmIElYR0JFX1JYREFEVl9FUlJfRlJBTUVfRVJSX01BU0spKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJZ290byBuZXh0X2Rlc2M7CisJCX0KKworCQlpeGdiZXZmX3J4X2NoZWNrc3VtKGFkYXB0ZXIsIHN0YXRlcnIsIHNrYik7CisKKwkJLyogcHJvYmFibHkgYSBsaXR0bGUgc2tld2VkIGR1ZSB0byByZW1vdmluZyBDUkMgKi8KKwkJdG90YWxfcnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXRvdGFsX3J4X3BhY2tldHMrKzsKKworCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBpc3N1ZSBvZiBzb21lIHR5cGVzIG9mIFZNIHRvIFZNIGxvb3AgYmFjaworCQkgKiBwYWNrZXRzIG5vdCBnZXR0aW5nIHNwbGl0IGNvcnJlY3RseQorCQkgKi8KKwkJaWYgKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9MQikgeworCQkJdTMyIGhlYWRlcl9maXh1cF9sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCQlpZiAoaGVhZGVyX2ZpeHVwX2xlbiA8IDE0KQorCQkJCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2ZpeHVwX2xlbik7CisJCX0KKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlpeGdiZXZmX3JlY2VpdmVfc2tiKHFfdmVjdG9yLCBza2IsIHN0YXRlcnIsIHJ4X3JpbmcsIHJ4X2Rlc2MpOworCQlhZGFwdGVyLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCituZXh0X2Rlc2M6CisJCXJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvciA9IDA7CisKKwkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLworCQlpZiAoY2xlYW5lZF9jb3VudCA+PSBJWEdCRVZGX1JYX0JVRkZFUl9XUklURSkgeworCQkJaXhnYmV2Zl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIHJ4X3JpbmcsCisJCQkJCQkgY2xlYW5lZF9jb3VudCk7CisJCQljbGVhbmVkX2NvdW50ID0gMDsKKwkJfQorCisJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLworCQlyeF9kZXNjID0gbmV4dF9yeGQ7CisJCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOworCisJCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOworCX0KKworCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCWNsZWFuZWRfY291bnQgPSBJWEdCRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKKworCWlmIChjbGVhbmVkX2NvdW50KQorCQlpeGdiZXZmX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisKKwlyeF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisJcnhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfcnhfYnl0ZXM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisKKwlyZXR1cm4gY2xlYW5lZDsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3J4b25seSAtIG1zaXggKGFrYSBvbmUgc2hvdCkgcnggY2xlYW4gcm91dGluZQorICogQG5hcGk6IG5hcGkgc3RydWN0IHdpdGggb3VyIGRldmljZXMgaW5mbyBpbiBpdAorICogQGJ1ZGdldDogYW1vdW50IG9mIHdvcmsgZHJpdmVyIGlzIGFsbG93ZWQgdG8gZG8gdGhpcyBwYXNzLCBpbiBwYWNrZXRzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIGNsZWFuaW5nIG9uZSBxdWV1ZSBvbmx5IG9uIGEgc2luZ2xlCisgKiBxX3ZlY3RvciEhIQorICoqLworc3RhdGljIGludCBpeGdiZXZmX2NsZWFuX3J4b25seShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yLCBuYXBpKTsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZyA9IE5VTEw7CisJaW50IHdvcmtfZG9uZSA9IDA7CisJbG9uZyByX2lkeDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKworCWl4Z2JldmZfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOworCisJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQorCQkJaXhnYmV2Zl9zZXRfaXRyX21zaXgocV92ZWN0b3IpOworCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCByeF9yaW5nLT52X2lkeCk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3J4b25seV9tYW55IC0gbXNpeCAoYWthIG9uZSBzaG90KSByeCBjbGVhbiByb3V0aW5lCisgKiBAbmFwaTogbmFwaSBzdHJ1Y3Qgd2l0aCBvdXIgZGV2aWNlcyBpbmZvIGluIGl0CisgKiBAYnVkZ2V0OiBhbW91bnQgb2Ygd29yayBkcml2ZXIgaXMgYWxsb3dlZCB0byBkbyB0aGlzIHBhc3MsIGluIHBhY2tldHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYW4gbW9yZSB0aGFuIG9uZSByeCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggYQorICogcV92ZWN0b3IuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfY2xlYW5fcnhvbmx5X21hbnkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciwgbmFwaSk7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcgPSBOVUxMOworCWludCB3b3JrX2RvbmUgPSAwLCBpOworCWxvbmcgcl9pZHg7CisJdTY0IGVuYWJsZV9tYXNrID0gMDsKKworCS8qIGF0dGVtcHQgdG8gZGlzdHJpYnV0ZSBidWRnZXQgdG8gZWFjaCBxdWV1ZSBmYWlybHksIGJ1dCBkb24ndCBhbGxvdworCSAqIHRoZSBidWRnZXQgdG8gZ28gYmVsb3cgMSBiZWNhdXNlIHdlJ2xsIGV4aXQgcG9sbGluZyAqLworCWJ1ZGdldCAvPSAocV92ZWN0b3ItPnJ4cl9jb3VudCA/OiAxKTsKKwlidWRnZXQgPSBtYXgoYnVkZ2V0LCAxKTsKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJaXhnYmV2Zl9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCWVuYWJsZV9tYXNrIHw9IHJ4X3JpbmctPnZfaWR4OworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKyNpZm5kZWYgSEFWRV9ORVRERVZfTkFQSV9MSVNUCisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCisJCXdvcmtfZG9uZSA9IDA7CisKKyNlbmRpZgorCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKworCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKKwkJCWl4Z2JldmZfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCWl4Z2JldmZfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlciwgZW5hYmxlX21hc2spOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKworLyoqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV9tc2l4IC0gQ29uZmlndXJlIE1TSS1YIGhhcmR3YXJlCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV9tc2l4IHNldHMgdXAgdGhlIGhhcmR3YXJlIHRvIHByb3Blcmx5IGdlbmVyYXRlIE1TSS1YCisgKiBpbnRlcnJ1cHRzLgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfbXNpeChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpLCBqLCBxX3ZlY3RvcnMsIHZfaWR4LCByX2lkeDsKKwl1MzIgbWFzazsKKworCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCisJICovCisJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CisJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOworCQkvKiBYWFggZm9yX2VhY2hfYml0KC4uLikgKi8KKwkJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKKwkJCQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlpeGdiZXZmX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKKwkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKKwkJCQkJICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkJCQkJICAgICAgcl9pZHggKyAxKTsKKwkJfQorCQlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LAorCQkJCSAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKKwkJCWl4Z2JldmZfc2V0X2l2YXIoYWRhcHRlciwgMSwgaiwgdl9pZHgpOworCQkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LAorCQkJCQkgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkJCQkgICAgICByX2lkeCArIDEpOworCQl9CisKKwkJLyogaWYgdGhpcyBpcyBhIHR4IG9ubHkgdmVjdG9yIGhhbHZlIHRoZSBpbnRlcnJ1cHQgcmF0ZSAqLworCQlpZiAocV92ZWN0b3ItPnR4cl9jb3VudCAmJiAhcV92ZWN0b3ItPnJ4cl9jb3VudCkKKwkJCXFfdmVjdG9yLT5laXRyID0gKGFkYXB0ZXItPmVpdHJfcGFyYW0gPj4gMSk7CisJCWVsc2UgaWYgKHFfdmVjdG9yLT5yeHJfY291bnQpCisJCQkvKiByeCBvbmx5ICovCisJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CisKKwkJaXhnYmV2Zl93cml0ZV9laXRyKGFkYXB0ZXIsIHZfaWR4LCBxX3ZlY3Rvci0+ZWl0cik7CisJfQorCisJaXhnYmV2Zl9zZXRfaXZhcihhZGFwdGVyLCAtMSwgMSwgdl9pZHgpOworCisJLyogc2V0IHVwIHRvIGF1dG9jbGVhciB0aW1lciwgYW5kIHRoZSB2ZWN0b3JzICovCisJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CisJbWFzayAmPSB+SVhHQkVfRUlNU19PVEhFUjsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlBQywgbWFzayk7Cit9CisKK2VudW0gbGF0ZW5jeV9yYW5nZSB7CisJbG93ZXN0X2xhdGVuY3kgPSAwLAorCWxvd19sYXRlbmN5ID0gMSwKKwlidWxrX2xhdGVuY3kgPSAyLAorCWxhdGVuY3lfaW52YWxpZCA9IDI1NQorfTsKKworLyoqCisgKiBpeGdiZXZmX3VwZGF0ZV9pdHIgLSB1cGRhdGUgdGhlIGR5bmFtaWMgSVRSIHZhbHVlIGJhc2VkIG9uIHN0YXRpc3RpY3MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIKKyAqIEBlaXRyOiBlaXRyIHNldHRpbmcgKGludHMgcGVyIHNlYykgdG8gZ2l2ZSBsYXN0IHRpbWVzbGljZQorICogQGl0cl9zZXR0aW5nOiBjdXJyZW50IHRocm90dGxlIHJhdGUgaW4gaW50cy9zZWNvbmQKKyAqIEBwYWNrZXRzOiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAorICoKKyAqICAgICAgU3RvcmVzIGEgbmV3IElUUiB2YWx1ZSBiYXNlZCBvbiBwYWNrZXRzIGFuZCBieXRlCisgKiAgICAgIGNvdW50cyBkdXJpbmcgdGhlIGxhc3QgaW50ZXJydXB0LiAgVGhlIGFkdmFudGFnZSBvZiBwZXIgaW50ZXJydXB0CisgKiAgICAgIGNvbXB1dGF0aW9uIGlzIGZhc3RlciB1cGRhdGVzIGFuZCBtb3JlIGFjY3VyYXRlIElUUiBmb3IgdGhlIGN1cnJlbnQKKyAqICAgICAgdHJhZmZpYyBwYXR0ZXJuLiAgQ29uc3RhbnRzIGluIHRoaXMgZnVuY3Rpb24gd2VyZSBjb21wdXRlZAorICogICAgICBiYXNlZCBvbiB0aGVvcmV0aWNhbCBtYXhpbXVtIHdpcmUgc3BlZWQgYW5kIHRocmVzaG9sZHMgd2VyZSBzZXQgYmFzZWQKKyAqICAgICAgb24gdGVzdGluZyBkYXRhIGFzIHdlbGwgYXMgYXR0ZW1wdGluZyB0byBtaW5pbWl6ZSByZXNwb25zZSB0aW1lCisgKiAgICAgIHdoaWxlIGluY3JlYXNpbmcgYnVsayB0aHJvdWdocHV0LgorICoqLworc3RhdGljIHU4IGl4Z2JldmZfdXBkYXRlX2l0cihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICB1MzIgZWl0ciwgdTggaXRyX3NldHRpbmcsCisJCQkgICAgIGludCBwYWNrZXRzLCBpbnQgYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IHJldHZhbCA9IGl0cl9zZXR0aW5nOworCXUzMiB0aW1lcGFzc2VkX3VzOworCXU2NCBieXRlc19wZXJpbnQ7CisKKwlpZiAocGFja2V0cyA9PSAwKQorCQlnb3RvIHVwZGF0ZV9pdHJfZG9uZTsKKworCisJLyogc2ltcGxlIHRocm90dGxlcmF0ZSBtYW5hZ2VtZW50CisJICogICAgMC0yME1CL3MgbG93ZXN0ICgxMDAwMDAgaW50cy9zKQorCSAqICAgMjAtMTAwTUIvcyBsb3cgICAoMjAwMDAgaW50cy9zKQorCSAqICAxMDAtMTI0OU1CL3MgYnVsayAoODAwMCBpbnRzL3MpCisJICovCisJLyogd2hhdCB3YXMgbGFzdCBpbnRlcnJ1cHQgdGltZXNsaWNlPyAqLworCXRpbWVwYXNzZWRfdXMgPSAxMDAwMDAwL2VpdHI7CisJYnl0ZXNfcGVyaW50ID0gYnl0ZXMgLyB0aW1lcGFzc2VkX3VzOyAvKiBieXRlcy91c2VjICovCisKKwlzd2l0Y2ggKGl0cl9zZXR0aW5nKSB7CisJY2FzZSBsb3dlc3RfbGF0ZW5jeToKKwkJaWYgKGJ5dGVzX3BlcmludCA+IGFkYXB0ZXItPmVpdHJfbG93KQorCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCWJyZWFrOworCWNhc2UgbG93X2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPiBhZGFwdGVyLT5laXRyX2hpZ2gpCisJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7CisJCWVsc2UgaWYgKGJ5dGVzX3BlcmludCA8PSBhZGFwdGVyLT5laXRyX2xvdykKKwkJCXJldHZhbCA9IGxvd2VzdF9sYXRlbmN5OworCQlicmVhazsKKwljYXNlIGJ1bGtfbGF0ZW5jeToKKwkJaWYgKGJ5dGVzX3BlcmludCA8PSBhZGFwdGVyLT5laXRyX2hpZ2gpCisJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKKwkJYnJlYWs7CisJfQorCit1cGRhdGVfaXRyX2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBpeGdiZXZmX3dyaXRlX2VpdHIgLSB3cml0ZSBWVEVJVFIgcmVnaXN0ZXIgaW4gaGFyZHdhcmUgc3BlY2lmaWMgd2F5CisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIHN0cnVjdAorICogQHZfaWR4OiB2ZWN0b3IgaW5kZXggaW50byBxX3ZlY3RvciBhcnJheQorICogQGl0cl9yZWc6IG5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIGluICpyZWdpc3RlciogZm9ybWF0LCBub3QgaW50cy9zCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBtYWRlIHRvIGJlIGNhbGxlZCBieSBldGh0b29sIGFuZCBieSB0aGUgZHJpdmVyCisgKiB3aGVuIGl0IG5lZWRzIHRvIHVwZGF0ZSBWVEVJVFIgcmVnaXN0ZXJzIGF0IHJ1bnRpbWUuICBIYXJkd2FyZQorICogc3BlY2lmaWMgcXVpcmtzL2RpZmZlcmVuY2VzIGFyZSB0YWtlbiBjYXJlIG9mIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCBpbnQgdl9pZHgsCisJCQkgICAgICAgdTMyIGl0cl9yZWcpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoaXRyX3JlZyk7CisKKwkvKgorCSAqIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhbgorCSAqIGltbWVkaWF0ZSBhc3NlcnRpb24gb2YgdGhlIGludGVycnVwdAorCSAqLworCWl0cl9yZWcgfD0gSVhHQkVfRUlUUl9DTlRfV0RJUzsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSVRSKHZfaWR4KSwgaXRyX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0X2l0cl9tc2l4KHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJdTMyIG5ld19pdHI7CisJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CisJaW50IGksIHJfaWR4LCB2X2lkeCA9IHFfdmVjdG9yLT52X2lkeDsKKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nLCAqdHhfcmluZzsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKKwkJdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCQlyZXRfaXRyID0gaXhnYmV2Zl91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAorCQkJCQkgICAgIHFfdmVjdG9yLT50eF9pdHIsCisJCQkJCSAgICAgdHhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkJICAgICB0eF9yaW5nLT50b3RhbF9ieXRlcyk7CisJCS8qIGlmIHRoZSByZXN1bHQgZm9yIHRoaXMgcXVldWUgd291bGQgZGVjcmVhc2UgaW50ZXJydXB0CisJCSAqIHJhdGUgZm9yIHRoaXMgdmVjdG9yIHRoZW4gdXNlIHRoYXQgcmVzdWx0ICovCisJCXFfdmVjdG9yLT50eF9pdHIgPSAoKHFfdmVjdG9yLT50eF9pdHIgPiByZXRfaXRyKSA/CisJCQkJICAgIHFfdmVjdG9yLT50eF9pdHIgLSAxIDogcmV0X2l0cik7CisJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkgICAgICByX2lkeCArIDEpOworCX0KKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyZXRfaXRyID0gaXhnYmV2Zl91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAorCQkJCQkgICAgIHFfdmVjdG9yLT5yeF9pdHIsCisJCQkJCSAgICAgcnhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkJICAgICByeF9yaW5nLT50b3RhbF9ieXRlcyk7CisJCS8qIGlmIHRoZSByZXN1bHQgZm9yIHRoaXMgcXVldWUgd291bGQgZGVjcmVhc2UgaW50ZXJydXB0CisJCSAqIHJhdGUgZm9yIHRoaXMgdmVjdG9yIHRoZW4gdXNlIHRoYXQgcmVzdWx0ICovCisJCXFfdmVjdG9yLT5yeF9pdHIgPSAoKHFfdmVjdG9yLT5yeF9pdHIgPiByZXRfaXRyKSA/CisJCQkJICAgIHFfdmVjdG9yLT5yeF9pdHIgLSAxIDogcmV0X2l0cik7CisJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkJCQkgICAgICByX2lkeCArIDEpOworCX0KKworCWN1cnJlbnRfaXRyID0gbWF4KHFfdmVjdG9yLT5yeF9pdHIsIHFfdmVjdG9yLT50eF9pdHIpOworCisJc3dpdGNoIChjdXJyZW50X2l0cikgeworCS8qIGNvdW50cyBhbmQgcGFja2V0cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCW5ld19pdHIgPSAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgbG93X2xhdGVuY3k6CisJCW5ld19pdHIgPSAyMDAwMDsgLyogYWthIGh3aXRyID0gfjIwMCAqLworCQlicmVhazsKKwljYXNlIGJ1bGtfbGF0ZW5jeToKKwlkZWZhdWx0OgorCQluZXdfaXRyID0gODAwMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKG5ld19pdHIgIT0gcV92ZWN0b3ItPmVpdHIpIHsKKwkJdTMyIGl0cl9yZWc7CisKKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCisJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKKwkJLyogZG8gYW4gZXhwb25lbnRpYWwgc21vb3RoaW5nICovCisJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOTApLzEwMCkgKyAoKG5ld19pdHIgKiAxMCkvMTAwKTsKKwkJaXRyX3JlZyA9IEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhuZXdfaXRyKTsKKwkJaXhnYmV2Zl93cml0ZV9laXRyKGFkYXB0ZXIsIHZfaWR4LCBpdHJfcmVnKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZXZmX21zaXhfbWJ4KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRhdGE7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZWljcjsKKwl1MzIgbXNnOworCisJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1MpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSUNSLCBlaWNyKTsKKworCWh3LT5tYngub3BzLnJlYWQoaHcsICZtc2csIDEpOworCisJaWYgKChtc2cgJiBJWEdCRV9NQlZGSUNSX1ZGUkVRX01BU0spID09IElYR0JFX1BGX0NPTlRST0xfTVNHKQorCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLAorCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAxMCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmV2Zl9tc2l4X2NsZWFuX3R4KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0gZGF0YTsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgICAgICp0eF9yaW5nOworCWludCBpLCByX2lkeDsKKworCWlmICghcV92ZWN0b3ItPnR4cl9jb3VudCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgeworCQl0eF9yaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwkJdHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CisJCWl4Z2JldmZfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsIHR4X3JpbmcpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQorCQlpeGdiZXZmX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogaXhnYmVfbXNpeF9jbGVhbl9yeCAtIHNpbmdsZSB1bnNoYXJlZCB2ZWN0b3IgcnggY2xlYW4gKGFsbCBxdWV1ZXMpCisgKiBAaXJxOiB1bnVzZWQKKyAqIEBkYXRhOiBwb2ludGVyIHRvIG91ciBxX3ZlY3RvciBzdHJ1Y3QgZm9yIHRoaXMgaW50ZXJydXB0IHZlY3RvcgorICoqLworc3RhdGljIGlycXJldHVybl90IGl4Z2JldmZfbXNpeF9jbGVhbl9yeChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGRhdGE7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBpeGdiZXZmX3JpbmcgICpyeF9yaW5nOworCWludCByX2lkeDsKKwlpbnQgaTsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlpZiAoIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCByeF9yaW5nLT52X2lkeCk7CisJbmFwaV9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOworCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZXZmX21zaXhfY2xlYW5fbWFueShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCWl4Z2JldmZfbXNpeF9jbGVhbl9yeChpcnEsIGRhdGEpOworCWl4Z2JldmZfbXNpeF9jbGVhbl90eChpcnEsIGRhdGEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZlY3Rvcl90b19yeHEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYSwgaW50IHZfaWR4LAorCQkJCSAgICAgaW50IHJfaWR4KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGEtPnFfdmVjdG9yW3ZfaWR4XTsKKworCXNldF9iaXQocl9pZHgsIHFfdmVjdG9yLT5yeHJfaWR4KTsKKwlxX3ZlY3Rvci0+cnhyX2NvdW50Kys7CisJYS0+cnhfcmluZ1tyX2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZlY3Rvcl90b190eHEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYSwgaW50IHZfaWR4LAorCQkJCSAgICAgaW50IHRfaWR4KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGEtPnFfdmVjdG9yW3ZfaWR4XTsKKworCXNldF9iaXQodF9pZHgsIHFfdmVjdG9yLT50eHJfaWR4KTsKKwlxX3ZlY3Rvci0+dHhyX2NvdW50Kys7CisJYS0+dHhfcmluZ1t0X2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQorCisvKioKKyAqIGl4Z2JldmZfbWFwX3JpbmdzX3RvX3ZlY3RvcnMgLSBNYXBzIGRlc2NyaXB0b3IgcmluZ3MgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgZGVzY3JpcHRvciByaW5ncyB0byB0aGUgcXVldWUtc3BlY2lmaWMgdmVjdG9ycworICogd2Ugd2VyZSBhbGxvdHRlZCB0aHJvdWdoIHRoZSBNU0ktWCBlbmFibGluZyBjb2RlLiAgSWRlYWxseSwgd2UnZCBoYXZlCisgKiBvbmUgdmVjdG9yIHBlciByaW5nL3F1ZXVlLCBidXQgb24gYSBjb25zdHJhaW5lZCB2ZWN0b3IgYnVkZ2V0LCB3ZQorICogZ3JvdXAgdGhlIHJpbmdzIGFzICJlZmZpY2llbnRseSIgYXMgcG9zc2libGUuICBZb3Ugd291bGQgYWRkIG5ldworICogbWFwcGluZyBjb25maWd1cmF0aW9ucyBpbiBoZXJlLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX21hcF9yaW5nc190b192ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfdmVjdG9yczsKKwlpbnQgdl9zdGFydCA9IDA7CisJaW50IHJ4cl9pZHggPSAwLCB0eHJfaWR4ID0gMDsKKwlpbnQgcnhyX3JlbWFpbmluZyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJaW50IHR4cl9yZW1haW5pbmcgPSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOworCWludCBpLCBqOworCWludCBycXB2LCB0cXB2OworCWludCBlcnIgPSAwOworCisJcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKwkvKgorCSAqIFRoZSBpZGVhbCBjb25maWd1cmF0aW9uLi4uCisJICogV2UgaGF2ZSBlbm91Z2ggdmVjdG9ycyB0byBtYXAgb25lIHBlciBxdWV1ZS4KKwkgKi8KKwlpZiAocV92ZWN0b3JzID09IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fdHhfcXVldWVzKSB7CisJCWZvciAoOyByeHJfaWR4IDwgcnhyX3JlbWFpbmluZzsgdl9zdGFydCsrLCByeHJfaWR4KyspCisJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCB2X3N0YXJ0LCByeHJfaWR4KTsKKworCQlmb3IgKDsgdHhyX2lkeCA8IHR4cl9yZW1haW5pbmc7IHZfc3RhcnQrKywgdHhyX2lkeCsrKQorCQkJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgdl9zdGFydCwgdHhyX2lkeCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdmVjdG9ycyBmb3IgYSAxLXRvLTEKKwkgKiBtYXBwaW5nLCB3ZSdsbCBoYXZlIHRvIGdyb3VwIHRoZW0gc28gdGhlcmUgYXJlCisJICogbXVsdGlwbGUgcXVldWVzIHBlciB2ZWN0b3IuCisJICovCisJLyogUmUtYWRqdXN0aW5nICpxcHYgdGFrZXMgY2FyZSBvZiB0aGUgcmVtYWluZGVyLiAqLworCWZvciAoaSA9IHZfc3RhcnQ7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlycXB2ID0gRElWX1JPVU5EX1VQKHJ4cl9yZW1haW5pbmcsIHFfdmVjdG9ycyAtIGkpOworCQlmb3IgKGogPSAwOyBqIDwgcnFwdjsgaisrKSB7CisJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCBpLCByeHJfaWR4KTsKKwkJCXJ4cl9pZHgrKzsKKwkJCXJ4cl9yZW1haW5pbmctLTsKKwkJfQorCX0KKwlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgcV92ZWN0b3JzOyBpKyspIHsKKwkJdHFwdiA9IERJVl9ST1VORF9VUCh0eHJfcmVtYWluaW5nLCBxX3ZlY3RvcnMgLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IHRxcHY7IGorKykgeworCQkJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgaSwgdHhyX2lkeCk7CisJCQl0eHJfaWR4Kys7CisJCQl0eHJfcmVtYWluaW5nLS07CisJCX0KKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfcmVxdWVzdF9tc2l4X2lycXMgLSBJbml0aWFsaXplIE1TSS1YIGludGVycnVwdHMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIGl4Z2JldmZfcmVxdWVzdF9tc2l4X2lycXMgYWxsb2NhdGVzIE1TSS1YIHZlY3RvcnMgYW5kIHJlcXVlc3RzCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9yZXF1ZXN0X21zaXhfaXJxcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CisJaW50IGksIHZlY3RvciwgcV92ZWN0b3JzLCBlcnI7CisJaW50IHJpID0gMCwgdGkgPSAwOworCisJLyogRGVjcmVtZW50IGZvciBPdGhlciBhbmQgVENQIFRpbWVyIHZlY3RvcnMgKi8KKwlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworI2RlZmluZSBTRVRfSEFORExFUihfdikgKCgoX3YpLT5yeHJfY291bnQgJiYgKF92KS0+dHhyX2NvdW50KSAgICAgICAgICBcCisJCQkJCSAgPyAmaXhnYmV2Zl9tc2l4X2NsZWFuX21hbnkgOiBcCisJCQkgIChfdiktPnJ4cl9jb3VudCA/ICZpeGdiZXZmX21zaXhfY2xlYW5fcnggICA6IFwKKwkJCSAgKF92KS0+dHhyX2NvdW50ID8gJml4Z2JldmZfbXNpeF9jbGVhbl90eCAgIDogXAorCQkJICBOVUxMKQorCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgcV92ZWN0b3JzOyB2ZWN0b3IrKykgeworCQloYW5kbGVyID0gU0VUX0hBTkRMRVIoYWRhcHRlci0+cV92ZWN0b3JbdmVjdG9yXSk7CisKKwkJaWYgKGhhbmRsZXIgPT0gJml4Z2JldmZfbXNpeF9jbGVhbl9yeCkgeworCQkJc3ByaW50ZihhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sICIlcy0lcy0lZCIsCisJCQkJbmV0ZGV2LT5uYW1lLCAicngiLCByaSsrKTsKKwkJfSBlbHNlIGlmIChoYW5kbGVyID09ICZpeGdiZXZmX21zaXhfY2xlYW5fdHgpIHsKKwkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAorCQkJCW5ldGRldi0+bmFtZSwgInR4IiwgdGkrKyk7CisJCX0gZWxzZSBpZiAoaGFuZGxlciA9PSAmaXhnYmV2Zl9tc2l4X2NsZWFuX21hbnkpIHsKKwkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAorCQkJCW5ldGRldi0+bmFtZSwgIlR4UngiLCB2ZWN0b3IpOworCQl9IGVsc2UgeworCQkJLyogc2tpcCB0aGlzIHVudXNlZCBxX3ZlY3RvciAqLworCQkJY29udGludWU7CisJCX0KKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJCSAgaGFuZGxlciwgMCwgYWRhcHRlci0+bmFtZVt2ZWN0b3JdLAorCQkJCSAgYWRhcHRlci0+cV92ZWN0b3JbdmVjdG9yXSk7CisJCWlmIChlcnIpIHsKKwkJCWh3X2RiZygmYWRhcHRlci0+aHcsCisJCQkgICAgICAgInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgTVNJWCBpbnRlcnJ1cHQgIgorCQkJICAgICAgICJFcnJvcjogJWRcbiIsIGVycik7CisJCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKKwkJfQorCX0KKworCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXM6bWJ4IiwgbmV0ZGV2LT5uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCisJCQkgICZpeGdiZXZmX21zaXhfbWJ4LCAwLCBhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sIG5ldGRldik7CisJaWYgKGVycikgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgInJlcXVlc3RfaXJxIGZvciBtc2l4X21ieCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKKwl9CisKKwlyZXR1cm4gMDsKKworZnJlZV9xdWV1ZV9pcnFzOgorCWZvciAoaSA9IHZlY3RvciAtIDE7IGkgPj0gMDsgaS0tKQorCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbLS12ZWN0b3JdLnZlY3RvciwKKwkJCSAmKGFkYXB0ZXItPnFfdmVjdG9yW2ldKSk7CisJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOworCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcmVzZXRfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIHFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQliaXRtYXBfemVybyhxX3ZlY3Rvci0+cnhyX2lkeCwgTUFYX1JYX1FVRVVFUyk7CisJCWJpdG1hcF96ZXJvKHFfdmVjdG9yLT50eHJfaWR4LCBNQVhfVFhfUVVFVUVTKTsKKwkJcV92ZWN0b3ItPnJ4cl9jb3VudCA9IDA7CisJCXFfdmVjdG9yLT50eHJfY291bnQgPSAwOworCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CisJfQorfQorCisvKioKKyAqIGl4Z2JldmZfcmVxdWVzdF9pcnEgLSBpbml0aWFsaXplIGludGVycnVwdHMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIEF0dGVtcHRzIHRvIGNvbmZpZ3VyZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZQorICogY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBhbmQga2VybmVsLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX3JlcXVlc3RfaXJxKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBpeGdiZXZmX3JlcXVlc3RfbXNpeF9pcnFzKGFkYXB0ZXIpOworCisJaWYgKGVycikKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJyZXF1ZXN0X2lycSBmYWlsZWQsIEVycm9yICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9mcmVlX2lycShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IGksIHFfdmVjdG9yczsKKworCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7CisKKwlpID0gcV92ZWN0b3JzIC0gMTsKKworCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsIG5ldGRldik7CisJaS0tOworCisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkgYWRhcHRlci0+cV92ZWN0b3JbaV0pOworCX0KKworCWl4Z2JldmZfcmVzZXRfcV92ZWN0b3JzKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JldmZfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCB+MCk7CisKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7Cit9CisKKy8qKgorICogaXhnYmV2Zl9pcnFfZW5hYmxlIC0gRW5hYmxlIGRlZmF1bHQgaW50ZXJydXB0IGdlbmVyYXRpb24gc2V0dGluZ3MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfaXJxX2VuYWJsZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgIGJvb2wgcXVldWVzLCBib29sIGZsdXNoKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIG1hc2s7CisJdTY0IHFtYXNrOworCisJbWFzayA9IChJWEdCRV9FSU1TX0VOQUJMRV9NQVNLICYgfklYR0JFX0VJTVNfUlRYX1FVRVVFKTsKKwlxbWFzayA9IH4wOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJTVMsIG1hc2spOworCisJaWYgKHF1ZXVlcykKKwkJaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCBxbWFzayk7CisKKwlpZiAoZmx1c2gpCisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKK30KKworLyoqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV90eCAtIENvbmZpZ3VyZSA4MjU5OSBWRiBUcmFuc21pdCBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFR4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfdHgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1NjQgdGRiYTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOworCisJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOworCQlqID0gcmluZy0+cmVnX2lkeDsKKwkJdGRiYSA9IHJpbmctPmRtYTsKKwkJdGRsZW4gPSByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUREJBTChqKSwKKwkJCQkodGRiYSAmIERNQV9CSVRfTUFTSygzMikpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlREQkFIKGopLCAodGRiYSA+PiAzMikpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVERMRU4oaiksIHRkbGVuKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRESChqKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZURFQoaiksIDApOworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9WRlRESChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS50YWlsID0gSVhHQkVfVkZURFQoaik7CisJCS8qIERpc2FibGUgVHggSGVhZCBXcml0ZWJhY2sgUk8gYml0LCBzaW5jZSB0aGlzIGhvc2VzCisJCSAqIGJvb2trZWVwaW5nIGlmIHRoaW5ncyBhcmVuJ3QgZGVsaXZlcmVkIGluIG9yZGVyLgorCQkgKi8KKwkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGRENBX1RYQ1RSTChqKSk7CisJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkRDQV9UWENUUkwoaiksIHR4Y3RybCk7CisJfQorfQorCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQJMgorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2NvbmZpZ3VyZV9zcnJjdGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4KQoreworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3Jpbmc7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgc3JyY3RsOworCisJcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2luZGV4XTsKKworCXNycmN0bCA9IElYR0JFX1NSUkNUTF9EUk9QX0VOOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCXUxNiBidWZzeiA9IElYR0JFVkZfUlhCVUZGRVJfMjA0ODsKKwkJLyogZ3JvdyB0aGUgYW1vdW50IHdlIGNhbiByZWNlaXZlIG9uIGxhcmdlIHBhZ2UgbWFjaGluZXMgKi8KKwkJaWYgKGJ1ZnN6IDwgKFBBR0VfU0laRSAvIDIpKQorCQkJYnVmc3ogPSAoUEFHRV9TSVpFIC8gMik7CisJCS8qIGNhcCB0aGUgYnVmc3ogYXQgb3VyIGxhcmdlc3QgZGVzY3JpcHRvciBzaXplICovCisJCWJ1ZnN6ID0gbWluKCh1MTYpSVhHQkVWRl9NQVhfUlhCVUZGRVIsIGJ1ZnN6KTsKKworCQlzcnJjdGwgfD0gYnVmc3ogPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVM7CisJCXNycmN0bCB8PSAoKElYR0JFVkZfUlhfSERSX1NJWkUgPDwKKwkJCSAgIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQpICYKKwkJCSAgIElYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLKTsKKwl9IGVsc2UgeworCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CisKKwkJaWYgKHJ4X3JpbmctPnJ4X2J1Zl9sZW4gPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpCisJCQlzcnJjdGwgfD0gSVhHQkVWRl9SWEJVRkZFUl8yMDQ4ID4+CisJCQkJSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQllbHNlCisJCQlzcnJjdGwgfD0gcnhfcmluZy0+cnhfYnVmX2xlbiA+PgorCQkJCUlYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwl9CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlNSUkNUTChpbmRleCksIHNycmN0bCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jb25maWd1cmVfcnggLSBDb25maWd1cmUgODI1OTkgVkYgUmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFJ4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfcngoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1NjQgcmRiYTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IG1heF9mcmFtZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKKwlpbnQgaSwgajsKKwl1MzIgcmRsZW47CisJaW50IHJ4X2J1Zl9sZW47CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCisJaWYgKG5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfQ0FQQUJMRSkKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYXzFCVUZfQ0FQQUJMRSkKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwl9CisKKwkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCS8qIFBTUlRZUEUgbXVzdCBiZSBpbml0aWFsaXplZCBpbiA4MjU5OSAqLworCQl1MzIgcHNydHlwZSA9IElYR0JFX1BTUlRZUEVfVENQSERSIHwKKwkJCUlYR0JFX1BTUlRZUEVfVURQSERSIHwKKwkJCUlYR0JFX1BTUlRZUEVfSVBWNEhEUiB8CisJCQlJWEdCRV9QU1JUWVBFX0lQVjZIRFIgfAorCQkJSVhHQkVfUFNSVFlQRV9MMkhEUjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlBTUlRZUEUsIHBzcnR5cGUpOworCQlyeF9idWZfbGVuID0gSVhHQkVWRl9SWF9IRFJfU0laRTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUFNSVFlQRSwgMCk7CisJCWlmIChuZXRkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCisJCQlyeF9idWZfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CisJCWVsc2UKKwkJCXJ4X2J1Zl9sZW4gPSBBTElHTihtYXhfZnJhbWUsIDEwMjQpOworCX0KKworCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CisJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKKwkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmRtYTsKKwkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEQkFMKGopLAorCQkJCShyZGJhICYgRE1BX0JJVF9NQVNLKDMyKSkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRCQUgoaiksIChyZGJhID4+IDMyKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRExFTihqKSwgcmRsZW4pOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRIKGopLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEVChqKSwgMCk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uaGVhZCA9IElYR0JFX1ZGUkRIKGopOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnRhaWwgPSBJWEdCRV9WRlJEVChqKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9idWZfbGVuID0gcnhfYnVmX2xlbjsKKworCQlpeGdiZXZmX2NvbmZpZ3VyZV9zcnJjdGwoYWRhcHRlciwgaik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaSwgajsKKwl1MzIgY3RybDsKKworCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopKTsKKwkJY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopLCBjdHJsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqdl9uZXRkZXY7CisKKwkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLworCWlmIChody0+bWFjLm9wcy5zZXRfdmZ0YSkKKwkJaHctPm1hYy5vcHMuc2V0X3ZmdGEoaHcsIHZpZCwgMCwgdHJ1ZSk7CisJLyoKKwkgKiBDb3B5IGZlYXR1cmUgZmxhZ3MgZnJvbSBuZXRkZXYgdG8gdGhlIHZsYW4gbmV0ZGV2IGZvciB0aGlzIHZpZC4KKwkgKiBUaGlzIGFsbG93cyB0aGluZ3MgbGlrZSBUU08gdG8gYnViYmxlIGRvd24gdG8gb3VyIHZsYW4gZGV2aWNlLgorCSAqLworCXZfbmV0ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQpOworCXZfbmV0ZGV2LT5mZWF0dXJlcyB8PSBhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzOworCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCB2X25ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlpeGdiZXZmX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOworCisJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJaXhnYmV2Zl9pcnFfZW5hYmxlKGFkYXB0ZXIsIHRydWUsIHRydWUpOworCisJLyogcmVtb3ZlIFZJRCBmcm9tIGZpbHRlciB0YWJsZSAqLworCWlmIChody0+bWFjLm9wcy5zZXRfdmZ0YSkKKwkJaHctPm1hYy5vcHMuc2V0X3ZmdGEoaHcsIHZpZCwgMCwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWl4Z2JldmZfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKKworCWlmIChhZGFwdGVyLT52bGdycCkgeworCQl1MTYgdmlkOworCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCisJCQkJY29udGludWU7CisJCQlpeGdiZXZmX3ZsYW5fcnhfYWRkX3ZpZChhZGFwdGVyLT5uZXRkZXYsIHZpZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1OCAqaXhnYmV2Zl9hZGRyX2xpc3RfaXRyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICoqbWNfYWRkcl9wdHIsCisJCQkJIHUzMiAqdm1kcSkKK3sKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwl1OCAqYWRkciA9ICptY19hZGRyX3B0cjsKKwkqdm1kcSA9IDA7CisKKwltY19wdHIgPSBjb250YWluZXJfb2YoYWRkciwgc3RydWN0IGRldl9tY19saXN0LCBkbWlfYWRkclswXSk7CisJaWYgKG1jX3B0ci0+bmV4dCkKKwkJKm1jX2FkZHJfcHRyID0gbWNfcHRyLT5uZXh0LT5kbWlfYWRkcjsKKwllbHNlCisJCSptY19hZGRyX3B0ciA9IE5VTEw7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldF9yeF9tb2RlIC0gTXVsdGljYXN0IHNldAorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoZSBzZXRfcnhfbWV0aG9kIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgbXVsdGljYXN0IGFkZHJlc3MKKyAqIGxpc3Qgb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZsYWdzIGFyZSB1cGRhdGVkLiAgVGhpcyByb3V0aW5lIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgbXVsdGljYXN0IG1vZGUuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1OCAqYWRkcl9saXN0ID0gTlVMTDsKKwlpbnQgYWRkcl9jb3VudCA9IDA7CisKKwkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KKwlhZGRyX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldik7CisJaWYgKGFkZHJfY291bnQpCisJCWFkZHJfbGlzdCA9IG5ldGRldi0+bWNfbGlzdC0+ZG1pX2FkZHI7CisJaWYgKGh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QpCisJCWh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIGFkZHJfbGlzdCwgYWRkcl9jb3VudCwKKwkJCQkJCWl4Z2JldmZfYWRkcl9saXN0X2l0cik7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4OworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlpbnQgcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKwlmb3IgKHFfaWR4ID0gMDsgcV9pZHggPCBxX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOworCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XTsKKwkJaWYgKCFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJY29udGludWU7CisJCW5hcGkgPSAmcV92ZWN0b3ItPm5hcGk7CisJCWlmIChxX3ZlY3Rvci0+cnhyX2NvdW50ID4gMSkKKwkJCW5hcGktPnBvbGwgPSAmaXhnYmV2Zl9jbGVhbl9yeG9ubHlfbWFueTsKKworCQluYXBpX2VuYWJsZShuYXBpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfbmFwaV9kaXNhYmxlX2FsbChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBxX2lkeDsKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7CisJaW50IHFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJZm9yIChxX2lkeCA9IDA7IHFfaWR4IDwgcV92ZWN0b3JzOyBxX2lkeCsrKSB7CisJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdOworCQlpZiAoIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQljb250aW51ZTsKKwkJbmFwaV9kaXNhYmxlKCZxX3ZlY3Rvci0+bmFwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2NvbmZpZ3VyZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IGk7CisKKwlpeGdiZXZmX3NldF9yeF9tb2RlKG5ldGRldik7CisKKwlpeGdiZXZmX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKworCWl4Z2JldmZfY29uZmlndXJlX3R4KGFkYXB0ZXIpOworCWl4Z2JldmZfY29uZmlndXJlX3J4KGFkYXB0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOworCQlpeGdiZXZmX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmluZy0+Y291bnQpOworCQlyaW5nLT5uZXh0X3RvX3VzZSA9IHJpbmctPmNvdW50IC0gMTsKKwkJd3JpdGVsKHJpbmctPm5leHRfdG9fdXNlLCBhZGFwdGVyLT5ody5od19hZGRyICsgcmluZy0+dGFpbCk7CisJfQorfQorCisjZGVmaW5lIElYR0JFX01BWF9SWF9ERVNDX1BPTEwgMTAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX3J4X2Rlc2NfcXVldWVfZW5hYmxlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCQlpbnQgcnhyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nW3J4cl0ucmVnX2lkeDsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBJWEdCRV9NQVhfUlhfREVTQ19QT0xMOyBrKyspIHsKKwkJaWYgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChqKSkgJiBJWEdCRV9SWERDVExfRU5BQkxFKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCW1zbGVlcCgxKTsKKwl9CisJaWYgKGsgPj0gSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCkgeworCQlod19kYmcoaHcsICJSWERDVEwuRU5BQkxFIG9uIFJ4IHF1ZXVlICVkICIKKwkJICAgICAgICJub3Qgc2V0IHdpdGhpbiB0aGUgcG9sbGluZyBwZXJpb2RcbiIsIHJ4cik7CisJfQorCisJaXhnYmV2Zl9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCAmYWRhcHRlci0+cnhfcmluZ1tyeHJdLAorCQkJCShhZGFwdGVyLT5yeF9yaW5nW3J4cl0uY291bnQgLSAxKSk7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl91cF9jb21wbGV0ZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaSwgaiA9IDA7CisJaW50IG51bV9yeF9yaW5ncyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJdTMyIHR4ZGN0bCwgcnhkY3RsOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaikpOworCQkvKiBlbmFibGUgV1RIUkVTSD04IGRlc2NyaXB0b3JzLCB0byBlbmNvdXJhZ2UgYnVyc3Qgd3JpdGViYWNrICovCisJCXR4ZGN0bCB8PSAoOCA8PCAxNik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaiksIHR4ZGN0bCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaikpOworCQl0eGRjdGwgfD0gSVhHQkVfVFhEQ1RMX0VOQUJMRTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSwgdHhkY3RsKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopKTsKKwkJcnhkY3RsIHw9IElYR0JFX1JYRENUTF9FTkFCTEU7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaiksIHJ4ZGN0bCk7CisJCWl4Z2JldmZfcnhfZGVzY19xdWV1ZV9lbmFibGUoYWRhcHRlciwgaSk7CisJfQorCisJaXhnYmV2Zl9jb25maWd1cmVfbXNpeChhZGFwdGVyKTsKKworCWlmIChody0+bWFjLm9wcy5zZXRfcmFyKSB7CisJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGh3LT5tYWMuYWRkcikpCisJCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDApOworCQllbHNlCisJCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLnBlcm1fYWRkciwgMCk7CisJfQorCisJY2xlYXJfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCWl4Z2JldmZfbmFwaV9lbmFibGVfYWxsKGFkYXB0ZXIpOworCisJLyogZW5hYmxlIHRyYW5zbWl0cyAqLworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCS8qIGJyaW5nIHRoZSBsaW5rIHVwIGluIHRoZSB3YXRjaGRvZywgdGhpcyBjb3VsZCByYWNlIHdpdGggb3VyIGZpcnN0CisJICogbGluayB1cCBpbnRlcnJ1cHQgYnV0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0gKi8KKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEU7CisJYWRhcHRlci0+bGlua19jaGVja190aW1lb3V0ID0gamlmZmllczsKKwltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGl4Z2JldmZfdXAoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpeGdiZXZmX2NvbmZpZ3VyZShhZGFwdGVyKTsKKworCWVyciA9IGl4Z2JldmZfdXBfY29tcGxldGUoYWRhcHRlcik7CisKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLCBtYXkgYXV0byBtYXNrICovCisJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUik7CisKKwlpeGdiZXZmX2lycV9lbmFibGUoYWRhcHRlciwgdHJ1ZSwgdHJ1ZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fcnhfcmluZyAtIEZyZWUgUnggQnVmZmVycyBwZXIgUXVldWUKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6IHJpbmcgdG8gZnJlZSBidWZmZXJzIGZyb20KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykKKwkJcmV0dXJuOworCisJLyogRnJlZSBhbGwgdGhlIFJ4IHJpbmcgc2tfYnVmZnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvOworCisJCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOworCQlpZiAocnhfYnVmZmVyX2luZm8tPmRtYSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCByeF9idWZmZXJfaW5mby0+ZG1hLAorCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKKwkJfQorCQlpZiAocnhfYnVmZmVyX2luZm8tPnNrYikgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1ZmZlcl9pbmZvLT5za2I7CisJCQlyeF9idWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCWRvIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqdGhpcyA9IHNrYjsKKwkJCQlza2IgPSBza2ItPnByZXY7CisJCQkJZGV2X2tmcmVlX3NrYih0aGlzKTsKKwkJCX0gd2hpbGUgKHNrYik7CisJCX0KKwkJaWYgKCFyeF9idWZmZXJfaW5mby0+cGFnZSkKKwkJCWNvbnRpbnVlOworCQlwY2lfdW5tYXBfcGFnZShwZGV2LCByeF9idWZmZXJfaW5mby0+cGFnZV9kbWEsIFBBR0VfU0laRSAvIDIsCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hID0gMDsKKwkJcHV0X3BhZ2UocnhfYnVmZmVyX2luZm8tPnBhZ2UpOworCQlyeF9idWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCXJ4X2J1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCA9IDA7CisJfQorCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CisJbWVtc2V0KHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKworCS8qIFplcm8gb3V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwltZW1zZXQocnhfcmluZy0+ZGVzYywgMCwgcnhfcmluZy0+c2l6ZSk7CisKKwlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKwlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CisKKwlpZiAocnhfcmluZy0+aGVhZCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5oZWFkKTsKKwlpZiAocnhfcmluZy0+dGFpbCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT50YWlsKTsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3R4X3JpbmcgLSBGcmVlIFR4IEJ1ZmZlcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHR4X3Jpbmc6IHJpbmcgdG8gYmUgY2xlYW5lZAorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jbGVhbl90eF9yaW5nKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nKQoreworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF0eF9yaW5nLT50eF9idWZmZXJfaW5mbykKKwkJcmV0dXJuOworCisJLyogRnJlZSBhbGwgdGhlIFR4IHJpbmcgc2tfYnVmZnMgKi8KKworCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7CisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQlpeGdiZXZmX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIHR4X2J1ZmZlcl9pbmZvKTsKKwl9CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlcikgKiB0eF9yaW5nLT5jb3VudDsKKwltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOworCisJbWVtc2V0KHR4X3JpbmctPmRlc2MsIDAsIHR4X3JpbmctPnNpemUpOworCisJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCisJaWYgKHR4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7CisJaWYgKHR4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl9hbGxfcnhfcmluZ3MgLSBGcmVlIFJ4IEJ1ZmZlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jbGVhbl9hbGxfcnhfcmluZ3Moc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCWl4Z2JldmZfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl9hbGxfdHhfcmluZ3MgLSBGcmVlIFR4IEJ1ZmZlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jbGVhbl9hbGxfdHhfcmluZ3Moc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCWl4Z2JldmZfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7Cit9CisKK3ZvaWQgaXhnYmV2Zl9kb3duKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB0eGRjdGw7CisJaW50IGksIGo7CisKKwkvKiBzaWduYWwgdGhhdCB3ZSBhcmUgZG93biB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KKworCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKKworCW1zbGVlcCgxMCk7CisKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCWl4Z2JldmZfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisKKwlpeGdiZXZmX25hcGlfZGlzYWJsZV9hbGwoYWRhcHRlcik7CisKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCS8qIGNhbid0IGNhbGwgZmx1c2ggc2NoZWR1bGVkIHdvcmsgaGVyZSBiZWNhdXNlIGl0IGNhbiBkZWFkbG9jaworCSAqIGlmIGxpbmt3YXRjaF9ldmVudCB0cmllcyB0byBhY3F1aXJlIHRoZSBydG5sX2xvY2sgd2hpY2ggd2UgYXJlCisJICogaG9sZGluZyAqLworCXdoaWxlIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fV0FUQ0hET0dfVEFTSykKKwkJbXNsZWVwKDEpOworCisJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGopKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSwKKwkJCQkodHhkY3RsICYgfklYR0JFX1RYRENUTF9FTkFCTEUpKTsKKwl9CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJaWYgKCFwY2lfY2hhbm5lbF9vZmZsaW5lKGFkYXB0ZXItPnBkZXYpKQorCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCisJaXhnYmV2Zl9jbGVhbl9hbGxfdHhfcmluZ3MoYWRhcHRlcik7CisJaXhnYmV2Zl9jbGVhbl9hbGxfcnhfcmluZ3MoYWRhcHRlcik7Cit9CisKK3ZvaWQgaXhnYmV2Zl9yZWluaXRfbG9ja2VkKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOworCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJLyoKKwkgKiBDaGVjayBpZiBQRiBpcyB1cCBiZWZvcmUgcmUtaW5pdC4gIElmIG5vdCB0aGVuIHNraXAgdW50aWwKKwkgKiBsYXRlciB3aGVuIHRoZSBQRiBpcyB1cCBhbmQgcmVhZHkgdG8gc2VydmljZSByZXF1ZXN0cyBmcm9tCisJICogdGhlIFZGIHZpYSBtYWlsYm94LiAgSWYgdGhlIFZGIGlzIHVwIGFuZCBydW5uaW5nIHRoZW4gdGhlCisJICogd2F0Y2hkb2cgdGFzayB3aWxsIGNvbnRpbnVlIHRvIHNjaGVkdWxlIHJlc2V0IHRhc2tzIHVudGlsCisJICogdGhlIFBGIGlzIHVwIGFuZCBydW5uaW5nLgorCSAqLworCWlmICghaHctPm1hYy5vcHMucmVzZXRfaHcoaHcpKSB7CisJCWl4Z2JldmZfZG93bihhZGFwdGVyKTsKKwkJaXhnYmV2Zl91cChhZGFwdGVyKTsKKwl9CisKKwljbGVhcl9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKwordm9pZCBpeGdiZXZmX3Jlc2V0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKGh3LT5tYWMub3BzLnJlc2V0X2h3KGh3KSkKKwkJaHdfZGJnKGh3LCAiUEYgc3RpbGwgcmVzZXR0aW5nXG4iKTsKKwllbHNlCisJCWh3LT5tYWMub3BzLmluaXRfaHcoaHcpOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRhcHRlci0+aHcubWFjLmFkZHIpKSB7CisJCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwKKwkJICAgICAgIG5ldGRldi0+YWRkcl9sZW4pOworCQltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmh3Lm1hYy5hZGRyLAorCQkgICAgICAgbmV0ZGV2LT5hZGRyX2xlbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2FjcXVpcmVfbXNpeF92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSBpbnQgdmVjdG9ycykKK3sKKwlpbnQgZXJyLCB2ZWN0b3JfdGhyZXNob2xkOworCisJLyogV2UnbGwgd2FudCBhdCBsZWFzdCAzICh2ZWN0b3JfdGhyZXNob2xkKToKKwkgKiAxKSBUeFFbMF0gQ2xlYW51cAorCSAqIDIpIFJ4UVswXSBDbGVhbnVwCisJICogMykgT3RoZXIgKExpbmsgU3RhdHVzIENoYW5nZSwgZXRjLikKKwkgKi8KKwl2ZWN0b3JfdGhyZXNob2xkID0gTUlOX01TSVhfQ09VTlQ7CisKKwkvKiBUaGUgbW9yZSB3ZSBnZXQsIHRoZSBtb3JlIHdlIHdpbGwgYXNzaWduIHRvIFR4L1J4IENsZWFudXAKKwkgKiBmb3IgdGhlIHNlcGFyYXRlIHF1ZXVlcy4uLndoZXJlIFJ4IENsZWFudXAgPj0gVHggQ2xlYW51cC4KKwkgKiBSaWdodCBub3csIHdlIHNpbXBseSBjYXJlIGFib3V0IGhvdyBtYW55IHdlJ2xsIGdldDsgd2UnbGwKKwkgKiBzZXQgdGhlbSB1cCBsYXRlciB3aGlsZSByZXF1ZXN0aW5nIGlycSdzLgorCSAqLworCXdoaWxlICh2ZWN0b3JzID49IHZlY3Rvcl90aHJlc2hvbGQpIHsKKwkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKKwkJCQkgICAgICB2ZWN0b3JzKTsKKwkJaWYgKCFlcnIpIC8qIFN1Y2Nlc3MgaW4gYWNxdWlyaW5nIGFsbCByZXF1ZXN0ZWQgdmVjdG9ycy4gKi8KKwkJCWJyZWFrOworCQllbHNlIGlmIChlcnIgPCAwKQorCQkJdmVjdG9ycyA9IDA7IC8qIE5hc3R5IGZhaWx1cmUsIHF1aXQgbm93ICovCisJCWVsc2UgLyogZXJyID09IG51bWJlciBvZiB2ZWN0b3JzIHdlIHNob3VsZCB0cnkgYWdhaW4gd2l0aCAqLworCQkJdmVjdG9ycyA9IGVycjsKKwl9CisKKwlpZiAodmVjdG9ycyA8IHZlY3Rvcl90aHJlc2hvbGQpIHsKKwkJLyogQ2FuJ3QgYWxsb2NhdGUgZW5vdWdoIE1TSS1YIGludGVycnVwdHM/ICBPaCB3ZWxsLgorCQkgKiBUaGlzIGp1c3QgbWVhbnMgd2UnbGwgZ28gd2l0aCBlaXRoZXIgYSBzaW5nbGUgTVNJCisJCSAqIHZlY3RvciBvciBmYWxsIGJhY2sgdG8gbGVnYWN5IGludGVycnVwdHMuCisJCSAqLworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBNU0ktWCBpbnRlcnJ1cHRzXG4iKTsKKwkJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBZGp1c3QgZm9yIG9ubHkgdGhlIHZlY3RvcnMgd2UnbGwgdXNlLCB3aGljaCBpcyBtaW5pbXVtCisJCSAqIG9mIG1heF9tc2l4X3FfdmVjdG9ycyArIE5PTl9RX1ZFQ1RPUlMsIG9yIHRoZSBudW1iZXIgb2YKKwkJICogdmVjdG9ycyB3ZSB3ZXJlIGFsbG9jYXRlZC4KKwkJICovCisJCWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgPSB2ZWN0b3JzOworCX0KK30KKworLyoKKyAqIGl4Z2JlX3NldF9udW1fcXVldWVzOiBBbGxvY2F0ZSBxdWV1ZXMgZm9yIGRldmljZSwgZmVhdHVyZSBkZXBlbmRhbnQKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogVGhpcyBpcyB0aGUgdG9wIGxldmVsIHF1ZXVlIGFsbG9jYXRpb24gcm91dGluZS4gIFRoZSBvcmRlciBoZXJlIGlzIHZlcnkKKyAqIGltcG9ydGFudCwgc3RhcnRpbmcgd2l0aCB0aGUgIm1vc3QiIG51bWJlciBvZiBmZWF0dXJlcyB0dXJuZWQgb24gYXQgb25jZSwKKyAqIGFuZCBlbmRpbmcgd2l0aCB0aGUgc21hbGxlc3Qgc2V0IG9mIGZlYXR1cmVzLiAgVGhpcyB3YXkgbGFyZ2UgY29tYmluYXRpb25zCisgKiBjYW4gYmUgYWxsb2NhdGVkIGlmIHRoZXkncmUgdHVybmVkIG9uLCBhbmQgc21hbGxlciBjb21iaW5hdGlvbnMgYXJlIHRoZQorICogZmFsbHRocm91Z2ggY29uZGl0aW9ucy4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogU3RhcnQgd2l0aCBiYXNlIGNhc2UgKi8KKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fcnhfcG9vbHMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wgPSAxOworfQorCisvKioKKyAqIGl4Z2JldmZfYWxsb2NfcXVldWVzIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBhbGwgcmluZ3MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogV2UgYWxsb2NhdGUgb25lIHJpbmcgcGVyIHF1ZXVlIGF0IHJ1bi10aW1lIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlCisgKiBudW1iZXIgb2YgcXVldWVzIGF0IGNvbXBpbGUtdGltZS4gIFRoZSBwb2xsaW5nX25ldGRldiBhcnJheSBpcworICogaW50ZW5kZWQgZm9yIE11bHRpcXVldWUsIGJ1dCBzaG91bGQgd29yayBmaW5lIHdpdGggYSBzaW5nbGUgcXVldWUuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfYWxsb2NfcXVldWVzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlhZGFwdGVyLT50eF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT50eF9yaW5nKQorCQlnb3RvIGVycl90eF9yaW5nX2FsbG9jYXRpb247CisKKwlhZGFwdGVyLT5yeF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT5yeF9yaW5nKQorCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50OworCQlhZGFwdGVyLT50eF9yaW5nW2ldLnF1ZXVlX2luZGV4ID0gaTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50OworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnF1ZXVlX2luZGV4ID0gaTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3J4X3JpbmdfYWxsb2NhdGlvbjoKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKK2Vycl90eF9yaW5nX2FsbG9jYXRpb246CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogaXhnYmV2Zl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkgLSBzZXQgTVNJLVggb3IgRkFJTCBpZiBub3Qgc3VwcG9ydGVkCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIEF0dGVtcHQgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZQorICogY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBhbmQgdGhlIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdmVjdG9yLCB2X2J1ZGdldDsKKworCS8qCisJICogSXQncyBlYXN5IHRvIGJlIGdyZWVkeSBmb3IgTVNJLVggdmVjdG9ycywgYnV0IGl0IHJlYWxseQorCSAqIGRvZXNuJ3QgZG8gdXMgbXVjaCBnb29kIGlmIHdlIGhhdmUgYSBsb3QgbW9yZSB2ZWN0b3JzCisJICogdGhhbiBDUFUncy4gIFNvIGxldCdzIGJlIGNvbnNlcnZhdGl2ZSBhbmQgb25seSBhc2sgZm9yCisJICogKHJvdWdobHkpIHR3aWNlIHRoZSBudW1iZXIgb2YgdmVjdG9ycyBhcyB0aGVyZSBhcmUgQ1BVJ3MuCisJICovCisJdl9idWRnZXQgPSBtaW4oYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyArIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCSAgICAgICAoaW50KShudW1fb25saW5lX2NwdXMoKSAqIDIpKSArIE5PTl9RX1ZFQ1RPUlM7CisKKwkvKiBBIGZhaWx1cmUgaW4gTVNJLVggZW50cnkgYWxsb2NhdGlvbiBpc24ndCBmYXRhbCwgYnV0IGl0IGRvZXMKKwkgKiBtZWFuIHdlIGRpc2FibGUgTVNJLVggY2FwYWJpbGl0aWVzIG9mIHRoZSBhZGFwdGVyLiAqLworCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IGtjYWxsb2Modl9idWRnZXQsCisJCQkJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgdl9idWRnZXQ7IHZlY3RvcisrKQorCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS5lbnRyeSA9IHZlY3RvcjsKKworCWl4Z2JldmZfYWNxdWlyZV9tc2l4X3ZlY3RvcnMoYWRhcHRlciwgdl9idWRnZXQpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX2FsbG9jX3FfdmVjdG9ycyAtIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW50ZXJydXB0IHZlY3RvcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogV2UgYWxsb2NhdGUgb25lIHFfdmVjdG9yIHBlciBxdWV1ZSBpbnRlcnJ1cHQuICBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlCisgKiByZXR1cm4gLUVOT01FTS4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9hbGxvY19xX3ZlY3RvcnMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcV9pZHgsIG51bV9xX3ZlY3RvcnM7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yOworCWludCBuYXBpX3ZlY3RvcnM7CisJaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CisKKwludW1fcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisJbmFwaV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlwb2xsID0gJml4Z2JldmZfY2xlYW5fcnhvbmx5OworCisJZm9yIChxX2lkeCA9IDA7IHFfaWR4IDwgbnVtX3FfdmVjdG9yczsgcV9pZHgrKykgeworCQlxX3ZlY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcV92ZWN0b3IpCisJCQlnb3RvIGVycl9vdXQ7CisJCXFfdmVjdG9yLT5hZGFwdGVyID0gYWRhcHRlcjsKKwkJcV92ZWN0b3ItPnZfaWR4ID0gcV9pZHg7CisJCXFfdmVjdG9yLT5laXRyID0gYWRhcHRlci0+ZWl0cl9wYXJhbTsKKwkJaWYgKHFfaWR4IDwgbmFwaV92ZWN0b3JzKQorCQkJbmV0aWZfbmFwaV9hZGQoYWRhcHRlci0+bmV0ZGV2LCAmcV92ZWN0b3ItPm5hcGksCisJCQkJICAgICAgICgqcG9sbCksIDY0KTsKKwkJYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdID0gcV92ZWN0b3I7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJd2hpbGUgKHFfaWR4KSB7CisJCXFfaWR4LS07CisJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdOworCQluZXRpZl9uYXBpX2RlbCgmcV92ZWN0b3ItPm5hcGkpOworCQlrZnJlZShxX3ZlY3Rvcik7CisJCWFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XSA9IE5VTEw7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV9xX3ZlY3RvcnMgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGludGVycnVwdCB2ZWN0b3JzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHFfdmVjdG9ycy4gIEluIGFkZGl0aW9uIGlmCisgKiBOQVBJIGlzIGVuYWJsZWQgaXQgd2lsbCBkZWxldGUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIE5BUEkgc3RydWN0IHByaW9yCisgKiB0byBmcmVlaW5nIHRoZSBxX3ZlY3Rvci4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9xX3ZlY3RvcnMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcV9pZHgsIG51bV9xX3ZlY3RvcnM7CisJaW50IG5hcGlfdmVjdG9yczsKKworCW51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKwluYXBpX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCisJZm9yIChxX2lkeCA9IDA7IHFfaWR4IDwgbnVtX3FfdmVjdG9yczsgcV9pZHgrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF07CisKKwkJYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdID0gTlVMTDsKKwkJaWYgKHFfaWR4IDwgbmFwaV92ZWN0b3JzKQorCQkJbmV0aWZfbmFwaV9kZWwoJnFfdmVjdG9yLT5uYXBpKTsKKwkJa2ZyZWUocV92ZWN0b3IpOworCX0KK30KKworLyoqCisgKiBpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5IC0gUmVzZXQgTVNJWCBzZXR1cAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7CisJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBOVUxMOworCisJcmV0dXJuOworfQorCisvKioKKyAqIGl4Z2JldmZfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lIC0gRGV0ZXJtaW5lIGlmIE1TSVggaXMgc3VwcG9ydGVkIGFuZCBpbml0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCisJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KKwlpeGdiZXZmX3NldF9udW1fcXVldWVzKGFkYXB0ZXIpOworCisJZXJyID0gaXhnYmV2Zl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIlVuYWJsZSB0byBzZXR1cCBpbnRlcnJ1cHQgY2FwYWJpbGl0aWVzXG4iKTsKKwkJZ290byBlcnJfc2V0X2ludGVycnVwdDsKKwl9CisKKwllcnIgPSBpeGdiZXZmX2FsbG9jX3FfdmVjdG9ycyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWh3X2RiZygmYWRhcHRlci0+aHcsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZSAiCisJCSAgICAgICAidmVjdG9yc1xuIik7CisJCWdvdG8gZXJyX2FsbG9jX3FfdmVjdG9yczsKKwl9CisKKwllcnIgPSBpeGdiZXZmX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWVzXG4iKTsKKwkJZ290byBlcnJfYWxsb2NfcXVldWVzOworCX0KKworCWh3X2RiZygmYWRhcHRlci0+aHcsICJNdWx0aXF1ZXVlICVzOiBSeCBRdWV1ZSBjb3VudCA9ICV1LCAiCisJICAgICAgICJUeCBRdWV1ZSBjb3VudCA9ICV1XG4iLAorCSAgICAgICAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEpID8gIkVuYWJsZWQiIDoKKwkgICAgICAgIkRpc2FibGVkIiwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisKKwlzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCisJcmV0dXJuIDA7CitlcnJfYWxsb2NfcXVldWVzOgorCWl4Z2JldmZfZnJlZV9xX3ZlY3RvcnMoYWRhcHRlcik7CitlcnJfYWxsb2NfcV92ZWN0b3JzOgorCWl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CitlcnJfc2V0X2ludGVycnVwdDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfc3dfaW5pdCAtIEluaXRpYWxpemUgZ2VuZXJhbCBzb2Z0d2FyZSBzdHJ1Y3R1cmVzCisgKiAoc3RydWN0IGl4Z2JldmZfYWRhcHRlcikKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogaXhnYmV2Zl9zd19pbml0IGluaXRpYWxpemVzIHRoZSBBZGFwdGVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCisgKiBPUyBuZXR3b3JrIGRldmljZSBzZXR0aW5ncyAoTVRVIHNpemUpLgorICoqLworc3RhdGljIGludCBfX2RldmluaXQgaXhnYmV2Zl9zd19pbml0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGVycjsKKworCS8qIFBDSSBjb25maWcgc3BhY2UgaW5mbyAqLworCisJaHctPnZlbmRvcl9pZCA9IHBkZXYtPnZlbmRvcjsKKwlody0+ZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmh3LT5yZXZpc2lvbl9pZCk7CisJaHctPnN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCWh3LT5zdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKworCWh3LT5tYngub3BzLmluaXRfcGFyYW1zKGh3KTsKKwlody0+bWFjLm1heF90eF9xdWV1ZXMgPSBNQVhfVFhfUVVFVUVTOworCWh3LT5tYWMubWF4X3J4X3F1ZXVlcyA9IE1BWF9SWF9RVUVVRVM7CisJZXJyID0gaHctPm1hYy5vcHMucmVzZXRfaHcoaHcpOworCWlmIChlcnIpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJICAgICAgICAgIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLCBhc3NpZ25pbmcgbmV3IGFkZHJlc3NcbiIpOworCQlyYW5kb21fZXRoZXJfYWRkcihody0+bWFjLmFkZHIpOworCX0gZWxzZSB7CisJCWVyciA9IGh3LT5tYWMub3BzLmluaXRfaHcoaHcpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImluaXRfc2hhcmVkX2NvZGUgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogRW5hYmxlIGR5bmFtaWMgaW50ZXJydXB0IHRocm90dGxpbmcgcmF0ZXMgKi8KKwlhZGFwdGVyLT5laXRyX3BhcmFtID0gMjAwMDA7CisJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOworCisJLyogc2V0IGRlZmF1bHRzIGZvciBlaXRyIGluIE1lZ2FCeXRlcyAqLworCWFkYXB0ZXItPmVpdHJfbG93ID0gMTA7CisJYWRhcHRlci0+ZWl0cl9oaWdoID0gMjA7CisKKwkvKiBzZXQgZGVmYXVsdCByaW5nIHNpemVzICovCisJYWRhcHRlci0+dHhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9UWEQ7CisJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9SWEQ7CisKKwkvKiBlbmFibGUgcnggY3N1bSBieSBkZWZhdWx0ICovCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7CisKKwlzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9pbml0X2xhc3RfY291bnRlcl9zdGF0cyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3ByYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdQUkMpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3JjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09SQ19MU0IpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3JjIHw9CisJCSgoKHU2NCkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09SQ19NU0IpKSkgPDwgMzIpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHRjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR1BUQyk7CisJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvdGMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZHT1RDX0xTQik7CisJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvdGMgfD0KKwkJKCgodTY0KShJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZHT1RDX01TQikpKSA8PCAzMik7CisJYWRhcHRlci0+c3RhdHMubGFzdF92Zm1wcmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZNUFJDKTsKKworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZncHJjID0gYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmM7CisJYWRhcHRlci0+c3RhdHMuYmFzZV92ZmdvcmMgPSBhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYzsKKwlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmZ3B0YyA9IGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHRjOworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZnb3RjID0gYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvdGM7CisJYWRhcHRlci0+c3RhdHMuYmFzZV92Zm1wcmMgPSBhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmbXByYzsKK30KKworI2RlZmluZSBVUERBVEVfVkZfQ09VTlRFUl8zMmJpdChyZWcsIGxhc3RfY291bnRlciwgY291bnRlcikJXAorCXsJCQkJCQkJXAorCQl1MzIgY3VycmVudF9jb3VudGVyID0gSVhHQkVfUkVBRF9SRUcoaHcsIHJlZyk7CVwKKwkJaWYgKGN1cnJlbnRfY291bnRlciA8IGxhc3RfY291bnRlcikJCVwKKwkJCWNvdW50ZXIgKz0gMHgxMDAwMDAwMDBMTDsJCVwKKwkJbGFzdF9jb3VudGVyID0gY3VycmVudF9jb3VudGVyOwkJCVwKKwkJY291bnRlciAmPSAweEZGRkZGRkZGMDAwMDAwMDBMTDsJCVwKKwkJY291bnRlciB8PSBjdXJyZW50X2NvdW50ZXI7CQkJXAorCX0KKworI2RlZmluZSBVUERBVEVfVkZfQ09VTlRFUl8zNmJpdChyZWdfbHNiLCByZWdfbXNiLCBsYXN0X2NvdW50ZXIsIGNvdW50ZXIpIFwKKwl7CQkJCQkJCQkgXAorCQl1NjQgY3VycmVudF9jb3VudGVyX2xzYiA9IElYR0JFX1JFQURfUkVHKGh3LCByZWdfbHNiKTsJIFwKKwkJdTY0IGN1cnJlbnRfY291bnRlcl9tc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX21zYik7CSBcCisJCXU2NCBjdXJyZW50X2NvdW50ZXIgPSAoY3VycmVudF9jb3VudGVyX21zYiA8PCAzMikgfCAgICAgIFwKKwkJCWN1cnJlbnRfY291bnRlcl9sc2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChjdXJyZW50X2NvdW50ZXIgPCBsYXN0X2NvdW50ZXIpCQkJIFwKKwkJCWNvdW50ZXIgKz0gMHgxMDAwMDAwMDAwTEw7CQkJIFwKKwkJbGFzdF9jb3VudGVyID0gY3VycmVudF9jb3VudGVyOwkJCQkgXAorCQljb3VudGVyICY9IDB4RkZGRkZGRjAwMDAwMDAwMExMOwkJCSBcCisJCWNvdW50ZXIgfD0gY3VycmVudF9jb3VudGVyOwkJCQkgXAorCX0KKy8qKgorICogaXhnYmV2Zl91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMuCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3ZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJVVBEQVRFX1ZGX0NPVU5URVJfMzJiaXQoSVhHQkVfVkZHUFJDLCBhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3ByYywKKwkJCQlhZGFwdGVyLT5zdGF0cy52ZmdwcmMpOworCVVQREFURV9WRl9DT1VOVEVSXzMyYml0KElYR0JFX1ZGR1BUQywgYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwdGMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZncHRjKTsKKwlVUERBVEVfVkZfQ09VTlRFUl8zNmJpdChJWEdCRV9WRkdPUkNfTFNCLCBJWEdCRV9WRkdPUkNfTVNCLAorCQkJCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3JjLAorCQkJCWFkYXB0ZXItPnN0YXRzLnZmZ29yYyk7CisJVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQoSVhHQkVfVkZHT1RDX0xTQiwgSVhHQkVfVkZHT1RDX01TQiwKKwkJCQlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ290YywKKwkJCQlhZGFwdGVyLT5zdGF0cy52ZmdvdGMpOworCVVQREFURV9WRl9DT1VOVEVSXzMyYml0KElYR0JFX1ZGTVBSQywgYWRhcHRlci0+c3RhdHMubGFzdF92Zm1wcmMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZtcHJjKTsKKworCS8qIEZpbGwgb3V0IHRoZSBPUyBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLworCWFkYXB0ZXItPm5ldF9zdGF0cy5tdWx0aWNhc3QgPSBhZGFwdGVyLT5zdGF0cy52Zm1wcmMgLQorCQlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmbXByYzsKK30KKworLyoqCisgKiBpeGdiZXZmX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCisgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKilkYXRhOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTY0IGVpY3MgPSAwOworCWludCBpOworCisJLyoKKwkgKiBEbyB0aGUgd2F0Y2hkb2cgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlIGxvdmVseQorCSAqIGRlbGF5cyB0aGF0IHNvbWUgb2YgdGhlIG5ld2VyIGhhcmR3YXJlIHJlcXVpcmVzCisJICovCisKKwlpZiAodGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWdvdG8gd2F0Y2hkb2dfc2hvcnRfY2lyY3VpdDsKKworCS8qIGdldCBvbmUgYml0IGZvciBldmVyeSBhY3RpdmUgdHgvcnggaW50ZXJydXB0IHZlY3RvciAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxdiA9IGFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQlpZiAocXYtPnJ4cl9jb3VudCB8fCBxdi0+dHhyX2NvdW50KQorCQkJZWljcyB8PSAoMSA8PCBpKTsKKwl9CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlDUywgKHUzMillaWNzKTsKKword2F0Y2hkb2dfc2hvcnRfY2lyY3VpdDoKKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKK30KKworLyoqCisgKiBpeGdiZXZmX3R4X3RpbWVvdXQgLSBSZXNwb25kIHRvIGEgVHggSGFuZworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXI7CisJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCByZXNldF90YXNrKTsKKworCS8qIElmIHdlJ3JlIGFscmVhZHkgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChfX0lYR0JFVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisKKwlpeGdiZXZmX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLAorCQkJCQkJICAgICAgIHdhdGNoZG9nX3Rhc2spOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJYm9vbCBsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fV0FUQ0hET0dfVEFTSzsKKworCS8qCisJICogQWx3YXlzIGNoZWNrIHRoZSBsaW5rIG9uIHRoZSB3YXRjaGRvZyBiZWNhdXNlIHdlIGhhdmUKKwkgKiBubyBMU0MgaW50ZXJydXB0CisJICovCisJaWYgKGh3LT5tYWMub3BzLmNoZWNrX2xpbmspIHsKKwkJaWYgKChody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwKKwkJCQkJICAgICZsaW5rX3VwLCBmYWxzZSkpICE9IDApIHsKKwkJCWFkYXB0ZXItPmxpbmtfdXAgPSBsaW5rX3VwOworCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IGxpbmtfc3BlZWQ7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKKwkJCWdvdG8gcGZfaGFzX3Jlc2V0OworCQl9CisJfSBlbHNlIHsKKwkJLyogYWx3YXlzIGFzc3VtZSBsaW5rIGlzIHVwLCBpZiBubyBjaGVjayBsaW5rCisJCSAqIGZ1bmN0aW9uICovCisJCWxpbmtfc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJbGlua191cCA9IHRydWU7CisJfQorCWFkYXB0ZXItPmxpbmtfdXAgPSBsaW5rX3VwOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOworCisJaWYgKGxpbmtfdXApIHsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCWh3X2RiZygmYWRhcHRlci0+aHcsICJOSUMgTGluayBpcyBVcCAlcywgIiwKKwkJCSAgICAgICAoKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpID8KKwkJCQkiMTAgR2JwcyIgOiAiMSBHYnBzIikpOworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7CisJCX0gZWxzZSB7CisJCQkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovCisJCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IHRydWU7CisJCX0KKwl9IGVsc2UgeworCQlhZGFwdGVyLT5saW5rX3VwID0gZmFsc2U7CisJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAiTklDIExpbmsgaXMgRG93blxuIik7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisJCX0KKwl9CisKK3BmX2hhc19yZXNldDoKKwlpeGdiZXZmX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKKworCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgZXZlcnkgd2F0Y2hkb2cgcGVyaW9kICovCisJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOworCisJLyogUmVzZXQgdGhlIHRpbWVyICovCisJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKKwkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgKDIgKiBIWikpKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7Cit9CisKKy8qKgorICogaXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyAtIEZyZWUgVHggUmVzb3VyY2VzIHBlciBRdWV1ZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAdHhfcmluZzogVHggZGVzY3JpcHRvciByaW5nIGZvciBhIHNwZWNpZmljIHF1ZXVlCisgKgorICogRnJlZSBhbGwgdHJhbnNtaXQgc29mdHdhcmUgcmVzb3VyY2VzCisgKiovCit2b2lkIGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWl4Z2JldmZfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCB0eF9yaW5nKTsKKworCXZmcmVlKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHR4X3JpbmctPnNpemUsIHR4X3JpbmctPmRlc2MsIHR4X3JpbmctPmRtYSk7CisKKwl0eF9yaW5nLT5kZXNjID0gTlVMTDsKK30KKworLyoqCisgKiBpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyAtIEZyZWUgVHggUmVzb3VyY2VzIGZvciBBbGwgUXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBGcmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJICAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisKK30KKworLyoqCisgKiBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IHJlc291cmNlcyAoRGVzY3JpcHRvcnMpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiAgICB0eCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK2ludCBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCisJCWdvdG8gZXJyOworCW1lbXNldCh0eF9yaW5nLT50eF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CisKKwl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKKwkJCQkJICAgICAmdHhfcmluZy0+ZG1hKTsKKwlpZiAoIXR4X3JpbmctPmRlc2MpCisJCWdvdG8gZXJyOworCisJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCXR4X3JpbmctPndvcmtfbGltaXQgPSB0eF9yaW5nLT5jb3VudDsKKwlyZXR1cm4gMDsKKworZXJyOgorCXZmcmVlKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IE5VTEw7CisJaHdfZGJnKCZhZGFwdGVyLT5odywgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0cmFuc21pdCAiCisJICAgICAgICJkZXNjcmlwdG9yIHJpbmdcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyAtIGFsbG9jYXRlIGFsbCBxdWV1ZXMgVHggcmVzb3VyY2VzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2l0aCBhbiBlcnJvciwgdGhlbiBpdCdzIHBvc3NpYmxlIG9uZSBvcgorICogbW9yZSBvZiB0aGUgcmluZ3MgaXMgcG9wdWxhdGVkICh3aGlsZSB0aGUgcmVzdCBhcmUgbm90KS4gIEl0IGlzIHRoZQorICogY2FsbGVycyBkdXR5IHRvIGNsZWFuIHRob3NlIG9ycGhhbmVkIHJpbmdzLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWVyciA9IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWYgKCFlcnIpCisJCQljb250aW51ZTsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzIC0gYWxsb2NhdGUgUnggcmVzb3VyY2VzIChEZXNjcmlwdG9ycykKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6ICAgIHJ4IGRlc2NyaXB0b3IgcmluZyAoZm9yIGEgc3BlY2lmaWMgcXVldWUpIHRvIHNldHVwCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK2ludCBpeGdiZXZmX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gdm1hbGxvYyBidWZmZXIgbWVtb3J5IGZvciAiCisJCSAgICAgICAidGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJfQorCW1lbXNldChyeF9yaW5nLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiBSb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCisJcnhfcmluZy0+c2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjKTsKKwlyeF9yaW5nLT5zaXplID0gQUxJR04ocnhfcmluZy0+c2l6ZSwgNDA5Nik7CisKKwlyeF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwKKwkJCQkJICAgICAmcnhfcmluZy0+ZG1hKTsKKworCWlmICghcnhfcmluZy0+ZGVzYykgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJ0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOworCQl2ZnJlZShyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyk7CisJCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gTlVMTDsKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJfQorCisJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOworCisJcmV0dXJuIDA7CithbGxvY19mYWlsZWQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogaXhnYmV2Zl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzIC0gYWxsb2NhdGUgYWxsIHF1ZXVlcyBSeCByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aXRoIGFuIGVycm9yLCB0aGVuIGl0J3MgcG9zc2libGUgb25lIG9yCisgKiBtb3JlIG9mIHRoZSByaW5ncyBpcyBwb3B1bGF0ZWQgKHdoaWxlIHRoZSByZXN0IGFyZSBub3QpLiAgSXQgaXMgdGhlCisgKiBjYWxsZXJzIGR1dHkgdG8gY2xlYW4gdGhvc2Ugb3JwaGFuZWQgcmluZ3MuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZXZmX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZXJyID0gaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZiAoIWVycikKKwkJCWNvbnRpbnVlOworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIkFsbG9jYXRpb24gZm9yIFJ4IFF1ZXVlICV1IGZhaWxlZFxuIiwgaSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMgLSBGcmVlIFJ4IFJlc291cmNlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcnhfcmluZzogcmluZyB0byBjbGVhbiB0aGUgcmVzb3VyY2VzIGZyb20KKyAqCisgKiBGcmVlIGFsbCByZWNlaXZlIHNvZnR3YXJlIHJlc291cmNlcworICoqLwordm9pZCBpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpeGdiZXZmX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgcnhfcmluZyk7CisKKwl2ZnJlZShyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyk7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCByeF9yaW5nLT5zaXplLCByeF9yaW5nLT5kZXNjLCByeF9yaW5nLT5kbWEpOworCisJcnhfcmluZy0+ZGVzYyA9IE5VTEw7Cit9CisKKy8qKgorICogaXhnYmV2Zl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMgLSBGcmVlIFJ4IFJlc291cmNlcyBmb3IgQWxsIFF1ZXVlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogRnJlZSBhbGwgcmVjZWl2ZSBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJICAmYWRhcHRlci0+cnhfcmluZ1tpXSk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9vcGVuIC0gQ2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlIGFjdGl2ZQorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKgorICogVGhlIG9wZW4gZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlCisgKiBhY3RpdmUgYnkgdGhlIHN5c3RlbSAoSUZGX1VQKS4gIEF0IHRoaXMgcG9pbnQgYWxsIHJlc291cmNlcyBuZWVkZWQKKyAqIGZvciB0cmFuc21pdCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIGFyZSBhbGxvY2F0ZWQsIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHN0YXJ0ZWQsCisgKiBhbmQgdGhlIHN0YWNrIGlzIG5vdGlmaWVkIHRoYXQgdGhlIGludGVyZmFjZSBpcyByZWFkeS4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgZXJyOworCisJLyogZGlzYWxsb3cgb3BlbiBkdXJpbmcgdGVzdCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CisJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CisJCS8qIGlmIGFkYXB0ZXIgaXMgc3RpbGwgc3RvcHBlZCB0aGVuIFBGIGlzbid0IHVwIGFuZAorCQkgKiB0aGUgdmYgY2FuJ3Qgc3RhcnQuICovCisJCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CisJCQllcnIgPSBJWEdCRV9FUlJfTUJYOworCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RhcnQgLSBwZXJoYXBzIHRoZSBQRiIKKwkJCSAgICAgICAiRHJpdmVyIGlzbid0IHVwIHlldFxuIik7CisJCQlnb3RvIGVycl9zZXR1cF9yZXNldDsKKwkJfQorCX0KKworCS8qIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCisJZXJyID0gaXhnYmV2Zl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NldHVwX3R4OworCisJLyogYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9ycyAqLworCWVyciA9IGl4Z2JldmZfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zZXR1cF9yeDsKKworCWl4Z2JldmZfY29uZmlndXJlKGFkYXB0ZXIpOworCisJLyoKKwkgKiBNYXAgdGhlIFR4L1J4IHJpbmdzIHRvIHRoZSB2ZWN0b3JzIHdlIHdlcmUgYWxsb3R0ZWQuCisJICogaWYgcmVxdWVzdF9pcnEgd2lsbCBiZSBjYWxsZWQgaW4gdGhpcyBmdW5jdGlvbiBtYXBfcmluZ3MKKwkgKiBtdXN0IGJlIGNhbGxlZCAqYmVmb3JlKiB1cF9jb21wbGV0ZQorCSAqLworCWl4Z2JldmZfbWFwX3JpbmdzX3RvX3ZlY3RvcnMoYWRhcHRlcik7CisKKwllcnIgPSBpeGdiZXZmX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VwOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cywgbWF5IGF1dG8gbWFzayAqLworCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1IpOworCWVyciA9IGl4Z2JldmZfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxX2lycTsKKworCWl4Z2JldmZfaXJxX2VuYWJsZShhZGFwdGVyLCB0cnVlLCB0cnVlKTsKKworCXJldHVybiAwOworCitlcnJfcmVxX2lycToKKwlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CitlcnJfdXA6CisJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKK2Vycl9zZXR1cF9yeDoKKwlpeGdiZXZmX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9zZXR1cF90eDoKKwlpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCitlcnJfc2V0dXBfcmVzZXQ6CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwKKyAqCisgKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAorICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CisJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKKworCWl4Z2JldmZfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl90c28oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHhfZmxhZ3MsIHU4ICpoZHJfbGVuKQoreworCXN0cnVjdCBpeGdiZV9hZHZfdHhfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXUzMiB2bGFuX21hY2lwX2xlbnMgPSAwLCB0eXBlX3R1Y21kX21saGw7CisJdTMyIG1zc19sNGxlbl9pZHgsIGw0bGVuOworCisJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkgeworCQkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWw0bGVuID0gdGNwX2hkcmxlbihza2IpOworCQkqaGRyX2xlbiArPSBsNGxlbjsKKworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJCQlpcGgtPnRvdF9sZW4gPSAwOworCQkJaXBoLT5jaGVjayA9IDA7CisJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsCisJCQkJCQkJCSBpcGgtPmRhZGRyLCAwLAorCQkJCQkJCQkgSVBQUk9UT19UQ1AsCisJCQkJCQkJCSAwKTsKKwkJCWFkYXB0ZXItPmh3X3Rzb19jdHh0Kys7CisJCX0gZWxzZSBpZiAoc2tiX2lzX2dzb192Nihza2IpKSB7CisJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiA9IDA7CisJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0KKwkJCSAgICB+Y3N1bV9pcHY2X21hZ2ljKCZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJICAgICAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCSAgICAgMCwgSVBQUk9UT19UQ1AsIDApOworCQkJYWRhcHRlci0+aHdfdHNvNl9jdHh0Kys7CisJCX0KKworCQlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCWNvbnRleHRfZGVzYyA9IElYR0JFX1RYX0NUWFRERVNDX0FEVigqdHhfcmluZywgaSk7CisKKwkJLyogVkxBTiBNQUNMRU4gSVBMRU4gKi8KKwkJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikKKwkJCXZsYW5fbWFjaXBfbGVucyB8PQorCQkJCSh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fTUFTSyk7CisJCXZsYW5fbWFjaXBfbGVucyB8PSAoKHNrYl9uZXR3b3JrX29mZnNldChza2IpKSA8PAorCQkJCSAgICBJWEdCRV9BRFZUWERfTUFDTEVOX1NISUZUKTsKKwkJKmhkcl9sZW4gKz0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJCXZsYW5fbWFjaXBfbGVucyB8PQorCQkJKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CisJCSpoZHJfbGVuICs9CisJCQkoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTsKKwkJY29udGV4dF9kZXNjLT52bGFuX21hY2lwX2xlbnMgPSBjcHVfdG9fbGUzMih2bGFuX21hY2lwX2xlbnMpOworCQljb250ZXh0X2Rlc2MtPnNlcW51bV9zZWVkID0gMDsKKworCQkvKiBBRFYgRFRZUCBUVUNNRCBNS1JMT0MvSVNDU0lIRURMRU4gKi8KKwkJdHlwZV90dWNtZF9tbGhsID0gKElYR0JFX1RYRF9DTURfREVYVCB8CisJCQkJICAgIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQpOworCisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKKwkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQljb250ZXh0X2Rlc2MtPnR5cGVfdHVjbWRfbWxobCA9IGNwdV90b19sZTMyKHR5cGVfdHVjbWRfbWxobCk7CisKKwkJLyogTVNTIEw0TEVOIElEWCAqLworCQltc3NfbDRsZW5faWR4ID0KKwkJCShza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IElYR0JFX0FEVlRYRF9NU1NfU0hJRlQpOworCQltc3NfbDRsZW5faWR4IHw9IChsNGxlbiA8PCBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQpOworCQkvKiB1c2UgaW5kZXggMSBmb3IgVFNPICovCisJCW1zc19sNGxlbl9pZHggfD0gKDEgPDwgSVhHQkVfQURWVFhEX0lEWF9TSElGVCk7CisJCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9IGNwdV90b19sZTMyKG1zc19sNGxlbl9pZHgpOworCisJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXhnYmV2Zl90eF9jc3VtKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHhfZmxhZ3MpCit7CisJc3RydWN0IGl4Z2JlX2Fkdl90eF9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXUzMiB2bGFuX21hY2lwX2xlbnMgPSAwLCB0eXBlX3R1Y21kX21saGwgPSAwOworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgfHwKKwkgICAgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikpIHsKKwkJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJY29udGV4dF9kZXNjID0gSVhHQkVfVFhfQ1RYVERFU0NfQURWKCp0eF9yaW5nLCBpKTsKKworCQlpZiAodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19WTEFOKQorCQkJdmxhbl9tYWNpcF9sZW5zIHw9ICh0eF9mbGFncyAmCisJCQkJCSAgICBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0spOworCQl2bGFuX21hY2lwX2xlbnMgfD0gKHNrYl9uZXR3b3JrX29mZnNldChza2IpIDw8CisJCQkJICAgIElYR0JFX0FEVlRYRF9NQUNMRU5fU0hJRlQpOworCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJCXZsYW5fbWFjaXBfbGVucyB8PSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCisJCQkJCSAgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CisKKwkJY29udGV4dF9kZXNjLT52bGFuX21hY2lwX2xlbnMgPSBjcHVfdG9fbGUzMih2bGFuX21hY2lwX2xlbnMpOworCQljb250ZXh0X2Rlc2MtPnNlcW51bV9zZWVkID0gMDsKKworCQl0eXBlX3R1Y21kX21saGwgfD0gKElYR0JFX1RYRF9DTURfREVYVCB8CisJCQkJICAgIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQpOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9JUFY0OworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkgICAgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCisJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkJSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgICAgICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCAiCisJCQkJCSAgICAgICAicHJvdG89JXghXG4iLAorCQkJCQkgICAgICAgc2tiLT5wcm90b2NvbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJY29udGV4dF9kZXNjLT50eXBlX3R1Y21kX21saGwgPSBjcHVfdG9fbGUzMih0eXBlX3R1Y21kX21saGwpOworCQkvKiB1c2UgaW5kZXggemVybyBmb3IgdHggY2hlY2tzdW0gb2ZmbG9hZCAqLworCQljb250ZXh0X2Rlc2MtPm1zc19sNGxlbl9pZHggPSAwOworCisJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCWFkYXB0ZXItPmh3X2NzdW1fdHhfZ29vZCsrOworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl90eF9tYXAoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgZmlyc3QpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJdW5zaWduZWQgaW50IGY7CisKKwlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwlsZW4gPSBtaW4oc2tiX2hlYWRsZW4oc2tiKSwgdG90YWwpOworCXdoaWxlIChsZW4pIHsKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCXNpemUgPSBtaW4obGVuLCAodW5zaWduZWQgaW50KUlYR0JFX01BWF9EQVRBX1BFUl9UWEQpOworCisJCXR4X2J1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOworCQl0eF9idWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UgPSBmYWxzZTsKKwkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgIHNrYi0+ZGF0YSArIG9mZnNldCwKKwkJCQkJCSAgICAgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgdHhfYnVmZmVyX2luZm8tPmRtYSkpCisJCQlnb3RvIGRtYV9lcnJvcjsKKwkJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQl0eF9idWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisKKwkJbGVuIC09IHNpemU7CisJCXRvdGFsIC09IHNpemU7CisJCW9mZnNldCArPSBzaXplOworCQljb3VudCsrOworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJfQorCisJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKKwkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CisJCWxlbiA9IG1pbigodW5zaWduZWQgaW50KWZyYWctPnNpemUsIHRvdGFsKTsKKwkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisKKwkJd2hpbGUgKGxlbikgeworCQkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCQlzaXplID0gbWluKGxlbiwgKHVuc2lnbmVkIGludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKKworCQkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CisJCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQkJICAgZnJhZy0+cGFnZSwKKwkJCQkJCQkgICBvZmZzZXQsCisJCQkJCQkJICAgc2l6ZSwKKwkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXR4X2J1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSA9IHRydWU7CisJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHR4X2J1ZmZlcl9pbmZvLT5kbWEpKQorCQkJCWdvdG8gZG1hX2Vycm9yOworCQkJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCQlsZW4gLT0gc2l6ZTsKKwkJCXRvdGFsIC09IHNpemU7CisJCQlvZmZzZXQgKz0gc2l6ZTsKKwkJCWNvdW50Kys7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQorCQlpZiAodG90YWwgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDApCisJCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7CisJZWxzZQorCQlpID0gaSAtIDE7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uc2tiID0gc2tiOworCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKKworCXJldHVybiBjb3VudDsKKworZG1hX2Vycm9yOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKworCS8qIGNsZWFyIHRpbWVzdGFtcCBhbmQgZG1hIG1hcHBpbmdzIGZvciBmYWlsZWQgdHhfYnVmZmVyX2luZm8gbWFwICovCisJdHhfYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSAwOworCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKKwljb3VudC0tOworCisJLyogY2xlYXIgdGltZXN0YW1wIGFuZCBkbWEgbWFwcGluZ3MgZm9yIHJlbWFpbmluZyBwb3J0aW9uIG9mIHBhY2tldCAqLworCXdoaWxlIChjb3VudCA+PSAwKSB7CisJCWNvdW50LS07CisJCWktLTsKKwkJaWYgKGkgPCAwKQorCQkJaSArPSB0eF9yaW5nLT5jb3VudDsKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCWl4Z2JldmZfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgdHhfYnVmZmVyX2luZm8pOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF9xdWV1ZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nLCBpbnQgdHhfZmxhZ3MsCisJCQkgICAgIGludCBjb3VudCwgdTMyIHBheWxlbiwgdTggaGRyX2xlbikKK3sKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYyA9IE5VTEw7CisJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1MzIgb2xpbmZvX3N0YXR1cyA9IDAsIGNtZF90eXBlX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwl1MzIgdHhkX2NtZCA9IElYR0JFX1RYRF9DTURfRU9QIHwgSVhHQkVfVFhEX0NNRF9SUyB8IElYR0JFX1RYRF9DTURfSUZDUzsKKworCWNtZF90eXBlX2xlbiB8PSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBOworCisJY21kX3R5cGVfbGVuIHw9IElYR0JFX0FEVlRYRF9EQ01EX0lGQ1MgfCBJWEdCRV9BRFZUWERfRENNRF9ERVhUOworCisJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikKKwkJY21kX3R5cGVfbGVuIHw9IElYR0JFX0FEVlRYRF9EQ01EX1ZMRTsKKworCWlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1RTTykgeworCQljbWRfdHlwZV9sZW4gfD0gSVhHQkVfQURWVFhEX0RDTURfVFNFOworCisJCW9saW5mb19zdGF0dXMgfD0gSVhHQkVfVFhEX1BPUFRTX1RYU00gPDwKKwkJCUlYR0JFX0FEVlRYRF9QT1BUU19TSElGVDsKKworCQkvKiB1c2UgaW5kZXggMSBjb250ZXh0IGZvciB0c28gKi8KKwkJb2xpbmZvX3N0YXR1cyB8PSAoMSA8PCBJWEdCRV9BRFZUWERfSURYX1NISUZUKTsKKwkJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfSVBWNCkKKwkJCW9saW5mb19zdGF0dXMgfD0gSVhHQkVfVFhEX1BPUFRTX0lYU00gPDwKKwkJCQlJWEdCRV9BRFZUWERfUE9QVFNfU0hJRlQ7CisKKwl9IGVsc2UgaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfQ1NVTSkKKwkJb2xpbmZvX3N0YXR1cyB8PSBJWEdCRV9UWERfUE9QVFNfVFhTTSA8PAorCQkJSVhHQkVfQURWVFhEX1BPUFRTX1NISUZUOworCisJb2xpbmZvX3N0YXR1cyB8PSAoKHBheWxlbiAtIGhkcl9sZW4pIDw8IElYR0JFX0FEVlRYRF9QQVlMRU5fU0hJRlQpOworCisJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCXdoaWxlIChjb3VudC0tKSB7CisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOworCQl0eF9kZXNjLT5yZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodHhfYnVmZmVyX2luZm8tPmRtYSk7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuID0KKwkJCWNwdV90b19sZTMyKGNtZF90eXBlX2xlbiB8IHR4X2J1ZmZlcl9pbmZvLT5sZW5ndGgpOworCQl0eF9kZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgPSBjcHVfdG9fbGUzMihvbGluZm9fc3RhdHVzKTsKKwkJaSsrOworCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCX0KKworCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuIHw9IGNwdV90b19sZTMyKHR4ZF9jbWQpOworCisJLyoKKwkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKKwkgKiBzdWNoIGFzIElBLTY0KS4KKwkgKi8KKwl3bWIoKTsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworfQorCitzdGF0aWMgaW50IF9faXhnYmV2Zl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywgaW50IHNpemUpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCS8qIEhlcmJlcnQncyBvcmlnaW5hbCBwYXRjaCBoYWQ6CisJICogIHNtcF9tYl9fYWZ0ZXJfbmV0aWZfc3RvcF9xdWV1ZSgpOworCSAqIGJ1dCBzaW5jZSB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0LCBqdXN0IG9wZW4gY29kZSBpdC4gKi8KKwlzbXBfbWIoKTsKKworCS8qIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gaW4gYSBjYXNlIGFub3RoZXIgQ1BVIGhhcyBqdXN0CisJICogbWFkZSByb29tIGF2YWlsYWJsZS4gKi8KKwlpZiAobGlrZWx5KElYR0JFX0RFU0NfVU5VU0VEKHR4X3JpbmcpIDwgc2l6ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBBIHJlcHJpZXZlISAtIHVzZSBzdGFydF9xdWV1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgY2FsbCBzY2hlZHVsZSAqLworCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpeGdiZXZmX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywgaW50IHNpemUpCit7CisJaWYgKGxpa2VseShJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBzaXplKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9faXhnYmV2Zl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZzsKKwl1bnNpZ25lZCBpbnQgZmlyc3Q7CisJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKKwl1OCBoZHJfbGVuID0gMDsKKwlpbnQgcl9pZHggPSAwLCB0c287CisJaW50IGNvdW50ID0gMDsKKworCXVuc2lnbmVkIGludCBmOworCisJdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKKworCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdHhfZmxhZ3MgfD0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOworCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19WTEFOOworCX0KKworCS8qIGZvdXIgdGhpbmdzIGNhbiBjYXVzZSB1cyB0byBuZWVkIGEgY29udGV4dCBkZXNjcmlwdG9yICovCisJaWYgKHNrYl9pc19nc28oc2tiKSB8fAorCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgfHwKKwkgICAgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikpCisJCWNvdW50Kys7CisKKwljb3VudCArPSBUWERfVVNFX0NPVU5UKHNrYl9oZWFkbGVuKHNrYikpOworCWZvciAoZiA9IDA7IGYgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmKyspCisJCWNvdW50ICs9IFRYRF9VU0VfQ09VTlQoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXS5zaXplKTsKKworCWlmIChpeGdiZXZmX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBjb3VudCkpIHsKKwkJYWRhcHRlci0+dHhfYnVzeSsrOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJZmlyc3QgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfSVBWNDsKKwl0c28gPSBpeGdiZXZmX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLCAmaGRyX2xlbik7CisJaWYgKHRzbyA8IDApIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAodHNvKQorCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19UU087CisJZWxzZSBpZiAoaXhnYmV2Zl90eF9jc3VtKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpICYmCisJCSAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCisJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0NTVU07CisKKwlpeGdiZXZmX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAorCQkJIGl4Z2JldmZfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsIGZpcnN0KSwKKwkJCSBza2ItPmxlbiwgaGRyX2xlbik7CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCWl4Z2JldmZfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIERFU0NfTkVFREVEKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKy8qKgorICogaXhnYmV2Zl9nZXRfc3RhdHMgLSBHZXQgU3lzdGVtIE5ldHdvcmsgU3RhdGlzdGljcworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KKyAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxseSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgorICoqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppeGdiZXZmX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogb25seSByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHMgKi8KKwlyZXR1cm4gJmFkYXB0ZXItPm5ldF9zdGF0czsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldF9tYWMgLSBDaGFuZ2UgdGhlIEV0aGVybmV0IEFkZHJlc3Mgb2YgdGhlIE5JQworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHA6IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkoaHctPm1hYy5hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCWlmIChody0+bWFjLm9wcy5zZXRfcmFyKQorCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBuZXdfbXR1OiBuZXcgdmFsdWUgZm9yIG1heGltdW0gZnJhbWUgc2l6ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisKKwkvKiBNVFUgPCA2OCBpcyBhbiBlcnJvciBhbmQgY2F1c2VzIHByb2JsZW1zIG9uIHNvbWUga2VybmVscyAqLworCWlmICgobmV3X210dSA8IDY4KSB8fCAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3X2RiZygmYWRhcHRlci0+aHcsICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwKKwkgICAgICAgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOworCS8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqLworCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWl4Z2JldmZfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWl4Z2JldmZfZG93bihhZGFwdGVyKTsKKwkJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKKwkJaXhnYmV2Zl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CisJCWl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCX0KKworI2lmZGVmIENPTkZJR19QTQorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworI2VuZGlmCisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhnYmVfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gJml4Z2JldmZfb3BlbiwKKwkubmRvX3N0b3AJCT0gJml4Z2JldmZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9ICZpeGdiZXZmX3htaXRfZnJhbWUsCisJLm5kb19nZXRfc3RhdHMJCT0gJml4Z2JldmZfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X3J4X21vZGUJPSAmaXhnYmV2Zl9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9ICZpeGdiZXZmX3NldF9yeF9tb2RlLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gJml4Z2JldmZfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUJCT0gJml4Z2JldmZfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gJml4Z2JldmZfdHhfdGltZW91dCwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSAmaXhnYmV2Zl92bGFuX3J4X3JlZ2lzdGVyLAorCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gJml4Z2JldmZfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9ICZpeGdiZXZmX3ZsYW5fcnhfa2lsbF92aWQsCit9OworCitzdGF0aWMgdm9pZCBpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcjsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaXhnYmVfbmV0ZGV2X29wczsKKwlpeGdiZXZmX3NldF9ldGh0b29sX29wcyhkZXYpOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7Cit9CisKKy8qKgorICogaXhnYmV2Zl9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqIEBlbnQ6IGVudHJ5IGluIGl4Z2JldmZfcGNpX3RibAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKgorICogaXhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS4KKyAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIGFkYXB0ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUsCisgKiBhbmQgYSBoYXJkd2FyZSByZXNldCBvY2N1ci4KKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGl4Z2JldmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gKmlpID0gaXhnYmV2Zl9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKKwlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOworCWludCBlcnIsIHBjaV91c2luZ19kYWM7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICYmCisJICAgICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJfSBlbHNlIHsKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKGVycikgeworCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCisJCQkJCQkJICBETUFfQklUX01BU0soMzIpKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyB1c2FibGUgRE1BICIKKwkJCQkJImNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKKwkJCQlnb3RvIGVycl9kbWE7CisJCQl9CisJCX0KKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBpeGdiZXZmX2RyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9yZXF1ZXN0X3JlZ2lvbnMgZmFpbGVkIDB4JXhcbiIsIGVycik7CisJCWdvdG8gZXJyX3BjaV9yZWc7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKyNpZmRlZiBIQVZFX1RYX01RCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIpLAorCQkJCSAgIE1BWF9UWF9RVUVVRVMpOworI2Vsc2UKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGl4Z2JldmZfYWRhcHRlcikpOworI2VuZGlmCisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfZXRoZXJkZXY7CisJfQorCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCWh3ID0gJmFkYXB0ZXItPmh3OworCWh3LT5iYWNrID0gYWRhcHRlcjsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gKDEgPDwgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCkgLSAxOworCisJLyoKKwkgKiBjYWxsIHNhdmUgc3RhdGUgaGVyZSBpbiBzdGFuZGFsb25lIGRyaXZlciBiZWNhdXNlIGl0IHJlbGllcyBvbgorCSAqIGFkYXB0ZXIgc3RydWN0IHRvIGV4aXN0LCBhbmQgbmVlZHMgdG8gY2FsbCBuZXRkZXZfcHJpdgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJaHctPmh3X2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWlmICghaHctPmh3X2FkZHIpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKG5ldGRldik7CisKKwlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKKworCS8qIFNldHVwIGh3IGFwaSAqLworCW1lbWNweSgmaHctPm1hYy5vcHMsIGlpLT5tYWNfb3BzLCBzaXplb2YoaHctPm1hYy5vcHMpKTsKKwlody0+bWFjLnR5cGUgID0gaWktPm1hYzsKKworCW1lbWNweSgmaHctPm1ieC5vcHMsICZpeGdiZXZmX21ieF9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMpKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0NBUEFCTEU7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYXzFCVUZfQ0FQQUJMRTsKKworCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLworCWVyciA9IGl4Z2JldmZfc3dfaW5pdChhZGFwdGVyKTsKKworCWl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoYWRhcHRlcik7CisKKyNpZmRlZiBNQVhfU0tCX0ZSQUdTCisJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAorCQkJICAgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCSAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAorCQkJICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCisJaWYgKHBjaV91c2luZ19kYWMpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCisjZW5kaWYgLyogTUFYX1NLQl9GUkFHUyAqLworCisJLyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqLworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIE1BQyBhZGRyZXNzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfc3dfaW5pdDsKKwl9CisKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmaXhnYmV2Zl93YXRjaGRvZzsKKwlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKworCUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywgaXhnYmV2Zl9yZXNldF90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGl4Z2JldmZfd2F0Y2hkb2dfdGFzayk7CisKKwllcnIgPSBpeGdiZXZmX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zd19pbml0OworCisJLyogcGljayB1cCB0aGUgUENJIGJ1cyBzZXR0aW5ncyBmb3IgcmVwb3J0aW5nIGxhdGVyICovCisJaWYgKGh3LT5tYWMub3BzLmdldF9idXNfaW5mbykKKwkJaHctPm1hYy5vcHMuZ2V0X2J1c19pbmZvKGh3KTsKKworCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisKKwlhZGFwdGVyLT5uZXRkZXZfcmVnaXN0ZXJlZCA9IHRydWU7CisKKwkvKiBwcmludCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlod19kYmcoaHcsICIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeFxuIiwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkclsxXSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkclsyXSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkclszXSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkcls0XSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisKKwlod19kYmcoaHcsICJNQUM6ICVkXG4iLCBody0+bWFjLnR5cGUpOworCisJaHdfZGJnKGh3LCAiTFJPIGlzIGRpc2FibGVkIFxuIik7CisKKwlod19kYmcoaHcsICJJbnRlbChSKSA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uXG4iKTsKKwljYXJkc19mb3VuZCsrOworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CitlcnJfc3dfaW5pdDoKKwlpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlvdW5tYXAoaHctPmh3X2FkZHIpOworZXJyX2lvcmVtYXA6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK2Vycl9hbGxvY19ldGhlcmRldjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX3BjaV9yZWc6CitlcnJfZG1hOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfcmVtb3ZlIC0gRGV2aWNlIFJlbW92YWwgUm91dGluZQorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKgorICogaXhnYmV2Zl9yZW1vdmUgaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIHRvIGFsZXJ0IHRoZSBkcml2ZXIKKyAqIHRoYXQgaXQgc2hvdWxkIHJlbGVhc2UgYSBQQ0kgZGV2aWNlLiAgVGhlIGNvdWxkIGJlIGNhdXNlZCBieSBhCisgKiBIb3QtUGx1ZyBldmVudCwgb3IgYmVjYXVzZSB0aGUgZHJpdmVyIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbQorICogbWVtb3J5LgorICoqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGl4Z2JldmZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCisJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWlmIChhZGFwdGVyLT5uZXRkZXZfcmVnaXN0ZXJlZCkgeworCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCQlhZGFwdGVyLT5uZXRkZXZfcmVnaXN0ZXJlZCA9IGZhbHNlOworCX0KKworCWl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisKKwlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKKwlod19kYmcoJmFkYXB0ZXItPmh3LCAiUmVtb3ZlIGNvbXBsZXRlXG4iKTsKKworCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl4Z2JldmZfZHJpdmVyID0geworCS5uYW1lICAgICA9IGl4Z2JldmZfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gaXhnYmV2Zl9wY2lfdGJsLAorCS5wcm9iZSAgICA9IGl4Z2JldmZfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoaXhnYmV2Zl9yZW1vdmUpLAorCS5zaHV0ZG93biA9IGl4Z2JldmZfc2h1dGRvd24sCit9OworCisvKioKKyAqIGl4Z2JlX2luaXRfbW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCisgKgorICogaXhnYmVfaW5pdF9tb2R1bGUgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcworICogbG9hZGVkLiBBbGwgaXQgZG9lcyBpcyByZWdpc3RlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLgorICoqLworc3RhdGljIGludCBfX2luaXQgaXhnYmV2Zl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmV2ZjogJXMgLSB2ZXJzaW9uICVzXG4iLCBpeGdiZXZmX2RyaXZlcl9zdHJpbmcsCisJICAgICAgIGl4Z2JldmZfZHJpdmVyX3ZlcnNpb24pOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIGl4Z2JldmZfY29weXJpZ2h0KTsKKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJml4Z2JldmZfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChpeGdiZXZmX2luaXRfbW9kdWxlKTsKKworLyoqCisgKiBpeGdiZV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIGl4Z2JlX2V4aXRfbW9kdWxlIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgZHJpdmVyIGlzIHJlbW92ZWQKKyAqIGZyb20gbWVtb3J5LgorICoqLworc3RhdGljIHZvaWQgX19leGl0IGl4Z2JldmZfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml4Z2JldmZfZHJpdmVyKTsKK30KKworI2lmZGVmIERFQlVHCisvKioKKyAqIGl4Z2JlX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKKyAqIHVzZWQgYnkgaGFyZHdhcmUgbGF5ZXIgdG8gcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgKiovCitjaGFyICppeGdiZXZmX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlyZXR1cm4gYWRhcHRlci0+bmV0ZGV2LT5uYW1lOworfQorCisjZW5kaWYKK21vZHVsZV9leGl0KGl4Z2JldmZfZXhpdF9tb2R1bGUpOworCisvKiBpeGdiZXZmX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxNDM1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtYnguaCIKKworLyoqCisgKiAgaXhnYmV2Zl9wb2xsX2Zvcl9tc2cgLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3BvbGxfZm9yX21zZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCXdoaWxlIChjb3VudGRvd24gJiYgbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodykpIHsKKwkJY291bnRkb3duLS07CisJCXVkZWxheShtYngtPnVkZWxheSk7CisJfQorCisJLyogaWYgd2UgZmFpbGVkLCBhbGwgZnV0dXJlIHBvc3RlZCBtZXNzYWdlcyBmYWlsIHVudGlsIHJlc2V0ICovCisJaWYgKCFjb3VudGRvd24pCisJCW1ieC0+dGltZW91dCA9IDA7CisKKwlyZXR1cm4gY291bnRkb3duID8gMCA6IElYR0JFX0VSUl9NQlg7Cit9CisKKy8qKgorICogIGl4Z2JldmZfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9wb2xsX2Zvcl9hY2soc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2soaHcpKSB7CisJCWNvdW50ZG93bi0tOworCQl1ZGVsYXkobWJ4LT51ZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworCisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZXZmX3JlYWRfcG9zdGVkX21ieCAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZCByZWNlaXZlIG1lc3NhZ2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQKKyAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCXJldF92YWwgPSBpeGdiZXZmX3BvbGxfZm9yX21zZyhodyk7CisKKwkvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX3dyaXRlX3Bvc3RlZF9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gsIHdhaXQgZm9yIGFjaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqCisgKiAgcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kCisgKiAgcmVjZWl2ZWQgYW4gYWNrIHRvIHRoYXQgbWVzc2FnZSB3aXRoaW4gZGVsYXkgKiB0aW1lb3V0IHBlcmlvZAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWw7CisKKwkvKiBzZW5kIG1zZyAqLworCXJldF92YWwgPSBtYngtPm9wcy53cml0ZShodywgbXNnLCBzaXplKTsKKworCS8qIGlmIG1zZyBzZW50IHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhbiBhY2sgKi8KKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBpeGdiZXZmX3BvbGxfZm9yX2Fjayhodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZWFkX3YycF9tYWlsYm94IC0gcmVhZCB2MnAgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHRoZSB2MnAgbWFpbGJveCB3aXRob3V0IGxvc2luZyB0aGUgcmVhZCB0bworICogIGNsZWFyIHN0YXR1cyBiaXRzLgorICoqLworc3RhdGljIHUzMiBpeGdiZXZmX3JlYWRfdjJwX21haWxib3goc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgdjJwX21haWxib3ggPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZNQUlMQk9YKTsKKworCXYycF9tYWlsYm94IHw9IGh3LT5tYngudjJwX21haWxib3g7CisJaHctPm1ieC52MnBfbWFpbGJveCB8PSB2MnBfbWFpbGJveCAmIElYR0JFX1ZGTUFJTEJPWF9SMkNfQklUUzsKKworCXJldHVybiB2MnBfbWFpbGJveDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9jaGVja19mb3JfYml0X3ZmIC0gRGV0ZXJtaW5lIGlmIGEgc3RhdHVzIGJpdCB3YXMgc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWFzazogYml0bWFzayBmb3IgYml0cyB0byBiZSB0ZXN0ZWQgYW5kIGNsZWFyZWQKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGZvciB0aGUgcmVhZCB0byBjbGVhciBiaXRzIHdpdGhpbgorICogIHRoZSBWMlAgbWFpbGJveC4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBtYXNrKQoreworCXUzMiB2MnBfbWFpbGJveCA9IGl4Z2JldmZfcmVhZF92MnBfbWFpbGJveChodyk7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKHYycF9tYWlsYm94ICYgbWFzaykKKwkJcmV0X3ZhbCA9IDA7CisKKwlody0+bWJ4LnYycF9tYWlsYm94ICY9IH5tYXNrOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX21zZ192ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyBzZW50IG1haWwKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIDAgaWYgdGhlIFBGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmICghaXhnYmV2Zl9jaGVja19mb3JfYml0X3ZmKGh3LCBJWEdCRV9WRk1BSUxCT1hfUEZTVFMpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJlcXMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSydkCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJucyAwIGlmIHRoZSBQRiBoYXMgc2V0IHRoZSBBQ0sgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX2Zvcl9hY2tfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlpZiAoIWl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihodywgSVhHQkVfVkZNQUlMQk9YX1BGQUNLKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX3JzdF92ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyByZXNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIHJldHVybnMgdHJ1ZSBpZiB0aGUgUEYgaGFzIHNldCB0aGUgcmVzZXQgZG9uZSBiaXQgb3IgZWxzZSBmYWxzZQorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX2Zvcl9yc3RfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlpZiAoIWl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihodywgKElYR0JFX1ZGTUFJTEJPWF9SU1REIHwKKwkJCQkJIElYR0JFX1ZGTUFJTEJPWF9SU1RJKSkpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMucnN0cysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX29idGFpbl9tYnhfbG9ja192ZiAtIG9idGFpbiBtYWlsYm94IGxvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm4gMCBpZiB3ZSBvYnRhaW5lZCB0aGUgbWFpbGJveCBsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfb2J0YWluX21ieF9sb2NrX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZNQUlMQk9YLCBJWEdCRV9WRk1BSUxCT1hfVkZVKTsKKworCS8qIHJlc2VydmUgbWFpbGJveCBmb3IgdmYgdXNlICovCisJaWYgKGl4Z2JldmZfcmVhZF92MnBfbWFpbGJveChodykgJiBJWEdCRV9WRk1BSUxCT1hfVkZVKQorCQlyZXRfdmFsID0gMDsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX3dyaXRlX21ieF92ZiAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqCisgKiAgcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl93cml0ZV9tYnhfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplKQoreworCXMzMiByZXRfdmFsOworCXUxNiBpOworCisKKwkvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi8KKwlyZXRfdmFsID0gaXhnYmV2Zl9vYnRhaW5fbWJ4X2xvY2tfdmYoaHcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dF9ub193cml0ZTsKKworCS8qIGZsdXNoIG1zZyBhbmQgYWNrcyBhcyB3ZSBhcmUgb3ZlcndyaXRpbmcgdGhlIG1lc3NhZ2UgYnVmZmVyICovCisJaXhnYmV2Zl9jaGVja19mb3JfbXNnX3ZmKGh3KTsKKwlpeGdiZXZmX2NoZWNrX2Zvcl9hY2tfdmYoaHcpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUdfQVJSQVkoaHcsIElYR0JFX1ZGTUJNRU0sIGksIG1zZ1tpXSk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfdHgrKzsKKworCS8qIERyb3AgVkZVIGFuZCBpbnRlcnJ1cHQgdGhlIFBGIHRvIHRlbGwgaXQgYSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCwgSVhHQkVfVkZNQUlMQk9YX1JFUSk7CisKK291dF9ub193cml0ZToKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZWFkX21ieF92ZiAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBpbmJveCBpbnRlbmRlZCBmb3IgdmYKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVseSByZWFkIG1lc3NhZ2UgZnJvbSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9yZWFkX21ieF92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUpCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBpOworCisJLyogbG9jayB0aGUgbWFpbGJveCB0byBwcmV2ZW50IHBmL3ZmIHJhY2UgY29uZGl0aW9uICovCisJcmV0X3ZhbCA9IGl4Z2JldmZfb2J0YWluX21ieF9sb2NrX3ZmKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXRfbm9fcmVhZDsKKworCS8qIGNvcHkgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJbXNnW2ldID0gSVhHQkVfUkVBRF9SRUdfQVJSQVkoaHcsIElYR0JFX1ZGTUJNRU0sIGkpOworCisJLyogQWNrbm93bGVkZ2UgcmVjZWlwdCBhbmQgcmVsZWFzZSBtYWlsYm94LCB0aGVuIHdlJ3JlIGRvbmUgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCwgSVhHQkVfVkZNQUlMQk9YX0FDSyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfcngrKzsKKworb3V0X25vX3JlYWQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfaW5pdF9tYnhfcGFyYW1zX3ZmIC0gc2V0IGluaXRpYWwgdmFsdWVzIGZvciB2ZiBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZXMgdGhlIGh3LT5tYnggc3RydWN0IHRvIGNvcnJlY3QgdmFsdWVzIGZvciB2ZiBtYWlsYm94CisgKi8KK3MzMiBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisKKwkvKiBzdGFydCBtYWlsYm94IGFzIHRpbWVkIG91dCBhbmQgbGV0IHRoZSByZXNldF9odyBjYWxsIHNldCB0aGUgdGltZW91dAorCSAqIHZhbHVlIHRvIGJlZ2luIGNvbW11bmljYXRpb25zICovCisJbWJ4LT50aW1lb3V0ID0gMDsKKwltYngtPnVkZWxheSA9IElYR0JFX1ZGX01CWF9JTklUX0RFTEFZOworCisJbWJ4LT5zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisKKwltYngtPnN0YXRzLm1zZ3NfdHggPSAwOworCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwltYngtPnN0YXRzLmFja3MgPSAwOworCW1ieC0+c3RhdHMucnN0cyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIGl4Z2JldmZfbWJ4X29wcyA9IHsKKwkuaW5pdF9wYXJhbXMgICA9IGl4Z2JldmZfaW5pdF9tYnhfcGFyYW1zX3ZmLAorCS5yZWFkICAgICAgICAgID0gaXhnYmV2Zl9yZWFkX21ieF92ZiwKKwkud3JpdGUgICAgICAgICA9IGl4Z2JldmZfd3JpdGVfbWJ4X3ZmLAorCS5yZWFkX3Bvc3RlZCAgID0gaXhnYmV2Zl9yZWFkX3Bvc3RlZF9tYngsCisJLndyaXRlX3Bvc3RlZCAgPSBpeGdiZXZmX3dyaXRlX3Bvc3RlZF9tYngsCisJLmNoZWNrX2Zvcl9tc2cgPSBpeGdiZXZmX2NoZWNrX2Zvcl9tc2dfdmYsCisJLmNoZWNrX2Zvcl9hY2sgPSBpeGdiZXZmX2NoZWNrX2Zvcl9hY2tfdmYsCisJLmNoZWNrX2Zvcl9yc3QgPSBpeGdiZXZmX2NoZWNrX2Zvcl9yc3RfdmYsCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBlMGJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVhHQkVfTUJYX0hfCisjZGVmaW5lIF9JWEdCRV9NQlhfSF8KKworI2luY2x1ZGUgInZmLmgiCisKKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1NJWkUgICAgICAgIDE2IC8qIDE2IDMyIGJpdCB3b3JkcyAtIDY0IGJ5dGVzICovCisjZGVmaW5lIElYR0JFX0VSUl9NQlggICAgICAgICAgICAgICAtMTAwCisKKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YICAgICAgICAgICAgIDB4MDAyRkMKKyNkZWZpbmUgSVhHQkVfVkZNQk1FTSAgICAgICAgICAgICAgIDB4MDAyMDAKKworLyogRGVmaW5lIG1haWxib3ggcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfUkVRICAgICAgMHgwMDAwMDAwMSAvKiBSZXF1ZXN0IGZvciBQRiBSZWFkeSBiaXQgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX0FDSyAgICAgIDB4MDAwMDAwMDIgLyogQWNrIFBGIG1lc3NhZ2UgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1ZGVSAgICAgIDB4MDAwMDAwMDQgLyogVkYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1BGVSAgICAgIDB4MDAwMDAwMDggLyogUEYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1BGU1RTICAgIDB4MDAwMDAwMTAgLyogUEYgd3JvdGUgYSBtZXNzYWdlIGluIHRoZSBNQiAqLworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfUEZBQ0sgICAgMHgwMDAwMDAyMCAvKiBQRiBhY2sgdGhlIHByZXZpb3VzIFZGIG1zZyAqLworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfUlNUSSAgICAgMHgwMDAwMDA0MCAvKiBQRiBoYXMgcmVzZXQgaW5kaWNhdGlvbiAqLworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfUlNURCAgICAgMHgwMDAwMDA4MCAvKiBQRiBoYXMgaW5kaWNhdGVkIHJlc2V0IGRvbmUgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1IyQ19CSVRTIDB4MDAwMDAwQjAgLyogQWxsIHJlYWQgdG8gY2xlYXIgYml0cyAqLworCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWCh4KSAgICAgICAgICAoMHgwNEIwMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1BGTUJNRU0odmZuKSAgICAgICAgICAoMHgxMzAwMCArICg2NCAqIHZmbikpCisKKyNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDBGRkZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfTUFTSyAweEZGRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgSVhHQkVfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisKKy8qIElmIGl0J3MgYSBJWEdCRV9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIElYR0JFX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorCQkJCQkgICAgICAgKiB0aGlzIGFyZSB0aGUgQUNLICovCisjZGVmaW5lIElYR0JFX1ZUX01TR1RZUEVfTkFDSyAgICAgMHg0MDAwMDAwMCAgLyogTWVzc2FnZXMgYmVsb3cgb3InZCB3aXRoCisJCQkJCSAgICAgICAqIHRoaXMgYXJlIHRoZSBOQUNLICovCisjZGVmaW5lIElYR0JFX1ZUX01TR1RZUEVfQ1RTICAgICAgMHgyMDAwMDAwMCAgLyogSW5kaWNhdGVzIHRoYXQgVkYgaXMgc3RpbGwKKwkJCQkJICAgICAgICogIGNsZWFyIHRvIHNlbmQgcmVxdWVzdHMgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHSU5GT19TSElGVCAgICAxNgorLyogYml0cyAyMzoxNiBhcmUgdXNlZCBmb3IgZXhyYSBpbmZvIGZvciBjZXJ0YWluIG1lc3NhZ2VzICovCisjZGVmaW5lIElYR0JFX1ZUX01TR0lORk9fTUFTSyAgICAgKDB4RkYgPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVCkKKworI2RlZmluZSBJWEdCRV9WRl9SRVNFVCAgICAgICAgICAgIDB4MDEgLyogVkYgcmVxdWVzdHMgcmVzZXQgKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX01BQ19BRERSICAgICAweDAyIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQUMgYWRkciAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUICAgIDB4MDMgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1DIGFkZHIgKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX1ZMQU4gICAgICAgICAweDA0IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTEFOICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9MUEUgICAgICAgICAgMHgwNSAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVk1PTFIuTFBFICovCisKKy8qIGxlbmd0aCBvZiBwZXJtYW5lbnQgYWRkcmVzcyBtZXNzYWdlIHJldHVybmVkIGZyb20gUEYgKi8KKyNkZWZpbmUgSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTiA0CisvKiB3b3JkIGluIHBlcm1hbmVudCBhZGRyZXNzIG1lc3NhZ2Ugd2l0aCB0aGUgY3VycmVudCBtdWx0aWNhc3QgdHlwZSAqLworI2RlZmluZSBJWEdCRV9WRl9NQ19UWVBFX1dPUkQgICAgIDMKKworI2RlZmluZSBJWEdCRV9QRl9DT05UUk9MX01TRyAgICAgIDB4MDEwMCAvKiBQRiBjb250cm9sIG1lc3NhZ2UgKi8KKworI2RlZmluZSBJWEdCRV9WRl9NQlhfSU5JVF9USU1FT1VUIDIwMDAgLyogbnVtYmVyIG9mIHJldHJpZXMgb24gbWFpbGJveCAqLworI2RlZmluZSBJWEdCRV9WRl9NQlhfSU5JVF9ERUxBWSAgIDUwMCAgLyogbWljcm9zZWNvbmRzIGJldHdlZW4gcmV0cmllcyAqLworCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBIVyBzdHJ1Y3QgKi8KK3N0cnVjdCBpeGdiZV9odzsKKworczMyIGl4Z2JldmZfaW5pdF9tYnhfcGFyYW1zX3ZmKHN0cnVjdCBpeGdiZV9odyAqKTsKKworI2VuZGlmIC8qIF9JWEdCRV9NQlhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvcmVncy5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmNzU5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvcmVncy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFVkZfUkVHU19IXworI2RlZmluZSBfSVhHQkVWRl9SRUdTX0hfCisKKyNkZWZpbmUgSVhHQkVfVkZDVFJMICAgICAgICAgICAweDAwMDAwCisjZGVmaW5lIElYR0JFX1ZGU1RBVFVTICAgICAgICAgMHgwMDAwOAorI2RlZmluZSBJWEdCRV9WRkxJTktTICAgICAgICAgIDB4MDAwMTAKKyNkZWZpbmUgSVhHQkVfVkZSVElNRVIgICAgICAgICAweDAwMDQ4CisjZGVmaW5lIElYR0JFX1ZGUlhNRU1XUkFQICAgICAgMHgwMzE5MAorI2RlZmluZSBJWEdCRV9WVEVJQ1IgICAgICAgICAgIDB4MDAxMDAKKyNkZWZpbmUgSVhHQkVfVlRFSUNTICAgICAgICAgICAweDAwMTA0CisjZGVmaW5lIElYR0JFX1ZURUlNUyAgICAgICAgICAgMHgwMDEwOAorI2RlZmluZSBJWEdCRV9WVEVJTUMgICAgICAgICAgIDB4MDAxMEMKKyNkZWZpbmUgSVhHQkVfVlRFSUFDICAgICAgICAgICAweDAwMTEwCisjZGVmaW5lIElYR0JFX1ZURUlBTSAgICAgICAgICAgMHgwMDExNAorI2RlZmluZSBJWEdCRV9WVEVJVFIoeCkgICAgICAgICgweDAwODIwICsgKDQgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVlRJVkFSKHgpICAgICAgICAoMHgwMDEyMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1ZUSVZBUl9NSVNDICAgICAgMHgwMDE0MAorI2RlZmluZSBJWEdCRV9WVFJTQ0lOVCh4KSAgICAgICgweDAwMTgwICsgKDQgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSREJBTCh4KSAgICAgICAoMHgwMTAwMCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRCQUgoeCkgICAgICAgKDB4MDEwMDQgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJETEVOKHgpICAgICAgICgweDAxMDA4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSREgoeCkgICAgICAgICAoMHgwMTAxMCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRUKHgpICAgICAgICAgKDB4MDEwMTggKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJYRENUTCh4KSAgICAgICgweDAxMDI4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZTUlJDVEwoeCkgICAgICAoMHgwMTAxNCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUlNDQ1RMKHgpICAgICAgKDB4MDEwMkMgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlBTUlRZUEUgICAgICAgIDB4MDAzMDAKKyNkZWZpbmUgSVhHQkVfVkZUREJBTCh4KSAgICAgICAoMHgwMjAwMCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERCQUgoeCkgICAgICAgKDB4MDIwMDQgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlRETEVOKHgpICAgICAgICgweDAyMDA4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZUREgoeCkgICAgICAgICAoMHgwMjAxMCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERUKHgpICAgICAgICAgKDB4MDIwMTggKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlRYRENUTCh4KSAgICAgICgweDAyMDI4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZURFdCQUwoeCkgICAgICAoMHgwMjAzOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERXQkFIKHgpICAgICAgKDB4MDIwM0MgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRkRDQV9SWENUUkwoeCkgICgweDAxMDBDICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZEQ0FfVFhDVFJMKHgpICAoMHgwMjAwYyArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGR1BSQyAgICAgICAgICAgMHgwMTAxQworI2RlZmluZSBJWEdCRV9WRkdQVEMgICAgICAgICAgIDB4MDIwMUMKKyNkZWZpbmUgSVhHQkVfVkZHT1JDX0xTQiAgICAgICAweDAxMDIwCisjZGVmaW5lIElYR0JFX1ZGR09SQ19NU0IgICAgICAgMHgwMTAyNAorI2RlZmluZSBJWEdCRV9WRkdPVENfTFNCICAgICAgIDB4MDIwMjAKKyNkZWZpbmUgSVhHQkVfVkZHT1RDX01TQiAgICAgICAweDAyMDI0CisjZGVmaW5lIElYR0JFX1ZGTVBSQyAgICAgICAgICAgMHgwMTAzNAorCisjZGVmaW5lIElYR0JFX1dSSVRFX1JFRyhhLCByZWcsIHZhbHVlKSB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKKworI2RlZmluZSBJWEdCRV9SRUFEX1JFRyhhLCByZWcpIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpKQorCisjZGVmaW5lIElYR0JFX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpICggXAorICAgIHdyaXRlbCgodmFsdWUpLCAoKGEpLT5od19hZGRyICsgKHJlZykgKyAoKG9mZnNldCkgPDwgMikpKSkKKworI2RlZmluZSBJWEdCRV9SRUFEX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCkgKCBcCisgICAgcmVhZGwoKGEpLT5od19hZGRyICsgKHJlZykgKyAoKG9mZnNldCkgPDwgMikpKQorCisjZGVmaW5lIElYR0JFX1dSSVRFX0ZMVVNIKGEpIChJWEdCRV9SRUFEX1JFRyhhLCBJWEdCRV9WRlNUQVRVUykpCisKKyNlbmRpZiAvKiBfSVhHQkVWRl9SRUdTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1ZGVjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYwpAQCAtMCwwICsxLDM4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInZmLmgiCisKKy8qKgorICogIGl4Z2JldmZfc3RhcnRfaHdfdmYgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSBieSBmaWxsaW5nIHRoZSBidXMgaW5mbyBzdHJ1Y3R1cmUgYW5kIG1lZGlhIHR5cGUsIGNsZWFycworICogIGFsbCBvbiBjaGlwIGNvdW50ZXJzLCBpbml0aWFsaXplcyByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzLCBtdWx0aWNhc3QKKyAqICB0YWJsZSwgVkxBTiBmaWx0ZXIgdGFibGUsIGNhbGxzIHJvdXRpbmUgdG8gc2V0IHVwIGxpbmsgYW5kIGZsb3cgY29udHJvbAorICogIHNldHRpbmdzLCBhbmQgbGVhdmVzIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzIGRpc2FibGVkIGFuZCB1bmluaXRpYWxpemVkCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfc3RhcnRfaHdfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwkvKiBDbGVhciBhZGFwdGVyIHN0b3BwZWQgZmxhZyAqLworCWh3LT5hZGFwdGVyX3N0b3BwZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZXZmX2luaXRfaHdfdmYgLSB2aXJ0dWFsIGZ1bmN0aW9uIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBJbml0aWFsaXplIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIGhhcmR3YXJlIGFuZCB0aGVuIHN0YXJ0aW5nCisgKiAgdGhlIGhhcmR3YXJlCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfaW5pdF9od192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSBody0+bWFjLm9wcy5zdGFydF9odyhodyk7CisKKwlody0+bWFjLm9wcy5nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMuYWRkcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZXZmX3Jlc2V0X2h3X3ZmIC0gUGVyZm9ybXMgaGFyZHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc2V0cyB0aGUgaGFyZHdhcmUgYnkgcmVzZXRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcyBhbmQKKyAqICBjbGVhcnMgYWxsIGludGVycnVwdHMuCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcmVzZXRfaHdfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXUzMiB0aW1lb3V0ID0gSVhHQkVfVkZfSU5JVF9USU1FT1VUOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTUFDX0FERFI7CisJdTMyIG1zZ2J1ZltJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOXTsKKwl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKworCS8qIENhbGwgYWRhcHRlciBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwlody0+bWFjLm9wcy5zdG9wX2FkYXB0ZXIoaHcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkNUUkwsIElYR0JFX0NUUkxfUlNUKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwkvKiB3ZSBjYW5ub3QgcmVzZXQgd2hpbGUgdGhlIFJTVEkgLyBSU1REIGJpdHMgYXJlIGFzc2VydGVkICovCisJd2hpbGUgKCFtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3KSAmJiB0aW1lb3V0KSB7CisJCXRpbWVvdXQtLTsKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICghdGltZW91dCkKKwkJcmV0dXJuIElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CisKKwkvKiBtYWlsYm94IHRpbWVvdXQgY2FuIG5vdyBiZWNvbWUgYWN0aXZlICovCisJbWJ4LT50aW1lb3V0ID0gSVhHQkVfVkZfTUJYX0lOSVRfVElNRU9VVDsKKworCW1zZ2J1ZlswXSA9IElYR0JFX1ZGX1JFU0VUOworCW1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCAxKTsKKworCW1zbGVlcCgxMCk7CisKKwkvKiBzZXQgb3VyICJwZXJtX2FkZHIiIGJhc2VkIG9uIGluZm8gcHJvdmlkZWQgYnkgUEYgKi8KKwkvKiBhbHNvIHNldCB1cCB0aGUgbWNfZmlsdGVyX3R5cGUgd2hpY2ggaXMgcGlnZ3kgYmFja2VkCisJICogb24gdGhlIG1hYyBhZGRyZXNzIGluIHdvcmQgMyAqLworCXJldF92YWwgPSBtYngtPm9wcy5yZWFkX3Bvc3RlZChodywgbXNnYnVmLCBJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlpZiAobXNnYnVmWzBdICE9IChJWEdCRV9WRl9SRVNFVCB8IElYR0JFX1ZUX01TR1RZUEVfQUNLKSkKKwkJcmV0dXJuIElYR0JFX0VSUl9JTlZBTElEX01BQ19BRERSOworCisJbWVtY3B5KGh3LT5tYWMucGVybV9hZGRyLCBhZGRyLCBJWEdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1MpOworCWh3LT5tYWMubWNfZmlsdGVyX3R5cGUgPSBtc2didWZbSVhHQkVfVkZfTUNfVFlQRV9XT1JEXTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZXZmX3N0b3BfaHdfdmYgLSBHZW5lcmljIHN0b3AgVHgvUnggdW5pdHMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgdGhlIGFkYXB0ZXJfc3RvcHBlZCBmbGFnIHdpdGhpbiBpeGdiZV9odyBzdHJ1Y3QuIENsZWFycyBpbnRlcnJ1cHRzLAorICogIGRpc2FibGVzIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLiBUaGUgYWRhcHRlcl9zdG9wcGVkIGZsYWcgaXMgdXNlZCBieQorICogIHRoZSBzaGFyZWQgY29kZSBhbmQgZHJpdmVycyB0byBkZXRlcm1pbmUgaWYgdGhlIGFkYXB0ZXIgaXMgaW4gYSBzdG9wcGVkCisgKiAgc3RhdGUgYW5kIHNob3VsZCBub3QgdG91Y2ggdGhlIGhhcmR3YXJlLgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3N0b3BfaHdfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgbnVtYmVyX29mX3F1ZXVlczsKKwl1MzIgcmVnX3ZhbDsKKwl1MTYgaTsKKworCS8qCisJICogU2V0IHRoZSBhZGFwdGVyX3N0b3BwZWQgZmxhZyBzbyBvdGhlciBkcml2ZXIgZnVuY3Rpb25zIHN0b3AgdG91Y2hpbmcKKwkgKiB0aGUgaGFyZHdhcmUKKwkgKi8KKwlody0+YWRhcHRlcl9zdG9wcGVkID0gdHJ1ZTsKKworCS8qIERpc2FibGUgdGhlIHJlY2VpdmUgdW5pdCBieSBzdG9wcGVkIGVhY2ggcXVldWUgKi8KKwludW1iZXJfb2ZfcXVldWVzID0gaHctPm1hYy5tYXhfcnhfcXVldWVzOworCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfcXVldWVzOyBpKyspIHsKKwkJcmVnX3ZhbCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChpKSk7CisJCWlmIChyZWdfdmFsICYgSVhHQkVfUlhEQ1RMX0VOQUJMRSkgeworCQkJcmVnX3ZhbCAmPSB+SVhHQkVfUlhEQ1RMX0VOQUJMRTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaSksIHJlZ192YWwpOworCQl9CisJfQorCisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IG1hc2sgdG8gc3RvcCBmcm9tIGludGVycnVwdHMgYmVpbmcgZ2VuZXJhdGVkICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJTUMsIElYR0JFX1ZGX0lSUV9DTEVBUl9NQVNLKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUNSKTsKKworCS8qIERpc2FibGUgdGhlIHRyYW5zbWl0IHVuaXQuICBFYWNoIHF1ZXVlIG11c3QgYmUgZGlzYWJsZWQuICovCisJbnVtYmVyX29mX3F1ZXVlcyA9IGh3LT5tYWMubWF4X3R4X3F1ZXVlczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX3F1ZXVlczsgaSsrKSB7CisJCXJlZ192YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaSkpOworCQlpZiAocmVnX3ZhbCAmIElYR0JFX1RYRENUTF9FTkFCTEUpIHsKKwkJCXJlZ192YWwgJj0gfklYR0JFX1RYRENUTF9FTkFCTEU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGkpLCByZWdfdmFsKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZXZmX210YV92ZWN0b3IgLSBEZXRlcm1pbmVzIGJpdC12ZWN0b3IgaW4gbXVsdGljYXN0IHRhYmxlIHRvIHNldAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAbWNfYWRkcjogdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgKgorICogIEV4dHJhY3RzIHRoZSAxMiBiaXRzLCBmcm9tIGEgbXVsdGljYXN0IGFkZHJlc3MsIHRvIGRldGVybWluZSB3aGljaAorICogIGJpdC12ZWN0b3IgdG8gc2V0IGluIHRoZSBtdWx0aWNhc3QgdGFibGUuIFRoZSBoYXJkd2FyZSB1c2VzIDEyIGJpdHMsIGZyb20KKyAqICBpbmNvbWluZyByeCBtdWx0aWNhc3QgYWRkcmVzc2VzLCB0byBkZXRlcm1pbmUgdGhlIGJpdC12ZWN0b3IgdG8gY2hlY2sgaW4KKyAqICB0aGUgTVRBLiBXaGljaCBvZiB0aGUgNCBjb21iaW5hdGlvbiwgb2YgMTItYml0cywgdGhlIGhhcmR3YXJlIHVzZXMgaXMgc2V0CisgKiAgYnkgdGhlIE1PIGZpZWxkIG9mIHRoZSBNQ1NUQ1RSTC4gVGhlIE1PIGZpZWxkIGlzIHNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KKyAqICB0byBtY19maWx0ZXJfdHlwZS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9tdGFfdmVjdG9yKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICptY19hZGRyKQoreworCXUzMiB2ZWN0b3IgPSAwOworCisJc3dpdGNoIChody0+bWFjLm1jX2ZpbHRlcl90eXBlKSB7CisJY2FzZSAwOiAgIC8qIHVzZSBiaXRzIFs0NzozNl0gb2YgdGhlIGFkZHJlc3MgKi8KKwkJdmVjdG9yID0gKChtY19hZGRyWzRdID4+IDQpIHwgKCgodTE2KW1jX2FkZHJbNV0pIDw8IDQpKTsKKwkJYnJlYWs7CisJY2FzZSAxOiAgIC8qIHVzZSBiaXRzIFs0NjozNV0gb2YgdGhlIGFkZHJlc3MgKi8KKwkJdmVjdG9yID0gKChtY19hZGRyWzRdID4+IDMpIHwgKCgodTE2KW1jX2FkZHJbNV0pIDw8IDUpKTsKKwkJYnJlYWs7CisJY2FzZSAyOiAgIC8qIHVzZSBiaXRzIFs0NTozNF0gb2YgdGhlIGFkZHJlc3MgKi8KKwkJdmVjdG9yID0gKChtY19hZGRyWzRdID4+IDIpIHwgKCgodTE2KW1jX2FkZHJbNV0pIDw8IDYpKTsKKwkJYnJlYWs7CisJY2FzZSAzOiAgIC8qIHVzZSBiaXRzIFs0MzozMl0gb2YgdGhlIGFkZHJlc3MgKi8KKwkJdmVjdG9yID0gKChtY19hZGRyWzRdKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA4KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6ICAvKiBJbnZhbGlkIG1jX2ZpbHRlcl90eXBlICovCisJCWJyZWFrOworCX0KKworCS8qIHZlY3RvciBjYW4gb25seSBiZSAxMi1iaXRzIG9yIGJvdW5kYXJ5IHdpbGwgYmUgZXhjZWVkZWQgKi8KKwl2ZWN0b3IgJj0gMHhGRkY7CisJcmV0dXJuIHZlY3RvcjsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9nZXRfbWFjX2FkZHJfdmYgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1hY19hZGRyOiBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHJldHJpZXZlZCBNQUMgYWRkcmVzcworICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2dldF9tYWNfYWRkcl92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpCit7CisJbWVtY3B5KG1hY19hZGRyLCBody0+bWFjLnBlcm1fYWRkciwgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZXZmX3NldF9yYXJfdmYgLSBzZXQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogUmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiAgQGFkZHI6IEFkZHJlc3MgdG8gcHV0IGludG8gcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyCisgKiAgQHZtZHE6IFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfc2V0X3Jhcl92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgsIHU4ICphZGRyLAorCQkJICAgICAgdTMyIHZtZHEpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwl1MzIgbXNnYnVmWzNdOworCXU4ICptc2dfYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKwlzMzIgcmV0X3ZhbDsKKworCW1lbXNldChtc2didWYsIDAsIHNpemVvZihtc2didWYpKTsKKwltc2didWZbMF0gPSBJWEdCRV9WRl9TRVRfTUFDX0FERFI7CisJbWVtY3B5KG1zZ19hZGRyLCBhZGRyLCA2KTsKKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGVfcG9zdGVkKGh3LCBtc2didWYsIDMpOworCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZF9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMyk7CisKKwltc2didWZbMF0gJj0gfklYR0JFX1ZUX01TR1RZUEVfQ1RTOworCisJLyogaWYgbmFja2VkIHRoZSBhZGRyZXNzIHdhcyByZWplY3RlZCwgdXNlICJwZXJtX2FkZHIiICovCisJaWYgKCFyZXRfdmFsICYmCisJICAgIChtc2didWZbMF0gPT0gKElYR0JFX1ZGX1NFVF9NQUNfQUREUiB8IElYR0JFX1ZUX01TR1RZUEVfTkFDSykpKQorCQlpeGdiZXZmX2dldF9tYWNfYWRkcl92ZihodywgaHctPm1hYy5hZGRyKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCisgKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KKyAqICBAbmV4dDogY2FsbGVyIHN1cHBsaWVkIGZ1bmN0aW9uIHRvIHJldHVybiBuZXh0IGFkZHJlc3MgaW4gbGlzdAorICoKKyAqICBVcGRhdGVzIHRoZSBNdWx0aWNhc3QgVGFibGUgQXJyYXkuCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfdXBkYXRlX21jX2FkZHJfbGlzdF92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWNfYWRkcl9saXN0LAorCQkJCQl1MzIgbWNfYWRkcl9jb3VudCwKKwkJCQkJaXhnYmVfbWNfYWRkcl9pdHIgbmV4dCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXUzMiBtc2didWZbSVhHQkVfVkZNQUlMQk9YX1NJWkVdOworCXUxNiAqdmVjdG9yX2xpc3QgPSAodTE2ICopJm1zZ2J1ZlsxXTsKKwl1MzIgdmVjdG9yOworCXUzMiBjbnQsIGk7CisJdTMyIHZtZHE7CisKKwkvKiBFYWNoIGVudHJ5IGluIHRoZSBsaXN0IHVzZXMgMSAxNiBiaXQgd29yZC4gIFdlIGhhdmUgMzAKKwkgKiAxNiBiaXQgd29yZHMgYXZhaWxhYmxlIGluIG91ciBIVyBtc2cgYnVmZmVyIChtaW51cyAxIGZvciB0aGUKKwkgKiBtc2cgdHlwZSkuICBUaGF0J3MgMzAgaGFzaCB2YWx1ZXMgaWYgd2UgcGFjayAnZW0gcmlnaHQuICBJZgorCSAqIHRoZXJlIGFyZSBtb3JlIHRoYW4gMzAgTUMgYWRkcmVzc2VzIHRvIGFkZCB0aGVuIHB1bnQgdGhlCisJICogZXh0cmFzIGZvciBub3cgYW5kIHRoZW4gYWRkIGNvZGUgdG8gaGFuZGxlIG1vcmUgdGhhbiAzMCBsYXRlci4KKwkgKiBJdCB3b3VsZCBiZSB1bnVzdWFsIGZvciBhIHNlcnZlciB0byByZXF1ZXN0IHRoYXQgbWFueSBtdWx0aS1jYXN0CisJICogYWRkcmVzc2VzIGV4Y2VwdCBmb3IgaW4gbGFyZ2UgZW50ZXJwcmlzZSBuZXR3b3JrIGVudmlyb25tZW50cy4KKwkgKi8KKworCWNudCA9IChtY19hZGRyX2NvdW50ID4gMzApID8gMzAgOiBtY19hZGRyX2NvdW50OworCW1zZ2J1ZlswXSA9IElYR0JFX1ZGX1NFVF9NVUxUSUNBU1Q7CisJbXNnYnVmWzBdIHw9IGNudCA8PCBJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCXZlY3RvciA9IGl4Z2JldmZfbXRhX3ZlY3RvcihodywgbmV4dChodywgJm1jX2FkZHJfbGlzdCwgJnZtZHEpKTsKKwkJdmVjdG9yX2xpc3RbaV0gPSB2ZWN0b3I7CisJfQorCisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkKGh3LCBtc2didWYsIElYR0JFX1ZGTUFJTEJPWF9TSVpFKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZXZmX3NldF92ZnRhX3ZmIC0gU2V0L1Vuc2V0IHZsYW4gZmlsdGVyIHRhYmxlIGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2bGFuOiAxMiBiaXQgVkxBTiBJRAorICogIEB2aW5kOiB1bnVzZWQgYnkgVkYgZHJpdmVycworICogIEB2bGFuX29uOiBpZiB0cnVlIHRoZW4gc2V0IGJpdCwgZWxzZSBjbGVhciBiaXQKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9zZXRfdmZ0YV92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCisJCQkgICAgICAgYm9vbCB2bGFuX29uKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJdTMyIG1zZ2J1ZlsyXTsKKworCW1zZ2J1ZlswXSA9IElYR0JFX1ZGX1NFVF9WTEFOOworCW1zZ2J1ZlsxXSA9IHZsYW47CisJLyogU2V0dGluZyB0aGUgOCBiaXQgZmllbGQgTVNHIElORk8gdG8gVFJVRSBpbmRpY2F0ZXMgImFkZCIgKi8KKwltc2didWZbMF0gfD0gdmxhbl9vbiA8PCBJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCisJcmV0dXJuIG1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCAyKTsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZiAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogVW51c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqICBAYXV0b25lZzogVW51c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiBVbnVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBEbyBub3RoaW5nIGFuZCByZXR1cm4gc3VjY2Vzcy4gIFZGIGRyaXZlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQorICogIGdsb2JhbCBzZXR0aW5ncy4gIE1haW50YWluZWQgZm9yIGRyaXZlciBjb21wYXRpYmlsaXR5LgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3NldHVwX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisJCQkJICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZiAtIEdldCBsaW5rL3NwZWVkIHN0YXR1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBsaW5rX3VwOiB0cnVlIGlzIGxpbmsgaXMgdXAsIGZhbHNlIG90aGVyd2lzZQorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGlzIG5lZWRlZAorICoKKyAqICBSZWFkcyB0aGUgbGlua3MgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGlmIGxpbmsgaXMgdXAgYW5kIHRoZSBjdXJyZW50IHNwZWVkCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorCQkJCSAgICAgYm9vbCAqbGlua191cCwKKwkJCQkgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQoreworCXUzMiBsaW5rc19yZWc7CisKKwlpZiAoIShody0+bWJ4Lm9wcy5jaGVja19mb3JfcnN0KGh3KSkpIHsKKwkJKmxpbmtfdXAgPSBmYWxzZTsKKwkJKnNwZWVkID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTsKKworCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkKKwkJKmxpbmtfdXAgPSB0cnVlOworCWVsc2UKKwkJKmxpbmtfdXAgPSBmYWxzZTsKKworCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRCkKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJZWxzZQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX21hY19vcHMgPSB7CisJLmluaXRfaHcgICAgICAgICAgICAgPSBpeGdiZXZmX2luaXRfaHdfdmYsCisJLnJlc2V0X2h3ICAgICAgICAgICAgPSBpeGdiZXZmX3Jlc2V0X2h3X3ZmLAorCS5zdGFydF9odyAgICAgICAgICAgID0gaXhnYmV2Zl9zdGFydF9od192ZiwKKwkuZ2V0X21hY19hZGRyICAgICAgICA9IGl4Z2JldmZfZ2V0X21hY19hZGRyX3ZmLAorCS5zdG9wX2FkYXB0ZXIgICAgICAgID0gaXhnYmV2Zl9zdG9wX2h3X3ZmLAorCS5zZXR1cF9saW5rICAgICAgICAgID0gaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZiwKKwkuY2hlY2tfbGluayAgICAgICAgICA9IGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYsCisJLnNldF9yYXIgICAgICAgICAgICAgPSBpeGdiZXZmX3NldF9yYXJfdmYsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QgPSBpeGdiZXZmX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYsCisJLnNldF92ZnRhICAgICAgICAgICAgPSBpeGdiZXZmX3NldF92ZnRhX3ZmLAorfTsKKworc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX3ZmX2luZm8gPSB7CisJLm1hYyA9IGl4Z2JlX21hY184MjU5OV92ZiwKKwkubWFjX29wcyA9ICZpeGdiZXZmX21hY19vcHMsCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NjAwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuaApAQCAtMCwwICsxLDE2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0lYR0JFX1ZGX0hfXworI2RlZmluZSBfX0lYR0JFX1ZGX0hfXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCisjaW5jbHVkZSAiZGVmaW5lcy5oIgorI2luY2x1ZGUgInJlZ3MuaCIKKyNpbmNsdWRlICJtYnguaCIKKworc3RydWN0IGl4Z2JlX2h3OworCisvKiBpdGVyYXRvciB0eXBlIGZvciB3YWxraW5nIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzICovCit0eXBlZGVmIHU4KiAoKml4Z2JlX21jX2FkZHJfaXRyKSAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKiptY19hZGRyX3B0ciwKKwkJCQkgIHUzMiAqdm1kcSk7CitzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgeworCXMzMiAoKmluaXRfaHcpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpyZXNldF9odykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKnN0YXJ0X2h3KShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqY2xlYXJfaHdfY250cnMpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwllbnVtIGl4Z2JlX21lZGlhX3R5cGUgKCpnZXRfbWVkaWFfdHlwZSkoc3RydWN0IGl4Z2JlX2h3ICopOworCXUzMiAoKmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpnZXRfbWFjX2FkZHIpKHN0cnVjdCBpeGdiZV9odyAqLCB1OCAqKTsKKwlzMzIgKCpzdG9wX2FkYXB0ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpnZXRfYnVzX2luZm8pKHN0cnVjdCBpeGdiZV9odyAqKTsKKworCS8qIExpbmsgKi8KKwlzMzIgKCpzZXR1cF9saW5rKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCwgYm9vbCwgYm9vbCk7CisJczMyICgqY2hlY2tfbGluaykoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQgKiwgYm9vbCAqLCBib29sKTsKKwlzMzIgKCpnZXRfbGlua19jYXBhYmlsaXRpZXMpKHN0cnVjdCBpeGdiZV9odyAqLCBpeGdiZV9saW5rX3NwZWVkICosCisJCQkJICAgICBib29sICopOworCisJLyogUkFSLCBNdWx0aWNhc3QsIFZMQU4gKi8KKwlzMzIgKCpzZXRfcmFyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1OCAqLCB1MzIpOworCXMzMiAoKmluaXRfcnhfYWRkcnMpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCp1cGRhdGVfbWNfYWRkcl9saXN0KShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKiwgdTMyLAorCQkJCSAgIGl4Z2JlX21jX2FkZHJfaXRyKTsKKwlzMzIgKCplbmFibGVfbWMpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpkaXNhYmxlX21jKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqY2xlYXJfdmZ0YSkoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKnNldF92ZnRhKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1MzIsIGJvb2wpOworfTsKKworZW51bSBpeGdiZV9tYWNfdHlwZSB7CisJaXhnYmVfbWFjX3Vua25vd24gPSAwLAorCWl4Z2JlX21hY184MjU5OV92ZiwKKwlpeGdiZV9udW1fbWFjcworfTsKKworc3RydWN0IGl4Z2JlX21hY19pbmZvIHsKKwlzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgb3BzOworCXU4IGFkZHJbNl07CisJdTggcGVybV9hZGRyWzZdOworCisJZW51bSBpeGdiZV9tYWNfdHlwZSB0eXBlOworCisJczMyICBtY19maWx0ZXJfdHlwZTsKKworCWJvb2wgZ2V0X2xpbmtfc3RhdHVzOworCXUzMiAgbWF4X3R4X3F1ZXVlczsKKwl1MzIgIG1heF9yeF9xdWV1ZXM7CisJdTMyICBtYXhfbXNpeF92ZWN0b3JzOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisJczMyICgqcmVhZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYpOworCXMzMiAoKndyaXRlKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNik7CisJczMyICgqcmVhZF9wb3N0ZWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2KTsKKwlzMzIgKCp3cml0ZV9wb3N0ZWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfbXNnKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqY2hlY2tfZm9yX2Fjaykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNoZWNrX2Zvcl9yc3QpKHN0cnVjdCBpeGdiZV9odyAqKTsKK307CisKK3N0cnVjdCBpeGdiZV9tYnhfc3RhdHMgeworCXUzMiBtc2dzX3R4OworCXUzMiBtc2dzX3J4OworCisJdTMyIGFja3M7CisJdTMyIHJlcXM7CisJdTMyIHJzdHM7Cit9OworCitzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8geworCXN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBvcHM7CisJc3RydWN0IGl4Z2JlX21ieF9zdGF0cyBzdGF0czsKKwl1MzIgdGltZW91dDsKKwl1MzIgdWRlbGF5OworCXUzMiB2MnBfbWFpbGJveDsKKwl1MTYgc2l6ZTsKK307CisKK3N0cnVjdCBpeGdiZV9odyB7CisJdm9pZCAqYmFjazsKKworCXU4IF9faW9tZW0gKmh3X2FkZHI7CisJdTggKmZsYXNoX2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlOworCisJc3RydWN0IGl4Z2JlX21hY19pbmZvIG1hYzsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gbWJ4OworCisJdTE2IGRldmljZV9pZDsKKwl1MTYgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKKwl1MTYgc3Vic3lzdGVtX2RldmljZV9pZDsKKwl1MTYgdmVuZG9yX2lkOworCisJdTggIHJldmlzaW9uX2lkOworCWJvb2wgYWRhcHRlcl9zdG9wcGVkOworfTsKKworc3RydWN0IGl4Z2JldmZfaHdfc3RhdHMgeworCXU2NCBiYXNlX3ZmZ3ByYzsKKwl1NjQgYmFzZV92ZmdwdGM7CisJdTY0IGJhc2VfdmZnb3JjOworCXU2NCBiYXNlX3ZmZ290YzsKKwl1NjQgYmFzZV92Zm1wcmM7CisKKwl1NjQgbGFzdF92ZmdwcmM7CisJdTY0IGxhc3RfdmZncHRjOworCXU2NCBsYXN0X3ZmZ29yYzsKKwl1NjQgbGFzdF92ZmdvdGM7CisJdTY0IGxhc3RfdmZtcHJjOworCisJdTY0IHZmZ3ByYzsKKwl1NjQgdmZncHRjOworCXU2NCB2ZmdvcmM7CisJdTY0IHZmZ290YzsKKwl1NjQgdmZtcHJjOworfTsKKworc3RydWN0IGl4Z2JldmZfaW5mbyB7CisJZW51bSBpeGdiZV9tYWNfdHlwZQkJbWFjOworCXN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucwkqbWFjX29wczsKK307CisKKyNlbmRpZiAvKiBfX0lYR0JFX1ZGX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IDc5MmI4OGYuLjBmMzE0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAl3bWIoKTsKIAogCWlmICghKHRlc3RfYml0KEpNRV9GTEFHX1BPTEwsICZqbWUtPmZsYWdzKSkpCi0JCW1zZ19yeF9zdGF0dXMoam1lLCAiU3dpdGNoZWQgdG8gUENDX1AlZFxuIiwgcCk7CisJCW5ldGlmX2luZm8oam1lLCByeF9zdGF0dXMsIGptZS0+ZGV2LCAiU3dpdGNoZWQgdG8gUENDX1AlZFxuIiwgcCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00ODMsMTMgKzQ4MywxMyBAQAogCQlzdHJjYXQobGlua21zZywgKHBoeWxpbmsgJiBQSFlfTElOS19NRElfU1RBVCkgPwogCQkJCQkiTURJLVgiIDoKIAkJCQkJIk1ESSIpOwotCQltc2dfbGluayhqbWUsICJMaW5rIGlzIHVwIGF0ICVzLlxuIiwgbGlua21zZyk7CisJCW5ldGlmX2luZm8oam1lLCBsaW5rLCBqbWUtPmRldiwgIkxpbmsgaXMgdXAgYXQgJXMuXG4iLCBsaW5rbXNnKTsKIAkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCX0gZWxzZSB7CiAJCWlmICh0ZXN0b25seSkKIAkJCWdvdG8gb3V0OwogCi0JCW1zZ19saW5rKGptZSwgIkxpbmsgaXMgZG93bi5cbiIpOworCQluZXRpZl9pbmZvKGptZSwgbGluaywgam1lLT5kZXYsICJMaW5rIGlzIGRvd24uXG4iKTsKIAkJam1lLT5waHlsaW5rID0gMDsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAl9CkBAIC04ODMsMjAgKzg4MywyMCBAQAogCWlmICh1bmxpa2VseSgoZmxhZ3MgJiAoUlhXQkZMQUdfTUYgfCBSWFdCRkxBR19UQ1BPTiB8IFJYV0JGTEFHX1RDUENTKSkKIAkJCT09IFJYV0JGTEFHX1RDUE9OKSkgewogCQlpZiAoZmxhZ3MgJiBSWFdCRkxBR19JUFY0KQotCQkJbXNnX3J4X2VycihqbWUsICJUQ1AgQ2hlY2tzdW0gZXJyb3JcbiIpOworCQkJbmV0aWZfZXJyKGptZSwgcnhfZXJyLCBqbWUtPmRldiwgIlRDUCBDaGVja3N1bSBlcnJvclxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAodW5saWtlbHkoKGZsYWdzICYgKFJYV0JGTEFHX01GIHwgUlhXQkZMQUdfVURQT04gfCBSWFdCRkxBR19VRFBDUykpCiAJCQk9PSBSWFdCRkxBR19VRFBPTikpIHsKIAkJaWYgKGZsYWdzICYgUlhXQkZMQUdfSVBWNCkKLQkJCW1zZ19yeF9lcnIoam1lLCAiVURQIENoZWNrc3VtIGVycm9yLlxuIik7CisJCQluZXRpZl9lcnIoam1lLCByeF9lcnIsIGptZS0+ZGV2LCAiVURQIENoZWNrc3VtIGVycm9yLlxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAodW5saWtlbHkoKGZsYWdzICYgKFJYV0JGTEFHX0lQVjQgfCBSWFdCRkxBR19JUENTKSkKIAkJCT09IFJYV0JGTEFHX0lQVjQpKSB7Ci0JCW1zZ19yeF9lcnIoam1lLCAiSVB2NCBDaGVja3N1bSBlcnJvci5cbiIpOworCQluZXRpZl9lcnIoam1lLCByeF9lcnIsIGptZS0+ZGV2LCAiSVB2NCBDaGVja3N1bSBlcnJvci5cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xMTg2LDkgKzExODYsOSBAQAogCiAJd2hpbGUgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZqbWUtPmxpbmtfY2hhbmdpbmcpKSB7CiAJCWF0b21pY19pbmMoJmptZS0+bGlua19jaGFuZ2luZyk7Ci0JCW1zZ19pbnRyKGptZSwgIkdldCBsaW5rIGNoYW5nZSBsb2NrIGZhaWxlZC5cbiIpOworCQluZXRpZl9pbmZvKGptZSwgaW50ciwgam1lLT5kZXYsICJHZXQgbGluayBjaGFuZ2UgbG9jayBmYWlsZWQuXG4iKTsKIAkJd2hpbGUgKGF0b21pY19yZWFkKCZqbWUtPmxpbmtfY2hhbmdpbmcpICE9IDEpCi0JCQltc2dfaW50cihqbWUsICJXYWl0aW5nIGxpbmsgY2hhbmdlIGxvY2suXG4iKTsKKwkJCW5ldGlmX2luZm8oam1lLCBpbnRyLCBqbWUtPmRldiwgIldhaXRpbmcgbGluayBjaGFuZ2UgbG9jay5cbiIpOwogCX0KIAogCWlmIChqbWVfY2hlY2tfbGluayhuZXRkZXYsIDEpICYmIGptZS0+b2xkX210dSA9PSBuZXRkZXYtPm10dSkKQEAgLTEzMDUsNyArMTMwNSw3IEBACiAJaWYgKHVubGlrZWx5KCFuZXRpZl9jYXJyaWVyX29rKGptZS0+ZGV2KSkpCiAJCXJldHVybjsKIAotCW1zZ19yeF9zdGF0dXMoam1lLCAiUlggUXVldWUgRnVsbCFcbiIpOworCW5ldGlmX2luZm8oam1lLCByeF9zdGF0dXMsIGptZS0+ZGV2LCAiUlggUXVldWUgRnVsbCFcbiIpOwogCiAJam1lX3J4X2NsZWFuX3Rhc2tsZXQoYXJnKTsKIApAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAlzbXBfd21iKCk7CiAJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoam1lLT5kZXYpICYmCiAJYXRvbWljX3JlYWQoJnR4cmluZy0+bnJfZnJlZSkgPj0gKGptZS0+dHhfd2FrZV90aHJlc2hvbGQpKSkgewotCQltc2dfdHhfZG9uZShqbWUsICJUWCBRdWV1ZSBXYWtlZC5cbiIpOworCQluZXRpZl9pbmZvKGptZSwgdHhfZG9uZSwgam1lLT5kZXYsICJUWCBRdWV1ZSBXYWtlZC5cbiIpOwogCQluZXRpZl93YWtlX3F1ZXVlKGptZS0+ZGV2KTsKIAl9CiAKQEAgLTE4MzUsNyArMTgzNSw3IEBACiAJCQkqZmxhZ3MgfD0gVFhGTEFHX1VEUENTOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQltc2dfdHhfZXJyKGptZSwgIkVycm9yIHVwcGVyIGxheWVyIHByb3RvY29sLlxuIik7CisJCQluZXRpZl9lcnIoam1lLCB0eF9lcnIsIGptZS0+ZGV2LCAiRXJyb3IgdXBwZXIgbGF5ZXIgcHJvdG9jb2wuXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTkxMCwxMiArMTkxMCwxMiBAQAogCXNtcF93bWIoKTsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnR4cmluZy0+bnJfZnJlZSkgPCAoTUFYX1NLQl9GUkFHUysyKSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShqbWUtPmRldik7Ci0JCW1zZ190eF9xdWV1ZWQoam1lLCAiVFggUXVldWUgUGF1c2VkLlxuIik7CisJCW5ldGlmX2luZm8oam1lLCB0eF9xdWV1ZWQsIGptZS0+ZGV2LCAiVFggUXVldWUgUGF1c2VkLlxuIik7CiAJCXNtcF93bWIoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZ0eHJpbmctPm5yX2ZyZWUpCiAJCQk+PSAoam1lLT50eF93YWtlX3RocmVzaG9sZCkpIHsKIAkJCW5ldGlmX3dha2VfcXVldWUoam1lLT5kZXYpOwotCQkJbXNnX3R4X3F1ZXVlZChqbWUsICJUWCBRdWV1ZSBGYXN0IFdha2VkLlxuIik7CisJCQluZXRpZl9pbmZvKGptZSwgdHhfcXVldWVkLCBqbWUtPmRldiwgIlRYIFF1ZXVlIEZhc3QgV2FrZWQuXG4iKTsKIAkJfQogCX0KIApAQCAtMTkyMyw3ICsxOTIzLDcgQEAKIAkJCShqaWZmaWVzIC0gdHhiaS0+c3RhcnRfeG1pdCkgPj0gVFhfVElNRU9VVCAmJgogCQkJdHhiaS0+c2tiKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGptZS0+ZGV2KTsKLQkJbXNnX3R4X3F1ZXVlZChqbWUsICJUWCBRdWV1ZSBTdG9wcGVkICVkQCVsdS5cbiIsIGlkeCwgamlmZmllcyk7CisJCW5ldGlmX2luZm8oam1lLCB0eF9xdWV1ZWQsIGptZS0+ZGV2LCAiVFggUXVldWUgU3RvcHBlZCAlZEAlbHUuXG4iLCBpZHgsIGppZmZpZXMpOwogCX0KIH0KIApAQCAtMTk0Niw3ICsxOTQ2LDcgQEAKIAogCWlmICh1bmxpa2VseShpZHggPCAwKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCW1zZ190eF9lcnIoam1lLCAiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOworCQluZXRpZl9lcnIoam1lLCB0eF9lcnIsIGptZS0+ZGV2LCAiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC0xOTk3LDcgKzE5OTcsNiBAQAogewogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MzIgbWNfaGFzaFsyXSA9IHt9OwotCWludCBpOwogCiAJc3Bpbl9sb2NrX2JoKCZqbWUtPnJ4bWNzX2xvY2spOwogCkBAIC0yMDEyLDEwICsyMDExLDcgQEAKIAkJaW50IGJpdF9ucjsKIAogCQlqbWUtPnJlZ19yeG1jcyB8PSBSWE1DU19NVUxGUkFNRSB8IFJYTUNTX01VTEZJTFRFUkVEOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7Ci0JCQltY2xpc3QgJiYgaSA8IG5ldGRldi0+bWNfY291bnQ7Ci0JCQkrK2ksIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgbmV0ZGV2KSB7CiAJCQliaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgzRjsKIAkJCW1jX2hhc2hbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDB4MUYpOwogCQl9CkBAIC0yNDczLDcgKzI0NjksNyBAQAogCQl2YWwgPSBqcmVhZDMyKGptZSwgSk1FX1NNQkNTUik7CiAJfQogCWlmICghdG8pIHsKLQkJbXNnX2h3KGptZSwgIlNNQiBCdXMgQnVzeS5cbiIpOworCQluZXRpZl9lcnIoam1lLCBodywgam1lLT5kZXYsICJTTUIgQnVzIEJ1c3kuXG4iKTsKIAkJcmV0dXJuIDB4RkY7CiAJfQogCkBAIC0yNDg5LDcgKzI0ODUsNyBAQAogCQl2YWwgPSBqcmVhZDMyKGptZSwgSk1FX1NNQklOVEYpOwogCX0KIAlpZiAoIXRvKSB7Ci0JCW1zZ19odyhqbWUsICJTTUIgQnVzIEJ1c3kuXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgaHcsIGptZS0+ZGV2LCAiU01CIEJ1cyBCdXN5LlxuIik7CiAJCXJldHVybiAweEZGOwogCX0KIApAQCAtMjUwOSw3ICsyNTA1LDcgQEAKIAkJdmFsID0ganJlYWQzMihqbWUsIEpNRV9TTUJDU1IpOwogCX0KIAlpZiAoIXRvKSB7Ci0JCW1zZ19odyhqbWUsICJTTUIgQnVzIEJ1c3kuXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgaHcsIGptZS0+ZGV2LCAiU01CIEJ1cyBCdXN5LlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MjYsNyArMjUyMiw3IEBACiAJCXZhbCA9IGpyZWFkMzIoam1lLCBKTUVfU01CSU5URik7CiAJfQogCWlmICghdG8pIHsKLQkJbXNnX2h3KGptZSwgIlNNQiBCdXMgQnVzeS5cbiIpOworCQluZXRpZl9lcnIoam1lLCBodywgam1lLT5kZXYsICJTTUIgQnVzIEJ1c3kuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjg3NiwxNCArMjg3MiwxNCBAQAogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCi0JbXNnX3Byb2JlKGptZSwgIiVzJXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKLQkJKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTApID8KLQkJCSJKTUMyNTAgR2lnYWJpdCBFdGhlcm5ldCIgOgotCQkJKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNjApID8KLQkJCQkiSk1DMjYwIEZhc3QgRXRoZXJuZXQiIDogIlVua25vd24iLAotCQkoam1lLT5mcGdhdmVyICE9IDApID8gIiAoRlBHQSkiIDogIiIsCi0JCShqbWUtPmZwZ2F2ZXIgIT0gMCkgPyBqbWUtPmZwZ2F2ZXIgOiBqbWUtPmNoaXByZXYsCi0JCWptZS0+cmV2LCBuZXRkZXYtPmRldl9hZGRyKTsKKwluZXRpZl9pbmZvKGptZSwgcHJvYmUsIGptZS0+ZGV2LCAiJXMlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCQkgICAoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCkgPworCQkgICAiSk1DMjUwIEdpZ2FiaXQgRXRoZXJuZXQiIDoKKwkJICAgKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNjApID8KKwkJICAgIkpNQzI2MCBGYXN0IEV0aGVybmV0IiA6ICJVbmtub3duIiwKKwkJICAgKGptZS0+ZnBnYXZlciAhPSAwKSA/ICIgKEZQR0EpIiA6ICIiLAorCQkgICAoam1lLT5mcGdhdmVyICE9IDApID8gam1lLT5mcGdhdmVyIDogam1lLT5jaGlwcmV2LAorCQkgICBqbWUtPnJldiwgbmV0ZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjk5NCw3ICsyOTkwLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgam1lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShqbWVfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShKTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwKSB9LAogCXsgUENJX1ZERVZJQ0UoSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI2MCkgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5oIGIvZHJpdmVycy9uZXQvam1lLmgKaW5kZXggMjUxYWJlZC4uYzE5ZGI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmgKKysrIGIvZHJpdmVycy9uZXQvam1lLmgKQEAgLTQ1LDQzICs0NSwxNiBAQAogCXByaW50ayhLRVJOX0VSUiBQRlggZm10LCAjIyBhcmdzKQogCiAjaWZkZWYgVFhfREVCVUcKLSNkZWZpbmUgdHhfZGJnKHByaXYsIGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIChwcml2KS0+ZGV2LT5uYW1lLCAjIyBhcmdzKQorI2RlZmluZSB0eF9kYmcocHJpdiwgZm10LCBhcmdzLi4uKQkJCQkJXAorCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIChwcml2KS0+ZGV2LT5uYW1lLCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSB0eF9kYmcocHJpdiwgZm10LCBhcmdzLi4uKQorI2RlZmluZSB0eF9kYmcocHJpdiwgZm10LCBhcmdzLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgKHByaXYpLT5kZXYtPm5hbWUsICMjYXJncyk7IFwKK30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBqbWVfbXNnKG1zZ2x2bCwgdHlwZSwgcHJpdiwgZm10LCBhcmdzLi4uKSBcCi0JaWYgKG5ldGlmX21zZ18jI3R5cGUocHJpdikpIFwKLQkJcHJpbnRrKG1zZ2x2bCAiJXM6ICIgZm10LCAocHJpdiktPmRldi0+bmFtZSwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfcHJvYmUocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIHByb2JlLCBwcml2LCBmbXQsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX2xpbmsocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIGxpbmssIHByaXYsIGZtdCwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfaW50cihwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlqbWVfbXNnKEtFUk5fSU5GTywgaW50ciwgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ19yeF9lcnIocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0VSUiwgcnhfZXJyLCBwcml2LCBmbXQsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX3J4X3N0YXR1cyhwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlqbWVfbXNnKEtFUk5fSU5GTywgcnhfc3RhdHVzLCBwcml2LCBmbXQsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX3R4X2Vycihwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlqbWVfbXNnKEtFUk5fRVJSLCB0eF9lcnIsIHByaXYsIGZtdCwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfdHhfZG9uZShwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlqbWVfbXNnKEtFUk5fSU5GTywgdHhfZG9uZSwgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ190eF9xdWV1ZWQocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIHR4X3F1ZXVlZCwgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ19odyhwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlqbWVfbXNnKEtFUk5fRVJSLCBodywgcHJpdiwgZm10LCAjIyBhcmdzKQotCiAvKgogICogRXh0cmEgUENJIENvbmZpZ3VyYXRpb24gc3BhY2UgaW50ZXJmYWNlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tvcmluYS5jIGIvZHJpdmVycy9uZXQva29yaW5hLmMKaW5kZXggMjVlMmFmNi4uMzAwYzIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva29yaW5hLmMKKysrIGIvZHJpdmVycy9uZXQva29yaW5hLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogewogCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdTMyIHJlY29nbmlzZSA9IEVUSF9BUkNfQUI7CS8qIGFsd2F5cyBhY2NlcHQgYnJvYWRjYXN0cyAqLwogCWludCBpOwogCkBAIC00OTAsMjMgKzQ5MCwyMSBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJlY29nbmlzZSB8PSBFVEhfQVJDX1BSTzsKIAotCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDQpKQorCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAobmV0ZGV2X21jX2NvdW50KGRldikgPiA0KSkKIAkJLyogQWxsIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0ICovCiAJCXJlY29nbmlzZSB8PSBFVEhfQVJDX0FNOwogCiAJLyogQnVpbGQgdGhlIGhhc2ggdGFibGUgKi8KLQlpZiAoZGV2LT5tY19jb3VudCA+IDQpIHsKKwlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiA0KSB7CiAJCXUxNiBoYXNoX3RhYmxlWzRdOwogCQl1MzIgY3JjOwogCiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAJCQloYXNoX3RhYmxlW2ldID0gMDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQljaGFyICphZGRycyA9IGRtaS0+ZG1pX2FkZHI7CiAKLQkJCWRtaSA9IGRtaS0+bmV4dDsKLQogCQkJaWYgKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MS5jIGIvZHJpdmVycy9uZXQva3M4ODUxLmMKaW5kZXggNmQzYWM2NS4uYjUyMTljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxLmMKQEAgLTk2NSwxNCArOTY1LDEzIEBACiAKIAkJcnhjdHJsLnJ4Y3IxID0gKFJYQ1IxX1JYTUUgfCBSWENSMV9SWEFFIHwKIAkJCQlSWENSMV9SWFBBRk1BIHwgUlhDUjFfUlhNQUZNQSk7Ci0JfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCAmJiBkZXYtPm1jX2NvdW50ID4gMCkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jcHRyID0gZGV2LT5tY19saXN0OworCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QgJiYgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHI7CiAJCXUzMiBjcmM7Ci0JCWludCBpOwogCiAJCS8qIGFjY2VwdCBzb21lIG11bHRpY2FzdCAqLwogCi0JCWZvciAoaSA9IGRldi0+bWNfY291bnQ7IGkgPiAwOyBpLS0pIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNwdHIsIGRldikgewogCQkJY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY3B0ci0+ZG1pX2FkZHIpOwogCQkJY3JjID4+PSAoMzIgLSA2KTsgIC8qIGdldCB0b3Agc2l4IGJpdHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCmluZGV4IGMwY2VlYmMuLjg0YjBlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKQEAgLTExOTMsMTAgKzExOTMsMTEgQEAKIAllbHNlCiAJCWtzX3NldF9wcm9taXMoa3MsIGZhbHNlKTsKIAotCWlmICgobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmIG5ldGRldi0+bWNfY291bnQpIHsKLQkJaWYgKG5ldGRldi0+bWNfY291bnQgPD0gTUFYX01DQVNUX0xTVCkgeworCWlmICgobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmIG5ldGRldl9tY19jb3VudChuZXRkZXYpKSB7CisJCWlmIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA8PSBNQVhfTUNBU1RfTFNUKSB7CiAJCQlpbnQgaSA9IDA7Ci0JCQlmb3IgKHB0ciA9IG5ldGRldi0+bWNfbGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKKworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIocHRyLCBuZXRkZXYpIHsKIAkJCQlpZiAoISgqcHRyLT5kbWlfYWRkciAmIDEpKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoaSA+PSBNQVhfTUNBU1RfTFNUKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjRhM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9rc3o4ODR4LmMKQEAgLTAsMCArMSw3MzM1IEBACisvKioKKyAqIGRyaXZlcnMvbmV0L2tzeDg4NHguYyAtIE1pY3JlbCBLU1o4ODQxLzIgUENJIEV0aGVybmV0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIE1pY3JlbCwgSW5jLgorICogCVRyaXN0cmFtIEhhIDxUcmlzdHJhbS5IYUBtaWNyZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKworLyogRE1BIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEtTX0RNQV9UWF9DVFJMCQkJMHgwMDAwCisjZGVmaW5lIERNQV9UWF9FTkFCTEUJCQkweDAwMDAwMDAxCisjZGVmaW5lIERNQV9UWF9DUkNfRU5BQkxFCQkweDAwMDAwMDAyCisjZGVmaW5lIERNQV9UWF9QQURfRU5BQkxFCQkweDAwMDAwMDA0CisjZGVmaW5lIERNQV9UWF9MT09QQkFDSwkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRE1BX1RYX0ZMT1dfRU5BQkxFCQkweDAwMDAwMjAwCisjZGVmaW5lIERNQV9UWF9DU1VNX0lQCQkJMHgwMDAxMDAwMAorI2RlZmluZSBETUFfVFhfQ1NVTV9UQ1AJCQkweDAwMDIwMDAwCisjZGVmaW5lIERNQV9UWF9DU1VNX1VEUAkJCTB4MDAwNDAwMDAKKyNkZWZpbmUgRE1BX1RYX0JVUlNUX1NJWkUJCTB4M0YwMDAwMDAKKworI2RlZmluZSBLU19ETUFfUlhfQ1RSTAkJCTB4MDAwNAorI2RlZmluZSBETUFfUlhfRU5BQkxFCQkJMHgwMDAwMDAwMQorI2RlZmluZSBLUzg4NFhfRE1BX1JYX01VTFRJQ0FTVAkJMHgwMDAwMDAwMgorI2RlZmluZSBETUFfUlhfUFJPTUlTQ1VPVVMJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BX1JYX0VSUk9SCQkJMHgwMDAwMDAwOAorI2RlZmluZSBETUFfUlhfVU5JQ0FTVAkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRE1BX1JYX0FMTF9NVUxUSUNBU1QJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRE1BX1JYX0JST0FEQ0FTVAkJMHgwMDAwMDA0MAorI2RlZmluZSBETUFfUlhfRkxPV19FTkFCTEUJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRE1BX1JYX0NTVU1fSVAJCQkweDAwMDEwMDAwCisjZGVmaW5lIERNQV9SWF9DU1VNX1RDUAkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgRE1BX1JYX0NTVU1fVURQCQkJMHgwMDA0MDAwMAorI2RlZmluZSBETUFfUlhfQlVSU1RfU0laRQkJMHgzRjAwMDAwMAorCisjZGVmaW5lIERNQV9CVVJTVF9TSElGVAkJCTI0CisjZGVmaW5lIERNQV9CVVJTVF9ERUZBVUxUCQk4CisKKyNkZWZpbmUgS1NfRE1BX1RYX1NUQVJUCQkJMHgwMDA4CisjZGVmaW5lIEtTX0RNQV9SWF9TVEFSVAkJCTB4MDAwQworI2RlZmluZSBETUFfU1RBUlQJCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgS1NfRE1BX1RYX0FERFIJCQkweDAwMTAKKyNkZWZpbmUgS1NfRE1BX1JYX0FERFIJCQkweDAwMTQKKworI2RlZmluZSBETUFfQUREUl9MSVNUX01BU0sJCTB4RkZGRkZGRkMKKyNkZWZpbmUgRE1BX0FERFJfTElTVF9TSElGVAkJMgorCisvKiBNVFIwICovCisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfMF9PRkZTRVQJMHgwMDIwCisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfMV9PRkZTRVQJMHgwMDIxCisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfMl9PRkZTRVQJMHgwMDIyCisjZGVmaW5lIEtTODg0eF9NVUxUSUNBU1RfM19PRkZTRVQJMHgwMDIzCisvKiBNVFIxICovCisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfNF9PRkZTRVQJMHgwMDI0CisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfNV9PRkZTRVQJMHgwMDI1CisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfNl9PRkZTRVQJMHgwMDI2CisjZGVmaW5lIEtTODg0WF9NVUxUSUNBU1RfN19PRkZTRVQJMHgwMDI3CisKKy8qIEludGVycnVwdCBSZWdpc3RlcnMgKi8KKworLyogSU5URU4gKi8KKyNkZWZpbmUgS1M4ODRYX0lOVEVSUlVQVFNfRU5BQkxFCTB4MDAyOAorLyogSU5UU1QgKi8KKyNkZWZpbmUgS1M4ODRYX0lOVEVSUlVQVFNfU1RBVFVTCTB4MDAyQworCisjZGVmaW5lIEtTODg0WF9JTlRfUlhfU1RPUFBFRAkJMHgwMjAwMDAwMAorI2RlZmluZSBLUzg4NFhfSU5UX1RYX1NUT1BQRUQJCTB4MDQwMDAwMDAKKyNkZWZpbmUgS1M4ODRYX0lOVF9SWF9PVkVSUlVOCQkweDA4MDAwMDAwCisjZGVmaW5lIEtTODg0WF9JTlRfVFhfRU1QVFkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgS1M4ODRYX0lOVF9SWAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgS1M4ODRYX0lOVF9UWAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgS1M4ODRYX0lOVF9QSFkJCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgS1M4ODRYX0lOVF9SWF9NQVNLCQlcCisJKEtTODg0WF9JTlRfUlggfCBLUzg4NFhfSU5UX1JYX09WRVJSVU4pCisjZGVmaW5lIEtTODg0WF9JTlRfVFhfTUFTSwkJXAorCShLUzg4NFhfSU5UX1RYIHwgS1M4ODRYX0lOVF9UWF9FTVBUWSkKKyNkZWZpbmUgS1M4ODRYX0lOVF9NQVNLCShLUzg4NFhfSU5UX1JYIHwgS1M4ODRYX0lOVF9UWCB8IEtTODg0WF9JTlRfUEhZKQorCisvKiBNQUMgQWRkaXRpb25hbCBTdGF0aW9uIEFkZHJlc3MgKi8KKworLyogTUFBTDAgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfMF9MTwkJMHgwMDgwCisvKiBNQUFIMCAqLworI2RlZmluZSBLU19BRERfQUREUl8wX0hJCQkweDAwODQKKy8qIE1BQUwxICovCisjZGVmaW5lIEtTX0FERF9BRERSXzFfTE8JCTB4MDA4OAorLyogTUFBSDEgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfMV9ISQkJMHgwMDhDCisvKiBNQUFMMiAqLworI2RlZmluZSBLU19BRERfQUREUl8yX0xPCQkweDAwOTAKKy8qIE1BQUgyICovCisjZGVmaW5lIEtTX0FERF9BRERSXzJfSEkJCTB4MDA5NAorLyogTUFBTDMgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfM19MTwkJMHgwMDk4CisvKiBNQUFIMyAqLworI2RlZmluZSBLU19BRERfQUREUl8zX0hJCQkweDAwOUMKKy8qIE1BQUw0ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzRfTE8JCTB4MDBBMAorLyogTUFBSDQgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfNF9ISQkJMHgwMEE0CisvKiBNQUFMNSAqLworI2RlZmluZSBLU19BRERfQUREUl81X0xPCQkweDAwQTgKKy8qIE1BQUg1ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzVfSEkJCTB4MDBBQworLyogTUFBTDYgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfNl9MTwkJMHgwMEIwCisvKiBNQUFINiAqLworI2RlZmluZSBLU19BRERfQUREUl82X0hJCQkweDAwQjQKKy8qIE1BQUw3ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzdfTE8JCTB4MDBCOAorLyogTUFBSDcgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfN19ISQkJMHgwMEJDCisvKiBNQUFMOCAqLworI2RlZmluZSBLU19BRERfQUREUl84X0xPCQkweDAwQzAKKy8qIE1BQUg4ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzhfSEkJCTB4MDBDNAorLyogTUFBTDkgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfOV9MTwkJMHgwMEM4CisvKiBNQUFIOSAqLworI2RlZmluZSBLU19BRERfQUREUl85X0hJCQkweDAwQ0MKKy8qIE1BQUwxMCAqLworI2RlZmluZSBLU19BRERfQUREUl9BX0xPCQkweDAwRDAKKy8qIE1BQUgxMCAqLworI2RlZmluZSBLU19BRERfQUREUl9BX0hJCQkweDAwRDQKKy8qIE1BQUwxMSAqLworI2RlZmluZSBLU19BRERfQUREUl9CX0xPCQkweDAwRDgKKy8qIE1BQUgxMSAqLworI2RlZmluZSBLU19BRERfQUREUl9CX0hJCQkweDAwREMKKy8qIE1BQUwxMiAqLworI2RlZmluZSBLU19BRERfQUREUl9DX0xPCQkweDAwRTAKKy8qIE1BQUgxMiAqLworI2RlZmluZSBLU19BRERfQUREUl9DX0hJCQkweDAwRTQKKy8qIE1BQUwxMyAqLworI2RlZmluZSBLU19BRERfQUREUl9EX0xPCQkweDAwRTgKKy8qIE1BQUgxMyAqLworI2RlZmluZSBLU19BRERfQUREUl9EX0hJCQkweDAwRUMKKy8qIE1BQUwxNCAqLworI2RlZmluZSBLU19BRERfQUREUl9FX0xPCQkweDAwRjAKKy8qIE1BQUgxNCAqLworI2RlZmluZSBLU19BRERfQUREUl9FX0hJCQkweDAwRjQKKy8qIE1BQUwxNSAqLworI2RlZmluZSBLU19BRERfQUREUl9GX0xPCQkweDAwRjgKKy8qIE1BQUgxNSAqLworI2RlZmluZSBLU19BRERfQUREUl9GX0hJCQkweDAwRkMKKworI2RlZmluZSBBRERfQUREUl9ISV9NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIEFERF9BRERSX0VOQUJMRQkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQUREX0FERFJfSU5DUgkJCTgKKworLyogTWlzY2VsbGFuZW91cyBSZWdpc3RlcnMgKi8KKworLyogTUFSTCAqLworI2RlZmluZSBLUzg4NFhfQUREUl8wX09GRlNFVAkJMHgwMjAwCisjZGVmaW5lIEtTODg0WF9BRERSXzFfT0ZGU0VUCQkweDAyMDEKKy8qIE1BUk0gKi8KKyNkZWZpbmUgS1M4ODRYX0FERFJfMl9PRkZTRVQJCTB4MDIwMgorI2RlZmluZSBLUzg4NFhfQUREUl8zX09GRlNFVAkJMHgwMjAzCisvKiBNQVJIICovCisjZGVmaW5lIEtTODg0WF9BRERSXzRfT0ZGU0VUCQkweDAyMDQKKyNkZWZpbmUgS1M4ODRYX0FERFJfNV9PRkZTRVQJCTB4MDIwNQorCisvKiBPQkNSICovCisjZGVmaW5lIEtTODg0WF9CVVNfQ1RSTF9PRkZTRVQJCTB4MDIxMAorCisjZGVmaW5lIEJVU19TUEVFRF8xMjVfTUhaCQkweDAwMDAKKyNkZWZpbmUgQlVTX1NQRUVEXzYyXzVfTUhaCQkweDAwMDEKKyNkZWZpbmUgQlVTX1NQRUVEXzQxXzY2X01IWgkJMHgwMDAyCisjZGVmaW5lIEJVU19TUEVFRF8yNV9NSFoJCTB4MDAwMworCisvKiBFRVBDUiAqLworI2RlZmluZSBLUzg4NFhfRUVQUk9NX0NUUkxfT0ZGU0VUCTB4MDIxMgorCisjZGVmaW5lIEVFUFJPTV9DSElQX1NFTEVDVAkJMHgwMDAxCisjZGVmaW5lIEVFUFJPTV9TRVJJQUxfQ0xPQ0sJCTB4MDAwMgorI2RlZmluZSBFRVBST01fREFUQV9PVVQJCQkweDAwMDQKKyNkZWZpbmUgRUVQUk9NX0RBVEFfSU4JCQkweDAwMDgKKyNkZWZpbmUgRUVQUk9NX0FDQ0VTU19FTkFCTEUJCTB4MDAxMAorCisvKiBNQklSICovCisjZGVmaW5lIEtTODg0WF9NRU1fSU5GT19PRkZTRVQJCTB4MDIxNAorCisjZGVmaW5lIFJYX01FTV9URVNUX0ZBSUxFRAkJMHgwMDA4CisjZGVmaW5lIFJYX01FTV9URVNUX0ZJTklTSEVECQkweDAwMTAKKyNkZWZpbmUgVFhfTUVNX1RFU1RfRkFJTEVECQkweDA4MDAKKyNkZWZpbmUgVFhfTUVNX1RFU1RfRklOSVNIRUQJCTB4MTAwMAorCisvKiBHQ1IgKi8KKyNkZWZpbmUgS1M4ODRYX0dMT0JBTF9DVFJMX09GRlNFVAkweDAyMTYKKyNkZWZpbmUgR0xPQkFMX1NPRlRXQVJFX1JFU0VUCQkweDAwMDEKKworI2RlZmluZSBLUzg4NDFfUE9XRVJfTUFOQUdFX09GRlNFVAkweDAyMTgKKworLyogV0ZDUiAqLworI2RlZmluZSBLUzg4NDFfV09MX0NUUkxfT0ZGU0VUCQkweDAyMUEKKyNkZWZpbmUgS1M4ODQxX1dPTF9NQUdJQ19FTkFCTEUJCTB4MDA4MAorI2RlZmluZSBLUzg4NDFfV09MX0ZSQU1FM19FTkFCTEUJMHgwMDA4CisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUUyX0VOQUJMRQkweDAwMDQKKyNkZWZpbmUgS1M4ODQxX1dPTF9GUkFNRTFfRU5BQkxFCTB4MDAwMgorI2RlZmluZSBLUzg4NDFfV09MX0ZSQU1FMF9FTkFCTEUJMHgwMDAxCisKKy8qIFdGMCAqLworI2RlZmluZSBLUzg4NDFfV09MX0ZSQU1FX0NSQ19PRkZTRVQJMHgwMjIwCisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUVfQllURTBfT0ZGU0VUCTB4MDIyNAorI2RlZmluZSBLUzg4NDFfV09MX0ZSQU1FX0JZVEUyX09GRlNFVAkweDAyMjgKKworLyogSUFDUiAqLworI2RlZmluZSBLUzg4NFhfSUFDUl9QCQkJMHgwNEEwCisjZGVmaW5lIEtTODg0WF9JQUNSX09GRlNFVAkJS1M4ODRYX0lBQ1JfUAorCisvKiBJQURSMSAqLworI2RlZmluZSBLUzg4NFhfSUFEUjFfUAkJCTB4MDRBMgorI2RlZmluZSBLUzg4NFhfSUFEUjJfUAkJCTB4MDRBNAorI2RlZmluZSBLUzg4NFhfSUFEUjNfUAkJCTB4MDRBNgorI2RlZmluZSBLUzg4NFhfSUFEUjRfUAkJCTB4MDRBOAorI2RlZmluZSBLUzg4NFhfSUFEUjVfUAkJCTB4MDRBQQorCisjZGVmaW5lIEtTODg0WF9BQ0NfQ1RSTF9TRUxfT0ZGU0VUCUtTODg0WF9JQUNSX1AKKyNkZWZpbmUgS1M4ODRYX0FDQ19DVFJMX0lOREVYX09GRlNFVAkoS1M4ODRYX0FDQ19DVFJMX1NFTF9PRkZTRVQgKyAxKQorCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV8wX09GRlNFVAlLUzg4NFhfSUFEUjRfUAorI2RlZmluZSBLUzg4NFhfQUNDX0RBVEFfMV9PRkZTRVQJKEtTODg0WF9BQ0NfREFUQV8wX09GRlNFVCArIDEpCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV8yX09GRlNFVAlLUzg4NFhfSUFEUjVfUAorI2RlZmluZSBLUzg4NFhfQUNDX0RBVEFfM19PRkZTRVQJKEtTODg0WF9BQ0NfREFUQV8yX09GRlNFVCArIDEpCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV80X09GRlNFVAlLUzg4NFhfSUFEUjJfUAorI2RlZmluZSBLUzg4NFhfQUNDX0RBVEFfNV9PRkZTRVQJKEtTODg0WF9BQ0NfREFUQV80X09GRlNFVCArIDEpCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV82X09GRlNFVAlLUzg4NFhfSUFEUjNfUAorI2RlZmluZSBLUzg4NFhfQUNDX0RBVEFfN19PRkZTRVQJKEtTODg0WF9BQ0NfREFUQV82X09GRlNFVCArIDEpCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV84X09GRlNFVAlLUzg4NFhfSUFEUjFfUAorCisvKiBQMU1CQ1IgKi8KKyNkZWZpbmUgS1M4ODRYX1AxTUJDUl9QCQkJMHgwNEQwCisjZGVmaW5lIEtTODg0WF9QMU1CU1JfUAkJCTB4MDREMgorI2RlZmluZSBLUzg4NFhfUEhZMUlMUl9QCQkweDA0RDQKKyNkZWZpbmUgS1M4ODRYX1BIWTFJSFJfUAkJMHgwNEQ2CisjZGVmaW5lIEtTODg0WF9QMUFOQVJfUAkJCTB4MDREOAorI2RlZmluZSBLUzg4NFhfUDFBTkxQUl9QCQkweDA0REEKKworLyogUDJNQkNSICovCisjZGVmaW5lIEtTODg0WF9QMk1CQ1JfUAkJCTB4MDRFMAorI2RlZmluZSBLUzg4NFhfUDJNQlNSX1AJCQkweDA0RTIKKyNkZWZpbmUgS1M4ODRYX1BIWTJJTFJfUAkJMHgwNEU0CisjZGVmaW5lIEtTODg0WF9QSFkySUhSX1AJCTB4MDRFNgorI2RlZmluZSBLUzg4NFhfUDJBTkFSX1AJCQkweDA0RTgKKyNkZWZpbmUgS1M4ODRYX1AyQU5MUFJfUAkJMHgwNEVBCisKKyNkZWZpbmUgS1M4ODRYX1BIWV8xX0NUUkxfT0ZGU0VUCUtTODg0WF9QMU1CQ1JfUAorI2RlZmluZSBQSFlfQ1RSTF9JTlRFUlZBTAkJKEtTODg0WF9QMk1CQ1JfUCAtIEtTODg0WF9QMU1CQ1JfUCkKKworI2RlZmluZSBLUzg4NFhfUEhZX0NUUkxfT0ZGU0VUCQkweDAwCisKKy8qIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSFlfUkVHX0NUUkwJCQkwCisKKyNkZWZpbmUgUEhZX1JFU0VUCQkJMHg4MDAwCisjZGVmaW5lIFBIWV9MT09QQkFDSwkJCTB4NDAwMAorI2RlZmluZSBQSFlfU1BFRURfMTAwTUJJVAkJMHgyMDAwCisjZGVmaW5lIFBIWV9BVVRPX05FR19FTkFCTEUJCTB4MTAwMAorI2RlZmluZSBQSFlfUE9XRVJfRE9XTgkJCTB4MDgwMAorI2RlZmluZSBQSFlfTUlJX0RJU0FCTEUJCQkweDA0MDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1JFU1RBUlQJCTB4MDIwMAorI2RlZmluZSBQSFlfRlVMTF9EVVBMRVgJCQkweDAxMDAKKyNkZWZpbmUgUEhZX0NPTExJU0lPTl9URVNUCQkweDAwODAKKyNkZWZpbmUgUEhZX0hQX01ESVgJCQkweDAwMjAKKyNkZWZpbmUgUEhZX0ZPUkNFX01ESVgJCQkweDAwMTAKKyNkZWZpbmUgUEhZX0FVVE9fTURJWF9ESVNBQkxFCQkweDAwMDgKKyNkZWZpbmUgUEhZX1JFTU9URV9GQVVMVF9ESVNBQkxFCTB4MDAwNAorI2RlZmluZSBQSFlfVFJBTlNNSVRfRElTQUJMRQkJMHgwMDAyCisjZGVmaW5lIFBIWV9MRURfRElTQUJMRQkJCTB4MDAwMQorCisjZGVmaW5lIEtTODg0WF9QSFlfU1RBVFVTX09GRlNFVAkweDAyCisKKy8qIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBIWV9SRUdfU1RBVFVTCQkJMQorCisjZGVmaW5lIFBIWV8xMDBCVDRfQ0FQQUJMRQkJMHg4MDAwCisjZGVmaW5lIFBIWV8xMDBCVFhfRkRfQ0FQQUJMRQkJMHg0MDAwCisjZGVmaW5lIFBIWV8xMDBCVFhfQ0FQQUJMRQkJMHgyMDAwCisjZGVmaW5lIFBIWV8xMEJUX0ZEX0NBUEFCTEUJCTB4MTAwMAorI2RlZmluZSBQSFlfMTBCVF9DQVBBQkxFCQkweDA4MDAKKyNkZWZpbmUgUEhZX01JSV9TVVBQUkVTU19DQVBBQkxFCTB4MDA0MAorI2RlZmluZSBQSFlfQVVUT19ORUdfQUNLTk9XTEVER0UJMHgwMDIwCisjZGVmaW5lIFBIWV9SRU1PVEVfRkFVTFQJCTB4MDAxMAorI2RlZmluZSBQSFlfQVVUT19ORUdfQ0FQQUJMRQkJMHgwMDA4CisjZGVmaW5lIFBIWV9MSU5LX1NUQVRVUwkJCTB4MDAwNAorI2RlZmluZSBQSFlfSkFCQkVSX0RFVEVDVAkJMHgwMDAyCisjZGVmaW5lIFBIWV9FWFRFTkRFRF9DQVBBQklMSVRZCQkweDAwMDEKKworI2RlZmluZSBLUzg4NFhfUEhZX0lEXzFfT0ZGU0VUCQkweDA0CisjZGVmaW5lIEtTODg0WF9QSFlfSURfMl9PRkZTRVQJCTB4MDYKKworLyogUEhZIElkZW50aWZpZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBIWV9SRUdfSURfMQkJCTIKKyNkZWZpbmUgUEhZX1JFR19JRF8yCQkJMworCisjZGVmaW5lIEtTODg0WF9QSFlfQVVUT19ORUdfT0ZGU0VUCTB4MDgKKworLyogQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFBIWV9SRUdfQVVUT19ORUdPVElBVElPTgk0CisKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX05FWFRfUEFHRQkJMHg4MDAwCisjZGVmaW5lIFBIWV9BVVRPX05FR19SRU1PVEVfRkFVTFQJMHgyMDAwCisvKiBOb3Qgc3VwcG9ydGVkLiAqLworI2RlZmluZSBQSFlfQVVUT19ORUdfQVNZTV9QQVVTRQkJMHgwODAwCisjZGVmaW5lIFBIWV9BVVRPX05FR19TWU1fUEFVU0UJCTB4MDQwMAorI2RlZmluZSBQSFlfQVVUT19ORUdfMTAwQlQ0CQkweDAyMDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHXzEwMEJUWF9GRAkJMHgwMTAwCisjZGVmaW5lIFBIWV9BVVRPX05FR18xMDBCVFgJCTB4MDA4MAorI2RlZmluZSBQSFlfQVVUT19ORUdfMTBCVF9GRAkJMHgwMDQwCisjZGVmaW5lIFBIWV9BVVRPX05FR18xMEJUCQkweDAwMjAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1NFTEVDVE9SCQkweDAwMUYKKyNkZWZpbmUgUEhZX0FVVE9fTkVHXzgwMl8zCQkweDAwMDEKKworI2RlZmluZSBQSFlfQVVUT19ORUdfUEFVU0UgIChQSFlfQVVUT19ORUdfU1lNX1BBVVNFIHwgUEhZX0FVVE9fTkVHX0FTWU1fUEFVU0UpCisKKyNkZWZpbmUgS1M4ODRYX1BIWV9SRU1PVEVfQ0FQX09GRlNFVAkweDBBCisKKy8qIEF1dG8tTmVnb3RpYXRpb24gTGluayBQYXJ0bmVyIEFiaWxpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEhZX1JFR19SRU1PVEVfQ0FQQUJJTElUWQk1CisKKyNkZWZpbmUgUEhZX1JFTU9URV9ORVhUX1BBR0UJCTB4ODAwMAorI2RlZmluZSBQSFlfUkVNT1RFX0FDS05PV0xFREdFCQkweDQwMDAKKyNkZWZpbmUgUEhZX1JFTU9URV9SRU1PVEVfRkFVTFQJCTB4MjAwMAorI2RlZmluZSBQSFlfUkVNT1RFX1NZTV9QQVVTRQkJMHgwNDAwCisjZGVmaW5lIFBIWV9SRU1PVEVfMTAwQlRYX0ZECQkweDAxMDAKKyNkZWZpbmUgUEhZX1JFTU9URV8xMDBCVFgJCTB4MDA4MAorI2RlZmluZSBQSFlfUkVNT1RFXzEwQlRfRkQJCTB4MDA0MAorI2RlZmluZSBQSFlfUkVNT1RFXzEwQlQJCQkweDAwMjAKKworLyogUDFWQ1QgKi8KKyNkZWZpbmUgS1M4ODRYX1AxVkNUX1AJCQkweDA0RjAKKyNkZWZpbmUgS1M4ODRYX1AxUEhZQ1RSTF9QCQkweDA0RjIKKworLyogUDJWQ1QgKi8KKyNkZWZpbmUgS1M4ODRYX1AyVkNUX1AJCQkweDA0RjQKKyNkZWZpbmUgS1M4ODRYX1AyUEhZQ1RSTF9QCQkweDA0RjYKKworI2RlZmluZSBLUzg4NFhfUEhZX1NQRUNJQUxfT0ZGU0VUCUtTODg0WF9QMVZDVF9QCisjZGVmaW5lIFBIWV9TUEVDSUFMX0lOVEVSVkFMCQkoS1M4ODRYX1AyVkNUX1AgLSBLUzg4NFhfUDFWQ1RfUCkKKworI2RlZmluZSBLUzg4NFhfUEhZX0xJTktfTURfT0ZGU0VUCTB4MDAKKworI2RlZmluZSBQSFlfU1RBUlRfQ0FCTEVfRElBRwkJMHg4MDAwCisjZGVmaW5lIFBIWV9DQUJMRV9ESUFHX1JFU1VMVAkJMHg2MDAwCisjZGVmaW5lIFBIWV9DQUJMRV9TVEFUX05PUk1BTAkJMHgwMDAwCisjZGVmaW5lIFBIWV9DQUJMRV9TVEFUX09QRU4JCTB4MjAwMAorI2RlZmluZSBQSFlfQ0FCTEVfU1RBVF9TSE9SVAkJMHg0MDAwCisjZGVmaW5lIFBIWV9DQUJMRV9TVEFUX0ZBSUxFRAkJMHg2MDAwCisjZGVmaW5lIFBIWV9DQUJMRV8xME1fU0hPUlQJCTB4MTAwMAorI2RlZmluZSBQSFlfQ0FCTEVfRkFVTFRfQ09VTlRFUgkJMHgwMUZGCisKKyNkZWZpbmUgS1M4ODRYX1BIWV9QSFlfQ1RSTF9PRkZTRVQJMHgwMgorCisjZGVmaW5lIFBIWV9TVEFUX1JFVkVSU0VEX1BPTEFSSVRZCTB4MDAyMAorI2RlZmluZSBQSFlfU1RBVF9NRElYCQkJMHgwMDEwCisjZGVmaW5lIFBIWV9GT1JDRV9MSU5LCQkJMHgwMDA4CisjZGVmaW5lIFBIWV9QT1dFUl9TQVZJTkdfRElTQUJMRQkweDAwMDQKKyNkZWZpbmUgUEhZX1JFTU9URV9MT09QQkFDSwkJMHgwMDAyCisKKy8qIFNJREVSICovCisjZGVmaW5lIEtTODg0WF9TSURFUl9QCQkJMHgwNDAwCisjZGVmaW5lIEtTODg0WF9DSElQX0lEX09GRlNFVAkJS1M4ODRYX1NJREVSX1AKKyNkZWZpbmUgS1M4ODRYX0ZBTUlMWV9JRF9PRkZTRVQJCShLUzg4NFhfQ0hJUF9JRF9PRkZTRVQgKyAxKQorCisjZGVmaW5lIFJFR19GQU1JTFlfSUQJCQkweDg4CisKKyNkZWZpbmUgUkVHX0NISVBfSURfNDEJCQkweDg4MTAKKyNkZWZpbmUgUkVHX0NISVBfSURfNDIJCQkweDg4MDAKKworI2RlZmluZSBLUzg4NFhfQ0hJUF9JRF9NQVNLXzQxCQkweEZGMTAKKyNkZWZpbmUgS1M4ODRYX0NISVBfSURfTUFTSwkJMHhGRkYwCisjZGVmaW5lIEtTODg0WF9DSElQX0lEX1NISUZUCQk0CisjZGVmaW5lIEtTODg0WF9SRVZJU0lPTl9NQVNLCQkweDAwMEUKKyNkZWZpbmUgS1M4ODRYX1JFVklTSU9OX1NISUZUCQkxCisjZGVmaW5lIEtTODg0Ml9TVEFSVAkJCTB4MDAwMQorCisjZGVmaW5lIENISVBfSVBfNDFfTQkJCTB4ODgxMAorI2RlZmluZSBDSElQX0lQXzQyX00JCQkweDg4MDAKKyNkZWZpbmUgQ0hJUF9JUF82MV9NCQkJMHg4ODkwCisjZGVmaW5lIENISVBfSVBfNjJfTQkJCTB4ODg4MAorCisjZGVmaW5lIENISVBfSVBfNDFfUAkJCTB4ODg1MAorI2RlZmluZSBDSElQX0lQXzQyX1AJCQkweDg4NDAKKyNkZWZpbmUgQ0hJUF9JUF82MV9QCQkJMHg4OEQwCisjZGVmaW5lIENISVBfSVBfNjJfUAkJCTB4ODhDMAorCisvKiBTR0NSMSAqLworI2RlZmluZSBLUzg4NDJfU0dDUjFfUAkJCTB4MDQwMgorI2RlZmluZSBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQJS1M4ODQyX1NHQ1IxX1AKKworI2RlZmluZSBTV0lUQ0hfUEFTU19BTEwJCQkweDgwMDAKKyNkZWZpbmUgU1dJVENIX1RYX0ZMT1dfQ1RSTAkJMHgyMDAwCisjZGVmaW5lIFNXSVRDSF9SWF9GTE9XX0NUUkwJCTB4MTAwMAorI2RlZmluZSBTV0lUQ0hfQ0hFQ0tfTEVOR1RICQkweDA4MDAKKyNkZWZpbmUgU1dJVENIX0FHSU5HX0VOQUJMRQkJMHgwNDAwCisjZGVmaW5lIFNXSVRDSF9GQVNUX0FHSU5HCQkweDAyMDAKKyNkZWZpbmUgU1dJVENIX0FHR1JfQkFDS09GRgkJMHgwMTAwCisjZGVmaW5lIFNXSVRDSF9QQVNTX1BBVVNFCQkweDAwMDgKKyNkZWZpbmUgU1dJVENIX0xJTktfQVVUT19BR0lORwkJMHgwMDAxCisKKy8qIFNHQ1IyICovCisjZGVmaW5lIEtTODg0Ml9TR0NSMl9QCQkJMHgwNDA0CisjZGVmaW5lIEtTODg0Ml9TV0lUQ0hfQ1RSTF8yX09GRlNFVAlLUzg4NDJfU0dDUjJfUAorCisjZGVmaW5lIFNXSVRDSF9WTEFOX0VOQUJMRQkJMHg4MDAwCisjZGVmaW5lIFNXSVRDSF9JR01QX1NOT09QCQkweDQwMDAKKyNkZWZpbmUgSVBWNl9NTERfU05PT1BfRU5BQkxFCQkweDIwMDAKKyNkZWZpbmUgSVBWNl9NTERfU05PT1BfT1BUSU9OCQkweDEwMDAKKyNkZWZpbmUgUFJJT1JJVFlfU0NIRU1FX1NFTEVDVAkJMHgwODAwCisjZGVmaW5lIFNXSVRDSF9NSVJST1JfUlhfVFgJCTB4MDEwMAorI2RlZmluZSBVTklDQVNUX1ZMQU5fQk9VTkRBUlkJCTB4MDA4MAorI2RlZmluZSBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRQkJMHgwMDQwCisjZGVmaW5lIFNXSVRDSF9CQUNLX1BSRVNTVVJFCQkweDAwMjAKKyNkZWZpbmUgRkFJUl9GTE9XX0NUUkwJCQkweDAwMTAKKyNkZWZpbmUgTk9fRVhDX0NPTExJU0lPTl9EUk9QCQkweDAwMDgKKyNkZWZpbmUgU1dJVENIX0hVR0VfUEFDS0VUCQkweDAwMDQKKyNkZWZpbmUgU1dJVENIX0xFR0FMX1BBQ0tFVAkJMHgwMDAyCisjZGVmaW5lIFNXSVRDSF9CVUZfUkVTRVJWRQkJMHgwMDAxCisKKy8qIFNHQ1IzICovCisjZGVmaW5lIEtTODg0Ml9TR0NSM19QCQkJMHgwNDA2CisjZGVmaW5lIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVAlLUzg4NDJfU0dDUjNfUAorCisjZGVmaW5lIEJST0FEQ0FTVF9TVE9STV9SQVRFX0xPCQkweEZGMDAKKyNkZWZpbmUgU1dJVENIX1JFUEVBVEVSCQkJMHgwMDgwCisjZGVmaW5lIFNXSVRDSF9IQUxGX0RVUExFWAkJMHgwMDQwCisjZGVmaW5lIFNXSVRDSF9GTE9XX0NUUkwJCTB4MDAyMAorI2RlZmluZSBTV0lUQ0hfMTBfTUJJVAkJCTB4MDAxMAorI2RlZmluZSBTV0lUQ0hfUkVQTEFDRV9OVUxMX1ZJRAkJMHgwMDA4CisjZGVmaW5lIEJST0FEQ0FTVF9TVE9STV9SQVRFX0hJCQkweDAwMDcKKworI2RlZmluZSBCUk9BRENBU1RfU1RPUk1fUkFURQkJMHgwN0ZGCisKKy8qIFNHQ1I0ICovCisjZGVmaW5lIEtTODg0Ml9TR0NSNF9QCQkJMHgwNDA4CisKKy8qIFNHQ1I1ICovCisjZGVmaW5lIEtTODg0Ml9TR0NSNV9QCQkJMHgwNDBBCisjZGVmaW5lIEtTODg0Ml9TV0lUQ0hfQ1RSTF81X09GRlNFVAlLUzg4NDJfU0dDUjVfUAorCisjZGVmaW5lIExFRF9NT0RFCQkJMHg4MjAwCisjZGVmaW5lIExFRF9TUEVFRF9EVVBMRVhfQUNUCQkweDAwMDAKKyNkZWZpbmUgTEVEX1NQRUVEX0RVUExFWF9MSU5LX0FDVAkweDgwMDAKKyNkZWZpbmUgTEVEX0RVUExFWF8xMF8xMDAJCTB4MDIwMAorCisvKiBTR0NSNiAqLworI2RlZmluZSBLUzg4NDJfU0dDUjZfUAkJCTB4MDQxMAorI2RlZmluZSBLUzg4NDJfU1dJVENIX0NUUkxfNl9PRkZTRVQJS1M4ODQyX1NHQ1I2X1AKKworI2RlZmluZSBLUzg4NDJfUFJJT1JJVFlfTUFTSwkJMworI2RlZmluZSBLUzg4NDJfUFJJT1JJVFlfU0hJRlQJCTIKKworLyogU0dDUjcgKi8KKyNkZWZpbmUgS1M4ODQyX1NHQ1I3X1AJCQkweDA0MTIKKyNkZWZpbmUgS1M4ODQyX1NXSVRDSF9DVFJMXzdfT0ZGU0VUCUtTODg0Ml9TR0NSN19QCisKKyNkZWZpbmUgU1dJVENIX1VOS19ERUZfUE9SVF9FTkFCTEUJMHgwMDA4CisjZGVmaW5lIFNXSVRDSF9VTktfREVGX1BPUlRfMwkJMHgwMDA0CisjZGVmaW5lIFNXSVRDSF9VTktfREVGX1BPUlRfMgkJMHgwMDAyCisjZGVmaW5lIFNXSVRDSF9VTktfREVGX1BPUlRfMQkJMHgwMDAxCisKKy8qIE1BQ0FSMSAqLworI2RlZmluZSBLUzg4NDJfTUFDQVIxX1AJCQkweDA0NzAKKyNkZWZpbmUgS1M4ODQyX01BQ0FSMl9QCQkJMHgwNDcyCisjZGVmaW5lIEtTODg0Ml9NQUNBUjNfUAkJCTB4MDQ3NAorI2RlZmluZSBLUzg4NDJfTUFDX0FERFJfMV9PRkZTRVQJS1M4ODQyX01BQ0FSMV9QCisjZGVmaW5lIEtTODg0Ml9NQUNfQUREUl8wX09GRlNFVAkoS1M4ODQyX01BQ19BRERSXzFfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODQyX01BQ19BRERSXzNfT0ZGU0VUCUtTODg0Ml9NQUNBUjJfUAorI2RlZmluZSBLUzg4NDJfTUFDX0FERFJfMl9PRkZTRVQJKEtTODg0Ml9NQUNfQUREUl8zX09GRlNFVCArIDEpCisjZGVmaW5lIEtTODg0Ml9NQUNfQUREUl81X09GRlNFVAlLUzg4NDJfTUFDQVIzX1AKKyNkZWZpbmUgS1M4ODQyX01BQ19BRERSXzRfT0ZGU0VUCShLUzg4NDJfTUFDX0FERFJfNV9PRkZTRVQgKyAxKQorCisvKiBUT1NSMSAqLworI2RlZmluZSBLUzg4NDJfVE9TUjFfUAkJCTB4MDQ4MAorI2RlZmluZSBLUzg4NDJfVE9TUjJfUAkJCTB4MDQ4MgorI2RlZmluZSBLUzg4NDJfVE9TUjNfUAkJCTB4MDQ4NAorI2RlZmluZSBLUzg4NDJfVE9TUjRfUAkJCTB4MDQ4NgorI2RlZmluZSBLUzg4NDJfVE9TUjVfUAkJCTB4MDQ4OAorI2RlZmluZSBLUzg4NDJfVE9TUjZfUAkJCTB4MDQ4QQorI2RlZmluZSBLUzg4NDJfVE9TUjdfUAkJCTB4MDQ5MAorI2RlZmluZSBLUzg4NDJfVE9TUjhfUAkJCTB4MDQ5MgorI2RlZmluZSBLUzg4NDJfVE9TXzFfT0ZGU0VUCQlLUzg4NDJfVE9TUjFfUAorI2RlZmluZSBLUzg4NDJfVE9TXzJfT0ZGU0VUCQlLUzg4NDJfVE9TUjJfUAorI2RlZmluZSBLUzg4NDJfVE9TXzNfT0ZGU0VUCQlLUzg4NDJfVE9TUjNfUAorI2RlZmluZSBLUzg4NDJfVE9TXzRfT0ZGU0VUCQlLUzg4NDJfVE9TUjRfUAorI2RlZmluZSBLUzg4NDJfVE9TXzVfT0ZGU0VUCQlLUzg4NDJfVE9TUjVfUAorI2RlZmluZSBLUzg4NDJfVE9TXzZfT0ZGU0VUCQlLUzg4NDJfVE9TUjZfUAorCisjZGVmaW5lIEtTODg0Ml9UT1NfN19PRkZTRVQJCUtTODg0Ml9UT1NSN19QCisjZGVmaW5lIEtTODg0Ml9UT1NfOF9PRkZTRVQJCUtTODg0Ml9UT1NSOF9QCisKKy8qIFAxQ1IxICovCisjZGVmaW5lIEtTODg0Ml9QMUNSMV9QCQkJMHgwNTAwCisjZGVmaW5lIEtTODg0Ml9QMUNSMl9QCQkJMHgwNTAyCisjZGVmaW5lIEtTODg0Ml9QMVZJRFJfUAkJCTB4MDUwNAorI2RlZmluZSBLUzg4NDJfUDFDUjNfUAkJCTB4MDUwNgorI2RlZmluZSBLUzg4NDJfUDFJUkNSX1AJCQkweDA1MDgKKyNkZWZpbmUgS1M4ODQyX1AxRVJDUl9QCQkJMHgwNTBBCisjZGVmaW5lIEtTODg0WF9QMVNDU0xNRF9QCQkweDA1MTAKKyNkZWZpbmUgS1M4ODRYX1AxQ1I0X1AJCQkweDA1MTIKKyNkZWZpbmUgS1M4ODRYX1AxU1JfUAkJCTB4MDUxNAorCisvKiBQMkNSMSAqLworI2RlZmluZSBLUzg4NDJfUDJDUjFfUAkJCTB4MDUyMAorI2RlZmluZSBLUzg4NDJfUDJDUjJfUAkJCTB4MDUyMgorI2RlZmluZSBLUzg4NDJfUDJWSURSX1AJCQkweDA1MjQKKyNkZWZpbmUgS1M4ODQyX1AyQ1IzX1AJCQkweDA1MjYKKyNkZWZpbmUgS1M4ODQyX1AySVJDUl9QCQkJMHgwNTI4CisjZGVmaW5lIEtTODg0Ml9QMkVSQ1JfUAkJCTB4MDUyQQorI2RlZmluZSBLUzg4NFhfUDJTQ1NMTURfUAkJMHgwNTMwCisjZGVmaW5lIEtTODg0WF9QMkNSNF9QCQkJMHgwNTMyCisjZGVmaW5lIEtTODg0WF9QMlNSX1AJCQkweDA1MzQKKworLyogUDNDUjEgKi8KKyNkZWZpbmUgS1M4ODQyX1AzQ1IxX1AJCQkweDA1NDAKKyNkZWZpbmUgS1M4ODQyX1AzQ1IyX1AJCQkweDA1NDIKKyNkZWZpbmUgS1M4ODQyX1AzVklEUl9QCQkJMHgwNTQ0CisjZGVmaW5lIEtTODg0Ml9QM0NSM19QCQkJMHgwNTQ2CisjZGVmaW5lIEtTODg0Ml9QM0lSQ1JfUAkJCTB4MDU0OAorI2RlZmluZSBLUzg4NDJfUDNFUkNSX1AJCQkweDA1NEEKKworI2RlZmluZSBLUzg4NDJfUE9SVF8xX0NUUkxfMQkJS1M4ODQyX1AxQ1IxX1AKKyNkZWZpbmUgS1M4ODQyX1BPUlRfMl9DVFJMXzEJCUtTODg0Ml9QMkNSMV9QCisjZGVmaW5lIEtTODg0Ml9QT1JUXzNfQ1RSTF8xCQlLUzg4NDJfUDNDUjFfUAorCisjZGVmaW5lIFBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpCQlcCisJKGFkZHIgPSBLUzg4NDJfUE9SVF8xX0NUUkxfMSArIChwb3J0KSAqCVwKKwkJKEtTODg0Ml9QT1JUXzJfQ1RSTF8xIC0gS1M4ODQyX1BPUlRfMV9DVFJMXzEpKQorCisjZGVmaW5lIEtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQJMHgwMAorCisjZGVmaW5lIFBPUlRfQlJPQURDQVNUX1NUT1JNCQkweDAwODAKKyNkZWZpbmUgUE9SVF9ESUZGU0VSVl9FTkFCTEUJCTB4MDA0MAorI2RlZmluZSBQT1JUXzgwMl8xUF9FTkFCTEUJCTB4MDAyMAorI2RlZmluZSBQT1JUX0JBU0VEX1BSSU9SSVRZX01BU0sJMHgwMDE4CisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfQkFTRQkweDAwMDMKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV9TSElGVAkzCisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfMAkJMHgwMDAwCisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfMQkJMHgwMDA4CisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfMgkJMHgwMDEwCisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfMwkJMHgwMDE4CisjZGVmaW5lIFBPUlRfSU5TRVJUX1RBRwkJCTB4MDAwNAorI2RlZmluZSBQT1JUX1JFTU9WRV9UQUcJCQkweDAwMDIKKyNkZWZpbmUgUE9SVF9QUklPX1FVRVVFX0VOQUJMRQkJMHgwMDAxCisKKyNkZWZpbmUgS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVAkweDAyCisKKyNkZWZpbmUgUE9SVF9JTkdSRVNTX1ZMQU5fRklMVEVSCTB4NDAwMAorI2RlZmluZSBQT1JUX0RJU0NBUkRfTk9OX1ZJRAkJMHgyMDAwCisjZGVmaW5lIFBPUlRfRk9SQ0VfRkxPV19DVFJMCQkweDEwMDAKKyNkZWZpbmUgUE9SVF9CQUNLX1BSRVNTVVJFCQkweDA4MDAKKyNkZWZpbmUgUE9SVF9UWF9FTkFCTEUJCQkweDA0MDAKKyNkZWZpbmUgUE9SVF9SWF9FTkFCTEUJCQkweDAyMDAKKyNkZWZpbmUgUE9SVF9MRUFSTl9ESVNBQkxFCQkweDAxMDAKKyNkZWZpbmUgUE9SVF9NSVJST1JfU05JRkZFUgkJMHgwMDgwCisjZGVmaW5lIFBPUlRfTUlSUk9SX1JYCQkJMHgwMDQwCisjZGVmaW5lIFBPUlRfTUlSUk9SX1RYCQkJMHgwMDIwCisjZGVmaW5lIFBPUlRfVVNFUl9QUklPUklUWV9DRUlMSU5HCTB4MDAwOAorI2RlZmluZSBQT1JUX1ZMQU5fTUVNQkVSU0hJUAkJMHgwMDA3CisKKyNkZWZpbmUgS1M4ODQyX1BPUlRfQ1RSTF9WSURfT0ZGU0VUCTB4MDQKKworI2RlZmluZSBQT1JUX0RFRkFVTFRfVklECQkweDAwMDEKKworI2RlZmluZSBLUzg4NDJfUE9SVF9DVFJMXzNfT0ZGU0VUCTB4MDYKKworI2RlZmluZSBQT1JUX0lOR1JFU1NfTElNSVRfTU9ERQkJMHgwMDBDCisjZGVmaW5lIFBPUlRfSU5HUkVTU19BTEwJCTB4MDAwMAorI2RlZmluZSBQT1JUX0lOR1JFU1NfVU5JQ0FTVAkJMHgwMDA0CisjZGVmaW5lIFBPUlRfSU5HUkVTU19NVUxUSUNBU1QJCTB4MDAwOAorI2RlZmluZSBQT1JUX0lOR1JFU1NfQlJPQURDQVNUCQkweDAwMEMKKyNkZWZpbmUgUE9SVF9DT1VOVF9JRkcJCQkweDAwMDIKKyNkZWZpbmUgUE9SVF9DT1VOVF9QUkVBTUJMRQkJMHgwMDAxCisKKyNkZWZpbmUgS1M4ODQyX1BPUlRfSU5fUkFURV9PRkZTRVQJMHgwOAorI2RlZmluZSBLUzg4NDJfUE9SVF9PVVRfUkFURV9PRkZTRVQJMHgwQQorCisjZGVmaW5lIFBPUlRfUFJJT1JJVFlfUkFURQkJMHgwRgorI2RlZmluZSBQT1JUX1BSSU9SSVRZX1JBVEVfU0hJRlQJNAorCisjZGVmaW5lIEtTODg0WF9QT1JUX0xJTktfTUQJCTB4MTAKKworI2RlZmluZSBQT1JUX0NBQkxFXzEwTV9TSE9SVAkJMHg4MDAwCisjZGVmaW5lIFBPUlRfQ0FCTEVfRElBR19SRVNVTFQJCTB4NjAwMAorI2RlZmluZSBQT1JUX0NBQkxFX1NUQVRfTk9STUFMCQkweDAwMDAKKyNkZWZpbmUgUE9SVF9DQUJMRV9TVEFUX09QRU4JCTB4MjAwMAorI2RlZmluZSBQT1JUX0NBQkxFX1NUQVRfU0hPUlQJCTB4NDAwMAorI2RlZmluZSBQT1JUX0NBQkxFX1NUQVRfRkFJTEVECQkweDYwMDAKKyNkZWZpbmUgUE9SVF9TVEFSVF9DQUJMRV9ESUFHCQkweDEwMDAKKyNkZWZpbmUgUE9SVF9GT1JDRV9MSU5LCQkJMHgwODAwCisjZGVmaW5lIFBPUlRfUE9XRVJfU0FWSU5HX0RJU0FCTEUJMHgwNDAwCisjZGVmaW5lIFBPUlRfUEhZX1JFTU9URV9MT09QQkFDSwkweDAyMDAKKyNkZWZpbmUgUE9SVF9DQUJMRV9GQVVMVF9DT1VOVEVSCTB4MDFGRgorCisjZGVmaW5lIEtTODg0WF9QT1JUX0NUUkxfNF9PRkZTRVQJMHgxMgorCisjZGVmaW5lIFBPUlRfTEVEX09GRgkJCTB4ODAwMAorI2RlZmluZSBQT1JUX1RYX0RJU0FCTEUJCQkweDQwMDAKKyNkZWZpbmUgUE9SVF9BVVRPX05FR19SRVNUQVJUCQkweDIwMDAKKyNkZWZpbmUgUE9SVF9SRU1PVEVfRkFVTFRfRElTQUJMRQkweDEwMDAKKyNkZWZpbmUgUE9SVF9QT1dFUl9ET1dOCQkJMHgwODAwCisjZGVmaW5lIFBPUlRfQVVUT19NRElYX0RJU0FCTEUJCTB4MDQwMAorI2RlZmluZSBQT1JUX0ZPUkNFX01ESVgJCQkweDAyMDAKKyNkZWZpbmUgUE9SVF9MT09QQkFDSwkJCTB4MDEwMAorI2RlZmluZSBQT1JUX0FVVE9fTkVHX0VOQUJMRQkJMHgwMDgwCisjZGVmaW5lIFBPUlRfRk9SQ0VfMTAwX01CSVQJCTB4MDA0MAorI2RlZmluZSBQT1JUX0ZPUkNFX0ZVTExfRFVQTEVYCQkweDAwMjAKKyNkZWZpbmUgUE9SVF9BVVRPX05FR19TWU1fUEFVU0UJCTB4MDAxMAorI2RlZmluZSBQT1JUX0FVVE9fTkVHXzEwMEJUWF9GRAkJMHgwMDA4CisjZGVmaW5lIFBPUlRfQVVUT19ORUdfMTAwQlRYCQkweDAwMDQKKyNkZWZpbmUgUE9SVF9BVVRPX05FR18xMEJUX0ZECQkweDAwMDIKKyNkZWZpbmUgUE9SVF9BVVRPX05FR18xMEJUCQkweDAwMDEKKworI2RlZmluZSBLUzg4NFhfUE9SVF9TVEFUVVNfT0ZGU0VUCTB4MTQKKworI2RlZmluZSBQT1JUX0hQX01ESVgJCQkweDgwMDAKKyNkZWZpbmUgUE9SVF9SRVZFUlNFRF9QT0xBUklUWQkJMHgyMDAwCisjZGVmaW5lIFBPUlRfUlhfRkxPV19DVFJMCQkweDA4MDAKKyNkZWZpbmUgUE9SVF9UWF9GTE9XX0NUUkwJCTB4MTAwMAorI2RlZmluZSBQT1JUX1NUQVRVU19TUEVFRF8xMDBNQklUCTB4MDQwMAorI2RlZmluZSBQT1JUX1NUQVRVU19GVUxMX0RVUExFWAkJMHgwMjAwCisjZGVmaW5lIFBPUlRfUkVNT1RFX0ZBVUxUCQkweDAxMDAKKyNkZWZpbmUgUE9SVF9NRElYX1NUQVRVUwkJMHgwMDgwCisjZGVmaW5lIFBPUlRfQVVUT19ORUdfQ09NUExFVEUJCTB4MDA0MAorI2RlZmluZSBQT1JUX1NUQVRVU19MSU5LX0dPT0QJCTB4MDAyMAorI2RlZmluZSBQT1JUX1JFTU9URV9TWU1fUEFVU0UJCTB4MDAxMAorI2RlZmluZSBQT1JUX1JFTU9URV8xMDBCVFhfRkQJCTB4MDAwOAorI2RlZmluZSBQT1JUX1JFTU9URV8xMDBCVFgJCTB4MDAwNAorI2RlZmluZSBQT1JUX1JFTU9URV8xMEJUX0ZECQkweDAwMDIKKyNkZWZpbmUgUE9SVF9SRU1PVEVfMTBCVAkJMHgwMDAxCisKKy8qCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfQUREUgkJMDAtMDAwMEZGRkYtRkZGRkZGRkYKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9GV0RfUE9SVFMJMDAtMDAwNzAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9WQUxJRAkJMDAtMDAwODAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9PVkVSUklERQkwMC0wMDEwMDAwMC0wMDAwMDAwMAorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX1VTRV9GSUQJMDAtMDAyMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9GSUQJCTAwLTAzQzAwMDAwLTAwMDAwMDAwCisqLworCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfQUREUgkJMHgwMDAwRkZGRgorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX0ZXRF9QT1JUUwkweDAwMDcwMDAwCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfVkFMSUQJCTB4MDAwODAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9PVkVSUklERQkweDAwMTAwMDAwCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfVVNFX0ZJRAkweDAwMjAwMDAwCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfRklECQkweDAzQzAwMDAwCisKKyNkZWZpbmUgU1RBVElDX01BQ19GV0RfUE9SVFNfU0hJRlQJMTYKKyNkZWZpbmUgU1RBVElDX01BQ19GSURfU0hJRlQJCTIyCisKKy8qCisjZGVmaW5lIFZMQU5fVEFCTEVfVklECQkJMDAtMDAwMDAwMDAtMDAwMDBGRkYKKyNkZWZpbmUgVkxBTl9UQUJMRV9GSUQJCQkwMC0wMDAwMDAwMC0wMDAwRjAwMAorI2RlZmluZSBWTEFOX1RBQkxFX01FTUJFUlNISVAJCTAwLTAwMDAwMDAwLTAwMDcwMDAwCisjZGVmaW5lIFZMQU5fVEFCTEVfVkFMSUQJCTAwLTAwMDAwMDAwLTAwMDgwMDAwCisqLworCisjZGVmaW5lIFZMQU5fVEFCTEVfVklECQkJMHgwMDAwMEZGRgorI2RlZmluZSBWTEFOX1RBQkxFX0ZJRAkJCTB4MDAwMEYwMDAKKyNkZWZpbmUgVkxBTl9UQUJMRV9NRU1CRVJTSElQCQkweDAwMDcwMDAwCisjZGVmaW5lIFZMQU5fVEFCTEVfVkFMSUQJCTB4MDAwODAwMDAKKworI2RlZmluZSBWTEFOX1RBQkxFX0ZJRF9TSElGVAkJMTIKKyNkZWZpbmUgVkxBTl9UQUJMRV9NRU1CRVJTSElQX1NISUZUCTE2CisKKy8qCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0FERFIJCTAwLTAwMDBGRkZGLUZGRkZGRkZGCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0ZJRAkJMDAtMDAwRjAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfU1JDX1BPUlQJMDAtMDAzMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfVElNRVNUQU1QCTAwLTAwQzAwMDAwLTAwMDAwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0VOVFJJRVMJMDMtRkYwMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfTUFDX0VNUFRZCTA0LTAwMDAwMDAwLTAwMDAwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX1JFU0VSVkVECTc4LTAwMDAwMDAwLTAwMDAwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX05PVF9SRUFEWQk4MC0wMDAwMDAwMC0wMDAwMDAwMAorKi8KKworI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9BRERSCQkweDAwMDBGRkZGCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0ZJRAkJMHgwMDBGMDAwMAorI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9TUkNfUE9SVAkweDAwMzAwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX1RJTUVTVEFNUAkweDAwQzAwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0VOVFJJRVMJMHhGRjAwMDAwMAorCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0VOVFJJRVNfSAkweDAzCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX01BQ19FTVBUWQkweDA0CisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX1JFU0VSVkVECTB4NzgKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfTk9UX1JFQURZCTB4ODAKKworI2RlZmluZSBEWU5BTUlDX01BQ19GSURfU0hJRlQJCTE2CisjZGVmaW5lIERZTkFNSUNfTUFDX1NSQ19QT1JUX1NISUZUCTIwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RJTUVTVEFNUF9TSElGVAkyMgorI2RlZmluZSBEWU5BTUlDX01BQ19FTlRSSUVTX1NISUZUCTI0CisjZGVmaW5lIERZTkFNSUNfTUFDX0VOVFJJRVNfSF9TSElGVAk4CisKKy8qCisjZGVmaW5lIE1JQl9DT1VOVEVSX1ZBTFVFCQkwMC0wMDAwMDAwMC0zRkZGRkZGRgorI2RlZmluZSBNSUJfQ09VTlRFUl9WQUxJRAkJMDAtMDAwMDAwMDAtNDAwMDAwMDAKKyNkZWZpbmUgTUlCX0NPVU5URVJfT1ZFUkZMT1cJCTAwLTAwMDAwMDAwLTgwMDAwMDAwCisqLworCisjZGVmaW5lIE1JQl9DT1VOVEVSX1ZBTFVFCQkweDNGRkZGRkZGCisjZGVmaW5lIE1JQl9DT1VOVEVSX1ZBTElECQkweDQwMDAwMDAwCisjZGVmaW5lIE1JQl9DT1VOVEVSX09WRVJGTE9XCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgTUlCX1BBQ0tFVF9EUk9QUEVECQkweDAwMDBGRkZGCisKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1RYXzAJMHgxMDAKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1RYXzEJMHgxMDEKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1RYCTB4MTAyCisjZGVmaW5lIEtTX01JQl9QQUNLRVRfRFJPUFBFRF9SWF8wCTB4MTAzCisjZGVmaW5lIEtTX01JQl9QQUNLRVRfRFJPUFBFRF9SWF8xCTB4MTA0CisjZGVmaW5lIEtTX01JQl9QQUNLRVRfRFJPUFBFRF9SWAkweDEwNQorCisvKiBDaGFuZ2UgZGVmYXVsdCBMRUQgbW9kZS4gKi8KKyNkZWZpbmUgU0VUX0RFRkFVTFRfTEVECQkJTEVEX1NQRUVEX0RVUExFWF9BQ1QKKworI2RlZmluZSBNQUNfQUREUl9MRU4JCQk2CisjZGVmaW5lIE1BQ19BRERSX09SREVSKGkpCQkoTUFDX0FERFJfTEVOIC0gMSAtIChpKSkKKworI2RlZmluZSBNQVhfRVRIRVJORVRfQk9EWV9TSVpFCQkxNTAwCisjZGVmaW5lIEVUSEVSTkVUX0hFQURFUl9TSVpFCQkxNAorCisjZGVmaW5lIE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRQlcCisJKE1BWF9FVEhFUk5FVF9CT0RZX1NJWkUgKyBFVEhFUk5FVF9IRUFERVJfU0laRSkKKworI2RlZmluZSBSRUdVTEFSX1JYX0JVRl9TSVpFCQkoTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFICsgNCkKKyNkZWZpbmUgTUFYX1JYX0JVRl9TSVpFCQkJKDE5MTIgKyA0KQorCisjZGVmaW5lIEFERElUSU9OQUxfRU5UUklFUwkJMTYKKyNkZWZpbmUgTUFYX01VTFRJQ0FTVF9MSVNUCQkzMgorCisjZGVmaW5lIEhXX01VTFRJQ0FTVF9TSVpFCQk4CisKKyNkZWZpbmUgSFdfVE9fREVWX1BPUlQocG9ydCkJCShwb3J0IC0gMSkKKworZW51bSB7CisJbWVkaWFfY29ubmVjdGVkLAorCW1lZGlhX2Rpc2Nvbm5lY3RlZAorfTsKKworZW51bSB7CisJT0lEX0NPVU5URVJfVU5LT1dOLAorCisJT0lEX0NPVU5URVJfRklSU1QsCisKKwkvKiB0b3RhbCB0cmFuc21pdCBlcnJvcnMgKi8KKwlPSURfQ09VTlRFUl9YTUlUX0VSUk9SLAorCisJLyogdG90YWwgcmVjZWl2ZSBlcnJvcnMgKi8KKwlPSURfQ09VTlRFUl9SQ1ZfRVJST1IsCisKKwlPSURfQ09VTlRFUl9MQVNUCit9OworCisvKgorICogSGFyZHdhcmUgZGVzY3JpcHRvciBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgREVTQ19BTElHTk1FTlQJCQkxNgorI2RlZmluZSBCVUZGRVJfQUxJR05NRU5UCQk4CisKKyNkZWZpbmUgTlVNX09GX1JYX0RFU0MJCQk2NAorI2RlZmluZSBOVU1fT0ZfVFhfREVTQwkJCTY0CisKKyNkZWZpbmUgS1NfREVTQ19SWF9GUkFNRV9MRU4JCTB4MDAwMDA3RkYKKyNkZWZpbmUgS1NfREVTQ19SWF9GUkFNRV9UWVBFCQkweDAwMDA4MDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfQ1JDCQkweDAwMDEwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfUlVOVAkJMHgwMDAyMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SX1RPT19MT05HCTB4MDAwNDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUl9QSFkJCTB4MDAwODAwMDAKKyNkZWZpbmUgS1M4ODRYX0RFU0NfUlhfUE9SVF9NQVNLCTB4MDAzMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9NVUxUSUNBU1QJCTB4MDEwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUgkJMHgwMjAwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SX0NTVU1fVURQCTB4MDQwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUl9DU1VNX1RDUAkweDA4MDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfQ1NVTV9JUAkweDEwMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfTEFTVAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9GSVJTVAkJMHg0MDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SX0NPTkQJCVwKKwkoS1NfREVTQ19SWF9FUlJPUl9DUkMgfAkJXAorCUtTX0RFU0NfUlhfRVJST1JfUlVOVCB8CQlcCisJS1NfREVTQ19SWF9FUlJPUl9QSFkgfAkJXAorCUtTX0RFU0NfUlhfRVJST1JfVE9PX0xPTkcpCisKKyNkZWZpbmUgS1NfREVTQ19IV19PV05FRAkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEtTX0RFU0NfQlVGX1NJWkUJCTB4MDAwMDA3RkYKKyNkZWZpbmUgS1M4ODRYX0RFU0NfVFhfUE9SVF9NQVNLCTB4MDAzMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19FTkRfT0ZfUklORwkJMHgwMjAwMDAwMAorI2RlZmluZSBLU19ERVNDX1RYX0NTVU1fR0VOX1VEUAkJMHgwNDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1RYX0NTVU1fR0VOX1RDUAkJMHgwODAwMDAwMAorI2RlZmluZSBLU19ERVNDX1RYX0NTVU1fR0VOX0lQCQkweDEwMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfVFhfTEFTVAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19UWF9GSVJTVAkJMHg0MDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1RYX0lOVEVSUlVQVAkJMHg4MDAwMDAwMAorCisjZGVmaW5lIEtTX0RFU0NfUE9SVF9TSElGVAkJMjAKKworI2RlZmluZSBLU19ERVNDX1JYX01BU0sJCQkoS1NfREVTQ19CVUZfU0laRSkKKworI2RlZmluZSBLU19ERVNDX1RYX01BU0sJCQlcCisJKEtTX0RFU0NfVFhfSU5URVJSVVBUIHwJCVwKKwlLU19ERVNDX1RYX0ZJUlNUIHwJCVwKKwlLU19ERVNDX1RYX0xBU1QgfAkJXAorCUtTX0RFU0NfVFhfQ1NVTV9HRU5fSVAgfAlcCisJS1NfREVTQ19UWF9DU1VNX0dFTl9UQ1AgfAlcCisJS1NfREVTQ19UWF9DU1VNX0dFTl9VRFAgfAlcCisJS1NfREVTQ19CVUZfU0laRSkKKworc3RydWN0IGtzel9kZXNjX3J4X3N0YXQgeworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXUzMiBod19vd25lZDoxOworCXUzMiBmaXJzdF9kZXNjOjE7CisJdTMyIGxhc3RfZGVzYzoxOworCXUzMiBjc3VtX2Vycl9pcDoxOworCXUzMiBjc3VtX2Vycl90Y3A6MTsKKwl1MzIgY3N1bV9lcnJfdWRwOjE7CisJdTMyIGVycm9yOjE7CisJdTMyIG11bHRpY2FzdDoxOworCXUzMiBzcmNfcG9ydDo0OworCXUzMiBlcnJfcGh5OjE7CisJdTMyIGVycl90b29fbG9uZzoxOworCXUzMiBlcnJfcnVudDoxOworCXUzMiBlcnJfY3JjOjE7CisJdTMyIGZyYW1lX3R5cGU6MTsKKwl1MzIgcmVzZXJ2ZWQxOjQ7CisJdTMyIGZyYW1lX2xlbjoxMTsKKyNlbHNlCisJdTMyIGZyYW1lX2xlbjoxMTsKKwl1MzIgcmVzZXJ2ZWQxOjQ7CisJdTMyIGZyYW1lX3R5cGU6MTsKKwl1MzIgZXJyX2NyYzoxOworCXUzMiBlcnJfcnVudDoxOworCXUzMiBlcnJfdG9vX2xvbmc6MTsKKwl1MzIgZXJyX3BoeToxOworCXUzMiBzcmNfcG9ydDo0OworCXUzMiBtdWx0aWNhc3Q6MTsKKwl1MzIgZXJyb3I6MTsKKwl1MzIgY3N1bV9lcnJfdWRwOjE7CisJdTMyIGNzdW1fZXJyX3RjcDoxOworCXUzMiBjc3VtX2Vycl9pcDoxOworCXUzMiBsYXN0X2Rlc2M6MTsKKwl1MzIgZmlyc3RfZGVzYzoxOworCXUzMiBod19vd25lZDoxOworI2VuZGlmCit9OworCitzdHJ1Y3Qga3N6X2Rlc2NfdHhfc3RhdCB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdTMyIGh3X293bmVkOjE7CisJdTMyIHJlc2VydmVkMTozMTsKKyNlbHNlCisJdTMyIHJlc2VydmVkMTozMTsKKwl1MzIgaHdfb3duZWQ6MTsKKyNlbmRpZgorfTsKKworc3RydWN0IGtzel9kZXNjX3J4X2J1ZiB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdTMyIHJlc2VydmVkNDo2OworCXUzMiBlbmRfb2ZfcmluZzoxOworCXUzMiByZXNlcnZlZDM6MTQ7CisJdTMyIGJ1Zl9zaXplOjExOworI2Vsc2UKKwl1MzIgYnVmX3NpemU6MTE7CisJdTMyIHJlc2VydmVkMzoxNDsKKwl1MzIgZW5kX29mX3Jpbmc6MTsKKwl1MzIgcmVzZXJ2ZWQ0OjY7CisjZW5kaWYKK307CisKK3N0cnVjdCBrc3pfZGVzY190eF9idWYgeworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXUzMiBpbnRyOjE7CisJdTMyIGZpcnN0X3NlZzoxOworCXUzMiBsYXN0X3NlZzoxOworCXUzMiBjc3VtX2dlbl9pcDoxOworCXUzMiBjc3VtX2dlbl90Y3A6MTsKKwl1MzIgY3N1bV9nZW5fdWRwOjE7CisJdTMyIGVuZF9vZl9yaW5nOjE7CisJdTMyIHJlc2VydmVkNDoxOworCXUzMiBkZXN0X3BvcnQ6NDsKKwl1MzIgcmVzZXJ2ZWQzOjk7CisJdTMyIGJ1Zl9zaXplOjExOworI2Vsc2UKKwl1MzIgYnVmX3NpemU6MTE7CisJdTMyIHJlc2VydmVkMzo5OworCXUzMiBkZXN0X3BvcnQ6NDsKKwl1MzIgcmVzZXJ2ZWQ0OjE7CisJdTMyIGVuZF9vZl9yaW5nOjE7CisJdTMyIGNzdW1fZ2VuX3VkcDoxOworCXUzMiBjc3VtX2dlbl90Y3A6MTsKKwl1MzIgY3N1bV9nZW5faXA6MTsKKwl1MzIgbGFzdF9zZWc6MTsKKwl1MzIgZmlyc3Rfc2VnOjE7CisJdTMyIGludHI6MTsKKyNlbmRpZgorfTsKKwordW5pb24gZGVzY19zdGF0IHsKKwlzdHJ1Y3Qga3N6X2Rlc2Nfcnhfc3RhdCByeDsKKwlzdHJ1Y3Qga3N6X2Rlc2NfdHhfc3RhdCB0eDsKKwl1MzIgZGF0YTsKK307CisKK3VuaW9uIGRlc2NfYnVmIHsKKwlzdHJ1Y3Qga3N6X2Rlc2NfcnhfYnVmIHJ4OworCXN0cnVjdCBrc3pfZGVzY190eF9idWYgdHg7CisJdTMyIGRhdGE7Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfaHdfZGVzYyAtIEhhcmR3YXJlIGRlc2NyaXB0b3IgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBjdHJsOglEZXNjcmlwdG9yIGNvbnRyb2wgdmFsdWUuCisgKiBAYnVmOglEZXNjcmlwdG9yIGJ1ZmZlciB2YWx1ZS4KKyAqIEBhZGRyOglQaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSBidWZmZXIuCisgKiBAbmV4dDoJUG9pbnRlciB0byBuZXh0IGhhcmR3YXJlIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBrc3pfaHdfZGVzYyB7CisJdW5pb24gZGVzY19zdGF0IGN0cmw7CisJdW5pb24gZGVzY19idWYgYnVmOworCXUzMiBhZGRyOworCXUzMiBuZXh0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3N3X2Rlc2MgLSBTb2Z0d2FyZSBkZXNjcmlwdG9yIGRhdGEgc3RydWN0dXJlCisgKiBAY3RybDoJRGVzY3JpcHRvciBjb250cm9sIHZhbHVlLgorICogQGJ1ZjoJRGVzY3JpcHRvciBidWZmZXIgdmFsdWUuCisgKiBAYnVmX3NpemU6CUN1cnJlbnQgYnVmZmVycyBzaXplIHZhbHVlIGluIGhhcmR3YXJlIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBrc3pfc3dfZGVzYyB7CisJdW5pb24gZGVzY19zdGF0IGN0cmw7CisJdW5pb24gZGVzY19idWYgYnVmOworCXUzMiBidWZfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IGtzel9kbWFfYnVmIC0gT1MgZGVwZW5kZW50IERNQSBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBza2I6CUFzc29jaWF0ZWQgc29ja2V0IGJ1ZmZlci4KKyAqIEBkbWE6CUFzc29jaWF0ZWQgcGh5c2ljYWwgRE1BIGFkZHJlc3MuCisgKiBsZW46CQlBY3R1YWwgbGVuIHVzZWQuCisgKi8KK3N0cnVjdCBrc3pfZG1hX2J1ZiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwlpbnQgbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X2Rlc2MgLSBEZXNjcmlwdG9yIHN0cnVjdHVyZQorICogQHBodzoJSGFyZHdhcmUgZGVzY3JpcHRvciBwb2ludGVyIHRvIHVuY2FjaGVkIHBoeXNpY2FsIG1lbW9yeS4KKyAqIEBzdzoJCUNhY2hlZCBtZW1vcnkgdG8gaG9sZCBoYXJkd2FyZSBkZXNjcmlwdG9yIHZhbHVlcyBmb3IKKyAqIAkJbWFuaXB1bGF0aW9uLgorICogQGRtYV9idWY6CU9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50IGRhdGEgc3RydWN0dXJlIHRvIGhvbGQgcGh5c2ljYWwKKyAqIAkJbWVtb3J5IGJ1ZmZlciBhbGxvY2F0aW9uIGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3Qga3N6X2Rlc2MgeworCXN0cnVjdCBrc3pfaHdfZGVzYyAqcGh3OworCXN0cnVjdCBrc3pfc3dfZGVzYyBzdzsKKwlzdHJ1Y3Qga3N6X2RtYV9idWYgZG1hX2J1ZjsKK307CisKKyNkZWZpbmUgRE1BX0JVRkZFUihkZXNjKSAgKChzdHJ1Y3Qga3N6X2RtYV9idWYgKikoJihkZXNjKS0+ZG1hX2J1ZikpCisKKy8qKgorICogc3RydWN0IGtzel9kZXNjX2luZm8gLSBEZXNjcmlwdG9yIGluZm9ybWF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiBAcmluZzoJRmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZy4KKyAqIEBjdXI6CUN1cnJlbnQgZGVzY3JpcHRvciBiZWluZyBtYW5pcHVsYXRlZC4KKyAqIEByaW5nX3ZpcnQ6CUZpcnN0IGhhcmR3YXJlIGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcuCisgKiBAcmluZ19waHlzOglUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiB0aGUgcmluZy4KKyAqIEBzaXplOglTaXplIG9mIGhhcmR3YXJlIGRlc2NyaXB0b3IuCisgKiBAYWxsb2M6CU51bWJlciBvZiBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQuCisgKiBAYXZhaWw6CU51bWJlciBvZiBkZXNjcmlwdG9ycyBhdmFpbGFibGUgZm9yIHVzZS4KKyAqIEBsYXN0OglJbmRleCBmb3IgbGFzdCBkZXNjcmlwdG9yIHJlbGVhc2VkIHRvIGhhcmR3YXJlLgorICogQG5leHQ6CUluZGV4IGZvciBuZXh0IGRlc2NyaXB0b3IgYXZhaWxhYmxlIGZvciB1c2UuCisgKiBAbWFzazoJTWFzayBmb3IgaW5kZXggd3JhcHBpbmcuCisgKi8KK3N0cnVjdCBrc3pfZGVzY19pbmZvIHsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKnJpbmc7CisJc3RydWN0IGtzel9kZXNjICpjdXI7CisJc3RydWN0IGtzel9od19kZXNjICpyaW5nX3ZpcnQ7CisJdTMyIHJpbmdfcGh5czsKKwlpbnQgc2l6ZTsKKwlpbnQgYWxsb2M7CisJaW50IGF2YWlsOworCWludCBsYXN0OworCWludCBuZXh0OworCWludCBtYXNrOworfTsKKworLyoKKyAqIEtTWjg4NDIgc3dpdGNoIGRlZmluaXRpb25zCisgKi8KKworZW51bSB7CisJVEFCTEVfU1RBVElDX01BQyA9IDAsCisJVEFCTEVfVkxBTiwKKwlUQUJMRV9EWU5BTUlDX01BQywKKwlUQUJMRV9NSUIKK307CisKKyNkZWZpbmUgTEVBUk5FRF9NQUNfVEFCTEVfRU5UUklFUwkxMDI0CisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfRU5UUklFUwk4CisKKy8qKgorICogc3RydWN0IGtzel9tYWNfdGFibGUgLSBTdGF0aWMgTUFDIHRhYmxlIGRhdGEgc3RydWN0dXJlCisgKiBAbWFjX2FkZHI6CU1BQyBhZGRyZXNzIHRvIGZpbHRlci4KKyAqIEB2aWQ6CVZJRCB2YWx1ZS4KKyAqIEBmaWQ6CUZJRCB2YWx1ZS4KKyAqIEBwb3J0czoJUG9ydCBtZW1iZXJzaGlwLgorICogQG92ZXJyaWRlOglPdmVycmlkZSBzZXR0aW5nLgorICogQHVzZV9maWQ6CUZJRCB1c2Ugc2V0dGluZy4KKyAqIEB2YWxpZDoJVmFsaWQgc2V0dGluZyBpbmRpY2F0aW5nIHRoZSBlbnRyeSBpcyBiZWluZyB1c2VkLgorICovCitzdHJ1Y3Qga3N6X21hY190YWJsZSB7CisJdTggbWFjX2FkZHJbTUFDX0FERFJfTEVOXTsKKwl1MTYgdmlkOworCXU4IGZpZDsKKwl1OCBwb3J0czsKKwl1OCBvdmVycmlkZToxOworCXU4IHVzZV9maWQ6MTsKKwl1OCB2YWxpZDoxOworfTsKKworI2RlZmluZSBWTEFOX1RBQkxFX0VOVFJJRVMJCTE2CisKKy8qKgorICogc3RydWN0IGtzel92bGFuX3RhYmxlIC0gVkxBTiB0YWJsZSBkYXRhIHN0cnVjdHVyZQorICogQHZpZDoJVklEIHZhbHVlLgorICogQGZpZDoJRklEIHZhbHVlLgorICogQG1lbWJlcjoJUG9ydCBtZW1iZXJzaGlwLgorICovCitzdHJ1Y3Qga3N6X3ZsYW5fdGFibGUgeworCXUxNiB2aWQ7CisJdTggZmlkOworCXU4IG1lbWJlcjsKK307CisKKyNkZWZpbmUgRElGRlNFUlZfRU5UUklFUwkJNjQKKyNkZWZpbmUgUFJJT184MDJfMVBfRU5UUklFUwkJOAorI2RlZmluZSBQUklPX1FVRVVFUwkJCTQKKworI2RlZmluZSBTV0lUQ0hfUE9SVF9OVU0JCQkyCisjZGVmaW5lIFRPVEFMX1BPUlRfTlVNCQkJKFNXSVRDSF9QT1JUX05VTSArIDEpCisjZGVmaW5lIEhPU1RfTUFTSwkJCSgxIDw8IFNXSVRDSF9QT1JUX05VTSkKKyNkZWZpbmUgUE9SVF9NQVNLCQkJNworCisjZGVmaW5lIE1BSU5fUE9SVAkJCTAKKyNkZWZpbmUgT1RIRVJfUE9SVAkJCTEKKyNkZWZpbmUgSE9TVF9QT1JUCQkJU1dJVENIX1BPUlRfTlVNCisKKyNkZWZpbmUgUE9SVF9DT1VOVEVSX05VTQkJMHgyMAorI2RlZmluZSBUT1RBTF9QT1JUX0NPVU5URVJfTlVNCQkoUE9SVF9DT1VOVEVSX05VTSArIDIpCisKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfTE9fUFJJT1JJVFkJMHgwMAorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9ISV9QUklPUklUWQkweDAxCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX1VOREVSU0laRQkweDAyCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX0ZSQUdNRU5UCQkweDAzCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX09WRVJTSVpFCQkweDA0CisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX0pBQkJFUgkJMHgwNQorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9TWU1CT0xfRVJSCTB4MDYKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfQ1JDX0VSUgkJMHgwNworI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9BTElHTk1FTlRfRVJSCTB4MDgKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfQ1RSTF84ODA4CTB4MDkKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfUEFVU0UJCTB4MEEKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfQlJPQURDQVNUCTB4MEIKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfTVVMVElDQVNUCTB4MEMKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfVU5JQ0FTVAkJMHgwRAorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9PQ1RFVF82NAkJMHgwRQorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9PQ1RFVF82NV8xMjcJMHgwRgorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9PQ1RFVF8xMjhfMjU1CTB4MTAKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfT0NURVRfMjU2XzUxMQkweDExCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX09DVEVUXzUxMl8xMDIzCTB4MTIKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfT0NURVRfMTAyNF8xNTIyCTB4MTMKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfTE9fUFJJT1JJVFkJMHgxNAorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9ISV9QUklPUklUWQkweDE1CisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX0xBVEVfQ09MTElTSU9OCTB4MTYKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfUEFVU0UJCTB4MTcKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfQlJPQURDQVNUCTB4MTgKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfTVVMVElDQVNUCTB4MTkKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfVU5JQ0FTVAkJMHgxQQorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9ERUZFUlJFRAkJMHgxQgorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9UT1RBTF9DT0xMSVNJT04JMHgxQworI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9FWENFU1NfQ09MTElTSU9OCTB4MUQKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfU0lOR0xFX0NPTExJU0lPTgkweDFFCisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX01VTFRJX0NPTExJU0lPTgkweDFGCisKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfRFJPUFBFRF9QQUNLRVQJMHgyMAorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9EUk9QUEVEX1BBQ0tFVAkweDIxCisKKy8qKgorICogc3RydWN0IGtzel9wb3J0X21pYiAtIFBvcnQgTUlCIGRhdGEgc3RydWN0dXJlCisgKiBAY250X3B0cjoJQ3VycmVudCBwb2ludGVyIHRvIE1JQiBjb3VudGVyIGluZGV4LgorICogQGxpbmtfZG93bjoJSW5kaWNhdGlvbiB0aGUgbGluayBoYXMganVzdCBnb25lIGRvd24uCisgKiBAc3RhdGU6CUNvbm5lY3Rpb24gc3RhdHVzIG9mIHRoZSBwb3J0LgorICogQG1pYl9zdGFydDoJVGhlIHN0YXJ0aW5nIGNvdW50ZXIgaW5kZXguICBTb21lIHBvcnRzIGRvIG5vdCBzdGFydCBhdCAwLgorICogQGNvdW50ZXI6CTY0LWJpdCBNSUIgY291bnRlciB2YWx1ZS4KKyAqIEBkcm9wcGVkOglUZW1wb3JhcnkgYnVmZmVyIHRvIHJlbWVtYmVyIGxhc3QgcmVhZCBwYWNrZXQgZHJvcHBlZCB2YWx1ZXMuCisgKgorICogTUlCIGNvdW50ZXJzIG5lZWRzIHRvIGJlIHJlYWQgcGVyaW9kaWNhbGx5IHNvIHRoYXQgY291bnRlcnMgZG8gbm90IGdldAorICogb3ZlcmZsb3dlZCBhbmQgZ2l2ZSBpbmNvcnJlY3QgdmFsdWVzLiAgQSByaWdodCBiYWxhbmNlIGlzIG5lZWRlZCB0bworICogc2F0aXNmeSB0aGlzIGNvbmRpdGlvbiBhbmQgbm90IHdhc3RlIHRvbyBtdWNoIENQVSB0aW1lLgorICoKKyAqIEl0IGlzIHBvaW50bGVzcyB0byByZWFkIE1JQiBjb3VudGVycyB3aGVuIHRoZSBwb3J0IGlzIGRpc2Nvbm5lY3RlZC4gIFRoZQorICogQHN0YXRlIHByb3ZpZGVzIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBzbyB0aGF0IE1JQiBjb3VudGVycyBhcmUgcmVhZCBvbmx5CisgKiB3aGVuIHRoZSBwb3J0IGlzIGNvbm5lY3RlZC4gIFRoZSBAbGlua19kb3duIGluZGljYXRlcyB0aGUgcG9ydCBpcyBqdXN0CisgKiBkaXNjb25uZWN0ZWQgc28gdGhhdCBhbGwgTUlCIGNvdW50ZXJzIGFyZSByZWFkIG9uZSBsYXN0IHRpbWUgdG8gdXBkYXRlIHRoZQorICogaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBrc3pfcG9ydF9taWIgeworCXU4IGNudF9wdHI7CisJdTggbGlua19kb3duOworCXU4IHN0YXRlOworCXU4IG1pYl9zdGFydDsKKworCXU2NCBjb3VudGVyW1RPVEFMX1BPUlRfQ09VTlRFUl9OVU1dOworCXUzMiBkcm9wcGVkWzJdOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3BvcnRfY2ZnIC0gUG9ydCBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiBAdmlkOglWSUQgdmFsdWUuCisgKiBAbWVtYmVyOglQb3J0IG1lbWJlcnNoaXAuCisgKiBAcG9ydF9wcmlvOglQb3J0IHByaW9yaXR5LgorICogQHJ4X3JhdGU6CVJlY2VpdmUgcHJpb3JpdHkgcmF0ZS4KKyAqIEB0eF9yYXRlOglUcmFuc21pdCBwcmlvcml0eSByYXRlLgorICogQHN0cF9zdGF0ZToJQ3VycmVudCBTcGFubmluZyBUcmVlIFByb3RvY29sIHN0YXRlLgorICovCitzdHJ1Y3Qga3N6X3BvcnRfY2ZnIHsKKwl1MTYgdmlkOworCXU4IG1lbWJlcjsKKwl1OCBwb3J0X3ByaW87CisJdTMyIHJ4X3JhdGVbUFJJT19RVUVVRVNdOworCXUzMiB0eF9yYXRlW1BSSU9fUVVFVUVTXTsKKwlpbnQgc3RwX3N0YXRlOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3N3aXRjaCAtIEtTWjg4NDIgc3dpdGNoIGRhdGEgc3RydWN0dXJlCisgKiBAbWFjX3RhYmxlOglNQUMgdGFibGUgZW50cmllcyBpbmZvcm1hdGlvbi4KKyAqIEB2bGFuX3RhYmxlOglWTEFOIHRhYmxlIGVudHJpZXMgaW5mb3JtYXRpb24uCisgKiBAcG9ydF9jZmc6CVBvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAqIEBkaWZmc2VydjoJRGlmZlNlcnYgcHJpb3JpdHkgc2V0dGluZ3MuICBQb3NzaWJsZSB2YWx1ZXMgZnJvbSA2LWJpdCBvZiBUb1MKKyAqIAkJKGJpdDcgfiBiaXQyKSBmaWVsZC4KKyAqIEBwXzgwMl8xcDoJODAyLjFQIHByaW9yaXR5IHNldHRpbmdzLiAgUG9zc2libGUgdmFsdWVzIGZyb20gMy1iaXQgb2YgODAyLjFwCisgKiAJCVRhZyBwcmlvcml0eSBmaWVsZC4KKyAqIEBicl9hZGRyOglCcmlkZ2UgYWRkcmVzcy4gIFVzZWQgZm9yIFNUUC4KKyAqIEBvdGhlcl9hZGRyOglPdGhlciBNQUMgYWRkcmVzcy4gIFVzZWQgZm9yIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlIG1vZGUuCisgKiBAYnJvYWRfcGVyOglCcm9hZGNhc3Qgc3Rvcm0gcGVyY2VudGFnZS4KKyAqIEBtZW1iZXI6CUN1cnJlbnQgcG9ydCBtZW1iZXJzaGlwLiAgVXNlZCBmb3IgU1RQLgorICovCitzdHJ1Y3Qga3N6X3N3aXRjaCB7CisJc3RydWN0IGtzel9tYWNfdGFibGUgbWFjX3RhYmxlW1NUQVRJQ19NQUNfVEFCTEVfRU5UUklFU107CisJc3RydWN0IGtzel92bGFuX3RhYmxlIHZsYW5fdGFibGVbVkxBTl9UQUJMRV9FTlRSSUVTXTsKKwlzdHJ1Y3Qga3N6X3BvcnRfY2ZnIHBvcnRfY2ZnW1RPVEFMX1BPUlRfTlVNXTsKKworCXU4IGRpZmZzZXJ2W0RJRkZTRVJWX0VOVFJJRVNdOworCXU4IHBfODAyXzFwW1BSSU9fODAyXzFQX0VOVFJJRVNdOworCisJdTggYnJfYWRkcltNQUNfQUREUl9MRU5dOworCXU4IG90aGVyX2FkZHJbTUFDX0FERFJfTEVOXTsKKworCXU4IGJyb2FkX3BlcjsKKwl1OCBtZW1iZXI7Cit9OworCisjZGVmaW5lIFRYX1JBVEVfVU5JVAkJCTEwMDAwCisKKy8qKgorICogc3RydWN0IGtzel9wb3J0X2luZm8gLSBQb3J0IGluZm9ybWF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiBAc3RhdGU6CUNvbm5lY3Rpb24gc3RhdHVzIG9mIHRoZSBwb3J0LgorICogQHR4X3JhdGU6CVRyYW5zbWl0IHJhdGUgZGl2aWRlZCBieSAxMDAwMCB0byBnZXQgTWJpdC4KKyAqIEBkdXBsZXg6CUR1cGxleCBtb2RlLgorICogQGFkdmVydGlzZWQ6CUFkdmVydGlzZWQgYXV0by1uZWdvdGlhdGlvbiBzZXR0aW5nLiAgVXNlZCB0byBkZXRlcm1pbmUgbGluay4KKyAqIEBwYXJ0bmVyOglBdXRvLW5lZ290aWF0aW9uIHBhcnRuZXIgc2V0dGluZy4gIFVzZWQgdG8gZGV0ZXJtaW5lIGxpbmsuCisgKiBAcG9ydF9pZDoJUG9ydCBpbmRleCB0byBhY2Nlc3MgYWN0dWFsIGhhcmR3YXJlIHJlZ2lzdGVyLgorICogQHBkZXY6CVBvaW50ZXIgdG8gT1MgZGVwZW5kZW50IG5ldHdvcmsgZGV2aWNlLgorICovCitzdHJ1Y3Qga3N6X3BvcnRfaW5mbyB7CisJdWludCBzdGF0ZTsKKwl1aW50IHR4X3JhdGU7CisJdTggZHVwbGV4OworCXU4IGFkdmVydGlzZWQ7CisJdTggcGFydG5lcjsKKwl1OCBwb3J0X2lkOworCXZvaWQgKnBkZXY7Cit9OworCisjZGVmaW5lIE1BWF9UWF9IRUxEX1NJWkUJCTUyMDAwCisKKy8qIEhhcmR3YXJlIGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuICovCisjZGVmaW5lIExJTktfSU5UX1dPUktJTkcJCSgxIDw8IDApCisjZGVmaW5lIFNNQUxMX1BBQ0tFVF9UWF9CVUcJCSgxIDw8IDEpCisjZGVmaW5lIEhBTEZfRFVQTEVYX1NJR05BTF9CVUcJCSgxIDw8IDIpCisjZGVmaW5lIElQVjZfQ1NVTV9HRU5fSEFDSwkJKDEgPDwgMykKKyNkZWZpbmUgUlhfSFVHRV9GUkFNRQkJCSgxIDw8IDQpCisjZGVmaW5lIFNUUF9TVVBQT1JUCQkJKDEgPDwgOCkKKworLyogU29mdHdhcmUgb3ZlcnJpZGVzLiAqLworI2RlZmluZSBQQVVTRV9GTE9XX0NUUkwJCQkoMSA8PCAwKQorI2RlZmluZSBGQVNUX0FHSU5HCQkJKDEgPDwgMSkKKworLyoqCisgKiBzdHJ1Y3Qga3N6X2h3IC0gS1NaODg0WCBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZQorICogQGlvOgkJCVZpcnR1YWwgYWRkcmVzcyBhc3NpZ25lZC4KKyAqIEBrc3pfc3dpdGNoOgkJUG9pbnRlciB0byBLU1o4ODQyIHN3aXRjaC4KKyAqIEBwb3J0X2luZm86CQlQb3J0IGluZm9ybWF0aW9uLgorICogQHBvcnRfbWliOgkJUG9ydCBNSUIgaW5mb3JtYXRpb24uCisgKiBAZGV2X2NvdW50OgkJTnVtYmVyIG9mIG5ldHdvcmsgZGV2aWNlcyB0aGlzIGhhcmR3YXJlIHN1cHBvcnRzLgorICogQGRzdF9wb3J0czoJCURlc3RpbmF0aW9uIHBvcnRzIGluIHN3aXRjaCBmb3IgdHJhbnNtaXNzaW9uLgorICogQGlkOgkJCUhhcmR3YXJlIElELiAgVXNlZCBmb3IgZGlzcGxheSBvbmx5LgorICogQG1pYl9jbnQ6CQlOdW1iZXIgb2YgTUlCIGNvdW50ZXJzIHRoaXMgaGFyZHdhcmUgaGFzLgorICogQG1pYl9wb3J0X2NudDoJTnVtYmVyIG9mIHBvcnRzIHdpdGggTUlCIGNvdW50ZXJzLgorICogQHR4X2NmZzoJCUNhY2hlZCB0cmFuc21pdCBjb250cm9sIHNldHRpbmdzLgorICogQHJ4X2NmZzoJCUNhY2hlZCByZWNlaXZlIGNvbnRyb2wgc2V0dGluZ3MuCisgKiBAaW50cl9tYXNrOgkJQ3VycmVudCBpbnRlcnJ1cHQgbWFzay4KKyAqIEBpbnRyX3NldDoJCUN1cnJlbnQgaW50ZXJydXAgc2V0LgorICogQGludHJfYmxvY2tlZDoJSW50ZXJydXB0IGJsb2NrZWQuCisgKiBAcnhfZGVzY19pbmZvOglSZWNlaXZlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uCisgKiBAdHhfZGVzY19pbmZvOglUcmFuc21pdCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uLgorICogQHR4X2ludF9jbnQ6CQlUcmFuc21pdCBpbnRlcnJ1cHQgY291bnQuICBVc2VkIGZvciBUWCBvcHRpbWl6YXRpb24uCisgKiBAdHhfaW50X21hc2s6CVRyYW5zbWl0IGludGVycnVwdCBtYXNrLiAgVXNlZCBmb3IgVFggb3B0aW1pemF0aW9uLgorICogQHR4X3NpemU6CQlUcmFuc21pdCBkYXRhIHNpemUuICBVc2VkIGZvciBUWCBvcHRpbWl6YXRpb24uCisgKiAJCQlUaGUgbWF4aW11bSBpcyBkZWZpbmVkIGJ5IE1BWF9UWF9IRUxEX1NJWkUuCisgKiBAcGVybV9hZGRyOgkJUGVybWFuZW50IE1BQyBhZGRyZXNzLgorICogQG92ZXJyaWRlX2FkZHI6CU92ZXJyaWRlZCBNQUMgYWRkcmVzcy4KKyAqIEBhZGRyZXNzOgkJQWRkaXRpb25hbCBNQUMgYWRkcmVzcyBlbnRyaWVzLgorICogQGFkZHJfbGlzdF9zaXplOglBZGRpdGlvbmFsIE1BQyBhZGRyZXNzIGxpc3Qgc2l6ZS4KKyAqIEBtYWNfb3ZlcnJpZGU6CUluZGljYXRpb24gb2YgTUFDIGFkZHJlc3Mgb3ZlcnJpZGVkLgorICogQHByb21pc2N1b3VzOglDb3VudGVyIHRvIGtlZXAgdHJhY2sgb2YgcHJvbWlzY3VvdXMgbW9kZSBzZXQuCisgKiBAYWxsX211bHRpOgkJQ291bnRlciB0byBrZWVwIHRyYWNrIG9mIGFsbCBtdWx0aWNhc3QgbW9kZSBzZXQuCisgKiBAbXVsdGlfbGlzdDoJCU11bHRpY2FzdCBhZGRyZXNzIGVudHJpZXMuCisgKiBAbXVsdGlfYml0czoJCUNhY2hlZCBtdWx0aWNhc3QgaGFzaCB0YWJsZSBzZXR0aW5ncy4KKyAqIEBtdWx0aV9saXN0X3NpemU6CU11bHRpY2FzdCBhZGRyZXNzIGxpc3Qgc2l6ZS4KKyAqIEBlbmFibGVkOgkJSW5kaWNhdGlvbiBvZiBoYXJkd2FyZSBlbmFibGVkLgorICogQHJ4X3N0b3A6CQlJbmRpY2F0aW9uIG9mIHJlY2VpdmUgcHJvY2VzcyBzdG9wLgorICogQGZlYXR1cmVzOgkJSGFyZHdhcmUgZmVhdHVyZXMgdG8gZW5hYmxlLgorICogQG92ZXJyaWRlczoJCUhhcmR3YXJlIGZlYXR1cmVzIHRvIG92ZXJyaWRlLgorICogQHBhcmVudDoJCVBvaW50ZXIgdG8gcGFyZW50LCBuZXR3b3JrIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGtzel9odyB7CisJdm9pZCBfX2lvbWVtICppbzsKKworCXN0cnVjdCBrc3pfc3dpdGNoICprc3pfc3dpdGNoOworCXN0cnVjdCBrc3pfcG9ydF9pbmZvIHBvcnRfaW5mb1tTV0lUQ0hfUE9SVF9OVU1dOworCXN0cnVjdCBrc3pfcG9ydF9taWIgcG9ydF9taWJbVE9UQUxfUE9SVF9OVU1dOworCWludCBkZXZfY291bnQ7CisJaW50IGRzdF9wb3J0czsKKwlpbnQgaWQ7CisJaW50IG1pYl9jbnQ7CisJaW50IG1pYl9wb3J0X2NudDsKKworCXUzMiB0eF9jZmc7CisJdTMyIHJ4X2NmZzsKKwl1MzIgaW50cl9tYXNrOworCXUzMiBpbnRyX3NldDsKKwl1aW50IGludHJfYmxvY2tlZDsKKworCXN0cnVjdCBrc3pfZGVzY19pbmZvIHJ4X2Rlc2NfaW5mbzsKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyB0eF9kZXNjX2luZm87CisKKwlpbnQgdHhfaW50X2NudDsKKwlpbnQgdHhfaW50X21hc2s7CisJaW50IHR4X3NpemU7CisKKwl1OCBwZXJtX2FkZHJbTUFDX0FERFJfTEVOXTsKKwl1OCBvdmVycmlkZV9hZGRyW01BQ19BRERSX0xFTl07CisJdTggYWRkcmVzc1tBRERJVElPTkFMX0VOVFJJRVNdW01BQ19BRERSX0xFTl07CisJdTggYWRkcl9saXN0X3NpemU7CisJdTggbWFjX292ZXJyaWRlOworCXU4IHByb21pc2N1b3VzOworCXU4IGFsbF9tdWx0aTsKKwl1OCBtdWx0aV9saXN0W01BWF9NVUxUSUNBU1RfTElTVF1bTUFDX0FERFJfTEVOXTsKKwl1OCBtdWx0aV9iaXRzW0hXX01VTFRJQ0FTVF9TSVpFXTsKKwl1OCBtdWx0aV9saXN0X3NpemU7CisKKwl1OCBlbmFibGVkOworCXU4IHJ4X3N0b3A7CisJdTggcmVzZXJ2ZWQyWzFdOworCisJdWludCBmZWF0dXJlczsKKwl1aW50IG92ZXJyaWRlczsKKworCXZvaWQgKnBhcmVudDsKK307CisKK2VudW0geworCVBIWV9OT19GTE9XX0NUUkwsCisJUEhZX0ZMT1dfQ1RSTCwKKwlQSFlfVFhfT05MWSwKKwlQSFlfUlhfT05MWQorfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3BvcnQgLSBWaXJ0dWFsIHBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBkdXBsZXg6CQlEdXBsZXggbW9kZSBzZXR0aW5nLiAgMSBmb3IgaGFsZiBkdXBsZXgsIDIgZm9yIGZ1bGwKKyAqIAkJCWR1cGxleCwgYW5kIDAgZm9yIGF1dG8sIHdoaWNoIG5vcm1hbGx5IHJlc3VsdHMgaW4gZnVsbAorICogCQkJZHVwbGV4LgorICogQHNwZWVkOgkJU3BlZWQgc2V0dGluZy4gIDEwIGZvciAxMCBNYml0LCAxMDAgZm9yIDEwMCBNYml0LCBhbmQKKyAqIAkJCTAgZm9yIGF1dG8sIHdoaWNoIG5vcm1hbGx5IHJlc3VsdHMgaW4gMTAwIE1iaXQuCisgKiBAZm9yY2VfbGluazoJCUZvcmNlIGxpbmsgc2V0dGluZy4gIDAgZm9yIGF1dG8tbmVnb3RpYXRpb24sIGFuZCAxIGZvcgorICogCQkJZm9yY2UuCisgKiBAZmxvd19jdHJsOgkJRmxvdyBjb250cm9sIHNldHRpbmcuICBQSFlfTk9fRkxPV19DVFJMIGZvciBubyBmbG93CisgKiAJCQljb250cm9sLCBhbmQgUEhZX0ZMT1dfQ1RSTCBmb3IgZmxvdyBjb250cm9sLgorICogCQkJUEhZX1RYX09OTFkgYW5kIFBIWV9SWF9PTkxZIGFyZSBub3Qgc3VwcG9ydGVkIGZvciAxMDAKKyAqIAkJCU1iaXQgUEhZLgorICogQGZpcnN0X3BvcnQ6CQlJbmRleCBvZiBmaXJzdCBwb3J0IHRoaXMgcG9ydCBzdXBwb3J0cy4KKyAqIEBtaWJfcG9ydF9jbnQ6CU51bWJlciBvZiBwb3J0cyB3aXRoIE1JQiBjb3VudGVycy4KKyAqIEBwb3J0X2NudDoJCU51bWJlciBvZiBwb3J0cyB0aGlzIHBvcnQgc3VwcG9ydHMuCisgKiBAY291bnRlcjoJCVBvcnQgc3RhdGlzdGljcyBjb3VudGVyLgorICogQGh3OgkJCVBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlLgorICogQGxpbmtlZDoJCVBvaW50ZXIgdG8gcG9ydCBpbmZvcm1hdGlvbiBsaW5rZWQgdG8gdGhpcyBwb3J0LgorICovCitzdHJ1Y3Qga3N6X3BvcnQgeworCXU4IGR1cGxleDsKKwl1OCBzcGVlZDsKKwl1OCBmb3JjZV9saW5rOworCXU4IGZsb3dfY3RybDsKKworCWludCBmaXJzdF9wb3J0OworCWludCBtaWJfcG9ydF9jbnQ7CisJaW50IHBvcnRfY250OworCXU2NCBjb3VudGVyW09JRF9DT1VOVEVSX0xBU1RdOworCisJc3RydWN0IGtzel9odyAqaHc7CisJc3RydWN0IGtzel9wb3J0X2luZm8gKmxpbmtlZDsKK307CisKKy8qKgorICogc3RydWN0IGtzel90aW1lcl9pbmZvIC0gVGltZXIgaW5mb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEB0aW1lcjoJS2VybmVsIHRpbWVyLgorICogQGNudDoJUnVubmluZyB0aW1lciBjb3VudGVyLgorICogQG1heDoJTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aW1lcjsgLTEgZm9yIGluZmluaXR5LgorICogQHBlcmlvZDoJVGltZXIgcGVyaW9kIGluIGppZmZpZXMuCisgKi8KK3N0cnVjdCBrc3pfdGltZXJfaW5mbyB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJaW50IGNudDsKKwlpbnQgbWF4OworCWludCBwZXJpb2Q7Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfc2hhcmVkX21lbSAtIE9TIGRlcGVuZGVudCBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlCisgKiBAZG1hX2FkZHI6CVBoeXNpY2FsIERNQSBhZGRyZXNzIGFsbG9jYXRlZC4KKyAqIEBhbGxvY19zaXplOglBbGxvY2F0aW9uIHNpemUuCisgKiBAcGh5czoJQWN0dWFsIHBoeXNpY2FsIGFkZHJlc3MgdXNlZC4KKyAqIEBhbGxvY192aXJ0OglWaXJ0dWFsIGFkZHJlc3MgYWxsb2NhdGVkLgorICogQHZpcnQ6CUFjdHVhbCB2aXJ0dWFsIGFkZHJlc3MgdXNlZC4KKyAqLworc3RydWN0IGtzel9zaGFyZWRfbWVtIHsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXVpbnQgYWxsb2Nfc2l6ZTsKKwl1aW50IHBoeXM7CisJdTggKmFsbG9jX3ZpcnQ7CisJdTggKnZpcnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfY291bnRlcl9pbmZvIC0gT1MgZGVwZW5kZW50IGNvdW50ZXIgaW5mb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEBjb3VudGVyOglXYWl0IHF1ZXVlIHRvIHdha2V1cCBhZnRlciBjb3VudGVycyBhcmUgcmVhZC4KKyAqIEB0aW1lOglOZXh0IHRpbWUgaW4gamlmZmllcyB0byByZWFkIGNvdW50ZXIuCisgKiBAcmVhZDoJSW5kaWNhdGlvbiBvZiBjb3VudGVycyByZWFkIGluIGZ1bGwgb3Igbm90LgorICovCitzdHJ1Y3Qga3N6X2NvdW50ZXJfaW5mbyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY291bnRlcjsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisJaW50IHJlYWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBkZXZfaW5mbyAtIE5ldHdvcmsgZGV2aWNlIGluZm9ybWF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiBAZGV2OgkJUG9pbnRlciB0byBuZXR3b3JrIGRldmljZS4KKyAqIEBwZGV2OgkJUG9pbnRlciB0byBQQ0kgZGV2aWNlLgorICogQGh3OgkJCUhhcmR3YXJlIHN0cnVjdHVyZS4KKyAqIEBkZXNjX3Bvb2w6CQlQaHlzaWNhbCBtZW1vcnkgdXNlZCBmb3IgZGVzY3JpcHRvciBwb29sLgorICogQGh3bG9jazoJCVNwaW5sb2NrIHRvIHByZXZlbnQgaGFyZHdhcmUgZnJvbSBhY2Nlc3NpbmcuCisgKiBAbG9jazoJCU11dGV4IGxvY2sgdG8gcHJldmVudCBkZXZpY2UgZnJvbSBhY2Nlc3NpbmcuCisgKiBAZGV2X3JjdjoJCVJlY2VpdmUgcHJvY2VzcyBmdW5jdGlvbiB1c2VkLgorICogQGxhc3Rfc2tiOgkJU29ja2V0IGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIGRlc2NyaXB0b3IgcnggZnJhZ21lbnRzLgorICogQHNrYl9pbmRleDoJCUJ1ZmZlciBpbmRleCBmb3IgcmVjZWl2aW5nIGZyYWdtZW50cy4KKyAqIEBza2JfbGVuOgkJQnVmZmVyIGxlbmd0aCBmb3IgcmVjZWl2aW5nIGZyYWdtZW50cy4KKyAqIEBtaWJfcmVhZDoJCVdvcmtxdWV1ZSB0byByZWFkIE1JQiBjb3VudGVycy4KKyAqIEBtaWJfdGltZXJfaW5mbzoJVGltZXIgdG8gcmVhZCBNSUIgY291bnRlcnMuCisgKiBAY291bnRlcjoJCVVzZWQgZm9yIE1JQiByZWFkaW5nLgorICogQG10dToJCUN1cnJlbnQgTVRVIHVzZWQuICBUaGUgZGVmYXVsdCBpcyBSRUdVTEFSX1JYX0JVRl9TSVpFOworICogCQkJdGhlIG1heGltdW0gaXMgTUFYX1JYX0JVRl9TSVpFLgorICogQG9wZW5lZDoJCUNvdW50ZXIgdG8ga2VlcCB0cmFjayBvZiBkZXZpY2Ugb3Blbi4KKyAqIEByeF90YXNrbGV0OgkJUmVjZWl2ZSBwcm9jZXNzaW5nIHRhc2tsZXQuCisgKiBAdHhfdGFza2xldDoJCVRyYW5zbWl0IHByb2Nlc3NpbmcgdGFza2xldC4KKyAqIEB3b2xfZW5hYmxlOgkJV2FrZS1vbi1MQU4gZW5hYmxlIHNldCBieSBldGh0b29sLgorICogQHdvbF9zdXBwb3J0OglXYWtlLW9uLUxBTiBzdXBwb3J0IHVzZWQgYnkgZXRodG9vbC4KKyAqIEBwbWVfd2FpdDoJCVVzZWQgZm9yIEtTWjg4NDEgcG93ZXIgbWFuYWdlbWVudC4KKyAqLworc3RydWN0IGRldl9pbmZvIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJc3RydWN0IGtzel9odyBodzsKKwlzdHJ1Y3Qga3N6X3NoYXJlZF9tZW0gZGVzY19wb29sOworCisJc3BpbmxvY2tfdCBod2xvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CisKKwlpbnQgKCpkZXZfcmN2KShzdHJ1Y3QgZGV2X2luZm8gKik7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqbGFzdF9za2I7CisJaW50IHNrYl9pbmRleDsKKwlpbnQgc2tiX2xlbjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBtaWJfcmVhZDsKKwlzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gbWliX3RpbWVyX2luZm87CisJc3RydWN0IGtzel9jb3VudGVyX2luZm8gY291bnRlcltUT1RBTF9QT1JUX05VTV07CisKKwlpbnQgbXR1OworCWludCBvcGVuZWQ7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfdGFza2xldDsKKworCWludCB3b2xfZW5hYmxlOworCWludCB3b2xfc3VwcG9ydDsKKwl1bnNpZ25lZCBsb25nIHBtZV93YWl0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZGV2X3ByaXYgLSBOZXR3b3JrIGRldmljZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAYWRhcHRlcjoJCUFkYXB0ZXIgZGV2aWNlIGluZm9ybWF0aW9uLgorICogQHBvcnQ6CQlQb3J0IGluZm9ybWF0aW9uLgorICogQG1vbml0b3JfdGltZV9pbmZvOglUaW1lciB0byBtb25pdG9yIHBvcnRzLgorICogQHN0YXRzOgkJTmV0d29yayBzdGF0aXN0aWNzLgorICogQHByb2Nfc2VtOgkJU2VtYXBob3JlIGZvciBwcm9jIGFjY2Vzc2luZy4KKyAqIEBpZDoJCQlEZXZpY2UgSUQuCisgKiBAbWlpX2lmOgkJTUlJIGludGVyZmFjZSBpbmZvcm1hdGlvbi4KKyAqIEBhZHZlcnRpc2luZzoJVGVtcG9yYXJ5IHZhcmlhYmxlIHRvIHN0b3JlIGFkdmVydGlzZWQgc2V0dGluZ3MuCisgKiBAbXNnX2VuYWJsZToJCVRoZSBtZXNzYWdlIGZsYWdzIGNvbnRyb2xsaW5nIGRyaXZlciBvdXRwdXQuCisgKiBAbWVkaWFfc3RhdGU6CVRoZSBjb25uZWN0aW9uIHN0YXR1cyBvZiB0aGUgZGV2aWNlLgorICogQG11bHRpY2FzdDoJCVRoZSBhbGwgbXVsdGljYXN0IHN0YXRlIG9mIHRoZSBkZXZpY2UuCisgKiBAcHJvbWlzY3VvdXM6CVRoZSBwcm9taXNjdW91cyBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgZGV2X3ByaXYgeworCXN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X3BvcnQgcG9ydDsKKwlzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gbW9uaXRvcl90aW1lcl9pbmZvOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCisJc3RydWN0IHNlbWFwaG9yZSBwcm9jX3NlbTsKKwlpbnQgaWQ7CisKKwlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpX2lmOworCXUzMiBhZHZlcnRpc2luZzsKKworCXUzMiBtc2dfZW5hYmxlOworCWludCBtZWRpYV9zdGF0ZTsKKwlpbnQgbXVsdGljYXN0OworCWludCBwcm9taXNjdW91czsKK307CisKKyNkZWZpbmUga3NfaW5mbyhfa3MsIF9tc2cuLi4pIGRldl9pbmZvKCYoX2tzKS0+cGRldi0+ZGV2LCBfbXNnKQorI2RlZmluZSBrc193YXJuKF9rcywgX21zZy4uLikgZGV2X3dhcm4oJihfa3MpLT5wZGV2LT5kZXYsIF9tc2cpCisjZGVmaW5lIGtzX2RiZyhfa3MsIF9tc2cuLi4pIGRldl9kYmcoJihfa3MpLT5wZGV2LT5kZXYsIF9tc2cpCisjZGVmaW5lIGtzX2Vycihfa3MsIF9tc2cuLi4pIGRldl9lcnIoJihfa3MpLT5wZGV2LT5kZXYsIF9tc2cpCisKKyNkZWZpbmUgRFJWX05BTUUJCSJLU1o4ODRYIFBDSSIKKyNkZWZpbmUgREVWSUNFX05BTUUJCSJLU1o4ODR4IFBDSSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJCSJGZWIgOCwgMjAxMCIKKworc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorCSJNaWNyZWwgIiBERVZJQ0VfTkFNRSAiICIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKSI7CisKK3N0YXRpYyB1OCBERUZBVUxUX01BQ19BRERSRVNTW10gPSB7IDB4MDAsIDB4MTAsIDB4QTEsIDB4ODgsIDB4NDIsIDB4MDEgfTsKKworLyoKKyAqIEludGVycnVwdCBwcm9jZXNzaW5nIHByaW1hcnkgcm91dGluZXMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfYWNrX2ludHIoc3RydWN0IGtzel9odyAqaHcsIHVpbnQgaW50ZXJydXB0KQoreworCXdyaXRlbChpbnRlcnJ1cHQsIGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX1NUQVRVUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19kaXNfaW50cihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlody0+aW50cl9ibG9ja2VkID0gaHctPmludHJfbWFzazsKKwl3cml0ZWwoMCwgaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfRU5BQkxFKTsKKwlody0+aW50cl9zZXQgPSByZWFkbChody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfc2V0X2ludHIoc3RydWN0IGtzel9odyAqaHcsIHVpbnQgaW50ZXJydXB0KQoreworCWh3LT5pbnRyX3NldCA9IGludGVycnVwdDsKKwl3cml0ZWwoaW50ZXJydXB0LCBody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZW5hX2ludHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaHctPmludHJfYmxvY2tlZCA9IDA7CisJaHdfc2V0X2ludHIoaHcsIGh3LT5pbnRyX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZGlzX2ludHJfYml0KHN0cnVjdCBrc3pfaHcgKmh3LCB1aW50IGJpdCkKK3sKKwlody0+aW50cl9tYXNrICY9IH4oYml0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3R1cm5fb2ZmX2ludHIoc3RydWN0IGtzel9odyAqaHcsIHVpbnQgaW50ZXJydXB0KQoreworCXUzMiByZWFkX2ludHI7CisKKwlyZWFkX2ludHIgPSByZWFkbChody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUpOworCWh3LT5pbnRyX3NldCA9IHJlYWRfaW50ciAmIH5pbnRlcnJ1cHQ7CisJd3JpdGVsKGh3LT5pbnRyX3NldCwgaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfRU5BQkxFKTsKKwlod19kaXNfaW50cl9iaXQoaHcsIGludGVycnVwdCk7Cit9CisKKy8qKgorICogaHdfdHVybl9vbl9pbnRyIC0gdHVybiBvbiBzcGVjaWZpZWQgaW50ZXJydXB0cworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGJpdDoJVGhlIGludGVycnVwdCBiaXRzIHRvIGJlIG9uLgorICoKKyAqIFRoaXMgcm91dGluZSB0dXJucyBvbiB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMgaW4gdGhlIGludGVycnVwdCBtYXNrIHNvIHRoYXQKKyAqIHRob3NlIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkLgorICovCitzdGF0aWMgdm9pZCBod190dXJuX29uX2ludHIoc3RydWN0IGtzel9odyAqaHcsIHUzMiBiaXQpCit7CisJaHctPmludHJfbWFzayB8PSBiaXQ7CisKKwlpZiAoIWh3LT5pbnRyX2Jsb2NrZWQpCisJCWh3X3NldF9pbnRyKGh3LCBody0+aW50cl9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X2VuYV9pbnRyX2JpdChzdHJ1Y3Qga3N6X2h3ICpodywgdWludCBpbnRlcnJ1cHQpCit7CisJdTMyIHJlYWRfaW50cjsKKworCXJlYWRfaW50ciA9IHJlYWRsKGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX0VOQUJMRSk7CisJaHctPmludHJfc2V0ID0gcmVhZF9pbnRyIHwgaW50ZXJydXB0OworCXdyaXRlbChody0+aW50cl9zZXQsIGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZWFkX2ludHIoc3RydWN0IGtzel9odyAqaHcsIHVpbnQgKnN0YXR1cykKK3sKKwkqc3RhdHVzID0gcmVhZGwoaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfU1RBVFVTKTsKKwkqc3RhdHVzID0gKnN0YXR1cyAmIGh3LT5pbnRyX3NldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc3RvcmVfaW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdWludCBpbnRlcnJ1cHQpCit7CisJaWYgKGludGVycnVwdCkKKwkJaHdfZW5hX2ludHIoaHcpOworfQorCisvKioKKyAqIGh3X2Jsb2NrX2ludHIgLSBibG9jayBoYXJkd2FyZSBpbnRlcnJ1cHRzCisgKgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgYWxsIGludGVycnVwdHMgb2YgdGhlIGhhcmR3YXJlIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50CisgKiBpbnRlcnJ1cHQgZW5hYmxlIG1hc2sgc28gdGhhdCBpbnRlcnJ1cHRzIGNhbiBiZSByZXN0b3JlZCBsYXRlci4KKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVuYWJsZSBtYXNrLgorICovCitzdGF0aWMgdWludCBod19ibG9ja19pbnRyKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXVpbnQgaW50ZXJydXB0ID0gMDsKKworCWlmICghaHctPmludHJfYmxvY2tlZCkgeworCQlod19kaXNfaW50cihodyk7CisJCWludGVycnVwdCA9IGh3LT5pbnRyX2Jsb2NrZWQ7CisJfQorCXJldHVybiBpbnRlcnJ1cHQ7Cit9CisKKy8qCisgKiBIYXJkd2FyZSBkZXNjcmlwdG9yIHJvdXRpbmVzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2Rlc2Moc3RydWN0IGtzel9kZXNjICpkZXNjLCB1bmlvbiBkZXNjX3N0YXQgc3RhdHVzKQoreworCXN0YXR1cy5yeC5od19vd25lZCA9IDA7CisJZGVzYy0+cGh3LT5jdHJsLmRhdGEgPSBjcHVfdG9fbGUzMihzdGF0dXMuZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2Rlc2Moc3RydWN0IGtzel9kZXNjICpkZXNjKQoreworCWRlc2MtPnN3LmN0cmwudHguaHdfb3duZWQgPSAxOworCWlmIChkZXNjLT5zdy5idWZfc2l6ZSAhPSBkZXNjLT5zdy5idWYuZGF0YSkgeworCQlkZXNjLT5zdy5idWZfc2l6ZSA9IGRlc2MtPnN3LmJ1Zi5kYXRhOworCQlkZXNjLT5waHctPmJ1Zi5kYXRhID0gY3B1X3RvX2xlMzIoZGVzYy0+c3cuYnVmLmRhdGEpOworCX0KKwlkZXNjLT5waHctPmN0cmwuZGF0YSA9IGNwdV90b19sZTMyKGRlc2MtPnN3LmN0cmwuZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9yeF9wa3Qoc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8sIHN0cnVjdCBrc3pfZGVzYyAqKmRlc2MpCit7CisJKmRlc2MgPSAmaW5mby0+cmluZ1tpbmZvLT5sYXN0XTsKKwlpbmZvLT5sYXN0Kys7CisJaW5mby0+bGFzdCAmPSBpbmZvLT5tYXNrOworCWluZm8tPmF2YWlsLS07CisJKCpkZXNjKS0+c3cuYnVmLmRhdGEgJj0gfktTX0RFU0NfUlhfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9yeF9idWYoc3RydWN0IGtzel9kZXNjICpkZXNjLCB1MzIgYWRkcikKK3sKKwlkZXNjLT5waHctPmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9yeF9sZW4oc3RydWN0IGtzel9kZXNjICpkZXNjLCB1MzIgbGVuKQoreworCWRlc2MtPnN3LmJ1Zi5yeC5idWZfc2l6ZSA9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF90eF9wa3Qoc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8sCisJc3RydWN0IGtzel9kZXNjICoqZGVzYykKK3sKKwkqZGVzYyA9ICZpbmZvLT5yaW5nW2luZm8tPm5leHRdOworCWluZm8tPm5leHQrKzsKKwlpbmZvLT5uZXh0ICY9IGluZm8tPm1hc2s7CisJaW5mby0+YXZhaWwtLTsKKwkoKmRlc2MpLT5zdy5idWYuZGF0YSAmPSB+S1NfREVTQ19UWF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3R4X2J1ZihzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHUzMiBhZGRyKQoreworCWRlc2MtPnBody0+YWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3R4X2xlbihzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHUzMiBsZW4pCit7CisJZGVzYy0+c3cuYnVmLnR4LmJ1Zl9zaXplID0gbGVuOworfQorCisvKiBTd2l0Y2ggZnVuY3Rpb25zICovCisKKyNkZWZpbmUgVEFCTEVfUkVBRAkJCTB4MTAKKyNkZWZpbmUgVEFCTEVfU0VMX1NISUZUCQkJMgorCisjZGVmaW5lIEhXX0RFTEFZKGh3LCByZWcpCQkJXAorCWRvIHsJCQkJCVwKKwkJdTE2IGR1bW15OwkJCVwKKwkJZHVtbXkgPSByZWFkdyhody0+aW8gKyByZWcpOwlcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiBzd19yX3RhYmxlIC0gcmVhZCA0IGJ5dGVzIG9mIGRhdGEgZnJvbSBzd2l0Y2ggdGFibGUKKyAqIEBodzoJCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEB0YWJsZToJVGhlIHRhYmxlIHNlbGVjdG9yLgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSB0YWJsZSBlbnRyeS4KKyAqIEBkYXRhOglCdWZmZXIgdG8gc3RvcmUgdGhlIHJlYWQgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgNCBieXRlcyBvZiBkYXRhIGZyb20gdGhlIHRhYmxlIG9mIHRoZSBzd2l0Y2guCisgKiBIYXJkd2FyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB0byBtaW5pbWl6ZSBjb3JydXB0aW9uIG9mIHJlYWQgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgc3dfcl90YWJsZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHRhYmxlLCB1MTYgYWRkciwgdTMyICpkYXRhKQoreworCXUxNiBjdHJsX2FkZHI7CisJdWludCBpbnRlcnJ1cHQ7CisKKwljdHJsX2FkZHIgPSAoKCh0YWJsZSA8PCBUQUJMRV9TRUxfU0hJRlQpIHwgVEFCTEVfUkVBRCkgPDwgOCkgfCBhZGRyOworCisJaW50ZXJydXB0ID0gaHdfYmxvY2tfaW50cihodyk7CisKKwl3cml0ZXcoY3RybF9hZGRyLCBody0+aW8gKyBLUzg4NFhfSUFDUl9PRkZTRVQpOworCUhXX0RFTEFZKGh3LCBLUzg4NFhfSUFDUl9PRkZTRVQpOworCSpkYXRhID0gcmVhZGwoaHctPmlvICsgS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUKTsKKworCWh3X3Jlc3RvcmVfaW50cihodywgaW50ZXJydXB0KTsKK30KKworLyoqCisgKiBzd193X3RhYmxlXzY0IC0gd3JpdGUgOCBieXRlcyBvZiBkYXRhIHRvIHRoZSBzd2l0Y2ggdGFibGUKKyAqIEBodzoJCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEB0YWJsZToJVGhlIHRhYmxlIHNlbGVjdG9yLgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSB0YWJsZSBlbnRyeS4KKyAqIEBkYXRhX2hpOglUaGUgaGlnaCBwYXJ0IG9mIGRhdGEgdG8gYmUgd3JpdHRlbiAoYml0NjMgfiBiaXQzMikuCisgKiBAZGF0YV9sbzoJVGhlIGxvdyBwYXJ0IG9mIGRhdGEgdG8gYmUgd3JpdHRlbiAoYml0MzEgfiBiaXQwKS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd3JpdGVzIDggYnl0ZXMgb2YgZGF0YSB0byB0aGUgdGFibGUgb2YgdGhlIHN3aXRjaC4KKyAqIEhhcmR3YXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRvIG1pbmltaXplIGNvcnJ1cHRpb24gb2Ygd3JpdHRlbiBkYXRhLgorICovCitzdGF0aWMgdm9pZCBzd193X3RhYmxlXzY0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgdGFibGUsIHUxNiBhZGRyLCB1MzIgZGF0YV9oaSwKKwl1MzIgZGF0YV9sbykKK3sKKwl1MTYgY3RybF9hZGRyOworCXVpbnQgaW50ZXJydXB0OworCisJY3RybF9hZGRyID0gKCh0YWJsZSA8PCBUQUJMRV9TRUxfU0hJRlQpIDw8IDgpIHwgYWRkcjsKKworCWludGVycnVwdCA9IGh3X2Jsb2NrX2ludHIoaHcpOworCisJd3JpdGVsKGRhdGFfaGksIGh3LT5pbyArIEtTODg0WF9BQ0NfREFUQV80X09GRlNFVCk7CisJd3JpdGVsKGRhdGFfbG8sIGh3LT5pbyArIEtTODg0WF9BQ0NfREFUQV8wX09GRlNFVCk7CisKKwl3cml0ZXcoY3RybF9hZGRyLCBody0+aW8gKyBLUzg4NFhfSUFDUl9PRkZTRVQpOworCUhXX0RFTEFZKGh3LCBLUzg4NFhfSUFDUl9PRkZTRVQpOworCisJaHdfcmVzdG9yZV9pbnRyKGh3LCBpbnRlcnJ1cHQpOworfQorCisvKioKKyAqIHN3X3dfc3RhX21hY190YWJsZSAtIHdyaXRlIHRvIHRoZSBzdGF0aWMgTUFDIHRhYmxlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAYWRkcjoJVGhlIGFkZHJlc3Mgb2YgdGhlIHRhYmxlIGVudHJ5LgorICogQG1hY19hZGRyOglUaGUgTUFDIGFkZHJlc3MuCisgKiBAcG9ydHM6CVRoZSBwb3J0IG1lbWJlcnMuCisgKiBAb3ZlcnJpZGU6CVRoZSBmbGFnIHRvIG92ZXJyaWRlIHRoZSBwb3J0IHJlY2VpdmUvdHJhbnNtaXQgc2V0dGluZ3MuCisgKiBAdmFsaWQ6CVRoZSBmbGFnIHRvIGluZGljYXRlIGVudHJ5IGlzIHZhbGlkLgorICogQHVzZV9maWQ6CVRoZSBmbGFnIHRvIGluZGljYXRlIHRoZSBGSUQgaXMgdmFsaWQuCisgKiBAZmlkOglUaGUgRklEIHZhbHVlLgorICoKKyAqIFRoaXMgcm91dGluZSB3cml0ZXMgYW4gZW50cnkgb2YgdGhlIHN0YXRpYyBNQUMgdGFibGUgb2YgdGhlIHN3aXRjaC4gIEl0CisgKiBjYWxscyBzd193X3RhYmxlXzY0KCkgdG8gd3JpdGUgdGhlIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIHN3X3dfc3RhX21hY190YWJsZShzdHJ1Y3Qga3N6X2h3ICpodywgdTE2IGFkZHIsIHU4ICptYWNfYWRkciwKKwl1OCBwb3J0cywgaW50IG92ZXJyaWRlLCBpbnQgdmFsaWQsIGludCB1c2VfZmlkLCB1OCBmaWQpCit7CisJdTMyIGRhdGFfaGk7CisJdTMyIGRhdGFfbG87CisKKwlkYXRhX2xvID0gKCh1MzIpIG1hY19hZGRyWzJdIDw8IDI0KSB8CisJCSgodTMyKSBtYWNfYWRkclszXSA8PCAxNikgfAorCQkoKHUzMikgbWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKKwlkYXRhX2hpID0gKCh1MzIpIG1hY19hZGRyWzBdIDw8IDgpIHwgbWFjX2FkZHJbMV07CisJZGF0YV9oaSB8PSAodTMyKSBwb3J0cyA8PCBTVEFUSUNfTUFDX0ZXRF9QT1JUU19TSElGVDsKKworCWlmIChvdmVycmlkZSkKKwkJZGF0YV9oaSB8PSBTVEFUSUNfTUFDX1RBQkxFX09WRVJSSURFOworCWlmICh1c2VfZmlkKSB7CisJCWRhdGFfaGkgfD0gU1RBVElDX01BQ19UQUJMRV9VU0VfRklEOworCQlkYXRhX2hpIHw9ICh1MzIpIGZpZCA8PCBTVEFUSUNfTUFDX0ZJRF9TSElGVDsKKwl9CisJaWYgKHZhbGlkKQorCQlkYXRhX2hpIHw9IFNUQVRJQ19NQUNfVEFCTEVfVkFMSUQ7CisKKwlzd193X3RhYmxlXzY0KGh3LCBUQUJMRV9TVEFUSUNfTUFDLCBhZGRyLCBkYXRhX2hpLCBkYXRhX2xvKTsKK30KKworLyoqCisgKiBzd19yX3ZsYW5fdGFibGUgLSByZWFkIGZyb20gdGhlIFZMQU4gdGFibGUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBhZGRyOglUaGUgYWRkcmVzcyBvZiB0aGUgdGFibGUgZW50cnkuCisgKiBAdmlkOglCdWZmZXIgdG8gc3RvcmUgdGhlIFZJRC4KKyAqIEBmaWQ6CUJ1ZmZlciB0byBzdG9yZSB0aGUgVklELgorICogQG1lbWJlcjoJQnVmZmVyIHRvIHN0b3JlIHRoZSBwb3J0IG1lbWJlcnNoaXAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBhbiBlbnRyeSBvZiB0aGUgVkxBTiB0YWJsZSBvZiB0aGUgc3dpdGNoLiAgSXQgY2FsbHMKKyAqIHN3X3JfdGFibGUoKSB0byBnZXQgdGhlIGRhdGEuCisgKgorICogUmV0dXJuIDAgaWYgdGhlIGVudHJ5IGlzIHZhbGlkOyBvdGhlcndpc2UgLTEuCisgKi8KK3N0YXRpYyBpbnQgc3dfcl92bGFuX3RhYmxlKHN0cnVjdCBrc3pfaHcgKmh3LCB1MTYgYWRkciwgdTE2ICp2aWQsIHU4ICpmaWQsCisJdTggKm1lbWJlcikKK3sKKwl1MzIgZGF0YTsKKworCXN3X3JfdGFibGUoaHcsIFRBQkxFX1ZMQU4sIGFkZHIsICZkYXRhKTsKKwlpZiAoZGF0YSAmIFZMQU5fVEFCTEVfVkFMSUQpIHsKKwkJKnZpZCA9ICh1MTYpKGRhdGEgJiBWTEFOX1RBQkxFX1ZJRCk7CisJCSpmaWQgPSAodTgpKChkYXRhICYgVkxBTl9UQUJMRV9GSUQpID4+IFZMQU5fVEFCTEVfRklEX1NISUZUKTsKKwkJKm1lbWJlciA9ICh1OCkoKGRhdGEgJiBWTEFOX1RBQkxFX01FTUJFUlNISVApID4+CisJCQlWTEFOX1RBQkxFX01FTUJFUlNISVBfU0hJRlQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIHBvcnRfcl9taWJfY250IC0gcmVhZCBNSUIgY291bnRlcgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSBjb3VudGVyLgorICogQGNudDoJQnVmZmVyIHRvIHN0b3JlIHRoZSBjb3VudGVyLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhIE1JQiBjb3VudGVyIG9mIHRoZSBwb3J0LgorICogSGFyZHdhcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdG8gbWluaW1pemUgY29ycnVwdGlvbiBvZiByZWFkIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfcl9taWJfY250KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IGFkZHIsIHU2NCAqY250KQoreworCXUzMiBkYXRhOworCXUxNiBjdHJsX2FkZHI7CisJdWludCBpbnRlcnJ1cHQ7CisJaW50IHRpbWVvdXQ7CisKKwljdHJsX2FkZHIgPSBhZGRyICsgUE9SVF9DT1VOVEVSX05VTSAqIHBvcnQ7CisKKwlpbnRlcnJ1cHQgPSBod19ibG9ja19pbnRyKGh3KTsKKworCWN0cmxfYWRkciB8PSAoKChUQUJMRV9NSUIgPDwgVEFCTEVfU0VMX1NISUZUKSB8IFRBQkxFX1JFQUQpIDw8IDgpOworCXdyaXRldyhjdHJsX2FkZHIsIGh3LT5pbyArIEtTODg0WF9JQUNSX09GRlNFVCk7CisJSFdfREVMQVkoaHcsIEtTODg0WF9JQUNSX09GRlNFVCk7CisKKwlmb3IgKHRpbWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyB0aW1lb3V0LS0pIHsKKwkJZGF0YSA9IHJlYWRsKGh3LT5pbyArIEtTODg0WF9BQ0NfREFUQV8wX09GRlNFVCk7CisKKwkJaWYgKGRhdGEgJiBNSUJfQ09VTlRFUl9WQUxJRCkgeworCQkJaWYgKGRhdGEgJiBNSUJfQ09VTlRFUl9PVkVSRkxPVykKKwkJCQkqY250ICs9IE1JQl9DT1VOVEVSX1ZBTFVFICsgMTsKKwkJCSpjbnQgKz0gZGF0YSAmIE1JQl9DT1VOVEVSX1ZBTFVFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlod19yZXN0b3JlX2ludHIoaHcsIGludGVycnVwdCk7Cit9CisKKy8qKgorICogcG9ydF9yX21pYl9wa3QgLSByZWFkIGRyb3BwZWQgcGFja2V0IGNvdW50cworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQGNudDoJQnVmZmVyIHRvIHN0b3JlIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBkcm9wcGVkIHBhY2tldCBjb3VudHMuCisgKgorICogVGhpcyByb3V0aW5lIHJlYWRzIHRoZSBkcm9wcGVkIHBhY2tldCBjb3VudHMgb2YgdGhlIHBvcnQuCisgKiBIYXJkd2FyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB0byBtaW5pbWl6ZSBjb3JydXB0aW9uIG9mIHJlYWQgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9yX21pYl9wa3Qoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1MzIgKmxhc3QsIHU2NCAqY250KQoreworCXUzMiBjdXI7CisJdTMyIGRhdGE7CisJdTE2IGN0cmxfYWRkcjsKKwl1aW50IGludGVycnVwdDsKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IEtTX01JQl9QQUNLRVRfRFJPUFBFRF9SWF8wICsgcG9ydDsKKwlkbyB7CisJCWludGVycnVwdCA9IGh3X2Jsb2NrX2ludHIoaHcpOworCisJCWN0cmxfYWRkciA9ICh1MTYpIGluZGV4OworCQljdHJsX2FkZHIgfD0gKCgoVEFCTEVfTUlCIDw8IFRBQkxFX1NFTF9TSElGVCkgfCBUQUJMRV9SRUFEKQorCQkJPDwgOCk7CisJCXdyaXRldyhjdHJsX2FkZHIsIGh3LT5pbyArIEtTODg0WF9JQUNSX09GRlNFVCk7CisJCUhXX0RFTEFZKGh3LCBLUzg4NFhfSUFDUl9PRkZTRVQpOworCQlkYXRhID0gcmVhZGwoaHctPmlvICsgS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUKTsKKworCQlod19yZXN0b3JlX2ludHIoaHcsIGludGVycnVwdCk7CisKKwkJZGF0YSAmPSBNSUJfUEFDS0VUX0RST1BQRUQ7CisJCWN1ciA9ICpsYXN0OworCQlpZiAoZGF0YSAhPSBjdXIpIHsKKwkJCSpsYXN0ID0gZGF0YTsKKwkJCWlmIChkYXRhIDwgY3VyKQorCQkJCWRhdGEgKz0gTUlCX1BBQ0tFVF9EUk9QUEVEICsgMTsKKwkJCWRhdGEgLT0gY3VyOworCQkJKmNudCArPSBkYXRhOworCQl9CisJCSsrbGFzdDsKKwkJKytjbnQ7CisJCWluZGV4IC09IEtTX01JQl9QQUNLRVRfRFJPUFBFRF9UWCAtCisJCQlLU19NSUJfUEFDS0VUX0RST1BQRURfVFhfMCArIDE7CisJfSB3aGlsZSAoaW5kZXggPj0gS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1RYXzAgKyBwb3J0KTsKK30KKworLyoqCisgKiBwb3J0X3JfY250IC0gcmVhZCBNSUIgY291bnRlcnMgcGVyaW9kaWNhbGx5CisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVhZCB0aGUgY291bnRlcnMgb2YgdGhlIHBvcnQgcGVyaW9kaWNhbGx5IHRvIGF2b2lkCisgKiBjb3VudGVyIG92ZXJmbG93LiAgVGhlIGhhcmR3YXJlIHNob3VsZCBiZSBhY3F1aXJlZCBmaXJzdCBiZWZvcmUgY2FsbGluZyB0aGlzCisgKiByb3V0aW5lLgorICoKKyAqIFJldHVybiBub24temVybyB3aGVuIG5vdCBhbGwgY291bnRlcnMgbm90IHJlYWQuCisgKi8KK3N0YXRpYyBpbnQgcG9ydF9yX2NudChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJc3RydWN0IGtzel9wb3J0X21pYiAqbWliID0gJmh3LT5wb3J0X21pYltwb3J0XTsKKworCWlmIChtaWItPm1pYl9zdGFydCA8IFBPUlRfQ09VTlRFUl9OVU0pCisJCXdoaWxlIChtaWItPmNudF9wdHIgPCBQT1JUX0NPVU5URVJfTlVNKSB7CisJCQlwb3J0X3JfbWliX2NudChodywgcG9ydCwgbWliLT5jbnRfcHRyLAorCQkJCSZtaWItPmNvdW50ZXJbbWliLT5jbnRfcHRyXSk7CisJCQkrK21pYi0+Y250X3B0cjsKKwkJfQorCWlmIChody0+bWliX2NudCA+IFBPUlRfQ09VTlRFUl9OVU0pCisJCXBvcnRfcl9taWJfcGt0KGh3LCBwb3J0LCBtaWItPmRyb3BwZWQsCisJCQkmbWliLT5jb3VudGVyW1BPUlRfQ09VTlRFUl9OVU1dKTsKKwltaWItPmNudF9wdHIgPSAwOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBvcnRfaW5pdF9jbnQgLSBpbml0aWFsaXplIE1JQiBjb3VudGVyIHZhbHVlcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgYWxsIGNvdW50ZXJzIHRvIHplcm8gaWYgdGhlIGhhcmR3YXJlCisgKiBjYW5ub3QgZG8gaXQgYWZ0ZXIgcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfaW5pdF9jbnQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9ICZody0+cG9ydF9taWJbcG9ydF07CisKKwltaWItPmNudF9wdHIgPSAwOworCWlmIChtaWItPm1pYl9zdGFydCA8IFBPUlRfQ09VTlRFUl9OVU0pCisJCWRvIHsKKwkJCXBvcnRfcl9taWJfY250KGh3LCBwb3J0LCBtaWItPmNudF9wdHIsCisJCQkJJm1pYi0+Y291bnRlclttaWItPmNudF9wdHJdKTsKKwkJCSsrbWliLT5jbnRfcHRyOworCQl9IHdoaWxlIChtaWItPmNudF9wdHIgPCBQT1JUX0NPVU5URVJfTlVNKTsKKwlpZiAoaHctPm1pYl9jbnQgPiBQT1JUX0NPVU5URVJfTlVNKQorCQlwb3J0X3JfbWliX3BrdChodywgcG9ydCwgbWliLT5kcm9wcGVkLAorCQkJJm1pYi0+Y291bnRlcltQT1JUX0NPVU5URVJfTlVNXSk7CisJbWVtc2V0KCh2b2lkICopIG1pYi0+Y291bnRlciwgMCwgc2l6ZW9mKHU2NCkgKiBUT1RBTF9QT1JUX0NPVU5URVJfTlVNKTsKKwltaWItPmNudF9wdHIgPSAwOworfQorCisvKgorICogUG9ydCBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIHBvcnRfY2hrIC0gY2hlY2sgcG9ydCByZWdpc3RlciBiaXRzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAb2Zmc2V0OglUaGUgb2Zmc2V0IG9mIHRoZSBwb3J0IHJlZ2lzdGVyLgorICogQGJpdHM6CVRoZSBkYXRhIGJpdHMgdG8gY2hlY2suCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIGJpdHMgb2YgdGhlIHBvcnQgcmVnaXN0ZXIgYXJlIHNldAorICogb3Igbm90LgorICoKKyAqIFJldHVybiAwIGlmIHRoZSBiaXRzIGFyZSBub3Qgc2V0LgorICovCitzdGF0aWMgaW50IHBvcnRfY2hrKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTE2IGJpdHMpCit7CisJdTMyIGFkZHI7CisJdTE2IGRhdGE7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IG9mZnNldDsKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7CisJcmV0dXJuIChkYXRhICYgYml0cykgPT0gYml0czsKK30KKworLyoqCisgKiBwb3J0X2NmZyAtIHNldCBwb3J0IHJlZ2lzdGVyIGJpdHMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgb2YgdGhlIHBvcnQgcmVnaXN0ZXIuCisgKiBAYml0czoJVGhlIGRhdGEgYml0cyB0byBzZXQuCisgKiBAc2V0OglUaGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJpdHMgYXJlIHRvIGJlIHNldCBvciBub3QuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgb3IgcmVzZXRzIHRoZSBzcGVjaWZpZWQgYml0cyBvZiB0aGUgcG9ydCByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9jZmcoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgb2Zmc2V0LCB1MTYgYml0cywKKwlpbnQgc2V0KQoreworCXUzMiBhZGRyOworCXUxNiBkYXRhOworCisJUE9SVF9DVFJMX0FERFIocG9ydCwgYWRkcik7CisJYWRkciArPSBvZmZzZXQ7CisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIGFkZHIpOworCWlmIChzZXQpCisJCWRhdGEgfD0gYml0czsKKwllbHNlCisJCWRhdGEgJj0gfmJpdHM7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIGFkZHIpOworfQorCisvKioKKyAqIHBvcnRfY2hrX3NoaWZ0IC0gY2hlY2sgcG9ydCBiaXQKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgb2YgdGhlIHJlZ2lzdGVyLgorICogQHNoaWZ0OglOdW1iZXIgb2YgYml0cyB0byBzaGlmdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcG9ydCBpcyBzZXQgaW4gdGhlIHJlZ2lzdGVyIG9yCisgKiBub3QuCisgKgorICogUmV0dXJuIDAgaWYgdGhlIHBvcnQgaXMgbm90IHNldC4KKyAqLworc3RhdGljIGludCBwb3J0X2Noa19zaGlmdChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIHUzMiBhZGRyLCBpbnQgc2hpZnQpCit7CisJdTE2IGRhdGE7CisJdTE2IGJpdCA9IDEgPDwgcG9ydDsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBhZGRyKTsKKwlkYXRhID4+PSBzaGlmdDsKKwlyZXR1cm4gKGRhdGEgJiBiaXQpID09IGJpdDsKK30KKworLyoqCisgKiBwb3J0X2NmZ19zaGlmdCAtIHNldCBwb3J0IGJpdAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQG9mZnNldDoJVGhlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIuCisgKiBAc2hpZnQ6CU51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LgorICogQHNldDoJVGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwb3J0IGlzIHRvIGJlIHNldCBvciBub3QuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgb3IgcmVzZXRzIHRoZSBzcGVjaWZpZWQgcG9ydCBpbiB0aGUgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfY2ZnX3NoaWZ0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTMyIGFkZHIsIGludCBzaGlmdCwKKwlpbnQgc2V0KQoreworCXUxNiBkYXRhOworCXUxNiBiaXRzID0gMSA8PCBwb3J0OworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIGFkZHIpOworCWJpdHMgPDw9IHNoaWZ0OworCWlmIChzZXQpCisJCWRhdGEgfD0gYml0czsKKwllbHNlCisJCWRhdGEgJj0gfmJpdHM7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIGFkZHIpOworfQorCisvKioKKyAqIHBvcnRfcjggLSByZWFkIGJ5dGUgZnJvbSBwb3J0IHJlZ2lzdGVyCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAb2Zmc2V0OglUaGUgb2Zmc2V0IG9mIHRoZSBwb3J0IHJlZ2lzdGVyLgorICogQGRhdGE6CUJ1ZmZlciB0byBzdG9yZSB0aGUgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYSBieXRlIGZyb20gdGhlIHBvcnQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfcjgoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgb2Zmc2V0LCB1OCAqZGF0YSkKK3sKKwl1MzIgYWRkcjsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gb2Zmc2V0OworCSpkYXRhID0gcmVhZGIoaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogcG9ydF9yMTYgLSByZWFkIHdvcmQgZnJvbSBwb3J0IHJlZ2lzdGVyLgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQG9mZnNldDoJVGhlIG9mZnNldCBvZiB0aGUgcG9ydCByZWdpc3Rlci4KKyAqIEBkYXRhOglCdWZmZXIgdG8gc3RvcmUgdGhlIGRhdGEuCisgKgorICogVGhpcyByb3V0aW5lIHJlYWRzIGEgd29yZCBmcm9tIHRoZSBwb3J0IHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBwb3J0X3IxNihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIGludCBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwl1MzIgYWRkcjsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gb2Zmc2V0OworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogcG9ydF93MTYgLSB3cml0ZSB3b3JkIHRvIHBvcnQgcmVnaXN0ZXIuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAb2Zmc2V0OglUaGUgb2Zmc2V0IG9mIHRoZSBwb3J0IHJlZ2lzdGVyLgorICogQGRhdGE6CURhdGEgdG8gd3JpdGUuCisgKgorICogVGhpcyByb3V0aW5lIHdyaXRlcyBhIHdvcmQgdG8gdGhlIHBvcnQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfdzE2KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTE2IGRhdGEpCit7CisJdTMyIGFkZHI7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IG9mZnNldDsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogc3dfY2hrIC0gY2hlY2sgc3dpdGNoIHJlZ2lzdGVyIGJpdHMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBhZGRyOglUaGUgYWRkcmVzcyBvZiB0aGUgc3dpdGNoIHJlZ2lzdGVyLgorICogQGJpdHM6CVRoZSBkYXRhIGJpdHMgdG8gY2hlY2suCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIGJpdHMgb2YgdGhlIHN3aXRjaCByZWdpc3RlciBhcmUKKyAqIHNldCBvciBub3QuCisgKgorICogUmV0dXJuIDAgaWYgdGhlIGJpdHMgYXJlIG5vdCBzZXQuCisgKi8KK3N0YXRpYyBpbnQgc3dfY2hrKHN0cnVjdCBrc3pfaHcgKmh3LCB1MzIgYWRkciwgdTE2IGJpdHMpCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7CisJcmV0dXJuIChkYXRhICYgYml0cykgPT0gYml0czsKK30KKworLyoqCisgKiBzd19jZmcgLSBzZXQgc3dpdGNoIHJlZ2lzdGVyIGJpdHMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBhZGRyOglUaGUgYWRkcmVzcyBvZiB0aGUgc3dpdGNoIHJlZ2lzdGVyLgorICogQGJpdHM6CVRoZSBkYXRhIGJpdHMgdG8gc2V0LgorICogQHNldDoJVGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBiaXRzIGFyZSB0byBiZSBzZXQgb3Igbm90LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBvciByZXNldHMgdGhlIHNwZWNpZmllZCBiaXRzIG9mIHRoZSBzd2l0Y2ggcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2NmZyhzdHJ1Y3Qga3N6X2h3ICpodywgdTMyIGFkZHIsIHUxNiBiaXRzLCBpbnQgc2V0KQoreworCXUxNiBkYXRhOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIGFkZHIpOworCWlmIChzZXQpCisJCWRhdGEgfD0gYml0czsKKwllbHNlCisJCWRhdGEgJj0gfmJpdHM7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIGFkZHIpOworfQorCisvKiBCYW5kd2lkdGggKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2Jyb2FkX3N0b3JtKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9CUk9BRENBU1RfU1RPUk0sIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX2Jyb2FkX3N0b3JtKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfQlJPQURDQVNUX1NUT1JNKTsKK30KKworLyogRHJpdmVyIHNldCBzd2l0Y2ggYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gYXQgMTAlIHJhdGUuICovCisjZGVmaW5lIEJST0FEQ0FTVF9TVE9STV9QUk9URUNUSU9OX1JBVEUJMTAKKworLyogMTQ4LDgwMCBmcmFtZXMgKiA2NyBtcyAvIDEwMCAqLworI2RlZmluZSBCUk9BRENBU1RfU1RPUk1fVkFMVUUJCTk5NjkKKworLyoqCisgKiBzd19jZmdfYnJvYWRfc3Rvcm0gLSBjb25maWd1cmUgYnJvYWRjYXN0IHN0b3JtIHRocmVzaG9sZAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBlcmNlbnQ6CUJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgaW4gcGVyY2VudCBvZiB0cmFuc21pdCByYXRlLgorICoKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBicm9hZGNhc3Qgc3Rvcm0gdGhyZXNob2xkIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2NmZ19icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodywgdTggcGVyY2VudCkKK3sKKwl1MTYgZGF0YTsKKwl1MzIgdmFsdWUgPSAoKHUzMikgQlJPQURDQVNUX1NUT1JNX1ZBTFVFICogKHUzMikgcGVyY2VudCAvIDEwMCk7CisKKwlpZiAodmFsdWUgPiBCUk9BRENBU1RfU1RPUk1fUkFURSkKKwkJdmFsdWUgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfM19PRkZTRVQpOworCWRhdGEgJj0gfihCUk9BRENBU1RfU1RPUk1fUkFURV9MTyB8IEJST0FEQ0FTVF9TVE9STV9SQVRFX0hJKTsKKwlkYXRhIHw9ICgodmFsdWUgJiAweDAwRkYpIDw8IDgpIHwgKCh2YWx1ZSAmIDB4RkYwMCkgPj4gOCk7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVCk7Cit9CisKKy8qKgorICogc3dfZ2V0X2JvYXJkX3N0b3JtIC0gZ2V0IGJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwZXJjZW50OglCdWZmZXIgdG8gc3RvcmUgdGhlIGJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgcGVyY2VudGFnZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBicm9hZGNhc3Qgc3Rvcm0gdGhyZXNob2xkIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2dldF9icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodywgdTggKnBlcmNlbnQpCit7CisJaW50IG51bTsKKwl1MTYgZGF0YTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfM19PRkZTRVQpOworCW51bSA9IChkYXRhICYgQlJPQURDQVNUX1NUT1JNX1JBVEVfSEkpOworCW51bSA8PD0gODsKKwludW0gfD0gKGRhdGEgJiBCUk9BRENBU1RfU1RPUk1fUkFURV9MTykgPj4gODsKKwludW0gPSAobnVtICogMTAwICsgQlJPQURDQVNUX1NUT1JNX1ZBTFVFIC8gMikgLyBCUk9BRENBU1RfU1RPUk1fVkFMVUU7CisJKnBlcmNlbnQgPSAodTgpIG51bTsKK30KKworLyoqCisgKiBzd19kaXNfYnJvYWRfc3Rvcm0gLSBkaXNhYmxlIGJyb2Fkc3Rvcm0KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIGJyb2FkY2FzdCBzdG9ybSBsaW1pdCBmdW5jdGlvbiBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19kaXNfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXBvcnRfY2ZnX2Jyb2FkX3N0b3JtKGh3LCBwb3J0LCAwKTsKK30KKworLyoqCisgKiBzd19lbmFfYnJvYWRfc3Rvcm0gLSBlbmFibGUgYnJvYWRjYXN0IHN0b3JtCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKgorICogVGhpcyByb3V0aW5lIGVuYWJsZXMgdGhlIGJyb2FkY2FzdCBzdG9ybSBsaW1pdCBmdW5jdGlvbiBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19lbmFfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXN3X2NmZ19icm9hZF9zdG9ybShodywgaHctPmtzel9zd2l0Y2gtPmJyb2FkX3Blcik7CisJcG9ydF9jZmdfYnJvYWRfc3Rvcm0oaHcsIHBvcnQsIDEpOworfQorCisvKioKKyAqIHN3X2luaXRfYnJvYWRfc3Rvcm0gLSBpbml0aWFsaXplIGJyb2FkY2FzdCBzdG9ybQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgYnJvYWRjYXN0IHN0b3JtIGxpbWl0IGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2luaXRfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IHBvcnQ7CisKKwlody0+a3N6X3N3aXRjaC0+YnJvYWRfcGVyID0gMTsKKwlzd19jZmdfYnJvYWRfc3Rvcm0oaHcsIGh3LT5rc3pfc3dpdGNoLT5icm9hZF9wZXIpOworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9QT1JUX05VTTsgcG9ydCsrKQorCQlzd19kaXNfYnJvYWRfc3Rvcm0oaHcsIHBvcnQpOworCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzJfT0ZGU0VULCBNVUxUSUNBU1RfU1RPUk1fRElTQUJMRSwgMSk7Cit9CisKKy8qKgorICogaHdfY2ZnX2Jyb2FkX3N0b3JtIC0gY29uZmlndXJlIGJyb2FkY2FzdCBzdG9ybQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBlcmNlbnQ6CUJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgaW4gcGVyY2VudCBvZiB0cmFuc21pdCByYXRlLgorICoKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBicm9hZGNhc3Qgc3Rvcm0gdGhyZXNob2xkIG9mIHRoZSBzd2l0Y2guCisgKiBJdCBpcyBjYWxsZWQgYnkgdXNlciBmdW5jdGlvbnMuICBUaGUgaGFyZHdhcmUgc2hvdWxkIGJlIGFjcXVpcmVkIGZpcnN0LgorICovCitzdGF0aWMgdm9pZCBod19jZmdfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcsIHU4IHBlcmNlbnQpCit7CisJaWYgKHBlcmNlbnQgPiAxMDApCisJCXBlcmNlbnQgPSAxMDA7CisKKwlzd19jZmdfYnJvYWRfc3Rvcm0oaHcsIHBlcmNlbnQpOworCXN3X2dldF9icm9hZF9zdG9ybShodywgJnBlcmNlbnQpOworCWh3LT5rc3pfc3dpdGNoLT5icm9hZF9wZXIgPSBwZXJjZW50OworfQorCisvKioKKyAqIHN3X2Rpc19wcmlvX3JhdGUgLSBkaXNhYmxlIHN3aXRjaCBwcmlvcml0eSByYXRlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKgorICogVGhpcyByb3V0aW5lIGRpc2FibGVzIHRoZSBwcmlvcml0eSByYXRlIGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Rpc19wcmlvX3JhdGUoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXUzMiBhZGRyOworCisJUE9SVF9DVFJMX0FERFIocG9ydCwgYWRkcik7CisJYWRkciArPSBLUzg4NDJfUE9SVF9JTl9SQVRFX09GRlNFVDsKKwl3cml0ZWwoMCwgaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogc3dfaW5pdF9wcmlvX3JhdGUgLSBpbml0aWFsaXplIHN3aXRjaCBwcmlvaXJ0eSByYXRlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBwcmlvcml0eSByYXRlIGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2luaXRfcHJpb19yYXRlKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBwb3J0OworCWludCBwcmlvOworCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFRPVEFMX1BPUlRfTlVNOyBwb3J0KyspIHsKKwkJZm9yIChwcmlvID0gMDsgcHJpbyA8IFBSSU9fUVVFVUVTOyBwcmlvKyspIHsKKwkJCXN3LT5wb3J0X2NmZ1twb3J0XS5yeF9yYXRlW3ByaW9dID0KKwkJCXN3LT5wb3J0X2NmZ1twb3J0XS50eF9yYXRlW3ByaW9dID0gMDsKKwkJfQorCQlzd19kaXNfcHJpb19yYXRlKGh3LCBwb3J0KTsKKwl9Cit9CisKKy8qIENvbW11bmljYXRpb24gKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2JhY2tfcHJlc3N1cmUoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0JBQ0tfUFJFU1NVUkUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19mb3JjZV9mbG93X2N0cmwoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfYmFja19wcmVzc3VyZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0JBQ0tfUFJFU1NVUkUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19mb3JjZV9mbG93X2N0cmwoc3RydWN0IGtzel9odyAqaHcsIGludCBwKQoreworCXJldHVybiBwb3J0X2NoayhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9GT1JDRV9GTE9XX0NUUkwpOworfQorCisvKiBTcGFubmluZyBUcmVlICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19kaXNfbGVhcm4oc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0xFQVJOX0RJU0FCTEUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19yeChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfUlhfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfdHgoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX1RYX0VOQUJMRSwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X2NmZ19mYXN0X2FnaW5nKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgc2V0KQoreworCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULCBTV0lUQ0hfRkFTVF9BR0lORywgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X2ZsdXNoX2R5bl9tYWNfdGFibGUoc3RydWN0IGtzel9odyAqaHcpCit7CisJaWYgKCEoaHctPm92ZXJyaWRlcyAmIEZBU1RfQUdJTkcpKSB7CisJCXN3X2NmZ19mYXN0X2FnaW5nKGh3LCAxKTsKKwkJbWRlbGF5KDEpOworCQlzd19jZmdfZmFzdF9hZ2luZyhodywgMCk7CisJfQorfQorCisvKiBWTEFOICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19pbnNfdGFnKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IGluc2VydCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9JTlNFUlRfVEFHLCBpbnNlcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfcm12X3RhZyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCByZW1vdmUpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfUkVNT1ZFX1RBRywgcmVtb3ZlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfaW5zX3RhZyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX0lOU0VSVF9UQUcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19ybXZfdGFnKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfUkVNT1ZFX1RBRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19kaXNfbm9uX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfRElTQ0FSRF9OT05fVklELCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfaW5fZmlsdGVyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9JTkdSRVNTX1ZMQU5fRklMVEVSLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19kaXNfbm9uX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0RJU0NBUkRfTk9OX1ZJRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX2luX2ZpbHRlcihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0lOR1JFU1NfVkxBTl9GSUxURVIpOworfQorCisvKiBNaXJyb3JpbmcgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX21pcnJvcl9zbmlmZmVyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9NSVJST1JfU05JRkZFUiwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX21pcnJvcl9yeChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfTUlSUk9SX1JYLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfbWlycm9yX3R4KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9NSVJST1JfVFgsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd19jZmdfbWlycm9yX3J4X3R4KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgc2V0KQoreworCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzJfT0ZGU0VULCBTV0lUQ0hfTUlSUk9SX1JYX1RYLCBzZXQpOworfQorCitzdGF0aWMgdm9pZCBzd19pbml0X21pcnJvcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgcG9ydDsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9QT1JUX05VTTsgcG9ydCsrKSB7CisJCXBvcnRfY2ZnX21pcnJvcl9zbmlmZmVyKGh3LCBwb3J0LCAwKTsKKwkJcG9ydF9jZmdfbWlycm9yX3J4KGh3LCBwb3J0LCAwKTsKKwkJcG9ydF9jZmdfbWlycm9yX3R4KGh3LCBwb3J0LCAwKTsKKwl9CisJc3dfY2ZnX21pcnJvcl9yeF90eChodywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd19jZmdfdW5rX2RlZl9kZWxpdmVyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgc2V0KQoreworCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzdfT0ZGU0VULAorCQlTV0lUQ0hfVU5LX0RFRl9QT1JUX0VOQUJMRSwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dfY2ZnX2Noa191bmtfZGVmX2RlbGl2ZXIoc3RydWN0IGtzel9odyAqaHcpCit7CisJcmV0dXJuIHN3X2NoayhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzdfT0ZGU0VULAorCQlTV0lUQ0hfVU5LX0RFRl9QT1JUX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd19jZmdfdW5rX2RlZl9wb3J0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZ19zaGlmdChodywgcG9ydCwgS1M4ODQyX1NXSVRDSF9DVFJMXzdfT0ZGU0VULCAwLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd19jaGtfdW5rX2RlZl9wb3J0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwlyZXR1cm4gcG9ydF9jaGtfc2hpZnQoaHcsIHBvcnQsIEtTODg0Ml9TV0lUQ0hfQ1RSTF83X09GRlNFVCwgMCk7Cit9CisKKy8qIFByaW9yaXR5ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19kaWZmc2VydihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfRElGRlNFUlZfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfODAyXzFwKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF84MDJfMVBfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfcmVwbGFjZV92aWQoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX1VTRVJfUFJJT1JJVFlfQ0VJTElORywgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX3ByaW8oc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX1BSSU9fUVVFVUVfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19kaWZmc2VydihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX0RJRkZTRVJWX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrXzgwMl8xcChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUXzgwMl8xUF9FTkFCTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19yZXBsYWNlX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX1VTRVJfUFJJT1JJVFlfQ0VJTElORyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX3ByaW8oc3RydWN0IGtzel9odyAqaHcsIGludCBwKQoreworCXJldHVybiBwb3J0X2NoayhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9QUklPX1FVRVVFX0VOQUJMRSk7Cit9CisKKy8qKgorICogc3dfZGlzX2RpZmZzZXJ2IC0gZGlzYWJsZSBzd2l0Y2ggRGlmZlNlcnYgcHJpb3JpdHkKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIERpZmZTZXJ2IHByaW9yaXR5IGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Rpc19kaWZmc2VydihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJcG9ydF9jZmdfZGlmZnNlcnYoaHcsIHBvcnQsIDApOworfQorCisvKioKKyAqIHN3X2Rpc184MDJfMXAgLSBkaXNhYmxlIHN3aXRjaCA4MDIuMXAgcHJpb3JpdHkKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIDgwMi4xcCBwcmlvcml0eSBmdW5jdGlvbiBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19kaXNfODAyXzFwKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwlwb3J0X2NmZ184MDJfMXAoaHcsIHBvcnQsIDApOworfQorCisvKioKKyAqIHN3X2NmZ19yZXBsYWNlX251bGxfdmlkIC0KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBzZXQ6CVRoZSBmbGFnIHRvIGRpc2FibGUgb3IgZW5hYmxlLgorICoKKyAqLworc3RhdGljIHZvaWQgc3dfY2ZnX3JlcGxhY2VfbnVsbF92aWQoc3RydWN0IGtzel9odyAqaHcsIGludCBzZXQpCit7CisJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfM19PRkZTRVQsIFNXSVRDSF9SRVBMQUNFX05VTExfVklELCBzZXQpOworfQorCisvKioKKyAqIHN3X2NmZ19yZXBsYWNlX3ZpZCAtIGVuYWJsZSBzd2l0Y2ggODAyLjEwIHByaW9yaXR5IHJlLW1hcHBpbmcKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBzZXQ6CVRoZSBmbGFnIHRvIGRpc2FibGUgb3IgZW5hYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSBlbmFibGVzIHRoZSA4MDIuMXAgcHJpb3JpdHkgcmUtbWFwcGluZyBmdW5jdGlvbiBvZiB0aGUgc3dpdGNoLgorICogVGhhdCBhbGxvd3MgODAyLjFwIHByaW9yaXR5IGZpZWxkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIHBvcnQncyBkZWZhdWx0CisgKiB0YWcncyBwcmlvcml0eSB2YWx1ZSBpZiB0aGUgaW5ncmVzcyBwYWNrZXQncyA4MDIuMXAgcHJpb3JpdHkgaGFzIGEgaGlnaGVyCisgKiBwcmlvcml0eSB0aGFuIHBvcnQncyBkZWZhdWx0IHRhZydzIHByaW9yaXR5LgorICovCitzdGF0aWMgdm9pZCBzd19jZmdfcmVwbGFjZV92aWQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgc2V0KQoreworCXBvcnRfY2ZnX3JlcGxhY2VfdmlkKGh3LCBwb3J0LCBzZXQpOworfQorCisvKioKKyAqIHN3X2NmZ19wb3J0X2Jhc2VkIC0gY29uZmlndXJlIHN3aXRjaCBwb3J0IGJhc2VkIHByaW9yaXR5CisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAcHJpbzoJVGhlIHByaW9yaXR5IHRvIHNldC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY29uZmlndXJlcyB0aGUgcG9ydCBiYXNlZCBwcmlvcml0eSBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19jZmdfcG9ydF9iYXNlZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIHU4IHByaW8pCit7CisJdTE2IGRhdGE7CisKKwlpZiAocHJpbyA+IFBPUlRfQkFTRURfUFJJT1JJVFlfQkFTRSkKKwkJcHJpbyA9IFBPUlRfQkFTRURfUFJJT1JJVFlfQkFTRTsKKworCWh3LT5rc3pfc3dpdGNoLT5wb3J0X2NmZ1twb3J0XS5wb3J0X3ByaW8gPSBwcmlvOworCisJcG9ydF9yMTYoaHcsIHBvcnQsIEtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsICZkYXRhKTsKKwlkYXRhICY9IH5QT1JUX0JBU0VEX1BSSU9SSVRZX01BU0s7CisJZGF0YSB8PSBwcmlvIDw8IFBPUlRfQkFTRURfUFJJT1JJVFlfU0hJRlQ7CisJcG9ydF93MTYoaHcsIHBvcnQsIEtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIGRhdGEpOworfQorCisvKioKKyAqIHN3X2Rpc19tdWx0aV9xdWV1ZSAtIGRpc2FibGUgdHJhbnNtaXQgbXVsdGlwbGUgcXVldWVzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKgorICogVGhpcyByb3V0aW5lIGRpc2FibGVzIHRoZSB0cmFuc21pdCBtdWx0aXBsZSBxdWV1ZXMgc2VsZWN0aW9uIG9mIHRoZSBzd2l0Y2gKKyAqIHBvcnQuICBPbmx5IHNpbmdsZSB0cmFuc21pdCBxdWV1ZSBvbiB0aGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQgc3dfZGlzX211bHRpX3F1ZXVlKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwlwb3J0X2NmZ19wcmlvKGh3LCBwb3J0LCAwKTsKK30KKworLyoqCisgKiBzd19pbml0X3ByaW8gLSBpbml0aWFsaXplIHN3aXRjaCBwcmlvcml0eQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgc3dpdGNoIFFvUyBwcmlvcml0eSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2luaXRfcHJpbyhzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgcG9ydDsKKwlpbnQgdG9zOworCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCisJLyoKKwkgKiBJbml0IGFsbCB0aGUgODAyLjFwIHRhZyBwcmlvcml0eSB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBkaWZmZXJlbnQKKwkgKiBwcmlvcml0eSBxdWV1ZS4KKwkgKi8KKwlzdy0+cF84MDJfMXBbMF0gPSAwOworCXN3LT5wXzgwMl8xcFsxXSA9IDA7CisJc3ctPnBfODAyXzFwWzJdID0gMTsKKwlzdy0+cF84MDJfMXBbM10gPSAxOworCXN3LT5wXzgwMl8xcFs0XSA9IDI7CisJc3ctPnBfODAyXzFwWzVdID0gMjsKKwlzdy0+cF84MDJfMXBbNl0gPSAzOworCXN3LT5wXzgwMl8xcFs3XSA9IDM7CisKKwkvKgorCSAqIEluaXQgYWxsIHRoZSBEaWZmU2VydiBwcmlvcml0eSB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBwcmlvcml0eQorCSAqIHF1ZXVlIDAuCisJICovCisJZm9yICh0b3MgPSAwOyB0b3MgPCBESUZGU0VSVl9FTlRSSUVTOyB0b3MrKykKKwkJc3ctPmRpZmZzZXJ2W3Rvc10gPSAwOworCisJLyogQWxsIFFvUyBmdW5jdGlvbnMgZGlzYWJsZWQuICovCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFRPVEFMX1BPUlRfTlVNOyBwb3J0KyspIHsKKwkJc3dfZGlzX211bHRpX3F1ZXVlKGh3LCBwb3J0KTsKKwkJc3dfZGlzX2RpZmZzZXJ2KGh3LCBwb3J0KTsKKwkJc3dfZGlzXzgwMl8xcChodywgcG9ydCk7CisJCXN3X2NmZ19yZXBsYWNlX3ZpZChodywgcG9ydCwgMCk7CisKKwkJc3ctPnBvcnRfY2ZnW3BvcnRdLnBvcnRfcHJpbyA9IDA7CisJCXN3X2NmZ19wb3J0X2Jhc2VkKGh3LCBwb3J0LCBzdy0+cG9ydF9jZmdbcG9ydF0ucG9ydF9wcmlvKTsKKwl9CisJc3dfY2ZnX3JlcGxhY2VfbnVsbF92aWQoaHcsIDApOworfQorCisvKioKKyAqIHBvcnRfZ2V0X2RlZl92aWQgLSBnZXQgcG9ydCBkZWZhdWx0IFZJRC4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEB2aWQ6CUJ1ZmZlciB0byBzdG9yZSB0aGUgVklELgorICoKKyAqIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIGRlZmF1bHQgVklEIG9mIHRoZSBwb3J0LgorICovCitzdGF0aWMgdm9pZCBwb3J0X2dldF9kZWZfdmlkKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTE2ICp2aWQpCit7CisJdTMyIGFkZHI7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IEtTODg0Ml9QT1JUX0NUUkxfVklEX09GRlNFVDsKKwkqdmlkID0gcmVhZHcoaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogc3dfaW5pdF92bGFuIC0gaW5pdGlhbGl6ZSBzd2l0Y2ggVkxBTgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgVkxBTiBmdW5jdGlvbiBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19pbml0X3ZsYW4oc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IHBvcnQ7CisJaW50IGVudHJ5OworCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCisJLyogUmVhZCAxNiBWTEFOIGVudHJpZXMgZnJvbSBkZXZpY2UncyBWTEFOIHRhYmxlLiAqLworCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IFZMQU5fVEFCTEVfRU5UUklFUzsgZW50cnkrKykgeworCQlzd19yX3ZsYW5fdGFibGUoaHcsIGVudHJ5LAorCQkJJnN3LT52bGFuX3RhYmxlW2VudHJ5XS52aWQsCisJCQkmc3ctPnZsYW5fdGFibGVbZW50cnldLmZpZCwKKwkJCSZzdy0+dmxhbl90YWJsZVtlbnRyeV0ubWVtYmVyKTsKKwl9CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfUE9SVF9OVU07IHBvcnQrKykgeworCQlwb3J0X2dldF9kZWZfdmlkKGh3LCBwb3J0LCAmc3ctPnBvcnRfY2ZnW3BvcnRdLnZpZCk7CisJCXN3LT5wb3J0X2NmZ1twb3J0XS5tZW1iZXIgPSBQT1JUX01BU0s7CisJfQorfQorCisvKioKKyAqIHN3X2NmZ19wb3J0X2Jhc2VfdmxhbiAtIGNvbmZpZ3VyZSBwb3J0LWJhc2VkIFZMQU4gbWVtYmVyc2hpcAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQG1lbWJlcjoJVGhlIHBvcnQtYmFzZWQgVkxBTiBtZW1iZXJzaGlwLgorICoKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBwb3J0LWJhc2VkIFZMQU4gbWVtYmVyc2hpcCBvZiB0aGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQgc3dfY2ZnX3BvcnRfYmFzZV92bGFuKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTggbWVtYmVyKQoreworCXUzMiBhZGRyOworCXU4IGRhdGE7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IEtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQ7CisKKwlkYXRhID0gcmVhZGIoaHctPmlvICsgYWRkcik7CisJZGF0YSAmPSB+UE9SVF9WTEFOX01FTUJFUlNISVA7CisJZGF0YSB8PSAobWVtYmVyICYgUE9SVF9NQVNLKTsKKwl3cml0ZWIoZGF0YSwgaHctPmlvICsgYWRkcik7CisKKwlody0+a3N6X3N3aXRjaC0+cG9ydF9jZmdbcG9ydF0ubWVtYmVyID0gbWVtYmVyOworfQorCisvKioKKyAqIHN3X2dldF9hZGRyIC0gZ2V0IHRoZSBzd2l0Y2ggTUFDIGFkZHJlc3MuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAbWFjX2FkZHI6CUJ1ZmZlciB0byBzdG9yZSB0aGUgTUFDIGFkZHJlc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzd19nZXRfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodywgdTggKm1hY19hZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkgKz0gMikgeworCQltYWNfYWRkcltpXSA9IHJlYWRiKGh3LT5pbyArIEtTODg0Ml9NQUNfQUREUl8wX09GRlNFVCArIGkpOworCQltYWNfYWRkclsxICsgaV0gPSByZWFkYihody0+aW8gKyBLUzg4NDJfTUFDX0FERFJfMV9PRkZTRVQgKyBpKTsKKwl9Cit9CisKKy8qKgorICogc3dfc2V0X2FkZHIgLSBjb25maWd1cmUgc3dpdGNoIE1BQyBhZGRyZXNzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAbWFjX2FkZHI6CVRoZSBNQUMgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X3NldF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqbWFjX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CisJCXdyaXRlYihtYWNfYWRkcltpXSwgaHctPmlvICsgS1M4ODQyX01BQ19BRERSXzBfT0ZGU0VUICsgaSk7CisJCXdyaXRlYihtYWNfYWRkclsxICsgaV0sIGh3LT5pbyArIEtTODg0Ml9NQUNfQUREUl8xX09GRlNFVCArIGkpOworCX0KK30KKworLyoqCisgKiBzd19zZXRfZ2xvYmFsX2N0cmwgLSBzZXQgc3dpdGNoIGdsb2JhbCBjb250cm9sCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgdGhlIGdsb2JhbCBjb250cm9sIG9mIHRoZSBzd2l0Y2ggZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIHN3X3NldF9nbG9iYWxfY3RybChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl1MTYgZGF0YTsKKworCS8qIEVuYWJsZSBzd2l0Y2ggTUlJIGZsb3cgY29udHJvbC4gKi8KKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzNfT0ZGU0VUKTsKKwlkYXRhIHw9IFNXSVRDSF9GTE9XX0NUUkw7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVCk7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VUKTsKKworCS8qIEVuYWJsZSBhZ2dyZXNzaXZlIGJhY2sgb2ZmIGFsZ29yaXRobSBpbiBoYWxmIGR1cGxleCBtb2RlLiAqLworCWRhdGEgfD0gU1dJVENIX0FHR1JfQkFDS09GRjsKKworCS8qIEVuYWJsZSBhdXRvbWF0aWMgZmFzdCBhZ2luZyB3aGVuIGxpbmsgY2hhbmdlZCBkZXRlY3RlZC4gKi8KKwlkYXRhIHw9IFNXSVRDSF9BR0lOR19FTkFCTEU7CisJZGF0YSB8PSBTV0lUQ0hfTElOS19BVVRPX0FHSU5HOworCisJaWYgKGh3LT5vdmVycmlkZXMgJiBGQVNUX0FHSU5HKQorCQlkYXRhIHw9IFNXSVRDSF9GQVNUX0FHSU5HOworCWVsc2UKKwkJZGF0YSAmPSB+U1dJVENIX0ZBU1RfQUdJTkc7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCk7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzJfT0ZGU0VUKTsKKworCS8qIEVuYWJsZSBubyBleGNlc3NpdmUgY29sbGlzaW9uIGRyb3AuICovCisJZGF0YSB8PSBOT19FWENfQ09MTElTSU9OX0RST1A7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8yX09GRlNFVCk7Cit9CisKK2VudW0geworCVNUUF9TVEFURV9ESVNBQkxFRCA9IDAsCisJU1RQX1NUQVRFX0xJU1RFTklORywKKwlTVFBfU1RBVEVfTEVBUk5JTkcsCisJU1RQX1NUQVRFX0ZPUldBUkRJTkcsCisJU1RQX1NUQVRFX0JMT0NLRUQsCisJU1RQX1NUQVRFX1NJTVBMRQorfTsKKworLyoqCisgKiBwb3J0X3NldF9zdHBfc3RhdGUgLSBjb25maWd1cmUgcG9ydCBzcGFubmluZyB0cmVlIHN0YXRlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAc3RhdGU6CVRoZSBzcGFubmluZyB0cmVlIHN0YXRlLgorICoKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBzcGFubmluZyB0cmVlIHN0YXRlIG9mIHRoZSBwb3J0LgorICovCitzdGF0aWMgdm9pZCBwb3J0X3NldF9zdHBfc3RhdGUoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgc3RhdGUpCit7CisJdTE2IGRhdGE7CisKKwlwb3J0X3IxNihodywgcG9ydCwgS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgJmRhdGEpOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFNUUF9TVEFURV9ESVNBQkxFRDoKKwkJZGF0YSAmPSB+KFBPUlRfVFhfRU5BQkxFIHwgUE9SVF9SWF9FTkFCTEUpOworCQlkYXRhIHw9IFBPUlRfTEVBUk5fRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTVFBfU1RBVEVfTElTVEVOSU5HOgorLyoKKyAqIE5vIG5lZWQgdG8gdHVybiBvbiB0cmFuc21pdCBiZWNhdXNlIG9mIHBvcnQgZGlyZWN0IG1vZGUuCisgKiBUdXJuaW5nIG9uIHJlY2VpdmUgaXMgcmVxdWlyZWQgaWYgc3RhdGljIE1BQyB0YWJsZSBpcyBub3Qgc2V0dXAuCisgKi8KKwkJZGF0YSAmPSB+UE9SVF9UWF9FTkFCTEU7CisJCWRhdGEgfD0gUE9SVF9SWF9FTkFCTEU7CisJCWRhdGEgfD0gUE9SVF9MRUFSTl9ESVNBQkxFOworCQlicmVhazsKKwljYXNlIFNUUF9TVEFURV9MRUFSTklORzoKKwkJZGF0YSAmPSB+UE9SVF9UWF9FTkFCTEU7CisJCWRhdGEgfD0gUE9SVF9SWF9FTkFCTEU7CisJCWRhdGEgJj0gflBPUlRfTEVBUk5fRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTVFBfU1RBVEVfRk9SV0FSRElORzoKKwkJZGF0YSB8PSAoUE9SVF9UWF9FTkFCTEUgfCBQT1JUX1JYX0VOQUJMRSk7CisJCWRhdGEgJj0gflBPUlRfTEVBUk5fRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTVFBfU1RBVEVfQkxPQ0tFRDoKKy8qCisgKiBOZWVkIHRvIHNldHVwIHN0YXRpYyBNQUMgdGFibGUgd2l0aCBvdmVycmlkZSB0byBrZWVwIHJlY2VpdmluZyBCUERVCisgKiBtZXNzYWdlcy4gIFNlZSBzd19pbml0X3N0cCByb3V0aW5lLgorICovCisJCWRhdGEgJj0gfihQT1JUX1RYX0VOQUJMRSB8IFBPUlRfUlhfRU5BQkxFKTsKKwkJZGF0YSB8PSBQT1JUX0xFQVJOX0RJU0FCTEU7CisJCWJyZWFrOworCWNhc2UgU1RQX1NUQVRFX1NJTVBMRToKKwkJZGF0YSB8PSAoUE9SVF9UWF9FTkFCTEUgfCBQT1JUX1JYX0VOQUJMRSk7CisJCWRhdGEgfD0gUE9SVF9MRUFSTl9ESVNBQkxFOworCQlicmVhazsKKwl9CisJcG9ydF93MTYoaHcsIHBvcnQsIEtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIGRhdGEpOworCWh3LT5rc3pfc3dpdGNoLT5wb3J0X2NmZ1twb3J0XS5zdHBfc3RhdGUgPSBzdGF0ZTsKK30KKworI2RlZmluZSBTVFBfRU5UUlkJCQkwCisjZGVmaW5lIEJST0FEQ0FTVF9FTlRSWQkJCTEKKyNkZWZpbmUgQlJJREdFX0FERFJfRU5UUlkJCTIKKyNkZWZpbmUgSVBWNl9BRERSX0VOVFJZCQkJMworCisvKioKKyAqIHN3X2Nscl9zdGFfbWFjX3RhYmxlIC0gY2xlYXIgc3RhdGljIE1BQyB0YWJsZQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBjbGVhcnMgdGhlIHN0YXRpYyBNQUMgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Nscl9zdGFfbWFjX3RhYmxlKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXN0cnVjdCBrc3pfbWFjX3RhYmxlICplbnRyeTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTVEFUSUNfTUFDX1RBQkxFX0VOVFJJRVM7IGkrKykgeworCQllbnRyeSA9ICZody0+a3N6X3N3aXRjaC0+bWFjX3RhYmxlW2ldOworCQlzd193X3N0YV9tYWNfdGFibGUoaHcsIGksCisJCQllbnRyeS0+bWFjX2FkZHIsIGVudHJ5LT5wb3J0cywKKwkJCWVudHJ5LT5vdmVycmlkZSwgMCwKKwkJCWVudHJ5LT51c2VfZmlkLCBlbnRyeS0+ZmlkKTsKKwl9Cit9CisKKy8qKgorICogc3dfaW5pdF9zdHAgLSBpbml0aWFsaXplIHN3aXRjaCBzcGFubmluZyB0cmVlIHN1cHBvcnQKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgdGhlIHNwYW5uaW5nIHRyZWUgc3VwcG9ydCBvZiB0aGUgc3dpdGNoLgorICovCitzdGF0aWMgdm9pZCBzd19pbml0X3N0cChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlzdHJ1Y3Qga3N6X21hY190YWJsZSAqZW50cnk7CisKKwllbnRyeSA9ICZody0+a3N6X3N3aXRjaC0+bWFjX3RhYmxlW1NUUF9FTlRSWV07CisJZW50cnktPm1hY19hZGRyWzBdID0gMHgwMTsKKwllbnRyeS0+bWFjX2FkZHJbMV0gPSAweDgwOworCWVudHJ5LT5tYWNfYWRkclsyXSA9IDB4QzI7CisJZW50cnktPm1hY19hZGRyWzNdID0gMHgwMDsKKwllbnRyeS0+bWFjX2FkZHJbNF0gPSAweDAwOworCWVudHJ5LT5tYWNfYWRkcls1XSA9IDB4MDA7CisJZW50cnktPnBvcnRzID0gSE9TVF9NQVNLOworCWVudHJ5LT5vdmVycmlkZSA9IDE7CisJZW50cnktPnZhbGlkID0gMTsKKwlzd193X3N0YV9tYWNfdGFibGUoaHcsIFNUUF9FTlRSWSwKKwkJZW50cnktPm1hY19hZGRyLCBlbnRyeS0+cG9ydHMsCisJCWVudHJ5LT5vdmVycmlkZSwgZW50cnktPnZhbGlkLAorCQllbnRyeS0+dXNlX2ZpZCwgZW50cnktPmZpZCk7Cit9CisKKy8qKgorICogc3dfYmxvY2tfYWRkciAtIGJsb2NrIGNlcnRhaW4gcGFja2V0cyBmcm9tIHRoZSBob3N0IHBvcnQKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYmxvY2tzIGNlcnRhaW4gcGFja2V0cyBmcm9tIHJlYWNoaW5nIHRvIHRoZSBob3N0IHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Jsb2NrX2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJc3RydWN0IGtzel9tYWNfdGFibGUgKmVudHJ5OworCWludCBpOworCisJZm9yIChpID0gQlJPQURDQVNUX0VOVFJZOyBpIDw9IElQVjZfQUREUl9FTlRSWTsgaSsrKSB7CisJCWVudHJ5ID0gJmh3LT5rc3pfc3dpdGNoLT5tYWNfdGFibGVbaV07CisJCWVudHJ5LT52YWxpZCA9IDA7CisJCXN3X3dfc3RhX21hY190YWJsZShodywgaSwKKwkJCWVudHJ5LT5tYWNfYWRkciwgZW50cnktPnBvcnRzLAorCQkJZW50cnktPm92ZXJyaWRlLCBlbnRyeS0+dmFsaWQsCisJCQllbnRyeS0+dXNlX2ZpZCwgZW50cnktPmZpZCk7CisJfQorfQorCisjZGVmaW5lIFBIWV9MSU5LX1NVUFBPUlQJCVwKKwkoUEhZX0FVVE9fTkVHX0FTWU1fUEFVU0UgfAlcCisJUEhZX0FVVE9fTkVHX1NZTV9QQVVTRSB8CVwKKwlQSFlfQVVUT19ORUdfMTAwQlQ0IHwJCVwKKwlQSFlfQVVUT19ORUdfMTAwQlRYX0ZEIHwJXAorCVBIWV9BVVRPX05FR18xMDBCVFggfAkJXAorCVBIWV9BVVRPX05FR18xMEJUX0ZEIHwJCVwKKwlQSFlfQVVUT19ORUdfMTBCVCkKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JfcGh5X2N0cmwoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiAqZGF0YSkKK3sKKwkqZGF0YSA9IHJlYWR3KGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd19waHlfY3RybChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2IGRhdGEpCit7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcl9waHlfbGlua19zdGF0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgKmRhdGEpCit7CisJKmRhdGEgPSByZWFkdyhody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX1NUQVRVU19PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcl9waHlfYXV0b19uZWcoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiAqZGF0YSkKK3sKKwkqZGF0YSA9IHJlYWR3KGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfQVVUT19ORUdfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3dfcGh5X2F1dG9fbmVnKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgZGF0YSkKK3sKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9BVVRPX05FR19PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcl9waHlfcmVtX2NhcChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2ICpkYXRhKQoreworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9SRU1PVEVfQ0FQX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9jcm9zc292ZXIoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiAqZGF0YSkKK3sKKwkqZGF0YSA9IHJlYWR3KGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd19waHlfY3Jvc3NvdmVyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgZGF0YSkKK3sKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9wb2xhcml0eShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2ICpkYXRhKQoreworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9QSFlfQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd19waHlfcG9sYXJpdHkoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiBkYXRhKQoreworCXdyaXRldyhkYXRhLCBody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9saW5rX21kKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgKmRhdGEpCit7CisJKmRhdGEgPSByZWFkdyhody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX0xJTktfTURfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3dfcGh5X2xpbmtfbWQoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiBkYXRhKQoreworCXdyaXRldyhkYXRhLCBody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX0xJTktfTURfT0ZGU0VUKTsKK30KKworLyoqCisgKiBod19yX3BoeSAtIHJlYWQgZGF0YSBmcm9tIFBIWSByZWdpc3RlcgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVBvcnQgdG8gcmVhZC4KKyAqIEByZWc6CVBIWSByZWdpc3RlciB0byByZWFkLgorICogQHZhbDoJQnVmZmVyIHRvIHN0b3JlIHRoZSByZWFkIGRhdGEuCisgKgorICogVGhpcyByb3V0aW5lIHJlYWRzIGRhdGEgZnJvbSB0aGUgUEhZIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBod19yX3BoeShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiAqdmFsKQoreworCWludCBwaHk7CisKKwlwaHkgPSBLUzg4NFhfUEhZXzFfQ1RSTF9PRkZTRVQgKyBwb3J0ICogUEhZX0NUUkxfSU5URVJWQUwgKyByZWc7CisJKnZhbCA9IHJlYWR3KGh3LT5pbyArIHBoeSk7Cit9CisKKy8qKgorICogcG9ydF93X3BoeSAtIHdyaXRlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJUG9ydCB0byB3cml0ZS4KKyAqIEByZWc6CVBIWSByZWdpc3RlciB0byB3cml0ZS4KKyAqIEB2YWw6CVdvcmQgZGF0YSB0byB3cml0ZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd3JpdGVzIGRhdGEgdG8gdGhlIFBIWSByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgaHdfd19waHkoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKQoreworCWludCBwaHk7CisKKwlwaHkgPSBLUzg4NFhfUEhZXzFfQ1RSTF9PRkZTRVQgKyBwb3J0ICogUEhZX0NUUkxfSU5URVJWQUwgKyByZWc7CisJd3JpdGV3KHZhbCwgaHctPmlvICsgcGh5KTsKK30KKworLyoKKyAqIEVFUFJPTSBhY2Nlc3MgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBBVDkzQ19DT0RFCQkJMAorI2RlZmluZSBBVDkzQ19XUl9PRkYJCQkweDAwCisjZGVmaW5lIEFUOTNDX1dSX0FMTAkJCTB4MTAKKyNkZWZpbmUgQVQ5M0NfRVJfQUxMCQkJMHgyMAorI2RlZmluZSBBVDkzQ19XUl9PTgkJCTB4MzAKKworI2RlZmluZSBBVDkzQ19XUklURQkJCTEKKyNkZWZpbmUgQVQ5M0NfUkVBRAkJCTIKKyNkZWZpbmUgQVQ5M0NfRVJBU0UJCQkzCisKKyNkZWZpbmUgRUVQUk9NX0RFTEFZCQkJNAorCitzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9ncGlvKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCBncGlvKQoreworCXUxNiBkYXRhOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0WF9FRVBST01fQ1RSTF9PRkZTRVQpOworCWRhdGEgJj0gfmdwaW87CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0WF9FRVBST01fQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmFpc2VfZ3BpbyhzdHJ1Y3Qga3N6X2h3ICpodywgdTggZ3BpbykKK3sKKwl1MTYgZGF0YTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NFhfRUVQUk9NX0NUUkxfT0ZGU0VUKTsKKwlkYXRhIHw9IGdwaW87CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0WF9FRVBST01fQ1RSTF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHN0YXRlX2dwaW8oc3RydWN0IGtzel9odyAqaHcsIHU4IGdwaW8pCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODRYX0VFUFJPTV9DVFJMX09GRlNFVCk7CisJcmV0dXJuICh1OCkoZGF0YSAmIGdwaW8pOworfQorCitzdGF0aWMgdm9pZCBlZXByb21fY2xrKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9TRVJJQUxfQ0xPQ0spOworCXVkZWxheShFRVBST01fREVMQVkpOworCWRyb3BfZ3BpbyhodywgRUVQUk9NX1NFUklBTF9DTE9DSyk7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7Cit9CisKK3N0YXRpYyB1MTYgc3BpX3Ioc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisJdTE2IHRlbXAgPSAwOworCisJZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKSB7CisJCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9TRVJJQUxfQ0xPQ0spOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQl0ZW1wIHw9IChzdGF0ZV9ncGlvKGh3LCBFRVBST01fREFUQV9JTikpID8gMSA8PCBpIDogMDsKKworCQlkcm9wX2dwaW8oaHcsIEVFUFJPTV9TRVJJQUxfQ0xPQ0spOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKwl9CisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV93KHN0cnVjdCBrc3pfaHcgKmh3LCB1MTYgZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQkoZGF0YSAmICgweDAxIDw8IGkpKSA/IHJhaXNlX2dwaW8oaHcsIEVFUFJPTV9EQVRBX09VVCkgOgorCQkJZHJvcF9ncGlvKGh3LCBFRVBST01fREFUQV9PVVQpOworCQllZXByb21fY2xrKGh3KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9yZWcoc3RydWN0IGtzel9odyAqaHcsIHU4IGRhdGEsIHU4IHJlZykKK3sKKwlpbnQgaTsKKworCS8qIEluaXRpYWwgc3RhcnQgYml0ICovCisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKTsKKwllZXByb21fY2xrKGh3KTsKKworCS8qIEFUOTNDIG9wZXJhdGlvbiAqLworCWZvciAoaSA9IDE7IGkgPj0gMDsgaS0tKSB7CisJCShkYXRhICYgKDB4MDEgPDwgaSkpID8gcmFpc2VfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKSA6CisJCQlkcm9wX2dwaW8oaHcsIEVFUFJPTV9EQVRBX09VVCk7CisJCWVlcHJvbV9jbGsoaHcpOworCX0KKworCS8qIEFkZHJlc3MgbG9jYXRpb24gKi8KKwlmb3IgKGkgPSA1OyBpID49IDA7IGktLSkgeworCQkocmVnICYgKDB4MDEgPDwgaSkpID8gcmFpc2VfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKSA6CisJCQlkcm9wX2dwaW8oaHcsIEVFUFJPTV9EQVRBX09VVCk7CisJCWVlcHJvbV9jbGsoaHcpOworCX0KK30KKworI2RlZmluZSBFRVBST01fREFUQV9SRVNFUlZFRAkJMAorI2RlZmluZSBFRVBST01fREFUQV9NQUNfQUREUl8wCQkxCisjZGVmaW5lIEVFUFJPTV9EQVRBX01BQ19BRERSXzEJCTIKKyNkZWZpbmUgRUVQUk9NX0RBVEFfTUFDX0FERFJfMgkJMworI2RlZmluZSBFRVBST01fREFUQV9TVUJTWVNfSUQJCTQKKyNkZWZpbmUgRUVQUk9NX0RBVEFfU1VCU1lTX1ZFTl9JRAk1CisjZGVmaW5lIEVFUFJPTV9EQVRBX1BNX0NBUAkJNgorCisvKiBVc2VyIGRlZmluZWQgRUVQUk9NIGRhdGEgKi8KKyNkZWZpbmUgRUVQUk9NX0RBVEFfT1RIRVJfTUFDX0FERFIJOQorCisvKioKKyAqIGVlcHJvbV9yZWFkIC0gcmVhZCBmcm9tIEFUOTNDNDYgRUVQUk9NCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcmVnOglUaGUgcmVnaXN0ZXIgb2Zmc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSB3b3JkIGZyb20gdGhlIEFUOTNDNDYgRUVQUk9NLgorICoKKyAqIFJldHVybiB0aGUgZGF0YSB2YWx1ZS4KKyAqLworc3RhdGljIHUxNiBlZXByb21fcmVhZChzdHJ1Y3Qga3N6X2h3ICpodywgdTggcmVnKQoreworCXUxNiBkYXRhOworCisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX0FDQ0VTU19FTkFCTEUgfCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCisJc3BpX3JlZyhodywgQVQ5M0NfUkVBRCwgcmVnKTsKKwlkYXRhID0gc3BpX3IoaHcpOworCisJZHJvcF9ncGlvKGh3LCBFRVBST01fQUNDRVNTX0VOQUJMRSB8IEVFUFJPTV9DSElQX1NFTEVDVCk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBlZXByb21fd3JpdGUgLSB3cml0ZSB0byBBVDkzQzQ2IEVFUFJPTQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHJlZzoJVGhlIHJlZ2lzdGVyIG9mZnNldC4KKyAqIEBkYXRhOglUaGUgZGF0YSB2YWx1ZS4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSB3cml0ZXMgYSB3b3JkIHRvIHRoZSBBVDkzQzQ2IEVFUFJPTS4KKyAqLworc3RhdGljIHZvaWQgZWVwcm9tX3dyaXRlKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCByZWcsIHUxNiBkYXRhKQoreworCWludCB0aW1lb3V0OworCisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX0FDQ0VTU19FTkFCTEUgfCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCisJLyogRW5hYmxlIHdyaXRlLiAqLworCXNwaV9yZWcoaHcsIEFUOTNDX0NPREUsIEFUOTNDX1dSX09OKTsKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdWRlbGF5KDEpOworCisJLyogRXJhc2UgdGhlIHJlZ2lzdGVyLiAqLworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJc3BpX3JlZyhodywgQVQ5M0NfRVJBU0UsIHJlZyk7CisJZHJvcF9ncGlvKGh3LCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCXVkZWxheSgxKTsKKworCS8qIENoZWNrIG9wZXJhdGlvbiBjb21wbGV0ZS4gKi8KKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCXRpbWVvdXQgPSA4OworCW1kZWxheSgyKTsKKwlkbyB7CisJCW1kZWxheSgxKTsKKwl9IHdoaWxlICghc3RhdGVfZ3BpbyhodywgRUVQUk9NX0RBVEFfSU4pICYmIC0tdGltZW91dCk7CisJZHJvcF9ncGlvKGh3LCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCXVkZWxheSgxKTsKKworCS8qIFdyaXRlIHRoZSByZWdpc3Rlci4gKi8KKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCXNwaV9yZWcoaHcsIEFUOTNDX1dSSVRFLCByZWcpOworCXNwaV93KGh3LCBkYXRhKTsKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdWRlbGF5KDEpOworCisJLyogQ2hlY2sgb3BlcmF0aW9uIGNvbXBsZXRlLiAqLworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdGltZW91dCA9IDg7CisJbWRlbGF5KDIpOworCWRvIHsKKwkJbWRlbGF5KDEpOworCX0gd2hpbGUgKCFzdGF0ZV9ncGlvKGh3LCBFRVBST01fREFUQV9JTikgJiYgLS10aW1lb3V0KTsKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdWRlbGF5KDEpOworCisJLyogRGlzYWJsZSB3cml0ZS4gKi8KKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fQ0hJUF9TRUxFQ1QpOworCXNwaV9yZWcoaHcsIEFUOTNDX0NPREUsIEFUOTNDX1dSX09GRik7CisKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9BQ0NFU1NfRU5BQkxFIHwgRUVQUk9NX0NISVBfU0VMRUNUKTsKK30KKworLyoKKyAqIExpbmsgZGV0ZWN0aW9uIHJvdXRpbmVzCisgKi8KKworc3RhdGljIHUxNiBhZHZlcnRpc2VkX2Zsb3dfY3RybChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIHUxNiBjdHJsKQoreworCWN0cmwgJj0gflBPUlRfQVVUT19ORUdfU1lNX1BBVVNFOworCXN3aXRjaCAocG9ydC0+Zmxvd19jdHJsKSB7CisJY2FzZSBQSFlfRkxPV19DVFJMOgorCQljdHJsIHw9IFBPUlRfQVVUT19ORUdfU1lNX1BBVVNFOworCQlicmVhazsKKwkvKiBOb3Qgc3VwcG9ydGVkLiAqLworCWNhc2UgUEhZX1RYX09OTFk6CisJY2FzZSBQSFlfUlhfT05MWToKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGN0cmw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9mbG93X2N0cmwoc3RydWN0IGtzel9odyAqaHcsIGludCByeCwgaW50IHR4KQoreworCXUzMiByeF9jZmc7CisJdTMyIHR4X2NmZzsKKworCXJ4X2NmZyA9IGh3LT5yeF9jZmc7CisJdHhfY2ZnID0gaHctPnR4X2NmZzsKKwlpZiAocngpCisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX0ZMT1dfRU5BQkxFOworCWVsc2UKKwkJaHctPnJ4X2NmZyAmPSB+RE1BX1JYX0ZMT1dfRU5BQkxFOworCWlmICh0eCkKKwkJaHctPnR4X2NmZyB8PSBETUFfVFhfRkxPV19FTkFCTEU7CisJZWxzZQorCQlody0+dHhfY2ZnICY9IH5ETUFfVFhfRkxPV19FTkFCTEU7CisJaWYgKGh3LT5lbmFibGVkKSB7CisJCWlmIChyeF9jZmcgIT0gaHctPnJ4X2NmZykKKwkJCXdyaXRlbChody0+cnhfY2ZnLCBody0+aW8gKyBLU19ETUFfUlhfQ1RSTCk7CisJCWlmICh0eF9jZmcgIT0gaHctPnR4X2NmZykKKwkJCXdyaXRlbChody0+dHhfY2ZnLCBody0+aW8gKyBLU19ETUFfVFhfQ1RSTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfZmxvd19jdHJsKHN0cnVjdCBrc3pfaHcgKmh3LCBzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsCisJdTE2IGxvY2FsLCB1MTYgcmVtb3RlKQoreworCWludCByeDsKKwlpbnQgdHg7CisKKwlpZiAoaHctPm92ZXJyaWRlcyAmIFBBVVNFX0ZMT1dfQ1RSTCkKKwkJcmV0dXJuOworCisJcnggPSB0eCA9IDA7CisJaWYgKHBvcnQtPmZvcmNlX2xpbmspCisJCXJ4ID0gdHggPSAxOworCWlmIChyZW1vdGUgJiBQSFlfQVVUT19ORUdfU1lNX1BBVVNFKSB7CisJCWlmIChsb2NhbCAmIFBIWV9BVVRPX05FR19TWU1fUEFVU0UpIHsKKwkJCXJ4ID0gdHggPSAxOworCQl9IGVsc2UgaWYgKChyZW1vdGUgJiBQSFlfQVVUT19ORUdfQVNZTV9QQVVTRSkgJiYKKwkJCQkobG9jYWwgJiBQSFlfQVVUT19ORUdfUEFVU0UpID09CisJCQkJUEhZX0FVVE9fTkVHX0FTWU1fUEFVU0UpIHsKKwkJCXR4ID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocmVtb3RlICYgUEhZX0FVVE9fTkVHX0FTWU1fUEFVU0UpIHsKKwkJaWYgKChsb2NhbCAmIFBIWV9BVVRPX05FR19QQVVTRSkgPT0gUEhZX0FVVE9fTkVHX1BBVVNFKQorCQkJcnggPSAxOworCX0KKwlpZiAoIWh3LT5rc3pfc3dpdGNoKQorCQlzZXRfZmxvd19jdHJsKGh3LCByeCwgdHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfY2hhbmdlKHN0cnVjdCBrc3pfaHcgKmh3LCBzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsCisJc3RydWN0IGtzel9wb3J0X2luZm8gKmluZm8sIHUxNiBsaW5rX3N0YXR1cykKK3sKKwlpZiAoKGh3LT5mZWF0dXJlcyAmIEhBTEZfRFVQTEVYX1NJR05BTF9CVUcpICYmCisJCQkhKGh3LT5vdmVycmlkZXMgJiBQQVVTRV9GTE9XX0NUUkwpKSB7CisJCXUzMiBjZmcgPSBody0+dHhfY2ZnOworCisJCS8qIERpc2FibGUgZmxvdyBjb250cm9sIGluIHRoZSBoYWxmIGR1cGxleCBtb2RlLiAqLworCQlpZiAoMSA9PSBpbmZvLT5kdXBsZXgpCisJCQlody0+dHhfY2ZnICY9IH5ETUFfVFhfRkxPV19FTkFCTEU7CisJCWlmIChody0+ZW5hYmxlZCAmJiBjZmcgIT0gaHctPnR4X2NmZykKKwkJCXdyaXRlbChody0+dHhfY2ZnLCBody0+aW8gKyBLU19ETUFfVFhfQ1RSTCk7CisJfQorfQorCisvKioKKyAqIHBvcnRfZ2V0X2xpbmtfc3BlZWQgLSBnZXQgY3VycmVudCBsaW5rIHN0YXR1cworICogQHBvcnQ6IAlUaGUgcG9ydCBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgUEhZIHJlZ2lzdGVycyB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgbGluayBzdGF0dXMgb2YgdGhlCisgKiBzd2l0Y2ggcG9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfZ2V0X2xpbmtfc3BlZWQoc3RydWN0IGtzel9wb3J0ICpwb3J0KQoreworCXVpbnQgaW50ZXJydXB0OworCXN0cnVjdCBrc3pfcG9ydF9pbmZvICppbmZvOworCXN0cnVjdCBrc3pfcG9ydF9pbmZvICpsaW5rZWQgPSBOVUxMOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gcG9ydC0+aHc7CisJdTE2IGRhdGE7CisJdTE2IHN0YXR1czsKKwl1OCBsb2NhbDsKKwl1OCByZW1vdGU7CisJaW50IGk7CisJaW50IHA7CisJaW50IGNoYW5nZSA9IDA7CisKKwlpbnRlcnJ1cHQgPSBod19ibG9ja19pbnRyKGh3KTsKKworCWZvciAoaSA9IDAsIHAgPSBwb3J0LT5maXJzdF9wb3J0OyBpIDwgcG9ydC0+cG9ydF9jbnQ7IGkrKywgcCsrKSB7CisJCWluZm8gPSAmaHctPnBvcnRfaW5mb1twXTsKKwkJcG9ydF9yMTYoaHcsIHAsIEtTODg0WF9QT1JUX0NUUkxfNF9PRkZTRVQsICZkYXRhKTsKKwkJcG9ydF9yMTYoaHcsIHAsIEtTODg0WF9QT1JUX1NUQVRVU19PRkZTRVQsICZzdGF0dXMpOworCisJCS8qCisJCSAqIExpbmsgc3RhdHVzIGlzIGNoYW5naW5nIGFsbCB0aGUgdGltZSBldmVuIHdoZW4gdGhlcmUgaXMgbm8KKwkJICogY2FibGUgY29ubmVjdGlvbiEKKwkJICovCisJCXJlbW90ZSA9IHN0YXR1cyAmIChQT1JUX0FVVE9fTkVHX0NPTVBMRVRFIHwKKwkJCVBPUlRfU1RBVFVTX0xJTktfR09PRCk7CisJCWxvY2FsID0gKHU4KSBkYXRhOworCisJCS8qIE5vIGNoYW5nZSB0byBzdGF0dXMuICovCisJCWlmIChsb2NhbCA9PSBpbmZvLT5hZHZlcnRpc2VkICYmIHJlbW90ZSA9PSBpbmZvLT5wYXJ0bmVyKQorCQkJY29udGludWU7CisKKwkJaW5mby0+YWR2ZXJ0aXNlZCA9IGxvY2FsOworCQlpbmZvLT5wYXJ0bmVyID0gcmVtb3RlOworCQlpZiAoc3RhdHVzICYgUE9SVF9TVEFUVVNfTElOS19HT09EKSB7CisKKwkJCS8qIFJlbWVtYmVyIHRoZSBmaXJzdCBsaW5rZWQgcG9ydC4gKi8KKwkJCWlmICghbGlua2VkKQorCQkJCWxpbmtlZCA9IGluZm87CisKKwkJCWluZm8tPnR4X3JhdGUgPSAxMCAqIFRYX1JBVEVfVU5JVDsKKwkJCWlmIChzdGF0dXMgJiBQT1JUX1NUQVRVU19TUEVFRF8xMDBNQklUKQorCQkJCWluZm8tPnR4X3JhdGUgPSAxMDAgKiBUWF9SQVRFX1VOSVQ7CisKKwkJCWluZm8tPmR1cGxleCA9IDE7CisJCQlpZiAoc3RhdHVzICYgUE9SVF9TVEFUVVNfRlVMTF9EVVBMRVgpCisJCQkJaW5mby0+ZHVwbGV4ID0gMjsKKworCQkJaWYgKG1lZGlhX2Nvbm5lY3RlZCAhPSBpbmZvLT5zdGF0ZSkgeworCQkJCWh3X3JfcGh5KGh3LCBwLCBLUzg4NFhfUEhZX0FVVE9fTkVHX09GRlNFVCwKKwkJCQkJJmRhdGEpOworCQkJCWh3X3JfcGh5KGh3LCBwLCBLUzg4NFhfUEhZX1JFTU9URV9DQVBfT0ZGU0VULAorCQkJCQkmc3RhdHVzKTsKKwkJCQlkZXRlcm1pbmVfZmxvd19jdHJsKGh3LCBwb3J0LCBkYXRhLCBzdGF0dXMpOworCQkJCWlmIChody0+a3N6X3N3aXRjaCkgeworCQkJCQlwb3J0X2NmZ19iYWNrX3ByZXNzdXJlKGh3LCBwLAorCQkJCQkJKDEgPT0gaW5mby0+ZHVwbGV4KSk7CisJCQkJfQorCQkJCWNoYW5nZSB8PSAxIDw8IGk7CisJCQkJcG9ydF9jZmdfY2hhbmdlKGh3LCBwb3J0LCBpbmZvLCBzdGF0dXMpOworCQkJfQorCQkJaW5mby0+c3RhdGUgPSBtZWRpYV9jb25uZWN0ZWQ7CisJCX0gZWxzZSB7CisJCQlpZiAobWVkaWFfZGlzY29ubmVjdGVkICE9IGluZm8tPnN0YXRlKSB7CisJCQkJY2hhbmdlIHw9IDEgPDwgaTsKKworCQkJCS8qIEluZGljYXRlIHRoZSBsaW5rIGp1c3QgZ29lcyBkb3duLiAqLworCQkJCWh3LT5wb3J0X21pYltwXS5saW5rX2Rvd24gPSAxOworCQkJfQorCQkJaW5mby0+c3RhdGUgPSBtZWRpYV9kaXNjb25uZWN0ZWQ7CisJCX0KKwkJaHctPnBvcnRfbWliW3BdLnN0YXRlID0gKHU4KSBpbmZvLT5zdGF0ZTsKKwl9CisKKwlpZiAobGlua2VkICYmIG1lZGlhX2Rpc2Nvbm5lY3RlZCA9PSBwb3J0LT5saW5rZWQtPnN0YXRlKQorCQlwb3J0LT5saW5rZWQgPSBsaW5rZWQ7CisKKwlod19yZXN0b3JlX2ludHIoaHcsIGludGVycnVwdCk7Cit9CisKKyNkZWZpbmUgUEhZX1JFU0VUX1RJTUVPVVQJCTEwCisKKy8qKgorICogcG9ydF9zZXRfbGlua19zcGVlZCAtIHNldCBwb3J0IHNwZWVkCisgKiBAcG9ydDogCVRoZSBwb3J0IGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZXRzIHRoZSBsaW5rIHNwZWVkIG9mIHRoZSBzd2l0Y2ggcG9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfc2V0X2xpbmtfc3BlZWQoc3RydWN0IGtzel9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBrc3pfcG9ydF9pbmZvICppbmZvOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gcG9ydC0+aHc7CisJdTE2IGRhdGE7CisJdTE2IGNmZzsKKwl1OCBzdGF0dXM7CisJaW50IGk7CisJaW50IHA7CisKKwlmb3IgKGkgPSAwLCBwID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPnBvcnRfY250OyBpKyssIHArKykgeworCQlpbmZvID0gJmh3LT5wb3J0X2luZm9bcF07CisKKwkJcG9ydF9yMTYoaHcsIHAsIEtTODg0WF9QT1JUX0NUUkxfNF9PRkZTRVQsICZkYXRhKTsKKwkJcG9ydF9yOChodywgcCwgS1M4ODRYX1BPUlRfU1RBVFVTX09GRlNFVCwgJnN0YXR1cyk7CisKKwkJY2ZnID0gMDsKKwkJaWYgKHN0YXR1cyAmIFBPUlRfU1RBVFVTX0xJTktfR09PRCkKKwkJCWNmZyA9IGRhdGE7CisKKwkJZGF0YSB8PSBQT1JUX0FVVE9fTkVHX0VOQUJMRTsKKwkJZGF0YSA9IGFkdmVydGlzZWRfZmxvd19jdHJsKHBvcnQsIGRhdGEpOworCisJCWRhdGEgfD0gUE9SVF9BVVRPX05FR18xMDBCVFhfRkQgfCBQT1JUX0FVVE9fTkVHXzEwMEJUWCB8CisJCQlQT1JUX0FVVE9fTkVHXzEwQlRfRkQgfCBQT1JUX0FVVE9fTkVHXzEwQlQ7CisKKwkJLyogQ2hlY2sgaWYgbWFudWFsIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLiAqLworCQlpZiAocG9ydC0+c3BlZWQgfHwgcG9ydC0+ZHVwbGV4KSB7CisJCQlpZiAoMTAgPT0gcG9ydC0+c3BlZWQpCisJCQkJZGF0YSAmPSB+KFBPUlRfQVVUT19ORUdfMTAwQlRYX0ZEIHwKKwkJCQkJUE9SVF9BVVRPX05FR18xMDBCVFgpOworCQkJZWxzZSBpZiAoMTAwID09IHBvcnQtPnNwZWVkKQorCQkJCWRhdGEgJj0gfihQT1JUX0FVVE9fTkVHXzEwQlRfRkQgfAorCQkJCQlQT1JUX0FVVE9fTkVHXzEwQlQpOworCQkJaWYgKDEgPT0gcG9ydC0+ZHVwbGV4KQorCQkJCWRhdGEgJj0gfihQT1JUX0FVVE9fTkVHXzEwMEJUWF9GRCB8CisJCQkJCVBPUlRfQVVUT19ORUdfMTBCVF9GRCk7CisJCQllbHNlIGlmICgyID09IHBvcnQtPmR1cGxleCkKKwkJCQlkYXRhICY9IH4oUE9SVF9BVVRPX05FR18xMDBCVFggfAorCQkJCQlQT1JUX0FVVE9fTkVHXzEwQlQpOworCQl9CisJCWlmIChkYXRhICE9IGNmZykgeworCQkJZGF0YSB8PSBQT1JUX0FVVE9fTkVHX1JFU1RBUlQ7CisJCQlwb3J0X3cxNihodywgcCwgS1M4ODRYX1BPUlRfQ1RSTF80X09GRlNFVCwgZGF0YSk7CisJCX0KKwl9Cit9CisKKy8qKgorICogcG9ydF9mb3JjZV9saW5rX3NwZWVkIC0gZm9yY2UgcG9ydCBzcGVlZAorICogQHBvcnQ6IAlUaGUgcG9ydCBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZm9yY2VzIHRoZSBsaW5rIHNwZWVkIG9mIHRoZSBzd2l0Y2ggcG9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfZm9yY2VfbGlua19zcGVlZChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwl1MTYgZGF0YTsKKwlpbnQgaTsKKwlpbnQgcGh5OworCWludCBwOworCisJZm9yIChpID0gMCwgcCA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5wb3J0X2NudDsgaSsrLCBwKyspIHsKKwkJcGh5ID0gS1M4ODRYX1BIWV8xX0NUUkxfT0ZGU0VUICsgcCAqIFBIWV9DVFJMX0lOVEVSVkFMOworCQlod19yX3BoeV9jdHJsKGh3LCBwaHksICZkYXRhKTsKKworCQlkYXRhICY9IH5QSFlfQVVUT19ORUdfRU5BQkxFOworCisJCWlmICgxMCA9PSBwb3J0LT5zcGVlZCkKKwkJCWRhdGEgJj0gflBIWV9TUEVFRF8xMDBNQklUOworCQllbHNlIGlmICgxMDAgPT0gcG9ydC0+c3BlZWQpCisJCQlkYXRhIHw9IFBIWV9TUEVFRF8xMDBNQklUOworCQlpZiAoMSA9PSBwb3J0LT5kdXBsZXgpCisJCQlkYXRhICY9IH5QSFlfRlVMTF9EVVBMRVg7CisJCWVsc2UgaWYgKDIgPT0gcG9ydC0+ZHVwbGV4KQorCQkJZGF0YSB8PSBQSFlfRlVMTF9EVVBMRVg7CisJCWh3X3dfcGh5X2N0cmwoaHcsIHBoeSwgZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwb3J0X3NldF9wb3dlcl9zYXZpbmcoc3RydWN0IGtzel9wb3J0ICpwb3J0LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBrc3pfaHcgKmh3ID0gcG9ydC0+aHc7CisJaW50IGk7CisJaW50IHA7CisKKwlmb3IgKGkgPSAwLCBwID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPnBvcnRfY250OyBpKyssIHArKykKKwkJcG9ydF9jZmcoaHcsIHAsCisJCQlLUzg4NFhfUE9SVF9DVFJMXzRfT0ZGU0VULCBQT1JUX1BPV0VSX0RPV04sIGVuYWJsZSk7Cit9CisKKy8qCisgKiBLU1o4ODQxIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBod19jaGtfd29sX3BtZV9zdGF0dXMgLSBjaGVjayBQTUVOIHBpbgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBQTUVOIHBpbiBpcyBhc3NlcnRlZC4KKyAqCisgKiBSZXR1cm4gMSBpZiBQTUVOIHBpbiBpcyBhc3NlcnRlZDsgb3RoZXJ3aXNlLCAwLgorICovCitzdGF0aWMgaW50IGh3X2Noa193b2xfcG1lX3N0YXR1cyhzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkZXZfaW5mbywgaHcpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHdfcHJpdi0+cGRldjsKKwl1MTYgZGF0YTsKKworCWlmICghcGRldi0+cG1fY2FwKQorCQlyZXR1cm4gMDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJmRhdGEpOworCXJldHVybiAoZGF0YSAmIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpID09IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7Cit9CisKKy8qKgorICogaHdfY2xyX3dvbF9wbWVfc3RhdHVzIC0gY2xlYXIgUE1FTiBwaW4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjbGVhciBQTUVfU3RhdHVzIHRvIGRlYXNzZXJ0IFBNRU4gcGluLgorICovCitzdGF0aWMgdm9pZCBod19jbHJfd29sX3BtZV9zdGF0dXMoc3RydWN0IGtzel9odyAqaHcpCit7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZGV2X2luZm8sIGh3KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3X3ByaXYtPnBkZXY7CisJdTE2IGRhdGE7CisKKwlpZiAoIXBkZXYtPnBtX2NhcCkKKwkJcmV0dXJuOworCisJLyogQ2xlYXIgUE1FX1N0YXR1cyB0byBkZWFzc2VydCBQTUVOIHBpbi4gKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJmRhdGEpOworCWRhdGEgfD0gUENJX1BNX0NUUkxfUE1FX1NUQVRVUzsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsIGRhdGEpOworfQorCisvKioKKyAqIGh3X2NmZ193b2xfcG1lIC0gZW5hYmxlIG9yIGRpc2FibGUgV2FrZS1vbi1MQU4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBzZXQ6CVRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBXYWtlLW9uLUxBTi4KKyAqLworc3RhdGljIHZvaWQgaHdfY2ZnX3dvbF9wbWUoc3RydWN0IGtzel9odyAqaHcsIGludCBzZXQpCit7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZGV2X2luZm8sIGh3KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3X3ByaXYtPnBkZXY7CisJdTE2IGRhdGE7CisKKwlpZiAoIXBkZXYtPnBtX2NhcCkKKwkJcmV0dXJuOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmZGF0YSk7CisJZGF0YSAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKKwlpZiAoc2V0KQorCQlkYXRhIHw9IFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUgfCBQQ0lfRDNob3Q7CisJZWxzZQorCQlkYXRhICY9IH5QQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgZGF0YSk7Cit9CisKKy8qKgorICogaHdfY2ZnX3dvbCAtIGNvbmZpZ3VyZSBXYWtlLW9uLUxBTiBmZWF0dXJlcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGZyYW1lOglUaGUgcGF0dGVybiBmcmFtZSBiaXQuCisgKiBAc2V0OglUaGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgY2VydGFpbiBXYWtlLW9uLUxBTiBmZWF0dXJlcy4KKyAqLworc3RhdGljIHZvaWQgaHdfY2ZnX3dvbChzdHJ1Y3Qga3N6X2h3ICpodywgdTE2IGZyYW1lLCBpbnQgc2V0KQoreworCXUxNiBkYXRhOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0MV9XT0xfQ1RSTF9PRkZTRVQpOworCWlmIChzZXQpCisJCWRhdGEgfD0gZnJhbWU7CisJZWxzZQorCQlkYXRhICY9IH5mcmFtZTsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQxX1dPTF9DVFJMX09GRlNFVCk7Cit9CisKKy8qKgorICogaHdfc2V0X3dvbF9mcmFtZSAtIHByb2dyYW0gV2FrZS1vbi1MQU4gcGF0dGVybgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGk6CQlUaGUgZnJhbWUgaW5kZXguCisgKiBAbWFza19zaXplOglUaGUgc2l6ZSBvZiB0aGUgbWFzay4KKyAqIEBtYXNrOglNYXNrIHRvIGlnbm9yZSBjZXJ0YWluIGJ5dGVzIGluIHRoZSBwYXR0ZXJuLgorICogQGZyYW1lX3NpemU6CVRoZSBzaXplIG9mIHRoZSBmcmFtZS4KKyAqIEBwYXR0ZXJuOglUaGUgZnJhbWUgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBwcm9ncmFtIFdha2Utb24tTEFOIHBhdHRlcm4uCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldF93b2xfZnJhbWUoc3RydWN0IGtzel9odyAqaHcsIGludCBpLCB1aW50IG1hc2tfc2l6ZSwKKwl1OCAqbWFzaywgdWludCBmcmFtZV9zaXplLCB1OCAqcGF0dGVybikKK3sKKwlpbnQgYml0czsKKwlpbnQgZnJvbTsKKwlpbnQgbGVuOworCWludCB0bzsKKwl1MzIgY3JjOworCXU4IGRhdGFbNjRdOworCXU4IHZhbCA9IDA7CisKKwlpZiAoZnJhbWVfc2l6ZSA+IG1hc2tfc2l6ZSAqIDgpCisJCWZyYW1lX3NpemUgPSBtYXNrX3NpemUgKiA4OworCWlmIChmcmFtZV9zaXplID4gNjQpCisJCWZyYW1lX3NpemUgPSA2NDsKKworCWkgKj0gMHgxMDsKKwl3cml0ZWwoMCwgaHctPmlvICsgS1M4ODQxX1dPTF9GUkFNRV9CWVRFMF9PRkZTRVQgKyBpKTsKKwl3cml0ZWwoMCwgaHctPmlvICsgS1M4ODQxX1dPTF9GUkFNRV9CWVRFMl9PRkZTRVQgKyBpKTsKKworCWJpdHMgPSBsZW4gPSBmcm9tID0gdG8gPSAwOworCWRvIHsKKwkJaWYgKGJpdHMpIHsKKwkJCWlmICgodmFsICYgMSkpCisJCQkJZGF0YVt0bysrXSA9IHBhdHRlcm5bZnJvbV07CisJCQl2YWwgPj49IDE7CisJCQkrK2Zyb207CisJCQktLWJpdHM7CisJCX0gZWxzZSB7CisJCQl2YWwgPSBtYXNrW2xlbl07CisJCQl3cml0ZWIodmFsLCBody0+aW8gKyBLUzg4NDFfV09MX0ZSQU1FX0JZVEUwX09GRlNFVCArIGkKKwkJCQkrIGxlbik7CisJCQkrK2xlbjsKKwkJCWlmICh2YWwpCisJCQkJYml0cyA9IDg7CisJCQllbHNlCisJCQkJZnJvbSArPSA4OworCQl9CisJfSB3aGlsZSAoZnJvbSA8IChpbnQpIGZyYW1lX3NpemUpOworCWlmICh2YWwpIHsKKwkJYml0cyA9IG1hc2tbbGVuIC0gMV07CisJCXZhbCA8PD0gKGZyb20gJSA4KTsKKwkJYml0cyAmPSB+dmFsOworCQl3cml0ZWIoYml0cywgaHctPmlvICsgS1M4ODQxX1dPTF9GUkFNRV9CWVRFMF9PRkZTRVQgKyBpICsgbGVuIC0KKwkJCTEpOworCX0KKwljcmMgPSBldGhlcl9jcmModG8sIGRhdGEpOworCXdyaXRlbChjcmMsIGh3LT5pbyArIEtTODg0MV9XT0xfRlJBTUVfQ1JDX09GRlNFVCArIGkpOworfQorCisvKioKKyAqIGh3X2FkZF93b2xfYXJwIC0gYWRkIEFSUCBwYXR0ZXJuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAaXBfYWRkcjoJVGhlIElQdjQgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGFkZCBBUlAgcGF0dGVybiBmb3Igd2FraW5nIHVwIHRoZSBob3N0LgorICovCitzdGF0aWMgdm9pZCBod19hZGRfd29sX2FycChzdHJ1Y3Qga3N6X2h3ICpodywgdTggKmlwX2FkZHIpCit7CisJdTggbWFza1s2XSA9IHsgMHgzRiwgMHhGMCwgMHgzRiwgMHgwMCwgMHhDMCwgMHgwMyB9OworCXU4IHBhdHRlcm5bNDJdID0geworCQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDA4LCAweDA2LAorCQkweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDA2LCAweDA0LCAweDAwLCAweDAxLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKwltZW1jcHkoJnBhdHRlcm5bMzhdLCBpcF9hZGRyLCA0KTsKKwlod19zZXRfd29sX2ZyYW1lKGh3LCAzLCA2LCBtYXNrLCA0MiwgcGF0dGVybik7Cit9CisKKy8qKgorICogaHdfYWRkX3dvbF9iY2FzdCAtIGFkZCBicm9hZGNhc3QgcGF0dGVybgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGFkZCBicm9hZGNhc3QgcGF0dGVybiBmb3Igd2FraW5nIHVwIHRoZSBob3N0LgorICovCitzdGF0aWMgdm9pZCBod19hZGRfd29sX2JjYXN0KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXU4IG1hc2tbXSA9IHsgMHgzRiB9OworCXU4IHBhdHRlcm5bXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OworCisJaHdfc2V0X3dvbF9mcmFtZShodywgMiwgMSwgbWFzaywgTUFDX0FERFJfTEVOLCBwYXR0ZXJuKTsKK30KKworLyoqCisgKiBod19hZGRfd29sX21jYXN0IC0gYWRkIG11bHRpY2FzdCBwYXR0ZXJuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gYWRkIG11bHRpY2FzdCBwYXR0ZXJuIGZvciB3YWtpbmcgdXAgdGhlIGhvc3QuCisgKgorICogSXQgaXMgYXNzdW1lZCB0aGUgbXVsdGljYXN0IHBhY2tldCBpcyB0aGUgSUNNUHY2IG5laWdoYm9yIHNvbGljaXRhdGlvbiB1c2VkCisgKiBieSBJUHY2IHBpbmcgY29tbWFuZC4gIE5vdGUgdGhhdCBtdWx0aWNhc3QgcGFja2V0cyBhcmUgZmlsdHJlZCB0aHJvdWdoIHRoZQorICogbXVsdGljYXN0IGhhc2ggdGFibGUsIHNvIG5vdCBhbGwgbXVsdGljYXN0IHBhY2tldHMgY2FuIHdha2UgdXAgdGhlIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2FkZF93b2xfbWNhc3Qoc3RydWN0IGtzel9odyAqaHcpCit7CisJdTggbWFza1tdID0geyAweDNGIH07CisJdTggcGF0dGVybltdID0geyAweDMzLCAweDMzLCAweEZGLCAweDAwLCAweDAwLCAweDAwIH07CisKKwltZW1jcHkoJnBhdHRlcm5bM10sICZody0+b3ZlcnJpZGVfYWRkclszXSwgMyk7CisJaHdfc2V0X3dvbF9mcmFtZShodywgMSwgMSwgbWFzaywgNiwgcGF0dGVybik7Cit9CisKKy8qKgorICogaHdfYWRkX3dvbF91Y2FzdCAtIGFkZCB1bmljYXN0IHBhdHRlcm4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBhZGQgdW5pY2FzdCBwYXR0ZXJuIHRvIHdha2V1cCB0aGUgaG9zdC4KKyAqCisgKiBJdCBpcyBhc3N1bWVkIHRoZSB1bmljYXN0IHBhY2tldCBpcyBkaXJlY3RlZCB0byB0aGUgZGV2aWNlLCBhcyB0aGUgaGFyZHdhcmUKKyAqIGNhbiBvbmx5IHJlY2VpdmUgdGhlbSBpbiBub3JtYWwgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgaHdfYWRkX3dvbF91Y2FzdChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl1OCBtYXNrW10gPSB7IDB4M0YgfTsKKworCWh3X3NldF93b2xfZnJhbWUoaHcsIDAsIDEsIG1hc2ssIE1BQ19BRERSX0xFTiwgaHctPm92ZXJyaWRlX2FkZHIpOworfQorCisvKioKKyAqIGh3X2VuYWJsZV93b2wgLSBlbmFibGUgV2FrZS1vbi1MQU4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEB3b2xfZW5hYmxlOglUaGUgV2FrZS1vbi1MQU4gc2V0dGluZ3MuCisgKiBAbmV0X2FkZHI6CVRoZSBJUHY0IGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbmFibGUgV2FrZS1vbi1MQU4gZGVwZW5kaW5nIG9uIGRyaXZlciBzZXR0aW5ncy4KKyAqLworc3RhdGljIHZvaWQgaHdfZW5hYmxlX3dvbChzdHJ1Y3Qga3N6X2h3ICpodywgdTMyIHdvbF9lbmFibGUsIHU4ICpuZXRfYWRkcikKK3sKKwlod19jZmdfd29sKGh3LCBLUzg4NDFfV09MX01BR0lDX0VOQUJMRSwgKHdvbF9lbmFibGUgJiBXQUtFX01BR0lDKSk7CisJaHdfY2ZnX3dvbChodywgS1M4ODQxX1dPTF9GUkFNRTBfRU5BQkxFLCAod29sX2VuYWJsZSAmIFdBS0VfVUNBU1QpKTsKKwlod19hZGRfd29sX3VjYXN0KGh3KTsKKwlod19jZmdfd29sKGh3LCBLUzg4NDFfV09MX0ZSQU1FMV9FTkFCTEUsICh3b2xfZW5hYmxlICYgV0FLRV9NQ0FTVCkpOworCWh3X2FkZF93b2xfbWNhc3QoaHcpOworCWh3X2NmZ193b2woaHcsIEtTODg0MV9XT0xfRlJBTUUyX0VOQUJMRSwgKHdvbF9lbmFibGUgJiBXQUtFX0JDQVNUKSk7CisJaHdfY2ZnX3dvbChodywgS1M4ODQxX1dPTF9GUkFNRTNfRU5BQkxFLCAod29sX2VuYWJsZSAmIFdBS0VfQVJQKSk7CisJaHdfYWRkX3dvbF9hcnAoaHcsIG5ldF9hZGRyKTsKK30KKworLyoqCisgKiBod19pbml0IC0gY2hlY2sgZHJpdmVyIGlzIGNvcnJlY3QgZm9yIHRoZSBoYXJkd2FyZQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBoYXJkd2FyZSBpcyBjb3JyZWN0IGZvciB0aGlzIGRyaXZlciBhbmQgc2V0cyB0aGUKKyAqIGhhcmR3YXJlIHVwIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogUmV0dXJuIG51bWJlciBvZiBwb3J0cyBvciAwIGlmIG5vdCByaWdodC4KKyAqLworc3RhdGljIGludCBod19pbml0KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCByYyA9IDA7CisJdTE2IGRhdGE7CisJdTE2IHJldmlzaW9uOworCisJLyogU2V0IGJ1cyBzcGVlZCB0byAxMjVNSHouICovCisJd3JpdGV3KEJVU19TUEVFRF8xMjVfTUhaLCBody0+aW8gKyBLUzg4NFhfQlVTX0NUUkxfT0ZGU0VUKTsKKworCS8qIENoZWNrIEtTWjg4NHggY2hpcCBJRC4gKi8KKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODRYX0NISVBfSURfT0ZGU0VUKTsKKworCXJldmlzaW9uID0gKGRhdGEgJiBLUzg4NFhfUkVWSVNJT05fTUFTSykgPj4gS1M4ODRYX1JFVklTSU9OX1NISUZUOworCWRhdGEgJj0gS1M4ODRYX0NISVBfSURfTUFTS180MTsKKwlpZiAoUkVHX0NISVBfSURfNDEgPT0gZGF0YSkKKwkJcmMgPSAxOworCWVsc2UgaWYgKFJFR19DSElQX0lEXzQyID09IGRhdGEpCisJCXJjID0gMjsKKwllbHNlCisJCXJldHVybiAwOworCisJLyogU2V0dXAgaGFyZHdhcmUgZmVhdHVyZXMgb3IgYnVnIHdvcmthcm91bmRzLiAqLworCWlmIChyZXZpc2lvbiA8PSAxKSB7CisJCWh3LT5mZWF0dXJlcyB8PSBTTUFMTF9QQUNLRVRfVFhfQlVHOworCQlpZiAoMSA9PSByYykKKwkJCWh3LT5mZWF0dXJlcyB8PSBIQUxGX0RVUExFWF9TSUdOQUxfQlVHOworCX0KKwlody0+ZmVhdHVyZXMgfD0gSVBWNl9DU1VNX0dFTl9IQUNLOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBod19yZXNldCAtIHJlc2V0IHRoZSBoYXJkd2FyZQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSByZXNldHMgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19yZXNldChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl3cml0ZXcoR0xPQkFMX1NPRlRXQVJFX1JFU0VULCBody0+aW8gKyBLUzg4NFhfR0xPQkFMX0NUUkxfT0ZGU0VUKTsKKworCS8qIFdhaXQgZm9yIGRldmljZSB0byByZXNldC4gKi8KKwltZGVsYXkoMTApOworCisJLyogV3JpdGUgMCB0byBjbGVhciBkZXZpY2UgcmVzZXQuICovCisJd3JpdGV3KDAsIGh3LT5pbyArIEtTODg0WF9HTE9CQUxfQ1RSTF9PRkZTRVQpOworfQorCisvKioKKyAqIGh3X3NldHVwIC0gc2V0dXAgdGhlIGhhcmR3YXJlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHNldHVwIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgaHdfc2V0dXAoc3RydWN0IGtzel9odyAqaHcpCit7CisjaWYgU0VUX0RFRkFVTFRfTEVECisJdTE2IGRhdGE7CisKKwkvKiBDaGFuZ2UgZGVmYXVsdCBMRUQgbW9kZS4gKi8KKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzVfT0ZGU0VUKTsKKwlkYXRhICY9IH5MRURfTU9ERTsKKwlkYXRhIHw9IFNFVF9ERUZBVUxUX0xFRDsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzVfT0ZGU0VUKTsKKyNlbmRpZgorCisJLyogU2V0dXAgdHJhbnNtaXQgY29udHJvbC4gKi8KKwlody0+dHhfY2ZnID0gKERNQV9UWF9QQURfRU5BQkxFIHwgRE1BX1RYX0NSQ19FTkFCTEUgfAorCQkoRE1BX0JVUlNUX0RFRkFVTFQgPDwgRE1BX0JVUlNUX1NISUZUKSB8IERNQV9UWF9FTkFCTEUpOworCisJLyogU2V0dXAgcmVjZWl2ZSBjb250cm9sLiAqLworCWh3LT5yeF9jZmcgPSAoRE1BX1JYX0JST0FEQ0FTVCB8IERNQV9SWF9VTklDQVNUIHwKKwkJKERNQV9CVVJTVF9ERUZBVUxUIDw8IERNQV9CVVJTVF9TSElGVCkgfCBETUFfUlhfRU5BQkxFKTsKKwlody0+cnhfY2ZnIHw9IEtTODg0WF9ETUFfUlhfTVVMVElDQVNUOworCisJLyogSGFyZHdhcmUgY2Fubm90IGhhbmRsZSBVRFAgcGFja2V0IGluIElQIGZyYWdtZW50cy4gKi8KKwlody0+cnhfY2ZnIHw9IChETUFfUlhfQ1NVTV9UQ1AgfCBETUFfUlhfQ1NVTV9JUCk7CisKKwlpZiAoaHctPmFsbF9tdWx0aSkKKwkJaHctPnJ4X2NmZyB8PSBETUFfUlhfQUxMX01VTFRJQ0FTVDsKKwlpZiAoaHctPnByb21pc2N1b3VzKQorCQlody0+cnhfY2ZnIHw9IERNQV9SWF9QUk9NSVNDVU9VUzsKK30KKworLyoqCisgKiBod19zZXR1cF9pbnRyIC0gc2V0dXAgaW50ZXJydXB0IG1hc2sKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0dXAgdGhlIGludGVycnVwdCBtYXNrIGZvciBwcm9wZXIgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBod19zZXR1cF9pbnRyKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWh3LT5pbnRyX21hc2sgPSBLUzg4NFhfSU5UX01BU0sgfCBLUzg4NFhfSU5UX1JYX09WRVJSVU47Cit9CisKK3N0YXRpYyB2b2lkIGtzel9jaGVja19kZXNjX251bShzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbykKK3sKKyNkZWZpbmUgTUlOX0RFU0NfU0hJRlQgIDIKKworCWludCBhbGxvYyA9IGluZm8tPmFsbG9jOworCWludCBzaGlmdDsKKworCXNoaWZ0ID0gMDsKKwl3aGlsZSAoIShhbGxvYyAmIDEpKSB7CisJCXNoaWZ0Kys7CisJCWFsbG9jID4+PSAxOworCX0KKwlpZiAoYWxsb2MgIT0gMSB8fCBzaGlmdCA8IE1JTl9ERVNDX1NISUZUKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJIYXJkd2FyZSBkZXNjcmlwdG9yIG51bWJlcnMgbm90IHJpZ2h0IVxuIik7CisJCXdoaWxlIChhbGxvYykgeworCQkJc2hpZnQrKzsKKwkJCWFsbG9jID4+PSAxOworCQl9CisJCWlmIChzaGlmdCA8IE1JTl9ERVNDX1NISUZUKQorCQkJc2hpZnQgPSBNSU5fREVTQ19TSElGVDsKKwkJYWxsb2MgPSAxIDw8IHNoaWZ0OworCQlpbmZvLT5hbGxvYyA9IGFsbG9jOworCX0KKwlpbmZvLT5tYXNrID0gaW5mby0+YWxsb2MgLSAxOworfQorCitzdGF0aWMgdm9pZCBod19pbml0X2Rlc2Moc3RydWN0IGtzel9kZXNjX2luZm8gKmRlc2NfaW5mbywgaW50IHRyYW5zbWl0KQoreworCWludCBpOworCXUzMiBwaHlzID0gZGVzY19pbmZvLT5yaW5nX3BoeXM7CisJc3RydWN0IGtzel9od19kZXNjICpkZXNjID0gZGVzY19pbmZvLT5yaW5nX3ZpcnQ7CisJc3RydWN0IGtzel9kZXNjICpjdXIgPSBkZXNjX2luZm8tPnJpbmc7CisJc3RydWN0IGtzel9kZXNjICpwcmV2aW91cyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVzY19pbmZvLT5hbGxvYzsgaSsrKSB7CisJCWN1ci0+cGh3ID0gZGVzYysrOworCQlwaHlzICs9IGRlc2NfaW5mby0+c2l6ZTsKKwkJcHJldmlvdXMgPSBjdXIrKzsKKwkJcHJldmlvdXMtPnBody0+bmV4dCA9IGNwdV90b19sZTMyKHBoeXMpOworCX0KKwlwcmV2aW91cy0+cGh3LT5uZXh0ID0gY3B1X3RvX2xlMzIoZGVzY19pbmZvLT5yaW5nX3BoeXMpOworCXByZXZpb3VzLT5zdy5idWYucnguZW5kX29mX3JpbmcgPSAxOworCXByZXZpb3VzLT5waHctPmJ1Zi5kYXRhID0gY3B1X3RvX2xlMzIocHJldmlvdXMtPnN3LmJ1Zi5kYXRhKTsKKworCWRlc2NfaW5mby0+YXZhaWwgPSBkZXNjX2luZm8tPmFsbG9jOworCWRlc2NfaW5mby0+bGFzdCA9IGRlc2NfaW5mby0+bmV4dCA9IDA7CisKKwlkZXNjX2luZm8tPmN1ciA9IGRlc2NfaW5mby0+cmluZzsKK30KKworLyoqCisgKiBod19zZXRfZGVzY19iYXNlIC0gc2V0IGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzZXMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEB0eF9hZGRyOglUaGUgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgorICogQHJ4X2FkZHI6CVRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYmFzZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvZ3JhbXMgdGhlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzZXMgYWZ0ZXIgcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldF9kZXNjX2Jhc2Uoc3RydWN0IGtzel9odyAqaHcsIHUzMiB0eF9hZGRyLCB1MzIgcnhfYWRkcikKK3sKKwkvKiBTZXQgYmFzZSBhZGRyZXNzIG9mIFR4L1J4IGRlc2NyaXB0b3JzLiAqLworCXdyaXRlbCh0eF9hZGRyLCBody0+aW8gKyBLU19ETUFfVFhfQUREUik7CisJd3JpdGVsKHJ4X2FkZHIsIGh3LT5pbyArIEtTX0RNQV9SWF9BRERSKTsKK30KKworc3RhdGljIHZvaWQgaHdfcmVzZXRfcGt0cyhzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbykKK3sKKwlpbmZvLT5jdXIgPSBpbmZvLT5yaW5nOworCWluZm8tPmF2YWlsID0gaW5mby0+YWxsb2M7CisJaW5mby0+bGFzdCA9IGluZm8tPm5leHQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzdW1lX3J4KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXdyaXRlbChETUFfU1RBUlQsIGh3LT5pbyArIEtTX0RNQV9SWF9TVEFSVCk7Cit9CisKKy8qKgorICogaHdfc3RhcnRfcnggLSBzdGFydCByZWNlaXZpbmcKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RhcnRzIHRoZSByZWNlaXZlIGZ1bmN0aW9uIG9mIHRoZSBoYXJkd2FyZS4KKyAqLworc3RhdGljIHZvaWQgaHdfc3RhcnRfcngoc3RydWN0IGtzel9odyAqaHcpCit7CisJd3JpdGVsKGh3LT5yeF9jZmcsIGh3LT5pbyArIEtTX0RNQV9SWF9DVFJMKTsKKworCS8qIE5vdGlmeSB3aGVuIHRoZSByZWNlaXZlIHN0b3BzLiAqLworCWh3LT5pbnRyX21hc2sgfD0gS1M4ODRYX0lOVF9SWF9TVE9QUEVEOworCisJd3JpdGVsKERNQV9TVEFSVCwgaHctPmlvICsgS1NfRE1BX1JYX1NUQVJUKTsKKwlod19hY2tfaW50cihodywgS1M4ODRYX0lOVF9SWF9TVE9QUEVEKTsKKwlody0+cnhfc3RvcCsrOworCisJLyogVmFyaWFibGUgb3ZlcmZsb3dzLiAqLworCWlmICgwID09IGh3LT5yeF9zdG9wKQorCQlody0+cnhfc3RvcCA9IDI7Cit9CisKKy8qCisgKiBod19zdG9wX3J4IC0gc3RvcCByZWNlaXZpbmcKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RvcHMgdGhlIHJlY2VpdmUgZnVuY3Rpb24gb2YgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19zdG9wX3J4KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWh3LT5yeF9zdG9wID0gMDsKKwlod190dXJuX29mZl9pbnRyKGh3LCBLUzg4NFhfSU5UX1JYX1NUT1BQRUQpOworCXdyaXRlbCgoaHctPnJ4X2NmZyAmIH5ETUFfUlhfRU5BQkxFKSwgaHctPmlvICsgS1NfRE1BX1JYX0NUUkwpOworfQorCisvKioKKyAqIGh3X3N0YXJ0X3R4IC0gc3RhcnQgdHJhbnNtaXR0aW5nCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHN0YXJ0cyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gb2YgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19zdGFydF90eChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl3cml0ZWwoaHctPnR4X2NmZywgaHctPmlvICsgS1NfRE1BX1RYX0NUUkwpOworfQorCisvKioKKyAqIGh3X3N0b3BfdHggLSBzdG9wIHRyYW5zbWl0dGluZworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gb2YgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19zdG9wX3R4KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXdyaXRlbCgoaHctPnR4X2NmZyAmIH5ETUFfVFhfRU5BQkxFKSwgaHctPmlvICsgS1NfRE1BX1RYX0NUUkwpOworfQorCisvKioKKyAqIGh3X2Rpc2FibGUgLSBkaXNhYmxlIGhhcmR3YXJlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGRpc2FibGVzIHRoZSBoYXJkd2FyZS4KKyAqLworc3RhdGljIHZvaWQgaHdfZGlzYWJsZShzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlod19zdG9wX3J4KGh3KTsKKwlod19zdG9wX3R4KGh3KTsKKwlody0+ZW5hYmxlZCA9IDA7Cit9CisKKy8qKgorICogaHdfZW5hYmxlIC0gZW5hYmxlIGhhcmR3YXJlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGVuYWJsZXMgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19lbmFibGUoc3RydWN0IGtzel9odyAqaHcpCit7CisJaHdfc3RhcnRfdHgoaHcpOworCWh3X3N0YXJ0X3J4KGh3KTsKKwlody0+ZW5hYmxlZCA9IDE7Cit9CisKKy8qKgorICogaHdfYWxsb2NfcGt0IC0gYWxsb2NhdGUgZW5vdWdoIGRlc2NyaXB0b3JzIGZvciB0cmFuc21pc3Npb24KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBsZW5ndGg6CVRoZSBsZW5ndGggb2YgdGhlIHBhY2tldC4KKyAqIEBwaHlzaWNhbDoJTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlcXVpcmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGRlc2NyaXB0b3JzIGZvciB0cmFuc21pc3Npb24uCisgKgorICogUmV0dXJuIDAgaWYgbm90IHN1Y2Nlc3NmdWw7IDEgZm9yIGJ1ZmZlciBjb3B5OyBvciBudW1iZXIgb2YgZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyBpbnQgaHdfYWxsb2NfcGt0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgbGVuZ3RoLCBpbnQgcGh5c2ljYWwpCit7CisJLyogQWx3YXlzIGxlYXZlIG9uZSBkZXNjcmlwdG9yIGZyZWUuICovCisJaWYgKGh3LT50eF9kZXNjX2luZm8uYXZhaWwgPD0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBBbGxvY2F0ZSBhIGRlc2NyaXB0b3IgZm9yIHRyYW5zbWlzc2lvbiBhbmQgbWFyayBpdCBjdXJyZW50LiAqLworCWdldF90eF9wa3QoJmh3LT50eF9kZXNjX2luZm8sICZody0+dHhfZGVzY19pbmZvLmN1cik7CisJaHctPnR4X2Rlc2NfaW5mby5jdXItPnN3LmJ1Zi50eC5maXJzdF9zZWcgPSAxOworCisJLyogS2VlcCB0cmFjayBvZiBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgdXNlZCBzbyBmYXIuICovCisJKytody0+dHhfaW50X2NudDsKKwlody0+dHhfc2l6ZSArPSBsZW5ndGg7CisKKwkvKiBDYW5ub3QgaG9sZCBvbiB0b28gbXVjaCBkYXRhLiAqLworCWlmIChody0+dHhfc2l6ZSA+PSBNQVhfVFhfSEVMRF9TSVpFKQorCQlody0+dHhfaW50X2NudCA9IGh3LT50eF9pbnRfbWFzayArIDE7CisKKwlpZiAocGh5c2ljYWwgPiBody0+dHhfZGVzY19pbmZvLmF2YWlsKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBody0+dHhfZGVzY19pbmZvLmF2YWlsOworfQorCisvKioKKyAqIGh3X3NlbmRfcGt0IC0gbWFyayBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyB0aGUgcGFja2V0IGZvciB0cmFuc21pc3Npb24gaW4gUENJIHZlcnNpb24uCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NlbmRfcGt0KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXN0cnVjdCBrc3pfZGVzYyAqY3VyID0gaHctPnR4X2Rlc2NfaW5mby5jdXI7CisKKwljdXItPnN3LmJ1Zi50eC5sYXN0X3NlZyA9IDE7CisKKwkvKiBJbnRlcnJ1cHQgb25seSBhZnRlciBzcGVjaWZpZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHVzZWQuICovCisJaWYgKGh3LT50eF9pbnRfY250ID4gaHctPnR4X2ludF9tYXNrKSB7CisJCWN1ci0+c3cuYnVmLnR4LmludHIgPSAxOworCQlody0+dHhfaW50X2NudCA9IDA7CisJCWh3LT50eF9zaXplID0gMDsKKwl9CisKKwkvKiBLU1o4ODQyIHN1cHBvcnRzIHBvcnQgZGlyZWN0ZWQgdHJhbnNtaXNzaW9uLiAqLworCWN1ci0+c3cuYnVmLnR4LmRlc3RfcG9ydCA9IGh3LT5kc3RfcG9ydHM7CisKKwlyZWxlYXNlX2Rlc2MoY3VyKTsKKworCXdyaXRlbCgwLCBody0+aW8gKyBLU19ETUFfVFhfU1RBUlQpOworfQorCitzdGF0aWMgaW50IGVtcHR5X2FkZHIodTggKmFkZHIpCit7CisJdTMyICphZGRyMSA9ICh1MzIgKikgYWRkcjsKKwl1MTYgKmFkZHIyID0gKHUxNiAqKSAmYWRkcls0XTsKKworCXJldHVybiAwID09ICphZGRyMSAmJiAwID09ICphZGRyMjsKK30KKworLyoqCisgKiBod19zZXRfYWRkciAtIHNldCBNQUMgYWRkcmVzcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9ncmFtcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlIHdoZW4gdGhlIGFkZHJlc3MgaXMKKyAqIG92ZXJyaWRlZC4KKyAqLworc3RhdGljIHZvaWQgaHdfc2V0X2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFDX0FERFJfTEVOOyBpKyspCisJCXdyaXRlYihody0+b3ZlcnJpZGVfYWRkcltNQUNfQUREUl9PUkRFUihpKV0sCisJCQlody0+aW8gKyBLUzg4NFhfQUREUl8wX09GRlNFVCArIGkpOworCisJc3dfc2V0X2FkZHIoaHcsIGh3LT5vdmVycmlkZV9hZGRyKTsKK30KKworLyoqCisgKiBod19yZWFkX2FkZHIgLSByZWFkIE1BQyBhZGRyZXNzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19yZWFkX2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5wZXJtX2FkZHJbTUFDX0FERFJfT1JERVIoaSldID0gcmVhZGIoaHctPmlvICsKKwkJCUtTODg0WF9BRERSXzBfT0ZGU0VUICsgaSk7CisKKwlpZiAoIWh3LT5tYWNfb3ZlcnJpZGUpIHsKKwkJbWVtY3B5KGh3LT5vdmVycmlkZV9hZGRyLCBody0+cGVybV9hZGRyLCBNQUNfQUREUl9MRU4pOworCQlpZiAoZW1wdHlfYWRkcihody0+b3ZlcnJpZGVfYWRkcikpIHsKKwkJCW1lbWNweShody0+cGVybV9hZGRyLCBERUZBVUxUX01BQ19BRERSRVNTLAorCQkJCU1BQ19BRERSX0xFTik7CisJCQltZW1jcHkoaHctPm92ZXJyaWRlX2FkZHIsIERFRkFVTFRfTUFDX0FERFJFU1MsCisJCQkJTUFDX0FERFJfTEVOKTsKKwkJCWh3LT5vdmVycmlkZV9hZGRyWzVdICs9IGh3LT5pZDsKKwkJCWh3X3NldF9hZGRyKGh3KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaHdfZW5hX2FkZF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgaW5kZXgsIHU4ICptYWNfYWRkcikKK3sKKwlpbnQgaTsKKwl1MzIgbWFjX2FkZHJfbG87CisJdTMyIG1hY19hZGRyX2hpOworCisJbWFjX2FkZHJfaGkgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJbWFjX2FkZHJfaGkgPDw9IDg7CisJCW1hY19hZGRyX2hpIHw9IG1hY19hZGRyW2ldOworCX0KKwltYWNfYWRkcl9oaSB8PSBBRERfQUREUl9FTkFCTEU7CisJbWFjX2FkZHJfbG8gPSAwOworCWZvciAoaSA9IDI7IGkgPCA2OyBpKyspIHsKKwkJbWFjX2FkZHJfbG8gPDw9IDg7CisJCW1hY19hZGRyX2xvIHw9IG1hY19hZGRyW2ldOworCX0KKwlpbmRleCAqPSBBRERfQUREUl9JTkNSOworCisJd3JpdGVsKG1hY19hZGRyX2xvLCBody0+aW8gKyBpbmRleCArIEtTX0FERF9BRERSXzBfTE8pOworCXdyaXRlbChtYWNfYWRkcl9oaSwgaHctPmlvICsgaW5kZXggKyBLU19BRERfQUREUl8wX0hJKTsKK30KKworc3RhdGljIHZvaWQgaHdfc2V0X2FkZF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFERElUSU9OQUxfRU5UUklFUzsgaSsrKSB7CisJCWlmIChlbXB0eV9hZGRyKGh3LT5hZGRyZXNzW2ldKSkKKwkJCXdyaXRlbCgwLCBody0+aW8gKyBBRERfQUREUl9JTkNSICogaSArCisJCQkJS1NfQUREX0FERFJfMF9ISSk7CisJCWVsc2UKKwkJCWh3X2VuYV9hZGRfYWRkcihodywgaSwgaHctPmFkZHJlc3NbaV0pOworCX0KK30KKworc3RhdGljIGludCBod19hZGRfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodywgdTggKm1hY19hZGRyKQoreworCWludCBpOworCWludCBqID0gQURESVRJT05BTF9FTlRSSUVTOworCisJaWYgKCFtZW1jbXAoaHctPm92ZXJyaWRlX2FkZHIsIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmFkZHJfbGlzdF9zaXplOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAoaHctPmFkZHJlc3NbaV0sIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pKQorCQkJcmV0dXJuIDA7CisJCWlmIChBRERJVElPTkFMX0VOVFJJRVMgPT0gaiAmJiBlbXB0eV9hZGRyKGh3LT5hZGRyZXNzW2ldKSkKKwkJCWogPSBpOworCX0KKwlpZiAoaiA8IEFERElUSU9OQUxfRU5UUklFUykgeworCQltZW1jcHkoaHctPmFkZHJlc3Nbal0sIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pOworCQlod19lbmFfYWRkX2FkZHIoaHcsIGosIGh3LT5hZGRyZXNzW2pdKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBod19kZWxfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodywgdTggKm1hY19hZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5hZGRyX2xpc3Rfc2l6ZTsgaSsrKSB7CisJCWlmICghbWVtY21wKGh3LT5hZGRyZXNzW2ldLCBtYWNfYWRkciwgTUFDX0FERFJfTEVOKSkgeworCQkJbWVtc2V0KGh3LT5hZGRyZXNzW2ldLCAwLCBNQUNfQUREUl9MRU4pOworCQkJd3JpdGVsKDAsIGh3LT5pbyArIEFERF9BRERSX0lOQ1IgKiBpICsKKwkJCQlLU19BRERfQUREUl8wX0hJKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworLyoqCisgKiBod19jbHJfbXVsdGljYXN0IC0gY2xlYXIgbXVsdGljYXN0IGFkZHJlc3NlcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSByZW1vdmVzIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzIHNldCBpbiB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2Nscl9tdWx0aWNhc3Qoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSFdfTVVMVElDQVNUX1NJWkU7IGkrKykgeworCQlody0+bXVsdGlfYml0c1tpXSA9IDA7CisKKwkJd3JpdGViKDAsIGh3LT5pbyArIEtTODg0WF9NVUxUSUNBU1RfMF9PRkZTRVQgKyBpKTsKKwl9Cit9CisKKy8qKgorICogaHdfc2V0X2dycF9hZGRyIC0gc2V0IG11bHRpY2FzdCBhZGRyZXNzZXMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvZ3JhbXMgbXVsdGljYXN0IGFkZHJlc3NlcyBmb3IgdGhlIGhhcmR3YXJlIHRvIGFjY2VwdCB0aG9zZQorICogYWRkcmVzc2VzLgorICovCitzdGF0aWMgdm9pZCBod19zZXRfZ3JwX2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisJaW50IGluZGV4OworCWludCBwb3NpdGlvbjsKKwlpbnQgdmFsdWU7CisKKwltZW1zZXQoaHctPm11bHRpX2JpdHMsIDAsIHNpemVvZih1OCkgKiBIV19NVUxUSUNBU1RfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPm11bHRpX2xpc3Rfc2l6ZTsgaSsrKSB7CisJCXBvc2l0aW9uID0gKGV0aGVyX2NyYyg2LCBody0+bXVsdGlfbGlzdFtpXSkgPj4gMjYpICYgMHgzZjsKKwkJaW5kZXggPSBwb3NpdGlvbiA+PiAzOworCQl2YWx1ZSA9IDEgPDwgKHBvc2l0aW9uICYgNyk7CisJCWh3LT5tdWx0aV9iaXRzW2luZGV4XSB8PSAodTgpIHZhbHVlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBIV19NVUxUSUNBU1RfU0laRTsgaSsrKQorCQl3cml0ZWIoaHctPm11bHRpX2JpdHNbaV0sIGh3LT5pbyArIEtTODg0WF9NVUxUSUNBU1RfMF9PRkZTRVQgKworCQkJaSk7Cit9CisKKy8qKgorICogaHdfc2V0X211bHRpY2FzdCAtIGVuYWJsZSBvciBkaXNhYmxlIGFsbCBtdWx0aWNhc3QgcmVjZWl2aW5nCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAbXVsdGljYXN0OglUbyB0dXJuIG9uIG9yIG9mZiB0aGUgYWxsIG11bHRpY2FzdCBmZWF0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIHRoZSBoYXJkd2FyZSB0byBhY2NlcHQgYWxsIG11bHRpY2FzdCBwYWNrZXRzLgorICovCitzdGF0aWMgdm9pZCBod19zZXRfbXVsdGljYXN0KHN0cnVjdCBrc3pfaHcgKmh3LCB1OCBtdWx0aWNhc3QpCit7CisJLyogU3RvcCByZWNlaXZpbmcgZm9yIHJlY29uZmlndXJhdGlvbi4gKi8KKwlod19zdG9wX3J4KGh3KTsKKworCWlmIChtdWx0aWNhc3QpCisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX0FMTF9NVUxUSUNBU1Q7CisJZWxzZQorCQlody0+cnhfY2ZnICY9IH5ETUFfUlhfQUxMX01VTFRJQ0FTVDsKKworCWlmIChody0+ZW5hYmxlZCkKKwkJaHdfc3RhcnRfcngoaHcpOworfQorCisvKioKKyAqIGh3X3NldF9wcm9taXNjdW91cyAtIGVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIHJlY2VpdmluZworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHByb206CVRvIHR1cm4gb24gb3Igb2ZmIHRoZSBwcm9taXNjdW91cyBmZWF0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIHRoZSBoYXJkd2FyZSB0byBhY2NlcHQgYWxsIHBhY2tldHMuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldF9wcm9taXNjdW91cyhzdHJ1Y3Qga3N6X2h3ICpodywgdTggcHJvbSkKK3sKKwkvKiBTdG9wIHJlY2VpdmluZyBmb3IgcmVjb25maWd1cmF0aW9uLiAqLworCWh3X3N0b3BfcngoaHcpOworCisJaWYgKHByb20pCisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX1BST01JU0NVT1VTOworCWVsc2UKKwkJaHctPnJ4X2NmZyAmPSB+RE1BX1JYX1BST01JU0NVT1VTOworCisJaWYgKGh3LT5lbmFibGVkKQorCQlod19zdGFydF9yeChodyk7Cit9CisKKy8qKgorICogc3dfZW5hYmxlIC0gZW5hYmxlIHRoZSBzd2l0Y2gKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBlbmFibGU6CVRoZSBmbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBzd2l0Y2gKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgc3dpdGNoIGluIEtTWjg4NDIuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2VuYWJsZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IGVuYWJsZSkKK3sKKwlpbnQgcG9ydDsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBTV0lUQ0hfUE9SVF9OVU07IHBvcnQrKykgeworCQlpZiAoaHctPmRldl9jb3VudCA+IDEpIHsKKwkJCS8qIFNldCBwb3J0LWJhc2UgdmxhbiBtZW1iZXJzaGlwIHdpdGggaG9zdCBwb3J0LiAqLworCQkJc3dfY2ZnX3BvcnRfYmFzZV92bGFuKGh3LCBwb3J0LAorCQkJCUhPU1RfTUFTSyB8ICgxIDw8IHBvcnQpKTsKKwkJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydCwgU1RQX1NUQVRFX0RJU0FCTEVEKTsKKwkJfSBlbHNlIHsKKwkJCXN3X2NmZ19wb3J0X2Jhc2VfdmxhbihodywgcG9ydCwgUE9SVF9NQVNLKTsKKwkJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydCwgU1RQX1NUQVRFX0ZPUldBUkRJTkcpOworCQl9CisJfQorCWlmIChody0+ZGV2X2NvdW50ID4gMSkKKwkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBTV0lUQ0hfUE9SVF9OVU0sIFNUUF9TVEFURV9TSU1QTEUpOworCWVsc2UKKwkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBTV0lUQ0hfUE9SVF9OVU0sIFNUUF9TVEFURV9GT1JXQVJESU5HKTsKKworCWlmIChlbmFibGUpCisJCWVuYWJsZSA9IEtTODg0Ml9TVEFSVDsKKwl3cml0ZXcoZW5hYmxlLCBody0+aW8gKyBLUzg4NFhfQ0hJUF9JRF9PRkZTRVQpOworfQorCisvKioKKyAqIHN3X3NldHVwIC0gc2V0dXAgdGhlIHN3aXRjaAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZXR1cCB0aGUgaGFyZHdhcmUgc3dpdGNoIGVuZ2luZSBmb3IgZGVmYXVsdCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHN3X3NldHVwKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBwb3J0OworCisJc3dfc2V0X2dsb2JhbF9jdHJsKGh3KTsKKworCS8qIEVuYWJsZSBzd2l0Y2ggYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gYXQgMTAlIHBlcmNlbnQgcmF0ZS4gKi8KKwlzd19pbml0X2Jyb2FkX3N0b3JtKGh3KTsKKwlod19jZmdfYnJvYWRfc3Rvcm0oaHcsIEJST0FEQ0FTVF9TVE9STV9QUk9URUNUSU9OX1JBVEUpOworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBTV0lUQ0hfUE9SVF9OVU07IHBvcnQrKykKKwkJc3dfZW5hX2Jyb2FkX3N0b3JtKGh3LCBwb3J0KTsKKworCXN3X2luaXRfcHJpbyhodyk7CisKKwlzd19pbml0X21pcnJvcihodyk7CisKKwlzd19pbml0X3ByaW9fcmF0ZShodyk7CisKKwlzd19pbml0X3ZsYW4oaHcpOworCisJaWYgKGh3LT5mZWF0dXJlcyAmIFNUUF9TVVBQT1JUKQorCQlzd19pbml0X3N0cChodyk7CisJaWYgKCFzd19jaGsoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCVNXSVRDSF9UWF9GTE9XX0NUUkwgfCBTV0lUQ0hfUlhfRkxPV19DVFJMKSkKKwkJaHctPm92ZXJyaWRlcyB8PSBQQVVTRV9GTE9XX0NUUkw7CisJc3dfZW5hYmxlKGh3LCAxKTsKK30KKworLyoqCisgKiBrc3pfc3RhcnRfdGltZXIgLSBzdGFydCBrZXJuZWwgdGltZXIKKyAqIEBpbmZvOglLZXJuZWwgdGltZXIgaW5mb3JtYXRpb24uCisgKiBAdGltZToJVGhlIHRpbWUgdGljay4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RhcnRzIHRoZSBrZXJuZWwgdGltZXIgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lIHRpY2suCisgKi8KK3N0YXRpYyB2b2lkIGtzel9zdGFydF90aW1lcihzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gKmluZm8sIGludCB0aW1lKQoreworCWluZm8tPmNudCA9IDA7CisJaW5mby0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lOworCWFkZF90aW1lcigmaW5mby0+dGltZXIpOworCisJLyogaW5maW5pdHkgKi8KKwlpbmZvLT5tYXggPSAtMTsKK30KKworLyoqCisgKiBrc3pfc3RvcF90aW1lciAtIHN0b3Aga2VybmVsIHRpbWVyCisgKiBAaW5mbzoJS2VybmVsIHRpbWVyIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUga2VybmVsIHRpbWVyLgorICovCitzdGF0aWMgdm9pZCBrc3pfc3RvcF90aW1lcihzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPm1heCkgeworCQlpbmZvLT5tYXggPSAwOworCQlkZWxfdGltZXJfc3luYygmaW5mby0+dGltZXIpOworCX0KK30KKworc3RhdGljIHZvaWQga3N6X2luaXRfdGltZXIoc3RydWN0IGtzel90aW1lcl9pbmZvICppbmZvLCBpbnQgcGVyaW9kLAorCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksIHZvaWQgKmRhdGEpCit7CisJaW5mby0+bWF4ID0gMDsKKwlpbmZvLT5wZXJpb2QgPSBwZXJpb2Q7CisJaW5pdF90aW1lcigmaW5mby0+dGltZXIpOworCWluZm8tPnRpbWVyLmZ1bmN0aW9uID0gZnVuY3Rpb247CisJaW5mby0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkYXRhOworfQorCitzdGF0aWMgdm9pZCBrc3pfdXBkYXRlX3RpbWVyKHN0cnVjdCBrc3pfdGltZXJfaW5mbyAqaW5mbykKK3sKKwkrK2luZm8tPmNudDsKKwlpZiAoaW5mby0+bWF4ID4gMCkgeworCQlpZiAoaW5mby0+Y250IDwgaW5mby0+bWF4KSB7CisJCQlpbmZvLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGluZm8tPnBlcmlvZDsKKwkJCWFkZF90aW1lcigmaW5mby0+dGltZXIpOworCQl9IGVsc2UKKwkJCWluZm8tPm1heCA9IDA7CisJfSBlbHNlIGlmIChpbmZvLT5tYXggPCAwKSB7CisJCWluZm8tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgaW5mby0+cGVyaW9kOworCQlhZGRfdGltZXIoJmluZm8tPnRpbWVyKTsKKwl9Cit9CisKKy8qKgorICoga3N6X2FsbG9jX3NvZnRfZGVzYyAtIGFsbG9jYXRlIHNvZnR3YXJlIGRlc2NyaXB0b3JzCisgKiBAZGVzY19pbmZvOglEZXNjcmlwdG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqIEB0cmFuc21pdDoJSW5kaWNhdGlvbiB0aGF0IGRlc2NyaXB0b3JzIGFyZSBmb3IgdHJhbnNtaXQuCisgKgorICogVGhpcyBsb2NhbCBmdW5jdGlvbiBhbGxvY2F0ZXMgc29mdHdhcmUgZGVzY3JpcHRvcnMgZm9yIG1hbmlwdWxhdGlvbiBpbgorICogbWVtb3J5LgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwuCisgKi8KK3N0YXRpYyBpbnQga3N6X2FsbG9jX3NvZnRfZGVzYyhzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqZGVzY19pbmZvLCBpbnQgdHJhbnNtaXQpCit7CisJZGVzY19pbmZvLT5yaW5nID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtzel9kZXNjKSAqIGRlc2NfaW5mby0+YWxsb2MsCisJCUdGUF9LRVJORUwpOworCWlmICghZGVzY19pbmZvLT5yaW5nKQorCQlyZXR1cm4gMTsKKwltZW1zZXQoKHZvaWQgKikgZGVzY19pbmZvLT5yaW5nLCAwLAorCQlzaXplb2Yoc3RydWN0IGtzel9kZXNjKSAqIGRlc2NfaW5mby0+YWxsb2MpOworCWh3X2luaXRfZGVzYyhkZXNjX2luZm8sIHRyYW5zbWl0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBrc3pfYWxsb2NfZGVzYyAtIGFsbG9jYXRlIGhhcmR3YXJlIGRlc2NyaXB0b3JzCisgKiBAYWRhcHRlcjoJQWRhcHRlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBsb2NhbCBmdW5jdGlvbiBhbGxvY2F0ZXMgaGFyZHdhcmUgZGVzY3JpcHRvcnMgZm9yIHJlY2VpdmluZyBhbmQKKyAqIHRyYW5zbWl0dGluZy4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLgorICovCitzdGF0aWMgaW50IGtzel9hbGxvY19kZXNjKHN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgb2Zmc2V0OworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBSWCAmIFRYIGRlc2NyaXB0b3JzLiAqLworCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY19zaXplID0KKwkJaHctPnJ4X2Rlc2NfaW5mby5zaXplICogaHctPnJ4X2Rlc2NfaW5mby5hbGxvYyArCisJCWh3LT50eF9kZXNjX2luZm8uc2l6ZSAqIGh3LT50eF9kZXNjX2luZm8uYWxsb2MgKworCQlERVNDX0FMSUdOTUVOVDsKKworCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0ID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQlhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2Nfc2l6ZSwKKwkJCSZhZGFwdGVyLT5kZXNjX3Bvb2wuZG1hX2FkZHIpOworCWlmIChhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCA9PSBOVUxMKSB7CisJCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY19zaXplID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCW1lbXNldChhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCwgMCwgYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3NpemUpOworCisJLyogQWxpZ24gdG8gdGhlIG5leHQgY2FjaGUgbGluZSBib3VuZGFyeS4gKi8KKwlvZmZzZXQgPSAoKCh1bG9uZykgYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3ZpcnQgJSBERVNDX0FMSUdOTUVOVCkgPworCQkoREVTQ19BTElHTk1FTlQgLQorCQkoKHVsb25nKSBhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCAlIERFU0NfQUxJR05NRU5UKSkgOiAwKTsKKwlhZGFwdGVyLT5kZXNjX3Bvb2wudmlydCA9IGFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0ICsgb2Zmc2V0OworCWFkYXB0ZXItPmRlc2NfcG9vbC5waHlzID0gYWRhcHRlci0+ZGVzY19wb29sLmRtYV9hZGRyICsgb2Zmc2V0OworCisJLyogQWxsb2NhdGUgcmVjZWl2ZS90cmFuc21pdCBkZXNjcmlwdG9ycy4gKi8KKwlody0+cnhfZGVzY19pbmZvLnJpbmdfdmlydCA9IChzdHJ1Y3Qga3N6X2h3X2Rlc2MgKikKKwkJYWRhcHRlci0+ZGVzY19wb29sLnZpcnQ7CisJaHctPnJ4X2Rlc2NfaW5mby5yaW5nX3BoeXMgPSBhZGFwdGVyLT5kZXNjX3Bvb2wucGh5czsKKwlvZmZzZXQgPSBody0+cnhfZGVzY19pbmZvLmFsbG9jICogaHctPnJ4X2Rlc2NfaW5mby5zaXplOworCWh3LT50eF9kZXNjX2luZm8ucmluZ192aXJ0ID0gKHN0cnVjdCBrc3pfaHdfZGVzYyAqKQorCQkoYWRhcHRlci0+ZGVzY19wb29sLnZpcnQgKyBvZmZzZXQpOworCWh3LT50eF9kZXNjX2luZm8ucmluZ19waHlzID0gYWRhcHRlci0+ZGVzY19wb29sLnBoeXMgKyBvZmZzZXQ7CisKKwlpZiAoa3N6X2FsbG9jX3NvZnRfZGVzYygmaHctPnJ4X2Rlc2NfaW5mbywgMCkpCisJCXJldHVybiAxOworCWlmIChrc3pfYWxsb2Nfc29mdF9kZXNjKCZody0+dHhfZGVzY19pbmZvLCAxKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmcmVlX2RtYV9idWYgLSByZWxlYXNlIERNQSBidWZmZXIgcmVzb3VyY2VzCisgKiBAYWRhcHRlcjoJQWRhcHRlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGp1c3QgYSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgRE1BIGJ1ZmZlciByZXNvdXJjZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfZG1hX2J1ZihzdHJ1Y3QgZGV2X2luZm8gKmFkYXB0ZXIsIHN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZiwKKwlpbnQgZGlyZWN0aW9uKQoreworCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgZG1hX2J1Zi0+ZG1hLCBkbWFfYnVmLT5sZW4sIGRpcmVjdGlvbik7CisJZGV2X2tmcmVlX3NrYihkbWFfYnVmLT5za2IpOworCWRtYV9idWYtPnNrYiA9IE5VTEw7CisJZG1hX2J1Zi0+ZG1hID0gMDsKK30KKworLyoqCisgKiBrc3pfaW5pdF9yeF9idWZmZXJzIC0gaW5pdGlhbGl6ZSByZWNlaXZlIGRlc2NyaXB0b3JzCisgKiBAYWRhcHRlcjoJQWRhcHRlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIERNQSBidWZmZXJzIGZvciByZWNlaXZpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGtzel9pbml0X3J4X2J1ZmZlcnMoc3RydWN0IGRldl9pbmZvICphZGFwdGVyKQoreworCWludCBpOworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYzsKKwlzdHJ1Y3Qga3N6X2RtYV9idWYgKmRtYV9idWY7CisJc3RydWN0IGtzel9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnJ4X2Rlc2NfaW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBody0+cnhfZGVzY19pbmZvLmFsbG9jOyBpKyspIHsKKwkJZ2V0X3J4X3BrdChpbmZvLCAmZGVzYyk7CisKKwkJZG1hX2J1ZiA9IERNQV9CVUZGRVIoZGVzYyk7CisJCWlmIChkbWFfYnVmLT5za2IgJiYgZG1hX2J1Zi0+bGVuICE9IGFkYXB0ZXItPm10dSkKKwkJCWZyZWVfZG1hX2J1ZihhZGFwdGVyLCBkbWFfYnVmLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlkbWFfYnVmLT5sZW4gPSBhZGFwdGVyLT5tdHU7CisJCWlmICghZG1hX2J1Zi0+c2tiKQorCQkJZG1hX2J1Zi0+c2tiID0gYWxsb2Nfc2tiKGRtYV9idWYtPmxlbiwgR0ZQX0FUT01JQyk7CisJCWlmIChkbWFfYnVmLT5za2IgJiYgIWRtYV9idWYtPmRtYSkgeworCQkJZG1hX2J1Zi0+c2tiLT5kZXYgPSBhZGFwdGVyLT5kZXY7CisJCQlkbWFfYnVmLT5kbWEgPSBwY2lfbWFwX3NpbmdsZSgKKwkJCQlhZGFwdGVyLT5wZGV2LAorCQkJCXNrYl90YWlsX3BvaW50ZXIoZG1hX2J1Zi0+c2tiKSwKKwkJCQlkbWFfYnVmLT5sZW4sCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCisJCS8qIFNldCBkZXNjcmlwdG9yLiAqLworCQlzZXRfcnhfYnVmKGRlc2MsIGRtYV9idWYtPmRtYSk7CisJCXNldF9yeF9sZW4oZGVzYywgZG1hX2J1Zi0+bGVuKTsKKwkJcmVsZWFzZV9kZXNjKGRlc2MpOworCX0KK30KKworLyoqCisgKiBrc3pfYWxsb2NfbWVtIC0gYWxsb2NhdGUgbWVtb3J5IGZvciBoYXJkd2FyZSBkZXNjcmlwdG9ycworICogQGFkYXB0ZXI6CUFkYXB0ZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgdXNlIGJ5IGhhcmR3YXJlIGRlc2NyaXB0b3JzIGZvciByZWNlaXZpbmcKKyAqIGFuZCB0cmFuc21pdHRpbmcuCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4KKyAqLworc3RhdGljIGludCBrc3pfYWxsb2NfbWVtKHN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCS8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3JzLiAqLworCWh3LT5yeF9kZXNjX2luZm8uYWxsb2MgPSBOVU1fT0ZfUlhfREVTQzsKKwlody0+dHhfZGVzY19pbmZvLmFsbG9jID0gTlVNX09GX1RYX0RFU0M7CisKKwkvKiBEZXRlcm1pbmUgaG93IG1hbnkgZGVzY3JpcHRvcnMgdG8gc2tpcCB0cmFuc21pdCBpbnRlcnJ1cHQuICovCisJaHctPnR4X2ludF9jbnQgPSAwOworCWh3LT50eF9pbnRfbWFzayA9IE5VTV9PRl9UWF9ERVNDIC8gNDsKKwlpZiAoaHctPnR4X2ludF9tYXNrID4gOCkKKwkJaHctPnR4X2ludF9tYXNrID0gODsKKwl3aGlsZSAoaHctPnR4X2ludF9tYXNrKSB7CisJCWh3LT50eF9pbnRfY250Kys7CisJCWh3LT50eF9pbnRfbWFzayA+Pj0gMTsKKwl9CisJaWYgKGh3LT50eF9pbnRfY250KSB7CisJCWh3LT50eF9pbnRfbWFzayA9ICgxIDw8IChody0+dHhfaW50X2NudCAtIDEpKSAtIDE7CisJCWh3LT50eF9pbnRfY250ID0gMDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIGRlc2NyaXB0b3Igc2l6ZS4gKi8KKwlody0+cnhfZGVzY19pbmZvLnNpemUgPQorCQkoKChzaXplb2Yoc3RydWN0IGtzel9od19kZXNjKSArIERFU0NfQUxJR05NRU5UIC0gMSkgLworCQlERVNDX0FMSUdOTUVOVCkgKiBERVNDX0FMSUdOTUVOVCk7CisJaHctPnR4X2Rlc2NfaW5mby5zaXplID0KKwkJKCgoc2l6ZW9mKHN0cnVjdCBrc3pfaHdfZGVzYykgKyBERVNDX0FMSUdOTUVOVCAtIDEpIC8KKwkJREVTQ19BTElHTk1FTlQpICogREVTQ19BTElHTk1FTlQpOworCWlmIChody0+cnhfZGVzY19pbmZvLnNpemUgIT0gc2l6ZW9mKHN0cnVjdCBrc3pfaHdfZGVzYykpCisJCXByaW50ayhLRVJOX0FMRVJUCisJCQkiSGFyZHdhcmUgZGVzY3JpcHRvciBzaXplIG5vdCByaWdodCFcbiIpOworCWtzel9jaGVja19kZXNjX251bSgmaHctPnJ4X2Rlc2NfaW5mbyk7CisJa3N6X2NoZWNrX2Rlc2NfbnVtKCZody0+dHhfZGVzY19pbmZvKTsKKworCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3JzLiAqLworCWlmIChrc3pfYWxsb2NfZGVzYyhhZGFwdGVyKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBrc3pfZnJlZV9kZXNjIC0gZnJlZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgZGVzY3JpcHRvcnMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGxvY2FsIHJvdXRpbmUgZnJlZXMgdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkKKyAqIGtzel9hbGxvY19kZXNjKCkuCisgKi8KK3N0YXRpYyB2b2lkIGtzel9mcmVlX2Rlc2Moc3RydWN0IGRldl9pbmZvICphZGFwdGVyKQoreworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogUmVzZXQgZGVzY3JpcHRvci4gKi8KKwlody0+cnhfZGVzY19pbmZvLnJpbmdfdmlydCA9IE5VTEw7CisJaHctPnR4X2Rlc2NfaW5mby5yaW5nX3ZpcnQgPSBOVUxMOworCWh3LT5yeF9kZXNjX2luZm8ucmluZ19waHlzID0gMDsKKwlody0+dHhfZGVzY19pbmZvLnJpbmdfcGh5cyA9IDA7CisKKwkvKiBGcmVlIG1lbW9yeS4gKi8KKwlpZiAoYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3ZpcnQpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoCisJCQlhZGFwdGVyLT5wZGV2LAorCQkJYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3NpemUsCisJCQlhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCwKKwkJCWFkYXB0ZXItPmRlc2NfcG9vbC5kbWFfYWRkcik7CisKKwkvKiBSZXNldCByZXNvdXJjZSBwb29sLiAqLworCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY19zaXplID0gMDsKKwlhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCA9IE5VTEw7CisKKwlrZnJlZShody0+cnhfZGVzY19pbmZvLnJpbmcpOworCWh3LT5yeF9kZXNjX2luZm8ucmluZyA9IE5VTEw7CisJa2ZyZWUoaHctPnR4X2Rlc2NfaW5mby5yaW5nKTsKKwlody0+dHhfZGVzY19pbmZvLnJpbmcgPSBOVUxMOworfQorCisvKioKKyAqIGtzel9mcmVlX2J1ZmZlcnMgLSBmcmVlIGJ1ZmZlcnMgdXNlZCBpbiB0aGUgZGVzY3JpcHRvcnMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqIEBkZXNjX2luZm86CURlc2NyaXB0b3IgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgbG9jYWwgcm91dGluZSBmcmVlcyBidWZmZXJzIHVzZWQgaW4gdGhlIERNQSBidWZmZXJzLgorICovCitzdGF0aWMgdm9pZCBrc3pfZnJlZV9idWZmZXJzKHN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlciwKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqZGVzY19pbmZvLCBpbnQgZGlyZWN0aW9uKQoreworCWludCBpOworCXN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MgPSBkZXNjX2luZm8tPnJpbmc7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVzY19pbmZvLT5hbGxvYzsgaSsrKSB7CisJCWRtYV9idWYgPSBETUFfQlVGRkVSKGRlc2MpOworCQlpZiAoZG1hX2J1Zi0+c2tiKQorCQkJZnJlZV9kbWFfYnVmKGFkYXB0ZXIsIGRtYV9idWYsIGRpcmVjdGlvbik7CisJCWRlc2MrKzsKKwl9Cit9CisKKy8qKgorICoga3N6X2ZyZWVfbWVtIC0gZnJlZSBhbGwgcmVzb3VyY2VzIHVzZWQgYnkgZGVzY3JpcHRvcnMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGxvY2FsIHJvdXRpbmUgZnJlZXMgYWxsIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGtzel9hbGxvY19tZW0oKS4KKyAqLworc3RhdGljIHZvaWQga3N6X2ZyZWVfbWVtKHN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlcikKK3sKKwkvKiBGcmVlIHRyYW5zbWl0IGJ1ZmZlcnMuICovCisJa3N6X2ZyZWVfYnVmZmVycyhhZGFwdGVyLCAmYWRhcHRlci0+aHcudHhfZGVzY19pbmZvLAorCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCS8qIEZyZWUgcmVjZWl2ZSBidWZmZXJzLiAqLworCWtzel9mcmVlX2J1ZmZlcnMoYWRhcHRlciwgJmFkYXB0ZXItPmh3LnJ4X2Rlc2NfaW5mbywKKwkJUENJX0RNQV9GUk9NREVWSUNFKTsKKworCS8qIEZyZWUgZGVzY3JpcHRvcnMuICovCisJa3N6X2ZyZWVfZGVzYyhhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X21pYl9jb3VudGVycyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IGZpcnN0LCBpbnQgY250LAorCXU2NCAqY291bnRlcikKK3sKKwlpbnQgaTsKKwlpbnQgbWliOworCWludCBwb3J0OworCXN0cnVjdCBrc3pfcG9ydF9taWIgKnBvcnRfbWliOworCisJbWVtc2V0KGNvdW50ZXIsIDAsIHNpemVvZih1NjQpICogVE9UQUxfUE9SVF9DT1VOVEVSX05VTSk7CisJZm9yIChpID0gMCwgcG9ydCA9IGZpcnN0OyBpIDwgY250OyBpKyssIHBvcnQrKykgeworCQlwb3J0X21pYiA9ICZody0+cG9ydF9taWJbcG9ydF07CisJCWZvciAobWliID0gcG9ydF9taWItPm1pYl9zdGFydDsgbWliIDwgaHctPm1pYl9jbnQ7IG1pYisrKQorCQkJY291bnRlclttaWJdICs9IHBvcnRfbWliLT5jb3VudGVyW21pYl07CisJfQorfQorCisvKioKKyAqIHNlbmRfcGFja2V0IC0gc2VuZCBwYWNrZXQKKyAqIEBza2I6CVNvY2tldCBidWZmZXIuCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZW5kIGEgcGFja2V0IG91dCB0byB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIHZvaWQgc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2M7CisJc3RydWN0IGtzel9kZXNjICpmaXJzdDsKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnR4X2Rlc2NfaW5mbzsKKwlzdHJ1Y3Qga3N6X2RtYV9idWYgKmRtYV9idWY7CisJaW50IGxlbjsKKwlpbnQgbGFzdF9mcmFnID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCS8qCisJICogS1NaODg0MiB3aXRoIG11bHRpcGxlIGRldmljZSBpbnRlcmZhY2VzIG5lZWRzIHRvIGJlIHRvbGQgd2hpY2ggcG9ydAorCSAqIHRvIHNlbmQuCisJICovCisJaWYgKGh3LT5kZXZfY291bnQgPiAxKQorCQlody0+ZHN0X3BvcnRzID0gMSA8PCBwcml2LT5wb3J0LmZpcnN0X3BvcnQ7CisKKwkvKiBIYXJkd2FyZSB3aWxsIHBhZCB0aGUgbGVuZ3RoIHRvIDYwLiAqLworCWxlbiA9IHNrYi0+bGVuOworCisJLyogUmVtZW1iZXIgdGhlIHZlcnkgZmlyc3QgZGVzY3JpcHRvci4gKi8KKwlmaXJzdCA9IGluZm8tPmN1cjsKKwlkZXNjID0gZmlyc3Q7CisKKwlkbWFfYnVmID0gRE1BX0JVRkZFUihkZXNjKTsKKwlpZiAobGFzdF9mcmFnKSB7CisJCWludCBmcmFnOworCQlza2JfZnJhZ190ICp0aGlzX2ZyYWc7CisKKwkJZG1hX2J1Zi0+bGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCisJCWRtYV9idWYtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKAorCQkJaHdfcHJpdi0+cGRldiwgc2tiLT5kYXRhLCBkbWFfYnVmLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJc2V0X3R4X2J1ZihkZXNjLCBkbWFfYnVmLT5kbWEpOworCQlzZXRfdHhfbGVuKGRlc2MsIGRtYV9idWYtPmxlbik7CisKKwkJZnJhZyA9IDA7CisJCWRvIHsKKwkJCXRoaXNfZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOworCisJCQkvKiBHZXQgYSBuZXcgZGVzY3JpcHRvci4gKi8KKwkJCWdldF90eF9wa3QoaW5mbywgJmRlc2MpOworCisJCQkvKiBLZWVwIHRyYWNrIG9mIGRlc2NyaXB0b3JzIHVzZWQgc28gZmFyLiAqLworCQkJKytody0+dHhfaW50X2NudDsKKworCQkJZG1hX2J1ZiA9IERNQV9CVUZGRVIoZGVzYyk7CisJCQlkbWFfYnVmLT5sZW4gPSB0aGlzX2ZyYWctPnNpemU7CisKKwkJCWRtYV9idWYtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKAorCQkJCWh3X3ByaXYtPnBkZXYsCisJCQkJcGFnZV9hZGRyZXNzKHRoaXNfZnJhZy0+cGFnZSkgKworCQkJCXRoaXNfZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJZG1hX2J1Zi0+bGVuLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJc2V0X3R4X2J1ZihkZXNjLCBkbWFfYnVmLT5kbWEpOworCQkJc2V0X3R4X2xlbihkZXNjLCBkbWFfYnVmLT5sZW4pOworCisJCQlmcmFnKys7CisJCQlpZiAoZnJhZyA9PSBsYXN0X2ZyYWcpCisJCQkJYnJlYWs7CisKKwkJCS8qIERvIG5vdCByZWxlYXNlIHRoZSBsYXN0IGRlc2NyaXB0b3IgaGVyZS4gKi8KKwkJCXJlbGVhc2VfZGVzYyhkZXNjKTsKKwkJfSB3aGlsZSAoMSk7CisKKwkJLyogY3VycmVudCBwb2ludHMgdG8gdGhlIGxhc3QgZGVzY3JpcHRvci4gKi8KKwkJaW5mby0+Y3VyID0gZGVzYzsKKworCQkvKiBSZWxlYXNlIHRoZSBmaXJzdCBkZXNjcmlwdG9yLiAqLworCQlyZWxlYXNlX2Rlc2MoZmlyc3QpOworCX0gZWxzZSB7CisJCWRtYV9idWYtPmxlbiA9IGxlbjsKKworCQlkbWFfYnVmLT5kbWEgPSBwY2lfbWFwX3NpbmdsZSgKKwkJCWh3X3ByaXYtPnBkZXYsIHNrYi0+ZGF0YSwgZG1hX2J1Zi0+bGVuLAorCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCXNldF90eF9idWYoZGVzYywgZG1hX2J1Zi0+ZG1hKTsKKwkJc2V0X3R4X2xlbihkZXNjLCBkbWFfYnVmLT5sZW4pOworCX0KKworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCShkZXNjKS0+c3cuYnVmLnR4LmNzdW1fZ2VuX3RjcCA9IDE7CisJCShkZXNjKS0+c3cuYnVmLnR4LmNzdW1fZ2VuX3VkcCA9IDE7CisJfQorCisJLyoKKwkgKiBUaGUgbGFzdCBkZXNjcmlwdG9yIGhvbGRzIHRoZSBwYWNrZXQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgdG8KKwkgKiBuZXR3b3JrIHN1YnN5c3RlbSBhZnRlciBhbGwgZGVzY3JpcHRvcnMgYXJlIHRyYW5zbWl0dGVkLgorCSAqLworCWRtYV9idWYtPnNrYiA9IHNrYjsKKworCWh3X3NlbmRfcGt0KGh3KTsKKworCS8qIFVwZGF0ZSB0cmFuc21pdCBzdGF0aXN0aWNzLiAqLworCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47Cit9CisKKy8qKgorICogdHJhbnNtaXRfY2xlYW51cCAtIGNsZWFuIHVwIHRyYW5zbWl0IGRlc2NyaXB0b3JzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGNsZWFuIHVwIHRoZSB0cmFuc21pdHRlZCBidWZmZXJzLgorICovCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jbGVhbnVwKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiwgaW50IG5vcm1hbCkKK3sKKwlpbnQgbGFzdDsKKwl1bmlvbiBkZXNjX3N0YXQgc3RhdHVzOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBrc3pfZGVzY19pbmZvICppbmZvID0gJmh3LT50eF9kZXNjX2luZm87CisJc3RydWN0IGtzel9kZXNjICpkZXNjOworCXN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKworCXNwaW5fbG9jaygmaHdfcHJpdi0+aHdsb2NrKTsKKwlsYXN0ID0gaW5mby0+bGFzdDsKKworCXdoaWxlIChpbmZvLT5hdmFpbCA8IGluZm8tPmFsbG9jKSB7CisJCS8qIEdldCBuZXh0IGRlc2NyaXB0b3Igd2hpY2ggaXMgbm90IGhhcmR3YXJlIG93bmVkLiAqLworCQlkZXNjID0gJmluZm8tPnJpbmdbbGFzdF07CisJCXN0YXR1cy5kYXRhID0gbGUzMl90b19jcHUoZGVzYy0+cGh3LT5jdHJsLmRhdGEpOworCQlpZiAoc3RhdHVzLnR4Lmh3X293bmVkKSB7CisJCQlpZiAobm9ybWFsKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCXJlc2V0X2Rlc2MoZGVzYywgc3RhdHVzKTsKKwkJfQorCisJCWRtYV9idWYgPSBETUFfQlVGRkVSKGRlc2MpOworCQlwY2lfdW5tYXBfc2luZ2xlKAorCQkJaHdfcHJpdi0+cGRldiwgZG1hX2J1Zi0+ZG1hLCBkbWFfYnVmLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkvKiBUaGlzIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGxhc3QgYnVmZmVyIGluIHRoZSBwYWNrZXQuICovCisJCWlmIChkbWFfYnVmLT5za2IpIHsKKwkJCWRldiA9IGRtYV9idWYtPnNrYi0+ZGV2OworCisJCQkvKiBSZWxlYXNlIHRoZSBwYWNrZXQgYmFjayB0byBuZXR3b3JrIHN1YnN5c3RlbS4gKi8KKwkJCWRldl9rZnJlZV9za2JfaXJxKGRtYV9idWYtPnNrYik7CisJCQlkbWFfYnVmLT5za2IgPSBOVUxMOworCQl9CisKKwkJLyogRnJlZSB0aGUgdHJhbnNtaXR0ZWQgZGVzY3JpcHRvci4gKi8KKwkJbGFzdCsrOworCQlsYXN0ICY9IGluZm8tPm1hc2s7CisJCWluZm8tPmF2YWlsKys7CisJfQorCWluZm8tPmxhc3QgPSBsYXN0OworCXNwaW5fdW5sb2NrKCZod19wcml2LT5od2xvY2spOworCisJLyogTm90aWZ5IHRoZSBuZXR3b3JrIHN1YnN5c3RlbSB0aGF0IHRoZSBwYWNrZXQgaGFzIGJlZW4gc2VudC4gKi8KKwlpZiAoZGV2KQorCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKK30KKworLyoqCisgKiB0cmFuc21pdF9kb25lIC0gdHJhbnNtaXQgZG9uZSBwcm9jZXNzaW5nCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gdGhlIHRyYW5zbWl0IGludGVycnVwdCBpcyB0cmlnZ2VyZWQsIGluZGljYXRpbmcKKyAqIGVpdGhlciBhIHBhY2tldCBpcyBzZW50IHN1Y2Nlc3NmdWxseSBvciB0aGVyZSBhcmUgdHJhbnNtaXQgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZCB0eF9kb25lKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdikKK3sKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlpbnQgcG9ydDsKKworCXRyYW5zbWl0X2NsZWFudXAoaHdfcHJpdiwgMSk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHctPmRldl9jb3VudDsgcG9ydCsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+cG9ydF9pbmZvW3BvcnRdLnBkZXY7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9vbGRfc2tiKHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5kZXYgPSBvbGQtPmRldjsKKwlza2ItPnByb3RvY29sID0gb2xkLT5wcm90b2NvbDsKKwlza2ItPmlwX3N1bW1lZCA9IG9sZC0+aXBfc3VtbWVkOworCXNrYi0+Y3N1bSA9IG9sZC0+Y3N1bTsKKwlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pOworCisJZGV2X2tmcmVlX3NrYihvbGQpOworfQorCisvKioKKyAqIG5ldGRldl90eCAtIHNlbmQgb3V0IHBhY2tldAorICogQHNrYjoJU29ja2V0IGJ1ZmZlci4KKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUgdXBwZXIgbmV0d29yayBsYXllciB0byBzZW5kIG91dCBhIHBhY2tldC4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCWludCBsZWZ0OworCWludCBudW0gPSAxOworCWludCByYyA9IDA7CisKKwlpZiAoaHctPmZlYXR1cmVzICYgU01BTExfUEFDS0VUX1RYX0JVRykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKKworCQlpZiAoc2tiLT5sZW4gPD0gNDgpIHsKKwkJCWlmIChza2JfZW5kX3BvaW50ZXIoc2tiKSAtIHNrYi0+ZGF0YSA+PSA1MCkgeworCQkJCW1lbXNldCgmc2tiLT5kYXRhW3NrYi0+bGVuXSwgMCwgNTAgLSBza2ItPmxlbik7CisJCQkJc2tiLT5sZW4gPSA1MDsKKwkJCX0gZWxzZSB7CisJCQkJc2tiID0gZGV2X2FsbG9jX3NrYig1MCk7CisJCQkJaWYgKCFza2IpCisJCQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJCQltZW1jcHkoc2tiLT5kYXRhLCBvcmdfc2tiLT5kYXRhLCBvcmdfc2tiLT5sZW4pOworCQkJCW1lbXNldCgmc2tiLT5kYXRhW29yZ19za2ItPmxlbl0sIDAsCisJCQkJCTUwIC0gb3JnX3NrYi0+bGVuKTsKKwkJCQlza2ItPmxlbiA9IDUwOworCQkJCWNvcHlfb2xkX3NrYihvcmdfc2tiLCBza2IpOworCQkJfQorCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycSgmaHdfcHJpdi0+aHdsb2NrKTsKKworCW51bSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCWxlZnQgPSBod19hbGxvY19wa3QoaHcsIHNrYi0+bGVuLCBudW0pOworCWlmIChsZWZ0KSB7CisJCWlmIChsZWZ0IDwgbnVtIHx8CisJCQkJKChody0+ZmVhdHVyZXMgJiBJUFY2X0NTVU1fR0VOX0hBQ0spICYmCisJCQkJKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpICYmCisJCQkJKEVUSF9QX0lQVjYgPT0gaHRvbnMoc2tiLT5wcm90b2NvbCkpKSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKm9yZ19za2IgPSBza2I7CisKKwkJCXNrYiA9IGRldl9hbGxvY19za2Iob3JnX3NrYi0+bGVuKTsKKwkJCWlmICghc2tiKQorCQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJCXNrYl9jb3B5X2FuZF9jc3VtX2Rldihvcmdfc2tiLCBza2ItPmRhdGEpOworCQkJb3JnX3NrYi0+aXBfc3VtbWVkID0gMDsKKwkJCXNrYi0+bGVuID0gb3JnX3NrYi0+bGVuOworCQkJY29weV9vbGRfc2tiKG9yZ19za2IsIHNrYik7CisJCX0KKwkJc2VuZF9wYWNrZXQoc2tiLCBkZXYpOworCQlpZiAobGVmdCA8PSBudW0pCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfSBlbHNlIHsKKwkJLyogU3RvcCB0aGUgdHJhbnNtaXQgcXVldWUgdW50aWwgcGFja2V0IGlzIGFsbG9jYXRlZC4gKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyYyA9IE5FVERFVl9UWF9CVVNZOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmaHdfcHJpdi0+aHdsb2NrKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBuZXRkZXZfdHhfdGltZW91dCAtIHRyYW5zbWl0IHRpbWVvdXQgcHJvY2Vzc2luZworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSB0cmFuc21pdCB0aW1lciBleHBpcmVzLiAgVGhhdCBpbmRpY2F0ZXMgdGhlCisgKiBoYXJkd2FyZSBpcyBub3QgcnVubmluZyBjb3JyZWN0bHkgYmVjYXVzZSB0cmFuc21pdCBpbnRlcnJ1cHRzIGFyZSBub3QKKyAqIHRyaWdnZXJlZCB0byBmcmVlIHVwIHJlc291cmNlcyBzbyB0aGF0IHRoZSB0cmFuc21pdCByb3V0aW5lIGNhbiBjb250aW51ZQorICogc2VuZGluZyBvdXQgcGFja2V0cy4gIFRoZSBoYXJkd2FyZSBpcyByZXNldCB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcmVzZXQ7CisKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJaW50IHBvcnQ7CisKKwlpZiAoaHctPmRldl9jb3VudCA+IDEpIHsKKwkJLyoKKwkJICogT25seSByZXNldCB0aGUgaGFyZHdhcmUgaWYgdGltZSBiZXR3ZWVuIGNhbGxzIGlzIGxvbmcKKwkJICogZW5vdWdoLgorCQkgKi8KKwkJaWYgKGppZmZpZXMgLSBsYXN0X3Jlc2V0IDw9IGRldi0+d2F0Y2hkb2dfdGltZW8pCisJCQlod19wcml2ID0gTlVMTDsKKwl9CisKKwlsYXN0X3Jlc2V0ID0gamlmZmllczsKKwlpZiAoaHdfcHJpdikgeworCQlod19kaXNfaW50cihodyk7CisJCWh3X2Rpc2FibGUoaHcpOworCisJCXRyYW5zbWl0X2NsZWFudXAoaHdfcHJpdiwgMCk7CisJCWh3X3Jlc2V0X3BrdHMoJmh3LT5yeF9kZXNjX2luZm8pOworCQlod19yZXNldF9wa3RzKCZody0+dHhfZGVzY19pbmZvKTsKKwkJa3N6X2luaXRfcnhfYnVmZmVycyhod19wcml2KTsKKworCQlod19yZXNldChodyk7CisKKwkJaHdfc2V0X2Rlc2NfYmFzZShodywKKwkJCWh3LT50eF9kZXNjX2luZm8ucmluZ19waHlzLAorCQkJaHctPnJ4X2Rlc2NfaW5mby5yaW5nX3BoeXMpOworCQlod19zZXRfYWRkcihodyk7CisJCWlmIChody0+YWxsX211bHRpKQorCQkJaHdfc2V0X211bHRpY2FzdChodywgaHctPmFsbF9tdWx0aSk7CisJCWVsc2UgaWYgKGh3LT5tdWx0aV9saXN0X3NpemUpCisJCQlod19zZXRfZ3JwX2FkZHIoaHcpOworCisJCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQkJaHdfc2V0X2FkZF9hZGRyKGh3KTsKKwkJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBTV0lUQ0hfUE9SVF9OVU07IHBvcnQrKykgeworCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldjsKKworCQkJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydCwKKwkJCQkJU1RQX1NUQVRFX0RJU0FCTEVEKTsKKworCQkJCXBvcnRfZGV2ID0gaHctPnBvcnRfaW5mb1twb3J0XS5wZGV2OworCQkJCWlmIChuZXRpZl9ydW5uaW5nKHBvcnRfZGV2KSkKKwkJCQkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBwb3J0LAorCQkJCQkJU1RQX1NUQVRFX1NJTVBMRSk7CisJCQl9CisJCX0KKworCQlod19lbmFibGUoaHcpOworCQlod19lbmFfaW50cihodyk7CisJfQorCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3N1bV92ZXJpZmllZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIHNob3J0IHByb3RvY29sOworCXN0cnVjdCBpcGhkciAqaXBoOworCisJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CisJaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgeworCQlwcm90b2NvbCA9IGlwaC0+dG90X2xlbjsKKwkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIFZMQU5fSExFTik7CisJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CisJfQorCWlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcnhfcHJvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qga3N6X2h3KiBodywKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHVuaW9uIGRlc2Nfc3RhdCBzdGF0dXMpCit7CisJaW50IHBhY2tldF9sZW47CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCByeF9zdGF0dXM7CisKKwkvKiBSZWNlaXZlZCBsZW5ndGggaW5jbHVkZXMgNC1ieXRlIENSQy4gKi8KKwlwYWNrZXRfbGVuID0gc3RhdHVzLnJ4LmZyYW1lX2xlbiAtIDQ7CisKKwlkbWFfYnVmID0gRE1BX0JVRkZFUihkZXNjKTsKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoCisJCWh3X3ByaXYtPnBkZXYsIGRtYV9idWYtPmRtYSwgcGFja2V0X2xlbiArIDQsCisJCVBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlkbyB7CisJCS8qIHNrYi0+ZGF0YSAhPSBza2ItPmhlYWQgKi8KKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwYWNrZXRfbGVuICsgMik7CisJCWlmICghc2tiKSB7CisJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCS8qCisJCSAqIEFsaWduIHNvY2tldCBidWZmZXIgaW4gNC1ieXRlIGJvdW5kYXJ5IGZvciBiZXR0ZXIKKwkJICogcGVyZm9ybWFuY2UuCisJCSAqLworCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCisJCW1lbWNweShza2JfcHV0KHNrYiwgcGFja2V0X2xlbiksCisJCQlkbWFfYnVmLT5za2ItPmRhdGEsIHBhY2tldF9sZW4pOworCX0gd2hpbGUgKDApOworCisJc2tiLT5kZXYgPSBkZXY7CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCisJaWYgKGh3LT5yeF9jZmcgJiAoRE1BX1JYX0NTVU1fVURQIHwgRE1BX1JYX0NTVU1fVENQKSkKKwkJY3N1bV92ZXJpZmllZChza2IpOworCisJLyogVXBkYXRlIHJlY2VpdmUgc3RhdGlzdGljcy4gKi8KKwlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbjsKKworCS8qIE5vdGlmeSB1cHBlciBsYXllciBmb3IgcmVjZWl2ZWQgcGFja2V0LiAqLworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlyeF9zdGF0dXMgPSBuZXRpZl9yeChza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV2X3Jjdl9wYWNrZXRzKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdikKK3sKKwlpbnQgbmV4dDsKKwl1bmlvbiBkZXNjX3N0YXQgc3RhdHVzOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+cG9ydF9pbmZvWzBdLnBkZXY7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnJ4X2Rlc2NfaW5mbzsKKwlpbnQgbGVmdCA9IGluZm8tPmFsbG9jOworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYzsKKwlpbnQgcmVjZWl2ZWQgPSAwOworCisJbmV4dCA9IGluZm8tPm5leHQ7CisJd2hpbGUgKGxlZnQtLSkgeworCQkvKiBHZXQgbmV4dCBkZXNjcmlwdG9yIHdoaWNoIGlzIG5vdCBoYXJkd2FyZSBvd25lZC4gKi8KKwkJZGVzYyA9ICZpbmZvLT5yaW5nW25leHRdOworCQlzdGF0dXMuZGF0YSA9IGxlMzJfdG9fY3B1KGRlc2MtPnBody0+Y3RybC5kYXRhKTsKKwkJaWYgKHN0YXR1cy5yeC5od19vd25lZCkKKwkJCWJyZWFrOworCisJCS8qIFN0YXR1cyB2YWxpZCBvbmx5IHdoZW4gbGFzdCBkZXNjcmlwdG9yIGJpdCBpcyBzZXQuICovCisJCWlmIChzdGF0dXMucngubGFzdF9kZXNjICYmIHN0YXR1cy5yeC5maXJzdF9kZXNjKSB7CisJCQlpZiAocnhfcHJvYyhkZXYsIGh3LCBkZXNjLCBzdGF0dXMpKQorCQkJCWdvdG8gcmVsZWFzZV9wYWNrZXQ7CisJCQlyZWNlaXZlZCsrOworCQl9CisKK3JlbGVhc2VfcGFja2V0OgorCQlyZWxlYXNlX2Rlc2MoZGVzYyk7CisJCW5leHQrKzsKKwkJbmV4dCAmPSBpbmZvLT5tYXNrOworCX0KKwlpbmZvLT5uZXh0ID0gbmV4dDsKKworCXJldHVybiByZWNlaXZlZDsKK30KKworc3RhdGljIGludCBwb3J0X3Jjdl9wYWNrZXRzKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdikKK3sKKwlpbnQgbmV4dDsKKwl1bmlvbiBkZXNjX3N0YXQgc3RhdHVzOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+cG9ydF9pbmZvWzBdLnBkZXY7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnJ4X2Rlc2NfaW5mbzsKKwlpbnQgbGVmdCA9IGluZm8tPmFsbG9jOworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYzsKKwlpbnQgcmVjZWl2ZWQgPSAwOworCisJbmV4dCA9IGluZm8tPm5leHQ7CisJd2hpbGUgKGxlZnQtLSkgeworCQkvKiBHZXQgbmV4dCBkZXNjcmlwdG9yIHdoaWNoIGlzIG5vdCBoYXJkd2FyZSBvd25lZC4gKi8KKwkJZGVzYyA9ICZpbmZvLT5yaW5nW25leHRdOworCQlzdGF0dXMuZGF0YSA9IGxlMzJfdG9fY3B1KGRlc2MtPnBody0+Y3RybC5kYXRhKTsKKwkJaWYgKHN0YXR1cy5yeC5od19vd25lZCkKKwkJCWJyZWFrOworCisJCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQkJLyogR2V0IHJlY2VpdmVkIHBvcnQgbnVtYmVyLiAqLworCQkJaW50IHAgPSBIV19UT19ERVZfUE9SVChzdGF0dXMucnguc3JjX3BvcnQpOworCisJCQlkZXYgPSBody0+cG9ydF9pbmZvW3BdLnBkZXY7CisJCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCQlnb3RvIHJlbGVhc2VfcGFja2V0OworCQl9CisKKwkJLyogU3RhdHVzIHZhbGlkIG9ubHkgd2hlbiBsYXN0IGRlc2NyaXB0b3IgYml0IGlzIHNldC4gKi8KKwkJaWYgKHN0YXR1cy5yeC5sYXN0X2Rlc2MgJiYgc3RhdHVzLnJ4LmZpcnN0X2Rlc2MpIHsKKwkJCWlmIChyeF9wcm9jKGRldiwgaHcsIGRlc2MsIHN0YXR1cykpCisJCQkJZ290byByZWxlYXNlX3BhY2tldDsKKwkJCXJlY2VpdmVkKys7CisJCX0KKworcmVsZWFzZV9wYWNrZXQ6CisJCXJlbGVhc2VfZGVzYyhkZXNjKTsKKwkJbmV4dCsrOworCQluZXh0ICY9IGluZm8tPm1hc2s7CisJfQorCWluZm8tPm5leHQgPSBuZXh0OworCisJcmV0dXJuIHJlY2VpdmVkOworfQorCitzdGF0aWMgaW50IGRldl9yY3Zfc3BlY2lhbChzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYpCit7CisJaW50IG5leHQ7CisJdW5pb24gZGVzY19zdGF0IHN0YXR1czsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPnBvcnRfaW5mb1swXS5wZGV2OworCXN0cnVjdCBrc3pfZGVzY19pbmZvICppbmZvID0gJmh3LT5yeF9kZXNjX2luZm87CisJaW50IGxlZnQgPSBpbmZvLT5hbGxvYzsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2M7CisJaW50IHJlY2VpdmVkID0gMDsKKworCW5leHQgPSBpbmZvLT5uZXh0OworCXdoaWxlIChsZWZ0LS0pIHsKKwkJLyogR2V0IG5leHQgZGVzY3JpcHRvciB3aGljaCBpcyBub3QgaGFyZHdhcmUgb3duZWQuICovCisJCWRlc2MgPSAmaW5mby0+cmluZ1tuZXh0XTsKKwkJc3RhdHVzLmRhdGEgPSBsZTMyX3RvX2NwdShkZXNjLT5waHctPmN0cmwuZGF0YSk7CisJCWlmIChzdGF0dXMucnguaHdfb3duZWQpCisJCQlicmVhazsKKworCQlpZiAoaHctPmRldl9jb3VudCA+IDEpIHsKKwkJCS8qIEdldCByZWNlaXZlZCBwb3J0IG51bWJlci4gKi8KKwkJCWludCBwID0gSFdfVE9fREVWX1BPUlQoc3RhdHVzLnJ4LnNyY19wb3J0KTsKKworCQkJZGV2ID0gaHctPnBvcnRfaW5mb1twXS5wZGV2OworCQkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCQkJZ290byByZWxlYXNlX3BhY2tldDsKKwkJfQorCisJCS8qIFN0YXR1cyB2YWxpZCBvbmx5IHdoZW4gbGFzdCBkZXNjcmlwdG9yIGJpdCBpcyBzZXQuICovCisJCWlmIChzdGF0dXMucngubGFzdF9kZXNjICYmIHN0YXR1cy5yeC5maXJzdF9kZXNjKSB7CisJCQkvKgorCQkJICogUmVjZWl2ZSB3aXRob3V0IGVycm9yLiAgV2l0aCByZWNlaXZlIGVycm9ycworCQkJICogZGlzYWJsZWQsIHBhY2tldHMgd2l0aCByZWNlaXZlIGVycm9ycyB3aWxsIGJlCisJCQkgKiBkcm9wcGVkLCBzbyBubyBuZWVkIHRvIGNoZWNrIHRoZSBlcnJvciBiaXQuCisJCQkgKi8KKwkJCWlmICghc3RhdHVzLnJ4LmVycm9yIHx8IChzdGF0dXMuZGF0YSAmCisJCQkJCUtTX0RFU0NfUlhfRVJST1JfQ09ORCkgPT0KKwkJCQkJS1NfREVTQ19SWF9FUlJPUl9UT09fTE9ORykgeworCQkJCWlmIChyeF9wcm9jKGRldiwgaHcsIGRlc2MsIHN0YXR1cykpCisJCQkJCWdvdG8gcmVsZWFzZV9wYWNrZXQ7CisJCQkJcmVjZWl2ZWQrKzsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQkJCS8qIFVwZGF0ZSByZWNlaXZlIGVycm9yIHN0YXRpc3RpY3MuICovCisJCQkJcHJpdi0+cG9ydC5jb3VudGVyW09JRF9DT1VOVEVSX1JDVl9FUlJPUl0rKzsKKwkJCX0KKwkJfQorCityZWxlYXNlX3BhY2tldDoKKwkJcmVsZWFzZV9kZXNjKGRlc2MpOworCQluZXh0Kys7CisJCW5leHQgJj0gaW5mby0+bWFzazsKKwl9CisJaW5mby0+bmV4dCA9IG5leHQ7CisKKwlyZXR1cm4gcmVjZWl2ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X3Byb2NfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gKHN0cnVjdCBkZXZfaW5mbyAqKSBkYXRhOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCisJaWYgKCFody0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCWlmICh1bmxpa2VseSghaHdfcHJpdi0+ZGV2X3Jjdihod19wcml2KSkpIHsKKworCQkvKiBJbiBjYXNlIHJlY2VpdmUgcHJvY2VzcyBpcyBzdXNwZW5kZWQgYmVjYXVzZSBvZiBvdmVycnVuLiAqLworCQlod19yZXN1bWVfcngoaHcpOworCisJCS8qIHRhc2tsZXRzIGFyZSBpbnRlcnJ1cHRpYmxlLiAqLworCQlzcGluX2xvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworCQlod190dXJuX29uX2ludHIoaHcsIEtTODg0WF9JTlRfUlhfTUFTSyk7CisJCXNwaW5fdW5sb2NrX2lycSgmaHdfcHJpdi0+aHdsb2NrKTsKKwl9IGVsc2UgeworCQlod19hY2tfaW50cihodywgS1M4ODRYX0lOVF9SWCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmh3X3ByaXYtPnJ4X3Rhc2tsZXQpOworCX0KK30KKworc3RhdGljIHZvaWQgdHhfcHJvY190YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSAoc3RydWN0IGRldl9pbmZvICopIGRhdGE7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlod19hY2tfaW50cihodywgS1M4ODRYX0lOVF9UWF9NQVNLKTsKKworCXR4X2RvbmUoaHdfcHJpdik7CisKKwkvKiB0YXNrbGV0cyBhcmUgaW50ZXJydXB0aWJsZS4gKi8KKwlzcGluX2xvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworCWh3X3R1cm5fb25faW50cihodywgS1M4ODRYX0lOVF9UWCk7CisJc3Bpbl91bmxvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3J4X3N0b3Aoc3RydWN0IGtzel9odyAqaHcpCit7CisJLyogUmVjZWl2ZSBqdXN0IGhhcyBiZWVuIHN0b3BwZWQuICovCisJaWYgKDAgPT0gaHctPnJ4X3N0b3ApCisJCWh3LT5pbnRyX21hc2sgJj0gfktTODg0WF9JTlRfUlhfU1RPUFBFRDsKKwllbHNlIGlmIChody0+cnhfc3RvcCA+IDEpIHsKKwkJaWYgKGh3LT5lbmFibGVkICYmIChody0+cnhfY2ZnICYgRE1BX1JYX0VOQUJMRSkpIHsKKwkJCWh3X3N0YXJ0X3J4KGh3KTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5pbnRyX21hc2sgJj0gfktTODg0WF9JTlRfUlhfU1RPUFBFRDsKKwkJCWh3LT5yeF9zdG9wID0gMDsKKwkJfQorCX0gZWxzZQorCQkvKiBSZWNlaXZlIGp1c3QgaGFzIGJlZW4gc3RhcnRlZC4gKi8KKwkJaHctPnJ4X3N0b3ArKzsKK30KKworLyoqCisgKiBuZXRkZXZfaW50ciAtIGludGVycnVwdCBoYW5kbGluZworICogQGlycToJSW50ZXJydXB0IG51bWJlci4KKyAqIEBkZXZfaWQ6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHVwcGVyIG5ldHdvcmsgbGF5ZXIgdG8gc2lnbmFsIGludGVycnVwdC4KKyAqCisgKiBSZXR1cm4gSVJRX0hBTkRMRUQgaWYgaW50ZXJydXB0IGlzIGhhbmRsZWQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXRkZXZfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdWludCBpbnRfZW5hYmxlID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlod19yZWFkX2ludHIoaHcsICZpbnRfZW5hYmxlKTsKKworCS8qIE5vdCBvdXIgaW50ZXJydXB0ISAqLworCWlmICghaW50X2VuYWJsZSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZG8geworCQlod19hY2tfaW50cihodywgaW50X2VuYWJsZSk7CisJCWludF9lbmFibGUgJj0gaHctPmludHJfbWFzazsKKworCQlpZiAodW5saWtlbHkoaW50X2VuYWJsZSAmIEtTODg0WF9JTlRfVFhfTUFTSykpIHsKKwkJCWh3X2Rpc19pbnRyX2JpdChodywgS1M4ODRYX0lOVF9UWF9NQVNLKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmh3X3ByaXYtPnR4X3Rhc2tsZXQpOworCQl9CisKKwkJaWYgKGxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9SWCkpIHsKKwkJCWh3X2Rpc19pbnRyX2JpdChodywgS1M4ODRYX0lOVF9SWCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZod19wcml2LT5yeF90YXNrbGV0KTsKKwkJfQorCisJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9SWF9PVkVSUlVOKSkgeworCQkJcHJpdi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCWh3X3Jlc3VtZV9yeChodyk7CisJCX0KKworCQlpZiAodW5saWtlbHkoaW50X2VuYWJsZSAmIEtTODg0WF9JTlRfUEhZKSkgeworCQkJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisKKwkJCWh3LT5mZWF0dXJlcyB8PSBMSU5LX0lOVF9XT1JLSU5HOworCQkJcG9ydF9nZXRfbGlua19zcGVlZChwb3J0KTsKKwkJfQorCisJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9SWF9TVE9QUEVEKSkgeworCQkJaGFuZGxlX3J4X3N0b3AoaHcpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodW5saWtlbHkoaW50X2VuYWJsZSAmIEtTODg0WF9JTlRfVFhfU1RPUFBFRCkpIHsKKwkJCXUzMiBkYXRhOworCisJCQlody0+aW50cl9tYXNrICY9IH5LUzg4NFhfSU5UX1RYX1NUT1BQRUQ7CisJCQlwcmludGsoS0VSTl9JTkZPICJUeCBzdG9wcGVkXG4iKTsKKwkJCWRhdGEgPSByZWFkbChody0+aW8gKyBLU19ETUFfVFhfQ1RSTCk7CisJCQlpZiAoIShkYXRhICYgRE1BX1RYX0VOQUJMRSkpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiVHggZGlzYWJsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgwKTsKKworCWh3X2VuYV9pbnRyKGh3KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIExpbnV4IG5ldHdvcmsgZGV2aWNlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5leHRfamlmZmllczsKKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBuZXRkZXZfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKworCWh3X2Rpc19pbnRyKCZod19wcml2LT5odyk7CisJbmV0ZGV2X2ludHIoZGV2LT5pcnEsIGRldik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYnJpZGdlX2NoYW5nZShzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgcG9ydDsKKwl1OCAgbWVtYmVyOworCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCisJLyogTm8gcG9ydHMgaW4gZm9yd2FyZGluZyBzdGF0ZS4gKi8KKwlpZiAoIXN3LT5tZW1iZXIpIHsKKwkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBTV0lUQ0hfUE9SVF9OVU0sIFNUUF9TVEFURV9TSU1QTEUpOworCQlzd19ibG9ja19hZGRyKGh3KTsKKwl9CisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFNXSVRDSF9QT1JUX05VTTsgcG9ydCsrKSB7CisJCWlmIChTVFBfU1RBVEVfRk9SV0FSRElORyA9PSBzdy0+cG9ydF9jZmdbcG9ydF0uc3RwX3N0YXRlKQorCQkJbWVtYmVyID0gSE9TVF9NQVNLIHwgc3ctPm1lbWJlcjsKKwkJZWxzZQorCQkJbWVtYmVyID0gSE9TVF9NQVNLIHwgKDEgPDwgcG9ydCk7CisJCWlmIChtZW1iZXIgIT0gc3ctPnBvcnRfY2ZnW3BvcnRdLm1lbWJlcikKKwkJCXN3X2NmZ19wb3J0X2Jhc2VfdmxhbihodywgcG9ydCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qKgorICogbmV0ZGV2X2Nsb3NlIC0gY2xvc2UgbmV0d29yayBkZXZpY2UKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2VzcyB0aGUgY2xvc2Ugb3BlcmF0aW9uIG9mIG5ldHdvcmsgZGV2aWNlLiAgVGhpcyBpcyBjYXVzZWQKKyAqIGJ5IHRoZSB1c2VyIGNvbW1hbmQgImlmY29uZmlnIGV0aFggZG93bi4iCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlpbnQgcGk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlrc3pfc3RvcF90aW1lcigmcHJpdi0+bW9uaXRvcl90aW1lcl9pbmZvKTsKKworCS8qIE5lZWQgdG8gc2h1dCB0aGUgcG9ydCBtYW51YWxseSBpbiBtdWx0aXBsZSBkZXZpY2UgaW50ZXJmYWNlcyBtb2RlLiAqLworCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIHBvcnQtPmZpcnN0X3BvcnQsIFNUUF9TVEFURV9ESVNBQkxFRCk7CisKKwkJLyogUG9ydCBpcyBjbG9zZWQuICBOZWVkIHRvIGNoYW5nZSBicmlkZ2Ugc2V0dGluZy4gKi8KKwkJaWYgKGh3LT5mZWF0dXJlcyAmIFNUUF9TVVBQT1JUKSB7CisJCQlwaSA9IDEgPDwgcG9ydC0+Zmlyc3RfcG9ydDsKKwkJCWlmIChody0+a3N6X3N3aXRjaC0+bWVtYmVyICYgcGkpIHsKKwkJCQlody0+a3N6X3N3aXRjaC0+bWVtYmVyICY9IH5waTsKKwkJCQlicmlkZ2VfY2hhbmdlKGh3KTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocG9ydC0+Zmlyc3RfcG9ydCA+IDApCisJCWh3X2RlbF9hZGRyKGh3LCBkZXYtPmRldl9hZGRyKTsKKwlpZiAoIWh3X3ByaXYtPndvbF9lbmFibGUpCisJCXBvcnRfc2V0X3Bvd2VyX3NhdmluZyhwb3J0LCB0cnVlKTsKKworCWlmIChwcml2LT5tdWx0aWNhc3QpCisJCS0taHctPmFsbF9tdWx0aTsKKwlpZiAocHJpdi0+cHJvbWlzY3VvdXMpCisJCS0taHctPnByb21pc2N1b3VzOworCisJaHdfcHJpdi0+b3BlbmVkLS07CisJaWYgKCEoaHdfcHJpdi0+b3BlbmVkKSkgeworCQlrc3pfc3RvcF90aW1lcigmaHdfcHJpdi0+bWliX3RpbWVyX2luZm8pOworCQlmbHVzaF93b3JrKCZod19wcml2LT5taWJfcmVhZCk7CisKKwkJaHdfZGlzX2ludHIoaHcpOworCQlod19kaXNhYmxlKGh3KTsKKwkJaHdfY2xyX211bHRpY2FzdChodyk7CisKKwkJLyogRGVsYXkgZm9yIHJlY2VpdmUgdGFzayB0byBzdG9wIHNjaGVkdWxpbmcgaXRzZWxmLiAqLworCQltc2xlZXAoMjAwMCAvIEhaKTsKKworCQl0YXNrbGV0X2Rpc2FibGUoJmh3X3ByaXYtPnJ4X3Rhc2tsZXQpOworCQl0YXNrbGV0X2Rpc2FibGUoJmh3X3ByaXYtPnR4X3Rhc2tsZXQpOworCQlmcmVlX2lycShkZXYtPmlycSwgaHdfcHJpdi0+ZGV2KTsKKworCQl0cmFuc21pdF9jbGVhbnVwKGh3X3ByaXYsIDApOworCQlod19yZXNldF9wa3RzKCZody0+cnhfZGVzY19pbmZvKTsKKwkJaHdfcmVzZXRfcGt0cygmaHctPnR4X2Rlc2NfaW5mbyk7CisKKwkJLyogQ2xlYW4gb3V0IHN0YXRpYyBNQUMgdGFibGUgd2hlbiB0aGUgc3dpdGNoIGlzIHNodXRkb3duLiAqLworCQlpZiAoaHctPmZlYXR1cmVzICYgU1RQX1NVUFBPUlQpCisJCQlzd19jbHJfc3RhX21hY190YWJsZShodyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh3X2NmZ19odWdlX2ZyYW1lKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiwgc3RydWN0IGtzel9odyAqaHcpCit7CisJaWYgKGh3LT5rc3pfc3dpdGNoKSB7CisJCXUzMiBkYXRhOworCisJCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfMl9PRkZTRVQpOworCQlpZiAoaHctPmZlYXR1cmVzICYgUlhfSFVHRV9GUkFNRSkKKwkJCWRhdGEgfD0gU1dJVENIX0hVR0VfUEFDS0VUOworCQllbHNlCisJCQlkYXRhICY9IH5TV0lUQ0hfSFVHRV9QQUNLRVQ7CisJCXdyaXRldyhkYXRhLCBody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfMl9PRkZTRVQpOworCX0KKwlpZiAoaHctPmZlYXR1cmVzICYgUlhfSFVHRV9GUkFNRSkgeworCQlody0+cnhfY2ZnIHw9IERNQV9SWF9FUlJPUjsKKwkJaHdfcHJpdi0+ZGV2X3JjdiA9IGRldl9yY3Zfc3BlY2lhbDsKKwl9IGVsc2UgeworCQlody0+cnhfY2ZnICY9IH5ETUFfUlhfRVJST1I7CisJCWlmIChody0+ZGV2X2NvdW50ID4gMSkKKwkJCWh3X3ByaXYtPmRldl9yY3YgPSBwb3J0X3Jjdl9wYWNrZXRzOworCQllbHNlCisJCQlod19wcml2LT5kZXZfcmN2ID0gZGV2X3Jjdl9wYWNrZXRzOworCX0KK30KKworc3RhdGljIGludCBwcmVwYXJlX2hhcmR3YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCWludCByYyA9IDA7CisKKwkvKiBSZW1lbWJlciB0aGUgbmV0d29yayBkZXZpY2UgdGhhdCByZXF1ZXN0cyBpbnRlcnJ1cHRzLiAqLworCWh3X3ByaXYtPmRldiA9IGRldjsKKwlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBuZXRkZXZfaW50ciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwl0YXNrbGV0X2VuYWJsZSgmaHdfcHJpdi0+cnhfdGFza2xldCk7CisJdGFza2xldF9lbmFibGUoJmh3X3ByaXYtPnR4X3Rhc2tsZXQpOworCisJaHctPnByb21pc2N1b3VzID0gMDsKKwlody0+YWxsX211bHRpID0gMDsKKwlody0+bXVsdGlfbGlzdF9zaXplID0gMDsKKworCWh3X3Jlc2V0KGh3KTsKKworCWh3X3NldF9kZXNjX2Jhc2UoaHcsCisJCWh3LT50eF9kZXNjX2luZm8ucmluZ19waHlzLCBody0+cnhfZGVzY19pbmZvLnJpbmdfcGh5cyk7CisJaHdfc2V0X2FkZHIoaHcpOworCWh3X2NmZ19odWdlX2ZyYW1lKGh3X3ByaXYsIGh3KTsKKwlrc3pfaW5pdF9yeF9idWZmZXJzKGh3X3ByaXYpOworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9vcGVuIC0gb3BlbiBuZXR3b3JrIGRldmljZQorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzIHRoZSBvcGVuIG9wZXJhdGlvbiBvZiBuZXR3b3JrIGRldmljZS4gIFRoaXMgaXMgY2F1c2VkCisgKiBieSB0aGUgdXNlciBjb21tYW5kICJpZmNvbmZpZyBldGhYIHVwLiIKKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJaW50IGk7CisJaW50IHA7CisJaW50IHJjID0gMDsKKworCXByaXYtPm11bHRpY2FzdCA9IDA7CisJcHJpdi0+cHJvbWlzY3VvdXMgPSAwOworCisJLyogUmVzZXQgZGV2aWNlIHN0YXRpc3RpY3MuICovCisJbWVtc2V0KCZwcml2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJbWVtc2V0KCh2b2lkICopIHBvcnQtPmNvdW50ZXIsIDAsCisJCShzaXplb2YodTY0KSAqIE9JRF9DT1VOVEVSX0xBU1QpKTsKKworCWlmICghKGh3X3ByaXYtPm9wZW5lZCkpIHsKKwkJcmMgPSBwcmVwYXJlX2hhcmR3YXJlKGRldik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5taWJfcG9ydF9jbnQ7IGkrKykgeworCQkJaWYgKG5leHRfamlmZmllcyA8IGppZmZpZXMpCisJCQkJbmV4dF9qaWZmaWVzID0gamlmZmllcyArIEhaICogMjsKKwkJCWVsc2UKKwkJCQluZXh0X2ppZmZpZXMgKz0gSFogKiAxOworCQkJaHdfcHJpdi0+Y291bnRlcltpXS50aW1lID0gbmV4dF9qaWZmaWVzOworCQkJaHctPnBvcnRfbWliW2ldLnN0YXRlID0gbWVkaWFfZGlzY29ubmVjdGVkOworCQkJcG9ydF9pbml0X2NudChodywgaSk7CisJCX0KKwkJaWYgKGh3LT5rc3pfc3dpdGNoKQorCQkJaHctPnBvcnRfbWliW0hPU1RfUE9SVF0uc3RhdGUgPSBtZWRpYV9jb25uZWN0ZWQ7CisJCWVsc2UgeworCQkJaHdfYWRkX3dvbF9iY2FzdChodyk7CisJCQlod19jZmdfd29sX3BtZShodywgMCk7CisJCQlod19jbHJfd29sX3BtZV9zdGF0dXMoJmh3X3ByaXYtPmh3KTsKKwkJfQorCX0KKwlwb3J0X3NldF9wb3dlcl9zYXZpbmcocG9ydCwgZmFsc2UpOworCisJZm9yIChpID0gMCwgcCA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5wb3J0X2NudDsgaSsrLCBwKyspIHsKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSB0byBpbnZhbGlkIHZhbHVlIHNvIHRoYXQgbGluayBkZXRlY3Rpb24KKwkJICogaXMgZG9uZS4KKwkJICovCisJCWh3LT5wb3J0X2luZm9bcF0ucGFydG5lciA9IDB4RkY7CisJCWh3LT5wb3J0X2luZm9bcF0uc3RhdGUgPSBtZWRpYV9kaXNjb25uZWN0ZWQ7CisJfQorCisJLyogTmVlZCB0byBvcGVuIHRoZSBwb3J0IGluIG11bHRpcGxlIGRldmljZSBpbnRlcmZhY2VzIG1vZGUuICovCisJaWYgKGh3LT5kZXZfY291bnQgPiAxKSB7CisJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydC0+Zmlyc3RfcG9ydCwgU1RQX1NUQVRFX1NJTVBMRSk7CisJCWlmIChwb3J0LT5maXJzdF9wb3J0ID4gMCkKKwkJCWh3X2FkZF9hZGRyKGh3LCBkZXYtPmRldl9hZGRyKTsKKwl9CisKKwlwb3J0X2dldF9saW5rX3NwZWVkKHBvcnQpOworCWlmIChwb3J0LT5mb3JjZV9saW5rKQorCQlwb3J0X2ZvcmNlX2xpbmtfc3BlZWQocG9ydCk7CisJZWxzZQorCQlwb3J0X3NldF9saW5rX3NwZWVkKHBvcnQpOworCisJaWYgKCEoaHdfcHJpdi0+b3BlbmVkKSkgeworCQlod19zZXR1cF9pbnRyKGh3KTsKKwkJaHdfZW5hYmxlKGh3KTsKKwkJaHdfZW5hX2ludHIoaHcpOworCisJCWlmIChody0+bWliX3BvcnRfY250KQorCQkJa3N6X3N0YXJ0X3RpbWVyKCZod19wcml2LT5taWJfdGltZXJfaW5mbywKKwkJCQlod19wcml2LT5taWJfdGltZXJfaW5mby5wZXJpb2QpOworCX0KKworCWh3X3ByaXYtPm9wZW5lZCsrOworCisJa3N6X3N0YXJ0X3RpbWVyKCZwcml2LT5tb25pdG9yX3RpbWVyX2luZm8sCisJCXByaXYtPm1vbml0b3JfdGltZXJfaW5mby5wZXJpb2QpOworCisJcHJpdi0+bWVkaWFfc3RhdGUgPSBwb3J0LT5saW5rZWQtPnN0YXRlOworCisJaWYgKG1lZGlhX2Nvbm5lY3RlZCA9PSBwcml2LT5tZWRpYV9zdGF0ZSkKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCWVsc2UKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpCisJCXByaW50ayhLRVJOX0lORk8gIiVzIGxpbmsgJXNcbiIsIGRldi0+bmFtZSwKKwkJCShtZWRpYV9jb25uZWN0ZWQgPT0gcHJpdi0+bWVkaWFfc3RhdGUgPworCQkJIm9uIiA6ICJvZmYiKSk7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJYIGVycm9ycyA9IHJ4X2Vycm9ycyAqLworLyogUlggZHJvcHBlZCA9IHJ4X2Ryb3BwZWQgKi8KKy8qIFJYIG92ZXJydW5zID0gcnhfZmlmb19lcnJvcnMgKi8KKy8qIFJYIGZyYW1lID0gcnhfY3JjX2Vycm9ycyArIHJ4X2ZyYW1lX2Vycm9ycyArIHJ4X2xlbmd0aF9lcnJvcnMgKi8KKy8qIFRYIGVycm9ycyA9IHR4X2Vycm9ycyAqLworLyogVFggZHJvcHBlZCA9IHR4X2Ryb3BwZWQgKi8KKy8qIFRYIG92ZXJydW5zID0gdHhfZmlmb19lcnJvcnMgKi8KKy8qIFRYIGNhcnJpZXIgPSB0eF9hYm9ydGVkX2Vycm9ycyArIHR4X2NhcnJpZXJfZXJyb3JzICsgdHhfd2luZG93X2Vycm9ycyAqLworLyogY29sbGlzaW9ucyA9IGNvbGxpc2lvbnMgKi8KKworLyoqCisgKiBuZXRkZXZfcXVlcnlfc3RhdGlzdGljcyAtIHF1ZXJ5IG5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgbmV0d29yayBkZXZpY2UuICBUaGUgZGV2aWNlCisgKiBuZWVkcyBub3QgYmUgb3BlbmVkLgorICoKKyAqIFJldHVybiBuZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldGRldl9xdWVyeV9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZwcml2LT5hZGFwdGVyLT5odzsKKwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CisJaW50IGk7CisJaW50IHA7CisKKwlwcml2LT5zdGF0cy5yeF9lcnJvcnMgPSBwb3J0LT5jb3VudGVyW09JRF9DT1VOVEVSX1JDVl9FUlJPUl07CisJcHJpdi0+c3RhdHMudHhfZXJyb3JzID0gcG9ydC0+Y291bnRlcltPSURfQ09VTlRFUl9YTUlUX0VSUk9SXTsKKworCS8qIFJlc2V0IHRvIHplcm8gdG8gYWRkIGNvdW50IGxhdGVyLiAqLworCXByaXYtPnN0YXRzLm11bHRpY2FzdCA9IDA7CisJcHJpdi0+c3RhdHMuY29sbGlzaW9ucyA9IDA7CisJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IDA7CisJcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzID0gMDsKKwlwcml2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gMDsKKworCWZvciAoaSA9IDAsIHAgPSBwb3J0LT5maXJzdF9wb3J0OyBpIDwgcG9ydC0+bWliX3BvcnRfY250OyBpKyssIHArKykgeworCQltaWIgPSAmaHctPnBvcnRfbWliW3BdOworCisJCXByaXYtPnN0YXRzLm11bHRpY2FzdCArPSAodW5zaWduZWQgbG9uZykKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9NVUxUSUNBU1RdOworCisJCXByaXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHVuc2lnbmVkIGxvbmcpCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfVFhfVE9UQUxfQ09MTElTSU9OXTsKKworCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9ICh1bnNpZ25lZCBsb25nKSgKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9VTkRFUlNJWkVdICsKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9GUkFHTUVOVF0gKworCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX09WRVJTSVpFXSArCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfSkFCQkVSXSk7CisJCXByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gKHVuc2lnbmVkIGxvbmcpCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfQ1JDX0VSUl07CisJCXByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykoCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfQUxJR05NRU5UX0VSUl0gKworCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX1NZTUJPTF9FUlJdKTsKKworCQlwcml2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzICs9ICh1bnNpZ25lZCBsb25nKQorCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1RYX0xBVEVfQ09MTElTSU9OXTsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfbWFjX2FkZHJlc3MgLSBzZXQgbmV0d29yayBkZXZpY2UgTUFDIGFkZHJlc3MKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGFkZHI6CUJ1ZmZlciBvZiBNQUMgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmV0d29yayBkZXZpY2UuCisgKgorICogUmV0dXJuIDAgdG8gaW5kaWNhdGUgc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBzb2NrYWRkciAqbWFjID0gYWRkcjsKKwl1aW50IGludGVycnVwdDsKKworCWlmIChwcml2LT5wb3J0LmZpcnN0X3BvcnQgPiAwKQorCQlod19kZWxfYWRkcihodywgZGV2LT5kZXZfYWRkcik7CisJZWxzZSB7CisJCWh3LT5tYWNfb3ZlcnJpZGUgPSAxOworCQltZW1jcHkoaHctPm92ZXJyaWRlX2FkZHIsIG1hYy0+c2FfZGF0YSwgTUFDX0FERFJfTEVOKTsKKwl9CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjLT5zYV9kYXRhLCBNQVhfQUREUl9MRU4pOworCisJaW50ZXJydXB0ID0gaHdfYmxvY2tfaW50cihodyk7CisKKwlpZiAocHJpdi0+cG9ydC5maXJzdF9wb3J0ID4gMCkKKwkJaHdfYWRkX2FkZHIoaHcsIGRldi0+ZGV2X2FkZHIpOworCWVsc2UKKwkJaHdfc2V0X2FkZHIoaHcpOworCWh3X3Jlc3RvcmVfaW50cihodywgaW50ZXJydXB0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcHJpdiAqcHJpdiwKKwlzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHByb21pc2N1b3VzKQoreworCWlmIChwcm9taXNjdW91cyAhPSBwcml2LT5wcm9taXNjdW91cykgeworCQl1OCBwcmV2X3N0YXRlID0gaHctPnByb21pc2N1b3VzOworCisJCWlmIChwcm9taXNjdW91cykKKwkJCSsraHctPnByb21pc2N1b3VzOworCQllbHNlCisJCQktLWh3LT5wcm9taXNjdW91czsKKwkJcHJpdi0+cHJvbWlzY3VvdXMgPSBwcm9taXNjdW91czsKKworCQkvKiBUdXJuIG9uL29mZiBwcm9taXNjdW91cyBtb2RlLiAqLworCQlpZiAoaHctPnByb21pc2N1b3VzIDw9IDEgJiYgcHJldl9zdGF0ZSA8PSAxKQorCQkJaHdfc2V0X3Byb21pc2N1b3VzKGh3LCBody0+cHJvbWlzY3VvdXMpOworCisJCS8qCisJCSAqIFBvcnQgaXMgbm90IGluIHByb21pc2N1b3VzIG1vZGUsIG1lYW5pbmcgaXQgaXMgcmVsZWFzZWQKKwkJICogZnJvbSB0aGUgYnJpZGdlLgorCQkgKi8KKwkJaWYgKChody0+ZmVhdHVyZXMgJiBTVFBfU1VQUE9SVCkgJiYgIXByb21pc2N1b3VzICYmCisJCQkJZGV2LT5icl9wb3J0KSB7CisJCQlzdHJ1Y3Qga3N6X3N3aXRjaCAqc3cgPSBody0+a3N6X3N3aXRjaDsKKwkJCWludCBwb3J0ID0gcHJpdi0+cG9ydC5maXJzdF9wb3J0OworCisJCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIHBvcnQsIFNUUF9TVEFURV9ESVNBQkxFRCk7CisJCQlwb3J0ID0gMSA8PCBwb3J0OworCQkJaWYgKHN3LT5tZW1iZXIgJiBwb3J0KSB7CisJCQkJc3ctPm1lbWJlciAmPSB+cG9ydDsKKwkJCQlicmlkZ2VfY2hhbmdlKGh3KTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZGV2X3NldF9tdWx0aWNhc3Qoc3RydWN0IGRldl9wcml2ICpwcml2LCBzdHJ1Y3Qga3N6X2h3ICpodywKKwlpbnQgbXVsdGljYXN0KQoreworCWlmIChtdWx0aWNhc3QgIT0gcHJpdi0+bXVsdGljYXN0KSB7CisJCXU4IGFsbF9tdWx0aSA9IGh3LT5hbGxfbXVsdGk7CisKKwkJaWYgKG11bHRpY2FzdCkKKwkJCSsraHctPmFsbF9tdWx0aTsKKwkJZWxzZQorCQkJLS1ody0+YWxsX211bHRpOworCQlwcml2LT5tdWx0aWNhc3QgPSBtdWx0aWNhc3Q7CisKKwkJLyogVHVybiBvbi9vZmYgYWxsIG11bHRpY2FzdCBtb2RlLiAqLworCQlpZiAoaHctPmFsbF9tdWx0aSA8PSAxICYmIGFsbF9tdWx0aSA8PSAxKQorCQkJaHdfc2V0X211bHRpY2FzdChodywgaHctPmFsbF9tdWx0aSk7CisJfQorfQorCisvKioKKyAqIG5ldGRldl9zZXRfcnhfbW9kZQorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gc2V0IG11bHRpY2FzdCBhZGRyZXNzZXMgb3IgcHV0IHRoZSBuZXR3b3JrIGRldmljZQorICogaW50byBwcm9taXNjdW91cyBtb2RlLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJaW50IG11bHRpY2FzdCA9IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKTsKKworCWRldl9zZXRfcHJvbWlzY3VvdXMoZGV2LCBwcml2LCBodywgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpOworCisJaWYgKGh3X3ByaXYtPmh3LmRldl9jb3VudCA+IDEpCisJCW11bHRpY2FzdCB8PSAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpOworCWRldl9zZXRfbXVsdGljYXN0KHByaXYsIGh3LCBtdWx0aWNhc3QpOworCisJLyogQ2Fubm90IHVzZSBkaWZmZXJlbnQgaGFzaGVzIGluIG11bHRpcGxlIGRldmljZSBpbnRlcmZhY2VzIG1vZGUuICovCisJaWYgKGh3X3ByaXYtPmh3LmRldl9jb3VudCA+IDEpCisJCXJldHVybjsKKworCWlmICgoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQlpbnQgaSA9IDA7CisKKwkJLyogTGlzdCB0b28gYmlnIHRvIHN1cHBvcnQgc28gdHVybiBvbiBhbGwgbXVsdGljYXN0IG1vZGUuICovCisJCWlmIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVF9MSVNUKSB7CisJCQlpZiAoTUFYX01VTFRJQ0FTVF9MSVNUICE9IGh3LT5tdWx0aV9saXN0X3NpemUpIHsKKwkJCQlody0+bXVsdGlfbGlzdF9zaXplID0gTUFYX01VTFRJQ0FTVF9MSVNUOworCQkJCSsraHctPmFsbF9tdWx0aTsKKwkJCQlod19zZXRfbXVsdGljYXN0KGh3LCBody0+YWxsX211bHRpKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgZGV2KSB7CisJCQlpZiAoISgqbWNfcHRyLT5kbWlfYWRkciAmIDEpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGkgPj0gTUFYX01VTFRJQ0FTVF9MSVNUKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KGh3LT5tdWx0aV9saXN0W2krK10sIG1jX3B0ci0+ZG1pX2FkZHIsCisJCQkJTUFDX0FERFJfTEVOKTsKKwkJfQorCQlody0+bXVsdGlfbGlzdF9zaXplID0gKHU4KSBpOworCQlod19zZXRfZ3JwX2FkZHIoaHcpOworCX0gZWxzZSB7CisJCWlmIChNQVhfTVVMVElDQVNUX0xJU1QgPT0gaHctPm11bHRpX2xpc3Rfc2l6ZSkgeworCQkJLS1ody0+YWxsX211bHRpOworCQkJaHdfc2V0X211bHRpY2FzdChodywgaHctPmFsbF9tdWx0aSk7CisJCX0KKwkJaHctPm11bHRpX2xpc3Rfc2l6ZSA9IDA7CisJCWh3X2Nscl9tdWx0aWNhc3QoaHcpOworCX0KK30KKworc3RhdGljIGludCBuZXRkZXZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJaW50IGh3X210dTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBDYW5ub3QgdXNlIGRpZmZlcmVudCBNVFUgaW4gbXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMgbW9kZS4gKi8KKwlpZiAoaHctPmRldl9jb3VudCA+IDEpCisJCWlmIChkZXYgIT0gaHdfcHJpdi0+ZGV2KQorCQkJcmV0dXJuIDA7CisJaWYgKG5ld19tdHUgPCA2MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5tdHUgIT0gbmV3X210dSkgeworCQlod19tdHUgPSBuZXdfbXR1ICsgRVRIRVJORVRfSEVBREVSX1NJWkUgKyA0OworCQlpZiAoaHdfbXR1ID4gTUFYX1JYX0JVRl9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChod19tdHUgPiBSRUdVTEFSX1JYX0JVRl9TSVpFKSB7CisJCQlody0+ZmVhdHVyZXMgfD0gUlhfSFVHRV9GUkFNRTsKKwkJCWh3X210dSA9IE1BWF9SWF9CVUZfU0laRTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5mZWF0dXJlcyAmPSB+UlhfSFVHRV9GUkFNRTsKKwkJCWh3X210dSA9IFJFR1VMQVJfUlhfQlVGX1NJWkU7CisJCX0KKwkJaHdfbXR1ID0gKGh3X210dSArIDMpICYgfjM7CisJCWh3X3ByaXYtPm10dSA9IGh3X210dTsKKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuZXRkZXZfaW9jdGwgLSBJL08gY29udHJvbCBwcm9jZXNzaW5nCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBpZnI6CUludGVyZmFjZSByZXF1ZXN0IHN0cnVjdHVyZS4KKyAqIEBjbWQ6CUkvTyBjb250cm9sIGNvZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb2Nlc3MgSS9PIGNvbnRyb2wgY2FsbHMuCisgKgorICogUmV0dXJuIDAgdG8gaW5kaWNhdGUgc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBuZXRkZXZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCWludCByYzsKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnByaXYtPnByb2Nfc2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGFzc3VtZSBzdWNjZXNzICovCisJcmMgPSAwOworCXN3aXRjaCAoY21kKSB7CisJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCisJY2FzZSBTSU9DR01JSVBIWToKKwkJZGF0YS0+cGh5X2lkID0gcHJpdi0+aWQ7CisKKwkJLyogRmFsbHRocm91Z2guLi4gKi8KKworCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KKwljYXNlIFNJT0NHTUlJUkVHOgorCQlpZiAoZGF0YS0+cGh5X2lkICE9IHByaXYtPmlkIHx8IGRhdGEtPnJlZ19udW0gPj0gNikKKwkJCXJlc3VsdCA9IC1FSU87CisJCWVsc2UKKwkJCWh3X3JfcGh5KGh3LCBwb3J0LT5saW5rZWQtPnBvcnRfaWQsIGRhdGEtPnJlZ19udW0sCisJCQkJJmRhdGEtPnZhbF9vdXQpOworCQlicmVhazsKKworCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCisJY2FzZSBTSU9DU01JSVJFRzoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmVzdWx0ID0gLUVQRVJNOworCQllbHNlIGlmIChkYXRhLT5waHlfaWQgIT0gcHJpdi0+aWQgfHwgZGF0YS0+cmVnX251bSA+PSA2KQorCQkJcmVzdWx0ID0gLUVJTzsKKwkJZWxzZQorCQkJaHdfd19waHkoaHcsIHBvcnQtPmxpbmtlZC0+cG9ydF9pZCwgZGF0YS0+cmVnX251bSwKKwkJCQlkYXRhLT52YWxfaW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IC1FT1BOT1RTVVBQOworCX0KKworCXVwKCZwcml2LT5wcm9jX3NlbSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogTUlJIHN1cHBvcnQKKyAqLworCisvKioKKyAqIG1kaW9fcmVhZCAtIHJlYWQgUEhZIHJlZ2lzdGVyCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBwaHlfaWQ6CVRoZSBQSFkgaWQuCisgKiBAcmVnX251bToJVGhlIHJlZ2lzdGVyIG51bWJlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFBIWSByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBSZXR1cm4gdGhlIHJlZ2lzdGVyIHZhbHVlLgorICovCitzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBrc3pfaHcgKmh3ID0gcG9ydC0+aHc7CisJdTE2IHZhbF9vdXQ7CisKKwlod19yX3BoeShodywgcG9ydC0+bGlua2VkLT5wb3J0X2lkLCByZWdfbnVtIDw8IDEsICZ2YWxfb3V0KTsKKwlyZXR1cm4gdmFsX291dDsKK30KKworLyoqCisgKiBtZGlvX3dyaXRlIC0gc2V0IFBIWSByZWdpc3RlcgorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAcGh5X2lkOglUaGUgUEhZIGlkLgorICogQHJlZ19udW06CVRoZSByZWdpc3RlciBudW1iZXIuCisgKiBAdmFsOglUaGUgcmVnaXN0ZXIgdmFsdWUuCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2V0cyB0aGUgUEhZIHJlZ2lzdGVyIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWdfbnVtLCBpbnQgdmFsKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwlpbnQgaTsKKwlpbnQgcGk7CisKKwlmb3IgKGkgPSAwLCBwaSA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5wb3J0X2NudDsgaSsrLCBwaSsrKQorCQlod193X3BoeShodywgcGksIHJlZ19udW0gPDwgMSwgdmFsKTsKK30KKworLyoKKyAqIGV0aHRvb2wgc3VwcG9ydAorICovCisKKyNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDQwCisKK3N0YXRpYyB1MTYgZWVwcm9tX2RhdGFbRUVQUk9NX1NJWkVdID0geyAwIH07CisKKyNkZWZpbmUgQURWRVJUSVNFRF9BTEwJCQlcCisJKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwJXAorCUFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwJXAorCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CVwKKwlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdGhlIE1JSSBmdW5jdGlvbnMgaW4gbWlpLmMuICovCisKKy8qKgorICogbmV0ZGV2X2dldF9zZXR0aW5ncyAtIGdldCBuZXR3b3JrIGRldmljZSBzZXR0aW5ncworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAY21kOglFdGh0b29sIGNvbW1hbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBxdWVyaWVzIHRoZSBQSFkgYW5kIHJldHVybnMgaXRzIHN0YXRlIGluIHRoZSBldGh0b29sIGNvbW1hbmQuCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisKKwltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKKwltaWlfZXRodG9vbF9nc2V0KCZwcml2LT5taWlfaWYsIGNtZCk7CisJY21kLT5hZHZlcnRpc2luZyB8PSBTVVBQT1JURURfVFA7CisJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKKworCS8qIFNhdmUgYWR2ZXJ0aXNlZCBzZXR0aW5ncyBmb3Igd29ya2Fyb3VuZCBpbiBuZXh0IGZ1bmN0aW9uLiAqLworCXByaXYtPmFkdmVydGlzaW5nID0gY21kLT5hZHZlcnRpc2luZzsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuZXRkZXZfc2V0X3NldHRpbmdzIC0gc2V0IG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBjbWQ6CUV0aHRvb2wgY29tbWFuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFBIWSBhY2NvcmRpbmcgdG8gdGhlIGV0aHRvb2wgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlpbnQgcmM7CisKKwkvKgorCSAqIGV0aHRvb2wgdXRpbGl0eSBkb2VzIG5vdCBjaGFuZ2UgYWR2ZXJ0aXNlZCBzZXR0aW5nIGlmIGF1dG8KKwkgKiBuZWdvdGlhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkuCisJICovCisJaWYgKGNtZC0+YXV0b25lZyAmJiBwcml2LT5hZHZlcnRpc2luZyA9PSBjbWQtPmFkdmVydGlzaW5nKSB7CisJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BTEw7CisJCWlmICgxMCA9PSBjbWQtPnNwZWVkKQorCQkJY21kLT5hZHZlcnRpc2luZyAmPQorCQkJCX4oQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpOworCQllbHNlIGlmICgxMDAgPT0gY21kLT5zcGVlZCkKKwkJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0KKwkJCQl+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZik7CisJCWlmICgwID09IGNtZC0+ZHVwbGV4KQorCQkJY21kLT5hZHZlcnRpc2luZyAmPQorCQkJCX4oQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCk7CisJCWVsc2UgaWYgKDEgPT0gY21kLT5kdXBsZXgpCisJCQljbWQtPmFkdmVydGlzaW5nICY9CisJCQkJfihBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmKTsKKwl9CisJbXV0ZXhfbG9jaygmaHdfcHJpdi0+bG9jayk7CisJaWYgKGNtZC0+YXV0b25lZyAmJgorCQkJKGNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEX0FMTCkgPT0KKwkJCUFEVkVSVElTRURfQUxMKSB7CisJCXBvcnQtPmR1cGxleCA9IDA7CisJCXBvcnQtPnNwZWVkID0gMDsKKwkJcG9ydC0+Zm9yY2VfbGluayA9IDA7CisJfSBlbHNlIHsKKwkJcG9ydC0+ZHVwbGV4ID0gY21kLT5kdXBsZXggKyAxOworCQlpZiAoY21kLT5zcGVlZCAhPSAxMDAwKQorCQkJcG9ydC0+c3BlZWQgPSBjbWQtPnNwZWVkOworCQlpZiAoY21kLT5hdXRvbmVnKQorCQkJcG9ydC0+Zm9yY2VfbGluayA9IDA7CisJCWVsc2UKKwkJCXBvcnQtPmZvcmNlX2xpbmsgPSAxOworCX0KKwlyYyA9IG1paV9ldGh0b29sX3NzZXQoJnByaXYtPm1paV9pZiwgY21kKTsKKwltdXRleF91bmxvY2soJmh3X3ByaXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBuZXRkZXZfbndheV9yZXNldCAtIHJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbgorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXN0YXJ0cyB0aGUgUEhZIGZvciBhdXRvLW5lZ290aWF0aW9uLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCWludCByYzsKKworCW11dGV4X2xvY2soJmh3X3ByaXYtPmxvY2spOworCXJjID0gbWlpX253YXlfcmVzdGFydCgmcHJpdi0+bWlpX2lmKTsKKwltdXRleF91bmxvY2soJmh3X3ByaXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X2xpbmsgLSBnZXQgbmV0d29yayBkZXZpY2UgbGluayBzdGF0dXMKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbGluayBzdGF0dXMgZnJvbSB0aGUgUEhZLgorICoKKyAqIFJldHVybiB0cnVlIGlmIFBIWSBpcyBsaW5rZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHUzMiBuZXRkZXZfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYzsKKworCXJjID0gbWlpX2xpbmtfb2soJnByaXYtPm1paV9pZik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfZHJ2aW5mbyAtIGdldCBuZXR3b3JrIGRyaXZlciBpbmZvcm1hdGlvbgorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAaW5mbzoJRXRodG9vbCBkcml2ZXIgaW5mbyBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHRoZSBkcml2ZXIgaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCisJc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX05BTUUpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShod19wcml2LT5wZGV2KSk7Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9yZWdzX2xlbiAtIGdldCBsZW5ndGggb2YgcmVnaXN0ZXIgZHVtcAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIGR1bXAuCisgKgorICogUmV0dXJuIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgZHVtcC4KKyAqLworc3RhdGljIHN0cnVjdCBod19yZWdzIHsKKwlpbnQgc3RhcnQ7CisJaW50IGVuZDsKK30gaHdfcmVnc19yYW5nZVtdID0geworCXsgS1NfRE1BX1RYX0NUUkwsCUtTODg0WF9JTlRFUlJVUFRTX1NUQVRVUyB9LAorCXsgS1NfQUREX0FERFJfMF9MTywJS1NfQUREX0FERFJfRl9ISSB9LAorCXsgS1M4ODRYX0FERFJfMF9PRkZTRVQsCUtTODg0MV9XT0xfRlJBTUVfQllURTJfT0ZGU0VUIH0sCisJeyBLUzg4NFhfU0lERVJfUCwJS1M4ODQyX1NHQ1I3X1AgfSwKKwl7IEtTODg0Ml9NQUNBUjFfUCwJS1M4ODQyX1RPU1I4X1AgfSwKKwl7IEtTODg0WF9QMU1CQ1JfUCwJS1M4ODQyX1AzRVJDUl9QIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBpbnQgbmV0ZGV2X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBod19yZWdzICpyYW5nZSA9IGh3X3JlZ3NfcmFuZ2U7CisJaW50IHJlZ3NfbGVuID0gMHgxMCAqIHNpemVvZih1MzIpOworCisJd2hpbGUgKHJhbmdlLT5lbmQgPiByYW5nZS0+c3RhcnQpIHsKKwkJcmVnc19sZW4gKz0gKHJhbmdlLT5lbmQgLSByYW5nZS0+c3RhcnQgKyAzKSAvIDQgKiA0OworCQlyYW5nZSsrOworCX0KKwlyZXR1cm4gcmVnc19sZW47Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9yZWdzIC0gZ2V0IHJlZ2lzdGVyIGR1bXAKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHJlZ3M6CUV0aHRvb2wgcmVnaXN0ZXJzIGRhdGEgc3RydWN0dXJlLgorICogQHB0cjoJQnVmZmVyIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZXMuCisgKgorICogVGhpcyBwcm9jZWR1cmUgZHVtcHMgdGhlIHJlZ2lzdGVyIHZhbHVlcyBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywKKwl2b2lkICpwdHIpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCWludCAqYnVmID0gKGludCAqKSBwdHI7CisJc3RydWN0IGh3X3JlZ3MgKnJhbmdlID0gaHdfcmVnc19yYW5nZTsKKwlpbnQgbGVuOworCisJbXV0ZXhfbG9jaygmaHdfcHJpdi0+bG9jayk7CisJcmVncy0+dmVyc2lvbiA9IDA7CisJZm9yIChsZW4gPSAwOyBsZW4gPCAweDQwOyBsZW4gKz0gNCkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHdfcHJpdi0+cGRldiwgbGVuLCBidWYpOworCQlidWYrKzsKKwl9CisJd2hpbGUgKHJhbmdlLT5lbmQgPiByYW5nZS0+c3RhcnQpIHsKKwkJZm9yIChsZW4gPSByYW5nZS0+c3RhcnQ7IGxlbiA8IHJhbmdlLT5lbmQ7IGxlbiArPSA0KSB7CisJCQkqYnVmID0gcmVhZGwoaHctPmlvICsgbGVuKTsKKwkJCWJ1ZisrOworCQl9CisJCXJhbmdlKys7CisJfQorCW11dGV4X3VubG9jaygmaHdfcHJpdi0+bG9jayk7Cit9CisKKyNkZWZpbmUgV09MX1NVUFBPUlQJCQlcCisJKFdBS0VfUEhZIHwgV0FLRV9NQUdJQyB8CVwKKwlXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8CVwKKwlXQUtFX0JDQVNUIHwgV0FLRV9BUlApCisKKy8qKgorICogbmV0ZGV2X2dldF93b2wgLSBnZXQgV2FrZS1vbi1MQU4gc3VwcG9ydAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAd29sOglFdGh0b29sIFdha2Utb24tTEFOIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHJldHVybnMgV2FrZS1vbi1MQU4gc3VwcG9ydC4KKyAqLworc3RhdGljIHZvaWQgbmV0ZGV2X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCisJd29sLT5zdXBwb3J0ZWQgPSBod19wcml2LT53b2xfc3VwcG9ydDsKKwl3b2wtPndvbG9wdHMgPSBod19wcml2LT53b2xfZW5hYmxlOworCW1lbXNldCgmd29sLT5zb3Bhc3MsIDAsIHNpemVvZih3b2wtPnNvcGFzcykpOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfd29sIC0gc2V0IFdha2Utb24tTEFOIHN1cHBvcnQKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHdvbDoJRXRodG9vbCBXYWtlLW9uLUxBTiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgV2FrZS1vbi1MQU4gc3VwcG9ydC4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisKKwkvKiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gcmV0cmlldmUgdGhlIGRldmljZSBJUCBhZGRyZXNzLiAqLworCXU4IG5ldF9hZGRyW10gPSB7IDE5MiwgMTY4LCAxLCAxIH07CisKKwlpZiAod29sLT53b2xvcHRzICYgfmh3X3ByaXYtPndvbF9zdXBwb3J0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3X3ByaXYtPndvbF9lbmFibGUgPSB3b2wtPndvbG9wdHM7CisKKwkvKiBMaW5rIHdha2V1cCBjYW5ub3QgcmVhbGx5IGJlIGRpc2FibGVkLiAqLworCWlmICh3b2wtPndvbG9wdHMpCisJCWh3X3ByaXYtPndvbF9lbmFibGUgfD0gV0FLRV9QSFk7CisJaHdfZW5hYmxlX3dvbCgmaHdfcHJpdi0+aHcsIGh3X3ByaXYtPndvbF9lbmFibGUsIG5ldF9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X21zZ2xldmVsIC0gZ2V0IGRlYnVnIG1lc3NhZ2UgbGV2ZWwKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBjdXJyZW50IGRlYnVnIG1lc3NhZ2UgbGV2ZWwuCisgKgorICogUmV0dXJuIGN1cnJlbnQgZGVidWcgbWVzc2FnZSBmbGFncy4KKyAqLworc3RhdGljIHUzMiBuZXRkZXZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBwcml2LT5tc2dfZW5hYmxlOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfbXNnbGV2ZWwgLSBzZXQgZGVidWcgbWVzc2FnZSBsZXZlbAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAdmFsdWU6CURlYnVnIG1lc3NhZ2UgZmxhZ3MuCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2V0cyBkZWJ1ZyBtZXNzYWdlIGxldmVsLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcHJpdi0+bXNnX2VuYWJsZSA9IHZhbHVlOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfZWVwcm9tX2xlbiAtIGdldCBFRVBST00gbGVuZ3RoCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgRUVQUk9NLgorICoKKyAqIFJldHVybiBsZW5ndGggb2YgdGhlIEVFUFJPTS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gRUVQUk9NX1NJWkUgKiAyOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfZWVwcm9tIC0gZ2V0IEVFUFJPTSBkYXRhCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBlZXByb206CUV0aHRvb2wgRUVQUk9NIGRhdGEgc3RydWN0dXJlLgorICogQGRhdGE6CUJ1ZmZlciB0byBzdG9yZSB0aGUgRUVQUk9NIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgRUVQUk9NIGRhdGEgaW4gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworI2RlZmluZSBFRVBST01fTUFHSUMJCQkweDEwQTE4ODQyCisKK3N0YXRpYyBpbnQgbmV0ZGV2X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXU4ICplZXByb21fYnl0ZSA9ICh1OCAqKSBlZXByb21fZGF0YTsKKwlpbnQgaTsKKwlpbnQgbGVuOworCisJbGVuID0gKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gKyAxKSAvIDI7CisJZm9yIChpID0gZWVwcm9tLT5vZmZzZXQgLyAyOyBpIDwgbGVuOyBpKyspCisJCWVlcHJvbV9kYXRhW2ldID0gZWVwcm9tX3JlYWQoJmh3X3ByaXYtPmh3LCBpKTsKKwllZXByb20tPm1hZ2ljID0gRUVQUk9NX01BR0lDOworCW1lbWNweShkYXRhLCAmZWVwcm9tX2J5dGVbZWVwcm9tLT5vZmZzZXRdLCBlZXByb20tPmxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuZXRkZXZfc2V0X2VlcHJvbSAtIHdyaXRlIEVFUFJPTSBkYXRhCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBlZXByb206CUV0aHRvb2wgRUVQUk9NIGRhdGEgc3RydWN0dXJlLgorICogQGRhdGE6CURhdGEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIEVFUFJPTSBkYXRhIG9uZSBieXRlIGF0IGEgdGltZS4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJdTE2IGVlcHJvbV93b3JkW0VFUFJPTV9TSVpFXTsKKwl1OCAqZWVwcm9tX2J5dGUgPSAodTggKikgZWVwcm9tX3dvcmQ7CisJaW50IGk7CisJaW50IGxlbjsKKworCWlmIChlZXByb20tPm1hZ2ljICE9IEVFUFJPTV9NQUdJQykKKwkJcmV0dXJuIDE7CisKKwlsZW4gPSAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiArIDEpIC8gMjsKKwlmb3IgKGkgPSBlZXByb20tPm9mZnNldCAvIDI7IGkgPCBsZW47IGkrKykKKwkJZWVwcm9tX2RhdGFbaV0gPSBlZXByb21fcmVhZCgmaHdfcHJpdi0+aHcsIGkpOworCW1lbWNweShlZXByb21fd29yZCwgZWVwcm9tX2RhdGEsIEVFUFJPTV9TSVpFICogMik7CisJbWVtY3B5KCZlZXByb21fYnl0ZVtlZXByb20tPm9mZnNldF0sIGRhdGEsIGVlcHJvbS0+bGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1NJWkU7IGkrKykKKwkJaWYgKGVlcHJvbV93b3JkW2ldICE9IGVlcHJvbV9kYXRhW2ldKSB7CisJCQllZXByb21fZGF0YVtpXSA9IGVlcHJvbV93b3JkW2ldOworCQkJZWVwcm9tX3dyaXRlKCZod19wcml2LT5odywgaSwgZWVwcm9tX2RhdGFbaV0pOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfcGF1c2VwYXJhbSAtIGdldCBmbG93IGNvbnRyb2wgcGFyYW1ldGVycworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAcGF1c2U6CUV0aHRvb2wgUEFVU0Ugc2V0dGluZ3MgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBwcm9jZWR1cmUgcmV0dXJucyB0aGUgUEFVU0UgY29udHJvbCBmbG93IHNldHRpbmdzLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlwYXVzZS0+YXV0b25lZyA9IChody0+b3ZlcnJpZGVzICYgUEFVU0VfRkxPV19DVFJMKSA/IDAgOiAxOworCWlmICghaHctPmtzel9zd2l0Y2gpIHsKKwkJcGF1c2UtPnJ4X3BhdXNlID0KKwkJCShody0+cnhfY2ZnICYgRE1BX1JYX0ZMT1dfRU5BQkxFKSA/IDEgOiAwOworCQlwYXVzZS0+dHhfcGF1c2UgPQorCQkJKGh3LT50eF9jZmcgJiBETUFfVFhfRkxPV19FTkFCTEUpID8gMSA6IDA7CisJfSBlbHNlIHsKKwkJcGF1c2UtPnJ4X3BhdXNlID0KKwkJCShzd19jaGsoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCQlTV0lUQ0hfUlhfRkxPV19DVFJMKSkgPyAxIDogMDsKKwkJcGF1c2UtPnR4X3BhdXNlID0KKwkJCShzd19jaGsoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCQlTV0lUQ0hfVFhfRkxPV19DVFJMKSkgPyAxIDogMDsKKwl9Cit9CisKKy8qKgorICogbmV0ZGV2X3NldF9wYXVzZXBhcmFtIC0gc2V0IGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBwYXVzZToJRXRodG9vbCBQQVVTRSBzZXR0aW5ncyBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFBBVVNFIGNvbnRyb2wgZmxvdyBzZXR0aW5ncy4KKyAqIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCisJbXV0ZXhfbG9jaygmaHdfcHJpdi0+bG9jayk7CisJaWYgKHBhdXNlLT5hdXRvbmVnKSB7CisJCWlmICghcGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCisJCQlwb3J0LT5mbG93X2N0cmwgPSBQSFlfTk9fRkxPV19DVFJMOworCQllbHNlCisJCQlwb3J0LT5mbG93X2N0cmwgPSBQSFlfRkxPV19DVFJMOworCQlody0+b3ZlcnJpZGVzICY9IH5QQVVTRV9GTE9XX0NUUkw7CisJCXBvcnQtPmZvcmNlX2xpbmsgPSAwOworCQlpZiAoaHctPmtzel9zd2l0Y2gpIHsKKwkJCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULAorCQkJCVNXSVRDSF9SWF9GTE9XX0NUUkwsIDEpOworCQkJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQsCisJCQkJU1dJVENIX1RYX0ZMT1dfQ1RSTCwgMSk7CisJCX0KKwkJcG9ydF9zZXRfbGlua19zcGVlZChwb3J0KTsKKwl9IGVsc2UgeworCQlody0+b3ZlcnJpZGVzIHw9IFBBVVNFX0ZMT1dfQ1RSTDsKKwkJaWYgKGh3LT5rc3pfc3dpdGNoKSB7CisJCQlzd19jZmcoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCQlTV0lUQ0hfUlhfRkxPV19DVFJMLCBwYXVzZS0+cnhfcGF1c2UpOworCQkJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQsCisJCQkJU1dJVENIX1RYX0ZMT1dfQ1RSTCwgcGF1c2UtPnR4X3BhdXNlKTsKKwkJfSBlbHNlCisJCQlzZXRfZmxvd19jdHJsKGh3LCBwYXVzZS0+cnhfcGF1c2UsIHBhdXNlLT50eF9wYXVzZSk7CisJfQorCW11dGV4X3VubG9jaygmaHdfcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X3JpbmdwYXJhbSAtIGdldCB0eC9yeCByaW5nIHBhcmFtZXRlcnMKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHBhdXNlOglFdGh0b29sIFJJTkcgc2V0dGluZ3MgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBwcm9jZWR1cmUgcmV0dXJucyB0aGUgVFgvUlggcmluZyBzZXR0aW5ncy4KKyAqLworc3RhdGljIHZvaWQgbmV0ZGV2X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSAoMSA8PCA5KTsKKwlyaW5nLT50eF9wZW5kaW5nID0gaHctPnR4X2Rlc2NfaW5mby5hbGxvYzsKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9ICgxIDw8IDkpOworCXJpbmctPnJ4X3BlbmRpbmcgPSBody0+cnhfZGVzY19pbmZvLmFsbG9jOworfQorCisjZGVmaW5lIFNUQVRTX0xFTgkJCShUT1RBTF9QT1JUX0NPVU5URVJfTlVNKQorCitzdGF0aWMgc3RydWN0IHsKKwljaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOworfSBldGh0b29sX3N0YXRzX2tleXNbU1RBVFNfTEVOXSA9IHsKKwl7ICJyeF9sb19wcmlvcml0eV9vY3RldHMiIH0sCisJeyAicnhfaGlfcHJpb3JpdHlfb2N0ZXRzIiB9LAorCXsgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgInJ4X2ZyYWdtZW50cyIgfSwKKwl7ICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgInJ4X2phYmJlcnMiIH0sCisJeyAicnhfc3ltYm9sX2Vycm9ycyIgfSwKKwl7ICJyeF9jcmNfZXJyb3JzIiB9LAorCXsgInJ4X2FsaWduX2Vycm9ycyIgfSwKKwl7ICJyeF9tYWNfY3RybF9wYWNrZXRzIiB9LAorCXsgInJ4X3BhdXNlX3BhY2tldHMiIH0sCisJeyAicnhfYmNhc3RfcGFja2V0cyIgfSwKKwl7ICJyeF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgInJ4X3VjYXN0X3BhY2tldHMiIH0sCisJeyAicnhfNjRfb3JfbGVzc19vY3RldF9wYWNrZXRzIiB9LAorCXsgInJ4XzY1X3RvXzEyN19vY3RldF9wYWNrZXRzIiB9LAorCXsgInJ4XzEyOF90b18yNTVfb2N0ZXRfcGFja2V0cyIgfSwKKwl7ICJyeF8yNTZfdG9fNTExX29jdGV0X3BhY2tldHMiIH0sCisJeyAicnhfNTEyX3RvXzEwMjNfb2N0ZXRfcGFja2V0cyIgfSwKKwl7ICJyeF8xMDI0X3RvXzE1MjJfb2N0ZXRfcGFja2V0cyIgfSwKKworCXsgInR4X2xvX3ByaW9yaXR5X29jdGV0cyIgfSwKKwl7ICJ0eF9oaV9wcmlvcml0eV9vY3RldHMiIH0sCisJeyAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAorCXsgInR4X3BhdXNlX3BhY2tldHMiIH0sCisJeyAidHhfYmNhc3RfcGFja2V0cyIgfSwKKwl7ICJ0eF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgInR4X3VjYXN0X3BhY2tldHMiIH0sCisJeyAidHhfZGVmZXJyZWQiIH0sCisJeyAidHhfdG90YWxfY29sbGlzaW9ucyIgfSwKKwl7ICJ0eF9leGNlc3NpdmVfY29sbGlzaW9ucyIgfSwKKwl7ICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIgfSwKKwl7ICJ0eF9tdWx0X2NvbGxpc2lvbnMiIH0sCisKKwl7ICJyeF9kaXNjYXJkcyIgfSwKKwl7ICJ0eF9kaXNjYXJkcyIgfSwKK307CisKKy8qKgorICogbmV0ZGV2X2dldF9zdHJpbmdzIC0gZ2V0IHN0YXRpc3RpY3MgaWRlbnRpdHkgc3RyaW5ncworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAc3RyaW5nc2V0OglTdHJpbmcgc2V0IGlkZW50aWZpZXIuCisgKiBAYnVmOglCdWZmZXIgdG8gc3RvcmUgdGhlIHN0cmluZ3MuCisgKgorICogVGhpcyBwcm9jZWR1cmUgcmV0dXJucyB0aGUgc3RyaW5ncyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlpZiAoRVRIX1NTX1NUQVRTID09IHN0cmluZ3NldCkKKwkJbWVtY3B5KGJ1ZiwgJmV0aHRvb2xfc3RhdHNfa2V5cywKKwkJCUVUSF9HU1RSSU5HX0xFTiAqIGh3LT5taWJfY250KTsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X3NzZXRfY291bnQgLSBnZXQgc3RhdGlzdGljcyBzaXplCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBzc2V0OglUaGUgc3RhdGlzdGljcyBzZXQgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc3RhdGlzdGljcyB0byBiZSByZXBvcnRlZC4KKyAqCisgKiBSZXR1cm4gc2l6ZSBvZiB0aGUgc3RhdGlzdGljcyB0byBiZSByZXBvcnRlZC4KKyAqLworc3RhdGljIGludCBuZXRkZXZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBody0+bWliX2NudDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCisvKioKKyAqIG5ldGRldl9nZXRfZXRodG9vbF9zdGF0cyAtIGdldCBuZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBzdGF0czoJRXRodG9vbCBzdGF0aXN0aWNzIGRhdGEgc3RydWN0dXJlLgorICogQGRhdGE6CUJ1ZmZlciB0byBzdG9yZSB0aGUgc3RhdGlzdGljcy4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJaW50IG5fc3RhdHMgPSBzdGF0cy0+bl9zdGF0czsKKwlpbnQgaTsKKwlpbnQgbjsKKwlpbnQgcDsKKwlpbnQgcmM7CisJdTY0IGNvdW50ZXJbVE9UQUxfUE9SVF9DT1VOVEVSX05VTV07CisKKwltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKKwluID0gU1dJVENIX1BPUlRfTlVNOworCWZvciAoaSA9IDAsIHAgPSBwb3J0LT5maXJzdF9wb3J0OyBpIDwgcG9ydC0+bWliX3BvcnRfY250OyBpKyssIHArKykgeworCQlpZiAobWVkaWFfY29ubmVjdGVkID09IGh3LT5wb3J0X21pYltwXS5zdGF0ZSkgeworCQkJaHdfcHJpdi0+Y291bnRlcltwXS5yZWFkID0gMTsKKworCQkJLyogUmVtZW1iZXIgZmlyc3QgcG9ydCB0aGF0IHJlcXVlc3RzIHJlYWQuICovCisJCQlpZiAobiA9PSBTV0lUQ0hfUE9SVF9OVU0pCisJCQkJbiA9IHA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKKworCWlmIChuIDwgU1dJVENIX1BPUlRfTlVNKQorCQlzY2hlZHVsZV93b3JrKCZod19wcml2LT5taWJfcmVhZCk7CisKKwlpZiAoMSA9PSBwb3J0LT5taWJfcG9ydF9jbnQgJiYgbiA8IFNXSVRDSF9QT1JUX05VTSkgeworCQlwID0gbjsKKwkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCWh3X3ByaXYtPmNvdW50ZXJbcF0uY291bnRlciwKKwkJCTIgPT0gaHdfcHJpdi0+Y291bnRlcltwXS5yZWFkLAorCQkJSFogKiAxKTsKKwl9IGVsc2UKKwkJZm9yIChpID0gMCwgcCA9IG47IGkgPCBwb3J0LT5taWJfcG9ydF9jbnQgLSBuOyBpKyssIHArKykgeworCQkJaWYgKDAgPT0gaSkgeworCQkJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJCWh3X3ByaXYtPmNvdW50ZXJbcF0uY291bnRlciwKKwkJCQkJMiA9PSBod19wcml2LT5jb3VudGVyW3BdLnJlYWQsCisJCQkJCUhaICogMik7CisJCQl9IGVsc2UgaWYgKGh3LT5wb3J0X21pYltwXS5jbnRfcHRyKSB7CisJCQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQkJaHdfcHJpdi0+Y291bnRlcltwXS5jb3VudGVyLAorCQkJCQkyID09IGh3X3ByaXYtPmNvdW50ZXJbcF0ucmVhZCwKKwkJCQkJSFogKiAxKTsKKwkJCX0KKwkJfQorCisJZ2V0X21pYl9jb3VudGVycyhodywgcG9ydC0+Zmlyc3RfcG9ydCwgcG9ydC0+bWliX3BvcnRfY250LCBjb3VudGVyKTsKKwluID0gaHctPm1pYl9jbnQ7CisJaWYgKG4gPiBuX3N0YXRzKQorCQluID0gbl9zdGF0czsKKwluX3N0YXRzIC09IG47CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJKmRhdGErKyA9IGNvdW50ZXJbaV07Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9yeF9jc3VtIC0gZ2V0IHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydCBzZXR0aW5nLgorICoKKyAqIFJldHVybiB0cnVlIGlmIHJlY2VpdmUgY2hlY2tzdW0gaXMgZW5hYmxlZDsgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgdTMyIG5ldGRldl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCXJldHVybiBody0+cnhfY2ZnICYKKwkJKERNQV9SWF9DU1VNX1VEUCB8CisJCURNQV9SWF9DU1VNX1RDUCB8CisJCURNQV9SWF9DU1VNX0lQKTsKK30KKworLyoqCisgKiBuZXRkZXZfc2V0X3J4X2NzdW0gLSBzZXQgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0CisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBkYXRhOglaZXJvIHRvIGRpc2FibGUgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQgc2V0dGluZy4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXUzMiBuZXdfc2V0dGluZyA9IGh3LT5yeF9jZmc7CisKKwlpZiAoZGF0YSkKKwkJbmV3X3NldHRpbmcgfD0KKwkJCShETUFfUlhfQ1NVTV9VRFAgfCBETUFfUlhfQ1NVTV9UQ1AgfAorCQkJRE1BX1JYX0NTVU1fSVApOworCWVsc2UKKwkJbmV3X3NldHRpbmcgJj0KKwkJCX4oRE1BX1JYX0NTVU1fVURQIHwgRE1BX1JYX0NTVU1fVENQIHwKKwkJCURNQV9SWF9DU1VNX0lQKTsKKwluZXdfc2V0dGluZyAmPSB+RE1BX1JYX0NTVU1fVURQOworCW11dGV4X2xvY2soJmh3X3ByaXYtPmxvY2spOworCWlmIChuZXdfc2V0dGluZyAhPSBody0+cnhfY2ZnKSB7CisJCWh3LT5yeF9jZmcgPSBuZXdfc2V0dGluZzsKKwkJaWYgKGh3LT5lbmFibGVkKQorCQkJd3JpdGVsKGh3LT5yeF9jZmcsIGh3LT5pbyArIEtTX0RNQV9SWF9DVFJMKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X3NldF9zZXR0aW5ncywKKwkubndheV9yZXNldAkJPSBuZXRkZXZfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gbmV0ZGV2X2dldF9saW5rLAorCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSBuZXRkZXZfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBuZXRkZXZfZ2V0X3JlZ3MsCisJLmdldF93b2wJCT0gbmV0ZGV2X2dldF93b2wsCisJLnNldF93b2wJCT0gbmV0ZGV2X3NldF93b2wsCisJLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gbmV0ZGV2X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IG5ldGRldl9nZXRfZWVwcm9tLAorCS5zZXRfZWVwcm9tCQk9IG5ldGRldl9zZXRfZWVwcm9tLAorCS5nZXRfcGF1c2VwYXJhbQkJPSBuZXRkZXZfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtCQk9IG5ldGRldl9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBuZXRkZXZfZ2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3N0cmluZ3MJCT0gbmV0ZGV2X2dldF9zdHJpbmdzLAorCS5nZXRfc3NldF9jb3VudAkJPSBuZXRkZXZfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gbmV0ZGV2X2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfcnhfY3N1bQkJPSBuZXRkZXZfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IG5ldGRldl9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKKwkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKK307CisKKy8qCisgKiBIYXJkd2FyZSBtb25pdG9yaW5nCisgKi8KKworc3RhdGljIHZvaWQgdXBkYXRlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRldl9wcml2ICpwcml2LAorCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCkKK3sKKwlpZiAocHJpdi0+bWVkaWFfc3RhdGUgIT0gcG9ydC0+bGlua2VkLT5zdGF0ZSkgeworCQlwcml2LT5tZWRpYV9zdGF0ZSA9IHBvcnQtPmxpbmtlZC0+c3RhdGU7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCWlmIChtZWRpYV9jb25uZWN0ZWQgPT0gcHJpdi0+bWVkaWFfc3RhdGUpCisJCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJZWxzZQorCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgbGluayAlc1xuIiwgZGV2LT5uYW1lLAorCQkJCQkobWVkaWFfY29ubmVjdGVkID09IHByaXYtPm1lZGlhX3N0YXRlID8KKwkJCQkJIm9uIiA6ICJvZmYiKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1pYl9yZWFkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2X2luZm8sIG1pYl9yZWFkKTsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CisJaW50IGk7CisKKwluZXh0X2ppZmZpZXMgPSBqaWZmaWVzOworCWZvciAoaSA9IDA7IGkgPCBody0+bWliX3BvcnRfY250OyBpKyspIHsKKwkJbWliID0gJmh3LT5wb3J0X21pYltpXTsKKworCQkvKiBSZWFkaW5nIE1JQiBjb3VudGVycyBvciByZXF1ZXN0ZWQgdG8gcmVhZC4gKi8KKwkJaWYgKG1pYi0+Y250X3B0ciB8fCAxID09IGh3X3ByaXYtPmNvdW50ZXJbaV0ucmVhZCkgeworCisJCQkvKiBOZWVkIHRvIHByb2Nlc3MgcmVjZWl2ZSBpbnRlcnJ1cHQuICovCisJCQlpZiAocG9ydF9yX2NudChodywgaSkpCisJCQkJYnJlYWs7CisJCQlod19wcml2LT5jb3VudGVyW2ldLnJlYWQgPSAwOworCisJCQkvKiBGaW5pc2ggcmVhZGluZyBjb3VudGVycy4gKi8KKwkJCWlmICgwID09IG1pYi0+Y250X3B0cikgeworCQkJCWh3X3ByaXYtPmNvdW50ZXJbaV0ucmVhZCA9IDI7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKAorCQkJCQkmaHdfcHJpdi0+Y291bnRlcltpXS5jb3VudGVyKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChqaWZmaWVzID49IGh3X3ByaXYtPmNvdW50ZXJbaV0udGltZSkgeworCQkJLyogT25seSByZWFkIE1JQiBjb3VudGVycyB3aGVuIHRoZSBwb3J0IGlzIGNvbm5lY3RlZC4gKi8KKwkJCWlmIChtZWRpYV9jb25uZWN0ZWQgPT0gbWliLT5zdGF0ZSkKKwkJCQlod19wcml2LT5jb3VudGVyW2ldLnJlYWQgPSAxOworCQkJbmV4dF9qaWZmaWVzICs9IEhaICogMSAqIGh3LT5taWJfcG9ydF9jbnQ7CisJCQlod19wcml2LT5jb3VudGVyW2ldLnRpbWUgPSBuZXh0X2ppZmZpZXM7CisKKwkJLyogUG9ydCBpcyBqdXN0IGRpc2Nvbm5lY3RlZC4gKi8KKwkJfSBlbHNlIGlmIChtaWItPmxpbmtfZG93bikgeworCQkJbWliLT5saW5rX2Rvd24gPSAwOworCisJCQkvKiBSZWFkIGNvdW50ZXJzIG9uZSBsYXN0IHRpbWUgYWZ0ZXIgbGluayBpcyBsb3N0LiAqLworCQkJaHdfcHJpdi0+Y291bnRlcltpXS5yZWFkID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbWliX21vbml0b3IodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gKHN0cnVjdCBkZXZfaW5mbyAqKSBwdHI7CisKKwltaWJfcmVhZF93b3JrKCZod19wcml2LT5taWJfcmVhZCk7CisKKwkvKiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IFdha2Utb24tTEFOIGlzIHdvcmtpbmcuICovCisJaWYgKGh3X3ByaXYtPnBtZV93YWl0KSB7CisJCWlmIChod19wcml2LT5wbWVfd2FpdCA8PSBqaWZmaWVzKSB7CisJCQlod19jbHJfd29sX3BtZV9zdGF0dXMoJmh3X3ByaXYtPmh3KTsKKwkJCWh3X3ByaXYtPnBtZV93YWl0ID0gMDsKKwkJfQorCX0gZWxzZSBpZiAoaHdfY2hrX3dvbF9wbWVfc3RhdHVzKCZod19wcml2LT5odykpIHsKKworCQkvKiBQTUUgaXMgYXNzZXJ0ZWQuICBXYWl0IDIgc2Vjb25kcyB0byBjbGVhciBpdC4gKi8KKwkJaHdfcHJpdi0+cG1lX3dhaXQgPSBqaWZmaWVzICsgSFogKiAyOworCX0KKworCWtzel91cGRhdGVfdGltZXIoJmh3X3ByaXYtPm1pYl90aW1lcl9pbmZvKTsKK30KKworLyoqCisgKiBkZXZfbW9uaXRvciAtIHBlcmlvZGljIG1vbml0b3JpbmcKKyAqIEBwdHI6CU5ldHdvcmsgZGV2aWNlIHBvaW50ZXIuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHJ1biBpbiBhIGtlcm5lbCB0aW1lciB0byBtb25pdG9yIHRoZSBuZXR3b3JrIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgZGV2X21vbml0b3IodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCisJaWYgKCEoaHctPmZlYXR1cmVzICYgTElOS19JTlRfV09SS0lORykpCisJCXBvcnRfZ2V0X2xpbmtfc3BlZWQocG9ydCk7CisJdXBkYXRlX2xpbmsoZGV2LCBwcml2LCBwb3J0KTsKKworCWtzel91cGRhdGVfdGltZXIoJnByaXYtPm1vbml0b3JfdGltZXJfaW5mbyk7Cit9CisKKy8qCisgKiBMaW51eCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKi8KKworLyogRHJpdmVyIGV4cG9ydGVkIHZhcmlhYmxlcyAqLworCitzdGF0aWMgaW50IG1zZ19lbmFibGU7CisKK3N0YXRpYyBjaGFyICptYWNhZGRyID0gIjoiOworc3RhdGljIGNoYXIgKm1hYzFhZGRyID0gIjoiOworCisvKgorICogVGhpcyBlbmFibGVzIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlIG1vZGUgZm9yIEtTWjg4NDIsIHdoaWNoIGNvbnRhaW5zIGEKKyAqIHN3aXRjaCB3aXRoIHR3byBwaHlzaWNhbCBwb3J0cy4gIFNvbWUgdXNlcnMgbGlrZSB0byB0YWtlIGNvbnRyb2wgb2YgdGhlCisgKiBwb3J0cyBmb3IgcnVubmluZyBTcGFubmluZyBUcmVlIFByb3RvY29sLiAgVGhlIGRyaXZlciB3aWxsIGNyZWF0ZSBhbgorICogYWRkaXRpb25hbCBldGg/IGRldmljZSBmb3IgdGhlIG90aGVyIHBvcnQuCisgKgorICogU29tZSBsaW1pdGF0aW9ucyBhcmUgdGhlIG5ldHdvcmsgZGV2aWNlcyBjYW5ub3QgaGF2ZSBkaWZmZXJlbnQgTVRVIGFuZAorICogbXVsdGljYXN0IGhhc2ggdGFibGVzLgorICovCitzdGF0aWMgaW50IG11bHRpX2RldjsKKworLyoKKyAqIEFzIG1vc3QgdXNlcnMgc2VsZWN0IG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlIG1vZGUgdG8gdXNlIFNwYW5uaW5nIFRyZWUKKyAqIFByb3RvY29sLCB0aGlzIGVuYWJsZXMgYSBmZWF0dXJlIGluIHdoaWNoIG1vc3QgdW5pY2FzdCBhbmQgbXVsdGljYXN0IHBhY2tldHMKKyAqIGFyZSBmb3J3YXJkZWQgaW5zaWRlIHRoZSBzd2l0Y2ggYW5kIG5vdCBwYXNzZWQgdG8gdGhlIGhvc3QuICBPbmx5IHBhY2tldHMKKyAqIHRoYXQgbmVlZCB0aGUgaG9zdCdzIGF0dGVudGlvbiBhcmUgcGFzc2VkIHRvIGl0LiAgVGhpcyBwcmV2ZW50cyB0aGUgaG9zdAorICogd2FzdGluZyBDUFUgdGltZSB0byBleGFtaW5lIGVhY2ggYW5kIGV2ZXJ5IGluY29taW5nIHBhY2tldHMgYW5kIGRvIHRoZQorICogZm9yd2FyZGluZyBpdHNlbGYuCisgKgorICogQXMgdGhlIGhhY2sgcmVxdWlyZXMgdGhlIHByaXZhdGUgYnJpZGdlIGhlYWRlciwgdGhlIGRyaXZlciBjYW5ub3QgY29tcGlsZQorICogd2l0aCBqdXN0IHRoZSBrZXJuZWwgaGVhZGVycy4KKyAqCisgKiBFbmFibGluZyBTVFAgc3VwcG9ydCBhbHNvIHR1cm5zIG9uIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgc3RwOworCisvKgorICogVGhpcyBlbmFibGVzIGZhc3QgYWdpbmcgaW4gdGhlIEtTWjg4NDIgc3dpdGNoLiAgTm90IHN1cmUgd2hhdCBzaXR1YXRpb24KKyAqIG5lZWRzIHRoYXQuICBIb3dldmVyLCBmYXN0IGFnaW5nIGlzIHVzZWQgdG8gZmx1c2ggdGhlIGR5bmFtaWMgTUFDIHRhYmxlIHdoZW4KKyAqIFNUUCBzdXBvcnQgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIGludCBmYXN0X2FnaW5nOworCisvKioKKyAqIG5ldGRldl9pbml0IC0gaW5pdGFsaXplIG5ldHdvcmsgZGV2aWNlLgorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbmV0d29yayBkZXZpY2UuCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBuZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiA1MDAgbXMgdGltZW91dCAqLworCWtzel9pbml0X3RpbWVyKCZwcml2LT5tb25pdG9yX3RpbWVyX2luZm8sIDUwMCAqIEhaIC8gMTAwMCwKKwkJZGV2X21vbml0b3IsIGRldik7CisKKwkvKiA1MDAgbXMgdGltZW91dCAqLworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWiAvIDI7CisKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKworCS8qCisJICogSGFyZHdhcmUgZG9lcyBub3QgcmVhbGx5IHN1cHBvcnQgSVB2NiBjaGVja3N1bSBnZW5lcmF0aW9uLCBidXQKKwkgKiBkcml2ZXIgYWN0dWFsbHkgcnVucyBmYXN0ZXIgd2l0aCB0aGlzIG9uLiAgUmVmZXIgSVBWNl9DU1VNX0dFTl9IQUNLLgorCSAqLworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCisJc2VtYV9pbml0KCZwcml2LT5wcm9jX3NlbSwgMSk7CisKKwlwcml2LT5taWlfaWYucGh5X2lkX21hc2sgPSAweDE7CisJcHJpdi0+bWlpX2lmLnJlZ19udW1fbWFzayA9IDB4NzsKKwlwcml2LT5taWlfaWYuZGV2ID0gZGV2OworCXByaXYtPm1paV9pZi5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CisJcHJpdi0+bWlpX2lmLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOworCXByaXYtPm1paV9pZi5waHlfaWQgPSBwcml2LT5wb3J0LmZpcnN0X3BvcnQgKyAxOworCisJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG1zZ19lbmFibGUsCisJCShORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IG5ldGRldl9pbml0LAorCS5uZG9fb3BlbgkJPSBuZXRkZXZfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0ZGV2X2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5ldGRldl9xdWVyeV9zdGF0aXN0aWNzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRkZXZfdHgsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldGRldl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBuZXRkZXZfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG5ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBuZXRkZXZfaW9jdGwsCisJLm5kb19zZXRfcnhfbW9kZQk9IG5ldGRldl9zZXRfcnhfbW9kZSwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gbmV0ZGV2X25ldHBvbGwsCisjZW5kaWYKK307CisKK3N0YXRpYyB2b2lkIG5ldGRldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+d2F0Y2hkb2dfdGltZW8pCisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwlmcmVlX25ldGRldihkZXYpOworfQorCitzdHJ1Y3QgcGxhdGZvcm1faW5mbyB7CisJc3RydWN0IGRldl9pbmZvIGRldl9pbmZvOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZbU1dJVENIX1BPUlRfTlVNXTsKK307CisKK3N0YXRpYyBpbnQgbmV0X2RldmljZV9wcmVzZW50OworCitzdGF0aWMgdm9pZCBnZXRfbWFjX2FkZHIoc3RydWN0IGRldl9pbmZvICpod19wcml2LCB1OCAqbWFjYWRkciwgaW50IHBvcnQpCit7CisJaW50IGk7CisJaW50IGo7CisJaW50IGdvdF9udW07CisJaW50IG51bTsKKworCWkgPSBqID0gbnVtID0gZ290X251bSA9IDA7CisJd2hpbGUgKGogPCBNQUNfQUREUl9MRU4pIHsKKwkJaWYgKG1hY2FkZHJbaV0pIHsKKwkJCWdvdF9udW0gPSAxOworCQkJaWYgKCcwJyA8PSBtYWNhZGRyW2ldICYmIG1hY2FkZHJbaV0gPD0gJzknKQorCQkJCW51bSA9IG51bSAqIDE2ICsgbWFjYWRkcltpXSAtICcwJzsKKwkJCWVsc2UgaWYgKCdBJyA8PSBtYWNhZGRyW2ldICYmIG1hY2FkZHJbaV0gPD0gJ0YnKQorCQkJCW51bSA9IG51bSAqIDE2ICsgMTAgKyBtYWNhZGRyW2ldIC0gJ0EnOworCQkJZWxzZSBpZiAoJ2EnIDw9IG1hY2FkZHJbaV0gJiYgbWFjYWRkcltpXSA8PSAnZicpCisJCQkJbnVtID0gbnVtICogMTYgKyAxMCArIG1hY2FkZHJbaV0gLSAnYSc7CisJCQllbHNlIGlmICgnOicgPT0gbWFjYWRkcltpXSkKKwkJCQlnb3RfbnVtID0gMjsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmIChnb3RfbnVtKQorCQkJZ290X251bSA9IDI7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoMiA9PSBnb3RfbnVtKSB7CisJCQlpZiAoTUFJTl9QT1JUID09IHBvcnQpIHsKKwkJCQlod19wcml2LT5ody5vdmVycmlkZV9hZGRyW2orK10gPSAodTgpIG51bTsKKwkJCQlod19wcml2LT5ody5vdmVycmlkZV9hZGRyWzVdICs9CisJCQkJCWh3X3ByaXYtPmh3LmlkOworCQkJfSBlbHNlIHsKKwkJCQlod19wcml2LT5ody5rc3pfc3dpdGNoLT5vdGhlcl9hZGRyW2orK10gPQorCQkJCQkodTgpIG51bTsKKwkJCQlod19wcml2LT5ody5rc3pfc3dpdGNoLT5vdGhlcl9hZGRyWzVdICs9CisJCQkJCWh3X3ByaXYtPmh3LmlkOworCQkJfQorCQkJbnVtID0gZ290X251bSA9IDA7CisJCX0KKwkJaSsrOworCX0KKwlpZiAoTUFDX0FERFJfTEVOID09IGopIHsKKwkJaWYgKE1BSU5fUE9SVCA9PSBwb3J0KQorCQkJaHdfcHJpdi0+aHcubWFjX292ZXJyaWRlID0gMTsKKwl9Cit9CisKKyNkZWZpbmUgS1M4ODRYX0RNQV9NQVNLCQkJKH4weDBVTCkKKworc3RhdGljIHZvaWQgcmVhZF9vdGhlcl9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBpOworCXUxNiBkYXRhWzNdOworCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJZGF0YVtpXSA9IGVlcHJvbV9yZWFkKGh3LCBpICsgRUVQUk9NX0RBVEFfT1RIRVJfTUFDX0FERFIpOworCWlmICgoZGF0YVswXSB8fCBkYXRhWzFdIHx8IGRhdGFbMl0pICYmIGRhdGFbMF0gIT0gMHhmZmZmKSB7CisJCXN3LT5vdGhlcl9hZGRyWzVdID0gKHU4KSBkYXRhWzBdOworCQlzdy0+b3RoZXJfYWRkcls0XSA9ICh1OCkoZGF0YVswXSA+PiA4KTsKKwkJc3ctPm90aGVyX2FkZHJbM10gPSAodTgpIGRhdGFbMV07CisJCXN3LT5vdGhlcl9hZGRyWzJdID0gKHU4KShkYXRhWzFdID4+IDgpOworCQlzdy0+b3RoZXJfYWRkclsxXSA9ICh1OCkgZGF0YVsyXTsKKwkJc3ctPm90aGVyX2FkZHJbMF0gPSAodTgpKGRhdGFbMl0gPj4gOCk7CisJfQorfQorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfTUlDUkVMX0tTCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlDUkVMX0tTCQkweDE2YzYKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBwY2lkZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXY7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2OworCXN0cnVjdCBrc3pfaHcgKmh3OworCXN0cnVjdCBwbGF0Zm9ybV9pbmZvICppbmZvOworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIHJlZ19iYXNlOworCXVuc2lnbmVkIGxvbmcgcmVnX2xlbjsKKwlpbnQgY250OworCWludCBpOworCWludCBtaWJfcG9ydF9jb3VudDsKKwlpbnQgcGk7CisJaW50IHBvcnRfY291bnQ7CisJaW50IHJlc3VsdDsKKwljaGFyIGJhbm5lcls4MF07CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gTlVMTDsKKworCXJlc3VsdCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSAtRU5PREVWOworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgfHwKKwkJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlZ19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXJlZ19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWlmICgocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9JTykgIT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlZ19iYXNlLCByZWdfbGVuLCBEUlZfTkFNRSkpCisJCXJldHVybiByZXN1bHQ7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyZXN1bHQgPSAtRU5PTUVNOworCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlnb3RvIHBjaWRldl9pbml0X2Rldl9lcnI7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgcGxhdGZvcm1faW5mbykpOworCisJaHdfcHJpdiA9ICZpbmZvLT5kZXZfaW5mbzsKKwlod19wcml2LT5wZGV2ID0gcGRldjsKKworCWh3ID0gJmh3X3ByaXYtPmh3OworCisJaHctPmlvID0gaW9yZW1hcChyZWdfYmFzZSwgcmVnX2xlbik7CisJaWYgKCFody0+aW8pCisJCWdvdG8gcGNpZGV2X2luaXRfaW9fZXJyOworCisJY250ID0gaHdfaW5pdChodyk7CisJaWYgKCFjbnQpIHsKKwkJaWYgKG1zZ19lbmFibGUgJiBORVRJRl9NU0dfUFJPQkUpCisJCQlwcmludGsoS0VSTl9BTEVSVCAiY2hpcCBub3QgZGV0ZWN0ZWRcbiIpOworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIHBjaWRldl9pbml0X2FsbG9jX2VycjsKKwl9CisKKwlzcHJpbnRmKGJhbm5lciwJIiVzXG4iLCB2ZXJzaW9uKTsKKwliYW5uZXJbMTNdID0gY250ICsgJzAnOworCWtzX2luZm8oaHdfcHJpdiwgIiVzIiwgYmFubmVyKTsKKwlrc19kYmcoaHdfcHJpdiwgIk1lbSA9ICVwOyBJUlEgPSAlZFxuIiwgaHctPmlvLCBwZGV2LT5pcnEpOworCisJLyogQXNzdW1lIGRldmljZSBpcyBLU1o4ODQxLiAqLworCWh3LT5kZXZfY291bnQgPSAxOworCXBvcnRfY291bnQgPSAxOworCW1pYl9wb3J0X2NvdW50ID0gMTsKKwlody0+YWRkcl9saXN0X3NpemUgPSAwOworCWh3LT5taWJfY250ID0gUE9SVF9DT1VOVEVSX05VTTsKKwlody0+bWliX3BvcnRfY250ID0gMTsKKworCS8qIEtTWjg4NDIgaGFzIGEgc3dpdGNoIHdpdGggbXVsdGlwbGUgcG9ydHMuICovCisJaWYgKDIgPT0gY250KSB7CisJCWlmIChmYXN0X2FnaW5nKQorCQkJaHctPm92ZXJyaWRlcyB8PSBGQVNUX0FHSU5HOworCisJCWh3LT5taWJfY250ID0gVE9UQUxfUE9SVF9DT1VOVEVSX05VTTsKKworCQkvKiBNdWx0aXBsZSBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2VzIGFyZSByZXF1aXJlZC4gKi8KKwkJaWYgKG11bHRpX2RldikgeworCQkJaHctPmRldl9jb3VudCA9IFNXSVRDSF9QT1JUX05VTTsKKwkJCWh3LT5hZGRyX2xpc3Rfc2l6ZSA9IFNXSVRDSF9QT1JUX05VTSAtIDE7CisJCX0KKworCQkvKiBTaW5nbGUgbmV0d29yayBkZXZpY2UgaGFzIG11bHRpcGxlIHBvcnRzLiAqLworCQlpZiAoMSA9PSBody0+ZGV2X2NvdW50KSB7CisJCQlwb3J0X2NvdW50ID0gU1dJVENIX1BPUlRfTlVNOworCQkJbWliX3BvcnRfY291bnQgPSBTV0lUQ0hfUE9SVF9OVU07CisJCX0KKwkJaHctPm1pYl9wb3J0X2NudCA9IFRPVEFMX1BPUlRfTlVNOworCQlody0+a3N6X3N3aXRjaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrc3pfc3dpdGNoKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaHctPmtzel9zd2l0Y2gpCisJCQlnb3RvIHBjaWRldl9pbml0X2FsbG9jX2VycjsKKwkJbWVtc2V0KGh3LT5rc3pfc3dpdGNoLCAwLCBzaXplb2Yoc3RydWN0IGtzel9zd2l0Y2gpKTsKKworCQlzdyA9IGh3LT5rc3pfc3dpdGNoOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaHctPm1pYl9wb3J0X2NudDsgaSsrKQorCQlody0+cG9ydF9taWJbaV0ubWliX3N0YXJ0ID0gMDsKKworCWh3LT5wYXJlbnQgPSBod19wcml2OworCisJLyogRGVmYXVsdCBNVFUgaXMgMTUwMC4gKi8KKwlod19wcml2LT5tdHUgPSAoUkVHVUxBUl9SWF9CVUZfU0laRSArIDMpICYgfjM7CisKKwlpZiAoa3N6X2FsbG9jX21lbShod19wcml2KSkKKwkJZ290byBwY2lkZXZfaW5pdF9tZW1fZXJyOworCisJaHdfcHJpdi0+aHcuaWQgPSBuZXRfZGV2aWNlX3ByZXNlbnQ7CisKKwlzcGluX2xvY2tfaW5pdCgmaHdfcHJpdi0+aHdsb2NrKTsKKwltdXRleF9pbml0KCZod19wcml2LT5sb2NrKTsKKworCS8qIHRhc2tsZXQgaXMgZW5hYmxlZC4gKi8KKwl0YXNrbGV0X2luaXQoJmh3X3ByaXYtPnJ4X3Rhc2tsZXQsIHJ4X3Byb2NfdGFzaywKKwkJKHVuc2lnbmVkIGxvbmcpIGh3X3ByaXYpOworCXRhc2tsZXRfaW5pdCgmaHdfcHJpdi0+dHhfdGFza2xldCwgdHhfcHJvY190YXNrLAorCQkodW5zaWduZWQgbG9uZykgaHdfcHJpdik7CisKKwkvKiB0YXNrbGV0X2VuYWJsZSB3aWxsIGRlY3JlbWVudCB0aGUgYXRvbWljIGNvdW50ZXIuICovCisJdGFza2xldF9kaXNhYmxlKCZod19wcml2LT5yeF90YXNrbGV0KTsKKwl0YXNrbGV0X2Rpc2FibGUoJmh3X3ByaXYtPnR4X3Rhc2tsZXQpOworCisJZm9yIChpID0gMDsgaSA8IFRPVEFMX1BPUlRfTlVNOyBpKyspCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3X3ByaXYtPmNvdW50ZXJbaV0uY291bnRlcik7CisKKwlpZiAobWFjYWRkclswXSAhPSAnOicpCisJCWdldF9tYWNfYWRkcihod19wcml2LCBtYWNhZGRyLCBNQUlOX1BPUlQpOworCisJLyogUmVhZCBNQUMgYWRkcmVzcyBhbmQgaW5pdGlhbGl6ZSBvdmVycmlkZSBhZGRyZXNzIGlmIG5vdCBvdmVycmlkZWQuICovCisJaHdfcmVhZF9hZGRyKGh3KTsKKworCS8qIE11bHRpcGxlIGRldmljZSBpbnRlcmZhY2VzIG1vZGUgcmVxdWlyZXMgYSBzZWNvbmQgTUFDIGFkZHJlc3MuICovCisJaWYgKGh3LT5kZXZfY291bnQgPiAxKSB7CisJCW1lbWNweShzdy0+b3RoZXJfYWRkciwgaHctPm92ZXJyaWRlX2FkZHIsIE1BQ19BRERSX0xFTik7CisJCXJlYWRfb3RoZXJfYWRkcihodyk7CisJCWlmIChtYWMxYWRkclswXSAhPSAnOicpCisJCQlnZXRfbWFjX2FkZHIoaHdfcHJpdiwgbWFjMWFkZHIsIE9USEVSX1BPUlQpOworCX0KKworCWh3X3NldHVwKGh3KTsKKwlpZiAoaHctPmtzel9zd2l0Y2gpCisJCXN3X3NldHVwKGh3KTsKKwllbHNlIHsKKwkJaHdfcHJpdi0+d29sX3N1cHBvcnQgPSBXT0xfU1VQUE9SVDsKKwkJaHdfcHJpdi0+d29sX2VuYWJsZSA9IDA7CisJfQorCisJSU5JVF9XT1JLKCZod19wcml2LT5taWJfcmVhZCwgbWliX3JlYWRfd29yayk7CisKKwkvKiA1MDAgbXMgdGltZW91dCAqLworCWtzel9pbml0X3RpbWVyKCZod19wcml2LT5taWJfdGltZXJfaW5mbywgNTAwICogSFogLyAxMDAwLAorCQltaWJfbW9uaXRvciwgaHdfcHJpdik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmRldl9jb3VudDsgaSsrKSB7CisJCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZGV2X3ByaXYpKTsKKwkJaWYgKCFkZXYpCisJCQlnb3RvIHBjaWRldl9pbml0X3JlZ19lcnI7CisJCWluZm8tPm5ldGRldltpXSA9IGRldjsKKworCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJcHJpdi0+YWRhcHRlciA9IGh3X3ByaXY7CisJCXByaXYtPmlkID0gbmV0X2RldmljZV9wcmVzZW50Kys7CisKKwkJcG9ydCA9ICZwcml2LT5wb3J0OworCQlwb3J0LT5wb3J0X2NudCA9IHBvcnRfY291bnQ7CisJCXBvcnQtPm1pYl9wb3J0X2NudCA9IG1pYl9wb3J0X2NvdW50OworCQlwb3J0LT5maXJzdF9wb3J0ID0gaTsKKwkJcG9ydC0+Zmxvd19jdHJsID0gUEhZX0ZMT1dfQ1RSTDsKKworCQlwb3J0LT5odyA9IGh3OworCQlwb3J0LT5saW5rZWQgPSAmaHctPnBvcnRfaW5mb1twb3J0LT5maXJzdF9wb3J0XTsKKworCQlmb3IgKGNudCA9IDAsIHBpID0gaTsgY250IDwgcG9ydF9jb3VudDsgY250KyssIHBpKyspIHsKKwkJCWh3LT5wb3J0X2luZm9bcGldLnBvcnRfaWQgPSBwaTsKKwkJCWh3LT5wb3J0X2luZm9bcGldLnBkZXYgPSBkZXY7CisJCQlody0+cG9ydF9pbmZvW3BpXS5zdGF0ZSA9IG1lZGlhX2Rpc2Nvbm5lY3RlZDsKKwkJfQorCisJCWRldi0+bWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGh3LT5pbzsKKwkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyByZWdfbGVuIC0gMTsKKwkJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisJCWlmIChNQUlOX1BPUlQgPT0gaSkKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBod19wcml2LT5ody5vdmVycmlkZV9hZGRyLAorCQkJCU1BQ19BRERSX0xFTik7CisJCWVsc2UgeworCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHN3LT5vdGhlcl9hZGRyLAorCQkJCU1BQ19BRERSX0xFTik7CisJCQlpZiAoIW1lbWNtcChzdy0+b3RoZXJfYWRkciwgaHctPm92ZXJyaWRlX2FkZHIsCisJCQkJCU1BQ19BRERSX0xFTikpCisJCQkJZGV2LT5kZXZfYWRkcls1XSArPSBwb3J0LT5maXJzdF9wb3J0OworCQl9CisKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CisJCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOworCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCisJCQlnb3RvIHBjaWRldl9pbml0X3JlZ19lcnI7CisJCXBvcnRfc2V0X3Bvd2VyX3NhdmluZyhwb3J0LCB0cnVlKTsKKwl9CisKKwlwY2lfZGV2X2dldChod19wcml2LT5wZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisJcmV0dXJuIDA7CisKK3BjaWRldl9pbml0X3JlZ19lcnI6CisJZm9yIChpID0gMDsgaSA8IGh3LT5kZXZfY291bnQ7IGkrKykgeworCQlpZiAoaW5mby0+bmV0ZGV2W2ldKSB7CisJCQluZXRkZXZfZnJlZShpbmZvLT5uZXRkZXZbaV0pOworCQkJaW5mby0+bmV0ZGV2W2ldID0gTlVMTDsKKwkJfQorCX0KKworcGNpZGV2X2luaXRfbWVtX2VycjoKKwlrc3pfZnJlZV9tZW0oaHdfcHJpdik7CisJa2ZyZWUoaHctPmtzel9zd2l0Y2gpOworCitwY2lkZXZfaW5pdF9hbGxvY19lcnI6CisJaW91bm1hcChody0+aW8pOworCitwY2lkZXZfaW5pdF9pb19lcnI6CisJa2ZyZWUoaW5mbyk7CisKK3BjaWRldl9pbml0X2Rldl9lcnI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ19iYXNlLCByZWdfbGVuKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWRldl9leGl0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBwbGF0Zm9ybV9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9ICZpbmZvLT5kZXZfaW5mbzsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWZvciAoaSA9IDA7IGkgPCBod19wcml2LT5ody5kZXZfY291bnQ7IGkrKykgeworCQlpZiAoaW5mby0+bmV0ZGV2W2ldKQorCQkJbmV0ZGV2X2ZyZWUoaW5mby0+bmV0ZGV2W2ldKTsKKwl9CisJaWYgKGh3X3ByaXYtPmh3LmlvKQorCQlpb3VubWFwKGh3X3ByaXYtPmh3LmlvKTsKKwlrc3pfZnJlZV9tZW0oaHdfcHJpdik7CisJa2ZyZWUoaHdfcHJpdi0+aHcua3N6X3N3aXRjaCk7CisJcGNpX2Rldl9wdXQoaHdfcHJpdi0+cGRldik7CisJa2ZyZWUoaW5mbyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcGNpZGV2X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1faW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSAmaW5mby0+ZGV2X2luZm87CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CisKKwlpZiAoaHdfcHJpdi0+d29sX2VuYWJsZSkKKwkJaHdfY2ZnX3dvbF9wbWUoaHcsIDApOworCWZvciAoaSA9IDA7IGkgPCBody0+ZGV2X2NvdW50OyBpKyspIHsKKwkJaWYgKGluZm8tPm5ldGRldltpXSkgeworCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPm5ldGRldltpXTsKKworCQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJCW5ldGRldl9vcGVuKGRldik7CisJCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaWRldl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gJmluZm8tPmRldl9pbmZvOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCisJLyogTmVlZCB0byBmaW5kIGEgd2F5IHRvIHJldHJpZXZlIHRoZSBkZXZpY2UgSVAgYWRkcmVzcy4gKi8KKwl1OCBuZXRfYWRkcltdID0geyAxOTIsIDE2OCwgMSwgMSB9OworCisJZm9yIChpID0gMDsgaSA8IGh3LT5kZXZfY291bnQ7IGkrKykgeworCQlpZiAoaW5mby0+bmV0ZGV2W2ldKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+bmV0ZGV2W2ldOworCisJCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCQkJCW5ldGRldl9jbG9zZShkZXYpOworCQkJfQorCQl9CisJfQorCWlmIChod19wcml2LT53b2xfZW5hYmxlKSB7CisJCWh3X2VuYWJsZV93b2woaHcsIGh3X3ByaXYtPndvbF9lbmFibGUsIG5ldF9hZGRyKTsKKwkJaHdfY2ZnX3dvbF9wbWUoaHcsIDEpOworCX0KKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSwgMSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNoYXIgcGNpZGV2X25hbWVbXSA9ICJrc3o4ODR4cCI7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lkZXZfdGFibGVbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfTUlDUkVMX0tTLCAweDg4NDEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfTUlDUkVMX0tTLCAweDg4NDIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaWRldl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lfZGV2aWNlX2RyaXZlciA9IHsKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHBjaWRldl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGNpZGV2X3Jlc3VtZSwKKyNlbmRpZgorCS5uYW1lCQk9IHBjaWRldl9uYW1lLAorCS5pZF90YWJsZQk9IHBjaWRldl90YWJsZSwKKwkucHJvYmUJCT0gcGNpZGV2X2luaXQsCisJLnJlbW92ZQkJPSBwY2lkZXZfZXhpdAorfTsKKworc3RhdGljIGludCBfX2luaXQga3N6ODg0eF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2lfZGV2aWNlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrc3o4ODR4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2lfZGV2aWNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtzejg4NHhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoa3N6ODg0eF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiS1NaODg0MS8yIFBDSSBuZXR3b3JrIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVHJpc3RyYW0gSGEgPFRyaXN0cmFtLkhhQG1pY3JlbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChtZXNzYWdlLCBtc2dfZW5hYmxlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZXNzYWdlLCAiTWVzc2FnZSB2ZXJib3NpdHkgbGV2ZWwgKDA9bm9uZSwgMzE9YWxsKSIpOworCittb2R1bGVfcGFyYW0obWFjYWRkciwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKG1hYzFhZGRyLCBjaGFycCwgMCk7Cittb2R1bGVfcGFyYW0oZmFzdF9hZ2luZywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShtdWx0aV9kZXYsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oc3RwLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYWNhZGRyLCAiTUFDIGFkZHJlc3MiKTsKK01PRFVMRV9QQVJNX0RFU0MobWFjMWFkZHIsICJTZWNvbmQgTUFDIGFkZHJlc3MiKTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdF9hZ2luZywgIkZhc3QgYWdpbmciKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfZGV2LCAiTXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RwLCAiU1RQIHN1cHBvcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbmNlLmMgYi9kcml2ZXJzL25ldC9sYW5jZS5jCmluZGV4IDhkN2QzZDQuLjdiOTQ0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvbGFuY2UuYwpAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAl9IGVsc2UgewogCQlzaG9ydCBtdWx0aWNhc3RfdGFibGVbNF07CiAJCWludCBpOwotCQlpbnQgbnVtX2FkZHJzPWRldi0+bWNfY291bnQ7CisJCWludCBudW1fYWRkcnM9bmV0ZGV2X21jX2NvdW50KGRldik7CiAJCWlmKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKQogCQkJbnVtX2FkZHJzPTE7CiAJCS8qIEZJWElUOiBXZSBkb24ndCB1c2UgdGhlIG11bHRpY2FzdCB0YWJsZSwgYnV0IHJlbHkgb24gdXBwZXItbGF5ZXIgZmlsdGVyaW5nLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGliODI1OTYuYyBiL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKaW5kZXggYjExN2Y3Zi4uNDQzYzM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGliODI1OTYuYworKysgYi9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCkBAIC0xMDk0LDExICsxMDk0LDkgQEAKIAkJcmV0dXJuIGk7CiAJfTsKIAotCURFQihERUJfUFJPQkUsIHByaW50ayhLRVJOX0lORk8gIiVzOiA4MjU5NiBhdCAlIzNseCwiLAotCQkJICAgICAgZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkcikpOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCURFQihERUJfUFJPQkUsIHByaW50aygiICUyLjJYIiwgZGV2LT5kZXZfYWRkcltpXSkpOwotCURFQihERUJfUFJPQkUsIHByaW50aygiIElSUSAlZC5cbiIsIGRldi0+aXJxKSk7CisJREVCKERFQl9QUk9CRSwgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDgyNTk2IGF0ICUjM2x4LCAlcE0gSVJRICVkLlxuIiwKKwkJCSAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsCisJCQkgICAgICBkZXYtPmlycSkpOwogCURFQihERUJfSU5JVCwgcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAiJXM6IGRtYSBhdCAweCVwICglZCBieXRlcyksIGxwLT5zY2IgYXQgMHglcFxuIiwKIAkJCSAgICAgZGV2LT5uYW1lLCBkbWEsIChpbnQpc2l6ZW9mKHN0cnVjdCBpNTk2X2RtYSksCkBAIC0xMzgyLDMxICsxMzgwLDMyIEBACiAJCX0KIAl9CiAKLQljbnQgPSBkZXYtPm1jX2NvdW50OworCWNudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCWlmIChjbnQgPiBNQVhfTUNfQ05UKSB7CiAJCWNudCA9IE1BWF9NQ19DTlQ7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE9ubHkgJWQgbXVsdGljYXN0IGFkZHJlc3NlcyBzdXBwb3J0ZWQiLAogCQkJZGV2LT5uYW1lLCBjbnQpOwogCX0KIAotCWlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCXVuc2lnbmVkIGNoYXIgKmNwOwogCQlzdHJ1Y3QgbWNfY21kICpjbWQ7CiAKIAkJY21kID0gJmRtYS0+bWNfY21kOwogCQljbWQtPmNtZC5jb21tYW5kID0gU1dBUDE2KENtZE11bHRpY2FzdExpc3QpOwotCQljbWQtPm1jX2NudCA9IFNXQVAxNihkZXYtPm1jX2NvdW50ICogNik7CisJCWNtZC0+bWNfY250ID0gU1dBUDE2KG5ldGRldl9tY19jb3VudChkZXYpICogNik7CiAJCWNwID0gY21kLT5tY19hZGRyczsKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JCSAgICAgY250ICYmIGRtaSAhPSBOVUxMOwotCQkgICAgIGRtaSA9IGRtaS0+bmV4dCwgY250LS0sIGNwICs9IDYpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJCWlmICghY250LS0pCisJCQkJYnJlYWs7CiAJCQltZW1jcHkoY3AsIGRtaS0+ZG1pX2FkZHIsIDYpOwogCQkJaWYgKGk1OTZfZGVidWcgPiAxKQogCQkJCURFQihERUJfTVVMVEksCiAJCQkJICAgIHByaW50ayhLRVJOX0RFQlVHCiAJCQkJCSAgICIlczogQWRkaW5nIGFkZHJlc3MgJXBNXG4iLAogCQkJCQkgICBkZXYtPm5hbWUsIGNwKSk7CisJCQljcCArPSA2OwogCQl9CiAJCURNQV9XQkFDS19JTlYoZGV2LCAmZG1hLT5tY19jbWQsIHNpemVvZihzdHJ1Y3QgbWNfY21kKSk7CiAJCWk1OTZfYWRkX2NtZChkZXYsICZjbWQtPmNtZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9saWI4MzkwLmMgYi9kcml2ZXJzL25ldC9saWI4MzkwLmMKaW5kZXggNTdmMjU4NC4uNTZmNjZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGliODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwpAQCAtOTA3LDE1ICs5MDcsOCBAQAogewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCi0JZm9yIChkbWk9ZGV2LT5tY19saXN0OyBkbWk7IGRtaT1kbWktPm5leHQpCi0JewotCQl1MzIgY3JjOwotCQlpZiAoZG1pLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTikKLQkJewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgbXVsdGljYXN0IGFkZHJlc3MgbGVuZ3RoIGdpdmVuLlxuIiwgZGV2LT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJdTMyIGNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7CiAJCS8qCiAJCSAqIFRoZSA4MzkwIHVzZXMgdGhlIDYgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZQogCQkgKiBDUkMgdG8gaW5kZXggdGhlIG11bHRpY2FzdCB0YWJsZS4KQEAgLTk0MSw3ICs5MzQsNyBAQAogCWlmICghKGRldi0+ZmxhZ3MmKElGRl9QUk9NSVNDfElGRl9BTExNVUxUSSkpKQogCXsKIAkJbWVtc2V0KGVpX2xvY2FsLT5tY2ZpbHRlciwgMCwgOCk7Ci0JCWlmIChkZXYtPm1jX2xpc3QpCisJCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCQltYWtlX21jX2JpdHMoZWlfbG9jYWwtPm1jZmlsdGVyLCBkZXYpOwogCX0KIAllbHNlCkBAIC05NzUsNyArOTY4LDcgQEAKIAogICAJaWYoZGV2LT5mbGFncyZJRkZfUFJPTUlTQykKICAgCQllaV9vdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDE4LCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwotCWVsc2UgaWYoZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19saXN0KQorCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKQogICAJCWVpX291dGJfcChFODM5MF9SWENPTkZJRyB8IDB4MDgsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CiAgIAllbHNlCiAgIAkJZWlfb3V0Yl9wKEU4MzkwX1JYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCmluZGV4IGE4NTIyYmQuLmExOGUzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKQEAgLTIyNCw2ICsyMjQsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBuZXRkZXZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlyZXR1cm4gdGVtYWNfc2V0X21hY19hZGRyZXNzKG5kZXYsIGFkZHItPnNhX2RhdGEpOworfQorCiBzdGF0aWMgdm9pZCB0ZW1hY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMjMyLDcgKzIzOSw3IEBACiAKIAltdXRleF9sb2NrKCZscC0+aW5kaXJlY3RfbXV0ZXgpOwogCWlmIChuZGV2LT5mbGFncyAmIChJRkZfQUxMTVVMVEkgfCBJRkZfUFJPTUlTQykgfHwKLQkgICAgbmRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfQ0FNX1RBQkxFX05VTSkgeworCSAgICBuZXRkZXZfbWNfY291bnQobmRldikgPiBNVUxUSUNBU1RfQ0FNX1RBQkxFX05VTSkgewogCQkvKgogCQkgKglXZSBtdXN0IG1ha2UgdGhlIGtlcm5lbCByZWFsaXNlIHdlIGhhZCB0byBtb3ZlCiAJCSAqCWludG8gcHJvbWlzYyBtb2RlIG9yIHdlIHN0YXJ0IGFsbCBvdXQgd2FyIG9uCkBAIC0yNDIsMTAgKzI0OSwxMSBAQAogCQluZGV2LT5mbGFncyB8PSBJRkZfUFJPTUlTQzsKIAkJdGVtYWNfaW5kaXJlY3Rfb3V0MzIobHAsIFhURV9BRk1fT0ZGU0VULCBYVEVfQUZNX0VQUFJNX01BU0spOwogCQlkZXZfaW5mbygmbmRldi0+ZGV2LCAiUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIik7Ci0JfSBlbHNlIGlmIChuZGV2LT5tY19jb3VudCkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCA9IG5kZXYtPm1jX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IG1jbGlzdCAmJiBpIDwgbmRldi0+bWNfY291bnQ7IGkrKykgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShuZGV2KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBuZGV2KSB7CiAJCQlpZiAoaSA+PSBNVUxUSUNBU1RfQ0FNX1RBQkxFX05VTSkKIAkJCQlicmVhazsKIAkJCW11bHRpX2FkZHJfbXN3ID0gKChtY2xpc3QtPmRtaV9hZGRyWzNdIDw8IDI0KSB8CkBAIC0yNTgsNyArMjY2LDcgQEAKIAkJCQkJICAobWNsaXN0LT5kbWlfYWRkcls0XSkgfCAoaSA8PCAxNikpOwogCQkJdGVtYWNfaW5kaXJlY3Rfb3V0MzIobHAsIFhURV9NQVcxX09GRlNFVCwKIAkJCQkJICAgICBtdWx0aV9hZGRyX2xzdyk7Ci0JCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJCQlpKys7CiAJCX0KIAl9IGVsc2UgewogCQl2YWwgPSB0ZW1hY19pbmRpcmVjdF9pbjMyKGxwLCBYVEVfQUZNX09GRlNFVCk7CkBAIC02MTUsNyArNjIzLDcgQEAKIAl3aGlsZSAoKGJkc3RhdCAmIFNUU19DVFJMX0FQUDBfQ01QTFQpKSB7CiAKIAkJc2tiID0gbHAtPnJ4X3NrYltscC0+cnhfYmRfY2ldOwotCQlsZW5ndGggPSBjdXJfcC0+YXBwNDsKKwkJbGVuZ3RoID0gY3VyX3AtPmFwcDQgJiAweDNGRkY7CiAKIAkJc2tiX3ZhZGRyID0gdmlydF90b19idXMoc2tiLT5kYXRhKTsKIAkJZG1hX3VubWFwX3NpbmdsZShuZGV2LT5kZXYucGFyZW50LCBza2JfdmFkZHIsIGxlbmd0aCwKQEAgLTc2OCw3ICs3NzYsNyBAQAogCS5uZG9fb3BlbiA9IHRlbWFjX29wZW4sCiAJLm5kb19zdG9wID0gdGVtYWNfc3RvcCwKIAkubmRvX3N0YXJ0X3htaXQgPSB0ZW1hY19zdGFydF94bWl0LAotCS5uZG9fc2V0X21hY19hZGRyZXNzID0gdGVtYWNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbmV0ZGV2X3NldF9tYWNfYWRkcmVzcywKIAkvLy5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdGVtYWNfc2V0X211bHRpY2FzdF9saXN0LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB0ZW1hY19wb2xsX2NvbnRyb2xsZXIsCkBAIC05MzgsNiArOTQ2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVtYWNfb2ZfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtbGwtdGVtYWMtMS4wMS5iIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWxsLXRlbWFjLTIuMDAuYSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1sbC10ZW1hYy0yLjAyLmEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtbGwtdGVtYWMtMi4wMy5hIiwgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0ZW1hY19vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCBiOWZjYzk4Li43MmI3OTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTcyLDcgKzcyLDggQEAKIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjcHVfbHN0YXRzICpwY3B1X2xzdGF0cywgKmxiX3N0YXRzOworCXN0cnVjdCBwY3B1X2xzdGF0cyBfX3BlcmNwdSAqcGNwdV9sc3RhdHM7CisJc3RydWN0IHBjcHVfbHN0YXRzICpsYl9zdGF0czsKIAlpbnQgbGVuOwogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtODAsNyArODEsNyBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKIAkvKiBpdCdzIE9LIHRvIHVzZSBwZXJfY3B1X3B0cigpIGJlY2F1c2UgQkhzIGFyZSBvZmYgKi8KLQlwY3B1X2xzdGF0cyA9IGRldi0+bWxfcHJpdjsKKwlwY3B1X2xzdGF0cyA9ICh2b2lkIF9fcGVyY3B1IF9fZm9yY2UgKilkZXYtPm1sX3ByaXY7CiAJbGJfc3RhdHMgPSB0aGlzX2NwdV9wdHIocGNwdV9sc3RhdHMpOwogCiAJbGVuID0gc2tiLT5sZW47CkBAIC05NSwxNCArOTYsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsb29wYmFja19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQljb25zdCBzdHJ1Y3QgcGNwdV9sc3RhdHMgKnBjcHVfbHN0YXRzOworCWNvbnN0IHN0cnVjdCBwY3B1X2xzdGF0cyBfX3BlcmNwdSAqcGNwdV9sc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgbG9uZyBieXRlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBwYWNrZXRzID0gMDsKIAl1bnNpZ25lZCBsb25nIGRyb3BzID0gMDsKIAlpbnQgaTsKIAotCXBjcHVfbHN0YXRzID0gZGV2LT5tbF9wcml2OworCXBjcHVfbHN0YXRzID0gKHZvaWQgX19wZXJjcHUgX19mb3JjZSAqKWRldi0+bWxfcHJpdjsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQljb25zdCBzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxiX3N0YXRzOwogCkBAIC0xMzUsMTkgKzEzNiwyMCBAQAogCiBzdGF0aWMgaW50IGxvb3BiYWNrX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjcHVfbHN0YXRzICpsc3RhdHM7CisJc3RydWN0IHBjcHVfbHN0YXRzIF9fcGVyY3B1ICpsc3RhdHM7CiAKIAlsc3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IHBjcHVfbHN0YXRzKTsKIAlpZiAoIWxzdGF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXYtPm1sX3ByaXYgPSBsc3RhdHM7CisJZGV2LT5tbF9wcml2ID0gKHZvaWQgX19mb3JjZSAqKWxzdGF0czsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbG9vcGJhY2tfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxzdGF0cyA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgcGNwdV9sc3RhdHMgX19wZXJjcHUgKmxzdGF0cyA9CisJCSh2b2lkIF9fcGVyY3B1IF9fZm9yY2UgKilkZXYtPm1sX3ByaXY7CiAKIAlmcmVlX3BlcmNwdShsc3RhdHMpOwogCWZyZWVfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IGUyMGZlZmMuLjNlM2NjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC0xMjUzLDIxICsxMjUzLDIyIEBACiAKIAlpZiAoaTU5Nl9kZWJ1ZyA+IDEpCiAJCXByaW50ayAoIiVzOiBzZXQgbXVsdGljYXN0IGxpc3QgJWRcbiIsCi0JCQlkZXYtPm5hbWUsIGRldi0+bWNfY291bnQpOworCQkJZGV2LT5uYW1lLCBuZXRkZXZfbWNfY291bnQoZGV2KSk7CiAKLQlpZiAoZGV2LT5tY19jb3VudCA+IDApIHsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQljaGFyICpjcDsKLQkJY21kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGk1OTZfY21kKSsyK2Rldi0+bWNfY291bnQqNiwgR0ZQX0FUT01JQyk7CisJCWNtZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpNTk2X2NtZCkgKyAyICsKKwkJCSAgICAgIG5ldGRldl9tY19jb3VudChkZXYpICogNiwgR0ZQX0FUT01JQyk7CiAJCWlmIChjbWQgPT0gTlVMTCkgewogCQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHNldF9tdWx0aWNhc3QgTWVtb3J5IHNxdWVlemUuXG4iLCBkZXYtPm5hbWUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNtZC0+Y29tbWFuZCA9IENtZE11bHRpY2FzdExpc3Q7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopIChjbWQgKyAxKSkgPSBkZXYtPm1jX2NvdW50ICogNjsKKwkJKigodW5zaWduZWQgc2hvcnQgKikgKGNtZCArIDEpKSA9IG5ldGRldl9tY19jb3VudChkZXYpICogNjsKIAkJY3AgPSAoKGNoYXIgKikoY21kICsgMSkpKzI7Ci0JCWZvciAoZG1pID0gZGV2LT5tY19saXN0OyBkbWkgIT0gTlVMTDsgZG1pID0gZG1pLT5uZXh0KSB7Ci0JCQltZW1jcHkoY3AsIGRtaSw2KTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJCW1lbWNweShjcCwgZG1pLT5kbWlfYWRkciwgNik7CiAJCQljcCArPSA2OwogCQl9CiAJCWlmIChpNTk2X2RlYnVnICYgTE9HX1NSQ0RTVCkKQEAgLTEyNzcsNyArMTI3OCw4IEBACiAJCWlmIChscC0+c2V0X2NvbmYucGFfbmV4dCAhPSBJNTk2X05VTEwpIHsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAoZGV2LT5tY19jb3VudCA9PSAwICYmICEoZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSkpKSB7CisJCWlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSAmJgorCQkgICAgIShkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkpIHsKIAkJCWxwLT5pNTk2X2NvbmZpZ1s4XSAmPSB+MHgwMTsKIAkJfSBlbHNlIHsKIAkJCWxwLT5pNTk2X2NvbmZpZ1s4XSB8PSAweDAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODM5MC5jIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCmluZGV4IGY4ZmEwYzMuLmE4NzY4NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKQEAgLTE3LDYgKzE3LDggQEAKIC8qIDIwMDItMTItMzA6IFRyeSB0byBzdXBwb3J0IG1vcmUgY2FyZHMsIHNvbWUgY2x1ZXMgZnJvbSBOZXRCU0QgZHJpdmVyICovCiAvKiAyMDAzLTEyLTI2OiBNYWtlIHN1cmUgQXNhbnRlIGNhcmRzIGFsd2F5cyB3b3JrLiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzQsMzEgKzM2LDM2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaHd0ZXN0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KIAogc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLQkibWFjODM5MC5jOiB2MC40IDIwMDEtMDUtMTUgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPiBhbmQgb3RoZXJzXG4iOworCSJ2MC40IDIwMDEtMDUtMTUgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPiBhbmQgb3RoZXJzXG4iOwogCiAjZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKLSNkZWZpbmUgZWlfaW5iKHBvcnQpICAgaW5fOChwb3J0KQotI2RlZmluZSBlaV9vdXRiKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCi0jZGVmaW5lIGVpX2luYl9wKHBvcnQpICAgaW5fOChwb3J0KQotI2RlZmluZSBlaV9vdXRiX3AodmFsLHBvcnQpICBvdXRfOChwb3J0LHZhbCkKKyNkZWZpbmUgZWlfaW5iKHBvcnQpCWluXzgocG9ydCkKKyNkZWZpbmUgZWlfb3V0Yih2YWwsIHBvcnQpCW91dF84KHBvcnQsIHZhbCkKKyNkZWZpbmUgZWlfaW5iX3AocG9ydCkJaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiX3AodmFsLCBwb3J0KQlvdXRfOChwb3J0LCB2YWwpCiAKICNpbmNsdWRlICJsaWI4MzkwLmMiCiAKICNkZWZpbmUgV0RfU1RBUlRfUEcJCQkweDAwCS8qIEZpcnN0IHBhZ2Ugb2YgVFggYnVmZmVyICovCiAjZGVmaW5lIENBQkxFVFJPTl9SWF9TVEFSVF9QRwkJMHgwMCAgICAvKiBGaXJzdCBwYWdlIG9mIFJYIGJ1ZmZlciAqLwogI2RlZmluZSBDQUJMRVRST05fUlhfU1RPUF9QRwkJMHgzMCAgICAvKiBMYXN0IHBhZ2UgKzEgb2YgUlggcmluZyAqLwotI2RlZmluZSBDQUJMRVRST05fVFhfU1RBUlRfUEcJCUNBQkxFVFJPTl9SWF9TVE9QX1BHICAvKiBGaXJzdCBwYWdlIG9mIFRYIGJ1ZmZlciAqLworI2RlZmluZSBDQUJMRVRST05fVFhfU1RBUlRfUEcJCUNBQkxFVFJPTl9SWF9TVE9QX1BHCisJCQkJCQkvKiBGaXJzdCBwYWdlIG9mIFRYIGJ1ZmZlciAqLwogCi0vKiBVbmZvcnR1bmF0ZWx5IGl0IHNlZW1zIHdlIGhhdmUgdG8gaGFyZGNvZGUgdGhlc2UgZm9yIHRoZSBtb21lbnQgKi8KLS8qIFNob3VsZG4ndCB0aGUgY2FyZCBrbm93IGFib3V0IHRoaXM/IERvZXMgYW55b25lIGtub3cgd2hlcmUgdG8gcmVhZCBpdCBvZmYgdGhlIGNhcmQ/IERvIHdlIHRydXN0IHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBjYXJkPyAqLworLyoKKyAqIFVuZm9ydHVuYXRlbHkgaXQgc2VlbXMgd2UgaGF2ZSB0byBoYXJkY29kZSB0aGVzZSBmb3IgdGhlIG1vbWVudAorICogU2hvdWxkbid0IHRoZSBjYXJkIGtub3cgYWJvdXQgdGhpcz8KKyAqIERvZXMgYW55b25lIGtub3cgd2hlcmUgdG8gcmVhZCBpdCBvZmYgdGhlIGNhcmQ/CisgKiBEbyB3ZSB0cnVzdCB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgY2FyZD8KKyAqLwogCiAjZGVmaW5lIERBWU5BXzgzOTBfQkFTRQkJMHg4MDAwMAogI2RlZmluZSBEQVlOQV84MzkwX01FTQkJMHgwMDAwMApAQCAtODAsNyArODcsNyBAQAogCU1BQzgzOTBfS0lORVRJQ1MsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNhcmRuYW1lW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY2FyZG5hbWVbXSA9IHsKIAkiYXBwbGUiLAogCSJhc2FudGUiLAogCSJmYXJhbGxvbiIsCkBAIC05MCw3ICs5Nyw3IEBACiAJImtpbmV0aWNzIiwKIH07CiAKLXN0YXRpYyBpbnQgd29yZDE2W10gPSB7CitzdGF0aWMgY29uc3QgaW50IHdvcmQxNltdID0gewogCTEsIC8qIGFwcGxlICovCiAJMSwgLyogYXNhbnRlICovCiAJMSwgLyogZmFyYWxsb24gKi8KQEAgLTEwMSw3ICsxMDgsNyBAQAogfTsKIAogLyogb24gd2hpY2ggY2FyZHMgZG8gd2UgdXNlIE51QnVzIHJlc291cmNlcz8gKi8KLXN0YXRpYyBpbnQgdXNlcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgY29uc3QgaW50IHVzZXJlc291cmNlc1tdID0gewogCTEsIC8qIGFwcGxlICovCiAJMSwgLyogYXNhbnRlICovCiAJMSwgLyogZmFyYWxsb24gKi8KQEAgLTExNywyMiArMTI0LDIyIEBACiAJQUNDRVNTXzE2LAogfTsKIAotZXh0ZXJuIGludCBtYWM4MzkwX21lbXRlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBtYWM4MzkwX2luaXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIHN0cnVjdCBudWJ1c19kZXYgKiBuZGV2LAorZXh0ZXJuIGludCBtYWM4MzkwX21lbXRlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG1hYzgzOTBfaW5pdGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbnVidXNfZGV2ICpuZGV2LAogCQkJICAgZW51bSBtYWM4MzkwX3R5cGUgdHlwZSk7CiAKLXN0YXRpYyBpbnQgbWFjODM5MF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgbWFjODM5MF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG1hYzgzOTBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbWFjODM5MF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG1hYzgzOTBfbm9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpbnRlcmxhbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogU2FuZSAoMzItYml0IGNodW5rIG1lbW9yeSByZWFkL3dyaXRlKSAtIFNvbWUgRmFyYWxsb24gYW5kIEFwcGxlIGRvIHRoaXMqLwogc3RhdGljIHZvaWQgc2FuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsIGludCByaW5nX3BhZ2UpOwotc3RhdGljIHZvaWQgc2FuZV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGNvdW50LAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgaW50IHJpbmdfb2Zmc2V0KTsKLXN0YXRpYyB2b2lkIHNhbmVfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgY291bnQsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCBjb25zdCBpbnQgc3RhcnRfcGFnZSk7CitzdGF0aWMgdm9pZCBzYW5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJpbmdfb2Zmc2V0KTsKK3N0YXRpYyB2b2lkIHNhbmVfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgY29uc3QgaW50IHN0YXJ0X3BhZ2UpOwogCiAvKiBkYXluYV9tZW1jcHkgdG8gYW5kIGZyb20gY2FyZCAqLwogc3RhdGljIHZvaWQgZGF5bmFfbWVtY3B5X2Zyb21jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnRvLApAQCAtMTQ4LDggKzE1NSw4IEBACiBzdGF0aWMgdm9pZCBkYXluYV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHN0YXJ0X3BhZ2UpOwogCi0jZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQotI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSwgYiwgYykJbWVtY3B5KChhKSwgKHZvaWQgKikoYiksIChjKSkKKyNkZWZpbmUgbWVtY3B5X3RvaW8oYSwgYiwgYykJbWVtY3B5KCh2b2lkICopKGEpLCAoYiksIChjKSkKIAogLyogU2xvdyBTYW5lICgxNi1iaXQgY2h1bmsgbWVtb3J5IHJlYWQvd3JpdGUpIENhYmxldHJvbiB1c2VzIHRoaXMgKi8KIHN0YXRpYyB2b2lkIHNsb3dfc2FuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE2NCw3MCArMTcxLDcyIEBACiBzdGF0aWMgZW51bSBtYWM4MzkwX3R5cGUgX19pbml0IG1hYzgzOTBfaWRlbnQoc3RydWN0IG51YnVzX2RldiAqZGV2KQogewogCXN3aXRjaCAoZGV2LT5kcl9zdykgewotCQljYXNlIE5VQlVTX0RSU1dfM0NPTToKLQkJCXN3aXRjaCAoZGV2LT5kcl9odykgewotCQkJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9TT05JQ19OQjoKLQkJCQljYXNlIE5VQlVTX0RSSFdfQVBQTEVfU09OSUNfTEM6Ci0JCQkJY2FzZSBOVUJVU19EUkhXX1NPTk5FVDoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7Ci0JCQkJCWJyZWFrOwotCQkJfQorCWNhc2UgTlVCVVNfRFJTV18zQ09NOgorCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKKwkJY2FzZSBOVUJVU19EUkhXX0FQUExFX1NPTklDX05COgorCQljYXNlIE5VQlVTX0RSSFdfQVBQTEVfU09OSUNfTEM6CisJCWNhc2UgTlVCVVNfRFJIV19TT05ORVQ6CisJCQlyZXR1cm4gTUFDODM5MF9OT05FOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19BUFBMRToKLQkJCXN3aXRjaCAoZGV2LT5kcl9odykgewotCQkJCWNhc2UgTlVCVVNfRFJIV19BU0FOVEVfTEM6Ci0JCQkJCXJldHVybiBNQUM4MzkwX05PTkU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTlVCVVNfRFJIV19DQUJMRVRST046Ci0JCQkJCXJldHVybiBNQUM4MzkwX0NBQkxFVFJPTjsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7Ci0JCQkJCWJyZWFrOwotCQkJfQorCWNhc2UgTlVCVVNfRFJTV19BUFBMRToKKwkJc3dpdGNoIChkZXYtPmRyX2h3KSB7CisJCWNhc2UgTlVCVVNfRFJIV19BU0FOVEVfTEM6CisJCQlyZXR1cm4gTUFDODM5MF9OT05FOwogCQkJYnJlYWs7CisJCWNhc2UgTlVCVVNfRFJIV19DQUJMRVRST046CisJCQlyZXR1cm4gTUFDODM5MF9DQUJMRVRST047CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBNQUM4MzkwX0FQUExFOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX0FTQU5URToKLQkJCXJldHVybiBNQUM4MzkwX0FTQU5URTsKLQkJCWJyZWFrOworCWNhc2UgTlVCVVNfRFJTV19BU0FOVEU6CisJCXJldHVybiBNQUM4MzkwX0FTQU5URTsKKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX1RFQ0hXT1JLUzoKLQkJY2FzZSBOVUJVU19EUlNXX0RBWU5BMjoKLQkJY2FzZSBOVUJVU19EUlNXX0RBWU5BX0xDOgotCQkJaWYgKGRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19DQUJMRVRST04pCi0JCQkJcmV0dXJuIE1BQzgzOTBfQ0FCTEVUUk9OOwotCQkJZWxzZQotCQkJCXJldHVybiBNQUM4MzkwX0FQUExFOwotCQkJYnJlYWs7CisJY2FzZSBOVUJVU19EUlNXX1RFQ0hXT1JLUzoKKwljYXNlIE5VQlVTX0RSU1dfREFZTkEyOgorCWNhc2UgTlVCVVNfRFJTV19EQVlOQV9MQzoKKwkJaWYgKGRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19DQUJMRVRST04pCisJCQlyZXR1cm4gTUFDODM5MF9DQUJMRVRST047CisJCWVsc2UKKwkJCXJldHVybiBNQUM4MzkwX0FQUExFOworCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfRkFSQUxMT046Ci0JCQlyZXR1cm4gTUFDODM5MF9GQVJBTExPTjsKLQkJCWJyZWFrOworCWNhc2UgTlVCVVNfRFJTV19GQVJBTExPTjoKKwkJcmV0dXJuIE1BQzgzOTBfRkFSQUxMT047CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19LSU5FVElDUzoKLQkJCXN3aXRjaCAoZGV2LT5kcl9odykgewotCQkJCWNhc2UgTlVCVVNfRFJIV19JTlRFUkxBTjoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfSU5URVJMQU47Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBNQUM4MzkwX0tJTkVUSUNTOwotCQkJCQlicmVhazsKLQkJCX0KKwljYXNlIE5VQlVTX0RSU1dfS0lORVRJQ1M6CisJCXN3aXRjaCAoZGV2LT5kcl9odykgeworCQljYXNlIE5VQlVTX0RSSFdfSU5URVJMQU46CisJCQlyZXR1cm4gTUFDODM5MF9JTlRFUkxBTjsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE1BQzgzOTBfS0lORVRJQ1M7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfREFZTkE6Ci0JCQkvLyBUaGVzZSBjb3JyZXNwb25kIHRvIERheW5hIFNvbmljIGNhcmRzCi0JCQkvLyB3aGljaCB1c2UgdGhlIG1hY3NvbmljIGRyaXZlcgotCQkJaWYgKGRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19TTUM5MTk0IHx8Ci0JCQkJZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX0lOVEVSTEFOICkKLQkJCQlyZXR1cm4gTUFDODM5MF9OT05FOwotCQkJZWxzZQotCQkJCXJldHVybiBNQUM4MzkwX0RBWU5BOwotCQkJYnJlYWs7CisJY2FzZSBOVUJVU19EUlNXX0RBWU5BOgorCQkvKgorCQkgKiBUaGVzZSBjb3JyZXNwb25kIHRvIERheW5hIFNvbmljIGNhcmRzCisJCSAqIHdoaWNoIHVzZSB0aGUgbWFjc29uaWMgZHJpdmVyCisJCSAqLworCQlpZiAoZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX1NNQzkxOTQgfHwKKwkJICAgIGRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19JTlRFUkxBTikKKwkJCXJldHVybiBNQUM4MzkwX05PTkU7CisJCWVsc2UKKwkJCXJldHVybiBNQUM4MzkwX0RBWU5BOworCQlicmVhazsKIAl9CiAJcmV0dXJuIE1BQzgzOTBfTk9ORTsKIH0KQEAgLTIzNywxNCArMjQ2LDE0IEBACiAJdW5zaWduZWQgbG9uZyBvdXRkYXRhID0gMHhBNUEwQjVCMDsKIAl1bnNpZ25lZCBsb25nIGluZGF0YSA9ICAweDAwMDAwMDAwOwogCS8qIFRyeSB3cml0aW5nIDMyIGJpdHMgKi8KLQltZW1jcHkoKGNoYXIgKiltZW1iYXNlLCAoY2hhciAqKSZvdXRkYXRhLCA0KTsKKwltZW1jcHkobWVtYmFzZSwgJm91dGRhdGEsIDQpOwogCS8qIE5vdyBjb21wYXJlIHRoZW0gKi8KIAlpZiAobWVtY21wKChjaGFyICopJm91dGRhdGEsIChjaGFyICopbWVtYmFzZSwgNCkgPT0gMCkKIAkJcmV0dXJuIEFDQ0VTU18zMjsKIAkvKiBXcml0ZSAxNiBiaXQgb3V0cHV0ICovCi0Jd29yZF9tZW1jcHlfdG9jYXJkKChjaGFyICopbWVtYmFzZSwgKGNoYXIgKikmb3V0ZGF0YSwgNCk7CisJd29yZF9tZW1jcHlfdG9jYXJkKG1lbWJhc2UsICZvdXRkYXRhLCA0KTsKIAkvKiBOb3cgcmVhZCBpdCBiYWNrICovCi0Jd29yZF9tZW1jcHlfZnJvbWNhcmQoKGNoYXIgKikmaW5kYXRhLCAoY2hhciAqKW1lbWJhc2UsIDQpOworCXdvcmRfbWVtY3B5X2Zyb21jYXJkKCZpbmRhdGEsIG1lbWJhc2UsIDQpOwogCWlmIChvdXRkYXRhID09IGluZGF0YSkKIAkJcmV0dXJuIEFDQ0VTU18xNjsKIAlyZXR1cm4gQUNDRVNTX1VOS05PV047CkBAIC0yNTgsNyArMjY3LDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJLyogQ2hlY2sgdXAgdG8gMzJLIGluIDRLIGluY3JlbWVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICptID0gKHVuc2lnbmVkIHNob3J0ICopIChtZW1iYXNlICsgKGkgKiAweDEwMDApKTsKKwkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKm0gPSAodW5zaWduZWQgc2hvcnQgKikobWVtYmFzZSArIChpICogMHgxMDAwKSk7CiAKIAkJLyogVW53cml0ZWFibGUgLSB3ZSBoYXZlIGEgZnVsbHkgZGVjb2RlZCBjYXJkIGFuZCB0aGUKIAkJICAgUkFNIGVuZCBsb2NhdGVkICovCkBAIC0yNzMsMjggKzI4MiwxMjcgQEAKIAogCQkvKiBjaGVjayBmb3IgcGFydGlhbCBkZWNvZGUgYW5kIHdyYXAgKi8KIAkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotCQkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodW5zaWduZWQgc2hvcnQgKikgKG1lbWJhc2UgKyAoaiAqIDB4MTAwMCkpOworCQkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodW5zaWduZWQgc2hvcnQgKikobWVtYmFzZSArIChqICogMHgxMDAwKSk7CiAJCQlpZiAoKnAgIT0gKDB4QTVBMCB8IGopKQogCQkJCWJyZWFrOwotIAkJfQotIAl9CisJCX0KKwl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCS8qIGluIGFueSBjYXNlLCB3ZSBzdG9wcGVkIG9uY2Ugd2UgdHJpZWQgb25lIGJsb2NrIHRvbyBtYW55LAotICAgICAgICAgICBvciBvbmNlIHdlIHJlYWNoZWQgMzJLICovCi0gCXJldHVybiBpICogMHgxMDAwOworCS8qCisJICogaW4gYW55IGNhc2UsIHdlIHN0b3BwZWQgb25jZSB3ZSB0cmllZCBvbmUgYmxvY2sgdG9vIG1hbnksCisJICogb3Igb25jZSB3ZSByZWFjaGVkIDMySworCSAqLworCXJldHVybiBpICogMHgxMDAwOworfQorCitzdGF0aWMgYm9vbCBfX2luaXQgbWFjODM5MF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBudWJ1c19kZXYgKm5kZXYsCisJCQkJZW51bSBtYWM4MzkwX3R5cGUgY2FyZHR5cGUpCit7CisJc3RydWN0IG51YnVzX2RpciBkaXI7CisJc3RydWN0IG51YnVzX2RpcmVudCBlbnQ7CisJaW50IG9mZnNldDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqaTsKKworCXByaW50a19vbmNlKEtFUk5fSU5GTyBwcl9mbXQoIiVzIiksIHZlcnNpb24pOworCisJZGV2LT5pcnEgPSBTTE9UMklSUShuZGV2LT5ib2FyZC0+c2xvdCk7CisJLyogVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgaGFiaXQgKi8KKwlkZXYtPmJhc2VfYWRkciA9IChuZGV2LT5ib2FyZC0+c2xvdF9hZGRyIHwKKwkJCSAgKChuZGV2LT5ib2FyZC0+c2xvdCAmIDB4ZikgPDwgMjApKTsKKworCS8qCisJICogR2V0IHNvbWUgTnVidXMgaW5mbyAtIHdlIHdpbGwgdHJ1c3QgdGhlIGNhcmQncyBpZGVhCisJICogb2Ygd2hlcmUgaXRzIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIGFyZS4KKwkgKi8KKworCWlmIChudWJ1c19nZXRfZnVuY19kaXIobmRldiwgJmRpcikgPT0gLTEpIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGdldCBOdWJ1cyBmdW5jdGlvbmFsIGRpcmVjdG9yeSBmb3Igc2xvdCAlWCFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlpZiAobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01BQ19BRERSRVNTLCAmZW50KSA9PSAtMSkgeworCQlwcl9pbmZvKCIlczogQ291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW51YnVzX2dldF9yc3JjX21lbShkZXYtPmRldl9hZGRyLCAmZW50LCA2KTsKKworCWlmICh1c2VyZXNvdXJjZXNbY2FyZHR5cGVdID09IDEpIHsKKwkJbnVidXNfcmV3aW5kZGlyKCZkaXIpOworCQlpZiAobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01JTk9SX0JBU0VPUywKKwkJCQkgICAgJmVudCkgPT0gLTEpIHsKKwkJCXByX2VycigiJXM6IE1lbW9yeSBvZmZzZXQgcmVzb3VyY2UgZm9yIHNsb3QgJVggbm90IGZvdW5kIVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQludWJ1c19nZXRfcnNyY19tZW0oJm9mZnNldCwgJmVudCwgNCk7CisJCWRldi0+bWVtX3N0YXJ0ID0gZGV2LT5iYXNlX2FkZHIgKyBvZmZzZXQ7CisJCS8qIHllcywgdGhpcyBpcyBob3cgdGhlIEFwcGxlIGRyaXZlciBkb2VzIGl0ICovCisJCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQgKyAweDEwMDAwOworCQludWJ1c19yZXdpbmRkaXIoJmRpcik7CisJCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUlOT1JfTEVOR1RILAorCQkJCSAgICAmZW50KSA9PSAtMSkgeworCQkJcHJfaW5mbygiJXM6IE1lbW9yeSBsZW5ndGggcmVzb3VyY2UgZm9yIHNsb3QgJVggbm90IGZvdW5kLCBwcm9iaW5nXG4iLAorCQkJCWRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOworCQkJb2Zmc2V0ID0gbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKKwkJfSBlbHNlIHsKKwkJCW51YnVzX2dldF9yc3JjX21lbSgmb2Zmc2V0LCAmZW50LCA0KTsKKwkJfQorCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIG9mZnNldDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNhcmR0eXBlKSB7CisJCWNhc2UgTUFDODM5MF9LSU5FVElDUzoKKwkJY2FzZSBNQUM4MzkwX0RBWU5BOiAvKiBpdCdzIHRoZSBzYW1lICovCisJCQlkZXYtPmJhc2VfYWRkciA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgREFZTkFfODM5MF9CQVNFKTsKKwkJCWRldi0+bWVtX3N0YXJ0ID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBEQVlOQV84MzkwX01FTSk7CisJCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArCisJCQkJICAgICAgIG1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7CisJCQlicmVhazsKKwkJY2FzZSBNQUM4MzkwX0lOVEVSTEFOOgorCQkJZGV2LT5iYXNlX2FkZHIgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIElOVEVSTEFOXzgzOTBfQkFTRSk7CisJCQlkZXYtPm1lbV9zdGFydCA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgSU5URVJMQU5fODM5MF9NRU0pOworCQkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKworCQkJCSAgICAgICBtYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOworCQkJYnJlYWs7CisJCWNhc2UgTUFDODM5MF9DQUJMRVRST046CisJCQlkZXYtPmJhc2VfYWRkciA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgQ0FCTEVUUk9OXzgzOTBfQkFTRSk7CisJCQlkZXYtPm1lbV9zdGFydCA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgQ0FCTEVUUk9OXzgzOTBfTUVNKTsKKwkJCS8qIFRoZSBiYXNlIGFkZHJlc3MgaXMgdW5yZWFkYWJsZSBpZiAweDAwCisJCQkgKiBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCisJCQkgKiBSZXNldCB0aGUgY2hpcCBieSB3cml0aW5nIEU4MzkwX05PRE1BICsKKwkJCSAqICAgRTgzOTBfUEFHRTAgKyBFODM5MF9TVE9QIGp1c3QgdG8gYmUKKwkJCSAqICAgc3VyZQorCQkJICovCisJCQlpID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkcjsKKwkJCSppID0gMHgyMTsKKwkJCWRldi0+bWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsKKwkJCQkgICAgICAgbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcl9lcnIoIkNhcmQgdHlwZSAlcyBpcyB1bnN1cHBvcnRlZCwgc29ycnlcbiIsCisJCQkgICAgICAgbmRldi0+Ym9hcmQtPm5hbWUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7CiB9CiAKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG1hYzgzOTBfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqaTsKLQlpbnQgdmVyc2lvbl9kaXNwID0gMDsKLQlzdHJ1Y3QgbnVidXNfZGV2ICogbmRldiA9IE5VTEw7CisJc3RydWN0IG51YnVzX2RldiAqbmRldiA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAKLQlzdHJ1Y3QgbnVidXNfZGlyIGRpcjsKLQlzdHJ1Y3QgbnVidXNfZGlyZW50IGVudDsKLQlpbnQgb2Zmc2V0OwogCXN0YXRpYyB1bnNpZ25lZCBpbnQgc2xvdHM7CiAKIAllbnVtIG1hYzgzOTBfdHlwZSBjYXJkdHlwZTsKQEAgLTMxMSwxMTggKzQxOSwxOSBAQAogCWlmICh1bml0ID49IDApCiAJCXNwcmludGYoZGV2LT5uYW1lLCAiZXRoJWQiLCB1bml0KTsKIAotCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfTkVUV09SSywgTlVCVVNfVFlQRV9FVEhFUk5FVCwgbmRldikpKSB7CisJd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ORVRXT1JLLCBOVUJVU19UWVBFX0VUSEVSTkVULAorCQkJCSAgICAgICBuZGV2KSkpIHsKIAkJLyogSGF2ZSB3ZSBzZWVuIGl0IGFscmVhZHk/ICovCi0JCWlmIChzbG90cyAmICgxPDxuZGV2LT5ib2FyZC0+c2xvdCkpCisJCWlmIChzbG90cyAmICgxIDw8IG5kZXYtPmJvYXJkLT5zbG90KSkKIAkJCWNvbnRpbnVlOwotCQlzbG90cyB8PSAxPDxuZGV2LT5ib2FyZC0+c2xvdDsKKwkJc2xvdHMgfD0gMSA8PCBuZGV2LT5ib2FyZC0+c2xvdDsKIAotCQlpZiAoKGNhcmR0eXBlID0gbWFjODM5MF9pZGVudChuZGV2KSkgPT0gTUFDODM5MF9OT05FKQorCQljYXJkdHlwZSA9IG1hYzgzOTBfaWRlbnQobmRldik7CisJCWlmIChjYXJkdHlwZSA9PSBNQUM4MzkwX05PTkUpCiAJCQljb250aW51ZTsKIAotCQlpZiAodmVyc2lvbl9kaXNwID09IDApIHsKLQkJCXZlcnNpb25fZGlzcCA9IDE7Ci0JCQlwcmludGsodmVyc2lvbik7Ci0JCX0KLQotCQlkZXYtPmlycSA9IFNMT1QySVJRKG5kZXYtPmJvYXJkLT5zbG90KTsKLQkJLyogVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgaGFiaXQgKi8KLQkJZGV2LT5iYXNlX2FkZHIgPSBuZGV2LT5ib2FyZC0+c2xvdF9hZGRyIHwgKChuZGV2LT5ib2FyZC0+c2xvdCYweGYpIDw8IDIwKTsKLQotCQkvKiBHZXQgc29tZSBOdWJ1cyBpbmZvIC0gd2Ugd2lsbCB0cnVzdCB0aGUgY2FyZCdzIGlkZWEKLQkJICAgb2Ygd2hlcmUgaXRzIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIGFyZS4gKi8KLQotCQlpZiAobnVidXNfZ2V0X2Z1bmNfZGlyKG5kZXYsICZkaXIpID09IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gZ2V0IE51YnVzIGZ1bmN0aW9uYWwiCi0JCQkJCSIgZGlyZWN0b3J5IGZvciBzbG90ICVYIVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKKwkJaWYgKCFtYWM4MzkwX2luaXQoZGV2LCBuZGV2LCBjYXJkdHlwZSkpCiAJCQljb250aW51ZTsKLQkJfQotCi0JCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KLQkJaWYgKChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUFDX0FERFJFU1MsICZlbnQpKSA9PSAtMSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdWxkbid0IGdldCBNQUMgYWRkcmVzcyFcbiIsCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCW51YnVzX2dldF9yc3JjX21lbShkZXYtPmRldl9hZGRyLCAmZW50LCA2KTsKLQkJfQotCi0JCWlmICh1c2VyZXNvdXJjZXNbY2FyZHR5cGVdID09IDEpIHsKLQkJCW51YnVzX3Jld2luZGRpcigmZGlyKTsKLQkJCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUlOT1JfQkFTRU9TLCAmZW50KSA9PSAtMSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1lbW9yeSBvZmZzZXQgcmVzb3VyY2UiCi0JCQkJCQkiIGZvciBzbG90ICVYIG5vdCBmb3VuZCFcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJbnVidXNfZ2V0X3JzcmNfbWVtKCZvZmZzZXQsICZlbnQsIDQpOwotCQkJZGV2LT5tZW1fc3RhcnQgPSBkZXYtPmJhc2VfYWRkciArIG9mZnNldDsKLQkJCS8qIHllcywgdGhpcyBpcyBob3cgdGhlIEFwcGxlIGRyaXZlciBkb2VzIGl0ICovCi0JCQlkZXYtPmJhc2VfYWRkciA9IGRldi0+bWVtX3N0YXJ0ICsgMHgxMDAwMDsKLQkJCW51YnVzX3Jld2luZGRpcigmZGlyKTsKLQkJCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUlOT1JfTEVOR1RILCAmZW50KSA9PSAtMSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNZW1vcnkgbGVuZ3RoIHJlc291cmNlIgotCQkJCQkJICIgZm9yIHNsb3QgJVggbm90IGZvdW5kIgotCQkJCQkJICIsIHByb2JpbmdcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOwotCQkJCW9mZnNldCA9IG1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbnVidXNfZ2V0X3JzcmNfbWVtKCZvZmZzZXQsICZlbnQsIDQpOwotCQkJCX0KLQkJCWRldi0+bWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsgb2Zmc2V0OwotCQl9IGVsc2UgewotCQkJc3dpdGNoIChjYXJkdHlwZSkgewotCQkJCWNhc2UgTUFDODM5MF9LSU5FVElDUzoKLQkJCQljYXNlIE1BQzgzOTBfREFZTkE6IC8qIGl0J3MgdGhlIHNhbWUgKi8KLQkJCQkJZGV2LT5iYXNlX2FkZHIgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlEQVlOQV84MzkwX0JBU0UpOwotCQkJCQlkZXYtPm1lbV9zdGFydCA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCURBWU5BXzgzOTBfTUVNKTsKLQkJCQkJZGV2LT5tZW1fZW5kID0KLQkJCQkJCWRldi0+bWVtX3N0YXJ0ICsKLQkJCQkJCW1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTUFDODM5MF9JTlRFUkxBTjoKLQkJCQkJZGV2LT5iYXNlX2FkZHIgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlJTlRFUkxBTl84MzkwX0JBU0UpOwotCQkJCQlkZXYtPm1lbV9zdGFydCA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCUlOVEVSTEFOXzgzOTBfTUVNKTsKLQkJCQkJZGV2LT5tZW1fZW5kID0KLQkJCQkJCWRldi0+bWVtX3N0YXJ0ICsKLQkJCQkJCW1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTUFDODM5MF9DQUJMRVRST046Ci0JCQkJCWRldi0+YmFzZV9hZGRyID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJQ0FCTEVUUk9OXzgzOTBfQkFTRSk7Ci0JCQkJCWRldi0+bWVtX3N0YXJ0ID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJQ0FCTEVUUk9OXzgzOTBfTUVNKTsKLQkJCQkJLyogVGhlIGJhc2UgYWRkcmVzcyBpcyB1bnJlYWRhYmxlIGlmIDB4MDAKLQkJCQkJICogaGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgY29tbWFuZCByZWdpc3RlcgotCQkJCQkgKiBSZXNldCB0aGUgY2hpcCBieSB3cml0aW5nIEU4MzkwX05PRE1BICsKLQkJCQkJICogICBFODM5MF9QQUdFMCArIEU4MzkwX1NUT1AganVzdCB0byBiZQotCQkJCQkgKiAgIHN1cmUKLQkJCQkJICovCi0JCQkJCWkgPSAodm9pZCAqKWRldi0+YmFzZV9hZGRyOwotCQkJCQkqaSA9IDB4MjE7Ci0JCQkJCWRldi0+bWVtX2VuZCA9Ci0JCQkJCQlkZXYtPm1lbV9zdGFydCArCi0JCQkJCQltYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiQ2FyZCB0eXBlICVzIGlzIgotCQkJCQkgICAgICAgIiB1bnN1cHBvcnRlZCwgc29ycnlcbiIsCi0JCQkJCSAgICAgICBuZGV2LT5ib2FyZC0+bmFtZSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9CiAKIAkJLyogRG8gdGhlIG5hc3R5IDgzOTAgc3R1ZmYgKi8KIAkJaWYgKCFtYWM4MzkwX2luaXRkZXYoZGV2LCBuZGV2LCBjYXJkdHlwZSkpCkBAIC00NTgsNyArNDY3LDcgQEAKIAkJZGV2X21hYzg5MFtpXSA9IGRldjsKIAl9CiAJaWYgKCFpKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAibWFjODM5MC5jOiBObyB1c2VhYmxlIGNhcmRzIGZvdW5kLCBkcml2ZXIgTk9UIGluc3RhbGxlZC5cbiIpOworCQlwcl9ub3RpY2UoIk5vIHVzZWFibGUgY2FyZHMgZm91bmQsIGRyaXZlciBOT1QgaW5zdGFsbGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ5MywyMiArNTAyLDIzIEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG1hYzgzOTBfaW5pdGRldihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgc3RydWN0IG51YnVzX2RldiAqIG5kZXYsCi0JCQkgICAgZW51bSBtYWM4MzkwX3R5cGUgdHlwZSkKK3N0YXRpYyBpbnQgX19pbml0IG1hYzgzOTBfaW5pdGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG51YnVzX2RldiAqbmRldiwKKwkJCQkgIGVudW0gbWFjODM5MF90eXBlIHR5cGUpCiB7Ci0Jc3RhdGljIHUzMiBmd3JkNF9vZmZzZXRzWzE2XT17CisJc3RhdGljIHUzMiBmd3JkNF9vZmZzZXRzWzE2XSA9IHsKIAkJMCwgICAgICA0LCAgICAgIDgsICAgICAgMTIsCiAJCTE2LCAgICAgMjAsICAgICAyNCwgICAgIDI4LAogCQkzMiwgICAgIDM2LCAgICAgNDAsICAgICA0NCwKIAkJNDgsICAgICA1MiwgICAgIDU2LCAgICAgNjAKIAl9OwotCXN0YXRpYyB1MzIgYmFjazRfb2Zmc2V0c1sxNl09eworCXN0YXRpYyB1MzIgYmFjazRfb2Zmc2V0c1sxNl0gPSB7CiAJCTYwLCAgICAgNTYsICAgICA1MiwgICAgIDQ4LAogCQk0NCwgICAgIDQwLCAgICAgMzYsICAgICAzMiwKIAkJMjgsICAgICAyNCwgICAgIDIwLCAgICAgMTYsCiAJCTEyLCAgICAgOCwgICAgICA0LCAgICAgIDAKIAl9OwotCXN0YXRpYyB1MzIgZndyZDJfb2Zmc2V0c1sxNl09eworCXN0YXRpYyB1MzIgZndyZDJfb2Zmc2V0c1sxNl0gPSB7CiAJCTAsICAgICAgMiwgICAgICA0LCAgICAgIDYsCiAJCTgsICAgICAxMCwgICAgIDEyLCAgICAgMTQsCiAJCTE2LCAgICAxOCwgICAgIDIwLCAgICAgMjIsCkBAIC01MjYsNDcgKzUzNiw0NyBAQAogCiAJLyogQ2FibGV0cm9uJ3MgVFgvUlggYnVmZmVycyBhcmUgYmFja3dhcmRzICovCiAJaWYgKHR5cGUgPT0gTUFDODM5MF9DQUJMRVRST04pIHsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gQ0FCTEVUUk9OX1RYX1NUQVJUX1BHOwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBDQUJMRVRST05fUlhfU1RBUlRfUEc7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMuc3RvcF9wYWdlID0gQ0FCTEVUUk9OX1JYX1NUT1BfUEc7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJtZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBDQUJMRVRST05fUlhfU1RPUF9QRyoyNTY7CisJCWVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gQ0FCTEVUUk9OX1RYX1NUQVJUX1BHOworCQllaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IENBQkxFVFJPTl9SWF9TVEFSVF9QRzsKKwkJZWlfc3RhdHVzLnN0b3BfcGFnZSA9IENBQkxFVFJPTl9SWF9TVE9QX1BHOworCQllaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OworCQllaV9zdGF0dXMucm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIENBQkxFVFJPTl9SWF9TVE9QX1BHKjI1NjsKIAl9IGVsc2UgewotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBXRF9TVEFSVF9QRzsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gV0RfU1RBUlRfUEcgKyBUWF9QQUdFUzsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5zdG9wX3BhZ2UgPSAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQpLzI1NjsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5ybWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQgKyBUWF9QQUdFUyoyNTY7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucm1lbV9lbmQgPSBkZXYtPm1lbV9lbmQ7CisJCWVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gV0RfU1RBUlRfUEc7CisJCWVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gV0RfU1RBUlRfUEcgKyBUWF9QQUdFUzsKKwkJZWlfc3RhdHVzLnN0b3BfcGFnZSA9IChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCkvMjU2OworCQllaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0ICsgVFhfUEFHRVMqMjU2OworCQllaV9zdGF0dXMucm1lbV9lbmQgPSBkZXYtPm1lbV9lbmQ7CiAJfQogCiAJLyogRmlsbCBpbiBtb2RlbC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb25zICovCi0Jc3dpdGNoKHR5cGUpIHsKKwlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BQzgzOTBfRkFSQUxMT046CiAJY2FzZSBNQUM4MzkwX0FQUExFOgotCQlzd2l0Y2gobWFjODM5MF90ZXN0aW8oZGV2LT5tZW1fc3RhcnQpKSB7Ci0JCQljYXNlIEFDQ0VTU19VTktOT1dOOgotCQkJCXByaW50aygiRG9uJ3Qga25vdyBob3cgdG8gYWNjZXNzIGNhcmQgbWVtb3J5IVxuIik7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQkJYnJlYWs7CisJCXN3aXRjaCAobWFjODM5MF90ZXN0aW8oZGV2LT5tZW1fc3RhcnQpKSB7CisJCWNhc2UgQUNDRVNTX1VOS05PV046CisJCQlwcl9pbmZvKCJEb24ndCBrbm93IGhvdyB0byBhY2Nlc3MgY2FyZCBtZW1vcnkhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgQUNDRVNTXzE2OgotCQkJCS8qIDE2IGJpdCBjYXJkLCByZWdpc3RlciBtYXAgaXMgcmV2ZXJzZWQgKi8KLQkJCQllaV9zdGF0dXMucmVzZXRfODM5MCA9ICZtYWM4MzkwX25vX3Jlc2V0OwotCQkJCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZzbG93X3NhbmVfYmxvY2tfaW5wdXQ7Ci0JCQkJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZzbG93X3NhbmVfYmxvY2tfb3V0cHV0OwotCQkJCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmc2xvd19zYW5lX2dldF84MzkwX2hkcjsKLQkJCQllaV9zdGF0dXMucmVnX29mZnNldCA9IGJhY2s0X29mZnNldHM7Ci0JCQkJYnJlYWs7CisJCWNhc2UgQUNDRVNTXzE2OgorCQkJLyogMTYgYml0IGNhcmQsIHJlZ2lzdGVyIG1hcCBpcyByZXZlcnNlZCAqLworCQkJZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSAmbWFjODM5MF9ub19yZXNldDsKKwkJCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZzbG93X3NhbmVfYmxvY2tfaW5wdXQ7CisJCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnNsb3dfc2FuZV9ibG9ja19vdXRwdXQ7CisJCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnNsb3dfc2FuZV9nZXRfODM5MF9oZHI7CisJCQllaV9zdGF0dXMucmVnX29mZnNldCA9IGJhY2s0X29mZnNldHM7CisJCQlicmVhazsKIAotCQkJY2FzZSBBQ0NFU1NfMzI6Ci0JCQkJLyogMzIgYml0IGNhcmQsIHJlZ2lzdGVyIG1hcCBpcyByZXZlcnNlZCAqLwotCQkJCWVpX3N0YXR1cy5yZXNldF84MzkwID0gJm1hYzgzOTBfbm9fcmVzZXQ7Ci0JCQkJZWlfc3RhdHVzLmJsb2NrX2lucHV0ID0gJnNhbmVfYmxvY2tfaW5wdXQ7Ci0JCQkJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZzYW5lX2Jsb2NrX291dHB1dDsKLQkJCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnNhbmVfZ2V0XzgzOTBfaGRyOwotCQkJCWVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gYmFjazRfb2Zmc2V0czsKLQkJCQlhY2Nlc3NfYml0bW9kZSA9IDE7Ci0JCQkJYnJlYWs7CisJCWNhc2UgQUNDRVNTXzMyOgorCQkJLyogMzIgYml0IGNhcmQsIHJlZ2lzdGVyIG1hcCBpcyByZXZlcnNlZCAqLworCQkJZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSAmbWFjODM5MF9ub19yZXNldDsKKwkJCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZzYW5lX2Jsb2NrX2lucHV0OworCQkJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZzYW5lX2Jsb2NrX291dHB1dDsKKwkJCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmc2FuZV9nZXRfODM5MF9oZHI7CisJCQllaV9zdGF0dXMucmVnX29mZnNldCA9IGJhY2s0X29mZnNldHM7CisJCQlhY2Nlc3NfYml0bW9kZSA9IDE7CisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIApAQCAtNjA4LDI0ICs2MTgsMjUgQEAKIAkJZWlfc3RhdHVzLmJsb2NrX2lucHV0ID0gJnNsb3dfc2FuZV9ibG9ja19pbnB1dDsKIAkJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZzbG93X3NhbmVfYmxvY2tfb3V0cHV0OwogCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnNsb3dfc2FuZV9nZXRfODM5MF9oZHI7Ci0JICAgICAgICBlaV9zdGF0dXMucmVnX29mZnNldCA9IGZ3cmQ0X29mZnNldHM7Ci0JICAgICAgICBicmVhazsKKwkJZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBmd3JkNF9vZmZzZXRzOworCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FyZCB0eXBlICVzIGlzIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwgbmRldi0+Ym9hcmQtPm5hbWUpOworCQlwcl9lcnIoIkNhcmQgdHlwZSAlcyBpcyB1bnN1cHBvcnRlZCwgc29ycnlcbiIsCisJCSAgICAgICBuZGV2LT5ib2FyZC0+bmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCV9fTlM4MzkwX2luaXQoZGV2LCAwKTsKIAogCS8qIEdvb2QsIGRvbmUsIG5vdyBzcGl0IG91dCBzb21lIG1lc3NhZ2VzICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGluIHNsb3QgJVggKHR5cGUgJXMpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCwgY2FyZG5hbWVbdHlwZV0pOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIk1BQyAlcE0gSVJRICVkLCAlZCBLQiBzaGFyZWQgbWVtb3J5IGF0ICUjbHgsICVkLWJpdCBhY2Nlc3MuXG4iLAotCSAgICAgICBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSwKLQkgICAgICAgKHVuc2lnbmVkIGludCkoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQpID4+IDEwLAotCSAgICAgICBkZXYtPm1lbV9zdGFydCwgYWNjZXNzX2JpdG1vZGUgPyAzMiA6IDE2KTsKKwlwcl9pbmZvKCIlczogJXMgaW4gc2xvdCAlWCAodHlwZSAlcylcbiIsCisJCWRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90LAorCQljYXJkbmFtZVt0eXBlXSk7CisJcHJfaW5mbygiTUFDICVwTSBJUlEgJWQsICVkIEtCIHNoYXJlZCBtZW1vcnkgYXQgJSNseCwgJWQtYml0IGFjY2Vzcy5cbiIsCisJCWRldi0+ZGV2X2FkZHIsIGRldi0+aXJxLAorCQkodW5zaWduZWQgaW50KShkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCkgPj4gMTAsCisJCWRldi0+bWVtX3N0YXJ0LCBhY2Nlc3NfYml0bW9kZSA/IDMyIDogMTYpOwogCXJldHVybiAwOwogfQogCkBAIC02MzMsNyArNjQ0LDcgQEAKIHsKIAlfX2VpX29wZW4oZGV2KTsKIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIF9fZWlfaW50ZXJydXB0LCAwLCAiODM5MCBFdGhlcm5ldCIsIGRldikpIHsKLQkJcHJpbnRrICgiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7CisJCXByX2luZm8oIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJcmV0dXJuIDA7CkBAIC02NTAsNzIgKzY2MSw3MSBAQAogewogCWVpX3N0YXR1cy50eGluZyA9IDA7CiAJaWYgKGVpX2RlYnVnID4gMSkKLQkJcHJpbnRrKCJyZXNldCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJfaW5mbygicmVzZXQgbm90IHN1cHBvcnRlZFxuIik7CiAJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlcmxhbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGNoYXIgKnRhcmdldD1udWJ1c19zbG90X2FkZHIoSVJRMlNMT1QoZGV2LT5pcnEpKTsKKwl1bnNpZ25lZCBjaGFyICp0YXJnZXQgPSBudWJ1c19zbG90X2FkZHIoSVJRMlNMT1QoZGV2LT5pcnEpKTsKIAlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsoIk5lZWQgdG8gcmVzZXQgdGhlIE5TODM5MCB0PSVsdS4uLiIsIGppZmZpZXMpOworCQlwcl9pbmZvKCJOZWVkIHRvIHJlc2V0IHRoZSBOUzgzOTAgdD0lbHUuLi4iLCBqaWZmaWVzKTsKIAllaV9zdGF0dXMudHhpbmcgPSAwOwogCXRhcmdldFsweEMwMDAwXSA9IDA7CiAJaWYgKGVpX2RlYnVnID4gMSkKLQkJcHJpbnRrKCJyZXNldCBjb21wbGV0ZVxuIik7CisJCXByX2NvbnQoInJlc2V0IGNvbXBsZXRlXG4iKTsKIAlyZXR1cm47CiB9CiAKIC8qIGRheW5hX21lbWNweV9mcm9taW8vZGF5bmFfbWVtY3B5X3RvaW8gKi8KIC8qIGRpcmVjdGx5IGZyb20gZGF5bmFwb3J0LmMgYnkgQWxhbiBDb3ggKi8KLXN0YXRpYyB2b2lkIGRheW5hX21lbWNweV9mcm9tY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp0bywgaW50IGZyb20sIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGRheW5hX21lbWNweV9mcm9tY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp0bywgaW50IGZyb20sCisJCQkJICBpbnQgY291bnQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcHRyOwotCXVuc2lnbmVkIGNoYXIgKnRhcmdldD10bzsKLQlmcm9tPDw9MTsJLyogd29yZCwgc2tpcCBvdmVyaGVhZCAqLwotCXB0cj0odW5zaWduZWQgY2hhciAqKShkZXYtPm1lbV9zdGFydCtmcm9tKTsKKwl1bnNpZ25lZCBjaGFyICp0YXJnZXQgPSB0bzsKKwlmcm9tIDw8PSAxOwkvKiB3b3JkLCBza2lwIG92ZXJoZWFkICovCisJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikoZGV2LT5tZW1fc3RhcnQrZnJvbSk7CiAJLyogTGVhZGluZyBieXRlPyAqLwotCWlmIChmcm9tJjIpIHsKKwlpZiAoZnJvbSAmIDIpIHsKIAkJKnRhcmdldCsrID0gcHRyWy0xXTsKIAkJcHRyICs9IDI7CiAJCWNvdW50LS07CiAJfQotCXdoaWxlKGNvdW50Pj0yKQotCXsKKwl3aGlsZSAoY291bnQgPj0gMikgewogCQkqKHVuc2lnbmVkIHNob3J0ICopdGFyZ2V0ID0gKih1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZSAqKXB0cjsKIAkJcHRyICs9IDQ7CQkJLyogc2tpcCBjcnVmdCAqLwogCQl0YXJnZXQgKz0gMjsKLQkJY291bnQtPTI7CisJCWNvdW50IC09IDI7CiAJfQogCS8qIFRyYWlsaW5nIGJ5dGU/ICovCi0JaWYoY291bnQpCisJaWYgKGNvdW50KQogCQkqdGFyZ2V0ID0gKnB0cjsKIH0KIAotc3RhdGljIHZvaWQgZGF5bmFfbWVtY3B5X3RvY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdG8sIGNvbnN0IHZvaWQgKmZyb20sIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGRheW5hX21lbWNweV90b2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRvLAorCQkJCWNvbnN0IHZvaWQgKmZyb20sIGludCBjb3VudCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHRyOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYz1mcm9tOwotCXRvPDw9MTsJLyogd29yZCwgc2tpcCBvdmVyaGVhZCAqLwotCXB0cj0odW5zaWduZWQgc2hvcnQgKikoZGV2LT5tZW1fc3RhcnQrdG8pOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IGZyb207CisJdG8gPDw9IDE7CS8qIHdvcmQsIHNraXAgb3ZlcmhlYWQgKi8KKwlwdHIgPSAodW5zaWduZWQgc2hvcnQgKikoZGV2LT5tZW1fc3RhcnQrdG8pOwogCS8qIExlYWRpbmcgYnl0ZT8gKi8KLQlpZiAodG8mMikgeyAvKiBhdm9pZCBhIGJ5dGUgd3JpdGUgKHN0b21wcyBvbiBvdGhlciBkYXRhKSAqLworCWlmICh0byAmIDIpIHsJCS8qIGF2b2lkIGEgYnl0ZSB3cml0ZSAoc3RvbXBzIG9uIG90aGVyIGRhdGEpICovCiAJCXB0clstMV0gPSAocHRyWy0xXSYweEZGMDApfCpzcmMrKzsKIAkJcHRyKys7CiAJCWNvdW50LS07CiAJfQotCXdoaWxlKGNvdW50Pj0yKQotCXsKLQkJKnB0cisrPSoodW5zaWduZWQgc2hvcnQgKilzcmM7CQkvKiBDb3B5IGFuZCAqLworCXdoaWxlIChjb3VudCA+PSAyKSB7CisJCSpwdHIrKyA9ICoodW5zaWduZWQgc2hvcnQgKilzcmM7CS8qIENvcHkgYW5kICovCiAJCXB0cisrOwkJCS8qIHNraXAgY3J1ZnQgKi8KIAkJc3JjICs9IDI7Ci0JCWNvdW50LT0yOworCQljb3VudCAtPSAyOwogCX0KIAkvKiBUcmFpbGluZyBieXRlPyAqLwotCWlmKGNvdW50KQotCXsKKwlpZiAoY291bnQpIHsKIAkJLyogY2FyZCBkb2Vzbid0IGxpa2UgYnl0ZSB3cml0ZXMgKi8KLQkJKnB0cj0oKnB0ciYweDAwRkYpfCgqc3JjIDw8IDgpOworCQkqcHRyID0gKCpwdHIgJiAweDAwRkYpIHwgKCpzcmMgPDwgOCk7CiAJfQogfQogCkBAIC03MzgsMTEgKzc0OCwxNCBAQAogCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpIHsKIAkJLyogV2UgbXVzdCB3cmFwIHRoZSBpbnB1dCBtb3ZlLiAqLwogCQlpbnQgc2VtaV9jb3VudCA9IGVpX3N0YXR1cy5ybWVtX2VuZCAtIHhmZXJfc3RhcnQ7Ci0JCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLCBzZW1pX2NvdW50KTsKKwkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCisJCQkgICAgICBzZW1pX2NvdW50KTsKIAkJY291bnQgLT0gc2VtaV9jb3VudDsKLQkJbWVtY3B5X3RvaW8oc2tiLT5kYXRhICsgc2VtaV9jb3VudCwgKGNoYXIgKillaV9zdGF0dXMucm1lbV9zdGFydCwgY291bnQpOworCQltZW1jcHlfdG9pbyhza2ItPmRhdGEgKyBzZW1pX2NvdW50LAorCQkJICAgIChjaGFyICopZWlfc3RhdHVzLnJtZW1fc3RhcnQsIGNvdW50KTsKIAl9IGVsc2UgewotCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwgY291bnQpOworCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwKKwkJCSAgICAgIGNvdW50KTsKIAl9CiB9CiAKQEAgLTc1NSwxNiArNzY4LDE4IEBACiB9CiAKIC8qIGRheW5hIGJsb2NrIGlucHV0L291dHB1dCAqLwotc3RhdGljIHZvaWQgZGF5bmFfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsIGludCByaW5nX3BhZ2UpCitzdGF0aWMgdm9pZCBkYXluYV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLCBpbnQgcmluZ19wYWdlKQogewogCXVuc2lnbmVkIGxvbmcgaGRyX3N0YXJ0ID0gKHJpbmdfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKIAotCWRheW5hX21lbWNweV9mcm9tY2FyZChkZXYsICh2b2lkICopaGRyLCBoZHJfc3RhcnQsIDQpOworCWRheW5hX21lbWNweV9mcm9tY2FyZChkZXYsIGhkciwgaGRyX3N0YXJ0LCA0KTsKIAkvKiBGaXggZW5kaWFubmVzcyAqLwotCWhkci0+Y291bnQ9KGhkci0+Y291bnQmMHhGRik8PDh8KGhkci0+Y291bnQ+PjgpOworCWhkci0+Y291bnQgPSAoaGRyLT5jb3VudCAmIDB4RkYpIDw8IDggfCAoaGRyLT5jb3VudCA+PiA4KTsKIH0KIAotc3RhdGljIHZvaWQgZGF5bmFfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpCitzdGF0aWMgdm9pZCBkYXluYV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyB4ZmVyX2Jhc2UgPSByaW5nX29mZnNldCAtIChXRF9TVEFSVF9QRzw8OCk7CiAJdW5zaWduZWQgbG9uZyB4ZmVyX3N0YXJ0ID0geGZlcl9iYXNlK2Rldi0+bWVtX3N0YXJ0OwpAQCAtNzcyLDggKzc4Nyw3IEBACiAJLyogTm90ZSB0aGUgb2Zmc2V0IG1hdGggaXMgZG9uZSBpbiBjYXJkIG1lbW9yeSBzcGFjZSB3aGljaCBpcyB3b3JkCiAJICAgcGVyIGxvbmcgb250byBvdXIgc3BhY2UuICovCiAKLQlpZiAoeGZlcl9zdGFydCArIGNvdW50ID4gZWlfc3RhdHVzLnJtZW1fZW5kKQotCXsKKwlpZiAoeGZlcl9zdGFydCArIGNvdW50ID4gZWlfc3RhdHVzLnJtZW1fZW5kKSB7CiAJCS8qIFdlIG11c3Qgd3JhcCB0aGUgaW5wdXQgbW92ZS4gKi8KIAkJaW50IHNlbWlfY291bnQgPSBlaV9zdGF0dXMucm1lbV9lbmQgLSB4ZmVyX3N0YXJ0OwogCQlkYXluYV9tZW1jcHlfZnJvbWNhcmQoZGV2LCBza2ItPmRhdGEsIHhmZXJfYmFzZSwgc2VtaV9jb3VudCk7CkBAIC03ODEsMTUgKzc5NSwxNCBAQAogCQlkYXluYV9tZW1jcHlfZnJvbWNhcmQoZGV2LCBza2ItPmRhdGEgKyBzZW1pX2NvdW50LAogCQkJCSAgICAgIGVpX3N0YXR1cy5ybWVtX3N0YXJ0IC0gZGV2LT5tZW1fc3RhcnQsCiAJCQkJICAgICAgY291bnQpOwotCX0KLQllbHNlCi0JeworCX0gZWxzZSB7CiAJCWRheW5hX21lbWNweV9mcm9tY2FyZChkZXYsIHNrYi0+ZGF0YSwgeGZlcl9iYXNlLCBjb3VudCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBkYXluYV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJaW50IHN0YXJ0X3BhZ2UpCitzdGF0aWMgdm9pZCBkYXluYV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgICAgICBpbnQgc3RhcnRfcGFnZSkKIHsKIAlsb25nIHNobWVtID0gKHN0YXJ0X3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7CiAKQEAgLTc5Nyw0MCArODEwLDM5IEBACiB9CiAKIC8qIENhYmxldHJvbiBibG9jayBJL08gKi8KLXN0YXRpYyB2b2lkIHNsb3dfc2FuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwKLQlpbnQgcmluZ19wYWdlKQorc3RhdGljIHZvaWQgc2xvd19zYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsCisJCQkJICAgaW50IHJpbmdfcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIGhkcl9zdGFydCA9IChyaW5nX3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7Ci0Jd29yZF9tZW1jcHlfZnJvbWNhcmQoKHZvaWQgKiloZHIsIChjaGFyICopZGV2LT5tZW1fc3RhcnQraGRyX3N0YXJ0LCA0KTsKKwl3b3JkX21lbWNweV9mcm9tY2FyZChoZHIsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyBoZHJfc3RhcnQsIDQpOwogCS8qIFJlZ2lzdGVyIGVuZGlhbmlzbSAtIGZpeCBoZXJlIHJhdGhlciB0aGFuIDgzOTAuYyAqLwogCWhkci0+Y291bnQgPSAoaGRyLT5jb3VudCYweEZGKTw8OHwoaGRyLT5jb3VudD4+OCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3dfc2FuZV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IsCi0JaW50IHJpbmdfb2Zmc2V0KQorc3RhdGljIHZvaWQgc2xvd19zYW5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCByaW5nX29mZnNldCkKIHsKIAl1bnNpZ25lZCBsb25nIHhmZXJfYmFzZSA9IHJpbmdfb2Zmc2V0IC0gKFdEX1NUQVJUX1BHPDw4KTsKIAl1bnNpZ25lZCBsb25nIHhmZXJfc3RhcnQgPSB4ZmVyX2Jhc2UrZGV2LT5tZW1fc3RhcnQ7CiAKLQlpZiAoeGZlcl9zdGFydCArIGNvdW50ID4gZWlfc3RhdHVzLnJtZW1fZW5kKQotCXsKKwlpZiAoeGZlcl9zdGFydCArIGNvdW50ID4gZWlfc3RhdHVzLnJtZW1fZW5kKSB7CiAJCS8qIFdlIG11c3Qgd3JhcCB0aGUgaW5wdXQgbW92ZS4gKi8KIAkJaW50IHNlbWlfY291bnQgPSBlaV9zdGF0dXMucm1lbV9lbmQgLSB4ZmVyX3N0YXJ0OwotCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKwotCQkJeGZlcl9iYXNlLCBzZW1pX2NvdW50KTsKKwkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLAorCQkJCSAgICAgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwKKwkJCQkgICAgIHNlbWlfY291bnQpOwogCQljb3VudCAtPSBzZW1pX2NvdW50OwogCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEgKyBzZW1pX2NvdW50LAogCQkJCSAgICAgKGNoYXIgKillaV9zdGF0dXMucm1lbV9zdGFydCwgY291bnQpOwotCX0KLQllbHNlCi0JewotCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKwotCQkJeGZlcl9iYXNlLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLAorCQkJCSAgICAgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwgY291bnQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2xvd19zYW5lX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQlpbnQgc3RhcnRfcGFnZSkKK3N0YXRpYyB2b2lkIHNsb3dfc2FuZV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHN0YXJ0X3BhZ2UpCiB7CiAJbG9uZyBzaG1lbSA9IChzdGFydF9wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwogCkBAIC04NDMsMTAgKzg1NSwxMCBAQAogCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpmcm9tID0gZnA7CiAKIAljb3VudCsrOwotCWNvdW50Lz0yOworCWNvdW50IC89IDI7CiAKLQl3aGlsZShjb3VudC0tKQotCQkqdG8rKz0qZnJvbSsrOworCXdoaWxlIChjb3VudC0tKQorCQkqdG8rKyA9ICpmcm9tKys7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmRfbWVtY3B5X2Zyb21jYXJkKHZvaWQgKnRwLCBjb25zdCB2b2lkICpmcCwgaW50IGNvdW50KQpAQCAtODU1LDEwICs4NjcsMTAgQEAKIAljb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqZnJvbSA9IGZwOwogCiAJY291bnQrKzsKLQljb3VudC89MjsKKwljb3VudCAvPSAyOwogCi0Jd2hpbGUoY291bnQtLSkKLQkJKnRvKys9KmZyb20rKzsKKwl3aGlsZSAoY291bnQtLSkKKwkJKnRvKysgPSAqZnJvbSsrOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hYzg5eDAuYyBiL2RyaXZlcnMvbmV0L21hYzg5eDAuYwppbmRleCAyM2I2MzNlLi5jMjkyYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCkBAIC01NjgsOSArNTY4LDcgQEAKIAlpZihkZXYtPmZsYWdzJklGRl9QUk9NSVNDKQogCXsKIAkJbHAtPnJ4X21vZGUgPSBSWF9BTExfQUNDRVBUOwotCX0KLQllbHNlIGlmKChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSl8fGRldi0+bWNfbGlzdCkKLQl7CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIFRoZSBtdWx0aWNhc3QtYWNjZXB0IGxpc3QgaXMgaW5pdGlhbGl6ZWQgdG8gYWNjZXB0LWFsbCwgYW5kIHdlCiAJCSAgIHJlbHkgb24gaGlnaGVyLWxldmVsIGZpbHRlcmluZyBmb3Igbm93LiAqLwogCQlscC0+cnhfbW9kZSA9IFJYX01VTFRDQVNUX0FDQ0VQVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCAxZDBkNGQ5Li5jOGExOGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0xODksMTggKzE4OSwxMSBAQAogc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCBwaHlfYWRkcjsKKwlpbnQgcmV0OwogCi0JLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCi0JZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCWlmIChicC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKLQkJCXBoeWRldiA9IGJwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCisJcGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QoYnAtPm1paV9idXMpOwogCWlmICghcGh5ZGV2KSB7CiAJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBubyBQSFkgZm91bmRcbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKQEAgLTIxMCwxNyArMjAzLDEzIEBACiAJLyogVE9ETyA6IGFkZCBwaW5faXJxICovCiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pc19ybWlpKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKLQkJCSZtYWNiX2hhbmRsZV9saW5rX2NoYW5nZSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOwotCX0gZWxzZSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKLQkJCSZtYWNiX2hhbmRsZV9saW5rX2NoYW5nZSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7Ci0JfQotCi0JaWYgKElTX0VSUihwaHlkZXYpKSB7CisJcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldiwgcGh5ZGV2LCAmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsCisJCQkJIHBkYXRhICYmIHBkYXRhLT5pc19ybWlpID8KKwkJCQkgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgOgorCQkJCSBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCkBAIC04OTUsMTUgKzg4NCwxMiBAQAogewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VycjsKIAl1bnNpZ25lZCBsb25nIG1jX2ZpbHRlclsyXTsKLQl1bnNpZ25lZCBpbnQgaSwgYml0bnI7CisJdW5zaWduZWQgaW50IGJpdG5yOwogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKIAltY19maWx0ZXJbMF0gPSBtY19maWx0ZXJbMV0gPSAwOwogCi0JY3VyciA9IGRldi0+bWNfbGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBjdXJyID0gY3Vyci0+bmV4dCkgewotCQlpZiAoIWN1cnIpIGJyZWFrOwkvKiB1bmV4cGVjdGVkIGVuZCBvZiBsaXN0ICovCi0KKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihjdXJyLCBkZXYpIHsKIAkJYml0bnIgPSBoYXNoX2dldF9pbmRleChjdXJyLT5kbWlfYWRkcik7CiAJCW1jX2ZpbHRlcltiaXRuciA+PiA1XSB8PSAxIDw8IChiaXRuciAmIDMxKTsKIAl9CkBAIC05MzQsNyArOTIwLDcgQEAKIAkJbWFjYl93cml0ZWwoYnAsIEhSQiwgLTEpOwogCQltYWNiX3dyaXRlbChicCwgSFJULCAtMSk7CiAJCWNmZyB8PSBNQUNCX0JJVChOQ0ZHUl9NVEkpOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IDApIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkvKiBFbmFibGUgc3BlY2lmaWMgbXVsdGljYXN0cyAqLwogCQltYWNiX3NldGhhc2h0YWJsZShkZXYpOwogCQljZmcgfD0gTUFDQl9CSVQoTkNGR1JfTVRJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCBkOWZiYWQzLi5hYjVmMGJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2UuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCW1wLT5wb3J0X2FhdWkgPSBwb3J0X2FhdWk7CiAJZWxzZSB7CiAJCS8qIEFwcGxlIE5ldHdvcmsgU2VydmVyIHVzZXMgdGhlIEFBVUkgcG9ydCAqLwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQogCQkJbXAtPnBvcnRfYWF1aSA9IDE7CiAJCWVsc2UgewogI2lmZGVmIENPTkZJR19NQUNFX0FBVUlfUE9SVApAQCAtNTg4LDcgKzU4OCw3IEBACiB7CiAgICAgc3RydWN0IG1hY2VfZGF0YSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHZvbGF0aWxlIHN0cnVjdCBtYWNlIF9faW9tZW0gKm1iID0gbXAtPm1hY2U7Ci0gICAgaW50IGksIGo7CisgICAgaW50IGk7CiAgICAgdTMyIGNyYzsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01OTgsNyArNTk4LDcgQEAKIAltcC0+bWFjY2MgfD0gUFJPTTsKICAgICB9IGVsc2UgewogCXVuc2lnbmVkIGNoYXIgbXVsdGljYXN0X2ZpbHRlcls4XTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC02MDYsMTEgKzYwNiwxMCBAQAogCX0gZWxzZSB7CiAJICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCW11bHRpY2FzdF9maWx0ZXJbaV0gPSAwOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJICAgIG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJICAgICAgICBjcmMgPSBldGhlcl9jcmNfbGUoNiwgZG1pLT5kbWlfYWRkcik7Ci0JCWogPSBjcmMgPj4gMjY7CS8qIGJpdCBudW1iZXIgaW4gbXVsdGljYXN0X2ZpbHRlciAqLwotCQltdWx0aWNhc3RfZmlsdGVyW2ogPj4gM10gfD0gMSA8PCAoaiAmIDcpOwotCQlkbWkgPSBkbWktPm5leHQ7CisJCWkgPSBjcmMgPj4gMjY7CS8qIGJpdCBudW1iZXIgaW4gbXVsdGljYXN0X2ZpbHRlciAqLworCQltdWx0aWNhc3RfZmlsdGVyW2kgPj4gM10gfD0gMSA8PCAoaSAmIDcpOwogCSAgICB9CiAJfQogI2lmIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwppbmRleCA0NGYzYzI4Li4xM2JhOGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNtYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAibWFjZS5oIgogCiBzdGF0aWMgY2hhciBtYWNfbWFjZV9zdHJpbmdbXSA9ICJtYWNtYWNlIjsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNfbWFjZV9kZXZpY2U7CiAKICNkZWZpbmUgTl9UWF9CVUZGX09SREVSCTAKICNkZWZpbmUgTl9UWF9SSU5HCSgxIDw8IE5fVFhfQlVGRl9PUkRFUikKQEAgLTQ5Niw3ICs0OTUsNyBAQAogewogCXN0cnVjdCBtYWNlX2RhdGEgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWFjZSAqbWIgPSBtcC0+bWFjZTsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAl1MzIgY3JjOwogCXU4IG1hY2NjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MDksNyArNTA4LDcgQEAKIAkJbWItPm1hY2NjIHw9IFBST007CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgY2hhciBtdWx0aWNhc3RfZmlsdGVyWzhdOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKQEAgLTUxOCwxMSArNTE3LDExIEBACiAJCX0gZWxzZSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQkJCW11bHRpY2FzdF9maWx0ZXJbaV0gPSAwOwotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCQljcmMgPSBldGhlcl9jcmNfbGUoNiwgZG1pLT5kbWlfYWRkcik7Ci0JCQkJaiA9IGNyYyA+PiAyNjsJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCi0JCQkJbXVsdGljYXN0X2ZpbHRlcltqID4+IDNdIHw9IDEgPDwgKGogJiA3KTsKLQkJCQlkbWkgPSBkbWktPm5leHQ7CisJCQkJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCisJCQkJaSA9IGNyYyA+PiAyNjsKKwkJCQltdWx0aWNhc3RfZmlsdGVyW2kgPj4gM10gfD0gMSA8PCAoaSAmIDcpOwogCQkJfQogCQl9CiAKQEAgLTc1Miw2ICs3NTEsNyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hY2ludG9zaCBNQUNFIGV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptYWNtYWNlIik7CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG1hY19tYWNlX2RldmljZV9yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC03NzcsNDcgKzc3NywyMiBAQAogCS5wcm9iZSAgPSBtYWNlX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYWNfbWFjZV9kZXZpY2VfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewotCQkubmFtZSA9IG1hY19tYWNlX3N0cmluZywKKwkJLm5hbWUJPSBtYWNfbWFjZV9zdHJpbmcsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfbWFjZV9pbml0X21vZHVsZSh2b2lkKQogewotCWludCBlcnI7Ci0KIAlpZiAoIU1BQ0hfSVNfTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQltYWNfbWFjZV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobWFjX21hY2Vfc3RyaW5nLCAwKTsKLQlpZiAoIW1hY19tYWNlX2RldmljZSkKLQkJZ290byBvdXRfdW5yZWdpc3RlcjsKLQotCWlmIChwbGF0Zm9ybV9kZXZpY2VfYWRkKG1hY19tYWNlX2RldmljZSkpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChtYWNfbWFjZV9kZXZpY2UpOwotCQltYWNfbWFjZV9kZXZpY2UgPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfdW5yZWdpc3RlcjoKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKTsKLQotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfbWFjZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpOwotCi0JaWYgKG1hY19tYWNlX2RldmljZSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtYWNfbWFjZV9kZXZpY2UpOwotCQltYWNfbWFjZV9kZXZpY2UgPSBOVUxMOwotCX0KIH0KIAogbW9kdWxlX2luaXQobWFjX21hY2VfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggODc1ZDM2MS4uMjQxMDljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC02Miw3ICs2Miw2IEBACiAjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KIAogc3RhdGljIGNoYXIgbWFjX3NvbmljX3N0cmluZ1tdID0gIm1hY3NvbmljIjsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNfc29uaWNfZGV2aWNlOwogCiAjaW5jbHVkZSAic29uaWMuaCIKIApAQCAtNjA3LDYgKzYwNiw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hY2ludG9zaCBTT05JQyBldGhlcm5ldCBkcml2ZXIiKTsKIG1vZHVsZV9wYXJhbShzb25pY19kZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc29uaWNfZGVidWcsICJtYWNzb25pYyBkZWJ1ZyBsZXZlbCAoMS00KSIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptYWNzb25pYyIpOwogCiAjaW5jbHVkZSAic29uaWMuYyIKIApAQCAtNjI3LDQ0ICs2MjcsMTkgQEAKIAkucHJvYmUgID0gbWFjX3NvbmljX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYWNfc29uaWNfZGV2aWNlX3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSBtYWNfc29uaWNfc3RyaW5nLAorCQkubmFtZQk9IG1hY19zb25pY19zdHJpbmcsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfc29uaWNfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQltYWNfc29uaWNfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG1hY19zb25pY19zdHJpbmcsIDApOwotCWlmICghbWFjX3NvbmljX2RldmljZSkKLQkJZ290byBvdXRfdW5yZWdpc3RlcjsKLQotCWlmIChwbGF0Zm9ybV9kZXZpY2VfYWRkKG1hY19zb25pY19kZXZpY2UpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobWFjX3NvbmljX2RldmljZSk7Ci0JCW1hY19zb25pY19kZXZpY2UgPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfdW5yZWdpc3RlcjoKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7Ci0KLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1hY19zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKLQotCWlmIChtYWNfc29uaWNfZGV2aWNlKSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hY19zb25pY19kZXZpY2UpOwotCQltYWNfc29uaWNfZGV2aWNlID0gTlVMTDsKLQl9CiB9CiAKIG1vZHVsZV9pbml0KG1hY19zb25pY19pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKaW5kZXggMjFhOWM5YS4uNDBmYWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtMzksMzEgKzM5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXZsYW5zOwogfTsKIAotLyoqCi0gKglzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAtIE1BQ1ZMQU4gcGVyY3B1IHJ4IHN0YXRzCi0gKglAcnhfcGFja2V0czogbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMKLSAqCUByeF9ieXRlczogbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzCi0gKglAbXVsdGljYXN0OiBudW1iZXIgb2YgcmVjZWl2ZWQgbXVsdGljYXN0IHBhY2tldHMKLSAqCUByeF9lcnJvcnM6IG51bWJlciBvZiBlcnJvcnMKLSAqLwotc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwotCXVuc2lnbmVkIGxvbmcgbXVsdGljYXN0OwotCXVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOwotfTsKLQotc3RydWN0IG1hY3ZsYW5fZGV2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZQlobGlzdDsKLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0CSpwb3J0OwotCXN0cnVjdCBuZXRfZGV2aWNlCSpsb3dlcmRldjsKLQlzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAqcnhfc3RhdHM7Ci0JZW51bSBtYWN2bGFuX21vZGUJbW9kZTsKLX07Ci0KLQogc3RhdGljIHN0cnVjdCBtYWN2bGFuX2RldiAqbWFjdmxhbl9oYXNoX2xvb2t1cChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0LAogCQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIHsKQEAgLTExOCwzMSArOTMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1hY3ZsYW5fY291bnRfcngoY29uc3Qgc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIHN1Y2Nlc3MsCi0JCQkJICAgIGJvb2wgbXVsdGljYXN0KQotewotCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzICpyeF9zdGF0czsKIAotCXJ4X3N0YXRzID0gcGVyX2NwdV9wdHIodmxhbi0+cnhfc3RhdHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGxpa2VseShzdWNjZXNzKSkgewotCQlyeF9zdGF0cy0+cnhfcGFja2V0cysrOzsKLQkJcnhfc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKLQkJaWYgKG11bHRpY2FzdCkKLQkJCXJ4X3N0YXRzLT5tdWx0aWNhc3QrKzsKLQl9IGVsc2UgewotCQlyeF9zdGF0cy0+cnhfZXJyb3JzKys7Ci0JfQotfQotCi1zdGF0aWMgaW50IG1hY3ZsYW5fYnJvYWRjYXN0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorc3RhdGljIGludCBtYWN2bGFuX2Jyb2FkY2FzdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgY29uc3Qgc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAogCQkJCSBjb25zdCBzdHJ1Y3QgZXRoaGRyICpldGgsIGJvb2wgbG9jYWwpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZsYW4tPmRldjsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCiAJaWYgKGxvY2FsKQotCQlyZXR1cm4gZGV2X2ZvcndhcmRfc2tiKGRldiwgc2tiKTsKKwkJcmV0dXJuIHZsYW4tPmZvcndhcmQoZGV2LCBza2IpOwogCiAJc2tiLT5kZXYgPSBkZXY7CiAJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGV0aC0+aF9kZXN0LApAQCAtMTUxLDcgKzExMiw3IEBACiAJZWxzZQogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKIAotCXJldHVybiBuZXRpZl9yeChza2IpOworCXJldHVybiB2bGFuLT5yZWNlaXZlKHNrYik7CiB9CiAKIHN0YXRpYyB2b2lkIG1hY3ZsYW5fYnJvYWRjYXN0KHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNzUsNyArMTM2LDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQkJZXJyID0gbWFjdmxhbl9icm9hZGNhc3Rfb25lKG5za2IsIHZsYW4tPmRldiwgZXRoLAorCQkJZXJyID0gbWFjdmxhbl9icm9hZGNhc3Rfb25lKG5za2IsIHZsYW4sIGV0aCwKIAkJCQkJIG1vZGUgPT0gTUFDVkxBTl9NT0RFX0JSSURHRSk7CiAJCQltYWN2bGFuX2NvdW50X3J4KHZsYW4sIHNrYi0+bGVuICsgRVRIX0hMRU4sCiAJCQkJCSBlcnIgPT0gTkVUX1JYX1NVQ0NFU1MsIDEpOwpAQCAtMjM4LDcgKzE5OSw3IEBACiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCi0JbmV0aWZfcngoc2tiKTsKKwl2bGFuLT5yZWNlaXZlKHNrYik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI2MCw3ICsyMjEsNyBAQAogCQlkZXN0ID0gbWFjdmxhbl9oYXNoX2xvb2t1cChwb3J0LCBldGgtPmhfZGVzdCk7CiAJCWlmIChkZXN0ICYmIGRlc3QtPm1vZGUgPT0gTUFDVkxBTl9NT0RFX0JSSURHRSkgewogCQkJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNrYi0+bGVuICsgRVRIX0hMRU47Ci0JCQlpbnQgcmV0ID0gZGV2X2ZvcndhcmRfc2tiKGRlc3QtPmRldiwgc2tiKTsKKwkJCWludCByZXQgPSBkZXN0LT5mb3J3YXJkKGRlc3QtPmRldiwgc2tiKTsKIAkJCW1hY3ZsYW5fY291bnRfcngoZGVzdCwgbGVuZ3RoLAogCQkJCQkgcmV0ID09IE5FVF9SWF9TVUNDRVNTLCAwKTsKIApAQCAtMjY5LDEyICsyMzAsMTIgQEAKIAl9CiAKIHhtaXRfd29ybGQ6Ci0Jc2tiLT5kZXYgPSB2bGFuLT5sb3dlcmRldjsKKwlza2Jfc2V0X2Rldihza2IsIHZsYW4tPmxvd2VyZGV2KTsKIAlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwpAQCAtMjkwLDYgKzI1MSw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9zdGFydF94bWl0KTsKIAogc3RhdGljIGludCBtYWN2bGFuX2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqZGFkZHIsCkBAIC00MTgsNyArMzgwLDcgQEAKICNkZWZpbmUgTUFDVkxBTl9GRUFUVVJFUyBcCiAJKE5FVElGX0ZfU0cgfCBORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9GUkFHTElTVCB8IFwKIAkgTkVUSUZfRl9HU08gfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVUZPIHwgTkVUSUZfRl9HU09fUk9CVVNUIHwgXAotCSBORVRJRl9GX1RTT19FQ04gfCBORVRJRl9GX1RTTzYpCisJIE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfR1JPKQogCiAjZGVmaW5lIE1BQ1ZMQU5fU1RBVEVfTUFTSyBcCiAJKCgxPDxfX0xJTktfU1RBVEVfTk9DQVJSSUVSKSB8ICgxPDxfX0xJTktfU1RBVEVfRE9STUFOVCkpCkBAIC02MjMsOCArNTg1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWFjdmxhbl9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCitpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAorCQkJICAgaW50ICgqcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiksCisJCQkgICBpbnQgKCpmb3J3YXJkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpKQogewogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydDsKQEAgLTY2NCw2ICs2MjksOCBAQAogCXZsYW4tPmxvd2VyZGV2ID0gbG93ZXJkZXY7CiAJdmxhbi0+ZGV2ICAgICAgPSBkZXY7CiAJdmxhbi0+cG9ydCAgICAgPSBwb3J0OworCXZsYW4tPnJlY2VpdmUgID0gcmVjZWl2ZTsKKwl2bGFuLT5mb3J3YXJkICA9IGZvcndhcmQ7CiAKIAl2bGFuLT5tb2RlICAgICA9IE1BQ1ZMQU5fTU9ERV9WRVBBOwogCWlmIChkYXRhICYmIGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKQpAQCAtNjc3LDggKzY0NCwxNyBAQAogCW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGxvd2VyZGV2LCBkZXYpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9jb21tb25fbmV3bGluayk7CiAKLXN0YXRpYyB2b2lkIG1hY3ZsYW5fZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorc3RhdGljIGludCBtYWN2bGFuX25ld2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK3sKKwlyZXR1cm4gbWFjdmxhbl9jb21tb25fbmV3bGluayhzcmNfbmV0LCBkZXYsIHRiLCBkYXRhLAorCQkJCSAgICAgIG5ldGlmX3J4LAorCQkJCSAgICAgIGRldl9mb3J3YXJkX3NrYik7Cit9CisKK3ZvaWQgbWFjdmxhbl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gdmxhbi0+cG9ydDsKQEAgLTY4OSw2ICs2NjUsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZwb3J0LT52bGFucykpCiAJCW1hY3ZsYW5fcG9ydF9kZXN0cm95KHBvcnQtPmRldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChtYWN2bGFuX2RlbGxpbmspOwogCiBzdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCkBAIC03MjAsMTkgKzY5NywyNyBAQAogCVtJRkxBX01BQ1ZMQU5fTU9ERV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3ZsYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKK2ludCBtYWN2bGFuX2xpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcykKK3sKKwkvKiBjb21tb24gZmllbGRzICovCisJb3BzLT5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBtYWN2bGFuX2Rldik7CisJb3BzLT5nZXRfdHhfcXVldWVzCT0gbWFjdmxhbl9nZXRfdHhfcXVldWVzOworCW9wcy0+c2V0dXAJCT0gbWFjdmxhbl9zZXR1cDsKKwlvcHMtPnZhbGlkYXRlCQk9IG1hY3ZsYW5fdmFsaWRhdGU7CisJb3BzLT5tYXh0eXBlCQk9IElGTEFfTUFDVkxBTl9NQVg7CisJb3BzLT5wb2xpY3kJCT0gbWFjdmxhbl9wb2xpY3k7CisJb3BzLT5jaGFuZ2VsaW5rCQk9IG1hY3ZsYW5fY2hhbmdlbGluazsKKwlvcHMtPmdldF9zaXplCQk9IG1hY3ZsYW5fZ2V0X3NpemU7CisJb3BzLT5maWxsX2luZm8JCT0gbWFjdmxhbl9maWxsX2luZm87CisKKwlyZXR1cm4gcnRubF9saW5rX3JlZ2lzdGVyKG9wcyk7Cit9OworRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9saW5rX3JlZ2lzdGVyKTsKKworc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3ZsYW5fbGlua19vcHMgPSB7CiAJLmtpbmQJCT0gIm1hY3ZsYW4iLAotCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IG1hY3ZsYW5fZGV2KSwKLQkuZ2V0X3R4X3F1ZXVlcyAgPSBtYWN2bGFuX2dldF90eF9xdWV1ZXMsCi0JLnNldHVwCQk9IG1hY3ZsYW5fc2V0dXAsCi0JLnZhbGlkYXRlCT0gbWFjdmxhbl92YWxpZGF0ZSwKIAkubmV3bGluawk9IG1hY3ZsYW5fbmV3bGluaywKIAkuZGVsbGluawk9IG1hY3ZsYW5fZGVsbGluaywKLQkubWF4dHlwZQk9IElGTEFfTUFDVkxBTl9NQVgsCi0JLnBvbGljeQkJPSBtYWN2bGFuX3BvbGljeSwKLQkuY2hhbmdlbGluawk9IG1hY3ZsYW5fY2hhbmdlbGluaywKLQkuZ2V0X3NpemUJPSBtYWN2bGFuX2dldF9zaXplLAotCS5maWxsX2luZm8JPSBtYWN2bGFuX2ZpbGxfaW5mbywKIH07CiAKIHN0YXRpYyBpbnQgbWFjdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCkBAIC03NjEsNyArNzQ2LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIG5leHQsICZwb3J0LT52bGFucywgbGlzdCkKLQkJCW1hY3ZsYW5fZGVsbGluayh2bGFuLT5kZXYsIE5VTEwpOworCQkJdmxhbi0+ZGV2LT5ydG5sX2xpbmtfb3BzLT5kZWxsaW5rKHZsYW4tPmRldiwgTlVMTCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC03NzgsNyArNzYzLDcgQEAKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hY3ZsYW5fbm90aWZpZXJfYmxvY2spOwogCW1hY3ZsYW5faGFuZGxlX2ZyYW1lX2hvb2sgPSBtYWN2bGFuX2hhbmRsZV9mcmFtZTsKIAotCWVyciA9IHJ0bmxfbGlua19yZWdpc3RlcigmbWFjdmxhbl9saW5rX29wcyk7CisJZXJyID0gbWFjdmxhbl9saW5rX3JlZ2lzdGVyKCZtYWN2bGFuX2xpbmtfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jIGIvZHJpdmVycy9uZXQvbWFjdnRhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2VhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKQEAgLTAsMCArMSw4MDMgQEAKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX21hY3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgorCisvKgorICogQSBtYWN2dGFwIHF1ZXVlIGlzIHRoZSBjZW50cmFsIG9iamVjdCBvZiB0aGlzIGRyaXZlciwgaXQgY29ubmVjdHMKKyAqIGFuIG9wZW4gY2hhcmFjdGVyIGRldmljZSB0byBhIG1hY3ZsYW4gaW50ZXJmYWNlLiBUaGVyZSBjYW4gYmUKKyAqIG11bHRpcGxlIHF1ZXVlcyBvbiBvbmUgaW50ZXJmYWNlLCB3aGljaCBtYXAgYmFjayB0byBxdWV1ZXMKKyAqIGltcGxlbWVudGVkIGluIGhhcmR3YXJlIG9uIHRoZSB1bmRlcmx5aW5nIGRldmljZS4KKyAqCisgKiBtYWN2dGFwX3Byb3RvIGlzIHVzZWQgdG8gYWxsb2NhdGUgcXVldWVzIHRocm91Z2ggdGhlIHNvY2sgYWxsb2NhdGlvbgorICogbWVjaGFuaXNtLgorICoKKyAqIFRPRE86IG11bHRpcXVldWUgc3VwcG9ydCBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkLCBldmVuIHRob3VnaAorICogbWFjdnRhcCBpcyBiYXNpY2FsbHkgcHJlcGFyZWQgZm9yIHRoYXQuIFdlIHdpbGwgbmVlZCB0byBhZGQgdGhpcworICogaGVyZSBhcyB3ZWxsIGFzIGluIHZpcnRpby1uZXQgYW5kIHFlbXUgdG8gZ2V0IGxpbmUgcmF0ZSBvbiAxMGdiaXQKKyAqIGFkYXB0ZXJzIGZyb20gYSBndWVzdC4KKyAqLworc3RydWN0IG1hY3Z0YXBfcXVldWUgeworCXN0cnVjdCBzb2NrIHNrOworCXN0cnVjdCBzb2NrZXQgc29jazsKKwlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW47CisJc3RydWN0IGZpbGUgKmZpbGU7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBwcm90byBtYWN2dGFwX3Byb3RvID0geworCS5uYW1lID0gIm1hY3Z0YXAiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vYmpfc2l6ZSA9IHNpemVvZiAoc3RydWN0IG1hY3Z0YXBfcXVldWUpLAorfTsKKworLyoKKyAqIE1pbm9yIG51bWJlciBtYXRjaGVzIG5ldGRldi0+aWZpbmRleCwgc28gbmVlZCBhIHBvdGVudGlhbGx5CisgKiBsYXJnZSB2YWx1ZS4gVGhpcyBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IHRoZQorICogdGFwIGZ1bmN0aW9uYWxpdHkgb3V0IGFnYWluIGluIHRoZSBmdXR1cmUgYnkgb2ZmZXJpbmcgaXQKKyAqIGZyb20gb3RoZXIgZHJpdmVycyBiZXNpZGVzIG1hY3Z0YXAuIEFzIGxvbmcgYXMgZXZlcnkgZGV2aWNlCisgKiBvbmx5IGhhcyBvbmUgdGFwLCB0aGUgaW50ZXJmYWNlIG51bWJlcnMgYXNzdXJlIHRoYXQgdGhlCisgKiBkZXZpY2Ugbm9kZXMgYXJlIHVuaXF1ZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtYWN2dGFwX21ham9yOworI2RlZmluZSBNQUNWVEFQX05VTV9ERVZTIDY1NTM2CitzdGF0aWMgc3RydWN0IGNsYXNzICptYWN2dGFwX2NsYXNzOworc3RhdGljIHN0cnVjdCBjZGV2IG1hY3Z0YXBfY2RldjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbWFjdnRhcF9zb2NrZXRfb3BzOworCisvKgorICogUkNVIHVzYWdlOgorICogVGhlIG1hY3Z0YXBfcXVldWUgYW5kIHRoZSBtYWN2bGFuX2RldiBhcmUgbG9vc2VseSBjb3VwbGVkLCB0aGUKKyAqIHBvaW50ZXJzIGZyb20gb25lIHRvIHRoZSBvdGhlciBjYW4gb25seSBiZSByZWFkIHdoaWxlIHJjdV9yZWFkX2xvY2sKKyAqIG9yIG1hY3Z0YXBfbG9jayBpcyBoZWxkLgorICoKKyAqIEJvdGggdGhlIGZpbGUgYW5kIHRoZSBtYWN2bGFuX2RldiBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBtYWN2dGFwX3F1ZXVlCisgKiB0aHJvdWdoIHNvY2tfaG9sZCgmcS0+c2spLiBXaGVuIHRoZSBtYWN2bGFuX2RldiBnb2VzIGF3YXkgZmlyc3QsCisgKiBxLT52bGFuIGJlY29tZXMgaW5hY2Nlc3NpYmxlLiBXaGVuIHRoZSBmaWxlcyBnZXRzIGNsb3NlZCwKKyAqIG1hY3Z0YXBfZ2V0X3F1ZXVlKCkgZmFpbHMuCisgKgorICogVGhlcmUgbWF5IHN0aWxsIGJlIHJlZmVyZW5jZXMgdG8gdGhlIHN0cnVjdCBzb2NrIGluc2lkZSBvZiB0aGUKKyAqIHF1ZXVlIGZyb20gb3V0Ym91bmQgU0tCcywgYnV0IHRoZXNlIG5ldmVyIHJlZmVyZW5jZSBiYWNrIHRvIHRoZQorICogZmlsZSBvciB0aGUgZGV2LiBUaGUgZGF0YSBzdHJ1Y3R1cmUgaXMgZnJlZWQgdGhyb3VnaCBfX3NrX2ZyZWUKKyAqIHdoZW4gYm90aCBvdXIgcmVmZXJlbmNlcyBhbmQgYW55IHBlbmRpbmcgU0tCcyBhcmUgZ29uZS4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhtYWN2dGFwX2xvY2spOworCisvKgorICogQ2hvb3NlIHRoZSBuZXh0IGZyZWUgcXVldWUsIGZvciBub3cgdGhlcmUgaXMgb25seSBvbmUKKyAqLworc3RhdGljIGludCBtYWN2dGFwX3NldF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUJVU1k7CisKKwlzcGluX2xvY2soJm1hY3Z0YXBfbG9jayk7CisJaWYgKHJjdV9kZXJlZmVyZW5jZSh2bGFuLT50YXApKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHEtPnZsYW4sIHZsYW4pOworCXJjdV9hc3NpZ25fcG9pbnRlcih2bGFuLT50YXAsIHEpOworCXNvY2tfaG9sZCgmcS0+c2spOworCisJcS0+ZmlsZSA9IGZpbGU7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZtYWN2dGFwX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaGUgZmlsZSBvd25pbmcgdGhlIHF1ZXVlIGdvdCBjbG9zZWQsIGdpdmUgdXAgYm90aAorICogdGhlIHJlZmVyZW5jZSB0aGF0IHRoZSBmaWxlcyBob2xkcyBhcyB3ZWxsIGFzIHRoZQorICogb25lIGZyb20gdGhlIG1hY3ZsYW5fZGV2IGlmIHRoYXQgc3RpbGwgZXhpc3RzLgorICoKKyAqIFVzaW5nIHRoZSBzcGlubG9jayBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3QgZ2V0CisgKiB0byB0aGUgcXVldWUgYWdhaW4gYWZ0ZXIgZGVzdHJveWluZyBpdC4KKyAqLworc3RhdGljIHZvaWQgbWFjdnRhcF9wdXRfcXVldWUoc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEpCit7CisJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuOworCisJc3Bpbl9sb2NrKCZtYWN2dGFwX2xvY2spOworCXZsYW4gPSByY3VfZGVyZWZlcmVuY2UocS0+dmxhbik7CisJaWYgKHZsYW4pIHsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHZsYW4tPnRhcCwgTlVMTCk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihxLT52bGFuLCBOVUxMKTsKKwkJc29ja19wdXQoJnEtPnNrKTsKKwl9CisKKwlzcGluX3VubG9jaygmbWFjdnRhcF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCXNvY2tfcHV0KCZxLT5zayk7Cit9CisKKy8qCisgKiBTaW5jZSB3ZSBvbmx5IHN1cHBvcnQgb25lIHF1ZXVlLCBqdXN0IGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyLgorICovCitzdGF0aWMgc3RydWN0IG1hY3Z0YXBfcXVldWUgKm1hY3Z0YXBfZ2V0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHZsYW4tPnRhcCk7Cit9CisKKy8qCisgKiBUaGUgbmV0X2RldmljZSBpcyBnb2luZyBhd2F5LCBnaXZlIHVwIHRoZSByZWZlcmVuY2UKKyAqIHRoYXQgaXQgaG9sZHMgb24gdGhlIHF1ZXVlIChhbGwgdGhlIHF1ZXVlcyBvbmUgZGF5KQorICogYW5kIHNhZmVseSBzZXQgdGhlIHBvaW50ZXIgZnJvbSB0aGUgcXVldWVzIHRvIE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIG1hY3Z0YXBfZGVsX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnE7CisKKwlzcGluX2xvY2soJm1hY3Z0YXBfbG9jayk7CisJcSA9IHJjdV9kZXJlZmVyZW5jZSh2bGFuLT50YXApOworCWlmICghcSkgeworCQlzcGluX3VubG9jaygmbWFjdnRhcF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXJjdV9hc3NpZ25fcG9pbnRlcih2bGFuLT50YXAsIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihxLT52bGFuLCBOVUxMKTsKKwlzcGluX3VubG9jaygmbWFjdnRhcF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCXNvY2tfcHV0KCZxLT5zayk7Cit9CisKKy8qCisgKiBGb3J3YXJkIGhhcHBlbnMgZm9yIGRhdGEgdGhhdCBnZXRzIHNlbnQgZnJvbSBvbmUgbWFjdmxhbgorICogZW5kcG9pbnQgdG8gYW5vdGhlciBvbmUgaW4gYnJpZGdlIG1vZGUuIFdlIGp1c3QgdGFrZQorICogdGhlIHNrYiBhbmQgcHV0IGl0IGludG8gdGhlIHJlY2VpdmUgcXVldWUuCisgKi8KK3N0YXRpYyBpbnQgbWFjdnRhcF9mb3J3YXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBtYWN2dGFwX2dldF9xdWV1ZShkZXYsIHNrYik7CisJaWYgKCFxKQorCQlyZXR1cm4gLUVOT0xJTks7CisKKwlza2JfcXVldWVfdGFpbCgmcS0+c2suc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChxLT5zay5za19zbGVlcCwgUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExSREJBTkQpOworCXJldHVybiAwOworfQorCisvKgorICogUmVjZWl2ZSBpcyBmb3IgZGF0YSBmcm9tIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UgKGxvd2VyZGV2KSwKKyAqIGluIGNhc2Ugb2YgbWFjdnRhcCwgd2UgY2FuIHRyZWF0IHRoYXQgdGhlIHNhbWUgd2F5IGFzCisgKiBmb3J3YXJkLCB3aGljaCBtYWN2bGFuIGNhbm5vdC4KKyAqLworc3RhdGljIGludCBtYWN2dGFwX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwlyZXR1cm4gbWFjdnRhcF9mb3J3YXJkKHNrYi0+ZGV2LCBza2IpOworfQorCitzdGF0aWMgaW50IG1hY3Z0YXBfbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sCisJCQkgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCit7CisJc3RydWN0IGRldmljZSAqY2xhc3NkZXY7CisJZGV2X3QgZGV2dDsKKwlpbnQgZXJyOworCisJZXJyID0gbWFjdmxhbl9jb21tb25fbmV3bGluayhzcmNfbmV0LCBkZXYsIHRiLCBkYXRhLAorCQkJCSAgICAgbWFjdnRhcF9yZWNlaXZlLCBtYWN2dGFwX2ZvcndhcmQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZGV2dCA9IE1LREVWKE1BSk9SKG1hY3Z0YXBfbWFqb3IpLCBkZXYtPmlmaW5kZXgpOworCisJY2xhc3NkZXYgPSBkZXZpY2VfY3JlYXRlKG1hY3Z0YXBfY2xhc3MsICZkZXYtPmRldiwgZGV2dCwKKwkJCQkgZGV2LCAidGFwJWQiLCBkZXYtPmlmaW5kZXgpOworCWlmIChJU19FUlIoY2xhc3NkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoY2xhc3NkZXYpOworCQltYWN2dGFwX2RlbF9xdWV1ZXMoZGV2KTsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtYWN2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWRldmljZV9kZXN0cm95KG1hY3Z0YXBfY2xhc3MsCisJCSAgICAgICBNS0RFVihNQUpPUihtYWN2dGFwX21ham9yKSwgZGV2LT5pZmluZGV4KSk7CisKKwltYWN2dGFwX2RlbF9xdWV1ZXMoZGV2KTsKKwltYWN2bGFuX2RlbGxpbmsoZGV2LCBoZWFkKTsKK30KKworc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3Z0YXBfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkua2luZAkJPSAibWFjdnRhcCIsCisJLm5ld2xpbmsJPSBtYWN2dGFwX25ld2xpbmssCisJLmRlbGxpbmsJPSBtYWN2dGFwX2RlbGxpbmssCit9OworCisKK3N0YXRpYyB2b2lkIG1hY3Z0YXBfc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKCFzb2NrX3dyaXRlYWJsZShzaykgfHwKKwkgICAgIXRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykpCisJCXJldHVybjsKKworCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChzay0+c2tfc2xlZXAsIFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7Cit9CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGltaW5vcihpbm9kZSkpOworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxOworCWludCBlcnI7CisKKwllcnIgPSAtRU5PREVWOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBtYWN2dGFwIGRldmljZSAqLworCWVyciA9IC1FSU5WQUw7CisJaWYgKGRldi0+cnRubF9saW5rX29wcyAhPSAmbWFjdnRhcF9saW5rX29wcykKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRU5PTUVNOworCXEgPSAoc3RydWN0IG1hY3Z0YXBfcXVldWUgKilza19hbGxvYyhuZXQsIEFGX1VOU1BFQywgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAmbWFjdnRhcF9wcm90byk7CisJaWYgKCFxKQorCQlnb3RvIG91dDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnEtPnNvY2sud2FpdCk7CisJcS0+c29jay50eXBlID0gU09DS19SQVc7CisJcS0+c29jay5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKKwlxLT5zb2NrLmZpbGUgPSBmaWxlOworCXEtPnNvY2sub3BzID0gJm1hY3Z0YXBfc29ja2V0X29wczsKKwlzb2NrX2luaXRfZGF0YSgmcS0+c29jaywgJnEtPnNrKTsKKwlxLT5zay5za193cml0ZV9zcGFjZSA9IG1hY3Z0YXBfc29ja193cml0ZV9zcGFjZTsKKwlxLT5mbGFncyA9IElGRl9WTkVUX0hEUiB8IElGRl9OT19QSSB8IElGRl9UQVA7CisKKwllcnIgPSBtYWN2dGFwX3NldF9xdWV1ZShkZXYsIGZpbGUsIHEpOworCWlmIChlcnIpCisJCXNvY2tfcHV0KCZxLT5zayk7CisKK291dDoKKwlpZiAoZGV2KQorCQlkZXZfcHV0KGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1hY3Z0YXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltYWN2dGFwX3B1dF9xdWV1ZShxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtYWN2dGFwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrID0gUE9MTEVSUjsKKworCWlmICghcSkKKwkJZ290byBvdXQ7CisKKwltYXNrID0gMDsKKwlwb2xsX3dhaXQoZmlsZSwgJnEtPnNvY2sud2FpdCwgd2FpdCk7CisKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcS0+c2suc2tfcmVjZWl2ZV9xdWV1ZSkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCWlmIChzb2NrX3dyaXRlYWJsZSgmcS0+c2spIHx8CisJICAgICghdGVzdF9hbmRfc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZxLT5zb2NrLmZsYWdzKSAmJgorCSAgICAgc29ja193cml0ZWFibGUoJnEtPnNrKSkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKK291dDoKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbWFjdnRhcF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLAorCQkJCQkJc2l6ZV90IGxlbiwgc2l6ZV90IGxpbmVhciwKKwkJCQkJCWludCBub2Jsb2NrLCBpbnQgKmVycikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogVW5kZXIgYSBwYWdlPyAgRG9uJ3QgYm90aGVyIHdpdGggcGFnZWQgc2tiLiAqLworCWlmIChwcmVwYWQgKyBsZW4gPCBQQUdFX1NJWkUgfHwgIWxpbmVhcikKKwkJbGluZWFyID0gbGVuOworCisJc2tiID0gc29ja19hbGxvY19zZW5kX3Bza2Ioc2ssIHByZXBhZCArIGxpbmVhciwgbGVuIC0gbGluZWFyLCBub2Jsb2NrLAorCQkJCSAgIGVycik7CisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCisJc2tiX3Jlc2VydmUoc2tiLCBwcmVwYWQpOworCXNrYl9wdXQoc2tiLCBsaW5lYXIpOworCXNrYi0+ZGF0YV9sZW4gPSBsZW4gLSBsaW5lYXI7CisJc2tiLT5sZW4gKz0gbGVuIC0gbGluZWFyOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIG1hY3Z0YXBfc2tiX2Zyb21fdm5ldF9oZHIgYW5kIG1hY3Z0YXBfc2tiX3RvX3ZuZXRfaGRyIHNob3VsZAorICogYmUgc2hhcmVkIHdpdGggdGhlIHR1bi90YXAgZHJpdmVyLgorICovCitzdGF0aWMgaW50IG1hY3Z0YXBfc2tiX2Zyb21fdm5ldF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIpCit7CisJdW5zaWduZWQgc2hvcnQgZ3NvX3R5cGUgPSAwOworCWlmICh2bmV0X2hkci0+Z3NvX3R5cGUgIT0gVklSVElPX05FVF9IRFJfR1NPX05PTkUpIHsKKwkJc3dpdGNoICh2bmV0X2hkci0+Z3NvX3R5cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikgeworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNDoKKwkJCWdzb190eXBlID0gU0tCX0dTT19UQ1BWNDsKKwkJCWJyZWFrOworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNjoKKwkJCWdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKKwkJCWJyZWFrOworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFA6CisJCQlnc29fdHlwZSA9IFNLQl9HU09fVURQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICh2bmV0X2hkci0+Z3NvX3R5cGUgJiBWSVJUSU9fTkVUX0hEUl9HU09fRUNOKQorCQkJZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BfRUNOOworCisJCWlmICh2bmV0X2hkci0+Z3NvX3NpemUgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2bmV0X2hkci0+ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pIHsKKwkJaWYgKCFza2JfcGFydGlhbF9jc3VtX3NldChza2IsIHZuZXRfaGRyLT5jc3VtX3N0YXJ0LAorCQkJCQkgIHZuZXRfaGRyLT5jc3VtX29mZnNldCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodm5ldF9oZHItPmdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19OT05FKSB7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSB2bmV0X2hkci0+Z3NvX3NpemU7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBnc29fdHlwZTsKKworCQkvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgY29tcHV0ZWQuICovCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgfD0gU0tCX0dTT19ET0RHWTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY3Z0YXBfc2tiX3RvX3ZuZXRfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkcikKK3sKKwltZW1zZXQodm5ldF9oZHIsIDAsIHNpemVvZigqdm5ldF9oZHIpKTsKKworCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKKwkJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSBza2Jfc2hpbmZvKHNrYik7CisKKwkJLyogVGhpcyBpcyBhIGhpbnQgYXMgdG8gaG93IG11Y2ggc2hvdWxkIGJlIGxpbmVhci4gKi8KKwkJdm5ldF9oZHItPmhkcl9sZW4gPSBza2JfaGVhZGxlbihza2IpOworCQl2bmV0X2hkci0+Z3NvX3NpemUgPSBzaW5mby0+Z3NvX3NpemU7CisJCWlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY0KQorCQkJdm5ldF9oZHItPmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OworCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KQorCQkJdm5ldF9oZHItPmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY2OworCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUCkKKwkJCXZuZXRfaGRyLT5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19VRFA7CisJCWVsc2UKKwkJCUJVRygpOworCQlpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BfRUNOKQorCQkJdm5ldF9oZHItPmdzb190eXBlIHw9IFZJUlRJT19ORVRfSERSX0dTT19FQ047CisJfSBlbHNlCisJCXZuZXRfaGRyLT5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19OT05FOworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJdm5ldF9oZHItPmZsYWdzID0gVklSVElPX05FVF9IRFJfRl9ORUVEU19DU1VNOworCQl2bmV0X2hkci0+Y3N1bV9zdGFydCA9IHNrYi0+Y3N1bV9zdGFydCAtCisJCQkJCXNrYl9oZWFkcm9vbShza2IpOworCQl2bmV0X2hkci0+Y3N1bV9vZmZzZXQgPSBza2ItPmNzdW1fb2Zmc2V0OworCX0gLyogZWxzZSBldmVyeXRoaW5nIGlzIHplcm8gKi8KKworCXJldHVybiAwOworfQorCisKKy8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqLworc3RhdGljIHNzaXplX3QgbWFjdnRhcF9nZXRfdXNlcihzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSwKKwkJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2LCBzaXplX3QgY291bnQsCisJCQkJaW50IG5vYmxvY2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW47CisJc2l6ZV90IGxlbiA9IGNvdW50OworCWludCBlcnI7CisJc3RydWN0IHZpcnRpb19uZXRfaGRyIHZuZXRfaGRyID0geyAwIH07CisJaW50IHZuZXRfaGRyX2xlbiA9IDA7CisKKwlpZiAocS0+ZmxhZ3MgJiBJRkZfVk5FVF9IRFIpIHsKKwkJdm5ldF9oZHJfbGVuID0gc2l6ZW9mKHZuZXRfaGRyKTsKKworCQllcnIgPSAtRUlOVkFMOworCQlpZiAoKGxlbiAtPSB2bmV0X2hkcl9sZW4pIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWVyciA9IG1lbWNweV9mcm9taW92ZWNlbmQoKHZvaWQgKikmdm5ldF9oZHIsIGl2LCAwLAorCQkJCQkgICB2bmV0X2hkcl9sZW4pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoKHZuZXRfaGRyLmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19DU1VNKSAmJgorCQkgICAgIHZuZXRfaGRyLmNzdW1fc3RhcnQgKyB2bmV0X2hkci5jc3VtX29mZnNldCArIDIgPgorCQkJCQkJCXZuZXRfaGRyLmhkcl9sZW4pCisJCQl2bmV0X2hkci5oZHJfbGVuID0gdm5ldF9oZHIuY3N1bV9zdGFydCArCisJCQkJCQl2bmV0X2hkci5jc3VtX29mZnNldCArIDI7CisJCWVyciA9IC1FSU5WQUw7CisJCWlmICh2bmV0X2hkci5oZHJfbGVuID4gbGVuKQorCQkJZ290byBlcnI7CisJfQorCisJZXJyID0gLUVJTlZBTDsKKwlpZiAodW5saWtlbHkobGVuIDwgRVRIX0hMRU4pKQorCQlnb3RvIGVycjsKKworCXNrYiA9IG1hY3Z0YXBfYWxsb2Nfc2tiKCZxLT5zaywgTkVUX0lQX0FMSUdOLCBsZW4sIHZuZXRfaGRyLmhkcl9sZW4sCisJCQkJbm9ibG9jaywgJmVycik7CisJaWYgKCFza2IpCisJCWdvdG8gZXJyOworCisJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pb3ZlYyhza2IsIDAsIGl2LCB2bmV0X2hkcl9sZW4sIGxlbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJc2tiLT5wcm90b2NvbCA9IGV0aF9oZHIoc2tiKS0+aF9wcm90bzsKKworCWlmICh2bmV0X2hkcl9sZW4pIHsKKwkJZXJyID0gbWFjdnRhcF9za2JfZnJvbV92bmV0X2hkcihza2IsICZ2bmV0X2hkcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJdmxhbiA9IHJjdV9kZXJlZmVyZW5jZShxLT52bGFuKTsKKwlpZiAodmxhbikKKwkJbWFjdmxhbl9zdGFydF94bWl0KHNrYiwgdmxhbi0+ZGV2KTsKKwllbHNlCisJCWtmcmVlX3NrYihza2IpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOworCisJcmV0dXJuIGNvdW50OworCitlcnJfa2ZyZWU6CisJa2ZyZWVfc2tiKHNrYik7CisKK2VycjoKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJdmxhbiA9IHJjdV9kZXJlZmVyZW5jZShxLT52bGFuKTsKKwlpZiAodmxhbikKKwkJbmV0ZGV2X2dldF90eF9xdWV1ZSh2bGFuLT5kZXYsIDApLT50eF9kcm9wcGVkKys7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBtYWN2dGFwX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCisJCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXNzaXplX3QgcmVzdWx0ID0gLUVOT0xJTks7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXN1bHQgPSBtYWN2dGFwX2dldF91c2VyKHEsIGl2LCBpb3ZfbGVuZ3RoKGl2LCBjb3VudCksCisJCQkgICAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KK3N0YXRpYyBzc2l6ZV90IG1hY3Z0YXBfcHV0X3VzZXIoc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEsCisJCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2LCBpbnQgbGVuKQoreworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbjsKKwlpbnQgcmV0OworCWludCB2bmV0X2hkcl9sZW4gPSAwOworCisJaWYgKHEtPmZsYWdzICYgSUZGX1ZORVRfSERSKSB7CisJCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkcjsKKwkJdm5ldF9oZHJfbGVuID0gc2l6ZW9mICh2bmV0X2hkcik7CisJCWlmICgobGVuIC09IHZuZXRfaGRyX2xlbikgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0ID0gbWFjdnRhcF9za2JfdG9fdm5ldF9oZHIoc2tiLCAmdm5ldF9oZHIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAobWVtY3B5X3RvaW92ZWNlbmQoaXYsICh2b2lkICopJnZuZXRfaGRyLCAwLCB2bmV0X2hkcl9sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbGVuID0gbWluX3QoaW50LCBza2ItPmxlbiwgbGVuKTsKKworCXJldCA9IHNrYl9jb3B5X2RhdGFncmFtX2NvbnN0X2lvdmVjKHNrYiwgMCwgaXYsIHZuZXRfaGRyX2xlbiwgbGVuKTsKKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwl2bGFuID0gcmN1X2RlcmVmZXJlbmNlKHEtPnZsYW4pOworCWlmICh2bGFuKQorCQltYWN2bGFuX2NvdW50X3J4KHZsYW4sIGxlbiwgcmV0ID09IDAsIDApOworCXJjdV9yZWFkX3VubG9ja19iaCgpOworCisJcmV0dXJuIHJldCA/IHJldCA6IChsZW4gKyB2bmV0X2hkcl9sZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBtYWN2dGFwX2RvX3JlYWQoc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgICAgICBpbnQgbm9ibG9jaykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNzaXplX3QgcmV0ID0gMDsKKworCWFkZF93YWl0X3F1ZXVlKHEtPnNrLnNrX3NsZWVwLCAmd2FpdCk7CisJd2hpbGUgKGxlbikgeworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKworCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHRoZSBxdWV1ZSAqLworCQlza2IgPSBza2JfZGVxdWV1ZSgmcS0+c2suc2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmICghc2tiKSB7CisJCQlpZiAobm9ibG9jaykgeworCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBOb3RoaW5nIHRvIHJlYWQsIGxldCdzIHNsZWVwICovCisJCQlzY2hlZHVsZSgpOworCQkJY29udGludWU7CisJCX0KKwkJcmV0ID0gbWFjdnRhcF9wdXRfdXNlcihxLCBza2IsIGl2LCBsZW4pOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJYnJlYWs7CisJfQorCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmVtb3ZlX3dhaXRfcXVldWUocS0+c2suc2tfc2xlZXAsICZ3YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBtYWN2dGFwX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppdiwKKwkJCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90IGxlbiwgcmV0ID0gMDsKKworCWxlbiA9IGlvdl9sZW5ndGgoaXYsIGNvdW50KTsKKwlpZiAobGVuIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtYWN2dGFwX2RvX3JlYWQocSwgaW9jYiwgaXYsIGxlbiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCXJldCA9IG1pbl90KHNzaXplX3QsIHJldCwgbGVuKTsgLyogWFhYIGNvcGllZCBmcm9tIHR1bi5jLiBXaHk/ICovCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIGdlbmVyaWMgdHVuL3RhcCBpbnRlcmZhY2UKKyAqLworc3RhdGljIGxvbmcgbWFjdnRhcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCBpZnJlcSBfX3VzZXIgKmlmciA9IGFyZ3A7CisJdW5zaWduZWQgaW50IF9fdXNlciAqdXAgPSBhcmdwOworCXVuc2lnbmVkIGludCB1OworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVFVOU0VUSUZGOgorCQkvKiBpZ25vcmUgdGhlIG5hbWUsIGp1c3QgbG9vayBhdCBmbGFncyAqLworCQlpZiAoZ2V0X3VzZXIodSwgJmlmci0+aWZyX2ZsYWdzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldCA9IDA7CisJCWlmICgodSAmIH5JRkZfVk5FVF9IRFIpICE9IChJRkZfTk9fUEkgfCBJRkZfVEFQKSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UKKwkJCXEtPmZsYWdzID0gdTsKKworCQlyZXR1cm4gcmV0OworCisJY2FzZSBUVU5HRVRJRkY6CisJCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwkJdmxhbiA9IHJjdV9kZXJlZmVyZW5jZShxLT52bGFuKTsKKwkJaWYgKHZsYW4pCisJCQlkZXZfaG9sZCh2bGFuLT5kZXYpOworCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCQlpZiAoIXZsYW4pCisJCQlyZXR1cm4gLUVOT0xJTks7CisKKwkJcmV0ID0gMDsKKwkJaWYgKGNvcHlfdG9fdXNlcigmaWZyLT5pZnJfbmFtZSwgcS0+dmxhbi0+ZGV2LT5uYW1lLCBJRk5BTVNJWikgfHwKKwkJICAgIHB1dF91c2VyKHEtPmZsYWdzLCAmaWZyLT5pZnJfZmxhZ3MpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZGV2X3B1dCh2bGFuLT5kZXYpOworCQlyZXR1cm4gcmV0OworCisJY2FzZSBUVU5HRVRGRUFUVVJFUzoKKwkJaWYgKHB1dF91c2VyKElGRl9UQVAgfCBJRkZfTk9fUEkgfCBJRkZfVk5FVF9IRFIsIHVwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgVFVOU0VUU05EQlVGOgorCQlpZiAoZ2V0X3VzZXIodSwgdXApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcS0+c2suc2tfc25kYnVmID0gdTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRVTlNFVE9GRkxPQUQ6CisJCS8qIGxldCB0aGUgdXNlciBjaGVjayBmb3IgZnV0dXJlIGZsYWdzICovCisJCWlmIChhcmcgJiB+KFRVTl9GX0NTVU0gfCBUVU5fRl9UU080IHwgVFVOX0ZfVFNPNiB8CisJCQkgICAgVFVOX0ZfVFNPX0VDTiB8IFRVTl9GX1VGTykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBUT0RPOiBvbmx5IGFjY2VwdCBmcmFtZXMgd2l0aCB0aGUgZmVhdHVyZXMgdGhhdAorCQkJIGdvdCBlbmFibGVkIGZvciBmb3J3YXJkZWQgZnJhbWVzICovCisJCWlmICghKHEtPmZsYWdzICYgSUZGX1ZORVRfSERSKSkKKwkJCXJldHVybiAgLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBtYWN2dGFwX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIG1hY3Z0YXBfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1hY3Z0YXBfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWFjdnRhcF9vcGVuLAorCS5yZWxlYXNlCT0gbWFjdnRhcF9yZWxlYXNlLAorCS5haW9fcmVhZAk9IG1hY3Z0YXBfYWlvX3JlYWQsCisJLmFpb193cml0ZQk9IG1hY3Z0YXBfYWlvX3dyaXRlLAorCS5wb2xsCQk9IG1hY3Z0YXBfcG9sbCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwJPSBtYWN2dGFwX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gbWFjdnRhcF9jb21wYXRfaW9jdGwsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IG1hY3Z0YXBfcXVldWUsIHNvY2spOworCXJldHVybiBtYWN2dGFwX2dldF91c2VyKHEsIG0tPm1zZ19pb3YsIHRvdGFsX2xlbiwKKwkJCSAgICBtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOworfQorCitzdGF0aWMgaW50IG1hY3Z0YXBfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuLAorCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxID0gY29udGFpbmVyX29mKHNvY2ssIHN0cnVjdCBtYWN2dGFwX3F1ZXVlLCBzb2NrKTsKKwlpbnQgcmV0OworCWlmIChmbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19UUlVOQykpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IG1hY3Z0YXBfZG9fcmVhZChxLCBpb2NiLCBtLT5tc2dfaW92LCB0b3RhbF9sZW4sCisJCQkgIGZsYWdzICYgTVNHX0RPTlRXQUlUKTsKKwlpZiAocmV0ID4gdG90YWxfbGVuKSB7CisJCW0tPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CisJCXJldCA9IGZsYWdzICYgTVNHX1RSVU5DID8gcmV0IDogdG90YWxfbGVuOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBPcHMgc3RydWN0dXJlIHRvIG1pbWljIHJhdyBzb2NrZXRzIHdpdGggdHVuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtYWN2dGFwX3NvY2tldF9vcHMgPSB7CisJLnNlbmRtc2cgPSBtYWN2dGFwX3NlbmRtc2csCisJLnJlY3Ztc2cgPSBtYWN2dGFwX3JlY3Ztc2csCit9OworCisvKiBHZXQgYW4gdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0IGZyb20gdHVuIGZpbGUuICBSZXR1cm5zIGVycm9yIHVubGVzcyBmaWxlIGlzCisgKiBhdHRhY2hlZCB0byBhIGRldmljZS4gIFRoZSByZXR1cm5lZCBvYmplY3Qgd29ya3MgbGlrZSBhIHBhY2tldCBzb2NrZXQsIGl0CisgKiBjYW4gYmUgdXNlZCBmb3Igc29ja19zZW5kbXNnL3NvY2tfcmVjdm1zZy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGZvciBhcyBsb25nIGFzIHRoZSBzb2NrZXQgaXMgaW4gdXNlLiAqLworc3RydWN0IHNvY2tldCAqbWFjdnRhcF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxOworCWlmIChmaWxlLT5mX29wICE9ICZtYWN2dGFwX2ZvcHMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKCFxKQorCQlyZXR1cm4gRVJSX1BUUigtRUJBREZEKTsKKwlyZXR1cm4gJnEtPnNvY2s7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYWN2dGFwX2dldF9zb2NrZXQpOworCitzdGF0aWMgaW50IG1hY3Z0YXBfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZtYWN2dGFwX21ham9yLCAwLAorCQkJCU1BQ1ZUQVBfTlVNX0RFVlMsICJtYWN2dGFwIik7CisJaWYgKGVycikKKwkJZ290byBvdXQxOworCisJY2Rldl9pbml0KCZtYWN2dGFwX2NkZXYsICZtYWN2dGFwX2ZvcHMpOworCWVyciA9IGNkZXZfYWRkKCZtYWN2dGFwX2NkZXYsIG1hY3Z0YXBfbWFqb3IsIE1BQ1ZUQVBfTlVNX0RFVlMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0MjsKKworCW1hY3Z0YXBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJtYWN2dGFwIik7CisJaWYgKElTX0VSUihtYWN2dGFwX2NsYXNzKSkgeworCQllcnIgPSBQVFJfRVJSKG1hY3Z0YXBfY2xhc3MpOworCQlnb3RvIG91dDM7CisJfQorCisJZXJyID0gbWFjdmxhbl9saW5rX3JlZ2lzdGVyKCZtYWN2dGFwX2xpbmtfb3BzKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDQ7CisKKwlyZXR1cm4gMDsKKworb3V0NDoKKwljbGFzc191bnJlZ2lzdGVyKG1hY3Z0YXBfY2xhc3MpOworb3V0MzoKKwljZGV2X2RlbCgmbWFjdnRhcF9jZGV2KTsKK291dDI6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKG1hY3Z0YXBfbWFqb3IsIE1BQ1ZUQVBfTlVNX0RFVlMpOworb3V0MToKKwlyZXR1cm4gZXJyOworfQorbW9kdWxlX2luaXQobWFjdnRhcF9pbml0KTsKKworc3RhdGljIHZvaWQgbWFjdnRhcF9leGl0KHZvaWQpCit7CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJm1hY3Z0YXBfbGlua19vcHMpOworCWNsYXNzX3VucmVnaXN0ZXIobWFjdnRhcF9jbGFzcyk7CisJY2Rldl9kZWwoJm1hY3Z0YXBfY2Rldik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKG1hY3Z0YXBfbWFqb3IsIE1BQ1ZUQVBfTlVNX0RFVlMpOworfQorbW9kdWxlX2V4aXQobWFjdnRhcF9leGl0KTsKKworTU9EVUxFX0FMSUFTX1JUTkxfTElOSygibWFjdnRhcCIpOworTU9EVUxFX0FVVEhPUigiQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21ldGguYyBiL2RyaXZlcnMvbmV0L21ldGguYwppbmRleCAyYWY4MTczLi45ZjcyY2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbWV0aC5jCkBAIC01MSwxNCArNTEsMTEgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhfc3RyPSJTR0kgTzIgRmFzdCBFdGhlcm5ldCI7CiAKLSNkZWZpbmUgSEFWRV9UWF9USU1FT1VUCiAvKiBUaGUgbWF4aW11bSB0aW1lIHdhaXRlZCAoaW4gamlmZmllcykgYmVmb3JlIGFzc3VtaW5nIGEgVHggZmFpbGVkLiAoNDAwbXMpICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgKDQwMCpIWi8xMDAwKQogCi0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBUWF9USU1FT1VUOwogbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7Ci0jZW5kaWYKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHByaXZhdGUgdG8gZWFjaCBkZXZpY2UuIEl0IGlzIHVzZWQgdG8gcGFzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCmluZGV4IDgyOWI5ZWMuLjY0Mzk0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKQEAgLTUwOCwxMSArNTA4LDExIEBACiAJCS8qIFdlIGFyZSBjb3B5aW5nIGFsbCByZWxldmFudCBkYXRhIHRvIHRoZSBza2IgLSB0ZW1wb3JhcmlseQogCQkgKiBzeW5jaCBidWZmZXJzIGZvciB0aGUgY29weSAqLwogCQlkbWEgPSBiZTY0X3RvX2NwdShyeF9kZXNjLT5kYXRhWzBdLmFkZHIpOwotCQlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSgmbWRldi0+cGRldi0+ZGV2LCBkbWEsIDAsCi0JCQkJCSAgICAgIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJm1kZXYtPnBkZXYtPmRldiwgZG1hLCBsZW5ndGgsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgdmEsIGxlbmd0aCk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKCZtZGV2LT5wZGV2LT5kZXYsIGRtYSwgMCwKLQkJCQkJCSBsZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZtZGV2LT5wZGV2LT5kZXYsIGRtYSwgbGVuZ3RoLAorCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlza2ItPnRhaWwgKz0gbGVuZ3RoOwogCX0gZWxzZSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggM2NmNTZkOS4uOGY2ZTgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJcmV0dXJuIF9fbWx4NF9pbml0X29uZShwZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1seDRfcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobWx4NF9wY2lfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM0MCkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBTRFIgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNGEpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgRERSICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzU0KSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFFEUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggYWY2N2FmNS4uYzk3YjZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIHN0YXRpYyBjaGFyIG12NjQzeHhfZXRoX2RyaXZlcl9uYW1lW10gPSAibXY2NDN4eF9ldGgiOwogc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX3ZlcnNpb25bXSA9ICIxLjQiOwpAQCAtMTY5Nyw3ICsxNjk2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAluaWJibGVzID0gMSA8PCAoZGV2LT5kZXZfYWRkcls1XSAmIDB4MGYpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZkZXYtPnVjLmxpc3QsIGxpc3QpIHsKKwluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7CiAJCWlmIChtZW1jbXAoZGV2LT5kZXZfYWRkciwgaGEtPmFkZHIsIDUpKQogCQkJcmV0dXJuIDA7CiAJCWlmICgoZGV2LT5kZXZfYWRkcls1XSBeIGhhLT5hZGRyWzVdKSAmIDB4ZjApCkBAIC0xNzk1LDcgKzE3OTQsNyBAQAogCW1lbXNldChtY19zcGVjLCAwLCAweDEwMCk7CiAJbWVtc2V0KG1jX290aGVyLCAwLCAweDEwMCk7CiAKLQlmb3IgKGFkZHIgPSBkZXYtPm1jX2xpc3Q7IGFkZHIgIT0gTlVMTDsgYWRkciA9IGFkZHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihhZGRyLCBkZXYpIHsKIAkJdTggKmEgPSBhZGRyLT5kYV9hZGRyOwogCQl1MzIgKnRhYmxlOwogCQlpbnQgZW50cnk7CkBAIC0yODQ3LDYgKzI4NDYsNyBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBtdjY0M3h4X2V0aF94bWl0LAogCS5uZG9fc2V0X3J4X21vZGUJPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsCQk9IG12NjQzeHhfZXRoX2lvY3RsLAogCS5uZG9fY2hhbmdlX210dQkJPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1LAogCS5uZG9fdHhfdGltZW91dAkJPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggM2ZjYjFjMy4uNjc2YzUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0zOCw2ICszOCw4IEBACiAgKiAgIE15cmljb20sIEluYy4sIDMyNU4gU2FudGEgQW5pdGEgQXZlbnVlLCBBcmNhZGlhLCBDQSA5MTAwNgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtNzUsNyArNzcsNyBAQAogI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgogI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCiAKLSNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuNS4xLTEuNDUzIgorI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjItMS40NTkiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKIE1PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKQEAgLTgxOSw5ICs4MjEsNyBAQAogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgY3RsLCAmY21kLCAwKTsKIAogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgdG8gc2V0IGZsb3cgY29udHJvbCBtb2RlXG4iLAotCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBmbG93IGNvbnRyb2wgbW9kZVxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCW1ncC0+cGF1c2UgPSBwYXVzZTsKQEAgLTgzNyw4ICs4MzcsNyBAQAogCWN0bCA9IHByb21pc2MgPyBNWEdFRldfRU5BQkxFX1BST01JU0MgOiBNWEdFRldfRElTQUJMRV9QUk9NSVNDOwogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgY3RsLCAmY21kLCBhdG9taWMpOwogCWlmIChzdGF0dXMpCi0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgdG8gc2V0IHByb21pc2MgbW9kZVxuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgIkZhaWxlZCB0byBzZXQgcHJvbWlzYyBtb2RlXG4iKTsKIH0KIAogc3RhdGljIGludCBteXJpMTBnZV9kbWFfdGVzdChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgdGVzdF90eXBlKQpAQCAtMTIwMSw2ICsxMjAwLDkgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgaWR4OworI2lmIE1ZUkkxMEdFX0FMTE9DX1NJWkUgPiA0MDk2CisJaW50IGVuZF9vZmZzZXQ7CisjZW5kaWYKIAogCWlmICh1bmxpa2VseShyeC0+d2F0Y2hkb2dfbmVlZGVkICYmICF3YXRjaGRvZykpCiAJCXJldHVybjsKQEAgLTEyNDIsOSArMTI0NCw5IEBACiAKICNpZiBNWVJJMTBHRV9BTExPQ19TSVpFID4gNDA5NgogCQkvKiBkb24ndCBjcm9zcyBhIDRLQiBib3VuZGFyeSAqLwotCQlpZiAoKHJ4LT5wYWdlX29mZnNldCA+PiAxMikgIT0KLQkJICAgICgocngtPnBhZ2Vfb2Zmc2V0ICsgYnl0ZXMgLSAxKSA+PiAxMikpCi0JCQlyeC0+cGFnZV9vZmZzZXQgPSAocngtPnBhZ2Vfb2Zmc2V0ICsgNDA5NikgJiB+NDA5NTsKKwkJZW5kX29mZnNldCA9IHJ4LT5wYWdlX29mZnNldCArIGJ5dGVzIC0gMTsKKwkJaWYgKCh1bnNpZ25lZCkocngtPnBhZ2Vfb2Zmc2V0IF4gZW5kX29mZnNldCkgPiA0MDk1KQorCQkJcngtPnBhZ2Vfb2Zmc2V0ID0gZW5kX29mZnNldCAmIH40MDk1OwogI2VuZGlmCiAJCXJ4LT5maWxsX2NudCsrOwogCkBAIC0xNDgyLDE5ICsxNDg0LDE1IEBACiAKIAkJCWlmIChtZ3AtPmxpbmtfc3RhdGUgPT0gTVhHRUZXX0xJTktfVVApIHsKIAkJCQlpZiAobmV0aWZfbXNnX2xpbmsobWdwKSkKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIm15cmkxMGdlOiAlczogbGluayB1cFxuIiwKLQkJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X2luZm8obWdwLT5kZXYsICJsaW5rIHVwXG4iKTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKG1ncC0+ZGV2KTsKIAkJCQltZ3AtPmxpbmtfY2hhbmdlcysrOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAobmV0aWZfbXNnX2xpbmsobWdwKSkKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIm15cmkxMGdlOiAlczogbGluayAlc1xuIiwKLQkJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLAotCQkJCQkgICAgICAgKGxpbmtfdXAgPT0gTVhHRUZXX0xJTktfTVlSSU5FVCA/Ci0JCQkJCQkibWlzbWF0Y2ggKE15cmluZXQgZGV0ZWN0ZWQpIiA6Ci0JCQkJCQkiZG93biIpKTsKKwkJCQkJbmV0ZGV2X2luZm8obWdwLT5kZXYsICJsaW5rICVzXG4iLAorCQkJCQkgICAgbGlua191cCA9PSBNWEdFRldfTElOS19NWVJJTkVUID8KKwkJCQkJICAgICJtaXNtYXRjaCAoTXlyaW5ldCBkZXRlY3RlZCkiIDoKKwkJCQkJICAgICJkb3duIik7CiAJCQkJbmV0aWZfY2Fycmllcl9vZmYobWdwLT5kZXYpOwogCQkJCW1ncC0+bGlua19jaGFuZ2VzKys7CiAJCQl9CkBAIC0xNTAzLDkgKzE1MDEsOCBAQAogCQkgICAgbnRvaGwoc3RhdHMtPnJkbWFfdGFnc19hdmFpbGFibGUpKSB7CiAJCQltZ3AtPnJkbWFfdGFnc19hdmFpbGFibGUgPQogCQkJICAgIG50b2hsKHN0YXRzLT5yZG1hX3RhZ3NfYXZhaWxhYmxlKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm15cmkxMGdlOiAlczogUkRNQSB0aW1lZCBvdXQhICIKLQkJCSAgICAgICAiJWQgdGFncyBsZWZ0XG4iLCBtZ3AtPmRldi0+bmFtZSwKLQkJCSAgICAgICBtZ3AtPnJkbWFfdGFnc19hdmFpbGFibGUpOworCQkJbmV0ZGV2X3dhcm4obWdwLT5kZXYsICJSRE1BIHRpbWVkIG91dCEgJWQgdGFncyBsZWZ0XG4iLAorCQkJCSAgICBtZ3AtPnJkbWFfdGFnc19hdmFpbGFibGUpOwogCQl9CiAJCW1ncC0+ZG93bl9jbnQgKz0gc3RhdHMtPmxpbmtfZG93bjsKIAkJaWYgKHN0YXRzLT5saW5rX2Rvd24pCkBAIC0xNTc2LDggKzE1NzMsNyBAQAogCQlpZiAoc2VuZF9kb25lX2NvdW50ICE9IHR4LT5wa3RfZG9uZSkKIAkJCW15cmkxMGdlX3R4X2RvbmUoc3MsIChpbnQpc2VuZF9kb25lX2NvdW50KTsKIAkJaWYgKHVubGlrZWx5KGkgPiBteXJpMTBnZV9tYXhfaXJxX2xvb3BzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXlyaTEwZ2U6ICVzOiBpcnEgc3R1Y2s/XG4iLAotCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIobWdwLT5kZXYsICJpcnEgc3R1Y2s/XG4iKTsKIAkJCXN0YXRzLT52YWxpZCA9IDA7CiAJCQlzY2hlZHVsZV93b3JrKCZtZ3AtPndhdGNoZG9nX3dvcmspOwogCQl9CkBAIC0xNjE0LDE2ICsxNjEwLDE0IEBACiAJICovCiAJcHRyID0gbWdwLT5wcm9kdWN0X2NvZGVfc3RyaW5nOwogCWlmIChwdHIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogTWlzc2luZyBwcm9kdWN0IGNvZGVcbiIsCi0JCSAgICAgICBuZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG5ldGRldiwgIk1pc3NpbmcgcHJvZHVjdCBjb2RlXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHB0cisrKSB7CiAJCXB0ciA9IHN0cmNocihwdHIsICctJyk7CiAJCWlmIChwdHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IEludmFsaWQgcHJvZHVjdCAiCi0JCQkgICAgICAgImNvZGUgJXNcbiIsIG5ldGRldi0+bmFtZSwKLQkJCSAgICAgICBtZ3AtPnByb2R1Y3RfY29kZV9zdHJpbmcpOworCQkJbmV0ZGV2X2VycihuZXRkZXYsICJJbnZhbGlkIHByb2R1Y3QgY29kZSAlc1xuIiwKKwkJCQkgICBtZ3AtPnByb2R1Y3RfY29kZV9zdHJpbmcpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yMDA5LDE3ICsyMDAzLDE1IEBACiAJCQkJbWdwLT5zbWFsbF9ieXRlcyArIE1YR0VGV19QQUQsIDApOwogCiAJaWYgKHNzLT5yeF9zbWFsbC5maWxsX2NudCA8IHNzLT5yeF9zbWFsbC5tYXNrICsgMSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6c2xpY2UtJWQ6IGFsbG9jZWQgb25seSAlZCBzbWFsbCBidWZzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzbGljZSwgc3MtPnJ4X3NtYWxsLmZpbGxfY250KTsKKwkJbmV0ZGV2X2VycihkZXYsICJzbGljZS0lZDogYWxsb2NlZCBvbmx5ICVkIHNtYWxsIGJ1ZnNcbiIsCisJCQkgICBzbGljZSwgc3MtPnJ4X3NtYWxsLmZpbGxfY250KTsKIAkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc7CiAJfQogCiAJbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMobWdwLCAmc3MtPnJ4X2JpZywgbWdwLT5iaWdfYnl0ZXMsIDApOwogCWlmIChzcy0+cnhfYmlnLmZpbGxfY250IDwgc3MtPnJ4X2JpZy5tYXNrICsgMSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6c2xpY2UtJWQ6IGFsbG9jZWQgb25seSAlZCBiaWcgYnVmc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc2xpY2UsIHNzLT5yeF9iaWcuZmlsbF9jbnQpOworCQluZXRkZXZfZXJyKGRldiwgInNsaWNlLSVkOiBhbGxvY2VkIG9ubHkgJWQgYmlnIGJ1ZnNcbiIsCisJCQkgICBzbGljZSwgc3MtPnJ4X2JpZy5maWxsX2NudCk7CiAJCWdvdG8gYWJvcnRfd2l0aF9yeF9iaWdfcmluZzsKIAl9CiAKQEAgLTIzNTgsNyArMjM1MCw3IEBACiAJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUQVJUSU5HOwogCXN0YXR1cyA9IG15cmkxMGdlX3Jlc2V0KG1ncCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgcmVzZXRcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHJlc2V0XG4iKTsKIAkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CiAJfQogCkBAIC0yMzcwLDkgKzIzNjIsNyBAQAogCQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRU5BQkxFX1JTU19RVUVVRVMsCiAJCQkJCSAgICZjbWQsIDApOwogCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBzZXQgbnVtYmVyIG9mIHNsaWNlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IG51bWJlciBvZiBzbGljZXNcbiIpOwogCQkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CiAJCX0KIAkJLyogc2V0dXAgdGhlIGluZGlyZWN0aW9uIHRhYmxlICovCkBAIC0yMzg0LDkgKzIzNzQsNyBAQAogCQkJCQkgICAgTVhHRUZXX0NNRF9HRVRfUlNTX1RBQkxFX09GRlNFVCwKIAkJCQkJICAgICZjbWQsIDApOwogCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBzZXR1cCByc3MgdGFibGVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXR1cCByc3MgdGFibGVzXG4iKTsKIAkJCWdvdG8gYWJvcnRfd2l0aF9ub3RoaW5nOwogCQl9CiAKQEAgLTI0MDAsOSArMjM4OCw3IEBACiAJCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfUlNTX0VOQUJMRSwKIAkJCQkJICAgJmNtZCwgMCk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGVuYWJsZSBzbGljZXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzbGljZXNcbiIpOwogCQkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CiAJCX0KIAl9CkBAIC0yNDUwLDkgKzI0MzYsNyBAQAogCiAJCXN0YXR1cyA9IG15cmkxMGdlX2dldF90eHJ4KG1ncCwgc2xpY2UpOwogCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBnZXQgcmluZyBzaXplcyBvciBsb2NhdGlvbnNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByaW5nIHNpemVzIG9yIGxvY2F0aW9uc1xuIik7CiAJCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CiAJCX0KIAkJc3RhdHVzID0gbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3Moc3MpOwpAQCAtMjQ2NSw5ICsyNDQ5LDcgQEAKIAkJaWYgKHNsaWNlID09IDAgfHwgbWdwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA+IDEpCiAJCQlzdGF0dXMgPSBteXJpMTBnZV9zZXRfc3RhdHMobWdwLCBzbGljZSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBzdGF0cyBETUFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiQ291bGRuJ3Qgc2V0IHN0YXRzIERNQVxuIik7CiAJCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CiAJCX0KIApAQCAtMjQ5OCw4ICsyNDgwLDcgQEAKIAlzdGF0dXMgfD0KIAkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9CSUdfQlVGRkVSX1NJWkUsICZjbWQsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBidWZmZXIgc2l6ZXNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkbid0IHNldCBidWZmZXIgc2l6ZXNcbiIpOwogCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CiAJfQogCkBAIC0yNTExLDggKzI0OTIsNyBAQAogCWNtZC5kYXRhMCA9IDA7CiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9UU09fTU9ERSwgJmNtZCwgMCk7CiAJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVOT1NZUykgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogQ291bGRuJ3Qgc2V0IFRTTyBtb2RlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJDb3VsZG4ndCBzZXQgVFNPIG1vZGVcbiIpOwogCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CiAJfQogCkBAIC0yNTIxLDggKzI1MDEsNyBAQAogCiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VUSEVSTkVUX1VQLCAmY21kLCAwKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBicmluZyB1cCBsaW5rXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJDb3VsZG4ndCBicmluZyB1cCBsaW5rXG4iKTsKIAkJZ290byBhYm9ydF93aXRoX3JpbmdzOwogCX0KIApAQCAtMjU3NSwxNSArMjU1NCwxMiBAQAogCQlzdGF0dXMgPQogCQkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VUSEVSTkVUX0RPV04sICZjbWQsIDApOwogCQlpZiAoc3RhdHVzKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogQ291bGRuJ3QgYnJpbmcgZG93biBsaW5rXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkbid0IGJyaW5nIGRvd24gbGlua1xuIik7CiAKIAkJd2FpdF9ldmVudF90aW1lb3V0KG1ncC0+ZG93bl93cSwgb2xkX2Rvd25fY250ICE9IG1ncC0+ZG93bl9jbnQsCiAJCQkJICAgSFopOwogCQlpZiAob2xkX2Rvd25fY250ID09IG1ncC0+ZG93bl9jbnQpCi0JCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlcyBuZXZlciBnb3QgZG93biBpcnFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAibmV2ZXIgZ290IGRvd24gaXJxXG4iKTsKIAl9CiAJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCW15cmkxMGdlX2ZyZWVfaXJxKG1ncCk7CkBAIC0yOTQ0LDkgKzI5MjAsNyBAQAogCQlpZHggPSAoaWR4ICsgMSkgJiB0eC0+bWFzazsKIAl9IHdoaWxlIChpZHggIT0gbGFzdF9pZHgpOwogCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibXlyaTEwZ2U6ICVzOiBUU08gYnV0IHdhbnRlZCB0byBsaW5lYXJpemU/IT8hP1xuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgIlRTTyBidXQgd2FudGVkIHRvIGxpbmVhcml6ZT8hPyE/XG4iKTsKIAkJZ290byBkcm9wOwogCX0KIApAQCAtMzA0Myw4ICszMDE3LDggQEAKIAogCWVyciA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwgJmNtZCwgMSk7CiAJaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwiCi0JCSAgICAgICAiIGVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJbmV0ZGV2X2VycihkZXYsICJGYWlsZWQgTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwgZXJyb3Igc3RhdHVzOiAlZFxuIiwKKwkJCSAgIGVycik7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCkBAIC0zMDU4LDE0ICszMDMyLDEzIEBACiAJZXJyID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfTEVBVkVfQUxMX01VTFRJQ0FTVF9HUk9VUFMsCiAJCQkJJmNtZCwgMSk7CiAJaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm15cmkxMGdlOiAlczogRmFpbGVkIE1YR0VGV19MRUFWRV9BTExfTVVMVElDQVNUX0dST1VQUyIKLQkJICAgICAgICIsIGVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJbmV0ZGV2X2VycihkZXYsICJGYWlsZWQgTVhHRUZXX0xFQVZFX0FMTF9NVUxUSUNBU1RfR1JPVVBTLCBlcnJvciBzdGF0dXM6ICVkXG4iLAorCQkJICAgZXJyKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKIAkvKiBXYWxrIHRoZSBtdWx0aWNhc3QgbGlzdCwgYW5kIGFkZCBlYWNoIGFkZHJlc3MgKi8KLQlmb3IgKG1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jX2xpc3QgIT0gTlVMTDsgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBkZXYpIHsKIAkJbWVtY3B5KGRhdGEsICZtY19saXN0LT5kbWlfYWRkciwgNik7CiAJCWNtZC5kYXRhMCA9IG50b2hsKGRhdGFbMF0pOwogCQljbWQuZGF0YTEgPSBudG9obChkYXRhWzFdKTsKQEAgLTMwNzMsMTggKzMwNDYsMTYgQEAKIAkJCQkJJmNtZCwgMSk7CiAKIAkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogRmFpbGVkICIKLQkJCSAgICAgICAiTVhHRUZXX0pPSU5fTVVMVElDQVNUX0dST1VQLCBlcnJvciBzdGF0dXM6IgotCQkJICAgICAgICIlZFx0IiwgZGV2LT5uYW1lLCBlcnIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJNQUMgJXBNXG4iLCBtY19saXN0LT5kbWlfYWRkcik7CisJCQluZXRkZXZfZXJyKGRldiwgIkZhaWxlZCBNWEdFRldfSk9JTl9NVUxUSUNBU1RfR1JPVVAsIGVycm9yIHN0YXR1czolZCAlcE1cbiIsCisJCQkJICAgZXJyLCBtY19saXN0LT5kbWlfYWRkcik7CiAJCQlnb3RvIGFib3J0OwogCQl9CiAJfQogCS8qIEVuYWJsZSBtdWx0aWNhc3QgZmlsdGVyaW5nICovCiAJZXJyID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfRElTQUJMRV9BTExNVUxUSSwgJmNtZCwgMSk7CiAJaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgTVhHRUZXX0RJU0FCTEVfQUxMTVVMVEksIgotCQkgICAgICAgImVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJbmV0ZGV2X2VycihkZXYsICJGYWlsZWQgTVhHRUZXX0RJU0FCTEVfQUxMTVVMVEksIGVycm9yIHN0YXR1czogJWRcbiIsCisJCQkgICBlcnIpOwogCQlnb3RvIGFib3J0OwogCX0KIApAQCAtMzEwNSw5ICszMDc2LDggQEAKIAogCXN0YXR1cyA9IG15cmkxMGdlX3VwZGF0ZV9tYWNfYWRkcmVzcyhtZ3AsIHNhLT5zYV9kYXRhKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibXlyaTEwZ2U6ICVzOiBjaGFuZ2luZyBtYWMgYWRkcmVzcyBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0ZGV2X2VycihkZXYsICJjaGFuZ2luZyBtYWMgYWRkcmVzcyBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCSAgIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0zMTIyLDEyICszMDkyLDEwIEBACiAJaW50IGVycm9yID0gMDsKIAogCWlmICgobmV3X210dSA8IDY4KSB8fCAoRVRIX0hMRU4gKyBuZXdfbXR1ID4gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IG5ldyBtdHUgKCVkKSBpcyBub3QgdmFsaWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIG5ld19tdHUpOworCQluZXRkZXZfZXJyKGRldiwgIm5ldyBtdHUgKCVkKSBpcyBub3QgdmFsaWRcbiIsIG5ld19tdHUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5naW5nIG10dSBmcm9tICVkIHRvICVkXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXZfaW5mbyhkZXYsICJjaGFuZ2luZyBtdHUgZnJvbSAlZCB0byAlZFxuIiwgZGV2LT5tdHUsIG5ld19tdHUpOwogCWlmIChtZ3AtPnJ1bm5pbmcpIHsKIAkJLyogaWYgd2UgY2hhbmdlIHRoZSBtdHUgb24gYW4gYWN0aXZlIGRldmljZSwgd2UgbXVzdAogCQkgKiByZXNldCB0aGUgZGV2aWNlIHNvIHRoZSBmaXJtd2FyZSBzZWVzIHRoZSBjaGFuZ2UgKi8KQEAgLTMzNTYsNyArMzMyNCw3IEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogY2xvc2luZyAlc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8obmV0ZGV2LCAiY2xvc2luZ1xuIik7CiAJCXJ0bmxfbG9jaygpOwogCQlteXJpMTBnZV9jbG9zZShuZXRkZXYpOwogCQlydG5sX3VubG9jaygpOwpAQCAtMzM4Myw4ICszMzUxLDcgQEAKIAltc2xlZXAoNSk7CQkvKiBnaXZlIGNhcmQgdGltZSB0byByZXNwb25kICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQobWdwLT5wZGV2LCBQQ0lfVkVORE9SX0lELCAmdmVuZG9yKTsKIAlpZiAodmVuZG9yID09IDB4ZmZmZikgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZGV2aWNlIGRpc2FwcGVhcmVkIVxuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgImRldmljZSBkaXNhcHBlYXJlZCFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTM0NjMsMTAgKzM0MzAsOSBAQAogCQkgKiBpZiB0aGUgY2FyZCByZWJvb3RlZCBkdWUgdG8gYSBwYXJpdHkgZXJyb3IKIAkJICogRm9yIG5vdywganVzdCByZXBvcnQgaXQgKi8KIAkJcmVib290ID0gbXlyaTEwZ2VfcmVhZF9yZWJvb3QobWdwKTsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibXlyaTEwZ2U6ICVzOiBOSUMgcmVib290ZWQgKDB4JXgpLCVzIHJlc2V0dGluZ1xuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCByZWJvb3QsCi0JCSAgICAgICBteXJpMTBnZV9yZXNldF9yZWNvdmVyID8gIiAiIDogIiBub3QiKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgIk5JQyByZWJvb3RlZCAoMHgleCksJXMgcmVzZXR0aW5nXG4iLAorCQkJICAgcmVib290LAorCQkJICAgbXlyaTEwZ2VfcmVzZXRfcmVjb3ZlciA/ICIiIDogIiBub3QiKTsKIAkJaWYgKG15cmkxMGdlX3Jlc2V0X3JlY292ZXIgPT0gMCkKIAkJCXJldHVybjsKIAkJcnRubF9sb2NrKCk7CkBAIC0zNDk0LDMxICszNDYwLDI2IEBACiAJCWlmIChjbWQgPT0gMHhmZmZmKSB7CiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3IpOwogCQkJaWYgKHZlbmRvciA9PSAweGZmZmYpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIm15cmkxMGdlOiAlczogZGV2aWNlIGRpc2FwcGVhcmVkIVxuIiwKLQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCW5ldGRldl9lcnIobWdwLT5kZXYsICJkZXZpY2UgZGlzYXBwZWFyZWQhXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAkJLyogUGVyaGFwcyBpdCBpcyBhIHNvZnR3YXJlIGVycm9yLiAgVHJ5IHRvIHJlc2V0ICovCiAKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGRldmljZSB0aW1lb3V0LCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobWdwLT5kZXYsICJkZXZpY2UgdGltZW91dCwgcmVzZXR0aW5nXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CiAJCQl0eCA9ICZtZ3AtPnNzW2ldLnR4OwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJteXJpMTBnZTogJXM6ICglZCk6ICVkICVkICVkICVkICVkICVkXG4iLAotCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCBpLCB0eC0+cXVldWVfYWN0aXZlLCB0eC0+cmVxLAotCQkJICAgICAgIHR4LT5kb25lLCB0eC0+cGt0X3N0YXJ0LCB0eC0+cGt0X2RvbmUsCi0JCQkgICAgICAgKGludCludG9obChtZ3AtPnNzW2ldLmZ3X3N0YXRzLT4KLQkJCQkJICBzZW5kX2RvbmVfY291bnQpKTsKKwkJCW5ldGRldl9lcnIobWdwLT5kZXYsICIoJWQpOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJCQkgICBpLCB0eC0+cXVldWVfYWN0aXZlLCB0eC0+cmVxLAorCQkJCSAgIHR4LT5kb25lLCB0eC0+cGt0X3N0YXJ0LCB0eC0+cGt0X2RvbmUsCisJCQkJICAgKGludCludG9obChtZ3AtPnNzW2ldLmZ3X3N0YXRzLT4KKwkJCQkJICAgICAgc2VuZF9kb25lX2NvdW50KSk7CiAJCQltc2xlZXAoMjAwMCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogKCVkKTogJWQgJWQgJWQgJWQgJWQgJWRcbiIsCi0JCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIGksIHR4LT5xdWV1ZV9hY3RpdmUsIHR4LT5yZXEsCi0JCQkgICAgICAgdHgtPmRvbmUsIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKLQkJCSAgICAgICAoaW50KW50b2hsKG1ncC0+c3NbaV0uZndfc3RhdHMtPgotCQkJCQkgIHNlbmRfZG9uZV9jb3VudCkpOworCQkJbmV0ZGV2X2luZm8obWdwLT5kZXYsICIoJWQpOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJCQkgICAgaSwgdHgtPnF1ZXVlX2FjdGl2ZSwgdHgtPnJlcSwKKwkJCQkgICAgdHgtPmRvbmUsIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKKwkJCQkgICAgKGludCludG9obChtZ3AtPnNzW2ldLmZ3X3N0YXRzLT4KKwkJCQkJICAgICAgIHNlbmRfZG9uZV9jb3VudCkpOwogCQl9CiAJfQogCkBAIC0zNTI4LDggKzM0ODksNyBAQAogCX0KIAlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCwgMSk7CiAJaWYgKHN0YXR1cyAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIsCi0JCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobWdwLT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIik7CiAJZWxzZQogCQlteXJpMTBnZV9vcGVuKG1ncC0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwpAQCAtMzU4MCwxNCArMzU0MCwxMCBAQAogCQkJLyogbmljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgc3R1Y2suLiAqLwogCQkJaWYgKHJ4X3BhdXNlX2NudCAhPSBtZ3AtPndhdGNoZG9nX3BhdXNlKSB7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkgICAgICAgIm15cmkxMGdlICVzIHNsaWNlICVkOiIKLQkJCQkJICAgICAgICJUWCBwYXVzZWQsIGNoZWNrIGxpbmsgcGFydG5lclxuIiwKLQkJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCBpKTsKKwkJCQkJbmV0ZGV2X2VycihtZ3AtPmRldiwgInNsaWNlICVkOiBUWCBwYXVzZWQsIGNoZWNrIGxpbmsgcGFydG5lclxuIiwKKwkJCQkJCSAgIGkpOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJteXJpMTBnZSAlcyBzbGljZSAlZCBzdHVjazoiLAotCQkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgaSk7CisJCQkJbmV0ZGV2X3dhcm4obWdwLT5kZXYsICJzbGljZSAlZCBzdHVjazoiLCBpKTsKIAkJCQlyZXNldF9uZWVkZWQgPSAxOwogCQkJfQogCQl9CkBAIC00MDg1LDcgKzQwNDEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFIAkweDAwMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RV85CTB4MDAwOQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXlyaTEwZ2VfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG15cmkxMGdlX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTVlSSUNPTSwgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RSl9LAogCXtQQ0lfREVWSUNFCiAJIChQQ0lfVkVORE9SX0lEX01ZUklDT00sIFBDSV9ERVZJQ0VfSURfTVlSSUNPTV9NWVJJMTBHRV9aOEVfOSl9LApAQCAtNDEyNywxMyArNDA4MywxMSBAQAogCiBzdGF0aWMgX19pbml0IGludCBteXJpMTBnZV9pbml0X21vZHVsZSh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBWZXJzaW9uICVzXG4iLCBteXJpMTBnZV9kcml2ZXIubmFtZSwKLQkgICAgICAgTVlSSTEwR0VfVkVSU0lPTl9TVFIpOworCXByX2luZm8oIlZlcnNpb24gJXNcbiIsIE1ZUkkxMEdFX1ZFUlNJT05fU1RSKTsKIAogCWlmIChteXJpMTBnZV9yc3NfaGFzaCA+IE1YR0VGV19SU1NfSEFTSF9UWVBFX01BWCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogSWxsZWdhbCByc3NoIGhhc2ggdHlwZSAlZCwgZGVmYXVsdGluZyB0byBzb3VyY2UgcG9ydFxuIiwKLQkJICAgICAgIG15cmkxMGdlX2RyaXZlci5uYW1lLCBteXJpMTBnZV9yc3NfaGFzaCk7CisJCXByX2VycigiSWxsZWdhbCByc3NoIGhhc2ggdHlwZSAlZCwgZGVmYXVsdGluZyB0byBzb3VyY2UgcG9ydFxuIiwKKwkJICAgICAgIG15cmkxMGdlX3Jzc19oYXNoKTsKIAkJbXlyaTEwZ2VfcnNzX2hhc2ggPSBNWEdFRldfUlNTX0hBU0hfVFlQRV9TUkNfUE9SVDsKIAl9CiAjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCBiMzUxM2FkMy4uOGI0MzEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKQEAgLTcxNiwxMCArNzE2LDEwIEBACiAJcGFkWzBdID0gTVlSSV9QQURfTEVOOwogCXBhZFsxXSA9IDB4YWI7CiAKLQkvKiBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zIHdlIHB1dCB0aGUgbGVuZ3RoCi0JICogaW4gaGVyZSBpbnN0ZWFkLiBJdCBpcyB1cCB0byB0aGUgODAyLjIgbGF5ZXIgdG8gY2FycnkgcHJvdG9jb2wgaW5mb3JtYXRpb24uCisJLyogU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMy8yIHdlIHB1dCB0aGUKKwkgKiBsZW5ndGggaW4gaGVyZSBpbnN0ZWFkLgogCSAqLwotCWlmICh0eXBlICE9IEVUSF9QXzgwMl8zKQorCWlmICh0eXBlICE9IEVUSF9QXzgwMl8zICYmIHR5cGUgIT0gRVRIX1BfODAyXzIpCiAJCWV0aC0+aF9wcm90byA9IGh0b25zKHR5cGUpOwogCWVsc2UKIAkJZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA3OTdmZTE2Li5lNTIwMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAl7ICJOYXRTZW1pIERQODM4MVs1Nl0iLCAwLCAyNCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5hdHNlbWlfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmF0c2VtaV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTlMsIDB4MDAyMCwgMHgxMmQ5LCAgICAgMHgwMDBjLCAgICAgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9OUywgMHgwMDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCkBAIC0yNDg4LDE2ICsyNDg4LDE2IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeyAvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCXJ4X21vZGUgPSBSeEZpbHRlckVuYWJsZSB8IEFjY2VwdEJyb2FkY2FzdAogCQkJfCBBY2NlcHRBbGxNdWx0aWNhc3QgfCBBY2NlcHRBbGxQaHlzIHwgQWNjZXB0TXlQaHlzOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCXJ4X21vZGUgPSBSeEZpbHRlckVuYWJsZSB8IEFjY2VwdEJyb2FkY2FzdAogCQkJfCBBY2NlcHRBbGxNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCWludCBpOworCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjMpICYgMHgxZmY7CiAJCQltY19maWx0ZXJbYi84XSB8PSAoMSA8PCAoYiAmIDB4MDcpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKaW5kZXggM2ZjZWJiNy4uODVhZWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYworKysgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5lMmtfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5lMmtfcGNpX3RibCkgPSB7CiAJeyAweDEwZWMsIDB4ODAyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfUmVhbFRla19SVExfODAyOSB9LAogCXsgMHgxMDUwLCAweDA5NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX1dpbmJvbmRfODlDOTQwIH0sCiAJeyAweDExZjYsIDB4MTQwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQ29tcGV4X1JMMjAwMCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCmluZGV4IDExZDk0ZTIuLjg2MWEwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDcgQEAKICMgTUEgIDAyMTExLTEzMDcsIFVTQS4KICMgCiAjIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0jIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorIyBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogIyAKICMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggOWJjNWJkMWQuLjE0NGQyZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCkBAIC00MjAsNyArNDIwLDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CiAKIC8qIFVOSUZJRUQgUk9NSU1BR0UgKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTlhfVU5JX0ZXX01JTl9TSVpFCQkweDNlYjAwMAorI2RlZmluZSBOWF9VTklfRldfTUlOX1NJWkUJCTB4YzgwMDAKICNkZWZpbmUgTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMCTB4MAogI2RlZmluZSBOWF9VTklfRElSX1NFQ1RfQk9PVExECQkweDYKICNkZWZpbmUgTlhfVU5JX0RJUl9TRUNUX0ZXCQkweDcKQEAgLTE0MjcsOCArMTQyNyw4IEBACiAKIH0KIAotaW50IG5ldHhlbl9nZXRfZmxhc2hfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYyk7Ci1pbnQgbmV0eGVuX3AzX2dldF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIF9fbGU2NCAqbWFjKTsKK2ludCBuZXR4ZW5fZ2V0X2ZsYXNoX21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0ICptYWMpOworaW50IG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYyk7CiBleHRlcm4gdm9pZCBuZXR4ZW5fY2hhbmdlX3JpbmdwYXJhbShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBuZXR4ZW5fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAogCQkJCWludCAqdmFscCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCmluZGV4IDljYjhmNjguLjJhOGVmNWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggNTQyZjQwOC4uZjg0OTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGQxMzhmYzIuLjYyMmU0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgogICoKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCiAgKgogICovCiAKQEAgLTk2OSw3ICs5NjksOCBAQAogI2RlZmluZSBOWF9ERVZfUkVBRFkJCTMKICNkZWZpbmUgTlhfREVWX05FRURfUkVTRVQJNAogI2RlZmluZSBOWF9ERVZfTkVFRF9RVUlTQ0VOVAk1Ci0jZGVmaW5lIE5YX0RFVl9GQUlMRUQJCTYKKyNkZWZpbmUgTlhfREVWX05FRURfQUVSIAk2CisjZGVmaW5lIE5YX0RFVl9GQUlMRUQJCTcKIAogI2RlZmluZSBOWF9SQ09ERV9EUklWRVJfSU5GTwkJMHgyMDAwMDAwMAogI2RlZmluZSBOWF9SQ09ERV9EUklWRVJfQ0FOX1JFTE9BRAkweDQwMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCA4NWUyOGU2Li5hOTQ1NTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKgogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KICAqCiAgKi8KIApAQCAtNTM5LDcgKzUzOSw3IEBACiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKIAl1OCBudWxsX2FkZHJbNl07Ci0JaW50IGluZGV4ID0gMDsKKwlpbnQgaTsKIAogCW1lbXNldChudWxsX2FkZHIsIDAsIDYpOwogCkBAIC01NTQsNyArNTU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuZXRkZXYtPm1jX2NvdW50ID09IDApIHsKKwlpZiAobmV0ZGV2X21jX2VtcHR5KG5ldGRldikpIHsKIAkJYWRhcHRlci0+c2V0X3Byb21pc2MoYWRhcHRlciwKIAkJCQlORVRYRU5fTklVX05PTl9QUk9NSVNDX01PREUpOwogCQluZXR4ZW5fbmljX2Rpc2FibGVfbWNhc3RfZmlsdGVyKGFkYXB0ZXIpOwpAQCAtNTYzLDIzICs1NjMsMjAgQEAKIAogCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsIE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSk7CiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKLQkJCW5ldGRldi0+bWNfY291bnQgPiBhZGFwdGVyLT5tYXhfbWNfY291bnQpIHsKKwkJCW5ldGRldl9tY19jb3VudChuZXRkZXYpID4gYWRhcHRlci0+bWF4X21jX2NvdW50KSB7CiAJCW5ldHhlbl9uaWNfZGlzYWJsZV9tY2FzdF9maWx0ZXIoYWRhcHRlcik7CiAJCXJldHVybjsKIAl9CiAKIAluZXR4ZW5fbmljX2VuYWJsZV9tY2FzdF9maWx0ZXIoYWRhcHRlcik7CiAKLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQsIGluZGV4KyspCi0JCW5ldHhlbl9uaWNfc2V0X21jYXN0X2FkZHIoYWRhcHRlciwgaW5kZXgsIG1jX3B0ci0+ZG1pX2FkZHIpOwotCi0JaWYgKGluZGV4ICE9IG5ldGRldi0+bWNfY291bnQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBtdWx0aWNhc3QgYWRkcmVzcyBjb3VudCBtaXNtYXRjaFxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpCisJCW5ldHhlbl9uaWNfc2V0X21jYXN0X2FkZHIoYWRhcHRlciwgaSsrLCBtY19wdHItPmRtaV9hZGRyKTsKIAogCS8qIENsZWFyIG91dCByZW1haW5pbmcgYWRkcmVzc2VzICovCi0JZm9yICg7IGluZGV4IDwgYWRhcHRlci0+bWF4X21jX2NvdW50OyBpbmRleCsrKQotCQluZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKGFkYXB0ZXIsIGluZGV4LCBudWxsX2FkZHIpOworCXdoaWxlIChpIDwgYWRhcHRlci0+bWF4X21jX2NvdW50KQorCQluZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKGFkYXB0ZXIsIGkrKywgbnVsbF9hZGRyKTsKIH0KIAogc3RhdGljIGludApAQCAtNzA0LDE2ICs3MDEsMTQgQEAKIAl9CiAKIAlpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCQkobmV0ZGV2LT5tY19jb3VudCA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpIHsKKwkJCShuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpIHsKIAkJbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEk7CiAJCWdvdG8gc2VuZF9md19jbWQ7CiAJfQogCi0JaWYgKG5ldGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7Ci0JCSAgICAgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikKIAkJCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIG1jX3B0ci0+ZG1pX2FkZHIsICZkZWxfbGlzdCk7Ci0JCX0KIAl9CiAKIHNlbmRfZndfY21kOgpAQCAtNzc3LDE3ICs3NzIsMjAgQEAKIGludCBuZXR4ZW5fY29uZmlnX2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCW54X25pY19yZXFfdCByZXE7Ci0JdTY0IHdvcmQ7Ci0JaW50IHJ2OworCXU2NCB3b3JkWzZdOworCWludCBydiwgaTsKIAogCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CisJbWVtc2V0KHdvcmQsIDAsIHNpemVvZih3b3JkKSk7CiAKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CiAKLQl3b3JkID0gTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7Ci0JcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKKwl3b3JkWzBdID0gTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkWzBdKTsKIAotCW1lbWNweSgmcmVxLndvcmRzWzBdLCAmYWRhcHRlci0+Y29hbCwgc2l6ZW9mKGFkYXB0ZXItPmNvYWwpKTsKKwltZW1jcHkoJndvcmRbMF0sICZhZGFwdGVyLT5jb2FsLCBzaXplb2YoYWRhcHRlci0+Y29hbCkpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXJlcS53b3Jkc1tpXSA9IGNwdV90b19sZTY0KHdvcmRbaV0pOwogCiAJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOwogCWlmIChydiAhPSAwKSB7CkBAIC0xMDMzLDcgKzEwMzEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbmV0eGVuX2dldF9mbGFzaF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIF9fbGU2NCAqbWFjKQoraW50IG5ldHhlbl9nZXRfZmxhc2hfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYykKIHsKIAlfX2xlMzIgKnBtYWMgPSAoX19sZTMyICopIG1hYzsKIAl1MzIgb2Zmc2V0OwpAQCAtMTA1OCw3ICsxMDU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYykKK2ludCBuZXR4ZW5fcDNfZ2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0ICptYWMpCiB7CiAJdWludDMyX3QgY3JiYWRkciwgbWFjX2hpLCBtYWNfbG87CiAJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKaW5kZXggM2ZkMWRjYi4uZTJjNWI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgogICoKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwppbmRleCA2NGNmZjY4Li4xYzYzNjEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCkBAIC03ODAsNiArNzgwLDkgQEAKIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJcmV0dXJuIDE7CiAKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJcmV0dXJuIDE7CisKIAkvKiBsYXN0IGF0dGVtcHQgaGFkIGZhaWxlZCAqLwogCWlmIChOWFJEMzIoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkgPT0gUEhBTl9JTklUSUFMSVpFX0ZBSUxFRCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggMjQyNzllNi4uMDg3ODBlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYy9OZXRYZW4gKDEvMTApIEdiRSBDb252ZXJnZWQgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC04NCw2ICs4NSw3IEBACiBzdGF0aWMgdm9pZCBuZXR4ZW5fY3JlYXRlX2RpYWdfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgbmV0eGVuX3JlbW92ZV9kaWFnX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAorc3RhdGljIGludCBueF9kZXZfcmVxdWVzdF9hZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgbnhfZGVjcl9kZXZfcmVmX2NudChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGludCBuZXR4ZW5fY2FuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKQEAgLTk4LDcgKzEwMCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ORVRYRU4sIChkZXZpY2UpKSwgXAogCS5jbGFzcyA9IFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIC5jbGFzc19tYXNrID0gfjB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXR4ZW5fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmV0eGVuX3BjaV90YmwpID0gewogCUVOVFJZKFBDSV9ERVZJQ0VfSURfTlgyMDMxXzEwR1hTUiksCiAJRU5UUlkoUENJX0RFVklDRV9JRF9OWDIwMzFfMTBHQ1g0KSwKIAlFTlRSWShQQ0lfREVWSUNFX0lEX05YMjAzMV80R0NVKSwKQEAgLTQzMCw3ICs0MzIsNyBAQAogewogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JX19sZTY0IG1hY19hZGRyOworCXU2NCBtYWNfYWRkcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIApAQCAtMTI2Miw2ICsxMjY0LDkgQEAKIAlpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSkpKQogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OwogCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHBkZXYtPnJldmlzaW9uKSkKKwkJcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlcikpOwpAQCAtMTQwOSwxNyArMTQxNCwxOSBAQAogCiAJbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CiAKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMocGRldi0+cmV2aXNpb24pKQorCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9Ci1zdGF0aWMgaW50IF9fbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKKworc3RhdGljIHZvaWQgbmV0eGVuX25pY19kZXRhY2hfZnVuYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IHJldHZhbDsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIApAQCAtMTQzOCw1MyArMTQ0NSwyMiBAQAogCW54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CiAKIAljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0KLQlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgewotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCX0KLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQotCXJldHVybiAwOwotfQotc3RhdGljIHZvaWQgbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpZiAoX19uZXR4ZW5fbmljX3NodXRkb3duKHBkZXYpKQotCQlyZXR1cm47Ci19Ci0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50Ci1uZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gX19uZXR4ZW5fbmljX3NodXRkb3duKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotbmV0eGVuX25pY19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IG5ldHhlbl9uaWNfYXR0YWNoX2Z1bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IGVycjsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKIAlhZGFwdGVyLT5haHcuY3JiX3dpbiA9IC0xOwogCWFkYXB0ZXItPmFody5vY21fd2luID0gLTE7CiAKQEAgLTE1MDMsMTEgKzE0NzksMTAgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dF9kZXRhY2g7CiAKLQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwotCiAJCW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CiAJfQogCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCW5ldHhlbl9zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIG5ldHhlbl9md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOwogCXJldHVybiAwOwogCkBAIC0xNTE3LDYgKzE0OTIsODUgQEAKIAlueF9kZWNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOwogCXJldHVybiBlcnI7CiB9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5ldHhlbl9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlpZiAobnhfZGV2X3JlcXVlc3RfYWVyKGFkYXB0ZXIpKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCisJbmV0eGVuX25pY19kZXRhY2hfZnVuYyhhZGFwdGVyKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZXR4ZW5faW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoX2Z1bmMocGRldik7CisKKwlyZXR1cm4gZXJyID8gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCA6IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwluZXR4ZW5fbmljX2RldGFjaF9mdW5jKGFkYXB0ZXIpOworCisJaWYgKHBjaV9zYXZlX3N0YXRlKHBkZXYpKQorCQlyZXR1cm47CisKKwlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldHZhbDsKKworCW5ldHhlbl9uaWNfZGV0YWNoX2Z1bmMoYWRhcHRlcik7CisKKwlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gbmV0eGVuX25pY19hdHRhY2hfZnVuYyhwZGV2KTsKK30KICNlbmRpZgogCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjEwNCwyMCArMjE1OCw0OSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQKLW54X2Rldl9yZXF1ZXN0X3Jlc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQKK254X2Rldl9yZXF1ZXN0X2FlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIHN0YXRlOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKG5ldHhlbl9hcGlfbG9jayhhZGFwdGVyKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CiAKLQlpZiAoc3RhdGUgIT0gTlhfREVWX0lOSVRBTElaSU5HKQotCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX05FRURfUkVTRVQpOworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9BRVIpCisJCXJldCA9IDA7CisJZWxzZSBpZiAoc3RhdGUgPT0gTlhfREVWX1JFQURZKSB7CisJCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFLCBOWF9ERVZfTkVFRF9BRVIpOworCQlyZXQgPSAwOworCX0KIAogCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK254X2Rldl9yZXF1ZXN0X3Jlc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc3RhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gcmV0OworCisJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisKKwlpZiAoc3RhdGUgPT0gTlhfREVWX05FRURfUkVTRVQpCisJCXJldCA9IDA7CisJZWxzZSBpZiAoc3RhdGUgIT0gTlhfREVWX0lOSVRBTElaSU5HICYmIHN0YXRlICE9IE5YX0RFVl9ORUVEX0FFUikgeworCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX05FRURfUkVTRVQpOworCQlyZXQgPSAwOworCX0KKworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMjI3MSwxNyArMjM1NCwyOSBAQAogCXUzMiBzdGF0ZSwgaGVhcnRiaXQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAorCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9BRVIpCisJCXJldHVybiAwOworCiAJaWYgKG5ldHhlbl9uaWNfY2hlY2tfdGVtcChhZGFwdGVyKSkKIAkJZ290byBkZXRhY2g7CiAKIAlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkgewotCQlueF9kZXZfcmVxdWVzdF9yZXNldChhZGFwdGVyKTsKKwkJaWYgKG54X2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpKQorCQkJcmV0dXJuIDA7CiAJCWdvdG8gZGV0YWNoOwogCX0KIAotCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOwotCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9SRVNFVCkKLQkJZ290byBkZXRhY2g7CisJLyogTlhfREVWX05FRURfUkVTRVQsIHRoaXMgc3RhdGUgY2FuIGJlIG1hcmtlZCBpbiB0d28gY2FzZXMKKwkgKiAxLiBUeCB0aW1lb3V0IDIuIEZ3IGhhbmcKKwkgKiBTZW5kIHJlcXVlc3QgdG8gZGVzdHJveSBjb250ZXh0IGluIGNhc2Ugb2YgdHggdGltZW91dCBvbmx5CisJICogYW5kIGRvZXNuJ3QgcmVxdWlyZWQgaW4gY2FzZSBvZiBGdyBoYW5nCisJICovCisJaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX1JFU0VUKSB7CisJCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCWdvdG8gZGV0YWNoOworCX0KIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlyZXR1cm4gMDsKQEAgLTIyOTAsMTIgKzIzODUsMTcgQEAKIAlpZiAoaGVhcnRiaXQgIT0gYWRhcHRlci0+aGVhcnRiaXQpIHsKIAkJYWRhcHRlci0+aGVhcnRiaXQgPSBoZWFydGJpdDsKIAkJYWRhcHRlci0+ZndfZmFpbF9jbnQgPSAwOworCQlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJCWdvdG8gZGV0YWNoOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoKythZGFwdGVyLT5md19mYWlsX2NudCA8IEZXX0ZBSUxfVEhSRVNIKQogCQlyZXR1cm4gMDsKIAorCWlmIChueF9kZXZfcmVxdWVzdF9yZXNldChhZGFwdGVyKSkKKwkJcmV0dXJuIDA7CisKIAljbGVhcl9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAogCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgImZpcm13YXJlIGhhbmcgZGV0ZWN0ZWRcbiIpOwpAQCAtMjQ5OCw3ICsyNTk4LDcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3NpemVfdCBuZXR4ZW5fc3lzZnNfd3JpdGVfbWVtKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIHNzaXplX3QgbmV0eGVuX3N5c2ZzX3dyaXRlX21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKIAkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CkBAIC0yNzI1LDYgKzI4MjUsMTIgQEAKIHsgfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIG5ldHhlbl9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBuZXR4ZW5faW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBuZXR4ZW5faW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmV0eGVuX2lvX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4ZW5fZHJpdmVyID0gewogCS5uYW1lID0gbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBuZXR4ZW5fcGNpX3RibCwKQEAgLTI3MzQsNyArMjg0MCw4IEBACiAJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lLAogI2VuZGlmCi0JLnNodXRkb3duID0gbmV0eGVuX25pY19zaHV0ZG93bgorCS5zaHV0ZG93biA9IG5ldHhlbl9uaWNfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJm5ldHhlbl9lcnJfaGFuZGxlcgogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUwMTAuYyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCmluZGV4IDZhODdkODEuLmMxNmNiZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTAxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCkBAIC02NTEsNyArNjUxLDggQEAKIAogCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBlbnRlcmluZyBzZXRfbXVsdGljYXN0X2xpc3RcbiIsIGRldi0+bmFtZSkpOwogCi0JaWYgKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MgfHwgZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19saXN0KSB7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyB8fCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8CisJICAgICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlvdXRiKFJNRF9QUk9NSVNDLCBFRExDX1JNT0RFKTsgLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJUFJJTlRLKChLRVJOX0RFQlVHICIlczogRW50ZXJpbmcgcHJvbWlzY3VvdXMgbW9kZVxuIiwgZGV2LT5uYW1lKSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCBiNDJmNWU1Li4wNWMyOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC01OTYsOCArNTk2LDggQEAKIAlzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0IF9faW9tZW0gKmlhc19jbWQ7CiAJc3RydWN0IHRkcl9jbWRfc3RydWN0IF9faW9tZW0gKnRkcl9jbWQ7CiAJc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdCBfX2lvbWVtICptY19jbWQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CisJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJcHRyID0gcC0+c2NiICsgMTsKIApAQCAtNzI0LDkgKzcyNCw5IEBACiAJCXdyaXRldygweGZmZmYsICZtY19jbWQtPmNtZF9saW5rKTsKIAkJd3JpdGV3KG51bV9hZGRycyAqIDYsICZtY19jbWQtPm1jX2NudCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG51bV9hZGRyczsgaSsrLCBkbWkgPSBkbWktPm5leHQpCi0JCQltZW1jcHlfdG9pbyhtY19jbWQtPm1jX2xpc3RbaV0sCi0JCQkJCQkJZG1pLT5kbWlfYWRkciwgNik7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKKwkJCW1lbWNweV90b2lvKG1jX2NtZC0+bWNfbGlzdFtpKytdLCBkbWktPmRtaV9hZGRyLCA2KTsKIAogCQl3cml0ZXcobWFrZTE2KG1jX2NtZCksICZwLT5zY2ItPmNibF9vZmZzZXQpOwogCQl3cml0ZWIoQ1VDX1NUQVJULCAmcC0+c2NiLT5jbWRfY3VjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNjUuYyBiL2RyaXZlcnMvbmV0L25pNjUuYwppbmRleCBhZTE5YWFmLi45MjI1Yzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTY1LmMKKysrIGIvZHJpdmVycy9uZXQvbmk2NS5jCkBAIC04NDksNyArODQ5LDcgQEAKIAogCSBpZihkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCSBuaTY1X2luaXRfbGFuY2UocCxkZXYtPmRldl9hZGRyLDB4MDAsTV9QUk9NKTsKLQkgZWxzZSBpZihkZXYtPm1jX2NvdW50IHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJIGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChkZXYpIHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCSBuaTY1X2luaXRfbGFuY2UocCxkZXYtPmRldl9hZGRyLDB4ZmYsMHgwKTsKIAkgZWxzZQogCQkgbmk2NV9pbml0X2xhbmNlKHAsZGV2LT5kZXZfYWRkciwweDAwLDB4MDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAyYWVkMmIzLi4wNjc4ZjMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTMsNiArMyw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTMzLDcgKzM1LDYgQEAKICNpbmNsdWRlICJuaXUuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJuaXUiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuMCIKICNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3YgMTQsIDIwMDgiCiAKQEAgLTU4LDcgKzU5LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbml1X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaXVfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TVU4sIDB4YWJjZCl9LAogCXt9CiB9OwpAQCAtODksMjEgKzkwLDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJOSVUgZGVidWcgbGV2ZWwiKTsKIAotI2RlZmluZSBuaXVkYmcoVFlQRSwgZiwgYS4uLikgXAotZG8gewlpZiAoKG5wKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR18jI1RZUEUpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYIGYsICMjIGEpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIG5pdWluZm8oVFlQRSwgZiwgYS4uLikgXAotZG8gewlpZiAoKG5wKS0+bXNnX2VuYWJsZSAmIE5FVElGX01TR18jI1RZUEUpIFwKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggZiwgIyMgYSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbml1d2FybihUWVBFLCBmLCBhLi4uKSBcCi1kbyB7CWlmICgobnApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHXyMjVFlQRSkgXAotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCBmLCAjIyBhKTsgXAotfSB3aGlsZSAoMCkKLQogI2RlZmluZSBuaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKSBcCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5wYXJlbnQtPmxvY2ssIGZsYWdzKQogI2RlZmluZSBuaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpIFwKQEAgLTEzNSwxMCArMTIxLDkgQEAKIAludzY0X21hYyhyZWcsIGJpdHMpOwogCWVyciA9IF9fbml1X3dhaXRfYml0c19jbGVhcl9tYWMobnAsIHJlZywgYml0cywgbGltaXQsIGRlbGF5KTsKIAlpZiAoZXJyKQotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IGJpdHMgKCVsbHgpIG9mIHJlZ2lzdGVyICVzICIKLQkJCSJ3b3VsZCBub3QgY2xlYXIsIHZhbFslbGx4XVxuIiwKLQkJCW5wLT5kZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGJpdHMsIHJlZ19uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NF9tYWMocmVnKSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgImJpdHMgKCVsbHgpIG9mIHJlZ2lzdGVyICVzIHdvdWxkIG5vdCBjbGVhciwgdmFsWyVsbHhdXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRzLCByZWdfbmFtZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NF9tYWMocmVnKSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTc1LDEwICsxNjAsOSBAQAogCiAJZXJyID0gX19uaXVfd2FpdF9iaXRzX2NsZWFyX2lwcChucCwgcmVnLCBiaXRzLCBsaW1pdCwgZGVsYXkpOwogCWlmIChlcnIpCi0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogYml0cyAoJWxseCkgb2YgcmVnaXN0ZXIgJXMgIgotCQkJIndvdWxkIG5vdCBjbGVhciwgdmFsWyVsbHhdXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0cywgcmVnX25hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0X2lwcChyZWcpKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiYml0cyAoJWxseCkgb2YgcmVnaXN0ZXIgJXMgd291bGQgbm90IGNsZWFyLCB2YWxbJWxseF1cbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJpdHMsIHJlZ19uYW1lLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylucjY0X2lwcChyZWcpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTYsMTAgKzIwMCw5IEBACiAJbnc2NChyZWcsIGJpdHMpOwogCWVyciA9IF9fbml1X3dhaXRfYml0c19jbGVhcihucCwgcmVnLCBiaXRzLCBsaW1pdCwgZGVsYXkpOwogCWlmIChlcnIpCi0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogYml0cyAoJWxseCkgb2YgcmVnaXN0ZXIgJXMgIgotCQkJIndvdWxkIG5vdCBjbGVhciwgdmFsWyVsbHhdXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0cywgcmVnX25hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0KHJlZykpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJiaXRzICglbGx4KSBvZiByZWdpc3RlciAlcyB3b3VsZCBub3QgY2xlYXIsIHZhbFslbGx4XVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYml0cywgcmVnX25hbWUsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5yNjQocmVnKSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDc1LDkgKzQ1OCw4IEBACiAJZXJyID0gbWRpb193cml0ZShucCwgbnAtPnBvcnQsIE5JVV9FU1IyX0RFVl9BRERSLAogCQkJIEVTUjJfVElfUExMX0NGR19MLCBwbGxfY2ZnKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJOSVUgUG9ydCAlZCAiCi0JCQkic2VyZGVzX2luaXRfbml1XzFnX3NlcmRlczogIgotCQkJIm1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfQ0ZHX0wgZmFpbGVkIiwgbnAtPnBvcnQpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJOSVUgUG9ydCAlZCAlcygpIG1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfQ0ZHX0wgZmFpbGVkXG4iLAorCQkJICAgbnAtPnBvcnQsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTQ4Niw5ICs0NjgsOCBAQAogCWVyciA9IG1kaW9fd3JpdGUobnAsIG5wLT5wb3J0LCBOSVVfRVNSMl9ERVZfQUREUiwKIAkJCSBFU1IyX1RJX1BMTF9TVFNfTCwgcGxsX3N0cyk7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiTklVIFBvcnQgJWQgIgotCQkJInNlcmRlc19pbml0X25pdV8xZ19zZXJkZXM6ICIKLQkJCSJtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX1NUU19MIGZhaWxlZCIsIG5wLT5wb3J0KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiTklVIFBvcnQgJWQgJXMoKSBtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX1NUU19MIGZhaWxlZFxuIiwKKwkJCSAgIG5wLT5wb3J0LCBfX2Z1bmNfXyk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01MzEsOCArNTEyLDggQEAKIAl9CiAKIAlpZiAoKHNpZyAmIG1hc2spICE9IHZhbCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBzaWduYWwgYml0cyBbJTA4eF0gYXJlIG5vdCAiCi0JCQkiWyUwOHhdXG4iLCBucC0+cG9ydCwgKGludCkgKHNpZyAmIG1hc2spLCAoaW50KSB2YWwpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90IFslMDh4XVxuIiwKKwkJCSAgIG5wLT5wb3J0LCAoaW50KShzaWcgJiBtYXNrKSwgKGludCl2YWwpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTU2OSw5ICs1NTAsOCBAQAogCWVyciA9IG1kaW9fd3JpdGUobnAsIG5wLT5wb3J0LCBOSVVfRVNSMl9ERVZfQUREUiwKIAkJCSBFU1IyX1RJX1BMTF9DRkdfTCwgcGxsX2NmZyAmIDB4ZmZmZik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiTklVIFBvcnQgJWQgIgotCQkJInNlcmRlc19pbml0X25pdV8xMGdfc2VyZGVzOiAiCi0JCQkibWRpbyB3cml0ZSB0byBFU1IyX1RJX1BMTF9DRkdfTCBmYWlsZWQiLCBucC0+cG9ydCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIk5JVSBQb3J0ICVkICVzKCkgbWRpbyB3cml0ZSB0byBFU1IyX1RJX1BMTF9DRkdfTCBmYWlsZWRcbiIsCisJCQkgICBucC0+cG9ydCwgX19mdW5jX18pOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTgwLDkgKzU2MCw4IEBACiAJZXJyID0gbWRpb193cml0ZShucCwgbnAtPnBvcnQsIE5JVV9FU1IyX0RFVl9BRERSLAogCQkJIEVTUjJfVElfUExMX1NUU19MLCBwbGxfc3RzICYgMHhmZmZmKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJOSVUgUG9ydCAlZCAiCi0JCQkic2VyZGVzX2luaXRfbml1XzEwZ19zZXJkZXM6ICIKLQkJCSJtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX1NUU19MIGZhaWxlZCIsIG5wLT5wb3J0KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiTklVIFBvcnQgJWQgJXMoKSBtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX1NUU19MIGZhaWxlZFxuIiwKKwkJCSAgIG5wLT5wb3J0LCBfX2Z1bmNfXyk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC02MzksOSArNjE4LDggQEAKIAl9CiAKIAlpZiAoKHNpZyAmIG1hc2spICE9IHZhbCkgewotCQlwcl9pbmZvKFBGWCAiTklVIFBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgIgotCQkJIlslMDh4XSBmb3IgMTBHLi4udHJ5aW5nIDFHXG4iLAotCQkJbnAtPnBvcnQsIChpbnQpIChzaWcgJiBtYXNrKSwgKGludCkgdmFsKTsKKwkJcHJfaW5mbygiTklVIFBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgWyUwOHhdIGZvciAxMEcuLi50cnlpbmcgMUdcbiIsCisJCQlucC0+cG9ydCwgKGludCkoc2lnICYgbWFzayksIChpbnQpdmFsKTsKIAogCQkvKiAxMEcgZmFpbGVkLCB0cnkgaW5pdGlhbGl6aW5nIGF0IDFHICovCiAJCWVyciA9IHNlcmRlc19pbml0X25pdV8xZ19zZXJkZXMobnApOwpAQCAtNjQ5LDggKzYyNyw4IEBACiAJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU18xMEc7CiAJCQlucC0+bWFjX3hjdnIgPSBNQUNfWENWUl9QQ1M7CiAJCX0gIGVsc2UgewotCQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgMTBHLzFHIFNFUkRFUyAiCi0JCQkJIkxpbmsgRmFpbGVkIFxuIiwgbnAtPnBvcnQpOworCQkJbmV0ZGV2X2VycihucC0+ZGV2LCAiUG9ydCAldSAxMEcvMUcgU0VSREVTIExpbmsgRmFpbGVkXG4iLAorCQkJCSAgIG5wLT5wb3J0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNzY0LDkgKzc0Miw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAocmVzZXQgIT0gMCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBFU1JfUkVTRVQgIgotCQkJImRpZCBub3QgY2xlYXIgWyUwOHhdXG4iLAotCQkJbnAtPnBvcnQsIHJlc2V0KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiUG9ydCAldSBFU1JfUkVTRVQgZGlkIG5vdCBjbGVhciBbJTA4eF1cbiIsCisJCQkgICBucC0+cG9ydCwgcmVzZXQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTg5MCw4ICs4NjcsOCBAQAogCQkJbnAtPmZsYWdzICY9IH5OSVVfRkxBR1NfSE9UUExVR19QSFlfUFJFU0VOVDsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90ICIKLQkJCSJbJTA4eF1cbiIsIG5wLT5wb3J0LCAoaW50KSAoc2lnICYgbWFzayksIChpbnQpIHZhbCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgWyUwOHhdXG4iLAorCQkJICAgbnAtPnBvcnQsIChpbnQpKHNpZyAmIG1hc2spLCAoaW50KXZhbCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAobnAtPmZsYWdzICYgTklVX0ZMQUdTX0hPVFBMVUdfUEhZKQpAQCAtMTAzOSw4ICsxMDE2LDggQEAKIAl9CiAKIAlpZiAoKHNpZyAmIG1hc2spICE9IHZhbCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBzaWduYWwgYml0cyBbJTA4eF0gYXJlIG5vdCAiCi0JCQkiWyUwOHhdXG4iLCBucC0+cG9ydCwgKGludCkgKHNpZyAmIG1hc2spLCAoaW50KSB2YWwpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90IFslMDh4XVxuIiwKKwkJCSAgIG5wLT5wb3J0LCAoaW50KShzaWcgJiBtYXNrKSwgKGludCl2YWwpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEzMzIsOCArMTMwOSw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGxpbWl0IDwgMCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBQSFkgd2lsbCBub3QgcmVzZXQgIgotCQkJIihibWNyPSUwNHgpXG4iLCBucC0+cG9ydCwgKGVyciAmIDB4ZmZmZikpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IFBIWSB3aWxsIG5vdCByZXNldCAoYm1jcj0lMDR4KVxuIiwKKwkJCSAgIG5wLT5wb3J0LCAoZXJyICYgMHhmZmZmKSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE1MTUsMjEgKzE0OTIsMTggQEAKIAkJCU1JSV9TVEFUMTAwMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JcHJfaW5mbyhQRlggIlBvcnQgJXUgUE1BX1BNRChNSUlfU1RBVDEwMDApIFslMDR4XVxuIiwKLQkJbnAtPnBvcnQsIGVycik7CisJcHJfaW5mbygiUG9ydCAldSBQTUFfUE1EKE1JSV9TVEFUMTAwMCkgWyUwNHhdXG4iLCBucC0+cG9ydCwgZXJyKTsKIAogCWVyciA9IG1kaW9fcmVhZChucCwgbnAtPnBoeV9hZGRyLCBCQ004NzA0X1VTRVJfREVWM19BRERSLCAweDIwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlwcl9pbmZvKFBGWCAiUG9ydCAldSBVU0VSX0RFVjMoMHgyMCkgWyUwNHhdXG4iLAotCQlucC0+cG9ydCwgZXJyKTsKKwlwcl9pbmZvKCJQb3J0ICV1IFVTRVJfREVWMygweDIwKSBbJTA0eF1cbiIsIG5wLT5wb3J0LCBlcnIpOwogCiAJZXJyID0gbWRpb19yZWFkKG5wLCBucC0+cGh5X2FkZHIsIEJDTTg3MDRfUEhZWFNfREVWX0FERFIsCiAJCQlNSUlfTldBWVRFU1QpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCXByX2luZm8oUEZYICJQb3J0ICV1IFBIWVhTKE1JSV9OV0FZVEVTVCkgWyUwNHhdXG4iLAotCQlucC0+cG9ydCwgZXJyKTsKKwlwcl9pbmZvKCJQb3J0ICV1IFBIWVhTKE1JSV9OV0FZVEVTVCkgWyUwNHhdXG4iLCBucC0+cG9ydCwgZXJyKTsKICNlbmRpZgogCiAJLyogWFhYIGRpZyB0aGlzIG91dCBpdCBtaWdodCBub3QgYmUgc28gdXNlZnVsIFhYWCAqLwpAQCAtMTU1NSwxMSArMTUyOSwxMSBAQAogCiAJaWYgKGFuYWxvZ19zdGF0MCAhPSAweDAzZmMpIHsKIAkJaWYgKChhbmFsb2dfc3RhdDAgPT0gMHg0M2JjKSAmJiAodHhfYWxhcm1fc3RhdHVzICE9IDApKSB7Ci0JCQlwcl9pbmZvKFBGWCAiUG9ydCAldSBjYWJsZSBub3QgY29ubmVjdGVkICIKLQkJCQkib3IgYmFkIGNhYmxlLlxuIiwgbnAtPnBvcnQpOworCQkJcHJfaW5mbygiUG9ydCAldSBjYWJsZSBub3QgY29ubmVjdGVkIG9yIGJhZCBjYWJsZVxuIiwKKwkJCQlucC0+cG9ydCk7CiAJCX0gZWxzZSBpZiAoYW5hbG9nX3N0YXQwID09IDB4NjM5YykgewotCQkJcHJfaW5mbyhQRlggIlBvcnQgJXUgb3B0aWNhbCBtb2R1bGUgaXMgYmFkICIKLQkJCQkib3IgbWlzc2luZy5cbiIsIG5wLT5wb3J0KTsKKwkJCXByX2luZm8oIlBvcnQgJXUgb3B0aWNhbCBtb2R1bGUgaXMgYmFkIG9yIG1pc3NpbmdcbiIsCisJCQkJbnAtPnBvcnQpOwogCQl9CiAJfQogCkBAIC0xNjk5LDggKzE2NzMsOCBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChsaW1pdCA8IDApIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgTUlJIHdvdWxkIG5vdCByZXNldCwgIgotCQkJImJtY3JbJTA0eF1cbiIsIG5wLT5wb3J0LCBlcnIpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IE1JSSB3b3VsZCBub3QgcmVzZXQsIGJtY3JbJTA0eF1cbiIsCisJCQkgICBucC0+cG9ydCwgZXJyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xODk1LDcgKzE4NjksNyBAQAogCQlyZXR1cm4gZXJyOwogCWJtc3IgPSBlcnI7CiAKLQlwcl9pbmZvKFBGWCAiUG9ydCAldSBhZnRlciBNSUkgaW5pdCBibWNyWyUwNHhdIGJtc3JbJTA0eF1cbiIsCisJcHJfaW5mbygiUG9ydCAldSBhZnRlciBNSUkgaW5pdCBibWNyWyUwNHhdIGJtc3JbJTA0eF1cbiIsCiAJCW5wLT5wb3J0LCBibWNyLCBibXNyKTsKICNlbmRpZgogCkBAIC0xOTQ4LDE2ICsxOTIyLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpICYmIGxpbmtfdXApIHsKLQkJbml1aW5mbyhMSU5LLCAiJXM6IExpbmsgaXMgdXAgYXQgJXMsICVzIGR1cGxleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAwID8KLQkJCSIxMEdiL3NlYyIgOgotCQkJKGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCA/Ci0JCQkgIjFHYi9zZWMiIDoKLQkJCSAobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgPwotCQkJICAiMTAwTWJpdC9zZWMiIDogIjEwTWJpdC9zZWMiKSkpLAotCQkgICAgICAgKGxwLT5hY3RpdmVfZHVwbGV4ID09IERVUExFWF9GVUxMID8KLQkJCSJmdWxsIiA6ICJoYWxmIikpOworCQluZXRpZl9pbmZvKG5wLCBsaW5rLCBkZXYsICJMaW5rIGlzIHVwIGF0ICVzLCAlcyBkdXBsZXhcbiIsCisJCQkgICBscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAwID8gIjEwR2Ivc2VjIiA6CisJCQkgICBscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAgPyAiMUdiL3NlYyIgOgorCQkJICAgbHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgPyAiMTAwTWJpdC9zZWMiIDoKKwkJCSAgICIxME1iaXQvc2VjIiwKKwkJCSAgIGxwLT5hY3RpdmVfZHVwbGV4ID09IERVUExFWF9GVUxMID8gImZ1bGwiIDogImhhbGYiKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJbml1X2luaXRfeGlmKG5wKTsKQEAgLTE5NjYsNyArMTkzNiw3IEBACiAKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCX0gZWxzZSBpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpICYmICFsaW5rX3VwKSB7Ci0JCW5pdXdhcm4oTElOSywgIiVzOiBMaW5rIGlzIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX3dhcm4obnAsIGxpbmssIGRldiwgIkxpbmsgaXMgZG93blxuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwogCQluaXVfaGFuZGxlX2xlZChucCwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CkBAIC0yMjMyLDggKzIyMDIsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU19IT1RQTFVHX1BIWV9QUkVTRU5UOwogCQkJCSpsaW5rX3VwX3AgPSAwOwotCQkJCW5pdXdhcm4oTElOSywgIiVzOiBIb3RwbHVnIFBIWSBSZW1vdmVkXG4iLAotCQkJCQlucC0+ZGV2LT5uYW1lKTsKKwkJCQluZXRpZl93YXJuKG5wLCBsaW5rLCBucC0+ZGV2LAorCQkJCQkgICAiSG90cGx1ZyBQSFkgUmVtb3ZlZFxuIik7CiAJCQl9CiAJCX0KIG91dDoKQEAgLTI1MzEsOCArMjUwMSw4IEBACiAJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU18xMEc7CiAJCQlucC0+bWFjX3hjdnIgPSBNQUNfWENWUl9QQ1M7CiAJCX0gIGVsc2UgewotCQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgMTBHLzFHIFNFUkRFUyBMaW5rIEZhaWxlZCBcbiIsCi0JCQkgbnAtPnBvcnQpOworCQkJbmV0ZGV2X2VycihucC0+ZGV2LCAiUG9ydCAldSAxMEcvMUcgU0VSREVTIExpbmsgRmFpbGVkXG4iLAorCQkJCSAgIG5wLT5wb3J0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtMzIzNCwyMyArMzIwNCwyMiBAQAogCXBhcmVudCA9IG5wLT5wYXJlbnQ7CiAJZXJyID0gMDsKIAlpZiAoIShwYXJlbnQtPmZsYWdzICYgUEFSRU5UX0ZMR1NfQ0xTX0hXSU5JVCkpIHsKLQkJbml1ZGJnKFBST0JFLCAiZmZscF9lYXJseV9pbml0OiBJbml0dGluZyBodyBvbiBwb3J0ICV1XG4iLAotCQkgICAgICAgbnAtPnBvcnQpOwogCQlpZiAobnAtPnBhcmVudC0+cGxhdF90eXBlICE9IFBMQVRfVFlQRV9OSVUpIHsKIAkJCWZmbHBfcmVzZXQobnApOwogCQkJZmZscF9zZXRfdGltaW5ncyhucCk7CiAJCQllcnIgPSBmZmxwX2Rpc2FibGVfYWxsX3BhcnRpdGlvbnMobnApOwogCQkJaWYgKGVycikgewotCQkJCW5pdWRiZyhQUk9CRSwgImZmbHBfZGlzYWJsZV9hbGxfcGFydGl0aW9ucyAiCi0JCQkJICAgICAgICJmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKKwkJCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJCQkgICAgICJmZmxwX2Rpc2FibGVfYWxsX3BhcnRpdGlvbnMgZmFpbGVkLCBlcnI9JWRcbiIsCisJCQkJCSAgICAgZXJyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCiAJCWVyciA9IHRjYW1fZWFybHlfaW5pdChucCk7CiAJCWlmIChlcnIpIHsKLQkJCW5pdWRiZyhQUk9CRSwgInRjYW1fZWFybHlfaW5pdCBmYWlsZWQsIGVycj0lZFxuIiwKLQkJCSAgICAgICBlcnIpOworCQkJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJCQkgICAgICJ0Y2FtX2Vhcmx5X2luaXQgZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlmZmxwX2xsY3NuYXBfZW5hYmxlKG5wLCAxKTsKQEAgLTMyNjAsMjIgKzMyMjksMjIgQEAKIAogCQllcnIgPSB0Y2FtX2ZsdXNoX2FsbChucCk7CiAJCWlmIChlcnIpIHsKLQkJCW5pdWRiZyhQUk9CRSwgInRjYW1fZmx1c2hfYWxsIGZhaWxlZCwgZXJyPSVkXG4iLAotCQkJICAgICAgIGVycik7CisJCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJCSAgICAgInRjYW1fZmx1c2hfYWxsIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKG5wLT5wYXJlbnQtPnBsYXRfdHlwZSAhPSBQTEFUX1RZUEVfTklVKSB7CiAJCQllcnIgPSBmZmxwX2hhc2hfY2xlYXIobnApOwogCQkJaWYgKGVycikgewotCQkJCW5pdWRiZyhQUk9CRSwgImZmbHBfaGFzaF9jbGVhciBmYWlsZWQsICIKLQkJCQkgICAgICAgImVycj0lZFxuIiwgZXJyKTsKKwkJCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJCQkgICAgICJmZmxwX2hhc2hfY2xlYXIgZmFpbGVkLCBlcnI9JWRcbiIsCisJCQkJCSAgICAgZXJyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCiAJCXZsYW5fdGJsX2NsZWFyKG5wKTsKIAotCQluaXVkYmcoUFJPQkUsICJmZmxwX2Vhcmx5X2luaXQ6IFN1Y2Nlc3NcbiIpOwogCQlwYXJlbnQtPmZsYWdzIHw9IFBBUkVOVF9GTEdTX0NMU19IV0lOSVQ7CiAJfQogb3V0OgpAQCAtMzY2NSw4ICszNjM0LDggQEAKIAogCWNvbnMgPSBycC0+Y29uczsKIAotCW5pdWRiZyhUWF9ET05FLCAiJXM6IG5pdV90eF93b3JrKCkgcGt0X2NudFsldV0gY29uc1slZF1cbiIsCi0JICAgICAgIG5wLT5kZXYtPm5hbWUsIHBrdF9jbnQsIGNvbnMpOworCW5ldGlmX3ByaW50ayhucCwgdHhfZG9uZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiJXMoKSBwa3RfY250WyV1XSBjb25zWyVkXVxuIiwgX19mdW5jX18sIHBrdF9jbnQsIGNvbnMpOwogCiAJd2hpbGUgKHBrdF9jbnQtLSkKIAkJY29ucyA9IHJlbGVhc2VfdHhfcGFja2V0KG5wLCBycCwgY29ucyk7CkBAIC0zNzE0LDExICszNjgzLDEyIEBACiAJCXJwLT5yeF9lcnJvcnMgKz0gbWlzYyAmIFJYTUlTQ19DT1VOVDsKIAogCQlpZiAodW5saWtlbHkobWlzYyAmIFJYTUlTQ19PRkxPVykpCi0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJyeC0lZDogQ291bnRlciBvdmVyZmxvdyAiCi0JCQkJIlJYTUlTQyBkaXNjYXJkXG4iLCByeF9jaGFubmVsKTsKKwkJCWRldl9lcnIobnAtPmRldmljZSwgInJ4LSVkOiBDb3VudGVyIG92ZXJmbG93IFJYTUlTQyBkaXNjYXJkXG4iLAorCQkJCXJ4X2NoYW5uZWwpOwogCi0JCW5pdWRiZyhSWF9FUlIsICIlcy1yeC0lZDogTUlTQyBkcm9wPSV1IG92ZXI9JXVcbiIsCi0JCSAgICAgICBucC0+ZGV2LT5uYW1lLCByeF9jaGFubmVsLCBtaXNjLCBtaXNjLWxpbWl0KTsKKwkJbmV0aWZfcHJpbnRrKG5wLCByeF9lcnIsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkgICAgICJyeC0lZDogTUlTQyBkcm9wPSV1IG92ZXI9JXVcbiIsCisJCQkgICAgIHJ4X2NoYW5uZWwsIG1pc2MsIG1pc2MtbGltaXQpOwogCX0KIAogCS8qIFdSRUQgKFdlaWdodGVkIFJhbmRvbSBFYXJseSBEaXNjYXJkKSBieSBoYXJkd2FyZSAqLwpAQCAtMzcyOCwxMSArMzY5OCwxMSBAQAogCQlycC0+cnhfZHJvcHBlZCArPSB3cmVkICYgUkVEX0RJU19DTlRfQ09VTlQ7CiAKIAkJaWYgKHVubGlrZWx5KHdyZWQgJiBSRURfRElTX0NOVF9PRkxPVykpCi0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJyeC0lZDogQ291bnRlciBvdmVyZmxvdyAiCi0JCQkJIldSRUQgZGlzY2FyZFxuIiwgcnhfY2hhbm5lbCk7CisJCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJyeC0lZDogQ291bnRlciBvdmVyZmxvdyBXUkVEIGRpc2NhcmRcbiIsIHJ4X2NoYW5uZWwpOwogCi0JCW5pdWRiZyhSWF9FUlIsICIlcy1yeC0lZDogV1JFRCBkcm9wPSV1IG92ZXI9JXVcbiIsCi0JCSAgICAgICBucC0+ZGV2LT5uYW1lLCByeF9jaGFubmVsLCB3cmVkLCB3cmVkLWxpbWl0KTsKKwkJbmV0aWZfcHJpbnRrKG5wLCByeF9lcnIsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkgICAgICJyeC0lZDogV1JFRCBkcm9wPSV1IG92ZXI9JXVcbiIsCisJCQkgICAgIHJ4X2NoYW5uZWwsIHdyZWQsIHdyZWQtbGltaXQpOwogCX0KIH0KIApAQCAtMzc1Myw4ICszNzIzLDkgQEAKIAltYm94LT5yeF9kbWFfY3RsX3N0YXQgPSAwOwogCW1ib3gtPnJjcnN0YXRfYSA9IDA7CiAKLQluaXVkYmcoUlhfU1RBVFVTLCAiJXM6IG5pdV9yeF93b3JrKGNoYW5bJWRdKSwgc3RhdFslbGx4XSBxbGVuPSVkXG4iLAotCSAgICAgICBucC0+ZGV2LT5uYW1lLCBycC0+cnhfY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdCwgcWxlbik7CisJbmV0aWZfcHJpbnRrKG5wLCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIiVzKGNoYW5bJWRdKSwgc3RhdFslbGx4XSBxbGVuPSVkXG4iLAorCQkgICAgIF9fZnVuY19fLCBycC0+cnhfY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGF0LCBxbGVuKTsKIAogCXJjcl9kb25lID0gd29ya19kb25lID0gMDsKIAlxbGVuID0gbWluKHFsZW4sIGJ1ZGdldCk7CkBAIC0zNzkxLDggKzM3NjIsOCBAQAogCXUzMiByeF92ZWMgPSAodjAgJiAweGZmZmZmZmZmKTsKIAlpbnQgaSwgd29ya19kb25lID0gMDsKIAotCW5pdWRiZyhJTlRSLCAiJXM6IG5pdV9wb2xsX2NvcmUoKSB2MFslMDE2bGx4XVxuIiwKLQkgICAgICAgbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdjApOworCW5ldGlmX3ByaW50ayhucCwgaW50ciwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiJXMoKSB2MFslMDE2bGx4XVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpdjApOwogCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CkBAIC0zODM3LDM5ICszODA4LDM4IEBACiBzdGF0aWMgdm9pZCBuaXVfbG9nX3J4Y2hhbl9lcnJvcnMoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJwLAogCQkJCSAgdTY0IHN0YXQpCiB7Ci0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBSWCBjaGFubmVsICV1IGVycm9ycyAoICIsCi0JCW5wLT5kZXYtPm5hbWUsIHJwLT5yeF9jaGFubmVsKTsKKwluZXRkZXZfZXJyKG5wLT5kZXYsICJSWCBjaGFubmVsICV1IGVycm9ycyAoICIsIHJwLT5yeF9jaGFubmVsKTsKIAogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JCUl9UTU9VVCkKLQkJcHJpbnRrKCJSQlJfVE1PVVQgIik7CisJCXByX2NvbnQoIlJCUl9UTU9VVCAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9SU1BfQ05UX0VSUikKLQkJcHJpbnRrKCJSU1BfQ05UICIpOworCQlwcl9jb250KCJSU1BfQ05UICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX0JZVEVfRU5fQlVTKQotCQlwcmludGsoIkJZVEVfRU5fQlVTICIpOworCQlwcl9jb250KCJCWVRFX0VOX0JVUyAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9SU1BfREFUX0VSUikKLQkJcHJpbnRrKCJSU1BfREFUICIpOworCQlwcl9jb250KCJSU1BfREFUICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JDUl9BQ0tfRVJSKQotCQlwcmludGsoIlJDUl9BQ0sgIik7CisJCXByX2NvbnQoIlJDUl9BQ0sgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkNSX1NIQV9QQVIpCi0JCXByaW50aygiUkNSX1NIQV9QQVIgIik7CisJCXByX2NvbnQoIlJDUl9TSEFfUEFSICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JCUl9QUkVfUEFSKQotCQlwcmludGsoIlJCUl9QUkVfUEFSICIpOworCQlwcl9jb250KCJSQlJfUFJFX1BBUiAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9DT05GSUdfRVJSKQotCQlwcmludGsoIkNPTkZJRyAiKTsKKwkJcHJfY29udCgiQ09ORklHICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JDUklOQ09OKQotCQlwcmludGsoIlJDUklOQ09OICIpOworCQlwcl9jb250KCJSQ1JJTkNPTiAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9SQ1JGVUxMKQotCQlwcmludGsoIlJDUkZVTEwgIik7CisJCXByX2NvbnQoIlJDUkZVTEwgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkJSRlVMTCkKLQkJcHJpbnRrKCJSQlJGVUxMICIpOworCQlwcl9jb250KCJSQlJGVUxMICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JCUkxPR1BBR0UpCi0JCXByaW50aygiUkJSTE9HUEFHRSAiKTsKKwkJcHJfY29udCgiUkJSTE9HUEFHRSAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9DRklHTE9HUEFHRSkKLQkJcHJpbnRrKCJDRklHTE9HUEFHRSAiKTsKKwkJcHJfY29udCgiQ0ZJR0xPR1BBR0UgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfRENfRklGT19FUlIpCi0JCXByaW50aygiRENfRklETyAiKTsKKwkJcHJfY29udCgiRENfRklETyAiKTsKIAotCXByaW50aygiKVxuIik7CisJcHJfY29udCgiKVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgbml1X3J4X2Vycm9yKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCkKQEAgLTM4ODMsOSArMzg1Myw5IEBACiAJCWVyciA9IC1FSU5WQUw7CiAKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogUlggY2hhbm5lbCAldSBlcnJvciwgc3RhdFslbGx4XVxuIiwKLQkJCW5wLT5kZXYtPm5hbWUsIHJwLT5yeF9jaGFubmVsLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlJYIGNoYW5uZWwgJXUgZXJyb3IsIHN0YXRbJWxseF1cbiIsCisJCQkgICBycC0+cnhfY2hhbm5lbCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXQpOwogCiAJCW5pdV9sb2dfcnhjaGFuX2Vycm9ycyhucCwgcnAsIHN0YXQpOwogCX0KQEAgLTM4OTksMjcgKzM4NjksMjYgQEAKIHN0YXRpYyB2b2lkIG5pdV9sb2dfdHhjaGFuX2Vycm9ycyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAsCiAJCQkJICB1NjQgY3MpCiB7Ci0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBUWCBjaGFubmVsICV1IGVycm9ycyAoICIsCi0JCW5wLT5kZXYtPm5hbWUsIHJwLT50eF9jaGFubmVsKTsKKwluZXRkZXZfZXJyKG5wLT5kZXYsICJUWCBjaGFubmVsICV1IGVycm9ycyAoICIsIHJwLT50eF9jaGFubmVsKTsKIAogCWlmIChjcyAmIFRYX0NTX01CT1hfRVJSKQotCQlwcmludGsoIk1CT1ggIik7CisJCXByX2NvbnQoIk1CT1ggIik7CiAJaWYgKGNzICYgVFhfQ1NfUEtUX1NJWkVfRVJSKQotCQlwcmludGsoIlBLVF9TSVpFICIpOworCQlwcl9jb250KCJQS1RfU0laRSAiKTsKIAlpZiAoY3MgJiBUWF9DU19UWF9SSU5HX09GTE9XKQotCQlwcmludGsoIlRYX1JJTkdfT0ZMT1cgIik7CisJCXByX2NvbnQoIlRYX1JJTkdfT0ZMT1cgIik7CiAJaWYgKGNzICYgVFhfQ1NfUFJFRl9CVUZfUEFSX0VSUikKLQkJcHJpbnRrKCJQUkVGX0JVRl9QQVIgIik7CisJCXByX2NvbnQoIlBSRUZfQlVGX1BBUiAiKTsKIAlpZiAoY3MgJiBUWF9DU19OQUNLX1BSRUYpCi0JCXByaW50aygiTkFDS19QUkVGICIpOworCQlwcl9jb250KCJOQUNLX1BSRUYgIik7CiAJaWYgKGNzICYgVFhfQ1NfTkFDS19QS1RfUkQpCi0JCXByaW50aygiTkFDS19QS1RfUkQgIik7CisJCXByX2NvbnQoIk5BQ0tfUEtUX1JEICIpOwogCWlmIChjcyAmIFRYX0NTX0NPTkZfUEFSVF9FUlIpCi0JCXByaW50aygiQ09ORl9QQVJUICIpOworCQlwcl9jb250KCJDT05GX1BBUlQgIik7CiAJaWYgKGNzICYgVFhfQ1NfUEtUX1BSVF9FUlIpCi0JCXByaW50aygiUEtUX1BUUiAiKTsKKwkJcHJfY29udCgiUEtUX1BUUiAiKTsKIAotCXByaW50aygiKVxuIik7CisJcHJfY29udCgiKVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgbml1X3R4X2Vycm9yKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCkKQEAgLTM5MzAsMTIgKzM4OTksMTEgQEAKIAlsb2doID0gbnI2NChUWF9STkdfRVJSX0xPR0gocnAtPnR4X2NoYW5uZWwpKTsKIAlsb2dsID0gbnI2NChUWF9STkdfRVJSX0xPR0wocnAtPnR4X2NoYW5uZWwpKTsKIAotCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogVFggY2hhbm5lbCAldSBlcnJvciwgIgotCQkiY3NbJWxseF0gbG9naFslbGx4XSBsb2dsWyVsbHhdXG4iLAotCQlucC0+ZGV2LT5uYW1lLCBycC0+dHhfY2hhbm5lbCwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY3MsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ2gsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ2wpOworCW5ldGRldl9lcnIobnAtPmRldiwgIlRYIGNoYW5uZWwgJXUgZXJyb3IsIGNzWyVsbHhdIGxvZ2hbJWxseF0gbG9nbFslbGx4XVxuIiwKKwkJICAgcnAtPnR4X2NoYW5uZWwsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpY3MsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbG9naCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsb2dsKTsKIAogCW5pdV9sb2dfdHhjaGFuX2Vycm9ycyhucCwgcnAsIGNzKTsKIApAQCAtMzk1NCw5ICszOTIyLDggQEAKIAkJCXBoeV9tZGludCA9IDE7CiAJfQogCi0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBNSUYgaW50ZXJydXB0LCAiCi0JCSJzdGF0WyVsbHhdIHBoeV9tZGludCglZClcbiIsCi0JCW5wLT5kZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIG1pZl9zdGF0dXMsIHBoeV9tZGludCk7CisJbmV0ZGV2X2VycihucC0+ZGV2LCAiTUlGIGludGVycnVwdCwgc3RhdFslbGx4XSBwaHlfbWRpbnQoJWQpXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW1pZl9zdGF0dXMsIHBoeV9tZGludCk7CiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTQwODEsNDEgKzQwNDgsNDAgQEAKIAogc3RhdGljIHZvaWQgbml1X2xvZ19kZXZpY2VfZXJyb3Ioc3RydWN0IG5pdSAqbnAsIHU2NCBzdGF0KQogewotCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogQ29yZSBkZXZpY2UgZXJyb3JzICggIiwKLQkJbnAtPmRldi0+bmFtZSk7CisJbmV0ZGV2X2VycihucC0+ZGV2LCAiQ29yZSBkZXZpY2UgZXJyb3JzICggIik7CiAKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19NRVRBMikKLQkJcHJpbnRrKCJNRVRBMiAiKTsKKwkJcHJfY29udCgiTUVUQTIgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfTUVUQTEpCi0JCXByaW50aygiTUVUQTEgIik7CisJCXByX2NvbnQoIk1FVEExICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX1BFVSkKLQkJcHJpbnRrKCJQRVUgIik7CisJCXByX2NvbnQoIlBFVSAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19UWEMpCi0JCXByaW50aygiVFhDICIpOworCQlwcl9jb250KCJUWEMgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfUkRNQykKLQkJcHJpbnRrKCJSRE1DICIpOworCQlwcl9jb250KCJSRE1DICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX1RETUMpCi0JCXByaW50aygiVERNQyAiKTsKKwkJcHJfY29udCgiVERNQyAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19aQ1ApCi0JCXByaW50aygiWkNQICIpOworCQlwcl9jb250KCJaQ1AgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfRkZMUCkKLQkJcHJpbnRrKCJGRkxQICIpOworCQlwcl9jb250KCJGRkxQICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX0lQUCkKLQkJcHJpbnRrKCJJUFAgIik7CisJCXByX2NvbnQoIklQUCAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19NQUMpCi0JCXByaW50aygiTUFDICIpOworCQlwcl9jb250KCJNQUMgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfU01YKQotCQlwcmludGsoIlNNWCAiKTsKKwkJcHJfY29udCgiU01YICIpOwogCi0JcHJpbnRrKCIpXG4iKTsKKwlwcl9jb250KCIpXG4iKTsKIH0KIAogc3RhdGljIGludCBuaXVfZGV2aWNlX2Vycm9yKHN0cnVjdCBuaXUgKm5wKQogewogCXU2NCBzdGF0ID0gbnI2NChTWVNfRVJSX1NUQVQpOwogCi0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb3JlIGRldmljZSBlcnJvciwgc3RhdFslbGx4XVxuIiwKLQkJbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdCk7CisJbmV0ZGV2X2VycihucC0+ZGV2LCAiQ29yZSBkZXZpY2UgZXJyb3IsIHN0YXRbJWxseF1cbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhdCk7CiAKIAluaXVfbG9nX2RldmljZV9lcnJvcihucCwgc3RhdCk7CiAKQEAgLTQxOTcsOCArNDE2Myw4IEBACiAJCSAgICAgIFJYX0RNQV9DVExfU1RBVF9SQ1JUTyk7CiAJbnc2NChSWF9ETUFfQ1RMX1NUQVQocnAtPnJ4X2NoYW5uZWwpLCBzdGF0X3dyaXRlKTsKIAotCW5pdWRiZyhJTlRSLCAiJXM6IHJ4Y2hhbl9pbnRyIHN0YXRbJWxseF1cbiIsCi0JICAgICAgIG5wLT5kZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXQpOworCW5ldGlmX3ByaW50ayhucCwgaW50ciwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiJXMoKSBzdGF0WyVsbHhdXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGF0KTsKIH0KIAogc3RhdGljIHZvaWQgbml1X3R4Y2hhbl9pbnRyKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCwKQEAgLTQyMDYsOCArNDE3Miw4IEBACiB7CiAJcnAtPnR4X2NzID0gbnI2NChUWF9DUyhycC0+dHhfY2hhbm5lbCkpOwogCi0Jbml1ZGJnKElOVFIsICIlczogdHhjaGFuX2ludHIgY3NbJWxseF1cbiIsCi0JICAgICAgIG5wLT5kZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIHJwLT50eF9jcyk7CisJbmV0aWZfcHJpbnRrKG5wLCBpbnRyLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICIlcygpIGNzWyVsbHhdXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZylycC0+dHhfY3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX25pdV9mYXN0cGF0aF9pbnRlcnJ1cHQoc3RydWN0IG5pdSAqbnAsIGludCBsZGcsIHU2NCB2MCkKQEAgLTQyNjUsOCArNDIzMSw4IEBACiAJdTY0IHYwLCB2MSwgdjI7CiAKIAlpZiAobmV0aWZfbXNnX2ludHIobnApKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIm5pdV9pbnRlcnJ1cHQoKSBsZGdbJXBdKCVkKSAiLAotCQkgICAgICAgbHAsIGxkZyk7CisJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6ICIgIiVzKCkgbGRnWyVwXSglZCkiLAorCQkgICAgICAgX19mdW5jX18sIGxwLCBsZGcpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKQEAgLTQyNzUsNyArNDI0MSw3IEBACiAJdjIgPSBucjY0KExEU1YyKGxkZykpOwogCiAJaWYgKG5ldGlmX21zZ19pbnRyKG5wKSkKLQkJcHJpbnRrKCJ2MFslbGx4XSB2MVslbGx4XSB2MlslbGx4XVxuIiwKKwkJcHJfY29udCgiIHYwWyVsbHhdIHYxWyVsbHhdIHYyWyVsbHhdXG4iLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdjAsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2MSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHYyKTsKQEAgLTQ0MDAsOCArNDM2Niw4IEBACiAJaWYgKCFycC0+bWJveCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKCh1bnNpZ25lZCBsb25nKXJwLT5tYm94ICYgKDY0VUwgLSAxKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IENvaGVyZW50IGFsbG9jIGdpdmVzIG1pc2FsaWduZWQgIgotCQkJIlJYRE1BIG1haWxib3ggJXBcbiIsIG5wLT5kZXYtPm5hbWUsIHJwLT5tYm94KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCBSWERNQSBtYWlsYm94ICVwXG4iLAorCQkJICAgcnAtPm1ib3gpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ0MTEsOCArNDM3Nyw4IEBACiAJaWYgKCFycC0+cmNyKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpcnAtPnJjciAmICg2NFVMIC0gMSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkICIKLQkJCSJSWERNQSBSQ1IgdGFibGUgJXBcbiIsIG5wLT5kZXYtPm5hbWUsIHJwLT5yY3IpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkIFJYRE1BIFJDUiB0YWJsZSAlcFxuIiwKKwkJCSAgIHJwLT5yY3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcnAtPnJjcl90YWJsZV9zaXplID0gTUFYX1JDUl9SSU5HX1NJWkU7CkBAIC00NDI0LDggKzQzOTAsOCBAQAogCWlmICghcnAtPnJicikKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKCh1bnNpZ25lZCBsb25nKXJwLT5yYnIgJiAoNjRVTCAtIDEpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCAiCi0JCQkiUlhETUEgUkJSIHRhYmxlICVwXG4iLCBucC0+ZGV2LT5uYW1lLCBycC0+cmJyKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCBSWERNQSBSQlIgdGFibGUgJXBcbiIsCisJCQkgICBycC0+cmJyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJwLT5yYnJfdGFibGVfc2l6ZSA9IE1BWF9SQlJfUklOR19TSVpFOwpAQCAtNDQ1OCw4ICs0NDI0LDggQEAKIAlpZiAoIXJwLT5tYm94KQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpcnAtPm1ib3ggJiAoNjRVTCAtIDEpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCAiCi0JCQkiVFhETUEgbWFpbGJveCAlcFxuIiwgbnAtPmRldi0+bmFtZSwgcnAtPm1ib3gpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkIFRYRE1BIG1haWxib3ggJXBcbiIsCisJCQkgICBycC0+bWJveCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDQ2OSw4ICs0NDM1LDggQEAKIAlpZiAoIXJwLT5kZXNjcikKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKCh1bnNpZ25lZCBsb25nKXJwLT5kZXNjciAmICg2NFVMIC0gMSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkICIKLQkJCSJUWERNQSBkZXNjciB0YWJsZSAlcFxuIiwgbnAtPmRldi0+bmFtZSwgcnAtPmRlc2NyKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCBUWERNQSBkZXNjciB0YWJsZSAlcFxuIiwKKwkJCSAgIHJwLT5kZXNjcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDcyNiwxMCArNDY5Miw4IEBACiAKIAlpZiAocnAtPmRlc2NyX2RtYSAmIH4oVFhfUk5HX0NGSUdfU1RBRERSX0JBU0UgfAogCQkJICAgICAgVFhfUk5HX0NGSUdfU1RBRERSKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFRYIHJpbmcgY2hhbm5lbCAlZCAiCi0JCQkiRE1BIGFkZHIgKCVsbHgpIGlzIG5vdCBhbGlnbmVkLlxuIiwKLQkJCW5wLT5kZXYtPm5hbWUsIGNoYW5uZWwsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBycC0+ZGVzY3JfZG1hKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiVFggcmluZyBjaGFubmVsICVkIERNQSBhZGRyICglbGx4KSBpcyBub3QgYWxpZ25lZFxuIiwKKwkJCSAgIGNoYW5uZWwsICh1bnNpZ25lZCBsb25nIGxvbmcpcnAtPmRlc2NyX2RtYSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDc0NiwxMCArNDcxMCw4IEBACiAKIAlpZiAoKChycC0+bWJveF9kbWEgPj4gMzIpICYgflRYRE1BX01CSF9NQkFERFIpIHx8CiAJICAgICgodTMyKXJwLT5tYm94X2RtYSAmIH5UWERNQV9NQkxfTUJBRERSKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFRYIHJpbmcgY2hhbm5lbCAlZCAiCi0JCQkiTUJPWCBhZGRyICglbGx4KSBpcyBoYXMgaWxsZWdhbCBiaXRzLlxuIiwKLQkJCW5wLT5kZXYtPm5hbWUsIGNoYW5uZWwsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBycC0+bWJveF9kbWEpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJUWCByaW5nIGNoYW5uZWwgJWQgTUJPWCBhZGRyICglbGx4KSBoYXMgaW52YWxpZCBiaXRzXG4iLAorCQkJICAgIGNoYW5uZWwsICh1bnNpZ25lZCBsb25nIGxvbmcpcnAtPm1ib3hfZG1hKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW53NjQoVFhETUFfTUJIKGNoYW5uZWwpLCBycC0+bWJveF9kbWEgPj4gMzIpOwpAQCAtNTE0Niw5ICs1MTA4LDggQEAKIAllcnIgPSBuaXVfd2FpdF9iaXRzX2NsZWFyKG5wLCBaQ1BfUkFNX0FDQywgWkNQX1JBTV9BQ0NfQlVTWSwKIAkJCQkgIDEwMDAsIDEwMCk7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFpDUCByZWFkIGJ1c3kgd29uJ3QgY2xlYXIsICIKLQkJCSJaQ1BfUkFNX0FDQ1slbGx4XVxuIiwgbnAtPmRldi0+bmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjQoWkNQX1JBTV9BQ0MpKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiWkNQIHJlYWQgYnVzeSB3b24ndCBjbGVhciwgWkNQX1JBTV9BQ0NbJWxseF1cbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5yNjQoWkNQX1JBTV9BQ0MpKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTUxNjAsOSArNTEyMSw4IEBACiAJZXJyID0gbml1X3dhaXRfYml0c19jbGVhcihucCwgWkNQX1JBTV9BQ0MsIFpDUF9SQU1fQUNDX0JVU1ksCiAJCQkJICAxMDAwLCAxMDApOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBaQ1AgcmVhZCBidXN5MiB3b24ndCBjbGVhciwgIgotCQkJIlpDUF9SQU1fQUNDWyVsbHhdXG4iLCBucC0+ZGV2LT5uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NChaQ1BfUkFNX0FDQykpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJaQ1AgcmVhZCBidXN5MiB3b24ndCBjbGVhciwgWkNQX1JBTV9BQ0NbJWxseF1cbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5yNjQoWkNQX1JBTV9BQ0MpKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTU1MjcsOCArNTQ4Nyw3IEBACiAJCXVkZWxheSgxMDApOwogCX0KIAlpZiAobGltaXQgPCAwKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IFRYIEJNQUMgd291bGQgbm90IHJlc2V0LCAiCi0JCQkiQlRYTUFDX1NXX1JTVFslbGx4XVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiUG9ydCAldSBUWCBCTUFDIHdvdWxkIG5vdCByZXNldCwgQlRYTUFDX1NXX1JTVFslbGx4XVxuIiwKIAkJCW5wLT5wb3J0LAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NF9tYWMoQlRYTUFDX1NXX1JTVCkpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU2MjksMTIgKzU1ODgsMTEgQEAKIAl3aGlsZSAoLS1saW1pdCA+PSAwKSB7CiAJCWlmICghKG5yNjRfbWFjKFhSWE1BQ19TV19SU1QpICYgKFhSWE1BQ19TV19SU1RfUkVHX1JTIHwKIAkJCQkJCSBYUlhNQUNfU1dfUlNUX1NPRlRfUlNUKSkpCi0JCSAgICBicmVhazsKKwkJCWJyZWFrOwogCQl1ZGVsYXkoMTAwKTsKIAl9CiAJaWYgKGxpbWl0IDwgMCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBSWCBYTUFDIHdvdWxkIG5vdCByZXNldCwgIgotCQkJIlhSWE1BQ19TV19SU1RbJWxseF1cbiIsCisJCWRldl9lcnIobnAtPmRldmljZSwgIlBvcnQgJXUgUlggWE1BQyB3b3VsZCBub3QgcmVzZXQsIFhSWE1BQ19TV19SU1RbJWxseF1cbiIsCiAJCQlucC0+cG9ydCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjRfbWFjKFhSWE1BQ19TV19SU1QpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NjU1LDggKzU2MTMsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAJaWYgKGxpbWl0IDwgMCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBSWCBCTUFDIHdvdWxkIG5vdCByZXNldCwgIgotCQkJIkJSWE1BQ19TV19SU1RbJWxseF1cbiIsCisJCWRldl9lcnIobnAtPmRldmljZSwgIlBvcnQgJXUgUlggQk1BQyB3b3VsZCBub3QgcmVzZXQsIEJSWE1BQ19TV19SU1RbJWxseF1cbiIsCiAJCQlucC0+cG9ydCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjRfbWFjKEJSWE1BQ19TV19SU1QpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01OTYwLDExICs1OTE3LDkgQEAKIAl9CiAJaWYgKGxpbWl0IDwgMCAmJgogCSAgICAocmQgIT0gMCAmJiB3ciAhPSAxKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IElQUCB3b3VsZCBub3QgcXVpZXNjZSwgIgotCQkJInJkX3B0clslbGx4XSB3cl9wdHJbJWxseF1cbiIsCi0JCQlucC0+ZGV2LT5uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NF9pcHAoSVBQX0RGSUZPX1JEX1BUUiksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0X2lwcChJUFBfREZJRk9fV1JfUFRSKSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIklQUCB3b3VsZCBub3QgcXVpZXNjZSwgcmRfcHRyWyVsbHhdIHdyX3B0clslbGx4XVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NF9pcHAoSVBQX0RGSUZPX1JEX1BUUiksCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5yNjRfaXBwKElQUF9ERklGT19XUl9QVFIpKTsKIAl9CiAKIAl2YWwgPSBucjY0X2lwcChJUFBfQ0ZJRyk7CkBAIC01OTgxLDEyICs1OTM2LDEyIEBACiB7CiAJaW50IGksIGVycjsKIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgVFhDXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmdXAsIEtFUk5fREVCVUcsIG5wLT5kZXYsICJJbml0aWFsaXplIFRYQ1xuIik7CiAJbml1X3R4Y19lbmFibGVfcG9ydChucCwgMSk7CiAJbml1X3R4Y19wb3J0X2RtYV9lbmFibGUobnAsIDEpOwogCW5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTsKIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgVFggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgVFggY2hhbm5lbHNcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3R4X3JpbmdzOyBpKyspIHsKIAkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnR4X3JpbmdzW2ldOwogCkBAIC01OTk1LDI3ICs1OTUwLDI3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgUlggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgUlggY2hhbm5lbHNcbiIpOwogCWVyciA9IG5pdV9pbml0X3J4X2NoYW5uZWxzKG5wKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmluaXRfdHhfY2hhbm5lbHM7CiAKLQluaXVkYmcoSUZVUCwgIiVzOiBJbml0aWFsaXplIGNsYXNzaWZpZXJcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgY2xhc3NpZmllclxuIik7CiAJZXJyID0gbml1X2luaXRfY2xhc3NpZmllcl9odyhucCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5pbml0X3J4X2NoYW5uZWxzOwogCi0Jbml1ZGJnKElGVVAsICIlczogSW5pdGlhbGl6ZSBaQ1BcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgWkNQXG4iKTsKIAllcnIgPSBuaXVfaW5pdF96Y3AobnApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuaW5pdF9yeF9jaGFubmVsczsKIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgSVBQXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmdXAsIEtFUk5fREVCVUcsIG5wLT5kZXYsICJJbml0aWFsaXplIElQUFxuIik7CiAJZXJyID0gbml1X2luaXRfaXBwKG5wKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmluaXRfcnhfY2hhbm5lbHM7CiAKLQluaXVkYmcoSUZVUCwgIiVzOiBJbml0aWFsaXplIE1BQ1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiSW5pdGlhbGl6ZSBNQUNcbiIpOwogCWVyciA9IG5pdV9pbml0X21hYyhucCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5pbml0X2lwcDsKQEAgLTYwMjMsMTYgKzU5NzgsMTYgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VuaW5pdF9pcHA6Ci0Jbml1ZGJnKElGVVAsICIlczogVW5pbml0IElQUFxuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiVW5pbml0IElQUFxuIik7CiAJbml1X2Rpc2FibGVfaXBwKG5wKTsKIAogb3V0X3VuaW5pdF9yeF9jaGFubmVsczoKLQluaXVkYmcoSUZVUCwgIiVzOiBVbmluaXQgUlggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIlVuaW5pdCBSWCBjaGFubmVsc1xuIik7CiAJbml1X3N0b3BfcnhfY2hhbm5lbHMobnApOwogCW5pdV9yZXNldF9yeF9jaGFubmVscyhucCk7CiAKIG91dF91bmluaXRfdHhfY2hhbm5lbHM6Ci0Jbml1ZGJnKElGVVAsICIlczogVW5pbml0IFRYIGNoYW5uZWxzXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmdXAsIEtFUk5fREVCVUcsIG5wLT5kZXYsICJVbmluaXQgVFggY2hhbm5lbHNcbiIpOwogCW5pdV9zdG9wX3R4X2NoYW5uZWxzKG5wKTsKIAluaXVfcmVzZXRfdHhfY2hhbm5lbHMobnApOwogCkBAIC02MDQxLDI1ICs1OTk2LDI1IEBACiAKIHN0YXRpYyB2b2lkIG5pdV9zdG9wX2h3KHN0cnVjdCBuaXUgKm5wKQogewotCW5pdWRiZyhJRkRPV04sICIlczogRGlzYWJsZSBpbnRlcnJ1cHRzXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmZG93biwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkRpc2FibGUgaW50ZXJydXB0c1xuIik7CiAJbml1X2VuYWJsZV9pbnRlcnJ1cHRzKG5wLCAwKTsKIAotCW5pdWRiZyhJRkRPV04sICIlczogRGlzYWJsZSBSWCBNQUNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiRGlzYWJsZSBSWCBNQUNcbiIpOwogCW5pdV9lbmFibGVfcnhfbWFjKG5wLCAwKTsKIAotCW5pdWRiZyhJRkRPV04sICIlczogRGlzYWJsZSBJUFBcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiRGlzYWJsZSBJUFBcbiIpOwogCW5pdV9kaXNhYmxlX2lwcChucCk7CiAKLQluaXVkYmcoSUZET1dOLCAiJXM6IFN0b3AgVFggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiU3RvcCBUWCBjaGFubmVsc1xuIik7CiAJbml1X3N0b3BfdHhfY2hhbm5lbHMobnApOwogCi0Jbml1ZGJnKElGRE9XTiwgIiVzOiBTdG9wIFJYIGNoYW5uZWxzXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmZG93biwgS0VSTl9ERUJVRywgbnAtPmRldiwgIlN0b3AgUlggY2hhbm5lbHNcbiIpOwogCW5pdV9zdG9wX3J4X2NoYW5uZWxzKG5wKTsKIAotCW5pdWRiZyhJRkRPV04sICIlczogUmVzZXQgVFggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiUmVzZXQgVFggY2hhbm5lbHNcbiIpOwogCW5pdV9yZXNldF90eF9jaGFubmVscyhucCk7CiAKLQluaXVkYmcoSUZET1dOLCAiJXM6IFJlc2V0IFJYIGNoYW5uZWxzXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmZG93biwgS0VSTl9ERUJVRywgbnAtPmRldiwgIlJlc2V0IFJYIGNoYW5uZWxzXG4iKTsKIAluaXVfcmVzZXRfcnhfY2hhbm5lbHMobnApOwogfQogCkBAIC02MzY5LDEwICs2MzI0LDEwIEBACiAJbnAtPmZsYWdzICY9IH4oTklVX0ZMQUdTX01DQVNUIHwgTklVX0ZMQUdTX1BST01JU0MpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCW5wLT5mbGFncyB8PSBOSVVfRkxBR1NfUFJPTUlTQzsKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gMCkpCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoIW5ldGRldl9tY19lbXB0eShkZXYpKSkKIAkJbnAtPmZsYWdzIHw9IE5JVV9GTEFHU19NQ0FTVDsKIAotCWFsdF9jbnQgPSBkZXYtPnVjLmNvdW50OworCWFsdF9jbnQgPSBuZXRkZXZfdWNfY291bnQoZGV2KTsKIAlpZiAoYWx0X2NudCA+IG5pdV9udW1fYWx0X2FkZHIobnApKSB7CiAJCWFsdF9jbnQgPSAwOwogCQlucC0+ZmxhZ3MgfD0gTklVX0ZMQUdTX1BST01JU0M7CkBAIC02MzgxLDE3ICs2MzM2LDE1IEBACiAJaWYgKGFsdF9jbnQpIHsKIAkJaW50IGluZGV4ID0gMDsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KSB7CisJCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKIAkJCWVyciA9IG5pdV9zZXRfYWx0X21hYyhucCwgaW5kZXgsIGhhLT5hZGRyKTsKIAkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBFcnJvciAlZCAiCi0JCQkJICAgICAgICJhZGRpbmcgYWx0IG1hYyAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIGluZGV4KTsKKwkJCQluZXRkZXZfd2FybihkZXYsICJFcnJvciAlZCBhZGRpbmcgYWx0IG1hYyAlZFxuIiwKKwkJCQkJICAgIGVyciwgaW5kZXgpOwogCQkJZXJyID0gbml1X2VuYWJsZV9hbHRfbWFjKG5wLCBpbmRleCwgMSk7CiAJCQlpZiAoZXJyKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogRXJyb3IgJWQgIgotCQkJCSAgICAgICAiZW5hYmxpbmcgYWx0IG1hYyAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIGluZGV4KTsKKwkJCQluZXRkZXZfd2FybihkZXYsICJFcnJvciAlZCBlbmFibGluZyBhbHQgbWFjICVkXG4iLAorCQkJCQkgICAgZXJyLCBpbmRleCk7CiAKIAkJCWluZGV4Kys7CiAJCX0KQEAgLTY0MDQsMTYgKzYzNTcsMTUgQEAKIAkJZm9yIChpID0gYWx0X3N0YXJ0OyBpIDwgbml1X251bV9hbHRfYWRkcihucCk7IGkrKykgewogCQkJZXJyID0gbml1X2VuYWJsZV9hbHRfbWFjKG5wLCBpLCAwKTsKIAkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBFcnJvciAlZCAiCi0JCQkJICAgICAgICJkaXNhYmxpbmcgYWx0IG1hYyAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIGkpOworCQkJCW5ldGRldl93YXJuKGRldiwgIkVycm9yICVkIGRpc2FibGluZyBhbHQgbWFjICVkXG4iLAorCQkJCQkgICAgZXJyLCBpKTsKIAkJfQogCX0KIAlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJCWhhc2hbaV0gPSAweGZmZmY7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlmb3IgKGFkZHIgPSBkZXYtPm1jX2xpc3Q7IGFkZHI7IGFkZHIgPSBhZGRyLT5uZXh0KSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoYWRkciwgZGV2KSB7CiAJCQl1MzIgY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBhZGRyLT5kYV9hZGRyKTsKIAogCQkJY3JjID4+PSAyNDsKQEAgLTY1NzAsNyArNjUyMiw3IEBACiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIiwKKwlkZXZfZXJyKG5wLT5kZXZpY2UsICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIsCiAJCWRldi0+bmFtZSk7CiAKIAlzY2hlZHVsZV93b3JrKCZucC0+cmVzZXRfdGFzayk7CkBAIC02NjcyLDggKzY2MjQsNyBAQAogCiAJaWYgKG5pdV90eF9hdmFpbChycCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogQlVHISBUeCByaW5nIGZ1bGwgd2hlbiAiCi0JCQkicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOworCQlkZXZfZXJyKG5wLT5kZXZpY2UsICIlczogQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsIGRldi0+bmFtZSk7CiAJCXJwLT50eF9lcnJvcnMrKzsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTcyMzcsOCArNzE4OCw4IEBACiAKIAl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKIAlpZiAoIXRwLT52YWxpZCkgewotCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIGVudHJ5IFslZF0gaW52YWxpZCBmb3IgaWR4WyVkXVxuIiwKLQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgKHUxNiluZmMtPmZzLmxvY2F0aW9uLCBpZHgpOworCQluZXRkZXZfaW5mbyhucC0+ZGV2LCAibml1JWQ6IGVudHJ5IFslZF0gaW52YWxpZCBmb3IgaWR4WyVkXVxuIiwKKwkJCSAgICBwYXJlbnQtPmluZGV4LCAodTE2KW5mYy0+ZnMubG9jYXRpb24sIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzI0OCw4ICs3MTk5LDggQEAKIAlyZXQgPSBuaXVfY2xhc3NfdG9fZXRoZmxvdyhjbGFzcywgJmZzcC0+Zmxvd190eXBlKTsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2NsYXNzX3RvX2V0aGZsb3cgZmFpbGVkXG4iLAotCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiBuaXVfY2xhc3NfdG9fZXRoZmxvdyBmYWlsZWRcbiIsCisJCQkgICAgcGFyZW50LT5pbmRleCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTczMzIsOSArNzI4Myw4IEBACiAKIAlpZiAobl9lbnRyaWVzICE9IGNudCkgewogCQkvKiBwcmludCB3YXJuaW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCi0JCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsLCAiCi0JCQkibl9lbnRyaWVzWyVkXSAhPSBjbnRbJWRdISEhXG5cbiIsCi0JCQlucC0+cGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgbl9lbnRyaWVzLCBjbnQpOworCQluZXRkZXZfaW5mbyhucC0+ZGV2LCAibml1JWQ6IEluICVzKCk6IG5fZW50cmllc1slZF0gIT0gY250WyVkXSEhIVxuIiwKKwkJCSAgICBucC0+cGFyZW50LT5pbmRleCwgX19mdW5jX18sIG5fZW50cmllcywgY250KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc1NjEsOSArNzUxMSw4IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFhZGRfdXNyX2NscykgewotCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgotCQkJCSJDb3VsZCBub3QgZmluZC9pbnNlcnQgY2xhc3MgZm9yIHBpZCAlZFxuIiwKLQkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCB1c3BlYy0+cHJvdG8pOworCQkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiAlcygpOiBDb3VsZCBub3QgZmluZC9pbnNlcnQgY2xhc3MgZm9yIHBpZCAlZFxuIiwKKwkJCQkgICAgcGFyZW50LT5pbmRleCwgX19mdW5jX18sIHVzcGVjLT5wcm90byk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTc1OTYsOSArNzU0NSw4IEBACiAJY2FzZSBBSF9WNl9GTE9XOgogCWNhc2UgRVNQX1Y2X0ZMT1c6CiAJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgotCQkJImZsb3cgJWQgZm9yIElQdjYgbm90IGltcGxlbWVudGVkXG5cbiIsCi0JCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogZmxvdyAlZCBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcbiIsCisJCQkgICAgcGFyZW50LT5pbmRleCwgX19mdW5jX18sIGZzcC0+Zmxvd190eXBlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJY2FzZSBJUF9VU0VSX0ZMT1c6CkBAIC03NjA3LDE3ICs3NTU1LDE1IEBACiAJCQkJCQkgICBjbGFzcyk7CiAJCX0gZWxzZSB7CiAJCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi0JCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCi0JCQkidXNyIGZsb3cgZm9yIElQdjYgbm90IGltcGxlbWVudGVkXG5cbiIsCi0JCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogdXNyIGZsb3cgZm9yIElQdjYgbm90IGltcGxlbWVudGVkXG4iLAorCQkJCSAgICBwYXJlbnQtPmluZGV4LCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgotCQkJIlVua25vd24gZmxvdyB0eXBlICVkXG5cbiIsCi0JCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogVW5rbm93biBmbG93IHR5cGUgJWRcbiIsCisJCQkgICAgcGFyZW50LT5pbmRleCwgX19mdW5jX18sIGZzcC0+Zmxvd190eXBlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzYyNywxMCArNzU3Myw5IEBACiAJCXRwLT5hc3NvY19kYXRhID0gVENBTV9BU1NPQ0RBVEFfRElTQzsKIAl9IGVsc2UgewogCQlpZiAoZnNwLT5yaW5nX2Nvb2tpZSA+PSBucC0+bnVtX3J4X3JpbmdzKSB7Ci0JCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCi0JCQkJIkludmFsaWQgUlggcmluZyAlbGxkXG5cbiIsCi0JCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKLQkJCQkobG9uZyBsb25nKSBmc3AtPnJpbmdfY29va2llKTsKKwkJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogSW52YWxpZCBSWCByaW5nICVsbGRcbiIsCisJCQkJICAgIHBhcmVudC0+aW5kZXgsIF9fZnVuY19fLAorCQkJCSAgICAobG9uZyBsb25nKWZzcC0+cmluZ19jb29raWUpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC03Njk5LDEwICs3NjQ0LDkgQEAKIAkJCX0KIAkJfQogCQlpZiAoaSA9PSBOSVVfTDNfUFJPR19DTFMpIHsKLQkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnksIgotCQkJCSJVc3IgY2xhc3MgMHglbGx4IG5vdCBmb3VuZCBcbiIsCi0JCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjbGFzcyk7CisJCQluZXRkZXZfaW5mbyhucC0+ZGV2LCAibml1JWQ6IEluICVzKCk6IFVzciBjbGFzcyAweCVsbHggbm90IGZvdW5kXG4iLAorCQkJCSAgICBwYXJlbnQtPmluZGV4LCBfX2Z1bmNfXywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljbGFzcyk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTgwMDEsOSArNzk0NSw3IEBACiAJCSAqIHdvbid0IGdldCBhbnkgaW50ZXJydXB0cyBhbmQgdGhhdCdzIHBhaW5mdWwgdG8gZGVidWcuCiAJCSAqLwogCQlpZiAobnI2NChMREdfTlVNKGxkbikpICE9IGxkZykgewotCQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUsIG1pcy1tYXRjaGVkICIKLQkJCQkiTERHIGFzc2lnbm1lbnQgIgotCQkJCSJmb3IgbGRuICVkLCBzaG91bGQgYmUgJWQgaXMgJWxsdVxuIiwKKwkJCWRldl9lcnIobnAtPmRldmljZSwgIlBvcnQgJXUsIG1pcy1tYXRjaGVkIExERyBhc3NpZ25tZW50IGZvciBsZG4gJWQsIHNob3VsZCBiZSAlZCBpcyAlbGx1XG4iLAogCQkJCW5wLT5wb3J0LCBsZG4sIGxkZywKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0KExER19OVU0obGRuKSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDU2LDcgKzc5OTgsNyBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAobGltaXQtLSk7CiAJaWYgKCEoZnJhbWUgJiBFU1BDX1BJT19TVEFUX1JFQURfRU5EKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiRUVQUk9NIHJlYWQgdGltZW91dCBmcmFtZVslbGx4XVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiRUVQUk9NIHJlYWQgdGltZW91dCBmcmFtZVslbGx4XVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZyYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtODA3MSw3ICs4MDEzLDcgQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGxpbWl0LS0pOwogCWlmICghKGZyYW1lICYgRVNQQ19QSU9fU1RBVF9SRUFEX0VORCkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIkVFUFJPTSByZWFkIHRpbWVvdXQgZnJhbWVbJWxseF1cbiIsCisJCWRldl9lcnIobnAtPmRldmljZSwgIkVFUFJPTSByZWFkIHRpbWVvdXQgZnJhbWVbJWxseF1cbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmcmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTgxNTIsOCArODA5NCw5IEBACiAJcyArPSBpICsgNTsKIAlzc2NhbmYocywgIiVkLiVkIiwgJnZwZC0+ZmNvZGVfbWFqb3IsICZ2cGQtPmZjb2RlX21pbm9yKTsKIAotCW5pdWRiZyhQUk9CRSwgIlZQRF9TQ0FOOiBGQ09ERSBtYWpvciglZCkgbWlub3IoJWQpXG4iLAotCSAgICAgICB2cGQtPmZjb2RlX21ham9yLCB2cGQtPmZjb2RlX21pbm9yKTsKKwluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICJWUERfU0NBTjogRkNPREUgbWFqb3IoJWQpIG1pbm9yKCVkKVxuIiwKKwkJICAgICB2cGQtPmZjb2RlX21ham9yLCB2cGQtPmZjb2RlX21pbm9yKTsKIAlpZiAodnBkLT5mY29kZV9tYWpvciA+IE5JVV9WUERfTUlOX01BSk9SIHx8CiAJICAgICh2cGQtPmZjb2RlX21ham9yID09IE5JVV9WUERfTUlOX01BSk9SICYmCiAJICAgICB2cGQtPmZjb2RlX21pbm9yID49IE5JVV9WUERfTUlOX01JTk9SKSkKQEAgLTgxNzMsOCArODExNiw4IEBACiAjZGVmaW5lIEZPVU5EX01BU0tfUEhZCQkweDAwMDAwMDIwCiAjZGVmaW5lIEZPVU5EX01BU0tfQUxMCQkweDAwMDAwMDNmCiAKLQluaXVkYmcoUFJPQkUsICJWUERfU0NBTjogc3RhcnRbJXhdIGVuZFsleF1cbiIsCi0JICAgICAgIHN0YXJ0LCBlbmQpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlZQRF9TQ0FOOiBzdGFydFsleF0gZW5kWyV4XVxuIiwgc3RhcnQsIGVuZCk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCWludCBsZW4sIGVyciwgaW5zdGFuY2UsIHR5cGUsIHByb3BfbGVuOwogCQljaGFyIG5hbWVidWZbNjRdOwpAQCAtODIyOCw4ICs4MTcxLDcgQEAKIAkJfQogCiAJCWlmIChtYXhfbGVuICYmIHByb3BfbGVuID4gbWF4X2xlbikgewotCQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlByb3BlcnR5ICclcycgbGVuZ3RoICglZCkgaXMgIgotCQkJCSJ0b28gbG9uZy5cbiIsIG5hbWVidWYsIHByb3BfbGVuKTsKKwkJCWRldl9lcnIobnAtPmRldmljZSwgIlByb3BlcnR5ICclcycgbGVuZ3RoICglZCkgaXMgdG9vIGxvbmdcbiIsIG5hbWVidWYsIHByb3BfbGVuKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTgyMzcsOCArODE3OSw5IEBACiAJCQl1MzIgb2ZmID0gc3RhcnQgKyA1ICsgZXJyOwogCQkJaW50IGk7CiAKLQkJCW5pdWRiZyhQUk9CRSwgIlZQRF9TQ0FOOiBSZWFkaW5nIGluIHByb3BlcnR5IFslc10gIgotCQkJICAgICAgICJsZW5bJWRdXG4iLCBuYW1lYnVmLCBwcm9wX2xlbik7CisJCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJCSAgICAgIlZQRF9TQ0FOOiBSZWFkaW5nIGluIHByb3BlcnR5IFslc10gbGVuWyVkXVxuIiwKKwkJCQkgICAgIG5hbWVidWYsIHByb3BfbGVuKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBwcm9wX2xlbjsgaSsrKQogCQkJCSpwcm9wX2J1ZisrID0gbml1X3BjaV9lZXByb21fcmVhZChucCwgb2ZmICsgaSk7CiAJCX0KQEAgLTg0MDIsOCArODM0NSw3IEBACiAJdTggdmFsODsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigmdnBkLT5sb2NhbF9tYWNbMF0pKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJWUEQgTUFDIGludmFsaWQsICIKLQkJCSJmYWxsaW5nIGJhY2sgdG8gU1BST00uXG4iKTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiVlBEIE1BQyBpbnZhbGlkLCBmYWxsaW5nIGJhY2sgdG8gU1BST01cbiIpOwogCiAJCW5wLT5mbGFncyAmPSB+TklVX0ZMQUdTX1ZQRF9WQUxJRDsKIAkJcmV0dXJuOwpAQCAtODQyMCwxNCArODM2MiwxNCBAQAogCQkJbnAtPmZsYWdzICY9IH5OSVVfRkxBR1NfMTBHOwogCQl9CiAJCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfMTBHKQotCQkJIG5wLT5tYWNfeGN2ciA9IE1BQ19YQ1ZSX1hQQ1M7CisJCQlucC0+bWFjX3hjdnIgPSBNQUNfWENWUl9YUENTOwogCX0gZWxzZSBpZiAoIXN0cmNtcChucC0+dnBkLm1vZGVsLCBOSVVfRk9YWFlfTURMX1NUUikpIHsKIAkJbnAtPmZsYWdzIHw9IChOSVVfRkxBR1NfMTBHIHwgTklVX0ZMQUdTX0ZJQkVSIHwKIAkJCSAgICAgIE5JVV9GTEFHU19IT1RQTFVHX1BIWSk7CiAJfSBlbHNlIGlmIChuaXVfcGh5X3R5cGVfcHJvcF9kZWNvZGUobnAsIG5wLT52cGQucGh5X3R5cGUpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJJbGxlZ2FsIHBoeSBzdHJpbmcgWyVzXS5cbiIsCisJCWRldl9lcnIobnAtPmRldmljZSwgIklsbGVnYWwgcGh5IHN0cmluZyBbJXNdXG4iLAogCQkJbnAtPnZwZC5waHlfdHlwZSk7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJGYWxsaW5nIGJhY2sgdG8gU1BST00uXG4iKTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiRmFsbGluZyBiYWNrIHRvIFNQUk9NXG4iKTsKIAkJbnAtPmZsYWdzICY9IH5OSVVfRkxBR1NfVlBEX1ZBTElEOwogCQlyZXR1cm47CiAJfQpAQCAtODQ1NSw3ICs4Mzk3LDggQEAKIAogCW5wLT5lZXByb21fbGVuID0gbGVuOwogCi0Jbml1ZGJnKFBST0JFLCAiU1BST006IEltYWdlIHNpemUgJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICJTUFJPTTogSW1hZ2Ugc2l6ZSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbCk7CiAKIAlzdW0gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewpAQCAtODQ2NSwxMCArODQwOCwxMCBAQAogCQlzdW0gKz0gKHZhbCA+PiAxNikgJiAweGZmOwogCQlzdW0gKz0gKHZhbCA+PiAyNCkgJiAweGZmOwogCX0KLQluaXVkYmcoUFJPQkUsICJTUFJPTTogQ2hlY2tzdW0gJXhcbiIsIChpbnQpKHN1bSAmIDB4ZmYpKTsKKwluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICJTUFJPTTogQ2hlY2tzdW0gJXhcbiIsIChpbnQpKHN1bSAmIDB4ZmYpKTsKIAlpZiAoKHN1bSAmIDB4ZmYpICE9IDB4YWIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIkJhZCBTUFJPTSBjaGVja3N1bSAiCi0JCQkiKCV4LCBzaG91bGQgYmUgMHhhYilcbiIsIChpbnQpIChzdW0gJiAweGZmKSk7CisJCWRldl9lcnIobnAtPmRldmljZSwgIkJhZCBTUFJPTSBjaGVja3N1bSAoJXgsIHNob3VsZCBiZSAweGFiKVxuIiwgKGludCkoc3VtICYgMHhmZikpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg0OTEsMTEgKzg0MzQsMTIgQEAKIAkJCUVTUENfUEhZX1RZUEVfUE9SVDNfU0hJRlQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJCb2d1cyBwb3J0IG51bWJlciAldVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiQm9ndXMgcG9ydCBudW1iZXIgJXVcbiIsCiAJCQlucC0+cG9ydCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQluaXVkYmcoUFJPQkUsICJTUFJPTTogUEhZIHR5cGUgJXhcbiIsIHZhbDgpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBQSFkgdHlwZSAleFxuIiwgdmFsOCk7CiAKIAlzd2l0Y2ggKHZhbDgpIHsKIAljYXNlIEVTUENfUEhZX1RZUEVfMUdfQ09QUEVSOgpAQCAtODUyNywzMCArODQ3MSwyNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJCb2d1cyBTUFJPTSBwaHkgdHlwZSAldVxuIiwgdmFsOCk7CisJCWRldl9lcnIobnAtPmRldmljZSwgIkJvZ3VzIFNQUk9NIHBoeSB0eXBlICV1XG4iLCB2YWw4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJdmFsID0gbnI2NChFU1BDX01BQ19BRERSMCk7Ci0Jbml1ZGJnKFBST0JFLCAiU1BST006IE1BQ19BRERSMFslMDhsbHhdXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBNQUNfQUREUjBbJTA4bGx4XVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOwogCWRldi0+cGVybV9hZGRyWzBdID0gKHZhbCA+PiAgMCkgJiAweGZmOwogCWRldi0+cGVybV9hZGRyWzFdID0gKHZhbCA+PiAgOCkgJiAweGZmOwogCWRldi0+cGVybV9hZGRyWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOwogCWRldi0+cGVybV9hZGRyWzNdID0gKHZhbCA+PiAyNCkgJiAweGZmOwogCiAJdmFsID0gbnI2NChFU1BDX01BQ19BRERSMSk7Ci0Jbml1ZGJnKFBST0JFLCAiU1BST006IE1BQ19BRERSMVslMDhsbHhdXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBNQUNfQUREUjFbJTA4bGx4XVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOwogCWRldi0+cGVybV9hZGRyWzRdID0gKHZhbCA+PiAgMCkgJiAweGZmOwogCWRldi0+cGVybV9hZGRyWzVdID0gKHZhbCA+PiAgOCkgJiAweGZmOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZkZXYtPnBlcm1fYWRkclswXSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlNQUk9NIE1BQyBhZGRyZXNzIGludmFsaWRcbiIpOwotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiWyBcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJcHJpbnRrKCIlMDJ4ICIsIGRldi0+cGVybV9hZGRyW2ldKTsKLQkJcHJpbnRrKCJdXG4iKTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiU1BST00gTUFDIGFkZHJlc3MgaW52YWxpZCBbICVwTSBdXG4iLAorCQkJZGV2LT5wZXJtX2FkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg1NjIsOCArODUwMyw4IEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRldi0+cGVybV9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKIAogCXZhbCA9IG5yNjQoRVNQQ19NT0RfU1RSX0xFTik7Ci0Jbml1ZGJnKFBST0JFLCAiU1BST006IE1PRF9TVFJfTEVOWyVsbHVdXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBNT0RfU1RSX0xFTlslbGx1XVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOwogCWlmICh2YWwgPj0gOCAqIDQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC04NTc4LDggKzg1MTksOCBAQAogCW5wLT52cGQubW9kZWxbdmFsXSA9ICdcMCc7CiAKIAl2YWwgPSBucjY0KEVTUENfQkRfTU9EX1NUUl9MRU4pOwotCW5pdWRiZyhQUk9CRSwgIlNQUk9NOiBCRF9NT0RfU1RSX0xFTlslbGx1XVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICJTUFJPTTogQkRfTU9EX1NUUl9MRU5bJWxsdV1cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsKTsKIAlpZiAodmFsID49IDQgKiA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODU5NSw4ICs4NTM2LDggQEAKIAogCW5wLT52cGQubWFjX251bSA9CiAJCW5yNjQoRVNQQ19OVU1fUE9SVFNfTUFDUykgJiBFU1BDX05VTV9QT1JUU19NQUNTX1ZBTDsKLQluaXVkYmcoUFJPQkUsICJTUFJPTTogTlVNX1BPUlRTX01BQ1NbJWRdXG4iLAotCSAgICAgICBucC0+dnBkLm1hY19udW0pOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBOVU1fUE9SVFNfTUFDU1slZF1cbiIsIG5wLT52cGQubWFjX251bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg2MjksOCArODU3MCw2IEBACiAJCX0KIAl9CiAKLQluaXVkYmcoUFJPQkUsICJuaXVfZ2V0X2FuZF92YWxpZGF0ZV9wb3J0OiBwb3J0WyVkXSBudW1fcG9ydHNbJWRdXG4iLAotCSAgICAgICBucC0+cG9ydCwgcGFyZW50LT5udW1fcG9ydHMpOwogCWlmIChucC0+cG9ydCA+PSBwYXJlbnQtPm51bV9wb3J0cykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTg2NTksMTQgKzg1OTgsMTIgQEAKIAogCXByX2luZm8oIm5pdSVkOiBGb3VuZCBQSFkgJTA4eCB0eXBlICVzIGF0IHBoeV9wb3J0ICV1XG4iLAogCQlwYXJlbnQtPmluZGV4LCBpZCwKLQkJKHR5cGUgPT0gUEhZX1RZUEVfUE1BX1BNRCA/Ci0JCSAiUE1BL1BNRCIgOgotCQkgKHR5cGUgPT0gUEhZX1RZUEVfUENTID8KLQkJICAiUENTIiA6ICJNSUkiKSksCisJCXR5cGUgPT0gUEhZX1RZUEVfUE1BX1BNRCA/ICJQTUEvUE1EIiA6CisJCXR5cGUgPT0gUEhZX1RZUEVfUENTID8gIlBDUyIgOiAiTUlJIiwKIAkJcGh5X3BvcnQpOwogCiAJaWYgKHAtPmN1clt0eXBlXSA+PSBOSVVfTUFYX1BPUlRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRvbyBtYW55IFBIWSBwb3J0cy5cbiIpOworCQlwcl9lcnIoIlRvbyBtYW55IFBIWSBwb3J0c1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZHggPSBwLT5jdXJbdHlwZV07CkBAIC04NzI3LDggKzg2NjQsNyBAQAogCQlwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtpXSA9ICgxNiAvIG51bV9wb3J0cyk7CiAJCXBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W2ldID0gKDE2IC8gbnVtX3BvcnRzKTsKIAotCQlwcl9pbmZvKFBGWCAibml1JWQ6IFBvcnQgJXUgWyV1IFJYIGNoYW5zXSAiCi0JCQkiWyV1IFRYIGNoYW5zXVxuIiwKKwkJcHJfaW5mbygibml1JWQ6IFBvcnQgJXUgWyV1IFJYIGNoYW5zXSBbJXUgVFggY2hhbnNdXG4iLAogCQkJcGFyZW50LT5pbmRleCwgaSwKIAkJCXBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W2ldLAogCQkJcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV0pOwpAQCAtODc3MSw4ICs4NzA3LDcgQEAKIAkJCXBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W2ldID0gcnhfY2hhbnNfcGVyXzFnOwogCQkJcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV0gPSB0eF9jaGFuc19wZXJfMWc7CiAJCX0KLQkJcHJfaW5mbyhQRlggIm5pdSVkOiBQb3J0ICV1IFsldSBSWCBjaGFuc10gIgotCQkJIlsldSBUWCBjaGFuc11cbiIsCisJCXByX2luZm8oIm5pdSVkOiBQb3J0ICV1IFsldSBSWCBjaGFuc10gWyV1IFRYIGNoYW5zXVxuIiwKIAkJCXBhcmVudC0+aW5kZXgsIGksCiAJCQlwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtpXSwKIAkJCXBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W2ldKTsKQEAgLTg3ODEsMjMgKzg3MTYsMjAgQEAKIAl9CiAKIAlpZiAodG90X3J4ID4gTklVX05VTV9SWENIQU4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibml1JWQ6IFRvbyBtYW55IFJYIGNoYW5uZWxzICglZCksICIKLQkJICAgICAgICJyZXNldHRpbmcgdG8gb25lIHBlciBwb3J0LlxuIiwKKwkJcHJfZXJyKCJuaXUlZDogVG9vIG1hbnkgUlggY2hhbm5lbHMgKCVkKSwgcmVzZXR0aW5nIHRvIG9uZSBwZXIgcG9ydFxuIiwKIAkJICAgICAgIHBhcmVudC0+aW5kZXgsIHRvdF9yeCk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7IGkrKykKIAkJCXBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W2ldID0gMTsKIAl9CiAJaWYgKHRvdF90eCA+IE5JVV9OVU1fVFhDSEFOKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm5pdSVkOiBUb28gbWFueSBUWCBjaGFubmVscyAoJWQpLCAiCi0JCSAgICAgICAicmVzZXR0aW5nIHRvIG9uZSBwZXIgcG9ydC5cbiIsCisJCXByX2Vycigibml1JWQ6IFRvbyBtYW55IFRYIGNoYW5uZWxzICglZCksIHJlc2V0dGluZyB0byBvbmUgcGVyIHBvcnRcbiIsCiAJCSAgICAgICBwYXJlbnQtPmluZGV4LCB0b3RfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BvcnRzOyBpKyspCiAJCQlwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtpXSA9IDE7CiAJfQogCWlmICh0b3RfcnggPCBOSVVfTlVNX1JYQ0hBTiB8fCB0b3RfdHggPCBOSVVfTlVNX1RYQ0hBTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAibml1JWQ6IERyaXZlciBidWcsIHdhc3RlZCBjaGFubmVscywgIgotCQkgICAgICAgIlJYWyVkXSBUWFslZF1cbiIsCi0JCSAgICAgICBwYXJlbnQtPmluZGV4LCB0b3RfcngsIHRvdF90eCk7CisJCXByX3dhcm5pbmcoIm5pdSVkOiBEcml2ZXIgYnVnLCB3YXN0ZWQgY2hhbm5lbHMsIFJYWyVkXSBUWFslZF1cbiIsCisJCQkgICBwYXJlbnQtPmluZGV4LCB0b3RfcngsIHRvdF90eCk7CiAJfQogfQogCkBAIC04ODI1LDE4ICs4NzU3LDE4IEBACiAJCQlzdHJ1Y3QgcmRjX3RhYmxlICpydCA9ICZ0cC0+dGFibGVzW2dycF07CiAJCQlpbnQgc2xvdDsKIAotCQkJcHJfaW5mbyhQRlggIm5pdSVkOiBQb3J0ICVkIFJEQyB0YmwoJWQpIFsgIiwKKwkJCXByX2luZm8oIm5pdSVkOiBQb3J0ICVkIFJEQyB0YmwoJWQpIFsgIiwKIAkJCQlwYXJlbnQtPmluZGV4LCBpLCB0cC0+Zmlyc3RfdGFibGVfbnVtICsgZ3JwKTsKIAkJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBOSVVfUkRDX1RBQkxFX1NMT1RTOyBzbG90KyspIHsKIAkJCQlydC0+cnhkbWFfY2hhbm5lbFtzbG90XSA9CiAJCQkJCXJkY19jaGFubmVsX2Jhc2UgKyB0aGlzX2NoYW5uZWxfb2Zmc2V0OwogCi0JCQkJcHJpbnRrKCIlZCAiLCBydC0+cnhkbWFfY2hhbm5lbFtzbG90XSk7CisJCQkJcHJfY29udCgiJWQgIiwgcnQtPnJ4ZG1hX2NoYW5uZWxbc2xvdF0pOwogCiAJCQkJaWYgKCsrdGhpc19jaGFubmVsX29mZnNldCA9PSBudW1fY2hhbm5lbHMpCiAJCQkJCXRoaXNfY2hhbm5lbF9vZmZzZXQgPSAwOwogCQkJfQotCQkJcHJpbnRrKCJdXG4iKTsKKwkJCXByX2NvbnQoIl1cbiIpOwogCQl9CiAKIAkJcGFyZW50LT5yZGNfZGVmYXVsdFtpXSA9IHJkY19jaGFubmVsX2Jhc2U7CkBAIC04OTk2LDggKzg5MjgsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuc3VwcG9ydGVkIHBvcnQgY29uZmlnICIKLQkJCSAgICAgICAiMTBHWyVkXSAxR1slZF1cbiIsCisJCQlwcl9lcnIoIlVuc3VwcG9ydGVkIHBvcnQgY29uZmlnIDEwR1slZF0gMUdbJWRdXG4iLAogCQkJICAgICAgIG51bV8xMGcsIG51bV8xZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtOTAxNSw4ICs4OTQ2LDcgQEAKIAlyZXR1cm4gMDsKIAogdW5rbm93bl92Z18xZ19wb3J0OgotCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBpZGVudGlmeSBwbGF0Zm9ybSB0eXBlLCAxZ3BvcnQ9JWRcbiIsCi0JICAgICAgIGxvd2VzdF8xZyk7CisJcHJfZXJyKCJDYW5ub3QgaWRlbnRpZnkgcGxhdGZvcm0gdHlwZSwgMWdwb3J0PSVkXG4iLCBsb3dlc3RfMWcpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC05MDI1LDkgKzg5NTUsNiBAQAogCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OwogCWludCBlcnIsIGk7CiAKLQluaXVkYmcoUFJPQkUsICJuaXVfcHJvYmVfcG9ydHMoKTogcG9ydF9waHlbJTA4eF1cbiIsCi0JICAgICAgIHBhcmVudC0+cG9ydF9waHkpOwotCiAJaWYgKHBhcmVudC0+cG9ydF9waHkgPT0gUE9SVF9QSFlfVU5LTk9XTikgewogCQllcnIgPSB3YWxrX3BoeXMobnAsIHBhcmVudCk7CiAJCWlmIChlcnIpCkBAIC05MDQ4LDkgKzg5NzUsNiBAQAogewogCXN0cnVjdCBuaXVfY2xhc3NpZmllciAqY3AgPSAmbnAtPmNsYXM7CiAKLQluaXVkYmcoUFJPQkUsICJuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQ6IG51bV90Y2FtKCVkKVxuIiwKLQkgICAgICAgbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyk7Ci0KIAljcC0+dGNhbV90b3AgPSAodTE2KSBucC0+cG9ydDsKIAljcC0+dGNhbV9zeiA9IG5wLT5wYXJlbnQtPnRjYW1fbnVtX2VudHJpZXMgLyBucC0+cGFyZW50LT5udW1fcG9ydHM7CiAJY3AtPmgxX2luaXQgPSAweGZmZmZmZmZmOwpAQCAtOTExNiw4ICs5MDQwLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBpcyBpbnZhbGlkLCBjYW5ub3QgIgotCQkJImNvbXB1dGUgTUFDIGJsb2NrIG9mZnNldC5cbiIsIG5wLT5wb3J0KTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiUG9ydCAldSBpcyBpbnZhbGlkLCBjYW5ub3QgY29tcHV0ZSBNQUMgYmxvY2sgb2Zmc2V0XG4iLCBucC0+cG9ydCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTMyNyw5ICs5MjUwLDggQEAKIAogCXBoeV90eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicGh5LXR5cGUiLCAmcHJvcF9sZW4pOwogCWlmICghcGh5X3R5cGUpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBPRiBub2RlIGxhY2tzICIKLQkJCSJwaHktdHlwZSBwcm9wZXJ0eVxuIiwKLQkJCWRwLT5mdWxsX25hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIiVzOiBPRiBub2RlIGxhY2tzIHBoeS10eXBlIHByb3BlcnR5XG4iLAorCQkJICAgZHAtPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTMzOSwzNCArOTI2MSwyNiBAQAogCXN0cmNweShucC0+dnBkLnBoeV90eXBlLCBwaHlfdHlwZSk7CiAKIAlpZiAobml1X3BoeV90eXBlX3Byb3BfZGVjb2RlKG5wLCBucC0+dnBkLnBoeV90eXBlKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IElsbGVnYWwgcGh5IHN0cmluZyBbJXNdLlxuIiwKLQkJCWRwLT5mdWxsX25hbWUsIG5wLT52cGQucGh5X3R5cGUpOworCQluZXRkZXZfZXJyKGRldiwgIiVzOiBJbGxlZ2FsIHBoeSBzdHJpbmcgWyVzXVxuIiwKKwkJCSAgIGRwLT5mdWxsX25hbWUsIG5wLT52cGQucGh5X3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltYWNfYWRkciA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgJnByb3BfbGVuKTsKIAlpZiAoIW1hY19hZGRyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogT0Ygbm9kZSBsYWNrcyAiCi0JCQkibG9jYWwtbWFjLWFkZHJlc3MgcHJvcGVydHlcbiIsCi0JCQlkcC0+ZnVsbF9uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICIlczogT0Ygbm9kZSBsYWNrcyBsb2NhbC1tYWMtYWRkcmVzcyBwcm9wZXJ0eVxuIiwKKwkJCSAgIGRwLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHByb3BfbGVuICE9IGRldi0+YWRkcl9sZW4pIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBPRiBNQUMgYWRkcmVzcyBwcm9wIGxlbiAoJWQpICIKLQkJCSJpcyB3cm9uZy5cbiIsCi0JCQlkcC0+ZnVsbF9uYW1lLCBwcm9wX2xlbik7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IE9GIE1BQyBhZGRyZXNzIHByb3AgbGVuICglZCkgaXMgd3JvbmdcbiIsCisJCQkgICBkcC0+ZnVsbF9uYW1lLCBwcm9wX2xlbik7CiAJfQogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgbWFjX2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigmZGV2LT5wZXJtX2FkZHJbMF0pKSB7Ci0JCWludCBpOwotCi0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogT0YgTUFDIGFkZHJlc3MgaXMgaW52YWxpZFxuIiwKLQkJCWRwLT5mdWxsX25hbWUpOwotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFsgXG4iLAotCQkJZHAtPmZ1bGxfbmFtZSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQlwcmludGsoIiUwMnggIiwgZGV2LT5wZXJtX2FkZHJbaV0pOwotCQlwcmludGsoIl1cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIiVzOiBPRiBNQUMgYWRkcmVzcyBpcyBpbnZhbGlkXG4iLAorCQkJICAgZHAtPmZ1bGxfbmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IFsgJXBNIF1cbiIsIGRwLT5mdWxsX25hbWUsIGRldi0+cGVybV9hZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05NDE0LDggKzkzMjgsOCBAQAogCiAJCW53NjQoRVNQQ19QSU9fRU4sIEVTUENfUElPX0VOX0VOQUJMRSk7CiAJCW9mZnNldCA9IG5pdV9wY2lfdnBkX29mZnNldChucCk7Ci0JCW5pdWRiZyhQUk9CRSwgIm5pdV9nZXRfaW52YXJpYW50czogVlBEIG9mZnNldCBbJTA4eF1cbiIsCi0JCSAgICAgICBvZmZzZXQpOworCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJICAgICAiJXMoKSBWUEQgb2Zmc2V0IFslMDh4XVxuIiwgX19mdW5jX18sIG9mZnNldCk7CiAJCWlmIChvZmZzZXQpCiAJCQluaXVfcGNpX3ZwZF9mZXRjaChucCwgb2Zmc2V0KTsKIAkJbnc2NChFU1BDX1BJT19FTiwgMCk7CkBAIC05NTc1LDggKzk0ODksNiBAQAogCXN0cnVjdCBuaXVfcGFyZW50ICpwOwogCWludCBpOwogCi0Jbml1ZGJnKFBST0JFLCAibml1X25ld19wYXJlbnQ6IENyZWF0aW5nIG5ldyBwYXJlbnQuXG4iKTsKLQogCXBsYXRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibml1Iiwgbml1X3BhcmVudF9pbmRleCwKIAkJCQkJCSAgIE5VTEwsIDApOwogCWlmIChJU19FUlIocGxhdF9kZXYpKQpAQCAtOTY0MSw5ICs5NTUzLDYgQEAKIAlzdHJ1Y3Qgbml1X3BhcmVudCAqcCwgKnRtcDsKIAlpbnQgcG9ydCA9IG5wLT5wb3J0OwogCi0Jbml1ZGJnKFBST0JFLCAibml1X2dldF9wYXJlbnQ6IHBsYXRmb3JtX3R5cGVbJXVdIHBvcnRbJXVdXG4iLAotCSAgICAgICBwdHlwZSwgcG9ydCk7Ci0KIAltdXRleF9sb2NrKCZuaXVfcGFyZW50X2xvY2spOwogCXAgPSBOVUxMOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmbml1X3BhcmVudF9saXN0LCBsaXN0KSB7CkBAIC05NjgxLDcgKzk1OTAsOCBAQAogCiAJQlVHX09OKCFwIHx8IHAtPnBvcnRzW3BvcnRdICE9IG5wKTsKIAotCW5pdWRiZyhQUk9CRSwgIm5pdV9wdXRfcGFyZW50OiBwb3J0WyV1XVxuIiwgcG9ydCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiJXMoKSBwb3J0WyV1XVxuIiwgX19mdW5jX18sIHBvcnQpOwogCiAJc3ByaW50Zihwb3J0X25hbWUsICJwb3J0JWQiLCBwb3J0KTsKIApAQCAtOTc3Miw3ICs5NjgyLDcgQEAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3Qgbml1KSwgTklVX05VTV9UWENIQU4pOwogCWlmICghZGV2KSB7Ci0JCWRldl9lcnIoZ2VuX2RldiwgUEZYICJFdGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZ2VuX2RldiwgIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTk4NTgsMzAgKzk3NjgsMjYgQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSB8fAogCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiQ2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgIgotCQkJImJhc2UgYWRkcmVzc2VzLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBwcm9wZXIgUENJIGRldmljZSBiYXNlIGFkZHJlc3NlcywgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsICIKLQkJCSJhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKIAl9CiAKIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAlpZiAocG9zIDw9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIkNhbm5vdCBmaW5kIFBDSSBFeHByZXNzIGNhcGFiaWxpdHksICIKLQkJCSJhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9CiAKQEAgLTk5MjAsMTcgKzk4MjYsMTQgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBkbWFfbWFzayk7CiAJCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgUEZYICJVbmFibGUgdG8gb2J0YWluIDQ0IGJpdCAiCi0JCQkJIkRNQSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9ucywgIgotCQkJCSJhYm9ydGluZy5cbiIpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG9idGFpbiA0NCBiaXQgRE1BIGZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7CiAJCX0KIAl9CiAJaWYgKGVyciB8fCBkbWFfbWFzayA9PSBETUFfQklUX01BU0soMzIpKSB7CiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKLQkJCQkiYWJvcnRpbmcuXG4iKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50OwogCQl9CiAJfQpAQCAtOTkzOSw4ICs5ODQyLDcgQEAKIAogCW5wLT5yZWdzID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOwogCWlmICghbnAtPnJlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7CiAJfQpAQCAtOTk1NSwxNSArOTg1NywxMyBAQAogCWVyciA9IG5pdV9nZXRfaW52YXJpYW50cyhucCk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyICE9IC1FTk9ERVYpCi0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzICIKLQkJCQkib2YgY2hpcCwgYWJvcnRpbmcuXG4iKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCkBAIC0xMDE1Nyw3ICsxMDA1Nyw3IEBACiAKIAlyZWcgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJyZWciLCBOVUxMKTsKIAlpZiAoIXJlZykgewotCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIiVzOiBObyAncmVnJyBwcm9wZXJ0eSwgYWJvcnRpbmcuXG4iLAorCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IE5vICdyZWcnIHByb3BlcnR5LCBhYm9ydGluZ1xuIiwKIAkJCW9wLT5ub2RlLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMDE4Niw4ICsxMDA4Niw3IEBACiAJCQkgICAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMV0pLAogCQkJICAgICAgIm5pdSByZWdzIik7CiAJaWYgKCFucC0+cmVncykgewotCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJm9wLT5kZXYsICJDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnMsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50OwogCX0KQEAgLTEwMTk2LDggKzEwMDk1LDcgQEAKIAkJCQkgICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSwKIAkJCQkgICAgIm5pdSB2cmVncy0xIik7CiAJaWYgKCFucC0+dmlyX3JlZ3NfMSkgewotCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHZpciByZWdpc3RlcnMgMSwgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJm9wLT5kZXYsICJDYW5ub3QgbWFwIGRldmljZSB2aXIgcmVnaXN0ZXJzIDEsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQpAQCAtMTAyMDYsOCArMTAxMDQsNyBAQAogCQkJCSAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbM10pLAogCQkJCSAgICAibml1IHZyZWdzLTIiKTsKIAlpZiAoIW5wLT52aXJfcmVnc18yKSB7Ci0JCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgdmlyIHJlZ2lzdGVycyAyLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHZpciByZWdpc3RlcnMgMiwgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CkBAIC0xMDIxNywxNSArMTAxMTQsMTMgQEAKIAllcnIgPSBuaXVfZ2V0X2ludmFyaWFudHMobnApOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciAhPSAtRU5PREVWKQotCQkJZGV2X2Vycigmb3AtPmRldiwgUEZYICJQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgIgotCQkJCSJvZiBjaGlwLCBhYm9ydGluZy5cbiIpOworCQkJZGV2X2Vycigmb3AtPmRldiwgIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2Vycigmb3AtPmRldiwgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJm9wLT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCAxZjYzMjdkLi44ZGQ1MDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xNzE5LDcgKzE3MTksNyBAQAogCWVsc2UKIAkJYW5kX21hc2sgJj0gfihSRkNSX0FBVSB8IFJGQ1JfQUFNKTsKIAotCWlmIChuZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBuZGV2LT5tY19jb3VudCkKKwlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbmV0ZGV2X21jX2NvdW50KG5kZXYpKQogCQlvcl9tYXNrIHw9IFJGQ1JfQUFNOwogCWVsc2UKIAkJYW5kX21hc2sgJj0gflJGQ1JfQUFNOwpAQCAtMjI5Miw3ICsyMjkyLDcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuczgzODIwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuczgzODIwX3BjaV90YmwpID0gewogCXsgMHgxMDBiLCAweDAwMjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIC5kcml2ZXJfZGF0YSA9IDAsIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L29jdGVvbi9vY3Rlb25fbWdtdC5jIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKaW5kZXggMDUwNTM4Yi4uYmUzNjhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKQEAgLTQ2Nyw3ICs0NjcsNiBAQAogewogCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IHBvcnQgPSBwLT5wb3J0OwotCWludCBpOwogCXVuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2N0bCBhZHJfY3RsOwogCXVuaW9uIGN2bXhfYWdsX2dteF9wcnR4X2NmZyBhZ2xfZ214X3BydHg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ5Myw4ICs0OTIsOCBAQAogCX0KIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgewotCQlpZiAoY2FtX21vZGUgPT0gMCB8fCAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKLQkJICAgIHx8IG5ldGRldi0+bWNfY291bnQgID4gYXZhaWxhYmxlX2NhbV9lbnRyaWVzKQorCQlpZiAoY2FtX21vZGUgPT0gMCB8fCAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkJICAgIG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gYXZhaWxhYmxlX2NhbV9lbnRyaWVzKQogCQkJbXVsdGljYXN0X21vZGUgPSAyOyAvKiAxIC0gQWNjZXB0IGFsbCBtdWx0aWNhc3QuICAqLwogCQllbHNlCiAJCQltdWx0aWNhc3RfbW9kZSA9IDA7IC8qIDAgLSBVc2UgQ0FNLiAgKi8KQEAgLTUxMSwxMiArNTEwLDggQEAKIAkJfQogCX0KIAlpZiAobXVsdGljYXN0X21vZGUgPT0gMCkgewotCQlpID0gbmV0ZGV2LT5tY19jb3VudDsKLQkJbGlzdCA9IG5ldGRldi0+bWNfbGlzdDsKLQkJd2hpbGUgKGktLSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihsaXN0LCBuZXRkZXYpCiAJCQlvY3Rlb25fbWdtdF9jYW1fc3RhdGVfYWRkKCZjYW1fc3RhdGUsIGxpc3QtPmRhX2FkZHIpOwotCQkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCX0KIAl9CiAKIApAQCAtMTExOSwxMSArMTExNCw4IEBACiAKIAlpZiAocC0+cG9ydCA+PSBvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2NvdW50KQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiRXJyb3IgJXM6IFVzaW5nIE1BQyBvdXRzaWRlIG9mIHRoZSBhc3NpZ25lZCByYW5nZTogIgotCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBuZXRkZXYtPm5hbWUsCi0JCQluZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLAotCQkJbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKLQkJCW5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCQkJIkVycm9yICVzOiBVc2luZyBNQUMgb3V0c2lkZSBvZiB0aGUgYXNzaWduZWQgcmFuZ2U6ICVwTVxuIiwKKwkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2LT5kZXZfYWRkcik7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IDE2NzNlYjAuLmQ0NGQ0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBhc2VtaV9tYWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBhc2VtaV9tYWNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFTRU1JLCAweGEwMDUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFTRU1JLCAweGEwMDYpIH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwppbmRleCA0ODBhZjQwLi4zNjc4NTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwpAQCAtMTEsNyArMTEsNyBAQAogCiAJLS0tLS08c25pcD4tLS0tLQogCi0gICAgICAgIAlXcml0dGVuIDE5OTctMjAwMCBieSBEb25hbGQgQmVja2VyLgorCQlXcml0dGVuIDE5OTctMjAwMCBieSBEb25hbGQgQmVja2VyLgogCQlUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCiAJCXRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkCiAJCWhlcmVpbiBieSByZWZlcmVuY2UuICBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzCkBAIC04NSw2ICs4NSw4IEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtOTYsMTYgKzk4LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2RlZmluZSBORVREUlZfVkVSU0lPTgkJIjEuMC4xIgogI2RlZmluZSBNT0ROQU1FCQkJIm5ldGRydiIKICNkZWZpbmUgTkVURFJWX0RSSVZFUl9MT0FEX01TRwkiTXlWZW5kb3IgRmFzdCBFdGhlcm5ldCBkcml2ZXIgIiBORVREUlZfVkVSU0lPTiAiIGxvYWRlZCIKLSNkZWZpbmUgUEZYCQkJTU9ETkFNRSAiOiAiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBORVREUlZfRFJJVkVSX0xPQURfTVNHICJcbiIKLSIgIFN1cHBvcnQgYXZhaWxhYmxlIGZyb20gaHR0cDovL2Zvby5jb20vYmFyL2Jhei5odG1sXG4iOworCUtFUk5fSU5GTyBORVREUlZfRFJJVkVSX0xPQURfTVNHICJcbiIKKwkiICBTdXBwb3J0IGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9mb28uY29tL2Jhci9iYXouaHRtbFxuIjsKIAogLyogZGVmaW5lIHRvIDEgdG8gZW5hYmxlIFBJTyBpbnN0ZWFkIG9mIE1NSU8gKi8KICN1bmRlZiBVU0VfSU9fT1BTCkBAIC0xMTksMTkgKzEyMCwyNCBAQAogCiAjaWZkZWYgTkVURFJWX0RFQlVHCiAvKiBub3RlOiBwcmludHMgZnVuY3Rpb24gbmFtZSBmb3IgeW91ICovCi0jICBkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIF9fZnVuY19fICwgIyMgYXJncykKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQogI2Vsc2UKLSMgIGRlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmICgwKQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI2FyZ3MpOwkJXAorfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWZkZWYgTkVURFJWX05ERUJVRwotIyAgZGVmaW5lIGFzc2VydChleHByKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYXNzZXJ0KGV4cHIpIGRvIHt9IHdoaWxlICgwKQogI2Vsc2UKLSMgIGRlZmluZSBhc3NlcnQoZXhwcikgXAotICAgICAgICBpZighKGV4cHIpKSB7CQkJCQlcCi0gICAgICAgIHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsCVwKLSAgICAgICAgI2V4cHIsX19GSUxFX18sX19mdW5jX18sX19MSU5FX18pOwkJXAotICAgICAgICB9CisjZGVmaW5lIGFzc2VydChleHByKQkJCQkJCVwKKwlpZiAoIShleHByKSkgewkJCQkJCVwKKwkJcHJpbnRrKCJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLAlcCisJCSAgICAgICAjZXhwciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CVwKKwl9CiAjZW5kaWYKIAogCkBAIC0xNDgsMTAgKzE1NCwxMCBAQAogCiAvKiBTaXplIG9mIHRoZSBpbi1tZW1vcnkgcmVjZWl2ZSByaW5nLiAqLwogI2RlZmluZSBSWF9CVUZfTEVOX0lEWAkyCS8qIDA9PThLLCAxPT0xNkssIDI9PTMySywgMz09NjRLICovCi0jZGVmaW5lIFJYX0JVRl9MRU4gKDgxOTIgPDwgUlhfQlVGX0xFTl9JRFgpCi0jZGVmaW5lIFJYX0JVRl9QQUQgMTYKKyNkZWZpbmUgUlhfQlVGX0xFTgkoODE5MiA8PCBSWF9CVUZfTEVOX0lEWCkKKyNkZWZpbmUgUlhfQlVGX1BBRAkxNgogI2RlZmluZSBSWF9CVUZfV1JBUF9QQUQgMjA0OCAvKiBzcGFyZSBwYWRkaW5nIHRvIGhhbmRsZSBsYWNrIG9mIHBhY2tldCB3cmFwICovCi0jZGVmaW5lIFJYX0JVRl9UT1RfTEVOIChSWF9CVUZfTEVOICsgUlhfQlVGX1BBRCArIFJYX0JVRl9XUkFQX1BBRCkKKyNkZWZpbmUgUlhfQlVGX1RPVF9MRU4JKFJYX0JVRl9MRU4gKyBSWF9CVUZfUEFEICsgUlhfQlVGX1dSQVBfUEFEKQogCiAvKiBOdW1iZXIgb2YgVHggZGVzY3JpcHRvciByZWdpc3RlcnMuICovCiAjZGVmaW5lIE5VTV9UWF9ERVNDCTQKQEAgLTE2NSw5ICsxNzEsMTEgQEAKIAogLyogUENJIFR1bmluZyBQYXJhbWV0ZXJzCiAgICBUaHJlc2hvbGQgaXMgYnl0ZXMgdHJhbnNmZXJyZWQgdG8gY2hpcCBiZWZvcmUgdHJhbnNtaXNzaW9uIHN0YXJ0cy4gKi8KLSNkZWZpbmUgVFhfRklGT19USFJFU0ggMjU2CS8qIEluIGJ5dGVzLCByb3VuZGVkIGRvd24gdG8gMzIgYnl0ZSB1bml0cy4gKi8KKyNkZWZpbmUgVFhfRklGT19USFJFU0gJMjU2CS8qIEluIGJ5dGVzLCByb3VuZGVkIGRvd24gdG8gMzIgYnl0ZSB1bml0cy4gKi8KIAotLyogVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbG9nXzIoYnl0ZXMpLTQ6ICAwID09IDE2IGJ5dGVzIC4uIDY9PTEwMjQsIDc9PWVuZCBvZiBwYWNrZXQuICovCisvKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBsb2dfMihieXRlcyktNDoKKyAgIDA9PTE2IGJ5dGVzIDE9PTMyIDI9PTY0IDM9PTEyOCA0PT0yNTYgNT09NTEyIDY9PTEwMjQgNz09ZW5kIG9mIHBhY2tldC4KKyovCiAjZGVmaW5lIFJYX0ZJRk9fVEhSRVNICTYJLyogUnggYnVmZmVyIGxldmVsIGJlZm9yZSBmaXJzdCBQQ0kgeGZlci4gICovCiAjZGVmaW5lIFJYX0RNQV9CVVJTVAk2CS8qIE1heGltdW0gUENJIGJ1cnN0LCAnNicgaXMgMTAyNCAqLwogI2RlZmluZSBUWF9ETUFfQlVSU1QJNgkvKiBNYXhpbXVtIFBDSSBidXJzdCwgJzYnIGlzIDEwMjQgKi8KQEAgLTE3NSw4ICsxODMsNyBAQAogCiAvKiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgdXN1YWxseSBhcmUgbm90IGNoYW5nZWQuICovCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCi0jZGVmaW5lIFRYX1RJTUVPVVQgICg2KkhaKQotCisjZGVmaW5lIFRYX1RJTUVPVVQJKDYgKiBIWikKIAogZW51bSB7CiAJSEFTX0NISVBfWENWUiA9IDB4MDIwMDAwLApAQCAtMTg2LDcgKzE5Myw3IEBACiAjZGVmaW5lIE5FVERSVl9NSU5fSU9fU0laRSAweDgwCiAjZGVmaW5lIFJUTDgxMzlCX0lPX1NJWkUgMjU2CiAKLSNkZWZpbmUgTkVURFJWX0NBUFMJSEFTX0NISVBfWENWUnxIQVNfTE5LX0NITkcKKyNkZWZpbmUgTkVURFJWX0NBUFMJKEhBU19DSElQX1hDVlIgfCBIQVNfTE5LX0NITkcpCiAKIHR5cGVkZWYgZW51bSB7CiAJUlRMODEzOSA9IDAsCkBAIC0yMTEsNyArMjE4LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5ldGRydl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmV0ZHJ2X3BjaV90YmwpID0gewogCXsweDEwZWMsIDB4ODEzOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDEwZWMsIDB4ODEzOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTkVURFJWX0NCIH0sCiAJezB4MTExMywgMHgxMjExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBTTUMxMjExVFggfSwKQEAgLTIyMCw3ICsyMjcsNyBAQAogCXsweDQwMzMsIDB4MTM2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQUREVFJPTjgxMzkgfSwKIAl7MCx9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBuZXRkcnZfcGNpX3RibCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmV0ZHJ2X3BjaV90YmwpOwogCiAKIC8qIFRoZSByZXN0IG9mIHRoZXNlIHZhbHVlcyBzaG91bGQgbmV2ZXIgY2hhbmdlLiAqLwpAQCAtMjcwLDcgKzI3Nyw3IEBACiBlbnVtIENsZWFyQml0TWFza3MgewogCU11bHRpSW50ckNsZWFyID0gMHhGMDAwLAogCUNoaXBDbWRDbGVhciA9IDB4RTIsCi0JQ29uZmlnMUNsZWFyID0gKDE8PDcpfCgxPDw2KXwoMTw8Myl8KDE8PDIpfCgxPDwxKSwKKwlDb25maWcxQ2xlYXIgPSAoMSA8PCA3KSB8ICgxIDw8IDYpIHwgKDEgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDEpLAogfTsKIAogZW51bSBDaGlwQ21kQml0cyB7CkBAIC0zMjksNyArMzM2LDcgQEAKIAlUeExvb3BCYWNrID0gKDEgPDwgMTgpIHwgKDEgPDwgMTcpLCAvKiBlbmFibGUgbG9vcGJhY2sgdGVzdCBtb2RlICovCiAJVHhDUkMgPSAoMSA8PCAxNiksCS8qIERJU0FCTEUgYXBwZW5kaW5nIENSQyB0byBlbmQgb2YgVHggcGFja2V0cyAqLwogCVR4Q2xlYXJBYnQgPSAoMSA8PCAwKSwJLyogQ2xlYXIgYWJvcnQgKFdPKSAqLwotCVR4RE1BU2hpZnQgPSA4LAkJLyogRE1BIGJ1cnN0IHZhbHVlICgwLTcpIGlzIHNoaWZ0IHRoaXMgbWFueSBiaXRzICovCisJVHhETUFTaGlmdCA9IDgsCQkvKiBETUEgYnVyc3QgdmFsdWUoMC03KSBpcyBzaGlmdCB0aGlzIG1hbnkgYml0cyAqLwogCiAJVHhWZXJzaW9uTWFzayA9IDB4N0M4MDAwMDAsIC8qIG1hc2sgb3V0IHZlcnNpb24gYml0cyAzMC0yNiwgMjMgKi8KIH07CkBAIC00ODEsNDEgKzQ4OCw0NCBAQAogCWNoaXBfdCBjaGlwc2V0OwogfTsKIAotTU9EVUxFX0FVVEhPUiAoIkplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNrZWxldG9uIGZvciBhIFBDSSBGYXN0IEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTa2VsZXRvbiBmb3IgYSBQQ0kgRmFzdCBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIG1vZHVsZV9wYXJhbShtdWx0aWNhc3RfZmlsdGVyX2xpbWl0LCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtZWRpYSwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MgKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsICJwY2ktc2tlbGV0b24gbWF4aW11bSBudW1iZXIgb2YgZmlsdGVyZWQgbXVsdGljYXN0IGFkZHJlc3NlcyIpOwotTU9EVUxFX1BBUk1fREVTQyAobWF4X2ludGVycnVwdF93b3JrLCAicGNpLXNrZWxldG9uIG1heGltdW0gZXZlbnRzIGhhbmRsZWQgcGVyIGludGVycnVwdCIpOwotTU9EVUxFX1BBUk1fREVTQyAobWVkaWEsICJwY2ktc2tlbGV0b246IEJpdHMgMC0zOiBtZWRpYSB0eXBlLCBiaXQgMTc6IGZ1bGwgZHVwbGV4Iik7CitNT0RVTEVfUEFSTV9ERVNDKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsCisJCSBNT0ROQU1FICIgbWF4aW11bSBudW1iZXIgb2YgZmlsdGVyZWQgbXVsdGljYXN0IGFkZHJlc3NlcyIpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfaW50ZXJydXB0X3dvcmssCisJCSBNT0ROQU1FICIgbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CitNT0RVTEVfUEFSTV9ERVNDKG1lZGlhLAorCQkgTU9ETkFNRSAiIEJpdHMgMC0zOiBtZWRpYSB0eXBlLCBiaXQgMTc6IGZ1bGwgZHVwbGV4Iik7CiAKLXN0YXRpYyBpbnQgcmVhZF9lZXByb20gKHZvaWQgKmlvYWRkciwgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4pOwotc3RhdGljIGludCBuZXRkcnZfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG1kaW9fcmVhZCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKLQkJCWludCB2YWwpOwotc3RhdGljIHZvaWQgbmV0ZHJ2X3RpbWVyICh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgbmV0ZHJ2X2luaXRfcmluZyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG5ldGRydl9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGlycXJldHVybl90IG5ldGRydl9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7Ci1zdGF0aWMgaW50IG5ldGRydl9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG5ldGRydl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgdm9pZCBuZXRkcnZfc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgbmV0ZHJ2X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgcmVhZF9lZXByb20odm9pZCAqaW9hZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7CitzdGF0aWMgaW50IG5ldGRydl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKK3N0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAorCQkgICAgICAgaW50IHZhbCk7CitzdGF0aWMgdm9pZCBuZXRkcnZfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIG5ldGRydl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgbmV0ZHJ2X2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbmV0ZHJ2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgbmV0ZHJ2X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOworc3RhdGljIGludCBuZXRkcnZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG5ldGRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyB2b2lkIG5ldGRydl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIG5ldGRydl9od19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogCiAjaWZkZWYgVVNFX0lPX09QUwogCi0jZGVmaW5lIE5FVERSVl9SOChyZWcpCQlpbmIgKCgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9SMTYocmVnKQkJaW53ICgoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQotI2RlZmluZSBORVREUlZfUjMyKHJlZykJCSgodW5zaWduZWQgbG9uZykgaW5sICgoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKSkKLSNkZWZpbmUgTkVURFJWX1c4KHJlZywgdmFsOCkJb3V0YiAoKHZhbDgpLCAoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQotI2RlZmluZSBORVREUlZfVzE2KHJlZywgdmFsMTYpCW91dHcgKCh2YWwxNiksICgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9XMzIocmVnLCB2YWwzMikJb3V0bCAoKHZhbDMyKSwgKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1I4KHJlZykJCWluYigoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQorI2RlZmluZSBORVREUlZfUjE2KHJlZykJCWludygoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQorI2RlZmluZSBORVREUlZfUjMyKHJlZykJCSgodW5zaWduZWQgbG9uZylpbmwoKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkpCisjZGVmaW5lIE5FVERSVl9XOChyZWcsIHZhbDgpCW91dGIoKHZhbDgpLCAoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQorI2RlZmluZSBORVREUlZfVzE2KHJlZywgdmFsMTYpCW91dHcoKHZhbDE2KSwgKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1czMihyZWcsIHZhbDMyKQlvdXRsKCh2YWwzMiksICgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCiAjZGVmaW5lIE5FVERSVl9XOF9GCQlORVREUlZfVzgKICNkZWZpbmUgTkVURFJWX1cxNl9GCQlORVREUlZfVzE2CiAjZGVmaW5lIE5FVERSVl9XMzJfRgkJTkVURFJWX1czMgpAQCAtNTI4LDI1ICs1MzgsMzcgQEAKICNkZWZpbmUgcmVhZGIoYWRkcikgaW5iKCh1bnNpZ25lZCBsb25nKShhZGRyKSkKICNkZWZpbmUgcmVhZHcoYWRkcikgaW53KCh1bnNpZ25lZCBsb25nKShhZGRyKSkKICNkZWZpbmUgcmVhZGwoYWRkcikgaW5sKCh1bnNpZ25lZCBsb25nKShhZGRyKSkKLSNkZWZpbmUgd3JpdGViKHZhbCxhZGRyKSBvdXRiKCh2YWwpLCh1bnNpZ25lZCBsb25nKShhZGRyKSkKLSNkZWZpbmUgd3JpdGV3KHZhbCxhZGRyKSBvdXR3KCh2YWwpLCh1bnNpZ25lZCBsb25nKShhZGRyKSkKLSNkZWZpbmUgd3JpdGVsKHZhbCxhZGRyKSBvdXRsKCh2YWwpLCh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgd3JpdGViKHZhbCwgYWRkcikgb3V0YigodmFsKSwgKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQorI2RlZmluZSB3cml0ZXcodmFsLCBhZGRyKSBvdXR3KCh2YWwpLCAodW5zaWduZWQgbG9uZykoYWRkcikpCisjZGVmaW5lIHdyaXRlbCh2YWwsIGFkZHIpIG91dGwoKHZhbCksICh1bnNpZ25lZCBsb25nKShhZGRyKSkKIAogI2Vsc2UKIAogLyogd3JpdGUgTU1JTyByZWdpc3Rlciwgd2l0aCBmbHVzaCAqLwogLyogRmx1c2ggYXZvaWRzIHJ0bDgxMzkgYnVnIHcvIHBvc3RlZCBNTUlPIHdyaXRlcyAqLwotI2RlZmluZSBORVREUlZfVzhfRihyZWcsIHZhbDgpCWRvIHsgd3JpdGViICgodmFsOCksIGlvYWRkciArIChyZWcpKTsgcmVhZGIgKGlvYWRkciArIChyZWcpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTkVURFJWX1cxNl9GKHJlZywgdmFsMTYpCWRvIHsgd3JpdGV3ICgodmFsMTYpLCBpb2FkZHIgKyAocmVnKSk7IHJlYWR3IChpb2FkZHIgKyAocmVnKSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIE5FVERSVl9XMzJfRihyZWcsIHZhbDMyKQlkbyB7IHdyaXRlbCAoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpOyByZWFkbCAoaW9hZGRyICsgKHJlZykpOyB9IHdoaWxlICgwKQorI2RlZmluZSBORVREUlZfVzhfRihyZWcsIHZhbDgpCQkJXAorZG8gewkJCQkJCVwKKwl3cml0ZWIoKHZhbDgpLCBpb2FkZHIgKyAocmVnKSk7CQlcCisJcmVhZGIoaW9hZGRyICsgKHJlZykpOwkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5FVERSVl9XMTZfRihyZWcsIHZhbDE2KQkJXAorZG8gewkJCQkJCVwKKwl3cml0ZXcoKHZhbDE2KSwgaW9hZGRyICsgKHJlZykpOwlcCisJcmVhZHcoaW9hZGRyICsgKHJlZykpOwkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5FVERSVl9XMzJfRihyZWcsIHZhbDMyKQkJXAorZG8gewkJCQkJCVwKKwl3cml0ZWwoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpOwlcCisJcmVhZGwoaW9hZGRyICsgKHJlZykpOwkJCVwKK30gd2hpbGUgKDApCiAKIAogI2lmZGVmIE1NSU9fRkxVU0hfQVVESVRfQ09NUExFVEUKIAogLyogd3JpdGUgTU1JTyByZWdpc3RlciAqLwotI2RlZmluZSBORVREUlZfVzgocmVnLCB2YWw4KQl3cml0ZWIgKCh2YWw4KSwgaW9hZGRyICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9XMTYocmVnLCB2YWwxNikJd3JpdGV3ICgodmFsMTYpLCBpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgTkVURFJWX1czMihyZWcsIHZhbDMyKQl3cml0ZWwgKCh2YWwzMiksIGlvYWRkciArIChyZWcpKQorI2RlZmluZSBORVREUlZfVzgocmVnLCB2YWw4KQl3cml0ZWIoKHZhbDgpLCBpb2FkZHIgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1cxNihyZWcsIHZhbDE2KQl3cml0ZXcoKHZhbDE2KSwgaW9hZGRyICsgKHJlZykpCisjZGVmaW5lIE5FVERSVl9XMzIocmVnLCB2YWwzMikJd3JpdGVsKCh2YWwzMiksIGlvYWRkciArIChyZWcpKQogCiAjZWxzZQogCkBAIC01NTgsOSArNTgwLDkgQEAKICNlbmRpZiAvKiBNTUlPX0ZMVVNIX0FVRElUX0NPTVBMRVRFICovCiAKIC8qIHJlYWQgTU1JTyByZWdpc3RlciAqLwotI2RlZmluZSBORVREUlZfUjgocmVnKQkJcmVhZGIgKGlvYWRkciArIChyZWcpKQotI2RlZmluZSBORVREUlZfUjE2KHJlZykJCXJlYWR3IChpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgTkVURFJWX1IzMihyZWcpCQkoKHVuc2lnbmVkIGxvbmcpIHJlYWRsIChpb2FkZHIgKyAocmVnKSkpCisjZGVmaW5lIE5FVERSVl9SOChyZWcpCQlyZWFkYihpb2FkZHIgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1IxNihyZWcpCQlyZWFkdyhpb2FkZHIgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1IzMihyZWcpCQkoKHVuc2lnbmVkIGxvbmcpIHJlYWRsKGlvYWRkciArIChyZWcpKSkKIAogI2VuZGlmIC8qIFVTRV9JT19PUFMgKi8KIApAQCAtNTcwLDE0ICs1OTIsMTQgQEAKIAlUeEVyciB8IFR4T0sgfCBSeEVyciB8IFJ4T0s7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmV0ZHJ2X3J4X2NvbmZpZyA9Ci0JICBSeENmZ0Vhcmx5UnhOb25lIHwgUnhDZmdSY3YzMksgfCBSeE5vV3JhcCB8Ci0JICAoUlhfRklGT19USFJFU0ggPDwgUnhDZmdGSUZPU2hpZnQpIHwKLQkgIChSWF9ETUFfQlVSU1QgPDwgUnhDZmdETUFTaGlmdCk7CisJUnhDZmdFYXJseVJ4Tm9uZSB8IFJ4Q2ZnUmN2MzJLIHwgUnhOb1dyYXAgfAorCShSWF9GSUZPX1RIUkVTSCA8PCBSeENmZ0ZJRk9TaGlmdCkgfAorCShSWF9ETUFfQlVSU1QgPDwgUnhDZmdETUFTaGlmdCk7CiAKIAotc3RhdGljIGludCBfX2RldmluaXQgbmV0ZHJ2X2luaXRfYm9hcmQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfb3V0LAotCQkJCQkgdm9pZCAqKmlvYWRkcl9vdXQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRkcnZfaW5pdF9ib2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfb3V0LAorCQkJCSAgICAgICB2b2lkICoqaW9hZGRyX291dCkKIHsKIAl2b2lkICppb2FkZHIgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC01ODcsNDMgKzYwOSw0MyBAQAogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19lbmQsIG1taW9fZmxhZ3MsIG1taW9fbGVuOwogCXUzMiB0bXA7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCWFzc2VydCAocGRldiAhPSBOVUxMKTsKLQlhc3NlcnQgKGlvYWRkcl9vdXQgIT0gTlVMTCk7CisJYXNzZXJ0KHBkZXYgIT0gTlVMTCk7CisJYXNzZXJ0KGlvYWRkcl9vdXQgIT0gTlVMTCk7CiAKIAkqaW9hZGRyX291dCA9IE5VTEw7CiAJKmRldl9vdXQgPSBOVUxMOwogCiAJLyogZGV2IHplcm9lZCBpbiBhbGxvY19ldGhlcmRldiAqLwotCWRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2YgKCp0cCkpOworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqdHApKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jIG5ldyBldGhlcm5ldFxuIik7Ci0JCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgLUVOT01FTVxuIik7CisJCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAtRU5PTUVNXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAJdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JLyogZW5hYmxlIGRldmljZSAoaW5jbC4gUENJIFBNIHdha2V1cCksIGFuZCBidXMtbWFzdGVyaW5nICovCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZSAocGRldik7CisJLyogZW5hYmxlIGRldmljZShpbmNsLiBQQ0kgUE0gd2FrZXVwKSwgYW5kIGJ1cy1tYXN0ZXJpbmcgKi8KKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCi0JcGlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKTsKLQlwaW9fZW5kID0gcGNpX3Jlc291cmNlX2VuZCAocGRldiwgMCk7Ci0JcGlvX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzIChwZGV2LCAwKTsKLQlwaW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCk7CisJcGlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXBpb19lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApOworCXBpb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKTsKKwlwaW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAotCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDEpOwotCW1taW9fZW5kID0gcGNpX3Jlc291cmNlX2VuZCAocGRldiwgMSk7Ci0JbW1pb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyAocGRldiwgMSk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAxKTsKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCW1taW9fZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCAxKTsKKwltbWlvX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDEpOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKIAogCS8qIHNldCB0aGlzIGltbWVkaWF0ZWx5LCB3ZSBuZWVkIHRvIGtub3cgYmVmb3JlCiAJICogd2UgdGFsayB0byB0aGUgY2hpcCBkaXJlY3RseSAqLwotCURQUklOVEsoIlBJTyByZWdpb24gc2l6ZSA9PSAweCUwMlhcbiIsIHBpb19sZW4pOwotCURQUklOVEsoIk1NSU8gcmVnaW9uIHNpemUgPT0gMHglMDJsWFxuIiwgbW1pb19sZW4pOworCURQUklOVEsoIlBJTyByZWdpb24gc2l6ZSA9PSAlIzAyWFxuIiwgcGlvX2xlbik7CisJRFBSSU5USygiTU1JTyByZWdpb24gc2l6ZSA9PSAlIzAybFhcbiIsIG1taW9fbGVuKTsKIAogCS8qIG1ha2Ugc3VyZSBQQ0kgYmFzZSBhZGRyIDAgaXMgUElPICovCiAJaWYgKCEocGlvX2ZsYWdzICYgSU9SRVNPVVJDRV9JTykpIHsKQEAgLTY0NywxNyArNjY5LDE3IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMgKHBkZXYsIE1PRE5BTUUpOworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBNT0ROQU1FKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAotCXBjaV9zZXRfbWFzdGVyIChwZGV2KTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogI2lmZGVmIFVTRV9JT19PUFMKLQlpb2FkZHIgPSAodm9pZCAqKSBwaW9fc3RhcnQ7CisJaW9hZGRyID0gKHZvaWQgKilwaW9fc3RhcnQ7CiAjZWxzZQogCS8qIGlvcmVtYXAgTU1JTyByZWdpb24gKi8KLQlpb2FkZHIgPSBpb3JlbWFwIChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CiAJaWYgKGlvYWRkciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVJTzsKQEAgLTY2Niw1MiArNjg4LDUwIEBACiAjZW5kaWYgLyogVVNFX0lPX09QUyAqLwogCiAJLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KLQlORVREUlZfVzggKENoaXBDbWQsIChORVREUlZfUjggKENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSB8IENtZFJlc2V0KTsKKwlORVREUlZfVzgoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfCBDbWRSZXNldCk7CiAKIAkvKiBDaGVjayB0aGF0IHRoZSBjaGlwIGhhcyBmaW5pc2hlZCB0aGUgcmVzZXQuICovCiAJZm9yIChpID0gMTAwMDsgaSA+IDA7IGktLSkKLQkJaWYgKChORVREUlZfUjggKENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCisJCWlmICgoTkVURFJWX1I4KENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCiAJCQlicmVhazsKIAkJZWxzZQotCQkJdWRlbGF5ICgxMCk7CisJCQl1ZGVsYXkoMTApOwogCiAJLyogQnJpbmcgdGhlIGNoaXAgb3V0IG9mIGxvdy1wb3dlciBtb2RlLiAqLwogCS8qIDxpbnNlcnQgZGV2aWNlLXNwZWNpZmljIGNvZGUgaGVyZT4gKi8KIAogI2lmbmRlZiBVU0VfSU9fT1BTCiAJLyogc2FuaXR5IGNoZWNrcyAtLSBlbnN1cmUgUElPIGFuZCBNTUlPIHJlZ2lzdGVycyBhZ3JlZSAqLwotCWFzc2VydCAoaW5iIChwaW9fc3RhcnQrQ29uZmlnMCkgPT0gcmVhZGIgKGlvYWRkcitDb25maWcwKSk7Ci0JYXNzZXJ0IChpbmIgKHBpb19zdGFydCtDb25maWcxKSA9PSByZWFkYiAoaW9hZGRyK0NvbmZpZzEpKTsKLQlhc3NlcnQgKGluYiAocGlvX3N0YXJ0K1R4Q29uZmlnKSA9PSByZWFkYiAoaW9hZGRyK1R4Q29uZmlnKSk7Ci0JYXNzZXJ0IChpbmIgKHBpb19zdGFydCtSeENvbmZpZykgPT0gcmVhZGIgKGlvYWRkcitSeENvbmZpZykpOworCWFzc2VydChpbmIocGlvX3N0YXJ0K0NvbmZpZzApID09IHJlYWRiKGlvYWRkcitDb25maWcwKSk7CisJYXNzZXJ0KGluYihwaW9fc3RhcnQrQ29uZmlnMSkgPT0gcmVhZGIoaW9hZGRyK0NvbmZpZzEpKTsKKwlhc3NlcnQoaW5iKHBpb19zdGFydCtUeENvbmZpZykgPT0gcmVhZGIoaW9hZGRyK1R4Q29uZmlnKSk7CisJYXNzZXJ0KGluYihwaW9fc3RhcnQrUnhDb25maWcpID09IHJlYWRiKGlvYWRkcitSeENvbmZpZykpOwogI2VuZGlmIC8qICFVU0VfSU9fT1BTICovCiAKIAkvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovCi0JdG1wID0gTkVURFJWX1I4IChDaGlwVmVyc2lvbik7Ci0JZm9yIChpID0gQVJSQVlfU0laRSAocnRsX2NoaXBfaW5mbykgLSAxOyBpID49IDA7IGktLSkKKwl0bXAgPSBORVREUlZfUjgoQ2hpcFZlcnNpb24pOworCWZvciAoaSA9IEFSUkFZX1NJWkUocnRsX2NoaXBfaW5mbykgLSAxOyBpID49IDA7IGktLSkKIAkJaWYgKHRtcCA9PSBydGxfY2hpcF9pbmZvW2ldLnZlcnNpb24pIHsKIAkJCXRwLT5jaGlwc2V0ID0gaTsKIAkJCWdvdG8gbWF0Y2g7CiAJCX0KIAogCS8qIGlmIHVua25vd24gY2hpcCwgYXNzdW1lIGFycmF5IGVsZW1lbnQgIzAsIG9yaWdpbmFsIFJUTC04MTM5IGluIHRoaXMgY2FzZSAqLwotCWRldl9wcmludGsgKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCi0JCSJ1bmtub3duIGNoaXAgdmVyc2lvbiwgYXNzdW1pbmcgUlRMLTgxMzlcbiIpOwotCWRldl9wcmludGsgKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJUeENvbmZpZyA9IDB4JWx4XG4iLAotCQlORVREUlZfUjMyIChUeENvbmZpZykpOworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKKwkJICAgInVua25vd24gY2hpcCB2ZXJzaW9uLCBhc3N1bWluZyBSVEwtODEzOVxuIik7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiVHhDb25maWcgPSAlI2x4XG4iLAorCQkgICBORVREUlZfUjMyKFR4Q29uZmlnKSk7CiAJdHAtPmNoaXBzZXQgPSAwOwogCiBtYXRjaDoKLQlEUFJJTlRLICgiY2hpcHNldCBpZCAoJWQpID09IGluZGV4ICVkLCAnJXMnXG4iLAotCQl0bXAsCi0JCXRwLT5jaGlwc2V0LAotCQlydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lKTsKKwlEUFJJTlRLKCJjaGlwc2V0IGlkKCVkKSA9PSBpbmRleCAlZCwgJyVzJ1xuIiwKKwkJdG1wLCB0cC0+Y2hpcHNldCwgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSk7CiAKLQlyYyA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKKwlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCi0JRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAwXG4iKTsKKwlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CiAJKmlvYWRkcl9vdXQgPSBpb2FkZHI7CiAJKmRldl9vdXQgPSBkZXY7CiAJcmV0dXJuIDA7CkBAIC03MjEsMTAgKzc0MSwxMCBAQAogCWlvdW5tYXAoaW9hZGRyKTsKIGVycl9vdXRfZnJlZV9yZXM6CiAjZW5kaWYKLQlwY2lfcmVsZWFzZV9yZWdpb25zIChwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX291dDoKLQlmcmVlX25ldGRldiAoZGV2KTsKLQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByYyk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTc0MCw4ICs3NjAsOCBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbmV0ZHJ2X2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5ldGRydl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cDsKQEAgLTc1NiwyOSArNzc2LDI5IEBACiAJCXByaW50ayh2ZXJzaW9uKTsKICNlbmRpZgogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKLQlhc3NlcnQgKHBkZXYgIT0gTlVMTCk7Ci0JYXNzZXJ0IChlbnQgIT0gTlVMTCk7CisJYXNzZXJ0KHBkZXYgIT0gTlVMTCk7CisJYXNzZXJ0KGVudCAhPSBOVUxMKTsKIAogCWJvYXJkX2lkeCsrOwogCi0JaSA9IG5ldGRydl9pbml0X2JvYXJkIChwZGV2LCAmZGV2LCAmaW9hZGRyKTsKKwlpID0gbmV0ZHJ2X2luaXRfYm9hcmQocGRldiwgJmRldiwgJmlvYWRkcik7CiAJaWYgKGkgPCAwKSB7Ci0JCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIGkpOworCQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIGkpOwogCQlyZXR1cm4gaTsKIAl9CiAKIAl0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlhc3NlcnQgKGlvYWRkciAhPSBOVUxMKTsKLQlhc3NlcnQgKGRldiAhPSBOVUxMKTsKLQlhc3NlcnQgKHRwICE9IE5VTEwpOworCWFzc2VydChpb2FkZHIgIT0gTlVMTCk7CisJYXNzZXJ0KGRldiAhPSBOVUxMKTsKKwlhc3NlcnQodHAgIT0gTlVMTCk7CiAKLQlhZGRyX2xlbiA9IHJlYWRfZWVwcm9tIChpb2FkZHIsIDAsIDgpID09IDB4ODEyOSA/IDggOiA2OworCWFkZHJfbGVuID0gcmVhZF9lZXByb20oaW9hZGRyLCAwLCA4KSA9PSAweDgxMjkgPyA4IDogNjsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkoKHUxNiAqKSAoZGV2LT5kZXZfYWRkcikpW2ldID0KLQkJICAgIGxlMTZfdG9fY3B1IChyZWFkX2VlcHJvbSAoaW9hZGRyLCBpICsgNywgYWRkcl9sZW4pKTsKKwkJKCh1MTYgKikoZGV2LT5kZXZfYWRkcikpW2ldID0KKwkJCWxlMTZfdG9fY3B1KHJlYWRfZWVwcm9tKGlvYWRkciwgaSArIDcsIGFkZHJfbGVuKSk7CiAKIAlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZHJ2X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CkBAIC03OTEsNyArODExLDcgQEAKIAogCS8qIG5vdGU6IHRwLT5jaGlwc2V0IHNldCBpbiBuZXRkcnZfaW5pdF9ib2FyZCAqLwogCXRwLT5kcnZfZmxhZ3MgPSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8Ci0JCQlQQ0lfQ09NTUFORF9NQVNURVIgfCBORVREUlZfQ0FQUzsKKwkJUENJX0NPTU1BTkRfTUFTVEVSIHwgTkVURFJWX0NBUFM7CiAJdHAtPnBjaV9kZXYgPSBwZGV2OwogCXRwLT5ib2FyZCA9IGVudC0+ZHJpdmVyX2RhdGE7CiAJdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKQEAgLTgwMSwxOCArODIxLDE1IEBACiAKIAl0cC0+cGh5c1swXSA9IDMyOwogCi0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiAlcyBhdCAweCVseCwgJXBNIElSUSAlZFxuIiwKLQkJZGV2LT5uYW1lLAotCQlib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCi0JCWRldi0+YmFzZV9hZGRyLAotCQlkZXYtPmRldl9hZGRyLAotCQlkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiJXMgYXQgJSNseCwgJXBNIElSUSAlZFxuIiwKKwkJICAgIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKKwkJICAgIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CiAKLQlwcmludGsgKEtFUk5fREVCVUcgIiVzOiAgSWRlbnRpZmllZCA4MTM5IGNoaXAgdHlwZSAnJXMnXG4iLAotCQlkZXYtPm5hbWUsIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUpOworCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiSWRlbnRpZmllZCA4MTM5IGNoaXAgdHlwZSAnJXMnXG4iLAorCQkgICAgICBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lKTsKIAogCS8qIFB1dCB0aGUgY2hpcCBpbnRvIGxvdy1wb3dlciBtb2RlLiAqLwotCU5FVERSVl9XOF9GIChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJTkVURFJWX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwogCiAJLyogVGhlIGxvd2VyIGZvdXIgYml0cyBhcmUgdGhlIG1lZGlhIHR5cGUuICovCiAJb3B0aW9uID0gKGJvYXJkX2lkeCA+IDcpID8gMCA6IG1lZGlhW2JvYXJkX2lkeF07CkBAIC04MjQsNDUgKzg0MSw0MyBAQAogCX0KIAogCWlmICh0cC0+ZnVsbF9kdXBsZXgpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8KLQkJCSIlczogTWVkaWEgdHlwZSBmb3JjZWQgdG8gRnVsbCBEdXBsZXguXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJbWRpb193cml0ZSAoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0FEVkVSVElTRSwgQURWRVJUSVNFX0ZVTEwpOworCQluZXRkZXZfaW5mbyhkZXYsICJNZWRpYSB0eXBlIGZvcmNlZCB0byBGdWxsIER1cGxleFxuIik7CisJCW1kaW9fd3JpdGUoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0FEVkVSVElTRSwgQURWRVJUSVNFX0ZVTEwpOwogCQl0cC0+ZHVwbGV4X2xvY2sgPSAxOwogCX0KIAotCURQUklOVEsgKCJFWElUIC0gcmV0dXJuaW5nIDBcbiIpOworCURQUklOVEsoIkVYSVQgLSByZXR1cm5pbmcgMFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQgX19kZXZleGl0IG5ldGRydl9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZXRkcnZfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqbnA7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCWFzc2VydCAoZGV2ICE9IE5VTEwpOworCWFzc2VydChkZXYgIT0gTlVMTCk7CiAKIAlucCA9IG5ldGRldl9wcml2KGRldik7Ci0JYXNzZXJ0IChucCAhPSBOVUxMKTsKKwlhc3NlcnQobnAgIT0gTlVMTCk7CiAKLQl1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCiAjaWZuZGVmIFVTRV9JT19PUFMKLQlpb3VubWFwIChucC0+bW1pb19hZGRyKTsKKwlpb3VubWFwKG5wLT5tbWlvX2FkZHIpOwogI2VuZGlmIC8qICFVU0VfSU9fT1BTICovCiAKLQlwY2lfcmVsZWFzZV9yZWdpb25zIChwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCi0JZnJlZV9uZXRkZXYgKGRldik7CisJZnJlZV9uZXRkZXYoZGV2KTsKIAotCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgTlVMTCk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlIChwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIApAQCAtODcwLDYzICs4ODUsNjMgQEAKIAogLyogIEVFUFJPTV9DdHJsIGJpdHMuICovCiAjZGVmaW5lIEVFX1NISUZUX0NMSwkweDA0CS8qIEVFUFJPTSBzaGlmdCBjbG9jay4gKi8KLSNkZWZpbmUgRUVfQ1MJCQkweDA4CS8qIEVFUFJPTSBjaGlwIHNlbGVjdC4gKi8KKyNkZWZpbmUgRUVfQ1MJCTB4MDgJLyogRUVQUk9NIGNoaXAgc2VsZWN0LiAqLwogI2RlZmluZSBFRV9EQVRBX1dSSVRFCTB4MDIJLyogRUVQUk9NIGNoaXAgZGF0YSBpbi4gKi8KLSNkZWZpbmUgRUVfV1JJVEVfMAkJMHgwMAotI2RlZmluZSBFRV9XUklURV8xCQkweDAyCisjZGVmaW5lIEVFX1dSSVRFXzAJMHgwMAorI2RlZmluZSBFRV9XUklURV8xCTB4MDIKICNkZWZpbmUgRUVfREFUQV9SRUFECTB4MDEJLyogRUVQUk9NIGNoaXAgZGF0YSBvdXQuICovCi0jZGVmaW5lIEVFX0VOQgkJCSgweDgwIHwgRUVfQ1MpCisjZGVmaW5lIEVFX0VOQgkJKDB4ODAgfCBFRV9DUykKIAogLyogRGVsYXkgYmV0d2VlbiBFRVBST00gY2xvY2sgdHJhbnNpdGlvbnMuCiAgICBObyBleHRyYSBkZWxheSBpcyBuZWVkZWQgd2l0aCAzM01oeiBQQ0ksIGJ1dCA2Nk1oeiBtYXkgY2hhbmdlIHRoaXMuCi0gKi8KKyovCiAKICNkZWZpbmUgZWVwcm9tX2RlbGF5KCkJcmVhZGwoZWVfYWRkcikKIAogLyogVGhlIEVFUFJPTSBjb21tYW5kcyBpbmNsdWRlIHRoZSBhbHdheS1zZXQgbGVhZGluZyBiaXQuICovCiAjZGVmaW5lIEVFX1dSSVRFX0NNRAkoNSkKLSNkZWZpbmUgRUVfUkVBRF9DTUQJCSg2KQorI2RlZmluZSBFRV9SRUFEX0NNRAkoNikKICNkZWZpbmUgRUVfRVJBU0VfQ01ECSg3KQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCByZWFkX2VlcHJvbSAodm9pZCAqaW9hZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJlYWRfZWVwcm9tKHZvaWQgKmlvYWRkciwgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgcmV0dmFsID0gMDsKIAl2b2lkICplZV9hZGRyID0gaW9hZGRyICsgQ2ZnOTM0NjsKIAlpbnQgcmVhZF9jbWQgPSBsb2NhdGlvbiB8IChFRV9SRUFEX0NNRCA8PCBhZGRyX2xlbik7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCXdyaXRlYiAoRUVfRU5CICYgfkVFX0NTLCBlZV9hZGRyKTsKLQl3cml0ZWIgKEVFX0VOQiwgZWVfYWRkcik7Ci0JZWVwcm9tX2RlbGF5ICgpOworCXdyaXRlYihFRV9FTkIgJiB+RUVfQ1MsIGVlX2FkZHIpOworCXdyaXRlYihFRV9FTkIsIGVlX2FkZHIpOworCWVlcHJvbV9kZWxheSgpOwogCiAJLyogU2hpZnQgdGhlIHJlYWQgY29tbWFuZCBiaXRzIG91dC4gKi8KIAlmb3IgKGkgPSA0ICsgYWRkcl9sZW47IGkgPj0gMDsgaS0tKSB7CiAJCWludCBkYXRhdmFsID0gKHJlYWRfY21kICYgKDEgPDwgaSkpID8gRUVfREFUQV9XUklURSA6IDA7Ci0JCXdyaXRlYiAoRUVfRU5CIHwgZGF0YXZhbCwgZWVfYWRkcik7Ci0JCWVlcHJvbV9kZWxheSAoKTsKLQkJd3JpdGViIChFRV9FTkIgfCBkYXRhdmFsIHwgRUVfU0hJRlRfQ0xLLCBlZV9hZGRyKTsKLQkJZWVwcm9tX2RlbGF5ICgpOworCQl3cml0ZWIoRUVfRU5CIHwgZGF0YXZhbCwgZWVfYWRkcik7CisJCWVlcHJvbV9kZWxheSgpOworCQl3cml0ZWIoRUVfRU5CIHwgZGF0YXZhbCB8IEVFX1NISUZUX0NMSywgZWVfYWRkcik7CisJCWVlcHJvbV9kZWxheSgpOwogCX0KLQl3cml0ZWIgKEVFX0VOQiwgZWVfYWRkcik7Ci0JZWVwcm9tX2RlbGF5ICgpOworCXdyaXRlYihFRV9FTkIsIGVlX2FkZHIpOworCWVlcHJvbV9kZWxheSgpOwogCiAJZm9yIChpID0gMTY7IGkgPiAwOyBpLS0pIHsKLQkJd3JpdGViIChFRV9FTkIgfCBFRV9TSElGVF9DTEssIGVlX2FkZHIpOwotCQllZXByb21fZGVsYXkgKCk7CisJCXdyaXRlYihFRV9FTkIgfCBFRV9TSElGVF9DTEssIGVlX2FkZHIpOworCQllZXByb21fZGVsYXkoKTsKIAkJcmV0dmFsID0KLQkJICAgIChyZXR2YWwgPDwgMSkgfCAoKHJlYWRiIChlZV9hZGRyKSAmIEVFX0RBVEFfUkVBRCkgPyAxIDoKLQkJCQkgICAgIDApOwotCQl3cml0ZWIgKEVFX0VOQiwgZWVfYWRkcik7Ci0JCWVlcHJvbV9kZWxheSAoKTsKKwkJCShyZXR2YWwgPDwgMSkgfCAoKHJlYWRiKGVlX2FkZHIpICYgRUVfREFUQV9SRUFEKSA/IDEgOgorCQkJCQkwKTsKKwkJd3JpdGViKEVFX0VOQiwgZWVfYWRkcik7CisJCWVlcHJvbV9kZWxheSgpOwogCX0KIAogCS8qIFRlcm1pbmF0ZSB0aGUgRUVQUk9NIGFjY2Vzcy4gKi8KLQl3cml0ZWIgKH5FRV9DUywgZWVfYWRkcik7Ci0JZWVwcm9tX2RlbGF5ICgpOworCXdyaXRlYih+RUVfQ1MsIGVlX2FkZHIpOworCWVlcHJvbV9kZWxheSgpOwogCi0JRFBSSU5USyAoIkVYSVQgLSByZXR1cm5pbmcgJWRcbiIsIHJldHZhbCk7CisJRFBSSU5USygiRVhJVCAtIHJldHVybmluZyAlZFxuIiwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC05MzYsMTIgKzk1MSwxMiBAQAogICAgVGhlIG1heGltdW0gZGF0YSBjbG9jayByYXRlIGlzIDIuNSBNaHouICBUaGUgbWluaW11bSB0aW1pbmcgaXMgdXN1YWxseQogICAgbWV0IGJ5IGJhY2stdG8tYmFjayBQQ0kgSS9PIGN5Y2xlcywgYnV0IHdlIGluc2VydCBhIGRlbGF5IHRvIGF2b2lkCiAgICAib3ZlcmNsb2NraW5nIiBpc3N1ZXMuICovCi0jZGVmaW5lIE1ESU9fRElSCQkweDgwCisjZGVmaW5lIE1ESU9fRElSCTB4ODAKICNkZWZpbmUgTURJT19EQVRBX09VVAkweDA0CiAjZGVmaW5lIE1ESU9fREFUQV9JTgkweDAyCi0jZGVmaW5lIE1ESU9fQ0xLCQkweDAxCi0jZGVmaW5lIE1ESU9fV1JJVEUwIChNRElPX0RJUikKLSNkZWZpbmUgTURJT19XUklURTEgKE1ESU9fRElSIHwgTURJT19EQVRBX09VVCkKKyNkZWZpbmUgTURJT19DTEsJMHgwMQorI2RlZmluZSBNRElPX1dSSVRFMAkoTURJT19ESVIpCisjZGVmaW5lIE1ESU9fV1JJVEUxCShNRElPX0RJUiB8IE1ESU9fREFUQV9PVVQpCiAKICNkZWZpbmUgbWRpb19kZWxheSgpCXJlYWRiKG1kaW9fYWRkcikKIApAQCAtOTU5LDI0ICs5NzQsMjQgQEAKIAogCiAvKiBTeW5jcm9uaXplIHRoZSBNSUkgbWFuYWdlbWVudCBpbnRlcmZhY2UgYnkgc2hpZnRpbmcgMzIgb25lIGJpdHMgb3V0LiAqLwotc3RhdGljIHZvaWQgbWRpb19zeW5jICh2b2lkICptZGlvX2FkZHIpCitzdGF0aWMgdm9pZCBtZGlvX3N5bmModm9pZCAqbWRpb19hZGRyKQogewogCWludCBpOwogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAlmb3IgKGkgPSAzMjsgaSA+PSAwOyBpLS0pIHsKLQkJd3JpdGViIChNRElPX1dSSVRFMSwgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSAoKTsKLQkJd3JpdGViIChNRElPX1dSSVRFMSB8IE1ESU9fQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOworCQl3cml0ZWIoTURJT19XUklURTEsIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKKwkJd3JpdGViKE1ESU9fV1JJVEUxIHwgTURJT19DTEssIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKIAl9CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIAotc3RhdGljIGludCBtZGlvX3JlYWQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKK3N0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICptZGlvX2FkZHIgPSB0cC0+bW1pb19hZGRyICsgQ29uZmlnNDsKQEAgLTk4NCw5NyArOTk5LDk0IEBACiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGk7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWlmIChwaHlfaWQgPiAzMSkgewkvKiBSZWFsbHkgYSA4MTM5LiAgVXNlIGludGVybmFsIHJlZ2lzdGVycy4gKi8KLQkJRFBSSU5USyAoIkVYSVQgYWZ0ZXIgZGlyZWN0bHkgdXNpbmcgODEzOSBpbnRlcm5hbCByZWdzXG4iKTsKKwkJRFBSSU5USygiRVhJVCBhZnRlciBkaXJlY3RseSB1c2luZyA4MTM5IGludGVybmFsIHJlZ3NcbiIpOwogCQlyZXR1cm4gbG9jYXRpb24gPCA4ICYmIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSA/Ci0JCSAgICByZWFkdyAodHAtPm1taW9fYWRkciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkgOiAwOworCQkJcmVhZHcodHAtPm1taW9fYWRkciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkgOiAwOwogCX0KLQltZGlvX3N5bmMgKG1kaW9fYWRkcik7CisJbWRpb19zeW5jKG1kaW9fYWRkcik7CiAJLyogU2hpZnQgdGhlIHJlYWQgY29tbWFuZCBiaXRzIG91dC4gKi8KIAlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKIAkJaW50IGRhdGF2YWwgPSAobWlpX2NtZCAmICgxIDw8IGkpKSA/IE1ESU9fREFUQV9PVVQgOiAwOwogCi0JCXdyaXRlYiAoTURJT19ESVIgfCBkYXRhdmFsLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOwotCQl3cml0ZWIgKE1ESU9fRElSIHwgZGF0YXZhbCB8IE1ESU9fQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOworCQl3cml0ZWIoTURJT19ESVIgfCBkYXRhdmFsLCBtZGlvX2FkZHIpOworCQltZGlvX2RlbGF5KCk7CisJCXdyaXRlYihNRElPX0RJUiB8IGRhdGF2YWwgfCBNRElPX0NMSywgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOwogCX0KIAogCS8qIFJlYWQgdGhlIHR3byB0cmFuc2l0aW9uLCAxNiBkYXRhLCBhbmQgd2lyZS1pZGxlIGJpdHMuICovCiAJZm9yIChpID0gMTk7IGkgPiAwOyBpLS0pIHsKLQkJd3JpdGViICgwLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOwotCQlyZXR2YWwgPQotCQkgICAgKHJldHZhbCA8PCAxKSB8ICgocmVhZGIgKG1kaW9fYWRkcikgJiBNRElPX0RBVEFfSU4pID8gMQotCQkJCSAgICAgOiAwKTsKLQkJd3JpdGViIChNRElPX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSAoKTsKKwkJd3JpdGViKDAsIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKKwkJcmV0dmFsID0gKChyZXR2YWwgPDwgMSkgfCAoKHJlYWRiKG1kaW9fYWRkcikgJiBNRElPX0RBVEFfSU4pKQorCQkJICA/IDEgOiAwKTsKKwkJd3JpdGViKE1ESU9fQ0xLLCBtZGlvX2FkZHIpOworCQltZGlvX2RlbGF5KCk7CiAJfQogCi0JRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgKHJldHZhbCA+PiAxKSAmIDB4ZmZmZik7CisJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCAocmV0dmFsID4+IDEpICYgMHhmZmZmKTsKIAlyZXR1cm4gKHJldHZhbCA+PiAxKSAmIDB4ZmZmZjsKIH0KIAogCi1zdGF0aWMgdm9pZCBtZGlvX3dyaXRlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCi0JCQlpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKKwkJICAgICAgIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICptZGlvX2FkZHIgPSB0cC0+bW1pb19hZGRyICsgQ29uZmlnNDsKIAlpbnQgbWlpX2NtZCA9Ci0JICAgICgweDUwMDIgPDwgMTYpIHwgKHBoeV9pZCA8PCAyMykgfCAobG9jYXRpb24gPDwgMTgpIHwgdmFsdWU7CisJCSgweDUwMDIgPDwgMTYpIHwgKHBoeV9pZCA8PCAyMykgfCAobG9jYXRpb24gPDwgMTgpIHwgdmFsdWU7CiAJaW50IGk7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWlmIChwaHlfaWQgPiAzMSkgewkvKiBSZWFsbHkgYSA4MTM5LiAgVXNlIGludGVybmFsIHJlZ2lzdGVycy4gKi8KIAkJaWYgKGxvY2F0aW9uIDwgOCAmJiBtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0pIHsKLQkJCXdyaXRldyAodmFsdWUsCi0JCQkJdHAtPm1taW9fYWRkciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSk7Ci0JCQlyZWFkdyAodHAtPm1taW9fYWRkciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSk7CisJCQl3cml0ZXcodmFsdWUsCisJCQkgICAgICAgdHAtPm1taW9fYWRkciArIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSk7CisJCQlyZWFkdyh0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKTsKIAkJfQotCQlEUFJJTlRLICgiRVhJVCBhZnRlciBkaXJlY3RseSB1c2luZyA4MTM5IGludGVybmFsIHJlZ3NcbiIpOworCQlEUFJJTlRLKCJFWElUIGFmdGVyIGRpcmVjdGx5IHVzaW5nIDgxMzkgaW50ZXJuYWwgcmVnc1xuIik7CiAJCXJldHVybjsKIAl9Ci0JbWRpb19zeW5jIChtZGlvX2FkZHIpOworCW1kaW9fc3luYyhtZGlvX2FkZHIpOwogCiAJLyogU2hpZnQgdGhlIGNvbW1hbmQgYml0cyBvdXQuICovCiAJZm9yIChpID0gMzE7IGkgPj0gMDsgaS0tKSB7CiAJCWludCBkYXRhdmFsID0KLQkJICAgIChtaWlfY21kICYgKDEgPDwgaSkpID8gTURJT19XUklURTEgOiBNRElPX1dSSVRFMDsKLQkJd3JpdGViIChkYXRhdmFsLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOwotCQl3cml0ZWIgKGRhdGF2YWwgfCBNRElPX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSAoKTsKKwkJCShtaWlfY21kICYgKDEgPDwgaSkpID8gTURJT19XUklURTEgOiBNRElPX1dSSVRFMDsKKwkJd3JpdGViKGRhdGF2YWwsIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKKwkJd3JpdGViKGRhdGF2YWwgfCBNRElPX0NMSywgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOwogCX0KIAogCS8qIENsZWFyIG91dCBleHRyYSBiaXRzLiAqLwogCWZvciAoaSA9IDI7IGkgPiAwOyBpLS0pIHsKLQkJd3JpdGViICgwLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOwotCQl3cml0ZWIgKE1ESU9fQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOworCQl3cml0ZWIoMCwgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOworCQl3cml0ZWIoTURJT19DTEssIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKIAl9CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIAotc3RhdGljIGludCBuZXRkcnZfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbmV0ZHJ2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0dmFsOwotI2lmZGVmIE5FVERSVl9ERUJVRwogCXZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7Ci0jZW5kaWYKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCBuZXRkcnZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBuZXRkcnZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmV0dmFsKTsKKwkJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByZXR2YWwpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtMTA5Miw3ICsxMTA0LDcgQEAKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsIFJYX0JVRl9UT1RfTEVOLAogCQkJCQkgICAgdHAtPnJ4X3JpbmcsIHRwLT5yeF9yaW5nX2RtYSk7CiAKLQkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRU5PTUVNXG4iKTsKKwkJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIC1FTk9NRU1cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAogCX0KQEAgLTExMDAsMTA5ICsxMTEyLDEwOCBAQAogCXRwLT5mdWxsX2R1cGxleCA9IHRwLT5kdXBsZXhfbG9jazsKIAl0cC0+dHhfZmxhZyA9IChUWF9GSUZPX1RIUkVTSCA8PCAxMSkgJiAweDAwM2YwMDAwOwogCi0JbmV0ZHJ2X2luaXRfcmluZyAoZGV2KTsKLQluZXRkcnZfaHdfc3RhcnQgKGRldik7CisJbmV0ZHJ2X2luaXRfcmluZyhkZXYpOworCW5ldGRydl9od19zdGFydChkZXYpOwogCi0JRFBSSU5USyAoIiVzOiBuZXRkcnZfb3BlbigpIGlvYWRkciAlI2x4IElSUSAlZCIKLQkJCSIgR1AgUGlucyAlMi4yeCAlcy1kdXBsZXguXG4iLAotCQkJZGV2LT5uYW1lLCBwY2lfcmVzb3VyY2Vfc3RhcnQgKHRwLT5wY2lfZGV2LCAxKSwKLQkJCWRldi0+aXJxLCBORVREUlZfUjggKE1lZGlhU3RhdHVzKSwKLQkJCXRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CisJbmV0ZGV2X2RiZyhkZXYsICJpb2FkZHIgJSNsbHggSVJRICVkIEdQIFBpbnMgJTAyeCAlcy1kdXBsZXhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHRwLT5wY2lfZGV2LCAxKSwKKwkJICAgZGV2LT5pcnEsIE5FVERSVl9SOChNZWRpYVN0YXR1cyksCisJCSAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKIAkvKiBTZXQgdGhlIHRpbWVyIHRvIHN3aXRjaCB0byBjaGVjayBmb3IgbGluayBiZWF0IGFuZCBwZXJoYXBzIHN3aXRjaAogCSAgIHRvIGFuIGFsdGVybmF0ZSBtZWRpYSB0eXBlLiAqLwotCWluaXRfdGltZXIgKCZ0cC0+dGltZXIpOworCWluaXRfdGltZXIoJnRwLT50aW1lcik7CiAJdHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMyAqIEhaOwogCXRwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAl0cC0+dGltZXIuZnVuY3Rpb24gPSAmbmV0ZHJ2X3RpbWVyOwotCWFkZF90aW1lciAoJnRwLT50aW1lcik7CisJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwogCi0JRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAwXG4iKTsKKwlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIAogLyogU3RhcnQgdGhlIGhhcmR3YXJlIGF0IG9wZW4gb3IgcmVzdW1lLiAqLwotc3RhdGljIHZvaWQgbmV0ZHJ2X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbmV0ZHJ2X2h3X3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MzIgaTsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCiAJLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KLQlORVREUlZfVzggKENoaXBDbWQsIChORVREUlZfUjggKENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSB8IENtZFJlc2V0KTsKLQl1ZGVsYXkgKDEwMCk7CisJTkVURFJWX1c4KENoaXBDbWQsIChORVREUlZfUjgoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpIHwgQ21kUmVzZXQpOworCXVkZWxheSgxMDApOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgY2hpcCBoYXMgZmluaXNoZWQgdGhlIHJlc2V0LiAqLwogCWZvciAoaSA9IDEwMDA7IGkgPiAwOyBpLS0pCi0JCWlmICgoTkVURFJWX1I4IChDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKQorCQlpZiAoKE5FVERSVl9SOChDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKQogCQkJYnJlYWs7CiAKIAkvKiBSZXN0b3JlIG91ciBpZGVhIG9mIHRoZSBNQUMgYWRkcmVzcy4gKi8KLQlORVREUlZfVzMyX0YgKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpOwotCU5FVERSVl9XMzJfRiAoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CisJTkVURFJWX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMigqKHUzMiAqKShkZXYtPmRldl9hZGRyICsgMCkpKTsKKwlORVREUlZfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyKCoodTMyICopKGRldi0+ZGV2X2FkZHIgKyA0KSkpOwogCiAJLyogTXVzdCBlbmFibGUgVHgvUnggYmVmb3JlIHNldHRpbmcgdHJhbnNmZXIgdGhyZXNob2xkcyEgKi8KLQlORVREUlZfVzhfRiAoQ2hpcENtZCwgKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpIHwKLQkJCSAgIENtZFJ4RW5iIHwgQ21kVHhFbmIpOworCU5FVERSVl9XOF9GKENoaXBDbWQsIChORVREUlZfUjgoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpIHwKKwkJICAgIENtZFJ4RW5iIHwgQ21kVHhFbmIpOwogCiAJaSA9IG5ldGRydl9yeF9jb25maWcgfAotCSAgICAoTkVURFJWX1IzMiAoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKLQlORVREUlZfVzMyX0YgKFJ4Q29uZmlnLCBpKTsKKwkJKE5FVERSVl9SMzIoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKKwlORVREUlZfVzMyX0YoUnhDb25maWcsIGkpOwogCiAJLyogQ2hlY2sgdGhpcyB2YWx1ZTogdGhlIGRvY3VtZW50YXRpb24gZm9yIElGRyBjb250cmFkaWN0cyBpZnNlbGYuICovCi0JTkVURFJWX1czMiAoVHhDb25maWcsIChUWF9ETUFfQlVSU1QgPDwgVHhETUFTaGlmdCkpOworCU5FVERSVl9XMzIoVHhDb25maWcsIChUWF9ETUFfQlVSU1QgPDwgVHhETUFTaGlmdCkpOwogCiAJLyogdW5sb2NrIENvbmZpZ1swMTIzNF0gYW5kIEJNQ1IgcmVnaXN0ZXIgd3JpdGVzICovCi0JTkVURFJWX1c4X0YgKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQl1ZGVsYXkgKDEwKTsKKwlORVREUlZfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJdWRlbGF5KDEwKTsKIAogCXRwLT5jdXJfcnggPSAwOwogCiAJLyogTG9jayBDb25maWdbMDEyMzRdIGFuZCBCTUNSIHJlZ2lzdGVyIHdyaXRlcyAqLwotCU5FVERSVl9XOF9GIChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOwotCXVkZWxheSAoMTApOworCU5FVERSVl9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisJdWRlbGF5KDEwKTsKIAogCS8qIGluaXQgUnggcmluZyBidWZmZXIgRE1BIGFkZHJlc3MgKi8KLQlORVREUlZfVzMyX0YgKFJ4QnVmLCB0cC0+cnhfcmluZ19kbWEpOworCU5FVERSVl9XMzJfRihSeEJ1ZiwgdHAtPnJ4X3JpbmdfZG1hKTsKIAogCS8qIGluaXQgVHggYnVmZmVyIERNQSBhZGRyZXNzZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykKLQkJTkVURFJWX1czMl9GIChUeEFkZHIwICsgKGkgKiA0KSwgdHAtPnR4X2J1ZnNfZG1hICsgKHRwLT50eF9idWZbaV0gLSB0cC0+dHhfYnVmcykpOworCQlORVREUlZfVzMyX0YoVHhBZGRyMCArIChpICogNCksIHRwLT50eF9idWZzX2RtYSArICh0cC0+dHhfYnVmW2ldIC0gdHAtPnR4X2J1ZnMpKTsKIAotCU5FVERSVl9XMzJfRiAoUnhNaXNzZWQsIDApOworCU5FVERSVl9XMzJfRihSeE1pc3NlZCwgMCk7CiAKLQluZXRkcnZfc2V0X3J4X21vZGUgKGRldik7CisJbmV0ZHJ2X3NldF9yeF9tb2RlKGRldik7CiAKIAkvKiBubyBlYXJseS1yeCBpbnRlcnJ1cHRzICovCi0JTkVURFJWX1cxNiAoTXVsdGlJbnRyLCBORVREUlZfUjE2IChNdWx0aUludHIpICYgTXVsdGlJbnRyQ2xlYXIpOworCU5FVERSVl9XMTYoTXVsdGlJbnRyLCBORVREUlZfUjE2KE11bHRpSW50cikgJiBNdWx0aUludHJDbGVhcik7CiAKIAkvKiBtYWtlIHN1cmUgUnhUeCBoYXMgc3RhcnRlZCAqLwotCU5FVERSVl9XOF9GIChDaGlwQ21kLCAoTkVURFJWX1I4IChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfAotCQkJICAgQ21kUnhFbmIgfCBDbWRUeEVuYik7CisJTkVURFJWX1c4X0YoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfAorCQkgICAgQ21kUnhFbmIgfCBDbWRUeEVuYik7CiAKIAkvKiBFbmFibGUgYWxsIGtub3duIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JTkVURFJWX1cxNl9GIChJbnRyTWFzaywgbmV0ZHJ2X2ludHJfbWFzayk7CisJTkVURFJWX1cxNl9GKEludHJNYXNrLCBuZXRkcnZfaW50cl9tYXNrKTsKIAotCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIAogLyogSW5pdGlhbGl6ZSB0aGUgUnggYW5kIFR4IHJpbmdzLCBhbG9uZyB3aXRoIHZhcmlvdXMgJ2RldicgYml0cy4gKi8KLXN0YXRpYyB2b2lkIG5ldGRydl9pbml0X3JpbmcgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZXRkcnZfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCXRwLT5jdXJfcnggPSAwOwotCWF0b21pY19zZXQgKCZ0cC0+Y3VyX3R4LCAwKTsKLQlhdG9taWNfc2V0ICgmdHAtPmRpcnR5X3R4LCAwKTsKKwlhdG9taWNfc2V0KCZ0cC0+Y3VyX3R4LCAwKTsKKwlhdG9taWNfc2V0KCZ0cC0+ZGlydHlfdHgsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9ERVNDOyBpKyspIHsKIAkJdHAtPnR4X2luZm9baV0uc2tiID0gTlVMTDsKQEAgLTEyMTAsMTEgKzEyMjEsMTEgQEAKIAkJdHAtPnR4X2J1ZltpXSA9ICZ0cC0+dHhfYnVmc1tpICogVFhfQlVGX1NJWkVdOwogCX0KIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBuZXRkcnZfdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIG5ldGRydl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTIyMiw1OCArMTIzMyw1NCBAQAogCWludCBuZXh0X3RpY2sgPSA2MCAqIEhaOwogCWludCBtaWlfbHBhOwogCi0JbWlpX2xwYSA9IG1kaW9fcmVhZCAoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0xQQSk7CisJbWlpX2xwYSA9IG1kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfTFBBKTsKIAogCWlmICghdHAtPmR1cGxleF9sb2NrICYmIG1paV9scGEgIT0gMHhmZmZmKSB7CiAJCWludCBkdXBsZXggPSAoKG1paV9scGEgJiBMUEFfMTAwRlVMTCkgfHwKLQkJCSAgICAgIChtaWlfbHBhICYgMHgwMUMwKSA9PSAweDAwNDApOworCQkJICAgICAobWlpX2xwYSAmIDB4MDFDMCkgPT0gMHgwMDQwKTsKIAkJaWYgKHRwLT5mdWxsX2R1cGxleCAhPSBkdXBsZXgpIHsKIAkJCXRwLT5mdWxsX2R1cGxleCA9IGR1cGxleDsKLQkJCXByaW50ayAoS0VSTl9JTkZPCi0JCQkJIiVzOiBTZXR0aW5nICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkIGxpbmsiCi0JCQkJIiBwYXJ0bmVyIGFiaWxpdHkgb2YgJTQuNHguXG4iLCBkZXYtPm5hbWUsCi0JCQkJdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAotCQkJCXRwLT5waHlzWzBdLCBtaWlfbHBhKTsKLQkJCU5FVERSVl9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCQkJTkVURFJWX1c4IChDb25maWcxLCB0cC0+ZnVsbF9kdXBsZXggPyAweDYwIDogMHgyMCk7Ci0JCQlORVREUlZfVzggKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJTZXR0aW5nICVzLWR1cGxleCBiYXNlZCBvbiBNSUkgIyVkIGxpbmsgcGFydG5lciBhYmlsaXR5IG9mICUwNHhcbiIsCisJCQkJICAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJCQkgICAgdHAtPnBoeXNbMF0sIG1paV9scGEpOworCQkJTkVURFJWX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwkJCU5FVERSVl9XOChDb25maWcxLCB0cC0+ZnVsbF9kdXBsZXggPyAweDYwIDogMHgyMCk7CisJCQlORVREUlZfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAkJfQogCX0KIAotCURQUklOVEsgKCIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssIExpbmsgcGFydG5lciAlNC40eC5cbiIsCi0JCSBkZXYtPm5hbWUsIE5FVERSVl9SMTYgKE5XYXlMUEFSKSk7Ci0JRFBSSU5USyAoIiVzOiAgT3RoZXIgcmVnaXN0ZXJzIGFyZSBJbnRNYXNrICU0LjR4IEludFN0YXR1cyAlNC40eCIKLQkJICIgUnhTdGF0dXMgJTQuNHguXG4iLCBkZXYtPm5hbWUsCi0JCSBORVREUlZfUjE2IChJbnRyTWFzayksCi0JCSBORVREUlZfUjE2IChJbnRyU3RhdHVzKSwKLQkJIE5FVERSVl9SMzIgKFJ4RWFybHlTdGF0dXMpKTsKLQlEUFJJTlRLICgiJXM6ICBDaGlwIGNvbmZpZyAlMi4yeCAlMi4yeC5cbiIsCi0JCSBkZXYtPm5hbWUsIE5FVERSVl9SOCAoQ29uZmlnMCksCi0JCSBORVREUlZfUjggKENvbmZpZzEpKTsKKwluZXRkZXZfZGJnKGRldiwgIk1lZGlhIHNlbGVjdGlvbiB0aWNrLCBMaW5rIHBhcnRuZXIgJTA0eFxuIiwKKwkJICAgTkVURFJWX1IxNihOV2F5TFBBUikpOworCW5ldGRldl9kYmcoZGV2LCAiT3RoZXIgcmVnaXN0ZXJzIGFyZSBJbnRNYXNrICUwNHggSW50U3RhdHVzICUwNHggUnhTdGF0dXMgJTA0bHhcbiIsCisJCSAgIE5FVERSVl9SMTYoSW50ck1hc2spLAorCQkgICBORVREUlZfUjE2KEludHJTdGF0dXMpLAorCQkgICBORVREUlZfUjMyKFJ4RWFybHlTdGF0dXMpKTsKKwluZXRkZXZfZGJnKGRldiwgIkNoaXAgY29uZmlnICUwMnggJTAyeFxuIiwKKwkJICAgTkVURFJWX1I4KENvbmZpZzApLCBORVREUlZfUjgoQ29uZmlnMSkpOwogCiAJdHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbmV4dF90aWNrOwotCWFkZF90aW1lciAoJnRwLT50aW1lcik7CisJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwogfQogCiAKLXN0YXRpYyB2b2lkIG5ldGRydl90eF9jbGVhciAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIG5ldGRydl90eF9jbGVhcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpOwogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JYXRvbWljX3NldCAoJnRwLT5jdXJfdHgsIDApOwotCWF0b21pY19zZXQgKCZ0cC0+ZGlydHlfdHgsIDApOworCWF0b21pY19zZXQoJnRwLT5jdXJfdHgsIDApOworCWF0b21pY19zZXQoJnRwLT5kaXJ0eV90eCwgMCk7CiAKIAkvKiBEdW1wIHRoZSB1bnNlbnQgVHggcGFja2V0cy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykgewogCQlzdHJ1Y3QgcmluZ19pbmZvICpycCA9ICZ0cC0+dHhfaW5mb1tpXTsKIAkJaWYgKHJwLT5tYXBwaW5nICE9IDApIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUgKHRwLT5wY2lfZGV2LCBycC0+bWFwcGluZywKLQkJCQkJICBycC0+c2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGNpX2RldiwgcnAtPm1hcHBpbmcsCisJCQkJCSBycC0+c2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJcnAtPm1hcHBpbmcgPSAwOwogCQl9CiAJCWlmIChycC0+c2tiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiIChycC0+c2tiKTsKKwkJCWRldl9rZnJlZV9za2IocnAtPnNrYik7CiAJCQlycC0+c2tiID0gTlVMTDsKIAkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CkBAIC0xMjgxLDcgKzEyODgsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5ldGRydl90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwpAQCAtMTI4OSw5NiArMTI5Niw5NSBAQAogCXU4IHRtcDg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVEsgKCIlczogVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUyLjJ4ICU0LjR4ICIKLQkJICJtZWRpYSAlMi4yeC5cbiIsIGRldi0+bmFtZSwKLQkJIE5FVERSVl9SOCAoQ2hpcENtZCksCi0JCSBORVREUlZfUjE2IChJbnRyU3RhdHVzKSwKLQkJIE5FVERSVl9SOCAoTWVkaWFTdGF0dXMpKTsKKwluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IHRpbWVvdXQsIHN0YXR1cyAlMDJ4ICUwNHggbWVkaWEgJTAyeFxuIiwKKwkJICAgTkVURFJWX1I4KENoaXBDbWQpLAorCQkgICBORVREUlZfUjE2KEludHJTdGF0dXMpLAorCQkgICBORVREUlZfUjgoTWVkaWFTdGF0dXMpKTsKIAogCS8qIGRpc2FibGUgVHggQVNBUCwgaWYgbm90IGFscmVhZHkgKi8KLQl0bXA4ID0gTkVURFJWX1I4IChDaGlwQ21kKTsKKwl0bXA4ID0gTkVURFJWX1I4KENoaXBDbWQpOwogCWlmICh0bXA4ICYgQ21kVHhFbmIpCi0JCU5FVERSVl9XOCAoQ2hpcENtZCwgdG1wOCAmIH5DbWRUeEVuYik7CisJCU5FVERSVl9XOChDaGlwQ21kLCB0bXA4ICYgfkNtZFR4RW5iKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JTkVURFJWX1cxNiAoSW50ck1hc2ssIDB4MDAwMCk7CisJTkVURFJWX1cxNihJbnRyTWFzaywgMHgwMDAwKTsKIAogCS8qIEVtaXQgaW5mbyB0byBmaWd1cmUgb3V0IHdoYXQgd2VudCB3cm9uZy4gKi8KLQlwcmludGsgKEtFUk5fREVCVUcgIiVzOiBUeCBxdWV1ZSBzdGFydCBlbnRyeSAlZCAgZGlydHkgZW50cnkgJWQuXG4iLAotCQlkZXYtPm5hbWUsIGF0b21pY19yZWFkICgmdHAtPmN1cl90eCksCi0JCWF0b21pY19yZWFkICgmdHAtPmRpcnR5X3R4KSk7CisJbmV0ZGV2X2RiZyhkZXYsICJUeCBxdWV1ZSBzdGFydCBlbnRyeSAlZCBkaXJ0eSBlbnRyeSAlZFxuIiwKKwkJICAgYXRvbWljX3JlYWQoJnRwLT5jdXJfdHgpLAorCQkgICBhdG9taWNfcmVhZCgmdHAtPmRpcnR5X3R4KSk7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9ERVNDOyBpKyspCi0JCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICBUeCBkZXNjcmlwdG9yICVkIGlzICU4LjhseC4lc1xuIiwKLQkJCWRldi0+bmFtZSwgaSwgTkVURFJWX1IzMiAoVHhTdGF0dXMwICsgKGkgKiA0KSksCi0JCQlpID09IGF0b21pY19yZWFkICgmdHAtPmRpcnR5X3R4KSAlIE5VTV9UWF9ERVNDID8KLQkJCQkiIChxdWV1ZSBoZWFkKSIgOiAiIik7CisJCW5ldGRldl9kYmcoZGV2LCAiVHggZGVzY3JpcHRvciAlZCBpcyAlMDhseCVzXG4iLAorCQkJICAgaSwgTkVURFJWX1IzMihUeFN0YXR1czAgKyAoaSAqIDQpKSwKKwkJCSAgIGkgPT0gYXRvbWljX3JlYWQoJnRwLT5kaXJ0eV90eCkgJSBOVU1fVFhfREVTQyA/CisJCQkgICAiKHF1ZXVlIGhlYWQpIiA6ICIiKTsKIAogCS8qIFN0b3AgYSBzaGFyZWQgaW50ZXJydXB0IGZyb20gc2NhdmVuZ2luZyB3aGlsZSB3ZSBhcmUuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCi0JbmV0ZHJ2X3R4X2NsZWFyIChkZXYpOworCW5ldGRydl90eF9jbGVhcihkZXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIC4uLmFuZCBmaW5hbGx5LCByZXNldCBldmVyeXRoaW5nICovCi0JbmV0ZHJ2X2h3X3N0YXJ0IChkZXYpOworCW5ldGRydl9od19zdGFydChkZXYpOwogCi0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIAogCi1zdGF0aWMgaW50IG5ldGRydl9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBuZXRkcnZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJaW50IGVudHJ5OwogCiAJLyogQ2FsY3VsYXRlIHRoZSBuZXh0IFR4IGRlc2NyaXB0b3IgZW50cnkuICovCi0JZW50cnkgPSBhdG9taWNfcmVhZCAoJnRwLT5jdXJfdHgpICUgTlVNX1RYX0RFU0M7CisJZW50cnkgPSBhdG9taWNfcmVhZCgmdHAtPmN1cl90eCkgJSBOVU1fVFhfREVTQzsKIAotCWFzc2VydCAodHAtPnR4X2luZm9bZW50cnldLnNrYiA9PSBOVUxMKTsKLQlhc3NlcnQgKHRwLT50eF9pbmZvW2VudHJ5XS5tYXBwaW5nID09IDApOworCWFzc2VydCh0cC0+dHhfaW5mb1tlbnRyeV0uc2tiID09IE5VTEwpOworCWFzc2VydCh0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyA9PSAwKTsKIAogCXRwLT50eF9pbmZvW2VudHJ5XS5za2IgPSBza2I7CiAJLyogdHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPSAwOyAqLwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCB0cC0+dHhfYnVmW2VudHJ5XSwgc2tiLT5sZW4pOwogCiAJLyogTm90ZTogdGhlIGNoaXAgZG9lc24ndCBoYXZlIGF1dG8tcGFkISAqLwotCU5FVERSVl9XMzIgKFR4U3RhdHVzMCArIChlbnRyeSAqIHNpemVvZih1MzIpKSwKLQkJIHRwLT50eF9mbGFnIHwgKHNrYi0+bGVuID49IEVUSF9aTEVOID8gc2tiLT5sZW4gOiBFVEhfWkxFTikpOworCU5FVERSVl9XMzIoVHhTdGF0dXMwICsgKGVudHJ5ICogc2l6ZW9mKHUzMikpLAorCQkgICB0cC0+dHhfZmxhZyB8IChza2ItPmxlbiA+PSBFVEhfWkxFTiA/IHNrYi0+bGVuIDogRVRIX1pMRU4pKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCWF0b21pY19pbmMgKCZ0cC0+Y3VyX3R4KTsKLQlpZiAoKGF0b21pY19yZWFkICgmdHAtPmN1cl90eCkgLSBhdG9taWNfcmVhZCAoJnRwLT5kaXJ0eV90eCkpID49IE5VTV9UWF9ERVNDKQotCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOworCWF0b21pY19pbmMoJnRwLT5jdXJfdHgpOworCWlmICgoYXRvbWljX3JlYWQoJnRwLT5jdXJfdHgpIC0gYXRvbWljX3JlYWQoJnRwLT5kaXJ0eV90eCkpID49IE5VTV9UWF9ERVNDKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlEUFJJTlRLICgiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgYXQgJXAgc2l6ZSAldSB0byBzbG90ICVkLlxuIiwKLQkJIGRldi0+bmFtZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwgZW50cnkpOworCW5ldGRldl9kYmcoZGV2LCAiUXVldWVkIFR4IHBhY2tldCBhdCAlcCBzaXplICV1IHRvIHNsb3QgJWRcbiIsCisJCSAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGVudHJ5KTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIAotc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAsCi0JCQkJICB2b2lkICppb2FkZHIpCitzdGF0aWMgdm9pZCBuZXRkcnZfdHhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCwKKwkJCQl2b2lkICppb2FkZHIpCiB7CiAJaW50IGN1cl90eCwgZGlydHlfdHgsIHR4X2xlZnQ7CiAKLQlhc3NlcnQgKGRldiAhPSBOVUxMKTsKLQlhc3NlcnQgKHRwICE9IE5VTEwpOwotCWFzc2VydCAoaW9hZGRyICE9IE5VTEwpOworCWFzc2VydChkZXYgIT0gTlVMTCk7CisJYXNzZXJ0KHRwICE9IE5VTEwpOworCWFzc2VydChpb2FkZHIgIT0gTlVMTCk7CiAKLQlkaXJ0eV90eCA9IGF0b21pY19yZWFkICgmdHAtPmRpcnR5X3R4KTsKKwlkaXJ0eV90eCA9IGF0b21pY19yZWFkKCZ0cC0+ZGlydHlfdHgpOwogCi0JY3VyX3R4ID0gYXRvbWljX3JlYWQgKCZ0cC0+Y3VyX3R4KTsKKwljdXJfdHggPSBhdG9taWNfcmVhZCgmdHAtPmN1cl90eCk7CiAJdHhfbGVmdCA9IGN1cl90eCAtIGRpcnR5X3R4OwogCXdoaWxlICh0eF9sZWZ0ID4gMCkgewogCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAlIE5VTV9UWF9ERVNDOwogCQlpbnQgdHhzdGF0dXM7CiAKLQkJdHhzdGF0dXMgPSBORVREUlZfUjMyIChUeFN0YXR1czAgKyAoZW50cnkgKiBzaXplb2YgKHUzMikpKTsKKwkJdHhzdGF0dXMgPSBORVREUlZfUjMyKFR4U3RhdHVzMCArIChlbnRyeSAqIHNpemVvZih1MzIpKSk7CiAKIAkJaWYgKCEodHhzdGF0dXMgJiAoVHhTdGF0T0sgfCBUeFVuZGVycnVuIHwgVHhBYm9ydGVkKSkpCiAJCQlicmVhazsJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLwpAQCAtMTM4NiwxMiArMTM5MiwxMiBAQAogCQkvKiBOb3RlOiBUeENhcnJpZXJMb3N0IGlzIGFsd2F5cyBhc3NlcnRlZCBhdCAxMDBtYnBzLiAqLwogCQlpZiAodHhzdGF0dXMgJiAoVHhPdXRPZldpbmRvdyB8IFR4QWJvcnRlZCkpIHsKIAkJCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwotCQkJRFBSSU5USyAoIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICU4Ljh4LlxuIiwKLQkJCQkgZGV2LT5uYW1lLCB0eHN0YXR1cyk7CisJCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJSMwOHhcbiIsCisJCQkJICAgdHhzdGF0dXMpOwogCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eHN0YXR1cyAmIFR4QWJvcnRlZCkgewogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKLQkJCQlORVREUlZfVzMyIChUeENvbmZpZywgVHhDbGVhckFidCB8IChUWF9ETUFfQlVSU1QgPDwgVHhETUFTaGlmdCkpOworCQkJCU5FVERSVl9XMzIoVHhDb25maWcsIFR4Q2xlYXJBYnQgfCAoVFhfRE1BX0JVUlNUIDw8IFR4RE1BU2hpZnQpKTsKIAkJCX0KIAkJCWlmICh0eHN0YXR1cyAmIFR4Q2Fycmllckxvc3QpCiAJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwpAQCAtMTQxNyw0OCArMTQyMyw0NSBAQAogCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCQl0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyA9IDA7CiAJCX0KLQkJZGV2X2tmcmVlX3NrYl9pcnEgKHRwLT50eF9pbmZvW2VudHJ5XS5za2IpOworCQlkZXZfa2ZyZWVfc2tiX2lycSh0cC0+dHhfaW5mb1tlbnRyeV0uc2tiKTsKIAkJdHAtPnR4X2luZm9bZW50cnldLnNrYiA9IE5VTEw7CiAJCWRpcnR5X3R4Kys7CiAJCWlmIChkaXJ0eV90eCA8IDApIHsgLyogaGFuZGxlIHNpZ25lZCBpbnQgb3ZlcmZsb3cgKi8KLQkJCWF0b21pY19zdWIgKGN1cl90eCwgJnRwLT5jdXJfdHgpOyAvKiBYWFggcmFjeT8gKi8KKwkJCWF0b21pY19zdWIoY3VyX3R4LCAmdHAtPmN1cl90eCk7IC8qIFhYWCByYWN5PyAqLwogCQkJZGlydHlfdHggPSBjdXJfdHggLSB0eF9sZWZ0ICsgMTsKIAkJfQotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZCAoZGV2KSkKLQkJCW5ldGlmX3dha2VfcXVldWUgKGRldik7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAKLQkJY3VyX3R4ID0gYXRvbWljX3JlYWQgKCZ0cC0+Y3VyX3R4KTsKKwkJY3VyX3R4ID0gYXRvbWljX3JlYWQoJnRwLT5jdXJfdHgpOwogCQl0eF9sZWZ0ID0gY3VyX3R4IC0gZGlydHlfdHg7CiAKIAl9CiAKICNpZm5kZWYgTkVURFJWX05ERUJVRwotCWlmIChhdG9taWNfcmVhZCAoJnRwLT5jdXJfdHgpIC0gZGlydHlfdHggPiBOVU1fVFhfREVTQykgewotCQlwcmludGsgKEtFUk5fRVJSCi0JCSAgIiVzOiBPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQuXG4iLAotCQkgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIGF0b21pY19yZWFkICgmdHAtPmN1cl90eCkpOworCWlmIChhdG9taWNfcmVhZCgmdHAtPmN1cl90eCkgLSBkaXJ0eV90eCA+IE5VTV9UWF9ERVNDKSB7CisJCW5ldGRldl9lcnIoZGV2LCAiT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkXG4iLAorCQkJICAgZGlydHlfdHgsIGF0b21pY19yZWFkKCZ0cC0+Y3VyX3R4KSk7CiAJCWRpcnR5X3R4ICs9IE5VTV9UWF9ERVNDOwogCX0KICNlbmRpZiAvKiBORVREUlZfTkRFQlVHICovCiAKLQlhdG9taWNfc2V0ICgmdHAtPmRpcnR5X3R4LCBkaXJ0eV90eCk7CisJYXRvbWljX3NldCgmdHAtPmRpcnR5X3R4LCBkaXJ0eV90eCk7CiB9CiAKIAogLyogVE9ETzogY2xlYW4gdGhpcyB1cCEgIFJ4IHJlc2V0IG5lZWQgbm90IGJlIHRoaXMgaW50ZW5zaXZlICovCi1zdGF0aWMgdm9pZCBuZXRkcnZfcnhfZXJyICh1MzIgcnhfc3RhdHVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAsIHZvaWQgKmlvYWRkcikKK3N0YXRpYyB2b2lkIG5ldGRydl9yeF9lcnIodTMyIHJ4X3N0YXR1cywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCwgdm9pZCAqaW9hZGRyKQogewogCXU4IHRtcDg7CiAJaW50IHRtcF93b3JrID0gMTAwMDsKIAotCURQUklOVEsgKCIlczogRXRoZXJuZXQgZnJhbWUgaGFkIGVycm9ycywgc3RhdHVzICU4Ljh4LlxuIiwKLQkgICAgICAgICBkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7Ci0JaWYgKHJ4X3N0YXR1cyAmIFJ4VG9vTG9uZykgewotCQlEUFJJTlRLICgiJXM6IE92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSwgc3RhdHVzICU0LjR4IVxuIiwKLQkJCSBkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7CisJbmV0ZGV2X2RiZyhkZXYsICJFdGhlcm5ldCBmcmFtZSBoYWQgZXJyb3JzLCBzdGF0dXMgJTA4eFxuIiwgcnhfc3RhdHVzKTsKKwlpZiAocnhfc3RhdHVzICYgUnhUb29Mb25nKQorCQluZXRkZXZfZGJnKGRldiwgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSwgc3RhdHVzICUwNHghXG4iLAorCQkJICAgcnhfc3RhdHVzKTsKIAkJLyogQS5DLjogVGhlIGNoaXAgaGFuZ3MgaGVyZS4gKi8KLQl9CiAJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAlpZiAocnhfc3RhdHVzICYgKFJ4QmFkU3ltYm9sIHwgUnhCYWRBbGlnbikpCiAJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CkBAIC0xNDY2LDU2ICsxNDY5LDU1IEBACiAJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCWlmIChyeF9zdGF0dXMgJiBSeENSQ0VycikKIAkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JLyogUmVzZXQgdGhlIHJlY2VpdmVyLCBiYXNlZCBvbiBSZWFsVGVrIHJlY29tbWVuZGF0aW9uLiAoQnVnPykgKi8KKwkvKiBSZXNldCB0aGUgcmVjZWl2ZXIsIGJhc2VkIG9uIFJlYWxUZWsgcmVjb21tZW5kYXRpb24uKEJ1Zz8pICovCiAJdHAtPmN1cl9yeCA9IDA7CiAKIAkvKiBkaXNhYmxlIHJlY2VpdmUgKi8KLQl0bXA4ID0gTkVURFJWX1I4IChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcjsKLQlORVREUlZfVzhfRiAoQ2hpcENtZCwgdG1wOCB8IENtZFR4RW5iKTsKKwl0bXA4ID0gTkVURFJWX1I4KENoaXBDbWQpICYgQ2hpcENtZENsZWFyOworCU5FVERSVl9XOF9GKENoaXBDbWQsIHRtcDggfCBDbWRUeEVuYik7CiAKIAkvKiBBLkMuOiBSZXNldCB0aGUgbXVsdGljYXN0IGxpc3QuICovCi0JbmV0ZHJ2X3NldF9yeF9tb2RlIChkZXYpOworCW5ldGRydl9zZXRfcnhfbW9kZShkZXYpOwogCiAJLyogWFhYIHBvdGVudGlhbGx5IHRlbXBvcmFyeSBoYWNrIHRvCiAJICogcmVzdGFydCBodW5nIHJlY2VpdmVyICovCiAJd2hpbGUgKC0tdG1wX3dvcmsgPiAwKSB7Ci0JCXRtcDggPSBORVREUlZfUjggKENoaXBDbWQpOworCQl0bXA4ID0gTkVURFJWX1I4KENoaXBDbWQpOwogCQlpZiAoKHRtcDggJiBDbWRSeEVuYikgJiYgKHRtcDggJiBDbWRUeEVuYikpCiAJCQlicmVhazsKLQkJTkVURFJWX1c4X0YgKENoaXBDbWQsCi0JCQkgICh0bXA4ICYgQ2hpcENtZENsZWFyKSB8IENtZFJ4RW5iIHwgQ21kVHhFbmIpOworCQlORVREUlZfVzhfRihDaGlwQ21kLAorCQkJICAgICh0bXA4ICYgQ2hpcENtZENsZWFyKSB8IENtZFJ4RW5iIHwgQ21kVHhFbmIpOwogCX0KIAogCS8qIEcuUy46IFJlLWVuYWJsZSByZWNlaXZlciAqLwogCS8qIFhYWCB0ZW1wb3JhcnkgaGFjayB0byB3b3JrIGFyb3VuZCByZWNlaXZlciBoYW5nICovCi0JbmV0ZHJ2X3NldF9yeF9tb2RlIChkZXYpOworCW5ldGRydl9zZXRfcnhfbW9kZShkZXYpOwogCiAJaWYgKHRtcF93b3JrIDw9IDApCi0JCXByaW50ayAoS0VSTl9XQVJOSU5HIFBGWCAidHgvcnggZW5hYmxlIHdhaXQgdG9vIGxvbmdcbiIpOworCQluZXRkZXZfd2FybihkZXYsICJ0eC9yeCBlbmFibGUgd2FpdCB0b28gbG9uZ1xuIik7CiB9CiAKIAogLyogVGhlIGRhdGEgc2hlZXQgZG9lc24ndCBkZXNjcmliZSB0aGUgUnggcmluZyBhdCBhbGwsIHNvIEknbSBndWVzc2luZyBhdCB0aGUKICAgIGZpZWxkIGFsaWdubWVudHMgYW5kIHNlbWFudGljcy4gKi8KLXN0YXRpYyB2b2lkIG5ldGRydl9yeF9pbnRlcnJ1cHQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCitzdGF0aWMgdm9pZCBuZXRkcnZfcnhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCwgdm9pZCAqaW9hZGRyKQogewogCXVuc2lnbmVkIGNoYXIgKnJ4X3Jpbmc7CiAJdTE2IGN1cl9yeDsKIAotCWFzc2VydCAoZGV2ICE9IE5VTEwpOwotCWFzc2VydCAodHAgIT0gTlVMTCk7Ci0JYXNzZXJ0IChpb2FkZHIgIT0gTlVMTCk7CisJYXNzZXJ0KGRldiAhPSBOVUxMKTsKKwlhc3NlcnQodHAgIT0gTlVMTCk7CisJYXNzZXJ0KGlvYWRkciAhPSBOVUxMKTsKIAogCXJ4X3JpbmcgPSB0cC0+cnhfcmluZzsKIAljdXJfcnggPSB0cC0+Y3VyX3J4OwogCi0JRFBSSU5USyAoIiVzOiBJbiBuZXRkcnZfcngoKSwgY3VycmVudCAlNC40eCBCdWZBZGRyICU0LjR4LCIKLQkJICIgZnJlZSB0byAlNC40eCwgQ21kICUyLjJ4LlxuIiwgZGV2LT5uYW1lLCBjdXJfcngsCi0JCSBORVREUlZfUjE2IChSeEJ1ZkFkZHIpLAotCQkgTkVURFJWX1IxNiAoUnhCdWZQdHIpLCBORVREUlZfUjggKENoaXBDbWQpKTsKKwluZXRkZXZfZGJnKGRldiwgIkluIG5ldGRydl9yeCgpLCBjdXJyZW50ICUwNHggQnVmQWRkciAlMDR4LCBmcmVlIHRvICUwNHgsIENtZCAlMDJ4XG4iLAorCQkgICBjdXJfcngsIE5FVERSVl9SMTYoUnhCdWZBZGRyKSwKKwkJICAgTkVURFJWX1IxNihSeEJ1ZlB0ciksIE5FVERSVl9SOChDaGlwQ21kKSk7CiAKLQl3aGlsZSAoKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CisJd2hpbGUgKChORVREUlZfUjgoQ2hpcENtZCkgJiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CiAJCWludCByaW5nX29mZnNldCA9IGN1cl9yeCAlIFJYX0JVRl9MRU47CiAJCXUzMiByeF9zdGF0dXM7CiAJCXVuc2lnbmVkIGludCByeF9zaXplOwpAQCAtMTUyMywzMiArMTUyNSwyNSBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCS8qIHJlYWQgc2l6ZStzdGF0dXMgb2YgbmV4dCBmcmFtZSBmcm9tIERNQSByaW5nIGJ1ZmZlciAqLwotCQlyeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSAoKih1MzIgKikgKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpOworCQlyeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqKHUzMiAqKShyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKIAkJcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKIAkJcGt0X3NpemUgPSByeF9zaXplIC0gNDsKIAotCQlEUFJJTlRLICgiJXM6ICBuZXRkcnZfcngoKSBzdGF0dXMgJTQuNHgsIHNpemUgJTQuNHgsIgotCQkJICIgY3VyICU0LjR4LlxuIiwgZGV2LT5uYW1lLCByeF9zdGF0dXMsCi0JCQkgcnhfc2l6ZSwgY3VyX3J4KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJuZXRkcnZfcngoKSBzdGF0dXMgJTA0eCwgc2l6ZSAlMDR4LCBjdXIgJTA0eFxuIiwKKwkJCSAgIHJ4X3N0YXR1cywgcnhfc2l6ZSwgY3VyX3J4KTsKICNpZiBkZWZpbmVkKE5FVERSVl9ERUJVRykgJiYgKE5FVERSVl9ERUJVRyA+IDIpCi0JCXsKLQkJCWludCBpOwotCQkJRFBSSU5USyAoIiVzOiBGcmFtZSBjb250ZW50cyAiLCBkZXYtPm5hbWUpOwotCQkJZm9yIChpID0gMDsgaSA8IDcwOyBpKyspCi0JCQkJcHJpbnRrICgiICUyLjJ4IiwKLQkJCQkJcnhfcmluZ1tyaW5nX29mZnNldCArIGldKTsKLQkJCXByaW50ayAoIi5cbiIpOwotCQl9CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJGcmFtZSBjb250ZW50czogIiwgSEVYX0RVTVBfT0ZGU0VULAorCQkJCSAgICAgJnJ4X3JpbmdbcmluZ19vZmZzZXRdLCA3MCk7CiAjZW5kaWYKIAogCQkvKiBJZiBSeCBlcnIgb3IgaW52YWxpZCByeF9zaXplL3J4X3N0YXR1cyByZWNlaXZlZAotCQkgKiAod2hpY2ggaGFwcGVucyBpZiB3ZSBnZXQgbG9zdCBpbiB0aGUgcmluZyksCisJCSAqKHdoaWNoIGhhcHBlbnMgaWYgd2UgZ2V0IGxvc3QgaW4gdGhlIHJpbmcpLAogCQkgKiBSeCBwcm9jZXNzIGdldHMgcmVzZXQsIHNvIHdlIGFib3J0IGFueSBmdXJ0aGVyCiAJCSAqIFJ4IHByb2Nlc3NpbmcuCiAJCSAqLwogCQlpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAogCQkgICAgKCEocnhfc3RhdHVzICYgUnhTdGF0dXNPSykpKSB7Ci0JCQluZXRkcnZfcnhfZXJyIChyeF9zdGF0dXMsIGRldiwgdHAsIGlvYWRkcik7CisJCQluZXRkcnZfcnhfZXJyKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xNTYxLDcxICsxNTU2LDY3IEBACiAJCSAqIGRyb3AgcGFja2V0cyBoZXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KIAkJICovCiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X3NpemUgKyAyKTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3Rfc2l6ZSArIDIpOwogCQlpZiAoc2tiKSB7Ci0JCQlza2JfcmVzZXJ2ZSAoc2tiLCAyKTsJLyogMTYgYnl0ZSBhbGlnbiB0aGUgSVAgZmllbGRzLiAqLworCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBhbGlnbiB0aGUgSVAgZmllbGRzLiAqLwogCi0JCQlza2JfY29weV90b19saW5lYXJfZGF0YSAoc2tiLCAmcnhfcmluZ1tyaW5nX29mZnNldCArIDRdLCBwa3Rfc2l6ZSk7Ci0JCQlza2JfcHV0IChza2IsIHBrdF9zaXplKTsKKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgJnJ4X3JpbmdbcmluZ19vZmZzZXQgKyA0XSwgcGt0X3NpemUpOworCQkJc2tiX3B1dChza2IsIHBrdF9zaXplKTsKIAotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldik7Ci0JCQluZXRpZl9yeCAoc2tiKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yeChza2IpOwogCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQl9IGVsc2UgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCWRldi0+bmFtZSk7CisJCQluZXRkZXZfd2FybihkZXYsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iKTsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9CiAKIAkJY3VyX3J4ID0gKGN1cl9yeCArIHJ4X3NpemUgKyA0ICsgMykgJiB+MzsKLQkJTkVURFJWX1cxNl9GIChSeEJ1ZlB0ciwgY3VyX3J4IC0gMTYpOworCQlORVREUlZfVzE2X0YoUnhCdWZQdHIsIGN1cl9yeCAtIDE2KTsKIAl9CiAKLQlEUFJJTlRLICgiJXM6IERvbmUgbmV0ZHJ2X3J4KCksIGN1cnJlbnQgJTQuNHggQnVmQWRkciAlNC40eCwiCi0JCSAiIGZyZWUgdG8gJTQuNHgsIENtZCAlMi4yeC5cbiIsIGRldi0+bmFtZSwgY3VyX3J4LAotCQkgTkVURFJWX1IxNiAoUnhCdWZBZGRyKSwKLQkJIE5FVERSVl9SMTYgKFJ4QnVmUHRyKSwgTkVURFJWX1I4IChDaGlwQ21kKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJEb25lIG5ldGRydl9yeCgpLCBjdXJyZW50ICUwNHggQnVmQWRkciAlMDR4LCBmcmVlIHRvICUwNHgsIENtZCAlMDJ4XG4iLAorCQkgICBjdXJfcngsIE5FVERSVl9SMTYoUnhCdWZBZGRyKSwKKwkJICAgTkVURFJWX1IxNihSeEJ1ZlB0ciksIE5FVERSVl9SOChDaGlwQ21kKSk7CiAKIAl0cC0+Y3VyX3J4ID0gY3VyX3J4OwogfQogCiAKLXN0YXRpYyB2b2lkIG5ldGRydl93ZWlyZF9pbnRlcnJ1cHQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLAotCQkJCSAgICAgdm9pZCAqaW9hZGRyLAotCQkJCSAgICAgaW50IHN0YXR1cywgaW50IGxpbmtfY2hhbmdlZCkKK3N0YXRpYyB2b2lkIG5ldGRydl93ZWlyZF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLAorCQkJCSAgIHZvaWQgKmlvYWRkciwKKwkJCQkgICBpbnQgc3RhdHVzLCBpbnQgbGlua19jaGFuZ2VkKQogewotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IEFibm9ybWFsIGludGVycnVwdCwgc3RhdHVzICU4Ljh4LlxuIiwKLQkJZGV2LT5uYW1lLCBzdGF0dXMpOworCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiQWJub3JtYWwgaW50ZXJydXB0LCBzdGF0dXMgJTA4eFxuIiwKKwkJICAgICAgc3RhdHVzKTsKIAotCWFzc2VydCAoZGV2ICE9IE5VTEwpOwotCWFzc2VydCAodHAgIT0gTlVMTCk7Ci0JYXNzZXJ0IChpb2FkZHIgIT0gTlVMTCk7CisJYXNzZXJ0KGRldiAhPSBOVUxMKTsKKwlhc3NlcnQodHAgIT0gTlVMTCk7CisJYXNzZXJ0KGlvYWRkciAhPSBOVUxMKTsKIAogCS8qIFVwZGF0ZSB0aGUgZXJyb3IgY291bnQuICovCi0JZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIgKFJ4TWlzc2VkKTsKLQlORVREUlZfVzMyIChSeE1pc3NlZCwgMCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIoUnhNaXNzZWQpOworCU5FVERSVl9XMzIoUnhNaXNzZWQsIDApOwogCiAJaWYgKChzdGF0dXMgJiBSeFVuZGVycnVuKSAmJiBsaW5rX2NoYW5nZWQgJiYKIAkgICAgKHRwLT5kcnZfZmxhZ3MgJiBIQVNfTE5LX0NITkcpKSB7CiAJCS8qIFJlYWxseSBsaW5rLWNoYW5nZSBvbiBuZXcgY2hpcHMuICovCi0JCWludCBscGFyID0gTkVURFJWX1IxNiAoTldheUxQQVIpOworCQlpbnQgbHBhciA9IE5FVERSVl9SMTYoTldheUxQQVIpOwogCQlpbnQgZHVwbGV4ID0gKChscGFyICYgMHgwMTAwKSB8fCAobHBhciAmIDB4MDFDMCkgPT0gMHgwMDQwIHx8Ci0JCQkgICAgICB0cC0+ZHVwbGV4X2xvY2spOworCQkJICAgICB0cC0+ZHVwbGV4X2xvY2spOwogCQlpZiAodHAtPmZ1bGxfZHVwbGV4ICE9IGR1cGxleCkgewogCQkJdHAtPmZ1bGxfZHVwbGV4ID0gZHVwbGV4OwotCQkJTkVURFJWX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7Ci0JCQlORVREUlZfVzggKENvbmZpZzEsIHRwLT5mdWxsX2R1cGxleCA/IDB4NjAgOiAweDIwKTsKLQkJCU5FVERSVl9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKwkJCU5FVERSVl9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJCQlORVREUlZfVzgoQ29uZmlnMSwgdHAtPmZ1bGxfZHVwbGV4ID8gMHg2MCA6IDB4MjApOworCQkJTkVURFJWX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7CiAJCX0KIAkJc3RhdHVzICY9IH5SeFVuZGVycnVuOwogCX0KIAogCS8qIFhYWCBhbG9uZyB3aXRoIG5ldGRydl9yeF9lcnIsIGFyZSB3ZSBkb3VibGUtY291bnRpbmcgZXJyb3JzPyAqLwotCWlmIChzdGF0dXMgJgotCSAgICAoUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfCBSeEVyciB8IFJ4RklGT092ZXIpKQorCWlmIChzdGF0dXMgJiAoUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfCBSeEVyciB8IFJ4RklGT092ZXIpKQogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJaWYgKHN0YXR1cyAmIChQQ1NUaW1lb3V0KSkKQEAgLTE2MzQsMjIgKzE2MjUsMjEgQEAKIAkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCWlmIChzdGF0dXMgJiBSeE92ZXJmbG93KSB7CiAJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJdHAtPmN1cl9yeCA9IE5FVERSVl9SMTYgKFJ4QnVmQWRkcikgJSBSWF9CVUZfTEVOOwotCQlORVREUlZfVzE2X0YgKFJ4QnVmUHRyLCB0cC0+Y3VyX3J4IC0gMTYpOworCQl0cC0+Y3VyX3J4ID0gTkVURFJWX1IxNihSeEJ1ZkFkZHIpICUgUlhfQlVGX0xFTjsKKwkJTkVURFJWX1cxNl9GKFJ4QnVmUHRyLCB0cC0+Y3VyX3J4IC0gMTYpOwogCX0KIAlpZiAoc3RhdHVzICYgUENJRXJyKSB7CiAJCXUxNiBwY2lfY21kX3N0YXR1czsKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQgKHRwLT5wY2lfZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX2NtZF9zdGF0dXMpOworCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGNpX2RldiwgUENJX1NUQVRVUywgJnBjaV9jbWRfc3RhdHVzKTsKIAotCQlwcmludGsgKEtFUk5fRVJSICIlczogUENJIEJ1cyBlcnJvciAlNC40eC5cbiIsCi0JCQlkZXYtPm5hbWUsIHBjaV9jbWRfc3RhdHVzKTsKKwkJbmV0ZGV2X2VycihkZXYsICJQQ0kgQnVzIGVycm9yICUwNHhcbiIsIHBjaV9jbWRfc3RhdHVzKTsKIAl9CiB9CiAKIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCiAgICBhZnRlciB0aGUgVHggdGhyZWFkLiAqLwotc3RhdGljIGlycXJldHVybl90IG5ldGRydl9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXRkcnZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pbnN0YW5jZTsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE2NTgsMjIgKzE2NDgsMjEgQEAKIAlpbnQgc3RhdHVzID0gMCwgbGlua19jaGFuZ2VkID0gMDsgLyogYXZvaWQgYm9ndXMgInVuaW5pdCIgd2FybmluZyAqLwogCWludCBoYW5kbGVkID0gMDsKIAotCXNwaW5fbG9jayAoJnRwLT5sb2NrKTsKKwlzcGluX2xvY2soJnRwLT5sb2NrKTsKIAogCWRvIHsKLQkJc3RhdHVzID0gTkVURFJWX1IxNiAoSW50clN0YXR1cyk7CisJCXN0YXR1cyA9IE5FVERSVl9SMTYoSW50clN0YXR1cyk7CiAKLQkJLyogaC93IG5vIGxvbmdlciBwcmVzZW50IChob3RwbHVnPykgb3IgbWFqb3IgZXJyb3IsIGJhaWwgKi8KKwkJLyogaC93IG5vIGxvbmdlciBwcmVzZW50KGhvdHBsdWc/KSBvciBtYWpvciBlcnJvciwgYmFpbCAqLwogCQlpZiAoc3RhdHVzID09IDB4RkZGRikKIAkJCWJyZWFrOwogCiAJCWhhbmRsZWQgPSAxOwogCQkvKiBBY2tub3dsZWRnZSBhbGwgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHNvdXJjZXMgQVNBUCAqLwotCQlORVREUlZfVzE2X0YgKEludHJTdGF0dXMsIHN0YXR1cyk7CisJCU5FVERSVl9XMTZfRihJbnRyU3RhdHVzLCBzdGF0dXMpOwogCi0JCURQUklOVEsgKCIlczogaW50ZXJydXB0ICBzdGF0dXM9JSM0LjR4IG5ldyBpbnRzdGF0PSUjNC40eC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBzdGF0dXMsCi0JCQkJTkVURFJWX1IxNiAoSW50clN0YXR1cykpOworCQluZXRkZXZfZGJnKGRldiwgImludGVycnVwdCAgc3RhdHVzPSUjMDR4IG5ldyBpbnRzdGF0PSUjMDR4XG4iLAorCQkJICAgc3RhdHVzLCBORVREUlZfUjE2KEludHJTdGF0dXMpKTsKIAogCQlpZiAoKHN0YXR1cyAmCiAJCSAgICAgKFBDSUVyciB8IFBDU1RpbWVvdXQgfCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8CkBAIC0xNjgyLDY5ICsxNjcxLDY3IEBACiAKIAkJLyogQ2hlY2sgdW5jb21tb24gZXZlbnRzIHdpdGggb25lIHRlc3QuICovCiAJCWlmIChzdGF0dXMgJiAoUENJRXJyIHwgUENTVGltZW91dCB8IFJ4VW5kZXJydW4gfCBSeE92ZXJmbG93IHwKLQkJICAJICAgICAgUnhGSUZPT3ZlciB8IFR4RXJyIHwgUnhFcnIpKQotCQkJbmV0ZHJ2X3dlaXJkX2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyLAotCQkJCQkJIHN0YXR1cywgbGlua19jaGFuZ2VkKTsKKwkJCSAgICAgUnhGSUZPT3ZlciB8IFR4RXJyIHwgUnhFcnIpKQorCQkJbmV0ZHJ2X3dlaXJkX2ludGVycnVwdChkZXYsIHRwLCBpb2FkZHIsCisJCQkJCSAgICAgICBzdGF0dXMsIGxpbmtfY2hhbmdlZCk7CiAKIAkJaWYgKHN0YXR1cyAmIChSeE9LIHwgUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfCBSeEZJRk9PdmVyKSkJLyogUnggaW50ZXJydXB0ICovCi0JCQluZXRkcnZfcnhfaW50ZXJydXB0IChkZXYsIHRwLCBpb2FkZHIpOworCQkJbmV0ZHJ2X3J4X2ludGVycnVwdChkZXYsIHRwLCBpb2FkZHIpOwogCiAJCWlmIChzdGF0dXMgJiAoVHhPSyB8IFR4RXJyKSkKLQkJCW5ldGRydl90eF9pbnRlcnJ1cHQgKGRldiwgdHAsIGlvYWRkcik7CisJCQluZXRkcnZfdHhfaW50ZXJydXB0KGRldiwgdHAsIGlvYWRkcik7CiAKIAkJYm9ndXNjbnQtLTsKIAl9IHdoaWxlIChib2d1c2NudCA+IDApOwogCiAJaWYgKGJvZ3VzY250IDw9IDApIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSIlczogVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsICIKLQkJCSJJbnRyU3RhdHVzPTB4JTQuNHguXG4iLCBkZXYtPm5hbWUsCi0JCQlzdGF0dXMpOworCQluZXRkZXZfd2FybihkZXYsICJUb28gbXVjaCB3b3JrIGF0IGludGVycnVwdCwgSW50clN0YXR1cz0lIzA0eFxuIiwKKwkJCSAgICBzdGF0dXMpOwogCiAJCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KLQkJTkVURFJWX1cxNiAoSW50clN0YXR1cywgMHhmZmZmKTsKKwkJTkVURFJWX1cxNihJbnRyU3RhdHVzLCAweGZmZmYpOwogCX0KIAotCXNwaW5fdW5sb2NrICgmdHAtPmxvY2spOworCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CiAKLQlEUFJJTlRLICgiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBpbnRyX3N0YXR1cz0lIzQuNHguXG4iLAotCQkgZGV2LT5uYW1lLCBORVREUlZfUjE2IChJbnRyU3RhdHVzKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJleGl0aW5nIGludGVycnVwdCwgaW50cl9zdGF0dXM9JSMwNHhcbiIsCisJCSAgIE5FVERSVl9SMTYoSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCiAKLXN0YXRpYyBpbnQgbmV0ZHJ2X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBuZXRkcnZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JRFBSSU5USyAoIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAweCU0LjR4LlxuIiwKLQkJCWRldi0+bmFtZSwgTkVURFJWX1IxNiAoSW50clN0YXR1cykpOworCW5ldGRldl9kYmcoZGV2LCAiU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJSMwNHhcbiIsCisJCSAgIE5FVERSVl9SMTYoSW50clN0YXR1cykpOwogCi0JZGVsX3RpbWVyX3N5bmMgKCZ0cC0+dGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCiAJLyogU3RvcCB0aGUgY2hpcCdzIFR4IGFuZCBSeCBETUEgcHJvY2Vzc2VzLiAqLwotCU5FVERSVl9XOCAoQ2hpcENtZCwgKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpKTsKKwlORVREUlZfVzgoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KLQlORVREUlZfVzE2IChJbnRyTWFzaywgMHgwMDAwKTsKKwlORVREUlZfVzE2KEludHJNYXNrLCAweDAwMDApOwogCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCi0JZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIgKFJ4TWlzc2VkKTsKLQlORVREUlZfVzMyIChSeE1pc3NlZCwgMCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIoUnhNaXNzZWQpOworCU5FVERSVl9XMzIoUnhNaXNzZWQsIDApOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAotCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAotCW5ldGRydl90eF9jbGVhciAoZGV2KTsKKwluZXRkcnZfdHhfY2xlYXIoZGV2KTsKIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsIFJYX0JVRl9UT1RfTEVOLAogCQkJICAgIHRwLT5yeF9yaW5nLCB0cC0+cnhfcmluZ19kbWEpOwpAQCAtMTc1NCwyMyArMTc0MSwyMyBAQAogCXRwLT50eF9idWZzID0gTlVMTDsKIAogCS8qIEdyZWVuISBQdXQgdGhlIGNoaXAgaW4gbG93LXBvd2VyIG1vZGUuICovCi0JTkVURFJWX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7Ci0JTkVURFJWX1c4IChDb25maWcxLCAweDAzKTsKLQlORVREUlZfVzggKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisJTkVURFJWX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlORVREUlZfVzgoQ29uZmlnMSwgMHgwMyk7CisJTkVURFJWX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBuZXRkcnZfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCitzdGF0aWMgaW50IG5ldGRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6CQkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KQEAgLTE3NzgsMTUgKzE3NjUsMTUgQEAKIAkJLyogRmFsbCBUaHJvdWdoICovCiAKIAljYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnRwLT5sb2NrLCBmbGFncyk7Ci0JCWRhdGEtPnZhbF9vdXQgPSBtZGlvX3JlYWQgKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CisJCWRhdGEtPnZhbF9vdXQgPSBtZGlvX3JlYWQoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKLQkJbWRpb193cml0ZSAoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOworCQltZGlvX3dyaXRlKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE3OTQsNDMgKzE3ODEsNDMgQEAKIAkJYnJlYWs7CiAJfQogCi0JRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmMpOworCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmMpOwogCXJldHVybiByYzsKIH0KIAogLyogU2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuCiAgICBUaGlzIHJvdXRpbmUgaXMgbm90IHN0YXRlIHNlbnNpdGl2ZSBhbmQgbmVlZCBub3QgYmUgU01QIGxvY2tlZC4gKi8KIAotc3RhdGljIHZvaWQgbmV0ZHJ2X3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbmV0ZHJ2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KLQlpbnQgaSwgcnhfbW9kZTsKKwlpbnQgcnhfbW9kZTsKIAl1MzIgdG1wOwogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKLQlEUFJJTlRLICgiJXM6ICAgbmV0ZHJ2X3NldF9yeF9tb2RlKCU0LjR4KSBkb25lIC0tIFJ4IGNvbmZpZyAlOC44eC5cbiIsCi0JCQlkZXYtPm5hbWUsIGRldi0+ZmxhZ3MsIE5FVERSVl9SMzIgKFJ4Q29uZmlnKSk7CisJbmV0ZGV2X2RiZyhkZXYsICIlcyglMDR4KSBkb25lIC0tIFJ4IGNvbmZpZyAlMDhseFxuIiwKKwkJICAgX19mdW5jX18sIGRldi0+ZmxhZ3MsIE5FVERSVl9SMzIoUnhDb25maWcpKTsKIAogCS8qIE5vdGU6IGRvIG5vdCByZW9yZGVyLCBHQ0MgaXMgY2xldmVyIGFib3V0IGNvbW1vbiBzdGF0ZW1lbnRzLiAqLwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcnhfbW9kZSA9Ci0JCSAgICBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMgfAotCQkgICAgQWNjZXB0QWxsUGh5czsKKwkJCUFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CisJCQlBY2NlcHRBbGxQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CkBAIC0xODM4LDY2ICsxODI1LDY2IEBACiAJfQogCiAJLyogaWYgY2FsbGVkIGZyb20gaXJxIGhhbmRsZXIsIGxvY2sgYWxyZWFkeSBhY3F1aXJlZCAqLwotCWlmICghaW5faXJxICgpKQotCQlzcGluX2xvY2tfaXJxICgmdHAtPmxvY2spOworCWlmICghaW5faXJxKCkpCisJCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKIAogCS8qIFdlIGNhbiBzYWZlbHkgdXBkYXRlIHdpdGhvdXQgc3RvcHBpbmcgdGhlIGNoaXAuICovCiAJdG1wID0gbmV0ZHJ2X3J4X2NvbmZpZyB8IHJ4X21vZGUgfAotCQkoTkVURFJWX1IzMiAoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKLQlORVREUlZfVzMyX0YgKFJ4Q29uZmlnLCB0bXApOwotCU5FVERSVl9XMzJfRiAoTUFSMCArIDAsIG1jX2ZpbHRlclswXSk7Ci0JTkVURFJWX1czMl9GIChNQVIwICsgNCwgbWNfZmlsdGVyWzFdKTsKKwkJKE5FVERSVl9SMzIoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKKwlORVREUlZfVzMyX0YoUnhDb25maWcsIHRtcCk7CisJTkVURFJWX1czMl9GKE1BUjAgKyAwLCBtY19maWx0ZXJbMF0pOworCU5FVERSVl9XMzJfRihNQVIwICsgNCwgbWNfZmlsdGVyWzFdKTsKIAotCWlmICghaW5faXJxICgpKQotCQlzcGluX3VubG9ja19pcnEgKCZ0cC0+bG9jayk7CisJaWYgKCFpbl9pcnEoKSkKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0cC0+bG9jayk7CiAKLQlEUFJJTlRLICgiRVhJVFxuIik7CisJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IG5ldGRydl9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBuZXRkcnZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwotCW5ldGlmX2RldmljZV9kZXRhY2ggKGRldik7CisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBzdG9wIFR4IGFuZCBSeC4gKi8KLQlORVREUlZfVzE2IChJbnRyTWFzaywgMHgwMDAwKTsKLQlORVREUlZfVzggKENoaXBDbWQsIChORVREUlZfUjggKENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSk7CisJTkVURFJWX1cxNihJbnRyTWFzaywgMHgwMDAwKTsKKwlORVREUlZfVzgoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikpOwogCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCi0JZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIgKFJ4TWlzc2VkKTsKLQlORVREUlZfVzMyIChSeE1pc3NlZCwgMCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IE5FVERSVl9SMzIoUnhNaXNzZWQpOworCU5FVERSVl9XMzIoUnhNaXNzZWQsIDApOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAotCXBjaV9zYXZlX3N0YXRlIChwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlIChwZGV2LCBQQ0lfRDNob3QpOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgbmV0ZHJ2X3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IG5ldGRydl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkvKnN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOyovCiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZSAocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZSAocGRldik7Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2KTsKLQluZXRkcnZfaHdfc3RhcnQgKGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwluZXRkcnZfaHdfc3RhcnQoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkxNyw3ICsxOTA0LDcgQEAKIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgbmV0ZHJ2X2luaXRfbW9kdWxlICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbmV0ZHJ2X2luaXRfbW9kdWxlKHZvaWQpCiB7CiAvKiB3aGVuIGEgbW9kdWxlLCB0aGlzIGlzIHByaW50ZWQgd2hldGhlciBvciBub3QgZGV2aWNlcyBhcmUgZm91bmQgaW4gcHJvYmUgKi8KICNpZmRlZiBNT0RVTEUKQEAgLTE5MjcsOSArMTkxNCw5IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IG5ldGRydl9jbGVhbnVwX21vZHVsZSAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZXRkcnZfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZuZXRkcnZfcGNpX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuZXRkcnZfcGNpX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCA5ODkzOGVhLi4zZDFkM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQlvdXR3KFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhNdWx0aWNhc3QgfCBSeEJyb2FkY2FzdCB8IFJ4UHJvbSwKIAkJCSBpb2FkZHIgKyBFTDNfQ01EKTsKLQllbHNlIGlmIChkZXYtPm1jX2NvdW50IHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkKKwllbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQogCQlvdXR3KFNldFJ4RmlsdGVyfFJ4U3RhdGlvbnxSeE11bHRpY2FzdHxSeEJyb2FkY2FzdCwgaW9hZGRyICsgRUwzX0NNRCk7CiAJZWxzZQogCQlvdXR3KFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhCcm9hZGNhc3QsIGlvYWRkciArIEVMM19DTUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCAzMjJlMTFkLi4wOTFlMGIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKQEAgLTg4Niw3ICs4ODYsNyBAQAogCiAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAlvcHRzIHw9IFJ4TXVsdGljYXN0IHwgUnhQcm9tOwotICAgIGVsc2UgaWYgKGRldi0+bWNfY291bnQgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQorICAgIGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCiAJb3B0cyB8PSBSeE11bHRpY2FzdDsKICAgICBvdXR3KG9wdHMsIGlvYWRkciArIEVMM19DTUQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCBkNDMxYjU5Li4wOTI5MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtNzc5LDYgKzc3OSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNOZXQiLCAiQ05GMzAxIiwgMHhiYzQ3N2RkZSwgMHg3OGM1ZjQwYiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgImNvcmVnYSBGRXRoZXIgUENDLVRYRCIsIDB4NTI2MTQ0MGYsIDB4NDM2NzY4YzUpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRkV0aGVySUkgUENDLVRYRCIsIDB4NTI2MTQ0MGYsIDB4NzMwZGY3MmUpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRkV0aGVyIFBDQy1UWE0iLCAweDUyNjE0NDBmLCAweDNhYmJkMDYxKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRHluYWxpbmsiLCAiTDEwMEMxNiIsIDB4NTU2MzJmZDUsIDB4NjZiYzJhOTApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJTyBEQVRBIiwgIkVUWFBDTSIsIDB4NTQ3ZTY2ZGMsIDB4MjMzYWRhYzIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMaW5rc3lzIiwgIkV0aGVyRmFzdCAxMC8xMDAgUEMgQ2FyZCAoUENNUEMxMDAgVjMpIiwgMHgwNzMzY2M4MSwgMHgyMzIwMTlhOCksCkBAIC0xMDY1LDE0ICsxMDY2LDExIEBACiAJICAgCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AoMHgwMCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAkKIAkvKgogCSAqCVNsb3cgcGhhc2Ugd2l0aCBsb2NrIGhlbGQuCiAJICovCiAJIAotCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci0JCiAJZWlfbG9jYWwtPmlycWxvY2sgPSAxOwogCiAJc2VuZF9sZW5ndGggPSBtYXgobGVuZ3RoLCBFVEhfWkxFTik7CkBAIC0xNjI4LDggKzE2MjYsNyBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXUzMiBjcmM7CiAKLQlmb3IgKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pPWRtaS0+bmV4dCkgewotCQkKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQljcmMgPSBldGhlcl9jcmMoRVRIX0FMRU4sIGRtaS0+ZG1pX2FkZHIpOwogCQkvKiAKIAkJICogVGhlIDgzOTAgdXNlcyB0aGUgNiBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlCkBAIC0xNjU1LDcgKzE2NTIsNyBAQAogCiAJaWYgKCEoZGV2LT5mbGFncyYoSUZGX1BST01JU0N8SUZGX0FMTE1VTFRJKSkpIHsKIAkJbWVtc2V0KGVpX2xvY2FsLT5tY2ZpbHRlciwgMCwgOCk7Ci0JCWlmIChkZXYtPm1jX2xpc3QpCisJCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCQltYWtlX21jX2JpdHMoZWlfbG9jYWwtPm1jZmlsdGVyLCBkZXYpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0byBhY2NlcHQtYWxsICovCkBAIC0xNjcxLDcgKzE2NjgsNyBAQAogCiAgIAlpZihkZXYtPmZsYWdzJklGRl9QUk9NSVNDKQogICAJCW91dGJfcChFODM5MF9SWENPTkZJRyB8IDB4NTgsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7Ci0JZWxzZSBpZihkZXYtPmZsYWdzJklGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2xpc3QpCisJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpCiAgIAkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHIHwgMHg0OCwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKICAgCWVsc2UKICAgCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDQwLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggN2IxNzQwNC4uYjlkYzgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC0xMTg3LDIyICsxMTg3LDIwIEBACiAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAlvdXRiKDMsIGlvYWRkciArIFJYX01PREUpOwkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwotICAgIH0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IE1DX0ZJTFRFUkJSRUFLIHx8CisgICAgfSBlbHNlIGlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IE1DX0ZJTFRFUkJSRUFLIHx8CiAJICAgICAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAlvdXRiKDIsIGlvYWRkciArIFJYX01PREUpOwkvKiBVc2Ugbm9ybWFsIG1vZGUuICovCi0gICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDApIHsKKyAgICB9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJbWVtc2V0KG1jX2ZpbHRlciwgMHgwMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCW91dGIoMSwgaW9hZGRyICsgUlhfTU9ERSk7CS8qIElnbm9yZSBhbG1vc3QgYWxsIG11bHRpY2FzdHMuICovCiAgICAgfSBlbHNlIHsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JICAgIHVuc2lnbmVkIGludCBiaXQgPQotCSAgICAJZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgeworCSAgICB1bnNpZ25lZCBpbnQgYml0ID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAkgICAgbWNfZmlsdGVyW2JpdCA+PiAzXSB8PSAoMSA8PCAoYml0ICYgNykpOwogCX0KIAlvdXRiKDIsIGlvYWRkciArIFJYX01PREUpOwkvKiBVc2Ugbm9ybWFsIG1vZGUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggMTJlMzIzMy4uYzcxN2IxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMTQ3NSwxNCArMTQ3NSwxMyBAQAogewogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgaW50IGFkcltFVEhFUl9BRERSX0xFTl0gPSB7MH07IC8qIEV0aGVybmV0IGFkZHJlc3MgKi8KLSAgaW50IGk7Ci0gIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwogICB7CiAgICAgc3RhdGljIGludCBvbGQ7Ci0gICAgaWYgKGRldi0+bWNfY291bnQgIT0gb2xkKSB7Ci0gICAgICBvbGQgPSBkZXYtPm1jX2NvdW50OworICAgIGlmIChuZXRkZXZfbWNfY291bnQoZGV2KSAhPSBvbGQpIHsKKyAgICAgIG9sZCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogICAgICAgcHJfZGVidWcoIiVzOiBzZXR0aW5nIFJ4IG1vZGUgdG8gJWQgYWRkcmVzc2VzLlxuIiwKIAkgICAgZGV2LT5uYW1lLCBvbGQpOwogICAgIH0KQEAgLTE0OTAsMTUgKzE0ODksMTQgQEAKICNlbmRpZgogCiAgIC8qIFNldCBtdWx0aWNhc3RfbnVtX2FkZHJzLiAqLwotICBscC0+bXVsdGljYXN0X251bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisgIGxwLT5tdWx0aWNhc3RfbnVtX2FkZHJzID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAKICAgLyogU2V0IG11bHRpY2FzdF9sYWRyZi4gKi8KICAgaWYgKG51bV9hZGRycyA+IDApIHsKICAgICAvKiBDYWxjdWxhdGUgbXVsdGljYXN0IGxvZ2ljYWwgYWRkcmVzcyBmaWx0ZXIgKi8KICAgICBtZW1zZXQobHAtPm11bHRpY2FzdF9sYWRyZiwgMCwgTUFDRV9MQURSRl9MRU4pOwotICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKyAgICBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogICAgICAgbWVtY3B5KGFkciwgZG1pLT5kbWlfYWRkciwgRVRIRVJfQUREUl9MRU4pOwotICAgICAgZG1pID0gZG1pLT5uZXh0OwogICAgICAgQnVpbGRMQUYobHAtPm11bHRpY2FzdF9sYWRyZiwgYWRyKTsKICAgICB9CiAgIH0KQEAgLTE1MzcsMTUgKzE1MzUsMTUgQEAKICNpZmRlZiBQQ01DSUFfREVCVUcKICAgewogICAgIHN0YXRpYyBpbnQgb2xkOwotICAgIGlmIChkZXYtPm1jX2NvdW50ICE9IG9sZCkgewotICAgICAgb2xkID0gZGV2LT5tY19jb3VudDsKKyAgICBpZiAobmV0ZGV2X21jX2NvdW50KGRldikgIT0gb2xkKSB7CisgICAgICBvbGQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKICAgICAgIHByX2RlYnVnKCIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCiAJICAgIGRldi0+bmFtZSwgb2xkKTsKICAgICB9CiAgIH0KICNlbmRpZgogCi0gIGxwLT5tdWx0aWNhc3RfbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKyAgbHAtPm11bHRpY2FzdF9udW1fYWRkcnMgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKICAgcmVzdG9yZV9tdWx0aWNhc3RfbGlzdChkZXYpOwogCiB9IC8qIHNldF9tdWx0aWNhc3RfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA2ZGQ0ODZkLi41YWRjNjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDUzLDggKzQ1Myw3IEBACiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CisgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CkBAIC02NTIsOCArNjUxLDcgQEAKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDY0OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKQEAgLTE1OTUsMjcgKzE1OTMsNiBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIENhbGN1bGF0ZSB2YWx1ZXMgZm9yIHRoZSBoYXJkd2FyZSBtdWx0aWNhc3QgZmlsdGVyIGhhc2ggdGFibGUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBmaWxsX211bHRpY2FzdF90YmwoaW50IGNvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKmFkZHJzLAotCQkJICAgICAgIHVfY2hhciAqbXVsdGljYXN0X3RhYmxlKQotewotICAgIHN0cnVjdCBkZXZfbWNfbGlzdAkqbWNfYWRkcjsKLQotICAgIGZvciAobWNfYWRkciA9IGFkZHJzOyAgbWNfYWRkciAmJiBjb3VudC0tID4gMDsgIG1jX2FkZHIgPSBtY19hZGRyLT5uZXh0KSB7Ci0JdV9pbnQgcG9zaXRpb24gPSBldGhlcl9jcmMoNiwgbWNfYWRkci0+ZG1pX2FkZHIpOwotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCQkvKiBWZXJpZnkgbXVsdGljYXN0IGFkZHJlc3MuICovCi0JaWYgKChtY19hZGRyLT5kbWlfYWRkclswXSAmIDEpID09IDApCi0JICAgIGNvbnRpbnVlOwotI2VuZGlmCi0JbXVsdGljYXN0X3RhYmxlW3Bvc2l0aW9uID4+IDI5XSB8PSAxIDw8ICgocG9zaXRpb24gPj4gMjYpICYgNyk7Ci0gICAgfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogICAgIFNldCB0aGUgcmVjZWl2ZSBtb2RlLgogCiAgICAgVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgYm90aCB0aGUgcHJvdG9jb2wgbGV2ZWwgdG8gbm90aWZ5IHVzIG9mCkBAIC0xNjM4LDkgKzE2MTUsMTcgQEAKICAgICB9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJcnhfY2ZnX3NldHRpbmcgPSBSeFN0cmlwQ1JDIHwgUnhFbmFibGUgfCBSeEFsbE11bHRpOwogICAgIGVsc2UgewotCWlmIChkZXYtPm1jX2NvdW50KSAgewotCSAgICBmaWxsX211bHRpY2FzdF90YmwoZGV2LT5tY19jb3VudCwgZGV2LT5tY19saXN0LAotCQkJICAgICAgICh1X2NoYXIgKiltdWx0aWNhc3RfdGFibGUpOworCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkgICAgc3RydWN0IGRldl9tY19saXN0ICptY19hZGRyOworCisJICAgIG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2FkZHIsIGRldikgeworCQl1X2ludCBwb3NpdGlvbiA9IGV0aGVyX2NyYyg2LCBtY19hZGRyLT5kbWlfYWRkcik7CisjaWZuZGVmIGZpbmFsX3ZlcnNpb24JCS8qIFZlcmlmeSBtdWx0aWNhc3QgYWRkcmVzcy4gKi8KKwkJaWYgKChtY19hZGRyLT5kbWlfYWRkclswXSAmIDEpID09IDApCisJCSAgICBjb250aW51ZTsKKyNlbmRpZgorCQltdWx0aWNhc3RfdGFibGVbcG9zaXRpb24gPj4gMjldIHw9IDEgPDwgKChwb3NpdGlvbiA+PiAyNikgJiA3KTsKKwkgICAgfQogCX0KIAlyeF9jZmdfc2V0dGluZyA9IFJ4U3RyaXBDUkMgfCBSeEVuYWJsZTsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwppbmRleCA0NjZmYzcyNi4uNGQxODAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0xMzY0LDQ3ICsxMzY0LDYzIEBACiAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RydWN0IHNldF9hZGRyZXNzX2luZm8geworCWludCByZWdfbnI7CisJaW50IHBhZ2VfbnI7CisJaW50IG1vaGF3azsKKwl1bnNpZ25lZCBpbnQgaW9hZGRyOworfTsKKworc3RhdGljIHZvaWQgc2V0X2FkZHJlc3Moc3RydWN0IHNldF9hZGRyZXNzX2luZm8gKnNhX2luZm8sIGNoYXIgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IGlvYWRkciA9IHNhX2luZm8tPmlvYWRkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKHNhX2luZm8tPnJlZ19uciA+IDE1KSB7CisJCQlzYV9pbmZvLT5yZWdfbnIgPSA4OworCQkJc2FfaW5mby0+cGFnZV9ucisrOworCQkJU2VsZWN0UGFnZShzYV9pbmZvLT5wYWdlX25yKTsKKwkJfQorCQlpZiAoc2FfaW5mby0+bW9oYXdrKQorCQkJUHV0Qnl0ZShzYV9pbmZvLT5yZWdfbnIrKywgYWRkcls1IC0gaV0pOworCQllbHNlCisJCQlQdXRCeXRlKHNhX2luZm8tPnJlZ19ucisrLCBhZGRyW2ldKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqCiAgKiBTZXQgYWxsIGFkZHJlc3NlczogVGhpcyBmaXJzdCBvbmUgaXMgdGhlIGluZGl2aWR1YWwgYWRkcmVzcywKICAqIHRoZSBuZXh0IDkgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBtdWx0aWNhc3QgbGlzdCBhbmQKICAqIHRoZSByZXN0IGlzIGZpbGxlZCB3aXRoIHRoZSBpbmRpdmlkdWFsIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyB2b2lkCi1zZXRfYWRkcmVzc2VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZXRfYWRkcmVzc2VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OwotICAgIHVuc2lnbmVkIGNoYXIgKmFkZHI7Ci0gICAgaW50IGksaixrLG47CisJdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCXN0cnVjdCBzZXRfYWRkcmVzc19pbmZvIHNhX2luZm87CisJaW50IGk7CiAKLSAgICBTZWxlY3RQYWdlKGs9MHg1MCk7Ci0gICAgZm9yIChpPTAsaj04LG49MDsgOyBpKyssIGorKykgewotCWlmIChpID4gNSkgewotCSAgICBpZiAoKytuID4gOSkKLQkJYnJlYWs7Ci0JICAgIGkgPSAwOwotCSAgICBpZiAobiA+IDEgJiYgbiA8PSBkZXYtPm1jX2NvdW50ICYmIGRtaSkgewotCSAgIAkgZG1pID0gZG1pLT5uZXh0OwotCSAgICB9CisJLyoKKwkgKiBTZXR1cCB0aGUgaW5mbyBzdHJ1Y3R1cmUgc28gdGhhdCBieSBmaXJzdCBzZXRfYWRkcmVzcyBjYWxsIGl0IHdpbGwgZG8KKwkgKiBTZWxlY3RQYWdlIHdpdGggdGhlIHJpZ2h0IHBhZ2UgbnVtYmVyLiBIZW5jZSB0aGVzZSBvbmVzIGhlcmUuCisJICovCisJc2FfaW5mby5yZWdfbnIgPSAxNSArIDE7CisJc2FfaW5mby5wYWdlX25yID0gMHg1MCAtIDE7CisJc2FfaW5mby5tb2hhd2sgPSBscC0+bW9oYXdrOworCXNhX2luZm8uaW9hZGRyID0gaW9hZGRyOworCisJc2V0X2FkZHJlc3MoJnNhX2luZm8sIGRldi0+ZGV2X2FkZHIpOworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CisJCWlmIChpKysgPT0gOSkKKwkJCWJyZWFrOworCQlzZXRfYWRkcmVzcygmc2FfaW5mbywgZG1pLT5kbWlfYWRkcik7CiAJfQotCWlmIChqID4gMTUpIHsKLQkgICAgaiA9IDg7Ci0JICAgIGsrKzsKLQkgICAgU2VsZWN0UGFnZShrKTsKLQl9Ci0KLQlpZiAobiAmJiBuIDw9IGRldi0+bWNfY291bnQgJiYgZG1pKQotCSAgICBhZGRyID0gZG1pLT5kbWlfYWRkcjsKLQllbHNlCi0JICAgIGFkZHIgPSBkZXYtPmRldl9hZGRyOwotCi0JaWYgKGxwLT5tb2hhd2spCi0JICAgIFB1dEJ5dGUoaiwgYWRkcls1LWldKTsKLQllbHNlCi0JICAgIFB1dEJ5dGUoaiwgYWRkcltpXSk7Ci0gICAgfQotICAgIFNlbGVjdFBhZ2UoMCk7CisJd2hpbGUgKGkrKyA8IDkpCisJCXNldF9hZGRyZXNzKCZzYV9pbmZvLCBkZXYtPmRldl9hZGRyKTsKKwlTZWxlY3RQYWdlKDApOwogfQogCiAvKioqKioqKioqKioqKioqKgpAQCAtMTQyNCw5ICsxNDQwLDkgQEAKIAogICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsgLyogc25vb3AgKi8KIAlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCB2YWx1ZSB8IDB4MDYpOyAvKiBzZXQgTVBFIGFuZCBQTUUgKi8KLSAgICB9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiA5IHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworICAgIH0gZWxzZSBpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiA5IHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCVB1dEJ5dGUoWElSQ1JFRzQyX1NXQzEsIHZhbHVlIHwgMHgwMik7IC8qIHNldCBNUEUgKi8KLSAgICB9IGVsc2UgaWYgKGRldi0+bWNfY291bnQpIHsKKyAgICB9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCS8qIHRoZSBjaGlwIGNhbiBmaWx0ZXIgOSBhZGRyZXNzZXMgcGVyZmVjdGx5ICovCiAJUHV0Qnl0ZShYSVJDUkVHNDJfU1dDMSwgdmFsdWUgfCAweDAxKTsKIAlTZWxlY3RQYWdlKDB4NDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IGUxNTQ2NzcuLjA4NGQ3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTIxLDYgKzIxLDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjZGVmaW5lIERSVl9OQU1FCSJwY25ldDMyIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zNSIKICNkZWZpbmUgRFJWX1JFTERBVEUJIjIxLkFwci4yMDA4IgpAQCAtNTAsMTYgKzUyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAvKgogICogUENJIGRldmljZSBpZGVudGlmaWVycyBmb3IgIm5ldyBzdHlsZSIgTGludXggUENJIERldmljZSBEcml2ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY25ldDMyX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY25ldDMyX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRSksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSksIH0sCiAKQEAgLTgzLDcgKzg1LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNuZXQzMl9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPQogICAgIHsgMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjAsIDAgfTsKIAotc3RhdGljIGludCBwY25ldDMyX2RlYnVnID0gMDsKK3N0YXRpYyBpbnQgcGNuZXQzMl9kZWJ1ZzsKIHN0YXRpYyBpbnQgdHhfc3RhcnQgPSAxOwkvKiBNYXBwaW5nIC0tIDA6MjAsIDE6NjQsIDI6MTI4LCAzOn4yMjAgKGRlcGVuZHMgb24gY2hpcCB2ZXJzKSAqLwogc3RhdGljIGludCBwY25ldDMydmxiOwkJLyogY2hlY2sgZm9yIFZMQiBjYXJkcyA/ICovCiAKQEAgLTM5MCw3ICszOTIsNyBAQAogc3RhdGljIHUxNiBwY25ldDMyX2R3aW9fcmVhZF9jc3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgpCiB7CiAJb3V0bChpbmRleCwgYWRkciArIFBDTkVUMzJfRFdJT19SQVApOwotCXJldHVybiAoaW5sKGFkZHIgKyBQQ05FVDMyX0RXSU9fUkRQKSAmIDB4ZmZmZik7CisJcmV0dXJuIGlubChhZGRyICsgUENORVQzMl9EV0lPX1JEUCkgJiAweGZmZmY7CiB9CiAKIHN0YXRpYyB2b2lkIHBjbmV0MzJfZHdpb193cml0ZV9jc3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgsIHUxNiB2YWwpCkBAIC00MDIsNyArNDA0LDcgQEAKIHN0YXRpYyB1MTYgcGNuZXQzMl9kd2lvX3JlYWRfYmNyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4KQogewogCW91dGwoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKTsKLQlyZXR1cm4gKGlubChhZGRyICsgUENORVQzMl9EV0lPX0JEUCkgJiAweGZmZmYpOworCXJldHVybiBpbmwoYWRkciArIFBDTkVUMzJfRFdJT19CRFApICYgMHhmZmZmOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfYmNyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4LCB1MTYgdmFsKQpAQCAtNDEzLDcgKzQxNSw3IEBACiAKIHN0YXRpYyB1MTYgcGNuZXQzMl9kd2lvX3JlYWRfcmFwKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gKGlubChhZGRyICsgUENORVQzMl9EV0lPX1JBUCkgJiAweGZmZmYpOworCXJldHVybiBpbmwoYWRkciArIFBDTkVUMzJfRFdJT19SQVApICYgMHhmZmZmOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfcmFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHZhbCkKQEAgLTQ4NywxMCArNDg5LDcgQEAKIAkJCQkJICAgKDEgPDwgc2l6ZSksCiAJCQkJCSAgICZuZXdfcmluZ19kbWFfYWRkcik7CiAJaWYgKG5ld190eF9yaW5nID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIkNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAltZW1zZXQobmV3X3R4X3JpbmcsIDAsIHNpemVvZihzdHJ1Y3QgcGNuZXQzMl90eF9oZWFkKSAqICgxIDw8IHNpemUpKTsKQEAgLTQ5OCwxOCArNDk3LDE0IEBACiAJbmV3X2RtYV9hZGRyX2xpc3QgPSBrY2FsbG9jKCgxIDw8IHNpemUpLCBzaXplb2YoZG1hX2FkZHJfdCksCiAJCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfZG1hX2FkZHJfbGlzdCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGZyZWVfbmV3X3R4X3Jpbmc7CiAJfQogCiAJbmV3X3NrYl9saXN0ID0ga2NhbGxvYygoMSA8PCBzaXplKSwgc2l6ZW9mKHN0cnVjdCBza19idWZmICopLAogCQkJCUdGUF9BVE9NSUMpOwogCWlmICghbmV3X3NrYl9saXN0KSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZnJlZV9uZXdfbGlzdHM7CiAJfQogCkBAIC01MjksMTUgKzUyNCwxNCBAQAogCWxwLT50eF9za2J1ZmYgPSBuZXdfc2tiX2xpc3Q7CiAJcmV0dXJuOwogCi0gICAgZnJlZV9uZXdfbGlzdHM6CitmcmVlX25ld19saXN0czoKIAlrZnJlZShuZXdfZG1hX2FkZHJfbGlzdCk7Ci0gICAgZnJlZV9uZXdfdHhfcmluZzoKK2ZyZWVfbmV3X3R4X3Jpbmc6CiAJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2RldiwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHBjbmV0MzJfdHhfaGVhZCkgKgogCQkJICAgICgxIDw8IHNpemUpLAogCQkJICAgIG5ld190eF9yaW5nLAogCQkJICAgIG5ld19yaW5nX2RtYV9hZGRyKTsKLQlyZXR1cm47CiB9CiAKIC8qCkBAIC01NjUsMTAgKzU1OSw3IEBACiAJCQkJCSAgICgxIDw8IHNpemUpLAogCQkJCQkgICAmbmV3X3JpbmdfZG1hX2FkZHIpOwogCWlmIChuZXdfcnhfcmluZyA9PSBOVUxMKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAJbWVtc2V0KG5ld19yeF9yaW5nLCAwLCBzaXplb2Yoc3RydWN0IHBjbmV0MzJfcnhfaGVhZCkgKiAoMSA8PCBzaXplKSk7CkBAIC01NzYsMTggKzU2NywxNCBAQAogCW5ld19kbWFfYWRkcl9saXN0ID0ga2NhbGxvYygoMSA8PCBzaXplKSwgc2l6ZW9mKGRtYV9hZGRyX3QpLAogCQkJCUdGUF9BVE9NSUMpOwogCWlmICghbmV3X2RtYV9hZGRyX2xpc3QpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBmcmVlX25ld19yeF9yaW5nOwogCX0KIAogCW5ld19za2JfbGlzdCA9IGtjYWxsb2MoKDEgPDwgc2l6ZSksIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwKIAkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19za2JfbGlzdCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGZyZWVfbmV3X2xpc3RzOwogCX0KIApAQCAtNTk5LDE1ICs1ODYsMTQgQEAKIAkJbmV3X3NrYl9saXN0W25ld10gPSBscC0+cnhfc2tidWZmW25ld107CiAJfQogCS8qIG5vdyBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgbmVlZGVkICovCi0JZm9yICg7IG5ldyA8IHNpemU7IG5ldysrICkgeworCWZvciAoOyBuZXcgPCBzaXplOyBuZXcrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tidWZmOwogCQluZXdfc2tiX2xpc3RbbmV3XSA9IGRldl9hbGxvY19za2IoUEtUX0JVRl9TS0IpOwotCQlpZiAoIShyeF9za2J1ZmYgPSBuZXdfc2tiX2xpc3RbbmV3XSkpIHsKKwkJcnhfc2tidWZmID0gbmV3X3NrYl9saXN0W25ld107CisJCWlmICghcnhfc2tidWZmKSB7CiAJCQkvKiBrZWVwIHRoZSBvcmlnaW5hbCBsaXN0cyBhbmQgYnVmZmVycyAqLwotCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IHBjbmV0MzJfcmVhbGxvY19yeF9yaW5nIGRldl9hbGxvY19za2IgZmFpbGVkLlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICIlcyBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuIiwKKwkJCQkgIF9fZnVuY19fKTsKIAkJCWdvdG8gZnJlZV9hbGxfbmV3OwogCQl9CiAJCXNrYl9yZXNlcnZlKHJ4X3NrYnVmZiwgTkVUX0lQX0FMSUdOKTsKQEAgLTY0NCw4ICs2MzAsOCBAQAogCWxwLT5yeF9za2J1ZmYgPSBuZXdfc2tiX2xpc3Q7CiAJcmV0dXJuOwogCi0gICAgZnJlZV9hbGxfbmV3OgotCWZvciAoOyAtLW5ldyA+PSBscC0+cnhfcmluZ19zaXplOyApIHsKK2ZyZWVfYWxsX25ldzoKKwl3aGlsZSAoLS1uZXcgPj0gbHAtPnJ4X3Jpbmdfc2l6ZSkgewogCQlpZiAobmV3X3NrYl9saXN0W25ld10pIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsIG5ld19kbWFfYWRkcl9saXN0W25ld10sCiAJCQkJCSBQS1RfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CkBAIC02NTMsOSArNjM5LDkgQEAKIAkJfQogCX0KIAlrZnJlZShuZXdfc2tiX2xpc3QpOwotICAgIGZyZWVfbmV3X2xpc3RzOgorZnJlZV9uZXdfbGlzdHM6CiAJa2ZyZWUobmV3X2RtYV9hZGRyX2xpc3QpOwotICAgIGZyZWVfbmV3X3J4X3Jpbmc6CitmcmVlX25ld19yeF9yaW5nOgogCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3J4X2hlYWQpICoKIAkJCSAgICAoMSA8PCBzaXplKSwKQEAgLTgzOCwxNiArODI0LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiJXM6IFJpbmcgUGFyYW0gU2V0dGluZ3M6IFJYOiAlZCwgVFg6ICVkXG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgICBscC0+cnhfcmluZ19zaXplLCBscC0+dHhfcmluZ19zaXplKTsKKwluZXRpZl9pbmZvKGxwLCBkcnYsIGRldiwgIlJpbmcgUGFyYW0gU2V0dGluZ3M6IFJYOiAlZCwgVFg6ICVkXG4iLAorCQkgICBscC0+cnhfcmluZ19zaXplLCBscC0+dHhfcmluZ19zaXplKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsCi0JCQkJdTggKiBkYXRhKQorCQkJCXU4ICpkYXRhKQogewogCW1lbWNweShkYXRhLCBwY25ldDMyX2dzdHJpbmdzX3Rlc3QsIHNpemVvZihwY25ldDMyX2dzdHJpbmdzX3Rlc3QpKTsKIH0KQEAgLTg3MSwxNyArODU1LDE1IEBACiAJaWYgKHRlc3QtPmZsYWdzID09IEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKIAkJcmMgPSBwY25ldDMyX2xvb3BiYWNrX3Rlc3QoZGV2LCBkYXRhKTsKIAkJaWYgKHJjKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExvb3BiYWNrIHRlc3QgZmFpbGVkLlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGlmX3ByaW50ayhscCwgaHcsIEtFUk5fREVCVUcsIGRldiwKKwkJCQkgICAgICJMb29wYmFjayB0ZXN0IGZhaWxlZFxuIik7CiAJCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7Ci0JCX0gZWxzZSBpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTG9vcGJhY2sgdGVzdCBwYXNzZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JfSBlbHNlIGlmIChuZXRpZl9tc2dfaHcobHApKQotCQlwcmludGsoS0VSTl9ERUJVRwotCQkgICAgICAgIiVzOiBObyB0ZXN0cyB0byBydW4gKHNwZWNpZnkgJ09mZmxpbmUnIG9uIGV0aHRvb2wpLiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQl9IGVsc2UKKwkJCW5ldGlmX3ByaW50ayhscCwgaHcsIEtFUk5fREVCVUcsIGRldiwKKwkJCQkgICAgICJMb29wYmFjayB0ZXN0IHBhc3NlZFxuIik7CisJfSBlbHNlCisJCW5ldGlmX3ByaW50ayhscCwgaHcsIEtFUk5fREVCVUcsIGRldiwKKwkJCSAgICAgIk5vIHRlc3RzIHRvIHJ1biAoc3BlY2lmeSAnT2ZmbGluZScgb24gZXRodG9vbClcbiIpOwogfQkJCQkvKiBlbmQgcGNuZXQzMl9ldGh0b29sX3Rlc3QgKi8KIAogc3RhdGljIGludCBwY25ldDMyX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDY0X3QgKiBkYXRhMSkKQEAgLTkyNiw0MCArOTA4LDM5IEBACiAJLyogSW5pdGlhbGl6ZSBUcmFuc21pdCBidWZmZXJzLiAqLwogCXNpemUgPSBkYXRhX2xlbiArIDE1OwogCWZvciAoeCA9IDA7IHggPCBudW1idWZmczsgeCsrKSB7Ci0JCWlmICghKHNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSkpKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiJXM6IENhbm5vdCBhbGxvY2F0ZSBza2IgYXQgbGluZTogJWQhXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIF9fTElORV9fKTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKKwkJaWYgKCFza2IpIHsKKwkJCW5ldGlmX3ByaW50ayhscCwgaHcsIEtFUk5fREVCVUcsIGRldiwKKwkJCQkgICAgICJDYW5ub3QgYWxsb2NhdGUgc2tiIGF0IGxpbmU6ICVkIVxuIiwKKwkJCQkgICAgIF9fTElORV9fKTsKIAkJCWdvdG8gY2xlYW5fdXA7Ci0JCX0gZWxzZSB7Ci0JCQlwYWNrZXQgPSBza2ItPmRhdGE7Ci0JCQlza2JfcHV0KHNrYiwgc2l6ZSk7CS8qIGNyZWF0ZSBzcGFjZSBmb3IgZGF0YSAqLwotCQkJbHAtPnR4X3NrYnVmZlt4XSA9IHNrYjsKLQkJCWxwLT50eF9yaW5nW3hdLmxlbmd0aCA9IGNwdV90b19sZTE2KC1za2ItPmxlbik7Ci0JCQlscC0+dHhfcmluZ1t4XS5taXNjID0gMDsKLQotCQkJLyogcHV0IERBIGFuZCBTQSBpbnRvIHRoZSBza2IgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJKnBhY2tldCsrID0gZGV2LT5kZXZfYWRkcltpXTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJKnBhY2tldCsrID0gZGV2LT5kZXZfYWRkcltpXTsKLQkJCS8qIHR5cGUgKi8KLQkJCSpwYWNrZXQrKyA9IDB4MDg7Ci0JCQkqcGFja2V0KysgPSAweDA2OwotCQkJLyogcGFja2V0IG51bWJlciAqLwotCQkJKnBhY2tldCsrID0geDsKLQkJCS8qIGZpbGwgcGFja2V0IHdpdGggZGF0YSAqLwotCQkJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspCi0JCQkJKnBhY2tldCsrID0gaTsKLQotCQkJbHAtPnR4X2RtYV9hZGRyW3hdID0KLQkJCSAgICBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2Rldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlscC0+dHhfcmluZ1t4XS5iYXNlID0gY3B1X3RvX2xlMzIobHAtPnR4X2RtYV9hZGRyW3hdKTsKLQkJCXdtYigpOwkvKiBNYWtlIHN1cmUgb3duZXIgY2hhbmdlcyBhZnRlciBhbGwgb3RoZXJzIGFyZSB2aXNpYmxlICovCi0JCQlscC0+dHhfcmluZ1t4XS5zdGF0dXMgPSBjcHVfdG9fbGUxNihzdGF0dXMpOwogCQl9CisJCXBhY2tldCA9IHNrYi0+ZGF0YTsKKwkJc2tiX3B1dChza2IsIHNpemUpOwkvKiBjcmVhdGUgc3BhY2UgZm9yIGRhdGEgKi8KKwkJbHAtPnR4X3NrYnVmZlt4XSA9IHNrYjsKKwkJbHAtPnR4X3JpbmdbeF0ubGVuZ3RoID0gY3B1X3RvX2xlMTYoLXNrYi0+bGVuKTsKKwkJbHAtPnR4X3JpbmdbeF0ubWlzYyA9IDA7CisKKwkJLyogcHV0IERBIGFuZCBTQSBpbnRvIHRoZSBza2IgKi8KKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCSpwYWNrZXQrKyA9IGRldi0+ZGV2X2FkZHJbaV07CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQkqcGFja2V0KysgPSBkZXYtPmRldl9hZGRyW2ldOworCQkvKiB0eXBlICovCisJCSpwYWNrZXQrKyA9IDB4MDg7CisJCSpwYWNrZXQrKyA9IDB4MDY7CisJCS8qIHBhY2tldCBudW1iZXIgKi8KKwkJKnBhY2tldCsrID0geDsKKwkJLyogZmlsbCBwYWNrZXQgd2l0aCBkYXRhICovCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKQorCQkJKnBhY2tldCsrID0gaTsKKworCQlscC0+dHhfZG1hX2FkZHJbeF0gPQorCQkJcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlscC0+dHhfcmluZ1t4XS5iYXNlID0gY3B1X3RvX2xlMzIobHAtPnR4X2RtYV9hZGRyW3hdKTsKKwkJd21iKCk7CS8qIE1ha2Ugc3VyZSBvd25lciBjaGFuZ2VzIGFmdGVyIGFsbCBvdGhlcnMgYXJlIHZpc2libGUgKi8KKwkJbHAtPnR4X3JpbmdbeF0uc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKIAl9CiAKIAl4ID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAzMik7CS8qIHNldCBpbnRlcm5hbCBsb29wYmFjayBpbiBCQ1IzMiAqLwpAQCAtOTg0LDkgKzk2NSw3IEBACiAJCQl0aWNrcysrOwogCQl9CiAJCWlmICh0aWNrcyA9PSAyMDApIHsKLQkJCWlmIChuZXRpZl9tc2dfaHcobHApKQotCQkJCXByaW50aygiJXM6IERlc2MgJWQgZmFpbGVkIHRvIHJlc2V0IVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCB4KTsKKwkJCW5ldGlmX2VycihscCwgaHcsIGRldiwgIkRlc2MgJWQgZmFpbGVkIHRvIHJlc2V0IVxuIiwgeCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTk5NCwxNSArOTczLDE0IEBACiAJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9TVE9QKTsJLyogU2V0IFNUT1AgYml0ICovCiAJd21iKCk7CiAJaWYgKG5ldGlmX21zZ19odyhscCkgJiYgbmV0aWZfbXNnX3BrdGRhdGEobHApKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggbG9vcGJhY2sgcGFja2V0czpcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiUlggbG9vcGJhY2sgcGFja2V0czpcbiIpOwogCiAJCWZvciAoeCA9IDA7IHggPCBudW1idWZmczsgeCsrKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBhY2tldCAlZDpcbiIsIGRldi0+bmFtZSwgeCk7CisJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlBhY2tldCAlZDogIiwgeCk7CiAJCQlza2IgPSBscC0+cnhfc2tidWZmW3hdOwotCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCXByaW50aygiJTAyeCAiLCAqKHNrYi0+ZGF0YSArIGkpKTsKLQkJCX0KLQkJCXByaW50aygiXG4iKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQkJcHJfY29udCgiICUwMngiLCAqKHNrYi0+ZGF0YSArIGkpKTsKKwkJCXByX2NvbnQoIlxuIik7CiAJCX0KIAl9CiAKQEAgLTEwMTMsMTEgKzk5MSw5IEBACiAJCXBhY2tldCA9IGxwLT50eF9za2J1ZmZbeF0tPmRhdGE7CiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJCWlmICgqKHNrYi0+ZGF0YSArIGkpICE9IHBhY2tldFtpXSkgewotCQkJCWlmIChuZXRpZl9tc2dfaHcobHApKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkgICAgICAgIiVzOiBFcnJvciBpbiBjb21wYXJlISAlMnggLSAlMDJ4ICUwMnhcbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIGksICooc2tiLT5kYXRhICsgaSksCi0JCQkJCSAgICAgICBwYWNrZXRbaV0pOworCQkJCW5ldGlmX3ByaW50ayhscCwgaHcsIEtFUk5fREVCVUcsIGRldiwKKwkJCQkJICAgICAiRXJyb3IgaW4gY29tcGFyZSEgJTJ4IC0gJTAyeCAlMDJ4XG4iLAorCQkJCQkgICAgIGksICooc2tiLT5kYXRhICsgaSksIHBhY2tldFtpXSk7CiAJCQkJcmMgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTAyNSw3ICsxMDAxLDcgQEAKIAkJeCsrOwogCX0KIAotICAgICAgY2xlYW5fdXA6CitjbGVhbl91cDoKIAkqZGF0YTEgPSByYzsKIAlwY25ldDMyX3B1cmdlX3R4X3JpbmcoZGV2KTsKIApAQCAtMTA0NCw3ICsxMDIwLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAocmMpOworCXJldHVybiByYzsKIH0JCQkJLyogZW5kIHBjbmV0MzJfbG9vcGJhY2tfdGVzdCAgKi8KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9sZWRfYmxpbmtfY2FsbGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEwNTYsOSArMTAzMiw4IEBACiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKIAkJYS0+d3JpdGVfYmNyKGlvYWRkciwgaSwgYS0+cmVhZF9iY3IoaW9hZGRyLCBpKSBeIDB4NDAwMCk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgUENORVQzMl9CTElOS19USU1FT1VUKTsKQEAgLTEwODAsOSArMTA1NSw4IEBACiAKIAkvKiBTYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiY3JzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCiAJCXJlZ3NbaSAtIDRdID0gYS0+cmVhZF9iY3IoaW9hZGRyLCBpKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCW1vZF90aW1lcigmbHAtPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKQEAgLTEwOTcsOSArMTA3MSw4IEBACiAKIAkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgYmNycyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKQogCQlhLT53cml0ZV9iY3IoaW9hZGRyLCBpLCByZWdzW2kgLSA0XSk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTExMzYsMTAgKzExMDksOCBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssICpmbGFncyk7CiAJCXRpY2tzKys7CiAJCWlmICh0aWNrcyA+IDIwMCkgewotCQkJaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkgICAgICAgIiVzOiBFcnJvciBnZXR0aW5nIGludG8gc3VzcGVuZCFcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJICAgICAiRXJyb3IgZ2V0dGluZyBpbnRvIHN1c3BlbmQhXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTE4NCwxNSArMTE1NSwxMyBAQAogCiAJLyogRGlzY2FyZCBvdmVyc2l6ZSBmcmFtZXMuICovCiAJaWYgKHVubGlrZWx5KHBrdF9sZW4gPiBQS1RfQlVGX1NJWkUpKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEltcG9zc2libGUgcGFja2V0IHNpemUgJWQhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJJbXBvc3NpYmxlIHBhY2tldCBzaXplICVkIVxuIiwKKwkJCSAgcGt0X2xlbik7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAJaWYgKHBrdF9sZW4gPCA2MCkgewotCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSdW50IHBhY2tldCFcbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgcnhfZXJyLCBkZXYsICJSdW50IHBhY2tldCFcbiIpOwogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CiAJfQpAQCAtMTIwMCw3ICsxMTY5LDggQEAKIAlpZiAocGt0X2xlbiA+IHJ4X2NvcHlicmVhaykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiOwogCi0JCWlmICgobmV3c2tiID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NLQikpKSB7CisJCW5ld3NrYiA9IGRldl9hbGxvY19za2IoUEtUX0JVRl9TS0IpOworCQlpZiAobmV3c2tiKSB7CiAJCQlza2JfcmVzZXJ2ZShuZXdza2IsIE5FVF9JUF9BTElHTik7CiAJCQlza2IgPSBscC0+cnhfc2tidWZmW2VudHJ5XTsKIAkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsCkBAIC0xMjE4LDE1ICsxMTg4LDExIEBACiAJCQlyeF9pbl9wbGFjZSA9IDE7CiAJCX0gZWxzZQogCQkJc2tiID0gTlVMTDsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4gKyBORVRfSVBfQUxJR04pOwotCX0KIAogCWlmIChza2IgPT0gTlVMTCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iKTsKIAkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CkBAIC0xMjk3LDExICsxMjYzLDkgQEAKIAkJCS8qIFRoZXJlIHdhcyBhIG1ham9yIGVycm9yLCBsb2cgaXQuICovCiAJCQlpbnQgZXJyX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5taXNjKTsKIAkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogVHggZXJyb3Igc3RhdHVzPSUwNHggZXJyX3N0YXR1cz0lMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywKLQkJCQkgICAgICAgZXJyX3N0YXR1cyk7CisJCQluZXRpZl9lcnIobHAsIHR4X2VyciwgZGV2LAorCQkJCSAgIlR4IGVycm9yIHN0YXR1cz0lMDR4IGVycl9zdGF0dXM9JTA4eFxuIiwKKwkJCQkgIHN0YXR1cywgZXJyX3N0YXR1cyk7CiAJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDQwMDAwMDApCiAJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKGVycl9zdGF0dXMgJiAweDA4MDAwMDAwKQpAQCAtMTMxMywxMCArMTI3Nyw3IEBACiAJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwogCQkJCS8qIFJlbW92ZSB0aGlzIHZlcmJvc2l0eSBsYXRlciEgKi8KLQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpCi0JCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkgICAgICAgIiVzOiBUeCBGSUZPIGVycm9yIVxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJbmV0aWZfZXJyKGxwLCB0eF9lcnIsIGRldiwgIlR4IEZJRk8gZXJyb3IhXG4iKTsKIAkJCQltdXN0X3Jlc3RhcnQgPSAxOwogCQkJfQogI2Vsc2UKQEAgLTEzMjUsMTAgKzEyODYsNyBAQAogCQkJCWlmICghbHAtPmR4c3VmbG8pIHsJLyogSWYgY29udHJvbGxlciBkb2Vzbid0IHJlY292ZXIgLi4uICovCiAJCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwogCQkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCi0JCQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKLQkJCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkJICAgICAgICIlczogVHggRklGTyBlcnJvciFcbiIsCi0JCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJbmV0aWZfZXJyKGxwLCB0eF9lcnIsIGRldiwgIlR4IEZJRk8gZXJyb3IhXG4iKTsKIAkJCQkJbXVzdF9yZXN0YXJ0ID0gMTsKIAkJCQl9CiAJCQl9CkBAIC0xMzU0LDExICsxMzEyLDggQEAKIAogCWRlbHRhID0gKGxwLT5jdXJfdHggLSBkaXJ0eV90eCkgJiAobHAtPnR4X21vZF9tYXNrICsgbHAtPnR4X3Jpbmdfc2l6ZSk7CiAJaWYgKGRlbHRhID4gbHAtPnR4X3Jpbmdfc2l6ZSkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IG91dC1vZi1zeW5jIGRpcnR5IHBvaW50ZXIsICVkIHZzLiAlZCwgZnVsbD0lZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgbHAtPmN1cl90eCwKLQkJCSAgICAgICBscC0+dHhfZnVsbCk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJvdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWRcbiIsCisJCQkgIGRpcnR5X3R4LCBscC0+Y3VyX3R4LCBscC0+dHhfZnVsbCk7CiAJCWRpcnR5X3R4ICs9IGxwLT50eF9yaW5nX3NpemU7CiAJCWRlbHRhIC09IGxwLT50eF9yaW5nX3NpemU7CiAJfQpAQCAtMTQyMSw3ICsxMzc2LDcgQEAKIAlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGogPSBscC0+cGh5Y291bnQgKiBQQ05FVDMyX1JFR1NfUEVSX1BIWTsKIAotCXJldHVybiAoKFBDTkVUMzJfTlVNX1JFR1MgKyBqKSAqIHNpemVvZih1MTYpKTsKKwlyZXR1cm4gKFBDTkVUMzJfTlVNX1JFR1MgKyBqKSAqIHNpemVvZih1MTYpOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsCkBAIC0xNDQ1LDIxICsxNDAwLDIwIEBACiAJCSpidWZmKysgPSBpbncoaW9hZGRyICsgaSk7CiAKIAkvKiByZWFkIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgOTA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCA5MDsgaSsrKQogCQkqYnVmZisrID0gYS0+cmVhZF9jc3IoaW9hZGRyLCBpKTsKLQl9CiAKIAkqYnVmZisrID0gYS0+cmVhZF9jc3IoaW9hZGRyLCAxMTIpOwogCSpidWZmKysgPSBhLT5yZWFkX2Nzcihpb2FkZHIsIDExNCk7CiAKIAkvKiByZWFkIGJ1cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspCiAJCSpidWZmKysgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOwotCX0KKwogCSpidWZmKysgPSAwOwkJLyogc2tpcCBiY3IzMCBzbyBhcyBub3QgdG8gaGFuZyA3OUM5NzYgKi8KLQlmb3IgKGkgPSAzMTsgaSA8IDM2OyBpKyspIHsKKworCWZvciAoaSA9IDMxOyBpIDwgMzY7IGkrKykKIAkJKmJ1ZmYrKyA9IGEtPnJlYWRfYmNyKGlvYWRkciwgaSk7Ci0JfQogCiAJLyogcmVhZCBtaWkgcGh5IHJlZ2lzdGVycyAqLwogCWlmIChscC0+bWlpKSB7CkBAIC0xNTM1LDggKzE0ODksNyBAQAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIgPCAwKSB7CiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIGRldmljZSAtLSBlcnI9JWRcbiIsIGVycik7CisJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgZGV2aWNlIC0tIGVycj0lZFxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC0xNTQ0LDI5ICsxNDk3LDI1IEBACiAJaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCWlmICghaW9hZGRyKSB7CiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICJjYXJkIGhhcyBubyBQQ0kgSU8gcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CisJCQlwcl9lcnIoImNhcmQgaGFzIG5vIFBDSSBJTyByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwZGV2LCBQQ05FVDMyX0RNQV9NQVNLKSkgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgMzJiaXQgUENJIGJ1c21hc3RlciBETUFcbiIpOworCQkJcHJfZXJyKCJhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCAzMmJpdCBQQ0kgYnVzbWFzdGVyIERNQVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAocmVxdWVzdF9yZWdpb24oaW9hZGRyLCBQQ05FVDMyX1RPVEFMX1NJWkUsICJwY25ldDMyX3Byb2JlX3BjaSIpID09Ci0JICAgIE5VTEwpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYWRkciwgUENORVQzMl9UT1RBTF9TSVpFLCAicGNuZXQzMl9wcm9iZV9wY2kiKSkgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiaW8gYWRkcmVzcyByYW5nZSBhbHJlYWR5IGFsbG9jYXRlZFxuIik7CisJCQlwcl9lcnIoImlvIGFkZHJlc3MgcmFuZ2UgYWxyZWFkeSBhbGxvY2F0ZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWVyciA9IHBjbmV0MzJfcHJvYmUxKGlvYWRkciwgMSwgcGRldik7Ci0JaWYgKGVyciA8IDApIHsKKwlpZiAoZXJyIDwgMCkKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCX0KKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE2MTYsNyArMTU2NSw3IEBACiAJCQlhID0gJnBjbmV0MzJfZHdpbzsKIAkJfSBlbHNlIHsKIAkJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIGFjY2VzcyBtZXRob2RzXG4iKTsKKwkJCQlwcl9lcnIoIk5vIGFjY2VzcyBtZXRob2RzXG4iKTsKIAkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCQl9CiAJfQpAQCAtMTYyNCwxMSArMTU3MywxMCBAQAogCWNoaXBfdmVyc2lvbiA9CiAJICAgIGEtPnJlYWRfY3NyKGlvYWRkciwgODgpIHwgKGEtPnJlYWRfY3NyKGlvYWRkciwgODkpIDw8IDE2KTsKIAlpZiAoKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpICYmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0hXKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICBQQ25ldCBjaGlwIHZlcnNpb24gaXMgJSN4LlxuIiwKLQkJICAgICAgIGNoaXBfdmVyc2lvbik7CisJCXByX2luZm8oIiAgUENuZXQgY2hpcCB2ZXJzaW9uIGlzICUjeFxuIiwgY2hpcF92ZXJzaW9uKTsKIAlpZiAoKGNoaXBfdmVyc2lvbiAmIDB4ZmZmKSAhPSAweDAwMykgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb24uXG4iKTsKKwkJCXByX2luZm8oIlVuc3VwcG9ydGVkIGNoaXAgdmVyc2lvblxuIik7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIApAQCAtMTY4MSw3ICsxNjI5LDcgQEAKIAkJaWYgKGNhcmRzX2ZvdW5kIDwgTUFYX1VOSVRTICYmIGhvbWVwbmFbY2FyZHNfZm91bmRdKQogCQkJbWVkaWEgfD0gMTsJLyogc3dpdGNoIHRvIGhvbWUgd2lyaW5nIG1vZGUgKi8KIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIm1lZGlhIHNldCB0byAlc01iaXQgbW9kZS5cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIm1lZGlhIHNldCB0byAlc01iaXQgbW9kZVxuIiwKIAkJCSAgICAgICAobWVkaWEgJiAxKSA/ICIxIiA6ICIxMCIpOwogCQlhLT53cml0ZV9iY3IoaW9hZGRyLCA0OSwgbWVkaWEpOwogCQlicmVhazsKQEAgLTE2OTcsOSArMTY0NSw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCSAgICAgICAiUENuZXQgdmVyc2lvbiAlI3gsIG5vIFBDbmV0MzIgY2hpcC5cbiIsCi0JCQkgICAgICAgY2hpcF92ZXJzaW9uKTsKKwkJCXByX2luZm8oIlBDbmV0IHZlcnNpb24gJSN4LCBubyBQQ25ldDMyIGNoaXBcbiIsCisJCQkJY2hpcF92ZXJzaW9uKTsKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCkBAIC0xNzIxLDcgKzE2NjgsNyBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbHApKTsKIAlpZiAoIWRldikgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQkJcHJfZXJyKCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CkBAIC0xNzMwLDcgKzE2NzcsNyBAQAogCQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlcyBhdCAlIzNseCwiLCBjaGlwbmFtZSwgaW9hZGRyKTsKKwkJcHJfaW5mbygiJXMgYXQgJSMzbHgsIiwgY2hpcG5hbWUsIGlvYWRkcik7CiAKIAkvKiBJbiBtb3N0IGNoaXBzLCBhZnRlciBhIGNoaXAgcmVzZXQsIHRoZSBldGhlcm5ldCBhZGRyZXNzIGlzIHJlYWQgZnJvbSB0aGUKIAkgKiBzdGF0aW9uIGFkZHJlc3MgUFJPTSBhdCB0aGUgYmFzZSBhZGRyZXNzIGFuZCBwcm9ncmFtbWVkIGludG8gdGhlCkBAIC0xNzU1LDkgKzE3MDIsOCBAQAogCSAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewogCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcm9tYWRkcikpIHsKIAkJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKSB7Ci0JCQkJcHJpbnRrKCIgd2FybmluZzogQ1NSIGFkZHJlc3MgaW52YWxpZCxcbiIpOwotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIiAgICB1c2luZyBpbnN0ZWFkIFBST00gYWRkcmVzcyBvZiIpOworCQkJCXByX2NvbnQoIiB3YXJuaW5nOiBDU1IgYWRkcmVzcyBpbnZhbGlkLFxuIik7CisJCQkJcHJfaW5mbygiICAgIHVzaW5nIGluc3RlYWQgUFJPTSBhZGRyZXNzIG9mIik7CiAJCQl9CiAJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgcHJvbWFkZHIsIDYpOwogCQl9CkBAIC0xNzY5LDU0ICsxNzE1LDU0IEBACiAJCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CiAKIAlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgewotCQlwcmludGsoIiAlcE0iLCBkZXYtPmRldl9hZGRyKTsKKwkJcHJfY29udCgiICVwTSIsIGRldi0+ZGV2X2FkZHIpOwogCiAJCS8qIFZlcnNpb24gMHgyNjIzIGFuZCAweDI2MjQgKi8KIAkJaWYgKCgoY2hpcF92ZXJzaW9uICsgMSkgJiAweGZmZmUpID09IDB4MjYyNCkgewogCQkJaSA9IGEtPnJlYWRfY3NyKGlvYWRkciwgODApICYgMHgwQzAwOwkvKiBDaGVjayB0eF9zdGFydF9wdCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgIHR4X3N0YXJ0X3B0KDB4JTA0eCk6IiwgaSk7CisJCQlwcl9pbmZvKCIgICAgdHhfc3RhcnRfcHQoMHglMDR4KToiLCBpKTsKIAkJCXN3aXRjaCAoaSA+PiAxMCkgewogCQkJY2FzZSAwOgotCQkJCXByaW50ayhLRVJOX0NPTlQgIiAgMjAgYnl0ZXMsIik7CisJCQkJcHJfY29udCgiICAyMCBieXRlcywiKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMToKLQkJCQlwcmludGsoS0VSTl9DT05UICIgIDY0IGJ5dGVzLCIpOworCQkJCXByX2NvbnQoIiAgNjQgYnl0ZXMsIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDI6Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiIDEyOCBieXRlcywiKTsKKwkJCQlwcl9jb250KCIgMTI4IGJ5dGVzLCIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgotCQkJCXByaW50ayhLRVJOX0NPTlQgIn4yMjAgYnl0ZXMsIik7CisJCQkJcHJfY29udCgifjIyMCBieXRlcywiKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWkgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIDE4KTsJLyogQ2hlY2sgQnVyc3QvQnVzIGNvbnRyb2wgKi8KLQkJCXByaW50ayhLRVJOX0NPTlQgIiBCQ1IxOCgleCk6IiwgaSAmIDB4ZmZmZik7CisJCQlwcl9jb250KCIgQkNSMTgoJXgpOiIsIGkgJiAweGZmZmYpOwogCQkJaWYgKGkgJiAoMSA8PCA1KSkKLQkJCQlwcmludGsoS0VSTl9DT05UICJCdXJzdFdyRW4gIik7CisJCQkJcHJfY29udCgiQnVyc3RXckVuICIpOwogCQkJaWYgKGkgJiAoMSA8PCA2KSkKLQkJCQlwcmludGsoS0VSTl9DT05UICJCdXJzdFJkRW4gIik7CisJCQkJcHJfY29udCgiQnVyc3RSZEVuICIpOwogCQkJaWYgKGkgJiAoMSA8PCA3KSkKLQkJCQlwcmludGsoS0VSTl9DT05UICJEV29yZElPICIpOworCQkJCXByX2NvbnQoIkRXb3JkSU8gIik7CiAJCQlpZiAoaSAmICgxIDw8IDExKSkKLQkJCQlwcmludGsoS0VSTl9DT05UICJOb1VGbG93ICIpOworCQkJCXByX2NvbnQoIk5vVUZsb3cgIik7CiAJCQlpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgICAgU1JBTVNJWkU9MHglMDR4LCIsIGkgPDwgOCk7CisJCQlwcl9pbmZvKCIgICAgU1JBTVNJWkU9MHglMDR4LCIsIGkgPDwgOCk7CiAJCQlpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNik7Ci0JCQlwcmludGsoS0VSTl9DT05UICIgU1JBTV9CTkQ9MHglMDR4LCIsIGkgPDwgOCk7CisJCQlwcl9jb250KCIgU1JBTV9CTkQ9MHglMDR4LCIsIGkgPDwgOCk7CiAJCQlpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNyk7CiAJCQlpZiAoaSAmICgxIDw8IDE0KSkKLQkJCQlwcmludGsoS0VSTl9DT05UICJMb3dMYXRSeCIpOworCQkJCXByX2NvbnQoIkxvd0xhdFJ4Iik7CiAJCX0KIAl9CiAKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJLyogcGNpX2FsbG9jX2NvbnNpc3RlbnQgcmV0dXJucyBwYWdlLWFsaWduZWQgbWVtb3J5LCBzbyB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjayB0aGUgYWxpZ25tZW50ICovCi0JaWYgKChscC0+aW5pdF9ibG9jayA9Ci0JICAgICBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YoKmxwLT5pbml0X2Jsb2NrKSwgJmxwLT5pbml0X2RtYV9hZGRyKSkgPT0gTlVMTCkgeworCWxwLT5pbml0X2Jsb2NrID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpscC0+aW5pdF9ibG9jayksCisJCQkJCSAgICAgICZscC0+aW5pdF9kbWFfYWRkcik7CisJaWYgKCFscC0+aW5pdF9ibG9jaykgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCXByX2VycigiQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAl9CkBAIC0xODkwLDcgKzE4MzYsNyBAQAogCWlmIChwZGV2KSB7CQkvKiB1c2UgdGhlIElSUSBwcm92aWRlZCBieSBQQ0kgKi8KIAkJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKCIgYXNzaWduZWQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOworCQkJcHJfY29udCgiIGFzc2lnbmVkIElSUSAlZFxuIiwgZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBwcm9iZV9pcnFfb24oKTsKIApAQCAtMTkwNiwxMiArMTg1MiwxMiBAQAogCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoaXJxX21hc2spOwogCQlpZiAoIWRldi0+aXJxKSB7CiAJCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCQlwcmludGsoIiwgZmFpbGVkIHRvIGRldGVjdCBJUlEgbGluZS5cbiIpOworCQkJCXByX2NvbnQoIiwgZmFpbGVkIHRvIGRldGVjdCBJUlEgbGluZVxuIik7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBlcnJfZnJlZV9yaW5nOwogCQl9CiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKCIsIHByb2JlZCBJUlEgJWQuXG4iLCBkZXYtPmlycSk7CisJCQlwcl9jb250KCIsIHByb2JlZCBJUlEgJWRcbiIsIGRldi0+aXJxKTsKIAl9CiAKIAkvKiBTZXQgdGhlIG1paSBwaHlfaWQgc28gdGhhdCB3ZSBjYW4gcXVlcnkgdGhlIGxpbmsgc3RhdGUgKi8KQEAgLTE5MzUsMTQgKzE4ODEsMTIgQEAKIAkJCWxwLT5waHltYXNrIHw9ICgxIDw8IGkpOwogCQkJbHAtPm1paV9pZi5waHlfaWQgPSBpOwogCQkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCQkgICAgICAgIkZvdW5kIFBIWSAlMDR4OiUwNHggYXQgYWRkcmVzcyAlZC5cbiIsCi0JCQkJICAgICAgIGlkMSwgaWQyLCBpKTsKKwkJCQlwcl9pbmZvKCJGb3VuZCBQSFkgJTA0eDolMDR4IGF0IGFkZHJlc3MgJWRcbiIsCisJCQkJCWlkMSwgaWQyLCBpKTsKIAkJfQogCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKGxwLT5taWlfaWYucGh5X2lkKSA8PCA1KTsKLQkJaWYgKGxwLT5waHljb3VudCA+IDEpIHsKKwkJaWYgKGxwLT5waHljb3VudCA+IDEpCiAJCQlscC0+b3B0aW9ucyB8PSBQQ05FVDMyX1BPUlRfTUlJOwotCQl9CiAJfQogCiAJaW5pdF90aW1lcigmbHAtPndhdGNoZG9nX3RpbWVyKTsKQEAgLTE5NjYsNyArMTkxMCw3IEBACiAJfQogCiAJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsIGxwLT5uYW1lKTsKKwkJcHJfaW5mbygiJXM6IHJlZ2lzdGVyZWQgYXMgJXNcbiIsIGRldi0+bmFtZSwgbHAtPm5hbWUpOwogCWNhcmRzX2ZvdW5kKys7CiAKIAkvKiBlbmFibGUgTEVEIHdyaXRlcyAqLwpAQCAtMTk5NSwxMCArMTkzOSw3IEBACiAJCQkJCSAgIGxwLT50eF9yaW5nX3NpemUsCiAJCQkJCSAgICZscC0+dHhfcmluZ19kbWFfYWRkcik7CiAJaWYgKGxwLT50eF9yaW5nID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkJICAgICAgIG5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIwMDcsNDYgKzE5NDgsMzUgQEAKIAkJCQkJICAgbHAtPnJ4X3Jpbmdfc2l6ZSwKIAkJCQkJICAgJmxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKIAlpZiAobHAtPnJ4X3JpbmcgPT0gTlVMTCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCi0JCQkgICAgICAgbmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWxwLT50eF9kbWFfYWRkciA9IGtjYWxsb2MobHAtPnR4X3Jpbmdfc2l6ZSwgc2l6ZW9mKGRtYV9hZGRyX3QpLAogCQkJCSAgR0ZQX0FUT01JQyk7CiAJaWYgKCFscC0+dHhfZG1hX2FkZHIpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlscC0+cnhfZG1hX2FkZHIgPSBrY2FsbG9jKGxwLT5yeF9yaW5nX3NpemUsIHNpemVvZihkbWFfYWRkcl90KSwKIAkJCQkgIEdGUF9BVE9NSUMpOwogCWlmICghbHAtPnJ4X2RtYV9hZGRyKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIG5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbHAtPnR4X3NrYnVmZiA9IGtjYWxsb2MobHAtPnR4X3Jpbmdfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBza19idWZmICopLAogCQkJCUdGUF9BVE9NSUMpOwogCWlmICghbHAtPnR4X3NrYnVmZikgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBuYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWxwLT5yeF9za2J1ZmYgPSBrY2FsbG9jKGxwLT5yeF9yaW5nX3NpemUsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwKIAkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIWxwLT5yeF9za2J1ZmYpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIxMTUsMTIgKzIwNDUsMTEgQEAKIAkvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCiAJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDIpOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJICAgICAgICIlczogcGNuZXQzMl9vcGVuKCkgaXJxICVkIHR4L3J4IHJpbmdzICUjeC8lI3ggaW5pdCAlI3guXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgKHUzMikgKGxwLT50eF9yaW5nX2RtYV9hZGRyKSwKLQkJICAgICAgICh1MzIpIChscC0+cnhfcmluZ19kbWFfYWRkciksCi0JCSAgICAgICAodTMyKSAobHAtPmluaXRfZG1hX2FkZHIpKTsKKwluZXRpZl9wcmludGsobHAsIGlmdXAsIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAiJXMoKSBpcnEgJWQgdHgvcnggcmluZ3MgJSN4LyUjeCBpbml0ICUjeFxuIiwKKwkJICAgICBfX2Z1bmNfXywgZGV2LT5pcnEsICh1MzIpIChscC0+dHhfcmluZ19kbWFfYWRkciksCisJCSAgICAgKHUzMikgKGxwLT5yeF9yaW5nX2RtYV9hZGRyKSwKKwkJICAgICAodTMyKSAobHAtPmluaXRfZG1hX2FkZHIpKTsKIAogCS8qIHNldC9yZXNldCBhdXRvc2VsZWN0IGJpdCAqLwogCXZhbCA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMikgJiB+MjsKQEAgLTIxNTUsMTAgKzIwODQsOCBAQAogCSAgICAgcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDFGWCkpIHsKIAkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpIHsKIAkJCWxwLT5vcHRpb25zID0gUENORVQzMl9QT1JUX0ZEIHwgUENORVQzMl9QT1JUXzEwMDsKLQkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkgICAgICAgIiVzOiBTZXR0aW5nIDEwME1iLUZ1bGwgRHVwbGV4LlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGlmX3ByaW50ayhscCwgbGluaywgS0VSTl9ERUJVRywgZGV2LAorCQkJCSAgICAgIlNldHRpbmcgMTAwTWItRnVsbCBEdXBsZXhcbiIpOwogCQl9CiAJfQogCWlmIChscC0+cGh5Y291bnQgPCAyKSB7CkBAIC0yMjQ2LDkgKzIxNzMsNyBAQAogCQkJfQogCQl9CiAJCWxwLT5taWlfaWYucGh5X2lkID0gZmlyc3RfcGh5OwotCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVzaW5nIFBIWSBudW1iZXIgJWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlyc3RfcGh5KTsKKwkJbmV0aWZfaW5mbyhscCwgbGluaywgZGV2LCAiVXNpbmcgUEhZIG51bWJlciAlZFxuIiwgZmlyc3RfcGh5KTsKIAl9CiAKICNpZmRlZiBET19EWFNVRkxPCkBAIC0yMjk1LDE4ICsyMjIwLDE3IEBACiAJICovCiAJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9OT1JNQUwpOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJICAgICAgICIlczogcGNuZXQzMiBvcGVuIGFmdGVyICVkIHRpY2tzLCBpbml0IGJsb2NrICUjeCBjc3IwICU0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaSwKLQkJICAgICAgICh1MzIpIChscC0+aW5pdF9kbWFfYWRkciksCi0JCSAgICAgICBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKKwluZXRpZl9wcmludGsobHAsIGlmdXAsIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAicGNuZXQzMiBvcGVuIGFmdGVyICVkIHRpY2tzLCBpbml0IGJsb2NrICUjeCBjc3IwICU0LjR4XG4iLAorCQkgICAgIGksCisJCSAgICAgKHUzMikgKGxwLT5pbml0X2RtYV9hZGRyKSwKKwkJICAgICBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsJCS8qIEFsd2F5cyBzdWNjZWVkICovCiAKLSAgICAgIGVycl9mcmVlX3Jpbmc6CitlcnJfZnJlZV9yaW5nOgogCS8qIGZyZWUgYW55IGFsbG9jYXRlZCBza2J1ZmZzICovCiAJcGNuZXQzMl9wdXJnZV9yeF9yaW5nKGRldik7CiAKQEAgLTIzMTYsNyArMjI0MCw3IEBACiAJICovCiAJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDQpOwogCi0gICAgICBlcnJfZnJlZV9pcnE6CitlcnJfZnJlZV9pcnE6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlyZXR1cm4gcmM7CkBAIC0yMzY3LDE0ICsyMjkxLDEyIEBACiAJZm9yIChpID0gMDsgaSA8IGxwLT5yeF9yaW5nX3NpemU7IGkrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tidWZmID0gbHAtPnJ4X3NrYnVmZltpXTsKIAkJaWYgKHJ4X3NrYnVmZiA9PSBOVUxMKSB7Ci0JCQlpZiAoIQotCQkJICAgIChyeF9za2J1ZmYgPSBscC0+cnhfc2tidWZmW2ldID0KLQkJCSAgICAgZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NLQikpKSB7Ci0JCQkJLyogdGhlcmUgaXMgbm90IG11Y2gsIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICovCi0JCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJICAgICAgICIlczogcGNuZXQzMl9pbml0X3JpbmcgZGV2X2FsbG9jX3NrYiBmYWlsZWQuXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWxwLT5yeF9za2J1ZmZbaV0gPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU0tCKTsKKwkJCXJ4X3NrYnVmZiA9IGxwLT5yeF9za2J1ZmZbaV07CisJCQlpZiAoIXJ4X3NrYnVmZikgeworCQkJCS8qIHRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICovCisJCQkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIiVzIGRldl9hbGxvY19za2IgZmFpbGVkXG4iLAorCQkJCQkgIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlza2JfcmVzZXJ2ZShyeF9za2J1ZmYsIE5FVF9JUF9BTElHTik7CkBAIC0yNDI0LDEwICsyMzQ2LDkgQEAKIAkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkgJiBDU1IwX1NUT1ApCiAJCQlicmVhazsKIAotCWlmIChpID49IDEwMCAmJiBuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiJXM6IHBjbmV0MzJfcmVzdGFydCB0aW1lZCBvdXQgd2FpdGluZyBmb3Igc3RvcC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCWlmIChpID49IDEwMCkKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIiVzIHRpbWVkIG91dCB3YWl0aW5nIGZvciBzdG9wXG4iLAorCQkJICBfX2Z1bmNfXyk7CiAKIAlwY25ldDMyX3B1cmdlX3R4X3JpbmcoZGV2KTsKIAlpZiAocGNuZXQzMl9pbml0X3JpbmcoZGV2KSkKQEAgLTI0NTEsOCArMjM3Miw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJLyogVHJhbnNtaXR0ZXIgdGltZW91dCwgc2VyaW91cyBwcm9ibGVtcy4gKi8KIAlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19EUlYpCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlNC40eCwgcmVzZXR0aW5nLlxuIiwKKwkJcHJfZXJyKCIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9TVE9QKTsKIAlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtMjQ5NSwxMSArMjQxNSw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGxwKSkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkgICAgICAgIiVzOiBwY25ldDMyX3N0YXJ0X3htaXQoKSBjYWxsZWQsIGNzcjAgJTQuNHguXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKLQl9CisJbmV0aWZfcHJpbnRrKGxwLCB0eF9xdWV1ZWQsIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAiJXMoKSBjYWxsZWQsIGNzcjAgJTQuNHhcbiIsCisJCSAgICAgX19mdW5jX18sIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJLyogRGVmYXVsdCBzdGF0dXMgLS0gd2lsbCBub3QgZW5hYmxlIFN1Y2Nlc3NmdWwtVHhEb25lCiAJICogaW50ZXJydXB0IHdoZW4gdGhhdCBvcHRpb24gaXMgYXZhaWxhYmxlIHRvIHVzLgpAQCAtMjU1OCwxNiArMjQ3NiwxNCBAQAogCiAJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CiAJd2hpbGUgKChjc3IwICYgMHg4ZjAwKSAmJiAtLWJvZ3VzY250ID49IDApIHsKLQkJaWYgKGNzcjAgPT0gMHhmZmZmKSB7CisJCWlmIChjc3IwID09IDB4ZmZmZikKIAkJCWJyZWFrOwkvKiBQQ01DSUEgcmVtb3ZlIGhhcHBlbmVkICovCi0JCX0KIAkJLyogQWNrbm93bGVkZ2UgYWxsIG9mIHRoZSBjdXJyZW50IGludGVycnVwdCBzb3VyY2VzIEFTQVAuICovCiAJCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIGNzcjAgJiB+MHgwMDRmKTsKIAotCQlpZiAobmV0aWZfbXNnX2ludHIobHApKQotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAiJXM6IGludGVycnVwdCAgY3NyMD0lIzIuMnggbmV3IGNzcj0lIzIuMnguXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMCwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CisJCW5ldGlmX3ByaW50ayhscCwgaW50ciwgS0VSTl9ERUJVRywgZGV2LAorCQkJICAgICAiaW50ZXJydXB0ICBjc3IwPSUjMi4yeCBuZXcgY3NyPSUjMi4yeFxuIiwKKwkJCSAgICAgY3NyMCwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAKIAkJLyogTG9nIG1pc2MgZXJyb3JzLiAqLwogCQlpZiAoY3NyMCAmIDB4NDAwMCkKQEAgLTI1ODcsMTAgKzI1MDMsOCBAQAogCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsJLyogTWlzc2VkIGEgUnggZnJhbWUuICovCiAJCX0KIAkJaWYgKGNzcjAgJiAweDA4MDApIHsKLQkJCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIiVzOiBCdXMgbWFzdGVyIGFyYml0cmF0aW9uIGZhaWx1cmUsIHN0YXR1cyAlNC40eC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMCk7CisJCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiQnVzIG1hc3RlciBhcmJpdHJhdGlvbiBmYWlsdXJlLCBzdGF0dXMgJTQuNHhcbiIsCisJCQkJICBjc3IwKTsKIAkJCS8qIHVubGlrZSBmb3IgdGhlIGxhbmNlLCB0aGVyZSBpcyBubyByZXN0YXJ0IG5lZWRlZCAqLwogCQl9CiAJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgewpAQCAtMjYwNiw5ICsyNTIwLDkgQEAKIAkJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19pbnRyKGxwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgY3NyMD0lIzQuNHguXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKKwluZXRpZl9wcmludGsobHAsIGludHIsIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAiZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjA9JSM0LjR4XG4iLAorCQkgICAgIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKIApAQCAtMjYzMCwxMCArMjU0NCw5IEBACiAKIAlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDExMik7CiAKLQlpZiAobmV0aWZfbXNnX2lmZG93bihscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAgICAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CisJbmV0aWZfcHJpbnRrKGxwLCBpZmRvd24sIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAiU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnhcbiIsCisJCSAgICAgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAKIAkvKiBXZSBzdG9wIHRoZSBQQ05FVDMyIGhlcmUgLS0gaXQgb2NjYXNpb25hbGx5IHBvbGxzIG1lbW9yeSBpZiB3ZSBkb24ndC4gKi8KIAlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX1NUT1ApOwpAQCAtMjY3Nyw3ICsyNTkwLDcgQEAKIAlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IHBjbmV0MzJfaW5pdF9ibG9jayAqaWIgPSBscC0+aW5pdF9ibG9jazsKIAl2b2xhdGlsZSBfX2xlMTYgKm1jYXN0X3RhYmxlID0gKF9fbGUxNiAqKWliLT5maWx0ZXI7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAljaGFyICphZGRyczsKIAlpbnQgaTsKQEAgLTI2OTgsOSArMjYxMSw4IEBACiAJaWItPmZpbHRlclsxXSA9IDA7CiAKIAkvKiBBZGQgYWRkcmVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKQEAgLTI3MzAsOSArMjY0Miw3IEBACiAJY3NyMTUgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjE1KTsKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCS8qIExvZyBhbnkgbmV0IHRhcHMuICovCi0JCWlmIChuZXRpZl9tc2dfaHcobHApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0aWZfaW5mbyhscCwgaHcsIGRldiwgIlByb21pc2N1b3VzIG1vZGUgZW5hYmxlZFxuIik7CiAJCWxwLT5pbml0X2Jsb2NrLT5tb2RlID0KIAkJICAgIGNwdV90b19sZTE2KDB4ODAwMCB8IChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9QT1JUU0VMKSA8PAogCQkJCTcpOwpAQCAtMjgxOSwxMCArMjcyOSw4IEBACiAJCQltaWkucGh5X2lkID0gaTsKIAkJCWlmIChtaWlfbGlua19vaygmbWlpKSkgewogCQkJCS8qIGZvdW5kIFBIWSB3aXRoIGFjdGl2ZSBsaW5rICovCi0JCQkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIiVzOiBVc2luZyBQSFkgbnVtYmVyICVkLlxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSwgaSk7CisJCQkJbmV0aWZfaW5mbyhscCwgbGluaywgZGV2LCAiVXNpbmcgUEhZIG51bWJlciAlZFxuIiwKKwkJCQkJICAgaSk7CiAKIAkJCQkvKiBpc29sYXRlIGluYWN0aXZlIHBoeSAqLwogCQkJCWJtY3IgPQpAQCAtMjg2OCw4ICsyNzc2LDcgQEAKIAlpZiAoIWN1cnJfbGluaykgewogCQlpZiAocHJldl9saW5rIHx8IHZlcmJvc2UpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCQluZXRpZl9pbmZvKGxwLCBsaW5rLCBkZXYsICJsaW5rIGRvd25cbiIpOwogCQl9CiAJCWlmIChscC0+cGh5Y291bnQgPiAxKSB7CiAJCQljdXJyX2xpbmsgPSBwY25ldDMyX2NoZWNrX290aGVycGh5KGRldik7CkBAIC0yODgxLDEyICsyNzg4LDExIEBACiAJCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKSB7CiAJCQkJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CiAJCQkJbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paV9pZiwgJmVjbWQpOwotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIiVzOiBsaW5rIHVwLCAlc01icHMsICVzLWR1cGxleFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLAotCQkJCSAgICAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDApID8gIjEwMCIgOiAiMTAiLAotCQkJCSAgICAgICAoZWNtZC5kdXBsZXggPT0KLQkJCQkJRFVQTEVYX0ZVTEwpID8gImZ1bGwiIDogImhhbGYiKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIHVwLCAlc01icHMsICVzLWR1cGxleFxuIiwKKwkJCQkJICAgIChlY21kLnNwZWVkID09IFNQRUVEXzEwMCkKKwkJCQkJICAgID8gIjEwMCIgOiAiMTAiLAorCQkJCQkgICAgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQkgICAgPyAiZnVsbCIgOiAiaGFsZiIpOwogCQkJfQogCQkJYmNyOSA9IGxwLT5hLnJlYWRfYmNyKGRldi0+YmFzZV9hZGRyLCA5KTsKIAkJCWlmICgoYmNyOSAmICgxIDw8IDApKSAhPSBscC0+bWlpX2lmLmZ1bGxfZHVwbGV4KSB7CkBAIC0yODk3LDggKzI4MDMsNyBAQAogCQkJCWxwLT5hLndyaXRlX2JjcihkZXYtPmJhc2VfYWRkciwgOSwgYmNyOSk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0aWZfaW5mbyhscCwgbGluaywgZGV2LCAibGluayB1cFxuIik7CiAJCX0KIAl9CiB9CkBAIC0zMDEwLDcgKzI5MTUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwY25ldDMyX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogCiAJcGNuZXQzMl9kZWJ1ZyA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBQQ05FVDMyX01TR19ERUZBVUxUKTsKIApAQCAtMzAyNiw3ICsyOTMxLDcgQEAKIAkJcGNuZXQzMl9wcm9iZV92bGJ1cyhwY25ldDMyX3BvcnRsaXN0KTsKIAogCWlmIChjYXJkc19mb3VuZCAmJiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlZCBjYXJkc19mb3VuZC5cbiIsIGNhcmRzX2ZvdW5kKTsKKwkJcHJfaW5mbygiJWQgY2FyZHNfZm91bmRcbiIsIGNhcmRzX2ZvdW5kKTsKIAogCXJldHVybiAocGNuZXQzMl9oYXZlX3BjaSArIGNhcmRzX2ZvdW5kKSA/IDAgOiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwppbmRleCAzM2M0YjEyLi5mNDgyZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYworKysgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwpAQCAtMTgsOSArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2JyY21waHkuaD4KIAotI2RlZmluZSBQSFlfSURfQkNNNTA2MTAJCTB4MDE0M2JkNjAKLSNkZWZpbmUgUEhZX0lEX0JDTTUwNjEwTQkweDAxNDNiZDcwCi0jZGVmaW5lIFBIWV9JRF9CQ001Nzc4MAkJMHgwMzYyNWQ5MAogCiAjZGVmaW5lIEJSQ01fUEhZX01PREVMKHBoeWRldikgXAogCSgocGh5ZGV2KS0+ZHJ2LT5waHlfaWQgJiAocGh5ZGV2KS0+ZHJ2LT5waHlfaWRfbWFzaykKQEAgLTgyMyw3ICs4MjAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbWFjMTMxX2RyaXZlciA9IHsKLQkucGh5X2lkCQk9IDB4MDE0M2JjNzAsCisJLnBoeV9pZAkJPSBQSFlfSURfQkNNQUMxMzEsCiAJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKIAkubmFtZQkJPSAiQnJvYWRjb20gQkNNQUMxMzEiLAogCS5mZWF0dXJlcwk9IFBIWV9CQVNJQ19GRUFUVVJFUyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYwppbmRleCA2ZjY5YjliLi42NWVkMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKQEAgLTYzLDYgKzYzLDcgQEAKICNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX01PREVfQ09QUEVSX1JHTUlJCTB4YgogI2RlZmluZSBNSUlfTTExMTFfSFdDRkdfTU9ERV9GSUJFUl9SR01JSQkweDMKICNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX01PREVfU0dNSUlfTk9fQ0xLCTB4NAorI2RlZmluZSBNSUlfTTExMTFfSFdDRkdfTU9ERV9DT1BQRVJfUlRCSQkweDkKICNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9BVVRPCTB4ODAwMAogI2RlZmluZSBNSUlfTTExMTFfSFdDRkdfRklCRVJfQ09QUEVSX1JFUwkweDIwMDAKIApAQCAtMjY5LDYgKzI3MCw0MyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkkpIHsKKwkJdGVtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfQ1IpOworCQlpZiAodGVtcCA8IDApCisJCQlyZXR1cm4gdGVtcDsKKwkJdGVtcCB8PSAoTUlJX00xMTExX1JYX0RFTEFZIHwgTUlJX00xMTExX1RYX0RFTEFZKTsKKwkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfQ1IsIHRlbXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJdGVtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfU1IpOworCQlpZiAodGVtcCA8IDApCisJCQlyZXR1cm4gdGVtcDsKKwkJdGVtcCAmPSB+KE1JSV9NMTExMV9IV0NGR19NT0RFX01BU0sgfCBNSUlfTTExMTFfSFdDRkdfRklCRVJfQ09QUEVSX1JFUyk7CisJCXRlbXAgfD0gMHg3IHwgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9BVVRPOworCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUiwgdGVtcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQkvKiBzb2Z0IHJlc2V0ICovCisJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkbworCQkJdGVtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOworCQl3aGlsZSAodGVtcCAmIEJNQ1JfUkVTRVQpOworCisJCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX1NSKTsKKwkJaWYgKHRlbXAgPCAwKQorCQkJcmV0dXJuIHRlbXA7CisJCXRlbXAgJj0gfihNSUlfTTExMTFfSFdDRkdfTU9ERV9NQVNLIHwgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9SRVMpOworCQl0ZW1wIHw9IE1JSV9NMTExMV9IV0NGR19NT0RFX0NPUFBFUl9SVEJJIHwgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9BVVRPOworCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUiwgdGVtcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwogCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IGFkYmMwZmQuLmRiMTc5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMjc3LDYgKzI3NywyMiBAQAogRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCisgKiBwaHlfZmluZF9maXJzdCAtIGZpbmRzIHRoZSBmaXJzdCBQSFkgZGV2aWNlIG9uIHRoZSBidXMKKyAqIEBidXM6IHRoZSB0YXJnZXQgTUlJIGJ1cworICovCitzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2ZpbmRfZmlyc3Qoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlpbnQgYWRkcjsKKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBQSFlfTUFYX0FERFI7IGFkZHIrKykgeworCQlpZiAoYnVzLT5waHlfbWFwW2FkZHJdKQorCQkJcmV0dXJuIGJ1cy0+cGh5X21hcFthZGRyXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHBoeV9maW5kX2ZpcnN0KTsKKworLyoqCiAgKiBwaHlfcHJlcGFyZV9saW5rIC0gcHJlcGFyZXMgdGhlIFBIWSBsYXllciB0byBtb25pdG9yIGxpbmsgc3RhdHVzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKICAqIEBoYW5kbGVyOiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbGluayBzdGF0dXMgY2hhbmdlIG5vdGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCmluZGV4IDUxMjNiYjkuLmVkMjY0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGIDI5IC8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KICNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JTSAgMzAgLyogSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9DVFJMX1NUQVRVUyAxNyAvKiBNb2RlL1N0YXR1cyBSZWdpc3RlciAqLwogCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDEgKDE8PDEpIC8qIEF1dG8tTmVnb3RpYXRpb24gUGFnZSBSZWNlaXZlZCAqLwogI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQyICgxPDwyKSAvKiBQYXJhbGxlbCBEZXRlY3Rpb24gRmF1bHQgKi8KQEAgLTM3LDggKzM4LDEwIEBACiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVF9BTEwgKDB4MGUpCiAKICNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UX1BIWUxJQl9FVkVOVFMgXAotCShNSUlfTEFOODNDMTg1X0lTRl9JTlQ2IHwgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNCkKKwkoTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNiB8IE1JSV9MQU44M0MxODVfSVNGX0lOVDQgfCBcCisJIE1JSV9MQU44M0MxODVfSVNGX0lOVDcpCiAKKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9FRFBXUkRPV04JKDEgPDwgMTMpIC8qIEVEUFdSRE9XTiAqLwogCiBzdGF0aWMgaW50IHNtc2NfcGh5X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CkBAIC01OSw5ICs2MiwyMyBAQAogCiBzdGF0aWMgaW50IHNtc2NfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CisJaW50IHJjID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0NUUkxfU1RBVFVTKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBFbmFibGUgZW5lcmd5IGRldGVjdCBtb2RlIGZvciB0aGlzIFNNU0MgVHJhbnNjZWl2ZXJzICovCisJcmMgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0NUUkxfU1RBVFVTLAorCQkgICAgICAgcmMgfCBNSUlfTEFOODNDMTg1X0VEUFdSRE9XTik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCiAJcmV0dXJuIHNtc2NfcGh5X2Fja19pbnRlcnJ1cHQgKHBoeWRldik7CiB9CiAKK3N0YXRpYyBpbnQgbGFuOTExeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXJldHVybiBzbXNjX3BoeV9hY2tfaW50ZXJydXB0KHBoeWRldik7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBsYW44M2MxODVfZHJpdmVyID0gewogCS5waHlfaWQJCT0gMHgwMDA3YzBhMCwgLyogT1VJPTB4MDA4MDBmLCBNb2RlbCM9MHgwYSAqLwpAQCAtMTQ3LDcgKzE2NCw3IEBACiAJLyogYmFzaWMgZnVuY3Rpb25zICovCiAJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKLQkuY29uZmlnX2luaXQJPSBzbXNjX3BoeV9jb25maWdfaW5pdCwKKwkuY29uZmlnX2luaXQJPSBsYW45MTF4X2NvbmZpZ19pbml0LAogCiAJLyogSVJRIHJlbGF0ZWQgKi8KIAkuYWNrX2ludGVycnVwdAk9IHNtc2NfcGh5X2Fja19pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCAyMjgyZTcyLi42ZDYxNjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCXU4CQlhdmFpbDsJCS8qIGZsYWcgdXNlZCBpbiBtdWx0aWxpbmsgc3R1ZmYgKi8KIAl1OAkJaGFkX2ZyYWc7CS8qID49IDEgZnJhZ21lbnRzIGhhdmUgYmVlbiBzZW50ICovCiAJdTMyCQlsYXN0c2VxOwkvKiBNUDogbGFzdCBzZXF1ZW5jZSAjIHJlY2VpdmVkICovCi0JaW50ICAgICBzcGVlZDsJCS8qIHNwZWVkIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBwcCBjaGFubmVsKi8KKwlpbnQJCXNwZWVkOwkJLyogc3BlZWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHBwIGNoYW5uZWwqLwogI2VuZGlmIC8qIENPTkZJR19QUFBfTVVMVElMSU5LICovCiB9OwogCkBAIC0xMjkzLDEzICsxMjkzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludAlsZW4sIHRvdGxlbjsKLQlpbnQJaSwgYml0cywgaGRybGVuLCBtdHU7Ci0JaW50CWZsZW47Ci0JaW50CW5hdmFpbCwJbmZyZWUsIG56ZXJvOwotCWludAluYmlnZ2VyOwotCWludAl0b3RzcGVlZDsKLQlpbnQJdG90ZnJlZTsKKwlpbnQgbGVuLCB0b3RsZW47CisJaW50IGksIGJpdHMsIGhkcmxlbiwgbXR1OworCWludCBmbGVuOworCWludCBuYXZhaWwsIG5mcmVlLCBuemVybzsKKwlpbnQgbmJpZ2dlcjsKKwlpbnQgdG90c3BlZWQ7CisJaW50IHRvdGZyZWU7CiAJdW5zaWduZWQgY2hhciAqcCwgKnE7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOwpAQCAtMTMwNywyMSArMTMwNywyMSBAQAogCXN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbjsKIAogCXRvdHNwZWVkID0gMDsgLyp0b3RhbCBiaXRyYXRlIG9mIHRoZSBidW5kbGUqLwotCW5mcmVlID0JMDsJLyogIyBjaGFubmVscyB3aGljaAloYXZlIG5vCXBhY2tldCBhbHJlYWR5IHF1ZXVlZCAqLwotCW5hdmFpbCA9IDA7CS8qIHRvdGFsICMgb2YgdXNhYmxlIGNoYW5uZWxzIChub3QgZGVyZWdpc3RlcmVkKSAqLwotCW56ZXJvID0JMDsgLyogbnVtYmVyIG9mCWNoYW5uZWxzIHdpdGggemVybyBzcGVlZCBhc3NvY2lhdGVkKi8KLQl0b3RmcmVlCT0gMDsgLyp0b3RhbCAjIG9mIGNoYW5uZWxzIGF2YWlsYWJsZSBhbmQKKwluZnJlZSA9IDA7IC8qICMgY2hhbm5lbHMgd2hpY2ggaGF2ZSBubyBwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KKwluYXZhaWwgPSAwOyAvKiB0b3RhbCAjIG9mIHVzYWJsZSBjaGFubmVscyAobm90IGRlcmVnaXN0ZXJlZCkgKi8KKwluemVybyA9IDA7IC8qIG51bWJlciBvZiBjaGFubmVscyB3aXRoIHplcm8gc3BlZWQgYXNzb2NpYXRlZCovCisJdG90ZnJlZSA9IDA7IC8qdG90YWwgIyBvZiBjaGFubmVscyBhdmFpbGFibGUgYW5kCiAJCQkJICAqaGF2aW5nIG5vIHF1ZXVlZCBwYWNrZXRzIGJlZm9yZQogCQkJCSAgKnN0YXJ0aW5nIHRoZSBmcmFnbWVudGF0aW9uKi8KIAogCWhkcmxlbiA9IChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjsKLQlpID0JMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBwcC0+Y2hhbm5lbHMsIGNsaXN0KQl7CisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkgewogCQluYXZhaWwgKz0gcGNoLT5hdmFpbCA9IChwY2gtPmNoYW4gIT0gTlVMTCk7CiAJCXBjaC0+c3BlZWQgPSBwY2gtPmNoYW4tPnNwZWVkOwotCQlpZiAocGNoLT5hdmFpbCkJeworCQlpZiAocGNoLT5hdmFpbCkgewogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAotCQkJCSFwY2gtPmhhZF9mcmFnKQl7CisJCQkJIXBjaC0+aGFkX2ZyYWcpIHsKIAkJCQkJaWYgKHBjaC0+c3BlZWQgPT0gMCkKIAkJCQkJCW56ZXJvKys7CiAJCQkJCWVsc2UKQEAgLTEzMzEsNjAgKzEzMzEsNjAgQEAKIAkJCQkJKytuZnJlZTsKIAkJCQkJKyt0b3RmcmVlOwogCQkJCX0KLQkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpCTwgcHBwLT5ueGNoYW4pCi0JCQkJcHBwLT5ueGNoYW4JPSBpOworCQkJaWYgKCFwY2gtPmhhZF9mcmFnICYmIGkgPCBwcHAtPm54Y2hhbikKKwkJCQlwcHAtPm54Y2hhbiA9IGk7CiAJCX0KIAkJKytpOwogCX0KIAkvKgotCSAqIERvbid0IHN0YXJ0IHNlbmRpbmcgdGhpcwlwYWNrZXQgdW5sZXNzIGF0IGxlYXN0IGhhbGYJb2YKLQkgKiB0aGUgY2hhbm5lbHMJYXJlCWZyZWUuICBUaGlzCWdpdmVzIG11Y2ggYmV0dGVyIFRDUAotCSAqIHBlcmZvcm1hbmNlIGlmIHdlIGhhdmUgYQlsb3QJb2YgY2hhbm5lbHMuCisJICogRG9uJ3Qgc3RhcnQgc2VuZGluZyB0aGlzIHBhY2tldCB1bmxlc3MgYXQgbGVhc3QgaGFsZiBvZgorCSAqIHRoZSBjaGFubmVscyBhcmUgZnJlZS4gIFRoaXMgZ2l2ZXMgbXVjaCBiZXR0ZXIgVENQCisJICogcGVyZm9ybWFuY2UgaWYgd2UgaGF2ZSBhIGxvdCBvZiBjaGFubmVscy4KIAkgKi8KLQlpZiAobmZyZWUgPT0gMCB8fCBuZnJlZQk8IG5hdmFpbCAvIDIpCi0JCXJldHVybiAwOyAvKiBjYW4ndCB0YWtlIG5vdywgbGVhdmUgaXQgaW4geG1pdF9wZW5kaW5nCSovCisJaWYgKG5mcmVlID09IDAgfHwgbmZyZWUgPCBuYXZhaWwgLyAyKQorCQlyZXR1cm4gMDsgLyogY2FuJ3QgdGFrZSBub3csIGxlYXZlIGl0IGluIHhtaXRfcGVuZGluZyAqLwogCiAJLyogRG8gcHJvdG9jb2wgZmllbGQgY29tcHJlc3Npb24gKFhYWCB0aGlzIHNob3VsZCBiZSBvcHRpb25hbCkgKi8KLQlwID0Jc2tiLT5kYXRhOwotCWxlbgk9IHNrYi0+bGVuOworCXAgPSBza2ItPmRhdGE7CisJbGVuID0gc2tiLT5sZW47CiAJaWYgKCpwID09IDApIHsKIAkJKytwOwogCQktLWxlbjsKIAl9CiAKIAl0b3RsZW4gPSBsZW47Ci0JbmJpZ2dlcgk9IGxlbiAlCW5mcmVlOworCW5iaWdnZXIgPSBsZW4gJSBuZnJlZTsKIAotCS8qIHNraXAJdG8gdGhlIGNoYW5uZWwgYWZ0ZXIgdGhlIG9uZSB3ZQlsYXN0IHVzZWQKLQkgICBhbmQgc3RhcnQgYXQJdGhhdCBvbmUgKi8KKwkvKiBza2lwIHRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UgbGFzdCB1c2VkCisJICAgYW5kIHN0YXJ0IGF0IHRoYXQgb25lICovCiAJbGlzdCA9ICZwcHAtPmNoYW5uZWxzOwotCWZvcgkoaSA9IDA7CWkgPAlwcHAtPm54Y2hhbjsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHBwcC0+bnhjaGFuOyArK2kpIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09CSZwcHAtPmNoYW5uZWxzKQl7Ci0JCQlpID0JMDsKKwkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKKwkJCWkgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvKiBjcmVhdGUgYQlmcmFnbWVudCBmb3IgZWFjaCBjaGFubmVsICovCisJLyogY3JlYXRlIGEgZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLwogCWJpdHMgPSBCOwotCXdoaWxlIChsZW4JPiAwKSB7CisJd2hpbGUgKGxlbiA+IDApIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09CSZwcHAtPmNoYW5uZWxzKQl7Ci0JCQlpID0JMDsKKwkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKKwkJCWkgPSAwOwogCQkJY29udGludWU7CiAJCX0KLQkJcGNoCT0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY2hhbm5lbCwgY2xpc3QpOworCQlwY2ggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CiAJCSsraTsKIAkJaWYgKCFwY2gtPmF2YWlsKQogCQkJY29udGludWU7CiAKIAkJLyoKLQkJICogU2tpcAl0aGlzIGNoYW5uZWwgaWYJaXQgaGFzIGEgZnJhZ21lbnQgcGVuZGluZyBhbHJlYWR5IGFuZAotCQkgKiB3ZSBoYXZlbid0IGdpdmVuCWEgZnJhZ21lbnQgdG8gYWxsIG9mIHRoZSBmcmVlIGNoYW5uZWxzLgorCQkgKiBTa2lwIHRoaXMgY2hhbm5lbCBpZiBpdCBoYXMgYSBmcmFnbWVudCBwZW5kaW5nIGFscmVhZHkgYW5kCisJCSAqIHdlIGhhdmVuJ3QgZ2l2ZW4gYSBmcmFnbWVudCB0byBhbGwgb2YgdGhlIGZyZWUgY2hhbm5lbHMuCiAJCSAqLwogCQlpZiAocGNoLT5hdmFpbCA9PSAxKSB7Ci0JCQlpZiAobmZyZWUgPgkwKQorCQkJaWYgKG5mcmVlID4gMCkKIAkJCQljb250aW51ZTsKIAkJfSBlbHNlIHsKIAkJCXBjaC0+YXZhaWwgPSAxOwpAQCAtMTM5MywzMiArMTM5MywzMiBAQAogCQkvKiBjaGVjayB0aGUgY2hhbm5lbCdzIG10dSBhbmQgd2hldGhlciBpdCBpcyBzdGlsbCBhdHRhY2hlZC4gKi8KIAkJc3Bpbl9sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkJaWYgKHBjaC0+Y2hhbiA9PSBOVUxMKSB7Ci0JCQkvKiBjYW4ndCB1c2UgdGhpcyBjaGFubmVsLCBpdCdzCWJlaW5nIGRlcmVnaXN0ZXJlZCAqLworCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncyBiZWluZyBkZXJlZ2lzdGVyZWQgKi8KIAkJCWlmIChwY2gtPnNwZWVkID09IDApCiAJCQkJbnplcm8tLTsKIAkJCWVsc2UKLQkJCQl0b3RzcGVlZCAtPQlwY2gtPnNwZWVkOworCQkJCXRvdHNwZWVkIC09IHBjaC0+c3BlZWQ7CiAKIAkJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkJCXBjaC0+YXZhaWwgPSAwOwogCQkJdG90bGVuID0gbGVuOwogCQkJdG90ZnJlZS0tOwogCQkJbmZyZWUtLTsKLQkJCWlmICgtLW5hdmFpbCA9PQkwKQorCQkJaWYgKC0tbmF2YWlsID09IDApCiAJCQkJYnJlYWs7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qCiAJCSppZiB0aGUgY2hhbm5lbCBzcGVlZCBpcyBub3Qgc2V0IGRpdmlkZQotCQkqdGhlIHBhY2tldAlldmVubHkgYW1vbmcgdGhlIGZyZWUgY2hhbm5lbHM7CisJCSp0aGUgcGFja2V0IGV2ZW5seSBhbW9uZyB0aGUgZnJlZSBjaGFubmVsczsKIAkJKm90aGVyd2lzZSBkaXZpZGUgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVlZAogCQkqb2YgdGhlIGNoYW5uZWwgd2UgYXJlIGdvaW5nIHRvIHRyYW5zbWl0IG9uCiAJCSovCiAJCWZsZW4gPSBsZW47CiAJCWlmIChuZnJlZSA+IDApIHsKIAkJCWlmIChwY2gtPnNwZWVkID09IDApIHsKLQkJCQlmbGVuID0gdG90bGVuL25mcmVlCTsKKwkJCQlmbGVuID0gdG90bGVuL25mcmVlOwogCQkJCWlmIChuYmlnZ2VyID4gMCkgewogCQkJCQlmbGVuKys7CiAJCQkJCW5iaWdnZXItLTsKQEAgLTE0MzYsOCArMTQzNiw4IEBACiAJCX0KIAogCQkvKgotCQkgKmNoZWNrCWlmIHdlIGFyZSBvbiB0aGUgbGFzdCBjaGFubmVsIG9yCi0JCSAqd2UgZXhjZWRlZCB0aGUgbGVuZ2h0CW9mIHRoZSBkYXRhCXRvCisJCSAqY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBsYXN0IGNoYW5uZWwgb3IKKwkJICp3ZSBleGNlZGVkIHRoZSBsZW5naHQgb2YgdGhlIGRhdGEgdG8KIAkJICpmcmFnbWVudAogCQkgKi8KIAkJaWYgKChuZnJlZSA8PSAwKSB8fCAoZmxlbiA+IGxlbikpCkBAIC0xNDQ4LDI5ICsxNDQ4LDI5IEBACiAJCSAqYWJvdmUgZm9ybXVsYSB3aWxsIGJlIGVxdWFsIG9yIGxlc3MgdGhhbiB6ZXJvLgogCQkgKlNraXAgdGhlIGNoYW5uZWwgaW4gdGhpcyBjYXNlCiAJCSAqLwotCQlpZiAoZmxlbiA8PQkwKSB7CisJCWlmIChmbGVuIDw9IDApIHsKIAkJCXBjaC0+YXZhaWwgPSAyOwogCQkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCQkJY29udGludWU7CiAJCX0KIAotCQltdHUJPSBwY2gtPmNoYW4tPm10dSAtIGhkcmxlbjsKLQkJaWYgKG10dQk8IDQpCi0JCQltdHUJPSA0OworCQltdHUgPSBwY2gtPmNoYW4tPm10dSAtIGhkcmxlbjsKKwkJaWYgKG10dSA8IDQpCisJCQltdHUgPSA0OwogCQlpZiAoZmxlbiA+IG10dSkKIAkJCWZsZW4gPSBtdHU7Ci0JCWlmIChmbGVuID09CWxlbikKLQkJCWJpdHMgfD0JRTsKLQkJZnJhZyA9IGFsbG9jX3NrYihmbGVuICsJaGRybGVuICsgKGZsZW4gPT0gMCksIEdGUF9BVE9NSUMpOworCQlpZiAoZmxlbiA9PSBsZW4pCisJCQliaXRzIHw9IEU7CisJCWZyYWcgPSBhbGxvY19za2IoZmxlbiArIGhkcmxlbiArIChmbGVuID09IDApLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFmcmFnKQogCQkJZ290byBub3NrYjsKLQkJcSA9CXNrYl9wdXQoZnJhZywgZmxlbiArIGhkcmxlbik7CisJCXEgPSBza2JfcHV0KGZyYWcsIGZsZW4gKyBoZHJsZW4pOwogCi0JCS8qIG1ha2UJdGhlCU1QIGhlYWRlciAqLworCQkvKiBtYWtlIHRoZSBNUCBoZWFkZXIgKi8KIAkJcVswXSA9IFBQUF9NUCA+PiA4OwogCQlxWzFdID0gUFBQX01QOwogCQlpZiAocHBwLT5mbGFncyAmIFNDX01QX1hTSE9SVFNFUSkgewotCQkJcVsyXSA9IGJpdHMJKyAoKHBwcC0+bnhzZXEgPj4gOCkgJiAweGYpOworCQkJcVsyXSA9IGJpdHMgKyAoKHBwcC0+bnhzZXEgPj4gOCkgJiAweGYpOwogCQkJcVszXSA9IHBwcC0+bnhzZXE7CiAJCX0gZWxzZSB7CiAJCQlxWzJdID0gYml0czsKQEAgLTE0ODMsMjQgKzE0ODMsMjQgQEAKIAogCQkvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovCiAJCWNoYW4gPSBwY2gtPmNoYW47Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpCXx8CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpIHx8CiAJCQkhY2hhbi0+b3BzLT5zdGFydF94bWl0KGNoYW4sIGZyYWcpKQogCQkJc2tiX3F1ZXVlX3RhaWwoJnBjaC0+ZmlsZS54cSwgZnJhZyk7Ci0JCXBjaC0+aGFkX2ZyYWcgPQkxOworCQlwY2gtPmhhZF9mcmFnID0gMTsKIAkJcCArPSBmbGVuOwotCQlsZW4JLT0gZmxlbjsKKwkJbGVuIC09IGZsZW47CiAJCSsrcHBwLT5ueHNlcTsKIAkJYml0cyA9IDA7CiAJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAl9Ci0JcHBwLT5ueGNoYW4JPSBpOworCXBwcC0+bnhjaGFuID0gaTsKIAogCXJldHVybiAxOwogCiAgbm9za2I6CiAJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCWlmIChwcHAtPmRlYnVnICYgMSkKLQkJcHJpbnRrKEtFUk5fRVJSCSJQUFA6IG5vIG1lbW9yeQkoZnJhZ21lbnQpXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXG4iKTsKIAkrK3BwcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAJKytwcHAtPm54c2VxOwogCXJldHVybiAxOwkvKiBhYmFuZG9uIHRoZSBmcmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IDBjNzY4NTkuLmE4NDlmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTU2OCw3ICs1NjgsNyBAQAogCQkJc3RhdHVzKTsKIAogCWlmICgobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgKG5ldGRldi0+bWNfY291bnQgPiBHRUxJQ19ORVRfTUNfQ09VTlRfTUFYKSkgeworCSAgICAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBHRUxJQ19ORVRfTUNfQ09VTlRfTUFYKSkgewogCQlzdGF0dXMgPSBsdjFfbmV0X2FkZF9tdWx0aWNhc3RfYWRkcmVzcyhidXNfaWQoY2FyZCksCiAJCQkJCQkgICAgICAgZGV2X2lkKGNhcmQpLAogCQkJCQkJICAgICAgIDAsIDEpOwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJfQogCiAJLyogc2V0IG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KLQlmb3IgKG1jID0gbmV0ZGV2LT5tY19saXN0OyBtYzsgbWMgPSBtYy0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jLCBuZXRkZXYpIHsKIAkJYWRkciA9IDA7CiAJCXAgPSBtYy0+ZG1pX2FkZHI7CiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCmluZGV4IDIyN2IxNDEuLjI2NjNiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCkBAIC0xMzg5LDExMyArMTM4OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UKLS8qIFNJT0NJV0ZJUlNUUFJJViAqLwotc3RhdGljIGludCBoZXgyYmluKHU4ICpzdHIsIHU4ICpiaW4sIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKLQl1bnNpZ25lZCBjaGFyICpwLCAqcTsKLQl1OCB0bXA7Ci0KLQlpZiAobGVuICE9IFdQQV9QU0tfTEVOICogMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgV1BBX1BTS19MRU4gKiAyOyBpICs9IDIpIHsKLQkJcCA9IHN0cmNocihoZXgsIHRvdXBwZXIoc3RyW2ldKSk7Ci0JCXEgPSBzdHJjaHIoaGV4LCB0b3VwcGVyKHN0cltpICsgMV0pKTsKLQkJaWYgKCFwIHx8ICFxKSB7Ci0JCQlwcl9pbmZvKCIlczogdW5jb252ZXJ0aWJsZSBQU0sgZGlnaXQ9JWRcbiIsCi0JCQkJX19mdW5jX18sIGkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdG1wID0gKChwIC0gaGV4KSA8PCA0KSArIChxIC0gaGV4KTsKLQkJKmJpbisrID0gdG1wOwotCX0KLQlyZXR1cm4gMDsKLX07Ci0KLXN0YXRpYyBpbnQgZ2VsaWNfd2xfcHJpdl9zZXRfcHNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyAqd2wgPSBwb3J0X3dsKG5ldGRldl9wcml2KG5ldF9kZXYpKTsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZzsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2RlYnVnKCIlczo8LSBsZW49JWRcbiIsIF9fZnVuY19fLCBkYXRhLT5kYXRhLmxlbmd0aCk7Ci0JbGVuID0gZGF0YS0+ZGF0YS5sZW5ndGggLSAxOwotCWlmIChsZW4gPD0gMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmxvY2ssIGlycWZsYWcpOwotCWlmIChleHRyYVswXSA9PSAnIicgJiYgZXh0cmFbbGVuIC0gMV0gPT0gJyInKSB7Ci0JCXByX2RlYnVnKCIlczogcGFzc3BocmFzZSBtb2RlXG4iLCBfX2Z1bmNfXyk7Ci0JCS8qIHBhc3MgcGhyYXNlICovCi0JCWlmIChHRUxJQ19XTF9FVVJVU19QU0tfTUFYX0xFTiA8IChsZW4gLSAyKSkgewotCQkJcHJfaW5mbygiJXM6IHBhc3NwaHJhc2UgdG9vIGxvbmdcbiIsIF9fZnVuY19fKTsKLQkJCXJldCA9IC1FMkJJRzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCW1lbXNldCh3bC0+cHNrLCAwLCBzaXplb2Yod2wtPnBzaykpOwotCQl3bC0+cHNrX2xlbiA9IGxlbiAtIDI7Ci0JCW1lbWNweSh3bC0+cHNrLCAmKGV4dHJhWzFdKSwgd2wtPnBza19sZW4pOwotCQl3bC0+cHNrX3R5cGUgPSBHRUxJQ19FVVJVU19XUEFfUFNLX1BBU1NQSFJBU0U7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gaGV4MmJpbihleHRyYSwgd2wtPnBzaywgbGVuKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCQl3bC0+cHNrX2xlbiA9IFdQQV9QU0tfTEVOOwotCQl3bC0+cHNrX3R5cGUgPSBHRUxJQ19FVVJVU19XUEFfUFNLX0JJTjsKLQl9Ci0Jc2V0X2JpdChHRUxJQ19XTF9TVEFUX1dQQV9QU0tfU0VULCAmd2wtPnN0YXQpOwotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5sb2NrLCBpcnFmbGFnKTsKLQlwcl9kZWJ1ZygiJXM6LT5cbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdlbGljX3dsX3ByaXZfZ2V0X3BzayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGdlbGljX3dsX2luZm8gKndsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRfZGV2KSk7Ci0JY2hhciAqcDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWc7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlwcl9kZWJ1ZygiJXM6PC1cbiIsIF9fZnVuY19fKTsKLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmxvY2ssIGlycWZsYWcpOwotCXAgPSBleHRyYTsKLQlpZiAodGVzdF9iaXQoR0VMSUNfV0xfU1RBVF9XUEFfUFNLX1NFVCwgJndsLT5zdGF0KSkgewotCQlpZiAod2wtPnBza190eXBlID09IEdFTElDX0VVUlVTX1dQQV9QU0tfQklOKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgd2wtPnBza19sZW47IGkrKykgewotCQkJCXNwcmludGYocCwgIiUwMnh1Iiwgd2wtPnBza1tpXSk7Ci0JCQkJcCArPSAyOwotCQkJfQotCQkJKnAgPSAnXDAnOwotCQkJZGF0YS0+ZGF0YS5sZW5ndGggPSB3bC0+cHNrX2xlbiAqIDI7Ci0JCX0gZWxzZSB7Ci0JCQkqcCsrID0gJyInOwotCQkJbWVtY3B5KHAsIHdsLT5wc2ssIHdsLT5wc2tfbGVuKTsKLQkJCXAgKz0gd2wtPnBza19sZW47Ci0JCQkqcCsrID0gJyInOwotCQkJKnAgPSAnXDAnOwotCQkJZGF0YS0+ZGF0YS5sZW5ndGggPSB3bC0+cHNrX2xlbiArIDI7Ci0JCX0KLQl9IGVsc2UKLQkJLyogbm8gcHNrIHNldCAqLwotCQlkYXRhLT5kYXRhLmxlbmd0aCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmxvY2ssIGlycWZsYWcpOwotCXByX2RlYnVnKCIlczotPiAlZFxuIiwgX19mdW5jX18sIGRhdGEtPmRhdGEubGVuZ3RoKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKiBTSU9DR0lXTklDS04gKi8KIHN0YXRpYyBpbnQgZ2VsaWNfd2xfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMTU3MSw4ICsxNDY0LDEwIEBACiAJaW5pdF9jb21wbGV0aW9uKCZ3bC0+c2Nhbl9kb25lKTsKIAkvKgogCSAqIElmIHdlIGhhdmUgYWxyZWFkeSBhIGJzcyBsaXN0LCBkb24ndCB0cnkgdG8gZ2V0IG5ldworCSAqIHVubGVzcyB3ZSBhcmUgZG9pbmcgYW4gRVNTSUQgc2NhbgogCSAqLwotCWlmICghYWx3YXlzX3NjYW4gJiYgd2wtPnNjYW5fc3RhdCA9PSBHRUxJQ19XTF9TQ0FOX1NUQVRfR09UX0xJU1QpIHsKKwlpZiAoKCFlc3NpZF9sZW4gJiYgIWFsd2F5c19zY2FuKQorCSAgICAmJiB3bC0+c2Nhbl9zdGF0ID09IEdFTElDX1dMX1NDQU5fU1RBVF9HT1RfTElTVCkgewogCQlwcl9kZWJ1ZygiJXM6IGFscmVhZHkgaGFzIHRoZSBsaXN0XG4iLCBfX2Z1bmNfXyk7CiAJCWNvbXBsZXRlKCZ3bC0+c2Nhbl9kb25lKTsKIAkJZ290byBvdXQ7CkBAIC0xNjczLDcgKzE1NjgsNyBAQAogCQl9CiAJfQogCi0JLyogcHV0IHRoZW0gaW4gdGhlIG5ld3RvcmtfbGlzdCAqLworCS8qIHB1dCB0aGVtIGluIHRoZSBuZXR3b3JrX2xpc3QgKi8KIAlmb3IgKGkgPSAwLCBzY2FuX2luZm9fc2l6ZSA9IDAsIHNjYW5faW5mbyA9IGJ1ZjsKIAkgICAgIHNjYW5faW5mb19zaXplIDwgZGF0YV9sZW47CiAJICAgICBpKyssIHNjYW5faW5mb19zaXplICs9IGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSksCkBAIC0yMDA5LDcgKzE5MDQsNyBAQAogCS8qIFBTSyB0eXBlICovCiAJd3BhLT5wc2tfdHlwZSA9IGNwdV90b19iZTE2KHdsLT5wc2tfdHlwZSk7CiAjaWZkZWYgREVCVUcKLQlwcl9kZWJ1ZygiJXM6IHNlYz0lcyBwc2t0eXBlPSVzXG5uIiwgX19mdW5jX18sCisJcHJfZGVidWcoIiVzOiBzZWM9JXMgcHNrdHlwZT0lc1xuIiwgX19mdW5jX18sCiAJCSB3cGFzZWNzdHIod3BhLT5zZWN1cml0eSksCiAJCSAod3BhLT5wc2tfdHlwZSA9PSBHRUxJQ19FVVJVU19XUEFfUFNLX0JJTikgPwogCQkgIkJJTiIgOiAicGFzc3BocmFzZSIpOwpAQCAtMjAxOSw5ICsxOTE0LDkgQEAKIAkgKiB0aGUgZGVidWcgbG9nIGJlY2F1c2UgdGhpcyBkdW1wcyB5b3VyIHByZWNpb3VzCiAJICogcGFzc3BocmFzZS9rZXkuCiAJICovCi0JcHJfZGVidWcoIiVzOiBwc2s9JXNcbiIsCisJcHJfZGVidWcoIiVzOiBwc2s9JXNcbiIsIF9fZnVuY19fLAogCQkgKHdwYS0+cHNrX3R5cGUgPT0gR0VMSUNfRVVSVVNfV1BBX1BTS19CSU4pID8KLQkJIChjaGFyICopIk4vQSIgOiAoY2hhciAqKXdwYS0+cHNrKTsKKwkJICJOL0EiIDogd3BhLT5wc2spOwogI2VuZGlmCiAjZW5kaWYKIAkvKiBpc3N1ZSB3cGEgc2V0dXAgKi8KQEAgLTI0MDYsNDAgKzIzMDEsMTAgQEAKIAlJV19JT0NUTChTSU9DR0lXTklDS04pCQk9IGdlbGljX3dsX2dldF9uaWNrLAogfTsKIAotI2lmZGVmIENPTkZJR19HRUxJQ19XSVJFTEVTU19PTERfUFNLX0lOVEVSRkFDRQotc3RhdGljIHN0cnVjdCBpd19wcml2X2FyZ3MgZ2VsaWNfd2xfcHJpdmF0ZV9hcmdzW10gPQotewotCXsKLQkJLmNtZCA9IEdFTElDX1dMX1BSSVZfU0VUX1BTSywKLQkJLnNldF9hcmdzID0gSVdfUFJJVl9UWVBFX0NIQVIgfAotCQkoR0VMSUNfV0xfRVVSVVNfUFNLX01BWF9MRU4gKyAyKSwKLQkJLm5hbWUgPSAic2V0X3BzayIKLQl9LAotCXsKLQkJLmNtZCA9IEdFTElDX1dMX1BSSVZfR0VUX1BTSywKLQkJLmdldF9hcmdzID0gSVdfUFJJVl9UWVBFX0NIQVIgfAotCQkoR0VMSUNfV0xfRVVSVVNfUFNLX01BWF9MRU4gKyAyKSwKLQkJLm5hbWUgPSAiZ2V0X3BzayIKLQl9Ci19OwotCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBnZWxpY193bF9wcml2YXRlX2hhbmRsZXJbXSA9Ci17Ci0JZ2VsaWNfd2xfcHJpdl9zZXRfcHNrLAotCWdlbGljX3dsX3ByaXZfZ2V0X3BzaywKLX07Ci0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJCT0gQVJSQVlfU0laRShnZWxpY193bF93ZXh0X2hhbmRsZXIpLAogCS5zdGFuZGFyZAkJPSBnZWxpY193bF93ZXh0X2hhbmRsZXIsCiAJLmdldF93aXJlbGVzc19zdGF0cwk9IGdlbGljX3dsX2dldF93aXJlbGVzc19zdGF0cywKLSNpZmRlZiBDT05GSUdfR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UKLQkubnVtX3ByaXZhdGUJCT0gQVJSQVlfU0laRShnZWxpY193bF9wcml2YXRlX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzCT0gQVJSQVlfU0laRShnZWxpY193bF9wcml2YXRlX2FyZ3MpLAotCS5wcml2YXRlCQk9IGdlbGljX3dsX3ByaXZhdGVfaGFuZGxlciwKLQkucHJpdmF0ZV9hcmdzCQk9IGdlbGljX3dsX3ByaXZhdGVfYXJncywKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogX19kZXZpbml0IGdlbGljX3dsX2FsbG9jKHN0cnVjdCBnZWxpY19jYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IGRkMzUwNjYuLjRlZjBhZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTYxLDcgKzYxLDcgQEAKIG1vZHVsZV9wYXJhbShtc2ksIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIlR1cm4gb24gTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWwzeHh4X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHFsM3h4eF9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUwzMDIyX0RFVklDRV9JRCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTDMwMzJfREVWSUNFX0lEKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtNDA4Nyw3ICs0MDg3LDYgQEAKIAlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwotCXFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcWxjbmljL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYmE4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciBRbG9naWMgMUcvMTBHIEV0aGVybmV0IERyaXZlciBmb3IgQ05BIGRldmljZXMKKyMKKworb2JqLSQoQ09ORklHX1FMQ05JQykgOj0gcWxjbmljLm8KKworcWxjbmljLXkgOj0gcWxjbmljX2h3Lm8gcWxjbmljX21haW4ubyBxbGNuaWNfaW5pdC5vIFwKKwlxbGNuaWNfZXRodG9vbC5vIHFsY25pY19jdHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGE4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTAsMCArMSwxMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICovCisKKyNpZm5kZWYgX1FMQ05JQ19IXworI2RlZmluZSBfUUxDTklDX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAicWxjbmljX2hkci5oIgorCisjZGVmaW5lIF9RTENOSUNfTElOVVhfTUFKT1IgNQorI2RlZmluZSBfUUxDTklDX0xJTlVYX01JTk9SIDAKKyNkZWZpbmUgX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OIDAKKyNkZWZpbmUgUUxDTklDX0xJTlVYX1ZFUlNJT05JRCAgIjUuMC4wIgorCisjZGVmaW5lIFFMQ05JQ19WRVJTSU9OX0NPREUoYSwgYiwgYykJKCgoYSkgPDwgMjQpICsgKChiKSA8PCAxNikgKyAoYykpCisjZGVmaW5lIF9tYWpvcih2KQkoKCh2KSA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBfbWlub3IodikJKCgodikgPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgX2J1aWxkKHYpCSgodikgJiAweGZmZmYpCisKKy8qIHZlcnNpb24gaW4gaW1hZ2UgaGFzIHdlaXJkIGVuY29kaW5nOgorICogIDc6MCAgLSBtYWpvcgorICogMTU6OCAgLSBtaW5vcgorICogMzE6MTYgLSBidWlsZCAobGl0dGxlIGVuZGlhbikKKyAqLworI2RlZmluZSBRTENOSUNfREVDT0RFX1ZFUlNJT04odikgXAorCVFMQ05JQ19WRVJTSU9OX0NPREUoKCh2KSAmIDB4ZmYpLCAoKCh2KSA+PiA4KSAmIDB4ZmYpLCAoKHYpID4+IDE2KSkKKworI2RlZmluZSBRTENOSUNfTlVNX0ZMQVNIX1NFQ1RPUlMgKDY0KQorI2RlZmluZSBRTENOSUNfRkxBU0hfU0VDVE9SX1NJWkUgKDY0ICogMTAyNCkKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1RPVEFMX1NJWkUgIChRTENOSUNfTlVNX0ZMQVNIX1NFQ1RPUlMgXAorCQkJCQkqIFFMQ05JQ19GTEFTSF9TRUNUT1JfU0laRSkKKworI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZykJXAorCShzaXplb2Yoc3RydWN0IHJjdl9kZXNjKSAqIChyZHNfcmluZyktPm51bV9kZXNjKQorI2RlZmluZSBSQ1ZfQlVGRl9SSU5HU0laRShyZHNfcmluZykJXAorCShzaXplb2Yoc3RydWN0IHFsY25pY19yeF9idWZmZXIpICogcmRzX3JpbmctPm51bV9kZXNjKQorI2RlZmluZSBTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZykJXAorCShzaXplb2Yoc3RydWN0IHN0YXR1c19kZXNjKSAqIChzZHNfcmluZyktPm51bV9kZXNjKQorI2RlZmluZSBUWF9CVUZGX1JJTkdTSVpFKHR4X3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlcikgKiB0eF9yaW5nLT5udW1fZGVzYykKKyNkZWZpbmUgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICogdHhfcmluZy0+bnVtX2Rlc2MpCisKKyNkZWZpbmUgUUxDTklDX1AzUF9BMAkJMHg1MAorCisjZGVmaW5lIFFMQ05JQ19JU19SRVZJU0lPTl9QM1AoUkVWSVNJT04pICAgICAoUkVWSVNJT04gPj0gUUxDTklDX1AzUF9BMCkKKworI2RlZmluZSBGSVJTVF9QQUdFX0dST1VQX1NUQVJUCTAKKyNkZWZpbmUgRklSU1RfUEFHRV9HUk9VUF9FTkQJMHgxMDAwMDAKKworI2RlZmluZSBQM19NQVhfTVRVICAgICAgICAgICAgICAgICAgICAgKDk2MDApCisjZGVmaW5lIFFMQ05JQ19NQVhfRVRIRVJIRFIgICAgICAgICAgICAgICAgMzIgLyogVGhpcyBjb250YWlucyBzb21lIHBhZGRpbmcgKi8KKworI2RlZmluZSBRTENOSUNfUDNfUlhfQlVGX01BWF9MRU4gICAgICAgICAoUUxDTklDX01BWF9FVEhFUkhEUiArIEVUSF9EQVRBX0xFTikKKyNkZWZpbmUgUUxDTklDX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOICAgKFFMQ05JQ19NQVhfRVRIRVJIRFIgKyBQM19NQVhfTVRVKQorI2RlZmluZSBRTENOSUNfQ1RfREVGQVVMVF9SWF9CVUZfTEVOCTIwNDgKKyNkZWZpbmUgUUxDTklDX0xST19CVUZGRVJfRVhUUkEJCTIwNDgKKworI2RlZmluZSBRTENOSUNfUlhfTFJPX0JVRkZFUl9MRU5HVEgJCSg4MDYwKQorCisvKiBPcGNvZGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgY29tbWFuZHMgKi8KKyNkZWZpbmUgVFhfRVRIRVJfUEtUCTB4MDEKKyNkZWZpbmUgVFhfVENQX1BLVAkweDAyCisjZGVmaW5lIFRYX1VEUF9QS1QJMHgwMworI2RlZmluZSBUWF9JUF9QS1QJMHgwNAorI2RlZmluZSBUWF9UQ1BfTFNPCTB4MDUKKyNkZWZpbmUgVFhfVENQX0xTTzYJMHgwNgorI2RlZmluZSBUWF9JUFNFQwkweDA3CisjZGVmaW5lIFRYX0lQU0VDX0NNRAkweDBhCisjZGVmaW5lIFRYX1RDUFY2X1BLVAkweDBiCisjZGVmaW5lIFRYX1VEUFY2X1BLVAkweDBjCisKKy8qIFR4IGRlZmluZXMgKi8KKyNkZWZpbmUgTUFYX0JVRkZFUlNfUEVSX0NNRAkzMgorI2RlZmluZSBUWF9TVE9QX1RIUkVTSAkJKChNQVhfU0tCX0ZSQUdTID4+IDIpICsgNCkKKyNkZWZpbmUgUUxDTklDX01BWF9UWF9USU1FT1VUUwkyCisKKy8qCisgKiBGb2xsb3dpbmcgYXJlIHRoZSBzdGF0ZXMgb2YgdGhlIFBoYW50b20uIFBoYW50b20gd2lsbCBzZXQgdGhlbSBhbmQKKyAqIEhvc3Qgd2lsbCByZWFkIHRvIGNoZWNrIGlmIHRoZSBmaWVsZHMgYXJlIGNvcnJlY3QuCisgKi8KKyNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0ZBSUxFRAkJMHhmZmZmCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9DT01QTEVURQkweGZmMDEKKworLyogSG9zdCB3cml0ZXMgdGhlIGZvbGxvd2luZyB0byBub3RpZnkgdGhhdCBpdCBoYXMgZG9uZSB0aGUgaW5pdC1oYW5kc2hha2UgKi8KKyNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0FDSwkJMHhmMDBmCisjZGVmaW5lIFBIQU5fUEVHX1JDVl9JTklUSUFMSVpFRAkweGZmMDEKKworI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMworI2RlZmluZSBOVU1fU1RTX0RFU0NfUklOR1MJNAorCisjZGVmaW5lIFJDVl9SSU5HX05PUk1BTCAwCisjZGVmaW5lIFJDVl9SSU5HX0pVTUJPCTEKKyNkZWZpbmUgUkNWX1JJTkdfTFJPCTIKKworI2RlZmluZSBNSU5fQ01EX0RFU0NSSVBUT1JTCQk2NAorI2RlZmluZSBNSU5fUkNWX0RFU0NSSVBUT1JTCQk2NAorI2RlZmluZSBNSU5fSlVNQk9fREVTQ1JJUFRPUlMJCTMyCisKKyNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJMTAyNAorI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHCQk0MDk2CisjZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHIAk4MTkyCisjZGVmaW5lIE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMUcJNTEyCisjZGVmaW5lIE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHCTEwMjQKKyNkZWZpbmUgTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlMJCTgKKworI2RlZmluZSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xRwkyMDQ4CisjZGVmaW5lIERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzEwRwk0MDk2CisKKyNkZWZpbmUgZ2V0X25leHRfaW5kZXgoaW5kZXgsIGxlbmd0aCkJXAorCSgoKGluZGV4KSArIDEpICYgKChsZW5ndGgpIC0gMSkpCisKKyNkZWZpbmUgTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSAweDIyMjIKKworLyoKKyAqIEZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMgZGVzY3JpYmUgdGhlIGRlc2NyaXB0b3JzIHRoYXQgd2lsbCBiZSB1c2VkLgorICogQWRkZWQgZmlsZWRzIG9mIHRjcEhkclNpemUgYW5kIGlwSGRyU2l6ZSwgVGhlIGRyaXZlciBuZWVkcyB0byBkbyBpdCBvbmx5IHdoZW4KKyAqIHdlIGFyZSBkb2luZyBMU08gKGFib3ZlIHRoZSAxNTAwIHNpemUgcGFja2V0KSBvbmx5LgorICovCisKKyNkZWZpbmUgRkxBR1NfVkxBTl9UQUdHRUQJMHgxMAorI2RlZmluZSBGTEFHU19WTEFOX09PQgkJMHg0MAorCisjZGVmaW5lIHFsY25pY19zZXRfdHhfdmxhbl90Y2koY21kX2Rlc2MsIHYpCVwKKwkoY21kX2Rlc2MpLT52bGFuX1RDSSA9IGNwdV90b19sZTE2KHYpOworI2RlZmluZSBxbGNuaWNfc2V0X2NtZF9kZXNjX3BvcnQoY21kX2Rlc2MsIHZhcikJXAorCSgoY21kX2Rlc2MpLT5wb3J0X2N0eGlkIHw9ICgodmFyKSAmIDB4MEYpKQorI2RlZmluZSBxbGNuaWNfc2V0X2NtZF9kZXNjX2N0eGlkKGNtZF9kZXNjLCB2YXIpCVwKKwkoKGNtZF9kZXNjKS0+cG9ydF9jdHhpZCB8PSAoKHZhcikgPDwgNCAmIDB4RjApKQorCisjZGVmaW5lIHFsY25pY19zZXRfdHhfcG9ydChfZGVzYywgX3BvcnQpIFwKKwkoKF9kZXNjKS0+cG9ydF9jdHhpZCA9ICgoX3BvcnQpICYgMHhmKSB8ICgoKF9wb3J0KSA8PCA0KSAmIDB4ZjApKQorCisjZGVmaW5lIHFsY25pY19zZXRfdHhfZmxhZ3Nfb3Bjb2RlKF9kZXNjLCBfZmxhZ3MsIF9vcGNvZGUpIFwKKwkoKF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlID0gXAorCWNwdV90b19sZTE2KCgoX2ZsYWdzKSAmIDB4N2YpIHwgKCgoX29wY29kZSkgJiAweDNmKSA8PCA3KSkpCisKKyNkZWZpbmUgcWxjbmljX3NldF90eF9mcmFnc19sZW4oX2Rlc2MsIF9mcmFncywgX2xlbikgXAorCSgoX2Rlc2MpLT5uZnJhZ3NfX2xlbmd0aCA9IFwKKwljcHVfdG9fbGUzMigoKF9mcmFncykgJiAweGZmKSB8ICgoKF9sZW4pICYgMHhmZmZmZmYpIDw8IDgpKSkKKworc3RydWN0IGNtZF9kZXNjX3R5cGUwIHsKKwl1OCB0Y3BfaGRyX29mZnNldDsJLyogRm9yIExTTyBvbmx5ICovCisJdTggaXBfaGRyX29mZnNldDsJLyogRm9yIExTTyBvbmx5ICovCisJX19sZTE2IGZsYWdzX29wY29kZTsJLyogMTU6MTMgdW51c2VkLCAxMjo3IG9wY29kZSwgNjowIGZsYWdzICovCisJX19sZTMyIG5mcmFnc19fbGVuZ3RoOwkvKiAzMTo4IHRvdGFsIGxlbiwgNzowIGZyYWcgY291bnQgKi8KKworCV9fbGU2NCBhZGRyX2J1ZmZlcjI7CisKKwlfX2xlMTYgcmVmZXJlbmNlX2hhbmRsZTsKKwlfX2xlMTYgbXNzOworCXU4IHBvcnRfY3R4aWQ7CQkvKiA3OjQgY3R4aWQgMzowIHBvcnQgKi8KKwl1OCB0b3RhbF9oZHJfbGVuZ3RoOwkvKiBMU08gb25seSA6IE1BQytJUCtUQ1AgSGRyIHNpemUgKi8KKwlfX2xlMTYgY29ubl9pZDsJCS8qIElQU2VjIG9mZm9hZCBvbmx5ICovCisKKwlfX2xlNjQgYWRkcl9idWZmZXIzOworCV9fbGU2NCBhZGRyX2J1ZmZlcjE7CisKKwlfX2xlMTYgYnVmZmVyX2xlbmd0aFs0XTsKKworCV9fbGU2NCBhZGRyX2J1ZmZlcjQ7CisKKwlfX2xlMzIgcmVzZXJ2ZWQyOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMTYgdmxhbl9UQ0k7CisKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CisKKy8qIE5vdGU6IHNpemVvZihyY3ZfZGVzYykgc2hvdWxkIGFsd2F5cyBiZSBhIG11dGxpcGxlIG9mIDIgKi8KK3N0cnVjdCByY3ZfZGVzYyB7CisJX19sZTE2IHJlZmVyZW5jZV9oYW5kbGU7CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUzMiBidWZmZXJfbGVuZ3RoOwkvKiBhbGxvY2F0ZWQgYnVmZmVyIGxlbmd0aCAodXN1YWxseSAySykgKi8KKwlfX2xlNjQgYWRkcl9idWZmZXI7Cit9OworCisvKiBvcGNvZGUgZmllbGQgaW4gc3RhdHVzX2Rlc2MgKi8KKyNkZWZpbmUgUUxDTklDX1NZTl9PRkZMT0FECTB4MDMKKyNkZWZpbmUgUUxDTklDX1JYUEtUX0RFU0MgIAkweDA0CisjZGVmaW5lIFFMQ05JQ19PTERfUlhQS1RfREVTQwkweDNmCisjZGVmaW5lIFFMQ05JQ19SRVNQT05TRV9ERVNDCTB4MDUKKyNkZWZpbmUgUUxDTklDX0xST19ERVNDICAJMHgxMgorCisvKiBmb3Igc3RhdHVzIGZpZWxkIGluIHN0YXR1c19kZXNjICovCisjZGVmaW5lIFNUQVRVU19DS1NVTV9PSwkJKDIpCisKKy8qIG93bmVyIGJpdHMgb2Ygc3RhdHVzX2Rlc2MgKi8KKyNkZWZpbmUgU1RBVFVTX09XTkVSX0hPU1QJKDB4MVVMTCA8PCA1NikKKyNkZWZpbmUgU1RBVFVTX09XTkVSX1BIQU5UT00JKDB4MlVMTCA8PCA1NikKKworLyogU3RhdHVzIGRlc2NyaXB0b3I6CisgICAwLTMgcG9ydCwgNC03IHN0YXR1cywgOC0xMSB0eXBlLCAxMi0yNyB0b3RhbF9sZW5ndGgKKyAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CisgICA1My01NSBkZXNjX2NudCwgNTYtNTcgb3duZXIsIDU4LTYzIG9wY29kZQorICovCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3BvcnQoc3RzX2RhdGEpCVwKKwkoKHN0c19kYXRhKSAmIDB4MEYpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA0KSAmIDB4MEYpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3R5cGUoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gOCkgJiAweDBGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiAxMikgJiAweEZGRkYpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3JlZmhhbmRsZShzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiAyOCkgJiAweEZGRkYpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3Byb3Qoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDQpICYgMHgwRikKKyNkZWZpbmUgcWxjbmljX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA0OCkgJiAweDFGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19kZXNjX2NudChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA1MykgJiAweDcpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX29wY29kZShzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA1OCkgJiAweDAzRikKKworI2RlZmluZSBxbGNuaWNfZ2V0X2xyb19zdHNfcmVmaGFuZGxlKHN0c19kYXRhKSAJXAorCSgoc3RzX2RhdGEpICYgMHgwRkZGRikKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX2xlbmd0aChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiAxNikgJiAweDBGRkZGKQorI2RlZmluZSBxbGNuaWNfZ2V0X2xyb19zdHNfbDJfaGRyX29mZnNldChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiAzMikgJiAweDBGRikKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX2w0X2hkcl9vZmZzZXQoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDApICYgMHgwRkYpCisjZGVmaW5lIHFsY25pY19nZXRfbHJvX3N0c190aW1lc3RhbXAoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDgpICYgMHgxKQorI2RlZmluZSBxbGNuaWNfZ2V0X2xyb19zdHNfdHlwZShzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA0OSkgJiAweDcpCisjZGVmaW5lIHFsY25pY19nZXRfbHJvX3N0c19wdXNoX2ZsYWcoc3RzX2RhdGEpCQlcCisJKCgoc3RzX2RhdGEpID4+IDUyKSAmIDB4MSkKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX3NlcV9udW1iZXIoc3RzX2RhdGEpCQlcCisJKChzdHNfZGF0YSkgJiAweDBGRkZGRkZGRikKKworCitzdHJ1Y3Qgc3RhdHVzX2Rlc2MgeworCV9fbGU2NCBzdGF0dXNfZGVzY19kYXRhWzJdOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKKworLyogVU5JRklFRCBST01JTUFHRSAqLworI2RlZmluZSBRTENOSUNfVU5JX0ZXX01JTl9TSVpFCQkweGM4MDAwCisjZGVmaW5lIFFMQ05JQ19VTklfRElSX1NFQ1RfUFJPRFVDVF9UQkwJMHgwCisjZGVmaW5lIFFMQ05JQ19VTklfRElSX1NFQ1RfQk9PVExECTB4NgorI2RlZmluZSBRTENOSUNfVU5JX0RJUl9TRUNUX0ZXCQkweDcKKworLypPZmZzZXRzICovCisjZGVmaW5lIFFMQ05JQ19VTklfQ0hJUF9SRVZfT0ZGCQkxMAorI2RlZmluZSBRTENOSUNfVU5JX0ZMQUdTX09GRgkJMTEKKyNkZWZpbmUgUUxDTklDX1VOSV9CSU9TX1ZFUlNJT05fT0ZGIAkxMgorI2RlZmluZSBRTENOSUNfVU5JX0JPT1RMRF9JRFhfT0ZGCTI3CisjZGVmaW5lIFFMQ05JQ19VTklfRklSTVdBUkVfSURYX09GRiAJMjkKKworc3RydWN0IHVuaV90YWJsZV9kZXNjeworCXUzMglmaW5kZXg7CisJdTMyCW51bV9lbnRyaWVzOworCXUzMgllbnRyeV9zaXplOworCXUzMglyZXNlcnZlZFs1XTsKK307CisKK3N0cnVjdCB1bmlfZGF0YV9kZXNjeworCXUzMglmaW5kZXg7CisJdTMyCXNpemU7CisJdTMyCXJlc2VydmVkWzVdOworfTsKKworLyogTWFnaWMgbnVtYmVyIHRvIGxldCB1c2VyIGtub3cgZmxhc2ggaXMgcHJvZ3JhbW1lZCAqLworI2RlZmluZQlRTENOSUNfQkRJTkZPX01BR0lDIDB4MTIzNDU2NzgKKworI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM19SRUZfUUcJMHgwMDIxCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzX0hNRVoJCTB4MDAyMgorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0X0xQCTB4MDAyMworI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM180X0dCCQkweDAwMjQKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfSU1FWgkJMHgwMDI1CisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfUExVUwkweDAwMjYKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UCTB4MDAyNworI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM19YR19MT00JMHgwMDI4CisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzRfR0JfTU0JMHgwMDI5CisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfQ1QJMHgwMDJhCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfUVQJMHgwMDJiCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19DWDQJMHgwMDMxCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19YRlAJMHgwMDMyCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19UUAkweDAwODAKKworLyogRmxhc2ggbWVtb3J5IG1hcCAqLworI2RlZmluZSBRTENOSUNfQlJEQ0ZHX1NUQVJUCTB4NDAwMAkJLyogYm9hcmQgY29uZmlnICovCisjZGVmaW5lIFFMQ05JQ19CT09UTERfU1RBUlQJMHgxMDAwMAkJLyogYm9vdGxkICovCisjZGVmaW5lIFFMQ05JQ19JTUFHRV9TVEFSVAkweDQzMDAwCQkvKiBjb21wcmVzc2VkIGltYWdlICovCisjZGVmaW5lIFFMQ05JQ19VU0VSX1NUQVJUCTB4M0U4MDAwCS8qIEZpcm1hcmUgaW5mbyAqLworCisjZGVmaW5lIFFMQ05JQ19GV19WRVJTSU9OX09GRlNFVAkoUUxDTklDX1VTRVJfU1RBUlQrMHg0MDgpCisjZGVmaW5lIFFMQ05JQ19GV19TSVpFX09GRlNFVAkJKFFMQ05JQ19VU0VSX1NUQVJUKzB4NDBjKQorI2RlZmluZSBRTENOSUNfRldfU0VSSUFMX05VTV9PRkZTRVQJKFFMQ05JQ19VU0VSX1NUQVJUKzB4ODFjKQorI2RlZmluZSBRTENOSUNfQklPU19WRVJTSU9OX09GRlNFVAkoUUxDTklDX1VTRVJfU1RBUlQrMHg4M2MpCisKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfT0ZGU0VUCQkoUUxDTklDX0JSRENGR19TVEFSVCsweDgpCisjZGVmaW5lIFFMQ05JQ19GV19NQUdJQ19PRkZTRVQJCShRTENOSUNfQlJEQ0ZHX1NUQVJUKzB4MTI4KQorCisjZGVmaW5lIFFMQ05JQ19GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQorI2RlZmluZSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSAgCTAKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1JPTUlNQUdFCQkxCisjZGVmaW5lIFFMQ05JQ19VTktOT1dOX1JPTUlNQUdFCQkweGZmCisKKyNkZWZpbmUgUUxDTklDX1VOSUZJRURfUk9NSU1BR0VfTkFNRQkicGhhbmZ3LmJpbiIKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1JPTUlNQUdFX05BTUUJImZsYXNoIgorCitleHRlcm4gY2hhciBxbGNuaWNfZHJpdmVyX25hbWVbXTsKKworLyogTnVtYmVyIG9mIHN0YXR1cyBkZXNjcmlwdG9ycyB0byBoYW5kbGUgcGVyIGludGVycnVwdCAqLworI2RlZmluZSBNQVhfU1RBVFVTX0hBTkRMRQkoNjQpCisKKy8qCisgKiBxbGNuaWNfc2tiX2ZyYWd7fSBpcyB0byBjb250YWluIG1hcHBpbmcgaW5mbyBmb3IgZWFjaCBTRyBsaXN0LiBUaGlzCisgKiBoYXMgdG8gYmUgZnJlZWQgd2hlbiBETUEgaXMgY29tcGxldGUuIFRoaXMgaXMgcGFydCBvZiBxbGNuaWNfdHhfYnVmZmVye30uCisgKi8KK3N0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgeworCXU2NCBkbWE7CisJdTY0IGxlbmd0aDsKK307CisKK3N0cnVjdCBxbGNuaWNfcmVjdl9jcmIgeworCXUzMiBjcmJfcmN2X3Byb2R1Y2VyW05VTV9SQ1ZfREVTQ19SSU5HU107CisJdTMyIGNyYl9zdHNfY29uc3VtZXJbTlVNX1NUU19ERVNDX1JJTkdTXTsKKwl1MzIgc3dfaW50X21hc2tbTlVNX1NUU19ERVNDX1JJTkdTXTsKK307CisKKy8qICAgIEZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIHN0YXRlIG9mIHRoZSBidWZmZXJzICAgICovCisjZGVmaW5lCVFMQ05JQ19CVUZGRVJfRlJFRQkwCisjZGVmaW5lCVFMQ05JQ19CVUZGRVJfQlVTWQkxCisKKy8qCisgKiBUaGVyZSB3aWxsIGJlIG9uZSBxbGNuaWNfYnVmZmVyIHBlciBza2IgcGFja2V0LiAgICBUaGVzZSB3aWxsIGJlCisgKiB1c2VkIHRvIHNhdmUgdGhlIGRtYSBpbmZvIGZvciBwY2lfdW5tYXBfcGFnZSgpCisgKi8KK3N0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnIGZyYWdfYXJyYXlbTUFYX0JVRkZFUlNfUEVSX0NNRCArIDFdOworCXUzMiBmcmFnX2NvdW50OworfTsKKworLyogSW4gcnhfYnVmZmVyLCB3ZSBkbyBub3QgbmVlZCBtdWx0aXBsZSBmcmFnbWVudHMgYXMgaXMgYSBzaW5nbGUgYnVmZmVyICovCitzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBza19idWZmICpza2I7CisJdTY0IGRtYTsKKwl1MTYgcmVmX2hhbmRsZTsKKwl1MTYgc3RhdGU7Cit9OworCisvKiBCb2FyZCB0eXBlcyAqLworI2RlZmluZQlRTENOSUNfR0JFCTB4MDEKKyNkZWZpbmUJUUxDTklDX1hHQkUJMHgwMgorCisvKgorICogT25lIGhhcmR3YXJlX2NvbnRleHR7fSBwZXIgYWRhcHRlcgorICogY29udGFpbnMgaW50ZXJydXB0IGluZm8gYXMgd2VsbCBzaGFyZWQgaGFyZHdhcmUgaW5mby4KKyAqLworc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0IHsKKwl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMDsKKwl2b2lkIF9faW9tZW0gKm9jbV93aW5fY3JiOworCisJdW5zaWduZWQgbG9uZyBwY2lfbGVuMDsKKworCXUzMiBvY21fd2luOworCXUzMiBjcmJfd2luOworCisJcndsb2NrX3QgY3JiX2xvY2s7CisJc3RydWN0IG11dGV4IG1lbV9sb2NrOworCisJdTggY3V0X3Rocm91Z2g7CisJdTggcmV2aXNpb25faWQ7CisJdTggcGNpX2Z1bmM7CisJdTggbGlua3VwOworCXUxNiBwb3J0X3R5cGU7CisJdTE2IGJvYXJkX3R5cGU7Cit9OworCitzdHJ1Y3QgcWxjbmljX2FkYXB0ZXJfc3RhdHMgeworCXU2NCAgeG1pdGNhbGxlZDsKKwl1NjQgIHhtaXRmaW5pc2hlZDsKKwl1NjQgIHJ4ZHJvcHBlZDsKKwl1NjQgIHR4ZHJvcHBlZDsKKwl1NjQgIGNzdW1tZWQ7CisJdTY0ICByeF9wa3RzOworCXU2NCAgbHJvX3BrdHM7CisJdTY0ICByeGJ5dGVzOworCXU2NCAgdHhieXRlczsKK307CisKKy8qCisgKiBSY3YgRGVzY3JpcHRvciBDb250ZXh0LiBPbmUgc3VjaCBwZXIgUmN2IERlc2NyaXB0b3IuIFRoZXJlIG1heQorICogYmUgb25lIFJjdiBEZXNjcmlwdG9yIGZvciBub3JtYWwgcGFja2V0cywgb25lIGZvciBqdW1ibyBhbmQgbWF5IGJlIG90aGVycy4KKyAqLworc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nIHsKKwl1MzIgcHJvZHVjZXI7CisJdTMyIG51bV9kZXNjOworCXUzMiBkbWFfc2l6ZTsKKwl1MzIgc2tiX3NpemU7CisJdTMyIGZsYWdzOworCXZvaWQgX19pb21lbSAqY3JiX3Jjdl9wcm9kdWNlcjsKKwlzdHJ1Y3QgcmN2X2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhfYnVmX2FycjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzcGlubG9ja190IGxvY2s7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Cit9OworCitzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgeworCXUzMiBjb25zdW1lcjsKKwl1MzIgbnVtX2Rlc2M7CisJdm9pZCBfX2lvbWVtICpjcmJfc3RzX2NvbnN1bWVyOworCXZvaWQgX19pb21lbSAqY3JiX2ludHJfbWFzazsKKworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdFtOVU1fUkNWX0RFU0NfUklOR1NdOworCisJaW50IGlycTsKKworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWNoYXIgbmFtZVtJRk5BTVNJWis0XTsKK307CisKK3N0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nIHsKKwl1MzIgcHJvZHVjZXI7CisJX19sZTMyICpod19jb25zdW1lcjsKKwl1MzIgc3dfY29uc3VtZXI7CisJdm9pZCBfX2lvbWVtICpjcmJfY21kX3Byb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKKworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKworCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CisJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpkZXNjX2hlYWQ7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJZG1hX2FkZHJfdCBod19jb25zX3BoeXNfYWRkcjsKK307CisKKy8qCisgKiBSZWNlaXZlIGNvbnRleHQuIFRoZXJlIGlzIG9uZSBzdWNoIHN0cnVjdHVyZSBwZXIgaW5zdGFuY2Ugb2YgdGhlCisgKiByZWNlaXZlIHByb2Nlc3NpbmcuIEFueSBzdGF0ZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvCisgKiB0aGUgcmVjZWl2ZSwgYW5kIGlzIG11c3QgYmUgaW4gdGhpcyBzdHJ1Y3R1cmUuIFRoZSBnbG9iYWwgZGF0YSBtYXkgYmUKKyAqIHByZXNlbnQgZWxzZXdoZXJlLgorICovCitzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCB7CisJdTMyIHN0YXRlOworCXUxNiBjb250ZXh0X2lkOworCXUxNiB2aXJ0X3BvcnQ7CisKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nczsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nczsKK307CisKKy8qIEhXIGNvbnRleHQgY3JlYXRpb24gKi8KKworI2RlZmluZSBRTENOSUNfT1NfQ1JCX1JFVFJZX0NPVU5UCTQwMDAKKyNkZWZpbmUgUUxDTklDX0NEUlBfU0lHTkFUVVJFX01BS0UocGNpZm4sIHZlcnNpb24pIFwKKwkoKChwY2lmbikgJiAweGZmKSB8ICgoKHZlcnNpb24pICYgMHhmZikgPDwgOCkgfCAoMHhjYWZlIDw8IDE2KSkKKworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQklUCQkweDgwMDAwMDAwCisKKy8qCisgKiBBbGwgcmVzcG9uc2VzIG11c3QgaGF2ZSB0aGUgUUxDTklDX0NEUlBfQ01EX0JJVCBjbGVhcmVkCisgKiBpbiB0aGUgY3JiIFFMQ05JQ19DRFJQX0NSQl9PRkZTRVQuCisgKi8KKyNkZWZpbmUgUUxDTklDX0NEUlBfRk9STV9SU1AocnNwKQkocnNwKQorI2RlZmluZSBRTENOSUNfQ0RSUF9JU19SU1AocnNwKQkoKChyc3ApICYgUUxDTklDX0NEUlBfQ01EX0JJVCkgPT0gMCkKKworI2RlZmluZSBRTENOSUNfQ0RSUF9SU1BfT0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUUxDTklDX0NEUlBfUlNQX0ZBSUwJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUUxDTklDX0NEUlBfUlNQX1RJTUVPVVQgCTB4MDAwMDAwMDMKKworLyoKKyAqIEFsbCBjb21tYW5kcyBtdXN0IGhhdmUgdGhlIFFMQ05JQ19DRFJQX0NNRF9CSVQgc2V0IGluCisgKiB0aGUgY3JiIFFMQ05JQ19DRFJQX0NSQl9PRkZTRVQuCisgKi8KKyNkZWZpbmUgUUxDTklDX0NEUlBfRk9STV9DTUQoY21kKQkoUUxDTklDX0NEUlBfQ01EX0JJVCB8IChjbWQpKQorI2RlZmluZSBRTENOSUNfQ0RSUF9JU19DTUQoY21kKQkoKChjbWQpICYgUUxDTklDX0NEUlBfQ01EX0JJVCkgIT0gMCkKKworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU1VCTUlUX0NBUEFCSUxJVElFUyAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfUkRTX1BFUl9DVFggICAgMHgwMDAwMDAwMgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfU0RTX1BFUl9DVFggICAgMHgwMDAwMDAwMworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfUlVMRVNfUEVSX0NUWCAgMHgwMDAwMDAwNAorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfUlhfQ1RYICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfVFhfQ1RYICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQ1JFQVRFX1JYX0NUWCAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfREVTVFJPWV9SWF9DVFggICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQ1JFQVRFX1RYX0NUWCAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfREVTVFJPWV9UWF9DVFggICAgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU0VUVVBfU1RBVElTVElDUyAgICAgICAgMHgwMDAwMDAwZQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX1NUQVRJU1RJQ1MgICAgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfREVMRVRFX1NUQVRJU1RJQ1MgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU0VUX01UVSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9QSFkJCTB4MDAwMDAwMTMKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1dSSVRFX1BIWQkJMHgwMDAwMDAxNAorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9IV19SRUcJCTB4MDAwMDAwMTUKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9GTE9XX0NUTAkJMHgwMDAwMDAxNgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU0VUX0ZMT1dfQ1RMCQkweDAwMDAwMDE3CisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX01BWF9NVFUJCTB4MDAwMDAwMTgKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xSTwkJMHgwMDAwMDAxOQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQ09ORklHVVJFX1RPRQkJMHgwMDAwMDAxYQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfRlVOQ19BVFRSSUIJCTB4MDAwMDAwMWIKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfUEVYUV9QQVJBTUVURVJTCTB4MDAwMDAwMWMKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9MSUNfQ0FQQUJJTElUSUVTCTB4MDAwMDAwMWQKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xST19QRVJfQk9BUkQJMHgwMDAwMDAxZQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfTUFYCQkJMHgwMDAwMDAxZgorCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9TVUNDRVNTCQkwCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9USU1FT1VUCQkxNworI2RlZmluZSBRTENOSUNfREVTVFJPWV9DVFhfUkVTRVQJMAorCisvKgorICogQ2FwYWJpbGl0aWVzIEFubm91bmNlZAorICovCisjZGVmaW5lIFFMQ05JQ19DQVAwX0xFR0FDWV9DT05URVhUCSgxKQorI2RlZmluZSBRTENOSUNfQ0FQMF9MRUdBQ1lfTU4JCSgxIDw8IDIpCisjZGVmaW5lIFFMQ05JQ19DQVAwX0xTTyAJCSgxIDw8IDYpCisjZGVmaW5lIFFMQ05JQ19DQVAwX0pVTUJPX0NPTlRJR1VPVVMJKDEgPDwgNykKKyNkZWZpbmUgUUxDTklDX0NBUDBfTFJPX0NPTlRJR1VPVVMJKDEgPDwgOCkKKworLyoKKyAqIENvbnRleHQgc3RhdGUKKyAqLworI2RlZmluZSBRTENIQUxfVkVSU0lPTgkxCisKKyNkZWZpbmUgUUxDTklDX0hPU1RfQ1RYX1NUQVRFX0FDVElWRQkyCisKKy8qCisgKiBSeCBjb250ZXh0CisgKi8KKworc3RydWN0IHFsY25pY19ob3N0cnFfc2RzX3JpbmcgeworCV9fbGU2NCBob3N0X3BoeXNfYWRkcjsJLyogUmluZyBiYXNlIGFkZHIgKi8KKwlfX2xlMzIgcmluZ19zaXplOwkJLyogUmluZyBlbnRyaWVzICovCisJX19sZTE2IG1zaV9pbmRleDsKKwlfX2xlMTYgcnN2ZDsJCS8qIFBhZGRpbmcgKi8KK307CisKK3N0cnVjdCBxbGNuaWNfaG9zdHJxX3Jkc19yaW5nIHsKKwlfX2xlNjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCisJX19sZTY0IGJ1ZmZfc2l6ZTsJCS8qIFBhY2tldCBidWZmZXIgc2l6ZSAqLworCV9fbGUzMiByaW5nX3NpemU7CQkvKiBSaW5nIGVudHJpZXMgKi8KKwlfX2xlMzIgcmluZ19raW5kOwkJLyogQ2xhc3Mgb2YgcmluZyAqLworfTsKKworc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4IHsKKwlfX2xlNjQgaG9zdF9yc3BfZG1hX2FkZHI7CS8qIFJlc3BvbnNlIGRtYSdkIGhlcmUgKi8KKwlfX2xlMzIgY2FwYWJpbGl0aWVzWzRdOwkvKiBGbGFnIGJpdCB2ZWN0b3IgKi8KKwlfX2xlMzIgaG9zdF9pbnRfY3JiX21vZGU7CS8qIEludGVycnVwdCBjcmIgdXNhZ2UgKi8KKwlfX2xlMzIgaG9zdF9yZHNfY3JiX21vZGU7CS8qIFJEUyBjcmIgdXNhZ2UgKi8KKwkvKiBUaGVzZSByaW5nIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIGRhdGFbMF0gYmVsb3cgKi8KKwlfX2xlMzIgcmRzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gUkRTIGNvbmZpZyAqLworCV9fbGUzMiBzZHNfcmluZ19vZmZzZXQ7CS8qIE9mZnNldCB0byBTRFMgY29uZmlnICovCisJX19sZTE2IG51bV9yZHNfcmluZ3M7CS8qIENvdW50IG9mIFJEUyByaW5ncyAqLworCV9fbGUxNiBudW1fc2RzX3JpbmdzOwkvKiBDb3VudCBvZiBTRFMgcmluZ3MgKi8KKwlfX2xlMTYgcnN2ZDE7CQkvKiBQYWRkaW5nICovCisJX19sZTE2IHJzdmQyOwkJLyogUGFkZGluZyAqLworCXU4ICByZXNlcnZlZFsxMjhdOyAJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiovCisJLyogTVVTVCBCRSA2NC1iaXQgYWxpZ25lZC4KKwkgICBUaGUgZm9sbG93aW5nIGlzIHBhY2tlZDoKKwkgICAtIE4gaG9zdHJxX3Jkc19yaW5ncworCSAgIC0gTiBob3N0cnFfc2RzX3JpbmdzICovCisJY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IHFsY25pY19jYXJkcnNwX3Jkc19yaW5neworCV9fbGUzMiBob3N0X3Byb2R1Y2VyX2NyYjsJLyogQ3JiIHRvIHVzZSAqLworCV9fbGUzMiByc3ZkMTsJCS8qIFBhZGRpbmcgKi8KK307CisKK3N0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyB7CisJX19sZTMyIGhvc3RfY29uc3VtZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCisJX19sZTMyIGludGVycnVwdF9jcmI7CS8qIENyYiB0byB1c2UgKi8KK307CisKK3N0cnVjdCBxbGNuaWNfY2FyZHJzcF9yeF9jdHggeworCS8qIFRoZXNlIHJpbmcgb2Zmc2V0cyBhcmUgcmVsYXRpdmUgdG8gZGF0YVswXSBiZWxvdyAqLworCV9fbGUzMiByZHNfcmluZ19vZmZzZXQ7CS8qIE9mZnNldCB0byBSRFMgY29uZmlnICovCisJX19sZTMyIHNkc19yaW5nX29mZnNldDsJLyogT2Zmc2V0IHRvIFNEUyBjb25maWcgKi8KKwlfX2xlMzIgaG9zdF9jdHhfc3RhdGU7CS8qIFN0YXJ0aW5nIFN0YXRlICovCisJX19sZTMyIG51bV9mbl9wZXJfcG9ydDsJLyogSG93IG1hbnkgUENJIGZuIHNoYXJlIHRoZSBwb3J0ICovCisJX19sZTE2IG51bV9yZHNfcmluZ3M7CS8qIENvdW50IG9mIFJEUyByaW5ncyAqLworCV9fbGUxNiBudW1fc2RzX3JpbmdzOwkvKiBDb3VudCBvZiBTRFMgcmluZ3MgKi8KKwlfX2xlMTYgY29udGV4dF9pZDsJCS8qIEhhbmRsZSBmb3IgY29udGV4dCAqLworCXU4ICBwaHlzX3BvcnQ7CQkvKiBQaHlzaWNhbCBpZCBvZiBwb3J0ICovCisJdTggIHZpcnRfcG9ydDsJCS8qIFZpcnR1YWwvTG9naWNhbCBpZCBvZiBwb3J0ICovCisJdTggIHJlc2VydmVkWzEyOF07CS8qIHNhdmUgc3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwkvKiAgTVVTVCBCRSA2NC1iaXQgYWxpZ25lZC4KKwkgICBUaGUgZm9sbG93aW5nIGlzIHBhY2tlZDoKKwkgICAtIE4gY2FyZHJzcF9yZHNfcmluZ3MKKwkgICAtIE4gY2FyZHJzX3Nkc19yaW5ncyAqLworCWNoYXIgZGF0YVswXTsKK307CisKKyNkZWZpbmUgU0laRU9GX0hPU1RSUV9SWChIT1NUUlFfUlgsIHJkc19yaW5ncywgc2RzX3JpbmdzKQlcCisJKHNpemVvZihIT1NUUlFfUlgpICsgCQkJCQlcCisJKHJkc19yaW5ncykqKHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RycV9yZHNfcmluZykpICsJCVwKKwkoc2RzX3JpbmdzKSooc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3Nkc19yaW5nKSkpCisKKyNkZWZpbmUgU0laRU9GX0NBUkRSU1BfUlgoQ0FSRFJTUF9SWCwgcmRzX3JpbmdzLCBzZHNfcmluZ3MpIAlcCisJKHNpemVvZihDQVJEUlNQX1JYKSArIAkJCQkJXAorCShyZHNfcmluZ3MpKihzaXplb2Yoc3RydWN0IHFsY25pY19jYXJkcnNwX3Jkc19yaW5nKSkgKyAJCVwKKwkoc2RzX3JpbmdzKSooc2l6ZW9mKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZykpKQorCisvKgorICogVHggY29udGV4dAorICovCisKK3N0cnVjdCBxbGNuaWNfaG9zdHJxX2Nkc19yaW5nIHsKKwlfX2xlNjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCisJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLworCV9fbGUzMiByc3ZkOwkJLyogUGFkZGluZyAqLworfTsKKworc3RydWN0IHFsY25pY19ob3N0cnFfdHhfY3R4IHsKKwlfX2xlNjQgaG9zdF9yc3BfZG1hX2FkZHI7CS8qIFJlc3BvbnNlIGRtYSdkIGhlcmUgKi8KKwlfX2xlNjQgY21kX2NvbnNfZG1hX2FkZHI7CS8qICAqLworCV9fbGU2NCBkdW1teV9kbWFfYWRkcjsJLyogICovCisJX19sZTMyIGNhcGFiaWxpdGllc1s0XTsJLyogRmxhZyBiaXQgdmVjdG9yICovCisJX19sZTMyIGhvc3RfaW50X2NyYl9tb2RlOwkvKiBJbnRlcnJ1cHQgY3JiIHVzYWdlICovCisJX19sZTMyIHJzdmQxOwkJLyogUGFkZGluZyAqLworCV9fbGUxNiByc3ZkMjsJCS8qIFBhZGRpbmcgKi8KKwlfX2xlMTYgaW50ZXJydXB0X2N0bDsKKwlfX2xlMTYgbXNpX2luZGV4OworCV9fbGUxNiByc3ZkMzsJCS8qIFBhZGRpbmcgKi8KKwlzdHJ1Y3QgcWxjbmljX2hvc3RycV9jZHNfcmluZyBjZHNfcmluZzsJLyogRGVzYyBvZiBjZHMgcmluZyAqLworCXU4ICByZXNlcnZlZFsxMjhdOwkvKiBmdXR1cmUgZXhwYW5zaW9uICovCit9OworCitzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfY2RzX3JpbmcgeworCV9fbGUzMiBob3N0X3Byb2R1Y2VyX2NyYjsJLyogQ3JiIHRvIHVzZSAqLworCV9fbGUzMiBpbnRlcnJ1cHRfY3JiOwkvKiBDcmIgdG8gdXNlICovCit9OworCitzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4IHsKKwlfX2xlMzIgaG9zdF9jdHhfc3RhdGU7CS8qIFN0YXJ0aW5nIHN0YXRlICovCisJX19sZTE2IGNvbnRleHRfaWQ7CQkvKiBIYW5kbGUgZm9yIGNvbnRleHQgKi8KKwl1OCAgcGh5c19wb3J0OwkJLyogUGh5c2ljYWwgaWQgb2YgcG9ydCAqLworCXU4ICB2aXJ0X3BvcnQ7CQkvKiBWaXJ0dWFsL0xvZ2ljYWwgaWQgb2YgcG9ydCAqLworCXN0cnVjdCBxbGNuaWNfY2FyZHJzcF9jZHNfcmluZyBjZHNfcmluZzsJLyogQ2FyZCBjZHMgc2V0dGluZ3MgKi8KKwl1OCAgcmVzZXJ2ZWRbMTI4XTsJLyogZnV0dXJlIGV4cGFuc2lvbiAqLworfTsKKworI2RlZmluZSBTSVpFT0ZfSE9TVFJRX1RYKEhPU1RSUV9UWCkJKHNpemVvZihIT1NUUlFfVFgpKQorI2RlZmluZSBTSVpFT0ZfQ0FSRFJTUF9UWChDQVJEUlNQX1RYKQkoc2l6ZW9mKENBUkRSU1BfVFgpKQorCisvKiBDUkIgKi8KKworI2RlZmluZSBRTENOSUNfSE9TVF9SRFNfQ1JCX01PREVfVU5JUVVFCTAKKyNkZWZpbmUgUUxDTklDX0hPU1RfUkRTX0NSQl9NT0RFX1NIQVJFRAkxCisjZGVmaW5lIFFMQ05JQ19IT1NUX1JEU19DUkJfTU9ERV9DVVNUT00JMgorI2RlZmluZSBRTENOSUNfSE9TVF9SRFNfQ1JCX01PREVfTUFYCTMKKworI2RlZmluZSBRTENOSUNfSE9TVF9JTlRfQ1JCX01PREVfVU5JUVVFCTAKKyNkZWZpbmUgUUxDTklDX0hPU1RfSU5UX0NSQl9NT0RFX1NIQVJFRAkxCisjZGVmaW5lIFFMQ05JQ19IT1NUX0lOVF9DUkJfTU9ERV9OT1JYCTIKKyNkZWZpbmUgUUxDTklDX0hPU1RfSU5UX0NSQl9NT0RFX05PVFgJMworI2RlZmluZSBRTENOSUNfSE9TVF9JTlRfQ1JCX01PREVfTk9SWFRYCTQKKworCisvKiBNQUMgKi8KKworI2RlZmluZSBNQ19DT1VOVF9QMwkzOAorCisjZGVmaW5lIFFMQ05JQ19NQUNfTk9PUAkwCisjZGVmaW5lIFFMQ05JQ19NQUNfQURECTEKKyNkZWZpbmUgUUxDTklDX01BQ19ERUwJMgorCitzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1aW50OF90IG1hY19hZGRyW0VUSF9BTEVOKzJdOworfTsKKworLyoKKyAqIEludGVycnVwdCBjb2FsZXNjaW5nIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlIGZvciAxNTAwIE1UVS4gSXQgaXMKKyAqIGFkanVzdGVkIGJhc2VkIG9uIGNvbmZpZ3VyZWQgTVRVLgorICovCisjZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfVElNRV9VUwkzCisjZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUwkyNTYKKyNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9QQUNLRVRTCTY0CisjZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUwk0CisKKyNkZWZpbmUgUUxDTklDX0lOVFJfREVGQVVMVAkJCTB4MDQKKwordW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEgeworCXN0cnVjdCB7CisJCXUxNglyeF9wYWNrZXRzOworCQl1MTYJcnhfdGltZV91czsKKwkJdTE2CXR4X3BhY2tldHM7CisJCXUxNgl0eF90aW1lX3VzOworCX0gZGF0YTsKKwl1NjQJCXdvcmQ7Cit9OworCitzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIHsKKwl1MTYJCXN0YXRzX3RpbWVfdXM7CisJdTE2CQlyYXRlX3NhbXBsZV90aW1lOworCXUxNgkJZmxhZ3M7CisJdTE2CQlyc3ZkXzE7CisJdTMyCQlsb3dfdGhyZXNob2xkOworCXUzMgkJaGlnaF90aHJlc2hvbGQ7CisJdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEJbm9ybWFsOworCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWxvdzsKKwl1bmlvbiBxbGNuaWNfbmljX2ludHJfY29hbGVzY2VfZGF0YQloaWdoOworCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWlycTsKK307CisKKyNkZWZpbmUgUUxDTklDX0hPU1RfUkVRVUVTVAkweDEzCisjZGVmaW5lIFFMQ05JQ19SRVFVRVNUCQkweDE0CisKKyNkZWZpbmUgUUxDTklDX01BQ19FVkVOVAkweDEKKworI2RlZmluZSBRTENOSUNfSVBfVVAJCTIKKyNkZWZpbmUgUUxDTklDX0lQX0RPV04JCTMKKworLyoKKyAqIERyaXZlciAtLT4gRmlybXdhcmUKKyAqLworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9TVEFSVCAJCQkwCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19SU1MJCQkxCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19SU1NfVEJMCQkyCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19JTlRSX0NPQUxFU0NFCQkzCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MRUQJCQk0CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19QUk9NSVNDVU9VUwkJNQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfTDJfTUFDIAkJNgorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9MUk9fUkVRVUVTVAkJCTcKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX1NOTVBfU1RBVFMJCTgKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU1RBUlRfUkVRVUVTVAkJOQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TVE9QX1JFUVVFU1QJCTEwCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NFVF9NVFUgCQkxMQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TRVRfVlBPUlRfTUlTU19NT0RFCTEyCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9GSU5HRVJfUFJJTlRfUkVRVUVTVAkxMworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9JTlNUQUxMX0xJQ0VOU0VfUkVRVUVTVAkxNAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfTElDRU5TRV9DQVBBQklMSVRZX1JFUVVFU1QJMTUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX05FVF9TVEFUUyAJCTE2CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1VQREFURV9QMlYJCTE3CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19JUEFERFIgCQkxOAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfTE9PUEJBQ0sJCTE5CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfRE9ORQkJMjAKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0xJTktFVkVOVCAJCTIxCisjZGVmaW5lIFFMQ05JQ19DMkNfT1BDT0RFCQkJCTIyCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORwkJMjMKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTyAJCTI0CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0xBU1QJCQkJMjUKKy8qCisgKiBGaXJtd2FyZSAtLT4gRHJpdmVyCisgKi8KKworI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9TVEFSVCAJCQkxMjgKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1JTU19SRVNQT05TRQkJMTI5CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0NPTkZJR19SU1NfVEJMX1JFU1BPTlNFCTEzMAorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTUFDX1JFU1BPTlNFCQkxMzEKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1BST01JU0NVT1VTX1JFU1BPTlNFCTEzMgorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTDJfTUFDX1JFU1BPTlNFCTEzMworI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9MUk9fREVMRVRFX1JFU1BPTlNFCQkxMzQKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTFJPX0FERF9GQUlMVVJFX1JFU1BPTlNFCTEzNQorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfU05NUF9TVEFUUwkJMTM2CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9GSU5HRVJfUFJJTlRfUkVQTFkJMTM3CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0lOU1RBTExfTElDRU5TRV9SRVBMWSAJMTM4CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9MSUNFTlNFX0NBUEFCSUxJVElFU19SRVBMWSAxMzkKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX05FVF9TVEFUU19SRVNQT05TRQkxNDAKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX0xJTktFVkVOVF9SRVNQT05TRQkxNDEKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTEFTVAkJCQkxNDIKKworI2RlZmluZSBWUE9SVF9NSVNTX01PREVfRFJPUAkJMCAvKiBkcm9wIGFsbCB1bm1hdGNoZWQgKi8KKyNkZWZpbmUgVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEwJMSAvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KKyNkZWZpbmUgVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9NVUxUSQkyIC8qIGFjY2VwdCB1bm1hdGNoZWQgbXVsdGljYXN0ICovCisKKyNkZWZpbmUgUUxDTklDX0xST19SRVFVRVNUX0NMRUFOVVAJNAorCisvKiBDYXBhYmlsaXRlcyByZWNlaXZlZCAqLworI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9CREcJCSgxIDw8IDgpCisjZGVmaW5lIFFMQ05JQ19GV19DQVBBQklMSVRZX0ZWTEFOVFgJCSgxIDw8IDkpCisjZGVmaW5lIFFMQ05JQ19GV19DQVBBQklMSVRZX0hXX0xSTwkJKDEgPDwgMTApCisKKy8qIG1vZHVsZSB0eXBlcyAqLworI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX05PVF9QUkVTRU5UCQkJMQorI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX09QVElDQUxfVU5LTk9XTgkJMgorI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX09QVElDQUxfU1JMUgkJCTMKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX0xSTQkJCTQKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1NGUF8xRyAJCTUKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9UV0lOQVhfVU5TVVBQT1JURURfQ0FCTEUJNgorI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWF9VTlNVUFBPUlRFRF9DQUJMRUxFTgk3CisjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfVFdJTkFYIAkJCTgKKworI2RlZmluZSBMSU5LU1BFRURfMTBHQlBTCTEwMDAwCisjZGVmaW5lIExJTktTUEVFRF8xR0JQUyAJMTAwMAorI2RlZmluZSBMSU5LU1BFRURfMTAwTUJQUwkxMDAKKyNkZWZpbmUgTElOS1NQRUVEXzEwTUJQUwkxMAorCisjZGVmaW5lIExJTktTUEVFRF9FTkNPREVEXzEwTUJQUwkwCisjZGVmaW5lIExJTktTUEVFRF9FTkNPREVEXzEwME1CUFMJMQorI2RlZmluZSBMSU5LU1BFRURfRU5DT0RFRF8xR0JQUyAJMgorCisjZGVmaW5lIExJTktFVkVOVF9BVVRPTkVHX0RJU0FCTEVECTAKKyNkZWZpbmUgTElOS0VWRU5UX0FVVE9ORUdfRU5BQkxFRAkxCisKKyNkZWZpbmUgTElOS0VWRU5UX0hBTEZfRFVQTEVYCQkwCisjZGVmaW5lIExJTktFVkVOVF9GVUxMX0RVUExFWAkJMQorCisjZGVmaW5lIExJTktFVkVOVF9MSU5LU1BFRURfTUJQUwkwCisjZGVmaW5lIExJTktFVkVOVF9MSU5LU1BFRURfRU5DT0RFRAkxCisKKyNkZWZpbmUgQVVUT19GV19SRVNFVF9FTkFCTEVECTB4MDEKKy8qIGZpcm13YXJlIHJlc3BvbnNlIGhlYWRlcjoKKyAqCTYzOjU4IC0gbWVzc2FnZSB0eXBlCisgKgk1Nzo1NiAtIG93bmVyCisgKgk1NTo1MyAtIGRlc2MgY291bnQKKyAqCTUyOjQ4IC0gcmVzZXJ2ZWQKKyAqCTQ3OjQwIC0gY29tcGxldGlvbiBpZAorICoJMzk6MzIgLSBvcGNvZGUKKyAqCTMxOjE2IC0gZXJyb3IgY29kZQorICoJMTU6MDAgLSByZXNlcnZlZAorICovCisjZGVmaW5lIHFsY25pY19nZXRfbmljX21zZ19vcGNvZGUobXNnX2hkcikJXAorCSgobXNnX2hkciA+PiAzMikgJiAweEZGKQorCitzdHJ1Y3QgcWxjbmljX2Z3X21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTY0IGhkcjsKKwkJCXU2NCBib2R5WzddOworCQl9OworCQl1NjQgd29yZHNbOF07CisJfTsKK307CisKK3N0cnVjdCBxbGNuaWNfbmljX3JlcSB7CisJX19sZTY0IHFoZHI7CisJX19sZTY0IHJlcV9oZHI7CisJX19sZTY0IHdvcmRzWzZdOworfTsKKworc3RydWN0IHFsY25pY19tYWNfcmVxIHsKKwl1OCBvcDsKKwl1OCB0YWc7CisJdTggbWFjX2FkZHJbNl07Cit9OworCisjZGVmaW5lIFFMQ05JQ19NU0lfRU5BQkxFRAkJMHgwMgorI2RlZmluZSBRTENOSUNfTVNJWF9FTkFCTEVECQkweDA0CisjZGVmaW5lIFFMQ05JQ19MUk9fRU5BQkxFRAkJMHgwOAorI2RlZmluZSBRTENOSUNfQlJJREdFX0VOQUJMRUQgICAgICAgCTBYMTAKKyNkZWZpbmUgUUxDTklDX0RJQUdfRU5BQkxFRAkJMHgyMAorI2RlZmluZSBRTENOSUNfSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSBcCisJKChhZGFwdGVyKS0+ZmxhZ3MgJiAoUUxDTklDX01TSV9FTkFCTEVEIHwgUUxDTklDX01TSVhfRU5BQkxFRCkpCisKKyNkZWZpbmUgTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSCU5VTV9TVFNfREVTQ19SSU5HUworI2RlZmluZSBRTENOSUNfTVNJWF9UQkxfU1BBQ0UJCTgxOTIKKyNkZWZpbmUgUUxDTklDX1BDSV9SRUdfTVNJWF9UQkwgCTB4NDQKKworI2RlZmluZSBRTENOSUNfTkVUREVWX1dFSUdIVAkxMjgKKyNkZWZpbmUgUUxDTklDX0FEQVBURVJfVVBfTUFHSUMgNzc3CisKKyNkZWZpbmUgX19RTENOSUNfRldfQVRUQUNIRUQJCTAKKyNkZWZpbmUgX19RTENOSUNfREVWX1VQIAkJMQorI2RlZmluZSBfX1FMQ05JQ19SRVNFVFRJTkcJCTIKKyNkZWZpbmUgX19RTENOSUNfU1RBUlRfRlcgCQk0CisKKyNkZWZpbmUgUUxDTklDX0lOVEVSUlVQVF9URVNUCQkxCisjZGVmaW5lIFFMQ05JQ19MT09QQkFDS19URVNUCQkyCisKK3N0cnVjdCBxbGNuaWNfYWRhcHRlciB7CisJc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0IGFodzsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBtYWNfbGlzdDsKKworCXNwaW5sb2NrX3QgdHhfY2xlYW5fbG9jazsKKworCXUxNiBudW1fdHhkOworCXUxNiBudW1fcnhkOworCXUxNiBudW1fanVtYm9fcnhkOworCXUxNiBudW1fbHJvX3J4ZDsKKworCXU4IG1heF9yZHNfcmluZ3M7CisJdTggbWF4X3Nkc19yaW5nczsKKwl1OCBkcml2ZXJfbWlzbWF0Y2g7CisJdTggbXNpeF9zdXBwb3J0ZWQ7CisJdTggcnhfY3N1bTsKKwl1OCBwY2lfdXNpbmdfZGFjOworCXU4IHBvcnRudW07CisJdTggcGh5c2ljYWxfcG9ydDsKKworCXU4IG1jX2VuYWJsZWQ7CisJdTggbWF4X21jX2NvdW50OworCXU4IHJzc19zdXBwb3J0ZWQ7CisJdTggcnNydmQxOworCXU4IGZ3X3dhaXRfY250OworCXU4IGZ3X2ZhaWxfY250OworCXU4IHR4X3RpbWVvX2NudDsKKwl1OCBuZWVkX2Z3X3Jlc2V0OworCisJdTggaGFzX2xpbmtfZXZlbnRzOworCXU4IGZ3X3R5cGU7CisJdTE2IHR4X2NvbnRleHRfaWQ7CisJdTE2IG10dTsKKwl1MTYgaXNfdXA7CisKKwl1MTYgbGlua19zcGVlZDsKKwl1MTYgbGlua19kdXBsZXg7CisJdTE2IGxpbmtfYXV0b25lZzsKKwl1MTYgbW9kdWxlX3R5cGU7CisKKwl1MzIgY2FwYWJpbGl0aWVzOworCXUzMiBmbGFnczsKKwl1MzIgaXJxOworCXUzMiB0ZW1wOworCisJdTMyIGludF92ZWNfYml0OworCXUzMiBoZWFydGJpdDsKKworCXU4IGRldl9zdGF0ZTsKKwl1OCBkaWFnX3Rlc3Q7CisJdTggZGlhZ19jbnQ7CisJdTggcnNyZDE7CisJdTE2IHJzcmQyOworCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCisJc3RydWN0IHFsY25pY19hZGFwdGVyX3N0YXRzIHN0YXRzOworCisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgcmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CisKKwl2b2lkIF9faW9tZW0JKnRndF9tYXNrX3JlZzsKKwl2b2lkIF9faW9tZW0JKnRndF9zdGF0dXNfcmVnOworCXZvaWQgX19pb21lbQkqY3JiX2ludF9zdGF0ZV9yZWc7CisJdm9pZCBfX2lvbWVtCSppc3JfaW50X3ZlYzsKKworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVJdOworCisJc3RydWN0IGRlbGF5ZWRfd29yayBmd193b3JrOworCisJc3RydWN0IHdvcmtfc3RydWN0ICB0eF90aW1lb3V0X3Rhc2s7CisKKwlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CisKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCV9fbGUzMiBmaWxlX3ByZF9vZmY7CS8qRmlsZSBmdyBwcm9kdWN0IG9mZnNldCovCisJdTMyIGZ3X3ZlcnNpb247CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKK307CisKK2ludCBxbGNuaWNfZndfY21kX3F1ZXJ5X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiAqdmFsKTsKK2ludCBxbGNuaWNfZndfY21kX3NldF9waHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgdmFsKTsKKwordTMyIHFsY25pY19od19yZWFkX3d4XzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmKTsKK2ludCBxbGNuaWNfaHdfd3JpdGVfd3hfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICosIHVsb25nIG9mZiwgdTMyIGRhdGEpOworaW50IHFsY25pY19wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1NjQgb2ZmLCB1NjQgZGF0YSk7CitpbnQgcWxjbmljX3BjaV9tZW1fcmVhZF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTY0IG9mZiwgdTY0ICpkYXRhKTsKKworI2RlZmluZSBRTENSRDMyKGFkYXB0ZXIsIG9mZikgXAorCShxbGNuaWNfaHdfcmVhZF93eF8yTShhZGFwdGVyLCBvZmYpKQorI2RlZmluZSBRTENXUjMyKGFkYXB0ZXIsIG9mZiwgdmFsKSBcCisJKHFsY25pY19od193cml0ZV93eF8yTShhZGFwdGVyLCBvZmYsIHZhbCkpCisKK2ludCBxbGNuaWNfcGNpZV9zZW1fbG9jayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgaW50LCB1MzIpOwordm9pZCBxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCBpbnQpOworCisjZGVmaW5lIHFsY25pY19yb21fbG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX2xvY2soKGEpLCAyLCBRTENOSUNfUk9NX0xPQ0tfSUQpCisjZGVmaW5lIHFsY25pY19yb21fdW5sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKChhKSwgMikKKyNkZWZpbmUgcWxjbmljX3BoeV9sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fbG9jaygoYSksIDMsIFFMQ05JQ19QSFlfTE9DS19JRCkKKyNkZWZpbmUgcWxjbmljX3BoeV91bmxvY2soYSkJXAorCXFsY25pY19wY2llX3NlbV91bmxvY2soKGEpLCAzKQorI2RlZmluZSBxbGNuaWNfYXBpX2xvY2soYSkJXAorCXFsY25pY19wY2llX3NlbV9sb2NrKChhKSwgNSwgMCkKKyNkZWZpbmUgcWxjbmljX2FwaV91bmxvY2soYSkJXAorCXFsY25pY19wY2llX3NlbV91bmxvY2soKGEpLCA1KQorI2RlZmluZSBxbGNuaWNfc3dfbG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX2xvY2soKGEpLCA2LCAwKQorI2RlZmluZSBxbGNuaWNfc3dfdW5sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKChhKSwgNikKKyNkZWZpbmUgY3JiX3dpbl9sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fbG9jaygoYSksIDcsIFFMQ05JQ19DUkJfV0lOX0xPQ0tfSUQpCisjZGVmaW5lIGNyYl93aW5fdW5sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKChhKSwgNykKKworaW50IHFsY25pY19nZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY193b2xfc3VwcG9ydGVkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX2NvbmZpZ19sZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgc3RhdGUsIHUzMiByYXRlKTsKKworLyogRnVuY3Rpb25zIGZyb20gcWxjbmljX2luaXQuYyAqLworaW50IHFsY25pY19waGFudG9tX2luaXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK2ludCBxbGNuaWNfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19uZWVkX2Z3X3Jlc2V0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHFsY25pY19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHFsY25pY19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgKnZhbHApOworaW50IHFsY25pY19yb21fZmFzdF9yZWFkX3dvcmRzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsCisJCQkJdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSk7CitpbnQgcWxjbmljX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfZnJlZV9zd19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBfX2lvbWVtICpxbGNuaWNfZ2V0X2lvYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTMyKTsKKworaW50IHFsY25pY19hbGxvY19od19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgcWxjbmljX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgcWxjbmljX3JlbGVhc2VfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfcmVsZWFzZV90eF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBxbGNuaWNfaW5pdF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBxbGNuaWNfcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJpbmdpZCwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZyk7CitpbnQgcWxjbmljX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZywgaW50IG1heCk7Cit2b2lkIHFsY25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIHFsY25pY19mcmVlX21hY19saXN0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CitpbnQgcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX2NvbmZpZ19yc3Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKK2ludCBxbGNuaWNfY29uZmlnX2lwYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpcCwgaW50IGNtZCk7CitpbnQgcWxjbmljX2xpbmtldmVudF9yZXF1ZXN0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7Cit2b2lkIHFsY25pY19hZHZlcnRfbGlua19jaGFuZ2Uoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgbGlua3VwKTsKKworaW50IHFsY25pY19md19jbWRfc2V0X210dShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpOworaW50IHFsY25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK2ludCBxbGNuaWNfY29uZmlnX2h3X2xybyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOworaW50IHFsY25pY19jb25maWdfYnJpZGdlZF9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CitpbnQgcWxjbmljX3NlbmRfbHJvX2NsZWFudXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgcWxjbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZyk7CitpbnQgcWxjbmljX2dldF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqbWFjKTsKK3ZvaWQgcWxjbmljX2NsZWFyX2lsYl9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX3NldF9pbGJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBGdW5jdGlvbnMgZnJvbSBxbGNuaWNfbWFpbi5jICovCitpbnQgcWxjbmljX3Jlc2V0X2NvbnRleHQoc3RydWN0IHFsY25pY19hZGFwdGVyICopOwordTMyIHFsY25pY19pc3N1ZV9jbWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCXUzMiBwY2lfZm4sIHUzMiB2ZXJzaW9uLCB1MzIgYXJnMSwgdTMyIGFyZzIsIHUzMiBhcmczLCB1MzIgY21kKTsKK3ZvaWQgcWxjbmljX2RpYWdfZnJlZV9yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG1heF9zZHNfcmluZ3MpOworaW50IHFsY25pY19kaWFnX2FsbG9jX3JlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdGVzdCk7CitpbnQgcWxjbmljX2NoZWNrX2xvb3BiYWNrX2J1ZmYodW5zaWduZWQgY2hhciAqZGF0YSk7CituZXRkZXZfdHhfdCBxbGNuaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgcWxjbmljX3Byb2Nlc3NfcmN2X3JpbmdfZGlhZyhzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKTsKKworLyoKKyAqIFFMT0dJQyBCb2FyZCBpbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgUUxDTklDX01BWF9CT0FSRF9OQU1FX0xFTiAxMDAKK3N0cnVjdCBxbGNuaWNfYnJkaW5mbyB7CisJdW5zaWduZWQgc2hvcnQgIHZlbmRvcjsKKwl1bnNpZ25lZCBzaG9ydCAgZGV2aWNlOworCXVuc2lnbmVkIHNob3J0ICBzdWJfdmVuZG9yOworCXVuc2lnbmVkIHNob3J0ICBzdWJfZGV2aWNlOworCWNoYXIgc2hvcnRfbmFtZVtRTENOSUNfTUFYX0JPQVJEX05BTUVfTEVOXTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcWxjbmljX2JyZGluZm8gcWxjbmljX2JvYXJkc1tdID0geworCXsweDEwNzcsIDB4ODAyMCwgMHgxMDc3LCAweDIwMywKKwkJIjgyMDAgU2VyaWVzIFNpbmdsZSBQb3J0IDEwR2JFIENvbnZlcmdlZCBOZXR3b3JrIEFkYXB0ZXIgXAorCQkoVENQL0lQIE5ldHdvcmtpbmcpIn0sCisJezB4MTA3NywgMHg4MDIwLCAweDEwNzcsIDB4MjA3LAorCQkiODIwMCBTZXJpZXMgRHVhbCBQb3J0IDEwR2JFIENvbnZlcmdlZCBOZXR3b3JrIEFkYXB0ZXIgXAorCQkoVENQL0lQIE5ldHdvcmtpbmcpIn0sCisJezB4MTA3NywgMHg4MDIwLCAweDEwNzcsIDB4MjBiLAorCQkiMzIwMCBTZXJpZXMgRHVhbCBQb3J0IDEwR2IgSW50ZWxsaWdlbnQgRXRoZXJuZXQgQWRhcHRlciJ9LAorCXsweDEwNzcsIDB4ODAyMCwgMHgxMDc3LCAweDIwYywKKwkJIjMyMDAgU2VyaWVzIFF1YWQgUG9ydCAxR2IgSW50ZWxsaWdlbnQgRXRoZXJuZXQgQWRhcHRlciJ9LAorCXsweDEwNzcsIDB4ODAyMCwgMHgxMDc3LCAweDIwZiwKKwkJIjMyMDAgU2VyaWVzIFNpbmdsZSBQb3J0IDEwR2IgSW50ZWxsaWdlbnQgRXRoZXJuZXQgQWRhcHRlciJ9LAorCXsweDEwNzcsIDB4ODAyMCwgMHgwLCAweDAsICJjTE9NODIxNCAxLzEwR2JFIENvbnRyb2xsZXIifSwKK307CisKKyNkZWZpbmUgTlVNX1NVUFBPUlRFRF9CT0FSRFMgQVJSQVlfU0laRShxbGNuaWNfYm9hcmRzKQorCitzdGF0aWMgaW5saW5lIHUzMiBxbGNuaWNfdHhfYXZhaWwoc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcpCit7CisJc21wX21iKCk7CisJaWYgKHR4X3JpbmctPnByb2R1Y2VyIDwgdHhfcmluZy0+c3dfY29uc3VtZXIpCisJCXJldHVybiB0eF9yaW5nLT5zd19jb25zdW1lciAtIHR4X3JpbmctPnByb2R1Y2VyOworCWVsc2UKKwkJcmV0dXJuIHR4X3JpbmctPnN3X2NvbnN1bWVyICsgdHhfcmluZy0+bnVtX2Rlc2MgLQorCQkJCXR4X3JpbmctPnByb2R1Y2VyOworfQorCitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFsY25pY19ldGh0b29sX29wczsKKworI2VuZGlmCQkJCS8qIF9fUUxDTklDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZhMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYwpAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqLworCisjaW5jbHVkZSAicWxjbmljLmgiCisKK3N0YXRpYyB1MzIKK3FsY25pY19wb2xsX3JzcChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHJzcDsKKwlpbnQgdGltZW91dCA9IDA7CisKKwlkbyB7CisJCS8qIGdpdmUgYXRsZWFzdCAxbXMgZm9yIGZpcm13YXJlIHRvIHJlc3BvbmQgKi8KKwkJbXNsZWVwKDEpOworCisJCWlmICgrK3RpbWVvdXQgPiBRTENOSUNfT1NfQ1JCX1JFVFJZX0NPVU5UKQorCQkJcmV0dXJuIFFMQ05JQ19DRFJQX1JTUF9USU1FT1VUOworCisJCXJzcCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NEUlBfQ1JCX09GRlNFVCk7CisJfSB3aGlsZSAoIVFMQ05JQ19DRFJQX0lTX1JTUChyc3ApKTsKKworCXJldHVybiByc3A7Cit9CisKK3UzMgorcWxjbmljX2lzc3VlX2NtZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJdTMyIHBjaV9mbiwgdTMyIHZlcnNpb24sIHUzMiBhcmcxLCB1MzIgYXJnMiwgdTMyIGFyZzMsIHUzMiBjbWQpCit7CisJdTMyIHJzcDsKKwl1MzIgc2lnbmF0dXJlOworCXUzMiByY29kZSA9IFFMQ05JQ19SQ09ERV9TVUNDRVNTOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCXNpZ25hdHVyZSA9IFFMQ05JQ19DRFJQX1NJR05BVFVSRV9NQUtFKHBjaV9mbiwgdmVyc2lvbik7CisKKwkvKiBBY3F1aXJlIHNlbWFwaG9yZSBiZWZvcmUgYWNjZXNzaW5nIENSQiAqLworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiBRTENOSUNfUkNPREVfVElNRU9VVDsKKworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1NJR05fQ1JCX09GRlNFVCwgc2lnbmF0dXJlKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcxX0NSQl9PRkZTRVQsIGFyZzEpOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0FSRzJfQ1JCX09GRlNFVCwgYXJnMik7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQVJHM19DUkJfT0ZGU0VULCBhcmczKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DRFJQX0NSQl9PRkZTRVQsIFFMQ05JQ19DRFJQX0ZPUk1fQ01EKGNtZCkpOworCisJcnNwID0gcWxjbmljX3BvbGxfcnNwKGFkYXB0ZXIpOworCisJaWYgKHJzcCA9PSBRTENOSUNfQ0RSUF9SU1BfVElNRU9VVCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYXJkIHJlc3BvbnNlIHRpbWVvdXQuXG4iKTsKKwkJcmNvZGUgPSBRTENOSUNfUkNPREVfVElNRU9VVDsKKwl9IGVsc2UgaWYgKHJzcCA9PSBRTENOSUNfQ0RSUF9SU1BfRkFJTCkgeworCQlyY29kZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzFfQ1JCX09GRlNFVCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCBjYXJkIHJlc3BvbnNlIGNvZGU6MHgleFxuIiwKKwkJCQlyY29kZSk7CisJfQorCisJLyogUmVsZWFzZSBzZW1hcGhvcmUgKi8KKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKworCXJldHVybiByY29kZTsKK30KKworaW50CitxbGNuaWNfZndfY21kX3NldF9tdHUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gUUxDTklDX0hPU1RfQ1RYX1NUQVRFX0FDVElWRSkgeworCQlpZiAocWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCQlRTENIQUxfVkVSU0lPTiwKKwkJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKKwkJCQltdHUsCisJCQkJMCwKKwkJCQlRTENOSUNfQ0RSUF9DTURfU0VUX01UVSkpIHsKKworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBtdHVcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX2Z3X2NtZF9jcmVhdGVfcnhfY3R4KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkICphZGRyOworCXN0cnVjdCBxbGNuaWNfaG9zdHJxX3J4X2N0eCAqcHJxOworCXN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yeF9jdHggKnByc3A7CisJc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcgKnBycV9yZHM7CisJc3RydWN0IHFsY25pY19ob3N0cnFfc2RzX3JpbmcgKnBycV9zZHM7CisJc3RydWN0IHFsY25pY19jYXJkcnNwX3Jkc19yaW5nICpwcnNwX3JkczsKKwlzdHJ1Y3QgcWxjbmljX2NhcmRyc3Bfc2RzX3JpbmcgKnByc3Bfc2RzOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKworCWRtYV9hZGRyX3QgaG9zdHJxX3BoeXNfYWRkciwgY2FyZHJzcF9waHlzX2FkZHI7CisJdTY0IHBoeXNfYWRkcjsKKworCWludCBpLCBucmRzX3JpbmdzLCBuc2RzX3JpbmdzOworCXNpemVfdCBycV9zaXplLCByc3Bfc2l6ZTsKKwl1MzIgY2FwLCByZWcsIHZhbDsKKwlpbnQgZXJyOworCisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJbnJkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7CisJbnNkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisKKwlycV9zaXplID0KKwkJU0laRU9GX0hPU1RSUV9SWChzdHJ1Y3QgcWxjbmljX2hvc3RycV9yeF9jdHgsIG5yZHNfcmluZ3MsCisJCQkJCQluc2RzX3JpbmdzKTsKKwlyc3Bfc2l6ZSA9CisJCVNJWkVPRl9DQVJEUlNQX1JYKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yeF9jdHgsIG5yZHNfcmluZ3MsCisJCQkJCQluc2RzX3JpbmdzKTsKKworCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCXJxX3NpemUsICZob3N0cnFfcGh5c19hZGRyKTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwcnEgPSAoc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4ICopYWRkcjsKKworCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJcnNwX3NpemUsICZjYXJkcnNwX3BoeXNfYWRkcik7CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3JxOworCX0KKwlwcnNwID0gKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yeF9jdHggKilhZGRyOworCisJcHJxLT5ob3N0X3JzcF9kbWFfYWRkciA9IGNwdV90b19sZTY0KGNhcmRyc3BfcGh5c19hZGRyKTsKKworCWNhcCA9IChRTENOSUNfQ0FQMF9MRUdBQ1lfQ09OVEVYVCB8IFFMQ05JQ19DQVAwX0xFR0FDWV9NTik7CisJY2FwIHw9IChRTENOSUNfQ0FQMF9KVU1CT19DT05USUdVT1VTIHwgUUxDTklDX0NBUDBfTFJPX0NPTlRJR1VPVVMpOworCisJcHJxLT5jYXBhYmlsaXRpZXNbMF0gPSBjcHVfdG9fbGUzMihjYXApOworCXBycS0+aG9zdF9pbnRfY3JiX21vZGUgPQorCQljcHVfdG9fbGUzMihRTENOSUNfSE9TVF9JTlRfQ1JCX01PREVfU0hBUkVEKTsKKwlwcnEtPmhvc3RfcmRzX2NyYl9tb2RlID0KKwkJY3B1X3RvX2xlMzIoUUxDTklDX0hPU1RfUkRTX0NSQl9NT0RFX1VOSVFVRSk7CisKKwlwcnEtPm51bV9yZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihucmRzX3JpbmdzKTsKKwlwcnEtPm51bV9zZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihuc2RzX3JpbmdzKTsKKwlwcnEtPnJkc19yaW5nX29mZnNldCA9IGNwdV90b19sZTMyKDApOworCisJdmFsID0gbGUzMl90b19jcHUocHJxLT5yZHNfcmluZ19vZmZzZXQpICsKKwkJKHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RycV9yZHNfcmluZykgKiBucmRzX3JpbmdzKTsKKwlwcnEtPnNkc19yaW5nX29mZnNldCA9IGNwdV90b19sZTMyKHZhbCk7CisKKwlwcnFfcmRzID0gKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3Jkc19yaW5nICopKHBycS0+ZGF0YSArCisJCQlsZTMyX3RvX2NwdShwcnEtPnJkc19yaW5nX29mZnNldCkpOworCisJZm9yIChpID0gMDsgaSA8IG5yZHNfcmluZ3M7IGkrKykgeworCisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CisKKwkJcHJxX3Jkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHJkc19yaW5nLT5waHlzX2FkZHIpOworCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CisJCXBycV9yZHNbaV0ucmluZ19raW5kID0gY3B1X3RvX2xlMzIoaSk7CisJCXBycV9yZHNbaV0uYnVmZl9zaXplID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPmRtYV9zaXplKTsKKwl9CisKKwlwcnFfc2RzID0gKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3Nkc19yaW5nICopKHBycS0+ZGF0YSArCisJCQlsZTMyX3RvX2NwdShwcnEtPnNkc19yaW5nX29mZnNldCkpOworCisJZm9yIChpID0gMDsgaSA8IG5zZHNfcmluZ3M7IGkrKykgeworCisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcHJxX3Nkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOworCQlwcnFfc2RzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHNkc19yaW5nLT5udW1fZGVzYyk7CisJCXBycV9zZHNbaV0ubXNpX2luZGV4ID0gY3B1X3RvX2xlMTYoaSk7CisJfQorCisJcGh5c19hZGRyID0gaG9zdHJxX3BoeXNfYWRkcjsKKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlRTENIQUxfVkVSU0lPTiwKKwkJCSh1MzIpKHBoeXNfYWRkciA+PiAzMiksCisJCQkodTMyKShwaHlzX2FkZHIgJiAweGZmZmZmZmZmKSwKKwkJCXJxX3NpemUsCisJCQlRTENOSUNfQ0RSUF9DTURfQ1JFQVRFX1JYX0NUWCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGNyZWF0ZSByeCBjdHggaW4gZmlybXdhcmUlZFxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZV9yc3A7CisJfQorCisKKwlwcnNwX3JkcyA9ICgoc3RydWN0IHFsY25pY19jYXJkcnNwX3Jkc19yaW5nICopCisJCQkgJnByc3AtPmRhdGFbbGUzMl90b19jcHUocHJzcC0+cmRzX3Jpbmdfb2Zmc2V0KV0pOworCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHByc3AtPm51bV9yZHNfcmluZ3MpOyBpKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tpXTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Jkc1tpXS5ob3N0X3Byb2R1Y2VyX2NyYik7CisJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfUkVHKHJlZyAtIDB4MjAwKSk7CisJfQorCisJcHJzcF9zZHMgPSAoKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyAqKQorCQkJJnByc3AtPmRhdGFbbGUzMl90b19jcHUocHJzcC0+c2RzX3Jpbmdfb2Zmc2V0KV0pOworCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHByc3AtPm51bV9zZHNfcmluZ3MpOyBpKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5ob3N0X2NvbnN1bWVyX2NyYik7CisJCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfUkVHKHJlZyAtIDB4MjAwKSk7CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaW50ZXJydXB0X2NyYik7CisJCXNkc19yaW5nLT5jcmJfaW50cl9tYXNrID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfUkVHKHJlZyAtIDB4MjAwKSk7CisJfQorCisJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOworCXJlY3ZfY3R4LT5jb250ZXh0X2lkID0gbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CisJcmVjdl9jdHgtPnZpcnRfcG9ydCA9IHByc3AtPnZpcnRfcG9ydDsKKworb3V0X2ZyZWVfcnNwOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcnNwX3NpemUsIHByc3AsIGNhcmRyc3BfcGh5c19hZGRyKTsKK291dF9mcmVlX3JxOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcnFfc2l6ZSwgcHJxLCBob3N0cnFfcGh5c19hZGRyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2Z3X2NtZF9kZXN0cm95X3J4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJcmVjdl9jdHgtPmNvbnRleHRfaWQsCisJCQlRTENOSUNfREVTVFJPWV9DVFhfUkVTRVQsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX0RFU1RST1lfUlhfQ1RYKSkgeworCisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZGVzdHJveSByeCBjdHggaW4gZmlybXdhcmVcbiIpOworCX0KK30KKworc3RhdGljIGludAorcWxjbmljX2Z3X2NtZF9jcmVhdGVfdHhfY3R4KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX2hvc3RycV90eF9jdHgJKnBycTsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RycV9jZHNfcmluZwkqcHJxX2NkczsKKwlzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4CSpwcnNwOworCXZvaWQJKnJxX2FkZHIsICpyc3BfYWRkcjsKKwlzaXplX3QJcnFfc2l6ZSwgcnNwX3NpemU7CisJdTMyCXRlbXA7CisJaW50CWVycjsKKwl1NjQJcGh5c19hZGRyOworCWRtYV9hZGRyX3QJcnFfcGh5c19hZGRyLCByc3BfcGh5c19hZGRyOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKworCXJxX3NpemUgPSBTSVpFT0ZfSE9TVFJRX1RYKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3R4X2N0eCk7CisJcnFfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCXJxX3NpemUsICZycV9waHlzX2FkZHIpOworCWlmICghcnFfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyc3Bfc2l6ZSA9IFNJWkVPRl9DQVJEUlNQX1RYKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF90eF9jdHgpOworCXJzcF9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJcnNwX3NpemUsICZyc3BfcGh5c19hZGRyKTsKKwlpZiAoIXJzcF9hZGRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfcnE7CisJfQorCisJbWVtc2V0KHJxX2FkZHIsIDAsIHJxX3NpemUpOworCXBycSA9IChzdHJ1Y3QgcWxjbmljX2hvc3RycV90eF9jdHggKilycV9hZGRyOworCisJbWVtc2V0KHJzcF9hZGRyLCAwLCByc3Bfc2l6ZSk7CisJcHJzcCA9IChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4ICopcnNwX2FkZHI7CisKKwlwcnEtPmhvc3RfcnNwX2RtYV9hZGRyID0gY3B1X3RvX2xlNjQocnNwX3BoeXNfYWRkcik7CisKKwl0ZW1wID0gKFFMQ05JQ19DQVAwX0xFR0FDWV9DT05URVhUIHwgUUxDTklDX0NBUDBfTEVHQUNZX01OIHwKKwkJCQkJUUxDTklDX0NBUDBfTFNPKTsKKwlwcnEtPmNhcGFiaWxpdGllc1swXSA9IGNwdV90b19sZTMyKHRlbXApOworCisJcHJxLT5ob3N0X2ludF9jcmJfbW9kZSA9CisJCWNwdV90b19sZTMyKFFMQ05JQ19IT1NUX0lOVF9DUkJfTU9ERV9TSEFSRUQpOworCisJcHJxLT5pbnRlcnJ1cHRfY3RsID0gMDsKKwlwcnEtPm1zaV9pbmRleCA9IDA7CisJcHJxLT5jbWRfY29uc19kbWFfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPmh3X2NvbnNfcGh5c19hZGRyKTsKKworCXBycV9jZHMgPSAmcHJxLT5jZHNfcmluZzsKKworCXBycV9jZHMtPmhvc3RfcGh5c19hZGRyID0gY3B1X3RvX2xlNjQodHhfcmluZy0+cGh5c19hZGRyKTsKKwlwcnFfY2RzLT5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMih0eF9yaW5nLT5udW1fZGVzYyk7CisKKwlwaHlzX2FkZHIgPSBycV9waHlzX2FkZHI7CisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJUUxDSEFMX1ZFUlNJT04sCisJCQkodTMyKShwaHlzX2FkZHIgPj4gMzIpLAorCQkJKCh1MzIpcGh5c19hZGRyICYgMHhmZmZmZmZmZiksCisJCQlycV9zaXplLAorCQkJUUxDTklDX0NEUlBfQ01EX0NSRUFURV9UWF9DVFgpOworCisJaWYgKGVyciA9PSBRTENOSUNfUkNPREVfU1VDQ0VTUykgeworCQl0ZW1wID0gbGUzMl90b19jcHUocHJzcC0+Y2RzX3JpbmcuaG9zdF9wcm9kdWNlcl9jcmIpOworCQl0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfUkVHKHRlbXAgLSAweDIwMCkpOworCisJCWFkYXB0ZXItPnR4X2NvbnRleHRfaWQgPQorCQkJbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgdHggY3R4IGluIGZpcm13YXJlJWRcbiIsIGVycik7CisJCWVyciA9IC1FSU87CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCByc3Bfc2l6ZSwgcnNwX2FkZHIsIHJzcF9waHlzX2FkZHIpOworCitvdXRfZnJlZV9ycToKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxX3NpemUsIHJxX2FkZHIsIHJxX3BoeXNfYWRkcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2Z3X2NtZF9kZXN0cm95X3R4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+dHhfY29udGV4dF9pZCwKKwkJCVFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfREVTVFJPWV9UWF9DVFgpKSB7CisKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBkZXN0cm95IHR4IGN0eCBpbiBmaXJtd2FyZVxuIik7CisJfQorfQorCitpbnQKK3FsY25pY19md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpCit7CisKKwlpZiAocWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJUUxDSEFMX1ZFUlNJT04sCisJCQlyZWcsCisJCQkwLAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9SRUFEX1BIWSkpIHsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VUKTsKK30KKworaW50CitxbGNuaWNfZndfY21kX3NldF9waHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXJldHVybiBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlRTENIQUxfVkVSU0lPTiwKKwkJCXJlZywKKwkJCXZhbCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfV1JJVEVfUEhZKTsKK30KKworaW50IHFsY25pY19hbGxvY19od19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXZvaWQgKmFkZHI7CisJaW50IGVycjsKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisKKwl0eF9yaW5nLT5od19jb25zdW1lciA9IChfX2xlMzIgKilwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKKwkJCQkJCSZ0eF9yaW5nLT5od19jb25zX3BoeXNfYWRkcik7CisJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGNvbnN1bWVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCSoodHhfcmluZy0+aHdfY29uc3VtZXIpID0gMDsKKworCS8qIGNtZCBkZXNjIHJpbmcgKi8KKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKKwkJCSZ0eF9yaW5nLT5waHlzX2FkZHIpOworCisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdHhfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKWFkZHI7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKKwkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIHJkcyByaW5nIFslZF1cbiIsIHJpbmcpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKKworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKworCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCisJCQkJJnNkc19yaW5nLT5waHlzX2FkZHIpOworCQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCQlzZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisJfQorCisKKwllcnIgPSBxbGNuaWNfZndfY21kX2NyZWF0ZV9yeF9jdHgoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJZXJyID0gcWxjbmljX2Z3X2NtZF9jcmVhdGVfdHhfY3R4KGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJc2V0X2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCXFsY25pY19mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHFsY25pY19mcmVlX2h3X3Jlc291cmNlcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKKwlpbnQgcmluZzsKKworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KGFkYXB0ZXIpOworCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KGFkYXB0ZXIpOworCisJCS8qIEFsbG93IGRtYSBxdWV1ZXMgdG8gZHJhaW4gYWZ0ZXIgY29udGV4dCByZXNldCAqLworCQltc2xlZXAoMjApOworCX0KKworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCXNpemVvZih1MzIpLAorCQkJCXR4X3JpbmctPmh3X2NvbnN1bWVyLAorCQkJCXR4X3JpbmctPmh3X2NvbnNfcGh5c19hZGRyKTsKKwkJdHhfcmluZy0+aHdfY29uc3VtZXIgPSBOVUxMOworCX0KKworCWlmICh0eF9yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKKwkJCQl0eF9yaW5nLT5kZXNjX2hlYWQsIHR4X3JpbmctPnBoeXNfYWRkcik7CisJCXR4X3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJCWlmIChyZHNfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJUkNWX0RFU0NfUklOR1NJWkUocmRzX3JpbmcpLAorCQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkLAorCQkJCQlyZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOworCQl9CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCisJCWlmIChzZHNfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCisJCQkJc2RzX3JpbmctPmRlc2NfaGVhZCwKKwkJCQlzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJCXNkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTZlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwpAQCAtMCwwICsxLDEwMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworI2luY2x1ZGUgInFsY25pYy5oIgorCitzdHJ1Y3QgcWxjbmljX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBzdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgUUxDX1NJWkVPRihtKSBGSUVMRF9TSVpFT0Yoc3RydWN0IHFsY25pY19hZGFwdGVyLCBtKQorI2RlZmluZSBRTENfT0ZGKG0pIG9mZnNldG9mKHN0cnVjdCBxbGNuaWNfYWRhcHRlciwgbSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBxbGNuaWNfc3RhdHMgcWxjbmljX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJeyJ4bWl0X2NhbGxlZCIsCisJCVFMQ19TSVpFT0Yoc3RhdHMueG1pdGNhbGxlZCksIFFMQ19PRkYoc3RhdHMueG1pdGNhbGxlZCl9LAorCXsieG1pdF9maW5pc2hlZCIsCisJCVFMQ19TSVpFT0Yoc3RhdHMueG1pdGZpbmlzaGVkKSwgUUxDX09GRihzdGF0cy54bWl0ZmluaXNoZWQpfSwKKwl7InJ4X2Ryb3BwZWQiLAorCQlRTENfU0laRU9GKHN0YXRzLnJ4ZHJvcHBlZCksIFFMQ19PRkYoc3RhdHMucnhkcm9wcGVkKX0sCisJeyJ0eF9kcm9wcGVkIiwKKwkJUUxDX1NJWkVPRihzdGF0cy50eGRyb3BwZWQpLCBRTENfT0ZGKHN0YXRzLnR4ZHJvcHBlZCl9LAorCXsiY3N1bW1lZCIsCisJCVFMQ19TSVpFT0Yoc3RhdHMuY3N1bW1lZCksIFFMQ19PRkYoc3RhdHMuY3N1bW1lZCl9LAorCXsicnhfcGt0cyIsCisJCVFMQ19TSVpFT0Yoc3RhdHMucnhfcGt0cyksIFFMQ19PRkYoc3RhdHMucnhfcGt0cyl9LAorCXsibHJvX3BrdHMiLAorCQlRTENfU0laRU9GKHN0YXRzLmxyb19wa3RzKSwgUUxDX09GRihzdGF0cy5scm9fcGt0cyl9LAorCXsicnhfYnl0ZXMiLAorCQlRTENfU0laRU9GKHN0YXRzLnJ4Ynl0ZXMpLCBRTENfT0ZGKHN0YXRzLnJ4Ynl0ZXMpfSwKKwl7InR4X2J5dGVzIiwKKwkJUUxDX1NJWkVPRihzdGF0cy50eGJ5dGVzKSwgUUxDX09GRihzdGF0cy50eGJ5dGVzKX0sCit9OworCisjZGVmaW5lIFFMQ05JQ19TVEFUU19MRU4JQVJSQVlfU0laRShxbGNuaWNfZ3N0cmluZ3Nfc3RhdHMpCisKK3N0YXRpYyBjb25zdCBjaGFyIHFsY25pY19nc3RyaW5nc190ZXN0W11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwkiUmVnaXN0ZXJfVGVzdF9vbl9vZmZsaW5lIiwKKwkiTGlua19UZXN0X29uX29mZmxpbmUiLAorCSJJbnRlcnJ1cHRfVGVzdF9vZmZsaW5lIiwKKwkiTG9vcGJhY2tfVGVzdF9vZmZsaW5lIgorfTsKKworI2RlZmluZSBRTENOSUNfVEVTVF9MRU4JQVJSQVlfU0laRShxbGNuaWNfZ3N0cmluZ3NfdGVzdCkKKworI2RlZmluZSBRTENOSUNfUklOR19SRUdTX0NPVU5UCTIwCisjZGVmaW5lIFFMQ05JQ19SSU5HX1JFR1NfTEVOCShRTENOSUNfUklOR19SRUdTX0NPVU5UICogc2l6ZW9mKHUzMikpCisjZGVmaW5lIFFMQ05JQ19NQVhfRUVQUk9NX0xFTiAgIDEwMjQKKworc3RhdGljIGNvbnN0IHUzMiBkaWFnX3JlZ2lzdGVyc1tdID0geworCUNSQl9DTURQRUdfU1RBVEUsCisJQ1JCX1JDVlBFR19TVEFURSwKKwlDUkJfWEdfU1RBVEVfUDMsCisJQ1JCX0ZXX0NBUEFCSUxJVElFU18xLAorCUlTUl9JTlRfU1RBVEVfUkVHLAorCVFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCwKKwlRTENOSUNfQ1JCX0RFVl9TVEFURSwKKwlRTENOSUNfQ1JCX0RSVl9TVEFURSwKKwlRTENOSUNfQ1JCX0RSVl9TQ1JBVENILAorCVFMQ05JQ19DUkJfREVWX1BBUlRJVElPTl9JTkZPLAorCVFMQ05JQ19DUkJfRFJWX0lEQ19WRVIsCisJUUxDTklDX1BFR19BTElWRV9DT1VOVEVSLAorCVFMQ05JQ19QRUdfSEFMVF9TVEFUVVMxLAorCVFMQ05JQ19QRUdfSEFMVF9TVEFUVVMyLAorCVFMQ05JQ19DUkJfUEVHX05FVF8wKzB4M2MsCisJUUxDTklDX0NSQl9QRUdfTkVUXzErMHgzYywKKwlRTENOSUNfQ1JCX1BFR19ORVRfMisweDNjLAorCVFMQ05JQ19DUkJfUEVHX05FVF80KzB4M2MsCisJLTEKK307CisKK3N0YXRpYyBpbnQgcWxjbmljX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBzaXplb2YoZGlhZ19yZWdpc3RlcnMpICsgUUxDTklDX1JJTkdfUkVHU19MRU47Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIFFMQ05JQ19GTEFTSF9UT1RBTF9TSVpFOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZDsKKworCWZ3X21ham9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NQUpPUik7CisJZndfbWlub3IgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX01JTk9SKTsKKwlmd19idWlsZCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0ZXX1ZFUlNJT05fU1VCKTsKKwlzcHJpbnRmKGRydmluZm8tPmZ3X3ZlcnNpb24sICIlZC4lZC4lZCIsIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOworCisJc3RybGNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKKwlzdHJsY3B5KGRydmluZm8tPmRyaXZlciwgcWxjbmljX2RyaXZlcl9uYW1lLCAzMik7CisJc3RybGNweShkcnZpbmZvLT52ZXJzaW9uLCBRTENOSUNfTElOVVhfVkVSU0lPTklELCAzMik7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNoZWNrX3NmcF9tb2R1bGUgPSAwOworCXUxNiBwY2lmbiA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKKworCS8qIHJlYWQgd2hpY2ggbW9kZSAqLworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpOworCisJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJICAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKKworCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OworCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOworCisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUE9SVF9NT0RFX0FERFIpOworCQlpZiAodmFsID09IFFMQ05JQ19QT1JUX01PREVfODAyXzNfQVApIHsKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwkJCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKwkJfSBlbHNlIHsKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGw7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsOworCQl9CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiBhZGFwdGVyLT5oYXNfbGlua19ldmVudHMpIHsKKwkJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwkJCWVjbWQtPmF1dG9uZWcgPSBhZGFwdGVyLT5saW5rX2F1dG9uZWc7CisJCQllY21kLT5kdXBsZXggPSBhZGFwdGVyLT5saW5rX2R1cGxleDsKKwkJCWdvdG8gc2tpcDsKKwkJfQorCisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUDNfTElOS19TUEVFRF9SRUcocGNpZm4pKTsKKwkJZWNtZC0+c3BlZWQgPSBQM19MSU5LX1NQRUVEX01IWiAqCisJCQlQM19MSU5LX1NQRUVEX1ZBTChwY2lmbiwgdmFsKTsKKwkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJfSBlbHNlCisJCXJldHVybiAtRUlPOworCitza2lwOgorCWVjbWQtPnBoeV9hZGRyZXNzID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKKwllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM19SRUZfUUc6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM180X0dCOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfNF9HQl9NTToKKworCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19DWDQ6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0X0xQOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX1RQOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJZWNtZC0+YXV0b25lZyA9ICBhZGFwdGVyLT5saW5rX2F1dG9uZWc7CisJCWJyZWFrOworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfSU1FWjoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX1hHX0xPTToKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX0hNRVo6CisJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfTUlJOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX01JSTsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfTUlJOworCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQlicmVhazsKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfUExVUzoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgorCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX1RQOworCQljaGVja19zZnBfbW9kdWxlID0gbmV0aWZfcnVubmluZyhkZXYpICYmCisJCQlhZGFwdGVyLT5oYXNfbGlua19ldmVudHM7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfWEZQOgorCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0ZJQlJFOworCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfVFA6CisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KKwkJCQkoQURWRVJUSVNFRF9GSUJSRSB8IEFEVkVSVElTRURfVFApOworCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJCQljaGVja19zZnBfbW9kdWxlID0gbmV0aWZfcnVubmluZyhkZXYpICYmCisJCQkJYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzOworCQl9IGVsc2UgeworCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfVFAgfCBTVVBQT1JURURfQXV0b25lZyk7CisJCQllY21kLT5hZHZlcnRpc2luZyB8PQorCQkJCShBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF9BdXRvbmVnKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIGJvYXJkIG1vZGVsICVkXG4iLAorCQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY2hlY2tfc2ZwX21vZHVsZSkgeworCQlzd2l0Y2ggKGFkYXB0ZXItPm1vZHVsZV90eXBlKSB7CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1VOS05PV046CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1NSTFI6CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX0xSTToKKwkJY2FzZSBMSU5LRVZFTlRfTU9EVUxFX09QVElDQUxfU0ZQXzFHOgorCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJCQlicmVhazsKKwkJY2FzZSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWF9VTlNVUFBPUlRFRF9DQUJMRToKKwkJY2FzZSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWF9VTlNVUFBPUlRFRF9DQUJMRUxFTjoKKwkJY2FzZSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWDoKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllY21kLT5wb3J0ID0gUE9SVF9PVEhFUjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCV9fdTMyIHN0YXR1czsKKworCS8qIHJlYWQgd2hpY2ggbW9kZSAqLworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwkJLyogYXV0b25lZ290aWF0aW9uICovCisJCWlmIChxbGNuaWNfZndfY21kX3NldF9waHkoYWRhcHRlciwKKwkJCSAgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfQVVUT05FRywKKwkJCSAgICAgICBlY21kLT5hdXRvbmVnKSAhPSAwKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCWFkYXB0ZXItPmxpbmtfYXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CisKKwkJaWYgKHFsY25pY19md19jbWRfcXVlcnlfcGh5KGFkYXB0ZXIsCisJCQkgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKKwkJCSAgICAgICZzdGF0dXMpICE9IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlzd2l0Y2ggKGVjbWQtPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTA6CisJCQlxbGNuaWNfc2V0X3BoeV9zcGVlZChzdGF0dXMsIDApOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwOgorCQkJcWxjbmljX3NldF9waHlfc3BlZWQoc3RhdHVzLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDA6CisJCQlxbGNuaWNfc2V0X3BoeV9zcGVlZChzdGF0dXMsIDIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJcWxjbmljX2NsZWFyX3BoeV9kdXBsZXgoc3RhdHVzKTsKKwkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCXFsY25pY19zZXRfcGh5X2R1cGxleChzdGF0dXMpOworCQlpZiAocWxjbmljX2Z3X2NtZF9zZXRfcGh5KGFkYXB0ZXIsCisJCQkgICAgICAgUUxDTklDX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsCisJCQkgICAgICAgKigoaW50ICopJnN0YXR1cykpICE9IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJZWxzZSB7CisJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gZWNtZC0+c3BlZWQ7CisJCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IGVjbWQtPmR1cGxleDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKGRldik7CisJcmV0dXJuIGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4oZGV2KTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJdTMyICpyZWdzX2J1ZmYgPSBwOworCWludCByaW5nLCBpID0gMDsKKworCW1lbXNldChwLCAwLCBxbGNuaWNfZ2V0X3JlZ3NfbGVuKGRldikpOworCXJlZ3MtPnZlcnNpb24gPSAoMSA8PCAyNCkgfCAoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkIDw8IDE2KSB8CisJICAgIChhZGFwdGVyLT5wZGV2KS0+ZGV2aWNlOworCisJZm9yIChpID0gMDsgZGlhZ19yZWdpc3RlcnNbaV0gIT0gLTE7IGkrKykKKwkJcmVnc19idWZmW2ldID0gUUxDUkQzMihhZGFwdGVyLCBkaWFnX3JlZ2lzdGVyc1tpXSk7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybjsKKworCXJlZ3NfYnVmZltpKytdID0gMHhGRkVGQ0RBQjsgLyogTWFya2VyIGJ0dyByZWdzIGFuZCByaW5nIGNvdW50Ki8KKworCXJlZ3NfYnVmZltpKytdID0gMTsgLyogTm8uIG9mIHR4IHJpbmcgKi8KKwlyZWdzX2J1ZmZbaSsrXSA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+dHhfcmluZy0+aHdfY29uc3VtZXIpKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IHJlYWRsKGFkYXB0ZXItPnR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIpOworCisJcmVnc19idWZmW2krK10gPSAyOyAvKiBOby4gb2YgcnggcmluZyAqLworCXJlZ3NfYnVmZltpKytdID0gcmVhZGwocmVjdl9jdHgtPnJkc19yaW5nc1swXS5jcmJfcmN2X3Byb2R1Y2VyKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IHJlYWRsKHJlY3ZfY3R4LT5yZHNfcmluZ3NbMV0uY3JiX3Jjdl9wcm9kdWNlcik7CisKKwlyZWdzX2J1ZmZbaSsrXSA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJihyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddKTsKKwkJcmVnc19idWZmW2krK10gPSByZWFkbChzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lcik7CisJfQorfQorCitzdGF0aWMgdTMyIHFsY25pY190ZXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB2YWw7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIENSQl9YR19TVEFURV9QMyk7CisJdmFsID0gWEdfTElOS19TVEFURV9QMyhhZGFwdGVyLT5haHcucGNpX2Z1bmMsIHZhbCk7CisJcmV0dXJuICh2YWwgPT0gWEdfTElOS19VUF9QMykgPyAwIDogMTsKK30KKworc3RhdGljIGludAorcWxjbmljX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCisJCSAgICAgIHU4ICpieXRlcykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBvZmZzZXQ7CisJaW50IHJldDsKKworCWlmIChlZXByb20tPmxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVlcHJvbS0+bWFnaWMgPSAoYWRhcHRlci0+cGRldiktPnZlbmRvciB8CisJCQkoKGFkYXB0ZXItPnBkZXYpLT5kZXZpY2UgPDwgMTYpOworCW9mZnNldCA9IGVlcHJvbS0+b2Zmc2V0OworCisJcmV0ID0gcWxjbmljX3JvbV9mYXN0X3JlYWRfd29yZHMoYWRhcHRlciwgb2Zmc2V0LCBieXRlcywKKwkJCQkJCWVlcHJvbS0+bGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlyaW5nLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+bnVtX3J4ZDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gYWRhcHRlci0+bnVtX2p1bWJvX3J4ZDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPm51bV9scm9fcnhkOworCXJpbmctPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT5udW1fdHhkOworCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRzsKKwl9IGVsc2UgeworCQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCQlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCX0KKworCXJpbmctPnR4X21heF9wZW5kaW5nID0gTUFYX0NNRF9ERVNDUklQVE9SUzsKKworCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY192YWxpZGF0ZV9yaW5ncGFyYW0odTMyIHZhbCwgdTMyIG1pbiwgdTMyIG1heCwgY2hhciAqcl9uYW1lKQoreworCXUzMiBudW1fZGVzYzsKKwludW1fZGVzYyA9IG1heCh2YWwsIG1pbik7CisJbnVtX2Rlc2MgPSBtaW4obnVtX2Rlc2MsIG1heCk7CisJbnVtX2Rlc2MgPSByb3VuZHVwX3Bvd19vZl90d28obnVtX2Rlc2MpOworCisJaWYgKHZhbCAhPSBudW1fZGVzYykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0dGluZyAlcyByaW5nIHNpemUgJWQgaW5zdGVhZCBvZiAlZFxuIiwKKwkJICAgICAgIHFsY25pY19kcml2ZXJfbmFtZSwgcl9uYW1lLCBudW1fZGVzYywgdmFsKTsKKwl9CisKKwlyZXR1cm4gbnVtX2Rlc2M7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiBtYXhfcmN2X2Rlc2MgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl1MTYgbWF4X2p1bWJvX2Rlc2MgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl1MTYgbnVtX3J4ZCwgbnVtX2p1bWJvX3J4ZCwgbnVtX3R4ZDsKKworCisJaWYgKHJpbmctPnJ4X21pbmlfcGVuZGluZykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCQltYXhfcmN2X2Rlc2MgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCQltYXhfanVtYm9fZGVzYyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCX0KKworCW51bV9yeGQgPSBxbGNuaWNfdmFsaWRhdGVfcmluZ3BhcmFtKHJpbmctPnJ4X3BlbmRpbmcsCisJCQlNSU5fUkNWX0RFU0NSSVBUT1JTLCBtYXhfcmN2X2Rlc2MsICJyeCIpOworCisJbnVtX2p1bWJvX3J4ZCA9IHFsY25pY192YWxpZGF0ZV9yaW5ncGFyYW0ocmluZy0+cnhfanVtYm9fcGVuZGluZywKKwkJCU1JTl9KVU1CT19ERVNDUklQVE9SUywgbWF4X2p1bWJvX2Rlc2MsICJyeCBqdW1ibyIpOworCisJbnVtX3R4ZCA9IHFsY25pY192YWxpZGF0ZV9yaW5ncGFyYW0ocmluZy0+dHhfcGVuZGluZywKKwkJCU1JTl9DTURfREVTQ1JJUFRPUlMsIE1BWF9DTURfREVTQ1JJUFRPUlMsICJ0eCIpOworCisJaWYgKG51bV9yeGQgPT0gYWRhcHRlci0+bnVtX3J4ZCAmJiBudW1fdHhkID09IGFkYXB0ZXItPm51bV90eGQgJiYKKwkJCW51bV9qdW1ib19yeGQgPT0gYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCkKKwkJcmV0dXJuIDA7CisKKwlhZGFwdGVyLT5udW1fcnhkID0gbnVtX3J4ZDsKKwlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gbnVtX2p1bWJvX3J4ZDsKKwlhZGFwdGVyLT5udW1fdHhkID0gbnVtX3R4ZDsKKworCXJldHVybiBxbGNuaWNfcmVzZXRfY29udGV4dChhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKKwlfX3UzMiB2YWw7CisKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfR0JFX1BPUlRTKSkKKwkJCXJldHVybjsKKwkJLyogZ2V0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpKTsKKwkJcGF1c2UtPnJ4X3BhdXNlID0gcWxjbmljX2diX2dldF9yeF9mbG93Y3RsKHZhbCk7CisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX05JVV9HQl9QQVVTRV9DVEwpOworCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSAwOgorCQkJcGF1c2UtPnR4X3BhdXNlID0gIShxbGNuaWNfZ2JfZ2V0X2diMF9tYXNrKHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX2diX2dldF9nYjFfbWFzayh2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKHFsY25pY19nYl9nZXRfZ2IyX21hc2sodmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQlkZWZhdWx0OgorCQkJcGF1c2UtPnR4X3BhdXNlID0gIShxbGNuaWNfZ2JfZ2V0X2diM19tYXNrKHZhbCkpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9YR19QT1JUUykpCisJCQlyZXR1cm47CisJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX05JVV9YR19QQVVTRV9DVEwpOworCQlpZiAocG9ydCA9PSAwKQorCQkJcGF1c2UtPnR4X3BhdXNlID0gIShxbGNuaWNfeGdfZ2V0X3hnMF9tYXNrKHZhbCkpOworCQllbHNlCisJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKHFsY25pY194Z19nZXRfeGcxX21hc2sodmFsKSk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJVbmtub3duIGJvYXJkIHR5cGU6ICV4XG4iLAorCQkJCQlhZGFwdGVyLT5haHcucG9ydF90eXBlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKKwlfX3UzMiB2YWw7CisKKwkvKiByZWFkIG1vZGUgKi8KKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfR0JFX1BPUlRTKSkKKwkJCXJldHVybiAtRUlPOworCQkvKiBzZXQgZmxvdyBjb250cm9sICovCisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCkpOworCisJCWlmIChwYXVzZS0+cnhfcGF1c2UpCisJCQlxbGNuaWNfZ2JfcnhfZmxvd2N0bCh2YWwpOworCQllbHNlCisJCQlxbGNuaWNfZ2JfdW5zZXRfcnhfZmxvd2N0bCh2YWwpOworCisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCisJCQkJdmFsKTsKKwkJLyogc2V0IGF1dG9uZWcgKi8KKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfTklVX0dCX1BBVVNFX0NUTCk7CisJCXN3aXRjaCAocG9ydCkgeworCQljYXNlIDA6CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY19nYl91bnNldF9nYjBfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY19nYl9zZXRfZ2IwX21hc2sodmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY19nYl91bnNldF9nYjFfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY19nYl9zZXRfZ2IxX21hc2sodmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY19nYl91bnNldF9nYjJfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY19nYl9zZXRfZ2IyX21hc2sodmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWRlZmF1bHQ6CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY19nYl91bnNldF9nYjNfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY19nYl9zZXRfZ2IzX21hc2sodmFsKTsKKwkJCWJyZWFrOworCQl9CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX05JVV9HQl9QQVVTRV9DVEwsIHZhbCk7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfWEdfUE9SVFMpKQorCQkJcmV0dXJuIC1FSU87CisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX05JVV9YR19QQVVTRV9DVEwpOworCQlpZiAocG9ydCA9PSAwKSB7CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY194Z191bnNldF94ZzBfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY194Z19zZXRfeGcwX21hc2sodmFsKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYXVzZS0+dHhfcGF1c2UpCisJCQkJcWxjbmljX3hnX3Vuc2V0X3hnMV9tYXNrKHZhbCk7CisJCQllbHNlCisJCQkJcWxjbmljX3hnX3NldF94ZzFfbWFzayh2YWwpOworCQl9CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX05JVV9YR19QQVVTRV9DVEwsIHZhbCk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJVbmtub3duIGJvYXJkIHR5cGU6ICV4XG4iLAorCQkJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfcmVnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBkYXRhX3JlYWQsIGRhdGFfd3JpdHRlbjsKKworCWRhdGFfcmVhZCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BDSVhfUEhfUkVHKDApKTsKKwlpZiAoKGRhdGFfcmVhZCAmIDB4ZmZmZikgIT0gYWRhcHRlci0+cGRldi0+dmVuZG9yKQorCQlyZXR1cm4gMTsKKworCWRhdGFfd3JpdHRlbiA9ICh1MzIpMHhhNWE1YTVhNTsKKworCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX1NDUkFUQ0hQQURfVEVTVCwgZGF0YV93cml0dGVuKTsKKwlkYXRhX3JlYWQgPSBRTENSRDMyKGFkYXB0ZXIsIENSQl9TQ1JBVENIUEFEX1RFU1QpOworCWlmIChkYXRhX3dyaXR0ZW4gIT0gZGF0YV9yZWFkKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsY25pY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKK3sKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQlyZXR1cm4gUUxDTklDX1RFU1RfTEVOOworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gUUxDTklDX1NUQVRTX0xFTjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCisjZGVmaW5lIFFMQ19JTEJfUEtUX1NJWkUgNjQKKworc3RhdGljIHZvaWQgcWxjbmljX2NyZWF0ZV9sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciByYW5kb21fZGF0YVtdID0gezB4YTgsIDB4MDYsIDB4NDUsIDB4MDB9OworCW1lbXNldChkYXRhLCAweDRlLCBRTENfSUxCX1BLVF9TSVpFKTsKKwltZW1zZXQoZGF0YSwgMHhmZiwgMTIpOworCW1lbWNweShkYXRhICsgMTIsIHJhbmRvbV9kYXRhLCBzaXplb2YocmFuZG9tX2RhdGEpKTsKK30KKworaW50IHFsY25pY19jaGVja19sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciBidWZmW1FMQ19JTEJfUEtUX1NJWkVdOworCXFsY25pY19jcmVhdGVfbG9vcGJhY2tfYnVmZihidWZmKTsKKwlyZXR1cm4gbWVtY21wKGRhdGEsIGJ1ZmYsIFFMQ19JTEJfUEtUX1NJWkUpOworfQorCitzdGF0aWMgaW50IHFsY25pY19kb19pbGJfdGVzdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihRTENfSUxCX1BLVF9TSVpFKTsKKwkJcWxjbmljX2NyZWF0ZV9sb29wYmFja19idWZmKHNrYi0+ZGF0YSk7CisJCXNrYl9wdXQoc2tiLCBRTENfSUxCX1BLVF9TSVpFKTsKKworCQlhZGFwdGVyLT5kaWFnX2NudCA9IDA7CisKKwkJcWxjbmljX3htaXRfZnJhbWUoc2tiLCBhZGFwdGVyLT5uZXRkZXYpOworCisJCW1zbGVlcCg1KTsKKworCQlxbGNuaWNfcHJvY2Vzc19yY3ZfcmluZ19kaWFnKHNkc19yaW5nKTsKKworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlpZiAoIWFkYXB0ZXItPmRpYWdfY250KQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IG1heF9zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOworCWludCByZXQ7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gcWxjbmljX2RpYWdfYWxsb2NfcmVzKG5ldGRldiwgUUxDTklDX0xPT1BCQUNLX1RFU1QpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYXJfaXQ7CisKKwlyZXQgPSBxbGNuaWNfc2V0X2lsYl9tb2RlKGFkYXB0ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCXJldCA9IHFsY25pY19kb19pbGJfdGVzdChhZGFwdGVyKTsKKworCXFsY25pY19jbGVhcl9pbGJfbW9kZShhZGFwdGVyKTsKKworZG9uZToKKwlxbGNuaWNfZGlhZ19mcmVlX3JlcyhuZXRkZXYsIG1heF9zZHNfcmluZ3MpOworCitjbGVhcl9pdDoKKwlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gbWF4X3Nkc19yaW5nczsKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2lycV90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisJaW50IHJldDsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBxbGNuaWNfZGlhZ19hbGxvY19yZXMobmV0ZGV2LCBRTENOSUNfSU5URVJSVVBUX1RFU1QpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYXJfaXQ7CisKKwlhZGFwdGVyLT5kaWFnX2NudCA9IDA7CisJcmV0ID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlRTENIQUxfVkVSU0lPTiwgYWRhcHRlci0+cG9ydG51bSwgMCwgMCwgMHgwMDAwMDAxMSk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJbXNsZWVwKDEwKTsKKworCXJldCA9ICFhZGFwdGVyLT5kaWFnX2NudDsKKworZG9uZToKKwlxbGNuaWNfZGlhZ19mcmVlX3JlcyhuZXRkZXYsIG1heF9zZHNfcmluZ3MpOworCitjbGVhcl9pdDoKKwlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gbWF4X3Nkc19yaW5nczsKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LAorCQkgICAgIHU2NCAqZGF0YSkKK3sKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHU2NCkgKiBRTENOSUNfVEVTVF9MRU4pOworCisJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCWRhdGFbMl0gPSBxbGNuaWNfaXJxX3Rlc3QoZGV2KTsKKwkJaWYgKGRhdGFbMl0pCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCisJCWRhdGFbM10gPSBxbGNuaWNfbG9vcGJhY2tfdGVzdChkZXYpOworCQlpZiAoZGF0YVszXSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwl9CisKKwlkYXRhWzBdID0gcWxjbmljX3JlZ190ZXN0KGRldik7CisJaWYgKGRhdGFbMF0pCisJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkvKiBsaW5rIHRlc3QgKi8KKwlkYXRhWzFdID0gKHU2NCkgcWxjbmljX3Rlc3RfbGluayhkZXYpOworCWlmIChkYXRhWzFdKQorCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKK3sKKwlpbnQgaW5kZXg7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1RFU1Q6CisJCW1lbWNweShkYXRhLCAqcWxjbmljX2dzdHJpbmdzX3Rlc3QsCisJCSAgICAgICBRTENOSUNfVEVTVF9MRU4gKiBFVEhfR1NUUklOR19MRU4pOworCQlicmVhazsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUUxDTklDX1NUQVRTX0xFTjsgaW5kZXgrKykgeworCQkJbWVtY3B5KGRhdGEgKyBpbmRleCAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCSAgICAgICBxbGNuaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnN0YXRfc3RyaW5nLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICogZGF0YSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleDsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFFMQ05JQ19TVEFUU19MRU47IGluZGV4KyspIHsKKwkJY2hhciAqcCA9CisJCSAgICAoY2hhciAqKWFkYXB0ZXIgKworCQkgICAgcWxjbmljX2dzdHJpbmdzX3N0YXRzW2luZGV4XS5zdGF0X29mZnNldDsKKwkJZGF0YVtpbmRleF0gPQorCQkgICAgKHFsY25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc2l6ZW9mX3N0YXQgPT0KKwkJICAgICBzaXplb2YodTY0KSkgPyAqKHU2NCAqKXA6KCoodTMyICopcCk7CisJfQorfQorCitzdGF0aWMgdTMyIHFsY25pY19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJYWRhcHRlci0+cnhfY3N1bSA9ICEhZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJaWYgKGRhdGEpCisJCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKwllbHNlCisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfYmxpbmtfbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWwpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcWxjbmljX2NvbmZpZ19sZWQoYWRhcHRlciwgMSwgMHhmKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHZhbCAqIDEwMDApOworCisJcmV0ID0gcWxjbmljX2NvbmZpZ19sZWQoYWRhcHRlciwgMCwgMHhmKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVzZXQgTEVEIGJsaW5rIHN0YXRlLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgd29sX2NmZzsKKworCXdvbC0+c3VwcG9ydGVkID0gMDsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJd29sX2NmZyA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkKKwkJd29sLT5zdXBwb3J0ZWQgfD0gV0FLRV9NQUdJQzsKKworCXdvbF9jZmcgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgd29sX2NmZzsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJd29sX2NmZyA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1dPTF9DT05GSUdfTlYpOworCWlmICghKHdvbF9jZmcgJiAoMSA8PCBhZGFwdGVyLT5wb3J0bnVtKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHKTsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJd29sX2NmZyB8PSAxVUwgPDwgYWRhcHRlci0+cG9ydG51bTsKKwllbHNlCisJCXdvbF9jZmcgJj0gfigxVUwgPDwgYWRhcHRlci0+cG9ydG51bSk7CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHLCB3b2xfY2ZnKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRoZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuIEN1cnJlbnRseSBvbmx5IG5vcm1hbCBpcyBzdXBwb3J0ZWQuCisgKiBJZiByeF9jb2FsZXNjZV91c2VjcyA9PSAwIG9yIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09IDAgdGhlbiBzZXQgdGhlCisgKiBmaXJtd2FyZSBjb2FsZXNjaW5nIHRvIGRlZmF1bHQuCisgKi8KK3N0YXRpYyBpbnQgcWxjbmljX3NldF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZXRoY29hbCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJKiBSZXR1cm4gRXJyb3IgaWYgdW5zdXBwb3J0ZWQgdmFsdWVzIG9yCisJKiB1bnN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBzZXQuCisJKi8KKwlpZiAoZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxIHx8CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSB8fAorCQlldGhjb2FsLT50eF9jb2FsZXNjZV91c2Vjc19pcnEgfHwKKwkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxIHx8CisJCWV0aGNvYWwtPnN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzIHx8CisJCWV0aGNvYWwtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSB8fAorCQlldGhjb2FsLT51c2VfYWRhcHRpdmVfdHhfY29hbGVzY2UgfHwKKwkJZXRoY29hbC0+cGt0X3JhdGVfbG93IHx8CisJCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdyB8fAorCQlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3NfbG93IHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyB8fAorCQlldGhjb2FsLT5wa3RfcmF0ZV9oaWdoIHx8CisJCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggfHwKKwkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCB8fAorCQlldGhjb2FsLT50eF9jb2FsZXNjZV91c2Vjc19oaWdoIHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFldGhjb2FsLT5yeF9jb2FsZXNjZV91c2VjcyB8fAorCQkhZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpIHsKKwkJYWRhcHRlci0+Y29hbC5mbGFncyA9IFFMQ05JQ19JTlRSX0RFRkFVTFQ7CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfdGltZV91cyA9CisJCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFM7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+Y29hbC5mbGFncyA9IDA7CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfdGltZV91cyA9CisJCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3BhY2tldHMgPQorCQlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKwl9CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF90aW1lX3VzID0gZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3M7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF9wYWNrZXRzID0KKwlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKworCXFsY25pY19jb25maWdfaW50cl9jb2FsZXNjZShhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsY25pY19nZXRfaW50cl9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmV0aGNvYWwpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfdGltZV91czsKKwlldGhjb2FsLT50eF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91czsKKwlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0czsKKwlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfcGFja2V0czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsY25pY19zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaHdfbHJvOworCisJaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIGRhdGEpOworCisJaHdfbHJvID0gKGRhdGEgJiBFVEhfRkxBR19MUk8pID8gUUxDTklDX0xST19FTkFCTEVEIDogMDsKKworCWlmIChxbGNuaWNfY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICgoaHdfbHJvID09IDApICYmIHFsY25pY19zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVJTzsKKworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyA9IHFsY25pY19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHFsY25pY19zZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvID0gcWxjbmljX2dldF9kcnZpbmZvLAorCS5nZXRfcmVnc19sZW4gPSBxbGNuaWNfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyA9IHFsY25pY19nZXRfcmVncywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfZWVwcm9tX2xlbiA9IHFsY25pY19nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbSA9IHFsY25pY19nZXRfZWVwcm9tLAorCS5nZXRfcmluZ3BhcmFtID0gcWxjbmljX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0gPSBxbGNuaWNfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0gPSBxbGNuaWNfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gcWxjbmljX3NldF9wYXVzZXBhcmFtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCisJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfdHNvID0gcWxjbmljX2dldF90c28sCisJLnNldF90c28gPSBxbGNuaWNfc2V0X3RzbywKKwkuZ2V0X3dvbCA9IHFsY25pY19nZXRfd29sLAorCS5zZXRfd29sID0gcWxjbmljX3NldF93b2wsCisJLnNlbGZfdGVzdCA9IHFsY25pY19kaWFnX3Rlc3QsCisJLmdldF9zdHJpbmdzID0gcWxjbmljX2dldF9zdHJpbmdzLAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHFsY25pY19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQgPSBxbGNuaWNfZ2V0X3NzZXRfY291bnQsCisJLmdldF9yeF9jc3VtID0gcWxjbmljX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSA9IHFsY25pY19zZXRfcnhfY3N1bSwKKwkuZ2V0X2NvYWxlc2NlID0gcWxjbmljX2dldF9pbnRyX2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgPSBxbGNuaWNfc2V0X2ludHJfY29hbGVzY2UsCisJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MgPSBxbGNuaWNfc2V0X2ZsYWdzLAorCS5waHlzX2lkID0gcWxjbmljX2JsaW5rX2xlZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY5Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaApAQCAtMCwwICsxLDkzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqLworCisjaWZuZGVmIF9fUUxDTklDX0hEUl9IXworI2RlZmluZSBfX1FMQ05JQ19IRFJfSF8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBUaGUgYmFzaWMgdW5pdCBvZiBhY2Nlc3Mgd2hlbiByZWFkaW5nL3dyaXRpbmcgY29udHJvbCByZWdpc3RlcnMuCisgKi8KKworZW51bSB7CisJUUxDTklDX0hXX0gwX0NIX0hVQl9BRFIgPSAweDA1LAorCVFMQ05JQ19IV19IMV9DSF9IVUJfQURSID0gMHgwRSwKKwlRTENOSUNfSFdfSDJfQ0hfSFVCX0FEUiA9IDB4MDMsCisJUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPSAweDAxLAorCVFMQ05JQ19IV19INF9DSF9IVUJfQURSID0gMHgwNiwKKwlRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA9IDB4MDcsCisJUUxDTklDX0hXX0g2X0NIX0hVQl9BRFIgPSAweDA4Cit9OworCisvKiAgSHViIDAgKi8KK2VudW0geworCVFMQ05JQ19IV19NTl9DUkJfQUdUX0FEUiA9IDB4MTUsCisJUUxDTklDX0hXX01TX0NSQl9BR1RfQURSID0gMHgyNQorfTsKKworLyogIEh1YiAxICovCitlbnVtIHsKKwlRTENOSUNfSFdfUFNfQ1JCX0FHVF9BRFIgPSAweDczLAorCVFMQ05JQ19IV19TU19DUkJfQUdUX0FEUiA9IDB4MjAsCisJUUxDTklDX0hXX1JQTVgzX0NSQl9BR1RfQURSID0gMHgwYiwKKwlRTENOSUNfSFdfUU1TX0NSQl9BR1RfQURSID0gMHgwMCwKKwlRTENOSUNfSFdfU1FHUzBfQ1JCX0FHVF9BRFIgPSAweDAxLAorCVFMQ05JQ19IV19TUUdTMV9DUkJfQUdUX0FEUiA9IDB4MDIsCisJUUxDTklDX0hXX1NRR1MyX0NSQl9BR1RfQURSID0gMHgwMywKKwlRTENOSUNfSFdfU1FHUzNfQ1JCX0FHVF9BRFIgPSAweDA0LAorCVFMQ05JQ19IV19DMkMwX0NSQl9BR1RfQURSID0gMHg1OCwKKwlRTENOSUNfSFdfQzJDMV9DUkJfQUdUX0FEUiA9IDB4NTksCisJUUxDTklDX0hXX0MyQzJfQ1JCX0FHVF9BRFIgPSAweDVhLAorCVFMQ05JQ19IV19SUE1YMl9DUkJfQUdUX0FEUiA9IDB4MGEsCisJUUxDTklDX0hXX1JQTVg0X0NSQl9BR1RfQURSID0gMHgwYywKKwlRTENOSUNfSFdfUlBNWDdfQ1JCX0FHVF9BRFIgPSAweDBmLAorCVFMQ05JQ19IV19SUE1YOV9DUkJfQUdUX0FEUiA9IDB4MTIsCisJUUxDTklDX0hXX1NNQl9DUkJfQUdUX0FEUiA9IDB4MTgKK307CisKKy8qICBIdWIgMiAqLworZW51bSB7CisJUUxDTklDX0hXX05JVV9DUkJfQUdUX0FEUiA9IDB4MzEsCisJUUxDTklDX0hXX0kyQzBfQ1JCX0FHVF9BRFIgPSAweDE5LAorCVFMQ05JQ19IV19JMkMxX0NSQl9BR1RfQURSID0gMHgyOSwKKworCVFMQ05JQ19IV19TTl9DUkJfQUdUX0FEUiA9IDB4MTAsCisJUUxDTklDX0hXX0kyUV9DUkJfQUdUX0FEUiA9IDB4MjAsCisJUUxDTklDX0hXX0xQQ19DUkJfQUdUX0FEUiA9IDB4MjIsCisJUUxDTklDX0hXX1JPTVVTQl9DUkJfQUdUX0FEUiA9IDB4MjEsCisJUUxDTklDX0hXX1FNX0NSQl9BR1RfQURSID0gMHg2NiwKKwlRTENOSUNfSFdfU1FHMF9DUkJfQUdUX0FEUiA9IDB4NjAsCisJUUxDTklDX0hXX1NRRzFfQ1JCX0FHVF9BRFIgPSAweDYxLAorCVFMQ05JQ19IV19TUUcyX0NSQl9BR1RfQURSID0gMHg2MiwKKwlRTENOSUNfSFdfU1FHM19DUkJfQUdUX0FEUiA9IDB4NjMsCisJUUxDTklDX0hXX1JQTVgxX0NSQl9BR1RfQURSID0gMHgwOSwKKwlRTENOSUNfSFdfUlBNWDVfQ1JCX0FHVF9BRFIgPSAweDBkLAorCVFMQ05JQ19IV19SUE1YNl9DUkJfQUdUX0FEUiA9IDB4MGUsCisJUUxDTklDX0hXX1JQTVg4X0NSQl9BR1RfQURSID0gMHgxMQorfTsKKworLyogIEh1YiAzICovCitlbnVtIHsKKwlRTENOSUNfSFdfUEhfQ1JCX0FHVF9BRFIgPSAweDFBLAorCVFMQ05JQ19IV19TUkVfQ1JCX0FHVF9BRFIgPSAweDUwLAorCVFMQ05JQ19IV19FR19DUkJfQUdUX0FEUiA9IDB4NTEsCisJUUxDTklDX0hXX1JQTVgwX0NSQl9BR1RfQURSID0gMHgwOAorfTsKKworLyogIEh1YiA0ICovCitlbnVtIHsKKwlRTENOSUNfSFdfUEVHTjBfQ1JCX0FHVF9BRFIgPSAweDQwLAorCVFMQ05JQ19IV19QRUdOMV9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHTjJfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR04zX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdOSV9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHTkRfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR05DX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdSMF9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHUjFfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR1IyX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdSM19DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHTjRfQ1JCX0FHVF9BRFIKK307CisKKy8qICBIdWIgNSAqLworZW51bSB7CisJUUxDTklDX0hXX1BFR1MwX0NSQl9BR1RfQURSID0gMHg0MCwKKwlRTENOSUNfSFdfUEVHUzFfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR1MyX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdTM19DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHU0lfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR1NEX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdTQ19DUkJfQUdUX0FEUgorfTsKKworLyogIEh1YiA2ICovCitlbnVtIHsKKwlRTENOSUNfSFdfQ0FTMF9DUkJfQUdUX0FEUiA9IDB4NDYsCisJUUxDTklDX0hXX0NBUzFfQ1JCX0FHVF9BRFIgPSAweDQ3LAorCVFMQ05JQ19IV19DQVMyX0NSQl9BR1RfQURSID0gMHg0OCwKKwlRTENOSUNfSFdfQ0FTM19DUkJfQUdUX0FEUiA9IDB4NDksCisJUUxDTklDX0hXX05DTV9DUkJfQUdUX0FEUiA9IDB4MTYsCisJUUxDTklDX0hXX1RNUl9DUkJfQUdUX0FEUiA9IDB4MTcsCisJUUxDTklDX0hXX1hETUFfQ1JCX0FHVF9BRFIgPSAweDA1LAorCVFMQ05JQ19IV19PQ00wX0NSQl9BR1RfQURSID0gMHgwNiwKKwlRTENOSUNfSFdfT0NNMV9DUkJfQUdUX0FEUiA9IDB4MDcKK307CisKKy8qICBGbG9hdGVycyAtIG5vbiBleGlzdGVudCBtb2R1bGVzICovCisjZGVmaW5lIFFMQ05JQ19IV19FRkNfUlBNWDBfQ1JCX0FHVF9BRFIJMHg2NworCisvKiAgVGhpcyBmaWVsZCBkZWZpbmVzIFBDSS9YIGFkciBbMjU6MjBdIG9mIGFnZW50cyBvbiB0aGUgQ1JCICovCitlbnVtIHsKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QSCA9IDAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUFMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfTU4sCisJUUxDTklDX0hXX1BYX01BUF9DUkJfTVMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdSMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUkUsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfTklVLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1FNTiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUU4wLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NRTjEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FOMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUU4zLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1FNUywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUVMwLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NRUzEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FTMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUVMzLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04yLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdORCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR05JLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUzAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdTMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1MyLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUzMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdTRCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1NJLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NOLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUjIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfRUcsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEgyLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BTMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9DQU0sCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQ0FTMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9DQVMxLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0NBUzIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQzJDMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9DMkMxLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1RJTVIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdSMywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YMywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YNCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YNSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YNiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YNywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9YRE1BLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0kyUSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9ST01VU0IsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQ0FTMywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YOCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9SUE1YOSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9PQ00wLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX09DTTEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU01CLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0kyQzAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfSTJDMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9MUEMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOQywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1IwCit9OworCisvKiAgVGhpcyBmaWVsZCBkZWZpbmVzIENSQiBhZHIgWzMxOjIwXSBvZiB0aGUgYWdlbnRzICovCisKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9NTglcCisJKChRTENOSUNfSFdfSDBfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19NTl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QSAlcCisJKChRTENOSUNfSFdfSDBfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QSF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9NUwlcCisJKChRTENOSUNfSFdfSDBfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19NU19DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BTCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BTX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NTCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NTX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgzCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVgzX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1FNUwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19RTVNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FTMAlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUdTMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMxCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NRR1MxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRUzIJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1FHUzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FTMwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUdTM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9DMkMwCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0MyQzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQzJDMQlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19DMkMxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgyCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVgyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg0CVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg0X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg3CVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg3X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg5CVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg5X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NNQglcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TTUJfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9OSVUJXAorCSgoUUxDTklDX0hXX0gyX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfTklVX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0kyQzAJXAorCSgoUUxDTklDX0hXX0gyX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfSTJDMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9JMkMxCVwKKwkoKFFMQ05JQ19IV19IMl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0kyQzFfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUkUJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1JFX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0VHCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0VHX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgwCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVgwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1FNTglcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19RTV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4wCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NRRzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMQlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUcxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjIJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1FHMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4zCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NRRzNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDEJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUlBNWDFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDUJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUlBNWDVfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDYJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUlBNWDZfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDgJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUlBNWDhfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQ0FTMAlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19DQVMwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzEJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfQ0FTMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9DQVMyCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0NBUzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQ0FTMwlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19DQVMzX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOSQlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdOSV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05ECVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR05EX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjAJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHTjBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOMQlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdOMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04yCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR04yX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjMJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHTjNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdONAlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdONF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05DCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR05DX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjAJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUjBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdSMQlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdSMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1IyCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1IyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjMJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUjNfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NJCVwKKwkoKFFMQ05JQ19IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1NJX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHU0QJXAorCSgoUUxDTklDX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHU0RfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMAlcCisJKChRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdTMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MxCVwKKwkoKFFMQ05JQ19IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1MxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzIJXAorCSgoUUxDTklDX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMwlcCisJKChRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdTM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NDCVwKKwkoKFFMQ05JQ19IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1NDX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQ0FNCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX05DTV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9USU1SCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1RNUl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1hETUFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU04JXAorCSgoUUxDTklDX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU05fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJRCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0kyUV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9ST01VU0IJXAorCSgoUUxDTklDX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUk9NVVNCX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX09DTTAJXAorCSgoUUxDTklDX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfT0NNMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9PQ00xCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX09DTTFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTFBDCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0xQQ19DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTENOSUNfU1JFX01JU0MJCShRTENOSUNfQ1JCX1NSRSArIDB4MDAwMmMpCisKKyNkZWZpbmUgUUxDTklDX0kyUV9DTFJfUENJX0hJCShRTENOSUNfQ1JCX0kyUSArIDB4MDAwMzQpCisKKyNkZWZpbmUgUk9NVVNCX0dMQgkJKFFMQ05JQ19DUkJfUk9NVVNCICsgMHgwMDAwMCkKKyNkZWZpbmUgUk9NVVNCX1JPTQkJKFFMQ05JQ19DUkJfUk9NVVNCICsgMHgxMDAwMCkKKworI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9TVEFUVVMJKFJPTVVTQl9HTEIgKyAweDAwMDQpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VUCShST01VU0JfR0xCICsgMHgwMDA4KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9QQURfR1BJT19JCShST01VU0JfR0xCICsgMHgwMDBjKQorI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9DQVNfUlNUCShST01VU0JfR0xCICsgMHgwMDM4KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9URVNUX01VWF9TRUwJKFJPTVVTQl9HTEIgKyAweDAwNDQpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfR0xCX1BFR1RVTkVfRE9ORQkoUk9NVVNCX0dMQiArIDB4MDA1YykKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HTEJfQ0hJUF9DTEtfQ1RSTAkoUk9NVVNCX0dMQiArIDB4MDBBOCkKKworI2RlZmluZSBRTENOSUNfUk9NVVNCX0dQSU8obikJCShST01VU0JfR0xCICsgMHg2MCArICg0ICogKG4pKSkKKworI2RlZmluZSBRTENOSUNfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUJKFJPTVVTQl9ST00gKyAweDAwMDQpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfUk9NX0FERFJFU1MJKFJPTVVTQl9ST00gKyAweDAwMDgpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfUk9NX1dEQVRBCQkoUk9NVVNCX1JPTSArIDB4MDAwYykKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9ST01fQUJZVEVfQ05UCShST01VU0JfUk9NICsgMHgwMDEwKQorI2RlZmluZSBRTENOSUNfUk9NVVNCX1JPTV9EVU1NWV9CWVRFX0NOVCAoUk9NVVNCX1JPTSArIDB4MDAxNCkKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9ST01fUkRBVEEJCShST01VU0JfUk9NICsgMHgwMDE4KQorCisvKiBMb2NrIElEcyBmb3IgUk9NIGxvY2sgKi8KKyNkZWZpbmUgUk9NX0xPQ0tfRFJJVkVSCTB4MGQ0MTczNDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICBEZWZpbml0aW9ucyBzcGVjaWZpYyB0byBNMjVQIGZsYXNoCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvKiBhbGwgYXJlIDFNQiB3aW5kb3dzICovCisKKyNkZWZpbmUgUUxDTklDX1BDSV9DUkJfV0lORE9XU0laRQkweDAwMTAwMDAwCisjZGVmaW5lIFFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhBKQlcCisJKFFMQ05JQ19QQ0lfQ1JCU1BBQ0UgKyAoQSkqUUxDTklDX1BDSV9DUkJfV0lORE9XU0laRSkKKworI2RlZmluZSBRTENOSUNfQ1JCX05JVQkJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX05JVSkKKyNkZWZpbmUgUUxDTklDX0NSQl9TUkUJCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9TUkUpCisjZGVmaW5lIFFMQ05JQ19DUkJfUk9NVVNCCVwKKwlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfUk9NVVNCKQorI2RlZmluZSBRTENOSUNfQ1JCX0kyUQkJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX0kyUSkKKyNkZWZpbmUgUUxDTklDX0NSQl9JMkMwIAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfSTJDMCkKKyNkZWZpbmUgUUxDTklDX0NSQl9TTUIJCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9TTUIpCisjZGVmaW5lIFFMQ05JQ19DUkJfTUFYCQlRTENOSUNfUENJX0NSQl9XSU5ET1coNjQpCisKKyNkZWZpbmUgUUxDTklDX0NSQl9QQ0lYX0hPU1QJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BIKQorI2RlZmluZSBRTENOSUNfQ1JCX1BDSVhfSE9TVDIJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BIMikKKyNkZWZpbmUgUUxDTklDX0NSQl9QRUdfTkVUXzAJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjApCisjZGVmaW5lIFFMQ05JQ19DUkJfUEVHX05FVF8xCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04xKQorI2RlZmluZSBRTENOSUNfQ1JCX1BFR19ORVRfMglRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOMikKKyNkZWZpbmUgUUxDTklDX0NSQl9QRUdfTkVUXzMJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjMpCisjZGVmaW5lIFFMQ05JQ19DUkJfUEVHX05FVF80CVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9TUVMyKQorI2RlZmluZSBRTENOSUNfQ1JCX1BFR19ORVRfRAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfUEdORCkKKyNkZWZpbmUgUUxDTklDX0NSQl9QRUdfTkVUX0kJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTkkpCisjZGVmaW5lIFFMQ05JQ19DUkJfRERSX05FVAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfTU4pCisjZGVmaW5lIFFMQ05JQ19DUkJfUURSX05FVAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfU04pCisKKyNkZWZpbmUgUUxDTklDX0NSQl9QQ0lYX01ECVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QUykKKyNkZWZpbmUgUUxDTklDX0NSQl9QQ0lFIAlRTENOSUNfQ1JCX1BDSVhfTUQKKworI2RlZmluZSBJU1JfSU5UX1ZFQ1RPUgkJKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX0lOVF9WRUNUT1IpKQorI2RlZmluZSBJU1JfSU5UX01BU0sJCShRTENOSUNfUENJWF9QU19SRUcoUENJWF9JTlRfTUFTSykpCisjZGVmaW5lIElTUl9JTlRfTUFTS19TTE9XCShRTENOSUNfUENJWF9QU19SRUcoUENJWF9JTlRfTUFTSykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVUwkoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVUykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0sJKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YxICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjEpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0YxICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjEpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GMikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjIgICAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GMikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMyAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0YzKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GMyAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0YzKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y0ICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjQpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y0ICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjQpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjUgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GNSkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjUgICAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GNSkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNiAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0Y2KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GNiAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y2KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y3ICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjcpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y3ICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjcpKQorCisjZGVmaW5lIFFMQ05JQ19QQ0lfTU5fMk0JKDApCisjZGVmaW5lIFFMQ05JQ19QQ0lfTVNfMk0JKDB4ODAwMDApCisjZGVmaW5lIFFMQ05JQ19QQ0lfT0NNMF8yTQkoMHgwMDBjMDAwMFVMKQorI2RlZmluZSBRTENOSUNfUENJX0NSQlNQQUNFCSgweDA2MDAwMDAwVUwpCisjZGVmaW5lIFFMQ05JQ19QQ0lfMk1CX1NJWkUJKDB4MDAyMDAwMDBVTCkKKyNkZWZpbmUgUUxDTklDX1BDSV9DQU1RTV8yTV9CQVNFCSgweDAwMGZmODAwVUwpCisjZGVmaW5lIFFMQ05JQ19QQ0lfQ0FNUU1fMk1fRU5EIAkoMHgwNDgwMDgwMFVMKQorCisjZGVmaW5lIFFMQ05JQ19DUkJfQ0FNCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9DQU0pCisKKyNkZWZpbmUgUUxDTklDX0FERFJfRERSX05FVAkoMHgwMDAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBRTENOSUNfQUREUl9ERFJfTkVUX01BWCAoMHgwMDAwMDAwMDBmZmZmZmZmVUxMKQorI2RlZmluZSBRTENOSUNfQUREUl9PQ00wCSgweDAwMDAwMDAyMDAwMDAwMDBVTEwpCisjZGVmaW5lIFFMQ05JQ19BRERSX09DTTBfTUFYCSgweDAwMDAwMDAyMDAwZmZmZmZVTEwpCisjZGVmaW5lIFFMQ05JQ19BRERSX09DTTEJKDB4MDAwMDAwMDIwMDQwMDAwMFVMTCkKKyNkZWZpbmUgUUxDTklDX0FERFJfT0NNMV9NQVgJKDB4MDAwMDAwMDIwMDRmZmZmZlVMTCkKKyNkZWZpbmUgUUxDTklDX0FERFJfUURSX05FVAkoMHgwMDAwMDAwMzAwMDAwMDAwVUxMKQorI2RlZmluZSBRTENOSUNfQUREUl9RRFJfTkVUX01BWF9QMyAoMHgwMDAwMDAwMzAzZmZmZmZmVUxMKQorCisvKgorICogICBSZWdpc3RlciBvZmZzZXRzIGZvciBNTgorICovCisjZGVmaW5lIFFMQ05JQ19NSVVfQ09OVFJPTAkoMHgwMDApCisjZGVmaW5lIFFMQ05JQ19NSVVfTU5fQ09OVFJPTAkoUUxDTklDX0NSQl9ERFJfTkVUK1FMQ05JQ19NSVVfQ09OVFJPTCkKKworLyogMjAwbXMgZGVsYXkgaW4gZWFjaCBsb29wICovCisjZGVmaW5lIFFMQ05JQ19OSVVfUEhZX1dBSVRMRU4JCTIwMDAwMAorLyogMTAgc2Vjb25kcyBiZWZvcmUgd2UgZ2l2ZSB1cCAqLworI2RlZmluZSBRTENOSUNfTklVX1BIWV9XQUlUTUFYCQk1MAorI2RlZmluZSBRTENOSUNfTklVX01BWF9HQkVfUE9SVFMJNAorI2RlZmluZSBRTENOSUNfTklVX01BWF9YR19QT1JUUwkJMgorCisjZGVmaW5lIFFMQ05JQ19OSVVfTU9ERQkJCShRTENOSUNfQ1JCX05JVSArIDB4MDAwMDApCisjZGVmaW5lIFFMQ05JQ19OSVVfR0JfUEFVU0VfQ1RMCQkoUUxDTklDX0NSQl9OSVUgKyAweDAwMzBjKQorI2RlZmluZSBRTENOSUNfTklVX1hHX1BBVVNFX0NUTAkJKFFMQ05JQ19DUkJfTklVICsgMHgwMDA5OCkKKworI2RlZmluZSBRTENOSUNfTklVX0dCX01BQ19DT05GSUdfMChJKQkJXAorCQkoUUxDTklDX0NSQl9OSVUgKyAweDMwMDAwICsgKEkpKjB4MTAwMDApCisjZGVmaW5lIFFMQ05JQ19OSVVfR0JfTUFDX0NPTkZJR18xKEkpCQlcCisJCShRTENOSUNfQ1JCX05JVSArIDB4MzAwMDQgKyAoSSkqMHgxMDAwMCkKKworCisjZGVmaW5lIFRFU1RfQUdUX0NUUkwJKDB4MDApCisKKyNkZWZpbmUgVEFfQ1RMX1NUQVJUCTEKKyNkZWZpbmUgVEFfQ1RMX0VOQUJMRQkyCisjZGVmaW5lIFRBX0NUTF9XUklURQk0CisjZGVmaW5lIFRBX0NUTF9CVVNZCTgKKworLyoKKyAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KKyAqLworI2RlZmluZSBNSVVfVEVTVF9BR1RfQkFTRQkJKDB4OTApCisKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0FERFJfTE8JCSgweDA0KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfQUREUl9ISQkJKDB4MDgpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfTE8JCSgweDEwKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfV1JEQVRBX0hJCQkoMHgxNCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQV9VUFBFUl9MTwkoMHgyMCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQV9VUFBFUl9ISQkoMHgyNCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQShpKQkJKDB4MTArKDB4MTAqKChpKT4+MSkpKyg0KigoaSkmMSkpKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBX0xPCQkoMHgxOCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1JEREFUQV9ISQkJKDB4MWMpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEFfVVBQRVJfTE8JKDB4MjgpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEFfVVBQRVJfSEkJKDB4MmMpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEEoaSkJCSgweDE4KygweDEwKigoaSk+PjEpKSsoNCooKGkpJjEpKSkKKworI2RlZmluZSBNSVVfVEVTVF9BR1RfQUREUl9NQVNLCQkweGZmZmZmZmY4CisjZGVmaW5lIE1JVV9URVNUX0FHVF9VUFBFUl9BRERSKG9mZikJKDApCisKKy8qCisgKiAgIFJlZ2lzdGVyIG9mZnNldHMgZm9yIE1TCisgKi8KKyNkZWZpbmUgU0lVX1RFU1RfQUdUX0JBU0UJCSgweDYwKQorCisjZGVmaW5lIFNJVV9URVNUX0FHVF9BRERSX0xPCQkoMHgwNCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX0FERFJfSEkJCSgweDE4KQorI2RlZmluZSBTSVVfVEVTVF9BR1RfV1JEQVRBX0xPCQkoMHgwOCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1dSREFUQV9ISQkJKDB4MGMpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9XUkRBVEEoaSkJCSgweDA4Kyg0KihpKSkpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9SRERBVEFfTE8JCSgweDEwKQorI2RlZmluZSBTSVVfVEVTVF9BR1RfUkREQVRBX0hJCQkoMHgxNCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1JEREFUQShpKQkJKDB4MTArKDQqKGkpKSkKKworI2RlZmluZSBTSVVfVEVTVF9BR1RfQUREUl9NQVNLCQkweDNmZmZmOAorI2RlZmluZSBTSVVfVEVTVF9BR1RfVVBQRVJfQUREUihvZmYpCSgob2ZmKT4+MjIpCisKKy8qIFhHIExpbmsgc3RhdHVzICovCisjZGVmaW5lIFhHX0xJTktfVVAJMHgxMAorI2RlZmluZSBYR19MSU5LX0RPV04JMHgyMAorCisjZGVmaW5lIFhHX0xJTktfVVBfUDMJMHgwMQorI2RlZmluZSBYR19MSU5LX0RPV05fUDMJMHgwMgorI2RlZmluZSBYR19MSU5LX1NUQVRFX1AzX01BU0sgMHhmCisjZGVmaW5lIFhHX0xJTktfU1RBVEVfUDMocGNpZm4sIHZhbCkgXAorCSgoKHZhbCkgPj4gKChwY2lmbikgKiA0KSkgJiBYR19MSU5LX1NUQVRFX1AzX01BU0spCisKKyNkZWZpbmUgUDNfTElOS19TUEVFRF9NSFoJMTAwCisjZGVmaW5lIFAzX0xJTktfU1BFRURfTUFTSwkweGZmCisjZGVmaW5lIFAzX0xJTktfU1BFRURfUkVHKHBjaWZuKQlcCisJKENSQl9QRl9MSU5LX1NQRUVEXzEgKyAoKChwY2lmbikgLyA0KSAqIDQpKQorI2RlZmluZSBQM19MSU5LX1NQRUVEX1ZBTChwY2lmbiwgcmVnKQlcCisJKCgocmVnKSA+PiAoOCAqICgocGNpZm4pICYgMHgzKSkpICYgUDNfTElOS19TUEVFRF9NQVNLKQorCisjZGVmaW5lIFFMQ05JQ19DQU1fUkFNX0JBU0UJKFFMQ05JQ19DUkJfQ0FNICsgMHgwMjAwMCkKKyNkZWZpbmUgUUxDTklDX0NBTV9SQU0ocmVnKQkoUUxDTklDX0NBTV9SQU1fQkFTRSArIChyZWcpKQorI2RlZmluZSBRTENOSUNfRldfVkVSU0lPTl9NQUpPUiAoUUxDTklDX0NBTV9SQU0oMHgxNTApKQorI2RlZmluZSBRTENOSUNfRldfVkVSU0lPTl9NSU5PUiAoUUxDTklDX0NBTV9SQU0oMHgxNTQpKQorI2RlZmluZSBRTENOSUNfRldfVkVSU0lPTl9TVUIJKFFMQ05JQ19DQU1fUkFNKDB4MTU4KSkKKyNkZWZpbmUgUUxDTklDX1JPTV9MT0NLX0lECShRTENOSUNfQ0FNX1JBTSgweDEwMCkpCisjZGVmaW5lIFFMQ05JQ19QSFlfTE9DS19JRAkoUUxDTklDX0NBTV9SQU0oMHgxMjApKQorI2RlZmluZSBRTENOSUNfQ1JCX1dJTl9MT0NLX0lECShRTENOSUNfQ0FNX1JBTSgweDEyNCkpCisKKyNkZWZpbmUgTklDX0NSQl9CQVNFCQkoUUxDTklDX0NBTV9SQU0oMHgyMDApKQorI2RlZmluZSBOSUNfQ1JCX0JBU0VfMgkJKFFMQ05JQ19DQU1fUkFNKDB4NzAwKSkKKyNkZWZpbmUgUUxDTklDX1JFRyhYKQkJKE5JQ19DUkJfQkFTRSsoWCkpCisjZGVmaW5lIFFMQ05JQ19SRUdfMihYKSAJKE5JQ19DUkJfQkFTRV8yKyhYKSkKKworI2RlZmluZSBRTENOSUNfQ0RSUF9DUkJfT0ZGU0VUCQkoUUxDTklDX1JFRygweDE4KSkKKyNkZWZpbmUgUUxDTklDX0FSRzFfQ1JCX09GRlNFVAkJKFFMQ05JQ19SRUcoMHgxYykpCisjZGVmaW5lIFFMQ05JQ19BUkcyX0NSQl9PRkZTRVQJCShRTENOSUNfUkVHKDB4MjApKQorI2RlZmluZSBRTENOSUNfQVJHM19DUkJfT0ZGU0VUCQkoUUxDTklDX1JFRygweDI0KSkKKyNkZWZpbmUgUUxDTklDX1NJR05fQ1JCX09GRlNFVAkJKFFMQ05JQ19SRUcoMHgyOCkpCisKKyNkZWZpbmUgQ1JCX0NNRFBFR19TVEFURQkJKFFMQ05JQ19SRUcoMHg1MCkpCisjZGVmaW5lIENSQl9SQ1ZQRUdfU1RBVEUJCShRTENOSUNfUkVHKDB4MTNjKSkKKworI2RlZmluZSBDUkJfWEdfU1RBVEVfUDMgCQkoUUxDTklDX1JFRygweDk4KSkKKyNkZWZpbmUgQ1JCX1BGX0xJTktfU1BFRURfMQkJKFFMQ05JQ19SRUcoMHhlOCkpCisjZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzIJCShRTENOSUNfUkVHKDB4ZWMpKQorCisjZGVmaW5lIENSQl9NUE9SVF9NT0RFCQkJKFFMQ05JQ19SRUcoMHhjNCkpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQJCQkoUUxDTklDX1JFRygweGNjKSkKKworI2RlZmluZSBDUkJfVEVNUF9TVEFURQkJCShRTENOSUNfUkVHKDB4MWI0KSkKKworI2RlZmluZSBDUkJfVjJQXzAJCQkoUUxDTklDX1JFRygweDI5MCkpCisjZGVmaW5lIENSQl9WMlAocG9ydCkJCQkoQ1JCX1YyUF8wKygocG9ydCkqNCkpCisjZGVmaW5lIENSQl9EUklWRVJfVkVSU0lPTgkJKFFMQ05JQ19SRUcoMHgyYTApKQorCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18wCQkoUUxDTklDX1JFRygweDFkOCkpCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18xCQkoUUxDTklDX1JFRygweDFlMCkpCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18yCQkoUUxDTklDX1JFRygweDFlNCkpCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18zCQkoUUxDTklDX1JFRygweDFlOCkpCisKKyNkZWZpbmUgQ1JCX0ZXX0NBUEFCSUxJVElFU18xCQkoUUxDTklDX0NBTV9SQU0oMHgxMjgpKQorI2RlZmluZSBDUkJfTUFDX0JMT0NLX1NUQVJUCQkoUUxDTklDX0NBTV9SQU0oMHgxYzApKQorCisvKgorICogY2FwYWJpbGl0aWVzIHJlZ2lzdGVyLCBjYW4gYmUgdXNlZCB0byBzZWxlY3RpdmVseSBlbmFibGUvZGlzYWJsZSBmZWF0dXJlcworICogZm9yIGJhY2t3YXJkIGNvbXBhYmlsaXR5CisgKi8KKyNkZWZpbmUgQ1JCX05JQ19DQVBBQklMSVRJRVNfSE9TVAlRTENOSUNfUkVHKDB4MWE4KQorI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19GVyAJUUxDTklDX1JFRygweDFkYykKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9IT1NUCQlRTENOSUNfUkVHKDB4MjcwKQorI2RlZmluZSBDUkJfTklDX01TSV9NT0RFX0ZXCSAgCVFMQ05JQ19SRUcoMHgyNzQpCisKKyNkZWZpbmUgSU5UUl9TQ0hFTUVfUEVSUE9SVAkgICAgICAJMHgxCisjZGVmaW5lIE1TSV9NT0RFX01VTFRJRlVOQwkgICAgICAJMHgxCisKKy8qIHVzZWQgZm9yIGV0aHRvb2wgdGVzdHMgKi8KKyNkZWZpbmUgQ1JCX1NDUkFUQ0hQQURfVEVTVAkgICAgUUxDTklDX1JFRygweDI4MCkKKworLyoKKyAqIENyYlBvcnRQaGFuQ250ckhpL0xvIGlzIHVzZWQgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiBIb3N0UGhhbnRvbUluZGV4IGFkZHJlc3MKKyAqIHdoaWNoIGNhbiBiZSByZWFkIGJ5IHRoZSBQaGFudG9tIGhvc3QgdG8gZ2V0IHByb2R1Y2VyL2NvbnN1bWVyIGluZGV4ZXMgZnJvbQorICogUGhhbnRvbS9DYXNwZXIuIElmIGl0IGlzIG5vdCBIT1NUX1NIQVJFRF9NRU1PUlksIHRoZW4gdGhlIGZvbGxvd2luZworICogcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGFkZHJlc3NlcyBvZiB0aGUgcmluZydzIHNoYXJlZCBtZW1vcnkKKyAqIG9uIHRoZSBQaGFudG9tLgorICovCisKKyNkZWZpbmUgcWxjbmljX2dldF90ZW1wX3ZhbCh4KQkJKCh4KSA+PiAxNikKKyNkZWZpbmUgcWxjbmljX2dldF90ZW1wX3N0YXRlKHgpCSgoeCkgJiAweGZmZmYpCisjZGVmaW5lIHFsY25pY19lbmNvZGVfdGVtcCh2YWwsIHN0YXRlKQkoKCh2YWwpIDw8IDE2KSB8IChzdGF0ZSkpCisKKy8qCisgKiBUZW1wZXJhdHVyZSBjb250cm9sLgorICovCitlbnVtIHsKKwlRTENOSUNfVEVNUF9OT1JNQUwgPSAweDEsCS8qIE5vcm1hbCBvcGVyYXRpbmcgcmFuZ2UgKi8KKwlRTENOSUNfVEVNUF9XQVJOLAkvKiBTb3VuZCBhbGVydCwgdGVtcGVyYXR1cmUgZ2V0dGluZyBoaWdoICovCisJUUxDTklDX1RFTVBfUEFOSUMJLyogRmF0YWwgZXJyb3IsIGhhcmR3YXJlIGhhcyBzaHV0IGRvd24uICovCit9OworCisvKiBMb2NrIElEcyBmb3IgUEhZIGxvY2sgKi8KKyNkZWZpbmUgUEhZX0xPQ0tfRFJJVkVSCQkweDQ0NTI0OTU2CisKKy8qIFVzZWQgZm9yIFBTIFBDSSBNZW1vcnkgYWNjZXNzICovCisjZGVmaW5lIFBDSVhfUFNfT1BfQUREUl9MTwkoMHgxMDAwMCkKKy8qICAgdmlhIENSQiAgKFBTIHNpZGUgb25seSkgICAgICovCisjZGVmaW5lIFBDSVhfUFNfT1BfQUREUl9ISQkoMHgxMDAwNCkKKworI2RlZmluZSBQQ0lYX0lOVF9WRUNUT1IgCSgweDEwMTAwKQorI2RlZmluZSBQQ0lYX0lOVF9NQVNLCQkoMHgxMDEwNCkKKworI2RlZmluZSBQQ0lYX09DTV9XSU5ET1cJCSgweDEwODAwKQorI2RlZmluZSBQQ0lYX09DTV9XSU5ET1dfUkVHKGZ1bmMpCShQQ0lYX09DTV9XSU5ET1cgKyAweDIwICogKGZ1bmMpKQorCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVUwkoMHgxMDExOCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YxCSgweDEwMTYwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjIJKDB4MTAxNjQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMwkoMHgxMDE2OCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y0CSgweDEwMzYwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjUJKDB4MTAzNjQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNgkoMHgxMDM2OCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y3CSgweDEwMzZjKQorCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0sJKDB4MTAxMjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjEJKDB4MTAxNzApCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjIJKDB4MTAxNzQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjMJKDB4MTAxNzgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjQJKDB4MTAzNzApCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjUJKDB4MTAzNzQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjYJKDB4MTAzNzgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjcJKDB4MTAzN2MpCisKKyNkZWZpbmUgUENJWF9NU0lfRihpKQkJKDB4MTMwMDArKChpKSo0KSkKKworI2RlZmluZSBRTENOSUNfUENJWF9QSF9SRUcocmVnKQkoUUxDTklDX0NSQl9QQ0lFICsgKHJlZykpCisjZGVmaW5lIFFMQ05JQ19QQ0lYX1BTX1JFRyhyZWcpCShRTENOSUNfQ1JCX1BDSVhfTUQgKyAocmVnKSkKKyNkZWZpbmUgUUxDTklDX1BDSUVfUkVHKHJlZykJKFFMQ05JQ19DUkJfUENJRSArIChyZWcpKQorCisjZGVmaW5lIFBDSUVfU0VNMF9MT0NLCQkoMHgxYzAwMCkKKyNkZWZpbmUgUENJRV9TRU0wX1VOTE9DSwkoMHgxYzAwNCkKKyNkZWZpbmUgUENJRV9TRU1fTE9DSyhOKQkoUENJRV9TRU0wX0xPQ0sgKyA4KihOKSkKKyNkZWZpbmUgUENJRV9TRU1fVU5MT0NLKE4pCShQQ0lFX1NFTTBfVU5MT0NLICsgOCooTikpCisKKyNkZWZpbmUgUENJRV9TRVRVUF9GVU5DVElPTgkoMHgxMjA0MCkKKyNkZWZpbmUgUENJRV9TRVRVUF9GVU5DVElPTjIJKDB4MTIwNDgpCisjZGVmaW5lIFBDSUVfTUlTQ0NGR19SQyAgICAgICAgICgweDEyMDZjKQorI2RlZmluZSBQQ0lFX1RHVF9TUExJVF9DSElDS0VOCSgweDEyMDgwKQorI2RlZmluZSBQQ0lFX0NISUNLRU4zCQkoMHgxMjBjOCkKKworI2RlZmluZSBJU1JfSU5UX1NUQVRFX1JFRyAgICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSUVfTUlTQ0NGR19SQykpCisjZGVmaW5lIFBDSUVfTUFYX01BU1RFUl9TUExJVAkoMHgxNDA0OCkKKworI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFX05PTkUJCTAKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9YRwkJMQorI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFX0dCCQkyCisjZGVmaW5lIFFMQ05JQ19QT1JUX01PREVfODAyXzNfQVAJMworI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHCTQKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FR18xRwk1CisjZGVmaW5lIFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfWEcJNgorI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFX0FERFIJCShRTENOSUNfQ0FNX1JBTSgweDI0KSkKKyNkZWZpbmUgUUxDTklDX1dPTF9QT1JUX01PREUJCShRTENOSUNfQ0FNX1JBTSgweDE5OCkpCisKKyNkZWZpbmUgUUxDTklDX1dPTF9DT05GSUdfTlYJCShRTENOSUNfQ0FNX1JBTSgweDE4NCkpCisjZGVmaW5lIFFMQ05JQ19XT0xfQ09ORklHCQkoUUxDTklDX0NBTV9SQU0oMHgxODgpKQorCisjZGVmaW5lIFFMQ05JQ19QRUdfVFVORV9NTl9QUkVTRU5UCTB4MQorI2RlZmluZSBRTENOSUNfUEVHX1RVTkVfQ0FQQUJJTElUWQkoUUxDTklDX0NBTV9SQU0oMHgwMmMpKQorCisjZGVmaW5lIFFMQ05JQ19ETUFfV0FUQ0hET0dfQ1RSTAkoUUxDTklDX0NBTV9SQU0oMHgxNCkpCisjZGVmaW5lIFFMQ05JQ19QRUdfQUxJVkVfQ09VTlRFUgkoUUxDTklDX0NBTV9SQU0oMHhiMCkpCisjZGVmaW5lIFFMQ05JQ19QRUdfSEFMVF9TVEFUVVMxIAkoUUxDTklDX0NBTV9SQU0oMHhhOCkpCisjZGVmaW5lIFFMQ05JQ19QRUdfSEFMVF9TVEFUVVMyIAkoUUxDTklDX0NBTV9SQU0oMHhhYykpCisjZGVmaW5lIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVAkoUUxDTklDX0NBTV9SQU0oMHgxMzgpKQorI2RlZmluZSBRTENOSUNfQ1JCX0RFVl9TVEFURQkJKFFMQ05JQ19DQU1fUkFNKDB4MTQwKSkKKworI2RlZmluZSBRTENOSUNfQ1JCX0RSVl9TVEFURSAgICAgICAgICAgICAgIChRTENOSUNfQ0FNX1JBTSgweDE0NCkpCisjZGVmaW5lIFFMQ05JQ19DUkJfRFJWX1NDUkFUQ0ggICAgICAgICAgICAgKFFMQ05JQ19DQU1fUkFNKDB4MTQ4KSkKKyNkZWZpbmUgUUxDTklDX0NSQl9ERVZfUEFSVElUSU9OX0lORk8gICAgICAoUUxDTklDX0NBTV9SQU0oMHgxNGMpKQorI2RlZmluZSBRTENOSUNfQ1JCX0RSVl9JRENfVkVSICAgICAgICAgICAgIChRTENOSUNfQ0FNX1JBTSgweDE0YykpCisKKwkJIC8qIERldmljZSBTdGF0ZSAqLworI2RlZmluZSBRTENOSUNfREVWX0NPTEQgCQkxCisjZGVmaW5lIFFMQ05JQ19ERVZfSU5JVEFMSVpJTkcJCTIKKyNkZWZpbmUgUUxDTklDX0RFVl9SRUFEWQkJMworI2RlZmluZSBRTENOSUNfREVWX05FRURfUkVTRVQJCTQKKyNkZWZpbmUgUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UCTUKKyNkZWZpbmUgUUxDTklDX0RFVl9GQUlMRUQJCTYKKworI2RlZmluZSBRTENOSUNfUkNPREVfRFJJVkVSX0lORk8JCTB4MjAwMDAwMDAKKyNkZWZpbmUgUUxDTklDX1JDT0RFX0RSSVZFUl9DQU5fUkVMT0FECQkweDQwMDAwMDAwCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9GQVRBTF9FUlJPUgkJMHg4MDAwMDAwMAorI2RlZmluZSBRTENOSUNfRldFUlJPUl9QRUdOVU0oY29kZSkJCSgoY29kZSkgJiAweGZmKQorI2RlZmluZSBRTENOSUNfRldFUlJPUl9DT0RFKGNvZGUpCQkoKGNvZGUgPj4gOCkgJiAweGZmZmZmKQorCisjZGVmaW5lIEZXX1BPTExfREVMQVkJCQkoMiAqIEhaKQorI2RlZmluZSBGV19GQUlMX1RIUkVTSAkJCTMKKyNkZWZpbmUgRldfUE9MTF9USFJFU0gJCQkxMAorCisjZGVmaW5lCUlTUl9NU0lfSU5UX1RSSUdHRVIoRlVOQykgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX01TSV9GKEZVTkMpKSkKKyNkZWZpbmUgSVNSX0xFR0FDWV9JTlRfVFJJR0dFUkVEKFZBTCkJKCgoVkFMKSAmIDB4MzAwKSA9PSAweDIwMCkKKworLyoKKyAqIFBDSSBJbnRlcnJ1cHQgVmVjdG9yIFZhbHVlcy4KKyAqLworI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YwCTB4MDA4MAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YxCTB4MDEwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YyCTB4MDIwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YzCTB4MDQwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y0CTB4MDgwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y1CTB4MTAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y2CTB4MjAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y3CTB4NDAwMAorCitzdHJ1Y3QgcWxjbmljX2xlZ2FjeV9pbnRyX3NldCB7CisJdTMyCWludF92ZWNfYml0OworCXUzMgl0Z3Rfc3RhdHVzX3JlZzsKKwl1MzIJdGd0X21hc2tfcmVnOworCXUzMglwY2lfaW50X3JlZzsKK307CisKKyNkZWZpbmUJUUxDTklDX0xFR0FDWV9JTlRSX0NPTkZJRwkJCQkJXAorewkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjAsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVUywJCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0ssCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoMCkgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMSwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YxLAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0YxLAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDEpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjIsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GMiwJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GMiwJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUigyKSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YzLAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjMsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjMsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoMykgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GNCwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y0LAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0Y0LAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDQpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjUsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNSwJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GNSwJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUig1KSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y2LAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjYsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjYsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoNikgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GNywJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y3LAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0Y3LAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDcpIH0sCVwKK30KKworLyogTklVIFJFR1MgKi8KKworI2RlZmluZSBfcWxjbmljX2NyYl9nZXRfYml0KHZhciwgYml0KSAgKCh2YXIgPj4gYml0KSAmIDB4MSkKKworLyoKKyAqIE5JVSBHQiBNQUMgQ29uZmlnIFJlZ2lzdGVyIDAgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQorICoKKyAqCUJpdCAwIDogZW5hYmxlX3R4ID0+IDE6ZW5hYmxlIGZyYW1lIHhtaXQsIDA6ZGlzYWJsZQorICoJQml0IDEgOiB0eF9zeW5jZWQgPT4gUi9POiB4bWl0IGVuYWJsZSBzeW5jaGVkIHRvIHhtaXQgc3RyZWFtCisgKglCaXQgMiA6IGVuYWJsZV9yeCA9PiAxOmVuYWJsZSBmcmFtZSByZWN2LCAwOmRpc2FibGUKKyAqCUJpdCAzIDogcnhfc3luY2VkID0+IFIvTzogcmVjdiBlbmFibGUgc3luY2hlZCB0byByZWN2IHN0cmVhbQorICoJQml0IDQgOiB0eF9mbG93Y3RsID0+IDE6ZW5hYmxlIHBhdXNlIGZyYW1lIGdlbmVyYXRpb24sIDA6ZGlzYWJsZQorICoJQml0IDUgOiByeF9mbG93Y3RsID0+IDE6YWN0IG9uIHJlY3YnZCBwYXVzZSBmcmFtZXMsIDA6aWdub3JlCisgKglCaXQgOCA6IGxvb3BiYWNrID0+IDE6bG9vcCBNQUMgeG1pdHMgdG8gTUFDIHJlY3ZzLCAwOm5vcm1hbAorICoJQml0IDE2OiB0eF9yZXNldF9wYiA9PiAxOnJlc2V0IGZyYW1lIHhtaXQgcHJvdG9jb2wgYmxrLCAwOm5vLW9wCisgKglCaXQgMTc6IHJ4X3Jlc2V0X3BiID0+IDE6cmVzZXQgZnJhbWUgcmVjdiBwcm90b2NvbCBibGssIDA6bm8tb3AKKyAqCUJpdCAxODogdHhfcmVzZXRfbWFjID0+IDE6cmVzZXQgZGF0YS9jdGwgbXVsdGlwbGV4ZXIgYmxrLCAwOm5vLW9wCisgKglCaXQgMTk6IHJ4X3Jlc2V0X21hYyA9PiAxOnJlc2V0IGN0bCBmcmFtZXMgJiB0aW1lcnMgYmxrLCAwOm5vLW9wCisgKglCaXQgMzE6IHNvZnRfcmVzZXQgPT4gMTpyZXNldCB0aGUgTUFDIGFuZCB0aGUgU0VSREVTLCAwOm5vLW9wCisgKi8KKyNkZWZpbmUgcWxjbmljX2diX3J4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDUpCisjZGVmaW5lIHFsY25pY19nYl9nZXRfcnhfZmxvd2N0bChjb25maWdfd29yZCkJXAorCV9xbGNuaWNfY3JiX2dldF9iaXQoKGNvbmZpZ193b3JkKSwgNSkKKyNkZWZpbmUgcWxjbmljX2diX3Vuc2V0X3J4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgNSkpCisKKy8qCisgKiBOSVUgR0IgUGF1c2UgQ3RsIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBxbGNuaWNfZ2Jfc2V0X2diMF9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJKChjb25maWdfd29yZCkgfD0gMSA8PCAwKQorI2RlZmluZSBxbGNuaWNfZ2Jfc2V0X2diMV9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJKChjb25maWdfd29yZCkgfD0gMSA8PCAyKQorI2RlZmluZSBxbGNuaWNfZ2Jfc2V0X2diMl9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJKChjb25maWdfd29yZCkgfD0gMSA8PCA0KQorI2RlZmluZSBxbGNuaWNfZ2Jfc2V0X2diM19tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJKChjb25maWdfd29yZCkgfD0gMSA8PCA2KQorCisjZGVmaW5lIHFsY25pY19nYl9nZXRfZ2IwX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwlfcWxjbmljX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDApCisjZGVmaW5lIHFsY25pY19nYl9nZXRfZ2IxX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwlfcWxjbmljX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDIpCisjZGVmaW5lIHFsY25pY19nYl9nZXRfZ2IyX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwlfcWxjbmljX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDQpCisjZGVmaW5lIHFsY25pY19nYl9nZXRfZ2IzX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwlfcWxjbmljX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDYpCisKKyNkZWZpbmUgcWxjbmljX2diX3Vuc2V0X2diMF9tYXNrKGNvbmZpZ193b3JkKSAgXAorCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCAwKSkKKyNkZWZpbmUgcWxjbmljX2diX3Vuc2V0X2diMV9tYXNrKGNvbmZpZ193b3JkKSAgXAorCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCAyKSkKKyNkZWZpbmUgcWxjbmljX2diX3Vuc2V0X2diMl9tYXNrKGNvbmZpZ193b3JkKSAgXAorCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCA0KSkKKyNkZWZpbmUgcWxjbmljX2diX3Vuc2V0X2diM19tYXNrKGNvbmZpZ193b3JkKSAgXAorCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCA2KSkKKworLyoKKyAqIE5JVSBYRyBQYXVzZSBDdGwgUmVnaXN0ZXIKKyAqCisgKiAgICAgIEJpdCAwICAgICAgIDogeGcwX21hc2sgPT4gMTpkaXNhYmxlIHR4IHBhdXNlIGZyYW1lcworICogICAgICBCaXQgMSAgICAgICA6IHhnMF9yZXF1ZXN0ID0+IDE6cmVxdWVzdCBzaW5nbGUgcGF1c2UgZnJhbWUKKyAqICAgICAgQml0IDIgICAgICAgOiB4ZzBfb25fb2ZmID0+IDE6cmVxdWVzdCBpcyBwYXVzZSBvbiwgMDpvZmYKKyAqICAgICAgQml0IDMgICAgICAgOiB4ZzFfbWFzayA9PiAxOmRpc2FibGUgdHggcGF1c2UgZnJhbWVzCisgKiAgICAgIEJpdCA0ICAgICAgIDogeGcxX3JlcXVlc3QgPT4gMTpyZXF1ZXN0IHNpbmdsZSBwYXVzZSBmcmFtZQorICogICAgICBCaXQgNSAgICAgICA6IHhnMV9vbl9vZmYgPT4gMTpyZXF1ZXN0IGlzIHBhdXNlIG9uLCAwOm9mZgorICovCisKKyNkZWZpbmUgcWxjbmljX3hnX3NldF94ZzBfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMCkKKyNkZWZpbmUgcWxjbmljX3hnX3NldF94ZzFfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMykKKworI2RlZmluZSBxbGNuaWNfeGdfZ2V0X3hnMF9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAwKQorI2RlZmluZSBxbGNuaWNfeGdfZ2V0X3hnMV9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAzKQorCisjZGVmaW5lIHFsY25pY194Z191bnNldF94ZzBfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMCkpCisjZGVmaW5lIHFsY25pY194Z191bnNldF94ZzFfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMykpCisKKy8qCisgKiBOSVUgWEcgUGF1c2UgQ3RsIFJlZ2lzdGVyCisgKgorICogICAgICBCaXQgMCAgICAgICA6IHhnMF9tYXNrID0+IDE6ZGlzYWJsZSB0eCBwYXVzZSBmcmFtZXMKKyAqICAgICAgQml0IDEgICAgICAgOiB4ZzBfcmVxdWVzdCA9PiAxOnJlcXVlc3Qgc2luZ2xlIHBhdXNlIGZyYW1lCisgKiAgICAgIEJpdCAyICAgICAgIDogeGcwX29uX29mZiA9PiAxOnJlcXVlc3QgaXMgcGF1c2Ugb24sIDA6b2ZmCisgKiAgICAgIEJpdCAzICAgICAgIDogeGcxX21hc2sgPT4gMTpkaXNhYmxlIHR4IHBhdXNlIGZyYW1lcworICogICAgICBCaXQgNCAgICAgICA6IHhnMV9yZXF1ZXN0ID0+IDE6cmVxdWVzdCBzaW5nbGUgcGF1c2UgZnJhbWUKKyAqICAgICAgQml0IDUgICAgICAgOiB4ZzFfb25fb2ZmID0+IDE6cmVxdWVzdCBpcyBwYXVzZSBvbiwgMDpvZmYKKyAqLworCisvKgorICogUEhZLVNwZWNpZmljIE1JSSBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgUUxDTklDX05JVV9HQl9NSUlfTUdNVF9BRERSX0FVVE9ORUcJCTQKKyNkZWZpbmUgUUxDTklDX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMJCTE3CisKKy8qCisgKiBQSFktU3BlY2lmaWMgU3RhdHVzIFJlZ2lzdGVyIChyZWcgMTcpLgorICoKKyAqIEJpdCAwICAgICAgOiBqYWJiZXIgPT4gMTpqYWJiZXIgZGV0ZWN0ZWQsIDA6bm90CisgKiBCaXQgMSAgICAgIDogcG9sYXJpdHkgPT4gMTpwb2xhcml0eSByZXZlcnNlZCwgMDpub3JtYWwKKyAqIEJpdCAyICAgICAgOiByZWN2cGF1c2UgPT4gMTpyZWNlaXZlIHBhdXNlIGVuYWJsZWQsIDA6ZGlzYWJsZWQKKyAqIEJpdCAzICAgICAgOiB4bWl0cGF1c2UgPT4gMTp0cmFuc21pdCBwYXVzZSBlbmFibGVkLCAwOmRpc2FibGVkCisgKiBCaXQgNCAgICAgIDogZW5lcmd5ZGV0ZWN0ID0+IDE6c2xlZXAsIDA6YWN0aXZlCisgKiBCaXQgNSAgICAgIDogZG93bnNoaWZ0ID0+IDE6ZG93bnNoaWZ0LCAwOm5vIGRvd25zaGlmdAorICogQml0IDYgICAgICA6IGNyb3Nzb3ZlciA9PiAxOk1ESVggKGNyb3Nzb3ZlciksIDA6TURJIChubyBjcm9zc292ZXIpCisgKiBCaXRzIDctOSAgIDogY2FibGVsZW4gPT4gbm90IHZhbGlkIGluIDEwTWIvcyBtb2RlCisgKgkJCTA6PDUwbSwgMTo1MC04MG0sIDI6ODAtMTEwbSwgMzoxMTAtMTQwbSwgNDo+MTQwbQorICogQml0IDEwICAgICA6IGxpbmsgPT4gMTpsaW5rIHVwLCAwOmxpbmsgZG93bgorICogQml0IDExICAgICA6IHJlc29sdmVkID0+IDE6c3BlZWQgYW5kIGR1cGxleCByZXNvbHZlZCwgMDpub3QgeWV0CisgKiBCaXQgMTIgICAgIDogcGFnZXJjdmQgPT4gMTpwYWdlIHJlY2VpdmVkLCAwOnBhZ2Ugbm90IHJlY2VpdmVkCisgKiBCaXQgMTMgICAgIDogZHVwbGV4ID0+IDE6ZnVsbCBkdXBsZXgsIDA6aGFsZiBkdXBsZXgKKyAqIEJpdHMgMTQtMTUgOiBzcGVlZCA9PiAwOjEwTWIvcywgMToxMDBNYi9zLCAyOjEwMDBNYi9zLCAzOnJzdmQKKyAqLworCisjZGVmaW5lIHFsY25pY19nZXRfcGh5X3NwZWVkKGNvbmZpZ193b3JkKSAoKChjb25maWdfd29yZCkgPj4gMTQpICYgMHgwMykKKworI2RlZmluZSBxbGNuaWNfc2V0X3BoeV9zcGVlZChjb25maWdfd29yZCwgdmFsKQlcCisJCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsICYgMHgwMykgPDwgMTQpKQorI2RlZmluZSBxbGNuaWNfc2V0X3BoeV9kdXBsZXgoY29uZmlnX3dvcmQpCVwKKwkJKChjb25maWdfd29yZCkgfD0gMSA8PCAxMykKKyNkZWZpbmUgcWxjbmljX2NsZWFyX3BoeV9kdXBsZXgoY29uZmlnX3dvcmQpCVwKKwkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDEzKSkKKworI2RlZmluZSBxbGNuaWNfZ2V0X3BoeV9saW5rKGNvbmZpZ193b3JkKQlcCisJCV9xbGNuaWNfY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEwKQorI2RlZmluZSBxbGNuaWNfZ2V0X3BoeV9kdXBsZXgoY29uZmlnX3dvcmQpCVwKKwkJX3FsY25pY19jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTMpCisKKyNkZWZpbmUgUUxDTklDX05JVV9OT05fUFJPTUlTQ19NT0RFCTAKKyNkZWZpbmUgUUxDTklDX05JVV9QUk9NSVNDX01PREUJCTEKKyNkZWZpbmUgUUxDTklDX05JVV9BTExNVUxUSV9NT0RFCTIKKworc3RydWN0IGNyYl8xMjhNXzJNX3N1Yl9ibG9ja19tYXAgeworCXVuc2lnbmVkIHZhbGlkOworCXVuc2lnbmVkIHN0YXJ0XzEyOE07CisJdW5zaWduZWQgZW5kXzEyOE07CisJdW5zaWduZWQgc3RhcnRfMk07Cit9OworCitzdHJ1Y3QgY3JiXzEyOE1fMk1fYmxvY2tfbWFweworCXN0cnVjdCBjcmJfMTI4TV8yTV9zdWJfYmxvY2tfbWFwIHN1Yl9ibG9ja1sxNl07Cit9OworI2VuZGlmCQkJCS8qIF9fUUxDTklDX0hEUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTRkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKQEAgLTAsMCArMSwxMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICovCisKKyNpbmNsdWRlICJxbGNuaWMuaCIKKworI2luY2x1ZGUgPG5ldC9pcC5oPgorCisjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCisjZGVmaW5lIE9DTV9XSU5fUDNQKGFkZHIpIChhZGRyICYgMHhmZmMwMDAwKQorCisjZGVmaW5lIEdFVF9NRU1fT0ZGU18yTShhZGRyKSAoYWRkciAmIE1BU0soMTgpKQorCisjZGVmaW5lIENSQl9CTEsob2ZmKQkoKG9mZiA+PiAyMCkgJiAweDNmKQorI2RlZmluZSBDUkJfU1VCQkxLKG9mZikJKChvZmYgPj4gMTYpICYgMHhmKQorI2RlZmluZSBDUkJfV0lORE9XXzJNCSgweDEzMDA2MCkKKyNkZWZpbmUgQ1JCX0hJKG9mZikJKChjcmJfaHViX2FndFtDUkJfQkxLKG9mZildIDw8IDIwKSB8ICgob2ZmKSAmIDB4ZjAwMDApKQorI2RlZmluZSBDUkJfSU5ESVJFQ1RfMk0JKDB4MWUwMDAwVUwpCisKKworI2lmbmRlZiByZWFkcQorc3RhdGljIGlubGluZSB1NjQgcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkbChhZGRyKSB8ICgoKHU2NCkgcmVhZGwoYWRkciArIDQpKSA8PCAzMkxMKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIHdyaXRlcQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKCgodTMyKSAodmFsKSksIChhZGRyKSk7CisJd3JpdGVsKCgodTMyKSAodmFsID4+IDMyKSksIChhZGRyICsgNCkpOworfQorI2VuZGlmCisKKyNkZWZpbmUgQUREUl9JTl9SQU5HRShhZGRyLCBsb3csIGhpZ2gpCVwKKwkoKChhZGRyKSA8IChoaWdoKSkgJiYgKChhZGRyKSA+PSAobG93KSkpCisKKyNkZWZpbmUgUENJX09GRlNFVF9GSVJTVF9SQU5HRShhZGFwdGVyLCBvZmYpICAgIFwKKwkoKGFkYXB0ZXIpLT5haHcucGNpX2Jhc2UwICsgKG9mZikpCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBjaV9iYXNlX29mZnNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9mZikKK3sKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQsIEZJUlNUX1BBR0VfR1JPVVBfRU5EKSkKKwkJcmV0dXJuIFBDSV9PRkZTRVRfRklSU1RfUkFOR0UoYWRhcHRlciwgb2ZmKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNyYl8xMjhNXzJNX2Jsb2NrX21hcAorY3JiXzEyOE1fMk1fbWFwWzY0XSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKKyAgICB7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkJLyogMDogUENJICovCisgICAge3t7MSwgMHgwMTAwMDAwLCAweDAxMDIwMDAsIDB4MTIwMDAwfSwJLyogMTogUENJRSAqLworCSAgezEsIDB4MDExMDAwMCwgMHgwMTIwMDAwLCAweDEzMDAwMH0sCisJICB7MSwgMHgwMTIwMDAwLCAweDAxMjIwMDAsIDB4MTI0MDAwfSwKKwkgIHsxLCAweDAxMzAwMDAsIDB4MDEzMjAwMCwgMHgxMjYwMDB9LAorCSAgezEsIDB4MDE0MDAwMCwgMHgwMTQyMDAwLCAweDEyODAwMH0sCisJICB7MSwgMHgwMTUwMDAwLCAweDAxNTIwMDAsIDB4MTJhMDAwfSwKKwkgIHsxLCAweDAxNjAwMDAsIDB4MDE3MDAwMCwgMHgxMTAwMDB9LAorCSAgezEsIDB4MDE3MDAwMCwgMHgwMTcyMDAwLCAweDEyZTAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MSwgMHgwMWUwMDAwLCAweDAxZTA4MDAsIDB4MTIyMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9IH0gfSwKKwl7e3sxLCAweDAyMDAwMDAsIDB4MDIxMDAwMCwgMHgxODAwMDB9IH0gfSwvKiAyOiBNTiAqLworICAgIHt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCSAgICAvKiAzOiAqLworICAgIHt7ezEsIDB4MDQwMDAwMCwgMHgwNDAxMDAwLCAweDE2OTAwMH0gfSB9LC8qIDQ6IFAyTlIxICovCisgICAge3t7MSwgMHgwNTAwMDAwLCAweDA1MTAwMDAsIDB4MTQwMDAwfSB9IH0sLyogNTogU1JFICAgKi8KKyAgICB7e3sxLCAweDA2MDAwMDAsIDB4MDYxMDAwMCwgMHgxYzAwMDB9IH0gfSwvKiA2OiBOSVUgICAqLworICAgIHt7ezEsIDB4MDcwMDAwMCwgMHgwNzA0MDAwLCAweDFiODAwMH0gfSB9LC8qIDc6IFFNICAgICovCisgICAge3t7MSwgMHgwODAwMDAwLCAweDA4MDIwMDAsIDB4MTcwMDAwfSwgIC8qIDg6IFNRTTAgICovCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezEsIDB4MDhmMDAwMCwgMHgwOGYyMDAwLCAweDE3MjAwMH0gfSB9LAorICAgIHt7ezEsIDB4MDkwMDAwMCwgMHgwOTAyMDAwLCAweDE3NDAwMH0sCS8qIDk6IFNRTTEqLworICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHsxLCAweDA5ZjAwMDAsIDB4MDlmMjAwMCwgMHgxNzYwMDB9IH0gfSwKKyAgICB7e3swLCAweDBhMDAwMDAsIDB4MGEwMjAwMCwgMHgxNzgwMDB9LAkvKiAxMDogU1FNMiovCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezEsIDB4MGFmMDAwMCwgMHgwYWYyMDAwLCAweDE3YTAwMH0gfSB9LAorICAgIHt7ezAsIDB4MGIwMDAwMCwgMHgwYjAyMDAwLCAweDE3YzAwMH0sCS8qIDExOiBTUU0zKi8KKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MSwgMHgwYmYwMDAwLCAweDBiZjIwMDAsIDB4MTdlMDAwfSB9IH0sCisJe3t7MSwgMHgwYzAwMDAwLCAweDBjMDQwMDAsIDB4MWQ0MDAwfSB9IH0sLyogMTI6IEkyUSAqLworCXt7ezEsIDB4MGQwMDAwMCwgMHgwZDA0MDAwLCAweDFhNDAwMH0gfSB9LC8qIDEzOiBUTVIgKi8KKwl7e3sxLCAweDBlMDAwMDAsIDB4MGUwNDAwMCwgMHgxYTAwMDB9IH0gfSwvKiAxNDogUk9NVVNCICovCisJe3t7MSwgMHgwZjAwMDAwLCAweDBmMDEwMDAsIDB4MTY0MDAwfSB9IH0sLyogMTU6IFBFRzQgKi8KKwl7e3swLCAweDEwMDAwMDAsIDB4MTAwNDAwMCwgMHgxYTgwMDB9IH0gfSwvKiAxNjogWERNQSAqLworCXt7ezEsIDB4MTEwMDAwMCwgMHgxMTAxMDAwLCAweDE2MDAwMH0gfSB9LC8qIDE3OiBQRUcwICovCisJe3t7MSwgMHgxMjAwMDAwLCAweDEyMDEwMDAsIDB4MTYxMDAwfSB9IH0sLyogMTg6IFBFRzEgKi8KKwl7e3sxLCAweDEzMDAwMDAsIDB4MTMwMTAwMCwgMHgxNjIwMDB9IH0gfSwvKiAxOTogUEVHMiAqLworCXt7ezEsIDB4MTQwMDAwMCwgMHgxNDAxMDAwLCAweDE2MzAwMH0gfSB9LC8qIDIwOiBQRUczICovCisJe3t7MSwgMHgxNTAwMDAwLCAweDE1MDEwMDAsIDB4MTY1MDAwfSB9IH0sLyogMjE6IFAyTkQgKi8KKwl7e3sxLCAweDE2MDAwMDAsIDB4MTYwMTAwMCwgMHgxNjYwMDB9IH0gfSwvKiAyMjogUDJOSSAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDIzOiAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDI0OiAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDI1OiAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDI2OiAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDI3OiAqLworCXt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCS8qIDI4OiAqLworCXt7ezEsIDB4MWQwMDAwMCwgMHgxZDEwMDAwLCAweDE5MDAwMH0gfSB9LC8qIDI5OiBNUyAqLworICAgIHt7ezEsIDB4MWUwMDAwMCwgMHgxZTAxMDAwLCAweDE2YTAwMH0gfSB9LC8qIDMwOiBQMk5SMiAqLworICAgIHt7ezEsIDB4MWYwMDAwMCwgMHgxZjEwMDAwLCAweDE1MDAwMH0gfSB9LC8qIDMxOiBFUEcgKi8KKwl7e3swfSB9IH0sCQkJCS8qIDMyOiBQQ0kgKi8KKwl7e3sxLCAweDIxMDAwMDAsIDB4MjEwMjAwMCwgMHgxMjAwMDB9LAkvKiAzMzogUENJRSAqLworCSAgezEsIDB4MjExMDAwMCwgMHgyMTIwMDAwLCAweDEzMDAwMH0sCisJICB7MSwgMHgyMTIwMDAwLCAweDIxMjIwMDAsIDB4MTI0MDAwfSwKKwkgIHsxLCAweDIxMzAwMDAsIDB4MjEzMjAwMCwgMHgxMjYwMDB9LAorCSAgezEsIDB4MjE0MDAwMCwgMHgyMTQyMDAwLCAweDEyODAwMH0sCisJICB7MSwgMHgyMTUwMDAwLCAweDIxNTIwMDAsIDB4MTJhMDAwfSwKKwkgIHsxLCAweDIxNjAwMDAsIDB4MjE3MDAwMCwgMHgxMTAwMDB9LAorCSAgezEsIDB4MjE3MDAwMCwgMHgyMTcyMDAwLCAweDEyZTAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9IH0gfSwKKwl7e3sxLCAweDIyMDAwMDAsIDB4MjIwNDAwMCwgMHgxYjAwMDB9IH0gfSwvKiAzNDogQ0FNICovCisJe3t7MH0gfSB9LAkJCQkvKiAzNTogKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM2OiAqLworCXt7ezB9IH0gfSwJCQkJLyogMzc6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzODogKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM5OiAqLworCXt7ezEsIDB4MjgwMDAwMCwgMHgyODA0MDAwLCAweDFhNDAwMH0gfSB9LC8qIDQwOiBUTVIgKi8KKwl7e3sxLCAweDI5MDAwMDAsIDB4MjkwMTAwMCwgMHgxNmIwMDB9IH0gfSwvKiA0MTogUDJOUjMgKi8KKwl7e3sxLCAweDJhMDAwMDAsIDB4MmEwMDQwMCwgMHgxYWM0MDB9IH0gfSwvKiA0MjogUlBNWDEgKi8KKwl7e3sxLCAweDJiMDAwMDAsIDB4MmIwMDQwMCwgMHgxYWM4MDB9IH0gfSwvKiA0MzogUlBNWDIgKi8KKwl7e3sxLCAweDJjMDAwMDAsIDB4MmMwMDQwMCwgMHgxYWNjMDB9IH0gfSwvKiA0NDogUlBNWDMgKi8KKwl7e3sxLCAweDJkMDAwMDAsIDB4MmQwMDQwMCwgMHgxYWQwMDB9IH0gfSwvKiA0NTogUlBNWDQgKi8KKwl7e3sxLCAweDJlMDAwMDAsIDB4MmUwMDQwMCwgMHgxYWQ0MDB9IH0gfSwvKiA0NjogUlBNWDUgKi8KKwl7e3sxLCAweDJmMDAwMDAsIDB4MmYwMDQwMCwgMHgxYWQ4MDB9IH0gfSwvKiA0NzogUlBNWDYgKi8KKwl7e3sxLCAweDMwMDAwMDAsIDB4MzAwMDQwMCwgMHgxYWRjMDB9IH0gfSwvKiA0ODogUlBNWDcgKi8KKwl7e3swLCAweDMxMDAwMDAsIDB4MzEwNDAwMCwgMHgxYTgwMDB9IH0gfSwvKiA0OTogWERNQSAqLworCXt7ezEsIDB4MzIwMDAwMCwgMHgzMjA0MDAwLCAweDFkNDAwMH0gfSB9LC8qIDUwOiBJMlEgKi8KKwl7e3sxLCAweDMzMDAwMDAsIDB4MzMwNDAwMCwgMHgxYTAwMDB9IH0gfSwvKiA1MTogUk9NVVNCICovCisJe3t7MH0gfSB9LAkJCQkvKiA1MjogKi8KKwl7e3sxLCAweDM1MDAwMDAsIDB4MzUwMDQwMCwgMHgxYWMwMDB9IH0gfSwvKiA1MzogUlBNWDAgKi8KKwl7e3sxLCAweDM2MDAwMDAsIDB4MzYwMDQwMCwgMHgxYWUwMDB9IH0gfSwvKiA1NDogUlBNWDggKi8KKwl7e3sxLCAweDM3MDAwMDAsIDB4MzcwMDQwMCwgMHgxYWU0MDB9IH0gfSwvKiA1NTogUlBNWDkgKi8KKwl7e3sxLCAweDM4MDAwMDAsIDB4MzgwNDAwMCwgMHgxZDAwMDB9IH0gfSwvKiA1NjogT0NNMCAqLworCXt7ezEsIDB4MzkwMDAwMCwgMHgzOTA0MDAwLCAweDFiNDAwMH0gfSB9LC8qIDU3OiBDUllQVE8gKi8KKwl7e3sxLCAweDNhMDAwMDAsIDB4M2EwNDAwMCwgMHgxZDgwMDB9IH0gfSwvKiA1ODogU01CICovCisJe3t7MH0gfSB9LAkJCQkvKiA1OTogSTJDMCAqLworCXt7ezB9IH0gfSwJCQkJLyogNjA6IEkyQzEgKi8KKwl7e3sxLCAweDNkMDAwMDAsIDB4M2QwNDAwMCwgMHgxZDgwMDB9IH0gfSwvKiA2MTogTFBDICovCisJe3t7MSwgMHgzZTAwMDAwLCAweDNlMDEwMDAsIDB4MTY3MDAwfSB9IH0sLyogNjI6IFAyTkMgKi8KKwl7e3sxLCAweDNmMDAwMDAsIDB4M2YwMTAwMCwgMHgxNjgwMDB9IH0gfQkvKiA2MzogUDJOUjAgKi8KK307CisKKy8qCisgKiB0b3AgMTIgYml0cyBvZiBjcmIgaW50ZXJuYWwgYWRkcmVzcyAoaHViLCBhZ2VudCkKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNyYl9odWJfYWd0WzY0XSA9IHsKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUFMsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9NTiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX01TLAorCTAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUkUsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9OSVUsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9RTU4sCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4wLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjIsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4zLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJRLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfVElNUiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JPTVVTQiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjQsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjEsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04yLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOMywKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkQsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05JLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzEsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MyLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMywKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTSSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NOLAorCTAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9FRywKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUFMsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9DQU0sCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfVElNUiwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDEsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgzLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDQsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg2LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDcsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJRLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUk9NVVNCLAorCTAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg4LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDksCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9PQ00wLAorCTAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TTUIsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9JMkMwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJDMSwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOQywKKwkwLAorfTsKKworLyogIFBDSSBXaW5kb3dpbmcgZm9yIEREUiByZWdpb25zLiAgKi8KKworI2RlZmluZSBRTENOSUNfUENJRV9TRU1fVElNRU9VVAkxMDAwMAorCitpbnQKK3FsY25pY19wY2llX3NlbV9sb2NrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IHNlbSwgdTMyIGlkX3JlZykKK3sKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCWRvbmUgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QQ0lFX1JFRyhQQ0lFX1NFTV9MT0NLKHNlbSkpKTsKKwkJaWYgKGRvbmUgPT0gMSkKKwkJCWJyZWFrOworCQlpZiAoKyt0aW1lb3V0ID49IFFMQ05JQ19QQ0lFX1NFTV9USU1FT1VUKQorCQkJcmV0dXJuIC1FSU87CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaWRfcmVnKQorCQlRTENXUjMyKGFkYXB0ZXIsIGlkX3JlZywgYWRhcHRlci0+cG9ydG51bSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorcWxjbmljX3BjaWVfc2VtX3VubG9jayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBzZW0pCit7CisJUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUENJRV9SRUcoUENJRV9TRU1fVU5MT0NLKHNlbSkpKTsKK30KKworc3RhdGljIGludAorcWxjbmljX3NlbmRfY21kX2Rlc2NzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpjbWRfZGVzY19hcnIsIGludCBucl9kZXNjKQoreworCXUzMiBpLCBwcm9kdWNlciwgY29uc3VtZXI7CisJc3RydWN0IHFsY25pY19jbWRfYnVmZmVyICpwYnVmOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2M7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CisKKwlpID0gMDsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU87CisKKwl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKwlfX25ldGlmX3R4X2xvY2tfYmgodHhfcmluZy0+dHhxKTsKKworCXByb2R1Y2VyID0gdHhfcmluZy0+cHJvZHVjZXI7CisJY29uc3VtZXIgPSB0eF9yaW5nLT5zd19jb25zdW1lcjsKKworCWlmIChucl9kZXNjID49IHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSkgeworCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4X3JpbmctPnR4cSk7CisJCV9fbmV0aWZfdHhfdW5sb2NrX2JoKHR4X3JpbmctPnR4cSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZG8geworCQljbWRfZGVzYyA9ICZjbWRfZGVzY19hcnJbaV07CisKKwkJcGJ1ZiA9ICZ0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CisJCXBidWYtPnNrYiA9IE5VTEw7CisJCXBidWYtPmZyYWdfY291bnQgPSAwOworCisJCW1lbWNweSgmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXSwKKwkJCSZjbWRfZGVzY19hcnJbaV0sIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJCWkrKzsKKworCX0gd2hpbGUgKGkgIT0gbnJfZGVzYyk7CisKKwl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCisJcWxjbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgdHhfcmluZyk7CisKKwlfX25ldGlmX3R4X3VubG9ja19iaCh0eF9yaW5nLT50eHEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zcmVfbWFjYWRkcl9jaGFuZ2Uoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCAqYWRkciwKKwkJCQl1bnNpZ25lZCBvcCkKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOworCXN0cnVjdCBxbGNuaWNfbWFjX3JlcSAqbWFjX3JlcTsKKwl1NjQgd29yZDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7CisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX01BQ19FVkVOVCB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwltYWNfcmVxID0gKHN0cnVjdCBxbGNuaWNfbWFjX3JlcSAqKSZyZXEud29yZHNbMF07CisJbWFjX3JlcS0+b3AgPSBvcDsKKwltZW1jcHkobWFjX3JlcS0+bWFjX2FkZHIsIGFkZHIsIDYpOworCisJcmV0dXJuIHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX25pY19hZGRfbWFjKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJdTggKmFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKmRlbF9saXN0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHFsY25pY19tYWNfbGlzdF9zICpjdXI7CisKKwkvKiBsb29rIHVwIGlmIGFscmVhZHkgZXhpc3RzICovCisJbGlzdF9mb3JfZWFjaChoZWFkLCBkZWxfbGlzdCkgeworCQljdXIgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBxbGNuaWNfbWFjX2xpc3RfcywgbGlzdCk7CisKKwkJaWYgKG1lbWNtcChhZGRyLCBjdXItPm1hY19hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQkJbGlzdF9tb3ZlX3RhaWwoaGVhZCwgJmFkYXB0ZXItPm1hY19saXN0KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJY3VyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsY25pY19tYWNfbGlzdF9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKGN1ciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBhZGQgbWFjIGFkZHJlc3MgZmlsdGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShjdXItPm1hY19hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisJbGlzdF9hZGRfdGFpbCgmY3VyLT5saXN0LCAmYWRhcHRlci0+bWFjX2xpc3QpOworCisJcmV0dXJuIHFsY25pY19zcmVfbWFjYWRkcl9jaGFuZ2UoYWRhcHRlciwKKwkJCQljdXItPm1hY19hZGRyLCBRTENOSUNfTUFDX0FERCk7Cit9CisKK3ZvaWQgcWxjbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwl1MzIgbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9EUk9QOworCUxJU1RfSEVBRChkZWxfbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MgKmN1cjsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYWRhcHRlci0+bWFjX2xpc3QsICZkZWxfbGlzdCk7CisKKwlxbGNuaWNfbmljX2FkZF9tYWMoYWRhcHRlciwgYWRhcHRlci0+bWFjX2FkZHIsICZkZWxfbGlzdCk7CisJcWxjbmljX25pY19hZGRfbWFjKGFkYXB0ZXIsIGJjYXN0X2FkZHIsICZkZWxfbGlzdCk7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1vZGUgPSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX0FMTDsKKwkJZ290byBzZW5kX2Z3X2NtZDsKKwl9CisKKwlpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJICAgIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpIHsKKwkJbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEk7CisJCWdvdG8gc2VuZF9md19jbWQ7CisJfQorCisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikgeworCQkJcWxjbmljX25pY19hZGRfbWFjKGFkYXB0ZXIsIG1jX3B0ci0+ZG1pX2FkZHIsCisJCQkJCQkJJmRlbF9saXN0KTsKKwkJfQorCX0KKworc2VuZF9md19jbWQ6CisJcWxjbmljX25pY19zZXRfcHJvbWlzYyhhZGFwdGVyLCBtb2RlKTsKKwloZWFkID0gJmRlbF9saXN0OworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCQljdXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBxbGNuaWNfbWFjX2xpc3RfcywgbGlzdCk7CisKKwkJcWxjbmljX3NyZV9tYWNhZGRyX2NoYW5nZShhZGFwdGVyLAorCQkJCWN1ci0+bWFjX2FkZHIsIFFMQ05JQ19NQUNfREVMKTsKKwkJbGlzdF9kZWwoJmN1ci0+bGlzdCk7CisJCWtmcmVlKGN1cik7CisJfQorfQorCitpbnQgcWxjbmljX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtb2RlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TRVRfVlBPUlRfTUlTU19NT0RFIHwKKwkJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChtb2RlKTsKKworCXJldHVybiBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwKKwkJCQkoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7Cit9CisKK3ZvaWQgcWxjbmljX2ZyZWVfbWFjX2xpc3Qoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfbWFjX2xpc3RfcyAqY3VyOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmYWRhcHRlci0+bWFjX2xpc3Q7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJY3VyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MsIGxpc3QpOworCQlxbGNuaWNfc3JlX21hY2FkZHJfY2hhbmdlKGFkYXB0ZXIsCisJCQkJY3VyLT5tYWNfYWRkciwgUUxDTklDX01BQ19ERUwpOworCQlsaXN0X2RlbCgmY3VyLT5saXN0KTsKKwkJa2ZyZWUoY3VyKTsKKwl9Cit9CisKKyNkZWZpbmUJUUxDTklDX0NPTkZJR19JTlRSX0NPQUxFU0NFCTMKKworLyoKKyAqIFNlbmQgdGhlIGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlciBzZXQgYnkgZXRodG9vbCB0byB0aGUgY2FyZC4KKyAqLworaW50IHFsY25pY19jb25maWdfaW50cl9jb2FsZXNjZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZFs2XTsKKwlpbnQgcnYsIGk7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmRbMF0gPSBRTENOSUNfQ09ORklHX0lOVFJfQ09BTEVTQ0UgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmRbMF0pOworCisJbWVtY3B5KCZ3b3JkWzBdLCAmYWRhcHRlci0+Y29hbCwgc2l6ZW9mKGFkYXB0ZXItPmNvYWwpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlyZXEud29yZHNbaV0gPSBjcHVfdG9fbGU2NCh3b3JkW2ldKTsKKworCXJ2ID0gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHNlbmQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVyc1xuIik7CisKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBxbGNuaWNfY29uZmlnX2h3X2xybyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnY7CisKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0xST19FTkFCTEVEKSA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTyB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChlbmFibGUpOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJDb3VsZCBub3Qgc2VuZCBjb25maWd1cmUgaHcgbHJvIHJlcXVlc3RcbiIpOworCisJYWRhcHRlci0+ZmxhZ3MgXj0gUUxDTklDX0xST19FTkFCTEVEOworCisJcmV0dXJuIHJ2OworfQorCitpbnQgcWxjbmljX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJaWYgKCEhKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0JSSURHRV9FTkFCTEVEKSA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0JSSURHSU5HIHwKKwkJKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKKworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KGVuYWJsZSk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJIkNvdWxkIG5vdCBzZW5kIGNvbmZpZ3VyZSBicmlkZ2UgbW9kZSByZXF1ZXN0XG4iKTsKKworCWFkYXB0ZXItPmZsYWdzIF49IFFMQ05JQ19CUklER0VfRU5BQkxFRDsKKworCXJldHVybiBydjsKK30KKworCisjZGVmaW5lIFJTU19IQVNIVFlQRV9JUF9UQ1AJMHgzCisKK2ludCBxbGNuaWNfY29uZmlnX3JzcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgaSwgcnY7CisKKwljb25zdCB1NjQga2V5W10gPSB7IDB4YmVhYzAxZmE2YTQyYjczYlVMTCwgMHg4MDMwZjIwYzc3Y2IyZGEzVUxMLAorCQkJMHhhZTdiMzBiNGQwY2EyYmNiVUxMLCAweDQzYTM4ZmIwNDE2NzI1M2RVTEwsCisJCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwgfTsKKworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19SU1MgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJLyoKKwkgKiBSU1MgcmVxdWVzdDoKKwkgKiBiaXRzIDMtMDogaGFzaF9tZXRob2QKKwkgKiAgICAgIDUtNDogaGFzaF90eXBlX2lwdjQKKwkgKgk3LTY6IGhhc2hfdHlwZV9pcHY2CisJICoJICA4OiBlbmFibGUKKwkgKiAgICAgICAgOTogdXNlIGluZGlyZWN0aW9uIHRhYmxlCisJICogICAgNDctMTA6IHJlc2VydmVkCisJICogICAgNjMtNDg6IGluZGlyZWN0aW9uIHRhYmxlIG1hc2sKKwkgKi8KKwl3b3JkID0gICgodTY0KShSU1NfSEFTSFRZUEVfSVBfVENQICYgMHgzKSA8PCA0KSB8CisJCSgodTY0KShSU1NfSEFTSFRZUEVfSVBfVENQICYgMHgzKSA8PCA2KSB8CisJCSgodTY0KShlbmFibGUgJiAweDEpIDw8IDgpIHwKKwkJKCgweDdVTEwpIDw8IDQ4KTsKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCh3b3JkKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlyZXEud29yZHNbaSsxXSA9IGNwdV90b19sZTY0KGtleVtpXSk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LCAiY291bGQgbm90IGNvbmZpZ3VyZSBSU1NcbiIpOworCisJcmV0dXJuIHJ2OworfQorCitpbnQgcWxjbmljX2NvbmZpZ19pcGFkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgaXAsIGludCBjbWQpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lQQUREUiB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChjbWQpOworCXJlcS53b3Jkc1sxXSA9IGNwdV90b19sZTY0KGlwKTsKKworCXJ2ID0gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJImNvdWxkIG5vdCBub3RpZnkgJXMgSVAgMHgleCByZXVxZXN0XG4iLAorCQkJCShjbWQgPT0gUUxDTklDX0lQX1VQKSA/ICJBZGQiIDogIlJlbW92ZSIsIGlwKTsKKworCXJldHVybiBydjsKK30KKworaW50IHFsY25pY19saW5rZXZlbnRfcmVxdWVzdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfR0VUX0xJTktFVkVOVCB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoZW5hYmxlIHwgKGVuYWJsZSA8PCA4KSk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJjb3VsZCBub3QgY29uZmlndXJlIGxpbmsgbm90aWZpY2F0aW9uXG4iKTsKKworCXJldHVybiBydjsKK30KKworaW50IHFsY25pY19zZW5kX2xyb19jbGVhbnVwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOworCXU2NCB3b3JkOworCWludCBydjsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7CisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9MUk9fUkVRVUVTVCB8CisJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpIHwKKwkJKCh1NjQpUUxDTklDX0xST19SRVFVRVNUX0NMRUFOVVAgPDwgNTYpIDsKKworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSAiY291bGQgbm90IGNsZWFudXAgbHJvIGZsb3dzXG4iKTsKKworCXJldHVybiBydjsKK30KKworLyoKKyAqIHFsY25pY19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKyAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCisKK2ludCBxbGNuaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbXR1KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJjID0gMDsKKworCWlmIChtdHUgPiBQM19NQVhfTVRVKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LCAibXR1ID4gJWQgYnl0ZXMgdW5zdXBwb3J0ZWRcbiIsCisJCQkJCQlQM19NQVhfTVRVKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSBxbGNuaWNfZndfY21kX3NldF9tdHUoYWRhcHRlciwgbXR1KTsKKworCWlmICghcmMpCisJCW5ldGRldi0+bXR1ID0gbXR1OworCisJcmV0dXJuIHJjOworfQorCitpbnQgcWxjbmljX2dldF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqbWFjKQoreworCXUzMiBjcmJhZGRyLCBtYWNfaGksIG1hY19sbzsKKwlpbnQgcGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisKKwljcmJhZGRyID0gQ1JCX01BQ19CTE9DS19TVEFSVCArCisJCSg0ICogKChwY2lfZnVuYy8yKSAqIDMpKSArICg0ICogKHBjaV9mdW5jICYgMSkpOworCisJbWFjX2xvID0gUUxDUkQzMihhZGFwdGVyLCBjcmJhZGRyKTsKKwltYWNfaGkgPSBRTENSRDMyKGFkYXB0ZXIsIGNyYmFkZHIrNCk7CisKKwlpZiAocGNpX2Z1bmMgJiAxKQorCQkqbWFjID0gbGU2NF90b19jcHUoKG1hY19sbyA+PiAxNikgfCAoKHU2NCltYWNfaGkgPDwgMTYpKTsKKwllbHNlCisJCSptYWMgPSBsZTY0X3RvX2NwdSgodTY0KW1hY19sbyB8ICgodTY0KW1hY19oaSA8PCAzMikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGFuZ2VzIHRoZSBDUkIgd2luZG93IHRvIHRoZSBzcGVjaWZpZWQgd2luZG93LgorICovCisgLyogUmV0dXJucyA8IDAgaWYgb2ZmIGlzIG5vdCB2YWxpZCwKKyAqCSAxIGlmIHdpbmRvdyBhY2Nlc3MgaXMgbmVlZGVkLiAnb2ZmJyBpcyBzZXQgdG8gb2Zmc2V0IGZyb20KKyAqCSAgIENSQiBzcGFjZSBpbiAxMjhNIHBjaSBtYXAKKyAqCSAwIGlmIG5vIHdpbmRvdyBhY2Nlc3MgaXMgbmVlZGVkLiAnb2ZmJyBpcyBzZXQgdG8gMk0gYWRkcgorICogSW46ICdvZmYnIGlzIG9mZnNldCBmcm9tIGJhc2UgaW4gMTI4TSBwY2kgbWFwCisgKi8KK3N0YXRpYyBpbnQKK3FsY25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJdWxvbmcgb2ZmLCB2b2lkIF9faW9tZW0gKiphZGRyKQoreworCWNvbnN0IHN0cnVjdCBjcmJfMTI4TV8yTV9zdWJfYmxvY2tfbWFwICptOworCisJaWYgKChvZmYgPj0gUUxDTklDX0NSQl9NQVgpIHx8IChvZmYgPCBRTENOSUNfUENJX0NSQlNQQUNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvZmYgLT0gUUxDTklDX1BDSV9DUkJTUEFDRTsKKworCS8qCisJICogVHJ5IGRpcmVjdCBtYXAKKwkgKi8KKwltID0gJmNyYl8xMjhNXzJNX21hcFtDUkJfQkxLKG9mZildLnN1Yl9ibG9ja1tDUkJfU1VCQkxLKG9mZildOworCisJaWYgKG0tPnZhbGlkICYmIChtLT5zdGFydF8xMjhNIDw9IG9mZikgJiYgKG0tPmVuZF8xMjhNID4gb2ZmKSkgeworCQkqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBtLT5zdGFydF8yTSArCisJCQkob2ZmIC0gbS0+c3RhcnRfMTI4TSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm90IGluIGRpcmVjdCBtYXAsIHVzZSBjcmIgd2luZG93CisJICovCisJKmFkZHIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgQ1JCX0lORElSRUNUXzJNICsgKG9mZiAmIE1BU0soMTYpKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEluOiAnb2ZmJyBpcyBvZmZzZXQgZnJvbSBDUkIgc3BhY2UgaW4gMTI4TSBwY2kgbWFwCisgKiBPdXQ6ICdvZmYnIGlzIDJNIHBjaSBtYXAgYWRkcgorICogc2lkZSBlZmZlY3Q6IGxvY2sgY3JiIHdpbmRvdworICovCitzdGF0aWMgdm9pZAorcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmKQoreworCXUzMiB3aW5kb3c7CisJdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk07CisKKwlvZmYgLT0gUUxDTklDX1BDSV9DUkJTUEFDRTsKKworCXdpbmRvdyA9IENSQl9ISShvZmYpOworCisJaWYgKGFkYXB0ZXItPmFody5jcmJfd2luID09IHdpbmRvdykKKwkJcmV0dXJuOworCisJd3JpdGVsKHdpbmRvdywgYWRkcik7CisJaWYgKHJlYWRsKGFkZHIpICE9IHdpbmRvdykgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHNldCBDUkIgd2luZG93IHRvICVkIG9mZiAweCVseFxuIiwKKwkJCQl3aW5kb3csIG9mZik7CisJfQorCWFkYXB0ZXItPmFody5jcmJfd2luID0gd2luZG93OworfQorCitpbnQKK3FsY25pY19od193cml0ZV93eF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZiwgdTMyIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcnY7CisJdm9pZCBfX2lvbWVtICphZGRyID0gTlVMTDsKKworCXJ2ID0gcWxjbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgb2ZmLCAmYWRkcik7CisKKwlpZiAocnYgPT0gMCkgeworCQl3cml0ZWwoZGF0YSwgYWRkcik7CisJCXJldHVybiAwOworCX0KKworCWlmIChydiA+IDApIHsKKwkJLyogaW5kaXJlY3QgYWNjZXNzICovCisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKKwkJcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsIG9mZik7CisJCXdyaXRlbChkYXRhLCBhZGRyKTsKKwkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIiVzOiBpbnZhbGlkIG9mZnNldDogMHglMDE2bHhcbiIsIF9fZnVuY19fLCBvZmYpOworCWR1bXBfc3RhY2soKTsKKwlyZXR1cm4gLUVJTzsKK30KKwordTMyCitxbGNuaWNfaHdfcmVhZF93eF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBydjsKKwl1MzIgZGF0YTsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBOVUxMOworCisJcnYgPSBxbGNuaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCBvZmYsICZhZGRyKTsKKworCWlmIChydiA9PSAwKQorCQlyZXR1cm4gcmVhZGwoYWRkcik7CisKKwlpZiAocnYgPiAwKSB7CisJCS8qIGluZGlyZWN0IGFjY2VzcyAqLworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFody5jcmJfbG9jaywgZmxhZ3MpOworCQljcmJfd2luX2xvY2soYWRhcHRlcik7CisJCXFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCBvZmYpOworCQlkYXRhID0gcmVhZGwoYWRkcik7CisJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBkYXRhOworCX0KKworCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSIlczogaW52YWxpZCBvZmZzZXQ6IDB4JTAxNmx4XG4iLCBfX2Z1bmNfXywgb2ZmKTsKKwlkdW1wX3N0YWNrKCk7CisJcmV0dXJuIC0xOworfQorCisKK3ZvaWQgX19pb21lbSAqCitxbGNuaWNfZ2V0X2lvYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBvZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gTlVMTDsKKworCVdBUk5fT04ocWxjbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgb2Zmc2V0LCAmYWRkcikpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKworc3RhdGljIGludAorcWxjbmljX3BjaV9zZXRfd2luZG93XzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IGFkZHIsIHUzMiAqc3RhcnQpCit7CisJdTMyIHdpbmRvdzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpZiAoKGFkZHIgJiAweDAwZmY4MDApID09IDB4ZmY4MDApIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJRTSBhY2Nlc3Mgbm90IGhhbmRsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwl3aW5kb3cgPSBPQ01fV0lOX1AzUChhZGRyKTsKKworCXdyaXRlbCh3aW5kb3csIGFkYXB0ZXItPmFody5vY21fd2luX2NyYik7CisJLyogcmVhZCBiYWNrIHRvIGZsdXNoICovCisJcmVhZGwoYWRhcHRlci0+YWh3Lm9jbV93aW5fY3JiKTsKKworCWFkYXB0ZXItPmFody5vY21fd2luID0gd2luZG93OworCSpzdGFydCA9IFFMQ05JQ19QQ0lfT0NNMF8yTSArIEdFVF9NRU1fT0ZGU18yTShhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX3BjaV9tZW1fYWNjZXNzX2RpcmVjdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsCisJCXU2NCAqZGF0YSwgaW50IG9wKQoreworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOworCXJlc291cmNlX3NpemVfdCBtZW1fYmFzZTsKKwlpbnQgcmV0OworCXUzMiBzdGFydDsKKworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisKKwlyZXQgPSBxbGNuaWNfcGNpX3NldF93aW5kb3dfMk0oYWRhcHRlciwgb2ZmLCAmc3RhcnQpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byB1bmxvY2s7CisKKwlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KTsKKwlpZiAoYWRkcikKKwkJZ290byBub3JlbWFwOworCisJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCkgKyAoc3RhcnQgJiBQQUdFX01BU0spOworCisJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UsIFBBR0VfU0laRSk7CisJaWYgKG1lbV9wdHIgPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlhZGRyID0gbWVtX3B0ciArIChzdGFydCAmIChQQUdFX1NJWkUgLSAxKSk7CisKK25vcmVtYXA6CisJaWYgKG9wID09IDApCS8qIHJlYWQgKi8KKwkJKmRhdGEgPSByZWFkcShhZGRyKTsKKwllbHNlCQkvKiB3cml0ZSAqLworCQl3cml0ZXEoKmRhdGEsIGFkZHIpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCisJaWYgKG1lbV9wdHIpCisJCWlvdW5tYXAobWVtX3B0cik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfQ1RMX0NIRUNLICAgMTAwMAorCitpbnQKK3FsY25pY19wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IG9mZiwgdTY0IGRhdGEpCit7CisJaW50IGksIGosIHJldDsKKwl1MzIgdGVtcCwgb2ZmODsKKwl1NjQgc3RyaWRlOworCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKKworCS8qIE9ubHkgNjQtYml0IGFsaWduZWQgYWNjZXNzICovCisJaWYgKG9mZiAmIDcpCisJCXJldHVybiAtRUlPOworCisJLyogUDMgb253YXJkLCB0ZXN0IGFnZW50IGJhc2UgZm9yIE1JVSBhbmQgU0lVIGlzIHNhbWUgKi8KKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIFFMQ05JQ19BRERSX1FEUl9ORVQsCisJCQkJUUxDTklDX0FERFJfUURSX05FVF9NQVhfUDMpKSB7CisJCW1lbV9jcmIgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCVFMQ05JQ19DUkJfUURSX05FVCtNSVVfVEVTVF9BR1RfQkFTRSk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIFFMQ05JQ19BRERSX0REUl9ORVQsIFFMQ05JQ19BRERSX0REUl9ORVRfTUFYKSkgeworCQltZW1fY3JiID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfQ1JCX0REUl9ORVQrTUlVX1RFU1RfQUdUX0JBU0UpOworCQlnb3RvIGNvcnJlY3Q7CisJfQorCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBRTENOSUNfQUREUl9PQ00wLCBRTENOSUNfQUREUl9PQ00wX01BWCkpCisJCXJldHVybiBxbGNuaWNfcGNpX21lbV9hY2Nlc3NfZGlyZWN0KGFkYXB0ZXIsIG9mZiwgJmRhdGEsIDEpOworCisJcmV0dXJuIC1FSU87CisKK2NvcnJlY3Q6CisJc3RyaWRlID0gUUxDTklDX0lTX1JFVklTSU9OX1AzUChhZGFwdGVyLT5haHcucmV2aXNpb25faWQpID8gMTYgOiA4OworCisJb2ZmOCA9IG9mZiAmIH4oc3RyaWRlLTEpOworCisJbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCXdyaXRlbChvZmY4LCAobWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPKSk7CisJd3JpdGVsKDAsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKKworCWkgPSAwOworCWlmIChzdHJpZGUgPT0gMTYpIHsKKwkJd3JpdGVsKFRBX0NUTF9FTkFCTEUsIChtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCkpOworCQl3cml0ZWwoKFRBX0NUTF9TVEFSVCB8IFRBX0NUTF9FTkFCTEUpLAorCQkJCShtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCkpOworCisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKKwkJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCk7CisJCQlpZiAoKHRlbXAgJiBUQV9DVExfQlVTWSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpID0gKG9mZiAmIDB4ZikgPyAwIDogMjsKKwkJd3JpdGVsKHJlYWRsKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfUkREQVRBKGkpKSwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX1dSREFUQShpKSk7CisJCXdyaXRlbChyZWFkbChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShpKzEpKSwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX1dSREFUQShpKzEpKTsKKwkJaSA9IChvZmYgJiAweGYpID8gMiA6IDA7CisJfQorCisJd3JpdGVsKGRhdGEgJiAweGZmZmZmZmZmLAorCQkJbWVtX2NyYiArIE1JVV9URVNUX0FHVF9XUkRBVEEoaSkpOworCXdyaXRlbCgoZGF0YSA+PiAzMikgJiAweGZmZmZmZmZmLAorCQkJbWVtX2NyYiArIE1JVV9URVNUX0FHVF9XUkRBVEEoaSsxKSk7CisKKwl3cml0ZWwoKFRBX0NUTF9FTkFCTEUgfCBUQV9DVExfV1JJVEUpLCAobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpKTsKKwl3cml0ZWwoKFRBX0NUTF9TVEFSVCB8IFRBX0NUTF9FTkFCTEUgfCBUQV9DVExfV1JJVEUpLAorCQkJKG1lbV9jcmIgKyBURVNUX0FHVF9DVFJMKSk7CisKKwlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CisJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCk7CisJCWlmICgodGVtcCAmIFRBX0NUTF9CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlyZXQgPSAwOworCitkb25lOgorCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludAorcWxjbmljX3BjaV9tZW1fcmVhZF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHU2NCAqZGF0YSkKK3sKKwlpbnQgaiwgcmV0OworCXUzMiB0ZW1wLCBvZmY4OworCXU2NCB2YWwsIHN0cmlkZTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CisKKwkvKiBPbmx5IDY0LWJpdCBhbGlnbmVkIGFjY2VzcyAqLworCWlmIChvZmYgJiA3KQorCQlyZXR1cm4gLUVJTzsKKworCS8qIFAzIG9ud2FyZCwgdGVzdCBhZ2VudCBiYXNlIGZvciBNSVUgYW5kIFNJVSBpcyBzYW1lICovCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBRTENOSUNfQUREUl9RRFJfTkVULAorCQkJCVFMQ05JQ19BRERSX1FEUl9ORVRfTUFYX1AzKSkgeworCQltZW1fY3JiID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfQ1JCX1FEUl9ORVQrTUlVX1RFU1RfQUdUX0JBU0UpOworCQlnb3RvIGNvcnJlY3Q7CisJfQorCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBRTENOSUNfQUREUl9ERFJfTkVULCBRTENOSUNfQUREUl9ERFJfTkVUX01BWCkpIHsKKwkJbWVtX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX0NSQl9ERFJfTkVUK01JVV9URVNUX0FHVF9CQVNFKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgUUxDTklDX0FERFJfT0NNMCwgUUxDTklDX0FERFJfT0NNMF9NQVgpKSB7CisJCXJldHVybiBxbGNuaWNfcGNpX21lbV9hY2Nlc3NfZGlyZWN0KGFkYXB0ZXIsCisJCQkJb2ZmLCBkYXRhLCAwKTsKKwl9CisKKwlyZXR1cm4gLUVJTzsKKworY29ycmVjdDoKKwlzdHJpZGUgPSBRTENOSUNfSVNfUkVWSVNJT05fUDNQKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkgPyAxNiA6IDg7CisKKwlvZmY4ID0gb2ZmICYgfihzdHJpZGUtMSk7CisKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCisJd3JpdGVsKG9mZjgsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKKwl3cml0ZWwoMCwgKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCXdyaXRlbChUQV9DVExfRU5BQkxFLCAobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpKTsKKwl3cml0ZWwoKFRBX0NUTF9TVEFSVCB8IFRBX0NUTF9FTkFCTEUpLCAobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpKTsKKworCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKKwkJdGVtcCA9IHJlYWRsKG1lbV9jcmIgKyBURVNUX0FHVF9DVFJMKTsKKwkJaWYgKCh0ZW1wICYgVEFfQ1RMX0JVU1kpID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UgeworCQlvZmY4ID0gTUlVX1RFU1RfQUdUX1JEREFUQV9MTzsKKwkJaWYgKChzdHJpZGUgPT0gMTYpICYmIChvZmYgJiAweGYpKQorCQkJb2ZmOCA9IE1JVV9URVNUX0FHVF9SRERBVEFfVVBQRVJfTE87CisKKwkJdGVtcCA9IHJlYWRsKG1lbV9jcmIgKyBvZmY4ICsgNCk7CisJCXZhbCA9ICh1NjQpdGVtcCA8PCAzMjsKKwkJdmFsIHw9IHJlYWRsKG1lbV9jcmIgKyBvZmY4KTsKKwkJKmRhdGEgPSB2YWw7CisJCXJldCA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHFsY25pY19nZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IG9mZnNldCwgYm9hcmRfdHlwZSwgbWFnaWM7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJb2Zmc2V0ID0gUUxDTklDX0ZXX01BR0lDX09GRlNFVDsKKwlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChtYWdpYyAhPSBRTENOSUNfQkRJTkZPX01BR0lDKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgYm9hcmQgY29uZmlnLCBtYWdpYz0lMDh4XG4iLAorCQkJbWFnaWMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvZmZzZXQgPSBRTENOSUNfQlJEVFlQRV9PRkZTRVQ7CisJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmJvYXJkX3R5cGUpKQorCQlyZXR1cm4gLUVJTzsKKworCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKKworCWlmIChib2FyZF90eXBlID09IFFMQ05JQ19CUkRUWVBFX1AzXzRfR0JfTU0pIHsKKwkJdTMyIGdwaW8gPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfR0xCX1BBRF9HUElPX0kpOworCQlpZiAoKGdwaW8gJiAweDgwMDApID09IDApCisJCQlib2FyZF90eXBlID0gUUxDTklDX0JSRFRZUEVfUDNfMTBHX1RQOworCX0KKworCXN3aXRjaCAoYm9hcmRfdHlwZSkgeworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfSE1FWjoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX1hHX0xPTToKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19DWDQ6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0X0xQOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfSU1FWjoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfUExVUzoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1hGUDoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IFFMQ05JQ19YR0JFOworCQlicmVhazsKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX1JFRl9RRzoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzRfR0I6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM180X0dCX01NOgorCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gUUxDTklDX0dCRTsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfVFA6CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSAoYWRhcHRlci0+cG9ydG51bSA8IDIpID8KKwkJCVFMQ05JQ19YR0JFIDogUUxDTklDX0dCRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5rbm93biBib2FyZCB0eXBlICV4XG4iLCBib2FyZF90eXBlKTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IFFMQ05JQ19YR0JFOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50CitxbGNuaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHdvbF9jZmc7CisKKwl3b2xfY2ZnID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfV09MX0NPTkZJR19OVik7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKSB7CisJCXdvbF9jZmcgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHKTsKKwkJaWYgKHdvbF9jZmcgJiAoMSA8PCBhZGFwdGVyLT5wb3J0bnVtKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcWxjbmljX2NvbmZpZ19sZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgc3RhdGUsIHUzMiByYXRlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSAgIHJlcTsKKwlpbnQgcnY7CisJdTY0IHdvcmQ7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0xFRCB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCgodTY0KXJhdGUgPDwgMzIpOworCXJlcS53b3Jkc1sxXSA9IGNwdV90b19sZTY0KHN0YXRlKTsKKworCXJ2ID0gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYpCisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkxFRCBjb25maWd1cmF0aW9uIGZhaWxlZC5cbiIpOworCisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHFsY25pY19zZXRfZndfbG9vcGJhY2soc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgZmxhZykKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEJcmVxOworCWludAkJCXJ2OworCXU2NAkJCXdvcmQ7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0xPT1BCQUNLIHwKKwkJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoZmxhZyk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2KQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiJXN0aW5nIGxvb3BiYWNrIG1vZGUgZmFpbGVkLlxuIiwKKwkJCQkJZmxhZyA/ICJTZXQiIDogIlJlc2V0Iik7CisJcmV0dXJuIHJ2OworfQorCitpbnQgcWxjbmljX3NldF9pbGJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHFsY25pY19zZXRfZndfbG9vcGJhY2soYWRhcHRlciwgMSkpCisJCXJldHVybiAtRUlPOworCisJaWYgKHFsY25pY19uaWNfc2V0X3Byb21pc2MoYWRhcHRlciwKKwkJCQlWUE9SVF9NSVNTX01PREVfQUNDRVBUX0FMTCkpIHsKKwkJcWxjbmljX3NldF9md19sb29wYmFjayhhZGFwdGVyLCAwKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbXNsZWVwKDEwMDApOworCXJldHVybiAwOworfQorCit2b2lkIHFsY25pY19jbGVhcl9pbGJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IG1vZGUgPSBWUE9SVF9NSVNTX01PREVfRFJPUDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJcWxjbmljX3NldF9md19sb29wYmFjayhhZGFwdGVyLCAwKTsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCW1vZGUgPSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX0FMTDsKKwllbHNlIGlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQltb2RlID0gVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9NVUxUSTsKKworCXFsY25pY19uaWNfc2V0X3Byb21pc2MoYWRhcHRlciwgbW9kZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDBhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwpAQCAtMCwwICsxLDE1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAicWxjbmljLmgiCisKK3N0cnVjdCBjcmJfYWRkcl9wYWlyIHsKKwl1MzIgYWRkcjsKKwl1MzIgZGF0YTsKK307CisKKyNkZWZpbmUgUUxDTklDX01BWF9DUkJfWEZPUk0gNjAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3JiX2FkZHJfeGZvcm1bUUxDTklDX01BWF9DUkJfWEZPUk1dOworCisjZGVmaW5lIGNyYl9hZGRyX3RyYW5zZm9ybShuYW1lKSBcCisJKGNyYl9hZGRyX3hmb3JtW1FMQ05JQ19IV19QWF9NQVBfQ1JCXyMjbmFtZV0gPSBcCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl8jI25hbWUgPDwgMjApCisKKyNkZWZpbmUgUUxDTklDX0FERFJfRVJST1IgKDB4ZmZmZmZmZmYpCisKK3N0YXRpYyB2b2lkCitxbGNuaWNfcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKTsKKworc3RhdGljIHZvaWQgY3JiX2FkZHJfdHJhbnNmb3JtX3NldHVwKHZvaWQpCit7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFhETUEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShUSU1SKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1JFKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FOMyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRTjIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUU4xKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FOMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUVMyKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FTMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzApOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YNyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVg2KTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDUpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YNCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVgzKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVgwKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUk9NVVNCKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU04pOworCWNyYl9hZGRyX3RyYW5zZm9ybShRTU4pOworCWNyYl9hZGRyX3RyYW5zZm9ybShRTVMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR05JKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdORCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR04yKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdOMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjApOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1NJKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTRCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1MyKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzApOworCWNyYl9hZGRyX3RyYW5zZm9ybShQUyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBIKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oTklVKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oSTJRKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oRUcpOworCWNyYl9hZGRyX3RyYW5zZm9ybShNTik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKE1TKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQ0FTMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKENBUzEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShDQVMwKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQ0FNKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQzJDMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEMyQzApOworCWNyYl9hZGRyX3RyYW5zZm9ybShTTUIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShPQ00wKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oSTJDMCk7Cit9CisKK3ZvaWQgcWxjbmljX3JlbGVhc2VfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4X2J1ZjsKKwlpbnQgaSwgcmluZzsKKworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5udW1fZGVzYzsgKytpKSB7CisJCQlyeF9idWYgPSAmKHJkc19yaW5nLT5yeF9idWZfYXJyW2ldKTsKKwkJCWlmIChyeF9idWYtPnN0YXRlID09IFFMQ05JQ19CVUZGRVJfRlJFRSkKKwkJCQljb250aW51ZTsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJcnhfYnVmLT5kbWEsCisJCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWlmIChyeF9idWYtPnNrYiAhPSBOVUxMKQorCQkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2J1Zi0+c2tiKTsKKwkJfQorCX0KK30KKwordm9pZCBxbGNuaWNfcmVsZWFzZV90eF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWY7CisJc3RydWN0IHFsY25pY19za2JfZnJhZyAqYnVmZnJhZzsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisKKwljbWRfYnVmID0gdHhfcmluZy0+Y21kX2J1Zl9hcnI7CisJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPm51bV9kZXNjOyBpKyspIHsKKwkJYnVmZnJhZyA9IGNtZF9idWYtPmZyYWdfYXJyYXk7CisJCWlmIChidWZmcmFnLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVmZnJhZy0+ZG1hLAorCQkJCQkgYnVmZnJhZy0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CisJCX0KKwkJZm9yIChqID0gMDsgaiA8IGNtZF9idWYtPmZyYWdfY291bnQ7IGorKykgeworCQkJYnVmZnJhZysrOworCQkJaWYgKGJ1ZmZyYWctPmRtYSkgeworCQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKKwkJCQkJICAgICAgIGJ1ZmZyYWctPmxlbmd0aCwKKwkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CisJCQl9CisJCX0KKwkJaWYgKGNtZF9idWYtPnNrYikgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX2J1Zi0+c2tiKTsKKwkJCWNtZF9idWYtPnNrYiA9IE5VTEw7CisJCX0KKwkJY21kX2J1ZisrOworCX0KK30KKwordm9pZCBxbGNuaWNfZnJlZV9zd19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCWludCByaW5nOworCisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlpZiAocmVjdl9jdHgtPnJkc19yaW5ncyA9PSBOVUxMKQorCQlnb3RvIHNraXBfcmRzOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQl2ZnJlZShyZHNfcmluZy0+cnhfYnVmX2Fycik7CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gTlVMTDsKKwl9CisJa2ZyZWUocmVjdl9jdHgtPnJkc19yaW5ncyk7CisKK3NraXBfcmRzOgorCWlmIChhZGFwdGVyLT50eF9yaW5nID09IE5VTEwpCisJCXJldHVybjsKKworCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCXZmcmVlKHR4X3JpbmctPmNtZF9idWZfYXJyKTsKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKK30KKworaW50IHFsY25pY19hbGxvY19zd19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4X2J1ZjsKKwlpbnQgcmluZywgaSwgc2l6ZTsKKworCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcpOworCXR4X3JpbmcgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICh0eF9yaW5nID09IE5VTEwpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdHggcmluZyBzdHJ1Y3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYWRhcHRlci0+dHhfcmluZyA9IHR4X3Jpbmc7CisKKwl0eF9yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV90eGQ7CisJdHhfcmluZy0+dHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIDApOworCisJY21kX2J1Zl9hcnIgPSB2bWFsbG9jKFRYX0JVRkZfUklOR1NJWkUodHhfcmluZykpOworCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGNtZCBidWZmZXIgcmluZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoY21kX2J1Zl9hcnIsIDAsIFRYX0JVRkZfUklOR1NJWkUodHhfcmluZykpOworCXR4X3JpbmctPmNtZF9idWZfYXJyID0gY21kX2J1Zl9hcnI7CisKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCXNpemUgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzICogc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyk7CisJcmRzX3JpbmcgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChyZHNfcmluZyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJkcyByaW5nIHN0cnVjdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZWN2X2N0eC0+cmRzX3JpbmdzID0gcmRzX3Jpbmc7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCXN3aXRjaCAocmluZykgeworCQljYXNlIFJDVl9SSU5HX05PUk1BTDoKKwkJCXJkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9yeGQ7CisJCQlpZiAoYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoKSB7CisJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJUUxDTklDX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKKwkJCQlyZHNfcmluZy0+c2tiX3NpemUgPQorCQkJCQlRTENOSUNfQ1RfREVGQVVMVF9SWF9CVUZfTEVOOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlRTENOSUNfUDNfUlhfQlVGX01BWF9MRU47CisJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQ1ZfUklOR19KVU1CTzoKKwkJCXJkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9qdW1ib19yeGQ7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCVFMQ05JQ19QM19SWF9KVU1CT19CVUZfTUFYX0xFTjsKKworCQkJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0hXX0xSTykKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgKz0gUUxDTklDX0xST19CVUZGRVJfRVhUUkE7CisKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOworCQkJYnJlYWs7CisKKwkJY2FzZSBSQ1ZfUklOR19MUk86CisJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fbHJvX3J4ZDsKKwkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFFMQ05JQ19SWF9MUk9fQlVGRkVSX0xFTkdUSDsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IHJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKKwkJCWJyZWFrOworCisJCX0KKwkJcmRzX3JpbmctPnJ4X2J1Zl9hcnIgPSAoc3RydWN0IHFsY25pY19yeF9idWZmZXIgKikKKwkJCXZtYWxsb2MoUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKKwkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlICIKKwkJCQkicnggYnVmZmVyIHJpbmcgJWRcbiIsIHJpbmcpOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCW1lbXNldChyZHNfcmluZy0+cnhfYnVmX2FyciwgMCwgUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkvKgorCQkgKiBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlbSwgc2V0IHJlZmVyZW5jZSBoYW5kbGVzCisJCSAqIGFuZCBwdXQgdGhlbSBpbiB0aGUgcXVldWVzLgorCQkgKi8KKwkJcnhfYnVmID0gcmRzX3JpbmctPnJ4X2J1Zl9hcnI7CisJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bnVtX2Rlc2M7IGkrKykgeworCQkJbGlzdF9hZGRfdGFpbCgmcnhfYnVmLT5saXN0LAorCQkJCQkmcmRzX3JpbmctPmZyZWVfbGlzdCk7CisJCQlyeF9idWYtPnJlZl9oYW5kbGUgPSBpOworCQkJcnhfYnVmLT5zdGF0ZSA9IFFMQ05JQ19CVUZGRVJfRlJFRTsKKwkJCXJ4X2J1ZisrOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZyZHNfcmluZy0+bG9jayk7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlzZHNfcmluZy0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzW3JpbmddLnZlY3RvcjsKKwkJc2RzX3JpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlzZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkNWX0RFU0NfUklOR1M7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZzZHNfcmluZy0+ZnJlZV9saXN0W2ldKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlxbGNuaWNfZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBVdGlsaXR5IHRvIHRyYW5zbGF0ZSBmcm9tIGludGVybmFsIFBoYW50b20gQ1JCIGFkZHJlc3MKKyAqIHRvIGV4dGVybmFsIFBDSSBDUkIgYWRkcmVzcy4KKyAqLworc3RhdGljIHUzMiBxbGNuaWNfZGVjb2RlX2NyYl9hZGRyKHUzMiBhZGRyKQoreworCWludCBpOworCXUzMiBiYXNlX2FkZHIsIG9mZnNldCwgcGNpX2Jhc2U7CisKKwljcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAoKTsKKworCXBjaV9iYXNlID0gUUxDTklDX0FERFJfRVJST1I7CisJYmFzZV9hZGRyID0gYWRkciAmIDB4ZmZmMDAwMDA7CisJb2Zmc2V0ID0gYWRkciAmIDB4MDAwZmZmZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgUUxDTklDX01BWF9DUkJfWEZPUk07IGkrKykgeworCQlpZiAoY3JiX2FkZHJfeGZvcm1baV0gPT0gYmFzZV9hZGRyKSB7CisJCQlwY2lfYmFzZSA9IGkgPDwgMjA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocGNpX2Jhc2UgPT0gUUxDTklDX0FERFJfRVJST1IpCisJCXJldHVybiBwY2lfYmFzZTsKKwllbHNlCisJCXJldHVybiBwY2lfYmFzZSArIG9mZnNldDsKK30KKworI2RlZmluZSBRTENOSUNfTUFYX1JPTV9XQUlUX1VTRUMJMTAwCisKK3N0YXRpYyBpbnQgcWxjbmljX3dhaXRfcm9tX2RvbmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWxvbmcgdGltZW91dCA9IDA7CisJbG9uZyBkb25lID0gMDsKKworCWNvbmRfcmVzY2hlZCgpOworCisJd2hpbGUgKGRvbmUgPT0gMCkgeworCQlkb25lID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX0dMQl9TVEFUVVMpOworCQlkb25lICY9IDI7CisJCWlmICgrK3RpbWVvdXQgPj0gUUxDTklDX01BWF9ST01fV0FJVF9VU0VDKSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIlRpbWVvdXQgcmVhY2hlZCAgd2FpdGluZyBmb3Igcm9tIGRvbmUiKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXVkZWxheSgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgaW50IGFkZHIsIGludCAqdmFscCkKK3sKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0FERFJFU1MsIGFkZHIpOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwgMHhiKTsKKwlpZiAocWxjbmljX3dhaXRfcm9tX2RvbmUoYWRhcHRlcikpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRXJyb3Igd2FpdGluZyBmb3Igcm9tIGRvbmVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogcmVzZXQgYWJ5dGVfY250IGFuZCBkdW1teV9ieXRlX2NudCAqLworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKKwl1ZGVsYXkoMTApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQsIDApOworCisJKnZhbHAgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX1JEQVRBKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19yb21fZmFzdF9yZWFkX3dvcmRzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsCisJCQkJICB1OCAqYnl0ZXMsIHNpemVfdCBzaXplKQoreworCWludCBhZGRyaWR4OworCWludCByZXQgPSAwOworCisJZm9yIChhZGRyaWR4ID0gYWRkcjsgYWRkcmlkeCA8IChhZGRyICsgc2l6ZSk7IGFkZHJpZHggKz0gNCkgeworCQlpbnQgdjsKKwkJcmV0ID0gZG9fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyaWR4LCAmdik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkqKF9fbGUzMiAqKWJ5dGVzID0gY3B1X3RvX2xlMzIodik7CisJCWJ5dGVzICs9IDQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50CitxbGNuaWNfcm9tX2Zhc3RfcmVhZF93b3JkcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAorCQkJCXU4ICpieXRlcywgc2l6ZV90IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHFsY25pY19yb21fbG9jayhhZGFwdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRvX3JvbV9mYXN0X3JlYWRfd29yZHMoYWRhcHRlciwgYWRkciwgYnl0ZXMsIHNpemUpOworCisJcWxjbmljX3JvbV91bmxvY2soYWRhcHRlcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCAqdmFscCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHFsY25pY19yb21fbG9jayhhZGFwdGVyKSAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IGRvX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgdmFscCk7CisJcWxjbmljX3JvbV91bmxvY2soYWRhcHRlcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHFsY25pY19waW5pdF9mcm9tX3JvbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGFkZHIsIHZhbDsKKwlpbnQgaSwgbiwgaW5pdF9kZWxheTsKKwlzdHJ1Y3QgY3JiX2FkZHJfcGFpciAqYnVmOworCXVuc2lnbmVkIG9mZnNldDsKKwl1MzIgb2ZmOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCS8qIHJlc2V0YWxsICovCisJcWxjbmljX3JvbV9sb2NrKGFkYXB0ZXIpOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ZmZmZmZmZmYpOworCXFsY25pY19yb21fdW5sb2NrKGFkYXB0ZXIpOworCisJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIDAsICZuKSAhPSAwIHx8IChuICE9IDB4Y2FmZWNhZmUpIHx8CisJCQlxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCA0LCAmbikgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFUlJPUiBSZWFkaW5nIGNyYl9pbml0IGFyZWE6IHZhbDoleFxuIiwgbik7CisJCXJldHVybiAtRUlPOworCX0KKwlvZmZzZXQgPSBuICYgMHhmZmZmVTsKKwluID0gKG4gPj4gMTYpICYgMHhmZmZmVTsKKworCWlmIChuID49IDEwMjQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUUxPR0lDIGNhcmQgZmxhc2ggbm90IGluaXRpYWxpemVkLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWJ1ZiA9IGtjYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBjcmJfYWRkcl9wYWlyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBjYWxsb2MgbWVtb3J5IGZvciByb20gcmVhZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCA4KmkgKyA0Km9mZnNldCwgJnZhbCkgIT0gMCB8fAorCQlxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCA4KmkgKyA0Km9mZnNldCArIDQsICZhZGRyKSAhPSAwKSB7CisJCQlrZnJlZShidWYpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlidWZbaV0uYWRkciA9IGFkZHI7CisJCWJ1ZltpXS5kYXRhID0gdmFsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKworCQlvZmYgPSBxbGNuaWNfZGVjb2RlX2NyYl9hZGRyKGJ1ZltpXS5hZGRyKTsKKwkJaWYgKG9mZiA9PSBRTENOSUNfQUREUl9FUlJPUikgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1JCIGluaXQgdmFsdWUgb3V0IG9mIHJhbmdlICV4XG4iLAorCQkJCQlidWZbaV0uYWRkcik7CisJCQljb250aW51ZTsKKwkJfQorCQlvZmYgKz0gUUxDTklDX1BDSV9DUkJTUEFDRTsKKworCQlpZiAob2ZmICYgMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNraXBwaW5nIGNvbGQgcmVib290IE1BR0lDICovCisJCWlmIChvZmYgPT0gUUxDTklDX0NBTV9SQU0oMHgxZmMpKQorCQkJY29udGludWU7CisJCWlmIChvZmYgPT0gKFFMQ05JQ19DUkJfSTJDMCArIDB4MWMpKQorCQkJY29udGludWU7CisJCWlmIChvZmYgPT0gKFJPTVVTQl9HTEIgKyAweGJjKSkgLyogZG8gbm90IHJlc2V0IFBDSSAqLworCQkJY29udGludWU7CisJCWlmIChvZmYgPT0gKFJPTVVTQl9HTEIgKyAweGE4KSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhjOCkpIC8qIGNvcmUgY2xvY2sgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHgyNCkpIC8qIE1OIGNsb2NrICovCisJCQljb250aW51ZTsKKwkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4MWMpKSAvKiBNUyBjbG9jayAqLworCQkJY29udGludWU7CisJCWlmICgob2ZmICYgMHgwZmYwMDAwMCkgPT0gUUxDTklDX0NSQl9ERFJfTkVUKQorCQkJY29udGludWU7CisJCS8qIHNraXAgdGhlIGZ1bmN0aW9uIGVuYWJsZSByZWdpc3RlciAqLworCQlpZiAob2ZmID09IFFMQ05JQ19QQ0lFX1JFRyhQQ0lFX1NFVFVQX0ZVTkNUSU9OKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IFFMQ05JQ19QQ0lFX1JFRyhQQ0lFX1NFVFVQX0ZVTkNUSU9OMikpCisJCQljb250aW51ZTsKKwkJaWYgKChvZmYgJiAweDBmZjAwMDAwKSA9PSBRTENOSUNfQ1JCX1NNQikKKwkJCWNvbnRpbnVlOworCisJCWluaXRfZGVsYXkgPSAxOworCQkvKiBBZnRlciB3cml0aW5nIHRoaXMgcmVnaXN0ZXIsIEhXIG5lZWRzIHRpbWUgZm9yIENSQiAqLworCQkvKiB0byBxdWlldCBkb3duIChlbHNlIGNyYl93aW5kb3cgcmV0dXJucyAweGZmZmZmZmZmKSAqLworCQlpZiAob2ZmID09IFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VUKQorCQkJaW5pdF9kZWxheSA9IDEwMDA7CisKKwkJUUxDV1IzMihhZGFwdGVyLCBvZmYsIGJ1ZltpXS5kYXRhKTsKKworCQltc2xlZXAoaW5pdF9kZWxheSk7CisJfQorCWtmcmVlKGJ1Zik7CisKKwkvKiBwMmRuIHJlcGx5Q291bnQgKi8KKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF9EICsgMHhlYywgMHgxZSk7CisJLyogZGlzYWJsZV9wZWdfY2FjaGUgMCAmIDEqLworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUX0QgKyAweDRjLCA4KTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF9JICsgMHg0YywgOCk7CisKKwkvKiBwZWdfY2xyX2FsbCAqLworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzAgKyAweDgsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzAgKyAweGMsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzEgKyAweDgsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzEgKyAweGMsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzIgKyAweDgsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzIgKyAweGMsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzMgKyAweDgsIDApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzMgKyAweGMsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfaGFzX21uKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgY2FwYWJpbGl0eSwgZmxhc2hlZF92ZXI7CisJY2FwYWJpbGl0eSA9IDA7CisKKwlxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJUUxDTklDX0ZXX1ZFUlNJT05fT0ZGU0VULCAoaW50ICopJmZsYXNoZWRfdmVyKTsKKwlmbGFzaGVkX3ZlciA9IFFMQ05JQ19ERUNPREVfVkVSU0lPTihmbGFzaGVkX3Zlcik7CisKKwlpZiAoZmxhc2hlZF92ZXIgPj0gUUxDTklDX1ZFUlNJT05fQ09ERSg0LCAwLCAyMjApKSB7CisKKwkJY2FwYWJpbGl0eSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BFR19UVU5FX0NBUEFCSUxJVFkpOworCQlpZiAoY2FwYWJpbGl0eSAmIFFMQ05JQ19QRUdfVFVORV9NTl9QUkVTRU5UKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMKK3N0cnVjdCB1bmlfdGFibGVfZGVzYyAqcWxjbmljX2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIGludCBzZWN0aW9uKQoreworCXUzMiBpOworCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKSAmdW5pcm9tWzBdOworCV9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LT5udW1fZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisKKwkJX19sZTMyIG9mZnMgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktPmZpbmRleCkgKworCQkJCShpICogY3B1X3RvX2xlMzIoZGlyZWN0b3J5LT5lbnRyeV9zaXplKSk7CisJCV9fbGUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKSZ1bmlyb21bb2Zmc10gKyA4KSk7CisKKwkJaWYgKHRhYl90eXBlID09IHNlY3Rpb24pCisJCQlyZXR1cm4gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKSAmdW5pcm9tW29mZnNdOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X3Byb2R1Y3Rfb2ZmcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHVuaV90YWJsZV9kZXNjICpwdGFiX2Rlc2NyOworCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLT5mdy0+ZGF0YTsKKwl1MzIgaTsKKwlfX2xlMzIgZW50cmllczsKKwlpbnQgbW5fcHJlc2VudCA9IHFsY25pY19oYXNfbW4oYWRhcHRlcik7CisKKwlwdGFiX2Rlc2NyID0gcWxjbmljX2dldF90YWJsZV9kZXNjKHVuaXJvbSwKKwkJCQlRTENOSUNfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMKTsKKwlpZiAocHRhYl9kZXNjciA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwllbnRyaWVzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0+bnVtX2VudHJpZXMpOworbm9tbjoKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisKKwkJX19sZTMyIGZsYWdzLCBmaWxlX2NoaXByZXYsIG9mZnM7CisJCXU4IGNoaXByZXYgPSBhZGFwdGVyLT5haHcucmV2aXNpb25faWQ7CisJCXUzMiBmbGFnYml0OworCisJCW9mZnMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLT5maW5kZXgpICsKKwkJCQkoaSAqIGNwdV90b19sZTMyKHB0YWJfZGVzY3ItPmVudHJ5X3NpemUpKTsKKwkJZmxhZ3MgPSBjcHVfdG9fbGUzMigqKChpbnQgKikmdW5pcm9tW29mZnNdICsKKwkJCQkJCVFMQ05JQ19VTklfRkxBR1NfT0ZGKSk7CisJCWZpbGVfY2hpcHJldiA9IGNwdV90b19sZTMyKCooKGludCAqKSZ1bmlyb21bb2Zmc10gKworCQkJCQkJUUxDTklDX1VOSV9DSElQX1JFVl9PRkYpKTsKKworCQlmbGFnYml0ID0gbW5fcHJlc2VudCA/IDEgOiAyOworCisJCWlmICgoY2hpcHJldiA9PSBmaWxlX2NoaXByZXYpICYmCisJCQkJCSgoMVVMTCA8PCBmbGFnYml0KSAmIGZsYWdzKSkgeworCQkJYWRhcHRlci0+ZmlsZV9wcmRfb2ZmID0gb2ZmczsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChtbl9wcmVzZW50KSB7CisJCW1uX3ByZXNlbnQgPSAwOworCQlnb3RvIG5vbW47CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljCitzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqcWxjbmljX2dldF9kYXRhX2Rlc2Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQkJdTMyIHNlY3Rpb24sIHUzMiBpZHhfb2Zmc2V0KQoreworCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLT5mdy0+ZGF0YTsKKwlpbnQgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJnVuaXJvbVthZGFwdGVyLT5maWxlX3ByZF9vZmZdICsKKwkJCQkJCQkJaWR4X29mZnNldCkpOworCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CisJX19sZTMyIG9mZnM7CisKKwl0YWJfZGVzYyA9IHFsY25pY19nZXRfdGFibGVfZGVzYyh1bmlyb20sIHNlY3Rpb24pOworCisJaWYgKHRhYl9kZXNjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJb2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLT5maW5kZXgpICsKKwkJCShjcHVfdG9fbGUzMih0YWJfZGVzYy0+ZW50cnlfc2l6ZSkgKiBpZHgpOworCisJcmV0dXJuIChzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqKSZ1bmlyb21bb2Zmc107Cit9CisKK3N0YXRpYyB1OCAqCitxbGNuaWNfZ2V0X2Jvb3RsZF9vZmZzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgb2ZmcyA9IFFMQ05JQ19CT09UTERfU1RBUlQ7CisKKwlpZiAoYWRhcHRlci0+ZndfdHlwZSA9PSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSkKKwkJb2ZmcyA9IGNwdV90b19sZTMyKChxbGNuaWNfZ2V0X2RhdGFfZGVzYyhhZGFwdGVyLAorCQkJCQlRTENOSUNfVU5JX0RJUl9TRUNUX0JPT1RMRCwKKwkJCQkJUUxDTklDX1VOSV9CT09UTERfSURYX09GRikpLT5maW5kZXgpOworCisJcmV0dXJuICh1OCAqKSZhZGFwdGVyLT5mdy0+ZGF0YVtvZmZzXTsKK30KKworc3RhdGljIHU4ICoKK3FsY25pY19nZXRfZndfb2ZmcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIG9mZnMgPSBRTENOSUNfSU1BR0VfU1RBUlQ7CisKKwlpZiAoYWRhcHRlci0+ZndfdHlwZSA9PSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSkKKwkJb2ZmcyA9IGNwdV90b19sZTMyKChxbGNuaWNfZ2V0X2RhdGFfZGVzYyhhZGFwdGVyLAorCQkJCQlRTENOSUNfVU5JX0RJUl9TRUNUX0ZXLAorCQkJCQlRTENOSUNfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKS0+ZmluZGV4KTsKKworCXJldHVybiAodTggKikmYWRhcHRlci0+ZnctPmRhdGFbb2Zmc107Cit9CisKK3N0YXRpYyBfX2xlMzIKK3FsY25pY19nZXRfZndfc2l6ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmZ3X3R5cGUgPT0gUUxDTklDX1VOSUZJRURfUk9NSU1BR0UpCisJCXJldHVybiBjcHVfdG9fbGUzMigocWxjbmljX2dldF9kYXRhX2Rlc2MoYWRhcHRlciwKKwkJCQkJUUxDTklDX1VOSV9ESVJfU0VDVF9GVywKKwkJCQkJUUxDTklDX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSktPnNpemUpOworCWVsc2UKKwkJcmV0dXJuIGNwdV90b19sZTMyKAorCQkJKih1MzIgKikmYWRhcHRlci0+ZnctPmRhdGFbUUxDTklDX0ZXX1NJWkVfT0ZGU0VUXSk7Cit9CisKK3N0YXRpYyBfX2xlMzIKK3FsY25pY19nZXRfZndfdmVyc2lvbihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHVuaV9kYXRhX2Rlc2MgKmZ3X2RhdGFfZGVzYzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gYWRhcHRlci0+Znc7CisJX19sZTMyIG1ham9yLCBtaW5vciwgc3ViOworCWNvbnN0IHU4ICp2ZXJfc3RyOworCWludCBpLCByZXQ7CisKKwlpZiAoYWRhcHRlci0+ZndfdHlwZSAhPSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSkKKwkJcmV0dXJuIGNwdV90b19sZTMyKCoodTMyICopJmZ3LT5kYXRhW1FMQ05JQ19GV19WRVJTSU9OX09GRlNFVF0pOworCisJZndfZGF0YV9kZXNjID0gcWxjbmljX2dldF9kYXRhX2Rlc2MoYWRhcHRlciwgUUxDTklDX1VOSV9ESVJfU0VDVF9GVywKKwkJCVFMQ05JQ19VTklfRklSTVdBUkVfSURYX09GRik7CisJdmVyX3N0ciA9IGZ3LT5kYXRhICsgY3B1X3RvX2xlMzIoZndfZGF0YV9kZXNjLT5maW5kZXgpICsKKwkJY3B1X3RvX2xlMzIoZndfZGF0YV9kZXNjLT5zaXplKSAtIDE3OworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaWYgKCFzdHJuY21wKCZ2ZXJfc3RyW2ldLCAiUkVWPSIsIDQpKSB7CisJCQlyZXQgPSBzc2NhbmYoJnZlcl9zdHJbaSs0XSwgIiV1LiV1LiV1ICIsCisJCQkJCSZtYWpvciwgJm1pbm9yLCAmc3ViKTsKKwkJCWlmIChyZXQgIT0gMykKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gbWFqb3IgKyAobWlub3IgPDwgOCkgKyAoc3ViIDw8IDE2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19sZTMyCitxbGNuaWNfZ2V0X2Jpb3NfdmVyc2lvbihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGFkYXB0ZXItPmZ3OworCV9fbGUzMiBiaW9zX3ZlciwgcHJkX29mZiA9IGFkYXB0ZXItPmZpbGVfcHJkX29mZjsKKworCWlmIChhZGFwdGVyLT5md190eXBlICE9IFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFKQorCQlyZXR1cm4gY3B1X3RvX2xlMzIoCisJCQkqKHUzMiAqKSZmdy0+ZGF0YVtRTENOSUNfQklPU19WRVJTSU9OX09GRlNFVF0pOworCisJYmlvc192ZXIgPSBjcHVfdG9fbGUzMigqKCh1MzIgKikgKCZmdy0+ZGF0YVtwcmRfb2ZmXSkKKwkJCQkrIFFMQ05JQ19VTklfQklPU19WRVJTSU9OX09GRikpOworCisJcmV0dXJuIChiaW9zX3ZlciA8PCAyNCkgKyAoKGJpb3NfdmVyID4+IDgpICYgMHhmZjAwKSArIChiaW9zX3ZlciA+PiAyNCk7Cit9CisKK2ludAorcWxjbmljX25lZWRfZndfcmVzZXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBjb3VudCwgb2xkX2NvdW50OworCXUzMiB2YWwsIHZlcnNpb24sIG1ham9yLCBtaW5vciwgYnVpbGQ7CisJaW50IGksIHRpbWVvdXQ7CisKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJcmV0dXJuIDE7CisKKwkvKiBsYXN0IGF0dGVtcHQgaGFkIGZhaWxlZCAqLworCWlmIChRTENSRDMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpID09IFBIQU5fSU5JVElBTElaRV9GQUlMRUQpCisJCXJldHVybiAxOworCisJb2xkX2NvdW50ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUEVHX0FMSVZFX0NPVU5URVIpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKworCQl0aW1lb3V0ID0gbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSwKKwkJCQkJUEhBTl9JTklUSUFMSVpFX0ZBSUxFRCk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisKKwkJY291bnQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfQUxJVkVfQ09VTlRFUik7CisJCWlmIChjb3VudCAhPSBvbGRfY291bnQpCisJCQlicmVhazsKKwl9CisKKwkvKiBmaXJtd2FyZSBpcyBkZWFkICovCisJaWYgKGNvdW50ID09IG9sZF9jb3VudCkKKwkJcmV0dXJuIDE7CisKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIGdvdCBuZXdlciBvciBkaWZmZXJlbnQgZmlsZSBmaXJtd2FyZSAqLworCWlmIChhZGFwdGVyLT5mdykgeworCisJCXZhbCA9IHFsY25pY19nZXRfZndfdmVyc2lvbihhZGFwdGVyKTsKKworCQl2ZXJzaW9uID0gUUxDTklDX0RFQ09ERV9WRVJTSU9OKHZhbCk7CisKKwkJbWFqb3IgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX01BSk9SKTsKKwkJbWlub3IgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX01JTk9SKTsKKwkJYnVpbGQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX1NVQik7CisKKwkJaWYgKHZlcnNpb24gPiBRTENOSUNfVkVSU0lPTl9DT0RFKG1ham9yLCBtaW5vciwgYnVpbGQpKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmd19uYW1lW10gPSB7CisJUUxDTklDX1VOSUZJRURfUk9NSU1BR0VfTkFNRSwKKwlRTENOSUNfRkxBU0hfUk9NSU1BR0VfTkFNRSwKK307CisKK2ludAorcWxjbmljX2xvYWRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXU2NCAqcHRyNjQ7CisJdTMyIGksIGZsYXNoYWRkciwgc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gYWRhcHRlci0+Znc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImxvYWRpbmcgZmlybXdhcmUgZnJvbSAlc1xuIiwKKwkJCWZ3X25hbWVbYWRhcHRlci0+ZndfdHlwZV0pOworCisJaWYgKGZ3KSB7CisJCV9fbGU2NCBkYXRhOworCisJCXNpemUgPSAoUUxDTklDX0lNQUdFX1NUQVJUIC0gUUxDTklDX0JPT1RMRF9TVEFSVCkgLyA4OworCisJCXB0cjY0ID0gKHU2NCAqKXFsY25pY19nZXRfYm9vdGxkX29mZnMoYWRhcHRlcik7CisJCWZsYXNoYWRkciA9IFFMQ05JQ19CT09UTERfU1RBUlQ7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJZGF0YSA9IGNwdV90b19sZTY0KHB0cjY0W2ldKTsKKworCQkJaWYgKHFsY25pY19wY2lfbWVtX3dyaXRlXzJNKGFkYXB0ZXIsIGZsYXNoYWRkciwgZGF0YSkpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWZsYXNoYWRkciArPSA4OworCQl9CisKKwkJc2l6ZSA9IChfX2ZvcmNlIHUzMilxbGNuaWNfZ2V0X2Z3X3NpemUoYWRhcHRlcikgLyA4OworCisJCXB0cjY0ID0gKHU2NCAqKXFsY25pY19nZXRfZndfb2ZmcyhhZGFwdGVyKTsKKwkJZmxhc2hhZGRyID0gUUxDTklDX0lNQUdFX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChxbGNuaWNfcGNpX21lbV93cml0ZV8yTShhZGFwdGVyLAorCQkJCQkJZmxhc2hhZGRyLCBkYXRhKSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKwl9IGVsc2UgeworCQl1NjQgZGF0YTsKKwkJdTMyIGhpLCBsbzsKKworCQlzaXplID0gKFFMQ05JQ19JTUFHRV9TVEFSVCAtIFFMQ05JQ19CT09UTERfU1RBUlQpIC8gODsKKwkJZmxhc2hhZGRyID0gUUxDTklDX0JPT1RMRF9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyLCAoaW50ICopJmxvKSAhPSAwKQorCQkJCXJldHVybiAtRUlPOworCQkJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCisJCQkJCWZsYXNoYWRkciArIDQsIChpbnQgKikmaGkpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWRhdGEgPSAoKCh1NjQpaGkgPDwgMzIpIHwgbG8pOworCisJCQlpZiAocWxjbmljX3BjaV9tZW1fd3JpdGVfMk0oYWRhcHRlciwKKwkJCQkJCWZsYXNoYWRkciwgZGF0YSkpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWZsYXNoYWRkciArPSA4OworCQl9CisJfQorCW1zbGVlcCgxKTsKKworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9QRUdfTkVUXzAgKyAweDE4LCAweDEwMjApOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ODAwMDFlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlfX2xlMzIgdmFsOworCXUzMiB2ZXIsIG1pbl92ZXIsIGJpb3MsIG1pbl9zaXplOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gYWRhcHRlci0+Znc7CisJdTggZndfdHlwZSA9IGFkYXB0ZXItPmZ3X3R5cGU7CisKKwlpZiAoZndfdHlwZSA9PSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSkgeworCQlpZiAocWxjbmljX3NldF9wcm9kdWN0X29mZnMoYWRhcHRlcikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltaW5fc2l6ZSA9IFFMQ05JQ19VTklfRldfTUlOX1NJWkU7CisJfSBlbHNlIHsKKwkJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbUUxDTklDX0ZXX01BR0lDX09GRlNFVF0pOworCQlpZiAoKF9fZm9yY2UgdTMyKXZhbCAhPSBRTENOSUNfQkRJTkZPX01BR0lDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWluX3NpemUgPSBRTENOSUNfRldfTUlOX1NJWkU7CisJfQorCisJaWYgKGZ3LT5zaXplIDwgbWluX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gcWxjbmljX2dldF9md192ZXJzaW9uKGFkYXB0ZXIpOworCisJbWluX3ZlciA9IFFMQ05JQ19WRVJTSU9OX0NPREUoNCwgMCwgMjE2KTsKKworCXZlciA9IFFMQ05JQ19ERUNPREVfVkVSU0lPTih2YWwpOworCisJaWYgKChfbWFqb3IodmVyKSA+IF9RTENOSUNfTElOVVhfTUFKT1IpIHx8ICh2ZXIgPCBtaW5fdmVyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIiVzOiBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkIHVuc3VwcG9ydGVkXG4iLAorCQlmd19uYW1lW2Z3X3R5cGVdLCBfbWFqb3IodmVyKSwgX21pbm9yKHZlciksIF9idWlsZCh2ZXIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gcWxjbmljX2dldF9iaW9zX3ZlcnNpb24oYWRhcHRlcik7CisJcWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgUUxDTklDX0JJT1NfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmYmlvcyk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gYmlvcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgYmlvcyBpcyBpbmNvbXBhdGlibGVcbiIsCisJCQkJZndfbmFtZVtmd190eXBlXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIGZsYXNoZWQgZmlybXdhcmUgaXMgbmV3ZXIgKi8KKwlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCVFMQ05JQ19GV19WRVJTSU9OX09GRlNFVCwgKGludCAqKSZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXZhbCA9IFFMQ05JQ19ERUNPREVfVkVSU0lPTih2YWwpOworCWlmICh2YWwgPiB2ZXIpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiBmaXJtd2FyZSBpcyBvbGRlciB0aGFuIGZsYXNoXG4iLAorCQkJCWZ3X25hbWVbZndfdHlwZV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DQU1fUkFNKDB4MWZjKSwgUUxDTklDX0JESU5GT19NQUdJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZ2V0X25leHRfZnd0eXBlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1OCBmd190eXBlOworCisJc3dpdGNoIChhZGFwdGVyLT5md190eXBlKSB7CisJY2FzZSBRTENOSUNfVU5LTk9XTl9ST01JTUFHRToKKwkJZndfdHlwZSA9IFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFOworCQlicmVhazsKKworCWNhc2UgUUxDTklDX1VOSUZJRURfUk9NSU1BR0U6CisJZGVmYXVsdDoKKwkJZndfdHlwZSA9IFFMQ05JQ19GTEFTSF9ST01JTUFHRTsKKwkJYnJlYWs7CisJfQorCisJYWRhcHRlci0+ZndfdHlwZSA9IGZ3X3R5cGU7Cit9CisKKworCit2b2lkIHFsY25pY19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHJjOworCisJYWRhcHRlci0+ZndfdHlwZSA9IFFMQ05JQ19VTktOT1dOX1JPTUlNQUdFOworCituZXh0OgorCXFsY25pY19nZXRfbmV4dF9md3R5cGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+ZndfdHlwZSA9PSBRTENOSUNfRkxBU0hfUk9NSU1BR0UpIHsKKwkJYWRhcHRlci0+ZncgPSBOVUxMOworCX0gZWxzZSB7CisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmYWRhcHRlci0+ZncsCisJCQkJZndfbmFtZVthZGFwdGVyLT5md190eXBlXSwgJnBkZXYtPmRldik7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byBuZXh0OworCisJCXJjID0gcWxjbmljX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIpOworCQlpZiAocmMgIT0gMCkgeworCQkJcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyLT5mdyk7CisJCQltc2xlZXAoMSk7CisJCQlnb3RvIG5leHQ7CisJCX0KKwl9Cit9CisKKwordm9pZAorcWxjbmljX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5mdykKKwkJcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyLT5mdyk7CisJYWRhcHRlci0+ZncgPSBOVUxMOworfQorCitpbnQgcWxjbmljX3BoYW50b21faW5pdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0cmllcyA9IDYwOworCisJZG8geworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpOworCisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgUEhBTl9JTklUSUFMSVpFX0NPTVBMRVRFOgorCQljYXNlIFBIQU5fSU5JVElBTElaRV9BQ0s6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBQSEFOX0lOSVRJQUxJWkVfRkFJTEVEOgorCQkJZ290byBvdXRfZXJyOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQltc2xlZXAoNTAwKTsKKworCX0gd2hpbGUgKC0tcmV0cmllcyk7CisKKwlRTENXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsIFBIQU5fSU5JVElBTElaRV9GQUlMRUQpOworCitvdXRfZXJyOgorCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgImZpcm13YXJlIGluaXQgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludAorcWxjbmljX3JlY2VpdmVfcGVnX3JlYWR5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsOworCWludCByZXRyaWVzID0gMjAwMDsKKworCWRvIHsKKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfUkNWUEVHX1NUQVRFKTsKKworCQlpZiAodmFsID09IFBIQU5fUEVHX1JDVl9JTklUSUFMSVpFRCkKKwkJCXJldHVybiAwOworCisJCW1zbGVlcCgxMCk7CisKKwl9IHdoaWxlICgtLXJldHJpZXMpOworCisJaWYgKCFyZXRyaWVzKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlJlY2VpdmUgUGVnIGluaXRpYWxpemF0aW9uIG5vdCAiCisJCQkgICAgICAiY29tcGxldGUsIHN0YXRlOiAweCV4LlxuIiwgdmFsKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBxbGNuaWNfaW5pdF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworCWVyciA9IHFsY25pY19yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJUUxDV1IzMihhZGFwdGVyLCBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NULCBJTlRSX1NDSEVNRV9QRVJQT1JUKTsKKwlRTENXUjMyKGFkYXB0ZXIsIENSQl9OSUNfTVNJX01PREVfSE9TVCwgTVNJX01PREVfTVVMVElGVU5DKTsKKwlRTENXUjMyKGFkYXB0ZXIsIENSQl9NUE9SVF9NT0RFLCBNUE9SVF9NVUxUSV9GVU5DVElPTl9NT0RFKTsKKwlRTENXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsIFBIQU5fSU5JVElBTElaRV9BQ0spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19oYW5kbGVfbGlua2V2ZW50KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgcWxjbmljX2Z3X21zZyAqbXNnKQoreworCXUzMiBjYWJsZV9PVUk7CisJdTE2IGNhYmxlX2xlbjsKKwl1MTYgbGlua19zcGVlZDsKKwl1OCAgbGlua19zdGF0dXMsIG1vZHVsZSwgZHVwbGV4LCBhdXRvbmVnOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlhZGFwdGVyLT5oYXNfbGlua19ldmVudHMgPSAxOworCisJY2FibGVfT1VJID0gbXNnLT5ib2R5WzFdICYgMHhmZmZmZmZmZjsKKwljYWJsZV9sZW4gPSAobXNnLT5ib2R5WzFdID4+IDMyKSAmIDB4ZmZmZjsKKwlsaW5rX3NwZWVkID0gKG1zZy0+Ym9keVsxXSA+PiA0OCkgJiAweGZmZmY7CisKKwlsaW5rX3N0YXR1cyA9IG1zZy0+Ym9keVsyXSAmIDB4ZmY7CisJZHVwbGV4ID0gKG1zZy0+Ym9keVsyXSA+PiAxNikgJiAweGZmOworCWF1dG9uZWcgPSAobXNnLT5ib2R5WzJdID4+IDI0KSAmIDB4ZmY7CisKKwltb2R1bGUgPSAobXNnLT5ib2R5WzJdID4+IDgpICYgMHhmZjsKKwlpZiAobW9kdWxlID09IExJTktFVkVOVF9NT0RVTEVfVFdJTkFYX1VOU1VQUE9SVEVEX0NBQkxFKQorCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBjYWJsZTogT1VJIDB4JXgsICIKKwkJCQkibGVuZ3RoICVkXG4iLCBjYWJsZV9PVUksIGNhYmxlX2xlbik7CisJZWxzZSBpZiAobW9kdWxlID09IExJTktFVkVOVF9NT0RVTEVfVFdJTkFYX1VOU1VQUE9SVEVEX0NBQkxFTEVOKQorCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBjYWJsZSBsZW5ndGggJWRcbiIsCisJCQkJY2FibGVfbGVuKTsKKworCXFsY25pY19hZHZlcnRfbGlua19jaGFuZ2UoYWRhcHRlciwgbGlua19zdGF0dXMpOworCisJaWYgKGR1cGxleCA9PSBMSU5LRVZFTlRfRlVMTF9EVVBMRVgpCisJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJZWxzZQorCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IERVUExFWF9IQUxGOworCisJYWRhcHRlci0+bW9kdWxlX3R5cGUgPSBtb2R1bGU7CisJYWRhcHRlci0+bGlua19hdXRvbmVnID0gYXV0b25lZzsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19oYW5kbGVfZndfbWVzc2FnZShpbnQgZGVzY19jbnQsIGludCBpbmRleCwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKK3sKKwlzdHJ1Y3QgcWxjbmljX2Z3X21zZyBtc2c7CisJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjOworCWludCBpID0gMCwgb3Bjb2RlOworCisJd2hpbGUgKGRlc2NfY250ID4gMCAmJiBpIDwgOCkgeworCQlkZXNjID0gJnNkc19yaW5nLT5kZXNjX2hlYWRbaW5kZXhdOworCQltc2cud29yZHNbaSsrXSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0pOworCQltc2cud29yZHNbaSsrXSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMV0pOworCisJCWluZGV4ID0gZ2V0X25leHRfaW5kZXgoaW5kZXgsIHNkc19yaW5nLT5udW1fZGVzYyk7CisJCWRlc2NfY250LS07CisJfQorCisJb3Bjb2RlID0gcWxjbmljX2dldF9uaWNfbXNnX29wY29kZShtc2cuYm9keVswXSk7CisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9MSU5LRVZFTlRfUkVTUE9OU0U6CisJCXFsY25pY19oYW5kbGVfbGlua2V2ZW50KHNkc19yaW5nLT5hZGFwdGVyLCAmbXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50CitxbGNuaWNfYWxsb2Nfcnhfc2tiKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZywKKwkJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgZG1hOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWJ1ZmZlci0+c2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOworCWlmICghYnVmZmVyLT5za2IpCisJCXJldHVybiAtRU5PTUVNOworCisJc2tiID0gYnVmZmVyLT5za2I7CisKKwlpZiAoIWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKworCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJCXJkc19yaW5nLT5kbWFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlidWZmZXItPnNrYiA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1ZmZlci0+c2tiID0gc2tiOworCWJ1ZmZlci0+ZG1hID0gZG1hOworCWJ1ZmZlci0+c3RhdGUgPSBRTENOSUNfQlVGRkVSX0JVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpxbGNuaWNfcHJvY2Vzc19yeGJ1ZihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsIHUxNiBpbmRleCwgdTE2IGNrc3VtKQoreworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWJ1ZmZlciA9ICZyZHNfcmluZy0+cnhfYnVmX2FycltpbmRleF07CisKKwlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZlci0+ZG1hLCByZHNfcmluZy0+ZG1hX3NpemUsCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJc2tiID0gYnVmZmVyLT5za2I7CisJaWYgKCFza2IpCisJCWdvdG8gbm9fc2tiOworCisJaWYgKGxpa2VseShhZGFwdGVyLT5yeF9jc3VtICYmIGNrc3VtID09IFNUQVRVU19DS1NVTV9PSykpIHsKKwkJYWRhcHRlci0+c3RhdHMuY3N1bW1lZCsrOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCX0gZWxzZSB7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwl9CisKKwlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWJ1ZmZlci0+c2tiID0gTlVMTDsKK25vX3NrYjoKKwlidWZmZXItPnN0YXRlID0gUUxDTklDX0JVRkZFUl9GUkVFOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqCitxbGNuaWNfcHJvY2Vzc19yY3Yoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nLAorCQlpbnQgcmluZywgdTY0IHN0c19kYXRhMCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlpbnQgaW5kZXgsIGxlbmd0aCwgY2tzdW0sIHBrdF9vZmZzZXQ7CisKKwlpZiAodW5saWtlbHkocmluZyA+PSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJaW5kZXggPSBxbGNuaWNfZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEwKTsKKwlpZiAodW5saWtlbHkoaW5kZXggPj0gcmRzX3JpbmctPm51bV9kZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOworCisJbGVuZ3RoID0gcWxjbmljX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEwKTsKKwlja3N1bSAgPSBxbGNuaWNfZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEwKTsKKwlwa3Rfb2Zmc2V0ID0gcWxjbmljX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YTApOworCisJc2tiID0gcWxjbmljX3Byb2Nlc3NfcnhidWYoYWRhcHRlciwgcmRzX3JpbmcsIGluZGV4LCBja3N1bSk7CisJaWYgKCFza2IpCisJCXJldHVybiBidWZmZXI7CisKKwlpZiAobGVuZ3RoID4gcmRzX3JpbmctPnNrYl9zaXplKQorCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKKwllbHNlCisJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCisJaWYgKHBrdF9vZmZzZXQpCisJCXNrYl9wdWxsKHNrYiwgcGt0X29mZnNldCk7CisKKwlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwluYXBpX2dyb19yZWNlaXZlKCZzZHNfcmluZy0+bmFwaSwgc2tiKTsKKworCWFkYXB0ZXItPnN0YXRzLnJ4X3BrdHMrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzICs9IGxlbmd0aDsKKworCXJldHVybiBidWZmZXI7Cit9CisKKyNkZWZpbmUgUUxDX1RDUF9IRFJfU0laRSAgICAgICAgICAgIDIwCisjZGVmaW5lIFFMQ19UQ1BfVFNfT1BUSU9OX1NJWkUgICAgICAxMgorI2RlZmluZSBRTENfVENQX1RTX0hEUl9TSVpFICAgICAgICAgKFFMQ19UQ1BfSERSX1NJWkUgKyBRTENfVENQX1RTX09QVElPTl9TSVpFKQorCitzdGF0aWMgc3RydWN0IHFsY25pY19yeF9idWZmZXIgKgorcWxjbmljX3Byb2Nlc3NfbHJvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZywKKwkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTAsIHU2NCBzdHNfZGF0YTEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IHRjcGhkciAqdGg7CisJYm9vbCBwdXNoLCB0aW1lc3RhbXA7CisJaW50IGwyX2hkcl9vZmZzZXQsIGw0X2hkcl9vZmZzZXQ7CisJaW50IGluZGV4OworCXUxNiBscm9fbGVuZ3RoLCBsZW5ndGgsIGRhdGFfb2Zmc2V0OworCXUzMiBzZXFfbnVtYmVyOworCisJaWYgKHVubGlrZWx5KHJpbmcgPiBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJaW5kZXggPSBxbGNuaWNfZ2V0X2xyb19zdHNfcmVmaGFuZGxlKHN0c19kYXRhMCk7CisJaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm51bV9kZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOworCisJdGltZXN0YW1wID0gcWxjbmljX2dldF9scm9fc3RzX3RpbWVzdGFtcChzdHNfZGF0YTApOworCWxyb19sZW5ndGggPSBxbGNuaWNfZ2V0X2xyb19zdHNfbGVuZ3RoKHN0c19kYXRhMCk7CisJbDJfaGRyX29mZnNldCA9IHFsY25pY19nZXRfbHJvX3N0c19sMl9oZHJfb2Zmc2V0KHN0c19kYXRhMCk7CisJbDRfaGRyX29mZnNldCA9IHFsY25pY19nZXRfbHJvX3N0c19sNF9oZHJfb2Zmc2V0KHN0c19kYXRhMCk7CisJcHVzaCA9IHFsY25pY19nZXRfbHJvX3N0c19wdXNoX2ZsYWcoc3RzX2RhdGEwKTsKKwlzZXFfbnVtYmVyID0gcWxjbmljX2dldF9scm9fc3RzX3NlcV9udW1iZXIoc3RzX2RhdGExKTsKKworCXNrYiA9IHFsY25pY19wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgU1RBVFVTX0NLU1VNX09LKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIGJ1ZmZlcjsKKworCWlmICh0aW1lc3RhbXApCisJCWRhdGFfb2Zmc2V0ID0gbDRfaGRyX29mZnNldCArIFFMQ19UQ1BfVFNfSERSX1NJWkU7CisJZWxzZQorCQlkYXRhX29mZnNldCA9IGw0X2hkcl9vZmZzZXQgKyBRTENfVENQX0hEUl9TSVpFOworCisJc2tiX3B1dChza2IsIGxyb19sZW5ndGggKyBkYXRhX29mZnNldCk7CisKKwlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpICsgc2tiX2hlYWRyb29tKHNrYik7CisKKwlza2JfcHVsbChza2IsIGwyX2hkcl9vZmZzZXQpOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgKGlwaC0+aWhsIDw8IDIpKTsKKworCWxlbmd0aCA9IChpcGgtPmlobCA8PCAyKSArICh0aC0+ZG9mZiA8PCAyKSArIGxyb19sZW5ndGg7CisJaXBoLT50b3RfbGVuID0gaHRvbnMobGVuZ3RoKTsKKwlpcGgtPmNoZWNrID0gMDsKKwlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtPmlobCk7CisJdGgtPnBzaCA9IHB1c2g7CisJdGgtPnNlcSA9IGh0b25sKHNlcV9udW1iZXIpOworCisJbGVuZ3RoID0gc2tiLT5sZW47CisKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJYWRhcHRlci0+c3RhdHMubHJvX3BrdHMrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzICs9IGxlbmd0aDsKKworCXJldHVybiBidWZmZXI7Cit9CisKK2ludAorcWxjbmljX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZywgaW50IG1heCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjOworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeGJ1ZjsKKwl1NjQgc3RzX2RhdGEwLCBzdHNfZGF0YTE7CisKKwlpbnQgY291bnQgPSAwOworCWludCBvcGNvZGUsIHJpbmcsIGRlc2NfY250OworCXUzMiBjb25zdW1lciA9IHNkc19yaW5nLT5jb25zdW1lcjsKKworCXdoaWxlIChjb3VudCA8IG1heCkgeworCQlkZXNjID0gJnNkc19yaW5nLT5kZXNjX2hlYWRbY29uc3VtZXJdOworCQlzdHNfZGF0YTAgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdKTsKKworCQlpZiAoIShzdHNfZGF0YTAgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCQlicmVhazsKKworCQlkZXNjX2NudCA9IHFsY25pY19nZXRfc3RzX2Rlc2NfY250KHN0c19kYXRhMCk7CisJCW9wY29kZSA9IHFsY25pY19nZXRfc3RzX29wY29kZShzdHNfZGF0YTApOworCisJCXN3aXRjaCAob3Bjb2RlKSB7CisJCWNhc2UgUUxDTklDX1JYUEtUX0RFU0M6CisJCWNhc2UgUUxDTklDX09MRF9SWFBLVF9ERVNDOgorCQljYXNlIFFMQ05JQ19TWU5fT0ZGTE9BRDoKKwkJCXJpbmcgPSBxbGNuaWNfZ2V0X3N0c190eXBlKHN0c19kYXRhMCk7CisJCQlyeGJ1ZiA9IHFsY25pY19wcm9jZXNzX3JjdihhZGFwdGVyLCBzZHNfcmluZywKKwkJCQkJcmluZywgc3RzX2RhdGEwKTsKKwkJCWJyZWFrOworCQljYXNlIFFMQ05JQ19MUk9fREVTQzoKKwkJCXJpbmcgPSBxbGNuaWNfZ2V0X2xyb19zdHNfdHlwZShzdHNfZGF0YTApOworCQkJc3RzX2RhdGExID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVsxXSk7CisJCQlyeGJ1ZiA9IHFsY25pY19wcm9jZXNzX2xybyhhZGFwdGVyLCBzZHNfcmluZywKKwkJCQkJcmluZywgc3RzX2RhdGEwLCBzdHNfZGF0YTEpOworCQkJYnJlYWs7CisJCWNhc2UgUUxDTklDX1JFU1BPTlNFX0RFU0M6CisJCQlxbGNuaWNfaGFuZGxlX2Z3X21lc3NhZ2UoZGVzY19jbnQsIGNvbnN1bWVyLCBzZHNfcmluZyk7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHNraXA7CisJCX0KKworCQlXQVJOX09OKGRlc2NfY250ID4gMSk7CisKKwkJaWYgKHJ4YnVmKQorCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKKworc2tpcDoKKwkJZm9yICg7IGRlc2NfY250ID4gMDsgZGVzY19jbnQtLSkgeworCQkJZGVzYyA9ICZzZHNfcmluZy0+ZGVzY19oZWFkW2NvbnN1bWVyXTsKKwkJCWRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0gPQorCQkJCWNwdV90b19sZTY0KFNUQVRVU19PV05FUl9QSEFOVE9NKTsKKwkJCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsIHNkc19yaW5nLT5udW1fZGVzYyk7CisJCX0KKwkJY291bnQrKzsKKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPQorCQkJJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJnNkc19yaW5nLT5mcmVlX2xpc3RbcmluZ10pKSB7CisJCQlsaXN0X2Zvcl9lYWNoKGN1ciwgJnNkc19yaW5nLT5mcmVlX2xpc3RbcmluZ10pIHsKKwkJCQlyeGJ1ZiA9IGxpc3RfZW50cnkoY3VyLAorCQkJCQkJc3RydWN0IHFsY25pY19yeF9idWZmZXIsIGxpc3QpOworCQkJCXFsY25pY19hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIHJ4YnVmKTsKKwkJCX0KKwkJCXNwaW5fbG9jaygmcmRzX3JpbmctPmxvY2spOworCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddLAorCQkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKKwkJfQorCisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCByZHNfcmluZyk7CisJfQorCisJaWYgKGNvdW50KSB7CisJCXNkc19yaW5nLT5jb25zdW1lciA9IGNvbnN1bWVyOworCQl3cml0ZWwoY29uc3VtZXIsIHNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQKK3FsY25pY19wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpCit7CisJc3RydWN0IHJjdl9kZXNjICpwZGVzYzsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqYnVmZmVyOworCWludCBwcm9kdWNlciwgY291bnQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisKKwlwcm9kdWNlciA9IHJkc19yaW5nLT5wcm9kdWNlcjsKKworCXNwaW5fbG9jaygmcmRzX3JpbmctPmxvY2spOworCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKworCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyLCBsaXN0KTsKKworCQlpZiAoIWJ1ZmZlci0+c2tiKSB7CisJCQlpZiAocWxjbmljX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgYnVmZmVyKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWNvdW50Kys7CisJCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOworCisJCS8qIG1ha2UgYSByY3YgZGVzY3JpcHRvciAgKi8KKwkJcGRlc2MgPSAmcmRzX3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKKwkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOworCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CisKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm51bV9kZXNjKTsKKwl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKKworCWlmIChjb3VudCkgeworCQlyZHNfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKwkJd3JpdGVsKChwcm9kdWNlci0xKSAmIChyZHNfcmluZy0+bnVtX2Rlc2MtMSksCisJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3FsY25pY19wb3N0X3J4X2J1ZmZlcnNfbm9kYihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpCit7CisJc3RydWN0IHJjdl9kZXNjICpwZGVzYzsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqYnVmZmVyOworCWludCBwcm9kdWNlciwgY291bnQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisKKwlwcm9kdWNlciA9IHJkc19yaW5nLT5wcm9kdWNlcjsKKwlpZiAoIXNwaW5fdHJ5bG9jaygmcmRzX3JpbmctPmxvY2spKQorCQlyZXR1cm47CisKKwloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisKKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciwgbGlzdCk7CisKKwkJaWYgKCFidWZmZXItPnNrYikgeworCQkJaWYgKHFsY25pY19hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIGJ1ZmZlcikpCisJCQkJYnJlYWs7CisJCX0KKworCQljb3VudCsrOworCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKKworCQkvKiBtYWtlIGEgcmN2IGRlc2NyaXB0b3IgICovCisJCXBkZXNjID0gJnJkc19yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGNwdV90b19sZTE2KGJ1ZmZlci0+cmVmX2hhbmRsZSk7CisJCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPmRtYV9zaXplKTsKKwkJcGRlc2MtPmFkZHJfYnVmZmVyID0gY3B1X3RvX2xlNjQoYnVmZmVyLT5kbWEpOworCisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJkc19yaW5nLT5udW1fZGVzYyk7CisJfQorCisJaWYgKGNvdW50KSB7CisJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCQl3cml0ZWwoKHByb2R1Y2VyIC0gMSkgJiAocmRzX3JpbmctPm51bV9kZXNjIC0gMSksCisJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIpOworCX0KKwlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHFsY25pY19yeF9idWZmZXIgKgorcWxjbmljX3Byb2Nlc3NfcmN2X2RpYWcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nLAorCQlpbnQgcmluZywgdTY0IHN0c19kYXRhMCkKK3sKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJaW50IGluZGV4LCBsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KHJpbmcgPj0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncykpCisJCXJldHVybiBOVUxMOworCisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCWluZGV4ID0gcWxjbmljX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhMCk7CisJaWYgKHVubGlrZWx5KGluZGV4ID49IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKKworCWxlbmd0aCA9IHFsY25pY19nZXRfc3RzX3RvdGFsbGVuZ3RoKHN0c19kYXRhMCk7CisJY2tzdW0gID0gcWxjbmljX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhMCk7CisJcGt0X29mZnNldCA9IHFsY25pY19nZXRfc3RzX3BrdF9vZmZzZXQoc3RzX2RhdGEwKTsKKworCXNrYiA9IHFsY25pY19wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgY2tzdW0pOworCWlmICghc2tiKQorCQlyZXR1cm4gYnVmZmVyOworCisJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisKKwlpZiAocGt0X29mZnNldCkKKwkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKKworCXNrYi0+dHJ1ZXNpemUgPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CisKKwlpZiAoIXFsY25pY19jaGVja19sb29wYmFja19idWZmKHNrYi0+ZGF0YSkpCisJCWFkYXB0ZXItPmRpYWdfY250Kys7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKwordm9pZAorcWxjbmljX3Byb2Nlc3NfcmN2X3JpbmdfZGlhZyhzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhidWY7CisJdTY0IHN0c19kYXRhMDsKKworCWludCBvcGNvZGUsIHJpbmcsIGRlc2NfY250OworCXUzMiBjb25zdW1lciA9IHNkc19yaW5nLT5jb25zdW1lcjsKKworCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07CisJc3RzX2RhdGEwID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVswXSk7CisKKwlpZiAoIShzdHNfZGF0YTAgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCXJldHVybjsKKworCWRlc2NfY250ID0gcWxjbmljX2dldF9zdHNfZGVzY19jbnQoc3RzX2RhdGEwKTsKKwlvcGNvZGUgPSBxbGNuaWNfZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEwKTsKKworCXJpbmcgPSBxbGNuaWNfZ2V0X3N0c190eXBlKHN0c19kYXRhMCk7CisJcnhidWYgPSBxbGNuaWNfcHJvY2Vzc19yY3ZfZGlhZyhhZGFwdGVyLCBzZHNfcmluZywKKwkJCQkJcmluZywgc3RzX2RhdGEwKTsKKworCWRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0gPSBjcHVfdG9fbGU2NChTVEFUVVNfT1dORVJfUEhBTlRPTSk7CisJY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChjb25zdW1lciwgc2RzX3JpbmctPm51bV9kZXNjKTsKKworCXNkc19yaW5nLT5jb25zdW1lciA9IGNvbnN1bWVyOworCXdyaXRlbChjb25zdW1lciwgc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjVlOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTAsMCArMSwyNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlICJxbGNuaWMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgMTAgR2JFIENvbnZlcmdlZCBFdGhlcm5ldCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQpOworTU9EVUxFX0ZJUk1XQVJFKFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFX05BTUUpOworCitjaGFyIHFsY25pY19kcml2ZXJfbmFtZVtdID0gInFsY25pYyI7CitzdGF0aWMgY29uc3QgY2hhciBxbGNuaWNfZHJpdmVyX3N0cmluZ1tdID0gIlFMb2dpYyBDb252ZXJnZWQgRXRoZXJuZXQgRHJpdmVyIHYiCisgICAgUUxDTklDX0xJTlVYX1ZFUlNJT05JRDsKKworc3RhdGljIGludCBwb3J0X21vZGUgPSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHOworCisvKiBEZWZhdWx0IHRvIHJlc3RyaWN0ZWQgMUcgYXV0by1uZWcgbW9kZSAqLworc3RhdGljIGludCB3b2xfcG9ydF9tb2RlID0gNTsKKworc3RhdGljIGludCB1c2VfbXNpID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfbXNpLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfbXNpLCAiTVNJIGludGVycnVwdCAoMD1kaXNhYmxlZCwgMT1lbmFibGVkIik7CisKK3N0YXRpYyBpbnQgdXNlX21zaV94ID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfbXNpX3gsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9tc2lfeCwgIk1TSS1YIGludGVycnVwdCAoMD1kaXNhYmxlZCwgMT1lbmFibGVkIik7CisKK3N0YXRpYyBpbnQgYXV0b19md19yZXNldCA9IEFVVE9fRldfUkVTRVRfRU5BQkxFRDsKK21vZHVsZV9wYXJhbShhdXRvX2Z3X3Jlc2V0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvX2Z3X3Jlc2V0LCAiQXV0byBmaXJtd2FyZSByZXNldCAoMD1kaXNhYmxlZCwgMT1lbmFibGVkIik7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcWxjbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgaW50IHFsY25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIGludCBxbGNuaWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgdm9pZCBxbGNuaWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHFsY25pY190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIHFsY25pY19hdHRhY2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgcWxjbmljX2Z3aW5pdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBxbGNuaWNfZndfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBxbGNuaWNfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXdvcmtfZnVuY190IGZ1bmMsIGludCBkZWxheSk7CitzdGF0aWMgdm9pZCBxbGNuaWNfY2FuY2VsX2Z3X3dvcmsoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgcWxjbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgcWxjbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBxbGNuaWNfY3JlYXRlX3N5c2ZzX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHFsY25pY19yZW1vdmVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgcWxjbmljX2NyZWF0ZV9kaWFnX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHFsY25pY19yZW1vdmVfZGlhZ19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyB2b2lkIHFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBxbGNuaWNfY2FuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfdG1wX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX21zaV9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlycXJldHVybl90IHFsY25pY19tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcWxjbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHFsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nKTsKKworLyogIFBDSSBEZXZpY2UgSUQgVGFibGUgICovCisjZGVmaW5lIEVOVFJZKGRldmljZSkgXAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCAoZGV2aWNlKSksIFwKKwkuY2xhc3MgPSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4LCAuY2xhc3NfbWFzayA9IH4wfQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX1FMRTgyNFggIDB4ODAyMAorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocWxjbmljX3BjaV90YmwpID0geworCUVOVFJZKFBDSV9ERVZJQ0VfSURfUUxPR0lDX1FMRTgyNFgpLAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBxbGNuaWNfcGNpX3RibCk7CisKKwordm9pZAorcWxjbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZykKK3sKKwl3cml0ZWwodHhfcmluZy0+cHJvZHVjZXIsIHR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIpOworCisJaWYgKHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSA8PSBUWF9TVE9QX1RIUkVTSCkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJCXNtcF9tYigpOworCX0KK30KKworc3RhdGljIGNvbnN0IHUzMiBtc2lfdGd0X3N0YXR1c1s4XSA9IHsKKwlJU1JfSU5UX1RBUkdFVF9TVEFUVVMsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMSwKKwlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMywKKwlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjQsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNSwKKwlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjYsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNworfTsKKworc3RhdGljIGNvbnN0CitzdHJ1Y3QgcWxjbmljX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cltdID0gUUxDTklDX0xFR0FDWV9JTlRSX0NPTkZJRzsKKworc3RhdGljIGlubGluZSB2b2lkIHFsY25pY19kaXNhYmxlX2ludChzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQoreworCXdyaXRlbCgwLCBzZHNfcmluZy0+Y3JiX2ludHJfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxbGNuaWNfZW5hYmxlX2ludChzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCisJd3JpdGVsKDB4MSwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2spOworCisJaWYgKCFRTENOSUNfSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKKwkJd3JpdGVsKDB4ZmJmZiwgYWRhcHRlci0+dGd0X21hc2tfcmVnKTsKK30KKworc3RhdGljIGludAorcWxjbmljX2FsbG9jX3Nkc19yaW5ncyhzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHgsIGludCBjb3VudCkKK3sKKwlpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcpICogY291bnQ7CisKKwlyZWN2X2N0eC0+c2RzX3JpbmdzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiAocmVjdl9jdHgtPnNkc19yaW5ncyA9PSBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19mcmVlX3Nkc19yaW5ncyhzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHgpCit7CisJaWYgKHJlY3ZfY3R4LT5zZHNfcmluZ3MgIT0gTlVMTCkKKwkJa2ZyZWUocmVjdl9jdHgtPnNkc19yaW5ncyk7CisKKwlyZWN2X2N0eC0+c2RzX3JpbmdzID0gTlVMTDsKK30KKworc3RhdGljIGludAorcWxjbmljX25hcGlfYWRkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChxbGNuaWNfYWxsb2Nfc2RzX3JpbmdzKHJlY3ZfY3R4LCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnNkc19yaW5nLT5uYXBpLAorCQkJCXFsY25pY19wb2xsLCBRTENOSUNfTkVUREVWX1dFSUdIVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfbmFwaV9kZWwoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluZXRpZl9uYXBpX2RlbCgmc2RzX3JpbmctPm5hcGkpOworCX0KKworCXFsY25pY19mcmVlX3Nkc19yaW5ncygmYWRhcHRlci0+cmVjdl9jdHgpOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX25hcGlfZW5hYmxlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmFwaV9lbmFibGUoJnNkc19yaW5nLT5uYXBpKTsKKwkJcWxjbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK3FsY25pY19uYXBpX2Rpc2FibGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlxbGNuaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOworCQluYXBpX3N5bmNocm9uaXplKCZzZHNfcmluZy0+bmFwaSk7CisJCW5hcGlfZGlzYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCX0KK30KKworc3RhdGljIHZvaWQgcWxjbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2YoYWRhcHRlci0+c3RhdHMpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3NldF9kbWFfbWFzayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXU2NCBtYXNrLCBjbWFzazsKKworCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAwOworCisJbWFzayA9IERNQV9CSVRfTUFTSygzOSk7CisJY21hc2sgPSBtYXNrOworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgorCQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGNtYXNrKSA9PSAwKSB7CisJCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTzsKK30KKworLyogVXBkYXRlIGFkZHJlc3NhYmxlIHJhbmdlIGlmIGZpcm13YXJlIHN1cHBvcnRzIGl0ICovCitzdGF0aWMgaW50CitxbGNuaWNfdXBkYXRlX2RtYV9tYXNrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgY2hhbmdlLCBzaGlmdCwgZXJyOworCXU2NCBtYXNrLCBvbGRfbWFzaywgb2xkX2NtYXNrOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWNoYW5nZSA9IDA7CisKKwlzaGlmdCA9IFFMQ1JEMzIoYWRhcHRlciwgQ1JCX0RNQV9TSElGVCk7CisJaWYgKHNoaWZ0ID4gMzIpCisJCXJldHVybiAwOworCisJaWYgKHNoaWZ0ID4gOSkKKwkJY2hhbmdlID0gMTsKKworCWlmIChjaGFuZ2UpIHsKKwkJb2xkX21hc2sgPSBwZGV2LT5kbWFfbWFzazsKKwkJb2xkX2NtYXNrID0gcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrOworCisJCW1hc2sgPSBETUFfQklUX01BU0soMzIrc2hpZnQpOworCisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzayk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIG1hc2spOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgJWQtYml0IGRtYSBtYXNrXG4iLCAzMitzaGlmdCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJcGNpX3NldF9kbWFfbWFzayhwZGV2LCBvbGRfbWFzayk7CisJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIG9sZF9jbWFzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcWxjbmljX3NldF9wb3J0X21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWwsIGRhdGE7CisKKwl2YWwgPSBhZGFwdGVyLT5haHcuYm9hcmRfdHlwZTsKKwlpZiAoKHZhbCA9PSBRTENOSUNfQlJEVFlQRV9QM19ITUVaKSB8fAorCQkodmFsID09IFFMQ05JQ19CUkRUWVBFX1AzX1hHX0xPTSkpIHsKKwkJaWYgKHBvcnRfbW9kZSA9PSBRTENOSUNfUE9SVF9NT0RFXzgwMl8zX0FQKSB7CisJCQlkYXRhID0gUUxDTklDX1BPUlRfTU9ERV84MDJfM19BUDsKKwkJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSLCBkYXRhKTsKKwkJfSBlbHNlIGlmIChwb3J0X21vZGUgPT0gUUxDTklDX1BPUlRfTU9ERV9YRykgeworCQkJZGF0YSA9IFFMQ05JQ19QT1JUX01PREVfWEc7CisJCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19QT1JUX01PREVfQUREUiwgZGF0YSk7CisJCX0gZWxzZSBpZiAocG9ydF9tb2RlID09IFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfMUcpIHsKKwkJCWRhdGEgPSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHXzFHOworCQkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUE9SVF9NT0RFX0FERFIsIGRhdGEpOworCQl9IGVsc2UgaWYgKHBvcnRfbW9kZSA9PSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHX1hHKSB7CisJCQlkYXRhID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FR19YRzsKKwkJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSLCBkYXRhKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHOworCQkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUE9SVF9NT0RFX0FERFIsIGRhdGEpOworCQl9CisKKwkJaWYgKCh3b2xfcG9ydF9tb2RlICE9IFFMQ05JQ19QT1JUX01PREVfODAyXzNfQVApICYmCisJCQkod29sX3BvcnRfbW9kZSAhPSBRTENOSUNfUE9SVF9NT0RFX1hHKSAmJgorCQkJKHdvbF9wb3J0X21vZGUgIT0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FR18xRykgJiYKKwkJCSh3b2xfcG9ydF9tb2RlICE9IFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfWEcpKSB7CisJCQl3b2xfcG9ydF9tb2RlID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FRzsKKwkJfQorCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfUE9SVF9NT0RFLCB3b2xfcG9ydF9tb2RlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19zZXRfbXNpeF9iaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBlbmFibGUpCit7CisJdTMyIGNvbnRyb2w7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAocG9zKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MsICZjb250cm9sKTsKKwkJaWYgKGVuYWJsZSkKKwkJCWNvbnRyb2wgfD0gUENJX01TSVhfRkxBR1NfRU5BQkxFOworCQllbHNlCisJCQljb250cm9sID0gMDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwb3MsIGNvbnRyb2wpOworCX0KK30KKworc3RhdGljIHZvaWQgcWxjbmljX2luaXRfbXNpeF9lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGNvdW50KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19yZWFkX21hY19hZGRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpwOworCXU2NCBtYWNfYWRkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWlmIChxbGNuaWNfZ2V0X21hY19hZGRyKGFkYXB0ZXIsICZtYWNfYWRkcikgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlwID0gKHVuc2lnbmVkIGNoYXIgKikmbWFjX2FkZHI7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJbmV0ZGV2LT5kZXZfYWRkcltpXSA9ICoocCArIDUgLSBpKTsKKworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPm1hY19hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCS8qIHNldCBzdGF0aW9uIGFkZHJlc3MgKi8KKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPnBlcm1fYWRkcikpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJCYWQgTUFDIGFkZHJlc3MgJXBNLlxuIiwKKwkJCQkJbmV0ZGV2LT5kZXZfYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwkJcWxjbmljX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKKwl9CisKKwltZW1jcHkoYWRhcHRlci0+bWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwlxbGNuaWNfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwkJcWxjbmljX25hcGlfZW5hYmxlKGFkYXB0ZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBxbGNuaWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgPSBxbGNuaWNfb3BlbiwKKwkubmRvX3N0b3AJICAgPSBxbGNuaWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ICAgID0gcWxjbmljX3htaXRfZnJhbWUsCisJLm5kb19nZXRfc3RhdHMJICAgPSBxbGNuaWNfZ2V0X3N0YXRzLAorCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gcWxjbmljX3NldF9tdWx0aSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHFsY25pY19zZXRfbWFjLAorCS5uZG9fY2hhbmdlX210dQkgICA9IHFsY25pY19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkgICA9IHFsY25pY190eF90aW1lb3V0LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBxbGNuaWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZAorcWxjbmljX3NldHVwX2ludHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IHN0cnVjdCBxbGNuaWNfbGVnYWN5X2ludHJfc2V0ICpsZWdhY3lfaW50cnA7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnIsIG51bV9tc2l4OworCisJaWYgKGFkYXB0ZXItPnJzc19zdXBwb3J0ZWQpIHsKKwkJbnVtX21zaXggPSAobnVtX29ubGluZV9jcHVzKCkgPj0gTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSA/CisJCQlNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVIgOiAyOworCX0gZWxzZQorCQludW1fbXNpeCA9IDE7CisKKwlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gMTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH4oUUxDTklDX01TSV9FTkFCTEVEIHwgUUxDTklDX01TSVhfRU5BQkxFRCk7CisKKwlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbYWRhcHRlci0+YWh3LnBjaV9mdW5jXTsKKworCWFkYXB0ZXItPmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKKwlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlsZWdhY3lfaW50cnAtPnRndF9zdGF0dXNfcmVnKTsKKwlhZGFwdGVyLT50Z3RfbWFza19yZWcgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWcpOworCWFkYXB0ZXItPmlzcl9pbnRfdmVjID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOworCisJYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJSVNSX0lOVF9TVEFURV9SRUcpOworCisJcWxjbmljX3NldF9tc2l4X2JpdChwZGV2LCAwKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCkgeworCisJCXFsY25pY19pbml0X21zaXhfZW50cmllcyhhZGFwdGVyLCBudW1fbXNpeCk7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsIG51bV9tc2l4KTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTVNJWF9FTkFCTEVEOworCQkJcWxjbmljX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKKworCQkJaWYgKGFkYXB0ZXItPnJzc19zdXBwb3J0ZWQpCisJCQkJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG51bV9tc2l4OworCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpLXggaW50ZXJydXB0c1xuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoZXJyID4gMCkKKwkJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CisKKwkJLyogZmFsbCB0aHJvdWdoIGZvciBtc2kgKi8KKwl9CisKKwlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gUUxDTklDX01TSV9FTkFCTEVEOworCQlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LnBjaV9mdW5jXSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kgaW50ZXJydXB0c1xuIik7CisJCWFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IgPSBwZGV2LT5pcnE7CisJCXJldHVybjsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCWFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IgPSBwZGV2LT5pcnE7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfdGVhcmRvd25faW50cihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX01TSVhfRU5BQkxFRCkKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfTVNJX0VOQUJMRUQpCisJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19jbGVhbnVwX3BjaV9tYXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UwICE9IE5VTEwpCisJCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zZXR1cF9wY2lfbWFwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBtZW1fbGVuLCBwY2lfbGVuMCA9IDA7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOworCisJLyoKKwkgKiBTZXQgdGhlIENSQiB3aW5kb3cgdG8gaW52YWxpZC4gSWYgYW55IHJlZ2lzdGVyIGluIHdpbmRvdyAwIGlzCisJICogYWNjZXNzZWQgaXQgc2hvdWxkIHNldCB0aGUgd2luZG93IHRvIDAgYW5kIHRoZW4gcmVzZXQgaXQgdG8gMS4KKwkgKi8KKwlhZGFwdGVyLT5haHcuY3JiX3dpbiA9IC0xOworCWFkYXB0ZXItPmFody5vY21fd2luID0gLTE7CisKKwkvKiByZW1hcCBwaHlzIGFkZHJlc3MgKi8KKwltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsJLyogMCBpcyBmb3IgQkFSIDAgKi8KKwltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKworCWlmIChtZW1fbGVuID09IFFMQ05JQ19QQ0lfMk1CX1NJWkUpIHsKKworCQltZW1fcHRyMCA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKKwkJaWYgKG1lbV9wdHIwID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgUENJIGJhciAwXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXBjaV9sZW4wID0gbWVtX2xlbjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOworCisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOworCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOworCisJYWRhcHRlci0+YWh3Lm9jbV93aW5fY3JiID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfT0NNX1dJTkRPV19SRUcocGNpX2Z1bmMpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2JyZF9uYW1lKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGksIGZvdW5kID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fU1VQUE9SVEVEX0JPQVJEUzsgKytpKSB7CisJCWlmIChxbGNuaWNfYm9hcmRzW2ldLnZlbmRvciA9PSBwZGV2LT52ZW5kb3IgJiYKKwkJCXFsY25pY19ib2FyZHNbaV0uZGV2aWNlID09IHBkZXYtPmRldmljZSAmJgorCQkJcWxjbmljX2JvYXJkc1tpXS5zdWJfdmVuZG9yID09IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgJiYKKwkJCXFsY25pY19ib2FyZHNbaV0uc3ViX2RldmljZSA9PSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJCQkJc3RyY3B5KG5hbWUsIHFsY25pY19ib2FyZHNbaV0uc2hvcnRfbmFtZSk7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQl9CisKKwl9CisKKwlpZiAoIWZvdW5kKQorCQluYW1lID0gIlVua25vd24iOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2NoZWNrX29wdGlvbnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOworCWNoYXIgYnJkX25hbWVbUUxDTklDX01BWF9CT0FSRF9OQU1FX0xFTl07CisJY2hhciBzZXJpYWxfbnVtWzMyXTsKKwlpbnQgaSwgb2Zmc2V0LCB2YWw7CisJaW50ICpwdHIzMjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAwOworCisJcHRyMzIgPSAoaW50ICopJnNlcmlhbF9udW07CisJb2Zmc2V0ID0gUUxDTklDX0ZXX1NFUklBTF9OVU1fT0ZGU0VUOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJnZhbCkgPT0gLTEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlYWRpbmcgYm9hcmQgaW5mb1xuIik7CisJCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOworCQkJcmV0dXJuOworCQl9CisJCXB0cjMyW2ldID0gY3B1X3RvX2xlMzIodmFsKTsKKwkJb2Zmc2V0ICs9IHNpemVvZih1MzIpOworCX0KKworCWZ3X21ham9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NQUpPUik7CisJZndfbWlub3IgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX01JTk9SKTsKKwlmd19idWlsZCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0ZXX1ZFUlNJT05fU1VCKTsKKworCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBRTENOSUNfVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOworCisJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgeworCQlnZXRfYnJkX25hbWUoYWRhcHRlciwgYnJkX25hbWUpOworCisJCXByX2luZm8oIiVzOiAlcyBCb2FyZCBDaGlwIHJldiAweCV4XG4iLAorCQkJCW1vZHVsZV9uYW1lKFRISVNfTU9EVUxFKSwKKwkJCQlicmRfbmFtZSwgYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA8IFFMQ05JQ19WRVJTSU9OX0NPREUoMywgNCwgMjE2KSkgeworCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKKwkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKKwkJcmV0dXJuOworCX0KKworCWkgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19TUkVfTUlTQyk7CisJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKGkgJiAweDgwMDApID8gMSA6IDA7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgdiVkLiVkLiVkIFslc11cbiIsCisJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkLAorCQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dC10aHJvdWdoIiA6ICJsZWdhY3kiKTsKKworCWlmIChhZGFwdGVyLT5md192ZXJzaW9uID49IFFMQ05JQ19WRVJTSU9OX0NPREUoNCwgMCwgMjIyKSkKKwkJYWRhcHRlci0+Y2FwYWJpbGl0aWVzID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfRldfQ0FQQUJJTElUSUVTXzEpOworCisJYWRhcHRlci0+ZmxhZ3MgJj0gflFMQ05JQ19MUk9fRU5BQkxFRDsKKworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJCWFkYXB0ZXItPm51bV9yeGQgPSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xMEc7CisJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCQlhZGFwdGVyLT5udW1fcnhkID0gREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHOworCX0KKworCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7CisJYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OworCisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CisKKwlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IDA7CisJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDI7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zdGFydF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHZhbCwgZXJyLCBmaXJzdF9ib290OworCisJZXJyID0gcWxjbmljX3NldF9kbWFfbWFzayhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFxbGNuaWNfY2FuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKQorCQlnb3RvIHdhaXRfaW5pdDsKKworCWZpcnN0X2Jvb3QgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DQU1fUkFNKDB4MWZjKSk7CisJaWYgKGZpcnN0X2Jvb3QgPT0gMHg1NTU1NTU1NSkKKwkJLyogVGhpcyBpcyB0aGUgZmlyc3QgYm9vdCBhZnRlciBwb3dlciB1cCAqLworCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DQU1fUkFNKDB4MWZjKSwgUUxDTklDX0JESU5GT19NQUdJQyk7CisKKwlxbGNuaWNfcmVxdWVzdF9maXJtd2FyZShhZGFwdGVyKTsKKworCWVyciA9IHFsY25pY19uZWVkX2Z3X3Jlc2V0KGFkYXB0ZXIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXQ7CisJaWYgKGVyciA9PSAwKQorCQlnb3RvIHdhaXRfaW5pdDsKKworCWlmIChmaXJzdF9ib290ICE9IDB4NTU1NTU1NTUpIHsKKwkJUUxDV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCAwKTsKKwkJcWxjbmljX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIpOworCQltc2xlZXAoMSk7CisJfQorCisJUUxDV1IzMihhZGFwdGVyLCBDUkJfRE1BX1NISUZULCAweDU1NTU1NTU1KTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfSEFMVF9TVEFUVVMxLCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfSEFMVF9TVEFUVVMyLCAwKTsKKworCXFsY25pY19zZXRfcG9ydF9tb2RlKGFkYXB0ZXIpOworCisJZXJyID0gcWxjbmljX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJcWxjbmljX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CisKKwl2YWwgPSAoX1FMQ05JQ19MSU5VWF9NQUpPUiA8PCAxNikKKwkJfCAoKF9RTENOSUNfTElOVVhfTUlOT1IgPDwgOCkpCisJCXwgKF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTik7CisJUUxDV1IzMihhZGFwdGVyLCBDUkJfRFJJVkVSX1ZFUlNJT04sIHZhbCk7CisKK3dhaXRfaW5pdDoKKwkvKiBIYW5kc2hha2Ugd2l0aCB0aGUgY2FyZCBiZWZvcmUgd2UgcmVnaXN0ZXIgdGhlIGRldmljZXMuICovCisJZXJyID0gcWxjbmljX3BoYW50b21faW5pdChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFLCBRTENOSUNfREVWX1JFQURZKTsKKworCXFsY25pY191cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CisKKwlxbGNuaWNfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAwOworCisJLyogZmFsbCB0aHJvdWdoIGFuZCByZWxlYXNlIGZpcm13YXJlICovCisKK2Vycl9vdXQ6CisJcWxjbmljX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorcWxjbmljX3JlcXVlc3RfaXJxKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlpbnQgZXJyLCByaW5nOworCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlpZiAoYWRhcHRlci0+ZGlhZ190ZXN0ID09IFFMQ05JQ19JTlRFUlJVUFRfVEVTVCkgeworCQloYW5kbGVyID0gcWxjbmljX3RtcF9pbnRyOworCQlpZiAoIVFMQ05JQ19JU19NU0lfRkFNSUxZKGFkYXB0ZXIpKQorCQkJZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisKKwl9IGVsc2UgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfTVNJWF9FTkFCTEVEKQorCQkJaGFuZGxlciA9IHFsY25pY19tc2l4X2ludHI7CisJCWVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX01TSV9FTkFCTEVEKQorCQkJaGFuZGxlciA9IHFsY25pY19tc2lfaW50cjsKKwkJZWxzZSB7CisJCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKKwkJCWhhbmRsZXIgPSBxbGNuaWNfaW50cjsKKwkJfQorCX0KKwlhZGFwdGVyLT5pcnEgPSBuZXRkZXYtPmlycTsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJc3ByaW50ZihzZHNfcmluZy0+bmFtZSwgIiVzWyVkXSIsIG5ldGRldi0+bmFtZSwgcmluZyk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHNkc19yaW5nLT5pcnEsIGhhbmRsZXIsCisJCQkJICBmbGFncywgc2RzX3JpbmctPm5hbWUsIHNkc19yaW5nKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZnJlZV9pcnEoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCWZyZWVfaXJxKHNkc19yaW5nLT5pcnEsIHNkc19yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfaW5pdF9jb2FsZXNjZV9kZWZhdWx0cyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+Y29hbC5mbGFncyA9IFFMQ05JQ19JTlRSX0RFRkFVTFQ7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9USU1FX1VTOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUzsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXMgPQorCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1RJTUVfVVM7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF9wYWNrZXRzID0KKwkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9QQUNLRVRTOworfQorCitzdGF0aWMgaW50CitfX3FsY25pY191cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm4gLUVJTzsKKworCXFsY25pY19zZXRfbXVsdGkobmV0ZGV2KTsKKwlxbGNuaWNfZndfY21kX3NldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOworCisJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisKKwlpZiAoYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA+IDEpCisJCXFsY25pY19jb25maWdfcnNzKGFkYXB0ZXIsIDEpOworCisJcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0hXX0xSTykKKwkJcWxjbmljX2NvbmZpZ19od19scm8oYWRhcHRlciwgUUxDTklDX0xST19FTkFCTEVEKTsKKworCXFsY25pY19uYXBpX2VuYWJsZShhZGFwdGVyKTsKKworCXFsY25pY19saW5rZXZlbnRfcmVxdWVzdChhZGFwdGVyLCAxKTsKKworCXNldF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiAwOworfQorCisvKiBVc2FnZTogRHVyaW5nIHJlc3VtZSBhbmQgZmlybXdhcmUgcmVjb3ZlcnkgbW9kdWxlLiovCisKK3N0YXRpYyBpbnQKK3FsY25pY191cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwlydG5sX2xvY2soKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQllcnIgPSBfX3FsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorX19xbGNuaWNfZG93bihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCXNtcF9tYigpOworCXNwaW5fbG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CisKKwlxbGNuaWNfZnJlZV9tYWNfbGlzdChhZGFwdGVyKTsKKworCXFsY25pY19uaWNfc2V0X3Byb21pc2MoYWRhcHRlciwgUUxDTklDX05JVV9OT05fUFJPTUlTQ19NT0RFKTsKKworCXFsY25pY19uYXBpX2Rpc2FibGUoYWRhcHRlcik7CisKKwlxbGNuaWNfcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKK30KKworLyogVXNhZ2U6IER1cmluZyBzdXNwZW5kIGFuZCBmaXJtd2FyZSByZWNvdmVyeSBtb2R1bGUgKi8KKworc3RhdGljIHZvaWQKK3FsY25pY19kb3duKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydG5sX2xvY2soKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlfX3FsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisJcnRubF91bmxvY2soKTsKKworfQorCitzdGF0aWMgaW50CitxbGNuaWNfYXR0YWNoKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgZXJyLCByaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgPT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAwOworCisJZXJyID0gcWxjbmljX2luaXRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHFsY25pY19uYXBpX2FkZChhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBxbGNuaWNfYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgaW4gc2V0dGluZyBzdyByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHFsY25pY19hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3N3OworCX0KKworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKworCWVyciA9IHFsY25pY19yZXF1ZXN0X2lycShhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXR1cCBpbnRlcnJ1cHRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKKwl9CisKKwlxbGNuaWNfaW5pdF9jb2FsZXNjZV9kZWZhdWx0cyhhZGFwdGVyKTsKKworCXFsY25pY19jcmVhdGVfc3lzZnNfZW50cmllcyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPmlzX3VwID0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUM7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9yeGJ1ZjoKKwlxbGNuaWNfcmVsZWFzZV9yeF9idWZmZXJzKGFkYXB0ZXIpOworCXFsY25pY19mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXRfZnJlZV9zdzoKKwlxbGNuaWNfZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19kZXRhY2goc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuOworCisJcWxjbmljX3JlbW92ZV9zeXNmc19lbnRyaWVzKGFkYXB0ZXIpOworCisJcWxjbmljX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXFsY25pY19yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJcWxjbmljX2ZyZWVfaXJxKGFkYXB0ZXIpOworCXFsY25pY19uYXBpX2RlbChhZGFwdGVyKTsKKwlxbGNuaWNfZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5pc191cCA9IDA7Cit9CisKK3ZvaWQgcWxjbmljX2RpYWdfZnJlZV9yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG1heF9zZHNfcmluZ3MpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCByaW5nOworCisJaWYgKGFkYXB0ZXItPmRpYWdfdGVzdCA9PSBRTENOSUNfSU5URVJSVVBUX1RFU1QpIHsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQkJc2RzX3JpbmcgPSAmYWRhcHRlci0+cmVjdl9jdHguc2RzX3JpbmdzW3JpbmddOworCQkJcWxjbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKKwkJfQorCX0KKworCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisKKwlhZGFwdGVyLT5kaWFnX3Rlc3QgPSAwOworCWFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPSBtYXhfc2RzX3JpbmdzOworCisJaWYgKHFsY25pY19hdHRhY2goYWRhcHRlcikpCisJCXJldHVybjsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCV9fcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7Cit9CisKK2ludCBxbGNuaWNfZGlhZ19hbGxvY19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHRlc3QpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCByaW5nOworCWludCByZXQ7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlfX3FsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7CisJYWRhcHRlci0+ZGlhZ190ZXN0ID0gdGVzdDsKKworCXJldCA9IHFsY25pY19hdHRhY2goYWRhcHRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhZGFwdGVyLT5kaWFnX3Rlc3QgPT0gUUxDTklDX0lOVEVSUlVQVF9URVNUKSB7CisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnNkc19yaW5nc1tyaW5nXTsKKwkJCXFsY25pY19lbmFibGVfaW50KHNkc19yaW5nKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQKK3FsY25pY19yZXNldF9jb250ZXh0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKSB7CisKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQlfX3FsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwkJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gX19xbGNuaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKworCQkJaWYgKGVycikKKwkJCQlnb3RvIGRvbmU7CisJCX0KKworCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJfQorCitkb25lOgorCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorcWxjbmljX3NldHVwX25ldGRldihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5yeF9jc3VtID0gMTsKKwlhZGFwdGVyLT5tY19lbmFibGVkID0gMDsKKwlhZGFwdGVyLT5tYXhfbWNfY291bnQgPSAzODsKKworCW5ldGRldi0+bmV0ZGV2X29wcwkgICA9ICZxbGNuaWNfbmV0ZGV2X29wczsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvICAgICA9IDIqSFo7CisKKwlxbGNuaWNfY2hhbmdlX210dShuZXRkZXYsIG5ldGRldi0+bXR1KTsKKworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZxbGNuaWNfZXRodG9vbF9vcHMpOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0dSTyk7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOworCisJaWYgKGFkYXB0ZXItPnBjaV91c2luZ19kYWMpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJfQorCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0ZWTEFOVFgpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCk7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssIHFsY25pY190eF90aW1lb3V0X3Rhc2spOworCisJaWYgKHFsY25pY19yZWFkX21hY19hZGRyKGFkYXB0ZXIpKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgbWFjIGFkZHJcbiIpOworCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3FsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCWludCBlcnI7CisJaW50IHBjaV9mdW5jX2lkID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOworCXVpbnQ4X3QgcmV2aXNpb25faWQ7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBxbGNuaWNfZHJpdmVyX25hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIpKTsKKwlpZiAoIW5ldGRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbmV0X2RldmljZVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ICA9IG5ldGRldjsKKwlhZGFwdGVyLT5wZGV2ICAgID0gcGRldjsKKwlhZGFwdGVyLT5haHcucGNpX2Z1bmMgID0gcGNpX2Z1bmNfaWQ7CisKKwlyZXZpc2lvbl9pZCA9IHBkZXYtPnJldmlzaW9uOworCWFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOworCisJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFody5jcmJfbG9jayk7CisJbXV0ZXhfaW5pdCgmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+bWFjX2xpc3QpOworCisJZXJyID0gcWxjbmljX3NldHVwX3BjaV9tYXAoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCisJLyogVGhpcyB3aWxsIGJlIHJlc2V0IGZvciBtZXp6IGNhcmRzICAqLworCWFkYXB0ZXItPnBvcnRudW0gPSBwY2lfZnVuY19pZDsKKworCWVyciA9IHFsY25pY19nZXRfYm9hcmRfaW5mbyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGdldHRpbmcgYm9hcmQgY29uZmlnIGluZm8uXG4iKTsKKwkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisJfQorCisKKwllcnIgPSBxbGNuaWNfc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2RlY3JfcmVmOworCisJLyoKKwkgKiBTZWUgaWYgdGhlIGZpcm13YXJlIGdhdmUgdXMgYSB2aXJ0dWFsLXBoeXNpY2FsIHBvcnQgbWFwcGluZy4KKwkgKi8KKwlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gYWRhcHRlci0+cG9ydG51bTsKKworCXFsY25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKKworCXFsY25pY19zZXR1cF9pbnRyKGFkYXB0ZXIpOworCisJZXJyID0gcWxjbmljX3NldHVwX25ldGRldihhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kaXNhYmxlX21zaTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTsKKworCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOworCisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CisJY2FzZSBRTENOSUNfR0JFOgorCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXM6IEdiRSBwb3J0IGluaXRpYWxpemVkXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUUxDTklDX1hHQkU6CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogWEdiRSBwb3J0IGluaXRpYWxpemVkXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWJyZWFrOworCX0KKworCXFsY25pY19jcmVhdGVfZGlhZ19lbnRyaWVzKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZGlzYWJsZV9tc2k6CisJcWxjbmljX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CisKK2Vycl9vdXRfZGVjcl9yZWY6CisJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOworCitlcnJfb3V0X2lvdW5tYXA6CisJcWxjbmljX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKKworZXJyX291dF9mcmVlX25ldGRldjoKKwlmcmVlX25ldGRldihuZXRkZXYpOworCitlcnJfb3V0X2ZyZWVfcmVzOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK2Vycl9vdXRfZGlzYWJsZV9wZGV2OgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHFsY25pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlhZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChhZGFwdGVyID09IE5VTEwpCisJCXJldHVybjsKKworCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCXFsY25pY19jYW5jZWxfZndfd29yayhhZGFwdGVyKTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworCisJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKworCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKKworCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlxbGNuaWNfdGVhcmRvd25faW50cihhZGFwdGVyKTsKKworCXFsY25pY19yZW1vdmVfZGlhZ19lbnRyaWVzKGFkYXB0ZXIpOworCisJcWxjbmljX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKKworCXFsY25pY19yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOworCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK30KK3N0YXRpYyBpbnQgX19xbGNuaWNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHJldHZhbDsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCXFsY25pY19jYW5jZWxfZndfd29yayhhZGFwdGVyKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXFsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworCisJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKworCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKKworCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHFsY25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAoX19xbGNuaWNfc2h1dGRvd24ocGRldikpCisJCXJldHVybjsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludAorcWxjbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gX19xbGNuaWNfc2h1dGRvd24ocGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnI7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJYWRhcHRlci0+YWh3LmNyYl93aW4gPSAtMTsKKwlhZGFwdGVyLT5haHcub2NtX3dpbiA9IC0xOworCisJZXJyID0gcWxjbmljX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWVyciA9IHFsY25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZXJyID0gcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZGV0YWNoOworCisKKwkJcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZGV0YWNoOgorCXFsY25pY19kZXRhY2goYWRhcHRlcik7CitlcnJfb3V0OgorCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcWxjbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnI7CisKKwlpZiAoYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKQorCQlyZXR1cm4gLUVJTzsKKworCWVyciA9IHFsY25pY19hdHRhY2goYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9fcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCXJldHVybiAwOworCitlcnJfb3V0OgorCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHFsY25pY19jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBxbGNuaWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJX19xbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX3Rzb19jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZywKKwkJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpmaXJzdF9kZXNjLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXU4IG9wY29kZSA9IFRYX0VUSEVSX1BLVDsKKwlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCXUxNiBmbGFncyA9IDAsIHZpZCA9IDA7CisJdTMyIHByb2R1Y2VyOworCWludCBjb3BpZWQsIG9mZnNldCwgY29weV9sZW4sIGhkcl9sZW4gPSAwLCB0c28gPSAwLCB2bGFuX29vYiA9IDA7CisJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpod2Rlc2M7CisJc3RydWN0IHZsYW5fZXRoaGRyICp2aDsKKworCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKKworCQl2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CisJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CisKKwl9IGVsc2UgaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZpZCA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlxbGNuaWNfc2V0X3R4X3ZsYW5fdGNpKGZpcnN0X2Rlc2MsIHZpZCk7CisJCXZsYW5fb29iID0gMTsKKwl9CisKKwlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKSAmJgorCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA+IDApIHsKKworCQloZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKworCQlmaXJzdF9kZXNjLT5tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKKwkJZmlyc3RfZGVzYy0+dG90YWxfaGRyX2xlbmd0aCA9IGhkcl9sZW47CisJCWlmICh2bGFuX29vYikgeworCQkJZmlyc3RfZGVzYy0+dG90YWxfaGRyX2xlbmd0aCArPSBWTEFOX0hMRU47CisJCQlmaXJzdF9kZXNjLT50Y3BfaGRyX29mZnNldCA9IFZMQU5fSExFTjsKKwkJCWZpcnN0X2Rlc2MtPmlwX2hkcl9vZmZzZXQgPSBWTEFOX0hMRU47CisJCQkvKiBPbmx5IGluIGNhc2Ugb2YgVFNPIG9uIHZsYW4gZGV2aWNlICovCisJCQlmbGFncyB8PSBGTEFHU19WTEFOX1RBR0dFRDsKKwkJfQorCisJCW9wY29kZSA9IChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgPworCQkJCVRYX1RDUF9MU082IDogVFhfVENQX0xTTzsKKwkJdHNvID0gMTsKKworCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQl1OCBsNHByb3RvOworCisJCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpIHsKKwkJCWw0cHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CisKKwkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQorCQkJCW9wY29kZSA9IFRYX1RDUF9QS1Q7CisJCQllbHNlIGlmIChsNHByb3RvID09IElQUFJPVE9fVURQKQorCQkJCW9wY29kZSA9IFRYX1VEUF9QS1Q7CisJCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKKwkJCWw0cHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOworCisJCQlpZiAobDRwcm90byA9PSBJUFBST1RPX1RDUCkKKwkJCQlvcGNvZGUgPSBUWF9UQ1BWNl9QS1Q7CisJCQllbHNlIGlmIChsNHByb3RvID09IElQUFJPVE9fVURQKQorCQkJCW9wY29kZSA9IFRYX1VEUFY2X1BLVDsKKwkJfQorCX0KKworCWZpcnN0X2Rlc2MtPnRjcF9oZHJfb2Zmc2V0ICs9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJZmlyc3RfZGVzYy0+aXBfaGRyX29mZnNldCArPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKKwlxbGNuaWNfc2V0X3R4X2ZsYWdzX29wY29kZShmaXJzdF9kZXNjLCBmbGFncywgb3Bjb2RlKTsKKworCWlmICghdHNvKQorCQlyZXR1cm47CisKKwkvKiBGb3IgTFNPLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIE1BQy9JUC9UQ1AgaGVhZGVycyBpbnRvCisJICogdGhlIGRlc2NyaXB0b3IgcmluZworCSAqLworCXByb2R1Y2VyID0gdHhfcmluZy0+cHJvZHVjZXI7CisJY29waWVkID0gMDsKKwlvZmZzZXQgPSAyOworCisJaWYgKHZsYW5fb29iKSB7CisJCS8qIENyZWF0ZSBhIFRTTyB2bGFuIGhlYWRlciB0ZW1wbGF0ZSBmb3IgZmlybXdhcmUgKi8KKworCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7CisKKwkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtIG9mZnNldCwKKwkJCQloZHJfbGVuICsgVkxBTl9ITEVOKTsKKworCQl2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoKGNoYXIgKilod2Rlc2MgKyAyKTsKKwkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHZoLCAxMik7CisJCXZoLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CisJCXZoLT5oX3ZsYW5fVENJID0gaHRvbnModmlkKTsKKwkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAxMiwKKwkJCQkoY2hhciAqKXZoICsgMTYsIGNvcHlfbGVuIC0gMTYpOworCisJCWNvcGllZCA9IGNvcHlfbGVuIC0gVkxBTl9ITEVOOworCQlvZmZzZXQgPSAwOworCisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKKwl9CisKKwl3aGlsZSAoY29waWVkIDwgaGRyX2xlbikgeworCisJCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBvZmZzZXQsCisJCQkJKGhkcl9sZW4gLSBjb3BpZWQpKTsKKworCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7CisKKwkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBjb3BpZWQsCisJCQkJIChjaGFyICopaHdkZXNjICsgb2Zmc2V0LCBjb3B5X2xlbik7CisKKwkJY29waWVkICs9IGNvcHlfbGVuOworCQlvZmZzZXQgPSAwOworCisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKKwl9CisKKwl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCWJhcnJpZXIoKTsKK30KKworc3RhdGljIGludAorcWxjbmljX21hcF90eF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqcGJ1ZikKK3sKKwlzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnICpuZjsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCWludCBpLCBucl9mcmFnczsKKwlkbWFfYWRkcl90IG1hcDsKKworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOworCisJbWFwID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBtYXApKQorCQlnb3RvIG91dF9lcnI7CisKKwluZi0+ZG1hID0gbWFwOworCW5mLT5sZW5ndGggPSBza2JfaGVhZGxlbihza2IpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQluZiA9ICZwYnVmLT5mcmFnX2FycmF5W2krMV07CisKKwkJbWFwID0gcGNpX21hcF9wYWdlKHBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIG1hcCkpCisJCQlnb3RvIHVud2luZDsKKworCQluZi0+ZG1hID0gbWFwOworCQluZi0+bGVuZ3RoID0gZnJhZy0+c2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKKwordW53aW5kOgorCXdoaWxlICgtLWkgPj0gMCkgeworCQluZiA9ICZwYnVmLT5mcmFnX2FycmF5W2krMV07CisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIG5mLT5kbWEsIG5mLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCX0KKworCW5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBuZi0+ZG1hLCBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworb3V0X2VycjoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxbGNuaWNfY2xlYXJfY21kZGVzYyh1NjQgKmRlc2MpCit7CisJZGVzY1swXSA9IDBVTEw7CisJZGVzY1syXSA9IDBVTEw7Cit9CisKK25ldGRldl90eF90CitxbGNuaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqcGJ1ZjsKKwlzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnICpidWZmcmFnOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjLCAqZmlyc3RfZGVzYzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgaSwgazsKKworCXUzMiBwcm9kdWNlcjsKKwlpbnQgZnJhZ19jb3VudCwgbm9fb2ZfZGVzYzsKKwl1MzIgbnVtX3R4ZCA9IHR4X3JpbmctPm51bV9kZXNjOworCisJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCisJLyogNCBmcmFnbWVudHMgcGVyIGNtZCBkZXMgKi8KKwlub19vZl9kZXNjID0gKGZyYWdfY291bnQgKyAzKSA+PiAyOworCisJaWYgKHVubGlrZWx5KG5vX29mX2Rlc2MgKyAyID4gcWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOworCXBidWYgPSAmdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOworCisJcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpZiAocWxjbmljX21hcF90eF9za2IocGRldiwgc2tiLCBwYnVmKSkKKwkJZ290byBkcm9wX3BhY2tldDsKKworCXBidWYtPnNrYiA9IHNrYjsKKwlwYnVmLT5mcmFnX2NvdW50ID0gZnJhZ19jb3VudDsKKworCWZpcnN0X2Rlc2MgPSBod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwlxbGNuaWNfY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKKworCXFsY25pY19zZXRfdHhfZnJhZ3NfbGVuKGZpcnN0X2Rlc2MsIGZyYWdfY291bnQsIHNrYi0+bGVuKTsKKwlxbGNuaWNfc2V0X3R4X3BvcnQoZmlyc3RfZGVzYywgYWRhcHRlci0+cG9ydG51bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJhZ19jb3VudDsgaSsrKSB7CisKKwkJayA9IGkgJSA0OworCisJCWlmICgoayA9PSAwKSAmJiAoaSA+IDApKSB7CisJCQkvKiBtb3ZlIHRvIG5leHQgZGVzYy4qLworCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CisJCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwkJCXFsY25pY19jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOworCQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7CisJCX0KKworCQlidWZmcmFnID0gJnBidWYtPmZyYWdfYXJyYXlbaV07CisKKwkJaHdkZXNjLT5idWZmZXJfbGVuZ3RoW2tdID0gY3B1X3RvX2xlMTYoYnVmZnJhZy0+bGVuZ3RoKTsKKwkJc3dpdGNoIChrKSB7CisJCWNhc2UgMDoKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMiA9IGNwdV90b19sZTY0KGJ1ZmZyYWctPmRtYSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjMgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdHhfcmluZy0+cHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CisKKwlxbGNuaWNfdHNvX2NoZWNrKG5ldGRldiwgdHhfcmluZywgZmlyc3RfZGVzYywgc2tiKTsKKworCXFsY25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIHR4X3JpbmcpOworCisJYWRhcHRlci0+c3RhdHMudHhieXRlcyArPSBza2ItPmxlbjsKKwlhZGFwdGVyLT5zdGF0cy54bWl0Y2FsbGVkKys7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitkcm9wX3BhY2tldDoKKwlhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQrKzsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2NoZWNrX3RlbXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJdTMyIHRlbXAsIHRlbXBfc3RhdGUsIHRlbXBfdmFsOworCWludCBydiA9IDA7CisKKwl0ZW1wID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfVEVNUF9TVEFURSk7CisKKwl0ZW1wX3N0YXRlID0gcWxjbmljX2dldF90ZW1wX3N0YXRlKHRlbXApOworCXRlbXBfdmFsID0gcWxjbmljX2dldF90ZW1wX3ZhbCh0ZW1wKTsKKworCWlmICh0ZW1wX3N0YXRlID09IFFMQ05JQ19URU1QX1BBTklDKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LAorCQkgICAgICAgIkRldmljZSB0ZW1wZXJhdHVyZSAlZCBkZWdyZWVzIEMgZXhjZWVkcyIKKwkJICAgICAgICIgbWF4aW11bSBhbGxvd2VkLiBIYXJkd2FyZSBoYXMgYmVlbiBzaHV0IGRvd24uXG4iLAorCQkgICAgICAgdGVtcF92YWwpOworCQlydiA9IDE7CisJfSBlbHNlIGlmICh0ZW1wX3N0YXRlID09IFFMQ05JQ19URU1QX1dBUk4pIHsKKwkJaWYgKGFkYXB0ZXItPnRlbXAgPT0gUUxDTklDX1RFTVBfTk9STUFMKSB7CisJCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwKKwkJCSAgICAgICAiRGV2aWNlIHRlbXBlcmF0dXJlICVkIGRlZ3JlZXMgQyAiCisJCQkgICAgICAgImV4Y2VlZHMgb3BlcmF0aW5nIHJhbmdlLiIKKwkJCSAgICAgICAiIEltbWVkaWF0ZSBhY3Rpb24gbmVlZGVkLlxuIiwKKwkJCSAgICAgICB0ZW1wX3ZhbCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWRhcHRlci0+dGVtcCA9PSBRTENOSUNfVEVNUF9XQVJOKSB7CisJCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsCisJCQkgICAgICAgIkRldmljZSB0ZW1wZXJhdHVyZSBpcyBub3cgJWQgZGVncmVlcyBDIgorCQkJICAgICAgICIgaW4gbm9ybWFsIHJhbmdlLlxuIiwgdGVtcF92YWwpOworCQl9CisJfQorCWFkYXB0ZXItPnRlbXAgPSB0ZW1wX3N0YXRlOworCXJldHVybiBydjsKK30KKwordm9pZCBxbGNuaWNfYWR2ZXJ0X2xpbmtfY2hhbmdlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGxpbmt1cCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKGFkYXB0ZXItPmFody5saW5rdXAgJiYgIWxpbmt1cCkgeworCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJOSUMgTGluayBpcyBkb3duXG4iKTsKKwkJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9IGVsc2UgaWYgKCFhZGFwdGVyLT5haHcubGlua3VwICYmIGxpbmt1cCkgeworCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJOSUMgTGluayBpcyB1cFxuIik7CisJCWFkYXB0ZXItPmFody5saW5rdXAgPSAxOworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAidHJhbnNtaXQgdGltZW91dCwgcmVzZXR0aW5nLlxuIik7CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKK30KKworc3RhdGljIHZvaWQgcWxjbmljX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbGNuaWNfYWRhcHRlciwgdHhfdGltZW91dF90YXNrKTsKKworCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQorCQlyZXR1cm47CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWlmICgrK2FkYXB0ZXItPnR4X3RpbWVvX2NudCA+PSBRTENOSUNfTUFYX1RYX1RJTUVPVVRTKQorCQlnb3RvIHJlcXVlc3RfcmVzZXQ7CisKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCWlmICghcWxjbmljX3Jlc2V0X2NvbnRleHQoYWRhcHRlcikpIHsKKwkJYWRhcHRlci0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCXJldHVybjsKKworCQkvKiBjb250ZXh0IHJlc2V0IGZhaWxlZCwgZmFsbCB0aHJvdWdoIGZvciBmdyByZXNldCAqLworCX0KKworcmVxdWVzdF9yZXNldDoKKwlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMTsKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnFsY25pY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuZXRkZXYtPnN0YXRzOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwlzdGF0cy0+cnhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLnJ4X3BrdHMgKyBhZGFwdGVyLT5zdGF0cy5scm9fcGt0czsKKwlzdGF0cy0+dHhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLnhtaXRmaW5pc2hlZDsKKwlzdGF0cy0+cnhfYnl0ZXMgPSBhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzOworCXN0YXRzLT50eF9ieXRlcyA9IGFkYXB0ZXItPnN0YXRzLnR4Ynl0ZXM7CisJc3RhdHMtPnJ4X2Ryb3BwZWQgPSBhZGFwdGVyLT5zdGF0cy5yeGRyb3BwZWQ7CisJc3RhdHMtPnR4X2Ryb3BwZWQgPSBhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQ7CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfY2xlYXJfbGVnYWN5X2ludHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CisKKwlpZiAoIShzdGF0dXMgJiBhZGFwdGVyLT5pbnRfdmVjX2JpdCkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIGNoZWNrIGludGVycnVwdCBzdGF0ZSBtYWNoaW5lLCB0byBiZSBzdXJlICovCisJc3RhdHVzID0gcmVhZGwoYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcpOworCWlmICghSVNSX0xFR0FDWV9JTlRfVFJJR0dFUkVEKHN0YXR1cykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXdyaXRlbCgweGZmZmZmZmZmLCBhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyk7CisJLyogcmVhZCB0d2ljZSB0byBlbnN1cmUgd3JpdGUgaXMgZmx1c2hlZCAqLworCXJlYWRsKGFkYXB0ZXItPmlzcl9pbnRfdmVjKTsKKwlyZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfdG1wX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lYX0VOQUJMRUQpCisJCWdvdG8gZG9uZTsKKwllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lfRU5BQkxFRCkgeworCQl3cml0ZWwoMHhmZmZmZmZmZiwgYWRhcHRlci0+dGd0X3N0YXR1c19yZWcpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHFsY25pY19jbGVhcl9sZWdhY3lfaW50cihhZGFwdGVyKSA9PSBJUlFfTk9ORSkKKwkJcmV0dXJuIElSUV9OT05FOworCitkb25lOgorCWFkYXB0ZXItPmRpYWdfY250Kys7CisJcWxjbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHFsY25pY19pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlpZiAocWxjbmljX2NsZWFyX2xlZ2FjeV9pbnRyKGFkYXB0ZXIpID09IElSUV9OT05FKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfbXNpX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCXdyaXRlbCgweGZmZmZmZmZmLCBhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyk7CisKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX21zaXhfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBxbGNuaWNfcHJvY2Vzc19jbWRfcmluZyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHN3X2NvbnN1bWVyLCBod19jb25zdW1lcjsKKwlpbnQgY291bnQgPSAwLCBpOworCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgKmZyYWc7CisJaW50IGRvbmU7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCisJaWYgKCFzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spKQorCQlyZXR1cm4gMTsKKworCXN3X2NvbnN1bWVyID0gdHhfcmluZy0+c3dfY29uc3VtZXI7CisJaHdfY29uc3VtZXIgPSBsZTMyX3RvX2NwdSgqKHR4X3JpbmctPmh3X2NvbnN1bWVyKSk7CisKKwl3aGlsZSAoc3dfY29uc3VtZXIgIT0gaHdfY29uc3VtZXIpIHsKKwkJYnVmZmVyID0gJnR4X3JpbmctPmNtZF9idWZfYXJyW3N3X2NvbnN1bWVyXTsKKwkJaWYgKGJ1ZmZlci0+c2tiKSB7CisJCQlmcmFnID0gJmJ1ZmZlci0+ZnJhZ19hcnJheVswXTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgZnJhZy0+ZG1hLCBmcmFnLT5sZW5ndGgsCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWZyYWctPmRtYSA9IDBVTEw7CisJCQlmb3IgKGkgPSAxOyBpIDwgYnVmZmVyLT5mcmFnX2NvdW50OyBpKyspIHsKKwkJCQlmcmFnKys7CisJCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgZnJhZy0+ZG1hLCBmcmFnLT5sZW5ndGgsCisJCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlmcmFnLT5kbWEgPSAwVUxMOworCQkJfQorCisJCQlhZGFwdGVyLT5zdGF0cy54bWl0ZmluaXNoZWQrKzsKKwkJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlci0+c2tiKTsKKwkJCWJ1ZmZlci0+c2tiID0gTlVMTDsKKwkJfQorCisJCXN3X2NvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoc3dfY29uc3VtZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKKwkJaWYgKCsrY291bnQgPj0gTUFYX1NUQVRVU19IQU5ETEUpCisJCQlicmVhazsKKwl9CisKKwlpZiAoY291bnQgJiYgbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXR4X3JpbmctPnN3X2NvbnN1bWVyID0gc3dfY29uc3VtZXI7CisKKwkJc21wX21iKCk7CisKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCV9fbmV0aWZfdHhfbG9jayh0eF9yaW5nLT50eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQlpZiAocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpIHsKKwkJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkJYWRhcHRlci0+dHhfdGltZW9fY250ID0gMDsKKwkJCX0KKwkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4X3JpbmctPnR4cSk7CisJCX0KKwl9CisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGlzIGZyZWVkIHVwIHRvIGNvbnN1bWVyIHRoZW4gY2hlY2sgaWYgdGhlIHJpbmcgaXMgZnVsbAorCSAqIElmIHRoZSByaW5nIGlzIGZ1bGwgdGhlbiBjaGVjayBpZiBtb3JlIG5lZWRzIHRvIGJlIGZyZWVkIGFuZAorCSAqIHNjaGVkdWxlIHRoZSBjYWxsIGJhY2sgYWdhaW4uCisJICoKKwkgKiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgMiBDUFVzLiBPbmUgY291bGQgYmUgZnJlZWluZyBhbmQgdGhlCisJICogb3RoZXIgZmlsbGluZyBpdC4gSWYgdGhlIHJpbmcgaXMgZnVsbCB3aGVuIHdlIGdldCBvdXQgb2YgaGVyZSBhbmQKKwkgKiB0aGUgY2FyZCBoYXMgYWxyZWFkeSBpbnRlcnJ1cHRlZCB0aGUgaG9zdCB0aGVuIHRoZSBob3N0IGNhbiBtaXNzIHRoZQorCSAqIGludGVycnVwdC4KKwkgKgorCSAqIFRoZXJlIGlzIHN0aWxsIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBob3N0IGNvdWxkIG1pc3MgYW4KKwkgKiBpbnRlcnJ1cHQuIFRoZSBjYXJkIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhpcy4KKwkgKi8KKwlod19jb25zdW1lciA9IGxlMzJfdG9fY3B1KCoodHhfcmluZy0+aHdfY29uc3VtZXIpKTsKKwlkb25lID0gKHN3X2NvbnN1bWVyID09IGh3X2NvbnN1bWVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CisKKwlyZXR1cm4gZG9uZTsKK30KKworc3RhdGljIGludCBxbGNuaWNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcsIG5hcGkpOworCisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlpbnQgdHhfY29tcGxldGU7CisJaW50IHdvcmtfZG9uZTsKKworCXR4X2NvbXBsZXRlID0gcWxjbmljX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlcik7CisKKwl3b3JrX2RvbmUgPSBxbGNuaWNfcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKKworCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiB0eF9jb21wbGV0ZSkgeworCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CisJCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlxbGNuaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBxbGNuaWNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlkaXNhYmxlX2lycShhZGFwdGVyLT5pcnEpOworCXFsY25pY19pbnRyKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7CisJZW5hYmxlX2lycShhZGFwdGVyLT5pcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitxbGNuaWNfc2V0X2Rydl9zdGF0ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBzdGF0ZSkKK3sKKwl1MzIgIHZhbDsKKworCVdBUk5fT04oc3RhdGUgIT0gUUxDTklDX0RFVl9ORUVEX1JFU0VUICYmCisJCQlzdGF0ZSAhPSBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpOworCisJaWYgKHFsY25pY19hcGlfbG9jayhhZGFwdGVyKSkKKwkJcmV0dXJuIDsKKworCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUpOworCisJaWYgKHN0YXRlID09IFFMQ05JQ19ERVZfTkVFRF9SRVNFVCkKKwkJdmFsIHw9ICgodTMyKTB4MSA8PCAoYWRhcHRlci0+cG9ydG51bSAqIDQpKTsKKwllbHNlIGlmIChzdGF0ZSA9PSBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpCisJCXZhbCB8PSAoKHUzMikweDEgPDwgKChhZGFwdGVyLT5wb3J0bnVtICogNCkgKyAxKSk7CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFLCB2YWwpOworCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19jbHJfZHJ2X3N0YXRlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgIHZhbDsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtRUJVU1k7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKwl2YWwgJj0gfigodTMyKTB4MyA8PCAoYWRhcHRlci0+cG9ydG51bSAqIDQpKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFLCB2YWwpOworCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyICB2YWw7CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlnb3RvIGVycjsKKworCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfUkVGX0NPVU5UKTsKKwl2YWwgJj0gfigodTMyKTB4MSA8PCAoYWRhcHRlci0+cG9ydG51bSAqIDQpKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCwgdmFsKTsKKworCWlmICghKHZhbCAmIDB4MTExMTExMTEpKQorCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFLCBRTENOSUNfREVWX0NPTEQpOworCisJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSk7CisJdmFsICY9IH4oKHUzMikweDMgPDwgKGFkYXB0ZXItPnBvcnRudW0gKiA0KSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKworCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworZXJyOgorCWFkYXB0ZXItPmZ3X2ZhaWxfY250ID0gMDsKKwljbGVhcl9iaXQoX19RTENOSUNfU1RBUlRfRlcsICZhZGFwdGVyLT5zdGF0ZSk7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKworc3RhdGljIGludAorcWxjbmljX2NoZWNrX2Rydl9zdGF0ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGFjdCwgc3RhdGU7CisKKwlzdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUpOworCWFjdCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfUkVGX0NPVU5UKTsKKworCWlmICgoKHN0YXRlICYgMHgxMTExMTExMSkgPT0gKGFjdCAmIDB4MTExMTExMTEpKSB8fAorCQkJKChhY3QgJiAweDExMTExMTExKSA9PSAoKHN0YXRlID4+IDEpICYgMHgxMTExMTExMSkpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfY2FuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsLCBwcmV2X3N0YXRlOworCWludCBjbnQgPSAwOworCWludCBwb3J0bnVtID0gYWRhcHRlci0+cG9ydG51bTsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtMTsKKworCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfUkVGX0NPVU5UKTsKKwlpZiAoISh2YWwgJiAoKGludCkweDEgPDwgKHBvcnRudW0gKiA0KSkpKSB7CisJCXZhbCB8PSAoKHUzMikweDEgPDwgKHBvcnRudW0gKiA0KSk7CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfUkVGX0NPVU5ULCB2YWwpOworCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fUUxDTklDX1NUQVJUX0ZXLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWdvdG8gc3RhcnRfZnc7CisJfQorCisJcHJldl9zdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpOworCisJc3dpdGNoIChwcmV2X3N0YXRlKSB7CisJY2FzZSBRTENOSUNfREVWX0NPTEQ6CitzdGFydF9mdzoKKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSwgUUxDTklDX0RFVl9JTklUQUxJWklORyk7CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQlyZXR1cm4gMTsKKworCWNhc2UgUUxDTklDX0RFVl9SRUFEWToKKwkJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CisJCXJldHVybiAwOworCisJY2FzZSBRTENOSUNfREVWX05FRURfUkVTRVQ6CisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUpOworCQl2YWwgfD0gKCh1MzIpMHgxIDw8IChwb3J0bnVtICogNCkpOworCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFLCB2YWwpOworCQlicmVhazsKKworCWNhc2UgUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UOgorCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKwkJdmFsIHw9ICgodTMyKTB4MSA8PCAoKHBvcnRudW0gKiA0KSArIDEpKTsKKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIFFMQ05JQ19ERVZfRkFJTEVEOgorCQlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCW1zbGVlcCgxMDAwKTsKKwl3aGlsZSAoKFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpICE9IFFMQ05JQ19ERVZfUkVBRFkpICYmCisJCQkrK2NudCA8IDIwKQorCQltc2xlZXAoMTAwMCk7CisKKwlpZiAoY250ID49IDIwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLTE7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKwl2YWwgJj0gfigodTMyKTB4MyA8PCAocG9ydG51bSAqIDQpKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFLCB2YWwpOworCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19md2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIGZ3X3dvcmsud29yayk7CisJaW50IGRldl9zdGF0ZTsKKworCWlmICgrK2FkYXB0ZXItPmZ3X3dhaXRfY250ID4gRldfUE9MTF9USFJFU0gpCisJCWdvdG8gZXJyX3JldDsKKworCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19TVEFSVF9GVywgJmFkYXB0ZXItPnN0YXRlKSkgeworCisJCWlmIChxbGNuaWNfY2hlY2tfZHJ2X3N0YXRlKGFkYXB0ZXIpKSB7CisJCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLAorCQkJCQlxbGNuaWNfZndpbml0X3dvcmssIEZXX1BPTExfREVMQVkpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCFxbGNuaWNfc3RhcnRfZmlybXdhcmUoYWRhcHRlcikpIHsKKwkJCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19hdHRhY2hfd29yaywgMCk7CisJCQlyZXR1cm47CisJCX0KKworCQlnb3RvIGVycl9yZXQ7CisJfQorCisJZGV2X3N0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSk7CisJc3dpdGNoIChkZXZfc3RhdGUpIHsKKwljYXNlIFFMQ05JQ19ERVZfUkVBRFk6CisJCWlmICghcWxjbmljX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7CisJCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfYXR0YWNoX3dvcmssIDApOworCQkJcmV0dXJuOworCQl9CisJY2FzZSBRTENOSUNfREVWX0ZBSUxFRDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLAorCQkJcWxjbmljX2Z3aW5pdF93b3JrLCAyICogRldfUE9MTF9ERUxBWSk7CisJCXJldHVybjsKKwl9CisKK2Vycl9yZXQ6CisJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2RldGFjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBxbGNuaWNfYWRhcHRlciwgZndfd29yay53b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiBzdGF0dXM7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlxbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJcnRubF9sb2NrKCk7CisJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOworCisJc3RhdHVzID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUEVHX0hBTFRfU1RBVFVTMSk7CisKKwlpZiAoc3RhdHVzICYgUUxDTklDX1JDT0RFX0ZBVEFMX0VSUk9SKQorCQlnb3RvIGVycl9yZXQ7CisKKwlpZiAoYWRhcHRlci0+dGVtcCA9PSBRTENOSUNfVEVNUF9QQU5JQykKKwkJZ290byBlcnJfcmV0OworCisJcWxjbmljX3NldF9kcnZfc3RhdGUoYWRhcHRlciwgYWRhcHRlci0+ZGV2X3N0YXRlKTsKKworCWFkYXB0ZXItPmZ3X3dhaXRfY250ID0gMDsKKworCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md2luaXRfd29yaywgRldfUE9MTF9ERUxBWSk7CisKKwlyZXR1cm47CisKK2Vycl9yZXQ6CisJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOworCit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZGV2X3JlcXVlc3RfcmVzZXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZTsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybjsKKworCXN0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSk7CisKKwlpZiAoc3RhdGUgIT0gUUxDTklDX0RFVl9JTklUQUxJWklORyAmJiBzdGF0ZSAhPSBRTENOSUNfREVWX05FRURfUkVTRVQpIHsKKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSwgUUxDTklDX0RFVl9ORUVEX1JFU0VUKTsKKwkJc2V0X2JpdChfX1FMQ05JQ19TVEFSVF9GVywgJmFkYXB0ZXItPnN0YXRlKTsKKwl9CisKKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19zY2hlZHVsZV93b3JrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJd29ya19mdW5jX3QgZnVuYywgaW50IGRlbGF5KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5md193b3JrLCBmdW5jKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPmZ3X3dvcmssIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoZGVsYXkpKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19jYW5jZWxfZndfd29yayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQltc2xlZXAoMTApOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT5md193b3JrKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19hdHRhY2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IHFsY25pY19hZGFwdGVyLCBmd193b3JrLndvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IGVycjsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gcWxjbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKworCQllcnIgPSBxbGNuaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKwkJaWYgKGVycikgeworCQkJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCitkb25lOgorCWFkYXB0ZXItPmZ3X2ZhaWxfY250ID0gMDsKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCisJaWYgKCFxbGNuaWNfY2xyX2Rydl9zdGF0ZShhZGFwdGVyKSkKKwkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2Z3X3BvbGxfd29yaywKKwkJCQkJCQlGV19QT0xMX0RFTEFZKTsKK30KKworc3RhdGljIGludAorcWxjbmljX2NoZWNrX2hlYWx0aChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHN0YXRlID0gMCwgaGVhcnRiaXQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmIChxbGNuaWNfY2hlY2tfdGVtcChhZGFwdGVyKSkKKwkJZ290byBkZXRhY2g7CisKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkgeworCQlxbGNuaWNfZGV2X3JlcXVlc3RfcmVzZXQoYWRhcHRlcik7CisJCWdvdG8gZGV0YWNoOworCX0KKworCXN0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSk7CisJaWYgKHN0YXRlID09IFFMQ05JQ19ERVZfTkVFRF9SRVNFVCB8fCBzdGF0ZSA9PSBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpCisJCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworCisJaGVhcnRiaXQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfQUxJVkVfQ09VTlRFUik7CisJaWYgKGhlYXJ0Yml0ICE9IGFkYXB0ZXItPmhlYXJ0Yml0KSB7CisJCWFkYXB0ZXItPmhlYXJ0Yml0ID0gaGVhcnRiaXQ7CisJCWFkYXB0ZXItPmZ3X2ZhaWxfY250ID0gMDsKKwkJaWYgKGFkYXB0ZXItPm5lZWRfZndfcmVzZXQpCisJCQlnb3RvIGRldGFjaDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCsrYWRhcHRlci0+ZndfZmFpbF9jbnQgPCBGV19GQUlMX1RIUkVTSCkKKwkJcmV0dXJuIDA7CisKKwlxbGNuaWNfZGV2X3JlcXVlc3RfcmVzZXQoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJmaXJtd2FyZSBoYW5nIGRldGVjdGVkXG4iKTsKKworZGV0YWNoOgorCWFkYXB0ZXItPmRldl9zdGF0ZSA9IChzdGF0ZSA9PSBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpID8gc3RhdGUgOgorCQlRTENOSUNfREVWX05FRURfUkVTRVQ7CisKKwlpZiAoKGF1dG9fZndfcmVzZXQgPT0gQVVUT19GV19SRVNFVF9FTkFCTEVEKSAmJgorCQkJIXRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfZGV0YWNoX3dvcmssIDApOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZndfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIGZ3X3dvcmsud29yayk7CisKKwlpZiAodGVzdF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlnb3RvIHJlc2NoZWR1bGU7CisKKworCWlmIChxbGNuaWNfY2hlY2tfaGVhbHRoKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKK3Jlc2NoZWR1bGU6CisJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc3RvcmVfYnJpZGdlZF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIG5ldzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0JERykpCisJCWdvdG8gZXJyX291dDsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJZ290byBlcnJfb3V0OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMiwgJm5ldykpCisJCWdvdG8gZXJyX291dDsKKworCWlmICghcWxjbmljX2NvbmZpZ19icmlkZ2VkX21vZGUoYWRhcHRlciwgISFuZXcpKQorCQlyZXQgPSBsZW47CisKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zaG93X2JyaWRnZWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGJyaWRnZWRfbW9kZSA9IDA7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfQkRHKQorCQlicmlkZ2VkX21vZGUgPSAhIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19CUklER0VfRU5BQkxFRCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYnJpZGdlZF9tb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2JyaWRnZWRfbW9kZSA9IHsKKyAgICAgICAuYXR0ciA9IHsubmFtZSA9ICJicmlkZ2VkX21vZGUiLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorICAgICAgIC5zaG93ID0gcWxjbmljX3Nob3dfYnJpZGdlZF9tb2RlLAorICAgICAgIC5zdG9yZSA9IHFsY25pY19zdG9yZV9icmlkZ2VkX21vZGUsCit9OworCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N0b3JlX2RpYWdfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBuZXc7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAyLCAmbmV3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoISFuZXcgIT0gISEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRElBR19FTkFCTEVEKSkKKwkJYWRhcHRlci0+ZmxhZ3MgXj0gUUxDTklDX0RJQUdfRU5BQkxFRDsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc2hvd19kaWFnX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQkhIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19ESUFHX0VOQUJMRUQpKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2RpYWdfbW9kZSA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJkaWFnX21vZGUiLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaG93ID0gcWxjbmljX3Nob3dfZGlhZ19tb2RlLAorCS5zdG9yZSA9IHFsY25pY19zdG9yZV9kaWFnX21vZGUsCit9OworCitzdGF0aWMgaW50CitxbGNuaWNfc3lzZnNfdmFsaWRhdGVfY3JiKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRElBR19FTkFCTEVEKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKHNpemUgIT0gNCkgfHwgKG9mZnNldCAmIDB4MykpCisJCXJldHVybiAgLUVJTlZBTDsKKworCWlmIChvZmZzZXQgPCBRTENOSUNfUENJX0NSQlNQQUNFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3JlYWRfY3JiKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHFsY25pY19zeXNmc192YWxpZGF0ZV9jcmIoYWRhcHRlciwgb2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlkYXRhID0gUUxDUkQzMihhZGFwdGVyLCBvZmZzZXQpOworCW1lbWNweShidWYsICZkYXRhLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zeXNmc193cml0ZV9jcmIoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gcWxjbmljX3N5c2ZzX3ZhbGlkYXRlX2NyYihhZGFwdGVyLCBvZmZzZXQsIHNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW1lbWNweSgmZGF0YSwgYnVmLCBzaXplKTsKKwlRTENXUjMyKGFkYXB0ZXIsIG9mZnNldCwgZGF0YSk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zeXNmc192YWxpZGF0ZV9tZW0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19ESUFHX0VOQUJMRUQpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICgoc2l6ZSAhPSA4KSB8fCAob2Zmc2V0ICYgMHg3KSkKKwkJcmV0dXJuICAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc3lzZnNfcmVhZF9tZW0oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1NjQgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gcWxjbmljX3N5c2ZzX3ZhbGlkYXRlX21lbShhZGFwdGVyLCBvZmZzZXQsIHNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChxbGNuaWNfcGNpX21lbV9yZWFkXzJNKGFkYXB0ZXIsIG9mZnNldCwgJmRhdGEpKQorCQlyZXR1cm4gLUVJTzsKKworCW1lbWNweShidWYsICZkYXRhLCBzaXplKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3dyaXRlX21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU2NCBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBxbGNuaWNfc3lzZnNfdmFsaWRhdGVfbWVtKGFkYXB0ZXIsIG9mZnNldCwgc2l6ZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbWVtY3B5KCZkYXRhLCBidWYsIHNpemUpOworCisJaWYgKHFsY25pY19wY2lfbWVtX3dyaXRlXzJNKGFkYXB0ZXIsIG9mZnNldCwgZGF0YSkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHNpemU7Cit9CisKKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGJpbl9hdHRyX2NyYiA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJjcmIiLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IHFsY25pY19zeXNmc19yZWFkX2NyYiwKKwkud3JpdGUgPSBxbGNuaWNfc3lzZnNfd3JpdGVfY3JiLAorfTsKKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGJpbl9hdHRyX21lbSA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJtZW0iLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IHFsY25pY19zeXNmc19yZWFkX21lbSwKKwkud3JpdGUgPSBxbGNuaWNfc3lzZnNfd3JpdGVfbWVtLAorfTsKKworc3RhdGljIHZvaWQKK3FsY25pY19jcmVhdGVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9CREcpCisJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYnJpZGdlZF9tb2RlKSkKKwkJCWRldl93YXJuKGRldiwKKwkJCQkiZmFpbGVkIHRvIGNyZWF0ZSBicmlkZ2VkX21vZGUgc3lzZnMgZW50cnlcbiIpOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX3JlbW92ZV9zeXNmc19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0JERykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JyaWRnZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY3JlYXRlX2RpYWdfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlhZ19tb2RlKSkKKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkaWFnX21vZGUgc3lzZnMgZW50cnlcbiIpOworCWlmIChkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX2NyYikpCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgY3JiIHN5c2ZzIGVudHJ5XG4iKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9tZW0pKQorCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIG1lbSBzeXNmcyBlbnRyeVxuIik7Cit9CisKKworc3RhdGljIHZvaWQKK3FsY25pY19yZW1vdmVfZGlhZ19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OworCisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdfbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9jcmIpOworCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfbWVtKTsKK30KKworI2lmZGVmIENPTkZJR19JTkVUCisKKyNkZWZpbmUgaXNfcWxjbmljX25ldGRldihkZXYpIChkZXYtPm5ldGRldl9vcHMgPT0gJnFsY25pY19uZXRkZXZfb3BzKQorCitzdGF0aWMgaW50CitxbGNuaWNfZGVzdGlwX3N1cHBvcnRlZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworCXN0cnVjdCBpbl9kZXZpY2UgKmluZGV2OworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIXFsY25pY19kZXN0aXBfc3VwcG9ydGVkKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKwlpbmRldiA9IGluX2Rldl9nZXQoZGV2KTsKKwlpZiAoIWluZGV2KQorCQlyZXR1cm47CisKKwlmb3JfaWZhKGluZGV2KSB7CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBORVRERVZfVVA6CisJCQlxbGNuaWNfY29uZmlnX2lwYWRkcihhZGFwdGVyLAorCQkJCQlpZmEtPmlmYV9hZGRyZXNzLCBRTENOSUNfSVBfVVApOworCQkJYnJlYWs7CisJCWNhc2UgTkVUREVWX0RPV046CisJCQlxbGNuaWNfY29uZmlnX2lwYWRkcihhZGFwdGVyLAorCQkJCQlpZmEtPmlmYV9hZGRyZXNzLCBRTENOSUNfSVBfRE9XTik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbmRmb3JfaWZhKGluZGV2KTsKKworCWluX2Rldl9wdXQoaW5kZXYpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBxbGNuaWNfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcHRyOworCityZWNoZWNrOgorCWlmIChkZXYgPT0gTlVMTCkKKwkJZ290byBkb25lOworCisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgeworCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOworCQlnb3RvIHJlY2hlY2s7CisJfQorCisJaWYgKCFpc19xbGNuaWNfbmV0ZGV2KGRldikpCisJCWdvdG8gZG9uZTsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCWdvdG8gZG9uZTsKKworCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihkZXYsIGV2ZW50KTsKK2RvbmU6CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKXB0cjsKKworCWRldiA9IGlmYS0+aWZhX2RldiA/IGlmYS0+aWZhX2Rldi0+ZGV2IDogTlVMTDsKKworcmVjaGVjazoKKwlpZiAoZGV2ID09IE5VTEwgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBkb25lOworCisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgeworCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOworCQlnb3RvIHJlY2hlY2s7CisJfQorCisJaWYgKCFpc19xbGNuaWNfbmV0ZGV2KGRldikpCisJCWdvdG8gZG9uZTsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFhZGFwdGVyIHx8ICFxbGNuaWNfZGVzdGlwX3N1cHBvcnRlZChhZGFwdGVyKSkKKwkJZ290byBkb25lOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBORVRERVZfVVA6CisJCXFsY25pY19jb25maWdfaXBhZGRyKGFkYXB0ZXIsIGlmYS0+aWZhX2FkZHJlc3MsIFFMQ05JQ19JUF9VUCk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0RPV046CisJCXFsY25pY19jb25maWdfaXBhZGRyKGFkYXB0ZXIsIGlmYS0+aWZhX2FkZHJlc3MsIFFMQ05JQ19JUF9ET1dOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitkb25lOgorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jawlxbGNuaWNfbmV0ZGV2X2NiID0geworCS5ub3RpZmllcl9jYWxsID0gcWxjbmljX25ldGRldl9ldmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcWxjbmljX2luZXRhZGRyX2NiID0geworCS5ub3RpZmllcl9jYWxsID0gcWxjbmljX2luZXRhZGRyX2V2ZW50LAorfTsKKyNlbHNlCitzdGF0aWMgdm9pZAorcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCit7IH0KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcWxjbmljX2RyaXZlciA9IHsKKwkubmFtZSA9IHFsY25pY19kcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPSBxbGNuaWNfcGNpX3RibCwKKwkucHJvYmUgPSBxbGNuaWNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHFsY25pY19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gcWxjbmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IHFsY25pY19yZXN1bWUsCisjZW5kaWYKKwkuc2h1dGRvd24gPSBxbGNuaWNfc2h1dGRvd24KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFsY25pY19pbml0X21vZHVsZSh2b2lkKQoreworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHFsY25pY19kcml2ZXJfc3RyaW5nKTsKKworI2lmZGVmIENPTkZJR19JTkVUCisJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZxbGNuaWNfbmV0ZGV2X2NiKTsKKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmcWxjbmljX2luZXRhZGRyX2NiKTsKKyNlbmRpZgorCisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcWxjbmljX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHFsY25pY19pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxbGNuaWNfZXhpdF9tb2R1bGUodm9pZCkKK3sKKworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxjbmljX2RyaXZlcik7CisKKyNpZmRlZiBDT05GSUdfSU5FVAorCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFsY25pY19pbmV0YWRkcl9jYik7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnFsY25pY19uZXRkZXZfY2IpOworI2VuZGlmCit9CisKK21vZHVsZV9leGl0KHFsY25pY19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDg2MmMxYWEuLjhiNzQyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC0xOSwxNCArMTksNiBAQAogI2RlZmluZSBEUlZfVkVSU0lPTgkidjEuMDAuMDAuMjMuMDAuMDAtMDEiCiAKICNkZWZpbmUgUEZYICJxbGdlOiAiCi0jZGVmaW5lIFFQUklOVEsocWRldiwgbmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgICAgIFwKLSAgICAgICBkbyB7ICAgICAgIFwKLQlpZiAoISgocWRldiktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfIyNubGV2ZWwpKQkJXAotCQk7CQkJCQkJXAotCWVsc2UJCQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fIyNrbGV2ZWwsICYoKHFkZXYpLT5wZGV2LT5kZXYpLAlcCi0JCQkgICAiJXM6ICIgZm10LCBfX2Z1bmNfXywgIyNhcmdzKTsgIFwKLSAgICAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFdRX0FERFJfQUxJR04JMHgzCS8qIDQgYnl0ZSBhbGlnbm1lbnQgKi8KIApAQCAtNTQsMTIgKzQ2LDggQEAKICNkZWZpbmUgUlhfUklOR19TSEFET1dfU1BBQ0UJKHNpemVvZih1NjQpICsgXAogCQlNQVhfREJfUEFHRVNfUEVSX0JRKE5VTV9TTUFMTF9CVUZGRVJTKSAqIHNpemVvZih1NjQpICsgXAogCQlNQVhfREJfUEFHRVNfUEVSX0JRKE5VTV9MQVJHRV9CVUZGRVJTKSAqIHNpemVvZih1NjQpKQotI2RlZmluZSBTTUFMTF9CVUZGRVJfU0laRSA1MTIKLSNkZWZpbmUgU01BTExfQlVGX01BUF9TSVpFIChTTUFMTF9CVUZGRVJfU0laRSAvIDIpCiAjZGVmaW5lIExBUkdFX0JVRkZFUl9NQVhfU0laRSA4MTkyCiAjZGVmaW5lIExBUkdFX0JVRkZFUl9NSU5fU0laRSAyMDQ4Ci0jZGVmaW5lIE1BWF9TUExJVF9TSVpFIDEwMjMKLSNkZWZpbmUgUUxHRV9TQl9QQUQgMzIKIAogI2RlZmluZSBNQVhfQ1EgMTI4CiAjZGVmaW5lIERGTFRfQ09BTEVTQ0VfV0FJVCAxMDAJLyogMTAwIHVzZWMgd2FpdCBmb3IgY29hbGVzY2luZyAqLwpAQCAtNzksMTUgKzY3LDQzIEBACiAjZGVmaW5lIFRYX0RFU0NfUEVSX09BTCAwCiAjZW5kaWYKIAorLyogV29yZCBzaGlmdGluZyBmb3IgY29udmVydGluZyA2NC1iaXQKKyAqIGFkZHJlc3MgdG8gYSBzZXJpZXMgb2YgMTYtYml0IHdvcmRzLgorICogVGhpcyBpcyB1c2VkIGZvciBzb21lIE1QSSBmaXJtd2FyZQorICogbWFpbGJveCBjb21tYW5kcy4KKyAqLworI2RlZmluZSBMU1coeCkgICgodTE2KSh4KSkKKyNkZWZpbmUgTVNXKHgpICAoKHUxNikoKHUzMikoeCkgPj4gMTYpKQorI2RlZmluZSBMU0QoeCkgICgodTMyKSgodTY0KSh4KSkpCisjZGVmaW5lIE1TRCh4KSAgKCh1MzIpKCgoKHU2NCkoeCkpID4+IDMyKSkpCisKIC8qIE1QSSB0ZXN0IHJlZ2lzdGVyIGRlZmluaXRpb25zLiBUaGlzIHJlZ2lzdGVyCiAgKiBpcyB1c2VkIGZvciBkZXRlcm1pbmluZyBhbHRlcm5hdGUgTklDIGZ1bmN0aW9uJ3MKICAqIFBDSS0+ZnVuYyBudW1iZXIuCiAgKi8KIGVudW0gewogCU1QSV9URVNUX0ZVTkNfUE9SVF9DRkcgPSAweDEwMDIsCi0JTVBJX1RFU1RfTklDMV9GVU5DX1NISUZUID0gMSwKLQlNUElfVEVTVF9OSUMyX0ZVTkNfU0hJRlQgPSA1LAorCU1QSV9URVNUX0ZVTkNfUFJCX0NUTCA9IDB4MTAwZSwKKwkJTVBJX1RFU1RfRlVOQ19QUkJfRU4gPSAweDE4YTIwMDAwLAorCU1QSV9URVNUX0ZVTkNfUlNUX1NUUyA9IDB4MTAwYSwKKwkJTVBJX1RFU1RfRlVOQ19SU1RfRlJDID0gMHgwMDAwMDAwMywKIAlNUElfVEVTVF9OSUNfRlVOQ19NQVNLID0gMHgwMDAwMDAwNywKKwlNUElfVEVTVF9OSUMxX0ZVTkNUSU9OX0VOQUJMRSA9ICgxIDw8IDApLAorCU1QSV9URVNUX05JQzFfRlVOQ1RJT05fTUFTSyA9IDB4MDAwMDAwMGUsCisJTVBJX1RFU1RfTklDMV9GVU5DX1NISUZUID0gMSwKKwlNUElfVEVTVF9OSUMyX0ZVTkNUSU9OX0VOQUJMRSA9ICgxIDw8IDQpLAorCU1QSV9URVNUX05JQzJfRlVOQ1RJT05fTUFTSyA9IDB4MDAwMDAwZTAsCisJTVBJX1RFU1RfTklDMl9GVU5DX1NISUZUID0gNSwKKwlNUElfVEVTVF9GQzFfRlVOQ1RJT05fRU5BQkxFID0gKDEgPDwgOCksCisJTVBJX1RFU1RfRkMxX0ZVTkNUSU9OX01BU0sJPSAweDAwMDAwZTAwLAorCU1QSV9URVNUX0ZDMV9GVU5DVElPTl9TSElGVCA9IDksCisJTVBJX1RFU1RfRkMyX0ZVTkNUSU9OX0VOQUJMRSA9ICgxIDw8IDEyKSwKKwlNUElfVEVTVF9GQzJfRlVOQ1RJT05fTUFTSyA9IDB4MDAwMGUwMDAsCisJTVBJX1RFU1RfRkMyX0ZVTkNUSU9OX1NISUZUID0gMTMsCisKKwlNUElfTklDX1JFQUQgPSAweDAwMDAwMDAwLAorCU1QSV9OSUNfUkVHX0JMT0NLID0gMHgwMDAyMDAwMCwKKwlNUElfTklDX0ZVTkNUSU9OX1NISUZUID0gNiwKIH07CiAKIC8qCkBAIC00NjgsNyArNDg0LDcgQEAKIAlNRElPX1BPUlQgPSAweDAwMDAwNDQwLAogCU1ESU9fU1RBVFVTID0gMHgwMDAwMDQ1MCwKIAotCS8qIFhHTUFDIEFVWCBzdGF0aXN0aWNzICByZWdpc3RlcnMgKi8KKwlYR01BQ19SRUdJU1RFUl9FTkQgPSAweDAwMDAwNzQwLAogfTsKIAogLyoKQEAgLTUwOSw2ICs1MjUsNyBAQAogZW51bSB7CiAJTUFDX0FERFJfSURYX1NISUZUID0gNCwKIAlNQUNfQUREUl9UWVBFX1NISUZUID0gMTYsCisJTUFDX0FERFJfVFlQRV9DT1VOVCA9IDEwLAogCU1BQ19BRERSX1RZUEVfTUFTSyA9IDB4MDAwZjAwMDAsCiAJTUFDX0FERFJfVFlQRV9DQU1fTUFDID0gMHgwMDAwMDAwMCwKIAlNQUNfQUREUl9UWVBFX01VTFRJX01BQyA9IDB4MDAwMTAwMDAsCkBAIC01MjYsNiArNTQzLDMwIEBACiAJTUFDX0FERFJfTVIgPSAoMSA8PCAzMCksCiAJTUFDX0FERFJfTVcgPSAoMSA8PCAzMSksCiAJTUFYX01VTFRJQ0FTVF9FTlRSSUVTID0gMzIsCisKKwkvKiBFbnRyeSBjb3VudCBhbmQgd29yZHMgcGVyIGVudHJ5CisJICogZm9yIGVhY2ggYWRkcmVzcyB0eXBlIGluIHRoZSBmaWx0ZXIuCisJICovCisJTUFDX0FERFJfTUFYX0NBTV9FTlRSSUVTID0gNTEyLAorCU1BQ19BRERSX01BWF9DQU1fV0NPVU5UID0gMywKKwlNQUNfQUREUl9NQVhfTVVMVElDQVNUX0VOVFJJRVMgPSAzMiwKKwlNQUNfQUREUl9NQVhfTVVMVElDQVNUX1dDT1VOVCA9IDIsCisJTUFDX0FERFJfTUFYX1ZMQU5fRU5UUklFUyA9IDQwOTYsCisJTUFDX0FERFJfTUFYX1ZMQU5fV0NPVU5UID0gMSwKKwlNQUNfQUREUl9NQVhfTUNBU1RfRkxUUl9FTlRSSUVTID0gNDA5NiwKKwlNQUNfQUREUl9NQVhfTUNBU1RfRkxUUl9XQ09VTlQgPSAxLAorCU1BQ19BRERSX01BWF9GQ19NQUNfRU5UUklFUyA9IDQsCisJTUFDX0FERFJfTUFYX0ZDX01BQ19XQ09VTlQgPSAyLAorCU1BQ19BRERSX01BWF9NR01UX01BQ19FTlRSSUVTID0gOCwKKwlNQUNfQUREUl9NQVhfTUdNVF9NQUNfV0NPVU5UID0gMiwKKwlNQUNfQUREUl9NQVhfTUdNVF9WTEFOX0VOVFJJRVMgPSAxNiwKKwlNQUNfQUREUl9NQVhfTUdNVF9WTEFOX1dDT1VOVCA9IDEsCisJTUFDX0FERFJfTUFYX01HTVRfVjRfRU5UUklFUyA9IDQsCisJTUFDX0FERFJfTUFYX01HTVRfVjRfV0NPVU5UID0gMSwKKwlNQUNfQUREUl9NQVhfTUdNVF9WNl9FTlRSSUVTID0gNCwKKwlNQUNfQUREUl9NQVhfTUdNVF9WNl9XQ09VTlQgPSA0LAorCU1BQ19BRERSX01BWF9NR01UX1RVX0RQX0VOVFJJRVMgPSA0LAorCU1BQ19BRERSX01BWF9NR01UX1RVX0RQX1dDT1VOVCA9IDEsCiB9OwogCiAvKgpAQCAtNTk2LDYgKzYzNyw3IEBACiBlbnVtIHsKIAlSVF9JRFhfSURYX1NISUZUID0gOCwKIAlSVF9JRFhfVFlQRV9NQVNLID0gMHgwMDBmMDAwMCwKKwlSVF9JRFhfVFlQRV9TSElGVCA9IDE2LAogCVJUX0lEWF9UWVBFX1JUID0gMHgwMDAwMDAwMCwKIAlSVF9JRFhfVFlQRV9SVF9JTlYgPSAweDAwMDEwMDAwLAogCVJUX0lEWF9UWVBFX05JQ1EgPSAweDAwMDIwMDAwLApAQCAtNjY0LDcgKzcwNiw4OSBAQAogCVJUX0lEWF9VTlVTRUQwMTMgPSAxMywKIAlSVF9JRFhfVU5VU0VEMDE0ID0gMTQsCiAJUlRfSURYX1BST01JU0NVT1VTX1NMT1QgPSAxNSwKLQlSVF9JRFhfTUFYX1NMT1RTID0gMTYsCisJUlRfSURYX01BWF9SVF9TTE9UUyA9IDgsCisJUlRfSURYX01BWF9OSUNfU0xPVFMgPSAxNiwKK307CisKKy8qCisgKiBTZXJkZXMgQWRkcmVzcyBSZWdpc3RlciAoWEdfU0VSREVTX0FERFIpIGJpdCBkZWZpbml0aW9ucy4KKyAqLworZW51bSB7CisJWEdfU0VSREVTX0FERFJfUkRZID0gKDEgPDwgMzEpLAorCVhHX1NFUkRFU19BRERSX1IgPSAoMSA8PCAzMCksCisKKwlYR19TRVJERVNfQUREUl9TVFMgPSAweDAwMDAxRTA2LAorCVhHX1NFUkRFU19BRERSX1hGSTFfUFdSX1VQID0gMHgwMDAwMDAwNSwKKwlYR19TRVJERVNfQUREUl9YRkkyX1BXUl9VUCA9IDB4MDAwMDAwMGEsCisJWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTiA9IDB4MDAwMDAwMDEsCisKKwkvKiBTZXJkZXMgY29yZWR1bXAgZGVmaW5pdGlvbnMuICovCisJWEdfU0VSREVTX1hBVUlfQU5fU1RBUlQgPSAweDAwMDAwMDAwLAorCVhHX1NFUkRFU19YQVVJX0FOX0VORCA9IDB4MDAwMDAwMzQsCisJWEdfU0VSREVTX1hBVUlfSFNTX1BDU19TVEFSVCA9IDB4MDAwMDA4MDAsCisJWEdfU0VSREVTX1hBVUlfSFNTX1BDU19FTkQgPSAweDAwMDA4ODAsCisJWEdfU0VSREVTX1hGSV9BTl9TVEFSVCA9IDB4MDAwMDEwMDAsCisJWEdfU0VSREVTX1hGSV9BTl9FTkQgPSAweDAwMDAxMDM0LAorCVhHX1NFUkRFU19YRklfVFJBSU5fU1RBUlQgPSAweDEwMDAxMDUwLAorCVhHX1NFUkRFU19YRklfVFJBSU5fRU5EID0gMHgxMDAwMTA3QywKKwlYR19TRVJERVNfWEZJX0hTU19QQ1NfU1RBUlQgPSAweDAwMDAxODAwLAorCVhHX1NFUkRFU19YRklfSFNTX1BDU19FTkQgPSAweDAwMDAxODM4LAorCVhHX1NFUkRFU19YRklfSFNTX1RYX1NUQVJUID0gMHgwMDAwMWMwMCwKKwlYR19TRVJERVNfWEZJX0hTU19UWF9FTkQgPSAweDAwMDAxYzFmLAorCVhHX1NFUkRFU19YRklfSFNTX1JYX1NUQVJUID0gMHgwMDAwMWM0MCwKKwlYR19TRVJERVNfWEZJX0hTU19SWF9FTkQgPSAweDAwMDAxYzVmLAorCVhHX1NFUkRFU19YRklfSFNTX1BMTF9TVEFSVCA9IDB4MDAwMDFlMDAsCisJWEdfU0VSREVTX1hGSV9IU1NfUExMX0VORCA9IDB4MDAwMDFlMWYsCit9OworCisvKgorICogIE5JQyBQcm9iZSBNdXggQWRkcmVzcyBSZWdpc3RlciAoUFJCX01YX0FERFIpIGJpdCBkZWZpbml0aW9ucy4KKyAqLworZW51bSB7CisJUFJCX01YX0FERFJfQVJFID0gKDEgPDwgMTYpLAorCVBSQl9NWF9BRERSX1VQID0gKDEgPDwgMTUpLAorCVBSQl9NWF9BRERSX1NXUCA9ICgxIDw8IDE0KSwKKworCS8qIE1vZHVsZSBzZWxlY3QgdmFsdWVzLiAqLworCVBSQl9NWF9BRERSX01BWF9NT0RTID0gMjEsCisJUFJCX01YX0FERFJfTU9EX1NFTF9TSElGVCA9IDksCisJUFJCX01YX0FERFJfTU9EX1NFTF9UQkQgPSAwLAorCVBSQl9NWF9BRERSX01PRF9TRUxfSURFMSA9IDEsCisJUFJCX01YX0FERFJfTU9EX1NFTF9JREUyID0gMiwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX0ZSQiA9IDMsCisJUFJCX01YX0FERFJfTU9EX1NFTF9PREUxID0gNCwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX09ERTIgPSA1LAorCVBSQl9NWF9BRERSX01PRF9TRUxfREExID0gNiwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX0RBMiA9IDcsCisJUFJCX01YX0FERFJfTU9EX1NFTF9JTVAxID0gOCwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX0lNUDIgPSA5LAorCVBSQl9NWF9BRERSX01PRF9TRUxfT01QMSA9IDEwLAorCVBSQl9NWF9BRERSX01PRF9TRUxfT01QMiA9IDExLAorCVBSQl9NWF9BRERSX01PRF9TRUxfT1JTMSA9IDEyLAorCVBSQl9NWF9BRERSX01PRF9TRUxfT1JTMiA9IDEzLAorCVBSQl9NWF9BRERSX01PRF9TRUxfUkVHID0gMTQsCisJUFJCX01YX0FERFJfTU9EX1NFTF9NQUMxID0gMTYsCisJUFJCX01YX0FERFJfTU9EX1NFTF9NQUMyID0gMTcsCisJUFJCX01YX0FERFJfTU9EX1NFTF9WUU0xID0gMTgsCisJUFJCX01YX0FERFJfTU9EX1NFTF9WUU0yID0gMTksCisJUFJCX01YX0FERFJfTU9EX1NFTF9NT1AgPSAyMCwKKwkvKiBCaXQgZmllbGRzIGluZGljYXRpbmcgd2hpY2ggbW9kdWxlcworCSAqIGFyZSB2YWxpZCBmb3IgZWFjaCBjbG9jayBkb21haW4uCisJICovCisJUFJCX01YX0FERFJfVkFMSURfU1lTX01PRCA9IDB4MDAwZjdmZjcsCisJUFJCX01YX0FERFJfVkFMSURfUENJX01PRCA9IDB4MDAwMDQwYzEsCisJUFJCX01YX0FERFJfVkFMSURfWEdNX01PRCA9IDB4MDAwMzczMDksCisJUFJCX01YX0FERFJfVkFMSURfRkNfTU9EID0gMHgwMDAwMzAwMSwKKwlQUkJfTVhfQUREUl9WQUxJRF9UT1RBTCA9IDM0LAorCisJLyogQ2xvY2sgZG9tYWluIHZhbHVlcy4gKi8KKwlQUkJfTVhfQUREUl9DTE9DS19TSElGVCA9IDYsCisJUFJCX01YX0FERFJfU1lTX0NMT0NLID0gMCwKKwlQUkJfTVhfQUREUl9QQ0lfQ0xPQ0sgPSAyLAorCVBSQl9NWF9BRERSX0ZDX0NMT0NLID0gNSwKKwlQUkJfTVhfQUREUl9YR01fQ0xPQ0sgPSA2LAorCisJUFJCX01YX0FERFJfTUFYX01VWCA9IDY0LAogfTsKIAogLyoKQEAgLTczNyw2ICs4NjEsMjEgQEAKIAlQUkJfTVhfREFUQSA9IDB4ZmMsCS8qIFVzZSBzZW1hcGhvcmUgKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUworI2RlZmluZSBTTUFMTF9CVUZGRVJfU0laRSAyNTYKKyNkZWZpbmUgU01BTExfQlVGX01BUF9TSVpFIFNNQUxMX0JVRkZFUl9TSVpFCisjZGVmaW5lIFNQTFRfU0VUVElORyAgRlNDX0RCUlNUXzEwMjQKKyNkZWZpbmUgU1BMVF9MRU4gMAorI2RlZmluZSBRTEdFX1NCX1BBRCAwCisjZWxzZQorI2RlZmluZSBTTUFMTF9CVUZGRVJfU0laRSA1MTIKKyNkZWZpbmUgU01BTExfQlVGX01BUF9TSVpFIChTTUFMTF9CVUZGRVJfU0laRSAvIDIpCisjZGVmaW5lIFNQTFRfU0VUVElORyAgRlNDX1NICisjZGVmaW5lIFNQTFRfTEVOIChTUExUX0hEUl9FUCB8IFwKKwltaW4oU01BTExfQlVGX01BUF9TSVpFLCAxMDIzKSkKKyNkZWZpbmUgUUxHRV9TQl9QQUQgMzIKKyNlbmRpZgorCiAvKgogICogQ0FNIG91dHB1dCBmb3JtYXQuCiAgKi8KQEAgLTE0MjEsNyArMTU2MCw3IEBACiAJdTY0IHJ4X25pY19maWZvX2Ryb3A7CiB9OwogCi0vKiBBZGRyZXNzL0xlbmd0aCBwYWlycyBmb3IgdGhlIGNvcmVkdW1wLiAqLworLyogRmlybXdhcmUgY29yZWR1bXAgaW50ZXJuYWwgcmVnaXN0ZXIgYWRkcmVzcy9sZW5ndGggcGFpcnMuICovCiBlbnVtIHsKIAlNUElfQ09SRV9SRUdTX0FERFIgPSAweDAwMDMwMDAwLAogCU1QSV9DT1JFX1JFR1NfQ05UID0gMTI3LApAQCAtMTQ3Niw3ICsxNjE1LDcgQEAKIAl1OAlkZXNjcmlwdGlvblsxNl07CiB9OwogCi0vKiBSZWcgZHVtcCBzZWdtZW50IG51bWJlcnMuICovCisvKiBGaXJtd2FyZSBjb3JlZHVtcCBoZWFkZXIgc2VnbWVudCBudW1iZXJzLiAqLwogZW51bSB7CiAJQ09SRV9TRUdfTlVNID0gMSwKIAlURVNUX0xPR0lDX1NFR19OVU0gPSAyLApAQCAtMTUyNyw2ICsxNjY2LDY3IEBACiAKIH07CiAKKy8qIFRoZXJlIGFyZSA2NCBnZW5lcmljIE5JQyByZWdpc3RlcnMuICovCisjZGVmaW5lIE5JQ19SRUdTX0RVTVBfV09SRF9DT1VOVAkJNjQKKy8qIFhHTUFDIHdvcmQgY291bnQuICovCisjZGVmaW5lIFhHTUFDX0RVTVBfV09SRF9DT1VOVAkJKFhHTUFDX1JFR0lTVEVSX0VORCAvIDQpCisvKiBXb3JkIGNvdW50cyBmb3IgdGhlIFNFUkRFUyBibG9ja3MuICovCisjZGVmaW5lIFhHX1NFUkRFU19YQVVJX0FOX0NPVU5UCQkxNAorI2RlZmluZSBYR19TRVJERVNfWEFVSV9IU1NfUENTX0NPVU5UCTMzCisjZGVmaW5lIFhHX1NFUkRFU19YRklfQU5fQ09VTlQJCTE0CisjZGVmaW5lIFhHX1NFUkRFU19YRklfVFJBSU5fQ09VTlQJCTEyCisjZGVmaW5lIFhHX1NFUkRFU19YRklfSFNTX1BDU19DT1VOVAkxNQorI2RlZmluZSBYR19TRVJERVNfWEZJX0hTU19UWF9DT1VOVAkJMzIKKyNkZWZpbmUgWEdfU0VSREVTX1hGSV9IU1NfUlhfQ09VTlQJCTMyCisjZGVmaW5lIFhHX1NFUkRFU19YRklfSFNTX1BMTF9DT1VOVAkzMgorCisvKiBUaGVyZSBhcmUgMiBDTkEgRVRTIGFuZCA4IE5JQyBFVFMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBFVFNfUkVHU19EVU1QX1dPUkRfQ09VTlQJCTEwCisKKy8qIEVhY2ggcHJvYmUgbXV4IGVudHJ5IHN0b3JlcyB0aGUgcHJvYmUgdHlwZSBwbHVzIDY0IGVudHJpZXMKKyAqIHRoYXQgYXJlIGVhY2ggZWFjaCA2NC1iaXRzIGluIGxlbmd0aC4gVGhlcmUgYXJlIGEgdG90YWwgb2YKKyAqIDM0IChQUkJfTVhfQUREUl9WQUxJRF9UT1RBTCkgdmFsaWQgcHJvYmVzLgorICovCisjZGVmaW5lIFBSQl9NWF9BRERSX1BSQl9XT1JEX0NPVU5UCQkoMSArIChQUkJfTVhfQUREUl9NQVhfTVVYICogMikpCisjZGVmaW5lIFBSQl9NWF9EVU1QX1RPVF9DT1VOVAkJKFBSQl9NWF9BRERSX1BSQl9XT1JEX0NPVU5UICogXAorCQkJCQkJCVBSQl9NWF9BRERSX1ZBTElEX1RPVEFMKQorLyogRWFjaCByb3V0aW5nIGVudHJ5IGNvbnNpc3RzIG9mIDQgMzItYml0IHdvcmRzLgorICogVGhleSBhcmUgcm91dGUgdHlwZSwgaW5kZXgsIGluZGV4IHdvcmQsIGFuZCByZXN1bHQuCisgKiBUaGVyZSBhcmUgMiByb3V0ZSBibG9ja3Mgd2l0aCA4IGVudHJpZXMgZWFjaCBhbmQKKyAqICAyIE5JQyBibG9ja3Mgd2l0aCAxNiBlbnRyaWVzIGVhY2guCisgKiBUaGUgdG90b2wgZW50cmllcyBpcyA0OCB3aXRoIDQgd29yZHMgZWFjaC4KKyAqLworI2RlZmluZSBSVF9JRFhfRFVNUF9FTlRSSUVTCQkJNDgKKyNkZWZpbmUgUlRfSURYX0RVTVBfV09SRFNfUEVSX0VOVFJZCTQKKyNkZWZpbmUgUlRfSURYX0RVTVBfVE9UX1dPUkRTCQkoUlRfSURYX0RVTVBfRU5UUklFUyAqIFwKKwkJCQkJCVJUX0lEWF9EVU1QX1dPUkRTX1BFUl9FTlRSWSkKKy8qIFRoZXJlIGFyZSAxMCBhZGRyZXNzIGJsb2NrcyBpbiBmaWx0ZXIsIGVhY2ggd2l0aAorICogZGlmZmVyZW50IGVudHJ5IGNvdW50cyBhbmQgZGlmZmVyZW50IHdvcmQtY291bnQtcGVyLWVudHJ5LgorICovCisjZGVmaW5lIE1BQ19BRERSX0RVTVBfRU5UUklFUyBcCisJKChNQUNfQUREUl9NQVhfQ0FNX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfQ0FNX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NVUxUSUNBU1RfRU5UUklFUyAqIE1BQ19BRERSX01BWF9NVUxUSUNBU1RfV0NPVU5UKSArIFwKKwkoTUFDX0FERFJfTUFYX1ZMQU5fRU5UUklFUyAqIE1BQ19BRERSX01BWF9WTEFOX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NQ0FTVF9GTFRSX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfTUNBU1RfRkxUUl9XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfRkNfTUFDX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfRkNfTUFDX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NR01UX01BQ19FTlRSSUVTICogTUFDX0FERFJfTUFYX01HTVRfTUFDX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NR01UX1ZMQU5fRU5UUklFUyAqIE1BQ19BRERSX01BWF9NR01UX1ZMQU5fV0NPVU5UKSArIFwKKwkoTUFDX0FERFJfTUFYX01HTVRfVjRfRU5UUklFUyAqIE1BQ19BRERSX01BWF9NR01UX1Y0X1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NR01UX1Y2X0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfTUdNVF9WNl9XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTUdNVF9UVV9EUF9FTlRSSUVTICogTUFDX0FERFJfTUFYX01HTVRfVFVfRFBfV0NPVU5UKSkKKyNkZWZpbmUgTUFDX0FERFJfRFVNUF9XT1JEU19QRVJfRU5UUlkJMgorI2RlZmluZSBNQUNfQUREUl9EVU1QX1RPVF9XT1JEUwkJKE1BQ19BRERSX0RVTVBfRU5UUklFUyAqIFwKKwkJCQkJCU1BQ19BRERSX0RVTVBfV09SRFNfUEVSX0VOVFJZKQorLyogTWF4aW11bSBvZiA0IGZ1bmN0aW9ucyB3aG9zZSBzZW1hcGhvcmUgcmVnaXN0ZXJlcyBhcmUKKyAqIGluIHRoZSBjb3JlZHVtcC4KKyAqLworI2RlZmluZSBNQVhfU0VNQVBIT1JFX0ZVTkNUSU9OUwkJNAorLyogRGVmaW5lcyBmb3IgYWNjZXNzIHRoZSBNUEkgc2hhZG93IHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUklTQ18xMjQJCTB4MDAwMzAwN2MKKyNkZWZpbmUgUklTQ18xMjcJCTB4MDAwMzAwN2YKKyNkZWZpbmUgU0hBRE9XX09GRlNFVAkweGIwMDAwMDAwCisjZGVmaW5lIFNIQURPV19SRUdfU0hJRlQJMjAKKwogc3RydWN0IHFsX25pY19taXNjIHsKIAl1MzIgcnhfcmluZ19jb3VudDsKIAl1MzIgdHhfcmluZ19jb3VudDsKQEAgLTE1NjgsNiArMTc2OCwxOTkgQEAKIAl1MzIgZXRzWzgrMl07CiB9OwogCitzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wIHsKKwkvKiBzZWdtZW50IDAgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX2dsb2JhbF9oZWFkZXIgbXBpX2dsb2JhbF9oZWFkZXI7CisKKwkvKiBzZWdtZW50IDEgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGNvcmVfcmVnc19zZWdfaGRyOworCXUzMiBtcGlfY29yZV9yZWdzW01QSV9DT1JFX1JFR1NfQ05UXTsKKwl1MzIgbXBpX2NvcmVfc2hfcmVnc1tNUElfQ09SRV9TSF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDIgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHRlc3RfbG9naWNfcmVnc19zZWdfaGRyOworCXUzMiB0ZXN0X2xvZ2ljX3JlZ3NbVEVTVF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDMgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHJtaWlfcmVnc19zZWdfaGRyOworCXUzMiBybWlpX3JlZ3NbUk1JSV9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDQgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGZjbWFjMV9yZWdzX3NlZ19oZHI7CisJdTMyIGZjbWFjMV9yZWdzW0ZDTUFDX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgNSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgZmNtYWMyX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgZmNtYWMyX3JlZ3NbRkNNQUNfUkVHU19DTlRdOworCisJLyogc2VnbWVudCA2ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBmYzFfbWJ4X3JlZ3Nfc2VnX2hkcjsKKwl1MzIgZmMxX21ieF9yZWdzW0ZDX01CWF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDcgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGlkZV9yZWdzX3NlZ19oZHI7CisJdTMyIGlkZV9yZWdzW0lERV9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDggKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG5pYzFfbWJ4X3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbmljMV9tYnhfcmVnc1tOSUNfTUJYX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgOSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgc21idXNfcmVnc19zZWdfaGRyOworCXUzMiBzbWJ1c19yZWdzW1NNQlVTX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgMTAgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGZjMl9tYnhfcmVnc19zZWdfaGRyOworCXUzMiBmYzJfbWJ4X3JlZ3NbRkNfTUJYX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgMTEgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG5pYzJfbWJ4X3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbmljMl9tYnhfcmVnc1tOSUNfTUJYX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgMTIgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGkyY19yZWdzX3NlZ19oZHI7CisJdTMyIGkyY19yZWdzW0kyQ19SRUdTX0NOVF07CisJLyogc2VnbWVudCAxMyAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbWVtY19yZWdzX3NlZ19oZHI7CisJdTMyIG1lbWNfcmVnc1tNRU1DX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgMTQgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHBidXNfcmVnc19zZWdfaGRyOworCXUzMiBwYnVzX3JlZ3NbUEJVU19SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDE1ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBtZGVfcmVnc19zZWdfaGRyOworCXUzMiBtZGVfcmVnc1tNREVfUkVHU19DTlRdOworCisJLyogc2VnbWVudCAxNiAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbmljX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbmljX3JlZ3NbTklDX1JFR1NfRFVNUF9XT1JEX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMTcgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG5pYzJfcmVnc19zZWdfaGRyOworCXUzMiBuaWMyX3JlZ3NbTklDX1JFR1NfRFVNUF9XT1JEX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMTggKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhnbWFjMV9zZWdfaGRyOworCXUzMiB4Z21hYzFbWEdNQUNfRFVNUF9XT1JEX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMTkgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhnbWFjMl9zZWdfaGRyOworCXUzMiB4Z21hYzJbWEdNQUNfRFVNUF9XT1JEX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjAgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGNvZGVfcmFtX3NlZ19oZHI7CisJdTMyIGNvZGVfcmFtW0NPREVfUkFNX0NOVF07CisKKwkvKiBzZWdtZW50IDIxICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBtZW1jX3JhbV9zZWdfaGRyOworCXUzMiBtZW1jX3JhbVtNRU1DX1JBTV9DTlRdOworCisJLyogc2VnbWVudCAyMiAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGF1aV9hbl9oZHI7CisJdTMyIHNlcmRlc194YXVpX2FuW1hHX1NFUkRFU19YQVVJX0FOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjMgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhhdWlfaHNzX3Bjc19oZHI7CisJdTMyIHNlcmRlc194YXVpX2hzc19wY3NbWEdfU0VSREVTX1hBVUlfSFNTX1BDU19DT1VOVF07CisKKwkvKiBzZWdtZW50IDI0ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4ZmlfYW5faGRyOworCXUzMiBzZXJkZXNfeGZpX2FuW1hHX1NFUkRFU19YRklfQU5fQ09VTlRdOworCisJLyogc2VnbWVudCAyNSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpX3RyYWluX2hkcjsKKwl1MzIgc2VyZGVzX3hmaV90cmFpbltYR19TRVJERVNfWEZJX1RSQUlOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjYgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaV9oc3NfcGNzX2hkcjsKKwl1MzIgc2VyZGVzX3hmaV9oc3NfcGNzW1hHX1NFUkRFU19YRklfSFNTX1BDU19DT1VOVF07CisKKwkvKiBzZWdtZW50IDI3ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4ZmlfaHNzX3R4X2hkcjsKKwl1MzIgc2VyZGVzX3hmaV9oc3NfdHhbWEdfU0VSREVTX1hGSV9IU1NfVFhfQ09VTlRdOworCisJLyogc2VnbWVudCAyOCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpX2hzc19yeF9oZHI7CisJdTMyIHNlcmRlc194ZmlfaHNzX3J4W1hHX1NFUkRFU19YRklfSFNTX1JYX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjkgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaV9oc3NfcGxsX2hkcjsKKwl1MzIgc2VyZGVzX3hmaV9oc3NfcGxsW1hHX1NFUkRFU19YRklfSFNTX1BMTF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDMwICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBtaXNjX25pY19zZWdfaGRyOworCXN0cnVjdCBxbF9uaWNfbWlzYyBtaXNjX25pY19pbmZvOworCisJLyogc2VnbWVudCAzMSAqLworCS8qIG9uZSBpbnRlcnJ1cHQgc3RhdGUgZm9yIGVhY2ggQ1EgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGludHJfc3RhdGVzX3NlZ19oZHI7CisJdTMyIGludHJfc3RhdGVzW01BWF9SWF9SSU5HU107CisKKwkvKiBzZWdtZW50IDMyICovCisJLyogMyBjYW0gd29yZHMgZWFjaCBmb3IgMTYgdW5pY2FzdCwKKwkgKiAyIGNhbSB3b3JkcyBmb3IgZWFjaCBvZiAzMiBtdWx0aWNhc3QuCisJICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBjYW1fZW50cmllc19zZWdfaGRyOworCXUzMiBjYW1fZW50cmllc1soMTYgKiAzKSArICgzMiAqIDMpXTsKKworCS8qIHNlZ21lbnQgMzMgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG5pY19yb3V0aW5nX3dvcmRzX3NlZ19oZHI7CisJdTMyIG5pY19yb3V0aW5nX3dvcmRzWzE2XTsKKwkvKiBzZWdtZW50IDM0ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBldHNfc2VnX2hkcjsKKwl1MzIgZXRzW0VUU19SRUdTX0RVTVBfV09SRF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDM1ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBwcm9iZV9kdW1wX3NlZ19oZHI7CisJdTMyIHByb2JlX2R1bXBbUFJCX01YX0RVTVBfVE9UX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMzYgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHJvdXRpbmdfcmVnX3NlZ19oZHI7CisJdTMyIHJvdXRpbmdfcmVnc1tSVF9JRFhfRFVNUF9UT1RfV09SRFNdOworCisJLyogc2VnbWVudCAzNyAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbWFjX3Byb3RfcmVnX3NlZ19oZHI7CisJdTMyIG1hY19wcm90X3JlZ3NbTUFDX0FERFJfRFVNUF9UT1RfV09SRFNdOworCisJLyogc2VnbWVudCAzOCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGF1aTJfYW5faGRyOworCXUzMiBzZXJkZXMyX3hhdWlfYW5bWEdfU0VSREVTX1hBVUlfQU5fQ09VTlRdOworCisJLyogc2VnbWVudCAzOSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGF1aTJfaHNzX3Bjc19oZHI7CisJdTMyIHNlcmRlczJfeGF1aV9oc3NfcGNzW1hHX1NFUkRFU19YQVVJX0hTU19QQ1NfQ09VTlRdOworCisJLyogc2VnbWVudCA0MCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl9hbl9oZHI7CisJdTMyIHNlcmRlczJfeGZpX2FuW1hHX1NFUkRFU19YRklfQU5fQ09VTlRdOworCisJLyogc2VnbWVudCA0MSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl90cmFpbl9oZHI7CisJdTMyIHNlcmRlczJfeGZpX3RyYWluW1hHX1NFUkRFU19YRklfVFJBSU5fQ09VTlRdOworCisJLyogc2VnbWVudCA0MiAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl9oc3NfcGNzX2hkcjsKKwl1MzIgc2VyZGVzMl94ZmlfaHNzX3Bjc1tYR19TRVJERVNfWEZJX0hTU19QQ1NfQ09VTlRdOworCisJLyogc2VnbWVudCA0MyAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl9oc3NfdHhfaGRyOworCXUzMiBzZXJkZXMyX3hmaV9oc3NfdHhbWEdfU0VSREVTX1hGSV9IU1NfVFhfQ09VTlRdOworCisJLyogc2VnbWVudCA0NCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl9oc3NfcnhfaGRyOworCXUzMiBzZXJkZXMyX3hmaV9oc3NfcnhbWEdfU0VSREVTX1hGSV9IU1NfUlhfQ09VTlRdOworCisJLyogc2VnbWVudCA0NSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpMl9oc3NfcGxsX2hkcjsKKwl1MzIgc2VyZGVzMl94ZmlfaHNzX3BsbFtYR19TRVJERVNfWEZJX0hTU19QTExfQ09VTlRdOworCisJLyogc2VnbWVudCA1MCAqLworCS8qIHNlbWFwaG9yZSByZWdpc3RlciBmb3IgYWxsIDUgZnVuY3Rpb25zICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBzZW1fcmVnc19zZWdfaGRyOworCXUzMiBzZW1fcmVnc1tNQVhfU0VNQVBIT1JFX0ZVTkNUSU9OU107Cit9OworCiAvKgogICogaW50cl9jb250ZXh0IHN0cnVjdHVyZSBpcyB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbgogICogdG8gaG9vayB0aGUgaW50ZXJydXB0cy4gIEl0IGlzIGFsc28gdXNlZCBpbiBhIHNpbmdsZQpAQCAtMTYwMyw2ICsxOTk2LDggQEAKIAlRTF9DQU1fUlRfU0VUID0gOCwKIAlRTF9TRUxGVEVTVCA9IDksCiAJUUxfTEJfTElOS19VUCA9IDEwLAorCVFMX0ZSQ19DT1JFRFVNUCA9IDExLAorCVFMX0VFSF9GQVRBTCA9IDEyLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCkBAIC0xNzI0LDYgKzIxMTksOCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJc3RydWN0IHFsX21waV9jb3JlZHVtcCAqbXBpX2NvcmVkdW1wOworCXUzMiBjb3JlX2lzX2R1bXBlZDsKIAl1MzIgbGlua19jb25maWc7CiAJdTMyIGxlZF9jb25maWc7CiAJdTMyIG1heF9mcmFtZV9zaXplOwpAQCAtMTczNiwxMCArMjEzMywxNCBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcG9ydF9jZmdfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV9pZGNfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV9jb3JlX3RvX2xvZzsKIAlzdHJ1Y3QgY29tcGxldGlvbiBpZGVfY29tcGxldGlvbjsKIAlzdHJ1Y3QgbmljX29wZXJhdGlvbnMgKm5pY19vcHM7CiAJdTE2IGRldmljZV9pZDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlhdG9taWNfdCBsYl9jb3VudDsKKwkvKiBLZWVwIGxvY2FsIGNvcHkgb2YgY3VycmVudCBtYWMgYWRkcmVzcy4gKi8KKwljaGFyIGN1cnJlbnRfbWFjX2FkZHJbNl07CiB9OwogCiAvKgpAQCAtMTgwNyw2ICsyMjA4LDcgQEAKIHZvaWQgcWxfcXVldWVfZndfZXJyb3Ioc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogdm9pZCBxbF9tcGlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBxbF9tcGlfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBxbF9tcGlfY29yZV90b19sb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGludCBxbF93YWl0X3JlZ19yZHkoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiBiaXQsIHUzMiBlYml0KTsKIHZvaWQgcWxfcXVldWVfYXNpY19lcnJvcihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CkBAIC0xODE3LDYgKzIyMTksMTUgQEAKIGludCBxbF9tYl9nZXRfZndfc3RhdGUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogaW50IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9yZWFkX21waV9yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiAqZGF0YSk7CitpbnQgcWxfd3JpdGVfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyIGRhdGEpOworaW50IHFsX3VucGF1c2VfbXBpX3Jpc2Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOworaW50IHFsX3BhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9oYXJkX3Jlc2V0X21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9kdW1wX3Jpc2NfcmFtX2FyZWEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHZvaWQgKmJ1ZiwKKwkJdTMyIHJhbV9hZGRyLCBpbnQgd29yZF9jb3VudCk7CitpbnQgcWxfY29yZV9kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorCQlzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wICptcGlfY29yZWR1bXApOworaW50IHFsX21iX3N5c19lcnIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogaW50IHFsX21iX2Fib3V0X2Z3KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF93b2woc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogaW50IHFsX21iX3dvbF9zZXRfbWFnaWMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBlbmFibGVfd29sKTsKQEAgLTE4MzMsNiArMjI0NCw3IEBACiAJCQlzdHJ1Y3QgcWxfcmVnX2R1bXAgKm1waV9jb3JlZHVtcCk7CiBuZXRkZXZfdHhfdCBxbF9sYl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIHZvaWQgcWxfY2hlY2tfbGJfZnJhbWUoc3RydWN0IHFsX2FkYXB0ZXIgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitpbnQgcWxfb3duX2Zpcm13YXJlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9jbGVhbl9sYl9yeF9yaW5nKHN0cnVjdCByeF9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0KTsKIAogI2lmIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwppbmRleCA5ZjU4YzQ3Li5mZjg1NTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCkBAIC0xLDUgKzEsNDA1IEBACiAjaW5jbHVkZSAicWxnZS5oIgogCisvKiBSZWFkIGEgTklDIHJlZ2lzdGVyIGZyb20gdGhlIGFsdGVybmF0ZSBmdW5jdGlvbi4gKi8KK3N0YXRpYyB1MzIgcWxfcmVhZF9vdGhlcl9mdW5jX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJCXUzMiByZWcpCit7CisJdTMyIHJlZ2lzdGVyX3RvX3JlYWQ7CisJdTMyIHJlZ192YWw7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisKKwlyZWdpc3Rlcl90b19yZWFkID0gTVBJX05JQ19SRUdfQkxPQ0sKKwkJCQl8IE1QSV9OSUNfUkVBRAorCQkJCXwgKHFkZXYtPmFsdF9mdW5jIDw8IE1QSV9OSUNfRlVOQ1RJT05fU0hJRlQpCisJCQkJfCByZWc7CisJc3RhdHVzID0gcWxfcmVhZF9tcGlfcmVnKHFkZXYsIHJlZ2lzdGVyX3RvX3JlYWQsICZyZWdfdmFsKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXJldHVybiAweGZmZmZmZmZmOworCisJcmV0dXJuIHJlZ192YWw7Cit9CisKKy8qIFdyaXRlIGEgTklDIHJlZ2lzdGVyIGZyb20gdGhlIGFsdGVybmF0ZSBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgcWxfd3JpdGVfb3RoZXJfZnVuY19yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCXUzMiByZWcsIHUzMiByZWdfdmFsKQoreworCXUzMiByZWdpc3Rlcl90b19yZWFkOworCWludCBzdGF0dXMgPSAwOworCisJcmVnaXN0ZXJfdG9fcmVhZCA9IE1QSV9OSUNfUkVHX0JMT0NLCisJCQkJfCBNUElfTklDX1JFQUQKKwkJCQl8IChxZGV2LT5hbHRfZnVuYyA8PCBNUElfTklDX0ZVTkNUSU9OX1NISUZUKQorCQkJCXwgcmVnOworCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgcmVnaXN0ZXJfdG9fcmVhZCwgcmVnX3ZhbCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX3dhaXRfb3RoZXJfZnVuY19yZWdfcmR5KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLAorCQkJCQl1MzIgYml0LCB1MzIgZXJyX2JpdCkKK3sKKwl1MzIgdGVtcDsKKwlpbnQgY291bnQgPSAxMDsKKworCXdoaWxlIChjb3VudCkgeworCQl0ZW1wID0gcWxfcmVhZF9vdGhlcl9mdW5jX3JlZyhxZGV2LCByZWcpOworCisJCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KKwkJaWYgKHRlbXAgJiBlcnJfYml0KQorCQkJcmV0dXJuIC0xOworCQllbHNlIGlmICh0ZW1wICYgYml0KQorCQkJcmV0dXJuIDA7CisJCW1kZWxheSgxMCk7CisJCWNvdW50LS07CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBxbF9yZWFkX290aGVyX2Z1bmNfc2VyZGVzX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywKKwkJCQkJCQl1MzIgKmRhdGEpCit7CisJaW50IHN0YXR1czsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9vdGhlcl9mdW5jX3JlZ19yZHkocWRldiwgWEdfU0VSREVTX0FERFIgLyA0LAorCQkJCQkJWEdfU0VSREVTX0FERFJfUkRZLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBzZXQgdXAgZm9yIHJlZyByZWFkICovCisJcWxfd3JpdGVfb3RoZXJfZnVuY19yZWcocWRldiwgWEdfU0VSREVTX0FERFIvNCwgcmVnIHwgUFJPQ19BRERSX1IpOworCisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X290aGVyX2Z1bmNfcmVnX3JkeShxZGV2LCBYR19TRVJERVNfQUREUiAvIDQsCisJCQkJCQlYR19TRVJERVNfQUREUl9SRFksIDApOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCS8qIGdldCB0aGUgZGF0YSAqLworCSpkYXRhID0gcWxfcmVhZF9vdGhlcl9mdW5jX3JlZyhxZGV2LCAoWEdfU0VSREVTX0RBVEEgLyA0KSk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlYWQgb3V0IHRoZSBTRVJERVMgcmVnaXN0ZXJzICovCitzdGF0aWMgaW50IHFsX3JlYWRfc2VyZGVzX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICogZGF0YSkKK3sKKwlpbnQgc3RhdHVzOworCisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgWEdfU0VSREVTX0FERFIsIFhHX1NFUkRFU19BRERSX1JEWSwgMCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCisJLyogc2V0IHVwIGZvciByZWcgcmVhZCAqLworCXFsX3dyaXRlMzIocWRldiwgWEdfU0VSREVTX0FERFIsIHJlZyB8IFBST0NfQUREUl9SKTsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9yZWdfcmR5KHFkZXYsIFhHX1NFUkRFU19BRERSLCBYR19TRVJERVNfQUREUl9SRFksIDApOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCS8qIGdldCB0aGUgZGF0YSAqLworCSpkYXRhID0gcWxfcmVhZDMyKHFkZXYsIFhHX1NFUkRFU19EQVRBKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgcWxfZ2V0X2JvdGhfc2VyZGVzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgYWRkciwKKwkJCXUzMiAqZGlyZWN0X3B0ciwgdTMyICppbmRpcmVjdF9wdHIsCisJCQl1bnNpZ25lZCBpbnQgZGlyZWN0X3ZhbGlkLCB1bnNpZ25lZCBpbnQgaW5kaXJlY3RfdmFsaWQpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IDE7CisJaWYgKGRpcmVjdF92YWxpZCkKKwkJc3RhdHVzID0gcWxfcmVhZF9zZXJkZXNfcmVnKHFkZXYsIGFkZHIsIGRpcmVjdF9wdHIpOworCS8qIERlYWQgZmlsbCBhbnkgZmFpbHVyZXMgb3IgaW52YWxpZHMuICovCisJaWYgKHN0YXR1cykKKwkJKmRpcmVjdF9wdHIgPSAweERFQURCRUVGOworCisJc3RhdHVzID0gMTsKKwlpZiAoaW5kaXJlY3RfdmFsaWQpCisJCXN0YXR1cyA9IHFsX3JlYWRfb3RoZXJfZnVuY19zZXJkZXNfcmVnKAorCQkJCQkJcWRldiwgYWRkciwgaW5kaXJlY3RfcHRyKTsKKwkvKiBEZWFkIGZpbGwgYW55IGZhaWx1cmVzIG9yIGludmFsaWRzLiAqLworCWlmIChzdGF0dXMpCisJCSppbmRpcmVjdF9wdHIgPSAweERFQURCRUVGOworfQorCitzdGF0aWMgaW50IHFsX2dldF9zZXJkZXNfcmVncyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQlzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wICptcGlfY29yZWR1bXApCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgeGZpX2RpcmVjdF92YWxpZCwgeGZpX2luZGlyZWN0X3ZhbGlkLCB4YXVpX2RpcmVjdF92YWxpZDsKKwl1bnNpZ25lZCBpbnQgeGF1aV9pbmRpcmVjdF92YWxpZCwgaTsKKwl1MzIgKmRpcmVjdF9wdHIsIHRlbXA7CisJdTMyICppbmRpcmVjdF9wdHI7CisKKwl4ZmlfZGlyZWN0X3ZhbGlkID0geGZpX2luZGlyZWN0X3ZhbGlkID0gMDsKKwl4YXVpX2RpcmVjdF92YWxpZCA9IHhhdWlfaW5kaXJlY3RfdmFsaWQgPSAxOworCisJLyogVGhlIFhBVUkgbmVlZHMgdG8gYmUgcmVhZCBvdXQgcGVyIHBvcnQgKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJLyogV2UgYXJlIE5JQyAyCSovCisJCXN0YXR1cyA9IHFsX3JlYWRfb3RoZXJfZnVuY19zZXJkZXNfcmVnKHFkZXYsCisJCQkJWEdfU0VSREVTX1hBVUlfSFNTX1BDU19TVEFSVCwgJnRlbXApOworCQlpZiAoc3RhdHVzKQorCQkJdGVtcCA9IFhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV047CisJCWlmICgodGVtcCAmIFhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV04pID09CisJCQkJCVhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV04pCisJCQl4YXVpX2luZGlyZWN0X3ZhbGlkID0gMDsKKworCQlzdGF0dXMgPSBxbF9yZWFkX3NlcmRlc19yZWcocWRldiwKKwkJCQlYR19TRVJERVNfWEFVSV9IU1NfUENTX1NUQVJULCAmdGVtcCk7CisJCWlmIChzdGF0dXMpCisJCQl0ZW1wID0gWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTjsKKworCQlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKSA9PQorCQkJCQlYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKQorCQkJeGF1aV9kaXJlY3RfdmFsaWQgPSAwOworCX0gZWxzZSB7CisJCS8qIFdlIGFyZSBOSUMgMQkqLworCQlzdGF0dXMgPSBxbF9yZWFkX290aGVyX2Z1bmNfc2VyZGVzX3JlZyhxZGV2LAorCQkJCVhHX1NFUkRFU19YQVVJX0hTU19QQ1NfU1RBUlQsICZ0ZW1wKTsKKwkJaWYgKHN0YXR1cykKKwkJCXRlbXAgPSBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOOworCQlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKSA9PQorCQkJCQlYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKQorCQkJeGF1aV9pbmRpcmVjdF92YWxpZCA9IDA7CisKKwkJc3RhdHVzID0gcWxfcmVhZF9zZXJkZXNfcmVnKHFkZXYsCisJCQkJWEdfU0VSREVTX1hBVUlfSFNTX1BDU19TVEFSVCwgJnRlbXApOworCQlpZiAoc3RhdHVzKQorCQkJdGVtcCA9IFhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV047CisJCWlmICgodGVtcCAmIFhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV04pID09CisJCQkJCVhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV04pCisJCQl4YXVpX2RpcmVjdF92YWxpZCA9IDA7CisJfQorCisJLyoKKwkgKiBYRkkgcmVnaXN0ZXIgaXMgc2hhcmVkIHNvIG9ubHkgbmVlZCB0byByZWFkIG9uZQorCSAqIGZ1bmN0aW9ucyBhbmQgdGhlbiBjaGVjayB0aGUgYml0cy4KKwkgKi8KKwlzdGF0dXMgPSBxbF9yZWFkX3NlcmRlc19yZWcocWRldiwgWEdfU0VSREVTX0FERFJfU1RTLCAmdGVtcCk7CisJaWYgKHN0YXR1cykKKwkJdGVtcCA9IDA7CisKKwlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YRkkxX1BXUl9VUCkgPT0KKwkJCQkJWEdfU0VSREVTX0FERFJfWEZJMV9QV1JfVVApIHsKKwkJLyogbm93IHNlZSBpZiBpJ20gTklDIDEgb3IgTklDIDIgKi8KKwkJaWYgKHFkZXYtPmZ1bmMgJiAxKQorCQkJLyogSSdtIE5JQyAyLCBzbyB0aGUgaW5kaXJlY3QgKE5JQzEpIHhmaSBpcyB1cC4gKi8KKwkJCXhmaV9pbmRpcmVjdF92YWxpZCA9IDE7CisJCWVsc2UKKwkJCXhmaV9kaXJlY3RfdmFsaWQgPSAxOworCX0KKwlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YRkkyX1BXUl9VUCkgPT0KKwkJCQkJWEdfU0VSREVTX0FERFJfWEZJMl9QV1JfVVApIHsKKwkJLyogbm93IHNlZSBpZiBpJ20gTklDIDEgb3IgTklDIDIgKi8KKwkJaWYgKHFkZXYtPmZ1bmMgJiAxKQorCQkJLyogSSdtIE5JQyAyLCBzbyB0aGUgaW5kaXJlY3QgKE5JQzEpIHhmaSBpcyB1cC4gKi8KKwkJCXhmaV9kaXJlY3RfdmFsaWQgPSAxOworCQllbHNlCisJCQl4ZmlfaW5kaXJlY3RfdmFsaWQgPSAxOworCX0KKworCS8qIEdldCBYQVVJX0FOIHJlZ2lzdGVyIGJsb2NrLiAqLworCWlmIChxZGV2LT5mdW5jICYgMSkgeworCQkvKiBGdW5jdGlvbiAyIGlzIGRpcmVjdAkqLworCQlkaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hhdWlfYW47CisJCWluZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzX3hhdWlfYW47CisJfSBlbHNlIHsKKwkJLyogRnVuY3Rpb24gMSBpcyBkaXJlY3QJKi8KKwkJZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzX3hhdWlfYW47CisJCWluZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzMl94YXVpX2FuOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gMHgwMDAwMDAwMzQ7IGkgKz0gNCwgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGF1aV9kaXJlY3RfdmFsaWQsIHhhdWlfaW5kaXJlY3RfdmFsaWQpOworCisJLyogR2V0IFhBVUlfSFNTX1BDUyByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGF1aV9oc3NfcGNzOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGF1aV9oc3NfcGNzOworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGF1aV9oc3NfcGNzOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hhdWlfaHNzX3BjczsKKwl9CisKKwlmb3IgKGkgPSAweDgwMDsgaSA8PSAweDg4MDsgaSArPSA0LCBkaXJlY3RfcHRyKyssIGluZGlyZWN0X3B0cisrKQorCQlxbF9nZXRfYm90aF9zZXJkZXMocWRldiwgaSwgZGlyZWN0X3B0ciwgaW5kaXJlY3RfcHRyLAorCQkJCQl4YXVpX2RpcmVjdF92YWxpZCwgeGF1aV9pbmRpcmVjdF92YWxpZCk7CisKKwkvKiBHZXQgWEFVSV9YRklfQU4gcmVnaXN0ZXIgYmxvY2suICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2FuOworCQlpbmRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfYW47CisJfSBlbHNlIHsKKwkJZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9hbjsKKwkJaW5kaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9hbjsKKwl9CisKKwlmb3IgKGkgPSAweDEwMDA7IGkgPD0gMHgxMDM0OyBpICs9IDQsIGRpcmVjdF9wdHIrKywgaW5kaXJlY3RfcHRyKyspCisJCXFsX2dldF9ib3RoX3NlcmRlcyhxZGV2LCBpLCBkaXJlY3RfcHRyLCBpbmRpcmVjdF9wdHIsCisJCQkJCXhmaV9kaXJlY3RfdmFsaWQsIHhmaV9pbmRpcmVjdF92YWxpZCk7CisKKwkvKiBHZXQgWEFVSV9YRklfVFJBSU4gcmVnaXN0ZXIgYmxvY2suICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX3RyYWluOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX3RyYWluOworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfdHJhaW47CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX3RyYWluOworCX0KKworCWZvciAoaSA9IDB4MTA1MDsgaSA8PSAweDEwN2M7IGkgKz0gNCwgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGZpX2RpcmVjdF92YWxpZCwgeGZpX2luZGlyZWN0X3ZhbGlkKTsKKworCS8qIEdldCBYQVVJX1hGSV9IU1NfUENTIHJlZ2lzdGVyIGJsb2NrLiAqLworCWlmIChxZGV2LT5mdW5jICYgMSkgeworCQlkaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3BjczsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcGNzOworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc19wY3M7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19wY3M7CisJfQorCisJZm9yIChpID0gMHgxODAwOyBpIDw9IDB4MTgzODsgaSArPSA0LCBkaXJlY3RfcHRyKyssIGluZGlyZWN0X3B0cisrKQorCQlxbF9nZXRfYm90aF9zZXJkZXMocWRldiwgaSwgZGlyZWN0X3B0ciwgaW5kaXJlY3RfcHRyLAorCQkJCQl4ZmlfZGlyZWN0X3ZhbGlkLCB4ZmlfaW5kaXJlY3RfdmFsaWQpOworCisJLyogR2V0IFhBVUlfWEZJX0hTU19UWCByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc190eDsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfdHg7CisJfSBlbHNlIHsKKwkJZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfdHg7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc190eDsKKwl9CisJZm9yIChpID0gMHgxYzAwOyBpIDw9IDB4MWMxZjsgaSsrLCBkaXJlY3RfcHRyKyssIGluZGlyZWN0X3B0cisrKQorCQlxbF9nZXRfYm90aF9zZXJkZXMocWRldiwgaSwgZGlyZWN0X3B0ciwgaW5kaXJlY3RfcHRyLAorCQkJCQl4ZmlfZGlyZWN0X3ZhbGlkLCB4ZmlfaW5kaXJlY3RfdmFsaWQpOworCisJLyogR2V0IFhBVUlfWEZJX0hTU19SWCByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19yeDsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3Nfcng7CisJfSBlbHNlIHsKKwkJZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3Nfcng7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19yeDsKKwl9CisKKwlmb3IgKGkgPSAweDFjNDA7IGkgPD0gMHgxYzVmOyBpKyssIGRpcmVjdF9wdHIrKywgaW5kaXJlY3RfcHRyKyspCisJCXFsX2dldF9ib3RoX3NlcmRlcyhxZGV2LCBpLCBkaXJlY3RfcHRyLCBpbmRpcmVjdF9wdHIsCisJCQkJCXhmaV9kaXJlY3RfdmFsaWQsIHhmaV9pbmRpcmVjdF92YWxpZCk7CisKKworCS8qIEdldCBYQVVJX1hGSV9IU1NfUExMIHJlZ2lzdGVyIGJsb2NrLiAqLworCWlmIChxZGV2LT5mdW5jICYgMSkgeworCQlkaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3BsbDsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcGxsOworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc19wbGw7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19wbGw7CisJfQorCWZvciAoaSA9IDB4MWUwMDsgaSA8PSAweDFlMWY7IGkrKywgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGZpX2RpcmVjdF92YWxpZCwgeGZpX2luZGlyZWN0X3ZhbGlkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbF9yZWFkX290aGVyX2Z1bmNfeGdtYWNfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLAorCQkJCQkJCXUzMiAqZGF0YSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9vdGhlcl9mdW5jX3JlZ19yZHkocWRldiwgWEdNQUNfQUREUiAvIDQsCisJCQkJCQlYR01BQ19BRERSX1JEWSwgWEdNQUNfQUREUl9YTUUpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCS8qIHNldCB1cCBmb3IgcmVnIHJlYWQgKi8KKwlxbF93cml0ZV9vdGhlcl9mdW5jX3JlZyhxZGV2LCBYR01BQ19BRERSIC8gNCwgcmVnIHwgWEdNQUNfQUREUl9SKTsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9vdGhlcl9mdW5jX3JlZ19yZHkocWRldiwgWEdNQUNfQUREUiAvIDQsCisJCQkJCQlYR01BQ19BRERSX1JEWSwgWEdNQUNfQUREUl9YTUUpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCS8qIGdldCB0aGUgZGF0YSAqLworCSpkYXRhID0gcWxfcmVhZF9vdGhlcl9mdW5jX3JlZyhxZGV2LCBYR01BQ19EQVRBIC8gNCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlYWQgdGhlIDQwMCB4Z21hYyBjb250cm9sL3N0YXRpc3RpY3MgcmVnaXN0ZXJzCisgKiBza2lwcGluZyB1bnVzZWQgbG9jYXRpb25zLgorICovCitzdGF0aWMgaW50IHFsX2dldF94Z21hY19yZWdzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKiBidWYsCisJCQkJCXVuc2lnbmVkIGludCBvdGhlcl9mdW5jdGlvbikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IFBBVVNFX1NSQ19MTzsgaSA8IFhHTUFDX1JFR0lTVEVSX0VORDsgaSArPSA0LCBidWYrKykgeworCQkvKiBXZSdyZSByZWFkaW5nIDQwMCB4Z21hYyByZWdpc3RlcnMsIGJ1dCB3ZSBmaWx0ZXIgb3V0CisJCSAqIHNlcnZlcmFsIGxvY2F0aW9ucyB0aGF0IGFyZSBub24tcmVzcG9uc2l2ZSB0byByZWFkcy4KKwkJICovCisJCWlmICgoaSA9PSAweDAwMDAwMTE0KSB8fAorCQkJKGkgPT0gMHgwMDAwMDExOCkgfHwKKwkJCShpID09IDB4MDAwMDAxM2MpIHx8CisJCQkoaSA9PSAweDAwMDAwMTQwKSB8fAorCQkJKGkgPiAweDAwMDAwMTUwICYmIGkgPCAweDAwMDAwMWZjKSB8fAorCQkJKGkgPiAweDAwMDAwMjc4ICYmIGkgPCAweDAwMDAwMmEwKSB8fAorCQkJKGkgPiAweDAwMDAwMmMwICYmIGkgPCAweDAwMDAwMmNmKSB8fAorCQkJKGkgPiAweDAwMDAwMmRjICYmIGkgPCAweDAwMDAwMmYwKSB8fAorCQkJKGkgPiAweDAwMDAwM2M4ICYmIGkgPCAweDAwMDAwNDAwKSB8fAorCQkJKGkgPiAweDAwMDAwNDAwICYmIGkgPCAweDAwMDAwNDEwKSB8fAorCQkJKGkgPiAweDAwMDAwNDEwICYmIGkgPCAweDAwMDAwNDIwKSB8fAorCQkJKGkgPiAweDAwMDAwNDIwICYmIGkgPCAweDAwMDAwNDMwKSB8fAorCQkJKGkgPiAweDAwMDAwNDMwICYmIGkgPCAweDAwMDAwNDQwKSB8fAorCQkJKGkgPiAweDAwMDAwNDQwICYmIGkgPCAweDAwMDAwNDUwKSB8fAorCQkJKGkgPiAweDAwMDAwNDUwICYmIGkgPCAweDAwMDAwNTAwKSB8fAorCQkJKGkgPiAweDAwMDAwNTRjICYmIGkgPCAweDAwMDAwNTY4KSB8fAorCQkJKGkgPiAweDAwMDAwNWM4ICYmIGkgPCAweDAwMDAwNjAwKSkgeworCQkJaWYgKG90aGVyX2Z1bmN0aW9uKQorCQkJCXN0YXR1cyA9CisJCQkJcWxfcmVhZF9vdGhlcl9mdW5jX3hnbWFjX3JlZyhxZGV2LCBpLCBidWYpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IHFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIGksIGJ1Zik7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJKmJ1ZiA9IDB4ZGVhZGJlZWY7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQogCiBzdGF0aWMgaW50IHFsX2dldF9ldHNfcmVncyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyICogYnVmKQogewpAQCAtNDMsOCArNDQzLDggQEAKIAkJc3RhdHVzID0gcWxfZ2V0X21hY19hZGRyX3JlZyhxZGV2LAogCQkJCQlNQUNfQUREUl9UWVBFX0NBTV9NQUMsIGksIHZhbHVlKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCByZWFkIG9mIG1hYyBpbmRleCByZWdpc3Rlci5cbiIpOwogCQkJZ290byBlcnI7CiAJCX0KIAkJKmJ1ZisrID0gdmFsdWVbMF07CS8qIGxvd2VyIE1BQyBhZGRyZXNzICovCkBAIC01NSw4ICs0NTUsOCBAQAogCQlzdGF0dXMgPSBxbF9nZXRfbWFjX2FkZHJfcmVnKHFkZXYsCiAJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpLCB2YWx1ZSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkZhaWxlZCByZWFkIG9mIG1hYyBpbmRleCByZWdpc3Rlci5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgcmVhZCBvZiBtYWMgaW5kZXggcmVnaXN0ZXIuXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCSpidWYrKyA9IHZhbHVlWzBdOwkvKiBsb3dlciBNY2FzdCBhZGRyZXNzICovCkBAIC03OSw4ICs0NzksOCBAQAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJGYWlsZWQgcmVhZCBvZiByb3V0aW5nIGluZGV4IHJlZ2lzdGVyLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCByZWFkIG9mIHJvdXRpbmcgaW5kZXggcmVnaXN0ZXIuXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9IGVsc2UgewogCQkJKmJ1ZisrID0gdmFsdWU7CkBAIC05MSw2ICs0OTEsMjI2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogUmVhZCB0aGUgTVBJIFByb2Nlc3NvciBzaGFkb3cgcmVnaXN0ZXJzICovCitzdGF0aWMgaW50IHFsX2dldF9tcGlfc2hhZG93X3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqIGJ1ZikKK3sKKwl1MzIgaTsKKwlpbnQgc3RhdHVzOworCisJZm9yIChpID0gMDsgaSA8IE1QSV9DT1JFX1NIX1JFR1NfQ05UOyBpKyssIGJ1ZisrKSB7CisJCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgUklTQ18xMjQsCisJCQkJKFNIQURPV19PRkZTRVQgfCBpIDw8IFNIQURPV19SRUdfU0hJRlQpKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCQlzdGF0dXMgPSBxbF9yZWFkX21waV9yZWcocWRldiwgUklTQ18xMjcsIGJ1Zik7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKwl9CitlbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogUmVhZCB0aGUgTVBJIFByb2Nlc3NvciBjb3JlIHJlZ2lzdGVycyAqLworc3RhdGljIGludCBxbF9nZXRfbXBpX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqIGJ1ZiwKKwkJCQl1MzIgb2Zmc2V0LCB1MzIgY291bnQpCit7CisJaW50IGksIHN0YXR1cyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJ1ZisrKSB7CisJCXN0YXR1cyA9IHFsX3JlYWRfbXBpX3JlZyhxZGV2LCBvZmZzZXQgKyBpLCBidWYpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogUmVhZCB0aGUgQVNJQyBwcm9iZSBkdW1wICovCitzdGF0aWMgdW5zaWduZWQgaW50ICpxbF9nZXRfcHJvYmUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBjbG9jaywKKwkJCQkJdTMyIHZhbGlkLCB1MzIgKmJ1ZikKK3sKKwl1MzIgbW9kdWxlLCBtdXhfc2VsLCBwcm9iZSwgbG9fdmFsLCBoaV92YWw7CisKKwlmb3IgKG1vZHVsZSA9IDA7IG1vZHVsZSA8IFBSQl9NWF9BRERSX01BWF9NT0RTOyBtb2R1bGUrKykgeworCQlpZiAoISgodmFsaWQgPj4gbW9kdWxlKSAmIDEpKQorCQkJY29udGludWU7CisJCWZvciAobXV4X3NlbCA9IDA7IG11eF9zZWwgPCBQUkJfTVhfQUREUl9NQVhfTVVYOyBtdXhfc2VsKyspIHsKKwkJCXByb2JlID0gY2xvY2sKKwkJCQl8IFBSQl9NWF9BRERSX0FSRQorCQkJCXwgbXV4X3NlbAorCQkJCXwgKG1vZHVsZSA8PCBQUkJfTVhfQUREUl9NT0RfU0VMX1NISUZUKTsKKwkJCXFsX3dyaXRlMzIocWRldiwgUFJCX01YX0FERFIsIHByb2JlKTsKKwkJCWxvX3ZhbCA9IHFsX3JlYWQzMihxZGV2LCBQUkJfTVhfREFUQSk7CisJCQlpZiAobXV4X3NlbCA9PSAwKSB7CisJCQkJKmJ1ZiA9IHByb2JlOworCQkJCWJ1ZisrOworCQkJfQorCQkJcHJvYmUgfD0gUFJCX01YX0FERFJfVVA7CisJCQlxbF93cml0ZTMyKHFkZXYsIFBSQl9NWF9BRERSLCBwcm9iZSk7CisJCQloaV92YWwgPSBxbF9yZWFkMzIocWRldiwgUFJCX01YX0RBVEEpOworCQkJKmJ1ZiA9IGxvX3ZhbDsKKwkJCWJ1ZisrOworCQkJKmJ1ZiA9IGhpX3ZhbDsKKwkJCWJ1ZisrOworCQl9CisJfQorCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgcWxfZ2V0X3Byb2JlX2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHVuc2lnbmVkIGludCAqYnVmKQoreworCS8qIEZpcnN0IHdlIGhhdmUgdG8gZW5hYmxlIHRoZSBwcm9iZSBtdXggKi8KKwlxbF93cml0ZV9tcGlfcmVnKHFkZXYsIE1QSV9URVNUX0ZVTkNfUFJCX0NUTCwgTVBJX1RFU1RfRlVOQ19QUkJfRU4pOworCWJ1ZiA9IHFsX2dldF9wcm9iZShxZGV2LCBQUkJfTVhfQUREUl9TWVNfQ0xPQ0ssCisJCQlQUkJfTVhfQUREUl9WQUxJRF9TWVNfTU9ELCBidWYpOworCWJ1ZiA9IHFsX2dldF9wcm9iZShxZGV2LCBQUkJfTVhfQUREUl9QQ0lfQ0xPQ0ssCisJCQlQUkJfTVhfQUREUl9WQUxJRF9QQ0lfTU9ELCBidWYpOworCWJ1ZiA9IHFsX2dldF9wcm9iZShxZGV2LCBQUkJfTVhfQUREUl9YR01fQ0xPQ0ssCisJCQlQUkJfTVhfQUREUl9WQUxJRF9YR01fTU9ELCBidWYpOworCWJ1ZiA9IHFsX2dldF9wcm9iZShxZGV2LCBQUkJfTVhfQUREUl9GQ19DTE9DSywKKwkJCVBSQl9NWF9BRERSX1ZBTElEX0ZDX01PRCwgYnVmKTsKKwlyZXR1cm4gMDsKKworfQorCisvKiBSZWFkIG91dCB0aGUgcm91dGluZyBpbmRleCByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbnQgcWxfZ2V0X3JvdXRpbmdfaW5kZXhfcmVnaXN0ZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKmJ1ZikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiB0eXBlLCBpbmRleCwgaW5kZXhfbWF4OworCXUzMiByZXN1bHRfaW5kZXg7CisJdTMyIHJlc3VsdF9kYXRhOworCXUzMiB2YWw7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IDQ7IHR5cGUrKykgeworCQlpZiAodHlwZSA8IDIpCisJCQlpbmRleF9tYXggPSA4OworCQllbHNlCisJCQlpbmRleF9tYXggPSAxNjsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaW5kZXhfbWF4OyBpbmRleCsrKSB7CisJCQl2YWwgPSBSVF9JRFhfUlMKKwkJCQl8ICh0eXBlIDw8IFJUX0lEWF9UWVBFX1NISUZUKQorCQkJCXwgKGluZGV4IDw8IFJUX0lEWF9JRFhfU0hJRlQpOworCQkJcWxfd3JpdGUzMihxZGV2LCBSVF9JRFgsIHZhbCk7CisJCQlyZXN1bHRfaW5kZXggPSAwOworCQkJd2hpbGUgKChyZXN1bHRfaW5kZXggJiBSVF9JRFhfTVIpID09IDApCisJCQkJcmVzdWx0X2luZGV4ID0gcWxfcmVhZDMyKHFkZXYsIFJUX0lEWCk7CisJCQlyZXN1bHRfZGF0YSA9IHFsX3JlYWQzMihxZGV2LCBSVF9EQVRBKTsKKwkJCSpidWYgPSB0eXBlOworCQkJYnVmKys7CisJCQkqYnVmID0gaW5kZXg7CisJCQlidWYrKzsKKwkJCSpidWYgPSByZXN1bHRfaW5kZXg7CisJCQlidWYrKzsKKwkJCSpidWYgPSByZXN1bHRfZGF0YTsKKwkJCWJ1ZisrOworCQl9CisJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBSZWFkIG91dCB0aGUgTUFDIHByb3RvY29sIHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQgcWxfZ2V0X21hY19wcm90b2NvbF9yZWdpc3RlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqYnVmKQoreworCXUzMiByZXN1bHRfaW5kZXgsIHJlc3VsdF9kYXRhOworCXUzMiB0eXBlOworCXUzMiBpbmRleDsKKwl1MzIgb2Zmc2V0OworCXUzMiB2YWw7CisJdTMyIGluaXRpYWxfdmFsID0gTUFDX0FERFJfUlM7CisJdTMyIG1heF9pbmRleDsKKwl1MzIgbWF4X29mZnNldDsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQUNfQUREUl9UWVBFX0NPVU5UOyB0eXBlKyspIHsKKwkJc3dpdGNoICh0eXBlKSB7CisKKwkJY2FzZSAwOiAvKiBDQU0gKi8KKwkJCWluaXRpYWxfdmFsIHw9IE1BQ19BRERSX0FEUjsKKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9DQU1fRU5UUklFUzsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfQ0FNX1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIE11bHRpY2FzdCBNQUMgQWRkcmVzcyAqLworCQkJbWF4X2luZGV4ID0gTUFDX0FERFJfTUFYX0NBTV9XQ09VTlQ7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX0NBTV9XQ09VTlQ7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKiBWTEFOIGZpbHRlciBtYXNrICovCisJCWNhc2UgMzogLyogTUMgZmlsdGVyIG1hc2sgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9DQU1fV0NPVU5UOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9DQU1fV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgNDogLyogRkMgTUFDIGFkZHJlc3NlcyAqLworCQkJbWF4X2luZGV4ID0gTUFDX0FERFJfTUFYX0ZDX01BQ19FTlRSSUVTOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9GQ19NQUNfV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgNTogLyogTWdtdCBNQUMgYWRkcmVzc2VzICovCisJCQltYXhfaW5kZXggPSBNQUNfQUREUl9NQVhfTUdNVF9NQUNfRU5UUklFUzsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfTUdNVF9NQUNfV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgNjogLyogTWdtdCBWTEFOIGFkZHJlc3NlcyAqLworCQkJbWF4X2luZGV4ID0gTUFDX0FERFJfTUFYX01HTVRfVkxBTl9FTlRSSUVTOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9NR01UX1ZMQU5fV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgNzogLyogTWdtdCBJUHY0IGFkZHJlc3MgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9NR01UX1Y0X0VOVFJJRVM7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX01HTVRfVjRfV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgODogLyogTWdtdCBJUHY2IGFkZHJlc3MgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9NR01UX1Y2X0VOVFJJRVM7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX01HTVRfVjZfV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgOTogLyogTWdtdCBUQ1AvVURQIERlc3QgcG9ydCAqLworCQkJbWF4X2luZGV4ID0gTUFDX0FERFJfTUFYX01HTVRfVFVfRFBfRU5UUklFUzsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfTUdNVF9UVV9EUF9XQ09VTlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiJCYWQgdHlwZSEhISAweCUwOHhcbiIsIHR5cGUpOworCQkJbWF4X2luZGV4ID0gMDsKKwkJCW1heF9vZmZzZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbWF4X2luZGV4OyBpbmRleCsrKSB7CisJCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IG1heF9vZmZzZXQ7IG9mZnNldCsrKSB7CisJCQkJdmFsID0gaW5pdGlhbF92YWwKKwkJCQkJfCAodHlwZSA8PCBNQUNfQUREUl9UWVBFX1NISUZUKQorCQkJCQl8IChpbmRleCA8PCBNQUNfQUREUl9JRFhfU0hJRlQpCisJCQkJCXwgKG9mZnNldCk7CisJCQkJcWxfd3JpdGUzMihxZGV2LCBNQUNfQUREUl9JRFgsIHZhbCk7CisJCQkJcmVzdWx0X2luZGV4ID0gMDsKKwkJCQl3aGlsZSAoKHJlc3VsdF9pbmRleCAmIE1BQ19BRERSX01SKSA9PSAwKSB7CisJCQkJCXJlc3VsdF9pbmRleCA9IHFsX3JlYWQzMihxZGV2LAorCQkJCQkJCQlNQUNfQUREUl9JRFgpOworCQkJCX0KKwkJCQlyZXN1bHRfZGF0YSA9IHFsX3JlYWQzMihxZGV2LCBNQUNfQUREUl9EQVRBKTsKKwkJCQkqYnVmID0gcmVzdWx0X2luZGV4OworCQkJCWJ1ZisrOworCQkJCSpidWYgPSByZXN1bHRfZGF0YTsKKwkJCQlidWYrKzsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcWxfZ2V0X3NlbV9yZWdpc3RlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqYnVmKQoreworCXUzMiBmdW5jX251bSwgcmVnLCByZWdfdmFsOworCWludCBzdGF0dXM7CisKKwlmb3IgKGZ1bmNfbnVtID0gMDsgZnVuY19udW0gPCBNQVhfU0VNQVBIT1JFX0ZVTkNUSU9OUyA7IGZ1bmNfbnVtKyspIHsKKwkJcmVnID0gTVBJX05JQ19SRUdfQkxPQ0sKKwkJCXwgKGZ1bmNfbnVtIDw8IE1QSV9OSUNfRlVOQ1RJT05fU0hJRlQpCisJCQl8IChTRU0gLyA0KTsKKwkJc3RhdHVzID0gcWxfcmVhZF9tcGlfcmVnKHFkZXYsIHJlZywgJnJlZ192YWwpOworCQkqYnVmID0gcmVnX3ZhbDsKKwkJLyogaWYgdGhlIHJlYWQgZmFpbGVkIHRoZW4gZGVhZCBmaWxsIHRoZSBlbGVtZW50LiAqLworCQlpZiAoIXN0YXR1cykKKwkJCSpidWYgPSAweGRlYWRiZWVmOworCQlidWYrKzsKKwl9Cit9CisKIC8qIENyZWF0ZSBhIGNvcmVkdW1wIHNlZ21lbnQgaGVhZGVyICovCiBzdGF0aWMgdm9pZCBxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKAogCQlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyICpzZWdfaGRyLApAQCAtMTAzLDYgKzcyMyw1MjYgQEAKIAltZW1jcHkoc2VnX2hkci0+ZGVzY3JpcHRpb24sIGRlc2MsIChzaXplb2Yoc2VnX2hkci0+ZGVzY3JpcHRpb24pKSAtIDEpOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBjb3JlZHVtcCAvIHByb2JlZHVtcAorICogaXMgdG8gYmUgZXh0cmFjdGVkIGZyb20gdGhlIEhCQS4gSXQgaXMgYXNzdW1lZCB0aGVyZSBpcyBhCisgKiBxZGV2IHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiBzcGFjZSBmb3IgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsIGFzIGEgY29yZWR1bXAgc3RydWN0dXJlIHRoYXQKKyAqIHdpbGwgY29udGFpbiB0aGUgZHVtcC4KKyAqLworaW50IHFsX2NvcmVfZHVtcChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IHFsX21waV9jb3JlZHVtcCAqbXBpX2NvcmVkdW1wKQoreworCWludCBzdGF0dXM7CisJaW50IGk7CisKKwlpZiAoIW1waV9jb3JlZHVtcCkgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiTm8gbWVtb3J5IGF2YWlsYWJsZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSBzcGlubG9jaywgYnV0IGRvbnQgd29ycnkgaWYKKwkgKiBpdCBpc24ndCBhdmFpbGFibGUuICBJZiB0aGUgZmlybXdhcmUgZGllZCBpdAorCSAqIG1pZ2h0IGJlIGhvbGRpbmcgdGhlIHNlbS4KKwkgKi8KKwlxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1BST0NfUkVHX01BU0spOworCisJc3RhdHVzID0gcWxfcGF1c2VfbXBpX3Jpc2MocWRldik7CisJaWYgKHN0YXR1cykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIFJJU0MgcGF1c2UuIFN0YXR1cyA9IDB4JS4wOHhcbiIsIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIEluc2VydCB0aGUgZ2xvYmFsIGhlYWRlciAqLworCW1lbXNldCgmKG1waV9jb3JlZHVtcC0+bXBpX2dsb2JhbF9oZWFkZXIpLCAwLAorCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9nbG9iYWxfaGVhZGVyKSk7CisJbXBpX2NvcmVkdW1wLT5tcGlfZ2xvYmFsX2hlYWRlci5jb29raWUgPSBNUElfQ09SRURVTVBfQ09PS0lFOworCW1waV9jb3JlZHVtcC0+bXBpX2dsb2JhbF9oZWFkZXIuaGVhZGVyU2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX2dsb2JhbF9oZWFkZXIpOworCW1waV9jb3JlZHVtcC0+bXBpX2dsb2JhbF9oZWFkZXIuaW1hZ2VTaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBxbF9tcGlfY29yZWR1bXApOworCW1lbWNweShtcGlfY29yZWR1bXAtPm1waV9nbG9iYWxfaGVhZGVyLmlkU3RyaW5nLCAiTVBJIENvcmVkdW1wIiwKKwkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+bXBpX2dsb2JhbF9oZWFkZXIuaWRTdHJpbmcpKTsKKworCS8qIEdldCBnZW5lcmljIE5JQyByZWcgZHVtcCAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bmljX3JlZ3Nfc2VnX2hkciwKKwkJCU5JQzFfQ09OVFJPTF9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPm5pY19yZWdzKSwgIk5JQzEgUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm5pYzJfcmVnc19zZWdfaGRyLAorCQkJTklDMl9DT05UUk9MX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+bmljMl9yZWdzKSwgIk5JQzIgUmVnaXN0ZXJzIik7CisKKwkvKiBHZXQgWEdNYWMgcmVnaXN0ZXJzLiAoU2VnbWVudCAxOCwgUmV2IEMuIHN0ZXAgMjEpICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54Z21hYzFfc2VnX2hkciwKKwkJCU5JQzFfWEdNQUNfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT54Z21hYzEpLCAiTklDMSBYR01hYyBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGdtYWMyX3NlZ19oZHIsCisJCQlOSUMyX1hHTUFDX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+eGdtYWMyKSwgIk5JQzIgWEdNYWMgUmVnaXN0ZXJzIik7CisKKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJLyogT2RkIG1lYW5zIG91ciBmdW5jdGlvbiBpcyBOSUMgMiAqLworCQlmb3IgKGkgPSAwOyBpIDwgTklDX1JFR1NfRFVNUF9XT1JEX0NPVU5UOyBpKyspCisJCQltcGlfY29yZWR1bXAtPm5pYzJfcmVnc1tpXSA9CisJCQkJCSBxbF9yZWFkMzIocWRldiwgaSAqIHNpemVvZih1MzIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTklDX1JFR1NfRFVNUF9XT1JEX0NPVU5UOyBpKyspCisJCQltcGlfY29yZWR1bXAtPm5pY19yZWdzW2ldID0KKwkJCXFsX3JlYWRfb3RoZXJfZnVuY19yZWcocWRldiwgKGkgKiBzaXplb2YodTMyKSkgLyA0KTsKKworCQlxbF9nZXRfeGdtYWNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT54Z21hYzJbMF0sIDApOworCQlxbF9nZXRfeGdtYWNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT54Z21hYzFbMF0sIDEpOworCX0gZWxzZSB7CisJCS8qIEV2ZW4gbWVhbnMgb3VyIGZ1bmN0aW9uIGlzIE5JQyAxICovCisJCWZvciAoaSA9IDA7IGkgPCBOSUNfUkVHU19EVU1QX1dPUkRfQ09VTlQ7IGkrKykKKwkJCW1waV9jb3JlZHVtcC0+bmljX3JlZ3NbaV0gPQorCQkJCQlxbF9yZWFkMzIocWRldiwgaSAqIHNpemVvZih1MzIpKTsKKwkJZm9yIChpID0gMDsgaSA8IE5JQ19SRUdTX0RVTVBfV09SRF9DT1VOVDsgaSsrKQorCQkJbXBpX2NvcmVkdW1wLT5uaWMyX3JlZ3NbaV0gPQorCQkJcWxfcmVhZF9vdGhlcl9mdW5jX3JlZyhxZGV2LCAoaSAqIHNpemVvZih1MzIpKSAvIDQpOworCisJCXFsX2dldF94Z21hY19yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPnhnbWFjMVswXSwgMCk7CisJCXFsX2dldF94Z21hY19yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPnhnbWFjMlswXSwgMSk7CisJfQorCisJLyogUmV2IEMuIFN0ZXAgMjBhICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54YXVpX2FuX2hkciwKKwkJCVhBVUlfQU5fU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGF1aV9hbiksCisJCQkiWEFVSSBBTiBSZWdpc3RlcnMiKTsKKworCS8qIFJldiBDLiBTdGVwIDIwYiAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGF1aV9oc3NfcGNzX2hkciwKKwkJCVhBVUlfSFNTX1BDU19TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlc194YXVpX2hzc19wY3MpLAorCQkJIlhBVUkgSFNTIFBDUyBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpX2FuX2hkciwgWEZJX0FOX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9hbiksCisJCQkiWEZJIEFOIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmlfdHJhaW5faGRyLAorCQkJWEZJX1RSQUlOX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV90cmFpbiksCisJCQkiWEZJIFRSQUlOIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmlfaHNzX3Bjc19oZHIsCisJCQlYRklfSFNTX1BDU19TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3BjcyksCisJCQkiWEZJIEhTUyBQQ1MgUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaV9oc3NfdHhfaGRyLAorCQkJWEZJX0hTU19UWF9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3R4KSwKKwkJCSJYRkkgSFNTIFRYIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmlfaHNzX3J4X2hkciwKKwkJCVhGSV9IU1NfUlhfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc19yeCksCisJCQkiWEZJIEhTUyBSWCBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpX2hzc19wbGxfaGRyLAorCQkJWEZJX0hTU19QTExfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc19wbGwpLAorCQkJIlhGSSBIU1MgUExMIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54YXVpMl9hbl9oZHIsCisJCQlYQVVJMl9BTl9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlczJfeGF1aV9hbiksCisJCQkiWEFVSTIgQU4gUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhhdWkyX2hzc19wY3NfaGRyLAorCQkJWEFVSTJfSFNTX1BDU19TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlczJfeGF1aV9oc3NfcGNzKSwKKwkJCSJYQVVJMiBIU1MgUENTIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmkyX2FuX2hkciwKKwkJCVhGSTJfQU5fU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9hbiksCisJCQkiWEZJMiBBTiBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpMl90cmFpbl9oZHIsCisJCQlYRkkyX1RSQUlOX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfdHJhaW4pLAorCQkJIlhGSTIgVFJBSU4gUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaTJfaHNzX3Bjc19oZHIsCisJCQlYRkkyX0hTU19QQ1NfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfcGNzKSwKKwkJCSJYRkkyIEhTUyBQQ1MgUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaTJfaHNzX3R4X2hkciwKKwkJCVhGSTJfSFNTX1RYX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3R4KSwKKwkJCSJYRkkyIEhTUyBUWCBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpMl9oc3NfcnhfaGRyLAorCQkJWEZJMl9IU1NfUlhfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfcngpLAorCQkJIlhGSTIgSFNTIFJYIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmkyX2hzc19wbGxfaGRyLAorCQkJWEZJMl9IU1NfUExMX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3BsbCksCisJCQkiWEZJMiBIU1MgUExMIFJlZ2lzdGVycyIpOworCisJc3RhdHVzID0gcWxfZ2V0X3NlcmRlc19yZWdzKHFkZXYsIG1waV9jb3JlZHVtcCk7CisJaWYgKHN0YXR1cykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIER1bXAgb2YgU2VyZGVzIFJlZ2lzdGVycy4gU3RhdHVzID0gMHglLjA4eFxuIiwKKwkJCSAgc3RhdHVzKTsKKwkJZ290byBlcnI7CisJfQorCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5jb3JlX3JlZ3Nfc2VnX2hkciwKKwkJCQlDT1JFX1NFR19OVU0sCisJCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+Y29yZV9yZWdzX3NlZ19oZHIpICsKKwkJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5tcGlfY29yZV9yZWdzKSArCisJCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+bXBpX2NvcmVfc2hfcmVncyksCisJCQkJIkNvcmUgUmVnaXN0ZXJzIik7CisKKwkvKiBHZXQgdGhlIE1QSSBDb3JlIFJlZ2lzdGVycyAqLworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5tcGlfY29yZV9yZWdzWzBdLAorCQkJCSBNUElfQ09SRV9SRUdTX0FERFIsIE1QSV9DT1JFX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKwkvKiBHZXQgdGhlIDE2IE1QSSBzaGFkb3cgcmVnaXN0ZXJzICovCisJc3RhdHVzID0gcWxfZ2V0X21waV9zaGFkb3dfcmVncyhxZGV2LAorCQkJCQkmbXBpX2NvcmVkdW1wLT5tcGlfY29yZV9zaF9yZWdzWzBdKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgVGVzdCBMb2dpYyBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnRlc3RfbG9naWNfcmVnc19zZWdfaGRyLAorCQkJCVRFU1RfTE9HSUNfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPnRlc3RfbG9naWNfcmVncyksCisJCQkJIlRlc3QgTG9naWMgUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT50ZXN0X2xvZ2ljX3JlZ3NbMF0sCisJCQkJIFRFU1RfUkVHU19BRERSLCBURVNUX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgUk1JSSBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnJtaWlfcmVnc19zZWdfaGRyLAorCQkJCVJNSUlfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPnJtaWlfcmVncyksCisJCQkJIlJNSUkgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPnJtaWlfcmVnc1swXSwKKwkJCQkgUk1JSV9SRUdTX0FERFIsIFJNSUlfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBGQ01BQzEgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5mY21hYzFfcmVnc19zZWdfaGRyLAorCQkJCUZDTUFDMV9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+ZmNtYWMxX3JlZ3MpLAorCQkJCSJGQ01BQzEgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmZjbWFjMV9yZWdzWzBdLAorCQkJCSBGQ01BQzFfUkVHU19BRERSLCBGQ01BQ19SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIEZDTUFDMiBSZWdpc3RlcnMgKi8KKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+ZmNtYWMyX3JlZ3Nfc2VnX2hkciwKKwkJCQlGQ01BQzJfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPmZjbWFjMl9yZWdzKSwKKwkJCQkiRkNNQUMyIFJlZ2lzdGVycyIpOworCisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmZjbWFjMl9yZWdzWzBdLAorCQkJCSBGQ01BQzJfUkVHU19BRERSLCBGQ01BQ19SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIEZDMSBNQlggUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5mYzFfbWJ4X3JlZ3Nfc2VnX2hkciwKKwkJCQlGQzFfTUJPWF9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+ZmMxX21ieF9yZWdzKSwKKwkJCQkiRkMxIE1Cb3ggUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5mYzFfbWJ4X3JlZ3NbMF0sCisJCQkJIEZDMV9NQlhfUkVHU19BRERSLCBGQ19NQlhfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBJREUgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5pZGVfcmVnc19zZWdfaGRyLAorCQkJCUlERV9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+aWRlX3JlZ3MpLAorCQkJCSJJREUgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmlkZV9yZWdzWzBdLAorCQkJCSBJREVfUkVHU19BRERSLCBJREVfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBOSUMxIE1CWCBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm5pYzFfbWJ4X3JlZ3Nfc2VnX2hkciwKKwkJCQlOSUMxX01CT1hfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm5pYzFfbWJ4X3JlZ3MpLAorCQkJCSJOSUMxIE1Cb3ggUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5uaWMxX21ieF9yZWdzWzBdLAorCQkJCSBOSUMxX01CWF9SRUdTX0FERFIsIE5JQ19NQlhfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBTTUJ1cyBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnNtYnVzX3JlZ3Nfc2VnX2hkciwKKwkJCQlTTUJVU19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+c21idXNfcmVncyksCisJCQkJIlNNQnVzIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5zbWJ1c19yZWdzWzBdLAorCQkJCSBTTUJVU19SRUdTX0FERFIsIFNNQlVTX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgRkMyIE1CWCBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmZjMl9tYnhfcmVnc19zZWdfaGRyLAorCQkJCUZDMl9NQk9YX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5mYzJfbWJ4X3JlZ3MpLAorCQkJCSJGQzIgTUJveCBSZWdzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmZjMl9tYnhfcmVnc1swXSwKKwkJCQkgRkMyX01CWF9SRUdTX0FERFIsIEZDX01CWF9SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIE5JQzIgTUJYIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bmljMl9tYnhfcmVnc19zZWdfaGRyLAorCQkJCU5JQzJfTUJPWF9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+bmljMl9tYnhfcmVncyksCisJCQkJIk5JQzIgTUJveCBSZWdzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPm5pYzJfbWJ4X3JlZ3NbMF0sCisJCQkJIE5JQzJfTUJYX1JFR1NfQUREUiwgTklDX01CWF9SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIEkyQyBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmkyY19yZWdzX3NlZ19oZHIsCisJCQkJSTJDX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5pMmNfcmVncyksCisJCQkJIkkyQyBSZWdpc3RlcnMiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+aTJjX3JlZ3NbMF0sCisJCQkJIEkyQ19SRUdTX0FERFIsIEkyQ19SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIE1FTUMgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5tZW1jX3JlZ3Nfc2VnX2hkciwKKwkJCQlNRU1DX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5tZW1jX3JlZ3MpLAorCQkJCSJNRU1DIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5tZW1jX3JlZ3NbMF0sCisJCQkJIE1FTUNfUkVHU19BRERSLCBNRU1DX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgUEJ1cyBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnBidXNfcmVnc19zZWdfaGRyLAorCQkJCVBCVVNfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPnBidXNfcmVncyksCisJCQkJIlBCVVMgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPnBidXNfcmVnc1swXSwKKwkJCQkgUEJVU19SRUdTX0FERFIsIFBCVVNfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBNREUgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5tZGVfcmVnc19zZWdfaGRyLAorCQkJCU1ERV9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+bWRlX3JlZ3MpLAorCQkJCSJNREUgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPm1kZV9yZWdzWzBdLAorCQkJCSBNREVfUkVHU19BRERSLCBNREVfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5taXNjX25pY19zZWdfaGRyLAorCQkJCU1JU0NfTklDX0lORk9fU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm1pc2NfbmljX2luZm8pLAorCQkJCSJNSVNDIE5JQyBJTkZPIik7CisJbXBpX2NvcmVkdW1wLT5taXNjX25pY19pbmZvLnJ4X3JpbmdfY291bnQgPSBxZGV2LT5yeF9yaW5nX2NvdW50OworCW1waV9jb3JlZHVtcC0+bWlzY19uaWNfaW5mby50eF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudDsKKwltcGlfY29yZWR1bXAtPm1pc2NfbmljX2luZm8uaW50cl9jb3VudCA9IHFkZXYtPmludHJfY291bnQ7CisJbXBpX2NvcmVkdW1wLT5taXNjX25pY19pbmZvLmZ1bmN0aW9uID0gcWRldi0+ZnVuYzsKKworCS8qIFNlZ21lbnQgMzEgKi8KKwkvKiBHZXQgaW5kZXhlZCByZWdpc3RlciB2YWx1ZXMuICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5pbnRyX3N0YXRlc19zZWdfaGRyLAorCQkJCUlOVFJfU1RBVEVTX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5pbnRyX3N0YXRlcyksCisJCQkJIklOVFIgU3RhdGVzIik7CisJcWxfZ2V0X2ludHJfc3RhdGVzKHFkZXYsICZtcGlfY29yZWR1bXAtPmludHJfc3RhdGVzWzBdKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+Y2FtX2VudHJpZXNfc2VnX2hkciwKKwkJCQlDQU1fRU5UUklFU19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+Y2FtX2VudHJpZXMpLAorCQkJCSJDQU0gRW50cmllcyIpOworCXN0YXR1cyA9IHFsX2dldF9jYW1fZW50cmllcyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5jYW1fZW50cmllc1swXSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm5pY19yb3V0aW5nX3dvcmRzX3NlZ19oZHIsCisJCQkJUk9VVElOR19XT1JEU19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+bmljX3JvdXRpbmdfd29yZHMpLAorCQkJCSJSb3V0aW5nIFdvcmRzIik7CisJc3RhdHVzID0gcWxfZ2V0X3JvdXRpbmdfZW50cmllcyhxZGV2LAorCQkJICZtcGlfY29yZWR1bXAtPm5pY19yb3V0aW5nX3dvcmRzWzBdKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIFNlZ21lbnQgMzQgKFJldiBDLiBzdGVwIDIzKSAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+ZXRzX3NlZ19oZHIsCisJCQkJRVRTX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5ldHMpLAorCQkJCSJFVFMgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X2V0c19yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmV0c1swXSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnByb2JlX2R1bXBfc2VnX2hkciwKKwkJCQlQUk9CRV9EVU1QX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5wcm9iZV9kdW1wKSwKKwkJCQkiUHJvYmUgRHVtcCIpOworCXFsX2dldF9wcm9iZV9kdW1wKHFkZXYsICZtcGlfY29yZWR1bXAtPnByb2JlX2R1bXBbMF0pOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5yb3V0aW5nX3JlZ19zZWdfaGRyLAorCQkJCVJPVVRJTkdfSU5ERVhfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPnJvdXRpbmdfcmVncyksCisJCQkJIlJvdXRpbmcgUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9yb3V0aW5nX2luZGV4X3JlZ2lzdGVycyhxZGV2LAorCQkJCQkmbXBpX2NvcmVkdW1wLT5yb3V0aW5nX3JlZ3NbMF0pOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5tYWNfcHJvdF9yZWdfc2VnX2hkciwKKwkJCQlNQUNfUFJPVE9DT0xfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm1hY19wcm90X3JlZ3MpLAorCQkJCSJNQUMgUHJvdCBSZWdzIik7CisJcWxfZ2V0X21hY19wcm90b2NvbF9yZWdpc3RlcnMocWRldiwgJm1waV9jb3JlZHVtcC0+bWFjX3Byb3RfcmVnc1swXSk7CisKKwkvKiBHZXQgdGhlIHNlbWFwaG9yZSByZWdpc3RlcnMgZm9yIGFsbCA1IGZ1bmN0aW9ucyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+c2VtX3JlZ3Nfc2VnX2hkciwKKwkJCVNFTV9SRUdTX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VtX3JlZ3MpLAkiU2VtIFJlZ2lzdGVycyIpOworCisJcWxfZ2V0X3NlbV9yZWdpc3RlcnMocWRldiwgJm1waV9jb3JlZHVtcC0+c2VtX3JlZ3NbMF0pOworCisJLyogUHJldmVudCB0aGUgbXBpIHJlc3RhcnRpbmcgd2hpbGUgd2UgZHVtcCB0aGUgbWVtb3J5LiovCisJcWxfd3JpdGVfbXBpX3JlZyhxZGV2LCBNUElfVEVTVF9GVU5DX1JTVF9TVFMsIE1QSV9URVNUX0ZVTkNfUlNUX0ZSQyk7CisKKwkvKiBjbGVhciB0aGUgcGF1c2UgKi8KKwlzdGF0dXMgPSBxbF91bnBhdXNlX21waV9yaXNjKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBSSVNDIHVucGF1c2UuIFN0YXR1cyA9IDB4JS4wOHhcbiIsIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFJlc2V0IHRoZSBSSVNDIHNvIHdlIGNhbiBkdW1wIFJBTSAqLworCXN0YXR1cyA9IHFsX2hhcmRfcmVzZXRfbXBpX3Jpc2MocWRldik7CisJaWYgKHN0YXR1cykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIFJJU0MgcmVzZXQuIFN0YXR1cyA9IDB4JS4wOHhcbiIsIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+Y29kZV9yYW1fc2VnX2hkciwKKwkJCQlXQ1NfUkFNX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5jb2RlX3JhbSksCisJCQkJIldDUyBSQU0iKTsKKwlzdGF0dXMgPSBxbF9kdW1wX3Jpc2NfcmFtX2FyZWEocWRldiwgJm1waV9jb3JlZHVtcC0+Y29kZV9yYW1bMF0sCisJCQkJCUNPREVfUkFNX0FERFIsIENPREVfUkFNX0NOVCk7CisJaWYgKHN0YXR1cykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIER1bXAgb2YgQ09ERSBSQU0uIFN0YXR1cyA9IDB4JS4wOHhcbiIsCisJCQkgIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIEluc2VydCB0aGUgc2VnbWVudCBoZWFkZXIgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm1lbWNfcmFtX3NlZ19oZHIsCisJCQkJTUVNQ19SQU1fU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm1lbWNfcmFtKSwKKwkJCQkiTUVNQyBSQU0iKTsKKwlzdGF0dXMgPSBxbF9kdW1wX3Jpc2NfcmFtX2FyZWEocWRldiwgJm1waV9jb3JlZHVtcC0+bWVtY19yYW1bMF0sCisJCQkJCU1FTUNfUkFNX0FERFIsIE1FTUNfUkFNX0NOVCk7CisJaWYgKHN0YXR1cykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIER1bXAgb2YgTUVNQyBSQU0uIFN0YXR1cyA9IDB4JS4wOHhcbiIsCisJCQkgIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KK2VycjoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9QUk9DX1JFR19NQVNLKTsgLyogZG9lcyBmbHVzaCB0b28gKi8KKwlyZXR1cm4gc3RhdHVzOworCit9CisKK3N0YXRpYyB2b2lkIHFsX2dldF9jb3JlX2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKCFxbF9vd25fZmlybXdhcmUocWRldikpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkRvbid0IG93biBmaXJtd2FyZSFcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKHFkZXYtPm5kZXYpKSB7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRm9yY2UgQ29yZWR1bXAgY2FuIG9ubHkgYmUgZG9uZSBmcm9tIGludGVyZmFjZSB0aGF0IGlzIHVwLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocWxfbWJfc3lzX2VycihxZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWwgZm9yY2UgY29yZWR1bXAgd2l0aCBxbF9tYl9zeXNfZXJyKCkuXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKwogdm9pZCBxbF9nZW5fcmVnX2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQlzdHJ1Y3QgcWxfcmVnX2R1bXAgKm1waV9jb3JlZHVtcCkKIHsKQEAgLTE3OCw2ICsxMzE4LDM3IEBACiAJc3RhdHVzID0gcWxfZ2V0X2V0c19yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmV0c1swXSk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuOworCisJaWYgKHRlc3RfYml0KFFMX0ZSQ19DT1JFRFVNUCwgJnFkZXYtPmZsYWdzKSkKKwkJcWxfZ2V0X2NvcmVfZHVtcChxZGV2KTsKK30KKworLyogQ29yZWR1bXAgdG8gbWVzc2FnZXMgbG9nIGZpbGUgdXNpbmcgc2VwYXJhdGUgd29ya2VyIHRocmVhZCAqLwordm9pZCBxbF9tcGlfY29yZV90b19sb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfY29yZV90b19sb2cud29yayk7CisJdTMyICp0bXAsIGNvdW50OworCWludCBpOworCisJY291bnQgPSBzaXplb2Yoc3RydWN0IHFsX21waV9jb3JlZHVtcCkgLyBzaXplb2YodTMyKTsKKwl0bXAgPSAodTMyICopcWRldi0+bXBpX2NvcmVkdW1wOworCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIkNvcmUgaXMgZHVtcGluZyB0byBsb2cgZmlsZSFcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlLjA4eDogJS4wOHggJS4wOHggJS4wOHggJS4wOHggJS4wOHggIgorCQkJIiUuMDh4ICUuMDh4ICUuMDh4IFxuIiwgaSwKKwkJCXRtcFtpICsgMF0sCisJCQl0bXBbaSArIDFdLAorCQkJdG1wW2kgKyAyXSwKKwkJCXRtcFtpICsgM10sCisJCQl0bXBbaSArIDRdLAorCQkJdG1wW2kgKyA1XSwKKwkJCXRtcFtpICsgNl0sCisJCQl0bXBbaSArIDddKTsKKwkJbXNsZWVwKDUpOworCX0KIH0KIAogI2lmZGVmIFFMX1JFR19EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCAwNThmYTBhLi4wNWI4YmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTY3LDggKzY3LDggQEAKIAkJCXN0YXR1cyA9IHFsX3dyaXRlX2NmZyhxZGV2LCBjcWljYiwgc2l6ZW9mKCpjcWljYiksCiAJCQkJCQlDRkdfTENRLCByeF9yaW5nLT5jcV9pZCk7CiAJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJCSJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCQkgICJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJfQpAQCAtODksOCArODksOCBAQAogCQkJc3RhdHVzID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2YoKmNxaWNiKSwKIAkJCQkJCUNGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAkJCWlmIChzdGF0dXMpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBsb2FkIENRSUNCLlxuIik7CisJCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBsb2FkIENRSUNCLlxuIik7CiAJCQkJZ290byBleGl0OwogCQkJfQogCQl9CkBAIC0xMDcsOCArMTA3LDggQEAKIAogCXNwaW5fbG9jaygmcWRldi0+c3RhdHNfbG9jayk7CiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBxZGV2LT54Z19zZW1fbWFzaykpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkNvdWxkbid0IGdldCB4Z21hYyBzZW0uXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJICAiQ291bGRuJ3QgZ2V0IHhnbWFjIHNlbS5cbiIpOwogCQlnb3RvIHF1aXQ7CiAJfQogCS8qCkBAIC0xMTYsOCArMTE2LDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAweDIwMDsgaSA8IDB4MjgwOyBpICs9IDgpIHsKIAkJaWYgKHFsX3JlYWRfeGdtYWNfcmVnNjQocWRldiwgaSwgJmRhdGEpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkVycm9yIHJlYWRpbmcgc3RhdHVzIHJlZ2lzdGVyIDB4JS4wNHguXG4iLAorCQkJCSAgaSk7CiAJCQlnb3RvIGVuZDsKIAkJfSBlbHNlCiAJCQkqaXRlciA9IGRhdGE7CkBAIC0xMjksOCArMTMwLDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAweDMwMDsgaSA8IDB4M2QwOyBpICs9IDgpIHsKIAkJaWYgKHFsX3JlYWRfeGdtYWNfcmVnNjQocWRldiwgaSwgJmRhdGEpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkVycm9yIHJlYWRpbmcgc3RhdHVzIHJlZ2lzdGVyIDB4JS4wNHguXG4iLAorCQkJCSAgaSk7CiAJCQlnb3RvIGVuZDsKIAkJfSBlbHNlCiAJCQkqaXRlciA9IGRhdGE7CkBAIC0xNDIsOCArMTQ0LDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAweDUwMDsgaSA8IDB4NTQwOyBpICs9IDgpIHsKIAkJaWYgKHFsX3JlYWRfeGdtYWNfcmVnNjQocWRldiwgaSwgJmRhdGEpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkVycm9yIHJlYWRpbmcgc3RhdHVzIHJlZ2lzdGVyIDB4JS4wNHguXG4iLAorCQkJCSAgaSk7CiAJCQlnb3RvIGVuZDsKIAkJfSBlbHNlCiAJCQkqaXRlciA9IGRhdGE7CkBAIC0xNTUsOCArMTU4LDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAweDU2ODsgaSA8IDB4NWE4OyBpICs9IDgpIHsKIAkJaWYgKHFsX3JlYWRfeGdtYWNfcmVnNjQocWRldiwgaSwgJmRhdGEpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkVycm9yIHJlYWRpbmcgc3RhdHVzIHJlZ2lzdGVyIDB4JS4wNHguXG4iLAorCQkJCSAgaSk7CiAJCQlnb3RvIGVuZDsKIAkJfSBlbHNlCiAJCQkqaXRlciA9IGRhdGE7CkBAIC0xNjcsOCArMTcxLDggQEAKIAkgKiBHZXQgUlggTklDIEZJRk8gRFJPUCBzdGF0aXN0aWNzLgogCSAqLwogCWlmIChxbF9yZWFkX3hnbWFjX3JlZzY0KHFkZXYsIDB4NWI4LCAmZGF0YSkpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwgaSk7CiAJCWdvdG8gZW5kOwogCX0gZWxzZQogCQkqaXRlciA9IGRhdGE7CkBAIC0zOTYsMTQgKzQwMCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlxZGV2LT53b2wgPSB3b2wtPndvbG9wdHM7CiAKLQlRUFJJTlRLKHFkZXYsIERSViwgSU5GTywgIlNldCB3b2wgb3B0aW9uIDB4JXggb24gJXNcbiIsCi0JCQkgcWRldi0+d29sLCBuZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlNldCB3b2wgb3B0aW9uIDB4JXhcbiIsIHFkZXYtPndvbCk7CiAJaWYgKCFxZGV2LT53b2wpIHsKIAkJdTMyIHdvbCA9IDA7CiAJCXN0YXR1cyA9IHFsX21iX3dvbF9tb2RlKHFkZXYsIHdvbCk7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJXT0wgJXMgKHdvbCBjb2RlIDB4JXgpIG9uICVzXG4iLAotCQkJKHN0YXR1cyA9PSAwKSA/ICJjbGVhcmVkIHN1Y2Vzc2Z1bGx5IiA6ICJjbGVhciBmYWlsZWQiLAotCQkJd29sLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIldPTCAlcyAod29sIGNvZGUgMHgleClcbiIsCisJCQkgIHN0YXR1cyA9PSAwID8gImNsZWFyZWQgc3VjZXNzZnVsbHkiIDogImNsZWFyIGZhaWxlZCIsCisJCQkgIHdvbCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01MDAsNyArNTAzLDggQEAKIAkJCXJldHVybiAtRVBJUEU7CiAJCWF0b21pY19pbmMoJnFkZXYtPmxiX2NvdW50KTsKIAl9Ci0KKwkvKiBHaXZlIHF1ZXVlIHRpbWUgdG8gc2V0dGxlIGJlZm9yZSB0ZXN0aW5nIHJlc3VsdHMuICovCisJbXNsZWVwKDIpOwogCXFsX2NsZWFuX2xiX3J4X3JpbmcoJnFkZXYtPnJ4X3JpbmdbMF0sIDEyOCk7CiAJcmV0dXJuIGF0b21pY19yZWFkKCZxZGV2LT5sYl9jb3VudCkgPyAtRUlPIDogMDsKIH0KQEAgLTUzMyw5ICs1MzcsMTMgQEAKIAkJCWRhdGFbMF0gPSAwOwogCQl9CiAJCWNsZWFyX2JpdChRTF9TRUxGVEVTVCwgJnFkZXYtPmZsYWdzKTsKKwkJLyogR2l2ZSBsaW5rIHRpbWUgdG8gY29tZSB1cCBhZnRlcgorCQkgKiBwb3J0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKwkJICovCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQgKiAxMDAwKTsKIAl9IGVsc2UgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIiVzOiBpcyBkb3duLCBMb29wYmFjayB0ZXN0IHdpbGwgZmFpbC5cbiIsIG5kZXYtPm5hbWUpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiaXMgZG93biwgTG9vcGJhY2sgdGVzdCB3aWxsIGZhaWwuXG4iKTsKIAkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwppbmRleCA4OTRhN2M4Li5jMjZlYzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKQEAgLTczLDcgKzczLDE5IEBACiBtb2R1bGVfcGFyYW0ocWxnZV9pcnFfdHlwZSwgaW50LCBNU0lYX0lSUSk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsZ2VfaXJxX3R5cGUsICIwID0gTVNJLVgsIDEgPSBNU0ksIDIgPSBMZWdhY3kuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxbGdlX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGludCBxbGdlX21waV9jb3JlZHVtcDsKK21vZHVsZV9wYXJhbShxbGdlX21waV9jb3JlZHVtcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocWxnZV9tcGlfY29yZWR1bXAsCisJCSJPcHRpb24gdG8gZW5hYmxlIE1QSSBmaXJtd2FyZSBkdW1wLiAiCisJCSJEZWZhdWx0IGlzIE9GRiAtIERvIE5vdCBhbGxvY2F0ZSBtZW1vcnkuICIpOworCitzdGF0aWMgaW50IHFsZ2VfZm9yY2VfY29yZWR1bXA7Cittb2R1bGVfcGFyYW0ocWxnZV9mb3JjZV9jb3JlZHVtcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocWxnZV9mb3JjZV9jb3JlZHVtcCwKKwkJIk9wdGlvbiB0byBhbGxvdyBmb3JjZSBvZiBmaXJtd2FyZSBjb3JlIGR1bXAuICIKKwkJIkRlZmF1bHQgaXMgT0ZGIC0gRG8gbm90IGFsbG93LiIpOworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocWxnZV9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtMTE2LDcgKzEyOCw3IEBACiAJCXNlbV9iaXRzID0gU0VNX1NFVCA8PCBTRU1fUFJPQ19SRUdfU0hJRlQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgUFJPQkUsIEFMRVJULCAiQmFkIFNlbWFwaG9yZSBtYXNrIS5cbiIpOworCQluZXRpZl9hbGVydChxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwgImJhZCBTZW1hcGhvcmUgbWFzayEuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTYsMTcgKzE2OCwxNyBAQAogCiAJCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KIAkJaWYgKHRlbXAgJiBlcnJfYml0KSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFBST0JFLCBBTEVSVCwKLQkJCQkicmVnaXN0ZXIgMHglLjA4eCBhY2Nlc3MgZXJyb3IsIHZhbHVlID0gMHglLjA4eCEuXG4iLAotCQkJCXJlZywgdGVtcCk7CisJCQluZXRpZl9hbGVydChxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKKwkJCQkgICAgInJlZ2lzdGVyIDB4JS4wOHggYWNjZXNzIGVycm9yLCB2YWx1ZSA9IDB4JS4wOHghLlxuIiwKKwkJCQkgICAgcmVnLCB0ZW1wKTsKIAkJCXJldHVybiAtRUlPOwogCQl9IGVsc2UgaWYgKHRlbXAgJiBiaXQpCiAJCQlyZXR1cm4gMDsKIAkJdWRlbGF5KFVERUxBWV9ERUxBWSk7CiAJCWNvdW50LS07CiAJfQotCVFQUklOVEsocWRldiwgUFJPQkUsIEFMRVJULAotCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZyAleCB0byBjb21lIHJlYWR5LlxuIiwgcmVnKTsKKwluZXRpZl9hbGVydChxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKKwkJICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnICV4IHRvIGNvbWUgcmVhZHkuXG4iLCByZWcpOwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCkBAIC0yMDksNyArMjIxLDcgQEAKIAogCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHFkZXYtPnBkZXYsIHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKIAlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHFkZXYtPnBkZXYsIG1hcCkpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDb3VsZG4ndCBtYXAgRE1BIGFyZWEuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJDb3VsZG4ndCBtYXAgRE1BIGFyZWEuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMTksOCArMjMxLDggQEAKIAogCXN0YXR1cyA9IHFsX3dhaXRfY2ZnKHFkZXYsIGJpdCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQ0ZHIHRvIGNvbWUgcmVhZHkuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQ0ZHIHRvIGNvbWUgcmVhZHkuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMzAxLDggKzMxMyw4IEBACiAJY2FzZSBNQUNfQUREUl9UWVBFX1ZMQU46CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX0ZMVFI6CiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBDUklULAotCQkJIkFkZHJlc3MgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZC5cbiIsIHR5cGUpOworCQluZXRpZl9jcml0KHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICAiQWRkcmVzcyB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIiwgdHlwZSk7CiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgpAQCAtMzU5LDEyICszNzEsMTEgQEAKIAkJCSAgICAoYWRkclsyXSA8PCAyNCkgfCAoYWRkclszXSA8PCAxNikgfCAoYWRkcls0XSA8PCA4KSB8CiAJCQkgICAgKGFkZHJbNV0pOwogCi0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSJBZGRpbmcgJXMgYWRkcmVzcyAlcE0iCi0JCQkJIiBhdCBpbmRleCAlZCBpbiB0aGUgQ0FNLlxuIiwKLQkJCQkoKHR5cGUgPT0KLQkJCQkgIE1BQ19BRERSX1RZUEVfTVVMVElfTUFDKSA/ICJNVUxUSUNBU1QiIDoKLQkJCQkgIlVOSUNBU1QiKSwgYWRkciwgaW5kZXgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiQWRkaW5nICVzIGFkZHJlc3MgJXBNIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAorCQkJCSAgICAgdHlwZSA9PSBNQUNfQUREUl9UWVBFX01VTFRJX01BQyA/CisJCQkJICAgICAiTVVMVElDQVNUIiA6ICJVTklDQVNUIiwKKwkJCQkgICAgIGFkZHIsIGluZGV4KTsKIAogCQkJc3RhdHVzID0KIAkJCSAgICBxbF93YWl0X3JlZ19yZHkocWRldiwKQEAgLTQxNCw5ICs0MjUsMTEgQEAKIAkJCSAqIGFkZHJlc3NpbmcuIEl0J3MgZWl0aGVyIE1BQ19BRERSX0Ugb24gb3Igb2ZmLgogCQkJICogVGhhdCdzIGJpdC0yNyB3ZSdyZSB0YWxraW5nIGFib3V0LgogCQkJICovCi0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICIlcyBWTEFOIElEICVkICVzIHRoZSBDQU0uXG4iLAotCQkJCShlbmFibGVfYml0ID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKLQkJCQlpbmRleCwgKGVuYWJsZV9iaXQgPyAidG8iIDogImZyb20iKSk7CisJCQluZXRpZl9pbmZvKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAgIiVzIFZMQU4gSUQgJWQgJXMgdGhlIENBTS5cbiIsCisJCQkJICAgZW5hYmxlX2JpdCA/ICJBZGRpbmciIDogIlJlbW92aW5nIiwKKwkJCQkgICBpbmRleCwKKwkJCQkgICBlbmFibGVfYml0ID8gInRvIiA6ICJmcm9tIik7CiAKIAkJCXN0YXR1cyA9CiAJCQkgICAgcWxfd2FpdF9yZWdfcmR5KHFkZXYsCkBAIC00MzEsOCArNDQ0LDggQEAKIAkJfQogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9GTFRSOgogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgQ1JJVCwKLQkJCSJBZGRyZXNzIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWQuXG4iLCB0eXBlKTsKKwkJbmV0aWZfY3JpdChxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAgIkFkZHJlc3MgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZC5cbiIsIHR5cGUpOwogCQlzdGF0dXMgPSAtRVBFUk07CiAJfQogZXhpdDoKQEAgLTQ1MCwxNyArNDYzLDE0IEBACiAJY2hhciAqYWRkcjsKIAogCWlmIChzZXQpIHsKLQkJYWRkciA9ICZxZGV2LT5uZGV2LT5kZXZfYWRkclswXTsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCSJTZXQgTWFjIGFkZHIgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQlhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLAotCQkJYWRkcls0XSwgYWRkcls1XSk7CisJCWFkZHIgPSAmcWRldi0+Y3VycmVudF9tYWNfYWRkclswXTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJTZXQgTWFjIGFkZHIgJXBNXG4iLCBhZGRyKTsKIAl9IGVsc2UgewogCQltZW1zZXQoemVyb19tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwogCQlhZGRyID0gJnplcm9fbWFjX2FkZHJbMF07Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJIkNsZWFyaW5nIE1BQyBhZGRyZXNzIG9uICVzXG4iLAotCQkJCXFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIkNsZWFyaW5nIE1BQyBhZGRyZXNzXG4iKTsKIAl9CiAJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlpZiAoc3RhdHVzKQpAQCAtNDY5LDIzICs0NzksMjEgQEAKIAkJCU1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYyAqIE1BWF9DUSk7CiAJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgIgotCQkJImFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHZvaWQgcWxfbGlua19vbihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlRUFJJTlRLKHFkZXYsIExJTkssIEVSUiwgIiVzOiBMaW5rIGlzIHVwLlxuIiwKLQkJCQkgcWRldi0+bmRldi0+bmFtZSk7CisJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsICJMaW5rIGlzIHVwLlxuIik7CiAJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKIAlxbF9zZXRfbWFjX2FkZHIocWRldiwgMSk7CiB9CiAKIHZvaWQgcWxfbGlua19vZmYoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7Ci0JUVBSSU5USyhxZGV2LCBMSU5LLCBFUlIsICIlczogTGluayBpcyBkb3duLlxuIiwKLQkJCQkgcWRldi0+bmRldi0+bmFtZSk7CisJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsICJMaW5rIGlzIGRvd24uXG4iKTsKIAluZXRpZl9jYXJyaWVyX29mZihxZGV2LT5uZGV2KTsKIAlxbF9zZXRfbWFjX2FkZHIocWRldiwgMCk7CiB9CkBAIC01MjIsMjcgKzUzMCwyNyBAQAogCWludCBzdGF0dXMgPSAtRUlOVkFMOyAvKiBSZXR1cm4gZXJyb3IgaWYgbm8gbWFzayBtYXRjaC4gKi8KIAl1MzIgdmFsdWUgPSAwOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJIiVzICVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzIG1hc2sgJXMgdGhlIHJvdXRpbmcgcmVnLlxuIiwKLQkJKGVuYWJsZSA/ICJBZGRpbmciIDogIlJlbW92aW5nIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX0FMTF9FUlJfU0xPVCkgPyAiTUFDIEVSUk9SL0FMTCBFUlJPUiIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX0lQX0NTVU1fRVJSX1NMT1QpID8gIklQIENTVU0gRVJST1IiIDogIiIpLAotCQkoKGluZGV4ID09Ci0JCSAgUlRfSURYX1RDUF9VRFBfQ1NVTV9FUlJfU0xPVCkgPyAiVENQL1VEUCBDU1VNIEVSUk9SIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfQkNBU1RfU0xPVCkgPyAiQlJPQURDQVNUIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCkgPyAiTVVMVElDQVNUIE1BVENIIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfQUxMTVVMVElfU0xPVCkgPyAiQUxMIE1VTFRJQ0FTVCBNQVRDSCIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1VOVVNFRDZfU0xPVCkgPyAiVU5VU0VENiIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1VOVVNFRDdfU0xPVCkgPyAiVU5VU0VENyIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1JTU19NQVRDSF9TTE9UKSA/ICJSU1MgQUxML0lQVjQgTUFUQ0giIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9SU1NfSVBWNl9TTE9UKSA/ICJSU1MgSVBWNiIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1JTU19UQ1A0X1NMT1QpID8gIlJTUyBUQ1A0IiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfUlNTX1RDUDZfU0xPVCkgPyAiUlNTIFRDUDYiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9DQU1fSElUX1NMT1QpID8gIkNBTSBISVQiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9VTlVTRUQwMTMpID8gIlVOVVNFRDEzIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfVU5VU0VEMDE0KSA/ICJVTlVTRUQxNCIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1BST01JU0NVT1VTX1NMT1QpID8gIlBST01JU0NVT1VTIiA6ICIiKSwKLQkJKGVuYWJsZSA/ICJ0byIgOiAiZnJvbSIpKTsKKwluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAiJXMgJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAorCQkgICAgIGVuYWJsZSA/ICJBZGRpbmciIDogIlJlbW92aW5nIiwKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfQUxMX0VSUl9TTE9UID8gIk1BQyBFUlJPUi9BTEwgRVJST1IiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfSVBfQ1NVTV9FUlJfU0xPVCA/ICJJUCBDU1VNIEVSUk9SIiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1RDUF9VRFBfQ1NVTV9FUlJfU0xPVCA/ICJUQ1AvVURQIENTVU0gRVJST1IiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfQkNBU1RfU0xPVCA/ICJCUk9BRENBU1QiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCA/ICJNVUxUSUNBU1QgTUFUQ0giIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfQUxMTVVMVElfU0xPVCA/ICJBTEwgTVVMVElDQVNUIE1BVENIIiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1VOVVNFRDZfU0xPVCA/ICJVTlVTRUQ2IiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1VOVVNFRDdfU0xPVCA/ICJVTlVTRUQ3IiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1JTU19NQVRDSF9TTE9UID8gIlJTUyBBTEwvSVBWNCBNQVRDSCIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9SU1NfSVBWNl9TTE9UID8gIlJTUyBJUFY2IiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1JTU19UQ1A0X1NMT1QgPyAiUlNTIFRDUDQiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfUlNTX1RDUDZfU0xPVCA/ICJSU1MgVENQNiIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9DQU1fSElUX1NMT1QgPyAiQ0FNIEhJVCIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9VTlVTRUQwMTMgPyAiVU5VU0VEMTMiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfVU5VU0VEMDE0ID8gIlVOVVNFRDE0IiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1BST01JU0NVT1VTX1NMT1QgPyAiUFJPTUlTQ1VPVVMiIDoKKwkJICAgICAiKEJhZCBpbmRleCAhPSBSVF9JRFgpIiwKKwkJICAgICBlbmFibGUgPyAidG8iIDogImZyb20iKTsKIAogCXN3aXRjaCAobWFzaykgewogCWNhc2UgUlRfSURYX0NBTV9ISVQ6CkBAIC02MDIsOCArNjEwLDggQEAKIAkJCWJyZWFrOwogCQl9CiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJNYXNrIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWQuXG4iLAotCQkJbWFzayk7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiTWFzayB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIiwgbWFzayk7CiAJCXN0YXR1cyA9IC1FUEVSTTsKIAkJZ290byBleGl0OwogCX0KQEAgLTcwOSw3ICs3MTcsNyBAQAogCiAJc3RhdHVzID0gc3RybmNtcCgoY2hhciAqKSZxZGV2LT5mbGFzaCwgc3RyLCA0KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaCBzaWduYXR1cmUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJJbnZhbGlkIGZsYXNoIHNpZ25hdHVyZS5cbiIpOwogCQlyZXR1cm4Jc3RhdHVzOwogCX0KIApAQCAtNzE3LDggKzcyNSw4IEBACiAJCWNzdW0gKz0gbGUxNl90b19jcHUoKmZsYXNoKyspOwogCiAJaWYgKGNzdW0pCi0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkludmFsaWQgZmxhc2ggY2hlY2tzdW0sIGNzdW0gPSAweCUuMDR4LlxuIiwgY3N1bSk7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKIAogCXJldHVybiBjc3VtOwogfQpAQCAtNzcwLDcgKzc3OCw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKywgcCsrKSB7CiAJCXN0YXR1cyA9IHFsX3JlYWRfZmxhc2hfd29yZChxZGV2LCBpK29mZnNldCwgcCk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRXJyb3IgcmVhZGluZyBmbGFzaC5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiRXJyb3IgcmVhZGluZyBmbGFzaC5cbiIpOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtNzc5LDcgKzc4OCw3IEBACiAJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAogCQkJIjgwMDAiKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkludmFsaWQgZmxhc2guXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KQEAgLTc5Nyw3ICs4MDYsNyBAQAogCQkJcWRldi0+bmRldi0+YWRkcl9sZW4pOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY19hZGRyKSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJJbnZhbGlkIE1BQyBhZGRyZXNzLlxuIik7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC04MzEsNyArODQwLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIApAQCAtODQxLDcgKzg1MSw3IEBACiAJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAogCQkJIjgwMTIiKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkludmFsaWQgZmxhc2guXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KQEAgLTk1OSwxNyArOTY5LDE3IEBACiAJCS8qIEFub3RoZXIgZnVuY3Rpb24gaGFzIHRoZSBzZW1hcGhvcmUsIHNvCiAJCSAqIHdhaXQgZm9yIHRoZSBwb3J0IGluaXQgYml0IHRvIGNvbWUgcmVhZHkuCiAJCSAqLwotCQlRUFJJTlRLKHFkZXYsIExJTkssIElORk8sCi0JCQkiQW5vdGhlciBmdW5jdGlvbiBoYXMgdGhlIHNlbWFwaG9yZSwgc28gd2FpdCBmb3IgdGhlIHBvcnQgaW5pdCBiaXQgdG8gY29tZSByZWFkeS5cbiIpOworCQluZXRpZl9pbmZvKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCisJCQkgICAiQW5vdGhlciBmdW5jdGlvbiBoYXMgdGhlIHNlbWFwaG9yZSwgc28gd2FpdCBmb3IgdGhlIHBvcnQgaW5pdCBiaXQgdG8gY29tZSByZWFkeS5cbiIpOwogCQlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgU1RTLCBxZGV2LT5wb3J0X2luaXQsIDApOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIExJTkssIENSSVQsCi0JCQkJIlBvcnQgaW5pdGlhbGl6ZSB0aW1lZCBvdXQuXG4iKTsKKwkJCW5ldGlmX2NyaXQocWRldiwgbGluaywgcWRldi0+bmRldiwKKwkJCQkgICAiUG9ydCBpbml0aWFsaXplIHRpbWVkIG91dC5cbiIpOwogCQl9CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JUVBSSU5USyhxZGV2LCBMSU5LLCBJTkZPLCAiR290IHhnbWFjIHNlbWFwaG9yZSEuXG4iKTsKKwluZXRpZl9pbmZvKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsICJHb3QgeGdtYWMgc2VtYXBob3JlIS5cbiIpOwogCS8qIFNldCB0aGUgY29yZSByZXNldC4gKi8KIAlzdGF0dXMgPSBxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBHTE9CQUxfQ0ZHLCAmZGF0YSk7CiAJaWYgKHN0YXR1cykKQEAgLTEwOTksOCArMTEwOSw4IEBACiAJCQkJCQlHRlBfQVRPTUlDLAogCQkJCQkJcWRldi0+bGJxX2J1Zl9vcmRlcik7CiAJCWlmICh1bmxpa2VseSghcnhfcmluZy0+cGdfY2h1bmsucGFnZSkpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJInBhZ2UgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJICAicGFnZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJcnhfcmluZy0+cGdfY2h1bmsub2Zmc2V0ID0gMDsKQEAgLTExMTAsOCArMTEyMCw4IEBACiAJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewogCQkJX19mcmVlX3BhZ2VzKHJ4X3JpbmctPnBnX2NodW5rLnBhZ2UsCiAJCQkJCXFkZXYtPmxicV9idWZfb3JkZXIpOwotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIlBDSSBtYXBwaW5nIGZhaWxlZC5cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJcnhfcmluZy0+cGdfY2h1bmsubWFwID0gbWFwOwpAQCAtMTE0OCwxNSArMTE1OCwxNSBAQAogCiAJd2hpbGUgKHJ4X3JpbmctPmxicV9mcmVlX2NudCA+IDMyKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJImxicTogdHJ5IGNsZWFuaW5nIGNsZWFuX2lkeCA9ICVkLlxuIiwKLQkJCQljbGVhbl9pZHgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJsYnE6IHRyeSBjbGVhbmluZyBjbGVhbl9pZHggPSAlZC5cbiIsCisJCQkJICAgICBjbGVhbl9pZHgpOwogCQkJbGJxX2Rlc2MgPSAmcnhfcmluZy0+bGJxW2NsZWFuX2lkeF07CiAJCQlpZiAocWxfZ2V0X25leHRfY2h1bmsocWRldiwgcnhfcmluZywgbGJxX2Rlc2MpKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJCSJDb3VsZCBub3QgZ2V0IGEgcGFnZSBjaHVuay5cbiIpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQorCQkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCQkgICJDb3VsZCBub3QgZ2V0IGEgcGFnZSBjaHVuay5cbiIpOworCQkJCXJldHVybjsKKwkJCX0KIAogCQkJbWFwID0gbGJxX2Rlc2MtPnAucGdfY2h1bmsubWFwICsKIAkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5vZmZzZXQ7CkBAIC0xMTgxLDkgKzExOTEsOSBAQAogCX0KIAogCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAotCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgImxicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCisJCQkgICAgIHJ4X3JpbmctPmxicV9wcm9kX2lkeCk7CiAJCXFsX3dyaXRlX2RiX3JlZyhyeF9yaW5nLT5sYnFfcHJvZF9pZHgsCiAJCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4X2RiX3JlZyk7CiAJfQpAQCAtMTIwMSwxOSArMTIxMSwyMCBAQAogCXdoaWxlIChyeF9yaW5nLT5zYnFfZnJlZV9jbnQgPiAxNikgewogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2NsZWFuX2lkeF07Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJInNicTogdHJ5IGNsZWFuaW5nIGNsZWFuX2lkeCA9ICVkLlxuIiwKLQkJCQljbGVhbl9pZHgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJzYnE6IHRyeSBjbGVhbmluZyBjbGVhbl9pZHggPSAlZC5cbiIsCisJCQkJICAgICBjbGVhbl9pZHgpOwogCQkJaWYgKHNicV9kZXNjLT5wLnNrYiA9PSBOVUxMKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCQkic2JxOiBnZXR0aW5nIG5ldyBza2IgZm9yIGluZGV4ICVkLlxuIiwKLQkJCQkJc2JxX2Rlc2MtPmluZGV4KTsKKwkJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLAorCQkJCQkgICAgIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgInNicTogZ2V0dGluZyBuZXcgc2tiIGZvciBpbmRleCAlZC5cbiIsCisJCQkJCSAgICAgc2JxX2Rlc2MtPmluZGV4KTsKIAkJCQlzYnFfZGVzYy0+cC5za2IgPQogCQkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKHFkZXYtPm5kZXYsCiAJCQkJCQkgICAgIFNNQUxMX0JVRkZFUl9TSVpFKTsKIAkJCQlpZiAoc2JxX2Rlc2MtPnAuc2tiID09IE5VTEwpIHsKLQkJCQkJUVBSSU5USyhxZGV2LCBQUk9CRSwgRVJSLAotCQkJCQkJIkNvdWxkbid0IGdldCBhbiBza2IuXG4iKTsKKwkJCQkJbmV0aWZfZXJyKHFkZXYsIHByb2JlLCBxZGV2LT5uZGV2LAorCQkJCQkJICAiQ291bGRuJ3QgZ2V0IGFuIHNrYi5cbiIpOwogCQkJCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gY2xlYW5faWR4OwogCQkJCQlyZXR1cm47CiAJCQkJfQpAQCAtMTIyMyw3ICsxMjM0LDggQEAKIAkJCQkJCSAgICAgcnhfcmluZy0+c2JxX2J1Zl9zaXplLAogCQkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIlBDSSBtYXBwaW5nIGZhaWxlZC5cbiIpOworCQkJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkJCSAgIlBDSSBtYXBwaW5nIGZhaWxlZC5cbiIpOwogCQkJCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gY2xlYW5faWR4OwogCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShzYnFfZGVzYy0+cC5za2IpOwogCQkJCQlzYnFfZGVzYy0+cC5za2IgPSBOVUxMOwpAQCAtMTI0Nyw5ICsxMjU5LDkgQEAKIAl9CiAKIAlpZiAoc3RhcnRfaWR4ICE9IGNsZWFuX2lkeCkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkic2JxOiB1cGRhdGluZyBwcm9kIGlkeCA9ICVkLlxuIiwKLQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeCk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJzYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAorCQkJICAgICByeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwogCX0KQEAgLTEyODEsOCArMTI5Myw5IEBACiAJCQkgKiB0aGVuIGl0cyBhbiBPQUwuCiAJCQkgKi8KIAkJCWlmIChpID09IDcpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIFRYX0RPTkUsIERFQlVHLAotCQkJCQkidW5tYXBwaW5nIE9BTCBhcmVhLlxuIik7CisJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHR4X2RvbmUsIEtFUk5fREVCVUcsCisJCQkJCSAgICAgcWRldi0+bmRldiwKKwkJCQkJICAgICAidW5tYXBwaW5nIE9BTCBhcmVhLlxuIik7CiAJCQl9CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCiAJCQkJCSBwY2lfdW5tYXBfYWRkcigmdHhfcmluZ19kZXNjLT5tYXBbaV0sCkBAIC0xMjkxLDggKzEzMDQsOCBAQAogCQkJCQkJICAgICAgIG1hcGxlbiksCiAJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJfSBlbHNlIHsKLQkJCVFQUklOVEsocWRldiwgVFhfRE9ORSwgREVCVUcsICJ1bm1hcHBpbmcgZnJhZyAlZC5cbiIsCi0JCQkJaSk7CisJCQluZXRpZl9wcmludGsocWRldiwgdHhfZG9uZSwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJ1bm1hcHBpbmcgZnJhZyAlZC5cbiIsIGkpOwogCQkJcGNpX3VubWFwX3BhZ2UocWRldi0+cGRldiwKIAkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnR4X3JpbmdfZGVzYy0+bWFwW2ldLAogCQkJCQkJICAgICAgbWFwYWRkciksCkBAIC0xMzE3LDcgKzEzMzAsOCBAQAogCWludCBmcmFnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAKIAlpZiAoZnJhZ19jbnQpIHsKLQkJUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIERFQlVHLCAiZnJhZ19jbnQgPSAlZC5cbiIsIGZyYWdfY250KTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgImZyYWdfY250ID0gJWQuXG4iLCBmcmFnX2NudCk7CiAJfQogCS8qCiAJICogTWFwIHRoZSBza2IgYnVmZmVyIGZpcnN0LgpAQCAtMTMyNiw4ICsxMzQwLDggQEAKIAogCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwogCWlmIChlcnIpIHsKLQkJUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIEVSUiwKLQkJCSJQQ0kgbWFwcGluZyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIGVycik7CisJCW5ldGlmX2VycihxZGV2LCB0eF9xdWV1ZWQsIHFkZXYtPm5kZXYsCisJCQkgICJQQ0kgbWFwcGluZyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIGVycik7CiAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTEzNzMsOSArMTM4Nyw5IEBACiAJCQkJCSAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCQllcnIgPSBwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKTsKIAkJCWlmIChlcnIpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgRVJSLAotCQkJCQkiUENJIG1hcHBpbmcgb3V0Ym91bmQgYWRkcmVzcyBsaXN0IHdpdGggZXJyb3I6ICVkXG4iLAotCQkJCQllcnIpOworCQkJCW5ldGlmX2VycihxZGV2LCB0eF9xdWV1ZWQsIHFkZXYtPm5kZXYsCisJCQkJCSAgIlBDSSBtYXBwaW5nIG91dGJvdW5kIGFkZHJlc3MgbGlzdCB3aXRoIGVycm9yOiAlZFxuIiwKKwkJCQkJICBlcnIpOwogCQkJCWdvdG8gbWFwX2Vycm9yOwogCQkJfQogCkBAIC0xNDAzLDkgKzE0MTcsOSBAQAogCiAJCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwogCQlpZiAoZXJyKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgRVJSLAotCQkJCSJQQ0kgbWFwcGluZyBmcmFncyBmYWlsZWQgd2l0aCBlcnJvcjogJWQuXG4iLAotCQkJCWVycik7CisJCQluZXRpZl9lcnIocWRldiwgdHhfcXVldWVkLCBxZGV2LT5uZGV2LAorCQkJCSAgIlBDSSBtYXBwaW5nIGZyYWdzIGZhaWxlZCB3aXRoIGVycm9yOiAlZC5cbiIsCisJCQkJICBlcnIpOwogCQkJZ290byBtYXBfZXJyb3I7CiAJCX0KIApAQCAtMTQzMyw2ICsxNDQ3LDI2MCBAQAogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIAorLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLworc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfcnhfZ3JvX3BhZ2Uoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nLAorCQkJCQlzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwLAorCQkJCQl1MzIgbGVuZ3RoLAorCQkJCQl1MTYgdmxhbl9pZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYyA9IHFsX2dldF9jdXJyX2xjaHVuayhxZGV2LCByeF9yaW5nKTsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnOworCWludCBucl9mcmFnczsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcnhfcmluZy0+bmFwaTsKKworCW5hcGktPmRldiA9IHFkZXYtPm5kZXY7CisKKwlza2IgPSBuYXBpX2dldF9mcmFncyhuYXBpKTsKKwlpZiAoIXNrYikgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQ291bGRuJ3QgZ2V0IGFuIHNrYiwgZXhpdGluZy5cbiIpOworCQlyeF9yaW5nLT5yeF9kcm9wcGVkKys7CisJCXB1dF9wYWdlKGxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UpOworCQlyZXR1cm47CisJfQorCXByZWZldGNoKGxicV9kZXNjLT5wLnBnX2NodW5rLnZhKTsKKwlyeF9mcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKKwlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJcnhfZnJhZyArPSBucl9mcmFnczsKKwlyeF9mcmFnLT5wYWdlID0gbGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZTsKKwlyeF9mcmFnLT5wYWdlX29mZnNldCA9IGxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldDsKKwlyeF9mcmFnLT5zaXplID0gbGVuZ3RoOworCisJc2tiLT5sZW4gKz0gbGVuZ3RoOworCXNrYi0+ZGF0YV9sZW4gKz0gbGVuZ3RoOworCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOworCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKKworCXJ4X3JpbmctPnJ4X3BhY2tldHMrKzsKKwlyeF9yaW5nLT5yeF9ieXRlcyArPSBsZW5ndGg7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy0+Y3FfaWQpOworCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQl2bGFuX2dyb19mcmFncygmcnhfcmluZy0+bmFwaSwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCWVsc2UKKwkJbmFwaV9ncm9fZnJhZ3MobmFwaSk7Cit9CisKKy8qIFByb2Nlc3MgYW4gaW5ib3VuZCBjb21wbGV0aW9uIGZyb20gYW4gcnggcmluZy4gKi8KK3N0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3J4X3BhZ2Uoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nLAorCQkJCQlzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwLAorCQkJCQl1MzIgbGVuZ3RoLAorCQkJCQl1MTYgdmxhbl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJdm9pZCAqYWRkcjsKKwlzdHJ1Y3QgYnFfZGVzYyAqbGJxX2Rlc2MgPSBxbF9nZXRfY3Vycl9sY2h1bmsocWRldiwgcnhfcmluZyk7CisJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJnJ4X3JpbmctPm5hcGk7CisKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIGxlbmd0aCk7CisJaWYgKCFza2IpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkbid0IGdldCBhbiBza2IsIG5lZWQgdG8gdW53aW5kIS5cbiIpOworCQlyeF9yaW5nLT5yeF9kcm9wcGVkKys7CisJCXB1dF9wYWdlKGxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UpOworCQlyZXR1cm47CisJfQorCisJYWRkciA9IGxicV9kZXNjLT5wLnBnX2NodW5rLnZhOworCXByZWZldGNoKGFkZHIpOworCisKKwkvKiBGcmFtZSBlcnJvciwgc28gZHJvcCB0aGUgcGFja2V0LiAqLworCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRVJSX01BU0spIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlJlY2VpdmUgZXJyb3IsIGZsYWdzMiA9IDB4JXhcbiIsIGliX21hY19yc3AtPmZsYWdzMik7CisJCXJ4X3JpbmctPnJ4X2Vycm9ycysrOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogVGhlIG1heCBmcmFtZXNpemUgZmlsdGVyIG9uIHRoaXMgY2hpcCBpcyBzZXQgaGlnaGVyIHRoYW4KKwkgKiBNVFUgc2luY2UgRkNvRSB1c2VzIDJrIGZyYW1lcy4KKwkgKi8KKwlpZiAoc2tiLT5sZW4gPiBuZGV2LT5tdHUgKyBFVEhfSExFTikgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiU2VnbWVudCB0b28gc21hbGwsIGRyb3BwaW5nLlxuIik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1jcHkoc2tiX3B1dChza2IsIEVUSF9ITEVOKSwgYWRkciwgRVRIX0hMRU4pOworCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIiVkIGJ5dGVzIG9mIGhlYWRlcnMgYW5kIGRhdGEgaW4gbGFyZ2UuIENoYWluIHBhZ2UgdG8gbmV3IHNrYiBhbmQgcHVsbCB0YWlsLlxuIiwKKwkJICAgICBsZW5ndGgpOworCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIDAsIGxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UsCisJCQkJbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0K0VUSF9ITEVOLAorCQkJCWxlbmd0aC1FVEhfSExFTik7CisJc2tiLT5sZW4gKz0gbGVuZ3RoLUVUSF9ITEVOOworCXNrYi0+ZGF0YV9sZW4gKz0gbGVuZ3RoLUVUSF9ITEVOOworCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoLUVUSF9ITEVOOworCisJcnhfcmluZy0+cnhfcGFja2V0cysrOworCXJ4X3JpbmctPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCWlmIChxZGV2LT5yeF9jc3VtICYmCisJCSEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0NTVU1fRVJSX01BU0spKSB7CisJCS8qIFRDUCBmcmFtZS4gKi8KKwkJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9UKSB7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIlRDUCBjaGVja3N1bSBkb25lIVxuIik7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQl9IGVsc2UgaWYgKChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVSkgJiYKKwkJCQkoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX1Y0KSkgeworCQkJLyogVW5mcmFnbWVudGVkIGlwdjQgVURQIGZyYW1lLiAqLworCQkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopIHNrYi0+ZGF0YTsKKwkJCWlmICghKGlwaC0+ZnJhZ19vZmYgJgorCQkJCWNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLAorCQkJCQkgICAgIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgIlRDUCBjaGVja3N1bSBkb25lIVxuIik7CisJCQl9CisJCX0KKwl9CisKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy0+Y3FfaWQpOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCQlpZiAocWRldi0+dmxncnAgJiYgKHZsYW5faWQgIT0gMHhmZmZmKSkKKwkJCXZsYW5fZ3JvX3JlY2VpdmUobmFwaSwgcWRldi0+dmxncnAsIHZsYW5faWQsIHNrYik7CisJCWVsc2UKKwkJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKKwl9IGVsc2UgeworCQlpZiAocWRldi0+dmxncnAgJiYgKHZsYW5faWQgIT0gMHhmZmZmKSkKKwkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLCB2bGFuX2lkKTsKKwkJZWxzZQorCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwl9CisJcmV0dXJuOworZXJyX291dDoKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXB1dF9wYWdlKGxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UpOworfQorCisvKiBQcm9jZXNzIGFuIGluYm91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCitzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY19yeF9za2Ioc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nLAorCQkJCQlzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwLAorCQkJCQl1MzIgbGVuZ3RoLAorCQkJCQl1MTYgdmxhbl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOworCXN0cnVjdCBicV9kZXNjICpzYnFfZGVzYyA9IHFsX2dldF9jdXJyX3NidWYocnhfcmluZyk7CisKKwlza2IgPSBzYnFfZGVzYy0+cC5za2I7CisJLyogQWxsb2NhdGUgbmV3X3NrYiBhbmQgY29weSAqLworCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHFkZXYtPm5kZXYsIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJaWYgKG5ld19za2IgPT0gTlVMTCkgeworCQluZXRpZl9lcnIocWRldiwgcHJvYmUsIHFkZXYtPm5kZXYsCisJCQkgICJObyBza2IgYXZhaWxhYmxlLCBkcm9wIHRoZSBwYWNrZXQuXG4iKTsKKwkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CisJbWVtY3B5KHNrYl9wdXQobmV3X3NrYiwgbGVuZ3RoKSwgc2tiLT5kYXRhLCBsZW5ndGgpOworCXNrYiA9IG5ld19za2I7CisKKwkvKiBGcmFtZSBlcnJvciwgc28gZHJvcCB0aGUgcGFja2V0LiAqLworCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRVJSX01BU0spIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlJlY2VpdmUgZXJyb3IsIGZsYWdzMiA9IDB4JXhcbiIsIGliX21hY19yc3AtPmZsYWdzMik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJ4X3JpbmctPnJ4X2Vycm9ycysrOworCQlyZXR1cm47CisJfQorCisJLyogbG9vcGJhY2sgc2VsZiB0ZXN0IGZvciBldGh0b29sICovCisJaWYgKHRlc3RfYml0KFFMX1NFTEZURVNULCAmcWRldi0+ZmxhZ3MpKSB7CisJCXFsX2NoZWNrX2xiX2ZyYW1lKHFkZXYsIHNrYik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGUgbWF4IGZyYW1lc2l6ZSBmaWx0ZXIgb24gdGhpcyBjaGlwIGlzIHNldCBoaWdoZXIgdGhhbgorCSAqIE1UVSBzaW5jZSBGQ29FIHVzZXMgMmsgZnJhbWVzLgorCSAqLworCWlmIChza2ItPmxlbiA+IG5kZXYtPm10dSArIEVUSF9ITEVOKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuOworCX0KKworCXByZWZldGNoKHNrYi0+ZGF0YSk7CisJc2tiLT5kZXYgPSBuZGV2OworCWlmIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSB7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICIlcyBNdWx0aWNhc3QuXG4iLAorCQkJICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCSAgICAgSUJfTUFDX0lPQ0JfUlNQX01fSEFTSCA/ICJIYXNoIiA6CisJCQkgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQorCQkJICAgICBJQl9NQUNfSU9DQl9SU1BfTV9SRUcgPyAiUmVnaXN0ZXJlZCIgOgorCQkJICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCSAgICAgSUJfTUFDX0lPQ0JfUlNQX01fUFJPTSA/ICJQcm9taXNjdW91cyIgOiAiIik7CisJfQorCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfUCkKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIlByb21pc2N1b3VzIFBhY2tldC5cbiIpOworCisJcnhfcmluZy0+cnhfcGFja2V0cysrOworCXJ4X3JpbmctPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCS8qIElmIHJ4IGNoZWNrc3VtIGlzIG9uLCBhbmQgdGhlcmUgYXJlIG5vCisJICogY3N1bSBvciBmcmFtZSBlcnJvcnMuCisJICovCisJaWYgKHFkZXYtPnJ4X2NzdW0gJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKKwkJLyogVENQIGZyYW1lLiAqLworCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0gZWxzZSBpZiAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgorCQkJCShpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfVjQpKSB7CisJCQkvKiBVbmZyYWdtZW50ZWQgaXB2NCBVRFAgZnJhbWUuICovCisJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiLT5kYXRhOworCQkJaWYgKCEoaXBoLT5mcmFnX29mZiAmCisJCQkJY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsCisJCQkJCSAgICAgcWRldi0+bmRldiwKKwkJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcnhfcmluZy0+bmFwaSwgcWRldi0+dmxncnAsCisJCQkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0KK30KKwogc3RhdGljIHZvaWQgcWxfcmVhbGlnbl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIHsKIAl2b2lkICp0ZW1wX2FkZHIgPSBza2ItPmRhdGE7CkBAIC0xNDY3LDcgKzE3MzUsOCBAQAogCSAqLwogCWlmIChpYl9tYWNfcnNwLT5mbGFnczQgJiBJQl9NQUNfSU9DQl9SU1BfSFYgJiYKIAkgICAgaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hTKSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIkhlYWRlciBvZiAlZCBieXRlcyBpbiBzbWFsbCBidWZmZXIuXG4iLCBoZHJfbGVuKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIkhlYWRlciBvZiAlZCBieXRlcyBpbiBzbWFsbCBidWZmZXIuXG4iLCBoZHJfbGVuKTsKIAkJLyoKIAkJICogSGVhZGVycyBmaXQgbmljZWx5IGludG8gYSBzbWFsbCBidWZmZXIuCiAJCSAqLwpAQCAtMTQ4NiwxNSArMTc1NSwxNiBAQAogCSAqIEhhbmRsZSB0aGUgZGF0YSBidWZmZXIocykuCiAJICovCiAJaWYgKHVubGlrZWx5KCFsZW5ndGgpKSB7CS8qIElzIHRoZXJlIGRhdGEgdG9vPyAqLwotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiTm8gRGF0YSBidWZmZXIgaW4gdGhpcyBwYWNrZXQuXG4iKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIk5vIERhdGEgYnVmZmVyIGluIHRoaXMgcGFja2V0LlxuIik7CiAJCXJldHVybiBza2I7CiAJfQogCiAJaWYgKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9EUykgewogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hTKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJIkhlYWRlcnMgaW4gc21hbGwsIGRhdGEgb2YgJWQgYnl0ZXMgaW4gc21hbGwsIGNvbWJpbmUgdGhlbS5cbiIsIGxlbmd0aCk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkhlYWRlcnMgaW4gc21hbGwsIGRhdGEgb2YgJWQgYnl0ZXMgaW4gc21hbGwsIGNvbWJpbmUgdGhlbS5cbiIsCisJCQkJICAgICBsZW5ndGgpOwogCQkJLyoKIAkJCSAqIERhdGEgaXMgbGVzcyB0aGFuIHNtYWxsIGJ1ZmZlciBzaXplIHNvIGl0J3MKIAkJCSAqIHN0dWZmZWQgaW4gYSBzbWFsbCBidWZmZXIuCkBAIC0xNTIwLDggKzE3OTAsOSBAQAogCQkJCQkJCW1hcGxlbiksCiAJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJfSBlbHNlIHsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiJWQgYnl0ZXMgaW4gYSBzaW5nbGUgc21hbGwgYnVmZmVyLlxuIiwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJWQgYnl0ZXMgaW4gYSBzaW5nbGUgc21hbGwgYnVmZmVyLlxuIiwKKwkJCQkgICAgIGxlbmd0aCk7CiAJCQlzYnFfZGVzYyA9IHFsX2dldF9jdXJyX3NidWYocnhfcmluZyk7CiAJCQlza2IgPSBzYnFfZGVzYy0+cC5za2I7CiAJCQlxbF9yZWFsaWduX3NrYihza2IsIGxlbmd0aCk7CkBAIC0xNTM2LDE4ICsxODA3LDE4IEBACiAJCX0KIAl9IGVsc2UgaWYgKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9ETCkgewogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hTKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJIkhlYWRlciBpbiBzbWFsbCwgJWQgYnl0ZXMgaW4gbGFyZ2UuIENoYWluIGxhcmdlIHRvIHNtYWxsIVxuIiwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSGVhZGVyIGluIHNtYWxsLCAlZCBieXRlcyBpbiBsYXJnZS4gQ2hhaW4gbGFyZ2UgdG8gc21hbGwhXG4iLAorCQkJCSAgICAgbGVuZ3RoKTsKIAkJCS8qCiAJCQkgKiBUaGUgZGF0YSBpcyBpbiBhIHNpbmdsZSBsYXJnZSBidWZmZXIuICBXZQogCQkJICogY2hhaW4gaXQgdG8gdGhlIGhlYWRlciBidWZmZXIncyBza2IgYW5kIGxldAogCQkJICogaXQgcmlwLgogCQkJICovCiAJCQlsYnFfZGVzYyA9IHFsX2dldF9jdXJyX2xjaHVuayhxZGV2LCByeF9yaW5nKTsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiQ2hhaW5pbmcgcGFnZSBhdCBvZmZzZXQgPSAlZCwiCi0JCQkJImZvciAlZCBieXRlcyAgdG8gc2tiLlxuIiwKLQkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5vZmZzZXQsIGxlbmd0aCk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkNoYWluaW5nIHBhZ2UgYXQgb2Zmc2V0ID0gJWQsIGZvciAlZCBieXRlcyAgdG8gc2tiLlxuIiwKKwkJCQkgICAgIGxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldCwgbGVuZ3RoKTsKIAkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIDAsIGxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UsCiAJCQkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5vZmZzZXQsCiAJCQkJCQlsZW5ndGgpOwpAQCAtMTU2Myw4ICsxODM0LDggQEAKIAkJCWxicV9kZXNjID0gcWxfZ2V0X2N1cnJfbGNodW5rKHFkZXYsIHJ4X3JpbmcpOwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCBsZW5ndGgpOwogCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBQUk9CRSwgREVCVUcsCi0JCQkJCSJObyBza2IgYXZhaWxhYmxlLCBkcm9wIHRoZSBwYWNrZXQuXG4iKTsKKwkJCQluZXRpZl9wcmludGsocWRldiwgcHJvYmUsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgIk5vIHNrYiBhdmFpbGFibGUsIGRyb3AgdGhlIHBhY2tldC5cbiIpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQkJcGNpX3VubWFwX3BhZ2UocWRldi0+cGRldiwKQEAgLTE1NzMsOCArMTg0NCw5IEBACiAJCQkJICAgICAgIHBjaV91bm1hcF9sZW4obGJxX2Rlc2MsIG1hcGxlbiksCiAJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJIiVkIGJ5dGVzIG9mIGhlYWRlcnMgYW5kIGRhdGEgaW4gbGFyZ2UuIENoYWluIHBhZ2UgdG8gbmV3IHNrYiBhbmQgcHVsbCB0YWlsLlxuIiwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJWQgYnl0ZXMgb2YgaGVhZGVycyBhbmQgZGF0YSBpbiBsYXJnZS4gQ2hhaW4gcGFnZSB0byBuZXcgc2tiIGFuZCBwdWxsIHRhaWwuXG4iLAorCQkJCSAgICAgbGVuZ3RoKTsKIAkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIDAsCiAJCQkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlLAogCQkJCQkJbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0LApAQCAtMTYxNSw4ICsxODg3LDkgQEAKIAkJCSAqIGEgbG9jYWwgYnVmZmVyIGFuZCB1c2UgaXQgdG8gZmluZCB0aGUKIAkJCSAqIHBhZ2VzIHRvIGNoYWluLgogCQkJICovCi0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJIiVkIGJ5dGVzIG9mIGhlYWRlcnMgJiBkYXRhIGluIGNoYWluIG9mIGxhcmdlLlxuIiwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJWQgYnl0ZXMgb2YgaGVhZGVycyAmIGRhdGEgaW4gY2hhaW4gb2YgbGFyZ2UuXG4iLAorCQkJCSAgICAgbGVuZ3RoKTsKIAkJCXNrYiA9IHNicV9kZXNjLT5wLnNrYjsKIAkJCXNicV9kZXNjLT5wLnNrYiA9IE5VTEw7CiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CkBAIC0xNjI2LDkgKzE4OTksOSBAQAogCQkJc2l6ZSA9IChsZW5ndGggPCByeF9yaW5nLT5sYnFfYnVmX3NpemUpID8gbGVuZ3RoIDoKIAkJCQlyeF9yaW5nLT5sYnFfYnVmX3NpemU7CiAKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiQWRkaW5nIHBhZ2UgJWQgdG8gc2tiIGZvciAlZCBieXRlcy5cbiIsCi0JCQkJaSwgc2l6ZSk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkFkZGluZyBwYWdlICVkIHRvIHNrYiBmb3IgJWQgYnl0ZXMuXG4iLAorCQkJCSAgICAgaSwgc2l6ZSk7CiAJCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLAogCQkJCQkJbGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSwKIAkJCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldCwKQEAgLTE2NDYsMjkgKzE5MTksMjggQEAKIH0KIAogLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLwotc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfcnhfaW50cihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKK3N0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3NwbGl0X3J4X2ludHIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJICAgc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCi0JCQkJICAgc3RydWN0IGliX21hY19pb2NiX3JzcCAqaWJfbWFjX3JzcCkKKwkJCQkgICBzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwLAorCQkJCSAgIHUxNiB2bGFuX2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQl1MTYgdmxhbl9pZCA9IChsZTE2X3RvX2NwdShpYl9tYWNfcnNwLT52bGFuX2lkKSAmCi0JCQlJQl9NQUNfSU9DQl9SU1BfVkxBTl9NQVNLKQogCiAJUUxfRFVNUF9JQl9NQUNfUlNQKGliX21hY19yc3ApOwogCiAJc2tiID0gcWxfYnVpbGRfcnhfc2tiKHFkZXYsIHJ4X3JpbmcsIGliX21hY19yc3ApOwogCWlmICh1bmxpa2VseSghc2tiKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiTm8gc2tiIGF2YWlsYWJsZSwgZHJvcCBwYWNrZXQuXG4iKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIk5vIHNrYiBhdmFpbGFibGUsIGRyb3AgcGFja2V0LlxuIik7CiAJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEZyYW1lIGVycm9yLCBzbyBkcm9wIHRoZSBwYWNrZXQuICovCiAJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwKLQkJCQkJaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlJlY2VpdmUgZXJyb3IsIGZsYWdzMiA9IDB4JXhcbiIsIGliX21hY19yc3AtPmZsYWdzMik7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJ4X3JpbmctPnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CkBAIC0xNjkzLDE3ICsxOTY1LDE4IEBACiAJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAlza2ItPmRldiA9IG5kZXY7CiAJaWYgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spIHsKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiJXMlcyVzIE11bHRpY2FzdC5cbiIsCi0JCQkoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KLQkJCUlCX01BQ19JT0NCX1JTUF9NX0hBU0ggPyAiSGFzaCIgOiAiIiwKLQkJCShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQotCQkJSUJfTUFDX0lPQ0JfUlNQX01fUkVHID8gIlJlZ2lzdGVyZWQiIDogIiIsCi0JCQkoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KLQkJCUlCX01BQ19JT0NCX1JTUF9NX1BST00gPyAiUHJvbWlzY3VvdXMiIDogIiIpOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LCAiJXMgTXVsdGljYXN0LlxuIiwKKwkJCSAgICAgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spID09CisJCQkgICAgIElCX01BQ19JT0NCX1JTUF9NX0hBU0ggPyAiSGFzaCIgOgorCQkJICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCSAgICAgSUJfTUFDX0lPQ0JfUlNQX01fUkVHID8gIlJlZ2lzdGVyZWQiIDoKKwkJCSAgICAgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spID09CisJCQkgICAgIElCX01BQ19JT0NCX1JTUF9NX1BST00gPyAiUHJvbWlzY3VvdXMiIDogIiIpOwogCQlyeF9yaW5nLT5yeF9tdWx0aWNhc3QrKzsKIAl9CiAJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9QKSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIlByb21pc2N1b3VzIFBhY2tldC5cbiIpOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiUHJvbWlzY3VvdXMgUGFja2V0LlxuIik7CiAJfQogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CkBAIC0xNzE2LDggKzE5ODksOCBAQAogCQkhKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19DU1VNX0VSUl9NQVNLKSkgewogCQkvKiBUQ1AgZnJhbWUuICovCiAJCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVCkgewotCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCQkiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCX0gZWxzZSBpZiAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgogCQkJCShpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfVjQpKSB7CkBAIC0xNzI2LDggKzE5OTksOCBAQAogCQkJaWYgKCEoaXBoLT5mcmFnX29mZiAmCiAJCQkJY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkJCSJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgIlRDUCBjaGVja3N1bSBkb25lIVxuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNzUzLDYgKzIwMjYsNTYgQEAKIAl9CiB9CiAKKy8qIFByb2Nlc3MgYW4gaW5ib3VuZCBjb21wbGV0aW9uIGZyb20gYW4gcnggcmluZy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHFsX3Byb2Nlc3NfbWFjX3J4X2ludHIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nLAorCQkJCQlzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwKQoreworCXUzMiBsZW5ndGggPSBsZTMyX3RvX2NwdShpYl9tYWNfcnNwLT5kYXRhX2xlbik7CisJdTE2IHZsYW5faWQgPSAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1YpID8KKwkJCSgobGUxNl90b19jcHUoaWJfbWFjX3JzcC0+dmxhbl9pZCkgJgorCQkJSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSykpIDogMHhmZmZmOworCisJUUxfRFVNUF9JQl9NQUNfUlNQKGliX21hY19yc3ApOworCisJaWYgKGliX21hY19yc3AtPmZsYWdzNCAmIElCX01BQ19JT0NCX1JTUF9IVikgeworCQkvKiBUaGUgZGF0YSBhbmQgaGVhZGVycyBhcmUgc3BsaXQgaW50bworCQkgKiBzZXBhcmF0ZSBidWZmZXJzLgorCQkgKi8KKwkJcWxfcHJvY2Vzc19tYWNfc3BsaXRfcnhfaW50cihxZGV2LCByeF9yaW5nLCBpYl9tYWNfcnNwLAorCQkJCQkJdmxhbl9pZCk7CisJfSBlbHNlIGlmIChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfRFMpIHsKKwkJLyogVGhlIGRhdGEgZml0IGluIGEgc2luZ2xlIHNtYWxsIGJ1ZmZlci4KKwkJICogQWxsb2NhdGUgYSBuZXcgc2tiLCBjb3B5IHRoZSBkYXRhIGFuZAorCQkgKiByZXR1cm4gdGhlIGJ1ZmZlciB0byB0aGUgZnJlZSBwb29sLgorCQkgKi8KKwkJcWxfcHJvY2Vzc19tYWNfcnhfc2tiKHFkZXYsIHJ4X3JpbmcsIGliX21hY19yc3AsCisJCQkJCQlsZW5ndGgsIHZsYW5faWQpOworCX0gZWxzZSBpZiAoKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9ETCkgJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykgJiYKKwkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9UKSkgeworCQkvKiBUQ1AgcGFja2V0IGluIGEgcGFnZSBjaHVuayB0aGF0J3MgYmVlbiBjaGVja3N1bW1lZC4KKwkJICogVGFjayBpdCBvbiB0byBvdXIgR1JPIHNrYiBhbmQgbGV0IGl0IGdvLgorCQkgKi8KKwkJcWxfcHJvY2Vzc19tYWNfcnhfZ3JvX3BhZ2UocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCwKKwkJCQkJCWxlbmd0aCwgdmxhbl9pZCk7CisJfSBlbHNlIGlmIChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfREwpIHsKKwkJLyogTm9uLVRDUCBwYWNrZXQgaW4gYSBwYWdlIGNodW5rLiBBbGxvY2F0ZSBhbgorCQkgKiBza2IsIHRhY2sgaXQgb24gZnJhZ3MsIGFuZCBzZW5kIGl0IHVwLgorCQkgKi8KKwkJcWxfcHJvY2Vzc19tYWNfcnhfcGFnZShxZGV2LCByeF9yaW5nLCBpYl9tYWNfcnNwLAorCQkJCQkJbGVuZ3RoLCB2bGFuX2lkKTsKKwl9IGVsc2UgeworCQkvKiBOb24tVENQL1VEUCBsYXJnZSBmcmFtZXMgdGhhdCBzcGFuIG11bHRpcGxlIGJ1ZmZlcnMKKwkJICogY2FuIGJlIHByb2Nlc3NlZCBjb3JycmVjdGx5IGJ5IHRoZSBzcGxpdCBmcmFtZSBsb2dpYy4KKwkJICovCisJCXFsX3Byb2Nlc3NfbWFjX3NwbGl0X3J4X2ludHIocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCwKKwkJCQkJCXZsYW5faWQpOworCX0KKworCXJldHVybiAodW5zaWduZWQgbG9uZylsZW5ndGg7Cit9CisKIC8qIFByb2Nlc3MgYW4gb3V0Ym91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCiBzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY190eF9pbnRyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCSAgIHN0cnVjdCBvYl9tYWNfaW9jYl9yc3AgKm1hY19yc3ApCkBAIC0xNzc0LDIwICsyMDk3LDIwIEBACiAJCQkJCU9CX01BQ19JT0NCX1JTUF9MIHwKIAkJCQkJT0JfTUFDX0lPQ0JfUlNQX1AgfCBPQl9NQUNfSU9DQl9SU1BfQikpKSB7CiAJCWlmIChtYWNfcnNwLT5mbGFnczEgJiBPQl9NQUNfSU9DQl9SU1BfRSkgewotCQkJUVBSSU5USyhxZGV2LCBUWF9ET05FLCBXQVJOSU5HLAotCQkJCSJUb3RhbCBkZXNjcmlwdG9yIGxlbmd0aCBkaWQgbm90IG1hdGNoIHRyYW5zZmVyIGxlbmd0aC5cbiIpOworCQkJbmV0aWZfd2FybihxZGV2LCB0eF9kb25lLCBxZGV2LT5uZGV2LAorCQkJCSAgICJUb3RhbCBkZXNjcmlwdG9yIGxlbmd0aCBkaWQgbm90IG1hdGNoIHRyYW5zZmVyIGxlbmd0aC5cbiIpOwogCQl9CiAJCWlmIChtYWNfcnNwLT5mbGFnczEgJiBPQl9NQUNfSU9DQl9SU1BfUykgewotCQkJUVBSSU5USyhxZGV2LCBUWF9ET05FLCBXQVJOSU5HLAotCQkJCSJGcmFtZSB0b28gc2hvcnQgdG8gYmUgbGVnYWwsIG5vdCBzZW50LlxuIik7CisJCQluZXRpZl93YXJuKHFkZXYsIHR4X2RvbmUsIHFkZXYtPm5kZXYsCisJCQkJICAgIkZyYW1lIHRvbyBzaG9ydCB0byBiZSB2YWxpZCwgbm90IHNlbnQuXG4iKTsKIAkJfQogCQlpZiAobWFjX3JzcC0+ZmxhZ3MxICYgT0JfTUFDX0lPQ0JfUlNQX0wpIHsKLQkJCVFQUklOVEsocWRldiwgVFhfRE9ORSwgV0FSTklORywKLQkJCQkiRnJhbWUgdG9vIGxvbmcsIGJ1dCBzZW50IGFueXdheS5cbiIpOworCQkJbmV0aWZfd2FybihxZGV2LCB0eF9kb25lLCBxZGV2LT5uZGV2LAorCQkJCSAgICJGcmFtZSB0b28gbG9uZywgYnV0IHNlbnQgYW55d2F5LlxuIik7CiAJCX0KIAkJaWYgKG1hY19yc3AtPmZsYWdzMSAmIE9CX01BQ19JT0NCX1JTUF9CKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFRYX0RPTkUsIFdBUk5JTkcsCi0JCQkJIlBDSSBiYWNrcGxhbmUgZXJyb3IuIEZyYW1lIG5vdCBzZW50LlxuIik7CisJCQluZXRpZl93YXJuKHFkZXYsIHR4X2RvbmUsIHFkZXYtPm5kZXYsCisJCQkJICAgIlBDSSBiYWNrcGxhbmUgZXJyb3IuIEZyYW1lIG5vdCBzZW50LlxuIik7CiAJCX0KIAl9CiAJYXRvbWljX2luYygmdHhfcmluZy0+dHhfY291bnQpOwpAQCAtMTgxNywzMyArMjE0MCwzNSBAQAogewogCXN3aXRjaCAoaWJfYWVfcnNwLT5ldmVudCkgewogCWNhc2UgTUdNVF9FUlJfRVZFTlQ6Ci0JCVFQUklOVEsocWRldiwgUlhfRVJSLCBFUlIsCi0JCQkiTWFuYWdlbWVudCBQcm9jZXNzb3IgRmF0YWwgRXJyb3IuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIHJ4X2VyciwgcWRldi0+bmRldiwKKwkJCSAgIk1hbmFnZW1lbnQgUHJvY2Vzc29yIEZhdGFsIEVycm9yLlxuIik7CiAJCXFsX3F1ZXVlX2Z3X2Vycm9yKHFkZXYpOwogCQlyZXR1cm47CiAKIAljYXNlIENBTV9MT09LVVBfRVJSX0VWRU5UOgotCQlRUFJJTlRLKHFkZXYsIExJTkssIEVSUiwKLQkJCSJNdWx0aXBsZSBDQU0gaGl0cyBsb29rdXAgb2NjdXJyZWQuXG4iKTsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlRoaXMgZXZlbnQgc2hvdWxkbid0IG9jY3VyLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LAorCQkJICAiTXVsdGlwbGUgQ0FNIGhpdHMgbG9va3VwIG9jY3VycmVkLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJUaGlzIGV2ZW50IHNob3VsZG4ndCBvY2N1ci5cbiIpOwogCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOwogCQlyZXR1cm47CiAKIAljYXNlIFNPRlRfRUNDX0VSUk9SX0VWRU5UOgotCQlRUFJJTlRLKHFkZXYsIFJYX0VSUiwgRVJSLCAiU29mdCBFQ0MgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIHJ4X2VyciwgcWRldi0+bmRldiwKKwkJCSAgIlNvZnQgRUNDIGVycm9yIGRldGVjdGVkLlxuIik7CiAJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBQQ0lfRVJSX0FOT05fQlVGX1JEOgotCQlRUFJJTlRLKHFkZXYsIFJYX0VSUiwgRVJSLAotCQkJIlBDSSBlcnJvciBvY2N1cnJlZCB3aGVuIHJlYWRpbmcgYW5vbnltb3VzIGJ1ZmZlcnMgZnJvbSByeF9yaW5nICVkLlxuIiwKLQkJCWliX2FlX3JzcC0+cV9pZCk7CisJCW5ldGlmX2VycihxZGV2LCByeF9lcnIsIHFkZXYtPm5kZXYsCisJCQkgICJQQ0kgZXJyb3Igb2NjdXJyZWQgd2hlbiByZWFkaW5nIGFub255bW91cyBidWZmZXJzIGZyb20gcnhfcmluZyAlZC5cbiIsCisJCQkgIGliX2FlX3JzcC0+cV9pZCk7CiAJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlVuZXhwZWN0ZWQgZXZlbnQgJWQuXG4iLAotCQkJaWJfYWVfcnNwLT5ldmVudCk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJVbmV4cGVjdGVkIGV2ZW50ICVkLlxuIiwKKwkJCSAgaWJfYWVfcnNwLT5ldmVudCk7CiAJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CiAJCWJyZWFrOwogCX0KQEAgLTE4NjAsOSArMjE4NSw5IEBACiAJLyogV2hpbGUgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUuICovCiAJd2hpbGUgKHByb2QgIT0gcnhfcmluZy0+Y25zbXJfaWR4KSB7CiAKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJImNxX2lkID0gJWQsIHByb2QgPSAlZCwgY25zbXIgPSAlZC5cbi4iLCByeF9yaW5nLT5jcV9pZCwKLQkJCXByb2QsIHJ4X3JpbmctPmNuc21yX2lkeCk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJjcV9pZCA9ICVkLCBwcm9kID0gJWQsIGNuc21yID0gJWQuXG4uIiwKKwkJCSAgICAgcnhfcmluZy0+Y3FfaWQsIHByb2QsIHJ4X3JpbmctPmNuc21yX2lkeCk7CiAKIAkJbmV0X3JzcCA9IChzdHJ1Y3Qgb2JfbWFjX2lvY2JfcnNwICopcnhfcmluZy0+Y3Vycl9lbnRyeTsKIAkJcm1iKCk7CkBAIC0xODczLDkgKzIxOTgsOSBAQAogCQkJcWxfcHJvY2Vzc19tYWNfdHhfaW50cihxZGV2LCBuZXRfcnNwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCSJIaXQgZGVmYXVsdCBjYXNlLCBub3QgaGFuZGxlZCEgZHJvcHBpbmcgdGhlIHBhY2tldCwgb3Bjb2RlID0gJXguXG4iLAotCQkJCW5ldF9yc3AtPm9wY29kZSk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkhpdCBkZWZhdWx0IGNhc2UsIG5vdCBoYW5kbGVkISBkcm9wcGluZyB0aGUgcGFja2V0LCBvcGNvZGUgPSAleC5cbiIsCisJCQkJICAgICBuZXRfcnNwLT5vcGNvZGUpOwogCQl9CiAJCWNvdW50Kys7CiAJCXFsX3VwZGF0ZV9jcShyeF9yaW5nKTsKQEAgLTE5MDcsOSArMjIzMiw5IEBACiAJLyogV2hpbGUgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUuICovCiAJd2hpbGUgKHByb2QgIT0gcnhfcmluZy0+Y25zbXJfaWR4KSB7CiAKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJImNxX2lkID0gJWQsIHByb2QgPSAlZCwgY25zbXIgPSAlZC5cbi4iLCByeF9yaW5nLT5jcV9pZCwKLQkJCXByb2QsIHJ4X3JpbmctPmNuc21yX2lkeCk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJjcV9pZCA9ICVkLCBwcm9kID0gJWQsIGNuc21yID0gJWQuXG4uIiwKKwkJCSAgICAgcnhfcmluZy0+Y3FfaWQsIHByb2QsIHJ4X3JpbmctPmNuc21yX2lkeCk7CiAKIAkJbmV0X3JzcCA9IHJ4X3JpbmctPmN1cnJfZW50cnk7CiAJCXJtYigpOwpAQCAtMTkyNSwxMSArMjI1MCwxMCBAQAogCQkJCQkJbmV0X3JzcCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXsKLQkJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJCSJIaXQgZGVmYXVsdCBjYXNlLCBub3QgaGFuZGxlZCEgZHJvcHBpbmcgdGhlIHBhY2tldCwgb3Bjb2RlID0gJXguXG4iLAotCQkJCQluZXRfcnNwLT5vcGNvZGUpOwotCQkJfQorCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJIaXQgZGVmYXVsdCBjYXNlLCBub3QgaGFuZGxlZCEgZHJvcHBpbmcgdGhlIHBhY2tldCwgb3Bjb2RlID0gJXguXG4iLAorCQkJCSAgICAgbmV0X3JzcC0+b3Bjb2RlKTsKKwkJCWJyZWFrOwogCQl9CiAJCWNvdW50Kys7CiAJCXFsX3VwZGF0ZV9jcShyeF9yaW5nKTsKQEAgLTE5NTAsOCArMjI3NCw4IEBACiAJaW50IGksIHdvcmtfZG9uZSA9IDA7CiAJc3RydWN0IGludHJfY29udGV4dCAqY3R4ID0gJnFkZXYtPmludHJfY29udGV4dFtyeF9yaW5nLT5jcV9pZF07CiAKLQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsICJFbnRlciwgTkFQSSBQT0xMIGNxX2lkID0gJWQuXG4iLAotCQlyeF9yaW5nLT5jcV9pZCk7CisJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAiRW50ZXIsIE5BUEkgUE9MTCBjcV9pZCA9ICVkLlxuIiwgcnhfcmluZy0+Y3FfaWQpOwogCiAJLyogU2VydmljZSB0aGUgVFggcmluZ3MgZmlyc3QuICBUaGV5IHN0YXJ0CiAJICogcmlnaHQgYWZ0ZXIgdGhlIFJTUyByaW5ncy4gKi8KQEAgLTE5NjMsOSArMjI4Nyw5IEBACiAJCWlmICgoY3R4LT5pcnFfbWFzayAmICgxIDw8IHRyeF9yaW5nLT5jcV9pZCkpICYmCiAJCQkocWxfcmVhZF9zaF9yZWcodHJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZykgIT0KIAkJCQkJdHJ4X3JpbmctPmNuc21yX2lkeCkpIHsKLQkJCVFQUklOVEsocWRldiwgSU5UUiwgREVCVUcsCi0JCQkJIiVzOiBTZXJ2aWNpbmcgVFggY29tcGxldGlvbiByaW5nICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgdHJ4X3JpbmctPmNxX2lkKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpbnRyLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIiVzOiBTZXJ2aWNpbmcgVFggY29tcGxldGlvbiByaW5nICVkLlxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB0cnhfcmluZy0+Y3FfaWQpOwogCQkJcWxfY2xlYW5fb3V0Ym91bmRfcnhfcmluZyh0cnhfcmluZyk7CiAJCX0KIAl9CkBAIC0xOTc1LDkgKzIyOTksOSBAQAogCSAqLwogCWlmIChxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpICE9CiAJCQkJCXJ4X3JpbmctPmNuc21yX2lkeCkgewotCQlRUFJJTlRLKHFkZXYsIElOVFIsIERFQlVHLAotCQkJIiVzOiBTZXJ2aWNpbmcgUlggY29tcGxldGlvbiByaW5nICVkLlxuIiwKLQkJCV9fZnVuY19fLCByeF9yaW5nLT5jcV9pZCk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpbnRyLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiJXM6IFNlcnZpY2luZyBSWCBjb21wbGV0aW9uIHJpbmcgJWQuXG4iLAorCQkJICAgICBfX2Z1bmNfXywgcnhfcmluZy0+Y3FfaWQpOwogCQl3b3JrX2RvbmUgPSBxbF9jbGVhbl9pbmJvdW5kX3J4X3JpbmcocnhfcmluZywgYnVkZ2V0KTsKIAl9CiAKQEAgLTE5OTQsMTIgKzIzMTgsMTMgQEAKIAogCXFkZXYtPnZsZ3JwID0gZ3JwOwogCWlmIChncnApIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlR1cm5pbmcgb24gVkxBTiBpbiBOSUNfUkNWX0NGRy5cbiIpOworCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIlR1cm5pbmcgb24gVkxBTiBpbiBOSUNfUkNWX0NGRy5cbiIpOwogCQlxbF93cml0ZTMyKHFkZXYsIE5JQ19SQ1ZfQ0ZHLCBOSUNfUkNWX0NGR19WTEFOX01BU0sgfAogCQkJICAgTklDX1JDVl9DRkdfVkxBTl9NQVRDSF9BTkRfTk9OKTsKIAl9IGVsc2UgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJIlR1cm5pbmcgb2ZmIFZMQU4gaW4gTklDX1JDVl9DRkcuXG4iKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJUdXJuaW5nIG9mZiBWTEFOIGluIE5JQ19SQ1ZfQ0ZHLlxuIik7CiAJCXFsX3dyaXRlMzIocWRldiwgTklDX1JDVl9DRkcsIE5JQ19SQ1ZfQ0ZHX1ZMQU5fTUFTSyk7CiAJfQogfQpAQCAtMjAxNSw3ICsyMzQwLDggQEAKIAkJcmV0dXJuOwogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCiAJICAgIChxZGV2LCAodTggKikgJmVuYWJsZV9iaXQsIE1BQ19BRERSX1RZUEVfVkxBTiwgdmlkKSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IHZsYW4gYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBpbml0IHZsYW4gYWRkcmVzcy5cbiIpOwogCX0KIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIH0KQEAgLTIwMzIsNyArMjM1OCw4IEBACiAKIAlpZiAocWxfc2V0X21hY19hZGRyX3JlZwogCSAgICAocWRldiwgKHU4ICopICZlbmFibGVfYml0LCBNQUNfQUREUl9UWVBFX1ZMQU4sIHZpZCkpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gY2xlYXIgdmxhbiBhZGRyZXNzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIHRvIGNsZWFyIHZsYW4gYWRkcmVzcy5cbiIpOwogCX0KIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIApAQCAtMjA2MSw3ICsyMzg4LDggQEAKIAogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKGF0b21pY19yZWFkKCZxZGV2LT5pbnRyX2NvbnRleHRbMF0uaXJxX2NudCkpIHsKLQkJUVBSSU5USyhxZGV2LCBJTlRSLCBERUJVRywgIlNoYXJlZCBJbnRlcnJ1cHQsIE5vdCBvdXJzIVxuIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpbnRyLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiU2hhcmVkIEludGVycnVwdCwgTm90IG91cnMhXG4iKTsKIAkJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQpAQCAtMjA3NCwxMCArMjQwMiwxMSBAQAogCSAqLwogCWlmICh2YXIgJiBTVFNfRkUpIHsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKLQkJUVBSSU5USyhxZGV2LCBJTlRSLCBFUlIsICJHb3QgZmF0YWwgZXJyb3IsIFNUUyA9ICV4LlxuIiwgdmFyKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGludHIsIHFkZXYtPm5kZXYsCisJCQkgICJHb3QgZmF0YWwgZXJyb3IsIFNUUyA9ICV4LlxuIiwgdmFyKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIEVSUl9TVFMpOwotCQlRUFJJTlRLKHFkZXYsIElOVFIsIEVSUiwKLQkJCSJSZXNldHRpbmcgY2hpcC4gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyID0gMHgleFxuIiwgdmFyKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGludHIsIHFkZXYtPm5kZXYsCisJCQkgICJSZXNldHRpbmcgY2hpcC4gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyID0gMHgleFxuIiwgdmFyKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtMjA5MCw3ICsyNDE5LDggQEAKIAkJICogV2UndmUgZ290IGFuIGFzeW5jIGV2ZW50IG9yIG1haWxib3ggY29tcGxldGlvbi4KIAkJICogSGFuZGxlIGl0IGFuZCBjbGVhciB0aGUgc291cmNlIG9mIHRoZSBpbnRlcnJ1cHQuCiAJCSAqLwotCQlRUFJJTlRLKHFkZXYsIElOVFIsIEVSUiwgIkdvdCBNUEkgcHJvY2Vzc29yIGludGVycnVwdC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaW50ciwgcWRldi0+bmRldiwKKwkJCSAgIkdvdCBNUEkgcHJvY2Vzc29yIGludGVycnVwdC5cbiIpOwogCQlxbF9kaXNhYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIGludHJfY29udGV4dC0+aW50cik7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CiAJCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihzbXBfcHJvY2Vzc29yX2lkKCksCkBAIC0yMTA1LDggKzI0MzUsOCBAQAogCSAqLwogCXZhciA9IHFsX3JlYWQzMihxZGV2LCBJU1IxKTsKIAlpZiAodmFyICYgaW50cl9jb250ZXh0LT5pcnFfbWFzaykgewotCQlRUFJJTlRLKHFkZXYsIElOVFIsIElORk8sCi0JCQkiV2FraW5nIGhhbmRsZXIgZm9yIHJ4X3JpbmdbMF0uXG4iKTsKKwkJbmV0aWZfaW5mbyhxZGV2LCBpbnRyLCBxZGV2LT5uZGV2LAorCQkJICAgIldha2luZyBoYW5kbGVyIGZvciByeF9yaW5nWzBdLlxuIik7CiAJCXFsX2Rpc2FibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgaW50cl9jb250ZXh0LT5pbnRyKTsKIAkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCXdvcmtfZG9uZSsrOwpAQCAtMjIwMyw5ICsyNTMzLDkgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdHhfcmluZy0+dHhfY291bnQpIDwgMikpIHsKLQkJUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIElORk8sCi0JCQkiJXM6IHNodXR0aW5nIGRvd24gdHggcXVldWUgJWQgZHUgdG8gbGFjayBvZiByZXNvdXJjZXMuXG4iLAotCQkJX19mdW5jX18sIHR4X3JpbmdfaWR4KTsKKwkJbmV0aWZfaW5mbyhxZGV2LCB0eF9xdWV1ZWQsIHFkZXYtPm5kZXYsCisJCQkgICAiJXM6IHNodXR0aW5nIGRvd24gdHggcXVldWUgJWQgZHUgdG8gbGFjayBvZiByZXNvdXJjZXMuXG4iLAorCQkJICAgX19mdW5jX18sIHR4X3JpbmdfaWR4KTsKIAkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZGV2LCB0eF9yaW5nLT53cV9pZCk7CiAJCWF0b21pY19pbmMoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpOwogCQl0eF9yaW5nLT50eF9lcnJvcnMrKzsKQEAgLTIyMjYsOCArMjU1Niw4IEBACiAJbWFjX2lvY2JfcHRyLT5mcmFtZV9sZW4gPSBjcHVfdG9fbGUxNigodTE2KSBza2ItPmxlbik7CiAKIAlpZiAocWRldi0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCVFQUklOVEsocWRldiwgVFhfUVVFVUVELCBERUJVRywgIkFkZGluZyBhIHZsYW4gdGFnICVkLlxuIiwKLQkJCXZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIkFkZGluZyBhIHZsYW4gdGFnICVkLlxuIiwgdmxhbl90eF90YWdfZ2V0KHNrYikpOwogCQltYWNfaW9jYl9wdHItPmZsYWdzMyB8PSBPQl9NQUNfSU9DQl9WOwogCQltYWNfaW9jYl9wdHItPnZsYW5fdGNpID0gY3B1X3RvX2xlMTYodmxhbl90eF90YWdfZ2V0KHNrYikpOwogCX0KQEAgLTIyNDEsOCArMjU3MSw4IEBACiAJfQogCWlmIChxbF9tYXBfc2VuZChxZGV2LCBtYWNfaW9jYl9wdHIsIHNrYiwgdHhfcmluZ19kZXNjKSAhPQogCQkJTkVUREVWX1RYX09LKSB7Ci0JCVFQUklOVEsocWRldiwgVFhfUVVFVUVELCBFUlIsCi0JCQkJIkNvdWxkIG5vdCBtYXAgdGhlIHNlZ21lbnRzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCB0eF9xdWV1ZWQsIHFkZXYtPm5kZXYsCisJCQkgICJDb3VsZCBub3QgbWFwIHRoZSBzZWdtZW50cy5cbiIpOwogCQl0eF9yaW5nLT50eF9lcnJvcnMrKzsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTIyNTMsOCArMjU4Myw5IEBACiAJd21iKCk7CiAKIAlxbF93cml0ZV9kYl9yZWcodHhfcmluZy0+cHJvZF9pZHgsIHR4X3JpbmctPnByb2RfaWR4X2RiX3JlZyk7Ci0JUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIERFQlVHLCAidHggcXVldWVkLCBzbG90ICVkLCBsZW4gJWRcbiIsCi0JCXR4X3JpbmctPnByb2RfaWR4LCBza2ItPmxlbik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAidHggcXVldWVkLCBzbG90ICVkLCBsZW4gJWRcbiIsCisJCSAgICAgdHhfcmluZy0+cHJvZF9pZHgsIHNrYi0+bGVuKTsKIAogCWF0b21pY19kZWMoJnR4X3JpbmctPnR4X2NvdW50KTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtMjI4NSw4ICsyNjE2LDggQEAKIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwKIAkJCQkgUEFHRV9TSVpFLCAmcWRldi0+cnhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CiAJaWYgKHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19hcmVhID09IE5VTEwpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiQWxsb2NhdGlvbiBvZiBSWCBzaGFkb3cgc3BhY2UgZmFpbGVkLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiQWxsb2NhdGlvbiBvZiBSWCBzaGFkb3cgc3BhY2UgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocWRldi0+cnhfcmluZ19zaGFkb3dfcmVnX2FyZWEsIDAsIFBBR0VfU0laRSk7CkBAIC0yMjk0LDggKzI2MjUsOCBAQAogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LCBQQUdFX1NJWkUsCiAJCQkJICZxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfZG1hKTsKIAlpZiAocWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2FyZWEgPT0gTlVMTCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJBbGxvY2F0aW9uIG9mIFRYIHNoYWRvdyBzcGFjZSBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJBbGxvY2F0aW9uIG9mIFRYIHNoYWRvdyBzcGFjZSBmYWlsZWQuXG4iKTsKIAkJZ290byBlcnJfd3FwX3NoX2FyZWE7CiAJfQogCW1lbXNldChxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfYXJlYSwgMCwgUEFHRV9TSVpFKTsKQEAgLTIzNDksNyArMjY4MCw3IEBACiAKIAlpZiAoKHR4X3JpbmctPndxX2Jhc2UgPT0gTlVMTCkgfHwKIAkgICAgdHhfcmluZy0+d3FfYmFzZV9kbWEgJiBXUV9BRERSX0FMSUdOKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAidHhfcmluZyBhbGxvYyBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJ0eF9yaW5nIGFsbG9jIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdHhfcmluZy0+cSA9CkBAIC0yNDAwLDcgKzI3MzEsOCBAQAogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5zYnFfbGVuOyBpKyspIHsKIAkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2ldOwogCQlpZiAoc2JxX2Rlc2MgPT0gTlVMTCkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJzYnFfZGVzYyAlZCBpcyBOVUxMLlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJzYnFfZGVzYyAlZCBpcyBOVUxMLlxuIiwgaSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKHNicV9kZXNjLT5wLnNrYikgewpAQCAtMjUyNyw3ICsyODU5LDcgQEAKIAkJCQkgJnJ4X3JpbmctPmNxX2Jhc2VfZG1hKTsKIAogCWlmIChyeF9yaW5nLT5jcV9iYXNlID09IE5VTEwpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJyeF9yaW5nIGFsbG9jIGZhaWxlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgInJ4X3JpbmcgYWxsb2MgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjU0MCw4ICsyODcyLDggQEAKIAkJCQkJICZyeF9yaW5nLT5zYnFfYmFzZV9kbWEpOwogCiAJCWlmIChyeF9yaW5nLT5zYnFfYmFzZSA9PSBOVUxMKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiU21hbGwgYnVmZmVyIHF1ZXVlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJTbWFsbCBidWZmZXIgcXVldWUgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCkBAIC0yNTUyLDggKzI4ODQsOCBAQAogCQkgICAga21hbGxvYyhyeF9yaW5nLT5zYnFfbGVuICogc2l6ZW9mKHN0cnVjdCBicV9kZXNjKSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ4X3JpbmctPnNicSA9PSBOVUxMKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiU21hbGwgYnVmZmVyIHF1ZXVlIGNvbnRyb2wgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIlNtYWxsIGJ1ZmZlciBxdWV1ZSBjb250cm9sIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CiAJCQlnb3RvIGVycl9tZW07CiAJCX0KIApAQCAtMjU2OSw4ICsyOTAxLDggQEAKIAkJCQkJICZyeF9yaW5nLT5sYnFfYmFzZV9kbWEpOwogCiAJCWlmIChyeF9yaW5nLT5sYnFfYmFzZSA9PSBOVUxMKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiTGFyZ2UgYnVmZmVyIHF1ZXVlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJMYXJnZSBidWZmZXIgcXVldWUgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCQkvKgpAQCAtMjU4MCw4ICsyOTEyLDggQEAKIAkJICAgIGttYWxsb2MocnhfcmluZy0+bGJxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYyksCiAJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCWlmIChyeF9yaW5nLT5sYnEgPT0gTlVMTCkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkxhcmdlIGJ1ZmZlciBxdWV1ZSBjb250cm9sIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJMYXJnZSBidWZmZXIgcXVldWUgY29udHJvbCBibG9jayBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKQEAgLTI2MTAsMTAgKzI5NDIsMTAgQEAKIAkJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPndxX2xlbjsgaSsrKSB7CiAJCQl0eF9yaW5nX2Rlc2MgPSAmdHhfcmluZy0+cVtpXTsKIAkJCWlmICh0eF9yaW5nX2Rlc2MgJiYgdHhfcmluZ19kZXNjLT5za2IpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAotCQkJCSJGcmVlaW5nIGxvc3QgU0tCICVwLCBmcm9tIHF1ZXVlICVkLCBpbmRleCAlZC5cbiIsCi0JCQkJCXR4X3JpbmdfZGVzYy0+c2tiLCBqLAotCQkJCQl0eF9yaW5nX2Rlc2MtPmluZGV4KTsKKwkJCQluZXRpZl9lcnIocWRldiwgaWZkb3duLCBxZGV2LT5uZGV2LAorCQkJCQkgICJGcmVlaW5nIGxvc3QgU0tCICVwLCBmcm9tIHF1ZXVlICVkLCBpbmRleCAlZC5cbiIsCisJCQkJCSAgdHhfcmluZ19kZXNjLT5za2IsIGosCisJCQkJCSAgdHhfcmluZ19kZXNjLT5pbmRleCk7CiAJCQkJcWxfdW5tYXBfc2VuZChxZGV2LCB0eF9yaW5nX2Rlc2MsCiAJCQkJCSAgICAgIHR4X3JpbmdfZGVzYy0+bWFwX2NudCk7CiAJCQkJZGV2X2tmcmVlX3NrYih0eF9yaW5nX2Rlc2MtPnNrYik7CkBAIC0yNjQ0LDE2ICsyOTc2LDE2IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7CiAJCWlmIChxbF9hbGxvY19yeF9yZXNvdXJjZXMocWRldiwgJnFkZXYtPnJ4X3JpbmdbaV0pICE9IDApIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJSWCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiUlggcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCX0KIAkvKiBBbGxvY2F0ZSB0eCBxdWV1ZSByZXNvdXJjZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+dHhfcmluZ19jb3VudDsgaSsrKSB7CiAJCWlmIChxbF9hbGxvY190eF9yZXNvdXJjZXMocWRldiwgJnFkZXYtPnR4X3JpbmdbaV0pICE9IDApIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJUWCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiVFggcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCX0KQEAgLTI3ODgsMTQgKzMxMjAsMTUgQEAKIAkJY3FpY2ItPnBrdF9kZWxheSA9IGNwdV90b19sZTE2KHFkZXYtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkludmFsaWQgcnhfcmluZy0+dHlwZSA9ICVkLlxuIiwKLQkJCXJ4X3JpbmctPnR5cGUpOworCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIkludmFsaWQgcnhfcmluZy0+dHlwZSA9ICVkLlxuIiwgcnhfcmluZy0+dHlwZSk7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbml0aWFsaXppbmcgcnggd29yayBxdWV1ZS5cbiIpOworCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICJJbml0aWFsaXppbmcgcnggd29yayBxdWV1ZS5cbiIpOwogCWVyciA9IHFsX3dyaXRlX2NmZyhxZGV2LCBjcWljYiwgc2l6ZW9mKHN0cnVjdCBjcWljYiksCiAJCQkgICBDRkdfTENRLCByeF9yaW5nLT5jcV9pZCk7CiAJaWYgKGVycikgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBsb2FkIENRSUNCLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTI4NDEsMTAgKzMxNzQsMTEgQEAKIAllcnIgPSBxbF93cml0ZV9jZmcocWRldiwgd3FpY2IsIHNpemVvZigqd3FpY2IpLCBDRkdfTFJRLAogCQkJICAgKHUxNikgdHhfcmluZy0+d3FfaWQpOwogCWlmIChlcnIpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCB0eF9yaW5nLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGxvYWQgdHhfcmluZy5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBXUUlDQi5cbiIpOworCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjg5OCwxNSArMzIzMiwxNSBAQAogCQlpZiAoZXJyIDwgMCkgewogCQkJa2ZyZWUocWRldi0+bXNpX3hfZW50cnkpOwogCQkJcWRldi0+bXNpX3hfZW50cnkgPSBOVUxMOwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBXQVJOSU5HLAotCQkJCSJNU0ktWCBFbmFibGUgZmFpbGVkLCB0cnlpbmcgTVNJLlxuIik7CisJCQluZXRpZl93YXJuKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAgIk1TSS1YIEVuYWJsZSBmYWlsZWQsIHRyeWluZyBNU0kuXG4iKTsKIAkJCXFkZXYtPmludHJfY291bnQgPSAxOwogCQkJcWxnZV9pcnFfdHlwZSA9IE1TSV9JUlE7CiAJCX0gZWxzZSBpZiAoZXJyID09IDApIHsKIAkJCXNldF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpOwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAotCQkJCSJNU0ktWCBFbmFibGVkLCBnb3QgJWQgdmVjdG9ycy5cbiIsCi0JCQkJcWRldi0+aW50cl9jb3VudCk7CisJCQluZXRpZl9pbmZvKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAgIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKKwkJCQkgICBxZGV2LT5pbnRyX2NvdW50KTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTI5MTUsMTMgKzMyNDksMTQgQEAKIAlpZiAocWxnZV9pcnFfdHlwZSA9PSBNU0lfSVJRKSB7CiAJCWlmICghcGNpX2VuYWJsZV9tc2kocWRldi0+cGRldikpIHsKIAkJCXNldF9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sCi0JCQkJIlJ1bm5pbmcgd2l0aCBNU0kgaW50ZXJydXB0cy5cbiIpOworCQkJbmV0aWZfaW5mbyhxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgICJSdW5uaW5nIHdpdGggTVNJIGludGVycnVwdHMuXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAlxbGdlX2lycV90eXBlID0gTEVHX0lSUTsKLQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiUnVubmluZyB3aXRoIGxlZ2FjeSBpbnRlcnJ1cHRzLlxuIik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIlJ1bm5pbmcgd2l0aCBsZWdhY3kgaW50ZXJydXB0cy5cbiIpOwogfQogCiAvKiBFYWNoIHZlY3RvciBzZXJ2aWNlcyAxIFJTUyByaW5nIGFuZCBhbmQgMSBvciBtb3JlCkBAIC0zMDkzLDEyICszNDI4LDEyIEBACiAJCQlpZiAodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSB7CiAJCQkJZnJlZV9pcnEocWRldi0+bXNpX3hfZW50cnlbaV0udmVjdG9yLAogCQkJCQkgJnFkZXYtPnJ4X3JpbmdbaV0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywKLQkJCQkJImZyZWVpbmcgbXNpeCBpbnRlcnJ1cHQgJWQuXG4iLCBpKTsKKwkJCQluZXRpZl9wcmludGsocWRldiwgaWZkb3duLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCQkgICAgICJmcmVlaW5nIG1zaXggaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgJnFkZXYtPnJ4X3JpbmdbMF0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywKLQkJCQkJImZyZWVpbmcgbXNpIGludGVycnVwdCAlZC5cbiIsIGkpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZmRvd24sIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgImZyZWVpbmcgbXNpIGludGVycnVwdCAlZC5cbiIsIGkpOwogCQkJfQogCQl9CiAJfQpAQCAtMzEyMywzMiArMzQ1OCwzMyBAQAogCQkJCQkgICAgIGludHJfY29udGV4dC0+bmFtZSwKIAkJCQkJICAgICAmcWRldi0+cnhfcmluZ1tpXSk7CiAJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJCSJGYWlsZWQgcmVxdWVzdCBmb3IgTVNJWCBpbnRlcnJ1cHQgJWQuXG4iLAotCQkJCQlpKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkJICAiRmFpbGVkIHJlcXVlc3QgZm9yIE1TSVggaW50ZXJydXB0ICVkLlxuIiwKKwkJCQkJICBpKTsKIAkJCQlnb3RvIGVycl9pcnE7CiAJCQl9IGVsc2UgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCi0JCQkJCWksCi0JCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQotCQkJCQlERUZBVUxUX1EgPyAiREVGQVVMVF9RIiA6ICIiLAotCQkJCQlxZGV2LT5yeF9yaW5nW2ldLnR5cGUgPT0KLQkJCQkJVFhfUSA/ICJUWF9RIiA6ICIiLAotCQkJCQlxZGV2LT5yeF9yaW5nW2ldLnR5cGUgPT0KLQkJCQkJUlhfUSA/ICJSWF9RIiA6ICIiLCBpbnRyX2NvbnRleHQtPm5hbWUpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCQkgICAgICJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcywgd2l0aCBuYW1lICVzLlxuIiwKKwkJCQkJICAgICBpLAorCQkJCQkgICAgIHFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PSBERUZBVUxUX1EgPworCQkJCQkgICAgICJERUZBVUxUX1EiIDoKKwkJCQkJICAgICBxZGV2LT5yeF9yaW5nW2ldLnR5cGUgPT0gVFhfUSA/CisJCQkJCSAgICAgIlRYX1EiIDoKKwkJCQkJICAgICBxZGV2LT5yeF9yaW5nW2ldLnR5cGUgPT0gUlhfUSA/CisJCQkJCSAgICAgIlJYX1EiIDogIiIsCisJCQkJCSAgICAgaW50cl9jb250ZXh0LT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJInRyeWluZyBtc2kgb3IgbGVnYWN5IGludGVycnVwdHMuXG4iKTsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJIiVzOiBpcnEgPSAlZC5cbiIsIF9fZnVuY19fLCBwZGV2LT5pcnEpOwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCQkiJXM6IGNvbnRleHQtPm5hbWUgPSAlcy5cbiIsIF9fZnVuY19fLAotCQkJICAgICAgIGludHJfY29udGV4dC0+bmFtZSk7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSIlczogZGV2X2lkID0gMHglcC5cbiIsIF9fZnVuY19fLAotCQkJICAgICAgICZxZGV2LT5yeF9yaW5nWzBdKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgInRyeWluZyBtc2kgb3IgbGVnYWN5IGludGVycnVwdHMuXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIiVzOiBpcnEgPSAlZC5cbiIsIF9fZnVuY19fLCBwZGV2LT5pcnEpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJXM6IGNvbnRleHQtPm5hbWUgPSAlcy5cbiIsIF9fZnVuY19fLAorCQkJCSAgICAgaW50cl9jb250ZXh0LT5uYW1lKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIiVzOiBkZXZfaWQgPSAweCVwLlxuIiwgX19mdW5jX18sCisJCQkJICAgICAmcWRldi0+cnhfcmluZ1swXSk7CiAJCQlzdGF0dXMgPQogCQkJICAgIHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcWxnZV9pc3IsCiAJCQkJCXRlc3RfYml0KFFMX01TSV9FTkFCTEVELApAQCAtMzE1OCwyMCArMzQ5NCwyMCBAQAogCQkJaWYgKHN0YXR1cykKIAkJCQlnb3RvIGVycl9pcnE7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCi0JCQkJaSwKLQkJCQlxZGV2LT5yeF9yaW5nWzBdLnR5cGUgPT0KLQkJCQlERUZBVUxUX1EgPyAiREVGQVVMVF9RIiA6ICIiLAotCQkJCXFkZXYtPnJ4X3JpbmdbMF0udHlwZSA9PSBUWF9RID8gIlRYX1EiIDogIiIsCi0JCQkJcWRldi0+cnhfcmluZ1swXS50eXBlID09IFJYX1EgPyAiUlhfUSIgOiAiIiwKLQkJCQlpbnRyX2NvbnRleHQtPm5hbWUpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiSG9va2VkIGludHIgJWQsIHF1ZXVlIHR5cGUgJXMsIHdpdGggbmFtZSAlcy5cbiIsCisJCQkJICBpLAorCQkJCSAgcWRldi0+cnhfcmluZ1swXS50eXBlID09IERFRkFVTFRfUSA/CisJCQkJICAiREVGQVVMVF9RIiA6CisJCQkJICBxZGV2LT5yeF9yaW5nWzBdLnR5cGUgPT0gVFhfUSA/ICJUWF9RIiA6CisJCQkJICBxZGV2LT5yeF9yaW5nWzBdLnR5cGUgPT0gUlhfUSA/ICJSWF9RIiA6ICIiLAorCQkJCSAgaW50cl9jb250ZXh0LT5uYW1lKTsKIAkJfQogCQlpbnRyX2NvbnRleHQtPmhvb2tlZCA9IDE7CiAJfQogCXJldHVybiBzdGF0dXM7CiBlcnJfaXJxOgotCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGdldCB0aGUgaW50ZXJydXB0cyEhIS9uIik7CisJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gZ2V0IHRoZSBpbnRlcnJ1cHRzISEhL24iKTsKIAlxbF9mcmVlX2lycShxZGV2KTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzIwNSwxNCArMzU0MSwxNSBAQAogCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY2X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgNDApOwogCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY0X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgMTYpOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyBSU1MuXG4iKTsKKwluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwgIkluaXRpYWxpemluZyBSU1MuXG4iKTsKIAogCXN0YXR1cyA9IHFsX3dyaXRlX2NmZyhxZGV2LCByaWNiLCBzaXplb2YoKnJpY2IpLCBDRkdfTFIsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGxvYWQgUklDQi5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBSSUNCLlxuIik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTMyMjcsOSArMzU2NCw4IEBACiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIGksIDAsIDApOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgQ0FNICIKLQkJCQkicGFja2V0cy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgQ0FNIHBhY2tldHMuXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzI1MywxNCArMzU4OSwxNCBAQAogCiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9BTExfRVJSX1NMT1QsIFJUX0lEWF9FUlIsIDEpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgZXJyb3IgcGFja2V0cy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIGVycm9yIHBhY2tldHMuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0JDQVNUX1NMT1QsIFJUX0lEWF9CQ0FTVCwgMSk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBicm9hZGNhc3QgcGFja2V0cy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIGJyb2FkY2FzdCBwYWNrZXRzLlxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAJLyogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGluYm91bmQgcXVldWUsIHRoZW4gdHVybiBvbiBSU1MgaW4gdGhlCkBAIC0zMjcwLDggKzM2MDYsOCBAQAogCQlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX1JTU19NQVRDSF9TTE9ULAogCQkJCQlSVF9JRFhfUlNTX01BVENILCAxKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIE1BVENIIFJTUyBwYWNrZXRzLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBNQVRDSCBSU1MgcGFja2V0cy5cbiIpOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMzI3OSw4ICszNjE1LDggQEAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0NBTV9ISVRfU0xPVCwKIAkJCQkgICAgUlRfSURYX0NBTV9ISVQsIDEpOwogCWlmIChzdGF0dXMpCi0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgQ0FNIHBhY2tldHMuXG4iKTsKIGV4aXQ6CiAJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC0zMjk4LDEzICszNjM0LDEzIEBACiAJc2V0ICY9IHFkZXYtPnBvcnRfbGlua191cDsKIAlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHIocWRldiwgc2V0KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgbWFjIGFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGluaXQgcm91dGluZyB0YWJsZS5cbiIpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTMzMzIsMTUgKzM2NjgsMTUgQEAKIAogCS8qIEVuYWJsZSB0aGUgZnVuY3Rpb24sIHNldCBwYWdlc2l6ZSwgZW5hYmxlIGVycm9yIGNoZWNraW5nLiAqLwogCXZhbHVlID0gRlNDX0ZFIHwgRlNDX0VQQ19JTkJPVU5EIHwgRlNDX0VQQ19PVVRCT1VORCB8Ci0JICAgIEZTQ19FQyB8IEZTQ19WTV9QQUdFXzRLIHwgRlNDX1NIOworCSAgICBGU0NfRUMgfCBGU0NfVk1fUEFHRV80SzsKKwl2YWx1ZSB8PSBTUExUX1NFVFRJTkc7CiAKIAkvKiBTZXQvY2xlYXIgaGVhZGVyIHNwbGl0dGluZy4gKi8KIAltYXNrID0gRlNDX1ZNX1BBR0VTSVpFX01BU0sgfAogCSAgICBGU0NfREJMX01BU0sgfCBGU0NfREJSU1RfTUFTSyB8ICh2YWx1ZSA8PCAxNik7CiAJcWxfd3JpdGUzMihxZGV2LCBGU0MsIG1hc2sgfCB2YWx1ZSk7CiAKLQlxbF93cml0ZTMyKHFkZXYsIFNQTFRfSERSLCBTUExUX0hEUl9FUCB8Ci0JCW1pbihTTUFMTF9CVUZfTUFQX1NJWkUsIE1BWF9TUExJVF9TSVpFKSk7CisJcWxfd3JpdGUzMihxZGV2LCBTUExUX0hEUiwgU1BMVF9MRU4pOwogCiAJLyogU2V0IFJYIHBhY2tldCByb3V0aW5nIHRvIHVzZSBwb3J0L3BjaSBmdW5jdGlvbiBvbiB3aGljaCB0aGUKIAkgKiBwYWNrZXQgYXJyaXZlZCBvbiBpbiBhZGRpdGlvbiB0byB1c3VhbCBmcmFtZSByb3V0aW5nLgpAQCAtMzM2OSw4ICszNzA1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3N0YXJ0X3J4X3JpbmcocWRldiwgJnFkZXYtPnJ4X3JpbmdbaV0pOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiRmFpbGVkIHRvIHN0YXJ0IHJ4IHJpbmdbJWRdLlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgdG8gc3RhcnQgcnggcmluZ1slZF0uXG4iLCBpKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CkBAIC0zMzgxLDcgKzM3MTcsNyBAQAogCWlmIChxZGV2LT5yc3NfcmluZ19jb3VudCA+IDEpIHsKIAkJc3RhdHVzID0gcWxfc3RhcnRfcnNzKHFkZXYpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBSU1MuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IFJTUy5cbiIpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KQEAgLTMzOTAsOCArMzcyNiw4IEBACiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnR4X3JpbmdfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPSBxbF9zdGFydF90eF9yaW5nKHFkZXYsICZxZGV2LT50eF9yaW5nW2ldKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkZhaWxlZCB0byBzdGFydCB0eCByaW5nWyVkXS5cbiIsIGkpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIHN0YXJ0IHR4IHJpbmdbJWRdLlxuIiwgaSk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQpAQCAtMzM5OSwyMCArMzczNSwyMCBAQAogCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgYW5kIHNldCB0aGUgbWF4IGZyYW1lc2l6ZS4gKi8KIAlzdGF0dXMgPSBxZGV2LT5uaWNfb3BzLT5wb3J0X2luaXRpYWxpemUocWRldik7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gc3RhcnQgcG9ydC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CiAKIAkvKiBTZXQgdXAgdGhlIE1BQyBhZGRyZXNzIGFuZCBmcmFtZSByb3V0aW5nIGZpbHRlci4gKi8KIAlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiRW5hYmxpbmcgTkFQSSBmb3IgcnhfcmluZ1slZF0uXG4iLAotCQkJaSk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiRW5hYmxpbmcgTkFQSSBmb3IgcnhfcmluZ1slZF0uXG4iLCBpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAJfQogCkBAIC0zNDI5LDcgKzM3NjUsNyBAQAogCS8qIENsZWFyIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgcm91dGluZyB0YWJsZS4gKi8KIAlzdGF0dXMgPSBxbF9jbGVhcl9yb3V0aW5nX2VudHJpZXMocWRldik7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciByb3V0aW5nIGJpdHMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gY2xlYXIgcm91dGluZyBiaXRzLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0zNDUyLDggKzM3ODgsOCBAQAogCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CiAKIAlpZiAodmFsdWUgJiBSU1RfRk9fRlIpIHsKLQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCSJFVElNRURPVVQhISEgZXJyb3JlZCBvdXQgb2YgcmVzZXR0aW5nIHRoZSBjaGlwIVxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZmRvd24sIHFkZXYtPm5kZXYsCisJCQkgICJFVElNRURPVVQhISEgZXJyb3JlZCBvdXQgb2YgcmVzZXR0aW5nIHRoZSBjaGlwIVxuIik7CiAJCXN0YXR1cyA9IC1FVElNRURPVVQ7CiAJfQogCkBAIC0zNDY2LDE2ICszODAyLDE3IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAotCVFQUklOVEsocWRldiwgUFJPQkUsIElORk8sCi0JCSJGdW5jdGlvbiAjJWQsIFBvcnQgJWQsIE5JQyBSb2xsICVkLCBOSUMgUmV2ID0gJWQsICIKLQkJIlhHIFJvbGwgPSAlZCwgWEcgUmV2ID0gJWQuXG4iLAotCQlxZGV2LT5mdW5jLAotCQlxZGV2LT5wb3J0LAotCQlxZGV2LT5jaGlwX3Jldl9pZCAmIDB4MDAwMDAwMGYsCi0JCXFkZXYtPmNoaXBfcmV2X2lkID4+IDQgJiAweDAwMDAwMDBmLAotCQlxZGV2LT5jaGlwX3Jldl9pZCA+PiA4ICYgMHgwMDAwMDAwZiwKLQkJcWRldi0+Y2hpcF9yZXZfaWQgPj4gMTIgJiAweDAwMDAwMDBmKTsKLQlRUFJJTlRLKHFkZXYsIFBST0JFLCBJTkZPLCAiTUFDIGFkZHJlc3MgJXBNXG4iLCBuZGV2LT5kZXZfYWRkcik7CisJbmV0aWZfaW5mbyhxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKKwkJICAgIkZ1bmN0aW9uICMlZCwgUG9ydCAlZCwgTklDIFJvbGwgJWQsIE5JQyBSZXYgPSAlZCwgIgorCQkgICAiWEcgUm9sbCA9ICVkLCBYRyBSZXYgPSAlZC5cbiIsCisJCSAgIHFkZXYtPmZ1bmMsCisJCSAgIHFkZXYtPnBvcnQsCisJCSAgIHFkZXYtPmNoaXBfcmV2X2lkICYgMHgwMDAwMDAwZiwKKwkJICAgcWRldi0+Y2hpcF9yZXZfaWQgPj4gNCAmIDB4MDAwMDAwMGYsCisJCSAgIHFkZXYtPmNoaXBfcmV2X2lkID4+IDggJiAweDAwMDAwMDBmLAorCQkgICBxZGV2LT5jaGlwX3Jldl9pZCA+PiAxMiAmIDB4MDAwMDAwMGYpOworCW5ldGlmX2luZm8ocWRldiwgcHJvYmUsIHFkZXYtPm5kZXYsCisJCSAgICJNQUMgYWRkcmVzcyAlcE1cbiIsIG5kZXYtPmRldl9hZGRyKTsKIH0KIAogaW50IHFsX3dvbChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTM0OTIsMjMgKzM4MjksMjMgQEAKIAogCWlmIChxZGV2LT53b2wgJiAoV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFIHwgV0FLRV9QSFkgfCBXQUtFX1VDQVNUIHwKIAkJCVdBS0VfTUNBU1QgfCBXQUtFX0JDQVNUKSkgewotCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAotCQkJIlVuc3VwcG9ydGVkIFdPTCBwYXJhbXRlci4gcWRldi0+d29sID0gMHgleC5cbiIsCi0JCQlxZGV2LT53b2wpOworCQluZXRpZl9lcnIocWRldiwgaWZkb3duLCBxZGV2LT5uZGV2LAorCQkJICAiVW5zdXBwb3J0ZWQgV09MIHBhcmFtdGVyLiBxZGV2LT53b2wgPSAweCV4LlxuIiwKKwkJCSAgcWRldi0+d29sKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHFkZXYtPndvbCAmIFdBS0VfTUFHSUMpIHsKIAkJc3RhdHVzID0gcWxfbWJfd29sX3NldF9tYWdpYyhxZGV2LCAxKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCQkiRmFpbGVkIHRvIHNldCBtYWdpYyBwYWNrZXQgb24gJXMuXG4iLAotCQkJCXFkZXYtPm5kZXYtPm5hbWUpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmZG93biwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgdG8gc2V0IG1hZ2ljIHBhY2tldCBvbiAlcy5cbiIsCisJCQkJICBxZGV2LT5uZGV2LT5uYW1lKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0gZWxzZQotCQkJUVBSSU5USyhxZGV2LCBEUlYsIElORk8sCi0JCQkJIkVuYWJsZWQgbWFnaWMgcGFja2V0IHN1Y2Nlc3NmdWxseSBvbiAlcy5cbiIsCi0JCQkJcWRldi0+bmRldi0+bmFtZSk7CisJCQluZXRpZl9pbmZvKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICAiRW5hYmxlZCBtYWdpYyBwYWNrZXQgc3VjY2Vzc2Z1bGx5IG9uICVzLlxuIiwKKwkJCQkgICBxZGV2LT5uZGV2LT5uYW1lKTsKIAogCQl3b2wgfD0gTUJfV09MX01BR0lDX1BLVDsKIAl9CkBAIC0zNTE2LDkgKzM4NTMsMTAgQEAKIAlpZiAocWRldi0+d29sKSB7CiAJCXdvbCB8PSBNQl9XT0xfTU9ERV9PTjsKIAkJc3RhdHVzID0gcWxfbWJfd29sX21vZGUocWRldiwgd29sKTsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIldPTCAlcyAod29sIGNvZGUgMHgleCkgb24gJXNcbiIsCi0JCQkoc3RhdHVzID09IDApID8gIlN1Y2Vzc2Z1bGx5IHNldCIgOiAiRmFpbGVkIiwgd29sLAotCQkJcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJXT0wgJXMgKHdvbCBjb2RlIDB4JXgpIG9uICVzXG4iLAorCQkJICAoc3RhdHVzID09IDApID8gIlN1Y2Vzc2Z1bGx5IHNldCIgOiAiRmFpbGVkIiwKKwkJCSAgd29sLCBxZGV2LT5uZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzUzOCw2ICszODc2LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfY29yZV90b19sb2cpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmspOwogCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJzc19yaW5nX2NvdW50OyBpKyspCkBAIC0zNTU4LDggKzM4OTcsOCBAQAogCiAJc3RhdHVzID0gcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLCAicmVzZXQoZnVuYyAjJWQpIEZBSUxFRCFcbiIsCi0JCQlxZGV2LT5mdW5jKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmZG93biwgcWRldi0+bmRldiwgInJlc2V0KGZ1bmMgIyVkKSBGQUlMRUQhXG4iLAorCQkJICBxZGV2LT5mdW5jKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNTY5LDcgKzM5MDgsNyBAQAogCiAJZXJyID0gcWxfYWRhcHRlcl9pbml0aWFsaXplKHFkZXYpOwogCWlmIChlcnIpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgYWRhcHRlci5cbiIpOworCQluZXRpZl9pbmZvKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyLlxuIik7CiAJCWdvdG8gZXJyX2luaXQ7CiAJfQogCXNldF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKQEAgLTM2MDEsNyArMzk0MCw3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAlpZiAocWxfYWxsb2NfbWVtX3Jlc291cmNlcyhxZGV2KSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIlVuYWJsZSB0byAgYWxsb2NhdGUgbWVtb3J5LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiVW5hYmxlIHRvICBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN0YXR1cyA9IHFsX3JlcXVlc3RfaXJxKHFkZXYpOwpAQCAtMzYxMiw2ICszOTUxLDE2IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAorCS8qIElmIHdlIGhpdCBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUKKwkgKiBmYWlsdXJlIGNvbmRpdGlvbiwgdGhlbiB3ZSBhbHJlYWR5CisJICogYnJvdWdodCB0aGUgYWRhcHRlciBkb3duLgorCSAqLworCWlmICh0ZXN0X2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncykpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkVFSCBmYXRhbCBkaWQgdW5sb2FkLlxuIik7CisJCWNsZWFyX2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncyk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogV2FpdCBmb3IgZGV2aWNlIHRvIHJlY292ZXIgZnJvbSBhIHJlc2V0LgogCSAqIChSYXJlbHkgaGFwcGVucywgYnV0IHBvc3NpYmxlLikKQEAgLTM2ODEsOSArNDAzMCwxMCBAQAogCQkJcnhfcmluZy0+bGJxX3NpemUgPQogCQkJICAgIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKIAkJCXJ4X3JpbmctPmxicV9idWZfc2l6ZSA9ICh1MTYpbGJxX2J1Zl9sZW47Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSJsYnFfYnVmX3NpemUgJWQsIG9yZGVyID0gJWRcbiIsCi0JCQkJcnhfcmluZy0+bGJxX2J1Zl9zaXplLCBxZGV2LT5sYnFfYnVmX29yZGVyKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgImxicV9idWZfc2l6ZSAlZCwgb3JkZXIgPSAlZFxuIiwKKwkJCQkgICAgIHJ4X3JpbmctPmxicV9idWZfc2l6ZSwKKwkJCQkgICAgIHFkZXYtPmxicV9idWZfb3JkZXIpOwogCQkJcnhfcmluZy0+c2JxX2xlbiA9IE5VTV9TTUFMTF9CVUZGRVJTOwogCQkJcnhfcmluZy0+c2JxX3NpemUgPQogCQkJICAgIHJ4X3JpbmctPnNicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKQEAgLTM3NDcsMTQgKzQwOTcsMTQgQEAKIAlpZiAoIXRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpIHsKIAkJaW50IGkgPSAzOwogCQl3aGlsZSAoaS0tICYmICF0ZXN0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkgIldhaXRpbmcgZm9yIGFkYXB0ZXIgVVAuLi5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiV2FpdGluZyBmb3IgYWRhcHRlciBVUC4uLlxuIik7CiAJCQlzc2xlZXAoMSk7CiAJCX0KIAogCQlpZiAoIWkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYWRhcHRlciBVUFxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYWRhcHRlciBVUFxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KQEAgLTM3ODAsOCArNDEzMCw4IEBACiAKIAlyZXR1cm4gc3RhdHVzOwogZXJyb3I6Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBBTEVSVCwKLQkJIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2UuXG4iKTsKKwluZXRpZl9hbGVydChxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkgICAgIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2UuXG4iKTsKIAlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CiAJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOwogCXJldHVybiBzdGF0dXM7CkBAIC0zNzkzLDI4ICs0MTQzLDI1IEBACiAJaW50IHN0YXR1czsKIAogCWlmIChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDkwMDApIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKIAl9IGVsc2UgaWYgKG5kZXYtPm10dSA9PSA5MDAwICYmIG5ld19tdHUgPT0gMTUwMCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNoYW5naW5nIHRvIG5vcm1hbCBNVFUuXG4iKTsKLQl9IGVsc2UgaWYgKChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDE1MDApIHx8Ci0JCSAgIChuZGV2LT5tdHUgPT0gOTAwMCAmJiBuZXdfbXR1ID09IDkwMDApKSB7Ci0JCXJldHVybiAwOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkNoYW5naW5nIHRvIG5vcm1hbCBNVFUuXG4iKTsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAogCQkJJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAzKkhaKTsKIAorCW5kZXYtPm10dSA9IG5ld19tdHU7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcocWRldi0+bmRldikpIHsKLQkJbmRldi0+bXR1ID0gbmV3X210dTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JbmRldi0+bXR1ID0gbmV3X210dTsKIAlzdGF0dXMgPSBxbF9jaGFuZ2VfcnhfYnVmZmVycyhxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkNoYW5naW5nIE1UVSBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJDaGFuZ2luZyBNVFUgZmFpbGVkLlxuIik7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTM4NzQsOCArNDIyMSw4IEBACiAJCWlmICghdGVzdF9iaXQoUUxfUFJPTUlTQ1VPVVMsICZxZGV2LT5mbGFncykpIHsKIAkJCWlmIChxbF9zZXRfcm91dGluZ19yZWcKIAkJCSAgICAocWRldiwgUlRfSURYX1BST01JU0NVT1VTX1NMT1QsIFJUX0lEWF9WQUxJRCwgMSkpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsCi0JCQkJCSJGYWlsZWQgdG8gc2V0IHByb21pc2NvdXMgbW9kZS5cbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBodywgcWRldi0+bmRldiwKKwkJCQkJICAiRmFpbGVkIHRvIHNldCBwcm9taXNjb3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTM4ODQsOCArNDIzMSw4IEBACiAJCWlmICh0ZXN0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKSkgewogCQkJaWYgKHFsX3NldF9yb3V0aW5nX3JlZwogCQkJICAgIChxZGV2LCBSVF9JRFhfUFJPTUlTQ1VPVVNfU0xPVCwgUlRfSURYX1ZBTElELCAwKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBjbGVhciBwcm9taXNjb3VzIG1vZGUuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBjbGVhciBwcm9taXNjb3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2xlYXJfYml0KFFMX1BST01JU0NVT1VTLCAmcWRldi0+ZmxhZ3MpOwogCQkJfQpAQCAtMzg5NywxMiArNDI0NCwxMiBAQAogCSAqIHRyYW5zaXRpb24gaXMgdGFraW5nIHBsYWNlLgogCSAqLwogCWlmICgobmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChuZGV2LT5tY19jb3VudCA+IE1BWF9NVUxUSUNBU1RfRU5UUklFUykpIHsKKwkgICAgKG5ldGRldl9tY19jb3VudChuZGV2KSA+IE1BWF9NVUxUSUNBU1RfRU5UUklFUykpIHsKIAkJaWYgKCF0ZXN0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKSkgewogCQkJaWYgKHFsX3NldF9yb3V0aW5nX3JlZwogCQkJICAgIChxZGV2LCBSVF9JRFhfQUxMTVVMVElfU0xPVCwgUlRfSURYX01DQVNULCAxKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBzZXQgYWxsLW11bHRpIG1vZGUuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBzZXQgYWxsLW11bHRpIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTM5MTEsMzIgKzQyNTgsMzQgQEAKIAkJaWYgKHRlc3RfYml0KFFMX0FMTE1VTFRJLCAmcWRldi0+ZmxhZ3MpKSB7CiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9BTExNVUxUSV9TTE9ULCBSVF9JRFhfTUNBU1QsIDApKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLAotCQkJCQkiRmFpbGVkIHRvIGNsZWFyIGFsbC1tdWx0aSBtb2RlLlxuIik7CisJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAorCQkJCQkgICJGYWlsZWQgdG8gY2xlYXIgYWxsLW11bHRpIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2xlYXJfYml0KFFMX0FMTE1VTFRJLCAmcWRldi0+ZmxhZ3MpOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKG5kZXYtPm1jX2NvdW50KSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmRldikpIHsKIAkJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gZXhpdDsKLQkJZm9yIChpID0gMCwgbWNfcHRyID0gbmRldi0+bWNfbGlzdDsgbWNfcHRyOwotCQkgICAgIGkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KQorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZGV2KSB7CiAJCQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbWNfcHRyLT5kbWlfYWRkciwKIAkJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKIAkJCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CisJCQlpKys7CisJCX0KIAkJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJCWlmIChxbF9zZXRfcm91dGluZ19yZWcKIAkJICAgIChxZGV2LCBSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCwgUlRfSURYX01DQVNUX01BVENILCAxKSkgewotCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLAotCQkJCSJGYWlsZWQgdG8gc2V0IG11bHRpY2FzdCBtYXRjaCBtb2RlLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIHNldCBtdWx0aWNhc3QgbWF0Y2ggbW9kZS5cbiIpOwogCQl9IGVsc2UgewogCQkJc2V0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKIAkJfQpAQCAtMzk1NCw2ICs0MzAzLDggQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5kZXYtPmFkZHJfbGVuKTsKKwkvKiBVcGRhdGUgbG9jYWwgY29weSBvZiBjdXJyZW50IG1hYyBhZGRyZXNzLiAqLworCW1lbWNweShxZGV2LT5jdXJyZW50X21hY19hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCiAJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlpZiAoc3RhdHVzKQpAQCAtMzk2MSw3ICs0MzEyLDcgQEAKIAlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBuZGV2LT5kZXZfYWRkciwKIAkJCU1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYyAqIE1BWF9DUSk7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzk5NCw4ICs0MzQ1LDggQEAKIAlydG5sX3VubG9jaygpOwogCXJldHVybjsKIGVycm9yOgotCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCi0JCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKKwluZXRpZl9hbGVydChxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkgICAgIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2VcbiIpOwogCiAJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOwogCWRldl9jbG9zZShxZGV2LT5uZGV2KTsKQEAgLTQwOTQsNiArNDQ0NSw3IEBACiAJCWlvdW5tYXAocWRldi0+cmVnX2Jhc2UpOwogCWlmIChxZGV2LT5kb29yYmVsbF9hcmVhKQogCQlpb3VubWFwKHFkZXYtPmRvb3JiZWxsX2FyZWEpOworCXZmcmVlKHFkZXYtPm1waV9jb3JlZHVtcCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CkBAIC00MTc1LDYgKzQ1MjcsMTcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnN0YXRzX2xvY2spOwogCisJaWYgKHFsZ2VfbXBpX2NvcmVkdW1wKSB7CisJCXFkZXYtPm1waV9jb3JlZHVtcCA9CisJCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKSk7CisJCWlmIChxZGV2LT5tcGlfY29yZWR1bXAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29yZWR1bXAgYWxsb2MgZmFpbGVkLlxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0MjsKKwkJfQorCQlpZiAocWxnZV9mb3JjZV9jb3JlZHVtcCkKKwkJCXNldF9iaXQoUUxfRlJDX0NPUkVEVU1QLCAmcWRldi0+ZmxhZ3MpOworCX0KIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAJZXJyID0gcWRldi0+bmljX29wcy0+Z2V0X2ZsYXNoKHFkZXYpOwogCWlmIChlcnIpIHsKQEAgLTQxODMsNiArNDU0Niw4IEBACiAJfQogCiAJbWVtY3B5KG5kZXYtPnBlcm1fYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKKwkvKiBLZWVwIGxvY2FsIGNvcHkgb2YgY3VycmVudCBtYWMgYWRkcmVzcy4gKi8KKwltZW1jcHkocWRldi0+Y3VycmVudF9tYWNfYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKIAogCS8qIFNldCB1cCB0aGUgZGVmYXVsdCByaW5nIHNpemVzLiAqLwogCXFkZXYtPnR4X3Jpbmdfc2l6ZSA9IE5VTV9UWF9SSU5HX0VOVFJJRVM7CkBAIC00MjA0LDYgKzQ1NjksNyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfd29yaywgcWxfbXBpX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgcWxfbXBpX3BvcnRfY2ZnX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfaWRjX3dvcmssIHFsX21waV9pZGNfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9jb3JlX3RvX2xvZywgcWxfbXBpX2NvcmVfdG9fbG9nKTsKIAlpbml0X2NvbXBsZXRpb24oJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKIAogCWlmICghY2FyZHNfZm91bmQpIHsKQEAgLTQyMzQsNiArNDYwMCwyMSBAQAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IHFsZ2Vfdmxhbl9yeF9raWxsX3ZpZCwKIH07CiAKK3N0YXRpYyB2b2lkIHFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKWRhdGE7CisJdTMyIHZhciA9IDA7CisKKwl2YXIgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShxZGV2LT5wZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkVFSCBTVFMgPSAweCUuMDh4LlxuIiwgdmFyKTsKKwkJcmV0dXJuOworCX0KKworCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBxbGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZW50cnkpCiB7CkBAIC00Mjg1LDYgKzQ2NjYsMTQgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KKwkvKiBTdGFydCB1cCB0aGUgdGltZXIgdG8gdHJpZ2dlciBFRUggaWYKKwkgKiB0aGUgYnVzIGdvZXMgZGVhZAorCSAqLworCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmcWRldi0+dGltZXIpOworCXFkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxZGV2OworCXFkZXYtPnRpbWVyLmZ1bmN0aW9uID0gcWxfdGltZXI7CisJcWRldi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoNSpIWik7CisJYWRkX3RpbWVyKCZxZGV2LT50aW1lcik7CiAJcWxfbGlua19vZmYocWRldik7CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIAlhdG9taWNfc2V0KCZxZGV2LT5sYl9jb3VudCwgMCk7CkBAIC00MzA1LDYgKzQ2OTQsOCBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IHFsZ2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJZGVsX3RpbWVyX3N5bmMoJnFkZXYtPnRpbWVyKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlxbF9yZWxlYXNlX2FsbChwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC00MzI3LDYgKzQ3MTgsNyBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3Jlc2V0X3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9jb3JlX3RvX2xvZyk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykKQEAgLTQzNDYsNiArNDczOCw3IEBACiAJCQkJCSAgICAgICBlbnVtIHBjaV9jaGFubmVsX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19ub3JtYWw6CkBAIC00MzU5LDYgKzQ3NTIsOCBAQAogCWNhc2UgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlOgogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiJXM6IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZS5cbiIsIF9fZnVuY19fKTsKKwkJcWxfZWVoX2Nsb3NlKG5kZXYpOworCQlzZXRfYml0KFFMX0VFSF9GQVRBTCwgJnFkZXYtPmZsYWdzKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCkBAIC00MzgxLDExICs0Nzc2LDE4IEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmIChxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJyZXNldCBGQUlMRUQhXG4iKTsKKwkJc2V0X2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncyk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiB9CiAKQEAgLTQzOTUsMTkgKzQ3OTcsMTkgQEAKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHFsX2FkYXB0ZXJfcmVzZXQocWRldikpCi0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJyZXNldCBGQUlMRUQhXG4iKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewogCQllcnIgPSBxbGdlX29wZW4obmRldik7CiAJCWlmIChlcnIpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJEZXZpY2Ugd2FzIG5vdCBydW5uaW5nIHByaW9yIHRvIEVFSC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkRldmljZSB3YXMgbm90IHJ1bm5pbmcgcHJpb3IgdG8gRUVILlxuIik7CiAJfQorCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOwogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiB9CiAKQEAgLTQ0MjQsNiArNDgyNiw3IEBACiAJaW50IGVycjsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJZGVsX3RpbWVyX3N5bmMoJnFkZXYtPnRpbWVyKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCWVyciA9IHFsX2FkYXB0ZXJfZG93bihxZGV2KTsKQEAgLTQ0NTQsNyArNDg1Nyw3IEBACiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTQ0NjgsNiArNDg3MSw4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOwogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBlMmIyMjg2Li4zYzAwNDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDUgKzEsNTQgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKK2ludCBxbF91bnBhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXUzMiB0bXA7CisKKwkvKiBVbi1wYXVzZSB0aGUgUklTQyAqLworCXRtcCA9IHFsX3JlYWQzMihxZGV2LCBDU1IpOworCWlmICghKHRtcCAmIENTUl9SUCkpCisJCXJldHVybiAtRUlPOworCisJcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1BBVVNFKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHFsX3BhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXUzMiB0bXA7CisJaW50IGNvdW50ID0gVURFTEFZX0NPVU5UOworCisJLyogUGF1c2UgdGhlIFJJU0MgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfUEFVU0UpOworCWRvIHsKKwkJdG1wID0gcWxfcmVhZDMyKHFkZXYsIENTUik7CisJCWlmICh0bXAgJiBDU1JfUlApCisJCQlicmVhazsKKwkJbWRlbGF5KFVERUxBWV9ERUxBWSk7CisJCWNvdW50LS07CisJfSB3aGlsZSAoY291bnQpOworCXJldHVybiAoY291bnQgPT0gMCkgPyAtRVRJTUVET1VUIDogMDsKK30KKworaW50IHFsX2hhcmRfcmVzZXRfbXBpX3Jpc2Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgY291bnQgPSBVREVMQVlfQ09VTlQ7CisKKwkvKiBSZXNldCB0aGUgUklTQyAqLworCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOworCWRvIHsKKwkJdG1wID0gcWxfcmVhZDMyKHFkZXYsIENTUik7CisJCWlmICh0bXAgJiBDU1JfUlIpIHsKKwkJCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SU1QpOworCQkJYnJlYWs7CisJCX0KKwkJbWRlbGF5KFVERUxBWV9ERUxBWSk7CisJCWNvdW50LS07CisJfSB3aGlsZSAoY291bnQpOworCXJldHVybiAoY291bnQgPT0gMCkgPyAtRVRJTUVET1VUIDogMDsKK30KKwogaW50IHFsX3JlYWRfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQogewogCWludCBzdGF0dXM7CkBAIC00NSw2ICs5NCwzNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qIERldGVybWluZSBpZiB3ZSBhcmUgaW4gY2hhcmdlIG9mIHRoZSBmaXJ3bWFyZS4gSWYKKyAqIHdlIGFyZSB0aGUgbG93ZXIgb2YgdGhlIDIgTklDIHBjaWUgZnVuY3Rpb25zLCBvciBpZgorICogd2UgYXJlIHRoZSBoaWdoZXIgZnVuY3Rpb24gYW5kIHRoZSBsb3dlciBmdW5jdGlvbgorICogaXMgbm90IGVuYWJsZWQuCisgKi8KK2ludCBxbF9vd25fZmlybXdhcmUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJdTMyIHRlbXA7CisKKwkvKiBJZiB3ZSBhcmUgdGhlIGxvd2VyIG9mIHRoZSAyIE5JQyBmdW5jdGlvbnMKKwkgKiBvbiB0aGUgY2hpcCB0aGUgd2UgYXJlIHJlc3BvbnNpYmxlIGZvcgorCSAqIGNvcmUgZHVtcCBhbmQgZmlybXdhcmUgcmVzZXQgYWZ0ZXIgYW4gZXJyb3IuCisJICovCisJaWYgKHFkZXYtPmZ1bmMgPCBxZGV2LT5hbHRfZnVuYykKKwkJcmV0dXJuIDE7CisKKwkvKiBJZiB3ZSBhcmUgdGhlIGhpZ2hlciBvZiB0aGUgMiBOSUMgZnVuY3Rpb25zCisJICogb24gdGhlIGNoaXAgYW5kIHRoZSBsb3dlciBmdW5jdGlvbiBpcyBub3QKKwkgKiBlbmFibGVkLCB0aGVuIHdlIGFyZSByZXNwb25zaWJsZSBmb3IKKwkgKiBjb3JlIGR1bXAgYW5kIGZpcm13YXJlIHJlc2V0IGFmdGVyIGFuIGVycm9yLgorCSAqLworCXRlbXAgPSAgcWxfcmVhZDMyKHFkZXYsIFNUUyk7CisJaWYgKCEodGVtcCAmICgxIDw8ICg4ICsgcWRldi0+YWx0X2Z1bmMpKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CisKK30KKwogc3RhdGljIGludCBxbF9nZXRfbWJfc3RzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CiAJaW50IGksIHN0YXR1czsKQEAgLTU3LDcgKzEzNSw3IEBACiAJCSAgICBxbF9yZWFkX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAogCQkJCSAgICAgJm1iY3AtPm1ib3hfb3V0W2ldKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZhaWxlZCBtYWlsYm94IHJlYWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJGYWlsZWQgbWFpbGJveCByZWFkLlxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTEzMCw3ICsyMDgsNyBAQAogCWludCBzdGF0dXM7CiAJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CiAKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRW50ZXIhXG4iKTsKKwluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRW50ZXIhXG4iKTsKIAkvKiBHZXQgdGhlIHN0YXR1cyBkYXRhIGFuZCBzdGFydCB1cCBhIHRocmVhZCB0bwogCSAqIGhhbmRsZSB0aGUgcmVxdWVzdC4KIAkgKi8KQEAgLTEzOCw4ICsyMTYsOCBAQAogCW1iY3AtPm91dF9jb3VudCA9IDQ7CiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOwogCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOwogCX0gZWxzZQl7CiAJCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGVhcmx5IHNvCkBAIC0xNjIsOCArMjQwLDggQEAKIAltYmNwLT5vdXRfY291bnQgPSA0OwogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKIAkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CiAJfSBlbHNlCiAJCS8qIFdha2UgdXAgdGhlIHNsZWVwaW5nIG1waV9pZGNfd29yayB0aHJlYWQgdGhhdCBpcwpAQCAtMTgxLDEzICsyNTksMTMgQEAKIAogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIiVzOiBDb3VsZCBub3QgZ2V0IG1haWxib3ggc3RhdHVzLlxuIiwgX19mdW5jX18pOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiJXM6IENvdWxkIG5vdCBnZXQgbWFpbGJveCBzdGF0dXMuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlxZGV2LT5saW5rX3N0YXR1cyA9IG1iY3AtPm1ib3hfb3V0WzFdOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIFVwLlxuIik7CisJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkxpbmsgVXAuXG4iKTsKIAogCS8qIElmIHdlJ3JlIGNvbWluZyBiYWNrIGZyb20gYW4gSURDIGV2ZW50CiAJICogdGhlbiBzZXQgdXAgdGhlIENBTSBhbmQgZnJhbWUgcm91dGluZy4KQEAgLTE5NSw4ICsyNzMsOCBAQAogCWlmICh0ZXN0X2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpKSB7CiAJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UKIAkJCWNsZWFyX2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpOwpAQCAtMjA3LDcgKzI4NSw3IEBACiAJICogdG8gb3VyIGxpa2luZy4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJRdWV1ZSBQb3J0IENvbmZpZyBXb3JrZXIhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlF1ZXVlIFBvcnQgQ29uZmlnIFdvcmtlciFcbiIpOwogCQlzZXRfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpOwogCQkvKiBCZWdpbiBwb2xsZWQgbW9kZSBlYXJseSBzbwogCQkgKiB3ZSBkb24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQKQEAgLTIyOSw3ICszMDcsNyBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBkb3duIEFFTiBicm9rZW4hXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkxpbmsgZG93biBBRU4gYnJva2VuIVxuIik7CiAKIAlxbF9saW5rX29mZihxZGV2KTsKIH0KQEAgLTI0Miw5ICszMjAsOSBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIGluIEFFTiBicm9rZW4hXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlNGUCBpbiBBRU4gYnJva2VuIVxuIik7CiAJZWxzZQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIGluc2VydGlvbiBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiU0ZQIGluc2VydGlvbiBkZXRlY3RlZC5cbiIpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI1Nyw5ICszMzUsOSBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIG91dCBBRU4gYnJva2VuIVxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJTRlAgb3V0IEFFTiBicm9rZW4hXG4iKTsKIAllbHNlCi0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgcmVtb3ZhbCBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiU0ZQIHJlbW92YWwgZGV0ZWN0ZWQuXG4iKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yNzIsMTMgKzM1MCwxMyBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTG9zdCBBRU4gYnJva2VuIVxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJMb3N0IEFFTiBicm9rZW4hXG4iKTsKIAllbHNlIHsKIAkJaW50IGk7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMb3N0IEFFTiBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiTG9zdCBBRU4gZGV0ZWN0ZWQuXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IG1iY3AtPm91dF9jb3VudDsgaSsrKQotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIm1ib3hfb3V0WyVkXSA9IDB4JS4wOHguXG4iLAotCQkJCQlpLCBtYmNwLT5tYm94X291dFtpXSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJICBpLCBtYmNwLT5tYm94X291dFtpXSk7CiAKIAl9CiAKQEAgLTI5MywxNSArMzcxLDE1IEBACiAKIAlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIGRpZCBub3QgaW5pdGlhbGl6ZSFcbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7CiAJfSBlbHNlIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIFJldmlzaW9uICA9IDB4JS4wOHguXG4iLAotCQkJbWJjcC0+bWJveF9vdXRbMV0pOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCisJCQkgIG1iY3AtPm1ib3hfb3V0WzFdKTsKIAkJcWRldi0+ZndfcmV2X2lkID0gbWJjcC0+bWJveF9vdXRbMV07CiAJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCQlpZiAoc3RhdHVzKQotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIGluaXQgQ0FNL1JvdXRpbmcgdGFibGVzLlxuIik7CiAJfQogfQogCkBAIC0zMjAsOCArMzk4LDggQEAKIAltYmNwLT5vdXRfY291bnQgPSAxOwogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKIAkJZ290byBlbmQ7CiAJfQpAQCAtNDEwLDE1ICs0ODgsMTQgQEAKIAkJCW1iY3AtPm1ib3hfb3V0WzBdID0gTUJfQ01EX1NUU19FUlI7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmlybXdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGaXJtd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBBRU5fU1lTX0VSUjoKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJTeXN0ZW0gRXJyb3IuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlN5c3RlbSBFcnJvci5cbiIpOwogCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKIAkJc3RhdHVzID0gLUVJTzsKIAkJYnJlYWs7CkBAIC00MzEsOCArNTA4LDggQEAKIAkJLyogTmVlZCB0byBzdXBwb3J0IEFFTiA4MTEwICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiVW5zdXBwb3J0ZWQgQUUgJS4wOHguXG4iLCBtYmNwLT5tYm94X291dFswXSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJVbnN1cHBvcnRlZCBBRSAlLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzBdKTsKIAkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCiAJfQogZW5kOgpAQCAtNTA1LDggKzU4Miw4IEBACiAJCQlnb3RvIGRvbmU7CiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgY291bnQpKTsKIAotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCSAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtYWlsYm94IGNvbXBsZXRlLlxuIik7CiAJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAlnb3RvIGVuZDsKIApAQCAtNTI5LDYgKzYwNiwyMiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBxbF9tYl9zeXNfZXJyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAwOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9NQUtFX1NZU19FUlI7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJcmV0dXJuIHN0YXR1czsKK30KIAogLyogR2V0IE1QSSBmaXJtd2FyZSB2ZXJzaW9uLiBUaGlzIHdpbGwgYmUgdXNlZCBmb3IKICAqIGRyaXZlciBiYW5uZXIgYW5kIGZvciBldGh0b29sIGluZm8uCkBAIC01NTIsOCArNjQ1LDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgYWJvdXQgZmlybXdhcmUgY29tbWFuZFxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgYWJvdXQgZmlybXdhcmUgY29tbWFuZFxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCkBAIC01ODQsOCArNjc3LDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCkBAIC01OTQsOCArNjg3LDggQEAKIAkgKiBoYXBwZW4uCiAJICovCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzFdICYgMSkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZpcm13YXJlIHdhaXRpbmcgZm9yIGluaXRpYWxpemF0aW9uLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGaXJtd2FyZSB3YWl0aW5nIGZvciBpbml0aWFsaXphdGlvbi5cbiIpOwogCQlzdGF0dXMgPSAtRUlPOwogCX0KIApAQCAtNjI3LDggKzcyMCw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIElEQyBBQ0sgc2VuZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmFpbGVkIElEQyBBQ0sgc2VuZC5cbiIpOwogCQlzdGF0dXMgPSAtRUlPOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtNjU5LDE2ICs3NTEsNzIgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0lOVFJNRFQpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJQb3J0IENvbmZpZyBzZW50LCB3YWl0IGZvciBJREMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlBvcnQgQ29uZmlnIHNlbnQsIHdhaXQgZm9yIElEQy5cbiIpOwogCX0gZWxzZQlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIFNldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBTZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBxbF9tYl9kdW1wX3JhbShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTY0IHJlcV9kbWEsIHUzMiBhZGRyLAorCXUzMiBzaXplKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDk7CisJbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfRFVNUF9SSVNDX1JBTTsKKwltYmNwLT5tYm94X2luWzFdID0gTFNXKGFkZHIpOworCW1iY3AtPm1ib3hfaW5bMl0gPSBNU1cocmVxX2RtYSk7CisJbWJjcC0+bWJveF9pblszXSA9IExTVyhyZXFfZG1hKTsKKwltYmNwLT5tYm94X2luWzRdID0gTVNXKHNpemUpOworCW1iY3AtPm1ib3hfaW5bNV0gPSBMU1coc2l6ZSk7CisJbWJjcC0+bWJveF9pbls2XSA9IE1TVyhNU0QocmVxX2RtYSkpOworCW1iY3AtPm1ib3hfaW5bN10gPSBMU1coTVNEKHJlcV9kbWEpKTsKKwltYmNwLT5tYm94X2luWzhdID0gTVNXKGFkZHIpOworCisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBkdW1wIHJpc2MgUkFNLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIElzc3VlIGEgbWFpbGJveCBjb21tYW5kIHRvIGR1bXAgUklTQyBSQU0uICovCitpbnQgcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB2b2lkICpidWYsCisJCXUzMiByYW1fYWRkciwgaW50IHdvcmRfY291bnQpCit7CisJaW50IHN0YXR1czsKKwljaGFyICpteV9idWY7CisJZG1hX2FkZHJfdCBidWZfZG1hOworCisJbXlfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgd29yZF9jb3VudCAqIHNpemVvZih1MzIpLAorCQkJCQkmYnVmX2RtYSk7CisJaWYgKCFteV9idWYpCisJCXJldHVybiAtRUlPOworCisJc3RhdHVzID0gcWxfbWJfZHVtcF9yYW0ocWRldiwgYnVmX2RtYSwgcmFtX2FkZHIsIHdvcmRfY291bnQpOworCWlmICghc3RhdHVzKQorCQltZW1jcHkoYnVmLCBteV9idWYsIHdvcmRfY291bnQgKiBzaXplb2YodTMyKSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsIHdvcmRfY291bnQgKiBzaXplb2YodTMyKSwgbXlfYnVmLAorCQkJCWJ1Zl9kbWEpOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qIEdldCBsaW5rIHNldHRpbmdzIGFuZCBtYXhpbXVtIGZyYW1lIHNpemUgc2V0dGluZ3MKICAqIGZvciB0aGUgY3VycmVudCBwb3J0LgogICogTW9zdCBsaWtlbHkgd2lsbCBibG9jay4KQEAgLTY5MSwxMiArODM5LDEyIEBACiAJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfSBlbHNlCXsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLAotCQkJIlBhc3NlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJQYXNzZWQgR2V0IFBvcnQgQ29uZmlndXJhdGlvbi5cbiIpOwogCQlxZGV2LT5saW5rX2NvbmZpZyA9IG1iY3AtPm1ib3hfb3V0WzFdOwogCQlxZGV2LT5tYXhfZnJhbWVfc2l6ZSA9IG1iY3AtPm1ib3hfb3V0WzJdOwogCX0KQEAgLTcyMyw4ICs4NzEsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTc2Niw4ICs5MTMsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTc5Myw4ICs5MzksNyBAQAogCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxZGV2LT5pZGVfY29tcGxldGlvbiwKIAkJCQkJCQl3YWl0X3RpbWUpOwogCQlpZiAoIXdhaXRfdGltZSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiSURDIFRpbWVvdXQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJJREMgVGltZW91dC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogTm93IGV4YW1pbmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIElEQyBwcm9jZXNzLgpAQCAtODAyLDE4ICs5NDcsMTcgQEAKIAkJICogbW9yZSB3YWl0IHRpbWUuCiAJCSAqLwogCQlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19FWFQpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CiAJCQl3YWl0X3RpbWUgKz0gKG1iY3AtPm1ib3hfb3V0WzFdID4+IDgpICYgMHgwMDAwMDAwZjsKIAkJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBBRU5fSURDX0NNUExUKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJJREMgU3VjY2Vzcy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIklEQyBTdWNjZXNzLlxuIik7CiAJCQlzdGF0dXMgPSAwOwogCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJJREM6IEludmFsaWQgU3RhdGUgMHglLjA0eC5cbiIsCi0JCQkJbWJjcC0+bWJveF9vdXRbMF0pOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJJREM6IEludmFsaWQgU3RhdGUgMHglLjA0eC5cbiIsCisJCQkJICBtYmNwLT5tYm94X291dFswXSk7CiAJCQlzdGF0dXMgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg0Miw4ICs5ODYsOCBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgTEVEIENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBzZXQgTEVEIENvbmZpZ3VyYXRpb24uXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAKQEAgLTg2OCw4ICsxMDEyLDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgdG8gZ2V0IExFRCBDb25maWd1cmF0aW9uLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gZ2V0IExFRCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfSBlbHNlCiAJCXFkZXYtPmxlZF9jb25maWcgPSBtYmNwLT5tYm94X291dFsxXTsKQEAgLTg5OSwxNiArMTA0MywxNiBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7CiAJCS8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGZpcm13YXJlIGlzCiAJCSAqIGFscmVhZHkgaW4gdGhlIHN0YXRlIHdlIGFyZSB0cnlpbmcgdG8KIAkJICogY2hhbmdlIGl0IHRvLgogCQkgKi8KLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJDb21tYW5kIHBhcmFtZXRlcnMgbWFrZSBubyBjaGFuZ2UuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvbW1hbmQgcGFyYW1ldGVycyBtYWtlIG5vIGNoYW5nZS5cbiIpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtOTM4LDEyICsxMDgyLDEyIEBACiAJfQogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIHRvIGdldCBNUEkgdHJhZmZpYyBjb250cm9sLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gZ2V0IE1QSSB0cmFmZmljIGNvbnRyb2wuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTk5OSw4ICsxMTQzLDggQEAKIAlzdGF0dXMgPSBxbF9tYl9nZXRfcG9ydF9jZmcocWRldik7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBGYWlsZWQgdG8gZ2V0IHBvcnQgY29uZmlnIGRhdGEuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkJ1ZzogRmFpbGVkIHRvIGdldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMTAxMyw4ICsxMTU3LDggQEAKIAlxZGV2LT5tYXhfZnJhbWVfc2l6ZSA9IENGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFOwogCXN0YXR1cyA9IHFsX3NldF9wb3J0X2NmZyhxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBGYWlsZWQgdG8gc2V0IHBvcnQgY29uZmlnIGRhdGEuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkJ1ZzogRmFpbGVkIHRvIHNldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CiAJCWdvdG8gZXJyOwogCX0KIGVuZDoKQEAgLTEwNDYsOCArMTE5MCw4IEBACiAKIAlzd2l0Y2ggKGFlbikgewogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBVbmhhbmRsZWQgSURDIGFjdGlvbi5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQnVnOiBVbmhhbmRsZWQgSURDIGFjdGlvbi5cbiIpOwogCQlicmVhazsKIAljYXNlIE1CX0NNRF9QT1JUX1JFU0VUOgogCWNhc2UgTUJfQ01EX1NUT1BfRlc6CkBAIC0xMDYyLDExICsxMjA2LDExIEBACiAJCWlmICh0aW1lb3V0KSB7CiAJCQlzdGF0dXMgPSBxbF9tYl9pZGNfYWNrKHFkZXYpOwogCQkJaWYgKHN0YXR1cykKLQkJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCQkiQnVnOiBObyBwZW5kaW5nIElEQyFcbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkJ1ZzogTm8gcGVuZGluZyBJREMhXG4iKTsKIAkJfSBlbHNlIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBERUJVRywKLQkJCQkgICAgIklEQyBBQ0sgbm90IHJlcXVpcmVkXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSURDIEFDSyBub3QgcmVxdWlyZWRcbiIpOwogCQkJc3RhdHVzID0gMDsgLyogc3VjY2VzcyAqLwogCQl9CiAJCWJyZWFrOwpAQCAtMTA5NSwxMSArMTIzOSwxMSBAQAogCQlpZiAodGltZW91dCkgewogCQkJc3RhdHVzID0gcWxfbWJfaWRjX2FjayhxZGV2KTsKIAkJCWlmIChzdGF0dXMpCi0JCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkgICAgIkJ1ZzogTm8gcGVuZGluZyBJREMhXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCQkgICJCdWc6IE5vIHBlbmRpbmcgSURDIVxuIik7CiAJCX0gZWxzZSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgREVCVUcsCi0JCQkgICAgIklEQyBBQ0sgbm90IHJlcXVpcmVkXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSURDIEFDSyBub3QgcmVxdWlyZWRcbiIpOwogCQkJc3RhdHVzID0gMDsgLyogc3VjY2VzcyAqLwogCQl9CiAJCWJyZWFrOwpAQCAtMTE0Myw1ICsxMjg3LDE5IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCS8qIElmIHdlJ3JlIG5vdCB0aGUgZG9taW5hbnQgTklDIGZ1bmN0aW9uLAorCSAqIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KKwkgKi8KKwlpZiAoIXFsX293bl9maXJtd2FyZShxZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRG9uJ3Qgb3duIGZpcm13YXJlIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXFsX2NvcmVfZHVtcChxZGV2LCBxZGV2LT5tcGlfY29yZWR1bXApKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJDb3JlIGlzIGR1bXBlZCFcbiIpOworCQlxZGV2LT5jb3JlX2lzX2R1bXBlZCA9IDE7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsCisJCQkmcWRldi0+bXBpX2NvcmVfdG9fbG9nLCA1ICogSFopOworCX0KIAlxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHFkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjYwNDAuYyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKaW5kZXggZjAzZTJlNC4uMTVkNTM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjYwNDAuYworKysgYi9kcml2ZXJzL25ldC9yNjA0MC5jCkBAIC05MzgsNyArOTM4LDcgQEAKIAl1MTYgKmFkcnA7CiAJdTE2IHJlZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWludCBpOwogCiAJLyogTUFDIEFkZHJlc3MgKi8KQEAgLTk1OCwyNSArOTU4LDI0IEBACiAJfQogCS8qIFRvbyBtYW55IG11bHRpY2FzdCBhZGRyZXNzZXMKIAkgKiBhY2NlcHQgYWxsIHRyYWZmaWMgKi8KLQllbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IE1DQVNUX01BWCkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQorCWVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IE1DQVNUX01BWCkgfHwKKwkJIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkKIAkJcmVnIHw9IDB4MDAyMDsKIAogCWlvd3JpdGUxNihyZWcsIGlvYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIEJ1aWxkIHRoZSBoYXNoIHRhYmxlICovCi0JaWYgKGRldi0+bWNfY291bnQgPiBNQ0FTVF9NQVgpIHsKKwlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiBNQ0FTVF9NQVgpIHsKIAkJdTE2IGhhc2hfdGFibGVbNF07CiAJCXUzMiBjcmM7CiAKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJCWhhc2hfdGFibGVbaV0gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWNoYXIgKmFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAotCQkJZG1pID0gZG1pLT5uZXh0OwotCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKIApAQCAtOTk0LDE3ICs5OTMsMTkgQEAKIAkJaW93cml0ZTE2KGhhc2hfdGFibGVbM10sIGlvYWRkciArIE1BUjMpOwogCX0KIAkvKiBNdWx0aWNhc3QgQWRkcmVzcyAxfjQgY2FzZSAqLwotCWZvciAoaSA9IDAsIGRtaTsgKGkgPCBkZXYtPm1jX2NvdW50KSAmJiAoaSA8IE1DQVNUX01BWCk7IGkrKykgewotCQlhZHJwID0gKHUxNiAqKWRtaS0+ZG1pX2FkZHI7Ci0JCWlvd3JpdGUxNihhZHJwWzBdLCBpb2FkZHIgKyBNSURfMUwgKyA4KmkpOwotCQlpb3dyaXRlMTYoYWRycFsxXSwgaW9hZGRyICsgTUlEXzFNICsgOCppKTsKLQkJaW93cml0ZTE2KGFkcnBbMl0sIGlvYWRkciArIE1JRF8xSCArIDgqaSk7Ci0JCWRtaSA9IGRtaS0+bmV4dDsKLQl9Ci0JZm9yIChpID0gZGV2LT5tY19jb3VudDsgaSA8IE1DQVNUX01BWDsgaSsrKSB7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wTCArIDgqaSk7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wTSArIDgqaSk7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wSCArIDgqaSk7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJaWYgKGkgPCBNQ0FTVF9NQVgpIHsKKwkJCWFkcnAgPSAodTE2ICopIGRtaS0+ZG1pX2FkZHI7CisJCQlpb3dyaXRlMTYoYWRycFswXSwgaW9hZGRyICsgTUlEXzFMICsgOCAqIGkpOworCQkJaW93cml0ZTE2KGFkcnBbMV0sIGlvYWRkciArIE1JRF8xTSArIDggKiBpKTsKKwkJCWlvd3JpdGUxNihhZHJwWzJdLCBpb2FkZHIgKyBNSURfMUggKyA4ICogaSk7CisJCX0gZWxzZSB7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfMEwgKyA4ICogaSk7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfME0gKyA4ICogaSk7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfMEggKyA4ICogaSk7CisJCX0KKwkJaSsrOwogCX0KIH0KIApAQCAtMTIyMiw3ICsxMjIzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcjYwNDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHI2MDQwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JEQywgMHg2MDQwKSB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNjBmOTZjNC4uZGZjMzU3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTAxKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsODE2OV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxMjkpLCAwLCAwLCBSVExfQ0ZHXzAgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxMzYpLCAwLCAwLCBSVExfQ0ZHXzIgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxNjcpLCAwLCAwLCBSVExfQ0ZHXzAgfSwKQEAgLTE4Nyw3ICsxODcsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxNjlfcGNpX3RibCk7CiAKIHN0YXRpYyBpbnQgcnhfY29weWJyZWFrID0gMjAwOwotc3RhdGljIGludCB1c2VfZGFjOworc3RhdGljIGludCB1c2VfZGFjID0gLTE7CiBzdGF0aWMgc3RydWN0IHsKIAl1MzIgbXNnX2VuYWJsZTsKIH0gZGVidWcgPSB7IC0xIH07CkBAIC01MTEsNyArNTExLDggQEAKIG1vZHVsZV9wYXJhbShyeF9jb3B5YnJlYWssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywgIkNvcHkgYnJlYWtwb2ludCBmb3IgY29weS1vbmx5LXRpbnktZnJhbWVzIik7CiBtb2R1bGVfcGFyYW0odXNlX2RhYywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModXNlX2RhYywgIkVuYWJsZSBQQ0kgREFDLiBVbnNhZmUgb24gMzIgYml0IFBDSSBzbG90LiIpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfZGFjLCAiRW5hYmxlIFBDSSBEQUMuIC0xIGRlZmF1bHRzIG9uIGZvciBQQ0kgRXhwcmVzcyBvbmx5LiIKKyIgVW5zYWZlIG9uIDMyIGJpdCBQQ0kgc2xvdC4iKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZGVidWcubXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyB2ZXJib3NpdHkgbGV2ZWwgKDA9bm9uZSwgLi4uLCAxNj1hbGwpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC03NDQsMTIgKzc0NSwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCWlmICh0cC0+bGlua19vayhpb2FkZHIpKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHRwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogbGluayB1cFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0aWZfaW5mbyh0cCwgaWZ1cCwgZGV2LCAibGluayB1cFxuIik7CiAJfSBlbHNlIHsKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24odHApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCW5ldGlmX2luZm8odHAsIGlmZG93biwgZGV2LCAibGluayBkb3duXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTg2MiwxMSArODYxLDggQEAKIAl9IGVsc2UgaWYgKGF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCVJUTF9XMzIoVEJJQ1NSLCByZWcgfCBUQklOd0VuYWJsZSB8IFRCSU53UmVzdGFydCk7CiAJZWxzZSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayh0cCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkgICAgICAgImluY29ycmVjdCBzcGVlZCBzZXR0aW5nIHJlZnVzZWQgaW4gVEJJIG1vZGVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJfQorCQluZXRpZl93YXJuKHRwLCBsaW5rLCBkZXYsCisJCQkgICAiaW5jb3JyZWN0IHNwZWVkIHNldHRpbmcgcmVmdXNlZCBpbiBUQkkgbW9kZVxuIik7CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCX0KIApAQCAtOTAxLDkgKzg5Nyw5IEBACiAJCSAgICAodHAtPm1hY192ZXJzaW9uICE9IFJUTF9HSUdBX01BQ19WRVJfMTUpICYmCiAJCSAgICAodHAtPm1hY192ZXJzaW9uICE9IFJUTF9HSUdBX01BQ19WRVJfMTYpKSB7CiAJCQlnaWdhX2N0cmwgfD0gQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGOwotCQl9IGVsc2UgaWYgKG5ldGlmX21zZ19saW5rKHRwKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBIWSBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJbmV0aWZfaW5mbyh0cCwgbGluaywgZGV2LAorCQkJCSAgICJQSFkgZG9lcyBub3Qgc3VwcG9ydCAxMDAwTWJwc1xuIik7CiAJCX0KIAogCQlibWNyID0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOwpAQCAtMjcwNSw4ICsyNzAxLDcgQEAKIAlpZiAodHAtPmxpbmtfb2soaW9hZGRyKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKHRwKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBIWSByZXNldCB1bnRpbCBsaW5rIHVwXG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX3dhcm4odHAsIGxpbmssIGRldiwgIlBIWSByZXNldCB1bnRpbCBsaW5rIHVwXG4iKTsKIAogCXRwLT5waHlfcmVzZXRfZW5hYmxlKGlvYWRkcik7CiAKQEAgLTI3NzYsOCArMjc3MSw3IEBACiAJCQlyZXR1cm47CiAJCW1zbGVlcCgxKTsKIAl9Ci0JaWYgKG5ldGlmX21zZ19saW5rKHRwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUEhZIHJlc2V0IGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfZXJyKHRwLCBsaW5rLCBkZXYsICJQSFkgcmVzZXQgZmFpbGVkXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKQEAgLTI4MTEsOCArMjgwNSw4IEBACiAJICovCiAJcnRsODE2OV9zZXRfc3BlZWQoZGV2LCBBVVRPTkVHX0VOQUJMRSwgU1BFRURfMTAwMCwgRFVQTEVYX0ZVTEwpOwogCi0JaWYgKChSVExfUjgoUEhZc3RhdHVzKSAmIFRCSV9FbmFibGUpICYmIG5ldGlmX21zZ19saW5rKHRwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBUQkkgYXV0by1uZWdvdGlhdGluZ1xuIiwgZGV2LT5uYW1lKTsKKwlpZiAoUlRMX1I4KFBIWXN0YXR1cykgJiBUQklfRW5hYmxlKQorCQluZXRpZl9pbmZvKHRwLCBsaW5rLCBkZXYsICJUQkkgYXV0by1uZWdvdGlhdGluZ1xuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yYXJfc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCAqYWRkcikKQEAgLTI5ODAsNiArMjk3NCw3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHI7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJjOworCWludCB0aGlzX3VzZV9kYWMgPSB1c2VfZGFjOwogCiAJaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlcyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAlcyBsb2FkZWRcbiIsCkBAIC0zMDEyLDggKzMwMDcsNyBAQAogCS8qIGVuYWJsZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXAgYW5kIGhvdHBsdWcgc2V0dXApICovCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMgPCAwKSB7Ci0JCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZW5hYmxlIGZhaWx1cmVcbiIpOworCQluZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsICJlbmFibGUgZmFpbHVyZVxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX2Rldl8xOwogCX0KIApAQCAtMzAyMyw0NSArMzAxNyw0NiBAQAogCiAJLyogbWFrZSBzdXJlIFBDSSBiYXNlIGFkZHIgMSBpcyBNTUlPICovCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIHJlZ2lvbikgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicmVnaW9uICMlZCBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIsCi0JCQkJcmVnaW9uKTsKLQkJfQorCQluZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsCisJCQkgICJyZWdpb24gIyVkIG5vdCBhbiBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIiwKKwkJCSAgcmVnaW9uKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfbXdpXzM7CiAJfQogCiAJLyogY2hlY2sgZm9yIHdlaXJkL2Jyb2tlbiBQQ0kgcmVnaW9uIHJlcG9ydGluZyAqLwogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHJlZ2lvbikgPCBSODE2OV9SRUdTX1NJWkUpIHsKLQkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiSW52YWxpZCBQQ0kgcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iKTsKLQkJfQorCQluZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsCisJCQkgICJJbnZhbGlkIFBDSSByZWdpb24gc2l6ZShzKSwgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9td2lfMzsKIAl9CiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgTU9EVUxFTkFNRSk7CiAJaWYgKHJjIDwgMCkgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZXF1ZXN0IHJlZ2lvbnMuXG4iKTsKKwkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgZGV2LCAiY291bGQgbm90IHJlcXVlc3QgcmVnaW9uc1xuIik7CiAJCWdvdG8gZXJyX291dF9td2lfMzsKIAl9CiAKIAl0cC0+Y3BfY21kID0gUENJTXVsUlcgfCBSeENoa1N1bTsKIAorCXRwLT5wY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOworCWlmICghdHAtPnBjaWVfY2FwKQorCQluZXRpZl9pbmZvKHRwLCBwcm9iZSwgZGV2LCAibm8gUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIik7CisKKwlpZiAodGhpc191c2VfZGFjIDwgMCkKKwkJdGhpc191c2VfZGFjID0gdHAtPnBjaWVfY2FwICE9IDA7CisKIAlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmCi0JICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICYmIHVzZV9kYWMpIHsKKwkgICAgdGhpc191c2VfZGFjICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCW5ldGlmX2luZm8odHAsIHByb2JlLCBkZXYsICJ1c2luZyA2NC1iaXQgRE1BXG4iKTsKIAkJdHAtPmNwX2NtZCB8PSBQQ0lEQUM7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCX0gZWxzZSB7CiAJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJCSJETUEgY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKLQkJCX0KKwkJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwgIkRNQSBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CiAJCQlnb3RvIGVycl9vdXRfZnJlZV9yZXNfNDsKIAkJfQogCX0KQEAgLTMwNjksMTYgKzMwNjQsMTEgQEAKIAkvKiBpb3JlbWFwIE1NSU8gcmVnaW9uICovCiAJaW9hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcmVnaW9uKSwgUjgxNjlfUkVHU19TSVpFKTsKIAlpZiAoIWlvYWRkcikgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7CisJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwgImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzXzQ7CiAJfQogCi0JdHAtPnBjaWVfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JaWYgKCF0cC0+cGNpZV9jYXAgJiYgbmV0aWZfbXNnX3Byb2JlKHRwKSkKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIm5vIFBDSSBFeHByZXNzIGNhcGFiaWxpdHlcbiIpOwotCiAJUlRMX1cxNihJbnRyTWFzaywgMHgwMDAwKTsKIAogCS8qIFNvZnQgcmVzZXQgdGhlIGNoaXAuICovCkBAIC0zMTAwLDEwICszMDkwLDggQEAKIAogCS8qIFVzZSBhcHByb3ByaWF0ZSBkZWZhdWx0IGlmIHVua25vd24gKi8KIAlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19OT05FKSB7Ci0JCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKSB7Ci0JCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsCi0JCQkJICAgInVua25vd24gTUFDLCB1c2luZyBmYW1pbHkgZGVmYXVsdFxuIik7Ci0JCX0KKwkJbmV0aWZfbm90aWNlKHRwLCBwcm9iZSwgZGV2LAorCQkJICAgICAidW5rbm93biBNQUMsIHVzaW5nIGZhbWlseSBkZWZhdWx0XG4iKTsKIAkJdHAtPm1hY192ZXJzaW9uID0gY2ZnLT5kZWZhdWx0X3ZlcjsKIAl9CiAKQEAgLTMxODUsMTkgKzMxNzMsMTAgQEAKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJdTMyIHhpZCA9IFJUTF9SMzIoVHhDb25maWcpICYgMHg5Y2YwZjhmZjsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgMHglbHgsICIKLQkJICAgICAgICIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCwgIgotCQkgICAgICAgIlhJRCAlMDh4IElSUSAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUsCi0JCSAgICAgICBkZXYtPmJhc2VfYWRkciwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCi0JCSAgICAgICBkZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRyWzNdLAotCQkgICAgICAgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSwgeGlkLCBkZXYtPmlycSk7Ci0JfQorCW5ldGlmX2luZm8odHAsIHByb2JlLCBkZXYsICIlcyBhdCAweCVseCwgJXBNLCBYSUQgJTA4eCBJUlEgJWRcbiIsCisJCSAgIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUsCisJCSAgIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLAorCQkgICAodTMyKShSVExfUjMyKFR4Q29uZmlnKSAmIDB4OWNmMGY4ZmYpLCBkZXYtPmlycSk7CiAKIAlydGw4MTY5X2luaXRfcGh5KGRldiwgdHApOwogCkBAIC00MTM2LDEwICs0MTE1LDEwIEBACiAKIAlyZXQgPSBydGw4MTY5X29wZW4oZGV2KTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSAmJiBuZXRpZl9tc2dfZHJ2KHRwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJlaW5pdCBmYWlsdXJlIChzdGF0dXMgPSAlZCkuIgotCQkJICAgICAgICIgUmVzY2hlZHVsaW5nLlxuIiwgZGV2LT5uYW1lLCByZXQpOwotCQl9CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9lcnIodHAsIGRydiwgZGV2LAorCQkJCSAgInJlaW5pdCBmYWlsdXJlIChzdGF0dXMgPSAlZCkuIFJlc2NoZWR1bGluZ1xuIiwKKwkJCQkgIHJldCk7CiAJCXJ0bDgxNjlfc2NoZWR1bGVfd29yayhkZXYsIHJ0bDgxNjlfcmVpbml0X3Rhc2spOwogCX0KIApAQCAtNDE2OSwxMCArNDE0OCw4IEBACiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKIAl9IGVsc2UgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpICYmIG5ldGlmX21zZ19pbnRyKHRwKSkgewotCQkJcHJpbnRrKEtFUk5fRU1FUkcgUEZYICIlczogUnggYnVmZmVycyBzaG9ydGFnZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQl9CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9lbWVyZyh0cCwgaW50ciwgZGV2LCAiUnggYnVmZmVycyBzaG9ydGFnZVxuIik7CiAJCXJ0bDgxNjlfc2NoZWR1bGVfd29yayhkZXYsIHJ0bDgxNjlfcmVzZXRfdGFzayk7CiAJfQogCkBAIC00MjYwLDExICs0MjM3LDcgQEAKIAl1MzIgb3B0czE7CiAKIAlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYodHApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCX0KKwkJbmV0aWZfZXJyKHRwLCBkcnYsIGRldiwgIkJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJZ290byBlcnJfc3RvcDsKIAl9CiAKQEAgLTQzMjYsMTEgKzQyOTksOCBAQAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NUQVRVUywgJnBjaV9zdGF0dXMpOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKHRwKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogUENJIGVycm9yIChjbWQgPSAweCUwNHgsIHN0YXR1cyA9IDB4JTA0eCkuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwY2lfY21kLCBwY2lfc3RhdHVzKTsKLQl9CisJbmV0aWZfZXJyKHRwLCBpbnRyLCBkZXYsICJQQ0kgZXJyb3IgKGNtZCA9IDB4JTA0eCwgc3RhdHVzID0gMHglMDR4KVxuIiwKKwkJICBwY2lfY21kLCBwY2lfc3RhdHVzKTsKIAogCS8qCiAJICogVGhlIHJlY292ZXJ5IHNlcXVlbmNlIGJlbG93IGFkbWl0cyBhIHZlcnkgZWxhYm9yYXRlZCBleHBsYW5hdGlvbjoKQEAgLTQzNTQsOCArNDMyNCw3IEBACiAKIAkvKiBUaGUgaW5mYW1vdXMgREFDIGYqY2t1cCBvbmx5IGhhcHBlbnMgYXQgYm9vdCB0aW1lICovCiAJaWYgKCh0cC0+Y3BfY21kICYgUENJREFDKSAmJiAhdHAtPmRpcnR5X3J4ICYmICF0cC0+Y3VyX3J4KSB7Ci0JCWlmIChuZXRpZl9tc2dfaW50cih0cCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogZGlzYWJsaW5nIFBDSSBEQUMuXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9pbmZvKHRwLCBpbnRyLCBkZXYsICJkaXNhYmxpbmcgUENJIERBQ1xuIik7CiAJCXRwLT5jcF9jbWQgJj0gflBDSURBQzsKIAkJUlRMX1cxNihDUGx1c0NtZCwgdHAtPmNwX2NtZCk7CiAJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSElHSERNQTsKQEAgLTQ0ODIsMTEgKzQ0NTEsOCBAQAogCQlpZiAoc3RhdHVzICYgRGVzY093bikKIAkJCWJyZWFrOwogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgUnhSRVMpKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2Vycih0cCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICIlczogUnggRVJST1IuIHN0YXR1cyA9ICUwOHhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJCX0KKwkJCW5ldGlmX2luZm8odHAsIHJ4X2VyciwgZGV2LCAiUnggRVJST1IuIHN0YXR1cyA9ICUwOHhcbiIsCisJCQkJICAgc3RhdHVzKTsKIAkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlpZiAoc3RhdHVzICYgKFJ4UldUIHwgUnhSVU5UKSkKIAkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTQ1NDksOCArNDUxNSw4IEBACiAJdHAtPmN1cl9yeCA9IGN1cl9yeDsKIAogCWRlbHRhID0gcnRsODE2OV9yeF9maWxsKHRwLCBkZXYsIHRwLT5kaXJ0eV9yeCwgdHAtPmN1cl9yeCk7Ci0JaWYgKCFkZWx0YSAmJiBjb3VudCAmJiBuZXRpZl9tc2dfaW50cih0cCkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBSeCBidWZmZXIgYWxsb2NhdGVkXG4iLCBkZXYtPm5hbWUpOworCWlmICghZGVsdGEgJiYgY291bnQpCisJCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwgIm5vIFJ4IGJ1ZmZlciBhbGxvY2F0ZWRcbiIpOwogCXRwLT5kaXJ0eV9yeCArPSBkZWx0YTsKIAogCS8qCkBAIC00NTYwLDggKzQ1MjYsOCBAQAogCSAqICAgYWZ0ZXIgcmVmaWxsID8KIAkgKiAtIGhvdyBkbyBvdGhlcnMgZHJpdmVyIGhhbmRsZSB0aGlzIGNvbmRpdGlvbiAoVWggb2guLi4pLgogCSAqLwotCWlmICgodHAtPmRpcnR5X3J4ICsgTlVNX1JYX0RFU0MgPT0gdHAtPmN1cl9yeCkgJiYgbmV0aWZfbXNnX2ludHIodHApKQotCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFJ4IGJ1ZmZlcnMgZXhoYXVzdGVkXG4iLCBkZXYtPm5hbWUpOworCWlmICh0cC0+ZGlydHlfcnggKyBOVU1fUlhfREVTQyA9PSB0cC0+Y3VyX3J4KQorCQluZXRpZl9lbWVyZyh0cCwgaW50ciwgZGV2LCAiUnggYnVmZmVycyBleGhhdXN0ZWRcbiIpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNDYxNiwxMCArNDU4Miw5IEBACiAKIAkJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpKQogCQkJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwotCQkJZWxzZSBpZiAobmV0aWZfbXNnX2ludHIodHApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVycnVwdCAlMDR4IGluIHBvbGxcbiIsCi0JCQkJZGV2LT5uYW1lLCBzdGF0dXMpOwotCQkJfQorCQkJZWxzZQorCQkJCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwKKwkJCQkJICAgImludGVycnVwdCAlMDR4IGluIHBvbGxcbiIsIHN0YXR1cyk7CiAJCX0KIAogCQkvKiBXZSBvbmx5IGdldCBhIG5ldyBNU0kgaW50ZXJydXB0IHdoZW4gYWxsIGFjdGl2ZSBpcnEKQEAgLTQ3NTUsMjcgKzQ3MjAsMjIgQEAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJaWYgKG5ldGlmX21zZ19saW5rKHRwKSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQl9CisJCW5ldGlmX25vdGljZSh0cCwgbGluaywgZGV2LCAiUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkXG4iKTsKIAkJcnhfbW9kZSA9CiAJCSAgICBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMgfAogCQkgICAgQWNjZXB0QWxsUGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgcGVyZmVjdGx5IC0tIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJdW5zaWduZWQgaW50IGk7CiAKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CiAJCQlyeF9tb2RlIHw9IEFjY2VwdE11bHRpY2FzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3JydW5uZXIuYyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuYwppbmRleCAxYzI1NzA5Li4yNjZiYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ycnVubmVyLmMKKysrIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5jCkBAIC0xNjg4LDcgKzE2ODgsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJyX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShycl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfRVNTRU5USUFMLCBQQ0lfREVWSUNFX0lEX0VTU0VOVElBTF9ST0FEUlVOTkVSLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggM2M0ODM2ZC4uNDNiYzY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAgKiBTMklPIGRldmljZSB0YWJsZS4KICAqIFRoaXMgdGFibGUgbGlzdHMgYWxsIHRoZSBkZXZpY2VzIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzMmlvX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoczJpb190YmwpID0gewogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfUzJJT19XSU4sCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfUzJJT19VTkksCkBAIC01MDU1LDggKzUwNTUsOCBAQAogCX0KIAogCS8qICBVcGRhdGUgaW5kaXZpZHVhbCBNX0NBU1QgYWRkcmVzcyBsaXN0ICovCi0JaWYgKCghc3AtPm1fY2FzdF9mbGcpICYmIGRldi0+bWNfY291bnQpIHsKLQkJaWYgKGRldi0+bWNfY291bnQgPgorCWlmICgoIXNwLT5tX2Nhc3RfZmxnKSAmJiBuZXRkZXZfbWNfY291bnQoZGV2KSkgeworCQlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPgogCQkgICAgKGNvbmZpZy0+bWF4X21jX2FkZHIgLSBjb25maWctPm1heF9tYWNfYWRkcikpIHsKIAkJCURCR19QUklOVChFUlJfREJHLAogCQkJCSAgIiVzOiBObyBtb3JlIFJ4IGZpbHRlcnMgY2FuIGJlIGFkZGVkIC0gIgpAQCAtNTA2Niw3ICs1MDY2LDcgQEAKIAkJfQogCiAJCXByZXZfY250ID0gc3AtPm1jX2FkZHJfY291bnQ7Ci0JCXNwLT5tY19hZGRyX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKwkJc3AtPm1jX2FkZHJfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCQkvKiBDbGVhciBvdXQgdGhlIHByZXZpb3VzIGxpc3Qgb2YgTWMgaW4gdGhlIEgvVy4gKi8KIAkJZm9yIChpID0gMDsgaSA8IHByZXZfY250OyBpKyspIHsKQEAgLTUwOTIsOCArNTA5Miw4IEBACiAJCX0KIAogCQkvKiBDcmVhdGUgdGhlIG5ldyBSeCBmaWx0ZXIgbGlzdCBhbmQgdXBkYXRlIHRoZSBzYW1lIGluIEgvVy4gKi8KLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCW1lbWNweShzcC0+dXNyX2FkZHJzW2ldLmFkZHIsIG1jbGlzdC0+ZG1pX2FkZHIsCiAJCQkgICAgICAgRVRIX0FMRU4pOwogCQkJbWFjX2FkZHIgPSAwOwpAQCAtNTEyMSw2ICs1MTIxLDcgQEAKIAkJCQkJICBkZXYtPm5hbWUpOwogCQkJCXJldHVybjsKIAkJCX0KKwkJCWkrKzsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCA1NjRkNGQ3Li45OTQ0ZTVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjE2MSwxMyArMjE2MSwxMyBAQAogCSAqIFhYWCBpZiB0aGUgdGFibGUgb3ZlcmZsb3dzICovCiAKIAlpZHggPSAxOwkJLyogc2tpcCBzdGF0aW9uIGFkZHJlc3MgKi8KLQltY2xpc3QgPSBkZXYtPm1jX2xpc3Q7Ci0Jd2hpbGUgKG1jbGlzdCAmJiAoaWR4IDwgTUFDX0FERFJfQ09VTlQpKSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKKwkJaWYgKGlkeCA9PSBNQUNfQUREUl9DT1VOVCkKKwkJCWJyZWFrOwogCQlyZWcgPSBzYm1hY19hZGRyMnJlZyhtY2xpc3QtPmRtaV9hZGRyKTsKIAkJcG9ydCA9IHNjLT5zYm1fYmFzZSArIFJfTUFDX0FERFJfQkFTRSsoaWR4ICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAJCV9fcmF3X3dyaXRlcShyZWcsIHBvcnQpOwogCQlpZHgrKzsKLQkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKaW5kZXggZTM1MDUwMy4uZDg3YzQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwpAQCAtNDI5LDEzICs0MjksMTMgQEAKIAl1MzIgbWFyMCA9IDAsIG1hcjEgPSAwOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8Ci0JICAgIGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0IHx8CisJICAgIG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCB8fAogCSAgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCiAJCW1hcjAgPSBtYXIxID0gMHhmZmZmZmZmZjsKIAllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKLQkJZm9yIChtY19saXN0ID0gZGV2LT5tY19saXN0OyBtY19saXN0OyBtY19saXN0ID0gbWNfbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBkZXYpIHsKIAkJCXUzMiBjcmM7CiAJCQl1bnNpZ25lZCBiaXQgPSAwOwogCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2M5MjAzMV9wY2lfZGV2aWNlX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzYzkyMDMxX3BjaV9kZXZpY2VfaWRfdGFibGUpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDIwMzEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIDB4ODEzOSkgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMDg4LCAweDIwMzEpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggNDY5OTdlMS4uODhmMmZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMTYwMiwxMSArMTYwMiwxMCBAQAogc3RhdGljIHZvaWQgZWZ4X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0X2Rldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAJdW5pb24gZWZ4X211bHRpY2FzdF9oYXNoICptY19oYXNoID0gJmVmeC0+bXVsdGljYXN0X2hhc2g7CiAJdTMyIGNyYzsKIAlpbnQgYml0OwotCWludCBpOwogCiAJZWZ4LT5wcm9taXNjdW91cyA9ICEhKG5ldF9kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpOwogCkBAIC0xNjE1LDExICsxNjE0LDEwIEBACiAJCW1lbXNldChtY19oYXNoLCAweGZmLCBzaXplb2YoKm1jX2hhc2gpKTsKIAl9IGVsc2UgewogCQltZW1zZXQobWNfaGFzaCwgMHgwMCwgc2l6ZW9mKCptY19oYXNoKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXRfZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3QsIG5ldF9kZXYpIHsKIAkJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNfbGlzdC0+ZG1pX2FkZHIpOwogCQkJYml0ID0gY3JjICYgKEVGWF9NQ0FTVF9IQVNIX0VOVFJJRVMgLSAxKTsKIAkJCXNldF9iaXRfbGUoYml0LCBtY19oYXNoLT5ieXRlKTsKLQkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKIAkJLyogQnJvYWRjYXN0IHBhY2tldHMgZ28gdGhyb3VnaCB0aGUgbXVsdGljYXN0IGhhc2ggZmlsdGVyLgpAQCAtMTk0MCw3ICsxOTM4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogUENJIGRldmljZSBJRCB0YWJsZSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVmeF9wY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGVmeF9wY2lfdGFibGUpID0gewogCXtQQ0lfREVWSUNFKEVGWF9WRU5ESURfU0ZDLCBGQUxDT05fQV9QX0RFVklEKSwKIAkgLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZmYWxjb25fYTFfbmljX3R5cGV9LAogCXtQQ0lfREVWSUNFKEVGWF9WRU5ESURfU0ZDLCBGQUxDT05fQl9QX0RFVklEKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaCBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaAppbmRleCBhNjE1YWMwLi43ZWZmMGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCkBAIC03OSw4ICs3OSw2IEBACiAKIC8qIEdsb2JhbCAqLwogZXh0ZXJuIHZvaWQgZWZ4X3NjaGVkdWxlX3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSB0eXBlKTsKLWV4dGVybiB2b2lkIGVmeF9zdXNwZW5kKHN0cnVjdCBlZnhfbmljICplZngpOwotZXh0ZXJuIHZvaWQgZWZ4X3Jlc3VtZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywKIAkJCQkgICAgaW50IHJ4X3VzZWNzLCBib29sIHJ4X2FkYXB0aXZlKTsKIGV4dGVybiBpbnQgZWZ4X3JlcXVlc3RfcG93ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IG13LCBjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDZjMGJiZWQuLmQ5ZjljMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsIGVjbWQpOwogCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CiAKLQkvKiBGYWxjb24gR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCisJLyogR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCiAJZWNtZC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMGJhc2VUX0hhbGY7CiAJLyogQm90aCBNQUNzIHN1cHBvcnQgcGF1c2UgZnJhbWVzIChiaWRpcmVjdGlvbmFsIGFuZCByZXNwb25kLW9ubHkpICovCiAJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlOwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCWludCByYzsKIAotCS8qIEZhbGNvbiBHTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwME1icHMgSEQgKi8KKwkvKiBHTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwME1icHMgSEQgKi8KIAlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCAmJiBlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKIAkJRUZYX0xPRyhlZngsICJyZWplY3RpbmcgdW5zdXBwb3J0ZWQgMTAwME1icHMgSEQiCiAJCQkiIHNldHRpbmdcbiIpOwpAQCAtMzQyLDggKzM0Miw4IEBACiAJdW5zaWduZWQgaW50IG4gPSAwLCBpOwogCWVudW0gZWZ4X2xvb3BiYWNrX21vZGUgbW9kZTsKIAotCWVmeF9maWxsX3Rlc3QobisrLCBzdHJpbmdzLCBkYXRhLCAmdGVzdHMtPm1kaW8sCi0JCSAgICAgICJjb3JlIiwgMCwgIm1kaW8iLCBOVUxMKTsKKwllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5waHlfYWxpdmUsCisJCSAgICAgICJwaHkiLCAwLCAiYWxpdmUiLCBOVUxMKTsKIAllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5udnJhbSwKIAkJICAgICAgImNvcmUiLCAwLCAibnZyYW0iLCBOVUxMKTsKIAllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5pbnRlcnJ1cHQsCkBAIC0zNzksNyArMzc5LDcgQEAKIAkJCWlmIChuYW1lID09IE5VTEwpCiAJCQkJYnJlYWs7CiAKLQkJCWVmeF9maWxsX3Rlc3QobisrLCBzdHJpbmdzLCBkYXRhLCAmdGVzdHMtPnBoeVtpXSwKKwkJCWVmeF9maWxsX3Rlc3QobisrLCBzdHJpbmdzLCBkYXRhLCAmdGVzdHMtPnBoeV9leHRbaV0sCiAJCQkJICAgICAgInBoeSIsIDAsIG5hbWUsIE5VTEwpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IDlkMDA5YzQuLjFiOGQ4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTkwOSw2ICs5MDksOCBAQAogCQllZngtPndhbnRlZF9mYyA9IEVGWF9GQ19SWCB8IEVGWF9GQ19UWDsKIAllbHNlCiAJCWVmeC0+d2FudGVkX2ZjID0gRUZYX0ZDX1JYOworCWlmIChlZngtPm1kaW8ubW1kcyAmIE1ESU9fREVWU19BTikKKwkJZWZ4LT53YW50ZWRfZmMgfD0gRUZYX0ZDX0FVVE87CiAKIAkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHN0YXRzICovCiAJcmMgPSBlZnhfbmljX2FsbG9jX2J1ZmZlcihlZngsICZlZngtPnN0YXRzX2J1ZmZlciwKQEAgLTEwMDYsNyArMTAwOCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ4X25pY19yZWdpc3Rlcl90ZXN0IGZhbGNvbl9iMF9yZWdpc3Rlcl90ZXN0c1tdID0gewogCXsgRlJfQVpfQURSX1JFR0lPTiwKLQkgIEVGWF9PV09SRDMyKDB4MDAwMUZGRkYsIDB4MDAwMUZGRkYsIDB4MDAwMUZGRkYsIDB4MDAwMUZGRkYpIH0sCisJICBFRlhfT1dPUkQzMigweDAwMDNGRkZGLCAweDAwMDNGRkZGLCAweDAwMDNGRkZGLCAweDAwMDNGRkZGKSB9LAogCXsgRlJfQVpfUlhfQ0ZHLAogCSAgRUZYX09XT1JEMzIoMHhGRkZGRkZGRSwgMHgwMDAxN0ZGRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkgfSwKIAl7IEZSX0FaX1RYX0NGRywKQEAgLTE3MjgsNyArMTczMCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIFJldmlzaW9uLWRlcGVuZGVudCBhdHRyaWJ1dGVzIHVzZWQgYnkgZWZ4LmMKKyAqIFJldmlzaW9uLWRlcGVuZGVudCBhdHRyaWJ1dGVzIHVzZWQgYnkgZWZ4LmMgYW5kIG5pYy5jCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCmluZGV4IGY2NmIzZGEuLmM0ODY2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwpAQCAtODk2LDI5ICs4OTYsNzMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBlZnhfbWNkaV9oYW5kbGVfYXNzZXJ0aW9uKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgaW50IGVmeF9tY2RpX252cmFtX3Rlc3Qoc3RydWN0IGVmeF9uaWMgKmVmeCwgdW5zaWduZWQgaW50IHR5cGUpCiB7Ci0JdW5pb24gewotCQl1OCBhc3NlcnRzW01DX0NNRF9HRVRfQVNTRVJUU19JTl9MRU5dOwotCQl1OCByZWJvb3RbTUNfQ01EX1JFQk9PVF9JTl9MRU5dOwotCX0gaW5idWY7Ci0JdTggYXNzZXJ0aW9uW01DX0NNRF9HRVRfQVNTRVJUU19PVVRfTEVOXTsKKwl1OCBpbmJ1ZltNQ19DTURfTlZSQU1fVEVTVF9JTl9MRU5dOworCXU4IG91dGJ1ZltNQ19DTURfTlZSQU1fVEVTVF9PVVRfTEVOXTsKKwlpbnQgcmM7CisKKwlNQ0RJX1NFVF9EV09SRChpbmJ1ZiwgTlZSQU1fVEVTVF9JTl9UWVBFLCB0eXBlKTsKKworCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX05WUkFNX1RFU1QsIGluYnVmLCBzaXplb2YoaW5idWYpLAorCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCBOVUxMKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXN3aXRjaCAoTUNESV9EV09SRChvdXRidWYsIE5WUkFNX1RFU1RfT1VUX1JFU1VMVCkpIHsKKwljYXNlIE1DX0NNRF9OVlJBTV9URVNUX1BBU1M6CisJY2FzZSBNQ19DTURfTlZSQU1fVEVTVF9OT1RTVVBQOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9Cit9CisKK2ludCBlZnhfbWNkaV9udnJhbV90ZXN0X2FsbChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXUzMiBudnJhbV90eXBlczsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwlpbnQgcmM7CisKKwlyYyA9IGVmeF9tY2RpX252cmFtX3R5cGVzKGVmeCwgJm52cmFtX3R5cGVzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXR5cGUgPSAwOworCXdoaWxlIChudnJhbV90eXBlcyAhPSAwKSB7CisJCWlmIChudnJhbV90eXBlcyAmIDEpIHsKKwkJCXJjID0gZWZ4X21jZGlfbnZyYW1fdGVzdChlZngsIHR5cGUpOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKwkJfQorCQl0eXBlKys7CisJCW52cmFtX3R5cGVzID4+PSAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVmeF9tY2RpX3JlYWRfYXNzZXJ0aW9uKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJdTggaW5idWZbTUNfQ01EX0dFVF9BU1NFUlRTX0lOX0xFTl07CisJdTggb3V0YnVmW01DX0NNRF9HRVRfQVNTRVJUU19PVVRfTEVOXTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MsIGluZGV4LCBvZnN0OwogCWNvbnN0IGNoYXIgKnJlYXNvbjsKIAlzaXplX3Qgb3V0bGVuOwogCWludCByZXRyeTsKIAlpbnQgcmM7CiAKLQkvKiBDaGVjayBpZiB0aGUgTUMgaXMgaW4gdGhlIGFzc2VydGlvbiBoYW5kbGVyLCByZXRyeWluZyB0d2ljZS4gT25jZQorCS8qIEF0dGVtcHQgdG8gcmVhZCBhbnkgc3RvcmVkIGFzc2VydGlvbiBzdGF0ZSBiZWZvcmUgd2UgcmVib290CisJICogdGhlIG1jZncgb3V0IG9mIHRoZSBhc3NlcnRpb24gaGFuZGxlci4gUmV0cnkgdHdpY2UsIG9uY2UKIAkgKiBiZWNhdXNlIGEgYm9vdC10aW1lIGFzc2VydGlvbiBtaWdodCBjYXVzZSB0aGlzIGNvbW1hbmQgdG8gZmFpbAogCSAqIHdpdGggRUlOVFIuIEFuZCBvbmNlIGFnYWluIGJlY2F1c2UgR0VUX0FTU0VSVFMgY2FuIHJhY2Ugd2l0aAogCSAqIE1DX0NNRF9SRUJPT1QgcnVubmluZyBvbiB0aGUgb3RoZXIgcG9ydC4gKi8KIAlyZXRyeSA9IDI7CiAJZG8gewotCQlNQ0RJX1NFVF9EV09SRChpbmJ1Zi5hc3NlcnRzLCBHRVRfQVNTRVJUU19JTl9DTEVBUiwgMCk7CisJCU1DRElfU0VUX0RXT1JEKGluYnVmLCBHRVRfQVNTRVJUU19JTl9DTEVBUiwgMSk7CiAJCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX0dFVF9BU1NFUlRTLAotCQkJCSAgaW5idWYuYXNzZXJ0cywgTUNfQ01EX0dFVF9BU1NFUlRTX0lOX0xFTiwKLQkJCQkgIGFzc2VydGlvbiwgc2l6ZW9mKGFzc2VydGlvbiksICZvdXRsZW4pOworCQkJCSAgaW5idWYsIE1DX0NNRF9HRVRfQVNTRVJUU19JTl9MRU4sCisJCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCAmb3V0bGVuKTsKIAl9IHdoaWxlICgocmMgPT0gLUVJTlRSIHx8IHJjID09IC1FSU8pICYmIHJldHJ5LS0gPiAwKTsKIAogCWlmIChyYykKQEAgLTkyNiwyMSArOTcwLDExIEBACiAJaWYgKG91dGxlbiA8IE1DX0NNRF9HRVRfQVNTRVJUU19PVVRfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZsYWdzID0gTUNESV9EV09SRChhc3NlcnRpb24sIEdFVF9BU1NFUlRTX09VVF9HTE9CQUxfRkxBR1MpOworCS8qIFByaW50IG91dCBhbnkgcmVjb3JkZWQgYXNzZXJ0aW9uIHN0YXRlICovCisJZmxhZ3MgPSBNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0FTU0VSVFNfT1VUX0dMT0JBTF9GTEFHUyk7CiAJaWYgKGZsYWdzID09IE1DX0NNRF9HRVRfQVNTRVJUU19GTEFHU19OT19GQUlMUykKIAkJcmV0dXJuIDA7CiAKLQkvKiBSZXNldCB0aGUgaGFyZHdhcmUgYXRvbWljYWxseSBzdWNoIHRoYXQgb25seSBvbmUgcG9ydCB3aXRoIHN1Y2NlZWQuCi0JICogVGhpcyBjb21tYW5kIHdpbGwgc3VjY2VlZCBpZiBhIHJlYm9vdCBpcyBubyBsb25nZXIgcmVxdWlyZWQgKGJlY2F1c2UKLQkgKiB0aGUgb3RoZXIgcG9ydCBkaWQgaXQgZmlyc3QpLCBidXQgZmFpbCB3aXRoIEVJTyBpZiBpdCBzdWNjZWVkcy4KLQkgKi8KLQlCVUlMRF9CVUdfT04oTUNfQ01EX1JFQk9PVF9PVVRfTEVOICE9IDApOwotCU1DRElfU0VUX0RXT1JEKGluYnVmLnJlYm9vdCwgUkVCT09UX0lOX0ZMQUdTLAotCQkgICAgICAgTUNfQ01EX1JFQk9PVF9GTEFHU19BRlRFUl9BU1NFUlRJT04pOwotCWVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9SRUJPT1QsIGluYnVmLnJlYm9vdCwgTUNfQ01EX1JFQk9PVF9JTl9MRU4sCi0JCSAgICAgTlVMTCwgMCwgTlVMTCk7Ci0KLQkvKiBQcmludCBvdXQgdGhlIGFzc2VydGlvbiAqLwogCXJlYXNvbiA9IChmbGFncyA9PSBNQ19DTURfR0VUX0FTU0VSVFNfRkxBR1NfU1lTX0ZBSUwpCiAJCT8gInN5c3RlbS1sZXZlbCBhc3NlcnRpb24iCiAJCTogKGZsYWdzID09IE1DX0NNRF9HRVRfQVNTRVJUU19GTEFHU19USFJfRkFJTCkKQEAgLTk0OSwyMCArOTgzLDQ1IEBACiAJCT8gIndhdGNoZG9nIHJlc2V0IgogCQk6ICJ1bmtub3duIGFzc2VydGlvbiI7CiAJRUZYX0VSUihlZngsICJNQ1BVICVzIGF0IFBDID0gMHglLjh4IGluIHRocmVhZCAweCUuOHhcbiIsIHJlYXNvbiwKLQkJTUNESV9EV09SRChhc3NlcnRpb24sIEdFVF9BU1NFUlRTX09VVF9TQVZFRF9QQ19PRkZTKSwKLQkJTUNESV9EV09SRChhc3NlcnRpb24sIEdFVF9BU1NFUlRTX09VVF9USFJFQURfT0ZGUykpOworCQlNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0FTU0VSVFNfT1VUX1NBVkVEX1BDX09GRlMpLAorCQlNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0FTU0VSVFNfT1VUX1RIUkVBRF9PRkZTKSk7CiAKIAkvKiBQcmludCBvdXQgdGhlIHJlZ2lzdGVycyAqLwogCW9mc3QgPSBNQ19DTURfR0VUX0FTU0VSVFNfT1VUX0dQX1JFR1NfT0ZGU19PRlNUOwogCWZvciAoaW5kZXggPSAxOyBpbmRleCA8IDMyOyBpbmRleCsrKSB7CiAJCUVGWF9FUlIoZWZ4LCAiUiUuMmQgKD8pOiAweCUuOHhcbiIsIGluZGV4LAotCQkJTUNESV9EV09SRDIoYXNzZXJ0aW9uLCBvZnN0KSk7CisJCQlNQ0RJX0RXT1JEMihvdXRidWYsIG9mc3QpKTsKIAkJb2ZzdCArPSBzaXplb2YoZWZ4X2R3b3JkX3QpOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBlZnhfbWNkaV9leGl0X2Fzc2VydGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXU4IGluYnVmW01DX0NNRF9SRUJPT1RfSU5fTEVOXTsKKworCS8qIEF0b21pY2FsbHkgcmVib290IHRoZSBtY2Z3IG91dCBvZiB0aGUgYXNzZXJ0aW9uIGhhbmRsZXIgKi8KKwlCVUlMRF9CVUdfT04oTUNfQ01EX1JFQk9PVF9PVVRfTEVOICE9IDApOworCU1DRElfU0VUX0RXT1JEKGluYnVmLCBSRUJPT1RfSU5fRkxBR1MsCisJCSAgICAgICBNQ19DTURfUkVCT09UX0ZMQUdTX0FGVEVSX0FTU0VSVElPTik7CisJZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX1JFQk9PVCwgaW5idWYsIE1DX0NNRF9SRUJPT1RfSU5fTEVOLAorCQkgICAgIE5VTEwsIDAsIE5VTEwpOworfQorCitpbnQgZWZ4X21jZGlfaGFuZGxlX2Fzc2VydGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCWludCByYzsKKworCXJjID0gZWZ4X21jZGlfcmVhZF9hc3NlcnRpb24oZWZ4KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWVmeF9tY2RpX2V4aXRfYXNzZXJ0aW9uKGVmeCk7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBlZnhfbWNkaV9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gZWZ4X2xlZF9tb2RlIG1vZGUpCiB7CiAJdTggaW5idWZbTUNfQ01EX1NFVF9JRF9MRURfSU5fTEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmggYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5oCmluZGV4IDEwY2U5OGYuLmYxZjg5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuaApAQCAtMTE2LDYgKzExNiw3IEBACiAJCQkJbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gaW50IGVmeF9tY2RpX252cmFtX3VwZGF0ZV9maW5pc2goc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCQkJdW5zaWduZWQgaW50IHR5cGUpOworZXh0ZXJuIGludCBlZnhfbWNkaV9udnJhbV90ZXN0X2FsbChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiBpbnQgZWZ4X21jZGlfaGFuZGxlX2Fzc2VydGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9tY2RpX3NldF9pZF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZW51bSBlZnhfbGVkX21vZGUgbW9kZSk7CiBleHRlcm4gaW50IGVmeF9tY2RpX3Jlc2V0X3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9wY29sLmggYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9wY29sLmgKaW5kZXggNzNlNzFmNC4uYmQ1OTMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGNvbC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaApAQCAtNzg2LDE2ICs3ODYsMTggQEAKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX09VVF9GTEFHU19PRlNUIDAKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX1BSRVNFTlRfTEJOIDAKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX1BSRVNFTlRfV0lEVEggMQotI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfU0hPUlRCSVNUX0xCTiAxCi0jZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19TSE9SVEJJU1RfV0lEVEggMQotI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfTE9OR0JJU1RfTEJOIDIKLSNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0xPTkdCSVNUX1dJRFRIIDEKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfQ0FCTEVfU0hPUlRfTEJOIDEKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfQ0FCTEVfU0hPUlRfV0lEVEggMQorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfQklTVF9DQUJMRV9MT05HX0xCTiAyCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19CSVNUX0NBQkxFX0xPTkdfV0lEVEggMQogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfTE9XUE9XRVJfTEJOIDMKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0xPV1BPV0VSX1dJRFRIIDEKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX1BPV0VST0ZGX0xCTiA0CiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19QT1dFUk9GRl9XSURUSCAxCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19UWERJU19MQk4gNQogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfVFhESVNfV0lEVEggMQorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfQklTVF9MQk4gNgorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfQklTVF9XSURUSCAxCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19PVVRfVFlQRV9PRlNUIDQKIC8qIEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGNhcGFiaWxpdGllcyAqLwogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfT1VUX1NVUFBPUlRFRF9DQVBfT0ZTVCA4CkBAIC04MzIsNyArODM0LDcgQEAKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX09VVF9SRVZJU0lPTl9PRlNUIDUyCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19PVVRfUkVWSVNJT05fTEVOIDIwCiAKLS8qIE1DX0NNRF9TVEFSVF9QSFlfQklTVDoKKy8qIE1DX0NNRF9TVEFSVF9CSVNUOgogICogU3RhcnQgYSBCSVNUIHRlc3Qgb24gdGhlIFBIWS4KICAqCiAgKiBMb2NrcyByZXF1aXJlZDogUEhZX0xPQ0sgaWYgZG9pbmcgYSAgUEhZIEJJU1QKQEAgLTg0MCwzNCArODQyLDcxIEBACiAgKi8KICNkZWZpbmUgTUNfQ01EX1NUQVJUX0JJU1QgMHgyNQogI2RlZmluZSBNQ19DTURfU1RBUlRfQklTVF9JTl9MRU4gNAotI2RlZmluZSBNQ19DTURfU1RBUlRfQklTVF9UWVBFX09GU1QgMAorI2RlZmluZSBNQ19DTURfU1RBUlRfQklTVF9JTl9UWVBFX09GU1QgMAorI2RlZmluZSBNQ19DTURfU1RBUlRfQklTVF9PVVRfTEVOIDAKIAotLyogUnVuIHRoZSBQSFkncyBzaG9ydCBCSVNUICovCi0jZGVmaW5lIE1DX0NNRF9QSFlfQklTVF9TSE9SVCAgMQotLyogUnVuIHRoZSBQSFkncyBsb25nIEJJU1QgKi8KLSNkZWZpbmUgTUNfQ01EX1BIWV9CSVNUX0xPTkcgICAyCisvKiBSdW4gdGhlIFBIWSdzIHNob3J0IGNhYmxlIEJJU1QgKi8KKyNkZWZpbmUgTUNfQ01EX1BIWV9CSVNUX0NBQkxFX1NIT1JUICAxCisvKiBSdW4gdGhlIFBIWSdzIGxvbmcgY2FibGUgQklTVCAqLworI2RlZmluZSBNQ19DTURfUEhZX0JJU1RfQ0FCTEVfTE9ORyAgIDIKIC8qIFJ1biBCSVNUIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgQlBYIFNlcmRlcyAoWEFVSSBvciBYRkkpICovCiAjZGVmaW5lIE1DX0NNRF9CUFhfU0VSREVTX0JJU1QgMworLyogUnVuIHRoZSBNQyBsb29wYmFjayB0ZXN0cyAqLworI2RlZmluZSBNQ19DTURfTUNfTE9PUEJBQ0tfQklTVCA0CisvKiBSdW4gdGhlIFBIWSdzIHN0YW5kYXJkIEJJU1QgKi8KKyNkZWZpbmUgTUNfQ01EX1BIWV9CSVNUIDUKIAogLyogTUNfQ01EX1BPTExfUEhZX0JJU1Q6ICh2YXJpYWRpYyBvdXRwdXQpCiAgKiBQb2xsIGZvciBCSVNUIGNvbXBsZXRpb24KICAqCi0gKiBSZXR1cm5zIGEgc2luZ2xlIHN0YXR1cyBjb2RlLCBhbmQgYSBiaW5hcnkgYmxvYiBvZiBwaHktc3BlY2lmaWMKLSAqIGJpc3Qgb3V0cHV0LiBJZiB0aGUgZHJpdmVyIGNhbid0IHN1Y2Nlc2Z1bGx5IHBhcnNlIHRoZSBCSVNUIG91dHB1dCwKLSAqIGl0IHNob3VsZCBzdGlsbCByZXNwZWN0IHRoZSBQYXNzL0ZhaWwgaW4gT1VULlJFU1VMVC4KKyAqIFJldHVybnMgYSBzaW5nbGUgc3RhdHVzIGNvZGUsIGFuZCBvcHRpb25hbGx5IHNvbWUgUEhZIHNwZWNpZmljCisgKiBiaXN0IG91dHB1dC4gVGhlIGRyaXZlciBzaG91bGQgb25seSBjb25zdW1lIHRoZSBCSVNUIG91dHB1dAorICogYWZ0ZXIgdmFsaWRhdGluZyBPVVRMRU4gYW5kIFBIWV9DRkcuUEhZX1RZUEUuCiAgKgotICogTG9ja3MgcmVxdWlyZWQ6IFBIWV9MT0NLICBpZiBkb2luZyBhICBQSFkgQklTVAorICogSWYgYSBkcml2ZXIgY2FuJ3Qgc3VjY2VzZnVsbHkgcGFyc2UgdGhlIEJJU1Qgb3V0cHV0LCBpdCBzaG91bGQKKyAqIHN0aWxsIHJlc3BlY3QgdGhlIHBhc3MvRmFpbCBpbiBPVVQuUkVTVUxUCisgKgorICogTG9ja3MgcmVxdWlyZWQ6IFBIWV9MT0NLIGlmIGRvaW5nIGEgIFBIWSBCSVNUCiAgKiBSZXR1cm4gY29kZTogMCwgRUFDQ0VTIChpZiBQSFlfTE9DSyBpcyBub3QgaGVsZCkKICAqLwogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUIDB4MjYKICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9JTl9MRU4gMAogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9MRU4gVU5LTk9XTgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9TRlQ5MDAxX0xFTiA0MAorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9NUlNGUF9MRU4gOAogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9SRVNVTFRfT0ZTVCAwCiAjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfUlVOTklORyAxCiAjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfUEFTU0VEIDIKICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9GQUlMRUQgMwogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1RJTUVPVVQgNAorLyogR2VuZXJpYzogKi8KICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfUFJJVkFURV9PRlNUIDQKKy8qIFNGVDkwMDEtc3BlY2lmaWM6ICovCisvKiAob2Zmc2V0IDQgdW51c2VkPykgKi8KKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9MRU5HVEhfQV9PRlNUIDgKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9MRU5HVEhfQl9PRlNUIDEyCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfTEVOR1RIX0NfT0ZTVCAxNgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9TRlQ5MDAxX0NBQkxFX0xFTkdUSF9EX09GU1QgMjAKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9TVEFUVVNfQV9PRlNUIDI0CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfU1RBVFVTX0JfT0ZTVCAyOAorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9TRlQ5MDAxX0NBQkxFX1NUQVRVU19DX09GU1QgMzIKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9TVEFUVVNfRF9PRlNUIDM2CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfU0ZUOTAwMV9QQUlSX09LIDEKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9TRlQ5MDAxX1BBSVJfT1BFTiAyCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfU0ZUOTAwMV9JTlRSQV9QQUlSX1NIT1JUIDMKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9TRlQ5MDAxX0lOVEVSX1BBSVJfU0hPUlQgNAorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1NGVDkwMDFfUEFJUl9CVVNZIDkKKy8qIG1yc2ZwICJQSFkiIGRyaXZlcjogKi8KKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfTVJTRlBfVEVTVF9PRlNUIDQKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9NUlNGUF9URVNUX0NPTVBMRVRFIDAKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9NUlNGUF9URVNUX0JVU19TV0lUQ0hfT0ZGX0kyQ19XUklURSAxCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9CVVNfU1dJVENIX09GRl9JMkNfTk9fQUNDRVNTX0lPX0VYUCAyCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9CVVNfU1dJVENIX09GRl9JMkNfTk9fQUNDRVNTX01PRFVMRSAzCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9JT19FWFBfSTJDX0NPTkZJR1VSRSA0CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9CVVNfU1dJVENIX0kyQ19OT19DUk9TU1RBTEsgNQorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX01SU0ZQX1RFU1RfTU9EVUxFX1BSRVNFTkNFIDYKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9NUlNGUF9URVNUX01PRFVMRV9JRF9JMkNfQUNDRVNTIDcKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9NUlNGUF9URVNUX01PRFVMRV9JRF9TQU5FX1ZBTFVFIDgKIAogLyogTUNfQ01EX1BIWV9TUEk6ICh2YXJpYWRpYyBpbiwgdmFyaWFkaWMgb3V0KQogICogUmVhZC9Xcml0ZS9FcmFzZSB0aGUgUEhZIFNQSSBkZXZpY2UKQEAgLTEyMDYsNiArMTI0NSwxMyBAQAogI2RlZmluZSBNQ19DTURfV09MX0ZJTFRFUl9TRVRfSU5fQklUTUFQX0xBWUVSNF9PRlNUCVwKIAkoTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0RBVEFfT0ZTVCArIDE3OCkKIAorI2RlZmluZSBNQ19DTURfV09MX0ZJTFRFUl9TRVRfSU5fTElOS19NQVNLX09GU1QJXAorCU1DX0NNRF9XT0xfRklMVEVSX1NFVF9JTl9EQVRBX09GU1QKKyNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0xJTktfVVBfTEJOCTAKKyNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0xJTktfVVBfV0lEVEgJMQorI2RlZmluZSBNQ19DTURfV09MX0ZJTFRFUl9TRVRfSU5fTElOS19ET1dOX0xCTgkxCisjZGVmaW5lIE1DX0NNRF9XT0xfRklMVEVSX1NFVF9JTl9MSU5LX0RPV05fV0lEVEggMQorCiAjZGVmaW5lIE1DX0NNRF9XT0xfRklMVEVSX1NFVF9PVVRfTEVOIDQKICNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX09VVF9GSUxURVJfSURfT0ZTVCAwCiAKQEAgLTEyMTYsNyArMTI2Miw4IEBACiAjZGVmaW5lIE1DX0NNRF9XT0xfVFlQRV9JUFY0X1NZTiAgIDB4MwogI2RlZmluZSBNQ19DTURfV09MX1RZUEVfSVBWNl9TWU4gICAweDQKICNkZWZpbmUgTUNfQ01EX1dPTF9UWVBFX0JJVE1BUCAgICAgMHg1Ci0jZGVmaW5lIE1DX0NNRF9XT0xfVFlQRV9NQVggICAgICAgIDB4NgorI2RlZmluZSBNQ19DTURfV09MX1RZUEVfTElOSyAgICAgICAweDYKKyNkZWZpbmUgTUNfQ01EX1dPTF9UWVBFX01BWCAgICAgICAgMHg3CiAKICNkZWZpbmUgTUNfQ01EX0ZJTFRFUl9NT0RFX1NJTVBMRSAgICAgMHgwCiAjZGVmaW5lIE1DX0NNRF9GSUxURVJfTU9ERV9TVFJVQ1RVUkVEIDB4ZmZmZmZmZmYKQEAgLTEzNTcsMTQgKzE0MDQsMjQgQEAKICAqIFJldHVybnM6IDAsIEVJTlZBTCAoYmFkIHR5cGUvb2Zmc2V0L2xlbmd0aCksIEVBQ0NFUyAoaWYgUEhZX0xPQ0sgcmVxdWlyZWQgYW5kIG5vdCBoZWxkKQogICovCiAjZGVmaW5lIE1DX0NNRF9OVlJBTV9VUERBVEVfRklOSVNIIDB4M2MKLSNkZWZpbmUgTUNfQ01EX05WUkFNX1VQREFURV9GSU5JU0hfSU5fTEVOIDQKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1VQREFURV9GSU5JU0hfSU5fTEVOIDgKICNkZWZpbmUgTUNfQ01EX05WUkFNX1VQREFURV9GSU5JU0hfSU5fVFlQRV9PRlNUIDAKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1VQREFURV9GSU5JU0hfSU5fUkVCT09UX09GU1QgNAogI2RlZmluZSBNQ19DTURfTlZSQU1fVVBEQVRFX0ZJTklTSF9PVVRfTEVOIDAKIAogLyogTUNfQ01EX1JFQk9PVDoKLSAqIFJlYm9vdCB0aGUgTUMuIFRoZSBBRlRFUl9BU1NFUlRJT04gZmxhZyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkCi0gKiB3aGVuIHRoZSBkcml2ZXIgbm90aWNlcyBhbiBhc3NlcnRpb24gZmFpbHVyZSwgdG8gYWxsb3cgdHdvIHBvcnRzIHRvCi0gKiBib3RoIHJlY292ZXIgKHNlbWktKWdyYWNlZnVsbHkuCisgKiBSZWJvb3QgdGhlIE1DLgorICoKKyAqIFRoZSBBRlRFUl9BU1NFUlRJT04gZmxhZyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gdGhlIGRyaXZlciBub3RpY2VzCisgKiBhbiBhc3NlcnRpb24gZmFpbHVyZSAoYXQgd2hpY2ggcG9pbnQgaXQgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSBhIGNvbXBsZXRlCisgKiB0ZWFyIGRvd24gYW5kIHJlaW5pdGlhbGlzZSksIHRvIGFsbG93IGJvdGggcG9ydHMgdG8gcmVzZXQgdGhlIE1DIG9uY2UKKyAqIGluIGFuIGF0b21pYyBmYXNoaW9uLgorICoKKyAqIFByb2R1Y3Rpb24gbWMgZmlybXdhcmVzIGFyZSBnZW5lcmFsbHkgY29tcGlsZWQgd2l0aCBSRUJPT1RfT05fQVNTRVJUPTEsCisgKiB3aGljaCBtZWFucyB0aGF0IHRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYm9vdCBvdXQgb2YgdGhlIGFzc2VydGlvbgorICogaGFuZGxlciwgc28gdGhpcyBpcyBpbiBwcmFjdGlzZSBhbiBvcHRpb25hbCBvcGVyYXRpb24uIEl0IGlzIHN0aWxsCisgKiByZWNvbW1lbmRlZCB0aGF0IGRyaXZlcnMgZXhlY3V0ZSB0aGlzIHRvIHN1cHBvcnQgY3VzdG9tIGZpcm13YXJlcworICogd2l0aCBSRUJPT1RfT05fQVNTRVJUPTAuCiAgKgogICogTG9ja3MgcmVxdWlyZWQ6IE5PTkUKICAqIFJldHVybnM6IE5vdGhpbmcuIFlvdSBnZXQgYmFjayBhIHJlc3BvbnNlIHdpdGggRVJSPTEsIERBVEFMRU49MApAQCAtMTQ2OSwxMSArMTUyNiwxMCBAQAogCSgoX29mc3QpICsgNikKIAogLyogTUNfQ01EX1JFQURfU0VOU09SUwotICogUmV0dXJucyB0aGUgY3VycmVudCAodmFsdWUsIHN0YXRlKSBmb3IgZWFjaCBzZW5zb3IKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcmVhZGluZyBmcm9tIGVhY2ggc2Vuc29yCiAgKgotICogUmV0dXJucyB0aGUgY3VycmVudCAodmFsdWUsIHN0YXRlKSBbZWFjaCAxNmJpdF0gb2YgZWFjaCBzZW5zb3Igc3VwcG9ydGVkIGJ5Ci0gKiB0aGlzIGJvYXJkLCBieSBETUEnaW5nIGEgc3BhcnNlIGFycmF5IChpbmRleGVkIGJ5IHRoZSBzZW5zb3IgdHlwZSkgaW50byBob3N0Ci0gKiBtZW1vcnkuCisgKiBSZXR1cm5zIGEgc3BhcnNlIGFycmF5IG9mIHNlbnNvciByZWFkaW5ncyAoaW5kZXhlZCBieSB0aGUgc2Vuc29yCisgKiB0eXBlKSBpbnRvIGhvc3QgbWVtb3J5LiAgRWFjaCBhcnJheSBlbGVtZW50IGlzIGEgZHdvcmQuCiAgKgogICogVGhlIE1DIHdpbGwgc2VuZCBhIFNFTlNPUkVWVCBldmVudCBldmVyeSB0aW1lIGFueSBzZW5zb3IgY2hhbmdlcyBzdGF0ZS4gVGhlCiAgKiBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgaXQgZG9lc24ndCBtaXNzIGFueSBldmVudHMuIFRoZSBib2FyZApAQCAtMTQ4Niw2ICsxNTQyLDEyIEBACiAjZGVmaW5lIE1DX0NNRF9SRUFEX1NFTlNPUlNfSU5fRE1BX0FERFJfSElfT0ZTVCA0CiAjZGVmaW5lIE1DX0NNRF9SRUFEX1NFTlNPUlNfT1VUX0xFTiAwCiAKKy8qIFNlbnNvciByZWFkaW5nIGZpZWxkcyAqLworI2RlZmluZSBNQ19DTURfUkVBRF9TRU5TT1JfVkFMVUVfTEJOIDAKKyNkZWZpbmUgTUNfQ01EX1JFQURfU0VOU09SX1ZBTFVFX1dJRFRIIDE2CisjZGVmaW5lIE1DX0NNRF9SRUFEX1NFTlNPUl9TVEFURV9MQk4gMTYKKyNkZWZpbmUgTUNfQ01EX1JFQURfU0VOU09SX1NUQVRFX1dJRFRIIDgKKwogCiAvKiBNQ19DTURfR0VUX1BIWV9TVEFURToKICAqIFJlcG9ydCBjdXJyZW50IHN0YXRlIG9mIFBIWS4gIEEgInpvbWJpZSIgUEhZIGlzIGEgUEhZIHRoYXQgaGFzIGZhaWxlZCB0bwpAQCAtMTU3Nyw0ICsxNjM5LDk4IEBACiAjZGVmaW5lIE1DX0NNRF9NQUNfUkVTRVRfUkVTVE9SRV9JTl9MRU4gMAogI2RlZmluZSBNQ19DTURfTUFDX1JFU0VUX1JFU1RPUkVfT1VUX0xFTiAwCiAKKworLyogTUNfQ01EX1RFU1RfQVNTRVJUOgorICogRGVsaWJlcmF0ZWx5IHRyaWdnZXIgYW4gYXNzZXJ0LWRldG9uYXRpb24gaW4gdGhlIGZpcm13YXJlIGZvciB0ZXN0aW5nCisgKiBwdXJwb3NlcyAoaS5lLiB0byBhbGxvdyB0ZXN0cyB0aGF0IHRoZSBkcml2ZXIgY29wZXMgZ3JhY2VmdWxseSkuCisgKgorICogTG9ja3MgcmVxdWlyZWQ6IE5vbmUKKyAqIFJldHVybnM6IDAKKyAqLworCisjZGVmaW5lIE1DX0NNRF9URVNUQVNTRVJUIDB4NDkKKyNkZWZpbmUgTUNfQ01EX1RFU1RBU1NFUlRfSU5fTEVOIDAKKyNkZWZpbmUgTUNfQ01EX1RFU1RBU1NFUlRfT1VUX0xFTiAwCisKKy8qIE1DX0NNRF9XT1JLQVJPVU5EIDB4NGEKKyAqCisgKiBFbmFibGUvRGlzYWJsZSBhIGdpdmVuIHdvcmthcm91bmQuIFRoZSBtY2Z3IHdpbGwgcmV0dXJuIEVJTlZBTCBpZiBpdAorICogZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBnaXZlbiB3b3JrYXJvdW5kIG51bWJlciAtIHdoaWNoIHNob3VsZCBub3QKKyAqIGJlIHRyZWF0ZWQgYXMgYSBoYXJkIGVycm9yIGJ5IGNsaWVudCBjb2RlLgorICoKKyAqIFRoaXMgb3AgZG9lcyBub3QgaW1wbHkgYW55IHNlbWFudGljcyBhYm91dCBlYWNoIHdvcmthcm91bmQsIHRoYXQncyBiZXR3ZWVuCisgKiB0aGUgZHJpdmVyIGFuZCB0aGUgbWNmdyBvbiBhIHBlci13b3JrYXJvdW5kIGJhc2lzLgorICoKKyAqIExvY2tzIHJlcXVpcmVkOiBOb25lCisgKiBSZXR1cm5zOiAwLCBFSU5WQUwKKyAqLworI2RlZmluZSBNQ19DTURfV09SS0FST1VORCAweDRhCisjZGVmaW5lIE1DX0NNRF9XT1JLQVJPVU5EX0lOX0xFTiA4CisjZGVmaW5lIE1DX0NNRF9XT1JLQVJPVU5EX0lOX1RZUEVfT0ZTVCAwCisjZGVmaW5lIE1DX0NNRF9XT1JLQVJPVU5EX0JVRzE3MjMwIDEKKyNkZWZpbmUgTUNfQ01EX1dPUktBUk9VTkRfSU5fRU5BQkxFRF9PRlNUIDQKKyNkZWZpbmUgTUNfQ01EX1dPUktBUk9VTkRfT1VUX0xFTiAwCisKKy8qIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk86CisgKiBSZWFkIG1lZGlhLXNwZWNpZmljIGRhdGEgZnJvbSBQSFkgKGUuZy4gU0ZQL1NGUCsgbW9kdWxlIElEIGluZm9ybWF0aW9uIGZvcgorICogU0ZQKyBQSFlzKS4KKyAqCisgKiBUaGUgIm1lZGlhIHR5cGUiIGNhbiBiZSBmb3VuZCB2aWEgR0VUX1BIWV9DRkcgKEdFVF9QSFlfQ0ZHX09VVF9NRURJQV9UWVBFKTsKKyAqIHRoZSB2YWxpZCAicGFnZSBudW1iZXIiIGlucHV0IHZhbHVlcywgYW5kIHRoZSBvdXRwdXQgZGF0YSwgYXJlIGludGVycHJldGVkCisgKiBvbiBhIHBlci10eXBlIGJhc2lzLgorICoKKyAqIEZvciBTRlArOiBQQUdFPTAgb3IgMSByZXR1cm5zIGEgMTI4LWJ5dGUgYmxvY2sgcmVhZCBmcm9tIG1vZHVsZSBJMkMgYWRkcmVzcworICogICAgICAgICAgIDB4QTAgb2Zmc2V0IDAgb3IgMHg4MC4KKyAqIEFueXRoaW5nIGVsc2U6IGN1cnJlbnRseSB1bmRlZmluZWQuCisgKgorICogTG9ja3MgcmVxdWlyZWQ6IE5vbmUKKyAqIFJldHVybiBjb2RlOiAwCisgKi8KKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfTUVESUFfSU5GTyAweDRiCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk9fSU5fTEVOIDQKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfTUVESUFfSU5GT19JTl9QQUdFX09GU1QgMAorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9NRURJQV9JTkZPX09VVF9MRU4oX251bV9ieXRlcykgKDQgKyAoX251bV9ieXRlcykpCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk9fT1VUX0RBVEFMRU5fT0ZTVCAwCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk9fT1VUX0RBVEFfT0ZTVCA0CisKKy8qIE1DX0NNRF9OVlJBTV9URVNUOgorICogVGVzdCBhIHBhcnRpY3VsYXIgTlZSQU0gcGFydGl0aW9uIGZvciB2YWxpZCBjb250ZW50cyAod2hlcmUgInZhbGlkIgorICogZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBwYXJ0aXRpb24pLgorICoKKyAqIExvY2tzIHJlcXVpcmVkOiBOb25lCisgKiBSZXR1cm4gY29kZTogMAorICovCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUIDB4NGMKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1RFU1RfSU5fTEVOIDQKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1RFU1RfSU5fVFlQRV9PRlNUIDAKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1RFU1RfT1VUX0xFTiA0CisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX09VVF9SRVNVTFRfT0ZTVCAwCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX1BBU1MgMAorI2RlZmluZSBNQ19DTURfTlZSQU1fVEVTVF9GQUlMIDEKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1RFU1RfTk9UU1VQUCAyCisKKy8qIE1DX0NNRF9NUlNGUF9UV0VBSzogKGRlYnVnKQorICogUmVhZCBzdGF0dXMgYW5kL29yIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUgIm1yc2ZwIiBkcml2ZXIgaW4gbXJfcnVzdHkgYnVpbGRzLgorICogSTJDIEkvTyBleHBhbmRlciBiaXRzIGFyZSBhbHdheXMgcmVhZDsgaWYgZXF1YWxpc2VyIHBhcmFtZXRlcnMgYXJlIHN1cHBsaWVkLAorICogdGhleSBhcmUgY29uZmlndXJlZCBmaXJzdC4KKyAqCisgKiBMb2NrcyByZXF1aXJlZDogTm9uZQorICogUmV0dXJuIGNvZGU6IDAsIEVJTlZBTAorICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBSyAweDRkCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9MRU5fUkVBRF9PTkxZIDAKKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX0lOX0xFTl9FUV9DT05GSUcgMTYKKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX0lOX1RYRVFfTEVWRUxfT0ZTVCAwICAgIC8qIDAtNiBsb3ctPmhpZ2ggZGUtZW1waC4gKi8KKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX0lOX1RYRVFfRFRfQ0ZHX09GU1QgNCAgIC8qIDAtOCBsb3ctPmhpZ2ggcmVmLlYgKi8KKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX0lOX1JYRVFfQk9PU1RfT0ZTVCA4ICAgIC8qIDAtOCBsb3ctPmhpZ2ggYm9vc3QgKi8KKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX0lOX1JYRVFfRFRfQ0ZHX09GU1QgMTIgIC8qIDAtOCBsb3ctPmhpZ2ggcmVmLlYgKi8KKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX09VVF9MRU4gMTIKKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX09VVF9JT0VYUF9JTlBVVFNfT0ZTVCAwICAgICAvKiBpbnB1dCBiaXRzICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19PVVRfSU9FWFBfT1VUUFVUU19PRlNUIDQgICAgLyogb3V0cHV0IGJpdHMgKi8KKyNkZWZpbmUgTUNfQ01EX01SU0ZQX1RXRUFLX09VVF9JT0VYUF9ESVJFQ1RJT05fT0ZTVCA4ICAvKiBkaXJzOiAwPW91dCwgMT1pbiAqLworCisvKiBEbyBOT1QgYWRkIG5ldyBjb21tYW5kcyBiZXlvbmQgMHg0ZiBhcyBwYXJ0IG9mIDMuMCA6IDB4NTAgLSAweDdmIHdpbGwgYmUKKyAqIHVzZWQgZm9yIHBvc3QtMy4wIGV4dGVuc2lvbnMuIElmIHlvdSBydW4gb3V0IG9mIHNwYWNlLCBsb29rIGZvciBnYXBzIG9yCisgKiBjb21tYW5kcyB0aGF0IGFyZSB1bnVzZWQgaW4gdGhlIGV4aXN0aW5nIHJhbmdlLiAqLworCiAjZW5kaWYgLyogTUNESV9QQ09MX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKaW5kZXggZWI2OTRhZi4uMzRjMjJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKQEAgLTM4MSw2ICszODEsMTggQEAKIAkgKiBidXQgYnkgY29udmVudGlvbiB3ZSBkb24ndCAqLwogCWVmeC0+bG9vcGJhY2tfbW9kZXMgJj0gfigxIDw8IExPT1BCQUNLX05PTkUpOwogCisJLyogU2V0IHRoZSBpbml0aWFsIGxpbmsgbW9kZSAqLworCWVmeF9tY2RpX3BoeV9kZWNvZGVfbGluaygKKwkJZWZ4LCAmZWZ4LT5saW5rX3N0YXRlLAorCQlNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0xJTktfT1VUX0xJTktfU1BFRUQpLAorCQlNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0xJTktfT1VUX0ZMQUdTKSwKKwkJTUNESV9EV09SRChvdXRidWYsIEdFVF9MSU5LX09VVF9GQ05UTCkpOworCisJLyogRGVmYXVsdCB0byBBdXRvbmVnb3RpYXRlZCBmbG93IGNvbnRyb2wgaWYgdGhlIFBIWSBzdXBwb3J0cyBpdCAqLworCWVmeC0+d2FudGVkX2ZjID0gRUZYX0ZDX1JYIHwgRUZYX0ZDX1RYOworCWlmIChwaHlfZGF0YS0+c3VwcG9ydGVkX2NhcCAmICgxIDw8IE1DX0NNRF9QSFlfQ0FQX0FOX0xCTikpCisJCWVmeC0+d2FudGVkX2ZjIHw9IEVGWF9GQ19BVVRPOworCiAJcmV0dXJuIDA7CiAKIGZhaWw6CkBAIC00MzYsNyArNDQ4LDcgQEAKIAogCS8qIFRoZSBsaW5rIHBhcnRuZXIgY2FwYWJpbGl0aWVzIGFyZSBvbmx5IHJlbGV2ZW50IGlmIHRoZQogCSAqIGxpbmsgc3VwcG9ydHMgZmxvdyBjb250cm9sIGF1dG9uZWdvdGlhdGlvbiAqLwotCWlmICh+cGh5X2NmZy0+c3VwcG9ydGVkX2NhcCAmICgxIDw8IE1DX0NNRF9QSFlfQ0FQX0FTWU1fTEJOKSkKKwlpZiAofnBoeV9jZmctPnN1cHBvcnRlZF9jYXAgJiAoMSA8PCBNQ19DTURfUEhZX0NBUF9BTl9MQk4pKQogCQlyZXR1cm47CiAKIAkvKiBJZiBmbG93IGNvbnRyb2wgYXV0b25lZyBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQsIHRoZW4gZmluZSAqLwpAQCAtNTYwLDYgKzU3MiwyNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVmeF9tY2RpX3BoeV90ZXN0X2FsaXZlKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJdTggb3V0YnVmW01DX0NNRF9HRVRfUEhZX1NUQVRFX09VVF9MRU5dOworCXNpemVfdCBvdXRsZW47CisJaW50IHJjOworCisJQlVJTERfQlVHX09OKE1DX0NNRF9HRVRfUEhZX1NUQVRFX0lOX0xFTiAhPSAwKTsKKworCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX0dFVF9QSFlfU1RBVEUsIE5VTEwsIDAsCisJCQkgIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZiksICZvdXRsZW4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKG91dGxlbiA8IE1DX0NNRF9HRVRfUEhZX1NUQVRFX09VVF9MRU4pCisJCXJldHVybiAtRU1TR1NJWkU7CisJaWYgKE1DRElfRFdPUkQob3V0YnVmLCBHRVRfUEhZX1NUQVRFX1NUQVRFKSAhPSBNQ19DTURfUEhZX1NUQVRFX09LKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7CiAJLnByb2JlCQk9IGVmeF9tY2RpX3BoeV9wcm9iZSwKIAkuaW5pdCAJIAk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKQEAgLTU2OSw2ICs2MDIsNyBAQAogCS5yZW1vdmUJCT0gZWZ4X21jZGlfcGh5X3JlbW92ZSwKIAkuZ2V0X3NldHRpbmdzCT0gZWZ4X21jZGlfcGh5X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gZWZ4X21jZGlfcGh5X3NldF9zZXR0aW5ncywKKwkudGVzdF9hbGl2ZQk9IGVmeF9tY2RpX3BoeV90ZXN0X2FsaXZlLAogCS5ydW5fdGVzdHMJPSBOVUxMLAogCS50ZXN0X25hbWUJPSBOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggMTU3NGU1Mi4uMDU0OGZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTMzNSwzICszMzUsMjcgQEAKIAkJbWlpX2FkdmVydGlzZV9mbG93Y3RybChlZngtPndhbnRlZF9mYyksCiAJCWVmeF9tZGlvX3JlYWQoZWZ4LCBNRElPX01NRF9BTiwgTURJT19BTl9MUEEpKTsKIH0KKworaW50IGVmeF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlpbnQgcmM7CisJaW50IGRldmFkID0gX19mZnMoZWZ4LT5tZGlvLm1tZHMpOworCXUxNiBwaHlzaWQxLCBwaHlzaWQyOworCisJbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7CisKKwlwaHlzaWQxID0gZWZ4X21kaW9fcmVhZChlZngsIGRldmFkLCBNRElPX0RFVklEMSk7CisJcGh5c2lkMiA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBkZXZhZCwgTURJT19ERVZJRDIpOworCisJaWYgKChwaHlzaWQxID09IDB4MDAwMCkgfHwgKHBoeXNpZDEgPT0gMHhmZmZmKSB8fAorCSAgICAocGh5c2lkMiA9PSAweDAwMDApIHx8IChwaHlzaWQyID09IDB4ZmZmZikpIHsKKwkJRUZYX0VSUihlZngsICJubyBNRElPIFBIWSBwcmVzZW50IHdpdGggSUQgJWRcbiIsCisJCQllZngtPm1kaW8ucHJ0YWQpOworCQlyYyA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmMgPSBlZnhfbWRpb19jaGVja19tbWRzKGVmeCwgZWZ4LT5tZGlvLm1tZHMsIDApOworCX0KKworCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmggYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAppbmRleCBmNmFjOTUwLi5mODllNzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaApAQCAtMTA2LDQgKzEwNiw3IEBACiAJbWRpb19zZXRfZmxhZygmZWZ4LT5tZGlvLCBlZngtPm1kaW8ucHJ0YWQsIGRldmFkLCBhZGRyLCBtYXNrLCBzdGF0ZSk7CiB9CiAKKy8qIExpdmVuZXNzIHNlbGYtdGVzdCBmb3IgTURJTyBQSFlzICovCitleHRlcm4gaW50IGVmeF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisKICNlbmRpZiAvKiBFRlhfTURJT18xMEdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKaW5kZXggZDVhYWI1Yi4uY2IwMThlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWRpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEwMSw5ICsxMDAsNiBAQAogICogU3BlY2lhbCBidWZmZXJzIGFyZSB1c2VkIGZvciB0aGUgZXZlbnQgcXVldWVzIGFuZCB0aGUgVFggYW5kIFJYCiAgKiBkZXNjcmlwdG9yIHF1ZXVlcyBmb3IgZWFjaCBjaGFubmVsLiAgVGhleSBhcmUgKm5vdCogdXNlZCBmb3IgdGhlCiAgKiBhY3R1YWwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVycy4KLSAqCi0gKiBOb3RlIHRoYXQgZm9yIEZhbGNvbiwgVFggYW5kIFJYIGRlc2NyaXB0b3IgcXVldWVzIGxpdmUgaW4gaG9zdCBtZW1vcnkuCi0gKiBBbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHByb2NlZHVyZXMgbXVzdCB0YWtlIHRoaXMgaW50byBhY2NvdW50LgogICovCiBzdHJ1Y3QgZWZ4X3NwZWNpYWxfYnVmZmVyIHsKIAl2b2lkICphZGRyOwpAQCAtMzAwLDcgKzI5Niw3IEBACiAgKiBAZG1hX2FkZHI6IERNQSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgogICogQGxlbjogQnVmZmVyIGxlbmd0aCwgaW4gYnl0ZXMKICAqCi0gKiBGYWxjb24gdXNlcyB0aGVzZSBidWZmZXJzIGZvciBpdHMgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgYW5kCisgKiBUaGUgTklDIHVzZXMgdGhlc2UgYnVmZmVycyBmb3IgaXRzIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIGFuZAogICogTUFDIHN0YXRzIGR1bXBzLgogICovCiBzdHJ1Y3QgZWZ4X2J1ZmZlciB7CkBAIC01MTYsOCArNTEyLDkgQEAKICAqIEBzZXRfc2V0dGluZ3M6IFNldCBldGh0b29sIHNldHRpbmdzLiBTZXJpYWxpc2VkIGJ5IHRoZSBtYWNfbG9jay4KICAqIEBzZXRfbnBhZ2VfYWR2OiBTZXQgYWJpbGl0aWVzIGFkdmVydGlzZWQgaW4gKEV4dGVuZGVkKSBOZXh0IFBhZ2UKICAqCShvbmx5IG5lZWRlZCB3aGVyZSBBTiBiaXQgaXMgc2V0IGluIG1tZHMpCisgKiBAdGVzdF9hbGl2ZTogVGVzdCB0aGF0IFBIWSBpcyAnYWxpdmUnIChvbmxpbmUpCiAgKiBAdGVzdF9uYW1lOiBHZXQgdGhlIG5hbWUgb2YgYSBQSFktc3BlY2lmaWMgdGVzdC9yZXN1bHQKLSAqIEBydW5fdGVzdHM6IFJ1biB0ZXN0cyBhbmQgcmVjb3JkIHJlc3VsdHMgYXMgYXBwcm9wcmlhdGUuCisgKiBAcnVuX3Rlc3RzOiBSdW4gdGVzdHMgYW5kIHJlY29yZCByZXN1bHRzIGFzIGFwcHJvcHJpYXRlIChvZmZsaW5lKS4KICAqCUZsYWdzIGFyZSB0aGUgZXRodG9vbCB0ZXN0cyBmbGFncy4KICAqLwogc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyB7CkBAIC01MzIsNiArNTI5LDcgQEAKIAlpbnQgKCpzZXRfc2V0dGluZ3MpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpOwogCXZvaWQgKCpzZXRfbnBhZ2VfYWR2KSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTMyKTsKKwlpbnQgKCp0ZXN0X2FsaXZlKSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJY29uc3QgY2hhciAqKCp0ZXN0X25hbWUpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogCWludCAoKnJ1bl90ZXN0cykgKHN0cnVjdCBlZnhfbmljICplZngsIGludCAqcmVzdWx0cywgdW5zaWduZWQgZmxhZ3MpOwogfTsKQEAgLTY3Miw3ICs2NzAsNyBAQAogICogQGlycV9zdGF0dXM6IEludGVycnVwdCBzdGF0dXMgYnVmZmVyCiAgKiBAbGFzdF9pcnFfY3B1OiBMYXN0IENQVSB0byBoYW5kbGUgaW50ZXJydXB0LgogICoJVGhpcyByZWdpc3RlciBpcyB3cml0dGVuIHdpdGggdGhlIFNNUCBwcm9jZXNzb3IgSUQgd2hlbmV2ZXIgYW4KLSAqCWludGVycnVwdCBpcyBoYW5kbGVkLiAgSXQgaXMgdXNlZCBieSBmYWxjb25fdGVzdF9pbnRlcnJ1cHQoKQorICoJaW50ZXJydXB0IGlzIGhhbmRsZWQuICBJdCBpcyB1c2VkIGJ5IGVmeF9uaWNfdGVzdF9pbnRlcnJ1cHQoKQogICoJdG8gdmVyaWZ5IHRoYXQgYW4gaW50ZXJydXB0IGhhcyBvY2N1cnJlZC4KICAqIEBzcGlfZmxhc2g6IFNQSSBmbGFzaCBkZXZpY2UKICAqCVRoaXMgZmllbGQgd2lsbCBiZSAlTlVMTCBpZiBubyBmbGFzaCBkZXZpY2UgaXMgcHJlc2VudCAob3IgZm9yIFNpZW5hKS4KQEAgLTcyMSw4ICs3MTksNyBAQAogICogQGxvb3BiYWNrX21vZGVzOiBTdXBwb3J0ZWQgbG9vcGJhY2sgbW9kZSBiaXRtYXNrCiAgKiBAbG9vcGJhY2tfc2VsZnRlc3Q6IE9mZmxpbmUgc2VsZi10ZXN0IHByaXZhdGUgc3RhdGUKICAqCi0gKiBUaGUgQHByaXYgZmllbGQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgJnN0cnVjdCBuZXRfZGV2aWNlIHBvaW50cyB0bwotICogdGhpcy4KKyAqIFRoaXMgaXMgc3RvcmVkIGluIHRoZSBwcml2YXRlIGFyZWEgb2YgdGhlICZzdHJ1Y3QgbmV0X2RldmljZS4KICAqLwogc3RydWN0IGVmeF9uaWMgewogCWNoYXIgbmFtZVtJRk5BTVNJWl07CkBAIC05OTUsNyArOTkyLDcgQEAKICAqIHRoYXQgdGhlIG5ldCBkcml2ZXIgd2lsbCBwcm9ncmFtIGludG8gdGhlIE1BQyBhcyB0aGUgbWF4aW11bSBmcmFtZQogICogbGVuZ3RoLgogICoKLSAqIFRoZSAxMEcgTUFDIHVzZWQgaW4gRmFsY29uIHJlcXVpcmVzIDgtYnl0ZSBhbGlnbm1lbnQgb24gdGhlIGZyYW1lCisgKiBUaGUgMTBHIE1BQyByZXF1aXJlcyA4LWJ5dGUgYWxpZ25tZW50IG9uIHRoZSBmcmFtZQogICogbGVuZ3RoLCBzbyB3ZSByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCA4LgogICoKICAqIFJlLWNsb2NraW5nIGJ5IHRoZSBYR1hTIG9uIFJYIGNhbiByZWR1Y2UgYW4gSVBHIHRvIDMyIGJpdHMgKGhhbGYgYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwppbmRleCBkYjQ0MjI0Li5iMDZmOGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCkBAIC02MjMsMTAgKzYyMyw2IEBACiAgKgogICogVGhpcyB3cml0ZXMgdGhlIEVWUV9SUFRSX1JFRyByZWdpc3RlciBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsJ3MKICAqIGV2ZW50IHF1ZXVlLgotICoKLSAqIE5vdGUgdGhhdCBFVlFfUlBUUl9SRUcgY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSAibGFzdCByZWFkIiBldmVudCwKLSAqIHdoZXJlYXMgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyIGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgIm5leHQgdG8KLSAqIHJlYWQiIGV2ZW50LgogICovCiB2b2lkIGVmeF9uaWNfZXZlbnRxX3JlYWRfYWNrKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKIHsKQEAgLTEzODQsNiArMTM4MCwxNSBAQAogCQllZngtPmxhc3RfaXJxX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKIAkJCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOworCX0gZWxzZSBpZiAoRUZYX1dPUktBUk9VTkRfMTU3ODMoZWZ4KSkgeworCQkvKiBXZSBjYW4ndCByZXR1cm4gSVJRX0hBTkRMRUQgbW9yZSB0aGFuIG9uY2Ugb24gc2VlaW5nIElTUjA9MAorCQkgKiBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgYSBzaGFyZWQgaW50ZXJydXB0LCBidXQgd2UgZG8gbmVlZCB0bworCQkgKiBjaGVjayB0aGUgY2hhbm5lbCBldmVyeSB0aW1lIGFuZCBwcmVlbXB0aXZlbHkgcmVhcm0gaXQgaWYKKwkJICogaXQncyBpZGxlLiAqLworCQllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKKwkJCWlmICghY2hhbm5lbC0+d29ya19wZW5kaW5nKQorCQkJCWVmeF9uaWNfZXZlbnRxX3JlYWRfYWNrKGNoYW5uZWwpOworCQl9CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCmluZGV4IDY3ZWVjN2EuLjFiZWU2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwpAQCAtNDQ1LDQgKzQ0NSw1IEBACiAJLnJlbW92ZQkgIAkgPSBxdDIwMnhfcGh5X3JlbW92ZSwKIAkuZ2V0X3NldHRpbmdzCSA9IHF0MjAyeF9waHlfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJID0gZWZ4X21kaW9fc2V0X3NldHRpbmdzLAorCS50ZXN0X2FsaXZlCSA9IGVmeF9tZGlvX3Rlc3RfYWxpdmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwppbmRleCAyNTBjODgyLi5jZjAxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwpAQCAtMjQsOSArMjQsNiBAQAogI2luY2x1ZGUgIm5pYy5oIgogI2luY2x1ZGUgInNlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJpby5oIgotI2luY2x1ZGUgIm1kaW9fMTBnLmgiCiAKIC8qCiAgKiBMb29wYmFjayB0ZXN0IHBhY2tldCBzdHJ1Y3R1cmUKQEAgLTc2LDQyICs3MywxNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBlZnhfdGVzdF9tZGlvKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMpCitzdGF0aWMgaW50IGVmeF90ZXN0X3BoeV9hbGl2ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzKQogewogCWludCByYyA9IDA7Ci0JaW50IGRldmFkOwotCXUxNiBwaHlzaWQxLCBwaHlzaWQyOwogCi0JaWYgKGVmeC0+bWRpby5tb2RlX3N1cHBvcnQgJiBNRElPX1NVUFBPUlRTX0M0NSkKLQkJZGV2YWQgPSBfX2ZmcyhlZngtPm1kaW8ubW1kcyk7Ci0JZWxzZSBpZiAoZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCAmIE1ESU9fU1VQUE9SVFNfQzIyKQotCQlkZXZhZCA9IE1ESU9fREVWQURfTk9ORTsKLQllbHNlCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JdGVzdHMtPm1kaW8gPSAtMTsKLQotCXBoeXNpZDEgPSBlZnhfbWRpb19yZWFkKGVmeCwgZGV2YWQsIE1ESU9fREVWSUQxKTsKLQlwaHlzaWQyID0gZWZ4X21kaW9fcmVhZChlZngsIGRldmFkLCBNRElPX0RFVklEMik7Ci0KLQlpZiAoKHBoeXNpZDEgPT0gMHgwMDAwKSB8fCAocGh5c2lkMSA9PSAweGZmZmYpIHx8Ci0JICAgIChwaHlzaWQyID09IDB4MDAwMCkgfHwgKHBoeXNpZDIgPT0gMHhmZmZmKSkgewotCQlFRlhfRVJSKGVmeCwgIm5vIE1ESU8gUEhZIHByZXNlbnQgd2l0aCBJRCAlZFxuIiwKLQkJCWVmeC0+bWRpby5wcnRhZCk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJaWYgKGVmeC0+cGh5X29wLT50ZXN0X2FsaXZlKSB7CisJCXJjID0gZWZ4LT5waHlfb3AtPnRlc3RfYWxpdmUoZWZ4KTsKKwkJdGVzdHMtPnBoeV9hbGl2ZSA9IHJjID8gLTEgOiAxOwogCX0KIAotCWlmIChFRlhfSVMxMEcoZWZ4KSkgewotCQlyYyA9IGVmeF9tZGlvX2NoZWNrX21tZHMoZWZ4LCBlZngtPm1kaW8ubW1kcywgMCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JdGVzdHMtPm1kaW8gPSByYyA/IC0xIDogMTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI1OCw3ICsyMjgsNyBAQAogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmVmeC0+bWFjX2xvY2spOwotCXJjID0gZWZ4LT5waHlfb3AtPnJ1bl90ZXN0cyhlZngsIHRlc3RzLT5waHksIGZsYWdzKTsKKwlyYyA9IGVmeC0+cGh5X29wLT5ydW5fdGVzdHMoZWZ4LCB0ZXN0cy0+cGh5X2V4dCwgZmxhZ3MpOwogCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNjg0LDcgKzY1NCw3IEBACiAJLyogT25saW5lIChpLmUuIG5vbi1kaXNydXB0aXZlKSB0ZXN0aW5nCiAJICogVGhpcyBjaGVja3MgaW50ZXJydXB0IGdlbmVyYXRpb24sIGV2ZW50IGRlbGl2ZXJ5IGFuZCBQSFkgcHJlc2VuY2UuICovCiAKLQlyYyA9IGVmeF90ZXN0X21kaW8oZWZ4LCB0ZXN0cyk7CisJcmMgPSBlZnhfdGVzdF9waHlfYWxpdmUoZWZ4LCB0ZXN0cyk7CiAJaWYgKHJjICYmICFyY190ZXN0KQogCQlyY190ZXN0ID0gcmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5oIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKaW5kZXggZjZmZWVlMC4uNjQzYmVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogc3RydWN0IGVmeF9zZWxmX3Rlc3RzIHsKIAkvKiBvbmxpbmUgdGVzdHMgKi8KLQlpbnQgbWRpbzsKKwlpbnQgcGh5X2FsaXZlOwogCWludCBudnJhbTsKIAlpbnQgaW50ZXJydXB0OwogCWludCBldmVudHFfZG1hW0VGWF9NQVhfQ0hBTk5FTFNdOwpAQCAtNDAsNyArNDAsNyBAQAogCWludCBldmVudHFfcG9sbFtFRlhfTUFYX0NIQU5ORUxTXTsKIAkvKiBvZmZsaW5lIHRlc3RzICovCiAJaW50IHJlZ2lzdGVyczsKLQlpbnQgcGh5W0VGWF9NQVhfUEhZX1RFU1RTXTsKKwlpbnQgcGh5X2V4dFtFRlhfTUFYX1BIWV9URVNUU107CiAJc3RydWN0IGVmeF9sb29wYmFja19zZWxmX3Rlc3RzIGxvb3BiYWNrW0xPT1BCQUNLX1RFU1RfTUFYICsgMV07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCmluZGV4IGY4YzY3NzEuLjE2MTlmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCkBAIC0xMDYsMTYgKzEwNiwxMSBAQAogCWVmeC0+bWRpby5tZGlvX3JlYWQgPSBzaWVuYV9tZGlvX3JlYWQ7CiAJZWZ4LT5tZGlvLm1kaW9fd3JpdGUgPSBzaWVuYV9tZGlvX3dyaXRlOwogCi0JLyogRmlsbCBvdXQgTURJTyBzdHJ1Y3R1cmUgYW5kIGxvb3BiYWNrIG1vZGVzICovCisJLyogRmlsbCBvdXQgTURJTyBzdHJ1Y3R1cmUsIGxvb3BiYWNrIG1vZGVzLCBhbmQgaW5pdGlhbCBsaW5rIHN0YXRlICovCiAJcmMgPSBlZngtPnBoeV9vcC0+cHJvYmUoZWZ4KTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JLyogSW5pdGlhbCBhc3N1bXB0aW9uICovCi0JZWZ4LT5saW5rX3N0YXRlLnNwZWVkID0gMTAwMDA7Ci0JZWZ4LT5saW5rX3N0YXRlLmZkID0gdHJ1ZTsKLQllZngtPndhbnRlZF9mYyA9IEVGWF9GQ19SWCB8IEVGWF9GQ19UWDsKLQogCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3Igc3RhdHMgKi8KIAlyYyA9IGVmeF9uaWNfYWxsb2NfYnVmZmVyKGVmeCwgJmVmeC0+c3RhdHNfYnVmZmVyLAogCQkJCSAgTUNfQ01EX01BQ19OU1RBVFMgKiBzaXplb2YodTY0KSk7CkBAIC0xMzksNyArMTM0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlZnhfbmljX3JlZ2lzdGVyX3Rlc3Qgc2llbmFfcmVnaXN0ZXJfdGVzdHNbXSA9IHsKIAl7IEZSX0FaX0FEUl9SRUdJT04sCi0JICBFRlhfT1dPUkQzMigweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGKSB9LAorCSAgRUZYX09XT1JEMzIoMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRikgfSwKIAl7IEZSX0NaX1VTUl9FVl9DRkcsCiAJICBFRlhfT1dPUkQzMigweDAwMDEwM0ZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9LAogCXsgRlJfQVpfUlhfQ0ZHLApAQCAtMTgxLDYgKzE3NiwxMiBAQAogCiBzdGF0aWMgaW50IHNpZW5hX3Jlc2V0X2h3KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpCiB7CisJaW50IHJjOworCisJLyogUmVjb3ZlciBmcm9tIGEgZmFpbGVkIGFzc2VydGlvbiBwcmUtcmVzZXQgKi8KKwlyYyA9IGVmeF9tY2RpX2hhbmRsZV9hc3NlcnRpb24oZWZ4KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCWlmIChtZXRob2QgPT0gUkVTRVRfVFlQRV9XT1JMRCkKIAkJcmV0dXJuIGVmeF9tY2RpX3Jlc2V0X21jKGVmeCk7CkBAIC01ODIsNiArNTgzLDcgQEAKIAkuc2V0X3dvbCA9IHNpZW5hX3NldF93b2wsCiAJLnJlc3VtZV93b2wgPSBzaWVuYV9pbml0X3dvbCwKIAkudGVzdF9yZWdpc3RlcnMgPSBzaWVuYV90ZXN0X3JlZ2lzdGVycywKKwkudGVzdF9udnJhbSA9IGVmeF9tY2RpX252cmFtX3Rlc3RfYWxsLAogCS5kZWZhdWx0X21hY19vcHMgPSAmZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMsCiAKIAkucmV2aXNpb24gPSBFRlhfUkVWX1NJRU5BX0EwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCmluZGV4IDMwMDljMjkuLjEwZGIwNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC04NDIsNiArODQyLDcgQEAKIAkuZ2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3NfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJICA9IHRlbnhwcmVzc19zZXRfc2V0dGluZ3MsCiAJLnNldF9ucGFnZV9hZHYgICAgPSBzZng3MTAxX3NldF9ucGFnZV9hZHYsCisJLnRlc3RfYWxpdmUJICA9IGVmeF9tZGlvX3Rlc3RfYWxpdmUsCiAJLnRlc3RfbmFtZQkgID0gc2Z4NzEwMV90ZXN0X25hbWUsCiAJLnJ1bl90ZXN0cwkgID0gc2Z4NzEwMV9ydW5fdGVzdHMsCiB9OwpAQCAtODU2LDYgKzg1Nyw3IEBACiAJLmdldF9zZXR0aW5ncwkgID0gdGVueHByZXNzX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3Nfc2V0X3NldHRpbmdzLAogCS5zZXRfbnBhZ2VfYWR2ICAgID0gc2Z0OTAwMV9zZXRfbnBhZ2VfYWR2LAorCS50ZXN0X2FsaXZlCSAgPSBlZnhfbWRpb190ZXN0X2FsaXZlLAogCS50ZXN0X25hbWUJICA9IHNmdDkwMDFfdGVzdF9uYW1lLAogCS5ydW5fdGVzdHMJICA9IHNmdDkwMDFfcnVuX3Rlc3RzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwppbmRleCA2YjM2NGE2Li5lZDk5OWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKKysrIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAogCWlmKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJc3AtPm1vZGUgPSBTRUVRX1JDTURfUkFOWTsKLQllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCkKKwllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKQogCQlzcC0+bW9kZSA9IFNFRVFfUkNNRF9SQk1DQVNUOwogCWVsc2UKIAkJc3AtPm1vZGUgPSBTRUVRX1JDTURfUkJDQVNUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCA3NDAyYjg1Li40MmEzNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMTQ3MywxMyArMTQ3Myw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAotCS8qIHByaXRudCBkZXZpY2UgaW5mb21hdGlvbiAqLwotCXByX2luZm8oIkJhc2UgYWRkcmVzcyBhdCAweCV4LCAiLAotCSAgICAgICAodTMyKW5kZXYtPmJhc2VfYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQlwcmludGsoIiUwMlg6IiwgbmRldi0+ZGV2X2FkZHJbaV0pOwotCXByaW50aygiJTAyWCwgSVJRICVkLlxuIiwgbmRldi0+ZGV2X2FkZHJbaV0sIG5kZXYtPmlycSk7CisJLyogcHJpbnQgZGV2aWNlIGluZm9tYXRpb24gKi8KKwlwcl9pbmZvKCJCYXNlIGFkZHJlc3MgYXQgMHgleCwgJXBNLCBJUlEgJWQuXG4iLAorCSAgICAgICAodTMyKW5kZXYtPmJhc2VfYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmlycSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzMTkwLmMgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwppbmRleCAzMTIzM2I0Li43NjBkOWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXMxOTAuYworKysgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwpAQCAtMTcsNyArMTcsOSBAQAogCiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAotICovCisqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMzIsMjUgKzM0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNkZWZpbmUgbmV0X2RydihwLCBhcmcuLi4pCWlmIChuZXRpZl9tc2dfZHJ2KHApKSBcCi0JCQkJCXByaW50ayhhcmcpCi0jZGVmaW5lIG5ldF9wcm9iZShwLCBhcmcuLi4pCWlmIChuZXRpZl9tc2dfcHJvYmUocCkpIFwKLQkJCQkJcHJpbnRrKGFyZykKLSNkZWZpbmUgbmV0X2xpbmsocCwgYXJnLi4uKQlpZiAobmV0aWZfbXNnX2xpbmsocCkpIFwKLQkJCQkJcHJpbnRrKGFyZykKLSNkZWZpbmUgbmV0X2ludHIocCwgYXJnLi4uKQlpZiAobmV0aWZfbXNnX2ludHIocCkpIFwKLQkJCQkJcHJpbnRrKGFyZykKLSNkZWZpbmUgbmV0X3R4X2VycihwLCBhcmcuLi4pCWlmIChuZXRpZl9tc2dfdHhfZXJyKHApKSBcCi0JCQkJCXByaW50ayhhcmcpCi0KICNkZWZpbmUgUEhZX01BWF9BRERSCQkzMgogI2RlZmluZSBQSFlfSURfQU5ZCQkweDFmCiAjZGVmaW5lIE1JSV9SRUdfQU5ZCQkweDFmCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS40IgogI2RlZmluZSBEUlZfTkFNRQkJInNpczE5MCIKICNkZWZpbmUgU0lTMTkwX0RSSVZFUl9OQU1FCURSVl9OQU1FICIgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgIiBEUlZfVkVSU0lPTgotI2RlZmluZSBQRlggRFJWX05BTUUgIjogIgogCiAjZGVmaW5lIHNpczE5MF9yeF9za2IJCQluZXRpZl9yeAogI2RlZmluZSBzaXMxOTBfcnhfcXVvdGEoY291bnQsIHF1b3RhKQljb3VudApAQCAtMjk0LDYgKzI4NCwxMiBAQAogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7CiAJc3RydWN0IGxpc3RfaGVhZCBmaXJzdF9waHk7CiAJdTMyIGZlYXR1cmVzOworCXUzMiBuZWdvdGlhdGVkX2xwYTsKKwllbnVtIHsKKwkJTE5LX09GRiwKKwkJTE5LX09OLAorCQlMTktfQVVUT05FRywKKwl9IGxpbmtfc3RhdHVzOwogfTsKIAogc3RydWN0IHNpczE5MF9waHkgewpAQCAtMzM0LDcgKzMzMCw3IEBACiAJeyAiU2lTIDE5MSBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBhZGFwdGVyIiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczE5MF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2lzMTkwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCAweDAxOTApLCAwLCAwLCAwIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4MDE5MSksIDAsIDAsIDEgfSwKIAl7IDAsIH0sCkBAIC0zODEsNyArMzc3LDcgQEAKIAl9CiAKIAlpZiAoaSA+IDk5KQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJQSFkgY29tbWFuZCBmYWlsZWQgIVxuIik7CisJCXByX2VycigiUEhZIGNvbW1hbmQgZmFpbGVkICFcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcGh5X2lkLCBpbnQgcmVnLCBpbnQgdmFsKQpAQCAtNDkzLDE4ICs0ODksMjQgQEAKIHsKIAl1MzIgcnhfYnVmX3N6ID0gdHAtPnJ4X2J1Zl9zejsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgbWFwcGluZzsKIAogCXNrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgcnhfYnVmX3N6KTsKLQlpZiAobGlrZWx5KHNrYikpIHsKLQkJZG1hX2FkZHJfdCBtYXBwaW5nOwotCi0JCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGNpX2Rldiwgc2tiLT5kYXRhLCB0cC0+cnhfYnVmX3N6LAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJc2lzMTkwX21hcF90b19hc2ljKGRlc2MsIG1hcHBpbmcsIHJ4X2J1Zl9zeik7Ci0JfSBlbHNlCi0JCXNpczE5MF9tYWtlX3VudXNhYmxlX2J5X2FzaWMoZGVzYyk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlnb3RvIHNrYl9hbGxvY19mYWlsZWQ7CisJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wY2lfZGV2LCBza2ItPmRhdGEsIHRwLT5yeF9idWZfc3osCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IodHAtPnBjaV9kZXYsIG1hcHBpbmcpKQorCQlnb3RvIG91dDsKKwlzaXMxOTBfbWFwX3RvX2FzaWMoZGVzYywgbWFwcGluZywgcnhfYnVmX3N6KTsKIAogCXJldHVybiBza2I7CisKK291dDoKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworc2tiX2FsbG9jX2ZhaWxlZDoKKwlzaXMxOTBfbWFrZV91bnVzYWJsZV9ieV9hc2ljKGRlc2MpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdTMyIHNpczE5MF9yeF9maWxsKHN0cnVjdCBzaXMxOTBfcHJpdmF0ZSAqdHAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01ODksOCArNTkxLDcgQEAKIAogCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShkZXNjLT5QU2l6ZSk7CiAKLQkJLy8gbmV0X2ludHIodHAsIEtFUk5fSU5GTyAiJXM6IFJ4IFBTaXplID0gJTA4eC5cbiIsIGRldi0+bmFtZSwKLQkJLy8JIHN0YXR1cyk7CisJCS8vbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LCAiUnggUFNpemUgPSAlMDh4XG4iLCBzdGF0dXMpOwogCiAJCWlmIChzaXMxOTBfcnhfcGt0X2VycihzdGF0dXMsIHN0YXRzKSA8IDApCiAJCQlzaXMxOTBfZ2l2ZV90b19hc2ljKGRlc2MsIHRwLT5yeF9idWZfc3opOwpAQCAtNjAxLDkgKzYwMiw4IEBACiAJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wY2lfZGV2OwogCiAJCQlpZiAodW5saWtlbHkocGt0X3NpemUgPiB0cC0+cnhfYnVmX3N6KSkgewotCQkJCW5ldF9pbnRyKHRwLCBLRVJOX0lORk8KLQkJCQkJICIlczogKGZyYWcpIHN0YXR1cyA9ICUwOHguXG4iLAotCQkJCQkgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwKKwkJCQkJICAgIihmcmFnKSBzdGF0dXMgPSAlMDh4XG4iLCBzdGF0dXMpOwogCQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CiAJCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlzaXMxOTBfZ2l2ZV90b19hc2ljKGRlc2MsIHRwLT5yeF9idWZfc3opOwpAQCAtNjM3LDEyICs2MzcsMTIgQEAKIAl0cC0+Y3VyX3J4ID0gY3VyX3J4OwogCiAJZGVsdGEgPSBzaXMxOTBfcnhfZmlsbCh0cCwgZGV2LCB0cC0+ZGlydHlfcngsIHRwLT5jdXJfcngpOwotCWlmICghZGVsdGEgJiYgY291bnQgJiYgbmV0aWZfbXNnX2ludHIodHApKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gUnggYnVmZmVyIGFsbG9jYXRlZC5cbiIsIGRldi0+bmFtZSk7CisJaWYgKCFkZWx0YSAmJiBjb3VudCkKKwkJbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LCAibm8gUnggYnVmZmVyIGFsbG9jYXRlZFxuIik7CiAJdHAtPmRpcnR5X3J4ICs9IGRlbHRhOwogCi0JaWYgKCgodHAtPmRpcnR5X3J4ICsgTlVNX1JYX0RFU0MpID09IHRwLT5jdXJfcngpICYmIG5ldGlmX21zZ19pbnRyKHRwKSkKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBSeCBidWZmZXJzIGV4aGF1c3RlZC5cbiIsIGRldi0+bmFtZSk7CisJaWYgKCh0cC0+ZGlydHlfcnggKyBOVU1fUlhfREVTQykgPT0gdHAtPmN1cl9yeCkKKwkJbmV0aWZfZW1lcmcodHAsIGludHIsIGRldiwgIlJ4IGJ1ZmZlcnMgZXhoYXVzdGVkXG4iKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTc1MSwxMCArNzUxLDExIEBACiAKIAlTSVNfVzMyKEludHJTdGF0dXMsIHN0YXR1cyk7CiAKLQkvLyBuZXRfaW50cih0cCwgS0VSTl9JTkZPICIlczogc3RhdHVzID0gJTA4eC5cbiIsIGRldi0+bmFtZSwgc3RhdHVzKTsKKy8vCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwgInN0YXR1cyA9ICUwOHhcbiIsIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgTGlua0NoYW5nZSkgewotCQluZXRfaW50cih0cCwgS0VSTl9JTkZPICIlczogbGluayBjaGFuZ2UuXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9pbmZvKHRwLCBpbnRyLCBkZXYsICJsaW5rIGNoYW5nZVxuIik7CisJCWRlbF90aW1lcigmdHAtPnRpbWVyKTsKIAkJc2NoZWR1bGVfd29yaygmdHAtPnBoeV90YXNrKTsKIAl9CiAKQEAgLTg0MSwxOSArODQyLDE3IEBACiAJCQlBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMgfAogCQkJQWNjZXB0QWxsUGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgcGVyZmVjdGx5IC0tIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJdW5zaWduZWQgaW50IGk7CiAKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPQogCQkJCWV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgJiAweDNmOwogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CkBAIC05MjksMTMgKzkyOCwxNSBAQAogCWlmICh2YWwgJiBCTUNSX1JFU0VUKSB7CiAJCS8vIEZJWE1FOiBuZWVkbGVzc2x5IGhpZ2ggPyAgLS0gRlIgMDIvMDcvMjAwNQogCQltb2RfdGltZXIoJnRwLT50aW1lciwgamlmZmllcyArIEhaLzEwKTsKLQl9IGVsc2UgaWYgKCEobWRpb19yZWFkX2xhdGNoZWQoaW9hZGRyLCBwaHlfaWQsIE1JSV9CTVNSKSAmCi0JCSAgICAgQk1TUl9BTkVHQ09NUExFVEUpKSB7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwl2YWwgPSBtZGlvX3JlYWRfbGF0Y2hlZChpb2FkZHIsIHBoeV9pZCwgTUlJX0JNU1IpOworCWlmICghKHZhbCAmIEJNU1JfQU5FR0NPTVBMRVRFKSAmJiB0cC0+bGlua19zdGF0dXMgIT0gTE5LX0FVVE9ORUcpIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJbmV0X2xpbmsodHAsIEtFUk5fV0FSTklORyAiJXM6IGF1dG8tbmVnb3RpYXRpbmcuLi5cbiIsCi0JCQkgZGV2LT5uYW1lKTsKLQkJbW9kX3RpbWVyKCZ0cC0+dGltZXIsIGppZmZpZXMgKyBTSVMxOTBfUEhZX1RJTUVPVVQpOwotCX0gZWxzZSB7CisJCW5ldGlmX3dhcm4odHAsIGxpbmssIGRldiwgImF1dG8tbmVnb3RpYXRpbmcuLi5cbiIpOworCQl0cC0+bGlua19zdGF0dXMgPSBMTktfQVVUT05FRzsKKwl9IGVsc2UgaWYgKCh2YWwgJiBCTVNSX0xTVEFUVVMpICYmIHRwLT5saW5rX3N0YXR1cyAhPSBMTktfT04pIHsKIAkJLyogUmVqb2ljZSAhICovCiAJCXN0cnVjdCB7CiAJCQlpbnQgdmFsOwpAQCAtOTU5LDEzICs5NjAsMTMgQEAKIAkJdTE2IGFkdiwgYXV0b2V4cCwgZ2lnYWR2LCBnaWdyZWM7CiAKIAkJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgcGh5X2lkLCAweDFmKTsKLQkJbmV0X2xpbmsodHAsIEtFUk5fSU5GTyAiJXM6IG1paSBleHQgPSAlMDR4LlxuIiwgZGV2LT5uYW1lLCB2YWwpOworCQluZXRpZl9pbmZvKHRwLCBsaW5rLCBkZXYsICJtaWkgZXh0ID0gJTA0eFxuIiwgdmFsKTsKIAogCQl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHlfaWQsIE1JSV9MUEEpOwogCQlhZHYgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHlfaWQsIE1JSV9BRFZFUlRJU0UpOwogCQlhdXRvZXhwID0gbWRpb19yZWFkKGlvYWRkciwgcGh5X2lkLCBNSUlfRVhQQU5TSU9OKTsKLQkJbmV0X2xpbmsodHAsIEtFUk5fSU5GTyAiJXM6IG1paSBscGE9JTA0eCBhZHY9JTA0eCBleHA9JTA0eC5cbiIsCi0JCQkgZGV2LT5uYW1lLCB2YWwsIGFkdiwgYXV0b2V4cCk7CisJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgIm1paSBscGE9JTA0eCBhZHY9JTA0eCBleHA9JTA0eFxuIiwKKwkJCSAgIHZhbCwgYWR2LCBhdXRvZXhwKTsKIAogCQlpZiAodmFsICYgTFBBX05QQUdFICYmIGF1dG9leHAgJiBFWFBBTlNJT05fTldBWSkgewogCQkJLyogY2hlY2sgZm9yIGdpZ2FiaXQgc3BlZWQgKi8KQEAgLTEwMDQsMTAgKzEwMDUsMTQgQEAKIAkJCVNJU19XMzIoUkdEZWxheSwgMHgwNDQwKTsKIAkJfQogCi0JCW5ldF9saW5rKHRwLCBLRVJOX0lORk8gIiVzOiBsaW5rIG9uICVzIG1vZGUuXG4iLCBkZXYtPm5hbWUsCi0JCQkgcC0+bXNnKTsKKwkJdHAtPm5lZ290aWF0ZWRfbHBhID0gcC0+dmFsOworCisJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgImxpbmsgb24gJXMgbW9kZVxuIiwgcC0+bXNnKTsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCX0KKwkJdHAtPmxpbmtfc3RhdHVzID0gTE5LX09OOworCX0gZWxzZSBpZiAoISh2YWwgJiBCTVNSX0xTVEFUVVMpICYmIHRwLT5saW5rX3N0YXR1cyAhPSBMTktfQVVUT05FRykKKwkJdHAtPmxpbmtfc3RhdHVzID0gTE5LX09GRjsKKwltb2RfdGltZXIoJnRwLT50aW1lciwgamlmZmllcyArIFNJUzE5MF9QSFlfVElNRU9VVCk7CiAKIG91dF91bmxvY2s6CiAJcnRubF91bmxvY2soKTsKQEAgLTExOTEsMTMgKzExOTYsMTcgQEAKIAogCWlmICh1bmxpa2VseShsZTMyX3RvX2NwdShkZXNjLT5zdGF0dXMpICYgT1dOYml0KSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCW5ldF90eF9lcnIodHAsIEtFUk5fRVJSIFBGWAotCQkJICAgIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKLQkJCSAgIGRldi0+bmFtZSk7CisJCW5ldGlmX2Vycih0cCwgdHhfZXJyLCBkZXYsCisJCQkgICJCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wY2lfZGV2LCBtYXBwaW5nKSkgeworCQluZXRpZl9lcnIodHAsIHR4X2VyciwgZGV2LAorCQkJCSJQQ0kgbWFwcGluZyBmYWlsZWQsIGRyb3BwaW5nIHBhY2tldCIpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQogCiAJdHAtPlR4X3NrYnVmZltlbnRyeV0gPSBza2I7CiAKQEAgLTEyMTEsNiArMTIyMCwxMiBAQAogCXdtYigpOwogCiAJZGVzYy0+c3RhdHVzID0gY3B1X3RvX2xlMzIoT1dOYml0IHwgSU5UYml0IHwgREVGYml0IHwgQ1JDYml0IHwgUEFEYml0KTsKKwlpZiAodHAtPm5lZ290aWF0ZWRfbHBhICYgKExQQV8xMDAwSEFMRiB8IExQQV8xMDBIQUxGIHwgTFBBXzEwSEFMRikpIHsKKwkJLyogSGFsZiBEdXBsZXggKi8KKwkJZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKENPTEVOIHwgQ1JTRU4gfCBCS0ZFTik7CisJCWlmICh0cC0+bmVnb3RpYXRlZF9scGEgJiAoTFBBXzEwMDBIQUxGIHwgTFBBXzEwMDBGVUxMKSkKKwkJCWRlc2MtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihFWFRFTiB8IEJTVEVOKTsgLyogZ2lnYWJpdCBIRCAqLworCX0KIAogCXRwLT5jdXJfdHgrKzsKIApAQCAtMTI4Nyw5ICsxMzAyLDkgQEAKIAogCWlmIChtaWlfaWYtPnBoeV9pZCAhPSBwaHlfZGVmYXVsdC0+cGh5X2lkKSB7CiAJCW1paV9pZi0+cGh5X2lkID0gcGh5X2RlZmF1bHQtPnBoeV9pZDsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8KLQkJICAgICAgICIlczogVXNpbmcgdHJhbnNjZWl2ZXIgYXQgYWRkcmVzcyAlZCBhcyBkZWZhdWx0LlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHRwLT5wY2lfZGV2KSwgbWlpX2lmLT5waHlfaWQpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2luZm8oIiVzOiBVc2luZyB0cmFuc2NlaXZlciBhdCBhZGRyZXNzICVkIGFzIGRlZmF1bHRcbiIsCisJCQkJcGNpX25hbWUodHAtPnBjaV9kZXYpLCBtaWlfaWYtPnBoeV9pZCk7CiAJfQogCiAJc3RhdHVzID0gbWRpb19yZWFkKGlvYWRkciwgbWlpX2lmLT5waHlfaWQsIE1JSV9CTUNSKTsKQEAgLTEzMjcsMTQgKzEzNDIsMTUgQEAKIAkJCSgobWlpX3N0YXR1cyAmIChCTVNSXzEwMEZVTEwgfCBCTVNSXzEwMEhBTEYpKSA/CiAJCQkJTEFOIDogSE9NRSkgOiBwLT50eXBlOwogCQl0cC0+ZmVhdHVyZXMgfD0gcC0+ZmVhdHVyZTsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiAlcyB0cmFuc2NlaXZlciBhdCBhZGRyZXNzICVkLlxuIiwKLQkJCXBjaV9uYW1lKHRwLT5wY2lfZGV2KSwgcC0+bmFtZSwgcGh5X2lkKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9pbmZvKCIlczogJXMgdHJhbnNjZWl2ZXIgYXQgYWRkcmVzcyAlZFxuIiwKKwkJCQlwY2lfbmFtZSh0cC0+cGNpX2RldiksIHAtPm5hbWUsIHBoeV9pZCk7CiAJfSBlbHNlIHsKIAkJcGh5LT50eXBlID0gVU5LTk9XTjsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8KLQkJCSIlczogdW5rbm93biBQSFkgMHgleDoweCV4IHRyYW5zY2VpdmVyIGF0IGFkZHJlc3MgJWRcbiIsCi0JCQlwY2lfbmFtZSh0cC0+cGNpX2RldiksCi0JCQlwaHktPmlkWzBdLCAocGh5LT5pZFsxXSAmIDB4ZmZmMCksIHBoeV9pZCk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfaW5mbygiJXM6IHVua25vd24gUEhZIDB4JXg6MHgleCB0cmFuc2NlaXZlciBhdCBhZGRyZXNzICVkXG4iLAorCQkJCXBjaV9uYW1lKHRwLT5wY2lfZGV2KSwKKwkJCQlwaHktPmlkWzBdLCAocGh5LT5pZFsxXSAmIDB4ZmZmMCksIHBoeV9pZCk7CiAJfQogfQogCkBAIC0xMzk4LDggKzE0MTQsOSBAQAogCX0KIAogCWlmIChsaXN0X2VtcHR5KCZ0cC0+Zmlyc3RfcGh5KSkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTyAiJXM6IE5vIE1JSSB0cmFuc2NlaXZlcnMgZm91bmQhXG4iLAotCQkJICBwY2lfbmFtZSh0cC0+cGNpX2RldikpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2luZm8oIiVzOiBObyBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kIVxuIiwKKwkJCQlwY2lfbmFtZSh0cC0+cGNpX2RldikpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0NDUsNyArMTQ2Miw4IEBACiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnRwKSk7CiAJaWYgKCFkZXYpIHsKLQkJbmV0X2RydigmZGVidWcsIEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGFsbG9jIG5ldyBldGhlcm5ldFxuIik7CisJCWlmIChuZXRpZl9tc2dfZHJ2KCZkZWJ1ZykpCisJCQlwcl9lcnIoInVuYWJsZSB0byBhbGxvYyBuZXcgZXRoZXJuZXRcbiIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF8wOwogCX0KQEAgLTE0NTgsMzQgKzE0NzYsMzkgQEAKIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjIDwgMCkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fRVJSICIlczogZW5hYmxlIGZhaWx1cmVcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9lcnIoIiVzOiBlbmFibGUgZmFpbHVyZVxuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9mcmVlX2Rldl8xOwogCX0KIAogCXJjID0gLUVOT0RFVjsKIAogCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fRVJSICIlczogcmVnaW9uICMwIGlzIG5vIE1NSU8gcmVzb3VyY2UuXG4iLAotCQkJICBwY2lfbmFtZShwZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfZXJyKCIlczogcmVnaW9uICMwIGlzIG5vIE1NSU8gcmVzb3VyY2VcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV8yOwogCX0KIAlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSA8IFNJUzE5MF9SRUdTX1NJWkUpIHsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0VSUiAiJXM6IGludmFsaWQgUENJIHJlZ2lvbiBzaXplKHMpLlxuIiwKLQkJCSAgcGNpX25hbWUocGRldikpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2VycigiJXM6IGludmFsaWQgUENJIHJlZ2lvbiBzaXplKHMpXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfcGNpX2Rpc2FibGVfMjsKIAl9CiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOwogCWlmIChyYyA8IDApIHsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0VSUiBQRlggIiVzOiBjb3VsZCBub3QgcmVxdWVzdCByZWdpb25zLlxuIiwKLQkJCSAgcGNpX25hbWUocGRldikpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IHJlZ2lvbnNcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV8yOwogCX0KIAogCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZiAocmMgPCAwKSB7Ci0JCW5ldF9wcm9iZSh0cCwgS0VSTl9FUlIgIiVzOiBETUEgY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iLAotCQkJICBwY2lfbmFtZShwZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfZXJyKCIlczogRE1BIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfZnJlZV9yZXNfMzsKIAl9CiAKQEAgLTE0OTMsMTQgKzE1MTYsMTYgQEAKIAogCWlvYWRkciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBTSVMxOTBfUkVHU19TSVpFKTsKIAlpZiAoIWlvYWRkcikgewotCQluZXRfcHJvYmUodHAsIEtFUk5fRVJSICIlczogY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iLAotCQkJICBwY2lfbmFtZShwZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfZXJyKCIlczogY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9mcmVlX3Jlc18zOwogCX0KIAogCXRwLT5wY2lfZGV2ID0gcGRldjsKIAl0cC0+bW1pb19hZGRyID0gaW9hZGRyOworCXRwLT5saW5rX3N0YXR1cyA9IExOS19PRkY7CiAKIAlzaXMxOTBfaXJxX21hc2tfYW5kX2Fjayhpb2FkZHIpOwogCkBAIC0xNTMwLDkgKzE1NTUsOCBAQAogCWlmICh0bXA4ICYgQ21kVHhFbmIpCiAJCVNJU19XOChUeENvbnRyb2wsIHRtcDggJiB+Q21kVHhFbmIpOwogCi0KLQluZXRfdHhfZXJyKHRwLCBLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTA4eCAlMDh4LlxuIiwKLQkJICAgZGV2LT5uYW1lLCBTSVNfUjMyKFR4Q29udHJvbCksIFNJU19SMzIoVHhTdHMpKTsKKwluZXRpZl9pbmZvKHRwLCB0eF9lcnIsIGRldiwgIlRyYW5zbWl0IHRpbWVvdXQsIHN0YXR1cyAlMDh4ICUwOHhcbiIsCisJCSAgIFNJU19SMzIoVHhDb250cm9sKSwgU0lTX1IzMihUeFN0cykpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KIAlTSVNfVzMyKEludHJNYXNrLCAweDAwMDApOwpAQCAtMTU2MSwxNSArMTU4NSwxNiBAQAogCXUxNiBzaWc7CiAJaW50IGk7CiAKLQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTyAiJXM6IFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBFRVBST01cbiIsCi0JCSAgcGNpX25hbWUocGRldikpOworCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQlwcl9pbmZvKCIlczogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTVxuIiwgcGNpX25hbWUocGRldikpOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgc2FuZSBFRVBST00gKi8KIAlzaWcgPSAodTE2KSBzaXMxOTBfcmVhZF9lZXByb20oaW9hZGRyLCBFRVBST01TaWduYXR1cmUpOwogCiAJaWYgKChzaWcgPT0gMHhmZmZmKSB8fCAoc2lnID09IDB4MDAwMCkpIHsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiBFcnJvciBFRVBST00gcmVhZCAleC5cbiIsCi0JCQkgIHBjaV9uYW1lKHBkZXYpLCBzaWcpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2luZm8oIiVzOiBFcnJvciBFRVBST00gcmVhZCAleFxuIiwKKwkJCQlwY2lfbmFtZShwZGV2KSwgc2lnKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xNjAzLDggKzE2MjgsOCBAQAogCXU4IHJlZywgdG1wODsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCW5ldF9wcm9iZSh0cCwgS0VSTl9JTkZPICIlczogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIEFQQy5cbiIsCi0JCSAgcGNpX25hbWUocGRldikpOworCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQlwcl9pbmZvKCIlczogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIEFQQ1xuIiwgcGNpX25hbWUocGRldikpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRzKTsgaSsrKSB7CiAJCWlzYV9icmlkZ2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCBpZHNbaV0sIE5VTEwpOwpAQCAtMTYxMyw4ICsxNjM4LDkgQEAKIAl9CiAKIAlpZiAoIWlzYV9icmlkZ2UpIHsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiBDYW4gbm90IGZpbmQgSVNBIGJyaWRnZS5cbiIsCi0JCQkgIHBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9pbmZvKCIlczogQ2FuIG5vdCBmaW5kIElTQSBicmlkZ2VcbiIsCisJCQkJcGNpX25hbWUocGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE2OTUsNyArMTcyMSw3IEBACiAJaW50IHBoeV9pZCA9IHRwLT5taWlfaWYucGh5X2lkOwogCWludCB2YWw7CiAKLQluZXRfbGluayh0cCwgS0VSTl9JTkZPICIlczogRW5hYmxpbmcgQXV0by1uZWdvdGlhdGlvbi5cbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyh0cCwgbGluaywgZGV2LCAiRW5hYmxpbmcgQXV0by1uZWdvdGlhdGlvblxuIik7CiAKIAl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHlfaWQsIE1JSV9BRFZFUlRJU0UpOwogCkBAIC0xODIyLDcgKzE4NDgsOCBAQAogCWludCByYzsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKSB7Ci0JCW5ldF9kcnYoJmRlYnVnLCBLRVJOX0lORk8gU0lTMTkwX0RSSVZFUl9OQU1FICIgbG9hZGVkLlxuIik7CisJCWlmIChuZXRpZl9tc2dfZHJ2KCZkZWJ1ZykpCisJCQlwcl9pbmZvKFNJUzE5MF9EUklWRVJfTkFNRSAiIGxvYWRlZFxuIik7CiAJCXByaW50ZWRfdmVyc2lvbiA9IDE7CiAJfQogCkBAIC0xODYyLDEyICsxODg5LDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJfcmVtb3ZlX21paTsKIAotCW5ldF9wcm9iZSh0cCwgS0VSTl9JTkZPICIlczogJXMgYXQgJXAgKElSUTogJWQpLCAlcE1cbiIsCi0JCSAgcGNpX25hbWUocGRldiksIHNpc19jaGlwX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKLQkJICBpb2FkZHIsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKLQotCW5ldF9wcm9iZSh0cCwgS0VSTl9JTkZPICIlczogJXMgbW9kZS5cbiIsIGRldi0+bmFtZSwKLQkJICAodHAtPmZlYXR1cmVzICYgRl9IQVNfUkdNSUkpID8gIlJHTUlJIiA6ICJHTUlJIik7CisJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiJXM6ICVzIGF0ICVwIChJUlE6ICVkKSwgJXBNXG4iLAorCQkJICAgIHBjaV9uYW1lKHBkZXYpLAorCQkJICAgIHNpc19jaGlwX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKKwkJCSAgICBpb2FkZHIsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiJXMgbW9kZS5cbiIsCisJCQkgICAgKHRwLT5mZWF0dXJlcyAmIEZfSEFTX1JHTUlJKSA/ICJSR01JSSIgOiAiR01JSSIpOworCX0KIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggNzM2MGQ0Yi4uY2MwYzczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCSJTaVMgOTAwIFBDSSBGYXN0IEV0aGVybmV0IiwKIAkiU2lTIDcwMTYgUENJIEZhc3QgRXRoZXJuZXQiCiB9Owotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczkwMF9wY2lfdGJsIFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNpczkwMF9wY2lfdGJsKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9TSSwgUENJX0RFVklDRV9JRF9TSV85MDAsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFNJU185MDB9LAogCXtQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJXzcwMTYsCkBAIC0yMjg4LDcgKzIyODgsNyBAQAogCQlyeF9tb2RlID0gUkZQcm9taXNjdW91czsKIAkJZm9yIChpID0gMDsgaSA8IHRhYmxlX2VudHJpZXM7IGkrKykKIAkJCW1jX2ZpbHRlcltpXSA9IDB4ZmZmZjsKLQl9IGVsc2UgaWYgKChuZXRfZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KG5ldF9kZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKG5ldF9kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiB0b28gbWFueSBtdWx0aWNhc3QgYWRkcmVzc2VzIG9yIGFjY2VwdCBhbGwgbXVsdGljYXN0IHBhY2tldCAqLwogCQlyeF9tb2RlID0gUkZBQUIgfCBSRkFBTTsKQEAgLTIzMDAsOSArMjMwMCw4IEBACiAJCSAqIHBhY2tldHMgKi8KIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCXJ4X21vZGUgPSBSRkFBQjsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gbmV0X2Rldi0+bWNfbGlzdDsKLQkJCW1jbGlzdCAmJiBpIDwgbmV0X2Rldi0+bWNfY291bnQ7Ci0JCQlpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgbmV0X2RldikgewogCQkJdW5zaWduZWQgaW50IGJpdF9uciA9CiAJCQkJc2lzOTAwX21jYXN0X2JpdG5yKG1jbGlzdC0+ZG1pX2FkZHIsIHNpc19wcml2LT5jaGlwc2V0X3Jldik7CiAJCQltY19maWx0ZXJbYml0X25yID4+IDRdIHw9ICgxIDw8IChiaXRfbnIgJiAweGYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCmluZGV4IGRiMjE2YTcuLjE5MjFhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiBleHRlcm4gdm9pZCBtYWNfZHJ2X2NsZWFyX3J4X3F1ZXVlKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIGVuYWJsZV90eF9pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgcXVldWUpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2tmZGRpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShza2ZkZGlfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NLLCBQQ0lfREVWSUNFX0lEX1NLX0ZQLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtNDM1LDEzICs0MzUsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCXJlYWRfYWRkcmVzcyhzbWMsIE5VTEwpOwotCXByX2RlYnVnKEtFUk5fSU5GTyAiSFctQWRkcjogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbMF0sCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbMV0sCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbMl0sCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbM10sCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbNF0sCi0JICAgICAgIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmFbNV0pOworCXByX2RlYnVnKEtFUk5fSU5GTyAiSFctQWRkcjogJXBNRlxuIiwgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYSk7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHNtYy0+aHcuZmRkaV9jYW5vbl9hZGRyLmEsIDYpOwogCiAJc210X3Jlc2V0X2RlZmF1bHRzKHNtYywgMCk7CkBAIC04NTgsOCArODUyLDcgQEAKIHN0YXRpYyB2b2lkIHNrZnBfY3RsX3NldF9tdWx0aWNhc3RfbGlzdF93b19sb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNfc21jICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwkvKiBwdHIgdG8gbXVsdGljYXN0IGFkZHIgZW50cnkgKi8KLQlpbnQgaTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC04NzgsMjkgKzg3MSwxOSBAQAogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkJbWFjX2Rydl9yeF9tb2RlKHNtYywgUlhfRU5BQkxFX0FMTE1VTFRJKTsKIAkJCXByX2RlYnVnKEtFUk5fSU5GTyAiRU5BQkxFIEFMTCBNQyBBRERSRVNTRVNcbiIpOwotCQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCQlpZiAoZGV2LT5tY19jb3VudCA8PSBGUE1BWF9NVUxUSUNBU1QpIHsKKwkJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkJCWlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA8PSBGUE1BWF9NVUxUSUNBU1QpIHsKIAkJCQkvKiB1c2UgZXhhY3QgZmlsdGVyaW5nICovCiAKIAkJCQkvLyBwb2ludCB0byBmaXJzdCBtdWx0aWNhc3QgYWRkcgotCQkJCWRtaSA9IGRldi0+bWNfbGlzdDsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJCQltYWNfYWRkX211bHRpY2FzdChzbWMsIAogCQkJCQkJCSAgKHN0cnVjdCBmZGRpX2FkZHIgKilkbWktPmRtaV9hZGRyLCAKIAkJCQkJCQkgIDEpOwogCi0JCQkJCXByX2RlYnVnKEtFUk5fSU5GTyAiRU5BQkxFIE1DIEFERFJFU1M6Iik7Ci0JCQkJCXByX2RlYnVnKCIgJTAyeCAlMDJ4ICUwMnggIiwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbMF0sCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzFdLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkclsyXSk7Ci0JCQkJCXByX2RlYnVnKCIlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbM10sCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzRdLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkcls1XSk7Ci0JCQkJCWRtaSA9IGRtaS0+bmV4dDsKLQkJCQl9CS8vIGZvcgorCQkJCQlwcl9kZWJ1ZyhLRVJOX0lORk8gIkVOQUJMRSBNQyBBRERSRVNTOiAlcE1GXG4iLAorCQkJCQkJZG1pLT5kbWlfYWRkcik7CisJCQkJfQogCiAJCQl9IGVsc2UgewkvLyBtb3JlIE1DIGFkZHJlc3NlcyB0aGFuIEhXIHN1cHBvcnRzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAzNzlhM2RjLi5kMDA1OGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0yMyw2ICsyMyw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDYsNyArNDgsNiBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkic2tnZSIKICNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEzIgotI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogI2RlZmluZSBERUZBVUxUX1RYX1JJTkdfU0laRQkxMjgKICNkZWZpbmUgREVGQVVMVF9SWF9SSU5HX1NJWkUJNTEyCkBAIC03MCwxNSArNzEsMTUgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAotc3RhdGljIGNvbnN0IHUzMiBkZWZhdWx0X21zZwotCT0gTkVUSUZfTVNHX0RSVnwgTkVUSUZfTVNHX1BST0JFfCBORVRJRl9NU0dfTElOSwotCSAgfCBORVRJRl9NU0dfSUZVUHwgTkVUSUZfTVNHX0lGRE9XTjsKK3N0YXRpYyBjb25zdCB1MzIgZGVmYXVsdF9tc2cgPSAoTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSB8CisJCQkJTkVUSUZfTVNHX0xJTksgfCBORVRJRl9NU0dfSUZVUCB8CisJCQkJTkVUSUZfTVNHX0lGRE9XTik7CiAKIHN0YXRpYyBpbnQgZGVidWcgPSAtMTsJLyogZGVmYXVsdHMgYWJvdmUgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza2dlX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2tnZV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEXzNDT00sIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzk0MEIpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX0dFKSB9LApAQCAtMTg3LDggKzE4OCw4IEBACiAKIAkvKiBGb3JjZSB0byAxMC8xMDAgc2tnZV9yZXNldCB3aWxsIHJlLWVuYWJsZSBvbiByZXN1bWUJICovCiAJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0FEViwKLQkJICAgICBQSFlfQU5fMTAwRlVMTCB8IFBIWV9BTl8xMDBIQUxGIHwKLQkJICAgICBQSFlfQU5fMTBGVUxMIHwgUEhZX0FOXzEwSEFMRnwgUEhZX0FOX0NTTUEpOworCQkgICAgIChQSFlfQU5fMTAwRlVMTCB8IFBIWV9BTl8xMDBIQUxGIHwKKwkJICAgICAgUEhZX0FOXzEwRlVMTCB8IFBIWV9BTl8xMEhBTEYgfCBQSFlfQU5fQ1NNQSkpOwogCS8qIG5vIDEwMDAgSEQvRkQgKi8KIAlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWXzEwMDBUX0NUUkwsIDApOwogCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQ1RSTCwKQEAgLTI1NywyNSArMjU4LDI4IEBACiAJdTMyIHN1cHBvcnRlZDsKIAogCWlmIChody0+Y29wcGVyKSB7Ci0JCXN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKLQkJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAotCQkJfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgotCQkJfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAotCQkJfCBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYKLQkJCXwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCQl8IFNVUFBPUlRFRF9BdXRvbmVnfCBTVVBQT1JURURfVFA7CisJCXN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCSAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAorCQkJICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkgICAgIFNVUFBPUlRFRF9UUCk7CiAKIAkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKLQkJCXN1cHBvcnRlZCAmPSB+KFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKLQkJCQkJICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKLQkJCQkJICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCQkJCSAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCk7CisJCQlzdXBwb3J0ZWQgJj0gfihTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpOwogCiAJCWVsc2UgaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT04pCiAJCQlzdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZjsKIAl9IGVsc2UKLQkJc3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmCi0JCQl8IFNVUFBPUlRFRF9GSUJSRSB8IFNVUFBPUlRFRF9BdXRvbmVnOworCQlzdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCSAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCSAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCSAgICAgU1VQUE9SVEVEX0F1dG9uZWcpOwogCiAJcmV0dXJuIHN1cHBvcnRlZDsKIH0KQEAgLTM2NSw3ICszNjksNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2tnZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtODEyLDcgKzgxNiw3IEBACiAJdTMyIHJlZzI7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2tnZS0+aHctPnBkZXYsIFBDSV9ERVZfUkVHMiwgJnJlZzIpOwotCXJldHVybiAxIDw8ICggKChyZWcyICYgUENJX1ZQRF9ST01fU1opID4+IDE0KSArIDgpOworCXJldHVybiAxIDw8ICgoKHJlZzIgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpICsgOCk7CiB9CiAKIHN0YXRpYyB1MzIgc2tnZV92cGRfcmVhZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGNhcCwgdTE2IG9mZnNldCkKQEAgLTEwNDMsNyArMTA0Nyw3IEBACiAKIAkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCQlza2dlX3J4X3NldHVwKHNrZ2UsIGUsIHNrYiwgc2tnZS0+cnhfYnVmX3NpemUpOwotCX0gd2hpbGUgKCAoZSA9IGUtPm5leHQpICE9IHJpbmctPnN0YXJ0KTsKKwl9IHdoaWxlICgoZSA9IGUtPm5leHQpICE9IHJpbmctPnN0YXJ0KTsKIAogCXJpbmctPnRvX2NsZWFuID0gcmluZy0+c3RhcnQ7CiAJcmV0dXJuIDA7CkBAIC0xMDUxLDcgKzEwNTUsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqc2tnZV9wYXVzZShlbnVtIHBhdXNlX3N0YXR1cyBzdGF0dXMpCiB7Ci0Jc3dpdGNoKHN0YXR1cykgeworCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBGTE9XX1NUQVRfTk9ORToKIAkJcmV0dXJuICJub25lIjsKIAljYXNlIEZMT1dfU1RBVF9SRU1fU0VORDoKQEAgLTEwNzQsMTMgKzEwNzgsMTEgQEAKIAluZXRpZl9jYXJyaWVyX29uKHNrZ2UtPm5ldGRldik7CiAJbmV0aWZfd2FrZV9xdWV1ZShza2dlLT5uZXRkZXYpOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKHNrZ2UpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCSAgICAgICAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LCBmbG93IGNvbnRyb2wgJXNcbiIsCi0JCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIHNrZ2UtPnNwZWVkLAotCQkgICAgICAgc2tnZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMID8gImZ1bGwiIDogImhhbGYiLAotCQkgICAgICAgc2tnZV9wYXVzZShza2dlLT5mbG93X3N0YXR1cykpOwotCX0KKwluZXRpZl9pbmZvKHNrZ2UsIGxpbmssIHNrZ2UtPm5ldGRldiwKKwkJICAgIkxpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LCBmbG93IGNvbnRyb2wgJXNcbiIsCisJCSAgIHNrZ2UtPnNwZWVkLAorCQkgICBza2dlLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIsCisJCSAgIHNrZ2VfcGF1c2Uoc2tnZS0+Zmxvd19zdGF0dXMpKTsKIH0KIAogc3RhdGljIHZvaWQgc2tnZV9saW5rX2Rvd24oc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKQEAgLTEwODksOCArMTA5MSw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYoc2tnZS0+bmV0ZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKHNrZ2UtPm5ldGRldik7CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsoc2tnZSkpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgc2tnZS0+bmV0ZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHNrZ2UsIGxpbmssIHNrZ2UtPm5ldGRldiwgIkxpbmsgaXMgZG93blxuIik7CiB9CiAKIApAQCAtMTEzMiw4ICsxMTMzLDcgQEAKIHsKIAl1MTYgdiA9IDA7CiAJaWYgKF9feG1fcGh5X3JlYWQoaHcsIHBvcnQsIHJlZywgJnYpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSByZWFkIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogcGh5IHJlYWQgdGltZWQgb3V0XG4iLCBody0+ZGV2W3BvcnRdLT5uYW1lKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtMTI1NSw4ICsxMjU1LDcgQEAKIAogCQlscGEgPSB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX1hNQUNfQVVORV9MUCk7CiAJCWlmIChscGEgJiBQSFlfQl9BTl9SRikgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IHJlbW90ZSBmYXVsdFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X25vdGljZShkZXYsICJyZW1vdGUgZmF1bHRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTEyNzEsOCArMTI3MCw3IEBACiAJCQlza2dlLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IGR1cGxleCBtaXNtYXRjaFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X25vdGljZShkZXYsICJkdXBsZXggbWlzbWF0Y2hcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTEzMjcsNyArMTMyNSw3IEBACiAJLyogT3B0aW1pemUgTURJTyB0cmFuc2ZlciBieSBzdXBwcmVzc2luZyBwcmVhbWJsZS4gKi8KIAlyID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKTsKIAlyIHw9ICBYTV9NTVVfTk9fUFJFOwotCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQscik7CisJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fTU1VX0NNRCwgcik7CiAKIAlzd2l0Y2ggKGlkMSkgewogCWNhc2UgUEhZX0JDT01fSUQxX0MwOgpAQCAtMTQ2NCw4ICsxNDYyLDcgQEAKIAogCQlscGEgPSB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX1hNQUNfQVVORV9MUCk7CiAJCWlmIChscGEgJiBQSFlfQl9BTl9SRikgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IHJlbW90ZSBmYXVsdFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X25vdGljZShkZXYsICJyZW1vdGUgZmF1bHRcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMTQ4MCw4ICsxNDc3LDcgQEAKIAkJCXNrZ2UtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogZHVwbGV4IG1pc21hdGNoXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfbm90aWNlKGRldiwgImR1cGxleCBtaXNtYXRjaFxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xNTE5LDcgKzE1MTUsNyBAQAogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSAoc3RydWN0IHNrZ2VfcG9ydCAqKSBhcmc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrZ2UtPm5ldGRldjsKLSAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CisJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTM4LDcgKzE1MzQsNyBAQAogCQkJZ290byBsaW5rX2Rvd247CiAJfQogCi0gICAgICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgZG93biAqLworCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgZG93biAqLwogCWlmICh4bV9jaGVja19saW5rKGRldikpIHsKIAkJdTE2IG1zayA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fSU1TSyk7CiAJCW1zayAmPSB+WE1fSVNfSU5QX0FTUzsKQEAgLTE1NjksNyArMTU2NSw3IEBACiAJCXVkZWxheSgxKTsKIAl9CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IGdlbmVzaXMgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCW5ldGRldl93YXJuKGRldiwgImdlbmVzaXMgcmVzZXQgZmFpbGVkXG4iKTsKIAogIHJlc2V0X29rOgogCS8qIFVucmVzZXQgdGhlIFhNQUMuICovCkBAIC0xNTk1LDcgKzE1OTEsNyBAQAogCX0KIAogCi0Jc3dpdGNoKGh3LT5waHlfdHlwZSkgeworCXN3aXRjaCAoaHctPnBoeV90eXBlKSB7CiAJY2FzZSBTS19QSFlfWE1BQzoKIAkJeG1fcGh5X2luaXQoc2tnZSk7CiAJCWJyZWFrOwpAQCAtMTcwMiw3ICsxNjk4LDcgQEAKIAogCWlmIChqdW1ibykgewogCQkvKiBFbmFibGUgZnJhbWUgZmx1c2hpbmcgaWYganVtYm8gZnJhbWVzIHVzZWQgKi8KLQkJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCxSWF9NRkZfQ1RSTDEpLCBNRkZfRU5BX0ZMVVNIKTsKKwkJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgUlhfTUZGX0NUUkwxKSwgTUZGX0VOQV9GTFVTSCk7CiAJfSBlbHNlIHsKIAkJLyogZW5hYmxlIHRpbWVvdXQgdGltZXJzIGlmIG5vcm1hbCBmcmFtZXMgKi8KIAkJc2tnZV93cml0ZTE2KGh3LCBCM19QQV9DVFJMLApAQCAtMTcxNyw3ICsxNzEzLDcgQEAKIAl1bnNpZ25lZCByZXRyaWVzID0gMTAwMDsKIAl1MTYgY21kOwogCi0gCS8qIERpc2FibGUgVHggYW5kIFJ4ICovCisJLyogRGlzYWJsZSBUeCBhbmQgUnggKi8KIAljbWQgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpOwogCWNtZCAmPSB+KFhNX01NVV9FTkFfUlggfCBYTV9NTVVfRU5BX1RYKTsKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9NTVVfQ01ELCBjbWQpOwpAQCAtMTc5MiwxMiArMTc4OCwxMSBAQAogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBzdGF0dXMgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX0lTUkMpOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKHNrZ2UpKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiBtYWMgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCW5ldGlmX3ByaW50ayhza2dlLCBpbnRyLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCSAgICAgIm1hYyBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAKIAlpZiAoaHctPnBoeV90eXBlID09IFNLX1BIWV9YTUFDICYmIChzdGF0dXMgJiBYTV9JU19JTlBfQVNTKSkgewotICAJCXhtX2xpbmtfZG93bihodywgcG9ydCk7CisJCXhtX2xpbmtfZG93bihodywgcG9ydCk7CiAJCW1vZF90aW1lcigmc2tnZS0+bGlua190aW1lciwgamlmZmllcyArIDEpOwogCX0KIApAQCAtMTgzMSw3ICsxODI2LDcgQEAKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9NTVVfQ01ELCBjbWQpOwogCiAJbW9kZSA9IHhtX3JlYWQzMihodywgcG9ydCwgWE1fTU9ERSk7Ci0JaWYgKHNrZ2UtPmZsb3dfc3RhdHVzPT0gRkxPV19TVEFUX1NZTU1FVFJJQyB8fAorCWlmIChza2dlLT5mbG93X3N0YXR1cyA9PSBGTE9XX1NUQVRfU1lNTUVUUklDIHx8CiAJICAgIHNrZ2UtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBVF9MT0NfU0VORCkgewogCQkvKgogCQkgKiBDb25maWd1cmUgUGF1c2UgRnJhbWUgR2VuZXJhdGlvbgpAQCAtMTg5OCwxMiArMTg5MywxMSBAQAogCXUxNiBpc3JjOwogCiAJaXNyYyA9IHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfU1RBVCk7Ci0JaWYgKG5ldGlmX21zZ19pbnRyKHNrZ2UpKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiBwaHkgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgc2tnZS0+bmV0ZGV2LT5uYW1lLCBpc3JjKTsKKwluZXRpZl9wcmludGsoc2tnZSwgaW50ciwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJwaHkgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLCBpc3JjKTsKIAogCWlmIChpc3JjICYgUEhZX0JfSVNfUFNFKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5jb3JyZWN0YWJsZSBwYWlyIHN3YXAgZXJyb3JcbiIsCisJCXByX2VycigiJXM6IHVuY29ycmVjdGFibGUgcGFpciBzd2FwIGVycm9yXG4iLAogCQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CiAKIAkvKiBXb3JrYXJvdW5kIEJDb20gRXJyYXRhOgpAQCAtMTkzNiw4ICsxOTMwLDcgQEAKIAkJCXJldHVybiAwOwogCX0KIAotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHdyaXRlIHRpbWVvdXRcbiIsCi0JICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCXByX3dhcm5pbmcoIiVzOiBwaHkgd3JpdGUgdGltZW91dFxuIiwgaHctPmRldltwb3J0XS0+bmFtZSk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTE5NjUsOCArMTk1OCw3IEBACiB7CiAJdTE2IHYgPSAwOwogCWlmIChfX2dtX3BoeV9yZWFkKGh3LCBwb3J0LCByZWcsICZ2KSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgcmVhZCB0aW1lb3V0XG4iLAotCSAgICAgICBody0+ZGV2W3BvcnRdLT5uYW1lKTsKKwkJcHJfd2FybmluZygiJXM6IHBoeSByZWFkIHRpbWVvdXRcbiIsIGh3LT5kZXZbcG9ydF0tPm5hbWUpOwogCXJldHVybiB2OwogfQogCkBAIC0yMjk4LDkgKzIyOTAsOCBAQAogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IHN0YXR1cyA9IHNrZ2VfcmVhZDgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0lSUV9TUkMpKTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihza2dlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogbWFjIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwluZXRpZl9wcmludGsoc2tnZSwgaW50ciwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJtYWMgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOwogCiAJaWYgKHN0YXR1cyAmIEdNX0lTX1JYX0ZGX09SKSB7CiAJCSsrZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9yczsKQEAgLTIzNzksOSArMjM3MCw4IEBACiAJaXN0YXR1cyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfU1RBVCk7CiAJcGh5c3RhdCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfU1RBVCk7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKLQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgaXN0YXR1cywgcGh5c3RhdCk7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIGludHIsIEtFUk5fREVCVUcsIHNrZ2UtPm5ldGRldiwKKwkJICAgICAicGh5IGludGVycnVwdCBzdGF0dXMgMHgleCAweCV4XG4iLCBpc3RhdHVzLCBwaHlzdGF0KTsKIAogCWlmIChpc3RhdHVzICYgUEhZX01fSVNfQU5fQ09NUEwpIHsKIAkJaWYgKGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0xQKQpAQCAtMjQ0MSw4ICsyNDMxLDcgQEAKIAl9CiAJcmV0dXJuOwogIGZhaWxlZDoKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogYXV0b25lZ290aWF0aW9uIGZhaWxlZCAoJXMpXG4iLAotCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIHJlYXNvbik7CisJcHJfZXJyKCIlczogYXV0b25lZ290aWF0aW9uIGZhaWxlZCAoJXMpXG4iLCBza2dlLT5uZXRkZXYtPm5hbWUsIHJlYXNvbik7CiAKIAkvKiBYWFggcmVzdGFydCBhdXRvbmVnb3RpYXRpb24/ICovCiB9CkBAIC0yNDgwLDcgKzI0NjksNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsJLyogUGh5IHN0aWxsIGluIHJlc2V0ICovCiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgogCQlkYXRhLT5waHlfaWQgPSBody0+cGh5X2FkZHI7CiAKQEAgLTI1NzEsOCArMjU2MCw3IEBACiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChza2dlKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBlbmFibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyhza2dlLCBpZnVwLCBza2dlLT5uZXRkZXYsICJlbmFibGluZyBpbnRlcmZhY2VcbiIpOwogCiAJaWYgKGRldi0+bXR1ID4gUlhfQlVGX1NJWkUpCiAJCXNrZ2UtPnJ4X2J1Zl9zaXplID0gZGV2LT5tdHUgKyBFVEhfSExFTjsKQEAgLTI2NzAsOCArMjY1OCw3IEBACiAJaWYgKHNrZ2UtPm1lbSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWlmIChuZXRpZl9tc2dfaWZkb3duKHNrZ2UpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyhza2dlLCBpZmRvd24sIHNrZ2UtPm5ldGRldiwgImRpc2FibGluZyBpbnRlcmZhY2VcbiIpOwogCiAJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCkBAIC0yNzgxLDcgKzI3NjgsNyBAQAogCQkgKiBkb2VzLiAgTG9va3MgbGlrZSBoYXJkd2FyZSBpcyB3cm9uZz8KIAkJICovCiAJCWlmIChpcGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCAmJgotCSAgICAgICAgICAgIGh3LT5jaGlwX3JldiA9PSAwICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT04pCisJCSAgICBody0+Y2hpcF9yZXYgPT0gMCAmJiBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OKQogCQkJY29udHJvbCA9IEJNVV9UQ1BfQ0hFQ0s7CiAJCWVsc2UKIAkJCWNvbnRyb2wgPSBCTVVfVURQX0NIRUNLOwpAQCAtMjc5Myw3ICsyNzgwLDcgQEAKIAkJY29udHJvbCA9IEJNVV9DSEVDSzsKIAogCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgLyogc2luZ2xlIGJ1ZmZlciBpLmUuIG5vIGZyYWdtZW50cyAqLwotCQljb250cm9sIHw9IEJNVV9FT0Z8IEJNVV9JUlFfRU9GOworCQljb250cm9sIHw9IEJNVV9FT0YgfCBCTVVfSVJRX0VPRjsKIAllbHNlIHsKIAkJc3RydWN0IHNrZ2VfdHhfZGVzYyAqdGYgPSB0ZDsKIApAQCAtMjgyNSwxNSArMjgxMiwxNSBAQAogCiAJc2tnZV93cml0ZTgoaHcsIFFfQUREUih0eHFhZGRyW3NrZ2UtPnBvcnRdLCBRX0NTUiksIENTUl9TVEFSVCk7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza2dlKSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV0ZCwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gc2tnZS0+dHhfcmluZy5zdGFydCwgc2tiLT5sZW4pOworCW5ldGlmX3ByaW50ayhza2dlLCB0eF9xdWV1ZWQsIEtFUk5fREVCVUcsIHNrZ2UtPm5ldGRldiwKKwkJICAgICAidHggcXVldWVkLCBzbG90ICV0ZCwgbGVuICVkXG4iLAorCQkgICAgIGUgLSBza2dlLT50eF9yaW5nLnN0YXJ0LCBza2ItPmxlbik7CiAKIAlza2dlLT50eF9yaW5nLnRvX3VzZSA9IGUtPm5leHQ7CiAJc21wX3dtYigpOwogCiAJaWYgKHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpIDw9IFRYX0xPV19XQVRFUikgewotCQlwcl9kZWJ1ZygiJXM6IHRyYW5zbWl0IHF1ZXVlIGZ1bGxcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9kYmcoZGV2LCAidHJhbnNtaXQgcXVldWUgZnVsbFxuIik7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKQEAgLTI4NTgsOSArMjg0NSw4IEBACiAJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAKIAlpZiAoY29udHJvbCAmIEJNVV9FT0YpIHsKLQkJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9kb25lKHNrZ2UpKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHR4IGRvbmUgc2xvdCAldGRcbiIsCi0JCQkgICAgICAgc2tnZS0+bmV0ZGV2LT5uYW1lLCBlIC0gc2tnZS0+dHhfcmluZy5zdGFydCk7CisJCW5ldGlmX3ByaW50ayhza2dlLCB0eF9kb25lLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCQkgICAgICJ0eCBkb25lIHNsb3QgJXRkXG4iLCBlIC0gc2tnZS0+dHhfcmluZy5zdGFydCk7CiAKIAkJZGV2X2tmcmVlX3NrYihlLT5za2IpOwogCX0KQEAgLTI4ODUsOCArMjg3MSw3IEBACiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfbXNnX3RpbWVyKHNrZ2UpKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCB0aW1lb3V0XG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhza2dlLCB0aW1lciwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LCAidHggdGltZW91dFxuIik7CiAKIAlza2dlX3dyaXRlOChza2dlLT5odywgUV9BRERSKHR4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX1NUT1ApOwogCXNrZ2VfdHhfY2xlYW4oZGV2KTsKQEAgLTI5MzIsOCArMjkxNyw3IEBACiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwotCWludCBpLCBjb3VudCA9IGRldi0+bWNfY291bnQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpsaXN0ID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdDsKIAl1MzIgbW9kZTsKIAl1OCBmaWx0ZXJbOF07CiAKQEAgLTI5NTMsNyArMjkzNyw3IEBACiAJCSAgICBza2dlLT5mbG93X3N0YXR1cyA9PSBGTE9XX1NUQVRfU1lNTUVUUklDKQogCQkJZ2VuZXNpc19hZGRfZmlsdGVyKGZpbHRlciwgcGF1c2VfbWNfYWRkcik7CiAKLQkJZm9yIChpID0gMDsgbGlzdCAmJiBpIDwgY291bnQ7IGkrKywgbGlzdCA9IGxpc3QtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIGRldikKIAkJCWdlbmVzaXNfYWRkX2ZpbHRlcihmaWx0ZXIsIGxpc3QtPmRtaV9hZGRyKTsKIAl9CiAKQEAgLTI5NzIsNyArMjk1Niw3IEBACiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3Q7CiAJaW50IHJ4X3BhdXNlID0gKHNrZ2UtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBVF9SRU1fU0VORCB8fAogCQkJc2tnZS0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVEFUX1NZTU1FVFJJQyk7CiAJdTE2IHJlZzsKQEAgLTI5ODcsMTYgKzI5NzEsMTUgQEAKIAkJcmVnICY9IH4oR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BKTsKIAllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQkvKiBhbGwgbXVsdGljYXN0ICovCiAJCW1lbXNldChmaWx0ZXIsIDB4ZmYsIHNpemVvZihmaWx0ZXIpKTsKLQllbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDAgJiYgIXJ4X3BhdXNlKS8qIG5vIG11bHRpY2FzdCAqLworCWVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpICYmICFyeF9wYXVzZSkvKiBubyBtdWx0aWNhc3QgKi8KIAkJcmVnICY9IH5HTV9SWENSX01DRl9FTkE7CiAJZWxzZSB7Ci0JCWludCBpOwogCQlyZWcgfD0gR01fUlhDUl9NQ0ZfRU5BOwogCiAJCWlmIChyeF9wYXVzZSkKIAkJCXl1a29uX2FkZF9maWx0ZXIoZmlsdGVyLCBwYXVzZV9tY19hZGRyKTsKIAotCQlmb3IgKGkgPSAwOyBsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGxpc3QgPSBsaXN0LT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihsaXN0LCBkZXYpCiAJCQl5dWtvbl9hZGRfZmlsdGVyKGZpbHRlciwgbGlzdC0+ZG1pX2FkZHIpOwogCX0KIApAQCAtMzA1NCwxMCArMzAzNyw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MTYgbGVuID0gY29udHJvbCAmIEJNVV9CQkM7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3J4X3N0YXR1cyhza2dlKSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IHNsb3QgJXRkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZSAtIHNrZ2UtPnJ4X3Jpbmcuc3RhcnQsCi0JCSAgICAgICBzdGF0dXMsIGxlbik7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJyeCBzbG90ICV0ZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCisJCSAgICAgZSAtIHNrZ2UtPnJ4X3Jpbmcuc3RhcnQsIHN0YXR1cywgbGVuKTsKIAogCWlmIChsZW4gPiBza2dlLT5yeF9idWZfc2l6ZSkKIAkJZ290byBlcnJvcjsKQEAgLTMwOTYsNyArMzA3OCw3IEBACiAJCQkJIHBjaV91bm1hcF9sZW4oZSwgbWFwbGVuKSwKIAkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc2tiID0gZS0+c2tiOwotICAJCXByZWZldGNoKHNrYi0+ZGF0YSk7CisJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCXNrZ2Vfcnhfc2V0dXAoc2tnZSwgZSwgbnNrYiwgc2tnZS0+cnhfYnVmX3NpemUpOwogCX0KIApAQCAtMzExMSwxMCArMzA5Myw5IEBACiAJcmV0dXJuIHNrYjsKIGVycm9yOgogCi0JaWYgKG5ldGlmX21zZ19yeF9lcnIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IGVyciwgc2xvdCAldGQgY29udHJvbCAweCV4IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwKLQkJICAgICAgIGNvbnRyb2wsIHN0YXR1cyk7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIHJ4X2VyciwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJyeCBlcnIsIHNsb3QgJXRkIGNvbnRyb2wgMHgleCBzdGF0dXMgMHgleFxuIiwKKwkJICAgICBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwgY29udHJvbCwgc3RhdHVzKTsKIAogCWlmIChza2dlLT5ody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJaWYgKHN0YXR1cyAmIChYTVJfRlNfUlVOVHxYTVJfRlNfTE5HX0VSUikpCkBAIC0zNTc0LDggKzM1NTUsNyBAQAogCQkJaHctPnJhbV9vZmZzZXQgPSAweDgwMDAwOwogCQl9IGVsc2UKIAkJCWh3LT5yYW1fc2l6ZSA9IHQ4ICogNTEyOwotCX0KLQllbHNlIGlmICh0OCA9PSAwKQorCX0gZWxzZSBpZiAodDggPT0gMCkKIAkJaHctPnJhbV9zaXplID0gMHgyMDAwMDsKIAllbHNlCiAJCWh3LT5yYW1fc2l6ZSA9IHQ4ICogNDA5NjsKQEAgLTM3MjksNyArMzcwOSw3IEBACiAJCWdvdG8gZG9uZTsKIAogCXNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN3aXRjaChldmVudCkgeworCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9DSEFOR0VOQU1FOgogCQlpZiAoc2tnZS0+ZGVidWdmcykgewogCQkJZCA9IGRlYnVnZnNfcmVuYW1lKHNrZ2VfZGVidWcsIHNrZ2UtPmRlYnVnZnMsCkBAIC0zNzM3LDcgKzM3MTcsNyBAQAogCQkJaWYgKGQpCiAJCQkJc2tnZS0+ZGVidWdmcyA9IGQ7CiAJCQllbHNlIHsKLQkJCQlwcl9pbmZvKFBGWCAiJXM6IHJlbmFtZSBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAicmVuYW1lIGZhaWxlZFxuIik7CiAJCQkJZGVidWdmc19yZW1vdmUoc2tnZS0+ZGVidWdmcyk7CiAJCQl9CiAJCX0KQEAgLTM3NTUsOCArMzczNSw3IEBACiAJCQkJCXNrZ2VfZGVidWcsIGRldiwKIAkJCQkJJnNrZ2VfZGVidWdfZm9wcyk7CiAJCWlmICghZCB8fCBJU19FUlIoZCkpCi0JCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGZhaWxlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiZGVidWdmcyBjcmVhdGUgZmFpbGVkXG4iKTsKIAkJZWxzZQogCQkJc2tnZS0+ZGVidWdmcyA9IGQ7CiAJCWJyZWFrOwpAQCAtMzc3Nyw3ICszNzU2LDcgQEAKIAogCWVudCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2tnZSIsIE5VTEwpOwogCWlmICghZW50IHx8IElTX0VSUihlbnQpKSB7Ci0JCXByX2luZm8oUEZYICJkZWJ1Z2ZzIGNyZWF0ZSBkaXJlY3RvcnkgZmFpbGVkXG4iKTsKKwkJcHJfaW5mbygiZGVidWdmcyBjcmVhdGUgZGlyZWN0b3J5IGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM4ODUsOSArMzg2NCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfbXNnX3Byb2JlKHNrZ2UpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGFkZHIgJXBNXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwluZXRpZl9pbmZvKHNrZ2UsIHByb2JlLCBza2dlLT5uZXRkZXYsICJhZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNrZ2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0zOTM3LDcgKzM5MTQsNyBAQAogCiAJZXJyID0gLUVOT01FTTsKIAkvKiBzcGFjZSBmb3Igc2tnZUBwY2k6MDAwMDowNDowMC4wICovCi0JaHcgPSBremFsbG9jKHNpemVvZigqaHcpICsgc3RybGVuKERSVl9OQU1FICJAcGNpOiIgKQorCWh3ID0ga3phbGxvYyhzaXplb2YoKmh3KSArIHN0cmxlbihEUlZfTkFNRSAiQHBjaToiKQogCQkgICAgICsgc3RybGVuKHBjaV9uYW1lKHBkZXYpKSArIDEsIEdGUF9LRVJORUwpOwogCWlmICghaHcpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0cnVjdFxuIik7CkBAIC0zOTYwLDkgKzM5MzcsMTAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYIERSVl9WRVJTSU9OICIgYWRkciAweCVsbHggaXJxICVkIGNoaXAgJXMgcmV2ICVkXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGRldi0+aXJxLAotCSAgICAgICBza2dlX2JvYXJkX25hbWUoaHcpLCBody0+Y2hpcF9yZXYpOworCXByX2luZm8oIiVzIGFkZHIgMHglbGx4IGlycSAlZCBjaGlwICVzIHJldiAlZFxuIiwKKwkJRFJWX1ZFUlNJT04sCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCisJCXNrZ2VfYm9hcmRfbmFtZShodyksIGh3LT5jaGlwX3Jldik7CiAKIAlkZXYgPSBza2dlX2RldmluaXQoaHcsIDAsIHVzaW5nX2RhYyk7CiAJaWYgKCFkZXYpCkBAIC00MDMyLDcgKzQwMTAsOCBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWlmICgoZGV2MSA9IGh3LT5kZXZbMV0pKQorCWRldjEgPSBody0+ZGV2WzFdOworCWlmIChkZXYxKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYxKTsKIAlkZXYwID0gaHctPmRldlswXTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYwKTsKQEAgLTQxMTksOCArNDA5OCw3IEBACiAJCQllcnIgPSBza2dlX3VwKGRldik7CiAKIAkJCWlmIChlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY291bGQgbm90IHVwOiAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJCW5ldGRldl9lcnIoZGV2LCAiY291bGQgbm90IHVwOiAlZFxuIiwgZXJyKTsKIAkJCQlkZXZfY2xvc2UoZGV2KTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA2NzI0OWMzLi42NTNiZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0yMiw2ICsyMiw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTAsOCArNTIsNyBAQAogI2luY2x1ZGUgInNreTIuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNreTIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4yNiIKLSNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4yNyIKIAogLyoKICAqIFRoZSBZdWtvbiBJSSBjaGlwc2V0IHRha2VzIDY0IGJpdCBjb21tYW5kIGJsb2NrcyAoY2FsbGVkIGxpc3QgZWxlbWVudHMpCkBAIC0yNTEsNiArMjUyLDggQEAKIAogCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfQ0ZHX1JFR18xLCAwKTsKIAorCQlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0hXX1dPTF9PTik7CisKIAkJLyogRW5hYmxlIHdvcmthcm91bmQgZm9yIGRldiA0LjEwNyBvbiBZdWtvbi1VbHRyYSAmIEV4dHJlbWUgKi8KIAkJcmVnID0gc2t5Ml9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKIAkJcmVnIHw9IEdMQl9HUElPX1NUQVRfUkFDRV9ESVM7CkBAIC03MzEsNyArNzM0LDYgQEAKIAl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKIAllbnVtIGZsb3dfY29udHJvbCBzYXZlX21vZGU7CiAJdTE2IGN0cmw7Ci0JdTMyIHJlZzE7CiAKIAkvKiBCcmluZyBoYXJkd2FyZSBvdXQgb2YgcmVzZXQgKi8KIAlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIENTX1JTVF9DTFIpOwpAQCAtNzgyLDE0ICs3ODQsMTEgQEAKIAljdHJsIHw9IFdPTF9DVExfRElTX1BNRV9PTl9QQVRURVJOfFdPTF9DVExfRElTX1BBVFRFUk5fVU5JVDsKIAlza3kyX3dyaXRlMTYoaHcsIFdPTF9SRUdTKHBvcnQsIFdPTF9DVFJMX1NUQVQpLCBjdHJsKTsKIAotCS8qIFR1cm4gb24gbGVnYWN5IFBDSS1FeHByZXNzIFBNRSBtb2RlICovCi0JcmVnMSA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcxKTsKLQlyZWcxIHw9IFBDSV9ZMl9QTUVfTEVHQUNZOwotCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMSwgcmVnMSk7CisJLyogRGlzYWJsZSBQaUcgZmlybXdhcmUgKi8KKwlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0hXX1dPTF9PRkYpOwogCiAJLyogYmxvY2sgcmVjZWl2ZXIgKi8KIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7Ci0KIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9zZXRfdHhfc3Rmd2Qoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQpAQCAtODAwLDI5ICs3OTksMTUgQEAKIAkgICAgICBody0+Y2hpcF9yZXYgIT0gQ0hJUF9SRVZfWVVfRVhfQTApIHx8CiAJICAgICBody0+Y2hpcF9pZCA+PSBDSElQX0lEX1lVS09OX0ZFX1ApIHsKIAkJLyogWXVrb24tRXh0cmVtZSBCMCBhbmQgZnVydGhlciBFeHRyZW1lIGRldmljZXMgKi8KLQkJLyogZW5hYmxlIFN0b3JlICYgRm9yd2FyZCBtb2RlIGZvciBUWCAqLworCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgVFhfU1RGV19FTkEpOworCX0gZWxzZSBpZiAoZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pIHsKKwkJLyogc2V0IFR4IEdNQUMgRklGTyBBbG1vc3QgRW1wdHkgVGhyZXNob2xkICovCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9BRV9USFIpLAorCQkJICAgICAoRUNVX0pVTUJPX1dNIDw8IDE2KSB8IEVDVV9BRV9USFIpOwogCi0JCWlmIChkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCi0JCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKLQkJCQkgICAgIFRYX0pVTUJPX0RJUyB8IFRYX1NURldfRU5BKTsKLQotCQllbHNlCi0JCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKLQkJCQkgICAgIFRYX0pVTUJPX0VOQXwgVFhfU1RGV19FTkEpOwotCX0gZWxzZSB7Ci0JCWlmIChkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCi0JCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgVFhfU1RGV19FTkEpOwotCQllbHNlIHsKLQkJCS8qIHNldCBUeCBHTUFDIEZJRk8gQWxtb3N0IEVtcHR5IFRocmVzaG9sZCAqLwotCQkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0FFX1RIUiksCi0JCQkJICAgICAoRUNVX0pVTUJPX1dNIDw8IDE2KSB8IEVDVV9BRV9USFIpOwotCi0JCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgVFhfU1RGV19ESVMpOwotCi0JCQkvKiBDYW4ndCBkbyBvZmZsb2FkIGJlY2F1c2Ugb2YgbGFjayBvZiBzdG9yZS9mb3J3YXJkICovCi0JCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9BTExfQ1NVTSk7Ci0JCX0KLQl9CisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0RJUyk7CisJfSBlbHNlCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0VOQSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfbWFjX2luaXQoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQpAQCAtMTA2NSw2ICsxMDUwLDQwIEBACiAJcmV0dXJuIGxlOwogfQogCitzdGF0aWMgdW5zaWduZWQgc2t5Ml9nZXRfcnhfdGhyZXNob2xkKHN0cnVjdCBza3kyX3BvcnQqIHNreTIpCit7CisJdW5zaWduZWQgc2l6ZTsKKworCS8qIFNwYWNlIG5lZWRlZCBmb3IgZnJhbWUgZGF0YSArIGhlYWRlcnMgcm91bmRlZCB1cCAqLworCXNpemUgPSByb3VuZHVwKHNreTItPm5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4sIDgpOworCisJLyogU3RvcHBpbmcgcG9pbnQgZm9yIGhhcmR3YXJlIHRydW5jYXRpb24gKi8KKwlyZXR1cm4gKHNpemUgLSA4KSAvIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2t5Ml9nZXRfcnhfZGF0YV9zaXplKHN0cnVjdCBza3kyX3BvcnQqIHNreTIpCit7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmU7CisJdW5zaWduZWQgc2l6ZTsKKworCS8qIFNwYWNlIG5lZWRlZCBmb3IgZnJhbWUgZGF0YSArIGhlYWRlcnMgcm91bmRlZCB1cCAqLworCXNpemUgPSByb3VuZHVwKHNreTItPm5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4sIDgpOworCisJc2t5Mi0+cnhfbmZyYWdzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCUJVR19PTihza3kyLT5yeF9uZnJhZ3MgPiBBUlJBWV9TSVpFKHJlLT5mcmFnX2FkZHIpKTsKKworCS8qIENvbXB1dGUgcmVzaWR1ZSBhZnRlciBwYWdlcyAqLworCXNpemUgLT0gc2t5Mi0+cnhfbmZyYWdzIDw8IFBBR0VfU0hJRlQ7CisKKwkvKiBPcHRpbWl6ZSB0byBoYW5kbGUgc21hbGwgcGFja2V0cyBhbmQgaGVhZGVycyAqLworCWlmIChzaXplIDwgY29weWJyZWFrKQorCQlzaXplID0gY29weWJyZWFrOworCWlmIChzaXplIDwgRVRIX0hMRU4pCisJCXNpemUgPSBFVEhfSExFTjsKKworCXJldHVybiBzaXplOworfQorCiAvKiBCdWlsZCBkZXNjcmlwdGlvbiB0byBoYXJkd2FyZSBmb3Igb25lIHJlY2VpdmUgc2VnbWVudCAqLwogc3RhdGljIHZvaWQgc2t5Ml9yeF9hZGQoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgIHU4IG9wLAogCQkJZG1hX2FkZHJfdCBtYXAsIHVuc2lnbmVkIGxlbikKQEAgLTExMDMsMTggKzExMjIsMzkgQEAKIAlpbnQgaTsKIAogCXJlLT5kYXRhX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCByZS0+ZGF0YV9hZGRyKSkpCi0JCXJldHVybiAtRUlPOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgcmUtPmRhdGFfYWRkcikpCisJCWdvdG8gbWFwcGluZ19lcnJvcjsKIAogCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBkYXRhX3NpemUsIHNpemUpOwogCi0JZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKLQkJcmUtPmZyYWdfYWRkcltpXSA9IHBjaV9tYXBfcGFnZShwZGV2LAotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlLAotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCwKLQkJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSwKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKworCQlyZS0+ZnJhZ19hZGRyW2ldID0gcGNpX21hcF9wYWdlKHBkZXYsIGZyYWctPnBhZ2UsCisJCQkJCQlmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkJCWZyYWctPnNpemUsCiAJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgcmUtPmZyYWdfYWRkcltpXSkpCisJCQlnb3RvIG1hcF9wYWdlX2Vycm9yOworCX0KIAlyZXR1cm4gMDsKKworbWFwX3BhZ2VfZXJyb3I6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHJlLT5mcmFnX2FkZHJbaV0sCisJCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAorCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJfQorCisJcGNpX3VubWFwX3NpbmdsZShwZGV2LCByZS0+ZGF0YV9hZGRyLCBwY2lfdW5tYXBfbGVuKHJlLCBkYXRhX3NpemUpLAorCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKK21hcHBpbmdfZXJyb3I6CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiByeCBtYXBwaW5nIGVycm9yXG4iLAorCQkJIHNrYi0+ZGV2LT5uYW1lKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9yeF91bm1hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlKQpAQCAtMTE3Myw4ICsxMjEzLDcgQEAKIAkJICAgID09IHNreTJfcmVhZDgoaHcsIFJCX0FERFIocnhxLCBRX1JMKSkpCiAJCQlnb3RvIHN0b3BwZWQ7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHJlY2VpdmVyIHN0b3AgZmFpbGVkXG4iLAotCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUpOworCW5ldGRldl93YXJuKHNreTItPm5ldGRldiwgInJlY2VpdmVyIHN0b3AgZmFpbGVkXG4iKTsKIHN0b3BwZWQ6CiAJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIocnhxLCBRX0NTUiksIEJNVV9SU1RfU0VUIHwgQk1VX0ZJRk9fUlNUKTsKIApAQCAtMTMyNCw4ICsxMzYzLDMyIEBACiAJc2t5Ml9wdXRfaWR4KHNreTItPmh3LCByeHEsIHNreTItPnJ4X3B1dCk7CiB9CiAKK3N0YXRpYyBpbnQgc2t5Ml9hbGxvY19yeF9za2JzKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgaTsKKworCXNreTItPnJ4X2RhdGFfc2l6ZSA9IHNreTJfZ2V0X3J4X2RhdGFfc2l6ZShza3kyKTsKKworCS8qIEZpbGwgUnggcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBza3kyLT5yeF9wZW5kaW5nOyBpKyspIHsKKwkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmUgPSBza3kyLT5yeF9yaW5nICsgaTsKKworCQlyZS0+c2tiID0gc2t5Ml9yeF9hbGxvYyhza3kyKTsKKwkJaWYgKCFyZS0+c2tiKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaWYgKHNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSkpIHsKKwkJCWRldl9rZnJlZV9za2IocmUtPnNrYik7CisJCQlyZS0+c2tiID0gTlVMTDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKgotICogQWxsb2NhdGUgYW5kIHNldHVwIHJlY2VpdmVyIGJ1ZmZlciBwb29sLgorICogU2V0dXAgcmVjZWl2ZXIgYnVmZmVyIHBvb2wuCiAgKiBOb3JtYWwgY2FzZSB0aGlzIGVuZHMgdXAgY3JlYXRpbmcgb25lIGxpc3QgZWxlbWVudCBmb3Igc2tiCiAgKiBpbiB0aGUgcmVjZWl2ZSByaW5nLiBXb3JzdCBjYXNlIGlmIHVzaW5nIGxhcmdlIE1UVSBhbmQgZWFjaAogICogYWxsb2NhdGlvbiBmYWxscyBvbiBhIGRpZmZlcmVudCA2NCBiaXQgcmVnaW9uLCB0aGF0IHJlc3VsdHMKQEAgLTEzMzMsMTIgKzEzOTYsMTIgQEAKICAqIE9uZSBlbGVtZW50IGlzIHVzZWQgZm9yIGNoZWNrc3VtIGVuYWJsZS9kaXNhYmxlLCBhbmQgb25lCiAgKiBleHRyYSB0byBhdm9pZCB3cmFwLgogICovCi1zdGF0aWMgaW50IHNreTJfcnhfc3RhcnQoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3N0YXRpYyB2b2lkIHNreTJfcnhfc3RhcnQoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAlzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZTsKIAl1bnNpZ25lZCByeHEgPSByeHFhZGRyW3NreTItPnBvcnRdOwotCXVuc2lnbmVkIGksIHNpemUsIHRocmVzaDsKKwl1bnNpZ25lZCBpLCB0aHJlc2g7CiAKIAlza3kyLT5yeF9wdXQgPSBza3kyLT5yeF9uZXh0ID0gMDsKIAlza3kyX3FzZXQoaHcsIHJ4cSk7CkBAIC0xMzU5LDQwICsxNDIyLDkgQEAKIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSkpCiAJCXJ4X3NldF9jaGVja3N1bShza3kyKTsKIAotCS8qIFNwYWNlIG5lZWRlZCBmb3IgZnJhbWUgZGF0YSArIGhlYWRlcnMgcm91bmRlZCB1cCAqLwotCXNpemUgPSByb3VuZHVwKHNreTItPm5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4sIDgpOwotCi0JLyogU3RvcHBpbmcgcG9pbnQgZm9yIGhhcmR3YXJlIHRydW5jYXRpb24gKi8KLQl0aHJlc2ggPSAoc2l6ZSAtIDgpIC8gc2l6ZW9mKHUzMik7Ci0KLQlza3kyLT5yeF9uZnJhZ3MgPSBzaXplID4+IFBBR0VfU0hJRlQ7Ci0JQlVHX09OKHNreTItPnJ4X25mcmFncyA+IEFSUkFZX1NJWkUocmUtPmZyYWdfYWRkcikpOwotCi0JLyogQ29tcHV0ZSByZXNpZHVlIGFmdGVyIHBhZ2VzICovCi0Jc2l6ZSAtPSBza3kyLT5yeF9uZnJhZ3MgPDwgUEFHRV9TSElGVDsKLQotCS8qIE9wdGltaXplIHRvIGhhbmRsZSBzbWFsbCBwYWNrZXRzIGFuZCBoZWFkZXJzICovCi0JaWYgKHNpemUgPCBjb3B5YnJlYWspCi0JCXNpemUgPSBjb3B5YnJlYWs7Ci0JaWYgKHNpemUgPCBFVEhfSExFTikKLQkJc2l6ZSA9IEVUSF9ITEVOOwotCi0Jc2t5Mi0+cnhfZGF0YV9zaXplID0gc2l6ZTsKLQotCS8qIEZpbGwgUnggcmluZyAqLworCS8qIHN1Ym1pdCBSeCByaW5nICovCiAJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgewogCQlyZSA9IHNreTItPnJ4X3JpbmcgKyBpOwotCi0JCXJlLT5za2IgPSBza3kyX3J4X2FsbG9jKHNreTIpOwotCQlpZiAoIXJlLT5za2IpCi0JCQlnb3RvIG5vbWVtOwotCi0JCWlmIChza3kyX3J4X21hcF9za2IoaHctPnBkZXYsIHJlLCBza3kyLT5yeF9kYXRhX3NpemUpKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHJlLT5za2IpOwotCQkJcmUtPnNrYiA9IE5VTEw7Ci0JCQlnb3RvIG5vbWVtOwotCQl9Ci0KIAkJc2t5Ml9yeF9zdWJtaXQoc2t5MiwgcmUpOwogCX0KIApAQCAtMTQwMiw2ICsxNDM0LDcgQEAKIAkgKiB0aGUgcmVnaXN0ZXIgaXMgbGltaXRlZCB0byA5IGJpdHMsIHNvIGlmIHlvdSBkbyBmcmFtZXMgPiAyMDUyCiAJICogeW91IGJldHRlciBnZXQgdGhlIE1UVSByaWdodCEKIAkgKi8KKwl0aHJlc2ggPSBza3kyX2dldF9yeF90aHJlc2hvbGQoc2t5Mik7CiAJaWYgKHRocmVzaCA+IDB4MWZmKQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVFJVTkNfT0ZGKTsKIAllbHNlIHsKQEAgLTE0MzMsMTMgKzE0NjYsNiBAQAogCQlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3NreTItPnBvcnRdLCBRX1RFU1QpLAogCQkJICAgICBUQk1VX1RFU1RfSE9NRV9BRERfRklYX0VOIHwgVEJNVV9URVNUX1JPVVRJTkdfQUREX0ZJWF9FTik7CiAJfQotCi0KLQotCXJldHVybiAwOwotbm9tZW06Ci0Jc2t5Ml9yeF9jbGVhbihza3kyKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBza3kyX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKQEAgLTE0NzAsNyArMTQ5Niw3IEBACiAJaWYgKCFza3kyLT5yeF9yaW5nKQogCQlnb3RvIG5vbWVtOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNreTJfYWxsb2Nfcnhfc2ticyhza3kyKTsKIG5vbWVtOgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMTQ3OSw2ICsxNTA1LDggQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAorCXNreTJfcnhfY2xlYW4oc2t5Mik7CisKIAlpZiAoc2t5Mi0+cnhfbGUpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwgUlhfTEVfQllURVMsCiAJCQkJICAgIHNreTItPnJ4X2xlLCBza3kyLT5yeF9sZV9tYXApOwpAQCAtMTQ5NywxNiArMTUyNSwxNiBAQAogCXNreTItPnJ4X3JpbmcgPSBOVUxMOwogfQogCi0vKiBCcmluZyB1cCBuZXR3b3JrIGludGVyZmFjZS4gKi8KLXN0YXRpYyBpbnQgc2t5Ml91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2t5Ml9od191cChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwotCXUzMiBpbWFzaywgcmFtc2l6ZTsKLQlpbnQgY2FwLCBlcnI7CisJdTMyIHJhbXNpemU7CisJaW50IGNhcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBody0+ZGV2W3NreTItPnBvcnReMV07CiAKKwl0eF9pbml0KHNreTIpOworCiAJLyoKICAJICogT24gZHVhbCBwb3J0IFBDSS1YIGNhcmQsIHRoZXJlIGlzIGFuIHByb2JsZW0gd2hlcmUgc3RhdHVzCiAJICogY2FuIGJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBkdWUgdG8gc3BsaXQgdHJhbnNhY3Rpb25zCkBAIC0xNTE4LDE2ICsxNTQ2LDcgQEAKIAkJY21kID0gc2t5Ml9wY2lfcmVhZDE2KGh3LCBjYXAgKyBQQ0lfWF9DTUQpOwogIAkJY21kICY9IH5QQ0lfWF9DTURfTUFYX1NQTElUOwogIAkJc2t5Ml9wY2lfd3JpdGUxNihodywgY2FwICsgUENJX1hfQ01ELCBjbWQpOwotCi0gCX0KLQotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KLQllcnIgPSBza3kyX2FsbG9jX2J1ZmZlcnMoc2t5Mik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JdHhfaW5pdChza3kyKTsKKwl9CiAKIAlza3kyX21hY19pbml0KGh3LCBwb3J0KTsKIApAQCAtMTUzNiw3ICsxNTU1LDcgQEAKIAlpZiAocmFtc2l6ZSA+IDApIHsKIAkJdTMyIHJ4c3BhY2U7CiAKLQkJcHJfZGVidWcoUEZYICIlczogcmFtIGJ1ZmZlciAlZEtcbiIsIGRldi0+bmFtZSwgcmFtc2l6ZSk7CisJCW5ldGRldl9kYmcoc2t5Mi0+bmV0ZGV2LCAicmFtIGJ1ZmZlciAlZEtcbiIsIHJhbXNpemUpOwogCQlpZiAocmFtc2l6ZSA8IDE2KQogCQkJcnhzcGFjZSA9IHJhbXNpemUgLyAyOwogCQllbHNlCkBAIC0xNTY4LDE4ICsxNTg3LDMzIEBACiAJc2t5Ml9zZXRfdmxhbl9tb2RlKGh3LCBwb3J0LCBza3kyLT52bGdycCAhPSBOVUxMKTsKICNlbmRpZgogCi0JZXJyID0gc2t5Ml9yeF9zdGFydChza3kyKTsKKwlza3kyX3J4X3N0YXJ0KHNreTIpOworfQorCisvKiBCcmluZyB1cCBuZXR3b3JrIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgc2t5Ml91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OworCXUzMiBpbWFzazsKKwlpbnQgZXJyOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCWVyciA9IHNreTJfYWxsb2NfYnVmZmVycyhza3kyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKKwlza3kyX2h3X3VwKHNreTIpOworCiAJLyogRW5hYmxlIGludGVycnVwdHMgZnJvbSBwaHkvbWFjIGZvciBwb3J0ICovCiAJaW1hc2sgPSBza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CiAJaW1hc2sgfD0gcG9ydGlycV9tc2tbcG9ydF07CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAJc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGVuYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHNreTIsIGlmdXAsIGRldiwgImVuYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTY2Miw5ICsxNjk2LDggQEAKIAkJZ290byBtYXBwaW5nX2Vycm9yOwogCiAJc2xvdCA9IHNreTItPnR4X3Byb2Q7Ci0JaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzbG90LCBza2ItPmxlbik7CisJbmV0aWZfcHJpbnRrKHNreTIsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgZGV2LAorCQkgICAgICJ0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwgc2xvdCwgc2tiLT5sZW4pOwogCiAJLyogU2VuZCBoaWdoIGJpdHMgaWYgbmVlZGVkICovCiAJdXBwZXIgPSB1cHBlcl8zMl9iaXRzKG1hcHBpbmcpOwpAQCAtMTgyOSw5ICsxODYyLDggQEAKIAkJc2t5Ml90eF91bm1hcChza3kyLT5ody0+cGRldiwgcmUpOwogCiAJCWlmIChza2IpIHsKLQkJCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfZG9uZShza3kyKSkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBkb25lICV1XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7CisJCQluZXRpZl9wcmludGsoc2t5MiwgdHhfZG9uZSwgS0VSTl9ERUJVRywgZGV2LAorCQkJCSAgICAgInR4IGRvbmUgJXVcbiIsIGlkeCk7CiAKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTE4NDUsMTAgKzE4NzcsNiBAQAogCiAJc2t5Mi0+dHhfY29ucyA9IGlkeDsKIAlzbXBfbWIoKTsKLQotCS8qIFdha2UgdW5sZXNzIGl0J3MgZGV0YWNoZWQsIGFuZCBjYWxsZWQgZS5nLiBmcm9tIHNreTJfZG93bigpICovCi0JaWYgKHR4X2F2YWlsKHNreTIpID4gTUFYX1NLQl9UWF9MRSArIDQgJiYgbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBza3kyX3R4X3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKQEAgLTE4NzMsMjEgKzE5MDEsMTEgQEAKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7CiB9CiAKLS8qIE5ldHdvcmsgc2h1dGRvd24gKi8KLXN0YXRpYyBpbnQgc2t5Ml9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBza3kyX2h3X2Rvd24oc3RydWN0IHNreTJfcG9ydCAqc2t5MikKIHsKLQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKIAl1MTYgY3RybDsKLQl1MzIgaW1hc2s7Ci0KLQkvKiBOZXZlciByZWFsbHkgZ290IHN0YXJ0ZWQhICovCi0JaWYgKCFza3kyLT50eF9sZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobmV0aWZfbXNnX2lmZG93bihza3kyKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBkaXNhYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOwogCiAJLyogRm9yY2UgZmxvdyBjb250cm9sIG9mZiAqLwogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CkBAIC0xOTIwLDE1ICsxOTM4LDYgQEAKIAogCXNreTJfcnhfc3RvcChza3kyKTsKIAotCS8qIERpc2FibGUgcG9ydCBJUlEgKi8KLQlpbWFzayA9IHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKLQlpbWFzayAmPSB+cG9ydGlycV9tc2tbcG9ydF07Ci0Jc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7Ci0Jc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwotCi0Jc3luY2hyb25pemVfaXJxKGh3LT5wZGV2LT5pcnEpOwotCW5hcGlfc3luY2hyb25pemUoJmh3LT5uYXBpKTsKLQogCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTJfcGh5X3Bvd2VyX2Rvd24oaHcsIHBvcnQpOwogCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CkBAIC0xOTM3LDggKzE5NDYsMjkgQEAKIAogCS8qIEZyZWUgYW55IHBlbmRpbmcgZnJhbWVzIHN0dWNrIGluIEhXIHF1ZXVlICovCiAJc2t5Ml90eF9jb21wbGV0ZShza3kyLCBza3kyLT50eF9wcm9kKTsKK30KIAotCXNreTJfcnhfY2xlYW4oc2t5Mik7CisvKiBOZXR3b3JrIHNodXRkb3duICovCitzdGF0aWMgaW50IHNreTJfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCisJLyogTmV2ZXIgcmVhbGx5IGdvdCBzdGFydGVkISAqLworCWlmICghc2t5Mi0+dHhfbGUpCisJCXJldHVybiAwOworCisJbmV0aWZfaW5mbyhza3kyLCBpZmRvd24sIGRldiwgImRpc2FibGluZyBpbnRlcmZhY2VcbiIpOworCisJLyogRGlzYWJsZSBwb3J0IElSUSAqLworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywKKwkJICAgICBza3kyX3JlYWQzMihodywgQjBfSU1TSykgJiB+cG9ydGlycV9tc2tbc2t5Mi0+cG9ydF0pOworCXNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKKworCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKKwluYXBpX3N5bmNocm9uaXplKCZody0+bmFwaSk7CisKKwlza3kyX2h3X2Rvd24oc2t5Mik7CiAKIAlza3kyX2ZyZWVfYnVmZmVycyhza3kyKTsKIApAQCAtMTk5NCwxMiArMjAyNCwxMSBAQAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLAogCQkgICAgTElOS0xFRF9PTiB8IExJTktMRURfQkxJTktfT0ZGIHwgTElOS0xFRF9MSU5LU1lOQ19PRkYpOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIiVzOiBMaW5rIGlzIHVwIGF0ICVkIE1icHMsICVzIGR1cGxleCwgZmxvdyBjb250cm9sICVzXG4iLAotCQkgICAgICAgc2t5Mi0+bmV0ZGV2LT5uYW1lLCBza3kyLT5zcGVlZCwKLQkJICAgICAgIHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCA/ICJmdWxsIiA6ICJoYWxmIiwKLQkJICAgICAgIGZjX25hbWVbc2t5Mi0+Zmxvd19zdGF0dXNdKTsKKwluZXRpZl9pbmZvKHNreTIsIGxpbmssIHNreTItPm5ldGRldiwKKwkJICAgIkxpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LCBmbG93IGNvbnRyb2wgJXNcbiIsCisJCSAgIHNreTItPnNwZWVkLAorCQkgICBza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIsCisJCSAgIGZjX25hbWVbc2t5Mi0+Zmxvd19zdGF0dXNdKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9saW5rX2Rvd24oc3RydWN0IHNreTJfcG9ydCAqc2t5MikKQEAgLTIwMTksOCArMjA0OCw3IEBACiAJLyogVHVybiBvZmYgbGluayBMRUQgKi8KIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIExOS19MRURfUkVHKSwgTElOS0xFRF9PRkYpOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsIHNreTItPm5ldGRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyhza3kyLCBsaW5rLCBza3kyLT5uZXRkZXYsICJMaW5rIGlzIGRvd25cbiIpOwogCiAJc2t5Ml9waHlfaW5pdChodywgcG9ydCk7CiB9CkBAIC0yMDQyLDEzICsyMDcwLDEyIEBACiAJYWR2ZXJ0ID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0FVTkVfQURWKTsKIAlscGEgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfQVVORV9MUCk7CiAJaWYgKGxwYSAmIFBIWV9NX0FOX1JGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZW1vdGUgZmF1bHQiLCBza3kyLT5uZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHNreTItPm5ldGRldiwgInJlbW90ZSBmYXVsdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIShhdXggJiBQSFlfTV9QU19TUERVUF9SRVMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBzcGVlZC9kdXBsZXggbWlzbWF0Y2giLAotCQkgICAgICAgc2t5Mi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycihza3kyLT5uZXRkZXYsICJzcGVlZC9kdXBsZXggbWlzbWF0Y2hcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yMTEwLDkgKzIxMzcsOCBAQAogCWlzdGF0dXMgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfSU5UX1NUQVQpOwogCXBoeXN0YXQgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX1NUQVQpOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKLQkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSwgaXN0YXR1cywgcGh5c3RhdCk7CisJbmV0aWZfaW5mbyhza3kyLCBpbnRyLCBza3kyLT5uZXRkZXYsICJwaHkgaW50ZXJydXB0IHN0YXR1cyAweCV4IDB4JXhcbiIsCisJCSAgIGlzdGF0dXMsIHBoeXN0YXQpOwogCiAJaWYgKGlzdGF0dXMgJiBQSFlfTV9JU19BTl9DT01QTCkgewogCQlpZiAoc2t5Ml9hdXRvbmVnX2RvbmUoc2t5MiwgcGh5c3RhdCkgPT0gMCkKQEAgLTIxNjYsMTMgKzIxOTIsMTIgQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAotCWlmIChuZXRpZl9tc2dfdGltZXIoc2t5MikpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB0eCB0aW1lb3V0XG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX2Vycihza3kyLCB0aW1lciwgZGV2LCAidHggdGltZW91dFxuIik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0cmFuc21pdCByaW5nICV1IC4uICV1IHJlcG9ydD0ldSBkb25lPSV1XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHNreTItPnR4X2NvbnMsIHNreTItPnR4X3Byb2QsCi0JICAgICAgIHNreTJfcmVhZDE2KGh3LCBza3kyLT5wb3J0ID09IDAgPyBTVEFUX1RYQTFfUklEWCA6IFNUQVRfVFhBMl9SSURYKSwKLQkgICAgICAgc2t5Ml9yZWFkMTYoaHcsIFFfQUREUih0eHFhZGRyW3NreTItPnBvcnRdLCBRX0RPTkUpKSk7CisJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJ0cmFuc21pdCByaW5nICV1IC4uICV1IHJlcG9ydD0ldSBkb25lPSV1XG4iLAorCQkgICAgICBza3kyLT50eF9jb25zLCBza3kyLT50eF9wcm9kLAorCQkgICAgICBza3kyX3JlYWQxNihodywgc2t5Mi0+cG9ydCA9PSAwID8gU1RBVF9UWEExX1JJRFggOiBTVEFUX1RYQTJfUklEWCksCisJCSAgICAgIHNreTJfcmVhZDE2KGh3LCBRX0FERFIodHhxYWRkcltza3kyLT5wb3J0XSwgUV9ET05FKSkpOwogCiAJLyogY2FuJ3QgcmVzdGFydCBzYWZlbHkgdW5kZXIgc29mdGlycSAqLwogCXNjaGVkdWxlX3dvcmsoJmh3LT5yZXN0YXJ0X3dvcmspOwpAQCAtMjE4NywxNCArMjIxMiwyMCBAQAogCXUxNiBjdGwsIG1vZGU7CiAJdTMyIGltYXNrOwogCisJLyogTVRVIHNpemUgb3V0c2lkZSB0aGUgc3BlYyAqLwogCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogTVRVID4gMTUwMCBvbiB5dWtvbiBGRSBhbmQgRkUrIG5vdCBhbGxvd2VkICovCiAJaWYgKG5ld19tdHUgPiBFVEhfREFUQV9MRU4gJiYKIAkgICAgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkUgfHwKIAkgICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkVfUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVFNPLCBldGMgb24gWXVrb24gVWx0cmEgYW5kIE1UVSA+IDE1MDAgbm90IHN1cHBvcnRlZCAqLworCWlmIChuZXdfbXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKKwkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPfE5FVElGX0ZfU0d8TkVUSUZfRl9BTExfQ1NVTSk7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlkZXYtPm10dSA9IG5ld19tdHU7CiAJCXJldHVybiAwOwpAQCAtMjIyOSw3ICsyMjYwLDExIEBACiAKIAlza3kyX3dyaXRlOChodywgUkJfQUREUihyeHFhZGRyW3BvcnRdLCBSQl9DVFJMKSwgUkJfRU5BX09QX01EKTsKIAotCWVyciA9IHNreTJfcnhfc3RhcnQoc2t5Mik7CisJZXJyID0gc2t5Ml9hbGxvY19yeF9za2JzKHNreTIpOworCWlmICghZXJyKQorCQlza3kyX3J4X3N0YXJ0KHNreTIpOworCWVsc2UKKwkJc2t5Ml9yeF9jbGVhbihza3kyKTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKIAogCXNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKQEAgLTIzMDYsMzAgKzIzNDEsMzIgQEAKIAkJCQkgICBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotCXN0cnVjdCBza19idWZmICpza2IsICpuc2tiOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHJ4X3JpbmdfaW5mbyBucmU7CiAJdW5zaWduZWQgaGRyX3NwYWNlID0gc2t5Mi0+cnhfZGF0YV9zaXplOwogCi0JLyogRG9uJ3QgYmUgdHJpY2t5IGFib3V0IHJldXNpbmcgcGFnZXMgKHlldCkgKi8KLQluc2tiID0gc2t5Ml9yeF9hbGxvYyhza3kyKTsKLQlpZiAodW5saWtlbHkoIW5za2IpKQotCQlyZXR1cm4gTlVMTDsKKwlucmUuc2tiID0gc2t5Ml9yeF9hbGxvYyhza3kyKTsKKwlpZiAodW5saWtlbHkoIW5yZS5za2IpKQorCQlnb3RvIG5vYnVmOworCisJaWYgKHNreTJfcnhfbWFwX3NrYihza3kyLT5ody0+cGRldiwgJm5yZSwgaGRyX3NwYWNlKSkKKwkJZ290byBub21hcDsKIAogCXNrYiA9IHJlLT5za2I7CiAJc2t5Ml9yeF91bm1hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlKTsKLQogCXByZWZldGNoKHNrYi0+ZGF0YSk7Ci0JcmUtPnNrYiA9IG5za2I7Ci0JaWYgKHNreTJfcnhfbWFwX3NrYihza3kyLT5ody0+cGRldiwgcmUsIGhkcl9zcGFjZSkpIHsKLQkJZGV2X2tmcmVlX3NrYihuc2tiKTsKLQkJcmUtPnNrYiA9IHNrYjsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCSpyZSA9IG5yZTsKIAogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQogCQlza2JfcHV0X2ZyYWdzKHNrYiwgaGRyX3NwYWNlLCBsZW5ndGgpOwogCWVsc2UKIAkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAJcmV0dXJuIHNrYjsKKworbm9tYXA6CisJZGV2X2tmcmVlX3NrYihucmUuc2tiKTsKK25vYnVmOgorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMjM1MCw5ICsyMzg3LDkgQEAKIAkJY291bnQgLT0gVkxBTl9ITEVOOwogI2VuZGlmCiAKLQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3J4X3N0YXR1cyhza3kyKSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IHNsb3QgJXUgc3RhdHVzIDB4JXggbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBza3kyLT5yeF9uZXh0LCBzdGF0dXMsIGxlbmd0aCk7CisJbmV0aWZfcHJpbnRrKHNreTIsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgZGV2LAorCQkgICAgICJyeCBzbG90ICV1IHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKKwkJICAgICBza3kyLT5yeF9uZXh0LCBzdGF0dXMsIGxlbmd0aCk7CiAKIAlza3kyLT5yeF9uZXh0ID0gKHNreTItPnJ4X25leHQgKyAxKSAlIHNreTItPnJ4X3BlbmRpbmc7CiAJcHJlZmV0Y2goc2t5Mi0+cnhfcmluZyArIHNreTItPnJ4X25leHQpOwpAQCAtMjM4MSw2ICsyNDE4LDkgQEAKIAkJc2tiID0gcmVjZWl2ZV9jb3B5KHNreTIsIHJlLCBsZW5ndGgpOwogCWVsc2UKIAkJc2tiID0gcmVjZWl2ZV9uZXcoc2t5MiwgcmUsIGxlbmd0aCk7CisKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gKHNrYiA9PSBOVUxMKTsKKwogcmVzdWJtaXQ6CiAJc2t5Ml9yeF9zdWJtaXQoc2t5MiwgcmUpOwogCkBAIC0yMzkwLDkgKzI0MzAsMTAgQEAKIAkvKiBUcnVuY2F0aW9uIG9mIG92ZXJsZW5ndGggcGFja2V0cwogCSAgIGNhdXNlcyBQSFkgbGVuZ3RoIHRvIG5vdCBtYXRjaCBNQUMgbGVuZ3RoICovCiAJKytkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7Ci0JaWYgKG5ldGlmX21zZ19yeF9lcnIoc2t5MikgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcl9pbmZvKFBGWCAiJXM6IHJ4IGxlbmd0aCBlcnJvcjogc3RhdHVzICUjeCBsZW5ndGggJWRcbiIsCi0JCQlkZXYtPm5hbWUsIHN0YXR1cywgbGVuZ3RoKTsKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQluZXRpZl9pbmZvKHNreTIsIHJ4X2VyciwgZGV2LAorCQkJICAgInJ4IGxlbmd0aCBlcnJvcjogc3RhdHVzICUjeCBsZW5ndGggJWRcbiIsCisJCQkgICBzdGF0dXMsIGxlbmd0aCk7CiAJZ290byByZXN1Ym1pdDsKIAogZXJyb3I6CkBAIC0yNDAyLDkgKzI0NDMsOSBAQAogCQlnb3RvIHJlc3VibWl0OwogCX0KIAotCWlmIChuZXRpZl9tc2dfcnhfZXJyKHNreTIpICYmIG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiByeCBlcnJvciwgc3RhdHVzIDB4JXggbGVuZ3RoICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIGxlbmd0aCk7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJbmV0aWZfaW5mbyhza3kyLCByeF9lcnIsIGRldiwKKwkJCSAgICJyeCBlcnJvciwgc3RhdHVzIDB4JXggbGVuZ3RoICVkXG4iLCBzdGF0dXMsIGxlbmd0aCk7CiAKIAlpZiAoc3RhdHVzICYgKEdNUl9GU19MT05HX0VSUiB8IEdNUl9GU19VTl9TSVpFKSkKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CkBAIC0yNDIxLDggKzI0NjIsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlza3kyX3R4X2NvbXBsZXRlKHNreTIsIGxhc3QpOworCisJCS8qIFdha2UgdW5sZXNzIGl0J3MgZGV0YWNoZWQsIGFuZCBjYWxsZWQgZS5nLiBmcm9tIHNreTJfZG93bigpICovCisJCWlmICh0eF9hdmFpbChza3kyKSA+IE1BWF9TS0JfVFhfTEUgKyA0KQorCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNreTJfc2tiX3J4KGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIsCkBAIC0yNDU4LDYgKzI1MDQsMzIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNreTJfcnhfY2hlY2tzdW0oc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgdTMyIHN0YXR1cykKK3sKKwkvKiBJZiB0aGlzIGhhcHBlbnMgdGhlbiBkcml2ZXIgYXNzdW1pbmcgd3JvbmcgZm9ybWF0IGZvciBjaGlwIHR5cGUgKi8KKwlCVUdfT04oc2t5Mi0+aHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpOworCisJLyogQm90aCBjaGVja3N1bSBjb3VudGVycyBhcmUgcHJvZ3JhbW1lZCB0byBzdGFydCBhdAorCSAqIHRoZSBzYW1lIG9mZnNldCwgc28gdW5sZXNzIHRoZXJlIGlzIGEgcHJvYmxlbSB0aGV5CisJICogc2hvdWxkIG1hdGNoLiBUaGlzIGZhaWx1cmUgaXMgYW4gZWFybHkgaW5kaWNhdGlvbiB0aGF0CisJICogaGFyZHdhcmUgcmVjZWl2ZSBjaGVja3N1bW1pbmcgd29uJ3Qgd29yay4KKwkgKi8KKwlpZiAobGlrZWx5KCh1MTYpKHN0YXR1cyA+PiAxNikgPT0gKHUxNilzdGF0dXMpKSB7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBza3kyLT5yeF9yaW5nW3NreTItPnJ4X25leHRdLnNrYjsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKKwkJc2tiLT5jc3VtID0gbGUxNl90b19jcHUoc3RhdHVzKTsKKwl9IGVsc2UgeworCQlkZXZfbm90aWNlKCZza3kyLT5ody0+cGRldi0+ZGV2LAorCQkJICAgIiVzOiByZWNlaXZlIGNoZWNrc3VtIHByb2JsZW0gKHN0YXR1cyA9ICUjeClcbiIsCisJCQkgICBza3kyLT5uZXRkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwkJLyogRGlzYWJsZSBjaGVja3N1bSBvZmZsb2FkICovCisJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07CisJCXNreTJfd3JpdGUzMihza3kyLT5odywgUV9BRERSKHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfQ1NSKSwKKwkJCSAgICAgQk1VX0RJU19SWF9DSEtTVU0pOworCX0KK30KKwogLyogUHJvY2VzcyBzdGF0dXMgcmVzcG9uc2UgcmluZyAqLwogc3RhdGljIGludCBza3kyX3N0YXR1c19pbnRyKHN0cnVjdCBza3kyX2h3ICpodywgaW50IHRvX2RvLCB1MTYgaWR4KQogewpAQCAtMjQ5MiwxMSArMjU2NCwxMCBAQAogCQljYXNlIE9QX1JYU1RBVDoKIAkJCXRvdGFsX3BhY2tldHNbcG9ydF0rKzsKIAkJCXRvdGFsX2J5dGVzW3BvcnRdICs9IGxlbmd0aDsKKwogCQkJc2tiID0gc2t5Ml9yZWNlaXZlKGRldiwgbGVuZ3RoLCBzdGF0dXMpOwotCQkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlpZiAoIXNrYikKIAkJCQlicmVhazsKLQkJCX0KIAogCQkJLyogVGhpcyBjaGlwIHJlcG9ydHMgY2hlY2tzdW0gc3RhdHVzIGRpZmZlcmVudGx5ICovCiAJCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpIHsKQEAgLTI1MjcsMzcgKzI1OTgsOCBAQAogCQkJLyogZmFsbCB0aHJvdWdoICovCiAjZW5kaWYKIAkJY2FzZSBPUF9SWENIS1M6Ci0JCQlpZiAoIShza3kyLT5mbGFncyAmIFNLWTJfRkxBR19SWF9DSEVDS1NVTSkpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIElmIHRoaXMgaGFwcGVucyB0aGVuIGRyaXZlciBhc3N1bWluZyB3cm9uZyBmb3JtYXQgKi8KLQkJCWlmICh1bmxpa2VseShody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSkpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB1bmV4cGVjdGVkIgotCQkJCQkgICAgICAgIiBjaGVja3N1bSBzdGF0dXNcbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBCb3RoIGNoZWNrc3VtIGNvdW50ZXJzIGFyZSBwcm9ncmFtbWVkIHRvIHN0YXJ0IGF0Ci0JCQkgKiB0aGUgc2FtZSBvZmZzZXQsIHNvIHVubGVzcyB0aGVyZSBpcyBhIHByb2JsZW0gdGhleQotCQkJICogc2hvdWxkIG1hdGNoLiBUaGlzIGZhaWx1cmUgaXMgYW4gZWFybHkgaW5kaWNhdGlvbiB0aGF0Ci0JCQkgKiBoYXJkd2FyZSByZWNlaXZlIGNoZWNrc3VtbWluZyB3b24ndCB3b3JrLgotCQkJICovCi0JCQlpZiAobGlrZWx5KHN0YXR1cyA+PiAxNiA9PSAoc3RhdHVzICYgMHhmZmZmKSkpIHsKLQkJCQlza2IgPSBza3kyLT5yeF9yaW5nW3NreTItPnJ4X25leHRdLnNrYjsKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwotCQkJCXNrYi0+Y3N1bSA9IGxlMTZfdG9fY3B1KHN0YXR1cyk7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiBoYXJkd2FyZSByZWNlaXZlICIKLQkJCQkgICAgICAgImNoZWNrc3VtIHByb2JsZW0gKHN0YXR1cyA9ICUjeClcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJCQlza3kyLT5mbGFncyAmPSB+U0tZMl9GTEFHX1JYX0NIRUNLU1VNOwotCi0JCQkJc2t5Ml93cml0ZTMyKHNreTItPmh3LAotCQkJCQkgICAgIFFfQUREUihyeHFhZGRyW3BvcnRdLCBRX0NTUiksCi0JCQkJCSAgICAgQk1VX0RJU19SWF9DSEtTVU0pOwotCQkJfQorCQkJaWYgKGxpa2VseShza3kyLT5mbGFncyAmIFNLWTJfRkxBR19SWF9DSEVDS1NVTSkpCisJCQkJc2t5Ml9yeF9jaGVja3N1bShza3kyLCBzdGF0dXMpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBPUF9UWElOREVYTEU6CkBAIC0yNTcxLDggKzI2MTMsNyBAQAogCiAJCWRlZmF1bHQ6CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkJICAgICAgICJ1bmtub3duIHN0YXR1cyBvcGNvZGUgMHgleFxuIiwgb3Bjb2RlKTsKKwkJCQlwcl93YXJuaW5nKCJ1bmtub3duIHN0YXR1cyBvcGNvZGUgMHgleFxuIiwgb3Bjb2RlKTsKIAkJfQogCX0gd2hpbGUgKGh3LT5zdF9pZHggIT0gaWR4KTsKIApAQCAtMjU5MSw0MSArMjYzMiwzNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwogCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBodyBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJCW5ldGRldl9pbmZvKGRldiwgImh3IGVycm9yIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBZMl9JU19QQVJfUkQxKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmFtIGRhdGEgcmVhZCBwYXJpdHkgZXJyb3JcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAicmFtIGRhdGEgcmVhZCBwYXJpdHkgZXJyb3JcbiIpOwogCQkvKiBDbGVhciBJUlEgKi8KIAkJc2t5Ml93cml0ZTE2KGh3LCBSQU1fQlVGRkVSKHBvcnQsIEIzX1JJX0NUUkwpLCBSSV9DTFJfUkRfUEVSUik7CiAJfQogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX1BBUl9XUjEpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByYW0gZGF0YSB3cml0ZSBwYXJpdHkgZXJyb3JcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAicmFtIGRhdGEgd3JpdGUgcGFyaXR5IGVycm9yXG4iKTsKIAogCQlza3kyX3dyaXRlMTYoaHcsIFJBTV9CVUZGRVIocG9ydCwgQjNfUklfQ1RSTCksIFJJX0NMUl9XUl9QRVJSKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfUEFSX01BQzEpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBNQUMgcGFyaXR5IGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJNQUMgcGFyaXR5IGVycm9yXG4iKTsKIAkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX0NMSV9UWF9QRSk7CiAJfQogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX1BBUl9SWDEpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBSWCBwYXJpdHkgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlJYIHBhcml0eSBlcnJvclxuIik7CiAJCXNreTJfd3JpdGUzMihodywgUV9BRERSKHJ4cWFkZHJbcG9ydF0sIFFfQ1NSKSwgQk1VX0NMUl9JUlFfUEFSKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfVENQX1RYQTEpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBUQ1Agc2VnbWVudGF0aW9uIGVycm9yXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlRDUCBzZWdtZW50YXRpb24gZXJyb3JcbiIpOwogCQlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksIEJNVV9DTFJfSVJRX1RDUCk7CiAJfQogfQpAQCAtMjY4Myw5ICsyNzIwLDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBzdGF0dXMgPSBza3kyX3JlYWQ4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfU1JDKSk7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoc2t5MikpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogbWFjIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwluZXRpZl9pbmZvKHNreTIsIGludHIsIGRldiwgIm1hYyBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgR01fSVNfUlhfQ09fT1YpCiAJCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1JYX0lSUV9TUkMpOwpAQCAtMjcxMCw4ICsyNzQ1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltwb3J0XTsKIAl1MTYgaWR4ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9HRVRfSURYKSk7CiAKLQlkZXZfZXJyKCZody0+cGRldi0+ZGV2LCBQRlgKLQkJIiVzOiBkZXNjcmlwdG9yIGVycm9yIHE9JSN4IGdldD0ldSBwdXQ9JXVcbiIsCisJZGV2X2VycigmaHctPnBkZXYtPmRldiwgIiVzOiBkZXNjcmlwdG9yIGVycm9yIHE9JSN4IGdldD0ldSBwdXQ9JXVcbiIsCiAJCWRldi0+bmFtZSwgKHVuc2lnbmVkKSBxLCAodW5zaWduZWQpIGlkeCwKIAkJKHVuc2lnbmVkKSBza3kyX3JlYWQxNihodywgWTJfUUFERFIocSwgUFJFRl9VTklUX1BVVF9JRFgpKSk7CiAKQEAgLTI3MzYsOSArMjc3MCwxMCBAQAogCSAgICAgLyogQ2hlY2sgaWYgdGhlIFBDSSBSWCBoYW5nICovCiAJICAgICAoZmlmb19ycCA9PSBza3kyLT5jaGVjay5maWZvX3JwICYmCiAJICAgICAgZmlmb19sZXYgIT0gMCAmJiBmaWZvX2xldiA+PSBza3kyLT5jaGVjay5maWZvX2xldikpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IGh1bmcgbWFjICVkOiVkIGZpZm8gJWQgKCVkOiVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbWFjX2xldiwgbWFjX3JwLCBmaWZvX2xldiwgZmlmb19ycCwKLQkJICAgICAgIHNreTJfcmVhZDgoaHcsIFFfQUREUihyeHEsIFFfV1ApKSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAorCQkJICAgICAgImh1bmcgbWFjICVkOiVkIGZpZm8gJWQgKCVkOiVkKVxuIiwKKwkJCSAgICAgIG1hY19sZXYsIG1hY19ycCwgZmlmb19sZXYsCisJCQkgICAgICBmaWZvX3JwLCBza3kyX3JlYWQ4KGh3LCBRX0FERFIocnhxLCBRX1dQKSkpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQlza3kyLT5jaGVjay5sYXN0ID0gZGV2LT5sYXN0X3J4OwpAQCAtMjc2OSw4ICsyODA0LDcgQEAKIAkJCS8qIEZvciBjaGlwcyB3aXRoIFJ4IEZJRk8sIGNoZWNrIGlmIHN0dWNrICovCiAJCQlpZiAoKGh3LT5mbGFncyAmIFNLWTJfSFdfUkFNX0JVRkZFUikgJiYKIAkJCSAgICAgc2t5Ml9yeF9odW5nKGRldikpIHsKLQkJCQlwcl9pbmZvKFBGWCAiJXM6IHJlY2VpdmVyIGhhbmcgZGV0ZWN0ZWRcbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAicmVjZWl2ZXIgaGFuZyBkZXRlY3RlZFxuIik7CiAJCQkJc2NoZWR1bGVfd29yaygmaHctPnJlc3RhcnRfd29yayk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMzAxMCwxMSArMzA0NCwyMCBAQAogCXUzMiBod2VfbWFzayA9IFkyX0hXRV9BTExfTUFTSzsKIAogCS8qIGRpc2FibGUgQVNGICovCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRVgpIHsKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FWAorCSAgICB8fCBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1NVUFIpIHsKKwkJc2t5Ml93cml0ZTMyKGh3LCBDUFVfV0RPRywgMCk7CiAJCXN0YXR1cyA9IHNreTJfcmVhZDE2KGh3LCBIQ1VfQ0NTUik7CiAJCXN0YXR1cyAmPSB+KEhDVV9DQ1NSX0FIQl9SU1QgfCBIQ1VfQ0NTUl9DUFVfUlNUX01PREUgfAogCQkJICAgIEhDVV9DQ1NSX1VDX1NUQVRFX01TSyk7CisJCS8qCisJCSAqIENQVSBjbG9jayBkaXZpZGVyIHNob3VsZG4ndCBiZSB1c2VkIGJlY2F1c2UKKwkJICogLSBBU0YgZmlybXdhcmUgbWF5IG1hbGZ1bmN0aW9uCisJCSAqIC0gWXVrb24tU3VwcmVtZTogUGFyYWxsZWwgRkxBU0ggZG9lc24ndCBzdXBwb3J0IGRpdmlkZWQgY2xvY2tzCisJCSAqLworCQlzdGF0dXMgJj0gfkhDVV9DQ1NSX0NQVV9DTEtfRElWSURFX01TSzsKIAkJc2t5Ml93cml0ZTE2KGh3LCBIQ1VfQ0NTUiwgc3RhdHVzKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBDUFVfV0RPRywgMCk7CiAJfSBlbHNlCiAJCXNreTJfd3JpdGU4KGh3LCBCMjhfWTJfQVNGX1NUQVRfQ01ELCBZMl9BU0ZfUkVTRVQpOwogCXNreTJfd3JpdGUxNihodywgQjBfQ1RTVCwgWTJfQVNGX0RJU0FCTEUpOwpAQCAtMzA5Nyw3ICszMTQwLDcgQEAKIAkJLyogY2hlY2sgaWYgUFNNdjIgd2FzIHJ1bm5pbmcgYmVmb3JlICovCiAJCXJlZyA9IHNreTJfcGNpX3JlYWQxNihodywgUFNNX0NPTkZJR19SRUczKTsKIAkJaWYgKHJlZyAmIFBDSV9FWFBfTE5LQ1RMX0FTUE1DKSB7Ci0JCQlpbnQgY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJCQljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAkJCS8qIHJlc3RvcmUgdGhlIFBDSWUgTGluayBDb250cm9sIHJlZ2lzdGVyICovCiAJCQlza3kyX3BjaV93cml0ZTE2KGh3LCBjYXAgKyBQQ0lfRVhQX0xOS0NUTCwgcmVnKTsKIAkJfQpAQCAtMzE4OCw3ICszMjMxLDkgQEAKIHN0YXRpYyB2b2lkIHNreTJfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRpZl90eF9sb2NrKGRldik7CiAJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsJLyogc3RvcCB0eHEgKi8KKwkJbmV0aWZfdHhfdW5sb2NrKGRldik7CiAJCXNreTJfZG93bihkZXYpOwogCX0KIH0KQEAgLTMyMDEsOCArMzI0Niw3IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQllcnIgPSBza3kyX3VwKGRldik7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogY291bGQgbm90IHJlc3RhcnQgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiY291bGQgbm90IHJlc3RhcnQgJWRcbiIsIGVycik7CiAJCQlkZXZfY2xvc2UoZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKQEAgLTMyMTYsMjAgKzMyNjAsNDYgQEAKIHN0YXRpYyB2b2lkIHNreTJfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBza3kyX2h3LCByZXN0YXJ0X3dvcmspOworCXUzMiBpbWFzazsKIAlpbnQgaTsKIAogCXJ0bmxfbG9jaygpOwotCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykKLQkJc2t5Ml9kZXRhY2goaHctPmRldltpXSk7CiAKIAluYXBpX2Rpc2FibGUoJmh3LT5uYXBpKTsKKwlzeW5jaHJvbml6ZV9pcnEoaHctPnBkZXYtPmlycSk7CisJaW1hc2sgPSBza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKLQlza3kyX3Jlc2V0KGh3KTsKLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwotCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspCi0JCXNreTJfcmVhdHRhY2goaHctPmRldltpXSk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOworCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKKwkJc2t5Ml9od19kb3duKHNreTIpOworCX0KKworCXNreTJfcmVzZXQoaHcpOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOworCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCXNreTJfaHdfdXAoc2t5Mik7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKKwlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CisKKwlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CisJbmFwaV9lbmFibGUoJmh3LT5uYXBpKTsKIAogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC0zMjM5LDI3ICszMzA5LDYgQEAKIAlyZXR1cm4gc2t5Ml9pc19jb3BwZXIoaHcpID8gKFdBS0VfUEhZIHwgV0FLRV9NQUdJQykgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBza3kyX2h3X3NldF93b2woc3RydWN0IHNreTJfaHcgKmh3KQotewotCWludCB3b2wgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwotCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQlpZiAoc2t5Mi0+d29sKQotCQkJd29sID0gMTsKLQl9Ci0KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VIHx8Ci0JICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRVggfHwKLQkgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRV9QKQotCQlza3kyX3dyaXRlMzIoaHcsIEIwX0NUU1QsIHdvbCA/IFkyX0hXX1dPTF9PTiA6IFkyX0hXX1dPTF9PRkYpOwotCi0JZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZody0+cGRldi0+ZGV2LCB3b2wpOwotfQotCiBzdGF0aWMgdm9pZCBza3kyX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCWNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzI3OCwxMSArMzMyNyw2IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXNreTItPndvbCA9IHdvbC0+d29sb3B0czsKLQotCXNreTJfaHdfc2V0X3dvbChodyk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJc2t5Ml93b2xfaW5pdChza3kyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU3Nyw3ICszNjIxLDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3QgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpsaXN0OwogCXUxNiByZWc7CiAJdTggZmlsdGVyWzhdOwogCWludCByeF9wYXVzZTsKQEAgLTM1OTMsMTYgKzM2MzcsMTUgQEAKIAkJcmVnICY9IH4oR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BKTsKIAllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQltZW1zZXQoZmlsdGVyLCAweGZmLCBzaXplb2YoZmlsdGVyKSk7Ci0JZWxzZSBpZiAoZGV2LT5tY19jb3VudCA9PSAwICYmICFyeF9wYXVzZSkKKwllbHNlIGlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSAmJiAhcnhfcGF1c2UpCiAJCXJlZyAmPSB+R01fUlhDUl9NQ0ZfRU5BOwogCWVsc2UgewotCQlpbnQgaTsKIAkJcmVnIHw9IEdNX1JYQ1JfTUNGX0VOQTsKIAogCQlpZiAocnhfcGF1c2UpCiAJCQlza3kyX2FkZF9maWx0ZXIoZmlsdGVyLCBwYXVzZV9tY19hZGRyKTsKIAotCQlmb3IgKGkgPSAwOyBsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGxpc3QgPSBsaXN0LT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihsaXN0LCBkZXYpCiAJCQlza3kyX2FkZF9maWx0ZXIoZmlsdGVyLCBsaXN0LT5kbWlfYWRkcik7CiAJfQogCkBAIC0zODY0LDYgKzM5MDcsNTAgQEAKIAlyZXR1cm4gMHg0MDAwOwogfQogCitzdGF0aWMgaW50IHNreTJfcmVnX2FjY2Vzc19vayhzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIGludCBiKQoreworCS8qIFRoaXMgY29tcGxpY2F0ZWQgc3dpdGNoIHN0YXRlbWVudCBpcyB0byBtYWtlIHN1cmUgYW5kCisJICogb25seSBhY2Nlc3MgcmVnaW9ucyB0aGF0IGFyZSB1bnJlc2VydmVkLgorCSAqIFNvbWUgYmxvY2tzIGFyZSBvbmx5IHZhbGlkIG9uIGR1YWwgcG9ydCBjYXJkcy4KKwkgKi8KKwlzd2l0Y2ggKGIpIHsKKwkvKiBzZWNvbmQgcG9ydCAqLworCWNhc2UgNToJCS8qIFR4IEFyYml0ZXIgMiAqLworCWNhc2UgOToJCS8qIFJYMiAqLworCWNhc2UgMTQgLi4uIDE1OgkvKiBUWDIgKi8KKwljYXNlIDE3OiBjYXNlIDE5OiAvKiBSYW0gQnVmZmVyIDIgKi8KKwljYXNlIDIyIC4uLiAyMzogLyogVHggUmFtIEJ1ZmZlciAyICovCisJY2FzZSAyNToJLyogUnggTUFDIEZpZm8gMSAqLworCWNhc2UgMjc6CS8qIFR4IE1BQyBGaWZvIDIgKi8KKwljYXNlIDMxOgkvKiBHUEhZIDIgKi8KKwljYXNlIDQwIC4uLiA0NzogLyogUGF0dGVybiBSYW0gMiAqLworCWNhc2UgNTI6IGNhc2UgNTQ6IC8qIFRDUCBTZWdtZW50YXRpb24gMiAqLworCWNhc2UgMTEyIC4uLiAxMTY6IC8qIEdNQUMgMiAqLworCQlyZXR1cm4gaHctPnBvcnRzID4gMTsKKworCWNhc2UgMDoJCS8qIENvbnRyb2wgKi8KKwljYXNlIDI6CQkvKiBNYWMgYWRkcmVzcyAqLworCWNhc2UgNDoJCS8qIFR4IEFyYml0ZXIgMSAqLworCWNhc2UgNzoJCS8qIFBDSSBleHByZXNzIHJlZyAqLworCWNhc2UgODoJCS8qIFJYMSAqLworCWNhc2UgMTIgLi4uIDEzOiAvKiBUWDEgKi8KKwljYXNlIDE2OiBjYXNlIDE4Oi8qIFJ4IFJhbSBCdWZmZXIgMSAqLworCWNhc2UgMjAgLi4uIDIxOiAvKiBUeCBSYW0gQnVmZmVyIDEgKi8KKwljYXNlIDI0OgkvKiBSeCBNQUMgRmlmbyAxICovCisJY2FzZSAyNjoJLyogVHggTUFDIEZpZm8gMSAqLworCWNhc2UgMjggLi4uIDI5OiAvKiBEZXNjcmlwdG9yIGFuZCBzdGF0dXMgdW5pdCAqLworCWNhc2UgMzA6CS8qIEdQSFkgMSovCisJY2FzZSAzMiAuLi4gMzk6IC8qIFBhdHRlcm4gUmFtIDEgKi8KKwljYXNlIDQ4OiBjYXNlIDUwOiAvKiBUQ1AgU2VnbWVudGF0aW9uIDEgKi8KKwljYXNlIDU2IC4uLiA2MDoJLyogUENJIHNwYWNlICovCisJY2FzZSA4MCAuLi4gODQ6CS8qIEdNQUMgMSAqLworCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIFJldHVybnMgY29weSBvZiBjb250cm9sIHJlZ2lzdGVyIHJlZ2lvbgogICogTm90ZTogZXRodG9vbF9nZXRfcmVncyBhbHdheXMgcHJvdmlkZXMgZnVsbCBzaXplICgxNmspIGJ1ZmZlcgpAQCAtMzg3OCw1NSArMzk2NSwxMyBAQAogCXJlZ3MtPnZlcnNpb24gPSAxOwogCiAJZm9yIChiID0gMDsgYiA8IDEyODsgYisrKSB7Ci0JCS8qIFRoaXMgY29tcGxpY2F0ZWQgc3dpdGNoIHN0YXRlbWVudCBpcyB0byBtYWtlIHN1cmUgYW5kCi0JCSAqIG9ubHkgYWNjZXNzIHJlZ2lvbnMgdGhhdCBhcmUgdW5yZXNlcnZlZC4KLQkJICogU29tZSBibG9ja3MgYXJlIG9ubHkgdmFsaWQgb24gZHVhbCBwb3J0IGNhcmRzLgotCQkgKiBhbmQgYmxvY2sgMyBoYXMgc29tZSBzcGVjaWFsIGRpYWdub3N0aWMgcmVnaXN0ZXJzIHRoYXQKLQkJICogYXJlIHBvaXNvbi4KLQkJICovCi0JCXN3aXRjaCAoYikgewotCQljYXNlIDM6Ci0JCQkvKiBza2lwIGRpYWdub3N0aWMgcmFtIHJlZ2lvbiAqLworCQkvKiBza2lwIHBvaXNvbm91cyBkaWFnbm9zdGljIHJhbSByZWdpb24gaW4gYmxvY2sgMyAqLworCQlpZiAoYiA9PSAzKQogCQkJbWVtY3B5X2Zyb21pbyhwICsgMHgxMCwgaW8gKyAweDEwLCAxMjggLSAweDEwKTsKLQkJCWJyZWFrOwotCi0JCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5ICovCi0JCWNhc2UgNToJCS8qIFR4IEFyYml0ZXIgMiAqLwotCQljYXNlIDk6IAkvKiBSWDIgKi8KLQkJY2FzZSAxNCAuLi4gMTU6CS8qIFRYMiAqLwotCQljYXNlIDE3OiBjYXNlIDE5OiAvKiBSYW0gQnVmZmVyIDIgKi8KLQkJY2FzZSAyMiAuLi4gMjM6IC8qIFR4IFJhbSBCdWZmZXIgMiAqLwotCQljYXNlIDI1OiAJLyogUnggTUFDIEZpZm8gMSAqLwotCQljYXNlIDI3OiAJLyogVHggTUFDIEZpZm8gMiAqLwotCQljYXNlIDMxOgkvKiBHUEhZIDIgKi8KLQkJY2FzZSA0MCAuLi4gNDc6IC8qIFBhdHRlcm4gUmFtIDIgKi8KLQkJY2FzZSA1MjogY2FzZSA1NDogLyogVENQIFNlZ21lbnRhdGlvbiAyICovCi0JCWNhc2UgMTEyIC4uLiAxMTY6IC8qIEdNQUMgMiAqLwotCQkJaWYgKHNreTItPmh3LT5wb3J0cyA9PSAxKQotCQkJCWdvdG8gcmVzZXJ2ZWQ7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSAwOgkJLyogQ29udHJvbCAqLwotCQljYXNlIDI6CQkvKiBNYWMgYWRkcmVzcyAqLwotCQljYXNlIDQ6CQkvKiBUeCBBcmJpdGVyIDEgKi8KLQkJY2FzZSA3OgkJLyogUENJIGV4cHJlc3MgcmVnICovCi0JCWNhc2UgODoJCS8qIFJYMSAqLwotCQljYXNlIDEyIC4uLiAxMzogLyogVFgxICovCi0JCWNhc2UgMTY6IGNhc2UgMTg6LyogUnggUmFtIEJ1ZmZlciAxICovCi0JCWNhc2UgMjAgLi4uIDIxOiAvKiBUeCBSYW0gQnVmZmVyIDEgKi8KLQkJY2FzZSAyNDogCS8qIFJ4IE1BQyBGaWZvIDEgKi8KLQkJY2FzZSAyNjogCS8qIFR4IE1BQyBGaWZvIDEgKi8KLQkJY2FzZSAyOCAuLi4gMjk6IC8qIERlc2NyaXB0b3IgYW5kIHN0YXR1cyB1bml0ICovCi0JCWNhc2UgMzA6CS8qIEdQSFkgMSovCi0JCWNhc2UgMzIgLi4uIDM5OiAvKiBQYXR0ZXJuIFJhbSAxICovCi0JCWNhc2UgNDg6IGNhc2UgNTA6IC8qIFRDUCBTZWdtZW50YXRpb24gMSAqLwotCQljYXNlIDU2IC4uLiA2MDoJLyogUENJIHNwYWNlICovCi0JCWNhc2UgODAgLi4uIDg0OgkvKiBHTUFDIDEgKi8KKwkJZWxzZSBpZiAoc2t5Ml9yZWdfYWNjZXNzX29rKHNreTItPmh3LCBiKSkKIAkJCW1lbWNweV9mcm9taW8ocCwgaW8sIDEyOCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLXJlc2VydmVkOgorCQllbHNlCiAJCQltZW1zZXQocCwgMCwgMTI4KTsKLQkJfQogCiAJCXAgKz0gMTI4OwogCQlpbyArPSAxMjg7CkBAIC0zOTc4LDcgKzQwMjMsNyBAQAogCXdoaWxlICggKHNreTJfcGNpX3JlYWQxNihodywgY2FwICsgUENJX1ZQRF9BRERSKSAmIFBDSV9WUERfQUREUl9GKSA9PSBidXN5KSB7CiAJCS8qIENhbiB0YWtlIHVwIHRvIDEwLjYgbXMgZm9yIHdyaXRlICovCiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgSFovNCkpIHsKLQkJCWRldl9lcnIoJmh3LT5wZGV2LT5kZXYsIFBGWCAiVlBEIGN5Y2xlIHRpbWVkIG91dCIpOworCQkJZGV2X2VycigmaHctPnBkZXYtPmRldiwgIlZQRCBjeWNsZSB0aW1lZCBvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJbWRlbGF5KDEpOwpAQCAtNDMxMiw4ICs0MzU3LDcgQEAKIAogCWNhc2UgTkVUREVWX0dPSU5HX0RPV046CiAJCWlmIChza3kyLT5kZWJ1Z2ZzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiByZW1vdmUgZGVidWdmc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJyZW1vdmUgZGVidWdmc1xuIik7CiAJCQlkZWJ1Z2ZzX3JlbW92ZShza3kyLT5kZWJ1Z2ZzKTsKIAkJCXNreTItPmRlYnVnZnMgPSBOVUxMOwogCQl9CkBAIC00NDY2LDkgKzQ1MTAsNyBAQAogewogCWNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKG5ldGlmX21zZ19wcm9iZShza3kyKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBhZGRyICVwTVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CisJbmV0aWZfaW5mbyhza3kyLCBwcm9iZSwgZGV2LCAiYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogfQogCiAvKiBIYW5kbGUgc29mdHdhcmUgaW50ZXJydXB0IHVzZWQgZHVyaW5nIE1TSSB0ZXN0ICovCkBAIC00Nzc0LDcgKzQ4MTYsNiBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBza3kyX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00Nzk5LDYgKzQ4NDAsOCBAQAogCQl3b2wgfD0gc2t5Mi0+d29sOwogCX0KIAorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcGRldi0+ZGV2LCB3b2wgIT0gMCk7CisKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOwogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOwogCXNreTJfcG93ZXJfYXV4KGh3KTsKQEAgLTQ4MTEsNiArNDg1NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2t5Ml9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNDgzMCwxMCArNDg3NCwxMSBAQAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOwogCiAJLyogUmUtZW5hYmxlIGFsbCBjbG9ja3MgKi8KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FWCB8fAotCSAgICBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgfHwKLQkgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRV9QKQotCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzMsIDApOworCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0RFVl9SRUczLCAwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSB3cml0ZSBjb25maWcgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQogCiAJc2t5Ml9yZXNldChodyk7CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKQEAgLTQ4NTksMzQgKzQ5MDQsNyBAQAogCiBzdGF0aWMgdm9pZCBza3kyX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBza3kyX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaSwgd29sID0gMDsKLQotCWlmICghaHcpCi0JCXJldHVybjsKLQotCXJ0bmxfbG9jaygpOwotCWRlbF90aW1lcl9zeW5jKCZody0+d2F0Y2hkb2dfdGltZXIpOwotCi0JZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwotCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQlpZiAoc2t5Mi0+d29sKSB7Ci0JCQl3b2wgPSAxOwotCQkJc2t5Ml93b2xfaW5pdChza3kyKTsKLQkJfQotCX0KLQotCWlmICh3b2wpCi0JCXNreTJfcG93ZXJfYXV4KGh3KTsKLQlydG5sX3VubG9jaygpOwotCi0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgd29sKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgd29sKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJc2t5Ml9zdXNwZW5kKHBkZXYsIFBNU0dfU1VTUEVORCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBza3kyX2RyaXZlciA9IHsKQEAgLTQ5MDMsNyArNDkyMSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNreTJfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlwcl9pbmZvKFBGWCAiZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlwcl9pbmZvKCJkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJc2t5Ml9kZWJ1Z19pbml0KCk7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNreTJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCAzNjVkNzljLi5hNWUxODJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMTg5NSwxNCArMTg5NSwxNCBAQAogCiAvKglUWF9HTUZfQ1RSTF9UCTMyIGJpdAlUeCBHTUFDIEZJRk8gQ29udHJvbC9UZXN0ICovCiBlbnVtIHsKLQlUWF9TVEZXX0RJUwk9IDE8PDMxLC8qIERpc2FibGUgU3RvcmUgJiBGb3J3YXJkIChZdWtvbi1FQyBVbHRyYSkgKi8KLQlUWF9TVEZXX0VOQQk9IDE8PDMwLC8qIEVuYWJsZSAgU3RvcmUgJiBGb3J3YXJkIChZdWtvbi1FQyBVbHRyYSkgKi8KKwlUWF9TVEZXX0RJUwk9IDE8PDMxLC8qIERpc2FibGUgU3RvcmUgJiBGb3J3YXJkICovCisJVFhfU1RGV19FTkEJPSAxPDwzMCwvKiBFbmFibGUgIFN0b3JlICYgRm9yd2FyZCAqLwogCiAJVFhfVkxBTl9UQUdfT04JPSAxPDwyNSwvKiBlbmFibGUgIFZMQU4gdGFnZ2luZyAqLwogCVRYX1ZMQU5fVEFHX09GRgk9IDE8PDI0LC8qIGRpc2FibGUgVkxBTiB0YWdnaW5nICovCiAKLQlUWF9KVU1CT19FTkEJPSAxPDwyMywvKiBQQ0kgSnVtYm8gTW9kZSBlbmFibGUgKFl1a29uLUVDIFVsdHJhKSAqLwotCVRYX0pVTUJPX0RJUwk9IDE8PDIyLC8qIFBDSSBKdW1ibyBNb2RlIGVuYWJsZSAoWXVrb24tRUMgVWx0cmEpICovCisJVFhfUENJX0pVTV9FTkEgID0gMTw8MjMsLyogUENJIEp1bWJvIE1vZGUgZW5hYmxlICovCisJVFhfUENJX0pVTV9ESVMgID0gMTw8MjIsLyogUENJIEp1bWJvIE1vZGUgZW5hYmxlICovCiAKIAlHTUZfV1NQX1RTVF9PTgk9IDE8PDE4LC8qIFdyaXRlIFNoYWRvdyBQb2ludGVyIFRlc3QgT24gKi8KIAlHTUZfV1NQX1RTVF9PRkYJPSAxPDwxNywvKiBXcml0ZSBTaGFkb3cgUG9pbnRlciBUZXN0IE9mZiAqLwpAQCAtMjE1Niw3ICsyMTU2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZGVmaW5lIFRYX01BUF9TSU5HTEUgICAweDAwMDEKLSNkZWZpbmUgVFhfTUFQX1BBR0UgICAgIDAwMDAwMgorI2RlZmluZSBUWF9NQVBfUEFHRSAgICAgMHgwMDAyCiAJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBhZGRyKTsKIAlERUNMQVJFX1BDSV9VTk1BUF9MRU4obWFwbGVuKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggNDRlYmJhYS4uOTg3MWEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTMyMyw3ICsxMzIzLDcgQEAKIAkgKiBJIGRvbid0IG5lZWQgdG8gemVybyB0aGUgbXVsdGljYXN0IHRhYmxlLCBiZWNhdXNlIHRoZSBmbGFnIGlzCiAJICogY2hlY2tlZCBiZWZvcmUgdGhlIHRhYmxlIGlzCiAJICovCi0JZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50ID4gMTYpIHsKKwllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IG5ldGRldl9tY19jb3VudChkZXYpID4gMTYpIHsKIAkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IFJDUl9BTE1VTFxuIiwgZGV2LT5uYW1lKTsKIAkJbWNyIHw9IE1BQ19DUl9NQ1BBU187CiAJfQpAQCAtMTM0MCw4ICsxMzQwLDcgQEAKIAkgKiB0aGUgbnVtYmVyIG9mIHRoZSAzMiBiaXQgcmVnaXN0ZXIsIHdoaWxlIHRoZSBsb3cgNSBiaXRzIGFyZSB0aGUgYml0CiAJICogd2l0aGluIHRoYXQgcmVnaXN0ZXIuCiAJICovCi0JZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgIHsKLQkJaW50IGk7CisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VyX2FkZHI7CiAKIAkJLyogU2V0IHRoZSBIYXNoIHBlcmZlYyBtb2RlICovCkBAIC0xMzUwLDggKzEzNDksNyBAQAogCQkvKiBzdGFydCB3aXRoIGEgdGFibGUgb2YgYWxsIHplcm9zOiByZWplY3QgYWxsICovCiAJCW1lbXNldChtdWx0aWNhc3RfdGFibGUsIDAsIHNpemVvZihtdWx0aWNhc3RfdGFibGUpKTsKIAotCQljdXJfYWRkciA9IGRldi0+bWNfbGlzdDsKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgY3VyX2FkZHIgPSBjdXJfYWRkci0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihjdXJfYWRkciwgZGV2KSB7CiAJCQl1MzIgcG9zaXRpb247CiAKIAkJCS8qIGRvIHdlIGhhdmUgYSBwb2ludGVyIGhlcmU/ICovCkBAIC0yMDE3LDEwICsyMDE1LDggQEAKIAkJCQkJInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFByaW50IHRoZSBFdGhlcm5ldCBhZGRyZXNzICovCi0JCQlwcmludGsoIiVzOiBFdGhlcm5ldCBhZGRyOiAiLCBkZXYtPm5hbWUpOwotCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCQlwcmludGsoIiUyLjJ4OiIsIGRldi0+ZGV2X2FkZHJbaV0pOwotCQkJcHJpbnRrKCIlMi4yeFxuIiwgZGV2LT5kZXZfYWRkcls1XSk7CisJCQlwcmludGsoIiVzOiBFdGhlcm5ldCBhZGRyOiAlcE1cbiIsCisJCQkJZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKIAkJfQogCiAJCWlmIChscC0+cGh5X3R5cGUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5oIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCmluZGV4IDA1YWRiNmEuLjMyNjkyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKQEAgLTQyLDEyICs0MiwxMiBAQAogICAjZGVmaW5lIFNNQ19VU0VfMTZCSVQJCTAKICAgI2RlZmluZSBTTUNfVVNFXzMyQklUCQkxCiAgICNkZWZpbmUgU01DX0lSUV9TRU5TRQkJSVJRRl9UUklHR0VSX0xPVwotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAgICNkZWZpbmUgU01DX1VTRV8xNkJJVAkJMAogICAjZGVmaW5lIFNNQ19VU0VfMzJCSVQJCTEKICAgI2RlZmluZSBTTUNfSVJRX1NFTlNFCQlJUlFGX1RSSUdHRVJfTE9XCiAgICNkZWZpbmUgU01DX01FTV9SRVNFUlZFRAkxCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKICAgI2RlZmluZSBTTUNfVVNFXzE2QklUCQkwCiAgICNkZWZpbmUgU01DX1VTRV8zMkJJVAkJMQogICAjZGVmaW5lIFNNQ19JUlFfU0VOU0UJCUlSUUZfVFJJR0dFUl9MT1cKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwppbmRleCA4MzcxYjgyLi5mOWE5NjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTE5NC5jCkBAIC00MzQsMTggKzQzNCwxOCBAQAogKi8KIAogCi1zdGF0aWMgdm9pZCBzbWNfc2V0bXVsdGljYXN0KCBpbnQgaW9hZGRyLCBpbnQgY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqIGFkZHJzICkgeworc3RhdGljIHZvaWQgc21jX3NldG11bHRpY2FzdChpbnQgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorewogCWludAkJCWk7CiAJdW5zaWduZWQgY2hhcgkJbXVsdGljYXN0X3RhYmxlWyA4IF07Ci0Jc3RydWN0IGRldl9tY19saXN0CSogY3VyX2FkZHI7CisJc3RydWN0IGRldl9tY19saXN0ICpjdXJfYWRkcjsKIAkvKiB0YWJsZSBmb3IgZmxpcHBpbmcgdGhlIG9yZGVyIG9mIDMgYml0cyAqLwogCXVuc2lnbmVkIGNoYXIgaW52ZXJ0M1tdID0geyAwLCA0LCAyLCA2LCAxLCA1LCAzLCA3IH07CiAKIAkvKiBzdGFydCB3aXRoIGEgdGFibGUgb2YgYWxsIHplcm9zOiByZWplY3QgYWxsICovCiAJbWVtc2V0KCBtdWx0aWNhc3RfdGFibGUsIDAsIHNpemVvZiggbXVsdGljYXN0X3RhYmxlICkgKTsKIAotCWN1cl9hZGRyID0gYWRkcnM7Ci0JZm9yICggaSA9IDA7IGkgPCBjb3VudCA7IGkgKyssIGN1cl9hZGRyID0gY3VyX2FkZHItPm5leHQgICkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGN1cl9hZGRyLCBkZXYpIHsKIAkJaW50IHBvc2l0aW9uOwogCiAJCS8qIGRvIHdlIGhhdmUgYSBwb2ludGVyIGhlcmU/ICovCkBAIC0xNTQyLDcgKzE1NDIsNyBAQAogCS8qIFdlIGp1c3QgZ2V0IGFsbCBtdWx0aWNhc3QgcGFja2V0cyBldmVuIGlmIHdlIG9ubHkgd2FudCB0aGVtCiAJIC4gZnJvbSBvbmUgc291cmNlLiAgVGhpcyB3aWxsIGJlIGNoYW5nZWQgYXQgc29tZSBmdXR1cmUKIAkgLiBwb2ludC4gKi8KLQllbHNlIGlmIChkZXYtPm1jX2NvdW50ICkgIHsKKwllbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJLyogc3VwcG9ydCBoYXJkd2FyZSBtdWx0aWNhc3RpbmcgKi8KIAogCQkvKiBiZSBzdXJlIEkgZ2V0IHJpZCBvZiBmbGFncyBJIG1pZ2h0IGhhdmUgc2V0ICovCkBAIC0xNTUwLDcgKzE1NTAsNyBAQAogCQkJaW9hZGRyICsgUkNSICk7CiAJCS8qIE5PVEU6IHRoaXMgaGFzIHRvIHNldCB0aGUgYmFuaywgc28gbWFrZSBzdXJlIGl0IGlzIHRoZQogCQkgICBsYXN0IHRoaW5nIGNhbGxlZC4gIFRoZSBiYW5rIGlzIHNldCB0byB6ZXJvIGF0IHRoZSB0b3AgKi8KLQkJc21jX3NldG11bHRpY2FzdCggaW9hZGRyLCBkZXYtPm1jX2NvdW50LCBkZXYtPm1jX2xpc3QgKTsKKwkJc21jX3NldG11bHRpY2FzdChpb2FkZHIsIGRldik7CiAJfQogCWVsc2UgIHsKIAkJb3V0dyggaW53KCBpb2FkZHIgKyBSQ1IgKSAmIH4oUkNSX1BST01JU0MgfCBSQ1JfQUxNVUwpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCBlYTRmYWU3Li5mYzFiNWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMTM5NSw3ICsxMzk1LDcgQEAKIAkgKiBJIGRvbid0IG5lZWQgdG8gemVybyB0aGUgbXVsdGljYXN0IHRhYmxlLCBiZWNhdXNlIHRoZSBmbGFnIGlzCiAJICogY2hlY2tlZCBiZWZvcmUgdGhlIHRhYmxlIGlzCiAJICovCi0JZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50ID4gMTYpIHsKKwllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IG5ldGRldl9tY19jb3VudChkZXYpID4gMTYpIHsKIAkJREJHKDIsICIlczogUkNSX0FMTVVMXG4iLCBkZXYtPm5hbWUpOwogCQlscC0+cmNyX2N1cl9tb2RlIHw9IFJDUl9BTE1VTDsKIAl9CkBAIC0xNDEyLDggKzE0MTIsNyBAQAogCSAqIHRoZSBudW1iZXIgb2YgdGhlIDggYml0IHJlZ2lzdGVyLCB3aGlsZSB0aGUgbG93IDMgYml0cyBhcmUgdGhlIGJpdAogCSAqIHdpdGhpbiB0aGF0IHJlZ2lzdGVyLgogCSAqLwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQpICB7Ci0JCWludCBpOworCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cl9hZGRyOwogCiAJCS8qIHRhYmxlIGZvciBmbGlwcGluZyB0aGUgb3JkZXIgb2YgMyBiaXRzICovCkBAIC0xNDIyLDEzICsxNDIxLDkgQEAKIAkJLyogc3RhcnQgd2l0aCBhIHRhYmxlIG9mIGFsbCB6ZXJvczogcmVqZWN0IGFsbCAqLwogCQltZW1zZXQobXVsdGljYXN0X3RhYmxlLCAwLCBzaXplb2YobXVsdGljYXN0X3RhYmxlKSk7CiAKLQkJY3VyX2FkZHIgPSBkZXYtPm1jX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cl9hZGRyID0gY3VyX2FkZHItPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoY3VyX2FkZHIsIGRldikgewogCQkJaW50IHBvc2l0aW9uOwogCi0JCQkvKiBkbyB3ZSBoYXZlIGEgcG9pbnRlciBoZXJlPyAqLwotCQkJaWYgKCFjdXJfYWRkcikKLQkJCQlicmVhazsKIAkJCS8qIG1ha2Ugc3VyZSB0aGlzIGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgLQogCQkgICAJICAgc2hvdWxkbid0IHRoaXMgYmUgYSBnaXZlbiBpZiB3ZSBoYXZlIGl0IGhlcmUgPyAqLwogCQkJaWYgKCEoKmN1cl9hZGRyLT5kbWlfYWRkciAmIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggNDk0Y2Q5MS4uNGZkMWQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC03NzAsMjkgKzc3MCwyNSBAQAogewogCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7Ci0JaW50IHBoeV9hZGRyOworCWludCByZXQ7CiAKIAkvKiBmaW5kIHRoZSBmaXJzdCBwaHkgKi8KLQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspIHsKLQkJaWYgKHBkYXRhLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXSkgewotCQkJcGh5ZGV2ID0gcGRhdGEtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwotCQkJU01TQ19UUkFDRShQUk9CRSwgIlBIWSAlZDogYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsCi0JCQkJcGh5X2FkZHIsIHBoeWRldi0+YWRkciwgcGh5ZGV2LT5waHlfaWQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KKwlwaHlkZXYgPSBwaHlfZmluZF9maXJzdChwZGF0YS0+bWlpX2J1cyk7CiAJaWYgKCFwaHlkZXYpIHsKIAkJcHJfZXJyKCIlczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCi0JCSZzbXNjOTExeF9waHlfYWRqdXN0X2xpbmssIDAsIHBkYXRhLT5jb25maWcucGh5X2ludGVyZmFjZSk7CisJU01TQ19UUkFDRShQUk9CRSwgIlBIWSAlZDogYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsCisJCQlwaHlfYWRkciwgcGh5ZGV2LT5hZGRyLCBwaHlkZXYtPnBoeV9pZCk7CiAKLQlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwlyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LCBwaHlkZXYsCisJCQkmc21zYzkxMXhfcGh5X2FkanVzdF9saW5rLCAwLAorCQkJcGRhdGEtPmNvbmZpZy5waHlfaW50ZXJmYWNlKTsKKworCWlmIChyZXQpIHsKIAkJcHJfZXJyKCIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKQEAgLTEzODMsMzMgKzEzNzksMjQgQEAKIAkJcGRhdGEtPmNsZWFyX2JpdHNfbWFzayA9IChNQUNfQ1JfUFJNU18gfCBNQUNfQ1JfSFBGSUxUXyk7CiAJCXBkYXRhLT5oYXNoaGkgPSAwOwogCQlwZGF0YS0+aGFzaGxvID0gMDsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJLyogRW5hYmxpbmcgc3BlY2lmaWMgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwogCQl1bnNpZ25lZCBpbnQgaGFzaF9oaWdoID0gMDsKIAkJdW5zaWduZWQgaW50IGhhc2hfbG93ID0gMDsKLQkJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKIAkJcGRhdGEtPnNldF9iaXRzX21hc2sgPSBNQUNfQ1JfSFBGSUxUXzsKIAkJcGRhdGEtPmNsZWFyX2JpdHNfbWFzayA9IChNQUNfQ1JfUFJNU18gfCBNQUNfQ1JfTUNQQVNfKTsKIAotCQl3aGlsZSAobWNfbGlzdCkgewotCQkJY291bnQrKzsKLQkJCWlmICgobWNfbGlzdC0+ZG1pX2FkZHJsZW4pID09IEVUSF9BTEVOKSB7Ci0JCQkJdW5zaWduZWQgaW50IGJpdG51bSA9Ci0JCQkJICAgIHNtc2M5MTF4X2hhc2gobWNfbGlzdC0+ZG1pX2FkZHIpOwotCQkJCXVuc2lnbmVkIGludCBtYXNrID0gMHgwMSA8PCAoYml0bnVtICYgMHgxRik7Ci0JCQkJaWYgKGJpdG51bSAmIDB4MjApCi0JCQkJCWhhc2hfaGlnaCB8PSBtYXNrOwotCQkJCWVsc2UKLQkJCQkJaGFzaF9sb3cgfD0gbWFzazsKLQkJCX0gZWxzZSB7Ci0JCQkJU01TQ19XQVJOSU5HKERSViwgImRtaV9hZGRybGVuICE9IDYiKTsKLQkJCX0KLQkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBkZXYpIHsKKwkJCXVuc2lnbmVkIGludCBiaXRudW0gPSBzbXNjOTExeF9oYXNoKG1jX2xpc3QtPmRtaV9hZGRyKTsKKwkJCXVuc2lnbmVkIGludCBtYXNrID0gMHgwMSA8PCAoYml0bnVtICYgMHgxRik7CisKKwkJCWlmIChiaXRudW0gJiAweDIwKQorCQkJCWhhc2hfaGlnaCB8PSBtYXNrOworCQkJZWxzZQorCQkJCWhhc2hfbG93IHw9IG1hc2s7CiAJCX0KLQkJaWYgKGNvdW50ICE9ICh1bnNpZ25lZCBpbnQpZGV2LT5tY19jb3VudCkKLQkJCVNNU0NfV0FSTklORyhEUlYsICJtY19jb3VudCAhPSBkZXYtPm1jX2NvdW50Iik7CiAKIAkJcGRhdGEtPmhhc2hoaSA9IGhhc2hfaGlnaDsKIAkJcGRhdGEtPmhhc2hsbyA9IGhhc2hfbG93OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKaW5kZXggMTJmMGY1ZC4uMzAxMTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCkBAIC04MCw3ICs4MCw3IEBACiAJaW50IGxhc3RfY2FycmllcjsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbXNjOTQyMF9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNtc2M5NDIwX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfOTQyMCwgUENJX0RFVklDRV9JRF85NDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCwgfQogfTsKQEAgLTEwNjIsMTIgKzEwNjIsMTIgQEAKIAkJbWFjX2NyICY9ICh+TUFDX0NSX1BSTVNfKTsKIAkJbWFjX2NyIHw9IE1BQ19DUl9NQ1BBU187CiAJCW1hY19jciAmPSAofk1BQ19DUl9IUEZJTFRfKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAJCXUzMiBoYXNoX2xvID0gMCwgaGFzaF9oaSA9IDA7CiAKIAkJc21zY19kYmcoSFcsICJNdWx0aWNhc3QgZmlsdGVyIGVuYWJsZWQiKTsKLQkJd2hpbGUgKG1jX2xpc3QpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgZGV2KSB7CiAJCQl1MzIgYml0X251bSA9IHNtc2M5NDIwX2hhc2gobWNfbGlzdC0+ZG1pX2FkZHIpOwogCQkJdTMyIG1hc2sgPSAxIDw8IChiaXRfbnVtICYgMHgxRik7CiAKQEAgLTEwNzYsNyArMTA3Niw2IEBACiAJCQllbHNlCiAJCQkJaGFzaF9sbyB8PSBtYXNrOwogCi0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQogCQlzbXNjOTQyMF9yZWdfd3JpdGUocGQsIEhBU0hILCBoYXNoX2hpKTsKIAkJc21zYzk0MjBfcmVnX3dyaXRlKHBkLCBIQVNITCwgaGFzaF9sbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zb25pYy5jIGIvZHJpdmVycy9uZXQvc29uaWMuYwppbmRleCA5NTk5Y2U3Li4yODdjMjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NvbmljLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogewogCXN0cnVjdCBzb25pY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCByY3I7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdW5zaWduZWQgY2hhciAqYWRkcjsKIAlpbnQgaTsKIApAQCAtNTQxLDE5ICs1NDEsMjIgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CS8qIHNldCBwcm9taXNjdW91cyBtb2RlICovCiAJCXJjciB8PSBTT05JQ19SQ1JfUFJPOwogCX0gZWxzZSB7Ci0JCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiAxNSkpIHsKKwkJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCQkgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gMTUpKSB7CiAJCQlyY3IgfD0gU09OSUNfUkNSX0FNQzsKIAkJfSBlbHNlIHsKIAkJCWlmIChzb25pY19kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrKCJzb25pY19tdWx0aWNhc3RfbGlzdDogbWNfY291bnQgJWRcbiIsIGRldi0+bWNfY291bnQpOworCQkJCXByaW50aygic29uaWNfbXVsdGljYXN0X2xpc3Q6IG1jX2NvdW50ICVkXG4iLAorCQkJCSAgICAgICBuZXRkZXZfbWNfY291bnQoZGV2KSk7CiAJCQlzb25pY19zZXRfY2FtX2VuYWJsZShkZXYsIDEpOyAgLyogYWx3YXlzIGVuYWJsZSBvdXIgb3duIGFkZHJlc3MgKi8KLQkJCWZvciAoaSA9IDE7IGkgPD0gZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCQlpID0gMTsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJYWRkciA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQkJZG1pID0gZG1pLT5uZXh0OwogCQkJCXNvbmljX2NkYV9wdXQoZGV2LCBpLCBTT05JQ19DRF9DQVAwLCBhZGRyWzFdIDw8IDggfCBhZGRyWzBdKTsKIAkJCQlzb25pY19jZGFfcHV0KGRldiwgaSwgU09OSUNfQ0RfQ0FQMSwgYWRkclszXSA8PCA4IHwgYWRkclsyXSk7CiAJCQkJc29uaWNfY2RhX3B1dChkZXYsIGksIFNPTklDX0NEX0NBUDIsIGFkZHJbNV0gPDwgOCB8IGFkZHJbNF0pOwogCQkJCXNvbmljX3NldF9jYW1fZW5hYmxlKGRldiwgc29uaWNfZ2V0X2NhbV9lbmFibGUoZGV2KSB8ICgxIDw8IGkpKTsKKwkJCQlpKys7CiAJCQl9CiAJCQlTT05JQ19XUklURShTT05JQ19DREMsIDE2KTsKIAkJCS8qIGlzc3VlIExvYWQgQ0FNIGNvbW1hbmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCAyMTg1MjQ4Li4yZjhhOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC03Miw3ICs3Miw3IEBACiAKIGNoYXIgc3BpZGVyX25ldF9kcml2ZXJfbmFtZVtdID0gInNwaWRlcm5ldCI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzcGlkZXJfbmV0X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzcGlkZXJfbmV0X3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9TUElERVJfTkVULAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyAwLCB9CkBAIC02NDYsNyArNjQ2LDcgQEAKIAloYXNoID0gc3BpZGVyX25ldF9nZXRfbXVsdGljYXN0X2hhc2gobmV0ZGV2LCBuZXRkZXYtPmJyb2FkY2FzdCk7ICovCiAJc2V0X2JpdCgweGZkLCBiaXRtYXNrKTsKIAotCWZvciAobWMgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jOyBtYyA9IG1jLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIG5ldGRldikgewogCQloYXNoID0gc3BpZGVyX25ldF9nZXRfbXVsdGljYXN0X2hhc2gobmV0ZGV2LCBtYy0+ZG1pX2FkZHIpOwogCQlzZXRfYml0KGhhc2gsIGJpdG1hc2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IGY5NTIxMTMuLjZkZmE2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJQ0hfNjkxNSA9IDAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RhcmZpcmVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHN0YXJmaXJlX3BjaV90YmwpID0gewogCXsgMHg5MDA0LCAweDY5MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIXzY5MTUgfSwKIAl7IDAsIH0KIH07CkBAIC0xNzk2LDIyICsxNzk2LDIyIEBACiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CS8qIFNldCBwcm9taXNjdW91cy4gKi8KIAkJcnhfbW9kZSB8PSBBY2NlcHRBbGw7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gbWF0Y2gsIG9yIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJcnhfbW9kZSB8PSBBY2NlcHRCcm9hZGNhc3R8QWNjZXB0QWxsTXVsdGljYXN0fFBlcmZlY3RGaWx0ZXI7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50IDw9IDE0KSB7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA8PSAxNCkgewogCQkvKiBVc2UgdGhlIDE2IGVsZW1lbnQgcGVyZmVjdCBmaWx0ZXIsIHNraXAgZmlyc3QgdHdvIGVudHJpZXMuICovCiAJCXZvaWQgX19pb21lbSAqZmlsdGVyX2FkZHIgPSBpb2FkZHIgKyBQZXJmRmlsdGVyVGFibGUgKyAyICogMTY7CiAJCV9fYmUxNiAqZWFkZHJzOwotCQlmb3IgKGkgPSAyLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudCArIDI7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWVhZGRycyA9IChfX2JlMTYgKiltY2xpc3QtPmRtaV9hZGRyOwogCQkJd3JpdGV3KGJlMTZfdG9fY3B1KGVhZGRyc1syXSksIGZpbHRlcl9hZGRyKTsgZmlsdGVyX2FkZHIgKz0gNDsKIAkJCXdyaXRldyhiZTE2X3RvX2NwdShlYWRkcnNbMV0pLCBmaWx0ZXJfYWRkcik7IGZpbHRlcl9hZGRyICs9IDQ7CiAJCQl3cml0ZXcoYmUxNl90b19jcHUoZWFkZHJzWzBdKSwgZmlsdGVyX2FkZHIpOyBmaWx0ZXJfYWRkciArPSA4OwogCQl9CiAJCWVhZGRycyA9IChfX2JlMTYgKilkZXYtPmRldl9hZGRyOworCQlpID0gbmV0ZGV2X21jX2NvdW50KGRldikgKyAyOwogCQl3aGlsZSAoaSsrIDwgMTYpIHsKIAkJCXdyaXRldyhiZTE2X3RvX2NwdShlYWRkcnNbMF0pLCBmaWx0ZXJfYWRkcik7IGZpbHRlcl9hZGRyICs9IDQ7CiAJCQl3cml0ZXcoYmUxNl90b19jcHUoZWFkZHJzWzFdKSwgZmlsdGVyX2FkZHIpOyBmaWx0ZXJfYWRkciArPSA0OwpAQCAtMTgyNSw4ICsxODI1LDcgQEAKIAkJX19sZTE2IG1jX2ZpbHRlclszMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KIAogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQkvKiBUaGUgY2hpcCB1c2VzIHRoZSB1cHBlciA5IENSQyBiaXRzCiAJCQkgICBhcyBpbmRleCBpbnRvIHRoZSBoYXNoIHRhYmxlICovCiAJCQlpbnQgYml0X25yID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKaW5kZXggMzVlYWE1Mi4uZmIyODc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKQEAgLTQsOCArNCw5IEBACiAJc2VsZWN0IFBIWUxJQgogCWRlcGVuZHMgb24gTkVUREVWSUNFUyAmJiBDUFVfU1VCVFlQRV9TVDQwCiAJaGVscAotCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU1QgTUFDIDEwLzEwMC8xMDAwIG9uLWNoaXAgRXRoZXJuZXQKLQkgIGNvbnRyb2xsZXJzLiBTVCBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhIFN5bm9wc3lzIElQIENvcmUuCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhCisJICBTeW5vcHN5cyBJUCBDb3JlIGFuZCBmdWxseSB0ZXN0ZWQgb24gdGhlIFNUTWljcm9lbGVjdHJvbmljcworCSAgcGxhdGZvcm1zLgogCiBpZiBTVE1NQUNfRVRICiAKQEAgLTMyLDcgKzMzLDggQEAKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBVc2UgYW4gZXh0ZXJuYWwgdGltZXIgZm9yIG1pdGlnYXRpbmcgdGhlIG51bWJlciBvZiBuZXR3b3JrCi0JICBpbnRlcnJ1cHRzLgorCSAgaW50ZXJydXB0cy4gQ3VycmVudGx5LCBmb3IgU0ggYXJjaGl0ZWN0dXJlcywgaXQgaXMgcG9zc2libGUKKwkgIHRvIHVzZSB0aGUgVE1VIGNoYW5uZWwgMiBhbmQgdGhlIFNILVJUQyBkZXZpY2UuCiAKIGNob2ljZQogICAgICAgICBwcm9tcHQgIlNlbGVjdCBUaW1lciBkZXZpY2UiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUKaW5kZXggYjJkN2E1NS4uYzc3NmFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19TVE1NQUNfRVRIKSArPSBzdG1tYWMubwogc3RtbWFjLSQoQ09ORklHX1NUTU1BQ19USU1FUikgKz0gc3RtbWFjX3RpbWVyLm8KLXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gXAotCQltYWMxMDAubyAgZ21hYy5vICQoc3RtbWFjLXkpCitzdG1tYWMtb2Jqczo9IHN0bW1hY19tYWluLm8gc3RtbWFjX2V0aHRvb2wubyBzdG1tYWNfbWRpby5vCVwKKwkgICAgICBkd21hY19saWIubyBkd21hYzEwMDBfY29yZS5vICBkd21hYzEwMDBfZG1hLm8JXAorCSAgICAgIGR3bWFjMTAwLm8gJChzdG1tYWMteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaAppbmRleCBlNDllNTE4Li4yYTU4MTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCkBAIC0yMywxMzIgKzIzLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJkZXNjcy5oIgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgRE1BIENSUyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgTWFwcGluZwotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBETUFfQlVTX01PREUJCTB4MDAwMDEwMDAJLyogQnVzIE1vZGUgKi8KLSNkZWZpbmUgRE1BX1hNVF9QT0xMX0RFTUFORAkweDAwMDAxMDA0CS8qIFRyYW5zbWl0IFBvbGwgRGVtYW5kICovCi0jZGVmaW5lIERNQV9SQ1ZfUE9MTF9ERU1BTkQJMHgwMDAwMTAwOAkvKiBSZWNlaXZlZCBQb2xsIERlbWFuZCAqLwotI2RlZmluZSBETUFfUkNWX0JBU0VfQUREUgkweDAwMDAxMDBjCS8qIFJlY2VpdmUgTGlzdCBCYXNlICovCi0jZGVmaW5lIERNQV9UWF9CQVNFX0FERFIJMHgwMDAwMTAxMAkvKiBUcmFuc21pdCBMaXN0IEJhc2UgKi8KLSNkZWZpbmUgRE1BX1NUQVRVUwkJMHgwMDAwMTAxNAkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BX0NPTlRST0wJCTB4MDAwMDEwMTgJLyogQ3RybCAoT3BlcmF0aW9uYWwgTW9kZSkgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BCQkweDAwMDAxMDFjCS8qIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9DVFIJMHgwMDAwMTAyMAkvKiBNaXNzZWQgRnJhbWUgQ291bnRlciAqLwotI2RlZmluZSBETUFfQ1VSX1RYX0JVRl9BRERSCTB4MDAwMDEwNTAJLyogQ3VycmVudCBIb3N0IFR4IEJ1ZmZlciAqLwotI2RlZmluZSBETUFfQ1VSX1JYX0JVRl9BRERSCTB4MDAwMDEwNTQJLyogQ3VycmVudCBIb3N0IFJ4IEJ1ZmZlciAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgRE1BIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5lcwotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIERNQV9DT05UUk9MX1NUCQkweDAwMDAyMDAwCS8qIFN0YXJ0L1N0b3AgVHJhbnNtaXNzaW9uICovCi0jZGVmaW5lIERNQV9DT05UUk9MX1NSCQkweDAwMDAwMDAyCS8qIFN0YXJ0L1N0b3AgUmVjZWl2ZSAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgRE1BIEludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgZGVmaW5lcwotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKiBOT1JNQUwgSU5URVJSVVBUICoqKiovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9OSUUgMHgwMDAxMDAwMAkvKiBOb3JtYWwgU3VtbWFyeSAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVElFIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9UVUUgMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1JJRSAweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9FUkUgMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlICovCi0KLSNkZWZpbmUgRE1BX0lOVFJfTk9STUFMCShETUFfSU5UUl9FTkFfTklFIHwgRE1BX0lOVFJfRU5BX1JJRSB8IFwKLQkJCURNQV9JTlRSX0VOQV9USUUpCi0KLS8qKioqIEFCTk9STUFMIElOVEVSUlVQVCAqKioqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfQUlFIDB4MDAwMDgwMDAJLyogQWJub3JtYWwgU3VtbWFyeSAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfRkJFIDB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9FVEUgMHgwMDAwMDQwMAkvKiBFYXJseSBUcmFuc21pdCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfUldFIDB4MDAwMDAyMDAJLyogUmVjZWl2ZSBXYXRjaGRvZyAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfUlNFIDB4MDAwMDAxMDAJLyogUmVjZWl2ZSBTdG9wcGVkICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9SVUUgMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVU5FIDB4MDAwMDAwMjAJLyogVHggVW5kZXJmbG93ICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9PVkUgMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9USkUgMHgwMDAwMDAwOAkvKiBUcmFuc21pdCBKYWJiZXIgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1RTRSAweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFN0b3BwZWQgKi8KLQotI2RlZmluZSBETUFfSU5UUl9BQk5PUk1BTAkoRE1BX0lOVFJfRU5BX0FJRSB8IERNQV9JTlRSX0VOQV9GQkUgfCBcCi0JCQkJRE1BX0lOVFJfRU5BX1VORSkKLQotLyogRE1BIGRlZmF1bHQgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgRE1BX0lOVFJfREVGQVVMVF9NQVNLCShETUFfSU5UUl9OT1JNQUwgfCBETUFfSU5UUl9BQk5PUk1BTCkKLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIERNQSBTdGF0dXMgcmVnaXN0ZXIgZGVmaW5lcwotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19HUEkJCTB4MTAwMDAwMDAJLyogUE1UIGludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0dNSQkJMHgwODAwMDAwMAkvKiBNTUMgaW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfR0xJCQkweDA0MDAwMDAwCS8qIEdNQUMgTGluZSBpbnRlcmZhY2UgaW50LiAqLwotI2RlZmluZSBETUFfU1RBVFVTX0dNSQkJMHgwODAwMDAwMAotI2RlZmluZSBETUFfU1RBVFVTX0dMSQkJMHgwNDAwMDAwMAotI2RlZmluZSBETUFfU1RBVFVTX0VCX01BU0sJMHgwMDM4MDAwMAkvKiBFcnJvciBCaXRzIE1hc2sgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19FQl9UWF9BQk9SVAkweDAwMDgwMDAwCS8qIEVycm9yIEJpdHMgLSBUWCBBYm9ydCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0VCX1JYX0FCT1JUCTB4MDAxMDAwMDAJLyogRXJyb3IgQml0cyAtIFJYIEFib3J0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVFNfTUFTSwkweDAwNzAwMDAwCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19UU19TSElGVAkyMAotI2RlZmluZSBETUFfU1RBVFVTX1JTX01BU0sJMHgwMDBlMDAwMAkvKiBSZWNlaXZlIFByb2Nlc3MgU3RhdGUgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19SU19TSElGVAkxNwotI2RlZmluZSBETUFfU1RBVFVTX05JUwkweDAwMDEwMDAwCS8qIE5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLwotI2RlZmluZSBETUFfU1RBVFVTX0FJUwkweDAwMDA4MDAwCS8qIEFibm9ybWFsIEludGVycnVwdCBTdW1tYXJ5ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRVJJCTB4MDAwMDQwMDAJLyogRWFybHkgUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19GQkkJMHgwMDAwMjAwMAkvKiBGYXRhbCBCdXMgRXJyb3IgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRVRJCTB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUldUCTB4MDAwMDAyMDAJLyogUmVjZWl2ZSBXYXRjaGRvZyBUaW1lb3V0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUlBTCTB4MDAwMDAxMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0b3BwZWQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19SVQkweDAwMDAwMDgwCS8qIFJlY2VpdmUgQnVmZmVyIFVuYXZhaWxhYmxlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUkkJMHgwMDAwMDA0MAkvKiBSZWNlaXZlIEludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1VORgkweDAwMDAwMDIwCS8qIFRyYW5zbWl0IFVuZGVyZmxvdyAqLwotI2RlZmluZSBETUFfU1RBVFVTX09WRgkweDAwMDAwMDEwCS8qIFJlY2VpdmUgT3ZlcmZsb3cgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19USlQJMHgwMDAwMDAwOAkvKiBUcmFuc21pdCBKYWJiZXIgVGltZW91dCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RVCTB4MDAwMDAwMDQJLyogVHJhbnNtaXQgQnVmZmVyIFVuYXZhaWxhYmxlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVFBTCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgUHJvY2VzcyBTdG9wcGVkICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVEkJMHgwMDAwMDAwMQkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KLQotLyogT3RoZXIgZGVmaW5lcyAqLwotI2RlZmluZSBIQVNIX1RBQkxFX1NJWkUgNjQKLSNkZWZpbmUgUEFVU0VfVElNRSAweDIwMAotCi0vKiBGbG93IENvbnRyb2wgZGVmaW5lcyAqLwotI2RlZmluZSBGTE9XX09GRgkwCi0jZGVmaW5lIEZMT1dfUlgJCTEKLSNkZWZpbmUgRkxPV19UWAkJMgotI2RlZmluZSBGTE9XX0FVVE8JKEZMT1dfVFggfCBGTE9XX1JYKQotCi0vKiBETUEgU1RPUkUtQU5ELUZPUldBUkQgT3BlcmF0aW9uIE1vZGUgKi8KLSNkZWZpbmUgU0ZfRE1BX01PREUgMQotCi0jZGVmaW5lIEhXX0NTVU0gMQotI2RlZmluZSBOT19IV19DU1VNIDAKLQotLyogR01BQyBUWCBGSUZPIGlzIDhLLCBSeCBGSUZPIGlzIDE2SyAqLwotI2RlZmluZSBCVUZfU0laRV8xNktpQiAxNjM4NAotI2RlZmluZSBCVUZfU0laRV84S2lCIDgxOTIKLSNkZWZpbmUgQlVGX1NJWkVfNEtpQiA0MDk2Ci0jZGVmaW5lIEJVRl9TSVpFXzJLaUIgMjA0OAotCi0vKiBQb3dlciBEb3duIGFuZCBXT0wgKi8KLSNkZWZpbmUgUE1UX05PVF9TVVBQT1JURUQgMAotI2RlZmluZSBQTVRfU1VQUE9SVEVEIDEKLQotLyogQ29tbW9uIE1BQyBkZWZpbmVzICovCi0jZGVmaW5lIE1BQ19DVFJMX1JFRwkJMHgwMDAwMDAwMAkvKiBNQUMgQ29udHJvbCAqLwotI2RlZmluZSBNQUNfRU5BQkxFX1RYCQkweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLwotI2RlZmluZSBNQUNfUk5BQkxFX1JYCQkweDAwMDAwMDA0CS8qIFJlY2VpdmVyIEVuYWJsZSAqLwotCi0vKiBNQUMgTWFuYWdlbWVudCBDb3VudGVycyByZWdpc3RlciAqLwotI2RlZmluZSBNTUNfQ09OVFJPTAkJMHgwMDAwMDEwMAkvKiBNTUMgQ29udHJvbCAqLwotI2RlZmluZSBNTUNfSElHSF9JTlRSCQkweDAwMDAwMTA0CS8qIE1NQyBIaWdoIEludGVycnVwdCAqLwotI2RlZmluZSBNTUNfTE9XX0lOVFIJCTB4MDAwMDAxMDgJLyogTU1DIExvdyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTU1DX0hJR0hfSU5UUl9NQVNLCTB4MDAwMDAxMGMJLyogTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKi8KLSNkZWZpbmUgTU1DX0xPV19JTlRSX01BU0sJMHgwMDAwMDExMAkvKiBNTUMgTG93IEludGVycnVwdCBNYXNrICovCi0KLSNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9NQVNLCTB4MDAwM2ZmOAkvKiBNYXhpbXVtIEZyYW1lIFNpemUgKi8KLSNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9TSElGVAkzCi0jZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUkFNRQkJMHg3RkYKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyB7CiAJLyogVHJhbnNtaXQgZXJyb3JzICovCkBAIC0xNjksNyArNDQsNyBAQAogCXVuc2lnbmVkIGxvbmcgcnhfdG9vbG9uZzsKIAl1bnNpZ25lZCBsb25nIHJ4X2NvbGxpc2lvbjsKIAl1bnNpZ25lZCBsb25nIHJ4X2NyYzsKLQl1bnNpZ25lZCBsb25nIHJ4X2xlbmdodDsKKwl1bnNpZ25lZCBsb25nIHJ4X2xlbmd0aDsKIAl1bnNpZ25lZCBsb25nIHJ4X21paTsKIAl1bnNpZ25lZCBsb25nIHJ4X211bHRpY2FzdDsKIAl1bnNpZ25lZCBsb25nIHJ4X2dtYWNfb3ZlcmZsb3c7CkBAIC0xOTgsNjYgKzczLDYyIEBACiAJdW5zaWduZWQgbG9uZyBub3JtYWxfaXJxX247CiB9OwogCi0vKiBHTUFDIGNvcmUgY2FuIGNvbXB1dGUgdGhlIGNoZWNrc3VtcyBpbiBIVy4gKi8KLWVudW0gcnhfZnJhbWVfc3RhdHVzIHsKKyNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFIDY0CisjZGVmaW5lIFBBVVNFX1RJTUUgMHgyMDAKKworLyogRmxvdyBDb250cm9sIGRlZmluZXMgKi8KKyNkZWZpbmUgRkxPV19PRkYJMAorI2RlZmluZSBGTE9XX1JYCQkxCisjZGVmaW5lIEZMT1dfVFgJCTIKKyNkZWZpbmUgRkxPV19BVVRPCShGTE9XX1RYIHwgRkxPV19SWCkKKworI2RlZmluZSBTRl9ETUFfTU9ERSAxIC8qIERNQSBTVE9SRS1BTkQtRk9SV0FSRCBPcGVyYXRpb24gTW9kZSAqLworCisjZGVmaW5lIEhXX0NTVU0gMQorI2RlZmluZSBOT19IV19DU1VNIDAKK2VudW0gcnhfZnJhbWVfc3RhdHVzIHsgLyogSVBDIHN0YXR1cyAqLwogCWdvb2RfZnJhbWUgPSAwLAogCWRpc2NhcmRfZnJhbWUgPSAxLAogCWNzdW1fbm9uZSA9IDIsCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX3NldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdTggYWRkcls2XSwKLQkJCSB1bnNpZ25lZCBpbnQgaGlnaCwgdW5zaWduZWQgaW50IGxvdykKLXsKLQl1bnNpZ25lZCBsb25nIGRhdGE7CitlbnVtIHR4X2RtYV9pcnFfc3RhdHVzIHsKKwl0eF9oYXJkX2Vycm9yID0gMSwKKwl0eF9oYXJkX2Vycm9yX2J1bXBfdGMgPSAyLAorCWhhbmRsZV90eF9yeCA9IDMsCit9OwogCi0JZGF0YSA9IChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XTsKLQl3cml0ZWwoZGF0YSwgaW9hZGRyICsgaGlnaCk7Ci0JZGF0YSA9IChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXTsKLQl3cml0ZWwoZGF0YSwgaW9hZGRyICsgbG93KTsKKy8qIEdNQUMgVFggRklGTyBpcyA4SywgUnggRklGTyBpcyAxNksgKi8KKyNkZWZpbmUgQlVGX1NJWkVfMTZLaUIgMTYzODQKKyNkZWZpbmUgQlVGX1NJWkVfOEtpQiA4MTkyCisjZGVmaW5lIEJVRl9TSVpFXzRLaUIgNDA5NgorI2RlZmluZSBCVUZfU0laRV8yS2lCIDIwNDgKIAotCXJldHVybjsKLX0KKy8qIFBvd2VyIERvd24gYW5kIFdPTCAqLworI2RlZmluZSBQTVRfTk9UX1NVUFBPUlRFRCAwCisjZGVmaW5lIFBNVF9TVVBQT1JURUQgMQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX2dldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwKLQkJCQl1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgaGlnaCwKLQkJCQl1bnNpZ25lZCBpbnQgbG93KQotewotCXVuc2lnbmVkIGludCBoaV9hZGRyLCBsb19hZGRyOworLyogQ29tbW9uIE1BQyBkZWZpbmVzICovCisjZGVmaW5lIE1BQ19DVFJMX1JFRwkJMHgwMDAwMDAwMAkvKiBNQUMgQ29udHJvbCAqLworI2RlZmluZSBNQUNfRU5BQkxFX1RYCQkweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBNQUNfUk5BQkxFX1JYCQkweDAwMDAwMDA0CS8qIFJlY2VpdmVyIEVuYWJsZSAqLwogCi0JLyogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgKi8KLQloaV9hZGRyID0gcmVhZGwoaW9hZGRyICsgaGlnaCk7Ci0JbG9fYWRkciA9IHJlYWRsKGlvYWRkciArIGxvdyk7CisvKiBNQUMgTWFuYWdlbWVudCBDb3VudGVycyByZWdpc3RlciAqLworI2RlZmluZSBNTUNfQ09OVFJPTAkJMHgwMDAwMDEwMAkvKiBNTUMgQ29udHJvbCAqLworI2RlZmluZSBNTUNfSElHSF9JTlRSCQkweDAwMDAwMTA0CS8qIE1NQyBIaWdoIEludGVycnVwdCAqLworI2RlZmluZSBNTUNfTE9XX0lOVFIJCTB4MDAwMDAxMDgJLyogTU1DIExvdyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTU1DX0hJR0hfSU5UUl9NQVNLCTB4MDAwMDAxMGMJLyogTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTU1DX0xPV19JTlRSX01BU0sJMHgwMDAwMDExMAkvKiBNTUMgTG93IEludGVycnVwdCBNYXNrICovCiAKLQkvKiBFeHRyYWN0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoaWdoIGFuZCBsb3cgd29yZHMgKi8KLQlhZGRyWzBdID0gbG9fYWRkciAmIDB4ZmY7Ci0JYWRkclsxXSA9IChsb19hZGRyID4+IDgpICYgMHhmZjsKLQlhZGRyWzJdID0gKGxvX2FkZHIgPj4gMTYpICYgMHhmZjsKLQlhZGRyWzNdID0gKGxvX2FkZHIgPj4gMjQpICYgMHhmZjsKLQlhZGRyWzRdID0gaGlfYWRkciAmIDB4ZmY7Ci0JYWRkcls1XSA9IChoaV9hZGRyID4+IDgpICYgMHhmZjsKKyNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9NQVNLCTB4MDAwM2ZmOAkvKiBNYXhpbXVtIEZyYW1lIFNpemUgKi8KKyNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSTV9TSElGVAkzCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUkFNRQkJMHg3RkYKIAotCXJldHVybjsKLX0KLQotc3RydWN0IHN0bW1hY19vcHMgewotCS8qIE1BQyBjb3JlIGluaXRpYWxpemF0aW9uICovCi0Jdm9pZCAoKmNvcmVfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0JLyogRE1BIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KLQlpbnQgKCpkbWFfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgcGJsLCB1MzIgZG1hX3R4LCB1MzIgZG1hX3J4KTsKLQkvKiBEdW1wIE1BQyByZWdpc3RlcnMgKi8KLQl2b2lkICgqZHVtcF9tYWNfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKLQkvKiBEdW1wIERNQSByZWdpc3RlcnMgKi8KLQl2b2lkICgqZHVtcF9kbWFfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKLQkvKiBTZXQgdHgvcnggdGhyZXNob2xkIGluIHRoZSBjc3I2IHJlZ2lzdGVyCi0JICogQW4gaW52YWxpZCB2YWx1ZSBlbmFibGVzIHRoZSBzdG9yZS1hbmQtZm9yd2FyZCBtb2RlICovCi0Jdm9pZCAoKmRtYV9tb2RlKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsIGludCByeG1vZGUpOwotCS8qIFRvIHRyYWNrIGV4dHJhIHN0YXRpc3RpYyAoaWYgc3VwcG9ydGVkKSAqLwotCXZvaWQgKCpkbWFfZGlhZ25vc3RpY19mcikgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpOwotCS8qIFJYIGRlc2NyaXB0b3IgcmluZyBpbml0aWFsaXphdGlvbiAqLworc3RydWN0IHN0bW1hY19kZXNjX29wcyB7CisJLyogRE1BIFJYIGRlc2NyaXB0b3IgcmluZyBpbml0aWFsaXphdGlvbiAqLwogCXZvaWQgKCppbml0X3J4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCi0JCQkJaW50IGRpc2FibGVfcnhfaWMpOwotCS8qIFRYIGRlc2NyaXB0b3IgcmluZyBpbml0aWFsaXphdGlvbiAqLworCQkJICAgICAgaW50IGRpc2FibGVfcnhfaWMpOworCS8qIERNQSBUWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KIAl2b2lkICgqaW5pdF90eF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplKTsKIAogCS8qIEludm9rZWQgYnkgdGhlIHhtaXQgZnVuY3Rpb24gdG8gcHJlcGFyZSB0aGUgdHggZGVzY3JpcHRvciAqLwpAQCAtMjgxLDcgKzE1Miw2IEBACiAJLyogR2V0IHRoZSBidWZmZXIgc2l6ZSBmcm9tIHRoZSBkZXNjcmlwdG9yICovCiAJaW50ICgqZ2V0X3R4X2xlbikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CiAJLyogSGFuZGxlIGV4dHJhIGV2ZW50cyBvbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGh3IGRlcGVuZGVudCAqLwotCXZvaWQgKCpob3N0X2lycV9zdGF0dXMpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CiAJaW50ICgqZ2V0X3J4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKIAl2b2lkICgqc2V0X3J4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKIAkvKiBHZXQgdGhlIHJlY2VpdmUgZnJhbWUgc2l6ZSAqLwpAQCAtMjg5LDYgKzE1OSwzNyBAQAogCS8qIFJldHVybiB0aGUgcmVjZXB0aW9uIHN0YXR1cyBsb29raW5nIGF0IHRoZSBSREVTMSAqLwogCWludCAoKnJ4X3N0YXR1cykgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCiAJCQkgIHN0cnVjdCBkbWFfZGVzYyAqcCk7Cit9OworCitzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgeworCS8qIERNQSBjb3JlIGluaXRpYWxpemF0aW9uICovCisJaW50ICgqaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgcGJsLCB1MzIgZG1hX3R4LCB1MzIgZG1hX3J4KTsKKwkvKiBEdW1wIERNQSByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHVtcF9yZWdzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIFNldCB0eC9yeCB0aHJlc2hvbGQgaW4gdGhlIGNzcjYgcmVnaXN0ZXIKKwkgKiBBbiBpbnZhbGlkIHZhbHVlIGVuYWJsZXMgdGhlIHN0b3JlLWFuZC1mb3J3YXJkIG1vZGUgKi8KKwl2b2lkICgqZG1hX21vZGUpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwgaW50IHJ4bW9kZSk7CisJLyogVG8gdHJhY2sgZXh0cmEgc3RhdGlzdGljIChpZiBzdXBwb3J0ZWQpICovCisJdm9pZCAoKmRtYV9kaWFnbm9zdGljX2ZyKSAodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKmVuYWJsZV9kbWFfdHJhbnNtaXNzaW9uKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCplbmFibGVfZG1hX2lycSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqZGlzYWJsZV9kbWFfaXJxKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCpzdGFydF90eCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqc3RvcF90eCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqc3RhcnRfcngpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKnN0b3BfcngpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJaW50ICgqZG1hX2ludGVycnVwdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLAorCQkJICAgICAgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCk7Cit9OworCitzdHJ1Y3Qgc3RtbWFjX29wcyB7CisJLyogTUFDIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KKwl2b2lkICgqY29yZV9pbml0KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwkvKiBEdW1wIE1BQyByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHVtcF9yZWdzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIEhhbmRsZSBleHRyYSBldmVudHMgb24gc3BlY2lmaWMgaW50ZXJydXB0cyBodyBkZXBlbmRlbnQgKi8KKwl2b2lkICgqaG9zdF9pcnFfc3RhdHVzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOwogCS8qIE11bHRpY2FzdCBmaWx0ZXIgc2V0dGluZyAqLwogCXZvaWQgKCpzZXRfZmlsdGVyKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJLyogRmxvdyBjb250cm9sIHNldHRpbmcgKi8KQEAgLTI5OCw5ICsxOTksOSBAQAogCXZvaWQgKCpwbXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKTsKIAkvKiBTZXQvR2V0IFVuaWNhc3QgTUFDIGFkZHJlc3NlcyAqLwogCXZvaWQgKCpzZXRfdW1hY19hZGRyKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgICAgIHVuc2lnbmVkIGludCByZWdfbik7CisJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZ19uKTsKIAl2b2lkICgqZ2V0X3VtYWNfYWRkcikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOworCQkJICAgICAgIHVuc2lnbmVkIGludCByZWdfbik7CiB9OwogCiBzdHJ1Y3QgbWFjX2xpbmsgewpAQCAtMzE0LDE3ICsyMTUsMTkgQEAKIAl1bnNpZ25lZCBpbnQgZGF0YTsJLyogTUlJIERhdGEgKi8KIH07CiAKLXN0cnVjdCBod19jYXAgewotCXVuc2lnbmVkIGludCB2ZXJzaW9uOwkvKiBDb3JlIFZlcnNpb24gcmVnaXN0ZXIgKEdNQUMpICovCi0JdW5zaWduZWQgaW50IHBtdDsJLyogUG93ZXItRG93biBtb2RlIChHTUFDKSAqLwotCXN0cnVjdCBtYWNfbGluayBsaW5rOwotCXN0cnVjdCBtaWlfcmVncyBtaWk7Ci19OwotCiBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvIHsKLQlzdHJ1Y3QgaHdfY2FwIGh3OwotCXN0cnVjdCBzdG1tYWNfb3BzICpvcHM7CisJc3RydWN0IHN0bW1hY19vcHMJKm1hYzsKKwlzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzCSpkZXNjOworCXN0cnVjdCBzdG1tYWNfZG1hX29wcwkqZG1hOworCXVuc2lnbmVkIGludCBwbXQ7CS8qIHN1cHBvcnQgUG93ZXItRG93biAqLworCXN0cnVjdCBtaWlfcmVncyBtaWk7CS8qIE1JSSByZWdpc3RlciBBZGRyZXNzZXMgKi8KKwlzdHJ1Y3QgbWFjX2xpbmsgbGluazsKIH07CiAKLXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmdtYWNfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzEwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZHdtYWMxMDAwX3NldHVwKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpkd21hYzEwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOworCitleHRlcm4gdm9pZCBzdG1tYWNfc2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1OCBhZGRyWzZdLAorCQkJCXVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KTsKK2V4dGVybiB2b2lkIHN0bW1hY19nZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkJdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaAppbmRleCA2ZDJhMGIyLi42M2EwM2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIEhlYWRlciBGaWxlIHRvIGRlc2NyaWJlIHRoZSBETUEgZGVzY3JpcHRvcnMKLSAgVXNlIGVuaGFuY2VkIGRlc2NyaXB0b3JzIGluIGNhc2Ugb2YgR01BQyBDb3Jlcy4KKyAgSGVhZGVyIEZpbGUgdG8gZGVzY3JpYmUgdGhlIERNQSBkZXNjcmlwdG9ycy4KKyAgRW5oYW5jZWQgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIGluIGNhc2Ugb2YgRFdNQUMxMDAwIENvcmVzLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2IwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuYwpAQCAtMCwwICsxLDUzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTUFDIDEwLzEwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIKKyAgY3VycmVudGx5IHRlc3RlZCBvbiBhbGwgdGhlIFNUIGJvYXJkcyBiYXNlZCBvbiBTVGI3MTA5IGFuZCBzdHg3MjAwIFNvQ3MuCisKKyAgRFdDIEV0aGVyIE1BQyAxMC8xMDAgVW5pdmVyc2FsIHZlcnNpb24gNC4wIGhhcyBiZWVuIHVzZWQgZm9yIGRldmVsb3BpbmcKKyAgdGhpcyBjb2RlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImR3bWFjMTAwLmgiCisjaW5jbHVkZSAiZHdtYWNfZG1hLmgiCisKKyN1bmRlZiBEV01BQzEwMF9ERUJVRworLyojZGVmaW5lIERXTUFDMTAwX0RFQlVHKi8KKyNpZmRlZiBEV01BQzEwMF9ERUJVRworI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgZHdtYWMxMDBfY29yZV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCXdyaXRlbCgodmFsdWUgfCBNQUNfQ09SRV9JTklUKSwgaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwl3cml0ZWwoRVRIX1BfODAyMVEsIGlvYWRkciArIE1BQ19WTEFOMSk7CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2R1bXBfbWFjX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJCSJcdCAgRFdNQUMgMTAwIENTUiAoYmFzZSBhZGRyID0gMHglOHgpXG4iCisJCSJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisJCSh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKKwlwcl9pbmZvKCJcdGNvbnRyb2wgcmVnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0NPTlRST0wsCisJCXJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSk7CisJcHJfaW5mbygiXHRhZGRyIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuICIsIE1BQ19BRERSX0hJR0gsCisJCXJlYWRsKGlvYWRkciArIE1BQ19BRERSX0hJR0gpKTsKKwlwcl9pbmZvKCJcdGFkZHIgTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQUREUl9MT1csCisJCXJlYWRsKGlvYWRkciArIE1BQ19BRERSX0xPVykpOworCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNQUNfSEFTSF9ISUdILCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSk7CisJcHJfaW5mbygiXHRtdWx0aWNhc3QgaGFzaCBMTyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1BQ19IQVNIX0xPVywgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7CisJcHJfaW5mbygiXHRmbG93IGNvbnRyb2wgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNQUNfRkxPV19DVFJMLCByZWFkbChpb2FkZHIgKyBNQUNfRkxPV19DVFJMKSk7CisJcHJfaW5mbygiXHRWTEFOMSB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjEsCisJCXJlYWRsKGlvYWRkciArIE1BQ19WTEFOMSkpOworCXByX2luZm8oIlx0VkxBTjIgdGFnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX1ZMQU4yLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfVkxBTjIpKTsKKwlwcl9pbmZvKCJcblx0TUFDIG1hbmFnZW1lbnQgY291bnRlciByZWdpc3RlcnNcbiIpOworCXByX2luZm8oIlx0IE1NQyBjcnRsIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTU1DX0NPTlRST0wsIHJlYWRsKGlvYWRkciArIE1NQ19DT05UUk9MKSk7CisJcHJfaW5mbygiXHQgTU1DIEhpZ2ggSW50ZXJydXB0IChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTU1DX0hJR0hfSU5UUiwgcmVhZGwoaW9hZGRyICsgTU1DX0hJR0hfSU5UUikpOworCXByX2luZm8oIlx0IE1NQyBMb3cgSW50ZXJydXB0IChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTU1DX0xPV19JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfTE9XX0lOVFIpKTsKKwlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgTWFzayAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19ISUdIX0lOVFJfTUFTSywgcmVhZGwoaW9hZGRyICsgTU1DX0hJR0hfSU5UUl9NQVNLKSk7CisJcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19MT1dfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSykpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwKKwkJCSAgIHUzMiBkbWFfcngpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwkvKiBETUEgU1cgcmVzZXQgKi8KKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7CisKKwkvKiBFbmFibGUgQXBwbGljYXRpb24gQWNjZXNzIGJ5IHdyaXRpbmcgdG8gRE1BIENTUjAgKi8KKwl3cml0ZWwoRE1BX0JVU19NT0RFX0RFRkFVTFQgfCAocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpLAorCSAgICAgICBpb2FkZHIgKyBETUFfQlVTX01PREUpOworCisJLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLworCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7CisKKwkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCisJICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KKwl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKKwl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3RvcmUgYW5kIEZvcndhcmQgY2FwYWJpbGl0eSBpcyBub3QgdXNlZCBhdCBhbGwuLgorICogVGhlIHRyYW5zbWl0IHRocmVzaG9sZCBjYW4gYmUgcHJvZ3JhbW1lZCBieQorICogc2V0dGluZyB0aGUgVFRDIGJpdHMgaW4gdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLiovCitzdGF0aWMgdm9pZCBkd21hYzEwMF9kbWFfb3BlcmF0aW9uX21vZGUodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsCisJCQkJICAgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPD0gMzIpCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzMyOworCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfNjQ7CisJZWxzZQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18xMjg7CisKKwl3cml0ZWwoY3NyNiwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCisJREJHKEtFUk5fREVCVUcgIkRXTUFDIDEwMCBETUEgQ1NSIFxuIik7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJcHJfZGVidWcoIlx0IENTUiVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJICAgICAgIChETUFfQlVTX01PREUgKyBpICogNCksCisJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBpICogNCkpOworCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgIERNQV9DVVJfVFhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfVFhfQlVGX0FERFIpKTsKKwlEQkcoS0VSTl9ERUJVRyAiXHQgQ1NSMjEgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICBETUFfQ1VSX1JYX0JVRl9BRERSLCByZWFkbChpb2FkZHIgKyBETUFfQ1VSX1JYX0JVRl9BRERSKSk7CisJcmV0dXJuOworfQorCisvKiBETUEgY29udHJvbGxlciBoYXMgdHdvIGNvdW50ZXJzIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YKKyAqIHRoZSByZWNlaXZlIG1pc3NlZCBmcmFtZXMuICovCitzdGF0aWMgdm9pZCBkd21hYzEwMF9kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLAorCQkJCSAgICAgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisJdTMyIGNzcjggPSByZWFkbChpb2FkZHIgKyBETUFfTUlTU0VEX0ZSQU1FX0NUUik7CisKKwlpZiAodW5saWtlbHkoY3NyOCkpIHsKKwkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRSkgeworCQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzICs9IDB4ODAwOworCQkJeC0+cnhfb3ZlcmZsb3dfY250ciArPSAweDgwMDsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBvdmVfY250cjsKKwkJCW92ZV9jbnRyID0gKChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkVfQ05UUikgPj4gMTcpOworCQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzICs9IG92ZV9jbnRyOworCQkJeC0+cnhfb3ZlcmZsb3dfY250ciArPSBvdmVfY250cjsKKwkJfQorCisJCWlmIChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkVfTSkgeworCQkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gMHhmZmZmOworCQkJeC0+cnhfbWlzc2VkX2NudHIgKz0gMHhmZmZmOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IG1pc3NfZiA9IChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9NX0NOVFIpOworCQkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gbWlzc19mOworCQkJeC0+cnhfbWlzc2VkX2NudHIgKz0gbWlzc19mOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvcikpIHsKKwkJCXgtPnR4X3VuZGVyZmxvdysrOworCQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lm5vX2NhcnJpZXIpKSB7CisJCQl4LT50eF9jYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHgubG9zc19jYXJyaWVyKSkgeworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseSgocC0+ZGVzMDEudHguZXhjZXNzaXZlX2RlZmVycmFsKSB8fAorCQkJICAgICAocC0+ZGVzMDEudHguZXhjZXNzaXZlX2NvbGxpc2lvbnMpIHx8CisJCQkgICAgIChwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbikpKQorCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEudHguY29sbGlzaW9uX2NvdW50OworCQlyZXQgPSAtMTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmhlYXJ0YmVhdF9mYWlsKSkgeworCQl4LT50eF9oZWFydGJlYXQrKzsKKwkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJcmV0ID0gLTE7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5kZWZlcnJlZCkpCisJCXgtPnR4X2RlZmVycmVkKys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5idWZmZXIxX3NpemU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgaWYgZWFjaCBpbmNvbWluZyBmcmFtZSBoYXMgc29tZSBlcnJvcnMKKyAqIGFuZCwgaWYgcmVxdWlyZWQsIHVwZGF0ZXMgdGhlIG11bHRpY2FzdCBzdGF0aXN0aWNzLgorICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCByZXR1cm5zIGNzdW1fbm9uZSBiZWNhc3VlIHRoZSBkZXZpY2UKKyAqIGlzIG5vdCBhYmxlIHRvIGNvbXB1dGUgdGhlIGNzdW0gaW4gSFcuICovCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICAgIHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgcmV0ID0gY3N1bV9ub25lOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubGFzdF9kZXNjcmlwdG9yID09IDApKSB7CisJCXByX3dhcm5pbmcoImR3bWFjMTAwIEVycm9yOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgorCQkJICAgImZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVyc1xuIik7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldHVybiBkaXNjYXJkX2ZyYW1lOworCX0KKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5lcnJvcl9zdW1tYXJ5KSkgeworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZGVzY3JpcHRvcl9lcnJvcikpCisJCQl4LT5yeF9kZXNjKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5wYXJ0aWFsX2ZyYW1lX2Vycm9yKSkKKwkJCXgtPnJ4X3BhcnRpYWwrKzsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnJ1bl9mcmFtZSkpCisJCQl4LT5yeF9ydW50Kys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5mcmFtZV90b29fbG9uZykpCisJCQl4LT5yeF90b29sb25nKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5jb2xsaXNpb24pKSB7CisJCQl4LT5yeF9jb2xsaXNpb24rKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNyY19lcnJvcikpIHsKKwkJCXgtPnJ4X2NyYysrOworCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJfQorCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZHJpYmJsaW5nKSkKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5sZW5ndGhfZXJyb3IpKSB7CisJCXgtPnJ4X2xlbmd0aCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubWlpX2Vycm9yKSkgeworCQl4LT5yeF9taWkrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHAtPmRlczAxLnJ4Lm11bHRpY2FzdF9mcmFtZSkgeworCQl4LT5yeF9tdWx0aWNhc3QrKzsKKwkJc3RhdHMtPm11bHRpY2FzdCsrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfc2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19zZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBNQUNfQUREUl9ISUdILCBNQUNfQUREUl9MT1cpOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX2dldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIE1BQ19BRERSX0hJR0gsIE1BQ19BRERSX0xPVyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUFI7CisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPIHwKKwkJCSAgIE1BQ19DT05UUk9MX0hQKTsKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BNOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0xPVyk7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewkvKiBubyBtdWx0aWNhc3QgKi8KKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfAorCQkJICAgTUFDX0NPTlRST0xfSE8gfCBNQUNfQ09OVFJPTF9IUCk7CisJfSBlbHNlIHsKKwkJdTMyIG1jX2ZpbHRlclsyXTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKKwkJLyogUGVyZmVjdCBmaWx0ZXIgbW9kZSBmb3IgcGh5c2ljYWwgYWRkcmVzcyBhbmQgSGFzaAorCQkgICBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLworCQl2YWx1ZSB8PSBNQUNfQ09OVFJPTF9IUDsKKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwKKwkJCSAgIE1BQ19DT05UUk9MX0lGIHwgTUFDX0NPTlRST0xfSE8pOworCisJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKKwkJCS8qIFRoZSB1cHBlciA2IGJpdHMgb2YgdGhlIGNhbGN1bGF0ZWQgQ1JDIGFyZSB1c2VkIHRvCisJCQkgKiBpbmRleCB0aGUgY29udGVucyBvZiB0aGUgaGFzaCB0YWJsZSAqLworCQkJaW50IGJpdF9uciA9CisJCQkgICAgZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwkJCS8qIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBkZXRlcm1pbmVzIHRoZSByZWdpc3RlciB0bworCQkJICogdXNlIChIL0wpIHdoaWxlIHRoZSBvdGhlciA1IGJpdHMgZGV0ZXJtaW5lIHRoZSBiaXQKKwkJCSAqIHdpdGhpbiB0aGUgcmVnaXN0ZXIuICovCisJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKKwkJfQorCQl3cml0ZWwobWNfZmlsdGVyWzBdLCBpb2FkZHIgKyBNQUNfSEFTSF9MT1cpOworCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKTsKKwl9CisKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCURCRyhLRVJOX0lORk8gIiVzOiBDVFJMIHJlZzogMHglMDh4IEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsCisJICAgIF9fZnVuY19fLCByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCksCisJICAgIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZjLCB1bnNpZ25lZCBpbnQgcGF1c2VfdGltZSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxvdyA9IE1BQ19GTE9XX0NUUkxfRU5BQkxFOworCisJaWYgKGR1cGxleCkKKwkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBNQUNfRkxPV19DVFJMX1BUX1NISUZUKTsKKwl3cml0ZWwoZmxvdywgaW9hZGRyICsgTUFDX0ZMT1dfQ1RSTCk7CisKKwlyZXR1cm47Cit9CisKKy8qIE5vIFBNVCBtb2R1bGUgc3VwcG9ydGVkIGZvciB0aGlzIEV0aGVybmV0IENvbnRyb2xsZXIuCisgKiBUZXN0ZWQgb24gU1QgcGxhdGZvcm1zIG9ubHkuCisgKi8KK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKKwkJCQlpbnQgZGlzYWJsZV9yeF9pYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEucngub3duID0gMTsKKwkJcC0+ZGVzMDEucnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfMktpQiAtIDE7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5yeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEucnguZGlzYWJsZV9pYyA9IDE7CisJCXArKzsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9pbml0X3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS50eC5vd24gPSAwOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEudHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5vd247Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEucngub3duOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9zZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4Lm93biA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEucngub3duID0gMTsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfdHhfbHMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3JlbGVhc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHRlciA9IHAtPmRlczAxLnR4LmVuZF9yaW5nOworCisJLyogY2xlYW4gZmllbGQgdXNlZCB3aXRoaW4gdGhlIHhtaXQgKi8KKwlwLT5kZXMwMS50eC5maXJzdF9zZWdtZW50ID0gMDsKKwlwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQgPSAwOworCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IDA7CisKKwkvKiBjbGVhbiBzdGF0dXMgcmVwb3J0ZWQgKi8KKwlwLT5kZXMwMS50eC5lcnJvcl9zdW1tYXJ5ID0gMDsKKwlwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IgPSAwOworCXAtPmRlczAxLnR4Lm5vX2NhcnJpZXIgPSAwOworCXAtPmRlczAxLnR4Lmxvc3NfY2FycmllciA9IDA7CisJcC0+ZGVzMDEudHguZXhjZXNzaXZlX2RlZmVycmFsID0gMDsKKwlwLT5kZXMwMS50eC5leGNlc3NpdmVfY29sbGlzaW9ucyA9IDA7CisJcC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24gPSAwOworCXAtPmRlczAxLnR4LmhlYXJ0YmVhdF9mYWlsID0gMDsKKwlwLT5kZXMwMS50eC5kZWZlcnJlZCA9IDA7CisKKwkvKiBzZXQgdGVybWluYXRpb24gZmllbGQgKi8KKwlwLT5kZXMwMS50eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAorCQkJCSAgIGludCBjc3VtX2ZsYWcpCit7CisJcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfY2xlYXJfdHhfaWMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2Nsb3NlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDE7CisJcC0+ZGVzMDEudHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEucnguZnJhbWVfbGVuZ3RoOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzEwMF9vcHMgPSB7CisJLmNvcmVfaW5pdCA9IGR3bWFjMTAwX2NvcmVfaW5pdCwKKwkuZHVtcF9yZWdzID0gZHdtYWMxMDBfZHVtcF9tYWNfcmVncywKKwkuaG9zdF9pcnFfc3RhdHVzID0gZHdtYWMxMDBfaXJxX3N0YXR1cywKKwkuc2V0X2ZpbHRlciA9IGR3bWFjMTAwX3NldF9maWx0ZXIsCisJLmZsb3dfY3RybCA9IGR3bWFjMTAwX2Zsb3dfY3RybCwKKwkucG10ID0gZHdtYWMxMDBfcG10LAorCS5zZXRfdW1hY19hZGRyID0gZHdtYWMxMDBfc2V0X3VtYWNfYWRkciwKKwkuZ2V0X3VtYWNfYWRkciA9IGR3bWFjMTAwX2dldF91bWFjX2FkZHIsCit9OworCitzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHdtYWMxMDBfZG1hX29wcyA9IHsKKwkuaW5pdCA9IGR3bWFjMTAwX2RtYV9pbml0LAorCS5kdW1wX3JlZ3MgPSBkd21hYzEwMF9kdW1wX2RtYV9yZWdzLAorCS5kbWFfbW9kZSA9IGR3bWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBkd21hYzEwMF9kbWFfZGlhZ25vc3RpY19mciwKKwkuZW5hYmxlX2RtYV90cmFuc21pc3Npb24gPSBkd21hY19lbmFibGVfZG1hX3RyYW5zbWlzc2lvbiwKKwkuZW5hYmxlX2RtYV9pcnEgPSBkd21hY19lbmFibGVfZG1hX2lycSwKKwkuZGlzYWJsZV9kbWFfaXJxID0gZHdtYWNfZGlzYWJsZV9kbWFfaXJxLAorCS5zdGFydF90eCA9IGR3bWFjX2RtYV9zdGFydF90eCwKKwkuc3RvcF90eCA9IGR3bWFjX2RtYV9zdG9wX3R4LAorCS5zdGFydF9yeCA9IGR3bWFjX2RtYV9zdGFydF9yeCwKKwkuc3RvcF9yeCA9IGR3bWFjX2RtYV9zdG9wX3J4LAorCS5kbWFfaW50ZXJydXB0ID0gZHdtYWNfZG1hX2ludGVycnVwdCwKK307CisKK3N0cnVjdCBzdG1tYWNfZGVzY19vcHMgZHdtYWMxMDBfZGVzY19vcHMgPSB7CisJLnR4X3N0YXR1cyA9IGR3bWFjMTAwX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IGR3bWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXMsCisJLmdldF90eF9sZW4gPSBkd21hYzEwMF9nZXRfdHhfbGVuLAorCS5pbml0X3J4X2Rlc2MgPSBkd21hYzEwMF9pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IGR3bWFjMTAwX2luaXRfdHhfZGVzYywKKwkuZ2V0X3R4X293bmVyID0gZHdtYWMxMDBfZ2V0X3R4X293bmVyLAorCS5nZXRfcnhfb3duZXIgPSBkd21hYzEwMF9nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IGR3bWFjMTAwX3JlbGVhc2VfdHhfZGVzYywKKwkucHJlcGFyZV90eF9kZXNjID0gZHdtYWMxMDBfcHJlcGFyZV90eF9kZXNjLAorCS5jbGVhcl90eF9pYyA9IGR3bWFjMTAwX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gZHdtYWMxMDBfY2xvc2VfdHhfZGVzYywKKwkuZ2V0X3R4X2xzID0gZHdtYWMxMDBfZ2V0X3R4X2xzLAorCS5zZXRfdHhfb3duZXIgPSBkd21hYzEwMF9zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IGR3bWFjMTAwX3NldF9yeF9vd25lciwKKwkuZ2V0X3J4X2ZyYW1lX2xlbiA9IGR3bWFjMTAwX2dldF9yeF9mcmFtZV9sZW4sCit9OworCitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpkd21hYzEwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisKKwltYWMgPSBremFsbG9jKHNpemVvZihjb25zdCBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlwcl9pbmZvKCJcdERXTUFDMTAwXG4iKTsKKworCW1hYy0+bWFjID0gJmR3bWFjMTAwX29wczsKKwltYWMtPmRlc2MgPSAmZHdtYWMxMDBfZGVzY19vcHM7CisJbWFjLT5kbWEgPSAmZHdtYWMxMDBfZG1hX29wczsKKworCW1hYy0+cG10ID0gUE1UX05PVF9TVVBQT1JURUQ7CisJbWFjLT5saW5rLnBvcnQgPSBNQUNfQ09OVFJPTF9QUzsKKwltYWMtPmxpbmsuZHVwbGV4ID0gTUFDX0NPTlRST0xfRjsKKwltYWMtPmxpbmsuc3BlZWQgPSAwOworCW1hYy0+bWlpLmFkZHIgPSBNQUNfTUlJX0FERFI7CisJbWFjLT5taWkuZGF0YSA9IE1BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMC5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZGNhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNkZWZpbmUgR01BQ19DT05UUk9MCQkweDAwMDAwMDAwCS8qIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVIJMHgwMDAwMDAwNAkvKiBGcmFtZSBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19IQVNIX0hJR0gJCTB4MDAwMDAwMDgJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgSGlnaCAqLworI2RlZmluZSBHTUFDX0hBU0hfTE9XCQkweDAwMDAwMDBjCS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIExvdyAqLworI2RlZmluZSBHTUFDX01JSV9BRERSCQkweDAwMDAwMDEwCS8qIE1JSSBBZGRyZXNzICovCisjZGVmaW5lIEdNQUNfTUlJX0RBVEEJCTB4MDAwMDAwMTQJLyogTUlJIERhdGEgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkwJCTB4MDAwMDAwMTgJLyogRmxvdyBDb250cm9sICovCisjZGVmaW5lIEdNQUNfVkxBTl9UQUcJCTB4MDAwMDAwMWMJLyogVkxBTiBUYWcgKi8KKyNkZWZpbmUgR01BQ19WRVJTSU9OCQkweDAwMDAwMDIwCS8qIEdNQUMgQ09SRSBWZXJzaW9uICovCisjZGVmaW5lIEdNQUNfV0FLRVVQX0ZJTFRFUgkweDAwMDAwMDI4CS8qIFdha2UtdXAgRnJhbWUgRmlsdGVyICovCisKKyNkZWZpbmUgR01BQ19JTlRfU1RBVFVTCQkweDAwMDAwMDM4CS8qIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KK2VudW0gZHdtYWMxMDAwX2lycV9zdGF0dXMgeworCXRpbWVfc3RhbXBfaXJxID0gMHgwMjAwLAorCW1tY19yeF9jc3VtX29mZmxvYWRfaXJxID0gMHgwMDgwLAorCW1tY190eF9pcnEgPSAweDAwNDAsCisJbW1jX3J4X2lycSA9IDB4MDAyMCwKKwltbWNfaXJxID0gMHgwMDEwLAorCXBtdF9pcnEgPSAweDAwMDgsCisJcGNzX2FuZV9pcnEgPSAweDAwMDQsCisJcGNzX2xpbmtfaXJxID0gMHgwMDAyLAorCXJnbWlpX2lycSA9IDB4MDAwMSwKK307CisjZGVmaW5lIEdNQUNfSU5UX01BU0sJCTB4MDAwMDAwM2MJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKworLyogUE1UIENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBHTUFDX1BNVAkJMHgwMDAwMDAyYworZW51bSBwb3dlcl9ldmVudCB7CisJcG9pbnRlcl9yZXNldCA9IDB4ODAwMDAwMDAsCisJZ2xvYmFsX3VuaWNhc3QgPSAweDAwMDAwMjAwLAorCXdha2VfdXBfcnhfZnJhbWUgPSAweDAwMDAwMDQwLAorCW1hZ2ljX2ZyYW1lID0gMHgwMDAwMDAyMCwKKwl3YWtlX3VwX2ZyYW1lX2VuID0gMHgwMDAwMDAwNCwKKwltYWdpY19wa3RfZW4gPSAweDAwMDAwMDAyLAorCXBvd2VyX2Rvd24gPSAweDAwMDAwMDAxLAorfTsKKworLyogR01BQyBIVyBBRERSIHJlZ3MgKi8KKyNkZWZpbmUgR01BQ19BRERSX0hJR0gocmVnKQkJKDB4MDAwMDAwNDArKHJlZyAqIDgpKQorI2RlZmluZSBHTUFDX0FERFJfTE9XKHJlZykJCSgweDAwMDAwMDQ0KyhyZWcgKiA4KSkKKyNkZWZpbmUgR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMJMTYKKworI2RlZmluZSBHTUFDX0FOX0NUUkwJMHgwMDAwMDBjMAkvKiBBTiBjb250cm9sICovCisjZGVmaW5lIEdNQUNfQU5fU1RBVFVTCTB4MDAwMDAwYzQJLyogQU4gc3RhdHVzICovCisjZGVmaW5lIEdNQUNfQU5FX0FEVgkweDAwMDAwMGM4CS8qIEF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCisjZGVmaW5lIEdNQUNfQU5FX0xJTksJMHgwMDAwMDBjYwkvKiBBdXRvLU5lZy4gbGluayBwYXJ0ZW5lciBhYmlsaXR5ICovCisjZGVmaW5lIEdNQUNfQU5FX0VYUAkweDAwMDAwMGQwCS8qIEFORSBleHBhbnNpb24gKi8KKyNkZWZpbmUgR01BQ19UQkkJMHgwMDAwMDBkNAkvKiBUQkkgZXh0ZW5kIHN0YXR1cyAqLworI2RlZmluZSBHTUFDX0dNSUlfU1RBVFVTIDB4MDAwMDAwZDgJLyogUy9SLUdNSUkgc3RhdHVzICovCisKKy8qIEdNQUMgQ29uZmlndXJhdGlvbiBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9UQwkweDAxMDAwMDAwCS8qIFRyYW5zbWl0IENvbmYuIGluIFJHTUlJL1NHTUlJICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9XRAkweDAwODAwMDAwCS8qIERpc2FibGUgV2F0Y2hkb2cgb24gcmVjZWl2ZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSkQJMHgwMDQwMDAwMAkvKiBKYWJiZXIgZGlzYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfQkUJMHgwMDIwMDAwMAkvKiBGcmFtZSBCdXJzdCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0pFCTB4MDAxMDAwMDAJLyogSnVtYm8gZnJhbWUgKi8KK2VudW0gaW50ZXJfZnJhbWVfZ2FwIHsKKwlHTUFDX0NPTlRST0xfSUZHXzg4ID0gMHgwMDA0MDAwMCwKKwlHTUFDX0NPTlRST0xfSUZHXzgwID0gMHgwMDAyMDAwMCwKKwlHTUFDX0NPTlRST0xfSUZHXzQwID0gMHgwMDBlMDAwMCwKK307CisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EQ1JTCTB4MDAwMTAwMDAgLyogRGlzYWJsZSBjYXJyaWVyIHNlbnNlIGR1cmluZyB0eCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfUFMJCTB4MDAwMDgwMDAgLyogUG9ydCBTZWxlY3QgMDpHTUkgMTpNSUkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0ZFUwkweDAwMDA0MDAwIC8qIFNwZWVkIDA6MTAgMToxMDAgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RPCQkweDAwMDAyMDAwIC8qIERpc2FibGUgUnggT3duICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9MTQkJMHgwMDAwMTAwMCAvKiBMb29wLWJhY2sgbW9kZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRE0JCTB4MDAwMDA4MDAgLyogRHVwbGV4IE1vZGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0lQQwkweDAwMDAwNDAwIC8qIENoZWNrc3VtIE9mZmxvYWQgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RSCQkweDAwMDAwMjAwIC8qIERpc2FibGUgUmV0cnkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0xVRAkweDAwMDAwMTAwIC8qIExpbmsgdXAvZG93biAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RDCQkweDAwMDAwMDEwIC8qIERlZmVycmFsIENoZWNrICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOCAvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0IC8qIFJlY2VpdmVyIEVuYWJsZSAqLworCisjZGVmaW5lIEdNQUNfQ09SRV9JTklUIChHTUFDX0NPTlRST0xfSkQgfCBHTUFDX0NPTlRST0xfUFMgfCBHTUFDX0NPTlRST0xfQUNTIHwgXAorCQkJR01BQ19DT05UUk9MX0lQQyB8IEdNQUNfQ09OVFJPTF9KRSB8IEdNQUNfQ09OVFJPTF9CRSkKKworLyogR01BQyBGcmFtZSBGaWx0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUgkweDAwMDAwMDAxCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFVDCTB4MDAwMDAwMDIJLyogSGFzaCBVbmljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hNQwkweDAwMDAwMDA0CS8qIEhhc2ggTXVsdGljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RBSUYJMHgwMDAwMDAwOAkvKiBEQSBJbnZlcnNlIEZpbHRlcmluZyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTQkweDAwMDAwMDEwCS8qIFBhc3MgYWxsIG11bHRpY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQkYJMHgwMDAwMDAyMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBmcmFtZXMgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FJRgkweDAwMDAwMTAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBRgkweDAwMDAwMjAwCS8qIFNvdXJjZSBBZGRyZXNzIEZpbHRlciAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IUEYJMHgwMDAwMDQwMAkvKiBIYXNoIG9yIHBlcmZlY3QgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBhbGwgbW9kZSAqLworLyogR01JSSBBRERSICBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KKy8qIEdNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgorI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9SRkUJMHgwMDAwMDAwNAkvKiBSeCBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1RGRQkweDAwMDAwMDAyCS8qIFR4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfRkNCX0JQQQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLworCisvKi0tLSBETUEgQkxPQ0sgZGVmaW5lcyAtLS0qLworLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EQQkJMHgwMDAwMDAwMgkvKiBBcmJpdHJhdGlvbiBzY2hlbWUgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLworI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCisvKiBQcm9ncmFtbWFibGUgYnVyc3QgbGVuZ3RoIChwYXNzZWQgdGhvcnVnaCBwbGF0Zm9ybSkqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAorCitlbnVtIHJ4X3R4X3ByaW9yaXR5X3JhdGlvIHsKKwlkb3VibGVfcmF0aW8gPSAweDAwMDA0MDAwLAkvKjI6MSAqLworCXRyaXBsZV9yYXRpbyA9IDB4MDAwMDgwMDAsCS8qMzoxICovCisJcXVhZHJ1cGxlX3JhdGlvID0gMHgwMDAwYzAwMCwJLyo0OjEgKi8KK307CisKKyNkZWZpbmUgRE1BX0JVU19NT0RFX0ZCCQkweDAwMDEwMDAwCS8qIEZpeGVkIGJ1cnN0ICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX01BU0sJMHgwMDNlMDAwMAkvKiBSeC1Qcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX1NISUZUCTE3CisjZGVmaW5lIERNQV9CVVNfTU9ERV9VU1AJMHgwMDgwMDAwMAorI2RlZmluZSBETUFfQlVTX01PREVfNFBCTAkweDAxMDAwMDAwCisjZGVmaW5lIERNQV9CVVNfTU9ERV9BQUwJMHgwMjAwMDAwMAorCisvKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCisjZGVmaW5lIERNQV9IT1NUX1RYX0RFU0MJICAweDAwMDAxMDQ4CS8qIEN1cnJlbnQgSG9zdCBUeCBkZXNjcmlwdG9yICovCisjZGVmaW5lIERNQV9IT1NUX1JYX0RFU0MJICAweDAwMDAxMDRjCS8qIEN1cnJlbnQgSG9zdCBSeCBkZXNjcmlwdG9yICovCisvKiAgRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19NQVNLCSAgMHgwMDAwYzAwMAkvKiBSeC9UeCBwcmlvcml0eSByYXRpbyAqLworI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX1NISUZUCSAgMTQKKyNkZWZpbmUgRE1BX0JVU19GQgkgIAkgIDB4MDAwMTAwMDAJLyogRml4ZWQgQnVyc3QgKi8KKworLyogRE1BIG9wZXJhdGlvbiBtb2RlIGRlZmluZXMgKHN0YXJ0L3N0b3AgdHgvcnggYXJlIHBsYWNlZCBpbiBjb21tb24gaGVhZGVyKSovCisjZGVmaW5lIERNQV9DT05UUk9MX0RUCQkweDA0MDAwMDAwIC8qIERpc2FibGUgRHJvcCBUQ1AvSVAgY3N1bSBlcnJvciAqLworI2RlZmluZSBETUFfQ09OVFJPTF9SU0YJCTB4MDIwMDAwMDAgLyogUmVjZWl2ZSBTdG9yZSBhbmQgRm9yd2FyZCAqLworI2RlZmluZSBETUFfQ09OVFJPTF9ERkYJCTB4MDEwMDAwMDAgLyogRGlzYWFibGUgZmx1c2hpbmcgKi8KKy8qIFRocmVzaG9sZCBmb3IgQWN0aXZhdGluZyB0aGUgRkMgKi8KK2VudW0gcmZhIHsKKwlhY3RfZnVsbF9taW51c18xID0gMHgwMDgwMDAwMCwKKwlhY3RfZnVsbF9taW51c18yID0gMHgwMDgwMDIwMCwKKwlhY3RfZnVsbF9taW51c18zID0gMHgwMDgwMDQwMCwKKwlhY3RfZnVsbF9taW51c180ID0gMHgwMDgwMDYwMCwKK307CisvKiBUaHJlc2hvbGQgZm9yIERlYWN0aXZhdGluZyB0aGUgRkMgKi8KK2VudW0gcmZkIHsKKwlkZWFjX2Z1bGxfbWludXNfMSA9IDB4MDA0MDAwMDAsCisJZGVhY19mdWxsX21pbnVzXzIgPSAweDAwNDAwODAwLAorCWRlYWNfZnVsbF9taW51c18zID0gMHgwMDQwMTAwMCwKKwlkZWFjX2Z1bGxfbWludXNfNCA9IDB4MDA0MDE4MDAsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UU0YJCTB4MDAyMDAwMDAgLyogVHJhbnNtaXQgIFN0b3JlIGFuZCBGb3J3YXJkICovCisjZGVmaW5lIERNQV9DT05UUk9MX0ZURgkJMHgwMDEwMDAwMCAvKiBGbHVzaCB0cmFuc21pdCBGSUZPICovCisKK2VudW0gdHRjX2NvbnRyb2wgeworCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDAwMDAsCisJRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDQwMDAsCisJRE1BX0NPTlRST0xfVFRDXzE5MiA9IDB4MDAwMDgwMDAsCisJRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCisJRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDAxMDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwMDE0MDAwLAorCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDAwMTgwMDAsCisJRE1BX0NPTlRST0xfVFRDXzE2ID0gMHgwMDAxYzAwMCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RDX1RYX01BU0sJMHhmZmZlM2ZmZgorCisjZGVmaW5lIERNQV9DT05UUk9MX0VGQwkJMHgwMDAwMDEwMAorI2RlZmluZSBETUFfQ09OVFJPTF9GRUYJCTB4MDAwMDAwODAKKyNkZWZpbmUgRE1BX0NPTlRST0xfRlVGCQkweDAwMDAwMDQwCisKK2VudW0gcnRjX2NvbnRyb2wgeworCURNQV9DT05UUk9MX1JUQ182NCA9IDB4MDAwMDAwMDAsCisJRE1BX0NPTlRST0xfUlRDXzMyID0gMHgwMDAwMDAwOCwKKwlETUFfQ09OVFJPTF9SVENfOTYgPSAweDAwMDAwMDEwLAorCURNQV9DT05UUk9MX1JUQ18xMjggPSAweDAwMDAwMDE4LAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVENfUlhfTUFTSwkweGZmZmZmZmU3CisKKyNkZWZpbmUgRE1BX0NPTlRST0xfT1NGCTB4MDAwMDAwMDQJLyogT3BlcmF0ZSBvbiBzZWNvbmQgZnJhbWUgKi8KKworLyogTU1DIHJlZ2lzdGVycyBvZmZzZXQgKi8KKyNkZWZpbmUgR01BQ19NTUNfQ1RSTCAgICAgIDB4MTAwCisjZGVmaW5lIEdNQUNfTU1DX1JYX0lOVFIgICAweDEwNAorI2RlZmluZSBHTUFDX01NQ19UWF9JTlRSICAgMHgxMDgKKyNkZWZpbmUgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEICAgMHgyMDgKKworI3VuZGVmIERXTUFDMTAwMF9ERUJVRworLyogI2RlZmluZSBEV01BQzEwMDBfX0RFQlVHICovCisjdW5kZWYgRlJBTUVfRklMVEVSX0RFQlVHCisvKiAjZGVmaW5lIEZSQU1FX0ZJTFRFUl9ERUJVRyAqLworI2lmZGVmIERXTUFDMTAwMF9fREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHdtYWMxMDAwX2RtYV9vcHM7CitleHRlcm4gc3RydWN0IHN0bW1hY19kZXNjX29wcyBkd21hYzEwMDBfZGVzY19vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDBfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTM4YWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEdNQUMgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyIGZvciBTVCBTb0NzLgorICBEV0MgRXRoZXIgTUFDIDEwLzEwMC8xMDAwIFVuaXZlcnNhbCB2ZXJzaW9uIDMuNDFhICBoYXMgYmVlbiB1c2VkIGZvcgorICBkZXZlbG9waW5nIHRoaXMgY29kZS4KKworICBUaGlzIG9ubHkgaW1wbGVtZW50cyB0aGUgbWFjIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIGNoaXAuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgImR3bWFjMTAwMC5oIgorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfY29yZV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIEdNQUNfQ09OVFJPTCk7CisJdmFsdWUgfD0gR01BQ19DT1JFX0lOSVQ7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0NPTlRST0wpOworCisJLyogU1RCdXMgQnJpZGdlIENvbmZpZ3VyYXRpb24gKi8KKwkvKndyaXRlbCgweGM1NjA4LCBpb2FkZHIgKyAweDAwMDA3MDAwKTsqLworCisJLyogRnJlZXplIE1NQyBjb3VudGVycyAqLworCXdyaXRlbCgweDgsIGlvYWRkciArIEdNQUNfTU1DX0NUUkwpOworCS8qIE1hc2sgR01BQyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MjA3LCBpb2FkZHIgKyBHTUFDX0lOVF9NQVNLKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJLyogVGFnIGRldGVjdGlvbiB3aXRob3V0IGZpbHRlcmluZyAqLworCXdyaXRlbCgweDAsIGlvYWRkciArIEdNQUNfVkxBTl9UQUcpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZHVtcF9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIlx0RFdNQUMxMDAwIHJlZ3MgKGJhc2UgYWRkciA9IDB4JTh4KVxuIiwgKHVuc2lnbmVkIGludClpb2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IDU1OyBpKyspIHsKKwkJaW50IG9mZnNldCA9IGkgKiA0OworCQlwcl9pbmZvKCJcdFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAorCQkJb2Zmc2V0LCByZWFkbChpb2FkZHIgKyBvZmZzZXQpKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfc2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX3NldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIEdNQUNfQUREUl9ISUdIKHJlZ19uKSwKKwkJCQlHTUFDX0FERFJfTE9XKHJlZ19uKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAorCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKwlEQkcoS0VSTl9JTkZPICIlczogIyBtY2FzdHMgJWQsICMgdW5pY2FzdCAlZFxuIiwKKwkgICAgX19mdW5jX18sIG5ldGRldl9tY19jb3VudChkZXYpLCBuZXRkZXZfdWNfY291bnQoZGV2KSk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BSOworCWVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUE07CS8qIHBhc3MgYWxsIG11bHRpICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQl1MzIgbWNfZmlsdGVyWzJdOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKworCQkvKiBIYXNoIGZpbHRlciBmb3IgbXVsdGljYXN0ICovCisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfSE1DOworCisJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKKwkJCS8qIFRoZSB1cHBlciA2IGJpdHMgb2YgdGhlIGNhbGN1bGF0ZWQgQ1JDIGFyZSB1c2VkIHRvCisJCQkgICBpbmRleCB0aGUgY29udGVucyBvZiB0aGUgaGFzaCB0YWJsZSAqLworCQkJaW50IGJpdF9uciA9CisJCQkgICAgYml0cmV2MzIofmNyYzMyX2xlKH4wLCBtY2xpc3QtPmRtaV9hZGRyLCA2KSkgPj4gMjY7CisJCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KKwkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0CisJCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCX0KKwkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7CisJCXdyaXRlbChtY19maWx0ZXJbMV0sIGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKTsKKwl9CisKKwkvKiBIYW5kbGUgbXVsdGlwbGUgdW5pY2FzdCBhZGRyZXNzZXMgKHBlcmZlY3QgZmlsdGVyaW5nKSovCisJaWYgKG5ldGRldl91Y19jb3VudChkZXYpID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCisJCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycworCQkgICBhcmUgcmVxdWlyZWQgKi8KKwkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSB7CisJCWludCByZWcgPSAxOworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKKwkJCWR3bWFjMTAwMF9zZXRfdW1hY19hZGRyKGlvYWRkciwgaGEtPmFkZHIsIHJlZyk7CisJCQlyZWcrKzsKKwkJfQorCX0KKworI2lmZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworCS8qIEVuYWJsZSBSZWNlaXZlIGFsbCBtb2RlICh0byBkZWJ1ZyBmaWx0ZXJpbmdfZmFpbCBlcnJvcnMpICovCisJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUkE7CisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKTsKKworCURCRyhLRVJOX0lORk8gIlx0RnJhbWUgRmlsdGVyIHJlZzogMHglMDh4XG5cdEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsIHJlYWRsKGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gMDsKKworCURCRyhLRVJOX0RFQlVHICJHTUFDIEZsb3ctQ29udHJvbDpcbiIpOworCWlmIChmYyAmIEZMT1dfUlgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0UmVjZWl2ZSBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1JGRTsKKwl9CisJaWYgKGZjICYgRkxPV19UWCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRUcmFuc21pdCBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1RGRTsKKwl9CisKKwlpZiAoZHVwbGV4KSB7CisJCURCRyhLRVJOX0RFQlVHICJcdGR1cGxleCBtb2RlOiBwYXVzZSB0aW1lOiAlZFxuIiwgcGF1c2VfdGltZSk7CisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCX0KKworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBHTUFDX0ZMT1dfQ1RSTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJdW5zaWduZWQgaW50IHBtdCA9IDA7CisKKwlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOworCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKKwkJcG10IHw9IGdsb2JhbF91bmljYXN0OworCX0KKworCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKKworCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLworCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOworCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKKwkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7CisJfQorCisJcmV0dXJuOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzEwMDBfb3BzID0geworCS5jb3JlX2luaXQgPSBkd21hYzEwMDBfY29yZV9pbml0LAorCS5kdW1wX3JlZ3MgPSBkd21hYzEwMDBfZHVtcF9yZWdzLAorCS5ob3N0X2lycV9zdGF0dXMgPSBkd21hYzEwMDBfaXJxX3N0YXR1cywKKwkuc2V0X2ZpbHRlciA9IGR3bWFjMTAwMF9zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBkd21hYzEwMDBfZmxvd19jdHJsLAorCS5wbXQgPSBkd21hYzEwMDBfcG10LAorCS5zZXRfdW1hY19hZGRyID0gZHdtYWMxMDAwX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBkd21hYzEwMDBfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisJdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7CisKKwlwcl9pbmZvKCJcdERXTUFDMTAwMCAtIHVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XG4iLAorCQkoKHVpZCAmIDB4MDAwMGZmMDApID4+IDgpLCAodWlkICYgMHgwMDAwMDBmZikpOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJbWFjLT5tYWMgPSAmZHdtYWMxMDAwX29wczsKKwltYWMtPmRlc2MgPSAmZHdtYWMxMDAwX2Rlc2Nfb3BzOworCW1hYy0+ZG1hID0gJmR3bWFjMTAwMF9kbWFfb3BzOworCisJbWFjLT5wbXQgPSBQTVRfU1VQUE9SVEVEOworCW1hYy0+bGluay5wb3J0ID0gR01BQ19DT05UUk9MX1BTOworCW1hYy0+bGluay5kdXBsZXggPSBHTUFDX0NPTlRST0xfRE07CisJbWFjLT5saW5rLnNwZWVkID0gR01BQ19DT05UUk9MX0ZFUzsKKwltYWMtPm1paS5hZGRyID0gR01BQ19NSUlfQUREUjsKKwltYWMtPm1paS5kYXRhID0gR01BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2RtYS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ0MzZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgR01BQyBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIgZm9yIFNUIFNvQ3MuCisgIERXQyBFdGhlciBNQUMgMTAvMTAwLzEwMDAgVW5pdmVyc2FsIHZlcnNpb24gMy40MWEgIGhhcyBiZWVuIHVzZWQgZm9yCisgIGRldmVsb3BpbmcgdGhpcyBjb2RlLgorCisgIFRoaXMgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGRtYSBhbmQgZGVzY3JpcHRvcnMuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkd21hYzEwMDAuaCIKKyNpbmNsdWRlICJkd21hY19kbWEuaCIKKworc3RhdGljIGludCBkd21hYzEwMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICAgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJdmFsdWUgPSAvKiBETUFfQlVTX01PREVfRkIgfCAqLyBETUFfQlVTX01PREVfNFBCTCB8CisJICAgICgocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpIHwKKwkgICAgIChwYmwgPDwgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQpKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfREEKKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfREE7CS8qIFJ4IGhhcyBwcmlvcml0eSBvdmVyIHR4ICovCisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisKKwkvKiBNYXNrIGludGVycnVwdHMgYnkgd3JpdGluZyB0byBDU1I3ICovCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKworCS8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJYL1RYIGRlc2NyaXB0b3IgbGlzdHMgbXVzdCBiZSB3cml0dGVuIGludG8KKwkgKiBETUEgQ1NSMyBhbmQgQ1NSNCwgcmVzcGVjdGl2ZWx5LiAqLworCXdyaXRlbChkbWFfdHgsIGlvYWRkciArIERNQV9UWF9CQVNFX0FERFIpOworCXdyaXRlbChkbWFfcngsIGlvYWRkciArIERNQV9SQ1ZfQkFTRV9BRERSKTsKKworCXJldHVybiAwOworfQorCisvKiBUcmFuc21pdCBGSUZPIGZsdXNoIG9wZXJhdGlvbiAqLworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2ZsdXNoX3R4X2ZpZm8odW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJd3JpdGVsKChjc3I2IHwgRE1BX0NPTlRST0xfRlRGKSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCkgJiBETUFfQ09OVFJPTF9GVEYpKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKKwkJCQkgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOworCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOworCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQorCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLworCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKKwl9IGVsc2UgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCisJCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7CisJCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKKwkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOworCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLworCQlpZiAodHhtb2RlIDw9IDMyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7CisJfQorCisJaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7CisJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOworCX0gZWxzZSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKKwkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKKwkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOworCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7CisJCWlmIChyeG1vZGUgPD0gMzIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKKwkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7CisJCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7CisJfQorCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwKKwkJICBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIiBETUEgcmVnaXN0ZXJzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykgeworCQlpZiAoKGkgPCA5KSB8fCAoaSA+IDE3KSkgeworCQkJaW50IG9mZnNldCA9IGkgKiA0OworCQkJcHJfZXJyKCJcdCBSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJCSAgICAgICAoRE1BX0JVU19NT0RFICsgb2Zmc2V0KSwKKwkJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBvZmZzZXQpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCXN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFRYIGVycm9yLi4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXR4KTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5qYWJiZXJfdGltZW91dCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRqYWJiZXJfdGltZW91dCBlcnJvclxuIik7CisJCQl4LT50eF9qYWJiZXIrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZnJhbWVfZmx1c2hlZCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRmcmFtZV9mbHVzaGVkIGVycm9yXG4iKTsKKwkJCXgtPnR4X2ZyYW1lX2ZsdXNoZWQrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKKwkJCXgtPnR4X2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7CisJCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7CisJCQl4LT50eF9kZWZlcnJlZCsrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguaXBfaGVhZGVyX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdFRYIElQIGhlYWRlciBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X2lwX2hlYWRlcl9lcnJvcisrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5wYXlsb2FkX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdEFkZHIvUGF5bG9hZCBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X3BheWxvYWRfZXJyb3IrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlyZXQgPSAtMTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmRlZmVycmVkKSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogdHggZGVmZXJyZWRcbiIpOworCQl4LT50eF9kZWZlcnJlZCsrOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5ldHgudmxhbl9mcmFtZSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogVkxBTiBmcmFtZVxuIik7CisJCXgtPnR4X3ZsYW4rKzsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9jb2VfcmRlczAoaW50IGlwY19lcnIsIGludCB0eXBlLCBpbnQgcGF5bG9hZF9lcnIpCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJdTMyIHN0YXR1cyA9ICh0eXBlIDw8IDIgfCBpcGNfZXJyIDw8IDEgfCBwYXlsb2FkX2VycikgJiAweDc7CisKKwkvKiBiaXRzIDUgNyAwIHwgRnJhbWUgc3RhdHVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgMCAwIDAgfCBJRUVFIDgwMi4zIFR5cGUgZnJhbWUgKGxlbmd0aCA8IDE1MzYgb2N0ZWN0cykKKwkgKiAgICAgIDEgMCAwIHwgSVB2NC82IE5vIENTVU0gZXJyb3JTLgorCSAqICAgICAgMSAwIDEgfCBJUHY0LzYgQ1NVTSBQQVlMT0FEIGVycm9yCisJICogICAgICAxIDEgMCB8IElQdjQvNiBDU1VNIElQIEhSIGVycm9yCisJICogICAgICAxIDEgMSB8IElQdjQvNiBJUCBQQVlMT0FEIEFORCBIRUFERVIgZXJyb3JTCisJICogICAgICAwIDAgMSB8IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FECisJICogICAgICAwIDEgMSB8IENPRSBieXBhc3NlZC4uIG5vIElQdjQvNiBmcmFtZQorCSAqICAgICAgMCAxIDAgfCBSZXNlcnZlZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IDB4MCkgeworCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSUVFRSA4MDIuMyBUeXBlIGZyYW1lLlxuIik7CisJCXJldCA9IGdvb2RfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg0KSB7CisJCURCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuXG4iKTsKKwkJcmV0ID0gZ29vZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDUpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NikgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDcpIHsKKwkJREJHKEtFUk5fRVJSCisJCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBIZWFkZXIgYW5kIFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4MSkgeworCQlEQkcoS0VSTl9FUlIKKwkJICAgICJSWCBEZXMwIHN0YXR1czogSVB2NC82IHVuc3VwcG9ydGVkIElQIFBBWUxPQUQuXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDMpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogTm8gSVB2NCwgSVB2NiBmcmFtZS5cbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIEVycm9yIFN1bW1hcnkuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5lcngpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRlc2NyaXB0b3JfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZGVzY3JpcHRvciBlcnJvclxuIik7CisJCQl4LT5yeF9kZXNjKys7CisJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngub3ZlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0b3ZlcmZsb3cgZXJyb3JcbiIpOworCQkJeC0+cnhfZ21hY19vdmVyZmxvdysrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvcikpCisJCQlEQkcoS0VSTl9FUlIgIlx0SVBDIENzdW0gRXJyb3IvR2lhbnQgZnJhbWVcbiIpOworCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5yZWNlaXZlX3dhdGNoZG9nKSkgeworCQkJREJHKEtFUk5fRVJSICJcdHJlY2VpdmVfd2F0Y2hkb2cgZXJyb3JcbiIpOworCQkJeC0+cnhfd2F0Y2hkb2crKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX2dtaWkpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0UmVjZWl2ZSBFcnJvclxuIik7CisJCQl4LT5yeF9taWkrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmNyY19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRDUkMgZXJyb3JcbiIpOworCQkJeC0+cnhfY3JjKys7CisJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQl9CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCisJLyogQWZ0ZXIgYSBwYXlsb2FkIGNzdW0gZXJyb3IsIHRoZSBFUyBiaXQgaXMgc2V0LgorCSAqIEl0IGRvZXNuJ3QgbWF0Y2ggd2l0aCB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgaW50byB0aGUgZGF0YWJvb2suCisJICogQXQgYW55IHJhdGUsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgQ1NVTSBodyBjb21wdXRhdGlvbiBpcyBvaworCSAqIGFuZCByZXBvcnQgdGhpcyBpbmZvIHRvIHRoZSB1cHBlciBsYXllcnMuICovCisJcmV0ID0gZHdtYWMxMDAwX2NvZV9yZGVzMChwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IsCisJCXAtPmRlczAxLmVyeC5mcmFtZV90eXBlLCBwLT5kZXMwMS5lcngucGF5bG9hZF9jc3VtX2Vycm9yKTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZHJpYmJsaW5nKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGRyaWJibGluZyBlcnJvclxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguc2FfZmlsdGVyX2ZhaWwpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCA6IFNvdXJjZSBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKKwkJeC0+c2FfcnhfZmlsdGVyX2ZhaWwrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kYV9maWx0ZXJfZmFpbCkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogRGVzdGluYXRpb24gQWRkcmVzcyBmaWx0ZXIgZmFpbFxuIik7CisJCXgtPmRhX3J4X2ZpbHRlcl9mYWlsKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGVuZ3RoX2Vycm9yKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGxlbmd0aF9lcnJvciBlcnJvclxuIik7CisJCXgtPnJ4X2xlbmd0aCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5lcngudmxhbl90YWcpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBSWDogVkxBTiBmcmFtZSB0YWdnZWRcbiIpOworCQl4LT5yeF92bGFuKys7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLmVyeC5vd24gPSAxOworCQlwLT5kZXMwMS5lcnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfOEtpQiAtIDE7CisJCS8qIFRvIHN1cHBvcnQganVtYm8gZnJhbWVzICovCisJCXAtPmRlczAxLmVyeC5idWZmZXIyX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLmVyeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEuZXJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHgub3duOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5lcngub3duOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOworCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS5ldHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCWlmICh1bmxpa2VseShsZW4gPiBCVUZfU0laRV80S2lCKSkgeworCQlwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfNEtpQjsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjJfc2l6ZSA9IGxlbiAtIEJVRl9TSVpFXzRLaUI7CisJfSBlbHNlIHsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKKwl9CisJaWYgKGxpa2VseShjc3VtX2ZsYWcpKQorCQlwLT5kZXMwMS5ldHguY2hlY2tzdW1faW5zZXJ0aW9uID0gY2ljX2Z1bGw7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmVyeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfZG1hX29wcyBkd21hYzEwMDBfZG1hX29wcyA9IHsKKwkuaW5pdCA9IGR3bWFjMTAwMF9kbWFfaW5pdCwKKwkuZHVtcF9yZWdzID0gZHdtYWMxMDAwX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIsCisJLmVuYWJsZV9kbWFfdHJhbnNtaXNzaW9uID0gZHdtYWNfZW5hYmxlX2RtYV90cmFuc21pc3Npb24sCisJLmVuYWJsZV9kbWFfaXJxID0gZHdtYWNfZW5hYmxlX2RtYV9pcnEsCisJLmRpc2FibGVfZG1hX2lycSA9IGR3bWFjX2Rpc2FibGVfZG1hX2lycSwKKwkuc3RhcnRfdHggPSBkd21hY19kbWFfc3RhcnRfdHgsCisJLnN0b3BfdHggPSBkd21hY19kbWFfc3RvcF90eCwKKwkuc3RhcnRfcnggPSBkd21hY19kbWFfc3RhcnRfcngsCisJLnN0b3BfcnggPSBkd21hY19kbWFfc3RvcF9yeCwKKwkuZG1hX2ludGVycnVwdCA9IGR3bWFjX2RtYV9pbnRlcnJ1cHQsCit9OworCitzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3bWFjMTAwMF9kZXNjX29wcyA9IHsKKwkudHhfc3RhdHVzID0gZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gZHdtYWMxMDAwX2dldF90eF9sZW4sCisJLmluaXRfcnhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IGR3bWFjMTAwMF9wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gZHdtYWMxMDAwX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gZHdtYWMxMDAwX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IGR3bWFjMTAwMF9nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IGR3bWFjMTAwMF9zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IGR3bWFjMTAwMF9zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4NDhkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19kbWEuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgRFdNQUMgRE1BIEhlYWRlciBmaWxlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCisjZGVmaW5lIERNQV9CVVNfTU9ERQkJMHgwMDAwMTAwMAkvKiBCdXMgTW9kZSAqLworI2RlZmluZSBETUFfWE1UX1BPTExfREVNQU5ECTB4MDAwMDEwMDQJLyogVHJhbnNtaXQgUG9sbCBEZW1hbmQgKi8KKyNkZWZpbmUgRE1BX1JDVl9QT0xMX0RFTUFORAkweDAwMDAxMDA4CS8qIFJlY2VpdmVkIFBvbGwgRGVtYW5kICovCisjZGVmaW5lIERNQV9SQ1ZfQkFTRV9BRERSCTB4MDAwMDEwMGMJLyogUmVjZWl2ZSBMaXN0IEJhc2UgKi8KKyNkZWZpbmUgRE1BX1RYX0JBU0VfQUREUgkweDAwMDAxMDEwCS8qIFRyYW5zbWl0IExpc3QgQmFzZSAqLworI2RlZmluZSBETUFfU1RBVFVTCQkweDAwMDAxMDE0CS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ09OVFJPTAkJMHgwMDAwMTAxOAkvKiBDdHJsIChPcGVyYXRpb25hbCBNb2RlKSAqLworI2RlZmluZSBETUFfSU5UUl9FTkEJCTB4MDAwMDEwMWMJLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX0NUUgkweDAwMDAxMDIwCS8qIE1pc3NlZCBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIERNQV9DVVJfVFhfQlVGX0FERFIJMHgwMDAwMTA1MAkvKiBDdXJyZW50IEhvc3QgVHggQnVmZmVyICovCisjZGVmaW5lIERNQV9DVVJfUlhfQlVGX0FERFIJMHgwMDAwMTA1NAkvKiBDdXJyZW50IEhvc3QgUnggQnVmZmVyICovCisKKy8qIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1QJCTB4MDAwMDIwMDAJLyogU3RhcnQvU3RvcCBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1IJCTB4MDAwMDAwMDIJLyogU3RhcnQvU3RvcCBSZWNlaXZlICovCisKKy8qIERNQSBOb3JtYWwgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9OSUUgMHgwMDAxMDAwMAkvKiBOb3JtYWwgU3VtbWFyeSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVElFIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UVUUgMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JJRSAweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9FUkUgMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlICovCisKKyNkZWZpbmUgRE1BX0lOVFJfTk9STUFMCShETUFfSU5UUl9FTkFfTklFIHwgRE1BX0lOVFJfRU5BX1JJRSB8IFwKKwkJCURNQV9JTlRSX0VOQV9USUUpCisKKy8qIERNQSBBYm5vcm1hbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCisKKyNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAorCQkJCURNQV9JTlRSX0VOQV9VTkUpCisKKy8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCisKKy8qIERNQSBTdGF0dXMgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfU1RBVFVTX0dQSQkJMHgxMDAwMDAwMAkvKiBQTVQgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfR01JCQkweDA4MDAwMDAwCS8qIE1NQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAJLyogR01BQyBMaW5lIGludGVyZmFjZSBpbnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKKyNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLworI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfdHJhbnNtaXNzaW9uKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfaXJxKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2Rpc2FibGVfZG1hX2lycSh1bnNpZ25lZCBsb25nIGlvYWRkcik7CitleHRlcm4gdm9pZCBkd21hY19kbWFfc3RhcnRfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiBpbnQgZHdtYWNfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZHdtYWNfZG1hLmgiCisKKyN1bmRlZiBEV01BQ19ETUFfREVCVUcKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLwordm9pZCBkd21hY19lbmFibGVfZG1hX3RyYW5zbWlzc2lvbih1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl3cml0ZWwoMSwgaW9hZGRyICsgRE1BX1hNVF9QT0xMX0RFTUFORCk7Cit9CisKK3ZvaWQgZHdtYWNfZW5hYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKK30KKwordm9pZCBkd21hY19kaXNhYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKDAsIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXZhbHVlICY9IH5ETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKwordm9pZCBkd21hY19kbWFfc3RvcF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NSOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCisjaWZkZWYgRFdNQUNfRE1BX0RFQlVHCitzdGF0aWMgdm9pZCBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUodW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJc3RhdGUgPSAoc3RhdHVzICYgRE1BX1NUQVRVU19UU19NQVNLKSA+PiBETUFfU1RBVFVTX1RTX1NISUZUOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiLSBUWCAoU3RvcHBlZCk6IFJlc2V0IG9yIFN0b3AgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6RmV0Y2hpbmcgdGhlIFR4IGRlc2NcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBlbmQgb2YgdHhcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBSZWFkaW5nIHRoZSBkYXRhICIKKwkJICAgICAgICJhbmQgcXVldWluZyB0aGUgZGF0YSBpbnRvIHRoZSBUeCBidWZcbiIpOworCQlicmVhazsKKwljYXNlIDY6CisJCXByX2luZm8oIi0gVFggKFN1c3BlbmRlZCk6IFR4IEJ1ZmYgVW5kZXJmbG93ICIKKwkJICAgICAgICJvciBhbiB1bmF2YWlsYWJsZSBUcmFuc21pdCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTogQ2xvc2luZyBUeCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgorCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKK2ludCBkd21hY19kbWFfaW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLAorCQkJc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCkKK3sKKwlpbnQgcmV0ID0gMDsKKwkvKiByZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKENTUjUpICovCisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgRE1BX1NUQVRVUyk7CisKKwlEQkcoSU5GTywgIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKwkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHByb2Nlc3Mgc3RhdGVzIChDU1I1IHJlZ2lzdGVyKSAqLworCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CisJc2hvd19yeF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKKyNlbmRpZgorCS8qIEFCTk9STUFMIGludGVycnVwdHMgKi8KKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0FJUykpIHsKKwkJREJHKElORk8sICJDU1I1WzE1XSBETUEgQUJOT1JNQUwgSVJROiAiKTsKKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19VTkYpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yX2J1bXBfdGM7CisJCQl4LT50eF91bmRlZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKKwkJCURCRyhJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCXgtPnR4X2phYmJlcl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKKwkJCURCRyhJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7CisJCQl4LT5yeF9vdmVyZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JVKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CisJCQl4LT5yeF9idWZfdW5hdl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKKwkJCURCRyhJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJeC0+cnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKKwkJCXgtPnJ4X3dhdGNoZG9nX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRVRJKSkgeworCQkJREJHKElORk8sICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOworCQkJeC0+dHhfZWFybHlfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQl4LT50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgeworCQkJREJHKElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOworCQkJeC0+ZmF0YWxfYnVzX2Vycm9yX2lycSsrOworCQkJcmV0ID0gdHhfaGFyZF9lcnJvcjsKKwkJfQorCX0KKwkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLworCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7CisJCXgtPm5vcm1hbF9pcnFfbisrOworCQlpZiAobGlrZWx5KChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUkkpIHx8CisJCQkgKGludHJfc3RhdHVzICYgKERNQV9TVEFUVVNfVEkpKSkpCisJCQkJcmV0ID0gaGFuZGxlX3R4X3J4OworCX0KKwkvKiBPcHRpb25hbCBoYXJkd2FyZSBibG9ja3MsIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYKKwkJICAgICAoRE1BX1NUQVRVU19HUEkgfCBETUFfU1RBVFVTX0dNSSB8IERNQV9TVEFUVVNfR0xJKSkpCisJCXByX2luZm8oIiVzOiB1bmV4cGVjdGVkIHN0YXR1cyAlMDh4XG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KKwl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOworCisJREJHKElORk8sICJcblxuIik7CisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCisJCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJZGF0YSA9IChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgaGlnaCk7CisJZGF0YSA9IChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgbG93KTsKKworCXJldHVybjsKK30KKwordm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJIHVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KQoreworCXVuc2lnbmVkIGludCBoaV9hZGRyLCBsb19hZGRyOworCisJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwloaV9hZGRyID0gcmVhZGwoaW9hZGRyICsgaGlnaCk7CisJbG9fYWRkciA9IHJlYWRsKGlvYWRkciArIGxvdyk7CisKKwkvKiBFeHRyYWN0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoaWdoIGFuZCBsb3cgd29yZHMgKi8KKwlhZGRyWzBdID0gbG9fYWRkciAmIDB4ZmY7CisJYWRkclsxXSA9IChsb19hZGRyID4+IDgpICYgMHhmZjsKKwlhZGRyWzJdID0gKGxvX2FkZHIgPj4gMTYpICYgMHhmZjsKKwlhZGRyWzNdID0gKGxvX2FkZHIgPj4gMjQpICYgMHhmZjsKKwlhZGRyWzRdID0gaGlfYWRkciAmIDB4ZmY7CisJYWRkcls1XSA9IChoaV9hZGRyID4+IDgpICYgMHhmZjsKKworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNTg2ZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDY5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBHTUFDIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlciBmb3IgU1QgU29Dcy4KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSAgaGFzIGJlZW4gdXNlZCBmb3IKLSAgZGV2ZWxvcGluZyB0aGlzIGNvZGUuCi0KLSAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLSAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KLSAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLQotICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotCi0jaW5jbHVkZSAic3RtbWFjLmgiCi0jaW5jbHVkZSAiZ21hYy5oIgotCi0jdW5kZWYgR01BQ19ERUJVRwotLyojZGVmaW5lIEdNQUNfREVCVUcqLwotI3VuZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRwotLyojZGVmaW5lIEZSQU1FX0ZJTFRFUl9ERUJVRyovCi0jaWZkZWYgR01BQ19ERUJVRwotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ21hY19kdW1wX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgR01BQyByZWdpc3RlcnMgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgotCSAgICAgICAiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KWlvYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTU7IGkrKykgewotCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCXByX2luZm8oIlx0UmVnIE5vLiAlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCi0JCSAgICAgICBvZmZzZXQsIHJlYWRsKGlvYWRkciArIG9mZnNldCkpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgZ21hY19kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCkKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCS8qIERNQSBTVyByZXNldCAqLwotCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9TRlRfUkVTRVQ7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKSAmIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQpKTsKLQotCXZhbHVlID0gLyogRE1BX0JVU19NT0RFX0ZCIHwgKi8gRE1BX0JVU19NT0RFXzRQQkwgfAotCSAgICAoKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSB8Ci0JICAgICAocGJsIDw8IERNQV9CVVNfTU9ERV9SUEJMX1NISUZUKSk7Ci0KLSNpZmRlZiBDT05GSUdfU1RNTUFDX0RBCi0JdmFsdWUgfD0gRE1BX0JVU19NT0RFX0RBOwkvKiBSeCBoYXMgcHJpb3JpdHkgb3ZlciB0eCAqLwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVHJhbnNtaXQgRklGTyBmbHVzaCBvcGVyYXRpb24gKi8KLXN0YXRpYyB2b2lkIGdtYWNfZmx1c2hfdHhfZmlmbyh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl3cml0ZWwoKGNzcjYgfCBETUFfQ09OVFJPTF9GVEYpLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKSAmIERNQV9DT05UUk9MX0ZURikpOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKLQkJCQkgICAgaW50IHJ4bW9kZSkKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOwotCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOwotCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQotCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLwotCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKLQl9IGVsc2UgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCi0JCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7Ci0JCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKLQkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOwotCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLwotCQlpZiAodHhtb2RlIDw9IDMyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7Ci0JCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7Ci0JfQotCi0JaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7Ci0JCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOwotCX0gZWxzZSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKLQkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKLQkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOwotCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7Ci0JCWlmIChyeG1vZGUgPD0gMzIpCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKLQkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7Ci0JCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7Ci0JfQotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9kaWFnbm9zdGljX2ZyKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiIERNQSByZWdpc3RlcnNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKSB7Ci0JCWlmICgoaSA8IDkpIHx8IChpID4gMTcpKSB7Ci0JCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCQlwcl9lcnIoIlx0IFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkJICAgICAgIChETUFfQlVTX01PREUgKyBvZmZzZXQpLAotCQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIG9mZnNldCkpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5lcnJvcl9zdW1tYXJ5KSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgVFggZXJyb3IuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5ldHgpOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmphYmJlcl90aW1lb3V0KSkgewotCQkJREJHKEtFUk5fRVJSICJcdGphYmJlcl90aW1lb3V0IGVycm9yXG4iKTsKLQkJCXgtPnR4X2phYmJlcisrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5mcmFtZV9mbHVzaGVkKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGZyYW1lX2ZsdXNoZWQgZXJyb3JcbiIpOwotCQkJeC0+dHhfZnJhbWVfZmx1c2hlZCsrOwotCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOwotCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKLQkJCXgtPnR4X2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7Ci0JCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7Ci0JCQl4LT50eF9kZWZlcnJlZCsrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKLQkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOwotCQkJeC0+dHhfdW5kZXJmbG93Kys7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmlwX2hlYWRlcl9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRUWCBJUCBoZWFkZXIgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9pcF9oZWFkZXJfZXJyb3IrKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgucGF5bG9hZF9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRBZGRyL1BheWxvYWQgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9wYXlsb2FkX2Vycm9yKys7Ci0JCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKLQkJfQotCi0JCXJldCA9IC0xOwotCX0KLQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZGVmZXJyZWQpKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiB0eCBkZWZlcnJlZFxuIik7Ci0JCXgtPnR4X2RlZmVycmVkKys7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmV0eC52bGFuX2ZyYW1lKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiBWTEFOIGZyYW1lXG4iKTsKLQkJeC0+dHhfdmxhbisrOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOwotfQotCi1zdGF0aWMgaW50IGdtYWNfY29lX3JkZXMwKGludCBpcGNfZXJyLCBpbnQgdHlwZSwgaW50IHBheWxvYWRfZXJyKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXUzMiBzdGF0dXMgPSAodHlwZSA8PCAyIHwgaXBjX2VyciA8PCAxIHwgcGF5bG9hZF9lcnIpICYgMHg3OwotCi0JLyogYml0cyA1IDcgMCB8IEZyYW1lIHN0YXR1cwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgIDAgMCAwIHwgSUVFRSA4MDIuMyBUeXBlIGZyYW1lIChsZW5naHQgPCAxNTM2IG9jdGVjdHMpCi0JICogICAgICAxIDAgMCB8IElQdjQvNiBObyBDU1VNIGVycm9yUy4KLQkgKiAgICAgIDEgMCAxIHwgSVB2NC82IENTVU0gUEFZTE9BRCBlcnJvcgotCSAqICAgICAgMSAxIDAgfCBJUHY0LzYgQ1NVTSBJUCBIUiBlcnJvcgotCSAqICAgICAgMSAxIDEgfCBJUHY0LzYgSVAgUEFZTE9BRCBBTkQgSEVBREVSIGVycm9yUwotCSAqICAgICAgMCAwIDEgfCBJUHY0LzYgdW5zdXBwb3J0ZWQgSVAgUEFZTE9BRAotCSAqICAgICAgMCAxIDEgfCBDT0UgYnlwYXNzZWQuLiBubyBJUHY0LzYgZnJhbWUKLQkgKiAgICAgIDAgMSAwIHwgUmVzZXJ2ZWQuCi0JICovCi0JaWYgKHN0YXR1cyA9PSAweDApIHsKLQkJREJHKEtFUk5fSU5GTyAiUlggRGVzMCBzdGF0dXM6IElFRUUgODAyLjMgVHlwZSBmcmFtZS5cbiIpOwotCQlyZXQgPSBnb29kX2ZyYW1lOwotCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NCkgewotCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSVB2NC82IE5vIENTVU0gZXJyb3JTLlxuIik7Ci0JCXJldCA9IGdvb2RfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg1KSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDYpIHsKLQkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IEhlYWRlciBFcnJvci5cbiIpOwotCQlyZXQgPSBjc3VtX25vbmU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg3KSB7Ci0JCURCRyhLRVJOX0VSUgotCQkgICAgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIGFuZCBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDEpIHsKLQkJREJHKEtFUk5fRVJSCi0JCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FELlxuIik7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHgzKSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IE5vIElQdjQsIElQdjYgZnJhbWUuXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7Ci0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWCBFcnJvciBTdW1tYXJ5Li4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXJ4KTsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kZXNjcmlwdG9yX2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGRlc2NyaXB0b3IgZXJyb3JcbiIpOwotCQkJeC0+cnhfZGVzYysrOwotCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4Lm92ZXJmbG93X2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdG92ZXJmbG93IGVycm9yXG4iKTsKLQkJCXgtPnJ4X2dtYWNfb3ZlcmZsb3crKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IpKQotCQkJREJHKEtFUk5fRVJSICJcdElQQyBDc3VtIEVycm9yL0dpYW50IGZyYW1lXG4iKTsKLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmxhdGVfY29sbGlzaW9uKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGxhdGVfY29sbGlzaW9uIGVycm9yXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zKys7Ci0JCQlzdGF0cy0+Y29sbGlzaW9ucysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngucmVjZWl2ZV93YXRjaGRvZykpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRyZWNlaXZlX3dhdGNoZG9nIGVycm9yXG4iKTsKLQkJCXgtPnJ4X3dhdGNoZG9nKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5lcnJvcl9nbWlpKSkgewotCQkJREJHKEtFUk5fRVJSICJcdFJlY2VpdmUgRXJyb3JcbiIpOwotCQkJeC0+cnhfbWlpKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5jcmNfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0Q1JDIGVycm9yXG4iKTsKLQkJCXgtPnJ4X2NyYysrOwotCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJfQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQotCS8qIEFmdGVyIGEgcGF5bG9hZCBjc3VtIGVycm9yLCB0aGUgRVMgYml0IGlzIHNldC4KLQkgKiBJdCBkb2Vzbid0IG1hdGNoIHdpdGggdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGludG8gdGhlIGRhdGFib29rLgotCSAqIEF0IGFueSByYXRlLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIENTVU0gaHcgY29tcHV0YXRpb24gaXMgb2sKLQkgKiBhbmQgcmVwb3J0IHRoaXMgaW5mbyB0byB0aGUgdXBwZXIgbGF5ZXJzLiAqLwotCXJldCA9IGdtYWNfY29lX3JkZXMwKHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvciwKLQkJcC0+ZGVzMDEuZXJ4LmZyYW1lX3R5cGUsIHAtPmRlczAxLmVyeC5wYXlsb2FkX2NzdW1fZXJyb3IpOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kcmliYmxpbmcpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogZHJpYmJsaW5nIGVycm9yXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5zYV9maWx0ZXJfZmFpbCkpIHsKLQkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogU291cmNlIEFkZHJlc3MgZmlsdGVyIGZhaWxcbiIpOwotCQl4LT5zYV9yeF9maWx0ZXJfZmFpbCsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRhX2ZpbHRlcl9mYWlsKSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggOiBEZXN0aW5hdGlvbiBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKLQkJeC0+ZGFfcnhfZmlsdGVyX2ZhaWwrKzsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5sZW5ndGhfZXJyb3IpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogbGVuZ3RoX2Vycm9yIGVycm9yXG4iKTsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmVyeC52bGFuX3RhZykgewotCQlEQkcoS0VSTl9JTkZPICJHTUFDIFJYOiBWTEFOIGZyYW1lIHRhZ2dlZFxuIik7Ci0JCXgtPnJ4X3ZsYW4rKzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKLQotCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLwotCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCi0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCi0JCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOwotCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKLQkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLwotCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBHTUFDX0NPTlRST0wpOwotCXZhbHVlIHw9IEdNQUNfQ09SRV9JTklUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19DT05UUk9MKTsKLQotCS8qIFNUQnVzIEJyaWRnZSBDb25maWd1cmF0aW9uICovCi0JLyp3cml0ZWwoMHhjNTYwOCwgaW9hZGRyICsgMHgwMDAwNzAwMCk7Ki8KLQotCS8qIEZyZWV6ZSBNTUMgY291bnRlcnMgKi8KLQl3cml0ZWwoMHg4LCBpb2FkZHIgKyBHTUFDX01NQ19DVFJMKTsKLQkvKiBNYXNrIEdNQUMgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgweDIwNywgaW9hZGRyICsgR01BQ19JTlRfTUFTSyk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCS8qIFRhZyBkZXRlY3Rpb24gd2l0aG91dCBmaWx0ZXJpbmcgKi8KLQl3cml0ZWwoMHgwLCBpb2FkZHIgKyBHTUFDX1ZMQU5fVEFHKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotCi0JREJHKEtFUk5fSU5GTyAiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3QgJWRcbiIsCi0JICAgIF9fZnVuY19fLCBkZXYtPm1jX2NvdW50LCBkZXYtPnVjX2NvdW50KTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCi0JCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BNOwkvKiBwYXNzIGFsbCBtdWx0aSAqLwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlpbnQgaTsKLQkJdTMyIG1jX2ZpbHRlclsyXTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0KLQkJLyogSGFzaCBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLwotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX0hNQzsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGJpdHJldjMyKH5jcmMzMl9sZSh+MCwgbWNsaXN0LT5kbWlfYWRkciwgNikpID4+IDI2OwotCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCi0JCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAotCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KLQkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOwotCQl9Ci0JCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOwotCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0JLyogSGFuZGxlIG11bHRpcGxlIHVuaWNhc3QgYWRkcmVzc2VzIChwZXJmZWN0IGZpbHRlcmluZykqLwotCWlmIChkZXYtPnVjX2NvdW50ID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCi0JCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycwotCQkgICBhcmUgcmVxdWlyZWQgKi8KLQkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqdWNfcHRyID0gZGV2LT51Y19saXN0OwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrKSB7Ci0JCQkJZ21hY19zZXRfdW1hY19hZGRyKGlvYWRkciwgdWNfcHRyLT5kYV9hZGRyLAotCQkJCQkJaSArIDEpOwotCi0JCQkJREJHKEtFUk5fSU5GTyAiXHQlZCAiCi0JCQkJIi0gVW5pY2FzdCBhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDoiCi0JCQkJIiUwMnhcbiIsIGkgKyAxLAotCQkJCXVjX3B0ci0+ZGFfYWRkclswXSwgdWNfcHRyLT5kYV9hZGRyWzFdLAotCQkJCXVjX3B0ci0+ZGFfYWRkclsyXSwgdWNfcHRyLT5kYV9hZGRyWzNdLAotCQkJCXVjX3B0ci0+ZGFfYWRkcls0XSwgdWNfcHRyLT5kYV9hZGRyWzVdKTsKLQkJCQl1Y19wdHIgPSB1Y19wdHItPm5leHQ7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBGUkFNRV9GSUxURVJfREVCVUcKLQkvKiBFbmFibGUgUmVjZWl2ZSBhbGwgbW9kZSAodG8gZGVidWcgZmlsdGVyaW5nX2ZhaWwgZXJyb3JzKSAqLwotCXZhbHVlIHw9IEdNQUNfRlJBTUVfRklMVEVSX1JBOwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUik7Ci0KLQlEQkcoS0VSTl9JTkZPICJcdEZyYW1lIEZpbHRlciByZWc6IDB4JTA4eFxuXHRIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLCByZWFkbChpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUiksCi0JICAgIHJlYWRsKGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0xPVykpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKLQkJCSAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCi17Ci0JdW5zaWduZWQgaW50IGZsb3cgPSAwOwotCi0JREJHKEtFUk5fREVCVUcgIkdNQUMgRmxvdy1Db250cm9sOlxuIik7Ci0JaWYgKGZjICYgRkxPV19SWCkgewotCQlEQkcoS0VSTl9ERUJVRyAiXHRSZWNlaXZlIEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfUkZFOwotCX0KLQlpZiAoZmMgJiBGTE9XX1RYKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJcdFRyYW5zbWl0IEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfVEZFOwotCX0KLQotCWlmIChkdXBsZXgpIHsKLQkJREJHKEtFUk5fREVCVUcgIlx0ZHVwbGV4IG1vZGU6IHBhdXNlIHRpbWU6ICVkXG4iLCBwYXVzZV90aW1lKTsKLQkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7Ci0JfQotCi0Jd3JpdGVsKGZsb3csIGlvYWRkciArIEdNQUNfRkxPV19DVFJMKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCi17Ci0JdW5zaWduZWQgaW50IHBtdCA9IDA7Ci0KLQlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOwotCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKLQl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKLQkJcG10IHw9IGdsb2JhbF91bmljYXN0OwotCX0KLQotCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKLQkJCQlpbnQgZGlzYWJsZV9yeF9pYykKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLmVyeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKLQkJLyogVG8gc3VwcG9ydCBqdW1ibyBmcmFtZXMgKi8KLQkJcC0+ZGVzMDEuZXJ4LmJ1ZmZlcjJfc2l6ZSA9IEJVRl9TSVpFXzhLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEuZXJ4LmVuZF9yaW5nID0gMTsKLQkJaWYgKGRpc2FibGVfcnhfaWMpCi0JCQlwLT5kZXMwMS5lcnguZGlzYWJsZV9pYyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOwotCQlwKys7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lm93bjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLmVyeC5vd247Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXAtPmRlczAxLmVyeC5vd24gPSAxOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lmxhc3Rfc2VnbWVudDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7Ci0KLQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOwotCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCi0JCQkJIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEuZXR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKLQlpZiAodW5saWtlbHkobGVuID4gQlVGX1NJWkVfNEtpQikpIHsKLQkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzRLaUI7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIyX3NpemUgPSBsZW4gLSBCVUZfU0laRV80S2lCOwotCX0gZWxzZSB7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIxX3NpemUgPSBsZW47Ci0JfQotCWlmIChsaWtlbHkoY3N1bV9mbGFnKSkKLQkJcC0+ZGVzMDEuZXR4LmNoZWNrc3VtX2luc2VydGlvbiA9IGNpY19mdWxsOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5lcnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBnbWFjX2RyaXZlciA9IHsKLQkuY29yZV9pbml0ID0gZ21hY19jb3JlX2luaXQsCi0JLmR1bXBfbWFjX3JlZ3MgPSBnbWFjX2R1bXBfcmVncywKLQkuZG1hX2luaXQgPSBnbWFjX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gZ21hY19kdW1wX2RtYV9yZWdzLAotCS5kbWFfbW9kZSA9IGdtYWNfZG1hX29wZXJhdGlvbl9tb2RlLAotCS5kbWFfZGlhZ25vc3RpY19mciA9IGdtYWNfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IGdtYWNfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKLQkucnhfc3RhdHVzID0gZ21hY19nZXRfcnhfZnJhbWVfc3RhdHVzLAotCS5nZXRfdHhfbGVuID0gZ21hY19nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gZ21hY19zZXRfZmlsdGVyLAotCS5mbG93X2N0cmwgPSBnbWFjX2Zsb3dfY3RybCwKLQkucG10ID0gZ21hY19wbXQsCi0JLmluaXRfcnhfZGVzYyA9IGdtYWNfaW5pdF9yeF9kZXNjLAotCS5pbml0X3R4X2Rlc2MgPSBnbWFjX2luaXRfdHhfZGVzYywKLQkuZ2V0X3R4X293bmVyID0gZ21hY19nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IGdtYWNfZ2V0X3J4X293bmVyLAotCS5yZWxlYXNlX3R4X2Rlc2MgPSBnbWFjX3JlbGVhc2VfdHhfZGVzYywKLQkucHJlcGFyZV90eF9kZXNjID0gZ21hY19wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gZ21hY19jbGVhcl90eF9pYywKLQkuY2xvc2VfdHhfZGVzYyA9IGdtYWNfY2xvc2VfdHhfZGVzYywKLQkuZ2V0X3R4X2xzID0gZ21hY19nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IGdtYWNfc2V0X3R4X293bmVyLAotCS5zZXRfcnhfb3duZXIgPSBnbWFjX3NldF9yeF9vd25lciwKLQkuZ2V0X3J4X2ZyYW1lX2xlbiA9IGdtYWNfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gZ21hY19pcnFfc3RhdHVzLAotCS5zZXRfdW1hY19hZGRyID0gZ21hY19zZXRfdW1hY19hZGRyLAotCS5nZXRfdW1hY19hZGRyID0gZ21hY19nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZ21hY19zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7Ci0JdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7Ci0KLQlwcl9pbmZvKCJcdEdNQUMgLSB1c2VyIElEOiAweCV4LCBTeW5vcHN5cyBJRDogMHgleFxuIiwKLQkgICAgICAgKCh1aWQgJiAweDAwMDBmZjAwKSA+PiA4KSwgKHVpZCAmIDB4MDAwMDAwZmYpKTsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCW1hYy0+b3BzID0gJmdtYWNfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX1NVUFBPUlRFRDsKLQltYWMtPmh3LmxpbmsucG9ydCA9IEdNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gR01BQ19DT05UUk9MX0RNOwotCW1hYy0+aHcubGluay5zcGVlZCA9IEdNQUNfQ09OVFJPTF9GRVM7Ci0JbWFjLT5ody5taWkuYWRkciA9IEdNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IEdNQUNfTUlJX0RBVEE7Ci0KLQlyZXR1cm4gbWFjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODJkNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgotICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotCi0gIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBHTUFDX0NPTlRST0wJCTB4MDAwMDAwMDAJLyogQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUgkweDAwMDAwMDA0CS8qIEZyYW1lIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0hBU0hfSElHSAkJMHgwMDAwMDAwOAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCi0jZGVmaW5lIEdNQUNfSEFTSF9MT1cJCTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFIJCTB4MDAwMDAwMTAJLyogTUlJIEFkZHJlc3MgKi8KLSNkZWZpbmUgR01BQ19NSUlfREFUQQkJMHgwMDAwMDAxNAkvKiBNSUkgRGF0YSAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTAkJMHgwMDAwMDAxOAkvKiBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgR01BQ19WTEFOX1RBRwkJMHgwMDAwMDAxYwkvKiBWTEFOIFRhZyAqLwotI2RlZmluZSBHTUFDX1ZFUlNJT04JCTB4MDAwMDAwMjAJLyogR01BQyBDT1JFIFZlcnNpb24gKi8KLSNkZWZpbmUgR01BQ19XQUtFVVBfRklMVEVSCTB4MDAwMDAwMjgJLyogV2FrZS11cCBGcmFtZSBGaWx0ZXIgKi8KLQotI2RlZmluZSBHTUFDX0lOVF9TVEFUVVMJCTB4MDAwMDAwMzgJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotZW51bSBnbWFjX2lycV9zdGF0dXMgewotCXRpbWVfc3RhbXBfaXJxID0gMHgwMjAwLAotCW1tY19yeF9jc3VtX29mZmxvYWRfaXJxID0gMHgwMDgwLAotCW1tY190eF9pcnEgPSAweDAwNDAsCi0JbW1jX3J4X2lycSA9IDB4MDAyMCwKLQltbWNfaXJxID0gMHgwMDEwLAotCXBtdF9pcnEgPSAweDAwMDgsCi0JcGNzX2FuZV9pcnEgPSAweDAwMDQsCi0JcGNzX2xpbmtfaXJxID0gMHgwMDAyLAotCXJnbWlpX2lycSA9IDB4MDAwMSwKLX07Ci0jZGVmaW5lIEdNQUNfSU5UX01BU0sJCTB4MDAwMDAwM2MJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLQotLyogUE1UIENvbnRyb2wgYW5kIFN0YXR1cyAqLwotI2RlZmluZSBHTUFDX1BNVAkJMHgwMDAwMDAyYwotZW51bSBwb3dlcl9ldmVudCB7Ci0JcG9pbnRlcl9yZXNldCA9IDB4ODAwMDAwMDAsCi0JZ2xvYmFsX3VuaWNhc3QgPSAweDAwMDAwMjAwLAotCXdha2VfdXBfcnhfZnJhbWUgPSAweDAwMDAwMDQwLAotCW1hZ2ljX2ZyYW1lID0gMHgwMDAwMDAyMCwKLQl3YWtlX3VwX2ZyYW1lX2VuID0gMHgwMDAwMDAwNCwKLQltYWdpY19wa3RfZW4gPSAweDAwMDAwMDAyLAotCXBvd2VyX2Rvd24gPSAweDAwMDAwMDAxLAotfTsKLQotLyogR01BQyBIVyBBRERSIHJlZ3MgKi8KLSNkZWZpbmUgR01BQ19BRERSX0hJR0gocmVnKQkJKDB4MDAwMDAwNDArKHJlZyAqIDgpKQotI2RlZmluZSBHTUFDX0FERFJfTE9XKHJlZykJCSgweDAwMDAwMDQ0KyhyZWcgKiA4KSkKLSNkZWZpbmUgR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMJMTYKLQotI2RlZmluZSBHTUFDX0FOX0NUUkwJMHgwMDAwMDBjMAkvKiBBTiBjb250cm9sICovCi0jZGVmaW5lIEdNQUNfQU5fU1RBVFVTCTB4MDAwMDAwYzQJLyogQU4gc3RhdHVzICovCi0jZGVmaW5lIEdNQUNfQU5FX0FEVgkweDAwMDAwMGM4CS8qIEF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCi0jZGVmaW5lIEdNQUNfQU5FX0xJTksJMHgwMDAwMDBjYwkvKiBBdXRvLU5lZy4gbGluayBwYXJ0ZW5lciBhYmlsaXR5ICovCi0jZGVmaW5lIEdNQUNfQU5FX0VYUAkweDAwMDAwMGQwCS8qIEFORSBleHBhbnNpb24gKi8KLSNkZWZpbmUgR01BQ19UQkkJMHgwMDAwMDBkNAkvKiBUQkkgZXh0ZW5kIHN0YXR1cyAqLwotI2RlZmluZSBHTUFDX0dNSUlfU1RBVFVTIDB4MDAwMDAwZDgJLyogUy9SLUdNSUkgc3RhdHVzICovCi0KLS8qIEdNQUMgQ29uZmlndXJhdGlvbiBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9UQwkweDAxMDAwMDAwCS8qIFRyYW5zbWl0IENvbmYuIGluIFJHTUlJL1NHTUlJICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9XRAkweDAwODAwMDAwCS8qIERpc2FibGUgV2F0Y2hkb2cgb24gcmVjZWl2ZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfSkQJMHgwMDQwMDAwMAkvKiBKYWJiZXIgZGlzYWJsZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQkUJMHgwMDIwMDAwMAkvKiBGcmFtZSBCdXJzdCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0pFCTB4MDAxMDAwMDAJLyogSnVtYm8gZnJhbWUgKi8KLWVudW0gaW50ZXJfZnJhbWVfZ2FwIHsKLQlHTUFDX0NPTlRST0xfSUZHXzg4ID0gMHgwMDA0MDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzgwID0gMHgwMDAyMDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzQwID0gMHgwMDBlMDAwMCwKLX07Ci0jZGVmaW5lIEdNQUNfQ09OVFJPTF9EQ1JTCTB4MDAwMTAwMDAgLyogRGlzYWJsZSBjYXJyaWVyIHNlbnNlIGR1cmluZyB0eCAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfUFMJCTB4MDAwMDgwMDAgLyogUG9ydCBTZWxlY3QgMDpHTUkgMTpNSUkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0ZFUwkweDAwMDA0MDAwIC8qIFNwZWVkIDA6MTAgMToxMDAgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RPCQkweDAwMDAyMDAwIC8qIERpc2FibGUgUnggT3duICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9MTQkJMHgwMDAwMTAwMCAvKiBMb29wLWJhY2sgbW9kZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfRE0JCTB4MDAwMDA4MDAgLyogRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0lQQwkweDAwMDAwNDAwIC8qIENoZWNrc3VtIE9mZmxvYWQgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RSCQkweDAwMDAwMjAwIC8qIERpc2FibGUgUmV0cnkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0xVRAkweDAwMDAwMTAwIC8qIExpbmsgdXAvZG93biAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RDCQkweDAwMDAwMDEwIC8qIERlZmVycmFsIENoZWNrICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOCAvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0IC8qIFJlY2VpdmVyIEVuYWJsZSAqLwotCi0jZGVmaW5lIEdNQUNfQ09SRV9JTklUIChHTUFDX0NPTlRST0xfSkQgfCBHTUFDX0NPTlRST0xfUFMgfCBHTUFDX0NPTlRST0xfQUNTIHwgXAotCQkJR01BQ19DT05UUk9MX0lQQyB8IEdNQUNfQ09OVFJPTF9KRSB8IEdNQUNfQ09OVFJPTF9CRSkKLQotLyogR01BQyBGcmFtZSBGaWx0ZXIgZGVmaW5lcyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUgkweDAwMDAwMDAxCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFVDCTB4MDAwMDAwMDIJLyogSGFzaCBVbmljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hNQwkweDAwMDAwMDA0CS8qIEhhc2ggTXVsdGljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RBSUYJMHgwMDAwMDAwOAkvKiBEQSBJbnZlcnNlIEZpbHRlcmluZyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTQkweDAwMDAwMDEwCS8qIFBhc3MgYWxsIG11bHRpY2FzdCAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQkYJMHgwMDAwMDAyMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBmcmFtZXMgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FJRgkweDAwMDAwMTAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBRgkweDAwMDAwMjAwCS8qIFNvdXJjZSBBZGRyZXNzIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IUEYJMHgwMDAwMDQwMAkvKiBIYXNoIG9yIHBlcmZlY3QgRmlsdGVyICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBhbGwgbW9kZSAqLwotLyogR01JSSBBRERSICBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KLSNkZWZpbmUgR01BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KLS8qIEdNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9SRkUJMHgwMDAwMDAwNAkvKiBSeCBGbG93IENvbnRyb2wgRW5hYmxlICovCi0jZGVmaW5lIEdNQUNfRkxPV19DVFJMX1RGRQkweDAwMDAwMDAyCS8qIFR4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfRkNCX0JQQQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLwotCi0vKi0tLSBETUEgQkxPQ0sgZGVmaW5lcyAtLS0qLwotLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9EQQkJMHgwMDAwMDAwMgkvKiBBcmJpdHJhdGlvbiBzY2hlbWUgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLwotI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCi0vKiBQcm9ncmFtbWFibGUgYnVyc3QgbGVuZ3RoIChwYXNzZWQgdGhvcnVnaCBwbGF0Zm9ybSkqLwotI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAotCi1lbnVtIHJ4X3R4X3ByaW9yaXR5X3JhdGlvIHsKLQlkb3VibGVfcmF0aW8gPSAweDAwMDA0MDAwLAkvKjI6MSAqLwotCXRyaXBsZV9yYXRpbyA9IDB4MDAwMDgwMDAsCS8qMzoxICovCi0JcXVhZHJ1cGxlX3JhdGlvID0gMHgwMDAwYzAwMCwJLyo0OjEgKi8KLX07Ci0KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0ZCCQkweDAwMDEwMDAwCS8qIEZpeGVkIGJ1cnN0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX01BU0sJMHgwMDNlMDAwMAkvKiBSeC1Qcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX1NISUZUCTE3Ci0jZGVmaW5lIERNQV9CVVNfTU9ERV9VU1AJMHgwMDgwMDAwMAotI2RlZmluZSBETUFfQlVTX01PREVfNFBCTAkweDAxMDAwMDAwCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9BQUwJMHgwMjAwMDAwMAotCi0vKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCi0jZGVmaW5lIERNQV9IT1NUX1RYX0RFU0MJICAweDAwMDAxMDQ4CS8qIEN1cnJlbnQgSG9zdCBUeCBkZXNjcmlwdG9yICovCi0jZGVmaW5lIERNQV9IT1NUX1JYX0RFU0MJICAweDAwMDAxMDRjCS8qIEN1cnJlbnQgSG9zdCBSeCBkZXNjcmlwdG9yICovCi0vKiAgRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19NQVNLCSAgMHgwMDAwYzAwMAkvKiBSeC9UeCBwcmlvcml0eSByYXRpbyAqLwotI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX1NISUZUCSAgMTQKLSNkZWZpbmUgRE1BX0JVU19GQgkgIAkgIDB4MDAwMTAwMDAJLyogRml4ZWQgQnVyc3QgKi8KLQotLyogRE1BIG9wZXJhdGlvbiBtb2RlIGRlZmluZXMgKHN0YXJ0L3N0b3AgdHgvcnggYXJlIHBsYWNlZCBpbiBjb21tb24gaGVhZGVyKSovCi0jZGVmaW5lIERNQV9DT05UUk9MX0RUCQkweDA0MDAwMDAwIC8qIERpc2FibGUgRHJvcCBUQ1AvSVAgY3N1bSBlcnJvciAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9SU0YJCTB4MDIwMDAwMDAgLyogUmVjZWl2ZSBTdG9yZSBhbmQgRm9yd2FyZCAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9ERkYJCTB4MDEwMDAwMDAgLyogRGlzYWFibGUgZmx1c2hpbmcgKi8KLS8qIFRocmVzaG9sZCBmb3IgQWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZhIHsKLQlhY3RfZnVsbF9taW51c18xID0gMHgwMDgwMDAwMCwKLQlhY3RfZnVsbF9taW51c18yID0gMHgwMDgwMDIwMCwKLQlhY3RfZnVsbF9taW51c18zID0gMHgwMDgwMDQwMCwKLQlhY3RfZnVsbF9taW51c180ID0gMHgwMDgwMDYwMCwKLX07Ci0vKiBUaHJlc2hvbGQgZm9yIERlYWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZkIHsKLQlkZWFjX2Z1bGxfbWludXNfMSA9IDB4MDA0MDAwMDAsCi0JZGVhY19mdWxsX21pbnVzXzIgPSAweDAwNDAwODAwLAotCWRlYWNfZnVsbF9taW51c18zID0gMHgwMDQwMTAwMCwKLQlkZWFjX2Z1bGxfbWludXNfNCA9IDB4MDA0MDE4MDAsCi19OwotI2RlZmluZSBETUFfQ09OVFJPTF9UU0YJCTB4MDAyMDAwMDAgLyogVHJhbnNtaXQgIFN0b3JlIGFuZCBGb3J3YXJkICovCi0jZGVmaW5lIERNQV9DT05UUk9MX0ZURgkJMHgwMDEwMDAwMCAvKiBGbHVzaCB0cmFuc21pdCBGSUZPICovCi0KLWVudW0gdHRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDQwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE5MiA9IDB4MDAwMDgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDAxMDAwMCwKLQlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwMDE0MDAwLAotCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDAwMTgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE2ID0gMHgwMDAxYzAwMCwKLX07Ci0jZGVmaW5lIERNQV9DT05UUk9MX1RDX1RYX01BU0sJMHhmZmZlM2ZmZgotCi0jZGVmaW5lIERNQV9DT05UUk9MX0VGQwkJMHgwMDAwMDEwMAotI2RlZmluZSBETUFfQ09OVFJPTF9GRUYJCTB4MDAwMDAwODAKLSNkZWZpbmUgRE1BX0NPTlRST0xfRlVGCQkweDAwMDAwMDQwCi0KLWVudW0gcnRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1JUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfUlRDXzMyID0gMHgwMDAwMDAwOCwKLQlETUFfQ09OVFJPTF9SVENfOTYgPSAweDAwMDAwMDEwLAotCURNQV9DT05UUk9MX1JUQ18xMjggPSAweDAwMDAwMDE4LAotfTsKLSNkZWZpbmUgRE1BX0NPTlRST0xfVENfUlhfTUFTSwkweGZmZmZmZmU3Ci0KLSNkZWZpbmUgRE1BX0NPTlRST0xfT1NGCTB4MDAwMDAwMDQJLyogT3BlcmF0ZSBvbiBzZWNvbmQgZnJhbWUgKi8KLQotLyogTU1DIHJlZ2lzdGVycyBvZmZzZXQgKi8KLSNkZWZpbmUgR01BQ19NTUNfQ1RSTCAgICAgIDB4MTAwCi0jZGVmaW5lIEdNQUNfTU1DX1JYX0lOVFIgICAweDEwNAotI2RlZmluZSBHTUFDX01NQ19UWF9JTlRSICAgMHgxMDgKLSNkZWZpbmUgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEICAgMHgyMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MTcxYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTUFDIDEwLzEwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIKLSAgY3VycmVudGx5IHRlc3RlZCBvbiBhbGwgdGhlIFNUIGJvYXJkcyBiYXNlZCBvbiBTVGI3MTA5IGFuZCBzdHg3MjAwIFNvQ3MuCi0KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAgVW5pdmVyc2FsIHZlcnNpb24gNC4wIGhhcyBiZWVuIHVzZWQgZm9yIGRldmVsb3BpbmcKLSAgdGhpcyBjb2RlLgotCi0gIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi0gIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCi0gIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCi0KLSAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgIm1hYzEwMC5oIgotCi0jdW5kZWYgTUFDMTAwX0RFQlVHCi0vKiNkZWZpbmUgTUFDMTAwX0RFQlVHKi8KLSNpZmRlZiBNQUMxMDBfREVCVUcKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIG1hYzEwMF9jb3JlX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpOwotCi0Jd3JpdGVsKCh2YWx1ZSB8IE1BQ19DT1JFX0lOSVQpLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCXdyaXRlbChFVEhfUF84MDIxUSwgaW9hZGRyICsgTUFDX1ZMQU4xKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfbWFjX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgTUFDMTAwIENTUiAoYmFzZSBhZGRyID0gMHglOHgpXG4iCi0JICAgICAgICJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKLQlwcl9pbmZvKCJcdGNvbnRyb2wgcmVnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0NPTlRST0wsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSk7Ci0JcHJfaW5mbygiXHRhZGRyIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuICIsIE1BQ19BRERSX0hJR0gsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0hJR0gpKTsKLQlwcl9pbmZvKCJcdGFkZHIgTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQUREUl9MT1csCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0xPVykpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfTE9XLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKLQlwcl9pbmZvKCJcdGZsb3cgY29udHJvbCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JCU1BQ19GTE9XX0NUUkwsIHJlYWRsKGlvYWRkciArIE1BQ19GTE9XX0NUUkwpKTsKLQlwcl9pbmZvKCJcdFZMQU4xIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMSwKLQkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4xKSk7Ci0JcHJfaW5mbygiXHRWTEFOMiB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjIsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19WTEFOMikpOwotCXByX2luZm8oIlxuXHRNQUMgbWFuYWdlbWVudCBjb3VudGVyIHJlZ2lzdGVyc1xuIik7Ci0JcHJfaW5mbygiXHQgTU1DIGNydGwgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfQ09OVFJPTCwgcmVhZGwoaW9hZGRyICsgTU1DX0NPTlRST0wpKTsKLQlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfSElHSF9JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSKSk7Ci0JcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfTE9XX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUikpOwotCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0hJR0hfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spKTsKLQlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0xPV19JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUl9NQVNLKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwKLQkJCSAgIHUzMiBkbWFfcngpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQkvKiBETUEgU1cgcmVzZXQgKi8KLQl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7Ci0KLQkvKiBFbmFibGUgQXBwbGljYXRpb24gQWNjZXNzIGJ5IHdyaXRpbmcgdG8gRE1BIENTUjAgKi8KLQl3cml0ZWwoRE1BX0JVU19NT0RFX0RFRkFVTFQgfCAocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpLAotCSAgICAgICBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogU3RvcmUgYW5kIEZvcndhcmQgY2FwYWJpbGl0eSBpcyBub3QgdXNlZCBhdCBhbGwuLgotICogVGhlIHRyYW5zbWl0IHRocmVzaG9sZCBjYW4gYmUgcHJvZ3JhbW1lZCBieQotICogc2V0dGluZyB0aGUgVFRDIGJpdHMgaW4gdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLiovCi1zdGF0aWMgdm9pZCBtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAotCQkJCSAgICAgIGludCByeG1vZGUpCi17Ci0JdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlpZiAodHhtb2RlIDw9IDMyKQotCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKLQllbHNlIGlmICh0eG1vZGUgPD0gNjQpCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCWVsc2UKLQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0KLQlEQkcoS0VSTl9ERUJVRyAiTUFDMTAwIERNQSBDU1IgXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQotCQlwcl9kZWJ1ZygiXHQgQ1NSJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkgICAgICAgKERNQV9CVVNfTU9ERSArIGkgKiA0KSwKLQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIGkgKiA0KSk7Ci0JREJHKEtFUk5fREVCVUcgIlx0IENTUjIwIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgRE1BX0NVUl9UWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9UWF9CVUZfQUREUikpOwotCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JICAgIERNQV9DVVJfUlhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfUlhfQlVGX0FERFIpKTsKLQlyZXR1cm47Ci19Ci0KLS8qIERNQSBjb250cm9sbGVyIGhhcyB0d28gY291bnRlcnMgdG8gdHJhY2sgdGhlIG51bWJlciBvZgotICAgdGhlIHJlY2VpdmUgbWlzc2VkIGZyYW1lcy4gKi8KLXN0YXRpYyB2b2lkIG1hYzEwMF9kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKLQl1MzIgY3NyOCA9IHJlYWRsKGlvYWRkciArIERNQV9NSVNTRURfRlJBTUVfQ1RSKTsKLQotCWlmICh1bmxpa2VseShjc3I4KSkgewotCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFKSB7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gMHg4MDA7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IDB4ODAwOwotCQl9IGVsc2UgewotCQkJdW5zaWduZWQgaW50IG92ZV9jbnRyOwotCQkJb3ZlX2NudHIgPSAoKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9DTlRSKSA+PiAxNyk7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gb3ZlX2NudHI7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IG92ZV9jbnRyOwotCQl9Ci0KLQkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9NKSB7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSAweGZmZmY7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSAweGZmZmY7Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgbWlzc19mID0gKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX01fQ05UUik7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSBtaXNzX2Y7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSBtaXNzX2Y7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQl4LT50eF91bmRlcmZsb3crKzsKLQkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgewotCQkJeC0+dHhfY2FycmllcisrOwotCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKLQkJCXgtPnR4X2xvc3NjYXJyaWVyKys7Ci0JCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKLQkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAotCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKLQkJcmV0ID0gLTE7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKLQkJeC0+dHhfaGVhcnRiZWF0Kys7Ci0JCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7Ci0JCXJldCA9IC0xOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQotCQl4LT50eF9kZWZlcnJlZCsrOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyBpZiBlYWNoIGluY29taW5nIGZyYW1lIGhhcyBzb21lIGVycm9ycwotICogYW5kLCBpZiByZXF1aXJlZCwgdXBkYXRlcyB0aGUgbXVsdGljYXN0IHN0YXRpc3RpY3MuCi0gKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHJldHVybnMgY3N1bV9ub25lIGJlY2FzdWUgdGhlIGRldmljZQotICogaXMgbm90IGFibGUgdG8gY29tcHV0ZSB0aGUgY3N1bSBpbiBIVy4gKi8KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JaW50IHJldCA9IGNzdW1fbm9uZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgewotCQlwcl93YXJuaW5nKCJtYWMxMDAgRXJyb3I6IE92ZXJzaXplZCBFdGhlcm5ldCAiCi0JCQkgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzXG4iKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJcmV0dXJuIGRpc2NhcmRfZnJhbWU7Ci0JfQotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kZXNjcmlwdG9yX2Vycm9yKSkKLQkJCXgtPnJ4X2Rlc2MrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnBhcnRpYWxfZnJhbWVfZXJyb3IpKQotCQkJeC0+cnhfcGFydGlhbCsrOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucnVuX2ZyYW1lKSkKLQkJCXgtPnJ4X3J1bnQrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmZyYW1lX3Rvb19sb25nKSkKLQkJCXgtPnJ4X3Rvb2xvbmcrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNvbGxpc2lvbikpIHsKLQkJCXgtPnJ4X2NvbGxpc2lvbisrOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY3JjX2Vycm9yKSkgewotCQkJeC0+cnhfY3JjKys7Ci0JCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOwotCQl9Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kcmliYmxpbmcpKQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxlbmd0aF9lcnJvcikpIHsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5taWlfZXJyb3IpKSB7Ci0JCXgtPnJ4X21paSsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAocC0+ZGVzMDEucngubXVsdGljYXN0X2ZyYW1lKSB7Ci0JCXgtPnJ4X211bHRpY2FzdCsrOwotCQlzdGF0cy0+bXVsdGljYXN0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hYzEwMF9pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2dldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUFI7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPIHwKLQkJCSAgIE1BQ19DT05UUk9MX0hQKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gSEFTSF9UQUJMRV9TSVpFKQotCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUE07Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPKTsKLQkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgewkvKiBubyBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfAotCQkJICAgTUFDX0NPTlRST0xfSE8gfCBNQUNfQ09OVFJPTF9IUCk7Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0JCXUzMiBtY19maWx0ZXJbMl07Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCi0JCS8qIFBlcmZlY3QgZmlsdGVyIG1vZGUgZm9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kIEhhc2gKLQkJICAgZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfSFA7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGCi0JCQkgICB8IE1BQ19DT05UUk9MX0hPKTsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICogaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7Ci0JCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KLQkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0Ci0JCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLwotCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7Ci0JCX0KLQkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLQlEQkcoS0VSTl9JTkZPICIlczogQ1RSTCByZWc6IDB4JTA4eCBIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLAotCSAgICBfX2Z1bmNfXywgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpLAotCSAgICByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAotCQkJICAgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQotewotCXVuc2lnbmVkIGludCBmbG93ID0gTUFDX0ZMT1dfQ1RSTF9FTkFCTEU7Ci0KLQlpZiAoZHVwbGV4KQotCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOwotCXdyaXRlbChmbG93LCBpb2FkZHIgKyBNQUNfRkxPV19DVFJMKTsKLQotCXJldHVybjsKLX0KLQotLyogTm8gUE1UIG1vZHVsZSBzdXBwb3J0ZWQgaW4gb3VyIFNvQyAgZm9yIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLiAqLwotc3RhdGljIHZvaWQgbWFjMTAwX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCi0JCQkJaW50IGRpc2FibGVfcnhfaWMpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLnJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzJLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEucnguZW5kX3JpbmcgPSAxOwotCQlpZiAoZGlzYWJsZV9yeF9pYykKLQkJCXAtPmRlczAxLnJ4LmRpc2FibGVfaWMgPSAxOwotCQlwKys7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS50eC5lbmRfcmluZyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS50eC5vd247Ci19Ci0KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnJ4Lm93bjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEucngub3duID0gMTsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50OwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlpbnQgdGVyID0gcC0+ZGVzMDEudHguZW5kX3Jpbmc7Ci0KLQkvKiBjbGVhbiBmaWVsZCB1c2VkIHdpdGhpbiB0aGUgeG1pdCAqLwotCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSAwOwotCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDA7Ci0JcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gMDsKLQotCS8qIGNsZWFuIHN0YXR1cyByZXBvcnRlZCAqLwotCXAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkgPSAwOwotCXAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvciA9IDA7Ci0JcC0+ZGVzMDEudHgubm9fY2FycmllciA9IDA7Ci0JcC0+ZGVzMDEudHgubG9zc19jYXJyaWVyID0gMDsKLQlwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwgPSAwOwotCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zID0gMDsKLQlwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbiA9IDA7Ci0JcC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwgPSAwOwotCXAtPmRlczAxLnR4LmRlZmVycmVkID0gMDsKLQotCS8qIHNldCB0ZXJtaW5hdGlvbiBmaWVsZCAqLwotCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gdGVyOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAotCQkJCSAgIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOwotCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAxOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEucnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBtYWMxMDBfZHJpdmVyID0gewotCS5jb3JlX2luaXQgPSBtYWMxMDBfY29yZV9pbml0LAotCS5kdW1wX21hY19yZWdzID0gbWFjMTAwX2R1bXBfbWFjX3JlZ3MsCi0JLmRtYV9pbml0ID0gbWFjMTAwX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gbWFjMTAwX2R1bXBfZG1hX3JlZ3MsCi0JLmRtYV9tb2RlID0gbWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSwKLQkuZG1hX2RpYWdub3N0aWNfZnIgPSBtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzLAotCS5yeF9zdGF0dXMgPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKLQkuZ2V0X3R4X2xlbiA9IG1hYzEwMF9nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gbWFjMTAwX3NldF9maWx0ZXIsCi0JLmZsb3dfY3RybCA9IG1hYzEwMF9mbG93X2N0cmwsCi0JLnBtdCA9IG1hYzEwMF9wbXQsCi0JLmluaXRfcnhfZGVzYyA9IG1hYzEwMF9pbml0X3J4X2Rlc2MsCi0JLmluaXRfdHhfZGVzYyA9IG1hYzEwMF9pbml0X3R4X2Rlc2MsCi0JLmdldF90eF9vd25lciA9IG1hYzEwMF9nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IG1hYzEwMF9nZXRfcnhfb3duZXIsCi0JLnJlbGVhc2VfdHhfZGVzYyA9IG1hYzEwMF9yZWxlYXNlX3R4X2Rlc2MsCi0JLnByZXBhcmVfdHhfZGVzYyA9IG1hYzEwMF9wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gbWFjMTAwX2NsZWFyX3R4X2ljLAotCS5jbG9zZV90eF9kZXNjID0gbWFjMTAwX2Nsb3NlX3R4X2Rlc2MsCi0JLmdldF90eF9scyA9IG1hYzEwMF9nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IG1hYzEwMF9zZXRfdHhfb3duZXIsCi0JLnNldF9yeF9vd25lciA9IG1hYzEwMF9zZXRfcnhfb3duZXIsCi0JLmdldF9yeF9mcmFtZV9sZW4gPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gbWFjMTAwX2lycV9zdGF0dXMsCi0JLnNldF91bWFjX2FkZHIgPSBtYWMxMDBfc2V0X3VtYWNfYWRkciwKLQkuZ2V0X3VtYWNfYWRkciA9IG1hYzEwMF9nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCXByX2luZm8oIlx0TUFDIDEwLzEwMFxuIik7Ci0KLQltYWMtPm9wcyA9ICZtYWMxMDBfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX05PVF9TVVBQT1JURUQ7Ci0JbWFjLT5ody5saW5rLnBvcnQgPSBNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gTUFDX0NPTlRST0xfRjsKLQltYWMtPmh3Lmxpbmsuc3BlZWQgPSAwOwotCW1hYy0+aHcubWlpLmFkZHIgPSBNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IE1BQ19NSUlfREFUQTsKLQotCXJldHVybiBtYWM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKaW5kZXggNmQyZWFlMy4uYmEzNWU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApAQCAtMjAsNyArMjAsOCBAQAogICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSJPY3RfMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiSmFuXzIwMTAiCisjaW5jbHVkZSA8bGludXgvc3RtbWFjLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKICNkZWZpbmUgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKQEAgLTU3LDcgKzU4LDcgQEAKIAlpbnQgcnhfY3N1bTsKIAl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zejsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjX3R5cGU7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHc7CiAKIAlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzIHhzdGF0czsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKQEAgLTY5LDYgKzcwLDcgQEAKIAlpbnQgcGh5X21hc2s7CiAJaW50ICgqcGh5X3Jlc2V0KSAodm9pZCAqcHJpdik7CiAJdm9pZCAoKmZpeF9tYWNfc3BlZWQpICh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOworCXZvaWQgKCpidXNfc2V0dXApKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKIAl2b2lkICpic3BfcHJpdjsKIAogCWludCBwaHlfaXJxOwpAQCAtOTMsNiArOTUsMjggQEAKICNlbmRpZgogfTsKIAorI2lmZGVmIENPTkZJR19TVE1fRFJJVkVSUworI2luY2x1ZGUgPGxpbnV4L3N0bS9wYWQuaD4KK3N0YXRpYyBpbmxpbmUgaW50IHN0bW1hY19jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIFBhZCByb3V0aW5nIHNldHVwICovCisJaWYgKElTX0VSUihkZXZtX3N0bV9wYWRfY2xhaW0oJnBkZXYtPmRldiwgcGxhdF9kYXQtPnBhZF9jb25maWcsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZXF1ZXN0IHBhZHMhXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc3RtbWFjX2NsYWltX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGV4dGVybiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKaW5kZXggNjk0ZWJlNi4uYzAyMWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAogI2luY2x1ZGUgInN0bW1hYy5oIgorI2luY2x1ZGUgImR3bWFjX2RtYS5oIgogCiAjZGVmaW5lIFJFR19TUEFDRV9TSVpFCTB4MTA1NAogI2RlZmluZSBNQUMxMDBfRVRIVE9PTF9OQU1FCSJzdF9tYWMxMDAiCkBAIC02MSw3ICs2Miw3IEBACiAJU1RNTUFDX1NUQVQocnhfdG9vbG9uZyksCiAJU1RNTUFDX1NUQVQocnhfY29sbGlzaW9uKSwKIAlTVE1NQUNfU1RBVChyeF9jcmMpLAotCVNUTU1BQ19TVEFUKHJ4X2xlbmdodCksCisJU1RNTUFDX1NUQVQocnhfbGVuZ3RoKSwKIAlTVE1NQUNfU1RBVChyeF9taWkpLAogCVNUTU1BQ19TVEFUKHJ4X211bHRpY2FzdCksCiAJU1RNTUFDX1NUQVQocnhfZ21hY19vdmVyZmxvdyksCkBAIC0yNjgsOCArMjY5LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmV0ZGV2LT5iYXNlX2FkZHI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAotCQkJCQkgICAgICAgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CisJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAorCQkJCQkgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjgzLDggKzI4NCw4IEBACiAJaW50IGk7CiAKIAkvKiBVcGRhdGUgSFcgc3RhdHMgaWYgc3VwcG9ydGVkICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX2RpYWdub3N0aWNfZnIoJmRldi0+c3RhdHMsICZwcml2LT54c3RhdHMsCi0JCQkJCSAgICAgICBpb2FkZHIpOworCXByaXYtPmh3LT5kbWEtPmRtYV9kaWFnbm9zdGljX2ZyKCZkZXYtPnN0YXRzLCAodm9pZCAqKSAmcHJpdi0+eHN0YXRzLAorCQkJCQkgaW9hZGRyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTVE1NQUNfU1RBVFNfTEVOOyBpKyspIHsKIAkJY2hhciAqcCA9IChjaGFyICopcHJpdiArIHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggNTA4ZmJhOC4uYTY3MzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0bS9zb2MuaD4KICNpbmNsdWRlICJzdG1tYWMuaCIKIAogI2RlZmluZSBTVE1NQUNfUkVTT1VSQ0VfTkFNRQkic3RtbWFjZXRoIgpAQCAtMjI2LDQxICsyMjQsMzggQEAKIAkJaWYgKHBoeWRldi0+ZHVwbGV4ICE9IHByaXYtPm9sZGR1cGxleCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKLQkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5kdXBsZXg7CisJCQkJY3RybCAmPSB+cHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJZWxzZQotCQkJCWN0cmwgfD0gcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuZHVwbGV4OworCQkJCWN0cmwgfD0gcHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJcHJpdi0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CiAJCX0KIAkJLyogRmxvdyBDb250cm9sIG9wZXJhdGlvbiAqLwogCQlpZiAocGh5ZGV2LT5wYXVzZSkKLQkJCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAotCQkJCQkJICAgICAgIGZjLCBwYXVzZV90aW1lKTsKKwkJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAorCQkJCQkJIGZjLCBwYXVzZV90aW1lKTsKIAogCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBwcml2LT5zcGVlZCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgewogCQkJY2FzZSAxMDAwOgogCQkJCWlmIChsaWtlbHkocHJpdi0+aXNfZ21hYykpCi0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDEwMDoKIAkJCWNhc2UgMTA6CiAJCQkJaWYgKHByaXYtPmlzX2dtYWMpIHsKLQkJCQkJY3RybCB8PSBwcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCQljdHJsIHw9IHByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCkgewotCQkJCQkJY3RybCB8PQotCQkJCQkJICAgIHByaXYtPm1hY190eXBlLT5ody5saW5rLgotCQkJCQkJICAgIHNwZWVkOworCQkJCQkJY3RybCB8PSBwcml2LT5ody0+bGluay5zcGVlZDsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCWN0cmwgJj0KLQkJCQkJCSAgICB+KHByaXYtPm1hY190eXBlLT5ody4KLQkJCQkJCSAgICAgIGxpbmsuc3BlZWQpOworCQkJCQkJY3RybCAmPSB+KHByaXYtPmh3LT5saW5rLnNwZWVkKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJfQotCQkJCXByaXYtPmZpeF9tYWNfc3BlZWQocHJpdi0+YnNwX3ByaXYsCi0JCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CisJCQkJaWYgKGxpa2VseShwcml2LT5maXhfbWFjX3NwZWVkKSkKKwkJCQkJcHJpdi0+Zml4X21hY19zcGVlZChwcml2LT5ic3BfcHJpdiwKKwkJCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKQEAgLTMwNSw4ICszMDAsOCBAQAogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CS8qIFBIWSB0byBjb25uZWN0ICovCi0JY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOworCWNoYXIgcGh5X2lkW01JSV9CVVNfSURfU0laRSArIDNdOworCWNoYXIgYnVzX2lkW01JSV9CVVNfSURfU0laRV07CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5zcGVlZCA9IDA7CkBAIC0zMTgsNyArMzEzLDggQEAKIAl9CiAKIAlzbnByaW50ZihidXNfaWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKLQlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULCBidXNfaWQsIHByaXYtPnBoeV9hZGRyKTsKKwlzbnByaW50ZihwaHlfaWQsIE1JSV9CVVNfSURfU0laRSArIDMsIFBIWV9JRF9GTVQsIGJ1c19pZCwKKwkJIHByaXYtPnBoeV9hZGRyKTsKIAlwcl9kZWJ1Zygic3RtbWFjX2luaXRfcGh5OiAgdHJ5aW5nIHRvIGF0dGFjaCB0byAlc1xuIiwgcGh5X2lkKTsKIAogCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmc3RtbWFjX2FkanVzdF9saW5rLCAwLApAQCAtNTA4LDggKzUwNCw4IEBACiAJcHJpdi0+Y3VyX3R4ID0gMDsKIAogCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHJ4c2l6ZSwgZGlzX2ljKTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCB0eHNpemUpOworCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCByeHNpemUsIGRpc19pYyk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CiAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKSB7CiAJCXByX2luZm8oIlJYIGRlc2NyaXB0b3IgcmluZzpcbiIpOwpAQCAtNTQ0LDggKzU0MCw4IEBACiAJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBpOwogCQkJaWYgKHAtPmRlczIpCiAJCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHAtPmRlczIsCi0JCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCi0JCQkJIERNQV9UT19ERVZJQ0UpOworCQkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKIAkJCXByaXYtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KQEAgLTU3NSw1MCArNTcxLDYgQEAKIH0KIAogLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3R4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSB0eCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0JdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOwotCXJldHVybjsKLX0KLQotLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3J4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSByeCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSAmPSB+RE1BX0NPTlRST0xfU1I7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgogICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGUKICAqICBAcHJpdiA6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZS4KICAqICBEZXNjcmlwdGlvbjogaXQgc2V0cyB0aGUgRE1BIG9wZXJhdGlvbiBtb2RlOiB0eC9yeCBETUEgdGhyZXNob2xkcwpAQCAtNjI5LDE4ICs1ODEsMTggQEAKIHsKIAlpZiAoIXByaXYtPmlzX2dtYWMpIHsKIAkJLyogTUFDIDEwLzEwMCAqLwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOworCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOwogCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCX0gZWxzZSB7CiAJCWlmICgocHJpdi0+ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKSAmJiAodHhfY29lKSkgewotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCQlTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOwogCQkJdGMgPSBTRl9ETUFfTU9ERTsKIAkJCXByaXYtPnR4X2NvZSA9IEhXX0NTVU07CiAJCX0gZWxzZSB7CiAJCQkvKiBDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc29mdHdhcmUuICovCi0JCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCisJCQkJCQlTRl9ETUFfTU9ERSk7CiAJCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCQl9CiAJfQpAQCAtNjQ5LDg4ICs2MDEsNiBAQAogCXJldHVybjsKIH0KIAotI2lmZGVmIFNUTU1BQ19ERUJVRwotLyoqCi0gKiBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUKLSAqIEBzdGF0dXM6IHR4IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkCi0gKiBEZXNjcmlwdGlvbjogaXQgc2hvd3MgdGhlIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgZm9yIENTUjVbMjI6MjBdCi0gKi8KLXN0YXRpYyB2b2lkIHNob3dfdHhfcHJvY2Vzc19zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdHVzKQotewotCXVuc2lnbmVkIGludCBzdGF0ZTsKLQlzdGF0ZSA9IChzdGF0dXMgJiBETUFfU1RBVFVTX1RTX01BU0spID4+IERNQV9TVEFUVVNfVFNfU0hJRlQ7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSAwOgotCQlwcl9pbmZvKCItIFRYIChTdG9wcGVkKTogUmVzZXQgb3IgU3RvcCBjb21tYW5kXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTpGZXRjaGluZyB0aGUgVHggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIGVuZCBvZiB0eFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFJlYWRpbmcgdGhlIGRhdGEgIgotCQkgICAgICAgImFuZCBxdWV1aW5nIHRoZSBkYXRhIGludG8gdGhlIFR4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBUWCAoU3VzcGVuZGVkKTogVHggQnVmZiBVbmRlcmZsb3cgIgotCQkgICAgICAgIm9yIGFuIHVuYXZhaWxhYmxlIFRyYW5zbWl0IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBDbG9zaW5nIFR4IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKioKLSAqIHNob3dfcnhfcHJvY2Vzc19zdGF0ZQotICogQHN0YXR1czogcnggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKLSAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsxOToxN10KLSAqLwotc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCi17Ci0JdW5zaWduZWQgaW50IHN0YXRlOwotCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIDA6Ci0JCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCi0JCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgotCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KIC8qKgogICogc3RtbWFjX3R4OgogICogQHByaXY6IHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZQpAQCAtNzQ4LDE2ICs2MTgsMTYgQEAKIAkJc3RydWN0IGRtYV9kZXNjICpwID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CiAKIAkJLyogQ2hlY2sgaWYgdGhlIGRlc2NyaXB0b3IgaXMgb3duZWQgYnkgdGhlIERNQS4gKi8KLQkJaWYgKHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9vd25lcihwKSkKKwkJaWYgKHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfb3duZXIocCkpCiAJCQlicmVhazsKIAogCQkvKiBWZXJpZnkgdHggZXJyb3IgYnkgbG9va2luZyBhdCB0aGUgbGFzdCBzZWdtZW50ICovCi0JCWxhc3QgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdHhfbHMocCk7CisJCWxhc3QgPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3R4X2xzKHApOwogCQlpZiAobGlrZWx5KGxhc3QpKSB7CiAJCQlpbnQgdHhfZXJyb3IgPQotCQkJICAgIHByaXYtPm1hY190eXBlLT5vcHMtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgICAmcHJpdi0+eHN0YXRzLAotCQkJCQkJCSAgIHAsIGlvYWRkcik7CisJCQkJcHJpdi0+aHctPmRlc2MtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCQkgICZwcml2LT54c3RhdHMsIHAsCisJCQkJCQkJICBpb2FkZHIpOwogCQkJaWYgKGxpa2VseSh0eF9lcnJvciA9PSAwKSkgewogCQkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCXByaXYtPnhzdGF0cy50eF9wa3RfbisrOwpAQCAtNzY5LDcgKzYzOSw3IEBACiAKIAkJaWYgKGxpa2VseShwLT5kZXMyKSkKIAkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwLT5kZXMyLAotCQkJCQkgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xlbihwKSwKKwkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAogCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCWlmICh1bmxpa2VseShwLT5kZXMzKSkKIAkJCXAtPmRlczMgPSAwOwpAQCAtNzkwLDcgKzY2MCw3IEBACiAJCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJfQogCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPnJlbGVhc2VfdHhfZGVzYyhwKTsKKwkJcHJpdi0+aHctPmRlc2MtPnJlbGVhc2VfdHhfZGVzYyhwKTsKIAogCQllbnRyeSA9ICgrK3ByaXYtPmRpcnR5X3R4KSAlIHR4c2l6ZTsKIAl9CkBAIC04MTQsNyArNjg0LDcgQEAKIAkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOworCQlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX2lycShwcml2LT5kZXYtPmJhc2VfYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZGlzYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODI0LDcgKzY5NCw3IEBACiAJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKwkJcHJpdi0+aHctPmRtYS0+ZGlzYWJsZV9kbWFfaXJxKHByaXYtPmRldi0+YmFzZV9hZGRyKTsKIH0KIAogc3RhdGljIGludCBzdG1tYWNfaGFzX3dvcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODMyLDcgKzcwMiw3IEBACiAJdW5zaWduZWQgaW50IGhhc193b3JrID0gMDsKIAlpbnQgcnhyZXQsIHR4X3dvcmsgPSAwOwogCi0JcnhyZXQgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKKwlyeHJldCA9IHByaXYtPmh3LT5kZXNjLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKIAkJKHByaXYtPmN1cl9yeCAlIHByaXYtPmRtYV9yeF9zaXplKSk7CiAKIAlpZiAocHJpdi0+ZGlydHlfdHggIT0gcHJpdi0+Y3VyX3R4KQpAQCAtODgzLDEyICs3NTMsMTIgQEAKIHsKIAluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CiAKLQlzdG1tYWNfZG1hX3N0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOwogCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfc2l6ZSk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9zaXplKTsKIAlwcml2LT5kaXJ0eV90eCA9IDA7CiAJcHJpdi0+Y3VyX3R4ID0gMDsKLQlzdG1tYWNfZG1hX3N0YXJ0X3R4KHByaXYtPmRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF90eChwcml2LT5kZXYtPmJhc2VfYWRkcik7CiAKIAlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKQEAgLTg5Niw5NSArNzY2LDI3IEBACiAJcmV0dXJuOwogfQogCi0vKioKLSAqIHN0bW1hY19kbWFfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIKLSAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBEZXNjcmlwdGlvbjogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIgKERNQSkuCi0gKi8KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLwotCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gcHJpdi0+ZGV2LT5iYXNlX2FkZHI7CisJaW50IHN0YXR1czsKIAotCURCRyhpbnRyLCBJTkZPLCAiJXM6IFtDU1I1OiAweCUwOHhdXG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCXN0YXR1cyA9IHByaXYtPmh3LT5kbWEtPmRtYV9pbnRlcnJ1cHQocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCSAgICAgICZwcml2LT54c3RhdHMpOworCWlmIChsaWtlbHkoc3RhdHVzID09IGhhbmRsZV90eF9yeCkpCisJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7CiAKLSNpZmRlZiBTVE1NQUNfREVCVUcKLQkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHRyYW5zbWl0IHByb2Nlc3Mgc3RhdGUgKENTUjUgcmVnaXN0ZXIpICovCi0JaWYgKG5ldGlmX21zZ190eF9kb25lKHByaXYpKQotCQlzaG93X3R4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKHByaXYpKQotCQlzaG93X3J4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotI2VuZGlmCi0JLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgewotCQlEQkcoaW50ciwgSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOwotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1VORikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgdW5kZXJmbG93XG4iKTsKLQkJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKLQkJCQkvKiBUcnkgdG8gYnVtcCB1cCB0aGUgdGhyZXNob2xkICovCi0JCQkJdGMgKz0gNjQ7Ci0JCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUoaW9hZGRyLCB0YywKLQkJCQkJICAgICAgU0ZfRE1BX01PREUpOwotCQkJCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKLQkJCX0KLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCQlwcml2LT54c3RhdHMudHhfdW5kZWZsb3dfaXJxKys7CisJZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IHR4X2hhcmRfZXJyb3JfYnVtcF90YykpIHsKKwkJLyogVHJ5IHRvIGJ1bXAgdXAgdGhlIGRtYSB0aHJlc2hvbGQgb24gdGhpcyBmYWlsdXJlICovCisJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKKwkJCXRjICs9IDY0OworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUoaW9hZGRyLCB0YywgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOwogCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVEpUKSkgewotCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBqYWJiZXJcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnR4X2phYmJlcl9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfb3ZlcmZsb3dfaXJxKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SVSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSBidWZmZXIgdW5hdmFpbGFibGVcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnJ4X2J1Zl91bmF2X2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlBTKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKLQkJCXByaXYtPnhzdGF0cy5yeF93YXRjaGRvZ19pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9lYXJseV9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RQUykpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7Ci0JCQlzdG1tYWNfdHhfZXJyKHByaXYpOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgewotCQkJREJHKGludHIsIElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOwotCQkJcHJpdi0+eHN0YXRzLmZhdGFsX2J1c19lcnJvcl9pcnErKzsKLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCX0KLQl9Ci0KLQkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7Ci0JCXByaXYtPnhzdGF0cy5ub3JtYWxfaXJxX24rKzsKLQkJaWYgKGxpa2VseSgoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JJKSB8fAotCQkJIChpbnRyX3N0YXR1cyAmIChETUFfU1RBVFVTX1RJKSkpKQotCQkJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7Ci0JfQotCi0JLyogT3B0aW9uYWwgaGFyZHdhcmUgYmxvY2tzLCBpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmCi0JCSAgICAgKERNQV9TVEFUVVNfR1BJIHwgRE1BX1NUQVRVU19HTUkgfCBETUFfU1RBVFVTX0dMSSkpKQotCQlwcl9pbmZvKCIlczogdW5leHBlY3RlZCBzdGF0dXMgJTA4eFxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKLQotCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KLQl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOwotCi0JREJHKGludHIsIElORk8sICJcblxuIik7CisJCXN0bW1hY190eF9lcnIocHJpdik7CisJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gdHhfaGFyZF9lcnJvcikpCisJCXN0bW1hY190eF9lcnIocHJpdik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMDU4LDE3ICs4NjAsMjAgQEAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7CiAKIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCi0JaWYgKHVubGlrZWx5KHByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9pbml0KGlvYWRkciwKLQkJcHJpdi0+cGJsLCBwcml2LT5kbWFfdHhfcGh5LCBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CisJaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQoaW9hZGRyLCBwcml2LT5wYmwsIHByaXYtPmRtYV90eF9waHksCisJCQkJCSBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CiAKIAkJcHJfZXJyKCIlczogRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ29weSB0aGUgTUFDIGFkZHIgaW50byB0aGUgSFcgICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3VtYWNfYWRkcihpb2FkZHIsIGRldi0+ZGV2X2FkZHIsIDApOworCXByaXYtPmh3LT5tYWMtPnNldF91bWFjX2FkZHIoaW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKwkvKiBJZiByZXF1aXJlZCwgcGVyZm9ybSBodyBzZXR1cCBvZiB0aGUgYnVzLiAqLworCWlmIChwcml2LT5idXNfc2V0dXApCisJCXByaXYtPmJ1c19zZXR1cChpb2FkZHIpOwogCS8qIEluaXRpYWxpemUgdGhlIE1BQyBDb3JlICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y29yZV9pbml0KGlvYWRkcik7CisJcHJpdi0+aHctPm1hYy0+Y29yZV9pbml0KGlvYWRkcik7CiAKIAlwcml2LT5zaHV0ZG93biA9IDA7CiAKQEAgLTEwODksMTYgKzg5NCwxNiBAQAogCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCURCRyhwcm9iZSwgREVCVUcsICIlczogRE1BIFJYL1RYIHByb2Nlc3NlcyBzdGFydGVkLi4uXG4iLCBkZXYtPm5hbWUpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwogI2VuZGlmCiAJLyogRHVtcCBETUEvTUFDIHJlZ2lzdGVycyAqLwogCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9tYWNfcmVncyhpb2FkZHIpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kdW1wX2RtYV9yZWdzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmR1bXBfcmVncyhpb2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5kdW1wX3JlZ3MoaW9hZGRyKTsKIAl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2KQpAQCAtMTE0Miw4ICs5NDcsOCBAQAogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJLyogU3RvcCBUWC9SWCBETUEgYW5kIGNsZWFyIHRoZSBkZXNjcmlwdG9ycyAqLwotCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAogCS8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqLwogCWZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYpOwpAQCAtMTIxNCw4ICsxMDE5LDggQEAKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQkgICAgQlVGX1NJWkVfOEtpQiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIEJVRl9TSVpFXzhLaUIsCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBCVUZfU0laRV84S2lCLAorCQkJCQkJY3N1bV9pbnNlcnRpb24pOwogCiAJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKIAkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OwpAQCAtMTIyNCwxNiArMTAyOSwxNiBAQAogCQkJCQlza2ItPmRhdGEgKyBCVUZfU0laRV84S2lCLAogCQkJCQlidWYyX3NpemUsIERNQV9UT19ERVZJQ0UpOwogCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAwLAotCQkJCQkJICAgICBidWYyX3NpemUsIGNzdW1faW5zZXJ0aW9uKTsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3R4X293bmVyKGRlc2MpOworCQlwcml2LT5ody0+ZGVzYy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGJ1ZjJfc2l6ZSwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihkZXNjKTsKIAkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIG5vcGFnZWRfbGVuLAotCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCisJCQkJCQljc3VtX2luc2VydGlvbik7CiAJfQogCXJldHVybiBlbnRyeTsKIH0KQEAgLTEzMDEsOCArMTEwNiw4IEBACiAJCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKIAkJCQkJbm9wYWdlZF9sZW4sIERNQV9UT19ERVZJQ0UpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKQEAgLTEzMTcsMjEgKzExMjIsMjAgQEAKIAkJCQkJICBmcmFnLT5wYWdlX29mZnNldCwKIAkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGxlbiwKLQkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwgbGVuLCBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5zZXRfdHhfb3duZXIoZGVzYyk7CiAJfQogCiAJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworCXByaXYtPmh3LT5kZXNjLT5jbG9zZV90eF9kZXNjKGRlc2MpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVyICovCiAJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5jbGVhcl90eF9pYyhkZXNjKTsKICNlbmRpZgogCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CisJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihmaXJzdCk7CiAKIAlwcml2LT5jdXJfdHgrKzsKIApAQCAtMTM1Myw4ICsxMTU3LDcgQEAKIAogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQkvKiBDU1IxIGVuYWJsZXMgdGhlIHRyYW5zbWl0IERNQSB0byBjaGVjayBmb3IgbmV3IGRlc2NyaXB0b3IgKi8KLQl3cml0ZWwoMSwgZGV2LT5iYXNlX2FkZHIgKyBETUFfWE1UX1BPTExfREVNQU5EKTsKKwlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX3RyYW5zbWlzc2lvbihkZXYtPmJhc2VfYWRkcik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTM5MSw3ICsxMTk0LDcgQEAKIAkJCX0KIAkJCVJYX0RCRyhLRVJOX0lORk8gIlx0cmVmaWxsIGVudHJ5ICMlZFxuIiwgZW50cnkpOwogCQl9Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF9yeF9vd25lcihwICsgZW50cnkpOworCQlwcml2LT5ody0+ZGVzYy0+c2V0X3J4X293bmVyKHAgKyBlbnRyeSk7CiAJfQogCXJldHVybjsKIH0KQEAgLTE0MTIsNyArMTIxNSw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgPSAwOwotCXdoaWxlICghcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X293bmVyKHApKSB7CisJd2hpbGUgKCFwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X293bmVyKHApKSB7CiAJCWludCBzdGF0dXM7CiAKIAkJaWYgKGNvdW50ID49IGxpbWl0KQpAQCAtMTQyNSwxNSArMTIyOCwxNCBAQAogCQlwcmVmZXRjaChwX25leHQpOwogCiAJCS8qIHJlYWQgdGhlIHN0YXR1cyBvZiB0aGUgaW5jb21pbmcgZnJhbWUgKi8KLQkJc3RhdHVzID0gKHByaXYtPm1hY190eXBlLT5vcHMtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgJnByaXYtPnhzdGF0cywgcCkpOworCQlzdGF0dXMgPSAocHJpdi0+aHctPmRlc2MtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCSAgICAmcHJpdi0+eHN0YXRzLCBwKSk7CiAJCWlmICh1bmxpa2VseShzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkpCiAJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQllbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLwotCQkJaW50IGZyYW1lX2xlbiA9Ci0JCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisJCQlpbnQgZnJhbWVfbGVuID0gcHJpdi0+aHctPmRlc2MtPmdldF9yeF9mcmFtZV9sZW4ocCkgLSA0OwogCiAjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCiAJCQlpZiAoZnJhbWVfbGVuID4gRVRIX0ZSQU1FX0xFTikKQEAgLTE1NjksNyArMTM3MSw3IEBACiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X2ZpbHRlcihkZXYpOworCXByaXYtPmh3LT5tYWMtPnNldF9maWx0ZXIoZGV2KTsKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiAJcmV0dXJuOwogfQpAQCAtMTYyMyw5ICsxNDI1LDEwIEBACiAJaWYgKHByaXYtPmlzX2dtYWMpIHsKIAkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAkJLyogVG8gaGFuZGxlIEdNQUMgb3duIGludGVycnVwdHMgKi8KLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aG9zdF9pcnFfc3RhdHVzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmhvc3RfaXJxX3N0YXR1cyhpb2FkZHIpOwogCX0KLQlzdG1tYWNfZG1hX2ludGVycnVwdChkZXYpOworCisJc3RtbWFjX2RtYV9pbnRlcnJ1cHQocHJpdik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNzQ0LDcgKzE1NDcsNyBAQAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIHN0bW1hY19wb2xsLCA2NCk7CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisJcHJpdi0+aHctPm1hYy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCiAJCXByX3dhcm5pbmcoIlx0bm8gdmFsaWQgTUFDIGFkZHJlc3M7IgpAQCAtMTc3OSwxNiArMTU4MiwxNiBAQAogCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmRldmljZTsKIAogCWlmIChwcml2LT5pc19nbWFjKQotCQlkZXZpY2UgPSBnbWFjX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwMF9zZXR1cChpb2FkZHIpOwogCWVsc2UKLQkJZGV2aWNlID0gbWFjMTAwX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwX3NldHVwKGlvYWRkcik7CiAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5tYWNfdHlwZSA9IGRldmljZTsKKwlwcml2LT5odyA9IGRldmljZTsKIAotCXByaXYtPndvbGVuYWJsZWQgPSBwcml2LT5tYWNfdHlwZS0+aHcucG10OwkvKiBQTVQgc3VwcG9ydGVkICovCisJcHJpdi0+d29sZW5hYmxlZCA9IHByaXYtPmh3LT5wbXQ7CS8qIFBNVCBzdXBwb3J0ZWQgKi8KIAlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQogCQlwcml2LT53b2xvcHRzID0gV0FLRV9NQUdJQzsJCS8qIE1hZ2ljIEZyYW1lICovCiAKQEAgLTE3OTcsOCArMTYwMCw3IEBACiAKIHN0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0X3N0bW1hY3BoeV9kYXRhICpwbGF0X2RhdDsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCXByX2RlYnVnKCJzdG1tYWNwaHlfZHZyX3Byb2JlOiBhZGRlZCBwaHkgZm9yIGJ1cyAlZFxuIiwKIAkgICAgICAgcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xODMwLDkgKzE2MzIsNyBAQAogc3RhdGljIGludCBzdG1tYWNfYXNzb2NpYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gKHN0cnVjdCBzdG1tYWNfcHJpdiAqKWRhdGE7Ci0Jc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKnBsYXRfZGF0OwotCi0JcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlEQkcocHJvYmUsIERFQlVHLCAiJXM6IGNoZWNraW5nIHBoeSBmb3IgYnVzICVkXG4iLCBfX2Z1bmNfXywKIAkJcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xOTIyLDcgKzE3MjIsNyBAQAogCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlwcml2LT5kZXZpY2UgPSAmKHBkZXYtPmRldik7CiAJcHJpdi0+ZGV2ID0gbmRldjsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKikoKHBkZXYtPmRldikucGxhdGZvcm1fZGF0YSk7CisJcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOwogCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLwogCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KQEAgLTE5MzIsNiArMTczMiwxMSBAQAogCS8qIFNldCB0aGUgSS9PIGJhc2UgYWRkciAqLwogCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAKKwkvKiBWZXJpZnkgZW1iZWRkZWQgcmVzb3VyY2UgZm9yIHRoZSBwbGF0Zm9ybSAqLworCXJldCA9IHN0bW1hY19jbGFpbV9yZXNvdXJjZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKIAkvKiBNQUMgSFcgcmV2aWNlIGRldGVjdGlvbiAqLwogCXJldCA9IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKG5kZXYpOwogCWlmIChyZXQgPCAwKQpAQCAtMTk1Miw2ICsxNzU3LDcgQEAKIAl9CiAKIAlwcml2LT5maXhfbWFjX3NwZWVkID0gcGxhdF9kYXQtPmZpeF9tYWNfc3BlZWQ7CisJcHJpdi0+YnVzX3NldHVwID0gcGxhdF9kYXQtPmJ1c19zZXR1cDsKIAlwcml2LT5ic3BfcHJpdiA9IHBsYXRfZGF0LT5ic3BfcHJpdjsKIAogCXByX2luZm8oIlx0JXMgLSAoZGV2LiBuYW1lOiAlcyAtIGlkOiAlZCwgSVJRICMlZFxuIgpAQCAtMTk4NiwxMiArMTc5MiwxMyBAQAogc3RhdGljIGludCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlwcl9pbmZvKCIlczpcblx0cmVtb3ZpbmcgZHJpdmVyIiwgX19mdW5jX18pOwogCi0Jc3RtbWFjX2RtYV9zdG9wX3J4KG5kZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3R4KG5kZXYtPmJhc2VfYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChuZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgobmRldi0+YmFzZV9hZGRyKTsKIAogCXN0bW1hY19tYWNfZGlzYWJsZV9yeChuZGV2LT5iYXNlX2FkZHIpOwogCXN0bW1hY19tYWNfZGlzYWJsZV90eChuZGV2LT5iYXNlX2FkZHIpOwpAQCAtMjAzOCwyMSArMTg0NSwyMCBAQAogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCiAJCS8qIFN0b3AgVFgvUlggRE1BICovCi0JCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0JCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisJCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAkJLyogQ2xlYXIgdGhlIFJ4L1R4IGRlc2NyaXB0b3JzICovCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsCi0JCQkJCQkgIHByaXYtPmRtYV9yeF9zaXplLCBkaXNfaWMpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LAotCQkJCQkJICBwcml2LT5kbWFfdHhfc2l6ZSk7CisJCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfc2l6ZSwKKwkJCQkJICAgICBkaXNfaWMpOworCQlwcml2LT5ody0+ZGVzYy0+aW5pdF90eF9kZXNjKHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3NpemUpOwogCiAJCXN0bW1hY19tYWNfZGlzYWJsZV90eChkZXYtPmJhc2VfYWRkcik7CiAKIAkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCYocGRldi0+ZGV2KSkpIHsKIAkJCS8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovCiAJCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJCXByaXYtPm1hY190eXBlLT5vcHMtPnBtdChkZXYtPmJhc2VfYWRkciwKLQkJCQkJCQkgcHJpdi0+d29sb3B0cyk7CisJCQkJcHJpdi0+aHctPm1hYy0+cG10KGRldi0+YmFzZV9hZGRyLAorCQkJCQkJICAgcHJpdi0+d29sb3B0cyk7CiAJCX0gZWxzZSB7CiAJCQlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOwogCQl9CkBAIC0yMDkzLDE1ICsxODk5LDE1IEBACiAJICogZnJvbSBhbm90aGVyIGRldmljZXMgKGUuZy4gc2VyaWFsIGNvbnNvbGUpLiAqLwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmKHBkZXYtPmRldikpKQogCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cG10KGRldi0+YmFzZV9hZGRyLCAwKTsKKwkJCXByaXYtPmh3LT5tYWMtPnBtdChkZXYtPmJhc2VfYWRkciwgMCk7CiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKIAkvKiBFbmFibGUgdGhlIE1BQyBhbmQgRE1BICovCiAJc3RtbWFjX21hY19lbmFibGVfcngoaW9hZGRyKTsKIAlzdG1tYWNfbWFjX2VuYWJsZV90eChpb2FkZHIpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwppbmRleCA4NDk4NTUyLi5mZmZlMWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtMjQsNyArMjQsNiBAQAogICBNYWludGFpbmVyOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKQEAgLTQ4LDggKzQ3LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7Ci0JdW5zaWduZWQgaW50IG1paV9kYXRhID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5kYXRhOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPmh3LT5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5ody0+bWlpLmRhdGE7CiAKIAlpbnQgZGF0YTsKIAl1MTYgcmVnVmFsdWUgPSAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfApAQCAtODAsOCArNzksOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmRhdGE7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+aHctPm1paS5hZGRyOworCXVuc2lnbmVkIGludCBtaWlfZGF0YSA9IHByaXYtPmh3LT5taWkuZGF0YTsKIAogCXUxNiB2YWx1ZSA9CiAJICAgICgoKHBoeWFkZHIgPDwgMTEpICYgKDB4MDAwMEY4MDApKSB8ICgocGh5cmVnIDw8IDYpICYgKDB4MDAwMDA3QzApKSkKQEAgLTExMiw3ICsxMTEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5ody0+bWlpLmFkZHI7CiAKIAlpZiAocHJpdi0+cGh5X3Jlc2V0KSB7CiAJCXByX2RlYnVnKCJzdG1tYWNfbWRpb19yZXNldDogY2FsbGluZyBwaHlfcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jIGIvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCmluZGV4IGI0NDdhODcuLjJmNmE3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYworKysgYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKQEAgLTQxMyw4ICs0MTMsOCBAQAogCXZvbGF0aWxlIHN0cnVjdCBpYXNldHVwX2NtZF9zdHJ1Y3QgKmlhc19jbWQ7CiAJdm9sYXRpbGUgc3RydWN0IHRkcl9jbWRfc3RydWN0ICp0ZHJfY21kOwogCXZvbGF0aWxlIHN0cnVjdCBtY3NldHVwX2NtZF9zdHJ1Y3QgKm1jX2NtZDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaT1kZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycz1kZXYtPm1jX2NvdW50OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCWludCBudW1fYWRkcnM9bmV0ZGV2X21jX2NvdW50KGRldik7CiAKIAlwdHIgPSAodm9pZCAqKSAoKGNoYXIgKilwLT5zY2IgKyBzaXplb2Yoc3RydWN0IHNjYl9zdHJ1Y3QpKTsKIApAQCAtNTM2LDggKzUzNiwxMCBAQAogCQltY19jbWQtPmNtZF9saW5rID0gMHhmZmZmOwogCQltY19jbWQtPm1jX2NudCA9IHN3YWIxNihudW1fYWRkcnMgKiA2KTsKIAotCQlmb3IoaT0wO2k8bnVtX2FkZHJzO2krKyxkbWk9ZG1pLT5uZXh0KQotCQkJbWVtY3B5KChjaGFyICopIG1jX2NtZC0+bWNfbGlzdFtpXSwgZG1pLT5kbWlfYWRkciw2KTsKKwkJaSA9IDA7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQorCQkJbWVtY3B5KChjaGFyICopIG1jX2NtZC0+bWNfbGlzdFtpKytdLAorCQkJICAgICAgIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAogCQlwLT5zY2ItPmNibF9vZmZzZXQgPSBtYWtlMTYobWNfY21kKTsKIAkJcC0+c2NiLT5jbWRfY3VjID0gQ1VDX1NUQVJUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwppbmRleCAwY2E0MjQxLi45OTk5ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJCVJFR0EoIENTUjE1ICkgPSAweDgwMDA7IC8qIFNldCBwcm9taXNjdW91cyBtb2RlICovCiAJfSBlbHNlIHsKIAkJc2hvcnQgbXVsdGljYXN0X3RhYmxlWzRdOwotCQlpbnQgbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKwkJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCQlpbnQgaTsKIAkJLyogV2UgZG9uJ3QgdXNlIHRoZSBtdWx0aWNhc3QgdGFibGUsIGJ1dCByZWx5IG9uIHVwcGVyLWxheWVyCiAJCSAqIGZpbHRlcmluZy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCAyNWU4MWViLi5hMGJkMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC05OTksNyArOTk5LDcgQEAKIHsKIAlzdHJ1Y3QgYmlnbWFjICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICpicmVncyA9IGJwLT5icmVnczsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKIAlpbnQgaTsKIAl1MzIgdG1wLCBjcmM7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCXdoaWxlICgoc2J1c19yZWFkbChicmVncyArIEJNQUNfUlhDRkcpICYgQklHTUFDX1JYQ0ZHX0VOQUJMRSkgIT0gMCkKIAkJdWRlbGF5KDIwKTsKIAotCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA2NCkpIHsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQlzYnVzX3dyaXRlbCgweGZmZmYsIGJyZWdzICsgQk1BQ19IVEFCTEUwKTsKIAkJc2J1c193cml0ZWwoMHhmZmZmLCBicmVncyArIEJNQUNfSFRBQkxFMSk7CiAJCXNidXNfd3JpdGVsKDB4ZmZmZiwgYnJlZ3MgKyBCTUFDX0hUQUJMRTIpOwpAQCAtMTAyOCw5ICsxMDI4LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJCWhhc2hfdGFibGVbaV0gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKIAogCQkJaWYgKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwppbmRleCBkNThlMTg5Li5hODU1OTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogI2RlZmluZSBVU0VfSU9fT1BTIDEKICNlbmRpZgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3VuZGFuY2VfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHN1bmRhbmNlX3BjaV90YmwpID0gewogCXsgMHgxMTg2LCAweDEwMDIsIDB4MTE4NiwgMHgxMDAyLCAwLCAwLCAwIH0sCiAJeyAweDExODYsIDB4MTAwMiwgMHgxMTg2LCAweDEwMDMsIDAsIDAsIDEgfSwKIAl7IDB4MTE4NiwgMHgxMDAyLCAweDExODYsIDB4MTAxMiwgMCwgMCwgMiB9LApAQCAtMTUxNywxOSArMTUxNywxOCBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdEFsbCB8IEFjY2VwdE15UGh5czsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50KSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCWludCBiaXQ7CiAJCWludCBpbmRleDsKIAkJaW50IGNyYzsKIAkJbWVtc2V0IChtY19maWx0ZXIsIDAsIHNpemVvZiAobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQljcmMgPSBldGhlcl9jcmNfbGUgKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKTsKIAkJCWZvciAoaW5kZXg9MCwgYml0PTA7IGJpdCA8IDY7IGJpdCsrLCBjcmMgPDw9IDEpCiAJCQkJaWYgKGNyYyAmIDB4ODAwMDAwMDApIGluZGV4IHw9IDEgPDwgYml0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBiNTcxYTFiLi40MzQ0MDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIEdFTV9NT0RVTEVfTkFNRQkiZ2VtIgogI2RlZmluZSBQRlggR0VNX01PRFVMRV9OQU1FICI6ICIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGdlbV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZ2VtX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9TVU4sIFBDSV9ERVZJQ0VfSURfU1VOX0dFTSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCkBAIC0xODM3LDcgKzE4MzcsNyBAQAogCWludCBpOwogCiAJaWYgKChncC0+ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgKGdwLT5kZXYtPm1jX2NvdW50ID4gMjU2KSkgeworCSAgICAobmV0ZGV2X21jX2NvdW50KGdwLT5kZXYpID4gMjU2KSkgewogCSAgICAJZm9yIChpPTA7IGk8MTY7IGkrKykKIAkJCXdyaXRlbCgweGZmZmYsIGdwLT5yZWdzICsgTUFDX0hBU0gwICsgKGkgPDwgMikpOwogCQlyeGNmZyB8PSBNQUNfUlhDRkdfSEZFOwpAQCAtMTg0NiwxNyArMTg0NiwxMyBAQAogCX0gZWxzZSB7CiAJCXUxNiBoYXNoX3RhYmxlWzE2XTsKIAkJdTMyIGNyYzsKLQkJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBncC0+ZGV2LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCQloYXNoX3RhYmxlW2ldID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZ3AtPmRldi0+bWNfY291bnQ7IGkrKykgeworCQltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBncC0+ZGV2KSB7CiAJCQljaGFyICphZGRycyA9IGRtaS0+ZG1pX2FkZHI7CiAKLQkJCWRtaSA9IGRtaS0+bmV4dDsKLQogCQkJaWYgKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggNjc2MmYxYy4uYjE3ZGJiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCkBAIC0xNTE2LDI0ICsxNTE2LDIwIEBACiAKIAlITUQoKCJodGFibGUsICIpKTsKIAlpZiAoKGhwLT5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgICAoaHAtPmRldi0+bWNfY291bnQgPiA2NCkpIHsKKwkgICAgKG5ldGRldl9tY19jb3VudChocC0+ZGV2KSA+IDY0KSkgewogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTAsIDB4ZmZmZik7CiAJCWhtZV93cml0ZTMyKGhwLCBicmVncyArIEJNQUNfSFRBQkxFMSwgMHhmZmZmKTsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUyLCAweGZmZmYpOwogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTMsIDB4ZmZmZik7CiAJfSBlbHNlIGlmICgoaHAtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPT0gMCkgewogCQl1MTYgaGFzaF90YWJsZVs0XTsKLQkJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBocC0+ZGV2LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJY2hhciAqYWRkcnM7Ci0JCWludCBpOwogCQl1MzIgY3JjOwogCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQloYXNoX3RhYmxlW2ldID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgaHAtPmRldi0+bWNfY291bnQ7IGkrKykgeworCQltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBocC0+ZGV2KSB7CiAJCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJCWlmICghKCphZGRycyAmIDEpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjM2NiwxNCArMjM2MiwxMyBAQAogewogCXN0cnVjdCBoYXBweV9tZWFsICpocCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICpicmVncyA9IGhwLT5iaWdtYWNyZWdzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWNoYXIgKmFkZHJzOwotCWludCBpOwogCXUzMiBjcmM7CiAKIAlzcGluX2xvY2tfaXJxKCZocC0+aGFwcHlfbG9jayk7CiAKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gNjQpKSB7CisJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAobmV0ZGV2X21jX2NvdW50KGRldikgPiA2NCkpIHsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUwLCAweGZmZmYpOwogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTEsIDB4ZmZmZik7CiAJCWhtZV93cml0ZTMyKGhwLCBicmVncyArIEJNQUNfSFRBQkxFMiwgMHhmZmZmKTsKQEAgLTIzODQsMTIgKzIzNzksOSBAQAogCX0gZWxzZSB7CiAJCXUxNiBoYXNoX3RhYmxlWzRdOwogCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQloYXNoX3RhYmxlW2ldID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKQEAgLTMyMTEsNyArMzIwMyw3IEBACiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGFwcHltZWFsX3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShoYXBweW1lYWxfcGNpX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1VOLCBQQ0lfREVWSUNFX0lEX1NVTl9IQVBQWU1FQUwpIH0sCiAJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCA2NGU3ZDA4Li5kN2M3M2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTExNzAsOSArMTE3MCw4IEBACiBzdGF0aWMgdm9pZCBsYW5jZV9sb2FkX211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJY2hhciAqYWRkcnM7Ci0JaW50IGk7CiAJdTMyIGNyYzsKIAl1MzIgdmFsOwogCkBAIC0xMTk2LDkgKzExOTUsOCBAQAogCQlyZXR1cm47CiAKIAkvKiBBZGQgYWRkcmVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJZG1pICAgPSBkbWktPm5leHQ7CiAKIAkJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAJCWlmICghKCphZGRycyAmIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VucWUuYyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKaW5kZXggNDVjMzgzZi4uYmU2MzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VucWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5xZS5jCkBAIC02MjcsNyArNjI3LDcgQEAKIHN0YXRpYyB2b2lkIHFlX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3VucWUgKnFlcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdTggbmV3X21jb25maWcgPSBxZXAtPm1jb25maWc7CiAJY2hhciAqYWRkcnM7CiAJaW50IGk7CkBAIC02MzYsNyArNjM2LDcgQEAKIAkvKiBMb2NrIG91dCBvdGhlcnMuICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDY0KSkgeworCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpKSB7CiAJCXNidXNfd3JpdGViKE1SRUdTX0lBQ09ORklHX0FDSE5HRSB8IE1SRUdTX0lBQ09ORklHX0xBUkVTRVQsCiAJCQkgICAgcWVwLT5tcmVncyArIE1SRUdTX0lBQ09ORklHKTsKIAkJd2hpbGUgKChzYnVzX3JlYWRiKHFlcC0+bXJlZ3MgKyBNUkVHU19JQUNPTkZJRykgJiBNUkVHU19JQUNPTkZJR19BQ0hOR0UpICE9IDApCkBAIC02NTAsMTIgKzY1MCw5IEBACiAJCXUxNiBoYXNoX3RhYmxlWzRdOwogCQl1OCAqaGJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikgJmhhc2hfdGFibGVbMF07CiAKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCWhhc2hfdGFibGVbaV0gPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJCWlmICghKCphZGRycyAmIDEpKQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCmluZGV4IGJjNzRkYjAuLjZiMWI3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYworKysgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKQEAgLTc2NSw3ICs3NjUsNyBAQAogewogCXN0cnVjdCBkZXZfYWRkcl9saXN0ICpwOwogCi0JZm9yIChwID0gZGV2LT5tY19saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKHAsIGRldikgewogCQlzdHJ1Y3Qgdm5ldF9tY2FzdF9lbnRyeSAqbTsKIAogCQltID0gX192bmV0X21jX2ZpbmQodnAsIHAtPmRtaV9hZGRyKTsKQEAgLTEwNjIsMTAgKzEwNjIsNyBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN1biBMRE9NIHZuZXQgIiwgZGV2LT5uYW1lKTsKLQotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCXByaW50aygiJTIuMnglYyIsIGRldi0+ZGV2X2FkZHJbaV0sIGkgPT0gNSA/ICdcbicgOiAnOicpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdW4gTERPTSB2bmV0ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKIAogCWxpc3RfYWRkKCZ2cC0+bGlzdCwgJnZuZXRfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBkNzFjMTk3Li40OWJkODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC02NSw3ICs2NSw3IEBACiAJeyAiVE9TSElCQSBUQzM1ODE1L1RYNDkzOSIgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0YzM1ODE1X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0YzM1ODE1X3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNUNGKSwgLmRyaXZlcl9kYXRhID0gVEMzNTgxNUNGIH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzM1ODE1X05XVSksIC5kcml2ZXJfZGF0YSA9IFRDMzU4MTVfTldVIH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzM1ODE1X1RYNDkzOSksIC5kcml2ZXJfZGF0YSA9IFRDMzU4MTVfVFg0OTM5IH0sCkBAIC00MDIsNiArNDAyLDcgQEAKIAkgKiBieSB0aGlzIGxvY2sgYXMgd2VsbC4KIAkgKi8KIAlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCByeF9sb2NrOwogCiAJc3RydWN0IG1paV9idXMgKm1paV9idXM7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7CkBAIC04MzUsNiArODM2LDcgQEAKIAogCUlOSVRfV09SSygmbHAtPnJlc3RhcnRfd29yaywgdGMzNTgxNV9yZXN0YXJ0X3dvcmspOwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmxwLT5yeF9sb2NrKTsKIAlscC0+cGNpX2RldiA9IHBkZXY7CiAJbHAtPmNoaXB0eXBlID0gZW50LT5kcml2ZXJfZGF0YTsKIApAQCAtMTE4Niw2ICsxMTg4LDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJNQ1IgcmVzZXQgZmFpbGVkLlxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKKwlzcGluX2xvY2tfYmgoJmxwLT5yeF9sb2NrKTsKIAlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CiAJdGMzNTgxNV9jaGlwX3Jlc2V0KGRldik7CiAJdGMzNTgxNV9jbGVhcl9xdWV1ZXMoZGV2KTsKQEAgLTExOTMsNiArMTE5Niw3IEBACiAJLyogUmVjb25maWd1cmUgQ0FNIGFnYWluIHNpbmNlIHRjMzU4MTVfY2hpcF9pbml0KCkgaW5pdGlhbGl6ZSBpdC4gKi8KIAl0YzM1ODE1X3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZscC0+cnhfbG9jayk7CiAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CkBAIC0xMjExLDExICsxMjE1LDE0IEBACiAJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KIAkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl0Y193cml0ZWwoMCwgJnRyLT5JbnRfRW4pOwogCXRjX3dyaXRlbCh0Y19yZWFkbCgmdHItPkRNQV9DdGwpIHwgRE1BX0ludE1hc2ssICZ0ci0+RE1BX0N0bCk7CiAJc2NoZWR1bGVfd29yaygmbHAtPnJlc3RhcnRfd29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgdGMzNTgxNV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNDM2LDcgKzE0NDMsOSBAQAogCWlmIChzdGF0dXMgJiBJbnRfSW50TWFjVHgpIHsKIAkJLyogVHJhbnNtaXQgY29tcGxldGUuICovCiAJCWxwLT5sc3RhdHMudHhfaW50cysrOworCQlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CiAJCXRjMzU4MTVfdHhkb25lKGRldik7CisJCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldCA9IDA7CiAJfQpAQCAtMTY0OSw3ICsxNjU4LDcgQEAKIAlpbnQgcmVjZWl2ZWQgPSAwLCBoYW5kbGVkOwogCXUzMiBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmxwLT5sb2NrKTsKKwlzcGluX2xvY2soJmxwLT5yeF9sb2NrKTsKIAlzdGF0dXMgPSB0Y19yZWFkbCgmdHItPkludF9TcmMpOwogCWRvIHsKIAkJLyogQkxFeCwgRkRBRXggd2lsbCBiZSBjbGVhcmVkIGxhdGVyICovCkBAIC0xNjY3LDcgKzE2NzYsNyBAQAogCQl9CiAJCXN0YXR1cyA9IHRjX3JlYWRsKCZ0ci0+SW50X1NyYyk7CiAJfSB3aGlsZSAoc3RhdHVzKTsKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOworCXNwaW5fdW5sb2NrKCZscC0+cnhfbG9jayk7CiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKQEAgLTE5NDAsMjMgKzE5NDksMjMgQEAKIAkJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJdGNfd3JpdGVsKENBTV9Db21wRW4gfCBDQU1fQnJvYWRBY2MgfCBDQU1fR3JvdXBBY2MgfCBDQU1fU3RhdGlvbkFjYywgJnRyLT5DQU1fQ3RsKTsKIAl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkgIGRldi0+bWNfY291bnQgPiBDQU1fRU5UUllfTUFYIC0gMykgeworCQkgIG5ldGRldl9tY19jb3VudChkZXYpID4gQ0FNX0VOVFJZX01BWCAtIDMpIHsKIAkJLyogQ0FNIDAsIDEsIDIwIGFyZSByZXNlcnZlZC4gKi8KIAkJLyogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLCB1c2Ugbm9ybWFsIG1vZGUuICovCiAJCXRjX3dyaXRlbChDQU1fQ29tcEVuIHwgQ0FNX0Jyb2FkQWNjIHwgQ0FNX0dyb3VwQWNjLCAmdHItPkNBTV9DdGwpOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cl9hZGRyID0gZGV2LT5tY19saXN0OworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VyX2FkZHI7CiAJCWludCBpOwogCQlpbnQgZW5hX2JpdHMgPSBDQU1fRW5hX0JpdChDQU1fRU5UUllfU09VUkNFKTsKIAogCQl0Y193cml0ZWwoMCwgJnRyLT5DQU1fQ3RsKTsKIAkJLyogV2FsayB0aGUgYWRkcmVzcyBsaXN0LCBhbmQgbG9hZCB0aGUgZmlsdGVyICovCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cl9hZGRyID0gY3VyX2FkZHItPm5leHQpIHsKLQkJCWlmICghY3VyX2FkZHIpCi0JCQkJYnJlYWs7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihjdXJfYWRkciwgZGV2KSB7CiAJCQkvKiBlbnRyeSAwLDEgaXMgcmVzZXJ2ZWQuICovCiAJCQl0YzM1ODE1X3NldF9jYW1fZW50cnkoZGV2LCBpICsgMiwgY3VyX2FkZHItPmRtaV9hZGRyKTsKIAkJCWVuYV9iaXRzIHw9IENBTV9FbmFfQml0KGkgKyAyKTsKKwkJCWkrKzsKIAkJfQogCQl0Y193cml0ZWwoZW5hX2JpdHMsICZ0ci0+Q0FNX0VuYSk7CiAJCXRjX3dyaXRlbChDQU1fQ29tcEVuIHwgQ0FNX0Jyb2FkQWNjLCAmdHItPkNBTV9DdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCA4MGI0MDRmLi4wYzk3ODAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtNjIsOSArNjIsMTEgQEAKICAqCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAidGVodXRpLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIGJkeF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmR4X3BjaV90YmwpID0gewogCXsweDFGQzksIDB4MzAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MUZDOSwgMHgzMDEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7MHgxRkM5LCAweDMwMTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtMTA1LDI2ICsxMDcsMjQgQEAKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfTElOS19TVEFUVVNfUkVHLCAmcGNpX2xpbmtfc3RhdHVzKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfREVWX0NUUkxfUkVHLCAmcGNpX2N0cmwpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVodXRpOiAlcyVzXG4iLCBCRFhfTklDX05BTUUsCi0JICAgICAgIG5pYy0+cG9ydF9udW0gPT0gMSA/ICIiIDogIiwgMi1Qb3J0Iik7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAidGVodXRpOiBzcm9tIDB4JXggZnBnYSAlZCBidWlsZCAldSBsYW5lIyAlZCIKLQkgICAgICAgIiBtYXhfcGwgMHgleCBtcnJzIDB4JXhcbiIsCi0JICAgICAgIHJlYWRsKG5pYy0+cmVncyArIFNST01fVkVSKSwgcmVhZGwobmljLT5yZWdzICsgRlBHQV9WRVIpICYgMHhGRkYsCi0JICAgICAgIHJlYWRsKG5pYy0+cmVncyArIEZQR0FfU0VFRCksCi0JICAgICAgIEdFVF9MSU5LX1NUQVRVU19MQU5FUyhwY2lfbGlua19zdGF0dXMpLAotCSAgICAgICBHRVRfREVWX0NUUkxfTUFYUEwocGNpX2N0cmwpLCBHRVRfREVWX0NUUkxfTVJSUyhwY2lfY3RybCkpOworCXByX2luZm8oIiVzJXNcbiIsIEJEWF9OSUNfTkFNRSwKKwkJbmljLT5wb3J0X251bSA9PSAxID8gIiIgOiAiLCAyLVBvcnQiKTsKKwlwcl9pbmZvKCJzcm9tIDB4JXggZnBnYSAlZCBidWlsZCAldSBsYW5lIyAlZCBtYXhfcGwgMHgleCBtcnJzIDB4JXhcbiIsCisJCXJlYWRsKG5pYy0+cmVncyArIFNST01fVkVSKSwgcmVhZGwobmljLT5yZWdzICsgRlBHQV9WRVIpICYgMHhGRkYsCisJCXJlYWRsKG5pYy0+cmVncyArIEZQR0FfU0VFRCksCisJCUdFVF9MSU5LX1NUQVRVU19MQU5FUyhwY2lfbGlua19zdGF0dXMpLAorCQlHRVRfREVWX0NUUkxfTUFYUEwocGNpX2N0cmwpLCBHRVRfREVWX0NUUkxfTVJSUyhwY2lfY3RybCkpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9md19pZChzdHJ1Y3QgcGNpX25pYyAqbmljKQogewotCXByaW50ayhLRVJOX0lORk8gInRlaHV0aTogZncgMHgleFxuIiwgcmVhZGwobmljLT5yZWdzICsgRldfVkVSKSk7CisJcHJfaW5mbygiZncgMHgleFxuIiwgcmVhZGwobmljLT5yZWdzICsgRldfVkVSKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2V0aF9pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMsIFBvcnQgJWNcbiIsIG5kZXYtPm5hbWUsIEJEWF9OSUNfTkFNRSwKLQkgICAgICAgKG5kZXYtPmlmX3BvcnQgPT0gMCkgPyAnQScgOiAnQicpOworCW5ldGRldl9pbmZvKG5kZXYsICIlcywgUG9ydCAlY1xuIiwKKwkJICAgIEJEWF9OSUNfTkFNRSwgKG5kZXYtPmlmX3BvcnQgPT0gMCkgPyAnQScgOiAnQicpOwogCiB9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogCWYtPnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwKIAkJCQkgICAgIG1lbXN6ICsgRklGT19FWFRSQV9TUEFDRSwgJmYtPmRhKTsKIAlpZiAoIWYtPnZhKSB7Ci0JCUVSUigicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWRcbiIpOwogCQlSRVQoLUVOT01FTSk7CiAJfQogCWYtPnJlZ19DRkcwID0gcmVnX0NGRzA7CkBAIC0yMDQsMTMgKzIwNCwxMyBAQAogCQlpZiAobmV0aWZfY2Fycmllcl9vayhwcml2LT5uZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5kZXYpOwotCQkJRVJSKCIlczogTGluayBEb3duXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIkxpbmsgRG93blxuIik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmRldikpIHsKIAkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmRldik7CiAJCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5kZXYpOwotCQkJRVJSKCIlczogTGluayBVcFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJMaW5rIFVwXG4iKTsKIAkJfQogCX0KIH0KQEAgLTIyNiwxMCArMjI2LDEwIEBACiAJCWJkeF9saW5rX2NoYW5nZWQocHJpdik7CiAKIAlpZiAoaXNyICYgSVJfUENJRV9MSU5LKQotCQlFUlIoIiVzOiBQQ0ktRSBMaW5rIEZhdWx0XG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiUENJLUUgTGluayBGYXVsdFxuIik7CiAKIAlpZiAoaXNyICYgSVJfUENJRV9UT1VUKQotCQlFUlIoIiVzOiBQQ0ktRSBUaW1lIE91dFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIlBDSS1FIFRpbWUgT3V0XG4iKTsKIAogfQogCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKIAlpZiAocmMpIHsKLQkJRVJSKCIlczogZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJmaXJtd2FyZSBsb2FkaW5nIGZhaWxlZFxuIik7CiAJCWlmIChyYyA9PSAtRUlPKQogCQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCiAJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVlBDKSwKQEAgLTQxOSw5ICs0MTksMTEgQEAKIAlXUklURV9SRUcocHJpdiwgcmVnR01BQ19SWEZfQSwgR01BQ19SWF9GSUxURVJfT1NFTiB8CiAJCSAgR01BQ19SWF9GSUxURVJfQU0gfCBHTUFDX1JYX0ZJTFRFUl9BQik7CiAKLSNkZWZpbmUgQkRYX0lSUV9UWVBFCSgocHJpdi0+bmljLT5pcnFfdHlwZSA9PSBJUlFfTVNJKT8wOklSUUZfU0hBUkVEKQotCWlmICgocmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIGJkeF9pc3JfbmFwaSwgQkRYX0lSUV9UWVBFLAotCQkJIG5kZXYtPm5hbWUsIG5kZXYpKSkKKyNkZWZpbmUgQkRYX0lSUV9UWVBFCSgocHJpdi0+bmljLT5pcnFfdHlwZSA9PSBJUlFfTVNJKSA/IDAgOiBJUlFGX1NIQVJFRCkKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBiZHhfaXNyX25hcGksIEJEWF9JUlFfVFlQRSwKKwkJCSBuZGV2LT5uYW1lLCBuZGV2KTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyX2lycTsKIAliZHhfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKQEAgLTQ2Miw3ICs0NjQsNyBAQAogCQkJcmVhZGwocmVncyArIHJlZ1JYRF9DRkcwXzApOwogCQkJcmV0dXJuIDA7CiAJCX0KLQlFUlIoInRlaHV0aTogSFcgcmVzZXQgZmFpbGVkXG4iKTsKKwlwcl9lcnIoIkhXIHJlc2V0IGZhaWxlZFxuIik7CiAJcmV0dXJuIDE7CQkvKiBmYWlsdXJlICovCiB9CiAKQEAgLTQ4Niw3ICs0ODgsNyBAQAogCQkJUkVBRF9SRUcocHJpdiwgcmVnUlhEX0NGRzBfMCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCUVSUigidGVodXRpOiBIVyByZXNldCBmYWlsZWRcbiIpOworCXByX2VycigiSFcgcmVzZXQgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMTsJCS8qIGZhaWx1cmUgKi8KIH0KIApAQCAtNTEwLDggKzUxMiw3IEBACiAJCW1kZWxheSgxMCk7CiAJfQogCWlmIChpID09IDUwKQotCQlFUlIoIiVzOiBTVyByZXNldCB0aW1lb3V0LiBjb250aW51aW5nIGFueXdheVxuIiwKLQkJICAgIHByaXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJTVyByZXNldCB0aW1lb3V0LiBjb250aW51aW5nIGFueXdheVxuIik7CiAKIAkvKiA2LiBkaXNhYmxlIGludHJzICovCiAJV1JJVEVfUkVHKHByaXYsIHJlZ1JESU5UQ00wLCAwKTsKQEAgLTYwNCwxOCArNjA1LDE1IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpCiAJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmRldik7CiAKLQlpZiAoKHJjID0gYmR4X3R4X2luaXQocHJpdikpKQotCQlnb3RvIGVycjsKLQotCWlmICgocmMgPSBiZHhfcnhfaW5pdChwcml2KSkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKChyYyA9IGJkeF9md19sb2FkKHByaXYpKSkKKwlpZiAoKHJjID0gYmR4X3R4X2luaXQocHJpdikpIHx8CisJICAgIChyYyA9IGJkeF9yeF9pbml0KHByaXYpKSB8fAorCSAgICAocmMgPSBiZHhfZndfbG9hZChwcml2KSkpCiAJCWdvdG8gZXJyOwogCiAJYmR4X3J4X2FsbG9jX3NrYnMocHJpdiwgJnByaXYtPnJ4Zl9maWZvMCk7CiAKLQlpZiAoKHJjID0gYmR4X2h3X3N0YXJ0KHByaXYpKSkKKwlyYyA9IGJkeF9od19zdGFydChwcml2KTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyOwogCiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwpAQCAtNjQ3LDcgKzY0NSw3IEBACiAJaWYgKGNtZCAhPSBTSU9DREVWUFJJVkFURSkgewogCQllcnJvciA9IGNvcHlfZnJvbV91c2VyKGRhdGEsIGlmci0+aWZyX2RhdGEsIHNpemVvZihkYXRhKSk7CiAJCWlmIChlcnJvcikgewotCQkJRVJSKCJjYW50IGNvcHkgZnJvbSB1c2VyXG4iKTsKKwkJCXByX2VycigiY2FudCBjb3B5IGZyb20gdXNlclxuIik7CiAJCQlSRVQoZXJyb3IpOwogCQl9CiAJCURCRygiJWQgMHgleCAweCV4XG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTsKQEAgLTcwOCw3ICs3MDYsNyBAQAogCUVOVEVSOwogCURCRzIoInZpZD0lZCB2YWx1ZT0lZFxuIiwgKGludCl2aWQsIGVuYWJsZSk7CiAJaWYgKHVubGlrZWx5KHZpZCA+PSA0MDk2KSkgewotCQlFUlIoInRlaHV0aTogaW52YWxpZCBWSUQ6ICV1ICg+IDQwOTYpXG4iLCB2aWQpOworCQlwcl9lcnIoImludmFsaWQgVklEOiAldSAoPiA0MDk2KVxuIiwgdmlkKTsKIAkJUkVUKCk7CiAJfQogCXJlZyA9IHJlZ1ZMQU5fMCArICh2aWQgLyAzMikgKiA0OwpAQCAtNzc2LDggKzc3NCw4IEBACiAKIAkvKiBlbmZvcmNlIG1pbmltdW0gZnJhbWUgc2l6ZSAqLwogCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4pIHsKLQkJRVJSKCIlczogJXMgbXR1ICVkIGlzIGxlc3MgdGhlbiBtaW5pbWFsICVkXG4iLAotCQkgICAgQkRYX0RSVl9OQU1FLCBuZGV2LT5uYW1lLCBuZXdfbXR1LCBFVEhfWkxFTik7CisJCW5ldGRldl9lcnIobmRldiwgIm10dSAlZCBpcyBsZXNzIHRoZW4gbWluaW1hbCAlZFxuIiwKKwkJCSAgIG5ld19tdHUsIEVUSF9aTEVOKTsKIAkJUkVUKC1FSU5WQUwpOwogCX0KIApAQCAtODA4LDcgKzgwNiw3IEBACiAJCS8qIHNldCBJTUYgdG8gYWNjZXB0IGFsbCBtdWx0aWNhc3QgZnJtYWVzICovCiAJCWZvciAoaSA9IDA7IGkgPCBNQUNfTUNTVF9IQVNIX05VTTsgaSsrKQogCQkJV1JJVEVfUkVHKHByaXYsIHJlZ1JYX01DU1RfSEFTSDAgKyBpICogNCwgfjApOwotCX0gZWxzZSBpZiAobmRldi0+bWNfY291bnQpIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmRldikpIHsKIAkJdTggaGFzaDsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCXUzMiByZWcsIHZhbDsKQEAgLTgyNiwxMCArODI0LDggQEAKIAkJLyogVEJEOiBzb3J0IGFkZHJlc2VzIGFuZCB3cml0ZSB0aGVtIGluIGFzY2VuZGluZyBvcmRlcgogCQkgKiBpbnRvIFJYX01BQ19NQ1NUIHJlZ3MuIHdlIHNraXAgdGhpcyBwaGFzZSBub3cgYW5kIGFjY2VwdCBBTEwKIAkJICogbXVsdGljYXN0IGZyYW1lcyB0aHJvdSBJTUYgKi8KLQkJbWNsaXN0ID0gbmRldi0+bWNfbGlzdDsKLQogCQkvKiBhY2NlcHQgdGhlIHJlc3Qgb2YgYWRkcmVzc2VzIHRocm91IElNRiAqLwotCQlmb3IgKDsgbWNsaXN0OyBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBuZGV2KSB7CiAJCQloYXNoID0gMDsKIAkJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQkJCWhhc2ggXj0gbWNsaXN0LT5kbWlfYWRkcltpXTsKQEAgLTg0MCw3ICs4MzYsNyBAQAogCQl9CiAKIAl9IGVsc2UgewotCQlEQkcoIm9ubHkgb3duIG1hYyAlZFxuIiwgbmRldi0+bWNfY291bnQpOworCQlEQkcoIm9ubHkgb3duIG1hYyAlZFxuIiwgbmV0ZGV2X21jX2NvdW50KG5kZXYpKTsKIAkJcnhmX3ZhbCB8PSBHTUFDX1JYX0ZJTFRFUl9BQjsKIAl9CiAJV1JJVEVfUkVHKHByaXYsIHJlZ0dNQUNfUlhGX0EsIHJ4Zl92YWwpOwpAQCAtMTAyOCwxNyArMTAyNCwxNiBAQAogCQkJICByZWdSWEZfQ0ZHMF8wLCByZWdSWEZfQ0ZHMV8wLAogCQkJICByZWdSWEZfUlBUUl8wLCByZWdSWEZfV1BUUl8wKSkKIAkJZ290byBlcnJfbWVtOwotCWlmICghCi0JICAgIChwcml2LT5yeGRiID0KLQkgICAgIGJkeF9yeGRiX2NyZWF0ZShwcml2LT5yeGZfZmlmbzAubS5tZW1zeiAvCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgcnhmX2Rlc2MpKSkpCisJcHJpdi0+cnhkYiA9IGJkeF9yeGRiX2NyZWF0ZShwcml2LT5yeGZfZmlmbzAubS5tZW1zeiAvCisJCQkJICAgICBzaXplb2Yoc3RydWN0IHJ4Zl9kZXNjKSk7CisJaWYgKCFwcml2LT5yeGRiKQogCQlnb3RvIGVycl9tZW07CiAKIAlwcml2LT5yeGZfZmlmbzAubS5wa3RzeiA9IHByaXYtPm5kZXYtPm10dSArIFZMQU5fRVRIX0hMRU47CiAJcmV0dXJuIDA7CiAKIGVycl9tZW06Ci0JRVJSKCIlczogJXM6IFJ4IGluaXQgZmFpbGVkXG4iLCBCRFhfRFJWX05BTUUsIHByaXYtPm5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIlJ4IGluaXQgZmFpbGVkXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtMTExNSw4ICsxMTEwLDkgQEAKIAlFTlRFUjsKIAlkbm8gPSBiZHhfcnhkYl9hdmFpbGFibGUoZGIpIC0gMTsKIAl3aGlsZSAoZG5vID4gMCkgewotCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKGYtPm0ucGt0c3ogKyBORVRfSVBfQUxJR04pKSkgewotCQkJRVJSKCJOTyBNRU06IGRldl9hbGxvY19za2IgZmFpbGVkXG4iKTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihmLT5tLnBrdHN6ICsgTkVUX0lQX0FMSUdOKTsKKwkJaWYgKCFza2IpIHsKKwkJCXByX2VycigiTk8gTUVNOiBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCQlza2ItPmRldiA9IHByaXYtPm5kZXY7CkBAIC0xMzM3LDkgKzEzMzMsNyBAQAogc3RhdGljIHZvaWQgcHJpbnRfcnhkZChzdHJ1Y3QgcnhkX2Rlc2MgKnJ4ZGQsIHUzMiByeGRfdmFsMSwgdTE2IGxlbiwKIAkJICAgICAgIHUxNiByeGRfdmxhbikKIHsKLQlEQkcoIkVSUk9SOiByeGRkIGJjICVkIHJ4ZnEgJWQgdG8gJWQgdHlwZSAlZCBlcnIgJWQgcnhwICVkICIKLQkgICAgInBrdF9pZCAlZCB2dGFnICVkIGxlbiAlZCB2bGFuX2lkICVkIGNmaSAlZCBwcmlvICVkICIKLQkgICAgInZhX2xvICVkIHZhX2hpICVkXG4iLAorCURCRygiRVJST1I6IHJ4ZGQgYmMgJWQgcnhmcSAlZCB0byAlZCB0eXBlICVkIGVyciAlZCByeHAgJWQgcGt0X2lkICVkIHZ0YWcgJWQgbGVuICVkIHZsYW5faWQgJWQgY2ZpICVkIHByaW8gJWQgdmFfbG8gJWQgdmFfaGkgJWRcbiIsCiAJICAgIEdFVF9SWERfQkMocnhkX3ZhbDEpLCBHRVRfUlhEX1JYRlEocnhkX3ZhbDEpLCBHRVRfUlhEX1RPKHJ4ZF92YWwxKSwKIAkgICAgR0VUX1JYRF9UWVBFKHJ4ZF92YWwxKSwgR0VUX1JYRF9FUlIocnhkX3ZhbDEpLAogCSAgICBHRVRfUlhEX1JYUChyeGRfdmFsMSksIEdFVF9SWERfUEtUX0lEKHJ4ZF92YWwxKSwKQEAgLTE1OTEsNyArMTU4NSw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9tZW06Ci0JRVJSKCJ0ZWh1dGk6ICVzOiBUeCBpbml0IGZhaWxlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisJbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiVHggaW5pdCBmYWlsZWRcbiIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0xNjA5LDcgKzE2MDMsNyBAQAogCWZzaXplID0gZi0+bS5ycHRyIC0gZi0+bS53cHRyOwogCWlmIChmc2l6ZSA8PSAwKQogCQlmc2l6ZSA9IGYtPm0ubWVtc3ogKyBmc2l6ZTsKLQlyZXR1cm4gKGZzaXplKTsKKwlyZXR1cm4gZnNpemU7CiB9CiAKIC8qIGJkeF90eF90cmFuc21pdCAtIHNlbmQgcGFja2V0IHRvIE5JQwpAQCAtMTkzNyw4ICsxOTMxLDkgQEAKIAkJUkVUKC1FTk9NRU0pOwogCiAgICAgLyoqKioqKioqKioqKioqIHBjaSAqKioqKioqKioqKioqKioqKi8KLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkJLyogaXQgdHJpZ2VycyBpbnRlcnJ1cHQsIGR1bm5vIHdoeS4gKi8KLQkJZ290byBlcnJfcGNpOwkJCS8qIGl0J3Mgbm90IGEgcHJvYmxlbSB0aG91Z2ggKi8KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQkJCS8qIGl0IHRyaWdnZXJzIGludGVycnVwdCwgZHVubm8gd2h5LiAqLworCQlnb3RvIGVycl9wY2k7CQkvKiBpdCdzIG5vdCBhIHByb2JsZW0gdGhvdWdoICovCiAKIAlpZiAoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSAmJgogCSAgICAhKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkpIHsKQEAgLTE5NDYsMTQgKzE5NDEsMTQgQEAKIAl9IGVsc2UgewogCQlpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHx8CiAJCSAgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZWh1dGk6IE5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiIKLQkJCQkJIiwgYWJvcnRpbmdcbiIpOworCQkJcHJfZXJyKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX2RtYTsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKIAl9CiAKLQlpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgQkRYX0RSVl9OQU1FKSkpCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBCRFhfRFJWX05BTUUpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2RtYTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtMTk2MSwyNSArMTk1NiwyNiBAQAogCXBjaWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJaWYgKCFwY2lhZGRyKSB7CiAJCWVyciA9IC1FSU87Ci0JCUVSUigidGVodXRpOiBubyBNTUlPIHJlc291cmNlXG4iKTsKKwkJcHJfZXJyKCJubyBNTUlPIHJlc291cmNlXG4iKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9Ci0JaWYgKChyZWdpb25TaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSkgPCBCRFhfUkVHU19TSVpFKSB7CisJcmVnaW9uU2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaWYgKHJlZ2lvblNpemUgPCBCRFhfUkVHU19TSVpFKSB7CiAJCWVyciA9IC1FSU87Ci0JCUVSUigidGVodXRpOiBNTUlPIHJlc291cmNlICgleCkgdG9vIHNtYWxsXG4iLCByZWdpb25TaXplKTsKKwkJcHJfZXJyKCJNTUlPIHJlc291cmNlICgleCkgdG9vIHNtYWxsXG4iLCByZWdpb25TaXplKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAKIAluaWMtPnJlZ3MgPSBpb3JlbWFwKHBjaWFkZHIsIHJlZ2lvblNpemUpOwogCWlmICghbmljLT5yZWdzKSB7CiAJCWVyciA9IC1FSU87Ci0JCUVSUigidGVodXRpOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXByX2VycigiaW9yZW1hcCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KIAogCWlmIChwZGV2LT5pcnEgPCAyKSB7CiAJCWVyciA9IC1FSU87Ci0JCUVSUigidGVodXRpOiBpbnZhbGlkIGlycSAoJWQpXG4iLCBwZGV2LT5pcnEpOworCQlwcl9lcnIoImludmFsaWQgaXJxICglZClcbiIsIHBkZXYtPmlycSk7CiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAl9CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5pYyk7CkBAIC0xOTk2LDggKzE5OTIsOSBAQAogCW5pYy0+aXJxX3R5cGUgPSBJUlFfSU5UWDsKICNpZmRlZiBCRFhfTVNJCiAJaWYgKChyZWFkbChuaWMtPnJlZ3MgKyBGUEdBX1ZFUikgJiAweEZGRikgPj0gMzc4KSB7Ci0JCWlmICgoZXJyID0gcGNpX2VuYWJsZV9tc2kocGRldikpKQotCQkJRVJSKCJUZWh1dGk6IENhbid0IGVuZWJsZSBtc2kuIGVycm9yIGlzICVkXG4iLCBlcnIpOworCQllcnIgPSBwY2lfZW5hYmxlX21zaShwZGV2KTsKKwkJaWYgKGVycikKKwkJCXByX2VycigiQ2FuJ3QgZW5lYmxlIG1zaS4gZXJyb3IgaXMgJWRcbiIsIGVycik7CiAJCWVsc2UKIAkJCW5pYy0+aXJxX3R5cGUgPSBJUlFfTVNJOwogCX0gZWxzZQpAQCAtMjAwNiw5ICsyMDAzLDEwIEBACiAKICAgICAvKioqKioqKioqKioqKiogbmV0ZGV2ICoqKioqKioqKioqKioqLwogCWZvciAocG9ydCA9IDA7IHBvcnQgPCBuaWMtPnBvcnRfbnVtOyBwb3J0KyspIHsKLQkJaWYgKCEobmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYmR4X3ByaXYpKSkpIHsKKwkJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYmR4X3ByaXYpKTsKKwkJaWYgKCFuZGV2KSB7CiAJCQllcnIgPSAtRU5PTUVNOwotCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZWh1dGk6IGFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIik7CisJCQlwcl9lcnIoImFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIik7CiAJCQlnb3RvIGVycl9vdXRfaW9tYXA7CiAJCX0KIApAQCAtMjA3NSwxMiArMjA3MywxMyBAQAogCiAJCS8qYmR4X2h3X3Jlc2V0KHByaXYpOyAqLwogCQlpZiAoYmR4X3JlYWRfbWFjKHByaXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRlaHV0aTogbG9hZCBNQUMgYWRkcmVzcyBmYWlsZWRcbiIpOworCQkJcHJfZXJyKCJsb2FkIE1BQyBhZGRyZXNzIGZhaWxlZFxuIik7CiAJCQlnb3RvIGVycl9vdXRfaW9tYXA7CiAJCX0KIAkJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7Ci0JCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZWh1dGk6IHJlZ2lzdGVyX25ldGRldiBmYWlsZWRcbiIpOworCQllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZFxuIik7CiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAkJfQogCQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKQEAgLTIyOTQsMTMgKzIyOTMsMTMgQEAKIC8qIENvbnZlcnQgUlggZmlmbyBzaXplIHRvIG51bWJlciBvZiBwZW5kaW5nIHBhY2tldHMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJkeF9yeF9maWZvX3NpemVfdG9fcGFja2V0cyhpbnQgcnhfc2l6ZSkKIHsKLQlyZXR1cm4gKChGSUZPX1NJWkUgKiAoMSA8PCByeF9zaXplKSkgLyBzaXplb2Yoc3RydWN0IHJ4Zl9kZXNjKSk7CisJcmV0dXJuIChGSUZPX1NJWkUgKiAoMSA8PCByeF9zaXplKSkgLyBzaXplb2Yoc3RydWN0IHJ4Zl9kZXNjKTsKIH0KIAogLyogQ29udmVydCBUWCBmaWZvIHNpemUgdG8gbnVtYmVyIG9mIHBlbmRpbmcgcGFja2V0cyAqLwogc3RhdGljIGlubGluZSBpbnQgYmR4X3R4X2ZpZm9fc2l6ZV90b19wYWNrZXRzKGludCB0eF9zaXplKQogewotCXJldHVybiAoKEZJRk9fU0laRSAqICgxIDw8IHR4X3NpemUpKSAvIEJEWF9UWEZfREVTQ19TWik7CisJcmV0dXJuIChGSUZPX1NJWkUgKiAoMSA8PCB0eF9zaXplKSkgLyBCRFhfVFhGX0RFU0NfU1o7CiB9CiAKIC8qCkBAIC0yMzkyLDEwICsyMzkxLDEwIEBACiAJY2FzZSBFVEhfU1NfU1RBVFM6CiAJCUJEWF9BU1NFUlQoQVJSQVlfU0laRShiZHhfc3RhdF9uYW1lcykKIAkJCSAgICE9IHNpemVvZihzdHJ1Y3QgYmR4X3N0YXRzKSAvIHNpemVvZih1NjQpKTsKLQkJcmV0dXJuICgocHJpdi0+c3RhdHNfZmxhZykgPyBBUlJBWV9TSVpFKGJkeF9zdGF0X25hbWVzKQk6IDApOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gKHByaXYtPnN0YXRzX2ZsYWcpID8gQVJSQVlfU0laRShiZHhfc3RhdF9uYW1lcykJOiAwOwogCX0KKworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKgpAQCAtMjQ5MywxMCArMjQ5Miw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwcmludF9kcml2ZXJfaWQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMsICVzXG4iLCBCRFhfRFJWX05BTUUsIEJEWF9EUlZfREVTQywKLQkgICAgICAgQkRYX0RSVl9WRVJTSU9OKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogT3B0aW9uczogaHdfY3N1bSAlc1xuIiwgQkRYX0RSVl9OQU1FLAotCSAgICAgICBCRFhfTVNJX1NUUklORyk7CisJcHJfaW5mbygiJXMsICVzXG4iLCBCRFhfRFJWX0RFU0MsIEJEWF9EUlZfVkVSU0lPTik7CisJcHJfaW5mbygiT3B0aW9uczogaHdfY3N1bSAlc1xuIiwgQkRYX01TSV9TVFJJTkcpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBiZHhfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggMTI0MTQxOS4uYTE5ZGNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTUyOSwyOCArNTI5LDM0IEBACiAKIC8qIERlYnVnZ2luZyBNYWNyb3MgKi8KIAotI2RlZmluZSBFUlIoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm10LCAjIyBhcmdzKQotI2RlZmluZSBEQkcyKGZtdCwgYXJncy4uLikJXAotCXByaW50ayhLRVJOX0VSUiAgIiVzOiUtNWQ6ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjIGFyZ3MpCisjZGVmaW5lIERCRzIoZm10LCBhcmdzLi4uKQkJCQkJXAorCXByX2VycigiJXM6JS01ZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyMgYXJncykKIAogI2RlZmluZSBCRFhfQVNTRVJUKHgpIEJVR19PTih4KQogCiAjaWZkZWYgREVCVUcKIAotI2RlZmluZSBFTlRFUiAgICAgICAgICBkbyB7IFwKLQlwcmludGsoS0VSTl9FUlIgICIlczolLTVkOiBFTlRFUlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsgXAorI2RlZmluZSBFTlRFUgkJCQkJCVwKK2RvIHsJCQkJCQkJXAorCXByX2VycigiJXM6JS01ZDogRU5URVJcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUkVUKGFyZ3MuLi4pICAgZG8geyBcCi0JcHJpbnRrKEtFUk5fRVJSICAiJXM6JS01ZDogUkVUVVJOXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi1yZXR1cm4gYXJnczsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUKGFyZ3MuLi4pCQkJCQkgXAorZG8gewkJCQkJCQkgXAorCXByX2VycigiJXM6JS01ZDogUkVUVVJOXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCisJcmV0dXJuIGFyZ3M7CQkJCQkgXAorfSB3aGlsZSAoMCkKIAotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQlcCi0JcHJpbnRrKEtFUk5fRVJSICAiJXM6JS01ZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyMgYXJncykKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikJCQkJCVwKKwlwcl9lcnIoIiVzOiUtNWQ6ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjIGFyZ3MpCiAjZWxzZQotI2RlZmluZSBFTlRFUiAgICAgICAgIGRvIHsgIH0gd2hpbGUgKDApCisjZGVmaW5lIEVOVEVSIGRvIHsgIH0gd2hpbGUgKDApCiAjZGVmaW5lIFJFVChhcmdzLi4uKSAgIHJldHVybiBhcmdzCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICAgZG8geyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJXAorCWlmICgwKQkJCQkJXAorCQlwcl9lcnIoZm10LCAjI2FyZ3MpOwkJXAorfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogX0JEWF9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA3ZjgyYjAyLi4wZmE3Njg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNjcsOSArNjcsOCBAQAogI2luY2x1ZGUgInRnMy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy4xMDYiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSmFudWFyeSAxMiwgMjAxMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjEwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJGZWJydWFyeSAxNywgMjAxMCIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC0xNTgsNyArMTU3LDcgQEAKICNkZWZpbmUgRklSTVdBUkVfVEczVFNPNQkidGlnb24vdGczX3RzbzUuYmluIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0JRFJWX01PRFVMRV9OQU1FICIuYzp2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CisJRFJWX01PRFVMRV9OQU1FICIuYzp2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIikiOwogCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pIGFuZCBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIFRpZ29uMyBldGhlcm5ldCBkcml2ZXIiKTsKQEAgLTE3NCw3ICsxNzMsNyBAQAogbW9kdWxlX3BhcmFtKHRnM19kZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGczX2RlYnVnLCAiVGlnb24zIGJpdG1hcHBlZCBkZWJ1Z2dpbmcgbWVzc2FnZSBlbmFibGUgdmFsdWUiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRnM19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodGczX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAxKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMil9LApAQCAtMjQ0LDYgKzI0MywxMiBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTcpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4KX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTcyNCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzgxKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc2MSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzY1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5NSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTFRJTUEsIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMCl9LApAQCAtNjM2LDcgKzY0MSw2IEBACiBzdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX2ludHMoc3RydWN0IHRnMyAqdHApCiB7CiAJaW50IGk7Ci0JdTMyIGNvYWxfbm93ID0gMDsKIAogCXRwLT5pcnFfc3luYyA9IDA7CiAJd21iKCk7CkBAIC02NDQsMTMgKzY0OCwxNCBAQAogCXR3MzIoVEczUENJX01JU0NfSE9TVF9DVFJMLAogCSAgICAgKHRwLT5taXNjX2hvc3RfY3RybCAmIH5NSVNDX0hPU1RfQ1RSTF9NQVNLX1BDSV9JTlQpKTsKIAorCXRwLT5jb2FsX25vdyA9IHRwLT5jb2FsZXNjZV9tb2RlIHwgSE9TVENDX01PREVfRU5BQkxFOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CiAJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CiAJCXR3MzJfbWFpbGJveF9mKHRuYXBpLT5pbnRfbWJveCwgdG5hcGktPmxhc3RfdGFnIDw8IDI0KTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQogCQkJdHczMl9tYWlsYm94X2YodG5hcGktPmludF9tYm94LCB0bmFwaS0+bGFzdF90YWcgPDwgMjQpOwogCi0JCWNvYWxfbm93IHw9IHRuYXBpLT5jb2FsX25vdzsKKwkJdHAtPmNvYWxfbm93IHw9IHRuYXBpLT5jb2FsX25vdzsKIAl9CiAKIAkvKiBGb3JjZSBhbiBpbml0aWFsIGludGVycnVwdCAqLwpAQCAtNjU4LDggKzY2Myw5IEBACiAJICAgICh0cC0+bmFwaVswXS5od19zdGF0dXMtPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSkKIAkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsIHwgR1JDX0xDTENUUkxfU0VUSU5UKTsKIAllbHNlCi0JCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwKLQkJICAgICBIT1NUQ0NfTU9ERV9FTkFCTEUgfCBjb2FsX25vdyk7CisJCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsX25vdyk7CisKKwl0cC0+Y29hbF9ub3cgJj0gfih0cC0+bmFwaVswXS5jb2FsX25vdyB8IHRwLT5uYXBpWzFdLmNvYWxfbm93KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGczX2hhc193b3JrKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkpCkBAIC05NDgsMTcgKzk1NCwxNyBAQAogCiAJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdOwogCXN3aXRjaCAocGh5ZGV2LT5kcnYtPnBoeV9pZCAmIHBoeWRldi0+ZHJ2LT5waHlfaWRfbWFzaykgewotCWNhc2UgVEczX1BIWV9JRF9CQ001MDYxMDoKLQljYXNlIFRHM19QSFlfSURfQkNNNTA2MTBNOgorCWNhc2UgUEhZX0lEX0JDTTUwNjEwOgorCWNhc2UgUEhZX0lEX0JDTTUwNjEwTToKIAkJdmFsID0gTUFDX1BIWUNGRzJfNTA2MTBfTEVEX01PREVTOwogCQlicmVhazsKLQljYXNlIFRHM19QSFlfSURfQkNNQUMxMzE6CisJY2FzZSBQSFlfSURfQkNNQUMxMzE6CiAJCXZhbCA9IE1BQ19QSFlDRkcyX0FDMTMxX0xFRF9NT0RFUzsKIAkJYnJlYWs7Ci0JY2FzZSBURzNfUEhZX0lEX1JUTDgyMTFDOgorCWNhc2UgUEhZX0lEX1JUTDgyMTFDOgogCQl2YWwgPSBNQUNfUEhZQ0ZHMl9SVEw4MjExQ19MRURfTU9ERVM7CiAJCWJyZWFrOwotCWNhc2UgVEczX1BIWV9JRF9SVEw4MjAxRToKKwljYXNlIFBIWV9JRF9SVEw4MjAxRToKIAkJdmFsID0gTUFDX1BIWUNGRzJfUlRMODIwMUVfTEVEX01PREVTOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTc3LDcgKzk4Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpKQorCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEUpKQogCQl2YWwgfD0gTUFDX1BIWUNGRzJfRU1PREVfTUFTS19NQVNLIHwKIAkJICAgICAgIE1BQ19QSFlDRkcyX0ZNT0RFX01BU0tfTUFTSyB8CiAJCSAgICAgICBNQUNfUEhZQ0ZHMl9HTU9ERV9NQVNLX01BU0sgfApAQCAtOTkwLDcgKzk5Niw3IEBACiAJdmFsID0gdHIzMihNQUNfUEhZQ0ZHMSk7CiAJdmFsICY9IH4oTUFDX1BIWUNGRzFfUlhDTEtfVE9fTUFTSyB8IE1BQ19QSFlDRkcxX1RYQ0xLX1RPX01BU0sgfAogCQkgTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQyB8IE1BQ19QSFlDRkcxX1JHTUlJX1NORF9TVEFUX0VOKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpKSB7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkpIHsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCiAJCQl2YWwgfD0gTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQzsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4pCkBAIC0xMDA4LDcgKzEwMTQsNyBAQAogCQkgTUFDX1JHTUlJX01PREVfVFhfRU5BQkxFIHwKIAkJIE1BQ19SR01JSV9NT0RFX1RYX0xPV1BXUiB8CiAJCSBNQUNfUkdNSUlfTU9ERV9UWF9SRVNFVCk7Ci0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9TVERfSUJORF9ESVNBQkxFKSkgeworCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEUpKSB7CiAJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOKQogCQkJdmFsIHw9IE1BQ19SR01JSV9NT0RFX1JYX0lOVF9CIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9SWF9RVUFMSVRZIHwKQEAgLTEwMjgsNiArMTAzNCwxNyBAQAogCXR3MzJfZihNQUNfTUlfTU9ERSwgdHAtPm1pX21vZGUpOwogCXVkZWxheSg4MCk7CiAKKwlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQorCQl0ZzNfbWRpb19jb25maWdfNTc4NSh0cCk7Cit9CisKK3N0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKwl1MzIgcmVnOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKIAkJdTMyIGZ1bmNudW0sIGlzX3NlcmRlczsKIApAQCAtMTA0NywxNyArMTA2NCw2IEBACiAJfSBlbHNlCiAJCXRwLT5waHlfYWRkciA9IFRHM19QSFlfTUlJX0FERFI7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQotCQl0ZzNfbWRpb19jb25maWdfNTc4NSh0cCk7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cCkKLXsKLQlpbnQgaTsKLQl1MzIgcmVnOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0KIAl0ZzNfbWRpb19zdGFydCh0cCk7CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHx8CkBAIC0xMDkyLDggKzEwOTgsNyBAQAogCiAJaSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtPm1kaW9fYnVzKTsKIAlpZiAoaSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbWRpb2J1c19yZWcgZmFpbGVkICgweCV4KVxuIiwKLQkJCXRwLT5kZXYtPm5hbWUsIGkpOworCQluZXRkZXZfd2Fybih0cC0+ZGV2LCAibWRpb2J1c19yZWcgZmFpbGVkICgweCV4KVxuIiwgaSk7CiAJCW1kaW9idXNfZnJlZSh0cC0+bWRpb19idXMpOwogCQlyZXR1cm4gaTsKIAl9CkBAIC0xMTAxLDM1ICsxMTA2LDM1IEBACiAJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdOwogCiAJaWYgKCFwaHlkZXYgfHwgIXBoeWRldi0+ZHJ2KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBQSFkgZGV2aWNlc1xuIiwgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl93YXJuKHRwLT5kZXYsICJObyBQSFkgZGV2aWNlc1xuIik7CiAJCW1kaW9idXNfdW5yZWdpc3Rlcih0cC0+bWRpb19idXMpOwogCQltZGlvYnVzX2ZyZWUodHAtPm1kaW9fYnVzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJc3dpdGNoIChwaHlkZXYtPmRydi0+cGh5X2lkICYgcGh5ZGV2LT5kcnYtPnBoeV9pZF9tYXNrKSB7Ci0JY2FzZSBURzNfUEhZX0lEX0JDTTU3NzgwOgorCWNhc2UgUEhZX0lEX0JDTTU3NzgwOgogCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOwogCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9BVVRPX1BXUkRXTl9FTkFCTEU7CiAJCWJyZWFrOwotCWNhc2UgVEczX1BIWV9JRF9CQ001MDYxMDoKLQljYXNlIFRHM19QSFlfSURfQkNNNTA2MTBNOgorCWNhc2UgUEhZX0lEX0JDTTUwNjEwOgorCWNhc2UgUEhZX0lEX0JDTTUwNjEwTToKIAkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fQ0xFQVJfUkdNSUlfTU9ERSB8CiAJCQkJICAgICBQSFlfQlJDTV9SWF9SRUZDTEtfVU5VU0VEIHwKIAkJCQkgICAgIFBIWV9CUkNNX0RJU19UWENSWENfTk9FTlJHWSB8CiAJCQkJICAgICBQSFlfQlJDTV9BVVRPX1BXUkRXTl9FTkFCTEU7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpCisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFKQogCQkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fU1REX0lCTkRfRElTQUJMRTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9FWFRfSUJORF9SWF9FTkFCTEU7CiAJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1RYX0VOKQogCQkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fRVhUX0lCTkRfVFhfRU5BQkxFOwogCQkvKiBmYWxsdGhydSAqLwotCWNhc2UgVEczX1BIWV9JRF9SVEw4MjExQzoKKwljYXNlIFBIWV9JRF9SVEw4MjExQzoKIAkJcGh5ZGV2LT5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk7CiAJCWJyZWFrOwotCWNhc2UgVEczX1BIWV9JRF9SVEw4MjAxRToKLQljYXNlIFRHM19QSFlfSURfQkNNQUMxMzE6CisJY2FzZSBQSFlfSURfUlRMODIwMUU6CisJY2FzZSBQSFlfSURfQkNNQUMxMzE6CiAJCXBoeWRldi0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKIAkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fQVVUT19QV1JEV05fRU5BQkxFOwogCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QSFlfSVNfRkVUOwpAQCAtMTI0NSwyNyArMTI1MCwyMiBAQAogc3RhdGljIHZvaWQgdGczX2xpbmtfcmVwb3J0KHN0cnVjdCB0ZzMgKnRwKQogewogCWlmICghbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkgewotCQlpZiAobmV0aWZfbXNnX2xpbmsodHApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIGRvd24uXG4iLAotCQkJICAgICAgIHRwLT5kZXYtPm5hbWUpOworCQluZXRpZl9pbmZvKHRwLCBsaW5rLCB0cC0+ZGV2LCAiTGluayBpcyBkb3duXG4iKTsKIAkJdGczX3VtcF9saW5rX3JlcG9ydCh0cCk7CiAJfSBlbHNlIGlmIChuZXRpZl9tc2dfbGluayh0cCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIHVwIGF0ICVkIE1icHMsICVzIGR1cGxleC5cbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLAotCQkgICAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCA/Ci0JCQkxMDAwIDoKLQkJCSh0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCA/Ci0JCQkgMTAwIDogMTApKSwKLQkJICAgICAgICh0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleCA9PSBEVVBMRVhfRlVMTCA/Ci0JCQkiZnVsbCIgOiAiaGFsZiIpKTsKKwkJbmV0ZGV2X2luZm8odHAtPmRldiwgIkxpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4XG4iLAorCQkJICAgICh0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAgPworCQkJICAgICAxMDAwIDoKKwkJCSAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwID8KKwkJCSAgICAgIDEwMCA6IDEwKSksCisJCQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4ID09IERVUExFWF9GVUxMID8KKwkJCSAgICAgImZ1bGwiIDogImhhbGYiKSk7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogRmxvdyBjb250cm9sIGlzICVzIGZvciBUWCBhbmQgJXMgZm9yIFJYLlxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsCi0JCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9UWCkgPwotCQkgICAgICAgIm9uIiA6ICJvZmYiLAotCQkgICAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZmxvd2N0cmwgJiBGTE9XX0NUUkxfUlgpID8KLQkJICAgICAgICJvbiIgOiAib2ZmIik7CisJCW5ldGRldl9pbmZvKHRwLT5kZXYsICJGbG93IGNvbnRyb2wgaXMgJXMgZm9yIFRYIGFuZCAlcyBmb3IgUlhcbiIsCisJCQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZmxvd2N0cmwgJiBGTE9XX0NUUkxfVFgpID8KKwkJCSAgICAib24iIDogIm9mZiIsCisJCQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZmxvd2N0cmwgJiBGTE9XX0NUUkxfUlgpID8KKwkJCSAgICAib24iIDogIm9mZiIpOwogCQl0ZzNfdW1wX2xpbmtfcmVwb3J0KHRwKTsKIAl9CiB9CkBAIC0xNDY0LDcgKzE0NjQsNyBAQAogCXBoeWRldiA9IHBoeV9jb25uZWN0KHRwLT5kZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHRnM19hZGp1c3RfbGluaywKIAkJCSAgICAgcGh5ZGV2LT5kZXZfZmxhZ3MsIHBoeWRldi0+aW50ZXJmYWNlKTsKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIHRwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CiAJfQogCkBAIC0xNTY0LDcgKzE1NjQsOSBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8CisJCShHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgorCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykpKQogCQlyZXR1cm47CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CkBAIC0xOTM5LDYgKzE5NDEsMTAgQEAKIAkJfQogCX0KIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkKKwkJcmV0dXJuIDA7CisKIAl0ZzNfcGh5X2FwcGx5X290cCh0cCk7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfRU5BQkxFX0FQRCkKQEAgLTE5ODIsNyArMTk4OCw3IEBACiAJfQogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAoYml0IDE0KSBvbiBhbGwgY2hpcHMgdGhhdCAqLwogCS8qIHN1cHBvcnQganVtYm8gZnJhbWVzICovCi0JaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CisJaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSA9PSBURzNfUEhZX0lEX0JDTTU0MDEpIHsKIAkJLyogQ2Fubm90IGRvIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIDU0MDEgKi8KIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDRjMjApOwogCX0gZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKQEAgLTIwMTksNyArMjAyNSw5IEBACiB7CiAJc3RydWN0IHRnMyAqdHBfcGVlciA9IHRwOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykgPT0gMCkKKwkvKiBUaGUgR1BJT3MgZG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IG9uIDU3NzY1LiAqLworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU19OSUMpID09IDAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQlyZXR1cm47CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKQEAgLTIxMzIsNyArMjE0MCw3IEBACiB7CiAJaWYgKHRwLT5sZWRfY3RybCA9PSBMRURfQ1RSTF9NT0RFX1BIWV8yKQogCQlyZXR1cm4gMTsKLQllbHNlIGlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQxMSkgeworCWVsc2UgaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSA9PSBURzNfUEhZX0lEX0JDTTU0MTEpIHsKIAkJaWYgKHNwZWVkICE9IFNQRUVEXzEwKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMCkKQEAgLTI0ODUsOCArMjQ5Myw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEludmFsaWQgcG93ZXIgc3RhdGUgKEQlZCkgcmVxdWVzdGVkXG4iLAotCQkJdHAtPmRldi0+bmFtZSwgc3RhdGUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJJbnZhbGlkIHBvd2VyIHN0YXRlIChEJWQpIHJlcXVlc3RlZFxuIiwKKwkJCSAgIHN0YXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNTQ4LDExICsyNTU2LDExIEBACiAJCQlwaHlfc3RhcnRfYW5lZyhwaHlkZXYpOwogCiAJCQlwaHlpZCA9IHBoeWRldi0+ZHJ2LT5waHlfaWQgJiBwaHlkZXYtPmRydi0+cGh5X2lkX21hc2s7Ci0JCQlpZiAocGh5aWQgIT0gVEczX1BIWV9JRF9CQ01BQzEzMSkgewotCQkJCXBoeWlkICY9IFRHM19QSFlfT1VJX01BU0s7Ci0JCQkJaWYgKHBoeWlkID09IFRHM19QSFlfT1VJXzEgfHwKLQkJCQkgICAgcGh5aWQgPT0gVEczX1BIWV9PVUlfMiB8fAotCQkJCSAgICBwaHlpZCA9PSBURzNfUEhZX09VSV8zKQorCQkJaWYgKHBoeWlkICE9IFBIWV9JRF9CQ01BQzEzMSkgeworCQkJCXBoeWlkICY9IFBIWV9CQ01fT1VJX01BU0s7CisJCQkJaWYgKHBoeWlkID09IFBIWV9CQ01fT1VJXzEgfHwKKwkJCQkgICAgcGh5aWQgPT0gUEhZX0JDTV9PVUlfMiB8fAorCQkJCSAgICBwaHlpZCA9PSBQSFlfQkNNX09VSV8zKQogCQkJCQlkb19sb3dfcG93ZXIgPSB0cnVlOwogCQkJfQogCQl9CkBAIC0zMDYyLDcgKzMwNzAsNyBAQAogCWlmIChmb3JjZV9yZXNldCkKIAkJdGczX3BoeV9yZXNldCh0cCk7CiAKLQlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MDEpIHsKKwlpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spID09IFRHM19QSFlfSURfQkNNNTQwMSkgewogCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKTsKIAkJaWYgKHRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpIHx8CiAJCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19JTklUX0NPTVBMRVRFKSkKQEAgLTMwODMsNyArMzA5MSw4IEBACiAJCQkJfQogCQkJfQogCi0JCQlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfUkVWX01BU0spID09IFBIWV9SRVZfQkNNNTQwMV9CMCAmJgorCQkJaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9SRVZfTUFTSykgPT0KKwkJCSAgICBURzNfUEhZX1JFVl9CQ001NDAxX0IwICYmCiAJCQkgICAgIShibXNyICYgQk1TUl9MU1RBVFVTKSAmJgogCQkJICAgIHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJCWVyciA9IHRnM19waHlfcmVzZXQodHApOwpAQCAtMzIzOCw3ICszMjQ3LDcgQEAKIAkvKiA/Pz8gV2l0aG91dCB0aGlzIHNldHRpbmcgTmV0Z2VhciBHQTMwMlQgUEhZIGRvZXMgbm90CiAJICogPz8/IHNlbmQvcmVjZWl2ZSBwYWNrZXRzLi4uCiAJICovCi0JaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDExICYmCisJaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSA9PSBURzNfUEhZX0lEX0JDTTU0MTEgJiYKIAkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDBfQUxUSU1BKSB7CiAJCXRwLT5taV9tb2RlIHw9IE1BQ19NSV9NT0RFX0FVVE9fUE9MTDsKIAkJdHczMl9mKE1BQ19NSV9NT0RFLCB0cC0+bWlfbW9kZSk7CkBAIC0zOTUzLDcgKzM5NjIsNyBAQAogCXR3MzJfZihNQUNfTU9ERSwgdHAtPm1hY19tb2RlKTsKIAl1ZGVsYXkoNDApOwogCi0JaWYgKHRwLT5waHlfaWQgPT0gUEhZX0lEX0JDTTgwMDIpCisJaWYgKHRwLT5waHlfaWQgPT0gVEczX1BIWV9JRF9CQ004MDAyKQogCQl0ZzNfaW5pdF9iY204MDAyKHRwKTsKIAogCS8qIEVuYWJsZSBsaW5rIGNoYW5nZSBldmVudCBldmVuIHdoZW4gc2VyZGVzIHBvbGxpbmcuICAqLwpAQCAtNDMyNiwxMCArNDMzNSw4IEBACiAJQlVHX09OKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKSB8fAogCSAgICAgICB0cC0+d3JpdGUzMl90eF9tYm94ID09IHRnM193cml0ZV9pbmRpcmVjdF9tYm94KTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogVGhlIHN5c3RlbSBtYXkgYmUgcmUtb3JkZXJpbmcgbWVtb3J5LSIKLQkgICAgICAgIm1hcHBlZCBJL08gY3ljbGVzIHRvIHRoZSBuZXR3b3JrIGRldmljZSwgYXR0ZW1wdGluZyB0byAiCi0JICAgICAgICJyZWNvdmVyLiBQbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHRoZSBkcml2ZXIgbWFpbnRhaW5lciAiCi0JICAgICAgICJhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIsIHRwLT5kZXYtPm5hbWUpOworCW5ldGRldl93YXJuKHRwLT5kZXYsICJUaGUgc3lzdGVtIG1heSBiZSByZS1vcmRlcmluZyBtZW1vcnktbWFwcGVkIEkvTyBjeWNsZXMgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLCBhdHRlbXB0aW5nIHRvIHJlY292ZXJcbiIKKwkJICAgICJQbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHRoZSBkcml2ZXIgbWFpbnRhaW5lciBhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIpOwogCiAJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CiAJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HOwpAQCAtNDUzOCw2ICs0NTQ1LDEyIEBACiAJCQkgICBwY2lfdW5tYXBfYWRkcihzcmNfbWFwLCBtYXBwaW5nKSk7CiAJZGVzdF9kZXNjLT5hZGRyX2hpID0gc3JjX2Rlc2MtPmFkZHJfaGk7CiAJZGVzdF9kZXNjLT5hZGRyX2xvID0gc3JjX2Rlc2MtPmFkZHJfbG87CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgdXBkYXRlIHRvIHRoZSBza2IgaGFwcGVucyBhZnRlciB0aGUgcGh5c2ljYWwKKwkgKiBhZGRyZXNzZXMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkIHRvIHRoZSBuZXcgQkQgbG9jYXRpb24uCisJICovCisJc21wX3dtYigpOworCiAJc3JjX21hcC0+c2tiID0gTlVMTDsKIH0KIApAQCAtNDYzOCwxMSArNDY1MSwxNiBAQAogCQkJaWYgKHNrYl9zaXplIDwgMCkKIAkJCQlnb3RvIGRyb3BfaXQ7CiAKLQkJCXJpLT5za2IgPSBOVUxMOwotCiAJCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LCBkbWFfYWRkciwgc2tiX3NpemUsCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCisJCQkvKiBFbnN1cmUgdGhhdCB0aGUgdXBkYXRlIHRvIHRoZSBza2IgaGFwcGVucworCQkJICogYWZ0ZXIgdGhlIHVzYWdlIG9mIHRoZSBvbGQgRE1BIG1hcHBpbmcuCisJCQkgKi8KKwkJCXNtcF93bWIoKTsKKworCQkJcmktPnNrYiA9IE5VTEw7CisKIAkJCXNrYl9wdXQoc2tiLCBsZW4pOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHNrX2J1ZmYgKmNvcHlfc2tiOwpAQCAtNDcxOSw3ICs0NzM3LDcgQEAKIAl0dzMyX3J4X21ib3godG5hcGktPmNvbnNtYm94LCBzd19pZHgpOwogCiAJLyogUmVmaWxsIFJYIHJpbmcocykuICovCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSB8fCB0bmFwaSA9PSAmdHAtPm5hcGlbMV0pIHsKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpKSB7CiAJCWlmICh3b3JrX21hc2sgJiBSWERfT1BBUVVFX1JJTkdfU1REKSB7CiAJCQl0cHItPnJ4X3N0ZF9wcm9kX2lkeCA9IHN0ZF9wcm9kX2lkeCAlIFRHM19SWF9SSU5HX1NJWkU7CiAJCQl0dzMyX3J4X21ib3goVEczX1JYX1NURF9QUk9EX0lEWF9SRUcsCkBAIC00NzQxLDcgKzQ3NTksOCBAQAogCQl0cHItPnJ4X3N0ZF9wcm9kX2lkeCA9IHN0ZF9wcm9kX2lkeCAlIFRHM19SWF9SSU5HX1NJWkU7CiAJCXRwci0+cnhfam1iX3Byb2RfaWR4ID0gam1iX3Byb2RfaWR4ICUgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsKIAotCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaVsxXS5uYXBpKTsKKwkJaWYgKHRuYXBpICE9ICZ0cC0+bmFwaVsxXSkKKwkJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpWzFdLm5hcGkpOwogCX0KIAogCXJldHVybiByZWNlaXZlZDsKQEAgLTQ3NzMsMTIgKzQ3OTIsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHRnM19yeF9wcm9kcmluZ194ZmVyKHN0cnVjdCB0ZzMgKnRwLAotCQkJCSBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqZHByLAotCQkJCSBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqc3ByKQorc3RhdGljIGludCB0ZzNfcnhfcHJvZHJpbmdfeGZlcihzdHJ1Y3QgdGczICp0cCwKKwkJCQlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqZHByLAorCQkJCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpzcHIpCiB7CiAJdTMyIHNpLCBkaSwgY3B5Y250LCBzcmNfcHJvZF9pZHg7Ci0JaW50IGk7CisJaW50IGksIGVyciA9IDA7CiAKIAl3aGlsZSAoMSkgewogCQlzcmNfcHJvZF9pZHggPSBzcHItPnJ4X3N0ZF9wcm9kX2lkeDsKQEAgLTQ4MDEsNiArNDgyMCwyMyBAQAogCQlzaSA9IHNwci0+cnhfc3RkX2NvbnNfaWR4OwogCQlkaSA9IGRwci0+cnhfc3RkX3Byb2RfaWR4OwogCisJCWZvciAoaSA9IGRpOyBpIDwgZGkgKyBjcHljbnQ7IGkrKykgeworCQkJaWYgKGRwci0+cnhfc3RkX2J1ZmZlcnNbaV0uc2tiKSB7CisJCQkJY3B5Y250ID0gaSAtIGRpOworCQkJCWVyciA9IC1FTk9TUEM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWNweWNudCkKKwkJCWJyZWFrOworCisJCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIHJ4X3N0ZF9idWZmZXJzIHJpbmcgYW5kIHRoZQorCQkgKiBzaGFkb3dlZCBoYXJkd2FyZSBwcm9kdWNlciByaW5nIGZyb20gdGczX3JlY3ljbGVfc2tiKCkgYXJlCisJCSAqIG9yZGVyZWQgY29ycmVjdGx5IFdSVCB0aGUgc2tiIGNoZWNrIGFib3ZlLgorCQkgKi8KKwkJc21wX3JtYigpOworCiAJCW1lbWNweSgmZHByLT5yeF9zdGRfYnVmZmVyc1tkaV0sCiAJCSAgICAgICAmc3ByLT5yeF9zdGRfYnVmZmVyc1tzaV0sCiAJCSAgICAgICBjcHljbnQgKiBzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykpOwpAQCAtNDg0MSw2ICs0ODc3LDIzIEBACiAJCXNpID0gc3ByLT5yeF9qbWJfY29uc19pZHg7CiAJCWRpID0gZHByLT5yeF9qbWJfcHJvZF9pZHg7CiAKKwkJZm9yIChpID0gZGk7IGkgPCBkaSArIGNweWNudDsgaSsrKSB7CisJCQlpZiAoZHByLT5yeF9qbWJfYnVmZmVyc1tpXS5za2IpIHsKKwkJCQljcHljbnQgPSBpIC0gZGk7CisJCQkJZXJyID0gLUVOT1NQQzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghY3B5Y250KQorCQkJYnJlYWs7CisKKwkJLyogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgcnhfam1iX2J1ZmZlcnMgcmluZyBhbmQgdGhlCisJCSAqIHNoYWRvd2VkIGhhcmR3YXJlIHByb2R1Y2VyIHJpbmcgZnJvbSB0ZzNfcmVjeWNsZV9za2IoKSBhcmUKKwkJICogb3JkZXJlZCBjb3JyZWN0bHkgV1JUIHRoZSBza2IgY2hlY2sgYWJvdmUuCisJCSAqLworCQlzbXBfcm1iKCk7CisKIAkJbWVtY3B5KCZkcHItPnJ4X2ptYl9idWZmZXJzW2RpXSwKIAkJICAgICAgICZzcHItPnJ4X2ptYl9idWZmZXJzW3NpXSwKIAkJICAgICAgIGNweWNudCAqIHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSk7CkBAIC00ODU4LDYgKzQ5MTEsOCBAQAogCQlkcHItPnJ4X2ptYl9wcm9kX2lkeCA9IChkcHItPnJ4X2ptYl9wcm9kX2lkeCArIGNweWNudCkgJQogCQkJCSAgICAgICBURzNfUlhfSlVNQk9fUklOR19TSVpFOwogCX0KKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgdGczX3BvbGxfd29yayhzdHJ1Y3QgdGczX25hcGkgKnRuYXBpLCBpbnQgd29ya19kb25lLCBpbnQgYnVkZ2V0KQpAQCAtNDg3OSwyNyArNDkzNCwyOSBAQAogCQl3b3JrX2RvbmUgKz0gdGczX3J4KHRuYXBpLCBidWRnZXQgLSB3b3JrX2RvbmUpOwogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpICYmIHRuYXBpID09ICZ0cC0+bmFwaVsxXSkgewotCQlpbnQgaTsKLQkJdTMyIHN0ZF9wcm9kX2lkeCA9IHRwLT5wcm9kcmluZ1swXS5yeF9zdGRfcHJvZF9pZHg7Ci0JCXUzMiBqbWJfcHJvZF9pZHggPSB0cC0+cHJvZHJpbmdbMF0ucnhfam1iX3Byb2RfaWR4OworCQlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqZHByID0gJnRwLT5wcm9kcmluZ1swXTsKKwkJaW50IGksIGVyciA9IDA7CisJCXUzMiBzdGRfcHJvZF9pZHggPSBkcHItPnJ4X3N0ZF9wcm9kX2lkeDsKKwkJdTMyIGptYl9wcm9kX2lkeCA9IGRwci0+cnhfam1iX3Byb2RfaWR4OwogCi0JCWZvciAoaSA9IDI7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQotCQkJdGczX3J4X3Byb2RyaW5nX3hmZXIodHAsIHRuYXBpLT5wcm9kcmluZywKLQkJCQkJICAgICB0cC0+bmFwaVtpXS5wcm9kcmluZyk7CisJCWZvciAoaSA9IDE7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQorCQkJZXJyIHw9IHRnM19yeF9wcm9kcmluZ194ZmVyKHRwLCBkcHIsCisJCQkJCQkgICAgdHAtPm5hcGlbaV0ucHJvZHJpbmcpOwogCiAJCXdtYigpOwogCi0JCWlmIChzdGRfcHJvZF9pZHggIT0gdHAtPnByb2RyaW5nWzBdLnJ4X3N0ZF9wcm9kX2lkeCkgewotCQkJdTMyIG1ib3ggPSBURzNfUlhfU1REX1BST0RfSURYX1JFRzsKLQkJCXR3MzJfcnhfbWJveChtYm94LCB0cC0+cHJvZHJpbmdbMF0ucnhfc3RkX3Byb2RfaWR4KTsKLQkJfQorCQlpZiAoc3RkX3Byb2RfaWR4ICE9IGRwci0+cnhfc3RkX3Byb2RfaWR4KQorCQkJdHczMl9yeF9tYm94KFRHM19SWF9TVERfUFJPRF9JRFhfUkVHLAorCQkJCSAgICAgZHByLT5yeF9zdGRfcHJvZF9pZHgpOwogCi0JCWlmIChqbWJfcHJvZF9pZHggIT0gdHAtPnByb2RyaW5nWzBdLnJ4X2ptYl9wcm9kX2lkeCkgewotCQkJdTMyIG1ib3ggPSBURzNfUlhfSk1CX1BST0RfSURYX1JFRzsKLQkJCXR3MzJfcnhfbWJveChtYm94LCB0cC0+cHJvZHJpbmdbMF0ucnhfam1iX3Byb2RfaWR4KTsKLQkJfQorCQlpZiAoam1iX3Byb2RfaWR4ICE9IGRwci0+cnhfam1iX3Byb2RfaWR4KQorCQkJdHczMl9yeF9tYm94KFRHM19SWF9KTUJfUFJPRF9JRFhfUkVHLAorCQkJCSAgICAgZHByLT5yeF9qbWJfcHJvZF9pZHgpOwogCiAJCW1taW93YigpOworCisJCWlmIChlcnIpCisJCQl0dzMyX2YoSE9TVENDX01PREUsIHRwLT5jb2FsX25vdyk7CiAJfQogCiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTUyMDMsOCArNTI2MCw3IEBACiAKIAllcnIgPSB0ZzNfaW5pdF9odyh0cCwgcmVzZXRfcGh5KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBGYWlsZWQgdG8gcmUtaW5pdGlhbGl6ZSBkZXZpY2UsICIKLQkJICAgICAgICJhYm9ydGluZy5cbiIsIHRwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJGYWlsZWQgdG8gcmUtaW5pdGlhbGl6ZSBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCQl0ZzNfZnVsbF91bmxvY2sodHApOwogCQlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKQEAgLTUyNzcsMTAgKzUzMzMsMTAgQEAKIAogc3RhdGljIHZvaWQgdGczX2R1bXBfc2hvcnRfc3RhdGUoc3RydWN0IHRnMyAqdHApCiB7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiREVCVUc6IE1BQ19UWF9TVEFUVVNbJTA4eF0gTUFDX1JYX1NUQVRVU1slMDh4XVxuIiwKLQkgICAgICAgdHIzMihNQUNfVFhfU1RBVFVTKSwgdHIzMihNQUNfUlhfU1RBVFVTKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiREVCVUc6IFJETUFDX1NUQVRVU1slMDh4XSBXRE1BQ19TVEFUVVNbJTA4eF1cbiIsCi0JICAgICAgIHRyMzIoUkRNQUNfU1RBVFVTKSwgdHIzMihXRE1BQ19TVEFUVVMpKTsKKwluZXRkZXZfZXJyKHRwLT5kZXYsICJERUJVRzogTUFDX1RYX1NUQVRVU1slMDh4XSBNQUNfUlhfU1RBVFVTWyUwOHhdXG4iLAorCQkgICB0cjMyKE1BQ19UWF9TVEFUVVMpLCB0cjMyKE1BQ19SWF9TVEFUVVMpKTsKKwluZXRkZXZfZXJyKHRwLT5kZXYsICJERUJVRzogUkRNQUNfU1RBVFVTWyUwOHhdIFdETUFDX1NUQVRVU1slMDh4XVxuIiwKKwkJICAgdHIzMihSRE1BQ19TVEFUVVMpLCB0cjMyKFdETUFDX1NUQVRVUykpOwogfQogCiBzdGF0aWMgdm9pZCB0ZzNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTI4OCw4ICs1MzQ0LDcgQEAKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAobmV0aWZfbXNnX3R4X2Vycih0cCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ0cmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIik7CiAJCXRnM19kdW1wX3Nob3J0X3N0YXRlKHRwKTsKIAl9CiAKQEAgLTU0NTMsOCArNTUwOCw3IEBACiAJCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAKIAkJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCi0JCQkgICAgICAgInF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQl9CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC01NjU3LDggKzU3MTEsNyBAQAogCQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCiAJCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gIgotCQkJICAgICAgICJxdWV1ZSBhd2FrZSFcbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIkJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJfQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtNjAwNSwxMSArNjA1OCw4IEBACiAJLyogTm93IGFsbG9jYXRlIGZyZXNoIFNLQnMgZm9yIGVhY2ggcnggcmluZy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgdHAtPnJ4X3BlbmRpbmc7IGkrKykgewogCQlpZiAodGczX2FsbG9jX3J4X3NrYih0cCwgdHByLCBSWERfT1BBUVVFX1JJTkdfU1RELCBpKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlggc3RhbmRhcmQgcmluZywgIgotCQkJICAgICAgICJvbmx5ICVkIG91dCBvZiAlZCBidWZmZXJzIHdlcmUgYWxsb2NhdGVkICIKLQkJCSAgICAgICAic3VjY2Vzc2Z1bGx5LlxuIiwKLQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfcGVuZGluZyk7CisJCQluZXRkZXZfd2Fybih0cC0+ZGV2LCAiVXNpbmcgYSBzbWFsbGVyIFJYIHN0YW5kYXJkIHJpbmcsIG9ubHkgJWQgb3V0IG9mICVkIGJ1ZmZlcnMgd2VyZSBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5XG4iLAorCQkJCSAgICBpLCB0cC0+cnhfcGVuZGluZyk7CiAJCQlpZiAoaSA9PSAwKQogCQkJCWdvdG8gaW5pdGZhaWw7CiAJCQl0cC0+cnhfcGVuZGluZyA9IGk7CkBAIC02MDIyLDMxICs2MDcyLDI4IEBACiAKIAltZW1zZXQodHByLT5yeF9qbWIsIDAsIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpIHsKLQkJZm9yIChpID0gMDsgaSA8IFRHM19SWF9KVU1CT19SSU5HX1NJWkU7IGkrKykgewotCQkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqcnhkOworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkpCisJCWdvdG8gZG9uZTsKIAotCQkJcnhkID0gJnRwci0+cnhfam1iW2ldLnN0ZDsKLQkJCXJ4ZC0+aWR4X2xlbiA9IFRHM19SWF9KTUJfRE1BX1NaIDw8IFJYRF9MRU5fU0hJRlQ7Ci0JCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCkgfAotCQkJCVJYRF9GTEFHX0pVTUJPOwotCQkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX0pVTUJPIHwKLQkJCSAgICAgICAoaSA8PCBSWERfT1BBUVVFX0lOREVYX1NISUZUKSk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKnJ4ZDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgdHAtPnJ4X2p1bWJvX3BlbmRpbmc7IGkrKykgewotCQkJaWYgKHRnM19hbGxvY19yeF9za2IodHAsIHRwciwgUlhEX09QQVFVRV9SSU5HX0pVTUJPLAotCQkJCQkgICAgIGkpIDwgMCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkJICAgICAgICIlczogVXNpbmcgYSBzbWFsbGVyIFJYIGp1bWJvIHJpbmcsICIKLQkJCQkgICAgICAgIm9ubHkgJWQgb3V0IG9mICVkIGJ1ZmZlcnMgd2VyZSAiCi0JCQkJICAgICAgICJhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5LlxuIiwKLQkJCQkgICAgICAgdHAtPmRldi0+bmFtZSwgaSwgdHAtPnJ4X2p1bWJvX3BlbmRpbmcpOwotCQkJCWlmIChpID09IDApCi0JCQkJCWdvdG8gaW5pdGZhaWw7Ci0JCQkJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgPSBpOwotCQkJCWJyZWFrOwotCQkJfQorCQlyeGQgPSAmdHByLT5yeF9qbWJbaV0uc3RkOworCQlyeGQtPmlkeF9sZW4gPSBURzNfUlhfSk1CX0RNQV9TWiA8PCBSWERfTEVOX1NISUZUOworCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCkgfAorCQkJCSAgUlhEX0ZMQUdfSlVNQk87CisJCXJ4ZC0+b3BhcXVlID0gKFJYRF9PUEFRVUVfUklOR19KVU1CTyB8CisJCSAgICAgICAoaSA8PCBSWERfT1BBUVVFX0lOREVYX1NISUZUKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHRwLT5yeF9qdW1ib19wZW5kaW5nOyBpKyspIHsKKwkJaWYgKHRnM19hbGxvY19yeF9za2IodHAsIHRwciwgUlhEX09QQVFVRV9SSU5HX0pVTUJPLCBpKSA8IDApIHsKKwkJCW5ldGRldl93YXJuKHRwLT5kZXYsICJVc2luZyBhIHNtYWxsZXIgUlgganVtYm8gcmluZywgb25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlIGFsbG9jYXRlZCBzdWNjZXNzZnVsbHlcbiIsCisJCQkJICAgIGksIHRwLT5yeF9qdW1ib19wZW5kaW5nKTsKKwkJCWlmIChpID09IDApCisJCQkJZ290byBpbml0ZmFpbDsKKwkJCXRwLT5yeF9qdW1ib19wZW5kaW5nID0gaTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC02MTU5LDggKzYyMDYsNyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfQogCi0JCWlmICh0cC0+aXJxX2NudCA9PSAxIHx8IGogIT0gdHAtPmlycV9jbnQgLSAxKQotCQkJdGczX3J4X3Byb2RyaW5nX2ZyZWUodHAsICZ0cC0+cHJvZHJpbmdbal0pOworCQl0ZzNfcnhfcHJvZHJpbmdfZnJlZSh0cCwgJnRwLT5wcm9kcmluZ1tqXSk7CiAJfQogfQogCkBAIC02MTk2LDkgKzYyNDIsMTAgQEAKIAkJaWYgKHRuYXBpLT5yeF9yY2IpCiAJCQltZW1zZXQodG5hcGktPnJ4X3JjYiwgMCwgVEczX1JYX1JDQl9SSU5HX0JZVEVTKHRwKSk7CiAKLQkJaWYgKCh0cC0+aXJxX2NudCA9PSAxIHx8IGkgIT0gdHAtPmlycV9jbnQgLSAxKSAmJgotCQkJdGczX3J4X3Byb2RyaW5nX2FsbG9jKHRwLCAmdHAtPnByb2RyaW5nW2ldKSkKKwkJaWYgKHRnM19yeF9wcm9kcmluZ19hbGxvYyh0cCwgJnRwLT5wcm9kcmluZ1tpXSkpIHsKKwkJCXRnM19mcmVlX3JpbmdzKHRwKTsKIAkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02MjQ1LDcgKzYyOTIsNyBAQAogCQl0cC0+aHdfc3RhdHMgPSBOVUxMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCAodHAtPmlycV9jbnQgPT0gMSA/IDEgOiB0cC0+aXJxX2NudCAtIDEpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspCiAJCXRnM19yeF9wcm9kcmluZ19maW5pKHRwLCAmdHAtPnByb2RyaW5nW2ldKTsKIH0KIApAQCAtNjI1Nyw3ICs2MzA0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAodHAtPmlycV9jbnQgPT0gMSA/IDEgOiB0cC0+aXJxX2NudCAtIDEpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgewogCQlpZiAodGczX3J4X3Byb2RyaW5nX2luaXQodHAsICZ0cC0+cHJvZHJpbmdbaV0pKQogCQkJZ290byBlcnJfb3V0OwogCX0KQEAgLTYzMjIsMTAgKzYzNjksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAodHAtPmlycV9jbnQgPT0gMSkKLQkJCXRuYXBpLT5wcm9kcmluZyA9ICZ0cC0+cHJvZHJpbmdbMF07Ci0JCWVsc2UgaWYgKGkpCi0JCQl0bmFwaS0+cHJvZHJpbmcgPSAmdHAtPnByb2RyaW5nW2kgLSAxXTsKKwkJdG5hcGktPnByb2RyaW5nID0gJnRwLT5wcm9kcmluZ1tpXTsKIAogCQkvKgogCQkgKiBJZiBtdWx0aXZlY3RvciBSU1MgaXMgZW5hYmxlZCwgdmVjdG9yIDAgZG9lcyBub3QgaGFuZGxlCkBAIC02Mzg5LDggKzY0MzMsNyBAQAogCX0KIAogCWlmIChpID09IE1BWF9XQUlUX0NOVCAmJiAhc2lsZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19zdG9wX2Jsb2NrIHRpbWVkIG91dCwgIgotCQkgICAgICAgIm9mcz0lbHggZW5hYmxlX2JpdD0leFxuIiwKKwkJcHJfZXJyKCJ0ZzNfc3RvcF9ibG9jayB0aW1lZCBvdXQsIG9mcz0lbHggZW5hYmxlX2JpdD0leFxuIiwKIAkJICAgICAgIG9mcywgZW5hYmxlX2JpdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTY0MzcsOSArNjQ4MCw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPj0gTUFYX1dBSVRfQ05UKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19hYm9ydF9odyB0aW1lZCBvdXQgZm9yICVzLCAiCi0JCSAgICAgICAiVFhfTU9ERV9FTkFCTEUgd2lsbCBub3QgY2xlYXIgTUFDX1RYX01PREU9JTA4eFxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHRyMzIoTUFDX1RYX01PREUpKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiJXMgdGltZWQgb3V0LCBUWF9NT0RFX0VOQUJMRSB3aWxsIG5vdCBjbGVhciBNQUNfVFhfTU9ERT0lMDh4XG4iLAorCQkJICAgX19mdW5jX18sIHRyMzIoTUFDX1RYX01PREUpKTsKIAkJZXJyIHw9IC1FTk9ERVY7CiAJfQogCkBAIC02NjYwLDggKzY3MDIsMTQgQEAKIAkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEKSkgewogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRDsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE5vIGZpcm13YXJlIHJ1bm5pbmcuXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKHRwLT5kZXYsICJObyBmaXJtd2FyZSBydW5uaW5nXG4iKTsKKwl9CisKKwlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NzY1X0EwKSB7CisJCS8qIFRoZSA1Nzc2NSBBMCBuZWVkcyBhIGxpdHRsZSBtb3JlCisJCSAqIHRpbWUgdG8gZG8gc29tZSBpbXBvcnRhbnQgd29yay4KKwkJICovCisJCW1kZWxheSgxMCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MDgyLDEwICs3MTMwLDggQEAKIAl9CiAKIAlpZiAoaSA+PSAxMDAwMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0ZzNfcmVzZXRfY3B1IHRpbWVkIG91dCBmb3IgJXMsICIKLQkJICAgICAgICJhbmQgJXMgQ1BVXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwKLQkJICAgICAgIChvZmZzZXQgPT0gUlhfQ1BVX0JBU0UgPyAiUlgiIDogIlRYIikpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICIlcyB0aW1lZCBvdXQsICVzIENQVVxuIiwKKwkJCSAgIF9fZnVuY19fLCBvZmZzZXQgPT0gUlhfQ1BVX0JBU0UgPyAiUlgiIDogIlRYIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzExMCw5ICs3MTU2LDggQEAKIAogCWlmIChjcHVfYmFzZSA9PSBUWF9DUFVfQkFTRSAmJgogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19sb2FkX2Zpcm13YXJlX2NwdTogVHJ5aW5nIHRvIGxvYWQgIgotCQkgICAgICAgIlRYIGNwdSBmaXJtd2FyZSBvbiAlcyB3aGljaCBpcyA1NzA1LlxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICIlczogVHJ5aW5nIHRvIGxvYWQgVFggY3B1IGZpcm13YXJlIHdoaWNoIGlzIDU3MDVcbiIsCisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzE5MSwxMCArNzIzNiw4IEBACiAJCXVkZWxheSgxMDAwKTsKIAl9CiAJaWYgKGkgPj0gNSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0ZzNfbG9hZF9maXJtd2FyZSBmYWlscyBmb3IgJXMgIgotCQkgICAgICAgInRvIHNldCBSWCBDUFUgUEMsIGlzICUwOHggc2hvdWxkIGJlICUwOHhcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cjMyKFJYX0NQVV9CQVNFICsgQ1BVX1BDKSwKLQkJICAgICAgIGluZm8uZndfYmFzZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgInRnM19sb2FkX2Zpcm13YXJlIGZhaWxzIHRvIHNldCBSWCBDUFUgUEMsIGlzICUwOHggc2hvdWxkIGJlICUwOHhcbiIsCisJCQkgICB0cjMyKFJYX0NQVV9CQVNFICsgQ1BVX1BDKSwgaW5mby5md19iYXNlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXR3MzIoUlhfQ1BVX0JBU0UgKyBDUFVfU1RBVEUsIDB4ZmZmZmZmZmYpOwpAQCAtNzI1NywxMCArNzMwMCw4IEBACiAJCXVkZWxheSgxMDAwKTsKIAl9CiAJaWYgKGkgPj0gNSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0ZzNfbG9hZF90c29fZmlybXdhcmUgZmFpbHMgZm9yICVzICIKLQkJICAgICAgICJ0byBzZXQgQ1BVIFBDLCBpcyAlMDh4IHNob3VsZCBiZSAlMDh4XG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdHIzMihjcHVfYmFzZSArIENQVV9QQyksCi0JCSAgICAgICBpbmZvLmZ3X2Jhc2UpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICIlcyBmYWlscyB0byBzZXQgQ1BVIFBDLCBpcyAlMDh4IHNob3VsZCBiZSAlMDh4XG4iLAorCQkJICAgX19mdW5jX18sIHRyMzIoY3B1X2Jhc2UgKyBDUFVfUEMpLCBpbmZvLmZ3X2Jhc2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdHczMihjcHVfYmFzZSArIENQVV9TVEFURSwgMHhmZmZmZmZmZik7CkBAIC03NDM5LDEwICs3NDgwLDEzIEBACiAJCWZvciAoaSA9IDE7IGkgPCBURzNfSVJRX01BWF9WRUNTOyBpKyspIHsKIAkJCXRwLT5uYXBpW2ldLnR4X3Byb2QgPSAwOwogCQkJdHAtPm5hcGlbaV0udHhfY29ucyA9IDA7Ci0JCQl0dzMyX21haWxib3godHAtPm5hcGlbaV0ucHJvZG1ib3gsIDApOworCQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwkJCQl0dzMyX21haWxib3godHAtPm5hcGlbaV0ucHJvZG1ib3gsIDApOwogCQkJdHczMl9yeF9tYm94KHRwLT5uYXBpW2ldLmNvbnNtYm94LCAwKTsKIAkJCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpW2ldLmludF9tYm94LCAxKTsKIAkJfQorCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpKQorCQkJdHczMl9tYWlsYm94KHRwLT5uYXBpWzBdLnByb2RtYm94LCAwKTsKIAl9IGVsc2UgewogCQl0cC0+bmFwaVswXS50eF9wcm9kID0gMDsKIAkJdHAtPm5hcGlbMF0udHhfY29ucyA9IDA7CkBAIC03NTI4LDggKzc1NzIsNyBAQAogCQl0ZzNfYWJvcnRfaHcodHAsIDEpOwogCX0KIAotCWlmIChyZXNldF9waHkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpKQorCWlmIChyZXNldF9waHkpCiAJCXRnM19waHlfcmVzZXQodHApOwogCiAJZXJyID0gdGczX2NoaXBfcmVzZXQodHApOwpAQCAtNzU3NCw2ICs3NjE3LDIwIEBACiAJCXR3MzIoVEczX1BDSUVfTE5LQ1RMLCB2YWwgfCBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0RJUyk7CiAJfQogCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTDFQTExQRF9FTikgeworCQl1MzIgZ3JjX21vZGUgPSB0cjMyKEdSQ19NT0RFKTsKKworCQkvKiBBY2Nlc3MgdGhlIGxvd2VyIDFLIG9mIFBMIFBDSUUgYmxvY2sgcmVnaXN0ZXJzLiAqLworCQl2YWwgPSBncmNfbW9kZSAmIH5HUkNfTU9ERV9QQ0lFX1BPUlRfTUFTSzsKKwkJdHczMihHUkNfTU9ERSwgdmFsIHwgR1JDX01PREVfUENJRV9QTF9TRUwpOworCisJCXZhbCA9IHRyMzIoVEczX1BDSUVfVExETFBMX1BPUlQgKyBURzNfUENJRV9QTF9MT19QSFlDVEwxKTsKKwkJdHczMihURzNfUENJRV9UTERMUExfUE9SVCArIFRHM19QQ0lFX1BMX0xPX1BIWUNUTDEsCisJCSAgICAgdmFsIHwgVEczX1BDSUVfUExfTE9fUEhZQ1RMMV9MMVBMTFBEX0VOKTsKKworCQl0dzMyKEdSQ19NT0RFLCBncmNfbW9kZSk7CisJfQorCiAJLyogVGhpcyB3b3JrcyBhcm91bmQgYW4gaXNzdWUgd2l0aCBBdGhsb24gY2hpcHNldHMgb24KIAkgKiBCMyB0aWdvbjMgc2lsaWNvbi4gIFRoaXMgYml0IGhhcyBubyBlZmZlY3Qgb24gYW55CiAJICogb3RoZXIgcmV2aXNpb24uICBCdXQgZG8gbm90IHNldCB0aGlzIG9uIFBDSSBFeHByZXNzCkBAIC03NzA1LDggKzc3NjIsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAlpZiAoaSA+PSAyMDAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19yZXNldF9odyBjYW5ub3QgZW5hYmxlIEJVRk1HUiBmb3IgJXMuXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIiVzIGNhbm5vdCBlbmFibGUgQlVGTUdSXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzc3Miw3ICs3ODI4LDcgQEAKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAogCQkJICAgICAoUlhfSlVNQk9fTUFYX1NJWkUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCkgfAogCQkJICAgICBCRElORk9fRkxBR1NfVVNFX0VYVF9SRUNWKTsKLQkJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykKIAkJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX05JQ19BRERSLAogCQkJCSAgICAgTklDX1NSQU1fUlhfSlVNQk9fQlVGRkVSX0RFU0MpOwogCQl9IGVsc2UgewpAQCAtNzgzNCw2ICs3ODkwLDkgQEAKIAkJICAgICAgUkRNQUNfTU9ERV9GSUZPVVJVTl9FTkFCIHwgUkRNQUNfTU9ERV9GSUZPT1JFQURfRU5BQiB8CiAJCSAgICAgIFJETUFDX01PREVfTE5HUkVBRF9FTkFCKTsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX01VTFRfRE1BX1JEX0RJUzsKKwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCkBAIC04MTQzLDcgKzgyMDIsMTEgQEAKIAkvKiBQcmV2ZW50IGNoaXAgZnJvbSBkcm9wcGluZyBmcmFtZXMgd2hlbiBmbG93IGNvbnRyb2wKIAkgKiBpcyBlbmFibGVkLgogCSAqLwotCXR3MzJfZihNQUNfTE9XX1dNQVJLX01BWF9SWF9GUkFNRSwgMik7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKKwkJdmFsID0gMTsKKwllbHNlCisJCXZhbCA9IDI7CisJdHczMl9mKE1BQ19MT1dfV01BUktfTUFYX1JYX0ZSQU1FLCB2YWwpOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0ICYmCiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpKSB7CkBAIC04NTYyLDEwICs4NjI1LDggQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIE1TSSB0ZXN0IGZhaWxlZCwgZ28gYmFjayB0byBJTlR4IG1vZGUgKi8KLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE5vIGludGVycnVwdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIE1TSSwgIgotCSAgICAgICAic3dpdGNoaW5nIHRvIElOVHggbW9kZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGZhaWx1cmUgdG8gIgotCSAgICAgICAidGhlIFBDSSBtYWludGFpbmVyIGFuZCBpbmNsdWRlIHN5c3RlbSBjaGlwc2V0IGluZm9ybWF0aW9uLlxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUpOworCW5ldGRldl93YXJuKHRwLT5kZXYsICJObyBpbnRlcnJ1cHQgd2FzIGdlbmVyYXRlZCB1c2luZyBNU0ksIHN3aXRjaGluZyB0byBJTlR4IG1vZGVcbiIKKwkJICAgICJQbGVhc2UgcmVwb3J0IHRoaXMgZmFpbHVyZSB0byB0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb25cbiIpOwogCiAJZnJlZV9pcnEodHAtPm5hcGlbMF0uaXJxX3ZlYywgJnRwLT5uYXBpWzBdKTsKIApAQCAtODU5OCw4ICs4NjU5LDggQEAKIAljb25zdCBfX2JlMzIgKmZ3X2RhdGE7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmdHAtPmZ3LCB0cC0+ZndfbmVlZGVkLCAmdHAtPnBkZXYtPmRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdHAtPmZ3X25lZWRlZCk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgIHRwLT5md19uZWVkZWQpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTg2MTIsOCArODY3Myw4IEBACiAKIAl0cC0+ZndfbGVuID0gYmUzMl90b19jcHUoZndfZGF0YVsyXSk7CS8qIGluY2x1ZGVzIGJzcyAqLwogCWlmICh0cC0+ZndfbGVuIDwgKHRwLT5mdy0+c2l6ZSAtIDEyKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBib2d1cyBsZW5ndGggJWQgaW4gXCIlc1wiXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdHAtPmZ3X2xlbiwgdHAtPmZ3X25lZWRlZCk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImJvZ3VzIGxlbmd0aCAlZCBpbiBcIiVzXCJcbiIsCisJCQkgICB0cC0+ZndfbGVuLCB0cC0+ZndfbmVlZGVkKTsKIAkJcmVsZWFzZV9maXJtd2FyZSh0cC0+ZncpOwogCQl0cC0+ZncgPSBOVUxMOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg2NTEsOSArODcxMiw4IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJCWlmIChwY2lfZW5hYmxlX21zaXgodHAtPnBkZXYsIG1zaXhfZW50LCByYykpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCXByaW50ayhLRVJOX05PVElDRQotCQkgICAgICAgIiVzOiBSZXF1ZXN0ZWQgJWQgTVNJLVggdmVjdG9ycywgcmVjZWl2ZWQgJWRcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cC0+aXJxX2NudCwgcmMpOworCQluZXRkZXZfbm90aWNlKHRwLT5kZXYsICJSZXF1ZXN0ZWQgJWQgTVNJLVggdmVjdG9ycywgcmVjZWl2ZWQgJWRcbiIsCisJCQkgICAgICB0cC0+aXJxX2NudCwgcmMpOwogCQl0cC0+aXJxX2NudCA9IHJjOwogCX0KIApAQCAtODY3OCw4ICs4NzM4LDcgQEAKIAkJLyogQWxsIE1TSSBzdXBwb3J0aW5nIGNoaXBzIHNob3VsZCBzdXBwb3J0IHRhZ2dlZAogCQkgKiBzdGF0dXMuICBBc3NlcnQgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBNU0kgd2l0aG91dCBUQUdHRUQ/ICIKLQkJICAgICAgICJOb3QgdXNpbmcgTVNJLlxuIiwgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl93YXJuKHRwLT5kZXYsICJNU0kgd2l0aG91dCBUQUdHRUQ/IE5vdCB1c2luZyBNU0lcbiIpOwogCQlnb3RvIGRlZmNmZzsKIAl9CiAKQEAgLTg3MjQsMTIgKzg3ODMsMTAgQEAKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIGlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUU08gY2FwYWJpbGl0eSBkaXNhYmxlZC5cbiIsCi0JCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJCQluZXRkZXZfd2Fybih0cC0+ZGV2LCAiVFNPIGNhcGFiaWxpdHkgZGlzYWJsZWRcbiIpOwogCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19DQVBBQkxFOwogCQl9IGVsc2UgaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRTTyBjYXBhYmlsaXR5IHJlc3RvcmVkLlxuIiwKLQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9ub3RpY2UodHAtPmRldiwgIlRTTyBjYXBhYmlsaXR5IHJlc3RvcmVkXG4iKTsKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1RTT19DQVBBQkxFOwogCQl9CiAJfQpAQCAtOTM5NSwyMSArOTQ1MiwxOCBAQAogCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkvKiBBY2NlcHQgYWxsIG11bHRpY2FzdC4gKi8KIAkJdGczX3NldF9tdWx0aSAodHAsIDEpOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA8IDEpIHsKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIFJlamVjdCBhbGwgbXVsdGljYXN0LiAqLwogCQl0ZzNfc2V0X211bHRpICh0cCwgMCk7CiAJfSBlbHNlIHsKIAkJLyogQWNjZXB0IG9uZSBvciBtb3JlIG11bHRpY2FzdChzKS4gKi8KIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCXVuc2lnbmVkIGludCBpOwogCQl1MzIgbWNfZmlsdGVyWzRdID0geyAwLCB9OwogCQl1MzIgcmVnaWR4OwogCQl1MzIgYml0OwogCQl1MzIgY3JjOwogCi0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0KKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWNyYyA9IGNhbGNfY3JjIChtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCQliaXQgPSB+Y3JjICYgMHg3ZjsKIAkJCXJlZ2lkeCA9IChiaXQgJiAweDYwKSA+PiA1OwpAQCAtMTAwMDEsNTYgKzEwMDU1LDY2IEBACiAJaW50IGVyciA9IDA7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkpCi0JCQlyZXR1cm4gLUVBR0FJTjsKKwkJdTMyIG5ld2FkdjsKKwkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAotCQlpZiAoZXBhdXNlLT5hdXRvbmVnKSB7Ci0JCQl1MzIgbmV3YWR2OwotCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwkJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdOwogCi0JCQlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CisJCWlmICghKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1BhdXNlKSB8fAorCQkgICAgKCEocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXN5bV9QYXVzZSkgJiYKKwkJICAgICAoKGVwYXVzZS0+cnhfcGF1c2UgJiYgIWVwYXVzZS0+dHhfcGF1c2UpIHx8CisJCSAgICAgICghZXBhdXNlLT5yeF9wYXVzZSAmJiBlcGF1c2UtPnR4X3BhdXNlKSkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWlmIChlcGF1c2UtPnJ4X3BhdXNlKSB7Ci0JCQkJaWYgKGVwYXVzZS0+dHhfcGF1c2UpCi0JCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfUGF1c2U7Ci0JCQkJZWxzZQotCQkJCQluZXdhZHYgPSBBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJCSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7Ci0JCQl9IGVsc2UgaWYgKGVwYXVzZS0+dHhfcGF1c2UpIHsKLQkJCQluZXdhZHYgPSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7Ci0JCQl9IGVsc2UKLQkJCQluZXdhZHYgPSAwOworCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgPSAwOworCQlpZiAoZXBhdXNlLT5yeF9wYXVzZSkgeworCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsIHw9IEZMT1dfQ1RSTF9SWDsKIAotCQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkgewotCQkJCXUzMiBvbGRhZHYgPSBwaHlkZXYtPmFkdmVydGlzaW5nICYKLQkJCQkJICAgICAoQURWRVJUSVNFRF9QYXVzZSB8Ci0JCQkJCSAgICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQkJaWYgKG9sZGFkdiAhPSBuZXdhZHYpIHsKLQkJCQkJcGh5ZGV2LT5hZHZlcnRpc2luZyAmPQotCQkJCQkJfihBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJCSAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJCQkJcGh5ZGV2LT5hZHZlcnRpc2luZyB8PSBuZXdhZHY7Ci0JCQkJCWVyciA9IHBoeV9zdGFydF9hbmVnKHBoeWRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJj0KLQkJCQkJCX4oQURWRVJUSVNFRF9QYXVzZSB8Ci0JCQkJCQkgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nIHw9IG5ld2FkdjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChlcGF1c2UtPnJ4X3BhdXNlKQotCQkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCB8PSBGTE9XX0NUUkxfUlg7Ci0JCQllbHNlCi0JCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsICY9IH5GTE9XX0NUUkxfUlg7Ci0KLQkJCWlmIChlcGF1c2UtPnR4X3BhdXNlKQorCQkJaWYgKGVwYXVzZS0+dHhfcGF1c2UpIHsKIAkJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gRkxPV19DVFJMX1RYOwotCQkJZWxzZQotCQkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCAmPSB+RkxPV19DVFJMX1RYOworCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfUGF1c2U7CisJCQl9IGVsc2UKKwkJCQluZXdhZHYgPSBBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJIEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKwkJfSBlbHNlIGlmIChlcGF1c2UtPnR4X3BhdXNlKSB7CisJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gRkxPV19DVFJMX1RYOworCQkJbmV3YWR2ID0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCQl9IGVsc2UKKwkJCW5ld2FkdiA9IDA7CiAKLQkJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWlmIChlcGF1c2UtPmF1dG9uZWcpCisJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisJCWVsc2UKKwkJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkgeworCQkJdTMyIG9sZGFkdiA9IHBoeWRldi0+YWR2ZXJ0aXNpbmcgJgorCQkJCSAgICAgKEFEVkVSVElTRURfUGF1c2UgfCBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJaWYgKG9sZGFkdiAhPSBuZXdhZHYpIHsKKwkJCQlwaHlkZXYtPmFkdmVydGlzaW5nICY9CisJCQkJCX4oQURWRVJUSVNFRF9QYXVzZSB8CisJCQkJCSAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKKwkJCQlwaHlkZXYtPmFkdmVydGlzaW5nIHw9IG5ld2FkdjsKKwkJCQlpZiAocGh5ZGV2LT5hdXRvbmVnKSB7CisJCQkJCS8qCisJCQkJCSAqIEFsd2F5cyByZW5lZ290aWF0ZSB0aGUgbGluayB0bworCQkJCQkgKiBpbmZvcm0gb3VyIGxpbmsgcGFydG5lciBvZiBvdXIKKwkJCQkJICogZmxvdyBjb250cm9sIHNldHRpbmdzLCBldmVuIGlmIHRoZQorCQkJCQkgKiBmbG93IGNvbnRyb2wgaXMgZm9yY2VkLiAgTGV0CisJCQkJCSAqIHRnM19hZGp1c3RfbGluaygpIGRvIHRoZSBmaW5hbAorCQkJCQkgKiBmbG93IGNvbnRyb2wgc2V0dXAuCisJCQkJCSAqLworCQkJCQlyZXR1cm4gcGh5X3N0YXJ0X2FuZWcocGh5ZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghZXBhdXNlLT5hdXRvbmVnKQogCQkJCXRnM19zZXR1cF9mbG93X2NvbnRyb2wodHAsIDAsIDApOworCQl9IGVsc2UgeworCQkJdHAtPmxpbmtfY29uZmlnLm9yaWdfYWR2ZXJ0aXNpbmcgJj0KKwkJCQkJfihBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJdHAtPmxpbmtfY29uZmlnLm9yaWdfYWR2ZXJ0aXNpbmcgfD0gbmV3YWR2OwogCQl9CiAJfSBlbHNlIHsKIAkJaW50IGlycV9zeW5jID0gMDsKQEAgLTEwNTg0LDggKzEwNjQ4LDcgQEAKIAogb3V0OgogCWlmIChuZXRpZl9tc2dfaHcodHApKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJSZWdpc3RlciB0ZXN0IGZhaWxlZCBhdCBvZmZzZXQgJXhcbiIsCi0JCSAgICAgICBvZmZzZXQpOworCQlwcl9lcnIoIlJlZ2lzdGVyIHRlc3QgZmFpbGVkIGF0IG9mZnNldCAleFxuIiwgb2Zmc2V0KTsKIAl0dzMyKG9mZnNldCwgc2F2ZV92YWwpOwogCXJldHVybiAtRUlPOwogfQpAQCAtMTA2NDAsMTIgKzEwNzAzLDI3IEBACiAJCXsgMHgwMDAwODAwMCwgMHgwMTAwMH0sCiAJCXsgMHgwMDAxMDAwMCwgMHgwMTAwMH0sCiAJCXsgMHhmZmZmZmZmZiwgMHgwMDAwMH0KKwl9LCBtZW1fdGJsXzU3MTdbXSA9IHsKKwkJeyAweDAwMDAwMjAwLCAweDAwMDA4fSwKKwkJeyAweDAwMDEwMDAwLCAweDBhMDAwfSwKKwkJeyAweDAwMDIwMDAwLCAweDEzYzAwfSwKKwkJeyAweGZmZmZmZmZmLCAweDAwMDAwfQorCX0sIG1lbV90YmxfNTc3NjVbXSA9IHsKKwkJeyAweDAwMDAwMjAwLCAweDAwMDA4fSwKKwkJeyAweDAwMDA0MDAwLCAweDAwODAwfSwKKwkJeyAweDAwMDA2MDAwLCAweDA5ODAwfSwKKwkJeyAweDAwMDEwMDAwLCAweDBhMDAwfSwKKwkJeyAweGZmZmZmZmZmLCAweDAwMDAwfQogCX07CiAJc3RydWN0IG1lbV9lbnRyeSAqbWVtX3RibDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCisJCW1lbV90YmwgPSBtZW1fdGJsXzU3MTc7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQorCQltZW1fdGJsID0gbWVtX3RibF81Nzc2NTsKKwllbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKIAkJbWVtX3RibCA9IG1lbV90YmxfNTc1NTsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJbWVtX3RibCA9IG1lbV90YmxfNTkwNjsKQEAgLTEwNjc4LDEyICsxMDc1NiwxMiBAQAogCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksICpybmFwaTsKIAlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByID0gJnRwLT5wcm9kcmluZ1swXTsKIAorCXRuYXBpID0gJnRwLT5uYXBpWzBdOworCXJuYXBpID0gJnRwLT5uYXBpWzBdOwogCWlmICh0cC0+aXJxX2NudCA+IDEpIHsKLQkJdG5hcGkgPSAmdHAtPm5hcGlbMV07CiAJCXJuYXBpID0gJnRwLT5uYXBpWzFdOwotCX0gZWxzZSB7Ci0JCXRuYXBpID0gJnRwLT5uYXBpWzBdOwotCQlybmFwaSA9ICZ0cC0+bmFwaVswXTsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwkJCXRuYXBpID0gJnRwLT5uYXBpWzFdOwogCX0KIAljb2FsX25vdyA9IHRuYXBpLT5jb2FsX25vdyB8IHJuYXBpLT5jb2FsX25vdzsKIApAQCAtMTA3MjAsOCArMTA3OTgsMTIgQEAKIAogCQltYWNfbW9kZSA9IHRwLT5tYWNfbW9kZSAmIH5NQUNfTU9ERV9QT1JUX01PREVfTUFTSzsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgewotCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQotCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfUFRFU1QsIDB4MTgwMCk7CisJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRkVUX1BURVNULAorCQkJCSAgICAgTUlJX1RHM19GRVRfUFRFU1RfRlJDX1RYX0xJTksgfAorCQkJCSAgICAgTUlJX1RHM19GRVRfUFRFU1RfRlJDX1RYX0xPQ0spOworCQkJLyogVGhlIHdyaXRlIG5lZWRzIHRvIGJlIGZsdXNoZWQgZm9yIHRoZSBBQzEzMSAqLworCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQorCQkJCXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0ZFVF9QVEVTVCwgJnZhbCk7CiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCQl9IGVsc2UKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwpAQCAtMTA3MzMsOSArMTA4MTUsMTAgQEAKIAkJCXR3MzJfZihNQUNfUlhfTU9ERSwgdHAtPnJ4X21vZGUpOwogCQl9CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCkgewotCQkJaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKQorCQkJdTMyIG1hc2tlZF9waHlfaWQgPSB0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLOworCQkJaWYgKG1hc2tlZF9waHlfaWQgPT0gVEczX1BIWV9JRF9CQ001NDAxKQogCQkJCW1hY19tb2RlICY9IH5NQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwotCQkJZWxzZSBpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MTEpCisJCQllbHNlIGlmIChtYXNrZWRfcGh5X2lkID09IFRHM19QSFlfSURfQkNNNTQxMSkKIAkJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLAogCQkJCSAgICAgTUlJX1RHM19FWFRfQ1RSTF9MTkszX0xFRF9NT0RFKTsKQEAgLTExNjkyLDggKzExNzc1LDggQEAKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTTsKIAogCQlpZiAodGczX252cmFtX2xvY2sodHApKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IENhbm5vdCBnZXQgbnZhcm0gbG9jaywgIgotCQkJICAgICAgICJ0ZzNfbnZyYW1faW5pdCBmYWlsZWQuXG4iLCB0cC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKHRwLT5kZXYsICJDYW5ub3QgZ2V0IG52cmFtIGxvY2ssICVzIGZhaWxlZFxuIiwKKwkJCQkgICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKQEAgLTExOTkxLDQ1ICsxMjA3NCw3MSBAQAogCXUzMiBwaHlfaWQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHN1YnN5c190YmxfZW50IHN1YnN5c19pZF90b19waHlfaWRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3Vic3lzX3RibF9lbnQgc3Vic3lzX2lkX3RvX3BoeV9pZFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJLyogQnJvYWRjb20gYm9hcmRzLiAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgxNjQ0LCBQSFlfSURfQkNNNTQwMSB9LCAvKiBCQ005NTcwMEE2ICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDAwMDEsIFBIWV9JRF9CQ001NzAxIH0sIC8qIEJDTTk1NzAxQTUgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwMiwgUEhZX0lEX0JDTTgwMDIgfSwgLyogQkNNOTU3MDBUNiAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDAzLCAwIH0sCQkgICAgLyogQkNNOTU3MDBBOSAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDA1LCBQSFlfSURfQkNNNTcwMSB9LCAvKiBCQ005NTcwMVQxICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDAwMDYsIFBIWV9JRF9CQ001NzAxIH0sIC8qIEJDTTk1NzAxVDggKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwNywgMCB9LAkJICAgIC8qIEJDTTk1NzAxQTcgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwOCwgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkNNOTU3MDFBMTAgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4ODAwOCwgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkNNOTU3MDFBMTIgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwOSwgUEhZX0lEX0JDTTU3MDMgfSwgLyogQkNNOTU3MDNBeDEgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4ODAwOSwgUEhZX0lEX0JDTTU3MDMgfSwgLyogQkNNOTU3MDNBeDIgKi8KKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwQTYsIFRHM19QSFlfSURfQkNNNTQwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFBNSwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMFQ2LCBURzNfUEhZX0lEX0JDTTgwMDIgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwQTksIDAgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxVDEsIFRHM19QSFlfSURfQkNNNTcwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFUOCwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMUE3LCAwIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMUExMCwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMUExMiwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwM0FYMSwgVEczX1BIWV9JRF9CQ001NzAzIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwM0FYMiwgVEczX1BIWV9JRF9CQ001NzAzIH0sCiAKIAkvKiAzY29tIGJvYXJkcy4gKi8KLQl7IFBDSV9WRU5ET1JfSURfM0NPTSwgMHgxMDAwLCBQSFlfSURfQkNNNTQwMSB9LCAvKiAzQzk5NlQgKi8KLQl7IFBDSV9WRU5ET1JfSURfM0NPTSwgMHgxMDA2LCBQSFlfSURfQkNNNTcwMSB9LCAvKiAzQzk5NkJUICovCi0JeyBQQ0lfVkVORE9SX0lEXzNDT00sIDB4MTAwNCwgMCB9LAkJLyogM0M5OTZTWCAqLwotCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCAweDEwMDcsIFBIWV9JRF9CQ001NzAxIH0sIC8qIDNDMTAwMFQgKi8KLQl7IFBDSV9WRU5ET1JfSURfM0NPTSwgMHgxMDA4LCBQSFlfSURfQkNNNTcwMSB9LCAvKiAzQzk0MEJSMDEgKi8KKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfM0NPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzk5NlQsIFRHM19QSFlfSURfQkNNNTQwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF8zQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTk2QlQsIFRHM19QSFlfSURfQkNNNTcwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF8zQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTk2U1gsIDAgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfM0NPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzEwMDBULCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfM0NPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzk0MEJSMDEsIFRHM19QSFlfSURfQkNNNTcwMSB9LAogCiAJLyogREVMTCBib2FyZHMuICovCi0JeyBQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDBkMSwgUEhZX0lEX0JDTTU0MDEgfSwgLyogVklQRVIgKi8KLQl7IFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMTA2LCBQSFlfSURfQkNNNTQwMSB9LCAvKiBKQUdVQVIgKi8KLQl7IFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMTA5LCBQSFlfSURfQkNNNTQxMSB9LCAvKiBNRVJMT1QgKi8KLQl7IFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMTBhLCBQSFlfSURfQkNNNTQxMSB9LCAvKiBTTElNX01FUkxPVCAqLworCXsgVEczUENJX1NVQlZFTkRPUl9JRF9ERUxMLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX1ZJUEVSLCBURzNfUEhZX0lEX0JDTTU0MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfREVMTCwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfREVMTF9KQUdVQVIsIFRHM19QSFlfSURfQkNNNTQwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9ERUxMLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX01FUkxPVCwgVEczX1BIWV9JRF9CQ001NDExIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0RFTEwsCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfU0xJTV9NRVJMT1QsIFRHM19QSFlfSURfQkNNNTQxMSB9LAogCiAJLyogQ29tcGFxIGJvYXJkcy4gKi8KLQl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweDAwN2MsIFBIWV9JRF9CQ001NzAxIH0sIC8qIEJBTlNIRUUgKi8KLQl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweDAwOWEsIFBIWV9JRF9CQ001NzAxIH0sIC8qIEJBTlNIRUVfMiAqLwotCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4MDA3ZCwgMCB9LAkJICAvKiBDSEFOR0VMSU5HICovCi0JeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgMHgwMDg1LCBQSFlfSURfQkNNNTcwMSB9LCAvKiBOQzc3ODAgKi8KLQl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweDAwOTksIFBIWV9JRF9CQ001NzAxIH0sIC8qIE5DNzc4MF8yICovCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0NPTVBBUSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0JBTlNIRUUsIFRHM19QSFlfSURfQkNNNTcwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9DT01QQVEsCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0NPTVBBUV9CQU5TSEVFXzIsIFRHM19QSFlfSURfQkNNNTcwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9DT01QQVEsCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0NPTVBBUV9DSEFOR0VMSU5HLCAwIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0NPTVBBUSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX05DNzc4MCwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0NPTVBBUSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX05DNzc4MF8yLCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKIAogCS8qIElCTSBib2FyZHMuICovCi0JeyBQQ0lfVkVORE9SX0lEX0lCTSwgMHgwMjgxLCAwIH0gLyogSUJNPz8/ICovCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0lCTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfSUJNXzU3MDNTQVgyLCAwIH0KIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN1YnN5c190YmxfZW50ICpsb29rdXBfYnlfc3Vic3lzKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIHN0cnVjdCBzdWJzeXNfdGJsX2VudCAqIF9fZGV2aW5pdCB0ZzNfbG9va3VwX2J5X3N1YnN5cyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlpbnQgaTsKIApAQCAtMTIwNzAsNyArMTIxNzksNyBAQAogCXZhbCA9IHRyMzIoTUVNQVJCX01PREUpOwogCXR3MzIoTUVNQVJCX01PREUsIHZhbCB8IE1FTUFSQl9NT0RFX0VOQUJMRSk7CiAKLQl0cC0+cGh5X2lkID0gUEhZX0lEX0lOVkFMSUQ7CisJdHAtPnBoeV9pZCA9IFRHM19QSFlfSURfSU5WQUxJRDsKIAl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8xOwogCiAJLyogQXNzdW1lIGFuIG9uYm9hcmQgZGV2aWNlIGFuZCBXT0wgY2FwYWJsZSBieSBkZWZhdWx0LiAgKi8KQEAgLTEyMjQ0LDggKzEyMzUzLDggQEAKIAkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0FTUE1fV09SS0FST1VORDsKIAkJfQogCi0JCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfU1REX0lCTkRfRElTQUJMRSkKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEU7CisJCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfSU5CQU5EX0RJU0FCTEUpCisJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRTsKIAkJaWYgKGNmZzQgJiBOSUNfU1JBTV9SR01JSV9FWFRfSUJORF9SWF9FTikKIAkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOOwogCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1RYX0VOKQpAQCAtMTIzMjEsNyArMTI0MzAsNyBAQAogCWVyciA9IDA7CiAJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpIHsKLQkJaHdfcGh5X2lkID0gaHdfcGh5X2lkX21hc2tlZCA9IFBIWV9JRF9JTlZBTElEOworCQlod19waHlfaWQgPSBod19waHlfaWRfbWFza2VkID0gVEczX1BIWV9JRF9JTlZBTElEOwogCX0gZWxzZSB7CiAJCS8qIE5vdyByZWFkIHRoZSBwaHlzaWNhbCBQSFlfSUQgZnJvbSB0aGUgY2hpcCBhbmQgdmVyaWZ5CiAJCSAqIHRoYXQgaXQgaXMgc2FuZS4gIElmIGl0IGRvZXNuJ3QgbG9vayBnb29kLCB3ZSBmYWxsIGJhY2sKQEAgLTEyMzM1LDE3ICsxMjQ0NCwxNyBAQAogCQlod19waHlfaWQgfD0gKGh3X3BoeV9pZF8yICYgMHhmYzAwKSA8PCAxNjsKIAkJaHdfcGh5X2lkIHw9IChod19waHlfaWRfMiAmIDB4MDNmZikgPDwgIDA7CiAKLQkJaHdfcGh5X2lkX21hc2tlZCA9IGh3X3BoeV9pZCAmIFBIWV9JRF9NQVNLOworCQlod19waHlfaWRfbWFza2VkID0gaHdfcGh5X2lkICYgVEczX1BIWV9JRF9NQVNLOwogCX0KIAotCWlmICghZXJyICYmIEtOT1dOX1BIWV9JRChod19waHlfaWRfbWFza2VkKSkgeworCWlmICghZXJyICYmIFRHM19LTk9XTl9QSFlfSUQoaHdfcGh5X2lkX21hc2tlZCkpIHsKIAkJdHAtPnBoeV9pZCA9IGh3X3BoeV9pZDsKLQkJaWYgKGh3X3BoeV9pZF9tYXNrZWQgPT0gUEhZX0lEX0JDTTgwMDIpCisJCWlmIChod19waHlfaWRfbWFza2VkID09IFRHM19QSFlfSURfQkNNODAwMikKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9TRVJERVM7CiAJCWVsc2UKIAkJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9QSFlfU0VSREVTOwogCX0gZWxzZSB7Ci0JCWlmICh0cC0+cGh5X2lkICE9IFBIWV9JRF9JTlZBTElEKSB7CisJCWlmICh0cC0+cGh5X2lkICE9IFRHM19QSFlfSURfSU5WQUxJRCkgewogCQkJLyogRG8gbm90aGluZywgcGh5IElEIGFscmVhZHkgc2V0IHVwIGluCiAJCQkgKiB0ZzNfZ2V0X2VlcHJvbV9od19jZmcoKS4KIAkJCSAqLwpAQCAtMTIzNTUsMTMgKzEyNDY0LDEzIEBACiAJCQkvKiBObyBlZXByb20gc2lnbmF0dXJlPyAgVHJ5IHRoZSBoYXJkY29kZWQKIAkJCSAqIHN1YnN5cyBkZXZpY2UgdGFibGUuCiAJCQkgKi8KLQkJCXAgPSBsb29rdXBfYnlfc3Vic3lzKHRwKTsKKwkJCXAgPSB0ZzNfbG9va3VwX2J5X3N1YnN5cyh0cCk7CiAJCQlpZiAoIXApCiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJCXRwLT5waHlfaWQgPSBwLT5waHlfaWQ7CiAJCQlpZiAoIXRwLT5waHlfaWQgfHwKLQkJCSAgICB0cC0+cGh5X2lkID09IFBIWV9JRF9CQ004MDAyKQorCQkJICAgIHRwLT5waHlfaWQgPT0gVEczX1BIWV9JRF9CQ004MDAyKQogCQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9TRVJERVM7CiAJCX0KIAl9CkBAIC0xMjQxMywxMyArMTI1MjIsMTEgQEAKIAl9CiAKIHNraXBfcGh5X3Jlc2V0OgotCWlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQwMSkgeworCWlmICgodHAtPnBoeV9pZCAmIFRHM19QSFlfSURfTUFTSykgPT0gVEczX1BIWV9JRF9CQ001NDAxKSB7CiAJCWVyciA9IHRnM19pbml0XzU0MDFwaHlfZHNwKHRwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JfQogCi0JaWYgKCFlcnIgJiYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSkgewogCQllcnIgPSB0ZzNfaW5pdF81NDAxcGh5X2RzcCh0cCk7CiAJfQogCkBAIC0xMjQ0MCw3ICsxMjU0Nyw4IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfcGFydG5vKHN0cnVjdCB0ZzMgKnRwKQogewogCXVuc2lnbmVkIGNoYXIgdnBkX2RhdGFbVEczX05WTV9WUERfTEVOXTsgICAvKiBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLwotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBibG9ja19lbmQsIHJvc2l6ZSwgbGVuOworCWludCBpID0gMDsKIAl1MzIgbWFnaWM7CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHx8CkBAIC0xMjQ2Miw3ICsxMjU3MCw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlzc2l6ZV90IGNudDsKLQkJdW5zaWduZWQgaW50IHBvcyA9IDAsIGkgPSAwOworCQl1bnNpZ25lZCBpbnQgcG9zID0gMDsKIAogCQlmb3IgKDsgcG9zIDwgVEczX05WTV9WUERfTEVOICYmIGkgPCAzOyBpKyssIHBvcyArPSBjbnQpIHsKIAkJCWNudCA9IHBjaV9yZWFkX3ZwZCh0cC0+cGRldiwgcG9zLApAQCAtMTI0NzcsNTEgKzEyNTg1LDMzIEBACiAJCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAJfQogCi0JLyogTm93IHBhcnNlIGFuZCBmaW5kIHRoZSBwYXJ0IG51bWJlci4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgVEczX05WTV9WUERfTEVOIC0gMjsgKSB7Ci0JCXVuc2lnbmVkIGNoYXIgdmFsID0gdnBkX2RhdGFbaV07Ci0JCXVuc2lnbmVkIGludCBibG9ja19lbmQ7Ci0KLQkJaWYgKHZhbCA9PSAweDgyIHx8IHZhbCA9PSAweDkxKSB7Ci0JCQlpID0gKGkgKyAzICsKLQkJCSAgICAgKHZwZF9kYXRhW2kgKyAxXSArCi0JCQkgICAgICAodnBkX2RhdGFbaSArIDJdIDw8IDgpKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICh2YWwgIT0gMHg5MCkKLQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCQlibG9ja19lbmQgPSAoaSArIDMgKwotCQkJICAgICAodnBkX2RhdGFbaSArIDFdICsKLQkJCSAgICAgICh2cGRfZGF0YVtpICsgMl0gPDwgOCkpKTsKLQkJaSArPSAzOwotCi0JCWlmIChibG9ja19lbmQgPiBURzNfTlZNX1ZQRF9MRU4pCi0JCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0KLQkJd2hpbGUgKGkgPCAoYmxvY2tfZW5kIC0gMikpIHsKLQkJCWlmICh2cGRfZGF0YVtpICsgMF0gPT0gJ1AnICYmCi0JCQkgICAgdnBkX2RhdGFbaSArIDFdID09ICdOJykgewotCQkJCWludCBwYXJ0bm9fbGVuID0gdnBkX2RhdGFbaSArIDJdOwotCi0JCQkJaSArPSAzOwotCQkJCWlmIChwYXJ0bm9fbGVuID4gVEczX0JQTl9TSVpFIHx8Ci0JCQkJICAgIChwYXJ0bm9fbGVuICsgaSkgPiBURzNfTlZNX1ZQRF9MRU4pCi0JCQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCQkJCW1lbWNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsCi0JCQkJICAgICAgICZ2cGRfZGF0YVtpXSwgcGFydG5vX2xlbik7Ci0KLQkJCQkvKiBTdWNjZXNzLiAqLwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWkgKz0gMyArIHZwZF9kYXRhW2kgKyAyXTsKLQkJfQotCi0JCS8qIFBhcnQgbnVtYmVyIG5vdCBmb3VuZC4gKi8KKwlpID0gcGNpX3ZwZF9maW5kX3RhZyh2cGRfZGF0YSwgMCwgVEczX05WTV9WUERfTEVOLAorCQkJICAgICBQQ0lfVlBEX0xSRFRfUk9fREFUQSk7CisJaWYgKGkgPCAwKQogCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0JfQorCisJcm9zaXplID0gcGNpX3ZwZF9scmR0X3NpemUoJnZwZF9kYXRhW2ldKTsKKwlibG9ja19lbmQgPSBpICsgUENJX1ZQRF9MUkRUX1RBR19TSVpFICsgcm9zaXplOworCWkgKz0gUENJX1ZQRF9MUkRUX1RBR19TSVpFOworCisJaWYgKGJsb2NrX2VuZCA+IFRHM19OVk1fVlBEX0xFTikKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisJaSA9IHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQodnBkX2RhdGEsIGksIHJvc2l6ZSwKKwkJCQkgICAgICBQQ0lfVlBEX1JPX0tFWVdPUkRfUEFSVE5PKTsKKwlpZiAoaSA8IDApCisJCWdvdG8gb3V0X25vdF9mb3VuZDsKKworCWxlbiA9IHBjaV92cGRfaW5mb19maWVsZF9zaXplKCZ2cGRfZGF0YVtpXSk7CisKKwlpICs9IFBDSV9WUERfSU5GT19GTERfSERSX1NJWkU7CisJaWYgKGxlbiA+IFRHM19CUE5fU0laRSB8fAorCSAgICAobGVuICsgaSkgPiBURzNfTlZNX1ZQRF9MRU4pCisJCWdvdG8gb3V0X25vdF9mb3VuZDsKKworCW1lbWNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICZ2cGRfZGF0YVtpXSwgbGVuKTsKKworCXJldHVybjsKIAogb3V0X25vdF9mb3VuZDoKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCkBAIC0xMjUzOCw4ICsxMjYyOCwyNCBAQAogCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCAmJgogCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4OCkKIAkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3Nzg4Iik7Ci0JZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQorCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSAmJgorCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc2MSkKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3NzYxIik7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCisJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzY1KQogCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3NjUiKTsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgJiYKKwkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODEpCisJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc4MSIpOworCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSAmJgorCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4NSkKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3Nzg1Iik7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCisJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkxKQorCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3OTEiKTsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgJiYKKwkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTUpCisJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc5NSIpOwogCWVsc2UKIAkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIm5vbmUiKTsKIH0KQEAgLTEyNjQyLDYgKzEyNzQ4LDEyIEBACiAJY2FzZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzM6CiAJCW9mZnNldCA9IFRHM19FRVBST01fU0JfRjFSM19FREhfT0ZGOwogCQlicmVhazsKKwljYXNlIFRHM19FRVBST01fU0JfUkVWSVNJT05fNDoKKwkJb2Zmc2V0ID0gVEczX0VFUFJPTV9TQl9GMVI0X0VESF9PRkY7CisJCWJyZWFrOworCWNhc2UgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl81OgorCQlvZmZzZXQgPSBURzNfRUVQUk9NX1NCX0YxUjVfRURIX09GRjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KQEAgLTEzMTAyLDYgKzEzMjE0LDggQEAKIAkJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc3ODBfQTAgfHwKIAkJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc3ODBfQTEpCiAJCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfQ0xLUkVRX0JVRzsKKwkJfSBlbHNlIGlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcxN19BMCkgeworCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTDFQTExQRF9FTjsKIAkJfQogCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpIHsKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUENJX0VYUFJFU1M7CkBAIC0xMzEwOSw4ICsxMzIyMyw3IEBACiAJCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CiAJCXRwLT5wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkodHAtPnBkZXYsIFBDSV9DQVBfSURfUENJWCk7CiAJCWlmICghdHAtPnBjaXhfY2FwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBQQ0ktWCAiCi0JCQkJCSAgICAiY2FwYWJpbGl0eSwgYWJvcnRpbmcuXG4iKTsKKwkJCXByX2VycigiQ2Fubm90IGZpbmQgUENJLVggY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMTMyOTAsNyArMTM0MDMsOCBAQAogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gR1JDX0xDTENUUkxfR1BJT19PRTM7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gR1JDX0xDTENUUkxfR1BJT19VQVJUX1NFTDsKIAogCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NjEgfHwKQEAgLTEzMzA2LDggKzEzNDIwLDcgQEAKIAkvKiBGb3JjZSB0aGUgY2hpcCBpbnRvIEQwLiAqLwogCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIFBDSV9EMCk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIoJXMpIHRyYW5zaXRpb24gdG8gRDAgZmFpbGVkXG4iLAotCQkgICAgICAgcGNpX25hbWUodHAtPnBkZXYpKTsKKwkJcHJfZXJyKCIoJXMpIHRyYW5zaXRpb24gdG8gRDAgZmFpbGVkXG4iLCBwY2lfbmFtZSh0cC0+cGRldikpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTM0NzQsMTIgKzEzNTg3LDE0IEBACiAJICAgICAgdHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzRiB8fAogCSAgICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N0YpKSB8fAogCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkwIHx8CisJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTEgfHwKKwkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5NSB8fAogCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSkKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR18xMF8xMDBfT05MWTsKIAogCWVyciA9IHRnM19waHlfcHJvYmUodHApOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiKCVzKSBwaHkgcHJvYmUgZmFpbGVkLCBlcnIgJWRcbiIsCisJCXByX2VycigiKCVzKSBwaHkgcHJvYmUgZmFpbGVkLCBlcnIgJWRcbiIsCiAJCSAgICAgICBwY2lfbmFtZSh0cC0+cGRldiksIGVycik7CiAJCS8qIC4uLiBidXQgZG8gbm90IHJldHVybiBpbW1lZGlhdGVseSAuLi4gKi8KIAkJdGczX21kaW9fZmluaSh0cCk7CkBAIC0xMzk4OSw3ICsxNDEwNCw4IEBACiAJCS8qIFNlbmQgdGhlIGJ1ZmZlciB0byB0aGUgY2hpcC4gKi8KIAkJcmV0ID0gdGczX2RvX3Rlc3RfZG1hKHRwLCBidWYsIGJ1Zl9kbWEsIFRFU1RfQlVGRkVSX1NJWkUsIDEpOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRnM190ZXN0X2RtYSgpIFdyaXRlIHRoZSBidWZmZXIgZmFpbGVkICVkXG4iLCByZXQpOworCQkJcHJfZXJyKCJ0ZzNfdGVzdF9kbWEoKSBXcml0ZSB0aGUgYnVmZmVyIGZhaWxlZCAlZFxuIiwKKwkJCSAgICAgICByZXQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTM5OTksNyArMTQxMTUsOCBAQAogCQkJdTMyIHZhbDsKIAkJCXRnM19yZWFkX21lbSh0cCwgMHgyMTAwICsgKGkqNCksICZ2YWwpOwogCQkJaWYgKGxlMzJfdG9fY3B1KHZhbCkgIT0gcFtpXSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiICB0ZzNfdGVzdF9kbWEoKSAgQ2FyZCBidWZmZXIgY29ycnVwdGVkIG9uIHdyaXRlISAoJWQgIT0gJWQpXG4iLCB2YWwsIGkpOworCQkJCXByX2VycigiICB0ZzNfdGVzdF9kbWEoKSAgQ2FyZCBidWZmZXIgY29ycnVwdGVkIG9uIHdyaXRlISAoJWQgIT0gJWQpXG4iLAorCQkJCSAgICAgICB2YWwsIGkpOwogCQkJCS8qIHJldCA9IC1FTk9ERVYgaGVyZT8gKi8KIAkJCX0KIAkJCXBbaV0gPSAwOwpAQCAtMTQwMDgsNyArMTQxMjUsOCBAQAogCQkvKiBOb3cgcmVhZCBpdCBiYWNrLiAqLwogCQlyZXQgPSB0ZzNfZG9fdGVzdF9kbWEodHAsIGJ1ZiwgYnVmX2RtYSwgVEVTVF9CVUZGRVJfU0laRSwgMCk7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidGczX3Rlc3RfZG1hKCkgUmVhZCB0aGUgYnVmZmVyIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCXByX2VycigidGczX3Rlc3RfZG1hKCkgUmVhZCB0aGUgYnVmZmVyIGZhaWxlZCAlZFxuIiwKKwkJCSAgICAgICByZXQpOwogCiAJCQlicmVhazsKIAkJfQpAQCAtMTQwMjUsNyArMTQxNDMsOCBAQAogCQkJCXR3MzIoVEczUENJX0RNQV9SV19DVFJMLCB0cC0+ZG1hX3J3Y3RybCk7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAidGczX3Rlc3RfZG1hKCkgYnVmZmVyIGNvcnJ1cHRlZCBvbiByZWFkIGJhY2shICglZCAhPSAlZClcbiIsIHBbaV0sIGkpOworCQkJCXByX2VycigidGczX3Rlc3RfZG1hKCkgYnVmZmVyIGNvcnJ1cHRlZCBvbiByZWFkIGJhY2shICglZCAhPSAlZClcbiIsCisJCQkJICAgICAgIHBbaV0sIGkpOwogCQkJCXJldCA9IC1FTk9ERVY7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNDA4Niw5ICsxNDIwNSwyMiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2luaXRfYnVmbWdyX2NvbmZpZyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NzY1KSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgeworCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlciA9CisJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CisJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlciA9CisJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81Nzc2NTsKKwkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9oaWdoX3dhdGVyID0KKwkJCURFRkFVTFRfTUJfSElHSF9XQVRFUl81Nzc2NTsKKworCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlcl9qdW1ibyA9CisJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CisJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlcl9qdW1ibyA9CisJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181Nzc2NTsKKwkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9oaWdoX3dhdGVyX2p1bWJvID0KKwkJCURFRkFVTFRfTUJfSElHSF9XQVRFUl9KVU1CT181Nzc2NTsKKwl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyID0KIAkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfNTcwNTsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyID0KQEAgLTE0MTMwLDI2ICsxNDI2MiwyOCBAQAogCiBzdGF0aWMgY2hhciAqIF9fZGV2aW5pdCB0ZzNfcGh5X3N0cmluZyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlzd2l0Y2ggKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgewotCWNhc2UgUEhZX0lEX0JDTTU0MDA6CXJldHVybiAiNTQwMCI7Ci0JY2FzZSBQSFlfSURfQkNNNTQwMToJcmV0dXJuICI1NDAxIjsKLQljYXNlIFBIWV9JRF9CQ001NDExOglyZXR1cm4gIjU0MTEiOwotCWNhc2UgUEhZX0lEX0JDTTU3MDE6CXJldHVybiAiNTcwMSI7Ci0JY2FzZSBQSFlfSURfQkNNNTcwMzoJcmV0dXJuICI1NzAzIjsKLQljYXNlIFBIWV9JRF9CQ001NzA0OglyZXR1cm4gIjU3MDQiOwotCWNhc2UgUEhZX0lEX0JDTTU3MDU6CXJldHVybiAiNTcwNSI7Ci0JY2FzZSBQSFlfSURfQkNNNTc1MDoJcmV0dXJuICI1NzUwIjsKLQljYXNlIFBIWV9JRF9CQ001NzUyOglyZXR1cm4gIjU3NTIiOwotCWNhc2UgUEhZX0lEX0JDTTU3MTQ6CXJldHVybiAiNTcxNCI7Ci0JY2FzZSBQSFlfSURfQkNNNTc4MDoJcmV0dXJuICI1NzgwIjsKLQljYXNlIFBIWV9JRF9CQ001NzU1OglyZXR1cm4gIjU3NTUiOwotCWNhc2UgUEhZX0lEX0JDTTU3ODc6CXJldHVybiAiNTc4NyI7Ci0JY2FzZSBQSFlfSURfQkNNNTc4NDoJcmV0dXJuICI1Nzg0IjsKLQljYXNlIFBIWV9JRF9CQ001NzU2OglyZXR1cm4gIjU3MjIvNTc1NiI7Ci0JY2FzZSBQSFlfSURfQkNNNTkwNjoJcmV0dXJuICI1OTA2IjsKLQljYXNlIFBIWV9JRF9CQ001NzYxOglyZXR1cm4gIjU3NjEiOwotCWNhc2UgUEhZX0lEX0JDTTU3MTc6CXJldHVybiAiNTcxNyI7Ci0JY2FzZSBQSFlfSURfQkNNODAwMjoJcmV0dXJuICI4MDAyL3NlcmRlcyI7CisJc3dpdGNoICh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSB7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU0MDA6CXJldHVybiAiNTQwMCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU0MDE6CXJldHVybiAiNTQwMSI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU0MTE6CXJldHVybiAiNTQxMSI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MDE6CXJldHVybiAiNTcwMSI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MDM6CXJldHVybiAiNTcwMyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MDQ6CXJldHVybiAiNTcwNCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MDU6CXJldHVybiAiNTcwNSI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3NTA6CXJldHVybiAiNTc1MCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3NTI6CXJldHVybiAiNTc1MiI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MTQ6CXJldHVybiAiNTcxNCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3ODA6CXJldHVybiAiNTc4MCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3NTU6CXJldHVybiAiNTc1NSI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3ODc6CXJldHVybiAiNTc4NyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3ODQ6CXJldHVybiAiNTc4NCI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3NTY6CXJldHVybiAiNTcyMi81NzU2IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTkwNjoJcmV0dXJuICI1OTA2IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc2MToJcmV0dXJuICI1NzYxIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcxOEM6CXJldHVybiAiNTcxOEMiOworCWNhc2UgVEczX1BIWV9JRF9CQ001NzE4UzoJcmV0dXJuICI1NzE4UyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3NzY1OglyZXR1cm4gIjU3NzY1IjsKKwljYXNlIFRHM19QSFlfSURfQkNNODAwMjoJcmV0dXJuICI4MDAyL3NlcmRlcyI7CiAJY2FzZSAwOgkJCXJldHVybiAic2VyZGVzIjsKIAlkZWZhdWx0OgkJcmV0dXJuICJ1bmtub3duIjsKIAl9CkBAIC0xNDI5MSw3ICsxNDQyNSw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXN0YXRpYyBpbnQgdGczX3ZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdGczICp0cDsKIAlpbnQgaSwgZXJyLCBwbV9jYXA7CkBAIC0xNDI5OSwyMCArMTQ0MzIsMTcgQEAKIAljaGFyIHN0cls0MF07CiAJdTY0IGRtYV9tYXNrLCBwZXJzaXN0X2RtYV9tYXNrOwogCi0JaWYgKHRnM192ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCXByaW50a19vbmNlKEtFUk5fSU5GTyAiJXNcbiIsIHZlcnNpb24pOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsICIKLQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQlwcl9lcnIoIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgIgotCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCXByX2VycigiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAJfQogCkBAIC0xNDMyMSwxNSArMTQ0NTEsMTQgQEAKIAkvKiBGaW5kIHBvd2VyLW1hbmFnZW1lbnQgY2FwYWJpbGl0eS4gKi8KIAlwbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwogCWlmIChwbV9jYXAgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBQb3dlck1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgIgotCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCXByX2VycigiQ2Fubm90IGZpbmQgUG93ZXJNYW5hZ2VtZW50IGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZigqdHApLCBURzNfSVJRX01BWF9WRUNTKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFdGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCXByX2VycigiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9CkBAIC0xNDM3OSw4ICsxNDUwOCw3IEBACiAKIAl0cC0+cmVncyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCBCQVJfMCk7CiAJaWYgKCF0cC0+cmVncykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnMsICIKLQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CiAJfQpAQCAtMTQzOTYsOCArMTQ1MjQsNyBAQAogCiAJZXJyID0gdGczX2dldF9pbnZhcmlhbnRzKHRwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJbmV0ZGV2X2VycihkZXYsICJQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgb2YgY2hpcCwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKQEAgLTE0NDMyLDggKzE0NTU5LDcgQEAKIAkJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAogCQkJCQkJCSAgcGVyc2lzdF9kbWFfbWFzayk7CiAJCQlpZiAoZXJyIDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBvYnRhaW4gNjQgYml0ICIKLQkJCQkgICAgICAgIkRNQSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CisJCQkJbmV0ZGV2X2VycihkZXYsICJVbmFibGUgdG8gb2J0YWluIDY0IGJpdCBETUEgZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOwogCQkJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCQkJfQogCQl9CkBAIC0xNDQ0MSw4ICsxNDU2Nyw3IEBACiAJaWYgKGVyciB8fCBkbWFfbWFzayA9PSBETUFfQklUX01BU0soMzIpKSB7CiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgIgotCQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQkJbmV0ZGV2X2VycihkZXYsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCQl9CiAJfQpAQCAtMTQ0OTEsMTYgKzE0NjE2LDE0IEBACiAKIAllcnIgPSB0ZzNfZ2V0X2RldmljZV9hZGRyZXNzKHRwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBvYnRhaW4gdmFsaWQgZXRoZXJuZXQgYWRkcmVzcywgIgotCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiQ291bGQgbm90IG9idGFpbiB2YWxpZCBldGhlcm5ldCBhZGRyZXNzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHsKIAkJdHAtPmFwZXJlZ3MgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgQkFSXzIpOwogCQlpZiAoIXRwLT5hcGVyZWdzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIEFQRSByZWdpc3RlcnMsICIKLQkJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiQ2Fubm90IG1hcCBBUEUgcmVnaXN0ZXJzLCBhYm9ydGluZ1xuIik7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJCX0KQEAgLTE0NTI0LDcgKzE0NjQ3LDcgQEAKIAogCWVyciA9IHRnM190ZXN0X2RtYSh0cCk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJETUEgZW5naW5lIHRlc3QgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkRNQSBlbmdpbmUgdGVzdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2FwZXVubWFwOwogCX0KIApAQCAtMTQ1ODUsNDUgKzE0NzA4LDM5IEBACiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJbmV0ZGV2X2VycihkZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfYXBldW5tYXA7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRpZ29uMyBbcGFydG5vKCVzKSByZXYgJTA0eF0gKCVzKSBNQUMgYWRkcmVzcyAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwKLQkgICAgICAgdHAtPmJvYXJkX3BhcnRfbnVtYmVyLAotCSAgICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkLAotCSAgICAgICB0ZzNfYnVzX3N0cmluZyh0cCwgc3RyKSwKLQkgICAgICAgZGV2LT5kZXZfYWRkcik7CisJbmV0ZGV2X2luZm8oZGV2LCAiVGlnb24zIFtwYXJ0bm8oJXMpIHJldiAlMDR4XSAoJXMpIE1BQyBhZGRyZXNzICVwTVxuIiwKKwkJICAgIHRwLT5ib2FyZF9wYXJ0X251bWJlciwKKwkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQsCisJCSAgICB0ZzNfYnVzX3N0cmluZyh0cCwgc3RyKSwKKwkJICAgIGRldi0+ZGV2X2FkZHIpOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCQlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzKVxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLAotCQkgICAgICAgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSk7CisJCW5ldGRldl9pbmZvKGRldiwgImF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcylcbiIsCisJCQkgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldikpOwogCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiJXM6IGF0dGFjaGVkIFBIWSBpcyAlcyAoJXMgRXRoZXJuZXQpIChXaXJlU3BlZWRbJWRdKVxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHRnM19waHlfc3RyaW5nKHRwKSwKLQkJICAgICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSA/ICIxMC8xMDBCYXNlLVRYIiA6Ci0JCQkoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgPyAiMTAwMEJhc2UtU1giIDoKLQkJCSAiMTAvMTAwLzEwMDBCYXNlLVQiKSksCi0JCSAgICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9OT19FVEhfV0lSRV9TUEVFRCkgPT0gMCk7CisJCW5ldGRldl9pbmZvKGRldiwgImF0dGFjaGVkIFBIWSBpcyAlcyAoJXMgRXRoZXJuZXQpIChXaXJlU3BlZWRbJWRdKVxuIiwKKwkJCSAgICB0ZzNfcGh5X3N0cmluZyh0cCksCisJCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpID8gIjEwLzEwMEJhc2UtVFgiIDoKKwkJCSAgICAgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpID8gIjEwMDBCYXNlLVNYIiA6CisJCQkgICAgICAiMTAvMTAwLzEwMDBCYXNlLVQiKSksCisJCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQpID09IDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJYY3N1bXNbJWRdIExpbmtDaGdSRUdbJWRdIE1JaXJxWyVkXSBBU0ZbJWRdIFRTT2NhcFslZF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwKLQkgICAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19SWF9DSEVDS1NVTVMpICE9IDAsCi0JICAgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHKSAhPSAwLAotCSAgICAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQpICE9IDAsCi0JICAgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgIT0gMCwKLQkgICAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICE9IDApOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBkbWFfcndjdHJsWyUwOHhdIGRtYV9tYXNrWyVkLWJpdF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgdHAtPmRtYV9yd2N0cmwsCi0JICAgICAgIChwZGV2LT5kbWFfbWFzayA9PSBETUFfQklUX01BU0soMzIpKSA/IDMyIDoKLQkgICAgICAgICgoKHU2NCkgcGRldi0+ZG1hX21hc2sgPT0gRE1BX0JJVF9NQVNLKDQwKSkgPyA0MCA6IDY0KSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiUlhjc3Vtc1slZF0gTGlua0NoZ1JFR1slZF0gTUlpcnFbJWRdIEFTRlslZF0gVFNPY2FwWyVkXVxuIiwKKwkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TKSAhPSAwLAorCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpICE9IDAsCisJCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQpICE9IDAsCisJCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICE9IDAsCisJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkgIT0gMCk7CisJbmV0ZGV2X2luZm8oZGV2LCAiZG1hX3J3Y3RybFslMDh4XSBkbWFfbWFza1slZC1iaXRdXG4iLAorCQkgICAgdHAtPmRtYV9yd2N0cmwsCisJCSAgICBwZGV2LT5kbWFfbWFzayA9PSBETUFfQklUX01BU0soMzIpID8gMzIgOgorCQkgICAgKCh1NjQpcGRldi0+ZG1hX21hc2spID09IERNQV9CSVRfTUFTSyg0MCkgPyA0MCA6IDY0KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDhhMTY3OTEuLjU3NGExY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC01Niw3ICs1NiwzOSBAQAogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3NjUJIDB4MTZiNAogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTEJIDB4MTZiMgogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTUJIDB4MTZiNgotLyogMHgwNCAtLT4gMHg2NCB1bnVzZWQgKi8KKy8qIDB4MDQgLS0+IDB4MmMgdW51c2VkICovCisjZGVmaW5lIFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00JCVBDSV9WRU5ET1JfSURfQlJPQURDT00KKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMEE2CTB4MTY0NAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTUJMHgwMDAxCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDBUNgkweDAwMDIKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMEE5CTB4MDAwMworI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxVDEJMHgwMDA1CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFUOAkweDAwMDYKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMUE3CTB4MDAwNworI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTEwCTB4MDAwOAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTEyCTB4ODAwOAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAzQVgxCTB4MDAwOQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAzQVgyCTB4ODAwOQorI2RlZmluZSBURzNQQ0lfU1VCVkVORE9SX0lEXzNDT00JCVBDSV9WRU5ET1JfSURfM0NPTQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0M5OTZUCQkweDEwMDAKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTk2QlQJMHgxMDA2CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzk5NlNYCTB4MTAwNAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0MxMDAwVAkweDEwMDcKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTQwQlIwMQkweDEwMDgKKyNkZWZpbmUgVEczUENJX1NVQlZFTkRPUl9JRF9ERUxMCQlQQ0lfVkVORE9SX0lEX0RFTEwKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX1ZJUEVSCQkweDAwZDEKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX0pBR1VBUgkJMHgwMTA2CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfREVMTF9NRVJMT1QJCTB4MDEwOQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfU0xJTV9NRVJMT1QJMHgwMTBhCisjZGVmaW5lIFRHM1BDSV9TVUJWRU5ET1JfSURfQ09NUEFRCQlQQ0lfVkVORE9SX0lEX0NPTVBBUQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0NPTVBBUV9CQU5TSEVFCTB4MDA3YworI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0NPTVBBUV9CQU5TSEVFXzIJMHgwMDlhCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0NIQU5HRUxJTkcJMHgwMDdkCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX05DNzc4MAkweDAwODUKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfTkM3NzgwXzIJMHgwMDk5CisjZGVmaW5lIFRHM1BDSV9TVUJWRU5ET1JfSURfSUJNCQkJUENJX1ZFTkRPUl9JRF9JQk0KKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9JQk1fNTcwM1NBWDIJMHgwMjgxCisvKiAweDMwIC0tPiAweDY0IHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfTVNJX0RBVEEJCQkweDAwMDAwMDY0CiAvKiAweDY2IC0tPiAweDY4IHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfTUlTQ19IT1NUX0NUUkwJCTB4MDAwMDAwNjgKQEAgLTExMCw2ICsxNDIsNyBAQAogI2RlZmluZSAgQ0hJUFJFVl9JRF81Nzc4MF9BMAkJIDB4NTc3ODAwMDAKICNkZWZpbmUgIENISVBSRVZfSURfNTc3ODBfQTEJCSAweDU3NzgwMDAxCiAjZGVmaW5lICBDSElQUkVWX0lEXzU3MTdfQTAJCSAweDA1NzE3MDAwCisjZGVmaW5lICBDSElQUkVWX0lEXzU3NzY1X0EwCQkgMHg1Nzc4NTAwMAogI2RlZmluZSAgR0VUX0FTSUNfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSA+PiAxMikKICNkZWZpbmUgICBBU0lDX1JFVl81NzAwCQkJIDB4MDcKICNkZWZpbmUgICBBU0lDX1JFVl81NzAxCQkJIDB4MDAKQEAgLTEyMDYsMTQgKzEyMzksMTggQEAKICNkZWZpbmUgIERFRkFVTFRfTUJfTUFDUlhfTE9XX1dBVEVSCSAgMHgwMDAwMDAyMAogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVJfNTcwNSAgMHgwMDAwMDAxMAogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVJfNTkwNiAgMHgwMDAwMDAwNAorI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVJfNTc3NjUgMHgwMDAwMDAyYQogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVJfSlVNQk8gMHgwMDAwMDA5OAogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVJfSlVNQk9fNTc4MCAweDAwMDAwMDRiCisjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181Nzc2NSAweDAwMDAwMDdlCiAjZGVmaW5lIEJVRk1HUl9NQl9ISUdIX1dBVEVSCQkweDAwMDA0NDE4CiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVIJCSAweDAwMDAwMDYwCiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfNTcwNQkgMHgwMDAwMDA2MAogI2RlZmluZSAgREVGQVVMVF9NQl9ISUdIX1dBVEVSXzU5MDYJIDB4MDAwMDAwMTAKKyNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUl81Nzc2NQkgMHgwMDAwMDBhMAogI2RlZmluZSAgREVGQVVMVF9NQl9ISUdIX1dBVEVSX0pVTUJPCSAweDAwMDAwMTdjCiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfSlVNQk9fNTc4MCAweDAwMDAwMDk2CisjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfSlVNQk9fNTc3NjUgMHgwMDAwMDBlYQogI2RlZmluZSBCVUZNR1JfUlhfTUJfQUxMT0NfUkVRCQkweDAwMDA0NDFjCiAjZGVmaW5lICBCVUZNR1JfTUJfQUxMT0NfQklUCQkgMHgxMDAwMDAwMAogI2RlZmluZSBCVUZNR1JfUlhfTUJfQUxMT0NfUkVTUAkJMHgwMDAwNDQyMApAQCAtMTI1Myw2ICsxMjkwLDcgQEAKICNkZWZpbmUgIFJETUFDX01PREVfTUJVRl9TQkRfQ1JQVF9FTkFCCSAweDAwMDAyMDAwCiAjZGVmaW5lICBSRE1BQ19NT0RFX0ZJRk9fU0laRV8xMjgJIDB4MDAwMjAwMDAKICNkZWZpbmUgIFJETUFDX01PREVfRklGT19MT05HX0JVUlNUCSAweDAwMDMwMDAwCisjZGVmaW5lICBSRE1BQ19NT0RFX01VTFRfRE1BX1JEX0RJUwkgMHgwMTAwMDAwMAogI2RlZmluZSAgUkRNQUNfTU9ERV9JUFY0X0xTT19FTgkJIDB4MDgwMDAwMDAKICNkZWZpbmUgIFJETUFDX01PREVfSVBWNl9MU09fRU4JCSAweDEwMDAwMDAwCiAjZGVmaW5lIFJETUFDX1NUQVRVUwkJCTB4MDAwMDQ4MDQKQEAgLTE1NDMsNiArMTU4MSw4IEBACiAjZGVmaW5lICBHUkNfTU9ERV9IT1NUX1NFTkRCRFMJCTB4MDAwMjAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PX1RYX1BIRFJfQ1NVTQkweDAwMTAwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9OVlJBTV9XUl9FTkFCTEUJMHgwMDIwMDAwMAorI2RlZmluZSAgR1JDX01PREVfUENJRV9UTF9TRUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfUExfU0VMCQkweDAwNDAwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9OT19SWF9QSERSX0NTVU0JMHgwMDgwMDAwMAogI2RlZmluZSAgR1JDX01PREVfSVJRX09OX1RYX0NQVV9BVFROCTB4MDEwMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX0lSUV9PTl9SWF9DUFVfQVRUTgkweDAyMDAwMDAwCkBAIC0xNTUwLDcgKzE1OTAsMTMgQEAKICNkZWZpbmUgIEdSQ19NT0RFX0lSUV9PTl9ETUFfQVRUTgkweDA4MDAwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9JUlFfT05fRkxPV19BVFROCTB4MTAwMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFXzRYX05JQ19TRU5EX1JJTkdTCTB4MjAwMDAwMDAKKyNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfRExfU0VMCQkweDIwMDAwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9NQ0FTVF9GUk1fRU5BQkxFCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfSElfMUtfRU4JCTB4ODAwMDAwMDAKKyNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfUE9SVF9NQVNLCShHUkNfTU9ERV9QQ0lFX1RMX1NFTCB8IFwKKwkJCQkJIEdSQ19NT0RFX1BDSUVfUExfU0VMIHwgXAorCQkJCQkgR1JDX01PREVfUENJRV9ETF9TRUwgfCBcCisJCQkJCSBHUkNfTU9ERV9QQ0lFX0hJXzFLX0VOKQogI2RlZmluZSBHUkNfTUlTQ19DRkcJCQkweDAwMDA2ODA0CiAjZGVmaW5lICBHUkNfTUlTQ19DRkdfQ09SRUNMS19SRVNFVAkweDAwMDAwMDAxCiAjZGVmaW5lICBHUkNfTUlTQ19DRkdfUFJFU0NBTEFSX01BU0sJMHgwMDAwMDBmZQpAQCAtMTgwNCw2ICsxODUwLDExIEBACiAvKiAweDdlNzQgLS0+IDB4ODAwMCB1bnVzZWQgKi8KIAogCisvKiBBbHRlcm5hdGUgUENJRSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBURzNfUENJRV9UTERMUExfUE9SVAkJMHgwMDAwN2MwMAorI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEwxCQkgMHgwMDAwMDAwNAorI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEwxX0wxUExMUERfRU4JICAweDAwMDAxMDAwCisKIC8qIE9UUCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVEczX09UUF9BR0NUR1RfTUFTSwkJMHgwMDAwMDBlMAogI2RlZmluZSBURzNfT1RQX0FHQ1RHVF9TSElGVAkJMQpAQCAtMTg0NSw2ICsxODk2LDggQEAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl8wCTB4MDAwMDAwMDAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl8yCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl8zCTB4MDAwMzAwMDAKKyNkZWZpbmUgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl80CTB4MDAwNDAwMDAKKyNkZWZpbmUgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl81CTB4MDAwNTAwMDAKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19IVwkJMHhhYmNkCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfSFdfTVNLCQkweGZmZmYKIApAQCAtMTg2Miw2ICsxOTE1LDggQEAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIyX0VESF9PRkYJMHgxNAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjJfTUJBX09GRgkweDEwCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSM19FREhfT0ZGCTB4MTgKKyNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVI0X0VESF9PRkYJMHgxYworI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjVfRURIX09GRgkweDIwCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRURIX01BSl9NQVNLCTB4MDAwMDA3MDAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9FREhfTUFKX1NIRlQJOAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0VESF9NSU5fTUFTSwkweDAwMDAwMGZmCkBAIC0xOTU2LDcgKzIwMTEsNyBAQAogCiAjZGVmaW5lIE5JQ19TUkFNX0RBVEFfQ0ZHXzQJCTB4MDAwMDBkNjAKICNkZWZpbmUgIE5JQ19TUkFNX0dNSUlfTU9ERQkJIDB4MDAwMDAwMDIKLSNkZWZpbmUgIE5JQ19TUkFNX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUgMHgwMDAwMDAwNAorI2RlZmluZSAgTklDX1NSQU1fUkdNSUlfSU5CQU5EX0RJU0FCTEUJIDB4MDAwMDAwMDQKICNkZWZpbmUgIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1JYX0VOCSAweDAwMDAwMDA4CiAjZGVmaW5lICBOSUNfU1JBTV9SR01JSV9FWFRfSUJORF9UWF9FTgkgMHgwMDAwMDAxMAogCkBAIC0yMDkzLDYgKzIxNDgsOSBAQAogCiAvKiBGYXN0IEV0aGVybmV0IFRyYW5jZWl2ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTUlJX1RHM19GRVRfUFRFU1QJCTB4MTcKKyNkZWZpbmUgIE1JSV9URzNfRkVUX1BURVNUX0ZSQ19UWF9MSU5LCTB4MTAwMAorI2RlZmluZSAgTUlJX1RHM19GRVRfUFRFU1RfRlJDX1RYX0xPQ0sJMHgwODAwCisKICNkZWZpbmUgTUlJX1RHM19GRVRfVEVTVAkJMHgxZgogI2RlZmluZSAgTUlJX1RHM19GRVRfU0hBRE9XX0VOCQkweDAwODAKIApAQCAtMjY4Miw2ICsyNzQwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OwogCisJdTMyCQkJCWNvYWxfbm93OwogCXUzMgkJCQltc2dfZW5hYmxlOwogCiAJLyogYmVnaW4gInR4IHRocmVhZCIgY2FjaGVsaW5lIHNlY3Rpb24gKi8KQEAgLTI3MDAsNyArMjc1OSw3IEBACiAJc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKICNlbmRpZgogCi0Jc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQJcHJvZHJpbmdbVEczX0lSUV9NQVhfVkVDUyAtIDFdOworCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0CXByb2RyaW5nW1RHM19JUlFfTUFYX1ZFQ1NdOwogCiAKIAkvKiBiZWdpbiAiZXZlcnl0aGluZyBlbHNlIiBjYWNoZWxpbmUocykgc2VjdGlvbiAqLwpAQCAtMjc5OCw3ICsyODU3LDcgQEAKICNkZWZpbmUgVEczX0ZMRzNfVVNFX1BIWUxJQgkJMHgwMDAwMDAxMAogI2RlZmluZSBURzNfRkxHM19NRElPQlVTX0lOSVRFRAkJMHgwMDAwMDAyMAogI2RlZmluZSBURzNfRkxHM19QSFlfQ09OTkVDVEVECQkweDAwMDAwMDgwCi0jZGVmaW5lIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUJMHgwMDAwMDEwMAorI2RlZmluZSBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRQkweDAwMDAwMTAwCiAjZGVmaW5lIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOCTB4MDAwMDAyMDAKICNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4JMHgwMDAwMDQwMAogI2RlZmluZSBURzNfRkxHM19DTEtSRVFfQlVHCQkweDAwMDAwODAwCkBAIC0yODEyLDYgKzI4NzEsNyBAQAogI2RlZmluZSBURzNfRkxHM180MEJJVF9ETUFfTElNSVRfQlVHCTB4MDAxMDAwMDAKICNkZWZpbmUgVEczX0ZMRzNfU0hPUlRfRE1BX0JVRwkJMHgwMDIwMDAwMAogI2RlZmluZSBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHCTB4MDA0MDAwMDAKKyNkZWZpbmUgVEczX0ZMRzNfTDFQTExQRF9FTgkJMHgwMDgwMDAwMAogCiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXUxNgkJCQl0aW1lcl9jb3VudGVyOwpAQCAtMjg2MSw0MiArMjkyMSw1MCBAQAogCiAJLyogUEhZIGluZm8gKi8KIAl1MzIJCQkJcGh5X2lkOwotI2RlZmluZSBQSFlfSURfTUFTSwkJCTB4ZmZmZmZmZjAKLSNkZWZpbmUgUEhZX0lEX0JDTTU0MDAJCQkweDYwMDA4MDQwCi0jZGVmaW5lIFBIWV9JRF9CQ001NDAxCQkJMHg2MDAwODA1MAotI2RlZmluZSBQSFlfSURfQkNNNTQxMQkJCTB4NjAwMDgwNzAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3MDEJCQkweDYwMDA4MTEwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzAzCQkJMHg2MDAwODE2MAotI2RlZmluZSBQSFlfSURfQkNNNTcwNAkJCTB4NjAwMDgxOTAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3MDUJCQkweDYwMDA4MWEwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzUwCQkJMHg2MDAwODE4MAotI2RlZmluZSBQSFlfSURfQkNNNTc1MgkJCTB4NjAwMDgxMDAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3MTQJCQkweDYwMDA4MzQwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzgwCQkJMHg2MDAwODM1MAotI2RlZmluZSBQSFlfSURfQkNNNTc1NQkJCTB4YmMwNTBjYzAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3ODcJCQkweGJjMDUwY2UwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzU2CQkJMHhiYzA1MGVkMAotI2RlZmluZSBQSFlfSURfQkNNNTc4NAkJCTB4YmMwNTBmYTAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3NjEJCQkweGJjMDUwZmQwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzE3CQkJMHg1YzBkOGEwMAotI2RlZmluZSBQSFlfSURfQkNNNTkwNgkJCTB4ZGMwMGFjNDAKLSNkZWZpbmUgUEhZX0lEX0JDTTgwMDIJCQkweDYwMDEwMTQwCi0jZGVmaW5lIFBIWV9JRF9JTlZBTElECQkJMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfSURfUkVWX01BU0sJCQkweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9SRVZfQkNNNTQwMV9CMAkJMHgxCi0jZGVmaW5lIFBIWV9SRVZfQkNNNTQwMV9CMgkJMHgzCi0jZGVmaW5lIFBIWV9SRVZfQkNNNTQwMV9DMAkJMHg2Ci0jZGVmaW5lIFBIWV9SRVZfQkNNNTQxMV9YMAkJMHgxIC8qIEZvdW5kIG9uIE5ldGdlYXIgR0EzMDJUICovCi0jZGVmaW5lIFRHM19QSFlfSURfQkNNNTA2MTAJCTB4MTQzYmQ2MAotI2RlZmluZSBURzNfUEhZX0lEX0JDTTUwNjEwTQkweDE0M2JkNzAKLSNkZWZpbmUgVEczX1BIWV9JRF9CQ01BQzEzMQkJMHgxNDNiYzcwCi0jZGVmaW5lIFRHM19QSFlfSURfUlRMODIxMUMJCTB4MDAxY2M5MTAKLSNkZWZpbmUgVEczX1BIWV9JRF9SVEw4MjAxRQkJMHgwMDAwODIwMAotI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NzgwCQkweDAzNjI1ZDkwCi0jZGVmaW5lIFRHM19QSFlfT1VJX01BU0sJCTB4ZmZmZmZjMDAKLSNkZWZpbmUgVEczX1BIWV9PVUlfMQkJCTB4MDAyMDYwMDAKLSNkZWZpbmUgVEczX1BIWV9PVUlfMgkJCTB4MDE0M2JjMDAKLSNkZWZpbmUgVEczX1BIWV9PVUlfMwkJCTB4MDM2MjVjMDAKKyNkZWZpbmUgVEczX1BIWV9JRF9NQVNLCQkJMHhmZmZmZmZmMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU0MDAJCTB4NjAwMDgwNDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NDAxCQkweDYwMDA4MDUwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTQxMQkJMHg2MDAwODA3MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MDEJCTB4NjAwMDgxMTAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzAzCQkweDYwMDA4MTYwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcwNAkJMHg2MDAwODE5MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MDUJCTB4NjAwMDgxYTAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzUwCQkweDYwMDA4MTgwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc1MgkJMHg2MDAwODEwMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MTQJCTB4NjAwMDgzNDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzgwCQkweDYwMDA4MzUwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc1NQkJMHhiYzA1MGNjMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3ODcJCTB4YmMwNTBjZTAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzU2CQkweGJjMDUwZWQwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc4NAkJMHhiYzA1MGZhMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NjEJCTB4YmMwNTBmZDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzE4QwkJMHg1YzBkOGEwMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MThTCQkweGJjMDUwZmYwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc3NjUJCTB4NWMwZDhhNDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001OTA2CQkweGRjMDBhYzQwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNODAwMgkJMHg2MDAxMDE0MAorI2RlZmluZSBURzNfUEhZX0lEX0lOVkFMSUQJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBQSFlfSURfUlRMODIxMUMJCQkweDAwMWNjOTEwCisjZGVmaW5lIFBIWV9JRF9SVEw4MjAxRQkJCTB4MDAwMDgyMDAKKworI2RlZmluZSBURzNfUEhZX0lEX1JFVl9NQVNLCQkweDAwMDAwMDBmCisjZGVmaW5lIFRHM19QSFlfUkVWX0JDTTU0MDFfQjAJCTB4MQorCisJLyogVGhpcyBtYWNybyBhc3N1bWVzIHRoZSBwYXNzZWQgUEhZIElEIGlzCisJICogYWxyZWFkeSBtYXNrZWQgd2l0aCBURzNfUEhZX0lEX01BU0suCisJICovCisjZGVmaW5lIFRHM19LTk9XTl9QSFlfSUQoWCkJCVwKKwkoKFgpID09IFRHM19QSFlfSURfQkNNNTQwMCB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NDAxIHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTQxMSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzAxIHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTcwMyB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzA0IHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTcwNSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzUwIHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTc1MiB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzE0IHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTc4MCB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001Nzg3IHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTc1NSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzU2IHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTkwNiB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzYxIHx8IFwKKwkgKFgpID09IFRHM19QSFlfSURfQkNNNTcxOEMgfHwgKFgpID09IFRHM19QSFlfSURfQkNNNTcxOFMgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001Nzc2NSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ004MDAyKQogCiAJdTMyCQkJCWxlZF9jdHJsOwogCXUzMgkJCQlwaHlfb3RwOwpAQCAtMjkwOSwyMCArMjk3Nyw2IEBACiAJdTMyCQkJCXBjaV9jbG9ja19jdHJsOwogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXZfcGVlcjsKIAotCS8qIFRoaXMgbWFjcm8gYXNzdW1lcyB0aGUgcGFzc2VkIFBIWSBJRCBpcyBhbHJlYWR5IG1hc2tlZAotCSAqIHdpdGggUEhZX0lEX01BU0suCi0JICovCi0jZGVmaW5lIEtOT1dOX1BIWV9JRChYKQkJXAotCSgoWCkgPT0gUEhZX0lEX0JDTTU0MDAgfHwgKFgpID09IFBIWV9JRF9CQ001NDAxIHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001NDExIHx8IChYKSA9PSBQSFlfSURfQkNNNTcwMSB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTcwMyB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3MDQgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU3MDUgfHwgKFgpID09IFBIWV9JRF9CQ001NzUwIHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001NzUyIHx8IChYKSA9PSBQSFlfSURfQkNNNTcxNCB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTc4MCB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3ODcgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTUgfHwgKFgpID09IFBIWV9JRF9CQ001NzU2IHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001OTA2IHx8IChYKSA9PSBQSFlfSURfQkNNNTc2MSB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTcxNyB8fCAoWCkgPT0gUEhZX0lEX0JDTTgwMDIpCi0KIAlzdHJ1Y3QgdGczX2h3X3N0YXRzCQkqaHdfc3RhdHM7CiAJZG1hX2FkZHJfdAkJCXN0YXRzX21hcHBpbmc7CiAJc3RydWN0IHdvcmtfc3RydWN0CQlyZXNldF90YXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGxhbi5jIGIvZHJpdmVycy9uZXQvdGxhbi5jCmluZGV4IGZhYmFlZmYuLjM5MDU0MGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAl7ICJDb21wYXEgTmV0RmxleC0zL0UiLCBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVELCAweDgzIH0sIC8qIEVJU0EgY2FyZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRsYW5fcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHRsYW5fcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURUwxMCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwLApAQCAtMzM4LDcgKzMzOCw3IEBACiBzdGF0aWMgaW50CVRMYW5fUGh5RHA4Mzg0MGFDaGVjayggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogKi8KIAotc3RhdGljIGludAlUTGFuX01paVJlYWRSZWcoIHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNiwgdTE2LCB1MTYgKiApOworc3RhdGljIGJvb2wJVExhbl9NaWlSZWFkUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYsIHUxNiwgdTE2ICogKTsKIHN0YXRpYyB2b2lkCVRMYW5fTWlpU2VuZERhdGEoIHUxNiwgdTMyLCB1bnNpZ25lZCApOwogc3RhdGljIHZvaWQJVExhbl9NaWlTeW5jKCB1MTYgKTsKIHN0YXRpYyB2b2lkCVRMYW5fTWlpV3JpdGVSZWcoIHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNiwgdTE2LCB1MTYgKTsKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAKIHN0YXRpYyB2b2lkIFRMYW5fU2V0TXVsdGljYXN0TGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7Ci0Jc3RydWN0IGRldl9tY19saXN0CSpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdTMyCQkJaGFzaDEgPSAwOwogCXUzMgkJCWhhc2gyID0gMDsKIAlpbnQJCQlpOwpAQCAtMTMzNSw3ICsxMzM1LDggQEAKIAkJCVRMYW5fRGlvV3JpdGUzMiggZGV2LT5iYXNlX2FkZHIsIFRMQU5fSEFTSF8xLCAweEZGRkZGRkZGICk7CiAJCQlUTGFuX0Rpb1dyaXRlMzIoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0hBU0hfMiwgMHhGRkZGRkZGRiApOwogCQl9IGVsc2UgewotCQkJZm9yICggaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKysgKSB7CisJCQlpID0gMDsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJaWYgKCBpIDwgMyApIHsKIAkJCQkJVExhbl9TZXRNYWMoIGRldiwgaSArIDEsCiAJCQkJCQkgICAgIChjaGFyICopICZkbWktPmRtaV9hZGRyICk7CkBAIC0xMzQ2LDcgKzEzNDcsNyBAQAogCQkJCQllbHNlCiAJCQkJCQloYXNoMiB8PSAoIDEgPDwgKCBvZmZzZXQgLSAzMiApICk7CiAJCQkJfQotCQkJCWRtaSA9IGRtaS0+bmV4dDsKKwkJCQlpKys7CiAJCQl9CiAJCQlmb3IgKCA7IGkgPCAzOyBpKysgKQogCQkJCVRMYW5fU2V0TWFjKCBkZXYsIGkgKyAxLCBOVUxMICk7CkBAIC0yMjA0LDcgKzIyMDUsNyBAQAogCXUzMgkJZGF0YTsKIAl1OAkJZGF0YTg7CiAKLQlwcml2LT50bGFuRnVsbER1cGxleCA9IEZBTFNFOworCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gZmFsc2U7CiAJcHJpdi0+cGh5T25saW5lPTA7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIApAQCAtMjI1OSw3ICsyMjYwLDcgQEAKIAkJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9BQ09NTUlULCAweDBhICk7CiAJCX0gZWxzZSBpZiAoIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9GVUxMICkgewogCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0FDT01NSVQsIDB4MDAgKTsKLQkJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKKwkJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9BQ09NTUlULCAweDA4ICk7CiAJCX0KQEAgLTI2NTEsMTQgKzI2NTIsMTQgQEAKIAkJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0NUTCwgMHgwMDAwKTsKIAkJfSBlbHNlIGlmICggcHJpdi0+c3BlZWQgPT0gVExBTl9TUEVFRF8xMCAmJgogCQkJICAgIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9GVUxMKSB7Ci0JCQlwcml2LT50bGFuRnVsbER1cGxleCA9IFRSVUU7CisJCQlwcml2LT50bGFuRnVsbER1cGxleCA9IHRydWU7CiAJCQlUTGFuX01paVdyaXRlUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9DVEwsIDB4MDEwMCk7CiAJCX0gZWxzZSBpZiAoIHByaXYtPnNwZWVkID09IFRMQU5fU1BFRURfMTAwICYmCiAJCQkgICAgcHJpdi0+ZHVwbGV4ID09IFRMQU5fRFVQTEVYX0hBTEYpIHsKIAkJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0NUTCwgMHgyMDAwKTsKIAkJfSBlbHNlIGlmICggcHJpdi0+c3BlZWQgPT0gVExBTl9TUEVFRF8xMDAgJiYKIAkJCSAgICBwcml2LT5kdXBsZXggPT0gVExBTl9EVVBMRVhfRlVMTCkgewotCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSBUUlVFOworCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSB0cnVlOwogCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLCAweDIxMDApOwogCQl9IGVsc2UgewogCkBAIC0yNjk1LDcgKzI2OTYsNyBAQAogICAgICAgICAgICAgICAgIAl0Y3RsICY9IH5UTEFOX1RDX0FVSVNFTDsKIAkJCWlmICggcHJpdi0+ZHVwbGV4ID09IFRMQU5fRFVQTEVYX0ZVTEwgKSB7CiAJCQkJY29udHJvbCB8PSBNSUlfR0NfRFVQTEVYOwotCQkJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKKwkJCQlwcml2LT50bGFuRnVsbER1cGxleCA9IHRydWU7CiAJCQl9CiAJCQlpZiAoIHByaXYtPnNwZWVkID09IFRMQU5fU1BFRURfMTAwICkgewogCQkJCWNvbnRyb2wgfD0gTUlJX0dDX1NQRUVEU0VMOwpAQCAtMjc1MCw5ICsyNzUxLDkgQEAKIAlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfQU5fTFBBLCAmYW5fbHBhICk7CiAJbW9kZSA9IGFuX2FkdiAmIGFuX2xwYSAmIDB4MDNFMDsKIAlpZiAoIG1vZGUgJiAweDAxMDAgKSB7Ci0JCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKKwkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSB0cnVlOwogCX0gZWxzZSBpZiAoICEgKCBtb2RlICYgMHgwMDgwICkgJiYgKCBtb2RlICYgMHgwMDQwICkgKSB7Ci0JCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKKwkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSB0cnVlOwogCX0KIAogCWlmICggKCAhICggbW9kZSAmIDB4MDE4MCApICkgJiYKQEAgLTI4NTUsOCArMjg1Niw4IEBACiAJICoJVExhbl9NaWlSZWFkUmVnCiAJICoKIAkgKglSZXR1cm5zOgotCSAqCQkwCWlmIGFjayByZWNlaXZlZCBvawotCSAqCQkxCW90aGVyd2lzZS4KKwkgKgkJZmFsc2UJaWYgYWNrIHJlY2VpdmVkIG9rCisJICoJCXRydWUJaWYgbm8gYWNrIHJlY2VpdmVkIG9yIG90aGVyIGVycm9yCiAJICoKIAkgKglQYXJtczoKIAkgKgkJZGV2CQlUaGUgZGV2aWNlIHN0cnVjdHVyZSBjb250YWluaW5nCkBAIC0yODc1LDE3ICsyODc2LDE3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgVExhbl9NaWlSZWFkUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgKnZhbCApCitzdGF0aWMgYm9vbCBUTGFuX01paVJlYWRSZWcoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBwaHksIHUxNiByZWcsIHUxNiAqdmFsICkKIHsKIAl1OAluYWNrOwogCXUxNglzaW8sIHRtcDsKICAJdTMyCWk7Ci0JaW50CWVycjsKKwlib29sCWVycjsKIAlpbnQJbWludGVuOwogCVRMYW5Qcml2YXRlSW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQllcnIgPSBGQUxTRTsKKwllcnIgPSBmYWxzZTsKIAlvdXR3KFRMQU5fTkVUX1NJTywgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19BRFIpOwogCXNpbyA9IGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIFRMQU5fTkVUX1NJTzsKIApAQCAtMjkxOCw3ICsyOTE5LDcgQEAKIAkJCVRMYW5fU2V0Qml0KFRMQU5fTkVUX1NJT19NQ0xLLCBzaW8pOwogCQl9CiAJCXRtcCA9IDB4ZmZmZjsKLQkJZXJyID0gVFJVRTsKKwkJZXJyID0gdHJ1ZTsKIAl9IGVsc2UgewkJCQkJLyogQUNLLCBzbyByZWFkIGRhdGEgKi8KIAkJZm9yICh0bXAgPSAwLCBpID0gMHg4MDAwOyBpOyBpID4+PSAxKSB7CiAJCQlUTGFuX0NsZWFyQml0KFRMQU5fTkVUX1NJT19NQ0xLLCBzaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGxhbi5oIGIvZHJpdmVycy9uZXQvdGxhbi5oCmluZGV4IDRiODJmMjguLmQxM2ZmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RsYW4uaAorKysgYi9kcml2ZXJzL25ldC90bGFuLmgKQEAgLTMxLDkgKzMxLDYgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEZBTFNFCQkJMAotI2RlZmluZSBUUlVFCQkJMQotCiAjZGVmaW5lIFRMQU5fTUlOX0ZSQU1FX1NJWkUJNjQKICNkZWZpbmUgVExBTl9NQVhfRlJBTUVfU0laRQkxNjAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggY2Y1NTJkMS4uMGZiOTMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogICoJd2lsbCBiZSBzdHVjayB3aXRoIDE1NTUgbGluZXMgb2YgaGV4ICMncyBpbiB0aGUgY29kZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeGxfcGNpX3RibFtdID0KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh4bF9wY2lfdGJsKSA9CiB7CiAJe1BDSV9WRU5ET1JfSURfM0NPTSxQQ0lfREVWSUNFX0lEXzNDT01fM0MzNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyB9CQkJLyogdGVybWluYXRlIGxpc3QgKi8KQEAgLTEzOTAsMTAgKzEzOTAsOSBAQAogc3RhdGljIHZvaWQgeGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCiB7CiAJc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pIDsgCisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdW5zaWduZWQgY2hhciBkZXZfbWNfYWRkcmVzc1s0XSA7IAogCXUxNiBvcHRpb25zIDsgCi0JaW50IGkgOyAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCW9wdGlvbnMgPSAweDAwMDQgOyAKQEAgLTE0MDgsNyArMTQwNyw3IEBACiAKIAlkZXZfbWNfYWRkcmVzc1swXSA9IGRldl9tY19hZGRyZXNzWzFdID0gZGV2X21jX2FkZHJlc3NbMl0gPSBkZXZfbWNfYWRkcmVzc1szXSA9IDAgOwogCi0gICAgICAgIGZvciAoaT0wLGRtaT1kZXYtPm1jX2xpc3Q7aSA8IGRldi0+bWNfY291bnQ7IGkrKyxkbWkgPSBkbWktPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogICAgICAgICAgICAgICAgIGRldl9tY19hZGRyZXNzWzBdIHw9IGRtaS0+ZG1pX2FkZHJbMl0gOwogICAgICAgICAgICAgICAgIGRldl9tY19hZGRyZXNzWzFdIHw9IGRtaS0+ZG1pX2FkZHJbM10gOwogICAgICAgICAgICAgICAgIGRldl9tY19hZGRyZXNzWzJdIHw9IGRtaS0+ZG1pX2FkZHJbNF0gOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwppbmRleCBiOWRiMWI1Li41MTVmMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwpAQCAtNDUsNyArNDUsNyBAQAogCiAjZGVmaW5lIEFCWVNTX0lPX0VYVEVOVCA2NAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWJ5c3NfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFieXNzX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9NQURHRSwgUENJX0RFVklDRV9JRF9NQURHRV9NSzIsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTkVUV09SS19UT0tFTl9SSU5HIDw8IDgsIDB4MDBmZmZmZmYsIH0sCiAJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggNjYyNzJmMi4uMWEwOTY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTk5NSwxMyArOTk1LDExIEBACiAJLypCTVMgaWZjb25maWcgdHIgZG93biBvciBob3QgdW5wbHVnIGEgUENNQ0lBIGNhcmQgPz9ob3dub3dicm93bmNvdyovCiAJaWYgKC8qQk1TSEVMUGRldi0+c3RhcnQgPT0gMCB8fCovIHRpLT5vcGVuX3N0YXR1cyAhPSBPUEVOKSByZXR1cm47CiAJYWRkcmVzc1swXSA9IGFkZHJlc3NbMV0gPSBhZGRyZXNzWzJdID0gYWRkcmVzc1szXSA9IDA7Ci0JbWNsaXN0ID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQlhZGRyZXNzWzBdIHw9IG1jbGlzdC0+ZG1pX2FkZHJbMl07CiAJCWFkZHJlc3NbMV0gfD0gbWNsaXN0LT5kbWlfYWRkclszXTsKIAkJYWRkcmVzc1syXSB8PSBtY2xpc3QtPmRtaV9hZGRyWzRdOwogCQlhZGRyZXNzWzNdIHw9IG1jbGlzdC0+ZG1pX2FkZHJbNV07Ci0JCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKIAl9CiAJU0VUX1BBR0UodGktPnNyYl9wYWdlKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBzcmJfc2V0X2Z1bmN0X2FkZHIpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IGQ2Y2NkNTkuLmRkMDI4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9ICJMYW5TdHJlYW1lci5jIHYwLjQuMCAwMy8wOC8wMSAtIE1pa2UgU3VsbGl2YW5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgIHYwLjUuMyAxMS8xMy8wMiAtIEtlbnQgWW9kZXIiOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RyZWFtZXJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHN0cmVhbWVyX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX1RSLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJe30JLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0xMjY4LDcgKzEyNjgsNiBAQAogCV9fdTggb3B0aW9ucyA9IDA7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdW5zaWduZWQgY2hhciBkZXZfbWNfYWRkcmVzc1s1XTsKLQlpbnQgaTsKIAogCXdyaXRlbChzdHJlYW1lcl9wcml2LT5zcmIsIHN0cmVhbWVyX21taW8gKyBMQVBBKTsKIAlvcHRpb25zID0gc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfY29weV9hbGxfb3B0aW9uczsKQEAgLTEzMDMsOCArMTMwMiw3IEBACiAJd3JpdGVsKHN0cmVhbWVyX3ByaXYtPnNyYixzdHJlYW1lcl9tbWlvK0xBUEEpOwogCWRldl9tY19hZGRyZXNzWzBdID0gZGV2X21jX2FkZHJlc3NbMV0gPSBkZXZfbWNfYWRkcmVzc1syXSA9IGRldl9tY19hZGRyZXNzWzNdID0gMCA7IAogICAKLQlmb3IgKGk9MCxkbWk9ZGV2LT5tY19saXN0O2kgPCBkZXYtPm1jX2NvdW50OyBpKyssZG1pID0gZG1pLT5uZXh0KSAKLQl7IAorCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAgICAJICAgICAgICBkZXZfbWNfYWRkcmVzc1swXSB8PSBkbWktPmRtaV9hZGRyWzJdIDsgCiAJCWRldl9tY19hZGRyZXNzWzFdIHw9IGRtaS0+ZG1pX2FkZHJbM10gOyAKIAkJZGV2X21jX2FkZHJlc3NbMl0gfD0gZG1pLT5kbWlfYWRkcls0XSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKaW5kZXggZGYzMjAyNS4uM2EyNWUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIHN0YXRpYyBpbnQgbmV0d29ya19tb25pdG9yW09MWU1QSUNfTUFYX0FEQVBURVJTXSA9IHswLH07CiBtb2R1bGVfcGFyYW1fYXJyYXkobmV0d29ya19tb25pdG9yLCBpbnQsIE5VTEwsIDApOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb2x5bXBpY19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob2x5bXBpY19wY2lfdGJsKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9JQk0sUENJX0RFVklDRV9JRF9JQk1fVFJfV0FLRSxQQ0lfQU5ZX0lELFBDSV9BTllfSUQsfSwKIAl7IH0gCS8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCiB9OwpAQCAtMTEzOSw5ICsxMTM5LDggQEAKICAgIAl1OCBfX2lvbWVtICpvbHltcGljX21taW8gPSBvbHltcGljX3ByaXYtPm9seW1waWNfbW1pbyA7IAogCXU4IG9wdGlvbnMgPSAwOyAKIAl1OCBfX2lvbWVtICpzcmI7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgOyAKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAl1bnNpZ25lZCBjaGFyIGRldl9tY19hZGRyZXNzWzRdIDsgCi0JaW50IGkgOyAKIAogCXdyaXRlbChvbHltcGljX3ByaXYtPnNyYixvbHltcGljX21taW8rTEFQQSk7CiAJc3JiPW9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyAob2x5bXBpY19wcml2LT5zcmIgJiAofjB4ZjgwMCkpOwpAQCAtMTE3OCw3ICsxMTc3LDcgQEAKIAogCWRldl9tY19hZGRyZXNzWzBdID0gZGV2X21jX2FkZHJlc3NbMV0gPSBkZXZfbWNfYWRkcmVzc1syXSA9IGRldl9tY19hZGRyZXNzWzNdID0gMCA7IAogCi0JZm9yIChpPTAsZG1pPWRldi0+bWNfbGlzdDtpIDwgZGV2LT5tY19jb3VudDsgaSsrLGRtaSA9IGRtaS0+bmV4dCkgeyAKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQlkZXZfbWNfYWRkcmVzc1swXSB8PSBkbWktPmRtaV9hZGRyWzJdIDsgCiAJCWRldl9tY19hZGRyZXNzWzFdIHw9IGRtaS0+ZG1pX2FkZHJbM10gOyAKIAkJZGV2X21jX2FkZHJlc3NbMl0gfD0gZG1pLT5kbWlfYWRkcls0XSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwppbmRleCBlM2M0MmY1Li4yMWEwMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwpAQCAtMTIxMiwxMCArMTIxMiw5IEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlpbnQgaTsKLQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gZGV2LT5tY19saXN0OwotCQkJZm9yIChpPTA7IGk8IGRldi0+bWNfY291bnQ7IGkrKykKLQkJCXsKKwkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJCSgoY2hhciAqKSgmdHAtPm9jcGwuRnVuY3RBZGRyKSlbMF0gfD0KIAkJCQkJbWNsaXN0LT5kbWlfYWRkclsyXTsKIAkJCQkoKGNoYXIgKikoJnRwLT5vY3BsLkZ1bmN0QWRkcikpWzFdIHw9CkBAIC0xMjI0LDcgKzEyMjMsNiBAQAogCQkJCQltY2xpc3QtPmRtaV9hZGRyWzRdOwogCQkJCSgoY2hhciAqKSgmdHAtPm9jcGwuRnVuY3RBZGRyKSlbM10gfD0KIAkJCQkJbWNsaXN0LT5kbWlfYWRkcls1XTsKLQkJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CiAJCQl9CiAJCX0KIAkJdG1zMzgwdHJfZXhlY19jbWQoZGV2LCBPQ19TRVRfRlVOQ1RfQUREUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKaW5kZXggZjkyZmU4Ni4uZDRjN2MwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwpAQCAtNTcsNyArNTcsNyBAQAogCXsgezB4MDMsIDB4MDF9LCAiM0NvbSBUb2tlbiBMaW5rIFZlbG9jaXR5In0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdG1zcGNpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0bXNwY2lfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9UUiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAogCXsgUENJX1ZFTkRPUl9JRF9UQ09OUkFELCBQQ0lfREVWSUNFX0lEX1RDT05SQURfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggYTY5YzRhNC4uNjQ3Y2RkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtMTE4NCwyOSArMTE4NCwxOSBAQAogCiAJcnhjZmcgJj0gfihUU0kxMDhfRUNfUlhDRkdfVUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01GRSk7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50KSB7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCWludCBpOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gZGV2LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jOwogCQlyeGNmZyB8PSBUU0kxMDhfRUNfUlhDRkdfTUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01DX0hBU0g7CiAKIAkJbWVtc2V0KGRhdGEtPm1jX2hhc2gsIDAsIHNpemVvZihkYXRhLT5tY19oYXNoKSk7CiAKLQkJd2hpbGUgKG1jKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jLCBkZXYpIHsKIAkJCXUzMiBoYXNoLCBjcmM7CiAKLQkJCWlmIChtYy0+ZG1pX2FkZHJsZW4gPT0gNikgewotCQkJCWNyYyA9IGV0aGVyX2NyYyg2LCBtYy0+ZG1pX2FkZHIpOwotCQkJCWhhc2ggPSBjcmMgPj4gMjM7Ci0KLQkJCQlfX3NldF9iaXQoaGFzaCwgJmRhdGEtPm1jX2hhc2hbMF0pOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJIiVzOiBnb3QgbXVsdGljYXN0IGFkZHJlc3Mgb2YgbGVuZ3RoICVkIGluc3RlYWQgb2YgNi5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCQkgICAgICAgbWMtPmRtaV9hZGRybGVuKTsKLQkJCX0KLQotCQkJbWMgPSBtYy0+bmV4dDsKKwkJCWNyYyA9IGV0aGVyX2NyYyg2LCBtYy0+ZG1pX2FkZHIpOworCQkJaGFzaCA9IGNyYyA+PiAyMzsKKwkJCV9fc2V0X2JpdChoYXNoLCAmZGF0YS0+bWNfaGFzaFswXSk7CiAJCX0KIAogCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0hBU0hBRERSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKaW5kZXggOWY2NzQyZi4uMDA3ZDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCkBAIC00Myw4ICs0Myw4IEBACiAJaWYgKChjc3IxNCAmIDB4ODApICYmIChjc3IxMiAmIDB4NzAwMCkgIT0gMHg1MDAwKQogCQljc3IxMiB8PSA2OwogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0lORk8iJXM6IDIxMTQzIG5lZ290aWF0aW9uIHN0YXR1cyAlOC44eCwgJXMuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBjc3IxMiwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICIyMTE0MyBuZWdvdGlhdGlvbiBzdGF0dXMgJTA4eCwgJXNcbiIsCisJCQkgY3NyMTIsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAlpZiAodHVsaXBfbWVkaWFfY2FwW2Rldi0+aWZfcG9ydF0gJiBNZWRpYUlzTUlJKSB7CiAJCWlmICh0dWxpcF9jaGVja19kdXBsZXgoZGV2KSA8IDApIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CkBAIC01NiwyMyArNTYsMjYgQEAKIAl9IGVsc2UgaWYgKHRwLT5ud2F5c2V0KSB7CiAJCS8qIERvbid0IHNjcmV3IHVwIGEgbmVnb3RpYXRlZCBzZXNzaW9uISAqLwogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogVXNpbmcgTldheS1zZXQgJXMgbWVkaWEsIGNzcjEyICU4Ljh4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLCBjc3IxMik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICJVc2luZyBOV2F5LXNldCAlcyBtZWRpYSwgY3NyMTIgJTA4eFxuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyKTsKIAl9IGVsc2UgaWYgKHRwLT5tZWRpYWxvY2spIHsKIAkJCTsKIAl9IGVsc2UgaWYgKGRldi0+aWZfcG9ydCA9PSAzKSB7CiAJCWlmIChjc3IxMiAmIDIpIHsJLyogTm8gMTAwbWJwcyBsaW5rIGJlYXQsIHJldmVydCB0byAxMG1icHMuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0lORk8iJXM6IE5vIDIxMTQzIDEwMGJhc2VUeCBsaW5rIGJlYXQsICU4Ljh4LCAiCi0JCQkJCSAgICJ0cnlpbmcgTldheS5cbiIsIGRldi0+bmFtZSwgY3NyMTIpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJObyAyMTE0MyAxMDBiYXNlVHggbGluayBiZWF0LCAlMDh4LCB0cnlpbmcgTldheVxuIiwKKwkJCQkJIGNzcjEyKTsKIAkJCXQyMTE0Ml9zdGFydF9ud2F5KGRldik7CiAJCQluZXh0X3RpY2sgPSAzKkhaOwogCQl9CiAJfSBlbHNlIGlmICgoY3NyMTIgJiAweDcwMDApICE9IDB4NTAwMCkgewogCQkvKiBOZWdvdGlhdGlvbiBmYWlsZWQuICBTZWFyY2ggbWVkaWEgdHlwZXMuICovCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyBuZWdvdGlhdGlvbiBmYWlsZWQsIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICIyMTE0MyBuZWdvdGlhdGlvbiBmYWlsZWQsIHN0YXR1cyAlMDh4XG4iLAorCQkJCSBjc3IxMik7CiAJCWlmICghKGNzcjEyICYgNCkpIHsJCS8qIDEwbWJwcyBsaW5rIGJlYXQgZ29vZC4gKi8KIAkJCW5ld19jc3I2ID0gMHg4MjQyMDAwMDsKIAkJCWRldi0+aWZfcG9ydCA9IDA7CkBAIC05MCw4ICs5Myw4IEBACiAJCQlpb3dyaXRlMzIoMSwgaW9hZGRyICsgQ1NSMTMpOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiBUZXN0aW5nIG5ldyAyMTE0MyBtZWRpYSAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJUZXN0aW5nIG5ldyAyMTE0MyBtZWRpYSAlc1xuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAobmV3X2NzcjYgIT0gKHRwLT5jc3I2ICYgfjB4MDBENSkpIHsKIAkJCXRwLT5jc3I2ICY9IDB4MDBENTsKIAkJCXRwLT5jc3I2IHw9IG5ld19jc3I2OwpAQCAtMTE5LDggKzEyMiw4IEBACiAJdHAtPm53YXkgPSB0cC0+bWVkaWFzZW5zZSA9IDE7CiAJdHAtPm53YXlzZXQgPSB0cC0+bHBhciA9IDA7CiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXN0YXJ0aW5nIDIxMTQzIGF1dG9uZWdvdGlhdGlvbiwgY3NyMTQ9JTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBjc3IxNCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzdGFydGluZyAyMTE0MyBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGNzcjE0KTsKIAlpb3dyaXRlMzIoMHgwMDAxLCBpb2FkZHIgKyBDU1IxMyk7CiAJdWRlbGF5KDEwMCk7CiAJaW93cml0ZTMyKGNzcjE0LCBpb2FkZHIgKyBDU1IxNCk7CkBAIC0xNDcsOCArMTUwLDkgQEAKIAlpZiAoKGNzcjE0ICYgMHg4MCkgJiYgKGNzcjEyICYgMHg3MDAwKSAhPSAweDUwMDApCiAJCWNzcjEyIHw9IDY7CiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgbGluayBzdGF0dXMgaW50ZXJydXB0ICU4Ljh4LCBDU1I1ICV4LCAiCi0JCQkgICAiJTguOHguXG4iLCBkZXYtPm5hbWUsIGNzcjEyLCBjc3I1LCBjc3IxNCk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAiMjExNDMgbGluayBzdGF0dXMgaW50ZXJydXB0ICUwOHgsIENTUjUgJXgsICUwOHhcbiIsCisJCQkgY3NyMTIsIGNzcjUsIGNzcjE0KTsKIAogCS8qIElmIE5XYXkgZmluaXNoZWQgYW5kIHdlIGhhdmUgYSBuZWdvdGlhdGVkIHBhcnRuZXIgY2FwYWJpbGl0eS4gKi8KIAlpZiAodHAtPm53YXkgICYmICAhdHAtPm53YXlzZXQgICYmICAoY3NyMTIgJiAweDcwMDApID09IDB4NTAwMCkgewpAQCAtMTcxLDE0ICsxNzUsMTUgQEAKIAogCQlpZiAodHVsaXBfZGVidWcgPiAxKSB7CiAJCQlpZiAodHAtPm53YXlzZXQpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rICIKLQkJCQkJICAgIm5lZ290aWF0aW9uICU0LjR4ICYgJTQuNHggPSAlNC40eC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHRwLT5zeW1fYWR2ZXJ0aXNlLAotCQkJCQkgICB0cC0+bHBhciwgbmVnb3RpYXRlZCk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIlN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rIG5lZ290aWF0aW9uICUwNHggJiAlMDR4ID0gJTA0eFxuIiwKKwkJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLAorCQkJCQkgbmVnb3RpYXRlZCk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG9uZWdvdGlhdGlvbiBmYWlsZWQsIHVzaW5nICVzLCIKLQkJCQkJICAgIiBsaW5rIGJlYXQgc3RhdHVzICU0LjR4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCB1c2luZyAlcywgbGluayBiZWF0IHN0YXR1cyAlMDR4XG4iLAorCQkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyKTsKIAkJfQogCiAJCWlmICh0cC0+bXRhYmxlKSB7CkBAIC0yMDEsMTQgKzIwNiwxNCBAQAogI2lmIDAJCQkJCQkJLyogUmVzdGFydCBzaG91bGRuJ3QgYmUgbmVlZGVkLiAqLwogCQlpb3dyaXRlMzIodHAtPmNzcjYgfCBSeE9uLCBpb2FkZHIgKyBDU1I2KTsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFJlc3RhcnRpbmcgVHggYW5kIFJ4LCBDU1I1IGlzICU4Ljh4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFJlc3RhcnRpbmcgVHggYW5kIFJ4LCBDU1I1IGlzICUwOHhcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAjZW5kaWYKIAkJdHVsaXBfc3RhcnRfcnh0eCh0cCk7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTguOHgvJXggQ1NSMTIgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAotCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfSBlbHNlIGlmICgodHAtPm53YXlzZXQgICYmICAoY3NyNSAmIDB4MDgwMDAwMDApICYmCiAJCSAgICAoZGV2LT5pZl9wb3J0ID09IDMgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNSkgJiYKIAkJICAgIChjc3IxMiAmIDIpID09IDIpIHx8CkBAIC0yMjAsOSArMjI1LDkgQEAKIAkJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwogCX0gZWxzZSBpZiAoZGV2LT5pZl9wb3J0ID09IDMgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNSkgewogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgJXMgbGluayBiZWF0ICVzLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgIChjc3IxMiAmIDIpID8gImZhaWxlZCIgOiAiZ29vZCIpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgJXMgbGluayBiZWF0ICVzXG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgKGNzcjEyICYgMikgPyAiZmFpbGVkIiA6ICJnb29kIik7CiAJCWlmICgoY3NyMTIgJiAyKSAgJiYgICEgdHAtPm1lZGlhbG9jaykgewogCQkJZGVsX3RpbWVyX3N5bmMoJnRwLT50aW1lcik7CiAJCQl0MjExNDJfc3RhcnRfbndheShkZXYpOwpAQCAtMjMyLDIxICsyMzcsMTggQEAKIAkJCWlvd3JpdGUzMihjc3IxNCAmIH4weDA4MCwgaW9hZGRyICsgQ1NSMTQpOwogCX0gZWxzZSBpZiAoZGV2LT5pZl9wb3J0ID09IDAgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNCkgewogCQlpZiAoKGNzcjEyICYgNCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0lORk8iJXM6IDIxMTQzIDEwYmFzZVQgbGluayBiZWF0IGdvb2QuXG4iLAotCQkJCSAgIGRldi0+bmFtZSk7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICIyMTE0MyAxMGJhc2VUIGxpbmsgYmVhdCBnb29kXG4iKTsKIAl9IGVsc2UgaWYgKCEoY3NyMTIgJiA0KSkgewkJLyogMTBtYnBzIGxpbmsgYmVhdCBnb29kLiAqLwogCQlpZiAodHVsaXBfZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyAxMG1icHMgc2Vuc2VkIG1lZGlhLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgMTBtYnBzIHNlbnNlZCBtZWRpYVxuIik7CiAJCWRldi0+aWZfcG9ydCA9IDA7CiAJfSBlbHNlIGlmICh0cC0+bndheXNldCkgewogCQlpZiAodHVsaXBfZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyB1c2luZyBOV2F5LXNldCAlcywgY3NyNiAlOC44eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgdHAtPmNzcjYpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgdXNpbmcgTldheS1zZXQgJXMsIGNzcjYgJTA4eFxuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHRwLT5jc3I2KTsKIAl9IGVsc2UgewkJLyogMTAwbWJwcyBsaW5rIGJlYXQgZ29vZC4gKi8KIAkJaWYgKHR1bGlwX2RlYnVnKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgMTAwYmFzZVR4IHNlbnNlZCBtZWRpYS5cbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwgIjIxMTQzIDEwMGJhc2VUeCBzZW5zZWQgbWVkaWFcbiIpOwogCQlkZXYtPmlmX3BvcnQgPSAzOwogCQl0cC0+Y3NyNiA9IDB4ODM4RTAwMDAgfCAodHAtPmNzcjYgJiAweDIwZmYpOwogCQlpb3dyaXRlMzIoMHgwMDAzRkY3RiwgaW9hZGRyICsgQ1NSMTQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGQ0MjU1ZDQuLmNiNDI5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkZV9va190b19hZHZlcnRpc2UgKHN0cnVjdCBkZV9wcml2YXRlICpkZSwgdTMyIG5ld19tZWRpYSk7CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRlX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkZV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTLApAQCAtMzgyLDkgKzM4Miw5IEBACiAJCS8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGRlKSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lICIKLQkJCQkJICAgInNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICU4Ljh4IVxuIiwKLQkJCQkJICAgZGUtPmRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LAorCQkJCQkgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJIHN0YXR1cyk7CiAJCQlkZS0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJfQogCX0gZWxzZSBpZiAoc3RhdHVzICYgUnhFcnJvcikgewpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJfQogCiAJaWYgKCFyeF93b3JrKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcnggd29yayBsaW1pdCByZWFjaGVkXG4iLCBkZS0+ZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwgInJ4IHdvcmsgbGltaXQgcmVhY2hlZFxuIik7CiAKIAlkZS0+cnhfdGFpbCA9IHJ4X3RhaWw7CiB9CkBAIC01MDQsNyArNTA0LDggQEAKIAogCWlmIChuZXRpZl9tc2dfaW50cihkZSkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCi0JCSAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIGRyMzIoTWFjTW9kZSksIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOworCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIGRyMzIoTWFjTW9kZSksCisJCSAgICAgICBkZS0+cnhfdGFpbCwgZGUtPnR4X2hlYWQsIGRlLT50eF90YWlsKTsKIAogCWR3MzIoTWFjU3RhdHVzLCBzdGF0dXMpOwogCkBAIC01MjksOCArNTMwLDkgQEAKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZChkZS0+cGRldiwgUENJX1NUQVRVUywgJnBjaV9zdGF0dXMpOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGUtPnBkZXYsIFBDSV9TVEFUVVMsIHBjaV9zdGF0dXMpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgYnVzIGVycm9yLCBzdGF0dXM9JTA4eCwgUENJIHN0YXR1cz0lMDR4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIHBjaV9zdGF0dXMpOworCQlkZXZfZXJyKCZkZS0+ZGV2LT5kZXYsCisJCQkiUENJIGJ1cyBlcnJvciwgc3RhdHVzPSUwOHgsIFBDSSBzdGF0dXM9JTA0eFxuIiwKKwkJCXN0YXR1cywgcGNpX3N0YXR1cyk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNTgyLDcgKzU4NCw4IEBACiAJCQkJZGUtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoZGUpKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsIGRlLT5kZXYtPm5hbWUsIHR4X3RhaWwpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsCisJCQkJCSAgICAgICBkZS0+ZGV2LT5uYW1lLCB0eF90YWlsKTsKIAkJCX0KIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KQEAgLTY3NCwxOSArNjc3LDE4IEBACiAJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CiAJc2V0X2JpdF9sZSgyNTUsIGhhc2hfdGFibGUpOyAJCQkvKiBCcm9hZGNhc3QgZW50cnkgKi8KIAkvKiBUaGlzIHNob3VsZCB3b3JrIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMgYXMgd2VsbC4gKi8KLQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJaW50IGluZGV4ID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4MWZmOwogCiAJCXNldF9iaXRfbGUoaW5kZXgsIGhhc2hfdGFibGUpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQkqc2V0dXBfZnJtKysgPSBoYXNoX3RhYmxlW2ldOwotCQkJKnNldHVwX2ZybSsrID0gaGFzaF90YWJsZVtpXTsKLQkJfQotCQlzZXR1cF9mcm0gPSAmZGUtPnNldHVwX2ZyYW1lWzEzKjZdOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCSpzZXR1cF9mcm0rKyA9IGhhc2hfdGFibGVbaV07CisJCSpzZXR1cF9mcm0rKyA9IGhhc2hfdGFibGVbaV07CisJfQorCXNldHVwX2ZybSA9ICZkZS0+c2V0dXBfZnJhbWVbMTMqNl07CisKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwogCWVhZGRycyA9ICh1MTYgKilkZXYtPmRldl9hZGRyOwogCSpzZXR1cF9mcm0rKyA9IGVhZGRyc1swXTsgKnNldHVwX2ZybSsrID0gZWFkZHJzWzBdOwpAQCAtNjk4LDIwICs3MDAsMTggQEAKIHsKIAlzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCWludCBpOwogCXUxNiAqZWFkZHJzOwogCiAJLyogV2UgaGF2ZSA8PSAxNCBhZGRyZXNzZXMgc28gd2UgY2FuIHVzZSB0aGUgd29uZGVyZnVsCiAJICAgMTYgYWRkcmVzcyBwZXJmZWN0IGZpbHRlcmluZyBvZiB0aGUgVHVsaXAuICovCi0JZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJZWFkZHJzID0gKHUxNiAqKW1jbGlzdC0+ZG1pX2FkZHI7CiAJCSpzZXR1cF9mcm0rKyA9ICplYWRkcnM7ICpzZXR1cF9mcm0rKyA9ICplYWRkcnMrKzsKIAkJKnNldHVwX2ZybSsrID0gKmVhZGRyczsgKnNldHVwX2ZybSsrID0gKmVhZGRycysrOwogCQkqc2V0dXBfZnJtKysgPSAqZWFkZHJzOyAqc2V0dXBfZnJtKysgPSAqZWFkZHJzKys7CiAJfQogCS8qIEZpbGwgdGhlIHVudXNlZCBlbnRyaWVzIHdpdGggdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiAqLwotCW1lbXNldChzZXR1cF9mcm0sIDB4ZmYsICgxNS1pKSoxMik7CisJbWVtc2V0KHNldHVwX2ZybSwgMHhmZiwgKDE1IC0gbmV0ZGV2X21jX2NvdW50KGRldikpICogMTIpOwogCXNldHVwX2ZybSA9ICZkZS0+c2V0dXBfZnJhbWVbMTUqNl07CiAKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwpAQCAtNzM4LDcgKzczOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCWlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiAxMDAwKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHdlbGwgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltYWNtb2RlIHw9IEFjY2VwdEFsbE11bHRpY2FzdDsKIAkJZ290byBvdXQ7CkBAIC03NDYsNyArNzQ2LDcgQEAKIAogCS8qIE5vdGUgdGhhdCBvbmx5IHRoZSBsb3ctYWRkcmVzcyBzaG9ydHdvcmQgb2Ygc2V0dXBfZnJhbWUgaXMgdmFsaWQhCiAJICAgVGhlIHZhbHVlcyBhcmUgZG91YmxlZCBmb3IgYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzLiAqLwotCWlmIChkZXYtPm1jX2NvdW50ID4gMTQpCS8qIE11c3QgdXNlIGEgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCisJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gMTQpCS8qIE11c3QgdXNlIGEgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCiAJCWJ1aWxkX3NldHVwX2ZyYW1lX2hhc2ggKGRlLT5zZXR1cF9mcmFtZSwgZGV2KTsKIAllbHNlCiAJCWJ1aWxkX3NldHVwX2ZyYW1lX3BlcmZlY3QgKGRlLT5zZXR1cF9mcmFtZSwgZGV2KTsKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdGltZW91dCBleHBpcmVkIHN0b3BwaW5nIERNQVxuIiwgZGUtPmRldi0+bmFtZSk7CisJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwgInRpbWVvdXQgZXhwaXJlZCBzdG9wcGluZyBETUFcbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVfc3RhcnRfcnh0eCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlKQpAQCAtOTA1LDggKzkwNSw4IEBACiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRlLT5kZXYpKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGUtPmRldik7CiAJCWlmIChuZXRpZl9tc2dfbGluayhkZSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCwgbWVkaWEgJXNcbiIsCi0JCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0pOworCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgdXAsIG1lZGlhICVzXG4iLAorCQkJCSBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CiAJfQogfQogCkBAIC05MTUsNyArOTE1LDcgQEAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZS0+ZGV2KSkgewogCQluZXRpZl9jYXJyaWVyX29mZihkZS0+ZGV2KTsKIAkJaWYgKG5ldGlmX21zZ19saW5rKGRlKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRlLT5kZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgZG93blxuIik7CiAJfQogfQogCkBAIC05MjUsNyArOTI1LDggQEAKIAl1MzIgbWFjbW9kZSA9IGRyMzIoTWFjTW9kZSk7CiAKIAlpZiAoZGVfaXNfcnVubmluZyhkZSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjaGlwIGlzIHJ1bm5pbmcgd2hpbGUgY2hhbmdpbmcgbWVkaWEhXG4iLCBkZS0+ZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwKKwkJCSAiY2hpcCBpcyBydW5uaW5nIHdoaWxlIGNoYW5naW5nIG1lZGlhIVxuIik7CiAKIAlpZiAoZGUtPmRlMjEwNDApCiAJCWR3MzIoQ1NSMTEsIEZVTExfRFVQTEVYX01BR0lDKTsKQEAgLTk0NSwxNSArOTQ2LDE1IEBACiAJCW1hY21vZGUgJj0gfkZ1bGxEdXBsZXg7CiAKIAlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogc2V0IGxpbmsgJXNcbiIKLQkJICAgICAgICIlczogICAgbW9kZSAweCV4LCBzaWEgMHgleCwweCV4LDB4JXgsMHgleFxuIgotCQkgICAgICAgIiVzOiAgICBzZXQgbW9kZSAweCV4LCBzZXQgc2lhIDB4JXgsMHgleCwweCV4XG4iLAotCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWVkaWFfbmFtZVttZWRpYV0sCi0JCSAgICAgICBkZS0+ZGV2LT5uYW1lLCBkcjMyKE1hY01vZGUpLCBkcjMyKFNJQVN0YXR1cyksCi0JCSAgICAgICBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpLAotCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWFjbW9kZSwgZGUtPm1lZGlhW21lZGlhXS5jc3IxMywKLQkJICAgICAgIGRlLT5tZWRpYVttZWRpYV0uY3NyMTQsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTUpOworCQlkZXZfaW5mbygmZGUtPmRldi0+ZGV2LCAic2V0IGxpbmsgJXNcbiIsIG1lZGlhX25hbWVbbWVkaWFdKTsKKwkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgIm1vZGUgMHgleCwgc2lhIDB4JXgsMHgleCwweCV4LDB4JXhcbiIsCisJCQkgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkJIGRyMzIoQ1NSMTMpLCBkcjMyKENTUjE0KSwgZHIzMihDU1IxNSkpOworCisJCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsCisJCQkgInNldCBtb2RlIDB4JXgsIHNldCBzaWEgMHgleCwweCV4LDB4JXhcbiIsCisJCQkgbWFjbW9kZSwgZGUtPm1lZGlhW21lZGlhXS5jc3IxMywKKwkJCSBkZS0+bWVkaWFbbWVkaWFdLmNzcjE0LCBkZS0+bWVkaWFbbWVkaWFdLmNzcjE1KTsKIAl9CiAJaWYgKG1hY21vZGUgIT0gZHIzMihNYWNNb2RlKSkKIAkJZHczMihNYWNNb2RlLCBtYWNtb2RlKTsKQEAgLTk5Miw5ICs5OTMsOCBAQAogCQkJZGVfbGlua191cChkZSk7CiAJCWVsc2UKIAkJCWlmIChuZXRpZl9tc2dfdGltZXIoZGUpKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBsaW5rIG9rLCBzdGF0dXMgJXhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sCi0JCQkJICAgICAgIHN0YXR1cyk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAorCQkJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMjIsOCArMTAyMiw4IEBACiAJYWRkX3RpbWVyKCZkZS0+bWVkaWFfdGltZXIpOwogCiAJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBsaW5rLCB0cnlpbmcgbWVkaWEgJXMsIHN0YXR1cyAleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAorCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlX29rX3RvX2FkdmVydGlzZSAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgbmV3X21lZGlhKQpAQCAtMTA3OSw5ICsxMDc5LDEwIEBACiAJCQlkZV9saW5rX3VwKGRlKTsKIAkJZWxzZQogCQkJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGxpbmsgb2ssIG1vZGUgJXggc3RhdHVzICV4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAotCQkJCSAgICAgICBkcjMyKE1hY01vZGUpLCBzdGF0dXMpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICIlcyBsaW5rIG9rLCBtb2RlICV4IHN0YXR1cyAleFxuIiwKKwkJCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAorCQkJCQkgZHIzMihNYWNNb2RlKSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE1MCw4ICsxMTUxLDggQEAKIAlhZGRfdGltZXIoJmRlLT5tZWRpYV90aW1lcik7CiAKIAlpZiAobmV0aWZfbXNnX3RpbWVyKGRlKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSwgc3RhdHVzKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAibm8gbGluaywgdHJ5aW5nIG1lZGlhICVzLCBzdGF0dXMgJXhcbiIsCisJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlX21lZGlhX2ludGVycnVwdCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgc3RhdHVzKQpAQCAtMTM3OCw4ICsxMzc5LDcgQEAKIAogCXJjID0gZGVfYWxsb2NfcmluZ3MoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByaW5nIGFsbG9jYXRpb24gZmFpbHVyZSwgZXJyPSVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCByYyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmluZyBhbGxvY2F0aW9uIGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xMzg3LDE1ICsxMzg3LDE0IEBACiAKIAlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSAlZCByZXF1ZXN0IGZhaWx1cmUsIGVycj0lZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIHJjKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJJUlEgJWQgcmVxdWVzdCBmYWlsdXJlLCBlcnI9JWRcbiIsCisJCQlkZXYtPmlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAlyYyA9IGRlX2luaXRfaHcoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoL3cgaW5pdCBmYWlsdXJlLCBlcnI9JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHJjKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJoL3cgaW5pdCBmYWlsdXJlLCBlcnI9JWRcbiIsIHJjKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwogCX0KIApAQCAtMTY2Niw4ICsxNjY1LDggQEAKIAlzdGF0dXMgPSBkcjMyKFNJQVN0YXR1cyk7CiAJZHczMihTSUFTdGF0dXMsIChzdGF0dXMgJiB+TldheVN0YXRlKSB8IE5XYXlSZXN0YXJ0KTsKIAlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBud2F5IHJlc3RhcnQsIHN0YXR1cyAleCwleFxuIiwKLQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHN0YXR1cywgZHIzMihTSUFTdGF0dXMpKTsKKwkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCisJCQkgc3RhdHVzLCBkcjMyKFNJQVN0YXR1cykpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzExLDcgKzE3MTAsNyBAQAogCQlkZS0+ZGV2LT5kZXZfYWRkcltpXSA9IHZhbHVlOwogCQl1ZGVsYXkoMSk7CiAJCWlmIChib2d1c2NudCA8PSAwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInRpbWVvdXQgcmVhZGluZyAyMTA0MCBNQUMgYWRkcmVzcyBieXRlICV1XG4iLCBpKTsKKwkJCXByX3dhcm5pbmcoUEZYICJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwgaSk7CiAJfQogfQogCkBAIC0xODMwLDkgKzE4MjksOCBAQAogCX0KIAogCWlmIChuZXRpZl9tc2dfcHJvYmUoZGUpKQotCQlwcmludGsoS0VSTl9JTkZPICJkZSVkOiBTUk9NIGxlYWYgb2Zmc2V0ICV1LCBkZWZhdWx0IG1lZGlhICVzXG4iLAotCQkgICAgICAgZGUtPmJvYXJkX2lkeCwgb2ZzLAotCQkgICAgICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0pOworCQlwcl9pbmZvKCJkZSVkOiBTUk9NIGxlYWYgb2Zmc2V0ICV1LCBkZWZhdWx0IG1lZGlhICVzXG4iLAorCQkgICAgICAgZGUtPmJvYXJkX2lkeCwgb2ZzLCBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CiAKIAkvKiBpbml0IFNJQSByZWdpc3RlciB2YWx1ZXMgdG8gZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgREVfTUFYX01FRElBOyBpKyspIHsKQEAgLTE4NzksOSArMTg3Nyw5IEBACiAJCWRlLT5tZWRpYVtpZHhdLnR5cGUgPSBpZHg7CiAKIAkJaWYgKG5ldGlmX21zZ19wcm9iZShkZSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJkZSVkOiAgIG1lZGlhIGJsb2NrICMldTogJXMiLAotCQkJICAgICAgIGRlLT5ib2FyZF9pZHgsIGksCi0JCQkgICAgICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFbaWR4XS50eXBlXSk7CisJCQlwcl9pbmZvKCJkZSVkOiAgIG1lZGlhIGJsb2NrICMldTogJXMiLAorCQkJCWRlLT5ib2FyZF9pZHgsIGksCisJCQkJbWVkaWFfbmFtZVtkZS0+bWVkaWFbaWR4XS50eXBlXSk7CiAKIAkJYnVmcCArPSBzaXplb2YgKGliLT5vcHRzKTsKIApAQCAtMTg5MywxMyArMTg5MSwxMyBAQAogCQkJCXNpemVvZihpYi0+Y3NyMTUpOwogCiAJCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKLQkJCQlwcmludGsoIiAoJXgsJXgsJXgpXG4iLAotCQkJCSAgICAgICBkZS0+bWVkaWFbaWR4XS5jc3IxMywKLQkJCQkgICAgICAgZGUtPm1lZGlhW2lkeF0uY3NyMTQsCi0JCQkJICAgICAgIGRlLT5tZWRpYVtpZHhdLmNzcjE1KTsKKwkJCQlwcl9jb250KCIgKCV4LCV4LCV4KVxuIiwKKwkJCQkJZGUtPm1lZGlhW2lkeF0uY3NyMTMsCisJCQkJCWRlLT5tZWRpYVtpZHhdLmNzcjE0LAorCQkJCQlkZS0+bWVkaWFbaWR4XS5jc3IxNSk7CiAKIAkJfSBlbHNlIGlmIChuZXRpZl9tc2dfcHJvYmUoZGUpKQotCQkJcHJpbnRrKCJcbiIpOworCQkJcHJfY29udCgiXG4iKTsKIAogCQlpZiAoYnVmcCA+ICgodm9pZCAqKSZlZV9kYXRhW0RFX0VFUFJPTV9TSVpFIC0gM10pKQogCQkJYnJlYWs7CkBAIC0yMDA1LDcgKzIwMDMsNyBAQAogCS8qIGNoZWNrIGZvciBpbnZhbGlkIElSUSB2YWx1ZSAqLwogCWlmIChwZGV2LT5pcnEgPCAyKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKKwkJcHJfZXJyKFBGWCAiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKIAkJICAgICAgIHBkZXYtPmlycSwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KQEAgLTIwMTYsMTQgKzIwMTQsMTQgQEAKIAlwY2lhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCWlmICghcGNpYWRkcikgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycihQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkgPCBERV9SRUdTX1NJWkUpIHsKIAkJcmMgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNTUlPIHJlc291cmNlICglbGx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJNTUlPIHJlc291cmNlICglbGx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAKQEAgLTIwMzEsOSArMjAyOSw5IEBACiAJcmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lhZGRyLCBERV9SRUdTX1NJWkUpOwogCWlmICghcmVncykgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVsbHhAJWx4KSBvbiBwY2kgZGV2ICVzXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAotCQkJcGNpYWRkciwgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJICAgICAgIHBjaWFkZHIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgcmVnczsKQEAgLTIwNDQsOCArMjA0Miw3IEBACiAJLyogbWFrZSBzdXJlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nICovCiAJcmMgPSBkZV9yZXNldF9tYWMoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAl9CiAKQEAgLTIwNjUsMTIgKzIwNjIsMTEgQEAKIAkJZ290byBlcnJfb3V0X2lvbWFwOwogCiAJLyogcHJpbnQgaW5mbyBhYm91dCBib2FyZCBhbmQgaW50ZXJmYWNlIGp1c3QgcmVnaXN0ZXJlZCAqLwotCXByaW50ayAoS0VSTl9JTkZPICIlczogJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRlLT5kZTIxMDQwID8gIjIxMDQwIiA6ICIyMTA0MSIsCi0JCWRldi0+YmFzZV9hZGRyLAotCQlkZXYtPmRldl9hZGRyLAotCQlkZXYtPmlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAorCQkgZGUtPmRlMjEwNDAgPyAiMjEwNDAiIDogIjIxMDQxIiwKKwkJIGRldi0+YmFzZV9hZGRyLAorCQkgZGV2LT5kZXZfYWRkciwKKwkJIGRldi0+aXJxKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCkBAIC0yMTU4LDggKzIxNTQsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlnb3RvIG91dF9hdHRhY2g7CiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIsCi0JCQlkZXYtPm5hbWUpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJZGVfaW5pdF9odyhkZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCBhODM0OWI3Li5jNGVjYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTE5NTEsOSArMTk1MSw5IEBACiBTZXRNdWx0aWNhc3RGaWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKKyAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgaW50IGksIGosIGJpdCwgYnl0ZTsKKyAgICBpbnQgaSwgYml0LCBieXRlOwogICAgIHUxNiBoYXNoY29kZTsKICAgICB1MzIgb21yLCBjcmM7CiAgICAgY2hhciAqcGE7CkBAIC0xOTYzLDEyICsxOTYzLDExIEBACiAgICAgb21yICY9IH4oT01SX1BSIHwgT01SX1BNKTsKICAgICBwYSA9IGJ1aWxkX3NldHVwX2ZyYW1lKGRldiwgQUxMKTsgICAgICAgIC8qIEJ1aWxkIHRoZSBiYXNpYyBmcmFtZSAqLwogCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDE0KSkgeworICAgIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gMTQpKSB7CiAJb21yIHw9IE9NUl9QTTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgYWxsIG11bHRpY2FzdHMgKi8KICAgICB9IGVsc2UgaWYgKGxwLT5zZXR1cF9mID09IEhBU0hfUEVSRikgeyAgIC8qIEhhc2ggRmlsdGVyaW5nICovCi0JZm9yIChpPTA7aTxkZXYtPm1jX2NvdW50O2krKykgeyAgICAgIC8qIGZvciBlYWNoIGFkZHJlc3MgaW4gdGhlIGxpc3QgKi8KLQkgICAgYWRkcnM9ZG1pLT5kbWlfYWRkcjsKLQkgICAgZG1pPWRtaS0+bmV4dDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCSAgICBhZGRycyA9IGRtaS0+ZG1pX2FkZHI7CiAJICAgIGlmICgoKmFkZHJzICYgMHgwMSkgPT0gMSkgeyAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHJzKTsKIAkJaGFzaGNvZGUgPSBjcmMgJiBIQVNIX0JJVFM7ICAvKiBoYXNoY29kZSBpcyA5IExTYiBvZiBDUkMgKi8KQEAgLTE5ODQsOSArMTk4Myw4IEBACiAJICAgIH0KIAl9CiAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJmZWN0IGZpbHRlcmluZyAqLwotCWZvciAoaj0wOyBqPGRldi0+bWNfY291bnQ7IGorKykgewotCSAgICBhZGRycz1kbWktPmRtaV9hZGRyOwotCSAgICBkbWk9ZG1pLT5uZXh0OworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CisJICAgIGFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAkgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgewogCQkqKHBhICsgKGkmMSkpID0gKmFkZHJzKys7CiAJCWlmIChpICYgMHgwMSkgcGEgKz0gNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCA2ZjQ0ZWJmLi45NWIzOGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC02MSw2ICs2MSw4IEBACiAgICAgVGVzdCBhbmQgbWFrZSBzdXJlIFBDSSBsYXRlbmN5IGlzIG5vdyBjb3JyZWN0IGZvciBhbGwgY2FzZXMuCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJImRtZmUiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM2LjQiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSIyMDAyLTAxLTE3IgpAQCAtMTQ5LDE2ICsxNTEsMTcgQEAKICNkZWZpbmUgRE1GRV9UWF9USU1FT1VUICgoMypIWikvMikJLyogdHggcGFja2V0IHRpbWUtb3V0IHRpbWUgMS41IHMiICovCiAjZGVmaW5lIERNRkVfVFhfS0lDSyAJKEhaLzIpCS8qIHR4IHBhY2tldCBLaWNrLW91dCB0aW1lIDAuNSBzIiAqLwogCi0jZGVmaW5lIERNRkVfREJVRyhkYnVnX25vdywgbXNnLCB2YWx1ZSkgXAotCWRvIHsgXAotIAkJaWYgKGRtZmVfZGVidWcgfHwgKGRidWdfbm93KSkgXAotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzICVseFxuIixcCi0gCQkJCShtc2cpLCAobG9uZykgKHZhbHVlKSk7IFwKKyNkZWZpbmUgRE1GRV9EQlVHKGRidWdfbm93LCBtc2csIHZhbHVlKQkJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAoZG1mZV9kZWJ1ZyB8fCAoZGJ1Z19ub3cpKQkJXAorCQkJcHJfZXJyKCIlcyAlbHhcbiIsCQlcCisJCQkgICAgICAgKG1zZyksIChsb25nKSAodmFsdWUpKTsJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU0hPV19NRURJQV9UWVBFKG1vZGUpIFwKLQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBDaGFuZ2UgU3BlZWQgdG8gJXNNaHogJXMgZHVwbGV4XG4iICwgXAotCQkobW9kZSAmIDEpID8gIjEwMCI6IjEwIiwgKG1vZGUgJiA0KSA/ICJmdWxsIjoiaGFsZiIpOworI2RlZmluZSBTSE9XX01FRElBX1RZUEUobW9kZSkJCQkJXAorCXByX2luZm8oIkNoYW5nZSBTcGVlZCB0byAlc01oeiAlcyBkdXBsZXhcbiIgLAlcCisJCShtb2RlICYgMSkgPyAiMTAwIjoiMTAiLAkJXAorCQkobW9kZSAmIDQpID8gImZ1bGwiOiJoYWxmIik7CiAKIAogLyogQ1I5IGRlZmluaXRpb246IFNST00vTUlJICovCkBAIC0zMjcsOCArMzMwLDggQEAKIHN0YXRpYyB2b2lkIGRtZmVfZGVzY3JpcHRvcl9pbml0KHN0cnVjdCBkbWZlX2JvYXJkX2luZm8gKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhbGxvY2F0ZV9yeF9idWZmZXIoc3RydWN0IGRtZmVfYm9hcmRfaW5mbyAqKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jcjYodTMyLCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHNlbmRfZmlsdGVyX2ZyYW1lKHN0cnVjdCBERVZJQ0UgKiAsaW50KTsKLXN0YXRpYyB2b2lkIGRtOTEzMl9pZF90YWJsZShzdHJ1Y3QgREVWSUNFICogLGludCk7CitzdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICopOworc3RhdGljIHZvaWQgZG05MTMyX2lkX3RhYmxlKHN0cnVjdCBERVZJQ0UgKik7CiBzdGF0aWMgdTE2IHBoeV9yZWFkKHVuc2lnbmVkIGxvbmcsIHU4LCB1OCwgdTMyKTsKIHN0YXRpYyB2b2lkIHBoeV93cml0ZSh1bnNpZ25lZCBsb25nLCB1OCwgdTgsIHUxNiwgdTMyKTsKIHN0YXRpYyB2b2lkIHBoeV93cml0ZV8xYml0KHVuc2lnbmVkIGxvbmcsIHUzMik7CkBAIC0zOTEsOCArMzk0LDcgQEAKIAkJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAogCQlpZiAoZHAgJiYgb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJICAgICAgICI6IHNraXBwaW5nIG9uLWJvYXJkIERNOTEweCAodXNlIHR1bGlwKVxuIik7CisJCQlwcl9pbmZvKCJza2lwcGluZyBvbi1ib2FyZCBETTkxMHggKHVzZSB0dWxpcClcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC00MDUsOCArNDA3LDcgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJIjogMzItYml0IFBDSSBETUEgbm90IGF2YWlsYWJsZS5cbiIpOworCQlwcl93YXJuaW5nKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQpAQCAtNDE3LDEzICs0MTgsMTMgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogSS9PIGJhc2UgaXMgemVyb1xuIik7CisJCXByX2VycigiSS9PIGJhc2UgaXMgemVyb1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KIAogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIDwgKENIS19JT19TSVpFKHBkZXYpKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOworCQlwcl9lcnIoIkFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CkBAIC00MzgsNyArNDM5LDcgQEAKICNlbmRpZgogCiAJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgcmVnaW9uc1xuIik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgUENJIHJlZ2lvbnNcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CkBAIC00OTcsMTIgKzQ5OCw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWVfYnVmOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERhdmljb20gRE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWQuXG4iLAotCSAgICAgICBkZXYtPm5hbWUsCi0JICAgICAgIGVudC0+ZHJpdmVyX2RhdGEgPj4gMTYsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLAotCSAgICAgICBkZXYtPmRldl9hZGRyLAotCSAgICAgICBkZXYtPmlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGF2aWNvbSBETSUwNGx4IGF0IHBjaSVzLCAlcE0sIGlycSAlZFxuIiwKKwkJIGVudC0+ZHJpdmVyX2RhdGEgPj4gMTYsCisJCSBwY2lfbmFtZShwZGV2KSwgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEpOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTY2MCw5ICs2NTgsOSBAQAogCiAJLyogU2VuZCBzZXR1cCBmcmFtZSAqLwogCWlmIChkYi0+Y2hpcF9pZCA9PSBQQ0lfRE05MTMyX0lEKQotCQlkbTkxMzJfaWRfdGFibGUoZGV2LCBkZXYtPm1jX2NvdW50KTsJLyogRE05MTMyICovCisJCWRtOTEzMl9pZF90YWJsZShkZXYpOwkvKiBETTkxMzIgKi8KIAllbHNlCi0JCXNlbmRfZmlsdGVyX2ZyYW1lKGRldiwgZGV2LT5tY19jb3VudCk7CS8qIERNOTEwMi9ETTkxMDJBICovCisJCXNlbmRfZmlsdGVyX2ZyYW1lKGRldik7CS8qIERNOTEwMi9ETTkxMDJBICovCiAKIAkvKiBJbml0IENSNywgaW50ZXJydXB0IGFjdGl2ZSBiaXQgKi8KIAlkYi0+Y3I3X2RhdGEgPSBDUjdfREVGQVVMVDsKQEAgLTY5Niw3ICs2OTQsNyBAQAogCiAJLyogVG9vIGxhcmdlIHBhY2tldCBjaGVjayAqLwogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKKwkJcHJfZXJyKCJiaWcgcGFja2V0ID0gJWRcbiIsICh1MTYpc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQpAQCAtNzA2LDggKzcwNCw3IEBACiAJLyogTm8gVHggcmVzb3VyY2UgY2hlY2ssIGl0IG5ldmVyIGhhcHBlbiBucm9tYWxseSAqLwogCWlmIChkYi0+dHhfcXVldWVfY250ID49IFRYX0ZSRUVfREVTQ19DTlQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlICVsZFxuIiwKLQkJICAgICAgIGRiLT50eF9xdWV1ZV9jbnQpOworCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3F1ZXVlX2NudCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTc3OSwxMiArNzc2LDExIEBACiAKICNpZiAwCiAJLyogc2hvdyBzdGF0aXN0aWMgY291bnRlciAqLwotCXByaW50ayhEUlZfTkFNRSAiOiBGVTolbHggRUM6JWx4IExDOiVseCBOQzolbHgiCi0JCSIgTE9DOiVseCBUWEpUOiVseCBSRVNFVDolbHggUkNSODolbHggRkFMOiVseCBUVDolbHhcbiIsCi0JCWRiLT50eF9maWZvX3VuZGVycnVuLCBkYi0+dHhfZXhjZXNzaXZlX2NvbGxpc2lvbiwKLQkJZGItPnR4X2xhdGVfY29sbGlzaW9uLCBkYi0+dHhfbm9fY2FycmllciwgZGItPnR4X2xvc3NfY2FycmllciwKLQkJZGItPnR4X2phYmJlcl90aW1lb3V0LCBkYi0+cmVzZXRfY291bnQsIGRiLT5yZXNldF9jcjgsCi0JCWRiLT5yZXNldF9mYXRhbCwgZGItPnJlc2V0X1RYdGltZW91dCk7CisJcHJpbnRrKCJGVTolbHggRUM6JWx4IExDOiVseCBOQzolbHggTE9DOiVseCBUWEpUOiVseCBSRVNFVDolbHggUkNSODolbHggRkFMOiVseCBUVDolbHhcbiIsCisJICAgICAgIGRiLT50eF9maWZvX3VuZGVycnVuLCBkYi0+dHhfZXhjZXNzaXZlX2NvbGxpc2lvbiwKKwkgICAgICAgZGItPnR4X2xhdGVfY29sbGlzaW9uLCBkYi0+dHhfbm9fY2FycmllciwgZGItPnR4X2xvc3NfY2FycmllciwKKwkgICAgICAgZGItPnR4X2phYmJlcl90aW1lb3V0LCBkYi0+cmVzZXRfY291bnQsIGRiLT5yZXNldF9jcjgsCisJICAgICAgIGRiLT5yZXNldF9mYXRhbCwgZGItPnJlc2V0X1RYdGltZW91dCk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtODg1LDcgKzg4MSw3IEBACiAJdHhwdHIgPSBkYi0+dHhfcmVtb3ZlX3B0cjsKIAl3aGlsZShkYi0+dHhfcGFja2V0X2NudCkgewogCQl0ZGVzMCA9IGxlMzJfdG9fY3B1KHR4cHRyLT50ZGVzMCk7Ci0JCS8qIHByaW50ayhEUlZfTkFNRSAiOiB0ZGVzMD0leFxuIiwgdGRlczApOyAqLworCQlwcl9kZWJ1ZygidGRlczA9JXhcbiIsIHRkZXMwKTsKIAkJaWYgKHRkZXMwICYgMHg4MDAwMDAwMCkKIAkJCWJyZWFrOwogCkBAIC04OTUsNyArODkxLDcgQEAKIAogCQkvKiBUcmFuc21pdCBzdGF0aXN0aWMgY291bnRlciAqLwogCQlpZiAoIHRkZXMwICE9IDB4N2ZmZmZmZmYgKSB7Ci0JCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KKwkJCXByX2RlYnVnKCJ0ZGVzMD0leFxuIiwgdGRlczApOwogCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0ZGVzMCA+PiAzKSAmIDB4ZjsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGUzMl90b19jcHUodHhwdHItPnRkZXMxKSAmIDB4N2ZmOwogCQkJaWYgKHRkZXMwICYgVERFUzBfRVJSX01BU0spIHsKQEAgLTk5Miw3ICs5ODgsNyBAQAogCQkJLyogZXJyb3Igc3VtbWFyeSBiaXQgY2hlY2sgKi8KIAkJCWlmIChyZGVzMCAmIDB4ODAwMCkgewogCQkJCS8qIFRoaXMgaXMgYSBlcnJvciBwYWNrZXQgKi8KLQkJCQkvL3ByaW50ayhEUlZfTkFNRSAiOiByZGVzMDogJWx4XG4iLCByZGVzMCk7CisJCQkJcHJfZGVidWcoInJkZXMwOiAleFxuIiwgcmRlczApOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKHJkZXMwICYgMSkKIAkJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwpAQCAtMTA1Niw2ICsxMDUyLDcgQEAKIHsKIAlzdHJ1Y3QgZG1mZV9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCURNRkVfREJVRygwLCAiZG1mZV9zZXRfZmlsdGVyX21vZGUoKSIsIDApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwpAQCAtMTA2OCwxOSArMTA2NSwxOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IERNRkVfTUFYX01VTFRJQ0FTVCkgewotCQlETUZFX0RCVUcoMCwgIlBhc3MgYWxsIG11bHRpY2FzdCBhZGRyZXNzIiwgZGV2LT5tY19jb3VudCk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbWNfY291bnQgPiBETUZFX01BWF9NVUxUSUNBU1QpIHsKKwkJRE1GRV9EQlVHKDAsICJQYXNzIGFsbCBtdWx0aWNhc3QgYWRkcmVzcyIsIG1jX2NvdW50KTsKIAkJZGItPmNyNl9kYXRhICY9IH4oQ1I2X1BNIHwgQ1I2X1BCRik7CiAJCWRiLT5jcjZfZGF0YSB8PSBDUjZfUEFNOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0JRE1GRV9EQlVHKDAsICJTZXQgbXVsdGljYXN0IGFkZHJlc3MiLCBkZXYtPm1jX2NvdW50KTsKKwlETUZFX0RCVUcoMCwgIlNldCBtdWx0aWNhc3QgYWRkcmVzcyIsIG1jX2NvdW50KTsKIAlpZiAoZGItPmNoaXBfaWQgPT0gUENJX0RNOTEzMl9JRCkKLQkJZG05MTMyX2lkX3RhYmxlKGRldiwgZGV2LT5tY19jb3VudCk7CS8qIERNOTEzMiAqLworCQlkbTkxMzJfaWRfdGFibGUoZGV2KTsJLyogRE05MTMyICovCiAJZWxzZQotCQlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIGRldi0+bWNfY291bnQpOyAJLyogRE05MTAyL0RNOTEwMkEgKi8KKwkJc2VuZF9maWx0ZXJfZnJhbWUoZGV2KTsJLyogRE05MTAyL0RNOTEwMkEgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0xMTkxLDggKzExODgsNyBAQAogCQlpZiAoIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIERNRkVfVFhfVElNRU9VVCkgKSB7CiAJCQlkYi0+cmVzZXRfVFh0aW1lb3V0Kys7CiAJCQlkYi0+d2FpdF9yZXNldCA9IDE7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHggdGltZW91dCAtIHJlc2V0dGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVHggdGltZW91dCAtIHJlc2V0dGluZ1xuIik7CiAJCX0KIAl9CiAKQEAgLTE0NTYsNyArMTQ1Miw3IEBACiAgKglUaGlzIHNldHVwIGZyYW1lIGluaXRpbGl6ZSBETTkxMFggYWRkcmVzcyBmaWx0ZXIgbW9kZQogKi8KIAotc3RhdGljIHZvaWQgZG05MTMyX2lkX3RhYmxlKHN0cnVjdCBERVZJQ0UgKmRldiwgaW50IG1jX2NudCkKK3N0YXRpYyB2b2lkIGRtOTEzMl9pZF90YWJsZShzdHJ1Y3QgREVWSUNFICpkZXYpCiB7CiAJc3RydWN0IGRldl9tY19saXN0ICptY3B0cjsKIAl1MTYgKiBhZGRycHRyOwpAQCAtMTQ3NiwxNSArMTQ3MiwxNCBAQAogCWlvYWRkciArPSA0OwogCiAJLyogQ2xlYXIgSGFzaCBUYWJsZSAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWhhc2hfdGFibGVbaV0gPSAweDA7CisJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CiAKIAkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwogCWhhc2hfdGFibGVbM10gPSAweDgwMDA7CiAKIAkvKiB0aGUgbXVsdGljYXN0IGFkZHJlc3MgaW4gSGFzaCBUYWJsZSA6IDY0IGJpdHMgKi8KLQlmb3IgKG1jcHRyID0gZGV2LT5tY19saXN0LCBpID0gMDsgaSA8IG1jX2NudDsgaSsrLCBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCWhhc2hfdmFsID0gY2FsX0NSQyggKGNoYXIgKikgbWNwdHItPmRtaV9hZGRyLCA2LCAwKSAmIDB4M2Y7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNwdHIsIGRldikgeworCQloYXNoX3ZhbCA9IGNhbF9DUkMoKGNoYXIgKikgbWNwdHItPmRtaV9hZGRyLCA2LCAwKSAmIDB4M2Y7CiAJCWhhc2hfdGFibGVbaGFzaF92YWwgLyAxNl0gfD0gKHUxNikgMSA8PCAoaGFzaF92YWwgJSAxNik7CiAJfQogCkBAIC0xNDk5LDcgKzE0OTQsNyBAQAogICoJVGhpcyBzZXR1cCBmcmFtZSBpbml0aWxpemUgRE05MTBYIGFkZHJlc3MgZmlsdGVyIG1vZGUKICAqLwogCi1zdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICpkZXYsIGludCBtY19jbnQpCitzdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICpkZXYpCiB7CiAJc3RydWN0IGRtZmVfYm9hcmRfaW5mbyAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHI7CkBAIC0xNTI1LDE0ICsxNTIwLDE0IEBACiAJKnN1cHRyKysgPSAweGZmZmY7CiAKIAkvKiBmaXQgdGhlIG11bHRpY2FzdCBhZGRyZXNzICovCi0JZm9yIChtY3B0ciA9IGRldi0+bWNfbGlzdCwgaSA9IDA7IGkgPCBtY19jbnQ7IGkrKywgbWNwdHIgPSBtY3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jcHRyLCBkZXYpIHsKIAkJYWRkcnB0ciA9ICh1MTYgKikgbWNwdHItPmRtaV9hZGRyOwogCQkqc3VwdHIrKyA9IGFkZHJwdHJbMF07CiAJCSpzdXB0cisrID0gYWRkcnB0clsxXTsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzJdOwogCX0KIAotCWZvciAoOyBpPDE0OyBpKyspIHsKKwlmb3IgKGkgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsgaSA8IDE0OyBpKyspIHsKIAkJKnN1cHRyKysgPSAweGZmZmY7CiAJCSpzdXB0cisrID0gMHhmZmZmOwogCQkqc3VwdHIrKyA9IDB4ZmZmZjsKQEAgLTE2NDYsNyArMTY0MSw3IEBACiAJCWVsc2UgCQkJCS8qIERNOTEwMi9ETTkxMDJBICovCiAJCQlwaHlfbW9kZSA9IHBoeV9yZWFkKGRiLT5pb2FkZHIsCiAJCQkJICAgIGRiLT5waHlfYWRkciwgMTcsIGRiLT5jaGlwX2lkKSAmIDB4ZjAwMDsKLQkJLyogcHJpbnRrKERSVl9OQU1FICI6IFBoeV9tb2RlICV4ICIscGh5X21vZGUpOyAqLworCQlwcl9kZWJ1ZygiUGh5X21vZGUgJXhcbiIsIHBoeV9tb2RlKTsKIAkJc3dpdGNoIChwaHlfbW9kZSkgewogCQljYXNlIDB4MTAwMDogZGItPm9wX21vZGUgPSBETUZFXzEwTUhGOyBicmVhazsKIAkJY2FzZSAweDIwMDA6IGRiLT5vcF9tb2RlID0gRE1GRV8xME1GRDsgYnJlYWs7CkBAIC0yMDg5LDcgKzIwODQsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRtZmVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRtZmVfcGNpX3RibCkgPSB7CiAJeyAweDEyODIsIDB4OTEzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUENJX0RNOTEzMl9JRCB9LAogCXsgMHgxMjgyLCAweDkxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9ETTkxMDJfSUQgfSwKIAl7IDB4MTI4MiwgMHg5MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBQQ0lfRE05MTAwX0lEIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCmluZGV4IDg4OWY1N2EuLjkzZjRlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCkBAIC0xNjEsMTUgKzE2MSwxNSBAQAogCQlpZiAoZWVfZGF0YVswXSA9PSAweGZmKSB7CiAJCQlpZiAobGFzdF9tZWRpYXRhYmxlKSB7CiAJCQkJY29udHJvbGxlcl9pbmRleCsrOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgQ29udHJvbGxlciAlZCBvZiBtdWx0aXBvcnQgYm9hcmQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGNvbnRyb2xsZXJfaW5kZXgpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJDb250cm9sbGVyICVkIG9mIG11bHRpcG9ydCBib2FyZFxuIiwKKwkJCQkJIGNvbnRyb2xsZXJfaW5kZXgpOwogCQkJCXRwLT5tdGFibGUgPSBsYXN0X21lZGlhdGFibGU7CiAJCQkJZWVfZGF0YSA9IGxhc3RfZWVfZGF0YTsKIAkJCQlnb3RvIHN1YnNlcXVlbnRfYm9hcmQ7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogIE1pc3NpbmcgRUVQUk9NLCB0aGlzIGludGVyZmFjZSBtYXkgIgotCQkJCQkgICAibm90IHdvcmsgY29ycmVjdGx5IVxuIiwKLQkJCSAgIGRldi0+bmFtZSk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk1pc3NpbmcgRUVQUk9NLCB0aGlzIGludGVyZmFjZSBtYXkgbm90IHdvcmsgY29ycmVjdGx5IVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkgIC8qIERvIGEgZml4LXVwIGJhc2VkIG9uIHRoZSB2ZW5kb3IgaGFsZiBvZiB0aGUgc3RhdGlvbiBhZGRyZXNzIHByZWZpeC4gKi8KQEAgLTE4MSwxNiArMTgxLDE1IEBACiAJCQkgIGkrKzsJCQkvKiBBbiBBY2N0b24gRU4xMjA3LCBub3QgYW4gb3V0bGF3IE1heHRlY2guICovCiAJCSAgbWVtY3B5KGVlX2RhdGEgKyAyNiwgZWVwcm9tX2ZpeHVwc1tpXS5uZXd0YWJsZSwKIAkJCQkgc2l6ZW9mKGVlcHJvbV9maXh1cHNbaV0ubmV3dGFibGUpKTsKLQkJICBwcmludGsoS0VSTl9JTkZPICIlczogT2xkIGZvcm1hdCBFRVBST00gb24gJyVzJyBib2FyZC4gIFVzaW5nIgotCQkJCSAiIHN1YnN0aXR1dGUgbWVkaWEgY29udHJvbCBpbmZvLlxuIiwKLQkJCQkgZGV2LT5uYW1lLCBlZXByb21fZml4dXBzW2ldLm5hbWUpOworCQkgIGRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAgICJPbGQgZm9ybWF0IEVFUFJPTSBvbiAnJXMnIGJvYXJkLiAgVXNpbmcgc3Vic3RpdHV0ZSBtZWRpYSBjb250cm9sIGluZm9cbiIsCisJCQkgICBlZXByb21fZml4dXBzW2ldLm5hbWUpOwogCQkgIGJyZWFrOwogCQl9CiAJICB9CiAJICBpZiAoZWVwcm9tX2ZpeHVwc1tpXS5uYW1lID09IE5VTEwpIHsgLyogTm8gZml4dXAgZm91bmQuICovCi0JCSAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9sZCBzdHlsZSBFRVBST00gd2l0aCBubyBtZWRpYSBzZWxlY3Rpb24gIgotCQkJCSAiaW5mb3JtYXRpb24uXG4iLAotCQkJICAgZGV2LT5uYW1lKTsKKwkJICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgICAiT2xkIHN0eWxlIEVFUFJPTSB3aXRoIG5vIG1lZGlhIHNlbGVjdGlvbiBpbmZvcm1hdGlvblxuIik7CiAJCXJldHVybjsKIAkgIH0KIAl9CkBAIC0yMTgsNyArMjE3LDggQEAKIAkgICAgICAgIC8qIHRoZXJlIGlzIG5vIHBoeSBpbmZvcm1hdGlvbiwgZG9uJ3QgZXZlbiB0cnkgdG8gYnVpbGQgbXRhYmxlICovCiAJICAgICAgICBpZiAoY291bnQgPT0gMCkgewogCQkJaWYgKHR1bGlwX2RlYnVnID4gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gcGh5IGluZm8sIGFib3J0aW5nIG10YWJsZSBidWlsZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJCSAibm8gcGh5IGluZm8sIGFib3J0aW5nIG10YWJsZSBidWlsZFxuIik7CiAJCSAgICAgICAgcmV0dXJuOwogCQl9CiAKQEAgLTIzNCw4ICsyMzQsOCBAQAogCQltdGFibGUtPmhhc19ub25taWkgPSBtdGFibGUtPmhhc19taWkgPSBtdGFibGUtPmhhc19yZXNldCA9IDA7CiAJCW10YWJsZS0+Y3NyMTVkaXIgPSBtdGFibGUtPmNzcjE1dmFsID0gMDsKIAotCQlwcmludGsoS0VSTl9JTkZPICIlczogIEVFUFJPTSBkZWZhdWx0IG1lZGlhIHR5cGUgJXMuXG4iLCBkZXYtPm5hbWUsCi0JCQkgICBtZWRpYSAmIDB4MDgwMCA/ICJBdXRvc2Vuc2UiIDogbWVkaWFuYW1lW21lZGlhICYgTUVESUFfTUFTS10pOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJFRVBST00gZGVmYXVsdCBtZWRpYSB0eXBlICVzXG4iLAorCQkJIG1lZGlhICYgMHgwODAwID8gIkF1dG9zZW5zZSIgOiBtZWRpYW5hbWVbbWVkaWEgJiBNRURJQV9NQVNLXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3QgbWVkaWFsZWFmICpsZWFmID0gJm10YWJsZS0+bWxlYWZbaV07CiAKQEAgLTI5OCwxNiArMjk4LDE3IEBACiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxICAmJiAgbGVhZi0+bWVkaWEgPT0gMTEpIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpicCA9IGxlYWYtPmxlYWZkYXRhOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgTUlJIGludGVyZmFjZSBQSFkgJWQsIHNldHVwL3Jlc2V0ICIKLQkJCQkJICAgInNlcXVlbmNlcyAlZC8lZCBsb25nLCBjYXBhYmlsaXRpZXMgJTIuMnggJTIuMnguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGJwWzBdLCBicFsxXSwgYnBbMiArIGJwWzFdKjJdLAotCQkJCQkgICBicFs1ICsgYnBbMiArIGJwWzFdKjJdKjJdLCBicFs0ICsgYnBbMiArIGJwWzFdKjJdKjJdKTsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAiTUlJIGludGVyZmFjZSBQSFkgJWQsIHNldHVwL3Jlc2V0IHNlcXVlbmNlcyAlZC8lZCBsb25nLCBjYXBhYmlsaXRpZXMgJTAyeCAlMDJ4XG4iLAorCQkJCQkgYnBbMF0sIGJwWzFdLCBicFsyICsgYnBbMV0qMl0sCisJCQkJCSBicFs1ICsgYnBbMiArIGJwWzFdKjJdKjJdLAorCQkJCQkgYnBbNCArIGJwWzIgKyBicFsxXSoyXSoyXSk7CiAJCQl9Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogIEluZGV4ICMlZCAtIE1lZGlhICVzICgjJWQpIGRlc2NyaWJlZCAiCi0JCQkJICAgImJ5IGEgJXMgKCVkKSBibG9jay5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBpLCBtZWRpYW5hbWVbbGVhZi0+bWVkaWEgJiAxNV0sIGxlYWYtPm1lZGlhLAotCQkJCSAgIGxlYWYtPnR5cGUgPCBBUlJBWV9TSVpFKGJsb2NrX25hbWUpID8gYmxvY2tfbmFtZVtsZWFmLT50eXBlXSA6ICI8dW5rbm93bj4iLAotCQkJCSAgIGxlYWYtPnR5cGUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSAiSW5kZXggIyVkIC0gTWVkaWEgJXMgKCMlZCkgZGVzY3JpYmVkIGJ5IGEgJXMgKCVkKSBibG9ja1xuIiwKKwkJCQkgaSwgbWVkaWFuYW1lW2xlYWYtPm1lZGlhICYgMTVdLCBsZWFmLT5tZWRpYSwKKwkJCQkgbGVhZi0+dHlwZSA8IEFSUkFZX1NJWkUoYmxvY2tfbmFtZSkgPyBibG9ja19uYW1lW2xlYWYtPnR5cGVdIDogIjx1bmtub3duPiIsCisJCQkJIGxlYWYtPnR5cGUpOwogCQl9CiAJCWlmIChuZXdfYWR2ZXJ0aXNlKQogCQkJdHAtPnN5bV9hZHZlcnRpc2UgPSBuZXdfYWR2ZXJ0aXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCAyZThlOGVlLi4xZmFmN2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTI1LDEyICsxMjUsMTIgQEAKICNlbmRpZgogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsIGVudHJ5LAotCQkJICAgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJICAgICAgIGVudHJ5LCB0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAogICAgICAgIGRvIHsKIAkJaWYgKGlvcmVhZDMyKHRwLT5iYXNlX2FkZHIgKyBDU1I1KSA9PSAweGZmZmZmZmZmKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHR1bGlwX3BvbGwoKSwgaGFyZHdhcmUgZGlzYXBwZWFyZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcG9sbCgpLCBoYXJkd2FyZSBkaXNhcHBlYXJlZFxuIik7CiAJCQlicmVhazsKIAkJfQogICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgY3VycmVudCBSWCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOwogCiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQpAQCAtMTc3LDE1ICsxNzcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICU4Ljh4IVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCQkJIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJCQkJc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCSAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCB8fApAQCAtMjI2LDEyICsyMjYsMTEgQEAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJXM6IEludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG8gbm90IG1hdGNoIGluIHR1bGlwX3J4OiAlMDh4IHZzLiAlMDhsbHggJXAgLyAlcC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5oZWFkLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkgICAgICAgIkludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyBkbyBub3QgbWF0Y2ggaW4gdHVsaXBfcng6ICUwOHggdnMuICUwOGxseCAlcCAvICVwXG4iLAorCQkJCQkJICAgICAgIGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5idWZmZXIxKSwKKwkJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAorCQkJCQkJICAgICAgIHNrYi0+aGVhZCwgdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKIApAQCAtMzY1LDE2ICszNjQsMTYgQEAKIAlpbnQgcmVjZWl2ZWQgPSAwOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsIGVudHJ5LAotCQkJICAgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJICAgICAgIGVudHJ5LCB0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAl3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogCQlzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJCXNob3J0IHBrdF9sZW47CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgZW50cnksIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKIApAQCAtNDAyLDE2ICs0MDEsMTYgQEAKIAkJCQkvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgIgotCQkJCQkJCSAgICJzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlOC44eCFcbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAorCQkJCQkJCSBzdGF0dXMpOwogCQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCXRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJaWYgKHBrdF9sZW4gPiAxNTE4IHx8CiAJCQkJICAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKQEAgLTQ1MCwxMiArNDQ5LDExIEBACiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCQlpZiAodHAtPnJ4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcgIT0KIAkJCQkgICAgbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyAiCi0JCQkJCSAgICAgICAiZG8gbm90IG1hdGNoIGluIHR1bGlwX3J4OiAlMDh4IHZzLiAlTHggJXAgLyAlcC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJCSAgICAgICBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCi0JCQkJCSAgICAgICAobG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAotCQkJCQkgICAgICAgc2tiLT5oZWFkLCB0ZW1wKTsKKwkJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkiSW50ZXJuYWwgZmF1bHQ6IFRoZSBza2J1ZmYgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaCBpbiB0dWxpcF9yeDogJTA4eCB2cy4gJUx4ICVwIC8gJXBcbiIsCisJCQkJCQlsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCisJCQkJCQkobG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAorCQkJCQkJc2tiLT5oZWFkLCB0ZW1wKTsKIAkJCQl9CiAjZW5kaWYKIApAQCAtNTY5LDcgKzU2Nyw3IEBACiAjZW5kaWYgLyogIENPTkZJR19UVUxJUF9OQVBJICovCiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3I1PSUjOC44eCBuZXcgY3NyNT0lIzguOHguXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnRlcnJ1cHQgIGNzcjU9JSM4Ljh4IG5ldyBjc3I1PSUjOC44eFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKIAogCkBAIC02MDEsOCArNTk5LDggQEAKIAkJCQkJLyogVGhlcmUgd2FzIGFuIG1ham9yIGVycm9yLCBsb2cgaXQuICovCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlOC44eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogI2VuZGlmCiAJCQkJCXRwLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCQkJaWYgKHN0YXR1cyAmIDB4NDEwNCkgdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC02MzEsOCArNjI5LDkgQEAKIAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAodHAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCSJPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWRcbiIsCisJCQkJCWRpcnR5X3R4LCB0cC0+Y3VyX3R4KTsKIAkJCQlkaXJ0eV90eCArPSBUWF9SSU5HX1NJWkU7CiAJCQl9CiAjZW5kaWYKQEAgLTY0Myw5ICs2NDIsMTAgQEAKIAkJCXRwLT5kaXJ0eV90eCA9IGRpcnR5X3R4OwogCQkJaWYgKGNzcjUgJiBUeERpZWQpIHsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhlIHRyYW5zbWl0dGVyIHN0b3BwZWQuIgotCQkJCQkJICAgIiAgQ1NSNSBpcyAleCwgQ1NSNiAleCwgbmV3IENTUjYgJXguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBjc3I1LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgdHAtPmNzcjYpOworCQkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJCQkgIlRoZSB0cmFuc21pdHRlciBzdG9wcGVkLiAgQ1NSNSBpcyAleCwgQ1NSNiAleCwgbmV3IENTUjYgJXhcbiIsCisJCQkJCQkgY3NyNSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCisJCQkJCQkgdHAtPmNzcjYpOwogCQkJCXR1bGlwX3Jlc3RhcnRfcnh0eCh0cCk7CiAJCQl9CiAJCQlzcGluX3VubG9jaygmdHAtPmxvY2spOwpAQCAtNjk2LDggKzY5Niw5IEBACiAJCQkJICogdG8gdGhlIDIxMTQyLzMgZG9jcyB0aGF0IGlzKS4KIAkJCQkgKiAgIC0tIHJtawogCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICglbHUpIFN5c3RlbSBFcnJvciBvY2N1cnJlZCAoJWQpXG4iLAotCQkJCQlkZXYtPm5hbWUsIHRwLT5uaXIsIGVycm9yKTsKKwkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJIiglbHUpIFN5c3RlbSBFcnJvciBvY2N1cnJlZCAoJWQpXG4iLAorCQkJCQl0cC0+bmlyLCBlcnJvcik7CiAJCQl9CiAJCQkvKiBDbGVhciBhbGwgZXJyb3Igc291cmNlcywgaW5jbHVkZWQgdW5kb2N1bWVudGVkIG9uZXMhICovCiAJCQlpb3dyaXRlMzIoMHgwODAwZjdiYSwgaW9hZGRyICsgQ1NSNSk7CkBAIC03MDYsMTYgKzcwNywxNyBAQAogCQlpZiAoY3NyNSAmIFRpbWVySW50KSB7CiAKIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmUtZW5hYmxpbmcgaW50ZXJydXB0cywgJTguOHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGNzcjUpOworCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkiUmUtZW5hYmxpbmcgaW50ZXJydXB0cywgJTA4eFxuIiwKKwkJCQkJY3NyNSk7CiAJCQlpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycywgaW9hZGRyICsgQ1NSNyk7CiAJCQl0cC0+dHRpbWVyID0gMDsKIAkJCW9pKys7CiAJCX0KIAkJaWYgKHR4ID4gbWF4dHggfHwgcnggPiBtYXhyeCB8fCBvaSA+IG1heG9pKSB7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUb28gbXVjaCB3b3JrIGR1cmluZyBhbiBpbnRlcnJ1cHQsICIKLQkJCQkJICAgImNzcjU9MHglOC44eC4gKCVsdSkgKCVkLCVkLCVkKVxuIiwgZGV2LT5uYW1lLCBjc3I1LCB0cC0+bmlyLCB0eCwgcngsIG9pKTsKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJUb28gbXVjaCB3b3JrIGR1cmluZyBhbiBpbnRlcnJ1cHQsIGNzcjU9MHglMDh4LiAoJWx1KSAoJWQsJWQsJWQpXG4iLAorCQkJCQkgY3NyNSwgdHAtPm5pciwgdHgsIHJ4LCBvaSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaW93cml0ZTMyKDB4ODAwMWZmZmYsIGlvYWRkciArIENTUjUpOwpAQCAtNzY0LDE0ICs3NjYsMTggQEAKIAllbnRyeSA9IHRwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRTsKIAlpZiAodHAtPnJ4X2J1ZmZlcnNbZW50cnldLnNrYiA9PSBOVUxMKSB7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSAodHAtPmN1cl9yeCA9ICV1LCB0dGltZXIgPSAlZCwgcnggPSAlZCkgZ28vc3RheSBpbiBzdXNwZW5kIG1vZGVcbiIsIGRldi0+bmFtZSwgdHAtPm5pciwgdHAtPmN1cl9yeCwgdHAtPnR0aW1lciwgcngpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSAodHAtPmN1cl9yeCA9ICV1LCB0dGltZXIgPSAlZCwgcnggPSAlZCkgZ28vc3RheSBpbiBzdXNwZW5kIG1vZGVcbiIsCisJCQkJIHRwLT5uaXIsIHRwLT5jdXJfcngsIHRwLT50dGltZXIsIHJ4KTsKIAkJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7CiAJCQlpb3dyaXRlMzIoMHgwMCwgaW9hZGRyICsgQ1NSNyk7CiAJCQltb2RfdGltZXIoJnRwLT50aW1lciwgUlVOX0FUKEhaLzUwKSk7CiAJCX0gZWxzZSB7CiAJCQlpZiAodHAtPnR0aW1lciA9PSAwIHx8IChpb3JlYWQzMihpb2FkZHIgKyBDU1IxMSkgJiAweGZmZmYpID09IDApIHsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSBzZXQgdGltZXJcbiIsIGRldi0+bmFtZSwgdHAtPm5pcik7CisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCSAiaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSBzZXQgdGltZXJcbiIsCisJCQkJCQkgdHAtPm5pcik7CiAJCQkJaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMgfCBUaW1lckludCwKIAkJCQkJaW9hZGRyICsgQ1NSNyk7CiAJCQkJaW93cml0ZTMyKFRpbWVySW50LCBpb2FkZHIgKyBDU1I1KTsKQEAgLTc4Nyw4ICs3OTMsOCBAQAogCX0KIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjU9JSM0LjR4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBjc3I1PSUjMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwppbmRleCBkOGZkYTgzLi42OGIxNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKQEAgLTE4Miw5ICsxODIsOCBAQAogCQlzd2l0Y2ggKG1sZWFmLT50eXBlKSB7CiAJCWNhc2UgMDoJCQkJCS8qIDIxMTQwIG5vbi1NSUkgeGN2ci4gKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBhIDIxMTQwIG5vbi1NSUkgdHJhbnNjZWl2ZXIiCi0JCQkJCSAgICIgd2l0aCBjb250cm9sIHNldHRpbmcgJTIuMnguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBbMV0pOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVXNpbmcgYSAyMTE0MCBub24tTUlJIHRyYW5zY2VpdmVyIHdpdGggY29udHJvbCBzZXR0aW5nICUwMnhcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgcFsxXSk7CiAJCQlkZXYtPmlmX3BvcnQgPSBwWzBdOwogCQkJaWYgKHN0YXJ0dXApCiAJCQkJaW93cml0ZTMyKG10YWJsZS0+Y3NyMTJkaXIgfCAweDEwMCwgaW9hZGRyICsgQ1NSMTIpOwpAQCAtMjA1LDE1ICsyMDQsMTUgQEAKIAkJCQlzdHJ1Y3QgbWVkaWFsZWFmICpybGVhZiA9ICZtdGFibGUtPm1sZWFmW210YWJsZS0+aGFzX3Jlc2V0XTsKIAkJCQl1bnNpZ25lZCBjaGFyICpyc3QgPSBybGVhZi0+bGVhZmRhdGE7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyLlxuIiwKLQkJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQkJZm9yIChpID0gMDsgaSA8IHJzdFswXTsgaSsrKQogCQkJCQlpb3dyaXRlMzIoZ2V0X3UxNihyc3QgKyAxICsgKGk8PDEpKSA8PCAxNiwgaW9hZGRyICsgQ1NSMTUpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDIxMTQzIG5vbi1NSUkgJXMgdHJhbnNjZWl2ZXIgY29udHJvbCAiCi0JCQkJCSAgICIlNC40eC8lNC40eC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHNldHVwWzBdLCBzZXR1cFsxXSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAyMTE0MyBub24tTUlJICVzIHRyYW5zY2VpdmVyIGNvbnRyb2wgJTA0eC8lMDR4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAgICAgICBzZXR1cFswXSwgc2V0dXBbMV0pOwogCQkJaWYgKHBbMF0gJiAweDQwKSB7CS8qIFNJQSAoQ1NSMTMtMTUpIHNldHVwIHZhbHVlcyBhcmUgcHJvdmlkZWQuICovCiAJCQkJY3NyMTN2YWwgPSBzZXR1cFswXTsKIAkJCQljc3IxNHZhbCA9IHNldHVwWzFdOwpAQCAtMjQwLDggKzIzOSw4IEBACiAJCQkJaWYgKHN0YXJ0dXApIGlvd3JpdGUzMihjc3IxM3ZhbCwgaW9hZGRyICsgQ1NSMTMpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjE1IHRvICU4Ljh4LyU4Ljh4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBjc3IxNWRpciwgY3NyMTV2YWwpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFNldHRpbmcgQ1NSMTUgdG8gJTA4eC8lMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjE1ZGlyLCBjc3IxNXZhbCk7CiAJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkKIAkJCQluZXdfY3NyNiA9IDB4ODIwMjAwMDAgfCAoKHNldHVwWzJdICYgMHg3MSkgPDwgMTgpOwogCQkJZWxzZQpAQCAtMzE3LDggKzMxNiw5IEBACiAJCQkJaWYgKHRwLT5taWlfYWR2ZXJ0aXNlID09IDApCiAJCQkJCXRwLT5taWlfYWR2ZXJ0aXNlID0gdHAtPmFkdmVydGlzaW5nW3BoeV9udW1dOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICU0LjR4IG9uIE1JSSAlZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5taWlfYWR2ZXJ0aXNlLCB0cC0+cGh5c1twaHlfbnVtXSk7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICUwNHggb24gTUlJICVkXG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+bWlpX2FkdmVydGlzZSwKKwkJCQkJICAgICAgIHRwLT5waHlzW3BoeV9udW1dKTsKIAkJCQl0dWxpcF9tZGlvX3dyaXRlKGRldiwgdHAtPnBoeXNbcGh5X251bV0sIDQsIHRwLT5taWlfYWR2ZXJ0aXNlKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzM1LDggKzMzNSw4IEBACiAJCQkJc3RydWN0IG1lZGlhbGVhZiAqcmxlYWYgPSAmbXRhYmxlLT5tbGVhZlttdGFibGUtPmhhc19yZXNldF07CiAJCQkJdW5zaWduZWQgY2hhciAqcnN0ID0gcmxlYWYtPmxlYWZkYXRhOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlci5cbiIsCi0JCQkJCQkgICBkZXYtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc2V0dGluZyB0aGUgdHJhbnNjZWl2ZXJcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCWZvciAoaSA9IDA7IGkgPCByc3RbMF07IGkrKykKIAkJCQkJaW93cml0ZTMyKGdldF91MTYocnN0ICsgMSArIChpPDwxKSkgPDwgMTYsIGlvYWRkciArIENTUjE1KTsKIAkJCX0KQEAgLTM0NCwyMCArMzQ0LDIwIEBACiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAgSW52YWxpZCBtZWRpYSB0YWJsZSBzZWxlY3Rpb24gJWQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG1sZWFmLT50eXBlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEludmFsaWQgbWVkaWEgdGFibGUgc2VsZWN0aW9uICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWxlYWYtPnR5cGUpOwogCQkJbmV3X2NzcjYgPSAweDAyMEUwMDAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVzaW5nIG1lZGlhIHR5cGUgJXMsIENTUjEyIGlzICUyLjJ4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBtZWRpYSB0eXBlICVzLCBDU1IxMiBpcyAlMDJ4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpICYgMHhmZik7CiAJfSBlbHNlIGlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewogCQlpZiAoc3RhcnR1cCAmJiAhIHRwLT5tZWRpYWxvY2spCiAJCQlkZXYtPmlmX3BvcnQgPSB0cC0+bWlpX2NudCA/IDExIDogMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBQSFkgc3RhdHVzIGlzICUzLjN4LCBtZWRpYSAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyAweEI4KSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIFBIWSBzdGF0dXMgaXMgJTMuM3gsIG1lZGlhICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCksIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAkJaWYgKHRwLT5taWlfY250KSB7CiAJCQluZXdfY3NyNiA9IDB4ODEwQzAwMDA7CiAJCQlpb3dyaXRlMzIoMHgwMDAxLCBpb2FkZHIgKyBDU1IxNSk7CkBAIC0zODgsMTAgKzM4OCw5IEBACiAJCX0gZWxzZQogCQkJbmV3X2NzcjYgPSAweDAzODYwMDAwOwogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBtZWRpYSBkZXNjcmlwdGlvbiB0YWJsZSwgYXNzdW1pbmcgIgotCQkJCSAgICIlcyB0cmFuc2NlaXZlciwgQ1NSMTIgJTIuMnguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCisJCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAl9CiAKIAl0cC0+Y3NyNiA9IG5ld19jc3I2IHwgKHRwLT5jc3I2ICYgMHhmZGZmKSB8ICh0cC0+ZnVsbF9kdXBsZXggPyAweDAyMDAgOiAwKTsKQEAgLTQxNSwxNiArNDE0LDE3IEBACiAJYm1zciA9IHR1bGlwX21kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1TUik7CiAJbHBhID0gdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9MUEEpOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNSUkgc3RhdHVzICU0LjR4LCBMaW5rIHBhcnRuZXIgcmVwb3J0ICIKLQkJCSAgICIlNC40eC5cbiIsIGRldi0+bmFtZSwgYm1zciwgbHBhKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUlJIHN0YXR1cyAlMDR4LCBMaW5rIHBhcnRuZXIgcmVwb3J0ICUwNHhcbiIsCisJCQkgYm1zciwgbHBhKTsKIAlpZiAoYm1zciA9PSAweGZmZmYpCiAJCXJldHVybiAtMjsKIAlpZiAoKGJtc3IgJiBCTVNSX0xTVEFUVVMpID09IDApIHsKIAkJaW50IG5ld19ibXNyID0gdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9CTVNSKTsKIAkJaWYgKChuZXdfYm1zciAmIEJNU1JfTFNUQVRVUykgPT0gMCkgewogCQkJaWYgKHR1bGlwX2RlYnVnICA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGxpbmsgYmVhdCBvbiB0aGUgTUlJIGludGVyZmFjZSwiCi0JCQkJCSAgICIgc3RhdHVzICU0LjR4LlxuIiwgZGV2LT5uYW1lLCBuZXdfYm1zcik7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk5vIGxpbmsgYmVhdCBvbiB0aGUgTUlJIGludGVyZmFjZSwgc3RhdHVzICUwNHhcbiIsCisJCQkJCSBuZXdfYm1zcik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC00NDMsMTAgKzQ0MywxMCBAQAogCQl0dWxpcF9yZXN0YXJ0X3J4dHgodHApOwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDApCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJIgotCQkJCSAgICIjJWQgbGluayBwYXJ0bmVyIGNhcGFiaWxpdHkgb2YgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAotCQkJCSAgIHRwLT5waHlzWzBdLCBscGEpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSAiU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkIGxpbmsgcGFydG5lciBjYXBhYmlsaXR5IG9mICUwNHhcbiIsCisJCQkJIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJCQkgdHAtPnBoeXNbMF0sIGxwYSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNTAxLDE1ICs1MDEsMTMgQEAKIAogCQl0cC0+cGh5c1twaHlfaWR4KytdID0gcGh5OwogCi0JCXByaW50ayAoS0VSTl9JTkZPICJ0dWxpcCVkOiAgTUlJIHRyYW5zY2VpdmVyICMlZCAiCi0JCQkiY29uZmlnICU0LjR4IHN0YXR1cyAlNC40eCBhZHZlcnRpc2luZyAlNC40eC5cbiIsCisJCXByX2luZm8oInR1bGlwJWQ6ICBNSUkgdHJhbnNjZWl2ZXIgIyVkIGNvbmZpZyAlMDR4IHN0YXR1cyAlMDR4IGFkdmVydGlzaW5nICUwNHhcbiIsCiAJCQlib2FyZF9pZHgsIHBoeSwgbWlpX3JlZzAsIG1paV9zdGF0dXMsIG1paV9hZHZlcnQpOwogCiAJCS8qIEZpeHVwIGZvciBETGluayB3aXRoIG1pc3dpcmVkIFBIWS4gKi8KIAkJaWYgKG1paV9hZHZlcnQgIT0gdG9fYWR2ZXJ0KSB7Ci0JCQlwcmludGsgKEtFUk5fREVCVUcgInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlNC40eCBvbiBQSFkgJWQsIgotCQkJCSIgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlNC40eC5cbiIsCi0JCQkJYm9hcmRfaWR4LCB0b19hZHZlcnQsIHBoeSwgbWlpX2FkdmVydCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidHVsaXAlZDogIEFkdmVydGlzaW5nICUwNHggb24gUEhZICVkLCBwcmV2aW91c2x5IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkgICAgICAgYm9hcmRfaWR4LCB0b19hZHZlcnQsIHBoeSwgbWlpX2FkdmVydCk7CiAJCQl0dWxpcF9tZGlvX3dyaXRlIChkZXYsIHBoeSwgNCwgdG9fYWR2ZXJ0KTsKIAkJfQogCkBAIC01NTQsNyArNTUyLDcgQEAKIAl9CiAJdHAtPm1paV9jbnQgPSBwaHlfaWR4OwogCWlmICh0cC0+bXRhYmxlICYmIHRwLT5tdGFibGUtPmhhc19taWkgJiYgcGh5X2lkeCA9PSAwKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJ0dWxpcCVkOiAqKipXQVJOSU5HKioqOiBObyBNSUkgdHJhbnNjZWl2ZXIgZm91bmQhXG4iLAorCQlwcl9pbmZvKCJ0dWxpcCVkOiAqKipXQVJOSU5HKioqOiBObyBNSUkgdHJhbnNjZWl2ZXIgZm91bmQhXG4iLAogCQkJYm9hcmRfaWR4KTsKIAkJdHAtPnBoeXNbMF0gPSAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwppbmRleCBkMzI1M2VkLi45NjZlZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCkBAIC00MCw4ICs0MCw4IEBACiAJCQluZXdfY3NyNiB8PSAweDAwMDAwMjAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICU4Ljh4LCAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICUwOHgsICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAodHAtPmNzcjYgIT0gbmV3X2NzcjYpIHsKIAkJCXRwLT5jc3I2ID0gbmV3X2NzcjY7CiAJCQkvKiBSZXN0YXJ0IFR4ICovCkBAIC01OCw4ICs1OCw4IEBACiAJaW50IHBoeV9yZWcgPSBpb3JlYWQzMihpb2FkZHIgKyAweEI4KTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBsaW5rIGNoYW5nZWQgc3RhdGUgJTguOHgsIENTUjUgJTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBwaHlfcmVnLCBjc3I1KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIGxpbmsgY2hhbmdlZCBzdGF0ZSAlMDh4LCBDU1I1ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIGNzcjUpOwogCWlmIChpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSAmIFRQTG5rRmFpbCkgewogCQlpb3dyaXRlMzIoKGlvcmVhZDMyKGlvYWRkciArIENTUjcpICYgflRQTG5rRmFpbCkgfCBUUExua1Bhc3MsIGlvYWRkciArIENTUjcpOwogCQkvKiBJZiB3ZSB1c2UgYW4gZXh0ZXJuYWwgTUlJLCB0aGVuIHdlIG11c3RuJ3QgdXNlIHRoZQpAQCAtMTE0LDkgKzExNCw4IEBACiAJCWludCBjc3I1ID0gaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSk7CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyB0aW1lciBQSFkgc3RhdHVzICU4Ljh4LCAlcyAiCi0JCQkJICAgIkNTUjUgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIHRpbWVyIFBIWSBzdGF0dXMgJTA4eCwgJXMgQ1NSNSAlMDh4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjUpOwogCQlpZiAocGh5X3JlZyAmIDB4MDQwMDAwMDApIHsJLyogUmVtb3RlIGxpbmsgZmF1bHQgKi8KIAkJCWlvd3JpdGUzMigweDAyMDFGMDc4LCBpb2FkZHIgKyAweEI4KTsKIAkJCW5leHRfdGljayA9IDEqSFo7CkBAIC0xMjYsMTAgKzEyNSwxMSBAQAogCQkJbmV4dF90aWNrID0gNjAqSFo7CiAJCX0gZWxzZSBpZiAoY3NyNSAmIFRQTG5rRmFpbCkgeyAvKiAxMDBiYXNlVHggbGluayBiZWF0ICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgbGluayBiZWF0IGZhaWxlZCwgQ1NSMTIgJTQuNHgsICIKLQkJCQkJICAgIkNTUjUgJTguOHgsIFBIWSAlMy4zeC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyLAotCQkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgbGluayBiZWF0IGZhaWxlZCwgQ1NSMTIgJTA0eCwgQ1NSNSAlMDh4LCBQSFkgJTAzeFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgICAgICAgY3NyMTIsCisJCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyAweEI4KSk7CiAJCQluZXh0X3RpY2sgPSAzKkhaOwogCQkJaWYgKHRwLT5tZWRpYWxvY2spIHsKIAkJCX0gZWxzZSBpZiAodHAtPm53YXlzZXQgICYmICAoZGV2LT5pZl9wb3J0ICYgMSkpIHsKQEAgLTE1MSwxMCArMTUxLDExIEBACiAJCQkJdHVsaXBfcmVzdGFydF9yeHR4KHRwKTsKIAkJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2hhbmdpbmcgUE5JQyBjb25maWd1cmF0aW9uIHRvICVzICIKLQkJCQkJCSAgICIlcy1kdXBsZXgsIENTUjYgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJCQkJCSAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwgbmV3X2NzcjYpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIkNoYW5naW5nIFBOSUMgY29uZmlndXJhdGlvbiB0byAlcyAlcy1kdXBsZXgsIENTUjYgJTA4eFxuIiwKKwkJCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkJCSB0cC0+ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsCisJCQkJCQkgbmV3X2NzcjYpOwogCQkJfQogCQl9CiAJfQpAQCAtMTYyLDcgKzE2Myw3IEBACiAJbW9kX3RpbWVyKCZ0cC0+dGltZXIsIFJVTl9BVChuZXh0X3RpY2spKTsKIAlpZighaW9yZWFkMzIoaW9hZGRyICsgQ1NSNykpIHsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdyB0aW1lciB3YWtldXAuXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAic3cgdGltZXIgd2FrZXVwXG4iKTsKIAkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCQl0dWxpcF9yZWZpbGxfcngoZGV2KTsKIAkJZW5hYmxlX2lycShkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYwppbmRleCBkODQxODY5Li5iODE5NzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKQEAgLTg3LDggKzg3LDggQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAzKQotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiBuZWdvdGlhdGlvbiBzdGF0dXMgJTguOHguXG4iLAotICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUE5JQzIgbmVnb3RpYXRpb24gc3RhdHVzICUwOHhcbiIsCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCWlmIChuZXh0X3RpY2spIHsKIAkJbW9kX3RpbWVyKCZ0cC0+dGltZXIsIFJVTl9BVChuZXh0X3RpY2spKTsKQEAgLTEyNSw4ICsxMjUsOCBAQAogICAgICAgICBjc3IxNCB8PSAweDAwMDAxMTg0OwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXN0YXJ0aW5nIFBOSUMyIGF1dG9uZWdvdGlhdGlvbiwgIgotICAgICAgICAgICAgICAgICAgICAgICJjc3IxND0lOC44eC5cbiIsIGRldi0+bmFtZSwgY3NyMTQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc3RhcnRpbmcgUE5JQzIgYXV0b25lZ290aWF0aW9uLCBjc3IxND0lMDh4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNCk7CiAKICAgICAgICAgLyogdGVsbCBwbmljMl9sbmtfY2hhbmdlIHdlIGFyZSBkb2luZyBhbiBud2F5IG5lZ290aWF0aW9uICovCiAJZGV2LT5pZl9wb3J0ID0gMDsKQEAgLTEzNyw4ICsxMzcsOCBAQAogCiAJdHAtPmNzcjYgPSBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KTsKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9uIEVudHJ5IHRvIE53YXksICIKLSAgICAgICAgICAgICAgICAgICAgICAiY3NyNj0lOC44eC5cbiIsIGRldi0+bmFtZSwgdHAtPmNzcjYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9uIEVudHJ5IHRvIE53YXksIGNzcjY9JTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYpOwogCiAgICAgICAgIC8qIG1hc2sgb2ZmIGFueSBiaXRzIG5vdCB0byB0b3VjaAogICAgICAgICAgKiBjb21tZW50IGF0IHRvcCBvZiBmaWxlIGV4cGxhaW5zIG1hc2sgdmFsdWUKQEAgLTE4MSw5ICsxODEsOSBAQAogCWludCBjc3IxMiA9IGlvcmVhZDMyKGlvYWRkciArIENTUjEyKTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8iJXM6IFBOSUMyIGxpbmsgc3RhdHVzIGludGVycnVwdCAlOC44eCwgIgotICAgICAgICAgICAgICAgICAgICAgICAiIENTUjUgJXgsICU4Ljh4LlxuIiwgZGV2LT5uYW1lLCBjc3IxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3NyNSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTQpKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJQTklDMiBsaW5rIHN0YXR1cyBpbnRlcnJ1cHQgJTA4eCwgIENTUjUgJXgsICUwOHhcbiIsCisJCQkgY3NyMTIsIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSk7CiAKIAkvKiBJZiBOV2F5IGZpbmlzaGVkIGFuZCB3ZSBoYXZlIGEgbmVnb3RpYXRlZCBwYXJ0bmVyIGNhcGFiaWxpdHkuCiAgICAgICAgICAqIGNoZWNrIGJpdHMgMTQ6MTIgZm9yIGJpdCBwYXR0ZXJuIDEwMSAtIGFsbCBpcyBnb29kCkBAIC0yMTUsOSArMjE1LDkgQEAKIAkJCWVsc2UgaWYgKG5lZ290aWF0ZWQgJiAweDAwMjApCWRldi0+aWZfcG9ydCA9IDA7CiAJCQllbHNlIHsKIAkJCSAgICAgaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBmdW5ueSBhdXRvbmVnb3RpYXRlIHJlc3VsdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNzcjEyICU4Ljh4IGFkdmVydGlzaW5nICU0LjR4XG4iLAotCQkJICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGNzcjEyLCB0cC0+c3ltX2FkdmVydGlzZSk7CisJCQkJICAgICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAgICAgICJmdW5ueSBhdXRvbmVnb3RpYXRlIHJlc3VsdCBjc3IxMiAlMDh4IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkJCSAgICAgIGNzcjEyLCB0cC0+c3ltX2FkdmVydGlzZSk7CiAJCQkgICAgIHRwLT5ud2F5c2V0ID0gMDsKIAkJCSAgICAgLyogc28gY2hlY2sgIGlmIDEwMGJhc2VUeCBsaW5rIHN0YXRlIGlzIG9rYXkgKi8KIAkJCSAgICAgaWYgKChjc3IxMiAmIDIpID09IDAgICYmICAodHAtPnN5bV9hZHZlcnRpc2UgJiAweDAxODApKQpAQCAtMjMxLDEwICsyMzEsMTEgQEAKIAogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkgewogCQkJICAgICAgIGlmICh0cC0+bndheXNldCkKLQkJCSAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU3dpdGNoaW5nIHRvICVzIGJhc2VkIG9uIGxpbmsgIgotCQkJCSAgICAibmVnb3RpYXRpb24gJTQuNHggJiAlNC40eCA9ICU0LjR4LlxuIiwKLQkJCQkgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLCBuZWdvdGlhdGVkKTsKKwkJCQkgICAgICAgZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkJIlN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rIG5lZ290aWF0aW9uICUwNHggJiAlMDR4ID0gJTA0eFxuIiwKKwkJCQkJCW1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkJdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLAorCQkJCQkJbmVnb3RpYXRlZCk7CiAJCQl9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRvIHR1cm4gb2ZmIGJpdCA3IC0gYXV0b25lZ290aWF0ZQpAQCAtMjcwLDkgKzI3MSw5IEBACiAJCQlpb3dyaXRlMzIoMSwgaW9hZGRyICsgQ1NSMTMpOwogCiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTguOHgvJXggQ1NSMTIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTguOHguXG4iLCBkZXYtPm5hbWUsIHRwLT5jc3I2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5jc3I2LAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCQkJLyogbm93IHRoZSBmb2xsb3dpbmcgYWN0dWFsbHkgd3JpdGVzIG91dCB0aGUKIAkJCSAqIG5ldyBjc3I2IHZhbHVlcwpAQCAtMjgyLDkgKzI4Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKIAkgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgJXMsIGxpbmsgYmVhdCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOworCSAgICAgICAgICAgICAgICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICJBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCB1c2luZyAlcywgbGluayBiZWF0IHN0YXR1cyAlMDR4XG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW1lbWJlciB0byB0dXJuIG9mZiBiaXQgNyAtIGF1dG9uZWdvdGlhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVuYWJsZSBzbyB3ZSBkb24ndCBmb3JnZXQKQEAgLTMzOSw5ICszNDAsOSBAQAogCSAgICAgICAgLyogd2UgYXJlIGF0IDEwMG1iIGFuZCBhIHBvdGVudGlhbCBsaW5rIGNoYW5nZSBvY2N1cnJlZCAqLwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiAlcyBsaW5rIGJlYXQgJXMuXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkJICAgKGNzcjEyICYgMikgPyAiZmFpbGVkIiA6ICJnb29kIik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJQTklDMiAlcyBsaW5rIGJlYXQgJXNcbiIsCisJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAoY3NyMTIgJiAyKSA/ICJmYWlsZWQiIDogImdvb2QiKTsKIAogICAgICAgICAgICAgICAgIC8qIGNoZWNrIDEwMCBsaW5rIGJlYXQgKi8KIApAQCAtMzY0LDkgKzM2NSw5IEBACiAJICAgICAgICAvKiB3ZSBhcmUgYXQgMTBtYiBhbmQgYSBwb3RlbnRpYWwgbGluayBjaGFuZ2Ugb2NjdXJyZWQgKi8KIAogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogUE5JQzIgJXMgbGluayBiZWF0ICVzLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgIChjc3IxMiAmIDQpID8gImZhaWxlZCIgOiAiZ29vZCIpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUE5JQzIgJXMgbGluayBiZWF0ICVzXG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgKGNzcjEyICYgNCkgPyAiZmFpbGVkIiA6ICJnb29kIik7CiAKIAogICAgICAgICAgICAgICAgIHRwLT5ud2F5ID0gMDsKQEAgLTM4NSw3ICszODYsNyBAQAogCiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiBMaW5rIENoYW5nZSBEZWZhdWx0P1xuIixkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJQTklDMiBMaW5rIENoYW5nZSBEZWZhdWx0P1xuIik7CiAKICAgICAgICAgLyogaWYgYWxsIGVsc2UgZmFpbHMgZGVmYXVsdCB0byB0cnlpbmcgMTBiYXNlVC1IRCAqLwogCWRldi0+aWZfcG9ydCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYwppbmRleCBhMGUwODQyLi4zNmMyNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKQEAgLTI4LDExICsyOCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTguOHggbW9kZSIKLQkJCSAgICIgJTguOHggU0lBICU4Ljh4ICU4Ljh4ICU4Ljh4ICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLAotCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTA4eCBtb2RlICUwOHggU0lBICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkgICAgICAgY3NyMTIsIGlvcmVhZDMyKGlvYWRkciArIENTUjEzKSwKKwkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKIAl9CiAJc3dpdGNoICh0cC0+Y2hpcF9pZCkgewogCWNhc2UgREMyMTE0MDoKQEAgLTQ4LDkgKzQ4LDkgQEAKIAkJCSAgIEFzc3VtZSB0aGlzIGEgZ2VuZXJpYyBNSUkgb3IgU1lNIHRyYW5zY2VpdmVyLiAqLwogCQkJbmV4dF90aWNrID0gNjAqSFo7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogbmV0d29yayBtZWRpYSBtb25pdG9yIENTUjYgJTguOHggIgotCQkJCQkgICAiQ1NSMTIgMHglMi4yeC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksIGNzcjEyICYgMHhmZik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBuZXR3b3JrIG1lZGlhIG1vbml0b3IgQ1NSNiAlMDh4IENTUjEyIDB4JTAyeFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgY3NyMTIgJiAweGZmKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1sZWFmID0gJnRwLT5tdGFibGUtPm1sZWFmW3RwLT5jdXJfaW5kZXhdOwpAQCAtNjIsOSArNjIsOCBAQAogCQkJczggYml0bnVtID0gcFtvZmZzZXRdOwogCQkJaWYgKHBbb2Zmc2V0KzFdICYgMHg4MCkgewogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2sgIgotCQkJCQkJICAgIkNTUjEyPSUjMi4yeCwgbm8gbWVkaWEgc2Vuc2UuXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrIENTUjEyPSUjMDJ4LCBubyBtZWRpYSBzZW5zZVxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMTIpOwogCQkJCWlmIChtbGVhZi0+dHlwZSA9PSA0KSB7CiAJCQkJCWlmIChtbGVhZi0+bWVkaWEgPT0gMyAmJiAoY3NyMTIgJiAweDAyKSkKIAkJCQkJCWdvdG8gc2VsZWN0X25leHRfbWVkaWE7CkBAIC03MiwxNiArNzEsMTYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2s6IENTUjEyPSUjMi4yeCIKLQkJCQkJICAgIiBiaXQgJWQgaXMgJWQsIGV4cGVjdGluZyAlZC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgY3NyMTIsIChiaXRudW0gPj4gMSkgJiA3LAotCQkJCQkgICAoY3NyMTIgJiAoMSA8PCAoKGJpdG51bSA+PiAxKSAmIDcpKSkgIT0gMCwKLQkJCQkJICAgKGJpdG51bSA+PSAwKSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2s6IENTUjEyPSUjMDJ4IGJpdCAlZCBpcyAlZCwgZXhwZWN0aW5nICVkXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjEyLCAoYml0bnVtID4+IDEpICYgNywKKwkJCQkgICAgICAgKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDAsCisJCQkJICAgICAgIChiaXRudW0gPj0gMCkpOwogCQkJLyogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIGJpdCBoYXMgdGhlIHByb3BlciB2YWx1ZS4gKi8KIAkJCWlmICgoYml0bnVtIDwgMCkgIT0KIAkJCQkoKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDApKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzLlxuIiwgZGV2LT5uYW1lLAorCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExpbmsgYmVhdCBkZXRlY3RlZCBmb3IgJXNcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkJCSAgICAgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10pOwogCQkJCWlmICgocFsyXSAmIDB4NjEpID09IDB4MDEpCS8qIEJvZ3VzIFpueXggYm9hcmQuICovCiAJCQkJCWdvdG8gYWN0dWFsbHlfbWlpOwpAQCAtMTAwLDkgKzk5LDkgQEAKIAkJCWlmICh0dWxpcF9tZWRpYV9jYXBbZGV2LT5pZl9wb3J0XSAmIE1lZGlhSXNGRCkKIAkJCQlnb3RvIHNlbGVjdF9uZXh0X21lZGlhOyAvKiBTa2lwIEZEIGVudHJpZXMuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbGluayBiZWF0IG9uIG1lZGlhICVzLCIKLQkJCQkgICAgICAgIiB0cnlpbmcgdHJhbnNjZWl2ZXIgdHlwZSAlcy5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdLAorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbGluayBiZWF0IG9uIG1lZGlhICVzLCB0cnlpbmcgdHJhbnNjZWl2ZXIgdHlwZSAlc1xuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJCSAgICAgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10sCiAJCQkJICAgICAgIG1lZGlhbmFtZVt0cC0+bXRhYmxlLT5tbGVhZlt0cC0+Y3VyX2luZGV4XS5tZWRpYV0pOwogCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgMCk7CiAJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwpAQCAtMTUxLDggKzE1MCw4IEBACiAJaW50IG5leHRfdGljayA9IDYwKkhaOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMykgewotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBNWElDIG5lZ290aWF0aW9uIHN0YXR1cyAlOC44eC5cbiIsIGRldi0+bmFtZSwKLQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIk1YSUMgbmVnb3RpYXRpb24gc3RhdHVzICUwOHhcbiIsCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAl9CiAJaWYgKG5leHRfdGljaykgewogCQltb2RfdGltZXIoJnRwLT50aW1lciwgUlVOX0FUKG5leHRfdGljaykpOwpAQCAtMTY3LDExICsxNjYsMTAgQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvbWV0IGxpbmsgc3RhdHVzICU0LjR4IHBhcnRuZXIgY2FwYWJpbGl0eSAiCi0JCQkgICAiJTQuNHguXG4iLAotCQkJICAgZGV2LT5uYW1lLAotCQkJICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDEpLAotCQkJICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDUpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb21ldCBsaW5rIHN0YXR1cyAlMDR4IHBhcnRuZXIgY2FwYWJpbGl0eSAlMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLAorCQkgICAgICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDEpLAorCQkgICAgICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDUpKTsKIAkvKiBtb2RfdGltZXIgc3luY2hyb25pemVzIHVzIHdpdGggcG90ZW50aWFsIGFkZF90aW1lciBjYWxscwogCSAqIGZyb20gaW50ZXJydXB0cy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCAyMDY5NmI1Li43ZjU0NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC00MSw3ICs0MSw2IEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkxpbnV4IFR1bGlwIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIAotCiAvKiBBIGZldyB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMuICovCiAKIC8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCkBAIC0yMTEsNyArMjEwLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHR1bGlwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0dWxpcF9wY2lfdGJsKSA9IHsKIAl7IDB4MTAxMSwgMHgwMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBEQzIxMTQwIH0sCiAJeyAweDEwMTEsIDB4MDAxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREMyMTE0MyB9LAogCXsgMHgxMUFELCAweDAwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIExDODJDMTY4IH0sCkBAIC0zMjYsNyArMzI1LDggQEAKIAl1ZGVsYXkoMTAwKTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfdXAoKSwgaXJxPT0lZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR1bGlwX3VwKCksIGlycT09JWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAogCWlvd3JpdGUzMih0cC0+cnhfcmluZ19kbWEsIGlvYWRkciArIENTUjMpOwogCWlvd3JpdGUzMih0cC0+dHhfcmluZ19kbWEsIGlvYWRkciArIENTUjQpOwpAQCAtMzg3LDggKzM4Nyw5IEBACiAJCQkoZGV2LT5pZl9wb3J0ID09IDEyID8gMCA6IGRldi0+aWZfcG9ydCk7CiAJCWZvciAoaSA9IDA7IGkgPCB0cC0+bXRhYmxlLT5sZWFmY291bnQ7IGkrKykKIAkJCWlmICh0cC0+bXRhYmxlLT5tbGVhZltpXS5tZWRpYSA9PSBsb29raW5nX2ZvcikgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyB1c2VyLXNwZWNpZmllZCBtZWRpYSAlcy5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyB1c2VyLXNwZWNpZmllZCBtZWRpYSAlc1xuIiwKKwkJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAkJCQlnb3RvIG1lZGlhX3BpY2tlZDsKIAkJCX0KIAl9CkBAIC0zOTYsOCArMzk3LDkgQEAKIAkJaW50IGxvb2tpbmdfZm9yID0gdHAtPm10YWJsZS0+ZGVmYXVsdG1lZGlhICYgTUVESUFfTUFTSzsKIAkJZm9yIChpID0gMDsgaSA8IHRwLT5tdGFibGUtPmxlYWZjb3VudDsgaSsrKQogCQkJaWYgKHRwLT5tdGFibGUtPm1sZWFmW2ldLm1lZGlhID09IGxvb2tpbmdfZm9yKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVzaW5nIEVFUFJPTS1zZXQgbWVkaWEgJXMuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtsb29raW5nX2Zvcl0pOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyBFRVBST00tc2V0IG1lZGlhICVzXG4iLAorCQkJCQkgbWVkaWFuYW1lW2xvb2tpbmdfZm9yXSk7CiAJCQkJZ290byBtZWRpYV9waWNrZWQ7CiAJCQl9CiAJfQpAQCAtNDI0LDkgKzQyNiwxMCBAQAogCQlpZiAodHAtPm1paV9jbnQpIHsKIAkJCXR1bGlwX3NlbGVjdF9tZWRpYShkZXYsIDEpOwogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVXNpbmcgTUlJIHRyYW5zY2VpdmVyICVkLCBzdGF0dXMgIgotCQkJCQkgICAiJTQuNHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHRwLT5waHlzWzBdLCB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSkpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyBNSUkgdHJhbnNjZWl2ZXIgJWQsIHN0YXR1cyAlMDR4XG4iLAorCQkJCQkgdHAtPnBoeXNbMF0sCisJCQkJCSB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSkpOwogCQkJaW93cml0ZTMyKGNzcjZfbWFza19kZWZzdGF0ZSwgaW9hZGRyICsgQ1NSNik7CiAJCQl0cC0+Y3NyNiA9IGNzcjZfbWFza19oZGNhcDsKIAkJCWRldi0+aWZfcG9ydCA9IDExOwpAQCAtNDkwLDkgKzQ5MywxMCBAQAogCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBDU1IyKTsJCS8qIFJ4IHBvbGwgZGVtYW5kICovCiAKIAlpZiAodHVsaXBfZGVidWcgPiAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRG9uZSB0dWxpcF91cCgpLCBDU1IwICU4Ljh4LCBDU1I1ICU4Ljh4IENTUjYgJTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IwKSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRG9uZSB0dWxpcF91cCgpLCBDU1IwICUwOHgsIENTUjUgJTA4eCBDU1I2ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjApLAorCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogCiAJLyogU2V0IHRoZSB0aW1lciB0byBzd2l0Y2ggdG8gY2hlY2sgZm9yIGxpbmsgYmVhdCBhbmQgcGVyaGFwcyBzd2l0Y2gKQEAgLTU0MCwyNyArNTQ0LDMwIEBACiAJaWYgKHR1bGlwX21lZGlhX2NhcFtkZXYtPmlmX3BvcnRdICYgTWVkaWFJc01JSSkgewogCQkvKiBEbyBub3RoaW5nIC0tIHRoZSBtZWRpYSBtb25pdG9yIHNob3VsZCBoYW5kbGUgdGhpcy4gKi8KIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCB0aW1lb3V0IHVzaW5nIE1JSSBkZXZpY2UuXG4iLAotCQkJCSAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJUcmFuc21pdCB0aW1lb3V0IHVzaW5nIE1JSSBkZXZpY2VcbiIpOwogCX0gZWxzZSBpZiAodHAtPmNoaXBfaWQgPT0gREMyMTE0MCB8fCB0cC0+Y2hpcF9pZCA9PSBEQzIxMTQyIHx8CiAJCSAgIHRwLT5jaGlwX2lkID09IE1YOTg3MTMgfHwgdHAtPmNoaXBfaWQgPT0gQ09NUEVYOTg4MSB8fAogCQkgICB0cC0+Y2hpcF9pZCA9PSBETTkxMFgpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IDIxMTQwIHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU4Ljh4LCAiCi0JCQkgICAiU0lBICU4Ljh4ICU4Ljh4ICU4Ljh4ICU4Ljh4LCByZXNldHRpbmcuLi5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMiksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICIyMTE0MCB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlMDh4LCBTSUEgJTA4eCAlMDh4ICUwOHggJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkJIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMiksCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTMpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKIAkJdHAtPnRpbWVvdXRfcmVjb3ZlcnkgPSAxOwogCQlzY2hlZHVsZV93b3JrKCZ0cC0+bWVkaWFfd29yayk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgaWYgKHRwLT5jaGlwX2lkID09IFBOSUMyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQTklDMiB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlOC44eCwgIgotCQkgICAgICAgIkNTUjYvNyAlOC44eCAvICU4Ljh4IENTUjEyICU4Ljh4LCByZXNldHRpbmcuLi5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCi0JCSAgICAgICAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjcpLCAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiUE5JQzIgdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgQ1NSNi83ICUwOHggLyAlMDh4IENTUjEyICUwOHgsIHJlc2V0dGluZy4uLlxuIiwKKwkJCSAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjUpLAorCQkJIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCisJCQkgKGludClpb3JlYWQzMihpb2FkZHIgKyBDU1I3KSwKKwkJCSAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU4Ljh4LCBDU1IxMiAiCi0JCQkgICAiJTguOHgsIHJlc2V0dGluZy4uLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgQ1NSMTIgJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkJIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMikpOwogCQlkZXYtPmlmX3BvcnQgPSAwOwogCX0KIApAQCAtNTcwLDI2ICs1NzcsMjYgQEAKIAkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCQl1OCAqYnVmID0gKHU4ICopKHRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEpOwogCQkJaW50IGo7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTJkOiAlOC44eCAlOC44eCAlOC44eCAlOC44eCAgIgotCQkJCSAgICIlMi4yeCAlMi4yeCAlMi4yeC5cbiIsCi0JCQkJICAgaSwgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5zdGF0dXMsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5sZW5ndGgsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5idWZmZXIxLAotCQkJCSAgICh1bnNpZ25lZCBpbnQpdHAtPnJ4X3JpbmdbaV0uYnVmZmVyMiwKLQkJCQkgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIiUyZDogJTA4eCAlMDh4ICUwOHggJTA4eCAgJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgICAgICAgaSwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cywKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLmxlbmd0aCwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEsCisJCQkgICAgICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5idWZmZXIyLAorCQkJICAgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0pOwogCQkJZm9yIChqID0gMDsgYnVmW2pdICE9IDB4ZWUgJiYgaiA8IDE2MDA7IGorKykKIAkJCQlpZiAoaiA8IDEwMCkKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUyLjJ4IiwgYnVmW2pdKTsKLQkJCXByaW50ayhLRVJOX0NPTlQgIiBqPSVkLlxuIiwgaik7CisJCQkJCXByX2NvbnQoIiAlMDJ4IiwgYnVmW2pdKTsKKwkJCXByX2NvbnQoIiBqPSVkXG4iLCBqKTsKIAkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICU4Ljh4OiAiLCAoaW50KXRwLT5yeF9yaW5nKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlMDh4OiAiLCAoaW50KXRwLT5yeF9yaW5nKTsKIAkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiICU4Ljh4IiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgJTguOHg6ICIsIChpbnQpdHAtPnR4X3JpbmcpOworCQkJcHJfY29udCgiICUwOHgiLCAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgJTA4eDogIiwgKGludCl0cC0+dHhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAlOC44eCIsICh1bnNpZ25lZCBpbnQpdHAtPnR4X3JpbmdbaV0uc3RhdHVzKTsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJCXByX2NvbnQoIiAlMDh4IiwgKHVuc2lnbmVkIGludCl0cC0+dHhfcmluZ1tpXS5zdGF0dXMpOworCQlwcl9jb250KCJcbiIpOwogCX0KICNlbmRpZgogCkBAIC04MzIsOCArODM5LDkgQEAKIAl0dWxpcF9kb3duIChkZXYpOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAotCQkJZGV2LT5uYW1lLCBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSAgICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDJ4XG4iLAorCQkJICAgaW9yZWFkMzIgKGlvYWRkciArIENTUjUpKTsKIAogCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKIApAQCAtOTg5LDEyICs5OTcsMTAgQEAKIAltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKIAlzZXRfYml0X2xlKDI1NSwgaGFzaF90YWJsZSk7IAkJCS8qIEJyb2FkY2FzdCBlbnRyeSAqLwogCS8qIFRoaXMgc2hvdWxkIHdvcmsgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyBhcyB3ZWxsLiAqLwotCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQlpbnQgaW5kZXggPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgxZmY7CiAKIAkJc2V0X2JpdF9sZShpbmRleCwgaGFzaF90YWJsZSk7Ci0KIAl9CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJKnNldHVwX2ZybSsrID0gaGFzaF90YWJsZVtpXTsKQEAgLTEwMTMsMjAgKzEwMTksMTggQEAKIHsKIAlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCWludCBpOwogCXUxNiAqZWFkZHJzOwogCiAJLyogV2UgaGF2ZSA8PSAxNCBhZGRyZXNzZXMgc28gd2UgY2FuIHVzZSB0aGUgd29uZGVyZnVsCiAJICAgMTYgYWRkcmVzcyBwZXJmZWN0IGZpbHRlcmluZyBvZiB0aGUgVHVsaXAuICovCi0JZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJZWFkZHJzID0gKHUxNiAqKW1jbGlzdC0+ZG1pX2FkZHI7CiAJCSpzZXR1cF9mcm0rKyA9ICplYWRkcnM7ICpzZXR1cF9mcm0rKyA9ICplYWRkcnMrKzsKIAkJKnNldHVwX2ZybSsrID0gKmVhZGRyczsgKnNldHVwX2ZybSsrID0gKmVhZGRycysrOwogCQkqc2V0dXBfZnJtKysgPSAqZWFkZHJzOyAqc2V0dXBfZnJtKysgPSAqZWFkZHJzKys7CiAJfQogCS8qIEZpbGwgdGhlIHVudXNlZCBlbnRyaWVzIHdpdGggdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiAqLwotCW1lbXNldChzZXR1cF9mcm0sIDB4ZmYsICgxNS1pKSoxMik7CisJbWVtc2V0KHNldHVwX2ZybSwgMHhmZiwgKDE1IC0gbmV0ZGV2X21jX2NvdW50KGRldikpICogMTIpOwogCXNldHVwX2ZybSA9ICZ0cC0+c2V0dXBfZnJhbWVbMTUqNl07CiAKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwpAQCAtMTA0OSw3ICsxMDUzLDggQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQl0cC0+Y3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3QgfCBBY2NlcHRBbGxQaHlzOwogCQljc3I2IHw9IEFjY2VwdEFsbE11bHRpY2FzdCB8IEFjY2VwdEFsbFBoeXM7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiAxMDAwKSB8fAorCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHdlbGwgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQl0cC0+Y3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3Q7CiAJCWNzcjYgfD0gQWNjZXB0QWxsTXVsdGljYXN0OwpAQCAtMTA1NywxNSArMTA2MiwxNCBAQAogCQkvKiBTb21lIHdvcmstYWxpa2VzIGhhdmUgb25seSBhIDY0LWVudHJ5IGhhc2ggZmlsdGVyIHRhYmxlLiAqLwogCQkvKiBTaG91bGQgdmVyaWZ5IGNvcnJlY3RuZXNzIG9uIGJpZy1lbmRpYW4vX19wb3dlcnBjX18gKi8KIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOwotCQlpZiAoZGV2LT5tY19jb3VudCA+IDY0KSB7CQkvKiBBcmJpdHJhcnkgbm9uLWVmZmVjdGl2ZSBsaW1pdC4gKi8KKwkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpIHsKKwkJCS8qIEFyYml0cmFyeSBub24tZWZmZWN0aXZlIGxpbWl0LiAqLwogCQkJdHAtPmNzcjYgfD0gQWNjZXB0QWxsTXVsdGljYXN0OwogCQkJY3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3Q7CiAJCX0gZWxzZSB7CiAJCQl1MzIgbWNfZmlsdGVyWzJdID0gezAsIDB9OwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwogCQkJaW50IGZpbHRlcmJpdDsKLQkJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCQlpZiAodHAtPmZsYWdzICYgQ09NRVRfTUFDX0FERFIpCiAJCQkJCWZpbHRlcmJpdCA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik7CiAJCQkJZWxzZQpAQCAtMTA3MywxMCArMTA3NywxMCBAQAogCQkJCWZpbHRlcmJpdCAmPSAweDNmOwogCQkJCW1jX2ZpbHRlcltmaWx0ZXJiaXQgPj4gNV0gfD0gMSA8PCAoZmlsdGVyYml0ICYgMzEpOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGRlZCBmaWx0ZXIgZm9yICVwTSIKLQkJCQkJICAgICAgICIgICU4Ljh4IGJpdCAlZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIG1jbGlzdC0+ZG1pX2FkZHIsCi0JCQkJCSAgICAgICBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpLCBmaWx0ZXJiaXQpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIkFkZGVkIGZpbHRlciBmb3IgJXBNICAlMDh4IGJpdCAlZFxuIiwKKwkJCQkJCSBtY2xpc3QtPmRtaV9hZGRyLAorCQkJCQkJIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkciksIGZpbHRlcmJpdCk7CiAJCQl9CiAJCQlpZiAobWNfZmlsdGVyWzBdID09IHRwLT5tY19maWx0ZXJbMF0gICYmCiAJCQkJbWNfZmlsdGVyWzFdID09IHRwLT5tY19maWx0ZXJbMV0pCkBAIC0xMDk5LDcgKzExMDMsOCBAQAogCiAJCS8qIE5vdGUgdGhhdCBvbmx5IHRoZSBsb3ctYWRkcmVzcyBzaG9ydHdvcmQgb2Ygc2V0dXBfZnJhbWUgaXMgdmFsaWQhCiAJCSAgIFRoZSB2YWx1ZXMgYXJlIGRvdWJsZWQgZm9yIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4gKi8KLQkJaWYgKGRldi0+bWNfY291bnQgPiAxNCkgeyAvKiBNdXN0IHVzZSBhIG11bHRpY2FzdCBoYXNoIHRhYmxlLiAqLworCQlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiAxNCkgeworCQkJLyogTXVzdCB1c2UgYSBtdWx0aWNhc3QgaGFzaCB0YWJsZS4gKi8KIAkJCWJ1aWxkX3NldHVwX2ZyYW1lX2hhc2godHAtPnNldHVwX2ZyYW1lLCBkZXYpOwogCQkJdHhfZmxhZ3MgPSAweDA4NDAwMDAwIHwgMTkyOwogCQl9IGVsc2UgewpAQCAtMTI4OCw5ICsxMjkzLDggQEAKIAl1bnNpZ25lZCBpbnQgZm9yY2VfY3NyMCA9IDA7CiAKICNpZm5kZWYgTU9EVUxFCi0Jc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCi0JaWYgKHR1bGlwX2RlYnVnID4gMCAgJiYgIGRpZF92ZXJzaW9uKysgPT0gMCkKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJaWYgKHR1bGlwX2RlYnVnID4gMCkKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAlib2FyZF9pZHgrKzsKQEAgLTEzMDEsNyArMTMwNSw3IEBACiAJICovCiAKICAgICAgICAgaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MTUMpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBQRlggInNraXBwaW5nIExNQyBjYXJkLlxuIik7CisJCXByX2VycihQRlggInNraXBwaW5nIExNQyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMzE3LDE1ICsxMzIxLDEzIEBACiAKIAkJaWYgKHBkZXYtPnZlbmRvciA9PSAweDEyODIgJiYgcGRldi0+ZGV2aWNlID09IDB4OTEwMCAmJgogCQkgICAgcGRldi0+cmV2aXNpb24gPCAweDMwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJza2lwcGluZyBlYXJseSBETTkxMDAgd2l0aCBDcmMgYnVnICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbyhQRlggInNraXBwaW5nIGVhcmx5IERNOTEwMCB3aXRoIENyYyBidWcgKHVzZSBkbWZlKVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwogCQlpZiAoIShkcCAmJiBvZl9nZXRfcHJvcGVydHkoZHAsICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCSAgICAgICAic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbyhQRlggInNraXBwaW5nIERNOTEweCBleHBhbnNpb24gY2FyZCAodXNlIGRtZmUpXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtMTM3Miw5ICsxMzc0LDggQEAKIAogCWkgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoaSkgewotCQlwcmludGsgKEtFUk5fRVJSIFBGWAotCQkJIkNhbm5vdCBlbmFibGUgdHVsaXAgYm9hcmQgIyVkLCBhYm9ydGluZ1xuIiwKLQkJCWJvYXJkX2lkeCk7CisJCXByX2VycihQRlggIkNhbm5vdCBlbmFibGUgdHVsaXAgYm9hcmQgIyVkLCBhYm9ydGluZ1xuIiwKKwkJICAgICAgIGJvYXJkX2lkeCk7CiAJCXJldHVybiBpOwogCX0KIApAQCAtMTM4MywyMiArMTM4NCwyMiBAQAogCS8qIGFsbG9jX2V0aGVyZGV2IGVuc3VyZXMgYWxpZ25lZCBhbmQgemVyb2VkIHByaXZhdGUgc3RydWN0dXJlcyAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2YgKCp0cCkpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgUEZYICJldGhlciBkZXZpY2UgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCXByX2VycihQRlggImV0aGVyIGRldmljZSBhbGxvYyBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAlpZiAocGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCkgPCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiBJL08gcmVnaW9uICgweCVsbHhAMHglbGx4KSB0b28gc21hbGwsICIKLQkJCSJhYm9ydGluZ1xuIiwgcGNpX25hbWUocGRldiksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDApLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApKTsKKwkJcHJfZXJyKFBGWCAiJXM6IEkvTyByZWdpb24gKDB4JWxseEAweCVsbHgpIHRvbyBzbWFsbCwgYWJvcnRpbmdcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCksCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCkpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCiAJLyogZ3JhYiBhbGwgcmVzb3VyY2VzIGZyb20gYm90aCBQSU8gYW5kIE1NSU8gcmVnaW9ucywgYXMgd2UKIAkgKiBkb24ndCB3YW50IGFueW9uZSBlbHNlIG1lc3NpbmcgYXJvdW5kIHdpdGggb3VyIGhhcmR3YXJlICovCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMgKHBkZXYsICJ0dWxpcCIpKQorCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCBEUlZfTkFNRSkpCiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAogCWlvYWRkciA9ICBwY2lfaW9tYXAocGRldiwgVFVMSVBfQkFSLCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpOwpAQCAtMTYxMSw4ICsxNjEyLDggQEAKIAlpZiAoZGV2LT5tZW1fc3RhcnQgJiBNRURJQV9NQVNLKQogCQl0cC0+ZGVmYXVsdF9wb3J0ID0gZGV2LT5tZW1fc3RhcnQgJiBNRURJQV9NQVNLOwogCWlmICh0cC0+ZGVmYXVsdF9wb3J0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInR1bGlwJWQ6IFRyYW5zY2VpdmVyIHNlbGVjdGlvbiBmb3JjZWQgdG8gJXMuXG4iLAotCQkgICAgICAgYm9hcmRfaWR4LCBtZWRpYW5hbWVbdHAtPmRlZmF1bHRfcG9ydCAmIE1FRElBX01BU0tdKTsKKwkJcHJfaW5mbyhEUlZfTkFNRSAiJWQ6IFRyYW5zY2VpdmVyIHNlbGVjdGlvbiBmb3JjZWQgdG8gJXNcbiIsCisJCQlib2FyZF9pZHgsIG1lZGlhbmFtZVt0cC0+ZGVmYXVsdF9wb3J0ICYgTUVESUFfTUFTS10pOwogCQl0cC0+bWVkaWFsb2NrID0gMTsKIAkJaWYgKHR1bGlwX21lZGlhX2NhcFt0cC0+ZGVmYXVsdF9wb3J0XSAmIE1lZGlhQWx3YXlzRkQpCiAJCQl0cC0+ZnVsbF9kdXBsZXggPSAxOwpAQCAtMTYyNyw3ICsxNjI4LDcgQEAKIAl9CiAKIAlpZiAodHAtPmZsYWdzICYgSEFTX01FRElBX1RBQkxFKSB7Ci0JCXNwcmludGYoZGV2LT5uYW1lLCAidHVsaXAlZCIsIGJvYXJkX2lkeCk7CS8qIGhhY2sgKi8KKwkJc3ByaW50ZihkZXYtPm5hbWUsIERSVl9OQU1FICIlZCIsIGJvYXJkX2lkeCk7CS8qIGhhY2sgKi8KIAkJdHVsaXBfcGFyc2VfZWVwcm9tKGRldik7CiAJCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwkJCS8qIHVuLWhhY2sgKi8KIAl9CkBAIC0xNjYzLDIwICsxNjY0LDE4IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9yaW5nOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIHJldiAlZCBhdCAiCi0jaWZkZWYgQ09ORklHX1RVTElQX01NSU8KLQkJIk1NSU8iCi0jZWxzZQotCQkiUG9ydCIKLSNlbmRpZgotCQkiICUjbGx4LCIsIGRldi0+bmFtZSwgY2hpcF9uYW1lLCBwZGV2LT5yZXZpc2lvbiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFRVTElQX0JBUikpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JaWYgKGVlcHJvbV9taXNzaW5nKQotCQlwcmludGsoIiBFRVBST00gbm90IHByZXNlbnQsIik7Ci0JcHJpbnRrKCIgJXBNIiwgZGV2LT5kZXZfYWRkcik7Ci0JcHJpbnRrKCIsIElSUSAlZC5cbiIsIGlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LAorI2lmZGVmIENPTkZJR19UVUxJUF9NTUlPCisJCSAiJXMgcmV2ICVkIGF0IE1NSU8gJSNsbHgsJXMgJXBNLCBJUlEgJWRcbiIsCisjZWxzZQorCQkgIiVzIHJldiAlZCBhdCBQb3J0ICUjbGx4LCVzICVwTSwgSVJRICVkXG4iLAorI2VuZGlmCisJCSBjaGlwX25hbWUsIHBkZXYtPnJldmlzaW9uLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgVFVMSVBfQkFSKSwKKwkJIGVlcHJvbV9taXNzaW5nID8gIiBFRVBST00gbm90IHByZXNlbnQsIiA6ICIiLAorCQkgZGV2LT5kZXZfYWRkciwgaXJxKTsKIAogICAgICAgICBpZiAodHAtPmNoaXBfaWQgPT0gUE5JQzIpCiAJCXRwLT5saW5rX2NoYW5nZSA9IHBuaWMyX2xua19jaGFuZ2U7CkBAIC0xNzk5LDEyICsxNzk4LDEyIEBACiAJCXJldHVybiAwOwogCiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAidHVsaXA6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOworCQlwcl9lcnIoUEZYICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCB0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgInR1bGlwOiByZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKKwkJcHJfZXJyKFBGWCAicmVxdWVzdF9pcnEgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0xODc0LDcgKzE4NzMsNyBAQAogc3RhdGljIGludCBfX2luaXQgdHVsaXBfaW5pdCAodm9pZCkKIHsKICNpZmRlZiBNT0RVTEUKLQlwcmludGsgKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAkvKiBjb3B5IG1vZHVsZSBwYXJtcyBpbnRvIGdsb2JhbHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCBmYTAxOWNhLi4wYWIwNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0xMiw2ICsxMiw4IEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkidWxpNTI2eCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOS4zIgogI2RlZmluZSBEUlZfUkVMREFURQkiMjAwNS03LTI5IgpAQCAtODIsOSArODQsMTYgQEAKICNkZWZpbmUgVUxJNTI2WF9UWF9USU1FT1VUICgoMTYqSFopLzIpCS8qIHR4IHBhY2tldCB0aW1lLW91dCB0aW1lIDggcyIgKi8KICNkZWZpbmUgVUxJNTI2WF9UWF9LSUNLIAkoNCpIWi8yKQkvKiB0eCBwYWNrZXQgS2ljay1vdXQgdGltZSAyIHMiICovCiAKLSNkZWZpbmUgVUxJNTI2WF9EQlVHKGRidWdfbm93LCBtc2csIHZhbHVlKSBpZiAodWxpNTI2eF9kZWJ1ZyB8fCAoZGJ1Z19ub3cpKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXMgJWx4XG4iLCAobXNnKSwgKGxvbmcpICh2YWx1ZSkpCisjZGVmaW5lIFVMSTUyNlhfREJVRyhkYnVnX25vdywgbXNnLCB2YWx1ZSkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKHVsaTUyNnhfZGVidWcgfHwgKGRidWdfbm93KSkJCQlcCisJCXByX2VycigiJXMgJWx4XG4iLCAobXNnKSwgKGxvbmcpICh2YWx1ZSkpOwlcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNIT1dfTUVESUFfVFlQRShtb2RlKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogQ2hhbmdlIFNwZWVkIHRvICVzTWh6ICVzIGR1cGxleFxuIixtb2RlICYgMSA/IjEwMCI6IjEwIiwgbW9kZSAmIDQgPyAiZnVsbCI6ImhhbGYiKTsKKyNkZWZpbmUgU0hPV19NRURJQV9UWVBFKG1vZGUpCQkJCQlcCisJcHJfZXJyKCJDaGFuZ2UgU3BlZWQgdG8gJXNNaHogJXMgZHVwbGV4XG4iLAkJXAorCSAgICAgICBtb2RlICYgMSA/ICIxMDAiIDogIjEwIiwJCQkJXAorCSAgICAgICBtb2RlICYgNCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKIAogLyogQ1I5IGRlZmluaXRpb246IFNST00vTUlJICovCkBAIC0yODQsNyArMjkzLDcgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlLlxuIik7CisJCXByX3dhcm5pbmcoIjMyLWJpdCBQQ0kgRE1BIG5vdCBhdmFpbGFibGVcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CkBAIC0yOTUsMTkgKzMwNCwxOSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCWlmICghcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBJL08gYmFzZSBpcyB6ZXJvXG4iKTsKKwkJcHJfZXJyKCJJL08gYmFzZSBpcyB6ZXJvXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQogCiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPCAoVUxJNTI2WF9JT19TSVpFKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOworCQlwcl9lcnIoIkFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKIAlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEZhaWxlZCB0byByZXF1ZXN0IFBDSSByZWdpb25zXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgcmVnaW9uc1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KQEAgLTM4Miw5ICszOTEsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9yZXM7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVUxpIE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWQuXG4iLAotCSAgICAgICBkZXYtPm5hbWUsZW50LT5kcml2ZXJfZGF0YSA+PiAxNixwY2lfbmFtZShwZGV2KSwKLQkgICAgICAgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIlVMaSBNJTA0bHggYXQgcGNpJXMsICVwTSwgaXJxICVkXG4iLAorCQkgZW50LT5kcml2ZXJfZGF0YSA+PiAxNiwgcGNpX25hbWUocGRldiksCisJCSBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNTE2LDcgKzUyNSw3IEBACiAJCX0KIAl9CiAJaWYocGh5X3RtcCA9PSAzMikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBmaW5kIHRoZSBwaHkgYWRkcmVzcyEhISIpOworCQlwcl93YXJuaW5nKCJDYW4gbm90IGZpbmQgdGhlIHBoeSBhZGRyZXNzISEhIik7CiAJLyogUGFyc2VyIFNST00gYW5kIG1lZGlhIG1vZGUgKi8KIAlkYi0+bWVkaWFfbW9kZSA9IHVsaTUyNnhfbWVkaWFfbW9kZTsKIApAQCAtNTQ4LDcgKzU1Nyw3IEBACiAJdXBkYXRlX2NyNihkYi0+Y3I2X2RhdGEsIGlvYWRkcik7CiAKIAkvKiBTZW5kIHNldHVwIGZyYW1lICovCi0Jc2VuZF9maWx0ZXJfZnJhbWUoZGV2LCBkZXYtPm1jX2NvdW50KTsJLyogTTUyNjEvTTUyNjMgKi8KKwlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIG5ldGRldl9tY19jb3VudChkZXYpKTsJLyogTTUyNjEvTTUyNjMgKi8KIAogCS8qIEluaXQgQ1I3LCBpbnRlcnJ1cHQgYWN0aXZlIGJpdCAqLwogCWRiLT5jcjdfZGF0YSA9IENSN19ERUZBVUxUOwpAQCAtNTgyLDcgKzU5MSw3IEBACiAKIAkvKiBUb28gbGFyZ2UgcGFja2V0IGNoZWNrICovCiAJaWYgKHNrYi0+bGVuID4gTUFYX1BBQ0tFVF9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBiaWcgcGFja2V0ID0gJWRcbiIsICh1MTYpc2tiLT5sZW4pOworCQlwcl9lcnIoImJpZyBwYWNrZXQgPSAlZFxuIiwgKHUxNilza2ItPmxlbik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CkBAIC01OTIsNyArNjAxLDcgQEAKIAkvKiBObyBUeCByZXNvdXJjZSBjaGVjaywgaXQgbmV2ZXIgaGFwcGVuIG5yb21hbGx5ICovCiAJaWYgKGRiLT50eF9wYWNrZXRfY250ID49IFRYX0ZSRUVfREVTQ19DTlQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOworCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC04OTcsMTYgKzkwNiwxOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IFVMSTUyNjFfTUFYX01VTFRJQ0FTVCkgewotCQlVTEk1MjZYX0RCVUcoMCwgIlBhc3MgYWxsIG11bHRpY2FzdCBhZGRyZXNzIiwgZGV2LT5tY19jb3VudCk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBVTEk1MjYxX01BWF9NVUxUSUNBU1QpIHsKKwkJVUxJNTI2WF9EQlVHKDAsICJQYXNzIGFsbCBtdWx0aWNhc3QgYWRkcmVzcyIsCisJCQkgICAgIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAkJZGItPmNyNl9kYXRhICY9IH4oQ1I2X1BNIHwgQ1I2X1BCRik7CiAJCWRiLT5jcjZfZGF0YSB8PSBDUjZfUEFNOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0JVUxJNTI2WF9EQlVHKDAsICJTZXQgbXVsdGljYXN0IGFkZHJlc3MiLCBkZXYtPm1jX2NvdW50KTsKLQlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIGRldi0+bWNfY291bnQpOyAJLyogTTUyNjEvTTUyNjMgKi8KKwlVTEk1MjZYX0RCVUcoMCwgIlNldCBtdWx0aWNhc3QgYWRkcmVzcyIsIG5ldGRldl9tY19jb3VudChkZXYpKTsKKwlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIG5ldGRldl9tY19jb3VudChkZXYpKTsgCS8qIE01MjYxL001MjYzICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTA1OCw3ICsxMDY5LDcgQEAKIAkJLyogTGluayBGYWlsZWQgKi8KIAkJVUxJNTI2WF9EQlVHKDAsICJMaW5rIEZhaWxlZCIsIHRtcF9jcjEyKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAidWxpNTI2eDogJXMgTklDIExpbmsgaXMgRG93blxuIixkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CiAJCWRiLT5saW5rX2ZhaWxlZCA9IDE7CiAKIAkJLyogRm9yIEZvcmNlIDEwLzEwME0gSGFsZi9GdWxsIG1vZGU6IEVuYWJsZSBBdXRvLU5lZ28gbW9kZSAqLwpAQCAtMTA5MCwxMSArMTEwMSwxMSBAQAogCQkJCX0KIAkJCQlpZihkYi0+b3BfbW9kZT09VUxJNTI2WF8xME1GRCB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJCQkJewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJ1bGk1MjZ4OiAlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEZ1bGwgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7CisJCQkJCXByX2luZm8oIiVzIE5JQyBMaW5rIGlzIFVwICVkIE1icHMgRnVsbCBkdXBsZXhcbiIsZGV2LT5uYW1lLFRtcFNwZWVkKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAidWxpNTI2eDogJXMgTklDIExpbmsgaXMgVXAgJWQgTWJwcyBIYWxmIGR1cGxleFxuIixkZXYtPm5hbWUsVG1wU3BlZWQpOworCQkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEhhbGYgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7CiAJCQkJfQogCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJCX0KQEAgLTExMDQsNyArMTExNSw3IEBACiAJCXsKIAkJCWlmKGRiLT5pbml0PT0xKQogCQkJewotCQkJCXByaW50ayhLRVJOX0lORk8gInVsaTUyNng6ICVzIE5JQyBMaW5rIGlzIERvd25cbiIsZGV2LT5uYW1lKTsKKwkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CiAJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJCX0KIAkJfQpAQCAtMTIzMCw4ICsxMjQxLDcgQEAKIAogCWVyciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgcHV0IGRldmljZSBpbnRvIEQwXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQ291bGQgbm90IHB1dCBkZXZpY2UgaW50byBEMFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNDA1LDE0ICsxNDE1LDE0IEBACiAJKnN1cHRyKysgPSAweGZmZmYgPDwgRkxUX1NISUZUOwogCiAJLyogZml0IHRoZSBtdWx0aWNhc3QgYWRkcmVzcyAqLwotCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3QsIGkgPSAwOyBpIDwgbWNfY250OyBpKyssIG1jcHRyID0gbWNwdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY3B0ciwgZGV2KSB7CiAJCWFkZHJwdHIgPSAodTE2ICopIG1jcHRyLT5kbWlfYWRkcjsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzBdIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzFdIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzJdIDw8IEZMVF9TSElGVDsKIAl9CiAKLQlmb3IgKDsgaTwxNDsgaSsrKSB7CisJZm9yIChpID0gbmV0ZGV2X21jX2NvdW50KGRldik7IGkgPCAxNDsgaSsrKSB7CiAJCSpzdXB0cisrID0gMHhmZmZmIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSAweGZmZmYgPDwgRkxUX1NISUZUOwogCQkqc3VwdHIrKyA9IDB4ZmZmZiA8PCBGTFRfU0hJRlQ7CkBAIC0xNDMyLDcgKzE0NDIsNyBAQAogCQl1cGRhdGVfY3I2KGRiLT5jcjZfZGF0YSwgZGV2LT5iYXNlX2FkZHIpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlIC0gU2VuZF9maWx0ZXJfZnJhbWUhXG4iKTsKKwkJcHJfZXJyKCJObyBUeCByZXNvdXJjZSAtIFNlbmRfZmlsdGVyX2ZyYW1lIVxuIik7CiB9CiAKIApAQCAtMTc4Myw3ICsxNzkzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdWxpNTI2eF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodWxpNTI2eF9wY2lfdGJsKSA9IHsKIAl7IDB4MTBCOSwgMHg1MjYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBQQ0lfVUxJNTI2MV9JRCB9LAogCXsgMHgxMEI5LCAweDUyNjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9VTEk1MjYzX0lEIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA4NjlhN2EwLi4zMDRmNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCUNhbkhhdmVNSUk9MSwgSGFzQnJva2VuVHg9MiwgQWx3YXlzRkRYPTQsIEZEWE9uTm9NSUk9OCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3ODQwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh3ODQwX3BjaV90YmwpID0gewogCXsgMHgxMDUwLCAweDA4NDAsIFBDSV9BTllfSUQsIDB4ODE1MywgICAgIDAsIDAsIDAgfSwKIAl7IDB4MTA1MCwgMHgwODQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCiAJeyAweDExZjYsIDB4MjAxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMiB9LApAQCAtMzc2LDggKzM3Niw4IEBACiAJaXJxID0gcGRldi0+aXJxOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zLlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfd2FybmluZygiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zXG4iLAorCQkJICAgcGNpX25hbWUocGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpucCkpOwpAQCAtNDIyLDggKzQyMiw5IEBACiAJCWlmIChvcHRpb24gJiAweDIwMCkKIAkJCW5wLT5taWlfaWYuZnVsbF9kdXBsZXggPSAxOwogCQlpZiAob3B0aW9uICYgMTUpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaWdub3JpbmcgdXNlciBzdXBwbGllZCBtZWRpYSB0eXBlICVkIiwKLQkJCQlkZXYtPm5hbWUsIG9wdGlvbiAmIDE1KTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgImlnbm9yaW5nIHVzZXIgc3VwcGxpZWQgbWVkaWEgdHlwZSAlZCIsCisJCQkJIG9wdGlvbiAmIDE1KTsKIAl9CiAJaWYgKGZpbmRfY250IDwgTUFYX1VOSVRTICAmJiAgZnVsbF9kdXBsZXhbZmluZF9jbnRdID4gMCkKIAkJbnAtPm1paV9pZi5mdWxsX2R1cGxleCA9IDE7CkBAIC00NDAsOSArNDQxLDggQEAKIAlpZiAoaSkKIAkJZ290byBlcnJfb3V0X2NsZWFyZGV2OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0ICVwLCAlcE0sIElSUSAlZC5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcGNpX2lkX3RibFtjaGlwX2lkeF0ubmFtZSwgaW9hZGRyLAotCSAgICAgICBkZXYtPmRldl9hZGRyLCBpcnEpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIGF0ICVwLCAlcE0sIElSUSAlZFxuIiwKKwkJIHBjaV9pZF90YmxbY2hpcF9pZHhdLm5hbWUsIGlvYWRkciwgZGV2LT5kZXZfYWRkciwgaXJxKTsKIAogCWlmIChucC0+ZHJ2X2ZsYWdzICYgQ2FuSGF2ZU1JSSkgewogCQlpbnQgcGh5LCBwaHlfaWR4ID0gMDsKQEAgLTQ1MywxNiArNDUzLDE3IEBACiAJCQkJbnAtPm1paV9pZi5hZHZlcnRpc2luZyA9IG1kaW9fcmVhZChkZXYsIHBoeSwgTUlJX0FEVkVSVElTRSk7CiAJCQkJbnAtPm1paSA9IChtZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9QSFlTSUQxKSA8PCAxNikrCiAJCQkJCQltZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9QSFlTSUQyKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJIFBIWSAlOC44eGggZm91bmQgYXQgYWRkcmVzcyAlZCwgc3RhdHVzICIKLQkJCQkJICAgIjB4JTQuNHggYWR2ZXJ0aXNpbmcgJTQuNHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG5wLT5taWksIHBoeSwgbWlpX3N0YXR1cywgbnAtPm1paV9pZi5hZHZlcnRpc2luZyk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk1JSSBQSFkgJTA4eGggZm91bmQgYXQgYWRkcmVzcyAlZCwgc3RhdHVzIDB4JTA0eCBhZHZlcnRpc2luZyAlMDR4XG4iLAorCQkJCQkgbnAtPm1paSwgcGh5LCBtaWlfc3RhdHVzLAorCQkJCQkgbnAtPm1paV9pZi5hZHZlcnRpc2luZyk7CiAJCQl9CiAJCX0KIAkJbnAtPm1paV9jbnQgPSBwaHlfaWR4OwogCQlucC0+bWlpX2lmLnBoeV9pZCA9IG5wLT5waHlzWzBdOwogCQlpZiAocGh5X2lkeCA9PSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1JSSBQSFkgbm90IGZvdW5kIC0tIHRoaXMgZGV2aWNlIG1heSAiCi0JCQkJCSAgICJub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiTUlJIFBIWSBub3QgZm91bmQgLS0gdGhpcyBkZXZpY2UgbWF5IG5vdCBvcGVyYXRlIGNvcnJlY3RseVxuIik7CiAJCX0KIAl9CiAKQEAgLTY0NCw4ICs2NDUsOCBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHc4OWM4NDBfb3BlbigpIGlycSAlZC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3ODljODQwX29wZW4oKSBpcnEgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAogCWlmKChpPWFsbG9jX3JpbmdkZXNjKGRldikpKQogCQlnb3RvIG91dF9lcnI7CkBAIC02NTcsNyArNjU4LDcgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJaWYgKGRlYnVnID4gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIG5ldGRldl9vcGVuKCkuXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgbmV0ZGV2X29wZW4oKVxuIiwgZGV2LT5uYW1lKTsKIAogCS8qIFNldCB0aGUgdGltZXIgdG8gY2hlY2sgZm9yIGxpbmsgYmVhdC4gKi8KIAlpbml0X3RpbWVyKCZucC0+dGltZXIpOwpAQCAtNjg4LDE2ICs2ODksMTggQEAKIAlpZiAoIShtaWlfcmVnICYgMHg0KSkgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQlpZiAoZGVidWcpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1JSSAjJWQgcmVwb3J0cyBubyBsaW5rLiBEaXNhYmxpbmcgd2F0Y2hkb2cuXG4iLAotCQkJCQlkZXYtPm5hbWUsIG5wLT5waHlzWzBdKTsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAiTUlJICMlZCByZXBvcnRzIG5vIGxpbmsuIERpc2FibGluZyB3YXRjaGRvZ1xuIiwKKwkJCQkJIG5wLT5waHlzWzBdKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCX0KIAkJcmV0dXJuIG5wLT5jc3I2OwogCX0KIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAoZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJICMlZCBsaW5rIGlzIGJhY2suIEVuYWJsaW5nIHdhdGNoZG9nLlxuIiwKLQkJCQlkZXYtPm5hbWUsIG5wLT5waHlzWzBdKTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgIk1JSSAjJWQgbGluayBpcyBiYWNrLiBFbmFibGluZyB3YXRjaGRvZ1xuIiwKKwkJCQkgbnAtPnBoeXNbMF0pOwogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfQogCkBAIC03MjksOSArNzMyLDEwIEBACiAJaWYgKGZhc3RldGgpCiAJCXJlc3VsdCB8PSAweDIwMDAwMDAwOwogCWlmIChyZXN1bHQgIT0gbnAtPmNzcjYgJiYgZGVidWcpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nICVkTUJpdC0lcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkXG4iLAotCQkJCSBkZXYtPm5hbWUsIGZhc3RldGggPyAxMDAgOiAxMCwKLQkJCSAgIAlkdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsIG5wLT5waHlzWzBdKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJTZXR0aW5nICVkTUJpdC0lcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkXG4iLAorCQkJIGZhc3RldGggPyAxMDAgOiAxMCwgZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAorCQkJIG5wLT5waHlzWzBdKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NjMsOCArNzY3LDggQEAKIAogCQlsaW1pdC0tOwogCQlpZighbGltaXQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3VsZG4ndCBzdG9wIHJ4dHgsIEludHJTdGF0dXMgJXhoLlxuIiwKLQkJCQkJZGV2LT5uYW1lLCBjc3I1KTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgImNvdWxkbid0IHN0b3Agcnh0eCwgSW50clN0YXR1cyAleGhcbiIsIGNzcjUpOwogCQkJYnJlYWs7CiAJCX0KIAkJdWRlbGF5KDEpOwpAQCAtNzgzLDEwICs3ODcsOSBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbnAtPmJhc2VfYWRkcjsKIAogCWlmIChkZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlOC44eCAiCi0JCQkgICAiY29uZmlnICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlMDh4IGNvbmZpZyAlMDh4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKKwkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIE5ldHdvcmtDb25maWcpKTsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJdXBkYXRlX2NzcjYoZGV2LCB1cGRhdGVfbGluayhkZXYpKTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTg5OSw4ICs5MDIsOCBAQAogCS8qIFdoZW4gbm90IGEgbW9kdWxlIHdlIGNhbiB3b3JrIGFyb3VuZCBicm9rZW4gJzQ4NiBQQ0kgYm9hcmRzLiAqLwogCWlmIChib290X2NwdV9kYXRhLng4NiA8PSA0KSB7CiAJCWkgfD0gMHg0ODAwOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhpcyBpcyBhIDM4Ni80ODYgUENJIHN5c3RlbSwgc2V0dGluZyBjYWNoZSAiCi0JCQkgICAiYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzLlxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJUaGlzIGlzIGEgMzg2LzQ4NiBQQ0kgc3lzdGVtLCBzZXR0aW5nIGNhY2hlIGFsaWdubWVudCB0byA4IGxvbmd3b3Jkc1xuIik7CiAJfSBlbHNlIHsKIAkJaSB8PSAweEUwMDA7CiAJfQpAQCAtOTMxLDIyICs5MzQsMjMgQEAKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTguOHgsIgotCQkgICAiIHJlc2V0dGluZy4uLlxuIiwgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CisJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCiAJewogCQlpbnQgaTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlcDogIiwgbnAtPnJ4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoIiAlOC44eCIsICh1bnNpZ25lZCBpbnQpbnAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nICVwOiAiLCBucC0+dHhfcmluZyk7CisJCQlwcmludGsoS0VSTl9DT05UICIgJTA4eCIsICh1bnNpZ25lZCBpbnQpbnAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgVHggcmluZyAlcDogIiwgbnAtPnR4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoIiAlOC44eCIsIG5wLT50eF9yaW5nW2ldLnN0YXR1cyk7Ci0JCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDh4IiwgbnAtPnR4X3JpbmdbaV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IGN1ciAlZCBUeCBkaXJ0eSAlZCBUeCBGdWxsICVkLCBxIGJ5dGVzICVkLlxuIiwKLQkJCQlucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT50eF9mdWxsLCBucC0+dHhfcV9ieXRlcyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IERlc2NyaXB0b3IgYWRkciAleGguXG4iLGlvcmVhZDMyKGlvYWRkcisweDRDKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlR4IGN1ciAlZCBUeCBkaXJ0eSAlZCBUeCBGdWxsICVkLCBxIGJ5dGVzICVkXG4iLAorCSAgICAgICBucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT50eF9mdWxsLCBucC0+dHhfcV9ieXRlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlR4IERlc2NyaXB0b3IgYWRkciAleGhcbiIsIGlvcmVhZDMyKGlvYWRkcisweDRDKSk7CiAKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpAQCAtMTA1NSw4ICsxMDU5LDggQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CiAJfQogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMDczLDggKzEwNzcsOCBAQAogCQlpZiAodHhfc3RhdHVzICYgMHg4MDAwKSB7IAkvKiBUaGVyZSB3YXMgYW4gZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgdHhfc3RhdHVzKTsKICNlbmRpZgogCQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIDB4MDEwNCkgbnAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC0xMDg2LDggKzEwOTAsOCBAQAogCQl9IGVsc2UgewogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoZGVidWcgPiAzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgc2xvdCAlZCBvaywgVHggc3RhdHVzICU4Ljh4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBlbnRyeSwgdHhfc3RhdHVzKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IHNsb3QgJWQgb2ssIFR4IHN0YXR1cyAlMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCB0eF9zdGF0dXMpOwogI2VuZGlmCiAJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gbnAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbjsKIAkJCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMykgJiAxNTsKQEAgLTExMzAsOCArMTEzNCw4IEBACiAJCWlvd3JpdGUzMihpbnRyX3N0YXR1cyAmIDB4MDAxZmZmZiwgaW9hZGRyICsgSW50clN0YXR1cyk7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIHN0YXR1cyAlMDR4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgoaW50cl9zdGF0dXMgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0xMTU2LDggKzExNjAsOSBAQAogCQkJbmV0ZGV2X2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLXdvcmtfbGltaXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsICIKLQkJCQkgICAic3RhdHVzPTB4JTQuNHguXG4iLCBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIlRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXM9MHglMDR4XG4iLAorCQkJCSBpbnRyX3N0YXR1cyk7CiAJCQkvKiBTZXQgdGhlIHRpbWVyIHRvIHJlLWVuYWJsZSB0aGUgb3RoZXIgaW50ZXJydXB0cyBhZnRlcgogCQkJICAgMTAqODJ1c2VjIHRpY2tzLiAqLwogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC0xMTcxLDggKzExNzYsOCBAQAogCX0gd2hpbGUgKDEpOwogCiAJaWYgKGRlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xMTg1LDggKzExOTAsOCBAQAogCWludCB3b3JrX2xpbWl0ID0gbnAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gbnAtPmN1cl9yeDsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICU0LjR4LlxuIiwKLQkJCSAgIGVudHJ5LCBucC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICUwNHhcbiIsCisJCSAgICAgICBlbnRyeSwgbnAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJfQogCiAJLyogSWYgRU9QIGlzIHNldCBvbiB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCkBAIC0xMTk1LDI0ICsxMjAwLDI0IEBACiAJCXMzMiBzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTguOHguXG4iLAotCQkJCSAgIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBzdGF0dXMgd2FzICUwOHhcbiIsCisJCQkgICAgICAgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlicmVhazsKIAkJaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKIAkJCWlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CiAJCQkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgc3Bhbm5lZCAiCi0JCQkJCQkgICAibXVsdGlwbGUgYnVmZmVycywgZW50cnkgJSN4IHN0YXR1cyAlNC40eCFcbiIsCi0JCQkJCQkgICBkZXYtPm5hbWUsIG5wLT5jdXJfcngsIHN0YXR1cyk7CisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgZW50cnkgJSN4IHN0YXR1cyAlMDR4IVxuIiwKKwkJCQkJCSBucC0+Y3VyX3J4LCBzdGF0dXMpOwogCQkJCQlucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHg4MDAwKSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKGRlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJaWYgKHN0YXR1cyAmIDB4MDg5MCkgbnAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDRDKSBucC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CkBAIC0xMjI1LDggKzEyMzAsOCBAQAogCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCWlmIChkZWJ1ZyA+IDQpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgbmV0ZGV2X3J4KCkgbm9ybWFsIFJ4IHBrdCBsZW5ndGggJWQiCi0JCQkJCSAgICIgc3RhdHVzICV4LlxuIiwgcGt0X2xlbiwgc3RhdHVzKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBub3JtYWwgUnggcGt0IGxlbmd0aCAlZCBzdGF0dXMgJXhcbiIsCisJCQkJICAgICAgIHBrdF9sZW4sIHN0YXR1cyk7CiAjZW5kaWYKIAkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwogCQkJICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwpAQCAtMTI1MSwxMSArMTI1NiwxMCBAQAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCQkJCS8qIFJlbW92ZSBhZnRlciB0ZXN0aW5nLiAqLwogCQkJLyogWW91IHdpbGwgd2FudCB0aGlzIGluZm8gZm9yIHRoZSBpbml0aWFsIGRlYnVnLiAqLwogCQkJaWYgKGRlYnVnID4gNSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCBkYXRhICVwTSAlcE0iCi0JCQkJICAgICAgICIgJTIuMnglMi4yeCAlZC4lZC4lZC4lZC5cbiIsCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggZGF0YSAlcE0gJXBNICUwMnglMDJ4ICVwSTRcbiIsCiAJCQkJICAgICAgICZza2ItPmRhdGFbMF0sICZza2ItPmRhdGFbNl0sCiAJCQkJICAgICAgIHNrYi0+ZGF0YVsxMl0sIHNrYi0+ZGF0YVsxM10sCi0JCQkJICAgICAgIHNrYi0+ZGF0YVsxNF0sIHNrYi0+ZGF0YVsxNV0sIHNrYi0+ZGF0YVsxNl0sIHNrYi0+ZGF0YVsxN10pOworCQkJCSAgICAgICAmc2tiLT5kYXRhWzE0XSk7CiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yeChza2IpOwpAQCAtMTI5Myw4ICsxMjk3LDggQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFibm9ybWFsIGV2ZW50LCAlOC44eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBYm5vcm1hbCBldmVudCwgJTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCWlmIChpbnRyX3N0YXR1cyA9PSAweGZmZmZmZmZmKQogCQlyZXR1cm47CiAJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC0xMzE0LDggKzEzMTgsOCBAQAogCQkgCW5ldyA9IDEyNzsgLyogbG9hZCBmdWxsIHBhY2tldCBiZWZvcmUgc3RhcnRpbmcgKi8KIAkJbmV3ID0gKG5wLT5jc3I2ICYgfigweDdGIDw8IDE0KSkgfCAobmV3PDwxNCk7CiAjZW5kaWYKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB1bmRlcmZsb3csIG5ldyBjc3I2ICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgbmV3KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB1bmRlcmZsb3csIG5ldyBjc3I2ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG5ldyk7CiAJCXVwZGF0ZV9jc3I2KGRldiwgbmV3KTsKIAl9CiAJaWYgKGludHJfc3RhdHVzICYgUnhEaWVkKSB7CQkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KQEAgLTEzNTcsMTcgKzEzNjEsMTYgQEAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQlyeF9tb2RlID0gUnhBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBSeEFjY2VwdEFsbFBoeXMKIAkJCXwgQWNjZXB0TXlQaHlzOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IFJ4QWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCQlpbnQgaTsKKwogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgZmlsdGVyYml0ID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjYpIF4gMHgzRjsKIAkJCWZpbHRlcmJpdCAmPSAweDNmOwogCQkJbWNfZmlsdGVyW2ZpbHRlcmJpdCA+PiA1XSB8PSAxIDw8IChmaWx0ZXJiaXQgJiAzMSk7CkBAIC0xNDg3LDExICsxNDkwLDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJaWYgKGRlYnVnID4gMSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICU4Ljh4ICIKLQkJCSAgICJDb25maWcgJTguOHguXG4iLCBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIEludHJTdGF0dXMpLAotCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgTmV0d29ya0NvbmZpZykpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFF1ZXVlIHBvaW50ZXJzIHdlcmUgVHggJWQgLyAlZCwgIFJ4ICVkIC8gJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTA4eCBDb25maWcgJTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUXVldWUgcG9pbnRlcnMgd2VyZSBUeCAlZCAvICVkLCAgUnggJWQgLyAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIG5wLT5jdXJfdHgsIG5wLT5kaXJ0eV90eCwKKwkJICAgICAgIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CiAJfQogCiAgCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwpAQCAtMTUxMiwxOCArMTUxNywxNiBAQAogCWlmIChkZWJ1ZyA+IDIpIHsKIAkJaW50IGk7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nIGF0ICU4Ljh4OlxuIiwKLQkJCSAgIChpbnQpbnAtPnR4X3JpbmcpOworCQlwcmludGsoS0VSTl9ERUJVRyIgIFR4IHJpbmcgYXQgJTA4eDpcbiIsIChpbnQpbnAtPnR4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlNC40eCAlNC40eCAlOC44eC5cbiIsCi0JCQkJICAgaSwgbnAtPnR4X3JpbmdbaV0ubGVuZ3RoLAotCQkJCSAgIG5wLT50eF9yaW5nW2ldLnN0YXR1cywgbnAtPnR4X3JpbmdbaV0uYnVmZmVyMSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IHJpbmcgJTguOHg6XG4iLAotCQkJICAgKGludClucC0+cnhfcmluZyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlMDR4ICUwNHggJTA4eFxuIiwKKwkJCSAgICAgICBpLCBucC0+dHhfcmluZ1tpXS5sZW5ndGgsCisJCQkgICAgICAgbnAtPnR4X3JpbmdbaV0uc3RhdHVzLCBucC0+dHhfcmluZ1tpXS5idWZmZXIxKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlMDh4OlxuIiwgKGludClucC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAjJWQgZGVzYy4gJTQuNHggJTQuNHggJTguOHhcbiIsCi0JCQkJICAgaSwgbnAtPnJ4X3JpbmdbaV0ubGVuZ3RoLAotCQkJCSAgIG5wLT5yeF9yaW5nW2ldLnN0YXR1cywgbnAtPnJ4X3JpbmdbaV0uYnVmZmVyMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlMDR4ICUwNHggJTA4eFxuIiwKKwkJCSAgICAgICBpLCBucC0+cnhfcmluZ1tpXS5sZW5ndGgsCisJCQkgICAgICAgbnAtPnJ4X3JpbmdbaV0uc3RhdHVzLCBucC0+cnhfcmluZ1tpXS5idWZmZXIxKTsKIAkJfQogCX0KICNlbmRpZiAvKiBfX2kzODZfXyBkZWJ1Z2dpbmcgb25seSAqLwpAQCAtMTYyMiw5ICsxNjI1LDggQEAKIAkJZ290byBvdXQ7IC8qIGRldmljZSBub3Qgc3VzcGVuZGVkICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlpZiAoKHJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUgotCQkJCSIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIiwKLQkJCQlkZXYtPm5hbWUpOworCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA5OTI0YzRjLi5hY2ZlZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwpAQCAtMTQsNiArMTQsOCBAQAogICogCSRJZDogeGlyY29tX2NiLmMsdiAxLjMzIDIwMDEvMDMvMTkgMTQ6MDI6MDcgYXJqYW52IEV4cCAkCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4aXJjb21fcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeGlyY29tX3BjaV90YWJsZSkgPSB7CiAJezB4MTE1RCwgMHgwMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJezAsfSwKIH07CkBAIC0yMzQsNyArMjM2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9TVEFUVVMsdG1wMTYpOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDEyOCwgInhpcmNvbV9jYiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGlyY29tX3Byb2JlOiBmYWlsZWQgdG8gYWxsb2NhdGUgaW8tcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGlvLXJlZ2lvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI0NSw3ICsyNDcsNyBAQAogCSAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgeGlyY29tX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogZmFpbGVkIHRvIGFsbG9jYXRlIGV0aGVyZGV2XG4iKTsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGV0aGVyZGV2XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZGV2aWNlX2ZhaWw7CiAJfQogCXByaXZhdGUgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjUzLDEyICsyNTUsMTIgQEAKIAkvKiBBbGxvY2F0ZSB0aGUgc2VuZC9yZWNlaXZlIGJ1ZmZlcnMgKi8KIAlwcml2YXRlLT5yeF9idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LDgxOTIsJnByaXZhdGUtPnJ4X2RtYV9oYW5kbGUpOwogCWlmIChwcml2YXRlLT5yeF9idWZmZXIgPT0gTlVMTCkgewotIAkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fcHJvYmU6IG5vIG1lbW9yeSBmb3IgcnggYnVmZmVyIFxuIik7CisJCXByX2VycigiJXM6IG5vIG1lbW9yeSBmb3IgcnggYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gcnhfYnVmX2ZhaWw7CiAJfQogCXByaXZhdGUtPnR4X2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsODE5MiwmcHJpdmF0ZS0+dHhfZG1hX2hhbmRsZSk7CiAJaWYgKHByaXZhdGUtPnR4X2J1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGlyY29tX3Byb2JlOiBubyBtZW1vcnkgZm9yIHR4IGJ1ZmZlciBcbiIpOworCQlwcl9lcnIoIiVzOiBubyBtZW1vcnkgZm9yIHR4IGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2J1Zl9mYWlsOwogCX0KIApAQCAtMjgxLDExICsyODMsMTIgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKKwkJcHJfZXJyKCIlczogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byByZWdfZmFpbDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpIFxuIiwgZGV2LT5uYW1lLCBwZGV2LT5yZXZpc2lvbiwgcGRldi0+aXJxKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJYaXJjb20gY2FyZGJ1cyByZXZpc2lvbiAlaSBhdCBpcnEgJWlcbiIsCisJCSBwZGV2LT5yZXZpc2lvbiwgcGRldi0+aXJxKTsKIAkvKiBzdGFydCB0aGUgdHJhbnNtaXR0ZXIgdG8gZ2V0IGEgaGVhcnRiZWF0ICovCiAJLyogVE9ETzogc2VuZCAyIGR1bW15IHBhY2tldHMgaGVyZSAqLwogCXRyYW5zY2VpdmVyX3Zvb2Rvbyhwcml2YXRlKTsKQEAgLTM0Nyw4ICszNTAsMTAgQEAKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRfYmluYXJ5KHN0YXR1cyk7Ci0JcHJpbnRrKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+dHhfYnVmZmVyWzBdLGNhcmQtPnR4X2J1ZmZlcls0XSk7Ci0JcHJpbnRrKCJyeCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+cnhfYnVmZmVyWzBdLGNhcmQtPnJ4X2J1ZmZlcls0XSk7CisJcHJpbnRrKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsCisJICAgICAgIGNhcmQtPnR4X2J1ZmZlclswXSwgY2FyZC0+dHhfYnVmZmVyWzRdKTsKKwlwcmludGsoInJ4IHN0YXR1cyAweCUwOHggMHglMDh4IFxuIiwKKwkgICAgICAgY2FyZC0+cnhfYnVmZmVyWzBdLCBjYXJkLT5yeF9idWZmZXJbNF0pOwogI2VuZGlmCiAJLyogSGFuZGxlIHNoYXJlZCBpcnEgYW5kIGhvdHBsdWcgKi8KIAlpZiAoc3RhdHVzID09IDAgfHwgc3RhdHVzID09IDB4ZmZmZmZmZmYpIHsKQEAgLTM1OCw5ICszNjMsOSBAQAogCiAJaWYgKGxpbmtfc3RhdHVzX2NoYW5nZWQoY2FyZCkpIHsKIAkJaW50IG5ld2xpbms7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ4aXJjb21fY2I6IExpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkIFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICJ4aXJjb21fY2I6IExpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkXG4iKTsKIAkJbmV3bGluayA9IGxpbmtfc3RhdHVzKGNhcmQpOwotCQlwcmludGsoS0VSTl9JTkZPICAieGlyY29tX2NiOiBMaW5rIGlzICVpIG1iaXQgXG4iLG5ld2xpbmspOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJMaW5rIGlzICVpIG1iaXRcbiIsIG5ld2xpbmspOwogCQlpZiAobmV3bGluaykKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJZWxzZQpAQCAtNDU3LDcgKzQ2Miw4IEBACiAJc3RydWN0IHhpcmNvbV9wcml2YXRlICp4cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldHZhbDsKIAllbnRlcigieGlyY29tX29wZW4iKTsKLQlwcmludGsoS0VSTl9JTkZPICJ4aXJjb20gY2FyZGJ1cyBhZGFwdG9yIGZvdW5kLCByZWdpc3RlcmluZyBhcyAlcywgdXNpbmcgaXJxICVpIFxuIixkZXYtPm5hbWUsZGV2LT5pcnEpOworCXByX2luZm8oInhpcmNvbSBjYXJkYnVzIGFkYXB0b3IgZm91bmQsIHJlZ2lzdGVyaW5nIGFzICVzLCB1c2luZyBpcnEgJWkgXG4iLAorCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgeGlyY29tX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWxlYXZlKCJ4aXJjb21fb3BlbiAtIE5vIElSUSIpOwpAQCAtNzcwLDcgKzc3Niw3IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAieGlyY29tX2NiOiBSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CisJCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKIAl9CiAKIAkvKiBlbmFibGUgdGhlIHJlY2VpdmVyICovCkBAIC03ODcsNyArNzkzLDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CiAJfQogCiAJbGVhdmUoImFjdGl2YXRlX3JlY2VpdmVyIik7CkBAIC04MTgsNyArODI0LDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFJlY2VpdmVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOwogCX0KIAogCkBAIC04NjEsNyArODY3LDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOwogCX0KIAogCS8qIGVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KQEAgLTg3OCw3ICs4ODQsNyBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9CiAKIAlsZWF2ZSgiYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKQEAgLTkwOSw3ICs5MTUsNyBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJcHJfZXJyKCJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAKQEAgLTExODQsNyArMTE5MCw3IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1cyBcbiIscGt0X2xlbik7CisJCQkJcHJfZXJyKCJQYWNrZXQgbGVuZ3RoICVpIGlzIGJvZ3VzXG4iLCBwa3RfbGVuKTsKIAkJCQlwa3RfbGVuID0gMTUxODsKIAkJCX0KIApAQCAtMTIyMiw3ICsxMjI4LDcgQEAKIAkJc3RhdHVzID0gbGUzMl90b19jcHUoY2FyZC0+dHhfYnVmZmVyWzQqZGVzY25yXSk7CiAjaWYgMAogCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CS8qIE1ham9yIGVycm9yICovCi0JCQlwcmludGsoS0VSTl9FUlIgIk1ham9yIHRyYW5zbWl0IGVycm9yIHN0YXR1cyAleCBcbiIsIHN0YXR1cyk7CisJCQlwcl9lcnIoIk1ham9yIHRyYW5zbWl0IGVycm9yIHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKIAkJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0gPSAwOwogCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCAyODM0YTAxLi5jZTFlZmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CkBAIC0xNDQsNiArMTQ1LDcgQEAKIAllcnIgPSAwOwogCXRmaWxlLT50dW4gPSB0dW47CiAJdHVuLT50ZmlsZSA9IHRmaWxlOworCXR1bi0+c29ja2V0LmZpbGUgPSBmaWxlOwogCWRldl9ob2xkKHR1bi0+ZGV2KTsKIAlzb2NrX2hvbGQodHVuLT5zb2NrZXQuc2spOwogCWF0b21pY19pbmMoJnRmaWxlLT5jb3VudCk7CkBAIC0xNTgsNiArMTYwLDcgQEAKIAkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCiAJbmV0aWZfdHhfbG9ja19iaCh0dW4tPmRldik7CiAJdHVuLT50ZmlsZSA9IE5VTEw7CisJdHVuLT5zb2NrZXQuZmlsZSA9IE5VTEw7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKIAogCS8qIERyb3AgcmVhZCBxdWV1ZSAqLwpAQCAtMzY0LDYgKzM2NywxMCBAQAogCWlmICghY2hlY2tfZmlsdGVyKCZ0dW4tPnR4Zmx0LCBza2IpKQogCQlnb3RvIGRyb3A7CiAKKwlpZiAodHVuLT5zb2NrZXQuc2stPnNrX2ZpbHRlciAmJgorCSAgICBza19maWx0ZXIodHVuLT5zb2NrZXQuc2ssIHNrYikpCisJCWdvdG8gZHJvcDsKKwogCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnNvY2tldC5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9PTkVfUVVFVUUpKSB7CiAJCQkvKiBOb3JtYWwgcXVldWVpbmcgbW9kZS4gKi8KQEAgLTM4Nyw3ICszOTQsOCBAQAogCS8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqLwogCWlmICh0dW4tPmZsYWdzICYgVFVOX0ZBU1lOQykKIAkJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dW4tPnNvY2tldC53YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHVuLT5zb2NrZXQud2FpdCwgUE9MTElOIHwKKwkJCQkgICBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKQEAgLTc0Myw3ICs3NTEsNyBAQAogCWxlbiA9IG1pbl90KGludCwgc2tiLT5sZW4sIGxlbik7CiAKIAlza2JfY29weV9kYXRhZ3JhbV9jb25zdF9pb3ZlYyhza2IsIDAsIGl2LCB0b3RhbCwgbGVuKTsKLQl0b3RhbCArPSBsZW47CisJdG90YWwgKz0gc2tiLT5sZW47CiAKIAl0dW4tPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCXR1bi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CkBAIC03NTEsMzQgKzc1OSwyMyBAQAogCXJldHVybiB0b3RhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgdHVuX2Nocl9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKK3N0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkgICBzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCisJCQkgICBzc2l6ZV90IGxlbiwgaW50IG5vYmxvY2spCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzc2l6ZV90IGxlbiwgcmV0ID0gMDsKLQotCWlmICghdHVuKQotCQlyZXR1cm4gLUVCQURGRDsKKwlzc2l6ZV90IHJldCA9IDA7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9yZWFkXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJYWRkX3dhaXRfcXVldWUoJnR1bi0+c29ja2V0LndhaXQsICZ3YWl0KTsKIAl3aGlsZSAobGVuKSB7CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwogCiAJCS8qIFJlYWQgZnJhbWVzIGZyb20gdGhlIHF1ZXVlICovCiAJCWlmICghKHNrYj1za2JfZGVxdWV1ZSgmdHVuLT5zb2NrZXQuc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlpZiAobm9ibG9jaykgewogCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04MDUsNiArODAyLDI3IEBACiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnR1bi0+c29ja2V0LndhaXQsICZ3YWl0KTsKIAorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHR1bl9jaHJfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CisJc3NpemVfdCBsZW4sIHJldDsKKworCWlmICghdHVuKQorCQlyZXR1cm4gLUVCQURGRDsKKwlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7CisJaWYgKGxlbiA8IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gdHVuX2RvX3JlYWQodHVuLCBpb2NiLCBpdiwgbGVuLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0ID0gbWluX3Qoc3NpemVfdCwgcmV0LCBsZW4pOwogb3V0OgogCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gcmV0OwpAQCAtODQ3LDcgKzg2NSw4IEBACiAJCXJldHVybjsKIAogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKHNrLT5za19zbGVlcCwgUE9MTE9VVCB8CisJCQkJCQlQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7CiAKIAl0dW4gPSB0dW5fc2soc2spLT50dW47CiAJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9PVVQpOwpAQCAtODU4LDYgKzg3NywzNyBAQAogCWZyZWVfbmV0ZGV2KHR1bl9zayhzayktPnR1bi0+ZGV2KTsKIH0KIAorc3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IHR1bl9zdHJ1Y3QsIHNvY2tldCk7CisJcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIG0tPm1zZ19pb3YsIHRvdGFsX2xlbiwKKwkJCSAgICBtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOworfQorCitzdGF0aWMgaW50IHR1bl9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJICAgICAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sCisJCSAgICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGNvbnRhaW5lcl9vZihzb2NrLCBzdHJ1Y3QgdHVuX3N0cnVjdCwgc29ja2V0KTsKKwlpbnQgcmV0OworCWlmIChmbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19UUlVOQykpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHR1bl9kb19yZWFkKHR1biwgaW9jYiwgbS0+bXNnX2lvdiwgdG90YWxfbGVuLAorCQkJICBmbGFncyAmIE1TR19ET05UV0FJVCk7CisJaWYgKHJldCA+IHRvdGFsX2xlbikgeworCQltLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQlyZXQgPSBmbGFncyAmIE1TR19UUlVOQyA/IHJldCA6IHRvdGFsX2xlbjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogT3BzIHN0cnVjdHVyZSB0byBtaW1pYyByYXcgc29ja2V0cyB3aXRoIHR1biAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdHVuX3NvY2tldF9vcHMgPSB7CisJLnNlbmRtc2cgPSB0dW5fc2VuZG1zZywKKwkucmVjdm1zZyA9IHR1bl9yZWN2bXNnLAorfTsKKwogc3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7CiAJLm5hbWUJCT0gInR1biIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtOTg2LDYgKzEwMzYsNyBAQAogCQkJZ290byBlcnJfZnJlZV9kZXY7CiAKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHVuLT5zb2NrZXQud2FpdCk7CisJCXR1bi0+c29ja2V0Lm9wcyA9ICZ0dW5fc29ja2V0X29wczsKIAkJc29ja19pbml0X2RhdGEoJnR1bi0+c29ja2V0LCBzayk7CiAJCXNrLT5za193cml0ZV9zcGFjZSA9IHR1bl9zb2NrX3dyaXRlX3NwYWNlOwogCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKQEAgLTExMTYsNiArMTE2Nyw3IEBACiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXZvaWQgX191c2VyKiBhcmdwID0gKHZvaWQgX191c2VyKilhcmc7CisJc3RydWN0IHNvY2tfZnByb2cgZnByb2c7CiAJc3RydWN0IGlmcmVxIGlmcjsKIAlpbnQgc25kYnVmOwogCWludCByZXQ7CkBAIC0xMjYzLDYgKzEzMTUsMjYgQEAKIAkJdHVuLT5zb2NrZXQuc2stPnNrX3NuZGJ1ZiA9IHNuZGJ1ZjsKIAkJYnJlYWs7CiAKKwljYXNlIFRVTkFUVEFDSEZJTFRFUjoKKwkJLyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovCisJCXJldCA9IC1FSU5WQUw7CisJCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spICE9IFRVTl9UQVBfREVWKQorCQkJYnJlYWs7CisJCXJldCA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZnByb2csIGFyZ3AsIHNpemVvZihmcHJvZykpKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gc2tfYXR0YWNoX2ZpbHRlcigmZnByb2csIHR1bi0+c29ja2V0LnNrKTsKKwkJYnJlYWs7CisKKwljYXNlIFRVTkRFVEFDSEZJTFRFUjoKKwkJLyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovCisJCXJldCA9IC1FSU5WQUw7CisJCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spICE9IFRVTl9UQVBfREVWKQorCQkJYnJlYWs7CisJCXJldCA9IHNrX2RldGFjaF9maWx0ZXIodHVuLT5zb2NrZXQuc2spOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMTUyNSw2ICsxNTk3LDIzIEBACiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJnR1bl9saW5rX29wcyk7CiB9CiAKKy8qIEdldCBhbiB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QgZnJvbSB0dW4gZmlsZS4gIFJldHVybnMgZXJyb3IgdW5sZXNzIGZpbGUgaXMKKyAqIGF0dGFjaGVkIHRvIGEgZGV2aWNlLiAgVGhlIHJldHVybmVkIG9iamVjdCB3b3JrcyBsaWtlIGEgcGFja2V0IHNvY2tldCwgaXQKKyAqIGNhbiBiZSB1c2VkIGZvciBzb2NrX3NlbmRtc2cvc29ja19yZWN2bXNnLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGZpbGUgZm9yIGFzIGxvbmcgYXMgdGhlIHNvY2tldCBpcyBpbiB1c2UuICovCitzdHJ1Y3Qgc29ja2V0ICp0dW5fZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOworCWlmIChmaWxlLT5mX29wICE9ICZ0dW5fZm9wcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJdHVuID0gdHVuX2dldChmaWxlKTsKKwlpZiAoIXR1bikKKwkJcmV0dXJuIEVSUl9QVFIoLUVCQURGRCk7CisJdHVuX3B1dCh0dW4pOworCXJldHVybiAmdHVuLT5zb2NrZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3NvY2tldCk7CisKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDM5ZjFmYzYuLmUzZGRjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTk4LDE0ICs5OCwxMCBAQAogI2RlZmluZSBUWF9USU1FT1VUICAoMipIWikKIAogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2Ci0KLSNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidHlwaG9vbiIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OIAkiMS41LjkiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWFyIDIsIDIwMDkiCi0jZGVmaW5lIFBGWAkJCURSVl9NT0RVTEVfTkFNRSAiOiAiCi0jZGVmaW5lIEVSUl9QRlgJCQlLRVJOX0VSUiBQRlgKICNkZWZpbmUgRklSTVdBUkVfTkFNRQkJIjNjb20vdHlwaG9vbi5iaW4iCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkJCUtCVUlMRF9NT0ROQU1FICIgIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xMzIsMTQgKzEyOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgogCiAjaW5jbHVkZSAidHlwaG9vbi5oIgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0gICAgInR5cGhvb24uYzogdmVyc2lvbiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKLQogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGlsbG93IDxkYXZlQHRoZWRpbGxvd3Mub3JnPiIpOwotTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKK01PRFVMRV9WRVJTSU9OKFVUU19SRUxFQVNFKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSBUeXBob29uIEZhbWlseSAoM0M5OTAsIDNDUjk5MCwgYW5kIHZhcmlhbnRzKSIpOwpAQCAtMTYxLDggKzE1NSw4IEBACiAjZW5kaWYKIAogc3RydWN0IHR5cGhvb25fY2FyZF9pbmZvIHsKLQljaGFyICpuYW1lOwotCWludCBjYXBhYmlsaXRpZXM7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBpbnQgY2FwYWJpbGl0aWVzOwogfTsKIAogI2RlZmluZSBUWVBIT09OX0NSWVBUT19OT05FCQkweDAwCkBAIC0yMTUsNyArMjA5LDcgQEAKICAqIGJpdCA4IGluZGljYXRlcyBpZiB0aGlzIGlzIGEgKDApIGNvcHBlciBvciAoMSkgZmliZXIgY2FyZAogICogYml0cyAxMi0xNiBpbmRpY2F0ZSBjYXJkIHR5cGU6ICgwKSBjbGllbnQgYW5kICgxKSBzZXJ2ZXIKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHR5cGhvb25fcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHR5cGhvb25fcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEXzNDT00sIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTAsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLFRZUEhPT05fVFggfSwKIAl7IFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MF9UWF85NSwKQEAgLTI5OSw3ICsyOTMsNiBAQAogCXN0cnVjdCBiYXNpY19yaW5nCXJlc3BSaW5nOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzX3NhdmVkOwotCWNvbnN0IGNoYXIgKgkJbmFtZTsKIAlzdHJ1Y3QgdHlwaG9vbl9zaGFyZWQgKglzaGFyZWQ7CiAJZG1hX2FkZHJfdAkJc2hhcmVkX2RtYTsKIAlfX2xlMTYJCQl4Y3ZyX3NlbGVjdDsKQEAgLTUzNCwxMyArNTI3LDEzIEBACiAJCX0gZWxzZSBpZihyZXNwLT5jbWQgPT0gVFlQSE9PTl9DTURfSEVMTE9fUkVTUCkgewogCQkJdHlwaG9vbl9oZWxsbyh0cCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkdW1waW5nIHVuZXhwZWN0ZWQgcmVzcG9uc2UgIgotCQkJICAgICAgICIweCUwNHg6JWQ6MHglMDJ4OjB4JTA0eDolMDh4OiUwOHhcbiIsCi0JCQkgICAgICAgdHAtPm5hbWUsIGxlMTZfdG9fY3B1KHJlc3AtPmNtZCksCi0JCQkgICAgICAgcmVzcC0+bnVtRGVzYywgcmVzcC0+ZmxhZ3MsCi0JCQkgICAgICAgbGUxNl90b19jcHUocmVzcC0+cGFybTEpLAotCQkJICAgICAgIGxlMzJfdG9fY3B1KHJlc3AtPnBhcm0yKSwKLQkJCSAgICAgICBsZTMyX3RvX2NwdShyZXNwLT5wYXJtMykpOworCQkJbmV0ZGV2X2Vycih0cC0+ZGV2LAorCQkJCSAgICJkdW1waW5nIHVuZXhwZWN0ZWQgcmVzcG9uc2UgMHglMDR4OiVkOjB4JTAyeDoweCUwNHg6JTA4eDolMDh4XG4iLAorCQkJCSAgIGxlMTZfdG9fY3B1KHJlc3AtPmNtZCksCisJCQkJICAgcmVzcC0+bnVtRGVzYywgcmVzcC0+ZmxhZ3MsCisJCQkJICAgbGUxNl90b19jcHUocmVzcC0+cGFybTEpLAorCQkJCSAgIGxlMzJfdG9fY3B1KHJlc3AtPnBhcm0yKSwKKwkJCQkgICBsZTMyX3RvX2NwdShyZXNwLT5wYXJtMykpOwogCQl9CiAKIGNsZWFudXA6CkBAIC02MDYsOSArNTk5LDggQEAKIAlmcmVlUmVzcCA9IHR5cGhvb25fbnVtX2ZyZWVfcmVzcCh0cCk7CiAKIAlpZihmcmVlQ21kIDwgbnVtX2NtZCB8fCBmcmVlUmVzcCA8IG51bV9yZXNwKSB7Ci0JCXByaW50aygiJXM6IG5vIGRlc2NzIGZvciBjbWQsIGhhZCAobmVlZGVkKSAlZCAoJWQpIGNtZCwgIgotCQkJIiVkICglZCkgcmVzcFxuIiwgdHAtPm5hbWUsIGZyZWVDbWQsIG51bV9jbWQsCi0JCQlmcmVlUmVzcCwgbnVtX3Jlc3ApOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJubyBkZXNjcyBmb3IgY21kLCBoYWQgKG5lZWRlZCkgJWQgKCVkKSBjbWQsICVkICglZCkgcmVzcFxuIiwKKwkJCSAgIGZyZWVDbWQsIG51bV9jbWQsIGZyZWVSZXNwLCBudW1fcmVzcCk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTczMyw3ICs3MjUsNyBAQAogCQlzcGluX3VubG9ja19iaCgmdHAtPnN0YXRlX2xvY2spOwogCQllcnIgPSB0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpOwogCQlpZihlcnIgPCAwKQotCQkJcHJpbnRrKCIlczogdmxhbiBvZmZsb2FkIGVycm9yICVkXG4iLCB0cC0+bmFtZSwgLWVycik7CisJCQluZXRkZXZfZXJyKHRwLT5kZXYsICJ2bGFuIG9mZmxvYWQgZXJyb3IgJWRcbiIsIC1lcnIpOwogCQlzcGluX2xvY2tfYmgoJnRwLT5zdGF0ZV9sb2NrKTsKIAl9CiAKQEAgLTkyNCwxNyArOTE2LDE1IEBACiAJZmlsdGVyID0gVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQgfCBUWVBIT09OX1JYX0ZJTFRFUl9CUk9BRENBU1Q7CiAJaWYoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWZpbHRlciB8PSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTOwotCX0gZWxzZSBpZigoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlmaWx0ZXIgfD0gVFlQSE9PTl9SWF9GSUxURVJfQUxMX01DQVNUOwotCX0gZWxzZSBpZihkZXYtPm1jX2NvdW50KSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOwogCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYml0ID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4M2Y7CiAJCQltY19maWx0ZXJbYml0ID4+IDVdIHw9IDEgPDwgKGJpdCAmIDB4MWYpOwogCQl9CkBAIC0xMDIwLDcgKzEwMTAsNyBAQAogCQlyZXR1cm4gc2F2ZWQ7CiAKIAlpZih0eXBob29uX2RvX2dldF9zdGF0cyh0cCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGdldHRpbmcgc3RhdHNcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiZXJyb3IgZ2V0dGluZyBzdGF0c1xuIik7CiAJCXJldHVybiBzYXZlZDsKIAl9CiAKQEAgLTEwNjIsOCArMTA1Miw4IEBACiAJCX0KIAl9CiAKLQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOwotCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOworCXN0cmNweShpbmZvLT5kcml2ZXIsIEtCVUlMRF9NT0ROQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgVVRTX1JFTEVBU0UpOwogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUocGNpX2RldikpOwogfQogCkBAIC0xMzY1LDggKzEzNTUsOCBAQAogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmdHlwaG9vbl9mdywgRklSTVdBUkVfTkFNRSwgJnRwLT5wZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAotCQkJCXRwLT5uYW1lLCBGSVJNV0FSRV9OQU1FKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJICAgRklSTVdBUkVfTkFNRSk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNDAxLDcgKzEzOTEsNyBAQAogCXJldHVybiAwOwogCiBpbnZhbGlkX2Z3OgotCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2VcbiIsIHRwLT5uYW1lKTsKKwluZXRkZXZfZXJyKHRwLT5kZXYsICJJbnZhbGlkIGZpcm13YXJlIGltYWdlXG4iKTsKIAlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOwogCXR5cGhvb25fZncgPSBOVUxMOwogCXJldHVybiAtRUlOVkFMOwpAQCAtMTQzOCw3ICsxNDI4LDcgQEAKIAllcnIgPSAtRU5PTUVNOwogCWRwYWdlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUEFHRV9TSVpFLCAmZHBhZ2VfZG1hKTsKIAlpZighZHBhZ2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gRE1BIG1lbSBmb3IgZmlybXdhcmVcbiIsIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAibm8gRE1BIG1lbSBmb3IgZmlybXdhcmVcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC0xNDUxLDcgKzE0NDEsNyBAQAogCiAJZXJyID0gLUVUSU1FRE9VVDsKIAlpZih0eXBob29uX3dhaXRfc3RhdHVzKGlvYWRkciwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfSE9TVCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhcmQgcmVhZHkgdGltZW91dFxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJjYXJkIHJlYWR5IHRpbWVvdXRcbiIpOwogCQlnb3RvIGVycl9vdXRfaXJxOwogCX0KIApAQCAtMTQ5MSw4ICsxNDgxLDcgQEAKIAkJCWlmKHR5cGhvb25fd2FpdF9pbnRlcnJ1cHQoaW9hZGRyKSA8IDAgfHwKIAkJCSAgIGlvcmVhZDMyKGlvYWRkciArIFRZUEhPT05fUkVHX1NUQVRVUykgIT0KIAkJCSAgIFRZUEhPT05fU1RBVFVTX1dBSVRJTkdfRk9SX1NFR01FTlQpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZWdtZW50IHJlYWR5IHRpbWVvdXRcbiIsCi0JCQkJICAgICAgIHRwLT5uYW1lKTsKKwkJCQluZXRkZXZfZXJyKHRwLT5kZXYsICJzZWdtZW50IHJlYWR5IHRpbWVvdXRcbiIpOwogCQkJCWdvdG8gZXJyX291dF9pcnE7CiAJCQl9CiAKQEAgLTE1MDIsOCArMTQ5MSw4IEBACiAJCQkgKiB0aGUgY2hlY2tzdW0sIHdlIGNhbiBkbyB0aGlzIG9uY2UsIGF0IHRoZSBlbmQuCiAJCQkgKi8KIAkJCWNzdW0gPSBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhpbWFnZV9kYXRhLAotCQkJCQkJCQkgIGRwYWdlLCBsZW4sCi0JCQkJCQkJCSAgMCkpOworCQkJCQkJCQkgICBkcGFnZSwgbGVuLAorCQkJCQkJCQkgICAwKSk7CiAKIAkJCWlvd3JpdGUzMihsZW4sIGlvYWRkciArIFRZUEhPT05fUkVHX0JPT1RfTEVOR1RIKTsKIAkJCWlvd3JpdGUzMihsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpY3N1bSksCkBAIC0xNTE0LDcgKzE1MDMsNyBAQAogCQkJaW93cml0ZTMyKGRwYWdlX2RtYSwgaW9hZGRyICsgVFlQSE9PTl9SRUdfQk9PVF9EQVRBX0xPKTsKIAkJCXR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKGlvYWRkcik7CiAJCQlpb3dyaXRlMzIoVFlQSE9PTl9CT09UQ01EX1NFR19BVkFJTEFCTEUsCi0JCQkgICAgICAgaW9hZGRyICsgVFlQSE9PTl9SRUdfQ09NTUFORCk7CisJCQkJCWlvYWRkciArIFRZUEhPT05fUkVHX0NPTU1BTkQpOwogCiAJCQlpbWFnZV9kYXRhICs9IGxlbjsKIAkJCWxvYWRfYWRkciArPSBsZW47CkBAIC0xNTI1LDE1ICsxNTE0LDE1IEBACiAJaWYodHlwaG9vbl93YWl0X2ludGVycnVwdChpb2FkZHIpIDwgMCB8fAogCSAgIGlvcmVhZDMyKGlvYWRkciArIFRZUEhPT05fUkVHX1NUQVRVUykgIT0KIAkgICBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9TRUdNRU5UKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZpbmFsIHNlZ21lbnQgcmVhZHkgdGltZW91dFxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJmaW5hbCBzZWdtZW50IHJlYWR5IHRpbWVvdXRcbiIpOwogCQlnb3RvIGVycl9vdXRfaXJxOwogCX0KIAogCWlvd3JpdGUzMihUWVBIT09OX0JPT1RDTURfRE5MRF9DT01QTEVURSwgaW9hZGRyICsgVFlQSE9PTl9SRUdfQ09NTUFORCk7CiAKIAlpZih0eXBob29uX3dhaXRfc3RhdHVzKGlvYWRkciwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfQk9PVCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvb3QgcmVhZHkgdGltZW91dCwgc3RhdHVzIDB4JTB4XG4iLAotCQkgICAgICAgdHAtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIFRZUEhPT05fUkVHX1NUQVRVUykpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJib290IHJlYWR5IHRpbWVvdXQsIHN0YXR1cyAweCUweFxuIiwKKwkJCSAgIGlvcmVhZDMyKGlvYWRkciArIFRZUEhPT05fUkVHX1NUQVRVUykpOwogCQlnb3RvIGVycl9vdXRfaXJxOwogCX0KIApAQCAtMTU1NSw3ICsxNTQ0LDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5pb2FkZHI7CiAKIAlpZih0eXBob29uX3dhaXRfc3RhdHVzKGlvYWRkciwgaW5pdGlhbF9zdGF0dXMpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBib290IHJlYWR5IHRpbWVvdXRcbiIsIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiYm9vdCByZWFkeSB0aW1lb3V0XG4iKTsKIAkJZ290byBvdXRfdGltZW91dDsKIAl9CiAKQEAgLTE1NjYsOCArMTU1NSw4IEBACiAJCQkJaW9hZGRyICsgVFlQSE9PTl9SRUdfQ09NTUFORCk7CiAKIAlpZih0eXBob29uX3dhaXRfc3RhdHVzKGlvYWRkciwgVFlQSE9PTl9TVEFUVVNfUlVOTklORykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvb3QgZmluaXNoIHRpbWVvdXQgKHN0YXR1cyAweCV4KVxuIiwKLQkJICAgICAgIHRwLT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBUWVBIT09OX1JFR19TVEFUVVMpKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiYm9vdCBmaW5pc2ggdGltZW91dCAoc3RhdHVzIDB4JXgpXG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgVFlQSE9PTl9SRUdfU1RBVFVTKSk7CiAJCWdvdG8gb3V0X3RpbWVvdXQ7CiAJfQogCkBAIC0xODY2LDggKzE4NTUsNyBAQAogCQl0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyhpb2FkZHIpOwogCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIik7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE5MDAsMTYgKzE4ODgsMTUgQEAKIAl4cF9jbWQucGFybTEgPSBldmVudHM7CiAJZXJyID0gdHlwaG9vbl9pc3N1ZV9jb21tYW5kKHRwLCAxLCAmeHBfY21kLCAwLCBOVUxMKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHR5cGhvb25fc2xlZXAoKTogd2FrZSBldmVudHMgY21kIGVyciAlZFxuIiwKLQkJCQl0cC0+bmFtZSwgZXJyKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAidHlwaG9vbl9zbGVlcCgpOiB3YWtlIGV2ZW50cyBjbWQgZXJyICVkXG4iLAorCQkJICAgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlJTklUX0NPTU1BTkRfTk9fUkVTUE9OU0UoJnhwX2NtZCwgVFlQSE9PTl9DTURfR09UT19TTEVFUCk7CiAJZXJyID0gdHlwaG9vbl9pc3N1ZV9jb21tYW5kKHRwLCAxLCAmeHBfY21kLCAwLCBOVUxMKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHR5cGhvb25fc2xlZXAoKTogc2xlZXAgY21kIGVyciAlZFxuIiwKLQkJCQl0cC0+bmFtZSwgZXJyKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAidHlwaG9vbl9zbGVlcCgpOiBzbGVlcCBjbWQgZXJyICVkXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTk2MCwxMiArMTk0NywxMiBAQAogCiAJZXJyID0gdHlwaG9vbl9kb3dubG9hZF9maXJtd2FyZSh0cCk7CiAJaWYoZXJyIDwgMCkgewotCQlwcmludGsoIiVzOiBjYW5ub3QgbG9hZCBydW50aW1lIG9uIDNYUFxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJjYW5ub3QgbG9hZCBydW50aW1lIG9uIDNYUFxuIik7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAogCWlmKHR5cGhvb25fYm9vdF8zWFAodHAsIFRZUEhPT05fU1RBVFVTX1dBSVRJTkdfRk9SX0JPT1QpIDwgMCkgewotCQlwcmludGsoIiVzOiBjYW5ub3QgYm9vdCAzWFBcbiIsIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiY2Fubm90IGJvb3QgM1hQXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQpAQCAtMjA2OSw5ICsyMDU2LDcgQEAKIAl9CiAKIAlpZihpID09IFRZUEhPT05fV0FJVF9USU1FT1VUKQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogaGFsdCB0aW1lZCBvdXQgd2FpdGluZyBmb3IgVHggdG8gY29tcGxldGVcbiIsCi0JCSAgICAgICB0cC0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImhhbHQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIFR4IHRvIGNvbXBsZXRlXG4iKTsKIAogCUlOSVRfQ09NTUFORF9OT19SRVNQT05TRSgmeHBfY21kLCBUWVBIT09OX0NNRF9UWF9ESVNBQkxFKTsKIAl0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpOwpAQCAtMjA4OCwxMSArMjA3MywxMCBAQAogCXR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAKIAlpZih0eXBob29uX3dhaXRfc3RhdHVzKGlvYWRkciwgVFlQSE9PTl9TVEFUVVNfSEFMVEVEKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciAzWFAgdG8gaGFsdFxuIiwKLQkJICAgICAgIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIDNYUCB0byBoYWx0XG4iKTsKIAogCWlmKHR5cGhvb25fcmVzZXQoaW9hZGRyLCB3YWl0X3R5cGUpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gcmVzZXQgM1hQXG4iLCB0cC0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgInVuYWJsZSB0byByZXNldCAzWFBcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKQEAgLTIxMTEsOCArMjA5NSw3IEBACiAJc3RydWN0IHR5cGhvb24gKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmKHR5cGhvb25fcmVzZXQodHAtPmlvYWRkciwgV2FpdE5vU2xlZXApIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY291bGQgbm90IHJlc2V0IGluIHR4IHRpbWVvdXRcbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl93YXJuKGRldiwgImNvdWxkIG5vdCByZXNldCBpbiB0eCB0aW1lb3V0XG4iKTsKIAkJZ290byB0cnVlbHlfZGVhZDsKIAl9CiAKQEAgLTIxMjEsOCArMjEwNCw3IEBACiAJdHlwaG9vbl9mcmVlX3J4X3JpbmdzKHRwKTsKIAogCWlmKHR5cGhvb25fc3RhcnRfcnVudGltZSh0cCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBzdGFydCBydW50aW1lIGluIHR4IHRpbWVvdXRcbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiY291bGQgbm90IHN0YXJ0IHJ1bnRpbWUgaW4gdHggdGltZW91dFxuIik7CiAJCWdvdG8gdHJ1ZWx5X2RlYWQ7CiAgICAgICAgIH0KIApAQCAtMjE0Nyw3ICsyMTI5LDcgQEAKIAogCWVyciA9IHR5cGhvb25fd2FrZXVwKHRwLCBXYWl0U2xlZXApOwogCWlmKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHdha2V1cCBkZXZpY2VcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHdha2V1cCBkZXZpY2VcbiIpOwogCQlnb3RvIG91dF9zbGVlcDsKIAl9CiAKQEAgLTIxNzIsMTQgKzIxNTQsMTMgQEAKIAogb3V0X3NsZWVwOgogCWlmKHR5cGhvb25fYm9vdF8zWFAodHAsIFRZUEhPT05fU1RBVFVTX1dBSVRJTkdfRk9SX0hPU1QpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gcmVib290IGludG8gc2xlZXAgaW1nXG4iLAotCQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJlYm9vdCBpbnRvIHNsZWVwIGltZ1xuIik7CiAJCXR5cGhvb25fcmVzZXQodHAtPmlvYWRkciwgTm9XYWl0KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYodHlwaG9vbl9zbGVlcCh0cCwgUENJX0QzaG90LCAwKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnbyBiYWNrIHRvIHNsZWVwXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBnbyBiYWNrIHRvIHNsZWVwXG4iKTsKIAogb3V0OgogCXJldHVybiBlcnI7CkBAIC0yMTk0LDcgKzIxNzUsNyBAQAogCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwogCiAJaWYodHlwaG9vbl9zdG9wX3J1bnRpbWUodHAsIFdhaXRTbGVlcCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc3RvcCBydW50aW1lXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBzdG9wIHJ1bnRpbWVcbiIpOwogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIG5vIGlycSBoYW5kbGVyIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgQ1BVLiAqLwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwpAQCAtMjIwMywxMCArMjE4NCwxMCBAQAogCXR5cGhvb25faW5pdF9yaW5ncyh0cCk7CiAKIAlpZih0eXBob29uX2Jvb3RfM1hQKHRwLCBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9IT1NUKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBib290IHNsZWVwIGltYWdlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBib290IHNsZWVwIGltYWdlXG4iKTsKIAogCWlmKHR5cGhvb25fc2xlZXAodHAsIFBDSV9EM2hvdCwgMCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gcHV0IGNhcmQgdG8gc2xlZXBcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHB1dCBjYXJkIHRvIHNsZWVwXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjIyNCwxNCArMjIwNSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCWlmKHR5cGhvb25fd2FrZXVwKHRwLCBXYWl0Tm9TbGVlcCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNyaXRpY2FsOiBjb3VsZCBub3Qgd2FrZSB1cCBpbiByZXN1bWVcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJjcml0aWNhbDogY291bGQgbm90IHdha2UgdXAgaW4gcmVzdW1lXG4iKTsKIAkJZ290byByZXNldDsKIAl9CiAKIAlpZih0eXBob29uX3N0YXJ0X3J1bnRpbWUodHApIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjcml0aWNhbDogY291bGQgbm90IHN0YXJ0IHJ1bnRpbWUgaW4gIgotCQkJCSJyZXN1bWVcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiY3JpdGljYWw6IGNvdWxkIG5vdCBzdGFydCBydW50aW1lIGluIHJlc3VtZVxuIik7CiAJCWdvdG8gcmVzZXQ7CiAJfQogCkBAIC0yMjU4LDggKzIyMzcsNyBAQAogCXNwaW5fbG9ja19iaCgmdHAtPnN0YXRlX2xvY2spOwogCWlmKHRwLT52bGdycCAmJiB0cC0+d29sX2V2ZW50cyAmIFRZUEhPT05fV0FLRV9NQUdJQ19QS1QpIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnRwLT5zdGF0ZV9sb2NrKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGRvIFdBS0VfTUFHSUMgd2l0aCBWTEFOU1xuIiwKLQkJCQlkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgImNhbm5vdCBkbyBXQUtFX01BR0lDIHdpdGggVkxBTlNcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlzcGluX3VubG9ja19iaCgmdHAtPnN0YXRlX2xvY2spOwpAQCAtMjI2Nyw3ICsyMjQ1LDcgQEAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlpZih0eXBob29uX3N0b3BfcnVudGltZSh0cCwgV2FpdE5vU2xlZXApIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc3RvcCBydW50aW1lXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBzdG9wIHJ1bnRpbWVcbiIpOwogCQlnb3RvIG5lZWRfcmVzdW1lOwogCX0KIApAQCAtMjI3NSw3ICsyMjUzLDcgQEAKIAl0eXBob29uX2luaXRfcmluZ3ModHApOwogCiAJaWYodHlwaG9vbl9ib290XzNYUCh0cCwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfSE9TVCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBib290IHNsZWVwIGltYWdlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBib290IHNsZWVwIGltYWdlXG4iKTsKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CiAKQEAgLTIyODMsMjEgKzIyNjEsMTkgQEAKIAl4cF9jbWQucGFybTEgPSBjcHVfdG9fbGUxNihudG9ocygqKF9fYmUxNiAqKSZkZXYtPmRldl9hZGRyWzBdKSk7CiAJeHBfY21kLnBhcm0yID0gY3B1X3RvX2xlMzIobnRvaGwoKihfX2JlMzIgKikmZGV2LT5kZXZfYWRkclsyXSkpOwogCWlmKHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzZXQgbWFjIGFkZHJlc3MgaW4gc3VzcGVuZFxuIiwKLQkJCQlkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBzZXQgbWFjIGFkZHJlc3MgaW4gc3VzcGVuZFxuIik7CiAJCWdvdG8gbmVlZF9yZXN1bWU7CiAJfQogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIpOwogCXhwX2NtZC5wYXJtMSA9IFRZUEhPT05fUlhfRklMVEVSX0RJUkVDVEVEIHwgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUOwogCWlmKHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzZXQgcnggZmlsdGVyIGluIHN1c3BlbmRcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc2V0IHJ4IGZpbHRlciBpbiBzdXNwZW5kXG4iKTsKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CiAKIAlpZih0eXBob29uX3NsZWVwKHRwLCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSwgdHAtPndvbF9ldmVudHMpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gcHV0IGNhcmQgdG8gc2xlZXBcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHB1dCBjYXJkIHRvIHNsZWVwXG4iKTsKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CiAKQEAgLTIzNTEsNyArMjMyNyw3IEBACiAKIG91dDoKIAlpZighbW9kZSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhbGxpbmcgYmFjayB0byBwb3J0IElPXG4iKTsKKwkJcHJfaW5mbygiJXM6IGZhbGxpbmcgYmFjayB0byBwb3J0IElPXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJcmV0dXJuIG1vZGU7CiB9CiAKQEAgLTIzNzEsNyArMjM0Nyw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogdHlwaG9vbl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGF0aWMgaW50IGRpZF92ZXJzaW9uID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB0eXBob29uICp0cDsKIAlpbnQgY2FyZF9pZCA9IChpbnQpIGVudC0+ZHJpdmVyX2RhdGE7CkBAIC0yMzgxLDE0ICsyMzU2LDExIEBACiAJc3RydWN0IGNtZF9kZXNjIHhwX2NtZDsKIAlzdHJ1Y3QgcmVzcF9kZXNjIHhwX3Jlc3BbM107CiAJaW50IGVyciA9IDA7Ci0KLQlpZighZGlkX3ZlcnNpb24rKykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwljb25zdCBjaGFyICplcnJfbXNnOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCp0cCkpOwogCWlmKGRldiA9PSBOVUxMKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogdW5hYmxlIHRvIGFsbG9jIG5ldyBuZXQgZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gInVuYWJsZSB0byBhbGxvYyBuZXcgbmV0IGRldmljZSI7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KQEAgLTIzOTYsNTcgKzIzNjgsNDggQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmKGVyciA8IDApIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiB1bmFibGUgdG8gZW5hYmxlIGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJ1bmFibGUgdG8gZW5hYmxlIGRldmljZSI7CiAJCWdvdG8gZXJyb3Jfb3V0X2RldjsKIAl9CiAKIAllcnIgPSBwY2lfc2V0X213aShwZGV2KTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogdW5hYmxlIHRvIHNldCBNV0lcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJ1bmFibGUgdG8gc2V0IE1XSSI7CiAJCWdvdG8gZXJyb3Jfb3V0X2Rpc2FibGU7CiAJfQogCiAJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiI7CiAJCWdvdG8gZXJyb3Jfb3V0X213aTsKIAl9CiAKIAkvKiBzYW5pdHkgY2hlY2tzIG9uIElPIGFuZCBNTUlPIEJBUnMKIAkgKi8KIAlpZighKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfSU8pKSB7Ci0JCXByaW50ayhFUlJfUEZYCi0JCSAgICAgICAiJXM6IHJlZ2lvbiAjMSBub3QgYSBQQ0kgSU8gcmVzb3VyY2UsIGFib3J0aW5nXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gInJlZ2lvbiAjMSBub3QgYSBQQ0kgSU8gcmVzb3VyY2UsIGFib3J0aW5nIjsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9vdXRfbXdpOwogCX0KIAlpZihwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIDwgMTI4KSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogSW52YWxpZCBQQ0kgSU8gcmVnaW9uIHNpemUsIGFib3J0aW5nXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gIkludmFsaWQgUENJIElPIHJlZ2lvbiBzaXplLCBhYm9ydGluZyI7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyb3Jfb3V0X213aTsKIAl9CiAJaWYoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSkgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJcHJpbnRrKEVSUl9QRlgKLQkJICAgICAgICIlczogcmVnaW9uICMxIG5vdCBhIFBDSSBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJyZWdpb24gIzEgbm90IGEgUENJIE1NSU8gcmVzb3VyY2UsIGFib3J0aW5nIjsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9vdXRfbXdpOwogCX0KIAlpZihwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpIDwgMTI4KSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogSW52YWxpZCBQQ0kgTU1JTyByZWdpb24gc2l6ZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiSW52YWxpZCBQQ0kgTU1JTyByZWdpb24gc2l6ZSwgYWJvcnRpbmciOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yX291dF9td2k7CiAJfQogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAidHlwaG9vbiIpOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpOwogCWlmKGVyciA8IDApIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiBjb3VsZCBub3QgcmVxdWVzdCByZWdpb25zXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gImNvdWxkIG5vdCByZXF1ZXN0IHJlZ2lvbnMiOwogCQlnb3RvIGVycm9yX291dF9td2k7CiAJfQogCkBAIC0yNDU3LDggKzI0MjAsNyBAQAogCiAJaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIHVzZV9tbWlvLCAxMjgpOwogCWlmICghaW9hZGRyKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY2Fubm90IHJlbWFwIHJlZ2lzdGVycywgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiY2Fubm90IHJlbWFwIHJlZ2lzdGVycywgYWJvcnRpbmciOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX291dF9yZWdpb25zOwogCX0KQEAgLTI0NjgsOCArMjQzMCw3IEBACiAJc2hhcmVkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHN0cnVjdCB0eXBob29uX3NoYXJlZCksCiAJCQkJICAgICAgJnNoYXJlZF9kbWEpOwogCWlmKCFzaGFyZWQpIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgRE1BIG1lbW9yeVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJjb3VsZCBub3QgYWxsb2NhdGUgRE1BIG1lbW9yeSI7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3Jfb3V0X3JlbWFwOwogCX0KQEAgLTI0OTIsNyArMjQ1Myw3IEBACiAJICogNSkgUHV0IHRoZSBjYXJkIHRvIHNsZWVwLgogCSAqLwogCWlmICh0eXBob29uX3Jlc2V0KGlvYWRkciwgV2FpdFNsZWVwKSA8IDApIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiBjb3VsZCBub3QgcmVzZXQgM1hQXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiY291bGQgbm90IHJlc2V0IDNYUCI7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0X2RtYTsKIAl9CkBAIC0yNTA0LDI2ICsyNDY1LDE4IEBACiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKLQkvKiBkZXYtPm5hbWUgaXMgbm90IHZhbGlkIHVudGlsIHdlIHJlZ2lzdGVyLCBidXQgd2UgbmVlZCB0bwotCSAqIHVzZSBzb21lIGNvbW1vbiByb3V0aW5lcyB0byBpbml0aWFsaXplIHRoZSBjYXJkLiBTbyB0aGF0IHRob3NlCi0JICogcm91dGluZXMgcHJpbnQgdGhlIHJpZ2h0IG5hbWUsIHdlIGtlZXAgb3VyIG91biBwb2ludGVyIHRvIHRoZSBuYW1lCi0JICovCi0JdHAtPm5hbWUgPSBwY2lfbmFtZShwZGV2KTsKLQogCXR5cGhvb25faW5pdF9pbnRlcmZhY2UodHApOwogCXR5cGhvb25faW5pdF9yaW5ncyh0cCk7CiAKIAlpZih0eXBob29uX2Jvb3RfM1hQKHRwLCBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9IT1NUKSA8IDApIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiBjYW5ub3QgYm9vdCAzWFAgc2xlZXAgaW1hZ2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiY2Fubm90IGJvb3QgM1hQIHNsZWVwIGltYWdlIjsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJvcl9vdXRfcmVzZXQ7CiAJfQogCiAJSU5JVF9DT01NQU5EX1dJVEhfUkVTUE9OU0UoJnhwX2NtZCwgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUyk7CiAJaWYodHlwaG9vbl9pc3N1ZV9jb21tYW5kKHRwLCAxLCAmeHBfY21kLCAxLCB4cF9yZXNwKSA8IDApIHsKLQkJcHJpbnRrKEVSUl9QRlggIiVzOiBjYW5ub3QgcmVhZCBNQUMgYWRkcmVzc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJjYW5ub3QgcmVhZCBNQUMgYWRkcmVzcyI7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0X3Jlc2V0OwogCX0KQEAgLTI1MzIsOCArMjQ4NSw3IEBACiAJKihfX2JlMzIgKikmZGV2LT5kZXZfYWRkclsyXSA9IGh0b25sKGxlMzJfdG9fY3B1KHhwX3Jlc3BbMF0ucGFybTIpKTsKIAogCWlmKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogQ291bGQgbm90IG9idGFpbiB2YWxpZCBldGhlcm5ldCBhZGRyZXNzLCAiCi0JCSAgICAgICAiYWJvcnRpbmdcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJDb3VsZCBub3Qgb2J0YWluIHZhbGlkIGV0aGVybmV0IGFkZHJlc3MsIGFib3J0aW5nIjsKIAkJZ290byBlcnJvcl9vdXRfcmVzZXQ7CiAJfQogCkBAIC0yNTQyLDggKzI0OTQsNyBAQAogCSAqLwogCUlOSVRfQ09NTUFORF9XSVRIX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1JFQURfVkVSU0lPTlMpOwogCWlmKHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMywgeHBfcmVzcCkgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogQ291bGQgbm90IGdldCBTbGVlcCBJbWFnZSB2ZXJzaW9uXG4iLAotCQkJcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gIkNvdWxkIG5vdCBnZXQgU2xlZXAgSW1hZ2UgdmVyc2lvbiI7CiAJCWdvdG8gZXJyb3Jfb3V0X3Jlc2V0OwogCX0KIApAQCAtMjU2MCw4ICsyNTExLDcgQEAKIAkJdHAtPmNhcGFiaWxpdGllcyB8PSBUWVBIT09OX1dBS0VVUF9ORUVEU19SRVNFVDsKIAogCWlmKHR5cGhvb25fc2xlZXAodHAsIFBDSV9EM2hvdCwgMCkgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY2Fubm90IHB1dCBhZGFwdGVyIHRvIHNsZWVwXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gImNhbm5vdCBwdXQgYWRhcHRlciB0byBzbGVlcCI7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0X3Jlc2V0OwogCX0KQEAgLTI1ODAsMTkgKzI1MzAsMTggQEAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCi0JaWYocmVnaXN0ZXJfbmV0ZGV2KGRldikgPCAwKQorCWlmKHJlZ2lzdGVyX25ldGRldihkZXYpIDwgMCkgeworCQllcnJfbXNnID0gInVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYiOwogCQlnb3RvIGVycm9yX291dF9yZXNldDsKLQotCS8qIGZpeHVwIG91ciBsb2NhbCBuYW1lICovCi0JdHAtPm5hbWUgPSBkZXYtPm5hbWU7CisJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgJXMgMHglbGx4LCAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgdHlwaG9vbl9jYXJkX2luZm9bY2FyZF9pZF0ubmFtZSwKLQkgICAgICAgdXNlX21taW8gPyAiTU1JTyIgOiAiSU8iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCB1c2VfbW1pbyksCi0JICAgICAgIGRldi0+ZGV2X2FkZHIpOworCW5ldGRldl9pbmZvKGRldiwgIiVzIGF0ICVzIDB4JWxseCwgJXBNXG4iLAorCQkgICAgdHlwaG9vbl9jYXJkX2luZm9bY2FyZF9pZF0ubmFtZSwKKwkJICAgIHVzZV9tbWlvID8gIk1NSU8iIDogIklPIiwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHVzZV9tbWlvKSwKKwkJICAgIGRldi0+ZGV2X2FkZHIpOwogCiAJLyogeHBfcmVzcCBzdGlsbCBjb250YWlucyB0aGUgcmVzcG9uc2UgdG8gdGhlIFJFQURfVkVSU0lPTlMgY29tbWFuZC4KIAkgKiBGb3IgZGVidWdnaW5nLCBsZXQgdGhlIHVzZXIga25vdyB3aGF0IHZlcnNpb24gaGUgaGFzLgpAQCAtMjYwMiwyMyArMjU1MSwyMCBAQAogCQkgKiBvZiB2ZXJzaW9uIGlzIE1vbnRoL0RheSBvZiBidWlsZC4KIAkJICovCiAJCXUxNiBtb250aGRheSA9IGxlMzJfdG9fY3B1KHhwX3Jlc3BbMF0ucGFybTIpICYgMHhmZmZmOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVHlwaG9vbiAxLjAgU2xlZXAgSW1hZ2UgYnVpbHQgIgotCQkJIiUwMnUvJTAydS8yMDAwXG4iLCBkZXYtPm5hbWUsIG1vbnRoZGF5ID4+IDgsCi0JCQltb250aGRheSAmIDB4ZmYpOworCQluZXRkZXZfaW5mbyhkZXYsICJUeXBob29uIDEuMCBTbGVlcCBJbWFnZSBidWlsdCAlMDJ1LyUwMnUvMjAwMFxuIiwKKwkJCSAgICBtb250aGRheSA+PiA4LCBtb250aGRheSAmIDB4ZmYpOwogCX0gZWxzZSBpZih4cF9yZXNwWzBdLm51bURlc2MgPT0gMikgewogCQkvKiBUaGlzIGlzIHRoZSBUeXBob29uIDEuMSsgdHlwZSBTbGVlcCBJbWFnZQogCQkgKi8KIAkJdTMyIHNsZWVwX3ZlciA9IGxlMzJfdG9fY3B1KHhwX3Jlc3BbMF0ucGFybTIpOwogCQl1OCAqdmVyX3N0cmluZyA9ICh1OCAqKSAmeHBfcmVzcFsxXTsKIAkJdmVyX3N0cmluZ1syNV0gPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVHlwaG9vbiAxLjErIFNsZWVwIEltYWdlIHZlcnNpb24gIgotCQkJIiUwMnguJTAzeC4lMDN4ICVzXG4iLCBkZXYtPm5hbWUsIHNsZWVwX3ZlciA+PiAyNCwKLQkJCShzbGVlcF92ZXIgPj4gMTIpICYgMHhmZmYsIHNsZWVwX3ZlciAmIDB4ZmZmLAotCQkJdmVyX3N0cmluZyk7CisJCW5ldGRldl9pbmZvKGRldiwgIlR5cGhvb24gMS4xKyBTbGVlcCBJbWFnZSB2ZXJzaW9uICUwMnguJTAzeC4lMDN4ICVzXG4iLAorCQkJICAgIHNsZWVwX3ZlciA+PiAyNCwgKHNsZWVwX3ZlciA+PiAxMikgJiAweGZmZiwKKwkJCSAgICBzbGVlcF92ZXIgJiAweGZmZiwgdmVyX3N0cmluZyk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gU2xlZXAgSW1hZ2UgdmVyc2lvbiAiCi0JCQkiKCV1OiUwNHgpXG4iLCBkZXYtPm5hbWUsIHhwX3Jlc3BbMF0ubnVtRGVzYywKLQkJCWxlMzJfdG9fY3B1KHhwX3Jlc3BbMF0ucGFybTIpKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAiVW5rbm93biBTbGVlcCBJbWFnZSB2ZXJzaW9uICgldTolMDR4KVxuIiwKKwkJCSAgICB4cF9yZXNwWzBdLm51bURlc2MsIGxlMzJfdG9fY3B1KHhwX3Jlc3BbMF0ucGFybTIpKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2NDAsNiArMjU4Niw3IEBACiBlcnJvcl9vdXRfZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CiBlcnJvcl9vdXQ6CisJcHJfZXJyKCIlczogJXNcbiIsIHBjaV9uYW1lKHBkZXYpLCBlcnJfbXNnKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjY0LDcgKzI2MTEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHlwaG9vbl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAorCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IHR5cGhvb25fcGNpX3RibCwKIAkucHJvYmUJCT0gdHlwaG9vbl9pbml0X29uZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHR5cGhvb25fcmVtb3ZlX29uZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCBlYjhmZTdlLi4yM2E5NzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vcWUuaD4KICNpbmNsdWRlIDxhc20vdWNjLmg+CiAjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCiAjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKQEAgLTEzMzQsNyArMTMzNSw3IEBACiAJc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7CiAJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJaW50IHJldF92YWw7Ci0JdTMyIHVwc21yLCBtYWNjZmcyLCB0YmlCYXNlQWRkcmVzczsKKwl1MzIgdXBzbXIsIG1hY2NmZzI7CiAJdTE2IHZhbHVlOwogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19mdW5jX18pOwpAQCAtMTM4OSwxNCArMTM5MCwyMCBAQAogCS8qIE5vdGUgdGhhdCB0aGlzIGRlcGVuZHMgb24gcHJvcGVyIHNldHRpbmcgaW4gdXRiaXBhciByZWdpc3Rlci4gKi8KIAlpZiAoKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UQkkpIHx8CiAJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUlRCSSkpIHsKLQkJdGJpQmFzZUFkZHJlc3MgPSBpbl9iZTMyKCZ1Z19yZWdzLT51dGJpcGFyKTsKLQkJdGJpQmFzZUFkZHJlc3MgJj0gVVRCSVBBUl9QSFlfQUREUkVTU19NQVNLOwotCQl0YmlCYXNlQWRkcmVzcyA+Pj0gVVRCSVBBUl9QSFlfQUREUkVTU19TSElGVDsKLQkJdmFsdWUgPSB1Z2V0aC0+cGh5ZGV2LT5idXMtPnJlYWQodWdldGgtPnBoeWRldi0+YnVzLAotCQkJCSh1OCkgdGJpQmFzZUFkZHJlc3MsIEVORVRfVEJJX01JSV9DUik7CisJCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gdWdldGgtPnVnX2luZm87CisJCXN0cnVjdCBwaHlfZGV2aWNlICp0YmlwaHk7CisKKwkJaWYgKCF1Z19pbmZvLT50Ymlfbm9kZSkKKwkJCXVnZXRoX3dhcm4oIlRCSSBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIGRldmljZSAiCisJCQkJInRyZWUgc3BlY2lmeSBhIHRiaS1oYW5kbGVcbiIpOworCisJCXRiaXBoeSA9IG9mX3BoeV9maW5kX2RldmljZSh1Z19pbmZvLT50Ymlfbm9kZSk7CisJCWlmICghdGJpcGh5KQorCQkJdWdldGhfd2FybigiQ291bGQgbm90IGdldCBUQkkgZGV2aWNlXG4iKTsKKworCQl2YWx1ZSA9IHBoeV9yZWFkKHRiaXBoeSwgRU5FVF9UQklfTUlJX0NSKTsKIAkJdmFsdWUgJj0gfjB4MTAwMDsJLyogVHVybiBvZmYgYXV0b25lZ290aWF0aW9uICovCi0JCXVnZXRoLT5waHlkZXYtPmJ1cy0+d3JpdGUodWdldGgtPnBoeWRldi0+YnVzLAotCQkJCSh1OCkgdGJpQmFzZUFkZHJlc3MsIEVORVRfVEJJX01JSV9DUiwgdmFsdWUpOworCQlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfQ1IsIHZhbHVlKTsKIAl9CiAKIAlpbml0X2NoZWNrX2ZyYW1lX2xlbmd0aF9tb2RlKHVnX2luZm8tPmxlbmd0aENoZWNrUngsICZ1Z19yZWdzLT5tYWNjZmcyKTsKQEAgLTE5OTUsNyArMjAwMiw2IEBACiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSBfX2lvbWVtICpwXzgyeHhfYWRkcl9maWx0OwotCWludCBpOwogCiAJdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0yMDIyLDEwICsyMDI4LDcgQEAKIAkJCW91dF9iZTMyKCZwXzgyeHhfYWRkcl9maWx0LT5nYWRkcl9oLCAweDApOwogCQkJb3V0X2JlMzIoJnBfODJ4eF9hZGRyX2ZpbHQtPmdhZGRyX2wsIDB4MCk7CiAKLQkJCWRtaSA9IGRldi0+bWNfbGlzdDsKLQotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgZG1pID0gZG1pLT5uZXh0KSB7Ci0KKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJLyogT25seSBzdXBwb3J0IGdyb3VwIG11bHRpY2FzdCBmb3Igbm93LgogCQkJCSAqLwogCQkJCWlmICghKGRtaS0+ZG1pX2FkZHJbMF0gJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IGE1MTYxODUuLjIwZTM0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtMTg0LDggKzE4NCw4IEBACiAJdm9pZCAqYnVmOwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JZGV2ZGJnKGRldiwiYXNpeF9yZWFkX2NtZCgpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkIiwKLQkJY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJhc2l4X3JlYWRfY21kKCkgY21kPTB4JTAyeCB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWRcbiIsCisJCSAgIGNtZCwgdmFsdWUsIGluZGV4LCBzaXplKTsKIAogCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCkBAIC0yMTcsOCArMjE3LDggQEAKIAl2b2lkICpidWYgPSBOVUxMOwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JZGV2ZGJnKGRldiwiYXNpeF93cml0ZV9jbWQoKSBjbWQ9MHglMDJ4IHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZCIsCi0JCWNtZCwgdmFsdWUsIGluZGV4LCBzaXplKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF93cml0ZV9jbWQoKSBjbWQ9MHglMDJ4IHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZFxuIiwKKwkJICAgY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOwogCiAJaWYgKGRhdGEpIHsKIAkJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTI2NCwxNSArMjY0LDE1IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKLQlkZXZkYmcoZGV2LCJhc2l4X3dyaXRlX2NtZF9hc3luYygpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkIiwKLQkJY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJhc2l4X3dyaXRlX2NtZF9hc3luYygpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXG4iLAorCQkgICBjbWQsIHZhbHVlLCBpbmRleCwgc2l6ZSk7CiAJaWYgKCh1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldmVycihkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICgocmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldmVycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sIHJlcXVlc3QiKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgcmVxdWVzdFxuIik7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjg5LDggKzI4OSw4IEBACiAJCQkgICAgIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrLCByZXEpOwogCiAJaWYoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3Igc3VibWl0dGluZyB0aGUgY29udHJvbCBtZXNzYWdlOiBzdGF0dXM9JWQiLAotCQkJCXN0YXR1cyk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZFxuIiwKKwkJCSAgIHN0YXR1cyk7CiAJCWtmcmVlKHJlcSk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCXdoaWxlIChza2ItPmxlbiA+IDApIHsKIAkJaWYgKChzaG9ydCkoaGVhZGVyICYgMHgwMDAwZmZmZikgIT0KIAkJICAgIH4oKHNob3J0KSgoaGVhZGVyICYgMHhmZmZmMDAwMCkgPj4gMTYpKSkgewotCQkJZGV2ZXJyKGRldiwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIik7CisJCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoXG4iKTsKIAkJfQogCQkvKiBnZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KIAkJc2l6ZSA9ICh1MTYpIChoZWFkZXIgJiAweDAwMDBmZmZmKTsKQEAgLTMyMiw3ICszMjIsOCBAQAogCQlpZiAoKHNrYi0+bGVuKSAtICgoc2l6ZSArIDEpICYgMHhmZmZlKSA9PSAwKQogCQkJcmV0dXJuIDI7CiAJCWlmIChzaXplID4gRVRIX0ZSQU1FX0xFTikgewotCQkJZGV2ZXJyKGRldiwiYXNpeF9yeF9maXh1cCgpIEJhZCBSWCBMZW5ndGggJWQiLCBzaXplKTsKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJhc2l4X3J4X2ZpeHVwKCkgQmFkIFJYIExlbmd0aCAlZFxuIiwKKwkJCQkgICBzaXplKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWF4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtMzQ4LDcgKzM0OSw4IEBACiAJfQogCiAJaWYgKHNrYi0+bGVuIDwgMCkgewotCQlkZXZlcnIoZGV2LCJhc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWQiLCBza2ItPmxlbik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJhc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWRcbiIsCisJCQkgICBza2ItPmxlbik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTQwOSw3ICs0MTEsNyBAQAogCQkJdXNibmV0X2RlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9MSU5LX1JFU0VUICk7CiAJCX0gZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOwotCQlkZXZkYmcoZGV2LCAiTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJMaW5rIFN0YXR1cyBpczogJWRcbiIsIGxpbmspOwogCX0KIH0KIApAQCAtNDE4LDcgKzQyMCw3IEBACiAJaW50IHJldDsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAweDAwMDAsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzb2Z0d2FyZSBNSUkgYWNjZXNzIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3NcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQyNyw3ICs0MjksNyBAQAogCWludCByZXQ7CiAJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKIAlpZiAocmV0IDwgMCkKLQkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBNSUkgYWNjZXNzXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MzYsMTMgKzQzOCwxNCBAQAogCXU4IGJ1ZlsyXTsKIAlpbnQgcmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwgMCwgMCwgMiwgYnVmKTsKIAotCWRldmRiZyhkZXYsICJhc2l4X2dldF9waHlfYWRkcigpIik7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfZ2V0X3BoeV9hZGRyKClcbiIpOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgUEhZSUQgcmVnaXN0ZXI6ICUwMngiLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgcmVhZGluZyBQSFlJRCByZWdpc3RlcjogJTAyeFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQotCWRldmRiZyhkZXYsICJhc2l4X2dldF9waHlfYWRkcigpIHJldHVybmluZyAweCUwNHgiLCAqKChfX2xlMTYgKilidWYpKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF9nZXRfcGh5X2FkZHIoKSByZXR1cm5pbmcgMHglMDR4XG4iLAorCQkgICAqKChfX2xlMTYgKilidWYpKTsKIAlyZXQgPSBidWZbMV07CiAKIG91dDoKQEAgLTQ1NSw3ICs0NTgsNyBAQAogCiAgICAgICAgIHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBmbGFncywgMCwgMCwgTlVMTCk7CiAJaWYgKHJldCA8IDApCi0JCWRldmVycihkZXYsIkZhaWxlZCB0byBzZW5kIHNvZnR3YXJlIHJlc2V0OiAlMDJ4IiwgcmV0KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkZhaWxlZCB0byBzZW5kIHNvZnR3YXJlIHJlc2V0OiAlMDJ4XG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ2Niw3ICs0NjksNyBAQAogCWludCByZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUlhfQ1RMLCAwLCAwLCAyLCAmdik7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBSWF9DVEwgcmVnaXN0ZXI6ICUwMngiLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgcmVhZGluZyBSWF9DVEwgcmVnaXN0ZXI6ICUwMnhcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBsZTE2X3RvX2NwdSh2KTsKQEAgLTQ3OCwxMSArNDgxLDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfcnhfY3RsKCkgLSBtb2RlID0gMHglMDR4IiwgbW9kZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfd3JpdGVfcnhfY3RsKCkgLSBtb2RlID0gMHglMDR4XG4iLCBtb2RlKTsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIG1vZGUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFJYX0NUTCBtb2RlIHRvIDB4JTA0eDogJTAyeCIsCi0JCSAgICAgICBtb2RlLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIFJYX0NUTCBtb2RlIHRvIDB4JTA0eDogJTAyeFxuIiwKKwkJCSAgIG1vZGUsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkzLDcgKzQ5Niw4IEBACiAJaW50IHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTLCAwLCAwLCAyLCAmdik7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBNZWRpdW0gU3RhdHVzIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkVycm9yIHJlYWRpbmcgTWVkaXVtIFN0YXR1cyByZWdpc3RlcjogJTAyeFxuIiwKKwkJCSAgIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBsZTE2X3RvX2NwdSh2KTsKQEAgLTUwNSwxMSArNTA5LDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfbWVkaXVtX21vZGUoKSAtIG1vZGUgPSAweCUwNHgiLCBtb2RlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF93cml0ZV9tZWRpdW1fbW9kZSgpIC0gbW9kZSA9IDB4JTA0eFxuIiwgbW9kZSk7CiAJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIG1vZGUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIE1lZGl1bSBNb2RlIG1vZGUgdG8gMHglMDR4OiAlMDJ4IiwKLQkJCW1vZGUsIHJldCk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgTWVkaXVtIE1vZGUgbW9kZSB0byAweCUwNHg6ICUwMnhcbiIsCisJCQkgICBtb2RlLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUxOCwxMSArNTIyLDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfZ3BpbygpIC0gdmFsdWUgPSAweCUwNHgiLCB2YWx1ZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfd3JpdGVfZ3BpbygpIC0gdmFsdWUgPSAweCUwNHhcbiIsIHZhbHVlKTsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywgdmFsdWUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEdQSU8gdmFsdWUgMHglMDR4OiAlMDJ4IiwKLQkJCXZhbHVlLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEdQSU8gdmFsdWUgMHglMDR4OiAlMDJ4XG4iLAorCQkJICAgdmFsdWUsIHJldCk7CiAKIAlpZiAoc2xlZXApCiAJCW1zbGVlcChzbGVlcCk7CkBAIC01NDIsMjkgKzU0NiwyNyBAQAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcnhfY3RsIHw9IEFYX1JYX0NUTF9QUk87CiAJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCSAgIG5ldC0+bWNfY291bnQgPiBBWF9NQVhfTUNBU1QpIHsKKwkJICAgbmV0ZGV2X21jX2NvdW50KG5ldCkgPiBBWF9NQVhfTUNBU1QpIHsKIAkJcnhfY3RsIHw9IEFYX1JYX0NUTF9BTUFMTDsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgPT0gMCkgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KG5ldCkpIHsKIAkJLyoganVzdCBicm9hZGNhc3QgYW5kIGRpcmVjdGVkICovCiAJfSBlbHNlIHsKIAkJLyogV2UgdXNlIHRoZSAyMCBieXRlIGRldi0+ZGF0YQogCQkgKiBmb3Igb3VyIDggYnl0ZSBmaWx0ZXIgYnVmZmVyCiAJCSAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IHRoYXQKIAkJICogaXMgdHJpY2t5IHRvIGZyZWUgbGF0ZXIgKi8KLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAJCXUzMiBjcmNfYml0czsKLQkJaW50IGk7CiAKIAkJbWVtc2V0KGRhdGEtPm11bHRpX2ZpbHRlciwgMCwgQVhfTUNBU1RfRklMVEVSX1NJWkUpOwogCiAJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCi0JCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQljcmNfYml0cyA9CiAJCQkgICAgZXRoZXJfY3JjKEVUSF9BTEVOLAogCQkJCSAgICAgIG1jX2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAkJCWRhdGEtPm11bHRpX2ZpbHRlcltjcmNfYml0cyA+PiAzXSB8PQogCQkJICAgIDEgPDwgKGNyY19iaXRzICYgNyk7Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQogCiAJCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX01VTFRJX0ZJTFRFUiwgMCwgMCwKQEAgLTU4OCw3ICs1OTAsOCBAQAogCWFzaXhfc2V0X2h3X21paShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCi0JZGV2ZGJnKGRldiwgImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHgiLCBwaHlfaWQsIGxvYywgbGUxNl90b19jcHUocmVzKSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCBsZTE2X3RvX2NwdShyZXMpKTsKIAogCXJldHVybiBsZTE2X3RvX2NwdShyZXMpOwogfQpAQCAtNTk5LDcgKzYwMiw4IEBACiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKIAotCWRldmRiZyhkZXYsICJhc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4IiwgcGh5X2lkLCBsb2MsIHZhbCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfbWRpb193cml0ZSgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHZhbD0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCB2YWwpOwogCW11dGV4X2xvY2soJmRldi0+cGh5X211dGV4KTsKIAlhc2l4X3NldF9zd19taWkoZGV2KTsKIAlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsICZyZXMpOwpAQCAtNzU0LDI5ICs3NTgsMjcgQEAKIAlpZiAobmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJ4X2N0bCB8PSAweDAxOwogCX0gZWxzZSBpZiAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAotCQkgICBuZXQtPm1jX2NvdW50ID4gQVhfTUFYX01DQVNUKSB7CisJCSAgIG5ldGRldl9tY19jb3VudChuZXQpID4gQVhfTUFYX01DQVNUKSB7CiAJCXJ4X2N0bCB8PSAweDAyOwotCX0gZWxzZSBpZiAobmV0LT5tY19jb3VudCA9PSAwKSB7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfZW1wdHkobmV0KSkgewogCQkvKiBqdXN0IGJyb2FkY2FzdCBhbmQgZGlyZWN0ZWQgKi8KIAl9IGVsc2UgewogCQkvKiBXZSB1c2UgdGhlIDIwIGJ5dGUgZGV2LT5kYXRhCiAJCSAqIGZvciBvdXIgOCBieXRlIGZpbHRlciBidWZmZXIKIAkJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdAogCQkgKiBpcyB0cmlja3kgdG8gZnJlZSBsYXRlciAqLwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBuZXQtPm1jX2xpc3Q7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdDsKIAkJdTMyIGNyY19iaXRzOwotCQlpbnQgaTsKIAogCQltZW1zZXQoZGF0YS0+bXVsdGlfZmlsdGVyLCAwLCBBWF9NQ0FTVF9GSUxURVJfU0laRSk7CiAKIAkJLyogQnVpbGQgdGhlIG11bHRpY2FzdCBoYXNoIGZpbHRlci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBuZXQpIHsKIAkJCWNyY19iaXRzID0KIAkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sCiAJCQkJICAgICAgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9CiAJCQkgICAgMSA8PCAoY3JjX2JpdHMgJiA3KTsKLQkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKIAkJYXNpeF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLApAQCAtODAwLDcgKzgwMiw4IEBACiAJaWYgKGVjbWQuZHVwbGV4ICE9IERVUExFWF9GVUxMKQogCQltb2RlIHw9IH5BWDg4MTcyX01FRElVTV9GRDsKIAotCWRldmRiZyhkZXYsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTkwMiw3ICs5MDUsOCBAQAogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJbW9kZSAmPSB+QVhfTUVESVVNX0ZEOwogCi0JZGV2ZGJnKGRldiwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHgiLCBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHhcbiIsCisJCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBtb2RlKTsKIAogCWFzaXhfd3JpdGVfbWVkaXVtX21vZGUoZGV2LCBtb2RlKTsKIApAQCAtMTA1OSwxMCArMTA2MywxMCBAQAogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CiAJdTE2IHJlZzsKIAotCWRldmRiZyhkZXYsIm1hcnZlbGxfcGh5X2luaXQoKSIpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJtYXJ2ZWxsX3BoeV9pbml0KClcbiIpOwogCiAJcmVnID0gYXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX01BUlZFTExfU1RBVFVTKTsKLQlkZXZkYmcoZGV2LCJNSUlfTUFSVkVMTF9TVEFUVVMgPSAweCUwNHgiLCByZWcpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJNSUlfTUFSVkVMTF9TVEFUVVMgPSAweCUwNHhcbiIsIHJlZyk7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX01BUlZFTExfQ1RSTCwKIAkJCU1BUlZFTExfQ1RSTF9SWERFTEFZIHwgTUFSVkVMTF9DVFJMX1RYREVMQVkpOwpAQCAtMTA3MCw3ICsxMDc0LDcgQEAKIAlpZiAoZGF0YS0+bGVkbW9kZSkgewogCQlyZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLAogCQkJTUlJX01BUlZFTExfTEVEX0NUUkwpOwotCQlkZXZkYmcoZGV2LCJNSUlfTUFSVkVMTF9MRURfQ1RSTCAoMSkgPSAweCUwNHgiLCByZWcpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiTUlJX01BUlZFTExfTEVEX0NUUkwgKDEpID0gMHglMDR4XG4iLCByZWcpOwogCiAJCXJlZyAmPSAweGY4ZmY7CiAJCXJlZyB8PSAoMSArIDB4MDEwMCk7CkBAIC0xMDc5LDcgKzEwODMsNyBAQAogCiAJCXJlZyA9IGFzaXhfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsCiAJCQlNSUlfTUFSVkVMTF9MRURfQ1RSTCk7Ci0JCWRldmRiZyhkZXYsIk1JSV9NQVJWRUxMX0xFRF9DVFJMICgyKSA9IDB4JTA0eCIsIHJlZyk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJNSUlfTUFSVkVMTF9MRURfQ1RSTCAoMikgPSAweCUwNHhcbiIsIHJlZyk7CiAJCXJlZyAmPSAweGZjMGY7CiAJfQogCkBAIC0xMDkwLDcgKzEwOTQsNyBAQAogewogCXUxNiByZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNQVJWRUxMX0xFRF9NQU5VQUwpOwogCi0JZGV2ZGJnKGRldiwgIm1hcnZlbGxfbGVkX3N0YXR1cygpIHJlYWQgMHglMDR4IiwgcmVnKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAibWFydmVsbF9sZWRfc3RhdHVzKCkgcmVhZCAweCUwNHhcbiIsIHJlZyk7CiAKIAkvKiBDbGVhciBvdXQgdGhlIGNlbnRlciBMRUQgYml0cyAtIDB4MDNGMCAqLwogCXJlZyAmPSAweGZjMGY7CkBAIC0xMTA2LDcgKzExMTAsNyBAQAogCQkJcmVnIHw9IDB4MDJmMDsKIAl9CiAKLQlkZXZkYmcoZGV2LCAibWFydmVsbF9sZWRfc3RhdHVzKCkgd3JpdGluZyAweCUwNHgiLCByZWcpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJtYXJ2ZWxsX2xlZF9zdGF0dXMoKSB3cml0aW5nIDB4JTA0eFxuIiwgcmVnKTsKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUFSVkVMTF9MRURfTUFOVUFMLCByZWcpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTE4LDcgKzExMjIsNyBAQAogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CiAKLQlkZXZkYmcoZGV2LCJheDg4MTc4X2xpbmtfcmVzZXQoKSIpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKVxuIik7CiAKIAltaWlfY2hlY2tfbWVkaWEoJmRldi0+bWlpLCAxLCAxKTsKIAltaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSwgJmVjbWQpOwpAQCAtMTEzOCw3ICsxMTQyLDggQEAKIAllbHNlCiAJCW1vZGUgJj0gfkFYX01FRElVTV9GRDsKIAotCWRldmRiZyhkZXYsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTExODgsNyArMTE5Myw3IEBACiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQgbGxfbXR1ID0gbmV3X210dSArIG5ldC0+aGFyZF9oZWFkZXJfbGVuICsgNDsKIAotCWRldmRiZyhkZXYsICJheDg4MTc4X2NoYW5nZV9tdHUoKSBuZXdfbXR1PSVkIiwgbmV3X210dSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODgxNzhfY2hhbmdlX210dSgpIG5ld19tdHU9JWRcbiIsIG5ld19tdHUpOwogCiAJaWYgKG5ld19tdHUgPD0gMCB8fCBsbF9tdHUgPiAxNjM4NCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCAyMmI4N2U2Li45NmYxZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTYzMiw3ICs2MzIsNiBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAJdTggYnJvYWRjYXN0WzZdOwogCXU4IHJ4ID0gUnhFbmFibGUgfCBSeFBvbGFyaXR5IHwgUnhNdWx0aUNhc3Q7Ci0JaW50IGk7CiAKIAltZW1zZXQoYnJvYWRjYXN0LCAweGZmLCA2KTsKIAltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAwLCA2NCk7CkBAIC02NDgsNyArNjQ3LDcgQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAweGZmLCA2NCk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMCwgbWMgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jICYmIGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyssIG1jID0gbWMtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIG5ldGRldikgewogCQkJdTMyIGNyYyA9IGV0aGVyX2NyY19sZSg2LCBtYy0+ZG1pX2FkZHIpOwogCQkJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKIAkJCQljYXRjLT5tdWx0aWNhc3RbKGNyYyA+PiAzKSAmIDB4M2ZdIHw9IDEgPDwgKGNyYyAmIDcpOwpAQCAtODk3LDExICs4OTYsOSBAQAogCQlmNXUwMTFfcnhtb2RlKGNhdGMsIGNhdGMtPnJ4bW9kZSk7CiAJfQogCWRiZygiSW5pdCBkb25lLiIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBVU0IgRXRoZXJuZXQgYXQgdXNiLSVzLSVzLCAiLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBVU0IgRXRoZXJuZXQgYXQgdXNiLSVzLSVzLCAlcE0uXG4iLAogCSAgICAgICBuZXRkZXYtPm5hbWUsIChjYXRjLT5pc19mNXUwMTEpID8gIkJlbGtpbiBGNVUwMTEiIDogIkNBVEMgRUwxMjEwQSBOZXRNYXRlIiwKLQkgICAgICAgdXNiZGV2LT5idXMtPmJ1c19uYW1lLCB1c2JkZXYtPmRldnBhdGgpOwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHByaW50aygiJTIuMng6IiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7Ci0JcHJpbnRrKCIlMi4yeC5cbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCSAgICAgICB1c2JkZXYtPmJ1cy0+YnVzX25hbWUsIHVzYmRldi0+ZGV2cGF0aCwgbmV0ZGV2LT5kZXZfYWRkcik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXRjKTsKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYwppbmRleCBjMzM3ZmZjLi5hNGE4NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKQEAgLTczLDcgKzczLDcgQEAKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiBmYWlsOgogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWRldndhcm4oZGV2LCAibGluayBjbWQgZmFpbHVyZVxuIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAibGluayBjbWQgZmFpbHVyZVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC0yMTIsNyArMjEyLDggQEAKIAkJCSAqIGIxNToJCTEgKEVFTSBjb21tYW5kKQogCQkJICovCiAJCQlpZiAoaGVhZGVyICYgQklUKDE0KSkgewotCQkJCWRldmRiZyhkZXYsICJyZXNlcnZlZCBjb21tYW5kICUwNHhcbiIsIGhlYWRlcik7CisJCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlc2VydmVkIGNvbW1hbmQgJTA0eFxuIiwKKwkJCQkJICAgaGVhZGVyKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMjU1LDggKzI1Niw5IEBACiAJCQljYXNlIDE6CQkvKiBFY2hvIHJlc3BvbnNlICovCiAJCQljYXNlIDU6CQkvKiBUaWNrbGUgKi8KIAkJCWRlZmF1bHQ6CS8qIHJlc2VydmVkICovCi0JCQkJZGV2d2FybihkZXYsICJ1bmV4cGVjdGVkIGxpbmsgY29tbWFuZCAlZFxuIiwKLQkJCQkJCWJtRUVNQ21kKTsKKwkJCQluZXRkZXZfd2FybihkZXYtPm5ldCwKKwkJCQkJICAgICJ1bmV4cGVjdGVkIGxpbmsgY29tbWFuZCAlZFxuIiwKKwkJCQkJICAgIGJtRUVNQ21kKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDVmM2I5ZWEuLmM4Y2RiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTMzOSwxMCArMzM5LDEwIEBACiAKIHN0YXRpYyB2b2lkIGR1bXBzcGVlZChzdHJ1Y3QgdXNibmV0ICpkZXYsIF9fbGUzMiAqc3BlZWRzKQogewotCWlmIChuZXRpZl9tc2dfdGltZXIoZGV2KSkKLQkJZGV2aW5mbyhkZXYsICJsaW5rIHNwZWVkczogJXUga2JwcyB1cCwgJXUga2JwcyBkb3duIiwKLQkJCV9fbGUzMl90b19jcHUoc3BlZWRzWzBdKSAvIDEwMDAsCi0JCV9fbGUzMl90b19jcHUoc3BlZWRzWzFdKSAvIDEwMDApOworCW5ldGlmX2luZm8oZGV2LCB0aW1lciwgZGV2LT5uZXQsCisJCSAgICJsaW5rIHNwZWVkczogJXUga2JwcyB1cCwgJXUga2JwcyBkb3duXG4iLAorCQkgICBfX2xlMzJfdG9fY3B1KHNwZWVkc1swXSkgLyAxMDAwLAorCQkgICBfX2xlMzJfdG9fY3B1KHNwZWVkc1sxXSkgLyAxMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2RjX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKQEAgLTM2MSwxOCArMzYxLDE2IEBACiAJZXZlbnQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlzd2l0Y2ggKGV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSkgewogCWNhc2UgVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OOgotCQlpZiAobmV0aWZfbXNnX3RpbWVyKGRldikpCi0JCQlkZXZkYmcoZGV2LCAiQ0RDOiBjYXJyaWVyICVzIiwKLQkJCQkJZXZlbnQtPndWYWx1ZSA/ICJvbiIgOiAib2ZmIik7CisJCW5ldGlmX2RiZyhkZXYsIHRpbWVyLCBkZXYtPm5ldCwgIkNEQzogY2FycmllciAlc1xuIiwKKwkJCSAgZXZlbnQtPndWYWx1ZSA/ICJvbiIgOiAib2ZmIik7CiAJCWlmIChldmVudC0+d1ZhbHVlKQogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U6CS8qIHR4L3J4IHJhdGVzICovCi0JCWlmIChuZXRpZl9tc2dfdGltZXIoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJDREM6IHNwZWVkIGNoYW5nZSAobGVuICVkKSIsCi0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCW5ldGlmX2RiZyhkZXYsIHRpbWVyLCBkZXYtPm5ldCwgIkNEQzogc3BlZWQgY2hhbmdlIChsZW4gJWQpXG4iLAorCQkJICB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IChzaXplb2YgKmV2ZW50ICsgOCkpCiAJCQlzZXRfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpOwogCQllbHNlCkBAIC0zODIsOCArMzgwLDggQEAKIAkgKiBidXQgdGhlcmUgYXJlIG5vIHN0YW5kYXJkIGZvcm1hdHMgZm9yIHRoZSByZXNwb25zZSBkYXRhLgogCSAqLwogCWRlZmF1bHQ6Ci0JCWRldmVycihkZXYsICJDREM6IHVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uICUwMnghIiwKLQkJCQkgZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkNEQzogdW5leHBlY3RlZCBub3RpZmljYXRpb24gJTAyeCFcbiIsCisJCQkgICBldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUpOwogCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggM2Q0MDZmOS4uMjY5MzM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNTgsNyArNTgsNyBAQAogCXZvaWQgKmJ1ZjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWRldmRiZyhkZXYsICJkbV9yZWFkKCkgcmVnPTB4JTAyeCBsZW5ndGg9JWQiLCByZWcsIGxlbmd0aCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3JlYWQoKSByZWc9MHglMDJ4IGxlbmd0aD0lZFxuIiwgcmVnLCBsZW5ndGgpOwogCiAJYnVmID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQpAQCAtODksNyArODksNyBAQAogCXZvaWQgKmJ1ZiA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlkZXZkYmcoZGV2LCAiZG1fd3JpdGUoKSByZWc9MHglMDJ4LCBsZW5ndGg9JWQiLCByZWcsIGxlbmd0aCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3dyaXRlKCkgcmVnPTB4JTAyeCwgbGVuZ3RoPSVkXG4iLCByZWcsIGxlbmd0aCk7CiAKIAlpZiAoZGF0YSkgewogCQlidWYgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CkBAIC0xMTIsNyArMTEyLDggQEAKIAogc3RhdGljIGludCBkbV93cml0ZV9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHU4IHZhbHVlKQogewotCWRldmRiZyhkZXYsICJkbV93cml0ZV9yZWcoKSByZWc9MHglMDJ4LCB2YWx1ZT0weCUwMngiLCByZWcsIHZhbHVlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiZG1fd3JpdGVfcmVnKCkgcmVnPTB4JTAyeCwgdmFsdWU9MHglMDJ4XG4iLAorCQkgICByZWcsIHZhbHVlKTsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKIAkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKIAkJCSAgICAgICBETV9XUklURV9SRUcsCkBAIC0xNDIsMTMgKzE0MywxMyBAQAogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIgaW4gZG1fd3JpdGVfYXN5bmNfaGVscGVyISIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIgaW4gZG1fd3JpdGVfYXN5bmNfaGVscGVyIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXEpIHsKLQkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgcmVxdWVzdCIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCByZXF1ZXN0XG4iKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybjsKIAl9CkBAIC0xNjYsOCArMTY3LDggQEAKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKLQkJZGV2ZXJyKGRldiwgIkVycm9yIHN1Ym1pdHRpbmcgdGhlIGNvbnRyb2wgbWVzc2FnZTogc3RhdHVzPSVkIiwKLQkJICAgICAgIHN0YXR1cyk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZFxuIiwKKwkJCSAgIHN0YXR1cyk7CiAJCWtmcmVlKHJlcSk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTE3NSwxNSArMTc2LDE1IEBACiAKIHN0YXRpYyB2b2lkIGRtX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWRldmRiZyhkZXYsICJkbV93cml0ZV9hc3luYygpIHJlZz0weCUwMnggbGVuZ3RoPSVkIiwgcmVnLCBsZW5ndGgpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJkbV93cml0ZV9hc3luYygpIHJlZz0weCUwMnggbGVuZ3RoPSVkXG4iLCByZWcsIGxlbmd0aCk7CiAKIAlkbV93cml0ZV9hc3luY19oZWxwZXIoZGV2LCByZWcsIDAsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JZGV2ZGJnKGRldiwgImRtX3dyaXRlX3JlZ19hc3luYygpIHJlZz0weCUwMnggdmFsdWU9MHglMDJ4IiwKLQkgICAgICAgcmVnLCB2YWx1ZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3dyaXRlX3JlZ19hc3luYygpIHJlZz0weCUwMnggdmFsdWU9MHglMDJ4XG4iLAorCQkgICByZWcsIHZhbHVlKTsKIAogCWRtX3dyaXRlX2FzeW5jX2hlbHBlcihkZXYsIHJlZywgdmFsdWUsIDAsIE5VTEwpOwogfQpAQCAtMjExLDcgKzIxMiw3IEBACiAJfQogCiAJaWYgKGkgPT0gRE1fVElNRU9VVCkgewotCQlkZXZlcnIoZGV2LCAiJXMgcmVhZCB0aW1lZCBvdXQhIiwgcGh5ID8gInBoeSIgOiAiZWVwcm9tIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICIlcyByZWFkIHRpbWVkIG91dCFcbiIsIHBoeSA/ICJwaHkiIDogImVlcHJvbSIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTksOCArMjIwLDggQEAKIAlkbV93cml0ZV9yZWcoZGV2LCBETV9TSEFSRURfQ1RSTCwgMHgwKTsKIAlyZXQgPSBkbV9yZWFkKGRldiwgRE1fU0hBUkVEX0RBVEEsIDIsIHZhbHVlKTsKIAotCWRldmRiZyhkZXYsICJyZWFkIHNoYXJlZCAlZCAweCUwMnggcmV0dXJuZWQgMHglMDR4LCAlZCIsCi0JICAgICAgIHBoeSwgcmVnLCAqdmFsdWUsIHJldCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlYWQgc2hhcmVkICVkIDB4JTAyeCByZXR1cm5lZCAweCUwNHgsICVkXG4iLAorCQkgICBwaHksIHJlZywgKnZhbHVlLCByZXQpOwogCiAgb3V0OgogCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwpAQCAtMjU0LDcgKzI1NSw3IEBACiAJfQogCiAJaWYgKGkgPT0gRE1fVElNRU9VVCkgewotCQlkZXZlcnIoZGV2LCAiJXMgd3JpdGUgdGltZWQgb3V0ISIsIHBoeSA/ICJwaHkiIDogImVlcHJvbSIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiJXMgd3JpdGUgdGltZWQgb3V0IVxuIiwgcGh5ID8gInBoeSIgOiAiZWVwcm9tIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMwNCwxNSArMzA1LDE1IEBACiAJX19sZTE2IHJlczsKIAogCWlmIChwaHlfaWQpIHsKLQkJZGV2ZGJnKGRldiwgIk9ubHkgaW50ZXJuYWwgcGh5IHN1cHBvcnRlZCIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiT25seSBpbnRlcm5hbCBwaHkgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZG1fcmVhZF9zaGFyZWRfd29yZChkZXYsIDEsIGxvYywgJnJlcyk7CiAKLQlkZXZkYmcoZGV2LAotCSAgICAgICAiZG05NjAxX21kaW9fcmVhZCgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHJldHVybnM9MHglMDR4IiwKLQkgICAgICAgcGh5X2lkLCBsb2MsIGxlMTZfdG9fY3B1KHJlcykpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsCisJCSAgICJkbTk2MDFfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCBsZTE2X3RvX2NwdShyZXMpKTsKIAogCXJldHVybiBsZTE2X3RvX2NwdShyZXMpOwogfQpAQCAtMzI0LDEyICszMjUsMTIgQEAKIAlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKIAogCWlmIChwaHlfaWQpIHsKLQkJZGV2ZGJnKGRldiwgIk9ubHkgaW50ZXJuYWwgcGh5IHN1cHBvcnRlZCIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiT25seSBpbnRlcm5hbCBwaHkgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWRldmRiZyhkZXYsImRtOTYwMV9tZGlvX3dyaXRlKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgdmFsPTB4JTA0eCIsCi0JICAgICAgIHBoeV9pZCwgbG9jLCB2YWwpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJkbTk2MDFfbWRpb193cml0ZSgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHZhbD0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCB2YWwpOwogCiAJZG1fd3JpdGVfc2hhcmVkX3dvcmQoZGV2LCAxLCBsb2MsIHJlcyk7CiB9CkBAIC0zODEsMTMgKzM4MiwxMyBAQAogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlyeF9jdGwgfD0gMHgwMjsKLQl9IGVsc2UgaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbmV0LT5tY19jb3VudCA+IERNX01BWF9NQ0FTVCkgeworCX0gZWxzZSBpZiAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAorCQkgICBuZXRkZXZfbWNfY291bnQobmV0KSA+IERNX01BWF9NQ0FTVCkgewogCQlyeF9jdGwgfD0gMHgwNDsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQpIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0LT5tY19saXN0OwotCQlpbnQgaTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKLQkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKywgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQl1MzIgY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY19saXN0LT5kbWlfYWRkcikgPj4gMjY7CiAJCQloYXNoZXNbY3JjID4+IDNdIHw9IDEgPDwgKGNyYyAmIDB4Nyk7CiAJCX0KQEAgLTU5Miw3ICs1OTMsNyBAQAogCQl9CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKLQkJZGV2ZGJnKGRldiwgIkxpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiTGluayBTdGF0dXMgaXM6ICVkXG4iLCBsaW5rKTsKIAl9CiB9CiAKQEAgLTYwMyw4ICs2MDQsOCBAQAogCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOwogCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CiAKLQlkZXZkYmcoZGV2LCAibGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIiwKLQkgICAgICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWRcbiIsCisJCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2ludDUxeDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9pbnQ1MXgxLmMKaW5kZXggNTVjZjcwOC4uM2MyMjhkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2ludDUxeDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvaW50NTF4MS5jCkBAIC01MSw3ICs1MSw3IEBACiAJaW50IGxlbjsKIAogCWlmICghKHBza2JfbWF5X3B1bGwoc2tiLCBJTlQ1MVgxX0hFQURFUl9TSVpFKSkpIHsKLQkJZGV2ZXJyKGRldiwgInVuZXhwZWN0ZWQgdGlueSByeCBmcmFtZSIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAidW5leHBlY3RlZCB0aW55IHJ4IGZyYW1lXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMzgsMjUgKzEzOCwyNSBAQAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogZG8gbm90IGV4cGVjdCB0byBzZWUgdHJhZmZpYyBvZiBvdGhlciBQTENzICovCiAJCWZpbHRlciB8PSBQQUNLRVRfVFlQRV9QUk9NSVNDVU9VUzsKLQkJZGV2aW5mbyhkZXYsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWQiKTsKLQl9IGVsc2UgaWYgKG5ldGRldi0+bWNfY291bnQgfHwKKwkJbmV0ZGV2X2luZm8oZGV2LT5uZXQsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWRcbiIpOworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpIHx8CiAJCSAgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCWZpbHRlciB8PSBQQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwotCQlkZXZkYmcoZGV2LCAicmVjZWl2ZSBhbGwgbXVsdGljYXN0IGVuYWJsZWQiKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlY2VpdmUgYWxsIG11bHRpY2FzdCBlbmFibGVkXG4iKTsKIAl9IGVsc2UgewogCQkvKiB+UFJPTUlTQ1VPVVMsIH5NVUxUSUNBU1QgKi8KLQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgb3duIHBhY2tldHMgb25seSIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAicmVjZWl2ZSBvd24gcGFja2V0cyBvbmx5XG4iKTsKIAl9CiAKIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKSB7Ci0JCWRldndhcm4oZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIiKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIFVSQlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlyZXEgPSBrbWFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXEpIHsKLQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIGNvbnRyb2wgbXNnIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBjb250cm9sIG1zZ1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTczLDcgKzE3Myw4IEBACiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRXJyb3Igc3VibWl0dGluZyBjb250cm9sIG1zZywgc3RzPSVkIiwgc3RhdHVzKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIGNvbnRyb2wgbXNnLCBzdHM9JWRcbiIsCisJCQkgICAgc3RhdHVzKTsKIAkJZ290byBvdXQxOwogCX0KIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggZjFkNjRlZi4uNTI2NzFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlwYWNrZXRfZmlsdGVyX2JpdG1hcCB8PSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9QUk9NSVNDVU9VUzsKIAl9Ci0JZWxzZSBpZiAoKG5ldC0+bWNfY291bnQpIHx8IChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSB8fCAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJcGFja2V0X2ZpbHRlcl9iaXRtYXAgfD0gS0FXRVRIX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IDg3Mzc0MzEuLjcwOTc4MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtMSwxMyArMSwyNyBAQAogLyoKLSAqIE1vc0NoaXBzIE1DUzc4MzAgYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzCisgKiBNT1NDSElQIE1DUzc4MzAgYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzCiAgKgogICogYmFzZWQgb24gdXNibmV0LmMsIGFzaXguYyBhbmQgdGhlIHZlbmRvciBwcm92aWRlZCBtY3M3ODMwIGRyaXZlcgogICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbmRyZWFzIE1vaHIgPGFuZGlAbGlzYXMuZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IERhdmlkIEhvbGxpcyA8ZGhvbGxpc0BkYXZlaG9sbGlzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNSBQaGlsIENoYW5nIDxwY2hhbmcyM0BzYmNnbG9iYWwubmV0PgogICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgVGlWbyBJbmMuCiAgKgorICogRGVmaW5pdGlvbnMgZ2F0aGVyZWQgZnJvbSBNT1NDSElQLCBEYXRhIFNoZWV0Xzc4MzBEQS5wZGYgKHRoYW5rcyEpLgorICoKKyAqIFRPRE86CisgKiAtIHN1cHBvcnQgSElGX1JFR19DT05GSUdfU0xFRVBNT0RFL0hJRl9SRUdfQ09ORklHX1RYRU5BQkxFICh2aWEgYXV0b3BtPykKKyAqIC0gaW1wbGVtZW50IGV0aHRvb2xfb3BzIGdldF9wYXVzZXBhcmFtL3NldF9wYXVzZXBhcmFtCisgKiAgIHZpYSBISUZfUkVHX1BBVVNFX1RIUkVTSE9MRCAoPj0gcmV2aXNpb24gQyBvbmx5ISkKKyAqIC0gaW1wbGVtZW50IGdldF9lZXByb20vW3NldF9lZXByb21dCisgKiAtIHN3aXRjaCBQSFkgb24vb2ZmIG9uIGlmdXAvaWZkb3duIChwZXJoYXBzIGluIHVzYm5ldC5jLCB2aWEgTUlJKQorICogLSBtY3M3ODMwX2dldF9yZWdzKCkgaGFuZGxpbmcgaXMgd2VpcmQ6IGZvciByZXYgMiB3ZSByZXR1cm4gMzIgcmVncywKKyAqICAgY2FuIGFjY2VzcyBvbmx5IH4gMjQsIHJlbWFpbmluZyB1c2VyIGJ1ZmZlciBpcyB1bmluaXRpYWxpemVkIGdhcmJhZ2UKKyAqIC0gYW55dGhpbmcgZWxzZT8KKyAqCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNTUsNyArNjksNyBAQAogCQkJCSBBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfCBcCiAJCQkJIEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfQ1NNQSkKIAotLyogSElGX1JFR19YWCBjb3Jlc3Nwb25kaW5nIGluZGV4IHZhbHVlICovCisvKiBISUZfUkVHX1hYIGNvcnJlc3BvbmRpbmcgaW5kZXggdmFsdWUgKi8KIGVudW0gewogCUhJRl9SRUdfTVVMVElDQVNUX0hBU0gJCQk9IDB4MDAsCiAJSElGX1JFR19QQUNLRVRfR0FQMQkJCT0gMHgwOCwKQEAgLTY5LDYgKzgzLDcgQEAKIAkgICBISUZfUkVHX1BIWV9DTUQyX1BFTkRfRkxBR19CSVQJPSAweDgwLAogCSAgIEhJRl9SRUdfUEhZX0NNRDJfUkVBRFlfRkxBR19CSVQJPSAweDQwLAogCUhJRl9SRUdfQ09ORklHCQkJCT0gMHgwZSwKKwkvKiBobW0sIHNwZWMgc2V6OiAiUi9XIiwgIkV4Y2VwdCBiaXQgMyIgKGxpa2VseSBUWEVOQUJMRSkuICovCiAJICAgSElGX1JFR19DT05GSUdfQ0ZHCQkJPSAweDgwLAogCSAgIEhJRl9SRUdfQ09ORklHX1NQRUVEMTAwCQk9IDB4NDAsCiAJICAgSElGX1JFR19DT05GSUdfRlVMTERVUExFWF9FTkFCTEUJPSAweDIwLApAQCAtNzYsMTMgKzkxLDI0IEBACiAJICAgSElGX1JFR19DT05GSUdfVFhFTkFCTEUJCT0gMHgwOCwKIAkgICBISUZfUkVHX0NPTkZJR19TTEVFUE1PREUJCT0gMHgwNCwKIAkgICBISUZfUkVHX0NPTkZJR19BTExNVUxUSUNBU1QJCT0gMHgwMiwKLQkgICBISUZfUkVHX0NPTkZJR19QUk9NSVNDSU9VUwkJPSAweDAxLAorCSAgIEhJRl9SRUdfQ09ORklHX1BST01JU0NVT1VTCQk9IDB4MDEsCiAJSElGX1JFR19FVEhFUk5FVF9BRERSCQkJPSAweDBmLAotCUhJRl9SRUdfMjIJCQkJPSAweDE1LAorCUhJRl9SRUdfRlJBTUVfRFJPUF9DT1VOVEVSCQk9IDB4MTUsIC8qIDAuLmZmOyByZXNldDogMCAqLwogCUhJRl9SRUdfUEFVU0VfVEhSRVNIT0xECQkJPSAweDE2LAogCSAgIEhJRl9SRUdfUEFVU0VfVEhSRVNIT0xEX0RFRkFVTFQJPSAwLAogfTsKIAorLyogVHJhaWxpbmcgc3RhdHVzIGJ5dGUgaW4gRXRoZXJuZXQgUnggZnJhbWUgKi8KK2VudW0geworCU1DUzc4MzBfUlhfU0hPUlRfRlJBTUUJCT0gMHgwMSwgLyogPCA2NCBieXRlcyAqLworCU1DUzc4MzBfUlhfTEVOR1RIX0VSUk9SCQk9IDB4MDIsIC8qIGZyYW1lbGVuICE9IEV0aGVybmV0IGxlbmd0aCBmaWVsZCAqLworCU1DUzc4MzBfUlhfQUxJR05NRU5UX0VSUk9SCT0gMHgwNCwgLyogbm9uLWV2ZW4gbnVtYmVyIG9mIG5pYmJsZXMgKi8KKwlNQ1M3ODMwX1JYX0NSQ19FUlJPUgkJPSAweDA4LAorCU1DUzc4MzBfUlhfTEFSR0VfRlJBTUUJCT0gMHgxMCwgLyogPiAxNTE4IGJ5dGVzICovCisJTUNTNzgzMF9SWF9GUkFNRV9DT1JSRUNUCT0gMHgyMCwgLyogZnJhbWUgaXMgY29ycmVjdCAqLworCS8qIFs3OjZdIHJlc2VydmVkICovCit9OworCiBzdHJ1Y3QgbWNzNzgzMF9kYXRhIHsKIAl1OCBtdWx0aV9maWx0ZXJbOF07CiAJdTggY29uZmlnOwpAQCAtMTA5LDcgKzEzNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtY3M3ODMwX3NldF9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtY3M3ODMwX3NldF9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCBjb25zdCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp4ZGV2ID0gZGV2LT51ZGV2OwogCWludCByZXQ7CkBAIC0xODMsMTYgKzIwOSw0NiBAQAogCXVzYl9mcmVlX3VyYih1cmIpOwogfQogCi1zdGF0aWMgaW50IG1jczc4MzBfZ2V0X2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2KQorc3RhdGljIGludCBtY3M3ODMwX2hpZl9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICphZGRyKQogewotCWludCByZXQ7Ci0JcmV0ID0gbWNzNzgzMF9nZXRfcmVnKGRldiwgSElGX1JFR19FVEhFUk5FVF9BRERSLCBFVEhfQUxFTiwKLQkJCQkgICBkZXYtPm5ldC0+ZGV2X2FkZHIpOworCWludCByZXQgPSBtY3M3ODMwX2dldF9yZWcoZGV2LCBISUZfUkVHX0VUSEVSTkVUX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtY3M3ODMwX2hpZl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWludCByZXQgPSBtY3M3ODMwX3NldF9yZWcoZGV2LCBISUZfUkVHX0VUSEVSTkVUX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jczc4MzBfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG1jczc4MzBfaGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHItPnNhX2RhdGEpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBpdCB3b3JrZWQgLS0+IGFkb3B0IGl0IG9uIG5ldGRldiBzaWRlICovCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWNzNzgzMF9yZWFkX3BoeShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGluZGV4KQogewogCWludCByZXQ7CkBAIC0zMDcsNyArMzYzLDcgQEAKIHsKIAl1OCBkdW1teVsyXTsKIAlpbnQgcmV0OwotCXJldCA9IG1jczc4MzBfZ2V0X3JlZyhkZXYsIEhJRl9SRUdfMjIsIDIsIGR1bW15KTsKKwlyZXQgPSBtY3M3ODMwX2dldF9yZWcoZGV2LCBISUZfUkVHX0ZSQU1FX0RST1BfQ09VTlRFUiwgMiwgZHVtbXkpOwogCWlmIChyZXQgPiAwKQogCQlyZXR1cm4gMjsgLyogUmV2IEMgb3IgbGF0ZXIgKi8KIAlyZXR1cm4gMTsgLyogZWFybGllciByZXZpc2lvbiAqLwpAQCAtMzMxLDMzICszODcsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBtY3M3ODMwX2luaXRfZGV2KHN0cnVjdCB1c2JuZXQgKmRldikKLXsKLQlpbnQgcmV0OwotCWludCByZXRyeTsKLQotCS8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBFRVBST00gKi8KLQlyZXQgPSAtRUlOVkFMOwotCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDUgJiYgcmV0OyByZXRyeSsrKQotCQlyZXQgPSBtY3M3ODMwX2dldF9hZGRyZXNzKGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfd2FybigmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3QgcmVhZCBNQUMgYWRkcmVzc1xuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFNldCB1cCBQSFkgKi8KLQlyZXQgPSBtY3M3ODMwX3NldF9hdXRvbmVnKGRldiwgMCk7Ci0JaWYgKHJldCkgewotCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IGF1dG9uZWdcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltY3M3ODMwX3Jldl9DX2ZpeHVwKGRldik7Ci0JcmV0ID0gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IG1jczc4MzBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsCiAJCQkgICAgIGludCBsb2NhdGlvbikKIHsKQEAgLTM3OCwxMSArNDA3LDMzIEBACiAJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZkZXYtPm1paSwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKIH0KIAotLyogY3JlZGl0cyBnbyB0byBhc2l4X3NldF9tdWx0aWNhc3QgKi8KLXN0YXRpYyB2b2lkIG1jczc4MzBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWNzNzgzMF9kYXRhICptY3M3ODMwX2dldF9kYXRhKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtY3M3ODMwX2RhdGEgKikmZGV2LT5kYXRhOworfQorCitzdGF0aWMgdm9pZCBtY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBtY3M3ODMwX2RhdGEgKmRhdGEgPSBtY3M3ODMwX2dldF9kYXRhKGRldik7CisJbWNzNzgzMF9zZXRfcmVnX2FzeW5jKGRldiwgSElGX1JFR19NVUxUSUNBU1RfSEFTSCwKKwkJCQlzaXplb2YgZGF0YS0+bXVsdGlfZmlsdGVyLAorCQkJCWRhdGEtPm11bHRpX2ZpbHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIG1jczc4MzBfaGlmX3VwZGF0ZV9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCS8qIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRvIGRhdGEtPmNvbmZpZworICAgICAgICAgICAoYXJndW1lbnQgbmVlZHMgdG8gYmUgaGVhcC1iYXNlZCBhbnl3YXkgLSBVU0IgRE1BISkgKi8KKwlzdHJ1Y3QgbWNzNzgzMF9kYXRhICpkYXRhID0gbWNzNzgzMF9nZXRfZGF0YShkZXYpOworCW1jczc4MzBfc2V0X3JlZ19hc3luYyhkZXYsIEhJRl9SRUdfQ09ORklHLCAxLCAmZGF0YS0+Y29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgbWNzNzgzMF9kYXRhX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBtY3M3ODMwX2RhdGEgKmRhdGEgPSAoc3RydWN0IG1jczc4MzBfZGF0YSAqKSZkZXYtPmRhdGE7CisJc3RydWN0IG1jczc4MzBfZGF0YSAqZGF0YSA9IG1jczc4MzBfZ2V0X2RhdGEoZGV2KTsKKworCW1lbXNldChkYXRhLT5tdWx0aV9maWx0ZXIsIDAsIHNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIpOwogCiAJZGF0YS0+Y29uZmlnID0gSElGX1JFR19DT05GSUdfVFhFTkFCTEU7CiAKQEAgLTM5MCwzNiArNDQxLDY0IEBACiAJZGF0YS0+Y29uZmlnIHw9IEhJRl9SRUdfQ09ORklHX0FMTE1VTFRJQ0FTVDsKIAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJZGF0YS0+Y29uZmlnIHw9IEhJRl9SRUdfQ09ORklHX1BST01JU0NJT1VTOworCQlkYXRhLT5jb25maWcgfD0gSElGX1JFR19DT05GSUdfUFJPTUlTQ1VPVVM7CiAJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCSAgIG5ldC0+bWNfY291bnQgPiBNQ1M3ODMwX01BWF9NQ0FTVCkgeworCQkgICBuZXRkZXZfbWNfY291bnQobmV0KSA+IE1DUzc4MzBfTUFYX01DQVNUKSB7CiAJCWRhdGEtPmNvbmZpZyB8PSBISUZfUkVHX0NPTkZJR19BTExNVUxUSUNBU1Q7Ci0JfSBlbHNlIGlmIChuZXQtPm1jX2NvdW50ID09IDApIHsKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShuZXQpKSB7CiAJCS8qIGp1c3QgYnJvYWRjYXN0IGFuZCBkaXJlY3RlZCAqLwogCX0gZWxzZSB7CiAJCS8qIFdlIHVzZSB0aGUgMjAgYnl0ZSBkZXYtPmRhdGEKIAkJICogZm9yIG91ciA4IGJ5dGUgZmlsdGVyIGJ1ZmZlcgogCQkgKiB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0CiAJCSAqIGlzIHRyaWNreSB0byBmcmVlIGxhdGVyICovCi0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IG5ldC0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCQl1MzIgY3JjX2JpdHM7Ci0JCWludCBpOwotCi0JCW1lbXNldChkYXRhLT5tdWx0aV9maWx0ZXIsIDAsIHNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIpOwogCiAJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCi0JCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQljcmNfYml0cyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9IDEgPDwgKGNyY19iaXRzICYgNyk7Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQorCX0KK30KIAotCQltY3M3ODMwX3NldF9yZWdfYXN5bmMoZGV2LCBISUZfUkVHX01VTFRJQ0FTVF9IQVNILAotCQkJCXNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIsCi0JCQkJZGF0YS0+bXVsdGlfZmlsdGVyKTsKK3N0YXRpYyBpbnQgbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJaW50IHJldDsKKworCS8qIHJlLWNvbmZpZ3VyZSBrbm93biBNQUMgKHN1c3BlbmQgY2FzZSBldGMuKSAqLworCXJldCA9IG1jczc4MzBfaGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIGRldi0+bmV0LT5kZXZfYWRkcik7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IE1BQyBhZGRyZXNzXG4iKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JbWNzNzgzMF9zZXRfcmVnX2FzeW5jKGRldiwgSElGX1JFR19DT05GSUcsIDEsICZkYXRhLT5jb25maWcpOworCS8qIFNldCB1cCBQSFkgKi8KKwlyZXQgPSBtY3M3ODMwX3NldF9hdXRvbmVnKGRldiwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IGF1dG9uZWdcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goZGV2KTsKKwltY3M3ODMwX2hpZl91cGRhdGVfY29uZmlnKGRldik7CisKKwltY3M3ODMwX3Jldl9DX2ZpeHVwKGRldik7CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBjcmVkaXRzIGdvIHRvIGFzaXhfc2V0X211bHRpY2FzdCAqLworc3RhdGljIHZvaWQgbWNzNzgzMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCW1jczc4MzBfZGF0YV9zZXRfbXVsdGljYXN0KG5ldCk7CisKKwltY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goZGV2KTsKKwltY3M3ODMwX2hpZl91cGRhdGVfY29uZmlnKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgbWNzNzgzMF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKQEAgLTQ2MywyOSArNTQyLDYgQEAKIAkubndheV9yZXNldAkJPSB1c2JuZXRfbndheV9yZXNldCwKIH07CiAKLXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCi0JcmV0ID0gbWNzNzgzMF9zZXRfcmVnKGRldiwgSElGX1JFR19FVEhFUk5FVF9BRERSLCBFVEhfQUxFTiwKLQkJCW5ldGRldi0+ZGV2X2FkZHIpOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3M3ODMwX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKQEAgLTQ5NSwyMSArNTUxLDMyIEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bCAJCT0gbWNzNzgzMF9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdCwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwkgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG1jczc4MzBfc2V0X21hY19hZGRyZXNzLAogfTsKIAogc3RhdGljIGludCBtY3M3ODMwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2LT5uZXQ7CiAJaW50IHJldDsKKwlpbnQgcmV0cnk7CiAKLQlyZXQgPSBtY3M3ODMwX2luaXRfZGV2KGRldik7CisJLyogSW5pdGlhbCBzdGFydHVwOiBHYXRoZXIgTUFDIGFkZHJlc3Mgc2V0dGluZyBmcm9tIEVFUFJPTSAqLworCXJldCA9IC1FSU5WQUw7CisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNSAmJiByZXQ7IHJldHJ5KyspCisJCXJldCA9IG1jczc4MzBfaGlmX2dldF9tYWNfYWRkcmVzcyhkZXYsIG5ldC0+ZGV2X2FkZHIpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmRldi0+dWRldi0+ZGV2LCAiQ2Fubm90IHJlYWQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltY3M3ODMwX2RhdGFfc2V0X211bHRpY2FzdChuZXQpOworCisJcmV0ID0gbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJbmV0LT5ldGh0b29sX29wcyA9ICZtY3M3ODMwX2V0aHRvb2xfb3BzOwogCW5ldC0+bmV0ZGV2X29wcyA9ICZtY3M3ODMwX25ldGRldl9vcHM7Ci0JbWNzNzgzMF9zZXRfbXVsdGljYXN0KG5ldCk7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CkBAIC01MjYsNyArNTkzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBUaGUgY2hpcCBhbHdheXMgYXBwZW5kcyBhIHN0YXR1cyBieXRlcyB0aGF0IHdlIG5lZWQgdG8gc3RyaXAgKi8KKy8qIFRoZSBjaGlwIGFsd2F5cyBhcHBlbmRzIGEgc3RhdHVzIGJ5dGUgdGhhdCB3ZSBuZWVkIHRvIHN0cmlwICovCiBzdGF0aWMgaW50IG1jczc4MzBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXU4IHN0YXR1czsKQEAgLTUzOSw5ICs2MDYsMjMgQEAKIAlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gMSk7CiAJc3RhdHVzID0gc2tiLT5kYXRhW3NrYi0+bGVuXTsKIAotCWlmIChzdGF0dXMgIT0gMHgyMCkKKwlpZiAoc3RhdHVzICE9IE1DUzc4MzBfUlhfRlJBTUVfQ09SUkVDVCkgewogCQlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwgInJ4IGZpeHVwIHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKIAorCQkvKiBobW0sIHBlcmhhcHMgdXNibmV0LmMgYWxyZWFkeSBzZWVzIGEgZ2xvYmFsbHkgdmlzaWJsZQorCQkgICBmcmFtZSBlcnJvciBhbmQgaW5jcmVtZW50cyByeF9lcnJvcnMgb24gaXRzIG93biBhbHJlYWR5PyAqLworCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisKKwkJaWYgKHN0YXR1cyAmCShNQ1M3ODMwX1JYX1NIT1JUX0ZSQU1FCisJCQkJfE1DUzc4MzBfUlhfTEVOR1RIX0VSUk9SCisJCQkJfE1DUzc4MzBfUlhfTEFSR0VfRlJBTUUpKQorCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIE1DUzc4MzBfUlhfQUxJR05NRU5UX0VSUk9SKQorCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgTUNTNzgzMF9SWF9DUkNfRVJST1IpCisJCQlkZXYtPm5ldC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCX0KKwogCXJldHVybiBza2ItPmxlbiA+IDA7CiB9CiAKQEAgLTU4MCw2ICs2NjEsMjAgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwogCitzdGF0aWMgaW50IG1jczc4MzBfcmVzZXRfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKyAJLyogWUVTLCB0aGlzIGZ1bmN0aW9uIGlzIHN1Y2Nlc3NmdWwgZW5vdWdoIHRoYXQgZXRodG9vbCAtZAorICAgICAgICAgICBkb2VzIHNob3cgc2FtZSBvdXRwdXQgcHJlLS9wb3N0LXN1c3BlbmQgKi8KKworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhkZXYpOworCisJdXNibmV0X3Jlc3VtZShpbnRmKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWNzNzgzMF9kcml2ZXIgPSB7CiAJLm5hbWUgPSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBwcm9kdWN0cywKQEAgLTU4Nyw2ICs2ODIsNyBAQAogCS5kaXNjb25uZWN0ID0gdXNibmV0X2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQgPSB1c2JuZXRfc3VzcGVuZCwKIAkucmVzdW1lID0gdXNibmV0X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gbWNzNzgzMF9yZXNldF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtY3M3ODMwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCmluZGV4IGFlYjFhYjAuLmJkY2FkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwpAQCAtMjAzLDI1ICsyMDMsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfdXNiY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHVzYmN0bCkKIHsKLQlpZiAoIW5ldGlmX21zZ19saW5rKGRldikpCi0JCXJldHVybjsKLQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyB1c2JjdGwgMHgleDolcyVzJXMlcyVzOyIKLQkJCSIgdGhpcyVzJXM7IgotCQkJIiBvdGhlciVzJXM7IHIvbyAweCV4IiwKLQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCXVzYmN0bCwKLQkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfTEFORykgPyAiIGxhbmciIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX01GR1IpID8gIiBtZmdyIiA6ICIiLAotCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9QUk9EKSA/ICIgcHJvZCIgOiAiIiwKLQkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfU0VSSUFMKSA/ICIgc2VyaWFsIiA6ICIiLAotCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9ERUZBVUxUUykgPyAiIGRlZmF1bHRzIiA6ICIiLAorCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LAorCQkgICJuZXQxMDgwICVzLSVzIHVzYmN0bCAweCV4OiVzJXMlcyVzJXM7IHRoaXMlcyVzOyBvdGhlciVzJXM7IHIvbyAweCV4XG4iLAorCQkgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkgIHVzYmN0bCwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9MQU5HKSA/ICIgbGFuZyIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9NRkdSKSA/ICIgbWZnciIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9QUk9EKSA/ICIgcHJvZCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9TRVJJQUwpID8gIiBzZXJpYWwiIDogIiIsCisJCSAgKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfREVGQVVMVFMpID8gIiBkZWZhdWx0cyIgOiAiIiwKIAotCQkodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX09USEVSKSA/ICIgRkxVU0giIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9PVEhFUikgPyAiIERJUyIgOiAiIiwKLQkJKHVzYmN0bCAmIFVTQkNUTF9GTFVTSF9USElTKSA/ICIgRkxVU0giIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9USElTKSA/ICIgRElTIiA6ICIiLAotCQl1c2JjdGwgJiB+VVNCQ1RMX1dSSVRBQkxFX01BU0sKLQkJKTsKKwkJICAodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX1RISVMpID8gIiBGTFVTSCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fVEhJUykgPyAiIERJUyIgOiAiIiwKKworCQkgICh1c2JjdGwgJiBVU0JDVExfRkxVU0hfT1RIRVIpID8gIiBGTFVTSCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fT1RIRVIpID8gIiBESVMiIDogIiIsCisKKwkJICB1c2JjdGwgJiB+VVNCQ1RMX1dSSVRBQkxFX01BU0spOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQ4LDMwICsyNDYsMjYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHN0YXR1cykKIHsKLQlpZiAoIW5ldGlmX21zZ19saW5rKGRldikpCi0JCXJldHVybjsKLQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyBzdGF0dXMgMHgleDoiCi0JCQkiIHRoaXMgKCVjKSBQS1Q9JWQlcyVzJXM7IgotCQkJIiBvdGhlciBQS1Q9JWQlcyVzJXM7IHVuc3BlYyAweCV4IiwKLQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCXN0YXR1cywKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwKKwkJICAibmV0MTA4MCAlcy0lcyBzdGF0dXMgMHgleDogdGhpcyAoJWMpIFBLVD0lZCVzJXMlczsgb3RoZXIgUEtUPSVkJXMlcyVzOyB1bnNwZWMgMHgleFxuIiwKKwkJICBkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJICBzdGF0dXMsCiAKLQkJLy8gWFhYIHRoZSBwYWNrZXQgY291bnRzIGRvbid0IHNlZW0gcmlnaHQKLQkJLy8gKDEgYXQgcmVzZXQsIG5vdCAwKTsgbWF5YmUgVU5TUEVDIHRvbworCQkgIC8vIFhYWCB0aGUgcGFja2V0IGNvdW50cyBkb24ndCBzZWVtIHJpZ2h0CisJCSAgLy8gKDEgYXQgcmVzZXQsIG5vdCAwKTsgbWF5YmUgVU5TUEVDIHRvbwogCi0JCShzdGF0dXMgJiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJywKLQkJU1RBVFVTX1BBQ0tFVFNfVEhJUyhzdGF0dXMpLAotCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fVEhJUykgPyAiIENPTiIgOiAiIiwKLQkJKHN0YXR1cyAmIFNUQVRVU19TVVNQRU5EX1RISVMpID8gIiBTVVMiIDogIiIsCi0JCShzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9USElTKSA/ICIgTUJPWCIgOiAiIiwKKwkJICAoc3RhdHVzICYgU1RBVFVTX1BPUlRfQSkgPyAnQScgOiAnQicsCisJCSAgU1RBVFVTX1BBQ0tFVFNfVEhJUyhzdGF0dXMpLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfQ09OTl9USElTKSA/ICIgQ09OIiA6ICIiLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9USElTKSA/ICIgU1VTIiA6ICIiLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9USElTKSA/ICIgTUJPWCIgOiAiIiwKIAotCQlTVEFUVVNfUEFDS0VUU19PVEhFUihzdGF0dXMpLAotCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiBDT04iIDogIiIsCi0JCShzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9PVEhFUikgPyAiIFNVUyIgOiAiIiwKLQkJKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX09USEVSKSA/ICIgTUJPWCIgOiAiIiwKKwkJICBTVEFUVVNfUEFDS0VUU19PVEhFUihzdGF0dXMpLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfQ09OTl9PVEhFUikgPyAiIENPTiIgOiAiIiwKKwkJICAoc3RhdHVzICYgU1RBVFVTX1NVU1BFTkRfT1RIRVIpID8gIiBTVVMiIDogIiIsCisJCSAgKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX09USEVSKSA/ICIgTUJPWCIgOiAiIiwKIAotCQlzdGF0dXMgJiBTVEFUVVNfVU5TUEVDX01BU0sKLQkJKTsKKwkJICBzdGF0dXMgJiBTVEFUVVNfVU5TUEVDX01BU0spOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjg2LDEwICsyODAsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmNfZHVtcF90dGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdHRsKQogewotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyB0dGwgMHgleCB0aGlzID0gJWQsIG90aGVyID0gJWQiLAotCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQl0dGwsIFRUTF9USElTKHR0bCksIFRUTF9PVEhFUih0dGwpKTsKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwgIm5ldDEwODAgJXMtJXMgdHRsIDB4JXggdGhpcyA9ICVkLCBvdGhlciA9ICVkXG4iLAorCQkgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkgIHR0bCwgVFRMX1RISVModHRsKSwgVFRMX09USEVSKHR0bCkpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzM0LDExICszMjcsOSBAQAogCQkJTUtfVFRMKE5DX1JFQURfVFRMX01TLCBUVExfT1RIRVIodHRsKSkgKTsKIAlkYmcoIiVzOiBhc3NpZ25lZCBUVEwsICVkIG1zIiwgZGV2LT5uZXQtPm5hbWUsIE5DX1JFQURfVFRMX01TKTsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZpbmZvKGRldiwgInBvcnQgJWMsIHBlZXIgJXNjb25uZWN0ZWQiLAotCQkJKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAotCQkJKHN0YXR1cyAmIFNUQVRVU19DT05OX09USEVSKSA/ICIiIDogImRpcyIKLQkJCSk7CisJbmV0aWZfaW5mbyhkZXYsIGxpbmssIGRldi0+bmV0LCAicG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxuIiwKKwkJICAgKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAorCQkgICAoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiIgOiAiZGlzIik7CiAJcmV0dmFsID0gMDsKIAogZG9uZToKQEAgLTQxNSw4ICs0MDYsOCBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJmbHVzaCBuZXQxMDgwOyB0b28gbWFueSBmcmFtaW5nIGVycm9ycyIpOworCQluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LAorCQkJICAiZmx1c2ggbmV0MTA4MDsgdG9vIG1hbnkgZnJhbWluZyBlcnJvcnNcbiIpOwogCQlkZXYtPmZyYW1lX2Vycm9ycyA9IDA7CiAJfQogfQpAQCAtNDg2LDggKzQ3Nyw4IEBACiAJCXJldHVybiAwOwogCX0KICNpZiAwCi0JZGV2ZGJnKGRldiwgImZyYW1lIDxyeCBoICVkIHAgJWQgaWQgJWQiLCBoZWFkZXItPmhkcl9sZW4sCi0JCWhlYWRlci0+cGFja2V0X2xlbiwgaGVhZGVyLT5wYWNrZXRfaWQpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJmcmFtZSA8cnggaCAlZCBwICVkIGlkICVkXG4iLCBoZWFkZXItPmhkcl9sZW4sCisJCSAgIGhlYWRlci0+cGFja2V0X2xlbiwgaGVhZGVyLT5wYWNrZXRfaWQpOwogI2VuZGlmCiAJZGV2LT5mcmFtZV9lcnJvcnMgPSAwOwogCXJldHVybiAxOwpAQCAtNTQ3LDkgKzUzOCw5IEBACiAJdHJhaWxlciA9IChzdHJ1Y3QgbmNfdHJhaWxlciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mICp0cmFpbGVyKTsKIAlwdXRfdW5hbGlnbmVkKGhlYWRlci0+cGFja2V0X2lkLCAmdHJhaWxlci0+cGFja2V0X2lkKTsKICNpZiAwCi0JZGV2ZGJnKGRldiwgImZyYW1lID50eCBoICVkIHAgJWQgaWQgJWQiLAotCQloZWFkZXItPmhkcl9sZW4sIGhlYWRlci0+cGFja2V0X2xlbiwKLQkJaGVhZGVyLT5wYWNrZXRfaWQpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJmcmFtZSA+dHggaCAlZCBwICVkIGlkICVkXG4iLAorCQkgICBoZWFkZXItPmhkcl9sZW4sIGhlYWRlci0+cGFja2V0X2xlbiwKKwkJICAgaGVhZGVyLT5wYWNrZXRfaWQpOwogI2VuZGlmCiAJcmV0dXJuIHNrYjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCmluZGV4IGVkNGE1MDguLjQxODM4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwpAQCAtMTMyLDkgKzEzMiwxMCBAQAogCWNhc2UgLUVOT0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJZGV2X2RiZygmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2RiZyhwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwKKwkJCQkgICIlcywgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJYnJlYWs7CiAJfQogCXBlZ2FzdXMtPmZsYWdzICY9IH5FVEhfUkVHU19DSEFOR0VEOwogCXdha2VfdXAoJnBlZ2FzdXMtPmN0cmxfd2FpdCk7CkBAIC0xNDksOSArMTUwLDggQEAKIAogCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKLQkJCQkJX19mdW5jX18pOworCQluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJICAgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKQEAgLTE4MSw5ICsxODEsOSBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJbmV0aWZfZXJyKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIwNSw5ICsyMDUsOCBAQAogCiAJYnVmZmVyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzXG4iLAotCQkJCQlfX2Z1bmNfXyk7CisJCW5ldGlmX3dhcm4ocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsCisJCQkgICAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CkBAIC0yMzcsOSArMjM2LDggQEAKIAlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpIHsKIAkJaWYgKHJldCA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQluZXRpZl9lcnIocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsCisJCQkgICIlcywgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTksOSArMjU3LDggQEAKIAogCXRtcCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXApIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKLQkJCQkJX19mdW5jX18pOworCQluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJICAgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweSh0bXAsICZkYXRhLCAxKTsKQEAgLTI5MCw5ICsyODcsOSBAQAogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgewogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJbmV0aWZfZXJyKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTMyMyw5ICszMjAsOCBAQAogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgewogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKLQkJCQkJX19mdW5jX18sIHJldCk7CisJCW5ldGlmX2VycihwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwKKwkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDksMTQgKzM0NSwxNiBAQAogCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQogCQkJYnJlYWs7CiAJfQotCWlmIChpIDwgUkVHX1RJTUVPVVQpIHsKLQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOwotCQkqcmVnZCA9IGxlMTZfdG9fY3B1KHJlZ2RpKTsKLQkJcmV0dXJuIHJldDsKLQl9CisKKwlpZiAoaSA+PSBSRUdfVElNRU9VVCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOworCSpyZWdkID0gbGUxNl90b19jcHUocmVnZGkpOworCXJldHVybiByZXQ7CisKIGZhaWw6Ci0JaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzg4LDEyICszODYsMTQgQEAKIAkJaWYgKGRhdGFbMF0gJiBQSFlfRE9ORSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoaSA8IFJFR19USU1FT1VUKQotCQlyZXR1cm4gcmV0OworCisJaWYgKGkgPj0gUkVHX1RJTUVPVVQpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiByZXQ7CiAKIGZhaWw6Ci0JaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTQyMiwxNSArNDIyLDE1IEBACiAJCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJCWdvdG8gZmFpbDsKIAl9Ci0JaWYgKGkgPCBSRUdfVElNRU9VVCkgewotCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKLQkJKnJldGRhdGEgPSBsZTE2X3RvX2NwdShyZXRkYXRhaSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChpID49IFJFR19USU1FT1VUKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKKwkqcmV0ZGF0YSA9IGxlMTZfdG9fY3B1KHJldGRhdGFpKTsKKwlyZXR1cm4gcmV0OwogCiBmYWlsOgotCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJbmV0aWZfd2FybihwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCkBAIC00NzUsMTEgKzQ3NSwxMyBAQAogCQkJYnJlYWs7CiAJfQogCWRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1cyk7Ci0JaWYgKGkgPCBSRUdfVElNRU9VVCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoaSA+PSBSRUdfVElNRU9VVCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIHJldDsKKwogZmFpbDoKLQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOworCW5ldGlmX3dhcm4ocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KICNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLwpAQCAtNjQyLDI1ICs2NDQsMjAgQEAKIAljYXNlIDA6CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FOgotCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKLQkJCXByX2RlYnVnKCIlczogcmVzZXQgTUFDXG4iLCBuZXQtPm5hbWUpOworCQluZXRpZl9kYmcocGVnYXN1cywgcnhfZXJyLCBuZXQsICJyZXNldCBNQUNcbiIpOwogCQlwZWdhc3VzLT5mbGFncyAmPSB+UEVHQVNVU19SWF9CVVNZOwogCQlicmVhazsKIAljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KIAkJLyogRklYTUUgc2NoZWR1bGUgd29yayB0byBjbGVhciB0aGUgaGFsdCAqLwotCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyByeCBzdGFsbCByZWNvdmVyeVxuIiwKLQkJCQkJbmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCByeF9lcnIsIG5ldCwgIm5vIHJ4IHN0YWxsIHJlY292ZXJ5XG4iKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IHJ4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmZG93biwgbmV0LCAicnggdW5saW5rLCAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBSWCBzdGF0dXMgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIHJ4X2VyciwgbmV0LCAiUlggc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQlnb3RvIGdvb247CiAJfQogCkBAIC02NjksOSArNjY2LDggQEAKIAogCXJ4X3N0YXR1cyA9IGJ1Zltjb3VudCAtIDJdOwogCWlmIChyeF9zdGF0dXMgJiAweDFlKSB7Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBSWCBwYWNrZXQgZXJyb3IgJXhcbiIsCi0JCQkJCW5ldC0+bmFtZSwgcnhfc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIHJ4X2VyciwgbmV0LAorCQkJICAiUlggcGFja2V0IGVycm9yICV4XG4iLCByeF9zdGF0dXMpOwogCQlwZWdhc3VzLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJaWYgKHJ4X3N0YXR1cyAmIDB4MDYpCS8vIGxvbmcgb3IgcnVudAogCQkJcGVnYXN1cy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwpAQCAtNzU4LDkgKzc1NCw3IEBACiAJCXBlZ2FzdXMtPnJ4X3NrYiA9IHB1bGxfc2tiKHBlZ2FzdXMpOwogCX0KIAlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG93IG9uIG1lbW9yeVxuIiwKLQkJCQkJcGVnYXN1cy0+bmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCByeF9lcnIsIHBlZ2FzdXMtPm5ldCwgImxvdyBvbiBtZW1vcnlcbiIpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZwZWdhc3VzLT5yeF90bCk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04MDAsMTkgKzc5NCwxNSBAQAogCWNhc2UgLUVQSVBFOgogCQkvKiBGSVhNRSBzY2hlZHVsZV93b3JrKCkgdG8gY2xlYXIgdGhlIHR4IGhhbHQgKi8KIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwotCQlpZiAobmV0aWZfbXNnX3R4X2VycihwZWdhc3VzKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyB0eCBzdGFsbCByZWNvdmVyeVxuIiwKLQkJCQkJbmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCB0eF9lcnIsIG5ldCwgIm5vIHR4IHN0YWxsIHJlY292ZXJ5XG4iKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IHR4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmZG93biwgbmV0LCAidHggdW5saW5rLCAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWlmIChuZXRpZl9tc2dfdHhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfaW5mbygiJXM6IFRYIHN0YXR1cyAlZFxuIiwgbmV0LT5uYW1lLCBzdGF0dXMpOworCQluZXRpZl9pbmZvKHBlZ2FzdXMsIHR4X2VyciwgbmV0LCAiVFggc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQkvKiBGQUxMIFRIUk9VR0ggKi8KIAljYXNlIDA6CiAJCWJyZWFrOwpAQCAtODQzLDkgKzgzMyw3IEBACiAJCS8qIHNvbWUgUGVnYXN1cy1JIHByb2R1Y3RzIHJlcG9ydCBMT1RTIG9mIGRhdGEKIAkJICogdG9nZ2xlIGVycm9ycy4uLiBhdm9pZCBsb2cgc3BhbW1pbmcKIAkJICovCi0JCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGludHIgc3RhdHVzICVkXG4iLCBuZXQtPm5hbWUsCi0JCQkJCXN0YXR1cyk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCB0aW1lciwgbmV0LCAiaW50ciBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PSA2KSB7CkBAIC04NzUsMTYgKzg2MywxNSBAQAogCXJlcyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlcyA9PSAtRU5PREVWKQogCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JaWYgKHJlcyAmJiBuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHJlc3VibWl0IGludGVycnVwdCB1cmIsICVkXG4iLAotCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwlpZiAocmVzKQorCQluZXRpZl9lcnIocGVnYXN1cywgdGltZXIsIG5ldCwKKwkJCSAgImNhbid0IHJlc3VibWl0IGludGVycnVwdCB1cmIsICVkXG4iLCByZXMpOwogfQogCiBzdGF0aWMgdm9pZCBwZWdhc3VzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOwotCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0eCB0aW1lb3V0XG4iLCBuZXQtPm5hbWUpOworCW5ldGlmX3dhcm4ocGVnYXN1cywgdGltZXIsIG5ldCwgInR4IHRpbWVvdXRcbiIpOwogCXVzYl91bmxpbmtfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CiAJcGVnYXN1cy0+c3RhdHMudHhfZXJyb3JzKys7CiB9CkBAIC05MDYsOSArODkzLDcgQEAKIAkJCSAgcGVnYXN1cy0+dHhfYnVmZiwgY291bnQsCiAJCQkgIHdyaXRlX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOwogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+dHhfdXJiLCBHRlBfQVRPTUlDKSkpIHsKLQkJaWYgKG5ldGlmX21zZ190eF9lcnIocGVnYXN1cykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbCB0eCwgJWRcbiIsCi0JCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCB0eF9lcnIsIG5ldCwgImZhaWwgdHgsICVkXG4iLCByZXMpOwogCQlzd2l0Y2ggKHJlcykgewogCQljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KIAkJCS8qIGNsZWFudXAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNjaGVkdWxlZCAqLwpAQCAtOTUyLDEwICs5MzcsOSBAQAogCWludGVydmFsID0gZGF0YSA+PiA4OwogCWlmIChwZWdhc3VzLT51c2ItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CiAJCWlmIChpbnRlcnZhbCA8IDB4ODApIHsKLQkJCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCQkJZGV2X2luZm8oJnBlZ2FzdXMtPmludGYtPmRldiwgImludHIgaW50ZXJ2YWwgIgotCQkJCQkiY2hhbmdlZCBmcm9tICV1bXMgdG8gJXVtc1xuIiwKLQkJCQkJaW50ZXJ2YWwsIDB4ODApOworCQkJbmV0aWZfaW5mbyhwZWdhc3VzLCB0aW1lciwgcGVnYXN1cy0+bmV0LAorCQkJCSAgICJpbnRyIGludGVydmFsIGNoYW5nZWQgZnJvbSAldW1zIHRvICV1bXNcbiIsCisJCQkJICAgaW50ZXJ2YWwsIDB4ODApOwogCQkJaW50ZXJ2YWwgPSAweDgwOwogCQkJZGF0YSA9IChkYXRhICYgMHgwMEZGKSB8ICgodTE2KWludGVydmFsIDw8IDgpOwogI2lmZGVmIFBFR0FTVVNfV1JJVEVfRUVQUk9NCkBAIC0xMDQ2LDggKzEwMzAsNyBAQAogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCByeF91cmIsICVkIiwgbmV0LT5uYW1lLCByZXMpOworCQluZXRpZl9kYmcocGVnYXN1cywgaWZ1cCwgbmV0LCAiZmFpbGVkIHJ4X3VyYiwgJWRcbiIsIHJlcyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEwNTgsMTUgKzEwNDEsMTMgQEAKIAlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCBpbnRyX3VyYiwgJWRcbiIsIG5ldC0+bmFtZSwgcmVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmdXAsIG5ldCwgImZhaWxlZCBpbnRyX3VyYiwgJWRcbiIsIHJlcyk7CiAJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWlmICgocmVzID0gZW5hYmxlX25ldF90cmFmZmljKG5ldCwgcGVnYXN1cy0+dXNiKSkpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBlbmFibGVfbmV0X3RyYWZmaWMoKSAtICVkXG4iLAotCQkJCQluZXQtPm5hbWUsIHJlcyk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCBpZnVwLCBuZXQsCisJCQkgICJjYW4ndCBlbmFibGVfbmV0X3RyYWZmaWMoKSAtICVkXG4iLCByZXMpOwogCQlyZXMgPSAtRUlPOwogCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKIAkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKQEAgLTEwNzUsOCArMTA1Niw3IEBACiAJfQogCXNldF9jYXJyaWVyKG5ldCk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKLQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCXByX2RlYnVnKCIlczogb3BlblxuIiwgbmV0LT5uYW1lKTsKKwluZXRpZl9kYmcocGVnYXN1cywgaWZ1cCwgbmV0LCAib3BlblxuIik7CiAJcmVzID0gMDsKIGV4aXQ6CiAJcmV0dXJuIHJlczsKQEAgLTEyMzAsMTMgKzEyMTAsMTEgQEAKIAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdIHw9IFJYX1BST01JU0NVT1VTOwotCQlpZiAobmV0aWZfbXNnX2xpbmsocGVnYXN1cykpCi0JCQlwcl9pbmZvKCIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgbmV0LT5uYW1lKTsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgfHwgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCW5ldGlmX2luZm8ocGVnYXN1cywgbGluaywgbmV0LCAiUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkXG4iKTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSB8fCAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDBdIHw9IFJYX01VTFRJQ0FTVDsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdICY9IH5SWF9QUk9NSVNDVU9VUzsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBzZXQgYWxsbXVsdGlcbiIsIG5ldC0+bmFtZSk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCBsaW5rLCBuZXQsICJzZXQgYWxsbXVsdGlcbiIpOwogCX0gZWxzZSB7CiAJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwwXSAmPSB+UlhfTVVMVElDQVNUOwogCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMl0gJj0gflJYX1BST01JU0NVT1VTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggNDkwZmE4Zi4uNGNlMzMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC01Nyw4ICs1Nyw4IEBACiAgKi8KIHZvaWQgcm5kaXNfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQogewotCWRldmRiZyhkZXYsICJybmRpcyBzdGF0dXMgdXJiLCBsZW4gJWQgc3RhdCAlZCIsCi0JCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5zdGF0dXMpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJybmRpcyBzdGF0dXMgdXJiLCBsZW4gJWQgc3RhdCAlZFxuIiwKKwkJICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnN0YXR1cyk7CiAJLy8gRklYTUUgZm9yIGtlZXBhbGl2ZXMsIHJlc3BvbmQgaW1tZWRpYXRlbHkgKGFzeW5jaHJvbm91c2x5KQogCS8vIGlmIG5vdCBhbiBSTkRJUyBzdGF0dXMsIGRvIGxpa2UgY2RjX3N0YXR1cyhkZXYsdXJiKSBkb2VzCiB9CkBAIC0zMzUsOCArMzM1LDggQEAKIAogCWRldi0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtPnVkZXYsIGRldi0+b3V0LCAxKTsKIAlpZiAoZGV2LT5tYXhwYWNrZXQgPT0gMCkgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkZXYtPm1heHBhY2tldCBjYW4ndCBiZSAwXG4iKTsKKwkJbmV0aWZfZGJnKGRldiwgcHJvYmUsIGRldi0+bmV0LAorCQkJICAiZGV2LT5tYXhwYWNrZXQgY2FuJ3QgYmUgMFxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbF9hbmRfcmVsZWFzZTsKIAl9CkBAIC0zOTQsMTcgKzM5NCwxNSBAQAogCX0KIAlpZiAoKGZsYWdzICYgRkxBR19STkRJU19QSFlNX1dJUkVMRVNTKSAmJgogCQkJKnBoeW0gIT0gUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTikgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkcml2ZXIgcmVxdWlyZXMgd2lyZWxlc3MgIgotCQkJCSJwaHlzaWNhbCBtZWRpdW0sIGJ1dCBkZXZpY2UgaXMgbm90LlxuIik7CisJCW5ldGlmX2RiZyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJCSAgImRyaXZlciByZXF1aXJlcyB3aXJlbGVzcyBwaHlzaWNhbCBtZWRpdW0sIGJ1dCBkZXZpY2UgaXMgbm90XG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBoYWx0X2ZhaWxfYW5kX3JlbGVhc2U7CiAJfQogCWlmICgoZmxhZ3MgJiBGTEFHX1JORElTX1BIWU1fTk9UX1dJUkVMRVNTKSAmJgogCQkJKnBoeW0gPT0gUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTikgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkcml2ZXIgcmVxdWlyZXMgbm9uLXdpcmVsZXNzICIKLQkJCQkicGh5c2ljYWwgbWVkaXVtLCBidXQgZGV2aWNlIGlzIHdpcmVsZXNzLlxuIik7CisJCW5ldGlmX2RiZyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJCSAgImRyaXZlciByZXF1aXJlcyBub24td2lyZWxlc3MgcGh5c2ljYWwgbWVkaXVtLCBidXQgZGV2aWNlIGlzIHdpcmVsZXNzLlxuIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCX0KQEAgLTQ5Nyw5ICs0OTUsOSBAQAogCQkJICAgICBza2ItPmxlbiA8IG1zZ19sZW4gfHwKIAkJCSAgICAgKGRhdGFfb2Zmc2V0ICsgZGF0YV9sZW4gKyA4KSA+IG1zZ19sZW4pKSB7CiAJCQlkZXYtPm5ldC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQlkZXZkYmcoZGV2LCAiYmFkIHJuZGlzIG1lc3NhZ2UgJWQvJWQvJWQvJWQsIGxlbiAlZCIsCi0JCQkJbGUzMl90b19jcHUoaGRyLT5tc2dfdHlwZSksCi0JCQkJbXNnX2xlbiwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuLCBza2ItPmxlbik7CisJCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiYmFkIHJuZGlzIG1lc3NhZ2UgJWQvJWQvJWQvJWQsIGxlbiAlZFxuIiwKKwkJCQkgICBsZTMyX3RvX2NwdShoZHItPm1zZ190eXBlKSwKKwkJCQkgICBtc2dfbGVuLCBkYXRhX29mZnNldCwgZGF0YV9sZW4sIHNrYi0+bGVuKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXNrYl9wdWxsKHNrYiwgOCArIGRhdGFfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGZkMTlkYjAuLmU4NWM4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMzEzLDIwICszMTMsMTcgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgaTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JZGJnKCIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAiLCBuZXRkZXYtPm5hbWUpOwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCWRiZygiJTAyWDoiLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKLQlkYmcoIiUwMlhcbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCWRiZygiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gJXBNXG4iLCBuZXRkZXYtPm5hbWUsIG5ldGRldi0+ZGV2X2FkZHIpOwogCS8qIFNldCB0aGUgSURSIHJlZ2lzdGVycy4gKi8KIAlzZXRfcmVnaXN0ZXJzKGRldiwgSURSLCBuZXRkZXYtPmFkZHJfbGVuLCBuZXRkZXYtPmRldl9hZGRyKTsKICNpZmRlZiBFRVBST01fV1JJVEUKIAl7CisJaW50IGk7CiAJdTggY3I7CiAJLyogR2V0IHRoZSBDUiBjb250ZW50cy4gKi8KIAlnZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CkBAIC03MTQsNyArNzExLDcgQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOwogCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICIlczogcHJvbWlzY3VvdXMgbW9kZVxuIiwgbmV0ZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYgKG5ldGRldi0+bWNfY291bnQgfHwKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSB8fAogCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCAwYzNjNzM4Li5kZjkxNzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNzgsNyArNzgsNyBAQAogCQkwMCwgaW5kZXgsIGJ1ZiwgNCwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwogCiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIHJlZ2lzdGVyIGluZGV4IDB4JTA4eCIsIGluZGV4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCByZWdpc3RlciBpbmRleCAweCUwOHhcbiIsIGluZGV4KTsKIAogCWxlMzJfdG9fY3B1cyhidWYpOwogCSpkYXRhID0gKmJ1ZjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQkwMCwgaW5kZXgsIGJ1ZiwgNCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciBpbmRleCAweCUwOHgiLCBpbmRleCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyIGluZGV4IDB4JTA4eFxuIiwgaW5kZXgpOwogCiAJa2ZyZWUoYnVmKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAkvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqLwogCWlmIChzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpKSB7Ci0JCWRldndhcm4oZGV2LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb19yZWFkIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb19yZWFkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnBoeV9tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCXNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTsKIAogCWlmIChzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpKSB7Ci0JCWRldndhcm4oZGV2LCAiVGltZWQgb3V0IHJlYWRpbmcgTUlJIHJlZyAlMDJYIiwgaWR4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJUaW1lZCBvdXQgcmVhZGluZyBNSUkgcmVnICUwMlhcbiIsIGlkeCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xNzIsNyArMTcyLDcgQEAKIAogCS8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovCiAJaWYgKHNtc2M5NXh4X3BoeV93YWl0X25vdF9idXN5KGRldikpIHsKLQkJZGV2d2FybihkZXYsICJNSUkgaXMgYnVzeSBpbiBzbXNjOTV4eF9tZGlvX3dyaXRlIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb193cml0ZVxuIik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FERFIsIGFkZHIpOwogCiAJaWYgKHNtc2M5NXh4X3BoeV93YWl0X25vdF9idXN5KGRldikpCi0JCWRldndhcm4oZGV2LCAiVGltZWQgb3V0IHdyaXRpbmcgTUlJIHJlZyAlMDJYIiwgaWR4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJUaW1lZCBvdXQgd3JpdGluZyBNSUkgcmVnICUwMlhcbiIsIGlkeCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+cGh5X211dGV4KTsKIH0KQEAgLTIwNSw3ICsyMDUsNyBAQAogCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0X3RpbWUgKyBIWikpOwogCiAJaWYgKHZhbCAmIChFMlBfQ01EX1RJTUVPVVRfIHwgRTJQX0NNRF9CVVNZXykpIHsKLQkJZGV2d2FybihkZXYsICJFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dCIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTSByZWFkIG9wZXJhdGlvbiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJdWRlbGF5KDQwKTsKIAl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lICsgSFopKTsKIAotCWRldndhcm4oZGV2LCAiRUVQUk9NIGlzIGJ1c3kiKTsKKwluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTSBpcyBidXN5XG4iKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMzA4LDcgKzMwOCw3IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JCWRldndhcm4oZGV2LCAiYXN5bmMgY2FsbGJhY2sgZmFpbGVkIHdpdGggJWQiLCBzdGF0dXMpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkXG4iLCBzdGF0dXMpOwogCiAJa2ZyZWUodXNiX2NvbnRleHQpOwogCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtMzIzLDEzICszMjMsMTMgQEAKIAogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCF1cmIpIHsKLQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVycm9yIGFsbG9jYXRpbmcgVVJCXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdXNiX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2NvbnRleHQpLCBHRlBfQVRPTUlDKTsKIAlpZiAodXNiX2NvbnRleHQgPT0gTlVMTCkgewotCQlkZXZ3YXJuKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgY29udHJvbCBtc2ciKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIGNvbnRyb2wgbXNnXG4iKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTM0OCw3ICszNDgsOCBAQAogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkVycm9yIHN1Ym1pdHRpbmcgY29udHJvbCBtc2csIHN0cz0lZCIsIHN0YXR1cyk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3Igc3VibWl0dGluZyBjb250cm9sIG1zZywgc3RzPSVkXG4iLAorCQkJICAgIHN0YXR1cyk7CiAJCWtmcmVlKHVzYl9jb250ZXh0KTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJfQpAQCAtMzc1LDQ2ICszNzYsMzIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPm1hY19jcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAoZGV2LT5uZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWQiKTsKKwkJbmV0aWZfZGJnKGRldiwgZHJ2LCBkZXYtPm5ldCwgInByb21pc2N1b3VzIG1vZGUgZW5hYmxlZFxuIik7CiAJCXBkYXRhLT5tYWNfY3IgfD0gTUFDX0NSX1BSTVNfOwogCQlwZGF0YS0+bWFjX2NyICY9IH4oTUFDX0NSX01DUEFTXyB8IE1BQ19DUl9IUEZJTFRfKTsKIAl9IGVsc2UgaWYgKGRldi0+bmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewotCQlpZiAobmV0aWZfbXNnX2RydihkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgYWxsIG11bHRpY2FzdCBlbmFibGVkIik7CisJCW5ldGlmX2RiZyhkZXYsIGRydiwgZGV2LT5uZXQsICJyZWNlaXZlIGFsbCBtdWx0aWNhc3QgZW5hYmxlZFxuIik7CiAJCXBkYXRhLT5tYWNfY3IgfD0gTUFDX0NSX01DUEFTXzsKIAkJcGRhdGEtPm1hY19jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9IUEZJTFRfKTsKLQl9IGVsc2UgaWYgKGRldi0+bmV0LT5tY19jb3VudCA+IDApIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5uZXQtPm1jX2xpc3Q7Ci0JCWludCBjb3VudCA9IDA7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldi0+bmV0KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKIAkJcGRhdGEtPm1hY19jciB8PSBNQUNfQ1JfSFBGSUxUXzsKIAkJcGRhdGEtPm1hY19jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9NQ1BBU18pOwogCi0JCXdoaWxlIChtY19saXN0KSB7Ci0JCQljb3VudCsrOwotCQkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IEVUSF9BTEVOKSB7Ci0JCQkJdTMyIGJpdG51bSA9IHNtc2M5NXh4X2hhc2gobWNfbGlzdC0+ZG1pX2FkZHIpOwotCQkJCXUzMiBtYXNrID0gMHgwMSA8PCAoYml0bnVtICYgMHgxRik7Ci0JCQkJaWYgKGJpdG51bSAmIDB4MjApCi0JCQkJCWhhc2hfaGkgfD0gbWFzazsKLQkJCQllbHNlCi0JCQkJCWhhc2hfbG8gfD0gbWFzazsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2d2FybihkZXYsICJkbWlfYWRkcmxlbiAhPSA2Iik7Ci0JCQl9Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0ZGV2KSB7CisJCQl1MzIgYml0bnVtID0gc21zYzk1eHhfaGFzaChtY19saXN0LT5kbWlfYWRkcik7CisJCQl1MzIgbWFzayA9IDB4MDEgPDwgKGJpdG51bSAmIDB4MUYpOworCQkJaWYgKGJpdG51bSAmIDB4MjApCisJCQkJaGFzaF9oaSB8PSBtYXNrOworCQkJZWxzZQorCQkJCWhhc2hfbG8gfD0gbWFzazsKIAkJfQogCi0JCWlmIChjb3VudCAhPSAoKHUzMilkZXYtPm5ldC0+bWNfY291bnQpKQotCQkJZGV2d2FybihkZXYsICJtY19jb3VudCAhPSBkZXYtPm1jX2NvdW50Iik7Ci0KLQkJaWYgKG5ldGlmX21zZ19kcnYoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJIQVNISD0weCUwOFgsIEhBU0hMPTB4JTA4WCIsIGhhc2hfaGksCi0JCQkJaGFzaF9sbyk7CisJCW5ldGlmX2RiZyhkZXYsIGRydiwgZGV2LT5uZXQsICJIQVNISD0weCUwOFgsIEhBU0hMPTB4JTA4WFxuIiwKKwkJCQkgICBoYXNoX2hpLCBoYXNoX2xvKTsKIAl9IGVsc2UgewotCQlpZiAobmV0aWZfbXNnX2RydihkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgb3duIHBhY2tldHMgb25seSIpOworCQluZXRpZl9kYmcoZGV2LCBkcnYsIGRldi0+bmV0LCAicmVjZWl2ZSBvd24gcGFja2V0cyBvbmx5XG4iKTsKIAkJcGRhdGEtPm1hY19jciAmPQogCQkJfihNQUNfQ1JfUFJNU18gfCBNQUNfQ1JfTUNQQVNfIHwgTUFDX0NSX0hQRklMVF8pOwogCX0KQEAgLTQzNCw3ICs0MjEsNyBAQAogCiAJaW50IHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgQUZDX0NGRywgJmFmY19jZmcpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiZXJyb3IgcmVhZGluZyBBRkNfQ0ZHIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiZXJyb3IgcmVhZGluZyBBRkNfQ0ZHXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDUxLDEzICs0MzgsMTEgQEAKIAkJZWxzZQogCQkJYWZjX2NmZyAmPSB+MHhGOwogCi0JCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJ4IHBhdXNlICVzLCB0eCBwYXVzZSAlcyIsCi0JCQkJKGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAotCQkJCShjYXAgJiBGTE9XX0NUUkxfVFggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisJCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAicnggcGF1c2UgJXMsIHR4IHBhdXNlICVzXG4iLAorCQkJCSAgIGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCQkJICAgY2FwICYgRkxPV19DVFJMX1RYID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAJfSBlbHNlIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKGRldikpCi0JCQlkZXZkYmcoZGV2LCAiaGFsZiBkdXBsZXgiKTsKKwkJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJoYWxmIGR1cGxleFxuIik7CiAJCWZsb3cgPSAwOwogCQlhZmNfY2ZnIHw9IDB4RjsKIAl9CkBAIC00ODUsOSArNDcwLDggQEAKIAlsY2xhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlybXRhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfTFBBKTsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZkYmcoZGV2LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IHJtdGFkdjogJTA0eCIsCi0JCQllY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOworCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IHJtdGFkdjogJTA0eFxuIiwKKwkJICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5tYWNfY3JfbG9jaywgZmxhZ3MpOwogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewpAQCAtNTExLDIwICs0OTUsMjEgQEAKIAl1MzIgaW50ZGF0YTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gNCkgewotCQlkZXZ3YXJuKGRldiwgInVuZXhwZWN0ZWQgdXJiIGxlbmd0aCAlZCIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidW5leHBlY3RlZCB1cmIgbGVuZ3RoICVkXG4iLAorCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAKIAltZW1jcHkoJmludGRhdGEsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCA0KTsKIAlsZTMyX3RvX2NwdXMoJmludGRhdGEpOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKGRldikpCi0JCWRldmRiZyhkZXYsICJpbnRkYXRhOiAweCUwOFgiLCBpbnRkYXRhKTsKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwgImludGRhdGE6IDB4JTA4WFxuIiwgaW50ZGF0YSk7CiAKIAlpZiAoaW50ZGF0YSAmIElOVF9FTlBfUEhZX0lOVF8pCiAJCXVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9MSU5LX1JFU0VUKTsKIAllbHNlCi0JCWRldndhcm4oZGV2LCAidW5leHBlY3RlZCBpbnRlcnJ1cHQsIGludGRhdGE9MHglMDhYIiwgaW50ZGF0YSk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidW5leHBlY3RlZCBpbnRlcnJ1cHQsIGludGRhdGE9MHglMDhYXG4iLAorCQkJICAgIGludGRhdGEpOwogfQogCiAvKiBFbmFibGUgb3IgZGlzYWJsZSBUeCAmIFJ4IGNoZWNrc3VtIG9mZmxvYWQgZW5naW5lcyAqLwpAQCAtNTM0LDcgKzUxOSw3IEBACiAJdTMyIHJlYWRfYnVmOwogCWludCByZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIENPRV9DUiwgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIENPRV9DUjogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIENPRV9DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC01NTAsMTIgKzUzNSwxMSBAQAogCiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQ09FX0NSLCByZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgQ09FX0NSOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIENPRV9DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19odyhkZXYpKQotCQlkZXZkYmcoZGV2LCAiQ09FX0NSID0gMHglMDh4IiwgcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGh3LCBkZXYtPm5ldCwgIkNPRV9DUiA9IDB4JTA4eFxuIiwgcmVhZF9idWYpOwogCXJldHVybiAwOwogfQogCkBAIC01ODAsOCArNTY0LDggQEAKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJaWYgKGVlLT5tYWdpYyAhPSBMQU45NVhYX0VFUFJPTV9NQUdJQykgewotCQlkZXZ3YXJuKGRldiwgIkVFUFJPTTogbWFnaWMgdmFsdWUgbWlzbWF0Y2gsIG1hZ2ljID0gMHgleCIsCi0JCQllZS0+bWFnaWMpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTTogbWFnaWMgdmFsdWUgbWlzbWF0Y2gsIG1hZ2ljID0gMHgleFxuIiwKKwkJCSAgICBlZS0+bWFnaWMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTY1OSwxNiArNjQzLDE0IEBACiAJCQlkZXYtPm5ldC0+ZGV2X2FkZHIpID09IDApIHsKIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5uZXQtPmRldl9hZGRyKSkgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgdmFsaWQgc28gdXNlIHRoZW0gKi8KLQkJCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQkJCWRldmRiZyhkZXYsICJNQUMgYWRkcmVzcyByZWFkIGZyb20gRUVQUk9NIik7CisJCQluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwgIk1BQyBhZGRyZXNzIHJlYWQgZnJvbSBFRVBST01cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogbm8gZWVwcm9tLCBvciBlZXByb20gdmFsdWVzIGFyZSBpbnZhbGlkLiBnZW5lcmF0ZSByYW5kb20gTUFDICovCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5uZXQtPmRldl9hZGRyKTsKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIk1BQyBhZGRyZXNzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAiTUFDIGFkZHJlc3Mgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyXG4iKTsKIH0KIAogc3RhdGljIGludCBzbXNjOTV4eF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2KQpAQCAtNjgwLDEzICs2NjIsMTMgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEFERFJMLCBhZGRyX2xvKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBBRERSTDogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byB3cml0ZSBBRERSTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQUREUkgsIGFkZHJfaGkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEFERFJIOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEFERFJIOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTc0Nyw4ICs3MjksNyBAQAogCQlQSFlfSU5UX01BU0tfREVGQVVMVF8pOwogCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseSIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1OSwxNCArNzQwLDEzIEBACiAJdTMyIHJlYWRfYnVmLCB3cml0ZV9idWYsIGJ1cnN0X2NhcDsKIAlpbnQgcmV0ID0gMCwgdGltZW91dDsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiZW50ZXJpbmcgc21zYzk1eHhfcmVzZXQiKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwgImVudGVyaW5nIHNtc2M5NXh4X3Jlc2V0XG4iKTsKIAogCXdyaXRlX2J1ZiA9IEhXX0NGR19MUlNUXzsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBIV19DRkcsIHdyaXRlX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgSFdfQ0ZHX0xSU1RfIGJpdCBpbiBIV19DRkcgIgotCQkJInJlZ2lzdGVyLCByZXQgPSAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19MUlNUXyBiaXQgaW4gSFdfQ0ZHIHJlZ2lzdGVyLCByZXQgPSAlZFxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzc0LDcgKzc1NCw3IEBACiAJZG8gewogCQlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgSFdfQ0ZHOiAlZCIsIHJldCk7CisJCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1zbGVlcCgxMCk7CkBAIC03ODIsMTQgKzc2MiwxNCBAQAogCX0gd2hpbGUgKChyZWFkX2J1ZiAmIEhXX0NGR19MUlNUXykgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewotCQlkZXZ3YXJuKGRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgY29tcGxldGlvbiBvZiBMaXRlIFJlc2V0Iik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidGltZW91dCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9mIExpdGUgUmVzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXdyaXRlX2J1ZiA9IFBNX0NUTF9QSFlfUlNUXzsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBQTV9DVFJMLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFBNX0NUUkw6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgUE1fQ1RSTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03OTcsNyArNzc3LDcgQEAKIAlkbyB7CiAJCXJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgUE1fQ1RSTCwgJnJlYWRfYnVmKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgUE1fQ1RSTDogJWQiLCByZXQpOworCQkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBQTV9DVFJMOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJbXNsZWVwKDEwKTsKQEAgLTgwNSw3ICs3ODUsNyBAQAogCX0gd2hpbGUgKChyZWFkX2J1ZiAmIFBNX0NUTF9QSFlfUlNUXykgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewotCQlkZXZ3YXJuKGRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgUEhZIFJlc2V0Iik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidGltZW91dCB3YWl0aW5nIGZvciBQSFkgUmVzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtODE1LDM1ICs3OTUsMzUgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiTUFDIEFkZHJlc3M6ICVwTSIsIGRldi0+bmV0LT5kZXZfYWRkcik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCSAgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+bmV0LT5kZXZfYWRkcik7CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19pZnVwKGRldikpCi0JCWRldmRiZyhkZXYsICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIDogMHglMDh4IiwgcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIDogMHglMDh4XG4iLCByZWFkX2J1Zik7CiAKIAlyZWFkX2J1ZiB8PSBIV19DRkdfQklSXzsKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEhXX0NGRywgcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19CSVJfIGJpdCBpbiBIV19DRkcgIgotCQkJInJlZ2lzdGVyLCByZXQgPSAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19CSVJfIGJpdCBpbiBIV19DRkcgcmVnaXN0ZXIsIHJldCA9ICVkXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBIV19DRkcsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBIV19DRkcgYWZ0ZXIgd3JpdGluZyAiCi0JCQkiSFdfQ0ZHX0JJUl86IDB4JTA4eCIsIHJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRyBhZnRlciB3cml0aW5nIEhXX0NGR19CSVJfOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJaWYgKCF0dXJib19tb2RlKSB7CiAJCWJ1cnN0X2NhcCA9IDA7CkBAIC04NTYsNDcgKzgzNiw0NyBAQAogCQlkZXYtPnJ4X3VyYl9zaXplID0gREVGQVVMVF9GU19CVVJTVF9DQVBfU0laRTsKIAl9CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInJ4X3VyYl9zaXplPSVsZCIsICh1bG9uZylkZXYtPnJ4X3VyYl9zaXplKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAicnhfdXJiX3NpemU9JWxkXG4iLCAodWxvbmcpZGV2LT5yeF91cmJfc2l6ZSk7CiAKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBCVVJTVF9DQVAsIGJ1cnN0X2NhcCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgQlVSU1RfQ0FQOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEJVUlNUX0NBUDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBCVVJTVF9DQVAsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBCVVJTVF9DQVA6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBCVVJTVF9DQVA6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBCVVJTVF9DQVAgYWZ0ZXIgd3JpdGluZzogMHglMDh4IiwKLQkJCXJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEJVUlNUX0NBUCBhZnRlciB3cml0aW5nOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJcmVhZF9idWYgPSBERUZBVUxUX0JVTEtfSU5fREVMQVk7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQlVMS19JTl9ETFksIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgInJldCA9ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJyZXQgPSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEJVTEtfSU5fRExZLCAmcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgQlVMS19JTl9ETFk6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBCVUxLX0lOX0RMWTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiUmVhZCBWYWx1ZSBmcm9tIEJVTEtfSU5fRExZIGFmdGVyIHdyaXRpbmc6ICIKLQkJCSIweCUwOHgiLCByZWFkX2J1Zik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCSAgIlJlYWQgVmFsdWUgZnJvbSBCVUxLX0lOX0RMWSBhZnRlciB3cml0aW5nOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBIV19DRkcsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBIV19DRkc6IDB4JTA4eCIsIHJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRzogMHglMDh4XG4iLCByZWFkX2J1Zik7CiAKIAlpZiAodHVyYm9fbW9kZSkKIAkJcmVhZF9idWYgfD0gKEhXX0NGR19NRUZfIHwgSFdfQ0ZHX0JDRV8pOwpAQCAtOTA4LDQxICs4ODgsNDEgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEhXX0NGRywgcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGRyByZWdpc3RlciwgcmV0PSVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgSFdfQ0ZHIHJlZ2lzdGVyLCByZXQ9JWRcbiIsCisJCQkgICAgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRyBhZnRlciB3cml0aW5nOiAweCUwOHgiLAotCQkJcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIGFmdGVyIHdyaXRpbmc6IDB4JTA4eFxuIiwgcmVhZF9idWYpOwogCiAJd3JpdGVfYnVmID0gMHhGRkZGRkZGRjsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBJTlRfU1RTLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9TVFMgcmVnaXN0ZXIsIHJldD0lZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9TVFMgcmVnaXN0ZXIsIHJldD0lZFxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgSURfUkVWLCAmcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgSURfUkVWOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHJlYWQgSURfUkVWOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JaWYgKG5ldGlmX21zZ19pZnVwKGRldikpCi0JCWRldmRiZyhkZXYsICJJRF9SRVYgPSAweCUwOHgiLCByZWFkX2J1Zik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsICJJRF9SRVYgPSAweCUwOHhcbiIsIHJlYWRfYnVmKTsKIAogCS8qIENvbmZpZ3VyZSBHUElPIHBpbnMgYXMgTEVEIG91dHB1dHMgKi8KIAl3cml0ZV9idWYgPSBMRURfR1BJT19DRkdfU1BEX0xFRCB8IExFRF9HUElPX0NGR19MTktfTEVEIHwKIAkJTEVEX0dQSU9fQ0ZHX0ZEWF9MRUQ7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgTEVEX0dQSU9fQ0ZHLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIExFRF9HUElPX0NGRyByZWdpc3RlciwgcmV0PSVkIiwKLQkJCXJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIExFRF9HUElPX0NGRyByZWdpc3RlciwgcmV0PSVkXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05NTAsMjEgKzkzMCwyMSBAQAogCXdyaXRlX2J1ZiA9IDA7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgRkxPVywgd3JpdGVfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBGTE9XOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEZMT1c6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJlYWRfYnVmID0gQUZDX0NGR19ERUZBVUxUOwogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEFGQ19DRkcsIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBBRkNfQ0ZHOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEFGQ19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIERvbid0IG5lZWQgbWFjX2NyX2xvY2sgZHVyaW5nIGluaXRpYWxpc2F0aW9uICovCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBNQUNfQ1IsICZwZGF0YS0+bWFjX2NyKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIE1BQ19DUjogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIE1BQ19DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05NzMsNyArOTUzLDcgQEAKIAl3cml0ZV9idWYgPSAodTMyKUVUSF9QXzgwMjFROwogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIFZMQU4xLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFZBTjE6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgVkFOMTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05ODEsNyArOTYxLDcgQEAKIAlldGh0b29sX29wX3NldF90eF9od19jc3VtKG5ldGRldiwgcGRhdGEtPnVzZV90eF9jc3VtKTsKIAlyZXQgPSBzbXNjOTV4eF9zZXRfY3N1bXMoZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byBzZXQgY3N1bSBvZmZsb2FkOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHNldCBjc3VtIG9mZmxvYWQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtOTkyLDcgKzk3Miw3IEBACiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIElOVF9FUF9DVEwsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBJTlRfRVBfQ1RMOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHJlYWQgSU5UX0VQX0NUTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMDAxLDE1ICs5ODEsMTQgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIElOVF9FUF9DVEwsIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBJTlRfRVBfQ1RMOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9FUF9DVEw6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXNtc2M5NXh4X3N0YXJ0X3R4X3BhdGgoZGV2KTsKIAlzbXNjOTV4eF9zdGFydF9yeF9wYXRoKGRldik7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInNtc2M5NXh4X3Jlc2V0LCByZXR1cm4gMCIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAic21zYzk1eHhfcmVzZXQsIHJldHVybiAwXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzNCw3ICsxMDEzLDcgQEAKIAogCXJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJ1c2JuZXRfZ2V0X2VuZHBvaW50cyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJ1c2JuZXRfZ2V0X2VuZHBvaW50cyBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTA0Myw3ICsxMDIyLDcgQEAKIAogCXBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CiAJaWYgKCFwZGF0YSkgewotCQlkZXZ3YXJuKGRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3Qgc21zYzk1eHhfcHJpdiIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3Qgc21zYzk1eHhfcHJpdlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTA2Niw4ICsxMDQ1LDcgQEAKIHsKIAlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKIAlpZiAocGRhdGEpIHsKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24oZGV2KSkKLQkJCWRldmRiZyhkZXYsICJmcmVlIHBkYXRhIik7CisJCW5ldGlmX2RiZyhkZXYsIGlmZG93biwgZGV2LT5uZXQsICJmcmVlIHBkYXRhXG4iKTsKIAkJa2ZyZWUocGRhdGEpOwogCQlwZGF0YSA9IE5VTEw7CiAJCWRldi0+ZGF0YVswXSA9IDA7CkBAIC0xMTAxLDggKzEwNzksOCBAQAogCQlhbGlnbl9jb3VudCA9ICg0IC0gKChzaXplICsgTkVUX0lQX0FMSUdOKSAlIDQpKSAlIDQ7CiAKIAkJaWYgKHVubGlrZWx5KGhlYWRlciAmIFJYX1NUU19FU18pKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VycihkZXYpKQotCQkJCWRldmRiZyhkZXYsICJFcnJvciBoZWFkZXI9MHglMDh4IiwgaGVhZGVyKTsKKwkJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkJICAiRXJyb3IgaGVhZGVyPTB4JTA4eFxuIiwgaGVhZGVyKTsKIAkJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWRldi0+bmV0LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAKQEAgLTExMTksOSArMTA5Nyw4IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBFVEhfRlJBTUVfTEVOICsgNChDUkMpICsgMihDT0UpICsgNChWbGFuKSAqLwogCQkJaWYgKHVubGlrZWx5KHNpemUgPiAoRVRIX0ZSQU1FX0xFTiArIDEyKSkpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkZXYpKQotCQkJCQlkZXZkYmcoZGV2LCAic2l6ZSBlcnIgaGVhZGVyPTB4JTA4eCIsCi0JCQkJCQloZWFkZXIpOworCQkJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkJCSAgInNpemUgZXJyIGhlYWRlcj0weCUwOHhcbiIsIGhlYWRlcik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAKQEAgLTExMzcsNyArMTExNCw3IEBACiAKIAkJCWF4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVubGlrZWx5KCFheF9za2IpKSB7Ci0JCQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIHNrYiIpOworCQkJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBza2JcbiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCkBAIC0xMTYxLDcgKzExMzgsNyBAQAogCX0KIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IDApKSB7Ci0JCWRldndhcm4oZGV2LCAiaW52YWxpZCByeCBsZW5ndGg8MCAlZCIsIHNrYi0+bGVuKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJpbnZhbGlkIHJ4IGxlbmd0aDwwICVkXG4iLCBza2ItPmxlbik7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IDAzNWZhYjAuLjE3YjZhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTI0MiwxMyArMjQyLDEzIEBACiAJZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlkZXYtPm5ldC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyAoZGV2KSkKLQkJZGV2ZGJnIChkZXYsICI8IHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXgiLAotCQkJc2tiLT5sZW4gKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpLCBza2ItPnByb3RvY29sKTsKKwluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0+bmV0LCAiPCByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4iLAorCQkgIHNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSwgc2tiLT5wcm90b2NvbCk7CiAJbWVtc2V0IChza2ItPmNiLCAwLCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOwogCXN0YXR1cyA9IG5ldGlmX3J4IChza2IpOwotCWlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MgJiYgbmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJZGV2ZGJnIChkZXYsICJuZXRpZl9yeCBzdGF0dXMgJWQiLCBzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpCisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkgICJuZXRpZl9yeCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7CiAKQEAgLTMxMyw5ICszMTMsOSBAQAogewogCXNldF9iaXQgKHdvcmssICZkZXYtPmZsYWdzKTsKIAlpZiAoIXNjaGVkdWxlX3dvcmsgKCZkZXYtPmtldmVudCkpCi0JCWRldmVyciAoZGV2LCAia2V2ZW50ICVkIG1heSBoYXZlIGJlZW4gZHJvcHBlZCIsIHdvcmspOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAia2V2ZW50ICVkIG1heSBoYXZlIGJlZW4gZHJvcHBlZFxuIiwgd29yayk7CiAJZWxzZQotCQlkZXZkYmcgKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWQiLCB3b3JrKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImtldmVudCAlZCBzY2hlZHVsZWRcbiIsIHdvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2RlZmVyX2tldmVudCk7CiAKQEAgLTMzMiw4ICszMzIsNyBAQAogCXNpemVfdAkJCXNpemUgPSBkZXYtPnJ4X3VyYl9zaXplOwogCiAJaWYgKChza2IgPSBhbGxvY19za2IgKHNpemUgKyBORVRfSVBfQUxJR04sIGZsYWdzKSkgPT0gTlVMTCkgewotCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAibm8gcnggc2tiIik7CisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsICJubyByeCBza2JcbiIpOwogCQl1c2JuZXRfZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX01FTU9SWSk7CiAJCXVzYl9mcmVlX3VyYiAodXJiKTsKIAkJcmV0dXJuOwpAQCAtMzYzLDIxICszNjIsMTkgQEAKIAkJCXVzYm5ldF9kZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfTUVNT1JZKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FTk9ERVY6Ci0JCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgImRldmljZSBnb25lIik7CisJCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LCAiZGV2aWNlIGdvbmVcbiIpOwogCQkJbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgInJ4IHN1Ym1pdCwgJWQiLCByZXR2YWwpOworCQkJbmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtPm5ldCwKKwkJCQkgICJyeCBzdWJtaXQsICVkXG4iLCByZXR2YWwpOwogCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMDoKIAkJCV9fc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPnJ4cSwgc2tiKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJyeDogc3RvcHBlZCIpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LCAicng6IHN0b3BwZWRcbiIpOwogCQlyZXR2YWwgPSAtRU5PTElOSzsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+cnhxLmxvY2ssIGxvY2tmbGFncyk7CkBAIC00MDAsOCArMzk3LDcgQEAKIAlpZiAoc2tiLT5sZW4pCiAJCXVzYm5ldF9za2JfcmV0dXJuIChkZXYsIHNrYik7CiAJZWxzZSB7Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJkcm9wIik7CisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsICJkcm9wXG4iKTsKIGVycm9yOgogCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXNrYl9xdWV1ZV90YWlsICgmZGV2LT5kb25lLCBza2IpOwpAQCAtNDI4LDggKzQyNCw4IEBACiAJCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOwogCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQkJCWRldmRiZyAoZGV2LCAicnggbGVuZ3RoICVkIiwgc2tiLT5sZW4pOworCQkJbmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtPm5ldCwKKwkJCQkgICJyeCBsZW5ndGggJWRcbiIsIHNrYi0+bGVuKTsKIAkJfQogCQlicmVhazsKIApAQCAtNDQ2LDggKzQ0Miw4IEBACiAJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBhc3luYyB1bmxpbmsgKi8KIAljYXNlIC1FU0hVVERPV046CQkvKiBoYXJkd2FyZSBnb25lICovCi0JCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJyeCBzaHV0ZG93biwgY29kZSAlZCIsIHVyYl9zdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJICAicnggc2h1dGRvd24sIGNvZGUgJWRcbiIsIHVyYl9zdGF0dXMpOwogCQlnb3RvIGJsb2NrOwogCiAJLyogd2UgZ2V0IGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcga2h1YmQgZGlzY29ubmVjdCgpIGRlbGF5cy4KQEAgLTQ2MCw4ICs0NTYsOCBAQAogCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CiAJCQltb2RfdGltZXIgKCZkZXYtPmRlbGF5LCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJyeCB0aHJvdHRsZSAlZCIsIHVyYl9zdGF0dXMpOworCQkJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsCisJCQkJICAicnggdGhyb3R0bGUgJWRcbiIsIHVyYl9zdGF0dXMpOwogCQl9CiBibG9jazoKIAkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKQEAgLTQ3Nyw4ICs0NzMsNyBAQAogCWRlZmF1bHQ6CiAJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CiAJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCi0JCQlkZXZkYmcgKGRldiwgInJ4IHN0YXR1cyAlZCIsIHVyYl9zdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LCAicnggc3RhdHVzICVkXG4iLCB1cmJfc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00OTIsOCArNDg3LDcgQEAKIAkJfQogCQl1c2JfZnJlZV91cmIgKHVyYik7CiAJfQotCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQlkZXZkYmcgKGRldiwgIm5vIHJlYWQgcmVzdWJtaXR0ZWQiKTsKKwluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LCAibm8gcmVhZCByZXN1Ym1pdHRlZFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGludHJfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYikKQEAgLTUxMCwxNSArNTA0LDE1IEBACiAJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLwogCWNhc2UgLUVOT0VOVDoJCS8qIHVyYiBraWxsZWQgKi8KIAljYXNlIC1FU0hVVERPV046CS8qIGhhcmR3YXJlIGdvbmUgKi8KLQkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCi0JCQlkZXZkYmcgKGRldiwgImludHIgc2h1dGRvd24sIGNvZGUgJWQiLCBzdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJICAiaW50ciBzaHV0ZG93biwgY29kZSAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCiAJLyogTk9URTogIG5vdCB0aHJvdHRsaW5nIGxpa2UgUlgvVFgsIHNpbmNlIHRoaXMgZW5kcG9pbnQKIAkgKiBhbHJlYWR5IHBvbGxzIGluZnJlcXVlbnRseQogCSAqLwogCWRlZmF1bHQ6Ci0JCWRldmRiZyAoZGV2LCAiaW50ciBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiaW50ciBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTI3LDggKzUyMSw5IEBACiAKIAltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cyAhPSAwICYmIG5ldGlmX21zZ190aW1lciAoZGV2KSkKLQkJZGV2ZXJyKGRldiwgImludHIgcmVzdWJtaXQgLS0+ICVkIiwgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCW5ldGlmX2VycihkZXYsIHRpbWVyLCBkZXYtPm5ldCwKKwkJCSAgImludHIgcmVzdWJtaXQgLS0+ICVkXG4iLCBzdGF0dXMpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTM2LDggKzUzMSw3IEBACiB7CiAJc2V0X2JpdChFVkVOVF9SWF9QQVVTRUQsICZkZXYtPmZsYWdzKTsKIAotCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKGRldikpCi0JCWRldmRiZyhkZXYsICJwYXVzZWQgcnggcXVldWUgZW5hYmxlZCIpOworCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LT5uZXQsICJwYXVzZWQgcnggcXVldWUgZW5hYmxlZFxuIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfcGF1c2VfcngpOwogCkBAIC01NTUsOCArNTQ5LDggQEAKIAogCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+YmgpOwogCi0JaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInBhdXNlZCByeCBxdWV1ZSBkaXNhYmxlZCwgJWQgc2ticyByZXF1ZXVlZCIsIG51bSk7CisJbmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtPm5ldCwKKwkJICAicGF1c2VkIHJ4IHF1ZXVlIGRpc2FibGVkLCAlZCBza2JzIHJlcXVldWVkXG4iLCBudW0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Jlc3VtZV9yeCk7CiAKQEAgLTU4OSw3ICs1ODMsNyBAQAogCQkvLyB0aGVzZSAoYXN5bmMpIHVubGlua3MgY29tcGxldGUgaW1tZWRpYXRlbHkKIAkJcmV0dmFsID0gdXNiX3VubGlua191cmIgKHVyYik7CiAJCWlmIChyZXR2YWwgIT0gLUVJTlBST0dSRVNTICYmIHJldHZhbCAhPSAwKQotCQkJZGV2ZGJnIChkZXYsICJ1bmxpbmsgdXJiIGVyciwgJWQiLCByZXR2YWwpOworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInVubGluayB1cmIgZXJyLCAlZFxuIiwgcmV0dmFsKTsKIAkJZWxzZQogCQkJY291bnQrKzsKIAl9CkBAIC02MzEsOSArNjI1LDggQEAKIAkJJiYgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5kb25lKSkgewogCQkJc2NoZWR1bGVfdGltZW91dChVTkxJTktfVElNRU9VVF9NUyk7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAobmV0aWZfbXNnX2lmZG93bihkZXYpKQotCQkJCWRldmRiZyhkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsCi0JCQkJCXRlbXApOworCQkJbmV0aWZfZGJnKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKKwkJCQkgICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9uc1xuIiwgdGVtcCk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJZGV2LT53YWl0ID0gTlVMTDsKQEAgLTY0OCwyMiArNjQxLDIxIEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCi0JCWRldmluZm8gKGRldiwgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZCIsCi0JCQluZXQtPnN0YXRzLnJ4X3BhY2tldHMsIG5ldC0+c3RhdHMudHhfcGFja2V0cywKLQkJCW5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycwotCQkJKTsKKwluZXRpZl9pbmZvKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKKwkJICAgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZFxuIiwKKwkJICAgbmV0LT5zdGF0cy5yeF9wYWNrZXRzLCBuZXQtPnN0YXRzLnR4X3BhY2tldHMsCisJCSAgIG5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycyk7CiAKIAkvKiBhbGxvdyBtaW5pZHJpdmVyIHRvIHN0b3AgY29ycmVjdGx5ICh3aXJlbGVzcyBkZXZpY2VzIHRvIHR1cm4gb2ZmCiAJICogcmFkaW8gZXRjKSAqLwogCWlmIChpbmZvLT5zdG9wKSB7CiAJCXJldHZhbCA9IGluZm8tPnN0b3AoZGV2KTsKLQkJaWYgKHJldHZhbCA8IDAgJiYgbmV0aWZfbXNnX2lmZG93bihkZXYpKQotCQkJZGV2aW5mbyhkZXYsCi0JCQkJInN0b3AgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKLQkJCQlyZXR2YWwsCi0JCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQkJaW5mby0+ZGVzY3JpcHRpb24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCW5ldGlmX2luZm8oZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJCSAgICJzdG9wIGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlc1xuIiwKKwkJCQkgICByZXR2YWwsCisJCQkJICAgZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkJICAgaW5mby0+ZGVzY3JpcHRpb24pOwogCX0KIAogCWlmICghKGluZm8tPmZsYWdzICYgRkxBR19BVk9JRF9VTkxJTktfVVJCUykpCkBAIC03MDIsMzAgKzY5NCwyOSBAQAogCXN0cnVjdCBkcml2ZXJfaW5mbwkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CiAKIAlpZiAoKHJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXYtPmludGYpKSA8IDApIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQotCQkJZGV2aW5mbyAoZGV2LAotCQkJCSJyZXN1bXB0aW9uIGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlcyIsCi0JCQkJcmV0dmFsLAotCQkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAotCQkJaW5mby0+ZGVzY3JpcHRpb24pOworCQluZXRpZl9pbmZvKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCQkgICAicmVzdW1wdGlvbiBmYWlsICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXNcbiIsCisJCQkgICByZXR2YWwsCisJCQkgICBkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkgICBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkgICBpbmZvLT5kZXNjcmlwdGlvbik7CiAJCWdvdG8gZG9uZV9ub3BtOwogCX0KIAogCS8vIHB1dCBpbnRvICJrbm93biBzYWZlIiBzdGF0ZQogCWlmIChpbmZvLT5yZXNldCAmJiAocmV0dmFsID0gaW5mby0+cmVzZXQgKGRldikpIDwgMCkgewotCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCi0JCQlkZXZpbmZvIChkZXYsCi0JCQkJIm9wZW4gcmVzZXQgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKLQkJCQlyZXR2YWwsCi0JCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCW5ldGlmX2luZm8oZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJCSAgICJvcGVuIHJlc2V0IGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlc1xuIiwKKwkJCSAgIHJldHZhbCwKKwkJCSAgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwKKwkJCSAgIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCSAgIGluZm8tPmRlc2NyaXB0aW9uKTsKIAkJZ290byBkb25lOwogCX0KIAogCS8vIGluc2lzdCBwZWVyIGJlIGNvbm5lY3RlZAogCWlmIChpbmZvLT5jaGVja19jb25uZWN0ICYmIChyZXR2YWwgPSBpbmZvLT5jaGVja19jb25uZWN0IChkZXYpKSA8IDApIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJjYW4ndCBvcGVuOyAlZCIsIHJldHZhbCk7CisJCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAiY2FuJ3Qgb3BlbjsgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTczMywzNCArNzI0LDIzIEBACiAJaWYgKGRldi0+aW50ZXJydXB0KSB7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdCwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCi0JCQkJZGV2ZXJyIChkZXYsICJpbnRyIHN1Ym1pdCAlZCIsIHJldHZhbCk7CisJCQluZXRpZl9lcnIoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJCQkgICJpbnRyIHN1Ym1pdCAlZFxuIiwgcmV0dmFsKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAogCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOwotCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkgewotCQljaGFyCSpmcmFtaW5nOwotCi0JCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykKLQkJCWZyYW1pbmcgPSAiTmV0Q2hpcCI7Ci0JCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0dMKQotCQkJZnJhbWluZyA9ICJHZW5lU3lzIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfWikKLQkJCWZyYW1pbmcgPSAiWmF1cnVzIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pCi0JCQlmcmFtaW5nID0gIlJORElTIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfQVgpCi0JCQlmcmFtaW5nID0gIkFTSVgiOwotCQllbHNlCi0JCQlmcmFtaW5nID0gInNpbXBsZSI7Ci0KLQkJZGV2aW5mbyAoZGV2LCAib3BlbjogZW5hYmxlIHF1ZXVlaW5nICIKLQkJCQkiKHJ4ICVkLCB0eCAlZCkgbXR1ICVkICVzIGZyYW1pbmciLAotCQkJKGludClSWF9RTEVOIChkZXYpLCAoaW50KVRYX1FMRU4gKGRldiksIGRldi0+bmV0LT5tdHUsCi0JCQlmcmFtaW5nKTsKLQl9CisJbmV0aWZfaW5mbyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICAib3BlbjogZW5hYmxlIHF1ZXVlaW5nIChyeCAlZCwgdHggJWQpIG10dSAlZCAlcyBmcmFtaW5nXG4iLAorCQkgICAoaW50KVJYX1FMRU4oZGV2KSwgKGludClUWF9RTEVOKGRldiksCisJCSAgIGRldi0+bmV0LT5tdHUsCisJCSAgIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykgPyAiTmV0Q2hpcCIgOgorCQkgICAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfR0wpID8gIkdlbmVTeXMiIDoKKwkJICAgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1opID8gIlphdXJ1cyIgOgorCQkgICAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pID8gIlJORElTIiA6CisJCSAgIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19BWCkgPyAiQVNJWCIgOgorCQkgICAic2ltcGxlIik7CiAKIAkvLyBkZWxheSBwb3N0aW5nIHJlYWRzIHVudGlsIHdlJ3JlIGZ1bGx5IG9wZW4KIAl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CkBAIC03NzEsNiArNzUxLDcgQEAKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CiAJfQogCXJldHVybiByZXR2YWw7CisKIGRvbmU6CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CiBkb25lX25vcG06CkBAIC05MDgsOCArODg5LDggQEAKIAkJICAgIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKIGZhaWxfcGlwZToKLQkJCQlkZXZlcnIgKGRldiwgImNhbid0IGNsZWFyIHR4IGhhbHQsIHN0YXR1cyAlZCIsCi0JCQkJCXN0YXR1cyk7CisJCQkJbmV0ZGV2X2VycihkZXYtPm5ldCwgImNhbid0IGNsZWFyIHR4IGhhbHQsIHN0YXR1cyAlZFxuIiwKKwkJCQkJICAgc3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCWNsZWFyX2JpdCAoRVZFTlRfVFhfSEFMVCwgJmRldi0+ZmxhZ3MpOwogCQkJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKQpAQCAtOTI4LDggKzkwOSw4IEBACiAJCSAgICBzdGF0dXMgIT0gLUVTSFVURE9XTikgewogCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCiBmYWlsX2hhbHQ6Ci0JCQkJZGV2ZXJyIChkZXYsICJjYW4ndCBjbGVhciByeCBoYWx0LCBzdGF0dXMgJWQiLAotCQkJCQlzdGF0dXMpOworCQkJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJjYW4ndCBjbGVhciByeCBoYWx0LCBzdGF0dXMgJWRcbiIsCisJCQkJCSAgIHN0YXR1cyk7CiAJCX0gZWxzZSB7CiAJCQljbGVhcl9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKTsKIAkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKQEAgLTk2NywxOCArOTQ4LDE4IEBACiAJCWlmKGluZm8tPmxpbmtfcmVzZXQgJiYgKHJldHZhbCA9IGluZm8tPmxpbmtfcmVzZXQoZGV2KSkgPCAwKSB7CiAJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKIHNraXBfcmVzZXQ6Ci0JCQlkZXZpbmZvKGRldiwgImxpbmsgcmVzZXQgZmFpbGVkICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXMiLAotCQkJCXJldHZhbCwKLQkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKLQkJCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCQluZXRkZXZfaW5mbyhkZXYtPm5ldCwgImxpbmsgcmVzZXQgZmFpbGVkICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXNcbiIsCisJCQkJICAgIHJldHZhbCwKKwkJCQkgICAgZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCSAgICBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkJICAgIGluZm8tPmRlc2NyaXB0aW9uKTsKIAkJfSBlbHNlIHsKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOwogCQl9CiAJfQogCiAJaWYgKGRldi0+ZmxhZ3MpCi0JCWRldmRiZyAoZGV2LCAia2V2ZW50IGRvbmUsIGZsYWdzID0gMHglbHgiLAotCQkJZGV2LT5mbGFncyk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxuIiwgZGV2LT5mbGFncyk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDE0LDE1ICs5OTUsMTQgQEAKIAkJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CiAJCQkJbW9kX3RpbWVyICgmZGV2LT5kZWxheSwKIAkJCQkJamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOwotCQkJCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKLQkJCQkJZGV2ZGJnIChkZXYsICJ0eCB0aHJvdHRsZSAlZCIsCi0JCQkJCQkJdXJiLT5zdGF0dXMpOworCQkJCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LAorCQkJCQkgICJ0eCB0aHJvdHRsZSAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCQkJfQogCQkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgInR4IGVyciAlZCIsIGVudHJ5LT51cmItPnN0YXR1cyk7CisJCQluZXRpZl9kYmcoZGV2LCB0eF9lcnIsIGRldi0+bmV0LAorCQkJCSAgInR4IGVyciAlZFxuIiwgZW50cnktPnVyYi0+c3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTA2NCwxNiArMTA0NCwxNCBAQAogCWlmIChpbmZvLT50eF9maXh1cCkgewogCQlza2IgPSBpbmZvLT50eF9maXh1cCAoZGV2LCBza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikgewotCQkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJjYW4ndCB0eF9maXh1cCBza2IiKTsKKwkJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJjYW4ndCB0eF9maXh1cCBza2JcbiIpOwogCQkJZ290byBkcm9wOwogCQl9CiAJfQogCWxlbmd0aCA9IHNrYi0+bGVuOwogCiAJaWYgKCEodXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0FUT01JQykpKSB7Ci0JCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJubyB1cmIiKTsKKwkJbmV0aWZfZGJnKGRldiwgdHhfZXJyLCBkZXYtPm5ldCwgIm5vIHVyYlxuIik7CiAJCWdvdG8gZHJvcDsKIAl9CiAKQEAgLTExMTMsNyArMTA5MSw3IEBACiAJCS8qIG5vIHVzZSB0byBwcm9jZXNzIG1vcmUgcGFja2V0cyAqLwogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dHhxLmxvY2ssIGZsYWdzKTsKLQkJZGV2ZGJnKGRldiwgIkRlbGF5aW5nIHRyYW5zbWlzc2lvbiBmb3IgcmVzdW1wdGlvbiIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiRGVsYXlpbmcgdHJhbnNtaXNzaW9uIGZvciByZXN1bXB0aW9uXG4iKTsKIAkJZ290byBkZWZlcnJlZDsKIAl9CiAjZW5kaWYKQEAgLTExMjYsOCArMTEwNCw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhkZXYtPmludGYpOwotCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAidHg6IHN1Ym1pdCB1cmIgZXJyICVkIiwgcmV0dmFsKTsKKwkJbmV0aWZfZGJnKGRldiwgdHhfZXJyLCBkZXYtPm5ldCwKKwkJCSAgInR4OiBzdWJtaXQgdXJiIGVyciAlZFxuIiwgcmV0dmFsKTsKIAkJYnJlYWs7CiAJY2FzZSAwOgogCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTExMzgsMTcgKzExMTYsMTUgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT50eHEubG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldHZhbCkgewotCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAiZHJvcCwgY29kZSAlZCIsIHJldHZhbCk7CisJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJkcm9wLCBjb2RlICVkXG4iLCByZXR2YWwpOwogZHJvcDoKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJaWYgKHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55IChza2IpOwogCQl1c2JfZnJlZV91cmIgKHVyYik7Ci0JfSBlbHNlIGlmIChuZXRpZl9tc2dfdHhfcXVldWVkIChkZXYpKSB7Ci0JCWRldmRiZyAoZGV2LCAiPiB0eCwgbGVuICVkLCB0eXBlIDB4JXgiLAotCQkJbGVuZ3RoLCBza2ItPnByb3RvY29sKTsKLQl9CisJfSBlbHNlCisJCW5ldGlmX2RiZyhkZXYsIHR4X3F1ZXVlZCwgZGV2LT5uZXQsCisJCQkgICI+IHR4LCBsZW4gJWQsIHR5cGUgMHgleFxuIiwgbGVuZ3RoLCBza2ItPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfUE0KIGRlZmVycmVkOgogI2VuZGlmCkBAIC0xMTc5LDcgKzExNTUsNyBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgotCQkJZGV2ZGJnIChkZXYsICJib2d1cyBza2Igc3RhdGUgJWQiLCBlbnRyeS0+c3RhdGUpOworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImJvZ3VzIHNrYiBzdGF0ZSAlZFxuIiwgZW50cnktPnN0YXRlKTsKIAkJfQogCX0KIApAQCAtMTIwNyw5ICsxMTgzLDEwIEBACiAJCQkJaWYgKHVyYiAhPSBOVUxMKQogCQkJCQlyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfQVRPTUlDKTsKIAkJCX0KLQkJCWlmICh0ZW1wICE9IGRldi0+cnhxLnFsZW4gJiYgbmV0aWZfbXNnX2xpbmsgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJyeHFsZW4gJWQgLS0+ICVkIiwKLQkJCQkJCXRlbXAsIGRldi0+cnhxLnFsZW4pOworCQkJaWYgKHRlbXAgIT0gZGV2LT5yeHEucWxlbikKKwkJCQluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwKKwkJCQkJICAicnhxbGVuICVkIC0tPiAlZFxuIiwKKwkJCQkJICB0ZW1wLCBkZXYtPnJ4cS5xbGVuKTsKIAkJCWlmIChkZXYtPnJ4cS5xbGVuIDwgcWxlbikKIAkJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CiAJCX0KQEAgLTEyNDAsMTEgKzEyMTcsMTAgQEAKIAogCXhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKIAotCWlmIChuZXRpZl9tc2dfcHJvYmUgKGRldikpCi0JCWRldmluZm8gKGRldiwgInVucmVnaXN0ZXIgJyVzJyB1c2ItJXMtJXMsICVzIiwKLQkJCWludGYtPmRldi5kcml2ZXItPm5hbWUsCi0JCQl4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAotCQkJZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24pOworCW5ldGlmX2luZm8oZGV2LCBwcm9iZSwgZGV2LT5uZXQsICJ1bnJlZ2lzdGVyICclcycgdXNiLSVzLSVzLCAlc1xuIiwKKwkJICAgaW50Zi0+ZGV2LmRyaXZlci0+bmFtZSwKKwkJICAgeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKKwkJICAgZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24pOwogCiAJbmV0ID0gZGV2LT5uZXQ7CiAJdW5yZWdpc3Rlcl9uZXRkZXYgKG5ldCk7CkBAIC0xNDA3LDEyICsxMzgzLDEyIEBACiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2IChuZXQpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0MzsKLQlpZiAobmV0aWZfbXNnX3Byb2JlIChkZXYpKQotCQlkZXZpbmZvIChkZXYsICJyZWdpc3RlciAnJXMnIGF0IHVzYi0lcy0lcywgJXMsICVwTSIsCi0JCQl1ZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAotCQkJeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKLQkJCWRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uLAotCQkJbmV0LT5kZXZfYWRkcik7CisJbmV0aWZfaW5mbyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJICAgInJlZ2lzdGVyICclcycgYXQgdXNiLSVzLSVzLCAlcywgJXBNXG4iLAorCQkgICB1ZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAorCQkgICB4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAorCQkgICBkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbiwKKwkJICAgbmV0LT5kZXZfYWRkcik7CiAKIAkvLyBvaywgaXQncyByZWFkeSB0byBnby4KIAl1c2Jfc2V0X2ludGZkYXRhICh1ZGV2LCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDNhMTVkZTUuLmI1ODNkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RydWN0IHZldGhfcHJpdiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXI7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgX19wZXJjcHUgKnN0YXRzOwogCXVuc2lnbmVkIGlwX3N1bW1lZDsKIH07CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKIAogCXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB2ZXRoX25ldF9zdGF0cyk7CkBAIC0zMzMsMTkgKzMzMywxNyBAQAogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiAJY2hhciBpZm5hbWVbSUZOQU1TSVpdOwogCXN0cnVjdCBubGF0dHIgKnBlZXJfdGJbSUZMQV9NQVggKyAxXSwgKip0YnA7CisJc3RydWN0IGlmaW5mb21zZyAqaWZtcDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAkvKgogCSAqIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGVlciBmaXJzdAotCSAqCi0JICogc3RydWN0IGlmaW5mb21zZyBpcyBhdCB0aGUgaGVhZCBvZiBWRVRIX0lORk9fUEVFUiwgYnV0IHdlCi0JICogc2tpcCBpdCBzaW5jZSBubyBpbmZvIGZyb20gaXQgaXMgdXNlZnVsIHlldAogCSAqLwotCiAJaWYgKGRhdGEgIT0gTlVMTCAmJiBkYXRhW1ZFVEhfSU5GT19QRUVSXSAhPSBOVUxMKSB7CiAJCXN0cnVjdCBubGF0dHIgKm5sYV9wZWVyOwogCiAJCW5sYV9wZWVyID0gZGF0YVtWRVRIX0lORk9fUEVFUl07CisJCWlmbXAgPSBubGFfZGF0YShubGFfcGVlcik7CiAJCWVyciA9IG5sYV9wYXJzZShwZWVyX3RiLCBJRkxBX01BWCwKIAkJCQlubGFfZGF0YShubGFfcGVlcikgKyBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCiAJCQkJbmxhX2xlbihubGFfcGVlcikgLSBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCkBAIC0zNTgsOCArMzU2LDEwIEBACiAJCQlyZXR1cm4gZXJyOwogCiAJCXRicCA9IHBlZXJfdGI7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJaWZtcCA9IE5VTEw7CiAJCXRicCA9IHRiOworCX0KIAogCWlmICh0YnBbSUZMQV9JRk5BTUVdKQogCQlubGFfc3RybGNweShpZm5hbWUsIHRicFtJRkxBX0lGTkFNRV0sIElGTkFNU0laKTsKQEAgLTM4Nyw2ICszODcsMTAgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKHBlZXIpOwogCisJZXJyID0gcnRubF9jb25maWd1cmVfbGluayhwZWVyLCBpZm1wKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfY29uZmlndXJlX3BlZXI7CisKIAkvKgogCSAqIHJlZ2lzdGVyIGRldiBsYXN0CiAJICoKQEAgLTQyOCw2ICs0MzIsNyBAQAogZXJyX3JlZ2lzdGVyX2RldjoKIAkvKiBub3RoaW5nIHRvIGRvICovCiBlcnJfYWxsb2NfbmFtZToKK2Vycl9jb25maWd1cmVfcGVlcjoKIAl1bnJlZ2lzdGVyX25ldGRldmljZShwZWVyKTsKIAlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IDYxMWI4MDQuLjUwZjg4MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIC8qIEJld2FyZSBvZiBQQ0kgcG9zdGVkIHdyaXRlcyAqLwogI2RlZmluZSBJT1NZTkMJZG8geyBpb3JlYWQ4KGlvYWRkciArIFN0YXRpb25BZGRyKTsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJoaW5lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShyaGluZV9wY2lfdGJsKSA9IHsKIAl7IDB4MTEwNiwgMHgzMDQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiBWVDg2QzEwMEEgKi8KIAl7IDB4MTEwNiwgMHgzMDY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiBWVDYxMDIgKi8KIAl7IDB4MTEwNiwgMHgzMTA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiA2MTA1eyxMLExPTX0gKi8KQEAgLTE2OTcsNyArMTY5Nyw3IEBACiAJCXJ4X21vZGUgPSAweDFDOwogCQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMCk7CiAJCWlvd3JpdGUzMigweGZmZmZmZmZmLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIxKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMCk7CkBAIC0xNzA1LDEwICsxNzA1LDkgQEAKIAkJcnhfbW9kZSA9IDB4MEM7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOworCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggMzE3YWEzNC4uM2E0ODZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTM2MSw3ICszNjEsNyBAQAogICoJRGVzY3JpYmUgdGhlIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgdGhhdCB3ZSBzdXBwb3J0IGluIHRoaXMKICAqCWRldmljZSBkcml2ZXIuIFVzZWQgZm9yIGhvdHBsdWcgYXV0b2xvYWRpbmcuCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2ZWxvY2l0eV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodmVsb2NpdHlfaWRfdGFibGUpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfNjEyWCkgfSwKIAl7IH0KIH07CkBAIC0xMTMyLDcgKzExMzIsNyBAQAogCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7CiAJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKIAkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIgfCBSQ1JfUFJPTSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IHZwdHItPm11bHRpY2FzdF9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IHZwdHItPm11bHRpY2FzdF9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzBdKTsKIAkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bNF0pOwpAQCAtMTE0MSw5ICsxMTQxLDExIEBACiAJCWludCBvZmZzZXQgPSBNQ0FNX1NJWkUgLSB2cHRyLT5tdWx0aWNhc3RfbGltaXQ7CiAJCW1hY19nZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOwogCi0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCW1hY19zZXRfY2FtKHJlZ3MsIGkgKyBvZmZzZXQsIG1jbGlzdC0+ZG1pX2FkZHIpOwogCQkJdnB0ci0+bUNBTW1hc2tbKG9mZnNldCArIGkpIC8gOF0gfD0gMSA8PCAoKG9mZnNldCArIGkpICYgNyk7CisJCQlpKys7CiAJCX0KIAogCQltYWNfc2V0X2NhbV9tYXNrKHJlZ3MsIHZwdHItPm1DQU1tYXNrKTsKQEAgLTI2OTgsMTAgKzI3MDAsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2cHRyLT5kZXY7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIGRldi0+bmFtZSwgZ2V0X2NoaXBfbmFtZSh2cHRyLT5jaGlwX2lkKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEV0aGVybmV0IEFkZHJlc3M6ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFdGhlcm5ldCBBZGRyZXNzOiAlcE1cbiIsCisJCWRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIHN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI4MjUsNyArMjgyNSw3IEBACiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdnB0ci0+bmFwaSwgdmVsb2NpdHlfcG9sbCwgVkVMT0NJVFlfTkFQSV9XRUlHSFQpOwogCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKLQkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9JUF9DU1VNOworCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOWVhZDMwYi4uMjVkYzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtNTYsMTAgKzU2LDYgQEAKIAkvKiBIb3N0IHdpbGwgbWVyZ2UgcnggYnVmZmVycyBmb3IgYmlnIHBhY2tldHMgKHNoYWtlIGl0ISBzaGFrZSBpdCEpICovCiAJYm9vbCBtZXJnZWFibGVfcnhfYnVmczsKIAotCS8qIFJlY2VpdmUgJiBzZW5kIHF1ZXVlcy4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlY3Y7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBzZW5kOwotCiAJLyogV29yayBzdHJ1Y3QgZm9yIHJlZmlsbGluZyBpZiB3ZSBydW4gbG93IG9uIG1lbW9yeS4gKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHJlZmlsbDsKIApAQCAtNzUsMzQgKzcxLDQ0IEBACiAJdW5zaWduZWQgaW50IG51bV9zZzsKIH07CiAKK3N0cnVjdCBwYWRkZWRfdm5ldF9oZHIgeworCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBoZHI7CisJLyoKKwkgKiB2aXJ0aW9fbmV0X2hkciBzaG91bGQgYmUgaW4gYSBzZXBhcmF0ZWQgc2cgYnVmZmVyIGJlY2F1c2Ugb2YgYQorCSAqIFFFTVUgYnVnLCBhbmQgZGF0YSBzZyBidWZmZXIgc2hhcmVzIHNhbWUgcGFnZSB3aXRoIHRoaXMgaGVhZGVyIHNnLgorCSAqIFRoaXMgcGFkZGluZyBtYWtlcyBuZXh0IHNnIDE2IGJ5dGUgYWxpZ25lZCBhZnRlciB2aXJ0aW9fbmV0X2hkci4KKwkgKi8KKwljaGFyIHBhZGRpbmdbNl07Cit9OworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza2Jfdm5ldF9oZHIgKnNrYl92bmV0X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAoc3RydWN0IHNrYl92bmV0X2hkciAqKXNrYi0+Y2I7CiB9CiAKLXN0YXRpYyB2b2lkIGdpdmVfYV9wYWdlKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qCisgKiBwcml2YXRlIGlzIHVzZWQgdG8gY2hhaW4gcGFnZXMgZm9yIGJpZyBwYWNrZXRzLCBwdXQgdGhlIHdob2xlCisgKiBtb3N0IHJlY2VudCB1c2VkIGxpc3QgaW4gdGhlIGJlZ2lubmluZyBmb3IgcmV1c2UKKyAqLworc3RhdGljIHZvaWQgZ2l2ZV9wYWdlcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXZpLT5wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqZW5kOworCisJLyogRmluZCBlbmQgb2YgbGlzdCwgc2V3IHdob2xlIHRoaW5nIGludG8gdmktPnBhZ2VzLiAqLworCWZvciAoZW5kID0gcGFnZTsgZW5kLT5wcml2YXRlOyBlbmQgPSAoc3RydWN0IHBhZ2UgKillbmQtPnByaXZhdGUpOworCWVuZC0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXZpLT5wYWdlczsKIAl2aS0+cGFnZXMgPSBwYWdlOwogfQogCi1zdGF0aWMgdm9pZCB0cmltX3BhZ2VzKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKLQkJZ2l2ZV9hX3BhZ2UodmksIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSk7Ci0Jc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDA7Ci0Jc2tiLT5kYXRhX2xlbiA9IDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X2FfcGFnZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHBhZ2UgKnAgPSB2aS0+cGFnZXM7CiAKLQlpZiAocCkKKwlpZiAocCkgewogCQl2aS0+cGFnZXMgPSAoc3RydWN0IHBhZ2UgKilwLT5wcml2YXRlOwotCWVsc2UKKwkJLyogY2xlYXIgcHJpdmF0ZSBoZXJlLCBpdCBpcyB1c2VkIHRvIGNoYWluIHBhZ2VzICovCisJCXAtPnByaXZhdGUgPSAwOworCX0gZWxzZQogCQlwID0gYWxsb2NfcGFnZShnZnBfbWFzayk7CiAJcmV0dXJuIHA7CiB9CkBAIC0xMTgsOTkgKzEyNCwxNDIgQEAKIAluZXRpZl93YWtlX3F1ZXVlKHZpLT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZCByZWNlaXZlX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJdW5zaWduZWQgbGVuKQorc3RhdGljIHZvaWQgc2V0X3NrYl9mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCAqbGVuKQoreworCWludCBpID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlza2JfZnJhZ190ICpmOworCisJZiA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCWYtPnNpemUgPSBtaW4oKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCwgKmxlbik7CisJZi0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7CisJZi0+cGFnZSA9IHBhZ2U7CisKKwlza2ItPmRhdGFfbGVuICs9IGYtPnNpemU7CisJc2tiLT5sZW4gKz0gZi0+c2l6ZTsKKwlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJKmxlbiAtPSBmLT5zaXplOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAorCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrYl92bmV0X2hkciAqaGRyOworCXVuc2lnbmVkIGludCBjb3B5LCBoZHJfbGVuLCBvZmZzZXQ7CisJY2hhciAqcDsKKworCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwkvKiBjb3B5IHNtYWxsIHBhY2tldCBzbyB3ZSBjYW4gcmV1c2UgdGhlc2UgcGFnZXMgZm9yIHNtYWxsIGRhdGEgKi8KKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIEdPT0RfQ09QWV9MRU4pOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwloZHIgPSBza2Jfdm5ldF9oZHIoc2tiKTsKKworCWlmICh2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMpIHsKKwkJaGRyX2xlbiA9IHNpemVvZiBoZHItPm1oZHI7CisJCW9mZnNldCA9IGhkcl9sZW47CisJfSBlbHNlIHsKKwkJaGRyX2xlbiA9IHNpemVvZiBoZHItPmhkcjsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwYWRkZWRfdm5ldF9oZHIpOworCX0KKworCW1lbWNweShoZHIsIHAsIGhkcl9sZW4pOworCisJbGVuIC09IGhkcl9sZW47CisJcCArPSBvZmZzZXQ7CisKKwljb3B5ID0gbGVuOworCWlmIChjb3B5ID4gc2tiX3RhaWxyb29tKHNrYikpCisJCWNvcHkgPSBza2JfdGFpbHJvb20oc2tiKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIGNvcHkpLCBwLCBjb3B5KTsKKworCWxlbiAtPSBjb3B5OworCW9mZnNldCArPSBjb3B5OworCisJd2hpbGUgKGxlbikgeworCQlzZXRfc2tiX2ZyYWcoc2tiLCBwYWdlLCBvZmZzZXQsICZsZW4pOworCQlwYWdlID0gKHN0cnVjdCBwYWdlICopcGFnZS0+cHJpdmF0ZTsKKwkJb2Zmc2V0ID0gMDsKKwl9CisKKwlpZiAocGFnZSkKKwkJZ2l2ZV9wYWdlcyh2aSwgcGFnZSk7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfbWVyZ2VhYmxlKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkciA9IHNrYl92bmV0X2hkcihza2IpOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBudW1fYnVmLCBpLCBsZW47CisKKwludW1fYnVmID0gaGRyLT5taGRyLm51bV9idWZmZXJzOworCXdoaWxlICgtLW51bV9idWYpIHsKKwkJaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCWlmIChpID49IE1BWF9TS0JfRlJBR1MpIHsKKwkJCXByX2RlYnVnKCIlczogcGFja2V0IHRvbyBsb25nXG4iLCBza2ItPmRldi0+bmFtZSk7CisJCQlza2ItPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlwYWdlID0gdmktPnJ2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5ydnEsICZsZW4pOworCQlpZiAoIXBhZ2UpIHsKKwkJCXByX2RlYnVnKCIlczogcnggZXJyb3I6ICVkIGJ1ZmZlcnMgbWlzc2luZ1xuIiwKKwkJCQkgc2tiLT5kZXYtPm5hbWUsIGhkci0+bWhkci5udW1fYnVmZmVycyk7CisJCQlza2ItPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGxlbiA+IFBBR0VfU0laRSkKKwkJCWxlbiA9IFBBR0VfU0laRTsKKworCQlzZXRfc2tiX2ZyYWcoc2tiLCBwYWdlLCAwLCAmbGVuKTsKKworCQktLXZpLT5udW07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWNlaXZlX2J1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkciA9IHNrYl92bmV0X2hkcihza2IpOwotCWludCBlcnI7Ci0JaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgc2tiX3ZuZXRfaGRyICpoZHI7CiAKIAlpZiAodW5saWtlbHkobGVuIDwgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcikgKyBFVEhfSExFTikpIHsKIAkJcHJfZGVidWcoIiVzOiBzaG9ydCBwYWNrZXQgJWlcbiIsIGRldi0+bmFtZSwgbGVuKTsKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gZHJvcDsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcyB8fCB2aS0+YmlnX3BhY2tldHMpCisJCQlnaXZlX3BhZ2VzKHZpLCBidWYpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiKGJ1Zik7CisJCXJldHVybjsKIAl9CiAKLQlpZiAodmktPm1lcmdlYWJsZV9yeF9idWZzKSB7Ci0JCXVuc2lnbmVkIGludCBjb3B5OwotCQljaGFyICpwID0gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSk7Ci0KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSkKLQkJCWxlbiA9IFBBR0VfU0laRTsKLQkJbGVuIC09IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmKTsKLQotCQltZW1jcHkoJmhkci0+bWhkciwgcCwgc2l6ZW9mKGhkci0+bWhkcikpOwotCQlwICs9IHNpemVvZihoZHItPm1oZHIpOwotCi0JCWNvcHkgPSBsZW47Ci0JCWlmIChjb3B5ID4gc2tiX3RhaWxyb29tKHNrYikpCi0JCQljb3B5ID0gc2tiX3RhaWxyb29tKHNrYik7Ci0KLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBjb3B5KSwgcCwgY29weSk7Ci0KLQkJbGVuIC09IGNvcHk7Ci0KLQkJaWYgKCFsZW4pIHsKLQkJCWdpdmVfYV9wYWdlKHZpLCBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpOwotCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncy0tOwotCQl9IGVsc2UgewotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQotCQkJCXNpemVvZihoZHItPm1oZHIpICsgY29weTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSA9IGxlbjsKLQkJCXNrYi0+ZGF0YV9sZW4gKz0gbGVuOwotCQkJc2tiLT5sZW4gKz0gbGVuOwotCQl9Ci0KLQkJd2hpbGUgKC0taGRyLT5taGRyLm51bV9idWZmZXJzKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQotCQkJaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCQlpZiAoaSA+PSBNQVhfU0tCX0ZSQUdTKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiBwYWNrZXQgdG9vIGxvbmcgJWRcbiIsIGRldi0+bmFtZSwKLQkJCQkJIGxlbik7Ci0JCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQkJZ290byBkcm9wOwotCQkJfQotCi0JCQluc2tiID0gdmktPnJ2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5ydnEsICZsZW4pOwotCQkJaWYgKCFuc2tiKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiByeCBlcnJvcjogJWQgYnVmZmVycyBtaXNzaW5nXG4iLAotCQkJCQkgZGV2LT5uYW1lLCBoZHItPm1oZHIubnVtX2J1ZmZlcnMpOwotCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJCWdvdG8gZHJvcDsKLQkJCX0KLQotCQkJX19za2JfdW5saW5rKG5za2IsICZ2aS0+cmVjdik7Ci0JCQl2aS0+bnVtLS07Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0gPSBza2Jfc2hpbmZvKG5za2IpLT5mcmFnc1swXTsKLQkJCXNrYl9zaGluZm8obnNrYiktPm5yX2ZyYWdzID0gMDsKLQkJCWtmcmVlX3NrYihuc2tiKTsKLQotCQkJaWYgKGxlbiA+IFBBR0VfU0laRSkKLQkJCQlsZW4gPSBQQUdFX1NJWkU7Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IGxlbjsKLQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKLQkJCXNrYi0+ZGF0YV9sZW4gKz0gbGVuOwotCQkJc2tiLT5sZW4gKz0gbGVuOwotCQl9CisJaWYgKCF2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMgJiYgIXZpLT5iaWdfcGFja2V0cykgeworCQlza2IgPSBidWY7CisJCWxlbiAtPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTsKKwkJc2tiX3RyaW0oc2tiLCBsZW4pOwogCX0gZWxzZSB7Ci0JCWxlbiAtPSBzaXplb2YoaGRyLT5oZHIpOwotCi0JCWlmIChsZW4gPD0gTUFYX1BBQ0tFVF9MRU4pCi0JCQl0cmltX3BhZ2VzKHZpLCBza2IpOwotCi0JCWVyciA9IHBza2JfdHJpbShza2IsIGxlbik7Ci0JCWlmIChlcnIpIHsKLQkJCXByX2RlYnVnKCIlczogcHNrYl90cmltIGZhaWxlZCAlaSAlZFxuIiwgZGV2LT5uYW1lLAotCQkJCSBsZW4sIGVycik7CisJCXBhZ2UgPSBidWY7CisJCXNrYiA9IHBhZ2VfdG9fc2tiKHZpLCBwYWdlLCBsZW4pOworCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJZ290byBkcm9wOworCQkJZ2l2ZV9wYWdlcyh2aSwgcGFnZSk7CisJCQlyZXR1cm47CiAJCX0KKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKKwkJCWlmIChyZWNlaXZlX21lcmdlYWJsZSh2aSwgc2tiKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJfQogCisJaGRyID0gc2tiX3ZuZXRfaGRyKHNrYik7CiAJc2tiLT50cnVlc2l6ZSArPSBza2ItPmRhdGFfbGVuOwogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yNjcsMTEwICszMTYsMTE5IEBACiAKIGZyYW1lX2VycjoKIAlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotZHJvcDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXN0YXRpYyBib29sIHRyeV9maWxsX3JlY3ZfbWF4YnVmcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGludCBhZGRfcmVjdmJ1Zl9zbWFsbChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzIrTUFYX1NLQl9GUkFHU107Ci0JaW50IG51bSwgZXJyLCBpOwotCWJvb2wgb29tID0gZmFsc2U7CisJc3RydWN0IHNrYl92bmV0X2hkciAqaGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKKwlpbnQgZXJyOwogCi0Jc2dfaW5pdF90YWJsZShzZywgMitNQVhfU0tCX0ZSQUdTKTsKLQlkbyB7Ci0JCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkcjsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIE1BWF9QQUNLRVRfTEVOKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOwogCi0JCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24odmktPmRldiwgTUFYX1BBQ0tFVF9MRU4pOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCW9vbSA9IHRydWU7Ci0JCQlicmVhazsKKwlza2JfcHV0KHNrYiwgTUFYX1BBQ0tFVF9MRU4pOworCisJaGRyID0gc2tiX3ZuZXRfaGRyKHNrYik7CisJc2dfc2V0X2J1ZihzZywgJmhkci0+aGRyLCBzaXplb2YgaGRyLT5oZHIpOworCisJc2tiX3RvX3NndmVjKHNrYiwgc2cgKyAxLCAwLCBza2ItPmxlbik7CisKKwllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIDIsIHNrYik7CisJaWYgKGVyciA8IDApCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlY3ZidWZfYmlnKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW01BWF9TS0JfRlJBR1MgKyAyXTsKKwlzdHJ1Y3QgcGFnZSAqZmlyc3QsICpsaXN0ID0gTlVMTDsKKwljaGFyICpwOworCWludCBpLCBlcnIsIG9mZnNldDsKKworCS8qIHBhZ2UgaW4gc2dbTUFYX1NLQl9GUkFHUyArIDFdIGlzIGxpc3QgdGFpbCAqLworCWZvciAoaSA9IE1BWF9TS0JfRlJBR1MgKyAxOyBpID4gMTsgLS1pKSB7CisJCWZpcnN0ID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKKwkJaWYgKCFmaXJzdCkgeworCQkJaWYgKGxpc3QpCisJCQkJZ2l2ZV9wYWdlcyh2aSwgbGlzdCk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlzZ19zZXRfYnVmKCZzZ1tpXSwgcGFnZV9hZGRyZXNzKGZpcnN0KSwgUEFHRV9TSVpFKTsKIAotCQlza2JfcHV0KHNrYiwgTUFYX1BBQ0tFVF9MRU4pOworCQkvKiBjaGFpbiBuZXcgcGFnZSBpbiBsaXN0IGhlYWQgdG8gbWF0Y2ggc2cgKi8KKwkJZmlyc3QtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylsaXN0OworCQlsaXN0ID0gZmlyc3Q7CisJfQogCi0JCWhkciA9IHNrYl92bmV0X2hkcihza2IpOwotCQlzZ19zZXRfYnVmKHNnLCAmaGRyLT5oZHIsIHNpemVvZihoZHItPmhkcikpOworCWZpcnN0ID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKKwlpZiAoIWZpcnN0KSB7CisJCWdpdmVfcGFnZXModmksIGxpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcCA9IHBhZ2VfYWRkcmVzcyhmaXJzdCk7CiAKLQkJaWYgKHZpLT5iaWdfcGFja2V0cykgewotCQkJZm9yIChpID0gMDsgaSA8IE1BWF9TS0JfRlJBR1M7IGkrKykgewotCQkJCXNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQkJCQlmLT5wYWdlID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKLQkJCQlpZiAoIWYtPnBhZ2UpCi0JCQkJCWJyZWFrOworCS8qIHNnWzBdLCBzZ1sxXSBzaGFyZSB0aGUgc2FtZSBwYWdlICovCisJLyogYSBzZXBhcmF0ZWQgc2dbMF0gZm9yICB2aXJ0aW9fbmV0X2hkciBvbmx5IGR1cmluZyB0byBRRU1VIGJ1ZyovCisJc2dfc2V0X2J1Zigmc2dbMF0sIHAsIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpKTsKIAotCQkJCWYtPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCQlmLT5zaXplID0gUEFHRV9TSVpFOworCS8qIHNnWzFdIGZvciBkYXRhIHBhY2tldCwgZnJvbSBvZmZzZXQgKi8KKwlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBhZGRlZF92bmV0X2hkcik7CisJc2dfc2V0X2J1Zigmc2dbMV0sIHAgKyBvZmZzZXQsIFBBR0VfU0laRSAtIG9mZnNldCk7CiAKLQkJCQlza2ItPmRhdGFfbGVuICs9IFBBR0VfU0laRTsKLQkJCQlza2ItPmxlbiArPSBQQUdFX1NJWkU7CisJLyogY2hhaW4gZmlyc3QgaW4gbGlzdCBoZWFkICovCisJZmlyc3QtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylsaXN0OworCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgTUFYX1NLQl9GUkFHUyArIDIsCisJCQkJICAgICAgIGZpcnN0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ2l2ZV9wYWdlcyh2aSwgZmlyc3QpOwogCi0JCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCQkJfQotCQl9CisJcmV0dXJuIGVycjsKK30KIAotCQludW0gPSBza2JfdG9fc2d2ZWMoc2tiLCBzZysxLCAwLCBza2ItPmxlbikgKyAxOwotCQlza2JfcXVldWVfaGVhZCgmdmktPnJlY3YsIHNrYik7CitzdGF0aWMgaW50IGFkZF9yZWN2YnVmX21lcmdlYWJsZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlpbnQgZXJyOwogCi0JCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgbnVtLCBza2IpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7Ci0JCQl0cmltX3BhZ2VzKHZpLCBza2IpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlicmVhazsKLQkJfQotCQl2aS0+bnVtKys7Ci0JfSB3aGlsZSAoZXJyID49IG51bSk7Ci0JaWYgKHVubGlrZWx5KHZpLT5udW0gPiB2aS0+bWF4KSkKLQkJdmktPm1heCA9IHZpLT5udW07Ci0JdmktPnJ2cS0+dnFfb3BzLT5raWNrKHZpLT5ydnEpOwotCXJldHVybiAhb29tOworCXBhZ2UgPSBnZXRfYV9wYWdlKHZpLCBnZnApOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZ19pbml0X29uZSgmc2csIHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKKworCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCAmc2csIDAsIDEsIHBhZ2UpOworCWlmIChlcnIgPCAwKQorCQlnaXZlX3BhZ2VzKHZpLCBwYWdlKTsKKworCXJldHVybiBlcnI7CiB9CiAKIC8qIFJldHVybnMgZmFsc2UgaWYgd2UgY291bGRuJ3QgZmlsbCBlbnRpcmVseSAoT09NKS4gKi8KIHN0YXRpYyBib29sIHRyeV9maWxsX3JlY3Yoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmksIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAlpbnQgZXJyOwogCWJvb2wgb29tID0gZmFsc2U7CiAKLQlpZiAoIXZpLT5tZXJnZWFibGVfcnhfYnVmcykKLQkJcmV0dXJuIHRyeV9maWxsX3JlY3ZfbWF4YnVmcyh2aSwgZ2ZwKTsKLQogCWRvIHsKLQkJc2tiX2ZyYWdfdCAqZjsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKKwkJCWVyciA9IGFkZF9yZWN2YnVmX21lcmdlYWJsZSh2aSwgZ2ZwKTsKKwkJZWxzZSBpZiAodmktPmJpZ19wYWNrZXRzKQorCQkJZXJyID0gYWRkX3JlY3ZidWZfYmlnKHZpLCBnZnApOworCQllbHNlCisJCQllcnIgPSBhZGRfcmVjdmJ1Zl9zbWFsbCh2aSwgZ2ZwKTsKIAotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIEdPT0RfQ09QWV9MRU4pOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCW9vbSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKLQkJZi0+cGFnZSA9IGdldF9hX3BhZ2UodmksIGdmcCk7Ci0JCWlmICghZi0+cGFnZSkgewotCQkJb29tID0gdHJ1ZTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlmLT5wYWdlX29mZnNldCA9IDA7Ci0JCWYtPnNpemUgPSBQQUdFX1NJWkU7Ci0KLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCXNnX2luaXRfb25lKHNnLCBwYWdlX2FkZHJlc3MoZi0+cGFnZSksIFBBR0VfU0laRSk7Ci0JCXNrYl9xdWV1ZV9oZWFkKCZ2aS0+cmVjdiwgc2tiKTsKLQotCQllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIDEsIHNrYik7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlza2JfdW5saW5rKHNrYiwgJnZpLT5yZWN2KTsKLQkJCWtmcmVlX3NrYihza2IpOworCQkJb29tID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9Ci0JCXZpLT5udW0rKzsKKwkJKyt2aS0+bnVtOwogCX0gd2hpbGUgKGVyciA+IDApOwogCWlmICh1bmxpa2VseSh2aS0+bnVtID4gdmktPm1heCkpCiAJCXZpLT5tYXggPSB2aS0+bnVtOwpAQCAtNDA3LDE1ICs0NjUsMTQgQEAKIHN0YXRpYyBpbnQgdmlydG5ldF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdmlydG5ldF9pbmZvLCBuYXBpKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl2b2lkICpidWY7CiAJdW5zaWduZWQgaW50IGxlbiwgcmVjZWl2ZWQgPSAwOwogCiBhZ2FpbjoKIAl3aGlsZSAocmVjZWl2ZWQgPCBidWRnZXQgJiYKLQkgICAgICAgKHNrYiA9IHZpLT5ydnEtPnZxX29wcy0+Z2V0X2J1Zih2aS0+cnZxLCAmbGVuKSkgIT0gTlVMTCkgewotCQlfX3NrYl91bmxpbmsoc2tiLCAmdmktPnJlY3YpOwotCQlyZWNlaXZlX3NrYih2aS0+ZGV2LCBza2IsIGxlbik7Ci0JCXZpLT5udW0tLTsKKwkgICAgICAgKGJ1ZiA9IHZpLT5ydnEtPnZxX29wcy0+Z2V0X2J1Zih2aS0+cnZxLCAmbGVuKSkgIT0gTlVMTCkgeworCQlyZWNlaXZlX2J1Zih2aS0+ZGV2LCBidWYsIGxlbik7CisJCS0tdmktPm51bTsKIAkJcmVjZWl2ZWQrKzsKIAl9CiAKQEAgLTQ0NSw3ICs1MDIsNiBAQAogCiAJd2hpbGUgKChza2IgPSB2aS0+c3ZxLT52cV9vcHMtPmdldF9idWYodmktPnN2cSwgJmxlbikpICE9IE5VTEwpIHsKIAkJcHJfZGVidWcoIlNlbnQgc2tiICVwXG4iLCBza2IpOwotCQlfX3NrYl91bmxpbmsoc2tiLCAmdmktPnNlbmQpOwogCQl2aS0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJdmktPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQl0b3Rfc2dzICs9IHNrYl92bmV0X2hkcihza2IpLT5udW1fc2c7CkBAIC00OTUsOSArNTUxLDkgQEAKIAogCS8qIEVuY29kZSBtZXRhZGF0YSBoZWFkZXIgYXQgZnJvbnQuICovCiAJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKLQkJc2dfc2V0X2J1ZihzZywgJmhkci0+bWhkciwgc2l6ZW9mKGhkci0+bWhkcikpOworCQlzZ19zZXRfYnVmKHNnLCAmaGRyLT5taGRyLCBzaXplb2YgaGRyLT5taGRyKTsKIAllbHNlCi0JCXNnX3NldF9idWYoc2csICZoZHItPmhkciwgc2l6ZW9mKGhkci0+aGRyKSk7CisJCXNnX3NldF9idWYoc2csICZoZHItPmhkciwgc2l6ZW9mIGhkci0+aGRyKTsKIAogCWhkci0+bnVtX3NnID0gc2tiX3RvX3NndmVjKHNrYiwgc2crMSwgMCwgc2tiLT5sZW4pICsgMTsKIAlyZXR1cm4gdmktPnN2cS0+dnFfb3BzLT5hZGRfYnVmKHZpLT5zdnEsIHNnLCBoZHItPm51bV9zZywgMCwgc2tiKTsKQEAgLTUyOCwxNSArNTg0LDYgQEAKIAl9CiAJdmktPnN2cS0+dnFfb3BzLT5raWNrKHZpLT5zdnEpOwogCi0JLyoKLQkgKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlLiAgWW91J2QgZXhwZWN0IHdlJ2QgbmVlZCB0aGlzIGJlZm9yZQotCSAqIHhtaXRfc2tiIGNhbGxzIGFkZF9idWYoKSwgc2luY2UgdGhlIGNhbGxiYWNrIGNhbiBiZSB0cmlnZ2VyZWQKLQkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGF0LiAgQnV0IHNpbmNlIHRoZSBjYWxsYmFjayBqdXN0IHRyaWdnZXJzCi0JICogYW5vdGhlciBjYWxsIGJhY2sgaGVyZSwgbm9ybWFsIG5ldHdvcmsgeG1pdCBsb2NraW5nIHByZXZlbnRzIHRoZQotCSAqIHJhY2UuCi0JICovCi0JX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7Ci0KIAkvKiBEb24ndCB3YWl0IHVwIGZvciB0cmFuc21pdHRlZCBza2JzIHRvIGJlIGZyZWVkLiAqLwogCXNrYl9vcnBoYW4oc2tiKTsKIAluZl9yZXNldChza2IpOwpAQCAtNjc0LDYgKzcyMSw4IEBACiAJc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgKm1hY19kYXRhOwogCXN0cnVjdCBkZXZfYWRkcl9saXN0ICphZGRyOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IHVjX2NvdW50OworCWludCBtY19jb3VudDsKIAl2b2lkICpidWY7CiAJaW50IGk7CiAKQEAgLTcwMCw5ICs3NDksMTIgQEAKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvICVzYWJsZSBhbGxtdWx0aSBtb2RlLlxuIiwKIAkJCSBhbGxtdWx0aSA/ICJlbiIgOiAiZGlzIik7CiAKKwl1Y19jb3VudCA9IG5ldGRldl91Y19jb3VudChkZXYpOworCW1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJLyogTUFDIGZpbHRlciAtIHVzZSBvbmUgYnVmZmVyIGZvciBib3RoIGxpc3RzICovCi0JbWFjX2RhdGEgPSBidWYgPSBremFsbG9jKCgoZGV2LT51Yy5jb3VudCArIGRldi0+bWNfY291bnQpICogRVRIX0FMRU4pICsKLQkJCQkgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJYnVmID0ga3phbGxvYygoKHVjX2NvdW50ICsgbWNfY291bnQpICogRVRIX0FMRU4pICsKKwkJICAgICAgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJbWFjX2RhdGEgPSBidWY7CiAJaWYgKCFidWYpIHsKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNQUMgYWRkcmVzcyBidWZmZXJcbiIpOwogCQlyZXR1cm47CkBAIC03MTEsMjQgKzc2MywyNCBAQAogCXNnX2luaXRfdGFibGUoc2csIDIpOwogCiAJLyogU3RvcmUgdGhlIHVuaWNhc3QgbGlzdCBhbmQgY291bnQgaW4gdGhlIGZyb250IG9mIHRoZSBidWZmZXIgKi8KLQltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+dWMuY291bnQ7CisJbWFjX2RhdGEtPmVudHJpZXMgPSB1Y19jb3VudDsKIAlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KQorCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpCiAJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaSsrXVswXSwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKIAogCXNnX3NldF9idWYoJnNnWzBdLCBtYWNfZGF0YSwKLQkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPnVjLmNvdW50ICogRVRIX0FMRU4pKTsKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArICh1Y19jb3VudCAqIEVUSF9BTEVOKSk7CiAKIAkvKiBtdWx0aWNhc3QgbGlzdCBhbmQgY291bnQgZmlsbCB0aGUgZW5kICovCi0JbWFjX2RhdGEgPSAodm9pZCAqKSZtYWNfZGF0YS0+bWFjc1tkZXYtPnVjLmNvdW50XVswXTsKKwltYWNfZGF0YSA9ICh2b2lkICopJm1hY19kYXRhLT5tYWNzW3VjX2NvdW50XVswXTsKIAotCW1hY19kYXRhLT5lbnRyaWVzID0gZGV2LT5tY19jb3VudDsKLQlhZGRyID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGFkZHIgPSBhZGRyLT5uZXh0KQotCQltZW1jcHkoJm1hY19kYXRhLT5tYWNzW2ldWzBdLCBhZGRyLT5kYV9hZGRyLCBFVEhfQUxFTik7CisJbWFjX2RhdGEtPmVudHJpZXMgPSBtY19jb3VudDsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihhZGRyLCBkZXYpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaSsrXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOwogCiAJc2dfc2V0X2J1Zigmc2dbMV0sIG1hY19kYXRhLAotCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+bWNfY291bnQgKiBFVEhfQUxFTikpOworCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKG1jX2NvdW50ICogRVRIX0FMRU4pKTsKIAogCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9NQUMsCiAJCQkJICBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCwKQEAgLTkxNSwxMCArOTY3LDYgQEAKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAl9CiAKLQkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KLQlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7CkBAIC05NTEsMjYgKzk5OSw0MiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfdW51c2VkX2J1ZnMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJdm9pZCAqYnVmOworCXdoaWxlICgxKSB7CisJCWJ1ZiA9IHZpLT5zdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYodmktPnN2cSk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CisJCWRldl9rZnJlZV9za2IoYnVmKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJYnVmID0gdmktPnJ2cS0+dnFfb3BzLT5kZXRhY2hfdW51c2VkX2J1Zih2aS0+cnZxKTsKKwkJaWYgKCFidWYpCisJCQlicmVhazsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcyB8fCB2aS0+YmlnX3BhY2tldHMpCisJCQlnaXZlX3BhZ2VzKHZpLCBidWYpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiKGJ1Zik7CisJCS0tdmktPm51bTsKKwl9CisJQlVHX09OKHZpLT5udW0gIT0gMCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0bmV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHZkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCS8qIFN0b3AgYWxsIHRoZSB2aXJ0cXVldWVzLiAqLwogCXZkZXYtPmNvbmZpZy0+cmVzZXQodmRldik7CiAKLQkvKiBGcmVlIG91ciBza2JzIGluIHNlbmQgYW5kIHJlY3YgcXVldWVzLCBpZiBhbnkuICovCi0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZ2aS0+cmVjdikpICE9IE5VTEwpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXZpLT5udW0tLTsKLQl9Ci0JX19za2JfcXVldWVfcHVyZ2UoJnZpLT5zZW5kKTsKLQotCUJVR19PTih2aS0+bnVtICE9IDApOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ2aS0+cmVmaWxsKTsKIAorCS8qIEZyZWUgdW51c2VkIGJ1ZmZlcnMgaW4gYm90aCBzZW5kIGFuZCByZWN2LCBpZiBhbnkuICovCisJZnJlZV91bnVzZWRfYnVmcyh2aSk7CisKIAl2ZGV2LT5jb25maWctPmRlbF92cXModmktPnZkZXYpOwogCiAJd2hpbGUgKHZpLT5wYWdlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCA5Y2M0MzgyOC4uY2ZmMzQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtMzUsNyArMzUsNyBAQAogICogUENJIERldmljZSBJRCBUYWJsZQogICogTGFzdCBlbnRyeSBtdXN0IGJlIGFsbCAwcwogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm14bmV0M19wY2lpZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZteG5ldDNfcGNpaWRfdGFibGUpID0gewogCXtQQ0lfVkRFVklDRShWTVdBUkUsIFBDSV9ERVZJQ0VfSURfVk1XQVJFX1ZNWE5FVDMpfSwKIAl7MH0KIH07CkBAIC0xNjY4LDIyICsxNjY4LDE5IEBACiB2bXhuZXQzX2NvcHlfbWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAl1OCAqYnVmID0gTlVMTDsKLQl1MzIgc3ogPSBuZXRkZXYtPm1jX2NvdW50ICogRVRIX0FMRU47CisJdTMyIHN6ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiBFVEhfQUxFTjsKIAogCS8qIHN0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZi5tZlRhYmxlTGVuIGlzIHUxNi4gKi8KIAlpZiAoc3ogPD0gMHhmZmZmKSB7CiAJCS8qIFdlIG1heSBiZSBjYWxsZWQgd2l0aCBCSCBkaXNhYmxlZCAqLwogCQlidWYgPSBrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKIAkJaWYgKGJ1ZikgewotCQkJaW50IGk7Ci0JCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gbmV0ZGV2LT5tY19saXN0OworCQkJc3RydWN0IGRldl9tY19saXN0ICptYzsKKwkJCWludCBpID0gMDsKIAotCQkJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgewotCQkJCUJVR19PTighbWMpOwotCQkJCW1lbWNweShidWYgKyBpICogRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jLCBuZXRkZXYpCisJCQkJbWVtY3B5KGJ1ZiArIGkrKyAqIEVUSF9BTEVOLCBtYy0+ZG1pX2FkZHIsCiAJCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCQltYyA9IG1jLT5uZXh0OwotCQkJfQogCQl9CiAJfQogCXJldHVybiBidWY7CkBAIC0xNzA4LDEyICsxNzA1LDEyIEBACiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCW5ld19tb2RlIHw9IFZNWE5FVDNfUlhNX0FMTF9NVUxUSTsKIAllbHNlCi0JCWlmIChuZXRkZXYtPm1jX2NvdW50ID4gMCkgeworCQlpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpKSB7CiAJCQluZXdfdGFibGUgPSB2bXhuZXQzX2NvcHlfbWMobmV0ZGV2KTsKIAkJCWlmIChuZXdfdGFibGUpIHsKIAkJCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9NQ0FTVDsKIAkJCQlyeENvbmYtPm1mVGFibGVMZW4gPSBjcHVfdG9fbGUxNigKLQkJCQkJCW5ldGRldi0+bWNfY291bnQgKiBFVEhfQUxFTik7CisJCQkJCW5ldGRldl9tY19jb3VudChuZXRkZXYpICogRVRIX0FMRU4pOwogCQkJCXJ4Q29uZi0+bWZUYWJsZVBBID0gY3B1X3RvX2xlNjQodmlydF90b19waHlzKAogCQkJCQkJICAgIG5ld190YWJsZSkpOwogCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCmluZGV4IGI5Njg1ZTguLjQ2YTdjOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtNTQsNyArNTQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRlcmlvbidzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTyIKIAkiVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZ4Z2VfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZ4Z2VfaWRfdGFibGUpID0gewogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfVElUQU5fV0lOLCBQQ0lfQU5ZX0lELAogCVBDSV9BTllfSUR9LAogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfVElUQU5fVU5JLCBQQ0lfQU5ZX0lELApAQCAtMTE3OCwxMSArMTE3OCwxMSBAQAogCiAJbWVtc2V0KCZtYWNfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CiAJLyogVXBkYXRlIGluZGl2aWR1YWwgTV9DQVNUIGFkZHJlc3MgbGlzdCAqLwotCWlmICgoIXZkZXYtPmFsbF9tdWx0aV9mbGcpICYmIGRldi0+bWNfY291bnQpIHsKKwlpZiAoKCF2ZGV2LT5hbGxfbXVsdGlfZmxnKSAmJiBuZXRkZXZfbWNfY291bnQoZGV2KSkgewogCiAJCW1jYXN0X2NudCA9IHZkZXYtPnZwYXRoc1swXS5tY2FzdF9hZGRyX2NudDsKIAkJbGlzdF9oZWFkID0gJnZkZXYtPnZwYXRoc1swXS5tYWNfYWRkcl9saXN0OwotCQlpZiAoKGRldi0+bWNfY291bnQgKworCQlpZiAoKG5ldGRldl9tY19jb3VudChkZXYpICsKIAkJCSh2ZGV2LT52cGF0aHNbMF0ubWFjX2FkZHJfY250IC0gbWNhc3RfY250KSkgPgogCQkJCXZkZXYtPnZwYXRoc1swXS5tYXhfbWFjX2FkZHJfY250KQogCQkJZ290byBfc2V0X2FsbF9tY2FzdDsKQEAgLTEyMTcsOSArMTIxNyw3IEBACiAJCX0KIAogCQkvKiBBZGQgbmV3IG9uZXMgKi8KLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkJCWkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0KKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCQlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOwogCQkJCQl2cGF0aF9pZHgrKykgewpAQCAtNDI5NywxMCArNDI5NSw4IEBACiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTmV0ZXJpb24gJXMgU2VydmVyIEFkYXB0ZXIiLAogCQl2ZGV2LT5uZGV2LT5uYW1lLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucHJvZHVjdF9kZXNjKTsKIAotCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAotCQkiJXM6IE1BQyBBRERSOiAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0JCXZkZXYtPm5kZXYtPm5hbWUsIG1hY2FkZHJbMF0sIG1hY2FkZHJbMV0sIG1hY2FkZHJbMl0sCi0JCW1hY2FkZHJbM10sIG1hY2FkZHJbNF0sIG1hY2FkZHJbNV0pOworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IE1BQyBBRERSOiAlcE0iLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBtYWNhZGRyKTsKIAogCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IExpbmsgV2lkdGggeCVkIiwKIAkJdmRldi0+bmRldi0+bmFtZSwgdnhnZV9od19kZXZpY2VfbGlua193aWR0aF9nZXQoaGxkZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggM2Y3NTlkYS4uZjg4YzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTIwNTAsNyArMjA1MCw3IEBACiBfX3NldHVwKCJkc2NjNC5zZXR1cD0iLCBkc2NjNF9zZXR1cCk7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRzY2M0X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkc2NjNF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU0lFTUVOUywgUENJX0RFVklDRV9JRF9TSUVNRU5TX0RTQ0M0LAogCSAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggOWJjMmUzNi4uNDBkNzI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC01MjgsNyArNTI4LDcgQEAKIC8qCiAgKiAgICAgIFBDSSBJRCBsb29rdXAgdGFibGUKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZzdF9wY2lfZGV2X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShmc3RfcGNpX2Rldl9pZCkgPSB7CiAJe1BDSV9WRU5ET1JfSURfRkFSU0lURSwgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyUCwgUENJX0FOWV9JRCwgCiAJIFBDSV9BTllfSUQsIDAsIDAsIEZTVF9UWVBFX1QyUH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwppbmRleCA0YjZmMjdlLi5iMjc4NTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIHN0YXRpYyBpbnQgTE1DX1BLVF9CVUZfU1ogPSAxNTQyOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbG1jX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShsbWNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfVFVMSVBfRkFTVCwKIAkgIFBDSV9WRU5ET1JfSURfTE1DLCBQQ0lfQU5ZX0lEIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfVFVMSVBfRkFTVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwppbmRleCBhZWM0ZDM5Li5mNGYxYzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCkBAIC0yNTEsNyArMjUxLDcgQEAKICN1bmRlZglQQzMwMF9ERUJVR19SWAogI3VuZGVmCVBDMzAwX0RFQlVHX09USEVSCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjcGNfcGNpX2Rldl9pZFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3BjX3BjaV9kZXZfaWQpID0gewogCS8qIFBDMzAwL1JTViBvciBQQzMwMC9YMjEsIDIgY2hhbiAqLwogCXsweDEyMGUsIDB4MzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAweDMwMH0sCiAJLyogUEMzMDAvUlNWIG9yIFBDMzAwL1gyMSwgMSBjaGFuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCmluZGV4IDYwZWNlNTQuLmM3YWIzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCkBAIC00ODEsNyArNDgxLDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYzMwMF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwYzMwMF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfQ1lDTEFERVMsIFBDSV9ERVZJQ0VfSURfUEMzMDBfUlhfMSwgUENJX0FOWV9JRCwKIAkgIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQ1lDTEFERVMsIFBDSV9ERVZJQ0VfSURfUEMzMDBfUlhfMiwgUENJX0FOWV9JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwppbmRleCBmMTM0MGZhLi5lMmNmZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2kyMDBfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMjAwX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsIFBDSV9WRU5ET1JfSURfUExYLAogCSAgUENJX0RFVklDRV9JRF9QTFhfUENJMjAwU1lOLCAwLCAwLCAwIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCmluZGV4IGRhZWU4YTAuLjU0MWM3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCkBAIC04MTQsNyArODE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdhbnhsX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHdhbnhsX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9TQkUsIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMMTAwLCBQQ0lfQU5ZX0lELAogCSAgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TQkUsIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMMjAwLCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCmluZGV4IDk2YTYxNWYuLjZjZWFkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKQEAgLTMwMSwyNCArMzAxLDE1IEBACiAJLyogRXh0cmFjdCBNQUMgYWRkcmVzc3MgKi8KIAlkZGkgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAJQlVJTERfQlVHX09OKEVUSF9BTEVOICE9IHNpemVvZihkZGktPm1hY19hZGRyZXNzKSk7Ci0JZF9wcmludGYoMiwgZGV2LCAiR0VUIERFVklDRSBJTkZPOiBtYWMgYWRkciAiCi0JCSAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSBkZGktPm1hY19hZGRyZXNzWzBdLCBkZGktPm1hY19hZGRyZXNzWzFdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1syXSwgZGRpLT5tYWNfYWRkcmVzc1szXSwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbNF0sIGRkaS0+bWFjX2FkZHJlc3NbNV0pOworCWRfcHJpbnRmKDIsIGRldiwgIkdFVCBERVZJQ0UgSU5GTzogbWFjIGFkZHIgJXBNXG4iLAorCQkgZGRpLT5tYWNfYWRkcmVzcyk7CiAJaWYgKCFtZW1jbXAobmV0X2Rldi0+cGVybV9hZGRyLCBkZGktPm1hY19hZGRyZXNzLAogCQkgICBzaXplb2YoZGRpLT5tYWNfYWRkcmVzcykpKQogCQlnb3RvIG9rOwogCWRldl93YXJuKGRldiwgIndhcm5pbmc6IGRldmljZSByZXBvcnRzIGEgZGlmZmVyZW50IE1BQyBhZGRyZXNzICIKIAkJICJ0byB0aGF0IG9mIGJvb3QgbW9kZSdzXG4iKTsKLQlkZXZfd2FybihkZXYsICJkZXZpY2UgcmVwb3J0cyAgICAgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSBkZGktPm1hY19hZGRyZXNzWzBdLCBkZGktPm1hY19hZGRyZXNzWzFdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1syXSwgZGRpLT5tYWNfYWRkcmVzc1szXSwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbNF0sIGRkaS0+bWFjX2FkZHJlc3NbNV0pOwotCWRldl93YXJuKGRldiwgImJvb3QgbW9kZSByZXBvcnRlZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIG5ldF9kZXYtPnBlcm1fYWRkclswXSwgbmV0X2Rldi0+cGVybV9hZGRyWzFdLAotCQkgbmV0X2Rldi0+cGVybV9hZGRyWzJdLCBuZXRfZGV2LT5wZXJtX2FkZHJbM10sCi0JCSBuZXRfZGV2LT5wZXJtX2FkZHJbNF0sIG5ldF9kZXYtPnBlcm1fYWRkcls1XSk7CisJZGV2X3dhcm4oZGV2LCAiZGV2aWNlIHJlcG9ydHMgICAgICVwTVxuIiwgZGRpLT5tYWNfYWRkcmVzcyk7CisJZGV2X3dhcm4oZGV2LCAiYm9vdCBtb2RlIHJlcG9ydGVkICVwTVxuIiwgbmV0X2Rldi0+cGVybV9hZGRyKTsKIAlpZiAoIW1lbWNtcCh6ZXJvbWFjLCBkZGktPm1hY19hZGRyZXNzLCBzaXplb2YoemVyb21hYykpKQogCQlkZXZfZXJyKGRldiwgImRldmljZSByZXBvcnRzIGFuIGludmFsaWQgTUFDIGFkZHJlc3MsICIKIAkJCSJub3QgdXBkYXRpbmdcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwppbmRleCA2NGNkZmViLi5lODAzYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwpAQCAtMTA0MSwyMSArMTA0MSwxNCBAQAogCQlkZXZfZXJyKGRldiwgIkJNOiByZWFkIG1hYyBhZGRyIGZhaWxlZDogJWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3JfcmVhZF9tYWM7CiAJfQotCWRfcHJpbnRmKDIsIGRldiwKLQkJICJtYWMgYWRkciBpcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIGFja19idWYuYWNrX3BsWzBdLCBhY2tfYnVmLmFja19wbFsxXSwKLQkJIGFja19idWYuYWNrX3BsWzJdLCBhY2tfYnVmLmFja19wbFszXSwKLQkJIGFja19idWYuYWNrX3BsWzRdLCBhY2tfYnVmLmFja19wbFs1XSk7CisJZF9wcmludGYoMiwgZGV2LCAibWFjIGFkZHIgaXMgJXBNXG4iLCBhY2tfYnVmLmFja19wbCk7CiAJaWYgKGkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID09IDEpIHsKIAkJYWNrX2J1Zi5hY2tfcGxbMF0gPSAweDAwOwogCQlhY2tfYnVmLmFja19wbFsxXSA9IDB4MTY7CiAJCWFja19idWYuYWNrX3BsWzJdID0gMHhkMzsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmYWNrX2J1Zi5hY2tfcGxbM10sIDMpOwogCQlkZXZfZXJyKGRldiwgIkJNIGlzIE1BQyBhZGRyIGltcGFpcmVkLCBmYWtpbmcgTUFDIGFkZHIgdG8gIgotCQkJIm1hYyBhZGRyIGlzICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJYWNrX2J1Zi5hY2tfcGxbMF0sIGFja19idWYuYWNrX3BsWzFdLAotCQkJYWNrX2J1Zi5hY2tfcGxbMl0sIGFja19idWYuYWNrX3BsWzNdLAotCQkJYWNrX2J1Zi5hY2tfcGxbNF0sIGFja19idWYuYWNrX3BsWzVdKTsKKwkJCSJtYWMgYWRkciBpcyAlcE1cbiIsIGFja19idWYuYWNrX3BsKTsKIAkJcmVzdWx0ID0gMDsKIAl9CiAJbmV0X2Rldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDU2ZGQ2NjUuLjU4ODk0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTEyLDYgKzExMiw3IEBACiAJZGVwZW5kcyBvbiBQQ01DSUEgJiYgKEJST0tFTiB8fCAhTTMyUikKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfU1BZCisJc2VsZWN0IFdFWFRfUFJJVgogCXNlbGVjdCBDUllQVE8KIAlzZWxlY3QgQ1JZUFRPX0FFUwogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwppbmRleCAzOTQxMDAxLi41NDc5MTJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwpAQCAtMzksNyArMzksNyBAQAogbW9kdWxlX3BhcmFtKHR4X3Jpbmdfc2l6ZSwgdWludCwgMCk7CiBtb2R1bGVfcGFyYW0ocnhfcmluZ19zaXplLCB1aW50LCAwKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFkbTgyMTFfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhZG04MjExX3BjaV9pZF90YWJsZSkgPSB7CiAJLyogQURNdGVrIEFETTgyMTEgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMEI3LCAweDYwMDApIH0sIC8qIDNDb20gM0NSU0hQVzc5NiAqLwogCXsgUENJX0RFVklDRSgweDEyMDAsIDB4ODIwMSkgfSwgLyogPyAqLwpAQCAtMzAyLDE4ICszMDIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkbTgyMTFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCi0Jc3RhdHNbMF0ubGVuID0gcHJpdi0+Y3VyX3R4IC0gcHJpdi0+ZGlydHlfdHg7Ci0Jc3RhdHNbMF0ubGltaXQgPSBwcml2LT50eF9yaW5nX3NpemUgLSAyOwotCXN0YXRzWzBdLmNvdW50ID0gcHJpdi0+ZGlydHlfdHg7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgYWRtODIxMV9pbnRlcnJ1cHRfdGNpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtMTQwMCwxNSArMTM4OCwxNSBAQAogfQogCiBzdGF0aWMgaW50IGFkbTgyMTFfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOworCQlwcml2LT5tb2RlID0gdmlmLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xNDE2LDggKzE0MDQsOCBAQAogCiAJQURNODIxMV9JRExFKCk7CiAKLQlBRE04MjExX0NTUl9XUklURShQQVIwLCBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKWNvbmYtPm1hY19hZGRyKSk7Ci0JQURNODIxMV9DU1JfV1JJVEUoUEFSMSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikoY29uZi0+bWFjX2FkZHIgKyA0KSkpOworCUFETTgyMTFfQ1NSX1dSSVRFKFBBUjAsIGxlMzJfdG9fY3B1KCooX19sZTMyICopdmlmLT5hZGRyKSk7CisJQURNODIxMV9DU1JfV1JJVEUoUEFSMSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikodmlmLT5hZGRyICsgNCkpKTsKIAogCWFkbTgyMTFfdXBkYXRlX21vZGUoZGV2KTsKIApAQCAtMTQyNyw3ICsxNDE1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYWRtODIxMV9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwpAQCAtMTc3Myw3ICsxNzYxLDYgQEAKIAkucHJlcGFyZV9tdWx0aWNhc3QJPSBhZG04MjExX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gYWRtODIxMV9jb25maWd1cmVfZmlsdGVyLAogCS5nZXRfc3RhdHMJCT0gYWRtODIxMV9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSBhZG04MjExX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBhZG04MjExX2dldF90c2Z0CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNDMzMWQ2Ny4uNjk4ZDU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNTEsMTMgKzUxLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIAogI2luY2x1ZGUgImFpcm8uaCIKIAogI2RlZmluZSBEUlZfTkFNRSAiYWlybyIKIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYXJkX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNhcmRfaWRzKSA9IHsKIAl7IDB4MTRiOSwgMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDB4MTRiOSwgMHg0NTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyAweDE0YjksIDB4NDgwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKQEAgLTIzMTAsNyArMjMxMSw3IEBACiAJCQlhaXJvX3NldF9wcm9taXNjKGFpKTsKIAl9CiAKLQlpZiAoKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKXx8ZGV2LT5tY19jb3VudD4wKSB7CisJaWYgKChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIFR1cm4gb24gbXVsdGljYXN0LiAgKFNob3VsZCBiZSBhbHJlYWR5IHNldHVwLi4uKSAqLwogCX0KIH0KQEAgLTUyNTQsMTEgKzUyNTUsNyBAQAogCVdlcEtleVJpZCB3a3I7CiAJaW50IHJjOwogCi0JaWYgKGtleWxlbiA9PSAwKSB7Ci0JCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICIlczoga2V5IGxlbmd0aCB0byBzZXQgd2FzIHplcm8iLAotCQkJICAgICAgIF9fZnVuY19fKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlXQVJOX09OKGtleWxlbiA9PSAwKTsKIAogCW1lbXNldCgmd2tyLCAwLCBzaXplb2Yod2tyKSk7CiAJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKQEAgLTY0MDUsMTEgKzY0MDIsNyBAQAogCQlpZiAoZHdycS0+bGVuZ3RoID4gTUlOX0tFWV9TSVpFKQogCQkJa2V5LmxlbiA9IE1BWF9LRVlfU0laRTsKIAkJZWxzZQotCQkJaWYgKGR3cnEtPmxlbmd0aCA+IDApCi0JCQkJa2V5LmxlbiA9IE1JTl9LRVlfU0laRTsKLQkJCWVsc2UKLQkJCQkvKiBEaXNhYmxlIHRoZSBrZXkgKi8KLQkJCQlrZXkubGVuID0gMDsKKwkJCWtleS5sZW4gPSBNSU5fS0VZX1NJWkU7CiAJCS8qIENoZWNrIGlmIHRoZSBrZXkgaXMgbm90IG1hcmtlZCBhcyBpbnZhbGlkICovCiAJCWlmKCEoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpKSB7CiAJCQkvKiBDbGVhbnVwICovCkBAIC02NTkwLDEyICs2NTgzLDIyIEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJcmMgPSBzZXRfd2VwX2tleShsb2NhbCwgaWR4LCBrZXkua2V5LCBrZXkubGVuLCBwZXJtLCAxKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJYWlyb19wcmludF9lcnIobG9jYWwtPmRldi0+bmFtZSwgImZhaWxlZCB0byBzZXQgV0VQIGtleSIKLQkJCSAgICAgICAgICAgICAgICIgYXQgaW5kZXggJWQ6ICVkLiIsIGlkeCwgcmMpOwotCQkJcmV0dXJuIHJjOworCQlpZiAoa2V5LmxlbiA9PSAwKSB7CisJCQlyYyA9IHNldF93ZXBfdHhfaWR4KGxvY2FsLCBpZHgsIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsCisJCQkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkJCSAgICAgICBpZHgsIHJjKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyYyA9IHNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsCisJCQkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBXRVAga2V5IGF0IGluZGV4ICVkOiAlZC4iLAorCQkJCQkgICAgICAgaWR4LCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCmluZGV4IDI1MTczNjQuLjBmYjQxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCkBAIC0xNzg5LDcgKzE3ODksNyBAQAogfQogCiBzdGF0aWMgaW50IGF0NzZfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldCA9IDA7CkBAIC0xNzk4LDcgKzE3OTgsNyBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKIAkJYnJlYWs7CkBAIC0xODE0LDcgKzE4MTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBhdDc2X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCmluZGV4IDlmOTQ1OTguLjhjOGNlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaApAQCAtMTA5LDcgKzEwOSw2IEBACiAJYm9vbCBoYXNfcGxjcDsKIH07CiAKLSNkZWZpbmUgQVI5MTcwX05VTV9NQVhfQkFfUkVUUlkJNQogI2RlZmluZSBBUjkxNzBfTlVNX1RJRAkxNgogI2RlZmluZSBXTUVfQkFfQk1QX1NJWkUgICAgICAgICA2NAogI2RlZmluZSBBUjkxNzBfTlVNX01BWF9BR0dfTEVOCSgyICogV01FX0JBX0JNUF9TSVpFKQpAQCAtMTQzLDcgKzE0MiwxMiBAQAogCXUxNiB0aWQ7CiAJZW51bSBhcjkxNzBfdGlkX3N0YXRlIHN0YXRlOwogCWJvb2wgYWN0aXZlOwotCXU4IHJldHJ5OworfTsKKworc3RydWN0IGFyOTE3MF90eF9xdWV1ZV9zdGF0cyB7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CisJdW5zaWduZWQgaW50IGNvdW50OwogfTsKIAogI2RlZmluZSBBUjkxNzBfUVVFVUVfVElNRU9VVAkJNjQKQEAgLTE1NCw2ICsxNTgsOCBAQAogCiAjZGVmaW5lIEFSOTE3MF9OVU1fVFhfU1RBVFVTCQkxMjgKICNkZWZpbmUgQVI5MTcwX05VTV9UWF9BR0dfTUFYCQkzMAorI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX0hBUkQgICAgICAgQVI5MTcwX1RYUV9ERVBUSAorI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQgICAgICAgKEFSOTE3MF9UWFFfREVQVEggLSAxMCkKIAogc3RydWN0IGFyOTE3MCB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CkBAIC0yMTEsNyArMjE3LDcgQEAKIAogCS8qIHFvcyBxdWV1ZSBzZXR0aW5ncyAqLwogCXNwaW5sb2NrX3QgdHhfc3RhdHNfbG9jazsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzVdOworCXN0cnVjdCBhcjkxNzBfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbNV07CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgZWRjZls1XTsKIAogCXNwaW5sb2NrX3QgY21kbG9jazsKQEAgLTI0OCwxMyArMjU0LDggQEAKIAl1bnNpZ25lZCBpbnQgYW1wZHVfbWF4X2xlbjsKIH07CiAKLSNkZWZpbmUgQVI5MTcwX1RYX0ZMQUdfV0FJVF9GT1JfQUNLCUJJVCgwKQotI2RlZmluZSBBUjkxNzBfVFhfRkxBR19OT19BQ0sJCUJJVCgxKQotI2RlZmluZSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0sJQklUKDIpCi0KIHN0cnVjdCBhcjkxNzBfdHhfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXVuc2lnbmVkIGludCBmbGFnczsKIH07CiAKICNkZWZpbmUgSVNfU1RBUlRFRChhKQkJKCgoc3RydWN0IGFyOTE3MCAqKWEpLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvaHcuaAppbmRleCA3MDFkZGI3Li4wYTFkNGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oCkBAIC0yNzYsNiArMjc2LDcgQEAKICNkZWZpbmUgQVI5MTcwX1RYX01BQ19SQVRFX1BST0JFCQkweDgwMDAKIAogLyogZWl0aGVyLW9yICovCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX01BU0sJCQkweDAwMDAwMDAzCiAjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX0NDSwkJCTB4MDAwMDAwMDAKICNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfT0ZETQkJCTB4MDAwMDAwMDEKICNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfSFQJCQkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYwppbmRleCBkZGM4YzA5Li44NTdlODYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AsCiAJCQlhci0+ZWRjZlswXS50eG9wIHwgYXItPmVkY2ZbMV0udHhvcCA8PCAxNik7CiAJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUCwKLQkJCWFyLT5lZGNmWzFdLnR4b3AgfCBhci0+ZWRjZlszXS50eG9wIDw8IDE2KTsKKwkJCWFyLT5lZGNmWzJdLnR4b3AgfCBhci0+ZWRjZlszXS50eG9wIDw8IDE2KTsKIAogCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwppbmRleCBmOWQ2ZGI4Li44YTk2NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwpAQCAtMTk0LDEyICsxOTQsMTUgQEAKIAlyZXR1cm4gYXI5MTcwX2dldF9zZXFfaCgodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGEpOwogfQogCitzdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3RpZF9oKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJcmV0dXJuIChpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSlbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKK30KKwogc3RhdGljIGlubGluZSB1MTYgYXI5MTcwX2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhOwotCi0JcmV0dXJuIChpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSlbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwlyZXR1cm4gYXI5MTcwX2dldF90aWRfaCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHhjLT5mcmFtZV9kYXRhKTsKIH0KIAogI2RlZmluZSBHRVRfTkVYVF9TRVEoc2VxKQkoKHNlcSArIDEpICYgMHgwZmZmKQpAQCAtMjEzLDEwICsyMTYsMTAgQEAKIAlzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gKmFyaW5mbyA9ICh2b2lkICopIHR4aW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxOiVkLCBEQTpbJXBNXSBmbGFnczoleCBzOiVkICIKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ID0+IEZSQU1FIFtza2I6JXAsIHE6JWQsIERBOlslcE1dIHM6JWQgIgogCQkJICAibWFjX2N0cmw6JTA0eCwgcGh5X2N0cmw6JTA4eCwgdGltZW91dDpbJWQgbXNdXVxuIiwKIAkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgc2tiLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSwKLQkgICAgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcmluZm8tPmZsYWdzLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCisJICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgYXI5MTcwX2dldF9zZXFfaChoZHIpLAogCSAgICAgICBsZTE2X3RvX2NwdSh0eGMtPm1hY19jb250cm9sKSwgbGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCksCiAJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoYXJpbmZvLT50aW1lb3V0IC0gamlmZmllcykpOwogfQpAQCAtNDMwLDcgKzQzMyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKIAotCWlmIChza2JfcXVldWVfZW1wdHkoJmFyLT50eF9wZW5kaW5nW3F1ZXVlXSkpIHsKKwlpZiAoYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gPCBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdha2UgcXVldWUgJWRcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBxdWV1ZSk7CkBAIC00NDAsMjIgKzQ0MywxNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spIHsKLQkJYXI5MTcwX3R4X2FtcGR1X2NhbGxiYWNrKGFyLCBza2IpOwotCX0gZWxzZSBpZiAoYXJpbmZvLT5mbGFncyAmIEFSOTE3MF9UWF9GTEFHX1dBSVRfRk9SX0FDSykgewotCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwotCi0JCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfc3RhdHVzW3F1ZXVlXSwgc2tiKTsKLQl9IGVsc2UgaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19OT19BQ0spIHsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgewogCQlhcjkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKIAl9IGVsc2UgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuc3VwcG9ydGVkIGZyYW1lIGZsYWdzIVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOwotCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJCWFyOTE3MF90eF9hbXBkdV9jYWxsYmFjayhhciwgc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7CisKKwkJCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfc3RhdHVzW3F1ZXVlXSwgc2tiKTsKKwkJfQogCX0KIAogCWlmICghYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gJiYKQEAgLTE0MDcsMTcgKzE0MDUsNiBAQAogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKIAkgICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKLQkJCWlmICh1bmxpa2VseSghaW5mby0+Y29udHJvbC5zdGEpKQotCQkJCWdvdG8gZXJyX291dDsKLQotCQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0FHR1IpOwotCQkJYXJpbmZvLT5mbGFncyA9IEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSzsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRSk7CiAJCS8qCiAJCSAqIFdBUk5JTkc6CiAJCSAqIFB1dHRpbmcgdGhlIFFvUyBxdWV1ZSBiaXRzIGludG8gYW4gdW5leHBsb3JlZCB0ZXJyaXRvcnkgaXMKQEAgLTE0MzEsMTIgKzE0MTgsMTcgQEAKIAogCQl0eGMtPnBoeV9jb250cm9sIHw9CiAJCQljcHVfdG9fbGUzMihxdWV1ZSA8PCBBUjkxNzBfVFhfUEhZX1FPU19TSElGVCk7Ci0JCWFyaW5mby0+ZmxhZ3MgPSBBUjkxNzBfVFhfRkxBR19XQUlUX0ZPUl9BQ0s7Ci0JfSBlbHNlIHsKLQkJYXJpbmZvLT5mbGFncyA9IEFSOTE3MF9UWF9GTEFHX05PX0FDSzsKKworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlpZiAodW5saWtlbHkoIWluZm8tPmNvbnRyb2wuc3RhKSkKKwkJCQlnb3RvIGVycl9vdXQ7CisKKwkJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKTsKKwkJfSBlbHNlIHsKKwkJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19SQVRFX1BST0JFKTsKKwkJfQogCX0KIAotb3V0OgogCXJldHVybiAwOwogCiBlcnJfb3V0OgpAQCAtMTY3MSw4ICsxNjYzLDcgQEAKIAkJICogdGVsbCB0aGUgRlcvSFcgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IGZyYW1lLAogCQkgKiB0aGF0IHdheSBpdCB3aWxsIHdhaXQgZm9yIHRoZSBpbW1lZGlhdGUgYmxvY2sgYWNrLgogCQkgKi8KLQkJaWYgKGxpa2VseShza2JfcGVla190YWlsKCZhZ2cpKSkKLQkJCWFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShhciwgc2tiX3BlZWtfdGFpbCgmYWdnKSk7CisJCWFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShhciwgc2tiX3BlZWtfdGFpbCgmYWdnKSk7CiAKICNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZW5lcmF0ZWQgQS1NUERVIGxvb2tzIGxpa2UgdGhpczpcbiIsCkBAIC0xNzE2LDYgKzE3MDcsMjEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAorCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOworCisJCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVvdGEgcmVhY2hlZCBxdWV1ZTolZCwgIgorCQkJICAgICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLCByZW1haW5pbmdfc3BhY2UsCisJCQkgICAgICAgZnJhbWVzKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwkJCWZyYW1lcyA9IHJlbWFpbmluZ19zcGFjZTsKKwkJfQorCisJCWFyLT50eF9zdGF0c1tpXS5sZW4gKz0gZnJhbWVzOworCQlhci0+dHhfc3RhdHNbaV0uY291bnQgKz0gZnJhbWVzOwogCQlpZiAoYXItPnR4X3N0YXRzW2ldLmxlbiA+PSBhci0+dHhfc3RhdHNbaV0ubGltaXQpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWUgJWQgZnVsbFxuIiwKQEAgLTE3MzMsMjUgKzE3MzksOCBAQAogCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCQkJaWVlZTgwMjExX3N0b3BfcXVldWUoYXItPmh3LCBpKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JCQljb250aW51ZTsKIAkJfQogCi0JCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOwotCi0JCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVvdGEgcmVhY2hlZCBxdWV1ZTolZCwgIgotCQkJICAgICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLCByZW1haW5pbmdfc3BhY2UsCi0JCQkgICAgICAgZnJhbWVzKTsKLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQkJCWZyYW1lcyA9IHJlbWFpbmluZ19zcGFjZTsKLQkJfQotCi0JCWFyLT50eF9zdGF0c1tpXS5sZW4gKz0gZnJhbWVzOwotCQlhci0+dHhfc3RhdHNbaV0uY291bnQgKz0gZnJhbWVzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCiAJCWlmICghZnJhbWVzKQpAQCAtMTc3Myw3ICsxNzYyLDcgQEAKIAkJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKwogCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwogCi0JCQlpZiAoYXJpbmZvLT5mbGFncyA9PSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spCisJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJCWF0b21pY19pbmMoJmFyLT50eF9hbXBkdV9wZW5kaW5nKTsKIAogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwpAQCAtMTc4NCw3ICsxNzczLDcgQEAKIAogCQkJZXJyID0gYXItPnR4KGFyLCBza2IpOwogCQkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCQlpZiAoYXJpbmZvLT5mbGFncyA9PSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJCQkJYXRvbWljX2RlYygmYXItPnR4X2FtcGR1X3BlbmRpbmcpOwogCiAJCQkJZnJhbWVzX2ZhaWxlZCsrOwpAQCAtMTk1MCw3ICsxOTM5LDcgQEAKIH0KIAogc3RhdGljIGludCBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9ICZhci0+Y29tbW9uOwpAQCAtMTk2Myw4ICsxOTUyLDggQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCi0JYXItPnZpZiA9IGNvbmYtPnZpZjsKLQltZW1jcHkoY29tbW9uLT5tYWNhZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWFyLT52aWYgPSB2aWY7CisJbWVtY3B5KGNvbW1vbi0+bWFjYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAKIAlpZiAobW9kcGFyYW1fbm9od2NyeXB0IHx8IChhci0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CiAJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKQEAgLTE5ODQsNyArMTk3Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCkBAIC0yMzQwLDU1ICsyMzI5LDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYXI5MTcwX3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQorc3RhdGljIGludCBhcjkxNzBfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTVEFfTk9USUZZX0FERDoKLQkJbWVtc2V0KHN0YV9pbmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7CisJbWVtc2V0KHN0YV9pbmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7CiAKLQkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCi0JCQlicmVhazsKKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPiBhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkpCi0JCQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ID4gYXItPmdsb2JhbF9hbXBkdV9kZW5zaXR5KQorCQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OwogCi0JCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPCBhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvcikKLQkJCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPCBhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvcikKKwkJYXItPmdsb2JhbF9hbXBkdV9mYWN0b3IgPSBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fVElEOyBpKyspIHsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOwotCQkJc3RhX2luZm8tPmFnZ1tpXS5hY3RpdmUgPSBmYWxzZTsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0uc3NuID0gMDsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0ucmV0cnkgPSAwOwotCQkJc3RhX2luZm8tPmFnZ1tpXS50aWQgPSBpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7Ci0JCQlza2JfcXVldWVfaGVhZF9pbml0KCZzdGFfaW5mby0+YWdnW2ldLnF1ZXVlKTsKLQkJfQotCi0JCXN0YV9pbmZvLT5hbXBkdV9tYXhfbGVuID0gMSA8PCAoMyArIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCi0JCQlicmVhazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9USUQ7IGkrKykgewotCQkJc3RhX2luZm8tPmFnZ1tpXS5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfSU5WQUxJRDsKLQkJCXNrYl9xdWV1ZV9wdXJnZSgmc3RhX2luZm8tPmFnZ1tpXS5xdWV1ZSk7Ci0JCX0KLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX1RJRDsgaSsrKSB7CisJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOworCQlzdGFfaW5mby0+YWdnW2ldLmFjdGl2ZSA9IGZhbHNlOworCQlzdGFfaW5mby0+YWdnW2ldLnNzbiA9IDA7CisJCXN0YV9pbmZvLT5hZ2dbaV0udGlkID0gaTsKKwkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN0YV9pbmZvLT5hZ2dbaV0ucXVldWUpOwogCX0KKworCXN0YV9pbmZvLT5hbXBkdV9tYXhfbGVuID0gMSA8PCAoMyArIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9USUQ7IGkrKykgeworCQlzdGFfaW5mby0+YWdnW2ldLnN0YXRlID0gQVI5MTcwX1RJRF9TVEFURV9JTlZBTElEOworCQlza2JfcXVldWVfcHVyZ2UoJnN0YV9pbmZvLT5hZ2dbaV0ucXVldWUpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFyOTE3MF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0yNDA4LDE4ICsyMzk3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcjkxNzBfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnR4X3N0YXRzKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0KLQlzcGluX2xvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKLQltZW1jcHkodHhfc3RhdHMsIGFyLT50eF9zdGF0cywgc2l6ZW9mKHR4X3N0YXRzWzBdKSAqIGh3LT5xdWV1ZXMpOwotCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhcjkxNzBfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCiB7CkBAIC0yNTE5LDkgKzI0OTYsOSBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gYXI5MTcwX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmdldF90c2YJCT0gYXI5MTcwX29wX2dldF90c2YsCiAJLnNldF9rZXkJCT0gYXI5MTcwX3NldF9rZXksCi0JLnN0YV9ub3RpZnkJCT0gYXI5MTcwX3N0YV9ub3RpZnksCisJLnN0YV9hZGQJCT0gYXI5MTcwX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUJCT0gYXI5MTcwX3N0YV9yZW1vdmUsCiAJLmdldF9zdGF0cwkJPSBhcjkxNzBfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYXI5MTcwX2dldF90eF9zdGF0cywKIAkuYW1wZHVfYWN0aW9uCQk9IGFyOTE3MF9hbXBkdV9hY3Rpb24sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwppbmRleCBlMDc5OWQ5Li4wZjM2MTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKQEAgLTg0LDYgKzg0LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjMpIH0sCiAJLyogWi1Db20gVUI4MiBBQkcgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjYpIH0sCisJLyogU3BoYWlyb24gSG9tZWxpbmsgMTIwMiAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNykgfSwKIAkvKiBBcmNhZHlhbiBXTjc1MTIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MjIpIH0sCiAJLyogUGxhbmV4IEdXVVMzMDAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaAppbmRleCA5ZTA1NjQ4Li43MWZjOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCkBAIC03NCw3ICs3NCw2IEBACiAKIHN0cnVjdCBhdGhfYnVzX29wcyB7CiAJdm9pZAkJKCpyZWFkX2NhY2hlc2l6ZSkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opOwotCXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CiAJYm9vbAkJKCplZXByb21fcmVhZCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKIAl2b2lkCQkoKmJ0X2NvZXhfcHJlcCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaAppbmRleCA2YTJhOTY3Li5hYzY3ZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaApAQCAtNTM1LDEzICs1MzUsMTIgQEAKIAl1MzIJdHFpX2Nicl9wZXJpb2Q7IC8qIENvbnN0YW50IGJpdCByYXRlIHBlcmlvZCAqLwogCXUzMgl0cWlfY2JyX292ZXJmbG93X2xpbWl0OwogCXUzMgl0cWlfYnVyc3RfdGltZTsKLQl1MzIJdHFpX3JlYWR5X3RpbWU7IC8qIE5vdCB1c2VkICovCisJdTMyCXRxaV9yZWFkeV90aW1lOyAvKiBUaW1lIHF1ZXVlIHdhaXRzIGFmdGVyIGFuIGV2ZW50ICovCiB9OwogCiAvKgogICogVHJhbnNtaXQgcGFja2V0IHR5cGVzLgogICogdXNlZCBvbiB0eCBjb250cm9sIGRlc2NyaXB0b3IKLSAqIFRPRE86IFVzZSB0aGVtIGluc2lkZSBiYXNlLmMgY29yZWN0bHkKICAqLwogZW51bSBhdGg1a19wa3RfdHlwZSB7CiAJQVI1S19QS1RfVFlQRV9OT1JNQUwJCT0gMCwKQEAgLTEwNjMsNiArMTA2Miw3IEBACiAJdTMyCQkJYWhfY3dfbWluOwogCXUzMgkJCWFoX2N3X21heDsKIAl1MzIJCQlhaF9saW1pdF90eF9yZXRyaWVzOworCXU4CQkJYWhfY292ZXJhZ2VfY2xhc3M7CiAKIAkvKiBBbnRlbm5hIENvbnRyb2wgKi8KIAl1MzIJCQlhaF9hbnRfY3RsW0FSNUtfRUVQUk9NX05fTU9ERVNdW0FSNUtfQU5UX01BWF07CkBAIC0xMjAwLDYgKzEyMDAsNyBAQAogCiAvKiBQcm90b2NvbCBDb250cm9sIFVuaXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gdm9pZCBhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGF0aDVrX2h3ICphaCwgdTggY292ZXJhZ2VfY2xhc3MpOwogLyogQlNTSUQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9sbGFkZHIoc3RydWN0IGF0aDVrX2h3ICphaCwgY29uc3QgdTggKm1hYyk7CiBleHRlcm4gdm9pZCBhdGg1a19od19zZXRfYXNzb2NpZChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKQEAgLTEyMzEsNiArMTIzMiwxMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGg1a19od19nZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9jdHNfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9jdHNfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKKy8qIENsb2NrIHJhdGUgcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3Vuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdXNlYyk7Cit1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2goc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGNsb2NrKTsKK3Vuc2lnbmVkIGludCBhdGg1a19od19nZXRfY2xvY2tyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogS2V5IHRhYmxlIChXRVApIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19yZXNldF9rZXkoc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IGVudHJ5KTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfaXNfa2V5X3ZhbGlkKHN0cnVjdCBhdGg1a19odyAqYWgsIHUxNiBlbnRyeSk7CkBAIC0xMzEwLDI0ICsxMzE1LDYgQEAKICAqIEZ1bmN0aW9ucyB1c2VkIGludGVybmFseQogICovCiAKLS8qCi0gKiBUcmFuc2xhdGUgdXNlYyB0byBodyBjbG9jayB1bml0cwotICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfaHRvY2xvY2sodW5zaWduZWQgaW50IHVzZWMsIGJvb2wgdHVyYm8pCi17Ci0JcmV0dXJuIHR1cmJvID8gKHVzZWMgKiA4MCkgOiAodXNlYyAqIDQwKTsKLX0KLQotLyoKLSAqIFRyYW5zbGF0ZSBodyBjbG9jayB1bml0cyB0byB1c2VjCi0gKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19jbG9ja3RvaCh1bnNpZ25lZCBpbnQgY2xvY2ssIGJvb2wgdHVyYm8pCi17Ci0JcmV0dXJuIHR1cmJvID8gKGNsb2NrIC8gODApIDogKGNsb2NrIC8gNDApOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg1a19od19jb21tb24oc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKICAgICAgICAgcmV0dXJuICZhaC0+Y29tbW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKaW5kZXggZTYzYjdjNC4uOGRjZTAwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCkBAIC04Myw3ICs4Myw3IEBACiAKIAogLyogS25vd24gUENJIGlkcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0aDVrX3BjaV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAyMDcpIH0sIC8qIDUyMTAgZWFybHkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNykgfSwgLyogNTIxMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSB9LCAvKiA1MzExIC0gdGhpcyBpcyBvbiBBSEIgYnVzICEqLwpAQCAtMjI1LDkgKzIyNSw5IEBACiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGF0aDVrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogc3RhdGljIHZvaWQgYXRoNWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHN0YXRpYyBpbnQgYXRoNWtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiBzdGF0aWMgdTY0IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwpAQCAtMjQxLDggKzI0MSw2IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsKLXN0YXRpYyBpbnQgYXRoNWtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgdTY0IGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIHZvaWQgYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiBzdGF0aWMgdm9pZCBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMjU0LDYgKzI1Miw4IEBACiAJCXUzMiBjaGFuZ2VzKTsKIHN0YXRpYyB2b2lkIGF0aDVrX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIHZvaWQgYXRoNWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgdm9pZCBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXU4IGNvdmVyYWdlX2NsYXNzKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKIAkudHggCQk9IGF0aDVrX3R4LApAQCAtMjY3LDEzICsyNjcsMTMgQEAKIAkuc2V0X2tleSAJPSBhdGg1a19zZXRfa2V5LAogCS5nZXRfc3RhdHMgCT0gYXRoNWtfZ2V0X3N0YXRzLAogCS5jb25mX3R4IAk9IE5VTEwsCi0JLmdldF90eF9zdGF0cyAJPSBhdGg1a19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKIAkuc2V0X3RzZiAJPSBhdGg1a19zZXRfdHNmLAogCS5yZXNldF90c2YgCT0gYXRoNWtfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gYXRoNWtfYnNzX2luZm9fY2hhbmdlZCwKIAkuc3dfc2Nhbl9zdGFydAk9IGF0aDVrX3N3X3NjYW5fc3RhcnQsCiAJLnN3X3NjYW5fY29tcGxldGUgPSBhdGg1a19zd19zY2FuX2NvbXBsZXRlLAorCS5zZXRfY292ZXJhZ2VfY2xhc3MgPSBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3MsCiB9OwogCiAvKgpAQCAtMTI0Niw2ICsxMjQ2LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBlbnVtIGF0aDVrX3BrdF90eXBlIGdldF9od19wYWNrZXRfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJZW51bSBhdGg1a19wa3RfdHlwZSBodHlwZTsKKwlfX2xlMTYgZmM7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCWh0eXBlID0gQVI1S19QS1RfVFlQRV9CRUFDT047CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlodHlwZSA9IEFSNUtfUEtUX1RZUEVfUFJPQkVfUkVTUDsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCisJCWh0eXBlID0gQVI1S19QS1RfVFlQRV9BVElNOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wc3BvbGwoZmMpKQorCQlodHlwZSA9IEFSNUtfUEtUX1RZUEVfUFNQT0xMOworCWVsc2UKKwkJaHR5cGUgPSBBUjVLX1BLVF9UWVBFX05PUk1BTDsKKworCXJldHVybiBodHlwZTsKK30KKwogc3RhdGljIGludAogYXRoNWtfdHhidWZfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2J1ZiAqYmYsCiAJCSAgc3RydWN0IGF0aDVrX3R4cSAqdHhxKQpAQCAtMTMwMCw3ICsxMzIzLDggQEAKIAkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOwogCX0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKLQkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCisJCWllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYiksCisJCWdldF9od19wYWNrZXRfdHlwZShza2IpLAogCQkoc2MtPnBvd2VyX2xldmVsICogMiksCiAJCWh3X3JhdGUsCiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQsIGtleWlkeCwgYWgtPmFoX3R4X2FudCwgZmxhZ3MsCkBAIC0xMzI5LDcgKzEzNTMsNiBAQAogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmdHhxLT5xKTsKLQlzYy0+dHhfc3RhdHNbdHhxLT5xbnVtXS5sZW4rKzsKIAlpZiAodHhxLT5saW5rID09IE5VTEwpIC8qIGlzIHRoaXMgZmlyc3QgcGFja2V0PyAqLwogCQlhdGg1a19od19zZXRfdHhkcChhaCwgdHhxLT5xbnVtLCBiZi0+ZGFkZHIpOwogCWVsc2UgLyogbm8sIHNvIG9ubHkgbGluayBpdCAqLwpAQCAtMTUxMyw3ICsxNTM2LDggQEAKIAogCXJldCA9IGF0aDVrX2h3X2dldF90eF9xdWV1ZXByb3BzKGFoLCBzYy0+YmhhbHEsICZxaSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CisKIAlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAogCQlzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKIAkJLyoKQEAgLTE1NDAsMTAgKzE1NjQsMjUgQEAKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgIiVzOiB1bmFibGUgdG8gdXBkYXRlIHBhcmFtZXRlcnMgZm9yIGJlYWNvbiAiCiAJCQkiaGFyZHdhcmUgcXVldWUhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KKwlyZXQgPSBhdGg1a19od19yZXNldF90eF9xdWV1ZShhaCwgc2MtPmJoYWxxKTsgLyogcHVzaCB0byBoL3cgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAotCXJldHVybiBhdGg1a19od19yZXNldF90eF9xdWV1ZShhaCwgc2MtPmJoYWxxKTsgLyogcHVzaCB0byBoL3cgKi87CisJLyogcmVjb25maWd1cmUgY2FicSB3aXRoIHJlYWR5IHRpbWUgdG8gODAlIG9mIGJlYWNvbl9pbnRlcnZhbCAqLworCXJldCA9IGF0aDVrX2h3X2dldF90eF9xdWV1ZXByb3BzKGFoLCBBUjVLX1RYX1FVRVVFX0lEX0NBQiwgJnFpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXFpLnRxaV9yZWFkeV90aW1lID0gKHNjLT5iaW50dmFsICogODApIC8gMTAwOworCXJldCA9IGF0aDVrX2h3X3NldF90eF9xdWV1ZXByb3BzKGFoLCBBUjVLX1RYX1FVRVVFX0lEX0NBQiwgJnFpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBBUjVLX1RYX1FVRVVFX0lEX0NBQik7CitlcnI6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE1NjIsNyArMTYwMSw2IEBACiAJCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIGJmKTsKIAogCQlzcGluX2xvY2tfYmgoJnNjLT50eGJ1ZmxvY2spOwotCQlzYy0+dHhfc3RhdHNbdHhxLT5xbnVtXS5sZW4tLTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKIAkJc2MtPnR4YnVmX2xlbisrOwogCQlzcGluX3VubG9ja19iaCgmc2MtPnR4YnVmbG9jayk7CkBAIC0xOTkyLDEwICsyMDMwLDggQEAKIAkJfQogCiAJCWllZWU4MDIxMV90eF9zdGF0dXMoc2MtPmh3LCBza2IpOwotCQlzYy0+dHhfc3RhdHNbdHhxLT5xbnVtXS5jb3VudCsrOwogCiAJCXNwaW5fbG9jaygmc2MtPnR4YnVmbG9jayk7Ci0JCXNjLT50eF9zdGF0c1t0eHEtPnFudW1dLmxlbi0tOwogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHhidWYpOwogCQlzYy0+dHhidWZfbGVuKys7CiAJCXNwaW5fdW5sb2NrKCZzYy0+dHhidWZsb2NrKTsKQEAgLTI3NzMsNyArMjgwOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoNWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCWludCByZXQ7CkBAIC0yNzg0LDIyICsyODIwLDIyIEBACiAJCWdvdG8gZW5kOwogCX0KIAotCXNjLT52aWYgPSBjb25mLT52aWY7CisJc2MtPnZpZiA9IHZpZjsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlzYy0+b3Btb2RlID0gY29uZi0+dHlwZTsKKwkJc2MtPm9wbW9kZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gZW5kOwogCX0KIAotCWF0aDVrX2h3X3NldF9sbGFkZHIoc2MtPmFoLCBjb25mLT5tYWNfYWRkcik7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIHZpZi0+YWRkcik7CiAJYXRoNWtfbW9kZV9zZXR1cChzYyk7CiAKIAlyZXQgPSAwOwpAQCAtMjgxMCwxMyArMjg0NiwxMyBAQAogCiBzdGF0aWMgdm9pZAogYXRoNWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJdTggbWFjW0VUSF9BTEVOXSA9IHt9OwogCiAJbXV0ZXhfbG9jaygmc2MtPmxvY2spOwotCWlmIChzYy0+dmlmICE9IGNvbmYtPnZpZikKKwlpZiAoc2MtPnZpZiAhPSB2aWYpCiAJCWdvdG8gZW5kOwogCiAJYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIG1hYyk7CkBAIC0zMDk3LDE3ICszMTMzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYXRoNWtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQltZW1jcHkoc3RhdHMsICZzYy0+dHhfc3RhdHMsIHNpemVvZihzYy0+dHhfc3RhdHMpKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTY0CiBhdGg1a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMzI2MiwzICszMjg3LDIyIEBACiAJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgc2MtPmFzc29jID8KIAkJQVI1S19MRURfQVNTT0MgOiBBUjVLX0xFRF9JTklUKTsKIH0KKworLyoqCisgKiBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3MgLSBTZXQgSUVFRSA4MDIuMTEgY292ZXJhZ2UgY2xhc3MKKyAqCisgKiBAaHc6IHN0cnVjdCBpZWVlODAyMTFfaHcgcG9pbnRlcgorICogQGNvdmVyYWdlX2NsYXNzOiBJRUVFIDgwMi4xMSBjb3ZlcmFnZSBjbGFzcyBudW1iZXIKKyAqCisgKiBNYWM4MDIxMSBjYWxsYmFjay4gU2V0cyBzbG90IHRpbWUsIEFDSyB0aW1lb3V0IGFuZCBDVFMgdGltZW91dCBmb3IgZ2l2ZW4KKyAqIGNvdmVyYWdlIGNsYXNzLiBUaGUgdmFsdWVzIGFyZSBwZXJzaXN0ZW50LCB0aGV5IGFyZSByZXN0b3JlZCBhZnRlciBkZXZpY2UKKyAqIHJlc2V0LgorICovCitzdGF0aWMgdm9pZCBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKKwlhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3Moc2MtPmFoLCBjb3ZlcmFnZV9jbGFzcyk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAppbmRleCA5NTJiM2EyLi43ZTFhODhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKQEAgLTExNyw3ICsxMTcsNiBAQAogCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsJCS8qIGZvciBkbWEgbWFwcGluZyAqLwogCXZvaWQgX19pb21lbQkJKmlvYmFzZTsJLyogYWRkcmVzcyBvZiB0aGUgZGV2aWNlICovCiAJc3RydWN0IG11dGV4CQlsb2NrOwkJLyogZGV2LWxldmVsIGxvY2sgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzW0FSNUtfTlVNX1RYX1FVRVVFU107CiAJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgbGxfc3RhdHM7CiAJc3RydWN0IGllZWU4MDIxMV9odwkqaHc7CQkvKiBJRUVFIDgwMi4xMSBjb21tb24gKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHNiYW5kc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYwppbmRleCA2MGY1NDc1Li42N2FhNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCkBAIC03Nyw2ICs3Nyw4IEBACiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0hQLCAweDAxMzdhKSwgQVRIX0xFRCgzLCAxKSB9LAogCS8qIEhQIENvbXBhcSBDNzAwIChuaXRyb3VzbnJnQGdtYWlsLmNvbSkgKi8KIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MDEzN2IpLCBBVEhfTEVEKDMsIDEpIH0sCisJLyogTGl0ZU9uIEFSNUJYQjYzIChtYWdvb3pAc2FsdWcuaXQpICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSEVST1MsIDB4MzA2NyksIEFUSF9MRUQoMywgMCkgfSwKIAkvKiBJQk0tc3BlY2lmaWMgQVI1MjEyIChhbGwgb3RoZXJzKSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0pLCBBVEhfTEVEKDAsIDApIH0sCiAJLyogRGVsbCBWb3N0cm8gQTg2MCAoc2hhaGFyQHNoYWhhci1vci5jby5pbCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCA2NGZjMWViLi5hZWZlODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC0xODcsOCArMTg3LDggQEAKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0JcmV0dXJuIGF0aDVrX2h3X2Nsb2NrdG9oKEFSNUtfUkVHX01TKGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJQVI1S19USU1FX09VVCksIEFSNUtfVElNRV9PVVRfQUNLKSwgYWgtPmFoX3R1cmJvKTsKKwlyZXR1cm4gYXRoNWtfaHdfY2xvY2t0b2goYWgsIEFSNUtfUkVHX01TKGF0aDVrX2h3X3JlZ19yZWFkKGFoLAorCQkJQVI1S19USU1FX09VVCksIEFSNUtfVElNRV9PVVRfQUNLKSk7CiB9CiAKIC8qKgpAQCAtMjAwLDEyICsyMDAsMTIgQEAKIGludCBhdGg1a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoYXRoNWtfaHdfY2xvY2t0b2goQVI1S19SRUdfTVMoMHhmZmZmZmZmZiwgQVI1S19USU1FX09VVF9BQ0spLAotCQkJYWgtPmFoX3R1cmJvKSA8PSB0aW1lb3V0KQorCWlmIChhdGg1a19od19jbG9ja3RvaChhaCwgQVI1S19SRUdfTVMoMHhmZmZmZmZmZiwgQVI1S19USU1FX09VVF9BQ0spKQorCQkJPD0gdGltZW91dCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RJTUVfT1VULCBBUjVLX1RJTUVfT1VUX0FDSywKLQkJYXRoNWtfaHdfaHRvY2xvY2sodGltZW91dCwgYWgtPmFoX3R1cmJvKSk7CisJCWF0aDVrX2h3X2h0b2Nsb2NrKGFoLCB0aW1lb3V0KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOCw4ICsyMTgsOCBAQAogdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9jdHNfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JcmV0dXJuIGF0aDVrX2h3X2Nsb2NrdG9oKEFSNUtfUkVHX01TKGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJQVI1S19USU1FX09VVCksIEFSNUtfVElNRV9PVVRfQ1RTKSwgYWgtPmFoX3R1cmJvKTsKKwlyZXR1cm4gYXRoNWtfaHdfY2xvY2t0b2goYWgsIEFSNUtfUkVHX01TKGF0aDVrX2h3X3JlZ19yZWFkKGFoLAorCQkJQVI1S19USU1FX09VVCksIEFSNUtfVElNRV9PVVRfQ1RTKSk7CiB9CiAKIC8qKgpAQCAtMjMxLDE3ICsyMzEsOTcgQEAKIGludCBhdGg1a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoYXRoNWtfaHdfY2xvY2t0b2goQVI1S19SRUdfTVMoMHhmZmZmZmZmZiwgQVI1S19USU1FX09VVF9DVFMpLAotCQkJYWgtPmFoX3R1cmJvKSA8PSB0aW1lb3V0KQorCWlmIChhdGg1a19od19jbG9ja3RvaChhaCwgQVI1S19SRUdfTVMoMHhmZmZmZmZmZiwgQVI1S19USU1FX09VVF9DVFMpKQorCQkJPD0gdGltZW91dCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RJTUVfT1VULCBBUjVLX1RJTUVfT1VUX0NUUywKLQkJCWF0aDVrX2h3X2h0b2Nsb2NrKHRpbWVvdXQsIGFoLT5haF90dXJibykpOworCQkJYXRoNWtfaHdfaHRvY2xvY2soYWgsIHRpbWVvdXQpKTsKIAogCXJldHVybiAwOwogfQogCiAvKioKKyAqIGF0aDVrX2h3X2h0b2Nsb2NrIC0gVHJhbnNsYXRlIHVzZWMgdG8gaHcgY2xvY2sgdW5pdHMKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKiBAdXNlYzogdmFsdWUgaW4gbWljcm9zZWNvbmRzCisgKi8KK3Vuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdXNlYykKK3sKKwlyZXR1cm4gdXNlYyAqIGF0aDVrX2h3X2dldF9jbG9ja3JhdGUoYWgpOworfQorCisvKioKKyAqIGF0aDVrX2h3X2Nsb2NrdG9oIC0gVHJhbnNsYXRlIGh3IGNsb2NrIHVuaXRzIHRvIHVzZWMKKyAqIEBjbG9jazogdmFsdWUgaW4gaHcgY2xvY2sgdW5pdHMKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2Nsb2NrdG9oKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwlyZXR1cm4gY2xvY2sgLyBhdGg1a19od19nZXRfY2xvY2tyYXRlKGFoKTsKK30KKworLyoqCisgKiBhdGg1a19od19nZXRfY2xvY2tyYXRlIC0gR2V0IHRoZSBjbG9jayByYXRlIGZvciBjdXJyZW50IG1vZGUKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKi8KK3Vuc2lnbmVkIGludCBhdGg1a19od19nZXRfY2xvY2tyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKwlpbnQgY2xvY2s7CisKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCWNsb2NrID0gNDA7IC8qIDgwMi4xMWEgKi8KKwllbHNlIGlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQorCQljbG9jayA9IDIyOyAvKiA4MDIuMTFiICovCisJZWxzZQorCQljbG9jayA9IDQ0OyAvKiA4MDIuMTFnICovCisKKwkvKiBDbG9jayByYXRlIGluIHR1cmJvIG1vZGVzIGlzIHR3aWNlIHRoZSBub3JtYWwgcmF0ZSAqLworCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pCisJCWNsb2NrICo9IDI7CisKKwlyZXR1cm4gY2xvY2s7Cit9CisKKy8qKgorICogYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2xvdHRpbWUgLSBHZXQgdGhlIGRlZmF1bHQgc2xvdCB0aW1lIGZvciBjdXJyZW50IG1vZGUKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKi8KK3Vuc2lnbmVkIGludCBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CisKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKQorCQlyZXR1cm4gNjsgLyogYm90aCB0dXJibyBtb2RlcyAqLworCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spCisJCXJldHVybiAyMDsgLyogODAyLjExYiAqLworCisJcmV0dXJuIDk7IC8qIDgwMi4xMSBhL2cgKi8KK30KKworLyoqCisgKiBhdGg1a19od19nZXRfZGVmYXVsdF9zaWZzIC0gR2V0IHRoZSBkZWZhdWx0IFNJRlMgZm9yIGN1cnJlbnQgbW9kZQorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOworCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTykKKwkJcmV0dXJuIDg7IC8qIGJvdGggdHVyYm8gbW9kZXMgKi8KKworCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKKwkJcmV0dXJuIDE2OyAvKiA4MDIuMTFhICovCisKKwlyZXR1cm4gMTA7IC8qIDgwMi4xMSBiL2cgKi8KK30KKworLyoqCiAgKiBhdGg1a19od19zZXRfbGxhZGRyIC0gU2V0IHN0YXRpb24gaWQKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CkBAIC0xMDUwLDMgKzExMzAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3MgLSBTZXQgSUVFRSA4MDIuMTEgY292ZXJhZ2UgY2xhc3MKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKiBAY292ZXJhZ2VfY2xhc3M6IElFRUUgODAyLjExIGNvdmVyYWdlIGNsYXNzIG51bWJlcgorICoKKyAqIFNldHMgc2xvdCB0aW1lLCBBQ0sgdGltZW91dCBhbmQgQ1RTIHRpbWVvdXQgZm9yIGdpdmVuIGNvdmVyYWdlIGNsYXNzLgorICovCit2b2lkIGF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBjb3ZlcmFnZV9jbGFzcykKK3sKKwkvKiBBcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExLTIwMDcgMTcuMy44LjYgKi8KKwlpbnQgc2xvdF90aW1lID0gYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2xvdHRpbWUoYWgpICsgMyAqIGNvdmVyYWdlX2NsYXNzOworCWludCBhY2tfdGltZW91dCA9IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoYWgpICsgc2xvdF90aW1lOworCWludCBjdHNfdGltZW91dCA9IGFja190aW1lb3V0OworCisJYXRoNWtfaHdfc2V0X3Nsb3RfdGltZShhaCwgc2xvdF90aW1lKTsKKwlhdGg1a19od19zZXRfYWNrX3RpbWVvdXQoYWgsIGFja190aW1lb3V0KTsKKwlhdGg1a19od19zZXRfY3RzX3RpbWVvdXQoYWgsIGN0c190aW1lb3V0KTsKKworCWFoLT5haF9jb3ZlcmFnZV9jbGFzcyA9IGNvdmVyYWdlX2NsYXNzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCmluZGV4IGVlZWJiOWEuLjkxMjJhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKQEAgLTQwOCwxMiArNDA4LDEzIEBACiAJCQlicmVhazsKIAogCQljYXNlIEFSNUtfVFhfUVVFVUVfQ0FCOgorCQkJLyogWFhYOiB1c2UgQkNOX1NFTlRfR1QsIGlmIHdlIGNhbiBmaWd1cmUgb3V0IGhvdyAqLwogCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfTUlTQyhxdWV1ZSksCi0JCQkJQVI1S19RQ1VfTUlTQ19GUlNIRURfQkNOX1NFTlRfR1QgfAorCQkJCUFSNUtfUUNVX01JU0NfRlJTSEVEX0RCQV9HVCB8CiAJCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfRElTIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9CQ05fRElTKTsKIAotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKHRxLT50cWlfcmVhZHlfdGltZSAtCiAJCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCiAJCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQogCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8CkBAIC01MjAsMTIgKzUyMSwxNiBAQAogICovCiB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfZ2V0X3Nsb3RfdGltZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogeworCXVuc2lnbmVkIGludCBzbG90X3RpbWVfY2xvY2s7CisKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOworCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQotCQlyZXR1cm4gYXRoNWtfaHdfY2xvY2t0b2goYXRoNWtfaHdfcmVnX3JlYWQoYWgsCi0JCQkJQVI1S19TTE9UX1RJTUUpICYgMHhmZmZmLCBhaC0+YWhfdHVyYm8pOworCQlzbG90X3RpbWVfY2xvY2sgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TTE9UX1RJTUUpOwogCWVsc2UKLQkJcmV0dXJuIGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0RDVV9HQkxfSUZTX1NMT1QpICYgMHhmZmZmOworCQlzbG90X3RpbWVfY2xvY2sgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19EQ1VfR0JMX0lGU19TTE9UKTsKKworCXJldHVybiBhdGg1a19od19jbG9ja3RvaChhaCwgc2xvdF90aW1lX2Nsb2NrICYgMHhmZmZmKTsKIH0KIAogLyoKQEAgLTUzMywxNSArNTM4LDE3IEBACiAgKi8KIGludCBhdGg1a19od19zZXRfc2xvdF90aW1lKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBzbG90X3RpbWUpCiB7CisJdTMyIHNsb3RfdGltZV9jbG9jayA9IGF0aDVrX2h3X2h0b2Nsb2NrKGFoLCBzbG90X3RpbWUpOworCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoc2xvdF90aW1lIDwgQVI1S19TTE9UX1RJTUVfOSB8fCBzbG90X3RpbWUgPiBBUjVLX1NMT1RfVElNRV9NQVgpCisKKwlpZiAoc2xvdF90aW1lIDwgNiB8fCBzbG90X3RpbWVfY2xvY2sgPiBBUjVLX1NMT1RfVElNRV9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGF0aDVrX2h3X2h0b2Nsb2NrKHNsb3RfdGltZSwKLQkJCQlhaC0+YWhfdHVyYm8pLCBBUjVLX1NMT1RfVElNRSk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2xvdF90aW1lX2Nsb2NrLCBBUjVLX1NMT1RfVElNRSk7CiAJZWxzZQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNsb3RfdGltZSwgQVI1S19EQ1VfR0JMX0lGU19TTE9UKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzbG90X3RpbWVfY2xvY2ssIEFSNUtfRENVX0dCTF9JRlNfU0xPVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKaW5kZXggNjI5NTRmYy4uYTM1YTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKQEAgLTYwLDEyICs2MCwxMSBAQAogCQkhKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSk7CiAKIAkvKiBHZXQgY29lZmZpY2llbnQKLQkgKiBBTEdPOiBjb2VmID0gKDUgKiBjbG9jayAqIGNhcnJpZXJfZnJlcSkgLyAyKQorCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrIC8gY2Fycmllcl9mcmVxKSAvIDIKIAkgKiB3ZSBzY2FsZSBjb2VmIGJ5IHNoaWZ0aW5nIGNsb2NrIHZhbHVlIGJ5IDI0IGZvcgogCSAqIGJldHRlciBwcmVjaXNpb24gc2luY2Ugd2UgdXNlIGludGVnZXJzICovCiAJLyogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUgKi8KLQljbG9jayA9ICBhdGg1a19od19odG9jbG9jaygxLCBjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pOwotCisJY2xvY2sgPSAgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTykgPyA4MCA6IDQwOwogCWNvZWZfc2NhbGVkID0gKCg1ICogKGNsb2NrIDw8IDI0KSkgLyAyKSAvIGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCiAJLyogR2V0IGV4cG9uZW50CkBAIC0xMzE3LDYgKzEzMTYsMTAgQEAKIAkvKiBSZXN0b3JlIGFudGVubmEgbW9kZSAqLwogCWF0aDVrX2h3X3NldF9hbnRlbm5hX21vZGUoYWgsIGFoLT5haF9hbnRfbW9kZSk7CiAKKwkvKiBSZXN0b3JlIHNsb3QgdGltZSBhbmQgQUNLIHRpbWVvdXRzICovCisJaWYgKGFoLT5haF9jb3ZlcmFnZV9jbGFzcyA+IDApCisJCWF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhhaCwgYWgtPmFoX2NvdmVyYWdlX2NsYXNzKTsKKwogCS8qCiAJICogQ29uZmlndXJlIFFDVXMvRENVcwogCSAqLwpAQCAtMTM3MSw4ICsxMzc0LDkgQEAKIAkgKiBTZXQgY2xvY2tzIHRvIDMyS0h6IG9wZXJhdGlvbiBhbmQgdXNlIGFuCiAJICogZXh0ZXJuYWwgMzJLSHogY3J5c3RhbCB3aGVuIHNsZWVwaW5nIGlmIG9uZQogCSAqIGV4aXN0cyAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikKLQkJCWF0aDVrX2h3X3NldF9zbGVlcF9jbG9jayhhaCwgdHJ1ZSk7CisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCisJICAgIGFoLT5haF9vcF9tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIHRydWUpOwogCiAJLyoKIAkgKiBEaXNhYmxlIGJlYWNvbnMgYW5kIHJlc2V0IHRoZSByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCmluZGV4IDQ5ODViMmIuLjZiNTBkNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKQEAgLTEsNCArMSw2IEBACiBhdGg5ay15ICs9CWJlYWNvbi5vIFwKKwkJZ3Bpby5vIFwKKwkJaW5pdC5vIFwKIAkJbWFpbi5vIFwKIAkJcmVjdi5vIFwKIAkJeG1pdC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYwppbmRleCAzMjllNmJjLi5jYTQ5OTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCkBAIC0yNywxMiArMjcsNiBAQAogCSpjc3ogPSBMMV9DQUNIRV9CWVRFUyA+PiAyOwogfQogCi1zdGF0aWMgdm9pZCBhdGhfYWhiX2NsZWFudXAoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbikKLXsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopY29tbW9uLT5wcml2OwotCWlvdW5tYXAoc2MtPm1lbSk7Ci19Ci0KIHN0YXRpYyBib29sIGF0aF9haGJfZWVwcm9tX3JlYWQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKiljb21tb24tPnByaXY7CkBAIC01NCw4ICs0OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX2FoYl9idXNfb3BzICA9IHsKIAkucmVhZF9jYWNoZXNpemUgPSBhdGhfYWhiX3JlYWRfY2FjaGVzaXplLAotCS5jbGVhbnVwID0gYXRoX2FoYl9jbGVhbnVwLAotCiAJLmVlcHJvbV9yZWFkID0gYXRoX2FoYl9lZXByb21fcmVhZCwKIH07CiAKQEAgLTEyMSwxNiArMTEzLDE5IEBACiAJc2MtPm1lbSA9IG1lbTsKIAlzYy0+aXJxID0gaXJxOwogCi0JcmV0ID0gYXRoX2luaXRfZGV2aWNlKEFSNTQxNl9BUjkxMDBfREVWSUQsIHNjLCAweDAsICZhdGhfYWhiX2J1c19vcHMpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfZnJlZV9odzsKLQl9CisJLyogV2lsbCBiZSBjbGVhcmVkIGluIGF0aDlrX3N0YXJ0KCkgKi8KKwlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfSU5WQUxJRDsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX2RldGFjaDsKKwkJZ290byBlcnJfZnJlZV9odzsKKwl9CisKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShBUjU0MTZfQVI5MTAwX0RFVklELCBzYywgMHgwLCAmYXRoX2FoYl9idXNfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2lycTsKIAl9CiAKIAlhaCA9IHNjLT5zY19haDsKQEAgLTE0Myw4ICsxMzgsOCBAQAogCiAJcmV0dXJuIDA7CiAKLSBlcnJfZGV0YWNoOgotCWF0aF9kZXRhY2goc2MpOworIGVycl9pcnE6CisJZnJlZV9pcnEoaXJxLCBzYyk7CiAgZXJyX2ZyZWVfaHc6CiAJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMTYxLDggKzE1NiwxMiBAQAogCWlmIChodykgewogCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJCXZvaWQgX19pb21lbSAqbWVtID0gc2MtPm1lbTsKIAotCQlhdGhfY2xlYW51cChzYyk7CisJCWF0aDlrX2RlaW5pdF9kZXZpY2Uoc2MpOworCQlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KHNjLT5odyk7CisJCWlvdW5tYXAobWVtKTsKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDE1OTdhNDIuLjgzYzdlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC0yNjcsNiArMjY3LDcgQEAKIAkJICAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKIHZvaWQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CiB2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9wcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiAKIC8qKioqKioqKi8KIC8qIFZJRnMgKi8KQEAgLTM0MSw2ICszNDIsMTIgQEAKICNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgICAzMDAwMCAgIC8qIDMwIHNlY29uZHMgKi8KICNkZWZpbmUgQVRIX1JFU1RBUlRfQ0FMSU5URVJWQUwgICAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgKi8KIAordm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOworCisvKioqKioqKioqKi8KKy8qIEJUQ09FWCAqLworLyoqKioqKioqKiovCisKIC8qIERlZmluZXMgdGhlIEJUIEFSX0JUX0NPRVhfV0dIVCB1c2VkICovCiBlbnVtIGF0aF9zdG9tcF90eXBlIHsKIAlBVEhfQlRDT0VYX05PX1NUT01QLApAQCAtMzU4LDkgKzM2NSwxNCBAQAogCWludCBidF9zdG9tcF90eXBlOyAvKiBUeXBlcyBvZiBCVCBzdG9tcGluZyAqLwogCXUzMiBidGNvZXhfbm9fc3RvbXA7IC8qIGluIHVzZWMgKi8KIAl1MzIgYnRjb2V4X3BlcmlvZDsgLyogaW4gdXNlYyAqLworCXUzMiBidHNjYW5fbm9fc3RvbXA7IC8qIGluIHVzZWMgKi8KIAlzdHJ1Y3QgYXRoX2dlbl90aW1lciAqbm9fc3RvbXBfdGltZXI7IC8qIFRpbWVyIGZvciBubyBCVCBzdG9tcGluZyAqLwogfTsKIAoraW50IGF0aF9pbml0X2J0Y29leF90aW1lcihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19idGNvZXhfdGltZXJfcGF1c2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiAgIExFRCBDb250cm9sICAgICovCiAvKioqKioqKioqKioqKioqKioqKiovCkBAIC0zODUsNiArMzk3LDkgQEAKIAlib29sIHJlZ2lzdGVyZWQ7CiB9OwogCit2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiBNYWluIGRyaXZlciBjb3JlICovCiAvKioqKioqKioqKioqKioqKioqKiovCkBAIC00MDMsMjYgKzQxOCwyOSBAQAogI2RlZmluZSBBVEhfVFhQT1dFUl9NQVggICAgICAgICAxMDAgICAgIC8qIC41IGRCbSB1bml0cyAqLwogI2RlZmluZSBBVEhfUkFURV9EVU1NWV9NQVJLRVIgICAwCiAKLSNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IgICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgQklUKDMpCi0jZGVmaW5lIFNDX09QX0ZVTExfUkVTRVQgICAgICAgIEJJVCg0KQotI2RlZmluZSBTQ19PUF9QUkVBTUJMRV9TSE9SVCAgICBCSVQoNSkKLSNkZWZpbmUgU0NfT1BfUFJPVEVDVF9FTkFCTEUgICAgQklUKDYpCi0jZGVmaW5lIFNDX09QX1JYRkxVU0ggICAgICAgICAgIEJJVCg3KQotI2RlZmluZSBTQ19PUF9MRURfQVNTT0NJQVRFRCAgICBCSVQoOCkKLSNkZWZpbmUgU0NfT1BfV0FJVF9GT1JfQkVBQ09OICAgQklUKDEyKQotI2RlZmluZSBTQ19PUF9MRURfT04gICAgICAgICAgICBCSVQoMTMpCi0jZGVmaW5lIFNDX09QX1NDQU5OSU5HICAgICAgICAgIEJJVCgxNCkKLSNkZWZpbmUgU0NfT1BfVFNGX1JFU0VUICAgICAgICAgQklUKDE1KQotI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9DQUIgICAgICBCSVQoMTYpCi0jZGVmaW5lIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBIEJJVCgxNykKLSNkZWZpbmUgU0NfT1BfV0FJVF9GT1JfVFhfQUNLICAgQklUKDE4KQotI2RlZmluZSBTQ19PUF9CRUFDT05fU1lOQyAgICAgICBCSVQoMTkpCi0jZGVmaW5lIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIEJJVCgyMSkKLSNkZWZpbmUgU0NfT1BfTlVMTEZVTkNfQ09NUExFVEVEIEJJVCgyMikKLSNkZWZpbmUgU0NfT1BfUFNfRU5BQkxFRAlCSVQoMjMpCisjZGVmaW5lIFNDX09QX0lOVkFMSUQgICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFNDX09QX1JYQUdHUiAgICAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFNDX09QX1RYQUdHUiAgICAgICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFNDX09QX0ZVTExfUkVTRVQgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUICAgICAgICAgQklUKDUpCisjZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFICAgICAgICAgQklUKDYpCisjZGVmaW5lIFNDX09QX1JYRkxVU0ggICAgICAgICAgICAgICAgQklUKDcpCisjZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVEICAgICAgICAgQklUKDgpCisjZGVmaW5lIFNDX09QX0xFRF9PTiAgICAgICAgICAgICAgICAgQklUKDkpCisjZGVmaW5lIFNDX09QX1NDQU5OSU5HICAgICAgICAgICAgICAgQklUKDEwKQorI2RlZmluZSBTQ19PUF9UU0ZfUkVTRVQgICAgICAgICAgICAgIEJJVCgxMSkKKyNkZWZpbmUgU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQgICBCSVQoMTIpCisjZGVmaW5lIFNDX09QX0JUX1NDQU4JCSAgICAgQklUKDEzKQorCisvKiBQb3dlcnNhdmUgZmxhZ3MgKi8KKyNkZWZpbmUgUFNfV0FJVF9GT1JfQkVBQ09OICAgICAgICBCSVQoMCkKKyNkZWZpbmUgUFNfV0FJVF9GT1JfQ0FCICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEgICBCSVQoMikKKyNkZWZpbmUgUFNfV0FJVF9GT1JfVFhfQUNLICAgICAgICBCSVQoMykKKyNkZWZpbmUgUFNfQkVBQ09OX1NZTkMgICAgICAgICAgICBCSVQoNCkKKyNkZWZpbmUgUFNfTlVMTEZVTkNfQ09NUExFVEVEICAgICBCSVQoNSkKKyNkZWZpbmUgUFNfRU5BQkxFRCAgICAgICAgICAgICAgICBCSVQoNikKIAogc3RydWN0IGF0aF93aXBoeTsKIHN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKQEAgLTQ1MywxNiArNDcxLDE3IEBACiAJaW50IGlycTsKIAlzcGlubG9ja190IHNjX3Jlc2V0bG9jazsKIAlzcGlubG9ja190IHNjX3NlcmlhbF9ydzsKLQlzcGlubG9ja190IGFuaV9sb2NrOwogCXNwaW5sb2NrX3Qgc2NfcG1fbG9jazsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAKIAl1MzIgaW50cnN0YXR1czsKIAl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KKwl1MTYgcHNfZmxhZ3M7IC8qIFBTXyogKi8KIAl1MTYgY3VydHhwb3c7CiAJdTggbmJjbnZpZnM7CiAJdTE2IG52aWZzOwogCWJvb2wgcHNfZW5hYmxlZDsKKwlib29sIHBzX2lkbGU7CiAJdW5zaWduZWQgbG9uZyBwc191c2Vjb3VudDsKIAllbnVtIGF0aDlrX2ludCBpbWFzazsKIApAQCAtNTA5LDYgKzUyOCw3IEBACiAJaW50IGNoYW5faXNfaHQ7CiB9OwogCit2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwogaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwpAQCAtNTE5LDIxICs1MzksMTYgQEAKIAljb21tb24tPmJ1c19vcHMtPnJlYWRfY2FjaGVzaXplKGNvbW1vbiwgY3N6KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aF9idXNfY2xlYW51cChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQotewotCWNvbW1vbi0+YnVzX29wcy0+Y2xlYW51cChjb21tb24pOwotfQotCiBleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOworZXh0ZXJuIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7CiAKIGlycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KTsKLXZvaWQgYXRoX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9pbml0X2RldmljZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQsCitpbnQgYXRoOWtfaW5pdF9kZXZpY2UodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHN1YnN5c2lkLAogCQkgICAgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKTsKLXZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX2RlaW5pdF9kZXZpY2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogY29uc3QgY2hhciAqYXRoX21hY19iYl9uYW1lKHUzMiBtYWNfYmJfdmVyc2lvbik7CiBjb25zdCBjaGFyICphdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbik7Ci12b2lkIGF0aF9zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgYXRoOWtfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIGF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwogdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KTsKQEAgLTU0Miw2ICs1NTcsNyBAQAogCiB2b2lkIGF0aF9yYWRpb19lbmFibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgYXRoOWtfc2V0cG93ZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIGludCBhdGhfcGNpX2luaXQodm9pZCk7CkBAIC01ODMsNCArNTk5LDggQEAKIHZvaWQgYXRoX21hYzgwMjExX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc2tiX3F1ZXVlKTsKIAogaW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSk7CisKK3ZvaWQgYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDlrX3Jma2lsbF9wb2xsX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwogI2VuZGlmIC8qIEFUSDlLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYwppbmRleCAxNjYwZWYxLi5iNGEzMWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCkBAIC02Miw3ICs2Miw3IEBACiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCiBzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAotCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCisJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwgaW50IHJhdGVpZHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwpAQCAtOTYsOSArOTYsOSBAQAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCiAJc2JhbmQgPSAmc2MtPnNiYW5kc1tjb21tb24tPmh3LT5jb25mLmNoYW5uZWwtPmJhbmRdOwotCXJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbMF0uaHdfdmFsdWU7CisJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tyYXRlaWR4XS5od192YWx1ZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gc2JhbmQtPmJpdHJhdGVzWzBdLmh3X3ZhbHVlX3Nob3J0OworCQlyYXRlIHw9IHNiYW5kLT5iaXRyYXRlc1tyYXRlaWR4XS5od192YWx1ZV9zaG9ydDsKIAogCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCiAJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLApAQCAtMjA2LDcgKzIwNiw3IEBACiAJCX0KIAl9CiAKLQlhdGhfYmVhY29uX3NldHVwKHNjLCBhdnAsIGJmKTsKKwlhdGhfYmVhY29uX3NldHVwKHNjLCBhdnAsIGJmLCBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCk7CiAKIAl3aGlsZSAoc2tiKSB7CiAJCWF0aF90eF9jYWJxKGh3LCBza2IpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IGJmLT5iZl9tcGR1OwogCi0JYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZik7CisJYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZiwgMCk7CiAKIAkvKiBOQjogY2FsbGVyIGlzIGtub3duIHRvIGhhdmUgYWxyZWFkeSBzdG9wcGVkIHR4IGRtYSAqLwogCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsIGJmLT5iZl9kYWRkcik7CkBAIC00ODAsNyArNDgwLDggQEAKIAkJc2MtPmJlYWNvbi51cGRhdGVzbG90ID0gQ09NTUlUOyAvKiBjb21taXQgbmV4dCBiZWFjb24gKi8KIAkJc2MtPmJlYWNvbi5zbG90dXBkYXRlID0gc2xvdDsKIAl9IGVsc2UgaWYgKHNjLT5iZWFjb24udXBkYXRlc2xvdCA9PSBDT01NSVQgJiYgc2MtPmJlYWNvbi5zbG90dXBkYXRlID09IHNsb3QpIHsKLQkJYXRoOWtfaHdfc2V0c2xvdHRpbWUoc2MtPnNjX2FoLCBzYy0+YmVhY29uLnNsb3R0aW1lKTsKKwkJYWgtPnNsb3R0aW1lID0gc2MtPmJlYWNvbi5zbG90dGltZTsKKwkJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOwogCQlzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPSBPSzsKIAl9CiAJaWYgKGJmYWRkciAhPSAwKSB7CkBAIC01MjUsMTYgKzUyNiwxMyBAQAogewogCXUzMiBuZXh0dGJ0dCwgaW50dmFsOwogCi0JLyogQ29uZmlndXJlIHRoZSB0aW1lcnMgb25seSB3aGVuIHRoZSBUU0YgaGFzIHRvIGJlIHJlc2V0ICovCi0KLQlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UU0ZfUkVTRVQpKQotCQlyZXR1cm47Ci0KIAkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLwogCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CiAJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCiAJbmV4dHRidHQgPSBpbnR2YWw7Ci0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7CisKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFNGX1JFU0VUKQorCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKIAogCS8qCiAJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kIFNXQkEgaW50ZXJydXB0cyB0bwpAQCAtNTc2LDYgKzU3NCwxMyBAQAogCXU2NCB0c2Y7CiAJaW50IG51bV9iZWFjb25zLCBvZmZzZXQsIGR0aW1fZGVjX2NvdW50LCBjZnBfZGVjX2NvdW50OwogCisJLyogTm8gbmVlZCB0byBjb25maWd1cmUgYmVhY29uIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLworCWlmICghY29tbW9uLT5jdXJhaWQpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCQkgIlNUQSBpcyBub3QgeWV0IGFzc29jaWF0ZWQuLnNraXBwaW5nIGJlYWNvbiBjb25maWdcbiIpOworCQlyZXR1cm47CisJfQorCiAJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7CiAJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIApAQCAtNzM4LDcgKzc0Myw2IEBACiAJZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7CiAKIAkvKiBTZXR1cCB0aGUgYmVhY29uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLwotCiAJaWYgKHZpZikgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ2aWYtPmJzc19jb25mOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKaW5kZXggMWJhMzFhNy4uMWVlNWExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaApAQCAtMjUsMTAgKzI1LDEyIEBACiAKICNkZWZpbmUgQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICA0NQogI2RlZmluZSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFIDU1CisjZGVmaW5lIEFUSF9CVENPRVhfQlRTQ0FOX0RVVFlfQ1lDTEUgOTAKICNkZWZpbmUgQVRIX0JUQ09FWF9CTUlTU19USFJFU0ggICA1MAogCiAjZGVmaW5lIEFUSF9CVF9QUklPUklUWV9USU1FX1RIUkVTSE9MRCAxMDAwIC8qIG1zICovCiAjZGVmaW5lIEFUSF9CVF9DTlRfVEhSRVNIT0xECSAgICAgICAzCisjZGVmaW5lIEFUSF9CVF9DTlRfU0NBTl9USFJFU0hPTEQgICAgICAxNQogCiBlbnVtIGF0aF9idGNvZXhfc2NoZW1lIHsKIAlBVEhfQlRDT0VYX0NGR19OT05FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwppbmRleCBiNjZmNzJkLi40MmQyYTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwpAQCAtNzUsMTcgKzc1LDI0IEBACiAKICNlbmRpZgogCisjZGVmaW5lIERNQV9CVUZfTEVOIDEwMjQKKwogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2RtYShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQljaGFyIGJ1ZlsxMDI0XTsKKwljaGFyICpidWY7CisJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAl1MzIgdmFsW0FUSDlLX05VTV9ETUFfREVCVUdfUkVHU107CiAJaW50IGksIHFjdU9mZnNldCA9IDAsIGRjdU9mZnNldCA9IDA7CiAJdTMyICpxY3VCYXNlID0gJnZhbFswXSwgKmRjdUJhc2UgPSAmdmFsWzRdOwogCisJYnVmID0ga21hbGxvYyhETUFfQlVGX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAwOworCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAogCVJFR19XUklURV9EKGFoLCBBUl9NQUNNSVNDLApAQCAtOTMsMjAgKzEwMCwyMCBAQAogCQkgICAoQVJfTUFDTUlTQ19NSVNDX09CU19CVVNfMSA8PAogCQkgICAgQVJfTUFDTUlTQ19NSVNDX09CU19CVVNfTVNCX1MpKSk7CiAKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJCSJSYXcgRE1BIERlYnVnIHZhbHVlczpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9ETUFfREVCVUdfUkVHUzsgaSsrKSB7CiAJCWlmIChpICUgNCA9PSAwKQotCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICJcbiIpOworCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sICJcbiIpOwogCiAJCXZhbFtpXSA9IFJFR19SRUFEX0QoYWgsIEFSX0RNQURCR18wICsgKGkgKiBzaXplb2YodTMyKSkpOwotCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiVkOiAlMDh4ICIsCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLCAiJWQ6ICUwOHggIiwKIAkJCQlpLCB2YWxbaV0pOwogCX0KIAotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiXG5cbiIpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLCAiXG5cbiIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkJIk51bSBRQ1U6IGNoYWluX3N0IGZzcF9vayBmc3Bfc3QgRENVOiBjaGFpbl9zdFxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1FVRVVFUzsgaSsrLCBxY3VPZmZzZXQgKz0gNCwgZGN1T2Zmc2V0ICs9IDUpIHsKQEAgLTEyMCw3ICsxMjcsNyBAQAogCQkJZGN1QmFzZSsrOwogCQl9CiAKLQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkJIiUyZCAgICAgICAgICAlMnggICAgICAlMXggICAgICUyeCAgICAgICAgICAgJTJ4XG4iLAogCQkJaSwgKCpxY3VCYXNlICYgKDB4NyA8PCBxY3VPZmZzZXQpKSA+PiBxY3VPZmZzZXQsCiAJCQkoKnFjdUJhc2UgJiAoMHg4IDw8IHFjdU9mZnNldCkpID4+IChxY3VPZmZzZXQgKyAzKSwKQEAgLTEyOCwzNSArMTM1LDM3IEBACiAJCQkoKmRjdUJhc2UgJiAoMHgxZiA8PCBkY3VPZmZzZXQpKSA+PiBkY3VPZmZzZXQpOwogCX0KIAotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiXG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwgIlxuIik7CiAKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJInFjdV9zdGl0Y2ggc3RhdGU6ICAgJTJ4ICAgIHFjdV9mZXRjaCBzdGF0ZTogICAgICAgICUyeFxuIiwKIAkJKHZhbFszXSAmIDB4MDAzYzAwMDApID4+IDE4LCAodmFsWzNdICYgMHgwM2MwMDAwMCkgPj4gMjIpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkicWN1X2NvbXBsZXRlIHN0YXRlOiAlMnggICAgZGN1X2NvbXBsZXRlIHN0YXRlOiAgICAgJTJ4XG4iLAogCQkodmFsWzNdICYgMHgxYzAwMDAwMCkgPj4gMjYsICh2YWxbNl0gJiAweDMpKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJImRjdV9hcmIgc3RhdGU6ICAgICAgJTJ4ICAgIGRjdV9mcCBzdGF0ZTogICAgICAgICAgICUyeFxuIiwKIAkJKHZhbFs1XSAmIDB4MDYwMDAwMDApID4+IDI1LCAodmFsWzVdICYgMHgzODAwMDAwMCkgPj4gMjcpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkiY2hhbl9pZGxlX2R1cjogICAgICUzZCAgICBjaGFuX2lkbGVfZHVyX3ZhbGlkOiAgICAgJTFkXG4iLAogCQkodmFsWzZdICYgMHgwMDAwMDNmYykgPj4gMiwgKHZhbFs2XSAmIDB4MDAwMDA0MDApID4+IDEwKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJInR4Zmlmb192YWxpZF8wOiAgICAgICUxZCAgICB0eGZpZm9fdmFsaWRfMTogICAgICAgICAgJTFkXG4iLAogCQkodmFsWzZdICYgMHgwMDAwMDgwMCkgPj4gMTEsICh2YWxbNl0gJiAweDAwMDAxMDAwKSA+PiAxMik7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCSJ0eGZpZm9fZGN1X251bV8wOiAgICUyZCAgICB0eGZpZm9fZGN1X251bV8xOiAgICAgICAlMmRcbiIsCiAJCSh2YWxbNl0gJiAweDAwMDFlMDAwKSA+PiAxMywgKHZhbFs2XSAmIDB4MDAxZTAwMDApID4+IDE3KTsKIAotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAicGN1IG9ic2VydmU6IDB4JXggXG4iLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLCAicGN1IG9ic2VydmU6IDB4JXggXG4iLAogCQkJUkVHX1JFQURfRChhaCwgQVJfT0JTX0JVU18xKSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCQkiQVJfQ1I6IDB4JXggXG4iLCBSRUdfUkVBRF9EKGFoLCBBUl9DUikpOwogCiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RtYSA9IHsKQEAgLTI4OSwyMyArMjk4LDQ5IEBACiAJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW1heCA9IDgwICsgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudCAqIDY0OworCW1heCA9IDgwICsgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudCAqIDEwMjQ7CiAJYnVmID0ga21hbGxvYyhtYXggKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAwOwogCWJ1ZlttYXhdID0gMDsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiU1cyAlMTVzICU4cyAlOXMgJTNzXG5cbiIsICJSYXRlIiwgIlN1Y2Nlc3MiLAotCQkgICAgICAgIlJldHJpZXMiLCAiWFJldHJpZXMiLCAiUEVSIik7CisJbGVuICs9IHNwcmludGYoYnVmLCAiJTZzICU2cyAlNnMgIgorCQkgICAgICAgIiUxMHMgJTEwcyAlMTBzICUxMHNcbiIsCisJCSAgICAgICAiSFQiLCAiTUNTIiwgIlJhdGUiLAorCQkgICAgICAgIlN1Y2Nlc3MiLCAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzYy0+Y3VyX3JhdGVfdGFibGUtPnJhdGVfY250OyBpKyspIHsKIAkJdTMyIHJhdGVrYnBzID0gc2MtPmN1cl9yYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVrYnBzOwogCQlzdHJ1Y3QgYXRoX3JjX3N0YXRzICpzdGF0cyA9ICZzYy0+ZGVidWcuc3RhdHMucmNzdGF0c1tpXTsKKwkJY2hhciBtY3NbNV07CisJCWNoYXIgaHRtb2RlWzVdOworCQlpbnQgdXNlZF9tY3MgPSAwLCB1c2VkX2h0bW9kZSA9IDA7CisKKwkJaWYgKFdMQU5fUkNfUEhZX0hUKHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5waHkpKSB7CisJCQl1c2VkX21jcyA9IHNucHJpbnRmKG1jcywgNSwgIiVkIiwKKwkJCQlzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucmF0ZWNvZGUpOworCisJCQlpZiAoV0xBTl9SQ19QSFlfNDAoc2MtPmN1cl9yYXRlX3RhYmxlLT5pbmZvW2ldLnBoeSkpCisJCQkJdXNlZF9odG1vZGUgPSBzbnByaW50ZihodG1vZGUsIDUsICJIVDQwIik7CisJCQllbHNlIGlmIChXTEFOX1JDX1BIWV8yMChzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucGh5KSkKKwkJCQl1c2VkX2h0bW9kZSA9IHNucHJpbnRmKGh0bW9kZSwgNSwgIkhUMjAiKTsKKwkJCWVsc2UKKwkJCQl1c2VkX2h0bW9kZSA9IHNucHJpbnRmKGh0bW9kZSwgNSwgIj8/Pz8iKTsKKwkJfQorCisJCW1jc1t1c2VkX21jc10gPSAnXDAnOworCQlodG1vZGVbdXNlZF9odG1vZGVdID0gJ1wwJzsKIAogCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXggLSBsZW4sCi0JCQkiJTN1LiVkOiAlOHUgJTh1ICU4dSAlOHVcbiIsIHJhdGVrYnBzIC8gMTAwMCwKLQkJCShyYXRla2JwcyAlIDEwMDApIC8gMTAwLCBzdGF0cy0+c3VjY2VzcywKLQkJCXN0YXRzLT5yZXRyaWVzLCBzdGF0cy0+eHJldHJpZXMsCisJCQkiJTZzICU2cyAlM3UuJWQ6ICIKKwkJCSIlMTB1ICUxMHUgJTEwdSAlMTB1XG4iLAorCQkJaHRtb2RlLAorCQkJbWNzLAorCQkJcmF0ZWticHMgLyAxMDAwLAorCQkJKHJhdGVrYnBzICUgMTAwMCkgLyAxMDAsCisJCQlzdGF0cy0+c3VjY2VzcywKKwkJCXN0YXRzLT5yZXRyaWVzLAorCQkJc3RhdHMtPnhyZXRyaWVzLAogCQkJc3RhdHMtPnBlcik7CiAJfQogCkBAIC01NTQsNiArNTg5LDExNiBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFCiB9OwogCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfcmVjdihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisjZGVmaW5lIFBIWV9FUlIocywgcCkgXAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlMThzIDogJTEwdVxuIiwgcywgXAorCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucGh5X2Vycl9zdGF0c1twXSk7CisKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgaW50IGxlbiA9IDAsIHNpemUgPSAxMTUyOworCXNzaXplX3QgcmV0dmFsID0gMDsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJDUkMgRVJSIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLmNyY19lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJERUNSWVBUIENSQyBFUlIiLAorCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMuZGVjcnlwdF9jcmNfZXJyKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTB1XG4iLCAiUEhZIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5waHlfZXJyKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTB1XG4iLCAiTUlDIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5taWNfZXJyKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTB1XG4iLCAiUFJFLURFTElNIENSQyBFUlIiLAorCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucHJlX2RlbGltX2NyY19lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJQT1NULURFTElNIENSQyBFUlIiLAorCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucG9zdF9kZWxpbV9jcmNfZXJyKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTB1XG4iLCAiREVDUllQVCBCVVNZIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5kZWNyeXB0X2J1c3lfZXJyKTsKKworCVBIWV9FUlIoIlVOREVSUlVOIiwgQVRIOUtfUEhZRVJSX1VOREVSUlVOKTsKKwlQSFlfRVJSKCJUSU1JTkciLCBBVEg5S19QSFlFUlJfVElNSU5HKTsKKwlQSFlfRVJSKCJQQVJJVFkiLCBBVEg5S19QSFlFUlJfUEFSSVRZKTsKKwlQSFlfRVJSKCJSQVRFIiwgQVRIOUtfUEhZRVJSX1JBVEUpOworCVBIWV9FUlIoIkxFTkdUSCIsIEFUSDlLX1BIWUVSUl9MRU5HVEgpOworCVBIWV9FUlIoIlJBREFSIiwgQVRIOUtfUEhZRVJSX1JBREFSKTsKKwlQSFlfRVJSKCJTRVJWSUNFIiwgQVRIOUtfUEhZRVJSX1NFUlZJQ0UpOworCVBIWV9FUlIoIlRPUiIsIEFUSDlLX1BIWUVSUl9UT1IpOworCVBIWV9FUlIoIk9GRE0tVElNSU5HIiwgQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HKTsKKwlQSFlfRVJSKCJPRkRNLVNJR05BTC1QQVJJVFkiLCBBVEg5S19QSFlFUlJfT0ZETV9TSUdOQUxfUEFSSVRZKTsKKwlQSFlfRVJSKCJPRkRNLVJBVEUiLCBBVEg5S19QSFlFUlJfT0ZETV9SQVRFX0lMTEVHQUwpOworCVBIWV9FUlIoIk9GRE0tTEVOR1RIIiwgQVRIOUtfUEhZRVJSX09GRE1fTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIk9GRE0tUE9XRVItRFJPUCIsIEFUSDlLX1BIWUVSUl9PRkRNX1BPV0VSX0RST1ApOworCVBIWV9FUlIoIk9GRE0tU0VSVklDRSIsIEFUSDlLX1BIWUVSUl9PRkRNX1NFUlZJQ0UpOworCVBIWV9FUlIoIk9GRE0tUkVTVEFSVCIsIEFUSDlLX1BIWUVSUl9PRkRNX1JFU1RBUlQpOworCVBIWV9FUlIoIkZBTFNFLVJBREFSLUVYVCIsIEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFQpOworCVBIWV9FUlIoIkNDSy1USU1JTkciLCBBVEg5S19QSFlFUlJfQ0NLX1RJTUlORyk7CisJUEhZX0VSUigiQ0NLLUhFQURFUi1DUkMiLCBBVEg5S19QSFlFUlJfQ0NLX0hFQURFUl9DUkMpOworCVBIWV9FUlIoIkNDSy1SQVRFIiwgQVRIOUtfUEhZRVJSX0NDS19SQVRFX0lMTEVHQUwpOworCVBIWV9FUlIoIkNDSy1TRVJWSUNFIiwgQVRIOUtfUEhZRVJSX0NDS19TRVJWSUNFKTsKKwlQSFlfRVJSKCJDQ0stUkVTVEFSVCIsIEFUSDlLX1BIWUVSUl9DQ0tfUkVTVEFSVCk7CisJUEhZX0VSUigiQ0NLLUxFTkdUSCIsIEFUSDlLX1BIWUVSUl9DQ0tfTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIkNDSy1QT1dFUi1EUk9QIiwgQVRIOUtfUEhZRVJSX0NDS19QT1dFUl9EUk9QKTsKKwlQSFlfRVJSKCJIVC1DUkMiLCBBVEg5S19QSFlFUlJfSFRfQ1JDX0VSUk9SKTsKKwlQSFlfRVJSKCJIVC1MRU5HVEgiLCBBVEg5S19QSFlFUlJfSFRfTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIkhULVJBVEUiLCBBVEg5S19QSFlFUlJfSFRfUkFURV9JTExFR0FMKTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworCisjdW5kZWYgUEhZX0VSUgorfQorCit2b2lkIGF0aF9kZWJ1Z19zdGF0X3J4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisjZGVmaW5lIFJYX1NUQVRfSU5DKGMpIHNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLmMrKworI2RlZmluZSBSWF9QSFlfRVJSX0lOQyhjKSBzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5waHlfZXJyX3N0YXRzW2NdKysKKworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKKwl1MzIgcGh5ZXJyOworCisJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfQ1JDKQorCQlSWF9TVEFUX0lOQyhjcmNfZXJyKTsKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9ERUNSWVBUKQorCQlSWF9TVEFUX0lOQyhkZWNyeXB0X2NyY19lcnIpOworCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX01JQykKKwkJUlhfU1RBVF9JTkMobWljX2Vycik7CisJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhfREVMSU1fQ1JDX1BSRSkKKwkJUlhfU1RBVF9JTkMocHJlX2RlbGltX2NyY19lcnIpOworCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYX0RFTElNX0NSQ19QT1NUKQorCQlSWF9TVEFUX0lOQyhwb3N0X2RlbGltX2NyY19lcnIpOworCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSkKKwkJUlhfU1RBVF9JTkMoZGVjcnlwdF9idXN5X2Vycik7CisKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9QSFkpIHsKKwkJUlhfU1RBVF9JTkMocGh5X2Vycik7CisJCXBoeWVyciA9IGRzLT5kc19yeHN0YXQucnNfcGh5ZXJyICYgMHgyNDsKKwkJUlhfUEhZX0VSUl9JTkMocGh5ZXJyKTsKKwl9CisKKyN1bmRlZiBSWF9TVEFUX0lOQworI3VuZGVmIFJYX1BIWV9FUlJfSU5DCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmVjdiA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV9yZWN2LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCiBpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKQEAgLTYwNiw2ICs3NTEsMTMgQEAKIAlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpCiAJCWdvdG8gZXJyOwogCisJc2MtPmRlYnVnLmRlYnVnZnNfcmVjdiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLAorCQkJCQkJICAgICBTX0lSVVNSLAorCQkJCQkJICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgICAgIHNjLCAmZm9wc19yZWN2KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlY3YpCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJYXRoOWtfZXhpdF9kZWJ1ZyhhaCk7CkBAIC02MTcsNiArNzY5LDcgQEAKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGNvbW1vbi0+cHJpdjsKIAorCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlY3YpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaAppbmRleCA1MzY2NjNlLi44Njc4MGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaApAQCAtMTE2LDEwICsxMTYsMzUgQEAKIAl1MzIgZGVsaW1fdW5kZXJydW47CiB9OwogCisvKioKKyAqIHN0cnVjdCBhdGhfcnhfc3RhdHMgLSBSWCBTdGF0aXN0aWNzCisgKiBAY3JjX2VycjogTm8uIG9mIGZyYW1lcyB3aXRoIGluY29ycmVjdCBDUkMgdmFsdWUKKyAqIEBkZWNyeXB0X2NyY19lcnI6IE5vLiBvZiBmcmFtZXMgd2hvc2UgQ1JDIGNoZWNrIGZhaWxlZCBhZnRlcgorCWRlY3J5cHRpb24gcHJvY2VzcyBjb21wbGV0ZWQKKyAqIEBwaHlfZXJyOiBOby4gb2YgZnJhbWVzIHdob3NlIHJlY2VwdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgUEhZCisJZW5jb3VudGVyZWQgYW4gZXJyb3IKKyAqIEBtaWNfZXJyOiBOby4gb2YgZnJhbWVzIHdpdGggaW5jb3JyZWN0IFRLSVAgTUlDIHZlcmlmaWNhdGlvbiBmYWlsdXJlCisgKiBAcHJlX2RlbGltX2NyY19lcnI6IFByZS1GcmFtZSBkZWxpbWl0ZXIgQ1JDIGVycm9yIGRldGVjdGlvbnMKKyAqIEBwb3N0X2RlbGltX2NyY19lcnI6IFBvc3QtRnJhbWUgZGVsaW1pdGVyIENSQyBlcnJvciBkZXRlY3Rpb25zCisgKiBAZGVjcnlwdF9idXN5X2VycjogRGVjcnlwdGlvbiBpbnRlcnJ1cHRpb25zIGNvdW50ZXIKKyAqIEBwaHlfZXJyX3N0YXRzOiBJbmRpdmlkdWFsIFBIWSBlcnJvciBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBhdGhfcnhfc3RhdHMgeworCXUzMiBjcmNfZXJyOworCXUzMiBkZWNyeXB0X2NyY19lcnI7CisJdTMyIHBoeV9lcnI7CisJdTMyIG1pY19lcnI7CisJdTMyIHByZV9kZWxpbV9jcmNfZXJyOworCXUzMiBwb3N0X2RlbGltX2NyY19lcnI7CisJdTMyIGRlY3J5cHRfYnVzeV9lcnI7CisJdTMyIHBoeV9lcnJfc3RhdHNbQVRIOUtfUEhZRVJSX01BWF07Cit9OworCiBzdHJ1Y3QgYXRoX3N0YXRzIHsKIAlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7CiAJc3RydWN0IGF0aF9yY19zdGF0cyByY3N0YXRzW1JBVEVfVEFCTEVfU0laRV07CiAJc3RydWN0IGF0aF90eF9zdGF0cyB0eHN0YXRzW0FUSDlLX05VTV9UWF9RVUVVRVNdOworCXN0cnVjdCBhdGhfcnhfc3RhdHMgcnhzdGF0czsKIH07CiAKIHN0cnVjdCBhdGg5a19kZWJ1ZyB7CkBAIC0xMzAsNiArMTU1LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfeG1pdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3JlY3Y7CiAJc3RydWN0IGF0aF9zdGF0cyBzdGF0czsKIH07CiAKQEAgLTE0Miw2ICsxNjgsNyBAQAogdm9pZCBhdGhfZGVidWdfc3RhdF9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGZpbmFsX3JhdGUpOwogdm9pZCBhdGhfZGVidWdfc3RhdF90eChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKIAkJICAgICAgIHN0cnVjdCBhdGhfYnVmICpiZik7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X3J4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAogCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CiAKQEAgLTE4MSw2ICsyMDgsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3J4KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmKQoreworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKIAkJCQkJICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWFiOGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYwpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisKKwlpZiAoKHNjLT5sZWRfb25fZHVyYXRpb24gPT0gQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFKSB8fAorCSAgICAoc2MtPmxlZF9vZmZfZHVyYXRpb24gPT0gQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSkpCisJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAwKTsKKwllbHNlCisJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAorCQkJCSAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPyAxIDogMCk7CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLAorCQkJCSAgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPworCQkJCQltc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb2ZmX2R1cmF0aW9uKSA6CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOworCisJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgorCQkJQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb2ZmX2R1cmF0aW9uID0gc2MtPmxlZF9vZmZfY250ID8KKwkJCW1heCgoQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb2ZmX2NudCksIDEwKSA6CisJCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IGF0aF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGF0aF9sZWQsIGxlZF9jZGV2KTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGxlZC0+c2M7CisKKwlzd2l0Y2ggKGJyaWdodG5lc3MpIHsKKwljYXNlIExFRF9PRkY6CisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MgfHwKKwkJICAgIGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgeworCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCisJCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykpOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKKwkJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pCisJCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfT047CisJCX0gZWxzZSB7CisJCQlzYy0+bGVkX29mZl9jbnQrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIExFRF9GVUxMOgorCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DKSB7CisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfTEVEX0FTU09DSUFURUQ7CisJCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkJCSAgICAgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIDApOworCQl9IGVsc2UgaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgeworCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGF0aF9yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbGVkICpsZWQsCisJCQkgICAgY2hhciAqdHJpZ2dlcikKK3sKKwlpbnQgcmV0OworCisJbGVkLT5zYyA9IHNjOworCWxlZC0+bGVkX2NkZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfY2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aF9sZWRfYnJpZ2h0bmVzczsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoc2MtPmh3LT53aXBoeSksICZsZWQtPmxlZF9jZGV2KTsKKwlpZiAocmV0KQorCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfRkFUQUwsCisJCQkgICJGYWlsZWQgdG8gcmVnaXN0ZXIgbGVkOiVzIiwgbGVkLT5uYW1lKTsKKwllbHNlCisJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGhfbGVkICpsZWQpCit7CisJaWYgKGxlZC0+cmVnaXN0ZXJlZCkgeworCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfY2Rldik7CisJCWxlZC0+cmVnaXN0ZXJlZCA9IDA7CisJfQorfQorCit2b2lkIGF0aF9kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CisJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKKwlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOworCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJhZGlvX2xlZCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOworfQorCit2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJY2hhciAqdHJpZ2dlcjsKKwlpbnQgcmV0OworCisJaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQorCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OworCWVsc2UKKwkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOworCisJLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKwkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOworCisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIGF0aF9sZWRfYmxpbmtfd29yayk7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzYy0+aHcpOworCXNucHJpbnRmKHNjLT5yYWRpb19sZWQubmFtZSwgc2l6ZW9mKHNjLT5yYWRpb19sZWQubmFtZSksCisJCSJhdGg5ay0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJhZGlvX2xlZCwgdHJpZ2dlcik7CisJc2MtPnJhZGlvX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUkFESU87CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoc2MtPmh3KTsKKwlzbnByaW50ZihzYy0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihzYy0+YXNzb2NfbGVkLm5hbWUpLAorCQkiYXRoOWstJXM6OmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5hc3NvY19sZWQsIHRyaWdnZXIpOworCXNjLT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHNjLT5odyk7CisJc25wcmludGYoc2MtPnR4X2xlZC5uYW1lLCBzaXplb2Yoc2MtPnR4X2xlZC5uYW1lKSwKKwkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCB0cmlnZ2VyKTsKKwlzYy0+dHhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9UWDsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShzYy0+aHcpOworCXNucHJpbnRmKHNjLT5yeF9sZWQubmFtZSwgc2l6ZW9mKHNjLT5yeF9sZWQubmFtZSksCisJCSJhdGg5ay0lczo6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgdHJpZ2dlcik7CisJc2MtPnJ4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUlg7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuOworCitmYWlsOgorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPmF0aF9sZWRfYmxpbmtfd29yayk7CisJYXRoX2RlaW5pdF9sZWRzKHNjKTsKK30KKworLyoqKioqKioqKioqKioqKioqKiovCisvKglSZmtpbGwJICAgKi8KKy8qKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYm9vbCBhdGhfaXNfcmZraWxsX3NldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPnJma2lsbF9ncGlvKSA9PQorCQkJCSAgYWgtPnJma2lsbF9wb2xhcml0eTsKK30KKwordm9pZCBhdGg5a19yZmtpbGxfcG9sbF9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlib29sIGJsb2NrZWQgPSAhIWF0aF9pc19yZmtpbGxfc2V0KHNjKTsKKworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoaHctPndpcGh5LCBibG9ja2VkKTsKK30KKwordm9pZCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisKKwlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJd2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmcoc2MtPmh3LT53aXBoeSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKiovCisvKiAgICAgQlRDT0VYICAgICAqLworLyoqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERldGVjdHMgaWYgdGhlcmUgaXMgYW55IHByaW9yaXR5IGJ0IHRyYWZmaWMKKyAqLworc3RhdGljIHZvaWQgYXRoX2RldGVjdF9idF9wcmlvcml0eShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisKKwlpZiAoYXRoOWtfaHdfZ3Bpb19nZXQoc2MtPnNjX2FoLCBhaC0+YnRjb2V4X2h3LmJ0cHJpb3JpdHlfZ3BpbykpCisJCWJ0Y29leC0+YnRfcHJpb3JpdHlfY250Kys7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBidGNvZXgtPmJ0X3ByaW9yaXR5X3RpbWUgKworCQkJbXNlY3NfdG9famlmZmllcyhBVEhfQlRfUFJJT1JJVFlfVElNRV9USFJFU0hPTEQpKSkgeworCQlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRCB8IFNDX09QX0JUX1NDQU4pOworCQkvKiBEZXRlY3QgaWYgY29sb2NhdGVkIGJ0IHN0YXJ0ZWQgc2Nhbm5pbmcgKi8KKwkJaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfU0NBTl9USFJFU0hPTEQpIHsKKwkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19CVENPRVgsCisJCQkJICAiQlQgc2NhbiBkZXRlY3RlZCIpOworCQkJc2MtPnNjX2ZsYWdzIHw9IChTQ19PUF9CVF9TQ0FOIHwKKwkJCQkJIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEKTsKKwkJfSBlbHNlIGlmIChidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA+PSBBVEhfQlRfQ05UX1RIUkVTSE9MRCkgeworCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCQkgICJCVCBwcmlvcml0eSB0cmFmZmljIGRldGVjdGVkIik7CisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQ7CisJCX0KKworCQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7CisJCWJ0Y29leC0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJfQorfQorCisvKgorICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgZW51bSBhdGhfc3RvbXBfdHlwZSBzdG9tcF90eXBlKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJc3dpdGNoIChzdG9tcF90eXBlKSB7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkJICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6CisJCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCisJCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOworCQlicmVhazsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkJICAgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCisJCQkgICJJbnZhbGlkIFN0b21wdHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCWF0aDlrX2h3X2J0Y29leF9lbmFibGUoYWgpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCisJCQkJICB1MzIgdGltZXJfbmV4dCwKKwkJCQkgIHUzMiB0aW1lcl9wZXJpb2QpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisKKwlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0aW1lcl9uZXh0LCB0aW1lcl9wZXJpb2QpOworCisJaWYgKChzYy0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dFTlRJTUVSOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdG9wKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOworCisJYXRoOWtfaHdfZ2VuX3RpbWVyX3N0b3AoYWgsIHRpbWVyKTsKKworCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCisJaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7CisJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwkJc2MtPmltYXNrICY9IH5BVEg5S19JTlRfR0VOVElNRVI7CisJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1hc3RlciBidCBjb2V4IHRpbWVyIHdoaWNoIHJ1bnMgZm9yIGV2ZXJ5CisgKiA0NW1zLCBidCB0cmFmZmljIHdpbGwgYmUgZ2l2ZW4gcHJpb3JpdHkgZHVyaW5nIDU1JSBvZiB0aGlzCisgKiBwZXJpb2Qgd2hpbGUgd2xhbiBnZXRzIHJlbWFpbmluZyA0NSUKKyAqLworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgZGF0YTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7CisJdTMyIHRpbWVyX3BlcmlvZDsKKwlib29sIGlzX2J0c2NhbjsKKworCWF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc2MpOworCisJaXNfYnRzY2FuID0gc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRfU0NBTjsKKworCXNwaW5fbG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7CisKKwlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIGlzX2J0c2NhbiA/IEFUSF9CVENPRVhfU1RPTVBfQUxMIDoKKwkJCSAgICAgIGJ0Y29leC0+YnRfc3RvbXBfdHlwZSk7CisKKwlzcGluX3VubG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7CisKKwlpZiAoYnRjb2V4LT5idGNvZXhfcGVyaW9kICE9IGJ0Y29leC0+YnRjb2V4X25vX3N0b21wKSB7CisJCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCisJCQlhdGg5a19nZW5fdGltZXJfc3RvcChhaCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7CisKKwkJdGltZXJfcGVyaW9kID0gaXNfYnRzY2FuID8gYnRjb2V4LT5idHNjYW5fbm9fc3RvbXAgOgorCQkJCQkgICBidGNvZXgtPmJ0Y29leF9ub19zdG9tcDsKKwkJYXRoOWtfZ2VuX3RpbWVyX3N0YXJ0KGFoLAorCQkJCSAgICAgIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsCisJCQkJICAgICAgKGF0aDlrX2h3X2dldHRzZjMyKGFoKSArCisJCQkJICAgICAgIHRpbWVyX3BlcmlvZCksIHRpbWVyX3BlcmlvZCAqIDEwKTsKKwkJYnRjb2V4LT5od190aW1lcl9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwltb2RfdGltZXIoJmJ0Y29leC0+cGVyaW9kX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EKSk7Cit9CisKKy8qCisgKiBHZW5lcmljIHRzZiBiYXNlZCBodyB0aW1lciB3aGljaCBjb25maWd1cmVzIHdlaWdodAorICogcmVnaXN0ZXJzIHRvIHRpbWUgc2xpY2UgYmV0d2VlbiB3bGFuIGFuZCBidCB0cmFmZmljCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilhcmc7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OworCWJvb2wgaXNfYnRzY2FuID0gc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRfU0NBTjsKKworCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJICAibm8gc3RvbXAgdGltZXIgcnVubmluZyBcbiIpOworCisJc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKKworCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cgfHwgaXNfYnRzY2FuKQorCQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIEFUSF9CVENPRVhfU1RPTVBfTk9ORSk7CisJIGVsc2UgaWYgKGJ0Y29leC0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0FMTCkKKwkJYXRoOWtfYnRjb2V4X2J0X3N0b21wKHNjLCBBVEhfQlRDT0VYX1NUT01QX0xPVyk7CisKKwlzcGluX3VubG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7Cit9CisKK2ludCBhdGhfaW5pdF9idGNvZXhfdGltZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OworCisJYnRjb2V4LT5idGNvZXhfcGVyaW9kID0gQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICogMTAwMDsKKwlidGNvZXgtPmJ0Y29leF9ub19zdG9tcCA9ICgxMDAgLSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFKSAqCisJCWJ0Y29leC0+YnRjb2V4X3BlcmlvZCAvIDEwMDsKKwlidGNvZXgtPmJ0c2Nhbl9ub19zdG9tcCA9ICgxMDAgLSBBVEhfQlRDT0VYX0JUU0NBTl9EVVRZX0NZQ0xFKSAqCisJCQkJICAgYnRjb2V4LT5idGNvZXhfcGVyaW9kIC8gMTAwOworCisJc2V0dXBfdGltZXIoJmJ0Y29leC0+cGVyaW9kX3RpbWVyLCBhdGhfYnRjb2V4X3BlcmlvZF90aW1lciwKKwkJCSh1bnNpZ25lZCBsb25nKSBzYyk7CisKKwlzcGluX2xvY2tfaW5pdCgmYnRjb2V4LT5idGNvZXhfbG9jayk7CisKKwlidGNvZXgtPm5vX3N0b21wX3RpbWVyID0gYXRoX2dlbl90aW1lcl9hbGxvYyhzYy0+c2NfYWgsCisJCQlhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyLAorCQkJYXRoX2J0Y29leF9ub19zdG9tcF90aW1lciwKKwkJCSh2b2lkICopIHNjLCBBUl9GSVJTVF9ORFBfVElNRVIpOworCisJaWYgKCFidGNvZXgtPm5vX3N0b21wX3RpbWVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCisvKgorICogKFJlKXN0YXJ0IGJ0Y29leCB0aW1lcnMKKyAqLwordm9pZCBhdGg5a19idGNvZXhfdGltZXJfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJICAiU3RhcnRpbmcgYnRjb2V4IHRpbWVycyIpOworCisJLyogbWFrZSBzdXJlIGR1dHkgY3ljbGUgdGltZXIgaXMgYWxzbyBzdG9wcGVkIHdoZW4gcmVzdW1pbmcgKi8KKwlpZiAoYnRjb2V4LT5od190aW1lcl9lbmFibGVkKQorCQlhdGg5a19nZW5fdGltZXJfc3RvcChzYy0+c2NfYWgsIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIpOworCisJYnRjb2V4LT5idF9wcmlvcml0eV9jbnQgPSAwOworCWJ0Y29leC0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJc2MtPnNjX2ZsYWdzICY9IH4oU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQgfCBTQ19PUF9CVF9TQ0FOKTsKKworCW1vZF90aW1lcigmYnRjb2V4LT5wZXJpb2RfdGltZXIsIGppZmZpZXMpOworfQorCisKKy8qCisgKiBQYXVzZSBidGNvZXggdGltZXIgYW5kIGJ0IGR1dHkgY3ljbGUgdGltZXIKKyAqLwordm9pZCBhdGg5a19idGNvZXhfdGltZXJfcGF1c2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJZGVsX3RpbWVyX3N5bmMoJmJ0Y29leC0+cGVyaW9kX3RpbWVyKTsKKworCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCisJCWF0aDlrX2dlbl90aW1lcl9zdG9wKGFoLCBidGNvZXgtPm5vX3N0b21wX3RpbWVyKTsKKworCWJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCBhZTM3MTQ0OC4uMmU3NjdjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC01MiwyOCArNTIsNiBAQAogLyogSGVscGVyIEZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7Ci0KLQlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLwotCQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfQ0NLOwotCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07Ci0KLQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNOwotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7Ci0KLQlpZiAoY29uZl9pc19odDQwKGNvbmYpKQotCQlyZXR1cm4gYXRoOWtfaHdfbWFjX3VzZWMoYWgsIGNsa3MpIC8gMjsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19tYWNfdXNlYyhhaCwgY2xrcyk7Ci19Ci0KIHN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7CkBAIC0zNDMsMzAgKzMyMSw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICphdGg5a19od19kZXZuYW1lKHUxNiBkZXZpZCkKLXsKLQlzd2l0Y2ggKGRldmlkKSB7Ci0JY2FzZSBBUjU0MTZfREVWSURfUENJOgotCQlyZXR1cm4gIkF0aGVyb3MgNTQxNiI7Ci0JY2FzZSBBUjU0MTZfREVWSURfUENJRToKLQkJcmV0dXJuICJBdGhlcm9zIDU0MTgiOwotCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKLQkJcmV0dXJuICJBdGhlcm9zIDkxNjAiOwotCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKLQkJcmV0dXJuICJBdGhlcm9zIDkxMDAiOwotCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKLQljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgotCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7Ci0JY2FzZSBBUjkyODVfREVWSURfUENJRToKLQkJcmV0dXJuICJBdGhlcm9zIDkyODUiOwotCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6Ci0JY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6Ci0JCXJldHVybiAiQXRoZXJvcyA5Mjg3IjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CkBAIC0zODAsNyArMzM0LDYgQEAKIAlhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxID0gMDsKIAlhaC0+Y29uZmlnLnBjaWVfd2FlbiA9IDA7CiAJYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOwotCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMTsKIAlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7CiAJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKIAlhaC0+Y29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7CkBAIC0zOTIsNyArMzQ1LDEyIEBACiAJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKIAl9CiAKLQlhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiA9IHRydWU7CisJaWYgKGFoLT5od192ZXJzaW9uLmRldmlkICE9IEFSMjQyN19ERVZJRF9QQ0lFKQorCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDE7CisJZWxzZQorCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CisKKwlhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbiA9IHRydWU7CiAKIAkvKgogCSAqIFdlIG5lZWQgdGhpcyBmb3IgUENJIGRldmljZXMgb25seSAoQ2FyZGJ1cywgUENJLCBtaW5pUENJKQpAQCAtNDM3LDggKzM5NSw2IEBACiAJYWgtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKIAlhaC0+ZW5hYmxlXzMya0h6X2Nsb2NrID0gRE9OVF9VU0VfMzJLSFo7CiAJYWgtPnNsb3R0aW1lID0gKHUzMikgLTE7Ci0JYWgtPmFja3RpbWVvdXQgPSAodTMyKSAtMTsKLQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwogCWFoLT5nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKIAlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIH0KQEAgLTU5MCw2ICs1NDYsNyBAQAogCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CiAJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CiAJY2FzZSBBUjkyNzFfVVNCOgorCWNhc2UgQVIyNDI3X0RFVklEX1BDSUU6CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTE4Myw3ICsxMTQwLDcgQEAKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKLQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pCisJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKQogCQlhaC0+bWFza19yZWcgfD0gQVJfSU1SX1JYSU5UTSB8IEFSX0lNUl9SWE1JTlRSOwogCWVsc2UKIAkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWE9LOwpAQCAtMTIwMywzNCArMTE2MCwyNSBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQogewotCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9BQ0spKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBhY2sgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCi0JCQkgICAgICBBUl9USU1FX09VVF9BQ0ssIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaC0+YWNrdGltZW91dCA9IHVzOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgMHhGRkZGKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TTE9ULCB2YWwpOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9hY2tfdGltZW91dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQogewotCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9DVFMpKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBjdHMgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCi0JCQkgICAgICBBUl9USU1FX09VVF9DVFMsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaC0+Y3RzdGltZW91dCA9IHVzOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgTVMoMHhGRkZGRkZGRiwgQVJfVElNRV9PVVRfQUNLKSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0FDSywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCit7CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgTVMoMHhGRkZGRkZGRiwgQVJfVElNRV9PVVRfQ1RTKSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0NUUywgdmFsKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0dSkKQEAgLTEyNDcsMzEgKzExOTUsNDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmF0aDlrX2h3X2NvbW1vbihhaCktPmh3LT5jb25mOworCWludCBhY2t0aW1lb3V0OworCWludCBzbG90dGltZTsKKwlpbnQgc2lmc3RpbWU7CisKIAlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwgImFoLT5taXNjX21vZGUgMHgleFxuIiwKIAkJICBhaC0+bWlzY19tb2RlKTsKIAogCWlmIChhaC0+bWlzY19tb2RlICE9IDApCiAJCVJFR19XUklURShhaCwgQVJfUENVX01JU0MsCiAJCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaC0+bWlzY19tb2RlKTsKLQlpZiAoYWgtPnNsb3R0aW1lICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWgtPnNsb3R0aW1lKTsKLQlpZiAoYWgtPmFja3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWgtPmFja3RpbWVvdXQpOwotCWlmIChhaC0+Y3RzdGltZW91dCAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhaC0+Y3RzdGltZW91dCk7CisKKwlpZiAoY29uZi0+Y2hhbm5lbCAmJiBjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXNpZnN0aW1lID0gMTY7CisJZWxzZQorCQlzaWZzdGltZSA9IDEwOworCisJLyogQXMgZGVmaW5lZCBieSBJRUVFIDgwMi4xMS0yMDA3IDE3LjMuOC42ICovCisJc2xvdHRpbWUgPSBhaC0+c2xvdHRpbWUgKyAzICogYWgtPmNvdmVyYWdlX2NsYXNzOworCWFja3RpbWVvdXQgPSBzbG90dGltZSArIHNpZnN0aW1lOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBlYXJseSBBQ0sgdGltZW91dHMsIGFkZCBhbiBvZmZzZXQgdG8gbWF0Y2ggdGhlCisJICogaW5pdHZhbCdzIDY0dXMgYWNrIHRpbWVvdXQgdmFsdWUuCisJICogVGhpcyB3YXMgaW5pdGlhbGx5IG9ubHkgbWVhbnQgdG8gd29yayBhcm91bmQgYW4gaXNzdWUgd2l0aCBkZWxheWVkCisJICogQkEgZnJhbWVzIGluIHNvbWUgaW1wbGVtZW50YXRpb25zLCBidXQgaXQgaGFzIGJlZW4gZm91bmQgdG8gZml4IEFDSworCSAqIHRpbWVvdXQgaXNzdWVzIGluIG90aGVyIGNhc2VzIGFzIHdlbGwuCisJICovCisJaWYgKGNvbmYtPmNoYW5uZWwgJiYgY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlhY2t0aW1lb3V0ICs9IDY0IC0gc2lmc3RpbWUgLSBhaC0+c2xvdHRpbWU7CisKKwlhdGg5a19od19zZXRzbG90dGltZShhaCwgc2xvdHRpbWUpOworCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWNrdGltZW91dCk7CisJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhY2t0aW1lb3V0KTsKIAlpZiAoYWgtPmdsb2JhbHR4dGltZW91dCAhPSAodTMyKSAtMSkKIAkJYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoYWgsIGFoLT5nbG9iYWx0eHRpbWVvdXQpOwogfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyk7CiAKLWNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKQotewotCXJldHVybiB2ZW5kb3JpZCA9PSBBVEhFUk9TX1ZFTkRPUl9JRCA/Ci0JCWF0aDlrX2h3X2Rldm5hbWUoZGV2aWQpIDogTlVMTDsKLX0KLQotdm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCit2b2lkIGF0aDlrX2h3X2RlaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIApAQCAtMTI4OSw3ICsxMjU0LDcgQEAKIAlrZnJlZShhaCk7CiAJYWggPSBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19kZXRhY2gpOworRVhQT1JUX1NZTUJPTChhdGg5a19od19kZWluaXQpOwogCiAvKioqKioqKi8KIC8qIElOSSAqLwpAQCAtMTM0NSw2ICsxMzEwLDE2IEBACiAJICogTmVjZXNzYXJ5IHRvIGF2b2lkIGlzc3VlcyBvbiBBUjU0MTYgMi4wCiAJICovCiAJUkVHX1dSSVRFKGFoLCAweDk4MDAgKyAoNjUxIDw8IDIpLCAweDExKTsKKworCS8qCisJICogRGlzYWJsZSBSSUZTIHNlYXJjaCBvbiBzb21lIGNoaXBzIHRvIGF2b2lkIGJhc2ViYW5kCisJICogaGFuZyBpc3N1ZXMuCisJICovCisJaWYgKEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MTYwKGFoKSkgeworCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMpOworCQl2YWwgJj0gfkFSX1BIWV9SSUZTX0lOSVRfREVMQVk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMsIHZhbCk7CisJfQogfQogCiBzdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0yMDkwLDcgKzIwNjUsNyBAQAogCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKIAotCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CisJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOwogCiAJaWYgKEFSX1NSRVZfOTI4N18xMl9PUl9MQVRFUihhaCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9EX0dCTF9JRlNfU0lGUywKQEAgLTIxMjAsNyArMjA5NSw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX09CUywgOCk7CiAKLQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24pIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9MQVNULCA1MDApOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9SSU1ULCBBUl9SSU1UX0ZJUlNULCAyMDAwKTsKIAl9CkBAIC0yNzgwLDcgKzI3NTUsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbikgeworCQlpZiAoYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24pIHsKIAkJCWlmIChpc3IgJiAoQVJfSVNSX1JYTUlOVFIgfCBBUl9JU1JfUlhJTlRNKSkKIAkJCQkqbWFza2VkIHw9IEFUSDlLX0lOVF9SWDsKIAkJfQpAQCAtMjkxMyw3ICsyODg4LDcgQEAKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbikKKwkJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKQogCQkJbWFzayB8PSBBUl9JTVJfUlhNSU5UUiB8IEFSX0lNUl9SWElOVE07CiAJCWVsc2UKIAkJCW1hc2sgfD0gQVJfSU1SX1JYT0sgfCBBUl9JTVJfUlhERVNDOwpAQCAtMzY4NywyMSArMzY2Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2V4dGVuZF90c2YpOwogCi1ib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCi17Ci0JaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWgtPnNsb3R0aW1lID0gKHUzMikgLTE7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TTE9ULCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWgtPnNsb3R0aW1lID0gdXM7Ci0JCXJldHVybiB0cnVlOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfaHdfc2V0c2xvdHRpbWUpOwotCiB2b2lkIGF0aDlrX2h3X3NldDExbm1hYzIwNDAoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmF0aDlrX2h3X2NvbW1vbihhaCktPmh3LT5jb25mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCBlMmIwYzczLi5kYmJmN2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQogI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKICNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCisjZGVmaW5lIEFSMjQyN19ERVZJRF9QQ0lFCTB4MDAyYwogCiAjZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCiAKQEAgLTIxMiw3ICsyMTMsNyBAQAogCXUzMiBjY2tfdHJpZ19sb3c7CiAJdTMyIGVuYWJsZV9hbmk7CiAJaW50IHNlcmlhbGl6ZV9yZWdtb2RlOwotCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWJvb2wgcnhfaW50cl9taXRpZ2F0aW9uOwogI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCiAjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKICNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgpAQCAtNTUxLDEwICs1NTIsOSBAQAogCXUzMiAqYmFuazZUZW1wOwogCiAJaW50MTZfdCB0eHBvd2VyX2luZGV4b2Zmc2V0OworCWludCBjb3ZlcmFnZV9jbGFzczsKIAl1MzIgYmVhY29uX2ludGVydmFsOwogCXUzMiBzbG90dGltZTsKLQl1MzIgYWNrdGltZW91dDsKLQl1MzIgY3RzdGltZW91dDsKIAl1MzIgZ2xvYmFsdHh0aW1lb3V0OwogCiAJLyogQU5JICovCkBAIC02MTYsNyArNjE2LDcgQEAKIAogLyogSW5pdGlhbGl6YXRpb24sIERldGFjaCwgUmVzZXQgKi8KIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKTsKLXZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfZGVpbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhdGg5a19od19pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCSAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpOwpAQCAtNjY4LDcgKzY2OCw3IEBACiB2b2lkIGF0aDlrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKTsKIHU2NCBhdGg5a19od19leHRlbmRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnN0YW1wKTsKLWJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cyk7Cit2b2lkIGF0aDlrX2h3X2luaXRfZ2xvYmFsX3NldHRpbmdzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwogdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjNjMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpAQCAtMCwwICsxLDg2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgY2hhciAqZGV2X2luZm8gPSAiYXRoOWsiOworCitNT0RVTEVfQVVUSE9SKCJBdGhlcm9zIENvbW11bmljYXRpb25zIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBMQU4gY2FyZHMuIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBhdGg5a19kZWJ1ZyA9IEFUSF9EQkdfREVGQVVMVDsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtYXNrIik7CisKK2ludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOworCisvKiBXZSB1c2UgdGhlIGh3X3ZhbHVlIGFzIGFuIGluZGV4IGludG8gb3VyIHByaXZhdGUgY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KKworI2RlZmluZSBDSEFOMkcoX2ZyZXEsIF9pZHgpICB7IFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9pZHgpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxLCBfaWR4KSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9pZHgpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKKy8qIFNvbWUgMiBHSHogcmFkaW9zIGFyZSBhY3R1YWxseSB0dW5hYmxlIG9uIDIzMTItMjczMgorICogb24gNSBNSHogc3RlcHMsIHdlIHN1cHBvcnQgdGhlIGNoYW5uZWxzIHdoaWNoIHdlIGtub3cKKyAqIHdlIGhhdmUgY2FsaWJyYXRpb24gZGF0YSBmb3IgYWxsIGNhcmRzIHRob3VnaCB0byBtYWtlCisgKiB0aGlzIHN0YXRpYyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdGg5a18yZ2h6X2NoYW50YWJsZVtdID0geworCUNIQU4yRygyNDEyLCAwKSwgLyogQ2hhbm5lbCAxICovCisJQ0hBTjJHKDI0MTcsIDEpLCAvKiBDaGFubmVsIDIgKi8KKwlDSEFOMkcoMjQyMiwgMiksIC8qIENoYW5uZWwgMyAqLworCUNIQU4yRygyNDI3LCAzKSwgLyogQ2hhbm5lbCA0ICovCisJQ0hBTjJHKDI0MzIsIDQpLCAvKiBDaGFubmVsIDUgKi8KKwlDSEFOMkcoMjQzNywgNSksIC8qIENoYW5uZWwgNiAqLworCUNIQU4yRygyNDQyLCA2KSwgLyogQ2hhbm5lbCA3ICovCisJQ0hBTjJHKDI0NDcsIDcpLCAvKiBDaGFubmVsIDggKi8KKwlDSEFOMkcoMjQ1MiwgOCksIC8qIENoYW5uZWwgOSAqLworCUNIQU4yRygyNDU3LCA5KSwgLyogQ2hhbm5lbCAxMCAqLworCUNIQU4yRygyNDYyLCAxMCksIC8qIENoYW5uZWwgMTEgKi8KKwlDSEFOMkcoMjQ2NywgMTEpLCAvKiBDaGFubmVsIDEyICovCisJQ0hBTjJHKDI0NzIsIDEyKSwgLyogQ2hhbm5lbCAxMyAqLworCUNIQU4yRygyNDg0LCAxMyksIC8qIENoYW5uZWwgMTQgKi8KK307CisKKy8qIFNvbWUgNSBHSHogcmFkaW9zIGFyZSBhY3R1YWxseSB0dW5hYmxlIG9uIFhYWFgtWVlZWQorICogb24gNSBNSHogc3RlcHMsIHdlIHN1cHBvcnQgdGhlIGNoYW5uZWxzIHdoaWNoIHdlIGtub3cKKyAqIHdlIGhhdmUgY2FsaWJyYXRpb24gZGF0YSBmb3IgYWxsIGNhcmRzIHRob3VnaCB0byBtYWtlCisgKiB0aGlzIHN0YXRpYyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdGg5a181Z2h6X2NoYW50YWJsZVtdID0geworCS8qIF9XZV8gY2FsbCB0aGlzIFVOSUkgMSAqLworCUNIQU41Ryg1MTgwLCAxNCksIC8qIENoYW5uZWwgMzYgKi8KKwlDSEFONUcoNTIwMCwgMTUpLCAvKiBDaGFubmVsIDQwICovCisJQ0hBTjVHKDUyMjAsIDE2KSwgLyogQ2hhbm5lbCA0NCAqLworCUNIQU41Ryg1MjQwLCAxNyksIC8qIENoYW5uZWwgNDggKi8KKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDIgKi8KKwlDSEFONUcoNTI2MCwgMTgpLCAvKiBDaGFubmVsIDUyICovCisJQ0hBTjVHKDUyODAsIDE5KSwgLyogQ2hhbm5lbCA1NiAqLworCUNIQU41Ryg1MzAwLCAyMCksIC8qIENoYW5uZWwgNjAgKi8KKwlDSEFONUcoNTMyMCwgMjEpLCAvKiBDaGFubmVsIDY0ICovCisJLyogX1dlXyBjYWxsIHRoaXMgIk1pZGRsZSBiYW5kIiAqLworCUNIQU41Ryg1NTAwLCAyMiksIC8qIENoYW5uZWwgMTAwICovCisJQ0hBTjVHKDU1MjAsIDIzKSwgLyogQ2hhbm5lbCAxMDQgKi8KKwlDSEFONUcoNTU0MCwgMjQpLCAvKiBDaGFubmVsIDEwOCAqLworCUNIQU41Ryg1NTYwLCAyNSksIC8qIENoYW5uZWwgMTEyICovCisJQ0hBTjVHKDU1ODAsIDI2KSwgLyogQ2hhbm5lbCAxMTYgKi8KKwlDSEFONUcoNTYwMCwgMjcpLCAvKiBDaGFubmVsIDEyMCAqLworCUNIQU41Ryg1NjIwLCAyOCksIC8qIENoYW5uZWwgMTI0ICovCisJQ0hBTjVHKDU2NDAsIDI5KSwgLyogQ2hhbm5lbCAxMjggKi8KKwlDSEFONUcoNTY2MCwgMzApLCAvKiBDaGFubmVsIDEzMiAqLworCUNIQU41Ryg1NjgwLCAzMSksIC8qIENoYW5uZWwgMTM2ICovCisJQ0hBTjVHKDU3MDAsIDMyKSwgLyogQ2hhbm5lbCAxNDAgKi8KKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDMgKi8KKwlDSEFONUcoNTc0NSwgMzMpLCAvKiBDaGFubmVsIDE0OSAqLworCUNIQU41Ryg1NzY1LCAzNCksIC8qIENoYW5uZWwgMTUzICovCisJQ0hBTjVHKDU3ODUsIDM1KSwgLyogQ2hhbm5lbCAxNTcgKi8KKwlDSEFONUcoNTgwNSwgMzYpLCAvKiBDaGFubmVsIDE2MSAqLworCUNIQU41Ryg1ODI1LCAzNyksIC8qIENoYW5uZWwgMTY1ICovCit9OworCisvKiBBdGhlcm9zIGhhcmR3YXJlIHJhdGUgY29kZSBhZGRpdGlvbiBmb3Igc2hvcnQgcHJlbWJsZSAqLworI2RlZmluZSBTSFBDSEVDSyhfX2h3X3JhdGUsIF9fZmxhZ3MpIFwKKwkoKF9fZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkgPyAoX19od19yYXRlIHwgMHgwNCApIDogMCkKKworI2RlZmluZSBSQVRFKF9iaXRyYXRlLCBfaHdfcmF0ZSwgX2ZsYWdzKSB7ICAgICAgICAgICAgICBcCisJLmJpdHJhdGUgICAgICAgID0gKF9iaXRyYXRlKSwgICAgICAgICAgICAgICAgICAgXAorCS5mbGFncyAgICAgICAgICA9IChfZmxhZ3MpLCAgICAgICAgICAgICAgICAgICAgIFwKKwkuaHdfdmFsdWUgICAgICAgPSAoX2h3X3JhdGUpLCAgICAgICAgICAgICAgICAgICBcCisJLmh3X3ZhbHVlX3Nob3J0ID0gKFNIUENIRUNLKF9od19yYXRlLCBfZmxhZ3MpKSAgXAorfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDlrX2xlZ2FjeV9yYXRlc1tdID0geworCVJBVEUoMTAsIDB4MWIsIDApLAorCVJBVEUoMjAsIDB4MWEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFKDU1LCAweDE5LCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSgxMTAsIDB4MTgsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFKDYwLCAweDBiLCAwKSwKKwlSQVRFKDkwLCAweDBmLCAwKSwKKwlSQVRFKDEyMCwgMHgwYSwgMCksCisJUkFURSgxODAsIDB4MGUsIDApLAorCVJBVEUoMjQwLCAweDA5LCAwKSwKKwlSQVRFKDM2MCwgMHgwZCwgMCksCisJUkFURSg0ODAsIDB4MDgsIDApLAorCVJBVEUoNTQwLCAweDBjLCAwKSwKK307CisKK3N0YXRpYyB2b2lkIGF0aDlrX2RlaW5pdF9zb2Z0YyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSwgdGhleSBib3RoIHNoYXJlIHRoZSBzYW1lIGxvY2suIFdlIGRvIHRoaXMgdG8gc2VyaWFsaXplCisgKiByZWFkcyBhbmQgd3JpdGVzIG9uIEF0aGVyb3MgODAyLjExbiBQQ0kgZGV2aWNlcyBvbmx5LiBUaGlzIGlzIHJlcXVpcmVkCisgKiBhcyB0aGUgRklGTyBvbiB0aGVzZSBkZXZpY2VzIGNhbiBvbmx5IGFjY2VwdCBzYW5lbHkgMiByZXF1ZXN0cy4KKyAqLworCitzdGF0aWMgdm9pZCBhdGg5a19pb3dyaXRlMzIodm9pZCAqaHdfcHJpdiwgdTMyIHZhbCwgdTMyIHJlZ19vZmZzZXQpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OworCisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQlpb3dyaXRlMzIodmFsLCBzYy0+bWVtICsgcmVnX29mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIodm9pZCAqaHdfcHJpdiwgdTMyIHJlZ19vZmZzZXQpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OworCXUzMiB2YWw7CisKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwkJdmFsID0gaW9yZWFkMzIoc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9vcHMgYXRoOWtfY29tbW9uX29wcyA9IHsKKwkucmVhZCA9IGF0aDlrX2lvcmVhZDMyLAorCS53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICBJbml0aWFsaXphdGlvbiAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJdTggdHhfc3RyZWFtcywgcnhfc3RyZWFtczsKKworCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IHRydWU7CisJaHRfaW5mby0+Y2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUyB8CisJCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CisJCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKKworCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzg7CisKKwkvKiBzZXQgdXAgc3VwcG9ydGVkIG1jcyBzZXQgKi8KKwltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOworCXR4X3N0cmVhbXMgPSAhKGNvbW1vbi0+dHhfY2hhaW5tYXNrICYgKGNvbW1vbi0+dHhfY2hhaW5tYXNrIC0gMSkpID8KKwkJICAgICAxIDogMjsKKwlyeF9zdHJlYW1zID0gIShjb21tb24tPnJ4X2NoYWlubWFzayAmIChjb21tb24tPnJ4X2NoYWlubWFzayAtIDEpKSA/CisJCSAgICAgMSA6IDI7CisKKwlpZiAodHhfc3RyZWFtcyAhPSByeF9zdHJlYW1zKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJICAiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCisJCQkgIHR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOworCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKKwkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSAoKHR4X3N0cmVhbXMgLSAxKSA8PAorCQkJCUlFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQpOworCX0KKworCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwlpZiAocnhfc3RyZWFtcyA+PSAyKQorCQlodF9pbmZvLT5tY3MucnhfbWFza1sxXSA9IDB4ZmY7CisKKwlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKK30KKworc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gYXRoOWtfaHdfcmVndWxhdG9yeShzYy0+c2NfYWgpOworCisJcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZyk7Cit9CisKKy8qCisgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGJvdGggdGhlIERNQSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYW5kIHRoZQorICogIGJ1ZmZlcnMgaXQgY29udGFpbnMuICBUaGVzZSBhcmUgdXNlZCB0byBjb250YWluIHRoZSBkZXNjcmlwdG9ycyB1c2VkCisgKiAgYnkgdGhlIHN5c3RlbS4KKyovCitpbnQgYXRoX2Rlc2NkbWFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGludCBuYnVmLCBpbnQgbmRlc2MpCit7CisjZGVmaW5lCURTMlBIWVMoX2RkLCBfZHMpCQkJCQkJXAorCSgoX2RkKS0+ZGRfZGVzY19wYWRkciArICgoY2FkZHJfdCkoX2RzKSAtIChjYWRkcl90KShfZGQpLT5kZF9kZXNjKSkKKyNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX0NIRUNLKF9kYWRkcikgKCgoKF9kYWRkcikgJiAweEZGRikgPiAweEY3RikgPyAxIDogMCkKKyNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKF9sZW4pICgoX2xlbikgLyA0MDk2KQorCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlpbnQgaSwgYnNpemUsIGVycm9yOworCisJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCisJCSAgbmFtZSwgbmJ1ZiwgbmRlc2MpOworCisJSU5JVF9MSVNUX0hFQUQoaGVhZCk7CisJLyogYXRoX2Rlc2MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIERXT1JEcyAqLworCWlmICgoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJhdGhfZGVzYyBub3QgRFdPUkQgYWxpZ25lZFxuIik7CisJCUJVR19PTigoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJZGQtPmRkX2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgKiBuYnVmICogbmRlc2M7CisKKwkvKgorCSAqIE5lZWQgYWRkaXRpb25hbCBETUEgbWVtb3J5IGJlY2F1c2Ugd2UgY2FuJ3QgdXNlCisJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCisJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KKwkgKi8KKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwkJdTMyIG5kZXNjX3NraXBwZWQgPQorCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CisJCXUzMiBkbWFfbGVuOworCisJCXdoaWxlIChuZGVzY19za2lwcGVkKSB7CisJCQlkbWFfbGVuID0gbmRlc2Nfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpOworCQkJZGQtPmRkX2Rlc2NfbGVuICs9IGRtYV9sZW47CisKKwkJCW5kZXNjX3NraXBwZWQgPSBBVEhfREVTQ180S0JfQk9VTkRfTlVNX1NLSVBQRUQoZG1hX2xlbik7CisJCX07CisJfQorCisJLyogYWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KKwlkZC0+ZGRfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sCisJCQkJCSAmZGQtPmRkX2Rlc2NfcGFkZHIsIEdGUF9LRVJORUwpOworCWlmIChkZC0+ZGRfZGVzYyA9PSBOVUxMKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlkcyA9IGRkLT5kZF9kZXNjOworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BIG1hcDogJXAgKCV1KSAtPiAlbGx4ICgldSlcbiIsCisJCSAgbmFtZSwgZHMsICh1MzIpIGRkLT5kZF9kZXNjX2xlbiwKKwkJICBpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOworCisJLyogYWxsb2NhdGUgYnVmZmVycyAqLworCWJzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfYnVmKSAqIG5idWY7CisJYmYgPSBremFsbG9jKGJzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmYgPT0gTlVMTCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDI7CisJfQorCWRkLT5kZF9idWZwdHIgPSBiZjsKKworCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyssIGJmKyssIGRzICs9IG5kZXNjKSB7CisJCWJmLT5iZl9kZXNjID0gZHM7CisJCWJmLT5iZl9kYWRkciA9IERTMlBIWVMoZGQsIGRzKTsKKworCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCisJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwkJCS8qCisJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKKwkJCSAqIGJvdW5kYXJ5IGNyb3NzaW5nIChhZGRyICsgbGVuZ3RoKSB3aXRoIGEgMzIgZHdvcmQKKwkJCSAqIGRlc2NyaXB0b3IgZmV0Y2guCisJCQkgKi8KKwkJCXdoaWxlIChBVEhfREVTQ180S0JfQk9VTkRfQ0hFQ0soYmYtPmJmX2RhZGRyKSkgeworCQkJCUJVR19PTigoY2FkZHJfdCkgYmYtPmJmX2Rlc2MgPj0KKwkJCQkgICAgICAgKChjYWRkcl90KSBkZC0+ZGRfZGVzYyArCisJCQkJCWRkLT5kZF9kZXNjX2xlbikpOworCisJCQkJZHMgKz0gbmRlc2M7CisJCQkJYmYtPmJmX2Rlc2MgPSBkczsKKwkJCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CisJCQl9CisJCX0KKwkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsIGhlYWQpOworCX0KKwlyZXR1cm4gMDsKK2ZhaWwyOgorCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKK2ZhaWw6CisJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CisJcmV0dXJuIGVycm9yOworI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9DSEVDSworI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9OVU1fU0tJUFBFRAorI3VuZGVmIERTMlBIWVMKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9jcnlwdG8oc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCWludCBpID0gMDsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCisJY29tbW9uLT5rZXltYXggPSBzYy0+c2NfYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoY29tbW9uLT5rZXltYXggPiBBVEhfS0VZTUFYKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLAorCQkJICAiV2FybmluZywgdXNpbmcgb25seSAldSBlbnRyaWVzIGluICV1IGtleSBjYWNoZVxuIiwKKwkJCSAgQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOworCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7CisJfQorCisJLyoKKwkgKiBSZXNldCB0aGUga2V5IGNhY2hlIHNpbmNlIHNvbWUgcGFydHMgZG8gbm90CisJICogcmVzZXQgdGhlIGNvbnRlbnRzIG9uIGluaXRpYWwgcG93ZXIgdXAuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvbW1vbi0+a2V5bWF4OyBpKyspCisJCWF0aDlrX2h3X2tleXJlc2V0KHNjLT5zY19haCwgKHUxNikgaSk7CisKKwlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9DSVBIRVIsCisJCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpKSB7CisJCS8qCisJCSAqIFdoZXRoZXIgd2Ugc2hvdWxkIGVuYWJsZSBoL3cgVEtJUCBNSUMuCisJCSAqIFhYWDogaWYgd2UgZG9uJ3Qgc3VwcG9ydCBXTUUgVEtJUCBNSUMsIHRoZW4gd2Ugd291bGRuJ3QKKwkJICogcmVwb3J0IFdNTSBjYXBhYmxlLCBzbyBpdCdzIGFsd2F5cyBzYWZlIHRvIHR1cm4gb24KKwkJICogVEtJUCBNSUMgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9US0lQX01JQywgMCwgMSwgTlVMTCk7CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBzZXBhcmF0ZSBrZXkgY2FjaGUgZW50cmllcworCSAqIGFyZSByZXF1aXJlZCB0byBoYW5kbGUgYm90aCB0eCtyeCBNSUMga2V5cy4KKwkgKiBXaXRoIHNwbGl0IG1pYyBrZXlzIHRoZSBudW1iZXIgb2Ygc3RhdGlvbnMgaXMgbGltaXRlZAorCSAqIHRvIDI3IG90aGVyd2lzZSA1OS4KKwkgKi8KKwlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9DSVBIRVIsCisJCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpCisJICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfQ0lQSEVSLAorCQkJCSAgICAgIEFUSDlLX0NJUEhFUl9NSUMsIE5VTEwpCisJICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKKwkJCQkgICAgICAwLCBOVUxMKSkKKwkJY29tbW9uLT5zcGxpdG1pYyA9IDE7CisKKwkvKiB0dXJuIG9uIG1jYXN0IGtleSBzZWFyY2ggaWYgcG9zc2libGUgKi8KKwlpZiAoIWF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMCwgTlVMTCkpCisJCSh2b2lkKWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKKwkJCQkJICAgICAxLCAxLCBOVUxMKTsKKworfQorCitzdGF0aWMgaW50IGF0aDlrX2luaXRfYnRjb2V4KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCByLCBxbnVtOworCisJc3dpdGNoIChzYy0+c2NfYWgtPmJ0Y29leF9ody5zY2hlbWUpIHsKKwljYXNlIEFUSF9CVENPRVhfQ0ZHX05PTkU6CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9DRkdfMldJUkU6CisJCWF0aDlrX2h3X2J0Y29leF9pbml0XzJ3aXJlKHNjLT5zY19haCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9DRkdfM1dJUkU6CisJCWF0aDlrX2h3X2J0Y29leF9pbml0XzN3aXJlKHNjLT5zY19haCk7CisJCXIgPSBhdGhfaW5pdF9idGNvZXhfdGltZXIoc2MpOworCQlpZiAocikKKwkJCXJldHVybiAtMTsKKwkJcW51bSA9IGF0aF90eF9nZXRfcW51bShzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKKwkJYXRoOWtfaHdfaW5pdF9idGNvZXhfaHcoc2MtPnNjX2FoLCBxbnVtKTsKKwkJc2MtPmJ0Y29leC5idF9zdG9tcF90eXBlID0gQVRIX0JUQ09FWF9TVE9NUF9MT1c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDlrX2luaXRfcXVldWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKKwkJc2MtPnR4Lmh3cV9tYXBbaV0gPSAtMTsKKworCXNjLT5iZWFjb24uYmVhY29ucSA9IGF0aDlrX2h3X2JlYWNvbnFfc2V0dXAoc2MtPnNjX2FoKTsKKwlpZiAoc2MtPmJlYWNvbi5iZWFjb25xID09IC0xKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXNjLT5iZWFjb24uY2FicSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0NBQiwgMCk7CisJaWYgKHNjLT5iZWFjb24uY2FicSA9PSBOVUxMKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOworCWF0aF9jYWJxX3VwZGF0ZShzYyk7CisKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JLKSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJLIHRyYWZmaWNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19WSSkpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKKwkJZ290byBlcnI7CisJfQorCWlmICghYXRoX3R4X3NldHVwKHNjLCBBVEg5S19XTUVfQUNfVk8pKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgVk8gdHJhZmZpY1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQorCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIHNjLT5zY19haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpIHsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IGF0aDlrXzJnaHpfY2hhbnRhYmxlOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMgPQorCQkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYml0cmF0ZXMgPSBhdGg5a19sZWdhY3lfcmF0ZXM7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrX2xlZ2FjeV9yYXRlcyk7CisJfQorCisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID0KKwkJCUFSUkFZX1NJWkUoYXRoOWtfNWdoel9jaGFudGFibGUpOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmJpdHJhdGVzID0KKwkJCWF0aDlrX2xlZ2FjeV9yYXRlcyArIDQ7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrX2xlZ2FjeV9yYXRlcykgLSA0OworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9taXNjKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlpbnQgaSA9IDA7CisKKwljb21tb24tPmFuaS5ub2lzZV9mbG9vciA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOworCXNldHVwX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfVFhBR0dSOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUlhBR0dSOworCX0KKworCWNvbW1vbi0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwljb21tb24tPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CisKKwlhdGg5a19od19zZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RJVkVSU0lUWSwgMSwgdHJ1ZSwgTlVMTCk7CisJc2MtPnJ4LmRlZmFudCA9IGF0aDlrX2h3X2dldGRlZmFudGVubmEoc2MtPnNjX2FoKTsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCisJCW1lbWNweShjb21tb24tPmJzc2lkbWFzaywgYXRoX2JjYXN0X21hYywgRVRIX0FMRU4pOworCisJc2MtPmJlYWNvbi5zbG90dGltZSA9IEFUSDlLX1NMT1RfVElNRV85OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaW5pdF9zb2Z0Yyh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOworCWludCByZXQgPSAwLCBpOworCWludCBjc3ogPSAwOworCisJYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhaC0+aHdfdmVyc2lvbi5kZXZpZCA9IGRldmlkOworCWFoLT5od192ZXJzaW9uLnN1YnN5c2lkID0gc3Vic3lzaWQ7CisJc2MtPnNjX2FoID0gYWg7CisKKwljb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWNvbW1vbi0+b3BzID0gJmF0aDlrX2NvbW1vbl9vcHM7CisJY29tbW9uLT5idXNfb3BzID0gYnVzX29wczsKKwljb21tb24tPmFoID0gYWg7CisJY29tbW9uLT5odyA9IHNjLT5odzsKKwljb21tb24tPnByaXYgPSBzYzsKKwljb21tb24tPmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKworCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOworCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOworCW11dGV4X2luaXQoJnNjLT5tdXRleCk7CisJdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKXNjKTsKKworCS8qCisJICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cworCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlhdGhfcmVhZF9jYWNoZXNpemUoY29tbW9uLCAmY3N6KTsKKwljb21tb24tPmNhY2hlbHN6ID0gY3N6IDw8IDI7IC8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKworCXJldCA9IGF0aDlrX2h3X2luaXQoYWgpOworCWlmIChyZXQpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyAiCisJCQkgICJpbml0aWFsaXphdGlvbiBzdGF0dXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9odzsKKwl9CisKKwlyZXQgPSBhdGg5a19pbml0X2RlYnVnKGFoKTsKKwlpZiAocmV0KSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXNcbiIpOworCQlnb3RvIGVycl9kZWJ1ZzsKKwl9CisKKwlyZXQgPSBhdGg5a19pbml0X3F1ZXVlcyhzYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcXVldWVzOworCisJcmV0ID0gIGF0aDlrX2luaXRfYnRjb2V4KHNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9idGNvZXg7CisKKwlhdGg5a19pbml0X2NyeXB0byhzYyk7CisJYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhzYyk7CisJYXRoOWtfaW5pdF9taXNjKHNjKTsKKworCXJldHVybiAwOworCitlcnJfYnRjb2V4OgorCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOworZXJyX3F1ZXVlczoKKwlhdGg5a19leGl0X2RlYnVnKGFoKTsKK2Vycl9kZWJ1ZzoKKwlhdGg5a19od19kZWluaXQoYWgpOworZXJyX2h3OgorCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJjb25fdGFza2xldCk7CisKKwlrZnJlZShhaCk7CisJc2MtPnNjX2FoID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgYXRoOWtfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAorCQlJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTOworCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQkgaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKworCWlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoc2MtPnNjX2FoKSB8fCBtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOworCisJaHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gMTA7CisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9ub2RlKTsKKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX3ZpZik7CisKKwlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJhdGg5a19yYXRlX2NvbnRyb2wiOworCisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIHNjLT5zY19haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCisJCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKKwl9CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKK30KKworaW50IGF0aDlrX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKKwkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOworCXN0cnVjdCBhdGhfaHcgKmFoOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWc7CisKKwkvKiBCcmluZyB1cCBkZXZpY2UgKi8KKwllcnJvciA9IGF0aDlrX2luaXRfc29mdGMoZGV2aWQsIHNjLCBzdWJzeXNpZCwgYnVzX29wcyk7CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZXJyb3JfaW5pdDsKKworCWFoID0gc2MtPnNjX2FoOworCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJYXRoOWtfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKKwkvKiBJbml0aWFsaXplIHJlZ3VsYXRvcnkgKi8KKwllcnJvciA9IGF0aF9yZWdkX2luaXQoJmNvbW1vbi0+cmVndWxhdG9yeSwgc2MtPmh3LT53aXBoeSwKKwkJCSAgICAgIGF0aDlrX3JlZ19ub3RpZmllcik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX3JlZ2Q7CisKKwlyZWcgPSAmY29tbW9uLT5yZWd1bGF0b3J5OworCisJLyogU2V0dXAgVFggRE1BICovCisJZXJyb3IgPSBhdGhfdHhfaW5pdChzYywgQVRIX1RYQlVGKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJZ290byBlcnJvcl90eDsKKworCS8qIFNldHVwIFJYIERNQSAqLworCWVycm9yID0gYXRoX3J4X2luaXQoc2MsIEFUSF9SWEJVRik7CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZXJyb3Jfcng7CisKKwkvKiBSZWdpc3RlciB3aXRoIG1hYzgwMjExICovCisJZXJyb3IgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJvcl9yZWdpc3RlcjsKKworCS8qIEhhbmRsZSB3b3JsZCByZWd1bGF0b3J5ICovCisJaWYgKCFhdGhfaXNfd29ybGRfcmVnZChyZWcpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgcmVnLT5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX3dvcmxkOworCX0KKworCUlOSVRfV09SSygmc2MtPmNoYW5fd29yaywgYXRoOWtfd2lwaHlfY2hhbl93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmc2MtPndpcGh5X3dvcmssIGF0aDlrX3dpcGh5X3dvcmspOworCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyg1MDApOworCisJYXRoX2luaXRfbGVkcyhzYyk7CisJYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKworCXJldHVybiAwOworCitlcnJvcl93b3JsZDoKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7CitlcnJvcl9yZWdpc3RlcjoKKwlhdGhfcnhfY2xlYW51cChzYyk7CitlcnJvcl9yeDoKKwlhdGhfdHhfY2xlYW51cChzYyk7CitlcnJvcl90eDoKKwkvKiBOb3RoaW5nICovCitlcnJvcl9yZWdkOgorCWF0aDlrX2RlaW5pdF9zb2Z0YyhzYyk7CitlcnJvcl9pbml0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgIERlLUluaXRpYWxpemF0aW9uICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdGg5a19kZWluaXRfc29mdGMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGkgPSAwOworCisgICAgICAgIGlmICgoc2MtPmJ0Y29leC5ub19zdG9tcF90aW1lcikgJiYKKwkgICAgc2MtPnNjX2FoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQlhdGhfZ2VuX3RpbWVyX2ZyZWUoc2MtPnNjX2FoLCBzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOworCisJYXRoOWtfZXhpdF9kZWJ1ZyhzYy0+c2NfYWgpOworCWF0aDlrX2h3X2RlaW5pdChzYy0+c2NfYWgpOworCisJdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKK30KKwordm9pZCBhdGg5a19kZWluaXRfZGV2aWNlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWludCBpID0gMDsKKworCWF0aDlrX3BzX3dha2V1cChzYyk7CisKKwl3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHNjLT5ody0+d2lwaHkpOworCWF0aF9kZWluaXRfbGVkcyhzYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlzYy0+c2VjX3dpcGh5W2ldID0gTlVMTDsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOworCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CisJfQorCWtmcmVlKHNjLT5zZWNfd2lwaHkpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCWF0aF9yeF9jbGVhbnVwKHNjKTsKKwlhdGhfdHhfY2xlYW51cChzYyk7CisJYXRoOWtfZGVpbml0X3NvZnRjKHNjKTsKK30KKwordm9pZCBhdGhfZGVzY2RtYV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sIGRkLT5kZF9kZXNjLAorCQkJICBkZC0+ZGRfZGVzY19wYWRkcik7CisKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKKwlrZnJlZShkZC0+ZGRfYnVmcHRyKTsKKwltZW1zZXQoZGQsIDAsIHNpemVvZigqZGQpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICBNb2R1bGUgSG9va3MgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCBhdGg5a19pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJLyogUmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobSAqLworCWVycm9yID0gYXRoX3JhdGVfY29udHJvbF9yZWdpc3RlcigpOworCWlmIChlcnJvciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAorCQkJZXJyb3IpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyb3IgPSBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCgpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3Q6ICVkXG4iLAorCQkJZXJyb3IpOworCQlnb3RvIGVycl9yYXRlX3VucmVnaXN0ZXI7CisJfQorCisJZXJyb3IgPSBhdGhfcGNpX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImF0aDlrOiBObyBQQ0kgZGV2aWNlcyBmb3VuZCwgZHJpdmVyIG5vdCBpbnN0YWxsZWQuXG4iKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZW1vdmVfcm9vdDsKKwl9CisKKwllcnJvciA9IGF0aF9haGJfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycl9wY2lfZXhpdDsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9wY2lfZXhpdDoKKwlhdGhfcGNpX2V4aXQoKTsKKworIGVycl9yZW1vdmVfcm9vdDoKKwlhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCgpOworIGVycl9yYXRlX3VucmVnaXN0ZXI6CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CisgZXJyX291dDoKKwlyZXR1cm4gZXJyb3I7Cit9Cittb2R1bGVfaW5pdChhdGg5a19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0aDlrX2V4aXQodm9pZCkKK3sKKwlhdGhfYWhiX2V4aXQoKTsKKwlhdGhfcGNpX2V4aXQoKTsKKwlhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCgpOworCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgdW5sb2FkZWRcbiIsIGRldl9pbmZvKTsKK30KK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCmluZGV4IGUxODU0NzkuLjI5ODUxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKQEAgLTE2Nyw2ICsxNjcsNDAgQEAKICNkZWZpbmUgQVRIOUtfUlhLRVlJWF9JTlZBTElECSgodTgpLTEpCiAjZGVmaW5lIEFUSDlLX1RYS0VZSVhfSU5WQUxJRAkoKHUzMiktMSkKIAorZW51bSBhdGg5a19waHllcnIgeworCUFUSDlLX1BIWUVSUl9VTkRFUlJVTiAgICAgICAgICAgICA9IDAsICAvKiBUcmFuc21pdCB1bmRlcnJ1biAqLworCUFUSDlLX1BIWUVSUl9USU1JTkcgICAgICAgICAgICAgICA9IDEsICAvKiBUaW1pbmcgZXJyb3IgKi8KKwlBVEg5S19QSFlFUlJfUEFSSVRZICAgICAgICAgICAgICAgPSAyLCAgLyogSWxsZWdhbCBwYXJpdHkgKi8KKwlBVEg5S19QSFlFUlJfUkFURSAgICAgICAgICAgICAgICAgPSAzLCAgLyogSWxsZWdhbCByYXRlICovCisJQVRIOUtfUEhZRVJSX0xFTkdUSCAgICAgICAgICAgICAgID0gNCwgIC8qIElsbGVnYWwgbGVuZ3RoICovCisJQVRIOUtfUEhZRVJSX1JBREFSICAgICAgICAgICAgICAgID0gNSwgIC8qIFJhZGFyIGRldGVjdCAqLworCUFUSDlLX1BIWUVSUl9TRVJWSUNFICAgICAgICAgICAgICA9IDYsICAvKiBJbGxlZ2FsIHNlcnZpY2UgKi8KKwlBVEg5S19QSFlFUlJfVE9SICAgICAgICAgICAgICAgICAgPSA3LCAgLyogVHJhbnNtaXQgb3ZlcnJpZGUgcmVjZWl2ZSAqLworCisJQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HICAgICAgICAgID0gMTcsCisJQVRIOUtfUEhZRVJSX09GRE1fU0lHTkFMX1BBUklUWSAgID0gMTgsCisJQVRIOUtfUEhZRVJSX09GRE1fUkFURV9JTExFR0FMICAgID0gMTksCisJQVRIOUtfUEhZRVJSX09GRE1fTEVOR1RIX0lMTEVHQUwgID0gMjAsCisJQVRIOUtfUEhZRVJSX09GRE1fUE9XRVJfRFJPUCAgICAgID0gMjEsCisJQVRIOUtfUEhZRVJSX09GRE1fU0VSVklDRSAgICAgICAgID0gMjIsCisJQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVCAgICAgICAgID0gMjMsCisJQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCAgICAgID0gMjQsCisKKwlBVEg5S19QSFlFUlJfQ0NLX1RJTUlORyAgICAgICAgICAgPSAyNSwKKwlBVEg5S19QSFlFUlJfQ0NLX0hFQURFUl9DUkMgICAgICAgPSAyNiwKKwlBVEg5S19QSFlFUlJfQ0NLX1JBVEVfSUxMRUdBTCAgICAgPSAyNywKKwlBVEg5S19QSFlFUlJfQ0NLX1NFUlZJQ0UgICAgICAgICAgPSAzMCwKKwlBVEg5S19QSFlFUlJfQ0NLX1JFU1RBUlQgICAgICAgICAgPSAzMSwKKwlBVEg5S19QSFlFUlJfQ0NLX0xFTkdUSF9JTExFR0FMICAgPSAzMiwKKwlBVEg5S19QSFlFUlJfQ0NLX1BPV0VSX0RST1AgICAgICAgPSAzMywKKworCUFUSDlLX1BIWUVSUl9IVF9DUkNfRVJST1IgICAgICAgICA9IDM0LAorCUFUSDlLX1BIWUVSUl9IVF9MRU5HVEhfSUxMRUdBTCAgICA9IDM1LAorCUFUSDlLX1BIWUVSUl9IVF9SQVRFX0lMTEVHQUwgICAgICA9IDM2LAorCisJQVRIOUtfUEhZRVJSX01BWCAgICAgICAgICAgICAgICAgID0gMzcsCit9OworCiBzdHJ1Y3QgYXRoX2Rlc2MgewogCXUzMiBkc19saW5rOwogCXUzMiBkc19kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggNjQzYmVhMy4uNjdjYTRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0xOCwxMTggKzE4LDYgQEAKICNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgImJ0Y29leC5oIgogCi1zdGF0aWMgY2hhciAqZGV2X2luZm8gPSAiYXRoOWsiOwotCi1NT0RVTEVfQVVUSE9SKCJBdGhlcm9zIENvbW11bmljYXRpb25zIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBMQU4gY2FyZHMuIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0aDlrX2RlYnVnID0gQVRIX0RCR19ERUZBVUxUOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdGg5a19kZWJ1ZywgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1hc2siKTsKLQotLyogV2UgdXNlIHRoZSBod192YWx1ZSBhcyBhbiBpbmRleCBpbnRvIG91ciBwcml2YXRlIGNoYW5uZWwgc3RydWN0dXJlICovCi0KLSNkZWZpbmUgQ0hBTjJHKF9mcmVxLCBfaWR4KSAgeyBcCi0JLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAotCS5od192YWx1ZSA9IChfaWR4KSwgXAotCS5tYXhfcG93ZXIgPSAyMCwgXAotfQotCi0jZGVmaW5lIENIQU41RyhfZnJlcSwgX2lkeCkgeyBcCi0JLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCBcCi0JLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAotCS5od192YWx1ZSA9IChfaWR4KSwgXAotCS5tYXhfcG93ZXIgPSAyMCwgXAotfQotCi0vKiBTb21lIDIgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiAyMzEyLTI3MzIKLSAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93Ci0gKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQotICogdGhpcyBzdGF0aWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfMmdoel9jaGFudGFibGVbXSA9IHsKLQlDSEFOMkcoMjQxMiwgMCksIC8qIENoYW5uZWwgMSAqLwotCUNIQU4yRygyNDE3LCAxKSwgLyogQ2hhbm5lbCAyICovCi0JQ0hBTjJHKDI0MjIsIDIpLCAvKiBDaGFubmVsIDMgKi8KLQlDSEFOMkcoMjQyNywgMyksIC8qIENoYW5uZWwgNCAqLwotCUNIQU4yRygyNDMyLCA0KSwgLyogQ2hhbm5lbCA1ICovCi0JQ0hBTjJHKDI0MzcsIDUpLCAvKiBDaGFubmVsIDYgKi8KLQlDSEFOMkcoMjQ0MiwgNiksIC8qIENoYW5uZWwgNyAqLwotCUNIQU4yRygyNDQ3LCA3KSwgLyogQ2hhbm5lbCA4ICovCi0JQ0hBTjJHKDI0NTIsIDgpLCAvKiBDaGFubmVsIDkgKi8KLQlDSEFOMkcoMjQ1NywgOSksIC8qIENoYW5uZWwgMTAgKi8KLQlDSEFOMkcoMjQ2MiwgMTApLCAvKiBDaGFubmVsIDExICovCi0JQ0hBTjJHKDI0NjcsIDExKSwgLyogQ2hhbm5lbCAxMiAqLwotCUNIQU4yRygyNDcyLCAxMiksIC8qIENoYW5uZWwgMTMgKi8KLQlDSEFOMkcoMjQ4NCwgMTMpLCAvKiBDaGFubmVsIDE0ICovCi19OwotCi0vKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKLSAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93Ci0gKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQotICogdGhpcyBzdGF0aWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKLQkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KLQlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCi0JQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLwotCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KLQlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCi0JLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCi0JQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLwotCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KLQlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCi0JQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLwotCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KLQlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLwotCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCi0JQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KLQlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLwotCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCi0JQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KLQlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLwotCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCi0JQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KLQlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLwotCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCi0JLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCi0JQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KLQlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLwotCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCi0JQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KLQlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLwotfTsKLQotLyogQXRoZXJvcyBoYXJkd2FyZSByYXRlIGNvZGUgYWRkaXRpb24gZm9yIHNob3J0IHByZW1ibGUgKi8KLSNkZWZpbmUgU0hQQ0hFQ0soX19od19yYXRlLCBfX2ZsYWdzKSBcCi0JKChfX2ZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpID8gKF9faHdfcmF0ZSB8IDB4MDQgKSA6IDApCi0KLSNkZWZpbmUgUkFURShfYml0cmF0ZSwgX2h3X3JhdGUsIF9mbGFncykgeyAgICAgICAgICAgICAgXAotCS5iaXRyYXRlICAgICAgICA9IChfYml0cmF0ZSksICAgICAgICAgICAgICAgICAgIFwKLQkuZmxhZ3MgICAgICAgICAgPSAoX2ZsYWdzKSwgICAgICAgICAgICAgICAgICAgICBcCi0JLmh3X3ZhbHVlICAgICAgID0gKF9od19yYXRlKSwgICAgICAgICAgICAgICAgICAgXAotCS5od192YWx1ZV9zaG9ydCA9IChTSFBDSEVDSyhfaHdfcmF0ZSwgX2ZsYWdzKSkgIFwKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdGg5a19sZWdhY3lfcmF0ZXNbXSA9IHsKLQlSQVRFKDEwLCAweDFiLCAwKSwKLQlSQVRFKDIwLCAweDFhLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSg1NSwgMHgxOSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAotCVJBVEUoMTEwLCAweDE4LCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSg2MCwgMHgwYiwgMCksCi0JUkFURSg5MCwgMHgwZiwgMCksCi0JUkFURSgxMjAsIDB4MGEsIDApLAotCVJBVEUoMTgwLCAweDBlLCAwKSwKLQlSQVRFKDI0MCwgMHgwOSwgMCksCi0JUkFURSgzNjAsIDB4MGQsIDApLAotCVJBVEUoNDgwLCAweDA4LCAwKSwKLQlSQVRFKDU0MCwgMHgwYywgMCksCi19OwotCiBzdGF0aWMgdm9pZCBhdGhfY2FjaGVfY29uZl9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKIHsKQEAgLTIyMSw3ICsxMDksNyBAQAogCXJldHVybiBjaGFubmVsOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19zZXRwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCitib29sIGF0aDlrX3NldHBvd2VyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgcmV0OwpAQCAtMjU1LDExICsxNDMsMTMgQEAKIAlpZiAoLS1zYy0+cHNfdXNlY291bnQgIT0gMCkKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoc2MtPnBzX2VuYWJsZWQgJiYKLQkgICAgIShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwKLQkJCSAgICAgIFNDX09QX1dBSVRfRk9SX0NBQiB8Ci0JCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0spKSkKKwlpZiAoc2MtPnBzX2lkbGUpCisJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fRlVMTF9TTEVFUCk7CisJZWxzZSBpZiAoc2MtPnBzX2VuYWJsZWQgJiYKKwkJICEoc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CisJCQkgICAgICBQU19XQUlUX0ZPUl9DQUIgfAorCQkJICAgICAgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAorCQkJICAgICAgUFNfV0FJVF9GT1JfVFhfQUNLKSkpCiAJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fTkVUV09SS19TTEVFUCk7CiAKICB1bmxvY2s6CkBAIC0zMTYsNyArMjA2LDcgQEAKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGhjaGFuLCBmYXN0Y2MpOwogCWlmIChyKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgogCQkJICAicmVzZXQgc3RhdHVzICVkXG4iLAogCQkJICBjaGFubmVsLT5jZW50ZXJfZnJlcSwgcik7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKQEAgLTM0OSw3ICsyMzksNyBAQAogICogIFdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGUsIGl0IHJlc2NoZWR1bGVzIGl0c2VsZiBkZXBlbmRpbmcgb24gdGhlCiAgKiAgYXBwcm9wcmlhdGUgaW50ZXJ2YWwgdGhhdCB3YXMgY2FsY3VsYXRlZC4KICAqLwotc3RhdGljIHZvaWQgYXRoX2FuaV9jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC0zNjMsMTQgKzI1Myw2IEBACiAJc2hvcnRfY2FsX2ludGVydmFsID0gKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApID8KIAkJQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMIDogQVRIX1NUQV9TSE9SVF9DQUxJTlRFUlZBTDsKIAotCS8qCi0JKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KLQkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KLQkqLwotCXNwaW5fbG9jaygmc2MtPmFuaV9sb2NrKTsKLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCi0JCWdvdG8gc2V0X3RpbWVyOwotCiAJLyogT25seSBjYWxpYnJhdGUgaWYgYXdha2UgKi8KIAlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9IEFUSDlLX1BNX0FXQUtFKQogCQlnb3RvIHNldF90aW1lcjsKQEAgLTQzNyw3ICszMTksNiBAQAogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiBzZXRfdGltZXI6Ci0Jc3Bpbl91bmxvY2soJnNjLT5hbmlfbG9jayk7CiAJLyoKIAkqIFNldCB0aW1lciBpbnRlcnZhbCBiYXNlZCBvbiBwcmV2aW91cyByZXN1bHRzLgogCSogVGhlIGludGVydmFsIG11c3QgYmUgdGhlIHNob3J0ZXN0IG5lY2Vzc2FyeSB0byBzYXRpc2Z5IEFOSSwKQEAgLTUxMyw3ICszOTQsNyBAQAogCQlhdGhfdHhfbm9kZV9jbGVhbnVwKHNjLCBhbik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGg5a190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopZGF0YTsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKQEAgLTU0NSw3ICs0MjYsNyBAQAogCQkgKi8KIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCSAgIlRTRk9PUiAtIFN5bmMgd2l0aCBuZXh0IEJlYWNvblxuIik7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9CRUFDT05fU1lOQzsKKwkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX0JFQUNPTiB8IFBTX0JFQUNPTl9TWU5DOwogCX0KIAogCWlmIChhaC0+YnRjb2V4X2h3LnNjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkKQEAgLTY0Niw3ICs1MjcsNyBAQAogCQkJICogcmVjZWl2ZSBmcmFtZXMgKi8KIAkJCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlhdGg5a19od19zZXRyeGFib3J0KHNjLT5zY19haCwgMCk7Ci0JCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX0JFQUNPTjsKIAkJfQogCiBjaGlwX3Jlc2V0OgpAQCAtOTI4LDQ5ICs4MDksMTIgQEAKIAogCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgY29tbW9uLT5rZXltYXApOwogCWlmIChjb21tb24tPnNwbGl0bWljKSB7CisJCWF0aDlrX2h3X2tleXJlc2V0KGFoLCBrZXktPmh3X2tleV9pZHggKyAzMik7CiAJCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyAzMiwgY29tbW9uLT5rZXltYXApOwogCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgY29tbW9uLT5rZXltYXApOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKLXsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7Ci0JdTggdHhfc3RyZWFtcywgcnhfc3RyZWFtczsKLQotCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IHRydWU7Ci0JaHRfaW5mby0+Y2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUyB8Ci0JCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8Ci0JCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKLQotCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOwotCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzg7Ci0KLQkvKiBzZXQgdXAgc3VwcG9ydGVkIG1jcyBzZXQgKi8KLQltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOwotCXR4X3N0cmVhbXMgPSAhKGNvbW1vbi0+dHhfY2hhaW5tYXNrICYgKGNvbW1vbi0+dHhfY2hhaW5tYXNrIC0gMSkpID8KLQkJICAgICAxIDogMjsKLQlyeF9zdHJlYW1zID0gIShjb21tb24tPnJ4X2NoYWlubWFzayAmIChjb21tb24tPnJ4X2NoYWlubWFzayAtIDEpKSA/Ci0JCSAgICAgMSA6IDI7Ci0KLQlpZiAodHhfc3RyZWFtcyAhPSByeF9zdHJlYW1zKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCi0JCQkgIHR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOwotCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKLQkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSAoKHR4X3N0cmVhbXMgLSAxKSA8PAotCQkJCUlFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQpOwotCX0KLQotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKLQlpZiAocnhfc3RyZWFtcyA+PSAyKQotCQlodF9pbmZvLT5tY3MucnhfbWFza1sxXSA9IDB4ZmY7Ci0KLQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfYnNzX2Fzc29jX2luZm8oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQpAQCAtOTkyLDcgKzgzNiw3IEBACiAJCSAqIG9uIHRoZSByZWNlaXB0IG9mIHRoZSBmaXJzdCBCZWFjb24gZnJhbWUgKGkuZS4sCiAJCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCiAJCSAqLwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OX1NZTkM7CisJCXNjLT5wc19mbGFncyB8PSBQU19CRUFDT05fU1lOQzsKIAogCQkvKiBDb25maWd1cmUgdGhlIGJlYWNvbiAqLwogCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKQEAgLTEwMDksMTc0ICs4NTMsNiBAQAogCX0KIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoJIExFRCBmdW5jdGlvbnMJCSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGF0aF9sZWRfYmxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKLQkJCQkJICAgIGF0aF9sZWRfYmxpbmtfd29yay53b3JrKTsKLQotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9BU1NPQ0lBVEVEKSkKLQkJcmV0dXJuOwotCi0JaWYgKChzYy0+bGVkX29uX2R1cmF0aW9uID09IEFUSF9MRURfT05fRFVSQVRJT05fSURMRSkgfHwKLQkgICAgKHNjLT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMCk7Ci0JZWxzZQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKLQkJCQkgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8gMSA6IDApOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCi0JCQkJICAgICAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywKLQkJCQkgICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8KLQkJCQkJbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29mZl9kdXJhdGlvbikgOgotCQkJCQltc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb25fZHVyYXRpb24pKTsKLQotCXNjLT5sZWRfb25fZHVyYXRpb24gPSBzYy0+bGVkX29uX2NudCA/Ci0JCQltYXgoKEFUSF9MRURfT05fRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb25fY250KSwgMjUpIDoKLQkJCUFUSF9MRURfT05fRFVSQVRJT05fSURMRTsKLQlzYy0+bGVkX29mZl9kdXJhdGlvbiA9IHNjLT5sZWRfb2ZmX2NudCA/Ci0JCQltYXgoKEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgLSBzYy0+bGVkX29mZl9jbnQpLCAxMCkgOgotCQkJQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRTsKLQlzYy0+bGVkX29uX2NudCA9IHNjLT5sZWRfb2ZmX2NudCA9IDA7Ci0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikKLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfT047Ci0JZWxzZQotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfTEVEX09OOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfbGVkX2JyaWdodG5lc3Moc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQotewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhdGhfbGVkLCBsZWRfY2Rldik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBsZWQtPnNjOwotCi0Jc3dpdGNoIChicmlnaHRuZXNzKSB7Ci0JY2FzZSBMRURfT0ZGOgotCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DIHx8Ci0JCSAgICBsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAotCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKLQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQotCQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX09OOwotCQl9IGVsc2UgewotCQkJc2MtPmxlZF9vZmZfY250Kys7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfRlVMTDoKLQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQykgewotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9BU1NPQ0lBVEVEOwotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCi0JCQkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKLQkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAwKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Ci0JCX0gZWxzZSB7Ci0JCQlzYy0+bGVkX29uX2NudCsrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBhdGhfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2xlZCAqbGVkLAotCQkJICAgIGNoYXIgKnRyaWdnZXIpCi17Ci0JaW50IHJldDsKLQotCWxlZC0+c2MgPSBzYzsKLQlsZWQtPmxlZF9jZGV2Lm5hbWUgPSBsZWQtPm5hbWU7Ci0JbGVkLT5sZWRfY2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwotCWxlZC0+bGVkX2NkZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGhfbGVkX2JyaWdodG5lc3M7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KHNjLT5ody0+d2lwaHkpLCAmbGVkLT5sZWRfY2Rldik7Ci0JaWYgKHJldCkKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiRmFpbGVkIHRvIHJlZ2lzdGVyIGxlZDolcyIsIGxlZC0+bmFtZSk7Ci0JZWxzZQotCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX2xlZCAqbGVkKQotewotCWlmIChsZWQtPnJlZ2lzdGVyZWQpIHsKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2NkZXYpOwotCQlsZWQtPnJlZ2lzdGVyZWQgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPmFzc29jX2xlZCk7Ci0Jc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKLQlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOwotCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7Ci0JYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+cmFkaW9fbGVkKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JY2hhciAqdHJpZ2dlcjsKLQlpbnQgcmV0OwotCi0JaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OwotCWVsc2UKLQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOwotCi0JLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKLQkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCi0JYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIGF0aF9sZWRfYmxpbmtfd29yayk7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzYy0+aHcpOwotCXNucHJpbnRmKHNjLT5yYWRpb19sZWQubmFtZSwgc2l6ZW9mKHNjLT5yYWRpb19sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJhZGlvX2xlZCwgdHJpZ2dlcik7Ci0Jc2MtPnJhZGlvX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUkFESU87Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoc2MtPmh3KTsKLQlzbnByaW50ZihzYy0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihzYy0+YXNzb2NfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5hc3NvY19sZWQsIHRyaWdnZXIpOwotCXNjLT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHNjLT5odyk7Ci0Jc25wcmludGYoc2MtPnR4X2xlZC5uYW1lLCBzaXplb2Yoc2MtPnR4X2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwotCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCB0cmlnZ2VyKTsKLQlzYy0+dHhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9UWDsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShzYy0+aHcpOwotCXNucHJpbnRmKHNjLT5yeF9sZWQubmFtZSwgc2l6ZW9mKHNjLT5yeF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgdHJpZ2dlcik7Ci0Jc2MtPnJ4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUlg7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JcmV0dXJuOwotCi1mYWlsOgotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPmF0aF9sZWRfYmxpbmtfd29yayk7Ci0JYXRoX2RlaW5pdF9sZWRzKHNjKTsKLX0KLQogdm9pZCBhdGhfcmFkaW9fZW5hYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKQEAgLTExOTQsNyArODcwLDcgQEAKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CiAJaWYgKHIpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIiwKKwkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICgldSBNSHopLCAiCiAJCQkgICJyZXNldCBzdGF0dXMgJWRcbiIsCiAJCQkgIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCByKTsKIAl9CkBAIC0xMjQ5LDcgKzkyNSw3IEBACiAJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOwogCWlmIChyKSB7CiAJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgorCQkJICAiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1IeiksICIKIAkJCSAgInJlc2V0IHN0YXR1cyAlZFxuIiwKIAkJCSAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KQEAgLTEyNjEsNzExICs5MzcsNiBAQAogCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKiovCi0vKglSZmtpbGwJICAgKi8KLS8qKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYm9vbCBhdGhfaXNfcmZraWxsX3NldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPnJma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPnJma2lsbF9wb2xhcml0eTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7Ci0JYm9vbCBibG9ja2VkID0gISFhdGhfaXNfcmZraWxsX3NldChzYyk7Ci0KLQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgYmxvY2tlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zdGFydF9yZmtpbGxfcG9sbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQotCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfdW5pbml0X2h3KHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JQlVHX09OKCFhaCk7Ci0KLQlhdGg5a19leGl0X2RlYnVnKGFoKTsKLQlhdGg5a19od19kZXRhY2goYWgpOwotCXNjLT5zY19haCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9jbGVhbl9jb3JlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWludCBpID0gMDsKLQotCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0KLQlkZXZfZGJnKHNjLT5kZXYsICJEZXRhY2ggQVRIIGh3XG4iKTsKLQotCWF0aF9kZWluaXRfbGVkcyhzYyk7Ci0Jd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7Ci0JCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwotCQlpZiAoYXBoeSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOwotCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7Ci0JCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKLQl9Ci0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwotCWF0aF9yeF9jbGVhbnVwKHNjKTsKLQlhdGhfdHhfY2xlYW51cChzYyk7Ci0KLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpCi0JCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7Ci0KLQkvKiBjbGVhbnVwIHR4IHF1ZXVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCi0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOwotCi0JaWYgKChzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKSAmJgotCSAgICBhaC0+YnRjb2V4X2h3LnNjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkKLQkJYXRoX2dlbl90aW1lcl9mcmVlKGFoLCBzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKTsKLX0KLQotdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWF0aF9jbGVhbl9jb3JlKHNjKTsKLQlhdGg5a191bmluaXRfaHcoc2MpOwotfQotCi12b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCi0JYXRoX2NsZWFuX2NvcmUoc2MpOwotCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKLQlhdGhfYnVzX2NsZWFudXAoY29tbW9uKTsKLQlrZnJlZShzYy0+c2VjX3dpcGh5KTsKLQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOwotCi0JYXRoOWtfdW5pbml0X2h3KHNjKTsKLX0KLQotc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwotCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gYXRoOWtfaHdfcmVndWxhdG9yeShzYy0+c2NfYWgpOwotCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZyk7Ci19Ci0KLS8qCi0gKiBEZXRlY3RzIGlmIHRoZXJlIGlzIGFueSBwcmlvcml0eSBidCB0cmFmZmljCi0gKi8KLXN0YXRpYyB2b2lkIGF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JaWYgKGF0aDlrX2h3X2dwaW9fZ2V0KHNjLT5zY19haCwgYWgtPmJ0Y29leF9ody5idHByaW9yaXR5X2dwaW8pKQotCQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCsrOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYnRjb2V4LT5idF9wcmlvcml0eV90aW1lICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQVRIX0JUX1BSSU9SSVRZX1RJTUVfVEhSRVNIT0xEKSkpIHsKLQkJaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfVEhSRVNIT0xEKSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQlRDT0VYLAotCQkJCSAgIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKLQkJfSBlbHNlIHsKLQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQ7Ci0JCX0KLQotCQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7Ci0JCWJ0Y29leC0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7Ci0JfQotfQotCi0vKgotICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KLSAqLwotc3RhdGljIHZvaWQgYXRoOWtfYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSAgZW51bSBhdGhfc3RvbXBfdHlwZSBzdG9tcF90eXBlKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0Jc3dpdGNoIChzdG9tcF90eXBlKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6Ci0JCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCi0JCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOwotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCi0JCQkgICJJbnZhbGlkIFN0b21wdHlwZVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCWF0aDlrX2h3X2J0Y29leF9lbmFibGUoYWgpOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCi0JCQkJICB1MzIgdGltZXJfbmV4dCwKLQkJCQkgIHUzMiB0aW1lcl9wZXJpb2QpCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0KLQlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0aW1lcl9uZXh0LCB0aW1lcl9wZXJpb2QpOwotCi0JaWYgKChzYy0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOwotCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dFTlRJTUVSOwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdG9wKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIpCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0Jc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOwotCi0JYXRoOWtfaHdfZ2VuX3RpbWVyX3N0b3AoYWgsIHRpbWVyKTsKLQotCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCi0JaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJc2MtPmltYXNrICY9IH5BVEg5S19JTlRfR0VOVElNRVI7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwotCX0KLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIG1hc3RlciBidCBjb2V4IHRpbWVyIHdoaWNoIHJ1bnMgZm9yIGV2ZXJ5Ci0gKiA0NW1zLCBidCB0cmFmZmljIHdpbGwgYmUgZ2l2ZW4gcHJpb3JpdHkgZHVyaW5nIDU1JSBvZiB0aGlzCi0gKiBwZXJpb2Qgd2hpbGUgd2xhbiBnZXRzIHJlbWFpbmluZyA0NSUKLSAqLwotc3RhdGljIHZvaWQgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgZGF0YTsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7Ci0KLQlhdGhfZGV0ZWN0X2J0X3ByaW9yaXR5KHNjKTsKLQotCXNwaW5fbG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7Ci0KLQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIGJ0Y29leC0+YnRfc3RvbXBfdHlwZSk7Ci0KLQlzcGluX3VubG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7Ci0KLQlpZiAoYnRjb2V4LT5idGNvZXhfcGVyaW9kICE9IGJ0Y29leC0+YnRjb2V4X25vX3N0b21wKSB7Ci0JCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCi0JCQlhdGg5a19nZW5fdGltZXJfc3RvcChhaCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQkJYXRoOWtfZ2VuX3RpbWVyX3N0YXJ0KGFoLAotCQkJCSAgICAgIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsCi0JCQkJICAgICAgKGF0aDlrX2h3X2dldHRzZjMyKGFoKSArCi0JCQkJICAgICAgIGJ0Y29leC0+YnRjb2V4X25vX3N0b21wKSwKLQkJCQkgICAgICAgYnRjb2V4LT5idGNvZXhfbm9fc3RvbXAgKiAxMCk7Ci0JCWJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCA9IHRydWU7Ci0JfQotCi0JbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCkpOwotfQotCi0vKgotICogR2VuZXJpYyB0c2YgYmFzZWQgaHcgdGltZXIgd2hpY2ggY29uZmlndXJlcyB3ZWlnaHQKLSAqIHJlZ2lzdGVycyB0byB0aW1lIHNsaWNlIGJldHdlZW4gd2xhbiBhbmQgYnQgdHJhZmZpYwotICovCi1zdGF0aWMgdm9pZCBhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyKHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopYXJnOwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKLQotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKLQkJICAibm8gc3RvbXAgdGltZXIgcnVubmluZyBcbiIpOwotCi0Jc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKLQotCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cpCi0JCWF0aDlrX2J0Y29leF9idF9zdG9tcChzYywgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKLQkgZWxzZSBpZiAoYnRjb2V4LT5idF9zdG9tcF90eXBlID09IEFUSF9CVENPRVhfU1RPTVBfQUxMKQotCQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIEFUSF9CVENPRVhfU1RPTVBfTE9XKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKLX0KLQotc3RhdGljIGludCBhdGhfaW5pdF9idGNvZXhfdGltZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCi0JYnRjb2V4LT5idGNvZXhfcGVyaW9kID0gQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICogMTAwMDsKLQlidGNvZXgtPmJ0Y29leF9ub19zdG9tcCA9ICgxMDAgLSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFKSAqCi0JCWJ0Y29leC0+YnRjb2V4X3BlcmlvZCAvIDEwMDsKLQotCXNldHVwX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIsCi0JCQkodW5zaWduZWQgbG9uZykgc2MpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmJ0Y29leC0+YnRjb2V4X2xvY2spOwotCi0JYnRjb2V4LT5ub19zdG9tcF90aW1lciA9IGF0aF9nZW5fdGltZXJfYWxsb2Moc2MtPnNjX2FoLAotCQkJYXRoX2J0Y29leF9ub19zdG9tcF90aW1lciwKLQkJCWF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIsCi0JCQkodm9pZCAqKSBzYywgQVJfRklSU1RfTkRQX1RJTUVSKTsKLQotCWlmICghYnRjb2V4LT5ub19zdG9tcF90aW1lcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgYW5kIHdyaXRlLCB0aGV5IGJvdGggc2hhcmUgdGhlIHNhbWUgbG9jay4gV2UgZG8gdGhpcyB0byBzZXJpYWxpemUKLSAqIHJlYWRzIGFuZCB3cml0ZXMgb24gQXRoZXJvcyA4MDIuMTFuIFBDSSBkZXZpY2VzIG9ubHkuIFRoaXMgaXMgcmVxdWlyZWQKLSAqIGFzIHRoZSBGSUZPIG9uIHRoZXNlIGRldmljZXMgY2FuIG9ubHkgYWNjZXB0IHNhbmVseSAyIHJlcXVlc3RzLiBBZnRlcgotICogdGhhdCB0aGUgZGV2aWNlIGdvZXMgYmFuYW5hcy4gU2VyaWFsaXppbmcgdGhlIHJlYWRzL3dyaXRlcyBwcmV2ZW50cyB0aGlzCi0gKiBmcm9tIGhhcHBlbmluZy4KLSAqLwotCi1zdGF0aWMgdm9pZCBhdGg5a19pb3dyaXRlMzIodm9pZCAqaHdfcHJpdiwgdTMyIHZhbCwgdTMyIHJlZ19vZmZzZXQpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCi0JaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOwotCX0gZWxzZQotCQlpb3dyaXRlMzIodmFsLCBzYy0+bWVtICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIodm9pZCAqaHdfcHJpdiwgdTMyIHJlZ19vZmZzZXQpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCXUzMiB2YWw7Ci0KLQlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKLQkJdmFsID0gaW9yZWFkMzIoc2MtPm1lbSArIHJlZ19vZmZzZXQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9vcHMgYXRoOWtfY29tbW9uX29wcyA9IHsKLQkucmVhZCA9IGF0aDlrX2lvcmVhZDMyLAotCS53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMiwKLX07Ci0KLS8qCi0gKiBJbml0aWFsaXplIGFuZCBmaWxsIGF0aF9zb2Z0YywgYXRoX3NvZmN0IGlzIHRoZQotICogIlNvZnR3YXJlIENhcnJpZXIiIHN0cnVjdC4gSGlzdG9yaWNhbGx5IGl0IGhhcyBleGlzdGVkCi0gKiB0byBhbGxvdyB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGhhcmR3YXJlIHNwZWNpZmljCi0gKiB2YXJpYWJsZXMgKG5vdyBpbiBhdGhfaHcpIGFuZCBkcml2ZXIgc3BlY2lmaWMgdmFyaWFibGVzLgotICovCi1zdGF0aWMgaW50IGF0aF9pbml0X3NvZnRjKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwotCWludCByID0gMCwgaTsKLQlpbnQgY3N6ID0gMDsKLQlpbnQgcW51bTsKLQotCS8qIFhYWDogaGFyZHdhcmUgd2lsbCBub3QgYmUgcmVhZHkgdW50aWwgYXRoX29wZW4oKSBiZWluZyBjYWxsZWQgKi8KLQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOwotCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKLQlzcGluX2xvY2tfaW5pdCgmc2MtPmFuaV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOwotCW11dGV4X2luaXQoJnNjLT5tdXRleCk7Ci0JdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOwotCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXNjKTsKLQotCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOwotCWlmICghYWgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKLQlhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9IHN1YnN5c2lkOwotCXNjLT5zY19haCA9IGFoOwotCi0JY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQljb21tb24tPm9wcyA9ICZhdGg5a19jb21tb25fb3BzOwotCWNvbW1vbi0+YnVzX29wcyA9IGJ1c19vcHM7Ci0JY29tbW9uLT5haCA9IGFoOwotCWNvbW1vbi0+aHcgPSBzYy0+aHc7Ci0JY29tbW9uLT5wcml2ID0gc2M7Ci0JY29tbW9uLT5kZWJ1Z19tYXNrID0gYXRoOWtfZGVidWc7Ci0KLQkvKgotCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKLQkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCi0JICovCi0JYXRoX3JlYWRfY2FjaGVzaXplKGNvbW1vbiwgJmNzeik7Ci0JLyogWFhYIGFzc2VydCBjc3ogaXMgbm9uLXplcm8gKi8KLQljb21tb24tPmNhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KLQotCXIgPSBhdGg5a19od19pbml0KGFoKTsKLQlpZiAocikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGluaXRpYWxpemUgaGFyZHdhcmU7ICIKLQkJCSAgImluaXRpYWxpemF0aW9uIHN0YXR1czogJWRcbiIsIHIpOwotCQlnb3RvIGJhZF9mcmVlX2h3OwotCX0KLQotCWlmIChhdGg5a19pbml0X2RlYnVnKGFoKSA8IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7Ci0JCWdvdG8gYmFkX2ZyZWVfaHc7Ci0JfQotCi0JLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQljb21tb24tPmtleW1heCA9IGFoLT5jYXBzLmtleWNhY2hlX3NpemU7Ci0JaWYgKGNvbW1vbi0+a2V5bWF4ID4gQVRIX0tFWU1BWCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOWSwKLQkJCSAgIldhcm5pbmcsIHVzaW5nIG9ubHkgJXUgZW50cmllcyBpbiAldSBrZXkgY2FjaGVcbiIsCi0JCQkgIEFUSF9LRVlNQVgsIGNvbW1vbi0+a2V5bWF4KTsKLQkJY29tbW9uLT5rZXltYXggPSBBVEhfS0VZTUFYOwotCX0KLQotCS8qCi0JICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAotCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb21tb24tPmtleW1heDsgaSsrKQotCQlhdGg5a19od19rZXlyZXNldChhaCwgKHUxNikgaSk7Ci0KLQkvKiBkZWZhdWx0IHRvIE1PTklUT1IgbW9kZSAqLwotCXNjLT5zY19haC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQotCS8qCi0JICogQWxsb2NhdGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzOiBvbmUgcXVldWUgZm9yCi0JICogYmVhY29uIGZyYW1lcyBhbmQgb25lIGRhdGEgcXVldWUgZm9yIGVhY2ggUW9TCi0JICogcHJpb3JpdHkuICBOb3RlIHRoYXQgdGhlIGhhbCBoYW5kbGVzIHJlc2V0aW5nCi0JICogdGhlc2UgcXVldWVzIGF0IHRoZSBuZWVkZWQgdGltZS4KLQkgKi8KLQlzYy0+YmVhY29uLmJlYWNvbnEgPSBhdGg5a19od19iZWFjb25xX3NldHVwKGFoKTsKLQlpZiAoc2MtPmJlYWNvbi5iZWFjb25xID09IC0xKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGJhZDI7Ci0JfQotCXNjLT5iZWFjb24uY2FicSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0NBQiwgMCk7Ci0JaWYgKHNjLT5iZWFjb24uY2FicSA9PSBOVUxMKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQotCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSF9DQUJRX1JFQURZX1RJTUU7Ci0JYXRoX2NhYnFfdXBkYXRlKHNjKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKTsgaSsrKQotCQlzYy0+dHguaHdxX21hcFtpXSA9IC0xOwotCi0JLyogU2V0dXAgZGF0YSBxdWV1ZXMgKi8KLQkvKiBOQjogZW5zdXJlIEJLIHF1ZXVlIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkgaC93IHF1ZXVlICovCi0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19CSykpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCSyB0cmFmZmljXG4iKTsKLQkJciA9IC1FSU87Ci0JCWdvdG8gYmFkMjsKLQl9Ci0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZJKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZJIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZPKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZPIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQotCS8qIEluaXRpYWxpemVzIHRoZSBub2lzZSBmbG9vciB0byBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4KLQkgKiBMYXRlciBvbiB0aGlzIHdpbGwgYmUgdXBkYXRlZCBkdXJpbmcgQU5JIHByb2Nlc3NpbmcuICovCi0KLQljb21tb24tPmFuaS5ub2lzZV9mbG9vciA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwotCXNldHVwX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKLQotCWlmIChhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfQ0lQSEVSLAotCQkJCSAgIEFUSDlLX0NJUEhFUl9US0lQLCBOVUxMKSkgewotCQkvKgotCQkgKiBXaGV0aGVyIHdlIHNob3VsZCBlbmFibGUgaC93IFRLSVAgTUlDLgotCQkgKiBYWFg6IGlmIHdlIGRvbid0IHN1cHBvcnQgV01FIFRLSVAgTUlDLCB0aGVuIHdlIHdvdWxkbid0Ci0JCSAqIHJlcG9ydCBXTU0gY2FwYWJsZSwgc28gaXQncyBhbHdheXMgc2FmZSB0byB0dXJuIG9uCi0JCSAqIFRLSVAgTUlDIGluIHRoaXMgY2FzZS4KLQkJICovCi0JCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfVEtJUF9NSUMsCi0JCQkJICAgICAgIDAsIDEsIE5VTEwpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgc2VwYXJhdGUga2V5IGNhY2hlIGVudHJpZXMKLQkgKiBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIGJvdGggdHgrcnggTUlDIGtleXMuCi0JICogV2l0aCBzcGxpdCBtaWMga2V5cyB0aGUgbnVtYmVyIG9mIHN0YXRpb25zIGlzIGxpbWl0ZWQKLQkgKiB0byAyNyBvdGhlcndpc2UgNTkuCi0JICovCi0JaWYgKGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpCi0JICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgICAgQVRIOUtfQ0lQSEVSX01JQywgTlVMTCkKLQkgICAgJiYgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RLSVBfU1BMSVQsCi0JCQkJICAgICAgMCwgTlVMTCkpCi0JCWNvbW1vbi0+c3BsaXRtaWMgPSAxOwotCi0JLyogdHVybiBvbiBtY2FzdCBrZXkgc2VhcmNoIGlmIHBvc3NpYmxlICovCi0JaWYgKCFhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMCwgTlVMTCkpCi0JCSh2b2lkKWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNILCAxLAotCQkJCQkgICAgIDEsIE5VTEwpOwotCi0Jc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gQVRIX1RYUE9XRVJfTUFYOwotCi0JLyogMTFuIENhcGFiaWxpdGllcyAqLwotCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7Ci0JfQotCi0JY29tbW9uLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7Ci0JY29tbW9uLT5yeF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy5yeF9jaGFpbm1hc2s7Ci0KLQlhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfRElWRVJTSVRZLCAxLCB0cnVlLCBOVUxMKTsKLQlzYy0+cnguZGVmYW50ID0gYXRoOWtfaHdfZ2V0ZGVmYW50ZW5uYShhaCk7Ci0KLQlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCi0JCW1lbWNweShjb21tb24tPmJzc2lkbWFzaywgYXRoX2JjYXN0X21hYywgRVRIX0FMRU4pOwotCi0Jc2MtPmJlYWNvbi5zbG90dGltZSA9IEFUSDlLX1NMT1RfVElNRV85OwkvKiBkZWZhdWx0IHRvIHNob3J0IHNsb3QgdGltZSAqLwotCi0JLyogaW5pdGlhbGl6ZSBiZWFjb24gc2xvdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7Ci0JCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOwotCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbaV0gPSBOVUxMOwotCX0KLQotCS8qIHNldHVwIGNoYW5uZWxzIGFuZCByYXRlcyAqLwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KLQkJCUFSUkFZX1NJWkUoYXRoOWtfMmdoel9jaGFudGFibGUpOwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0gYXRoOWtfbGVnYWN5X3JhdGVzOwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fYml0cmF0ZXMgPQotCQkJQVJSQVlfU0laRShhdGg5a19sZWdhY3lfcmF0ZXMpOwotCX0KLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmNoYW5uZWxzID0gYXRoOWtfNWdoel9jaGFudGFibGU7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9Ci0JCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9Ci0JCQlhdGg5a19sZWdhY3lfcmF0ZXMgKyA0OwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMgPQotCQkJQVJSQVlfU0laRShhdGg5a19sZWdhY3lfcmF0ZXMpIC0gNDsKLQl9Ci0KLQlzd2l0Y2ggKGFoLT5idGNvZXhfaHcuc2NoZW1lKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX0NGR19OT05FOgotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfQ0ZHXzJXSVJFOgotCQlhdGg5a19od19idGNvZXhfaW5pdF8yd2lyZShhaCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9DRkdfM1dJUkU6Ci0JCWF0aDlrX2h3X2J0Y29leF9pbml0XzN3aXJlKGFoKTsKLQkJciA9IGF0aF9pbml0X2J0Y29leF90aW1lcihzYyk7Ci0JCWlmIChyKQotCQkJZ290byBiYWQyOwotCQlxbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOwotCQlhdGg5a19od19pbml0X2J0Y29leF9odyhhaCwgcW51bSk7Ci0JCXNjLT5idGNvZXguYnRfc3RvbXBfdHlwZSA9IEFUSF9CVENPRVhfU1RPTVBfTE9XOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLWJhZDI6Ci0JLyogY2xlYW51cCB0eCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCi0JCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQotYmFkX2ZyZWVfaHc6Ci0JYXRoOWtfdW5pbml0X2h3KHNjKTsKLQlyZXR1cm4gcjsKLX0KLQotdm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKLQkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKLQkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7Ci0KLQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQotCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKLQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKLQotCWh3LT53aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDsKLQotCWh3LT5xdWV1ZXMgPSA0OwotCWh3LT5tYXhfcmF0ZXMgPSA0OwotCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNTAwMDsKLQlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDEwOwotCS8qIEhhcmR3YXJlIHN1cHBvcnRzIDEwIGJ1dCB3ZSB1c2UgNCAqLwotCWh3LT5tYXhfcmF0ZV90cmllcyA9IDQ7Ci0JaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9ub2RlKTsKLQlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX3ZpZik7Ci0KLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJhdGg5a19yYXRlX2NvbnRyb2wiOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9Ci0JCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLX0KLQotLyogRGV2aWNlIGRyaXZlciBjb3JlIGluaXRpYWxpemF0aW9uICovCi1pbnQgYXRoX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKLQkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwotCXN0cnVjdCBhdGhfaHcgKmFoOwotCWludCBlcnJvciA9IDAsIGk7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWc7Ci0KLQlkZXZfZGJnKHNjLT5kZXYsICJBdHRhY2ggQVRIIGh3XG4iKTsKLQotCWVycm9yID0gYXRoX2luaXRfc29mdGMoZGV2aWQsIHNjLCBzdWJzeXNpZCwgYnVzX29wcyk7Ci0JaWYgKGVycm9yICE9IDApCi0JCXJldHVybiBlcnJvcjsKLQotCWFoID0gc2MtPnNjX2FoOwotCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0KLQkvKiBnZXQgbWFjIGFkZHJlc3MgZnJvbSBoYXJkd2FyZSBhbmQgc2V0IGluIG1hYzgwMjExICovCi0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKLQotCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKLQotCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmY29tbW9uLT5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAotCQkJICAgICAgYXRoOWtfcmVnX25vdGlmaWVyKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXJlZyA9ICZjb21tb24tPnJlZ3VsYXRvcnk7Ci0KLQlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgewotCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcChzYywKLQkJCQkgICAgICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQotCQkJc2V0dXBfaHRfY2FwKHNjLAotCQkJCSAgICAgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIHR4L3J4IGVuZ2luZSAqLwotCWVycm9yID0gYXRoX3R4X2luaXQoc2MsIEFUSF9UWEJVRik7Ci0JaWYgKGVycm9yICE9IDApCi0JCWdvdG8gZXJyb3JfYXR0YWNoOwotCi0JZXJyb3IgPSBhdGhfcnhfaW5pdChzYywgQVRIX1JYQlVGKTsKLQlpZiAoZXJyb3IgIT0gMCkKLQkJZ290byBlcnJvcl9hdHRhY2g7Ci0KLQlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKLQlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQotCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKLQotCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVnKSkgewotCQllcnJvciA9IHJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIHJlZy0+YWxwaGEyKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBlcnJvcl9hdHRhY2g7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBMRUQgY29udHJvbCAqLwotCWF0aF9pbml0X2xlZHMoc2MpOwotCi0JYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKLQotCXJldHVybiAwOwotCi1lcnJvcl9hdHRhY2g6Ci0JLyogY2xlYW51cCB0eCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCi0JCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQotCWF0aDlrX3VuaW5pdF9odyhzYyk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC0xOTc2LDYgKzk0Nyw4IEBACiAJLyogU3RvcCBBTkkgKi8KIAlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOwogCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKIAlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CkBAIC0yMDE3LDEzMSArOTkwLDE0IEBACiAJCX0KIAl9CiAKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCiAJLyogU3RhcnQgQU5JICovCiAJYXRoX3N0YXJ0X2FuaShjb21tb24pOwogCiAJcmV0dXJuIHI7CiB9CiAKLS8qCi0gKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGJvdGggdGhlIERNQSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYW5kIHRoZQotICogIGJ1ZmZlcnMgaXQgY29udGFpbnMuICBUaGVzZSBhcmUgdXNlZCB0byBjb250YWluIHRoZSBkZXNjcmlwdG9ycyB1c2VkCi0gKiAgYnkgdGhlIHN5c3RlbS4KLSovCi1pbnQgYXRoX2Rlc2NkbWFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCi0JCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgIGludCBuYnVmLCBpbnQgbmRlc2MpCi17Ci0jZGVmaW5lCURTMlBIWVMoX2RkLCBfZHMpCQkJCQkJXAotCSgoX2RkKS0+ZGRfZGVzY19wYWRkciArICgoY2FkZHJfdCkoX2RzKSAtIChjYWRkcl90KShfZGQpLT5kZF9kZXNjKSkKLSNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX0NIRUNLKF9kYWRkcikgKCgoKF9kYWRkcikgJiAweEZGRikgPiAweEY3RikgPyAxIDogMCkKLSNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKF9sZW4pICgoX2xlbikgLyA0MDk2KQotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwotCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlpbnQgaSwgYnNpemUsIGVycm9yOwotCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCi0JCSAgbmFtZSwgbmJ1ZiwgbmRlc2MpOwotCi0JSU5JVF9MSVNUX0hFQUQoaGVhZCk7Ci0JLyogYXRoX2Rlc2MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIERXT1JEcyAqLwotCWlmICgoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJhdGhfZGVzYyBub3QgRFdPUkQgYWxpZ25lZFxuIik7Ci0JCUJVR19PTigoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKTsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZGQtPmRkX2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgKiBuYnVmICogbmRlc2M7Ci0KLQkvKgotCSAqIE5lZWQgYWRkaXRpb25hbCBETUEgbWVtb3J5IGJlY2F1c2Ugd2UgY2FuJ3QgdXNlCi0JICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCi0JICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KLQkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKLQkJdTMyIG5kZXNjX3NraXBwZWQgPQotCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7Ci0JCXUzMiBkbWFfbGVuOwotCi0JCXdoaWxlIChuZGVzY19za2lwcGVkKSB7Ci0JCQlkbWFfbGVuID0gbmRlc2Nfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpOwotCQkJZGQtPmRkX2Rlc2NfbGVuICs9IGRtYV9sZW47Ci0KLQkJCW5kZXNjX3NraXBwZWQgPSBBVEhfREVTQ180S0JfQk9VTkRfTlVNX1NLSVBQRUQoZG1hX2xlbik7Ci0JCX07Ci0JfQotCi0JLyogYWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KLQlkZC0+ZGRfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sCi0JCQkJCSAmZGQtPmRkX2Rlc2NfcGFkZHIsIEdGUF9LRVJORUwpOwotCWlmIChkZC0+ZGRfZGVzYyA9PSBOVUxMKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQlkcyA9IGRkLT5kZF9kZXNjOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BIG1hcDogJXAgKCV1KSAtPiAlbGx4ICgldSlcbiIsCi0JCSAgbmFtZSwgZHMsICh1MzIpIGRkLT5kZF9kZXNjX2xlbiwKLQkJICBpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOwotCi0JLyogYWxsb2NhdGUgYnVmZmVycyAqLwotCWJzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfYnVmKSAqIG5idWY7Ci0JYmYgPSBremFsbG9jKGJzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoYmYgPT0gTlVMTCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDI7Ci0JfQotCWRkLT5kZF9idWZwdHIgPSBiZjsKLQotCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyssIGJmKyssIGRzICs9IG5kZXNjKSB7Ci0JCWJmLT5iZl9kZXNjID0gZHM7Ci0JCWJmLT5iZl9kYWRkciA9IERTMlBIWVMoZGQsIGRzKTsKLQotCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCi0JCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKLQkJCS8qCi0JCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKLQkJCSAqIGJvdW5kYXJ5IGNyb3NzaW5nIChhZGRyICsgbGVuZ3RoKSB3aXRoIGEgMzIgZHdvcmQKLQkJCSAqIGRlc2NyaXB0b3IgZmV0Y2guCi0JCQkgKi8KLQkJCXdoaWxlIChBVEhfREVTQ180S0JfQk9VTkRfQ0hFQ0soYmYtPmJmX2RhZGRyKSkgewotCQkJCUJVR19PTigoY2FkZHJfdCkgYmYtPmJmX2Rlc2MgPj0KLQkJCQkgICAgICAgKChjYWRkcl90KSBkZC0+ZGRfZGVzYyArCi0JCQkJCWRkLT5kZF9kZXNjX2xlbikpOwotCi0JCQkJZHMgKz0gbmRlc2M7Ci0JCQkJYmYtPmJmX2Rlc2MgPSBkczsKLQkJCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7Ci0JCQl9Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsIGhlYWQpOwotCX0KLQlyZXR1cm4gMDsKLWZhaWwyOgotCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCi0JCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKLWZhaWw6Ci0JbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7Ci0JcmV0dXJuIGVycm9yOwotI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9DSEVDSwotI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9OVU1fU0tJUFBFRAotI3VuZGVmIERTMlBIWVMKLX0KLQotdm9pZCBhdGhfZGVzY2RtYV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCi0JCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlkbWFfZnJlZV9jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sIGRkLT5kZF9kZXNjLAotCQkJICBkZC0+ZGRfZGVzY19wYWRkcik7Ci0KLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKLQlrZnJlZShkZC0+ZGRfYnVmcHRyKTsKLQltZW1zZXQoZGQsIDAsIHNpemVvZigqZGQpKTsKLX0KLQogaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlpbnQgcW51bTsKQEAgLTIyMjAsMjggKzEwNzYsNiBAQAogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIChSZSlzdGFydCBidGNvZXggdGltZXJzCi0gKi8KLXN0YXRpYyB2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAotCQkgICJTdGFydGluZyBidGNvZXggdGltZXJzIik7Ci0KLQkvKiBtYWtlIHN1cmUgZHV0eSBjeWNsZSB0aW1lciBpcyBhbHNvIHN0b3BwZWQgd2hlbiByZXN1bWluZyAqLwotCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCi0JCWF0aDlrX2dlbl90aW1lcl9zdG9wKHNjLT5zY19haCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7Ci0JYnRjb2V4LT5idF9wcmlvcml0eV90aW1lID0gamlmZmllczsKLQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEOwotCi0JbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyk7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoOWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwpAQCAtMjQxMSwxMSArMTI0NSwxMSBAQAogCQlpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJCSAgIlNlbmRpbmcgUFMtUG9sbCB0byBwaWNrIGEgYnVmZmVyZWQgZnJhbWVcbiIpOwotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBOworCQkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBOwogCQl9IGVsc2UgewogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCQkgICJXYWtlIHVwIHRvIGNvbXBsZXRlIFRYXG4iKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0s7CisJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfVFhfQUNLOwogCQl9CiAJCS8qCiAJCSAqIFRoZSBhY3R1YWwgcmVzdG9yZSBvcGVyYXRpb24gd2lsbCBoYXBwZW4gb25seSBhZnRlcgpAQCAtMjQ2OCwyMiArMTMwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBQYXVzZSBidGNvZXggdGltZXIgYW5kIGJ0IGR1dHkgY3ljbGUgdGltZXIKLSAqLwotc3RhdGljIHZvaWQgYXRoOWtfYnRjb2V4X3RpbWVyX3BhdXNlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCWRlbF90aW1lcl9zeW5jKCZidGNvZXgtPnBlcmlvZF90aW1lcik7Ci0KLQlpZiAoYnRjb2V4LT5od190aW1lcl9lbmFibGVkKQotCQlhdGg5a19nZW5fdGltZXJfc3RvcChhaCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQlidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CkBAIC0yNTUwLDEyICsxMzY4LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJZW51bSBubDgwMjExX2lmdHlwZSBpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjU2Nyw3ICsxMzg1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWJyZWFrOwpAQCAtMjU3OCwxMSArMTM5NiwxMSBAQAogCQkJcmV0ID0gLUVOT0JVRlM7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpY19vcG1vZGUgPSBjb25mLT50eXBlOworCQlpY19vcG1vZGUgPSB2aWYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkiSW50ZXJmYWNlIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGNvbmYtPnR5cGUpOworCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCB2aWYtPnR5cGUpOwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjYxNCwxOCArMTQzMiwxOCBAQAogCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCiAJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCiAJICovCi0JaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CiAJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVFNGT09SOwogCX0KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICAgIHx8Ci0JICAgIGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgICAgfHwKKwkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CiAKIG91dDoKQEAgLTI2MzQsMTIgKzE0NTIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJaW50IGk7CiAKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwpAQCAtMjY2Miw3ICsxNDgwLDcgQEAKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTlM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7Ci0JCWlmIChzYy0+YmVhY29uLmJzbG90W2ldID09IGNvbmYtPnZpZikgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtpXSA9PSB2aWYpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdmlmIGhhZCBhbGxvY2F0ZWQgYmVhY29uICIKIAkJCSAgICAgICAic2xvdFxuIiwgX19mdW5jX18pOwogCQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7CkBAIC0yNjc1LDYgKzE0OTMsMTkgQEAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKK3ZvaWQgYXRoOWtfZW5hYmxlX3BzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXNjLT5wc19lbmFibGVkID0gdHJ1ZTsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CisJCWlmICgoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgPT0gMCkgeworCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9USU1fVElNRVI7CisJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCXNjLT5pbWFzayk7CisJCX0KKwl9CisJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworfQorCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwpAQCAtMjcxMyw2ICsxNTQ0LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAogCQlpZiAoZW5hYmxlX3JhZGlvKSB7CisJCQlzYy0+cHNfaWRsZSA9IGZhbHNlOwogCQkJYXRoX3JhZGlvX2VuYWJsZShzYywgaHcpOwogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCQkJICAibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKQEAgLTI3MjcsMzYgKzE1NTksMjcgQEAKIAkgKi8KIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewogCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1BTX0VOQUJMRUQ7Ci0JCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKLQkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7Ci0JCQkJaWYgKChzYy0+aW1hc2sgJiBBVEg5S19JTlRfVElNX1RJTUVSKSA9PSAwKSB7Ci0JCQkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVElNX1RJTUVSOwotCQkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCi0JCQkJCQkJc2MtPmltYXNrKTsKLQkJCQl9Ci0JCQl9CisJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfRU5BQkxFRDsKIAkJCS8qCiAJCQkgKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgaGFyZHdhcmUgaGFzIHJlY2VpdmVkIGFuIEFDSwogCQkJICogb2YgYSBwcmV2aW91c2x5IHNlbnQgbnVsbCBkYXRhIGZyYW1lLgogCQkJICovCi0JCQlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX05VTExGVU5DX0NPTVBMRVRFRCkpIHsKLQkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX05VTExGVU5DX0NPTVBMRVRFRDsKLQkJCQlzYy0+cHNfZW5hYmxlZCA9IHRydWU7Ci0JCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19OVUxMRlVOQ19DT01QTEVURUQpKSB7CisJCQkJc2MtPnBzX2ZsYWdzICY9IH5QU19OVUxMRlVOQ19DT01QTEVURUQ7CisJCQkJYXRoOWtfZW5hYmxlX3BzKHNjKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJfSBlbHNlIHsKIAkJCXNjLT5wc19lbmFibGVkID0gZmFsc2U7Ci0JCQlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9QU19FTkFCTEVEIHwKLQkJCQkJICBTQ19PUF9OVUxMRlVOQ19DT01QTEVURUQpOworCQkJc2MtPnBzX2ZsYWdzICY9IH4oUFNfRU5BQkxFRCB8CisJCQkJCSAgUFNfTlVMTEZVTkNfQ09NUExFVEVEKTsKIAkJCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOwotCQkJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX1dBSVRfRk9SX0JFQUNPTiB8Ci0JCQkJCQkgIFNDX09QX1dBSVRfRk9SX0NBQiB8Ci0JCQkJCQkgIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKLQkJCQkJCSAgU0NfT1BfV0FJVF9GT1JfVFhfQUNLKTsKKwkJCQlzYy0+cHNfZmxhZ3MgJj0gfihQU19XQUlUX0ZPUl9CRUFDT04gfAorCQkJCQkJICBQU19XQUlUX0ZPUl9DQUIgfAorCQkJCQkJICBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSB8CisJCQkJCQkgIFBTX1dBSVRfRk9SX1RYX0FDSyk7CiAJCQkJaWYgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKIAkJCQkJc2MtPmltYXNrICY9IH5BVEg5S19JTlRfVElNX1RJTUVSOwogCQkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCkBAIC0yNzY2LDYgKzE1ODksMTQgQEAKIAkJfQogCX0KIAorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1IpIHsKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfTU9OSVRPUikgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkJICAiSFcgb3Btb2RlIHNldCB0byBNb25pdG9yIG1vZGVcbiIpOworCQkJc2MtPnNjX2FoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOworCQl9CisJfQorCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwogCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CkBAIC0yODAxLDggKzE2MzIsMTAgQEAKIAl9CiAKIHNraXBfY2hhbl9jaGFuZ2U6Ci0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOworCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAlkaXNhYmxlX3JhZGlvID0gYXRoOWtfYWxsX3dpcGh5c19pZGxlKHNjKTsKQEAgLTI4MTAsNiArMTY0Myw3IEBACiAKIAlpZiAoZGlzYWJsZV9yYWRpbykgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgImlkbGU6IGRpc2FibGluZyByYWRpb1xuIik7CisJCXNjLT5wc19pZGxlID0gdHJ1ZTsKIAkJYXRoX3JhZGlvX2Rpc2FibGUoc2MsIGh3KTsKIAl9CiAKQEAgLTI4NTAsMjQgKzE2ODQsMjggQEAKIAkJICAiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3N0YXRpYyBpbnQgYXRoOWtfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1RBX05PVElGWV9BREQ6Ci0JCWF0aF9ub2RlX2F0dGFjaChzYywgc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJYXRoX25vZGVfZGV0YWNoKHNjLCBzdGEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJYXRoX25vZGVfYXR0YWNoKHNjLCBzdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfbm9kZV9kZXRhY2goc2MsIHN0YSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCkBAIC0yOTY2LDYgKzE4MDQsNyBAQAogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IHNsb3R0aW1lOwogCWludCBlcnJvcjsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CkBAIC0zMDAxLDYgKzE4NDAsMjUgQEAKIAkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOwogCX0KIAorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCXNsb3R0aW1lID0gOTsKKwkJZWxzZQorCQkJc2xvdHRpbWUgPSAyMDsKKwkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJLyoKKwkJCSAqIERlZmVyIHVwZGF0ZSwgc28gdGhhdCBjb25uZWN0ZWQgc3RhdGlvbnMgY2FuIGFkanVzdAorCQkJICogdGhlaXIgc2V0dGluZ3MgYXQgdGhlIHNhbWUgdGltZS4KKwkJCSAqIFNlZSBiZWFjb24uYyBmb3IgbW9yZSBkZXRhaWxzCisJCQkgKi8KKwkJCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBzbG90dGltZTsKKwkJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IFVQREFURTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5zbG90dGltZSA9IHNsb3R0aW1lOworCQkJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOworCQl9CisJfQorCiAJLyogRGlzYWJsZSB0cmFuc21pc3Npb24gb2YgYmVhY29ucyAqLwogCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSAmJiAhYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pCiAJCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CkBAIC0zMTMzLDYgKzE5OTEsNyBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJaWYgKGF0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKSkgewpAQCAtMzE0OCwxMCArMjAwNyw5IEBACiAKIAlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9TQ0FOOwogCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9TQ0FOTklORzsKLQlzcGluX3VubG9ja19iaCgmc2MtPmFuaV9sb2NrKTsKKwlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMzE1OSwxNyArMjAxNywzMCBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwotCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOworCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBhdGg5a19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhaC0+Y292ZXJhZ2VfY2xhc3MgPSBjb3ZlcmFnZV9jbGFzczsKKwlhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyhhaCk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCkBAIC0zMTc4LDcgKzIwNDksOCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlICAgPSBhdGg5a19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcgCSAgICA9IGF0aDlrX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciAgID0gYXRoOWtfY29uZmlndXJlX2ZpbHRlciwKLQkuc3RhX25vdGlmeSAgICAgICAgID0gYXRoOWtfc3RhX25vdGlmeSwKKwkuc3RhX2FkZAkgICAgPSBhdGg5a19zdGFfYWRkLAorCS5zdGFfcmVtb3ZlCSAgICA9IGF0aDlrX3N0YV9yZW1vdmUsCiAJLmNvbmZfdHggCSAgICA9IGF0aDlrX2NvbmZfdHgsCiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCkBAIC0zMTg5LDY0ICsyMDYxLDUgQEAKIAkuc3dfc2Nhbl9zdGFydCAgICAgID0gYXRoOWtfc3dfc2Nhbl9zdGFydCwKIAkuc3dfc2Nhbl9jb21wbGV0ZSAgID0gYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZSwKIAkucmZraWxsX3BvbGwgICAgICAgID0gYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUsCisJLnNldF9jb3ZlcmFnZV9jbGFzcyA9IGF0aDlrX3NldF9jb3ZlcmFnZV9jbGFzcywKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF0aDlrX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCi0JZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7Ci0JaWYgKGVycm9yICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiYXRoOWs6IFVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgIgotCQkJImFsZ29yaXRobTogJWRcbiIsCi0JCQllcnJvcik7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImF0aDlrOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdDogJWRcbiIsCi0JCQllcnJvcik7Ci0JCWdvdG8gZXJyX3JhdGVfdW5yZWdpc3RlcjsKLQl9Ci0KLQllcnJvciA9IGF0aF9wY2lfaW5pdCgpOwotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiYXRoOWs6IE5vIFBDSSBkZXZpY2VzIGZvdW5kLCBkcml2ZXIgbm90IGluc3RhbGxlZC5cbiIpOwotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3JlbW92ZV9yb290OwotCX0KLQotCWVycm9yID0gYXRoX2FoYl9pbml0KCk7Ci0JaWYgKGVycm9yIDwgMCkgewotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3BjaV9leGl0OwotCX0KLQotCXJldHVybiAwOwotCi0gZXJyX3BjaV9leGl0OgotCWF0aF9wY2lfZXhpdCgpOwotCi0gZXJyX3JlbW92ZV9yb290OgotCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7Ci0gZXJyX3JhdGVfdW5yZWdpc3RlcjoKLQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLSBlcnJfb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLW1vZHVsZV9pbml0KGF0aDlrX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQotewotCWF0aF9haGJfZXhpdCgpOwotCWF0aF9wY2lfZXhpdCgpOwotCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7Ci0JYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwotfQotbW9kdWxlX2V4aXQoYXRoOWtfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKaW5kZXggZjdhZjVlYS4uOTQ0MWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwpAQCAtMTgsMTMgKzE4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0aF9wY2lfaWRfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJDKSB9LCAvKiBQQ0ktRSA4MDIuMTFuIGJvbmRlZCBvdXQgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRCkgfSwgLyogUENJICAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRSkgfSwgLyogUENJLUUgKi8KIAl7IDAgfQpAQCAtNDksMTYgKzUwLDYgQEAKIAkJKmNzeiA9IERFRkFVTFRfQ0FDSEVMSU5FID4+IDI7ICAgLyogVXNlIHRoZSBkZWZhdWx0IHNpemUgKi8KIH0KIAotc3RhdGljIHZvaWQgYXRoX3BjaV9jbGVhbnVwKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pCi17Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHNjLT5kZXYpOwotCi0JcGNpX2lvdW5tYXAocGRldiwgc2MtPm1lbSk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKLX0KLQogc3RhdGljIGJvb2wgYXRoX3BjaV9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBjb21tb24tPmFoOwpAQCAtOTgsNyArODksNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkucmVhZF9jYWNoZXNpemUgPSBhdGhfcGNpX3JlYWRfY2FjaGVzaXplLAotCS5jbGVhbnVwID0gYXRoX3BjaV9jbGVhbnVwLAogCS5lZXByb21fcmVhZCA9IGF0aF9wY2lfZWVwcm9tX3JlYWQsCiAJLmJ0X2NvZXhfcHJlcCA9IGF0aF9wY2lfYnRfY29leF9wcmVwLAogfTsKQEAgLTExMywyNSArMTAzLDIyIEBACiAJdTE2IHN1YnN5c2lkOwogCXUzMiB2YWw7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9odyAqYWg7CiAJY2hhciBod19uYW1lWzY0XTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXQgPSAgcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKLQogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7CisJCWdvdG8gZXJyX2RtYTsKIAl9CiAKIAlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0KIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRoOWs6IDMyLWJpdCBETUEgY29uc2lzdGVudCAiCiAJCQkiRE1BIGVuYWJsZSBmYWlsZWRcbiIpOwotCQlnb3RvIGJhZDsKKwkJZ290byBlcnJfZG1hOwogCX0KIAogCS8qCkBAIC0xNzEsMjIgKzE1OCwyMiBAQAogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkOworCQlnb3RvIGVycl9yZWdpb247CiAJfQogCiAJbWVtID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwogCWlmICghbWVtKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJIG1lbW9yeSBtYXAgZXJyb3JcbiIpIDsKIAkJcmV0ID0gLUVJTzsKLQkJZ290byBiYWQxOworCQlnb3RvIGVycl9pb21hcDsKIAl9CiAKIAlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKwogCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CiAJaWYgKCFodykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBiYWQyOworCQlnb3RvIGVycl9hbGxvY19odzsKIAl9CiAKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CkBAIC0yMDEsMjUgKzE4OCwyNSBAQAogCXNjLT5kZXYgPSAmcGRldi0+ZGV2OwogCXNjLT5tZW0gPSBtZW07CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmc3Vic3lzaWQpOwotCXJldCA9IGF0aF9pbml0X2RldmljZShpZC0+ZGV2aWNlLCBzYywgc3Vic3lzaWQsICZhdGhfcGNpX2J1c19vcHMpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKLQkJZ290byBiYWQzOwotCX0KLQotCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKwkvKiBXaWxsIGJlIGNsZWFyZWQgaW4gYXRoOWtfc3RhcnQoKSAqLworCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aDlrIiwgc2MpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBiYWQ0OworCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJc2MtPmlycSA9IHBkZXYtPmlycTsKIAotCWFoID0gc2MtPnNjX2FoOwotCWF0aDlrX2h3X25hbWUoYWgsIGh3X25hbWUsIHNpemVvZihod19uYW1lKSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c2lkKTsKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShpZC0+ZGV2aWNlLCBzYywgc3Vic3lzaWQsICZhdGhfcGNpX2J1c19vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfaW5pdDsKKwl9CisKKwlhdGg5a19od19uYW1lKHNjLT5zY19haCwgaHdfbmFtZSwgc2l6ZW9mKGh3X25hbWUpKTsKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogJXMgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCiAJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKQEAgLTIyNywxNSArMjE0LDE4IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKIAogCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6CisKK2Vycl9pbml0OgorCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKK2Vycl9pcnE6CiAJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKK2Vycl9hbGxvY19odzoKIAlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKK2Vycl9pb21hcDoKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6CitlcnJfcmVnaW9uOgorCS8qIE5vdGhpbmcgKi8KK2Vycl9kbWE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNDUsOCArMjM1LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJdm9pZCBfX2lvbWVtICptZW0gPSBzYy0+bWVtOwogCi0JYXRoX2NsZWFudXAoc2MpOworCWF0aDlrX2RlaW5pdF9kZXZpY2Uoc2MpOworCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCisJcGNpX2lvdW5tYXAocGRldiwgbWVtKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKaW5kZXggMzFkZTI3ZC4uMDk5OWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaApAQCAtMzg0LDYgKzM4NCw5IEBACiAKICNkZWZpbmUgQVJfUEhZX0hFQVZZX0NMSVBfRU5BQkxFICAgICAgICAgMHg5OUUwCiAKKyNkZWZpbmUgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMgICAgMHg5OUVDCisjZGVmaW5lIEFSX1BIWV9SSUZTX0lOSVRfREVMQVkgICAgICAgICAweDAzZmYwMDAwCisKICNkZWZpbmUgQVJfUEhZX01fU0xFRVAgICAgICAweDk5ZjAKICNkZWZpbmUgQVJfUEhZX1JFRkNMS0RMWSAgICAweDk5ZjQKICNkZWZpbmUgQVJfUEhZX1JFRkNMS1BEICAgICAweDk5ZjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggNzBmZGI5ZC4uYWMzNGEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTY2OCw3ICs2NjgsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCXU4IHRyeV9wZXJfcmF0ZSwgaSA9IDAsIHJpeCwgbnJpeDsKKwl1OCB0cnlfcGVyX3JhdGUsIGkgPSAwLCByaXg7CiAJaW50IGlzX3Byb2JlID0gMDsKIAogCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCkBAIC02NzgsNDggKzY3OCw0NyBAQAogCSAqIEZvciBNdWx0aSBSYXRlIFJldHJ5IHdlIHVzZSBhIGRpZmZlcmVudCBudW1iZXIgb2YKIAkgKiByZXRyeSBhdHRlbXB0IGNvdW50cy4gVGhpcyBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGlzOgogCSAqCi0JICogTVJSWzBdID0gMgotCSAqIE1SUlsxXSA9IDIKLQkgKiBNUlJbMl0gPSAyCi0JICogTVJSWzNdID0gNAorCSAqIE1SUlswXSA9IDQKKwkgKiBNUlJbMV0gPSA0CisJICogTVJSWzJdID0gNAorCSAqIE1SUlszXSA9IDgKIAkgKgogCSAqLwotCXRyeV9wZXJfcmF0ZSA9IHNjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisJdHJ5X3Blcl9yYXRlID0gNDsKIAogCXJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CiAJcml4ID0gYXRoX3JjX2dldF9oaWdoZXN0X3JpeChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7Ci0JbnJpeCA9IHJpeDsKIAogCWlmIChpc19wcm9iZSkgewogCQkvKiBzZXQgb25lIHRyeSBmb3IgcHJvYmUgcmF0ZXMuIEZvciB0aGUKIAkJICogcHJvYmVzIGRvbid0IGVuYWJsZSBydHMgKi8KIAkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKLQkJCQkgICAgICAgMSwgbnJpeCwgMCk7CisJCQkJICAgICAgIDEsIHJpeCwgMCk7CiAKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZucml4KTsKKwkJYXRoX3JjX2dldF9sb3dlcl9yaXgocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsIHJpeCwgJnJpeCk7CiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCi0JCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgcml4LCAwKTsKIAogCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCi0JCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgcml4LCAwKTsKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSBvdGhlciByYXRlcyBmb3IgbXVsdGlyYXRlIHJldHJ5ICovCiAJZm9yICggOyBpIDwgNDsgaSsrKSB7CiAJCS8qIFVzZSB0d2ljZSB0aGUgbnVtYmVyIG9mIHRyaWVzIGZvciB0aGUgbGFzdCBNUlIgc2VnbWVudC4gKi8KIAkJaWYgKGkgKyAxID09IDQpCi0JCQl0cnlfcGVyX3JhdGUgPSA0OworCQkJdHJ5X3Blcl9yYXRlID0gODsKIAotCQlhdGhfcmNfZ2V0X2xvd2VyX3JpeChyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdiwgcml4LCAmbnJpeCk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZyaXgpOwogCQkvKiBBbGwgb3RoZXIgcmF0ZXMgaW4gdGhlIHNlcmllcyBoYXZlIFJUUyBlbmFibGVkICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAotCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDEpOworCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIHJpeCwgMSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKaW5kZXggOWViOTZmNS4uNGY2ZDZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKQEAgLTU3LDYgKzU3LDEwIEBACiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFMpCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0kpCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9EU19IR0kpKQorI2RlZmluZSBXTEFOX1JDX1BIWV8yMChfcGh5KSAgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9TUykJCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EUykJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX1NTX0hHSSkJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTX0hHSSkpCiAjZGVmaW5lIFdMQU5fUkNfUEhZXzQwKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX1NTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCA0NzczNjVlLi4xY2E0MmU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCkBAIC0zNjQsMTAgKzM2NCwxMCBAQAogCWlmIChtZW1jbXAoY29tbW9uLT5jdXJic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47IC8qIG5vdCBmcm9tIG91ciBjdXJyZW50IEFQICovCiAKLQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX0JFQUNPTjsKKwlzYy0+cHNfZmxhZ3MgJj0gflBTX1dBSVRfRk9SX0JFQUNPTjsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05fU1lOQykgewotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTl9TWU5DOworCWlmIChzYy0+cHNfZmxhZ3MgJiBQU19CRUFDT05fU1lOQykgeworCQlzYy0+cHNfZmxhZ3MgJj0gflBTX0JFQUNPTl9TWU5DOwogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJICAiUmVjb25maWd1cmUgQmVhY29uIHRpbWVycyBiYXNlZCBvbiAiCiAJCQkgICJ0aW1lc3RhbXAgZnJvbSB0aGUgQVBcbiIpOwpAQCAtMzg0LDE3ICszODQsMTcgQEAKIAkJICovCiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsICJSZWNlaXZlZCBEVElNIGJlYWNvbiBpbmRpY2F0aW5nICIKIAkJCSAgImJ1ZmZlcmVkIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUocylcbiIpOwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQ0FCIHwgU0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQ0FCIHwgUFNfV0FJVF9GT1JfQkVBQ09OOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0NBQikgeworCWlmIChzYy0+cHNfZmxhZ3MgJiBQU19XQUlUX0ZPUl9DQUIpIHsKIAkJLyoKIAkJICogVGhpcyBjYW4gaGFwcGVuIGlmIGEgYnJvYWRjYXN0IGZyYW1lIGlzIGRyb3BwZWQgb3IgdGhlIEFQCiAJCSAqIGZhaWxzIHRvIHNlbmQgYSBmcmFtZSBpbmRpY2F0aW5nIHRoYXQgYWxsIENBQiBmcmFtZXMgaGF2ZQogCQkgKiBiZWVuIGRlbGl2ZXJlZC4KIAkJICovCi0JCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQ0FCOworCQlzYy0+cHNfZmxhZ3MgJj0gflBTX1dBSVRfRk9SX0NBQjsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCSAgIlBTIHdhaXQgZm9yIENBQiBmcmFtZXMgdGltZWQgb3V0XG4iKTsKIAl9CkBAIC00MDgsMTAgKzQwOCwxMCBAQAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAogCS8qIFByb2Nlc3MgQmVhY29uIGFuZCBDQUIgcmVjZWl2ZSBpbiBQUyBzdGF0ZSAqLwotCWlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSAmJgorCWlmICgoc2MtPnBzX2ZsYWdzICYgUFNfV0FJVF9GT1JfQkVBQ09OKSAmJgogCSAgICBpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWF0aF9yeF9wc19iZWFjb24oc2MsIHNrYik7Ci0JZWxzZSBpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0NBQikgJiYKKwllbHNlIGlmICgoc2MtPnBzX2ZsYWdzICYgUFNfV0FJVF9GT1JfQ0FCKSAmJgogCQkgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKIAkJICBpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpICYmCiAJCSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgpAQCAtNDIwLDIwICs0MjAsMjAgQEAKIAkJICogTm8gbW9yZSBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lcyB0byBiZSByZWNlaXZlZCBhdCB0aGlzCiAJCSAqIHBvaW50LgogCQkgKi8KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9DQUI7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfV0FJVF9GT1JfQ0FCOwogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJICAiQWxsIFBTIENBQiBmcmFtZXMgcmVjZWl2ZWQsIGJhY2sgdG8gc2xlZXBcbiIpOwotCX0gZWxzZSBpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSAmJgorCX0gZWxzZSBpZiAoKHNjLT5wc19mbGFncyAmIFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSAmJgogCQkgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYKIAkJICAgIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQTsKKwkJc2MtPnBzX2ZsYWdzICY9IH5QU19XQUlUX0ZPUl9QU1BPTExfREFUQTsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCSAgIkdvaW5nIGJhY2sgdG8gc2xlZXAgYWZ0ZXIgaGF2aW5nIHJlY2VpdmVkICIKLQkJCSAgIlBTLVBvbGwgZGF0YSAoMHgleClcbiIsCi0JCQlzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwKLQkJCQkJU0NfT1BfV0FJVF9GT1JfQ0FCIHwKLQkJCQkJU0NfT1BfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9UWF9BQ0spKTsKKwkJCSAgIlBTLVBvbGwgZGF0YSAoMHglbHgpXG4iLAorCQkJc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CisJCQkJCVBTX1dBSVRfRk9SX0NBQiB8CisJCQkJCVBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKKwkJCQkJUFNfV0FJVF9GT1JfVFhfQUNLKSk7CiAJfQogfQogCkBAIC01NzEsNiArNTcxLDggQEAKIAkJaHcgPSBhdGhfZ2V0X3ZpcnRfaHcoc2MsIGhkcik7CiAJCXJ4X3N0YXRzID0gJmRzLT5kc19yeHN0YXQ7CiAKKwkJYXRoX2RlYnVnX3N0YXRfcngoc2MsIGJmKTsKKwogCQkvKgogCQkgKiBJZiB3ZSdyZSBhc2tlZCB0byBmbHVzaCByZWNlaXZlIHF1ZXVlLCBkaXJlY3RseQogCQkgKiBjaGFpbiBpdCBiYWNrIGF0IHRoZSBxdWV1ZSB3aXRob3V0IHByb2Nlc3NpbmcgaXQuCkBAIC02MzEsOSArNjMzLDkgQEAKIAkJCXNjLT5yeC5yeG90aGVyYW50ID0gMDsKIAkJfQogCi0JCWlmICh1bmxpa2VseShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwKLQkJCQkJICAgICBTQ19PUF9XQUlUX0ZPUl9DQUIgfAotCQkJCQkgICAgIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSkpCisJCWlmICh1bmxpa2VseShzYy0+cHNfZmxhZ3MgJiAoUFNfV0FJVF9GT1JfQkVBQ09OIHwKKwkJCQkJICAgICBQU19XQUlUX0ZPUl9DQUIgfAorCQkJCQkgICAgIFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSkpCiAJCQlhdGhfcnhfcHMoc2MsIHNrYik7CiAKIAkJYXRoX3J4X3NlbmRfdG9fbWFjODAyMTEoaHcsIHNjLCBza2IsIHJ4cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggOGU2NTNmYi4uNzJjZmE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtMTU0Nyw5ICsxNTQ3LDkgQEAKIAogI2RlZmluZSBBUl9CVF9DT0VYX1dFSUdIVCAgICAgICAgICAweDgxNzQKICNkZWZpbmUgQVJfQlRfQ09FWF9XR0hUCQkgICAweGZmNTUKLSNkZWZpbmUgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVAkgICAweGZmY2MKLSNkZWZpbmUgQVJfU1RPTVBfTE9XX1dMQU5fV0dIVAkgICAweGFhYTgKLSNkZWZpbmUgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQJICAgMHhhYTAwCisjZGVmaW5lIEFSX1NUT01QX0FMTF9XTEFOX1dHSFQJICAgMHhmY2ZjCisjZGVmaW5lIEFSX1NUT01QX0xPV19XTEFOX1dHSFQJICAgMHhhOGE4CisjZGVmaW5lIEFSX1NUT01QX05PTkVfV0xBTl9XR0hUCSAgIDB4MDAwMAogI2RlZmluZSBBUl9CVENPRVhfQlRfV0dIVCAgICAgICAgICAweDAwMDBmZmZmCiAjZGVmaW5lIEFSX0JUQ09FWF9CVF9XR0hUX1MgICAgICAgIDAKICNkZWZpbmUgQVJfQlRDT0VYX1dMX1dHSFQgICAgICAgICAgMHhmZmZmMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKaW5kZXggY2QyNmNhYS4uYTQzZmJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBhZGRyKTsKIAotCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKKwlhdGg5a19zZXRfaHdfY2FwYWIoc2MsIGh3KTsKIAogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggMjliZjMzNi4uNDcyOTRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xNDk4LDI2ICsxNDk4LDYgQEAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCiAJCWN0c3JhdGUgfD0gcmF0ZS0+aHdfdmFsdWVfc2hvcnQ7CiAKLQkvKgotCSAqIEFUSDlLX1RYREVTQ19SVFNFTkEgYW5kIEFUSDlLX1RYREVTQ19DVFNFTkEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KLQkgKiBDaGVjayB0aGUgZmlyc3QgcmF0ZSBpbiB0aGUgc2VyaWVzIHRvIGRlY2lkZSB3aGV0aGVyIFJUUy9DVFMKLQkgKiBvciBDVFMtdG8tc2VsZiBoYXMgdG8gYmUgdXNlZC4KLQkgKi8KLQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQotCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7Ci0JZWxzZSBpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQotCS8qIEZJWE1FOiBIYW5kbGUgYWdncmVnYXRpb24gcHJvdGVjdGlvbiAqLwotCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYKLQkgICAgKCFiZl9pc2FnZ3IoYmYpIHx8IChiZl9pc2FnZ3IoYmYpICYmIGJmLT5iZl9hbCA8IDgxOTIpKSkgewotCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7Ci0JfQotCi0JLyogRm9yIEFSNTQxNiAtIFJUUyBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBmcmFtZSBsYXJnZXIgdGhhbiA4SyAqLwotCWlmIChiZl9pc2FnZ3IoYmYpICYmIChiZi0+YmZfYWwgPiBzYy0+c2NfYWgtPmNhcHMucnRzX2FnZ3JfbGltaXQpKQotCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOwotCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlib29sIGlzXzQwLCBpc19zZ2ksIGlzX3NwOwogCQlpbnQgcGh5OwpAQCAtMTUyOSw4ICsxNTA5LDE1IEBACiAJCXNlcmllc1tpXS5UcmllcyA9IHJhdGVzW2ldLmNvdW50OwogCQlzZXJpZXNbaV0uQ2hTZWwgPSBjb21tb24tPnR4X2NoYWlubWFzazsKIAotCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCWlmICgoc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ICYmIGJmX2lzYWdncihiZikpIHx8CisJCSAgICAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpKSB7CiAJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKKwkJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisJCX0gZWxzZSBpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKKwkJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19DVFNFTkE7CisJCX0KKwogCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQogCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTXzIwNDA7CiAJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKQEAgLTE1NjgsNiArMTU1NSwxNCBAQAogCQkJcGh5LCByYXRlLT5iaXRyYXRlICogMTAwLCBiZi0+YmZfZnJtbGVuLCByaXgsIGlzX3NwKTsKIAl9CiAKKwkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCisJaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IHNjLT5zY19haC0+Y2Fwcy5ydHNfYWdncl9saW1pdCkpCisJCWZsYWdzICY9IH5BVEg5S19UWERFU0NfUlRTRU5BOworCisJLyogQVRIOUtfVFhERVNDX1JUU0VOQSBhbmQgQVRIOUtfVFhERVNDX0NUU0VOQSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLworCWlmIChmbGFncyAmIEFUSDlLX1RYREVTQ19SVFNFTkEpCisJCWZsYWdzICY9IH5BVEg5S19UWERFU0NfQ1RTRU5BOworCiAJLyogc2V0IGR1cl91cGRhdGVfZW4gZm9yIGwtc2lnIGNvbXB1dGF0aW9uIGV4Y2VwdCBmb3IgUFMtUG9sbCBmcmFtZXMgKi8KIAlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsCiAJCQkJICAgICBiZi0+YmZfbGFzdGJmLT5iZl9kZXNjLApAQCAtMTY0OCw3ICsxNjQzLDcgQEAKIAkvKiB0YWcgaWYgdGhpcyBpcyBhIG51bGxmdW5jIGZyYW1lIHRvIGVuYWJsZSBQUyB3aGVuIEFQIGFja3MgaXQgKi8KIAlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSAmJiBpZWVlODAyMTFfaGFzX3BtKGZjKSkgewogCQliZi0+YmZfaXNudWxsZnVuYyA9IHRydWU7Ci0JCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTlVMTEZVTkNfQ09NUExFVEVEOworCQlzYy0+cHNfZmxhZ3MgJj0gflBTX05VTExGVU5DX0NPTVBMRVRFRDsKIAl9IGVsc2UKIAkJYmYtPmJmX2lzbnVsbGZ1bmMgPSBmYWxzZTsKIApAQCAtMTg1OCwxNSArMTg1MywxNSBAQAogCQlza2JfcHVsbChza2IsIHBhZHNpemUpOwogCX0KIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0spIHsKLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9UWF9BQ0s7CisJaWYgKHNjLT5wc19mbGFncyAmIFBTX1dBSVRfRk9SX1RYX0FDSykgeworCQlzYy0+cHNfZmxhZ3MgJj0gflBTX1dBSVRfRk9SX1RYX0FDSzsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCSAgIkdvaW5nIGJhY2sgdG8gc2xlZXAgYWZ0ZXIgaGF2aW5nICIKLQkJCSAgInJlY2VpdmVkIFRYIHN0YXR1cyAoMHgleClcbiIsCi0JCQlzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwKLQkJCQkJU0NfT1BfV0FJVF9GT1JfQ0FCIHwKLQkJCQkJU0NfT1BfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9UWF9BQ0spKTsKKwkJCSAgInJlY2VpdmVkIFRYIHN0YXR1cyAoMHglbHgpXG4iLAorCQkJc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CisJCQkJCVBTX1dBSVRfRk9SX0NBQiB8CisJCQkJCVBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKKwkJCQkJUFNfV0FJVF9GT1JfVFhfQUNLKSk7CiAJfQogCiAJaWYgKHVubGlrZWx5KHR4X2luZm8tPnBhZFswXSAmIEFUSF9UWF9JTkZPX0ZSQU1FX1RZUEVfSU5URVJOQUwpKQpAQCAtMjA1MywxMSArMjA0OCwxMCBAQAogCQkgKi8KIAkJaWYgKGJmLT5iZl9pc251bGxmdW5jICYmCiAJCSAgICAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWF9BQ0tFRCkpIHsKLQkJCWlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFNfRU5BQkxFRCkpIHsKLQkJCQlzYy0+cHNfZW5hYmxlZCA9IHRydWU7Ci0JCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOwotCQkJfSBlbHNlCi0JCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX05VTExGVU5DX0NPTVBMRVRFRDsKKwkJCWlmICgoc2MtPnBzX2ZsYWdzICYgUFNfRU5BQkxFRCkpCisJCQkJYXRoOWtfZW5hYmxlX3BzKHNjKTsKKwkJCWVsc2UKKwkJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfTlVMTEZVTkNfQ09NUExFVEVEOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmgKaW5kZXggZDZiNjg1YS4uODI2MzYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmgKQEAgLTY1LDExICs2NSwxMSBAQAogI2RlZmluZSBBVEhfREJHX0RFRkFVTFQgKEFUSF9EQkdfRkFUQUwpCiAKICNpZmRlZiBDT05GSUdfQVRIX0RFQlVHCi12b2lkIGF0aF9wcmludChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgYXRoX3ByaW50KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcHJpbnQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKLQkJCSAgICAgaW50IGRiZ19tYXNrLAotCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK2F0aF9wcmludChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogfQogI2VuZGlmIC8qIENPTkZJR19BVEhfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCmluZGV4IDAzOWFjNDkuLjA0YWJkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwpAQCAtMTEwLDggKzExMCw5IEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc193d3Jfc2t1KHUxNiByZWdkKQogewotCXJldHVybiAoKHJlZ2QgJiBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgfHwKLQkJKHJlZ2QgPT0gV09STEQpOworCXJldHVybiAoKHJlZ2QgJiBDT1VOVFJZX0VSRF9GTEFHKSAhPSBDT1VOVFJZX0VSRF9GTEFHKSAmJgorCQkoKChyZWdkICYgV09STERfU0tVX01BU0spID09IFdPUkxEX1NLVV9QUkVGSVgpIHx8CisJCShyZWdkID09IFdPUkxEKSk7CiB9CiAKIHN0YXRpYyB1MTYgYXRoX3JlZ2RfZ2V0X2VlcHJvbVJEKHN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYwppbmRleCA5MmY4N2ZiLi45YWIxMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYwpAQCAtMzEsNyArMzEsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkF0bWVsIGF0NzZjNTA2IFBDSSB3aXJlbGVzcyBjYXJkcyIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FyZF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYXJkX2lkcykgPSB7CiAJeyAweDExMTQsIDB4MDUwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKaW5kZXggNjRjMTJlMS4uMGEwMGQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKQEAgLTc4LDExICs3OCwxMSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi0jIERhdGEgdHJhbnNmZXJzIHRvIHRoZSBkZXZpY2UgdmlhIFBJTwotIyBUaGlzIGlzIG9ubHkgbmVlZGVkIG9uIFBDTUNJQSBhbmQgU0RJTyBkZXZpY2VzLiBBbGwgb3RoZXJzIGNhbiBkbyBETUEgcHJvcGVybHkuCisjRGF0YSB0cmFuc2ZlcnMgdG8gdGhlIGRldmljZSB2aWEgUElPLiBXZSB3YW50IGl0IGFzIGEgZmFsbGJhY2sgZXZlbgorIyBpZiB3ZSBjYW4gZG8gRE1BLgogY29uZmlnIEI0M19QSU8KIAlib29sCi0JZGVwZW5kcyBvbiBCNDMgJiYgKEI0M19TRElPIHx8IEI0M19QQ01DSUEgfHwgQjQzX0ZPUkNFX1BJTykKKwlkZXBlbmRzIG9uIEI0MwogCXNlbGVjdCBTU0JfQkxPQ0tJTwogCWRlZmF1bHQgeQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKaW5kZXggODQ3NzJhMi4uNWU4M2I2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogYjQzLXkJCQkJKz0gbG8ubwogYjQzLXkJCQkJKz0gd2EubwogYjQzLXkJCQkJKz0gZG1hLm8KLWI0My0kKENPTkZJR19CNDNfUElPKQkJKz0gcGlvLm8KK2I0My15CQkJCSs9IHBpby5vCiBiNDMteQkJCQkrPSByZmtpbGwubwogYjQzLSQoQ09ORklHX0I0M19MRURTKQkJKz0gbGVkcy5vCiBiNDMtJChDT05GSUdfQjQzX1BDTUNJQSkJKz0gcGNtY2lhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCBjNDg0Y2MyLi5iODgwN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC0yNTQsNiArMjU0LDE0IEBACiAjZGVmaW5lIEI0M19TSE1fU0hfTUFYQkZSQU1FUwkJMHgwMDgwCS8qIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBpbiBhIGJ1cnN0ICovCiAjZGVmaW5lIEI0M19TSE1fU0hfU1BVV0tVUAkJMHgwMDk0CS8qIHByZS13YWtldXAgZm9yIHN5bnRoIFBVIGluIHVzICovCiAjZGVmaW5lIEI0M19TSE1fU0hfUFJFVEJUVAkJMHgwMDk2CS8qIHByZS1UQlRUIGluIHVzICovCisvKiBTSE1fU0hBUkVEIHR4IGlxIHdvcmthcm91bmRzICovCisjZGVmaW5lIEI0M19TSE1fU0hfTlBIWV9UWElRVzAJCTB4MDcwMAorI2RlZmluZSBCNDNfU0hNX1NIX05QSFlfVFhJUVcxCQkweDA3MDIKKyNkZWZpbmUgQjQzX1NITV9TSF9OUEhZX1RYSVFXMgkJMHgwNzA0CisjZGVmaW5lIEI0M19TSE1fU0hfTlBIWV9UWElRVzMJCTB4MDcwNgorLyogU0hNX1NIQVJFRCB0eCBwd3IgY3RybCAqLworI2RlZmluZSBCNDNfU0hNX1NIX05QSFlfVFhQV1JfSU5EWDAJMHgwNzA4CisjZGVmaW5lIEI0M19TSE1fU0hfTlBIWV9UWFBXUl9JTkRYMQkweDA3MEUKIAogLyogU0hNX1NDUkFUQ0ggb2Zmc2V0cyAqLwogI2RlZmluZSBCNDNfU0hNX1NDX01JTkNPTlQJCTB4MDAwMwkvKiBNaW5pbXVtIGNvbnRlbnRpb24gd2luZG93ICovCkBAIC02OTQsNiArNzAyLDcgQEAKIAlib29sIHJhZGlvX2h3X2VuYWJsZTsJLyogc2F2ZWQgc3RhdGUgb2YgcmFkaW8gaGFyZHdhcmUgZW5hYmxlZCBzdGF0ZSAqLwogCWJvb2wgcW9zX2VuYWJsZWQ7CQkvKiBUUlVFLCBpZiBRb1MgaXMgdXNlZC4gKi8KIAlib29sIGh3Y3J5cHRvX2VuYWJsZWQ7CQkvKiBUUlVFLCBpZiBIVyBjcnlwdG8gYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQuICovCisJYm9vbCB1c2VfcGlvOwkJCS8qIFRSVUUgaWYgbmV4dCBpbml0IHNob3VsZCB1c2UgUElPICovCiAKIAkvKiBQSFkvUmFkaW8gZGV2aWNlLiAqLwogCXN0cnVjdCBiNDNfcGh5IHBoeTsKQEAgLTgyMiwxMSArODMxLDkgQEAKIAkvKiBUaGUgZGV2aWNlIExFRHMuICovCiAJc3RydWN0IGI0M19sZWRzIGxlZHM7CiAKLSNpZmRlZiBDT05GSUdfQjQzX1BJTwogCS8qIEttYWxsb2MnZWQgc2NyYXRjaCBzcGFjZSBmb3IgUElPIFRYL1JYLiBQcm90ZWN0ZWQgYnkgd2wtPm11dGV4LiAqLwogCXU4IHBpb19zY3JhdGNoc3BhY2VbMTEwXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOwogCXU4IHBpb190YWlsc3BhY2VbNF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oOCkpKTsKLSNlbmRpZiAvKiBDT05GSUdfQjQzX1BJTyAqLwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYjQzX3dsICpod190b19iNDNfd2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCkBAIC04NzcsMjAgKzg4NCwxNSBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wgYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotI2lmZGVmIENPTkZJR19CNDNfUElPCiAJcmV0dXJuIGRldi0+X191c2luZ19waW9fdHJhbnNmZXJzOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX0I0M19GT1JDRV9QSU8KLSMgZGVmaW5lIEI0M19GT1JDRV9QSU8JMQorIyBkZWZpbmUgQjQzX1BJT19ERUZBVUxUIDEKICNlbHNlCi0jIGRlZmluZSBCNDNfRk9SQ0VfUElPCTAKKyMgZGVmaW5lIEI0M19QSU9fREVGQVVMVCAwCiAjZW5kaWYKIAotCiAvKiBNZXNzYWdlIHByaW50aW5nICovCiB2b2lkIGI0M2luZm8oc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCmluZGV4IDg4ZDFmZDAuLmJlN2FiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKQEAgLTEzNjksNyArMTM2OSw2IEBACiAJCWI0M2VycihkZXYtPndsLCAiRE1BIHR4IG1hcHBpbmcgZmFpbHVyZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyaW5nLT5ucl90eF9wYWNrZXRzKys7CiAJaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKSB8fAogCSAgICBzaG91bGRfaW5qZWN0X292ZXJmbG93KHJpbmcpKSB7CiAJCS8qIFRoaXMgVFggcmluZyBpcyBmdWxsLiAqLwpAQCAtMTUwMCwyMiArMTQ5OSw2IEBACiAJfQogfQogCi12b2lkIGI0M19kbWFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0JY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7Ci0Jc3RydWN0IGI0M19kbWFyaW5nICpyaW5nOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7Ci0JCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwotCi0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7Ci0JCXN0YXRzW2ldLmNvdW50ID0gcmluZy0+bnJfdHhfcGFja2V0czsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGRtYV9yeChzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsIGludCAqc2xvdCkKIHsKIAljb25zdCBzdHJ1Y3QgYjQzX2RtYV9vcHMgKm9wcyA9IHJpbmctPm9wczsKQEAgLTE2NTMsNyArMTYzNiw2IEBACiAJYjQzX3Bvd2VyX3NhdmluZ19jdGxfYml0cyhkZXYsIDApOwogfQogCi0jaWZkZWYgQ09ORklHX0I0M19QSU8KIHN0YXRpYyB2b2lkIGRpcmVjdF9maWZvX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZG1hdHlwZSB0eXBlLAogCQkJICAgdTE2IG1taW9fYmFzZSwgYm9vbCBlbmFibGUpCiB7CkBAIC0xNjg3LDQgKzE2NjksMyBAQAogCW1taW9fYmFzZSA9IGI0M19kbWFjb250cm9sbGVyX2Jhc2UodHlwZSwgZW5naW5lX2luZGV4KTsKIAlkaXJlY3RfZmlmb19yeChkZXYsIHR5cGUsIG1taW9fYmFzZSwgZW5hYmxlKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfQjQzX1BJTyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGY3YWIzN2MuLmRjOTE5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTIyOCw4ICsyMjgsNiBAQAogCWludCB1c2VkX3Nsb3RzOwogCS8qIEN1cnJlbnRseSB1c2VkIHNsb3QgaW4gdGhlIHJpbmcuICovCiAJaW50IGN1cnJlbnRfc2xvdDsKLQkvKiBUb3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50LiBTdGF0aXN0aWNzIG9ubHkuICovCi0JdW5zaWduZWQgaW50IG5yX3R4X3BhY2tldHM7CiAJLyogRnJhbWVvZmZzZXQgaW4gb2N0ZXRzLiAqLwogCXUzMiBmcmFtZW9mZnNldDsKIAkvKiBEZXNjcmlwdG9yIGJ1ZmZlciBzaXplLiAqLwpAQCAtMjc4LDkgKzI3Niw2IEBACiB2b2lkIGI0M19kbWFfdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfZG1hX3R4X3Jlc3VtZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCi12b2lkIGI0M19kbWFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwotCiBpbnQgYjQzX2RtYV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNfZG1hX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA0OTBmYjQ1ZC4uMTUyMWIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC02Nyw3ICs2NywxMiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBNT0RVTEVfRklSTVdBUkUoQjQzX1NVUFBPUlRFRF9GSVJNV0FSRV9JRCk7Ci0KK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTEuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTMuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTQuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTUuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlNS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGU5LmZ3Iik7CiAKIHN0YXRpYyBpbnQgbW9kcGFyYW1fYmFkX2ZyYW1lc19wcmVlbXB0OwogbW9kdWxlX3BhcmFtX25hbWVkKGJhZF9mcmFtZXNfcHJlZW1wdCwgbW9kcGFyYW1fYmFkX2ZyYW1lc19wcmVlbXB0LCBpbnQsIDA0NDQpOwpAQCAtMTAyLDYgKzEwNyw5IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQodmVyYm9zZSwgYjQzX21vZHBhcmFtX3ZlcmJvc2UsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJMb2cgbWVzc2FnZSB2ZXJib3NpdHk6IDA9ZXJyb3IsIDE9d2FybiwgMj1pbmZvKGRlZmF1bHQpLCAzPWRlYnVnIik7CiAKK2ludCBiNDNfbW9kcGFyYW1fcGlvID0gQjQzX1BJT19ERUZBVUxUOworbW9kdWxlX3BhcmFtX25hbWVkKHBpbywgYjQzX21vZHBhcmFtX3BpbywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocGlvLCAiVXNlIFBJTyBhY2Nlc3NlcyBieSBkZWZhdWx0OiAwPURNQSwgMT1QSU8iKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkIGI0M19zc2JfdGJsW10gPSB7CiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCA1KSwKQEAgLTExMCw2ICsxMTgsNyBAQAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgOSksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMCksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMSksCisJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMiksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMyksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNSksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNiksCkBAIC04NDIsOCArODUxLDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIGI0M19vcF91cGRhdGVfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLCBjb25zdCB1OCAqYWRkciwKLQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgICB1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKQEAgLTg1MiwxOSArODYzLDE5IEBACiAJaWYgKEI0M19XQVJOX09OKCFtb2RwYXJhbV9od3RraXApKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCisJLyogVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBSWCBwYXRoIHRocm91Z2ggbWFjODAyMTEsIHdoZXJlCisJICogb3VyIG11dGV4IGlzIGFscmVhZHkgbG9ja2VkLiAqLworCUI0M19XQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJndsLT5tdXRleCkpOwogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKLQlpZiAoIWRldiB8fCBiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9JTklUSUFMSVpFRCkKLQkJZ290byBvdXRfdW5sb2NrOworCUI0M19XQVJOX09OKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpOwogCiAJa2V5bWFjX3dyaXRlKGRldiwgaW5kZXgsIE5VTEwpOwkvKiBGaXJzdCB6ZXJvIG91dCBtYWMgdG8gYXZvaWQgcmFjZSAqLwogCiAJcnhfdGtpcF9waGFzZTFfd3JpdGUoZGV2LCBpbmRleCwgaXYzMiwgcGhhc2Uxa2V5KTsKLQlrZXltYWNfd3JpdGUoZGV2LCBpbmRleCwgYWRkcik7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCS8qIG9ubHkgcGFpcndpc2UgVEtJUCBrZXlzIGFyZSBzdXBwb3J0ZWQgcmlnaHQgbm93ICovCisJaWYgKFdBUk5fT04oIXN0YSkpCisJCXJldHVybjsKKwlrZXltYWNfd3JpdGUoZGV2LCBpbmRleCwgc3RhLT5hZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZG9fa2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTE3OTMsOCArMTgwNCw5IEBACiAJCQkgICAgICAgZG1hX3JlYXNvbls0XSwgZG1hX3JlYXNvbls1XSk7CiAJCQliNDNlcnIoZGV2LT53bCwgIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgRE1BICIKIAkJCSAgICAgICAib24geW91ciBzeXN0ZW0uIFBsZWFzZSB1c2UgUElPIGluc3RlYWQuXG4iKTsKLQkJCWI0M2VycihkZXYtPndsLCAiQ09ORklHX0I0M19GT1JDRV9QSU8gbXVzdCBiZSBzZXQgaW4gIgotCQkJICAgICAgICJ5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuIik7CisJCQkvKiBGYWxsIGJhY2sgdG8gUElPIHRyYW5zZmVycyBpZiB3ZSBnZXQgZmF0YWwgRE1BIGVycm9ycyEgKi8KKwkJCWRldi0+dXNlX3BpbyA9IDE7CisJCQliNDNfY29udHJvbGxlcl9yZXN0YXJ0KGRldiwgIkRNQSBlcnJvciIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmIChtZXJnZWRfZG1hX3JlYXNvbiAmIEI0M19ETUFJUlFfTk9ORkFUQUxNQVNLKSB7CkBAIC0zMzQ1LDI3ICszMzU3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGI0M19vcF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwotCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKLQlpbnQgZXJyID0gLUVOT0RFVjsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwotCWlmIChkZXYgJiYgYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpIHsKLQkJaWYgKGI0M191c2luZ19waW9fdHJhbnNmZXJzKGRldikpCi0JCQliNDNfcGlvX2dldF90eF9zdGF0cyhkZXYsIHN0YXRzKTsKLQkJZWxzZQotCQkJYjQzX2RtYV9nZXRfdHhfc3RhdHMoZGV2LCBzdGF0cyk7Ci0JCWVyciA9IDA7Ci0JfQotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgYjQzX29wX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7CkBAIC0zNTY5LDYgKzM1NjAsMTIgQEAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJcGh5ID0gJmRldi0+cGh5OwogCisJaWYgKGNvbmZfaXNfaHQoY29uZikpCisJCXBoeS0+aXNfNDBtaHogPQorCQkJKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSB8fCBjb25mX2lzX2h0NDBfcGx1cyhjb25mKSk7CisJZWxzZQorCQlwaHktPmlzXzQwbWh6ID0gZmFsc2U7CisKIAliNDNfbWFjX3N1c3BlbmQoZGV2KTsKIAogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUykKQEAgLTM5NzAsNiArMzk2Nyw3IEBACiAJfQogCiAJLyogV2UgYXJlIHJlYWR5IHRvIHJ1bi4gKi8KKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoZGV2LT53bC0+aHcpOwogCWI0M19zZXRfc3RhdHVzKGRldiwgQjQzX1NUQVRfU1RBUlRFRCk7CiAKIAkvKiBTdGFydCBkYXRhIGZsb3cgKFRYL1JYKS4gKi8KQEAgLTQzNjAsNyArNDM1OCw3IEBACiAKIAlpZiAoKGRldi0+ZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENNQ0lBKSB8fAogCSAgICAoZGV2LT5kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TRElPKSB8fAotCSAgICBCNDNfRk9SQ0VfUElPKSB7CisJICAgIGRldi0+dXNlX3BpbykgewogCQlkZXYtPl9fdXNpbmdfcGlvX3RyYW5zZmVycyA9IDE7CiAJCWVyciA9IGI0M19waW9faW5pdChkZXYpOwogCX0gZWxzZSB7CkBAIC00Mzc5LDggKzQzNzcsNiBAQAogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGRldi0+d2wtPmh3KTsKIAotCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7Ci0KIAliNDNfc2V0X3N0YXR1cyhkZXYsIEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKIAogb3V0OgpAQCAtNDM5NSw3ICs0MzkxLDcgQEAKIH0KIAogc3RhdGljIGludCBiNDNfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CkBAIC00NDAzLDI0ICs0Mzk5LDI0IEBACiAKIAkvKiBUT0RPOiBhbGxvdyBXRFMvQVAgZGV2aWNlcyB0byBjb2V4aXN0ICovCiAKLQlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAlpZiAod2wtPm9wZXJhdGluZykKIAkJZ290byBvdXRfbXV0ZXhfdW5sb2NrOwogCi0JYjQzZGJnKHdsLCAiQWRkaW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNkYmcod2wsICJBZGRpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJd2wtPm9wZXJhdGluZyA9IDE7Ci0Jd2wtPnZpZiA9IGNvbmYtPnZpZjsKLQl3bC0+aWZfdHlwZSA9IGNvbmYtPnR5cGU7Ci0JbWVtY3B5KHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwl3bC0+dmlmID0gdmlmOworCXdsLT5pZl90eXBlID0gdmlmLT50eXBlOworCW1lbWNweSh3bC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCiAJYjQzX2FkanVzdF9vcG1vZGUoZGV2KTsKIAliNDNfc2V0X3ByZXRidHQoZGV2KTsKQEAgLTQ0MzUsMTcgKzQ0MzEsMTcgQEAKIH0KIAogc3RhdGljIHZvaWQgYjQzX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAKLQliNDNkYmcod2wsICJSZW1vdmluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJYjQzZGJnKHdsLCAiUmVtb3ZpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJQjQzX1dBUk5fT04oIXdsLT5vcGVyYXRpbmcpOwotCUI0M19XQVJOX09OKHdsLT52aWYgIT0gY29uZi0+dmlmKTsKKwlCNDNfV0FSTl9PTih3bC0+dmlmICE9IHZpZik7CiAJd2wtPnZpZiA9IE5VTEw7CiAKIAl3bC0+b3BlcmF0aW5nID0gMDsKQEAgLTQ1ODYsNyArNDU4Miw2IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLnVwZGF0ZV90a2lwX2tleQk9IGI0M19vcF91cGRhdGVfdGtpcF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKIAkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKQEAgLTQ4MzAsNiArNDgyNSw3IEBACiAJaWYgKCF3bGRldikKIAkJZ290byBvdXQ7CiAKKwl3bGRldi0+dXNlX3BpbyA9IGI0M19tb2RwYXJhbV9waW87CiAJd2xkZXYtPmRldiA9IGRldjsKIAl3bGRldi0+d2wgPSB3bDsKIAliNDNfc2V0X3N0YXR1cyh3bGRldiwgQjQzX1NUQVRfVU5JTklUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCmluZGV4IDc1YjI2ZTEuLjhmN2Q3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYwpAQCAtNDIxLDMgKzQyMSw0OCBAQAogewogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZMCwgb24gPyAwIDogMHhGNCk7CiB9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL0NvcmRpYyAqLworc3RydWN0IGI0M19jMzIgYjQzX2NvcmRpYyhpbnQgdGhldGEpCit7CisJdTMyIGFyY3RnW10gPSB7IDI5NDkxMjAsIDE3NDA5NjcsIDkxOTg3OSwgNDY2OTQ1LCAyMzQzNzksIDExNzMwNCwKKwkJICAgICAgNTg2NjYsIDI5MzM1LCAxNDY2OCwgNzMzNCwgMzY2NywgMTgzMywgOTE3LCA0NTgsCisJCSAgICAgIDIyOSwgMTE1LCA1NywgMjksIH07CisJdTggaTsKKwlzMzIgdG1wOworCXM4IHNpZ254ID0gMTsKKwl1MzIgYW5nbGUgPSAwOworCXN0cnVjdCBiNDNfYzMyIHJldCA9IHsgLmkgPSAzOTc5NywgLnEgPSAwLCB9OworCisJd2hpbGUgKHRoZXRhID4gKDE4MCA8PCAxNikpCisJCXRoZXRhIC09ICgzNjAgPDwgMTYpOworCXdoaWxlICh0aGV0YSA8IC0oMTgwIDw8IDE2KSkKKwkJdGhldGEgKz0gKDM2MCA8PCAxNik7CisKKwlpZiAodGhldGEgPiAoOTAgPDwgMTYpKSB7CisJCXRoZXRhIC09ICgxODAgPDwgMTYpOworCQlzaWdueCA9IC0xOworCX0gZWxzZSBpZiAodGhldGEgPCAtKDkwIDw8IDE2KSkgeworCQl0aGV0YSArPSAoMTgwIDw8IDE2KTsKKwkJc2lnbnggPSAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDw9IDE3OyBpKyspIHsKKwkJaWYgKHRoZXRhID4gYW5nbGUpIHsKKwkJCXRtcCA9IHJldC5pIC0gKHJldC5xID4+IGkpOworCQkJcmV0LnEgKz0gcmV0LmkgPj4gaTsKKwkJCXJldC5pID0gdG1wOworCQkJYW5nbGUgKz0gYXJjdGdbaV07CisJCX0gZWxzZSB7CisJCQl0bXAgPSByZXQuaSArIChyZXQucSA+PiBpKTsKKwkJCXJldC5xIC09IHJldC5pID4+IGk7CisJCQlyZXQuaSA9IHRtcDsKKwkJCWFuZ2xlIC09IGFyY3RnW2ldOworCQl9CisJfQorCisJcmV0LmkgKj0gc2lnbng7CisJcmV0LnEgKj0gc2lnbng7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKaW5kZXggOWVkZDRlOC4uYmQ0ODBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCkBAIC01LDYgKzUsMTIgQEAKIAogc3RydWN0IGI0M193bGRldjsKIAorLyogQ29tcGxleCBudW1iZXIgdXNpbmcgMiAzMi1iaXQgc2lnbmVkIGludGVnZXJzICovCitzdHJ1Y3QgYjQzX2MzMiB7IHMzMiBpLCBxOyB9OworCisjZGVmaW5lIENPUkRJQ19DT05WRVJUKHZhbHVlKQkoKCh2YWx1ZSkgPj0gMCkgPyBcCisJCQkJICgoKCh2YWx1ZSkgPj4gMTUpICsgMSkgPj4gMSkgOiBcCisJCQkJIC0oKCgoLSh2YWx1ZSkpID4+IDE1KSArIDEpID4+IDEpKQogCiAvKiBQSFkgcmVnaXN0ZXIgcm91dGluZyBiaXRzICovCiAjZGVmaW5lIEI0M19QSFlST1VURQkJCTB4MEMwMCAvKiBQSFkgcmVnaXN0ZXIgcm91dGluZyBiaXRzIG1hc2sgKi8KQEAgLTIxMiw2ICsyMTgsOSBAQAogCWJvb2wgc3VwcG9ydHNfMmdoejsKIAlib29sIHN1cHBvcnRzXzVnaHo7CiAKKwkvKiBIVCBpbmZvICovCisJYm9vbCBpc180MG1oejsKKwogCS8qIEdNT0RFIGJpdCBlbmFibGVkPyAqLwogCWJvb2wgZ21vZGU7CiAKQEAgLTQxOCw1ICs0MjcsNiBAQAogICovCiB2b2lkIGI0M19waHlvcF9zd2l0Y2hfYW5hbG9nX2dlbmVyaWMoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9uKTsKIAorc3RydWN0IGI0M19jMzIgYjQzX2NvcmRpYyhpbnQgdGhldGEpOwogCiAjZW5kaWYgLyogTElOVVhfQjQzX1BIWV9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCAzZTA0NmVjLi4xODUyMTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC04MCw2ICs4MCw3IEBACiAJZGV2LT5waHkubHAgPSBOVUxMOwogfQogCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9MUC9SZWFkQmFuZFNyb20gKi8KIHN0YXRpYyB2b2lkIGxwcGh5X3JlYWRfYmFuZF9zcHJvbShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CkBAIC0xMDEsNiArMTAyLDEyIEBACiAJCW1heHB3ciA9IGJ1cy0+c3Byb20ubWF4cHdyX2JnOwogCQlscHBoeS0+bWF4X3R4X3B3cl9tZWRfYmFuZCA9IG1heHB3cjsKIAkJY2NrcG8gPSBidXMtPnNwcm9tLmNjazJncG87CisJCS8qCisJCSAqIFdlIGRvbid0IHJlYWQgU1BST00ncyBvcG8gYXMgc3BlY3Mgc2F5LiBPbiByZXY4IFNQUk9NcworCQkgKiBvcG8gPT0gb2ZkbTJncG8gYW5kIHdlIGRvbid0IGtub3cgYW55IFNTQiB3aXRoIExQLVBIWQorCQkgKiBhbmQgU1BST00gcmV2IGJlbG93IDguCisJCSAqLworCQlCNDNfV0FSTl9PTihidXMtPnNwcm9tLnJldmlzaW9uIDwgOCk7CiAJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTJncG87CiAJCWlmIChjY2twbykgewogCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMTcwMywxOSArMTcxMCw2IEBACiAJLmMwID0gMCwKIH07CiAKLXN0YXRpYyB1OCBscHBoeV9uYml0cyhzMzIgdmFsKQotewotCXUzMiB0bXAgPSBhYnModmFsKTsKLQl1OCBuYml0cyA9IDA7Ci0KLQl3aGlsZSAodG1wICE9IDApIHsKLQkJbmJpdHMrKzsKLQkJdG1wID4+PSAxOwotCX0KLQotCXJldHVybiBuYml0czsKLX0KLQogc3RhdGljIGludCBscHBoeV9jYWxjX3J4X2lxX2NvbXAoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgc2FtcGxlcykKIHsKIAlzdHJ1Y3QgbHBwaHlfaXFfZXN0IGlxX2VzdDsKQEAgLTE3NDIsOCArMTczNiw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXByb2RfbXNiID0gbHBwaHlfbmJpdHMocHJvZCk7Ci0JcV9tc2IgPSBscHBoeV9uYml0cyhxcHdyKTsKKwlwcm9kX21zYiA9IGZscyhhYnMocHJvZCkpOworCXFfbXNiID0gZmxzKGFicyhxcHdyKSk7CiAJdG1wMSA9IHByb2RfbXNiIC0gMjA7CiAKIAlpZiAodG1wMSA+PSAwKSB7CkBAIC0xNzczLDQ3ICsxNzY3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBDb21wbGV4IG51bWJlciB1c2luZyAyIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgKi8KLXR5cGVkZWYgc3RydWN0IHtzMzIgaSwgcTt9IGxwcGh5X2MzMjsKLQotc3RhdGljIGxwcGh5X2MzMiBscHBoeV9jb3JkaWMoaW50IHRoZXRhKQotewotCXUzMiBhcmN0Z1tdID0geyAyOTQ5MTIwLCAxNzQwOTY3LCA5MTk4NzksIDQ2Njk0NSwgMjM0Mzc5LCAxMTczMDQsCi0JCSAgICAgIDU4NjY2LCAyOTMzNSwgMTQ2NjgsIDczMzQsIDM2NjcsIDE4MzMsIDkxNywgNDU4LAotCQkgICAgICAyMjksIDExNSwgNTcsIDI5LCB9OwotCWludCBpLCB0bXAsIHNpZ254ID0gMSwgYW5nbGUgPSAwOwotCWxwcGh5X2MzMiByZXQgPSB7IC5pID0gMzk3OTcsIC5xID0gMCwgfTsKLQotCXRoZXRhID0gY2xhbXBfdChpbnQsIHRoZXRhLCAtMTgwLCAxODApOwotCi0JaWYgKHRoZXRhID4gOTApIHsKLQkJdGhldGEgLT0gMTgwOwotCQlzaWdueCA9IC0xOwotCX0gZWxzZSBpZiAodGhldGEgPCAtOTApIHsKLQkJdGhldGEgKz0gMTgwOwotCQlzaWdueCA9IC0xOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPD0gMTc7IGkrKykgewotCQlpZiAodGhldGEgPiBhbmdsZSkgewotCQkJdG1wID0gcmV0LmkgLSAocmV0LnEgPj4gaSk7Ci0JCQlyZXQucSArPSByZXQuaSA+PiBpOwotCQkJcmV0LmkgPSB0bXA7Ci0JCQlhbmdsZSArPSBhcmN0Z1tpXTsKLQkJfSBlbHNlIHsKLQkJCXRtcCA9IHJldC5pICsgKHJldC5xID4+IGkpOwotCQkJcmV0LnEgLT0gcmV0LmkgPj4gaTsKLQkJCXJldC5pID0gdG1wOwotCQkJYW5nbGUgLT0gYXJjdGdbaV07Ci0JCX0KLQl9Ci0KLQlyZXQuaSAqPSBzaWdueDsKLQlyZXQucSAqPSBzaWdueDsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGxwcGh5X3J1bl9zYW1wbGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHNhbXBsZXMsIHUxNiBsb29wcywKIAkJCSAgICAgIHUxNiB3YWl0KQogewpAQCAtMTgzMSw4ICsxNzg0LDkgQEAKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKIAl1MTYgYnVmWzY0XTsKLQlpbnQgaSwgc2FtcGxlcyA9IDAsIGFuZ2xlID0gMCwgcm90YXRpb24gPSAoOSAqIGZyZXEpIC8gNTAwOwotCWxwcGh5X2MzMiBzYW1wbGU7CisJaW50IGksIHNhbXBsZXMgPSAwLCBhbmdsZSA9IDA7CisJaW50IHJvdGF0aW9uID0gKCgoMzYgKiBmcmVxKSAvIDIwKSA8PCAxNikgLyAxMDA7CisJc3RydWN0IGI0M19jMzIgc2FtcGxlOwogCiAJbHBwaHktPnR4X3RvbmVfZnJlcSA9IGZyZXE7CiAKQEAgLTE4NDgsMTAgKzE4MDIsMTAgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2FtcGxlczsgaSsrKSB7Ci0JCXNhbXBsZSA9IGxwcGh5X2NvcmRpYyhhbmdsZSk7CisJCXNhbXBsZSA9IGI0M19jb3JkaWMoYW5nbGUpOwogCQlhbmdsZSArPSByb3RhdGlvbjsKLQkJYnVmW2ldID0gKChzYW1wbGUuaSAqIG1heCkgJiAweEZGKSA8PCA4OwotCQlidWZbaV0gfD0gKHNhbXBsZS5xICogbWF4KSAmIDB4RkY7CisJCWJ1ZltpXSA9IENPUkRJQ19DT05WRVJUKChzYW1wbGUuaSAqIG1heCkgJiAweEZGKSA8PCA4OworCQlidWZbaV0gfD0gQ09SRElDX0NPTlZFUlQoKHNhbXBsZS5xICogbWF4KSAmIDB4RkYpOwogCX0KIAogCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoNSwgMCksIHNhbXBsZXMsIGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jCmluZGV4IDk5MjMxOGE3Li43OTViYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwpAQCAtMjgsNyArMjgsNTAgQEAKICNpbmNsdWRlICJiNDMuaCIKICNpbmNsdWRlICJwaHlfbi5oIgogI2luY2x1ZGUgInRhYmxlc19ucGh5LmgiCisjaW5jbHVkZSAibWFpbi5oIgogCitzdHJ1Y3QgbnBoeV90eGdhaW5zIHsKKwl1MTYgdHhnbVsyXTsKKwl1MTYgcGdhWzJdOworCXUxNiBwYWRbMl07CisJdTE2IGlwYVsyXTsKK307CisKK3N0cnVjdCBucGh5X2lxY2FsX3BhcmFtcyB7CisJdTE2IHR4Z207CisJdTE2IHBnYTsKKwl1MTYgcGFkOworCXUxNiBpcGE7CisJdTE2IGNhbF9nYWluOworCXUxNiBuY29ycls1XTsKK307CisKK3N0cnVjdCBucGh5X2lxX2VzdCB7CisJczMyIGlxMF9wcm9kOworCXUzMiBpMF9wd3I7CisJdTMyIHEwX3B3cjsKKwlzMzIgaXExX3Byb2Q7CisJdTMyIGkxX3B3cjsKKwl1MzIgcTFfcHdyOworfTsKKworZW51bSBiNDNfbnBoeV9yZl9zZXF1ZW5jZSB7CisJQjQzX1JGU0VRX1JYMlRYLAorCUI0M19SRlNFUV9UWDJSWCwKKwlCNDNfUkZTRVFfUkVTRVQyUlgsCisJQjQzX1JGU0VRX1VQREFURV9HQUlOSCwKKwlCNDNfUkZTRVFfVVBEQVRFX0dBSU5MLAorCUI0M19SRlNFUV9VUERBVEVfR0FJTlUsCit9OworCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zZXRfcmZfc2VxdWVuY2Uoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjbWQsCisJCQkJCXU4ICpldmVudHMsIHU4ICpkZWxheXMsIHU4IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBiNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIGVudW0gYjQzX25waHlfcmZfc2VxdWVuY2Ugc2VxKTsKK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgZmllbGQsCisJCQkJCQl1MTYgdmFsdWUsIHU4IGNvcmUsIGJvb2wgb2ZmKTsKK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGZpZWxkLAorCQkJCQkJdTE2IHZhbHVlLCB1OCBjb3JlKTsKIAogdm9pZCBiNDNfbnBoeV9zZXRfcnhhbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCiB7Ly9UT0RPCkBAIC0xOTcsMTczICsyNDAsMTAyMCBAQAogCQkgICAgIH5CNDNfTlBIWV9SRkNUTF9DTURfRU4pOwogfQogCi0jZGVmaW5lIG50YWJfdXBsb2FkKGRldiwgb2Zmc2V0LCBkYXRhKSBkbyB7IFwKLQkJdW5zaWduZWQgaW50IGk7CQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgKG9mZnNldCMjX1NJWkUpOyBpKyspCQkJXAotCQkJYjQzX250YWJfd3JpdGUoZGV2LCAob2Zmc2V0KSArIGksIChkYXRhKVtpXSk7CVwKLQl9IHdoaWxlICgwKQotCi0vKiBVcGxvYWQgdGhlIE4tUEhZIHRhYmxlcy4gKi8KKy8qCisgKiBVcGxvYWQgdGhlIE4tUEhZIHRhYmxlcy4KKyAqIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vSW5pdFRhYmxlcworICovCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV90YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLyogU3RhdGljIHRhYmxlcyAqLwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfRlJBTUVTVFJVQ1QsIGI0M19udGFiX2ZyYW1lc3RydWN0KTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0ZSQU1FTFQsIGI0M19udGFiX2ZyYW1lbG9va3VwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RNQVAsIGI0M19udGFiX3RtYXApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERUUk4sIGI0M19udGFiX3RkdHJuKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0lOVExFVkVMLCBiNDNfbnRhYl9pbnRsZXZlbCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9QSUxPVCwgYjQzX250YWJfcGlsb3QpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1RMVCwgYjQzX250YWJfcGlsb3RsdCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREkyMEEwLCBiNDNfbnRhYl90ZGkyMGEwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RESTIwQTEsIGI0M19udGFiX3RkaTIwYTEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJNDBBMCwgYjQzX250YWJfdGRpNDBhMCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREk0MEExLCBiNDNfbnRhYl90ZGk0MGExKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0JESSwgYjQzX250YWJfYmRpKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0NIQU5FU1QsIGI0M19udGFiX2NoYW5uZWxlc3QpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfTUNTLCBiNDNfbnRhYl9tY3MpOwotCi0JLyogVm9sYXRpbGUgdGFibGVzICovCi0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9OT0lTRVZBUjEwLCBiNDNfbnRhYl9ub2lzZXZhcjEwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX05PSVNFVkFSMTEsIGI0M19udGFiX25vaXNldmFyMTEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfRVNUUExULCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0VTVFBMVCwgYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9JUUxULCBiNDNfbnRhYl9pcWx0MCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9JUUxULCBiNDNfbnRhYl9pcWx0MSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MSk7CisJaWYgKGRldi0+cGh5LnJldiA8IDMpCisJCWI0M19ucGh5X3JldjBfMV8yX3RhYmxlc19pbml0KGRldik7CisJZWxzZQorCQliNDNfbnBoeV9yZXYzcGx1c190YWJsZXNfaW5pdChkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBiNDNfbnBoeV93b3JrYXJvdW5kcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1BBJTIwb3ZlcnJpZGUgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3BhX292ZXJyaWRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCBlbmFibGUpCiB7Ci0Jc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJdTE2IHRtcDsKIAotCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfSVFGTElQLAotCQkgICAgQjQzX05QSFlfSVFGTElQX0FEQzEgfCBCNDNfTlBIWV9JUUZMSVBfQURDMik7Ci0JaWYgKDEgLyogRklYTUUgYmFuZCBpcyAyLjRHSHogKi8pIHsKLQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DTEFTU0NUTCwKLQkJCSAgICBCNDNfTlBIWV9DTEFTU0NUTF9DQ0tFTik7CisJaWYgKCFlbmFibGUpIHsKKwkJbnBoeS0+cmZjdHJsX2ludGMxX3NhdmUgPSBiNDNfcGh5X3JlYWQoZGV2LAorCQkJCQkJICAgICAgIEI0M19OUEhZX1JGQ1RMX0lOVEMxKTsKKwkJbnBoeS0+cmZjdHJsX2ludGMyX3NhdmUgPSBiNDNfcGh5X3JlYWQoZGV2LAorCQkJCQkJICAgICAgIEI0M19OUEhZX1JGQ1RMX0lOVEMyKTsKKwkJYmFuZCA9IGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCk7CisJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQl0bXAgPSAweDYwMDsKKwkJCWVsc2UKKwkJCQl0bXAgPSAweDQ4MDsKKwkJfSBlbHNlIHsKKwkJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJdG1wID0gMHgxODA7CisJCQllbHNlCisJCQkJdG1wID0gMHgxMjA7CisJCX0KKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCB0bXApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHRtcCk7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQ0xBU1NDVEwsCi0JCQkgICAgIH5CNDNfTlBIWV9DTEFTU0NUTF9DQ0tFTik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwKKwkJCQlucGh5LT5yZmN0cmxfaW50YzFfc2F2ZSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMiwKKwkJCQlucGh5LT5yZmN0cmxfaW50YzJfc2F2ZSk7CiAJfQotCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1NV9DMV9UWF9SRl9TUEFSRSwgMHg4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGUkFNRURFTEFZLCA4KTsKLQotCS8qIEZpeHVwIHNvbWUgdGFibGVzICovCi0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDApLCAweEEpOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDEwKSwgMHhBKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgwMiksIDB4Q0RBQSk7Ci0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTIpLCAweENEQUEpOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDA4KSwgMCk7Ci0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTgpLCAwKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgwNyksIDB4N0FBQik7Ci0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTcpLCAweDdBQUIpOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDA2KSwgMHg4MDApOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDE2KSwgMHg4MDApOwotCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX0xPMSwgMHgyRDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDEsIDB4MzAxKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfTE8yLCAweDJEOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMiwgMHgzMDEpOwotCi0JLy9UT0RPIHNldCBSRiBzZXF1ZW5jZQotCi0JLyogU2V0IG5hcnJvd2JhbmQgY2xpcCB0aHJlc2hvbGQgKi8KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzFfTkJDTElQVEhSRVMsIDY2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfTkJDTElQVEhSRVMsIDY2KTsKLQotCS8qIFNldCB3aWRlYmFuZCBjbGlwIDIgdGhyZXNob2xkICovCi0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfQ0xJUFdCVEhSRVMsCi0JCQl+QjQzX05QSFlfQzFfQ0xJUFdCVEhSRVNfQ0xJUDIsCi0JCQkyMSA8PCBCNDNfTlBIWV9DMV9DTElQV0JUSFJFU19DTElQMl9TSElGVCk7Ci0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfQ0xJUFdCVEhSRVMsCi0JCQl+QjQzX05QSFlfQzJfQ0xJUFdCVEhSRVNfQ0xJUDIsCi0JCQkyMSA8PCBCNDNfTlBIWV9DMl9DTElQV0JUSFJFU19DTElQMl9TSElGVCk7Ci0KLQkvKiBTZXQgQ2xpcCAyIGRldGVjdCAqLwotCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzFfQ0dBSU5JLAotCQkgICAgQjQzX05QSFlfQzFfQ0dBSU5JX0NMMkRFVEVDVCk7Ci0JYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DMl9DR0FJTkksCi0JCSAgICBCNDNfTlBIWV9DMl9DR0FJTklfQ0wyREVURUNUKTsKLQotCWlmICgwIC8qRklYTUUqLykgewotCQkvKiBTZXQgZHdlbGwgbGVuZ3RocyAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQ0xJUDFfTkJEV0VMTF9MRU4sIDQzKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NMSVAyX05CRFdFTExfTEVOLCA0Myk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9XMUNMSVAxX0RXRUxMX0xFTiwgOSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9XMUNMSVAyX0RXRUxMX0xFTiwgOSk7Ci0KLQkJLyogU2V0IGdhaW4gYmFja29mZiAqLwotCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9DR0FJTkksCi0JCQkJfkI0M19OUEhZX0MxX0NHQUlOSV9HQUlOQktPRkYsCi0JCQkJMSA8PCBCNDNfTlBIWV9DMV9DR0FJTklfR0FJTkJLT0ZGX1NISUZUKTsKLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfQ0dBSU5JLAotCQkJCX5CNDNfTlBIWV9DMl9DR0FJTklfR0FJTkJLT0ZGLAotCQkJCTEgPDwgQjQzX05QSFlfQzJfQ0dBSU5JX0dBSU5CS09GRl9TSElGVCk7Ci0KLQkJLyogU2V0IEhQVkdBMiBpbmRleCAqLwotCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9JTklUR0FJTiwKLQkJCQl+QjQzX05QSFlfQzFfSU5JVEdBSU5fSFBWR0EyLAotCQkJCTYgPDwgQjQzX05QSFlfQzFfSU5JVEdBSU5fSFBWR0EyX1NISUZUKTsKLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfSU5JVEdBSU4sCi0JCQkJfkI0M19OUEhZX0MyX0lOSVRHQUlOX0hQVkdBMiwKLQkJCQk2IDw8IEI0M19OUEhZX0MyX0lOSVRHQUlOX0hQVkdBMl9TSElGVCk7Ci0KLQkJLy9GSVhNRSB2ZXJpZnkgdGhhdCB0aGUgc3BlY3MgcmVhbGx5IG1lYW4gdG8gdXNlIGF1dG9pbmMgaGVyZS4KLQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig3LCAweDEwNikgKyBpLCAweDY3Myk7Ci0JfQotCi0JLyogU2V0IG1pbmltdW0gZ2FpbiB2YWx1ZSAqLwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MxX01JTk1BWF9HQUlOLAotCQkJfkI0M19OUEhZX0MxX01JTkdBSU4sCi0JCQkyMyA8PCBCNDNfTlBIWV9DMV9NSU5HQUlOX1NISUZUKTsKLQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMl9NSU5NQVhfR0FJTiwKLQkJCX5CNDNfTlBIWV9DMl9NSU5HQUlOLAotCQkJMjMgPDwgQjQzX05QSFlfQzJfTUlOR0FJTl9TSElGVCk7Ci0KLQlpZiAocGh5LT5yZXYgPCAyKSB7Ci0JCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1NDUkFNX1NJR0NUTCwKLQkJCSAgICAgfkI0M19OUEhZX1NDUkFNX1NJR0NUTF9TQ00pOwotCX0KLQotCS8qIFNldCBwaGFzZSB0cmFjayBhbHBoYSBhbmQgYmV0YSAqLwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0EwLCAweDEyNSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BIQVNFVFJfQTEsIDB4MUIzKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9BMiwgMHgxMDUpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IwLCAweDE2RSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BIQVNFVFJfQjEsIDB4Q0QpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IyLCAweDIwKTsKIH0KIAorLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9UeExwRmJ3ICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV90eF9scF9mYncoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXUxNiB0bXA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKTsKKwlib29sIGlwYSA9IChucGh5LT5pcGEyZ19vbiAmJiBiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHx8CisJCQkobnBoeS0+aXBhNWdfb24gJiYgYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQlpZiAoaXBhKSB7CisJCQl0bXAgPSA0OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IzMlMyLAorCQkJICAgICAgKCgoKCh0bXAgPDwgMykgfCB0bXApIDw8IDMpIHwgdG1wKSA8PCAzKSB8IHRtcCk7CisJCX0KKworCQl0bXAgPSAxOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMiwKKwkJCSAgICAgICgoKCgodG1wIDw8IDMpIHwgdG1wKSA8PCAzKSB8IHRtcCkgPDwgMykgfCB0bXApOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9CbWFjUGh5Q2xrRmdjICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9ibWFjX2Nsb2NrX2ZnYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgZm9yY2UpCit7CisJdTMyIHRtc2xvdzsKKworCWlmIChkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX04pCisJCXJldHVybjsKKworCXRtc2xvdyA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpOworCWlmIChmb3JjZSkKKwkJdG1zbG93IHw9IFNTQl9UTVNMT1dfRkdDOworCWVsc2UKKwkJdG1zbG93ICY9IH5TU0JfVE1TTE9XX0ZHQzsKKwlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX1RNU0xPVywgdG1zbG93KTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9DQ0EgKi8KIHN0YXRpYyB2b2lkIGI0M19ucGh5X3Jlc2V0X2NjYShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJdTE2IGJiY2ZnOwogCi0Jc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1csCi0JCSAgICBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XKSB8IFNTQl9UTVNMT1dfRkdDKTsKKwliNDNfbnBoeV9ibWFjX2Nsb2NrX2ZnYyhkZXYsIDEpOwogCWJiY2ZnID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQkJDRkcpOwotCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQkJDRkcsIEI0M19OUEhZX0JCQ0ZHX1JTVENDQSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0JCQ0ZHLAotCQkgICAgICBiYmNmZyAmIH5CNDNfTlBIWV9CQkNGR19SU1RDQ0EpOwotCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLAotCQkgICAgc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVykgJiB+U1NCX1RNU0xPV19GR0MpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywgYmJjZmcgfCBCNDNfTlBIWV9CQkNGR19SU1RDQ0EpOworCXVkZWxheSgxKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQkJDRkcsIGJiY2ZnICYgfkI0M19OUEhZX0JCQ0ZHX1JTVENDQSk7CisJYjQzX25waHlfYm1hY19jbG9ja19mZ2MoZGV2LCAwKTsKKwliNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShkZXYsIEI0M19SRlNFUV9SRVNFVDJSWCk7CiB9CiAKLWVudW0gYjQzX25waHlfcmZfc2VxdWVuY2UgewotCUI0M19SRlNFUV9SWDJUWCwKLQlCNDNfUkZTRVFfVFgyUlgsCi0JQjQzX1JGU0VRX1JFU0VUMlJYLAotCUI0M19SRlNFUV9VUERBVEVfR0FJTkgsCi0JQjQzX1JGU0VRX1VQREFURV9HQUlOTCwKLQlCNDNfUkZTRVFfVVBEQVRFX0dBSU5VLAotfTsKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vTUlNT0NvbmZpZyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdXBkYXRlX21pbW9fY29uZmlnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgczMyIHByZWFtYmxlKQoreworCXUxNiBtaW1vY2ZnID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfTUlNT0NGRyk7CiAKKwltaW1vY2ZnIHw9IEI0M19OUEhZX01JTU9DRkdfQVVUTzsKKwlpZiAocHJlYW1ibGUgPT0gMSkKKwkJbWltb2NmZyB8PSBCNDNfTlBIWV9NSU1PQ0ZHX0dGTUlYOworCWVsc2UKKwkJbWltb2NmZyAmPSB+QjQzX05QSFlfTUlNT0NGR19HRk1JWDsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9NSU1PQ0ZHLCBtaW1vY2ZnKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9DaGFpbnMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3VwZGF0ZV90eHJ4X2NoYWluKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKworCWJvb2wgb3ZlcnJpZGUgPSBmYWxzZTsKKwl1MTYgY2hhaW4gPSAweDMzOworCisJaWYgKG5waHktPnR4cnhfY2hhaW4gPT0gMCkgeworCQljaGFpbiA9IDB4MTE7CisJCW92ZXJyaWRlID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG5waHktPnR4cnhfY2hhaW4gPT0gMSkgeworCQljaGFpbiA9IDB4MjI7CisJCW92ZXJyaWRlID0gdHJ1ZTsKKwl9CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLAorCQkJfihCNDNfTlBIWV9SRlNFUUNBX1RYRU4gfCBCNDNfTlBIWV9SRlNFUUNBX1JYRU4pLAorCQkJY2hhaW4pOworCisJaWYgKG92ZXJyaWRlKQorCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwKKwkJCQlCNDNfTlBIWV9SRlNFUU1PREVfQ0FPVkVSKTsKKwllbHNlCisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwKKwkJCQl+QjQzX05QSFlfUkZTRVFNT0RFX0NBT1ZFUik7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhJcUVzdCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcnhfaXFfZXN0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgc3RydWN0IG5waHlfaXFfZXN0ICplc3QsCisJCQkJdTE2IHNhbXBzLCB1OCB0aW1lLCBib29sIHdhaXQpCit7CisJaW50IGk7CisJdTE2IHRtcDsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9JUUVTVF9TQU1DTlQsIHNhbXBzKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9JUUVTVF9XVCwgfkI0M19OUEhZX0lRRVNUX1dUX1ZBTCwgdGltZSk7CisJaWYgKHdhaXQpCisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfSVFFU1RfQ01ELCBCNDNfTlBIWV9JUUVTVF9DTURfTU9ERSk7CisJZWxzZQorCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9JUUVTVF9DTUQsIH5CNDNfTlBIWV9JUUVTVF9DTURfTU9ERSk7CisKKwliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0lRRVNUX0NNRCwgQjQzX05QSFlfSVFFU1RfQ01EX1NUQVJUKTsKKworCWZvciAoaSA9IDEwMDA7IGk7IGktLSkgeworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9DTUQpOworCQlpZiAoISh0bXAgJiBCNDNfTlBIWV9JUUVTVF9DTURfU1RBUlQpKSB7CisJCQllc3QtPmkwX3B3ciA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUEFDQ19ISTApIDw8IDE2KSB8CisJCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX0lQQUNDX0xPMCk7CisJCQllc3QtPnEwX3B3ciA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9RUEFDQ19ISTApIDw8IDE2KSB8CisJCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX1FQQUNDX0xPMCk7CisJCQllc3QtPmlxMF9wcm9kID0gKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX0lRQUNDX0hJMCkgPDwgMTYpIHwKKwkJCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfSVFBQ0NfTE8wKTsKKworCQkJZXN0LT5pMV9wd3IgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfSVBBQ0NfSEkxKSA8PCAxNikgfAorCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUEFDQ19MTzEpOworCQkJZXN0LT5xMV9wd3IgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfUVBBQ0NfSEkxKSA8PCAxNikgfAorCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9RUEFDQ19MTzEpOworCQkJZXN0LT5pcTFfcHJvZCA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUUFDQ19ISTEpIDw8IDE2KSB8CisJCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX0lRQUNDX0xPMSk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9CisJbWVtc2V0KGVzdCwgMCwgc2l6ZW9mKCplc3QpKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SeElxQ29lZmZzICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yeF9pcV9jb2VmZnMoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIHdyaXRlLAorCQkJCQlzdHJ1Y3QgYjQzX3BoeV9uX2lxX2NvbXAgKnBjb21wKQoreworCWlmICh3cml0ZSkgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzFfUlhJUV9DT01QQTAsIHBjb21wLT5hMCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMV9SWElRX0NPTVBCMCwgcGNvbXAtPmIwKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MyX1JYSVFfQ09NUEExLCBwY29tcC0+YTEpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfUlhJUV9DT01QQjEsIHBjb21wLT5iMSk7CisJfSBlbHNlIHsKKwkJcGNvbXAtPmEwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQzFfUlhJUV9DT01QQTApOworCQlwY29tcC0+YjAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DMV9SWElRX0NPTVBCMCk7CisJCXBjb21wLT5hMSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MyX1JYSVFfQ09NUEExKTsKKwkJcGNvbXAtPmIxID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQzJfUlhJUV9DT01QQjEpOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SeENhbFBoeUNsZWFudXAgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3J4X2NhbF9waHlfY2xlYW51cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGNvcmUpCit7CisJdTE2ICpyZWdzID0gZGV2LT5waHkubi0+dHhfcnhfY2FsX3BoeV9zYXZlcmVnczsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCByZWdzWzBdKTsKKwlpZiAoY29yZSA9PSAwKSB7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEsIHJlZ3NbMV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCByZWdzWzJdKTsKKwl9IGVsc2UgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyLCByZWdzWzFdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCByZWdzWzJdKTsKKwl9CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCByZWdzWzNdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHJlZ3NbNF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzEsIHJlZ3NbNV0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzIsIHJlZ3NbNl0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMxLCByZWdzWzddKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgcmVnc1s4XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BBUERfRU4wLCByZWdzWzldKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEFQRF9FTjEsIHJlZ3NbMTBdKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SeENhbFBoeVNldHVwICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yeF9jYWxfcGh5X3NldHVwKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggY29yZSkKK3sKKwl1OCByeHZhbCwgdHh2YWw7CisJdTE2ICpyZWdzID0gZGV2LT5waHkubi0+dHhfcnhfY2FsX3BoeV9zYXZlcmVnczsKKworCXJlZ3NbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBKTsKKwlpZiAoY29yZSA9PSAwKSB7CisJCXJlZ3NbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEpOworCQlyZWdzWzJdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxKTsKKwl9IGVsc2UgeworCQlyZWdzWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyKTsKKwkJcmVnc1syXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSKTsKKwl9CisJcmVnc1szXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxKTsKKwlyZWdzWzRdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIpOworCXJlZ3NbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzEpOworCXJlZ3NbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzIpOworCXJlZ3NbN10gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMxKTsKKwlyZWdzWzhdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUik7CisJcmVnc1s5XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1BBUERfRU4wKTsKKwlyZWdzWzEwXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1BBUERfRU4xKTsKKworCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1BBUERfRU4wLCB+MHgwMDAxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QQVBEX0VOMSwgfjB4MDAwMSk7CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCAodTE2KX5CNDNfTlBIWV9SRlNFUUNBX1JYRElTLAorCQkJKCgxIC0gY29yZSkgPDwgQjQzX05QSFlfUkZTRVFDQV9SWERJU19TSElGVCkpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsIH5CNDNfTlBIWV9SRlNFUUNBX1RYRU4sCisJCQkoKDEgLSBjb3JlKSA8PCBCNDNfTlBIWV9SRlNFUUNBX1RYRU5fU0hJRlQpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCB+QjQzX05QSFlfUkZTRVFDQV9SWEVOLAorCQkJKGNvcmUgPDwgQjQzX05QSFlfUkZTRVFDQV9SWEVOX1NISUZUKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwgfkI0M19OUEhZX1JGU0VRQ0FfVFhESVMsCisJCQkoY29yZSA8PCBCNDNfTlBIWV9SRlNFUUNBX1RYRElTX1NISUZUKSk7CisKKwlpZiAoY29yZSA9PSAwKSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgfjB4MDAwNyk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCAweDAwMDcpOworCX0gZWxzZSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgfjB4MDAwNyk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4MDAwNyk7CisJfQorCisJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMiwgMCwgMyk7CisJYjQzX25waHlfcmZfY29udHJvbF9vdmVycmlkZShkZXYsIDgsIDAsIDMsIGZhbHNlKTsKKwliNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShkZXYsIEI0M19SRlNFUV9SWDJUWCk7CisKKwlpZiAoY29yZSA9PSAwKSB7CisJCXJ4dmFsID0gMTsKKwkJdHh2YWwgPSA4OworCX0gZWxzZSB7CisJCXJ4dmFsID0gNDsKKwkJdHh2YWwgPSAyOworCX0KKwliNDNfbnBoeV9yZl9jb250cm9sX2ludGNfb3ZlcnJpZGUoZGV2LCAxLCByeHZhbCwgKGNvcmUgKyAxKSk7CisJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMSwgdHh2YWwsICgyIC0gY29yZSkpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0NhbGNSeElxQ29tcCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfY2FsY19yeF9pcV9jb21wKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggbWFzaykKK3sKKwlpbnQgaTsKKwlzMzIgaXE7CisJdTMyIGlpOworCXUzMiBxcTsKKwlpbnQgaXFfbmJpdHMsIHFxX25iaXRzOworCWludCBhcnNoLCBicnNoOworCXUxNiB0bXAsIGEsIGI7CisKKwlzdHJ1Y3QgbnBoeV9pcV9lc3QgZXN0OworCXN0cnVjdCBiNDNfcGh5X25faXFfY29tcCBvbGQ7CisJc3RydWN0IGI0M19waHlfbl9pcV9jb21wIG5ldyA9IHsgfTsKKwlib29sIGVycm9yID0gZmFsc2U7CisKKwlpZiAobWFzayA9PSAwKQorCQlyZXR1cm47CisKKwliNDNfbnBoeV9yeF9pcV9jb2VmZnMoZGV2LCBmYWxzZSwgJm9sZCk7CisJYjQzX25waHlfcnhfaXFfY29lZmZzKGRldiwgdHJ1ZSwgJm5ldyk7CisJYjQzX25waHlfcnhfaXFfZXN0KGRldiwgJmVzdCwgMHg0MDAwLCAzMiwgZmFsc2UpOworCW5ldyA9IG9sZDsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGkgPT0gMCAmJiAobWFzayAmIDEpKSB7CisJCQlpcSA9IGVzdC5pcTBfcHJvZDsKKwkJCWlpID0gZXN0LmkwX3B3cjsKKwkJCXFxID0gZXN0LnEwX3B3cjsKKwkJfSBlbHNlIGlmIChpID09IDEgJiYgKG1hc2sgJiAyKSkgeworCQkJaXEgPSBlc3QuaXExX3Byb2Q7CisJCQlpaSA9IGVzdC5pMV9wd3I7CisJCQlxcSA9IGVzdC5xMV9wd3I7CisJCX0gZWxzZSB7CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlpICsgcXEgPCAyKSB7CisJCQllcnJvciA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCWlxX25iaXRzID0gZmxzKGFicyhpcSkpOworCQlxcV9uYml0cyA9IGZscyhxcSk7CisKKwkJYXJzaCA9IGlxX25iaXRzIC0gMjA7CisJCWlmIChhcnNoID49IDApIHsKKwkJCWEgPSAtKChpcSA8PCAoMzAgLSBpcV9uYml0cykpICsgKGlpID4+ICgxICsgYXJzaCkpKTsKKwkJCXRtcCA9IGlpID4+IGFyc2g7CisJCX0gZWxzZSB7CisJCQlhID0gLSgoaXEgPDwgKDMwIC0gaXFfbmJpdHMpKSArIChpaSA8PCAoLTEgLSBhcnNoKSkpOworCQkJdG1wID0gaWkgPDwgLWFyc2g7CisJCX0KKwkJaWYgKHRtcCA9PSAwKSB7CisJCQllcnJvciA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlhIC89IHRtcDsKKworCQlicnNoID0gcXFfbmJpdHMgLSAxMTsKKwkJaWYgKGJyc2ggPj0gMCkgeworCQkJYiA9IChxcSA8PCAoMzEgLSBxcV9uYml0cykpOworCQkJdG1wID0gaWkgPj4gYnJzaDsKKwkJfSBlbHNlIHsKKwkJCWIgPSAocXEgPDwgKDMxIC0gcXFfbmJpdHMpKTsKKwkJCXRtcCA9IGlpIDw8IC1icnNoOworCQl9CisJCWlmICh0bXAgPT0gMCkgeworCQkJZXJyb3IgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJYiA9IGludF9zcXJ0KGIgLyB0bXAgLSBhICogYSkgLSAoMSA8PCAxMCk7CisKKwkJaWYgKGkgPT0gMCAmJiAobWFzayAmIDB4MSkpIHsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJCW5ldy5hMCA9IGEgJiAweDNGRjsKKwkJCQluZXcuYjAgPSBiICYgMHgzRkY7CisJCQl9IGVsc2UgeworCQkJCW5ldy5hMCA9IGIgJiAweDNGRjsKKwkJCQluZXcuYjAgPSBhICYgMHgzRkY7CisJCQl9CisJCX0gZWxzZSBpZiAoaSA9PSAxICYmIChtYXNrICYgMHgyKSkgeworCQkJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCQkJbmV3LmExID0gYSAmIDB4M0ZGOworCQkJCW5ldy5iMSA9IGIgJiAweDNGRjsKKwkJCX0gZWxzZSB7CisJCQkJbmV3LmExID0gYiAmIDB4M0ZGOworCQkJCW5ldy5iMSA9IGEgJiAweDNGRjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJbmV3ID0gb2xkOworCisJYjQzX25waHlfcnhfaXFfY29lZmZzKGRldiwgdHJ1ZSwgJm5ldyk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhJcVdhciAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfaXFfd29ya2Fyb3VuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IGFycmF5WzRdOworCWludCBpOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4M0M1MCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJYXJyYXlbaV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8pOworCisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfTlBIWV9UWElRVzAsIGFycmF5WzBdKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9OUEhZX1RYSVFXMSwgYXJyYXlbMV0pOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX05QSFlfVFhJUVcyLCBhcnJheVsyXSk7CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfTlBIWV9UWElRVzMsIGFycmF5WzNdKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9jbGlwLWRldGVjdGlvbiAqLworc3RhdGljIHZvaWQgYjQzX25waHlfd3JpdGVfY2xpcF9kZXRlY3Rpb24oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgKmNsaXBfc3QpCit7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MxX0NMSVAxVEhSRVMsIGNsaXBfc3RbMF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMl9DTElQMVRIUkVTLCBjbGlwX3N0WzFdKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9jbGlwLWRldGVjdGlvbiAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmVhZF9jbGlwX2RldGVjdGlvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiAqY2xpcF9zdCkKK3sKKwljbGlwX3N0WzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQzFfQ0xJUDFUSFJFUyk7CisJY2xpcF9zdFsxXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MyX0NMSVAxVEhSRVMpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL2NsYXNzaWZpZXIgKi8KK3N0YXRpYyB1MTYgYjQzX25waHlfY2xhc3NpZmllcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBtYXNrLCB1MTYgdmFsKQoreworCXUxNiB0bXA7CisKKwlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID09IDE2KQorCQliNDNfbWFjX3N1c3BlbmQoZGV2KTsKKworCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0NMQVNTQ1RMKTsKKwl0bXAgJj0gKEI0M19OUEhZX0NMQVNTQ1RMX0NDS0VOIHwgQjQzX05QSFlfQ0xBU1NDVExfT0ZETUVOIHwKKwkJQjQzX05QSFlfQ0xBU1NDVExfV0FJVEVERU4pOworCXRtcCAmPSB+bWFzazsKKwl0bXAgfD0gKHZhbCAmIG1hc2spOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0NMQVNTQ1RMLCAweEZGRjgsIHRtcCk7CisKKwlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID09IDE2KQorCQliNDNfbWFjX2VuYWJsZShkZXYpOworCisJcmV0dXJuIHRtcDsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9jYXJyaWVyc2VhcmNoICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gcGh5LT5uOworCisJaWYgKGVuYWJsZSkgeworCQl1MTYgY2xpcFtdID0geyAweEZGRkYsIDB4RkZGRiB9OworCQlpZiAobnBoeS0+ZGVhZl9jb3VudCsrID09IDApIHsKKwkJCW5waHktPmNsYXNzaWZpZXJfc3RhdGUgPSBiNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgMCwgMCk7CisJCQliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgMHg3LCAwKTsKKwkJCWI0M19ucGh5X3JlYWRfY2xpcF9kZXRlY3Rpb24oZGV2LCBucGh5LT5jbGlwX3N0YXRlKTsKKwkJCWI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcCk7CisJCX0KKwkJYjQzX25waHlfcmVzZXRfY2NhKGRldik7CisJfSBlbHNlIHsKKwkJaWYgKC0tbnBoeS0+ZGVhZl9jb3VudCA9PSAwKSB7CisJCQliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgMHg3LCBucGh5LT5jbGFzc2lmaWVyX3N0YXRlKTsKKwkJCWI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKGRldiwgbnBoeS0+Y2xpcF9zdGF0ZSk7CisJCX0KKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vc3RvcC1wbGF5YmFjayAqLworc3RhdGljIHZvaWQgYjQzX25waHlfc3RvcF9wbGF5YmFjayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTE2IHRtcDsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9TQU1QX1NUQVQpOworCWlmICh0bXAgJiAweDEpCisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfU0FNUF9DTUQsIEI0M19OUEhZX1NBTVBfQ01EX1NUT1ApOworCWVsc2UgaWYgKHRtcCAmIDB4MikKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTURHQ1RMLCAodTE2KX4weDgwMDApOworCisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfU0FNUF9DTUQsIH4weDAwMDQpOworCisJaWYgKG5waHktPmJiX211bHRfc2F2ZSAmIDB4ODAwMDAwMDApIHsKKwkJdG1wID0gbnBoeS0+YmJfbXVsdF9zYXZlICYgMHhGRkZGOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoMTUsIDg3KSwgdG1wKTsKKwkJbnBoeS0+YmJfbXVsdF9zYXZlID0gMDsKKwl9CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDApOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NwdXJXYXIgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3NwdXJfd29ya2Fyb3VuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKKwlpbnQgdG9uZVsyXSA9IHsgNTcsIDU4IH07CisJdTMyIG5vaXNlWzJdID0geyAweDNGRiwgMHgzRkYgfTsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDMpOworCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAxKTsKKworCS8qIEZJWE1FOiBjaGFubmVsID0gcmFkaW9fY2hhbnNwZWMgKi8KKworCWlmIChucGh5LT5nYmFuZF9zcHVyd2FyX2VuKSB7CisJCS8qIFRPRE86IE4gUEhZIEFkanVzdCBBbmFsb2cgUGZidyAoNykgKi8KKwkJaWYgKGNoYW5uZWwgPT0gMTEgJiYgZGV2LT5waHkuaXNfNDBtaHopCisJCQk7IC8qIFRPRE86IE4gUEhZIEFkanVzdCBNaW4gTm9pc2UgVmFyKDIsIHRvbmUsIG5vaXNlKSovCisJCWVsc2UKKwkJCTsgLyogVE9ETzogTiBQSFkgQWRqdXN0IE1pbiBOb2lzZSBWYXIoMCwgTlVMTCwgTlVMTCkqLworCQkvKiBUT0RPOiBOIFBIWSBBZGp1c3QgQ1JTIE1pbiBQb3dlciAoMHgxRSkgKi8KKwl9CisKKwlpZiAobnBoeS0+YWJhbmRfc3B1cndhcl9lbikgeworCQlpZiAoY2hhbm5lbCA9PSA1NCkgeworCQkJdG9uZVswXSA9IDB4MjA7CisJCQlub2lzZVswXSA9IDB4MjVGOworCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gMzggfHwgY2hhbm5lbCA9PSAxMDIgfHwgY2hhbm5lbCA9PSAxMTgpIHsKKwkJCWlmICgwIC8qIEZJWE1FICovKSB7CisJCQkJdG9uZVswXSA9IDB4MjA7CisJCQkJbm9pc2VbMF0gPSAweDIxRjsKKwkJCX0gZWxzZSB7CisJCQkJdG9uZVswXSA9IDA7CisJCQkJbm9pc2VbMF0gPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gMTM0KSB7CisJCQl0b25lWzBdID0gMHgyMDsKKwkJCW5vaXNlWzBdID0gMHgyMUY7CisJCX0gZWxzZSBpZiAoY2hhbm5lbCA9PSAxNTEpIHsKKwkJCXRvbmVbMF0gPSAweDEwOworCQkJbm9pc2VbMF0gPSAweDIzRjsKKwkJfSBlbHNlIGlmIChjaGFubmVsID09IDE1MyB8fCBjaGFubmVsID09IDE2MSkgeworCQkJdG9uZVswXSA9IDB4MzA7CisJCQlub2lzZVswXSA9IDB4MjNGOworCQl9IGVsc2UgeworCQkJdG9uZVswXSA9IDA7CisJCQlub2lzZVswXSA9IDA7CisJCX0KKworCQlpZiAoIXRvbmVbMF0gJiYgIW5vaXNlWzBdKQorCQkJOyAvKiBUT0RPOiBOIFBIWSBBZGp1c3QgTWluIE5vaXNlIFZhcigxLCB0b25lLCBub2lzZSkqLworCQllbHNlCisJCQk7IC8qIFRPRE86IE4gUEhZIEFkanVzdCBNaW4gTm9pc2UgVmFyKDAsIE5VTEwsIE5VTEwpKi8KKwl9CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDApOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1dvcmthcm91bmRzR2FpbkN0cmwgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X2dhaW5fY3J0bF93b3JrYXJvdW5kcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTggaSwgajsKKwl1OCBjb2RlOworCisJLyogVE9ETzogZm9yIFBIWSA+PSAzCisJczggKmxuYTFfZ2FpbiwgKmxuYTJfZ2FpbjsKKwl1OCAqZ2Fpbl9kYiwgKmdhaW5fYml0czsKKwl1MTYgKnJmc2VxX2luaXQ7CisJdTggbHBmX2dhaW5bNl0gPSB7IDB4MDAsIDB4MDYsIDB4MEMsIDB4MTIsIDB4MTIsIDB4MTIgfTsKKwl1OCBscGZfYml0c1s2XSA9IHsgMCwgMSwgMiwgMywgMywgMyB9OworCSovCisKKwl1OCByZnNlcV9ldmVudHNbM10gPSB7IDYsIDgsIDcgfTsKKwl1OCByZnNlcV9kZWxheXNbM10gPSB7IDEwLCAzMCwgMSB9OworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCS8qIFRPRE8gKi8KKwl9IGVsc2UgeworCQkvKiBTZXQgQ2xpcCAyIGRldGVjdCAqLworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0MxX0NHQUlOSSwKKwkJCQlCNDNfTlBIWV9DMV9DR0FJTklfQ0wyREVURUNUKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DMl9DR0FJTkksCisJCQkJQjQzX05QSFlfQzJfQ0dBSU5JX0NMMkRFVEVDVCk7CisKKwkJLyogU2V0IG5hcnJvd2JhbmQgY2xpcCB0aHJlc2hvbGQgKi8KKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DMV9OQkNMSVBUSFJFUywgMHg4NCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzJfTkJDTElQVEhSRVMsIDB4ODQpOworCisJCWlmICghZGV2LT5waHkuaXNfNDBtaHopIHsKKwkJCS8qIFNldCBkd2VsbCBsZW5ndGhzICovCisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0NMSVAxX05CRFdFTExfTEVOLCAweDAwMkIpOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DTElQMl9OQkRXRUxMX0xFTiwgMHgwMDJCKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfVzFDTElQMV9EV0VMTF9MRU4sIDB4MDAwOSk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1cxQ0xJUDJfRFdFTExfTEVOLCAweDAwMDkpOworCQl9CisKKwkJLyogU2V0IHdpZGViYW5kIGNsaXAgMiB0aHJlc2hvbGQgKi8KKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfQ0xJUFdCVEhSRVMsCisJCQkJfkI0M19OUEhZX0MxX0NMSVBXQlRIUkVTX0NMSVAyLAorCQkJCTIxKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfQ0xJUFdCVEhSRVMsCisJCQkJfkI0M19OUEhZX0MyX0NMSVBXQlRIUkVTX0NMSVAyLAorCQkJCTIxKTsKKworCQlpZiAoIWRldi0+cGh5LmlzXzQwbWh6KSB7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9DR0FJTkksCisJCQkJfkI0M19OUEhZX0MxX0NHQUlOSV9HQUlOQktPRkYsIDB4MSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMl9DR0FJTkksCisJCQkJfkI0M19OUEhZX0MyX0NHQUlOSV9HQUlOQktPRkYsIDB4MSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9DQ0tfQ0dBSU5JLAorCQkJCX5CNDNfTlBIWV9DMV9DQ0tfQ0dBSU5JX0dBSU5CS09GRiwgMHgxKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MyX0NDS19DR0FJTkksCisJCQkJfkI0M19OUEhZX0MyX0NDS19DR0FJTklfR0FJTkJLT0ZGLCAweDEpOworCQl9CisKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DQ0tfU0hJRlRCX1JFRiwgMHg4MDlDKTsKKworCQlpZiAobnBoeS0+Z2Fpbl9ib29zdCkgeworCQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCQkJICAgIGRldi0+cGh5LmlzXzQwbWh6KQorCQkJCWNvZGUgPSA0OworCQkJZWxzZQorCQkJCWNvZGUgPSA1OworCQl9IGVsc2UgeworCQkJY29kZSA9IGRldi0+cGh5LmlzXzQwbWh6ID8gNiA6IDc7CisJCX0KKworCQkvKiBTZXQgSFBWR0EyIGluZGV4ICovCisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MxX0lOSVRHQUlOLAorCQkJCX5CNDNfTlBIWV9DMV9JTklUR0FJTl9IUFZHQTIsCisJCQkJY29kZSA8PCBCNDNfTlBIWV9DMV9JTklUR0FJTl9IUFZHQTJfU0hJRlQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMl9JTklUR0FJTiwKKwkJCQl+QjQzX05QSFlfQzJfSU5JVEdBSU5fSFBWR0EyLAorCQkJCWNvZGUgPDwgQjQzX05QSFlfQzJfSU5JVEdBSU5fSFBWR0EyX1NISUZUKTsKKworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgxRDA2KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJKGNvZGUgPDwgOCB8IDB4N0MpKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJKGNvZGUgPDwgOCB8IDB4N0MpKTsKKworCQkvKiBUT0RPOiBiNDNfbnBoeV9hZGp1c3RfbG5hX2dhaW5fdGFibGUoZGV2KTsgKi8KKworCQlpZiAobnBoeS0+ZWxuYV9nYWluX2NvbmZpZykgeworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MDgwOCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDApOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgxKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MSk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDEpOworCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgwQzA4KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDEpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgxKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MSk7CisKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDFEMDYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJKGNvZGUgPDwgOCB8IDB4NzQpKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCShjb2RlIDw8IDggfCAweDc0KSk7CisJCX0KKworCQlpZiAoZGV2LT5waHkucmV2ID09IDIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwKKwkJCQkJCSgweDA0MDAgKiBpKSArIDB4MDAyMCk7CisJCQkJZm9yIChqID0gMDsgaiA8IDIxOyBqKyspCisJCQkJCWI0M19waHlfd3JpdGUoZGV2LAorCQkJCQkJQjQzX05QSFlfVEFCTEVfREFUQUxPLCAzICogaik7CisJCQl9CisKKwkJCWI0M19ucGh5X3NldF9yZl9zZXF1ZW5jZShkZXYsIDUsCisJCQkJCXJmc2VxX2V2ZW50cywgcmZzZXFfZGVsYXlzLCAzKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX09WRVJfREdBSU4xLAorCQkJCSh1MTYpfkI0M19OUEhZX09WRVJfREdBSU5fQ0NLREdFQ1YsCisJCQkJMHg1QSA8PCBCNDNfTlBIWV9PVkVSX0RHQUlOX0NDS0RHRUNWX1NISUZUKTsKKworCQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04oMHhDNUQpLAorCQkJCQkJMHhGRjgwLCA0KTsKKwkJfQorCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Xb3JrYXJvdW5kcyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfd29ya2Fyb3VuZHMoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IHBoeS0+bjsKKworCXU4IGV2ZW50czFbN10gPSB7IDB4MCwgMHgxLCAweDIsIDB4OCwgMHg0LCAweDUsIDB4MyB9OworCXU4IGRlbGF5czFbN10gPSB7IDB4OCwgMHg2LCAweDYsIDB4MiwgMHg0LCAweDNDLCAweDEgfTsKKworCXU4IGV2ZW50czJbN10gPSB7IDB4MCwgMHgzLCAweDUsIDB4NCwgMHgyLCAweDEsIDB4OCB9OworCXU4IGRlbGF5czJbN10gPSB7IDB4OCwgMHg2LCAweDIsIDB4NCwgMHg0LCAweDYsIDB4MSB9OworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDEsIDApOworCWVsc2UKKwkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDEsIDEpOworCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAxKTsKKworCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfSVFGTElQLAorCQkgICAgQjQzX05QSFlfSVFGTElQX0FEQzEgfCBCNDNfTlBIWV9JUUZMSVBfQURDMik7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJLyogVE9ETyAqLworCX0gZWxzZSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFogJiYKKwkJICAgIG5waHktPmJhbmQ1Z19wd3JnYWluKSB7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MxX1RYX1JGX1NQQVJFLCB+MHg4KTsKKwkJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNTVfQzJfVFhfUkZfU1BBUkUsIH4weDgpOworCQl9IGVsc2UgeworCQkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU1X0MxX1RYX1JGX1NQQVJFLCAweDgpOworCQkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU1X0MyX1RYX1JGX1NQQVJFLCAweDgpOworCQl9CisKKwkJLyogVE9ETzogY29udmVydCB0byBiNDNfbnRhYl93cml0ZT8gKi8KKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwMCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDAwQSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDAwMEEpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDAyKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHhDREFBKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAxMik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4Q0RBQSk7CisKKwkJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMDgpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwMDAwKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTgpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwMDAwKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMDcpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHg3QUFCKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTcpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHg3QUFCKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMDYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwODAwKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwODAwKTsKKwkJfQorCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19MTzEsIDB4MkQ4KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMSwgMHgzMDEpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfTE8yLCAweDJEOCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDIsIDB4MzAxKTsKKworCQlpZiAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzMl9sbyAmIDB4MTAwICYmCisJCSAgICBidXMtPmJvYXJkaW5mby50eXBlID09IDB4OEIpIHsKKwkJCWRlbGF5czFbMF0gPSAweDE7CisJCQlkZWxheXMxWzVdID0gMHgxNDsKKwkJfQorCQliNDNfbnBoeV9zZXRfcmZfc2VxdWVuY2UoZGV2LCAwLCBldmVudHMxLCBkZWxheXMxLCA3KTsKKwkJYjQzX25waHlfc2V0X3JmX3NlcXVlbmNlKGRldiwgMSwgZXZlbnRzMiwgZGVsYXlzMiwgNyk7CisKKwkJYjQzX25waHlfZ2Fpbl9jcnRsX3dvcmthcm91bmRzKGRldik7CisKKwkJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SWENUTCkgJiAweDIpCisJCQkJOyAvKlRPRE86IGI0M19taGYoZGV2LCAyLCAweDAwMTAsIDB4MDAxMCwgMyk7Ki8KKwkJfSBlbHNlIGlmIChkZXYtPnBoeS5yZXYgPT0gMikgeworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NSU0NIRUNLMiwgMCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQ1JTQ0hFQ0szLCAwKTsKKwkJfQorCisJCWlmIChkZXYtPnBoeS5yZXYgPCAyKQorCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfU0NSQU1fU0lHQ1RMLAorCQkJCQl+QjQzX05QSFlfU0NSQU1fU0lHQ1RMX1NDTSk7CisKKwkJLyogU2V0IHBoYXNlIHRyYWNrIGFscGhhIGFuZCBiZXRhICovCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0EwLCAweDEyNSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0ExLCAweDFCMyk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0EyLCAweDEwNSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IwLCAweDE2RSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IxLCAweENEKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BIQVNFVFJfQjIsIDB4MjApOworCisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1BJTF9EVzEsCisJCQkJKHUxNil+QjQzX05QSFlfUElMX0RXXzY0UUFNKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl8yMENPX1MyQjEsIDB4QjUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzIwQ09fUzJCMiwgMHhBNCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfMjBDT19TMkIzLCAweDAwKTsKKworCQlpZiAoZGV2LT5waHkucmV2ID09IDIpCisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0ZJTkVSWDJfQ0dDLAorCQkJCQlCNDNfTlBIWV9GSU5FUlgyX0NHQ19ERUNHQyk7CisJfQorCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAwKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Mb2FkU2FtcGxlVGFibGUgKi8KK3N0YXRpYyBpbnQgYjQzX25waHlfbG9hZF9zYW1wbGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJc3RydWN0IGI0M19jMzIgKnNhbXBsZXMsIHUxNiBsZW4pIHsKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwl1MTYgaTsKKwl1MzIgKmRhdGE7CisKKwlkYXRhID0ga3phbGxvYyhsZW4gKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWI0M2VycihkZXYtPndsLCAiYWxsb2NhdGlvbiBmb3Igc2FtcGxlcyBsb2FkaW5nIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDEpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWRhdGFbaV0gPSAoc2FtcGxlc1tpXS5pICYgMHgzRkYgPDwgMTApOworCQlkYXRhW2ldIHw9IHNhbXBsZXNbaV0ucSAmIDB4M0ZGOworCX0KKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIzMigxNywgMCksIGxlbiwgZGF0YSk7CisKKwlrZnJlZShkYXRhKTsKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDApOworCXJldHVybiAwOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0dlbkxvYWRTYW1wbGVzICovCitzdGF0aWMgdTE2IGI0M19ucGh5X2dlbl9sb2FkX3NhbXBsZXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZnJlcSwgdTE2IG1heCwKKwkJCQkJYm9vbCB0ZXN0KQoreworCWludCBpOworCXUxNiBidywgbGVuLCByb3QsIGFuZ2xlOworCXN0cnVjdCBiNDNfYzMyICpzYW1wbGVzOworCisKKwlidyA9IChkZXYtPnBoeS5pc180MG1oeikgPyA0MCA6IDIwOworCWxlbiA9IGJ3IDw8IDM7CisKKwlpZiAodGVzdCkgeworCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQkJDRkcpICYgQjQzX05QSFlfQkJDRkdfUlNUUlgpCisJCQlidyA9IDgyOworCQllbHNlCisJCQlidyA9IDgwOworCisJCWlmIChkZXYtPnBoeS5pc180MG1oeikKKwkJCWJ3IDw8PSAxOworCisJCWxlbiA9IGJ3IDw8IDE7CisJfQorCisJc2FtcGxlcyA9IGt6YWxsb2MobGVuICogc2l6ZW9mKHN0cnVjdCBiNDNfYzMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYW1wbGVzKSB7CisJCWI0M2VycihkZXYtPndsLCAiYWxsb2NhdGlvbiBmb3Igc2FtcGxlcyBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKwlyb3QgPSAoKChmcmVxICogMzYpIC8gYncpIDw8IDE2KSAvIDEwMDsKKwlhbmdsZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJc2FtcGxlc1tpXSA9IGI0M19jb3JkaWMoYW5nbGUpOworCQlhbmdsZSArPSByb3Q7CisJCXNhbXBsZXNbaV0ucSA9IENPUkRJQ19DT05WRVJUKHNhbXBsZXNbaV0ucSAqIG1heCk7CisJCXNhbXBsZXNbaV0uaSA9IENPUkRJQ19DT05WRVJUKHNhbXBsZXNbaV0uaSAqIG1heCk7CisJfQorCisJaSA9IGI0M19ucGh5X2xvYWRfc2FtcGxlcyhkZXYsIHNhbXBsZXMsIGxlbik7CisJa2ZyZWUoc2FtcGxlcyk7CisJcmV0dXJuIChpIDwgMCkgPyAwIDogbGVuOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1J1blNhbXBsZXMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3J1bl9zYW1wbGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHNhbXBzLCB1MTYgbG9vcHMsCisJCQkJCXUxNiB3YWl0LCBib29sIGlxbW9kZSwgYm9vbCBkYWNfdGVzdCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwlpbnQgaTsKKwl1MTYgc2VxX21vZGU7CisJdTMyIHRtcDsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgdHJ1ZSk7CisKKwlpZiAoKG5waHktPmJiX211bHRfc2F2ZSAmIDB4ODAwMDAwMDApID09IDApIHsKKwkJdG1wID0gYjQzX250YWJfcmVhZChkZXYsIEI0M19OVEFCMTYoMTUsIDg3KSk7CisJCW5waHktPmJiX211bHRfc2F2ZSA9ICh0bXAgJiAweEZGRkYpIHwgMHg4MDAwMDAwMDsKKwl9CisKKwlpZiAoIWRldi0+cGh5LmlzXzQwbWh6KQorCQl0bXAgPSAweDY0NjQ7CisJZWxzZQorCQl0bXAgPSAweDQ3NDc7CisJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDE1LCA4NyksIHRtcCk7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIGZhbHNlKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX0RFUENOVCwgKHNhbXBzIC0gMSkpOworCisJaWYgKGxvb3BzICE9IDB4RkZGRikKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1NBTVBfTE9PUENOVCwgKGxvb3BzIC0gMSkpOworCWVsc2UKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1NBTVBfTE9PUENOVCwgbG9vcHMpOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1NBTVBfV0FJVENOVCwgd2FpdCk7CisKKwlzZXFfbW9kZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSk7CisKKwliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwgQjQzX05QSFlfUkZTRVFNT0RFX0NBT1ZFUik7CisJaWYgKGlxbW9kZSkgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9JUUxPQ0FMX0NNREdDVEwsIDB4N0ZGRik7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTURHQ1RMLCAweDgwMDApOworCX0gZWxzZSB7CisJCWlmIChkYWNfdGVzdCkKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX0NNRCwgNSk7CisJCWVsc2UKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX0NNRCwgMSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZTRVFTVCkgJiAxKSB7CisJCQlpID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMCk7CisJfQorCWlmIChpKQorCQliNDNlcnIoZGV2LT53bCwgInJ1biBzYW1wbGVzIHRpbWVvdXRcbiIpOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwgc2VxX21vZGUpOworfQorCisvKgorICogVHJhbnNtaXRzIGEga25vd24gdmFsdWUgZm9yIExPIGNhbGlicmF0aW9uCisgKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1RYVG9uZQorICovCitzdGF0aWMgaW50IGI0M19ucGh5X3R4X3RvbmUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZnJlcSwgdTE2IG1heF92YWwsCisJCQkJYm9vbCBpcW1vZGUsIGJvb2wgZGFjX3Rlc3QpCit7CisJdTE2IHNhbXAgPSBiNDNfbnBoeV9nZW5fbG9hZF9zYW1wbGVzKGRldiwgZnJlcSwgbWF4X3ZhbCwgZGFjX3Rlc3QpOworCWlmIChzYW1wID09IDApCisJCXJldHVybiAtMTsKKwliNDNfbnBoeV9ydW5fc2FtcGxlcyhkZXYsIHNhbXAsIDB4RkZGRiwgMCwgaXFtb2RlLCBkYWNfdGVzdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhQd3JDdHJsQ29lZlNldHVwICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV90eF9wd3JfY3RybF9jb2VmX3NldHVwKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwlpbnQgaSwgajsKKwl1MzIgdG1wOworCXUzMiBjdXJfcmVhbCwgY3VyX2ltYWcsIHJlYWxfcGFydCwgaW1hZ19wYXJ0OworCisJdTE2IGJ1ZmZlcls3XTsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgdHJ1ZSk7CisKKwliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4MCksIDcsIGJ1ZmZlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXRtcCA9ICgoYnVmZmVyW2kgKiAyXSAmIDB4M0ZGKSA8PCAxMCkgfAorCQkJKGJ1ZmZlcltpICogMiArIDFdICYgMHgzRkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwKKwkJCQkoKChpICsgMjYpIDw8IDEwKSB8IDMyMCkpOworCQlmb3IgKGogPSAwOyBqIDwgMTI4OyBqKyspIHsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBSEksCisJCQkJCSgodG1wID4+IDE2KSAmIDB4RkZGRikpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJKHRtcCAmIDB4RkZGRikpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl0bXAgPSBidWZmZXJbNSArIGldOworCQlyZWFsX3BhcnQgPSAodG1wID4+IDgpICYgMHhGRjsKKwkJaW1hZ19wYXJ0ID0gKHRtcCAmIDB4RkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwKKwkJCQkoKChpICsgMjYpIDw8IDEwKSB8IDQ0OCkpOworCisJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJY3VyX3JlYWwgPSByZWFsX3BhcnQ7CisJCQljdXJfaW1hZyA9IGltYWdfcGFydDsKKwkJCXRtcCA9ICgoY3VyX3JlYWwgJiAweEZGKSA8PCA4KSB8IChjdXJfaW1hZyAmIDB4RkYpOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IDEyODsgaisrKSB7CisJCQlpZiAoZGV2LT5waHkucmV2IDwgMykgeworCQkJCWN1cl9yZWFsID0gKHJlYWxfcGFydCAqIGxvc2NhbGVbal0gKyAxMjgpID4+IDg7CisJCQkJY3VyX2ltYWcgPSAoaW1hZ19wYXJ0ICogbG9zY2FsZVtqXSArIDEyOCkgPj4gODsKKwkJCQl0bXAgPSAoKGN1cl9yZWFsICYgMHhGRikgPDwgOCkgfAorCQkJCQkoY3VyX2ltYWcgJiAweEZGKTsKKwkJCX0KKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBSEksCisJCQkJCSgodG1wID4+IDE2KSAmIDB4RkZGRikpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJKHRtcCAmIDB4RkZGRikpOworCQl9CisJfQorCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCUI0M19TSE1fU0hfTlBIWV9UWFBXUl9JTkRYMCwgMHhGRkZGKTsKKwkJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsCisJCQkJQjQzX1NITV9TSF9OUEhZX1RYUFdSX0lORFgxLCAweEZGRkYpOworCX0KKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgZmFsc2UpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NldFJmU2VxICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zZXRfcmZfc2VxdWVuY2Uoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjbWQsCisJCQkJCXU4ICpldmVudHMsIHU4ICpkZWxheXMsIHU4IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwl1OCBpOworCXU4IGVuZCA9IChkZXYtPnBoeS5yZXYgPj0gMykgPyAweDFGIDogMHgwRjsKKwl1MTYgb2Zmc2V0MSA9IGNtZCA8PCA0OworCXUxNiBvZmZzZXQyID0gb2Zmc2V0MSArIDB4ODA7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIHRydWUpOworCisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCOCg3LCBvZmZzZXQxKSwgbGVuZ3RoLCBldmVudHMpOworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjgoNywgb2Zmc2V0MiksIGxlbmd0aCwgZGVsYXlzKTsKKworCWZvciAoaSA9IGxlbmd0aDsgaSA8IDE2OyBpKyspIHsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjgoNywgb2Zmc2V0MSArIGkpLCBlbmQpOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCOCg3LCBvZmZzZXQyICsgaSksIDEpOworCX0KKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgZmFsc2UpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0ZvcmNlUkZTZXEgKi8KIHN0YXRpYyB2b2lkIGI0M19ucGh5X2ZvcmNlX3JmX3NlcXVlbmNlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQkgICAgICAgZW51bSBiNDNfbnBoeV9yZl9zZXF1ZW5jZSBzZXEpCiB7CkBAIC0zNzYsNiArMTI2Niw3IEBACiAJCVtCNDNfUkZTRVFfVVBEQVRFX0dBSU5VXQk9IEI0M19OUEhZX1JGU0VRVFJfVVBHVSwKIAl9OwogCWludCBpOworCXUxNiBzZXFfbW9kZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSk7CiAKIAlCNDNfV0FSTl9PTihzZXEgPj0gQVJSQVlfU0laRSh0cmlnZ2VyKSk7CiAKQEAgLTM4OSw4ICsxMjgwLDE4MSBAQAogCX0KIAliNDNlcnIoZGV2LT53bCwgIlJGIHNlcXVlbmNlIHN0YXR1cyB0aW1lb3V0XG4iKTsKIG9rOgotCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwKLQkJICAgICB+KEI0M19OUEhZX1JGU0VRTU9ERV9DQU9WRVIgfCBCNDNfTlBIWV9SRlNFUU1PREVfVFJPVkVSKSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGU0VRTU9ERSwgc2VxX21vZGUpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1JGQ3RybE92ZXJyaWRlICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZl9jb250cm9sX292ZXJyaWRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGZpZWxkLAorCQkJCQkJdTE2IHZhbHVlLCB1OCBjb3JlLCBib29sIG9mZikKK3sKKwlpbnQgaTsKKwl1OCBpbmRleCA9IGZscyhmaWVsZCk7CisJdTggYWRkciwgZW5fYWRkciwgdmFsX2FkZHI7CisJLyogd2UgZXhwZWN0IG9ubHkgb25lIGJpdCBzZXQgKi8KKwlCNDNfV0FSTl9PTihmaWVsZCAmICh+KDEgPDwgKGluZGV4IC0gMSkpKSk7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJY29uc3Qgc3RydWN0IG5waHlfcmZfY29udHJvbF9vdmVycmlkZV9yZXYzICpyZl9jdHJsOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoaW5kZXggPT0gMCB8fCBpbmRleCA9PSAxNikgeworCQkJCWI0M2VycihkZXYtPndsLAorCQkJCQkiVW5zdXBwb3J0ZWQgUkYgQ3RybCBPdmVycmlkZSBjYWxsXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCXJmX2N0cmwgPSAmdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2M1tpbmRleCAtIDFdOworCQkJZW5fYWRkciA9IEI0M19QSFlfTigoaSA9PSAwKSA/CisJCQkJcmZfY3RybC0+ZW5fYWRkcjAgOiByZl9jdHJsLT5lbl9hZGRyMSk7CisJCQl2YWxfYWRkciA9IEI0M19QSFlfTigoaSA9PSAwKSA/CisJCQkJcmZfY3RybC0+dmFsX2FkZHIwIDogcmZfY3RybC0+dmFsX2FkZHIxKTsKKworCQkJaWYgKG9mZikgeworCQkJCWI0M19waHlfbWFzayhkZXYsIGVuX2FkZHIsIH4oZmllbGQpKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCB2YWxfYWRkciwKKwkJCQkJCX4ocmZfY3RybC0+dmFsX21hc2spKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvcmUgPT0gMCB8fCAoKDEgPDwgY29yZSkgJiBpKSAhPSAwKSB7CisJCQkJCWI0M19waHlfc2V0KGRldiwgZW5fYWRkciwgZmllbGQpOworCQkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCB2YWxfYWRkciwKKwkJCQkJCX4ocmZfY3RybC0+dmFsX21hc2spLAorCQkJCQkJKHZhbHVlIDw8IHJmX2N0cmwtPnZhbF9zaGlmdCkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWNvbnN0IHN0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MiAqcmZfY3RybDsKKwkJaWYgKG9mZikgeworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgfihmaWVsZCkpOworCQkJdmFsdWUgPSAwOworCQl9IGVsc2UgeworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCBmaWVsZCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoaW5kZXggPD0gMSB8fCBpbmRleCA9PSAxNikgeworCQkJCWI0M2VycihkZXYtPndsLAorCQkJCQkiVW5zdXBwb3J0ZWQgUkYgQ3RybCBPdmVycmlkZSBjYWxsXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlmIChpbmRleCA9PSAyIHx8IGluZGV4ID09IDEwIHx8CisJCQkgICAgKGluZGV4ID49IDEzICYmIGluZGV4IDw9IDE1KSkgeworCQkJCWNvcmUgPSAxOworCQkJfQorCisJCQlyZl9jdHJsID0gJnRibF9yZl9jb250cm9sX292ZXJyaWRlX3JldjJbaW5kZXggLSAyXTsKKwkJCWFkZHIgPSBCNDNfUEhZX04oKGkgPT0gMCkgPworCQkJCXJmX2N0cmwtPmFkZHIwIDogcmZfY3RybC0+YWRkcjEpOworCisJCQlpZiAoKGNvcmUgJiAoMSA8PCBpKSkgIT0gMCkKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBhZGRyLCB+KHJmX2N0cmwtPmJtYXNrKSwKKwkJCQkJCSh2YWx1ZSA8PCByZl9jdHJsLT5zaGlmdCkpOworCisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDB4MSk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwKKwkJCQkJQjQzX05QSFlfUkZDVExfQ01EX1NUQVJUKTsKKwkJCXVkZWxheSgxKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDB4RkZGRSk7CisJCX0KKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUkZDdHJsSW50Y092ZXJyaWRlICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZl9jb250cm9sX2ludGNfb3ZlcnJpZGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBmaWVsZCwKKwkJCQkJCXUxNiB2YWx1ZSwgdTggY29yZSkKK3sKKwl1OCBpLCBqOworCXUxNiByZWcsIHRtcCwgdmFsOworCisJQjQzX1dBUk5fT04oZGV2LT5waHkucmV2IDwgMyk7CisJQjQzX1dBUk5fT04oZmllbGQgPiA0KTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKChjb3JlID09IDEgJiYgaSA9PSAxKSB8fCAoY29yZSA9PSAyICYmICFpKSkKKwkJCWNvbnRpbnVlOworCisJCXJlZyA9IChpID09IDApID8KKwkJCUI0M19OUEhZX1JGQ1RMX0lOVEMxIDogQjQzX05QSFlfUkZDVExfSU5UQzI7CisJCWI0M19waHlfbWFzayhkZXYsIHJlZywgMHhGQkZGKTsKKworCQlzd2l0Y2ggKGZpZWxkKSB7CisJCWNhc2UgMDoKKwkJCWI0M19waHlfd3JpdGUoZGV2LCByZWcsIDApOworCQkJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUkVTRVQyUlgpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmICghaSkgeworCQkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLAorCQkJCQkJMHhGQzNGLCAodmFsdWUgPDwgNikpOworCQkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzEsCisJCQkJCQkweEZGRkUsIDEpOworCQkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkJCQkJQjQzX05QSFlfUkZDVExfQ01EX1NUQVJUKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspIHsKKwkJCQkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCkgJiBCNDNfTlBIWV9SRkNUTF9DTURfU1RBUlQpIHsKKwkJCQkJCWogPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQl9CisJCQkJaWYgKGopCisJCQkJCWI0M2VycihkZXYtPndsLAorCQkJCQkJImludGMgb3ZlcnJpZGUgdGltZW91dFxuIik7CisJCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMSwKKwkJCQkJCTB4RkZGRSk7CisJCQl9IGVsc2UgeworCQkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLAorCQkJCQkJMHhGQzNGLCAodmFsdWUgPDwgNikpOworCQkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsCisJCQkJCQkweEZGRkUsIDEpOworCQkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkJCQkJQjQzX05QSFlfUkZDVExfQ01EX1JYVFgpOworCQkJCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykgeworCQkJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfQ01EKSAmIEI0M19OUEhZX1JGQ1RMX0NNRF9SWFRYKSB7CisJCQkJCQlqID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXVkZWxheSgxMCk7CisJCQkJfQorCQkJCWlmIChqKQorCQkJCQliNDNlcnIoZGV2LT53bCwKKwkJCQkJCSJpbnRjIG92ZXJyaWRlIHRpbWVvdXRcbiIpOworCQkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsCisJCQkJCQkweEZGRkUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJCQl0bXAgPSAweDAwMjA7CisJCQkJdmFsID0gdmFsdWUgPDwgNTsKKwkJCX0gZWxzZSB7CisJCQkJdG1wID0gMHgwMDEwOworCQkJCXZhbCA9IHZhbHVlIDw8IDQ7CisJCQl9CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCByZWcsIH50bXAsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQkJCXRtcCA9IDB4MDAwMTsKKwkJCQl2YWwgPSB2YWx1ZTsKKwkJCX0gZWxzZSB7CisJCQkJdG1wID0gMHgwMDA0OworCQkJCXZhbCA9IHZhbHVlIDw8IDI7CisJCQl9CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCByZWcsIH50bXAsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQkJCXRtcCA9IDB4MDAwMjsKKwkJCQl2YWwgPSB2YWx1ZSA8PCAxOworCQkJfSBlbHNlIHsKKwkJCQl0bXAgPSAweDAwMDg7CisJCQkJdmFsID0gdmFsdWUgPDwgMzsKKwkJCX0KKwkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgfnRtcCwgdmFsKTsKKwkJCWJyZWFrOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV9icGh5X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtNDExLDgxICsxNDc1LDE2ODAgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OX0JNT0RFKDB4MzgpLCAweDY2OCk7CiB9CiAKLS8qIFJTU0kgQ2FsaWJyYXRpb24gKi8KLXN0YXRpYyB2b2lkIGI0M19ucGh5X3Jzc2lfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggdHlwZSkKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vU2NhbGVPZmZzZXRSc3NpICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzY2FsZSwKKwkJCQkgICAgICAgczggb2Zmc2V0LCB1OCBjb3JlLCB1OCByYWlsLCB1OCB0eXBlKQogewotCS8vVE9ETworCXUxNiB0bXA7CisJYm9vbCBjb3JlMW9yNSA9IChjb3JlID09IDEpIHx8IChjb3JlID09IDUpOworCWJvb2wgY29yZTJvcjUgPSAoY29yZSA9PSAyKSB8fCAoY29yZSA9PSA1KTsKKworCW9mZnNldCA9IGNsYW1wX3ZhbChvZmZzZXQsIC0zMiwgMzEpOworCXRtcCA9ICgoc2NhbGUgJiAweDNGKSA8PCA4KSB8IChvZmZzZXQgJiAweDNGKTsKKworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAyKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1osIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDIpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1JTU0lfWiwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9aLCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAyKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1osIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDApKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWCwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMCkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9YLCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAwKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xSV9SU1NJX1gsIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDApKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1JTU0lfWCwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMSkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMElfUlNTSV9ZLCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAxKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1ksIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDEpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWSwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMSkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfUlNTSV9ZLCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSA2KSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9UQkQsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDYpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1RCRCwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gNikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfVEJELCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSA2KSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9UQkQsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDMpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1BXUkRFVCwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMykpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUFdSREVULCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAzKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xSV9QV1JERVQsIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDMpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1BXUkRFVCwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gNCkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMElfVFNTSSwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHR5cGUgPT0gNCkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfVFNTSSwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gNSkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfVFNTSSwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHR5cGUgPT0gNSkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfVFNTSSwgdG1wKTsKIH0KIAotaW50IGI0M19waHlfaW5pdG4oc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgYjQzX25waHlfcmV2Ml9yc3NpX3NlbGVjdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGNvZGUsIHU4IHR5cGUpCiB7Ci0Jc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKKwl1MTYgdmFsOworCisJaWYgKHR5cGUgPCAzKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKHR5cGUgPT0gNikKKwkJdmFsID0gMTsKKwllbHNlIGlmICh0eXBlID09IDMpCisJCXZhbCA9IDI7CisJZWxzZQorCQl2YWwgPSAzOworCisJdmFsID0gKHZhbCA8PCAxMikgfCAodmFsIDw8IDE0KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEsIDB4MEZGRiwgdmFsKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIDB4MEZGRiwgdmFsKTsKKworCWlmICh0eXBlIDwgMykgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzEsIDB4RkZDRiwKKwkJCQkodHlwZSArIDEpIDw8IDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzIsIDB4RkZDRiwKKwkJCQkodHlwZSArIDEpIDw8IDQpOworCX0KKworCS8qIFRPRE8gdXNlIHNvbWUgZGVmaW5pdGlvbnMgKi8KKwlpZiAoY29kZSA9PSAwKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweENGRkYsIDApOworCQlpZiAodHlwZSA8IDMpIHsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwgMHhGRUM3LCAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDB4RUZEQywgMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsIDB4RkZGRSwgMCk7CisJCQl1ZGVsYXkoMjApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMHhGRkZFLCAwKTsKKwkJfQorCX0gZWxzZSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweENGRkYsCisJCQkJMHgzMDAwKTsKKwkJaWYgKHR5cGUgPCAzKSB7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsCisJCQkJCTB4RkVDNywgMHgwMTgwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsCisJCQkJCTB4RUZEQywgKGNvZGUgPDwgMSB8IDB4MTAyMSkpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELCAweEZGRkUsIDB4MSk7CisJCQl1ZGVsYXkoMjApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMHhGRkZFLCAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYjQzX25waHlfcmV2M19yc3NpX3NlbGVjdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGNvZGUsIHU4IHR5cGUpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTggaTsKKwl1MTYgcmVnLCB2YWw7CisKKwlpZiAoY29kZSA9PSAwKSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSwgMHhGREZGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4RkRGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgMHhGQ0ZGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyLCAweEZDRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMwLCAweEZGREYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMzJTMSwgMHhGRkRGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAxLCAweEZGQzMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDIsIDB4RkZDMyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaWYgKChjb2RlID09IDEgJiYgaSA9PSAxKSB8fCAoY29kZSA9PSAyICYmICFpKSkKKwkJCQljb250aW51ZTsKKworCQkJcmVnID0gKGkgPT0gMCkgPworCQkJCUI0M19OUEhZX0FGRUNUTF9PVkVSMSA6IEI0M19OUEhZX0FGRUNUTF9PVkVSOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgcmVnLCAweEZERkYsIDB4MDIwMCk7CisKKwkJCWlmICh0eXBlIDwgMykgeworCQkJCXJlZyA9IChpID09IDApID8KKwkJCQkJQjQzX05QSFlfQUZFQ1RMX0MxIDoKKwkJCQkJQjQzX05QSFlfQUZFQ1RMX0MyOworCQkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgMHhGQ0ZGLCAwKTsKKworCQkJCXJlZyA9IChpID09IDApID8KKwkJCQkJQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAxIDoKKwkJCQkJQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAyOworCQkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgMHhGRkMzLCAwKTsKKworCQkJCWlmICh0eXBlID09IDApCisJCQkJCXZhbCA9IChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopID8gNCA6IDg7CisJCQkJZWxzZSBpZiAodHlwZSA9PSAxKQorCQkJCQl2YWwgPSAxNjsKKwkJCQllbHNlCisJCQkJCXZhbCA9IDMyOworCQkJCWI0M19waHlfc2V0KGRldiwgcmVnLCB2YWwpOworCisJCQkJcmVnID0gKGkgPT0gMCkgPworCQkJCQlCNDNfTlBIWV9UWEZfNDBDT19CMVMwIDoKKwkJCQkJQjQzX05QSFlfVFhGXzQwQ09fQjMyUzE7CisJCQkJYjQzX3BoeV9zZXQoZGV2LCByZWcsIDB4MDAyMCk7CisJCQl9IGVsc2UgeworCQkJCWlmICh0eXBlID09IDYpCisJCQkJCXZhbCA9IDB4MDEwMDsKKwkJCQllbHNlIGlmICh0eXBlID09IDMpCisJCQkJCXZhbCA9IDB4MDIwMDsKKwkJCQllbHNlCisJCQkJCXZhbCA9IDB4MDMwMDsKKworCQkJCXJlZyA9IChpID09IDApID8KKwkJCQkJQjQzX05QSFlfQUZFQ1RMX0MxIDoKKwkJCQkJQjQzX05QSFlfQUZFQ1RMX0MyOworCisJCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgcmVnLCAweEZDRkYsIHZhbCk7CisJCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgcmVnLCAweEYzRkYsIHZhbCA8PCAyKTsKKworCQkJCWlmICh0eXBlICE9IDMgJiYgdHlwZSAhPSA2KSB7CisJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9CisJCQkJCQliNDNfY3VycmVudF9iYW5kKGRldi0+d2wpOworCisJCQkJCWlmICgobnBoeS0+aXBhMmdfb24gJiYKKwkJCQkJCWJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgfHwKKwkJCQkJCShucGh5LT5pcGE1Z19vbiAmJgorCQkJCQkJYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSkKKwkJCQkJCXZhbCA9IChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopID8gMHhDIDogMHhFOworCQkJCQllbHNlCisJCQkJCQl2YWwgPSAweDExOworCQkJCQlyZWcgPSAoaSA9PSAwKSA/IDB4MjAwMCA6IDB4MzAwMDsKKwkJCQkJcmVnIHw9IEIyMDU1X1BBRERSVjsKKwkJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCByZWcsIHZhbCk7CisKKwkJCQkJcmVnID0gKGkgPT0gMCkgPworCQkJCQkJQjQzX05QSFlfQUZFQ1RMX09WRVIxIDoKKwkJCQkJCUI0M19OUEhZX0FGRUNUTF9PVkVSOworCQkJCQliNDNfcGh5X3NldChkZXYsIHJlZywgMHgwMjAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUlNTSVNlbCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcnNzaV9zZWxlY3Qoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjb2RlLCB1OCB0eXBlKQoreworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJYjQzX25waHlfcmV2M19yc3NpX3NlbGVjdChkZXYsIGNvZGUsIHR5cGUpOworCWVsc2UKKwkJYjQzX25waHlfcmV2Ml9yc3NpX3NlbGVjdChkZXYsIGNvZGUsIHR5cGUpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NldFJzc2kyMDU1VmNtICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zZXRfcnNzaV8yMDU1X3ZjbShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IHR5cGUsIHU4ICpidWYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAodHlwZSA9PSAyKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMV9CME5CX1JTU0lWQ00sCisJCQkJCQkgIDB4RkMsIGJ1ZlswXSk7CisJCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMV9SWF9CQl9SU1NJQ1RMNSwKKwkJCQkJCSAgMHhGQywgYnVmWzFdKTsKKwkJCX0gZWxzZSB7CisJCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMl9CME5CX1JTU0lWQ00sCisJCQkJCQkgIDB4RkMsIGJ1ZlsyICogaV0pOworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzJfUlhfQkJfUlNTSUNUTDUsCisJCQkJCQkgIDB4RkMsIGJ1ZlsyICogaSArIDFdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IDApCisJCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMV9SWF9CQl9SU1NJQ1RMNSwKKwkJCQkJCSAgMHhGMywgYnVmWzBdIDw8IDIpOworCQkJZWxzZQorCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzJfUlhfQkJfUlNTSUNUTDUsCisJCQkJCQkgIDB4RjMsIGJ1ZlsyICogaSArIDFdIDw8IDIpOworCQl9CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1BvbGxSc3NpICovCitzdGF0aWMgaW50IGI0M19ucGh5X3BvbGxfcnNzaShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IHR5cGUsIHMzMiAqYnVmLAorCQkJCXU4IG5zYW1wKQoreworCWludCBpOworCWludCBvdXQ7CisJdTE2IHNhdmVfcmVnc19waHlbOV07CisJdTE2IHNbMl07CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJc2F2ZV9yZWdzX3BoeVswXSA9IGI0M19waHlfcmVhZChkZXYsCisJCQkJCQlCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDEpOworCQlzYXZlX3JlZ3NfcGh5WzFdID0gYjQzX3BoeV9yZWFkKGRldiwKKwkJCQkJCUI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMik7CisJCXNhdmVfcmVnc19waHlbMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEpOworCQlzYXZlX3JlZ3NfcGh5WzNdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyKTsKKwkJc2F2ZV9yZWdzX3BoeVs0XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSk7CisJCXNhdmVfcmVnc19waHlbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CisJCXNhdmVfcmVnc19waHlbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMwKTsKKwkJc2F2ZV9yZWdzX3BoeVs3XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RYRl80MENPX0IzMlMxKTsKKwl9CisKKwliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDUsIHR5cGUpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJc2F2ZV9yZWdzX3BoeVs4XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0dQSU9fU0VMKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0dQSU9fU0VMLCA1KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlidWZbaV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5zYW1wOyBpKyspIHsKKwkJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJCXNbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9HUElPX0xPT1VUKTsKKwkJCXNbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9HUElPX0hJT1VUKTsKKwkJfSBlbHNlIHsKKwkJCXNbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SU1NJMSk7CisJCQlzWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUlNTSTIpOworCQl9CisKKwkJYnVmWzBdICs9ICgoczgpKChzWzBdICYgMHgzRikgPDwgMikpID4+IDI7CisJCWJ1ZlsxXSArPSAoKHM4KSgoKHNbMF0gPj4gOCkgJiAweDNGKSA8PCAyKSkgPj4gMjsKKwkJYnVmWzJdICs9ICgoczgpKChzWzFdICYgMHgzRikgPDwgMikpID4+IDI7CisJCWJ1ZlszXSArPSAoKHM4KSgoKHNbMV0gPj4gOCkgJiAweDNGKSA8PCAyKSkgPj4gMjsKKwl9CisJb3V0ID0gKGJ1ZlswXSAmIDB4RkYpIDw8IDI0IHwgKGJ1ZlsxXSAmIDB4RkYpIDw8IDE2IHwKKwkJKGJ1ZlsyXSAmIDB4RkYpIDw8IDggfCAoYnVmWzNdICYgMHhGRik7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0dQSU9fU0VMLCBzYXZlX3JlZ3NfcGh5WzhdKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAxLAorCQkJCXNhdmVfcmVnc19waHlbMF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAyLAorCQkJCXNhdmVfcmVnc19waHlbMV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCBzYXZlX3JlZ3NfcGh5WzJdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgc2F2ZV9yZWdzX3BoeVszXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEsIHNhdmVfcmVnc19waHlbNF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHNhdmVfcmVnc19waHlbNV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMCwgc2F2ZV9yZWdzX3BoeVs2XSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMzJTMSwgc2F2ZV9yZWdzX3BoeVs3XSk7CisJfQorCisJcmV0dXJuIG91dDsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SU1NJQ2FsICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZXYyX3Jzc2lfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggdHlwZSkKK3sKKwlpbnQgaSwgajsKKwl1OCBzdGF0ZVs0XTsKKwl1OCBjb2RlLCB2YWw7CisJdTE2IGNsYXNzLCBvdmVycmlkZTsKKwl1OCByZWdzX3NhdmVfcmFkaW9bMl07CisJdTE2IHJlZ3Nfc2F2ZV9waHlbMl07CisJczggb2Zmc2V0WzRdOworCisJdTE2IGNsaXBfc3RhdGVbMl07CisJdTE2IGNsaXBfb2ZmWzJdID0geyAweEZGRkYsIDB4RkZGRiB9OworCXMzMiByZXN1bHRzX21pbls0XSA9IHsgfTsKKwl1OCB2Y21fZmluYWxbNF0gPSB7IH07CisJczMyIHJlc3VsdHNbNF1bNF0gPSB7IH07CisJczMyIG1pbmlxWzRdWzJdID0geyB9OworCisJaWYgKHR5cGUgPT0gMikgeworCQljb2RlID0gMDsKKwkJdmFsID0gNjsKKwl9IGVsc2UgaWYgKHR5cGUgPCAyKSB7CisJCWNvZGUgPSAyNTsKKwkJdmFsID0gNDsKKwl9IGVsc2UgeworCQlCNDNfV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWNsYXNzID0gYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDAsIDApOworCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCA3LCA0KTsKKwliNDNfbnBoeV9yZWFkX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcF9zdGF0ZSk7CisJYjQzX25waHlfd3JpdGVfY2xpcF9kZXRlY3Rpb24oZGV2LCBjbGlwX29mZik7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlvdmVycmlkZSA9IDB4MTQwOworCWVsc2UKKwkJb3ZlcnJpZGUgPSAweDExMDsKKworCXJlZ3Nfc2F2ZV9waHlbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSk7CisJcmVnc19zYXZlX3JhZGlvWzBdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MxX1BEX1JYVFgpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwgb3ZlcnJpZGUpOworCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfUERfUlhUWCwgdmFsKTsKKworCXJlZ3Nfc2F2ZV9waHlbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMik7CisJcmVnc19zYXZlX3JhZGlvWzFdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MyX1BEX1JYVFgpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMiwgb3ZlcnJpZGUpOworCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzJfUERfUlhUWCwgdmFsKTsKKworCXN0YXRlWzBdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MxX1BEX1JTU0lNSVNDKSAmIDB4MDc7CisJc3RhdGVbMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQzJfUERfUlNTSU1JU0MpICYgMHgwNzsKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MxX1BEX1JTU0lNSVNDLCAweEY4KTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MyX1BEX1JTU0lNSVNDLCAweEY4KTsKKwlzdGF0ZVsyXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9TUF9SU1NJKSAmIDB4MDc7CisJc3RhdGVbM10gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQzJfU1BfUlNTSSkgJiAweDA3OworCisJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCA1LCB0eXBlKTsKKwliNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShkZXYsIDAsIDAsIDUsIDAsIHR5cGUpOworCWI0M19ucGh5X3NjYWxlX29mZnNldF9yc3NpKGRldiwgMCwgMCwgNSwgMSwgdHlwZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXU4IHRtcFs0XTsKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKwkJCXRtcFtqXSA9IGk7CisJCWlmICh0eXBlICE9IDEpCisJCQliNDNfbnBoeV9zZXRfcnNzaV8yMDU1X3ZjbShkZXYsIHR5cGUsIHRtcCk7CisJCWI0M19ucGh5X3BvbGxfcnNzaShkZXYsIHR5cGUsIHJlc3VsdHNbaV0sIDgpOworCQlpZiAodHlwZSA8IDIpCisJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorCQkJCW1pbmlxW2ldW2pdID0gbWluKHJlc3VsdHNbaV1bMiAqIGpdLAorCQkJCQkJcmVzdWx0c1tpXVsyICogaiArIDFdKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXMzMiBtaW5kID0gNDA7CisJCXU4IG1pbnZjbSA9IDA7CisJCXMzMiBtaW5wb2xsID0gMjQ5OworCQlzMzIgY3VycjsKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJaWYgKHR5cGUgPT0gMikKKwkJCQljdXJyID0gYWJzKHJlc3VsdHNbal1baV0pOworCQkJZWxzZQorCQkJCWN1cnIgPSBhYnMobWluaXFbal1baSAvIDJdIC0gY29kZSAqIDgpOworCisJCQlpZiAoY3VyciA8IG1pbmQpIHsKKwkJCQltaW5kID0gY3VycjsKKwkJCQltaW52Y20gPSBqOworCQkJfQorCisJCQlpZiAocmVzdWx0c1tqXVtpXSA8IG1pbnBvbGwpCisJCQkJbWlucG9sbCA9IHJlc3VsdHNbal1baV07CisJCX0KKwkJcmVzdWx0c19taW5baV0gPSBtaW5wb2xsOworCQl2Y21fZmluYWxbaV0gPSBtaW52Y207CisJfQorCisJaWYgKHR5cGUgIT0gMSkKKwkJYjQzX25waHlfc2V0X3Jzc2lfMjA1NV92Y20oZGV2LCB0eXBlLCB2Y21fZmluYWwpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlvZmZzZXRbaV0gPSAoY29kZSAqIDgpIC0gcmVzdWx0c1t2Y21fZmluYWxbaV1dW2ldOworCisJCWlmIChvZmZzZXRbaV0gPCAwKQorCQkJb2Zmc2V0W2ldID0gLSgoYWJzKG9mZnNldFtpXSkgKyA0KSAvIDgpOworCQllbHNlCisJCQlvZmZzZXRbaV0gPSAob2Zmc2V0W2ldICsgNCkgLyA4OworCisJCWlmIChyZXN1bHRzX21pbltpXSA9PSAyNDgpCisJCQlvZmZzZXRbaV0gPSBjb2RlIC0gMzI7CisKKwkJaWYgKGkgJSAyID09IDApCisJCQliNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShkZXYsIDAsIG9mZnNldFtpXSwgMSwgMCwKKwkJCQkJCQl0eXBlKTsKKwkJZWxzZQorCQkJYjQzX25waHlfc2NhbGVfb2Zmc2V0X3Jzc2koZGV2LCAwLCBvZmZzZXRbaV0sIDIsIDEsCisJCQkJCQkJdHlwZSk7CisJfQorCisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMV9QRF9SU1NJTUlTQywgMHhGOCwgc3RhdGVbMF0pOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfUERfUlNTSU1JU0MsIDB4RjgsIHN0YXRlWzFdKTsKKworCXN3aXRjaCAoc3RhdGVbMl0pIHsKKwljYXNlIDE6CisJCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgMSwgMik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCAxLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDEsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDEsIDEpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlWzNdKSB7CisJY2FzZSAxOgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDIsIDIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgMiwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgMiwgMSk7CisJCWJyZWFrOworCX0KKworCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgMCwgdHlwZSk7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEsIHJlZ3Nfc2F2ZV9waHlbMF0pOworCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfUERfUlhUWCwgcmVnc19zYXZlX3JhZGlvWzBdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHJlZ3Nfc2F2ZV9waHlbMV0pOworCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzJfUERfUlhUWCwgcmVnc19zYXZlX3JhZGlvWzFdKTsKKworCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCA3LCBjbGFzcyk7CisJYjQzX25waHlfd3JpdGVfY2xpcF9kZXRlY3Rpb24oZGV2LCBjbGlwX3N0YXRlKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SU1NJQ2FsUmV2MyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmV2M19yc3NpX2NhbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLyogVE9ETyAqLworfQorCisvKgorICogUlNTSSBDYWxpYnJhdGlvbgorICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SU1NJQ2FsCisgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3Jzc2lfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJYjQzX25waHlfcmV2M19yc3NpX2NhbChkZXYpOworCX0gZWxzZSB7CisJCWI0M19ucGh5X3JldjJfcnNzaV9jYWwoZGV2LCAyKTsKKwkJYjQzX25waHlfcmV2Ml9yc3NpX2NhbChkZXYsIDApOworCQliNDNfbnBoeV9yZXYyX3Jzc2lfY2FsKGRldiwgMSk7CisJfQorfQorCisvKgorICogUmVzdG9yZSBSU1NJIENhbGlicmF0aW9uCisgKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1Jlc3RvcmVSc3NpQ2FsCisgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3Jlc3RvcmVfcnNzaV9jYWwoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCisJdTE2ICpyc3NpY2FsX3JhZGlvX3JlZ3MgPSBOVUxMOworCXUxNiAqcnNzaWNhbF9waHlfcmVncyA9IE5VTEw7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWlmICghbnBoeS0+cnNzaWNhbF9jaGFuc3BlY18yRykKKwkJCXJldHVybjsKKwkJcnNzaWNhbF9yYWRpb19yZWdzID0gbnBoeS0+cnNzaWNhbF9jYWNoZS5yc3NpY2FsX3JhZGlvX3JlZ3NfMkc7CisJCXJzc2ljYWxfcGh5X3JlZ3MgPSBucGh5LT5yc3NpY2FsX2NhY2hlLnJzc2ljYWxfcGh5X3JlZ3NfMkc7CisJfSBlbHNlIHsKKwkJaWYgKCFucGh5LT5yc3NpY2FsX2NoYW5zcGVjXzVHKQorCQkJcmV0dXJuOworCQlyc3NpY2FsX3JhZGlvX3JlZ3MgPSBucGh5LT5yc3NpY2FsX2NhY2hlLnJzc2ljYWxfcmFkaW9fcmVnc181RzsKKwkJcnNzaWNhbF9waHlfcmVncyA9IG5waHktPnJzc2ljYWxfY2FjaGUucnNzaWNhbF9waHlfcmVnc181RzsKKwl9CisKKwkvKiBUT0RPIHVzZSBzb21lIGRlZmluaXRpb25zICovCisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDYwMkIsIDB4RTMsIHJzc2ljYWxfcmFkaW9fcmVnc1swXSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDcwMkIsIDB4RTMsIHJzc2ljYWxfcmFkaW9fcmVnc1sxXSk7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWiwgcnNzaWNhbF9waHlfcmVnc1swXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1osIHJzc2ljYWxfcGh5X3JlZ3NbMV0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9aLCByc3NpY2FsX3BoeV9yZWdzWzJdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1JTU0lfWiwgcnNzaWNhbF9waHlfcmVnc1szXSk7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWCwgcnNzaWNhbF9waHlfcmVnc1s0XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1gsIHJzc2ljYWxfcGh5X3JlZ3NbNV0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9YLCByc3NpY2FsX3BoeV9yZWdzWzZdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1JTU0lfWCwgcnNzaWNhbF9waHlfcmVnc1s3XSk7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWSwgcnNzaWNhbF9waHlfcmVnc1s4XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1ksIHJzc2ljYWxfcGh5X3JlZ3NbOV0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9ZLCByc3NpY2FsX3BoeV9yZWdzWzEwXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1ksIHJzc2ljYWxfcGh5X3JlZ3NbMTFdKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9HZXRJcGFHYWluVGJsICovCitzdGF0aWMgY29uc3QgdTMyICpiNDNfbnBoeV9nZXRfaXBhX2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJaWYgKGRldi0+cGh5LnJldiA+PSA2KSB7CisJCQkvKiBUT0RPIElmIHRoZSBjaGlwIGlzIDQ3MTYyCisJCQkJcmV0dXJuIHR4cHdyY3RybF90eF9nYWluX2lwYV9yZXY1ICovCisJCQlyZXR1cm4gdHhwd3JjdHJsX3R4X2dhaW5faXBhX3JldjY7CisJCX0gZWxzZSBpZiAoZGV2LT5waHkucmV2ID49IDUpIHsKKwkJCXJldHVybiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGE7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gdHhwd3JjdHJsX3R4X2dhaW5faXBhXzVnOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9UeENhbFJhZGlvU2V0dXAgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3R4X2NhbF9yYWRpb19zZXR1cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTE2ICpzYXZlID0gbnBoeS0+dHhfcnhfY2FsX3JhZGlvX3NhdmVyZWdzOworCXUxNiB0bXA7CisJdTggb2Zmc2V0LCBpOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdG1wID0gKGkgPT0gMCkgPyAweDIwMDAgOiAweDMwMDA7CisJCW9mZnNldCA9IGkgKiAxMTsKKworCQlzYXZlW29mZnNldCArIDBdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0NBTF9SVkFSQ1RMKTsKKwkJc2F2ZVtvZmZzZXQgKyAxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DQUxfTFBPQ1RMKTsKKwkJc2F2ZVtvZmZzZXQgKyAyXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DQUxfVFMpOworCQlzYXZlW29mZnNldCArIDNdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0NBTF9SQ0NBTFJUUyk7CisJCXNhdmVbb2Zmc2V0ICsgNF0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQ0FMX1JDQUxSVFMpOworCQlzYXZlW29mZnNldCArIDVdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X1BBRERSVik7CisJCXNhdmVbb2Zmc2V0ICsgNl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfWE9DVEwxKTsKKwkJc2F2ZVtvZmZzZXQgKyA3XSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9YT0NUTDIpOworCQlzYXZlW29mZnNldCArIDhdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X1hPUkVHVUwpOworCQlzYXZlW29mZnNldCArIDldID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X1hPTUlTQyk7CisJCXNhdmVbb2Zmc2V0ICsgMTBdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X1BMTF9MRkMxKTsKKworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SVkFSQ1RMLCAweDBBKTsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfQ0FMX0xQT0NUTCwgMHg0MCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9UUywgMHg1NSk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SQ0NBTFJUUywgMCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SQ0FMUlRTLCAwKTsKKwkJCWlmIChucGh5LT5pcGE1Z19vbikgeworCQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfUEFERFJWLCA0KTsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPQ1RMMSwgMSk7CisJCQl9IGVsc2UgeworCQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfUEFERFJWLCAwKTsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPQ1RMMSwgMHgyRik7CisJCQl9CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPQ1RMMiwgMCk7CisJCX0gZWxzZSB7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SVkFSQ1RMLCAweDA2KTsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfQ0FMX0xQT0NUTCwgMHg0MCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9UUywgMHg1NSk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SQ0NBTFJUUywgMCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9SQ0FMUlRTLCAwKTsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfWE9DVEwxLCAwKTsKKwkJCWlmIChucGh5LT5pcGEyZ19vbikgeworCQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfUEFERFJWLCA2KTsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPQ1RMMiwKKwkJCQkJKGRldi0+cGh5LnJldiA8IDUpID8gMHgxMSA6IDB4MDEpOworCQkJfSBlbHNlIHsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1BBRERSViwgMCk7CisJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9YT0NUTDIsIDApOworCQkJfQorCQl9CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfWE9SRUdVTCwgMCk7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfWE9NSVNDLCAwKTsKKwkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9QTExfTEZDMSwgMCk7CisJICAgIH0KKwl9IGVsc2UgeworCQlzYXZlWzBdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MxX1RYX1JGX0lRQ0FMMSk7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfVFhfUkZfSVFDQUwxLCAweDI5KTsKKworCQlzYXZlWzFdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MxX1RYX1JGX0lRQ0FMMik7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfVFhfUkZfSVFDQUwyLCAweDU0KTsKKworCQlzYXZlWzJdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MyX1RYX1JGX0lRQ0FMMSk7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzJfVFhfUkZfSVFDQUwxLCAweDI5KTsKKworCQlzYXZlWzNdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MyX1RYX1JGX0lRQ0FMMik7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzJfVFhfUkZfSVFDQUwyLCAweDU0KTsKKworCQlzYXZlWzNdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MxX1BXUkRFVF9SWFRYKTsKKwkJc2F2ZVs0XSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMl9QV1JERVRfUlhUWCk7CisKKwkJaWYgKCEoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQkFORENUTCkgJgorCQkgICAgQjQzX05QSFlfQkFORENUTF81R0haKSkgeworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCBCMjA1NV9DMV9QV1JERVRfUlhUWCwgMHgwNCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MyX1BXUkRFVF9SWFRYLCAweDA0KTsKKwkJfSBlbHNlIHsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfUFdSREVUX1JYVFgsIDB4MjApOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCBCMjA1NV9DMl9QV1JERVRfUlhUWCwgMHgyMCk7CisJCX0KKworCQlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU1X0MxX1RYX0JCX01YR00sIDB4MjApOworCQkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU1X0MyX1RYX0JCX01YR00sIDB4MjApOworCQl9IGVsc2UgeworCQkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMV9UWF9CQl9NWEdNLCB+MHgyMCk7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MyX1RYX0JCX01YR00sIH4weDIwKTsKKwkJfQorCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9JcUNhbEdhaW5QYXJhbXMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X2lxX2NhbF9nYWluX3BhcmFtcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBjb3JlLAorCQkJCQlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldCwKKwkJCQkJc3RydWN0IG5waHlfaXFjYWxfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IGksIGosIGluZHg7CisJdTE2IGdhaW47CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJcGFyYW1zLT50eGdtID0gdGFyZ2V0LnR4Z21bY29yZV07CisJCXBhcmFtcy0+cGdhID0gdGFyZ2V0LnBnYVtjb3JlXTsKKwkJcGFyYW1zLT5wYWQgPSB0YXJnZXQucGFkW2NvcmVdOworCQlwYXJhbXMtPmlwYSA9IHRhcmdldC5pcGFbY29yZV07CisJCXBhcmFtcy0+Y2FsX2dhaW4gPSAocGFyYW1zLT50eGdtIDw8IDEyKSB8IChwYXJhbXMtPnBnYSA8PCA4KSB8CisJCQkJCShwYXJhbXMtPnBhZCA8PCA0KSB8IChwYXJhbXMtPmlwYSk7CisJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspCisJCQlwYXJhbXMtPm5jb3JyW2pdID0gMHg3OTsKKwl9IGVsc2UgeworCQlnYWluID0gKHRhcmdldC5wYWRbY29yZV0pIHwgKHRhcmdldC5wZ2FbY29yZV0gPDwgNCkgfAorCQkJKHRhcmdldC50eGdtW2NvcmVdIDw8IDgpOworCisJCWluZHggPSAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/CisJCQkxIDogMDsKKwkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJCWlmICh0YmxfaXFjYWxfZ2FpbnBhcmFtc1tpbmR4XVtpXVswXSA9PSBnYWluKQorCQkJCWJyZWFrOworCQlpID0gbWluKGksIDgpOworCisJCXBhcmFtcy0+dHhnbSA9IHRibF9pcWNhbF9nYWlucGFyYW1zW2luZHhdW2ldWzFdOworCQlwYXJhbXMtPnBnYSA9IHRibF9pcWNhbF9nYWlucGFyYW1zW2luZHhdW2ldWzJdOworCQlwYXJhbXMtPnBhZCA9IHRibF9pcWNhbF9nYWlucGFyYW1zW2luZHhdW2ldWzNdOworCQlwYXJhbXMtPmNhbF9nYWluID0gKHBhcmFtcy0+dHhnbSA8PCA3KSB8IChwYXJhbXMtPnBnYSA8PCA0KSB8CisJCQkJCShwYXJhbXMtPnBhZCA8PCAyKTsKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKwkJCXBhcmFtcy0+bmNvcnJbal0gPSB0YmxfaXFjYWxfZ2FpbnBhcmFtc1tpbmR4XVtpXVs0ICsgal07CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1VwZGF0ZVR4Q2FsTGFkZGVyICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV91cGRhdGVfdHhfY2FsX2xhZGRlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBjb3JlKQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCWludCBpOworCXUxNiBzY2FsZSwgZW50cnk7CisKKwl1MTYgdG1wID0gbnBoeS0+dHhjYWxfYmJtdWx0OworCWlmIChjb3JlID09IDApCisJCXRtcCA+Pj0gODsKKwl0bXAgJj0gMHhmZjsKKworCWZvciAoaSA9IDA7IGkgPCAxODsgaSsrKSB7CisJCXNjYWxlID0gKGxhZGRlcl9sb1tpXS5wZXJjZW50ICogdG1wKSAvIDEwMDsKKwkJZW50cnkgPSAoKHNjYWxlICYgMHhGRikgPDwgOCkgfCBsYWRkZXJfbG9baV0uZ19lbnY7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNigxNSwgaSksIGVudHJ5KTsKKworCQlzY2FsZSA9IChsYWRkZXJfaXFbaV0ucGVyY2VudCAqIHRtcCkgLyAxMDA7CisJCWVudHJ5ID0gKChzY2FsZSAmIDB4RkYpIDw8IDgpIHwgbGFkZGVyX2lxW2ldLmdfZW52OworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoMTUsIGkgKyAzMiksIGVudHJ5KTsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vRXh0UGFTZXRUeERpZ2lGaWx0cyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfZXh0X3BhX3NldF90eF9kaWdfZmlsdGVycyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04oMHgyQzUgKyBpKSwKKwkJCQl0YmxfdHhfZmlsdGVyX2NvZWZfcmV2NFsyXVtpXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vSXBhU2V0VHhEaWdpRmlsdHMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X2ludF9wYV9zZXRfdHhfZGlnX2ZpbHRlcnMoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWludCBpLCBqOworCS8qIEI0M19OUEhZX1RYRl8yMENPX1MwQTEsIEI0M19OUEhZX1RYRl80MENPX1MwQTEsIHVua25vd24gKi8KKwl1MTYgb2Zmc2V0W10gPSB7IDB4MTg2LCAweDE5NSwgMHgyQzUgfTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCAxNTsgaisrKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTihvZmZzZXRbaV0gKyBqKSwKKwkJCQkJdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbaV1bal0pOworCisJaWYgKGRldi0+cGh5LmlzXzQwbWh6KSB7CisJCWZvciAoaiA9IDA7IGogPCAxNTsgaisrKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTihvZmZzZXRbMF0gKyBqKSwKKwkJCQkJdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbM11bal0pOworCX0gZWxzZSBpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCWZvciAoaiA9IDA7IGogPCAxNTsgaisrKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTihvZmZzZXRbMF0gKyBqKSwKKwkJCQkJdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbNV1bal0pOworCX0KKworCWlmIChkZXYtPnBoeS5jaGFubmVsID09IDE0KQorCQlmb3IgKGogPSAwOyBqIDwgMTU7IGorKykKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04ob2Zmc2V0WzBdICsgaiksCisJCQkJCXRibF90eF9maWx0ZXJfY29lZl9yZXY0WzZdW2pdKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9HZXRUeEdhaW4gKi8KK3N0YXRpYyBzdHJ1Y3QgbnBoeV90eGdhaW5zIGI0M19ucGh5X2dldF90eF9nYWlucyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisKKwl1MTYgY3Vycl9nYWluWzJdOworCXN0cnVjdCBucGh5X3R4Z2FpbnMgdGFyZ2V0OworCWNvbnN0IHUzMiAqdGFibGUgPSBOVUxMOworCisJaWYgKG5waHktPnR4cHdyY3RybCA9PSAwKSB7CisJCWludCBpOworCisJCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIHRydWUpOworCQliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDcsIDB4MTEwKSwgMiwgY3Vycl9nYWluKTsKKwkJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgZmFsc2UpOworCisJCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpIHsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJCXRhcmdldC5pcGFbaV0gPSBjdXJyX2dhaW5baV0gJiAweDAwMEY7CisJCQkJdGFyZ2V0LnBhZFtpXSA9IChjdXJyX2dhaW5baV0gJiAweDAwRjApID4+IDQ7CisJCQkJdGFyZ2V0LnBnYVtpXSA9IChjdXJyX2dhaW5baV0gJiAweDBGMDApID4+IDg7CisJCQkJdGFyZ2V0LnR4Z21baV0gPSAoY3Vycl9nYWluW2ldICYgMHg3MDAwKSA+PiAxMjsKKwkJCX0gZWxzZSB7CisJCQkJdGFyZ2V0LmlwYVtpXSA9IGN1cnJfZ2FpbltpXSAmIDB4MDAwMzsKKwkJCQl0YXJnZXQucGFkW2ldID0gKGN1cnJfZ2FpbltpXSAmIDB4MDAwQykgPj4gMjsKKwkJCQl0YXJnZXQucGdhW2ldID0gKGN1cnJfZ2FpbltpXSAmIDB4MDA3MCkgPj4gNDsKKwkJCQl0YXJnZXQudHhnbVtpXSA9IChjdXJyX2dhaW5baV0gJiAweDAzODApID4+IDc7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJdTE2IGluZGV4WzJdOworCQlpbmRleFswXSA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DMV9UWFBDVExfU1RBVCkgJgorCQkJQjQzX05QSFlfVFhQQ1RMX1NUQVRfQklEWCkgPj4KKwkJCUI0M19OUEhZX1RYUENUTF9TVEFUX0JJRFhfU0hJRlQ7CisJCWluZGV4WzFdID0gKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MyX1RYUENUTF9TVEFUKSAmCisJCQlCNDNfTlBIWV9UWFBDVExfU1RBVF9CSURYKSA+PgorCQkJQjQzX05QSFlfVFhQQ1RMX1NUQVRfQklEWF9TSElGVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPQorCQkJCQliNDNfY3VycmVudF9iYW5kKGRldi0+d2wpOworCisJCQkJaWYgKChucGh5LT5pcGEyZ19vbiAmJgorCQkJCSAgICAgYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB8fAorCQkJCSAgICAobnBoeS0+aXBhNWdfb24gJiYKKwkJCQkgICAgIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikpIHsKKwkJCQkJdGFibGUgPSBiNDNfbnBoeV9nZXRfaXBhX2dhaW5fdGFibGUoZGV2KTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCQkJCQlpZiAoZGV2LT5waHkucmV2ID09IDMpCisJCQkJCQkJdGFibGUgPSBiNDNfbnRhYl90eF9nYWluX3JldjNfNWdoejsKKwkJCQkJCWVsc2UgaWYgKGRldi0+cGh5LnJldiA9PSA0KQorCQkJCQkJCXRhYmxlID0gYjQzX250YWJfdHhfZ2Fpbl9yZXY0XzVnaHo7CisJCQkJCQllbHNlCisJCQkJCQkJdGFibGUgPSBiNDNfbnRhYl90eF9nYWluX3JldjVwbHVzXzVnaHo7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl0YWJsZSA9IGI0M19udGFiX3R4X2dhaW5fcmV2M3BsdXNfMmdoejsKKwkJCQkJfQorCQkJCX0KKworCQkJCXRhcmdldC5pcGFbaV0gPSAodGFibGVbaW5kZXhbaV1dID4+IDE2KSAmIDB4RjsKKwkJCQl0YXJnZXQucGFkW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAyMCkgJiAweEY7CisJCQkJdGFyZ2V0LnBnYVtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMjQpICYgMHhGOworCQkJCXRhcmdldC50eGdtW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAyOCkgJiAweEY7CisJCQl9IGVsc2UgeworCQkJCXRhYmxlID0gYjQzX250YWJfdHhfZ2Fpbl9yZXYwXzFfMjsKKworCQkJCXRhcmdldC5pcGFbaV0gPSAodGFibGVbaW5kZXhbaV1dID4+IDE2KSAmIDB4MzsKKwkJCQl0YXJnZXQucGFkW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAxOCkgJiAweDM7CisJCQkJdGFyZ2V0LnBnYVtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMjApICYgMHg3OworCQkJCXRhcmdldC50eGdtW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAyMykgJiAweDc7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdGFyZ2V0OworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1R4Q2FsUGh5Q2xlYW51cCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfY2FsX3BoeV9jbGVhbnVwKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MTYgKnJlZ3MgPSBkZXYtPnBoeS5uLT50eF9yeF9jYWxfcGh5X3NhdmVyZWdzOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEsIHJlZ3NbMF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyLCByZWdzWzFdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSwgcmVnc1syXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgcmVnc1szXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywgcmVnc1s0XSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAzKSwgcmVnc1s1XSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAxOSksIHJlZ3NbNl0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEsIHJlZ3NbN10pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHJlZ3NbOF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEFQRF9FTjAsIHJlZ3NbOV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEFQRF9FTjEsIHJlZ3NbMTBdKTsKKwkJYjQzX25waHlfcmVzZXRfY2NhKGRldik7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCAweDBGRkYsIHJlZ3NbMF0pOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIDB4MEZGRiwgcmVnc1sxXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgcmVnc1syXSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAyKSwgcmVnc1szXSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAxOCksIHJlZ3NbNF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEsIHJlZ3NbNV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHJlZ3NbNl0pOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9UeENhbFBoeVNldHVwICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV90eF9jYWxfcGh5X3NldHVwKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MTYgKnJlZ3MgPSBkZXYtPnBoeS5uLT50eF9yeF9jYWxfcGh5X3NhdmVyZWdzOwogCXUxNiB0bXA7CiAKLQkvL1RPRE86IFNwZWN0cmFsIG1hbmFnZW1lbnQKKwlyZWdzWzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxKTsKKwlyZWdzWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyKTsKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCAweEYwRkYsIDB4MEEwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgMHhGMEZGLCAweDBBMDApOworCisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSk7CisJCXJlZ3NbMl0gPSB0bXA7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEsIHRtcCB8IDB4MDYwMCk7CisKKwkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIpOworCQlyZWdzWzNdID0gdG1wOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHRtcCB8IDB4MDYwMCk7CisKKwkJcmVnc1s0XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0JCQ0ZHKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQkJDRkcsICh1MTYpfkI0M19OUEhZX0JCQ0ZHX1JTVFJYKTsKKworCQl0bXAgPSBiNDNfbnRhYl9yZWFkKGRldiwgQjQzX05UQUIxNig4LCAzKSk7CisJCXJlZ3NbNV0gPSB0bXA7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAzKSwgMCk7CisKKwkJdG1wID0gYjQzX250YWJfcmVhZChkZXYsIEI0M19OVEFCMTYoOCwgMTkpKTsKKwkJcmVnc1s2XSA9IHRtcDsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDE5KSwgMCk7CisJCXJlZ3NbN10gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSk7CisJCXJlZ3NbOF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMik7CisKKwkJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMiwgMSwgMyk7CisJCWI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShkZXYsIDEsIDIsIDEpOworCQliNDNfbnBoeV9yZl9jb250cm9sX2ludGNfb3ZlcnJpZGUoZGV2LCAxLCA4LCAyKTsKKworCQlyZWdzWzldID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUEFQRF9FTjApOworCQlyZWdzWzEwXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1BBUERfRU4xKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUEFQRF9FTjAsIH4weDAwMDEpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QQVBEX0VOMSwgfjB4MDAwMSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCAweDBGRkYsIDB4QTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgMHgwRkZGLCAweEEwMDApOworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CisJCXJlZ3NbMl0gPSB0bXA7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgdG1wIHwgMHgzMDAwKTsKKwkJdG1wID0gYjQzX250YWJfcmVhZChkZXYsIEI0M19OVEFCMTYoOCwgMikpOworCQlyZWdzWzNdID0gdG1wOworCQl0bXAgfD0gMHgyMDAwOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMiksIHRtcCk7CisJCXRtcCA9IGI0M19udGFiX3JlYWQoZGV2LCBCNDNfTlRBQjE2KDgsIDE4KSk7CisJCXJlZ3NbNF0gPSB0bXA7CisJCXRtcCB8PSAweDIwMDA7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAxOCksIHRtcCk7CisJCXJlZ3NbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSk7CisJCXJlZ3NbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMik7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQl0bXAgPSAweDAxODA7CisJCWVsc2UKKwkJCXRtcCA9IDB4MDEyMDsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCB0bXApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIHRtcCk7CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NhdmVDYWwgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3NhdmVfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKworCXN0cnVjdCBiNDNfcGh5X25faXFfY29tcCAqcnhjYWxfY29lZmZzID0gTlVMTDsKKwl1MTYgKnR4Y2FsX3JhZGlvX3JlZ3MgPSBOVUxMOworCXU4ICppcWNhbF9jaGFuc3BlYzsKKwl1MTYgKnRhYmxlID0gTlVMTDsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXJ4Y2FsX2NvZWZmcyA9ICZucGh5LT5jYWxfY2FjaGUucnhjYWxfY29lZmZzXzJHOworCQl0eGNhbF9yYWRpb19yZWdzID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX3JhZGlvX3JlZ3NfMkc7CisJCWlxY2FsX2NoYW5zcGVjID0gJm5waHktPmlxY2FsX2NoYW5zcGVjXzJHOworCQl0YWJsZSA9IG5waHktPmNhbF9jYWNoZS50eGNhbF9jb2VmZnNfMkc7CisJfSBlbHNlIHsKKwkJcnhjYWxfY29lZmZzID0gJm5waHktPmNhbF9jYWNoZS5yeGNhbF9jb2VmZnNfNUc7CisJCXR4Y2FsX3JhZGlvX3JlZ3MgPSBucGh5LT5jYWxfY2FjaGUudHhjYWxfcmFkaW9fcmVnc181RzsKKwkJaXFjYWxfY2hhbnNwZWMgPSAmbnBoeS0+aXFjYWxfY2hhbnNwZWNfNUc7CisJCXRhYmxlID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX2NvZWZmc181RzsKKwl9CisKKwliNDNfbnBoeV9yeF9pcV9jb2VmZnMoZGV2LCBmYWxzZSwgcnhjYWxfY29lZmZzKTsKKwkvKiBUT0RPIHVzZSBzb21lIGRlZmluaXRpb25zICovCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbMF0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MjAyMSk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbMV0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MjAyMik7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbMl0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MzAyMSk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbM10gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MzAyMik7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbNF0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MjAyMyk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbNV0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MjAyNCk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbNl0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MzAyMyk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbN10gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4MzAyNCk7CisJfSBlbHNlIHsKKwkJdHhjYWxfcmFkaW9fcmVnc1swXSA9IGI0M19yYWRpb19yZWFkKGRldiwgMHg4Qik7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbMV0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4QkEpOworCQl0eGNhbF9yYWRpb19yZWdzWzJdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDhEKTsKKwkJdHhjYWxfcmFkaW9fcmVnc1szXSA9IGI0M19yYWRpb19yZWFkKGRldiwgMHhCQyk7CisJfQorCSppcWNhbF9jaGFuc3BlYyA9IG5waHktPnJhZGlvX2NoYW5zcGVjOworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4MCksIDgsIHRhYmxlKTsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMCk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUmVzdG9yZUNhbCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmVzdG9yZV9jYWwoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCisJdTE2IGNvZWZbNF07CisJdTE2ICpsb2Z0ID0gTlVMTDsKKwl1MTYgKnRhYmxlID0gTlVMTDsKKworCWludCBpOworCXUxNiAqdHhjYWxfcmFkaW9fcmVncyA9IE5VTEw7CisJc3RydWN0IGI0M19waHlfbl9pcV9jb21wICpyeGNhbF9jb2VmZnMgPSBOVUxMOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpZiAobnBoeS0+aXFjYWxfY2hhbnNwZWNfMkcgPT0gMCkKKwkJCXJldHVybjsKKwkJdGFibGUgPSBucGh5LT5jYWxfY2FjaGUudHhjYWxfY29lZmZzXzJHOworCQlsb2Z0ID0gJm5waHktPmNhbF9jYWNoZS50eGNhbF9jb2VmZnNfMkdbNV07CisJfSBlbHNlIHsKKwkJaWYgKG5waHktPmlxY2FsX2NoYW5zcGVjXzVHID09IDApCisJCQlyZXR1cm47CisJCXRhYmxlID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX2NvZWZmc181RzsKKwkJbG9mdCA9ICZucGh5LT5jYWxfY2FjaGUudHhjYWxfY29lZmZzXzVHWzVdOworCX0KKworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4MCksIDQsIHRhYmxlKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQkJdGFibGVbaV0gPSBjb2VmW2ldOworCQllbHNlCisJCQljb2VmW2ldID0gMDsKKwl9CisKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODgpLCA0LCBjb2VmKTsKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODUpLCAyLCBsb2Z0KTsKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgOTMpLCAyLCBsb2Z0KTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKQorCQliNDNfbnBoeV90eF9pcV93b3JrYXJvdW5kKGRldik7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXR4Y2FsX3JhZGlvX3JlZ3MgPSBucGh5LT5jYWxfY2FjaGUudHhjYWxfcmFkaW9fcmVnc18yRzsKKwkJcnhjYWxfY29lZmZzID0gJm5waHktPmNhbF9jYWNoZS5yeGNhbF9jb2VmZnNfMkc7CisJfSBlbHNlIHsKKwkJdHhjYWxfcmFkaW9fcmVncyA9IG5waHktPmNhbF9jYWNoZS50eGNhbF9yYWRpb19yZWdzXzVHOworCQlyeGNhbF9jb2VmZnMgPSAmbnBoeS0+Y2FsX2NhY2hlLnJ4Y2FsX2NvZWZmc181RzsKKwl9CisKKwkvKiBUT0RPIHVzZSBzb21lIGRlZmluaXRpb25zICovCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MjAyMSwgdHhjYWxfcmFkaW9fcmVnc1swXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MjAyMiwgdHhjYWxfcmFkaW9fcmVnc1sxXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MzAyMSwgdHhjYWxfcmFkaW9fcmVnc1syXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MzAyMiwgdHhjYWxfcmFkaW9fcmVnc1szXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MjAyMywgdHhjYWxfcmFkaW9fcmVnc1s0XSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MjAyNCwgdHhjYWxfcmFkaW9fcmVnc1s1XSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MzAyMywgdHhjYWxfcmFkaW9fcmVnc1s2XSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4MzAyNCwgdHhjYWxfcmFkaW9fcmVnc1s3XSk7CisJfSBlbHNlIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgMHg4QiwgdHhjYWxfcmFkaW9fcmVnc1swXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4QkEsIHR4Y2FsX3JhZGlvX3JlZ3NbMV0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDhELCB0eGNhbF9yYWRpb19yZWdzWzJdKTsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgMHhCQywgdHhjYWxfcmFkaW9fcmVnc1szXSk7CisJfQorCWI0M19ucGh5X3J4X2lxX2NvZWZmcyhkZXYsIHRydWUsIHJ4Y2FsX2NvZWZmcyk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQ2FsVHhJcWxvICovCitzdGF0aWMgaW50IGI0M19ucGh5X2NhbF90eF9pcV9sbyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJc3RydWN0IG5waHlfdHhnYWlucyB0YXJnZXQsCisJCQkJYm9vbCBmdWxsLCBib29sIG1waGFzZSkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwlpbnQgaTsKKwlpbnQgZXJyb3IgPSAwOworCWludCBmcmVxOworCWJvb2wgYXZvaWQgPSBmYWxzZTsKKwl1OCBsZW5ndGg7CisJdTE2IHRtcCwgY29yZSwgdHlwZSwgY291bnQsIG1heCwgbnVtYiwgbGFzdCwgY21kOworCWNvbnN0IHUxNiAqdGFibGU7CisJYm9vbCBwaHk2b3I1eDsKKworCXUxNiBidWZmZXJbMTFdOworCXUxNiBkaXFfc3RhcnQgPSAwOworCXUxNiBzYXZlWzJdOworCXUxNiBnYWluWzJdOworCXN0cnVjdCBucGh5X2lxY2FsX3BhcmFtcyBwYXJhbXNbMl07CisJYm9vbCB1cGRhdGVkWzJdID0geyB9OworCisJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIHRydWUpOworCisJaWYgKGRldi0+cGh5LnJldiA+PSA0KSB7CisJCWF2b2lkID0gbnBoeS0+aGFuZ19hdm9pZDsKKwkJbnBoeS0+aGFuZ19hdm9pZCA9IDA7CisJfQorCisJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIHNhdmUpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQliNDNfbnBoeV9pcV9jYWxfZ2Fpbl9wYXJhbXMoZGV2LCBpLCB0YXJnZXQsICZwYXJhbXNbaV0pOworCQlnYWluW2ldID0gcGFyYW1zW2ldLmNhbF9nYWluOworCX0KKworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDcsIDB4MTEwKSwgMiwgZ2Fpbik7CisKKwliNDNfbnBoeV90eF9jYWxfcmFkaW9fc2V0dXAoZGV2KTsKKwliNDNfbnBoeV90eF9jYWxfcGh5X3NldHVwKGRldik7CisKKwlwaHk2b3I1eCA9IGRldi0+cGh5LnJldiA+PSA2IHx8CisJCShkZXYtPnBoeS5yZXYgPT0gNSAmJiBucGh5LT5pcGEyZ19vbiAmJgorCQliNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopOworCWlmIChwaHk2b3I1eCkgeworCQlpZiAoZGV2LT5waHkuaXNfNDBtaHopIHsKKwkJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCAwKSwgMTgsCisJCQkJCXRibF90eF9pcWxvX2NhbF9sb2Z0X2xhZGRlcl80MCk7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgMzIpLCAxOCwKKwkJCQkJdGJsX3R4X2lxbG9fY2FsX2lxaW1iX2xhZGRlcl80MCk7CisJCX0gZWxzZSB7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgMCksIDE4LAorCQkJCQl0YmxfdHhfaXFsb19jYWxfbG9mdF9sYWRkZXJfMjApOworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDMyKSwgMTgsCisJCQkJCXRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfMjApOworCQl9CisJfQorCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ER0NUTCwgMHg4QUE5KTsKKworCWlmICghZGV2LT5waHkuaXNfNDBtaHopCisJCWZyZXEgPSAyNTAwOworCWVsc2UKKwkJZnJlcSA9IDUwMDA7CisKKwlpZiAobnBoeS0+bXBoYXNlX2NhbF9waGFzZV9pZCA+IDIpCisJCWI0M19ucGh5X3J1bl9zYW1wbGVzKGRldiwgKGRldi0+cGh5LmlzXzQwbWh6ID8gNDAgOiAyMCkgKiA4LAorCQkJCQkweEZGRkYsIDAsIHRydWUsIGZhbHNlKTsKKwllbHNlCisJCWVycm9yID0gYjQzX25waHlfdHhfdG9uZShkZXYsIGZyZXEsIDI1MCwgdHJ1ZSwgZmFsc2UpOworCisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPiAyKSB7CisJCQl0YWJsZSA9IG5waHktPm1waGFzZV90eGNhbF9iZXN0Y29lZmZzOworCQkJbGVuZ3RoID0gMTE7CisJCQlpZiAoZGV2LT5waHkucmV2IDwgMykKKwkJCQlsZW5ndGggLT0gMjsKKwkJfSBlbHNlIHsKKwkJCWlmICghZnVsbCAmJiBucGh5LT50eGlxbG9jYWxfY29lZmZzdmFsaWQpIHsKKwkJCQl0YWJsZSA9IG5waHktPnR4aXFsb2NhbF9iZXN0YzsKKwkJCQlsZW5ndGggPSAxMTsKKwkJCQlpZiAoZGV2LT5waHkucmV2IDwgMykKKwkJCQkJbGVuZ3RoIC09IDI7CisJCQl9IGVsc2UgeworCQkJCWZ1bGwgPSB0cnVlOworCQkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJCQl0YWJsZSA9IHRibF90eF9pcWxvX2NhbF9zdGFydGNvZWZzX25waHlyZXYzOworCQkJCQlsZW5ndGggPSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9TVEFSVENPRUZTX1JFVjM7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGFibGUgPSB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2VmczsKKwkJCQkJbGVuZ3RoID0gQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGUzsKKwkJCQl9CisJCQl9CisJCX0KKworCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgNjQpLCBsZW5ndGgsIHRhYmxlKTsKKworCQlpZiAoZnVsbCkgeworCQkJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQkJCW1heCA9IEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfRlVMTENBTF9SRVYzOworCQkJZWxzZQorCQkJCW1heCA9IEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfRlVMTENBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCQltYXggPSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX1JFQ0FMX1JFVjM7CisJCQllbHNlCisJCQkJbWF4ID0gQjQzX05UQUJfVFhfSVFMT19DQUxfQ01EU19SRUNBTDsKKwkJfQorCisJCWlmIChtcGhhc2UpIHsKKwkJCWNvdW50ID0gbnBoeS0+bXBoYXNlX3R4Y2FsX2NtZGlkeDsKKwkJCW51bWIgPSBtaW4obWF4LAorCQkJCSh1MTYpKGNvdW50ICsgbnBoeS0+bXBoYXNlX3R4Y2FsX251bWNtZHMpKTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gMDsKKwkJCW51bWIgPSBtYXg7CisJCX0KKworCQlmb3IgKDsgY291bnQgPCBudW1iOyBjb3VudCsrKSB7CisJCQlpZiAoZnVsbCkgeworCQkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCQkJY21kID0gdGJsX3R4X2lxbG9fY2FsX2NtZHNfZnVsbGNhbF9ucGh5cmV2M1tjb3VudF07CisJCQkJZWxzZQorCQkJCQljbWQgPSB0YmxfdHhfaXFsb19jYWxfY21kc19mdWxsY2FsW2NvdW50XTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQkJCQljbWQgPSB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbF9ucGh5cmV2M1tjb3VudF07CisJCQkJZWxzZQorCQkJCQljbWQgPSB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbFtjb3VudF07CisJCQl9CisKKwkJCWNvcmUgPSAoY21kICYgMHgzMDAwKSA+PiAxMjsKKwkJCXR5cGUgPSAoY21kICYgMHgwRjAwKSA+PiA4OworCisJCQlpZiAocGh5Nm9yNXggJiYgdXBkYXRlZFtjb3JlXSA9PSAwKSB7CisJCQkJYjQzX25waHlfdXBkYXRlX3R4X2NhbF9sYWRkZXIoZGV2LCBjb3JlKTsKKwkJCQl1cGRhdGVkW2NvcmVdID0gMTsKKwkJCX0KKworCQkJdG1wID0gKHBhcmFtc1tjb3JlXS5uY29yclt0eXBlXSA8PCA4KSB8IDB4NjY7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTUROTlVNLCB0bXApOworCisJCQlpZiAodHlwZSA9PSAxIHx8IHR5cGUgPT0gMyB8fCB0eXBlID09IDQpIHsKKwkJCQlidWZmZXJbMF0gPSBiNDNfbnRhYl9yZWFkKGRldiwKKwkJCQkJCUI0M19OVEFCMTYoMTUsIDY5ICsgY29yZSkpOworCQkJCWRpcV9zdGFydCA9IGJ1ZmZlclswXTsKKwkJCQlidWZmZXJbMF0gPSAwOworCQkJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNigxNSwgNjkgKyBjb3JlKSwKKwkJCQkJCTApOworCQkJfQorCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTUQsIGNtZCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCQkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTUQpOworCQkJCWlmICh0bXAgJiAweEMwMDApCisJCQkJCWJyZWFrOworCQkJCXVkZWxheSgxMCk7CisJCQl9CisKKwkJCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDk2KSwgbGVuZ3RoLAorCQkJCQkJYnVmZmVyKTsKKwkJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA2NCksIGxlbmd0aCwKKwkJCQkJCWJ1ZmZlcik7CisKKwkJCWlmICh0eXBlID09IDEgfHwgdHlwZSA9PSAzIHx8IHR5cGUgPT0gNCkKKwkJCQlidWZmZXJbMF0gPSBkaXFfc3RhcnQ7CisJCX0KKworCQlpZiAobXBoYXNlKQorCQkJbnBoeS0+bXBoYXNlX3R4Y2FsX2NtZGlkeCA9IChudW1iID49IG1heCkgPyAwIDogbnVtYjsKKworCQlsYXN0ID0gKGRldi0+cGh5LnJldiA8IDMpID8gNiA6IDc7CisKKwkJaWYgKCFtcGhhc2UgfHwgbnBoeS0+bXBoYXNlX2NhbF9waGFzZV9pZCA9PSBsYXN0KSB7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgOTYpLCA0LCBidWZmZXIpOworCQkJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA0LCBidWZmZXIpOworCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpIHsKKwkJCQlidWZmZXJbMF0gPSAwOworCQkJCWJ1ZmZlclsxXSA9IDA7CisJCQkJYnVmZmVyWzJdID0gMDsKKwkJCQlidWZmZXJbM10gPSAwOworCQkJfQorCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg4KSwgNCwKKwkJCQkJCWJ1ZmZlcik7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgMTAxKSwgMiwKKwkJCQkJCWJ1ZmZlcik7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODUpLCAyLAorCQkJCQkJYnVmZmVyKTsKKwkJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA5MyksIDIsCisJCQkJCQlidWZmZXIpOworCQkJbGVuZ3RoID0gMTE7CisJCQlpZiAoZGV2LT5waHkucmV2IDwgMykKKwkJCQlsZW5ndGggLT0gMjsKKwkJCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDk2KSwgbGVuZ3RoLAorCQkJCQkJbnBoeS0+dHhpcWxvY2FsX2Jlc3RjKTsKKwkJCW5waHktPnR4aXFsb2NhbF9jb2VmZnN2YWxpZCA9IHRydWU7CisJCQkvKiBUT0RPOiBTZXQgbnBoeS0+dHhpcWxvY2FsX2NoYW5zcGVjIHRvCisJCQkJdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQl9IGVsc2UgeworCQkJbGVuZ3RoID0gMTE7CisJCQlpZiAoZGV2LT5waHkucmV2IDwgMykKKwkJCQlsZW5ndGggLT0gMjsKKwkJCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDk2KSwgbGVuZ3RoLAorCQkJCQkJbnBoeS0+bXBoYXNlX3R4Y2FsX2Jlc3Rjb2VmZnMpOworCQl9CisKKwkJYjQzX25waHlfc3RvcF9wbGF5YmFjayhkZXYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTURHQ1RMLCAwKTsKKwl9CisKKwliNDNfbnBoeV90eF9jYWxfcGh5X2NsZWFudXAoZGV2KTsKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIHNhdmUpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIgJiYgKCFtcGhhc2UgfHwgbnBoeS0+bXBoYXNlX2NhbF9waGFzZV9pZCA9PSBsYXN0KSkKKwkJYjQzX25waHlfdHhfaXFfd29ya2Fyb3VuZChkZXYpOworCisJaWYgKGRldi0+cGh5LnJldiA+PSA0KQorCQlucGh5LT5oYW5nX2F2b2lkID0gYXZvaWQ7CisKKwliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgZmFsc2UpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1JlYXBwbHlUeENhbENvZWZmcyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmVhcHBseV90eF9jYWxfY29lZmZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwl1OCBpOworCXUxNiBidWZmZXJbN107CisJYm9vbCBlcXVhbCA9IHRydWU7CisKKwlpZiAoIW5waHktPnR4aXFsb2NhbF9jb2VmZnN2YWxpZCB8fCAxIC8qIEZJWE1FICovKQorCQlyZXR1cm47CisKKwliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4MCksIDcsIGJ1ZmZlcik7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoYnVmZmVyW2ldICE9IG5waHktPnR4aXFsb2NhbF9iZXN0Y1tpXSkgeworCQkJZXF1YWwgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFlcXVhbCkgeworCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA0LAorCQkJCQlucGh5LT50eGlxbG9jYWxfYmVzdGMpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJYnVmZmVyW2ldID0gMDsKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg4KSwgNCwKKwkJCQkJYnVmZmVyKTsKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg1KSwgMiwKKwkJCQkJJm5waHktPnR4aXFsb2NhbF9iZXN0Y1s1XSk7CisJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA5MyksIDIsCisJCQkJCSZucGh5LT50eGlxbG9jYWxfYmVzdGNbNV0pOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9DYWxSeElxUmV2MiAqLworc3RhdGljIGludCBiNDNfbnBoeV9yZXYyX2NhbF9yeF9pcShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldCwgdTggdHlwZSwgYm9vbCBkZWJ1ZykKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwlpbnQgaSwgaiwgaW5kZXg7CisJdTggcmZjdGxbMl07CisJdTggYWZlY3RsX2NvcmU7CisJdTE2IHRtcFs2XTsKKwl1MTYgY3VyX2hwZjEsIGN1cl9ocGYyLCBjdXJfbG5hOworCXUzMiByZWFsLCBpbWFnOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCXU4IHVzZTsKKwl1MTYgY3VyX2hwZjsKKwl1MTYgbG5hWzNdID0geyAzLCAzLCAxIH07CisJdTE2IGhwZjFbM10gPSB7IDcsIDIsIDAgfTsKKwl1MTYgaHBmMlszXSA9IHsgMiwgMCwgMCB9OworCXUzMiBwb3dlclszXSA9IHsgfTsKKwl1MTYgZ2Fpbl9zYXZlWzJdOworCXUxNiBjYWxfZ2FpblsyXTsKKwlzdHJ1Y3QgbnBoeV9pcWNhbF9wYXJhbXMgY2FsX3BhcmFtc1syXTsKKwlzdHJ1Y3QgbnBoeV9pcV9lc3QgZXN0OworCWludCByZXQgPSAwOworCWJvb2wgcGxheXRvbmUgPSB0cnVlOworCWludCBkZXNpcmVkID0gMTM7CisKKwliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJYjQzX25waHlfcmVhcHBseV90eF9jYWxfY29lZmZzKGRldik7CisJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIGdhaW5fc2F2ZSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQliNDNfbnBoeV9pcV9jYWxfZ2Fpbl9wYXJhbXMoZGV2LCBpLCB0YXJnZXQsICZjYWxfcGFyYW1zW2ldKTsKKwkJY2FsX2dhaW5baV0gPSBjYWxfcGFyYW1zW2ldLmNhbF9nYWluOworCX0KKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIGNhbF9nYWluKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGkgPT0gMCkgeworCQkJcmZjdGxbMF0gPSBCNDNfTlBIWV9SRkNUTF9JTlRDMTsKKwkJCXJmY3RsWzFdID0gQjQzX05QSFlfUkZDVExfSU5UQzI7CisJCQlhZmVjdGxfY29yZSA9IEI0M19OUEhZX0FGRUNUTF9DMTsKKwkJfSBlbHNlIHsKKwkJCXJmY3RsWzBdID0gQjQzX05QSFlfUkZDVExfSU5UQzI7CisJCQlyZmN0bFsxXSA9IEI0M19OUEhZX1JGQ1RMX0lOVEMxOworCQkJYWZlY3RsX2NvcmUgPSBCNDNfTlBIWV9BRkVDVExfQzI7CisJCX0KKworCQl0bXBbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBKTsKKwkJdG1wWzJdID0gYjQzX3BoeV9yZWFkKGRldiwgYWZlY3RsX2NvcmUpOworCQl0bXBbM10gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CisJCXRtcFs0XSA9IGI0M19waHlfcmVhZChkZXYsIHJmY3RsWzBdKTsKKwkJdG1wWzVdID0gYjQzX3BoeV9yZWFkKGRldiwgcmZjdGxbMV0pOworCisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsCisJCQkJKHUxNil+QjQzX05QSFlfUkZTRVFDQV9SWERJUywKKwkJCQkoKDEgLSBpKSA8PCBCNDNfTlBIWV9SRlNFUUNBX1JYRElTX1NISUZUKSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsIH5CNDNfTlBIWV9SRlNFUUNBX1RYRU4sCisJCQkJKDEgLSBpKSk7CisJCWI0M19waHlfc2V0KGRldiwgYWZlY3RsX2NvcmUsIDB4MDAwNik7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4MDAwNik7CisKKwkJYmFuZCA9IGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCk7CisKKwkJaWYgKG5waHktPnJ4Y2FscGFyYW1zICYgMHhGRjAwMDAwMCkgeworCQkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQliNDNfcGh5X3dyaXRlKGRldiwgcmZjdGxbMF0sIDB4MTQwKTsKKwkJCWVsc2UKKwkJCQliNDNfcGh5X3dyaXRlKGRldiwgcmZjdGxbMF0sIDB4MTEwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzBdLCAweDE4MCk7CisJCQllbHNlCisJCQkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzBdLCAweDEyMCk7CisJCX0KKworCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzFdLCAweDE0OCk7CisJCWVsc2UKKwkJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFsxXSwgMHgxMTQpOworCisJCWlmIChucGh5LT5yeGNhbHBhcmFtcyAmIDB4MTAwMDApIHsKKwkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfR0VOU1BBUkUyLCAweEZDLAorCQkJCQkoaSArIDEpKTsKKwkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzJfR0VOU1BBUkUyLCAweEZDLAorCQkJCQkoMiAtIGkpKTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGkgPCA0OyBqKyspIHsKKwkJCWlmIChqIDwgMykgeworCQkJCWN1cl9sbmEgPSBsbmFbal07CisJCQkJY3VyX2hwZjEgPSBocGYxW2pdOworCQkJCWN1cl9ocGYyID0gaHBmMltqXTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHBvd2VyWzFdID4gMTAwMDApIHsKKwkJCQkJdXNlID0gMTsKKwkJCQkJY3VyX2hwZiA9IGN1cl9ocGYxOworCQkJCQlpbmRleCA9IDI7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHBvd2VyWzBdID4gMTAwMDApIHsKKwkJCQkJCXVzZSA9IDE7CisJCQkJCQljdXJfaHBmID0gY3VyX2hwZjE7CisJCQkJCQlpbmRleCA9IDE7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpbmRleCA9IDA7CisJCQkJCQl1c2UgPSAyOworCQkJCQkJY3VyX2hwZiA9IGN1cl9ocGYyOworCQkJCQl9CisJCQkJfQorCQkJCWN1cl9sbmEgPSBsbmFbaW5kZXhdOworCQkJCWN1cl9ocGYxID0gaHBmMVtpbmRleF07CisJCQkJY3VyX2hwZjIgPSBocGYyW2luZGV4XTsKKwkJCQljdXJfaHBmICs9IGRlc2lyZWQgLSBod2VpZ2h0MzIocG93ZXJbaW5kZXhdKTsKKwkJCQljdXJfaHBmID0gY2xhbXBfdmFsKGN1cl9ocGYsIDAsIDEwKTsKKwkJCQlpZiAodXNlID09IDEpCisJCQkJCWN1cl9ocGYxID0gY3VyX2hwZjsKKwkJCQllbHNlCisJCQkJCWN1cl9ocGYyID0gY3VyX2hwZjsKKwkJCX0KKworCQkJdG1wWzBdID0gKChjdXJfaHBmMiA8PCA4KSB8IChjdXJfaHBmMSA8PCA0KSB8CisJCQkJCShjdXJfbG5hIDw8IDIpKTsKKwkJCWI0M19ucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGUoZGV2LCAweDQwMCwgdG1wWzBdLCAzLAorCQkJCQkJCQkJZmFsc2UpOworCQkJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUkVTRVQyUlgpOworCQkJYjQzX25waHlfc3RvcF9wbGF5YmFjayhkZXYpOworCisJCQlpZiAocGxheXRvbmUpIHsKKwkJCQlyZXQgPSBiNDNfbnBoeV90eF90b25lKGRldiwgNDAwMCwKKwkJCQkJCShucGh5LT5yeGNhbHBhcmFtcyAmIDB4RkZGRiksCisJCQkJCQlmYWxzZSwgZmFsc2UpOworCQkJCXBsYXl0b25lID0gZmFsc2U7CisJCQl9IGVsc2UgeworCQkJCWI0M19ucGh5X3J1bl9zYW1wbGVzKGRldiwgMTYwLCAweEZGRkYsIDAsCisJCQkJCQkJZmFsc2UsIGZhbHNlKTsKKwkJCX0KKworCQkJaWYgKHJldCA9PSAwKSB7CisJCQkJaWYgKGogPCAzKSB7CisJCQkJCWI0M19ucGh5X3J4X2lxX2VzdChkZXYsICZlc3QsIDEwMjQsIDMyLAorCQkJCQkJCQkJZmFsc2UpOworCQkJCQlpZiAoaSA9PSAwKSB7CisJCQkJCQlyZWFsID0gZXN0LmkwX3B3cjsKKwkJCQkJCWltYWcgPSBlc3QucTBfcHdyOworCQkJCQl9IGVsc2UgeworCQkJCQkJcmVhbCA9IGVzdC5pMV9wd3I7CisJCQkJCQlpbWFnID0gZXN0LnExX3B3cjsKKwkJCQkJfQorCQkJCQlwb3dlcltpXSA9ICgocmVhbCArIGltYWcpIC8gMTAyNCkgKyAxOworCQkJCX0gZWxzZSB7CisJCQkJCWI0M19ucGh5X2NhbGNfcnhfaXFfY29tcChkZXYsIDEgPDwgaSk7CisJCQkJfQorCQkJCWI0M19ucGh5X3N0b3BfcGxheWJhY2soZGV2KTsKKwkJCX0KKworCQkJaWYgKHJldCAhPSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMV9HRU5TUEFSRTIsIDB4RkMpOworCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MyX0dFTlNQQVJFMiwgMHhGQyk7CisJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFsxXSwgdG1wWzVdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzBdLCB0bXBbNF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHRtcFszXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBhZmVjdGxfY29yZSwgdG1wWzJdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGU0VRQ0EsIHRtcFsxXSk7CisKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQorCisJYjQzX25waHlfcmZfY29udHJvbF9vdmVycmlkZShkZXYsIDB4NDAwLCAwLCAzLCB0cnVlKTsKKwliNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShkZXYsIEI0M19SRlNFUV9SRVNFVDJSWCk7CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoNywgMHgxMTApLCAyLCBnYWluX3NhdmUpOworCisJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiNDNfbnBoeV9yZXYzX2NhbF9yeF9pcShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldCwgdTggdHlwZSwgYm9vbCBkZWJ1ZykKK3sKKwlyZXR1cm4gLTE7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQ2FsUnhJcSAqLworc3RhdGljIGludCBiNDNfbnBoeV9jYWxfcnhfaXEoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJc3RydWN0IG5waHlfdHhnYWlucyB0YXJnZXQsIHU4IHR5cGUsIGJvb2wgZGVidWcpCit7CisJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQlyZXR1cm4gYjQzX25waHlfcmV2M19jYWxfcnhfaXEoZGV2LCB0YXJnZXQsIHR5cGUsIGRlYnVnKTsKKwllbHNlCisJCXJldHVybiBiNDNfbnBoeV9yZXYyX2NhbF9yeF9pcShkZXYsIHRhcmdldCwgdHlwZSwgZGVidWcpOworfQorCisvKgorICogSW5pdCBOLVBIWQorICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvSW5pdC9OCisgKi8KK2ludCBiNDNfcGh5X2luaXRuKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBwaHktPm47CisJdTggdHhfcHdyX3N0YXRlOworCXN0cnVjdCBucGh5X3R4Z2FpbnMgdGFyZ2V0OworCXUxNiB0bXA7CisJZW51bSBpZWVlODAyMTFfYmFuZCB0bXAyOworCWJvb2wgZG9fcnNzaV9jYWw7CisKKwl1MTYgY2xpcFsyXTsKKwlib29sIGRvX2NhbCA9IGZhbHNlOworCisJaWYgKChkZXYtPnBoeS5yZXYgPj0gMykgJiYKKwkgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9FWFRMTkEpICYmCisJICAgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikpIHsKKwkJY2hpcGNvX3NldDMyKCZkZXYtPmRldi0+YnVzLT5jaGlwY28sIFNTQl9DSElQQ09fQ0hJUENUTCwgMHg0MCk7CisJfQorCW5waHktPmRlYWZfY291bnQgPSAwOwogCWI0M19ucGh5X3RhYmxlc19pbml0KGRldik7CisJbnBoeS0+Y3JzbWlucHdyX2FkanVzdGVkID0gZmFsc2U7CisJbnBoeS0+bm9pc2V2YXJzX2FkanVzdGVkID0gZmFsc2U7CiAKIAkvKiBDbGVhciBhbGwgb3ZlcnJpZGVzICovCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDApOworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMSwgMCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAwKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzAsIDApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjMyUzEsIDApOworCX0gZWxzZSB7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAwKTsKKwl9CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCAwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMywgMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEM0LCAwKTsKKwlpZiAoZGV2LT5waHkucmV2IDwgNikgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzMsIDApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzQsIDApOworCX0KIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsCiAJCSAgICAgfihCNDNfTlBIWV9SRlNFUU1PREVfQ0FPVkVSIHwKIAkJICAgICAgIEI0M19OUEhZX1JGU0VRTU9ERV9UUk9WRVIpKTsKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEsIDApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgMCk7CiAKLQl0bXAgPSAocGh5LT5yZXYgPCAyKSA/IDY0IDogNTk7Ci0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQlBIWV9DVEwzLAotCQkJfkI0M19OUEhZX0JQSFlfQ1RMM19TQ0FMRSwKLQkJCXRtcCA8PCBCNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEVfU0hJRlQpOwotCisJaWYgKGRldi0+cGh5LnJldiA8PSAyKSB7CisJCXRtcCA9IChkZXYtPnBoeS5yZXYgPT0gMikgPyAweDNCIDogMHg0MDsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQlBIWV9DVEwzLAorCQkJCX5CNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEUsCisJCQkJdG1wIDw8IEI0M19OUEhZX0JQSFlfQ1RMM19TQ0FMRV9TSElGVCk7CisJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVTRVFfVFgyUlhfUFVEXzIwTSwgMHgyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRVNFUV9UWDJSWF9QVURfNDBNLCAweDIwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWFJFQUxGRCwgMTg0KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfTUlNT19DUlNUWEVYVCwgMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUExPQURfQ1NFTlNFX0VYVExFTiwgODApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMl9CQ0xJUEJLT0ZGLCA1MTEpOworCWlmIChidXMtPnNwcm9tLmJvYXJkZmxhZ3MyX2xvICYgMHgxMDAgfHwKKwkgICAgKGJ1cy0+Ym9hcmRpbmZvLnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFICYmCisJICAgICBidXMtPmJvYXJkaW5mby50eXBlID09IDB4OEIpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhSRUFMRkQsIDB4QTApOworCWVsc2UKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYUkVBTEZELCAweEI4KTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfTUlNT19DUlNUWEVYVCwgMHhDOCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BMT0FEX0NTRU5TRV9FWFRMRU4sIDB4NTApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWFJJRlNfRlJERUwsIDB4MzApOwogCi0JLy9UT0RPIE1JTU8tQ29uZmlnCi0JLy9UT0RPIFVwZGF0ZSBUWC9SWCBjaGFpbgorCWI0M19ucGh5X3VwZGF0ZV9taW1vX2NvbmZpZyhkZXYsIG5waHktPnByZWFtYmxlX292ZXJyaWRlKTsKKwliNDNfbnBoeV91cGRhdGVfdHhyeF9jaGFpbihkZXYpOwogCiAJaWYgKHBoeS0+cmV2IDwgMikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfRFVQNDBfR0ZCTCwgMHhBQTgpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfRFVQNDBfQkwsIDB4OUE0KTsKIAl9Ci0JYjQzX25waHlfd29ya2Fyb3VuZHMoZGV2KTsKLQliNDNfbnBoeV9yZXNldF9jY2EoZGV2KTsKIAotCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLAotCQkgICAgc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVykgfCBCNDNfVE1TTE9XX01BQ1BIWUNMS0VOKTsKKwl0bXAyID0gYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKTsKKwlpZiAoKG5waHktPmlwYTJnX29uICYmIHRtcDIgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgfHwKKwkgICAgKG5waHktPmlwYTVnX29uICYmIHRtcDIgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikpIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMCwgMHgxKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfRVBTX1RBQkxFX0FESjAsIDB4MDA3RiwKKwkJCQlucGh5LT5wYXBkX2Vwc2lsb25fb2Zmc2V0WzBdIDw8IDcpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1BBUERfRU4xLCAweDEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9FUFNfVEFCTEVfQURKMSwgMHgwMDdGLAorCQkJCW5waHktPnBhcGRfZXBzaWxvbl9vZmZzZXRbMV0gPDwgNyk7CisJCWI0M19ucGh5X2ludF9wYV9zZXRfdHhfZGlnX2ZpbHRlcnMoZGV2KTsKKwl9IGVsc2UgaWYgKHBoeS0+cmV2ID49IDUpIHsKKwkJYjQzX25waHlfZXh0X3BhX3NldF90eF9kaWdfZmlsdGVycyhkZXYpOworCX0KKworCWI0M19ucGh5X3dvcmthcm91bmRzKGRldik7CisKKwkvKiBSZXNldCBDQ0EsIGluIGluaXQgY29kZSBpdCBkaWZmZXJzIGEgbGl0dGxlIGZyb20gc3RhbmRhcmQgd2F5ICovCisJYjQzX25waHlfYm1hY19jbG9ja19mZ2MoZGV2LCAxKTsKKwl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9CQkNGRyk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0JCQ0ZHLCB0bXAgfCBCNDNfTlBIWV9CQkNGR19SU1RDQ0EpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywgdG1wICYgfkI0M19OUEhZX0JCQ0ZHX1JTVENDQSk7CisJYjQzX25waHlfYm1hY19jbG9ja19mZ2MoZGV2LCAwKTsKKworCS8qIFRPRE8gTiBQSFkgTUFDIFBIWSBDbG9jayBTZXQgd2l0aCBhcmd1bWVudCAxICovCisKKwliNDNfbnBoeV9wYV9vdmVycmlkZShkZXYsIGZhbHNlKTsKIAliNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShkZXYsIEI0M19SRlNFUV9SWDJUWCk7CiAJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUkVTRVQyUlgpOworCWI0M19ucGh5X3BhX292ZXJyaWRlKGRldiwgdHJ1ZSk7CiAKLQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DTEFTU0NUTCk7IC8qIGR1bW15IHJlYWQgKi8KLQkvL1RPRE8gcmVhZCBjb3JlMS8yIGNsaXAxIHRocmVzIHJlZ3MKKwliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgMCwgMCk7CisJYjQzX25waHlfcmVhZF9jbGlwX2RldGVjdGlvbihkZXYsIGNsaXApOworCXR4X3B3cl9zdGF0ZSA9IG5waHktPnR4cHdyY3RybDsKKwkvKiBUT0RPIE4gUEhZIFRYIHBvd2VyIGNvbnRyb2wgd2l0aCBhcmd1bWVudCAwCisJCSh0dXJuaW5nIG9mZiBwb3dlciBjb250cm9sKSAqLworCS8qIFRPRE8gRml4IHRoZSBUWCBQb3dlciBTZXR0aW5ncyAqLworCS8qIFRPRE8gTiBQSFkgVFggUG93ZXIgQ29udHJvbCBJZGxlIFRTU0kgKi8KKwkvKiBUT0RPIE4gUEhZIFRYIFBvd2VyIENvbnRyb2wgU2V0dXAgKi8KIAotCWlmICgxIC8qIEZJWE1FIEJhbmQgaXMgMi40R0h6ICovKQotCQliNDNfbnBoeV9icGh5X2luaXQoZGV2KTsKLQkvL1RPRE8gZGlzYWJsZSBUWCBwb3dlciBjb250cm9sCi0JLy9UT0RPIEZpeCB0aGUgVFggcG93ZXIgc2V0dGluZ3MKLQkvL1RPRE8gSW5pdCBwZXJpb2RpYyBjYWxpYnJhdGlvbiB3aXRoIHJlYXNvbiAzCi0JYjQzX25waHlfcnNzaV9jYWwoZGV2LCAyKTsKLQliNDNfbnBoeV9yc3NpX2NhbChkZXYsIDApOwotCWI0M19ucGh5X3Jzc2lfY2FsKGRldiwgMSk7Ci0JLy9UT0RPIGdldCBUWCBnYWluCi0JLy9UT0RPIGluaXQgc3VwZXJzd2l0Y2gKLQkvL1RPRE8gY2FsaWJyYXRlIExPCi0JLy9UT0RPIGlkbGUgVFNTSSBUWCBwY3RsCi0JLy9UT0RPIFRYIHBvd2VyIGNvbnRyb2wgcG93ZXIgc2V0dXAKLQkvL1RPRE8gdGFibGUgd3JpdGVzCi0JLy9UT0RPIFRYIHBvd2VyIGNvbnRyb2wgY29lZmZpY2llbnRzCi0JLy9UT0RPIGVuYWJsZSBUWCBwb3dlciBjb250cm9sCi0JLy9UT0RPIGNvbnRyb2wgYW50ZW5uYSBzZWxlY3Rpb24KLQkvL1RPRE8gaW5pdCByYWRhciBkZXRlY3Rpb24KLQkvL1RPRE8gcmVzZXQgY2hhbm5lbCBpZiBjaGFuZ2VkCisJaWYgKHBoeS0+cmV2ID49IDMpIHsKKwkJLyogVE9ETyAqLworCX0gZWxzZSB7CisJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjMyKDI2LCAxOTIpLCAxMjgsCisJCQkJCWI0M19udGFiX3R4X2dhaW5fcmV2MF8xXzIpOworCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIzMigyNywgMTkyKSwgMTI4LAorCQkJCQliNDNfbnRhYl90eF9nYWluX3JldjBfMV8yKTsKKwl9CisKKwlpZiAobnBoeS0+cGh5cnhjaGFpbiAhPSAzKQorCQk7LyogVE9ETyBOIFBIWSBSWCBDb3JlIFNldCBTdGF0ZSB3aXRoIHBoeXJ4Y2hhaW4gYXMgYXJndW1lbnQgKi8KKwlpZiAobnBoeS0+bXBoYXNlX2NhbF9waGFzZV9pZCA+IDApCisJCTsvKiBUT0RPIFBIWSBQZXJpb2RpYyBDYWxpYnJhdGlvbiBNdWx0aS1QaGFzZSBSZXN0YXJ0ICovCisKKwlkb19yc3NpX2NhbCA9IGZhbHNlOworCWlmIChwaHktPnJldiA+PSAzKSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlkb19yc3NpX2NhbCA9IChucGh5LT5yc3NpY2FsX2NoYW5zcGVjXzJHID09IDApOworCQllbHNlCisJCQlkb19yc3NpX2NhbCA9IChucGh5LT5yc3NpY2FsX2NoYW5zcGVjXzVHID09IDApOworCisJCWlmIChkb19yc3NpX2NhbCkKKwkJCWI0M19ucGh5X3Jzc2lfY2FsKGRldik7CisJCWVsc2UKKwkJCWI0M19ucGh5X3Jlc3RvcmVfcnNzaV9jYWwoZGV2KTsKKwl9IGVsc2UgeworCQliNDNfbnBoeV9yc3NpX2NhbChkZXYpOworCX0KKworCWlmICghKChucGh5LT5tZWFzdXJlX2hvbGQgJiAweDYpICE9IDApKSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlkb19jYWwgPSAobnBoeS0+aXFjYWxfY2hhbnNwZWNfMkcgPT0gMCk7CisJCWVsc2UKKwkJCWRvX2NhbCA9IChucGh5LT5pcWNhbF9jaGFuc3BlY181RyA9PSAwKTsKKworCQlpZiAobnBoeS0+bXV0ZSkKKwkJCWRvX2NhbCA9IGZhbHNlOworCisJCWlmIChkb19jYWwpIHsKKwkJCXRhcmdldCA9IGI0M19ucGh5X2dldF90eF9nYWlucyhkZXYpOworCisJCQlpZiAobnBoeS0+YW50c2VsX3R5cGUgPT0gMikKKwkJCQk7LypUT0RPIE5QSFkgU3VwZXJzd2l0Y2ggSW5pdCB3aXRoIGFyZ3VtZW50IDEqLworCQkJaWYgKG5waHktPnBlcmljYWwgIT0gMikgeworCQkJCWI0M19ucGh5X3Jzc2lfY2FsKGRldik7CisJCQkJaWYgKHBoeS0+cmV2ID49IDMpIHsKKwkJCQkJbnBoeS0+Y2FsX29yaWdfcHdyX2lkeFswXSA9CisJCQkJCSAgICBucGh5LT50eHB3cmluZGV4WzBdLmluZGV4X2ludGVybmFsOworCQkJCQlucGh5LT5jYWxfb3JpZ19wd3JfaWR4WzFdID0KKwkJCQkJICAgIG5waHktPnR4cHdyaW5kZXhbMV0uaW5kZXhfaW50ZXJuYWw7CisJCQkJCS8qIFRPRE8gTiBQSFkgUHJlIENhbGlicmF0ZSBUWCBHYWluICovCisJCQkJCXRhcmdldCA9IGI0M19ucGh5X2dldF90eF9nYWlucyhkZXYpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICghYjQzX25waHlfY2FsX3R4X2lxX2xvKGRldiwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkpIHsKKwkJaWYgKGI0M19ucGh5X2NhbF9yeF9pcShkZXYsIHRhcmdldCwgMiwgMCkgPT0gMCkKKwkJCWI0M19ucGh5X3NhdmVfY2FsKGRldik7CisJCWVsc2UgaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPT0gMCkKKwkJCTsvKiBOIFBIWSBQZXJpb2RpYyBDYWxpYnJhdGlvbiB3aXRoIGFyZ3VtZW50IDMgKi8KKwl9IGVsc2UgeworCQliNDNfbnBoeV9yZXN0b3JlX2NhbChkZXYpOworCX0KKworCWI0M19ucGh5X3R4X3B3cl9jdHJsX2NvZWZfc2V0dXAoZGV2KTsKKwkvKiBUT0RPIE4gUEhZIFRYIFBvd2VyIENvbnRyb2wgRW5hYmxlIHdpdGggYXJndW1lbnQgdHhfcHdyX3N0YXRlICovCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYTUFDSUZfSE9MRE9GRiwgMHgwMDE1KTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhNQUNERUxBWSwgMHgwMzIwKTsKKwlpZiAocGh5LT5yZXYgPj0gMyAmJiBwaHktPnJldiA8PSA2KQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUExPQURfQ1NFTlNFX0VYVExFTiwgMHgwMDE0KTsKKwliNDNfbnBoeV90eF9scF9mYncoZGV2KTsKKwlpZiAocGh5LT5yZXYgPj0gMykKKwkJYjQzX25waHlfc3B1cl93b3JrYXJvdW5kKGRldik7CiAKIAliNDNlcnIoZGV2LT53bCwgIklFRUUgODAyLjExbiBkZXZpY2VzIGFyZSBub3Qgc3VwcG9ydGVkLCB5ZXQuXG4iKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKaW5kZXggMTc0OWFlZi4uNDAzYWFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKQEAgLTIzMSw2ICsyMzEsNyBAQAogI2RlZmluZSBCNDNfTlBIWV9DMl9UWElRX0NPTVBfT0ZGCQlCNDNfUEhZX04oMHgwODgpIC8qIENvcmUgMiBUWCBJL1EgY29tcCBvZmZzZXQgKi8KICNkZWZpbmUgQjQzX05QSFlfQzFfVFhDVEwJCQlCNDNfUEhZX04oMHgwOEIpIC8qIENvcmUgMSBUWCBjb250cm9sICovCiAjZGVmaW5lIEI0M19OUEhZX0MyX1RYQ1RMCQkJQjQzX1BIWV9OKDB4MDhDKSAvKiBDb3JlIDIgVFggY29udHJvbCAqLworI2RlZmluZSBCNDNfTlBIWV9BRkVDVExfT1ZFUjEJCQlCNDNfUEhZX04oMHgwOEYpIC8qIEFGRSBjb250cm9sIG92ZXJyaWRlIDEgKi8KICNkZWZpbmUgQjQzX05QSFlfU0NSQU1fU0lHQ1RMCQkJQjQzX1BIWV9OKDB4MDkwKSAvKiBTY3JhbSBzaWduYWwgY29udHJvbCAqLwogI2RlZmluZSAgQjQzX05QSFlfU0NSQU1fU0lHQ1RMX0lOSVRTVAkJMHgwMDdGIC8qIEluaXRpYWwgc3RhdGUgdmFsdWUgKi8KICNkZWZpbmUgIEI0M19OUEhZX1NDUkFNX1NJR0NUTF9JTklUU1RfU0hJRlQJMApAQCAtNzA1LDYgKzcwNiwxMCBAQAogI2RlZmluZSBCNDNfTlBIWV9UWFBDVExfSU5JVAkJCUI0M19QSFlfTigweDIyMikgLyogVFggcG93ZXIgY29udHJvbGwgaW5pdCAqLwogI2RlZmluZSAgQjQzX05QSFlfVFhQQ1RMX0lOSVRfUElEWEkxCQkweDAwRkYgLyogUG93ZXIgaW5kZXggaW5pdCAxICovCiAjZGVmaW5lICBCNDNfTlBIWV9UWFBDVExfSU5JVF9QSURYSTFfU0hJRlQJMAorI2RlZmluZSBCNDNfTlBIWV9QQVBEX0VOMAkJCUI0M19QSFlfTigweDI5NykgLyogUEFQRCBFbmFibGUwIFRCRCAqLworI2RlZmluZSBCNDNfTlBIWV9FUFNfVEFCTEVfQURKMAkJCUI0M19QSFlfTigweDI5OCkgLyogRVBTIFRhYmxlIEFkajAgVEJEICovCisjZGVmaW5lIEI0M19OUEhZX1BBUERfRU4xCQkJQjQzX1BIWV9OKDB4MjlCKSAvKiBQQVBEIEVuYWJsZTEgVEJEICovCisjZGVmaW5lIEI0M19OUEhZX0VQU19UQUJMRV9BREoxCQkJQjQzX1BIWV9OKDB4MjlDKSAvKiBFUFMgVGFibGUgQWRqMSBUQkQgKi8KIAogCiAKQEAgLTkxOSw4ICs5MjQsOTkgQEAKIAogc3RydWN0IGI0M193bGRldjsKIAorc3RydWN0IGI0M19waHlfbl9pcV9jb21wIHsKKwlzMTYgYTA7CisJczE2IGIwOworCXMxNiBhMTsKKwlzMTYgYjE7Cit9OworCitzdHJ1Y3QgYjQzX3BoeV9uX3Jzc2ljYWxfY2FjaGUgeworCXUxNiByc3NpY2FsX3JhZGlvX3JlZ3NfMkdbMl07CisJdTE2IHJzc2ljYWxfcGh5X3JlZ3NfMkdbMTJdOworCisJdTE2IHJzc2ljYWxfcmFkaW9fcmVnc181R1syXTsKKwl1MTYgcnNzaWNhbF9waHlfcmVnc181R1sxMl07Cit9OworCitzdHJ1Y3QgYjQzX3BoeV9uX2NhbF9jYWNoZSB7CisJdTE2IHR4Y2FsX3JhZGlvX3JlZ3NfMkdbOF07CisJdTE2IHR4Y2FsX2NvZWZmc18yR1s4XTsKKwlzdHJ1Y3QgYjQzX3BoeV9uX2lxX2NvbXAgcnhjYWxfY29lZmZzXzJHOworCisJdTE2IHR4Y2FsX3JhZGlvX3JlZ3NfNUdbOF07CisJdTE2IHR4Y2FsX2NvZWZmc181R1s4XTsKKwlzdHJ1Y3QgYjQzX3BoeV9uX2lxX2NvbXAgcnhjYWxfY29lZmZzXzVHOworfTsKKworc3RydWN0IGI0M19waHlfbl90eHB3cmluZGV4IHsKKwlzOCBpbmRleDsKKwlzOCBpbmRleF9pbnRlcm5hbDsKKwlzOCBpbmRleF9pbnRlcm5hbF9zYXZlOworCXUxNiBBZmVjdHJsT3ZlcnJpZGU7CisJdTE2IEFmZUN0cmxEYWNHYWluOworCXUxNiByYWRfZ2FpbjsKKwl1OCBiYm11bHQ7CisJdTE2IGlxY29tcF9hOworCXUxNiBpcWNvbXBfYjsKKwl1MTYgbG9jb21wOworfTsKKwogc3RydWN0IGI0M19waHlfbiB7Ci0JLy9UT0RPIGxvdHMgb2YgbWlzc2luZyBzdHVmZgorCXU4IGFudHNlbF90eXBlOworCXU4IGNhbF9vcmlnX3B3cl9pZHhbMl07CisJdTggbWVhc3VyZV9ob2xkOworCXU4IHBoeXJ4Y2hhaW47CisJdTggcGVyaWNhbDsKKwl1MzIgZGVhZl9jb3VudDsKKwl1MzIgcnhjYWxwYXJhbXM7CisJYm9vbCBoYW5nX2F2b2lkOworCWJvb2wgbXV0ZTsKKwl1MTYgcGFwZF9lcHNpbG9uX29mZnNldFsyXTsKKwlzMzIgcHJlYW1ibGVfb3ZlcnJpZGU7CisJdTMyIGJiX211bHRfc2F2ZTsKKwl1MTYgcmFkaW9fY2hhbnNwZWM7CisKKwlib29sIGdhaW5fYm9vc3Q7CisJYm9vbCBlbG5hX2dhaW5fY29uZmlnOworCWJvb2wgYmFuZDVnX3B3cmdhaW47CisKKwl1OCBtcGhhc2VfY2FsX3BoYXNlX2lkOworCXUxNiBtcGhhc2VfdHhjYWxfY21kaWR4OworCXUxNiBtcGhhc2VfdHhjYWxfbnVtY21kczsKKwl1MTYgbXBoYXNlX3R4Y2FsX2Jlc3Rjb2VmZnNbMTFdOworCisJdTggdHhwd3JjdHJsOworCXUxNiB0eGNhbF9iYm11bHQ7CisJdTE2IHR4aXFsb2NhbF9iZXN0Y1sxMV07CisJYm9vbCB0eGlxbG9jYWxfY29lZmZzdmFsaWQ7CisJc3RydWN0IGI0M19waHlfbl90eHB3cmluZGV4IHR4cHdyaW5kZXhbMl07CisKKwl1OCB0eHJ4X2NoYWluOworCXUxNiB0eF9yeF9jYWxfcGh5X3NhdmVyZWdzWzExXTsKKwl1MTYgdHhfcnhfY2FsX3JhZGlvX3NhdmVyZWdzWzIyXTsKKworCXUxNiByZmN0cmxfaW50YzFfc2F2ZTsKKwl1MTYgcmZjdHJsX2ludGMyX3NhdmU7CisKKwl1MTYgY2xhc3NpZmllcl9zdGF0ZTsKKwl1MTYgY2xpcF9zdGF0ZVsyXTsKKworCWJvb2wgYWJhbmRfc3B1cndhcl9lbjsKKwlib29sIGdiYW5kX3NwdXJ3YXJfZW47CisKKwlib29sIGlwYTJnX29uOworCXU4IGlxY2FsX2NoYW5zcGVjXzJHOworCXU4IHJzc2ljYWxfY2hhbnNwZWNfMkc7CisKKwlib29sIGlwYTVnX29uOworCXU4IGlxY2FsX2NoYW5zcGVjXzVHOworCXU4IHJzc2ljYWxfY2hhbnNwZWNfNUc7CisKKwlzdHJ1Y3QgYjQzX3BoeV9uX3Jzc2ljYWxfY2FjaGUgcnNzaWNhbF9jYWNoZTsKKwlzdHJ1Y3QgYjQzX3BoeV9uX2NhbF9jYWNoZSBjYWxfY2FjaGU7CisJYm9vbCBjcnNtaW5wd3JfYWRqdXN0ZWQ7CisJYm9vbCBub2lzZXZhcnNfYWRqdXN0ZWQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwppbmRleCBjMDFiOGUwLi5hNjA2MmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCkBAIC01NTksNyArNTU5LDYgQEAKIAkJYjQzZXJyKGRldi0+d2wsICJQSU8gdHJhbnNtaXNzaW9uIGZhaWx1cmVcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JcS0+bnJfdHhfcGFja2V0cysrOwogCiAJQjQzX1dBUk5fT04ocS0+YnVmZmVyX3VzZWQgPiBxLT5idWZmZXJfc2l6ZSk7CiAJaWYgKCgocS0+YnVmZmVyX3NpemUgLSBxLT5idWZmZXJfdXNlZCkgPCByb3VuZHVwKDIgKyAyICsgNiwgNCkpIHx8CkBAIC02MDUsMjIgKzYwNCw2IEBACiAJfQogfQogCi12b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0JY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7Ci0Jc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9xdWV1ZXM7IGkrKykgewotCQlxID0gc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KGRldiwgaSk7Ci0KLQkJc3RhdHNbaV0ubGVuID0gQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTIC0gcS0+ZnJlZV9wYWNrZXRfc2xvdHM7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTOwotCQlzdGF0c1tpXS5jb3VudCA9IHEtPm5yX3R4X3BhY2tldHM7Ci0JfQotfQotCiAvKiBSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIGZldGNoIGFub3RoZXIgZnJhbWUuICovCiBzdGF0aWMgYm9vbCBwaW9fcnhfZnJhbWUoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAppbmRleCA3ZGQ2NDljOS4uMWU1MTYxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmgKQEAgLTU1LDggKzU1LDYgQEAKICNkZWZpbmUgQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTCTMyCiAKIAotI2lmZGVmIENPTkZJR19CNDNfUElPCi0KIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0IHsKIAkvKiBQb2ludGVyIHRvIHRoZSBUWCBxdWV1ZSB3ZSBiZWxvbmcgdG8uICovCiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcXVldWU7CkBAIC05Miw5ICs5MCw2IEBACiAJc3RydWN0IGI0M19waW9fdHhwYWNrZXQgcGFja2V0c1tCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFNdOwogCXN0cnVjdCBsaXN0X2hlYWQgcGFja2V0c19saXN0OwogCi0JLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIHBhY2tldHMuICovCi0JdW5zaWduZWQgaW50IG5yX3R4X3BhY2tldHM7Ci0KIAkvKiBTaG9ydGN1dCB0byB0aGUgODAyLjExIGNvcmUgcmV2aXNpb24uIFRoaXMgaXMgdG8KIAkgKiBhdm9pZCBob3JyaWJsZSBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaW4gdGhlIGZhc3RwYXRocy4gKi8KIAl1OCByZXY7CkBAIC0xNjIsNDkgKzE1Nyw5IEBACiBpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cyk7Ci12b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBiNDNfcGlvX3J4KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpOwogCiB2b2lkIGI0M19waW9fdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfcGlvX3R4X3Jlc3VtZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCi0KLSNlbHNlIC8qIENPTkZJR19CNDNfUElPICovCi0KLQotc3RhdGljIGlubGluZSBpbnQgYjQzX3Bpb19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2ZyZWUoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fc3RvcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBiNDNfcGlvX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2dldF90eF9zdGF0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fcngoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCiAjZW5kaWYgLyogQjQzX1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwppbmRleCA0ZTIzMzYzLi5hMDBkNTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwpAQCAtMTMzNiw3ICsxMzM2LDcgQEAKIH0KIAogCi1jb25zdCB1OCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjBbXSA9IHsKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAogCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCiAJMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwKQEAgLTEzNTUsNyArMTM1NSw3IEBACiAJMHgxRSwgMHgxRSwgMHgxRSwgMHgxRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKIH07CiAKLWNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdID0gewogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCiAJMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMywgMHgwMywKIAkweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA1LCAweDA1LApAQCAtMTM3NCwxMSArMTM3NCwxMSBAQAogCTB4MUUsIDB4MUUsIDB4MUUsIDB4MUUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCiB9OwogCi1jb25zdCB1MTYgYjQzX250YWJfYmRpW10gPSB7CitzdGF0aWMgY29uc3QgdTE2IGI0M19udGFiX2JkaVtdID0gewogCTB4MDA3MCwgMHgwMTI2LCAweDAxMkMsIDB4MDI0NiwgMHgwNDhELCAweDA0RDIsCiB9OwogCi1jb25zdCB1MzIgYjQzX250YWJfY2hhbm5lbGVzdFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9jaGFubmVsZXN0W10gPSB7CiAJMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwKIAkweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LAogCTB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsCkBAIC0xNDA1LDcgKzE0MDUsNyBAQAogCTB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsCiB9OwogCi1jb25zdCB1OCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQwW10gPSB7CitzdGF0aWMgY29uc3QgdTggYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MFtdID0gewogCTB4NTAsIDB4NEYsIDB4NEUsIDB4NEQsIDB4NEMsIDB4NEIsIDB4NEEsIDB4NDksCiAJMHg0OCwgMHg0NywgMHg0NiwgMHg0NSwgMHg0NCwgMHg0MywgMHg0MiwgMHg0MSwKIAkweDQwLCAweDNGLCAweDNFLCAweDNELCAweDNDLCAweDNCLCAweDNBLCAweDM5LApAQCAtMTQxNiw3ICsxNDE2LDcgQEAKIAkweDE4LCAweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLAogfTsKIAotY29uc3QgdTggYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MVtdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDFbXSA9IHsKIAkweDUwLCAweDRGLCAweDRFLCAweDRELCAweDRDLCAweDRCLCAweDRBLCAweDQ5LAogCTB4NDgsIDB4NDcsIDB4NDYsIDB4NDUsIDB4NDQsIDB4NDMsIDB4NDIsIDB4NDEsCiAJMHg0MCwgMHgzRiwgMHgzRSwgMHgzRCwgMHgzQywgMHgzQiwgMHgzQSwgMHgzOSwKQEAgLTE0MjcsMTQgKzE0MjcsMTQgQEAKIAkweDE4LCAweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLAogfTsKIAotY29uc3QgdTggYjQzX250YWJfZnJhbWVsb29rdXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBiNDNfbnRhYl9mcmFtZWxvb2t1cFtdID0gewogCTB4MDIsIDB4MDQsIDB4MTQsIDB4MTQsIDB4MDMsIDB4MDUsIDB4MTYsIDB4MTYsCiAJMHgwQSwgMHgwQywgMHgxQywgMHgxQywgMHgwQiwgMHgwRCwgMHgxRSwgMHgxRSwKIAkweDA2LCAweDA4LCAweDE4LCAweDE4LCAweDA3LCAweDA5LCAweDFBLCAweDFBLAogCTB4MEUsIDB4MTAsIDB4MjAsIDB4MjgsIDB4MEYsIDB4MTEsIDB4MjIsIDB4MkEsCiB9OwogCi1jb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXSA9IHsKIAkweDA4MDA0QTA0LCAweDAwMTAwMDAwLCAweDAxMDAwQTA1LCAweDAwMTAwMDIwLAogCTB4MDk4MDQ1MDYsIDB4MDAxMDAwMzAsIDB4MDk4MDQ1MDcsIDB4MDAxMDAwMzAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9nYWluY3RsMFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9nYWluY3RsMFtdID0gewogCTB4MDA3RjAwM0YsIDB4MDA3RTAxM0YsIDB4MDA3RDAyM0UsIDB4MDA3QzAzM0UsCiAJMHgwMDdCMDQzRCwgMHgwMDdBMDUzRCwgMHgwMDc5MDYzQywgMHgwMDc4MDczQywKIAkweDAwNzcwODNCLCAweDAwNzYwOTNCLCAweDAwNzUwQTNBLCAweDAwNzQwQjNBLApAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkweDAwMDMwQzAxLCAweDAwMDIwRDAxLCAweDAwMDEwRTAwLCAweDAwMDAwRjAwLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX2dhaW5jdGwxW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX2dhaW5jdGwxW10gPSB7CiAJMHgwMDdGMDAzRiwgMHgwMDdFMDEzRiwgMHgwMDdEMDIzRSwgMHgwMDdDMDMzRSwKIAkweDAwN0IwNDNELCAweDAwN0EwNTNELCAweDAwNzkwNjNDLCAweDAwNzgwNzNDLAogCTB4MDA3NzA4M0IsIDB4MDA3NjA5M0IsIDB4MDA3NTBBM0EsIDB4MDA3NDBCM0EsCkBAIC0xNzE1LDEyICsxNzE1LDEyIEBACiAJMHgwMDAzMEMwMSwgMHgwMDAyMEQwMSwgMHgwMDAxMEUwMCwgMHgwMDAwMEYwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9pbnRsZXZlbFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9pbnRsZXZlbFtdID0gewogCTB4MDA4MDIwNzAsIDB4MDY3MTE4OEQsIDB4MEE2MDE5MkMsIDB4MEEzMDBFNDYsCiAJMHgwMEMxMTg4RCwgMHgwODAwMjREMiwgMHgwMDAwMDA3MCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9pcWx0MFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9pcWx0MFtdID0gewogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCiAJMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLApAQCAtMTc1NSw3ICsxNzU1LDcgQEAKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX2lxbHQxW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX2lxbHQxW10gPSB7CiAJMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLAogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCkBAIC0xNzkwLDcgKzE3OTAsNyBAQAogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCiB9OwogCi1jb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MFtdID0geworc3RhdGljIGNvbnN0IHUxNiBiNDNfbnRhYl9sb2Z0bHQwW10gPSB7CiAJMHgwMDAwLCAweDAxMDEsIDB4MDAwMiwgMHgwMTAzLCAweDAwMDAsIDB4MDEwMSwKIAkweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsIDB4MDAwMiwgMHgwMTAzLAogCTB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogCTB4MDAwMiwgMHgwMTAzLAogfTsKIAotY29uc3QgdTE2IGI0M19udGFiX2xvZnRsdDFbXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MVtdID0gewogCTB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsCiAJMHgwMDAyLCAweDAxMDMsIDB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywKIAkweDAwMDAsIDB4MDEwMSwgMHgwMDAyLCAweDAxMDMsIDB4MDAwMCwgMHgwMTAxLApAQCAtMTg0MCw3ICsxODQwLDcgQEAKIAkweDAwMDIsIDB4MDEwMywKIH07CiAKLWNvbnN0IHU4IGI0M19udGFiX21jc1tdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX21jc1tdID0gewogCTB4MDAsIDB4MDgsIDB4MEEsIDB4MTAsIDB4MTIsIDB4MTksIDB4MUEsIDB4MUMsCiAJMHg0MCwgMHg0OCwgMHg0QSwgMHg1MCwgMHg1MiwgMHg1OSwgMHg1QSwgMHg1QywKIAkweDgwLCAweDg4LCAweDhBLCAweDkwLCAweDkyLCAweDk5LCAweDlBLCAweDlDLApAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTBbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMFtdID0gewogCTB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsIDB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsCiAJMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwgMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELApAQCAtMTkyNiw3ICsxOTI2LDcgQEAKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTFbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMVtdID0gewogCTB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsIDB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsCiAJMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwgMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELApAQCAtMTk5Myw3ICsxOTkzLDcgQEAKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELAogfTsKIAotY29uc3QgdTE2IGI0M19udGFiX3BpbG90W10gPSB7CitzdGF0aWMgY29uc3QgdTE2IGI0M19udGFiX3BpbG90W10gPSB7CiAJMHhGRjA4LCAweEZGMDgsIDB4RkYwOCwgMHhGRjA4LCAweEZGMDgsIDB4RkYwOCwKIAkweEZGMDgsIDB4RkYwOCwgMHg4MEQ1LCAweDgwRDUsIDB4ODBENSwgMHg4MEQ1LAogCTB4ODBENSwgMHg4MEQ1LCAweDgwRDUsIDB4ODBENSwgMHhGRjBBLCAweEZGODIsCkBAIC0yMDExLDEyICsyMDExLDEyIEBACiAJMHhGMEEwLCAweEYwMjgsIDB4RkZGRiwgMHhGRkZGLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX3BpbG90bHRbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfcGlsb3RsdFtdID0gewogCTB4NzY1NDAxMjMsIDB4NjI0MDczNTEsIDB4NzY1NDMyMDEsIDB4NzY1NDAyMTMsCiAJMHg3NjU0MDEyMywgMHg3NjQzMDUyMSwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGkyMGEwW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTBbXSA9IHsKIAkweDAwMDkxMjI2LCAweDAwMEExNDI5LCAweDAwMEI1NkFELCAweDAwMEM1OEIwLAogCTB4MDAwRDVBQjMsIDB4MDAwRTlDQjYsIDB4MDAwRjlFQkEsIDB4MDAwMEMxM0QsCiAJMHgwMDAyMDMwMSwgMHgwMDAzMDUwNCwgMHgwMDA0MDcwOCwgMHgwMDA1MDkwQiwKQEAgLTIwMzMsNyArMjAzMyw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGkyMGExW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTFbXSA9IHsKIAkweDAwMDE0QjI2LCAweDAwMDI4RDI5LCAweDAwMDM5M0FELCAweDAwMDQ5NjMwLAogCTB4MDAwNUQ4MzMsIDB4MDAwNkRBMzYsIDB4MDAwOTlDM0EsIDB4MDAwQTlFM0QsCiAJMHgwMDBCQzA4MSwgMHgwMDBDQzI4NCwgMHgwMDBEQzQ4OCwgMHgwMDBGMDY4QiwKQEAgLTIwNTAsNyArMjA1MCw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGEwW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTBbXSA9IHsKIAkweDAwMTFBMzQ2LCAweDAwMTM2Q0NGLCAweDAwMTRGNUQ5LCAweDAwMTY0MUUyLAogCTB4MDAxN0NCNkIsIDB4MDAxOTU0NzUsIDB4MDAxQjIzODMsIDB4MDAxQ0FEMEMsCiAJMHgwMDFFNzYxNiwgMHgwMDAwODIxRiwgMHgwMDAyMEJBOCwgMHgwMDAzRDRCMiwKQEAgLTIwODEsNyArMjA4MSw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGExW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTFbXSA9IHsKIAkweDAwMUVEQjM2LCAweDAwMDEyOUNBLCAweDAwMDJCMzUzLCAweDAwMDQ3Q0RELAogCTB4MDAwNUM4RTYsIDB4MDAwNzkxRUYsIDB4MDAwOTFCRjksIDB4MDAwQUFBMDcsCiAJMHgwMDBDMzM5MSwgMHgwMDBERkQxQSwgMHgwMDEyMDkyMywgMHgwMDEzRDIyRCwKQEAgLTIxMTIsNyArMjExMiw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZHRybltdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl90ZHRybltdID0gewogCTB4MDYxQzA2MUMsIDB4MDA1MEVFNjgsIDB4RjU5MkZFMzYsIDB4RkU1MjEyRjYsCiAJMHgwMDAwMEMzOCwgMHhGRTUyMTJGNiwgMHhGNTkyRkUzNiwgMHgwMDUwRUU2OCwKIAkweDA2MUMwNjFDLCAweEVFNjgwMDUwLCAweEZFMzZGNTkyLCAweDEyRjZGRTUyLApAQCAtMjI5MSw3ICsyMjkxLDcgQEAKIAkweEZBNThGQzAwLCAweDBCNjRGQzdFLCAweDA4MDBGN0I2LCAweDAwRjAwNkJFLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX3RtYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfdG1hcFtdID0gewogCTB4OEE4OEFBODAsIDB4OEFBQUFBOEEsIDB4OEE4QThBQTgsIDB4MDAwMDA4ODgsCiAJMHg4ODAwMDAwMCwgMHg4QThBODhBQSwgMHg4QUE4ODg4OCwgMHg4ODg4QThBOCwKIAkweEYxMTExMTEwLCAweDExMTExMTExLCAweDExRjExMTExLCAweDAwMDAwMTExLApAQCAtMjQwNiw2ICsyNDA2LDU0NCBAQAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiB9OwogCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYwXzFfMltdID0geworCTB4MDNjYzJiNDQsIDB4MDNjYzJiNDIsIDB4MDNjYzJhNDQsIDB4MDNjYzJhNDIsCisJMHgwM2NjMjk0NCwgMHgwM2M4MmI0NCwgMHgwM2M4MmI0MiwgMHgwM2M4MmE0NCwKKwkweDAzYzgyYTQyLCAweDAzYzgyOTQ0LCAweDAzYzgyOTQyLCAweDAzYzgyODQ0LAorCTB4MDNjODI4NDIsIDB4MDNjNDJiNDQsIDB4MDNjNDJiNDIsIDB4MDNjNDJhNDQsCisJMHgwM2M0MmE0MiwgMHgwM2M0Mjk0NCwgMHgwM2M0Mjk0MiwgMHgwM2M0Mjg0NCwKKwkweDAzYzQyODQyLCAweDAzYzQyNzQ0LCAweDAzYzQyNzQyLCAweDAzYzQyNjQ0LAorCTB4MDNjNDI2NDIsIDB4MDNjNDI1NDQsIDB4MDNjNDI1NDIsIDB4MDNjNDI0NDQsCisJMHgwM2M0MjQ0MiwgMHgwM2MwMmI0NCwgMHgwM2MwMmI0MiwgMHgwM2MwMmE0NCwKKwkweDAzYzAyYTQyLCAweDAzYzAyOTQ0LCAweDAzYzAyOTQyLCAweDAzYzAyODQ0LAorCTB4MDNjMDI4NDIsIDB4MDNjMDI3NDQsIDB4MDNjMDI3NDIsIDB4MDNiMDJiNDQsCisJMHgwM2IwMmI0MiwgMHgwM2IwMmE0NCwgMHgwM2IwMmE0MiwgMHgwM2IwMjk0NCwKKwkweDAzYjAyOTQyLCAweDAzYjAyODQ0LCAweDAzYjAyODQyLCAweDAzYjAyNzQ0LAorCTB4MDNiMDI3NDIsIDB4MDNiMDI2NDQsIDB4MDNiMDI2NDIsIDB4MDNiMDI1NDQsCisJMHgwM2IwMjU0MiwgMHgwM2EwMmI0NCwgMHgwM2EwMmI0MiwgMHgwM2EwMmE0NCwKKwkweDAzYTAyYTQyLCAweDAzYTAyOTQ0LCAweDAzYTAyOTQyLCAweDAzYTAyODQ0LAorCTB4MDNhMDI4NDIsIDB4MDNhMDI3NDQsIDB4MDNhMDI3NDIsIDB4MDM5MDJiNDQsCisJMHgwMzkwMmI0MiwgMHgwMzkwMmE0NCwgMHgwMzkwMmE0MiwgMHgwMzkwMjk0NCwKKwkweDAzOTAyOTQyLCAweDAzOTAyODQ0LCAweDAzOTAyODQyLCAweDAzOTAyNzQ0LAorCTB4MDM5MDI3NDIsIDB4MDM5MDI2NDQsIDB4MDM5MDI2NDIsIDB4MDM5MDI1NDQsCisJMHgwMzkwMjU0MiwgMHgwMzgwMmI0NCwgMHgwMzgwMmI0MiwgMHgwMzgwMmE0NCwKKwkweDAzODAyYTQyLCAweDAzODAyOTQ0LCAweDAzODAyOTQyLCAweDAzODAyODQ0LAorCTB4MDM4MDI4NDIsIDB4MDM4MDI3NDQsIDB4MDM4MDI3NDIsIDB4MDM4MDI2NDQsCisJMHgwMzgwMjY0MiwgMHgwMzgwMjU0NCwgMHgwMzgwMjU0MiwgMHgwMzgwMjQ0NCwKKwkweDAzODAyNDQyLCAweDAzODAyMzQ0LCAweDAzODAyMzQyLCAweDAzODAyMjQ0LAorCTB4MDM4MDIyNDIsIDB4MDM4MDIxNDQsIDB4MDM4MDIxNDIsIDB4MDM4MDIwNDQsCisJMHgwMzgwMjA0MiwgMHgwMzgwMWY0NCwgMHgwMzgwMWY0MiwgMHgwMzgwMWU0NCwKKwkweDAzODAxZTQyLCAweDAzODAxZDQ0LCAweDAzODAxZDQyLCAweDAzODAxYzQ0LAorCTB4MDM4MDFjNDIsIDB4MDM4MDFiNDQsIDB4MDM4MDFiNDIsIDB4MDM4MDFhNDQsCisJMHgwMzgwMWE0MiwgMHgwMzgwMTk0NCwgMHgwMzgwMTk0MiwgMHgwMzgwMTg0NCwKKwkweDAzODAxODQyLCAweDAzODAxNzQ0LCAweDAzODAxNzQyLCAweDAzODAxNjQ0LAorCTB4MDM4MDE2NDIsIDB4MDM4MDE1NDQsIDB4MDM4MDE1NDIsIDB4MDM4MDE0NDQsCisJMHgwMzgwMTQ0MiwgMHgwMzgwMTM0NCwgMHgwMzgwMTM0MiwgMHgwMDAwMmIwMCwKK307CisKK2NvbnN0IHUzMiBiNDNfbnRhYl90eF9nYWluX3JldjNwbHVzXzJnaHpbXSA9IHsKKwkweDFmNDEwMDQ0LCAweDFmNDEwMDQyLCAweDFmNDEwMDQwLCAweDFmNDEwMDNlLAorCTB4MWY0MTAwM2MsIDB4MWY0MTAwM2IsIDB4MWY0MTAwMzksIDB4MWY0MTAwMzcsCisJMHgxZTQxMDA0NCwgMHgxZTQxMDA0MiwgMHgxZTQxMDA0MCwgMHgxZTQxMDAzZSwKKwkweDFlNDEwMDNjLCAweDFlNDEwMDNiLCAweDFlNDEwMDM5LCAweDFlNDEwMDM3LAorCTB4MWQ0MTAwNDQsIDB4MWQ0MTAwNDIsIDB4MWQ0MTAwNDAsIDB4MWQ0MTAwM2UsCisJMHgxZDQxMDAzYywgMHgxZDQxMDAzYiwgMHgxZDQxMDAzOSwgMHgxZDQxMDAzNywKKwkweDFjNDEwMDQ0LCAweDFjNDEwMDQyLCAweDFjNDEwMDQwLCAweDFjNDEwMDNlLAorCTB4MWM0MTAwM2MsIDB4MWM0MTAwM2IsIDB4MWM0MTAwMzksIDB4MWM0MTAwMzcsCisJMHgxYjQxMDA0NCwgMHgxYjQxMDA0MiwgMHgxYjQxMDA0MCwgMHgxYjQxMDAzZSwKKwkweDFiNDEwMDNjLCAweDFiNDEwMDNiLCAweDFiNDEwMDM5LCAweDFiNDEwMDM3LAorCTB4MWE0MTAwNDQsIDB4MWE0MTAwNDIsIDB4MWE0MTAwNDAsIDB4MWE0MTAwM2UsCisJMHgxYTQxMDAzYywgMHgxYTQxMDAzYiwgMHgxYTQxMDAzOSwgMHgxYTQxMDAzNywKKwkweDE5NDEwMDQ0LCAweDE5NDEwMDQyLCAweDE5NDEwMDQwLCAweDE5NDEwMDNlLAorCTB4MTk0MTAwM2MsIDB4MTk0MTAwM2IsIDB4MTk0MTAwMzksIDB4MTk0MTAwMzcsCisJMHgxODQxMDA0NCwgMHgxODQxMDA0MiwgMHgxODQxMDA0MCwgMHgxODQxMDAzZSwKKwkweDE4NDEwMDNjLCAweDE4NDEwMDNiLCAweDE4NDEwMDM5LCAweDE4NDEwMDM3LAorCTB4MTc0MTAwNDQsIDB4MTc0MTAwNDIsIDB4MTc0MTAwNDAsIDB4MTc0MTAwM2UsCisJMHgxNzQxMDAzYywgMHgxNzQxMDAzYiwgMHgxNzQxMDAzOSwgMHgxNzQxMDAzNywKKwkweDE2NDEwMDQ0LCAweDE2NDEwMDQyLCAweDE2NDEwMDQwLCAweDE2NDEwMDNlLAorCTB4MTY0MTAwM2MsIDB4MTY0MTAwM2IsIDB4MTY0MTAwMzksIDB4MTY0MTAwMzcsCisJMHgxNTQxMDA0NCwgMHgxNTQxMDA0MiwgMHgxNTQxMDA0MCwgMHgxNTQxMDAzZSwKKwkweDE1NDEwMDNjLCAweDE1NDEwMDNiLCAweDE1NDEwMDM5LCAweDE1NDEwMDM3LAorCTB4MTQ0MTAwNDQsIDB4MTQ0MTAwNDIsIDB4MTQ0MTAwNDAsIDB4MTQ0MTAwM2UsCisJMHgxNDQxMDAzYywgMHgxNDQxMDAzYiwgMHgxNDQxMDAzOSwgMHgxNDQxMDAzNywKKwkweDEzNDEwMDQ0LCAweDEzNDEwMDQyLCAweDEzNDEwMDQwLCAweDEzNDEwMDNlLAorCTB4MTM0MTAwM2MsIDB4MTM0MTAwM2IsIDB4MTM0MTAwMzksIDB4MTM0MTAwMzcsCisJMHgxMjQxMDA0NCwgMHgxMjQxMDA0MiwgMHgxMjQxMDA0MCwgMHgxMjQxMDAzZSwKKwkweDEyNDEwMDNjLCAweDEyNDEwMDNiLCAweDEyNDEwMDM5LCAweDEyNDEwMDM3LAorCTB4MTE0MTAwNDQsIDB4MTE0MTAwNDIsIDB4MTE0MTAwNDAsIDB4MTE0MTAwM2UsCisJMHgxMTQxMDAzYywgMHgxMTQxMDAzYiwgMHgxMTQxMDAzOSwgMHgxMTQxMDAzNywKKwkweDEwNDEwMDQ0LCAweDEwNDEwMDQyLCAweDEwNDEwMDQwLCAweDEwNDEwMDNlLAorCTB4MTA0MTAwM2MsIDB4MTA0MTAwM2IsIDB4MTA0MTAwMzksIDB4MTA0MTAwMzcsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYzXzVnaHpbXSA9IHsKKwkweGNmZjcwMDQ0LCAweGNmZjcwMDQyLCAweGNmZjcwMDQwLCAweGNmZjcwMDNlLAorCTB4Y2ZmNzAwM2MsIDB4Y2ZmNzAwM2IsIDB4Y2ZmNzAwMzksIDB4Y2ZmNzAwMzcsCisJMHhjZWY3MDA0NCwgMHhjZWY3MDA0MiwgMHhjZWY3MDA0MCwgMHhjZWY3MDAzZSwKKwkweGNlZjcwMDNjLCAweGNlZjcwMDNiLCAweGNlZjcwMDM5LCAweGNlZjcwMDM3LAorCTB4Y2RmNzAwNDQsIDB4Y2RmNzAwNDIsIDB4Y2RmNzAwNDAsIDB4Y2RmNzAwM2UsCisJMHhjZGY3MDAzYywgMHhjZGY3MDAzYiwgMHhjZGY3MDAzOSwgMHhjZGY3MDAzNywKKwkweGNjZjcwMDQ0LCAweGNjZjcwMDQyLCAweGNjZjcwMDQwLCAweGNjZjcwMDNlLAorCTB4Y2NmNzAwM2MsIDB4Y2NmNzAwM2IsIDB4Y2NmNzAwMzksIDB4Y2NmNzAwMzcsCisJMHhjYmY3MDA0NCwgMHhjYmY3MDA0MiwgMHhjYmY3MDA0MCwgMHhjYmY3MDAzZSwKKwkweGNiZjcwMDNjLCAweGNiZjcwMDNiLCAweGNiZjcwMDM5LCAweGNiZjcwMDM3LAorCTB4Y2FmNzAwNDQsIDB4Y2FmNzAwNDIsIDB4Y2FmNzAwNDAsIDB4Y2FmNzAwM2UsCisJMHhjYWY3MDAzYywgMHhjYWY3MDAzYiwgMHhjYWY3MDAzOSwgMHhjYWY3MDAzNywKKwkweGM5ZjcwMDQ0LCAweGM5ZjcwMDQyLCAweGM5ZjcwMDQwLCAweGM5ZjcwMDNlLAorCTB4YzlmNzAwM2MsIDB4YzlmNzAwM2IsIDB4YzlmNzAwMzksIDB4YzlmNzAwMzcsCisJMHhjOGY3MDA0NCwgMHhjOGY3MDA0MiwgMHhjOGY3MDA0MCwgMHhjOGY3MDAzZSwKKwkweGM4ZjcwMDNjLCAweGM4ZjcwMDNiLCAweGM4ZjcwMDM5LCAweGM4ZjcwMDM3LAorCTB4YzdmNzAwNDQsIDB4YzdmNzAwNDIsIDB4YzdmNzAwNDAsIDB4YzdmNzAwM2UsCisJMHhjN2Y3MDAzYywgMHhjN2Y3MDAzYiwgMHhjN2Y3MDAzOSwgMHhjN2Y3MDAzNywKKwkweGM2ZjcwMDQ0LCAweGM2ZjcwMDQyLCAweGM2ZjcwMDQwLCAweGM2ZjcwMDNlLAorCTB4YzZmNzAwM2MsIDB4YzZmNzAwM2IsIDB4YzZmNzAwMzksIDB4YzZmNzAwMzcsCisJMHhjNWY3MDA0NCwgMHhjNWY3MDA0MiwgMHhjNWY3MDA0MCwgMHhjNWY3MDAzZSwKKwkweGM1ZjcwMDNjLCAweGM1ZjcwMDNiLCAweGM1ZjcwMDM5LCAweGM1ZjcwMDM3LAorCTB4YzRmNzAwNDQsIDB4YzRmNzAwNDIsIDB4YzRmNzAwNDAsIDB4YzRmNzAwM2UsCisJMHhjNGY3MDAzYywgMHhjNGY3MDAzYiwgMHhjNGY3MDAzOSwgMHhjNGY3MDAzNywKKwkweGMzZjcwMDQ0LCAweGMzZjcwMDQyLCAweGMzZjcwMDQwLCAweGMzZjcwMDNlLAorCTB4YzNmNzAwM2MsIDB4YzNmNzAwM2IsIDB4YzNmNzAwMzksIDB4YzNmNzAwMzcsCisJMHhjMmY3MDA0NCwgMHhjMmY3MDA0MiwgMHhjMmY3MDA0MCwgMHhjMmY3MDAzZSwKKwkweGMyZjcwMDNjLCAweGMyZjcwMDNiLCAweGMyZjcwMDM5LCAweGMyZjcwMDM3LAorCTB4YzFmNzAwNDQsIDB4YzFmNzAwNDIsIDB4YzFmNzAwNDAsIDB4YzFmNzAwM2UsCisJMHhjMWY3MDAzYywgMHhjMWY3MDAzYiwgMHhjMWY3MDAzOSwgMHhjMWY3MDAzNywKKwkweGMwZjcwMDQ0LCAweGMwZjcwMDQyLCAweGMwZjcwMDQwLCAweGMwZjcwMDNlLAorCTB4YzBmNzAwM2MsIDB4YzBmNzAwM2IsIDB4YzBmNzAwMzksIDB4YzBmNzAwMzcsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXY0XzVnaHpbXSA9IHsKKwkweDJmZjIwMDQ0LCAweDJmZjIwMDQyLCAweDJmZjIwMDQwLCAweDJmZjIwMDNlLAorCTB4MmZmMjAwM2MsIDB4MmZmMjAwM2IsIDB4MmZmMjAwMzksIDB4MmZmMjAwMzcsCisJMHgyZWYyMDA0NCwgMHgyZWYyMDA0MiwgMHgyZWYyMDA0MCwgMHgyZWYyMDAzZSwKKwkweDJlZjIwMDNjLCAweDJlZjIwMDNiLCAweDJlZjIwMDM5LCAweDJlZjIwMDM3LAorCTB4MmRmMjAwNDQsIDB4MmRmMjAwNDIsIDB4MmRmMjAwNDAsIDB4MmRmMjAwM2UsCisJMHgyZGYyMDAzYywgMHgyZGYyMDAzYiwgMHgyZGYyMDAzOSwgMHgyZGYyMDAzNywKKwkweDJjZjIwMDQ0LCAweDJjZjIwMDQyLCAweDJjZjIwMDQwLCAweDJjZjIwMDNlLAorCTB4MmNmMjAwM2MsIDB4MmNmMjAwM2IsIDB4MmNmMjAwMzksIDB4MmNmMjAwMzcsCisJMHgyYmYyMDA0NCwgMHgyYmYyMDA0MiwgMHgyYmYyMDA0MCwgMHgyYmYyMDAzZSwKKwkweDJiZjIwMDNjLCAweDJiZjIwMDNiLCAweDJiZjIwMDM5LCAweDJiZjIwMDM3LAorCTB4MmFmMjAwNDQsIDB4MmFmMjAwNDIsIDB4MmFmMjAwNDAsIDB4MmFmMjAwM2UsCisJMHgyYWYyMDAzYywgMHgyYWYyMDAzYiwgMHgyYWYyMDAzOSwgMHgyYWYyMDAzNywKKwkweDI5ZjIwMDQ0LCAweDI5ZjIwMDQyLCAweDI5ZjIwMDQwLCAweDI5ZjIwMDNlLAorCTB4MjlmMjAwM2MsIDB4MjlmMjAwM2IsIDB4MjlmMjAwMzksIDB4MjlmMjAwMzcsCisJMHgyOGYyMDA0NCwgMHgyOGYyMDA0MiwgMHgyOGYyMDA0MCwgMHgyOGYyMDAzZSwKKwkweDI4ZjIwMDNjLCAweDI4ZjIwMDNiLCAweDI4ZjIwMDM5LCAweDI4ZjIwMDM3LAorCTB4MjdmMjAwNDQsIDB4MjdmMjAwNDIsIDB4MjdmMjAwNDAsIDB4MjdmMjAwM2UsCisJMHgyN2YyMDAzYywgMHgyN2YyMDAzYiwgMHgyN2YyMDAzOSwgMHgyN2YyMDAzNywKKwkweDI2ZjIwMDQ0LCAweDI2ZjIwMDQyLCAweDI2ZjIwMDQwLCAweDI2ZjIwMDNlLAorCTB4MjZmMjAwM2MsIDB4MjZmMjAwM2IsIDB4MjZmMjAwMzksIDB4MjZmMjAwMzcsCisJMHgyNWYyMDA0NCwgMHgyNWYyMDA0MiwgMHgyNWYyMDA0MCwgMHgyNWYyMDAzZSwKKwkweDI1ZjIwMDNjLCAweDI1ZjIwMDNiLCAweDI1ZjIwMDM5LCAweDI1ZjIwMDM3LAorCTB4MjRmMjAwNDQsIDB4MjRmMjAwNDIsIDB4MjRmMjAwNDAsIDB4MjRmMjAwM2UsCisJMHgyNGYyMDAzYywgMHgyNGYyMDAzYiwgMHgyNGYyMDAzOSwgMHgyNGYyMDAzOCwKKwkweDIzZjIwMDQxLCAweDIzZjIwMDQwLCAweDIzZjIwMDNmLCAweDIzZjIwMDNlLAorCTB4MjNmMjAwM2MsIDB4MjNmMjAwM2IsIDB4MjNmMjAwMzksIDB4MjNmMjAwMzcsCisJMHgyMmYyMDA0NCwgMHgyMmYyMDA0MiwgMHgyMmYyMDA0MCwgMHgyMmYyMDAzZSwKKwkweDIyZjIwMDNjLCAweDIyZjIwMDNiLCAweDIyZjIwMDM5LCAweDIyZjIwMDM3LAorCTB4MjFmMjAwNDQsIDB4MjFmMjAwNDIsIDB4MjFmMjAwNDAsIDB4MjFmMjAwM2UsCisJMHgyMWYyMDAzYywgMHgyMWYyMDAzYiwgMHgyMWYyMDAzOSwgMHgyMWYyMDAzNywKKwkweDIwZDIwMDQzLCAweDIwZDIwMDQxLCAweDIwZDIwMDNlLCAweDIwZDIwMDNjLAorCTB4MjBkMjAwM2EsIDB4MjBkMjAwMzgsIDB4MjBkMjAwMzYsIDB4MjBkMjAwMzQsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXY1cGx1c181Z2h6W10gPSB7CisJMHgwZjYyMDA0YSwgMHgwZjYyMDA0OCwgMHgwZjYyMDA0NiwgMHgwZjYyMDA0NCwKKwkweDBmNjIwMDQyLCAweDBmNjIwMDQwLCAweDBmNjIwMDNlLCAweDBmNjIwMDNjLAorCTB4MGU2MjAwNDQsIDB4MGU2MjAwNDIsIDB4MGU2MjAwNDAsIDB4MGU2MjAwM2UsCisJMHgwZTYyMDAzYywgMHgwZTYyMDAzZCwgMHgwZTYyMDAzYiwgMHgwZTYyMDAzYSwKKwkweDBkNjIwMDQzLCAweDBkNjIwMDQxLCAweDBkNjIwMDQwLCAweDBkNjIwMDNlLAorCTB4MGQ2MjAwM2QsIDB4MGQ2MjAwM2MsIDB4MGQ2MjAwM2IsIDB4MGQ2MjAwM2EsCisJMHgwYzYyMDA0MSwgMHgwYzYyMDA0MCwgMHgwYzYyMDAzZiwgMHgwYzYyMDAzZSwKKwkweDBjNjIwMDNjLCAweDBjNjIwMDNiLCAweDBjNjIwMDM5LCAweDBjNjIwMDM3LAorCTB4MGI2MjAwNDYsIDB4MGI2MjAwNDQsIDB4MGI2MjAwNDIsIDB4MGI2MjAwNDAsCisJMHgwYjYyMDAzZSwgMHgwYjYyMDAzYywgMHgwYjYyMDAzYiwgMHgwYjYyMDAzYSwKKwkweDBhNjIwMDQxLCAweDBhNjIwMDQwLCAweDBhNjIwMDNlLCAweDBhNjIwMDNjLAorCTB4MGE2MjAwM2IsIDB4MGE2MjAwM2EsIDB4MGE2MjAwMzksIDB4MGE2MjAwMzgsCisJMHgwOTYyMDAzZSwgMHgwOTYyMDAzZCwgMHgwOTYyMDAzYywgMHgwOTYyMDAzYiwKKwkweDA5NjIwMDM5LCAweDA5NjIwMDM3LCAweDA5NjIwMDM1LCAweDA5NjIwMDMzLAorCTB4MDg2MjAwNDQsIDB4MDg2MjAwNDIsIDB4MDg2MjAwNDAsIDB4MDg2MjAwM2UsCisJMHgwODYyMDAzYywgMHgwODYyMDAzYiwgMHgwODYyMDAzYSwgMHgwODYyMDAzOSwKKwkweDA3NjIwMDQzLCAweDA3NjIwMDQyLCAweDA3NjIwMDQwLCAweDA3NjIwMDNmLAorCTB4MDc2MjAwM2QsIDB4MDc2MjAwM2IsIDB4MDc2MjAwM2EsIDB4MDc2MjAwMzksCisJMHgwNjYyMDAzZSwgMHgwNjYyMDAzZCwgMHgwNjYyMDAzYywgMHgwNjYyMDAzYiwKKwkweDA2NjIwMDM5LCAweDA2NjIwMDM3LCAweDA2NjIwMDM1LCAweDA2NjIwMDMzLAorCTB4MDU2MjAwNDYsIDB4MDU2MjAwNDQsIDB4MDU2MjAwNDIsIDB4MDU2MjAwNDAsCisJMHgwNTYyMDAzZSwgMHgwNTYyMDAzYywgMHgwNTYyMDAzYiwgMHgwNTYyMDAzOSwKKwkweDA0NjIwMDQ0LCAweDA0NjIwMDQyLCAweDA0NjIwMDQwLCAweDA0NjIwMDNlLAorCTB4MDQ2MjAwM2MsIDB4MDQ2MjAwM2IsIDB4MDQ2MjAwMzksIDB4MDQ2MjAwMzgsCisJMHgwMzYyMDAzYywgMHgwMzYyMDAzYiwgMHgwMzYyMDAzYSwgMHgwMzYyMDAzOSwKKwkweDAzNjIwMDM4LCAweDAzNjIwMDM3LCAweDAzNjIwMDM1LCAweDAzNjIwMDMzLAorCTB4MDI2MjAwNGMsIDB4MDI2MjAwNGEsIDB4MDI2MjAwNDgsIDB4MDI2MjAwNDcsCisJMHgwMjYyMDA0NiwgMHgwMjYyMDA0NCwgMHgwMjYyMDA0MywgMHgwMjYyMDA0MiwKKwkweDAxNjIwMDRhLCAweDAxNjIwMDQ4LCAweDAxNjIwMDQ2LCAweDAxNjIwMDQ0LAorCTB4MDE2MjAwNDMsIDB4MDE2MjAwNDIsIDB4MDE2MjAwNDEsIDB4MDE2MjAwNDAsCisJMHgwMDYyMDA0MiwgMHgwMDYyMDA0MCwgMHgwMDYyMDAzZSwgMHgwMDYyMDAzYywKKwkweDAwNjIwMDNiLCAweDAwNjIwMDM5LCAweDAwNjIwMDM3LCAweDAwNjIwMDM1LAorfTsKKworY29uc3QgdTMyIHR4cHdyY3RybF90eF9nYWluX2lwYVtdID0geworCTB4NWZmNzAwMmQsIDB4NWZmNzAwMmIsIDB4NWZmNzAwMmEsIDB4NWZmNzAwMjksCisJMHg1ZmY3MDAyOCwgMHg1ZmY3MDAyNywgMHg1ZmY3MDAyNiwgMHg1ZmY3MDAyNSwKKwkweDVlZjcwMDJkLCAweDVlZjcwMDJiLCAweDVlZjcwMDJhLCAweDVlZjcwMDI5LAorCTB4NWVmNzAwMjgsIDB4NWVmNzAwMjcsIDB4NWVmNzAwMjYsIDB4NWVmNzAwMjUsCisJMHg1ZGY3MDAyZCwgMHg1ZGY3MDAyYiwgMHg1ZGY3MDAyYSwgMHg1ZGY3MDAyOSwKKwkweDVkZjcwMDI4LCAweDVkZjcwMDI3LCAweDVkZjcwMDI2LCAweDVkZjcwMDI1LAorCTB4NWNmNzAwMmQsIDB4NWNmNzAwMmIsIDB4NWNmNzAwMmEsIDB4NWNmNzAwMjksCisJMHg1Y2Y3MDAyOCwgMHg1Y2Y3MDAyNywgMHg1Y2Y3MDAyNiwgMHg1Y2Y3MDAyNSwKKwkweDViZjcwMDJkLCAweDViZjcwMDJiLCAweDViZjcwMDJhLCAweDViZjcwMDI5LAorCTB4NWJmNzAwMjgsIDB4NWJmNzAwMjcsIDB4NWJmNzAwMjYsIDB4NWJmNzAwMjUsCisJMHg1YWY3MDAyZCwgMHg1YWY3MDAyYiwgMHg1YWY3MDAyYSwgMHg1YWY3MDAyOSwKKwkweDVhZjcwMDI4LCAweDVhZjcwMDI3LCAweDVhZjcwMDI2LCAweDVhZjcwMDI1LAorCTB4NTlmNzAwMmQsIDB4NTlmNzAwMmIsIDB4NTlmNzAwMmEsIDB4NTlmNzAwMjksCisJMHg1OWY3MDAyOCwgMHg1OWY3MDAyNywgMHg1OWY3MDAyNiwgMHg1OWY3MDAyNSwKKwkweDU4ZjcwMDJkLCAweDU4ZjcwMDJiLCAweDU4ZjcwMDJhLCAweDU4ZjcwMDI5LAorCTB4NThmNzAwMjgsIDB4NThmNzAwMjcsIDB4NThmNzAwMjYsIDB4NThmNzAwMjUsCisJMHg1N2Y3MDAyZCwgMHg1N2Y3MDAyYiwgMHg1N2Y3MDAyYSwgMHg1N2Y3MDAyOSwKKwkweDU3ZjcwMDI4LCAweDU3ZjcwMDI3LCAweDU3ZjcwMDI2LCAweDU3ZjcwMDI1LAorCTB4NTZmNzAwMmQsIDB4NTZmNzAwMmIsIDB4NTZmNzAwMmEsIDB4NTZmNzAwMjksCisJMHg1NmY3MDAyOCwgMHg1NmY3MDAyNywgMHg1NmY3MDAyNiwgMHg1NmY3MDAyNSwKKwkweDU1ZjcwMDJkLCAweDU1ZjcwMDJiLCAweDU1ZjcwMDJhLCAweDU1ZjcwMDI5LAorCTB4NTVmNzAwMjgsIDB4NTVmNzAwMjcsIDB4NTVmNzAwMjYsIDB4NTVmNzAwMjUsCisJMHg1NGY3MDAyZCwgMHg1NGY3MDAyYiwgMHg1NGY3MDAyYSwgMHg1NGY3MDAyOSwKKwkweDU0ZjcwMDI4LCAweDU0ZjcwMDI3LCAweDU0ZjcwMDI2LCAweDU0ZjcwMDI1LAorCTB4NTNmNzAwMmQsIDB4NTNmNzAwMmIsIDB4NTNmNzAwMmEsIDB4NTNmNzAwMjksCisJMHg1M2Y3MDAyOCwgMHg1M2Y3MDAyNywgMHg1M2Y3MDAyNiwgMHg1M2Y3MDAyNSwKKwkweDUyZjcwMDJkLCAweDUyZjcwMDJiLCAweDUyZjcwMDJhLCAweDUyZjcwMDI5LAorCTB4NTJmNzAwMjgsIDB4NTJmNzAwMjcsIDB4NTJmNzAwMjYsIDB4NTJmNzAwMjUsCisJMHg1MWY3MDAyZCwgMHg1MWY3MDAyYiwgMHg1MWY3MDAyYSwgMHg1MWY3MDAyOSwKKwkweDUxZjcwMDI4LCAweDUxZjcwMDI3LCAweDUxZjcwMDI2LCAweDUxZjcwMDI1LAorCTB4NTBmNzAwMmQsIDB4NTBmNzAwMmIsIDB4NTBmNzAwMmEsIDB4NTBmNzAwMjksCisJMHg1MGY3MDAyOCwgMHg1MGY3MDAyNywgMHg1MGY3MDAyNiwgMHg1MGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NVtdID0geworCTB4MWZmNzAwMmQsIDB4MWZmNzAwMmIsIDB4MWZmNzAwMmEsIDB4MWZmNzAwMjksCisJMHgxZmY3MDAyOCwgMHgxZmY3MDAyNywgMHgxZmY3MDAyNiwgMHgxZmY3MDAyNSwKKwkweDFlZjcwMDJkLCAweDFlZjcwMDJiLCAweDFlZjcwMDJhLCAweDFlZjcwMDI5LAorCTB4MWVmNzAwMjgsIDB4MWVmNzAwMjcsIDB4MWVmNzAwMjYsIDB4MWVmNzAwMjUsCisJMHgxZGY3MDAyZCwgMHgxZGY3MDAyYiwgMHgxZGY3MDAyYSwgMHgxZGY3MDAyOSwKKwkweDFkZjcwMDI4LCAweDFkZjcwMDI3LCAweDFkZjcwMDI2LCAweDFkZjcwMDI1LAorCTB4MWNmNzAwMmQsIDB4MWNmNzAwMmIsIDB4MWNmNzAwMmEsIDB4MWNmNzAwMjksCisJMHgxY2Y3MDAyOCwgMHgxY2Y3MDAyNywgMHgxY2Y3MDAyNiwgMHgxY2Y3MDAyNSwKKwkweDFiZjcwMDJkLCAweDFiZjcwMDJiLCAweDFiZjcwMDJhLCAweDFiZjcwMDI5LAorCTB4MWJmNzAwMjgsIDB4MWJmNzAwMjcsIDB4MWJmNzAwMjYsIDB4MWJmNzAwMjUsCisJMHgxYWY3MDAyZCwgMHgxYWY3MDAyYiwgMHgxYWY3MDAyYSwgMHgxYWY3MDAyOSwKKwkweDFhZjcwMDI4LCAweDFhZjcwMDI3LCAweDFhZjcwMDI2LCAweDFhZjcwMDI1LAorCTB4MTlmNzAwMmQsIDB4MTlmNzAwMmIsIDB4MTlmNzAwMmEsIDB4MTlmNzAwMjksCisJMHgxOWY3MDAyOCwgMHgxOWY3MDAyNywgMHgxOWY3MDAyNiwgMHgxOWY3MDAyNSwKKwkweDE4ZjcwMDJkLCAweDE4ZjcwMDJiLCAweDE4ZjcwMDJhLCAweDE4ZjcwMDI5LAorCTB4MThmNzAwMjgsIDB4MThmNzAwMjcsIDB4MThmNzAwMjYsIDB4MThmNzAwMjUsCisJMHgxN2Y3MDAyZCwgMHgxN2Y3MDAyYiwgMHgxN2Y3MDAyYSwgMHgxN2Y3MDAyOSwKKwkweDE3ZjcwMDI4LCAweDE3ZjcwMDI3LCAweDE3ZjcwMDI2LCAweDE3ZjcwMDI1LAorCTB4MTZmNzAwMmQsIDB4MTZmNzAwMmIsIDB4MTZmNzAwMmEsIDB4MTZmNzAwMjksCisJMHgxNmY3MDAyOCwgMHgxNmY3MDAyNywgMHgxNmY3MDAyNiwgMHgxNmY3MDAyNSwKKwkweDE1ZjcwMDJkLCAweDE1ZjcwMDJiLCAweDE1ZjcwMDJhLCAweDE1ZjcwMDI5LAorCTB4MTVmNzAwMjgsIDB4MTVmNzAwMjcsIDB4MTVmNzAwMjYsIDB4MTVmNzAwMjUsCisJMHgxNGY3MDAyZCwgMHgxNGY3MDAyYiwgMHgxNGY3MDAyYSwgMHgxNGY3MDAyOSwKKwkweDE0ZjcwMDI4LCAweDE0ZjcwMDI3LCAweDE0ZjcwMDI2LCAweDE0ZjcwMDI1LAorCTB4MTNmNzAwMmQsIDB4MTNmNzAwMmIsIDB4MTNmNzAwMmEsIDB4MTNmNzAwMjksCisJMHgxM2Y3MDAyOCwgMHgxM2Y3MDAyNywgMHgxM2Y3MDAyNiwgMHgxM2Y3MDAyNSwKKwkweDEyZjcwMDJkLCAweDEyZjcwMDJiLCAweDEyZjcwMDJhLCAweDEyZjcwMDI5LAorCTB4MTJmNzAwMjgsIDB4MTJmNzAwMjcsIDB4MTJmNzAwMjYsIDB4MTJmNzAwMjUsCisJMHgxMWY3MDAyZCwgMHgxMWY3MDAyYiwgMHgxMWY3MDAyYSwgMHgxMWY3MDAyOSwKKwkweDExZjcwMDI4LCAweDExZjcwMDI3LCAweDExZjcwMDI2LCAweDExZjcwMDI1LAorCTB4MTBmNzAwMmQsIDB4MTBmNzAwMmIsIDB4MTBmNzAwMmEsIDB4MTBmNzAwMjksCisJMHgxMGY3MDAyOCwgMHgxMGY3MDAyNywgMHgxMGY3MDAyNiwgMHgxMGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NltdID0geworCTB4MGZmNzAwMmQsIDB4MGZmNzAwMmIsIDB4MGZmNzAwMmEsIDB4MGZmNzAwMjksCisJMHgwZmY3MDAyOCwgMHgwZmY3MDAyNywgMHgwZmY3MDAyNiwgMHgwZmY3MDAyNSwKKwkweDBlZjcwMDJkLCAweDBlZjcwMDJiLCAweDBlZjcwMDJhLCAweDBlZjcwMDI5LAorCTB4MGVmNzAwMjgsIDB4MGVmNzAwMjcsIDB4MGVmNzAwMjYsIDB4MGVmNzAwMjUsCisJMHgwZGY3MDAyZCwgMHgwZGY3MDAyYiwgMHgwZGY3MDAyYSwgMHgwZGY3MDAyOSwKKwkweDBkZjcwMDI4LCAweDBkZjcwMDI3LCAweDBkZjcwMDI2LCAweDBkZjcwMDI1LAorCTB4MGNmNzAwMmQsIDB4MGNmNzAwMmIsIDB4MGNmNzAwMmEsIDB4MGNmNzAwMjksCisJMHgwY2Y3MDAyOCwgMHgwY2Y3MDAyNywgMHgwY2Y3MDAyNiwgMHgwY2Y3MDAyNSwKKwkweDBiZjcwMDJkLCAweDBiZjcwMDJiLCAweDBiZjcwMDJhLCAweDBiZjcwMDI5LAorCTB4MGJmNzAwMjgsIDB4MGJmNzAwMjcsIDB4MGJmNzAwMjYsIDB4MGJmNzAwMjUsCisJMHgwYWY3MDAyZCwgMHgwYWY3MDAyYiwgMHgwYWY3MDAyYSwgMHgwYWY3MDAyOSwKKwkweDBhZjcwMDI4LCAweDBhZjcwMDI3LCAweDBhZjcwMDI2LCAweDBhZjcwMDI1LAorCTB4MDlmNzAwMmQsIDB4MDlmNzAwMmIsIDB4MDlmNzAwMmEsIDB4MDlmNzAwMjksCisJMHgwOWY3MDAyOCwgMHgwOWY3MDAyNywgMHgwOWY3MDAyNiwgMHgwOWY3MDAyNSwKKwkweDA4ZjcwMDJkLCAweDA4ZjcwMDJiLCAweDA4ZjcwMDJhLCAweDA4ZjcwMDI5LAorCTB4MDhmNzAwMjgsIDB4MDhmNzAwMjcsIDB4MDhmNzAwMjYsIDB4MDhmNzAwMjUsCisJMHgwN2Y3MDAyZCwgMHgwN2Y3MDAyYiwgMHgwN2Y3MDAyYSwgMHgwN2Y3MDAyOSwKKwkweDA3ZjcwMDI4LCAweDA3ZjcwMDI3LCAweDA3ZjcwMDI2LCAweDA3ZjcwMDI1LAorCTB4MDZmNzAwMmQsIDB4MDZmNzAwMmIsIDB4MDZmNzAwMmEsIDB4MDZmNzAwMjksCisJMHgwNmY3MDAyOCwgMHgwNmY3MDAyNywgMHgwNmY3MDAyNiwgMHgwNmY3MDAyNSwKKwkweDA1ZjcwMDJkLCAweDA1ZjcwMDJiLCAweDA1ZjcwMDJhLCAweDA1ZjcwMDI5LAorCTB4MDVmNzAwMjgsIDB4MDVmNzAwMjcsIDB4MDVmNzAwMjYsIDB4MDVmNzAwMjUsCisJMHgwNGY3MDAyZCwgMHgwNGY3MDAyYiwgMHgwNGY3MDAyYSwgMHgwNGY3MDAyOSwKKwkweDA0ZjcwMDI4LCAweDA0ZjcwMDI3LCAweDA0ZjcwMDI2LCAweDA0ZjcwMDI1LAorCTB4MDNmNzAwMmQsIDB4MDNmNzAwMmIsIDB4MDNmNzAwMmEsIDB4MDNmNzAwMjksCisJMHgwM2Y3MDAyOCwgMHgwM2Y3MDAyNywgMHgwM2Y3MDAyNiwgMHgwM2Y3MDAyNSwKKwkweDAyZjcwMDJkLCAweDAyZjcwMDJiLCAweDAyZjcwMDJhLCAweDAyZjcwMDI5LAorCTB4MDJmNzAwMjgsIDB4MDJmNzAwMjcsIDB4MDJmNzAwMjYsIDB4MDJmNzAwMjUsCisJMHgwMWY3MDAyZCwgMHgwMWY3MDAyYiwgMHgwMWY3MDAyYSwgMHgwMWY3MDAyOSwKKwkweDAxZjcwMDI4LCAweDAxZjcwMDI3LCAweDAxZjcwMDI2LCAweDAxZjcwMDI1LAorCTB4MDBmNzAwMmQsIDB4MDBmNzAwMmIsIDB4MDBmNzAwMmEsIDB4MDBmNzAwMjksCisJMHgwMGY3MDAyOCwgMHgwMGY3MDAyNywgMHgwMGY3MDAyNiwgMHgwMGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfNWdbXSA9IHsKKwkweDdmZjcwMDM1LCAweDdmZjcwMDMzLCAweDdmZjcwMDMyLCAweDdmZjcwMDMxLAorCTB4N2ZmNzAwMmYsIDB4N2ZmNzAwMmUsIDB4N2ZmNzAwMmQsIDB4N2ZmNzAwMmIsCisJMHg3ZmY3MDAyYSwgMHg3ZmY3MDAyOSwgMHg3ZmY3MDAyOCwgMHg3ZmY3MDAyNywKKwkweDdmZjcwMDI2LCAweDdmZjcwMDI0LCAweDdmZjcwMDIzLCAweDdmZjcwMDIyLAorCTB4N2VmNzAwMjgsIDB4N2VmNzAwMjcsIDB4N2VmNzAwMjYsIDB4N2VmNzAwMjUsCisJMHg3ZWY3MDAyNCwgMHg3ZWY3MDAyMywgMHg3ZGY3MDAyOCwgMHg3ZGY3MDAyNywKKwkweDdkZjcwMDI2LCAweDdkZjcwMDI1LCAweDdkZjcwMDI0LCAweDdkZjcwMDIzLAorCTB4N2RmNzAwMjIsIDB4N2NmNzAwMjksIDB4N2NmNzAwMjgsIDB4N2NmNzAwMjcsCisJMHg3Y2Y3MDAyNiwgMHg3Y2Y3MDAyNSwgMHg3Y2Y3MDAyMywgMHg3Y2Y3MDAyMiwKKwkweDdiZjcwMDI5LCAweDdiZjcwMDI4LCAweDdiZjcwMDI2LCAweDdiZjcwMDI1LAorCTB4N2JmNzAwMjQsIDB4N2JmNzAwMjMsIDB4N2JmNzAwMjIsIDB4N2JmNzAwMjEsCisJMHg3YWY3MDAyOSwgMHg3YWY3MDAyOCwgMHg3YWY3MDAyNywgMHg3YWY3MDAyNiwKKwkweDdhZjcwMDI1LCAweDdhZjcwMDI0LCAweDdhZjcwMDIzLCAweDdhZjcwMDIyLAorCTB4NzlmNzAwMjksIDB4NzlmNzAwMjgsIDB4NzlmNzAwMjcsIDB4NzlmNzAwMjYsCisJMHg3OWY3MDAyNSwgMHg3OWY3MDAyNCwgMHg3OWY3MDAyMywgMHg3OWY3MDAyMiwKKwkweDc4ZjcwMDI5LCAweDc4ZjcwMDI4LCAweDc4ZjcwMDI3LCAweDc4ZjcwMDI2LAorCTB4NzhmNzAwMjUsIDB4NzhmNzAwMjQsIDB4NzhmNzAwMjMsIDB4NzhmNzAwMjIsCisJMHg3N2Y3MDAyOSwgMHg3N2Y3MDAyOCwgMHg3N2Y3MDAyNywgMHg3N2Y3MDAyNiwKKwkweDc3ZjcwMDI1LCAweDc3ZjcwMDI0LCAweDc3ZjcwMDIzLCAweDc3ZjcwMDIyLAorCTB4NzZmNzAwMjksIDB4NzZmNzAwMjgsIDB4NzZmNzAwMjcsIDB4NzZmNzAwMjYsCisJMHg3NmY3MDAyNCwgMHg3NmY3MDAyMywgMHg3NmY3MDAyMiwgMHg3NmY3MDAyMSwKKwkweDc1ZjcwMDI5LCAweDc1ZjcwMDI4LCAweDc1ZjcwMDI3LCAweDc1ZjcwMDI2LAorCTB4NzVmNzAwMjUsIDB4NzVmNzAwMjQsIDB4NzVmNzAwMjMsIDB4NzRmNzAwMjksCisJMHg3NGY3MDAyOCwgMHg3NGY3MDAyNiwgMHg3NGY3MDAyNSwgMHg3NGY3MDAyNCwKKwkweDc0ZjcwMDIzLCAweDc0ZjcwMDIyLCAweDczZjcwMDI5LCAweDczZjcwMDI3LAorCTB4NzNmNzAwMjYsIDB4NzNmNzAwMjUsIDB4NzNmNzAwMjQsIDB4NzNmNzAwMjMsCisJMHg3M2Y3MDAyMiwgMHg3MmY3MDAyOCwgMHg3MmY3MDAyNywgMHg3MmY3MDAyNiwKKwkweDcyZjcwMDI1LCAweDcyZjcwMDI0LCAweDcyZjcwMDIzLCAweDcyZjcwMDIyLAorCTB4NzFmNzAwMjgsIDB4NzFmNzAwMjcsIDB4NzFmNzAwMjYsIDB4NzFmNzAwMjUsCisJMHg3MWY3MDAyNCwgMHg3MWY3MDAyMywgMHg3MGY3MDAyOCwgMHg3MGY3MDAyNywKKwkweDcwZjcwMDI2LCAweDcwZjcwMDI0LCAweDcwZjcwMDIzLCAweDcwZjcwMDIyLAorCTB4NzBmNzAwMjEsIDB4NzBmNzAwMjAsIDB4NzBmNzAwMjAsIDB4NzBmNzAwMWYsCit9OworCitjb25zdCB1MTYgdGJsX2lxY2FsX2dhaW5wYXJhbXNbMl1bOV1bOF0gPSB7CisJeworCQl7IDB4MDAwLCAwLCAwLCAyLCAweDY5LCAweDY5LCAweDY5LCAweDY5IH0sCisJCXsgMHg3MDAsIDcsIDAsIDAsIDB4NjksIDB4NjksIDB4NjksIDB4NjkgfSwKKwkJeyAweDcxMCwgNywgMSwgMCwgMHg2OCwgMHg2OCwgMHg2OCwgMHg2OCB9LAorCQl7IDB4NzIwLCA3LCAyLCAwLCAweDY3LCAweDY3LCAweDY3LCAweDY3IH0sCisJCXsgMHg3MzAsIDcsIDMsIDAsIDB4NjYsIDB4NjYsIDB4NjYsIDB4NjYgfSwKKwkJeyAweDc0MCwgNywgNCwgMCwgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSB9LAorCQl7IDB4NzQxLCA3LCA0LCAxLCAweDY1LCAweDY1LCAweDY1LCAweDY1IH0sCisJCXsgMHg3NDIsIDcsIDQsIDIsIDB4NjUsIDB4NjUsIDB4NjUsIDB4NjUgfSwKKwkJeyAweDc0MywgNywgNCwgMywgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSB9CisJfSwKKwl7CisJCXsgMHgwMDAsIDcsIDAsIDAsIDB4NzksIDB4NzksIDB4NzksIDB4NzkgfSwKKwkJeyAweDcwMCwgNywgMCwgMCwgMHg3OSwgMHg3OSwgMHg3OSwgMHg3OSB9LAorCQl7IDB4NzEwLCA3LCAxLCAwLCAweDc5LCAweDc5LCAweDc5LCAweDc5IH0sCisJCXsgMHg3MjAsIDcsIDIsIDAsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzggfSwKKwkJeyAweDczMCwgNywgMywgMCwgMHg3OCwgMHg3OCwgMHg3OCwgMHg3OCB9LAorCQl7IDB4NzQwLCA3LCA0LCAwLCAweDc4LCAweDc4LCAweDc4LCAweDc4IH0sCisJCXsgMHg3NDEsIDcsIDQsIDEsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzggfSwKKwkJeyAweDc0MiwgNywgNCwgMiwgMHg3OCwgMHg3OCwgMHg3OCwgMHg3OCB9LAorCQl7IDB4NzQzLCA3LCA0LCAzLCAweDc4LCAweDc4LCAweDc4LCAweDc4IH0KKwl9Cit9OworCitjb25zdCBzdHJ1Y3QgbnBoeV90eGlxY2FsX2xhZGRlciBsYWRkZXJfbG9bXSA9IHsKKwl7IDMsIDAgfSwKKwl7IDQsIDAgfSwKKwl7IDYsIDAgfSwKKwl7IDksIDAgfSwKKwl7IDEzLCAwIH0sCisJeyAxOCwgMCB9LAorCXsgMjUsIDAgfSwKKwl7IDI1LCAxIH0sCisJeyAyNSwgMiB9LAorCXsgMjUsIDMgfSwKKwl7IDI1LCA0IH0sCisJeyAyNSwgNSB9LAorCXsgMjUsIDYgfSwKKwl7IDI1LCA3IH0sCisJeyAzNSwgNyB9LAorCXsgNTAsIDcgfSwKKwl7IDcxLCA3IH0sCisJeyAxMDAsIDcgfQorfTsKKworY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2lxW10gPSB7CisJeyAzLCAwIH0sCisJeyA0LCAwIH0sCisJeyA2LCAwIH0sCisJeyA5LCAwIH0sCisJeyAxMywgMCB9LAorCXsgMTgsIDAgfSwKKwl7IDI1LCAwIH0sCisJeyAzNSwgMCB9LAorCXsgNTAsIDAgfSwKKwl7IDcxLCAwIH0sCisJeyAxMDAsIDAgfSwKKwl7IDEwMCwgMSB9LAorCXsgMTAwLCAyIH0sCisJeyAxMDAsIDMgfSwKKwl7IDEwMCwgNCB9LAorCXsgMTAwLCA1IH0sCisJeyAxMDAsIDYgfSwKKwl7IDEwMCwgNyB9Cit9OworCitjb25zdCB1MTYgbG9zY2FsZVtdID0geworCTI1NiwgMjU2LCAyNzEsIDI3MSwKKwkyODcsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMjU2LCAyNTYsIDI3MSwKKwkyNzEsIDI4NywgMjg3LCAzMDQsCisJMzA0LCAzMjIsIDMyMiwgMzQxLAorCTM0MSwgMzYyLCAzNjIsIDM4MywKKwkzODMsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDI1NiwKKwkyNTYsIDI3MSwgMjcxLCAyODcsCisJMjg3LCAzMDQsIDMwNCwgMzIyLAorCTMyMiwgMzQxLCAzNDEsIDM2MiwKKwkzNjIsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDI1NiwKKwkyNTYsIDI3MSwgMjcxLCAyODcsCisJMjg3LCAzMDQsIDMwNCwgMzIyLAorCTMyMiwgMzQxLCAzNDEsIDM2MiwKKwkzNjIsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDM0MSwKKwkzNDEsIDM2MiwgMzYyLCAzODMsCisJMzgzLCA0MDYsIDQwNiwgNDMwLAorCTQzMCwgNDU1LCA0NTUsIDQ4MiwKKwk0ODIsIDUxMSwgNTExLCA1NDEsCisJNTQxLCA1NzMsIDU3MywgNjA3LAorCTYwNywgNjQzLCA2NDMsIDY4MSwKKwk2ODEsIDcyMiwgNzIyLCA3NjQsCisJNzY0LCA4MTAsIDgxMCwgODU4LAorCTg1OCwgOTA4LCA5MDgsIDk2MiwKKwk5NjIsIDEwMTksIDEwMTksIDI1NgorfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9sb2Z0X2xhZGRlcl80MFtdID0geworCTB4MDIwMCwgMHgwMzAwLCAweDA0MDAsIDB4MDcwMCwKKwkweDA5MDAsIDB4MGMwMCwgMHgxMjAwLCAweDEyMDEsCisJMHgxMjAyLCAweDEyMDMsIDB4MTIwNCwgMHgxMjA1LAorCTB4MTIwNiwgMHgxMjA3LCAweDE5MDcsIDB4MjMwNywKKwkweDMyMDcsIDB4NDcwNworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9sb2Z0X2xhZGRlcl8yMFtdID0geworCTB4MDMwMCwgMHgwNTAwLCAweDA3MDAsIDB4MDkwMCwKKwkweDBkMDAsIDB4MTEwMCwgMHgxOTAwLCAweDE5MDEsCisJMHgxOTAyLCAweDE5MDMsIDB4MTkwNCwgMHgxOTA1LAorCTB4MTkwNiwgMHgxOTA3LCAweDI0MDcsIDB4MzIwNywKKwkweDQ2MDcsIDB4NjQwNworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfNDBbXSA9IHsKKwkweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA3MDAsCisJMHgwOTAwLCAweDBjMDAsIDB4MTIwMCwgMHgxOTAwLAorCTB4MjMwMCwgMHgzMjAwLCAweDQ3MDAsIDB4NDcwMSwKKwkweDQ3MDIsIDB4NDcwMywgMHg0NzA0LCAweDQ3MDUsCisJMHg0NzA2LCAweDQ3MDcKK307CisKK2NvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfaXFpbWJfbGFkZGVyXzIwW10gPSB7CisJMHgwMjAwLCAweDAzMDAsIDB4MDYwMCwgMHgwOTAwLAorCTB4MGQwMCwgMHgxMTAwLCAweDE5MDAsIDB4MjQwMCwKKwkweDMyMDAsIDB4NDYwMCwgMHg2NDAwLCAweDY0MDEsCisJMHg2NDAyLCAweDY0MDMsIDB4NjQwNCwgMHg2NDA1LAorCTB4NjQwNiwgMHg2NDA3Cit9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX3N0YXJ0Y29lZnNfbnBoeXJldjNbQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGU19SRVYzXSA9IHsgfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9zdGFydGNvZWZzW0I0M19OVEFCX1RYX0lRTE9fQ0FMX1NUQVJUQ09FRlNdID0geyB9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2NtZHNfcmVjYWxfbnBoeXJldjNbXSA9IHsKKwkweDg0MjMsIDB4ODMyMywgMHg4MDczLCAweDgyNTYsCisJMHg4MDQ1LCAweDgyMjMsIDB4OTQyMywgMHg5MzIzLAorCTB4OTA3MywgMHg5MjU2LCAweDkwNDUsIDB4OTIyMworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX3JlY2FsW10gPSB7CisJMHg4MTAxLCAweDgyNTMsIDB4ODA1MywgMHg4MjM0LAorCTB4ODAzNCwgMHg5MTAxLCAweDkyNTMsIDB4OTA1MywKKwkweDkyMzQsIDB4OTAzNAorfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX2Z1bGxjYWxbXSA9IHsKKwkweDgxMjMsIDB4ODI2NCwgMHg4MDg2LCAweDgyNDUsCisJMHg4MDU2LCAweDkxMjMsIDB4OTI2NCwgMHg5MDg2LAorCTB4OTI0NSwgMHg5MDU2Cit9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2NtZHNfZnVsbGNhbF9ucGh5cmV2M1tdID0geworCTB4ODQzNCwgMHg4MzM0LCAweDgwODQsIDB4ODI2NywKKwkweDgwNTYsIDB4ODIzNCwgMHg5NDM0LCAweDkzMzQsCisJMHg5MDg0LCAweDkyNjcsIDB4OTA1NiwgMHg5MjM0Cit9OworCitjb25zdCBzMTYgdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbN11bMTVdID0geworCXsgIC0zNzcsICAgMTM3LCAgLTQwNywgICAyMDgsIC0xNTI3LAorCSAgICA5NTYsICAgIDkzLCAgIDE4NiwgICAgOTMsICAgMjMwLAorCSAgICAtNDQsICAgMjMwLCAgICAyMCwgIC0xOTEsICAgMjAxIH0sCisJeyAgIC03NywgICAgMjAsICAgLTk4LCAgICA0OSwgICAtOTMsCisJICAgICA2MCwgICAgNTYsICAgMTExLCAgICA1NiwgICAgMjYsCisJICAgICAtNSwgICAgMjYsICAgIDM0LCAgIC0zMiwgICAgMzQgfSwKKwl7ICAtMzYwLCAgIDE2NCwgIC0zNzYsICAgMTY0LCAtMTUzMywKKwkgICAgNTc2LCAgIDMwOCwgIC0zMTQsICAgMzA4LCAgIDEyMSwKKwkgICAgLTczLCAgIDEyMSwgICAgOTEsICAgMTI0LCAgICA5MSB9LAorCXsgIC0yOTUsICAgMjAwLCAgLTM2MywgICAxNDIsIC0xMzkxLAorCSAgICA4MjYsICAgMTUxLCAgIDMwMSwgICAxNTEsICAgMTUxLAorCSAgICAzMDEsICAgMTUxLCAgIDYwMiwgIC03NTIsICAgNjAyIH0sCisJeyAgIC05MiwgICAgNTgsICAgLTk2LCAgICA0OSwgIC0xMDQsCisJICAgICA0NCwgICAgMTcsICAgIDM1LCAgICAxNywgICAgMTIsCisJICAgICAyNSwgICAgMTIsICAgIDEzLCAgICAyNywgICAgMTMgfSwKKwl7ICAtMzc1LCAgIDEzNiwgIC0zOTksICAgMjA5LCAtMTQ3OSwKKwkgICAgOTQ5LCAgIDEzMCwgICAyNjAsICAgMTMwLCAgIDIzMCwKKwkgICAgLTQ0LCAgIDIzMCwgICAyMDEsICAtMTkxLCAgIDIwMSB9LAorCXsgMHhlZDksICAweGM4LCAweGU5NSwgIDB4OGUsIDB4YTkxLAorCSAgMHgzM2EsICAweDk3LCAweDEyZCwgIDB4OTcsICAweDk3LAorCSAgMHgxMmQsICAweDk3LCAweDI1YSwgMHhkMTAsIDB4MjVhIH0KK307CisKKy8qIGFkZHIwLCAgYWRkcjEsICBibWFzaywgIHNoaWZ0ICovCitjb25zdCBzdHJ1Y3QgbnBoeV9yZl9jb250cm9sX292ZXJyaWRlX3JldjIgdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MltdID0geworCXsgMHg3OCwgMHg3OCwgMHgwMDM4LCAgMyB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDAyIChmbHMgPT0gMikgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDAwMSwgIDAgfSwgLyogZm9yIGZpZWxkID09IDB4MDAwNCAoZmxzID09IDMpICovCisJeyAweDdBLCAweDdELCAweDAwMDIsICAxIH0sIC8qIGZvciBmaWVsZCA9PSAweDAwMDggKGZscyA9PSA0KSAqLworCXsgMHg3QSwgMHg3RCwgMHgwMDA0LCAgMiB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDEwIChmbHMgPT0gNSkgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDAzMCwgIDQgfSwgLyogZm9yIGZpZWxkID09IDB4MDAyMCAoZmxzID09IDYpICovCisJeyAweDdBLCAweDdELCAweDAwQzAsICA2IH0sIC8qIGZvciBmaWVsZCA9PSAweDAwNDAgKGZscyA9PSA3KSAqLworCXsgMHg3QSwgMHg3RCwgMHgwMTAwLCAgOCB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDgwIChmbHMgPT0gOCkgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDIwMCwgIDkgfSwgLyogZm9yIGZpZWxkID09IDB4MDEwMCAoZmxzID09IDkpICovCisJeyAweDc4LCAweDc4LCAweDAwMDQsICAyIH0sIC8qIGZvciBmaWVsZCA9PSAweDAyMDAgKGZscyA9PSAxMCkgKi8KKwl7IDB4N0IsIDB4N0UsIDB4MDFGRiwgIDAgfSwgLyogZm9yIGZpZWxkID09IDB4MDQwMCAoZmxzID09IDExKSAqLworCXsgMHg3QywgMHg3RiwgMHgwMUZGLCAgMCB9LCAvKiBmb3IgZmllbGQgPT0gMHgwODAwIChmbHMgPT0gMTIpICovCisJeyAweDc4LCAweDc4LCAweDAxMDAsICA4IH0sIC8qIGZvciBmaWVsZCA9PSAweDEwMDAgKGZscyA9PSAxMykgKi8KKwl7IDB4NzgsIDB4NzgsIDB4MDIwMCwgIDkgfSwgLyogZm9yIGZpZWxkID09IDB4MjAwMCAoZmxzID09IDE0KSAqLworCXsgMHg3OCwgMHg3OCwgMHhGMDAwLCAxMiB9ICAvKiBmb3IgZmllbGQgPT0gMHg0MDAwIChmbHMgPT0gMTUpICovCit9OworCisvKiB2YWxfbWFzaywgdmFsX3NoaWZ0LCBlbl9hZGRyMCwgdmFsX2FkZHIwLCBlbl9hZGRyMSwgdmFsX2FkZHIxICovCitjb25zdCBzdHJ1Y3QgbnBoeV9yZl9jb250cm9sX292ZXJyaWRlX3JldjMgdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2M1tdID0geworCXsgMHg4MDAwLCAxNSwgMHhFNSwgMHhGOSwgMHhFNiwgMHhGQiB9LCAvKiBmaWVsZCA9PSAweDAwMDEgKGZscyAxKSAqLworCXsgMHgwMDAxLCAgMCwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDIgKGZscyAyKSAqLworCXsgMHgwMDAyLCAgMSwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDQgKGZscyAzKSAqLworCXsgMHgwMDA0LCAgMiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDggKGZscyA0KSAqLworCXsgMHgwMDE2LCAgNCwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMTAgKGZscyA1KSAqLworCXsgMHgwMDIwLCAgNSwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMjAgKGZscyA2KSAqLworCXsgMHgwMDQwLCAgNiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwNDAgKGZscyA3KSAqLworCXsgMHgwMDgwLCAgNiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwODAgKGZscyA4KSAqLworCXsgMHgwMTAwLCAgNywgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAxMDAgKGZscyA5KSAqLworCXsgMHgwMDA3LCAgMCwgMHhFNywgMHhGOCwgMHhFQywgMHhGQSB9LCAvKiBmaWVsZCA9PSAweDAyMDAgKGZscyAxMCkgKi8KKwl7IDB4MDA3MCwgIDQsIDB4RTcsIDB4RjgsIDB4RUMsIDB4RkEgfSwgLyogZmllbGQgPT0gMHgwNDAwIChmbHMgMTEpICovCisJeyAweEUwMDAsIDEzLCAweEU3LCAweDdBLCAweEVDLCAweDdEIH0sIC8qIGZpZWxkID09IDB4MDgwMCAoZmxzIDEyKSAqLworCXsgMHhGRkZGLCAgMCwgMHhFNywgMHg3QiwgMHhFQywgMHg3RSB9LCAvKiBmaWVsZCA9PSAweDEwMDAgKGZscyAxMykgKi8KKwl7IDB4RkZGRiwgIDAsIDB4RTcsIDB4N0MsIDB4RUMsIDB4N0YgfSwgLyogZmllbGQgPT0gMHgyMDAwIChmbHMgMTQpICovCisJeyAweDAwQzAsICA2LCAweEU3LCAweEY5LCAweEVDLCAweEZCIH0gIC8qIGZpZWxkID09IDB4NDAwMCAoZmxzIDE1KSAqLworfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9udGFiX2FycmF5X3NpemVzKHZvaWQpCiB7CiAjdW5kZWYgY2hlY2sKQEAgLTI0NDIsNiArMjk4MCw3MiBAQAogI3VuZGVmIGNoZWNrCiB9CiAKK3UzMiBiNDNfbnRhYl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCkKK3sKKwl1MzIgdHlwZSwgdmFsdWU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX05UQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTlRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTlRBQl84QklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJdmFsdWUgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8pICYgMHhGRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTlRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTlRBQl8zMkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbnRhYl9yZWFkX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGU7CisJdTggKmRhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXR5cGUgPSBvZmZzZXQgJiBCNDNfTlRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19OVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19OVEFCXzhCSVQ6CisJCQkqZGF0YSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTykgJiAweEZGOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX05UQUJfMTZCSVQ6CisJCQkqKCh1MTYgKilkYXRhKSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTyk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTlRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJKTsKKwkJCSooKHUzMiAqKWRhdGEpIDw8PSAxNjsKKwkJCSooKHUzMiAqKWRhdGEpIHw9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTyk7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJfQorfQorCiB2b2lkIGI0M19udGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQogewogCXUzMiB0eXBlOwpAQCAtMjQ3NCwzICszMDc4LDkxIEBACiAJLyogU29tZSBjb21waWxldGltZSBhc3NlcnRpb25zLi4uICovCiAJYXNzZXJ0X250YWJfYXJyYXlfc2l6ZXMoKTsKIH0KKwordm9pZCBiNDNfbnRhYl93cml0ZV9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSAgdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBjb25zdCB2b2lkICpfZGF0YSkKK3sKKwl1MzIgdHlwZSwgdmFsdWU7CisJY29uc3QgdTggKmRhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXR5cGUgPSBvZmZzZXQgJiBCNDNfTlRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19OVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19OVEFCXzhCSVQ6CisJCQl2YWx1ZSA9ICpkYXRhOworCQkJZGF0YSsrOworCQkJQjQzX1dBUk5fT04odmFsdWUgJiB+MHhGRik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCB2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTlRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX05UQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFISSwgdmFsdWUgPj4gMTYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJdmFsdWUgJiAweEZGRkYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJfQorCX0KK30KKworI2RlZmluZSBudGFiX3VwbG9hZChkZXYsIG9mZnNldCwgZGF0YSkgZG8geyBcCisJCXVuc2lnbmVkIGludCBpOwkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IChvZmZzZXQjI19TSVpFKTsgaSsrKQkJCVwKKwkJCWI0M19udGFiX3dyaXRlKGRldiwgKG9mZnNldCkgKyBpLCAoZGF0YSlbaV0pOwlcCisJfSB3aGlsZSAoMCkKKwordm9pZCBiNDNfbnBoeV9yZXYwXzFfMl90YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLyogU3RhdGljIHRhYmxlcyAqLworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfRlJBTUVTVFJVQ1QsIGI0M19udGFiX2ZyYW1lc3RydWN0KTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0ZSQU1FTFQsIGI0M19udGFiX2ZyYW1lbG9va3VwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RNQVAsIGI0M19udGFiX3RtYXApOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERUUk4sIGI0M19udGFiX3RkdHJuKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0lOVExFVkVMLCBiNDNfbnRhYl9pbnRsZXZlbCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9QSUxPVCwgYjQzX250YWJfcGlsb3QpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1RMVCwgYjQzX250YWJfcGlsb3RsdCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREkyMEEwLCBiNDNfbnRhYl90ZGkyMGEwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RESTIwQTEsIGI0M19udGFiX3RkaTIwYTEpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJNDBBMCwgYjQzX250YWJfdGRpNDBhMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREk0MEExLCBiNDNfbnRhYl90ZGk0MGExKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0JESSwgYjQzX250YWJfYmRpKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0NIQU5FU1QsIGI0M19udGFiX2NoYW5uZWxlc3QpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfTUNTLCBiNDNfbnRhYl9tY3MpOworCisJLyogVm9sYXRpbGUgdGFibGVzICovCisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9OT0lTRVZBUjEwLCBiNDNfbnRhYl9ub2lzZXZhcjEwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX05PSVNFVkFSMTEsIGI0M19udGFiX25vaXNldmFyMTEpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfRVNUUExULCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0VTVFBMVCwgYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9JUUxULCBiNDNfbnRhYl9pcWx0MCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9JUUxULCBiNDNfbnRhYl9pcWx0MSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MSk7Cit9CisKK3ZvaWQgYjQzX25waHlfcmV2M3BsdXNfdGFibGVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFN0YXRpYyB0YWJsZXMgKi8KKwkvKiBUT0RPICovCisKKwkvKiBWb2xhdGlsZSB0YWJsZXMgKi8KKwkvKiBUT0RPICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCmluZGV4IDRkNDk4YjAuLjljMWM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCkBAIC00Niw2ICs0NiwyNyBAQAogCiBzdHJ1Y3QgYjQzX3dsZGV2OwogCitzdHJ1Y3QgbnBoeV90eGlxY2FsX2xhZGRlciB7CisJdTggcGVyY2VudDsKKwl1OCBnX2VudjsKK307CisKK3N0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MiB7CisJdTggYWRkcjA7CisJdTggYWRkcjE7CisJdTE2IGJtYXNrOworCXU4IHNoaWZ0OworfTsKKworc3RydWN0IG5waHlfcmZfY29udHJvbF9vdmVycmlkZV9yZXYzIHsKKwl1MTYgdmFsX21hc2s7CisJdTggdmFsX3NoaWZ0OworCXU4IGVuX2FkZHIwOworCXU4IHZhbF9hZGRyMDsKKwl1OCBlbl9hZGRyMTsKKwl1OCB2YWxfYWRkcjE7Cit9OworCiAvKiBVcGxvYWQgdGhlIGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWUgdGFibGUuCiAgKiBJZiAiZ2h6NSIgaXMgdHJ1ZSwgd2UgdXBsb2FkIHRoZSA1R2h6IHRhYmxlLiBPdGhlcndpc2UgdGhlIDIuNEdoegogICogdGFibGUgaXMgdXBsb2FkZWQuIElmICJpZ25vcmVfdXBsb2FkZmxhZyIgaXMgdHJ1ZSwgd2UgdXBsb2FkIGFueSB2YWx1ZQpAQCAtMTI2LDM0ICsxNDcsNTcgQEAKICNkZWZpbmUgQjQzX05UQUJfQzFfTE9GRUVEVEgJCUI0M19OVEFCMTYoMHgxQiwgMHgxQzApIC8qIExvY2FsIE9zY2lsbGF0b3IgRmVlZCBUaHJvdWdoIExvb2t1cCBUYWJsZSBDb3JlIDEgKi8KICNkZWZpbmUgQjQzX05UQUJfQzFfTE9GRUVEVEhfU0laRQkxMjgKIAorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9MT0ZUX0xBRERFUl80MF9TSVpFCTE4CisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0xPRlRfTEFEREVSXzIwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfSVFJTUJfTEFEREVSXzQwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfSVFJTUJfTEFEREVSXzIwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGU19SRVYzCQkxMQorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9TVEFSVENPRUZTCQkJOQorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX1JFQ0FMX1JFVjMJCTEyCisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfUkVDQUwJCQkxMAorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX0ZVTExDQUwJCTEwCisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfRlVMTENBTF9SRVYzCQkxMgorCit1MzIgYjQzX250YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpOwordm9pZCBiNDNfbnRhYl9yZWFkX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgdm9pZCAqX2RhdGEpOwogdm9pZCBiNDNfbnRhYl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7Cit2b2lkIGI0M19udGFiX3dyaXRlX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGNvbnN0IHZvaWQgKl9kYXRhKTsKIAotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMFtdOwotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9iZGlbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfY2hhbm5lbGVzdFtdOwotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDBbXTsKLWV4dGVybiBjb25zdCB1OCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQxW107Ci1leHRlcm4gY29uc3QgdTggYjQzX250YWJfZnJhbWVsb29rdXBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZ2FpbmN0bDBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZ2FpbmN0bDFbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaW50bGV2ZWxbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaXFsdDBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaXFsdDFbXTsKLWV4dGVybiBjb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MFtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9sb2Z0bHQxW107Ci1leHRlcm4gY29uc3QgdTggYjQzX250YWJfbWNzW107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMVtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9waWxvdFtdOwotZXh0ZXJuIGNvbnN0IHUzMiBiNDNfbnRhYl9waWxvdGx0W107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdGRpMjBhMVtdOwotZXh0ZXJuIGNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGEwW107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTFbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdGR0cm5bXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdG1hcFtdOwordm9pZCBiNDNfbnBoeV9yZXYwXzFfMl90YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfbnBoeV9yZXYzcGx1c190YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2MF8xXzJbXTsKK2V4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYzcGx1c18yZ2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2M181Z2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2NF81Z2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2NXBsdXNfNWdoeltdOworCitleHRlcm4gY29uc3QgdTMyIHR4cHdyY3RybF90eF9nYWluX2lwYVtdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NVtdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NltdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfNWdbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX2lxY2FsX2dhaW5wYXJhbXNbMl1bOV1bOF07CitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2xvW107CitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2lxW107CitleHRlcm4gY29uc3QgdTE2IGxvc2NhbGVbXTsKKworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfbG9mdF9sYWRkZXJfNDBbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2xvZnRfbGFkZGVyXzIwW107CitleHRlcm4gY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfNDBbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2lxaW1iX2xhZGRlcl8yMFtdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2Vmc19ucGh5cmV2M1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2Vmc1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbF9ucGh5cmV2M1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbFtdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19mdWxsY2FsW107CitleHRlcm4gY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX2Z1bGxjYWxfbnBoeXJldjNbXTsKK2V4dGVybiBjb25zdCBzMTYgdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbN11bMTVdOworCitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfcmZfY29udHJvbF9vdmVycmlkZV9yZXYyCisJdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MworCXRibF9yZl9jb250cm9sX292ZXJyaWRlX3JldjNbXTsKIAogI2VuZGlmIC8qIEI0M19UQUJMRVNfTlBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCmluZGV4IDBhODZiZGYuLjhiOTM4N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKQEAgLTE0MTEsNyArMTQxMSw2IEBACiAJCWI0M2xlZ2FjeWVycihkZXYtPndsLCAiRE1BIHR4IG1hcHBpbmcgZmFpbHVyZVxuIik7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcmluZy0+bnJfdHhfcGFja2V0cysrOwogCWlmICgoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCkBAIC0xNTI3LDI1ICsxNTI2LDYgQEAKIAlzcGluX3VubG9jaygmcmluZy0+bG9jayk7CiB9CiAKLXZvaWQgYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0JY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7Ci0Jc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKLQkJcmluZyA9IHByaW9yaXR5X3RvX3R4cmluZyhkZXYsIGkpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKLQkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBkbWFfcngoc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nLAogCQkgICBpbnQgKnNsb3QpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmgKaW5kZXggMmYxODYwMC4uZjk2ODEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuaApAQCAtMjQzLDggKzI0Myw2IEBACiAJaW50IHVzZWRfc2xvdHM7CiAJLyogQ3VycmVudGx5IHVzZWQgc2xvdCBpbiB0aGUgcmluZy4gKi8KIAlpbnQgY3VycmVudF9zbG90OwotCS8qIFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQuIFN0YXRpc3RpY3Mgb25seS4gKi8KLQl1bnNpZ25lZCBpbnQgbnJfdHhfcGFja2V0czsKIAkvKiBGcmFtZW9mZnNldCBpbiBvY3RldHMuICovCiAJdTMyIGZyYW1lb2Zmc2V0OwogCS8qIERlc2NyaXB0b3IgYnVmZmVyIHNpemUuICovCkBAIC0yOTIsOSArMjkwLDYgQEAKIHZvaWQgYjQzbGVnYWN5X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiB2b2lkIGI0M2xlZ2FjeV9kbWFfdHhfcmVzdW1lKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiAKLXZvaWQgYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKLQogaW50IGI0M2xlZ2FjeV9kbWFfdHgoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNsZWdhY3lfZG1hX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCkBAIC0zMTUsMTEgKzMxMCw2IEBACiB7CiB9CiBzdGF0aWMgaW5saW5lCi12b2lkIGI0M2xlZ2FjeV9kbWFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLX0KLXN0YXRpYyBpbmxpbmUKIGludCBiNDNsZWdhY3lfZG1hX3R4KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmgKaW5kZXggODIxNjdhOS4uOWZmNjc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5oCkBAIC00NSw3ICs0NSw3IEBACiB2b2lkIGI0M2xlZ2FjeV9sZWRzX2luaXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIHZvaWQgYjQzbGVnYWN5X2xlZHNfZXhpdChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpOwogCi0jZWxzZSAvKiBDT05GSUdfQjQzRUdBQ1lfTEVEUyAqLworI2Vsc2UgLyogQ09ORklHX0I0M0xFR0FDWV9MRURTICovCiAvKiBMRUQgc3VwcG9ydCBkaXNhYmxlZCAqLwogCiBzdHJ1Y3QgYjQzbGVnYWN5X2xlZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCA0YTkwNWI2Li4xZDA3MGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTYxLDYgKzYxLDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0ZJUk1XQVJFKEI0M2xlZ2FjeV9TVVBQT1JURURfRklSTVdBUkVfSUQpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDNsZWdhY3kvdWNvZGUyLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImI0M2xlZ2FjeS91Y29kZTQuZnciKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9ETUEpICYmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9QSU8pCiBzdGF0aWMgaW50IG1vZHBhcmFtX3BpbzsKQEAgLTI0NDQsMjkgKzI0NDYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCA9IGh3X3RvX2I0M2xlZ2FjeV93bChodyk7Ci0Jc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0KLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCWlmIChsaWtlbHkoYjQzbGVnYWN5X3N0YXR1cyhkZXYpID49IEI0M2xlZ2FjeV9TVEFUX1NUQVJURUQpKSB7Ci0JCWlmIChiNDNsZWdhY3lfdXNpbmdfcGlvKGRldikpCi0JCQliNDNsZWdhY3lfcGlvX2dldF90eF9zdGF0cyhkZXYsIHN0YXRzKTsKLQkJZWxzZQotCQkJYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoZGV2LCBzdGF0cyk7Ci0JCWVyciA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgYjQzbGVnYWN5X29wX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKQEAgLTI5MjEsNiArMjkwMCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAkvKiBXZSBhcmUgcmVhZHkgdG8gcnVuLiAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7CiAJYjQzbGVnYWN5X3NldF9zdGF0dXMoZGV2LCBCNDNsZWdhY3lfU1RBVF9TVEFSVEVEKTsKIAogCS8qIFN0YXJ0IGRhdGEgZmxvdyAoVFgvUlgpICovCkBAIC0zMzQxLDYgKzMzMjEsNyBAQAogCWI0M2xlZ2FjeV9zZWN1cml0eV9pbml0KGRldik7CiAJYjQzbGVnYWN5X3JuZ19pbml0KHdsKTsKIAorCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7CiAJYjQzbGVnYWN5X3NldF9zdGF0dXMoZGV2LCBCNDNsZWdhY3lfU1RBVF9JTklUSUFMSVpFRCk7CiAKIAliNDNsZWdhY3lfbGVkc19pbml0KGRldik7CkBAIC0zMzYxLDcgKzMzNDIsNyBAQAogfQogCiBzdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2woaHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldjsKQEAgLTMzNzAsMjMgKzMzNTEsMjMgQEAKIAogCS8qIFRPRE86IGFsbG93IFdEUy9BUCBkZXZpY2VzIHRvIGNvZXhpc3QgKi8KIAotCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJaWYgKHdsLT5vcGVyYXRpbmcpCiAJCWdvdG8gb3V0X211dGV4X3VubG9jazsKIAotCWI0M2xlZ2FjeWRiZyh3bCwgIkFkZGluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJYjQzbGVnYWN5ZGJnKHdsLCAiQWRkaW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCXdsLT5vcGVyYXRpbmcgPSAxOwotCXdsLT52aWYgPSBjb25mLT52aWY7Ci0Jd2wtPmlmX3R5cGUgPSBjb25mLT50eXBlOwotCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJd2wtPnZpZiA9IHZpZjsKKwl3bC0+aWZfdHlwZSA9IHZpZi0+dHlwZTsKKwltZW1jcHkod2wtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAliNDNsZWdhY3lfYWRqdXN0X29wbW9kZShkZXYpOwpAQCAtMzQwMywxOCArMzM4NCwxOCBAQAogfQogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKIAlzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWI0M2xlZ2FjeWRiZyh3bCwgIlJlbW92aW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNsZWdhY3lkYmcod2wsICJSZW1vdmluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgdmlmLT50eXBlKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAlCNDNsZWdhY3lfV0FSTl9PTighd2wtPm9wZXJhdGluZyk7Ci0JQjQzbGVnYWN5X1dBUk5fT04od2wtPnZpZiAhPSBjb25mLT52aWYpOworCUI0M2xlZ2FjeV9XQVJOX09OKHdsLT52aWYgIT0gdmlmKTsKIAl3bC0+dmlmID0gTlVMTDsKIAogCXdsLT5vcGVyYXRpbmcgPSAwOwpAQCAtMzUwOSw3ICszNDkwLDYgQEAKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGI0M2xlZ2FjeV9vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25maWd1cmVfZmlsdGVyCT0gYjQzbGVnYWN5X29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBiNDNsZWdhY3lfb3BfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYjQzbGVnYWN5X29wX2dldF90eF9zdGF0cywKIAkuc3RhcnQJCQk9IGI0M2xlZ2FjeV9vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzbGVnYWN5X29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzbGVnYWN5X29wX2JlYWNvbl9zZXRfdGltLApAQCAtMzk2MCw3ICszOTQwLDcgQEAKIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X3ByaW50X2RyaXZlcmluZm8odm9pZCkKIHsKLQljb25zdCBjaGFyICpmZWF0X3BjaSA9ICIiLCAqZmVhdF9sZWRzID0gIiIsICpmZWF0X3Jma2lsbCA9ICIiLAorCWNvbnN0IGNoYXIgKmZlYXRfcGNpID0gIiIsICpmZWF0X2xlZHMgPSAiIiwKIAkJICAgKmZlYXRfcGlvID0gIiIsICpmZWF0X2RtYSA9ICIiOwogCiAjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QQ0lfQVVUT1NFTEVDVApAQCAtMzk2OSw5ICszOTQ5LDYgQEAKICNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX0xFRFMKIAlmZWF0X2xlZHMgPSAiTCI7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX1JGS0lMTAotCWZlYXRfcmZraWxsID0gIlIiOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QSU8KIAlmZWF0X3BpbyA9ICJJIjsKICNlbmRpZgpAQCAtMzk3OSw5ICszOTU2LDkgQEAKIAlmZWF0X2RtYSA9ICJEIjsKICNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIkJyb2FkY29tIDQzeHgtbGVnYWN5IGRyaXZlciBsb2FkZWQgIgotCSAgICAgICAiWyBGZWF0dXJlczogJXMlcyVzJXMlcywgRmlybXdhcmUtSUQ6ICIKKwkgICAgICAgIlsgRmVhdHVyZXM6ICVzJXMlcyVzLCBGaXJtd2FyZS1JRDogIgogCSAgICAgICBCNDNsZWdhY3lfU1VQUE9SVEVEX0ZJUk1XQVJFX0lEICIgXVxuIiwKLQkgICAgICAgZmVhdF9wY2ksIGZlYXRfbGVkcywgZmVhdF9yZmtpbGwsIGZlYXRfcGlvLCBmZWF0X2RtYSk7CisJICAgICAgIGZlYXRfcGNpLCBmZWF0X2xlZHMsIGZlYXRfcGlvLCBmZWF0X2RtYSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGI0M2xlZ2FjeV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMKaW5kZXggNTE4NjZjOS4uMDE3YzBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uYwpAQCAtNDc3LDcgKzQ3Nyw2IEBACiAKIAlsaXN0X21vdmVfdGFpbCgmcGFja2V0LT5saXN0LCAmcXVldWUtPnR4cXVldWUpOwogCXF1ZXVlLT5ucl90eGZyZWUtLTsKLQlxdWV1ZS0+bnJfdHhfcGFja2V0cysrOwogCUI0M2xlZ2FjeV9XQVJOX09OKHF1ZXVlLT5ucl90eGZyZWUgPj0gQjQzbGVnYWN5X1BJT19NQVhUWFBBQ0tFVFMpOwogCiAJdGFza2xldF9zY2hlZHVsZSgmcXVldWUtPnR4dGFzayk7CkBAIC01NDYsMTggKzU0NSw2IEBACiAJCXRhc2tsZXRfc2NoZWR1bGUoJnF1ZXVlLT50eHRhc2spOwogfQogCi12b2lkIGI0M2xlZ2FjeV9waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYjQzbGVnYWN5X3BpbyAqcGlvID0gJmRldi0+cGlvOwotCXN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlOwotCi0JcXVldWUgPSBwaW8tPnF1ZXVlMTsKLQlzdGF0c1swXS5sZW4gPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUyAtIHF1ZXVlLT5ucl90eGZyZWU7Ci0Jc3RhdHNbMF0ubGltaXQgPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUzsKLQlzdGF0c1swXS5jb3VudCA9IHF1ZXVlLT5ucl90eF9wYWNrZXRzOwotfQotCiBzdGF0aWMgdm9pZCBwaW9fcnhfZXJyb3Ioc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUsCiAJCQkgaW50IGNsZWFyX2J1ZmZlcnMsCiAJCQkgY29uc3QgY2hhciAqZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmgKaW5kZXggNDY0ZmVjMC4uOGU2NzczZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uaApAQCAtNzQsMTAgKzc0LDYgQEAKIAkgKiBwb3N0ZWQgdG8gdGhlIGRldmljZS4gV2UgYXJlIHdhaXRpbmcgZm9yIHRoZSB0eHN0YXR1cy4KIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHR4cnVubmluZzsKLQkvKiBUb3RhbCBudW1iZXIgb3IgcGFja2V0cyBzZW50LgotCSAqIChUaGlzIGNvdW50ZXIgY2FuIG9idmlvdXNseSB3cmFwKS4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgbnJfdHhfcGFja2V0czsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHh0YXNrOwogCXN0cnVjdCBiNDNsZWdhY3lfcGlvX3R4cGFja2V0CiAJCQkgdHhfcGFja2V0c19jYWNoZVtCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUU107CkBAIC0xMDYsOCArMTAyLDYgQEAKIAkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGI0M2xlZ2FjeV9waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkgY29uc3Qgc3RydWN0IGI0M2xlZ2FjeV90eHN0YXR1cyAqc3RhdHVzKTsKLXZvaWQgYjQzbGVnYWN5X3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBiNDNsZWdhY3lfcGlvX3J4KHN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlKTsKIAogLyogU3VzcGVuZCBUWCBxdWV1ZSBpbiBoYXJkd2FyZS4gKi8KQEAgLTE0MCwxMSArMTM0LDYgQEAKIHsKIH0KIHN0YXRpYyBpbmxpbmUKLXZvaWQgYjQzbGVnYWN5X3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci19Ci1zdGF0aWMgaW5saW5lCiB2b2lkIGI0M2xlZ2FjeV9waW9fcngoc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKaW5kZXggYzk2NDBhMy4uZDE5NzQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwpAQCAtNzk0LDEzICs3OTQsNiBAQAogCVBDTUNJQV9NRkNfREVWSUNFX1BST0RfSUQxMigwLCAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIsCiAJCQkJICAgIDB4N2E5NTRiZDksIDB4NzRiZTAwYzYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKLQkJIkludGVyc2lsIiwgIlBSSVNNIDJfNSBQQ01DSUEgQURBUFRFUiIsCSJJU0wzNzMwMFAiLAotCQkweDRiODAxYTE3LCAweDYzNDVhMGJmLCAweGM5MDQ5YTM5KSwKLQkvKiBELUxpbmsgRFdMLTY1MCBSZXYuIFAxOyBtYW5maWQgMHgwMDBiLCAweDcxMTAgKi8KLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoCi0JCSJELUxpbmsiLCAiRFdMLTY1MCBXaXJlbGVzcyBQQyBDYXJkIFJldlAiLCAiSVNMMzcxMDFQLTEwIiwKLQkJMHgxYTQyNGExYywgMHg2ZWE1NzYzMiwgMHhkZDk3YTI2YiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAogCQkiQWRkdHJvbiIsICJBV1AtMTAwIFdpcmVsZXNzIFBDTUNJQSIsICJWZXJzaW9uIDAxLjAyIiwKIAkJMHhlNmVjNTJjZSwgMHgwODY0OWFmMiwgMHg0Yjc0YmFhMCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKApAQCAtODM0LDE0ICs4MjcsMTIgQEAKIAkJIlZlci4gMS4wMCIsCiAJCTB4NWNkMDE3MDUsIDB4NDI3MTY2MGYsIDB4OWQwOGVlMTIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKLQkJImNvcmVnYSIsICJXTCBQQ0NMLTExIiwgIklTTDM3MzAwUCIsCi0JCTB4YTIxNTAxYSwgMHg1OTg2ODkyNiwgMHhjOTA0OWEzOSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAotCQkiVGhlIExpbmtzeXMgR3JvdXAsIEluYy4iLCAiV2lyZWxlc3MgTmV0d29yayBDRiBDYXJkIiwgIklTTDM3MzAwUCIsCi0JCTB4YTVmNDcyYzIsIDB4OWMwNTU5OGQsIDB4YzkwNDlhMzkpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKIAkJIldpcmVsZXNzIExBTiIgLCAiMTFNYnBzIFBDIENhcmQiLCAiVmVyc2lvbiAwMS4wMiIsCiAJCTB4NGI4ODcwZmYsIDB4NzBlOTQ2ZDEsIDB4NGI3NGJhYTApLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIkhGQTM4NjMiLCAweDM1NWNiMDkyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzEwMFAiLCAweDYzMGQ1MmIyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzEwMVAtMTAiLCAweGRkOTdhMjZiKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzMwMFAiLCAweGM5MDQ5YTM5KSwKIAlQQ01DSUFfREVWSUNFX05VTEwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgaG9zdGFwX2NzX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggZmY5YjVjOC4uZDcwNzMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMjYxOCw2ICsyNjE4LDE1IEBACiAJaW50IGV2ZW50cyA9IDA7CiAJdTE2IGV2OwogCisJLyogRGV0ZWN0IGVhcmx5IGludGVycnVwdCBiZWZvcmUgZHJpdmVyIGlzIGZ1bGx5IGNvbmZpZ3VlZCAqLworCWlmICghZGV2LT5iYXNlX2FkZHIpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIGJ1dCBkZXYgbm90IGNvbmZpZ3VyZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwppbmRleCA4ZmRkNDFmLi40ZDk3YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKQEAgLTM5LDcgKzM5LDcgQEAKIC8qIEZJWDogZG8gd2UgbmVlZCBtYi93bWIvcm1iIHdpdGggbWVtb3J5IG9wZXJhdGlvbnM/ICovCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByaXNtMl9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHByaXNtMl9wY2lfaWRfdGFibGUpID0gewogCS8qIEludGVyc2lsIFByaXNtMyBJU0wzODcyIDExTWIvcyBXTEFOIENvbnRyb2xsZXIgKi8KIAl7IDB4MTI2MCwgMHgzODcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJLyogSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3NCAxMU1iL3MgV0xBTiBDb250cm9sbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwppbmRleCAwZTVkNTEwLi5mYzA0Y2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2RlZmluZSBQTFhERVYodmVuZG9yLGRldixzdHIpIHsgdmVuZG9yLCBkZXYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJpc20yX3BseF9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocHJpc20yX3BseF9pZF90YWJsZSkgPSB7CiAJUExYREVWKDB4MTBiNywgMHg3NzcwLCAiM0NvbSBBaXJDb25uZWN0IFBDSSA3NzdBIiksCiAJUExYREVWKDB4MTExYSwgMHgxMDIzLCAiU2llbWVucyBTcGVlZFN0cmVhbSBTUzEwMjMiKSwKIAlQTFhERVYoMHgxMjZjLCAweDgwMzAsICJOb3J0ZWwgZW1vYmlsaXR5IiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDU2YWZjZjAuLjliNzJjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC02NTg1LDcgKzY1ODUsNyBAQAogCiAjZGVmaW5lIElQVzIxMDBfREVWX0lEKHgpIHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIHggfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXB3MjEwMF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlwdzIxMDBfcGNpX2lkX3RhYmxlKSA9IHsKIAlJUFcyMTAwX0RFVl9JRCgweDI1MjApLAkvKiBJTiAyMTAwQSBtUENJIDNBICovCiAJSVBXMjEwMF9ERVZfSUQoMHgyNTIxKSwJLyogSU4gMjEwMEEgbVBDSSAzQiAqLwogCUlQVzIxMDBfREVWX0lEKDB4MjUyNCksCS8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMDlkZGQzZS4uNjNjMmE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTExNTI0LDcgKzExNTI0LDcgQEAKIH0KIAogLyogUENJIGRyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FyZF9pZHMpID0gewogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzAxLCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIDB4MjcwMiwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3MTEsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCmluZGV4IGIxNmIwNmMuLmRjOGVkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKQEAgLTEsMTQgKzEsOCBAQAogY29uZmlnIElXTFdJRkkKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMQogCXNlbGVjdCBGV19MT0FERVIKIAotY29uZmlnIElXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTFdJRkkKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bGFnbiBkcml2ZXIuCi0KIGNvbmZpZyBJV0xXSUZJX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKIAlkZXBlbmRzIG9uIElXTFdJRkkKQEAgLTEyMCw5ICsxMTQsMyBAQAogCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLAogCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uICBUaGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpd2wzOTQ1LgotCi1jb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bDM5NDUgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggN2Y4MjA0NC4uNGUzNzhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0zLDcgKzMsNiBAQAogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vIGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0RFQlVHRlMpICs9IGl3bC1kZWJ1Z2ZzLm8KLWl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORykgKz0gaXdsLWRldnRyYWNlLm8KIAogQ0ZMQUdTX2l3bC1kZXZ0cmFjZS5vIDo9IC1JJChzcmMpCkBAIC0yMCwzICsxOSw1IEBACiAjIDM5NDUKIG9iai0kKENPTkZJR19JV0wzOTQ1KQkrPSBpd2wzOTQ1Lm8KIGl3bDM5NDUtb2JqcwkJOj0gaXdsMzk0NS1iYXNlLm8gaXdsLTM5NDUubyBpd2wtMzk0NS1ycy5vIGl3bC0zOTQ1LWxlZC5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwppbmRleCA4NDE0MTc4Li4zYmYyZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA4LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC04OSw4ICs4OSw3OCBAQAogCQkJCX5BUE1HX1NWUl9WT0xUQUdFX0NPTkZJR19CSVRfTVNLKTsKIH0KIAorc3RhdGljIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIGl3bDEwMDBfc2Vuc2l0aXZpdHkgPSB7CisJLm1pbl9ucmdfY2NrID0gOTUsCisJLm1heF9ucmdfY2NrID0gMCwgLyogbm90IHVzZWQsIHNldCB0byAwICovCisJLmF1dG9fY29ycl9taW5fb2ZkbSA9IDkwLAorCS5hdXRvX2NvcnJfbWluX29mZG1fbXJjID0gMTcwLAorCS5hdXRvX2NvcnJfbWluX29mZG1feDEgPSAxMjAsCisJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEgPSAyNDAsCisKKwkuYXV0b19jb3JyX21heF9vZmRtID0gMTIwLAorCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjID0gMjEwLAorCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxNTUsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyOTAsCisKKwkuYXV0b19jb3JyX21pbl9jY2sgPSAxMjUsCisJLmF1dG9fY29ycl9tYXhfY2NrID0gMjAwLAorCS5hdXRvX2NvcnJfbWluX2Nja19tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9tYXhfY2NrX21yYyA9IDQwMCwKKwkubnJnX3RoX2NjayA9IDk1LAorCS5ucmdfdGhfb2ZkbSA9IDk1LAorCisJLmJhcmtlcl9jb3JyX3RoX21pbiA9IDE5MCwKKwkuYmFya2VyX2NvcnJfdGhfbWluX21yYyA9IDM5MCwKKwkubnJnX3RoX2NjYSA9IDYyLAorfTsKKworc3RhdGljIGludCBpd2wxMDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCisJICAgIHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8PSBJV0w1MF9OVU1fUVVFVUVTKQorCQlwcml2LT5jZmctPm51bV9vZl9xdWV1ZXMgPQorCQkJcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCisJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5udW1fb2ZfcXVldWVzOworCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CisJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQorCQkJcHJpdi0+Y2ZnLT5udW1fb2ZfcXVldWVzICoKKwkJCXNpemVvZihzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOworCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7CisJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOworCisJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNTBfUlRDX0lOU1RfU0laRTsKKworCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOworCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKKwkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKKwlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOworCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7CisJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfdHhfYW50OworCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3J4X2FudDsKKworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY3Rfa2lsbCkKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcF9vcHMuc2V0X2N0X2tpbGwocHJpdik7CisKKwkvKiBTZXQgaW5pdGlhbCBzZW5zaXRpdml0eSBwYXJhbWV0ZXJzICovCisJLyogU2V0IGluaXRpYWwgY2FsaWJyYXRpb24gc2V0ICovCisJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsMTAwMF9zZW5zaXRpdml0eTsKKwlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8CisJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wxMDAwX2xpYiA9IHsKLQkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDEwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAogCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLApAQCAtMTA1LDYgKzE3NSw4IEBACiAJLmxvYWRfdWNvZGUgPSBpd2w1MDAwX2xvYWRfdWNvZGUsCiAJLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCiAJLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCisJLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAorCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCiAJLmluaXRfYWxpdmVfc3RhcnQgPSBpd2w1MDAwX2luaXRfYWxpdmVfc3RhcnQsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDUwMDBfYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsNTAwMF9zZW5kX3R4X3Bvd2VyLApAQCAtMTM4LDkgKzIxMCwxMCBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w1MDAwX3RlbXBlcmF0dXJlLAogCQkuc2V0X2N0X2tpbGwgPSBpd2wxMDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsX2FkZF9iY2FzdF9zdGF0aW9uLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsMTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTczLDcgKzI0Niw4IEBACiAJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfRVhUX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ19jZmcgPSB7CkBAIC0yMDAsNiArMjc0LDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0VYVF9MT05HX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0wxMDAwX01PRFVMRV9GSVJNV0FSRShJV0wxMDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaAppbmRleCAwOGNlMjU5Li4wNDJmNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDZmZDEwZDQuLjNhODc2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwppbmRleCBhODcxZDA5Li5hYmUyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKaW5kZXggNWExMDMzYy4uY2U5OTBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwppbmRleCBkNGI0OTg4Li40NzkwOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCAyMzQ4OTFkOC4uMzAzY2M4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00NSw4ICs0NSw4IEBACiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgotI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC1sZWQuaCIKICNpbmNsdWRlICJpd2wtMzk0NS1sZWQuaCIKIApAQCAtMTk1MSwxMSArMTk1MSw3IEBACiAJfQogCiAJLyogQWRkIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzbyB3ZSBjYW4gc2VuZCBicm9hZGNhc3QgZnJhbWVzICovCi0JaWYgKGl3bF9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgZmFsc2UsIENNRF9TWU5DLCBOVUxMKSA9PQotCSAgICBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCXByaXYtPmNmZy0+b3BzLT5saWItPmFkZF9iY2FzdF9zdGF0aW9uKHByaXYpOwogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCkBAIC0yNDc0LDExICsyNDcwLDkgQEAKIAltZW1zZXQoKHZvaWQgKikmcHJpdi0+aHdfcGFyYW1zLCAwLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9od19wYXJhbXMpKTsKIAotCXByaXYtPnNoYXJlZF92aXJ0ID0KLQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCi0JCQkJICZwcml2LT5zaGFyZWRfcGh5cyk7Ci0KKwlwcml2LT5zaGFyZWRfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCisJCQkJCSAgICAgICAmcHJpdi0+c2hhcmVkX3BoeXMsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+c2hhcmVkX3ZpcnQpIHsKIAkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTI3OTYsNiArMjc5MCw3IEBACiAJLnBvc3RfYXNzb2NpYXRlID0gaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZSwKIAkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCiAJLmNvbmZpZ19hcCA9IGl3bDM5NDVfY29uZmlnX2FwLAorCS5hZGRfYmNhc3Rfc3RhdGlvbiA9IGl3bDM5NDVfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2wzOTQ1X2hjbWRfdXRpbHMgPSB7CkBAIC0yODA0LDcgKzI3OTksNyBAQAogCS5ydHNfdHhfY21kX2ZsYWcgPSBpd2xjb3JlX3J0c190eF9jbWRfZmxhZywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2wzOTQ1X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wzOTQ1X29wcyA9IHsKIAkudWNvZGUgPSAmaXdsMzk0NV91Y29kZSwKIAkubGliID0gJml3bDM5NDVfbGliLAogCS5oY21kID0gJml3bDM5NDVfaGNtZCwKQEAgLTI4MzAsNiArMjgyNSw3IEBACiAJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNjQsCiAJLmJyb2tlbl9wb3dlcnNhdmUgPSB0cnVlLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CkBAIC0yODQ3LDkgKzI4NDMsMTAgQEAKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA2NCwKIAkuYnJva2VuX3Bvd2Vyc2F2ZSA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAogfTsKIAotc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXdsMzk0NV9od19jYXJkX2lkcykgPSB7CiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIyMiwgMHgxMDA1LCBpd2wzOTQ1X2JnX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMjIsIDB4MTAzNCwgaXdsMzk0NV9iZ19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjIyLCAweDEwNDQsIGl3bDM5NDVfYmdfY2ZnKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKaW5kZXggNTMxZmExMi4uNDUyZGZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCi1leHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXTsKIAogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgpAQCAtMTcxLDI0ICsxNzEsNiBAQAogCiAjZGVmaW5lIFNDQU5fSU5URVJWQUwgMTAwCiAKLSNkZWZpbmUgU1RBVFVTX0hDTURfQUNUSVZFCTAJLyogaG9zdCBjb21tYW5kIGluIHByb2dyZXNzICovCi0jZGVmaW5lIFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFCTEJLyogc3luYyBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgU1RBVFVTX0lOVF9FTkFCTEVECTIKLSNkZWZpbmUgU1RBVFVTX1JGX0tJTExfSFcJMwotI2RlZmluZSBTVEFUVVNfSU5JVAkJNQotI2RlZmluZSBTVEFUVVNfQUxJVkUJCTYKLSNkZWZpbmUgU1RBVFVTX1JFQURZCQk3Ci0jZGVmaW5lIFNUQVRVU19URU1QRVJBVFVSRQk4Ci0jZGVmaW5lIFNUQVRVU19HRU9fQ09ORklHVVJFRAk5Ci0jZGVmaW5lIFNUQVRVU19FWElUX1BFTkRJTkcJMTAKLSNkZWZpbmUgU1RBVFVTX1NUQVRJU1RJQ1MJMTIKLSNkZWZpbmUgU1RBVFVTX1NDQU5OSU5HCQkxMwotI2RlZmluZSBTVEFUVVNfU0NBTl9BQk9SVElORwkxNAotI2RlZmluZSBTVEFUVVNfU0NBTl9IVwkJMTUKLSNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNgotI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE3Ci0jZGVmaW5lIFNUQVRVU19DT05GX1BFTkRJTkcJMTgKLQogI2RlZmluZSBNQVhfVElEX0NPVU5UICAgICAgICA5CiAKICNkZWZpbmUgSVdMX0lOVkFMSURfUkFURSAgICAgMHhGRgpAQCAtMjI2LDcgKzIwOCw4IEBACiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsaW50IGxlZnQpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nLAorCQkJCSAgICAgICBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCBjNjA2MzY2Li42N2VmNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDMxNDYyODEuLjFiZDJjZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNTgxLDYgKzU4MSwxMyBAQAogCiAJaXdsNDk2NV9zZXRfd3JfcHRycyhwcml2LCBJV0xfQ01EX1FVRVVFX05VTSwgMCk7CiAKKwkvKiBtYWtlIHN1cmUgYWxsIHF1ZXVlIGFyZSBub3Qgc3RvcHBlZCAqLworCW1lbXNldCgmcHJpdi0+cXVldWVfc3RvcHBlZFswXSwgMCwgc2l6ZW9mKHByaXYtPnF1ZXVlX3N0b3BwZWQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlhdG9taWNfc2V0KCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2ldLCAwKTsKKworCS8qIHJlc2V0IHRvIDAgdG8gZW5hYmxlIGFsbCB0aGUgcXVldWUgZmlyc3QgKi8KKwlwcml2LT50eHFfY3R4X2FjdGl2ZV9tc2sgPSAwOwogCS8qIE1hcCBlYWNoIFR4L2NtZCBxdWV1ZSB0byBpdHMgY29ycmVzcG9uZGluZyBmaWZvICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVmYXVsdF9xdWV1ZV90b190eF9maWZvKTsgaSsrKSB7CiAJCWludCBhYyA9IGRlZmF1bHRfcXVldWVfdG9fdHhfZmlmb1tpXTsKQEAgLTIyMDYsOSArMjIxMywxMCBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w0OTY1X3RlbXBlcmF0dXJlX2NhbGliLAogCQkuc2V0X2N0X2tpbGwgPSBpd2w0OTY1X3NldF9jdF90aHJlc2hvbGQsCiAJfSwKKwkuYWRkX2JjYXN0X3N0YXRpb24gPSBpd2xfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDQ5NjVfdWNvZGUsCiAJLmxpYiA9ICZpd2w0OTY1X2xpYiwKIAkuaGNtZCA9ICZpd2w0OTY1X2hjbWQsCkBAIC0yMjM5LDcgKzIyNDcsNyBAQAogCS5icm9rZW5fcG93ZXJzYXZlID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDYxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTDQ5NjVfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAogfTsKIAogLyogTW9kdWxlIGZpcm13YXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKaW5kZXggYmMwNTZlOS4uNzE0ZTAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBjZmZhYWU3Li5lNDc2YWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTE3OSwxNCArMTc5LDI0IEBACiAJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPSAwOwogCQkJY29udGludWU7CiAJCX0KLQkJZGVsdGFfZyA9ICgxMDAwICogKChzMzIpYXZlcmFnZV9ub2lzZVtkZWZhdWx0X2NoYWluXSAtCisKKwkJZGVsdGFfZyA9IChwcml2LT5jZmctPmNoYWluX25vaXNlX3NjYWxlICoKKwkJCSgoczMyKWF2ZXJhZ2Vfbm9pc2VbZGVmYXVsdF9jaGFpbl0gLQogCQkJKHMzMilhdmVyYWdlX25vaXNlW2ldKSkgLyAxNTAwOworCiAJCS8qIGJvdW5kIGdhaW4gYnkgMiBiaXRzIHZhbHVlIG1heCwgM3JkIGJpdCBpcyBzaWduICovCiAJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9CiAJCQltaW4oYWJzKGRlbHRhX2cpLCAobG9uZykgQ0hBSU5fTk9JU0VfTUFYX0RFTFRBX0dBSU5fQ09ERSk7CiAKIAkJaWYgKGRlbHRhX2cgPCAwKQotCQkJLyogc2V0IG5lZ2F0aXZlIHNpZ24gKi8KKwkJCS8qCisJCQkgKiBzZXQgbmVnYXRpdmUgc2lnbiAuLi4KKwkJCSAqIG5vdGUgdG8gSW50ZWwgZGV2ZWxvcGVyczogIFRoaXMgaXMgdUNvZGUgQVBJIGZvcm1hdCwKKwkJCSAqICAgbm90IHRoZSBmb3JtYXQgb2YgYW55IGludGVybmFsIGRldmljZSByZWdpc3RlcnMuCisJCQkgKiAgIERvIG5vdCBjaGFuZ2UgdGhpcyBmb3JtYXQgZm9yIGUuZy4gNjA1MCBvciBzaW1pbGFyCisJCQkgKiAgIGRldmljZXMuICBDaGFuZ2UgZm9ybWF0IG9ubHkgaWYgbW9yZSByZXNvbHV0aW9uCisJCQkgKiAgIChpLmUuIG1vcmUgdGhhbiAyIGJpdHMgbWFnbml0dWRlKSBpcyBuZWVkZWQuCisJCQkgKi8KIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSB8PSAoMSA8PCAyKTsKIAl9CiAKQEAgLTI2Myw4ICsyNzMsOCBAQAogCiAJLmF1dG9fY29ycl9tYXhfb2ZkbSA9IDEyMCwKIAkuYXV0b19jb3JyX21heF9vZmRtX21yYyA9IDIxMCwKLQkuYXV0b19jb3JyX21heF9vZmRtX3gxID0gMTU1LAotCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjX3gxID0gMjkwLAorCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxMjAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyNDAsCiAKIAkuYXV0b19jb3JyX21pbl9jY2sgPSAxMjUsCiAJLmF1dG9fY29ycl9tYXhfY2NrID0gMjAwLApAQCAtNDEyLDEyICs0MjIsMTQgQEAKIC8qCiAgKiB1Y29kZQogICovCi1zdGF0aWMgaW50IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgZndfZGVzYyAqaW1hZ2UsCi0JCQkJdTMyIGRzdF9hZGRyKQorc3RhdGljIGludCBpd2w1MDAwX2xvYWRfc2VjdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJc3RydWN0IGZ3X2Rlc2MgKmltYWdlLCB1MzIgZHN0X2FkZHIpCiB7CiAJZG1hX2FkZHJfdCBwaHlfYWRkciA9IGltYWdlLT5wX2FkZHI7CiAJdTMyIGJ5dGVfY250ID0gaW1hZ2UtPmxlbjsKKwlpbnQgcmV0OworCisJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOwogCiAJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsCiAJCUZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKEZIX1NSVkNfQ0hOTCksCkBAIC00NDcsNiArNDU5LDIwIEBACiAJCUZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9ESVNBQkxFCXwKIAkJRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfRU5EVEZEKTsKIAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIiwgbmFtZSk7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAorCQkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKKwlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgeworCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgJXMgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQkJInRvIGludGVycnVwdFxuIiwgbmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCWlmICghcmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSAlcyB1Q29kZSBzZWN0aW9uXG4iLAorCQkJbmFtZSk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00NTYsNDggKzQ4MiwxMyBAQAogewogCWludCByZXQgPSAwOwogCi0JcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24ocHJpdiwgaW5zdF9pbWFnZSwKKwlyZXQgPSBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCAiSU5TVCIsIGluc3RfaW1hZ2UsCiAJCQkJICAgSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSU5TVCB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIik7Ci0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAotCQkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKLQlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewotCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCi0JCQkidG8gaW50ZXJydXB0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvblxuIik7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KLQotCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMDsKLQotCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKAotCQlwcml2LCBkYXRhX2ltYWdlLCBJV0w1MF9SVENfREFUQV9MT1dFUl9CT1VORCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJEQVRBIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKLQotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKLQkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKLQlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewotCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCi0JCQkidG8gaW50ZXJydXB0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKCFyZXQpIHsKLQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0gZWxzZQotCQlyZXQgPSAwOwotCi0JcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaXdsNTAwMF9sb2FkX3NlY3Rpb24ocHJpdiwgIkRBVEEiLCBkYXRhX2ltYWdlLAorCQkJCSAgICBJV0w1MF9SVENfREFUQV9MT1dFUl9CT1VORCk7CiB9CiAKIGludCBpd2w1MDAwX2xvYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtNjU3LDYgKzY0OCwxMyBAQAogCiAJaXdsNTAwMF9zZXRfd3JfcHRycyhwcml2LCBJV0xfQ01EX1FVRVVFX05VTSwgMCk7CiAKKwkvKiBtYWtlIHN1cmUgYWxsIHF1ZXVlIGFyZSBub3Qgc3RvcHBlZCAqLworCW1lbXNldCgmcHJpdi0+cXVldWVfc3RvcHBlZFswXSwgMCwgc2l6ZW9mKHByaXYtPnF1ZXVlX3N0b3BwZWQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlhdG9taWNfc2V0KCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2ldLCAwKTsKKworCS8qIHJlc2V0IHRvIDAgdG8gZW5hYmxlIGFsbCB0aGUgcXVldWUgZmlyc3QgKi8KKwlwcml2LT50eHFfY3R4X2FjdGl2ZV9tc2sgPSAwOwogCS8qIG1hcCBxb3MgcXVldWVzIHRvIGZpZm9zIG9uZS10by1vbmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpd2w1MDAwX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmbyk7IGkrKykgewogCQlpbnQgYWMgPSBpd2w1MDAwX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmb1tpXTsKQEAgLTc4MSw3ICs3NzksNyBAQAogCiAJc2NkX2JjX3RibFt0eHFfaWRdLnRmZF9vZmZzZXRbd3JpdGVfcHRyXSA9IGJjX2VudDsKIAotCWlmICh0eHEtPnEud3JpdGVfcHRyIDwgVEZEX1FVRVVFX1NJWkVfQkNfRFVQKQorCWlmICh3cml0ZV9wdHIgPCBURkRfUVVFVUVfU0laRV9CQ19EVVApCiAJCXNjZF9iY190YmxbdHhxX2lkXS4KIAkJCXRmZF9vZmZzZXRbVEZEX1FVRVVFX1NJWkVfTUFYICsgd3JpdGVfcHRyXSA9IGJjX2VudDsKIH0KQEAgLTgwMCwxMiArNzk4LDEyIEBACiAJaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkKIAkJc3RhX2lkID0gdHhxLT5jbWRbcmVhZF9wdHJdLT5jbWQudHguc3RhX2lkOwogCi0JYmNfZW50ID0gIGNwdV90b19sZTE2KDEgfCAoc3RhX2lkIDw8IDEyKSk7CisJYmNfZW50ID0gY3B1X3RvX2xlMTYoMSB8IChzdGFfaWQgPDwgMTIpKTsKIAlzY2RfYmNfdGJsW3R4cV9pZF0udGZkX29mZnNldFtyZWFkX3B0cl0gPSBiY19lbnQ7CiAKLQlpZiAodHhxLT5xLndyaXRlX3B0ciA8IFRGRF9RVUVVRV9TSVpFX0JDX0RVUCkKKwlpZiAocmVhZF9wdHIgPCBURkRfUVVFVUVfU0laRV9CQ19EVVApCiAJCXNjZF9iY190YmxbdHhxX2lkXS4KLQkJCXRmZF9vZmZzZXRbVEZEX1FVRVVFX1NJWkVfTUFYICsgcmVhZF9wdHJdID0gIGJjX2VudDsKKwkJCXRmZF9vZmZzZXRbVEZEX1FVRVVFX1NJWkVfTUFYICsgcmVhZF9wdHJdID0gYmNfZW50OwogfQogCiBzdGF0aWMgaW50IGl3bDUwMDBfdHhfcXVldWVfc2V0X3EycmF0aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgcmFfdGlkLApAQCAtMTQ2NCw2ICsxNDYyLDggQEAKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKIAkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKIAkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKKwkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCisJLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKIAkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKIAkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKIAkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCkBAIC0xNDk5LDYgKzE0OTksNyBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w1MDAwX3RlbXBlcmF0dXJlLAogCQkuc2V0X2N0X2tpbGwgPSBpd2w1MDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsX2FkZF9iY2FzdF9zdGF0aW9uLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MTUwX2xpYiA9IHsKQEAgLTE1MTYsNiArMTUxNyw3IEBACiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2w1MDAwX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCiAJLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCiAJLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCisJLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAogCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAogCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAogCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKQEAgLTE1NTEsOSArMTU1MywxMCBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w1MTUwX3RlbXBlcmF0dXJlLAogCQkuc2V0X2N0X2tpbGwgPSBpd2w1MTUwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsX2FkZF9iY2FzdF9zdGF0aW9uLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTU2MSw3ICsxNTY0LDcgQEAKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUxNTBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDUxNTBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTE1MF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTU5OCw3ICsxNjAxLDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9MT05HX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmduX2NmZyA9IHsKQEAgLTE2MjMsNiArMTYyNyw4IEBACiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkudXNlX3J0c19mb3JfaHQgPSB0cnVlLCAvKiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uICovCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnID0gewpAQCAtMTY0NSw2ICsxNjUxLDggQEAKIAkudXNlX2JzbSA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hZ25fY2ZnID0gewpAQCAtMTY2OSw3ICsxNjc3LDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9MT05HX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE2OTQsNyArMTcwMyw4IEBACiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkudXNlX3J0c19mb3JfaHQgPSB0cnVlLCAvKiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uICovCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmcgPSB7CkBAIC0xNzE5LDcgKzE3MjksOCBAQAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hYmdfY2ZnID0gewpAQCAtMTc0Miw2ICsxNzUzLDggQEAKIAkudXNlX2JzbSA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCmluZGV4IDkwMTg1NzcuLmRkYmEzOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKaW5kZXggNzRlNTcxMC4uYzQ4NDRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNzAsNiArNzAsMTQgQEAKIAlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF9leGl0X3RocmVzaG9sZCA9IENUX0tJTExfRVhJVF9USFJFU0hPTEQ7CiB9CiAKKy8qIEluZGljYXRlIGNhbGlicmF0aW9uIHZlcnNpb24gdG8gdUNvZGUuICovCitzdGF0aWMgdm9pZCBpd2w2MDUwX3NldF9jYWxpYl92ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5jYWxpYl92ZXJzaW9uKHByaXYpID49IDYpCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAorCQkJCUNTUl9HUF9EUklWRVJfUkVHX0JJVF9DQUxJQl9WRVJTSU9ONik7Cit9CisKIC8qIE5JQyBjb25maWd1cmF0aW9uIGZvciA2MDAwIHNlcmllcyAqLwogc3RhdGljIHZvaWQgaXdsNjAwMF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTk2LDYgKzEwNCw4IEBACiAJCQkgICAgIENTUl9HUF9EUklWRVJfUkVHX0JJVF9SQURJT19TS1VfMngyX0lQQSk7CiAJfQogCS8qIGVsc2UgZG8gbm90aGluZywgdUNvZGUgY29uZmlndXJlZCAqLworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY2FsaWJfdmVyc2lvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcF9vcHMuc2V0X2NhbGliX3ZlcnNpb24ocHJpdik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w2MDAwX3NlbnNpdGl2aXR5ID0gewpAQCAtMTA4LDcgKzExOCw3IEBACiAKIAkuYXV0b19jb3JyX21heF9vZmRtID0gMTQ1LAogCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjID0gMjMyLAotCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxNDUsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV94MSA9IDExMCwKIAkuYXV0b19jb3JyX21heF9vZmRtX21yY194MSA9IDIzMiwKIAogCS5hdXRvX2NvcnJfbWluX2NjayA9IDEyNSwKQEAgLTE1OCwxMSArMTY4LDI1IEBACiAJLyogU2V0IGluaXRpYWwgc2Vuc2l0aXZpdHkgcGFyYW1ldGVycyAqLwogCS8qIFNldCBpbml0aWFsIGNhbGlicmF0aW9uIHNldCAqLwogCXByaXYtPmh3X3BhcmFtcy5zZW5zID0gJml3bDYwMDBfc2Vuc2l0aXZpdHk7Ci0JcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnID0KKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9EQykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8CisJCQlCSVQoSVdMX0NBTElCX1RYX0lRKSAJCXwKKwkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAogCQkJQklUKElXTF9DQUxJQl9MTykJCXwKIAkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAogCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE1LDYgKzIzOSw4IEBACiAJLmxvYWRfdWNvZGUgPSBpd2w1MDAwX2xvYWRfdWNvZGUsCiAJLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCiAJLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCisJLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAorCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCiAJLmluaXRfYWxpdmVfc3RhcnQgPSBpd2w1MDAwX2luaXRfYWxpdmVfc3RhcnQsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDUwMDBfYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsNTAwMF9zZW5kX3R4X3Bvd2VyLApAQCAtMjUwLDkgKzI3NiwxMCBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w1MDAwX3RlbXBlcmF0dXJlLAogCQkuc2V0X2N0X2tpbGwgPSBpd2w2MDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsX2FkZF9iY2FzdF9zdGF0aW9uLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDYwMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDYwMDBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNjAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMjYwLDE4ICsyODcsNjggQEAKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjA1MF9oY21kX3V0aWxzID0gewotCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAotCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCi0JLnJ0c190eF9jbWRfZmxhZyA9IGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnLAotCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKK3N0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNjA1MF9saWIgPSB7CisJLnNldF9od19wYXJhbXMgPSBpd2w2MDAwX2h3X3NldF9od19wYXJhbXMsCisJLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKKwkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibCwKKwkudHhxX3NldF9zY2hlZCA9IGl3bDUwMDBfdHhxX3NldF9zY2hlZCwKKwkudHhxX2FnZ19lbmFibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlLAorCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKKwkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDUwMDBfcnhfaGFuZGxlcl9zZXR1cCwKKwkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDUwMDBfc2V0dXBfZGVmZXJyZWRfd29yaywKKwkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKKwkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKKwkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKKwkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKKwkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCisJLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKKwkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKKwkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCisJLnNlbmRfdHhfcG93ZXIgPSBpd2w1MDAwX3NlbmRfdHhfcG93ZXIsCisJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCisJLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDYwMDBfaHdfY2hhbm5lbF9zd2l0Y2gsCisJLmFwbV9vcHMgPSB7CisJCS5pbml0ID0gaXdsX2FwbV9pbml0LAorCQkuc3RvcCA9IGl3bF9hcG1fc3RvcCwKKwkJLmNvbmZpZyA9IGl3bDYwMDBfbmljX2NvbmZpZywKKwkJLnNldF9wd3Jfc3JjID0gaXdsX3NldF9wd3Jfc3JjLAorCX0sCisJLmVlcHJvbV9vcHMgPSB7CisJCS5yZWd1bGF0b3J5X2JhbmRzID0geworCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzJfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8zX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNF9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzVfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUworCQl9LAorCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAorCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKKwkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCisJCS5jYWxpYl92ZXJzaW9uCT0gaXdsNTAwMF9lZXByb21fY2FsaWJfdmVyc2lvbiwKKwkJLnF1ZXJ5X2FkZHIgPSBpd2w1MDAwX2VlcHJvbV9xdWVyeV9hZGRyLAorCQkudXBkYXRlX2VuaGFuY2VkX3R4cG93ZXIgPSBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyLAorCX0sCisJLnBvc3RfYXNzb2NpYXRlID0gaXdsX3Bvc3RfYXNzb2NpYXRlLAorCS5pc3IgPSBpd2xfaXNyX2ljdCwKKwkuY29uZmlnX2FwID0gaXdsX2NvbmZpZ19hcCwKKwkudGVtcF9vcHMgPSB7CisJCS50ZW1wZXJhdHVyZSA9IGl3bDUwMDBfdGVtcGVyYXR1cmUsCisJCS5zZXRfY3Rfa2lsbCA9IGl3bDYwMDBfc2V0X2N0X3RocmVzaG9sZCwKKwkJLnNldF9jYWxpYl92ZXJzaW9uID0gaXdsNjA1MF9zZXRfY2FsaWJfdmVyc2lvbiwKKwkgfSwKKwkuYWRkX2JjYXN0X3N0YXRpb24gPSBpd2xfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjA1MF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjA1MF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCi0JLmxpYiA9ICZpd2w2MDAwX2xpYiwKKwkubGliID0gJml3bDYwNTBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKLQkudXRpbHMgPSAmaXdsNjA1MF9oY21kX3V0aWxzLAorCS51dGlscyA9ICZpd2w1MDAwX2hjbWRfdXRpbHMsCiAJLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKIH07CiAKQEAgLTMwNiw3ICszODMsOCBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJhYmdfY2ZnID0gewpAQCAtMzM2LDYgKzQxNCw4IEBACiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJiZ19jZmcgPSB7CkBAIC0zNjUsNiArNDQ1LDggQEAKIAkuc3VwcG9ydHNfaWRsZSA9IHRydWUsCiAJLmFkdl90aGVybWFsX3Rocm90dGxlID0gdHJ1ZSwKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZyA9IHsKQEAgLTM5NSw3ICs0NzcsOCBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxNTAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWJnX2NmZyA9IHsKQEAgLTQyNSw2ICs1MDgsOCBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDE1MDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnID0gewpAQCAtNDU1LDcgKzU0MCw4IEBACiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5jCmluZGV4IDNiY2NiYTIwZjYuLjFhMjQ5NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCmluZGV4IGFiNTVmOTIuLmE1OTRlNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggYjkzZTQ5MS4uOGJmN2MyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjk4LDEwICsyOTgsMjMgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfZGF0YSwgdTggdGlkLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CisJaW50IHJldDsKKwogCWlmIChyc190bF9nZXRfbG9hZChscV9kYXRhLCB0aWQpID4gSVdMX0FHR19MT0FEX1RIUkVTSE9MRCkgewogCQlJV0xfREVCVUdfSFQocHJpdiwgIlN0YXJ0aW5nIFR4IGFnZzogU1RBOiAlcE0gdGlkOiAlZFxuIiwKIAkJCQlzdGEtPmFkZHIsIHRpZCk7Ci0JCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkKTsKKwkJcmV0ID0gaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQpOworCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCS8qCisJCQkgKiBkcml2ZXIgYW5kIG1hYzgwMjExIGlzIG91dCBvZiBzeW5jCisJCQkgKiB0aGlzIG1pZ2h0IGJlIGNhdXNlIGJ5IHJlbG9hZGluZyBmaXJtd2FyZQorCQkJICogc3RvcCB0aGUgdHggYmEgc2Vzc2lvbiBoZXJlCisJCQkgKi8KKwkJCUlXTF9ERUJVR19IVChwcml2LCAiRmFpbCBzdGFydCBUeCBhZ2cgb24gdGlkOiAlZFxuIiwKKwkJCQl0aWQpOworCQkJcmV0ID0gaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwKKwkJCQkJCVdMQU5fQkFDS19JTklUSUFUT1IpOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IGFmZmMwYzUuLmU3MTkyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCUlXTF9SQVRFXzJNX01BU0spCiAKICNkZWZpbmUgSVdMX0NDS19SQVRFU19NQVNLICAgICAgICAgIFwKLSAgICAgICAoSVdMX0JBU0lDX1JBVEVTX01BU0sgICAgICB8IFwKKyAgICAgICAoSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLICB8IFwKIAlJV0xfUkFURV81TV9NQVNLICAgICAgICAgIHwgXAogCUlXTF9SQVRFXzExTV9NQVNLKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDFjOTg2NmQuLjZhZWI4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC03MywxMyArNzMsNyBAQAogI2RlZmluZSBWRAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotI2RlZmluZSBWUyAicyIKLSNlbHNlCi0jZGVmaW5lIFZTCi0jZW5kaWYKLQotI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMV0lGSV9WRVJTSU9OIFZEIFZTCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICBJV0xXSUZJX1ZFUlNJT04gVkQKIAogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKQEAgLTIwMyw3ICsxOTcsOCBAQAogCXByaXYtPnN0YXJ0X2NhbGliID0gMDsKIAogCS8qIEFkZCB0aGUgYnJvYWRjYXN0IGFkZHJlc3Mgc28gd2UgY2FuIHNlbmQgYnJvYWRjYXN0IGZyYW1lcyAqLwotCWl3bF9hZGRfYmNhc3Rfc3RhdGlvbihwcml2KTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5hZGRfYmNhc3Rfc3RhdGlvbihwcml2KTsKKwogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCkBAIC02NTcsNiArNjUyLDEzMSBAQAogCWl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfQVNZTkMsIGZhbHNlKTsKIH0KIAorCitzdGF0aWMgdm9pZCBpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBiYXNlLAorCQkJCQl1MzIgc3RhcnRfaWR4LCB1MzIgbnVtX2V2ZW50cywKKwkJCQkJdTMyIG1vZGUpCit7CisJdTMyIGk7CisJdTMyIHB0cjsgICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGxvZyBkYXRhICovCisJdTMyIGV2LCB0aW1lLCBkYXRhOyAvKiBldmVudCBsb2cgZGF0YSAqLworCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOworCisJaWYgKG1vZGUgPT0gMCkKKwkJcHRyID0gYmFzZSArICg0ICogc2l6ZW9mKHUzMikpICsgKHN0YXJ0X2lkeCAqIDIgKiBzaXplb2YodTMyKSk7CisJZWxzZQorCQlwdHIgPSBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkgKyAoc3RhcnRfaWR4ICogMyAqIHNpemVvZih1MzIpKTsKKworCS8qIE1ha2Ugc3VyZSBkZXZpY2UgaXMgcG93ZXJlZCB1cCBmb3IgU1JBTSByZWFkcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKKwlpZiAoaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCBzdGFydGluZyBhZGRyZXNzOyByZWFkcyB3aWxsIGF1dG8taW5jcmVtZW50ICovCisJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBwdHIpOworCXJtYigpOworCisJLyoKKwkgKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCisJICogcGxhY2UgZXZlbnQgaWQgIyBhdCBmYXIgcmlnaHQgZm9yIGVhc2llciB2aXN1YWwgcGFyc2luZy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7CisJCWV2ID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCXRpbWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJaWYgKG1vZGUgPT0gMCkgeworCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfY29udF9ldmVudChwcml2LAorCQkJCQkJCTAsIHRpbWUsIGV2KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2NvbnRfZXZlbnQocHJpdiwKKwkJCQkJCXRpbWUsIGRhdGEsIGV2KTsKKwkJfQorCX0KKwkvKiBBbGxvdyBkZXZpY2UgdG8gcG93ZXIgZG93biAqLworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9jb250aW51b3VzX2V2ZW50X3RyYWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLworCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCisJdTMyIG1vZGU7ICAgICAgIC8qIDAgLSBubyB0aW1lc3RhbXAsIDEgLSB0aW1lc3RhbXAgcmVjb3JkZWQgKi8KKwl1MzIgbnVtX3dyYXBzOyAgLyogIyB0aW1lcyB1Q29kZSB3cmFwcGVkIHRvIHRvcCBvZiBsb2cgKi8KKwl1MzIgbmV4dF9lbnRyeTsgLyogaW5kZXggb2YgbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuIGJ5IHVDb2RlICovCisKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CisJZWxzZQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgeworCQljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCQludW1fd3JhcHMgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOworCQltb2RlID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKKwkJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisJfSBlbHNlCisJCXJldHVybjsKKworCWlmIChudW1fd3JhcHMgPT0gcHJpdi0+ZXZlbnRfbG9nLm51bV93cmFwcykgeworCQlpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShwcml2LAorCQkJCSAgICAgICBiYXNlLCBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSwKKwkJCQkgICAgICAgbmV4dF9lbnRyeSAtIHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5LAorCQkJCSAgICAgICBtb2RlKTsKKwkJcHJpdi0+ZXZlbnRfbG9nLm5vbl93cmFwc19jb3VudCsrOworCX0gZWxzZSB7CisJCWlmICgobnVtX3dyYXBzIC0gcHJpdi0+ZXZlbnRfbG9nLm51bV93cmFwcykgPiAxKQorCQkJcHJpdi0+ZXZlbnRfbG9nLndyYXBzX21vcmVfY291bnQrKzsKKwkJZWxzZQorCQkJcHJpdi0+ZXZlbnRfbG9nLndyYXBzX29uY2VfY291bnQrKzsKKwkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfd3JhcF9ldmVudChwcml2LAorCQkJCW51bV93cmFwcyAtIHByaXYtPmV2ZW50X2xvZy5udW1fd3JhcHMsCisJCQkJbmV4dF9lbnRyeSwgcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnkpOworCQlpZiAobmV4dF9lbnRyeSA8IHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5KSB7CisJCQlpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShwcml2LCBiYXNlLAorCQkJICAgICAgIHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5LAorCQkJICAgICAgIGNhcGFjaXR5IC0gcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnksCisJCQkgICAgICAgbW9kZSk7CisKKwkJCWl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHByaXYsIGJhc2UsIDAsCisJCQkJbmV4dF9lbnRyeSwgbW9kZSk7CisJCX0gZWxzZSB7CisJCQlpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShwcml2LCBiYXNlLAorCQkJICAgICAgIG5leHRfZW50cnksIGNhcGFjaXR5IC0gbmV4dF9lbnRyeSwKKwkJCSAgICAgICBtb2RlKTsKKworCQkJaXdsX3ByaW50X2NvbnRfZXZlbnRfdHJhY2UocHJpdiwgYmFzZSwgMCwKKwkJCQluZXh0X2VudHJ5LCBtb2RlKTsKKwkJfQorCX0KKwlwcml2LT5ldmVudF9sb2cubnVtX3dyYXBzID0gbnVtX3dyYXBzOworCXByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5ID0gbmV4dF9lbnRyeTsKK30KKworLyoqCisgKiBpd2xfYmdfdWNvZGVfdHJhY2UgLSBUaW1lciBjYWxsYmFjayB0byBsb2cgdWNvZGUgZXZlbnQKKyAqCisgKiBUaGUgdGltZXIgaXMgY29udGludWFsbHkgc2V0IHRvIGV4ZWN1dGUgZXZlcnkKKyAqIFVDT0RFX1RSQUNFX1BFUklPRCBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIGxhc3QgdGltZXIgZXhwaXJlZAorICogdGhpcyBmdW5jdGlvbiBpcyB0byBwZXJmb3JtIGNvbnRpbnVvdXMgdUNvZGUgZXZlbnQgbG9nZ2luZyBvcGVyYXRpb24KKyAqIGlmIGVuYWJsZWQKKyAqLworc3RhdGljIHZvaWQgaXdsX2JnX3Vjb2RlX3RyYWNlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZGF0YTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKHByaXYtPmV2ZW50X2xvZy51Y29kZV90cmFjZSkgeworCQlpd2xfY29udGludW91c19ldmVudF90cmFjZShwcml2KTsKKwkJLyogUmVzY2hlZHVsZSB0aGUgdGltZXIgdG8gb2NjdXIgaW4gVUNPREVfVFJBQ0VfUEVSSU9EICovCisJCW1vZF90aW1lcigmcHJpdi0+dWNvZGVfdHJhY2UsCisJCQkgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVUNPREVfVFJBQ0VfUEVSSU9EKSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpd2xfcnhfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKQEAgLTY4OSwxMiArODA5LDE0IEBACiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolcyBDVDolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAotCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOworCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCisJCQkgIChmbGFncyAmIENUX0NBUkRfRElTQUJMRUQpID8KKwkJCSAgIlJlYWNoZWQiIDogIk5vdCByZWFjaGVkIik7CiAKIAlpZiAoZmxhZ3MgJiAoU1dfQ0FSRF9ESVNBQkxFRCB8IEhXX0NBUkRfRElTQUJMRUQgfAotCQkgICAgIFJGX0NBUkRfRElTQUJMRUQpKSB7CisJCSAgICAgQ1RfQ0FSRF9ESVNBQkxFRCkpIHsKIAogCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCiAJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKQEAgLTcwOCwxMCArODMwLDEwIEBACiAJCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01CWF9DLAogCQkJCQlIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCk7CiAJCX0KLQkJaWYgKGZsYWdzICYgUkZfQ0FSRF9ESVNBQkxFRCkKKwkJaWYgKGZsYWdzICYgQ1RfQ0FSRF9ESVNBQkxFRCkKIAkJCWl3bF90dF9lbnRlcl9jdF9raWxsKHByaXYpOwogCX0KLQlpZiAoIShmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpKQorCWlmICghKGZsYWdzICYgQ1RfQ0FSRF9ESVNBQkxFRCkpCiAJCWl3bF90dF9leGl0X2N0X2tpbGwocHJpdik7CiAKIAlpZiAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKQpAQCAtNzYxLDYgKzg4Myw4IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUxJVkVdID0gaXdsX3J4X3JlcGx5X2FsaXZlOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKIAlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTl0gPQorCQkJaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUE1fU0xFRVBfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9wbV9zbGVlcF9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQ10gPQogCSAgICBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKQEAgLTc3NCw3ICs4OTgsNiBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bF9yZXBseV9zdGF0aXN0aWNzOwogCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9zdGF0aXN0aWNzOwogCi0JaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHByaXYpOwogCWl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHByaXYpOwogCiAJLyogc3RhdHVzIGNoYW5nZSBoYW5kbGVyICovCkBAIC0xNjM0LDcgKzE3NTcsNyBAQAogCSJERUJVR18xIiwKIAkiREVCVUdfMiIsCiAJIkRFQlVHXzMiLAotCSJVTktOT1dOIgorCSJBRFZBTkNFRCBTWVNBU1NFUlQiCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqZGVzY19sb29rdXAoaW50IGkpCkBAIC0xNzA1LDggKzE4MjgsOSBAQAogICogaXdsX3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZwogICoKICAqLwotc3RhdGljIHZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCi0JCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQorc3RhdGljIGludCBpd2xfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKKwkJCSAgICAgICB1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUsCisJCQkgICAgICAgaW50IHBvcywgY2hhciAqKmJ1Ziwgc2l6ZV90IGJ1ZnN6KQogewogCXUzMiBpOwogCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCkBAIC0xNzE2LDcgKzE4NDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwogCiAJaWYgKG51bV9ldmVudHMgPT0gMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gcG9zOwogCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpCiAJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJZWxzZQpAQCAtMTc0NCwyNyArMTg2OCw0NCBAQAogCQl0aW1lID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmIChtb2RlID09IDApIHsKIAkJCS8qIGRhdGEsIGV2ICovCi0JCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCAwLCB0aW1lLCBldik7Ci0JCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCQlpZiAoYnVmc3opIHsKKwkJCQlwb3MgKz0gc2NucHJpbnRmKCpidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCQkJIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsCisJCQkJCQl0aW1lLCBldik7CisJCQl9IGVsc2UgeworCQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsCisJCQkJCXRpbWUsIGV2KTsKKwkJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLAorCQkJCQl0aW1lLCBldik7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlkYXRhID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci0JCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCWlmIChidWZzeikgeworCQkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHVcbiIsCisJCQkJCQkgdGltZSwgZGF0YSwgZXYpOworCQkJfSBlbHNlIHsKKwkJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKIAkJCQkJdGltZSwgZGF0YSwgZXYpOwotCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgdGltZSwgZGF0YSwgZXYpOworCQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIHRpbWUsCisJCQkJCWRhdGEsIGV2KTsKKwkJCX0KIAkJfQogCX0KIAogCS8qIEFsbG93IGRldmljZSB0byBwb3dlciBkb3duICovCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKICAqIGl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3MgLSBEdW1wIHRoZSBuZXdlc3QgIyBvZiBldmVudCBsb2cgdG8gc3lzbG9nCiAgKi8KLXN0YXRpYyB2b2lkIGl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2FwYWNpdHksCi0JCQkJICAgICAgdTMyIG51bV93cmFwcywgdTMyIG5leHRfZW50cnksCi0JCQkJICAgICAgdTMyIHNpemUsIHUzMiBtb2RlKQorc3RhdGljIGludCBpd2xfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGNhcGFjaXR5LAorCQkJCSAgICB1MzIgbnVtX3dyYXBzLCB1MzIgbmV4dF9lbnRyeSwKKwkJCQkgICAgdTMyIHNpemUsIHUzMiBtb2RlLAorCQkJCSAgICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJLyoKIAkgKiBkaXNwbGF5IHRoZSBuZXdlc3QgREVGQVVMVF9MT0dfRU5UUklFUyBlbnRyaWVzCkBAIC0xNzcyLDIxICsxOTEzLDI2IEBACiAJICovCiAJaWYgKG51bV93cmFwcykgewogCQlpZiAobmV4dF9lbnRyeSA8IHNpemUpIHsKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwKLQkJCQkJY2FwYWNpdHkgLSAoc2l6ZSAtIG5leHRfZW50cnkpLAotCQkJCQlzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSk7Ci0JCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCi0JCQkJICAgIG5leHRfZW50cnksIG1vZGUpOworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LAorCQkJCQkJY2FwYWNpdHkgLSAoc2l6ZSAtIG5leHRfZW50cnkpLAorCQkJCQkJc2l6ZSAtIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQlwb3MsIGJ1ZiwgYnVmc3opOworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLAorCQkJCQkJICBuZXh0X2VudHJ5LCBtb2RlLAorCQkJCQkJICBwb3MsIGJ1ZiwgYnVmc3opOwogCQl9IGVsc2UKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCi0JCQkJICAgIHNpemUsIG1vZGUpOworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKKwkJCQkJCSAgc2l6ZSwgbW9kZSwgcG9zLCBidWYsIGJ1ZnN6KTsKIAl9IGVsc2UgewotCQlpZiAobmV4dF9lbnRyeSA8IHNpemUpCi0JCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwotCQllbHNlCi0JCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAotCQkJCQkgICAgc2l6ZSwgbW9kZSk7CisJCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkgeworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LAorCQkJCQkJICBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOworCQl9IGVsc2UgeworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKKwkJCQkJCSAgc2l6ZSwgbW9kZSwgcG9zLCBidWYsIGJ1ZnN6KTsKKwkJfQogCX0KKwlyZXR1cm4gcG9zOwogfQogCiAvKiBGb3Igc2FuaXR5IGNoZWNrIG9ubHkuICBBY3R1YWwgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHVDb2RlLCB0eXAuIDUxMiAqLwpAQCAtMTc5NCw3ICsxOTQwLDggQEAKIAogI2RlZmluZSBERUZBVUxUX0RVTVBfRVZFTlRfTE9HX0VOVFJJRVMgKDIwKQogCi12b2lkIGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKQoraW50IGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nLAorCQkJICAgIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSkKIHsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwogCXUzMiBjYXBhY2l0eTsgICAvKiBldmVudCBsb2cgY2FwYWNpdHkgaW4gIyBlbnRyaWVzICovCkBAIC0xODAyLDYgKzE5NDksOCBAQAogCXUzMiBudW1fd3JhcHM7ICAvKiAjIHRpbWVzIHVDb2RlIHdyYXBwZWQgdG8gdG9wIG9mIGxvZyAqLwogCXUzMiBuZXh0X2VudHJ5OyAvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4gYnkgdUNvZGUgKi8KIAl1MzIgc2l6ZTsgICAgICAgLyogIyBlbnRyaWVzIHRoYXQgd2UnbGwgcHJpbnQgKi8KKwlpbnQgcG9zID0gMDsKKwlzaXplX3QgYnVmc3ogPSAwOwogCiAJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKQEAgLTE4MTIsNyArMTk2MSw3IEBACiAJCUlXTF9FUlIocHJpdiwKIAkJCSJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WCBmb3IgJXMgdUNvZGVcbiIsCiAJCQliYXNlLCAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSA/ICJJbml0IiA6ICJSVCIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTE4MzgsNyArMTk4Nyw3IEBACiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7CiAJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiBwb3M7CiAJfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTE4NTMsNiArMjAwMiwxNSBAQAogCQlzaXplKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKGRpc3BsYXkpIHsKKwkJaWYgKGZ1bGxfbG9nKQorCQkJYnVmc3ogPSBjYXBhY2l0eSAqIDQ4OworCQllbHNlCisJCQlidWZzeiA9IHNpemUgKiA0ODsKKwkJKmJ1ZiA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCQlpZiAoISpidWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJaWYgKChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgfHwgZnVsbF9sb2cpIHsKIAkJLyoKIAkJICogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLApAQCAtMTg2MCwxNyArMjAxOCwyMiBAQAogCQkgKiBpLmUgdGhlIG5leHQgb25lIHRoYXQgdUNvZGUgd291bGQgZmlsbC4KIAkJICovCiAJCWlmIChudW1fd3JhcHMpCi0JCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnksCi0JCQkJCSAgICBjYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAorCQkJCQkJY2FwYWNpdHkgLSBuZXh0X2VudHJ5LCBtb2RlLAorCQkJCQkJcG9zLCBidWYsIGJ1ZnN6KTsKIAkJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwotCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOworCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCisJCQkJCSAgbmV4dF9lbnRyeSwgbW9kZSwgcG9zLCBidWYsIGJ1ZnN6KTsKIAl9IGVsc2UKLQkJaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAotCQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwkJcG9zID0gaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkJbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJCXBvcywgYnVmLCBidWZzeik7CiAjZWxzZQotCWl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKLQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwlwb3MgPSBpd2xfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCisJCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUsCisJCQkJCXBvcywgYnVmLCBidWZzeik7CiAjZW5kaWYKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKQEAgLTIyNzYsMTggKzI0MzksNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2JnX3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCB1cCk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlfX2l3bF91cChwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2JnX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwpAQCAtMjMwNCw3ICsyNDU1LDEzIEBACiAJCWllZWU4MDIxMV9yZXN0YXJ0X2h3KHByaXYtPmh3KTsKIAl9IGVsc2UgewogCQlpd2xfZG93bihwcml2KTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT51cCk7CisKKwkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQkJcmV0dXJuOworCisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJX19pd2xfdXAocHJpdik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KIH0KIApAQCAtMjQ0MCw3ICsyNTk3LDcgQEAKICAqIE5vdCBhIG1hYzgwMjExIGVudHJ5IHBvaW50IGZ1bmN0aW9uLCBidXQgaXQgZml0cyBpbiB3aXRoIGFsbCB0aGUKICAqIG90aGVyIG1hYzgwMjExIGZ1bmN0aW9ucyBncm91cGVkIGhlcmUuCiAgKi8KLXN0YXRpYyBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKQEAgLTI0NTYsNiArMjYxMywxMCBAQAogCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKIAkJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFM7CiAKKwlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCisJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTIHwKKwkJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1NUQVRJQ19TTVBTOworCiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYpOwogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKQEAgLTI0NzAsNyArMjYzMSw3IEBACiAJICovCiAJaHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOwogCi0JaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IFBST0JFX09QVElPTl9NQVg7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IFBST0JFX09QVElPTl9NQVggKyAxOwogCS8qIHdlIGNyZWF0ZSB0aGUgODAyLjExIGhlYWRlciBhbmQgYSB6ZXJvLWxlbmd0aCBTU0lEIGVsZW1lbnQgKi8KIAlody0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IElXTF9NQVhfUFJPQkVfUkVRVUVTVCAtIDI0IC0gMjsKIApAQCAtMjY2OCwxNCArMjgyOSwxOCBAQAogfQogCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAotCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgICB1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWl3bF91cGRhdGVfdGtpcF9rZXkocHJpdiwga2V5Y29uZiwgYWRkciwgaXYzMiwgcGhhc2Uxa2V5KTsKKwlpd2xfdXBkYXRlX3RraXBfa2V5KHByaXYsIGtleWNvbmYsCisJCQkgICAgc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHIsCisJCQkgICAgaXYzMiwgcGhhc2Uxa2V5KTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQpAQCAtMjc4NCw2ICsyOTQ5LDkgQEAKIAkJCXJldHVybiAwOwogCQllbHNlCiAJCQlyZXR1cm4gcmV0OworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQkvKiBkbyBub3RoaW5nICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlkZWZhdWx0OgogCQlJV0xfREVCVUdfSFQocHJpdiwgInVua25vd25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI4MzMsNiArMzAwMSw4IEBACiAJCWJyZWFrOwogCWNhc2UgU1RBX05PVElGWV9BV0FLRToKIAkJV0FSTl9PTighc3RhX3ByaXYtPmNsaWVudCk7CisJCWlmICghc3RhX3ByaXYtPmFzbGVlcCkKKwkJCWJyZWFrOwogCQlzdGFfcHJpdi0+YXNsZWVwID0gZmFsc2U7CiAJCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyKTsKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQpAQCAtMzEwOSw3ICszMjc5LDYgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKLQlJTklUX1dPUksoJnByaXYtPnVwLCBpd2xfYmdfdXApOwogCUlOSVRfV09SSygmcHJpdi0+cmVzdGFydCwgaXdsX2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2xfYmdfcnhfcmVwbGVuaXNoKTsKIAlJTklUX1dPUksoJnByaXYtPmJlYWNvbl91cGRhdGUsIGl3bF9iZ19iZWFjb25fdXBkYXRlKTsKQEAgLTMxMjYsNiArMzI5NSwxMCBAQAogCXByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7CiAJcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5mdW5jdGlvbiA9IGl3bF9iZ19zdGF0aXN0aWNzX3BlcmlvZGljOwogCisJaW5pdF90aW1lcigmcHJpdi0+dWNvZGVfdHJhY2UpOworCXByaXYtPnVjb2RlX3RyYWNlLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPnVjb2RlX3RyYWNlLmZ1bmN0aW9uID0gaXdsX2JnX3Vjb2RlX3RyYWNlOworCiAJaWYgKCFwcml2LT5jZmctPnVzZV9pc3JfbGVnYWN5KQogCQl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCQlpd2xfaXJxX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwpAQCAtMzE0NCw2ICszMzE3LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hbGl2ZV9zdGFydCk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+YmVhY29uX3VwZGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOworCWRlbF90aW1lcl9zeW5jKCZwcml2LT51Y29kZV90cmFjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTMxNzksNiArMzM1Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKIAogCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKKwltdXRleF9pbml0KCZwcml2LT5zeW5jX2NtZF9tdXRleCk7CiAKIAkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLwogCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKQEAgLTMxODgsNiArMzM2MywxNCBAQAogCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCiAJcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJcHJpdi0+Y3VycmVudF9odF9jb25maWcuc21wcyA9IElFRUU4MDIxMV9TTVBTX1NUQVRJQzsKKwlwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCA9IElXTF9NSVNTRURfQkVBQ09OX1RIUkVTSE9MRF9ERUY7CisKKwkvKiBpbml0aWFsaXplIGZvcmNlIHJlc2V0ICovCisJcHJpdi0+Zm9yY2VfcmVzZXRbSVdMX1JGX1JFU0VUXS5yZXNldF9kdXJhdGlvbiA9CisJCUlXTF9ERUxBWV9ORVhUX0ZPUkNFX1JGX1JFU0VUOworCXByaXYtPmZvcmNlX3Jlc2V0W0lXTF9GV19SRVNFVF0ucmVzZXRfZHVyYXRpb24gPQorCQlJV0xfREVMQVlfTkVYVF9GT1JDRV9GV19SRUxPQUQ7CiAKIAkvKiBDaG9vc2Ugd2hpY2ggcmVjZWl2ZXJzL2FudGVubmFzIHRvIHVzZSAqLwogCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4pCkBAIC0zMjY0LDcgKzM0NDcsNiBAQAogCS5zZXRfa2V5ID0gaXdsX21hY19zZXRfa2V5LAogCS51cGRhdGVfdGtpcF9rZXkgPSBpd2xfbWFjX3VwZGF0ZV90a2lwX2tleSwKIAkuZ2V0X3N0YXRzID0gaXdsX21hY19nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cyA9IGl3bF9tYWNfZ2V0X3R4X3N0YXRzLAogCS5jb25mX3R4ID0gaXdsX21hY19jb25mX3R4LAogCS5yZXNldF90c2YgPSBpd2xfbWFjX3Jlc2V0X3RzZiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGl3bF9ic3NfaW5mb19jaGFuZ2VkLApAQCAtMzM2NSw2ICszNTQ3LDE0IEBACiAJICovCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlZ19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwkvKgorCSAqIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IganVzdCBpbiBjYXNlIGl0IGlzIGluIGEKKwkgKiBzdHJhbmdlIHN0YXRlIC4uLiBsaWtlIGJlaW5nIGxlZnQgc3RyYW5kZWQgYnkgYSBwcmltYXJ5IGtlcm5lbAorCSAqIGFuZCB0aGlzIGlzIG5vdyB0aGUga2R1bXAga2VybmVsIHRyeWluZyB0byBzdGFydCB1cAorCSAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOworCiAJaXdsX2h3X2RldGVjdChwcml2KTsKIAlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CkBAIC0zNDM5LDkgKzM2MjksOSBAQAogCWl3bF9zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwogCWl3bF9zZXR1cF9yeF9oYW5kbGVycyhwcml2KTsKIAotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogOC4gU2V0dXAgYW5kIHJlZ2lzdGVyIG1hYzgwMjExCi0JICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIDguIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWFkIFJGS0lMTCBzdGF0ZQorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkvKiBlbmFibGUgaW50ZXJydXB0cyBpZiBuZWVkZWQ6IGh3IGJ1ZyB3L2EgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwpAQCAtMzQ1MiwxNCArMzY0Miw2IEBACiAKIAlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQllcnIgPSBpd2xfc2V0dXBfbWFjKHByaXYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3JlbW92ZV9zeXNmczsKLQotCWVyciA9IGl3bF9kYmdmc19yZWdpc3Rlcihwcml2LCBEUlZfTkFNRSk7Ci0JaWYgKGVycikKLQkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzLiBJZ25vcmluZyBlcnJvcjogJWRcbiIsIGVycik7Ci0KIAkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLwogCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTM0NzEsNiArMzY1MywxOCBAQAogCiAJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CiAJaXdsX3R0X2luaXRpYWxpemUocHJpdik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgd2l0aCBtYWM4MDIxMSBhbmQgZGVidWdmcworCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwllcnIgPSBpd2xfbWFjX3NldHVwX3JlZ2lzdGVyKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3JlbW92ZV9zeXNmczsKKworCWVyciA9IGl3bF9kYmdmc19yZWdpc3Rlcihwcml2LCBEUlZfTkFNRSk7CisJaWYgKGVycikKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzLiBJZ25vcmluZyBlcnJvcjogJWRcbiIsIGVycik7CisKIAlyZXR1cm4gMDsKIAogIG91dF9yZW1vdmVfc3lzZnM6CkBAIC0zNTg5LDcgKzM3ODMsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsX2h3X2NhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXdsX2h3X2NhcmRfaWRzKSA9IHsKICNpZmRlZiBDT05GSUdfSVdMNDk2NQogCXtJV0xfUENJX0RFVklDRSgweDQyMjksIFBDSV9BTllfSUQsIGl3bDQ5NjVfYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMzAsIFBDSV9BTllfSUQsIGl3bDQ5NjVfYWduX2NmZyl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggOTVhNTdiMy4uODQ1ODMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDE0LDcgKzQxNCw2IEBACiAvKiBQcmVwYXJlIGEgU0VOU0lUSVZJVFlfQ01ELCBzZW5kIHRvIHVDb2RlIGlmIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KIHN0YXRpYyBpbnQgaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCBjbWQgOwogCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWRfb3V0ID0gewpAQCAtNDc3LDExICs0NzYsNyBAQAogCW1lbWNweSgmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksICYoY21kLnRhYmxlWzBdKSwKIAkgICAgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSk7CiAKLQlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZF9vdXQpOwotCWlmIChyZXQpCi0JCUlXTF9FUlIocHJpdiwgIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIH0KIAogdm9pZCBpd2xfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaAppbmRleCBiNmNlZjk4Li4yYjdiMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBlOTE1MDc1Li42MzgzZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjAsNyArMTIwLDYgQEAKIAlDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04gPSAweDY3LAogCiAJLyogODAyLjExaCByZWxhdGVkICovCi0JUkFEQVJfTk9USUZJQ0FUSU9OID0gMHg3MCwJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9RVUlFVF9DTUQgPSAweDcxLAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9DSEFOTkVMX1NXSVRDSCA9IDB4NzIsCiAJQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OID0gMHg3MywKQEAgLTIyNDgsMTAgKzIyNDcsMjIgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qCisgKiBCVCBjb25maWd1cmF0aW9uIGVuYWJsZSBmbGFnczoKKyAqICAgYml0IDAgLSAxOiBCVCBjaGFubmVsIGFubm91bmNlbWVudCBlbmFibGVkCisgKiAgICAgICAgICAgMDogZGlzYWJsZQorICogICBiaXQgMSAtIDE6IHByaW9yaXR5IG9mIEJUIGRldmljZSBlbmFibGVkCisgKiAgICAgICAgICAgMDogZGlzYWJsZQorICogICBiaXQgMiAtIDE6IEJUIDIgd2lyZSBzdXBwb3J0IGVuYWJsZWQKKyAqICAgICAgICAgICAwOiBkaXNhYmxlCisgKi8KICNkZWZpbmUgQlRfQ09FWF9ESVNBQkxFICgweDApCi0jZGVmaW5lIEJUX0NPRVhfTU9ERV8yVyAoMHgxKQotI2RlZmluZSBCVF9DT0VYX01PREVfM1cgKDB4MikKLSNkZWZpbmUgQlRfQ09FWF9NT0RFXzRXICgweDMpCisjZGVmaW5lIEJUX0VOQUJMRV9DSEFOTkVMX0FOTk9VTkNFIEJJVCgwKQorI2RlZmluZSBCVF9FTkFCTEVfUFJJT1JJVFkJICAgQklUKDEpCisjZGVmaW5lIEJUX0VOQUJMRV8yX1dJUkUJICAgQklUKDIpCisKKyNkZWZpbmUgQlRfQ09FWF9ESVNBQkxFICgweDApCisjZGVmaW5lIEJUX0NPRVhfRU5BQkxFICAoQlRfRU5BQkxFX0NIQU5ORUxfQU5OT1VOQ0UgfCBCVF9FTkFCTEVfUFJJT1JJVFkpCiAKICNkZWZpbmUgQlRfTEVBRF9USU1FX01JTiAoMHgwKQogI2RlZmluZSBCVF9MRUFEX1RJTUVfREVGICgweDFFKQpAQCAtMjUxMCw3ICsyNTIxLDcgQEAKIAogI2RlZmluZSBIV19DQVJEX0RJU0FCTEVEICAgMHgwMQogI2RlZmluZSBTV19DQVJEX0RJU0FCTEVEICAgMHgwMgotI2RlZmluZSBSRl9DQVJEX0RJU0FCTEVEICAgMHgwNAorI2RlZmluZSBDVF9DQVJEX0RJU0FCTEVEICAgMHgwNAogI2RlZmluZSBSWE9OX0NBUkRfRElTQUJMRUQgMHgxMAogCiBzdHJ1Y3QgaXdsX2N0X2tpbGxfY29uZmlnIHsKQEAgLTI2MTIsNiArMjYyMyw3IEBACiAjZGVmaW5lIFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEUJY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKICNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQkJY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgSVdMX01BWF9TQ0FOX1NJWkUgMTAyNAorI2RlZmluZSBJV0xfTUFYX0NNRF9TSVpFIDQwOTYKICNkZWZpbmUgSVdMX01BWF9QUk9CRV9SRVFVRVNUCQkyMDAKIAogLyoKQEAgLTI5ODQsNyArMjk5Niw3IEBACiAJX19sZTMyIGFnZ19jcmMzMl9nb29kOwogCV9fbGUzMiBhZ2dfbXBkdV9jbnQ7CiAJX19sZTMyIGFnZ19jbnQ7Ci0JX19sZTMyIHJlc2VydmVkMjsKKwlfX2xlMzIgdW5zdXBwb3J0X21jczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIElOVEVSRkVSRU5DRV9EQVRBX0FWQUlMQUJMRSAgICAgIGNwdV90b19sZTMyKDEpCkBAIC0zMDg3LDggKzMwOTksOCBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgewotCV9fbGUzMiB0ZW1wZXJhdHVyZTsKLQlfX2xlMzIgdGVtcGVyYXR1cmVfbTsKKwlfX2xlMzIgdGVtcGVyYXR1cmU7ICAgLyogcmFkaW8gdGVtcGVyYXR1cmUgKi8KKwlfX2xlMzIgdGVtcGVyYXR1cmVfbTsgLyogZm9yIDUwMDAgYW5kIHVwLCB0aGlzIGlzIHJhZGlvIHZvbHRhZ2UgKi8KIAlzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgZGJnOwogCV9fbGUzMiBzbGVlcF90aW1lOwogCV9fbGUzMiBzbG90c19vdXQ7CkBAIC0zMDk2LDcgKzMxMDgsMTIgQEAKIAlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgZGl2OwogCV9fbGUzMiByeF9lbmFibGVfY291bnRlcjsKLQlfX2xlMzIgcmVzZXJ2ZWQxOworCS8qCisJICogbnVtX29mX3Nvc19zdGF0ZXM6CisJICogIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgd2UgaGF2ZSB0byByZS10dW5lCisJICogIGluIG9yZGVyIHRvIGdldCBvdXQgb2YgYmFkIFBIWSBzdGF0dXMKKwkgKi8KKwlfX2xlMzIgbnVtX29mX3Nvc19zdGF0ZXM7CiAJX19sZTMyIHJlc2VydmVkMjsKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zMTYxLDEzICszMTc4LDMwIEBACiAKIC8qCiAgKiBNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKKyAqCisgKiB1Q29kZSBzZW5kIE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiB0byBkcml2ZXIgd2hlbiBkZXRlY3QgYmVhY29uIG1pc3NlZAorICogaW4gcmVnYXJkbGVzcyBvZiBob3cgbWFueSBtaXNzZWQgYmVhY29ucywgd2hpY2ggbWVhbiB3aGVuIGRyaXZlciByZWNlaXZlIHRoZQorICogbm90aWZpY2F0aW9uLCBpbnNpZGUgdGhlIGNvbW1hbmQsIGl0IGNhbiBmaW5kIGFsbCB0aGUgYmVhY29ucyBpbmZvcm1hdGlvbgorICogd2hpY2ggaW5jbHVkZSBudW1iZXIgb2YgdG90YWwgbWlzc2VkIGJlYWNvbnMsIG51bWJlciBvZiBjb25zZWN1dGl2ZSBtaXNzZWQKKyAqIGJlYWNvbnMsIG51bWJlciBvZiBiZWFjb25zIHJlY2VpdmVkIGFuZCBudW1iZXIgb2YgYmVhY29ucyBleHBlY3RlZCB0bworICogcmVjZWl2ZS4KKyAqCisgKiBJZiB1Q29kZSBkZXRlY3RlZCBjb25zZWN1dGl2ZV9taXNzZWRfYmVhY29ucyA+IDUsIGl0IHdpbGwgcmVzZXQgdGhlIHJhZGlvCisgKiBpbiBvcmRlciB0byBicmluZyB0aGUgcmFkaW8vUEhZIGJhY2sgdG8gd29ya2luZyBzdGF0ZTsgd2hpY2ggaGFzIG5vIHJlbGF0aW9uCisgKiB0byB3aGVuIGRyaXZlciB3aWxsIHBlcmZvcm0gc2Vuc2l0aXZpdHkgY2FsaWJyYXRpb24uCisgKgorICogRHJpdmVyIHNob3VsZCBzZXQgaXQgb3duIG1pc3NlZF9iZWFjb25fdGhyZXNob2xkIHRvIGRlY2lkZSB3aGVuIHRvIHBlcmZvcm0KKyAqIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9uIGJhc2VkIG9uIG51bWJlciBvZiBjb25zZWN1dGl2ZSBtaXNzZWQgYmVhY29ucyBpbgorICogb3JkZXIgdG8gaW1wcm92ZSBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIG5vaXN5IGVudmlyb25tZW50LgorICoKICAqLwotLyogaWYgdWNvZGUgbWlzc2VkIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCBiZWFjb25zIGluIGEgcm93LAotICogdGhlbiB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQuICovCi0jZGVmaW5lIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCAyMAorCisjZGVmaW5lIElXTF9NSVNTRURfQkVBQ09OX1RIUkVTSE9MRF9NSU4JKDEpCisjZGVmaW5lIElXTF9NSVNTRURfQkVBQ09OX1RIUkVTSE9MRF9ERUYJKDUpCisjZGVmaW5lIElXTF9NSVNTRURfQkVBQ09OX1RIUkVTSE9MRF9NQVgJSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX0RFRgogCiBzdHJ1Y3QgaXdsX21pc3NlZF9iZWFjb25fbm90aWYgewotCV9fbGUzMiBjb25zZXF1dGl2ZV9taXNzZWRfYmVhY29uczsKKwlfX2xlMzIgY29uc2VjdXRpdmVfbWlzc2VkX2JlYWNvbnM7CiAJX19sZTMyIHRvdGFsX21pc3NlZF9iZWNvbnM7CiAJX19sZTMyIG51bV9leHBlY3RlZF9iZWFjb25zOwogCV9fbGUzMiBudW1fcmVjdmRfYmVhY29uczsKQEAgLTM0MzcsMTEgKzM0NzEsNyBAQAogCUlXTF9QSFlfQ0FMSUJSQVRFX0RJRkZfR0FJTl9DTUQJCT0gNywKIAlJV0xfUEhZX0NBTElCUkFURV9EQ19DTUQJCT0gOCwKIAlJV0xfUEhZX0NBTElCUkFURV9MT19DTUQJCT0gOSwKLQlJV0xfUEhZX0NBTElCUkFURV9SWF9CQl9DTUQJCT0gMTAsCiAJSVdMX1BIWV9DQUxJQlJBVEVfVFhfSVFfQ01ECQk9IDExLAotCUlXTF9QSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRAkJPSAxMiwKLQlJV0xfUEhZX0NBTElCUkFUSU9OX05PSVNFX0NNRAkJPSAxMywKLQlJV0xfUEhZX0NBTElCUkFURV9BR0NfVEFCTEVfQ01ECQk9IDE0LAogCUlXTF9QSFlfQ0FMSUJSQVRFX0NSWVNUQUxfRlJRX0NNRAk9IDE1LAogCUlXTF9QSFlfQ0FMSUJSQVRFX0JBU0VfQkFORF9DTUQJCT0gMTYsCiAJSVdMX1BIWV9DQUxJQlJBVEVfVFhfSVFfUEVSRF9DTUQJPSAxNywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCBmMzZmODA0Li4xMTIxNDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00Nyw2ICs0NywyNiBAQAogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUICIgIiBEUlZfQVVUSE9SKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorLyoKKyAqIHNldCBidF9jb2V4X2FjdGl2ZSB0byB0cnVlLCB1Q29kZSB3aWxsIGRvIGtpbGwvZGVmZXIKKyAqIGV2ZXJ5IHRpbWUgdGhlIHByaW9yaXR5IGxpbmUgaXMgYXNzZXJ0ZWQgKEJUIGlzIHNlbmRpbmcgc2lnbmFscyBvbiB0aGUKKyAqIHByaW9yaXR5IGxpbmUgaW4gdGhlIFBDSXgpLgorICogc2V0IGJ0X2NvZXhfYWN0aXZlIHRvIGZhbHNlLCB1Q29kZSB3aWxsIGlnbm9yZSB0aGUgQlQgYWN0aXZpdHkgYW5kCisgKiBwZXJmb3JtIHRoZSBub3JtYWwgb3BlcmF0aW9uCisgKgorICogVXNlciBtaWdodCBleHBlcmllbmNlIHRyYW5zbWl0IGlzc3VlIG9uIHNvbWUgcGxhdGZvcm0gZHVlIHRvIFdpRmkvQlQKKyAqIGNvLWV4aXN0IHByb2JsZW0uIFRoZSBwb3NzaWJsZSBiZWhhdmlvcnMgYXJlOgorICogICBBYmxlIHRvIHNjYW4gYW5kIGZpbmRpbmcgYWxsIHRoZSBhdmFpbGFibGUgQVAKKyAqICAgTm90IGFibGUgdG8gYXNzb2NpYXRlIHdpdGggYW55IEFQCisgKiBPbiB0aG9zZSBwbGF0Zm9ybXMsIFdpRmkgY29tbXVuaWNhdGlvbiBjYW4gYmUgcmVzdG9yZWQgYnkgc2V0CisgKiAiYnRfY29leF9hY3RpdmUiIG1vZHVsZSBwYXJhbWV0ZXIgdG8gImZhbHNlIgorICoKKyAqIGRlZmF1bHQ6IGJ0X2NvZXhfYWN0aXZlID0gdHJ1ZSAoQlRfQ09FWF9FTkFCTEUpCisgKi8KK3N0YXRpYyBib29sIGJ0X2NvZXhfYWN0aXZlID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShidF9jb2V4X2FjdGl2ZSwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGJ0X2NvZXhfYWN0aXZlLCAiZW5hYmxlIHdpZmkvYmx1ZXRvb3RoIGNvLWV4aXN0XG4iKTsKKwogc3RhdGljIHN0cnVjdCBpd2xfd2ltYXhfY29leF9ldmVudF9lbnRyeSBjdV9wcmlvcml0aWVzW0NPRVhfTlVNX09GX0VWRU5UU10gPSB7CiAJe0NPRVhfQ1VfVU5BU1NPQ19JRExFX1JQLCBDT0VYX0NVX1VOQVNTT0NfSURMRV9XUCwKIAkgMCwgQ09FWF9VTkFTU09DX0lETEVfRkxBR1N9LApAQCAtMjU3LDggKzI3Nyw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLmluaXQocHJpdik7CiAKLQkvKiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgdGltZXIgdG8gNTEyIHVzZWNzICovCi0JaXdsX3dyaXRlOChwcml2LCBDU1JfSU5UX0NPQUxFU0NJTkcsIDUxMiAvIDMyKTsKKwkvKiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgY2FsaWJyYXRpb24gdGltZXIgdG8gZGVmYXVsdCAoNTEyIHVzZWNzKSAqLworCWl3bF93cml0ZTgocHJpdiwgQ1NSX0lOVF9DT0FMRVNDSU5HLCBJV0xfSE9TVF9JTlRfQ0FMSUJfVElNRU9VVF9ERUYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC00NTAsOCArNDcwLDYgQEAKIAlpZiAocHJpdi0+Y2ZnLT5odF9ncmVlbmZpZWxkX3N1cHBvcnQpCiAJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQ7CiAJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOwotCWh0X2luZm8tPmNhcCB8PSAoSUVFRTgwMjExX0hUX0NBUF9TTV9QUyAmCi0JCQkgICAgIChwcml2LT5jZmctPnNtX3BzX21vZGUgPDwgMikpOwogCW1heF9iaXRfcmF0ZSA9IE1BWF9CSVRfUkFURV8yMF9NSFo7CiAJaWYgKHByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgJiBCSVQoYmFuZCkpIHsKIAkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwpAQCAtNjM2LDcgKzY1NCw3IEBACiAKIHN0YXRpYyBib29sIGlzX3NpbmdsZV9yeF9zdHJlYW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXJldHVybiAhcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgfHwKKwlyZXR1cm4gcHJpdi0+Y3VycmVudF9odF9jb25maWcuc21wcyA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMgfHwKIAkgICAgICAgcHJpdi0+Y3VycmVudF9odF9jb25maWcuc2luZ2xlX2NoYWluX3N1ZmZpY2llbnQ7CiB9CiAKQEAgLTEwMDMsMjggKzEwMjEsMTggQEAKICAqLwogc3RhdGljIGludCBpd2xfZ2V0X2lkbGVfcnhfY2hhaW5fY291bnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgYWN0aXZlX2NudCkKIHsKLQlpbnQgaWRsZV9jbnQgPSBhY3RpdmVfY250OwotCWJvb2wgaXNfY2FtID0gIXRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwotCi0JLyogIyBSeCBjaGFpbnMgd2hlbiBpZGxpbmcgYW5kIG1heWJlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCi0Jc3dpdGNoIChwcml2LT5jZmctPnNtX3BzX21vZGUpIHsKLQljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX1NUQVRJQzoKLQkJaWRsZV9jbnQgPSAoaXNfY2FtKSA/IGFjdGl2ZV9jbnQgOiBJV0xfTlVNX0lETEVfQ0hBSU5TX1NJTkdMRTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDOgotCQlpZGxlX2NudCA9IChpc19jYW0pID8gSVdMX05VTV9JRExFX0NIQUlOU19EVUFMIDoKLQkJCUlXTF9OVU1fSURMRV9DSEFJTlNfU0lOR0xFOwotCQlicmVhazsKLQljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVEOgotCQlicmVhazsKLQljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0lOVkFMSUQ6CisJLyogIyBSeCBjaGFpbnMgd2hlbiBpZGxpbmcsIGRlcGVuZGluZyBvbiBTTVBTIG1vZGUgKi8KKwlzd2l0Y2ggKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMpIHsKKwljYXNlIElFRUU4MDIxMV9TTVBTX1NUQVRJQzoKKwljYXNlIElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6CisJCXJldHVybiBJV0xfTlVNX0lETEVfQ0hBSU5TX1NJTkdMRTsKKwljYXNlIElFRUU4MDIxMV9TTVBTX09GRjoKKwkJcmV0dXJuIGFjdGl2ZV9jbnQ7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBzbV9wcyBtb2RlICV1XG4iLAotCQkJcHJpdi0+Y2ZnLT5zbV9wc19tb2RlKTsKLQkJV0FSTl9PTigxKTsKLQkJYnJlYWs7CisJCVdBUk4oMSwgImludmFsaWQgU01QUyBtb2RlICVkIiwKKwkJICAgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzKTsKKwkJcmV0dXJuIGFjdGl2ZV9jbnQ7CiAJfQotCXJldHVybiBpZGxlX2NudDsKIH0KIAogLyogdXAgdG8gNCBjaGFpbnMgKi8KQEAgLTEzNjMsNyArMTM3MSwxMSBAQAogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCBmYWxzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9maCkKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9maChwcml2LCBOVUxMLCBmYWxzZSk7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIGZhbHNlLCBOVUxMLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9GV19FUlJPUlMpCiAJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOwpAQCAtMTY1OCw5ICsxNjcwLDkgQEAKIHZvaWQgaXdsX2ZyZWVfaXNyX2ljdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaWYgKHByaXYtPmljdF90YmxfdmlyKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgKHNpemVvZih1MzIpICogSUNUX0NPVU5UKSArCi0JCQkJCVBBR0VfU0laRSwgcHJpdi0+aWN0X3RibF92aXIsCi0JCQkJCXByaXYtPmljdF90YmxfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwKKwkJCQkgIChzaXplb2YodTMyKSAqIElDVF9DT1VOVCkgKyBQQUdFX1NJWkUsCisJCQkJICBwcml2LT5pY3RfdGJsX3ZpciwgcHJpdi0+aWN0X3RibF9kbWEpOwogCQlwcml2LT5pY3RfdGJsX3ZpciA9IE5VTEw7CiAJfQogfQpAQCAtMTY3Niw5ICsxNjg4LDkgQEAKIAlpZiAocHJpdi0+Y2ZnLT51c2VfaXNyX2xlZ2FjeSkKIAkJcmV0dXJuIDA7CiAJLyogYWxsb2NhdGUgc2hyYXJlZCBkYXRhIHRhYmxlICovCi0JcHJpdi0+aWN0X3RibF92aXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCAoc2l6ZW9mKHUzMikgKgotCQkJCQkJICBJQ1RfQ09VTlQpICsgUEFHRV9TSVpFLAotCQkJCQkJICAmcHJpdi0+aWN0X3RibF9kbWEpOworCXByaXYtPmljdF90YmxfdmlyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsCisJCQkJCShzaXplb2YodTMyKSAqIElDVF9DT1VOVCkgKyBQQUdFX1NJWkUsCisJCQkJCSZwcml2LT5pY3RfdGJsX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5pY3RfdGJsX3ZpcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4MTMsNiArMTgyNSwxNiBAQAogCWlmICh2YWwgPT0gMHhmZmZmZmZmZikKIAkJdmFsID0gMDsKIAorCS8qCisJICogdGhpcyBpcyBhIHcvYSBmb3IgYSBoL3cgYnVnLiB0aGUgaC93IGJ1ZyBtYXkgY2F1c2UgdGhlIFJ4IGJpdAorCSAqIChiaXQgMTUgYmVmb3JlIHNoaWZ0aW5nIGl0IHRvIDMxKSB0byBjbGVhciB3aGVuIHVzaW5nIGludGVycnVwdAorCSAqIGNvYWxlc2NpbmcuIGZvcnR1bmF0ZWx5LCBiaXRzIDE4IGFuZCAxOSBzdGF5IHNldCB3aGVuIHRoaXMgaGFwcGVucworCSAqIHNvIHdlIHVzZSB0aGVtIHRvIGRlY2lkZSBvbiB0aGUgcmVhbCBzdGF0ZSBvZiB0aGUgUnggYml0LgorCSAqIEluIG9yZGVyIHdvcmRzLCBiaXQgMTUgaXMgc2V0IGlmIGJpdCAxOCBvciBiaXQgMTkgYXJlIHNldC4KKwkgKi8KKwlpZiAodmFsICYgMHhDMDAwMCkKKwkJdmFsIHw9IDB4ODAwMDsKKwogCWludGEgPSAoMHhmZiAmIHZhbCkgfCAoKDB4ZmYwMCAmIHZhbCkgPDwgMTYpOwogCUlXTF9ERUJVR19JU1IocHJpdiwgIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHggaWN0IDB4JTA4eFxuIiwKIAkJCWludGEsIGludGFfbWFzaywgdmFsKTsKQEAgLTE5NzUsMTMgKzE5OTcsMjAgQEAKIGludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKLQkJLmZsYWdzID0gQlRfQ09FWF9NT0RFXzRXLAogCQkubGVhZF90aW1lID0gQlRfTEVBRF9USU1FX0RFRiwKIAkJLm1heF9raWxsID0gQlRfTUFYX0tJTExfREVGLAogCQkua2lsbF9hY2tfbWFzayA9IDAsCiAJCS5raWxsX2N0c19tYXNrID0gMCwKIAl9OwogCisJaWYgKCFidF9jb2V4X2FjdGl2ZSkKKwkJYnRfY21kLmZsYWdzID0gQlRfQ09FWF9ESVNBQkxFOworCWVsc2UKKwkJYnRfY21kLmZsYWdzID0gQlRfQ09FWF9FTkFCTEU7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlQgY29leCAlc1xuIiwKKwkJKGJ0X2NtZC5mbGFncyA9PSBCVF9DT0VYX0RJU0FCTEUpID8gImRpc2FibGUiIDogImFjdGl2ZSIpOworCiAJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAogCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X2NtZCksICZidF9jbWQpOwogfQpAQCAtMjU5OSw0NCArMjYyOCw0MyBAQAogRVhQT1JUX1NZTUJPTChpd2xfc2V0X21vZGUpOwogCiBpbnQgaXdsX21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7Ci0KLQlpZiAocHJpdi0+dmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKLQlwcml2LT5pd19tb2RlID0gY29uZi0+dHlwZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKGNvbmYtPm1hY19hZGRyKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwotCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJaWYgKHByaXYtPnZpZikgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGl3bF9zZXRfbW9kZShwcml2LCBjb25mLT50eXBlKSA9PSAtRUFHQUlOKQorCXByaXYtPnZpZiA9IHZpZjsKKwlwcml2LT5pd19tb2RlID0gdmlmLT50eXBlOworCisJaWYgKHZpZi0+YWRkcikgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldCAlcE1cbiIsIHZpZi0+YWRkcik7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJfQorCisJaWYgKGl3bF9zZXRfbW9kZShwcml2LCB2aWYtPnR5cGUpID09IC1FQUdBSU4pCiAJCS8qIHdlIGFyZSBub3QgcmVhZHksIHdpbGwgcnVuIGFnYWluIHdoZW4gcmVhZHkgKi8KIAkJc2V0X2JpdChTVEFUVVNfTU9ERV9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAorIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9tYWNfYWRkX2ludGVyZmFjZSk7CiAKIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCkBAIC0yNjQ5LDcgKzI2NzcsNyBAQAogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdik7CiAJfQotCWlmIChwcml2LT52aWYgPT0gY29uZi0+dmlmKSB7CisJaWYgKHByaXYtPnZpZiA9PSB2aWYpIHsKIAkJcHJpdi0+dmlmID0gTlVMTDsKIAkJbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJfQpAQCAtMjY4OSw2ICsyNzE3LDIxIEBACiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7CiAJfQogCisJaWYgKGNoYW5nZWQgJiAoSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFMgfAorCQkgICAgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKSB7CisJCS8qIG1hYzgwMjExIHVzZXMgc3RhdGljIGZvciBub24tSFQgd2hpY2ggaXMgd2hhdCB3ZSB3YW50ICovCisJCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMgPSBjb25mLT5zbXBzX21vZGU7CisKKwkJLyoKKwkJICogUmVjYWxjdWxhdGUgY2hhaW4gY291bnRzLgorCQkgKgorCQkgKiBJZiBtb25pdG9yIG1vZGUgaXMgZW5hYmxlZCB0aGVuIG1hYzgwMjExIHdpbGwKKwkJICogc2V0IHVwIHRoZSBTTSBQUyBtb2RlIHRvIE9GRiBpZiBhbiBIVCBjaGFubmVsIGlzCisJCSAqIGNvbmZpZ3VyZWQuCisJCSAqLworCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQorCQkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYpOworCX0KIAogCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAogCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKQEAgLTI3ODYsMTAgKzI4MjksNiBAQAogCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CiAJfQogCi0JLyogY2FsbCB0byBlbnN1cmUgdGhhdCA0OTY1IHJ4X2NoYWluIGlzIHNldCBwcm9wZXJseSBpbiBtb25pdG9yIG1vZGUgKi8KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQotCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4ocHJpdik7Ci0KIAlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJZ290byBvdXQ7CkBAIC0yODEyLDQyICsyODUxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX21hY19jb25maWcpOwogCi1pbnQgaXdsX21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IGksIGF2YWlsOwotCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKLQlzdHJ1Y3QgaXdsX3F1ZXVlICpxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKLQotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IEFDX05VTTsgaSsrKSB7Ci0JCXR4cSA9ICZwcml2LT50eHFbaV07Ci0JCXEgPSAmdHhxLT5xOwotCQlhdmFpbCA9IGl3bF9xdWV1ZV9zcGFjZShxKTsKLQotCQlzdGF0c1tpXS5sZW4gPSBxLT5uX3dpbmRvdyAtIGF2YWlsOwotCQlzdGF0c1tpXS5saW1pdCA9IHEtPm5fd2luZG93IC0gcS0+aGlnaF9tYXJrOwotCQlzdGF0c1tpXS5jb3VudCA9IHEtPm5fd2luZG93OwotCi0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9tYWNfZ2V0X3R4X3N0YXRzKTsKLQogdm9pZCBpd2xfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKQEAgLTMxOTcsNiArMzIwMCwyMDcgQEAKIEVYUE9SVF9TWU1CT0woaXdsX3VwZGF0ZV9zdGF0cyk7CiAjZW5kaWYKIAorY29uc3Qgc3RhdGljIGNoYXIgKmdldF9jc3Jfc3RyaW5nKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwkJSVdMX0NNRChDU1JfSFdfSUZfQ09ORklHX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0lOVF9DT0FMRVNDSU5HKTsKKwkJSVdMX0NNRChDU1JfSU5UKTsKKwkJSVdMX0NNRChDU1JfSU5UX01BU0spOworCQlJV0xfQ01EKENTUl9GSF9JTlRfU1RBVFVTKTsKKwkJSVdMX0NNRChDU1JfR1BJT19JTik7CisJCUlXTF9DTUQoQ1NSX1JFU0VUKTsKKwkJSVdMX0NNRChDU1JfR1BfQ05UUkwpOworCQlJV0xfQ01EKENTUl9IV19SRVYpOworCQlJV0xfQ01EKENTUl9FRVBST01fUkVHKTsKKwkJSVdMX0NNRChDU1JfRUVQUk9NX0dQKTsKKwkJSVdMX0NNRChDU1JfT1RQX0dQX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dJT19SRUcpOworCQlJV0xfQ01EKENTUl9HUF9VQ09ERV9SRUcpOworCQlJV0xfQ01EKENTUl9HUF9EUklWRVJfUkVHKTsKKwkJSVdMX0NNRChDU1JfVUNPREVfRFJWX0dQMSk7CisJCUlXTF9DTUQoQ1NSX1VDT0RFX0RSVl9HUDIpOworCQlJV0xfQ01EKENTUl9MRURfUkVHKTsKKwkJSVdMX0NNRChDU1JfRFJBTV9JTlRfVEJMX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dJT19DSElDS0VOX0JJVFMpOworCQlJV0xfQ01EKENTUl9BTkFfUExMX0NGRyk7CisJCUlXTF9DTUQoQ1NSX0hXX1JFVl9XQV9SRUcpOworCQlJV0xfQ01EKENTUl9EQkdfSFBFVF9NRU1fUkVHKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCisJfQorfQorCit2b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJdTMyIGNzcl90YmxbXSA9IHsKKwkJQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCUNTUl9JTlRfQ09BTEVTQ0lORywKKwkJQ1NSX0lOVCwKKwkJQ1NSX0lOVF9NQVNLLAorCQlDU1JfRkhfSU5UX1NUQVRVUywKKwkJQ1NSX0dQSU9fSU4sCisJCUNTUl9SRVNFVCwKKwkJQ1NSX0dQX0NOVFJMLAorCQlDU1JfSFdfUkVWLAorCQlDU1JfRUVQUk9NX1JFRywKKwkJQ1NSX0VFUFJPTV9HUCwKKwkJQ1NSX09UUF9HUF9SRUcsCisJCUNTUl9HSU9fUkVHLAorCQlDU1JfR1BfVUNPREVfUkVHLAorCQlDU1JfR1BfRFJJVkVSX1JFRywKKwkJQ1NSX1VDT0RFX0RSVl9HUDEsCisJCUNTUl9VQ09ERV9EUlZfR1AyLAorCQlDU1JfTEVEX1JFRywKKwkJQ1NSX0RSQU1fSU5UX1RCTF9SRUcsCisJCUNTUl9HSU9fQ0hJQ0tFTl9CSVRTLAorCQlDU1JfQU5BX1BMTF9DRkcsCisJCUNTUl9IV19SRVZfV0FfUkVHLAorCQlDU1JfREJHX0hQRVRfTUVNX1JFRworCX07CisJSVdMX0VSUihwcml2LCAiQ1NSIHZhbHVlczpcbiIpOworCUlXTF9FUlIocHJpdiwgIigybmQgYnl0ZSBvZiBDU1JfSU5UX0NPQUxFU0NJTkcgaXMgIgorCQkiQ1NSX0lOVF9QRVJJT0RJQ19SRUcpXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgIEFSUkFZX1NJWkUoY3NyX3RibCk7IGkrKykgeworCQlJV0xfRVJSKHByaXYsICIgICUyNXM6IDBYJTA4eFxuIiwKKwkJCWdldF9jc3Jfc3RyaW5nKGNzcl90YmxbaV0pLAorCQkJaXdsX3JlYWQzMihwcml2LCBjc3JfdGJsW2ldKSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9jc3IpOworCitjb25zdCBzdGF0aWMgY2hhciAqZ2V0X2ZoX3N0cmluZyhpbnQgY21kKQoreworCXN3aXRjaCAoY21kKSB7CisJCUlXTF9DTUQoRkhfUlNDU1JfQ0hOTDBfU1RUU19XUFRSX1JFRyk7CisJCUlXTF9DTUQoRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcpOworCQlJV0xfQ01EKEZIX1JTQ1NSX0NITkwwX1dQVFIpOworCQlJV0xfQ01EKEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcpOworCQlJV0xfQ01EKEZIX01FTV9SU1NSX1NIQVJFRF9DVFJMX1JFRyk7CisJCUlXTF9DTUQoRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRyk7CisJCUlXTF9DTUQoRkhfTUVNX1JTU1JfUlhfRU5BQkxFX0VSUl9JUlEyRFJWKTsKKwkJSVdMX0NNRChGSF9UU1NSX1RYX1NUQVRVU19SRUcpOworCQlJV0xfQ01EKEZIX1RTU1JfVFhfRVJST1JfUkVHKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCisJfQorfQorCitpbnQgaXdsX2R1bXBfZmgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpCit7CisJaW50IGk7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpbnQgcG9zID0gMDsKKwlzaXplX3QgYnVmc3ogPSAwOworI2VuZGlmCisJdTMyIGZoX3RibFtdID0geworCQlGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHLAorCQlGSF9SU0NTUl9DSE5MMF9SQkRDQl9CQVNFX1JFRywKKwkJRkhfUlNDU1JfQ0hOTDBfV1BUUiwKKwkJRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRywKKwkJRkhfTUVNX1JTU1JfU0hBUkVEX0NUUkxfUkVHLAorCQlGSF9NRU1fUlNTUl9SWF9TVEFUVVNfUkVHLAorCQlGSF9NRU1fUlNTUl9SWF9FTkFCTEVfRVJSX0lSUTJEUlYsCisJCUZIX1RTU1JfVFhfU1RBVFVTX1JFRywKKwkJRkhfVFNTUl9UWF9FUlJPUl9SRUcKKwl9OworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKGRpc3BsYXkpIHsKKwkJYnVmc3ogPSBBUlJBWV9TSVpFKGZoX3RibCkgKiA0OCArIDQwOworCQkqYnVmID0ga21hbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghKmJ1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwb3MgKz0gc2NucHJpbnRmKCpidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJGSCByZWdpc3RlciB2YWx1ZXM6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmhfdGJsKTsgaSsrKSB7CisJCQlwb3MgKz0gc2NucHJpbnRmKCpidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSIgICUzNHM6IDBYJTA4eFxuIiwKKwkJCQlnZXRfZmhfc3RyaW5nKGZoX3RibFtpXSksCisJCQkJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgZmhfdGJsW2ldKSk7CisJCX0KKwkJcmV0dXJuIHBvczsKKwl9CisjZW5kaWYKKwlJV0xfRVJSKHByaXYsICJGSCByZWdpc3RlciB2YWx1ZXM6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgIEFSUkFZX1NJWkUoZmhfdGJsKTsgaSsrKSB7CisJCUlXTF9FUlIocHJpdiwgIiAgJTM0czogMFglMDh4XG4iLAorCQkJZ2V0X2ZoX3N0cmluZyhmaF90YmxbaV0pLAorCQkJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgZmhfdGJsW2ldKSk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9maCk7CisKK3N0YXRpYyB2b2lkIGl3bF9mb3JjZV9yZl9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJmb3JjZSByZXNldCByZWplY3RlZDogbm90IGFzc29jaWF0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCS8qCisJICogVGhlcmUgaXMgbm8gZWFzeSBhbmQgYmV0dGVyIHdheSB0byBmb3JjZSByZXNldCB0aGUgcmFkaW8sCisJICogdGhlIG9ubHkga25vd24gbWV0aG9kIGlzIHN3aXRjaGluZyBjaGFubmVsIHdoaWNoIHdpbGwgZm9yY2UgdG8KKwkgKiByZXNldCBhbmQgdHVuZSB0aGUgcmFkaW8uCisJICogVXNlIGludGVybmFsIHNob3J0IHNjYW4gKHNpbmdsZSBjaGFubmVsKSBvcGVyYXRpb24gdG8gc2hvdWxkCisJICogYWNoaWV2ZSB0aGlzIG9iamVjdGl2ZS4KKwkgKiBEcml2ZXIgc2hvdWxkIHJlc2V0IHRoZSByYWRpbyB3aGVuIG51bWJlciBvZiBjb25zZWN1dGl2ZSBtaXNzZWQKKwkgKiBiZWFjb24sIG9yIGFueSBvdGhlciB1Q29kZSBlcnJvciBjb25kaXRpb24gZGV0ZWN0ZWQuCisJICovCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBlcmZvcm0gcmFkaW8gcmVzZXQuXG4iKTsKKwlpd2xfaW50ZXJuYWxfc2hvcnRfaHdfc2Nhbihwcml2KTsKKwlyZXR1cm47Cit9CisKKworaW50IGl3bF9mb3JjZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQoreworCXN0cnVjdCBpd2xfZm9yY2VfcmVzZXQgKmZvcmNlX3Jlc2V0OworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtb2RlID49IElXTF9NQVhfRk9SQ0VfUkVTRVQpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgImludmFsaWQgcmVzZXQgcmVxdWVzdC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZm9yY2VfcmVzZXQgPSAmcHJpdi0+Zm9yY2VfcmVzZXRbbW9kZV07CisJZm9yY2VfcmVzZXQtPnJlc2V0X3JlcXVlc3RfY291bnQrKzsKKwlpZiAoZm9yY2VfcmVzZXQtPmxhc3RfZm9yY2VfcmVzZXRfamlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKGZvcmNlX3Jlc2V0LT5sYXN0X2ZvcmNlX3Jlc2V0X2ppZmZpZXMgKworCSAgICBmb3JjZV9yZXNldC0+cmVzZXRfZHVyYXRpb24sIGppZmZpZXMpKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJmb3JjZSByZXNldCByZWplY3RlZFxuIik7CisJCWZvcmNlX3Jlc2V0LT5yZXNldF9yZWplY3RfY291bnQrKzsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWZvcmNlX3Jlc2V0LT5yZXNldF9zdWNjZXNzX2NvdW50Kys7CisJZm9yY2VfcmVzZXQtPmxhc3RfZm9yY2VfcmVzZXRfamlmZmllcyA9IGppZmZpZXM7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBlcmZvcm0gZm9yY2UgcmVzZXQgKCVkKVxuIiwgbW9kZSk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBJV0xfUkZfUkVTRVQ6CisJCWl3bF9mb3JjZV9yZl9yZXNldChwcml2KTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfRldfUkVTRVQ6CisJCUlXTF9FUlIocHJpdiwgIk9uIGRlbWFuZCBmaXJtd2FyZSByZWxvYWRcbiIpOworCQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLworCQlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKwkJLyoKKwkJICogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAorCQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0CisJCSAqLworCQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAKIGludCBpd2xfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCBiNjllOTcyLi40ZWY3NzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjMsOCArNjMsNiBAQAogI2lmbmRlZiBfX2l3bF9jb3JlX2hfXwogI2RlZmluZSBfX2l3bF9jb3JlX2hfXwogCi0jaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKgogICogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKgogICoqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTcyLDggKzcwLDggQEAKIHN0cnVjdCBpd2xfY21kOwogCiAKLSNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OIFVUU19SRUxFQVNFICItayIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICJpbi10cmVlOiIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKIAogI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCkBAIC0xMTksNiArMTE3LDcgQEAKIHN0cnVjdCBpd2xfdGVtcF9vcHMgewogCXZvaWQgKCp0ZW1wZXJhdHVyZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAl2b2lkICgqc2V0X2N0X2tpbGwpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJdm9pZCAoKnNldF9jYWxpYl92ZXJzaW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAogc3RydWN0IGl3bF91Y29kZV9vcHMgewpAQCAtMTY5LDggKzE2OCwxMSBAQAogCWludCAoKmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIpKHUzMiBhZGRyKTsKIAkvKiAxc3QgdWNvZGUgbG9hZCAqLwogCWludCAoKmxvYWRfdWNvZGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmR1bXBfbmljX2V2ZW50X2xvZykoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKTsKKwlpbnQgKCpkdW1wX25pY19ldmVudF9sb2cpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIGJvb2wgZnVsbF9sb2csIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAJdm9pZCAoKmR1bXBfbmljX2Vycm9yX2xvZykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqZHVtcF9jc3IpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJaW50ICgqZHVtcF9maCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwogCWludCAoKnNldF9jaGFubmVsX3N3aXRjaCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCk7CiAJLyogcG93ZXIgbWFuYWdlbWVudCAqLwogCXN0cnVjdCBpd2xfYXBtX29wcyBhcG1fb3BzOwpAQCAtMTg3LDYgKzE4OSw4IEBACiAKIAkvKiB0ZW1wZXJhdHVyZSAqLwogCXN0cnVjdCBpd2xfdGVtcF9vcHMgdGVtcF9vcHM7CisJLyogc3RhdGlvbiBtYW5hZ2VtZW50ICovCisJdm9pZCAoKmFkZF9iY2FzdF9zdGF0aW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAogc3RydWN0IGl3bF9sZWRfb3BzIHsKQEAgLTIzMCw4ICsyMzQsOSBAQAogICogQGNoYWluX25vaXNlX251bV9iZWFjb25zOiBudW1iZXIgb2YgYmVhY29ucyB1c2VkIHRvIGNvbXB1dGUgY2hhaW4gbm9pc2UKICAqIEBhZHZfdGhlcm1hbF90aHJvdHRsZTogc3VwcG9ydCBhZHZhbmNlIHRoZXJtYWwgdGhyb3R0bGUKICAqIEBzdXBwb3J0X2N0X2tpbGxfZXhpdDogc3VwcG9ydCBjdCBraWxsIGV4aXQgY29uZGl0aW9uCi0gKiBAc21fcHNfbW9kZTogc3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZSBtb2RlCiAgKiBAc3VwcG9ydF93aW1heF9jb2V4aXN0OiBzdXBwb3J0IHdpbWF4L3dpZmkgY28tZXhpc3QKKyAqIEBwbGNwX2RlbHRhX3RocmVzaG9sZDogcGxjcCBlcnJvciByYXRlIHRocmVzaG9sZCB1c2VkIHRvIHRyaWdnZXIKKyAqCXJhZGlvIHR1bmluZyB3aGVuIHRoZXJlIGlzIGEgaGlnaCByZWNlaXZpbmcgcGxjcCBlcnJvciByYXRlCiAgKgogICogV2UgZW5hYmxlIHRoZSBkcml2ZXIgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3cnQgQVBJIHZlcnNpb24uIFRoZQogICogZHJpdmVyIHNwZWNpZmllcyB3aGljaCBBUElzIGl0IHN1cHBvcnRzICh3aXRoIEB1Y29kZV9hcGlfbWF4IGJlaW5nIHRoZQpAQCAtMjg3LDggKzI5Miw5IEBACiAJY29uc3QgYm9vbCBzdXBwb3J0c19pZGxlOwogCWJvb2wgYWR2X3RoZXJtYWxfdGhyb3R0bGU7CiAJYm9vbCBzdXBwb3J0X2N0X2tpbGxfZXhpdDsKLQl1OCBzbV9wc19tb2RlOwogCWNvbnN0IGJvb2wgc3VwcG9ydF93aW1heF9jb2V4aXN0OworCXU4IHBsY3BfZGVsdGFfdGhyZXNob2xkOworCXMzMiBjaGFpbl9ub2lzZV9zY2FsZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMiwxMyArMzM4LDExIEBACiBpbnQgaXdsX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOwogaW50IGl3bF9tYWNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIGludCBpd2xfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwogdm9pZCBpd2xfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsX21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBpd2xfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBpbnQgaXdsX2FsbG9jX3R4cV9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2ZyZWVfdHhxX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtNDExLDEzICs0MTUsMTMgQEAKIHZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit2b2lkIGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpOwogdm9pZCBpd2xfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwogdm9pZCBpd2xfcnhfcmVwbGVuaXNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yeF9yZXBsZW5pc2hfbm93KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwotaW50IGl3bF9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpOwogdm9pZCBpd2xfcnhfYWxsb2NhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBnZnBfdCBwcmlvcml0eSk7CiB2b2lkIGl3bF90eF9jbWRfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CkBAIC00MjUsNiArNDI5LDggQEAKIC8qIEhhbmRsZXJzICovCiB2b2lkIGl3bF9yeF9taXNzZWRfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Cit2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiB2b2lkIGl3bF9yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIHZvaWQgaXdsX3JlcGx5X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtNDQ1LDkgKzQ1MSw5IEBACiB2b2lkIGl3bF9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKLWludCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogdm9pZCBpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICBpbnQgc3RhX2lkLCBpbnQgdGlkLCBpbnQgZnJlZWQpOwordm9pZCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKIHZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKTsKQEAgLTQ5Nyw2ICs1MDMsOCBAQAogaW50IGl3bF9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcyk7CiBpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworaW50IGl3bF9pbnRlcm5hbF9zaG9ydF9od19zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2ZvcmNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOwogdTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCiAJCSAgICAgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIGludCBsZWZ0KTsKIHZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTUyNywxNCArNTM1LDYgQEAKIGludCBpd2xfY2FsaWJfc2V0KHN0cnVjdCBpd2xfY2FsaWJfcmVzdWx0ICpyZXMsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pOwogdm9pZCBpd2xfY2FsaWJfZnJlZV9yZXN1bHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTcGVjdHJ1bSBNZWFzdXJlZW10bnMgaW4gIGl3bC1zcGVjdHJ1bS5jCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCi12b2lkIGl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7fQotI2VuZGlmCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgUyBlIG4gZCBpIG4gZyAgICAgSCBvIHMgdCAgICAgQyBvIG0gbSBhIG4gZCBzICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTgzLDcgKzU4MywxMCBAQAogKiAgRXJyb3IgSGFuZGxpbmcgRGVidWdnaW5nCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpOworaW50IGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgYm9vbCBmdWxsX2xvZywgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKK3ZvaWQgaXdsX2R1bXBfY3NyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2R1bXBfZmgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiB2b2lkIGl3bF9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAjZWxzZQpAQCAtNjAzLDcgKzYwNiw3IEBACiAvKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCiAKICNkZWZpbmUgU1RBVFVTX0hDTURfQUNUSVZFCTAJLyogaG9zdCBjb21tYW5kIGluIHByb2dyZXNzICovCi0jZGVmaW5lIFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFCTEJLyogc3luYyBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KKy8qIDEgaXMgdW51c2VkICh1c2VkIHRvIGJlIFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFKSAqLwogI2RlZmluZSBTVEFUVVNfSU5UX0VOQUJMRUQJMgogI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9IVwkzCiAjZGVmaW5lIFNUQVRVU19DVF9LSUxMCQk0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IDFlYzhjYjQuLjgwOGI3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzY5LDcgKzM2OSw3IEBACiAjZGVmaW5lIENTUl9HUF9EUklWRVJfUkVHX0JJVF9SQURJT19TS1VfM3gzX0hZQgkgICAgKDB4MDAwMDAwMDApCiAjZGVmaW5lIENTUl9HUF9EUklWRVJfUkVHX0JJVF9SQURJT19TS1VfMngyX0hZQgkgICAgKDB4MDAwMDAwMDEpCiAjZGVmaW5lIENTUl9HUF9EUklWRVJfUkVHX0JJVF9SQURJT19TS1VfMngyX0lQQQkgICAgKDB4MDAwMDAwMDIpCi0KKyNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX0NBTElCX1ZFUlNJT042CSgweDAwMDAwMDA0KQogCiAvKiBHSU8gQ2hpY2tlbiBCaXRzIChQQ0kgRXhwcmVzcyBidXMgbGluayBwb3dlciBtYW5hZ2VtZW50KSAqLwogI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKaW5kZXggZDYxMjkzYS4uMWM3YjUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgogICoKQEAgLTY3LDU3ICs2Nyw2IEBACiAJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwgcCwgbGVuLCAxKTsJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKLXN0cnVjdCBpd2xfZGVidWdmcyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXJfZHJ2OwotCXN0cnVjdCBkZW50cnkgKmRpcl9kYXRhOwotCXN0cnVjdCBkZW50cnkgKmRpcl9kZWJ1ZzsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXJfcmY7Ci0Jc3RydWN0IGRpcl9kYXRhX2ZpbGVzIHsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9zcmFtOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX252bTsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0aW9uczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9sb2dfZXZlbnQ7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhbm5lbHM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdHVzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2ludGVycnVwdDsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9xb3M7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfdGhlcm1hbF90aHJvdHRsaW5nOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xlZDsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX2h0NDA7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfc2xlZXBfbGV2ZWxfb3ZlcnJpZGU7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfY3VycmVudF9zbGVlcF9jb21tYW5kOwotCX0gZGJnZnNfZGF0YV9maWxlczsKLQlzdHJ1Y3QgZGlyX3JmX2ZpbGVzIHsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5OwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfY2hhaW5fbm9pc2U7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfZGlzYWJsZV90eF9wb3dlcjsKLQl9IGRiZ2ZzX3JmX2ZpbGVzOwotCXN0cnVjdCBkaXJfZGVidWdfZmlsZXMgewotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3J4X3N0YXRpc3RpY3M7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfc3RhdGlzdGljczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90cmFmZmljX2xvZzsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9yeF9xdWV1ZTsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9xdWV1ZTsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV91Y29kZV9yeF9zdGF0czsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV91Y29kZV90eF9zdGF0czsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV91Y29kZV9nZW5lcmFsX3N0YXRzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3NlbnNpdGl2aXR5OwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2NoYWluX25vaXNlOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3R4X3Bvd2VyOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Bvd2VyX3NhdmVfc3RhdHVzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2NsZWFyX3Vjb2RlX3N0YXRpc3RpY3M7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfY2xlYXJfdHJhZmZpY19zdGF0aXN0aWNzOwotCX0gZGJnZnNfZGVidWdfZmlsZXM7Ci0JdTMyIHNyYW1fb2Zmc2V0OwotCXUzMiBzcmFtX2xlbjsKLX07Ci0KLWludCBpd2xfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgaXdsX2RiZ2ZzX3VucmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLSNlbmRpZgotCiAjZWxzZQogI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQpAQCAtMTI2LDkgKzc1LDEwIEBACiB7fQogI2VuZGlmCQkJCS8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKLQotCi0jaWZuZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCitpbnQgaXdsX2RiZ2ZzX3JlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIGl3bF9kYmdmc191bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXdsX2RiZ2ZzX3JlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCAyMWUwZjY2Li43YmY0NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00MSw0MyArNDEsMjggQEAKICNpbmNsdWRlICJpd2wtY2FsaWIuaCIKIAogLyogY3JlYXRlIGFuZCByZW1vdmUgb2YgZmlsZXMgKi8KLSNkZWZpbmUgREVCVUdGU19BRERfRElSKG5hbWUsIHBhcmVudCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkYmdmcy0+ZGlyXyMjbmFtZSA9IGRlYnVnZnNfY3JlYXRlX2RpcigjbmFtZSwgcGFyZW50KTsgICAgICAgICAgXAotCWlmICghKGRiZ2ZzLT5kaXJfIyNuYW1lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWdvdG8gZXJyOyAJCQkJCQlcCisjZGVmaW5lIERFQlVHRlNfQUREX0ZJTEUobmFtZSwgcGFyZW50LCBtb2RlKSBkbyB7CQkJXAorCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgbW9kZSwgcGFyZW50LCBwcml2LAkJXAorCQkJCSAmaXdsX2RiZ2ZzXyMjbmFtZSMjX29wcykpCQlcCisJCWdvdG8gZXJyOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgREVCVUdGU19BRERfRklMRShuYW1lLCBwYXJlbnQsIG1vZGUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSA9ICAgICAgICAgICAgICAgICAgICAgXAotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIG1vZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJZGJnZnMtPmRpcl8jI3BhcmVudCwgcHJpdiwgICAgICAgICAgICAgIFwKLQkJCQkmaXdsX2RiZ2ZzXyMjbmFtZSMjX29wcyk7ICAgICAgICAgICAgICAgXAotCWlmICghKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKSkgICAgICAgICAgICAgICBcCi0JCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUJVR0ZTX0FERF9CT09MKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7CQkJXAorCXN0cnVjdCBkZW50cnkgKl9fdG1wOwkJCQkJCVwKKwlfX3RtcCA9IGRlYnVnZnNfY3JlYXRlX2Jvb2woI25hbWUsIFNfSVdVU1IgfCBTX0lSVVNSLAkJXAorCQkJCSAgICBwYXJlbnQsIHB0cik7CQkJXAorCWlmIChJU19FUlIoX190bXApIHx8ICFfX3RtcCkJCQkJCVwKKwkJZ290byBlcnI7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBERUJVR0ZTX0FERF9CT09MKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCi0JZGVidWdmc19jcmVhdGVfYm9vbCgjbmFtZSwgU19JV1VTUiB8IFNfSVJVU1IsICAgICAgICAgICAgICAgICAgIFwKLQkJCSAgICBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgICAgICAgICAgICAgICAgIFwKLQlpZiAoSVNfRVJSKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQkJXAotCQkJfHwgIWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQlcCi0JCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsJCQkJXAorCXN0cnVjdCBkZW50cnkgKl9fdG1wOwkJCQkJCVwKKwlfX3RtcCA9IGRlYnVnZnNfY3JlYXRlX3gzMigjbmFtZSwgU19JV1VTUiB8IFNfSVJVU1IsCQlcCisJCQkJICAgcGFyZW50LCBwdHIpOwkJCVwKKwlpZiAoSVNfRVJSKF9fdG1wKSB8fCAhX190bXApCQkJCQlcCisJCWdvdG8gZXJyOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgREVCVUdGU19BRERfWDMyKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCi0JZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCBTX0lSVVNSLCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgIFwKLQlpZiAoSVNfRVJSKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQkJXAotCQkJfHwgIWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQlcCi0JCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBERUJVR0ZTX1JFTU9WRShuYW1lKSAgZG8geyAgICAgICAgICAgICAgXAotCWRlYnVnZnNfcmVtb3ZlKG5hbWUpOyAgICAgICAgICAgICAgICAgICBcCi0JbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApOwotCiAvKiBmaWxlIG9wZXJhdGlvbiAqLwogI2RlZmluZSBERUJVR0ZTX1JFQURfRlVOQyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzXyMjbmFtZSMjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsICAgICAgICAgICAgICAgXApAQCAtMTI1LDcgKzExMCw3IEBACiAJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciAqYnVmOwogCWludCBwb3MgPSAwOwogCkBAIC0xODQsNyArMTY5LDcgQEAKIAkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyICpidWY7CiAJaW50IHBvcyA9IDA7CiAJaW50IGNudDsKQEAgLTIzMiwyOCArMjE3LDI4IEBACiAJc3NpemVfdCByZXQ7CiAJaW50IGk7CiAJaW50IHBvcyA9IDA7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc2l6ZV90IGJ1ZnN6OwogCiAJLyogZGVmYXVsdCBpcyB0byBkdW1wIHRoZSBlbnRpcmUgZGF0YSBzZWdtZW50ICovCi0JaWYgKCFwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgJiYgIXByaXYtPmRiZ2ZzLT5zcmFtX2xlbikgewotCQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgPSAweDgwMDAwMDsKKwlpZiAoIXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ICYmICFwcml2LT5kYmdmc19zcmFtX2xlbikgeworCQlwcml2LT5kYmdmc19zcmFtX29mZnNldCA9IDB4ODAwMDAwOwogCQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQkJcHJpdi0+ZGJnZnMtPnNyYW1fbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKIAkJZWxzZQotCQkJcHJpdi0+ZGJnZnMtPnNyYW1fbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47CisJCQlwcml2LT5kYmdmc19zcmFtX2xlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwogCX0KLQlidWZzeiA9ICAzMCArIHByaXYtPmRiZ2ZzLT5zcmFtX2xlbiAqIHNpemVvZihjaGFyKSAqIDEwOworCWJ1ZnN6ID0gIDMwICsgcHJpdi0+ZGJnZnNfc3JhbV9sZW4gKiBzaXplb2YoY2hhcikgKiAxMDsKIAlidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic3JhbV9sZW46IDB4JXhcbiIsCi0JCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4pOworCQkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4pOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNyYW1fb2Zmc2V0OiAweCV4XG4iLAotCQkJcHJpdi0+ZGJnZnMtPnNyYW1fb2Zmc2V0KTsKLQlmb3IgKGkgPSBwcml2LT5kYmdmcy0+c3JhbV9sZW47IGkgPiAwOyBpIC09IDQpIHsKLQkJdmFsID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHJpdi0+ZGJnZnMtPnNyYW1fb2Zmc2V0ICsgXAotCQkJCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gLSBpKTsKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0KTsKKwlmb3IgKGkgPSBwcml2LT5kYmdmc19zcmFtX2xlbjsgaSA+IDA7IGkgLT0gNCkgeworCQl2YWwgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwcml2LT5kYmdmc19zcmFtX29mZnNldCArIFwKKwkJCQkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4gLSBpKTsKIAkJaWYgKGkgPCA0KSB7CiAJCQlzd2l0Y2ggKGkpIHsKIAkJCWNhc2UgMToKQEAgLTI5MywxMSArMjc4LDExIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHNzY2FuZihidWYsICIleCwleCIsICZvZmZzZXQsICZsZW4pID09IDIpIHsKLQkJcHJpdi0+ZGJnZnMtPnNyYW1fb2Zmc2V0ID0gb2Zmc2V0OwotCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gPSBsZW47CisJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ID0gb2Zmc2V0OworCQlwcml2LT5kYmdmc19zcmFtX2xlbiA9IGxlbjsKIAl9IGVsc2UgewotCQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgPSAwOwotCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gPSAwOworCQlwcml2LT5kYmdmc19zcmFtX29mZnNldCA9IDA7CisJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gMDsKIAl9CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0zMDYsNyArMjkxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19zdGF0aW9uc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKIAlpbnQgbWF4X3N0YSA9IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7CiAJY2hhciAqYnVmOwpAQCAtMzc2LDcgKzM2MSw3IEBACiAJCQkJICAgICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMCwgb2ZzID0gMCwgYnVmX3NpemUgPSAwOwogCWNvbnN0IHU4ICpwdHI7CiAJY2hhciAqYnVmOwpAQCAtNDIwLDYgKzQwNSwyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19sb2dfZXZlbnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisJaW50IHBvcyA9IDA7CisJc3NpemVfdCByZXQgPSAtRU5PTUVNOworCisJcmV0ID0gcG9zID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKAorCQkJCQlwcml2LCB0cnVlLCAmYnVmLCB0cnVlKTsKKwlpZiAoYnVmKSB7CisJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCQlrZnJlZShidWYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfbG9nX2V2ZW50X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtNDM2LDcgKzQzOSw4IEBACiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZldmVudF9sb2dfZmxhZykgIT0gMSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGV2ZW50X2xvZ19mbGFnID09IDEpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCB0cnVlKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIHRydWUsCisJCQkJCQkJTlVMTCwgZmFsc2UpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNDQ2LDcgKzQ1MCw3IEBACiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfY2hhbm5lbHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzdXBwX2JhbmQgPSBOVUxMOwogCWludCBwb3MgPSAwLCBpLCBidWZzeiA9IFBBR0VfU0laRTsKQEAgLTUxOSwxNSArNTIzLDEzIEBACiAJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNTEyXTsKIAlpbnQgcG9zID0gMDsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKIAogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19IQ01EX0FDVElWRTpcdCAlZFxuIiwKIAkJdGVzdF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkU6ICVkXG4iLAotCQl0ZXN0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19JTlRfRU5BQkxFRDpcdCAlZFxuIiwKIAkJdGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSk7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1JGX0tJTExfSFc6XHQgJWRcbiIsCkBAIC01NjcsNyArNTY5LDcgQEAKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJaW50IGNudCA9IDA7CiAJY2hhciAqYnVmOwpAQCAtNjU0LDcgKzY1Niw3IEBACiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcW9zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDAsIGk7CiAJY2hhciBidWZbMjU2XTsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKQEAgLTY3Nyw3ICs2NzksNyBAQAogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2xlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMDsKIAljaGFyIGJ1ZlsyNTZdOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtNzAzLDcgKzcwNSw3IEBACiAJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKIAlzdHJ1Y3QgaXdsX3R0X3Jlc3RyaWN0aW9uICpyZXN0cmljdGlvbjsKIAljaGFyIGJ1ZlsxMDBdOwpAQCAtNzYzLDcgKzc2NSw3IEBACiAJCQkJCSBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1ZlsxMDBdOwogCWludCBwb3MgPSAwOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtODExLDcgKzgxMyw5IEBACiAKIAlwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlID0gdmFsdWU7CiAKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIHRydWUpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODIwLDcgKzgyNCw3IEBACiAJCQkJCQkgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1ZlsxMF07CiAJaW50IHBvcywgdmFsdWU7CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CkBAIC04MzgsNyArODQyLDcgQEAKIAkJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbMjAwXTsKIAlpbnQgcG9zID0gMCwgaTsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKQEAgLTg1OSw3ICs4NjMsNyBAQAogfQogCiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoc3JhbSk7Ci1ERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGxvZ19ldmVudCk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMobG9nX2V2ZW50KTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhudm0pOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXRpb25zKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhjaGFubmVscyk7CkBAIC05NzYsNyArOTgwLDcgQEAKIAkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAljaGFyICpidWY7CkBAIC0xMDIyLDcgKzEwMjYsNyBAQAogCQkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJY2hhciBidWZbMjU2XTsKIAlpbnQgcG9zID0gMDsKQEAgLTEwNjMsMzYgKzEwNjcsMzMgQEAKIAlyZXR1cm4gcDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgdWNvZGVfc3RhdHNfaGVhZGVyW10gPQorCSIlLTMycyAgICAgY3VycmVudCAgYWN1bXVsYXRpdmUgICAgICAgZGVsdGEgICAgICAgICBtYXhcbiI7CitzdGF0aWMgY29uc3QgY2hhciB1Y29kZV9zdGF0c19zaG9ydF9mb3JtYXRbXSA9CisJIiAgJS0zMHMgJTEwdVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHVjb2RlX3N0YXRzX2Zvcm1hdFtdID0KKwkiICAlLTMwcyAlMTB1ICAlMTB1ICAlMTB1ICAlMTB1XG4iOwogCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdWNvZGVfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMDsKIAljaGFyICpidWY7Ci0JaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSkgKiAyMCArCi0JCXNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDIwICsKLQkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSkgKiAyMCArIDQwMDsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5KSAqIDQwICsKKwkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkpICogNDAgKworCQlzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfaHRfcGh5KSAqIDQwICsgNDAwOwogCXNzaXplX3QgcmV0OwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqb2ZkbSwgKmFjY3VtX29mZG07Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpjY2ssICphY2N1bV9jY2s7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpvZmRtLCAqYWNjdW1fb2ZkbSwgKmRlbHRhX29mZG0sICptYXhfb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmNjaywgKmFjY3VtX2NjaywgKmRlbHRhX2NjaywgKm1heF9jY2s7CiAJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfaHRfcGh5ICpodCwgKmFjY3VtX2h0OworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmh0LCAqYWNjdW1faHQsICpkZWx0YV9odCwgKm1heF9odDsKIAogCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCS8qIG1ha2UgcmVxdWVzdCB0byB1Q29kZSB0byByZXRyaWV2ZSBzdGF0aXN0aWNzIGluZm9ybWF0aW9uICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldCA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfU1lOQywgZmFsc2UpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsCi0JCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQogCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKQEAgLTExMTEsMjY0ICsxMTEyLDQwMSBAQAogCWFjY3VtX2NjayA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnJ4LmNjazsKIAlhY2N1bV9nZW5lcmFsID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MucnguZ2VuZXJhbDsKIAlhY2N1bV9odCA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnJ4Lm9mZG1faHQ7CisJZGVsdGFfb2ZkbSA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLnJ4Lm9mZG07CisJZGVsdGFfY2NrID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MucnguY2NrOworCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5yeC5nZW5lcmFsOworCWRlbHRhX2h0ID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKKwltYXhfb2ZkbSA9ICZwcml2LT5tYXhfZGVsdGEucngub2ZkbTsKKwltYXhfY2NrID0gJnByaXYtPm1heF9kZWx0YS5yeC5jY2s7CisJbWF4X2dlbmVyYWwgPSAmcHJpdi0+bWF4X2RlbHRhLnJ4LmdlbmVyYWw7CisJbWF4X2h0ID0gJnByaXYtPm1heF9kZWx0YS5yeC5vZmRtX2h0OworCiAJcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19SeCAtIE9GRE06XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5pbmFfY250KSwgYWNjdW1fb2ZkbS0+aW5hX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+ZmluYV9jbnQpLCBhY2N1bV9vZmRtLT5maW5hX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicGxjcF9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpLCBhY2N1bV9vZmRtLT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZXJyOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmNyYzMyX2VyciksIGFjY3VtX29mZG0tPmNyYzMyX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJvdmVycnVuX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2hlYWRlciwKKwkJCSAiU3RhdGlzdGljc19SeCAtIE9GRE06Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImluYV9jbnQ6IiwgbGUzMl90b19jcHUob2ZkbS0+aW5hX2NudCksCisJCQkgYWNjdW1fb2ZkbS0+aW5hX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5pbmFfY250LCBtYXhfb2ZkbS0+aW5hX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZpbmFfY250OiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+ZmluYV9jbnQpLCBhY2N1bV9vZmRtLT5maW5hX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5maW5hX2NudCwgbWF4X29mZG0tPmZpbmFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicGxjcF9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5wbGNwX2VyciksIGFjY3VtX29mZG0tPnBsY3BfZXJyLAorCQkJIGRlbHRhX29mZG0tPnBsY3BfZXJyLCBtYXhfb2ZkbS0+cGxjcF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjcmMzMl9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5jcmMzMl9lcnIpLCBhY2N1bV9vZmRtLT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfb2ZkbS0+Y3JjMzJfZXJyLCBtYXhfb2ZkbS0+Y3JjMzJfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAib3ZlcnJ1bl9lcnI6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5vdmVycnVuX2VyciksCi0JCQkgYWNjdW1fb2ZkbS0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZWFybHlfb3ZlcnJ1bl9lcnI6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPm92ZXJydW5fZXJyLAorCQkJIGRlbHRhX29mZG0tPm92ZXJydW5fZXJyLCBtYXhfb2ZkbS0+b3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJlYXJseV9vdmVycnVuX2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9vZmRtLT5lYXJseV9vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBtYXhfb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjcmMzMl9nb29kOiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCksCi0JCQkgYWNjdW1fb2ZkbS0+Y3JjMzJfZ29vZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmYWxzZV9hbGFybV9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPmNyYzMyX2dvb2QsCisJCQkgZGVsdGFfb2ZkbS0+Y3JjMzJfZ29vZCwgbWF4X29mZG0tPmNyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmYWxzZV9hbGFybV9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5mYWxzZV9hbGFybV9jbnQpLAotCQkJIGFjY3VtX29mZG0tPmZhbHNlX2FsYXJtX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmaW5hX3N5bmNfZXJyX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+ZmFsc2VfYWxhcm1fY250LAorCQkJIGRlbHRhX29mZG0tPmZhbHNlX2FsYXJtX2NudCwKKwkJCSBtYXhfb2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZmluYV9zeW5jX2Vycl9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3N5bmNfZXJyX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2ZkX3RpbWVvdXQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgbWF4X29mZG0tPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2ZkX3RpbWVvdXQ6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZmRfdGltZW91dCksCi0JCQkgYWNjdW1fb2ZkbS0+c2ZkX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZmluYV90aW1lb3V0Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnNmZF90aW1lb3V0LAorCQkJIGRlbHRhX29mZG0tPnNmZF90aW1lb3V0LAorCQkJIG1heF9vZmRtLT5zZmRfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZpbmFfdGltZW91dDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfdGltZW91dCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmluYV90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInVucmVzcG9uZGVkX3J0czpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV90aW1lb3V0LAorCQkJIGRlbHRhX29mZG0tPmZpbmFfdGltZW91dCwKKwkJCSBtYXhfb2ZkbS0+ZmluYV90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAidW5yZXNwb25kZWRfcnRzOiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+dW5yZXNwb25kZWRfcnRzKSwKLQkJCSBhY2N1bV9vZmRtLT51bnJlc3BvbmRlZF9ydHMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJyeGVfZnJhbWVfbG10X292cnVuOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT51bnJlc3BvbmRlZF9ydHMsCisJCQkgZGVsdGFfb2ZkbS0+dW5yZXNwb25kZWRfcnRzLAorCQkJIG1heF9vZmRtLT51bnJlc3BvbmRlZF9ydHMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJInJ4ZV9mcmFtZV9sbXRfb3ZydW46IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biksCi0JCQkgYWNjdW1fb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2VudF9hY2tfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAorCQkJIGRlbHRhX29mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAorCQkJIG1heF9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNlbnRfYWNrX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNlbnRfYWNrX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+c2VudF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNlbnRfY3RzX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5zZW50X2Fja19jbnQsCisJCQkgZGVsdGFfb2ZkbS0+c2VudF9hY2tfY250LAorCQkJIG1heF9vZmRtLT5zZW50X2Fja19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZW50X2N0c19jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpLAotCQkJIGFjY3VtX29mZG0tPnNlbnRfY3RzX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZW50X2JhX3JzcF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfY3RzX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5zZW50X2N0c19jbnQsIG1heF9vZmRtLT5zZW50X2N0c19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZW50X2JhX3JzcF9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2JhX3JzcF9jbnQpLAotCQkJIGFjY3VtX29mZG0tPnNlbnRfYmFfcnNwX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJkc3Bfc2VsZl9raWxsOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5zZW50X2JhX3JzcF9jbnQsCisJCQkgbWF4X29mZG0tPnNlbnRfYmFfcnNwX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImRzcF9zZWxmX2tpbGw6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5kc3Bfc2VsZl9raWxsKSwKLQkJCSBhY2N1bV9vZmRtLT5kc3Bfc2VsZl9raWxsKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm1oX2Zvcm1hdF9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+ZHNwX3NlbGZfa2lsbCwKKwkJCSBkZWx0YV9vZmRtLT5kc3Bfc2VsZl9raWxsLAorCQkJIG1heF9vZmRtLT5kc3Bfc2VsZl9raWxsKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAibWhfZm9ybWF0X2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm1oX2Zvcm1hdF9lcnIpLAotCQkJIGFjY3VtX29mZG0tPm1oX2Zvcm1hdF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAicmVfYWNxX21haW5fcnNzaV9zdW06XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPm1oX2Zvcm1hdF9lcnIsCisJCQkgZGVsdGFfb2ZkbS0+bWhfZm9ybWF0X2VyciwKKwkJCSBtYXhfb2ZkbS0+bWhfZm9ybWF0X2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInJlX2FjcV9tYWluX3Jzc2lfc3VtOiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0pLAotCQkJIGFjY3VtX29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKKwkJCSBhY2N1bV9vZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSwKKwkJCSBkZWx0YV9vZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSwKKwkJCW1heF9vZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSk7CiAKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gQ0NLOlxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIlx0XHRcdGN1cnJlbnRcdFx0XHRhY2N1bXVsYXRpdmVcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImluYV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5pbmFfY250KSwgYWNjdW1fY2NrLT5pbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaW5hX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfY250KSwgYWNjdW1fY2NrLT5maW5hX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicGxjcF9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5wbGNwX2VyciksIGFjY3VtX2Njay0+cGxjcF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmNyYzMyX2VyciksIGFjY3VtX2Njay0+Y3JjMzJfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm92ZXJydW5fZXJyOlx0XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJICJTdGF0aXN0aWNzX1J4IC0gQ0NLOiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJpbmFfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5pbmFfY250KSwgYWNjdW1fY2NrLT5pbmFfY250LAorCQkJIGRlbHRhX2Njay0+aW5hX2NudCwgbWF4X2Njay0+aW5hX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZpbmFfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX2NudCksIGFjY3VtX2Njay0+ZmluYV9jbnQsCisJCQkgZGVsdGFfY2NrLT5maW5hX2NudCwgbWF4X2Njay0+ZmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJwbGNwX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+cGxjcF9lcnIpLCBhY2N1bV9jY2stPnBsY3BfZXJyLAorCQkJIGRlbHRhX2Njay0+cGxjcF9lcnIsIG1heF9jY2stPnBsY3BfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9lcnIpLCBhY2N1bV9jY2stPmNyYzMyX2VyciwKKwkJCSBkZWx0YV9jY2stPmNyYzMyX2VyciwgbWF4X2Njay0+Y3JjMzJfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAib3ZlcnJ1bl9lcnI6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPm92ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9jY2stPm92ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImVhcmx5X292ZXJydW5fZXJyOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPm92ZXJydW5fZXJyLAorCQkJIGRlbHRhX2Njay0+b3ZlcnJ1bl9lcnIsIG1heF9jY2stPm92ZXJydW5fZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZWFybHlfb3ZlcnJ1bl9lcnI6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPmVhcmx5X292ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9jY2stPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjcmMzMl9nb29kOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZ29vZCksIGFjY3VtX2Njay0+Y3JjMzJfZ29vZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmYWxzZV9hbGFybV9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+ZWFybHlfb3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfY2NrLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBtYXhfY2NrLT5lYXJseV9vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImNyYzMyX2dvb2Q6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmNyYzMyX2dvb2QpLCBhY2N1bV9jY2stPmNyYzMyX2dvb2QsCisJCQkgZGVsdGFfY2NrLT5jcmMzMl9nb29kLAorCQkJIG1heF9jY2stPmNyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmYWxzZV9hbGFybV9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCksCi0JCQkgYWNjdW1fY2NrLT5mYWxzZV9hbGFybV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZmluYV9zeW5jX2Vycl9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+ZmFsc2VfYWxhcm1fY250LAorCQkJIGRlbHRhX2Njay0+ZmFsc2VfYWxhcm1fY250LCBtYXhfY2NrLT5mYWxzZV9hbGFybV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmaW5hX3N5bmNfZXJyX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9zeW5jX2Vycl9jbnQpLAotCQkJIGFjY3VtX2Njay0+ZmluYV9zeW5jX2Vycl9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2ZkX3RpbWVvdXQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5maW5hX3N5bmNfZXJyX2NudCwKKwkJCSBkZWx0YV9jY2stPmZpbmFfc3luY19lcnJfY250LAorCQkJIG1heF9jY2stPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2ZkX3RpbWVvdXQ6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPnNmZF90aW1lb3V0KSwKLQkJCSBhY2N1bV9jY2stPnNmZF90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImZpbmFfdGltZW91dDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPnNmZF90aW1lb3V0LAorCQkJIGRlbHRhX2Njay0+c2ZkX3RpbWVvdXQsIG1heF9jY2stPnNmZF90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZmluYV90aW1lb3V0OiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3RpbWVvdXQpLAotCQkJIGFjY3VtX2Njay0+ZmluYV90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInVucmVzcG9uZGVkX3J0czpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5maW5hX3RpbWVvdXQsCisJCQkgZGVsdGFfY2NrLT5maW5hX3RpbWVvdXQsIG1heF9jY2stPmZpbmFfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInVucmVzcG9uZGVkX3J0czoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+dW5yZXNwb25kZWRfcnRzKSwKLQkJCSBhY2N1bV9jY2stPnVucmVzcG9uZGVkX3J0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJInJ4ZV9mcmFtZV9sbXRfb3ZydW46XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+dW5yZXNwb25kZWRfcnRzLAorCQkJIGRlbHRhX2Njay0+dW5yZXNwb25kZWRfcnRzLAorCQkJIG1heF9jY2stPnVucmVzcG9uZGVkX3J0cyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkicnhlX2ZyYW1lX2xtdF9vdnJ1bjoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pLAotCQkJIGFjY3VtX2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2VudF9hY2tfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCisJCQkgZGVsdGFfY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBtYXhfY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNlbnRfYWNrX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9hY2tfY250KSwKLQkJCSBhY2N1bV9jY2stPnNlbnRfYWNrX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZW50X2N0c19jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5zZW50X2Fja19jbnQsCisJCQkgZGVsdGFfY2NrLT5zZW50X2Fja19jbnQsCisJCQkgbWF4X2Njay0+c2VudF9hY2tfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2VudF9jdHNfY250OiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2N0c19jbnQpLAotCQkJIGFjY3VtX2Njay0+c2VudF9jdHNfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNlbnRfYmFfcnNwX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5zZW50X2N0c19jbnQsCisJCQkgZGVsdGFfY2NrLT5zZW50X2N0c19jbnQsCisJCQkgbWF4X2Njay0+c2VudF9jdHNfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2VudF9iYV9yc3BfY250OiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2JhX3JzcF9jbnQpLAotCQkJIGFjY3VtX2Njay0+c2VudF9iYV9yc3BfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImRzcF9zZWxmX2tpbGw6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5zZW50X2JhX3JzcF9jbnQsCisJCQkgZGVsdGFfY2NrLT5zZW50X2JhX3JzcF9jbnQsCisJCQkgbWF4X2Njay0+c2VudF9iYV9yc3BfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZHNwX3NlbGZfa2lsbDoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+ZHNwX3NlbGZfa2lsbCksCi0JCQkgYWNjdW1fY2NrLT5kc3Bfc2VsZl9raWxsKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm1oX2Zvcm1hdF9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5kc3Bfc2VsZl9raWxsLAorCQkJIGRlbHRhX2Njay0+ZHNwX3NlbGZfa2lsbCwKKwkJCSBtYXhfY2NrLT5kc3Bfc2VsZl9raWxsKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAibWhfZm9ybWF0X2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+bWhfZm9ybWF0X2VyciksCi0JCQkgYWNjdW1fY2NrLT5taF9mb3JtYXRfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInJlX2FjcV9tYWluX3Jzc2lfc3VtOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPm1oX2Zvcm1hdF9lcnIsCisJCQkgZGVsdGFfY2NrLT5taF9mb3JtYXRfZXJyLCBtYXhfY2NrLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSwKLQkJCSBhY2N1bV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKKwkJCSBhY2N1bV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAorCQkJIGRlbHRhX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgbWF4X2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0pOwogCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19SeCAtIEdFTkVSQUw6XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYm9ndXNfY3RzOlx0XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJIlN0YXRpc3RpY3NfUnggLSBHRU5FUkFMOiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJib2d1c19jdHM6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ib2d1c19jdHMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJvZ3VzX2N0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYm9ndXNfYWNrOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJvZ3VzX2N0cywKKwkJCSBkZWx0YV9nZW5lcmFsLT5ib2d1c19jdHMsIG1heF9nZW5lcmFsLT5ib2d1c19jdHMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJib2d1c19hY2s6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ib2d1c19hY2spLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJvZ3VzX2Fjayk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJub25fYnNzaWRfZnJhbWVzOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19hY2ssCisJCQkgZGVsdGFfZ2VuZXJhbC0+Ym9ndXNfYWNrLCBtYXhfZ2VuZXJhbC0+Ym9ndXNfYWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAibm9uX2Jzc2lkX2ZyYW1lczoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZmlsdGVyZWRfZnJhbWVzOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ub25fYnNzaWRfZnJhbWVzLAorCQkJIGRlbHRhX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCisJCQkgbWF4X2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmaWx0ZXJlZF9mcmFtZXM6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJub25fY2hhbm5lbF9iZWFjb25zOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzLAorCQkJIG1heF9nZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJub25fY2hhbm5lbF9iZWFjb25zOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJjaGFubmVsX2JlYWNvbnM6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImNoYW5uZWxfYmVhY29uczoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm51bV9taXNzZWRfYmNvbjpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zLAorCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAibnVtX21pc3NlZF9iY29uOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJhZGNfcnhfc2F0dXJhdGlvbl90aW1lOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24sCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uLAorCQkJIG1heF9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJImFkY19yeF9zYXR1cmF0aW9uX3RpbWU6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiaW5hX2RldGVjdF9zZWFyY2hfdG06XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmFkY19yeF9zYXR1cmF0aW9uX3RpbWUsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKKwkJCSBtYXhfZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiaW5hX2RldGVjdF9zZWFyY2hfdG06IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYTpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+aW5hX2RldGVjdGlvbl9zZWFyY2hfdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAorCQkJIG1heF9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX3NpbGVuY2VfcnNzaV9hOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9hKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX3NpbGVuY2VfcnNzaV9iOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9hLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fc2lsZW5jZV9yc3NpX2I6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fc2lsZW5jZV9yc3NpX2M6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYzoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiaW50ZXJmZXJlbmNlX2RhdGFfZmxhZzpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYywKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSJpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJjaGFubmVsX2xvYWQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZywKKwkJCSBkZWx0YV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnLAorCQkJIG1heF9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY2hhbm5lbF9sb2FkOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2xvYWQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZHNwX2ZhbHNlX2FsYXJtczpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAorCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfbG9hZCwKKwkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZHNwX2ZhbHNlX2FsYXJtczoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX3Jzc2lfYTpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zLAorCQkJIGRlbHRhX2dlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMsCisJCQkgbWF4X2dlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fcnNzaV9hOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fcnNzaV9iOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9yc3NpX2I6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9iKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9yc3NpX2M6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYiwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX3Jzc2lfYzoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2MpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2MpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX2VuZXJneV9hOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9jLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2MsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2MpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fZW5lcmd5X2E6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fZW5lcmd5X2I6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9lbmVyZ3lfYjoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYiksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9lbmVyZ3lfYzpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYiwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX2VuZXJneV9jOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2MpOworCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2MsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyk7CiAKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gT0ZETV9IVDpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwbGNwX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShodC0+cGxjcF9lcnIpLCBhY2N1bV9odC0+cGxjcF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAib3ZlcnJ1bl9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSwgYWNjdW1faHQtPm92ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImVhcmx5X292ZXJydW5fZXJyOlx0JXVcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2hlYWRlciwKKwkJCSJTdGF0aXN0aWNzX1J4IC0gT0ZETV9IVDoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicGxjcF9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShodC0+cGxjcF9lcnIpLCBhY2N1bV9odC0+cGxjcF9lcnIsCisJCQkgZGVsdGFfaHQtPnBsY3BfZXJyLCBtYXhfaHQtPnBsY3BfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAib3ZlcnJ1bl9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShodC0+b3ZlcnJ1bl9lcnIpLCBhY2N1bV9odC0+b3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfaHQtPm92ZXJydW5fZXJyLCBtYXhfaHQtPm92ZXJydW5fZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZWFybHlfb3ZlcnJ1bl9lcnI6IiwKIAkJCSBsZTMyX3RvX2NwdShodC0+ZWFybHlfb3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX2h0LT5lYXJseV9vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZ29vZCksIGFjY3VtX2h0LT5jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjcmMzMl9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2VyciksIGFjY3VtX2h0LT5jcmMzMl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibWhfZm9ybWF0X2VycjpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfaHQtPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjcmMzMl9nb29kOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2dvb2QpLCBhY2N1bV9odC0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9odC0+Y3JjMzJfZ29vZCwgbWF4X2h0LT5jcmMzMl9nb29kKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2VyciksIGFjY3VtX2h0LT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfaHQtPmNyYzMyX2VyciwgbWF4X2h0LT5jcmMzMl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJtaF9mb3JtYXRfZXJyOiIsCiAJCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpLAotCQkJIGFjY3VtX2h0LT5taF9mb3JtYXRfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZ19jcmMzMl9nb29kOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2h0LT5taF9mb3JtYXRfZXJyLAorCQkJIGRlbHRhX2h0LT5taF9mb3JtYXRfZXJyLCBtYXhfaHQtPm1oX2Zvcm1hdF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2dfY3JjMzJfZ29vZDoiLAogCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY3JjMzJfZ29vZCksCi0JCQkgYWNjdW1faHQtPmFnZ19jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZ19tcGR1X2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9odC0+YWdnX2NyYzMyX2dvb2QsCisJCQkgZGVsdGFfaHQtPmFnZ19jcmMzMl9nb29kLCBtYXhfaHQtPmFnZ19jcmMzMl9nb29kKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnX21wZHVfY250OiIsCiAJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19tcGR1X2NudCksCi0JCQkgYWNjdW1faHQtPmFnZ19tcGR1X2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShodC0+YWdnX2NudCksIGFjY3VtX2h0LT5hZ2dfY250KTsKKwkJCSBhY2N1bV9odC0+YWdnX21wZHVfY250LAorCQkJIGRlbHRhX2h0LT5hZ2dfbXBkdV9jbnQsIG1heF9odC0+YWdnX21wZHVfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY250KSwgYWNjdW1faHQtPmFnZ19jbnQsCisJCQkgZGVsdGFfaHQtPmFnZ19jbnQsIG1heF9odC0+YWdnX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInVuc3VwcG9ydF9tY3M6IiwKKwkJCSBsZTMyX3RvX2NwdShodC0+dW5zdXBwb3J0X21jcyksCisJCQkgYWNjdW1faHQtPnVuc3VwcG9ydF9tY3MsCisJCQkgZGVsdGFfaHQtPnVuc3VwcG9ydF9tY3MsIG1heF9odC0+dW5zdXBwb3J0X21jcyk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKIAlrZnJlZShidWYpOwpAQCAtMTM3OSwyNiArMTUxNywxNiBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwOwogCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSAoc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3R4KSAqIDI0KSArIDI1MDsKKwlpbnQgYnVmc3ogPSAoc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3R4KSAqIDQ4KSArIDI1MDsKIAlzc2l6ZV90IHJldDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsICphY2N1bV90eDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsICphY2N1bV90eCwgKmRlbHRhX3R4LCAqbWF4X3R4OwogCiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9TWU5DLCBmYWxzZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwKLQkJCSJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLCByZXQpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9CiAJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwpAQCAtMTQxMSwxMDYgKzE1MzksMTQ4IEBACiAJICovCiAJdHggPSAmcHJpdi0+c3RhdGlzdGljcy50eDsKIAlhY2N1bV90eCA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnR4OworCWRlbHRhX3R4ID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MudHg7CisJbWF4X3R4ID0gJnByaXYtPm1heF9kZWx0YS50eDsKIAlwb3MgKz0gaXdsX2RiZ2ZzX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1R4OlxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIlx0XHRcdGN1cnJlbnRcdFx0XHRhY2N1bXVsYXRpdmVcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInByZWFtYmxlOlx0XHRcdCV1XHRcdFx0JXVcbiIsCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJIlN0YXRpc3RpY3NfVHg6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInByZWFtYmxlOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCksCi0JCQkgYWNjdW1fdHgtPnByZWFtYmxlX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJyeF9kZXRlY3RlZF9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPnByZWFtYmxlX2NudCwKKwkJCSBkZWx0YV90eC0+cHJlYW1ibGVfY250LCBtYXhfdHgtPnByZWFtYmxlX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInJ4X2RldGVjdGVkX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5yeF9kZXRlY3RlZF9jbnQpLAotCQkJIGFjY3VtX3R4LT5yeF9kZXRlY3RlZF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYnRfcHJpb19kZWZlcl9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPnJ4X2RldGVjdGVkX2NudCwKKwkJCSBkZWx0YV90eC0+cnhfZGV0ZWN0ZWRfY250LCBtYXhfdHgtPnJ4X2RldGVjdGVkX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJ0X3ByaW9fZGVmZXJfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmJ0X3ByaW9fZGVmZXJfY250KSwKLQkJCSBhY2N1bV90eC0+YnRfcHJpb19kZWZlcl9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYnRfcHJpb19raWxsX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YnRfcHJpb19kZWZlcl9jbnQsCisJCQkgZGVsdGFfdHgtPmJ0X3ByaW9fZGVmZXJfY250LAorCQkJIG1heF90eC0+YnRfcHJpb19kZWZlcl9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJidF9wcmlvX2tpbGxfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmJ0X3ByaW9fa2lsbF9jbnQpLAotCQkJIGFjY3VtX3R4LT5idF9wcmlvX2tpbGxfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImZld19ieXRlc19jbnQ6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBkZWx0YV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBtYXhfdHgtPmJ0X3ByaW9fa2lsbF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmZXdfYnl0ZXNfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmZld19ieXRlc19jbnQpLAotCQkJIGFjY3VtX3R4LT5mZXdfYnl0ZXNfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImN0c190aW1lb3V0Olx0XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmN0c190aW1lb3V0KSwgYWNjdW1fdHgtPmN0c190aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFja190aW1lb3V0Olx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmZld19ieXRlc19jbnQsCisJCQkgZGVsdGFfdHgtPmZld19ieXRlc19jbnQsIG1heF90eC0+ZmV3X2J5dGVzX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImN0c190aW1lb3V0OiIsCisJCQkgbGUzMl90b19jcHUodHgtPmN0c190aW1lb3V0KSwgYWNjdW1fdHgtPmN0c190aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dCwgbWF4X3R4LT5jdHNfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFja190aW1lb3V0OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFja190aW1lb3V0KSwKLQkJCSBhY2N1bV90eC0+YWNrX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZXhwZWN0ZWRfYWNrX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YWNrX3RpbWVvdXQsCisJCQkgZGVsdGFfdHgtPmFja190aW1lb3V0LCBtYXhfdHgtPmFja190aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZXhwZWN0ZWRfYWNrX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5leHBlY3RlZF9hY2tfY250KSwKLQkJCSBhY2N1bV90eC0+ZXhwZWN0ZWRfYWNrX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhY3R1YWxfYWNrX2NudDpcdFx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5leHBlY3RlZF9hY2tfY250LAorCQkJIGRlbHRhX3R4LT5leHBlY3RlZF9hY2tfY250LAorCQkJIG1heF90eC0+ZXhwZWN0ZWRfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFjdHVhbF9hY2tfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFjdHVhbF9hY2tfY250KSwKLQkJCSBhY2N1bV90eC0+YWN0dWFsX2Fja19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZHVtcF9tc2R1X2NudDpcdFx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hY3R1YWxfYWNrX2NudCwKKwkJCSBkZWx0YV90eC0+YWN0dWFsX2Fja19jbnQsCisJCQkgbWF4X3R4LT5hY3R1YWxfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImR1bXBfbXNkdV9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCksCi0JCQkgYWNjdW1fdHgtPmR1bXBfbXNkdV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWJvcnRfbnh0X2ZyYW1lX21pc21hdGNoOiIKLQkJCSAiXHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5kdW1wX21zZHVfY250LAorCQkJIGRlbHRhX3R4LT5kdW1wX21zZHVfY250LAorCQkJIG1heF90eC0+ZHVtcF9tc2R1X2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFib3J0X254dF9mcmFtZV9taXNtYXRjaDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCksCi0JCQkgYWNjdW1fdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFib3J0X21pc3Npbmdfbnh0X2ZyYW1lOiIKLQkJCSAiXHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCwKKwkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQsCisJCQkgbWF4X3R4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFib3J0X21pc3Npbmdfbnh0X2ZyYW1lOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpLAotCQkJIGFjY3VtX3R4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImN0c190aW1lb3V0X2NvbGxpc2lvbjpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBtYXhfdHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjdHNfdGltZW91dF9jb2xsaXNpb246IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uKSwKLQkJCSBhY2N1bV90eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiYWNrX2JhX3RpbWVvdXRfY29sbGlzaW9uOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJImFja19iYV90aW1lb3V0X2NvbGxpc2lvbjoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pLAotCQkJIGFjY3VtX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnIGJhX3RpbWVvdXQ6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2cgYmFfdGltZW91dDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfdGltZW91dCksCi0JCQkgYWNjdW1fdHgtPmFnZy5iYV90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiYWdnIGJhX3Jlc2NoZWRfZnJhbWVzOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuYmFfdGltZW91dCwKKwkJCSBkZWx0YV90eC0+YWdnLmJhX3RpbWVvdXQsCisJCQkgbWF4X3R4LT5hZ2cuYmFfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiYWdnIGJhX3Jlc2NoZWRfZnJhbWVzOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyksCi0JCQkgYWNjdW1fdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJImFnZyBzY2RfcXVlcnlfYWdnX2ZyYW1lOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzLAorCQkJIGRlbHRhX3R4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMsCisJCQkgbWF4X3R4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJImFnZyBzY2RfcXVlcnlfYWdnX2ZyYW1lOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCksCi0JCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZyksCi0JCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZyBzY2RfcXVlcnlfYWdnOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZywKKwkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9ub19hZ2csCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyBzY2RfcXVlcnlfYWdnOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfYWdnKSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2cpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJhZ2cgc2NkX3F1ZXJ5X21pc21hdGNoOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKKwkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9hZ2csCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiYWdnIHNjZF9xdWVyeV9taXNtYXRjaDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhZ2cgZnJhbWVfbm90X3JlYWR5Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoLAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoLAorCQkJIG1heF90eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyBmcmFtZV9ub3RfcmVhZHk6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmZyYW1lX25vdF9yZWFkeSksCi0JCQkgYWNjdW1fdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnIHVuZGVycnVuOlx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHksCisJCQkgZGVsdGFfdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHksCisJCQkgbWF4X3R4LT5hZ2cuZnJhbWVfbm90X3JlYWR5KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnIHVuZGVycnVuOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy51bmRlcnJ1biksCi0JCQkgYWNjdW1fdHgtPmFnZy51bmRlcnJ1bik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhZ2cgYnRfcHJpb19raWxsOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cudW5kZXJydW4sCisJCQkgZGVsdGFfdHgtPmFnZy51bmRlcnJ1biwgbWF4X3R4LT5hZ2cudW5kZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2cgYnRfcHJpb19raWxsOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5idF9wcmlvX2tpbGwpLAotCQkJIGFjY3VtX3R4LT5hZ2cuYnRfcHJpb19raWxsKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZyByeF9iYV9yc3BfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuYnRfcHJpb19raWxsLAorCQkJIGRlbHRhX3R4LT5hZ2cuYnRfcHJpb19raWxsLAorCQkJIG1heF90eC0+YWdnLmJ0X3ByaW9fa2lsbCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyByeF9iYV9yc3BfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5yeF9iYV9yc3BfY250KSwKLQkJCSBhY2N1bV90eC0+YWdnLnJ4X2JhX3JzcF9jbnQpOworCQkJIGFjY3VtX3R4LT5hZ2cucnhfYmFfcnNwX2NudCwKKwkJCSBkZWx0YV90eC0+YWdnLnJ4X2JhX3JzcF9jbnQsCisJCQkgbWF4X3R4LT5hZ2cucnhfYmFfcnNwX2NudCk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKIAlrZnJlZShidWYpOwpAQCAtMTUyMSwyOCArMTY5MSwxOSBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwOwogCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiA0ICsgMjUwOworCWludCBidWZzeiA9IHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsKSAqIDEwICsgMzAwOwogCXNzaXplX3QgcmV0OwogCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgKmdlbmVyYWwsICphY2N1bV9nZW5lcmFsOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyAqZGJnLCAqYWNjdW1fZGJnOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiAqZGl2LCAqYWNjdW1fZGl2OworCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgKmRiZywgKmFjY3VtX2RiZywgKmRlbHRhX2RiZywgKm1heF9kYmc7CisJc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXYsICphY2N1bV9kaXYsICpkZWx0YV9kaXYsICptYXhfZGl2OwogCiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9TWU5DLCBmYWxzZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwKLQkJCSJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLCByZXQpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9CiAJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwpAQCAtMTU1Nyw1MiArMTcxOCw3OCBAQAogCWRiZyA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGJnOwogCWRpdiA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGl2OwogCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+YWNjdW1fc3RhdGlzdGljcy5nZW5lcmFsOworCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5nZW5lcmFsOworCW1heF9nZW5lcmFsID0gJnByaXYtPm1heF9kZWx0YS5nZW5lcmFsOwogCWFjY3VtX2RiZyA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuZGJnOworCWRlbHRhX2RiZyA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuZGJnOworCW1heF9kYmcgPSAmcHJpdi0+bWF4X2RlbHRhLmdlbmVyYWwuZGJnOwogCWFjY3VtX2RpdiA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuZGl2OworCWRlbHRhX2RpdiA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuZGl2OworCW1heF9kaXYgPSAmcHJpdi0+bWF4X2RlbHRhLmdlbmVyYWwuZGl2OwogCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfR2VuZXJhbDpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0ZW1wZXJhdHVyZTpcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2hlYWRlciwKKwkJCSJTdGF0aXN0aWNzX0dlbmVyYWw6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19zaG9ydF9mb3JtYXQsCisJCQkgInRlbXBlcmF0dXJlOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmUpKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0ZW1wZXJhdHVyZV9tOlx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfc2hvcnRfZm9ybWF0LAorCQkJICJ0ZW1wZXJhdHVyZV9tOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmVfbSkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYnVyc3RfY2hlY2s6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYnVyc3RfY2hlY2s6IiwKIAkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NoZWNrKSwKLQkJCSBhY2N1bV9kYmctPmJ1cnN0X2NoZWNrKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJ1cnN0X2NvdW50Olx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZGJnLT5idXJzdF9jaGVjaywKKwkJCSBkZWx0YV9kYmctPmJ1cnN0X2NoZWNrLCBtYXhfZGJnLT5idXJzdF9jaGVjayk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJ1cnN0X2NvdW50OiIsCiAJCQkgbGUzMl90b19jcHUoZGJnLT5idXJzdF9jb3VudCksCi0JCQkgYWNjdW1fZGJnLT5idXJzdF9jb3VudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzbGVlcF90aW1lOlx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZGJnLT5idXJzdF9jb3VudCwKKwkJCSBkZWx0YV9kYmctPmJ1cnN0X2NvdW50LCBtYXhfZGJnLT5idXJzdF9jb3VudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNsZWVwX3RpbWU6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbGVlcF90aW1lKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5zbGVlcF90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNsb3RzX291dDpcdFx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPnNsZWVwX3RpbWUsCisJCQkgZGVsdGFfZ2VuZXJhbC0+c2xlZXBfdGltZSwgbWF4X2dlbmVyYWwtPnNsZWVwX3RpbWUpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzbG90c19vdXQ6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbG90c19vdXQpLAotCQkJIGFjY3VtX2dlbmVyYWwtPnNsb3RzX291dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzbG90c19pZGxlOlx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xvdHNfb3V0LAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX291dCwgbWF4X2dlbmVyYWwtPnNsb3RzX291dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNsb3RzX2lkbGU6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbG90c19pZGxlKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19pZGxlKTsKKwkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19pZGxlLAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX2lkbGUsIG1heF9nZW5lcmFsLT5zbG90c19pZGxlKTsKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0dGxfdGltZXN0YW1wOlx0XHRcdCV1XG4iLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9hOlx0XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9hKSwgYWNjdW1fZGl2LT50eF9vbl9hKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9iOlx0XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9iKSwgYWNjdW1fZGl2LT50eF9vbl9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImV4ZWNfdGltZTpcdFx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSwgYWNjdW1fZGl2LT5leGVjX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAicHJvYmVfdGltZTpcdFx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGRpdi0+cHJvYmVfdGltZSksIGFjY3VtX2Rpdi0+cHJvYmVfdGltZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJyeF9lbmFibGVfY291bnRlcjpcdFx0JXVcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAidHhfb25fYToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+dHhfb25fYSksIGFjY3VtX2Rpdi0+dHhfb25fYSwKKwkJCSBkZWx0YV9kaXYtPnR4X29uX2EsIG1heF9kaXYtPnR4X29uX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJ0eF9vbl9iOiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9iKSwgYWNjdW1fZGl2LT50eF9vbl9iLAorCQkJIGRlbHRhX2Rpdi0+dHhfb25fYiwgbWF4X2Rpdi0+dHhfb25fYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImV4ZWNfdGltZToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSwgYWNjdW1fZGl2LT5leGVjX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5leGVjX3RpbWUsIG1heF9kaXYtPmV4ZWNfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInByb2JlX3RpbWU6IiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnByb2JlX3RpbWUpLCBhY2N1bV9kaXYtPnByb2JlX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5wcm9iZV90aW1lLCBtYXhfZGl2LT5wcm9iZV90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicnhfZW5hYmxlX2NvdW50ZXI6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIpOworCQkJIGFjY3VtX2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyLAorCQkJIGRlbHRhX2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyLAorCQkJIG1heF9nZW5lcmFsLT5yeF9lbmFibGVfY291bnRlcik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgIm51bV9vZl9zb3Nfc3RhdGVzOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMpLAorCQkJIGFjY3VtX2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzLAorCQkJIGRlbHRhX2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzLAorCQkJIG1heF9nZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcyk7CiAJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTYxMiw3ICsxNzk5LDcgQEAKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJaW50IGNudCA9IDA7CiAJY2hhciAqYnVmOwpAQCAtMTY5Myw3ICsxODgwLDcgQEAKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJaW50IGNudCA9IDA7CiAJY2hhciAqYnVmOwpAQCAtMTc1MSwyNiArMTkzOCwxNSBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1ZlsxMjhdOwogCWludCBwb3MgPSAwOwotCXNzaXplX3QgcmV0OwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCXN0cnVjdCBzdGF0aXN0aWNzX3R4ICp0eDsKIAogCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJOL0FcbiIpOwogCWVsc2UgewotCQkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLwotCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JCXJldCA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfU1lOQywgZmFsc2UpOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLAotCQkJCXJldCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQogCQl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OwogCQlpZiAodHgtPnR4X3Bvd2VyLmFudF9hIHx8CiAJCSAgICB0eC0+dHhfcG93ZXIuYW50X2IgfHwKQEAgLTE4MDIsNyArMTk3OCw3IEBACiAJCQkJCQkgICAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzYwXTsKIAlpbnQgcG9zID0gMDsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKQEAgLTE4NDUsNiArMjAyMSwyNjIgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19jc3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCWludCBjc3I7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmY3NyKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2NzcikKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9jc3IocHJpdik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV90cmFjaW5nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHBvcyA9IDA7CisJY2hhciBidWZbMTI4XTsKKwljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKKwlzc2l6ZV90IHJldDsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInVjb2RlIHRyYWNlIHRpbWVyIGlzICVzXG4iLAorCQkJcHJpdi0+ZXZlbnRfbG9nLnVjb2RlX3RyYWNlID8gIk9uIiA6ICJPZmYiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJub25fd3JhcHNfY291bnQ6XHRcdCAldVxuIiwKKwkJCXByaXYtPmV2ZW50X2xvZy5ub25fd3JhcHNfY291bnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIndyYXBzX29uY2VfY291bnQ6XHRcdCAldVxuIiwKKwkJCXByaXYtPmV2ZW50X2xvZy53cmFwc19vbmNlX2NvdW50KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ3cmFwc19tb3JlX2NvdW50Olx0XHQgJXVcbiIsCisJCQlwcml2LT5ldmVudF9sb2cud3JhcHNfbW9yZV9jb3VudCk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdWNvZGVfdHJhY2luZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHRyYWNlOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnRyYWNlKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh0cmFjZSkgeworCQlwcml2LT5ldmVudF9sb2cudWNvZGVfdHJhY2UgPSB0cnVlOworCQkvKiBzY2hlZHVsZSB0aGUgdWNvZGUgdGltZXIgdG8gb2NjdXIgaW4gVUNPREVfVFJBQ0VfUEVSSU9EICovCisJCW1vZF90aW1lcigmcHJpdi0+dWNvZGVfdHJhY2UsCisJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhVQ09ERV9UUkFDRV9QRVJJT0QpKTsKKwl9IGVsc2UgeworCQlwcml2LT5ldmVudF9sb2cudWNvZGVfdHJhY2UgPSBmYWxzZTsKKwkJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnVjb2RlX3RyYWNlKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19maF9yZWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCWludCBwb3MgPSAwOworCXNzaXplX3QgcmV0ID0gLUVGQVVMVDsKKworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2ZoKSB7CisJCXJldCA9IHBvcyA9IHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgocHJpdiwgJmJ1ZiwgdHJ1ZSk7CisJCWlmIChidWYpIHsKKwkJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLAorCQkJCQkJICAgICAgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwkJCWtmcmVlKGJ1Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfbWlzc2VkX2JlYWNvbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHBvcyA9IDA7CisJY2hhciBidWZbMTJdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJWRcbiIsCisJCQlwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfbWlzc2VkX2JlYWNvbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IG1pc3NlZDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIlZCIsICZtaXNzZWQpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1pc3NlZCA8IElXTF9NSVNTRURfQkVBQ09OX1RIUkVTSE9MRF9NSU4gfHwKKwkgICAgbWlzc2VkID4gSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX01BWCkKKwkJcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgPQorCQkJSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX0RFRjsKKwllbHNlCisJCXByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkID0gbWlzc2VkOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfaW50ZXJuYWxfc2Nhbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHNjYW47CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmc2NhbikgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpd2xfaW50ZXJuYWxfc2hvcnRfaHdfc2Nhbihwcml2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3BsY3BfZGVsdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyIGJ1ZlsxMl07CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIldVxuIiwKKwkJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQpOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3BsY3BfZGVsdGFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHBsY3A7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmcGxjcCkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChwbGNwIDw9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX01JTikgfHwKKwkJKHBsY3AgPiBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9NQVgpKQorCQlwcml2LT5jZmctPnBsY3BfZGVsdGFfdGhyZXNob2xkID0KKwkJCUlXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRjsKKwllbHNlCisJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPSBwbGNwOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2ZvcmNlX3Jlc2V0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgcG9zID0gMDsKKwljaGFyIGJ1ZlszMDBdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXN0cnVjdCBpd2xfZm9yY2VfcmVzZXQgKmZvcmNlX3Jlc2V0OworCisJZm9yIChpID0gMDsgaSA8IElXTF9NQVhfRk9SQ0VfUkVTRVQ7IGkrKykgeworCQlmb3JjZV9yZXNldCA9ICZwcml2LT5mb3JjZV9yZXNldFtpXTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJGb3JjZSByZXNldCBtZXRob2QgJWRcbiIsIGkpOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlx0bnVtYmVyIG9mIHJlc2V0IHJlcXVlc3Q6ICVkXG4iLAorCQkJCWZvcmNlX3Jlc2V0LT5yZXNldF9yZXF1ZXN0X2NvdW50KTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJcdG51bWJlciBvZiByZXNldCByZXF1ZXN0IHN1Y2Nlc3M6ICVkXG4iLAorCQkJCWZvcmNlX3Jlc2V0LT5yZXNldF9zdWNjZXNzX2NvdW50KTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJcdG51bWJlciBvZiByZXNldCByZXF1ZXN0IHJlamVjdDogJWRcbiIsCisJCQkJZm9yY2VfcmVzZXQtPnJlc2V0X3JlamVjdF9jb3VudCk7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiXHRyZXNldCBkdXJhdGlvbjogJWx1XG4iLAorCQkJCWZvcmNlX3Jlc2V0LT5yZXNldF9kdXJhdGlvbik7CisJfQorCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2ZvcmNlX3Jlc2V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCWludCByZXNldCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnJlc2V0KSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHJlc2V0KSB7CisJY2FzZSBJV0xfUkZfUkVTRVQ6CisJY2FzZSBJV0xfRldfUkVTRVQ6CisJCXJldCA9IGl3bF9mb3JjZV9yZXNldChwcml2LCByZXNldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7Cit9CisKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhyeF9zdGF0aXN0aWNzKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyh0eF9zdGF0aXN0aWNzKTsKIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyh0cmFmZmljX2xvZyk7CkBAIC0xODU5LDYgKzIyOTEsMTMgQEAKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhwb3dlcl9zYXZlX3N0YXR1cyk7CiBERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGNsZWFyX3Vjb2RlX3N0YXRpc3RpY3MpOwogREVCVUdGU19XUklURV9GSUxFX09QUyhjbGVhcl90cmFmZmljX3N0YXRpc3RpY3MpOworREVCVUdGU19XUklURV9GSUxFX09QUyhjc3IpOworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHVjb2RlX3RyYWNpbmcpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKGZoX3JlZyk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMobWlzc2VkX2JlYWNvbik7CitERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGludGVybmFsX3NjYW4pOworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHBsY3BfZGVsdGEpOworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKGZvcmNlX3Jlc2V0KTsKIAogLyoKICAqIENyZWF0ZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKQEAgLTE4NjYsNjkgKzIzMDUsNzQgQEAKICAqLwogaW50IGl3bF9kYmdmc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGl3bF9kZWJ1Z2ZzICpkYmdmczsKIAlzdHJ1Y3QgZGVudHJ5ICpwaHlkID0gcHJpdi0+aHctPndpcGh5LT5kZWJ1Z2ZzZGlyOwotCWludCByZXQgPSAwOworCXN0cnVjdCBkZW50cnkgKmRpcl9kcnYsICpkaXJfZGF0YSwgKmRpcl9yZiwgKmRpcl9kZWJ1ZzsKIAotCWRiZ2ZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9kZWJ1Z2ZzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYmdmcykgewotCQlyZXQgPSAtRU5PTUVNOworCWRpcl9kcnYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcGh5ZCk7CisJaWYgKCFkaXJfZHJ2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmRlYnVnZnNfZGlyID0gZGlyX2RydjsKKworCWRpcl9kYXRhID0gZGVidWdmc19jcmVhdGVfZGlyKCJkYXRhIiwgZGlyX2Rydik7CisJaWYgKCFkaXJfZGF0YSkKIAkJZ290byBlcnI7Ci0JfQotCi0JcHJpdi0+ZGJnZnMgPSBkYmdmczsKLQlkYmdmcy0+bmFtZSA9IG5hbWU7Ci0JZGJnZnMtPmRpcl9kcnYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcGh5ZCk7Ci0JaWYgKCFkYmdmcy0+ZGlyX2RydiB8fCBJU19FUlIoZGJnZnMtPmRpcl9kcnYpKSB7Ci0JCXJldCA9IC1FTk9FTlQ7CisJZGlyX3JmID0gZGVidWdmc19jcmVhdGVfZGlyKCJyZiIsIGRpcl9kcnYpOworCWlmICghZGlyX3JmKQogCQlnb3RvIGVycjsKLQl9CisJZGlyX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZGlyKCJkZWJ1ZyIsIGRpcl9kcnYpOworCWlmICghZGlyX2RlYnVnKQorCQlnb3RvIGVycjsKIAotCURFQlVHRlNfQUREX0RJUihkYXRhLCBkYmdmcy0+ZGlyX2Rydik7Ci0JREVCVUdGU19BRERfRElSKHJmLCBkYmdmcy0+ZGlyX2Rydik7Ci0JREVCVUdGU19BRERfRElSKGRlYnVnLCBkYmdmcy0+ZGlyX2Rydik7Ci0JREVCVUdGU19BRERfRklMRShudm0sIGRhdGEsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoc3JhbSwgZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUobG9nX2V2ZW50LCBkYXRhLCBTX0lXVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHN0YXRpb25zLCBkYXRhLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGNoYW5uZWxzLCBkYXRhLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHN0YXR1cywgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShpbnRlcnJ1cHQsIGRhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHFvcywgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShsZWQsIGRhdGEsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoc2xlZXBfbGV2ZWxfb3ZlcnJpZGUsIGRhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRSh0aGVybWFsX3Rocm90dGxpbmcsIGRhdGEsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoZGlzYWJsZV9odDQwLCBkYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkZWJ1ZywgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRSh0eF9zdGF0aXN0aWNzLCBkZWJ1ZywgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRSh0cmFmZmljX2xvZywgZGVidWcsIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHJ4X3F1ZXVlLCBkZWJ1ZywgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRSh0eF9xdWV1ZSwgZGVidWcsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUodHhfcG93ZXIsIGRlYnVnLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHBvd2VyX3NhdmVfc3RhdHVzLCBkZWJ1ZywgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShjbGVhcl91Y29kZV9zdGF0aXN0aWNzLCBkZWJ1ZywgU19JV1VTUik7Ci0JREVCVUdGU19BRERfRklMRShjbGVhcl90cmFmZmljX3N0YXRpc3RpY3MsIGRlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKG52bSwgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc3JhbSwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGxvZ19ldmVudCwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHN0YXRpb25zLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShjaGFubmVscywgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShpbnRlcnJ1cHQsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShxb3MsIGRpcl9kYXRhLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGxlZCwgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc2xlZXBfbGV2ZWxfb3ZlcnJpZGUsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShjdXJyZW50X3NsZWVwX2NvbW1hbmQsIGRpcl9kYXRhLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHRoZXJtYWxfdGhyb3R0bGluZywgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoZGlzYWJsZV9odDQwLCBkaXJfZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUocnhfc3RhdGlzdGljcywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRSh0cmFmZmljX2xvZywgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShyeF9xdWV1ZSwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3F1ZXVlLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodHhfcG93ZXIsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShwb3dlcl9zYXZlX3N0YXR1cywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGNsZWFyX3Vjb2RlX3N0YXRpc3RpY3MsIGRpcl9kZWJ1ZywgU19JV1VTUik7CisJREVCVUdGU19BRERfRklMRShjbGVhcl90cmFmZmljX3N0YXRpc3RpY3MsIGRpcl9kZWJ1ZywgU19JV1VTUik7CisJREVCVUdGU19BRERfRklMRShjc3IsIGRpcl9kZWJ1ZywgU19JV1VTUik7CisJREVCVUdGU19BRERfRklMRShmaF9yZWcsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShtaXNzZWRfYmVhY29uLCBkaXJfZGVidWcsIFNfSVdVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoaW50ZXJuYWxfc2NhbiwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHBsY3BfZGVsdGEsIGRpcl9kZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoZm9yY2VfcmVzZXQsIGRpcl9kZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOwogCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKLQkJREVCVUdGU19BRERfRklMRSh1Y29kZV9yeF9zdGF0cywgZGVidWcsIFNfSVJVU1IpOwotCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3R4X3N0YXRzLCBkZWJ1ZywgU19JUlVTUik7Ci0JCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfZ2VuZXJhbF9zdGF0cywgZGVidWcsIFNfSVJVU1IpOwotCQlERUJVR0ZTX0FERF9GSUxFKHNlbnNpdGl2aXR5LCBkZWJ1ZywgU19JUlVTUik7Ci0JCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRlYnVnLCBTX0lSVVNSKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV9yeF9zdGF0cywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV90eF9zdGF0cywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV9nZW5lcmFsX3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKHNlbnNpdGl2aXR5LCBkaXJfZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKGNoYWluX25vaXNlLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3RyYWNpbmcsIGRpcl9kZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOwogCX0KLQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7Ci0JREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKKwlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIGRpcl9yZiwgJnByaXYtPmRpc2FibGVfc2Vuc19jYWwpOworCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9jaGFpbl9ub2lzZSwgZGlyX3JmLAogCQkJICZwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCk7CiAJaWYgKCgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpIHx8CiAJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpKQotCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIHJmLAorCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIGRpcl9yZiwKIAkJCQkmcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwpOwogCXJldHVybiAwOwogCiBlcnI6Ci0JSVdMX0VSUihwcml2LCAiQ2FuJ3Qgb3BlbiB0aGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCUlXTF9FUlIocHJpdiwgIkNhbid0IGNyZWF0ZSB0aGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOwogCWl3bF9kYmdmc191bnJlZ2lzdGVyKHByaXYpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9NRU07CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9kYmdmc19yZWdpc3Rlcik7CiAKQEAgLTE5MzgsNTYgKzIzODIsMTEgQEAKICAqLwogdm9pZCBpd2xfZGJnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFwcml2LT5kYmdmcykKKwlpZiAoIXByaXYtPmRlYnVnZnNfZGlyKQogCQlyZXR1cm47CiAKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3NsZWVwX2xldmVsX292ZXJyaWRlKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2N1cnJlbnRfc2xlZXBfY29tbWFuZCk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9udm0pOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3JhbSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2ludGVycnVwdCk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9xb3MpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfbGVkKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3RoZXJtYWxfdGhyb3R0bGluZyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9kaXNhYmxlX2h0NDApOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGF0YSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfcnhfc3RhdGlzdGljcyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfc3RhdGlzdGljcyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHJhZmZpY19sb2cpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy5maWxlX3J4X3F1ZXVlKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90eF9xdWV1ZSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfcG93ZXIpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy5maWxlX3Bvd2VyX3NhdmVfc3RhdHVzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCi0JCQlmaWxlX2NsZWFyX3Vjb2RlX3N0YXRpc3RpY3MpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KLQkJCWZpbGVfY2xlYXJfdHJhZmZpY19zdGF0aXN0aWNzKTsKLQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spICE9IENTUl9IV19SRVZfVFlQRV8zOTQ1KSB7Ci0JCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KLQkJCWZpbGVfdWNvZGVfcnhfc3RhdHMpOwotCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCi0JCQlmaWxlX3Vjb2RlX3R4X3N0YXRzKTsKLQkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgotCQkJZmlsZV91Y29kZV9nZW5lcmFsX3N0YXRzKTsKLQkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgotCQkJZmlsZV9zZW5zaXRpdml0eSk7Ci0JCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KLQkJCWZpbGVfY2hhaW5fbm9pc2UpOwotCX0KLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RlYnVnKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5KTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX2NoYWluX25vaXNlKTsKLQlpZiAoKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfNDk2NSkgfHwKLQkgICAgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfMzk0NSkpCi0JCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfdHhfcG93ZXIpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfcmYpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZHJ2KTsKLQlrZnJlZShwcml2LT5kYmdmcyk7Ci0JcHJpdi0+ZGJnZnMgPSBOVUxMOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwcml2LT5kZWJ1Z2ZzX2Rpcik7CisJcHJpdi0+ZGVidWdmc19kaXIgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZGJnZnNfdW5yZWdpc3Rlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggMzgyMmNmNS4uYWI4OTFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNTEyLDYgKzUxMiw3IEBACiAJYm9vbCBpc19odDsKIAlib29sIGlzXzQwbWh6OwogCWJvb2wgc2luZ2xlX2NoYWluX3N1ZmZpY2llbnQ7CisJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHM7IC8qIGN1cnJlbnQgc21wcyBtb2RlICovCiAJLyogQlNTIHJlbGF0ZWQgZGF0YSAqLwogCXU4IGV4dGVuc2lvbl9jaGFuX29mZnNldDsKIAl1OCBodF9wcm90ZWN0aW9uOwpAQCAtOTg0LDYgKzk4NSw3NCBAQAogCV9fbGUxNiBjaGFubmVsOwogfTsKIAorLyoKKyAqIHNjaGVkdWxlIHRoZSB0aW1lciB0byB3YWtlIHVwIGV2ZXJ5IFVDT0RFX1RSQUNFX1BFUklPRCBtaWxsaXNlY29uZHMKKyAqIHRvIHBlcmZvcm0gY29udGludW91cyB1Q29kZSBldmVudCBsb2dnaW5nIG9wZXJhdGlvbiBpZiBlbmFibGVkCisgKi8KKyNkZWZpbmUgVUNPREVfVFJBQ0VfUEVSSU9EICgxMDApCisKKy8qCisgKiBpd2xfZXZlbnRfbG9nOiBjdXJyZW50IHVDb2RlIGV2ZW50IGxvZyBwb3NpdGlvbgorICoKKyAqIEB1Y29kZV90cmFjZTogZW5hYmxlL2Rpc2FibGUgdWNvZGUgY29udGludW91cyB0cmFjZSB0aW1lcgorICogQG51bV93cmFwczogaG93IG1hbnkgdGltZXMgdGhlIGV2ZW50IGJ1ZmZlciB3cmFwcworICogQG5leHRfZW50cnk6ICB0aGUgZW50cnkganVzdCBiZWZvcmUgdGhlIG5leHQgb25lIHRoYXQgdUNvZGUgd291bGQgZmlsbAorICogQG5vbl93cmFwc19jb3VudDogY291bnRlciBmb3Igbm8gd3JhcCBkZXRlY3RlZCB3aGVuIGR1bXAgdWNvZGUgZXZlbnRzCisgKiBAd3JhcHNfb25jZV9jb3VudDogY291bnRlciBmb3Igd3JhcCBvbmNlIGRldGVjdGVkIHdoZW4gZHVtcCB1Y29kZSBldmVudHMKKyAqIEB3cmFwc19tb3JlX2NvdW50OiBjb3VudGVyIGZvciB3cmFwIG1vcmUgdGhhbiBvbmNlIGRldGVjdGVkCisgKgkJICAgICAgd2hlbiBkdW1wIHVjb2RlIGV2ZW50cworICovCitzdHJ1Y3QgaXdsX2V2ZW50X2xvZyB7CisJYm9vbCB1Y29kZV90cmFjZTsKKwl1MzIgbnVtX3dyYXBzOworCXUzMiBuZXh0X2VudHJ5OworCWludCBub25fd3JhcHNfY291bnQ7CisJaW50IHdyYXBzX29uY2VfY291bnQ7CisJaW50IHdyYXBzX21vcmVfY291bnQ7Cit9OworCisvKgorICogaG9zdCBpbnRlcnJ1cHQgdGltZW91dCB2YWx1ZQorICogdXNlZCB3aXRoIHNldHRpbmcgaW50ZXJydXB0IGNvYWxlc2NpbmcgdGltZXIKKyAqIHRoZSBDU1JfSU5UX0NPQUxFU0NJTkcgaXMgYW4gOCBiaXQgcmVnaXN0ZXIgaW4gMzItdXNlYyB1bml0CisgKgorICogZGVmYXVsdCBpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lciBpcyA2NCB4IDMyID0gMjA0OCB1c2VjcworICogZGVmYXVsdCBpbnRlcnJ1cHQgY29hbGVzY2luZyBjYWxpYnJhdGlvbiB0aW1lciBpcyAxNiB4IDMyID0gNTEyIHVzZWNzCisgKi8KKyNkZWZpbmUgSVdMX0hPU1RfSU5UX1RJTUVPVVRfTUFYCSgweEZGKQorI2RlZmluZSBJV0xfSE9TVF9JTlRfVElNRU9VVF9ERUYJKDB4NDApCisjZGVmaW5lIElXTF9IT1NUX0lOVF9USU1FT1VUX01JTgkoMHgwKQorI2RlZmluZSBJV0xfSE9TVF9JTlRfQ0FMSUJfVElNRU9VVF9NQVgJKDB4RkYpCisjZGVmaW5lIElXTF9IT1NUX0lOVF9DQUxJQl9USU1FT1VUX0RFRgkoMHgxMCkKKyNkZWZpbmUgSVdMX0hPU1RfSU5UX0NBTElCX1RJTUVPVVRfTUlOCSgweDApCisKKy8qCisgKiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgcGxjcCBlcnJvciByYXRlIHBlciAxMDBtU2Vjcy4gIEl0IGlzCisgKiB1c2VkIHRvIHNldCBhbmQgY2hlY2sgZm9yIHRoZSB2YWxpZGl0eSBvZiBwbGNwX2RlbHRhLgorICovCisjZGVmaW5lIElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX01JTgkoMCkKKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGCSg1MCkKKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9MT05HX1RIUkVTSE9MRF9ERUYJKDEwMCkKKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9FWFRfTE9OR19USFJFU0hPTERfREVGCSgyMDApCisjZGVmaW5lIElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX01BWAkoMjU1KQorCisjZGVmaW5lIElXTF9ERUxBWV9ORVhUX0ZPUkNFX1JGX1JFU0VUICAoSFoqMykKKyNkZWZpbmUgSVdMX0RFTEFZX05FWFRfRk9SQ0VfRldfUkVMT0FEIChIWio1KQorCitlbnVtIGl3bF9yZXNldCB7CisJSVdMX1JGX1JFU0VUID0gMCwKKwlJV0xfRldfUkVTRVQsCisJSVdMX01BWF9GT1JDRV9SRVNFVCwKK307CisKK3N0cnVjdCBpd2xfZm9yY2VfcmVzZXQgeworCWludCByZXNldF9yZXF1ZXN0X2NvdW50OworCWludCByZXNldF9zdWNjZXNzX2NvdW50OworCWludCByZXNldF9yZWplY3RfY291bnQ7CisJdW5zaWduZWQgbG9uZyByZXNldF9kdXJhdGlvbjsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZm9yY2VfcmVzZXRfamlmZmllczsKK307CisKIHN0cnVjdCBpd2xfcHJpdiB7CiAKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KQEAgLTEwMDQsMTMgKzEwNzMsMTkgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UKSB8fCBkZWZpbmVkKENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UKQogCS8qIHNwZWN0cnVtIG1lYXN1cmVtZW50IHJlcG9ydCBjYWNoaW5nICovCiAJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gbWVhc3VyZV9yZXBvcnQ7CiAJdTggbWVhc3VyZW1lbnRfc3RhdHVzOwotI2VuZGlmCisKIAkvKiB1Y29kZSBiZWFjb24gdGltZSAqLwogCXUzMiB1Y29kZV9iZWFjb25fdGltZTsKKwlpbnQgbWlzc2VkX2JlYWNvbl90aHJlc2hvbGQ7CisKKwkvKiBzdG9yaW5nIHRoZSBqaWZmaWVzIHdoZW4gdGhlIHBsY3AgZXJyb3IgcmF0ZSBpcyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgcGxjcF9qaWZmaWVzOworCisJLyogZm9yY2UgcmVzZXQgKi8KKwlzdHJ1Y3QgaXdsX2ZvcmNlX3Jlc2V0IGZvcmNlX3Jlc2V0W0lXTF9NQVhfRk9SQ0VfUkVTRVRdOwogCiAJLyogd2UgYWxsb2NhdGUgYXJyYXkgb2YgaXdsNDk2NV9jaGFubmVsX2luZm8gZm9yIE5JQydzIHZhbGlkIGNoYW5uZWxzLgogCSAqICAgIEFjY2VzcyB2aWEgY2hhbm5lbCAjIHVzaW5nIGluZGlyZWN0IGluZGV4IGFycmF5ICovCkBAIC0xMDI5LDcgKzExMDQsNiBAQAogCXN0cnVjdCBpd2xfY2FsaWJfcmVzdWx0IGNhbGliX3Jlc3VsdHNbSVdMX0NBTElCX01BWF07CiAKIAkvKiBTY2FuIHJlbGF0ZWQgdmFyaWFibGVzICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5famlmZmllczsKIAl1bnNpZ25lZCBsb25nIG5leHRfc2Nhbl9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHNjYW5fcGFzc19zdGFydDsKQEAgLTEwMzcsNiArMTExMSw3IEBACiAJdm9pZCAqc2NhbjsKIAlpbnQgc2Nhbl9iYW5kczsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7CisJYm9vbCBpc19pbnRlcm5hbF9zaG9ydF9zY2FuOwogCXU4IHNjYW5fdHhfYW50W0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXU4IG1nbXRfdHhfYW50OwogCkBAIC0xMDQ1LDYgKzExMjAsNyBAQAogCXNwaW5sb2NrX3QgaGNtZF9sb2NrOwkvKiBwcm90ZWN0IGhjbWQgKi8KIAlzcGlubG9ja190IHJlZ19sb2NrOwkvKiBwcm90ZWN0IGh3IHJlZ2lzdGVyIGFjY2VzcyAqLwogCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgbXV0ZXggc3luY19jbWRfbXV0ZXg7IC8qIGVuYWJsZSBzZXJpYWxpemF0aW9uIG9mIHN5bmMgY29tbWFuZHMgKi8KIAogCS8qIGJhc2ljIHBjaS1uZXR3b3JrIGRyaXZlciBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwpAQCAtMTEzNSw2ICsxMjExLDggQEAKIAlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBhY2N1bV9zdGF0aXN0aWNzOworCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBkZWx0YV9zdGF0aXN0aWNzOworCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBtYXhfZGVsdGE7CiAjZW5kaWYKIAogCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KQEAgLTEyMDcsMTUgKzEyODUsMTAgQEAKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXA7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGNhbGlicmF0ZWRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9jb21wbGV0ZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3JlcGxlbmlzaDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWJvcnRfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXBkYXRlX2xpbmtfbGVkOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhdXRoX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcG9ydF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X3NjYW47CiAJc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl91cGRhdGU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR0X3dvcms7CkBAIC0xMjUxLDcgKzEzMjQsOCBAQAogCXUxNiByeF90cmFmZmljX2lkeDsKIAl1OCAqdHhfdHJhZmZpYzsKIAl1OCAqcnhfdHJhZmZpYzsKLQlzdHJ1Y3QgaXdsX2RlYnVnZnMgKmRiZ2ZzOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOworCXUzMiBkYmdmc19zcmFtX29mZnNldCwgZGJnZnNfc3JhbV9sZW47CiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUdGUyAqLwogI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKQEAgLTEyNjEsNiArMTMzNSw3IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisJc3RydWN0IHRpbWVyX2xpc3QgdWNvZGVfdHJhY2U7CiAJYm9vbCBod19yZWFkeTsKIAkvKkZvciAzOTQ1Ki8KICNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgpAQCAtMTI2OCw2ICsxMzQzLDggQEAKIAlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3NfMzk7CiAKIAl1MzIgc3RhX3N1cHBfcmF0ZXM7CisKKwlzdHJ1Y3QgaXdsX2V2ZW50X2xvZyBldmVudF9sb2c7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYwppbmRleCA4M2NjNGU1Li4zNjU4MGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMKQEAgLTM3LDQgKzM3LDYgQEAKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChpd2x3aWZpX2Rldl9yeCk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQpOwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3Vjb2RlX2Vycm9yKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChpd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50KTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChpd2x3aWZpX2Rldl91Y29kZV93cmFwX2V2ZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKaW5kZXggZDljNzM2My4uZmY0ZDAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCkBAIC05MSw2ICs5MSw1MCBAQAogKTsKIAogI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gaXdsd2lmaV91Y29kZQorCitUUkFDRV9FVkVOVChpd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50LAorCVRQX1BST1RPKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHRpbWUsIHUzMiBkYXRhLCB1MzIgZXYpLAorCVRQX0FSR1MocHJpdiwgdGltZSwgZGF0YSwgZXYpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCVBSSVZfRU5UUlkKKworCQlfX2ZpZWxkKHUzMiwgdGltZSkKKwkJX19maWVsZCh1MzIsIGRhdGEpCisJCV9fZmllbGQodTMyLCBldikKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlQUklWX0FTU0lHTjsKKwkJX19lbnRyeS0+dGltZSA9IHRpbWU7CisJCV9fZW50cnktPmRhdGEgPSBkYXRhOworCQlfX2VudHJ5LT5ldiA9IGV2OworCSksCisJVFBfcHJpbnRrKCJbJXBdIEVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1IiwKKwkJICBfX2VudHJ5LT5wcml2LCBfX2VudHJ5LT50aW1lLCBfX2VudHJ5LT5kYXRhLCBfX2VudHJ5LT5ldikKKyk7CisKK1RSQUNFX0VWRU5UKGl3bHdpZmlfZGV2X3Vjb2RlX3dyYXBfZXZlbnQsCisJVFBfUFJPVE8oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgd3JhcHMsIHUzMiBuX2VudHJ5LCB1MzIgcF9lbnRyeSksCisJVFBfQVJHUyhwcml2LCB3cmFwcywgbl9lbnRyeSwgcF9lbnRyeSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJUFJJVl9FTlRSWQorCisJCV9fZmllbGQodTMyLCB3cmFwcykKKwkJX19maWVsZCh1MzIsIG5fZW50cnkpCisJCV9fZmllbGQodTMyLCBwX2VudHJ5KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCVBSSVZfQVNTSUdOOworCQlfX2VudHJ5LT53cmFwcyA9IHdyYXBzOworCQlfX2VudHJ5LT5uX2VudHJ5ID0gbl9lbnRyeTsKKwkJX19lbnRyeS0+cF9lbnRyeSA9IHBfZW50cnk7CisJKSwKKwlUUF9wcmludGsoIlslcF0gd3JhcHM9IyUwMmQgbj0weCVYIHA9MHglWCIsCisJCSAgX19lbnRyeS0+cHJpdiwgX19lbnRyeS0+d3JhcHMsIF9fZW50cnktPm5fZW50cnksCisJCSAgX19lbnRyeS0+cF9lbnRyeSkKKyk7CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KICNkZWZpbmUgVFJBQ0VfU1lTVEVNIGl3bHdpZmkKIAogVFJBQ0VfRVZFTlQoaXdsd2lmaV9kZXZfaGNtZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKaW5kZXggNGEzMDk2OS4uZmQzNzE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCmluZGV4IDBjZDljMDIuLjRlMWJhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggNjVmYThhNjkuLjExM2MzNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3OSw2ICszNzksMjUgQEAKIAogI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVU19SRUcJCShGSF9UU1NSX0xPV0VSX0JPVU5EICsgMHgwMTApCiAKKy8qKgorICogQml0IGZpZWxkcyBmb3IgVFNTUihUeCBTaGFyZWQgU3RhdHVzICYgQ29udHJvbCkgZXJyb3Igc3RhdHVzIHJlZ2lzdGVyOgorICogMzE6ICBJbmRpY2F0ZXMgYW4gYWRkcmVzcyBlcnJvciB3aGVuIGFjY2Vzc2VkIHRvIGludGVybmFsIG1lbW9yeQorICoJdUNvZGUvZHJpdmVyIG11c3Qgd3JpdGUgIjEiIGluIG9yZGVyIHRvIGNsZWFyIHRoaXMgZmxhZworICogMzA6ICBJbmRpY2F0ZXMgdGhhdCBIb3N0IGRpZCBub3Qgc2VuZCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGR3b3JkcyB0byBGSAorICoJdUNvZGUvZHJpdmVyIG11c3Qgd3JpdGUgIjEiIGluIG9yZGVyIHRvIGNsZWFyIHRoaXMgZmxhZworICogMTYtOTpFYWNoIHN0YXR1cyBiaXQgaXMgZm9yIG9uZSBjaGFubmVsLiBJbmRpY2F0ZXMgdGhhdCBhbiAoRXJyb3IpIEFjdERNQQorICoJY29tbWFuZCB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHdoaWxlIHRoZSBUUkIgd2FzIGFscmVhZHkgZnVsbAorICoJd2l0aCBwcmV2aW91cyBjb21tYW5kCisgKgl1Q29kZS9kcml2ZXIgbXVzdCB3cml0ZSAiMSIgaW4gb3JkZXIgdG8gY2xlYXIgdGhpcyBmbGFnCisgKiA3LTA6IEVhY2ggc3RhdHVzIGJpdCBpbmRpY2F0ZXMgYSBjaGFubmVsJ3MgVHhDcmVkaXQgZXJyb3IuIFdoZW4gYW4gZXJyb3IKKyAqCWJpdCBpcyBzZXQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBGSCBoYXMgcmVjZWl2ZWQgYSBmdWxsIGluZGljYXRpb24KKyAqCWZyb20gdGhlIFJUQyBUeEZJRk8gYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBUeENyZWRpdCBjb3VudGVyIHdhcworICoJbm90IGVxdWFsIHRvIHplcm8uIFRoaXMgbWVhbiB0aGF0IHRoZSBjcmVkaXQgbWVjaGFuaXNtIHdhcyBub3QKKyAqCXN5bmNocm9uaXplZCB0byB0aGUgVHhGSUZPIHN0YXR1cworICoJdUNvZGUvZHJpdmVyIG11c3Qgd3JpdGUgIjEiIGluIG9yZGVyIHRvIGNsZWFyIHRoaXMgZmxhZworICovCisjZGVmaW5lIEZIX1RTU1JfVFhfRVJST1JfUkVHCQkoRkhfVFNTUl9MT1dFUl9CT1VORCArIDB4MDE4KQorCiAjZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hubCkgKCgxIDw8IChfY2hubCkpIDw8IDI0KQogI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaG5sKSAoKDEgPDwgKF9jaG5sKSkgPDwgMTYpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCAzMGU5ZWE2Li43MzY4MWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC01OCw3ICs1OCw2IEBACiAJCUlXTF9DTUQoQ09FWF9QUklPUklUWV9UQUJMRV9DTUQpOwogCQlJV0xfQ01EKENPRVhfTUVESVVNX05PVElGSUNBVElPTik7CiAJCUlXTF9DTUQoQ09FWF9FVkVOVF9DTUQpOwotCQlJV0xfQ01EKFJBREFSX05PVElGSUNBVElPTik7CiAJCUlXTF9DTUQoUkVQTFlfUVVJRVRfQ01EKTsKIAkJSVdMX0NNRChSRVBMWV9DSEFOTkVMX1NXSVRDSCk7CiAJCUlXTF9DTUQoQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OKTsKQEAgLTE2NSwxNSArMTY0LDEzIEBACiAJIC8qIEEgc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGhhdmUgYSBjYWxsYmFjayBzZXQuICovCiAJQlVHX09OKGNtZC0+Y2FsbGJhY2spOwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9FUlIocHJpdiwKLQkJCSJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkF0dGVtcHRpbmcgdG8gc2VuZCBzeW5jIGNvbW1hbmQgJXNcbiIsCiAJCQlnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQorCW11dGV4X2xvY2soJnByaXYtPnN5bmNfY21kX211dGV4KTsKIAogCXNldF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2V0dGluZyBIQ01EX0FDVElWRSBmb3IgY29tbWFuZCAlcyBcbiIsCisJCQlnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CiAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewpAQCAtMTk0LDYgKzE5MSw4IEBACiAJCQkJamlmZmllc190b19tc2VjcyhIT1NUX0NPTVBMRVRFX1RJTUVPVVQpKTsKIAogCQkJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ2xlYXJpbmcgSENNRF9BQ1RJVkUgZm9yIGNvbW1hbmQgJXMgXG4iLAorCQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CiAJCQlyZXQgPSAtRVRJTUVET1VUOwogCQkJZ290byBjYW5jZWw7CiAJCX0KQEAgLTIzOCw3ICsyMzcsNyBAQAogCQljbWQtPnJlcGx5X3BhZ2UgPSAwOwogCX0KIG91dDoKLQljbGVhcl9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCW11dGV4X3VubG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NtZF9zeW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBiZDBiMTJlLi41MWE2N2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC04MCw4ICs4MCw4IEBACiAJCQkJICAgIHN0cnVjdCBmd19kZXNjICpkZXNjKQogewogCWlmIChkZXNjLT52X2FkZHIpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGNpX2RldiwgZGVzYy0+bGVuLAotCQkJCSAgICBkZXNjLT52X2FkZHIsIGRlc2MtPnBfYWRkcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGRlc2MtPmxlbiwKKwkJCQkgIGRlc2MtPnZfYWRkciwgZGVzYy0+cF9hZGRyKTsKIAlkZXNjLT52X2FkZHIgPSBOVUxMOwogCWRlc2MtPmxlbiA9IDA7CiB9CkBAIC04OSw3ICs4OSw4IEBACiBzdGF0aWMgaW5saW5lIGludCBpd2xfYWxsb2NfZndfZGVzYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCQkgICAgc3RydWN0IGZ3X2Rlc2MgKmRlc2MpCiB7Ci0JZGVzYy0+dl9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgZGVzYy0+bGVuLCAmZGVzYy0+cF9hZGRyKTsKKwlkZXNjLT52X2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgZGVzYy0+bGVuLAorCQkJCQkgICZkZXNjLT5wX2FkZHIsIEdGUF9LRVJORUwpOwogCXJldHVybiAoZGVzYy0+dl9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9NRU07CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCmluZGV4IGU1NTJkNGMuLmM3MTliYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDQ2YzdhOTUuLmE2ZjljOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKaW5kZXggZjQ3ZjA1My4uNDlhNzBiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKaW5kZXggOGNjYzBiYi4uMWExYTlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0zMDMsMTMgKzMwMywxMiBAQAogCQkJCXNpemVvZihzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kKSwgY21kKTsKIH0KIAotCisvKiBwcml2LT5tdXRleCBtdXN0IGJlIGhlbGQgKi8KIGludCBpd2xfcG93ZXJfdXBkYXRlX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZvcmNlKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKLQlib29sIGVuYWJsZWQgPSAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCQkJKHByaXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpOworCWJvb2wgZW5hYmxlZCA9IHByaXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFM7CiAJYm9vbCB1cGRhdGVfY2hhaW5zOwogCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOwogCWludCBkdGltcGVyOwpAQCAtMzE5LDcgKzMxOCw3IEBACiAJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRTsKIAogCWlmIChwcml2LT52aWYpCi0JCWR0aW1wZXIgPSBwcml2LT52aWYtPmJzc19jb25mLmR0aW1fcGVyaW9kOworCQlkdGltcGVyID0gcHJpdi0+aHctPmNvbmYucHNfZHRpbV9wZXJpb2Q7CiAJZWxzZQogCQlkdGltcGVyID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKaW5kZXggMzEwYzMyZTguLjVkYjkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IDZkOTU4MzIuLmQyZDJhOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCAyZGJjZTg1NC4uZGYyNTdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xMjMsMTIgKzEyMywxMSBAQAogLyoqCiAgKiBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCiAgKi8KLWludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpCit2b2lkIGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiByeF93cnRfcHRyX3JlZyA9IHByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZzsKIAl1MzIgcmVnOwotCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTYxLDcgKzE2MCw2IEBACiAKICBleGl0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIpOwogLyoqCkBAIC0xODQsMTQgKzE4MiwxMyBAQAogICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKICAqIHRhcmdldCBidWZmZXIuCiAgKi8KLWludCBpd2xfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bF9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgd3JpdGU7Ci0JaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlICYgfjB4NzsKQEAgLTIyMCwxMCArMjE3LDggQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCQlyeHEtPm5lZWRfdXBkYXRlID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3Jlc3RvY2spOwogCkBAIC0zNTAsMTAgKzM0NSwxMCBAQAogCQl9CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgICByeHEtPmRtYV9hZGRyKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3JiX3N0YXR1cyksCi0JCQkgICAgcnhxLT5yYl9zdHRzLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKKwkJCSAgcnhxLT5kbWFfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKKwkJCSAgcnhxLT5yYl9zdHRzLCByeHEtPnJiX3N0dHNfZG1hKTsKIAlyeHEtPmJkID0gTlVMTDsKIAlyeHEtPnJiX3N0dHMgID0gTlVMTDsKIH0KQEAgLTM2Miw3ICszNTcsNyBAQAogaW50IGl3bF9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcHJpdi0+cGNpX2Rldi0+ZGV2OwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7CkBAIC0zNzAsMTIgKzM2NSwxMyBAQAogCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwogCiAJLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KLQlyeHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIpOworCXJ4cS0+YmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIsCisJCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ4cS0+YmQpCiAJCWdvdG8gZXJyX2JkOwogCi0JcnhxLT5yYl9zdHRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGl3bF9yYl9zdGF0dXMpLAotCQkJCQkmcnhxLT5yYl9zdHRzX2RtYSk7CisJcnhxLT5yYl9zdHRzID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKKwkJCQkJICAmcnhxLT5yYl9zdHRzX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeHEtPnJiX3N0dHMpCiAJCWdvdG8gZXJyX3JiOwogCkBAIC0zOTIsOCArMzg4LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyX3JiOgotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgNCAqIFJYX1FVRVVFX1NJWkUsIHJ4cS0+YmQsCi0JCQkgICAgcnhxLT5kbWFfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwgNCAqIFJYX1FVRVVFX1NJWkUsIHJ4cS0+YmQsCisJCQkgIHJ4cS0+ZG1hX2FkZHIpOwogZXJyX2JkOgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDczLDggKzQ2OSw4IEBACiAJCQkgICAocmJfdGltZW91dCA8PCBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfSVJRX1JCVEhfUE9TKXwKIAkJCSAgIChyZmRubG9nIDw8IEZIX1JDU1JfUlhfQ09ORklHX1JCRENCX1NJWkVfUE9TKSk7CiAKLQkvKiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgdGltZXIgdG8gNjQgeCAzMiA9IDIwNDggdXNlY3MgKi8KLQlpd2xfd3JpdGU4KHByaXYsIENTUl9JTlRfQ09BTEVTQ0lORywgMHg0MCk7CisJLyogU2V0IGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWVyIHRvIGRlZmF1bHQgKDIwNDggdXNlY3MpICovCisJaXdsX3dyaXRlOChwcml2LCBDU1JfSU5UX0NPQUxFU0NJTkcsIElXTF9IT1NUX0lOVF9USU1FT1VUX0RFRik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSw5ICs0OTUsMTAgQEAKIAlzdHJ1Y3QgaXdsX21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247CiAKIAltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOwotCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucykgPiA1KSB7CisJaWYgKGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlY3V0aXZlX21pc3NlZF9iZWFjb25zKSA+CisJICAgIHByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkKSB7CiAJCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlY3V0aXZlX21pc3NlZF9iZWFjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX2V4cGVjdGVkX2JlYWNvbnMpKTsKQEAgLTUxMSw2ICs1MDgsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYpOwogCit2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOworCisJaWYgKCFyZXBvcnQtPnN0YXRlKSB7CisJCUlXTF9ERUJVR18xMUgocHJpdiwKKwkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOworCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYpOworCisKIAogLyogQ2FsY3VsYXRlIG5vaXNlIGxldmVsLCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgZHVyaW5nIG5ldHdvcmsgc2lsZW5jZSBqdXN0CiAgKiAgIGJlZm9yZSBhcnJpdmluZyBiZWFjb24uICBUaGlzIG1lYXN1cmVtZW50IGNhbiBiZSBkb25lIG9ubHkgaWYgd2Uga25vdwpAQCAtNTY0LDE1ICs1NzksMjQgQEAKIAlpbnQgaTsKIAlfX2xlMzIgKnByZXZfc3RhdHM7CiAJdTMyICphY2N1bV9zdGF0czsKKwl1MzIgKmRlbHRhLCAqbWF4X2RlbHRhOwogCiAJcHJldl9zdGF0cyA9IChfX2xlMzIgKikmcHJpdi0+c3RhdGlzdGljczsKIAlhY2N1bV9zdGF0cyA9ICh1MzIgKikmcHJpdi0+YWNjdW1fc3RhdGlzdGljczsKKwlkZWx0YSA9ICh1MzIgKikmcHJpdi0+ZGVsdGFfc3RhdGlzdGljczsKKwltYXhfZGVsdGEgPSAodTMyICopJnByaXYtPm1heF9kZWx0YTsKIAogCWZvciAoaSA9IHNpemVvZihfX2xlMzIpOyBpIDwgc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyk7Ci0JICAgICBpICs9IHNpemVvZihfX2xlMzIpLCBzdGF0cysrLCBwcmV2X3N0YXRzKyssIGFjY3VtX3N0YXRzKyspCi0JCWlmIChsZTMyX3RvX2NwdSgqc3RhdHMpID4gbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKQotCQkJKmFjY3VtX3N0YXRzICs9IChsZTMyX3RvX2NwdSgqc3RhdHMpIC0KKwkgICAgIGkgKz0gc2l6ZW9mKF9fbGUzMiksIHN0YXRzKyssIHByZXZfc3RhdHMrKywgZGVsdGErKywKKwkgICAgIG1heF9kZWx0YSsrLCBhY2N1bV9zdGF0cysrKSB7CisJCWlmIChsZTMyX3RvX2NwdSgqc3RhdHMpID4gbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKSB7CisJCQkqZGVsdGEgPSAobGUzMl90b19jcHUoKnN0YXRzKSAtCiAJCQkJbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKTsKKwkJCSphY2N1bV9zdGF0cyArPSAqZGVsdGE7CisJCQlpZiAoKmRlbHRhID4gKm1heF9kZWx0YSkKKwkJCQkqbWF4X2RlbHRhID0gKmRlbHRhOworCQl9CisJfQogCiAJLyogcmVzZXQgYWNjdW11bGF0aXZlIHN0YXRpc3RpY3MgZm9yICJuby1jb3VudGVyIiB0eXBlIHN0YXRpc3RpY3MgKi8KIAlwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUgPQpAQCAtNTkyLDExICs2MTYsMTUgQEAKIAogI2RlZmluZSBSRUdfUkVDQUxJQl9QRVJJT0QgKDYwKQogCisjZGVmaW5lIFBMQ1BfTVNHICJwbGNwX2VyciBleGNlZWRlZCAldSwgJXUsICV1LCAldSwgJXUsICVkLCAldSBtU2Vjc1xuIgogdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlpbnQgY2hhbmdlOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOworCWludCBjb21iaW5lZF9wbGNwX2RlbHRhOworCXVuc2lnbmVkIGludCBwbGNwX21zZWM7CisJdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7CiAKIAlJV0xfREVCVUdfUlgocHJpdiwgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAogCQkgICAgIChpbnQpc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpLApAQCAtNjExLDYgKzYzOSw1NiBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzKTsKICNlbmRpZgorCS8qCisJICogY2hlY2sgZm9yIHBsY3BfZXJyIGFuZCB0cmlnZ2VyIHJhZGlvIHJlc2V0IGlmIGl0IGV4Y2VlZHMKKwkgKiB0aGUgcGxjcCBlcnJvciB0aHJlc2hvbGQgcGxjcF9kZWx0YS4KKwkgKi8KKwlwbGNwX3JlY2VpdmVkX2ppZmZpZXMgPSBqaWZmaWVzOworCXBsY3BfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoKGxvbmcpIHBsY3BfcmVjZWl2ZWRfamlmZmllcyAtCisJCQkJCShsb25nKSBwcml2LT5wbGNwX2ppZmZpZXMpOworCXByaXYtPnBsY3BfamlmZmllcyA9IHBsY3BfcmVjZWl2ZWRfamlmZmllczsKKwkvKgorCSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSBwbGNwX21zZWMgaXMgbm90IDAgdG8gcHJldmVudCBkaXZpc2lvbgorCSAqIGJ5IHplcm8uCisJICovCisJaWYgKHBsY3BfbXNlYykgeworCQljb21iaW5lZF9wbGNwX2RlbHRhID0KKwkJCShsZTMyX3RvX2NwdShwa3QtPnUuc3RhdHMucngub2ZkbS5wbGNwX2VycikgLQorCQkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtLnBsY3BfZXJyKSkgKworCQkJKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtX2h0LnBsY3BfZXJyKSAtCisJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG1faHQucGxjcF9lcnIpKTsKKworCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgorCQkJKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgorCQkJcHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCkgeworCQkJLyoKKwkJCSAqIGlmIHBsY3BfZXJyIGV4Y2VlZCB0aGUgdGhyZXNob2xkLCB0aGUgZm9sbG93aW5nCisJCQkgKiBkYXRhIGlzIHByaW50ZWQgaW4gY3N2IGZvcm1hdDoKKwkJCSAqICAgIFRleHQ6IHBsY3BfZXJyIGV4Y2VlZGVkICVkLAorCQkJICogICAgUmVjZWl2ZWQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIEN1cnJlbnQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIFJlY2VpdmVkIG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBDdXJyZW50IG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAorCQkJICogICAgcGxjcF9tc2VjCisJCQkgKi8KKwkJCUlXTF9ERUJVR19SQURJTyhwcml2LCBQTENQX01TRywKKwkJCQlwcml2LT5jZmctPnBsY3BfZGVsdGFfdGhyZXNob2xkLAorCQkJCWxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtLnBsY3BfZXJyKSwKKwkJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpLAorCQkJCWxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtX2h0LnBsY3BfZXJyKSwKKwkJCQlsZTMyX3RvX2NwdSgKKwkJCQkJcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtX2h0LnBsY3BfZXJyKSwKKwkJCQljb21iaW5lZF9wbGNwX2RlbHRhLCBwbGNwX21zZWMpOworCisJCQkvKgorCQkJICogUmVzZXQgdGhlIFJGIHJhZGlvIGR1ZSB0byB0aGUgaGlnaCBwbGNwCisJCQkgKiBlcnJvciByYXRlCisJCQkgKi8KKwkJCWl3bF9mb3JjZV9yZXNldChwcml2LCBJV0xfUkZfUkVTRVQpOworCQl9CisJfQorCiAJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLCBzaXplb2YocHJpdi0+c3RhdGlzdGljcykpOwogCiAJc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7CkBAIC02MzgsMTEgKzcxNiwxMyBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOwogCiAJaWYgKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5mbGFnKSAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKSB7Ci0JCW1lbXNldCgmcHJpdi0+c3RhdGlzdGljcywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCQltZW1zZXQoJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MsIDAsCiAJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CisJCW1lbXNldCgmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJbWVtc2V0KCZwcml2LT5tYXhfZGVsdGEsIDAsCisJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CiAjZW5kaWYKIAkJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggZmExYzg5Yi4uZGQ5ZmYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTkyLDE5ICsxOTIsMTcgQEAKIAlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjaC5yZXM6ICIKIAkJICAgICAgICIlZCBbODAyLjExJXNdICIKIAkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKKwkJICAgICAgICJlbGFwc2VkPSVsdSB1c2VjXG4iLAogCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCiAJCSAgICAgICBub3RpZi0+YmFuZCA/ICJiZyIgOiAiYSIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2hpZ2gpLAogCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpLAogCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnN0YXRpc3RpY3NbMF0pLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpIC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMsIGppZmZpZXMpKSk7CisJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZik7CiAjZW5kaWYKIAotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7CisJaWYgKCFwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuKQorCQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7CiB9CiAKIC8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCkBAIC0yNTAsOCArMjQ4LDkgQEAKIAkJCWdvdG8gcmVzY2hlZHVsZTsKIAl9CiAKLQlwcml2LT5sYXN0X3NjYW5famlmZmllcyA9IGppZmZpZXM7Ci0JcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikKKwkJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwogCiAJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CkBAIC0zMTQsNiArMzEzLDcyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKTsKIAorc3RhdGljIGludCBpd2xfZ2V0X3NpbmdsZV9jaGFubmVsX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgICAgIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCXUxNiBwYXNzaXZlX2R3ZWxsID0gMDsKKwl1MTYgYWN0aXZlX2R3ZWxsID0gMDsKKwlpbnQgaSwgYWRkZWQgPSAwOworCXUxNiBjaGFubmVsID0gMDsKKworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOworCWlmICghc2JhbmQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBiYW5kXG4iKTsKKwkJcmV0dXJuIGFkZGVkOworCX0KKworCWFjdGl2ZV9kd2VsbCA9IGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCwgMCk7CisJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOworCisJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQorCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKKworCS8qIG9ubHkgc2NhbiBzaW5nbGUgY2hhbm5lbCwgZ29vZCBlbm91Z2ggdG8gcmVzZXQgdGhlIFJGICovCisJLyogcGljayB0aGUgZmlyc3QgdmFsaWQgbm90IGluLXVzZSBjaGFubmVsICovCisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQlmb3IgKGkgPSAxNDsgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgeworCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsICE9CisJCQkgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKSB7CisJCQkJY2hhbm5lbCA9IHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsOworCQkJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQkJCQliYW5kLCBjaGFubmVsKTsKKwkJCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsICE9CisJCQkgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKSB7CisJCQkJCWNoYW5uZWwgPQorCQkJCQkJcHJpdi0+Y2hhbm5lbF9pbmZvW2ldLmNoYW5uZWw7CisJCQkJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQkJCQkJYmFuZCwgY2hhbm5lbCk7CisJCQkJCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQorCQkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGNoYW5uZWwpIHsKKwkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOworCQlzY2FuX2NoLT50eXBlID0gU0NBTl9DSEFOTkVMX1RZUEVfUEFTU0lWRTsKKwkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYoYWN0aXZlX2R3ZWxsKTsKKwkJc2Nhbl9jaC0+cGFzc2l2ZV9kd2VsbCA9IGNwdV90b19sZTE2KHBhc3NpdmVfZHdlbGwpOworCQkvKiBTZXQgdHhwb3dlciBsZXZlbHMgdG8gZGVmYXVsdHMgKi8KKwkJc2Nhbl9jaC0+ZHNwX2F0dGVuID0gMTEwOworCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJc2Nhbl9jaC0+dHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICgzIDw8IDMpKSB8IDM7CisJCWVsc2UKKwkJCXNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7CisJCWFkZGVkKys7CisJfSBlbHNlCisJCUlXTF9FUlIocHJpdiwgIm5vIHZhbGlkIGNoYW5uZWwgZm91bmRcbiIpOworCXJldHVybiBhZGRlZDsKK30KKwogc3RhdGljIGludCBpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQkgICAgIHU4IGlzX2FjdGl2ZSwgdTggbl9wcm9iZXMsCkBAIC00MDQsMjMgKzQ2OSw5IEBACiAKIHN0YXRpYyBpbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydGluZyBzY2FuLi4uXG4iKTsKIAlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CisJcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbiA9IGZhbHNlOwogCXByaXYtPnNjYW5fc3RhcnQgPSBqaWZmaWVzOwogCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IHByaXYtPnNjYW5fc3RhcnQ7CiAKQEAgLTQ0OSw2ICs1MDAsMTggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIFdlIGRvbid0IHNjaGVkdWxlIHNjYW4gd2l0aGluIG5leHRfc2Nhbl9qaWZmaWVzIHBlcmlvZC4KIAkgKiBBdm9pZCBzY2FubmluZyBkdXJpbmcgcG9zc2libGUgRUFQT0wgZXhjaGFuZ2UsIHJldHVybgogCSAqIHN1Y2Nlc3MgaW1tZWRpYXRlbHkuCkBAIC00NjEsMTUgKzUyNCw2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCiAJcHJpdi0+c2Nhbl9iYW5kcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHJlcS0+bl9jaGFubmVsczsgaSsrKQogCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChyZXEtPmNoYW5uZWxzW2ldLT5iYW5kKTsKQEAgLTQ4OCw2ICs1NDIsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX21hY19od19zY2FuKTsKIAorLyoKKyAqIGludGVybmFsIHNob3J0IHNjYW4sIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmVlbiBjYWxsZWQgd2hpbGUgYXNzb2NpYXRlZC4KKyAqIEl0IHdpbGwgcmVzZXQgYW5kIHR1bmUgdGhlIHJhZGlvIHRvIHByZXZlbnQgcG9zc2libGUgUkYgcmVsYXRlZCBwcm9ibGVtCisgKi8KK2ludCBpd2xfaW50ZXJuYWxfc2hvcnRfaHdfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAibm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPnNjYW5fYmFuZHMgPSAwOworCWlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCWVsc2UKKwkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7CisKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgaW50ZXJuYWwgc2hvcnQgc2Nhbi4uLlxuIik7CisJc2V0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOworCXByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4gPSB0cnVlOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9pbnRlcm5hbF9zaG9ydF9od19zY2FuKTsKKwogI2RlZmluZSBJV0xfU0NBTl9DSEVDS19XQVRDSERPRyAoNyAqIEhaKQogCiB2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKQEAgLTU0NCwxNCArNjM4LDI2IEBACiAJaWYgKGxlZnQgPCAwKQogCQlyZXR1cm4gMDsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IDA7CisJaWYgKCFwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuICYmCisJICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+bl9zc2lkcykgeworCQlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCA9CisJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzOwogCi0JbGVuICs9IDI7CisJCS8qIEJyb2FkY2FzdCBpZiBzc2lkX2xlbiBpcyAwICovCisJCSpwb3MrKyA9IHNzaWQtPnNzaWRfbGVuOworCQltZW1jcHkocG9zLCBzc2lkLT5zc2lkLCBzc2lkLT5zc2lkX2xlbik7CisJCXBvcyArPSBzc2lkLT5zc2lkX2xlbjsKKwkJbGVuICs9IDIgKyBzc2lkLT5zc2lkX2xlbjsKKwl9IGVsc2UgeworCQkqcG9zKysgPSAwOworCQlsZW4gKz0gMjsKKwl9CiAKIAlpZiAoV0FSTl9PTihsZWZ0IDwgaWVfbGVuKSkKIAkJcmV0dXJuIGxlbjsKIAotCW1lbWNweShwb3MsIGllcywgaWVfbGVuKTsKKwlpZiAoaWVzKQorCQltZW1jcHkocG9zLCBpZXMsIGllX2xlbik7CiAJbGVuICs9IGllX2xlbjsKIAlsZWZ0IC09IGllX2xlbjsKIApAQCAtNjU0LDcgKzc2MCw2IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNjcyLDIxICs3NzcsMjkgQEAKIAkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwogCX0KIAotCWlmIChwcml2LT5zY2FuX3JlcXVlc3QtPm5fc3NpZHMpIHsKLQkJaW50IGksIHAgPSAwOworCWlmIChwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdGFydCBpbnRlcm5hbCBwYXNzaXZlIHNjYW4uXG4iKTsKKwl9IGVsc2UgaWYgKHByaXYtPnNjYW5fcmVxdWVzdC0+bl9zc2lkcykgewogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgYWN0aXZlIHNjYW5cbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX3NzaWRzOyBpKyspIHsKLQkJCS8qIGFsd2F5cyBkb2VzIHdpbGRjYXJkIGFueXdheSAqLwotCQkJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuKQotCQkJCWNvbnRpbnVlOwotCQkJc2Nhbi0+ZGlyZWN0X3NjYW5bcF0uaWQgPSBXTEFOX0VJRF9TU0lEOwotCQkJc2Nhbi0+ZGlyZWN0X3NjYW5bcF0ubGVuID0KLQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuOwotCQkJbWVtY3B5KHNjYW4tPmRpcmVjdF9zY2FuW3BdLnNzaWQsCi0JCQkgICAgICAgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLAotCQkJICAgICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pOwotCQkJbl9wcm9iZXMrKzsKLQkJCXArKzsKKwkJLyoKKwkJICogVGhlIGZpcnN0IFNTSUQgdG8gc2NhbiBpcyBzdHVmZmVkIGludG8gdGhlIHByb2JlIHJlcXVlc3QKKwkJICogdGVtcGxhdGUgYW5kIHRoZSByZW1haW5pbmcgb25lcyBhcmUgaGFuZGxlZCB0aHJvdWdoIHRoZQorCQkgKiBkaXJlY3Rfc2NhbiBhcnJheS4KKwkJICovCisJCWlmIChwcml2LT5zY2FuX3JlcXVlc3QtPm5fc3NpZHMgPiAxKSB7CisJCQlpbnQgaSwgcCA9IDA7CisJCQlmb3IgKGkgPSAxOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX3NzaWRzOyBpKyspIHsKKwkJCQlpZiAoIXByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pCisJCQkJCWNvbnRpbnVlOworCQkJCXNjYW4tPmRpcmVjdF9zY2FuW3BdLmlkID0gV0xBTl9FSURfU1NJRDsKKwkJCQlzY2FuLT5kaXJlY3Rfc2NhbltwXS5sZW4gPQorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuOworCQkJCW1lbWNweShzY2FuLT5kaXJlY3Rfc2NhbltwXS5zc2lkLAorCQkJCSAgICAgICBwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWQsCisJCQkJICAgICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pOworCQkJCW5fcHJvYmVzKys7CisJCQkJcCsrOworCQkJfQogCQl9CiAJCWlzX2FjdGl2ZSA9IHRydWU7CiAJfSBlbHNlCkBAIC03NTMsMjQgKzg2NiwzOCBAQAogCXJ4X2NoYWluIHw9IHJ4X2FudCA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CiAJcnhfY2hhaW4gfD0gMHgxIDw8IFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUzsKIAlzY2FuLT5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKLQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCi0JCQkJcHJpdi0+c2Nhbl9yZXF1ZXN0LT5pZSwKLQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllX2xlbiwKLQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikgeworCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCisJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllLAorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllX2xlbiwKKwkJCQkJSVdMX01BWF9TQ0FOX1NJWkUgLSBzaXplb2YoKnNjYW4pKTsKKwl9IGVsc2UgeworCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCisJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCQlOVUxMLCAwLAorCQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpOwogCisJfQogCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNihjbWRfbGVuKTsKLQogCWlmIChpd2xfaXNfbW9uaXRvcl9tb2RlKHByaXYpKQogCQlzY2FuLT5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKIAogCXNjYW4tPmZpbHRlcl9mbGFncyB8PSAoUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0sgfAogCQkJICAgICAgIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLKTsKIAotCXNjYW4tPmNoYW5uZWxfY291bnQgPQotCQlpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHByaXYsIGJhbmQsIGlzX2FjdGl2ZSwgbl9wcm9iZXMsCi0JCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7Ci0KKwlpZiAocHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikgeworCQlzY2FuLT5jaGFubmVsX2NvdW50ID0KKwkJCWl3bF9nZXRfc2luZ2xlX2NoYW5uZWxfZm9yX3NjYW4ocHJpdiwgYmFuZCwKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KAorCQkJCXNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfSBlbHNlIHsKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHByaXYsIGJhbmQsCisJCQkJaXNfYWN0aXZlLCBuX3Byb2JlcywKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KAorCQkJCXNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfQogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKIAkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOwogCQlnb3RvIGRvbmU7CkBAIC04MzEsNyArOTU4LDEyIEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odywgZmFsc2UpOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CisJZWxzZSB7CisJCXByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4gPSBmYWxzZTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImludGVybmFsIHNob3J0IHNjYW4gY29tcGxldGVkXG4iKTsKKwl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWE1Y2QzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCi0gKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtY29yZS5oIgotI2luY2x1ZGUgIml3bC1pby5oIgotI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgotCi0jZGVmaW5lIEJFQUNPTl9USU1FX01BU0tfTE9XCTB4MDBGRkZGRkYKLSNkZWZpbmUgQkVBQ09OX1RJTUVfTUFTS19ISUdICTB4RkYwMDAwMDAKLSNkZWZpbmUgVElNRV9VTklUCQkxMDI0Ci0KLS8qCi0gKiBleHRlbmRlZCBiZWFjb24gdGltZSBmb3JtYXQKLSAqIHRpbWUgaW4gdXNlYyB3aWxsIGJlIGNoYW5nZWQgaW50byBhIDMyLWJpdCB2YWx1ZSBpbiA4OjI0IGZvcm1hdAotICogdGhlIGhpZ2ggMSBieXRlIGlzIHRoZSBiZWFjb24gY291bnRzCi0gKiB0aGUgbG93ZXIgMyBieXRlcyBpcyB0aGUgdGltZSBpbiB1c2VjIHdpdGhpbiBvbmUgYmVhY29uIGludGVydmFsCi0gKi8KLQotLyogVE9PRDogd2FzIHVzZWQgaW4gc3lzZnMgZGVidWcgaW50ZXJmYWNlIG5lZWQgdG8gYWRkIHRvIG1hYyAqLwotI2lmIDAKLXN0YXRpYyB1MzIgaXdsX3VzZWNzX3RvX2JlYWNvbnModTMyIHVzZWMsIHUzMiBiZWFjb25faW50ZXJ2YWwpCi17Ci0JdTMyIHF1b3Q7Ci0JdTMyIHJlbTsKLQl1MzIgaW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWwgKiAxMDI0OwotCi0JaWYgKCFpbnRlcnZhbCB8fCAhdXNlYykKLQkJcmV0dXJuIDA7Ci0KLQlxdW90ID0gKHVzZWMgLyBpbnRlcnZhbCkgJiAoQkVBQ09OX1RJTUVfTUFTS19ISUdIID4+IDI0KTsKLQlyZW0gPSAodXNlYyAlIGludGVydmFsKSAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCi0JcmV0dXJuIChxdW90IDw8IDI0KSArIHJlbTsKLX0KLQotLyogYmFzZSBpcyB1c3VhbGx5IHdoYXQgd2UgZ2V0IGZyb20gdWNvZGUgd2l0aCBlYWNoIHJlY2VpdmVkIGZyYW1lLAotICogdGhlIHNhbWUgYXMgSFcgdGltZXIgY291bnRlciBjb3VudGluZyBkb3duCi0gKi8KLQotc3RhdGljIF9fbGUzMiBpd2xfYWRkX2JlYWNvbl90aW1lKHUzMiBiYXNlLCB1MzIgYWRkb24sIHUzMiBiZWFjb25faW50ZXJ2YWwpCi17Ci0JdTMyIGJhc2VfbG93ID0gYmFzZSAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCXUzMiBhZGRvbl9sb3cgPSBhZGRvbiAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCXUzMiBpbnRlcnZhbCA9IGJlYWNvbl9pbnRlcnZhbCAqIFRJTUVfVU5JVDsKLQl1MzIgcmVzID0gKGJhc2UgJiBCRUFDT05fVElNRV9NQVNLX0hJR0gpICsKLQkgICAgKGFkZG9uICYgQkVBQ09OX1RJTUVfTUFTS19ISUdIKTsKLQotCWlmIChiYXNlX2xvdyA+IGFkZG9uX2xvdykKLQkJcmVzICs9IGJhc2VfbG93IC0gYWRkb25fbG93OwotCWVsc2UgaWYgKGJhc2VfbG93IDwgYWRkb25fbG93KSB7Ci0JCXJlcyArPSBpbnRlcnZhbCArIGJhc2VfbG93IC0gYWRkb25fbG93OwotCQlyZXMgKz0gKDEgPDwgMjQpOwotCX0gZWxzZQotCQlyZXMgKz0gKDEgPDwgMjQpOwotCi0JcmV0dXJuIGNwdV90b19sZTMyKHJlcyk7Ci19Ci1zdGF0aWMgaW50IGl3bF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgICAgdTggdHlwZSkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9zcGVjdHJ1bV9jbWQgc3BlY3RydW07Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01ELAotCQkuZGF0YSA9ICh2b2lkICopJnNwZWN0cnVtLAotCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKLQl9OwotCXUzMiBhZGRfdGltZSA9IGxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSk7Ci0JaW50IHJjOwotCWludCBzcGVjdHJ1bV9yZXNwX3N0YXR1czsKLQlpbnQgZHVyYXRpb24gPSBsZTE2X3RvX2NwdShwYXJhbXMtPmR1cmF0aW9uKTsKLQotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJYWRkX3RpbWUgPQotCQkgICAgaXdsX3VzZWNzX3RvX2JlYWNvbnMoCi0JCQlsZTY0X3RvX2NwdShwYXJhbXMtPnN0YXJ0X3RpbWUpIC0gcHJpdi0+bGFzdF90c2YsCi0JCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpKTsKLQotCW1lbXNldCgmc3BlY3RydW0sIDAsIHNpemVvZihzcGVjdHJ1bSkpOwotCi0Jc3BlY3RydW0uY2hhbm5lbF9jb3VudCA9IGNwdV90b19sZTE2KDEpOwotCXNwZWN0cnVtLmZsYWdzID0KLQkgICAgUlhPTl9GTEdfVFNGMkhPU1RfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLIHwgUlhPTl9GTEdfRElTX0RJVl9NU0s7Ci0Jc3BlY3RydW0uZmlsdGVyX2ZsYWdzID0gTUVBU1VSRU1FTlRfRklMVEVSX0ZMQUc7Ci0JY21kLmxlbiA9IHNpemVvZihzcGVjdHJ1bSk7Ci0Jc3BlY3RydW0ubGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbiAtIHNpemVvZihzcGVjdHJ1bS5sZW4pKTsKLQotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJc3BlY3RydW0uc3RhcnRfdGltZSA9Ci0JCSAgICBpd2xfYWRkX2JlYWNvbl90aW1lKHByaXYtPmxhc3RfYmVhY29uX3RpbWUsCi0JCQkJYWRkX3RpbWUsCi0JCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSk7Ci0JZWxzZQotCQlzcGVjdHJ1bS5zdGFydF90aW1lID0gMDsKLQotCXNwZWN0cnVtLmNoYW5uZWxzWzBdLmR1cmF0aW9uID0gY3B1X3RvX2xlMzIoZHVyYXRpb24gKiBUSU1FX1VOSVQpOwotCXNwZWN0cnVtLmNoYW5uZWxzWzBdLmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWw7Ci0Jc3BlY3RydW0uY2hhbm5lbHNbMF0udHlwZSA9IHR5cGU7Ci0JaWYgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlzcGVjdHJ1bS5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0sgfAotCQkgICAgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwgUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwotCi0JcmMgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlzcGVjdHJ1bV9yZXNwX3N0YXR1cyA9IGxlMTZfdG9fY3B1KHJlcy0+dS5zcGVjdHJ1bS5zdGF0dXMpOwotCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKLQljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwotCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsCi0JCQkJIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKLQkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwotCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKLQkJfQotCQlwcml2LT5tZWFzdXJlbWVudF9zdGF0dXMgfD0gTUVBU1VSRU1FTlRfQUNUSVZFOwotCQlyYyA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgkJLyogQ29tbWFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkICovCi0JCXJjID0gLUVBR0FJTjsKLQkJYnJlYWs7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKLQlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOwotCi0JaWYgKCFyZXBvcnQtPnN0YXRlKSB7Ci0JCUlXTF9ERUJVR18xMUgocHJpdiwKLQkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOwotCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKLX0KLQotdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9Ci0JCQlpd2xfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmluZGV4IGE3N2MxZTYuLmFmNmJhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKaW5kZXggOTBmYmRiMi4uNGE2Njg2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTgwLDE5ICs4MCw5MCBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfZ2V0X3JhX3N0YV9pZCk7CiAKKy8qIHByaXYtPnN0YV9sb2NrIG11c3QgYmUgaGVsZCAqLwogc3RhdGljIHZvaWQgaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKIHsKKworCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCisJCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiBpZCAldSBhZGRyICVwTVxuIiwKKwkJCXN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfVUNPREVfQUNUSVZFKSB7CisJCUlXTF9ERUJVR19BU1NPQyhwcml2LAorCQkJCSJTVEEgaWQgJXUgYWRkciAlcE0gYWxyZWFkeSBwcmVzZW50IGluIHVDb2RlIChhY2NvcmRpbmcgdG8gZHJpdmVyKVxuIiwKKwkJCQlzdGFfaWQsIHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyKTsKKwl9IGVsc2UgeworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgfD0gSVdMX1NUQV9VQ09ERV9BQ1RJVkU7CisJCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkZWQgU1RBIGlkICV1IGFkZHIgJXBNIHRvIHVDb2RlXG4iLAorCQkJCXN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgaXdsX3Byb2Nlc3NfYWRkX3N0YV9yZXNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqYWRkc3RhLAorCQkJCSAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkgICAgIGJvb2wgc3luYykKK3sKKwl1OCBzdGFfaWQgPSBhZGRzdGEtPnN0YS5zdGFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgeworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKKwkJCXBrdC0+aGRyLmZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJQcm9jZXNzaW5nIHJlc3BvbnNlIGZvciBhZGRpbmcgc3RhdGlvbiAldVxuIiwKKwkJICAgICAgIHN0YV9pZCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCi0JCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwKKwlzd2l0Y2ggKHBrdC0+dS5hZGRfc3RhLnN0YXR1cykgeworCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKKwkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGFfaWQpOworCQlicmVhazsKKwljYXNlIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRToKKwkJSVdMX0VSUihwcml2LCAiQWRkaW5nIHN0YXRpb24gJWQgZmFpbGVkLCBubyByb29tIGluIHRhYmxlLlxuIiwKIAkJCXN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0U6CisJCUlXTF9FUlIocHJpdiwgIkFkZGluZyBzdGF0aW9uICVkIGZhaWxlZCwgbm8gYmxvY2sgYWNrIHJlc291cmNlLlxuIiwKKwkJCXN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUREX1NUQV9NT0RJRllfTk9OX0VYSVNUX1NUQToKKwkJSVdMX0VSUihwcml2LCAiQXR0ZW1wdGluZyB0byBtb2RpZnkgbm9uLWV4aXN0aW5nIHN0YXRpb24gJWQgXG4iLAorCQkJc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOigweCUwOFgpXG4iLAorCQkJCXBrdC0+dS5hZGRfc3RhLnN0YXR1cyk7CisJCWJyZWFrOworCX0KIAotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX1VDT0RFX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyBzdGF0aW9uIGlkICV1IGFkZHIgJXBNXG4iLAorCQkgICAgICAgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9PQorCQkgICAgICAgU1RBX0NPTlRST0xfTU9ESUZZX01TSyA/ICAiTW9kaWZpZWQiIDogIkFkZGVkIiwKKwkJICAgICAgIHN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCisJLyoKKwkgKiBYWFg6IFRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgaXMgb2Z0ZW4gY2hhbmdlZCBmcm9tCisJICogdGhlIG9yaWdpbmFsIHNlbnQgdG8gdGhlIGRldmljZS4gVGhhdCBpcywgdGhlIE1BQyBhZGRyZXNzCisJICogd3JpdHRlbiB0byB0aGUgY29tbWFuZCBidWZmZXIgb2Z0ZW4gaXMgbm90IHRoZSBzYW1lIE1BQyBhZHJlc3MKKwkgKiByZWFkIGZyb20gdGhlIGNvbW1hbmQgYnVmZmVyIHdoZW4gdGhlIGNvbW1hbmQgcmV0dXJucy4gVGhpcworCSAqIGlzc3VlIGhhcyBub3QgeWV0IGJlZW4gcmVzb2x2ZWQgYW5kIHRoaXMgZGVidWdnaW5nIGlzIGxlZnQgdG8KKwkgKiBvYnNlcnZlIHRoZSBwcm9ibGVtLgorCSAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyBzdGF0aW9uIGFjY29yZGluZyB0byBjbWQgYnVmZmVyICVwTVxuIiwKKwkJICAgICAgIHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPT0KKwkJICAgICAgIFNUQV9DT05UUk9MX01PRElGWV9NU0sgPyAiTW9kaWZpZWQiIDogIkFkZGVkIiwKKwkJICAgICAgIGFkZHN0YS0+c3RhLmFkZHIpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgd2Ugd2FudGVkIHRvIG1vZGlmeSBvciBhZGQgYSBzdGF0aW9uLAorCSAqIGlmIGFkZGluZyBhIHN0YXRpb24gc3VjY2VlZGVkIHdlIGhhdmUgc29tZSBtb3JlIGluaXRpYWxpemF0aW9uCisJICogdG8gZG8gd2hlbiB1c2luZyBzdGF0aW9uIG5vdGlmaWNhdGlvbi4gVE9ETworCSAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTEwMywyMyArMTc0LDkgQEAKIHsKIAlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmFkZHN0YSA9CiAJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOwotCXU4IHN0YV9pZCA9IGFkZHN0YS0+c3RhLnN0YV9pZDsKIAotCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcGt0LT5oZHIuZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChwcml2LCBhZGRzdGEsIHBrdCwgZmFsc2UpOwogCi0Jc3dpdGNoIChwa3QtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKLQkJIC8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IQyhwcml2LCAiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKLQkJCSAgICAgcGt0LT51LmFkZF9zdGEuc3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQogfQogCiBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xNDUsMjQgKzIwMiw5IEBACiAJaWYgKHJldCB8fCAoZmxhZ3MgJiBDTURfQVNZTkMpKQogCQlyZXR1cm4gcmV0OwogCi0JcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3BhZ2U7Ci0JaWYgKHBrdC0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAotCQkJICBwa3QtPmhkci5mbGFncyk7Ci0JCXJldCA9IC1FSU87Ci0JfQotCiAJaWYgKHJldCA9PSAwKSB7Ci0JCXN3aXRjaCAocGt0LT51LmFkZF9zdGEuc3RhdHVzKSB7Ci0JCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKLQkJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhLT5zdGEuc3RhX2lkKTsKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FSU87Ci0JCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KKwkJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3BhZ2U7CisJCWl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChwcml2LCBzdGEsIHBrdCwgdHJ1ZSk7CiAJfQogCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC5yZXBseV9wYWdlKTsKIApAQCAtMTAwMywyNCArMTA0NSwxOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqY3VyX2h0X2NvbmZpZyA9IE5VTEw7CiAJdTggc3RhX2lkOwogCi0JLyogQWRkIHN0YXRpb24gdG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLwotCiAJLyoKLQkgKiBYWFg6IFRoaXMgY2hlY2sgaXMgZGVmaW5pdGVseSBub3QgY29ycmVjdCwgaWYgd2UncmUgYW4gQVAKLQkgKglpdCdsbCBhbHdheXMgYmUgZmFsc2Ugd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudCwgYnV0Ci0JICoJaXQgZG9lc24ndCBsb29rIGxpa2UgaXdsYWduIGlzIHByZXBhcmVkIHRvIGJlIGFuIEhUCi0JICoJQVAgYW55d2F5LgorCSAqIFNldCBIVCBjYXBhYmlsaXRpZXMuIEl0IGlzIG9rIHRvIHNldCB0aGlzIHN0cnVjdCBldmVuIGlmIG5vdCB1c2luZworCSAqIEhUIGNvbmZpZzogdGhlIHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0IGZsYWcgd2lsbCBqdXN0IGJlIGZhbHNlCiAJICovCi0JaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KSB7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHByaXYtPnZpZiwgYWRkcik7Ci0JCWlmIChzdGEpIHsKLQkJCW1lbWNweSgmaHRfY29uZmlnLCAmc3RhLT5odF9jYXAsIHNpemVvZihodF9jb25maWcpKTsKLQkJCWN1cl9odF9jb25maWcgPSAmaHRfY29uZmlnOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEocHJpdi0+dmlmLCBhZGRyKTsKKwlpZiAoc3RhKSB7CisJCW1lbWNweSgmaHRfY29uZmlnLCAmc3RhLT5odF9jYXAsIHNpemVvZihodF9jb25maWcpKTsKKwkJY3VyX2h0X2NvbmZpZyA9ICZodF9jb25maWc7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCisJLyogQWRkIHN0YXRpb24gdG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLwogCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbihwcml2LCBhZGRyLCBpc19hcCwgQ01EX1NZTkMsIGN1cl9odF9jb25maWcpOwogCiAJLyogU2V0IHVwIGRlZmF1bHQgcmF0ZSBzY2FsaW5nIHRhYmxlIGluIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KQEAgLTEwODUsNiArMTEyMiw3IEBACiAgKi8KIHZvaWQgaXdsX2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWRkaW5nIGJyb2FkY2FzdCBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGVcbiIpOwogCWl3bF9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgZmFsc2UsIENNRF9TWU5DLCBOVUxMKTsKIAogCS8qIFNldCB1cCBkZWZhdWx0IHJhdGUgc2NhbGluZyB0YWJsZSBpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCkBAIC0xMDkzLDYgKzExMzEsMTYgQEAKIEVYUE9SVF9TWU1CT0woaXdsX2FkZF9iY2FzdF9zdGF0aW9uKTsKIAogLyoqCisgKiBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uIC0gYWRkIGJyb2FkY2FzdCBzdGF0aW9uIGludG8gc3RhdGlvbiB0YWJsZS4KKyAqLwordm9pZCBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWRkaW5nIGJyb2FkY2FzdCBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGVcbiIpOworCWl3bF9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgZmFsc2UsIENNRF9TWU5DLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsMzk0NV9hZGRfYmNhc3Rfc3RhdGlvbik7CisKKy8qKgogICogaXdsX2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQogICoKICAqIElmIG5ldyBJQlNTIHN0YXRpb24sIGNyZWF0ZSBuZXcgZW50cnkgaW4gc3RhdGlvbiB0YWJsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAppbmRleCA4ZDA1MmRlLi4yZGMzNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNTMsNiArNTMsNyBAQAogCiBpbnQgaXdsX3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgYm9vbCBpc19hcCk7CiB2b2lkIGl3bF9hZGRfYmNhc3Rfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGJvb2wgaXNfYXApOwogdm9pZCBpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCA4ZjQwNzE1Li4xZWQ1MjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTYwLDcgKzYwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY19kbWFfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGl3bF9kbWFfcHRyICpwdHIsIHNpemVfdCBzaXplKQogewotCXB0ci0+YWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHNpemUsICZwdHItPmRtYSk7CisJcHRyLT5hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIHNpemUsICZwdHItPmRtYSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwdHItPmFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCXB0ci0+c2l6ZSA9IHNpemU7CkBAIC03MywyMSArNzQsMjAgQEAKIAlpZiAodW5saWtlbHkoIXB0ci0+YWRkcikpCiAJCXJldHVybjsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgcHRyLT5zaXplLCBwdHItPmFkZHIsIHB0ci0+ZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCBwdHItPnNpemUsIHB0ci0+YWRkciwgcHRyLT5kbWEpOwogCW1lbXNldChwdHIsIDAsIHNpemVvZigqcHRyKSk7CiB9CiAKIC8qKgogICogaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKICAqLwotaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQogewogCXUzMiByZWcgPSAwOwotCWludCByZXQgPSAwOwogCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7CiAKIAlpZiAodHhxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm47CiAKIAkvKiBpZiB3ZSdyZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQkJICAgICAgdHhxX2lkLCByZWcpOwogCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybjsKIAkJfQogCiAJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCkBAIC0xMTQsOCArMTE0LDYgQEAKIAkJCSAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7CiAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKLQotCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cik7CiAKQEAgLTE0Niw3ICsxNDQsNyBAQAogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcHJpdi0+cGNpX2Rldi0+ZGV2OwogCWludCBpOwogCiAJaWYgKHEtPm5fYmQgPT0gMCkKQEAgLTE2Myw4ICsxNjEsOCBAQAogCiAJLyogRGUtYWxsb2MgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMgKi8KIAlpZiAodHhxLT5xLm5fYmQpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKgotCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSAqCisJCQkJICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YSAqLwogCWtmcmVlKHR4cS0+dHhiKTsKQEAgLTE5Myw3ICsxOTEsNyBAQAogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwcml2LT5wY2lfZGV2LT5kZXY7CiAJaW50IGk7CiAKIAlpZiAocS0+bl9iZCA9PSAwKQpAQCAtMjA1LDggKzIwMyw4IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSAqCi0JCQkJICAgIHR4cS0+cS5uX2JkLCB0eHEtPnRmZHMsIHR4cS0+cS5kbWFfYWRkcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogdHhxLT5xLm5fYmQsCisJCQkJICB0eHEtPnRmZHMsIHR4cS0+cS5kbWFfYWRkcik7CiAKIAkvKiBkZWFsbG9jYXRlIGFycmF5cyAqLwogCWtmcmVlKHR4cS0+Y21kKTsKQEAgLTI5Nyw3ICsyOTUsNyBAQAogc3RhdGljIGludCBpd2xfdHhfcXVldWVfYWxsb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnByaXYtPnBjaV9kZXYtPmRldjsKIAlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCkBAIC0zMTYsOCArMzE0LDggQEAKIAogCS8qIENpcmN1bGFyIGJ1ZmZlciBvZiB0cmFuc21pdCBmcmFtZSBkZXNjcmlwdG9ycyAoVEZEcyksCiAJICogc2hhcmVkIHdpdGggZGV2aWNlICovCi0JdHhxLT50ZmRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCB0ZmRfc3osICZ0eHEtPnEuZG1hX2FkZHIpOwotCisJdHhxLT50ZmRzID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXR4cS0+dGZkcykgewogCQlJV0xfRVJSKHByaXYsICJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwgdGZkX3N6KTsKIAkJZ290byBlcnJvcjsKQEAgLTM2Niw3ICszNjQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykgewogCQkvKiBvbmx5IGhhcHBlbnMgZm9yIGNtZCBxdWV1ZSAqLwogCQlpZiAoaSA9PSBzbG90c19udW0pCi0JCQlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CisJCQlsZW4gPSBJV0xfTUFYX0NNRF9TSVpFOwogCiAJCXR4cS0+Y21kW2ldID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+Y21kW2ldKQpAQCAtNzQ1LDcgKzc0Myw2IEBACiAJdTggdGlkID0gMDsKIAl1OCAqcWMgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKQEAgLTgyMCw4ICs4MTcsMTAgQEAKIAkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKTsKIAkJc2VxX251bWJlciArPSAweDEwOwogCQkvKiBhZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGhpcyA8c3RhLHRpZD4gKi8KLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSAmJgorCQkgICAgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPT0gSVdMX0FHR19PTikgewogCQkJdHhxX2lkID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cudHhxX2lkOworCQl9CiAJfQogCiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwpAQCAtOTYzLDcgKzk2Miw3IEBACiAKIAkvKiBUZWxsIGRldmljZSB0aGUgd3JpdGUgaW5kZXggKmp1c3QgcGFzdCogdGhpcyBsYXRlc3QgZmlsbGVkIFRGRCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJldCA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC05NzcsOSArOTc2LDYgQEAKIAlpZiAoc3RhX3ByaXYgJiYgc3RhX3ByaXYtPmNsaWVudCkKIAkJYXRvbWljX2luYygmc3RhX3ByaXYtPnBlbmRpbmdfZnJhbWVzKTsKIAotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAoKGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewogCQlpZiAod2FpdF93cml0ZV9wdHIpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xMDE4LDcgKzEwMTQsNyBAQAogCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGxlbiwgcmV0OworCWludCBsZW47CiAJdTMyIGlkeDsKIAl1MTYgZml4X3NpemU7CiAKQEAgLTEwMjcsOSArMTAyMywxMiBAQAogCiAJLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCiAJICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLworCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMKKwkgKiBBbHNvLCBjaGVjayB0byBzZWUgaWYgY29tbWFuZCBidWZmZXIgc2hvdWxkIG5vdCBleGNlZWQgdGhlIHNpemUKKwkgKiBvZiBkZXZpY2VfY21kIGFuZCBtYXhfY21kX3NpemUuICovCiAJQlVHX09OKChmaXhfc2l6ZSA+IFRGRF9NQVhfUEFZTE9BRF9TSVpFKSAmJgogCSAgICAgICAhKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CisJQlVHX09OKGZpeF9zaXplID4gSVdMX01BWF9DTURfU0laRSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSB8fCBpd2xfaXNfY3RraWxsKHByaXYpKSB7CiAJCUlXTF9XQVJOKHByaXYsICJOb3Qgc2VuZGluZyBjb21tYW5kIC0gJXMgS0lMTFxuIiwKQEAgLTEwNzMsOCArMTA3Miw4IEBACiAJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKQogCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gU0VRX0hVR0VfRlJBTUU7CiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCk7Ci0JbGVuICs9IChpZHggPT0gVEZEX0NNRF9TTE9UUykgPyAgSVdMX01BWF9TQ0FOX1NJWkUgOiAwOwotCisJaWYgKGlkeCA9PSBURkRfQ01EX1NMT1RTKQorCQlsZW4gPSBJV0xfTUFYX0NNRF9TSVpFOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlzd2l0Y2ggKG91dF9jbWQtPmhkci5jbWQpIHsKQEAgLTExMTUsMTAgKzExMTQsMTAgQEAKIAogCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyZXQgPSBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQgPyByZXQgOiBpZHg7CisJcmV0dXJuIGlkeDsKIH0KIAogc3RhdGljIHZvaWQgaXdsX3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMjYwLDYgKzEyNTksOCBAQAogCiAJaWYgKCEobWV0YS0+ZmxhZ3MgJiBDTURfQVNZTkMpKSB7CiAJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ2xlYXJpbmcgSENNRF9BQ1RJVkUgZm9yIGNvbW1hbmQgJXMgXG4iLAorCQkJICAgICAgIGdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJfQogfQpAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIHsKIAlpbnQgdHhfZmlmb19pZCwgdHhxX2lkLCBzdGFfaWQsIHNzbiA9IC0xOwogCXN0cnVjdCBpd2xfdGlkX2RhdGEgKnRpZF9kYXRhOwotCWludCByZXQsIHdyaXRlX3B0ciwgcmVhZF9wdHI7CisJaW50IHdyaXRlX3B0ciwgcmVhZF9wdHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcmEpIHsKQEAgLTEzOTgsMTMgKzEzOTksMTcgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCisJLyoKKwkgKiB0aGUgb25seSByZWFzb24gdGhpcyBjYWxsIGNhbiBmYWlsIGlzIHF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2UsCisJICogd2hpY2ggY2FuIGhhcHBlbiBpZiB1Q29kZSBpcyByZWxvYWRlZCBhbmQgYWxsIHRoZSBzdGF0aW9uCisJICogaW5mb3JtYXRpb24gYXJlIGxvc3QuIGlmIGl0IGlzIG91dHNpZGUgdGhlIHJhbmdlLCB0aGVyZSBpcyBubyBuZWVkCisJICogdG8gZGVhY3RpdmF0ZSB0aGUgdUNvZGUgcXVldWUsIGp1c3QgcmV0dXJuICJzdWNjZXNzIiB0byBhbGxvdworCSAqICBtYWM4MDIxMSB0byBjbGVhbiB1cCBpdCBvd24gZGF0YS4KKwkgKi8KKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCiAJCQkJCQkgICB0eF9maWZvX2lkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShwcml2LT52aWYsIHJhLCB0aWQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCBmOGU0ZTRiLi41NGRhYTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTUzLDkgKzUzLDEwIEBACiAjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCi0jaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgpAQCAtNzAsMTQgKzcxLDEzIEBACiAjZGVmaW5lIFZECiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0jZGVmaW5lIFZTICJzIgotI2Vsc2UKLSNkZWZpbmUgVlMKLSNlbmRpZgotCi0jZGVmaW5lIERSVl9WRVJTSU9OICBJV0xXSUZJX1ZFUlNJT04gVkQgVlMKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKKy8qCisgKiBhZGQgInMiIHRvIGluZGljYXRlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGluY2x1ZGVkLgorICogd2UgYWRkIGl0IGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIGluIHdoaWNoCisgKiB0aGlzIHdhcyBjb25maWd1cmFibGUuCisgKi8KKyNkZWZpbmUgRFJWX1ZFUlNJT04gIElXTFdJRklfVkVSU0lPTiBWRCAicyIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CkBAIC0zNTIsMTAgKzM1MiwxMCBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChwcml2LT5zaGFyZWRfdmlydCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgICAgcHJpdi0+c2hhcmVkX3ZpcnQsCi0JCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQpLAorCQkJCSAgcHJpdi0+c2hhcmVkX3ZpcnQsCisJCQkJICBwcml2LT5zaGFyZWRfcGh5cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTQ3OCw3ICs0NzgsNiBAQAogCXU4IHdhaXRfd3JpdGVfcHRyID0gMDsKIAl1OCAqcWMgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewpAQCAtNjYzLDEyICs2NjIsOSBAQAogCiAJLyogVGVsbCBkZXZpY2UgdGhlIHdyaXRlIGluZGV4ICpqdXN0IHBhc3QqIHRoaXMgbGF0ZXN0IGZpbGxlZCBURkQgKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyYyA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJaWYgKChpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCiAJICAgICYmIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWYgKHdhaXRfd3JpdGVfcHRyKSB7CkBAIC02ODksMTAgKzY4NSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQotI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgotCiAjZGVmaW5lIEJFQUNPTl9USU1FX01BU0tfTE9XCTB4MDBGRkZGRkYKICNkZWZpbmUgQkVBQ09OX1RJTUVfTUFTS19ISUdICTB4RkYwMDAwMDAKICNkZWZpbmUgVElNRV9VTklUCQkxMDI0CkBAIC04MTksNyArODExLDYgQEAKIAogCXJldHVybiByYzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTk2Miw2ICs5NTMsOCBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FERF9TVEFdID0gaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKIAlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTl0gPQorCQkJaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUE1fU0xFRVBfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9wbV9zbGVlcF9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQ10gPQogCSAgICBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKQEAgLTk3NSw3ICs5NjgsNiBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAlwcml2LT5yeF9oYW5kbGVyc1tTVEFUSVNUSUNTX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3M7CiAKLQlpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMocHJpdik7CiAJaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMocHJpdik7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQ0FSRF9TVEFURV9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmOwogCkBAIC0xMDY3LDEzICsxMDU5LDEzIEBACiAgKiBhbHNvIHVwZGF0ZXMgdGhlIG1lbW9yeSBhZGRyZXNzIGluIHRoZSBmaXJtd2FyZSB0byByZWZlcmVuY2UgdGhlIG5ldwogICogdGFyZ2V0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgd3JpdGUsIHJjOworCWludCB3cml0ZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAl3cml0ZSA9IHJ4cS0+d3JpdGUgJiB+MHg3OwpAQCAtMTEwMywxMiArMTA5NSw4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJcnhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKKwkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMjUzLDEwICsxMjQxLDEwIEBACiAJCX0KIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICAgIHJ4cS0+ZG1hX2FkZHIpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKLQkJCSAgICByeHEtPnJiX3N0dHMsIHJ4cS0+cmJfc3R0c19kbWEpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAorCQkJICByeHEtPmRtYV9hZGRyKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGl3bF9yYl9zdGF0dXMpLAorCQkJICByeHEtPnJiX3N0dHMsIHJ4cS0+cmJfc3R0c19kbWEpOwogCXJ4cS0+YmQgPSBOVUxMOwogCXJ4cS0+cmJfc3R0cyAgPSBOVUxMOwogfQpAQCAtMTUxOCw4ICsxNTA2LDkgQEAKICAqIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCi0JCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQorc3RhdGljIGludCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCisJCQkJICB1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUsCisJCQkJICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJdTMyIGk7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTE1MjksNyArMTUxOCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlpZiAobnVtX2V2ZW50cyA9PSAwKQotCQlyZXR1cm47CisJCXJldHVybiBwb3M7CiAKIAliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIApAQCAtMTU1NSwyNiArMTU0NCw0MyBAQAogCQl0aW1lID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmIChtb2RlID09IDApIHsKIAkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJSKHByaXYsICIweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGV2KTsKLQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsIHRpbWUsIGV2KTsKKwkJCWlmIChidWZzeikgeworCQkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiMHglMDh4OiUwNHVcbiIsCisJCQkJCQl0aW1lLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOworCQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsCisJCQkJCQkJICAgICAgdGltZSwgZXYpOworCQkJfQogCQl9IGVsc2UgewogCQkJZGF0YSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwotCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgdGltZSwgZGF0YSwgZXYpOworCQkJaWYgKGJ1ZnN6KSB7CisJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIlMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCQkJCSB0aW1lLCBkYXRhLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsCisJCQkJCXRpbWUsIGRhdGEsIGV2KTsKKwkJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCB0aW1lLAorCQkJCQkJCSAgICAgIGRhdGEsIGV2KTsKKwkJCX0KIAkJfQogCX0KIAogCS8qIEFsbG93IGRldmljZSB0byBwb3dlciBkb3duICovCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKICAqIGl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzIC0gRHVtcCB0aGUgbmV3ZXN0ICMgb2YgZXZlbnQgbG9nIHRvIHN5c2xvZwogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjYXBhY2l0eSwKK3N0YXRpYyBpbnQgaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2FwYWNpdHksCiAJCQkJICAgICAgdTMyIG51bV93cmFwcywgdTMyIG5leHRfZW50cnksCi0JCQkJICAgICAgdTMyIHNpemUsIHUzMiBtb2RlKQorCQkJCSAgICAgIHUzMiBzaXplLCB1MzIgbW9kZSwKKwkJCQkgICAgICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJLyoKIAkgKiBkaXNwbGF5IHRoZSBuZXdlc3QgREVGQVVMVF9MT0dfRU5UUklFUyBlbnRyaWVzCkBAIC0xNTgyLDIxICsxNTg4LDI4IEBACiAJICovCiAJaWYgKG51bV93cmFwcykgewogCQlpZiAobmV4dF9lbnRyeSA8IHNpemUpIHsKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsCi0JCQkJCWNhcGFjaXR5IC0gKHNpemUgLSBuZXh0X2VudHJ5KSwKLQkJCQkJc2l6ZSAtIG5leHRfZW50cnksIG1vZGUpOwotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKLQkJCQkgICAgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LAorCQkJCQkgICAgIGNhcGFjaXR5IC0gKHNpemUgLSBuZXh0X2VudHJ5KSwKKwkJCQkJICAgICBzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJICAgICBwb3MsIGJ1ZiwgYnVmc3opOworCQkJcG9zID0gaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKKwkJCQkJCSAgICAgIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQkgICAgICBwb3MsIGJ1ZiwgYnVmc3opOwogCQl9IGVsc2UKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAotCQkJCSAgICBzaXplLCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICAgICAgc2l6ZSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJfSBlbHNlIHsKIAkJaWYgKG5leHRfZW50cnkgPCBzaXplKQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLAorCQkJCQkJICAgICAgbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJCWVsc2UKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAotCQkJCQkgICAgc2l6ZSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKKwkJCQkJCSAgICAgIHNpemUsIG1vZGUsCisJCQkJCQkgICAgICBwb3MsIGJ1ZiwgYnVmc3opOwogCX0KKwlyZXR1cm4gcG9zOwogfQogCiAvKiBGb3Igc2FuaXR5IGNoZWNrIG9ubHkuICBBY3R1YWwgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHVDb2RlLCB0eXAuIDUxMiAqLwpAQCAtMTYwNCw3ICsxNjE3LDggQEAKIAogI2RlZmluZSBERUZBVUxUX0lXTDM5NDVfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyAoMjApCiAKLXZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKQoraW50IGl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBmdWxsX2xvZywKKwkJCSAgICBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpCiB7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KIAl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLwpAQCAtMTYxMiwxMSArMTYyNiwxMyBAQAogCXUzMiBudW1fd3JhcHM7ICAvKiAjIHRpbWVzIHVDb2RlIHdyYXBwZWQgdG8gdG9wIG9mIGxvZyAqLwogCXUzMiBuZXh0X2VudHJ5OyAvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4gYnkgdUNvZGUgKi8KIAl1MzIgc2l6ZTsgICAgICAgLyogIyBlbnRyaWVzIHRoYXQgd2UnbGwgcHJpbnQgKi8KKwlpbnQgcG9zID0gMDsKKwlzaXplX3QgYnVmc3ogPSAwOwogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJaWYgKCFpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwotCQlyZXR1cm47CisJCXJldHVybiAgLUVJTlZBTDsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCkBAIC0xNjQyLDcgKzE2NTgsNyBAQAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gcG9zOwogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0xNjU4LDI1ICsxNjc0LDM4IEBACiAJCSAgc2l6ZSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChkaXNwbGF5KSB7CisJCWlmIChmdWxsX2xvZykKKwkJCWJ1ZnN6ID0gY2FwYWNpdHkgKiA0ODsKKwkJZWxzZQorCQkJYnVmc3ogPSBzaXplICogNDg7CisJCSpidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQogCWlmICgoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9GV19FUlJPUlMpIHx8IGZ1bGxfbG9nKSB7CiAJCS8qIGlmIHVDb2RlIGhhcyB3cmFwcGVkIGJhY2sgdG8gdG9wIG9mIGxvZywKIAkJICogc3RhcnQgYXQgdGhlIG9sZGVzdCBlbnRyeSwKIAkJICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuCiAJCSAqLwogCQlpZiAobnVtX3dyYXBzKQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSwKLQkJCQkgICAgY2FwYWNpdHkgLSBuZXh0X2VudHJ5LCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnksCisJCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQlwb3MsIGJ1ZiwgYnVmc3opOwogCiAJCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KLQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7CisJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUsCisJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJfSBlbHNlCi0JCWl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCi0JCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUpOworCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkJICAgIG5leHRfZW50cnksIHNpemUsIG1vZGUsCisJCQkJCQkgICAgcG9zLCBidWYsIGJ1ZnN6KTsKICNlbHNlCi0JaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKLQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwlwb3MgPSBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkgICAgbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJICAgIHBvcywgYnVmLCBidWZzeik7CiAjZW5kaWYKLQorCXJldHVybiBwb3M7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMjk5NiwxOCArMzAyNSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfdXAoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHVwKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCV9faXdsMzk0NV91cChwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZXN0YXJ0KTsKQEAgLTMwMjQsNyArMzA0MSwxMyBAQAogCQlpZWVlODAyMTFfcmVzdGFydF9odyhwcml2LT5odyk7CiAJfSBlbHNlIHsKIAkJaXdsMzk0NV9kb3duKHByaXYpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKKworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm47CisKKwkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCQlfX2l3bDM5NDVfdXAocHJpdik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KIH0KIApAQCAtMzUyOCw4ICszNTUxLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZpbHRlcl9mbGFncywKIAkJICAgc3RvcmVfZmlsdGVyX2ZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfbWVhc3VyZW1lbnQoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzU5OSw3ICszNjIwLDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKG1lYXN1cmVtZW50LCBTX0lSVVNSIHwgU19JV1VTUiwKIAkJICAgc2hvd19tZWFzdXJlbWVudCwgc3RvcmVfbWVhc3VyZW1lbnQpOwotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UICovCiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTM3NDgsNyArMzc2OCw2IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCi0JSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsMzk0NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2wzOTQ1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5iZWFjb25fdXBkYXRlLCBpd2wzOTQ1X2JnX2JlYWNvbl91cGRhdGUpOwpAQCAtMzc4Miw5ICszODAxLDcgQEAKIAkmZGV2X2F0dHJfZHVtcF9lcnJvcnMuYXR0ciwKIAkmZGV2X2F0dHJfZmxhZ3MuYXR0ciwKIAkmZGV2X2F0dHJfZmlsdGVyX2ZsYWdzLmF0dHIsCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAkmZGV2X2F0dHJfbWVhc3VyZW1lbnQuYXR0ciwKLSNlbmRpZgogCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCkBAIC0zODEwLDcgKzM4MjcsNiBAQAogCS5jb25maWcgPSBpd2xfbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciA9IGl3bF9jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfa2V5ID0gaXdsMzk0NV9tYWNfc2V0X2tleSwKLQkuZ2V0X3R4X3N0YXRzID0gaXdsX21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2xfbWFjX2NvbmZfdHgsCiAJLnJlc2V0X3RzZiA9IGl3bF9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsX2Jzc19pbmZvX2NoYW5nZWQsCkBAIC0zODMxLDYgKzM4NDcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CiAKIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CkBAIC0zODQwLDYgKzM4NTcsNyBAQAogCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCiAJcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgPSBJV0xfTUlTU0VEX0JFQUNPTl9USFJFU0hPTERfREVGOwogCiAJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKIApAQCAtNDAyMiw2ICs0MDQwLDEzIEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlZ19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKKwkvKgorCSAqIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IganVzdCBpbiBjYXNlIGl0IGlzIGluIGEKKwkgKiBzdHJhbmdlIHN0YXRlIC4uLiBsaWtlIGJlaW5nIGxlZnQgc3RyYW5kZWQgYnkgYSBwcmltYXJ5IGtlcm5lbAorCSAqIGFuZCB0aGlzIGlzIG5vdyB0aGUga2R1bXAga2VybmVsIHRyeWluZyB0byBzdGFydCB1cAorCSAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOworCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAppbmRleCA4NDI4MTExLi43OWZmYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3RpY2tldHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCByeF9wYWNrZXRzW0lXTV9SWF9JRF9IQVNIICsgMV07CisJc3RydWN0IGxpc3RfaGVhZCByeF9wYWNrZXRzW0lXTV9SWF9JRF9IQVNIXTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnhfd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3dvcmtlcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCBmNzI3YjRhLi5hZDhmN2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtODY4LDM2ICs4NjgsMzUgQEAKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICptZ3RfZnJhbWUgPQogCQkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9tZ3RfZnJhbWUgKilidWY7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ3QgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopbWd0X2ZyYW1lLT5mcmFtZTsKLQl1OCAqaWU7CiAKIAlJV01fSEVYRFVNUChpd20sIERCRywgTUxNRSwgIk1HVDogIiwgbWd0X2ZyYW1lLT5mcmFtZSwKIAkJICAgIGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSk7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCWllID0gbWd0LT51LmFzc29jX3JlcS52YXJpYWJsZTs7Ci0JCWl3bS0+cmVxX2llX2xlbiA9Ci0JCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJaXdtLT5yZXFfaWVfbGVuID0gbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pCisJCQkJICAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJICAgICB1LmFzc29jX3JlcS52YXJpYWJsZSk7CiAJCWtmcmVlKGl3bS0+cmVxX2llKTsKIAkJaXdtLT5yZXFfaWUgPSBrbWVtZHVwKG1ndC0+dS5hc3NvY19yZXEudmFyaWFibGUsCiAJCQkJICAgICAgaXdtLT5yZXFfaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3JlcShtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCWllID0gbWd0LT51LnJlYXNzb2NfcmVxLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXFfaWVfbGVuID0KLQkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlpd20tPnJlcV9pZV9sZW4gPSBsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikKKwkJCQkgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgIHUucmVhc3NvY19yZXEudmFyaWFibGUpOwogCQlrZnJlZShpd20tPnJlcV9pZSk7CiAJCWl3bS0+cmVxX2llID0ga21lbWR1cChtZ3QtPnUucmVhc3NvY19yZXEudmFyaWFibGUsCiAJCQkJICAgICAgaXdtLT5yZXFfaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTs7Ci0JCWl3bS0+cmVzcF9pZV9sZW4gPQotCQkJCWxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7CisJCWl3bS0+cmVzcF9pZV9sZW4gPSBsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikKKwkJCQkgICAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJICAgICAgdS5hc3NvY19yZXNwLnZhcmlhYmxlKTsKIAkJa2ZyZWUoaXdtLT5yZXNwX2llKTsKIAkJaXdtLT5yZXNwX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZSwKIAkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXNwX2llX2xlbiA9Ci0JCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJaXdtLT5yZXNwX2llX2xlbiA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKQorCQkJCSAgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgICB1LnJlYXNzb2NfcmVzcC52YXJpYWJsZSk7CiAJCWtmcmVlKGl3bS0+cmVzcF9pZSk7CiAJCWl3bS0+cmVzcF9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZSwKIAkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CkBAIC0xNTM0LDYgKzE1MzMsMzMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl3bV9yeF9wcm9jZXNzX2Ftc2R1KHN0cnVjdCBpd21fcHJpdiAqaXdtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpd21fdG9fd2Rldihpd20pOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gaXdtX3RvX25kZXYoaXdtKTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7CisJc3RydWN0IHNrX2J1ZmYgKmZyYW1lOworCisJSVdNX0hFWERVTVAoaXdtLCBEQkcsIFJYLCAiQS1NU0RVOiAiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7CisJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmxpc3QsIG5kZXYtPmRldl9hZGRyLCB3ZGV2LT5pZnR5cGUsIDApOworCisJd2hpbGUgKChmcmFtZSA9IF9fc2tiX2RlcXVldWUoJmxpc3QpKSkgeworCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGZyYW1lLT5sZW47CisKKwkJZnJhbWUtPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoZnJhbWUsIG5kZXYpOworCQlmcmFtZS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJbWVtc2V0KGZyYW1lLT5jYiwgMCwgc2l6ZW9mKGZyYW1lLT5jYikpOworCisJCWlmIChuZXRpZl9yeF9uaShmcmFtZSkgPT0gTkVUX1JYX0RST1ApIHsKKwkJCUlXTV9FUlIoaXdtLCAiUGFja2V0IGRyb3BwZWRcbiIpOworCQkJbmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBpd21fcnhfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGl3bV9wcml2ICppd20sCiAJCQkJICBzdHJ1Y3QgaXdtX3J4X3BhY2tldCAqcGFja2V0LAogCQkJCSAgc3RydWN0IGl3bV9yeF90aWNrZXRfbm9kZSAqdGlja2V0X25vZGUpCkBAIC0xNTQ4LDI1ICsxNTc0LDM0IEBACiAJc3dpdGNoIChsZTE2X3RvX2NwdSh0aWNrZXRfbm9kZS0+dGlja2V0LT5hY3Rpb24pKSB7CiAJY2FzZSBJV01fUlhfVElDS0VUX1JFTEVBU0U6CiAJCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJSRUxFQVNFIHBhY2tldFxuIik7Ci0JCWNsYXNzaWZ5ODAyMyhza2IpOworCiAJCWl3bV9yeF9hZGp1c3RfcGFja2V0KGl3bSwgcGFja2V0LCB0aWNrZXRfbm9kZSk7CisJCXNrYi0+ZGV2ID0gaXdtX3RvX25kZXYoaXdtKTsKKwkJY2xhc3NpZnk4MDIzKHNrYik7CisKKwkJaWYgKGxlMTZfdG9fY3B1KHRpY2tldF9ub2RlLT50aWNrZXQtPmZsYWdzKSAmCisJCSAgICBJV01fUlhfVElDS0VUX0FNU0RVX01TSykgeworCQkJaXdtX3J4X3Byb2Nlc3NfYW1zZHUoaXdtLCBza2IpOworCQkJYnJlYWs7CisJCX0KKwogCQlyZXQgPSBpZWVlODAyMTFfZGF0YV90b184MDIzKHNrYiwgbmRldi0+ZGV2X2FkZHIsIHdkZXYtPmlmdHlwZSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlJV01fREJHX1JYKGl3bSwgREJHLCAiQ291bGRuJ3QgY29udmVydCA4MDIuMTEgaGVhZGVyIC0gIgogCQkJCSAgICIlZFxuIiwgcmV0KTsKKwkJCWtmcmVlX3NrYihwYWNrZXQtPnNrYik7CiAJCQlicmVhazsKIAkJfQogCiAJCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBSWCwgIjgwMi4zOiAiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAotCQlza2ItPmRldiA9IGl3bV90b19uZGV2KGl3bSk7CisJCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAKLQkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCQluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQogCQlpZiAobmV0aWZfcnhfbmkoc2tiKSA9PSBORVRfUlhfRFJPUCkgewogCQkJSVdNX0VSUihpd20sICJQYWNrZXQgZHJvcHBlZFxuIik7CiAJCQluZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvS2NvbmZpZwppbmRleCAzMGFhOWQ0Li4wNDg1Yzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL0tjb25maWcKQEAgLTM3LDMgKzM3LDkgQEAKIAlkZXBlbmRzIG9uIExJQkVSVEFTCiAJLS0taGVscC0tLQogCSAgRGVidWdnaW5nIHN1cHBvcnQuCisKK2NvbmZpZyBMSUJFUlRBU19NRVNICisJYm9vbCAiRW5hYmxlIG1lc2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIExJQkVSVEFTCisJaGVscAorCSAgVGhpcyBlbmFibGVzIExpYmVydGFzJyBNRVNIIHN1cHBvcnQsIHVzZWQgYnkgZS5nLiB0aGUgT0xQQyBwZW9wbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IGIxODhjZDkuLjQ1ZTg3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC01LDExICs1LDExIEBACiBsaWJlcnRhcy15ICs9IGRlYnVnZnMubwogbGliZXJ0YXMteSArPSBldGh0b29sLm8KIGxpYmVydGFzLXkgKz0gbWFpbi5vCi1saWJlcnRhcy15ICs9IG1lc2gubwogbGliZXJ0YXMteSArPSByeC5vCiBsaWJlcnRhcy15ICs9IHNjYW4ubwogbGliZXJ0YXMteSArPSB0eC5vCiBsaWJlcnRhcy15ICs9IHdleHQubworbGliZXJ0YXMtJChDT05GSUdfTElCRVJUQVNfTUVTSCkgKz0gbWVzaC5vCiAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYwppbmRleCA3NTEwNjczLi5mMDNkNWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKQEAgLTM5MCwxMCArMzkwLDggQEAKIAljbWQuZW5hYmxlaHdhdXRvID0gY3B1X3RvX2xlMTYocHJpdi0+ZW5hYmxlaHdhdXRvKTsKIAljbWQuYml0bWFwID0gbGJzX3JhdGVfdG9fZndfYml0bWFwKHByaXYtPmN1cl9yYXRlLCBwcml2LT5lbmFibGVod2F1dG8pOwogCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX1JBVEVfQURBUFRfUkFURVNFVCwgJmNtZCk7Ci0JaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkgewotCQlwcml2LT5yYXRlYml0bWFwID0gbGUxNl90b19jcHUoY21kLmJpdG1hcCk7CisJaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkKIAkJcHJpdi0+ZW5hYmxlaHdhdXRvID0gbGUxNl90b19jcHUoY21kLmVuYWJsZWh3YXV0byk7Ci0JfQogCiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtODA3LDggKzgwNSw3IEBACiAJfQogCiAJLyogVXNlIHNob3J0IHByZWFtYmxlIG9ubHkgd2hlbiBib3RoIHRoZSBCU1MgYW5kIGZpcm13YXJlIHN1cHBvcnQgaXQgKi8KLQlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICYmCi0JICAgIChhc3NvY19yZXEtPmJzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkKKwlpZiAoYXNzb2NfcmVxLT5ic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKIAkJcHJlYW1ibGUgPSBSQURJT19QUkVBTUJMRV9TSE9SVDsKIAogCXJldCA9IGxic19zZXRfcmFkaW8ocHJpdiwgcHJlYW1ibGUsIDEpOwpAQCAtOTM5LDggKzkzNiw3IEBACiAJfQogCiAJLyogVXNlIHNob3J0IHByZWFtYmxlIG9ubHkgd2hlbiBib3RoIHRoZSBCU1MgYW5kIGZpcm13YXJlIHN1cHBvcnQgaXQgKi8KLQlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICYmCi0JICAgIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKSB7CisJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewogCQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogU2hvcnQgcHJlYW1ibGVcbiIpOwogCQlwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwogCX0KQEAgLTEwNDksNyArMTA0NSw3IEBACiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKIHsKIAlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgY21kOwotCXU4IHByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfTE9ORzsKKwl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwogCXNpemVfdCByYXRlc2l6ZSA9IDA7CiAJdTE2IHRtcGNhcCA9IDA7CiAJaW50IHJldCA9IDA7CkBAIC0xMDU3LDExICsxMDUzLDYgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7CiAKLQlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewotCQlsYnNfZGViX2pvaW4oIkFESE9DX1NUQVJUOiBXaWxsIHVzZSBzaG9ydCBwcmVhbWJsZVxuIik7Ci0JCXByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7Ci0JfQotCiAJcmV0ID0gbGJzX3NldF9yYWRpbyhwcml2LCBwcmVhbWJsZSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC0xMTY5LDExICsxMTYwLDExIEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfbm9fc2VjdXJpdHkoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCiAJCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQogewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCi0JICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAotCSAgICAmJiBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDCi0JICAgICYmIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IFdMQU5fRUlEX1JTTgotCSAgICAmJiAhKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKKwlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmCisJICAgICFzZWNpbmZvLT5XUEFlbmFibGVkICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZCAmJgorCSAgICBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDICYmCisJICAgIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IFdMQU5fRUlEX1JTTiAmJgorCSAgICAhKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTExODIsOSArMTE3Myw5IEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfc3RhdGljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKIAkJCQkgICAgICAgc3RydWN0IGJzc19kZXNjcmlwdG9yICptYXRjaF9ic3MpCiB7Ci0JaWYgKHNlY2luZm8tPndlcF9lbmFibGVkICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCi0JICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAotCSAgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCWlmIChzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJgorCSAgICAhc2VjaW5mby0+V1BBZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTExOTMsOCArMTE4NCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfd3BhKHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAogCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQogewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYgc2VjaW5mby0+V1BBZW5hYmxlZAotCSAgICAmJiAobWF0Y2hfYnNzLT53cGFfaWVbMF0gPT0gV0xBTl9FSURfR0VORVJJQykKKwlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmIHNlY2luZm8tPldQQWVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+d3BhX2llWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpCiAJICAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKIAkgICAgJiYgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSAqLwogCSAgICkKQEAgLTEyMTksMTEgKzEyMTAsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Jzc19keW5hbWljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKIAkJCQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICptYXRjaF9ic3MpCiB7Ci0JaWYgKCFzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBZW5hYmxlZAotCSAgICAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQKLQkgICAgJiYgKG1hdGNoX2Jzcy0+d3BhX2llWzBdICE9IFdMQU5fRUlEX0dFTkVSSUMpCi0JICAgICYmIChtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBXTEFOX0VJRF9SU04pCi0JICAgICYmIChtYXRjaF9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpCisJaWYgKCFzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJgorCSAgICAhc2VjaW5mby0+V1BBZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+d3BhX2llWzBdICE9IFdMQU5fRUlEX0dFTkVSSUMpICYmCisJICAgIChtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBXTEFOX0VJRF9SU04pICYmCisJICAgIChtYXRjaF9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpCiAJCXJldHVybiAxOwogCWVsc2UKIAkJcmV0dXJuIDA7CkBAIC0xNTM0LDggKzE1MjUsOCBAQAogCS8qIElmIHdlJ3JlIGdpdmVuIGFuZCAnYW55JyBCU1NJRCwgdHJ5IGFzc29jaWF0aW5nIGJhc2VkIG9uIFNTSUQgKi8KIAogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZF9hbnksIGFzc29jX3JlcS0+YnNzaWQpCi0JCSAgICAmJiBjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWRfb2ZmLCBhc3NvY19yZXEtPmJzc2lkKSkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkX2FueSwgYXNzb2NfcmVxLT5ic3NpZCkgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZF9vZmYsIGFzc29jX3JlcS0+YnNzaWQpKSB7CiAJCQlyZXQgPSBhc3NvY19oZWxwZXJfYnNzaWQocHJpdiwgYXNzb2NfcmVxKTsKIAkJCWRvbmUgPSAxOwogCQl9CkBAIC0xNjIxLDExICsxNjEyLDkgQEAKIAkJZ290byByZXN0b3JlX21lc2g7CiAJfQogCi0JaWYgKCAgIGFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZAotCSAgICAmJiAgIChhc3NvY19yZXEtPndlcF9rZXlzWzBdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzFdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzJdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzNdLmxlbikpIHsKKwlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkICYmCisJICAgIChhc3NvY19yZXEtPndlcF9rZXlzWzBdLmxlbiB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzFdLmxlbiB8fAorCSAgICAgYXNzb2NfcmVxLT53ZXBfa2V5c1syXS5sZW4gfHwgYXNzb2NfcmVxLT53ZXBfa2V5c1szXS5sZW4pKSB7CiAJCS8qIE1ha2Ugc3VyZSBXRVAga2V5cyBhcmUgcmUtc2VudCB0byBmaXJtd2FyZSAqLwogCQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKTsKIAl9CkBAIC0xOTkyLDE0ICsxOTgxLDE0IEBACiAJCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUpOwogCiAJLyogSWYgJ2FueScgU1NJRCB3YXMgc3BlY2lmaWVkLCBmaW5kIGFuIFNTSUQgdG8gYXNzb2NpYXRlIHdpdGggKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19TU0lELCAmYXNzb2NfcmVxLT5mbGFncykKLQkgICAgJiYgIWFzc29jX3JlcS0+c3NpZF9sZW4pCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpICYmCisJICAgICFhc3NvY19yZXEtPnNzaWRfbGVuKQogCQlmaW5kX2FueV9zc2lkID0gMTsKIAogCS8qIEJ1dCBkb24ndCB1c2UgJ2FueScgU1NJRCBpZiB0aGVyZSdzIGEgdmFsaWQgbG9ja2VkIEJTU0lEIHRvIHVzZSAqLwogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihhc3NvY19yZXEtPmJzc2lkLCBic3NpZF9hbnkpCi0JCSAgICAmJiBjb21wYXJlX2V0aGVyX2FkZHIoYXNzb2NfcmVxLT5ic3NpZCwgYnNzaWRfb2ZmKSkKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihhc3NvY19yZXEtPmJzc2lkLCBic3NpZF9hbnkpICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYXNzb2NfcmVxLT5ic3NpZCwgYnNzaWRfb2ZmKSkKIAkJCWZpbmRfYW55X3NzaWQgPSAwOwogCX0KIApAQCAtMjA2MSwxMyArMjA1MCw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoICAgdGVzdF9iaXQoQVNTT0NfRkxBR19XRVBfS0VZUywgJmFzc29jX3JlcS0+ZmxhZ3MpCi0JICAgIHx8IHRlc3RfYml0KEFTU09DX0ZMQUdfV0VQX1RYX0tFWUlEWCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCXJldCA9IGFzc29jX2hlbHBlcl93ZXBfa2V5cyhwcml2LCBhc3NvY19yZXEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU0VDSU5GTywgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCXJldCA9IGFzc29jX2hlbHBlcl9zZWNpbmZvKHByaXYsIGFzc29jX3JlcSk7CiAJCWlmIChyZXQpCkBAIC0yMDgwLDE4ICsyMDYyLDMxIEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfTUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykKLQkgICAgfHwgdGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKKwkvKgorCSAqIHYxMCBGVyB3YW50cyBXUEEga2V5cyB0byBiZSBzZXQvY2xlYXJlZCBiZWZvcmUgV0VQIGtleSBvcGVyYXRpb25zLAorCSAqIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgdG8gY29ycmVjdGx5IGFzc29jaWF0ZSB0byBXRVAgbmV0d29ya3MuCisJICogT3RoZXIgZmlybXdhcmUgdmVyc2lvbnMgZG9uJ3QgYXBwZWFyIHRvIGNhcmUuCisJICovCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX1VDQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCXJldCA9IGFzc29jX2hlbHBlcl93cGFfa2V5cyhwcml2LCBhc3NvY19yZXEpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQogCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKSkgeworCQlyZXQgPSBhc3NvY19oZWxwZXJfd2VwX2tleXMocHJpdiwgYXNzb2NfcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCiAJLyogU1NJRC9CU1NJRCBzaG91bGQgYmUgdGhlIF9sYXN0XyBjb25maWcgb3B0aW9uIHNldCwgYmVjYXVzZSB0aGV5CiAJICogdHJpZ2dlciB0aGUgYXNzb2NpYXRpb24gYXR0ZW1wdC4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19CU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpCi0JICAgIHx8IHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfQlNTSUQsICZhc3NvY19yZXEtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBU1NPQ19GTEFHX1NTSUQsICZhc3NvY19yZXEtPmZsYWdzKSkgewogCQlpbnQgc3VjY2VzcyA9IDE7CiAKIAkJcmV0ID0gYXNzb2NfaGVscGVyX2Fzc29jaWF0ZShwcml2LCBhc3NvY19yZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA0MjYxMWJlLi44MjM3MWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTQzLDE5ICsxNDMsNiBAQAogCWxic19kZWJfY21kKCJHRVRfSFdfU1BFQzogaGFyZHdhcmUgaW50ZXJmYWNlIDB4JXgsIGhhcmR3YXJlIHNwZWMgMHglMDR4XG4iLAogCQkgICAgY21kLmh3aWZ2ZXJzaW9uLCBjbWQudmVyc2lvbik7CiAKLQkvKiBEZXRlcm1pbmUgbWVzaF9md192ZXIgZnJvbSBmd3JlbGVhc2UgYW5kIGZ3Y2FwaW5mbyAqLwotCS8qIDUuMC4xNnAwIDkuMC4wLnAwIGlzIGtub3duIHRvIE5PVCBzdXBwb3J0IGFueSBtZXNoICovCi0JLyogNS4xMTAuMjIgaGF2ZSBtZXNoIGNvbW1hbmQgd2l0aCAweGEzIGNvbW1hbmQgaWQgKi8KLQkvKiAxMC4wLjAucDAgRlcgYnJpbmdzIGluIG1lc2ggY29uZmlnIGNvbW1hbmQgd2l0aCBkaWZmZXJlbnQgaWQgKi8KLQkvKiBDaGVjayBGVyB2ZXJzaW9uIE1TQiBhbmQgaW5pdGlhbGl6ZSBtZXNoX2Z3X3ZlciAqLwotCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID09IE1SVkxfRldfVjUpCi0JCXByaXYtPm1lc2hfZndfdmVyID0gTUVTSF9GV19PTEQ7Ci0JZWxzZSBpZiAoKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPj0gTVJWTF9GV19WMTApICYmCi0JCShwcml2LT5md2NhcGluZm8gJiBNRVNIX0NBUElORk9fRU5BQkxFX01BU0spKQotCQlwcml2LT5tZXNoX2Z3X3ZlciA9IE1FU0hfRldfTkVXOwotCWVsc2UKLQkJcHJpdi0+bWVzaF9md192ZXIgPSBNRVNIX05PTkU7Ci0KIAkvKiBDbGFtcCByZWdpb24gY29kZSB0byA4LWJpdCBzaW5jZSBGVyBzcGVjIGluZGljYXRlcyB0aGF0IGl0IHNob3VsZAogCSAqIG9ubHkgZXZlciBiZSA4LWJpdCwgZXZlbiB0aG91Z2ggdGhlIGZpZWxkIHNpemUgaXMgMTYtYml0LiAgU29tZSBmaXJtd2FyZQogCSAqIHJldHVybnMgbm9uLXplcm8gaGlnaCA4IGJpdHMgaGVyZS4KQEAgLTg1NSw5ICs4NDIsNiBAQAogCWlmIChwcml2LT5md3JlbGVhc2UgPCAweDA5MDAwMDAwKSB7CiAJCXN3aXRjaCAocHJlYW1ibGUpIHsKIAkJY2FzZSBSQURJT19QUkVBTUJMRV9TSE9SVDoKLQkJCWlmICghKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKQotCQkJCWdvdG8gb3V0OwotCQkJLyogRmFsbCB0aHJvdWdoICovCiAJCWNhc2UgUkFESU9fUFJFQU1CTEVfQVVUTzoKIAkJY2FzZSBSQURJT19QUkVBTUJMRV9MT05HOgogCQkJY21kLmNvbnRyb2wgPSBjcHVfdG9fbGUxNihwcmVhbWJsZSk7CkBAIC0xMDExLDYgKzk5NSw4IEBACiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKKwogCWNhc2UgQ01EX0JUX0FDQ0VTUzoKIAkJcmV0ID0gbGJzX2NtZF9idF9hY2Nlc3MoY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKQEAgLTEwMTksNiArMTAwNSw4IEBACiAJCXJldCA9IGxic19jbWRfZnd0X2FjY2VzcyhjbWRwdHIsIGNtZF9hY3Rpb24sIHBkYXRhX2J1Zik7CiAJCWJyZWFrOwogCisjZW5kaWYKKwogCWNhc2UgQ01EXzgwMl8xMV9CRUFDT05fQ1RSTDoKIAkJcmV0ID0gbGJzX2NtZF9iY25fY3RybChwcml2LCBjbWRwdHIsIGNtZF9hY3Rpb24pOwogCQlicmVhazsKQEAgLTEzMTcsNyArMTMwNSw3IEBACiAJCWlmICgocHJpdi0+cHNtb2RlICE9IExCUzgwMl8xMVBPV0VSTU9ERUNBTSkgJiYKIAkJICAgIChwcml2LT5wc3N0YXRlID09IFBTX1NUQVRFX0ZVTExfUE9XRVIpICYmCiAJCSAgICAoKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHx8Ci0JCSAgICAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSkpIHsKKwkJICAgIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkpIHsKIAkJCWlmIChwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgfHwKIAkJCSAgICBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkKSB7CiAJCQkJLyogY2hlY2sgZm9yIHZhbGlkIFdQQSBncm91cCBrZXlzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCmluZGV4IDI4NjI3NDguLmNiNDEzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCkBAIC0xMTAsMTggKzExMCw2IEBACiBpbnQgbGJzX2dldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiAqb3V0X3ZhbCk7CiAKIAotLyogTWVzaCByZWxhdGVkICovCi0KLWludCBsYnNfbWVzaF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAotCQkgICAgc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyAqY21kKTsKLQotaW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCi0JCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKTsKLQotaW50IGxic19tZXNoX2NvbmZpZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGVuYWJsZSwgdWludDE2X3QgY2hhbik7Ci0KLQogLyogQ29tbWFuZHMgb25seSB1c2VkIGluIHdleHQuYywgYXNzb2MuIGFuZCBzY2FuLmMgKi8KIAogaW50IGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSwgaW50OF90IHAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IDIxZDU3NjkuLmU3NDcwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTI0MCwxMSArMjQwLDYgQEAKIAkvKiBOb3cgd2UgZ290IHJlc3BvbnNlIGZyb20gRlcsIGNhbmNlbCB0aGUgY29tbWFuZCB0aW1lciAqLwogCWRlbF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lcik7CiAJcHJpdi0+Y21kX3RpbWVkX291dCA9IDA7Ci0JaWYgKHByaXYtPm5yX3JldHJpZXMpIHsKLQkJbGJzX3ByX2luZm8oIlJlY2VpdmVkIHJlc3VsdCAleCB0byBjb21tYW5kICV4IGFmdGVyICVkIHJldHJpZXNcbiIsCi0JCQkgICAgcmVzdWx0LCBjdXJjbWQsIHByaXYtPm5yX3JldHJpZXMpOwotCQlwcml2LT5ucl9yZXRyaWVzID0gMDsKLQl9CiAKIAkvKiBTdG9yZSB0aGUgcmVzcG9uc2UgY29kZSB0byBjdXJfY21kX3JldGNvZGUuICovCiAJcHJpdi0+Y3VyX2NtZF9yZXRjb2RlID0gcmVzdWx0OwpAQCAtNDg1LDIwICs0ODAsOCBAQAogCQlicmVhazsKIAogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX01FU0hfQVVUT19TVEFSVEVEOgotCQkvKiBJZ25vcmUgc3B1cmlvdXMgYXV0b3N0YXJ0IGV2ZW50cyBpZiBhdXRvc3RhcnQgaXMgZGlzYWJsZWQgKi8KLQkJaWYgKCFwcml2LT5tZXNoX2F1dG9zdGFydF9lbmFibGVkKSB7Ci0JCQlsYnNfcHJfaW5mbygiRVZFTlQ6IE1FU0hfQVVUT19TVEFSVEVEIChpZ25vcmluZylcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbGJzX3ByX2luZm8oIkVWRU5UOiBNRVNIX0FVVE9fU1RBUlRFRFxuIik7Ci0JCXByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPSBMQlNfQ09OTkVDVEVEOwotCQlpZiAocHJpdi0+bWVzaF9vcGVuKSB7Ci0JCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm1lc2hfZGV2KTsKLQkJCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5tZXNoX2Rldik7Ci0JCX0KLQkJcHJpdi0+bW9kZSA9IElXX01PREVfQURIT0M7Ci0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnN5bmNfY2hhbm5lbCk7CisJCS8qIElnbm9yZSBzcHVyaW91cyBhdXRvc3RhcnQgZXZlbnRzICovCisJCWxic19wcl9pbmZvKCJFVkVOVDogTUVTSF9BVVRPX1NUQVJURUQgKGlnbm9yaW5nKVxuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAppbmRleCA2YjZlYTlmLi5lYTNmMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCkBAIC0zOTcsMTMgKzM5Nyw2IEBACiAJS0VZX0lORk9fV1BBX0VOQUJMRUQgPSAweDA0CiB9OwogCi0vKiogbWVzaF9md192ZXIgKi8KLWVudW0gX21lc2hfZndfdmVyIHsKLQlNRVNIX05PTkUgPSAwLCAvKiBNRVNIIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlNRVNIX0ZXX09MRCwgICAvKiBNRVNIIGlzIHN1cHBvcnRlZCBpbiBGVyBWNSAqLwotCU1FU0hfRldfTkVXLCAgIC8qIE1FU0ggaXMgc3VwcG9ydGVkIGluIEZXIFYxMCBhbmQgbmV3ZXIgKi8KLX07Ci0KIC8qIERlZmF1bHQgdmFsdWVzIGZvciBmd3QgY29tbWFuZHMuICovCiAjZGVmaW5lIEZXVF9ERUZBVUxUX01FVFJJQyAwCiAjZGVmaW5lIEZXVF9ERUZBVUxUX0RJUiAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IDA1YmIyOTguLjY5NzdlZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMzksMTUgKzM5LDE0IEBACiAKIAkvKiBNZXNoICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfZGV2OyAvKiBWaXJ0dWFsIGRldmljZSAqLworI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiAJdTMyIG1lc2hfY29ubmVjdF9zdGF0dXM7CiAJc3RydWN0IGxic19tZXNoX3N0YXRzIG1zdGF0czsKIAlpbnQgbWVzaF9vcGVuOwotCWludCBtZXNoX2Z3X3ZlcjsKLQlpbnQgbWVzaF9hdXRvc3RhcnRfZW5hYmxlZDsKIAl1aW50MTZfdCBtZXNoX3RsdjsKIAl1OCBtZXNoX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIDFdOwogCXU4IG1lc2hfc3NpZF9sZW47Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN5bmNfY2hhbm5lbDsKKyNlbmRpZgogCiAJLyogTW9uaXRvciBtb2RlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKQEAgLTExMCw3ICsxMDksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgY21kcGVuZGluZ3E7IC8qIHBlbmRpbmcgY29tbWFuZCBidWZmZXJzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgY21kX3BlbmRpbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgY29tbWFuZF90aW1lcjsKLQlpbnQgbnJfcmV0cmllczsKIAlpbnQgY21kX3RpbWVkX291dDsKIAogCS8qIENvbW1hbmQgcmVzcG9uc2VzIHNlbnQgZnJvbSB0aGUgaGFyZHdhcmUgdG8gdGhlIGRyaXZlciAqLwpAQCAtMTc2LDkgKzE3NCw3IEBACiAJc3RydWN0IGJzc19kZXNjcmlwdG9yICpuZXR3b3JrczsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIHBlbmRpbmdfYXNzb2NfcmVxOwogCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogaW5fcHJvZ3Jlc3NfYXNzb2NfcmVxOwotCXUxNiBjYXBhYmlsaXR5OwogCXVpbnQxNl90IGVuYWJsZWh3YXV0bzsKLQl1aW50MTZfdCByYXRlYml0bWFwOwogCiAJLyogQURIT0MgKi8KIAl1MTYgYmVhY29uX3BlcmlvZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwppbmRleCA2M2QwMjAzLi4zODA0YTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwpAQCAtMTE0LDkgKzExNCwxMSBAQAogCS5nZXRfZHJ2aW5mbyA9IGxic19ldGh0b29sX2dldF9kcnZpbmZvLAogCS5nZXRfZWVwcm9tID0gIGxic19ldGh0b29sX2dldF9lZXByb20sCiAJLmdldF9lZXByb21fbGVuID0gbGJzX2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4sCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIAkuZ2V0X3NzZXRfY291bnQgPSBsYnNfbWVzaF9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGxic19tZXNoX2V0aHRvb2xfZ2V0X3N0YXRzLAogCS5nZXRfc3RyaW5ncyA9IGxic19tZXNoX2V0aHRvb2xfZ2V0X3N0cmluZ3MsCisjZW5kaWYKIAkuZ2V0X3dvbCA9IGxic19ldGh0b29sX2dldF93b2wsCiAJLnNldF93b2wgPSBsYnNfZXRodG9vbF9zZXRfd29sLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKaW5kZXggYmY0YmZiYS4uM2VhMDNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBjMjk3NWM4Li4yOGExYzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJaWYgKHByaXYtPm1vbml0b3Jtb2RlID09IG1vbml0b3JfbW9kZSkKIAkJCXJldHVybiBzdHJsZW4oYnVmKTsKIAkJaWYgKCFwcml2LT5tb25pdG9ybW9kZSkgewotCQkJaWYgKHByaXYtPmluZnJhX29wZW4gfHwgcHJpdi0+bWVzaF9vcGVuKQorCQkJaWYgKHByaXYtPmluZnJhX29wZW4gfHwgbGJzX21lc2hfb3Blbihwcml2KSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkKIAkJCQlsYnNfY21kXzgwMjExX2RlYXV0aGVudGljYXRlKHByaXYsCkBAIC0zMTksMTUgKzMxOSwxOCBAQAogewogCWludCBpID0gbnJfYWRkcnM7CiAJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OworCWludCBjbnQ7CiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiAoSUZGX1VQfElGRl9NVUxUSUNBU1QpKSAhPSAoSUZGX1VQfElGRl9NVUxUSUNBU1QpKQogCQlyZXR1cm4gbnJfYWRkcnM7CiAKIAluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKLQlmb3IgKG1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jX2xpc3Q7IG1jX2xpc3QgPSBtY19saXN0LT5uZXh0KSB7CisJY250ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgZGV2KSB7CiAJCWlmIChtYWNfaW5fbGlzdChjbWQtPm1hY2xpc3QsIG5yX2FkZHJzLCBtY19saXN0LT5kbWlfYWRkcikpIHsKIAkJCWxic19kZWJfbmV0KCJtY2FzdCBhZGRyZXNzICVzOiVwTSBza2lwcGVkXG4iLCBkZXYtPm5hbWUsCiAJCQkJICAgIG1jX2xpc3QtPmRtaV9hZGRyKTsKKwkJCWNudC0tOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMzM3LDkgKzM0MCwxMCBAQAogCQlsYnNfZGViX25ldCgibWNhc3QgYWRkcmVzcyAlczolcE0gYWRkZWQgdG8gZmlsdGVyXG4iLCBkZXYtPm5hbWUsCiAJCQkgICAgbWNfbGlzdC0+ZG1pX2FkZHIpOwogCQlpKys7CisJCWNudC0tOwogCX0KIAluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwotCWlmIChtY19saXN0KQorCWlmIChjbnQpCiAJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJcmV0dXJuIGk7CkBAIC01MzYsMzEgKzU0MCwxNCBAQAogCQlpZiAocHJpdi0+Y21kX3RpbWVkX291dCAmJiBwcml2LT5jdXJfY21kKSB7CiAJCQlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kbm9kZSA9IHByaXYtPmN1cl9jbWQ7CiAKLQkJCWlmICgrK3ByaXYtPm5yX3JldHJpZXMgPiAzKSB7Ci0JCQkJbGJzX3ByX2luZm8oIkV4Y2Vzc2l2ZSB0aW1lb3V0cyBzdWJtaXR0aW5nICIKLQkJCQkJImNvbW1hbmQgMHglMDR4XG4iLAotCQkJCQlsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKLQkJCQlsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAtRVRJTUVET1VUKTsKLQkJCQlwcml2LT5ucl9yZXRyaWVzID0gMDsKLQkJCQlpZiAocHJpdi0+cmVzZXRfY2FyZCkKLQkJCQkJcHJpdi0+cmVzZXRfY2FyZChwcml2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpdi0+Y3VyX2NtZCA9IE5VTEw7Ci0JCQkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7Ci0JCQkJbGJzX3ByX2luZm8oInJlcXVldWVpbmcgY29tbWFuZCAweCUwNHggZHVlICIKLQkJCQkJInRvIHRpbWVvdXQgKCMlZClcbiIsCi0JCQkJCWxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCksCi0JCQkJCXByaXYtPm5yX3JldHJpZXMpOwotCi0JCQkJLyogU3RpY2sgaXQgYmFjayBhdCB0aGUgX3RvcF8gb2YgdGhlIHBlbmRpbmcgcXVldWUKLQkJCQkgICBmb3IgaW1tZWRpYXRlIHJlc3VibWlzc2lvbiAqLwotCQkJCWxpc3RfYWRkKCZjbWRub2RlLT5saXN0LCAmcHJpdi0+Y21kcGVuZGluZ3EpOwotCQkJfQorCQkJbGJzX3ByX2luZm8oIlRpbWVvdXQgc3VibWl0dGluZyBjb21tYW5kIDB4JTA0eFxuIiwKKwkJCQlsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKKwkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIC1FVElNRURPVVQpOworCQkJaWYgKHByaXYtPnJlc2V0X2NhcmQpCisJCQkJcHJpdi0+cmVzZXRfY2FyZChwcml2KTsKIAkJfQogCQlwcml2LT5jbWRfdGltZWRfb3V0ID0gMDsKIAotCi0KIAkJaWYgKCFwcml2LT5md19yZWFkeSkKIAkJCWNvbnRpbnVlOwogCkBAIC02MjIsNyArNjA5LDcgQEAKIAkJCQlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwogCQkJCWlmIChwcml2LT5tZXNoX2RldiAmJgotCQkJCSAgICBwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpCisJCQkJICAgIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5tZXNoX2Rldik7CiAJCQl9CiAJCX0KQEAgLTczMiw3ICs3MTksNyBAQAogICogIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdGltZW91dCBvZiBjb21tYW5kIHNlbmRpbmcuCiAgKiAgSXQgd2lsbCByZS1zZW5kIHRoZSBzYW1lIGNvbW1hbmQgYWdhaW4uCiAgKi8KLXN0YXRpYyB2b2lkIGNvbW1hbmRfdGltZXJfZm4odW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgbGJzX2NtZF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgbGJzX3ByaXZhdGUgKilkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04MDksMTggKzc5Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGxic19zeW5jX2NoYW5uZWxfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxic19wcml2YXRlLAotCQlzeW5jX2NoYW5uZWwpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwotCWlmIChsYnNfdXBkYXRlX2NoYW5uZWwocHJpdikpCi0JCWxic19wcl9pbmZvKCJDaGFubmVsIHN5bmNocm9uaXphdGlvbiBmYWlsZWQuIik7Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwotfQotCi0KIHN0YXRpYyBpbnQgbGJzX2luaXRfYWRhcHRlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJc2l6ZV90IGJ1ZnNpemU7CkBAIC04NDgsMTQgKzgyMywxMiBAQAogCW1lbXNldChwcml2LT5jdXJyZW50X2FkZHIsIDB4ZmYsIEVUSF9BTEVOKTsKIAogCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0RJU0NPTk5FQ1RFRDsKLQlwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID0gTEJTX0RJU0NPTk5FQ1RFRDsKIAlwcml2LT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwogCXByaXYtPm1vZGUgPSBJV19NT0RFX0lORlJBOwogCXByaXYtPmNoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMOwogCXByaXYtPm1hY19jb250cm9sID0gQ01EX0FDVF9NQUNfUlhfT04gfCBDTURfQUNUX01BQ19UWF9PTjsKIAlwcml2LT5yYWRpb19vbiA9IDE7CiAJcHJpdi0+ZW5hYmxlaHdhdXRvID0gMTsKLQlwcml2LT5jYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCXByaXYtPnBzbW9kZSA9IExCUzgwMl8xMVBPV0VSTU9ERUNBTTsKIAlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfRlVMTF9QT1dFUjsKIAlwcml2LT5pc19kZWVwX3NsZWVwID0gMDsKQEAgLTg2NSw3ICs4MzgsNyBAQAogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CiAKLQlzZXR1cF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lciwgY29tbWFuZF90aW1lcl9mbiwKKwlzZXR1cF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lciwgbGJzX2NtZF90aW1lb3V0X2hhbmRsZXIsCiAJCSh1bnNpZ25lZCBsb25nKXByaXYpOwogCXNldHVwX3RpbWVyKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lciwgYXV0b19kZWVwc2xlZXBfdGltZXJfZm4sCiAJCQkodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTk5OCwxMSArOTcxLDYgQEAKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YXNzb2Nfd29yaywgbGJzX2Fzc29jaWF0aW9uX3dvcmtlcik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgbGJzX3NjYW5fd29ya2VyKTsKIAlJTklUX1dPUksoJnByaXYtPm1jYXN0X3dvcmssIGxic19zZXRfbWNhc3Rfd29ya2VyKTsKLQlJTklUX1dPUksoJnByaXYtPnN5bmNfY2hhbm5lbCwgbGJzX3N5bmNfY2hhbm5lbF93b3JrZXIpOwotCi0JcHJpdi0+bWVzaF9vcGVuID0gMDsKLQlzcHJpbnRmKHByaXYtPm1lc2hfc3NpZCwgIm1lc2giKTsKLQlwcml2LT5tZXNoX3NzaWRfbGVuID0gNDsKIAogCXByaXYtPndvbF9jcml0ZXJpYSA9IDB4ZmZmZmZmZmY7CiAJcHJpdi0+d29sX2dwaW8gPSAweGZmOwpAQCAtMTA3Niw2ICsxMDQ0LDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcmVtb3ZlX2NhcmQpOwogCiAKK3N0YXRpYyBpbnQgbGJzX3J0YXBfc3VwcG9ydGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAoTVJWTF9GV19NQUpPUl9SRVYocHJpdi0+ZndyZWxlYXNlKSA9PSBNUlZMX0ZXX1Y1KQorCQlyZXR1cm4gMTsKKworCS8qIG5ld2VyIGZpcm13YXJlIHVzZSBhIGNhcGFiaWxpdHkgbWFzayAqLworCXJldHVybiAoKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPj0gTVJWTF9GV19WMTApICYmCisJCShwcml2LT5md2NhcGluZm8gJiBNRVNIX0NBUElORk9fRU5BQkxFX01BU0spKTsKK30KKworCiBpbnQgbGJzX3N0YXJ0X2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CkBAIC0xMDk1LDEyICsxMDc0LDE0IEBACiAKIAlsYnNfdXBkYXRlX2NoYW5uZWwocHJpdik7CiAKKwlsYnNfaW5pdF9tZXNoKHByaXYpOworCiAJLyoKIAkgKiBXaGlsZSBydGFwIGlzbid0IHJlbGF0ZWQgdG8gbWVzaCwgb25seSBtZXNoLWVuYWJsZWQKIAkgKiBmaXJtd2FyZSBpbXBsZW1lbnRzIHRoZSBydGFwIGZ1bmN0aW9uYWxpdHkgdmlhCiAJICogQ01EXzgwMl8xMV9NT05JVE9SX01PREUuCiAJICovCi0JaWYgKGxic19pbml0X21lc2gocHJpdikpIHsKKwlpZiAobGJzX3J0YXBfc3VwcG9ydGVkKHByaXYpKSB7CiAJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX3J0YXApKQogCQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIGxic19ydGFwIGF0dHJpYnV0ZVxuIik7CiAJfQpAQCAtMTEzNCw3ICsxMTE1LDkgQEAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCiAJbGJzX2RlYnVnZnNfcmVtb3ZlX29uZShwcml2KTsKLQlpZiAobGJzX2RlaW5pdF9tZXNoKHByaXYpKQorCWxic19kZWluaXRfbWVzaChwcml2KTsKKworCWlmIChsYnNfcnRhcF9zdXBwb3J0ZWQocHJpdikpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9sYnNfcnRhcCk7CiAKIAkvKiBEZWxldGUgdGhlIHRpbWVvdXQgb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzaW5nIGNvbW1hbmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYwppbmRleCA5MmI3YTM1Li5lMzg1YWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMTk3LDcgKzE5NiwxNCBAQAogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01FU0gpOwogCi0JaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfT0xEKSB7CisJcHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9IExCU19ESVNDT05ORUNURUQ7CisKKwkvKiBEZXRlcm1pbmUgbWVzaF9md192ZXIgZnJvbSBmd3JlbGVhc2UgYW5kIGZ3Y2FwaW5mbyAqLworCS8qIDUuMC4xNnAwIDkuMC4wLnAwIGlzIGtub3duIHRvIE5PVCBzdXBwb3J0IGFueSBtZXNoICovCisJLyogNS4xMTAuMjIgaGF2ZSBtZXNoIGNvbW1hbmQgd2l0aCAweGEzIGNvbW1hbmQgaWQgKi8KKwkvKiAxMC4wLjAucDAgRlcgYnJpbmdzIGluIG1lc2ggY29uZmlnIGNvbW1hbmQgd2l0aCBkaWZmZXJlbnQgaWQgKi8KKwkvKiBDaGVjayBGVyB2ZXJzaW9uIE1TQiBhbmQgaW5pdGlhbGl6ZSBtZXNoX2Z3X3ZlciAqLworCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID09IE1SVkxfRldfVjUpIHsKIAkJLyogRW5hYmxlIG1lc2gsIGlmIHN1cHBvcnRlZCwgYW5kIHdvcmsgb3V0IHdoaWNoIFRMViBpdCB1c2VzLgogCQkgICAweDEwMCArIDI5MSBpcyBhbiB1bm9mZmljaWFsIHZhbHVlIHVzZWQgaW4gNS4xMTAuMjAucFhYCiAJCSAgIDB4MTAwICsgMzcgaXMgdGhlIG9mZmljaWFsIHZhbHVlIHVzZWQgaW4gNS4xMTAuMjEucFhYCkBAIC0yMTksNyArMjI1LDkgQEAKIAkJCQkJICAgIHByaXYtPmNoYW5uZWwpKQogCQkJCXByaXYtPm1lc2hfdGx2ID0gMDsKIAkJfQotCX0gZWxzZSBpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19ORVcpIHsKKwl9IGVsc2UKKwlpZiAoKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPj0gTVJWTF9GV19WMTApICYmCisJCShwcml2LT5md2NhcGluZm8gJiBNRVNIX0NBUElORk9fRU5BQkxFX01BU0spKSB7CiAJCS8qIDEwLjAuMC5wWFggbmV3IGZpcm13YXJlcyBzaG91bGQgc3VjY2VlZCB3aXRoIFRMVgogCQkgKiAweDEwMCszNzsgRG8gbm90IGludm9rZSBjb21tYW5kIHdpdGggb2xkIFRMVi4KIAkJICovCkBAIC0yMjgsNyArMjM2LDEyIEBACiAJCQkJICAgIHByaXYtPmNoYW5uZWwpKQogCQkJcHJpdi0+bWVzaF90bHYgPSAwOwogCX0KKworCiAJaWYgKHByaXYtPm1lc2hfdGx2KSB7CisJCXNwcmludGYocHJpdi0+bWVzaF9zc2lkLCAibWVzaCIpOworCQlwcml2LT5tZXNoX3NzaWRfbGVuID0gNDsKKwogCQlsYnNfYWRkX21lc2gocHJpdik7CiAKIAkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9sYnNfbWVzaCkpCkBAIC00MTYsMTAgKzQyOSwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByeHBkICpyeHBkKQogewogCWlmIChwcml2LT5tZXNoX2RldikgewotCQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19PTEQpIHsKKwkJaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX09MRF9NRVNIX0lEKSB7CiAJCQlpZiAocnhwZC0+cnhfY29udHJvbCAmIFJ4UERfTUVTSF9GUkFNRSkKIAkJCQlkZXYgPSBwcml2LT5tZXNoX2RldjsKLQkJfSBlbHNlIGlmIChwcml2LT5tZXNoX2Z3X3ZlciA9PSBNRVNIX0ZXX05FVykgeworCQl9IGVsc2UgaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX01FU0hfSUQpIHsKIAkJCWlmIChyeHBkLT51LmJzcy5ic3NfbnVtID09IE1FU0hfSUZBQ0VfSUQpCiAJCQkJZGV2ID0gcHJpdi0+bWVzaF9kZXY7CiAJCX0KQEAgLTQzMiw5ICs0NDUsOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB0eHBkICp0eHBkKQogewogCWlmIChkZXYgPT0gcHJpdi0+bWVzaF9kZXYpIHsKLQkJaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfT0xEKQorCQlpZiAocHJpdi0+bWVzaF90bHYgPT0gVExWX1RZUEVfT0xEX01FU0hfSUQpCiAJCQl0eHBkLT50eF9jb250cm9sIHw9IGNwdV90b19sZTMyKFR4UERfTUVTSF9GUkFNRSk7Ci0JCWVsc2UgaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfTkVXKQorCQllbHNlIGlmIChwcml2LT5tZXNoX3RsdiA9PSBUTFZfVFlQRV9NRVNIX0lEKQogCQkJdHhwZC0+dS5ic3MuYnNzX251bSA9IE1FU0hfSUZBQ0VfSUQ7CiAJfQogfQpAQCAtNTM4LDcgKzU1MSw3IEBACiAJICogQ29tbWFuZCBpZCBpcyAweGFjIGZvciB2MTAgRlcgYWxvbmcgd2l0aCBtZXNoIGludGVyZmFjZQogCSAqIGlkIGluIGJpdHMgMTQtMTMtMTIuCiAJICovCi0JaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfTkVXKQorCWlmIChwcml2LT5tZXNoX3RsdiA9PSBUTFZfVFlQRV9NRVNIX0lEKQogCQljb21tYW5kID0gQ01EX01FU0hfQ09ORklHIHwKIAkJCSAgKE1FU0hfSUZBQ0VfSUQgPDwgTUVTSF9JRkFDRV9CSVRfT0ZGU0VUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCmluZGV4IGZlYTliNWQuLmUyNTczMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICisKIC8qIE1lc2ggc3RhdGlzdGljcyAqLwogc3RydWN0IGxic19tZXNoX3N0YXRzIHsKIAl1MzIJZndkX2JjYXN0X2NudDsJCS8qIEZ3ZDogQnJvYWRjYXN0IGNvdW50ZXIgKi8KQEAgLTQ2LDExICs0OCwyMCBAQAogLyogQ29tbWFuZCBoYW5kbGluZyAqLwogCiBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQ7CitzdHJ1Y3QgY21kX2RzX21lc2hfYWNjZXNzOworc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZzsKIAogaW50IGxic19jbWRfYnRfYWNjZXNzKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAogCXUxNiBjbWRfYWN0aW9uLCB2b2lkICpwZGF0YV9idWYpOwogaW50IGxic19jbWRfZnd0X2FjY2VzcyhzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKIAl1MTYgY21kX2FjdGlvbiwgdm9pZCAqcGRhdGFfYnVmKTsKK2ludCBsYnNfbWVzaF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAorCQkgICAgc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyAqY21kKTsKK2ludCBsYnNfbWVzaF9jb25maWdfc2VuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyAqY21kLAorCQkJIHVpbnQxNl90IGFjdGlvbiwgdWludDE2X3QgdHlwZSk7CitpbnQgbGJzX21lc2hfY29uZmlnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgZW5hYmxlLCB1aW50MTZfdCBjaGFuKTsKKwogCiAKIC8qIFBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiAqLwpAQCAtNzUsNCArODYsMjUgQEAKIAl1aW50MzJfdCBzdHJpbmdzZXQsIHVpbnQ4X3QgKnMpOwogCiAKKy8qIEFjY2Vzc29ycyAqLworCisjZGVmaW5lIGxic19tZXNoX29wZW4ocHJpdikgKHByaXYtPm1lc2hfb3BlbikKKyNkZWZpbmUgbGJzX21lc2hfY29ubmVjdGVkKHByaXYpIChwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpCisKKyNlbHNlCisKKyNkZWZpbmUgbGJzX2luaXRfbWVzaChwcml2KQorI2RlZmluZSBsYnNfZGVpbml0X21lc2gocHJpdikKKyNkZWZpbmUgbGJzX2FkZF9tZXNoKHByaXYpCisjZGVmaW5lIGxic19yZW1vdmVfbWVzaChwcml2KQorI2RlZmluZSBsYnNfbWVzaF9zZXRfZGV2KHByaXYsIGRldiwgcnhwZCkgKGRldikKKyNkZWZpbmUgbGJzX21lc2hfc2V0X3R4cGQocHJpdiwgZGV2LCB0eHBkKQorI2RlZmluZSBsYnNfbWVzaF9jb25maWcocHJpdiwgZW5hYmxlLCBjaGFuKQorI2RlZmluZSBsYnNfbWVzaF9vcGVuKHByaXYpICgwKQorI2RlZmluZSBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikgKDApCisKKyNlbmRpZgorCisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKaW5kZXggYjBiMWM3OC4uMjIwMzYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQgJiYgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQogCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CiAKLQlpZiAocHJpdi0+bWVzaF9kZXYgJiYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgJiYKKwlpZiAocHJpdi0+bWVzaF9kZXYgJiYgbGJzX21lc2hfY29ubmVjdGVkKHByaXYpICYmCiAJICAgICFwcml2LT50eF9wZW5kaW5nX2xlbikKIAkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5tZXNoX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDMxNWQxY2UuLjUyZDI0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKIAotCWlmIChwcml2LT5tZXNoX2RldiAmJiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSkKKwlpZiAocHJpdi0+bWVzaF9kZXYgJiYgbGJzX21lc2hfY29ubmVjdGVkKHByaXYpKQogCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxic19zZW5kX3R4X2ZlZWRiYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCA0YjFhYWI1Li43MWY4OGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKIAlpZiAoKHByaXYtPmNvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpICYmCi0JCShwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpKQorCQkhbGJzX21lc2hfY29ubmVjdGVkKHByaXYpKQogCQltZW1jcHkocmF0ZXMsIGxic19iZ19yYXRlcywgTUFYX1JBVEVTKTsKIAllbHNlCiAJCW1lbWNweShyYXRlcywgcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCBNQVhfUkFURVMpOwpAQCAtMjk4LDYgKzI5OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBtZXNoX2dldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKQEAgLTMwNyw3ICszMDgsNyBAQAogCiAJLyogVXNlIG5pY2tuYW1lIHRvIGluZGljYXRlIHRoYXQgbWVzaCBpcyBvbiAqLwogCi0JaWYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgeworCWlmIChsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpIHsKIAkJc3RybmNweShleHRyYSwgIk1lc2giLCAxMik7CiAJCWV4dHJhWzEyXSA9ICdcMCc7CiAJCWR3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSk7CkBAIC0zMjEsNiArMzIyLDcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBsYnNfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKQEAgLTQyMiw2ICs0MjQsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIHN0YXRpYyBpbnQgbWVzaF93bGFuX2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdTMyICogdXdycSwKIAkJCSAgICAgIGNoYXIgKmV4dHJhKQpAQCAtNDMzLDYgKzQzNiw3IEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgbGJzX2dldF90eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtODYzLDcgKzg2Nyw3IEBACiAKIAkvKiBJZiB3ZSdyZSBub3QgYXNzb2NpYXRlZCwgYWxsIHF1YWxpdHkgdmFsdWVzIGFyZSBtZWFuaW5nbGVzcyAqLwogCWlmICgocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkgJiYKLQkgICAgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkpCisJICAgICFsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpCiAJCWdvdG8gb3V0OwogCiAJLyogUXVhbGl0eSBieSBSU1NJICovCkBAIC0xMDEwLDYgKzEwMTQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBsYnNfbWVzaF9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCkBAIC0xMDYxLDYgKzEwNjYsNyBAQAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBsYnNfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQpAQCAtMjEwOCw2ICsyMTE0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIHN0YXRpYyBpbnQgbGJzX21lc2hfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKQEAgLTIxNjEsNiArMjE2OCw3IEBACiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiAvKioKICAqICBAYnJpZWYgQ29ubmVjdCB0byB0aGUgQVAgb3IgQWQtaG9jIE5ldHdvcmsgd2l0aCBzcGVjaWZpYyBic3NpZApAQCAtMjI2Nyw3ICsyMjc1LDEzIEBACiAJKGl3X2hhbmRsZXIpIGxic19nZXRfZW5jb2RlZXh0LC8qIFNJT0NHSVdFTkNPREVFWFQgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCS8qIFNJT0NTSVdQTUtTQSAqLwogfTsKK3N0cnVjdCBpd19oYW5kbGVyX2RlZiBsYnNfaGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUobGJzX2hhbmRsZXIpLAorCS5zdGFuZGFyZAk9IChpd19oYW5kbGVyICopIGxic19oYW5kbGVyLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBsYnNfZ2V0X3dpcmVsZXNzX3N0YXRzLAorfTsKIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiBzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBtZXNoX3dsYW5faGFuZGxlcltdID0gewogCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXQ09NTUlUICovCiAJKGl3X2hhbmRsZXIpIGxic19nZXRfbmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KQEAgLTIzMjUsMTQgKzIzMzksMTAgQEAKIAkoaXdfaGFuZGxlcikgbGJzX2dldF9lbmNvZGVleHQsLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1NJV1BNS1NBICovCiB9Owotc3RydWN0IGl3X2hhbmRsZXJfZGVmIGxic19oYW5kbGVyX2RlZiA9IHsKLQkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShsYnNfaGFuZGxlciksCi0JLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgbGJzX2hhbmRsZXIsCi0JLmdldF93aXJlbGVzc19zdGF0cyA9IGxic19nZXRfd2lyZWxlc3Nfc3RhdHMsCi19OwogCiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgbWVzaF9oYW5kbGVyX2RlZiA9IHsKIAkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShtZXNoX3dsYW5faGFuZGxlciksCiAJLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgbWVzaF93bGFuX2hhbmRsZXIsCiAJLmdldF93aXJlbGVzc19zdGF0cyA9IGxic19nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKaW5kZXggMjZhMWFiZC4uNmFiMzAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwpAQCAtMzE4LDE0ICszMTgsMTQgQEAKIH0KIAogc3RhdGljIGludCBsYnRmX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiA9IGh3LT5wcml2OwogCWlmIChwcml2LT52aWYgIT0gTlVMTCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcHJpdi0+dmlmID0gY29uZi0+dmlmOwotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXByaXYtPnZpZiA9IHZpZjsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlsYnRmX3NldF9tb2RlKHByaXYsIExCVEZfQVBfTU9ERSk7CkBAIC0zMzcsMTIgKzMzNywxMiBAQAogCQlwcml2LT52aWYgPSBOVUxMOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQotCWxidGZfc2V0X21hY19hZGRyZXNzKHByaXYsICh1OCAqKSBjb25mLT5tYWNfYWRkcik7CisJbGJ0Zl9zZXRfbWFjX2FkZHJlc3MocHJpdiwgKHU4ICopIHZpZi0+YWRkcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGxidGZfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTU1NSw2ICs1NTUsOSBAQAogCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobGJ0Zl9jaGFubmVscyk7CiAJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwogCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+YmNfcHNfYnVmKTsKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkbWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCA4OGU0MTE3Li42ZWE3N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTMyLDYgKzMyLDEwIEBACiBtb2R1bGVfcGFyYW0ocmFkaW9zLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb3MsICJOdW1iZXIgb2Ygc2ltdWxhdGVkIHJhZGlvcyIpOwogCitzdGF0aWMgYm9vbCBmYWtlX2h3X3NjYW47Cittb2R1bGVfcGFyYW0oZmFrZV9od19zY2FuLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFrZV9od19zY2FuLCAiSW5zdGFsbCBmYWtlIChuby1vcCkgaHctc2NhbiBoYW5kbGVyIik7CisKIC8qKgogICogZW51bSBod3NpbV9yZWd0ZXN0IC0gdGhlIHR5cGUgb2YgcmVndWxhdG9yeSB0ZXN0cyB3ZSBvZmZlcgogICoKQEAgLTI4MSw2ICsyODUsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc181Z2h6W0FSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeildOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKV07CiAKKwlzdHJ1Y3QgbWFjX2FkZHJlc3MgYWRkcmVzc2VzWzJdOworCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgYmVhY29uX2ludDsgLyogaW4gamlmZmllcyB1bml0ICovCiAJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKQEAgLTQzNiw2ICs0NDIsMzggQEAKIH0KIAogCitzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fYWRkcl9tYXRjaF9kYXRhIHsKKwlib29sIHJldDsKKwljb25zdCB1OCAqYWRkcjsKK307CisKK3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2FkZHJfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fYWRkcl9tYXRjaF9kYXRhICptZCA9IGRhdGE7CisJaWYgKG1lbWNtcChtYWMsIG1kLT5hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJbWQtPnJldCA9IHRydWU7Cit9CisKKworc3RhdGljIGJvb2wgbWFjODAyMTFfaHdzaW1fYWRkcl9tYXRjaChzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSwKKwkJCQkgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fYWRkcl9tYXRjaF9kYXRhIG1kOworCisJaWYgKG1lbWNtcChhZGRyLCBkYXRhLT5ody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiB0cnVlOworCisJbWQucmV0ID0gZmFsc2U7CisJbWQuYWRkciA9IGFkZHI7CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKGRhdGEtPmh3LAorCQkJCQkJICAgbWFjODAyMTFfaHdzaW1fYWRkcl9pdGVyLAorCQkJCQkJICAgJm1kKTsKKworCXJldHVybiBtZC5yZXQ7Cit9CisKKwogc3RhdGljIGJvb2wgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC00ODgsOCArNTI2LDcgQEAKIAkJaWYgKG5za2IgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgZGF0YTItPmh3LT53aXBoeS0+cGVybV9hZGRyLAotCQkJICAgRVRIX0FMRU4pID09IDApCisJCWlmIChtYWM4MDIxMV9od3NpbV9hZGRyX21hdGNoKGRhdGEyLCBoZHItPmFkZHIxKSkKIAkJCWFjayA9IHRydWU7CiAJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IobnNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKIAkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGF0YTItPmh3LCBuc2tiKTsKQEAgLTU1MywyNCArNTkwLDI0IEBACiAKIAogc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMgKHR5cGU9JWQgbWFjX2FkZHI9JXBNKVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgY29uZi0+dHlwZSwKLQkgICAgICAgY29uZi0+bWFjX2FkZHIpOwotCWh3c2ltX3NldF9tYWdpYyhjb25mLT52aWYpOworCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCB2aWYtPnR5cGUsCisJICAgICAgIHZpZi0+YWRkcik7CisJaHdzaW1fc2V0X21hZ2ljKHZpZik7CiAJcmV0dXJuIDA7CiB9CiAKIAogc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcmVtb3ZlX2ludGVyZmFjZSgKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzICh0eXBlPSVkIG1hY19hZGRyPSVwTSlcbiIsCi0JICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIGNvbmYtPnR5cGUsCi0JICAgICAgIGNvbmYtPm1hY19hZGRyKTsKLQlod3NpbV9jaGVja19tYWdpYyhjb25mLT52aWYpOwotCWh3c2ltX2NsZWFyX21hZ2ljKGNvbmYtPnZpZik7CisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIHZpZi0+dHlwZSwKKwkgICAgICAgdmlmLT5hZGRyKTsKKwlod3NpbV9jaGVja19tYWdpYyh2aWYpOworCWh3c2ltX2NsZWFyX21hZ2ljKHZpZik7CiB9CiAKIApAQCAtNjE4LDEyICs2NTUsMjYgQEAKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdGF0aWMgY29uc3QgY2hhciAqY2hhbnR5cGVzWzRdID0geworCQlbTkw4MDIxMV9DSEFOX05PX0hUXSA9ICJub2h0IiwKKwkJW05MODAyMTFfQ0hBTl9IVDIwXSA9ICJodDIwIiwKKwkJW05MODAyMTFfQ0hBTl9IVDQwTUlOVVNdID0gImh0NDAtIiwKKwkJW05MODAyMTFfQ0hBTl9IVDQwUExVU10gPSAiaHQ0MCsiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKnNtcHNfbW9kZXNbSUVFRTgwMjExX1NNUFNfTlVNX01PREVTXSA9IHsKKwkJW0lFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQ10gPSAiYXV0byIsCisJCVtJRUVFODAyMTFfU01QU19PRkZdID0gIm9mZiIsCisJCVtJRUVFODAyMTFfU01QU19TVEFUSUNdID0gInN0YXRpYyIsCisJCVtJRUVFODAyMTFfU01QU19EWU5BTUlDXSA9ICJkeW5hbWljIiwKKwl9OwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzIChmcmVxPSVkIGlkbGU9JWQgcHM9JWQpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAoZnJlcT0lZC8lcyBpZGxlPSVkIHBzPSVkIHNtcHM9JXMpXG4iLAogCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLAogCSAgICAgICBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkgICAgICAgY2hhbnR5cGVzW2NvbmYtPmNoYW5uZWxfdHlwZV0sCiAJICAgICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSksCi0JICAgICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKTsKKwkgICAgICAgISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyksCisJICAgICAgIHNtcHNfbW9kZXNbY29uZi0+c21wc19tb2RlXSk7CiAKIAlkYXRhLT5pZGxlID0gISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKTsKIApAQCAtNzIwLDIzICs3NzEsNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCWh3c2ltX2NoZWNrX21hZ2ljKHZpZik7CisJaHdzaW1fc2V0X3N0YV9tYWdpYyhzdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCWh3c2ltX2NoZWNrX21hZ2ljKHZpZik7CisJaHdzaW1fY2xlYXJfc3RhX21hZ2ljKHN0YSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJaHdzaW1fY2hlY2tfbWFnaWModmlmKTsKKwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTVEFfTk9USUZZX0FERDoKLQkJaHdzaW1fc2V0X3N0YV9tYWdpYyhzdGEpOwotCQlicmVhazsKLQljYXNlIFNUQV9OT1RJRllfUkVNT1ZFOgotCQlod3NpbV9jbGVhcl9zdGFfbWFnaWMoc3RhKTsKLQkJYnJlYWs7CiAJY2FzZSBTVEFfTk9USUZZX1NMRUVQOgogCWNhc2UgU1RBX05PVElGWV9BV0FLRToKIAkJLyogVE9ETzogbWFrZSBnb29kIHVzZSBvZiB0aGVzZSBmbGFncyAqLwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJJbnZhbGlkIHN0YSBub3RpZnk6ICVkXG4iLCBjbWQpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTgyNyw3ICs4OTYsNzcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbWFjODAyMTFfaHdzaW1fb3BzID0KK3N0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgorCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQoreworCS8qCisJICogSW4gdGhpcyBzcGVjaWFsIGNhc2UsIHRoZXJlJ3Mgbm90aGluZyB3ZSBuZWVkIHRvCisJICogZG8gYmVjYXVzZSBod3NpbSBkb2VzIHRyYW5zbWlzc2lvbiBzeW5jaHJvbm91c2x5LgorCSAqIEluIHRoZSBmdXR1cmUsIHdoZW4gaXQgZG9lcyB0cmFuc21pc3Npb25zIHZpYQorCSAqIHVzZXJzcGFjZSwgd2UgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nLgorCSAqLworfQorCitzdHJ1Y3QgaHdfc2Nhbl9kb25lIHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHc7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Cit9OworCitzdGF0aWMgdm9pZCBod19zY2FuX2RvbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBod19zY2FuX2RvbmUgKmhzZCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHdfc2Nhbl9kb25lLCB3LndvcmspOworCisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGhzZC0+aHcsIGZhbHNlKTsKKwlrZnJlZShoc2QpOworfQorCitzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGh3X3NjYW5fZG9uZSAqaHNkID0ga3phbGxvYyhzaXplb2YoKmhzZCksIEdGUF9LRVJORUwpOworCWludCBpOworCisJaWYgKCFoc2QpCisJCXJldHVybiAtRU5PTUVNOworCisJaHNkLT5odyA9IGh3OworCUlOSVRfREVMQVlFRF9XT1JLKCZoc2QtPncsIGh3X3NjYW5fZG9uZSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiaHdzaW0gc2NhbiByZXF1ZXN0XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX2NoYW5uZWxzOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJod3NpbSBzY2FuIGZyZXEgJWRcbiIsCisJCQlyZXEtPmNoYW5uZWxzW2ldLT5jZW50ZXJfZnJlcSk7CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmaHNkLT53LCAyICogSFopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9od3NpbV9vcHMgPQogewogCS50eCA9IG1hYzgwMjExX2h3c2ltX3R4LAogCS5zdGFydCA9IG1hYzgwMjExX2h3c2ltX3N0YXJ0LApAQCAtODM3LDEwICs5NzYsMTQgQEAKIAkuY29uZmlnID0gbWFjODAyMTFfaHdzaW1fY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyID0gbWFjODAyMTFfaHdzaW1fY29uZmlndXJlX2ZpbHRlciwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IG1hYzgwMjExX2h3c2ltX2Jzc19pbmZvX2NoYW5nZWQsCisJLnN0YV9hZGQgPSBtYWM4MDIxMV9od3NpbV9zdGFfYWRkLAorCS5zdGFfcmVtb3ZlID0gbWFjODAyMTFfaHdzaW1fc3RhX3JlbW92ZSwKIAkuc3RhX25vdGlmeSA9IG1hYzgwMjExX2h3c2ltX3N0YV9ub3RpZnksCiAJLnNldF90aW0gPSBtYWM4MDIxMV9od3NpbV9zZXRfdGltLAogCS5jb25mX3R4ID0gbWFjODAyMTFfaHdzaW1fY29uZl90eCwKIAlDRkc4MDIxMV9URVNUTU9ERV9DTUQobWFjODAyMTFfaHdzaW1fdGVzdG1vZGVfY21kKQorCS5hbXBkdV9hY3Rpb24gPSBtYWM4MDIxMV9od3NpbV9hbXBkdV9hY3Rpb24sCisJLmZsdXNoID0gbWFjODAyMTFfaHdzaW1fZmx1c2gsCiB9OwogCiAKQEAgLTEwMzUsNiArMTE3OCw5IEBACiAJaWYgKHJhZGlvcyA8IDEgfHwgcmFkaW9zID4gMTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChmYWtlX2h3X3NjYW4pCisJCW1hYzgwMjExX2h3c2ltX29wcy5od19zY2FuID0gbWFjODAyMTFfaHdzaW1faHdfc2NhbjsKKwogCXNwaW5fbG9ja19pbml0KCZod3NpbV9yYWRpb19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaHdzaW1fcmFkaW9zKTsKIApAQCAtMTA3Miw3ICsxMjE4LDExIEBACiAJCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkYXRhLT5kZXYpOwogCQlhZGRyWzNdID0gaSA+PiA4OwogCQlhZGRyWzRdID0gaTsKLQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGFkZHIpOworCQltZW1jcHkoZGF0YS0+YWRkcmVzc2VzWzBdLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGRhdGEtPmFkZHJlc3Nlc1sxXS5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisJCWRhdGEtPmFkZHJlc3Nlc1sxXS5hZGRyWzBdIHw9IDB4NDA7CisJCWh3LT53aXBoeS0+bl9hZGRyZXNzZXMgPSAyOworCQlody0+d2lwaHktPmFkZHJlc3NlcyA9IGRhdGEtPmFkZHJlc3NlczsKIAogCQlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDE7CiAJCWh3LT5xdWV1ZXMgPSA0OwpAQCAtMTA4Miw3ICsxMjMyLDkgQEAKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKIAogCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUgfAotCQkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCQkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMgfAorCQkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFM7CiAKIAkJLyogYXNrIG1hYzgwMjExIHRvIHJlc2VydmUgc3BhY2UgZm9yIG1hZ2ljICovCiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwppbmRleCA1OWY5MjEwLi5hYzY1ZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTIsNyArMiw3IEBACiAgKiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCiAgKiBEcml2ZXIgZm9yIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSBXaXJlbGVzcyBjYXJkcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgTWFydmVsbCBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2RlZmluZSBNV0w4S19ERVNDCSJNYXJ2ZWxsIFRPUERPRyhSKSA4MDIuMTEgV2lyZWxlc3MgTmV0d29yayBEcml2ZXIiCiAjZGVmaW5lIE1XTDhLX05BTUUJS0JVSUxEX01PRE5BTUUKLSNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC4xMCIKKyNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC4xMiIKIAogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTVdMOEtfSElVX0dFTl9QVFIJCQkweDAwMDAwYzEwCkBAIC05Miw4ICs5Miw3IEBACiAJY2hhciAqcGFydF9uYW1lOwogCWNoYXIgKmhlbHBlcl9pbWFnZTsKIAljaGFyICpmd19pbWFnZTsKLQlzdHJ1Y3QgcnhkX29wcyAqcnhkX29wczsKLQl1MTYgbW9kZXM7CisJc3RydWN0IHJ4ZF9vcHMgKmFwX3J4ZF9vcHM7CiB9OwogCiBzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgewpAQCAtMTIwLDM0ICsxMTksMzYgQEAKIAkvKiBzdyBhcHBlbmRzIGhlcmUgKi8KIAlpbnQgdGFpbDsKIAotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgc3RhdHM7CisJdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhkOwogCWRtYV9hZGRyX3QgdHhkX2RtYTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYjsKIH07CiAKLS8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAgKi8KLXN0cnVjdCBtd2w4a19maXJtd2FyZSB7Ci0JLyogQm9vdCBoZWxwZXIgY29kZSAqLwotCXN0cnVjdCBmaXJtd2FyZSAqaGVscGVyOwotCi0JLyogTWljcm9jb2RlICovCi0Jc3RydWN0IGZpcm13YXJlICp1Y29kZTsKLX07Ci0KIHN0cnVjdCBtd2w4a19wcml2IHsKLQl2b2lkIF9faW9tZW0gKnNyYW07Ci0Jdm9pZCBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKIAlzdHJ1Y3QgbXdsOGtfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvOworCisJdm9pZCBfX2lvbWVtICpzcmFtOworCXZvaWQgX19pb21lbSAqcmVnczsKKworCS8qIGZpcm13YXJlICovCisJc3RydWN0IGZpcm13YXJlICpmd19oZWxwZXI7CisJc3RydWN0IGZpcm13YXJlICpmd191Y29kZTsKKworCS8qIGhhcmR3YXJlL2Zpcm13YXJlIHBhcmFtZXRlcnMgKi8KIAlib29sIGFwX2Z3OwogCXN0cnVjdCByeGRfb3BzICpyeGRfb3BzOwotCi0JLyogZmlybXdhcmUgZmlsZXMgYW5kIG1ldGEgZGF0YSAqLwotCXN0cnVjdCBtd2w4a19maXJtd2FyZSBmdzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRfMjQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzI0WzE0XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfMjRbMTRdOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF81MDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfNTBbNF07CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzXzUwWzldOworCXUzMiBhcF9tYWNpZHNfc3VwcG9ydGVkOworCXUzMiBzdGFfbWFjaWRzX3N1cHBvcnRlZDsKIAogCS8qIGZpcm13YXJlIGFjY2VzcyAqLwogCXN0cnVjdCBtdXRleCBmd19tdXRleDsKQEAgLTE2MSw5ICsxNjIsOSBAQAogCS8qIFRYIHF1aWVzY2UgY29tcGxldGlvbiwgcHJvdGVjdGVkIGJ5IGZ3X211dGV4IGFuZCB0eF9sb2NrICovCiAJc3RydWN0IGNvbXBsZXRpb24gKnR4X3dhaXQ7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCi0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJyZW50X2NoYW5uZWw7CisJLyogTGlzdCBvZiBpbnRlcmZhY2VzLiAgKi8KKwl1MzIgbWFjaWRzX3VzZWQ7CisJc3RydWN0IGxpc3RfaGVhZCB2aWZfbGlzdDsKIAogCS8qIHBvd2VyIG1hbmFnZW1lbnQgc3RhdHVzIGNvb2tpZSBmcm9tIGZpcm13YXJlICovCiAJdTMyICpjb29raWU7CkBAIC0xODIsMTEgKzE4Myw2IEBACiAJc3RydWN0IG13bDhrX3J4X3F1ZXVlIHJ4cVtNV0w4S19SWF9RVUVVRVNdOwogCXN0cnVjdCBtd2w4a190eF9xdWV1ZSB0eHFbTVdMOEtfVFhfUVVFVUVTXTsKIAotCS8qIFBIWSBwYXJhbWV0ZXJzICovCi0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzWzE0XTsKLQogCWJvb2wgcmFkaW9fb247CiAJYm9vbCByYWRpb19zaG9ydF9wcmVhbWJsZTsKIAlib29sIHNuaWZmZXJfZW5hYmxlZDsKQEAgLTIwNSwzMiArMjAxLDMzIEBACiAJICovCiAJc3RydWN0IHdvcmtfc3RydWN0IGZpbmFsaXplX2pvaW5fd29ya2VyOwogCi0JLyogVGFza2xldCB0byByZWNsYWltIFRYIGRlc2NyaXB0b3JzIGFuZCBidWZmZXJzIGFmdGVyIHR4ICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4X3JlY2xhaW1fdGFzazsKKwkvKiBUYXNrbGV0IHRvIHBlcmZvcm0gVFggcmVjbGFpbS4gICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHBvbGxfdHhfdGFzazsKKworCS8qIFRhc2tsZXQgdG8gcGVyZm9ybSBSWC4gICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHBvbGxfcnhfdGFzazsKIH07CiAKIC8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgbXdsOGtfdmlmIHsKLQkvKiBiYWNrcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCi0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAKLQkvKiBCU1MgY29uZmlnIG9mIEFQIG9yIElCU1MgZnJvbSBtYWM4MDIxMSovCi0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBic3NfaW5mbzsKKwkvKiBGaXJtd2FyZSBtYWNpZCBmb3IgdGhpcyB2aWYuICAqLworCWludCBtYWNpZDsKIAotCS8qIEJTU0lEIG9mIEFQIG9yIElCU1MgKi8KLQl1OAlic3NpZFtFVEhfQUxFTl07Ci0JdTgJbWFjX2FkZHJbRVRIX0FMRU5dOwotCi0JIC8qIEluZGV4IGludG8gc3RhdGlvbiBkYXRhYmFzZS5SZXR1cm5lZCBieSB1cGRhdGVfc3RhX2RiIGNhbGwgKi8KLQl1OAlwZWVyX2lkOwotCi0JLyogTm9uIEFNUERVIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCBieSBkcml2ZXIgKi8KLQl1MTYJc2Vxbm87CisJLyogTm9uIEFNUERVIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCBieSBkcml2ZXIuICAqLworCXUxNiBzZXFubzsKIH07Ci0KICNkZWZpbmUgTVdMOEtfVklGKF92aWYpICgoc3RydWN0IG13bDhrX3ZpZiAqKSYoKF92aWYpLT5kcnZfcHJpdikpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdsOGtfY2hhbm5lbHNbXSA9IHsKK3N0cnVjdCBtd2w4a19zdGEgeworCS8qIEluZGV4IGludG8gc3RhdGlvbiBkYXRhYmFzZS4gUmV0dXJuZWQgYnkgVVBEQVRFX1NUQURCLiAgKi8KKwl1OCBwZWVyX2lkOworfTsKKyNkZWZpbmUgTVdMOEtfU1RBKF9zdGEpICgoc3RydWN0IG13bDhrX3N0YSAqKSYoKF9zdGEpLT5kcnZfcHJpdikpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdsOGtfY2hhbm5lbHNfMjRbXSA9IHsKIAl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCiAJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAogCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKQEAgLTI0Miw5ICsyMzksMTIgQEAKIAl7IC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksIH0sCiAJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwKIAl7IC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2NywgLmh3X3ZhbHVlID0gMTIsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0ODQsIC5od192YWx1ZSA9IDE0LCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2w4a19yYXRlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2w4a19yYXRlc18yNFtdID0gewogCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwKIAl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sCiAJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAxMSwgfSwKQEAgLTI2MSw4ICsyNjEsMjMgQEAKIAl7IC5iaXRyYXRlID0gNzIwLCAuaHdfdmFsdWUgPSAxNDQsIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggbXdsOGtfcmF0ZWlkc1sxMl0gPSB7Ci0JMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4LAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2w4a19jaGFubmVsc181MFtdID0geworCXsgLmNlbnRlcl9mcmVxID0gNTE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSA1MjAwLCAuaHdfdmFsdWUgPSA0MCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDUyMjAsIC5od192YWx1ZSA9IDQ0LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gNTI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzXzUwW10gPSB7CisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDI0LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDM2LCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDcyLCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDk2LCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDEwOCwgfSwKKwl7IC5iaXRyYXRlID0gNzIwLCAuaHdfdmFsdWUgPSAxNDQsIH0sCiB9OwogCiAvKiBTZXQgb3IgZ2V0IGluZm8gZnJvbSBGaXJtd2FyZSAqLwpAQCAtMjc4LDYgKzI5Myw3IEBACiAjZGVmaW5lIE1XTDhLX0NNRF9SQURJT19DT05UUk9MCQkweDAwMWMKICNkZWZpbmUgTVdMOEtfQ01EX1JGX1RYX1BPV0VSCQkweDAwMWUKICNkZWZpbmUgTVdMOEtfQ01EX1JGX0FOVEVOTkEJCTB4MDAyMAorI2RlZmluZSBNV0w4S19DTURfU0VUX0JFQUNPTgkJMHgwMTAwCQkvKiBwZXItdmlmICovCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUFJFX1NDQU4JCTB4MDEwNwogI2RlZmluZSBNV0w4S19DTURfU0VUX1BPU1RfU0NBTgkJMHgwMTA4CiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTAkweDAxMGEKQEAgLTI5MSw4ICszMDcsMTAgQEAKICNkZWZpbmUgTVdMOEtfQ01EX01JTU9fQ09ORklHCQkweDAxMjUKICNkZWZpbmUgTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFCTB4MDEyNgogI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCi0jZGVmaW5lIE1XTDhLX0NNRF9TRVRfTUFDX0FERFIJCTB4MDIwMgorI2RlZmluZSBNV0w4S19DTURfU0VUX01BQ19BRERSCQkweDAyMDIJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERQkweDAyMDMKKyNkZWZpbmUgTVdMOEtfQ01EX0JTU19TVEFSVAkJMHgxMTAwCQkvKiBwZXItdmlmICovCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTkVXX1NUTgkJMHgxMTExCQkvKiBwZXItdmlmICovCiAjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMwogCiBzdGF0aWMgY29uc3QgY2hhciAqbXdsOGtfY21kX25hbWUodTE2IGNtZCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKQEAgLTMxMCw2ICszMjgsNyBAQAogCQlNV0w4S19DTUROQU1FKFJBRElPX0NPTlRST0wpOwogCQlNV0w4S19DTUROQU1FKFJGX1RYX1BPV0VSKTsKIAkJTVdMOEtfQ01ETkFNRShSRl9BTlRFTk5BKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfQkVBQ09OKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfUFJFX1NDQU4pOwogCQlNV0w4S19DTUROQU1FKFNFVF9QT1NUX1NDQU4pOwogCQlNV0w4S19DTUROQU1FKFNFVF9SRl9DSEFOTkVMKTsKQEAgLTMyNSw2ICszNDQsOCBAQAogCQlNV0w4S19DTUROQU1FKEVOQUJMRV9TTklGRkVSKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfTUFDX0FERFIpOwogCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoQlNTX1NUQVJUKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfTkVXX1NUTik7CiAJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX1NUQURCKTsKIAlkZWZhdWx0OgogCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKQEAgLTM1NSw4ICszNzYsOCBAQAogCiBzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQogewotCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LnVjb2RlKTsKLQltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3X3Vjb2RlKTsKKwltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5md19oZWxwZXIpOwogfQogCiAvKiBSZXF1ZXN0IGZ3IGltYWdlICovCkBAIC0zNzcsNyArMzk4LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoZGktPmhlbHBlcl9pbWFnZSAhPSBOVUxMKSB7Ci0JCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBkaS0+aGVscGVyX2ltYWdlLCAmcHJpdi0+ZncuaGVscGVyKTsKKwkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5oZWxwZXJfaW1hZ2UsICZwcml2LT5md19oZWxwZXIpOwogCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlcXVlc3RpbmcgaGVscGVyICIKIAkJCSAgICAgICAiZmlybXdhcmUgZmlsZSAlc1xuIiwgcGNpX25hbWUocHJpdi0+cGRldiksCkBAIC0zODYsMjQgKzQwNywyMiBAQAogCQl9CiAJfQogCi0JcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5md19pbWFnZSwgJnByaXYtPmZ3LnVjb2RlKTsKKwlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZGktPmZ3X2ltYWdlLCAmcHJpdi0+ZndfdWNvZGUpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwcml2LT5wZGV2KSwgZGktPmZ3X2ltYWdlKTsKLQkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKKwkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZndfaGVscGVyKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCXJldHVybiAwOwogfQogCi1NT0RVTEVfRklSTVdBUkUoIm13bDhrL2hlbHBlcl84Njg3LmZ3Iik7Ci1NT0RVTEVfRklSTVdBUkUoIm13bDhrL2ZtaW1hZ2VfODY4Ny5mdyIpOwotCiBzdHJ1Y3QgbXdsOGtfY21kX3BrdCB7CiAJX19sZTE2CWNvZGU7CiAJX19sZTE2CWxlbmd0aDsKLQlfX2xlMTYJc2VxX251bTsKKwlfX3U4CXNlcV9udW07CisJX191OAltYWNpZDsKIAlfX2xlMTYJcmVzdWx0OwogCWNoYXIJcGF5bG9hZFswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CkBAIC00NjEsNiArNDgwLDcgQEAKIAogCWNtZC0+Y29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9DT0RFX0ROTEQpOwogCWNtZC0+c2VxX251bSA9IDA7CisJY21kLT5tYWNpZCA9IDA7CiAJY21kLT5yZXN1bHQgPSAwOwogCiAJZG9uZSA9IDA7CkBAIC01NTEsMTMgKzU3MSwxMiBAQAogc3RhdGljIGludCBtd2w4a19sb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGZpcm13YXJlICpmdyA9IHByaXYtPmZ3LnVjb2RlOwotCXN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyAqZGkgPSBwcml2LT5kZXZpY2VfaW5mbzsKKwlzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcHJpdi0+ZndfdWNvZGU7CiAJaW50IHJjOwogCWludCBsb29wczsKIAogCWlmICghbWVtY21wKGZ3LT5kYXRhLCAiXHgwMVx4MDBceDAwXHgwMCIsIDQpKSB7Ci0JCXN0cnVjdCBmaXJtd2FyZSAqaGVscGVyID0gcHJpdi0+ZncuaGVscGVyOworCQlzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlciA9IHByaXYtPmZ3X2hlbHBlcjsKIAogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhlbHBlciBpbWFnZSBuZWVkZWQgYnV0IG5vbmUgIgpAQCAtNTg0LDEwICs2MDMsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JaWYgKGRpLT5tb2RlcyAmIEJJVChOTDgwMjExX0lGVFlQRV9BUCkpCi0JCWlvd3JpdGUzMihNV0w4S19NT0RFX0FQLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOwotCWVsc2UKLQkJaW93cml0ZTMyKE1XTDhLX01PREVfU1RBLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCWlvd3JpdGUzMihNV0w4S19NT0RFX1NUQSwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKIAogCWxvb3BzID0gNTAwMDAwOwogCWRvIHsKQEAgLTYxMCw5MSArNjI2LDYgQEAKIH0KIAogCi0vKgotICogRGVmaW5lcyBzaGFyZWQgYmV0d2VlbiB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4KLSAqLwotLyogSFQgY29udHJvbCBmaWVsZHMgZm9yIGZpcm13YXJlICovCi1zdHJ1Y3QgZXdjX2h0X2luZm8gewotCV9fbGUxNgljb250cm9sMTsKLQlfX2xlMTYJY29udHJvbDI7Ci0JX19sZTE2CWNvbnRyb2wzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyogRmlybXdhcmUgU3RhdGlvbiBkYXRhYmFzZSBvcGVyYXRpb25zICovCi0jZGVmaW5lIE1XTDhLX1NUQV9EQl9BRERfRU5UUlkJCTAKLSNkZWZpbmUgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWQkxCi0jZGVmaW5lIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkJCTIKLSNkZWZpbmUgTVdMOEtfU1RBX0RCX0ZMVVNICQkzCi0KLS8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCi0jZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCi0KLXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyB7Ci0JLyogUGVlciB0eXBlIC0gQVAgdnMuIFNUQS4gICovCi0JX191OAlwZWVyX3R5cGU7Ci0KLQkvKiBCYXNpYyA4MDIuMTEgY2FwYWJpbGl0aWVzIGZyb20gYXNzb2MgcmVzcC4gICovCi0JX19sZTE2CWJhc2ljX2NhcHM7Ci0KLQkvKiBTZXQgaWYgcGVlciBzdXBwb3J0cyA4MDIuMTFuIGhpZ2ggdGhyb3VnaHB1dCAoSFQpLiAgKi8KLQlfX3U4CWh0X3N1cHBvcnQ7Ci0KLQkvKiBWYWxpZCBpZiBIVCBpcyBzdXBwb3J0ZWQuICAqLwotCV9fbGUxNglodF9jYXBzOwotCV9fdTgJZXh0ZW5kZWRfaHRfY2FwczsKLQlzdHJ1Y3QgZXdjX2h0X2luZm8JZXdjX2luZm87Ci0KLQkvKiBMZWdhY3kgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCi0JX191OAlsZWdhY3lfcmF0ZXNbMTJdOwotCi0JLyogSFQgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCi0JX191OAlodF9yYXRlc1sxNl07Ci0JX191OAlwYWRbMTZdOwotCi0JLyogSWYgc2V0LCBpbnRlcm9wZXJhYmlsaXR5IG1vZGUsIG5vIHByb3ByaWV0YXJ5IGV4dGVuc2lvbnMuICAqLwotCV9fdTgJaW50ZXJvcDsKLQlfX3U4CXBhZDI7Ci0JX191OAlzdGF0aW9uX2lkOwotCV9fbGUxNglhbXNkdV9lbmFibGVkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyogSW5saW5lIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIFFvUyBmaWVsZCBpbiBkYXRhIGRlc2NyaXB0b3IuICAqLwotc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9lb3NwKHUxNiBxb3MpCi17Ci0JdTE2IHZhbF9tYXNrID0gMSA8PCA0OwotCi0JLyogRW5kIG9mIFNlcnZpY2UgUGVyaW9kIEJpdCA0ICovCi0JcmV0dXJuIHFvcyB8IHZhbF9tYXNrOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Fjayh1MTYgcW9zLCB1OCBhY2tfcG9saWN5KQotewotCXUxNiB2YWxfbWFzayA9IDB4MzsKLQl1OAlzaGlmdCA9IDU7Ci0JdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7Ci0KLQkvKiBBY2sgUG9saWN5IEJpdCA1LTYgKi8KLQlyZXR1cm4gKHFvcyAmIHFvc19tYXNrKSB8ICgoYWNrX3BvbGljeSAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUodTE2IHFvcykKLXsKLQl1MTYgdmFsX21hc2sgPSAxIDw8IDc7Ci0KLQkvKiBBTVNEVSBwcmVzZW50IEJpdCA3ICovCi0JcmV0dXJuIHFvcyB8IHZhbF9tYXNrOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3FsZW4odTE2IHFvcywgdTggbGVuKQotewotCXUxNiB2YWxfbWFzayA9IDB4ZmY7Ci0JdTgJc2hpZnQgPSA4OwotCXUxNiBxb3NfbWFzayA9IH4odmFsX21hc2sgPDwgc2hpZnQpOwotCi0JLyogUXVldWUgTGVuZ3RoIEJpdHMgOC0xNSAqLwotCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChsZW4gJiB2YWxfbWFzaykgPDwgc2hpZnQpOwotfQotCiAvKiBETUEgaGVhZGVyIHVzZWQgYnkgZmlybXdhcmUgYW5kIGhhcmR3YXJlLiAgKi8KIHN0cnVjdCBtd2w4a19kbWFfZGF0YSB7CiAJX19sZTE2IGZ3bGVuOwpAQCAtNzYxLDkgKzY5Miw5IEBACiAKIAogLyoKLSAqIFBhY2tldCByZWNlcHRpb24gZm9yIDg4dzgzNjYuCisgKiBQYWNrZXQgcmVjZXB0aW9uIGZvciA4OHc4MzY2IEFQIGZpcm13YXJlLgogICovCi1zdHJ1Y3QgbXdsOGtfcnhkXzgzNjYgeworc3RydWN0IG13bDhrX3J4ZF84MzY2X2FwIHsKIAlfX2xlMTYgcGt0X2xlbjsKIAlfX3U4IHNxMjsKIAlfX3U4IHJhdGU7CkBAIC03ODEsMjMgKzcxMiwyMyBAQAogCV9fdTggcnhfY3RybDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgTVdMOEtfODM2Nl9SQVRFX0lORk9fTUNTX0ZPUk1BVAkJMHg4MAotI2RlZmluZSBNV0w4S184MzY2X1JBVEVfSU5GT180ME1IWgkJMHg0MAotI2RlZmluZSBNV0w4S184MzY2X1JBVEVfSU5GT19SQVRFSUQoeCkJCSgoeCkgJiAweDNmKQorI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19NQ1NfRk9STUFUCTB4ODAKKyNkZWZpbmUgTVdMOEtfODM2Nl9BUF9SQVRFX0lORk9fNDBNSFoJCTB4NDAKKyNkZWZpbmUgTVdMOEtfODM2Nl9BUF9SQVRFX0lORk9fUkFURUlEKHgpCSgoeCkgJiAweDNmKQogCi0jZGVmaW5lIE1XTDhLXzgzNjZfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCTB4ODAKKyNkZWZpbmUgTVdMOEtfODM2Nl9BUF9SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHg4MAogCi1zdGF0aWMgdm9pZCBtd2w4a19yeGRfODM2Nl9pbml0KHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgbmV4dF9kbWFfYWRkcikKK3N0YXRpYyB2b2lkIG13bDhrX3J4ZF84MzY2X2FwX2luaXQodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKQogewotCXN0cnVjdCBtd2w4a19yeGRfODM2NiAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgKnJ4ZCA9IF9yeGQ7CiAKIAlyeGQtPm5leHRfcnhkX3BoeXNfYWRkciA9IGNwdV90b19sZTMyKG5leHRfZG1hX2FkZHIpOwotCXJ4ZC0+cnhfY3RybCA9IE1XTDhLXzgzNjZfUlhfQ1RSTF9PV05FRF9CWV9IT1NUOworCXJ4ZC0+cnhfY3RybCA9IE1XTDhLXzgzNjZfQVBfUlhfQ1RSTF9PV05FRF9CWV9IT1NUOwogfQogCi1zdGF0aWMgdm9pZCBtd2w4a19yeGRfODM2Nl9yZWZpbGwodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgbXdsOGtfcnhkXzgzNjZfYXBfcmVmaWxsKHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgYWRkciwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjYgKnJ4ZCA9IF9yeGQ7CisJc3RydWN0IG13bDhrX3J4ZF84MzY2X2FwICpyeGQgPSBfcnhkOwogCiAJcnhkLT5wa3RfbGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAlyeGQtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKQEAgLTgwNiwxMiArNzM3LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQKLW13bDhrX3J4ZF84MzY2X3Byb2Nlc3Modm9pZCAqX3J4ZCwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKLQkJICAgICAgIF9fbGUxNiAqcW9zKQorbXdsOGtfcnhkXzgzNjZfYXBfcHJvY2Vzcyh2b2lkICpfcnhkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAorCQkJICBfX2xlMTYgKnFvcykKIHsKLQlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjYgKnJ4ZCA9IF9yeGQ7CisJc3RydWN0IG13bDhrX3J4ZF84MzY2X2FwICpyeGQgPSBfcnhkOwogCi0JaWYgKCEocnhkLT5yeF9jdHJsICYgTVdMOEtfODM2Nl9SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQorCWlmICghKHJ4ZC0+cnhfY3RybCAmIE1XTDhLXzgzNjZfQVBfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKSkKIAkJcmV0dXJuIC0xOwogCXJtYigpOwogCkBAIC04MjAsMjMgKzc1MSwyOSBAQAogCXN0YXR1cy0+c2lnbmFsID0gLXJ4ZC0+cnNzaTsKIAlzdGF0dXMtPm5vaXNlID0gLXJ4ZC0+bm9pc2VfZmxvb3I7CiAKLQlpZiAocnhkLT5yYXRlICYgTVdMOEtfODM2Nl9SQVRFX0lORk9fTUNTX0ZPUk1BVCkgeworCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19NQ1NfRk9STUFUKSB7CiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOwotCQlpZiAocnhkLT5yYXRlICYgTVdMOEtfODM2Nl9SQVRFX0lORk9fNDBNSFopCisJCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X0FQX1JBVEVfSU5GT180ME1IWikKIAkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOwotCQlzdGF0dXMtPnJhdGVfaWR4ID0gTVdMOEtfODM2Nl9SQVRFX0lORk9fUkFURUlEKHJ4ZC0+cmF0ZSk7CisJCXN0YXR1cy0+cmF0ZV9pZHggPSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19SQVRFSUQocnhkLT5yYXRlKTsKIAl9IGVsc2UgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtd2w4a19yYXRlcyk7IGkrKykgewotCQkJaWYgKG13bDhrX3JhdGVzW2ldLmh3X3ZhbHVlID09IHJ4ZC0+cmF0ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtd2w4a19yYXRlc18yNCk7IGkrKykgeworCQkJaWYgKG13bDhrX3JhdGVzXzI0W2ldLmh3X3ZhbHVlID09IHJ4ZC0+cmF0ZSkgewogCQkJCXN0YXR1cy0+cmF0ZV9pZHggPSBpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQogCi0Jc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlpZiAocnhkLT5jaGFubmVsID4gMTQpIHsKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkpCisJCQlzdGF0dXMtPnJhdGVfaWR4IC09IDU7CisJfSBlbHNlIHsKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwl9CiAJc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHJ4ZC0+Y2hhbm5lbCk7CiAKIAkqcW9zID0gcnhkLT5xb3NfY29udHJvbDsKQEAgLTg0NCwxNyArNzgxLDE3IEBACiAJcmV0dXJuIGxlMTZfdG9fY3B1KHJ4ZC0+cGt0X2xlbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnhkX29wcyByeGRfODM2Nl9vcHMgPSB7Ci0JLnJ4ZF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBtd2w4a19yeGRfODM2NiksCi0JLnJ4ZF9pbml0CT0gbXdsOGtfcnhkXzgzNjZfaW5pdCwKLQkucnhkX3JlZmlsbAk9IG13bDhrX3J4ZF84MzY2X3JlZmlsbCwKLQkucnhkX3Byb2Nlc3MJPSBtd2w4a19yeGRfODM2Nl9wcm9jZXNzLAorc3RhdGljIHN0cnVjdCByeGRfb3BzIHJ4ZF84MzY2X2FwX29wcyA9IHsKKwkucnhkX3NpemUJPSBzaXplb2Yoc3RydWN0IG13bDhrX3J4ZF84MzY2X2FwKSwKKwkucnhkX2luaXQJPSBtd2w4a19yeGRfODM2Nl9hcF9pbml0LAorCS5yeGRfcmVmaWxsCT0gbXdsOGtfcnhkXzgzNjZfYXBfcmVmaWxsLAorCS5yeGRfcHJvY2Vzcwk9IG13bDhrX3J4ZF84MzY2X2FwX3Byb2Nlc3MsCiB9OwogCiAvKgotICogUGFja2V0IHJlY2VwdGlvbiBmb3IgODh3ODY4Ny4KKyAqIFBhY2tldCByZWNlcHRpb24gZm9yIFNUQSBmaXJtd2FyZS4KICAqLwotc3RydWN0IG13bDhrX3J4ZF84Njg3IHsKK3N0cnVjdCBtd2w4a19yeGRfc3RhIHsKIAlfX2xlMTYgcGt0X2xlbjsKIAlfX3U4IGxpbmtfcXVhbGl0eTsKIAlfX3U4IG5vaXNlX2xldmVsOwpAQCAtODcxLDI2ICs4MDgsMjYgQEAKIAlfX3U4IHBhZDJbMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPX1NIT1JUUFJFCQkweDgwMDAKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fQU5UU0VMRUNUKHgpCSgoKHgpID4+IDExKSAmIDB4MykKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fUkFURUlEKHgpCQkoKCh4KSA+PiAzKSAmIDB4M2YpCi0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPXzQwTUhaCQkweDAwMDQKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fU0hPUlRHSQkJMHgwMDAyCi0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPX01DU19GT1JNQVQJCTB4MDAwMQorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX1NIT1JUUFJFCQkweDgwMDAKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT19BTlRTRUxFQ1QoeCkJKCgoeCkgPj4gMTEpICYgMHgzKQorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX1JBVEVJRCh4KQkJKCgoeCkgPj4gMykgJiAweDNmKQorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPXzQwTUhaCQkweDAwMDQKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT19TSE9SVEdJCQkweDAwMDIKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT19NQ1NfRk9STUFUCQkweDAwMDEKIAotI2RlZmluZSBNV0w4S184Njg3X1JYX0NUUkxfT1dORURfQllfSE9TVAkweDAyCisjZGVmaW5lIE1XTDhLX1NUQV9SWF9DVFJMX09XTkVEX0JZX0hPU1QJCTB4MDIKIAotc3RhdGljIHZvaWQgbXdsOGtfcnhkXzg2ODdfaW5pdCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IG5leHRfZG1hX2FkZHIpCitzdGF0aWMgdm9pZCBtd2w4a19yeGRfc3RhX2luaXQodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKQogewotCXN0cnVjdCBtd2w4a19yeGRfODY4NyAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkX3N0YSAqcnhkID0gX3J4ZDsKIAogCXJ4ZC0+bmV4dF9yeGRfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIobmV4dF9kbWFfYWRkcik7Ci0JcnhkLT5yeF9jdHJsID0gTVdMOEtfODY4N19SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CisJcnhkLT5yeF9jdHJsID0gTVdMOEtfU1RBX1JYX0NUUkxfT1dORURfQllfSE9TVDsKIH0KIAotc3RhdGljIHZvaWQgbXdsOGtfcnhkXzg2ODdfcmVmaWxsKHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgYWRkciwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG13bDhrX3J4ZF9zdGFfcmVmaWxsKHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgYWRkciwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbXdsOGtfcnhkXzg2ODcgKnJ4ZCA9IF9yeGQ7CisJc3RydWN0IG13bDhrX3J4ZF9zdGEgKnJ4ZCA9IF9yeGQ7CiAKIAlyeGQtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwogCXJ4ZC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwpAQCAtODk5LDEzICs4MzYsMTMgQEAKIH0KIAogc3RhdGljIGludAotbXdsOGtfcnhkXzg2ODdfcHJvY2Vzcyh2b2lkICpfcnhkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAorbXdsOGtfcnhkX3N0YV9wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCSAgICAgICBfX2xlMTYgKnFvcykKIHsKLQlzdHJ1Y3QgbXdsOGtfcnhkXzg2ODcgKnJ4ZCA9IF9yeGQ7CisJc3RydWN0IG13bDhrX3J4ZF9zdGEgKnJ4ZCA9IF9yeGQ7CiAJdTE2IHJhdGVfaW5mbzsKIAotCWlmICghKHJ4ZC0+cnhfY3RybCAmIE1XTDhLXzg2ODdfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKSkKKwlpZiAoIShyeGQtPnJ4X2N0cmwgJiBNV0w4S19TVEFfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKSkKIAkJcmV0dXJuIC0xOwogCXJtYigpOwogCkBAIC05MTUsMTkgKzg1MiwyNSBAQAogCiAJc3RhdHVzLT5zaWduYWwgPSAtcnhkLT5yc3NpOwogCXN0YXR1cy0+bm9pc2UgPSAtcnhkLT5ub2lzZV9sZXZlbDsKLQlzdGF0dXMtPmFudGVubmEgPSBNV0w4S184Njg3X1JBVEVfSU5GT19BTlRTRUxFQ1QocmF0ZV9pbmZvKTsKLQlzdGF0dXMtPnJhdGVfaWR4ID0gTVdMOEtfODY4N19SQVRFX0lORk9fUkFURUlEKHJhdGVfaW5mbyk7CisJc3RhdHVzLT5hbnRlbm5hID0gTVdMOEtfU1RBX1JBVEVfSU5GT19BTlRTRUxFQ1QocmF0ZV9pbmZvKTsKKwlzdGF0dXMtPnJhdGVfaWR4ID0gTVdMOEtfU1RBX1JBVEVfSU5GT19SQVRFSUQocmF0ZV9pbmZvKTsKIAotCWlmIChyYXRlX2luZm8gJiBNV0w4S184Njg3X1JBVEVfSU5GT19TSE9SVFBSRSkKKwlpZiAocmF0ZV9pbmZvICYgTVdMOEtfU1RBX1JBVEVfSU5GT19TSE9SVFBSRSkKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7Ci0JaWYgKHJhdGVfaW5mbyAmIE1XTDhLXzg2ODdfUkFURV9JTkZPXzQwTUhaKQorCWlmIChyYXRlX2luZm8gJiBNV0w4S19TVEFfUkFURV9JTkZPXzQwTUhaKQogCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR180ME1IWjsKLQlpZiAocmF0ZV9pbmZvICYgTVdMOEtfODY4N19SQVRFX0lORk9fU0hPUlRHSSkKKwlpZiAocmF0ZV9pbmZvICYgTVdMOEtfU1RBX1JBVEVfSU5GT19TSE9SVEdJKQogCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVF9HSTsKLQlpZiAocmF0ZV9pbmZvICYgTVdMOEtfODY4N19SQVRFX0lORk9fTUNTX0ZPUk1BVCkKKwlpZiAocmF0ZV9pbmZvICYgTVdMOEtfU1RBX1JBVEVfSU5GT19NQ1NfRk9STUFUKQogCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19IVDsKIAotCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJaWYgKHJ4ZC0+Y2hhbm5lbCA+IDE0KSB7CisJCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCWlmICghKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpKQorCQkJc3RhdHVzLT5yYXRlX2lkeCAtPSA1OworCX0gZWxzZSB7CisJCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJfQogCXN0YXR1cy0+ZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShyeGQtPmNoYW5uZWwpOwogCiAJKnFvcyA9IHJ4ZC0+cW9zX2NvbnRyb2w7CkBAIC05MzUsMTEgKzg3OCwxMSBAQAogCXJldHVybiBsZTE2X3RvX2NwdShyeGQtPnBrdF9sZW4pOwogfQogCi1zdGF0aWMgc3RydWN0IHJ4ZF9vcHMgcnhkXzg2ODdfb3BzID0gewotCS5yeGRfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhkXzg2ODcpLAotCS5yeGRfaW5pdAk9IG13bDhrX3J4ZF84Njg3X2luaXQsCi0JLnJ4ZF9yZWZpbGwJPSBtd2w4a19yeGRfODY4N19yZWZpbGwsCi0JLnJ4ZF9wcm9jZXNzCT0gbXdsOGtfcnhkXzg2ODdfcHJvY2VzcywKK3N0YXRpYyBzdHJ1Y3QgcnhkX29wcyByeGRfc3RhX29wcyA9IHsKKwkucnhkX3NpemUJPSBzaXplb2Yoc3RydWN0IG13bDhrX3J4ZF9zdGEpLAorCS5yeGRfaW5pdAk9IG13bDhrX3J4ZF9zdGFfaW5pdCwKKwkucnhkX3JlZmlsbAk9IG13bDhrX3J4ZF9zdGFfcmVmaWxsLAorCS5yeGRfcHJvY2Vzcwk9IG13bDhrX3J4ZF9zdGFfcHJvY2VzcywKIH07CiAKIApAQCAtMTE1MywxNiArMTA5NiwxOCBAQAogICogUGFja2V0IHRyYW5zbWlzc2lvbi4KICAqLwogCi0vKiBUcmFuc21pdCBwYWNrZXQgQUNLIHBvbGljeSAqLwotI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwJCTAKLSNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0sJCTMKLQogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LCQkJMHgwMDAwMDAwMQogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZCQkweDAwMDAwMDAyCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWQkJMHgwMDAwMDAwNAogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWAkJMHgwMDAwMDAwOAogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVECQkweDgwMDAwMDAwCiAKKyNkZWZpbmUgTVdMOEtfUU9TX1FMRU5fVU5TUEVDCQkJMHhmZjAwCisjZGVmaW5lIE1XTDhLX1FPU19BQ0tfUE9MSUNZX01BU0sJCTB4MDA2MAorI2RlZmluZSBNV0w4S19RT1NfQUNLX1BPTElDWV9OT1JNQUwJCTB4MDAwMAorI2RlZmluZSBNV0w4S19RT1NfQUNLX1BPTElDWV9CTE9DS0FDSwkJMHgwMDYwCisjZGVmaW5lIE1XTDhLX1FPU19FT1NQCQkJCTB4MDAxMAorCiBzdHJ1Y3QgbXdsOGtfdHhfZGVzYyB7CiAJX19sZTMyIHN0YXR1czsKIAlfX3U4IGRhdGFfcmF0ZTsKQEAgLTExODcsOCArMTEzMiw3IEBACiAJaW50IHNpemU7CiAJaW50IGk7CiAKLQltZW1zZXQoJnR4cS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7Ci0JdHhxLT5zdGF0cy5saW1pdCA9IE1XTDhLX1RYX0RFU0NTOworCXR4cS0+bGVuID0gMDsKIAl0eHEtPmhlYWQgPSAwOwogCXR4cS0+dGFpbCA9IDA7CiAKQEAgLTEyNjQsNyArMTIwOCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHR4cVslZF0gbGVuPSVkIGhlYWQ9JWQgdGFpbD0lZCAiCiAJCSAgICAgICAiZndfb3duZWQ9JWQgZHJ2X293bmVkPSVkIHVudXNlZD0lZFxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgaSwKLQkJICAgICAgIHR4cS0+c3RhdHMubGVuLCB0eHEtPmhlYWQsIHR4cS0+dGFpbCwKKwkJICAgICAgIHR4cS0+bGVuLCB0eHEtPmhlYWQsIHR4cS0+dGFpbCwKIAkJICAgICAgIGZ3X293bmVkLCBkcnZfb3duZWQsIHVudXNlZCk7CiAJfQogfQpAQCAtMTI3Miw3ICsxMjE2LDcgQEAKIC8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByaXYtPmZ3X211dGV4IGhlbGQgYW5kIHR4IHF1ZXVlcyBzdG9wcGVkLgogICovCi0jZGVmaW5lIE1XTDhLX1RYX1dBSVRfVElNRU9VVF9NUwkxMDAwCisjZGVmaW5lIE1XTDhLX1RYX1dBSVRfVElNRU9VVF9NUwk1MDAwCiAKIHN0YXRpYyBpbnQgbXdsOGtfdHhfd2FpdF9lbXB0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTEzMTYsOCArMTI2MCw4IEBACiAJCX0KIAogCQlpZiAocHJpdi0+cGVuZGluZ190eF9wa3RzIDwgb2xkY291bnQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgdHggIgotCQkJICAgICAgICJyaW5ncyB0byBkcmFpbiAoJWQgLT4gJWQgcGt0cyksIHJldHJ5aW5nXG4iLAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogd2FpdGluZyBmb3IgdHggcmluZ3MgIgorCQkJICAgICAgICJ0byBkcmFpbiAoJWQgLT4gJWQgcGt0cylcbiIsCiAJCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBvbGRjb3VudCwKIAkJCSAgICAgICBwcml2LT5wZW5kaW5nX3R4X3BrdHMpOwogCQkJcmV0cnkgPSAxOwpAQCAtMTM0MiwxMyArMTI4NiwxNSBAQAogCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfAkJXAogCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWSkpCiAKLXN0YXRpYyB2b2lkIG13bDhrX3R4cV9yZWNsYWltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBmb3JjZSkKK3N0YXRpYyBpbnQKK213bDhrX3R4cV9yZWNsYWltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCwgaW50IGZvcmNlKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKLQlpbnQgd2FrZSA9IDA7CisJaW50IHByb2Nlc3NlZDsKIAotCXdoaWxlICh0eHEtPnN0YXRzLmxlbiA+IDApIHsKKwlwcm9jZXNzZWQgPSAwOworCXdoaWxlICh0eHEtPmxlbiA+IDAgJiYgbGltaXQtLSkgewogCQlpbnQgdHg7CiAJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOwogCQl1bnNpZ25lZCBsb25nIGFkZHI7CkBAIC0xMzcwLDggKzEzMTYsOCBAQAogCQl9CiAKIAkJdHhxLT5oZWFkID0gKHR4ICsgMSkgJSBNV0w4S19UWF9ERVNDUzsKLQkJQlVHX09OKHR4cS0+c3RhdHMubGVuID09IDApOwotCQl0eHEtPnN0YXRzLmxlbi0tOworCQlCVUdfT04odHhxLT5sZW4gPT0gMCk7CisJCXR4cS0+bGVuLS07CiAJCXByaXYtPnBlbmRpbmdfdHhfcGt0cy0tOwogCiAJCWFkZHIgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5wa3RfcGh5c19hZGRyKTsKQEAgLTEzOTUsMTEgKzEzNDEsMTMgQEAKIAogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CiAKLQkJd2FrZSA9IDE7CisJCXByb2Nlc3NlZCsrOwogCX0KIAotCWlmICh3YWtlICYmIHByaXYtPnJhZGlvX29uICYmICFtdXRleF9pc19sb2NrZWQoJnByaXYtPmZ3X211dGV4KSkKKwlpZiAocHJvY2Vzc2VkICYmIHByaXYtPnJhZGlvX29uICYmICFtdXRleF9pc19sb2NrZWQoJnByaXYtPmZ3X211dGV4KSkKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIGluZGV4KTsKKworCXJldHVybiBwcm9jZXNzZWQ7CiB9CiAKIC8qIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHRyYW5zbWl0IGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCkBAIC0xNDA4LDcgKzEzNTYsNyBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKIAotCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpbmRleCwgMSk7CisJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCBJTlRfTUFYLCAxKTsKIAogCWtmcmVlKHR4cS0+c2tiKTsKIAl0eHEtPnNrYiA9IE5VTEw7CkBAIC0xNDQ2LDExICsxMzk0LDkgQEAKIAltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOwogCiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7Ci0JCXUxNiBzZXFubyA9IG13bDhrX3ZpZi0+c2Vxbm87Ci0KIAkJd2gtPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwotCQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2Vxbm8gPDwgNCk7Ci0JCW13bDhrX3ZpZi0+c2Vxbm8gPSBzZXFubysrICUgNDA5NjsKKwkJd2gtPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KG13bDhrX3ZpZi0+c2Vxbm8pOworCQltd2w4a192aWYtPnNlcW5vICs9IDB4MTA7CiAJfQogCiAJLyogU2V0dXAgZmlybXdhcmUgY29udHJvbCBiaXQgZmllbGRzIGZvciBlYWNoIGZyYW1lIHR5cGUuICAqLwpAQCAtMTQ1OSwyNCArMTQwNSwxNyBAQAogCWlmIChpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVfY29udHJvbCkgfHwKIAkgICAgaWVlZTgwMjExX2lzX2N0bCh3aC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhkYXRhcmF0ZSA9IDA7Ci0JCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfZW9zcChxb3MpOwotCQkvKiBTZXQgUXVldWUgc2l6ZSB0byB1bnNwZWNpZmllZCAqLwotCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X3FsZW4ocW9zLCAweGZmKTsKKwkJcW9zIHw9IE1XTDhLX1FPU19RTEVOX1VOU1BFQyB8IE1XTDhLX1FPU19FT1NQOwogCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXR4ZGF0YXJhdGUgPSAxOwogCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKSkKIAkJCXR4c3RhdHVzIHw9IE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYOwogCi0JCS8qIFNlbmQgcGt0IGluIGFuIGFnZ3JlZ2F0ZSBpZiBBTVBEVSBmcmFtZS4gICovCisJCXFvcyAmPSB+TVdMOEtfUU9TX0FDS19QT0xJQ1lfTUFTSzsKIAkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKLQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKLQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSyk7CisJCQlxb3MgfD0gTVdMOEtfUU9TX0FDS19QT0xJQ1lfQkxPQ0tBQ0s7CiAJCWVsc2UKLQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKLQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOwotCi0JCWlmIChxb3MgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpCi0JCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Ftc2R1KHFvcyk7CisJCQlxb3MgfD0gTVdMOEtfUU9TX0FDS19QT0xJQ1lfTk9STUFMOwogCX0KIAogCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKQEAgLTE1MDMsMTIgKzE0NDIsMTQgQEAKIAl0eC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGRtYSk7CiAJdHgtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CiAJdHgtPnJhdGVfaW5mbyA9IDA7Ci0JdHgtPnBlZXJfaWQgPSBtd2w4a192aWYtPnBlZXJfaWQ7CisJaWYgKCFwcml2LT5hcF9mdyAmJiB0eF9pbmZvLT5jb250cm9sLnN0YSAhPSBOVUxMKQorCQl0eC0+cGVlcl9pZCA9IE1XTDhLX1NUQSh0eF9pbmZvLT5jb250cm9sLnN0YSktPnBlZXJfaWQ7CisJZWxzZQorCQl0eC0+cGVlcl9pZCA9IDA7CiAJd21iKCk7CiAJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQgfCB0eHN0YXR1cyk7CiAKLQl0eHEtPnN0YXRzLmNvdW50Kys7Ci0JdHhxLT5zdGF0cy5sZW4rKzsKKwl0eHEtPmxlbisrOwogCXByaXYtPnBlbmRpbmdfdHhfcGt0cysrOwogCiAJdHhxLT50YWlsKys7CkBAIC0xNjU2LDYgKzE1OTcsNTYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgbXdsOGtfcG9zdF9wZXJ2aWZfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSBzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqY21kKQoreworCWlmICh2aWYgIT0gTlVMTCkKKwkJY21kLT5tYWNpZCA9IE1XTDhLX1ZJRih2aWYpLT5tYWNpZDsKKwlyZXR1cm4gbXdsOGtfcG9zdF9jbWQoaHcsIGNtZCk7Cit9CisKKy8qCisgKiBTZXR1cCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFNUQSBhbmQgQVAgZmlybXdhcmUgaW1hZ2VzLgorICovCitzdGF0aWMgdm9pZCBtd2w4a19zZXR1cF8yZ2h6X2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+Y2hhbm5lbHNfMjQpICE9IHNpemVvZihtd2w4a19jaGFubmVsc18yNCkpOworCW1lbWNweShwcml2LT5jaGFubmVsc18yNCwgbXdsOGtfY2hhbm5lbHNfMjQsIHNpemVvZihtd2w4a19jaGFubmVsc18yNCkpOworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlc18yNCkgIT0gc2l6ZW9mKG13bDhrX3JhdGVzXzI0KSk7CisJbWVtY3B5KHByaXYtPnJhdGVzXzI0LCBtd2w4a19yYXRlc18yNCwgc2l6ZW9mKG13bDhrX3JhdGVzXzI0KSk7CisKKwlwcml2LT5iYW5kXzI0LmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCXByaXYtPmJhbmRfMjQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsc18yNDsKKwlwcml2LT5iYW5kXzI0Lm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bDhrX2NoYW5uZWxzXzI0KTsKKwlwcml2LT5iYW5kXzI0LmJpdHJhdGVzID0gcHJpdi0+cmF0ZXNfMjQ7CisJcHJpdi0+YmFuZF8yNC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2w4a19yYXRlc18yNCk7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmRfMjQ7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3NldHVwXzVnaHpfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVsc181MCkgIT0gc2l6ZW9mKG13bDhrX2NoYW5uZWxzXzUwKSk7CisJbWVtY3B5KHByaXYtPmNoYW5uZWxzXzUwLCBtd2w4a19jaGFubmVsc181MCwgc2l6ZW9mKG13bDhrX2NoYW5uZWxzXzUwKSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzXzUwKSAhPSBzaXplb2YobXdsOGtfcmF0ZXNfNTApKTsKKwltZW1jcHkocHJpdi0+cmF0ZXNfNTAsIG13bDhrX3JhdGVzXzUwLCBzaXplb2YobXdsOGtfcmF0ZXNfNTApKTsKKworCXByaXYtPmJhbmRfNTAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJcHJpdi0+YmFuZF81MC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzXzUwOworCXByaXYtPmJhbmRfNTAubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdsOGtfY2hhbm5lbHNfNTApOworCXByaXYtPmJhbmRfNTAuYml0cmF0ZXMgPSBwcml2LT5yYXRlc181MDsKKwlwcml2LT5iYW5kXzUwLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bDhrX3JhdGVzXzUwKTsKKworCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmcHJpdi0+YmFuZF81MDsKK30KKwogLyoKICAqIENNRF9HRVRfSFdfU1BFQyAoU1RBIHZlcnNpb24pLgogICovCkBAIC0xNjc4LDYgKzE2NjksODkgQEAKIAlfX2xlMzIgdG90YWxfcnhkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorI2RlZmluZSBNV0w4S19DQVBfTUFYX0FNU0RVCQkweDIwMDAwMDAwCisjZGVmaW5lIE1XTDhLX0NBUF9HUkVFTkZJRUxECQkweDA4MDAwMDAwCisjZGVmaW5lIE1XTDhLX0NBUF9BTVBEVQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1JYX1NUQkMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1RYX1NUQkMJCTB4MDA4MDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1NIT1JUR0lfNDBNSFoJCTB4MDA0MDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1NIT1JUR0lfMjBNSFoJCTB4MDAyMDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1JYX0FOVEVOTkFfTUFTSwkweDAwMGUwMDAwCisjZGVmaW5lIE1XTDhLX0NBUF9UWF9BTlRFTk5BX01BU0sJMHgwMDAxYzAwMAorI2RlZmluZSBNV0w4S19DQVBfREVMQVlfQkEJCTB4MDAwMDMwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX01JTU8JCQkweDAwMDAwMjAwCisjZGVmaW5lIE1XTDhLX0NBUF80ME1IWgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX0JBTkRfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBNV0w4S19DQVBfNUdIWgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTVdMOEtfQ0FQXzJHSFo0CQkJMHgwMDAwMDAwMQorCitzdGF0aWMgdm9pZAorbXdsOGtfc2V0X2h0X2NhcHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZCwgdTMyIGNhcCkKK3sKKwlpbnQgcnhfc3RyZWFtczsKKwlpbnQgdHhfc3RyZWFtczsKKworCWJhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQgPSAxOworCisJaWYgKGNhcCAmIE1XTDhLX0NBUF9NQVhfQU1TRFUpCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7CisJaWYgKGNhcCAmIE1XTDhLX0NBUF9HUkVFTkZJRUxEKQorCQliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRDsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX0FNUERVKSB7CisJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT047CisJCWJhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsKKwkJYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZX05PTkU7CisJfQorCWlmIChjYXAgJiBNV0w4S19DQVBfUlhfU1RCQykKKwkJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkM7CisJaWYgKGNhcCAmIE1XTDhLX0NBUF9UWF9TVEJDKQorCQliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfVFhfU1RCQzsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX1NIT1JUR0lfNDBNSFopCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJaWYgKGNhcCAmIE1XTDhLX0NBUF9TSE9SVEdJXzIwTUhaKQorCQliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOworCWlmIChjYXAgJiBNV0w4S19DQVBfREVMQVlfQkEpCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQTsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQXzQwTUhaKQorCQliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCisJcnhfc3RyZWFtcyA9IGh3ZWlnaHQzMihjYXAgJiBNV0w4S19DQVBfUlhfQU5URU5OQV9NQVNLKTsKKwl0eF9zdHJlYW1zID0gaHdlaWdodDMyKGNhcCAmIE1XTDhLX0NBUF9UWF9BTlRFTk5BX01BU0spOworCisJYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwlpZiAocnhfc3RyZWFtcyA+PSAyKQorCQliYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPSAweGZmOworCWlmIChyeF9zdHJlYW1zID49IDMpCisJCWJhbmQtPmh0X2NhcC5tY3MucnhfbWFza1syXSA9IDB4ZmY7CisJYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzRdID0gMHgwMTsKKwliYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCWlmIChyeF9zdHJlYW1zICE9IHR4X3N0cmVhbXMpIHsKKwkJYmFuZC0+aHRfY2FwLm1jcy50eF9wYXJhbXMgfD0gSUVFRTgwMjExX0hUX01DU19UWF9SWF9ESUZGOworCQliYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyB8PSAodHhfc3RyZWFtcyAtIDEpIDw8CisJCQkJSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCittd2w4a19zZXRfY2FwcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNhcHMpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmICgoY2FwcyAmIE1XTDhLX0NBUF8yR0haNCkgfHwgIShjYXBzICYgTVdMOEtfQ0FQX0JBTkRfTUFTSykpIHsKKwkJbXdsOGtfc2V0dXBfMmdoel9iYW5kKGh3KTsKKwkJaWYgKGNhcHMgJiBNV0w4S19DQVBfTUlNTykKKwkJCW13bDhrX3NldF9odF9jYXBzKGh3LCAmcHJpdi0+YmFuZF8yNCwgY2Fwcyk7CisJfQorCisJaWYgKGNhcHMgJiBNV0w4S19DQVBfNUdIWikgeworCQltd2w4a19zZXR1cF81Z2h6X2JhbmQoaHcpOworCQlpZiAoY2FwcyAmIE1XTDhLX0NBUF9NSU1PKQorCQkJbXdsOGtfc2V0X2h0X2NhcHMoaHcsICZwcml2LT5iYW5kXzUwLCBjYXBzKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwpAQCAtMTcwOCw2ICsxNzgyLDkgQEAKIAkJcHJpdi0+bnVtX21jYWRkcnMgPSBsZTE2X3RvX2NwdShjbWQtPm51bV9tY2FkZHJzKTsKIAkJcHJpdi0+ZndfcmV2ID0gbGUzMl90b19jcHUoY21kLT5md19yZXYpOwogCQlwcml2LT5od19yZXYgPSBjbWQtPmh3X3JldjsKKwkJbXdsOGtfc2V0X2NhcHMoaHcsIGxlMzJfdG9fY3B1KGNtZC0+Y2FwcykpOworCQlwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkID0gMHgwMDAwMDAwMDsKKwkJcHJpdi0+c3RhX21hY2lkc19zdXBwb3J0ZWQgPSAweDAwMDAwMDAxOwogCX0KIAogCWtmcmVlKGNtZCk7CkBAIC0xNzYxLDYgKzE4MzgsOSBAQAogCQlwcml2LT5udW1fbWNhZGRycyA9IGxlMTZfdG9fY3B1KGNtZC0+bnVtX21jYWRkcnMpOwogCQlwcml2LT5md19yZXYgPSBsZTMyX3RvX2NwdShjbWQtPmZ3X3Jldik7CiAJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OworCQltd2w4a19zZXR1cF8yZ2h6X2JhbmQoaHcpOworCQlwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkID0gMHgwMDAwMDBmZjsKKwkJcHJpdi0+c3RhX21hY2lkc19zdXBwb3J0ZWQgPSAweDAwMDAwMDAwOwogCiAJCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+d2NiYmFzZTApICYgMHhmZmZmOwogCQlpb3dyaXRlMzIoY3B1X3RvX2xlMzIocHJpdi0+dHhxWzBdLnR4ZF9kbWEpLCBwcml2LT5zcmFtICsgb2ZmKTsKQEAgLTE4MDYsNyArMTg4Niw5IEBACiAJX19sZTMyIHRvdGFsX3J4ZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVAkweDAwMDAwMDgwCisjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVF9ERUNSX01HTVQJCTB4MDAwMDAwODAKKyNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9QUk9CRVJFU1AJMHgwMDAwMDAyMAorI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX0JFQUNPTgkJMHgwMDAwMDAxMAogCiBzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfaHdfc3BlYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTE4MjcsNyArMTkwOSw5IEBACiAJY21kLT5udW1fdHhfcXVldWVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfUVVFVUVTKTsKIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCiAJCWNtZC0+dHhfcXVldWVfcHRyc1tpXSA9IGNwdV90b19sZTMyKHByaXYtPnR4cVtpXS50eGRfZG1hKTsKLQljbWQtPmZsYWdzID0gY3B1X3RvX2xlMzIoTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVCk7CisJY21kLT5mbGFncyA9IGNwdV90b19sZTMyKE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVF9ERUNSX01HTVQgfAorCQkJCSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX1BST0JFUkVTUCB8CisJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fQkVBQ09OKTsKIAljbWQtPm51bV90eF9kZXNjX3Blcl9xdWV1ZSA9IGNwdV90b19sZTMyKE1XTDhLX1RYX0RFU0NTKTsKIAljbWQtPnRvdGFsX3J4ZCA9IGNwdV90b19sZTMyKE1XTDhLX1JYX0RFU0NTKTsKIApAQCAtMTg5Nyw5ICsxOTgxLDkgQEAKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfR0VUX1NUQVQuCisgKiBDTURfR0VUX1NUQVQuCiAgKi8KLXN0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0IHsKK3N0cnVjdCBtd2w4a19jbWRfZ2V0X3N0YXQgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMzIgc3RhdHNbNjRdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKQEAgLTE5MDksMTAgKzE5OTMsMTAgQEAKICNkZWZpbmUgTVdMOEtfU1RBVF9GQ1NfRVJST1IJMjQKICNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfU1VDQ0VTUwkxMQogCi1zdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQorc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgKmNtZDsKKwlzdHJ1Y3QgbXdsOGtfY21kX2dldF9zdGF0ICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMTkzOSw5ICsyMDIzLDkgQEAKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfUkFESU9fQ09OVFJPTC4KKyAqIENNRF9SQURJT19DT05UUk9MLgogICovCi1zdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsKK3N0cnVjdCBtd2w4a19jbWRfcmFkaW9fY29udHJvbCB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IGNvbnRyb2w7CkBAIC0xOTQ5LDEwICsyMDMzLDEwIEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50Ci1td2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQorbXdsOGtfY21kX3JhZGlvX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqY21kOworCXN0cnVjdCBtd2w4a19jbWRfcmFkaW9fY29udHJvbCAqY21kOwogCWludCByYzsKIAogCWlmIChlbmFibGUgPT0gcHJpdi0+cmFkaW9fb24gJiYgIWZvcmNlKQpAQCAtMTk3NywzNiArMjA2MSwzMiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgaW50IG13bDhrX2NtZF9yYWRpb19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXJldHVybiBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIDAsIDApOworCXJldHVybiBtd2w4a19jbWRfcmFkaW9fY29udHJvbChodywgMCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgaW50IG13bDhrX2NtZF9yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMCk7CisJcmV0dXJuIG13bDhrX2NtZF9yYWRpb19jb250cm9sKGh3LCAxLCAwKTsKIH0KIAogc3RhdGljIGludAogbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3ByZWFtYmxlKQogewotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OwotCi0JaWYgKGh3ID09IE5VTEwgfHwgaHctPnByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlOwogCi0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMSk7CisJcmV0dXJuIG13bDhrX2NtZF9yYWRpb19jb250cm9sKGh3LCAxLCAxKTsKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfUkZfVFhfUE9XRVIuCisgKiBDTURfUkZfVFhfUE9XRVIuCiAgKi8KICNkZWZpbmUgTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUwJOAogCi1zdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciB7CitzdHJ1Y3QgbXdsOGtfY21kX3JmX3R4X3Bvd2VyIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKQEAgLTIwMTUsOSArMjA5NSw5IEBACiAJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQorc3RhdGljIGludCBtd2w4a19jbWRfcmZfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBkQm0pCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIgKmNtZDsKKwlzdHJ1Y3QgbXdsOGtfY21kX3JmX3R4X3Bvd2VyICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMjA2OSw2ICsyMTQ5LDM2IEBACiB9CiAKIC8qCisgKiBDTURfU0VUX0JFQUNPTi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfYmVhY29uIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGJlYWNvbl9sZW47CisJX191OCBiZWFjb25bMF07Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpiZWFjb24sIGludCBsZW4pCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfYmVhY29uICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCkgKyBsZW4sIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9CRUFDT04pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSArIGxlbik7CisJY21kLT5iZWFjb25fbGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwltZW1jcHkoY21kLT5iZWFjb24sIGJlYWNvbiwgbGVuKTsKKworCXJjID0gbXdsOGtfcG9zdF9wZXJ2aWZfY21kKGh3LCB2aWYsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKICAqIENNRF9TRVRfUFJFX1NDQU4uCiAgKi8KIHN0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuIHsKQEAgLTIxMDMsNyArMjIxMyw3IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50Ci1td2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCAqbWFjKQorbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IF9fdTggKm1hYykKIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4gKmNtZDsKIAlpbnQgcmM7CkBAIC0yMTM0LDggKzIyNDQsOSBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CiAJc3RydWN0IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbCAqY21kOwogCWludCByYzsKIApAQCAtMjE0NywxMCArMjI1OCwyMDEgQEAKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwogCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CiAJY21kLT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsLT5od192YWx1ZTsKKwogCWlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCWNtZC0+Y2hhbm5lbF9mbGFncyA9IGNwdV90b19sZTMyKDB4MDAwMDAwODEpOwotCWVsc2UKLQkJY21kLT5jaGFubmVsX2ZsYWdzID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisJCWNtZC0+Y2hhbm5lbF9mbGFncyB8PSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKTsKKwllbHNlIGlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCWNtZC0+Y2hhbm5lbF9mbGFncyB8PSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KTsKKworCWlmIChjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX05PX0hUIHx8CisJICAgIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQyMCkKKwkJY21kLT5jaGFubmVsX2ZsYWdzIHw9IGNwdV90b19sZTMyKDB4MDAwMDAwODApOworCWVsc2UgaWYgKGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoMHgwMDAwMDE5MDApOworCWVsc2UgaWYgKGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpCisJCWNtZC0+Y2hhbm5lbF9mbGFncyB8PSBjcHVfdG9fbGUzMigweDAwMDAwMDkwMCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0FJRC4KKyAqLworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVECQkJMHgwMAorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExRwkJCQkweDA3CisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFkJCTB4MDIKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMCQkJMHgwNgorCitzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2CWFpZDsKKworCSAvKiBBUCdzIE1BQyBhZGRyZXNzIChCU1NJRCkgKi8KKwlfX3U4CWJzc2lkW0VUSF9BTEVOXTsKKwlfX2xlMTYJcHJvdGVjdGlvbl9tb2RlOworCV9fdTgJc3VwcF9yYXRlc1sxNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgdm9pZCBsZWdhY3lfcmF0ZV9tYXNrX3RvX2FycmF5KHU4ICpyYXRlcywgdTMyIG1hc2spCit7CisJaW50IGk7CisJaW50IGo7CisKKwkvKgorCSAqIENsZWFyIG5vbnN0YW5kYXJkIHJhdGVzIDQgYW5kIDEzLgorCSAqLworCW1hc2sgJj0gMHgxZmVmOworCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCWlmIChtYXNrICYgKDEgPDwgaSkpCisJCQlyYXRlc1tqKytdID0gbXdsOGtfcmF0ZXNfMjRbaV0uaHdfdmFsdWU7CisJfQorfQorCitzdGF0aWMgaW50Cittd2w4a19jbWRfc2V0X2FpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1MzIgbGVnYWN5X3JhdGVfbWFzaykKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkICpjbWQ7CisJdTE2IHByb3RfbW9kZTsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0FJRCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFpZCA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYWlkKTsKKwltZW1jcHkoY21kLT5ic3NpZCwgdmlmLT5ic3NfY29uZi5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKHZpZi0+YnNzX2NvbmYudXNlX2N0c19wcm90KSB7CisJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOworCX0gZWxzZSB7CisJCXN3aXRjaCAodmlmLT5ic3NfY29uZi5odF9vcGVyYXRpb25fbW9kZSAmCisJCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OKSB7CisJCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl8yME1IWjoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkhUX01JWEVEOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCX0KKwl9CisJY21kLT5wcm90ZWN0aW9uX21vZGUgPSBjcHVfdG9fbGUxNihwcm90X21vZGUpOworCisJbGVnYWN5X3JhdGVfbWFza190b19hcnJheShjbWQtPnN1cHBfcmF0ZXMsIGxlZ2FjeV9yYXRlX21hc2spOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SQVRFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX191OAlsZWdhY3lfcmF0ZXNbMTRdOworCisJLyogQml0bWFwIGZvciBzdXBwb3J0ZWQgTUNTIGNvZGVzLiAgKi8KKwlfX3U4CW1jc19zZXRbMTZdOworCV9fdTgJcmVzZXJ2ZWRbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICB1MzIgbGVnYWN5X3JhdGVfbWFzaywgdTggKm1jc19yYXRlcykKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWxlZ2FjeV9yYXRlX21hc2tfdG9fYXJyYXkoY21kLT5sZWdhY3lfcmF0ZXMsIGxlZ2FjeV9yYXRlX21hc2spOworCW1lbWNweShjbWQtPm1jc19zZXQsIG1jc19yYXRlcywgMTYpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0ZJTkFMSVpFX0pPSU4uCisgKi8KKyNkZWZpbmUgTVdMOEtfRkpfQkVBQ09OX01BWExFTgkxMjgKKworc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KKwlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfZmluYWxpemVfam9pbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZnJhbWUsCisJCQkJICAgaW50IGZyYW1lbGVuLCBpbnQgZHRpbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4gKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnBheWxvYWQgPSBmcmFtZTsKKwlpbnQgcGF5bG9hZF9sZW47CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltID8gZHRpbSA6IDEpOworCisJcGF5bG9hZF9sZW4gPSBmcmFtZWxlbiAtIGllZWU4MDIxMV9oZHJsZW4ocGF5bG9hZC0+ZnJhbWVfY29udHJvbCk7CisJaWYgKHBheWxvYWRfbGVuIDwgMCkKKwkJcGF5bG9hZF9sZW4gPSAwOworCWVsc2UgaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKKwkJcGF5bG9hZF9sZW4gPSBNV0w4S19GSl9CRUFDT05fTUFYTEVOOworCisJbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SVFNfVEhSRVNIT0xELgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgdGhyZXNob2xkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcnRzX3RocmVzaCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JUU19USFJFU0hPTEQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KHJ0c190aHJlc2gpOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwpAQCAtMjE4OCwxOTQgKzI0OTAsNiBAQAogfQogCiAvKgotICogQ01EX01JTU9fQ09ORklHLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTMyIGFjdGlvbjsKLQlfX3U4IHJ4X2FudGVubmFfbWFwOwotCV9fdTggdHhfYW50ZW5uYV9tYXA7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX2NtZF9taW1vX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCByeCwgX191OCB0eCkKLXsKLQlzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01JTU9fQ09ORklHKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKTsKLQljbWQtPnJ4X2FudGVubmFfbWFwID0gcng7Ci0JY21kLT50eF9hbnRlbm5hX21hcCA9IHR4OwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ01EX0VOQUJMRV9TTklGRkVSLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTMyIGFjdGlvbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfZW5hYmxlX3NuaWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMighIWVuYWJsZSk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfU0VUX01BQ19BRERSLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX3NldF9tYWNfYWRkciB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBtYWNfdHlwZTsKLQkJCV9fdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCQl9IG1ic3M7Ci0JCV9fdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCX07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX3NldF9tYWNfYWRkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKm1hYykKLXsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBtd2w4a19jbWRfc2V0X21hY19hZGRyICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9NQUNfQUREUik7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQlpZiAocHJpdi0+YXBfZncpIHsKLQkJY21kLT5tYnNzLm1hY190eXBlID0gMDsKLQkJbWVtY3B5KGNtZC0+bWJzcy5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGNtZC0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwotCX0KLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotCi0vKgotICogQ01EX1NFVF9SQVRFQURBUFRfTU9ERS4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTE2IGFjdGlvbjsKLQlfX2xlMTYgbW9kZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTE2IG1vZGUpCi17Ci0Jc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERSk7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOwotCWNtZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ01EX1NFVF9XTU1fTU9ERS4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9zZXRfd21tIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTE2IGFjdGlvbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfc2V0X3dtbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW0gKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1dNTV9NT0RFKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoISFlbmFibGUpOwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JaWYgKCFyYykKLQkJcHJpdi0+d21tX2VuYWJsZWQgPSBlbmFibGU7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfU0VUX1JUU19USFJFU0hPTEQuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUxNiBhY3Rpb247Ci0JX19sZTE2IHRocmVzaG9sZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICB1MTYgYWN0aW9uLCB1MTYgdGhyZXNob2xkKQotewotCXN0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xEKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKLQljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KHRocmVzaG9sZCk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCiAgKiBDTURfU0VUX0VEQ0FfUEFSQU1TLgogICovCiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyB7CkBAIC0yNDI2LDkgKzI1NDAsOSBAQAogCQkJCSBNV0w4S19TRVRfRURDQV9BSUZTKQogCiBzdGF0aWMgaW50Ci1td2w4a19zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcW51bSwKLQkJX191MTYgY3dfbWluLCBfX3UxNiBjd19tYXgsCi0JCV9fdTggYWlmcywgX191MTYgdHhvcCkKK213bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcW51bSwKKwkJCSAgX191MTYgY3dfbWluLCBfX3UxNiBjd19tYXgsCisJCQkgIF9fdTggYWlmcywgX191MTYgdHhvcCkKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zICpjbWQ7CkBAIC0yNDM4LDEyICsyNTUyLDYgQEAKIAlpZiAoY21kID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyoKLQkgKiBRdWV1ZXMgMCAoQkUpIGFuZCAxIChCSykgYXJlIHN3YXBwZWQgaW4gaGFyZHdhcmUgZm9yCi0JICogdGhpcyBjYWxsLgotCSAqLwotCXFudW0gXj0gIShxbnVtID4+IDEpOwotCiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRURDQV9QQVJBTVMpOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CiAJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19TRVRfRURDQV9BTEwpOwpAQCAtMjQ2NywzOSArMjU3NSw2MCBAQAogfQogCiAvKgotICogQ01EX0ZJTkFMSVpFX0pPSU4uCisgKiBDTURfU0VUX1dNTV9NT0RFLgogICovCi0jZGVmaW5lIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4JMTI4Ci0KLXN0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiB7CitzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW1fbW9kZSB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbDsJLyogTnVtYmVyIG9mIGJlYWNvbiBwZXJpb2RzIHRvIHNsZWVwICovCi0JX191OCBiZWFjb25fZGF0YVtNV0w4S19GSl9CRUFDT05fTUFYTEVOXTsKKwlfX2xlMTYgYWN0aW9uOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGludCBtd2w4a19maW5hbGl6ZV9qb2luKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpmcmFtZSwKLQkJCSAgICAgICBpbnQgZnJhbWVsZW4sIGludCBkdGltKQorc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3dtbV9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4gKmNtZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnBheWxvYWQgPSBmcmFtZTsKLQlpbnQgcGF5bG9hZF9sZW47CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW1fbW9kZSAqY21kOwogCWludCByYzsKIAogCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY21kID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRklOQUxJWkVfSk9JTik7CisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfV01NX01PREUpOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0gPyBkdGltIDogMSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNighIWVuYWJsZSk7CiAKLQlwYXlsb2FkX2xlbiA9IGZyYW1lbGVuIC0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKLQlpZiAocGF5bG9hZF9sZW4gPCAwKQotCQlwYXlsb2FkX2xlbiA9IDA7Ci0JZWxzZSBpZiAocGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOKQotCQlwYXlsb2FkX2xlbiA9IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU47CisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOwogCi0JbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCWlmICghcmMpCisJCXByaXYtPndtbV9lbmFibGVkID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01JTU9fQ09ORklHLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKKwlfX3U4IHJ4X2FudGVubmFfbWFwOworCV9fdTggdHhfYW50ZW5uYV9tYXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9taW1vX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCByeCwgX191OCB0eCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01JTU9fQ09ORklHKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKTsKKwljbWQtPnJ4X2FudGVubmFfbWFwID0gcng7CisJY21kLT50eF9hbnRlbm5hX21hcCA9IHR4OwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwpAQCAtMjUwOCw5ICsyNjM3LDM4MCBAQAogfQogCiAvKgorICogQ01EX1VTRV9GSVhFRF9SQVRFIChTVEEgdmVyc2lvbikuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfc3RhIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKKwlfX2xlMzIgYWxsb3dfcmF0ZV9kcm9wOworCV9fbGUzMiBudW1fcmF0ZXM7CisJc3RydWN0IHsKKwkJX19sZTMyIGlzX2h0X3JhdGU7CisJCV9fbGUzMiBlbmFibGVfcmV0cnk7CisJCV9fbGUzMiByYXRlOworCQlfX2xlMzIgcmV0cnlfY291bnQ7CisJfSByYXRlX2VudHJ5WzhdOworCV9fbGUzMiByYXRlX3R5cGU7CisJX19sZTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19VU0VfQVVUT19SQVRFCTB4MDAwMgorI2RlZmluZSBNV0w4S19VQ0FTVF9SQVRFCTAKKworc3RhdGljIGludCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfc3RhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfc3RhICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfVVNFX0FVVE9fUkFURSk7CisJY21kLT5yYXRlX3R5cGUgPSBjcHVfdG9fbGUzMihNV0w4S19VQ0FTVF9SQVRFKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VU0VfRklYRURfUkFURSAoQVAgdmVyc2lvbikuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfYXAgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fbGUzMiBhbGxvd19yYXRlX2Ryb3A7CisJX19sZTMyIG51bV9yYXRlczsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeV9hcCB7CisJCV9fbGUzMiBpc19odF9yYXRlOworCQlfX2xlMzIgZW5hYmxlX3JldHJ5OworCQlfX2xlMzIgcmF0ZTsKKwkJX19sZTMyIHJldHJ5X2NvdW50OworCX0gcmF0ZV9lbnRyeVs0XTsKKwl1OCBtdWx0aWNhc3RfcmF0ZTsKKwl1OCBtdWx0aWNhc3RfcmF0ZV90eXBlOworCXU4IG1hbmFnZW1lbnRfcmF0ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQKK213bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IG1jYXN0LCBpbnQgbWdtdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlX2FwICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfVVNFX0FVVE9fUkFURSk7CisJY21kLT5tdWx0aWNhc3RfcmF0ZSA9IG1jYXN0OworCWNtZC0+bWFuYWdlbWVudF9yYXRlID0gbWdtdDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9FTkFCTEVfU05JRkZFUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKCEhZW5hYmxlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfTUFDX0FERFIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X21hY19hZGRyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTE2IG1hY190eXBlOworCQkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07CisJCX0gbWJzczsKKwkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07CisJfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfTUFDX1RZUEVfUFJJTUFSWV9DTElFTlQJCTAKKyNkZWZpbmUgTVdMOEtfTUFDX1RZUEVfU0VDT05EQVJZX0NMSUVOVAkJMQorI2RlZmluZSBNV0w4S19NQUNfVFlQRV9QUklNQVJZX0FQCQkyCisjZGVmaW5lIE1XTDhLX01BQ19UWVBFX1NFQ09OREFSWV9BUAkJMworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqbWFjKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIgKmNtZDsKKwlpbnQgbWFjX3R5cGU7CisJaW50IHJjOworCisJbWFjX3R5cGUgPSBNV0w4S19NQUNfVFlQRV9QUklNQVJZX0FQOworCWlmICh2aWYgIT0gTlVMTCAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAobXdsOGtfdmlmLT5tYWNpZCArIDEgPT0gZmZzKHByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkKSkKKwkJCW1hY190eXBlID0gTVdMOEtfTUFDX1RZUEVfUFJJTUFSWV9DTElFTlQ7CisJCWVsc2UKKwkJCW1hY190eXBlID0gTVdMOEtfTUFDX1RZUEVfU0VDT05EQVJZX0NMSUVOVDsKKwl9IGVsc2UgaWYgKHZpZiAhPSBOVUxMICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlpZiAobXdsOGtfdmlmLT5tYWNpZCArIDEgPT0gZmZzKHByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQpKQorCQkJbWFjX3R5cGUgPSBNV0w4S19NQUNfVFlQRV9QUklNQVJZX0FQOworCQllbHNlCisJCQltYWNfdHlwZSA9IE1XTDhLX01BQ19UWVBFX1NFQ09OREFSWV9BUDsKKwl9CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX01BQ19BRERSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWlmIChwcml2LT5hcF9mdykgeworCQljbWQtPm1ic3MubWFjX3R5cGUgPSBjcHVfdG9fbGUxNihtYWNfdHlwZSk7CisJCW1lbWNweShjbWQtPm1ic3MubWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbWNweShjbWQtPm1hY19hZGRyLCBtYWMsIEVUSF9BTEVOKTsKKwl9CisKKwlyYyA9IG13bDhrX3Bvc3RfcGVydmlmX2NtZChodywgdmlmLCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JBVEVBREFQVF9NT0RFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBtb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3JhdGVhZGFwdF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3UxNiBtb2RlKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9CU1NfU1RBUlQuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfYnNzX3N0YXJ0IHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGVuYWJsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19jbWRfYnNzX3N0YXJ0ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0JTU19TVEFSVCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmVuYWJsZSA9IGNwdV90b19sZTMyKGVuYWJsZSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfcGVydmlmX2NtZChodywgdmlmLCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX05FV19TVE4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X25ld19zdG4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWlkOworCV9fdTggbWFjX2FkZHJbNl07CisJX19sZTE2IHN0bl9pZDsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiByc3ZkOworCV9fbGUzMiBsZWdhY3lfcmF0ZXM7CisJX191OCBodF9yYXRlc1s0XTsKKwlfX2xlMTYgY2FwX2luZm87CisJX19sZTE2IGh0X2NhcGFiaWxpdGllc19pbmZvOworCV9fdTggbWFjX2h0X3BhcmFtX2luZm87CisJX191OCByZXY7CisJX191OCBjb250cm9sX2NoYW5uZWw7CisJX191OCBhZGRfY2hhbm5lbDsKKwlfX2xlMTYgb3BfbW9kZTsKKwlfX2xlMTYgc3RiYzsKKwlfX3U4IGFkZF9xb3NfaW5mbzsKKwlfX3U4IGlzX3Fvc19zdGE7CisJX19sZTMyIGZ3X3N0YV9wdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1NUQV9BQ1RJT05fQURECQkwCisjZGVmaW5lIE1XTDhLX1NUQV9BQ1RJT05fUkVNT1ZFCQkyCisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9uZXdfc3RuX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X25ld19zdG4gKmNtZDsKKwl1MzIgcmF0ZXM7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9ORVdfU1ROKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYoc3RhLT5haWQpOworCW1lbWNweShjbWQtPm1hY19hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKKwljbWQtPnN0bl9pZCA9IGNwdV90b19sZTE2KHN0YS0+YWlkKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX1NUQV9BQ1RJT05fQUREKTsKKwlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwllbHNlCisJCXJhdGVzID0gc3RhLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzVHSFpdIDw8IDU7CisJY21kLT5sZWdhY3lfcmF0ZXMgPSBjcHVfdG9fbGUzMihyYXRlcyk7CisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQljbWQtPmh0X3JhdGVzWzBdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF07CisJCWNtZC0+aHRfcmF0ZXNbMV0gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXTsKKwkJY21kLT5odF9yYXRlc1syXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzJdOworCQljbWQtPmh0X3JhdGVzWzNdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbM107CisJCWNtZC0+aHRfY2FwYWJpbGl0aWVzX2luZm8gPSBjcHVfdG9fbGUxNihzdGEtPmh0X2NhcC5jYXApOworCQljbWQtPm1hY19odF9wYXJhbV9pbmZvID0gKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciAmIDMpIHwKKwkJCSgoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSAmIDcpIDw8IDIpOworCQljbWQtPmlzX3Fvc19zdGEgPSAxOworCX0KKworCXJjID0gbXdsOGtfcG9zdF9wZXJ2aWZfY21kKGh3LCB2aWYsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X25ld19zdG5fYWRkX3NlbGYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9uZXdfc3RuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9ORVdfU1ROKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCW1lbWNweShjbWQtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKworCXJjID0gbXdsOGtfcG9zdF9wZXJ2aWZfY21kKGh3LCB2aWYsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X25ld19zdG5fZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKmFkZHIpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfbmV3X3N0biAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfTkVXX1NUTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwltZW1jcHkoY21kLT5tYWNfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfU1RBX0FDVElPTl9SRU1PVkUpOworCisJcmMgPSBtd2w4a19wb3N0X3BlcnZpZl9jbWQoaHcsIHZpZiwgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogQ01EX1VQREFURV9TVEFEQi4KICAqLwotc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiIHsKK3N0cnVjdCBld2NfaHRfaW5mbyB7CisJX19sZTE2CWNvbnRyb2wxOworCV9fbGUxNgljb250cm9sMjsKKwlfX2xlMTYJY29udHJvbDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8geworCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLworCV9fdTgJcGVlcl90eXBlOworCisJLyogQmFzaWMgODAyLjExIGNhcGFiaWxpdGllcyBmcm9tIGFzc29jIHJlc3AuICAqLworCV9fbGUxNgliYXNpY19jYXBzOworCisJLyogU2V0IGlmIHBlZXIgc3VwcG9ydHMgODAyLjExbiBoaWdoIHRocm91Z2hwdXQgKEhUKS4gICovCisJX191OAlodF9zdXBwb3J0OworCisJLyogVmFsaWQgaWYgSFQgaXMgc3VwcG9ydGVkLiAgKi8KKwlfX2xlMTYJaHRfY2FwczsKKwlfX3U4CWV4dGVuZGVkX2h0X2NhcHM7CisJc3RydWN0IGV3Y19odF9pbmZvCWV3Y19pbmZvOworCisJLyogTGVnYWN5IHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJbGVnYWN5X3JhdGVzWzEyXTsKKworCS8qIEhUIHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJaHRfcmF0ZXNbMTZdOworCV9fdTgJcGFkWzE2XTsKKworCS8qIElmIHNldCwgaW50ZXJvcGVyYWJpbGl0eSBtb2RlLCBubyBwcm9wcmlldGFyeSBleHRlbnNpb25zLiAgKi8KKwlfX3U4CWludGVyb3A7CisJX191OAlwYWQyOworCV9fdTgJc3RhdGlvbl9pZDsKKwlfX2xlMTYJYW1zZHVfZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YWRiIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAKIAkvKiBTZWUgU1RBREJfQUNUSU9OX1RZUEUgKi8KQEAgLTI1MjUsMTMgKzMwMjUsMTkgQEAKIAlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8JcGVlcl9pbmZvOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGludCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgX191MzIgYWN0aW9uKQorI2RlZmluZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZCTEKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWQkJMgorCisvKiBQZWVyIEVudHJ5IGZsYWdzIC0gdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIHBlZXIgbm9kZSAqLworI2RlZmluZSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQJMgorCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhZGJfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gJm12X3ZpZi0+YnNzX2luZm87Ci0Jc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiICpjbWQ7Ci0Jc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvICpwZWVyX2luZm87CisJc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhZGIgKmNtZDsKKwlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnA7CisJdTMyIHJhdGVzOwogCWludCByYzsKIAogCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKQEAgLTI1NDAsMjE0ICszMDQ2LDQ1IEBACiAKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpOworCW1lbWNweShjbWQtPnBlZXJfYWRkciwgc3RhLT5hZGRyLCBFVEhfQUxFTik7CiAKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7Ci0JcGVlcl9pbmZvID0gJmNtZC0+cGVlcl9pbmZvOwotCW1lbWNweShjbWQtPnBlZXJfYWRkciwgbXZfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0Jc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6Ci0JY2FzZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZOgotCQkvKiBCdWlsZCBwZWVyX2luZm8gYmxvY2sgKi8KLQkJcGVlcl9pbmZvLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7Ci0JCXBlZXJfaW5mby0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KGluZm8tPmFzc29jX2NhcGFiaWxpdHkpOwotCQltZW1jcHkocGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXMsIG13bDhrX3JhdGVpZHMsCi0JCSAgICAgICBzaXplb2YobXdsOGtfcmF0ZWlkcykpOwotCQlwZWVyX2luZm8tPmludGVyb3AgPSAxOwotCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOwotCi0JCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0JCWlmIChyYyA9PSAwKQotCQkJbXZfdmlmLT5wZWVyX2lkID0gcGVlcl9pbmZvLT5zdGF0aW9uX2lkOwotCi0JCWJyZWFrOwotCi0JY2FzZSBNV0w4S19TVEFfREJfREVMX0VOVFJZOgotCWNhc2UgTVdMOEtfU1RBX0RCX0ZMVVNIOgotCWRlZmF1bHQ6Ci0JCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0JCWlmIChyYyA9PSAwKQotCQkJbXZfdmlmLT5wZWVyX2lkID0gMDsKLQkJYnJlYWs7Ci0JfQotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfU0VUX0FJRC4KLSAqLwotI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVECQkJMHgwMAotI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExRwkJCQkweDA3Ci0jZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFkJCTB4MDIKLSNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMCQkJMHgwNgotCi1zdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkIHsKLQlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTE2CWFpZDsKLQotCSAvKiBBUCdzIE1BQyBhZGRyZXNzIChCU1NJRCkgKi8KLQlfX3U4CWJzc2lkW0VUSF9BTEVOXTsKLQlfX2xlMTYJcHJvdGVjdGlvbl9tb2RlOwotCV9fdTgJc3VwcF9yYXRlc1sxNF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKLQlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkICpjbWQ7Ci0JdTE2IHByb3RfbW9kZTsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0FJRCk7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFpZCA9IGNwdV90b19sZTE2KGluZm8tPmFpZCk7Ci0KLQltZW1jcHkoY21kLT5ic3NpZCwgbXZfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JaWYgKGluZm8tPnVzZV9jdHNfcHJvdCkgewotCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExRzsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGluZm8tPmh0X29wZXJhdGlvbl9tb2RlICYKLQkJCUlFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pIHsKLQkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaOgotCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ6Ci0JCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQljbWQtPnByb3RlY3Rpb25fbW9kZSA9IGNwdV90b19sZTE2KHByb3RfbW9kZSk7Ci0KLQltZW1jcHkoY21kLT5zdXBwX3JhdGVzLCBtd2w4a19yYXRlaWRzLCBzaXplb2YobXdsOGtfcmF0ZWlkcykpOworCXAgPSAmY21kLT5wZWVyX2luZm87CisJcC0+cGVlcl90eXBlID0gTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UOworCXAtPmJhc2ljX2NhcHMgPSBjcHVfdG9fbGUxNih2aWYtPmJzc19jb25mLmFzc29jX2NhcGFiaWxpdHkpOworCXAtPmh0X3N1cHBvcnQgPSBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQ7CisJcC0+aHRfY2FwcyA9IHN0YS0+aHRfY2FwLmNhcDsKKwlwLT5leHRlbmRlZF9odF9jYXBzID0gKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciAmIDMpIHwKKwkJKChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ICYgNykgPDwgMik7CisJaWYgKGh3LT5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJZWxzZQorCQlyYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF81R0haXSA8PCA1OworCWxlZ2FjeV9yYXRlX21hc2tfdG9fYXJyYXkocC0+bGVnYWN5X3JhdGVzLCByYXRlcyk7CisJbWVtY3B5KHAtPmh0X3JhdGVzLCBzdGEtPmh0X2NhcC5tY3MucnhfbWFzaywgMTYpOworCXAtPmludGVyb3AgPSAxOworCXAtPmFtc2R1X2VuYWJsZWQgPSAwOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByYyA/IHJjIDogcC0+c3RhdGlvbl9pZDsKIH0KIAotLyoKLSAqIENNRF9TRVRfUkFURS4KLSAqLwotc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCB7Ci0Jc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fdTgJbGVnYWN5X3JhdGVzWzE0XTsKLQotCS8qIEJpdG1hcCBmb3Igc3VwcG9ydGVkIE1DUyBjb2Rlcy4gICovCi0JX191OAltY3Nfc2V0WzE2XTsKLQlfX3U4CXJlc2VydmVkWzE2XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfdXBkYXRlX3JhdGVzZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhZGJfZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICphZGRyKQogewotCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgKmNtZDsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFkYiAqY21kOwogCWludCByYzsKIAogCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY21kID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURSk7CisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9VUERBVEVfU1RBREIpOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JbWVtY3B5KGNtZC0+bGVnYWN5X3JhdGVzLCBtd2w4a19yYXRlaWRzLCBzaXplb2YobXdsOGtfcmF0ZWlkcykpOwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ01EX1VTRV9GSVhFRF9SQVRFLgotICovCi0jZGVmaW5lIE1XTDhLX1JBVEVfVEFCTEVfU0laRQk4Ci0jZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMAotI2RlZmluZSBNV0w4S19VU0VfQVVUT19SQVRFCTB4MDAwMgotCi1zdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSB7Ci0JLyogU2V0IHRvIDEgaWYgSFQgcmF0ZSwgMCBpZiBsZWdhY3kuICAqLwotCV9fbGUzMglpc19odF9yYXRlOwotCi0JLyogU2V0IHRvIDEgdG8gdXNlIHJldHJ5X2NvdW50IGZpZWxkLiAgKi8KLQlfX2xlMzIJZW5hYmxlX3JldHJ5OwotCi0JLyogU3BlY2lmaWVkIGxlZ2FjeSByYXRlIG9yIE1DUy4gICovCi0JX19sZTMyCXJhdGU7Ci0KLQkvKiBOdW1iZXIgb2YgYWxsb3dlZCByZXRyaWVzLiAgKi8KLQlfX2xlMzIJcmV0cnlfY291bnQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSB7Ci0JLyogMSB0byBhbGxvdyBzcGVjaWZpZWQgcmF0ZSBhbmQgYmVsb3cgKi8KLQlfX2xlMzIJYWxsb3dfcmF0ZV9kcm9wOwotCV9fbGUzMgludW1fcmF0ZXM7Ci0Jc3RydWN0IG13bDhrX3JhdGVfZW50cnkgcmF0ZV9lbnRyeVtNV0w4S19SQVRFX1RBQkxFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSB7Ci0Jc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUzMglhY3Rpb247Ci0Jc3RydWN0IG13bDhrX3JhdGVfdGFibGUgcmF0ZV90YWJsZTsKLQotCS8qIFVuaWNhc3QsIEJyb2FkY2FzdCBvciBNdWx0aWNhc3QgKi8KLQlfX2xlMzIJcmF0ZV90eXBlOwotCV9fbGUzMglyZXNlcnZlZDE7Ci0JX19sZTMyCXJlc2VydmVkMjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCXUzMiBhY3Rpb24sIHUzMiByYXRlX3R5cGUsIHN0cnVjdCBtd2w4a19yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQotewotCXN0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUgKmNtZDsKLQlpbnQgY291bnQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCi0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihhY3Rpb24pOwotCWNtZC0+cmF0ZV90eXBlID0gY3B1X3RvX2xlMzIocmF0ZV90eXBlKTsKLQotCWlmIChyYXRlX3RhYmxlICE9IE5VTEwpIHsKLQkJLyoKLQkJICogQ29weSBvdmVyIGVhY2ggZmllbGQgbWFudWFsbHkgc28gdGhhdCBlbmRpYW4KLQkJICogY29udmVyc2lvbiBjYW4gYmUgZG9uZS4KLQkJICovCi0JCWNtZC0+cmF0ZV90YWJsZS5hbGxvd19yYXRlX2Ryb3AgPQotCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPmFsbG93X3JhdGVfZHJvcCk7Ci0JCWNtZC0+cmF0ZV90YWJsZS5udW1fcmF0ZXMgPQotCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPm51bV9yYXRlcyk7Ci0KLQkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgcmF0ZV90YWJsZS0+bnVtX3JhdGVzOyBjb3VudCsrKSB7Ci0JCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqZHN0ID0KLQkJCQkmY21kLT5yYXRlX3RhYmxlLnJhdGVfZW50cnlbY291bnRdOwotCQkJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgKnNyYyA9Ci0JCQkJJnJhdGVfdGFibGUtPnJhdGVfZW50cnlbY291bnRdOwotCi0JCQlkc3QtPmlzX2h0X3JhdGUgPSBjcHVfdG9fbGUzMihzcmMtPmlzX2h0X3JhdGUpOwotCQkJZHN0LT5lbmFibGVfcmV0cnkgPSBjcHVfdG9fbGUzMihzcmMtPmVuYWJsZV9yZXRyeSk7Ci0JCQlkc3QtPnJhdGUgPSBjcHVfdG9fbGUzMihzcmMtPnJhdGUpOwotCQkJZHN0LT5yZXRyeV9jb3VudCA9IGNwdV90b19sZTMyKHNyYy0+cmV0cnlfY291bnQpOwotCQl9Ci0JfQorCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yNzY2LDE5ICszMTAzLDIyIEBACiAJdTMyIHN0YXR1czsKIAogCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwotCWlvd3JpdGUzMih+c3RhdHVzLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKLQogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9UWF9ET05FKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1RYX0RPTkUpIHsKKwkJc3RhdHVzICY9IH5NV0w4S19BMkhfSU5UX1RYX0RPTkU7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CisJfQogCiAJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkpIHsKLQkJd2hpbGUgKHJ4cV9wcm9jZXNzKGh3LCAwLCAxKSkKLQkJCXJ4cV9yZWZpbGwoaHcsIDAsIDEpOworCQlzdGF0dXMgJj0gfk1XTDhLX0EySF9JTlRfUlhfUkVBRFk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAJfQogCisJaWYgKHN0YXR1cykKKwkJaW93cml0ZTMyKH5zdGF0dXMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCiAJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKIAkJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKQogCQkJY29tcGxldGUocHJpdi0+aG9zdGNtZF93YWl0KTsKQEAgLTI3OTMsNiArMzEzMyw1MyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIHZvaWQgbXdsOGtfdHhfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKWRhdGE7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgbGltaXQ7CisJaW50IGk7CisKKwlsaW1pdCA9IDMyOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbGltaXQgLT0gbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIGxpbWl0LCAwKTsKKworCWlmICghcHJpdi0+cGVuZGluZ190eF9wa3RzICYmIHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgeworCQljb21wbGV0ZShwcml2LT50eF93YWl0KTsKKwkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJaWYgKGxpbWl0KSB7CisJCXdyaXRlbCh+TVdMOEtfQTJIX0lOVF9UWF9ET05FLAorCQkgICAgICAgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJfSBlbHNlIHsKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3J4X3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKilkYXRhOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGxpbWl0OworCisJbGltaXQgPSAzMjsKKwlsaW1pdCAtPSByeHFfcHJvY2VzcyhodywgMCwgbGltaXQpOworCWxpbWl0IC09IHJ4cV9yZWZpbGwoaHcsIDAsIGxpbWl0KTsKKworCWlmIChsaW1pdCkgeworCQl3cml0ZWwofk1XTDhLX0EySF9JTlRfUlhfUkVBRFksCisJCSAgICAgICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwl9IGVsc2UgeworCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOworCX0KK30KKwogCiAvKgogICogQ29yZSBkcml2ZXIgb3BlcmF0aW9ucy4KQEAgLTI4MDMsNyArMzE5MCw3IEBACiAJaW50IGluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJaW50IHJjOwogCi0JaWYgKHByaXYtPmN1cnJlbnRfY2hhbm5lbCA9PSBOVUxMKSB7CisJaWYgKCFwcml2LT5yYWRpb19vbikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZnJhbWUgc2luY2UgcmFkaW8gIgogCQkgICAgICAgImRpc2FibGVkXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0yODI4LDE5ICszMjE1LDIwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIEVuYWJsZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KLQl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwkvKiBFbmFibGUgVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLworCXRhc2tsZXRfZW5hYmxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOworCXRhc2tsZXRfZW5hYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KIAlpb3dyaXRlMzIoTVdMOEtfQTJIX0VWRU5UUywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwogCiAJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKIAlpZiAoIXJjKSB7Ci0JCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19lbmFibGUoaHcpOworCQlyYyA9IG13bDhrX2NtZF9yYWRpb19lbmFibGUoaHcpOwogCiAJCWlmICghcHJpdi0+YXBfZncpIHsKIAkJCWlmICghcmMpCi0JCQkJcmMgPSBtd2w4a19lbmFibGVfc25pZmZlcihodywgMCk7CisJCQkJcmMgPSBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIoaHcsIDApOwogCiAJCQlpZiAoIXJjKQogCQkJCXJjID0gbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CkBAIC0yODUxLDEwICszMjM5LDEwIEBACiAJCX0KIAogCQlpZiAoIXJjKQotCQkJcmMgPSBtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShodywgMCk7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfcmF0ZWFkYXB0X21vZGUoaHcsIDApOwogCiAJCWlmICghcmMpCi0JCQlyYyA9IG13bDhrX3NldF93bW0oaHcsIDApOworCQkJcmMgPSBtd2w4a19jbWRfc2V0X3dtbV9tb2RlKGh3LCAwKTsKIAogCQltd2w4a19md191bmxvY2soaHcpOwogCX0KQEAgLTI4NjIsNyArMzI1MCw4IEBACiAJaWYgKHJjKSB7CiAJCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAJCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwotCQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisJCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwkJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCX0KIAogCXJldHVybiByYzsKQEAgLTI4NzMsNyArMzI2Miw3IEBACiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgaTsKIAotCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShodyk7CisJbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwogCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKIApAQCAtMjg4NiwzNiArMzI3NSwyNyBAQAogCWlmIChwcml2LT5iZWFjb25fc2tiICE9IE5VTEwpCiAJCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CiAKLQkvKiBTdG9wIHR4IHJlY2xhaW0gdGFza2xldCAqLwotCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwkvKiBTdG9wIFRYIHJlY2xhaW0gYW5kIFJYIHRhc2tsZXRzLiAgKi8KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCiAJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCiAJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQotCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgMSk7CisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCBJTlRfTUFYLCAxKTsKIH0KIAogc3RhdGljIGludCBtd2w4a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7Ci0KLQkvKgotCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCi0JICovCi0JaWYgKHByaXYtPnZpZiAhPSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyoKLQkgKiBXZSBvbmx5IHN1cHBvcnQgbWFuYWdlZCBpbnRlcmZhY2VzIGZvciBub3cuCi0JICovCi0JaWYgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIC1FSU5WQUw7CisJdTMyIG1hY2lkc19zdXBwb3J0ZWQ7CisJaW50IG1hY2lkOwogCiAJLyoKIAkgKiBSZWplY3QgaW50ZXJmYWNlIGNyZWF0aW9uIGlmIHNuaWZmZXIgbW9kZSBpcyBhY3RpdmUsIGFzCiAJICogU1RBIG9wZXJhdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBoYXJkd2FyZSBzbmlmZmVyCi0JICogbW9kZS4KKwkgKiBtb2RlLiAgKFNuaWZmZXIgbW9kZSBpcyBvbmx5IHVzZWQgb24gU1RBIGZpcm13YXJlLikKIAkgKi8KIAlpZiAocHJpdi0+c25pZmZlcl9lbmFibGVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmFibGUgdG8gY3JlYXRlIFNUQSAiCkBAIC0yOTI0LDM3ICszMzA0LDU0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIENsZWFuIG91dCBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCi0JbXdsOGtfdmlmID0gTVdMOEtfVklGKGNvbmYtPnZpZik7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCW1hY2lkc19zdXBwb3J0ZWQgPSBwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCW1hY2lkc19zdXBwb3J0ZWQgPSBwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWFjaWQgPSBmZnMobWFjaWRzX3N1cHBvcnRlZCAmIH5wcml2LT5tYWNpZHNfdXNlZCk7CisJaWYgKCFtYWNpZC0tKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU2V0dXAgZHJpdmVyIHByaXZhdGUgYXJlYS4gKi8KKwltd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKIAltZW1zZXQobXdsOGtfdmlmLCAwLCBzaXplb2YoKm13bDhrX3ZpZikpOwotCi0JLyogU2V0IGFuZCBzYXZlIHRoZSBtYWMgYWRkcmVzcyAqLwotCW13bDhrX3NldF9tYWNfYWRkcihodywgY29uZi0+bWFjX2FkZHIpOwotCW1lbWNweShtd2w4a192aWYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JLyogQmFjayBwb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KLQltd2w4a192aWYtPnByaXYgPSBwcml2OwotCi0JLyogU2V0IEluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8gKi8KKwltd2w4a192aWYtPnZpZiA9IHZpZjsKKwltd2w4a192aWYtPm1hY2lkID0gbWFjaWQ7CiAJbXdsOGtfdmlmLT5zZXFubyA9IDA7CiAKLQlwcml2LT52aWYgPSBjb25mLT52aWY7Ci0JcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKwkvKiBTZXQgdGhlIG1hYyBhZGRyZXNzLiAgKi8KKwltd2w4a19jbWRfc2V0X21hY19hZGRyKGh3LCB2aWYsIHZpZi0+YWRkcik7CisKKwlpZiAocHJpdi0+YXBfZncpCisJCW13bDhrX2NtZF9zZXRfbmV3X3N0bl9hZGRfc2VsZihodywgdmlmKTsKKworCXByaXYtPm1hY2lkc191c2VkIHw9IDEgPDwgbXdsOGtfdmlmLT5tYWNpZDsKKwlsaXN0X2FkZF90YWlsKCZtd2w4a192aWYtPmxpc3QsICZwcml2LT52aWZfbGlzdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbXdsOGtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CiAKLQlpZiAocHJpdi0+dmlmID09IE5VTEwpCi0JCXJldHVybjsKKwlpZiAocHJpdi0+YXBfZncpCisJCW13bDhrX2NtZF9zZXRfbmV3X3N0bl9kZWwoaHcsIHZpZiwgdmlmLT5hZGRyKTsKIAotCW13bDhrX3NldF9tYWNfYWRkcihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOworCW13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsIHZpZiwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOwogCi0JcHJpdi0+dmlmID0gTlVMTDsKKwlwcml2LT5tYWNpZHNfdXNlZCAmPSB+KDEgPDwgbXdsOGtfdmlmLT5tYWNpZCk7CisJbGlzdF9kZWwoJm13bDhrX3ZpZi0+bGlzdCk7CiB9CiAKIHN0YXRpYyBpbnQgbXdsOGtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKQEAgLTI5NjQsOCArMzM2MSw3IEBACiAJaW50IHJjOwogCiAJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkgewotCQltd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOwotCQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCQltd2w4a19jbWRfcmFkaW9fZGlzYWJsZShodyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjk3MywxOSArMzM2OSwxNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShodyk7CisJcmMgPSBtd2w4a19jbWRfcmFkaW9fZW5hYmxlKGh3KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcmMgPSBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoaHcsIGNvbmYtPmNoYW5uZWwpOworCXJjID0gbXdsOGtfY21kX3NldF9yZl9jaGFubmVsKGh3LCBjb25mKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcHJpdi0+Y3VycmVudF9jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKLQogCWlmIChjb25mLT5wb3dlcl9sZXZlbCA+IDE4KQogCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OwotCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlcihodywgY29uZi0+cG93ZXJfbGV2ZWwpOworCXJjID0gbXdsOGtfY21kX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIApAQCAtMzAwMyw3OSArMzM5NywxNjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIG13bDhrX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAotCQkJCSAgIHUzMiBjaGFuZ2VkKQorc3RhdGljIHZvaWQKK213bDhrX2Jzc19pbmZvX2NoYW5nZWRfc3RhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKKwl1MzIgYXBfbGVnYWN5X3JhdGVzOworCXU4IGFwX21jc19yYXRlc1sxNl07CiAJaW50IHJjOwogCi0JaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpID09IDApCisJaWYgKG13bDhrX2Z3X2xvY2soaHcpKQogCQlyZXR1cm47CiAKLQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCS8qCisJICogTm8gbmVlZCB0byBjYXB0dXJlIGEgYmVhY29uIGlmIHdlJ3JlIG5vIGxvbmdlciBhc3NvY2lhdGVkLgorCSAqLworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSAmJiAhdmlmLT5ic3NfY29uZi5hc3NvYykKKwkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKIAotCXJjID0gbXdsOGtfZndfbG9jayhodyk7Ci0JaWYgKHJjKQotCQlyZXR1cm47CisJLyoKKwkgKiBHZXQgdGhlIEFQJ3MgbGVnYWN5IGFuZCBNQ1MgcmF0ZXMuCisJICovCisJaWYgKHZpZi0+YnNzX2NvbmYuYXNzb2MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKmFwOwogCi0JaWYgKGluZm8tPmFzc29jKSB7Ci0JCW1lbWNweSgmbXdsOGtfdmlmLT5ic3NfaW5mbywgaW5mbywKLQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAotCQltZW1jcHkobXdsOGtfdmlmLT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJYXAgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCB2aWYtPmJzc19jb25mLmJzc2lkKTsKKwkJaWYgKGFwID09IE5VTEwpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBvdXQ7CisJCX0KIAotCQkvKiBJbnN0YWxsIHJhdGVzICovCi0JCXJjID0gbXdsOGtfdXBkYXRlX3JhdGVzZXQoaHcsIHZpZik7CisJCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJCWFwX2xlZ2FjeV9yYXRlcyA9IGFwLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCQl9IGVsc2UgeworCQkJYXBfbGVnYWN5X3JhdGVzID0KKwkJCQlhcC0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF81R0haXSA8PCA1OworCQl9CisJCW1lbWNweShhcF9tY3NfcmF0ZXMsIGFwLT5odF9jYXAubWNzLnJ4X21hc2ssIDE2KTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgJiYgdmlmLT5ic3NfY29uZi5hc3NvYykgeworCQlyYyA9IG13bDhrX2NtZF9zZXRfcmF0ZShodywgdmlmLCBhcF9sZWdhY3lfcmF0ZXMsIGFwX21jc19yYXRlcyk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCi0JCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCi0JCXJjID0gbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKGh3LCBNV0w4S19VU0VfQVVUT19SQVRFLAotCQkJTVdMOEtfVUNBU1RfUkFURSwgTlVMTCk7CisJCXJjID0gbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlX3N0YShodyk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OworCX0KIAotCQkvKiBTZXQgcmFkaW8gcHJlYW1ibGUgKi8KLQkJcmMgPSBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJcmMgPSBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsCisJCQkJdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKKwl9CiAKLQkJLyogU2V0IHNsb3QgdGltZSAqLwotCQlyYyA9IG13bDhrX2NtZF9zZXRfc2xvdChodywgaW5mby0+dXNlX3Nob3J0X3Nsb3QpOworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJcmMgPSBtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKKwl9CiAKLQkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCi0JCXJjID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwKLQkJCQlNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZKTsKKwlpZiAodmlmLT5ic3NfY29uZi5hc3NvYyAmJgorCSAgICAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCB8CisJCQlCU1NfQ0hBTkdFRF9IVCkpKSB7CisJCXJjID0gbXdsOGtfY21kX3NldF9haWQoaHcsIHZpZiwgYXBfbGVnYWN5X3JhdGVzKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CisJfQogCi0JCS8qIFNldCBBSUQgKi8KLQkJcmMgPSBtd2w4a19jbWRfc2V0X2FpZChodywgdmlmKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQ7Ci0KKwlpZiAodmlmLT5ic3NfY29uZi5hc3NvYyAmJgorCSAgICAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpKSkgewogCQkvKgogCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCiAJCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgogCQkgKi8KLQkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsIG13bDhrX3ZpZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsIHZpZi0+YnNzX2NvbmYuYnNzaWQsIEVUSF9BTEVOKTsKIAkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOwotCX0gZWxzZSB7Ci0JCXJjID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7Ci0JCW1lbXNldCgmbXdsOGtfdmlmLT5ic3NfaW5mbywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7Ci0JCW1lbXNldChtd2w4a192aWYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJfQogCiBvdXQ6CiAJbXdsOGtfZndfdW5sb2NrKGh3KTsKIH0KIAorc3RhdGljIHZvaWQKK213bDhrX2Jzc19pbmZvX2NoYW5nZWRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKQoreworCWludCByYzsKKworCWlmIChtd2w4a19md19sb2NrKGh3KSkKKwkJcmV0dXJuOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJcmMgPSBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsCisJCQkJdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CisJCWludCBpZHg7CisJCWludCByYXRlOworCisJCS8qCisJCSAqIFVzZSBsb3dlc3Qgc3VwcG9ydGVkIGJhc2ljIHJhdGUgZm9yIG11bHRpY2FzdHMKKwkJICogYW5kIG1hbmFnZW1lbnQgZnJhbWVzIChzdWNoIGFzIHByb2JlIHJlc3BvbnNlcyAtLQorCQkgKiBiZWFjb25zIHdpbGwgYWx3YXlzIGdvIG91dCBhdCAxIE1iL3MpLgorCQkgKi8KKwkJaWR4ID0gZmZzKHZpZi0+YnNzX2NvbmYuYmFzaWNfcmF0ZXMpOworCQlpZiAoaWR4KQorCQkJaWR4LS07CisKKwkJaWYgKGh3LT5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJCXJhdGUgPSBtd2w4a19yYXRlc18yNFtpZHhdLmh3X3ZhbHVlOworCQllbHNlCisJCQlyYXRlID0gbXdsOGtfcmF0ZXNfNTBbaWR4XS5od192YWx1ZTsKKworCQltd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfYXAoaHcsIHJhdGUsIHJhdGUpOworCX0KKworCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0JFQUNPTl9JTlQgfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCWlmIChza2IgIT0gTlVMTCkgeworCQkJbXdsOGtfY21kX3NldF9iZWFjb24oaHcsIHZpZiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCisJCW13bDhrX2NtZF9ic3Nfc3RhcnQoaHcsIHZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7CisKK291dDoKKwltd2w4a19md191bmxvY2soaHcpOworfQorCitzdGF0aWMgdm9pZAorbXdsOGtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAoIXByaXYtPmFwX2Z3KQorCQltd2w4a19ic3NfaW5mb19jaGFuZ2VkX3N0YShodywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKKwllbHNlCisJCW13bDhrX2Jzc19pbmZvX2NoYW5nZWRfYXAoaHcsIHZpZiwgaW5mbywgY2hhbmdlZCk7Cit9CisKIHN0YXRpYyB1NjQgbXdsOGtfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQogewpAQCAtMzEwNSw3ICszNTgwLDcgQEAKIAkgKiBvcGVyYXRpb24sIHNvIHJlZnVzZSB0byBlbmFibGUgc25pZmZlciBtb2RlIGlmIGEgU1RBCiAJICogaW50ZXJmYWNlIGlzIGFjdGl2ZS4KIAkgKi8KLQlpZiAocHJpdi0+dmlmICE9IE5VTEwpIHsKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnZpZl9saXN0KSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vdCBlbmFibGluZyBzbmlmZmVyICIKIAkJCSAgICAgICAibW9kZSBiZWNhdXNlIFNUQSBpbnRlcmZhY2UgaXMgYWN0aXZlXG4iLApAQCAtMzExNCw3ICszNTg5LDcgQEAKIAl9CiAKIAlpZiAoIXByaXYtPnNuaWZmZXJfZW5hYmxlZCkgewotCQlpZiAobXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDEpKQorCQlpZiAobXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyKGh3LCAxKSkKIAkJCXJldHVybiAwOwogCQlwcml2LT5zbmlmZmVyX2VuYWJsZWQgPSB0cnVlOwogCX0KQEAgLTMxMjYsNiArMzYwMSwxNCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfZmlyc3RfdmlmKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+dmlmX2xpc3QpKQorCQlyZXR1cm4gbGlzdF9lbnRyeShwcml2LT52aWZfbGlzdC5uZXh0LCBzdHJ1Y3QgbXdsOGtfdmlmLCBsaXN0KTsKKworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBtd2w4a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCkBAIC0zMTYzLDcgKzM2NDYsNyBAQAogCX0KIAogCWlmIChwcml2LT5zbmlmZmVyX2VuYWJsZWQpIHsKLQkJbXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDApOworCQltd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIoaHcsIDApOwogCQlwcml2LT5zbmlmZmVyX2VuYWJsZWQgPSBmYWxzZTsKIAl9CiAKQEAgLTMxNzQsNyArMzY1Nyw4IEBACiAJCQkgKi8KIAkJCW13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpOwogCQl9IGVsc2UgewotCQkJdTggKmJzc2lkOworCQkJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOworCQkJY29uc3QgdTggKmJzc2lkOwogCiAJCQkvKgogCQkJICogRW5hYmxlIHRoZSBCU1MgZmlsdGVyLgpAQCAtMzE4NCw5ICszNjY4LDExIEBACiAJCQkgKiAod2hlcmUgdGhlIE9VSSBwYXJ0IG5lZWRzIHRvIGJlIG5vbnplcm8gZm9yCiAJCQkgKiB0aGUgQlNTSUQgdG8gYmUgYWNjZXB0ZWQgYnkgUE9TVF9TQ0FOKS4KIAkJCSAqLwotCQkJYnNzaWQgPSAiXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwIjsKLQkJCWlmIChwcml2LT52aWYgIT0gTlVMTCkKLQkJCQlic3NpZCA9IE1XTDhLX1ZJRihwcml2LT52aWYpLT5ic3NpZDsKKwkJCW13bDhrX3ZpZiA9IG13bDhrX2ZpcnN0X3ZpZihwcml2KTsKKwkJCWlmIChtd2w4a192aWYgIT0gTlVMTCkKKwkJCQlic3NpZCA9IG13bDhrX3ZpZi0+dmlmLT5ic3NfY29uZi5ic3NpZDsKKwkJCWVsc2UKKwkJCQlic3NpZCA9ICJceDAxXHgwMFx4MDBceDAwXHgwMFx4MDAiOwogCiAJCQltd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgYnNzaWQpOwogCQl9CkBAIC0zMjEzLDcgKzM2OTksMzkgQEAKIAogc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQogewotCXJldHVybiBtd2w4a19ydHNfdGhyZXNob2xkKGh3LCBNV0w4S19DTURfU0VULCB2YWx1ZSk7CisJcmV0dXJuIG13bDhrX2NtZF9zZXRfcnRzX3RocmVzaG9sZChodywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IG13bDhrX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAocHJpdi0+YXBfZncpCisJCXJldHVybiBtd2w4a19jbWRfc2V0X25ld19zdG5fZGVsKGh3LCB2aWYsIHN0YS0+YWRkcik7CisJZWxzZQorCQlyZXR1cm4gbXdsOGtfY21kX3VwZGF0ZV9zdGFkYl9kZWwoaHcsIHZpZiwgc3RhLT5hZGRyKTsKK30KKworc3RhdGljIGludCBtd2w4a19zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwlpZiAoIXByaXYtPmFwX2Z3KSB7CisJCXJldCA9IG13bDhrX2NtZF91cGRhdGVfc3RhZGJfYWRkKGh3LCB2aWYsIHN0YSk7CisJCWlmIChyZXQgPj0gMCkgeworCQkJTVdMOEtfU1RBKHN0YSktPnBlZXJfaWQgPSByZXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIG13bDhrX2NtZF9zZXRfbmV3X3N0bl9hZGQoaHcsIHZpZiwgc3RhKTsKIH0KIAogc3RhdGljIGludCBtd2w4a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCkBAIC0zMjI1LDE0ICszNzQzLDE0IEBACiAJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKIAlpZiAoIXJjKSB7CiAJCWlmICghcHJpdi0+d21tX2VuYWJsZWQpCi0JCQlyYyA9IG13bDhrX3NldF93bW0oaHcsIDEpOworCQkJcmMgPSBtd2w4a19jbWRfc2V0X3dtbV9tb2RlKGh3LCAxKTsKIAogCQlpZiAoIXJjKQotCQkJcmMgPSBtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIHF1ZXVlLAotCQkJCQkJICAgcGFyYW1zLT5jd19taW4sCi0JCQkJCQkgICBwYXJhbXMtPmN3X21heCwKLQkJCQkJCSAgIHBhcmFtcy0+YWlmcywKLQkJCQkJCSAgIHBhcmFtcy0+dHhvcCk7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMoaHcsIHF1ZXVlLAorCQkJCQkJICAgICAgIHBhcmFtcy0+Y3dfbWluLAorCQkJCQkJICAgICAgIHBhcmFtcy0+Y3dfbWF4LAorCQkJCQkJICAgICAgIHBhcmFtcy0+YWlmcywKKwkJCQkJCSAgICAgICBwYXJhbXMtPnR4b3ApOwogCiAJCW13bDhrX2Z3X3VubG9jayhodyk7CiAJfQpAQCAtMzI0MCwyOCArMzc1OCwyNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtd2w4a19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOwotCWludCBpbmRleDsKLQotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTVdMOEtfVFhfUVVFVUVTOyBpbmRleCsrKSB7Ci0JCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OwotCQltZW1jcHkoJnN0YXRzW2luZGV4XSwgJnR4cS0+c3RhdHMsCi0JCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOwotCX0KLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7Ci0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoaHcsIHN0YXRzKTsKKwlyZXR1cm4gbXdsOGtfY21kX2dldF9zdGF0KGh3LCBzdGF0cyk7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKK3sKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CisJCWlmICghKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCisJCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bDhrX29wcyA9IHsKQEAgLTMyNzUsNjcgKzM3OTEsNzIgQEAKIAkucHJlcGFyZV9tdWx0aWNhc3QJPSBtd2w4a19wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9ydHNfdGhyZXNob2xkCT0gbXdsOGtfc2V0X3J0c190aHJlc2hvbGQsCisJLnN0YV9hZGQJCT0gbXdsOGtfc3RhX2FkZCwKKwkuc3RhX3JlbW92ZQkJPSBtd2w4a19zdGFfcmVtb3ZlLAogCS5jb25mX3R4CQk9IG13bDhrX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBtd2w4a19nZXRfdHhfc3RhdHMsCiAJLmdldF9zdGF0cwkJPSBtd2w4a19nZXRfc3RhdHMsCisJLmFtcGR1X2FjdGlvbgkJPSBtd2w4a19hbXBkdV9hY3Rpb24sCiB9OwogCi1zdGF0aWMgdm9pZCBtd2w4a190eF9yZWNsYWltX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCWludCBpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKikgZGF0YTsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCi0Jc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCi0JCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAwKTsKLQotCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwgJiYgIXByaXYtPnBlbmRpbmdfdHhfcGt0cykgewotCQljb21wbGV0ZShwcml2LT50eF93YWl0KTsKLQkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgbXdsOGtfZmluYWxpemVfam9pbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCBmaW5hbGl6ZV9qb2luX3dvcmtlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPmJlYWNvbl9za2I7Ci0JdTggZHRpbSA9IE1XTDhLX1ZJRihwcml2LT52aWYpLT5ic3NfaW5mby5kdGltX3BlcmlvZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlpbnQgbGVuID0gc2tiLT5sZW4gLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKKwljb25zdCB1OCAqdGltID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9USU0sCisJCQkJCSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuKTsKKwlpbnQgZHRpbV9wZXJpb2QgPSAxOwogCi0JbXdsOGtfZmluYWxpemVfam9pbihwcml2LT5odywgc2tiLT5kYXRhLCBza2ItPmxlbiwgZHRpbSk7CisJaWYgKHRpbSAmJiB0aW1bMV0gPj0gMikKKwkJZHRpbV9wZXJpb2QgPSB0aW1bM107CisKKwltd2w4a19jbWRfZmluYWxpemVfam9pbihwcml2LT5odywgc2tiLT5kYXRhLCBza2ItPmxlbiwgZHRpbV9wZXJpb2QpOworCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCiAJcHJpdi0+YmVhY29uX3NrYiA9IE5VTEw7CiB9CiAKIGVudW0gewotCU1XTDg2ODcgPSAwLAorCU1XTDgzNjMgPSAwLAorCU1XTDg2ODcsCiAJTVdMODM2NiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXdsOGtfZGV2aWNlX2luZm8gbXdsOGtfaW5mb190YmxbXSBfX2RldmluaXRkYXRhID0gewotCXsKKwlbTVdMODM2M10gPSB7CisJCS5wYXJ0X25hbWUJPSAiODh3ODM2MyIsCisJCS5oZWxwZXJfaW1hZ2UJPSAibXdsOGsvaGVscGVyXzgzNjMuZnciLAorCQkuZndfaW1hZ2UJPSAibXdsOGsvZm1pbWFnZV84MzYzLmZ3IiwKKwl9LAorCVtNV0w4Njg3XSA9IHsKIAkJLnBhcnRfbmFtZQk9ICI4OHc4Njg3IiwKIAkJLmhlbHBlcl9pbWFnZQk9ICJtd2w4ay9oZWxwZXJfODY4Ny5mdyIsCiAJCS5md19pbWFnZQk9ICJtd2w4ay9mbWltYWdlXzg2ODcuZnciLAotCQkucnhkX29wcwk9ICZyeGRfODY4N19vcHMsCi0JCS5tb2RlcwkJPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTiksCiAJfSwKLQl7CisJW01XTDgzNjZdID0gewogCQkucGFydF9uYW1lCT0gIjg4dzgzNjYiLAogCQkuaGVscGVyX2ltYWdlCT0gIm13bDhrL2hlbHBlcl84MzY2LmZ3IiwKIAkJLmZ3X2ltYWdlCT0gIm13bDhrL2ZtaW1hZ2VfODM2Ni5mdyIsCi0JCS5yeGRfb3BzCT0gJnJ4ZF84MzY2X29wcywKLQkJLm1vZGVzCQk9IDAsCisJCS5hcF9yeGRfb3BzCT0gJnJ4ZF84MzY2X2FwX29wcywKIAl9LAogfTsKIAorTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9oZWxwZXJfODM2My5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9mbWltYWdlXzgzNjMuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgibXdsOGsvaGVscGVyXzg2ODcuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgibXdsOGsvZm1pbWFnZV84Njg3LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoIm13bDhrL2hlbHBlcl84MzY2LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoIm13bDhrL2ZtaW1hZ2VfODM2Ni5mdyIpOworCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobXdsOGtfcGNpX2lkX3RhYmxlKSA9IHsKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEwYyksIC5kcml2ZXJfZGF0YSA9IE1XTDgzNjMsIH0sCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMjQpLCAuZHJpdmVyX2RhdGEgPSBNV0w4MzYzLCB9LAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTJiKSwgLmRyaXZlcl9kYXRhID0gTVdMODY4NywgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEzMCksIC5kcml2ZXJfZGF0YSA9IE1XTDg2ODcsIH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhNDApLCAuZHJpdmVyX2RhdGEgPSBNV0w4MzY2LCB9LAorCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTQzKSwgLmRyaXZlcl9kYXRhID0gTVdMODM2NiwgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG13bDhrX3BjaV9pZF90YWJsZSk7CkBAIC0zMzU0LDYgKzM4NzUsNyBAQAogCQlwcmludGVkX3ZlcnNpb24gPSAxOwogCX0KIAorCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKQEAgLTMzNzAsNiArMzg5Miw3IEBACiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAorCiAJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJm13bDhrX29wcyk7CiAJaWYgKGh3ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwgTVdMOEtfTkFNRSk7CkBAIC0zMzc3LDE3ICszOTAwLDE0IEBACiAJCWdvdG8gZXJyX2ZyZWVfcmVnOwogCX0KIAorCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCiAJcHJpdiA9IGh3LT5wcml2OwogCXByaXYtPmh3ID0gaHc7CiAJcHJpdi0+cGRldiA9IHBkZXY7CiAJcHJpdi0+ZGV2aWNlX2luZm8gPSAmbXdsOGtfaW5mb190YmxbaWQtPmRyaXZlcl9kYXRhXTsKLQlwcml2LT5yeGRfb3BzID0gcHJpdi0+ZGV2aWNlX2luZm8tPnJ4ZF9vcHM7Ci0JcHJpdi0+c25pZmZlcl9lbmFibGVkID0gZmFsc2U7Ci0JcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKLQlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOwogCi0JU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CiAKIAlwcml2LT5zcmFtID0gcGNpX2lvbWFwKHBkZXYsIDAsIDB4MTAwMDApOwogCWlmIChwcml2LT5zcmFtID09IE5VTEwpIHsKQEAgLTM0MTAsMTYgKzM5MzAsNDYgQEAKIAkJfQogCX0KIAotCW1lbWNweShwcml2LT5jaGFubmVscywgbXdsOGtfY2hhbm5lbHMsIHNpemVvZihtd2w4a19jaGFubmVscykpOwotCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0JcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwotCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdsOGtfY2hhbm5lbHMpOwotCXByaXYtPmJhbmQuYml0cmF0ZXMgPSBwcml2LT5yYXRlczsKLQlwcml2LT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bDhrX3JhdGVzKTsKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CiAKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzKSAhPSBzaXplb2YobXdsOGtfcmF0ZXMpKTsKLQltZW1jcHkocHJpdi0+cmF0ZXMsIG13bDhrX3JhdGVzLCBzaXplb2YobXdsOGtfcmF0ZXMpKTsKKwkvKiBSZXNldCBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIEFzayB1c2VybGFuZCBob3RwbHVnIGRhZW1vbiBmb3IgdGhlIGRldmljZSBmaXJtd2FyZSAqLworCXJjID0gbXdsOGtfcmVxdWVzdF9maXJtd2FyZShwcml2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlybXdhcmUgZmlsZXMgbm90IGZvdW5kXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KKwlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUoaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgc3RhcnQgZmlybXdhcmVcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIFJlY2xhaW0gbWVtb3J5IG9uY2UgZmlybXdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKKworCWlmIChwcml2LT5hcF9mdykgeworCQlwcml2LT5yeGRfb3BzID0gcHJpdi0+ZGV2aWNlX2luZm8tPmFwX3J4ZF9vcHM7CisJCWlmIChwcml2LT5yeGRfb3BzID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERyaXZlciBkb2VzIG5vdCBoYXZlIEFQICIKKwkJCSAgICAgICAiZmlybXdhcmUgaW1hZ2Ugc3VwcG9ydCBmb3IgdGhpcyBoYXJkd2FyZVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPnJ4ZF9vcHMgPSAmcnhkX3N0YV9vcHM7CisJfQorCisJcHJpdi0+c25pZmZlcl9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOworCiAKIAkvKgogCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCkBAIC0zNDMyLDEyICszOTgyLDEzIEBACiAKIAlody0+cXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOwogCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBwcml2LT5kZXZpY2VfaW5mby0+bW9kZXM7Ci0KIAkvKiBTZXQgcnNzaSBhbmQgbm9pc2UgdmFsdWVzIHRvIGRCbSAqLwogCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8IElFRUU4MDIxMV9IV19OT0lTRV9EQk07CiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3ZpZik7Ci0JcHJpdi0+dmlmID0gTlVMTDsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfc3RhKTsKKworCXByaXYtPm1hY2lkc191c2VkID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dmlmX2xpc3QpOwogCiAJLyogU2V0IGRlZmF1bHQgcmFkaW8gc3RhdGUgYW5kIHByZWFtYmxlICovCiAJcHJpdi0+cmFkaW9fb24gPSAwOwpAQCAtMzQ0NiwxOSArMzk5NywyMCBAQAogCS8qIEZpbmFsaXplIGpvaW4gd29ya2VyICovCiAJSU5JVF9XT1JLKCZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlciwgbXdsOGtfZmluYWxpemVfam9pbl93b3JrZXIpOwogCi0JLyogVFggcmVjbGFpbSB0YXNrbGV0ICovCi0JdGFza2xldF9pbml0KCZwcml2LT50eF9yZWNsYWltX3Rhc2ssCi0JCQltd2w4a190eF9yZWNsYWltX2hhbmRsZXIsICh1bnNpZ25lZCBsb25nKWh3KTsKLQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisJLyogVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLworCXRhc2tsZXRfaW5pdCgmcHJpdi0+cG9sbF90eF90YXNrLCBtd2w4a190eF9wb2xsLCAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOworCXRhc2tsZXRfaW5pdCgmcHJpdi0+cG9sbF9yeF90YXNrLCBtd2w4a19yeF9wb2xsLCAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCiAJLyogUG93ZXIgbWFuYWdlbWVudCBjb29raWUgKi8KIAlwcml2LT5jb29raWUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LCAmcHJpdi0+Y29va2llX2RtYSk7CiAJaWYgKHByaXYtPmNvb2tpZSA9PSBOVUxMKQotCQlnb3RvIGVycl9pb3VubWFwOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCiAJcmMgPSBtd2w4a19yeHFfaW5pdChodywgMCk7CiAJaWYgKHJjKQotCQlnb3RvIGVycl9pb3VubWFwOworCQlnb3RvIGVycl9mcmVlX2Nvb2tpZTsKIAlyeHFfcmVmaWxsKGh3LCAwLCBJTlRfTUFYKTsKIAogCW11dGV4X2luaXQoJnByaXYtPmZ3X211dGV4KTsKQEAgLTM0NzgsNyArNDAzMCw4IEBACiAKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCk7CisJaW93cml0ZTMyKE1XTDhLX0EySF9JTlRfVFhfRE9ORSB8IE1XTDhLX0EySF9JTlRfUlhfUkVBRFksCisJCSAgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCk7CiAJaW93cml0ZTMyKDB4ZmZmZmZmZmYsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7CiAKIAlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgbXdsOGtfaW50ZXJydXB0LApAQCAtMzQ4OSwzMSArNDA0Miw5IEBACiAJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOwogCX0KIAotCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLwotCW13bDhrX2h3X3Jlc2V0KHByaXYpOwotCi0JLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCi0JcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9mcmVlX2lycTsKLQl9Ci0KLQkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KLQlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUoaHcpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgc3RhcnQgZmlybXdhcmVcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwotCX0KLQotCS8qIFJlY2xhaW0gbWVtb3J5IG9uY2UgZmlybXdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLwotCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7Ci0KIAkvKgogCSAqIFRlbXBvcmFyaWx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAgSW5pdGlhbCBmaXJtd2FyZSBob3N0Ci0JICogY29tbWFuZHMgdXNlIGludGVycnVwdHMgYW5kIGF2b2lkcyBwb2xsaW5nLiAgRGlzYWJsZQorCSAqIGNvbW1hbmRzIHVzZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZCBwb2xsaW5nLiAgRGlzYWJsZQogCSAqIGludGVycnVwdHMgd2hlbiBkb25lLgogCSAqLwogCWlvd3JpdGUzMihNV0w4S19BMkhfRVZFTlRTLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CkBAIC0zNTI5LDIyICs0MDYwLDI5IEBACiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSAwOworCWlmIChwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkKQorCQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOworCWlmIChwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCkKKwkJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCisKIAkvKiBUdXJuIHJhZGlvIG9mZiAqLwotCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19kaXNhYmxlKGh3KTsKKwlyYyA9IG13bDhrX2NtZF9yYWRpb19kaXNhYmxlKGh3KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGRpc2FibGVcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7Ci0JCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCS8qIENsZWFyIE1BQyBhZGRyZXNzICovCi0JcmMgPSBtd2w4a19zZXRfbWFjX2FkZHIoaHcsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKKwlyYyA9IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsIE5VTEwsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGNsZWFyIE1BQyBhZGRyZXNzXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0zNTU1LDcgKzQwOTMsNyBAQAogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIHYlZCwgJXBNLCAlcyBmaXJtd2FyZSAldS4ldS4ldS4ldVxuIiwKQEAgLTM1NjcsMTAgKzQxMDUsNiBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9zdG9wX2Zpcm13YXJlOgotCW13bDhrX2h3X3Jlc2V0KHByaXYpOwotCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7Ci0KIGVycl9mcmVlX2lycToKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwpAQCAtMzU4MCwxMSArNDExNCwxNiBAQAogCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKIAltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKIAotZXJyX2lvdW5tYXA6CitlcnJfZnJlZV9jb29raWU6CiAJaWYgKHByaXYtPmNvb2tpZSAhPSBOVUxMKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsCiAJCQkJcHJpdi0+Y29va2llLCBwcml2LT5jb29raWVfZG1hKTsKIAorZXJyX3N0b3BfZmlybXdhcmU6CisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKworZXJyX2lvdW5tYXA6CiAJaWYgKHByaXYtPnJlZ3MgIT0gTlVMTCkKIAkJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CiAKQEAgLTM2MjIsMTUgKzQxNjEsMTYgQEAKIAogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKIAotCS8qIFJlbW92ZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KLQl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisJLyogUmVtb3ZlIFRYIHJlY2xhaW0gYW5kIFJYIHRhc2tsZXRzLiAgKi8KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnBvbGxfdHhfdGFzayk7CisJdGFza2xldF9raWxsKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCiAJLyogU3RvcCBoYXJkd2FyZSAqLwogCW13bDhrX2h3X3Jlc2V0KHByaXYpOwogCiAJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCiAJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQotCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgMSk7CisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCBJTlRfTUFYLCAxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKIAkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKaW5kZXggNDA0ODMwZi4uZTYzNjkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIH0KIAogaW50IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIGludCBtY19jb3VudCwgaW50IHByb21pc2MpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwpAQCAtMTA0OSwyNCArMTA0OSwxNiBAQAogCSAqIGdyb3VwIGFkZHJlc3MgaWYgZWl0aGVyIHdlIHdhbnQgdG8gbXVsdGljYXN0LCBvciBpZiB3ZSB3ZXJlCiAJICogbXVsdGljYXN0aW5nIGFuZCB3YW50IHRvIHN0b3AgKi8KIAlpZiAoIXByb21pc2MgJiYgKG1jX2NvdW50IHx8IHByaXYtPm1jX2NvdW50KSkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKnAgPSBtY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKnA7CiAJCXN0cnVjdCBoZXJtZXNfbXVsdGljYXN0IG1jbGlzdDsKLQkJaW50IGk7CisJCWludCBpID0gMDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJLyogcGFyYW5vaWE6IGlzIGxpc3Qgc2hvcnRlciB0aGFuIG1jX2NvdW50PyAqLwotCQkJQlVHX09OKCFwKTsKLQkJCS8qIHBhcmFub2lhOiBiYWQgYWRkcmVzcyBzaXplIGluIGxpc3Q/ICovCi0JCQlCVUdfT04ocC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pOwotCi0JCQltZW1jcHkobWNsaXN0LmFkZHJbaV0sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0JCQlwID0gcC0+bmV4dDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIocCwgZGV2KSB7CisJCQlpZiAoaSA9PSBtY19jb3VudCkKKwkJCQlicmVhazsKKwkJCW1lbWNweShtY2xpc3QuYWRkcltpKytdLCBwLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQl9CiAKLQkJaWYgKHApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTXVsdGljYXN0IGxpc3QgaXMgIgotCQkJICAgICAgICJsb25nZXIgdGhhbiBtY19jb3VudFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7Ci0KIAkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCiAJCQkJICAgSEVSTUVTX1JJRF9DTkZHUk9VUEFERFJFU1NFUywKIAkJCQkgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG1jX2NvdW50ICogRVRIX0FMRU4pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCmluZGV4IGUyZjdmZGMuLjk3OTlhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKQEAgLTQzLDcgKzQzLDcgQEAKIAkJCSAgICAgIHU4ICp0c2MsIHNpemVfdCB0c2NfbGVuKTsKIGludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KTsKIGludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICBpbnQgbWNfY291bnQsIGludCBwcm9taXNjKTsKIGludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKIAkJCSBjaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCmluZGV4IDc1M2ExODAuLmI0MjYzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0xNjY4LDE2ICsxNjY4LDE1IEBACiAJLyogVGhlIEhlcm1lcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbiBhbGxtdWx0aSBtb2RlLCBzbyB3ZSBnbwogCSAqIGludG8gcHJvbWlzY3VvdXMgbW9kZSBhbmQgbGV0IHRoZSB1cHBlciBsZXZlbHMgZGVhbC4gKi8KIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVChwcml2KSkpIHsKKwkgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gTUFYX01VTFRJQ0FTVChwcml2KSkpIHsKIAkJcHJvbWlzYyA9IDE7CiAJCW1jX2NvdW50ID0gMDsKIAl9IGVsc2UgewogCQlwcm9taXNjID0gMDsKLQkJbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCQltY19jb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCX0KIAotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3QocHJpdiwgZGV2LT5tY19saXN0LCBtY19jb3VudCwKLQkJCQkJICAgICAgcHJvbWlzYyk7CisJZXJyID0gX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChwcml2LCBkZXYsIG1jX2NvdW50LCBwcm9taXNjKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCmluZGV4IGYyN2JiODMuLjFkNGFkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCkBAIC00MDcsNyArNDA3LDYgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiM0NvbSIsICIzQ1JXRTczN0EgQWlyQ29ubmVjdCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4NDEyNDBlNWIsIDB4NTYwMTBhZjMpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBQ1RJT05URUMiLCAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDM5MzA4OWRhLCAweGE3MWU2OWQ1KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQWRkdHJvbiIsICJBV1AtMTAwIFdpcmVsZXNzIFBDTUNJQSIsIDB4ZTZlYzUyY2UsIDB4MDg2NDlhZjIpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiQUlSVkFTVCIsICJJRUVFIDgwMi4xMWIgV2lyZWxlc3MgUENNQ0lBIENhcmQiLCAiSEZBMzg2MyIsIDB4ZWE1Njk1MzEsIDB4NGJjYjk2NDUsIDB4MzU1Y2IwOTIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBbGxpZWQgVGVsZXN5biIsICJBVC1XQ0w0NTIgV2lyZWxlc3MgUENNQ0lBIFJhZGlvIiwgMHg1Y2QwMTcwNSwgMHg0MjcxNjYwZiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFTVVMiLCAiODAyXzExYl9QQ19DQVJEXzI1IiwgMHg3OGZjMDZlZSwgMHhkYjlhYTg0MiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFTVVMiLCAiODAyXzExQl9DRl9DQVJEXzI1IiwgMHg3OGZjMDZlZSwgMHg0NWE1MGMxZSksCkBAIC00MTcsNyArNDE2LDYgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIsIDB4MmRlY2VjZTMsIDB4ODIwNjdjMTgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJDYWJsZXRyb24iLCAiUm9hbUFib3V0IDgwMi4xMSBEUyIsIDB4MzJkNDQ1ZjUsIDB4ZWRlZmZkOTApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJDb21wYXEiLCAiV0wyMDBfMTFNYnBzX1dpcmVsZXNzX1BDSV9DYXJkIiwgMHg1NGY3YzQ5YywgMHgxNWE3NWU1YiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLCAweDBhMjE1MDFhLCAweDU5ODY4OTI2LCAweGM5MDQ5YTM5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiV2lyZWxlc3MgTEFOIFBDQy0xMSIsIDB4NTI2MTQ0MGYsIDB4YTY0MDU1ODQpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJXaXJlbGVzcyBMQU4gUENDQS0xMSIsIDB4NTI2MTQ0MGYsIDB4ZGY2MTE1ZjkpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2FfSy5LLiIsICJXaXJlbGVzc19MQU5fUENDQi0xMSIsIDB4MjllMzMzMTEsIDB4ZWU3YTI3YWUpLApAQCAtNDMyLDcgKzQzMCw2IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklOVEVSU0lMIiwgIkhGQTM4NHgvSUVFRSIsIDB4NzRjNWU0MGQsIDB4ZGI0NzJhMTgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJTlRFUlNJTCIsICJJLUdBVEUgMTFNIFBDIENhcmQgLyBQQyBDYXJkIHBsdXMiLCAweDc0YzVlNDBkLCAweDgzMDRmZjc3KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSW50ZXJzaWwiLCAiUFJJU00gMl81IFBDTUNJQSBBREFQVEVSIiwgMHg0YjgwMWExNywgMHg2MzQ1YTBiZiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJJbnRlcnNpbCIsICJQUklTTSBGcmVlZG9tIFBDTUNJQSBBZGFwdGVyIiwgIklTTDM3MTAwUCIsIDB4NGI4MDFhMTcsIDB4ZjIyMmVjMmQsIDB4NjMwZDUyYjIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMZUFydGVyeSIsICJTWU5DQllBSVIgMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg3ZTNiMzI2YSwgMHg0OTg5M2U5MiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiLCAweDA3MzNjYzgxLCAweDBjNTJmMzk1KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTHVjZW50IFRlY2hub2xvZ2llcyIsICJXYXZlTEFOL0lFRUUiLCAweDIzZWI5OTQ5LCAweGM1NjJlNzJhKSwKQEAgLTQ0NSw3ICs0NDIsNiBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJOb3J0ZWwgTmV0d29ya3MiLCAiZW1vYmlsaXR5IDgwMi4xMSBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4MmQ2MTdlYTAsIDB4ODhjZDU3NjcpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJPRU0iLCAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAweGZlYTU0YzkwLCAweDQ4ZjJiZGQ2KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiT1RDIiwgIldpcmVsZXNzIEFpckVaWSAyNDExLVBDQyBXTEFOIENhcmQiLCAweDRhYzQ0Mjg3LCAweDIzNWE2YmVkKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlBDTUNJQSIsICIxMU0gV0xBTiBDYXJkIHYyLjUiLCAiSVNMMzczMDBQIiwgMHgyODFmMWM1ZCwgMHg2ZTQ0MDQ4NywgMHhjOTA0OWEzOSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBMQU5FWCIsICJHZW9XYXZlL0dXLUNGMTEwIiwgMHgyMDlmNDBhYiwgMHhkOTcxNTI2NCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBMQU5FWCIsICJHZW9XYXZlL0dXLU5TMTEwIiwgMHgyMDlmNDBhYiwgMHg0NjI2MzE3OCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBST1hJTSIsICJMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIsIDB4YzY1MzZhNWUsIDB4MDkwYzNjZDkpLApAQCAtNDU0LDggKzQ1MCwxMSBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiU01DMjUzMlctQiBFbGl0ZUNvbm5lY3QgV2lyZWxlc3MgQWRhcHRlciIsIDB4YzRmOGIxOGIsIDB4MTk2YmQ3NTcpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiU01DMjYzMlciLCAweGM0ZjhiMThiLCAweDQ3NGExZjJhKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU3ltYm9sIFRlY2hub2xvZ2llcyIsICJMQTQxMTEgU3BlY3RydW0yNCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4M2YwMmI0ZDYsIDB4MzY2M2NiMGUpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiVGhlIExpbmtzeXMgR3JvdXAsIEluYy4iLCAiSW5zdGFudCBXaXJlbGVzcyBOZXR3b3JrIFBDIENhcmQiLCAiSVNMMzczMDBQIiwgMHhhNWY0NzJjMiwgMHg1OTBlYjUwMiwgMHhjOTA0OWEzOSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAiUmF0ZSB3aXJlbGVzcyBOZXR3b3JraW5nIiwgMHgyNzNmZTNkYiwgMHgzMmExZWFlZSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMygiSEZBMzg2MyIsIDB4MzU1Y2IwOTIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MTAwUCIsIDB4NjMwZDUyYjIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MTAxUC0xMCIsIDB4ZGQ5N2EyNmIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MzAwUCIsIDB4YzkwNDlhMzkpLAogCVBDTUNJQV9ERVZJQ0VfTlVMTCwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgb3Jpbm9jb19jc19pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCmluZGV4IGMxM2E0YzMuLjA3NWY0NDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX25vcnRlbF9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG9yaW5vY29fbm9ydGVsX2lkX3RhYmxlKSA9IHsKIAkvKiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSAqLwogCXsweDEyNmMsIDB4ODAzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCS8qIFN5bWJvbCBMQS00MTIzIFBDSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCmluZGV4IGZlYTc3ODEuLmJkYTUzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGNpX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob3Jpbm9jb19wY2lfaWRfdGFibGUpID0gewogCS8qIEludGVyc2lsIFByaXNtIDMgKi8KIAl7MHgxMjYwLCAweDM4NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBJbnRlcnNpbCBQcmlzbSAyLjUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwppbmRleCAzZjI5NDJhLi5lMGQ1ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BseF9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG9yaW5vY29fcGx4X2lkX3RhYmxlKSA9IHsKIAl7MHgxMTFhLCAweDEwMjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwJLyogU2llbWVucyBTcGVlZFN0cmVhbSBTUzEwMjMgKi8KIAl7MHgxMzg1LCAweDQxMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwJLyogTmV0Z2VhciBNQTMwMSAqLwogCXsweDE1ZTgsIDB4MDEzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAkvKiBDb3JyZWdhICAtIGRvZXMgdGhpcyB3b3JrPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCmluZGV4IGQzNDUyNTQuLjg4Y2JjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fdG1kX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob3Jpbm9jb190bWRfaWRfdGFibGUpID0gewogCXsweDE1ZTgsIDB4MDEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LCAgICAgIC8qIE5EQyBhbmQgT0VNcywgZS5nLiBwaGVlY29tICovCiAJezAsfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwppbmRleCAxODAxMmRiLi40Zjc1MmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTMzLDIxICszMywyOSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwcmlzbTU0Y29tbW9uIik7CiAKK3N0YXRpYyBpbnQgcDU0X3N0YV9hZGRfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBody0+cHJpdjsKKworCS8qCisJICogTm90aWZ5IHRoZSBmaXJtd2FyZSB0aGF0IHdlIGRvbid0IHdhbnQgb3Igd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIGJ1ZmZlciBmcmFtZXMgZm9yIHRoaXMgc3RhdGlvbiBhbnltb3JlLgorCSAqLworCisJcDU0X3N0YV91bmxvY2socHJpdiwgc3RhLT5hZGRyKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwNTRfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN3aXRjaCAobm90aWZ5X2NtZCkgewotCWNhc2UgU1RBX05PVElGWV9BREQ6Ci0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJLyoKLQkJICogTm90aWZ5IHRoZSBmaXJtd2FyZSB0aGF0IHdlIGRvbid0IHdhbnQgb3Igd2UgZG9uJ3QKLQkJICogbmVlZCB0byBidWZmZXIgZnJhbWVzIGZvciB0aGlzIHN0YXRpb24gYW55bW9yZS4KLQkJICovCiAKLQkJcDU0X3N0YV91bmxvY2socHJpdiwgc3RhLT5hZGRyKTsKLQkJYnJlYWs7CisJc3dpdGNoIChub3RpZnlfY21kKSB7CiAJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgogCQkvKiB1cGRhdGUgdGhlIGZpcm13YXJlJ3MgZmlsdGVyIHRhYmxlICovCiAJCXA1NF9zdGFfdW5sb2NrKHByaXYsIHN0YS0+YWRkcik7CkBAIC0yMTYsNyArMjI0LDcgQEAKIH0KIAogc3RhdGljIGludCBwNTRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCkBAIC0yMjYsMjggKzIzNCwyOCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JcHJpdi0+dmlmID0gY29uZi0+dmlmOworCXByaXYtPnZpZiA9IHZpZjsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOworCQlwcml2LT5tb2RlID0gdmlmLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAJcDU0X3NldHVwX21hYyhwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwNTRfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCkBAIC0zNTgsMTYgKzM2Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcDU0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0sCi0JICAgICAgIHNpemVvZihzdGF0c1swXSkgKiBkZXYtPnF1ZXVlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHA1NF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKQEAgLTUxNiwxMyArNTE0LDE0IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBwNTRfcmVtb3ZlX2ludGVyZmFjZSwKIAkuc2V0X3RpbQkJPSBwNTRfc2V0X3RpbSwKIAkuc3RhX25vdGlmeQkJPSBwNTRfc3RhX25vdGlmeSwKKwkuc3RhX2FkZAkJPSBwNTRfc3RhX2FkZF9yZW1vdmUsCisJLnN0YV9yZW1vdmUJCT0gcDU0X3N0YV9hZGRfcmVtb3ZlLAogCS5zZXRfa2V5CQk9IHA1NF9zZXRfa2V5LAogCS5jb25maWcJCQk9IHA1NF9jb25maWcsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBwNTRfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHA1NF9jb25maWd1cmVfZmlsdGVyLAogCS5jb25mX3R4CQk9IHA1NF9jb25mX3R4LAogCS5nZXRfc3RhdHMJCT0gcDU0X2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzCQk9IHA1NF9nZXRfdHhfc3RhdHMKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAppbmRleCAxYWZjMzk0Li40M2EzYjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCkBAIC0xNTcsNiArMTU3LDEyIEBACiAKICNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KIAorc3RydWN0IHA1NF90eF9xdWV1ZV9zdGF0cyB7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CisJdW5zaWduZWQgaW50IGNvdW50OworfTsKKwogc3RydWN0IHA1NF9jb21tb24gewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CkBAIC0xODMsNyArMTg5LDcgQEAKIAkvKiAoZSlEQ0YgLyBRT1Mgc3RhdGUgKi8KIAlib29sIHVzZV9zaG9ydF9zbG90OwogCXNwaW5sb2NrX3QgdHhfc3RhdHNfbG9jazsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzhdOworCXN0cnVjdCBwNTRfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbOF07CiAJc3RydWN0IHA1NF9lZGNmX3F1ZXVlX3BhcmFtIHFvc19wYXJhbXNbOF07CiAKIAkvKiBSYWRpbyBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggYTcyZjdjMi4uZWQ0YmRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtMzEsNyArMzEsNyBAQAogTU9EVUxFX0FMSUFTKCJwcmlzbTU0cGNpIik7CiBNT0RVTEVfRklSTVdBUkUoImlzbDM4ODZwY2kiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHA1NHBfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHA1NHBfdGFibGUpID0gewogCS8qIEludGVyc2lsIFBSSVNNIER1ZXR0ZS9QcmlzbSBHVCBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwogCXsgUENJX0RFVklDRSgweDEyNjAsIDB4Mzg5MCkgfSwKIAkvKiAzQ09NIDNDUldFMTU0RzcyIFdpcmVsZXNzIExBTiBhZGFwdGVyICovCkBAIC0xNTcsNiArMTU3LDE0IEBACiAJCQkJCQkgc2tiX3RhaWxfcG9pbnRlcihza2IpLAogCQkJCQkJIHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwKIAkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIG1hcHBpbmcpKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsCisJCQkJCSJSWCBETUEgTWFwcGluZyBlcnJvclxuIik7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCWRlc2MtPmhvc3RfYWRkciA9IGNwdV90b19sZTMyKG1hcHBpbmcpOwogCQkJZGVzYy0+ZGV2aWNlX2FkZHIgPSAwOwkvLyBGSVhNRTogbmVjZXNzYXJ5PwogCQkJZGVzYy0+bGVuID0gY3B1X3RvX2xlMTYocHJpdi0+Y29tbW9uLnJ4X210dSArIDMyKTsKQEAgLTIyNiwxNCArMjM0LDE0IEBACiAJcDU0cF9yZWZpbGxfcnhfcmluZyhkZXYsIHJpbmdfaW5kZXgsIHJpbmcsIHJpbmdfbGltaXQsIHJ4X2J1Zik7CiB9CiAKLS8qIGNhbGxlciBtdXN0IGhvbGQgcHJpdi0+bG9jayAqLwogc3RhdGljIHZvaWQgcDU0cF9jaGVja190eF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyICppbmRleCwKIAlpbnQgcmluZ19pbmRleCwgc3RydWN0IHA1NHBfZGVzYyAqcmluZywgdTMyIHJpbmdfbGltaXQsCi0Jdm9pZCAqKnR4X2J1ZikKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X2J1ZikKIHsKIAlzdHJ1Y3QgcDU0cF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRwX3JpbmdfY29udHJvbCAqcmluZ19jb250cm9sID0gcHJpdi0+cmluZ19jb250cm9sOwogCXN0cnVjdCBwNTRwX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgaWR4LCBpOwogCiAJaSA9ICgqaW5kZXgpICUgcmluZ19saW1pdDsKQEAgLTI0Miw5ICsyNTAsOCBAQAogCiAJd2hpbGUgKGkgIT0gaWR4KSB7CiAJCWRlc2MgPSAmcmluZ1tpXTsKLQkJaWYgKHR4X2J1ZltpXSkKLQkJCWlmIChGUkVFX0FGVEVSX1RYKChzdHJ1Y3Qgc2tfYnVmZiAqKSB0eF9idWZbaV0pKQotCQkJCXA1NF9mcmVlX3NrYihkZXYsIHR4X2J1ZltpXSk7CisKKwkJc2tiID0gdHhfYnVmW2ldOwogCQl0eF9idWZbaV0gPSBOVUxMOwogCiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90b19jcHUoZGVzYy0+aG9zdF9hZGRyKSwKQEAgLTI1NSwxNyArMjYyLDI4IEBACiAJCWRlc2MtPmxlbiA9IDA7CiAJCWRlc2MtPmZsYWdzID0gMDsKIAorCQlpZiAoc2tiICYmIEZSRUVfQUZURVJfVFgoc2tiKSkKKwkJCXA1NF9mcmVlX3NrYihkZXYsIHNrYik7CisKIAkJaSsrOwogCQlpICU9IHJpbmdfbGltaXQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwNTRwX3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXZfaWQpCitzdGF0aWMgdm9pZCBwNTRwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXZfaWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKilkZXZfaWQ7CiAJc3RydWN0IHA1NHBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcDU0cF9yaW5nX2NvbnRyb2wgKnJpbmdfY29udHJvbCA9IHByaXYtPnJpbmdfY29udHJvbDsKIAorCXA1NHBfY2hlY2tfdHhfcmluZyhkZXYsICZwcml2LT50eF9pZHhfbWdtdCwgMywgcmluZ19jb250cm9sLT50eF9tZ210LAorCQkJICAgQVJSQVlfU0laRShyaW5nX2NvbnRyb2wtPnR4X21nbXQpLAorCQkJICAgcHJpdi0+dHhfYnVmX21nbXQpOworCisJcDU0cF9jaGVja190eF9yaW5nKGRldiwgJnByaXYtPnR4X2lkeF9kYXRhLCAxLCByaW5nX2NvbnRyb2wtPnR4X2RhdGEsCisJCQkgICBBUlJBWV9TSVpFKHJpbmdfY29udHJvbC0+dHhfZGF0YSksCisJCQkgICBwcml2LT50eF9idWZfZGF0YSk7CisKIAlwNTRwX2NoZWNrX3J4X3JpbmcoZGV2LCAmcHJpdi0+cnhfaWR4X21nbXQsIDIsIHJpbmdfY29udHJvbC0+cnhfbWdtdCwKIAkJQVJSQVlfU0laRShyaW5nX2NvbnRyb2wtPnJ4X21nbXQpLCBwcml2LT5yeF9idWZfbWdtdCk7CiAKQEAgLTI4MCw1OSArMjk4LDQ5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBwNTRwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NHBfcmluZ19jb250cm9sICpyaW5nX2NvbnRyb2wgPSBwcml2LT5yaW5nX2NvbnRyb2w7CiAJX19sZTMyIHJlZzsKIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAJcmVnID0gUDU0UF9SRUFEKGludF9pZGVudCk7CiAJaWYgKHVubGlrZWx5KHJlZyA9PSBjcHVfdG9fbGUzMigweEZGRkZGRkZGKSkpIHsKLQkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCWdvdG8gb3V0OwogCX0KLQogCVA1NFBfV1JJVEUoaW50X2FjaywgcmVnKTsKIAogCXJlZyAmPSBQNTRQX1JFQUQoaW50X2VuYWJsZSk7CiAKLQlpZiAocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfVVBEQVRFKSkgewotCQlwNTRwX2NoZWNrX3R4X3JpbmcoZGV2LCAmcHJpdi0+dHhfaWR4X21nbXQsCi0JCQkJICAgMywgcmluZ19jb250cm9sLT50eF9tZ210LAotCQkJCSAgIEFSUkFZX1NJWkUocmluZ19jb250cm9sLT50eF9tZ210KSwKLQkJCQkgICBwcml2LT50eF9idWZfbWdtdCk7Ci0KLQkJcDU0cF9jaGVja190eF9yaW5nKGRldiwgJnByaXYtPnR4X2lkeF9kYXRhLAotCQkJCSAgIDEsIHJpbmdfY29udHJvbC0+dHhfZGF0YSwKLQkJCQkgICBBUlJBWV9TSVpFKHJpbmdfY29udHJvbC0+dHhfZGF0YSksCi0JCQkJICAgcHJpdi0+dHhfYnVmX2RhdGEpOwotCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCi0JfSBlbHNlIGlmIChyZWcgJiBjcHVfdG9fbGUzMihJU0wzOFhYX0lOVF9JREVOVF9JTklUKSkKKwlpZiAocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfVVBEQVRFKSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+dGFza2xldCk7CisJZWxzZSBpZiAocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfSU5JVCkpCiAJCWNvbXBsZXRlKCZwcml2LT5ib290X2NvbXApOwogCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCitvdXQ6CiAJcmV0dXJuIHJlZyA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CiAKIHN0YXRpYyB2b2lkIHA1NHBfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHA1NHBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcDU0cF9yaW5nX2NvbnRyb2wgKnJpbmdfY29udHJvbCA9IHByaXYtPnJpbmdfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwNTRwX2Rlc2MgKmRlc2M7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUzMiBkZXZpY2VfaWR4LCBpZHgsIGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCiAJZGV2aWNlX2lkeCA9IGxlMzJfdG9fY3B1KHJpbmdfY29udHJvbC0+ZGV2aWNlX2lkeFsxXSk7CiAJaWR4ID0gbGUzMl90b19jcHUocmluZ19jb250cm9sLT5ob3N0X2lkeFsxXSk7CiAJaSA9IGlkeCAlIEFSUkFZX1NJWkUocmluZ19jb250cm9sLT50eF9kYXRhKTsKIAotCXByaXYtPnR4X2J1Zl9kYXRhW2ldID0gc2tiOwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIG1hcHBpbmcpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcDU0X2ZyZWVfc2tiKGRldiwgc2tiKTsKKwkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcHBpbmcgZXJyb3JcbiIpOworCQlyZXR1cm4gOworCX0KKwlwcml2LT50eF9idWZfZGF0YVtpXSA9IHNrYjsKKwogCWRlc2MgPSAmcmluZ19jb250cm9sLT50eF9kYXRhW2ldOwogCWRlc2MtPmhvc3RfYWRkciA9IGNwdV90b19sZTMyKG1hcHBpbmcpOwogCWRlc2MtPmRldmljZV9hZGRyID0gKChzdHJ1Y3QgcDU0X2hkciAqKXNrYi0+ZGF0YSktPnJlcV9pZDsKQEAgLTM1NCwxNCArMzYyLDE0IEBACiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IHA1NHBfZGVzYyAqZGVzYzsKIAotCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7Ci0KIAlQNTRQX1dSSVRFKGludF9lbmFibGUsIGNwdV90b19sZTMyKDApKTsKIAlQNTRQX1JFQUQoaW50X2VuYWJsZSk7CiAJdWRlbGF5KDEwKTsKIAogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgZGV2KTsKIAorCXRhc2tsZXRfa2lsbCgmcHJpdi0+dGFza2xldCk7CisKIAlQNTRQX1dSSVRFKGRldl9pbnQsIGNwdV90b19sZTMyKElTTDM4WFhfREVWX0lOVF9SRVNFVCkpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+cnhfYnVmX2RhdGEpOyBpKyspIHsKQEAgLTU0NSw3ICs1NTMsNyBAQAogCXByaXYtPmNvbW1vbi50eCA9IHA1NHBfdHg7CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0JdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBwNTRwX3J4X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisJdGFza2xldF9pbml0KCZwcml2LT50YXNrbGV0LCBwNTRwX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODZwY2kiLAogCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oCmluZGV4IGZiYjY4MzkuLjJmZWVhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmgKQEAgLTkyLDcgKzkyLDcgQEAKIAlzdHJ1Y3QgcDU0X2NvbW1vbiBjb21tb247CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IHA1NHBfY3NyIF9faW9tZW0gKm1hcDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgcDU0cF9yaW5nX2NvbnRyb2wgKnJpbmdfY29udHJvbDsKQEAgLTEwMSw4ICsxMDEsOCBAQAogCXUzMiByeF9pZHhfbWdtdCwgdHhfaWR4X21nbXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnJ4X2J1Zl9kYXRhWzhdOwogCXN0cnVjdCBza19idWZmICpyeF9idWZfbWdtdFs0XTsKLQl2b2lkICp0eF9idWZfZGF0YVszMl07Ci0Jdm9pZCAqdHhfYnVmX21nbXRbNF07CisJc3RydWN0IHNrX2J1ZmYgKnR4X2J1Zl9kYXRhWzMyXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfYnVmX21nbXRbNF07CiAJc3RydWN0IGNvbXBsZXRpb24gYm9vdF9jb21wOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDkyYWY5YjkuLmIzYzRmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAkvKiBWZXJzaW9uIDEgZGV2aWNlcyAocGNpIGNoaXAgKyBuZXQyMjgwKSAqLwogCXtVU0JfREVWSUNFKDB4MDUwNiwgMHgwYTExKX0sCS8qIDNDT00gM0NSV0UyNTRHNzIgKi8KIAl7VVNCX0RFVklDRSgweDA3MDcsIDB4ZWUwNil9LAkvKiBTTUMgMjg2MlctRyAqLworCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDFjKX0sCS8qIENvcmVnYSBDRy1XTFVTQjJHVCAqLwogCXtVU0JfREVWSUNFKDB4MDgzYSwgMHg0NTAxKX0sCS8qIEFjY3RvbiA4MDIuMTFnIFdONDUwMSBVU0IgKi8KIAl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUwMil9LAkvKiBTaWVtZW5zIEdpZ2FzZXQgVVNCIEFkYXB0ZXIgKi8KIAl7VVNCX0RFVklDRSgweDA4M2EsIDB4NTUwMSl9LAkvKiBQaGlsbGlwcyBDUFdVQTA1NCAqLwpAQCAtNjAsNiArNjEsNyBAQAogCXtVU0JfREVWSUNFKDB4MDZiOSwgMHgwMTIxKX0sCS8qIFRob21zb24gU3BlZWRUb3VjaCAxMjFnICovCiAJe1VTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMTMpfSwgICAvKiBTTUMgMjg2MlctRyB2ZXJzaW9uIDIgKi8KIAl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUyMSl9LCAgIC8qIFNpZW1lbnMgR2lnYXNldCBVU0IgQWRhcHRlciA1NCB2ZXJzaW9uIDIgKi8KKwl7VVNCX0RFVklDRSgweDA4M2EsIDB4ZjUwMyl9LAkvKiBBY2N0b24gRkQ3MDUwRSB2ZXIgMTAxMGVjICAqLwogCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg0MjQwKX0sCS8qIE5ldGdlYXIgV0cxMTEgKHYyKSAqLwogCXtVU0JfREVWSUNFKDB4MDkxNSwgMHgyMDAwKX0sCS8qIENvaGliYSBQcm90byBib2FyZCAqLwogCXtVU0JfREVWSUNFKDB4MDkxNSwgMHgyMDAyKX0sCS8qIENvaGliYSBQcm90byBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKaW5kZXggYjZkZGEyYi4uNjYwNTc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCkBAIC0xODMsMTAgKzE4MywxMCBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBjb25zdCB1MTYgcDU0X3F1ZXVlKQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnF1ZXVlOworCXN0cnVjdCBwNTRfdHhfcXVldWVfc3RhdHMgKnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoV0FSTl9PTihwNTRfcXVldWUgPiBQNTRfUVVFVUVfTlVNKSkKKwlpZiAoV0FSTl9PTihwNTRfcXVldWUgPj0gUDU0X1FVRVVFX05VTSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcXVldWUgPSAmcHJpdi0+dHhfc3RhdHNbcDU0X3F1ZXVlXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwppbmRleCBlNGYyYmI3Li5kYzE0NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBkcml2ZXJfZGF0YQogICogSWYgeW91IGhhdmUgYW4gdXBkYXRlIGZvciB0aGlzIHBsZWFzZSBjb250YWN0IHByaXNtNTQtZGV2ZWxAcHJpc201NC5vcmcKICAqIFRoZSBsYXRlc3QgbGlzdCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3ByaXNtNTQub3JnL3N1cHBvcnRlZF9jYXJkcy5waHAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwcmlzbTU0X2lkX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHByaXNtNTRfaWRfdGJsKSA9IHsKIAkvKiBJbnRlcnNpbCBQUklTTSBEdWV0dGUvUHJpc20gR1QgV2lyZWxlc3MgTEFOIGFkYXB0ZXIgKi8KIAl7CiAJIDB4MTI2MCwgMHgzODkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGUxZTRlLi44NGM1MzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMTg3MSwxMCArMTg3MSw4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCkKIHsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOwogCWludCBjY3NpbmRleDsKIAlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0JaW50IGkgPSAwOwogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAl2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CkBAIC0xODk1LDkgKzE4OTMsMTEgQEAKIAkJd3JpdGViKDB4ZmYsICZwY2NzLT52YXIpOwogCQlsb2NhbC0+bnVtX211bHRpID0gMHhmZjsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKKwkJaW50IGkgPSAwOworCiAJCS8qIENvcHkgdGhlIGtlcm5lbCdzIGxpc3Qgb2YgTUMgYWRkcmVzc2VzIHRvIGNhcmQgKi8KLQkJZm9yIChkbWlwID0gJmRldi0+bWNfbGlzdDsgKGRtaSA9ICpkbWlwKSAhPSBOVUxMOwotCQkgICAgIGRtaXAgPSAmZG1pLT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQltZW1jcHlfdG9pbyhwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkgICAgICAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCkBAIC0xOTUwLDcgKzE5NTAsNyBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAxKTsKIAllbHNlIHsKLQkJaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gZGV2LT5tY19jb3VudCkKKwkJaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gbmV0ZGV2X21jX2NvdW50KGRldikpCiAJCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAwKTsKIAl9CiB9IC8qIGVuZCBzZXRfbXVsdGljYXN0X2xpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCAyZWNiZWRiLi45ZjZkNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC03MjgsOSArNzI4LDkgQEAKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CiAJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IDA7CiAJaWYgKHJldCA8IDApCi0JCWRldmRiZyhkZXYsICJybmRpc19xdWVyeV9vaWQoJXMpOiBybmRpc19jb21tYW5kKCkgZmFpbGVkLCAlZCAiCi0JCQkiKCUwOHgpIiwgb2lkX3RvX3N0cmluZyhvaWQpLCByZXQsCi0JCQlsZTMyX3RvX2NwdSh1LmdldF9jLT5zdGF0dXMpKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIiVzKCVzKTogcm5kaXNfY29tbWFuZCgpIGZhaWxlZCwgJWQgKCUwOHgpXG4iLAorCQkJICAgX19mdW5jX18sIG9pZF90b19zdHJpbmcob2lkKSwgcmV0LAorCQkJICAgbGUzMl90b19jcHUodS5nZXRfYy0+c3RhdHVzKSk7CiAKIAlpZiAocmV0ID09IDApIHsKIAkJbWVtY3B5KGRhdGEsIHUuYnVmICsgbGUzMl90b19jcHUodS5nZXRfYy0+b2Zmc2V0KSArIDgsICpsZW4pOwpAQCAtNzQxLDkgKzc0MSw5IEBACiAKIAkJcmV0ID0gcm5kaXNfZXJyb3Jfc3RhdHVzKHUuZ2V0X2MtPnN0YXR1cyk7CiAJCWlmIChyZXQgPCAwKQotCQkJZGV2ZGJnKGRldiwgInJuZGlzX3F1ZXJ5X29pZCglcyk6IGRldmljZSByZXR1cm5lZCAiCi0JCQkJImVycm9yLCAgMHglMDh4ICglZCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksCi0JCQkJbGUzMl90b19jcHUodS5nZXRfYy0+c3RhdHVzKSwgcmV0KTsKKwkJCW5ldGRldl9kYmcoZGV2LT5uZXQsICIlcyglcyk6IGRldmljZSByZXR1cm5lZCBlcnJvciwgIDB4JTA4eCAoJWQpXG4iLAorCQkJCSAgIF9fZnVuY19fLCBvaWRfdG9fc3RyaW5nKG9pZCksCisJCQkJICAgbGUzMl90b19jcHUodS5nZXRfYy0+c3RhdHVzKSwgcmV0KTsKIAl9CiAKIAltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CkBAIC03OTEsMTcgKzc5MSwxNyBAQAogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKIAlwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID0gMDsKIAlpZiAocmV0IDwgMCkKLQkJZGV2ZGJnKGRldiwgInJuZGlzX3NldF9vaWQoJXMpOiBybmRpc19jb21tYW5kKCkgZmFpbGVkLCAlZCAiCi0JCQkiKCUwOHgpIiwgb2lkX3RvX3N0cmluZyhvaWQpLCByZXQsCi0JCQlsZTMyX3RvX2NwdSh1LnNldF9jLT5zdGF0dXMpKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIiVzKCVzKTogcm5kaXNfY29tbWFuZCgpIGZhaWxlZCwgJWQgKCUwOHgpXG4iLAorCQkJICAgX19mdW5jX18sIG9pZF90b19zdHJpbmcob2lkKSwgcmV0LAorCQkJICAgbGUzMl90b19jcHUodS5zZXRfYy0+c3RhdHVzKSk7CiAKIAlpZiAocmV0ID09IDApIHsKIAkJcmV0ID0gcm5kaXNfZXJyb3Jfc3RhdHVzKHUuc2V0X2MtPnN0YXR1cyk7CiAKIAkJaWYgKHJldCA8IDApCi0JCQlkZXZkYmcoZGV2LCAicm5kaXNfc2V0X29pZCglcyk6IGRldmljZSByZXR1cm5lZCBlcnJvciwgIgotCQkJCSIweCUwOHggKCVkKSIsIG9pZF90b19zdHJpbmcob2lkKSwKLQkJCQlsZTMyX3RvX2NwdSh1LnNldF9jLT5zdGF0dXMpLCByZXQpOworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIiVzKCVzKTogZGV2aWNlIHJldHVybmVkIGVycm9yLCAweCUwOHggKCVkKVxuIiwKKwkJCQkgICBfX2Z1bmNfXywgb2lkX3RvX3N0cmluZyhvaWQpLAorCQkJCSAgIGxlMzJfdG9fY3B1KHUuc2V0X2MtPnN0YXR1cyksIHJldCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb21tYW5kX2xvY2spOwpAQCAtODcwLDExICs4NzAsMTEgQEAKICNlbmRpZgogCiAJaWYgKHZhbHVlX3R5cGUgPT0gMikKLQkJZGV2ZGJnKGRldiwgInNldHRpbmcgY29uZmlnIHBhcmFtZXRlcjogJXMsIHZhbHVlOiAlcyIsCi0JCQkJCQlwYXJhbSwgKHU4ICopdmFsdWUpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAic2V0dGluZyBjb25maWcgcGFyYW1ldGVyOiAlcywgdmFsdWU6ICVzXG4iLAorCQkJICAgcGFyYW0sICh1OCAqKXZhbHVlKTsKIAllbHNlCi0JCWRldmRiZyhkZXYsICJzZXR0aW5nIGNvbmZpZyBwYXJhbWV0ZXI6ICVzLCB2YWx1ZTogJWQiLAotCQkJCQkJcGFyYW0sICoodTMyICopdmFsdWUpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAic2V0dGluZyBjb25maWcgcGFyYW1ldGVyOiAlcywgdmFsdWU6ICVkXG4iLAorCQkJICAgcGFyYW0sICoodTMyICopdmFsdWUpOwogCiAJaW5mb2J1Zi0+bmFtZV9vZmZzID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCppbmZvYnVmKSk7CiAJaW5mb2J1Zi0+bmFtZV9sZW5ndGggPSBjcHVfdG9fbGUzMihwYXJhbV9sZW4pOwpAQCAtODk3LDIwICs4OTcsMjEgQEAKIAl9CiAKICNpZmRlZiBERUJVRwotCWRldmRiZyhkZXYsICJpbmZvIGJ1ZmZlciAobGVuOiAlZCk6IiwgaW5mb19sZW4pOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJpbmZvIGJ1ZmZlciAobGVuOiAlZClcbiIsIGluZm9fbGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgaW5mb19sZW47IGkgKz0gMTIpIHsKIAkJdTMyICp0bXAgPSAodTMyICopKCh1OCAqKWluZm9idWYgKyBpKTsKLQkJZGV2ZGJnKGRldiwgIiUwOFg6JTA4WDolMDhYIiwKLQkJCWNwdV90b19iZTMyKHRtcFswXSksCi0JCQljcHVfdG9fYmUzMih0bXBbMV0pLAotCQkJY3B1X3RvX2JlMzIodG1wWzJdKSk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICIlMDhYOiUwOFg6JTA4WFxuIiwKKwkJCSAgIGNwdV90b19iZTMyKHRtcFswXSksCisJCQkgICBjcHVfdG9fYmUzMih0bXBbMV0pLAorCQkJICAgY3B1X3RvX2JlMzIodG1wWzJdKSk7CiAJfQogI2VuZGlmCiAKIAlyZXQgPSBybmRpc19zZXRfb2lkKGRldiwgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSLAogCQkJCQkJCWluZm9idWYsIGluZm9fbGVuKTsKIAlpZiAocmV0ICE9IDApCi0JCWRldmRiZyhkZXYsICJzZXR0aW5nIHJuZGlzIGNvbmZpZyBwYXJhbWV0ZXIgZmFpbGVkLCAlZC4iLCByZXQpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAic2V0dGluZyBybmRpcyBjb25maWcgcGFyYW1ldGVyIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCiAJa2ZyZWUoaW5mb2J1Zik7CiAJcmV0dXJuIHJldDsKQEAgLTk0NSwxMyArOTQ2LDEzIEBACiAKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9TU0lELCBzc2lkLCBzaXplb2YoKnNzaWQpKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKHVzYmRldiwgInNldHRpbmcgU1NJRCBmYWlsZWQgKCUwOFgpIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJzZXR0aW5nIFNTSUQgZmFpbGVkICglMDhYKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHJldCA9PSAwKSB7CiAJCW1lbWNweSgmcHJpdi0+ZXNzaWQsIHNzaWQsIHNpemVvZihwcml2LT5lc3NpZCkpOwogCQlwcml2LT5yYWRpb19vbiA9IHRydWU7Ci0JCWRldmRiZyh1c2JkZXYsICJzZXRfZXNzaWQ6IHJhZGlvX29uID0gdHJ1ZSIpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogcmFkaW9fb24gPSB0cnVlXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTk2Myw3ICs5NjQsOCBAQAogCiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSUQsIGJzc2lkLCBFVEhfQUxFTik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIEJTU0lEWyVwTV0gZmFpbGVkICglMDhYKSIsIGJzc2lkLCByZXQpOworCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgInNldHRpbmcgQlNTSURbJXBNXSBmYWlsZWQgKCUwOFgpXG4iLAorCQkJICAgIGJzc2lkLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTAyMSw3ICsxMDIzLDggQEAKIAkJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFLCBOVUxMLCAwKTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlwcml2LT5yYWRpb19vbiA9IGZhbHNlOwotCQkJZGV2ZGJnKHVzYmRldiwgImRpc2Fzc29jaWF0ZTogcmFkaW9fb24gPSBmYWxzZSIpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHJhZGlvX29uID0gZmFsc2VcbiIsCisJCQkJICAgX19mdW5jX18pOwogCiAJCQlpZiAocmVzZXRfc3NpZCkKIAkJCQltc2xlZXAoMTAwKTsKQEAgLTEwNTQsOCArMTA1Nyw4IEBACiAJX19sZTMyIHRtcDsKIAlpbnQgYXV0aF9tb2RlLCByZXQ7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X2F1dGhfbW9kZTogd3BhX3ZlcnNpb249MHgleCBhdXRoYWxnPTB4JXggIgotCQkia2V5bWdtdD0weCV4Iiwgd3BhX3ZlcnNpb24sIGF1dGhfdHlwZSwga2V5bWdtdCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHdwYV92ZXJzaW9uPTB4JXggYXV0aGFsZz0weCV4IGtleW1nbXQ9MHgleFxuIiwKKwkJICAgX19mdW5jX18sIHdwYV92ZXJzaW9uLCBhdXRoX3R5cGUsIGtleW1nbXQpOwogCiAJaWYgKHdwYV92ZXJzaW9uICYgTkw4MDIxMV9XUEFfVkVSU0lPTl8yKSB7CiAJCWlmIChrZXltZ210ICYgUk5ESVNfV0xBTl9LRVlfTUdNVF84MDJfMVgpCkBAIC0xMDgyLDcgKzEwODUsOCBAQAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUsICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIGF1dGggbW9kZSBmYWlsZWQgKCUwOFgpIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJzZXR0aW5nIGF1dGggbW9kZSBmYWlsZWQgKCUwOFgpXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMDk4LDcgKzExMDIsOCBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CiAJX19sZTMyIHRtcDsKIAotCWRldmRiZyh1c2JkZXYsICJzZXRfcHJpdl9maWx0ZXI6IHdwYV92ZXJzaW9uPTB4JXgiLCBwcml2LT53cGFfdmVyc2lvbik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHdwYV92ZXJzaW9uPTB4JXhcbiIsCisJCSAgIF9fZnVuY19fLCBwcml2LT53cGFfdmVyc2lvbik7CiAKIAlpZiAocHJpdi0+d3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzIgfHwKIAkgICAgcHJpdi0+d3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzEpCkBAIC0xMTE2LDggKzExMjEsOCBAQAogCV9fbGUzMiB0bXA7CiAJaW50IGVuY3JfbW9kZSwgcmV0OwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9lbmNyX21vZGU6IGNpcGhlcl9wYWlyPTB4JXggY2lwaGVyX2dyb3VwPTB4JXgiLAotCQlwYWlyd2lzZSwgZ3JvdXB3aXNlKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogY2lwaGVyX3BhaXI9MHgleCBjaXBoZXJfZ3JvdXA9MHgleFxuIiwKKwkJICAgX19mdW5jX18sIHBhaXJ3aXNlLCBncm91cHdpc2UpOwogCiAJaWYgKHBhaXJ3aXNlICYgUk5ESVNfV0xBTl9BTEdfQ0NNUCkKIAkJZW5jcl9tb2RlID0gTkRJU184MDIxMV9FTkNSX0NDTVBfRU5BQkxFRDsKQEAgLTExMzYsNyArMTE0MSw4IEBACiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMsICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIGVuY3IgbW9kZSBmYWlsZWQgKCUwOFgpIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJzZXR0aW5nIGVuY3IgbW9kZSBmYWlsZWQgKCUwOFgpXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMTUxLDEzICsxMTU3LDE1IEBACiAJX19sZTMyIHRtcDsKIAlpbnQgcmV0OwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9pbmZyYV9tb2RlOiBpbmZyYV9tb2RlPTB4JXgiLCBwcml2LT5pbmZyYV9tb2RlKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogaW5mcmFfbW9kZT0weCV4XG4iLAorCQkgICBfX2Z1bmNfXywgcHJpdi0+aW5mcmFfbW9kZSk7CiAKIAl0bXAgPSBjcHVfdG9fbGUzMihtb2RlKTsKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBpbmZyYSBtb2RlIGZhaWxlZCAoJTA4WCkiLCByZXQpOworCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgInNldHRpbmcgaW5mcmEgbW9kZSBmYWlsZWQgKCUwOFgpXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMTc0LDcgKzExODIsNyBAQAogewogCV9fbGUzMiB0bXA7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X3J0c190aHJlc2hvbGQgJWkiLCBydHNfdGhyZXNob2xkKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJWlcbiIsIF9fZnVuY19fLCBydHNfdGhyZXNob2xkKTsKIAogCWlmIChydHNfdGhyZXNob2xkIDwgMCB8fCBydHNfdGhyZXNob2xkID4gMjM0NykKIAkJcnRzX3RocmVzaG9sZCA9IDIzNDc7CkBAIC0xMTg4LDcgKzExOTYsNyBAQAogewogCV9fbGUzMiB0bXA7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X2ZyYWdfdGhyZXNob2xkICVpIiwgZnJhZ190aHJlc2hvbGQpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiAlaVxuIiwgX19mdW5jX18sIGZyYWdfdGhyZXNob2xkKTsKIAogCWlmIChmcmFnX3RocmVzaG9sZCA8IDI1NiB8fCBmcmFnX3RocmVzaG9sZCA+IDIzNDYpCiAJCWZyYWdfdGhyZXNob2xkID0gMjM0NjsKQEAgLTEyMjIsNyArMTIzMCw3IEBACiAJdW5zaWduZWQgaW50IGRzY29uZmlnOwogCWludCBsZW4sIHJldDsKIAotCWRldmRiZyh1c2JkZXYsICJzZXRfY2hhbm5lbCglZCkiLCBjaGFubmVsKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgY2hhbm5lbCk7CiAKIAkvKiB0aGlzIE9JRCBpcyB2YWxpZCBvbmx5IHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQpAQCAtMTIzMyw3ICsxMjQxLDggQEAKIAlsZW4gPSBzaXplb2YoY29uZmlnKTsKIAlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX0NPTkZJR1VSQVRJT04sICZjb25maWcsICZsZW4pOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJzZXRfY2hhbm5lbDogcXVlcnlpbmcgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHF1ZXJ5aW5nIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iLAorCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTI0MSw3ICsxMjUwLDcgQEAKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLAogCQkJCQkJCQlzaXplb2YoY29uZmlnKSk7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X2NoYW5uZWw6ICVkIC0+ICVkIiwgY2hhbm5lbCwgcmV0KTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJWQgLT4gJWRcbiIsIF9fZnVuY19fLCBjaGFubmVsLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNTUsNyArMTI2NCw4IEBACiAJdTMyIGNpcGhlcjsKIAlpbnQgcmV0OwogCi0JZGV2ZGJnKHVzYmRldiwgImFkZF93ZXBfa2V5KGlkeDogJWQsIGxlbjogJWQpIiwgaW5kZXgsIGtleV9sZW4pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcyhpZHg6ICVkLCBsZW46ICVkKVxuIiwKKwkJICAgX19mdW5jX18sIGluZGV4LCBrZXlfbGVuKTsKIAogCWlmICgoa2V5X2xlbiAhPSA1ICYmIGtleV9sZW4gIT0gMTMpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IDMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI3NywxNSArMTI4NywxNSBAQAogCQlyZXQgPSBzZXRfZW5jcl9tb2RlKHVzYmRldiwgUk5ESVNfV0xBTl9BTEdfV0VQLAogCQkJCQkJCVJORElTX1dMQU5fQUxHX05PTkUpOwogCQlpZiAocmV0KQotCQkJZGV2d2Fybih1c2JkZXYsICJlbmNyeXB0aW9uIGNvdWxkbid0IGJlIGVuYWJsZWQgKCUwOFgpIiwKLQkJCQkJCQkJCXJldCk7CisJCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgImVuY3J5cHRpb24gY291bGRuJ3QgYmUgZW5hYmxlZCAoJTA4WClcbiIsCisJCQkJICAgIHJldCk7CiAJfQogCiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQUREX1dFUCwgJm5kaXNfa2V5LAogCQkJCQkJCXNpemVvZihuZGlzX2tleSkpOwogCWlmIChyZXQgIT0gMCkgewotCQlkZXZ3YXJuKHVzYmRldiwgImFkZGluZyBlbmNyeXB0aW9uIGtleSAlZCBmYWlsZWQgKCUwOFgpIiwKLQkJCQkJCQlpbmRleCsxLCByZXQpOworCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgImFkZGluZyBlbmNyeXB0aW9uIGtleSAlZCBmYWlsZWQgKCUwOFgpXG4iLAorCQkJICAgIGluZGV4ICsgMSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEzMDcsMjIgKzEzMTcsMjMgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KSB7Ci0JCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogaW5kZXggb3V0IG9mIHJhbmdlICglaSkiLCBpbmRleCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBpbmRleCBvdXQgb2YgcmFuZ2UgKCVpKVxuIiwKKwkJCSAgIF9fZnVuY19fLCBpbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoa2V5X2xlbiA+IHNpemVvZihuZGlzX2tleS5tYXRlcmlhbCkgfHwga2V5X2xlbiA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiBrZXkgbGVuZ3RoIG91dCBvZiByYW5nZSAoJWkpIiwKLQkJCWtleV9sZW4pOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKToga2V5IGxlbmd0aCBvdXQgb2YgcmFuZ2UgKCVpKVxuIiwKKwkJCSAgIF9fZnVuY19fLCBrZXlfbGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKSB7CiAJCWlmICghcnhfc2VxIHx8IHNlcV9sZW4gPD0gMCkgewotCQkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiByZWN2IHNlcSBmbGFnIHdpdGhvdXQiCi0JCQkJCSJidWZmZXIiKTsKKwkJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiByZWN2IHNlcSBmbGFnIHdpdGhvdXQgYnVmZmVyXG4iLAorCQkJCSAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChyeF9zZXEgJiYgc2VxX2xlbiA+IHNpemVvZihuZGlzX2tleS5yc2MpKSB7Ci0JCQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IHRvbyBiaWcgcmVjdiBzZXEgYnVmZmVyIik7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogdG9vIGJpZyByZWN2IHNlcSBidWZmZXJcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTMzMCwxNSArMTM0MSwxNiBAQAogCWlzX2FkZHJfb2sgPSBhZGRyICYmICFpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikgJiYKIAkJCQkJIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpOwogCWlmICgoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpICYmICFpc19hZGRyX29rKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogcGFpcndpc2UgYnV0IGJzc2lkIGludmFsaWQgKCVwTSkiLAotCQkJYWRkcik7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBwYWlyd2lzZSBidXQgYnNzaWQgaW52YWxpZCAoJXBNKVxuIiwKKwkJCSAgIF9fZnVuY19fLCBhZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5KCVpKTogZmxhZ3M6JWklaSVpIiwgaW5kZXgsCi0JCQkhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1RSQU5TTUlUX0tFWSksCi0JCQkhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1BBSVJXSVNFX0tFWSksCi0JCQkhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCVpKTogZmxhZ3M6JWklaSVpXG4iLAorCQkgICBfX2Z1bmNfXywgaW5kZXgsCisJCSAgICEhKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfVFJBTlNNSVRfS0VZKSwKKwkJICAgISEoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpLAorCQkgICAhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKSk7CiAKIAltZW1zZXQoJm5kaXNfa2V5LCAwLCBzaXplb2YobmRpc19rZXkpKTsKIApAQCAtMTM3Miw3ICsxMzg0LDggQEAKIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0FERF9LRVksICZuZGlzX2tleSwKIAkJCQkJbGUzMl90b19jcHUobmRpc19rZXkuc2l6ZSkpOwotCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogT0lEXzgwMl8xMV9BRERfS0VZIC0+ICUwOFgiLCByZXQpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBPSURfODAyXzExX0FERF9LRVkgLT4gJTA4WFxuIiwKKwkJICAgX19mdW5jX18sIHJldCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNDAxLDcgKzE0MTQsNyBAQAogCiAJa2V5ID0gcHJpdi0+ZW5jcl9rZXlzW2tleV9pZHhdOwogCi0JZGV2ZGJnKHVzYmRldiwgInJlc3RvcmVfa2V5OiAlaTolaSIsIGtleV9pZHgsIGtleS5sZW4pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiAlaTolaVxuIiwgX19mdW5jX18sIGtleV9pZHgsIGtleS5sZW4pOwogCiAJaWYgKGtleS5sZW4gPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0xNDM2LDggKzE0NDksOSBAQAogCiAJaXNfd3BhID0gaXNfd3BhX2tleShwcml2LCBpbmRleCk7CiAKLQlkZXZkYmcodXNiZGV2LCAicmVtb3ZlX2tleTogJWk6JXM6JWkiLCBpbmRleCwgaXNfd3BhID8gIndwYSIgOiAid2VwIiwKLQkJcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5sZW4pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiAlaTolczolaVxuIiwKKwkJICAgX19mdW5jX18sIGluZGV4LCBpc193cGEgPyAid3BhIiA6ICJ3ZXAiLAorCQkgICBwcml2LT5lbmNyX2tleXNbaW5kZXhdLmxlbik7CiAKIAljbGVhcl9rZXkocHJpdiwgaW5kZXgpOwogCkBAIC0xNDY0LDkgKzE0NzgsOSBAQAogCQlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SRU1PVkVfV0VQLCAma2V5aW5kZXgsCiAJCQkJCQkJc2l6ZW9mKGtleWluZGV4KSk7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJZGV2d2Fybih1c2JkZXYsCi0JCQkJInJlbW92aW5nIGVuY3J5cHRpb24ga2V5ICVkIGZhaWxlZCAoJTA4WCkiLAotCQkJCWluZGV4LCByZXQpOworCQkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsCisJCQkJICAgICJyZW1vdmluZyBlbmNyeXB0aW9uIGtleSAlZCBmYWlsZWQgKCUwOFgpXG4iLAorCQkJCSAgICBpbmRleCwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xNDg4LDI5ICsxNTAyLDI5IEBACiAKIAlmaWx0ZXIgPSBSTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCB8IFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVDsKIAorCW5ldGlmX2FkZHJfbG9ja19iaCh1c2JkZXYtPm5ldCk7CiAJaWYgKHVzYmRldi0+bmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWZpbHRlciB8PSBSTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyB8CiAJCQlSTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUw7CiAJfSBlbHNlIGlmICh1c2JkZXYtPm5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKLQkJICAgdXNiZGV2LT5uZXQtPm1jX2NvdW50ID4gcHJpdi0+bXVsdGljYXN0X3NpemUpIHsKKwkJICAgbmV0ZGV2X21jX2NvdW50KHVzYmRldi0+bmV0KSA+IHByaXYtPm11bHRpY2FzdF9zaXplKSB7CiAJCWZpbHRlciB8PSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwotCX0gZWxzZSBpZiAodXNiZGV2LT5uZXQtPm1jX2NvdW50ID4gMCkgewotCQlzaXplID0gbWluKHByaXYtPm11bHRpY2FzdF9zaXplLCB1c2JkZXYtPm5ldC0+bWNfY291bnQpOworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eSh1c2JkZXYtPm5ldCkpIHsKKwkJc2l6ZSA9IG1pbihwcml2LT5tdWx0aWNhc3Rfc2l6ZSwgbmV0ZGV2X21jX2NvdW50KHVzYmRldi0+bmV0KSk7CiAJCWJ1ZiA9IGttYWxsb2Moc2l6ZSAqIEVUSF9BTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFidWYpIHsKLQkJCWRldndhcm4odXNiZGV2LAotCQkJCSJjb3VsZG4ndCBhbGxvYyAlZCBieXRlcyBvZiBtZW1vcnkiLAotCQkJCXNpemUgKiBFVEhfQUxFTik7CisJCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwKKwkJCQkgICAgImNvdWxkbid0IGFsbG9jICVkIGJ5dGVzIG9mIG1lbW9yeVxuIiwKKwkJCQkgICAgc2l6ZSAqIEVUSF9BTEVOKTsKKwkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKHVzYmRldi0+bmV0KTsKIAkJCXJldHVybjsKIAkJfQogCi0JCW1jbGlzdCA9IHVzYmRldi0+bmV0LT5tY19saXN0OwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiBtY2xpc3Q7IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCQkJaWYgKG1jbGlzdC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pCi0JCQkJY29udGludWU7Ci0KLQkJCW1lbWNweShidWYgKyBpICogRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJCWkrKzsKKwkJaSA9IDA7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgdXNiZGV2LT5uZXQpIHsKKwkJCWlmIChpID09IHNpemUpCisJCQkJYnJlYWs7CisJCQltZW1jcHkoYnVmICsgaSsrICogRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJfQogCiAJCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QsIGJ1ZiwKQEAgLTE1MjAsMjEgKzE1MzQsMjIgQEAKIAkJZWxzZQogCQkJZmlsdGVyIHw9IFJORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CiAKLQkJZGV2ZGJnKHVzYmRldiwgIk9JRF84MDJfM19NVUxUSUNBU1RfTElTVCglZCwgbWF4OiAlZCkgLT4gJWQiLAotCQkJCQkJaSwgcHJpdi0+bXVsdGljYXN0X3NpemUsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJPSURfODAyXzNfTVVMVElDQVNUX0xJU1QoJWQsIG1heDogJWQpIC0+ICVkXG4iLAorCQkJICAgaSwgcHJpdi0+bXVsdGljYXN0X3NpemUsIHJldCk7CiAKIAkJa2ZyZWUoYnVmKTsKIAl9CisJbmV0aWZfYWRkcl91bmxvY2tfYmgodXNiZGV2LT5uZXQpOwogCiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLCAmZmlsdGVyLAogCQkJCQkJCXNpemVvZihmaWx0ZXIpKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKHVzYmRldiwgImNvdWxkbid0IHNldCBwYWNrZXQgZmlsdGVyOiAlMDh4IiwKLQkJCQkJCQlsZTMyX3RvX2NwdShmaWx0ZXIpKTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJjb3VsZG4ndCBzZXQgcGFja2V0IGZpbHRlcjogJTA4eFxuIiwKKwkJCSAgICBsZTMyX3RvX2NwdShmaWx0ZXIpKTsKIAl9CiAKLQlkZXZkYmcodXNiZGV2LCAiT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIoJTA4eCkgLT4gJWQiLAotCQkJCQkJbGUzMl90b19jcHUoZmlsdGVyKSwgcmV0KTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIoJTA4eCkgLT4gJWRcbiIsCisJCSAgIGxlMzJfdG9fY3B1KGZpbHRlciksIHJldCk7CiB9CiAKIC8qCkBAIC0xNTkyLDcgKzE2MDcsOCBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlkZXZkYmcodXNiZGV2LCAicm5kaXNfc2V0X3R4X3Bvd2VyIHR5cGU6MHgleCBkYm06JWkiLCB0eXBlLCBkYm0pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiB0eXBlOjB4JXggZGJtOiVpXG4iLAorCQkgICBfX2Z1bmNfXywgdHlwZSwgZGJtKTsKIAogCS8qIERldmljZSBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdHhwb3dlciBhZnRlciBpbml0aWFsaXphdGlvbiwgb25seQogCSAqIHR1cm4gb2ZmL29uIHJhZGlvLiBTdXBwb3J0ICdhdXRvJyBtb2RlIGFuZCBzZXR0aW5nIHNhbWUgZEJtIHRoYXQgaXMKQEAgLTE2MTUsNyArMTYzMSw3IEBACiAKIAkqZGJtID0gZ2V0X2JjbTQzMjBfcG93ZXJfZGJtKHByaXYpOwogCi0JZGV2ZGJnKHVzYmRldiwgInJuZGlzX2dldF90eF9wb3dlciBkYm06JWkiLCAqZGJtKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogZGJtOiVpXG4iLCBfX2Z1bmNfXywgKmRibSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MjksNyArMTY0NSw3IEBACiAJaW50IHJldDsKIAlfX2xlMzIgdG1wOwogCi0JZGV2ZGJnKHVzYmRldiwgImNmZzgwMjExLnNjYW4iKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2ZnODAyMTEuc2NhblxuIik7CiAKIAkvKiBHZXQgY3VycmVudCBic3NpZCBsaXN0IGZyb20gZGV2aWNlIGJlZm9yZSBuZXcgc2NhbiwgYXMgbmV3IHNjYW4KIAkgKiBjbGVhcnMgaW50ZXJuYWwgYnNzaWQgbGlzdC4KQEAgLTE2NjksOCArMTY4NSw4IEBACiAJaW50IGllX2xlbiwgYnNzaWRfbGVuOwogCXU4ICppZTsKIAotCWRldmRiZyh1c2JkZXYsICIgZm91bmQgYnNzaWQ6ICclLjMycycgWyVwTV0iLCBic3NpZC0+c3NpZC5lc3NpZCwKLQkJCQkJCQlic3NpZC0+bWFjKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiIGZvdW5kIGJzc2lkOiAnJS4zMnMnIFslcE1dXG4iLAorCQkgICBic3NpZC0+c3NpZC5lc3NpZCwgYnNzaWQtPm1hYyk7CiAKIAkvKiBwYXJzZSBic3NpZCBzdHJ1Y3R1cmUgKi8KIAlic3NpZF9sZW4gPSBsZTMyX3RvX2NwdShic3NpZC0+bGVuZ3RoKTsKQEAgLTE3MTIsNyArMTcyOCw3IEBACiAJaW50IHJldCA9IC1FSU5WQUwsIGxlbiwgY291bnQsIGJzc2lkX2xlbjsKIAlib29sIHJlc2l6ZWQgPSBmYWxzZTsKIAotCWRldmRiZyh1c2JkZXYsICJjaGVja19ic3NpZF9saXN0Iik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNoZWNrX2Jzc2lkX2xpc3RcbiIpOwogCiAJbGVuID0gQ09OVFJPTF9CVUZGRVJfU0laRTsKIHJlc2l6ZV9idWY6CkBAIC0xNzM2LDggKzE3NTIsOCBAQAogCWJzc2lkID0gYnNzaWRfbGlzdC0+YnNzaWQ7CiAJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CiAJY291bnQgPSBsZTMyX3RvX2NwdShic3NpZF9saXN0LT5udW1faXRlbXMpOwotCWRldmRiZyh1c2JkZXYsICJjaGVja19ic3NpZF9saXN0OiAlZCBCU1NJRHMgZm91bmQgKGJ1ZmxlbjogJWQpIiwgY291bnQsCi0JCQkJCQkJCQlsZW4pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjaGVja19ic3NpZF9saXN0OiAlZCBCU1NJRHMgZm91bmQgKGJ1ZmxlbjogJWQpXG4iLAorCQkgICBjb3VudCwgbGVuKTsKIAogCXdoaWxlIChjb3VudCAmJiAoKHZvaWQgKilic3NpZCArIGJzc2lkX2xlbikgPD0gKGJ1ZiArIGxlbikpIHsKIAkJcm5kaXNfYnNzX2luZm9fdXBkYXRlKHVzYmRldiwgYnNzaWQpOwpAQCAtMTc1OSw3ICsxNzc1LDcgQEAKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAJaW50IHJldDsKIAotCWRldmRiZyh1c2JkZXYsICJnZXRfc2Nhbl9yZXN1bHRzIik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImdldF9zY2FuX3Jlc3VsdHNcbiIpOwogCiAJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QpCiAJCXJldHVybjsKQEAgLTE3OTMsNyArMTgwOSw3IEBACiAKIAlpZiAoc21lLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlID4gMCAmJgogCQkJcGFpcndpc2UgPT0gUk5ESVNfV0xBTl9BTEdfTk9ORSkgewotCQlkZXZlcnIodXNiZGV2LCAiVW5zdXBwb3J0ZWQgcGFpcndpc2UgY2lwaGVyIik7CisJCW5ldGRldl9lcnIodXNiZGV2LT5uZXQsICJVbnN1cHBvcnRlZCBwYWlyd2lzZSBjaXBoZXJcbiIpOwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIApAQCAtMTgwMywyOCArMTgxOSwzMCBAQAogCiAJaWYgKHNtZS0+Y3J5cHRvLm5fYWttX3N1aXRlcyA+IDAgJiYKIAkJCWtleW1nbXQgPT0gUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FKSB7Ci0JCWRldmVycih1c2JkZXYsICJJbnZhbGlkIGtleW1nbXQiKTsKKwkJbmV0ZGV2X2Vycih1c2JkZXYtPm5ldCwgIkludmFsaWQga2V5bWdtdFxuIik7CiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JZGV2ZGJnKHVzYmRldiwgImNmZzgwMjExLmNvbm5lY3QoJyUuMzJzJzpbJXBNXTolZDpbJWQsMHgleDoweCV4XTpbMHgleDoiCi0JCQkiMHgleF06MHgleCkiLCBzbWUtPnNzaWQsIHNtZS0+YnNzaWQsIGNoYW4sCi0JCQlzbWUtPnByaXZhY3ksIHNtZS0+Y3J5cHRvLndwYV92ZXJzaW9ucywgc21lLT5hdXRoX3R5cGUsCi0JCQlncm91cHdpc2UsIHBhaXJ3aXNlLCBrZXltZ210KTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2ZnODAyMTEuY29ubmVjdCgnJS4zMnMnOlslcE1dOiVkOlslZCwweCV4OjB4JXhdOlsweCV4OjB4JXhdOjB4JXgpXG4iLAorCQkgICBzbWUtPnNzaWQsIHNtZS0+YnNzaWQsIGNoYW4sCisJCSAgIHNtZS0+cHJpdmFjeSwgc21lLT5jcnlwdG8ud3BhX3ZlcnNpb25zLCBzbWUtPmF1dGhfdHlwZSwKKwkJICAgZ3JvdXB3aXNlLCBwYWlyd2lzZSwga2V5bWdtdCk7CiAKIAlpZiAoaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQogCQlkaXNhc3NvY2lhdGUodXNiZGV2LCBmYWxzZSk7CiAKIAlyZXQgPSBzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfaW5mcmFfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNvbm5lY3Q6IHNldF9pbmZyYV9tb2RlIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIAogCXJldCA9IHNldF9hdXRoX21vZGUodXNiZGV2LCBzbWUtPmNyeXB0by53cGFfdmVyc2lvbnMsIHNtZS0+YXV0aF90eXBlLAogCQkJCQkJCQlrZXltZ210KTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2F1dGhfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNvbm5lY3Q6IHNldF9hdXRoX21vZGUgZmFpbGVkLCAlZFxuIiwKKwkJCSAgIHJldCk7CiAJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJfQogCkBAIC0xODMyLDE0ICsxODUwLDE2IEBACiAKIAlyZXQgPSBzZXRfZW5jcl9tb2RlKHVzYmRldiwgcGFpcndpc2UsIGdyb3Vwd2lzZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9lbmNyX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjb25uZWN0OiBzZXRfZW5jcl9tb2RlIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIAogCWlmIChjaGFubmVsKSB7CiAJCXJldCA9IHNldF9jaGFubmVsKHVzYmRldiwgY2hhbik7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2NoYW5uZWwgZmFpbGVkLCAlZCIsIHJldCk7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY29ubmVjdDogc2V0X2NoYW5uZWwgZmFpbGVkLCAlZFxuIiwKKwkJCQkgICByZXQpOwogCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAkJfQogCX0KQEAgLTE4NDgsOCArMTg2OCw4IEBACiAJCXByaXYtPmVuY3JfdHhfa2V5X2luZGV4ID0gc21lLT5rZXlfaWR4OwogCQlyZXQgPSBhZGRfd2VwX2tleSh1c2JkZXYsIHNtZS0+a2V5LCBzbWUtPmtleV9sZW4sIHNtZS0+a2V5X2lkeCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogYWRkX3dlcF9rZXkgZmFpbGVkLCAlZCAiCi0JCQkJIiglZCwgJWQpIiwgcmV0LCBzbWUtPmtleV9sZW4sIHNtZS0+a2V5X2lkeCk7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY29ubmVjdDogYWRkX3dlcF9rZXkgZmFpbGVkLCAlZCAoJWQsICVkKVxuIiwKKwkJCQkgICByZXQsIHNtZS0+a2V5X2xlbiwgc21lLT5rZXlfaWR4KTsKIAkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJCX0KIAl9CkBAIC0xODU4LDcgKzE4NzgsOCBAQAogCQkJCSFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihzbWUtPmJzc2lkKSkgewogCQlyZXQgPSBzZXRfYnNzaWQodXNiZGV2LCBzbWUtPmJzc2lkKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfYnNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY29ubmVjdDogc2V0X2Jzc2lkIGZhaWxlZCwgJWRcbiIsCisJCQkJICAgcmV0KTsKIAkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJCX0KIAl9IGVsc2UKQEAgLTE4ODAsNyArMTkwMSw3IEBACiAKIAlyZXQgPSBzZXRfZXNzaWQodXNiZGV2LCAmc3NpZCk7CiAJaWYgKHJldCA8IDApCi0JCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfZXNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjb25uZWN0OiBzZXRfZXNzaWQgZmFpbGVkLCAlZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogCiBlcnJfdHVybl9yYWRpb19vbjoKQEAgLTE4OTUsNyArMTkxNiw3IEBACiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKIAotCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5kaXNjb25uZWN0KCVkKSIsIHJlYXNvbl9jb2RlKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2ZnODAyMTEuZGlzY29ubmVjdCglZClcbiIsIHJlYXNvbl9jb2RlKTsKIAogCXByaXYtPmNvbm5lY3RlZCA9IGZhbHNlOwogCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOwpAQCAtMTkyOSwyMSArMTk1MCwyMyBAQAogCQlhbGcgPSBSTkRJU19XTEFOX0FMR19OT05FOwogCX0KIAotCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5qb2luX2lic3MoJyUuMzJzJzpbJXBNXTolZDolZCkiLCBwYXJhbXMtPnNzaWQsCi0JCQkJCXBhcmFtcy0+YnNzaWQsIGNoYW4sIHBhcmFtcy0+cHJpdmFjeSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNmZzgwMjExLmpvaW5faWJzcygnJS4zMnMnOlslcE1dOiVkOiVkKVxuIiwKKwkJICAgcGFyYW1zLT5zc2lkLCBwYXJhbXMtPmJzc2lkLCBjaGFuLCBwYXJhbXMtPnByaXZhY3kpOwogCiAJaWYgKGlzX2Fzc29jaWF0ZWQodXNiZGV2KSkKIAkJZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOwogCiAJcmV0ID0gc2V0X2luZnJhX21vZGUodXNiZGV2LCBORElTXzgwMjExX0lORlJBX0FESE9DKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfaW5mcmFfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImpvaW5faWJzczogc2V0X2luZnJhX21vZGUgZmFpbGVkLCAlZFxuIiwKKwkJCSAgIHJldCk7CiAJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJfQogCiAJcmV0ID0gc2V0X2F1dGhfbW9kZSh1c2JkZXYsIDAsIGF1dGhfdHlwZSwgUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfYXV0aF9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiam9pbl9pYnNzOiBzZXRfYXV0aF9tb2RlIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIApAQCAtMTk1MSwxNSArMTk3NCwxNiBAQAogCiAJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIGFsZywgUk5ESVNfV0xBTl9BTEdfTk9ORSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2VuY3JfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImpvaW5faWJzczogc2V0X2VuY3JfbW9kZSBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKIAlpZiAoY2hhbm5lbCkgewogCQlyZXQgPSBzZXRfY2hhbm5lbCh1c2JkZXYsIGNoYW4pOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2NoYW5uZWwgZmFpbGVkLCAlZCIsCi0JCQkJcmV0KTsKKwkJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJqb2luX2lic3M6IHNldF9jaGFubmVsIGZhaWxlZCwgJWRcbiIsCisJCQkJICAgcmV0KTsKIAkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJCX0KIAl9CkBAIC0xOTY4LDcgKzE5OTIsOCBAQAogCQkJCSFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYXJhbXMtPmJzc2lkKSkgewogCQlyZXQgPSBzZXRfYnNzaWQodXNiZGV2LCBwYXJhbXMtPmJzc2lkKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldmRiZyh1c2JkZXYsICJqb2luX2lic3M6IHNldF9ic3NpZCBmYWlsZWQsICVkIiwgcmV0KTsKKwkJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJqb2luX2lic3M6IHNldF9ic3NpZCBmYWlsZWQsICVkXG4iLAorCQkJCSAgIHJldCk7CiAJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCQl9CiAJfSBlbHNlCkBAIC0xOTg4LDcgKzIwMTMsOCBAQAogCiAJcmV0ID0gc2V0X2Vzc2lkKHVzYmRldiwgJnNzaWQpOwogCWlmIChyZXQgPCAwKQotCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfZXNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJqb2luX2lic3M6IHNldF9lc3NpZCBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAlyZXR1cm4gcmV0OwogCiBlcnJfdHVybl9yYWRpb19vbjoKQEAgLTIwMDIsNyArMjAyOCw3IEBACiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKIAotCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5sZWF2ZV9pYnNzKCkiKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2ZnODAyMTEubGVhdmVfaWJzcygpXG4iKTsKIAogCXByaXYtPmNvbm5lY3RlZCA9IGZhbHNlOwogCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOwpAQCAtMjAyOCw4ICsyMDU0LDggQEAKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAJX19sZTMyIGZsYWdzOwogCi0JZGV2ZGJnKHVzYmRldiwgInJuZGlzX2FkZF9rZXkoJWksICVwTSwgJTA4eCkiLCBrZXlfaW5kZXgsIG1hY19hZGRyLAotCQkJCQkJCXBhcmFtcy0+Y2lwaGVyKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoJWksICVwTSwgJTA4eClcbiIsCisJCSAgIF9fZnVuY19fLCBrZXlfaW5kZXgsIG1hY19hZGRyLCBwYXJhbXMtPmNpcGhlcik7CiAKIAlzd2l0Y2ggKHBhcmFtcy0+Y2lwaGVyKSB7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKQEAgLTIwNTAsOCArMjA3Niw4IEBACiAJCQkJa2V5X2luZGV4LCBtYWNfYWRkciwgcGFyYW1zLT5zZXEsCiAJCQkJcGFyYW1zLT5zZXFfbGVuLCBwYXJhbXMtPmNpcGhlciwgZmxhZ3MpOwogCWRlZmF1bHQ6Ci0JCWRldmRiZyh1c2JkZXYsICJybmRpc19hZGRfa2V5OiB1bnN1cHBvcnRlZCBjaXBoZXIgJTA4eCIsCi0JCQkJCQkJcGFyYW1zLT5jaXBoZXIpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogdW5zdXBwb3J0ZWQgY2lwaGVyICUwOHhcbiIsCisJCQkgICBfX2Z1bmNfXywgcGFyYW1zLT5jaXBoZXIpOwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIH0KQEAgLTIwNjIsNyArMjA4OCw3IEBACiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKIAotCWRldmRiZyh1c2JkZXYsICJybmRpc19kZWxfa2V5KCVpLCAlcE0pIiwga2V5X2luZGV4LCBtYWNfYWRkcik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCVpLCAlcE0pXG4iLCBfX2Z1bmNfXywga2V5X2luZGV4LCBtYWNfYWRkcik7CiAKIAlyZXR1cm4gcmVtb3ZlX2tleSh1c2JkZXYsIGtleV9pbmRleCwgbWFjX2FkZHIpOwogfQpAQCAtMjA3NCw3ICsyMTAwLDcgQEAKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAJc3RydWN0IHJuZGlzX3dsYW5fZW5jcl9rZXkga2V5OwogCi0JZGV2ZGJnKHVzYmRldiwgInJuZGlzX3NldF9kZWZhdWx0X2tleSglaSkiLCBrZXlfaW5kZXgpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcyglaSlcbiIsIF9fZnVuY19fLCBrZXlfaW5kZXgpOwogCiAJcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXggPSBrZXlfaW5kZXg7CiAKQEAgLTIxODgsNyArMjIxNCw4IEBACiAJaWYgKHJldCA8IDApCiAJCW1lbXNldChic3NpZCwgMCwgc2l6ZW9mKGJzc2lkKSk7CiAKLQlkZXZkYmcodXNiZGV2LCAibGluayB1cCB3b3JrOiBbJXBNXSAlcyIsIGJzc2lkLCByb2FtZWQgPyAicm9hbWVkIiA6ICIiKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAibGluayB1cCB3b3JrOiBbJXBNXSVzXG4iLAorCQkgICBic3NpZCwgcm9hbWVkID8gIiByb2FtZWQiIDogIiIpOwogCiAJLyogSW50ZXJuYWwgYnNzIGxpc3QgaW4gZGV2aWNlIGFsd2F5cyBjb250YWlucyBhdCBsZWFzdCB0aGUgY3VycmVudGx5CiAJICogY29ubmVjdGVkIGJzcyBhbmQgd2UgY2FuIGdldCBpdCB0byBjZmc4MDIxMSB3aXRoCkBAIC0yMjcwLDggKzIyOTcsOCBAQAogCS8qIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgZW50cnkgKi8KIAlpZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24sIHUpICsKIAkJCQlzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfYXV0aF9yZXF1ZXN0KSkgewotCQlkZXZpbmZvKHVzYmRldiwgImF1dGhlbnRpY2F0aW9uIGluZGljYXRpb246ICIKLQkJCQkidG9vIHNob3J0IG1lc3NhZ2UgKCVpKSIsIGxlbik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAiYXV0aGVudGljYXRpb24gaW5kaWNhdGlvbjogdG9vIHNob3J0IG1lc3NhZ2UgKCVpKVxuIiwKKwkJCSAgICBsZW4pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjk4LDggKzIzMjUsOCBAQAogCQkJdHlwZSA9ICJncm91cF9lcnJvciI7CiAJCX0KIAotCQlkZXZpbmZvKHVzYmRldiwgImF1dGhlbnRpY2F0aW9uIGluZGljYXRpb246ICVzICgweCUwOHgpIiwgdHlwZSwKLQkJCQlsZTMyX3RvX2NwdShhdXRoX3JlcS0+ZmxhZ3MpKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJhdXRoZW50aWNhdGlvbiBpbmRpY2F0aW9uOiAlcyAoMHglMDh4KVxuIiwKKwkJCSAgICB0eXBlLCBsZTMyX3RvX2NwdShhdXRoX3JlcS0+ZmxhZ3MpKTsKIAogCQlpZiAocGFpcndpc2VfZXJyb3IpIHsKIAkJCWtleV90eXBlID0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwpAQCAtMjMzNSw4ICsyMzYyLDggQEAKIAogCWlmIChsZW4gPCBvZmZzZXRvZihzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiwgdSkgKwogCQkJCXNpemVvZihzdHJ1Y3QgbmRpc184MDIxMV9wbWtpZF9jYW5kX2xpc3QpKSB7Ci0JCWRldmluZm8odXNiZGV2LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogIgotCQkJCSJ0b28gc2hvcnQgbWVzc2FnZSAoJWkpIiwgbGVuKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiB0b28gc2hvcnQgbWVzc2FnZSAoJWkpXG4iLAorCQkJICAgIGxlbik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIzNDYsMTggKzIzNzMsMTYgQEAKIAkJCW9mZnNldG9mKHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uLCB1KTsKIAogCWlmIChsZW4gPCBleHBlY3RlZF9sZW4pIHsKLQkJZGV2aW5mbyh1c2JkZXYsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiAiCi0JCQkJImxpc3QgbGFyZ2VyIHRoYW4gYnVmZmVyICglaSA8ICVpKSIsCi0JCQkJbGVuLCBleHBlY3RlZF9sZW4pOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgInBta2lkIGNhbmRpZGF0ZSBsaXN0IGluZGljYXRpb246IGxpc3QgbGFyZ2VyIHRoYW4gYnVmZmVyICglaSA8ICVpKVxuIiwKKwkJCSAgICBsZW4sIGV4cGVjdGVkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKIAljYW5kX2xpc3QgPSAmaW5kaWNhdGlvbi0+dS5jYW5kX2xpc3Q7CiAKLQlkZXZpbmZvKHVzYmRldiwgInBta2lkIGNhbmRpZGF0ZSBsaXN0IGluZGljYXRpb246ICIKLQkJCSJ2ZXJzaW9uICVpLCBjYW5kaWRhdGVzICVpIiwKLQkJCWxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+dmVyc2lvbiksCi0JCQlsZTMyX3RvX2NwdShjYW5kX2xpc3QtPm51bV9jYW5kaWRhdGVzKSk7CisJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiB2ZXJzaW9uICVpLCBjYW5kaWRhdGVzICVpXG4iLAorCQkgICAgbGUzMl90b19jcHUoY2FuZF9saXN0LT52ZXJzaW9uKSwKKwkJICAgIGxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+bnVtX2NhbmRpZGF0ZXMpKTsKIAogCWlmIChsZTMyX3RvX2NwdShjYW5kX2xpc3QtPnZlcnNpb24pICE9IDEpCiAJCXJldHVybjsKQEAgLTIzNjYsOCArMjM5MSw4IEBACiAJCXN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSAqY2FuZCA9CiAJCQkJCQkmY2FuZF9saXN0LT5jYW5kaWRhdGVfbGlzdFtpXTsKIAotCQlkZXZkYmcodXNiZGV2LCAiY2FuZFslaV06IGZsYWdzOiAweCUwOHgsIGJzc2lkOiAlcE0iLAotCQkJCWksIGxlMzJfdG9fY3B1KGNhbmQtPmZsYWdzKSwgY2FuZC0+YnNzaWQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2FuZFslaV06IGZsYWdzOiAweCUwOHgsIGJzc2lkOiAlcE1cbiIsCisJCQkgICBpLCBsZTMyX3RvX2NwdShjYW5kLT5mbGFncyksIGNhbmQtPmJzc2lkKTsKIAogI2lmIDAKIAkJc3RydWN0IGl3X3Bta2lkX2NhbmQgcGNhbmQ7CkBAIC0yMzk4LDE1ICsyNDIzLDE0IEBACiAJbGVuID0gbGUzMl90b19jcHUobXNnLT5sZW5ndGgpOwogCiAJaWYgKGxlbiA8IDgpIHsKLQkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBzcGVjaWZpYyBpbmRpY2F0aW9uLCAiCi0JCQkJImlnbm9yZSB0b28gc2hvcnQgbWVzc2FnZSAoJWkgPCA4KSIsIGxlbik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbiwgaWdub3JlIHRvbyBzaG9ydCBtZXNzYWdlICglaSA8IDgpXG4iLAorCQkJICAgIGxlbik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAob2Zmc2V0ICsgbGVuID4gYnVmbGVuKSB7Ci0JCWRldmluZm8odXNiZGV2LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbiwgIgotCQkJCSJ0b28gbGFyZ2UgdG8gZml0IHRvIGJ1ZmZlciAoJWkgPiAlaSkiLAotCQkJCW9mZnNldCArIGxlbiwgYnVmbGVuKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJtZWRpYSBzcGVjaWZpYyBpbmRpY2F0aW9uLCB0b28gbGFyZ2UgdG8gZml0IHRvIGJ1ZmZlciAoJWkgPiAlaSlcbiIsCisJCQkgICAgb2Zmc2V0ICsgbGVuLCBidWZsZW4pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDE0LDEzICsyNDM4LDEzIEBACiAKIAlzd2l0Y2ggKGxlMzJfdG9fY3B1KGluZGljYXRpb24tPnN0YXR1c190eXBlKSkgewogCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX1JBRElPU1RBVEU6Ci0JCWRldmluZm8odXNiZGV2LCAicmFkaW8gc3RhdGUgaW5kaWNhdGlvbjogJWkiLAotCQkJbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+dS5yYWRpb19zdGF0dXMpKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJyYWRpbyBzdGF0ZSBpbmRpY2F0aW9uOiAlaVxuIiwKKwkJCSAgICBsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT51LnJhZGlvX3N0YXR1cykpOwogCQlyZXR1cm47CiAKIAljYXNlIE5ESVNfODAyMTFfU1RBVFVTVFlQRV9NRURJQVNUUkVBTU1PREU6Ci0JCWRldmluZm8odXNiZGV2LCAibWVkaWEgc3RyZWFtIG1vZGUgaW5kaWNhdGlvbjogJWkiLAotCQkJbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+dS5tZWRpYV9zdHJlYW1fbW9kZSkpOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgIm1lZGlhIHN0cmVhbSBtb2RlIGluZGljYXRpb246ICVpXG4iLAorCQkJICAgIGxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUubWVkaWFfc3RyZWFtX21vZGUpKTsKIAkJcmV0dXJuOwogCiAJY2FzZSBORElTXzgwMjExX1NUQVRVU1RZUEVfQVVUSEVOVElDQVRJT046CkBAIC0yNDMyLDkgKzI0NTYsOCBAQAogCQlyZXR1cm47CiAKIAlkZWZhdWx0OgotCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb246ICIKLQkJCQkidW5rbm93biBzdGF0dXMgdHlwZSAweCUwOHgiLAotCQkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnN0YXR1c190eXBlKSk7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbjogdW5rbm93biBzdGF0dXMgdHlwZSAweCUwOHhcbiIsCisJCQkgICAgbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+c3RhdHVzX3R5cGUpKTsKIAl9CiB9CiAKQEAgLTI0NTEsMTQgKzI0NzQsMTMgQEAKIAkJCSAqIGFuZCB1c2Vyc3BhY2UgdG8gdGhpbmsgdGhhdCBkZXZpY2UgaXMKIAkJCSAqIHJvYW1pbmcvcmVhc3NvY2lhdGluZyB3aGVuIGl0IGlzbid0LgogCQkJICovCi0JCQlkZXZkYmcodXNiZGV2LCAiaWdub3JlZCBPSURfODAyXzExX0FERF9LRVkgdHJpZ2dlcmVkICIKLQkJCQkJIidtZWRpYSBjb25uZWN0JyIpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImlnbm9yZWQgT0lEXzgwMl8xMV9BRERfS0VZIHRyaWdnZXJlZCAnbWVkaWEgY29ubmVjdCdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJdXNibmV0X3BhdXNlX3J4KHVzYmRldik7CiAKLQkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBjb25uZWN0Iik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAibWVkaWEgY29ubmVjdFxuIik7CiAKIAkJLyogcXVldWUgd29yayB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBybmRpc19jb21tYW5kICovCiAJCXNldF9iaXQoV09SS19MSU5LX1VQLCAmcHJpdi0+d29ya19wZW5kaW5nKTsKQEAgLTI0NjYsNyArMjQ4OCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVDoKLQkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBkaXNjb25uZWN0Iik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAibWVkaWEgZGlzY29ubmVjdFxuIik7CiAKIAkJLyogcXVldWUgd29yayB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBybmRpc19jb21tYW5kICovCiAJCXNldF9iaXQoV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpOwpAQCAtMjQ3OCw4ICsyNTAwLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkZXZpbmZvKHVzYmRldiwgImluZGljYXRpb246IDB4JTA4eCIsCi0JCQkJbGUzMl90b19jcHUobXNnLT5zdGF0dXMpKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJpbmRpY2F0aW9uOiAweCUwOHhcbiIsCisJCQkgICAgbGUzMl90b19jcHUobXNnLT5zdGF0dXMpKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjU0NCw4ICsyNTY2LDggQEAKIAlpZiAocmV0ID09IDApCiAJCXByaXYtPmxhc3RfcXVhbCA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOwogCi0JZGV2ZGJnKHVzYmRldiwgImRldi1wb2xsZXI6IE9JRF84MDJfMTFfUlNTSSAtPiAlZCwgcnNzaTolZCwgcXVhbDogJWQiLAotCQlyZXQsIGxlMzJfdG9fY3B1KHJzc2kpLCBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImRldi1wb2xsZXI6IE9JRF84MDJfMTFfUlNTSSAtPiAlZCwgcnNzaTolZCwgcXVhbDogJWRcbiIsCisJCSAgIHJldCwgbGUzMl90b19jcHUocnNzaSksIGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpKTsKIAogCS8qIFdvcmthcm91bmQgdHJhbnNmZXIgc3RhbGxzIG9uIHBvb3IgcXVhbGl0eSBsaW5rcy4KIAkgKiBUT0RPOiBmaW5kIHJpZ2h0IHdheSB0byBmaXggdGhlc2Ugc3RhbGxzIChhcyBzdGFsbHMgZG8gbm90IGhhcHBlbgpAQCAtMjU5NCwyMyArMjYxNiw5IEBACiAvKgogICogZHJpdmVyL2RldmljZSBpbml0aWFsaXphdGlvbgogICovCi1zdGF0aWMgaW50IGJjbTQzMjBhX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQotewotCS8qIGJjbTQzMjBhIGRvZXNuJ3QgaGFuZGxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZWxsLiBUcnkKLQkgKiBzZXQgYW55IGFuZCB5b3UgZ2V0IHBhcnRpYWxseSB6ZXJvZWQgbWFjIGFuZCBicm9rZW4gZGV2aWNlLgotCSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDMyMGJfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCitzdGF0aWMgdm9pZCBybmRpc19jb3B5X21vZHVsZV9wYXJhbXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JY2hhciBidWZbOF07Ci0KLQkvKiBFYXJseSBpbml0aWFsaXphdGlvbiBzZXR0aW5ncywgc2V0dGluZyB0aGVzZSB3b24ndCBoYXZlIGVmZmVjdAotCSAqIGlmIGNhbGxlZCBhZnRlciBnZW5lcmljX3JuZGlzX2JpbmQoKS4KLQkgKi8KIAogCXByaXYtPnBhcmFtX2NvdW50cnlbMF0gPSBtb2RwYXJhbV9jb3VudHJ5WzBdOwogCXByaXYtPnBhcmFtX2NvdW50cnlbMV0gPSBtb2RwYXJhbV9jb3VudHJ5WzFdOwpAQCAtMjY1Miw2ICsyNjYwLDMyIEBACiAJCXByaXYtPnBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWwgPSA1MDA7CiAJZWxzZQogCQlwcml2LT5wYXJhbV93b3JrYXJvdW5kX2ludGVydmFsID0gbW9kcGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbDsKK30KKworc3RhdGljIGludCBiY200MzIwYV9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwkvKiBjb3B5IG1vZHVsZSBwYXJhbWV0ZXJzIGZvciBiY200MzIwYSBzbyB0aGF0IGl3Y29uZmlnIHJlcG9ydHMgdHhwb3dlcgorCSAqIGFuZCB3b3JrYXJvdW5kIHBhcmFtZXRlciBpcyBjb3BpZWQgdG8gcHJpdmF0ZSBzdHJ1Y3R1cmUgY29ycmVjdGx5LgorCSAqLworCXJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyh1c2JkZXYpOworCisJLyogYmNtNDMyMGEgZG9lc24ndCBoYW5kbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdlbGwuIFRyeQorCSAqIHNldCBhbnkgYW5kIHlvdSBnZXQgcGFydGlhbGx5IHplcm9lZCBtYWMgYW5kIGJyb2tlbiBkZXZpY2UuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY200MzIwYl9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCWNoYXIgYnVmWzhdOworCisJcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHVzYmRldik7CisKKwkvKiBFYXJseSBpbml0aWFsaXphdGlvbiBzZXR0aW5ncywgc2V0dGluZyB0aGVzZSB3b24ndCBoYXZlIGVmZmVjdAorCSAqIGlmIGNhbGxlZCBhZnRlciBnZW5lcmljX3JuZGlzX2JpbmQoKS4KKwkgKi8KIAogCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJDb3VudHJ5IiwgcHJpdi0+cGFyYW1fY291bnRyeSk7CiAJcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKHVzYmRldiwgIkZyYW1lQnVyc3RpbmciLApAQCAtMjgyNiwxMSArMjg2MCwxMSBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CiAJaW50IHJldHZhbDsKIAotCWRldmRiZyh1c2JkZXYsICJybmRpc193bGFuX3Jlc2V0Iik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXJldHZhbCA9IHJuZGlzX3Jlc2V0KHVzYmRldik7CiAJaWYgKHJldHZhbCkKLQkJZGV2d2Fybih1c2JkZXYsICJybmRpc19yZXNldCgpIGZhaWxlZDogJWQiLCByZXR2YWwpOworCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgInJuZGlzX3Jlc2V0IGZhaWxlZDogJWRcbiIsIHJldHZhbCk7CiAKIAkvKiBybmRpc19yZXNldCBjbGVhcmVkIG11bHRpY2FzdCBsaXN0LCBzbyByZXN0b3JlIGhlcmUuCiAJICAgKHNldF9tdWx0aWNhc3RfbGlzdCgpIGFsc28gdHVybnMgb24gY3VycmVudCBwYWNrZXQgZmlsdGVyKSAqLwpAQCAtMjg0OCw3ICsyODgyLDcgQEAKIAlpbnQgcmV0dmFsOwogCV9fbGUzMiBmaWx0ZXI7CiAKLQlkZXZkYmcodXNiZGV2LCAicm5kaXNfd2xhbl9zdG9wIik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXJldHZhbCA9IGRpc2Fzc29jaWF0ZSh1c2JkZXYsIGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCBiZjYwNjg5Li41MjM5ZTA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKQEAgLTU0LDE3ICs1NCwxNyBAQAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgcnQ2MXBjaS4KIAogY29uZmlnIFJUMjgwMFBDSV9QQ0kKLQl0cmlzdGF0ZQorCWJvb2xlYW4KIAlkZXBlbmRzIG9uIFBDSQogCWRlZmF1bHQgeQogCiBjb25maWcgUlQyODAwUENJX1NPQwotCXRyaXN0YXRlCisJYm9vbGVhbgogCWRlcGVuZHMgb24gUkFMSU5LX1JUMjg4WCB8fCBSQUxJTktfUlQzMDVYCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBSVDI4MDBQQ0kKLQl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjgwMCAoUENJL1BDTUNJQSkgc3VwcG9ydCAoVkVSWSBFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJSYWxpbmsgcnQyOHh4L3J0MzB4eC9ydDM1eHggKFBDSS9QQ0llL1BDTUNJQSkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIChSVDI4MDBQQ0lfUENJIHx8IFJUMjgwMFBDSV9TT0MpICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBSVDI4MDBfTElCCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJIGlmIFJUMjgwMFBDSV9QQ0kKQEAgLTc1LDcgKzc1LDcgQEAKIAlzZWxlY3QgQ1JDX0NDSVRUCiAJc2VsZWN0IEVFUFJPTV85M0NYNgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI4MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyODAwL3J0MzAwMC9ydDM1MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCiAJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjc2MCwgUlQyNzkwLCBSVDI4NjAsIFJUMjg4MCwgUlQyODkwICYgUlQzMDUyCiAKIAkgIFRoaXMgZHJpdmVyIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzIGludGVuZGVkIGZvcgpAQCAtODMsNiArODMsMzIgQEAKIAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgInJ0MjgwMHBjaS5rbyIuCiAKK2lmIFJUMjgwMFBDSQorCitjb25maWcgUlQyODAwUENJX1JUMzBYWAorCWJvb2wgInJ0MjgwMHBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzMHh4IChQQ0kvUENJZS9QQ01DSUEpIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzB4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKKwkgIHJ0MjgwMHBjaSBkcml2ZXIuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMzA5MCwgUlQzMDkxICYgUlQzMDkyCisKKwkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKKwkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgorCitjb25maWcgUlQyODAwUENJX1JUMzVYWAorCWJvb2wgInJ0MjgwMHBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzNXh4IChQQ0kvUENJZS9QQ01DSUEpIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzV4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKKwkgIHJ0MjgwMHBjaSBkcml2ZXIuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMzA2MCwgUlQzMDYyLCBSVDM1NjIsIFJUMzU5MgorCisJICBTdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzCisJICBpbnRlbmRlZCBmb3IgdGVzdGVycyBhbmQgZGV2ZWxvcGVycy4KKworZW5kaWYKKwogY29uZmlnIFJUMjUwMFVTQgogCXRyaXN0YXRlICJSYWxpbmsgcnQyNTAwIChVU0IpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTEyNiw2ICsxNTIsNDMgQEAKIAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgInJ0MjgwMHVzYi5rbyIuCiAKK2lmIFJUMjgwMFVTQgorCitjb25maWcgUlQyODAwVVNCX1JUMzBYWAorCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzMHh4IChVU0IpIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzB4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKKwkgIHJ0MjgwMHVzYiBkcml2ZXIuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMzA3MCwgUlQzMDcxICYgUlQzMDcyCisKKwkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKKwkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgorCitjb25maWcgUlQyODAwVVNCX1JUMzVYWAorCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzNXh4IChVU0IpIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzV4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKKwkgIHJ0MjgwMHVzYiBkcml2ZXIuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMzU3MgorCisJICBTdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzCisJICBpbnRlbmRlZCBmb3IgdGVzdGVycyBhbmQgZGV2ZWxvcGVycy4KKworY29uZmlnIFJUMjgwMFVTQl9VTktOT1dOCisJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciB1bmtub3duIChVU0IpIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjgwMCBmYW1pbHkgZGV2aWNlcyB0aGF0IGFyZSBrbm93biB0bworCSAgaGF2ZSBhIHJ0MjgwMCBmYW1pbHkgY2hpcHNldCwgYnV0IGZvciB3aGljaCB0aGUgZXhhY3QgY2hpcHNldAorCSAgaXMgdW5rbm93bi4KKworCSAgU3VwcG9ydCBzdGF0dXMgZm9yIHRoZXNlIGRldmljZXMgaXMgdW5rbm93biwgYW5kIGVuYWJsaW5nIHRoZXNlCisJICBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsuCisKK2VuZGlmCisKIGNvbmZpZyBSVDI4MDBfTElCCiAJdHJpc3RhdGUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGU3ZjQ2NDAuLmMyMmIwNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCS8qCiAJICogUkYyNDIwIGNoaXBzZXQgZG9uJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBhY3Rpb25zLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNDIwKSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNDIwKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTEzNDAsMTEgKzEzNDAsMTAgQEAKIAkgKi8KIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9jaGlwX3JmKHJ0MngwMGRldiwgdmFsdWUsIHJlZyk7Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKKwlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBSVDI0NjAsIHZhbHVlLAorCQkJcnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ1NSMF9SRVZJU0lPTikpOwogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNDIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjQyMSkpIHsKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjQyMCkgJiYgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjQyMSkpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE1NjIsNyArMTU2MSw2IEBACiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyNDAwcGNpX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjQwMHBjaV9nZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI0MDBwY2lfdHhfbGFzdF9iZWFjb24sCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKQEAgLTE2NDMsNyArMTY0MSw3IEBACiAvKgogICogUlQyNDAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0MjQwMHBjaV9kZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydDI0MDBwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAxMDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjQwMHBjaV9vcHMpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IGMzZGVhNjkuLmMwNDhiMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTY1LDYgKzY1LDcgQEAKICAqIENTUjA6IEFTSUMgcmV2aXNpb24gbnVtYmVyLgogICovCiAjZGVmaW5lIENTUjAJCQkJMHgwMDAwCisjZGVmaW5lIENTUjBfUkVWSVNJT04JCQlGSUVMRDMyKDB4MDAwMGZmZmYpCiAKIC8qCiAgKiBDU1IxOiBTeXN0ZW0gY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwppbmRleCA0MDhmY2ZjLi41MmJiY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCkBAIC00NDAsOCArNDQwLDcgQEAKIAkvKgogCSAqIFJUMjUyNUUgYW5kIFJUNTIyMiBuZWVkIHRvIGZsaXAgVFggSS9RCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMiwgQkJQX1IyX1RYX0lRX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9DQ0tfRkxJUCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBDU1IxX09GRE1fRkxJUCwgMSk7CkBAIC00NDksNyArNDQ4LDcgQEAKIAkJLyoKIAkJICogUlQyNTI1RSBkb2VzIG5vdCBuZWVkIFJYIEkvUSBGbGlwLgogCQkgKi8KLQkJaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSkKKwkJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9JUV9GTElQLCAwKTsKIAl9IGVsc2UgewogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9DQ0tfRkxJUCwgMCk7CkBAIC00NzUsMTQgKzQ3NCwxNCBAQAogCSAqIFN3aXRjaCBvbiB0dW5pbmcgYml0cy4KIAkgKiBGb3IgUlQyNTIzIGRldmljZXMgd2UgZG8gbm90IG5lZWQgdG8gdXBkYXRlIHRoZSBSMSByZWdpc3Rlci4KIAkgKi8KLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjMpKQorCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYxLCBSRjFfVFVORVIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmMywgUkYzX1RVTkVSLCAxKTsKIAogCS8qCiAJICogRm9yIFJUMjUyNSB3ZSBzaG91bGQgZmlyc3Qgc2V0IHRoZSBjaGFubmVsIHRvIGhhbGYgYmFuZCBoaWdoZXIuCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNSkpIHsKIAkJc3RhdGljIGNvbnN0IHUzMiB2YWxzW10gPSB7CiAJCQkweDAwMDgwY2JlLCAweDAwMDgwZDAyLCAweDAwMDgwZDA2LCAweDAwMDgwZDBhLAogCQkJMHgwMDA4MGQwZSwgMHgwMDA4MGQxMiwgMHgwMDA4MGQxNiwgMHgwMDA4MGQxYSwKQEAgLTUxNiw3ICs1MTUsNyBAQAogCSAqIFN3aXRjaCBvZmYgdHVuaW5nIGJpdHMuCiAJICogRm9yIFJUMjUyMyBkZXZpY2VzIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSB0aGUgUjEgcmVnaXN0ZXIuCiAJICovCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkgewogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJmLT5yZjEsIFJGMV9UVU5FUiwgMCk7CiAJCXJ0MjUwMHBjaV9yZl93cml0ZShydDJ4MDBkZXYsIDEsIHJmLT5yZjEpOwogCX0KQEAgLTY0MCw3ICs2MzksNyBAQAogCSAqIHVwIHRvIHZlcnNpb24gQyB0aGUgbGluayB0dW5pbmcgc2hvdWxkIGhhbHQgYWZ0ZXIgMjAKIAkgKiBzZWNvbmRzIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQuCiAJICovCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EICYmCisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA8IFJUMjU2MF9WRVJTSU9OX0QgJiYKIAkgICAgcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgJiYgY291bnQgPiAyMCkKIAkJcmV0dXJuOwogCkBAIC02NTAsNyArNjQ5LDcgQEAKIAkgKiBzaG91bGQgZ28gc3RyYWlnaHQgdG8gZHluYW1pYyBDQ0EgdHVuaW5nIHdoZW4gdGhleQogCSAqIGFyZSBub3QgYXNzb2NpYXRlZC4KIAkgKi8KLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjU2MF9WRVJTSU9OX0QgfHwKKwlpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQyNTYwX1ZFUlNJT05fRCB8fAogCSAgICAhcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpCiAJCWdvdG8gZHluYW1pY19jY2FfdHVuZTsKIApAQCAtMTUwNCwxNSArMTUwMywxNSBAQAogCSAqLwogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUkZfVFlQRSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2NoaXBfcmYocnQyeDAwZGV2LCB2YWx1ZSwgcmVnKTsKLQlydDJ4MDBfcHJpbnRfY2hpcChydDJ4MDBkZXYpOworCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIFJUMjU2MCwgdmFsdWUsCisJCQlydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1IwX1JFVklTSU9OKSk7CiAKLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjIpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjIpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjMpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjUpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTc0NCwyMiArMTc0MywyMiBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjIpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjI7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIzOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNCkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNCkpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjQpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNDsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjUpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI1KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI1ZSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1ZTsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjIpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfNTIyMjsKQEAgLTE4NjAsNyArMTg1OSw2IEBACiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjUwMHBjaV9nZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI1MDBwY2lfdHhfbGFzdF9iZWFjb24sCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKQEAgLTE5NDEsNyArMTkzOSw3IEBACiAvKgogICogUlQyNTAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0MjUwMHBjaV9kZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydDI1MDBwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAyMDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjUwMHBjaV9vcHMpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IGM2YmQxZmMuLmQ3MDgwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTc2LDYgKzc2LDcgQEAKICAqIENTUjA6IEFTSUMgcmV2aXNpb24gbnVtYmVyLgogICovCiAjZGVmaW5lIENTUjAJCQkJMHgwMDAwCisjZGVmaW5lIENTUjBfUkVWSVNJT04JCQlGSUVMRDMyKDB4MDAwMGZmZmYpCiAKIC8qCiAgKiBDU1IxOiBTeXN0ZW0gY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCA4M2YyNTkyLi5lZTM0YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCkBAIC01NjUsOCArNTY1LDcgQEAKIAkvKgogCSAqIFJUMjUyNUUgYW5kIFJUNTIyMiBuZWVkIHRvIGZsaXAgVFggSS9RCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMiwgQkJQX1IyX1RYX0lRX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmNzcjUsIFBIWV9DU1I1X0NDS19GTElQLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I2LCBQSFlfQ1NSNl9PRkRNX0ZMSVAsIDEpOwpAQCAtNTc0LDcgKzU3Myw3IEBACiAJCS8qCiAJCSAqIFJUMjUyNUUgZG9lcyBub3QgbmVlZCBSWCBJL1EgRmxpcC4KIAkJICovCi0JCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpCisJCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMTQsIEJCUF9SMTRfUlhfSVFfRkxJUCwgMCk7CiAJfSBlbHNlIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I1LCBQSFlfQ1NSNV9DQ0tfRkxJUCwgMCk7CkBAIC01OTgsNyArNTk3LDcgQEAKIAkvKgogCSAqIEZvciBSVDI1MjVFIHdlIHNob3VsZCBmaXJzdCBzZXQgdGhlIGNoYW5uZWwgdG8gaGFsZiBiYW5kIGhpZ2hlci4KIAkgKi8KLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKSB7CiAJCXN0YXRpYyBjb25zdCB1MzIgdmFsc1tdID0gewogCQkJMHgwMDAwMDhhYSwgMHgwMDAwMDhhZSwgMHgwMDAwMDhhZSwgMHgwMDAwMDhiMiwKIAkJCTB4MDAwMDA4YjIsIDB4MDAwMDA4YjYsIDB4MDAwMDA4YjYsIDB4MDAwMDA4YmEsCkBAIC03OTMsNyArNzkyLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjFfSE9TVF9SRUFEWSwgMSk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEsIHJlZyk7CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PSBSVDI1NzBfVkVSU0lPTl9DKSB7CisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA+PSBSVDI1NzBfVkVSU0lPTl9DKSB7CiAJCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEhZX0NTUjIsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgUEhZX0NTUjJfTE5BLCAwKTsKIAl9IGVsc2UgewpAQCAtMTQwOSwyMSArMTQwOCwxOCBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUkZfVFlQRSk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMCwgJnJlZyk7CiAJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgUlQyNTcwLCB2YWx1ZSwgcmVnKTsKLQlydDJ4MDBfcHJpbnRfY2hpcChydDJ4MDBkZXYpOwogCi0JaWYgKCFydDJ4MDBfY2hlY2tfcmV2KCZydDJ4MDBkZXYtPmNoaXAsIDB4MDAwZmZmZjAsIDApIHx8Ci0JICAgIHJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDAwMDAwZiwgMCkpIHsKLQorCWlmICgoKHJlZyAmIDB4ZmZmMCkgIT0gMCkgfHwgKChyZWcgJiAweDAwMDAwMDBmKSA9PSAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI0KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyMikpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE2NjcsMjIgKzE2NjMsMjIgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMikpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMik7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIyOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjMpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyMzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI0KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjQ7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1OwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNWUpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNWU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjI7CkBAIC0xNzYzLDcgKzE3NTksNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAotCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCmluZGV4IDFhN2VhZTMuLjc0YzA0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKQEAgLTYwLDExICs2MCwxMSBAQAogLyoKICAqIENoaXBzZXQgdmVyc2lvbi4KICAqLwotI2RlZmluZSBSVDI4NjBDX1ZFUlNJT04JCQkweDI4NjAwMTAwCi0jZGVmaW5lIFJUMjg2MERfVkVSU0lPTgkJCTB4Mjg2MDAxMDEKLSNkZWZpbmUgUlQyODgwRV9WRVJTSU9OCQkJMHgyODcyMDIwMAotI2RlZmluZSBSVDI4ODNfVkVSU0lPTgkJCTB4Mjg4MzAzMDAKLSNkZWZpbmUgUlQzMDcwX1ZFUlNJT04JCQkweDMwNzAwMjAwCisjZGVmaW5lIFJUMjg2MENfVkVSU0lPTgkJCTB4MDEwMAorI2RlZmluZSBSVDI4NjBEX1ZFUlNJT04JCQkweDAxMDEKKyNkZWZpbmUgUlQyODgwRV9WRVJTSU9OCQkJMHgwMjAwCisjZGVmaW5lIFJUMjg4M19WRVJTSU9OCQkJMHgwMzAwCisjZGVmaW5lIFJUMzA3MF9WRVJTSU9OCQkJMHgwMjAwCiAKIC8qCiAgKiBTaWduYWwgaW5mb3JtYXRpb24uCkBAIC00MDgsOCArNDA4LDggQEAKICAqIEFTSUNfVkVSOiAyODYwIG9yIDI4NzAKICAqLwogI2RlZmluZSBNQUNfQ1NSMAkJCTB4MTAwMAotI2RlZmluZSBNQUNfQ1NSMF9BU0lDX1JFVgkJRklFTEQzMigweDAwMDBmZmZmKQotI2RlZmluZSBNQUNfQ1NSMF9BU0lDX1ZFUgkJRklFTEQzMigweGZmZmYwMDAwKQorI2RlZmluZSBNQUNfQ1NSMF9SRVZJU0lPTgkJRklFTEQzMigweDAwMDBmZmZmKQorI2RlZmluZSBNQUNfQ1NSMF9DSElQU0VUCQlGSUVMRDMyKDB4ZmZmZjAwMDApCiAKIC8qCiAgKiBNQUNfU1lTX0NUUkw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggOWRlYWU0MS4uMThkNGQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMzcsOSArMzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgInJ0MngwMC5oIgotI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9VU0JfTU9EVUxFKQogI2luY2x1ZGUgInJ0MngwMHVzYi5oIgogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9QQ0kpIHx8IGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfUENJX01PRFVMRSkKKyNpbmNsdWRlICJydDJ4MDBwY2kuaCIKKyNlbmRpZgogI2luY2x1ZGUgInJ0MjgwMGxpYi5oIgogI2luY2x1ZGUgInJ0MjgwMC5oIgogI2luY2x1ZGUgInJ0MjgwMHVzYi5oIgpAQCAtODksNyArOTIsNyBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVHTlVNLCB3b3JkKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JVU1ksIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVBRF9DT05UUk9MLCAwKTsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBfQ1NSX0NGR19CQlBfUldfTU9ERSwgMSk7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlX2xvY2socnQyeDAwZGV2LCBCQlBfQ1NSX0NGRywgcmVnKTsKQEAgLTExOCw3ICsxMjEsNyBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVHTlVNLCB3b3JkKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JVU1ksIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVBRF9DT05UUk9MLCAxKTsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBfQ1NSX0NGR19CQlBfUldfTU9ERSwgMSk7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlX2xvY2socnQyeDAwZGV2LCBCQlBfQ1NSX0NGRywgcmVnKTsKQEAgLTIxOCwxMCArMjIxLDkgQEAKIAl1MzIgcmVnOwogCiAJLyoKLQkgKiBSVDI4ODAgYW5kIFJUMzA1MiBkb24ndCBzdXBwb3J0IE1DVSByZXF1ZXN0cy4KKwkgKiBTT0MgZGV2aWNlcyBkb24ndCBzdXBwb3J0IE1DVSByZXF1ZXN0cy4KIAkgKi8KLQlpZiAocnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMjg4MCkgfHwKLQkgICAgcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA1MikpCisJaWYgKHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwpAQCAtMjQ2LDYgKzI0OCwyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX21jdV9yZXF1ZXN0KTsKIAoraW50IHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHJlZzsKKworCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKKwkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZKSAmJgorCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfUlhfRE1BX0JVU1kpKQorCQkJcmV0dXJuIDA7CisKKwkJbXNsZWVwKDEpOworCX0KKworCUVSUk9SKHJ0MngwMGRldiwgIldQRE1BIFRYL1JYIGJ1c3ksIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfd2FpdF93cGRtYV9yZWFkeSk7CisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTCiBjb25zdCBzdHJ1Y3QgcnQyeDAwZGVidWcgcnQyODAwX3J0MngwMGRlYnVnID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLApAQCAtMzQ4LDcgKzM2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcnQyODAwX2luaXRfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCitzdGF0aWMgdm9pZCBydDI4MDBfaW5pdF9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLCBlbnVtIGxlZF90eXBlIHR5cGUpCiB7CiAJbGVkLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CkBAIC0zNTcsNyArMzc4LDYgQEAKIAlsZWQtPmxlZF9kZXYuYmxpbmtfc2V0ID0gcnQyODAwX2JsaW5rX3NldDsKIAlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX2luaXRfbGVkKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIC8qCkBAIC02NDMsNyArNjYzLDcgQEAKIAlzd2l0Y2ggKChpbnQpYW50LT50eCkgewogCWNhc2UgMToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlAxX1RYX0FOVEVOTkEsIDApOwotCQlpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpCisJCWlmIChydDJ4MDBfaXNfcGNpKHJ0MngwMGRldikgfHwgcnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlAzX1JYX0FOVEVOTkEsIDApOwogCQlicmVhazsKIAljYXNlIDI6CkBAIC04MDYsMTIgKzgyNiwxMiBAQAogCXVuc2lnbmVkIGludCB0eF9waW47CiAJdTggYmJwOwogCi0JaWYgKChydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDcwKSB8fAotCSAgICAgcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA5MCkpICYmCi0JICAgIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyMDIwKSB8fAotCSAgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMCkgfHwKLQkgICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjEpIHx8Ci0JICAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIyKSkpCisJaWYgKChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApIHx8CisJICAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwOTApKSAmJgorCSAgICAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIwKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkpCiAJCXJ0MjgwMF9jb25maWdfY2hhbm5lbF9ydDN4KHJ0MngwMGRldiwgY29uZiwgcmYsIGluZm8pOwogCWVsc2UKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3J0MngocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7CkBAIC04NzgsNyArODk4LDggQEAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmYmJwLCBCQlAzX0hUNDBfUExVUywgY29uZl9pc19odDQwX3BsdXMoY29uZikpOwogCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAzLCBiYnApOwogCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPT0gUlQyODYwQ19WRVJTSU9OKSB7CisJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDI4NjBDX1ZFUlNJT04pKSB7CiAJCWlmIChjb25mX2lzX2h0NDAoY29uZikpIHsKIAkJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA2OSwgMHgxYSk7CiAJCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNzAsIDB4MGEpOwpAQCAtMTA0MCw4ICsxMDYxLDkgQEAKIHN0YXRpYyB1OCBydDI4MDBfZ2V0X2RlZmF1bHRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKQorCQlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpICYmCisJCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMzA3MF9WRVJTSU9OKSkKIAkJCXJldHVybiAweDFjICsgKDIgKiBydDJ4MDBkZXYtPmxuYV9nYWluKTsKIAkJZWxzZQogCQkJcmV0dXJuIDB4MmUgKyBydDJ4MDBkZXYtPmxuYV9nYWluOwpAQCAtMTA3Miw3ICsxMDk0LDggQEAKIHZvaWQgcnQyODAwX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwKIAkJICAgICAgIGNvbnN0IHUzMiBjb3VudCkKIHsKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA9PSBSVDI4NjBDX1ZFUlNJT04pCisJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDI4NjBDX1ZFUlNJT04pKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMTA5Miw3ICsxMTE1LDcgQEAKIAl1MzIgcmVnOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgewogCQkvKgogCQkgKiBXYWl0IHVudGlsIEJCUCBhbmQgUkYgYXJlIHJlYWR5LgogCQkgKi8KQEAgLTExMTEsNyArMTEzNCw3IEBACiAJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAmcmVnKTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLAogCQkJCSAgICAgIHJlZyAmIH4weDAwMDAyMDAwKTsKLQl9IGVsc2UgaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCX0gZWxzZSBpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDB4MDAwMDAwMDMpOwogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwpAQCAtMTExOSw5ICsxMTQyLDkgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0JCUCwgMSk7CiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDI4MDBVU0JfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQl9NT0RVTEUpCiAJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKIAkJCQkJICAgIFVTQl9NT0RFX1JFU0VULCBSRUdJU1RFUl9USU1FT1VUKTsKICNlbmRpZgpAQCAtMTE1Nyw4ICsxMTgwLDkgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RYX1RJTUVfQ09NUEVOU0FURSwgMCk7CiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JICAgIHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPT0gUlQzMDcwX1ZFUlNJT04pIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpICYmCisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDMwNzBfVkVSU0lPTikpIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMCwgMHgwMDAwMDQwMCk7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzEsIDB4MDAwMDAwMDApOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcyLCAweDAwMDAwMDAwKTsKQEAgLTExODUsOCArMTIwOSwxNCBAQAogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQVhfTEVOX0NGRywgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9NUERVLCBBR0dSRUdBVElPTl9TSVpFKTsKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PSBSVDI4ODBFX1ZFUlNJT04gJiYKLQkgICAgcnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMzA3MF9WRVJTSU9OKQorCWlmICgocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSAmJgorCSAgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA+PSBSVDI4ODBFX1ZFUlNJT04pKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApIHx8CisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg4MykgfHwKKwkgICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODkwKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpIHx8CisJICAgIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQzMDcwX1ZFUlNJT04pKSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9QU0RVLCAyKTsKIAllbHNlCiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQVhfTEVOX0NGR19NQVhfUFNEVSwgMSk7CkBAIC0xMjc2LDcgKzEzMDYsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBHRjQwX1BST1RfQ0ZHX1RYX09QX0FMTE9XX0dGNDAsIDEpOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEdGNDBfUFJPVF9DRkcsIHJlZyk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKIAogCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOwpAQCAtMTMzNiw3ICsxMzY2LDcgQEAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTYsIDApOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNywgMCk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0NZQ19DRkdfQ0xPQ0tfQ1lDTEUsIDMwKTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsIHJlZyk7CkBAIC0xNDY1LDIyICsxNDk1LDI1IEBACiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDEwMywgMHgwMCk7CiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDEwNSwgMHgwNSk7CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA9PSBSVDI4NjBDX1ZFUlNJT04pIHsKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgorCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMjg2MENfVkVSU0lPTikpIHsKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDY5LCAweDE2KTsKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDczLCAweDEyKTsKIAl9CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+IFJUMjg2MERfVkVSU0lPTikKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgorCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID4gUlQyODYwRF9WRVJTSU9OKSkKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDg0LCAweDE5KTsKIAotCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSAmJgotCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSAmJgorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgIChydDJ4MDBfcmV2KHJ0MngwMGRldikgPT0gUlQzMDcwX1ZFUlNJT04pKSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3MCwgMHgwYSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4NCwgMHg5OSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMDUsIDB4MDUpOwogCX0KIAotCWlmIChydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDUyKSkgeworCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpKSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAzMSwgMHgwOCk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3OCwgMHgwZSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4MCwgMHgwOCk7CkBAIC0xNTY1LDE0ICsxNTk4LDE1IEBACiAJdTggcmZjc3I7CiAJdTggYmJwOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JICAgIHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgIT0gUlQzMDcwX1ZFUlNJT04pCisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSAmJgorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgIChydDJ4MDBfcmV2KHJ0MngwMGRldikgIT0gUlQzMDcwX1ZFUlNJT04pKQogCQlyZXR1cm4gMDsKIAotCWlmIChydDJ4MDBfaW50Zl9pc19wY2kocnQyeDAwZGV2KSkgewotCQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjApICYmCi0JCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMSkgJiYKLQkJICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIyKSkKKwlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkgeworCQlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgJiYKKwkJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpICYmCisJCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMTU4Niw3ICsxNjIwLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcmZjc3IsIFJGQ1NSMzBfUkZfQ0FMSUJSQVRJT04sIDApOwogCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDMwLCByZmNzcik7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDQsIDB4NDApOwogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCA1LCAweDAzKTsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgNiwgMHgwMik7CkBAIC0xNjA3LDcgKzE2NDEsNyBAQAogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCAyNSwgMHgwMSk7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDI3LCAweDAzKTsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgMjksIDB4MWYpOwotCX0gZWxzZSBpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpIHsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgMCwgMHg1MCk7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDEsIDB4MDEpOwogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCAyLCAweGY3KTsKQEAgLTE3MzcsNyArMTc3MSwxMiBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUsIFJGMjgyMCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fQU5URU5OQSwgd29yZCk7CiAJCUVFUFJPTShydDJ4MDBkZXYsICJBbnRlbm5hOiAweCUwNHhcbiIsIHdvcmQpOwotCX0gZWxzZSBpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjg4M19WRVJTSU9OKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NjApIHx8CisJCSAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg3MCkgfHwKKwkJICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSB8fAorCQkgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApIHx8CisJCSAgIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODMpICYmCisJCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQyODgzX1ZFUlNJT04pKSkgewogCQkvKgogCQkgKiBUaGVyZSBpcyBhIG1heCBvZiAyIFJYIHN0cmVhbXMgZm9yIFJUMjh4MCBzZXJpZXMKIAkJICovCkBAIC0xODM2LDM2ICsxODc1LDM0IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SRl9UWVBFKTsKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IwLCAmcmVnKTsKIAotCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOworCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX0NISVBTRVQpLAorCQkJdmFsdWUsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX1JFVklTSU9OKSk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKLQkJc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwID0gJnJ0MngwMGRldi0+Y2hpcDsKLQotCQkvKgotCQkgKiBUaGUgY2hlY2sgZm9yIHJ0Mjg2MCBpcyBub3QgYSB0eXBvLCBzb21lIHJ0Mjg3MCBoYXJkd2FyZQotCQkgKiBpZGVudGlmaWVzIGl0c2VsZiBhcyBydDI4NjAgaW4gdGhlIENTUiByZWdpc3Rlci4KLQkJICovCi0JCWlmIChydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg2MDAwMDApIHx8Ci0JCSAgICBydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg3MDAwMDApIHx8Ci0JCSAgICBydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg4MDAwMDApKSB7Ci0JCQlydDJ4MDBfc2V0X2NoaXBfcnQocnQyeDAwZGV2LCBSVDI4NzApOwotCQl9IGVsc2UgaWYgKHJ0MngwMF9jaGVja19yZXYoY2hpcCwgMHhmZmZmMDAwMCwgMHgzMDcwMDAwMCkpIHsKLQkJCXJ0MngwMF9zZXRfY2hpcF9ydChydDJ4MDBkZXYsIFJUMzA3MCk7Ci0JCX0gZWxzZSB7Ci0JCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJaWYgKCFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NjApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzIpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODMpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4OTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzEpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwOTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMzOTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDM1NzIpKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUlQgY2hpcHNldCBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjgyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI4NTApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNzIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjc1MCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyMDIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjIpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4MjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4NTApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI3MjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI3NTApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjIwMjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwNTIpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMDEzLDcgKzIwNTAsNiBAQAogCiBpbnQgcnQyODAwX3Byb2JlX2h3X21vZGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXAgPSAmcnQyeDAwZGV2LT5jaGlwOwogCXN0cnVjdCBod19tb2RlX3NwZWMgKnNwZWMgPSAmcnQyeDAwZGV2LT5zcGVjOwogCXN0cnVjdCBjaGFubmVsX2luZm8gKmluZm87CiAJY2hhciAqdHhfcG93ZXIxOwpAQCAtMjAyNCw3ICsyMDYwLDcgQEAKIAkvKgogCSAqIERpc2FibGUgcG93ZXJzYXZpbmcgYXMgZGVmYXVsdCBvbiBQQ0kgZGV2aWNlcy4KIAkgKi8KLQlpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpCisJaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCiAJCXJ0MngwMGRldi0+aHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOwogCiAJLyoKQEAgLTIwNDksMTkgKzIwODUsMTkgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKGNoaXAsIFJGMjgyMCkgfHwKLQkgICAgcnQyeDAwX3JmKGNoaXAsIFJGMjcyMCkgfHwKLQkgICAgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpICYmIHJ0MngwMF9yZihjaGlwLCBSRjMwNTIpKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4MjApIHx8CisJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjcyMCkgfHwKKwkgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDUyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKGNoaXAsIFJGMjg1MCkgfHwgcnQyeDAwX3JmKGNoaXAsIFJGMjc1MCkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjg1MCkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNzUwKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFscyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsczsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZihjaGlwLCBSRjMwMjApIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjIwMjApIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjMwMjEpIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjMwMjIpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjApIHx8CisJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjAyMCkgfHwKKwkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSB8fAorCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc18zMDJ4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzMwMng7CiAJfQpAQCAtMjA2OSw3ICsyMTA1LDcgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgSFQgaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKCFydDJ4MDBfcmYoY2hpcCwgUkYyMDIwKSkKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjAyMCkpCiAJCXNwZWMtPmh0Lmh0X3N1cHBvcnRlZCA9IHRydWU7CiAJZWxzZQogCQlzcGVjLT5odC5odF9zdXBwb3J0ZWQgPSBmYWxzZTsKQEAgLTIyODIsNyArMjMxOCw2IEBACiAJLnNldF9ydHNfdGhyZXNob2xkCT0gcnQyODAwX3NldF9ydHNfdGhyZXNob2xkLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyODAwX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjgwMF9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCmluZGV4IDUzNWNlMjIuLmViYWJlYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKQEAgLTExNCw4ICsxMTQsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBydDJ4MDBkZWJ1ZyBydDI4MDBfcnQyeDAwZGVidWc7CiAKIGludCBydDI4MDBfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MjgwMF9pbml0X2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkgICAgIHN0cnVjdCBydDJ4MDBfbGVkICpsZWQsIGVudW0gbGVkX3R5cGUgdHlwZSk7CiBpbnQgcnQyODAwX2NvbmZpZ19zaGFyZWRfa2V5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CkBAIC0xMzksNiArMTM3LDcgQEAKIGludCBydDI4MDBfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiBpbnQgcnQyODAwX2luaXRfYmJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogaW50IHJ0MjgwMF9pbml0X3JmY3NyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworaW50IHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCiBpbnQgcnQyODAwX2VmdXNlX2RldGVjdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyODAwX3JlYWRfZWVwcm9tX2VmdXNlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCmluZGV4IGRmYzg4NmYuLmFjYThjMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKQEAgLTQ4LDE0ICs0OCw2IEBACiAjaW5jbHVkZSAicnQyODAwLmgiCiAjaW5jbHVkZSAicnQyODAwcGNpLmgiCiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1BDSV9NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9QQ0kKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQ19NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9XSVNPQwotI2VuZGlmCi0KIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCkBAIC04Nyw3ICs3OSw3IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgKmJhc2VfYWRkciA9ICh1MzIgKikgS1NFRzFBRERSKDB4MUYwNDAwMDApOyAvKiBYWFggZm9yIFJUMzA1MiAqLwpAQCAtOTgsNyArOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfZWVwcm9tcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC00NjEsMjQgKzQ1Myw2IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOwogfQogCi1zdGF0aWMgaW50IHJ0MjgwMHBjaV93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIHJlZzsKLQotCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKLQkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZKSAmJgotCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfUlhfRE1BX0JVU1kpKQotCQkJcmV0dXJuIDA7Ci0KLQkJbXNsZWVwKDEpOwotCX0KLQotCUVSUk9SKHJ0MngwMGRldiwgIldQRE1BIFRYL1JYIGJ1c3ksIGFib3J0aW5nLlxuIik7Ci0JcmV0dXJuIC1FQUNDRVM7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyODAwcGNpX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC00ODcsMTAgKzQ2MSwxMCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmICh1bmxpa2VseShydDI4MDBwY2lfd2FpdF93cGRtYV9yZWFkeShydDJ4MDBkZXYpIHx8CisJaWYgKHVubGlrZWx5KHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBwY2lfaW5pdF9xdWV1ZXMocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8Ci0JCSAgICAgcnQyODAwcGNpX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KSB8fAorCQkgICAgIHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBfaW5pdF9iYnAocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X3JmY3NyKHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTU3MCw3ICs1NDQsNyBAQAogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMGUwMCk7CiAKIAkvKiBXYWl0IGZvciBETUEsIGlnbm9yZSBlcnJvciAqLwotCXJ0MjgwMHBjaV93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldik7CisJcnQyODAwX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KTsKIH0KIAogc3RhdGljIGludCBydDI4MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC04MzUsNyArODA5LDYgQEAKIAkJCQkgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAlfX2xlMzIgKnJ4ZCA9IGVudHJ5X3ByaXYtPmRlc2M7CiAJX19sZTMyICpyeHdpID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CkBAIC04ODMsMTAgKzg1Niw4IEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQzLCBSWERfVzNfTVlfQlNTKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX01ZX0JTUzsKIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkgeworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX0wyUEFEOwotCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKLQl9CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4d2kxLCBSWFdJX1cxX1NIT1JUX0dJKSkKIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX1NIT1JUX0dJOwpAQCAtOTI3LDcgKzg5OCw2IEBACiAJICogUmVtb3ZlIFRYV0kgZGVzY3JpcHRvciBmcm9tIHN0YXJ0IG9mIGJ1ZmZlci4KIAkgKi8KIAlza2JfcHVsbChlbnRyeS0+c2tiLCBSWFdJX0RFU0NfU0laRSk7Ci0Jc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLT5zaXplKTsKIH0KIAogLyoKQEAgLTEwNzEsMTggKzEwNDEsMTIgQEAKIAkvKgogCSAqIFJlYWQgRUVQUk9NIGludG8gYnVmZmVyCiAJICovCi0Jc3dpdGNoIChydDJ4MDBkZXYtPmNoaXAucnQpIHsKLQljYXNlIFJUMjg4MDoKLQljYXNlIFJUMzA1MjoKKwlpZiAocnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKQogCQlydDI4MDBwY2lfcmVhZF9lZXByb21fc29jKHJ0MngwMGRldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmIChydDI4MDBwY2lfZWZ1c2VfZGV0ZWN0KHJ0MngwMGRldikpCi0JCQlydDI4MDBwY2lfcmVhZF9lZXByb21fZWZ1c2UocnQyeDAwZGV2KTsKLQkJZWxzZQotCQkJcnQyODAwcGNpX3JlYWRfZWVwcm9tX3BjaShydDJ4MDBkZXYpOwotCQlicmVhazsKLQl9CisJZWxzZSBpZiAocnQyODAwcGNpX2VmdXNlX2RldGVjdChydDJ4MDBkZXYpKQorCQlydDI4MDBwY2lfcmVhZF9lZXByb21fZWZ1c2UocnQyeDAwZGV2KTsKKwllbHNlCisJCXJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9wY2kocnQyeDAwZGV2KTsKIAogCXJldHVybiBydDI4MDBfdmFsaWRhdGVfZWVwcm9tKHJ0MngwMGRldik7CiB9CkBAIC0xMTMzLDggKzEwOTcsNyBAQAogCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCi0JaWYgKCFydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQyODgwKSAmJgotCSAgICAhcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA1MikpCisJaWYgKCFydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCiAJCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTEyMjEsOCArMTE4NCwxMSBAQAogLyoKICAqIFJUMjgwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI4MDBwY2lfZGV2aWNlX3RhYmxlW10gPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTQ2MiwgMHg4OTFhKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjgwMHBjaV9kZXZpY2VfdGFibGUpID0geworCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDYwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDc4MSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI3KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKQEAgLTEyMzAsMTggKzExOTYsMTkgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzU4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc2OCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2MDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNjgxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDcwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA3ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDMwWFgKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDYyLCAweDg5MWEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzVYWAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTYyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjZW5kaWYKIAl7IDAsIH0KIH07CiAKQEAgLTEyNTUsMTIgKzEyMjIsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1BDSSAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQwotI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpCi1fX3J0MngwMHNvY19wcm9iZShSVDI4ODAsICZydDI4MDBwY2lfb3BzKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCi1fX3J0MngwMHNvY19wcm9iZShSVDMwNTIsICZydDI4MDBwY2lfb3BzKTsKLSNlbmRpZgorI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCitzdGF0aWMgaW50IHJ0MjgwMHNvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBydDJ4MDBzb2NfcHJvYmUocGRldiwgcnQyODAwcGNpX29wcyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0MjgwMHNvY19kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CkBAIC0xMjY4LDEyICsxMjM0LDEyIEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLm1vZF9uYW1lCT0gS0JVSUxEX01PRE5BTUUsCiAJfSwKLQkucHJvYmUJCT0gX19ydDJ4MDBzb2NfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjgwMHNvY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0MngwMHNvY19yZW1vdmUpLAogCS5zdXNwZW5kCT0gcnQyeDAwc29jX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBzb2NfcmVzdW1lLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyODAwcGNpX2RyaXZlciA9IHsKQEAgLTEyOTAsNyArMTI1Niw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xMjk4LDcgKzEyNjQsNyBAQAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnQyODAwcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfV0lTT0MKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQwogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnQyODAwc29jX2RyaXZlcik7CiAjZW5kaWYKIAkJcmV0dXJuIHJldDsKQEAgLTEzMTMsNyArMTI3OSw3IEBACiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9QQ0kKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJ0MjgwMHBjaV9kcml2ZXIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQworI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYWI5NTM0Ni4uNWU0ZWUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtOTIsNyArOTIsNiBAQAogc3RhdGljIGludCBydDI4MDB1c2JfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7Ci0JdTE2IGNoaXBzZXQgPSAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PiAxNikgJiAweGZmZmY7CiAJc2l6ZV90IG9mZnNldCA9IDA7CiAKIAkvKgpAQCAtMTExLDkgKzExMCw5IEBACiAJICogQ2hlY2sgaWYgd2UgbmVlZCB0aGUgdXBwZXIgNGtiIGZpcm13YXJlIGRhdGEgb3Igbm90LgogCSAqLwogCWlmICgobGVuID09IDQwOTYpICYmCi0JICAgIChjaGlwc2V0ICE9IDB4Mjg2MCkgJiYKLQkgICAgKGNoaXBzZXQgIT0gMHgyODcyKSAmJgotCSAgICAoY2hpcHNldCAhPSAweDMwNzApKQorCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgorCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSAmJgorCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDcwKSkKIAkJcmV0dXJuIEZXX0JBRF9WRVJTSU9OOwogCiAJLyoKQEAgLTEzOCwxNCArMTM3LDEzIEBACiAJdTMyIHJlZzsKIAl1MzIgb2Zmc2V0OwogCXUzMiBsZW5ndGg7Ci0JdTE2IGNoaXBzZXQgPSAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PiAxNikgJiAweGZmZmY7CiAKIAkvKgogCSAqIENoZWNrIHdoaWNoIHNlY3Rpb24gb2YgdGhlIGZpcm13YXJlIHdlIG5lZWQuCiAJICovCi0JaWYgKChjaGlwc2V0ID09IDB4Mjg2MCkgfHwKLQkgICAgKGNoaXBzZXQgPT0gMHgyODcyKSB8fAotCSAgICAoY2hpcHNldCA9PSAweDMwNzApKSB7CisJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgfHwKKwkgICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApKSB7CiAJCW9mZnNldCA9IDA7CiAJCWxlbmd0aCA9IDQwOTY7CiAJfSBlbHNlIHsKQEAgLTIwMCw5ICsxOTgsOSBAQAogCSAqLwogCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9CT09UX1NJR05BTCwgMHhmZiwgMCwgMCk7CiAKLQlpZiAoKGNoaXBzZXQgPT0gMHgzMDcwKSB8fAotCSAgICAoY2hpcHNldCA9PSAweDMwNzEpIHx8Ci0JICAgIChjaGlwc2V0ID09IDB4MzU3MikpIHsKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDcwKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzEpIHx8CisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzU3MikpIHsKIAkJdWRlbGF5KDIwMCk7CiAJCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9DVVJSRU5ULCAwLCAwLCAwKTsKIAkJdWRlbGF5KDEwKTsKQEAgLTI0OCwyNCArMjQ2LDYgQEAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgcnQyODAwdXNiX3dhaXRfd3BkbWFfcmVhZHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgcmVnOwotCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOwotCQlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfVFhfRE1BX0JVU1kpICYmCi0JCSAgICAhcnQyeDAwX2dldF9maWVsZDMyKHJlZywgV1BETUFfR0xPX0NGR19SWF9ETUFfQlVTWSkpCi0JCQlyZXR1cm4gMDsKLQotCQltc2xlZXAoMSk7Ci0JfQotCi0JRVJST1IocnQyeDAwZGV2LCAiV1BETUEgVFgvUlggYnVzeSwgYWJvcnRpbmcuXG4iKTsKLQlyZXR1cm4gLUVBQ0NFUzsKLX0KLQogc3RhdGljIGludCBydDI4MDB1c2JfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTI3NCw3ICsyNTQsNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmICh1bmxpa2VseShydDI4MDB1c2Jfd2FpdF93cGRtYV9yZWFkeShydDJ4MDBkZXYpIHx8CisJaWYgKHVubGlrZWx5KHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBfaW5pdF9yZWdpc3RlcnMocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X2JicChydDJ4MDBkZXYpIHx8CiAJCSAgICAgcnQyODAwX2luaXRfcmZjc3IocnQyeDAwZGV2KSkpCkBAIC0yOTUsOSArMjc1LDcgQEAKIAogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19QSFlfQ0xFQVIsIDApOwotCS8qIERvbid0IHVzZSBidWxrIGluIGFnZ3JlZ2F0aW9uIHdoZW4gd29ya2luZyB3aXRoIFVTQiAxLjEgKi8KLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfRU4sCi0JCQkgICAocnQyeDAwZGV2LT5yeC0+dXNiX21heHBhY2tldCA9PSA1MTIpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfRU4sIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19USU1FT1VULCAxMjgpOwogCS8qCiAJICogVG90YWwgcm9vbSBmb3IgUlggZnJhbWVzIGluIGtpbG9ieXRlcywgUEJGIG1pZ2h0IHN0aWxsIGV4Y2VlZApAQCAtMzQ2LDcgKzMyNCw3IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfUElOX0NGRywgMCk7CiAKIAkvKiBXYWl0IGZvciBETUEsIGlnbm9yZSBlcnJvciAqLwotCXJ0MjgwMHVzYl93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldik7CisJcnQyODAwX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KTsKIAogCXJ0MngwMHVzYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CiB9CkBAIC01NzMsNDEgKzU1MSw1NyBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7Ci0JX19sZTMyICpyeGQgPSAoX19sZTMyICopZW50cnktPnNrYi0+ZGF0YTsKKwlfX2xlMzIgKnJ4aSA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOwogCV9fbGUzMiAqcnh3aTsKLQl1MzIgcnhkMDsKKwlfX2xlMzIgKnJ4ZDsKKwl1MzIgcnhpMDsKIAl1MzIgcnh3aTA7CiAJdTMyIHJ4d2kxOwogCXUzMiByeHdpMjsKIAl1MzIgcnh3aTM7CisJdTMyIHJ4ZDA7CisJaW50IHJ4X3BrdF9sZW47CisKKwkvKgorCSAqIFJYIGZyYW1lIGZvcm1hdCBpcyA6CisJICogfCBSWElORk8gfCBSWFdJIHwgaGVhZGVyIHwgTDIgcGFkIHwgcGF5bG9hZCB8IHBhZCB8IFJYRCB8IFVTQiBwYWQgfAorCSAqICAgICAgICAgIHw8LS0tLS0tLS0tLS0tIHJ4X3BrdF9sZW4gLS0tLS0tLS0tLS0tLS0+fAorCSAqLworCXJ0MngwMF9kZXNjX3JlYWQocnhpLCAwLCAmcnhpMCk7CisJcnhfcGt0X2xlbiA9IHJ0MngwMF9nZXRfZmllbGQzMihyeGkwLCBSWElORk9fVzBfVVNCX0RNQV9SWF9QS1RfTEVOKTsKKworCXJ4d2kgPSAoX19sZTMyICopKGVudHJ5LT5za2ItPmRhdGEgKyBSWElORk9fREVTQ19TSVpFKTsKKworCS8qCisJICogRklYTUUgOiB3ZSBuZWVkIHRvIGNoZWNrIGZvciByeF9wa3RfbGVuIHZhbGlkaXR5CisJICovCisJcnhkID0gKF9fbGUzMiAqKShlbnRyeS0+c2tiLT5kYXRhICsgUlhJTkZPX0RFU0NfU0laRSArIHJ4X3BrdF9sZW4pOwogCiAJLyoKIAkgKiBDb3B5IGRlc2NyaXB0b3IgdG8gdGhlIHNrYmRlc2MtPmRlc2MgYnVmZmVyLCBtYWtpbmcgaXQgc2FmZSBmcm9tCiAJICogbW92aW5nIG9mIGZyYW1lIGRhdGEgaW4gcnQyeDAwdXNiLgogCSAqLwotCW1lbWNweShza2JkZXNjLT5kZXNjLCByeGQsIHNrYmRlc2MtPmRlc2NfbGVuKTsKLQlyeGQgPSAoX19sZTMyICopc2tiZGVzYy0+ZGVzYzsKLQlyeHdpID0gJnJ4ZFtSWElORk9fREVTQ19TSVpFIC8gc2l6ZW9mKF9fbGUzMildOworCW1lbWNweShza2JkZXNjLT5kZXNjLCByeGksIHNrYmRlc2MtPmRlc2NfbGVuKTsKIAogCS8qCiAJICogSXQgaXMgbm93IHNhZmUgdG8gcmVhZCB0aGUgZGVzY3JpcHRvciBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KIAkgKi8KLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJnJ4ZDApOwogCXJ0MngwMF9kZXNjX3JlYWQocnh3aSwgMCwgJnJ4d2kwKTsKIAlydDJ4MDBfZGVzY19yZWFkKHJ4d2ksIDEsICZyeHdpMSk7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeHdpLCAyLCAmcnh3aTIpOwogCXJ0MngwMF9kZXNjX3JlYWQocnh3aSwgMywgJnJ4d2kzKTsKKwlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJnJ4ZDApOwogCi0JaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWElORk9fVzBfQ1JDX0VSUk9SKSkKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9DUkNfRVJST1IpKQogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CiAKIAlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKIAkJcnhkZXNjLT5jaXBoZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocnh3aTAsIFJYV0lfVzBfVURGKTsKIAkJcnhkZXNjLT5jaXBoZXJfc3RhdHVzID0KLQkJICAgIHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWElORk9fVzBfQ0lQSEVSX0VSUk9SKTsKKwkJICAgIHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWERfVzBfQ0lQSEVSX0VSUk9SKTsKIAl9CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9ERUNSWVBURUQpKSB7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWERfVzBfREVDUllQVEVEKSkgewogCQkvKgogCQkgKiBIYXJkd2FyZSBoYXMgc3RyaXBwZWQgSVYvRUlWIGRhdGEgZnJvbSA4MDIuMTEgZnJhbWUgZHVyaW5nCiAJCSAqIGRlY3J5cHRpb24uIFVuZm9ydHVuYXRlbHkgdGhlIGRlc2NyaXB0b3IgZG9lc24ndCBjb250YWluCkBAIC02MjIsMTMgKzYxNiwxMSBAQAogCQkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CiAJfQogCi0JaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWElORk9fVzBfTVlfQlNTKSkKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9NWV9CU1MpKQogCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfTVlfQlNTOwogCi0JaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWElORk9fVzBfTDJQQUQpKSB7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWERfVzBfTDJQQUQpKQogCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfTDJQQUQ7Ci0JCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfTDJfUEFEREVEOwotCX0KIAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnh3aTEsIFJYV0lfVzFfU0hPUlRfR0kpKQogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfU0hPUlRfR0k7CkBAIC02NjMsNyArNjU1LDYgQEAKIAkgKiBSZW1vdmUgUlhXSSBkZXNjcmlwdG9yIGZyb20gc3RhcnQgb2YgYnVmZmVyLgogCSAqLwogCXNrYl9wdWxsKGVudHJ5LT5za2IsIHNrYmRlc2MtPmRlc2NfbGVuKTsKLQlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2MtPnNpemUpOwogfQogCiAvKgpAQCAtODE0LDUxICs4MDUsMjcgQEAKIAkvKiBBYm9jb20gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0ODIsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBBaXJUaWVzICovCi0JeyBVU0JfREVWSUNFKDB4MWVkYSwgMHgyMzEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEFtaWdvICovCi0JeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlMGIsIDB4OTA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBBbWl0ICovCiAJeyBVU0JfREVWSUNFKDB4MTVjNSwgMHgwMDA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEFza2V5ICovCiAJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDBhMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQVNVUyAqLwogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTczMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzQyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc2MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEF6dXJlV2F2ZSAqLwogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjczKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQmVsa2luICovCiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDUzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODA1YyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MjVhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTJlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIENpc2NvICovCi0JeyBVU0JfREVWSUNFKDB4MTY3YiwgMHg0MDAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIENvbmNlcHRyb25pYyAqLwogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LApAQCAtODY3LDEwMyArODM0LDM4IEBACiAJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDJmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwM2YpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MThjNSwgMHgwMDEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEQtTGluayAqLwogCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEVkaW1heCAqLwotCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEVuY29yZSAqLwotCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTQ4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEVuR2VuaXVzICovCiAJeyBVU0JfREVWSUNFKDBYMTc0MCwgMHg5NzAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk4MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogR2VtdGVrICovCi0JeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEdpZ2FieXRlICovCiAJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogSGF3a2luZyAqLwogCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBJLU8gREFUQSAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBMZXZlbE9uZSAqLwotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDA2MTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTGlua3N5cyAqLwogCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBMb2dpdGVjICovCiAJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTW90b3JvbGEgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAwZCwgMHg5MDMyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIE1TSSAqLwotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg5OSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzBhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODk5YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBPdmlzbGluayAqLwotCXsgVVNCX0RFVklDRSgweDFiNzUsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBQYXJhICovCi0JeyBVU0JfREVWSUNFKDB4MjBiOCwgMHg4ODg4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFBlZ2F0cm9uICovCi0JeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogUGhpbGlwcyAqLwogCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBQbGFuZXggKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGVkMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBRY29tICovCi0JeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjU5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFF1YW50YSAqLwotCXsgVVNCX0RFVklDRSgweDFhMzIsIDB4MDMwNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBSYWxpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDIwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4Mjg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU2Ftc3VuZyAqLwogCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4MjAxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBTaWVtZW5zICovCkBAIC05NzQsMzYgKzg3NiwxOCBAQAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDM5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2MpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2YpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDRkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFNNQyAqLwogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NjYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDg1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNTEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YjUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGM1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU3BhcmtsYW4gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU3dlZXggKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAxNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBVLU1lZGlhKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogWkNPTSAqLwpAQCAtMTAxMiwxMiArODk2LDE5NSBAQAogCS8qIFppbndlbGwgKi8KIAl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHg1MjU3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFp5eGVsICovCiAJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfUlQzMFhYCisJLyogQWJvY29tICovCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQWlyVGllcyAqLworCXsgVVNCX0RFVklDRSgweDFlZGEsIDB4MjMxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBenVyZVdhdmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQ29uY2VwdHJvbmljICovCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIENvcmVnYSAqLworCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBELUxpbmsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogRWRpbWF4ICovCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEVuY29yZSAqLworCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTQ4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBFbkdlbml1cyAqLworCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEdpZ2FieXRlICovCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEktTyBEQVRBICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIE1TSSAqLworCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBQZWdhdHJvbiAqLworCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogUGxhbmV4ICovCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFF1YW50YSAqLworCXsgVVNCX0RFVklDRSgweDFhMzIsIDB4MDMwNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBSYWxpbmsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDIwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogU2l0ZWNvbSAqLworCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogU01DICovCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFppbndlbGwgKi8KKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHg1MjU3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JUMjgwMFVTQl9SVDM1WFgKKwkvKiBBc2tleSAqLworCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBDaXNjbyAqLworCXsgVVNCX0RFVklDRSgweDE2N2IsIDB4NDAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBFbkdlbml1cyAqLworCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTgwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBJLU8gREFUQSAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBSYWxpbmsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMzNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzNTcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4ODA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTaXRlY29tICovCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFppbndlbGwgKi8KKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1VOS05PV04KKwkvKgorCSAqIFVuY2xlYXIgd2hhdCBraW5kIG9mIGRldmljZXMgdGhlc2UgYXJlICh0aGV5IGFyZW4ndCBzdXBwb3J0ZWQgYnkgdGhlCisJICogdmVuZG9yIGRyaXZlcikuCisJICovCisJLyogQWxsd2luICovCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjc3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzNTcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEFtaWdvICovCisJeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBlMGIsIDB4OTA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBc2tleSAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MGEwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBU1VTICovCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc2MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3ODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzkwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NjEsIDB4MGIwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBenVyZVdhdmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjg0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBCZWxraW4gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgyNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQnVmZmFsbyAqLworCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDEyZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE1ZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBDb25jZXB0cm9uaWMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIENvcmVnYSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwNDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MThjNSwgMHgwMDA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEQtTGluayAqLworCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBFbmNvcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEVuR2VuaXVzICovCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogR2VtdGVrICovCisJeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEdpZ2FieXRlICovCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEhhd2tpbmcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEktTyBEQVRBICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBMZXZlbE9uZSAqLworCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDA2MTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogTGlua3N5cyAqLworCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIE1vdG9yb2xhICovCisJeyBVU0JfREVWSUNFKDB4MTAwZCwgMHg5MDMyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIE1TSSAqLworCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Mzg3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjJhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4OTlhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIE92aXNsaW5rICovCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFBhcmEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMGI4LCAweDg4ODgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogUGVnYXRyb24gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWE2LCAweDAxMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBQbGFuZXggKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogUWNvbSAqLworCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjI1OSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTaXRlY29tICovCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDRhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0ZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTTUMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE1MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGM1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhkNTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFN3ZWV4ICovCisJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMTUzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBaeXhlbCAqLwogCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKyNlbmRpZgogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCmluZGV4IDFlNDM0MGEuLmQxZDhhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKQEAgLTc5LDYgKzc5LDggQEAKICAqLwogI2RlZmluZSBUWElORk9fREVTQ19TSVpFCQkoIDEgKiBzaXplb2YoX19sZTMyKSApCiAjZGVmaW5lIFJYSU5GT19ERVNDX1NJWkUJCSggMSAqIHNpemVvZihfX2xlMzIpICkKKyNkZWZpbmUgUlhXSV9ERVNDX1NJWkUJCQkoIDQgKiBzaXplb2YoX19sZTMyKSApCisjZGVmaW5lIFJYRF9ERVNDX1NJWkUJCQkoIDEgKiBzaXplb2YoX19sZTMyKSApCiAKIC8qCiAgKiBUWCBJbmZvIHN0cnVjdHVyZQpAQCAtMTAxLDYgKzEwMyw1NCBAQAogI2RlZmluZSBUWElORk9fVzBfVVNCX0RNQV9UWF9CVVJTVAlGSUVMRDMyKDB4ODAwMDAwMDApCiAKIC8qCisgKiBSWCBJbmZvIHN0cnVjdHVyZQorICovCisKKy8qCisgKiBXb3JkIDAKKyAqLworCisjZGVmaW5lIFJYSU5GT19XMF9VU0JfRE1BX1JYX1BLVF9MRU4JRklFTEQzMigweDAwMDBmZmZmKQorCisvKgorICogUlggV0kgc3RydWN0dXJlCisgKi8KKworLyoKKyAqIFdvcmQwCisgKi8KKyNkZWZpbmUgUlhXSV9XMF9XSVJFTEVTU19DTElfSUQJCUZJRUxEMzIoMHgwMDAwMDBmZikKKyNkZWZpbmUgUlhXSV9XMF9LRVlfSU5ERVgJCUZJRUxEMzIoMHgwMDAwMDMwMCkKKyNkZWZpbmUgUlhXSV9XMF9CU1NJRAkJCUZJRUxEMzIoMHgwMDAwMWMwMCkKKyNkZWZpbmUgUlhXSV9XMF9VREYJCQlGSUVMRDMyKDB4MDAwMGUwMDApCisjZGVmaW5lIFJYV0lfVzBfTVBEVV9UT1RBTF9CWVRFX0NPVU5UCUZJRUxEMzIoMHgwZmZmMDAwMCkKKyNkZWZpbmUgUlhXSV9XMF9USUQJCQlGSUVMRDMyKDB4ZjAwMDAwMDApCisKKy8qCisgKiBXb3JkMQorICovCisjZGVmaW5lIFJYV0lfVzFfRlJBRwkJCUZJRUxEMzIoMHgwMDAwMDAwZikKKyNkZWZpbmUgUlhXSV9XMV9TRVFVRU5DRQkJRklFTEQzMigweDAwMDBmZmYwKQorI2RlZmluZSBSWFdJX1cxX01DUwkJCUZJRUxEMzIoMHgwMDdmMDAwMCkKKyNkZWZpbmUgUlhXSV9XMV9CVwkJCUZJRUxEMzIoMHgwMDgwMDAwMCkKKyNkZWZpbmUgUlhXSV9XMV9TSE9SVF9HSQkJRklFTEQzMigweDAxMDAwMDAwKQorI2RlZmluZSBSWFdJX1cxX1NUQkMJCQlGSUVMRDMyKDB4MDYwMDAwMDApCisjZGVmaW5lIFJYV0lfVzFfUEhZTU9ERQkJCUZJRUxEMzIoMHhjMDAwMDAwMCkKKworLyoKKyAqIFdvcmQyCisgKi8KKyNkZWZpbmUgUlhXSV9XMl9SU1NJMAkJCUZJRUxEMzIoMHgwMDAwMDBmZikKKyNkZWZpbmUgUlhXSV9XMl9SU1NJMQkJCUZJRUxEMzIoMHgwMDAwZmYwMCkKKyNkZWZpbmUgUlhXSV9XMl9SU1NJMgkJCUZJRUxEMzIoMHgwMGZmMDAwMCkKKworLyoKKyAqIFdvcmQzCisgKi8KKyNkZWZpbmUgUlhXSV9XM19TTlIwCQkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWFdJX1czX1NOUjEJCQlGSUVMRDMyKDB4MDAwMGZmMDApCisKKy8qCiAgKiBSWCBkZXNjcmlwdG9yIGZvcm1hdCBmb3IgUlggUmluZy4KICAqLwogCkBAIC0xMTUsMjUgKzE2NSwyNSBAQAogICogQU1TRFU6IHJ4IHdpdGggODAyLjMgaGVhZGVyLCBub3QgODAyLjExIGhlYWRlci4KICAqLwogCi0jZGVmaW5lIFJYSU5GT19XMF9CQQkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgUlhJTkZPX1cwX0RBVEEJCQlGSUVMRDMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFJYSU5GT19XMF9OVUxMREFUQQkJRklFTEQzMigweDAwMDAwMDA0KQotI2RlZmluZSBSWElORk9fVzBfRlJBRwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgUlhJTkZPX1cwX1VOSUNBU1RfVE9fTUUJCUZJRUxEMzIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgUlhJTkZPX1cwX01VTFRJQ0FTVAkJRklFTEQzMigweDAwMDAwMDIwKQotI2RlZmluZSBSWElORk9fVzBfQlJPQURDQVNUCQlGSUVMRDMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFJYSU5GT19XMF9NWV9CU1MJCUZJRUxEMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgUlhJTkZPX1cwX0NSQ19FUlJPUgkJRklFTEQzMigweDAwMDAwMTAwKQotI2RlZmluZSBSWElORk9fVzBfQ0lQSEVSX0VSUk9SCQlGSUVMRDMyKDB4MDAwMDA2MDApCi0jZGVmaW5lIFJYSU5GT19XMF9BTVNEVQkJCUZJRUxEMzIoMHgwMDAwMDgwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0hUQwkJCUZJRUxEMzIoMHgwMDAwMTAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX1JTU0kJCQlGSUVMRDMyKDB4MDAwMDIwMDApCi0jZGVmaW5lIFJYSU5GT19XMF9MMlBBRAkJCUZJRUxEMzIoMHgwMDAwNDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0FNUERVCQkJRklFTEQzMigweDAwMDA4MDAwKQotI2RlZmluZSBSWElORk9fVzBfREVDUllQVEVECQlGSUVMRDMyKDB4MDAwMTAwMDApCi0jZGVmaW5lIFJYSU5GT19XMF9QTENQX1JTU0kJCUZJRUxEMzIoMHgwMDAyMDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0NJUEhFUl9BTEcJCUZJRUxEMzIoMHgwMDA0MDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0xBU1RfQU1TRFUJCUZJRUxEMzIoMHgwMDA4MDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX1BMQ1BfU0lHTkFMCQlGSUVMRDMyKDB4ZmZmMDAwMDApCisjZGVmaW5lIFJYRF9XMF9CQQkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgUlhEX1cwX0RBVEEJCQlGSUVMRDMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJYRF9XMF9OVUxMREFUQQkJCUZJRUxEMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgUlhEX1cwX0ZSQUcJCQlGSUVMRDMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFJYRF9XMF9VTklDQVNUX1RPX01FCQlGSUVMRDMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFJYRF9XMF9NVUxUSUNBU1QJCUZJRUxEMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgUlhEX1cwX0JST0FEQ0FTVAkJRklFTEQzMigweDAwMDAwMDQwKQorI2RlZmluZSBSWERfVzBfTVlfQlNTCQkJRklFTEQzMigweDAwMDAwMDgwKQorI2RlZmluZSBSWERfVzBfQ1JDX0VSUk9SCQlGSUVMRDMyKDB4MDAwMDAxMDApCisjZGVmaW5lIFJYRF9XMF9DSVBIRVJfRVJST1IJCUZJRUxEMzIoMHgwMDAwMDYwMCkKKyNkZWZpbmUgUlhEX1cwX0FNU0RVCQkJRklFTEQzMigweDAwMDAwODAwKQorI2RlZmluZSBSWERfVzBfSFRDCQkJRklFTEQzMigweDAwMDAxMDAwKQorI2RlZmluZSBSWERfVzBfUlNTSQkJCUZJRUxEMzIoMHgwMDAwMjAwMCkKKyNkZWZpbmUgUlhEX1cwX0wyUEFECQkJRklFTEQzMigweDAwMDA0MDAwKQorI2RlZmluZSBSWERfVzBfQU1QRFUJCQlGSUVMRDMyKDB4MDAwMDgwMDApCisjZGVmaW5lIFJYRF9XMF9ERUNSWVBURUQJCUZJRUxEMzIoMHgwMDAxMDAwMCkKKyNkZWZpbmUgUlhEX1cwX1BMQ1BfUlNTSQkJRklFTEQzMigweDAwMDIwMDAwKQorI2RlZmluZSBSWERfVzBfQ0lQSEVSX0FMRwkJRklFTEQzMigweDAwMDQwMDAwKQorI2RlZmluZSBSWERfVzBfTEFTVF9BTVNEVQkJRklFTEQzMigweDAwMDgwMDAwKQorI2RlZmluZSBSWERfVzBfUExDUF9TSUdOQUwJCUZJRUxEMzIoMHhmZmYwMDAwMCkKIAogI2VuZGlmIC8qIFJUMjgwMFVTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggZGNmYzhjMi4uZDlkYWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtMTA0LDYgKzEwNCwxMiBAQAogI2RlZmluZSBHRVRfRFVSQVRJT05fUkVTKF9fc2l6ZSwgX19yYXRlKSgoKF9fc2l6ZSkgKiA4ICogMTApICUgKF9fcmF0ZSkpCiAKIC8qCisgKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBMMiBwYWRkaW5nIGJ5dGVzIHJlcXVpcmVkIGJldHdlZW4gdGhlIGhlYWRlciBhbmQKKyAqIHRoZSBwYXlsb2FkLgorICovCisjZGVmaW5lIEwyUEFEX1NJWkUoX19oZHJsZW4pCSgtKF9faGRybGVuKSAmIDMpCisKKy8qCiAgKiBEZXRlcm1pbmUgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCwKICAqIHRvIG1ha2Ugc3VyZSB0aGUgODAyLjExIHBheWxvYWQgaXMgcGFkZGVkIHRvIGEgNC1ieXRlIGJvdW5kcmFyeQogICogd2UgbXVzdCBkZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHBheWxvYWQgYW5kIGNhbGN1bGF0ZSB0aGUKQEAgLTE1NCw2ICsxNjAsNyBAQAogZW51bSBydDJ4MDBfY2hpcF9pbnRmIHsKIAlSVDJYMDBfQ0hJUF9JTlRGX1BDSSwKIAlSVDJYMDBfQ0hJUF9JTlRGX1VTQiwKKwlSVDJYMDBfQ0hJUF9JTlRGX1NPQywKIH07CiAKIC8qCkBAIC0xNjMsMjUgKzE3MCwyNiBAQAogICovCiBzdHJ1Y3QgcnQyeDAwX2NoaXAgewogCXUxNiBydDsKLSNkZWZpbmUgUlQyNDYwCQkweDAxMDEKLSNkZWZpbmUgUlQyNTYwCQkweDAyMDEKLSNkZWZpbmUgUlQyNTcwCQkweDEyMDEKLSNkZWZpbmUgUlQyNTYxcwkJMHgwMzAxCS8qIFR1cmJvICovCi0jZGVmaW5lIFJUMjU2MQkJMHgwMzAyCi0jZGVmaW5lIFJUMjY2MQkJMHgwNDAxCi0jZGVmaW5lIFJUMjU3MQkJMHgxMzAwCi0jZGVmaW5lIFJUMjg2MAkJMHgwNjAxCS8qIDIuNEdIeiBQQ0kvQ0IgKi8KLSNkZWZpbmUgUlQyODYwRAkJMHgwNjgxCS8qIDIuNEdIeiwgNUdIeiBQQ0kvQ0IgKi8KLSNkZWZpbmUgUlQyODkwCQkweDA3MDEJLyogMi40R0h6IFBDSWUgKi8KLSNkZWZpbmUgUlQyODkwRAkJMHgwNzgxCS8qIDIuNEdIeiwgNUdIeiBQQ0llICovCisjZGVmaW5lIFJUMjQ2MAkJMHgyNDYwCisjZGVmaW5lIFJUMjU2MAkJMHgyNTYwCisjZGVmaW5lIFJUMjU3MAkJMHgyNTcwCisjZGVmaW5lIFJUMjY2MQkJMHgyNjYxCisjZGVmaW5lIFJUMjU3MwkJMHgyNTczCisjZGVmaW5lIFJUMjg2MAkJMHgyODYwCS8qIDIuNEdIeiBQQ0kvQ0IgKi8KKyNkZWZpbmUgUlQyODcwCQkweDI4NzAKKyNkZWZpbmUgUlQyODcyCQkweDI4NzIKICNkZWZpbmUgUlQyODgwCQkweDI4ODAJLyogV1NPQyAqLworI2RlZmluZSBSVDI4ODMJCTB4Mjg4MwkvKiBXU09DICovCisjZGVmaW5lIFJUMjg5MAkJMHgyODkwCS8qIDIuNEdIeiBQQ0llICovCiAjZGVmaW5lIFJUMzA1MgkJMHgzMDUyCS8qIFdTT0MgKi8KKyNkZWZpbmUgUlQzMDcwCQkweDMwNzAKKyNkZWZpbmUgUlQzMDcxCQkweDMwNzEKICNkZWZpbmUgUlQzMDkwCQkweDMwOTAJLyogMi40R0h6IFBDSWUgKi8KLSNkZWZpbmUgUlQyODcwCQkweDE2MDAKLSNkZWZpbmUgUlQzMDcwCQkweDE4MDAKKyNkZWZpbmUgUlQzMzkwCQkweDMzOTAKKyNkZWZpbmUgUlQzNTcyCQkweDM1NzIKIAogCXUxNiByZjsKLQl1MzIgcmV2OworCXUxNiByZXY7CiAKIAllbnVtIHJ0MngwMF9jaGlwX2ludGYgaW50ZjsKIH07CkBAIC05MTEsNTEgKzkxOSwzMCBAQAogICogQ2hpcHNldCBoYW5kbGVycwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9jaGlwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgY29uc3QgdTE2IHJ0LCBjb25zdCB1MTYgcmYsIGNvbnN0IHUzMiByZXYpCisJCQkJICAgY29uc3QgdTE2IHJ0LCBjb25zdCB1MTYgcmYsIGNvbnN0IHUxNiByZXYpCiB7CiAJcnQyeDAwZGV2LT5jaGlwLnJ0ID0gcnQ7CiAJcnQyeDAwZGV2LT5jaGlwLnJmID0gcmY7CiAJcnQyeDAwZGV2LT5jaGlwLnJldiA9IHJldjsKLX0KIAotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9zZXRfY2hpcF9ydChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgIGNvbnN0IHUxNiBydCkKLXsKLQlydDJ4MDBkZXYtPmNoaXAucnQgPSBydDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9zZXRfY2hpcF9yZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgIGNvbnN0IHUxNiByZiwgY29uc3QgdTMyIHJldikKLXsKLQlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBydDJ4MDBkZXYtPmNoaXAucnQsIHJmLCByZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3ByaW50X2NoaXAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKIAlJTkZPKHJ0MngwMGRldiwKLQkgICAgICJDaGlwc2V0IGRldGVjdGVkIC0gcnQ6ICUwNHgsIHJmOiAlMDR4LCByZXY6ICUwOHguXG4iLAorCSAgICAgIkNoaXBzZXQgZGV0ZWN0ZWQgLSBydDogJTA0eCwgcmY6ICUwNHgsIHJldjogJTA0eC5cbiIsCiAJICAgICBydDJ4MDBkZXYtPmNoaXAucnQsIHJ0MngwMGRldi0+Y2hpcC5yZiwgcnQyeDAwZGV2LT5jaGlwLnJldik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcnQoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LCBjb25zdCB1MTYgY2hpcCkKK3N0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcnQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgdTE2IHJ0KQogewotCXJldHVybiAoY2hpcHNldC0+cnQgPT0gY2hpcCk7CisJcmV0dXJuIChydDJ4MDBkZXYtPmNoaXAucnQgPT0gcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGNoYXIgcnQyeDAwX3JmKGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCwgY29uc3QgdTE2IGNoaXApCitzdGF0aWMgaW5saW5lIGNoYXIgcnQyeDAwX3JmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHUxNiByZikKIHsKLQlyZXR1cm4gKGNoaXBzZXQtPnJmID09IGNoaXApOworCXJldHVybiAocnQyeDAwZGV2LT5jaGlwLnJmID09IHJmKTsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgcnQyeDAwX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQpCitzdGF0aWMgaW5saW5lIHUxNiBydDJ4MDBfcmV2KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcmV0dXJuIGNoaXBzZXQtPnJldjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9jaGVja19yZXYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LAotCQkJCSAgICBjb25zdCB1MzIgbWFzaywgY29uc3QgdTMyIHJldikKLXsKLQlyZXR1cm4gKChjaGlwc2V0LT5yZXYgJiBtYXNrKSA9PSByZXYpOworCXJldHVybiBydDJ4MDBkZXYtPmNoaXAucmV2OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9jaGlwX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTk2NCwyMCArOTUxLDI1IEBACiAJcnQyeDAwZGV2LT5jaGlwLmludGYgPSBpbnRmOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2ludGYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LAorc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgZW51bSBydDJ4MDBfY2hpcF9pbnRmIGludGYpCiB7Ci0JcmV0dXJuIChjaGlwc2V0LT5pbnRmID09IGludGYpOworCXJldHVybiAocnQyeDAwZGV2LT5jaGlwLmludGYgPT0gaW50Zik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaW50Zl9pc19wY2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaXNfcGNpKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcmV0dXJuIHJ0MngwMF9pbnRmKCZydDJ4MDBkZXYtPmNoaXAsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKKwlyZXR1cm4gcnQyeDAwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1BDSSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaW50Zl9pc191c2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaXNfdXNiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcmV0dXJuIHJ0MngwMF9pbnRmKCZydDJ4MDBkZXYtPmNoaXAsIFJUMlgwMF9DSElQX0lOVEZfVVNCKTsKKwlyZXR1cm4gcnQyeDAwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1VTQik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaXNfc29jKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJcmV0dXJuIHJ0MngwMF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9TT0MpOwogfQogCiAvKioKQEAgLTEwMTksOSArMTAxMSw5IEBACiBpbnQgcnQyeDAwbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnQyeDAwbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogaW50IHJ0MngwMG1hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogaW50IHJ0MngwMG1hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIHZvaWQgcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCkBAIC0xMDM4LDggKzEwMzAsNiBAQAogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTyAqLwogaW50IHJ0MngwMG1hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwotaW50IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiB2b2lkIHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IDdkMzIzYTcuLjcwYzA0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAlkdW1wX2hkci0+ZGF0YV9sZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbik7CiAJZHVtcF9oZHItPmNoaXBfcnQgPSBjcHVfdG9fbGUxNihydDJ4MDBkZXYtPmNoaXAucnQpOwogCWR1bXBfaGRyLT5jaGlwX3JmID0gY3B1X3RvX2xlMTYocnQyeDAwZGV2LT5jaGlwLnJmKTsKLQlkdW1wX2hkci0+Y2hpcF9yZXYgPSBjcHVfdG9fbGUzMihydDJ4MDBkZXYtPmNoaXAucmV2KTsKKwlkdW1wX2hkci0+Y2hpcF9yZXYgPSBjcHVfdG9fbGUxNihydDJ4MDBkZXYtPmNoaXAucmV2KTsKIAlkdW1wX2hkci0+dHlwZSA9IGNwdV90b19sZTE2KHR5cGUpOwogCWR1bXBfaGRyLT5xdWV1ZV9pbmRleCA9IGRlc2MtPmVudHJ5LT5xdWV1ZS0+cWlkOwogCWR1bXBfaGRyLT5lbnRyeV9pbmRleCA9IGRlc2MtPmVudHJ5LT5lbnRyeV9pZHg7CkBAIC01NzMsNyArNTczLDcgQEAKIAlibG9iLT5kYXRhID0gZGF0YTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgInJ0IGNoaXA6XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucnQpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjpcdCUwOHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmV2aXNpb246XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmV2KTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgIlxuIik7CiAJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZWdpc3Rlclx0YmFzZVx0d29yZHNcdHdvcmRzaXplXG4iKTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgImNzclx0JWRcdCVkXHQlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCAyNjVlNjZkLi5iOTM3MzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC0zODUsOSArMzg1LDYgQEAKIAltZW1zZXQoJnJ4ZGVzYywgMCwgc2l6ZW9mKHJ4ZGVzYykpOwogCXJ0MngwMGRldi0+b3BzLT5saWItPmZpbGxfcnhkb25lKGVudHJ5LCAmcnhkZXNjKTsKIAotCS8qIFRyaW0gYnVmZmVyIHRvIGNvcnJlY3Qgc2l6ZSAqLwotCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy5zaXplKTsKLQogCS8qCiAJICogVGhlIGRhdGEgYmVoaW5kIHRoZSBpZWVlODAyMTEgaGVhZGVyIG11c3QgYmUKIAkgKiBhbGlnbmVkIG9uIGEgNCBieXRlIGJvdW5kYXJ5LgpAQCAtNDA0LDExICs0MDEsMTYgQEAKIAkgICAgKHJ4ZGVzYy5mbGFncyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQogCQlydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgsCiAJCQkJCSAgJnJ4ZGVzYyk7Ci0JZWxzZSBpZiAocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9MMlBBRCkKKwllbHNlIGlmIChoZWFkZXJfbGVuZ3RoICYmCisJCSAocnhkZXNjLnNpemUgPiBoZWFkZXJfbGVuZ3RoKSAmJgorCQkgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpKQogCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAJZWxzZQogCQlydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCisJLyogVHJpbSBidWZmZXIgdG8gY29ycmVjdCBzaXplICovCisJc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLnNpemUpOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIHVzaW5nIEhULiBJbiB0aGF0IGNhc2UsCiAJICogdGhlIHJhdGUgaXMgdGhlIE1DUyBpbmRleCBhbmQgc2hvdWxkIGJlIHBhc3NlZCB0byBtYWM4MDIxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IGRlNTQ5YzIuLmFiYmQ4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTE4NywxMCArMTg3LDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc3RvcCk7CiAKIGludCBydDJ4MDBtYWNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb25mLT52aWYpOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgUUlEX0JFQUNPTik7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yMDMsNyArMjAzLDcgQEAKIAkgICAgIXRlc3RfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQkvKgogCQkgKiBXZSBkb24ndCBzdXBwb3J0IG1peGVkIGNvbWJpbmF0aW9ucyBvZgpAQCAtMjYzLDcgKzI2Myw3IEBACiAJICogaW5jcmVhc2UgaW50ZXJmYWNlIGNvdW50IGFuZCBzdGFydCBpbml0aWFsaXphdGlvbi4KIAkgKi8KIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCsrOwogCWVsc2UKIAkJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCsrOwpAQCAtMjczLDE2ICsyNzMsMTYgQEAKIAltdXRleF9pbml0KCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKIAlpbnRmLT5iZWFjb24gPSBlbnRyeTsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQltZW1jcHkoJmludGYtPmJzc2lkLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweSgmaW50Zi0+bWFjLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCW1lbWNweSgmaW50Zi0+YnNzaWQsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCW1lbWNweSgmaW50Zi0+bWFjLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKIAogCS8qCiAJICogVGhlIE1BQyBhZGRkcmVzcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYWZ0ZXIgdGhlIGRldmljZQogCSAqIGhhcyBiZWVuIGluaXRpYWxpemVkLiBPdGhlcndpc2UgdGhlIGRldmljZSBjYW4gcmVzZXQKIAkgKiB0aGUgTUFDIHJlZ2lzdGVycy4KIAkgKi8KLQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCBjb25mLT50eXBlLCBpbnRmLT5tYWMsIE5VTEwpOworCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwgaW50Zi0+bWFjLCBOVUxMKTsKIAogCS8qCiAJICogU29tZSBmaWx0ZXJzIGRlcGVuZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIG1vZGUuIFdlIGNhbiBmb3JjZQpAQCAtMjk2LDEwICsyOTYsMTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19hZGRfaW50ZXJmYWNlKTsKIAogdm9pZCBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb25mLT52aWYpOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAKIAkvKgogCSAqIERvbid0IGFsbG93IGludGVyZmFjZXMgdG8gYmUgcmVtb3ZlIHdoaWxlCkBAIC0zMDcsMTEgKzMwNywxMSBAQAogCSAqIG5vIGludGVyZmFjZSBpcyBwcmVzZW50LgogCSAqLwogCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KSB8fAotCSAgICAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCkgfHwKKwkgICAgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCiAJCXJldHVybjsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudC0tOwogCWVsc2UKIAkJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudC0tOwpAQCAtNTU1LDIyICs1NTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2dldF9zdGF0cyk7CiAKLWludCBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXM7IGkrKykgewotCQlzdGF0c1tpXS5sZW4gPSBydDJ4MDBkZXYtPnR4W2ldLmxlbmd0aDsKLQkJc3RhdHNbaV0ubGltaXQgPSBydDJ4MDBkZXYtPnR4W2ldLmxpbWl0OwotCQlzdGF0c1tpXS5jb3VudCA9IHJ0MngwMGRldi0+dHhbaV0uY291bnQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzKTsKLQogdm9pZCBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IDBmZWI0ZDAuLjA0NzEyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTQxLDYgKzQxLDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CiAJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCQlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMigqcmVnLCBmaWVsZCkpCkBAIC0yNjksNyArMjcyLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwogCWludCByZXR2YWw7Ci0JdTE2IGNoaXA7CiAKIAlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIHBjaV9uYW1lKHBjaV9kZXYpKTsKIAlpZiAocmV0dmFsKSB7CkBAIC0zMTIsMTIgKzMxNCw2IEBACiAKIAlydDJ4MDBfc2V0X2NoaXBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKIAotCS8qCi0JICogRGV0ZXJtaW5lIFJUIGNoaXBzZXQgYnkgcmVhZGluZyBQQ0kgaGVhZGVyLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9ERVZJQ0VfSUQsICZjaGlwKTsKLQlydDJ4MDBfc2V0X2NoaXBfcnQocnQyeDAwZGV2LCBjaGlwKTsKLQogCXJldHZhbCA9IHJ0MngwMHBjaV9hbGxvY19yZWcocnQyeDAwZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGV4aXRfZnJlZV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggZDRmOTQ0OS4uODE0OWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBSVDJYMDBQQ0lfSAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogLyoKICAqIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggOTkxNWEwOS4uMGI0ODAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTE3Nyw1NSArMTc3LDQ1IEBACiAKIHZvaWQgcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQogewotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCXVuc2lnbmVkIGludCBmcmFtZV9sZW5ndGggPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGggPSBza2ItPmxlbiAtIGhlYWRlcl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCAwKTsKIAl1bnNpZ25lZCBpbnQgcGF5bG9hZF9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3RoKTsKLQl1bnNpZ25lZCBpbnQgbDJwYWQgPSA0IC0gKHBheWxvYWRfYWxpZ24gLSBoZWFkZXJfYWxpZ24pOworCXVuc2lnbmVkIGludCBsMnBhZCA9IHBheWxvYWRfbGVuZ3RoID8gTDJQQURfU0laRShoZWFkZXJfbGVuZ3RoKSA6IDA7CiAKLQlpZiAoaGVhZGVyX2FsaWduID09IHBheWxvYWRfYWxpZ24pIHsKLQkJLyoKLQkJICogQm90aCBoZWFkZXIgYW5kIHBheWxvYWQgbXVzdCBiZSBtb3ZlZCB0aGUgc2FtZQotCQkgKiBhbW91bnQgb2YgYnl0ZXMgdG8gYWxpZ24gdGhlbSBwcm9wZXJseS4gVGhpcyBtZWFucwotCQkgKiB3ZSBkb24ndCB1c2UgdGhlIEwyIHBhZGRpbmcgYnV0IGp1c3QgbW92ZSB0aGUgZW50aXJlCi0JCSAqIGZyYW1lLgotCQkgKi8KLQkJcnQyeDAwcXVldWVfYWxpZ25fZnJhbWUoc2tiKTsKLQl9IGVsc2UgaWYgKCFwYXlsb2FkX2FsaWduKSB7Ci0JCS8qCi0JCSAqIFNpbXBsZSBMMiBwYWRkaW5nLCBvbmx5IHRoZSBoZWFkZXIgbmVlZHMgdG8gYmUgbW92ZWQsCi0JCSAqIHRoZSBwYXlsb2FkIGlzIGFscmVhZHkgcHJvcGVybHkgYWxpZ25lZC4KLQkJICovCi0JCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2FsaWduKTsKLQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgZnJhbWVfbGVuZ3RoKTsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICoKLQkJICogQ29tcGxpY2F0ZWQgTDIgcGFkZGluZywgYm90aCBoZWFkZXIgYW5kIHBheWxvYWQgbmVlZAotCQkgKiB0byBiZSBtb3ZlZC4gQnkgZGVmYXVsdCB3ZSBvbmx5IG1vdmUgdG8gdGhlIHN0YXJ0Ci0JCSAqIG9mIHRoZSBidWZmZXIsIHNvIG91ciBoZWFkZXIgYWxpZ25tZW50IG5lZWRzIHRvIGJlCi0JCSAqIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIHRoZSBoZWFkZXIKLQkJICogdG8gYmUgbW92ZWQuCi0JCSAqLwotCQlpZiAocGF5bG9hZF9hbGlnbiA+IGhlYWRlcl9hbGlnbikKLQkJCWhlYWRlcl9hbGlnbiArPSA0OworCS8qCisJICogQWRqdXN0IHRoZSBoZWFkZXIgYWxpZ25tZW50IGlmIHRoZSBwYXlsb2FkIG5lZWRzIHRvIGJlIG1vdmVkIG1vcmUKKwkgKiB0aGFuIHRoZSBoZWFkZXIuCisJICovCisJaWYgKHBheWxvYWRfYWxpZ24gPiBoZWFkZXJfYWxpZ24pCisJCWhlYWRlcl9hbGlnbiArPSA0OwogCi0JCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2FsaWduKTsKLQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgaGVhZGVyX2xlbmd0aCk7CisJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBpZiBubyBhbGlnbm1lbnQgaXMgbmVlZGVkICovCisJaWYgKCFoZWFkZXJfYWxpZ24pCisJCXJldHVybjsKKworCS8qIFJlc2VydmUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgaW4gZnJvbnQgb2YgdGhlIGZyYW1lICovCisJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOworCisJLyoKKwkgKiBNb3ZlIHRoZSBoZWFkZXIuCisJICovCisJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgaGVhZGVyX2xlbmd0aCk7CisKKwkvKiBNb3ZlIHRoZSBwYXlsb2FkLCBpZiBwcmVzZW50IGFuZCBpZiByZXF1aXJlZCAqLworCWlmIChwYXlsb2FkX2xlbmd0aCAmJiBwYXlsb2FkX2FsaWduKQogCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCwKIAkJCXNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIHBheWxvYWRfYWxpZ24sCi0JCQlmcmFtZV9sZW5ndGggLSBoZWFkZXJfbGVuZ3RoKTsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfQorCQkJcGF5bG9hZF9sZW5ndGgpOworCisJLyogVHJpbSB0aGUgc2tiIHRvIHRoZSBjb3JyZWN0IHNpemUgKi8KKwlza2JfdHJpbShza2IsIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIHBheWxvYWRfbGVuZ3RoKTsKIH0KIAogdm9pZCBydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCiB7Ci0Jc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0JdW5zaWduZWQgaW50IGwycGFkID0gNCAtIChoZWFkZXJfbGVuZ3RoICYgMyk7CisJdW5zaWduZWQgaW50IGwycGFkID0gTDJQQURfU0laRShoZWFkZXJfbGVuZ3RoKTsKIAotCWlmICghbDJwYWQgfHwgKHNrYmRlc2MtPmZsYWdzICYgU0tCREVTQ19MMl9QQURERUQpKQorCWlmICghbDJwYWQpCiAJCXJldHVybjsKIAogCW1lbW1vdmUoc2tiLT5kYXRhICsgbDJwYWQsIHNrYi0+ZGF0YSwgaGVhZGVyX2xlbmd0aCk7CkBAIC0zNDYsNyArMzM2LDkgQEAKIAkgKiBIZWFkZXIgYW5kIGFsaWdubWVudCBpbmZvcm1hdGlvbi4KIAkgKi8KIAl0eGRlc2MtPmhlYWRlcl9sZW5ndGggPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihlbnRyeS0+c2tiKTsKLQl0eGRlc2MtPmwycGFkID0gQUxJR05fU0laRShlbnRyeS0+c2tiLCB0eGRlc2MtPmhlYWRlcl9sZW5ndGgpOworCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgIChlbnRyeS0+c2tiLT5sZW4gPiB0eGRlc2MtPmhlYWRlcl9sZW5ndGgpKQorCQl0eGRlc2MtPmwycGFkID0gTDJQQURfU0laRSh0eGRlc2MtPmhlYWRlcl9sZW5ndGgpOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgdG8gYmUgYWNrZWQuCkBAIC0zODcsMTAgKzM3OSwxMyBAQAogCiAJLyoKIAkgKiBCZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMgcmVxdWlyZSB0aGUgdHNmIHRpbWVzdGFtcAotCSAqIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGZyYW1lLgorCSAqIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGZyYW1lLCBleGNlcHQgZm9yIGEgZnJhbWUgdGhhdCBoYXMgYmVlbiBpbmplY3RlZAorCSAqIHRocm91Z2ggYSBtb25pdG9yIGludGVyZmFjZS4gVGhpcyBsYXR0ZXIgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGEKKwkgKiBtb25pdG9yIGludGVyZmFjZS4KIAkgKi8KLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8Ci0JICAgIGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpCisJaWYgKChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgJiYKKwkgICAgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkpCiAJCV9fc2V0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggNzA3NzVlNS4uYzFlNDgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTkyLDggKzkyLDYgQEAKICAqIEBTS0JERVNDX0RNQV9NQVBQRURfVFg6ICZza2JfZG1hIGZpZWxkIGhhcyBiZWVuIG1hcHBlZCBmb3IgVFgKICAqIEBTS0JERVNDX0lWX1NUUklQUEVEOiBGcmFtZSBjb250YWluZWQgYSBJVi9FSVYgcHJvdmlkZWQgYnkKICAqCW1hYzgwMjExIGJ1dCB3YXMgc3RyaXBwZWQgZm9yIHByb2Nlc3NpbmcgYnkgdGhlIGRyaXZlci4KLSAqIEBTS0JERVNDX0wyX1BBRERFRDogUGF5bG9hZCBoYXMgYmVlbiBwYWRkZWQgZm9yIDQtYnl0ZSBhbGlnbm1lbnQsCi0gKgl0aGUgcGFkZGVkIGJ5dGVzIGFyZSBsb2NhdGVkIGJldHdlZW4gaGVhZGVyIGFuZCBwYXlsb2FkLgogICogQFNLQkRFU0NfTk9UX01BQzgwMjExOiBGcmFtZSBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gbWFjODAyMTEsCiAgKglkb24ndCB0cnkgdG8gcGFzcyBpdCBiYWNrLgogICovCkBAIC0xMDEsOCArOTksNyBAQAogCVNLQkRFU0NfRE1BX01BUFBFRF9SWCA9IDEgPDwgMCwKIAlTS0JERVNDX0RNQV9NQVBQRURfVFggPSAxIDw8IDEsCiAJU0tCREVTQ19JVl9TVFJJUFBFRCA9IDEgPDwgMiwKLQlTS0JERVNDX0wyX1BBRERFRCA9IDEgPDwgMywKLQlTS0JERVNDX05PVF9NQUM4MDIxMSA9IDEgPDwgNCwKKwlTS0JERVNDX05PVF9NQUM4MDIxMSA9IDEgPDwgMywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5jCmluZGV4IDE5ZTY4NGYuLjRlZmRjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmMKQEAgLTcxLDkgKzcxLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotaW50IHJ0MngwMHNvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgY2hpcHNldCwKLQkJICAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpCitpbnQgcnQyeDAwc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKQEAgLTk0LDEyICs5Miw3IEBACiAJcnQyeDAwZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCXJ0MngwMGRldi0+bmFtZSA9IHBkZXYtPmRldi5kcml2ZXItPm5hbWU7CiAKLQkvKgotCSAqIFNvQyBkZXZpY2VzIG1pbWljIFBDSSBiZWhhdmlvci4KLQkgKi8KLQlydDJ4MDBfc2V0X2NoaXBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKLQotCXJ0MngwMF9zZXRfY2hpcF9ydChydDJ4MDBkZXYsIGNoaXBzZXQpOworCXJ0MngwMF9zZXRfY2hpcF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9TT0MpOwogCiAJcmV0dmFsID0gcnQyeDAwc29jX2FsbG9jX3JlZyhydDJ4MDBkZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmgKaW5kZXggOGEzNDE2Ni4uNDczOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuaApAQCAtMjgsMTggKzI4LDEwIEBACiAKICNkZWZpbmUgS1NFRzFBRERSKF9fcHRyKSBfX3B0cgogCi0jZGVmaW5lIF9fcnQyeDAwc29jX3Byb2JlKF9fY2hpcHNldCwgX19vcHMpIFwKLXN0YXRpYyBpbnQgX19ydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgXAoteyBcCi0JcmV0dXJuIHJ0MngwMHNvY19wcm9iZShwZGV2LCAoX19jaGlwc2V0KSwgKF9fb3BzKSk7IFwKLX0KLQogLyoKICAqIFNvQyBkcml2ZXIgaGFuZGxlcnMuCiAgKi8KLWludCBydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNoaXBzZXQsCi0JCSAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKTsKK2ludCBydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29uc3Qgc3RydWN0IHJ0MngwMF9vcHMgKm9wcyk7CiBpbnQgcnQyeDAwc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBydDJ4MDBzb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggMGNhNTg5My4uZTJkYTkyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC02MzcsOCArNjM3LDcgQEAKIAlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgNCwgJnI0KTsKIAlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgNzcsICZyNzcpOwogCi0JcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwKLQkJCSAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTMyNSkpOworCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTMyNSkpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgdGhlIFJYIGFudGVubmEuCkBAIC02ODQsOCArNjgzLDcgQEAKIAlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgNCwgJnI0KTsKIAlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgNzcsICZyNzcpOwogCi0JcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwKLQkJCSAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkpOworCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyOSkpOwogCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0ZSQU1FX0VORCwKIAkJCSAgIXRlc3RfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncykpOwogCkBAIC04MzMsMTIgKzgzMSwxMSBAQAogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEhZX0NTUjAsIHJlZyk7CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTMyNSkpCisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzI1KSkKIAkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV81eChydDJ4MDBkZXYsIGFudCk7Ci0JZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkKIAkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yeChydDJ4MDBkZXYsIGFudCk7Ci0JZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkpIHsKKwllbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpKSB7CiAJCWlmICh0ZXN0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfMngocnQyeDAwZGV2LCBhbnQpOwogCQllbHNlCkBAIC04NzksOCArODc2LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJmLT5yZjMsIFJGM19UWFBPV0VSLCBUWFBPV0VSX1RPX0RFVih0eHBvd2VyKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmY0LCBSRjRfRlJFUV9PRkZTRVQsIHJ0MngwMGRldi0+ZnJlcV9vZmZzZXQpOwogCi0Jc21hcnQgPSAhKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpIHx8Ci0JCSAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpOworCXNtYXJ0ID0gIShydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpIHx8IHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykpOwogCiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDMsICZyMyk7CiAJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwgc21hcnQpOwpAQCAtMTEzNSwxNiArMTEzMSwxOCBAQAogICovCiBzdGF0aWMgY2hhciAqcnQ2MXBjaV9nZXRfZmlybXdhcmVfbmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogeworCXUxNiBjaGlwOwogCWNoYXIgKmZ3X25hbWU7CiAKLQlzd2l0Y2ggKHJ0MngwMGRldi0+Y2hpcC5ydCkgewotCWNhc2UgUlQyNTYxOgorCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRvX3BjaV9kZXYocnQyeDAwZGV2LT5kZXYpLCBQQ0lfREVWSUNFX0lELCAmY2hpcCk7CisJc3dpdGNoIChjaGlwKSB7CisJY2FzZSBSVDI1NjFfUENJX0lEOgogCQlmd19uYW1lID0gRklSTVdBUkVfUlQyNTYxOwogCQlicmVhazsKLQljYXNlIFJUMjU2MXM6CisJY2FzZSBSVDI1NjFzX1BDSV9JRDoKIAkJZndfbmFtZSA9IEZJUk1XQVJFX1JUMjU2MXM7CiAJCWJyZWFrOwotCWNhc2UgUlQyNjYxOgorCWNhc2UgUlQyNjYxX1BDSV9JRDoKIAkJZndfbmFtZSA9IEZJUk1XQVJFX1JUMjY2MTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIyOTksMTMgKzIyOTcsMTMgQEAKIAkgKi8KIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOwotCXJ0MngwMF9wcmludF9jaGlwKHJ0MngwMGRldik7CisJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjBfQ0hJUFNFVCksCisJCQl2YWx1ZSwgcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjBfUkVWSVNJT04pKTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUzMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkpIHsKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTMyNSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyOSkpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTIzNjAsNyArMjM1OCw3IEBACiAJICogdGhlIGFudGVubmEgc2V0dGluZ3Mgc2hvdWxkIGJlIGdhdGhlcmVkIGZyb20gdGhlIE5JQwogCSAqIGVlcHJvbSB3b3JkLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSAmJgorCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpICYmCiAJICAgICF0ZXN0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKSkgewogCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0KIAkJICAgIEFOVEVOTkFfQSArIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfUlhfRklYRUQpOwpAQCAtMjU3MSw4ICsyNTY5LDcgQEAKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX3NlcTsKIAl9CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTMyNSkpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzMjUpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX3NlcSk7CiAJfQpAQCAtMjczNSw3ICsyNzMyLDYgQEAKIAkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZl90eAkJPSBydDYxcGNpX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0NjFwY2lfZ2V0X3RzZiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKQEAgLTI4MTIsNyArMjgwOCw3IEBACiAvKgogICogUlQ2MXBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDYxcGNpX2RldmljZV90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0NjFwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAkvKiBSVDI1NjFzICovCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDYxcGNpX29wcykgfSwKIAkvKiBSVDI1NjEgdjIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDhmMTM4MTAuLmRmODBmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMjgsNiArMjgsMTMgQEAKICNkZWZpbmUgUlQ2MVBDSV9ICiAKIC8qCisgKiBSVCBjaGlwIFBDSSBJRHMuCisgKi8KKyNkZWZpbmUgUlQyNTYxc19QQ0lfSUQJCQkweDAzMDEKKyNkZWZpbmUgUlQyNTYxX1BDSV9JRAkJCTB4MDMwMgorI2RlZmluZSBSVDI2NjFfUENJX0lECQkJMHgwNDAxCisKKy8qCiAgKiBSRiBjaGlwIGRlZmluZXMuCiAgKi8KICNkZWZpbmUgUkY1MjI1CQkJCTB4MDAwMQpAQCAtMjI1LDYgKzIzMiw4IEBACiAgKiBNQUNfQ1NSMDogQVNJQyByZXZpc2lvbiBudW1iZXIuCiAgKi8KICNkZWZpbmUgTUFDX0NTUjAJCQkweDMwMDAKKyNkZWZpbmUgTUFDX0NTUjBfUkVWSVNJT04JCUZJRUxEMzIoMHgwMDAwMDAwZikKKyNkZWZpbmUgTUFDX0NTUjBfQ0hJUFNFVAkJRklFTEQzMigweDAwMGZmZmYwKQogCiAvKgogICogTUFDX0NTUjE6IFN5c3RlbSBjb250cm9sIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggY2VkM2I2YS4uZjM5YThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJICogYWxsIG90aGVycyBjb250YWluIDIwIGJpdHMuCiAJCSAqLwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUEhZX0NTUjRfTlVNQkVSX09GX0JJVFMsCi0JCQkJICAgMjAgKyAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkJCQkJIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKSk7CisJCQkJICAgMjAgKyAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fAorCQkJCQkgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUEhZX0NTUjRfSUZfU0VMRUNULCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1I0X0JVU1ksIDEpOwogCkBAIC03NDEsMTEgKzc0MSw5IEBACiAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQSFlfQ1NSMCwgcmVnKTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzV4KHJ0MngwMGRldiwgYW50KTsKLQllbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSB8fAotCQkgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzJ4KHJ0MngwMGRldiwgYW50KTsKIH0KIApAQCAtNzc5LDggKzc3Nyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYzLCBSRjNfVFhQT1dFUiwgVFhQT1dFUl9UT19ERVYodHhwb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmNCwgUkY0X0ZSRVFfT0ZGU0VULCBydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0KTsKIAotCXNtYXJ0ID0gIShydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAotCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKTsKKwlzbWFydCA9ICEocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKTsKIAogCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAzLCAmcjMpOwogCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHNtYXJ0KTsKQEAgLTEyMTAsOCArMTIwNyw3IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU0VDX0NTUjUsIDB4MDAwMDAwMDApOwogCiAJcmVnID0gMHgwMDAwMjNiMDsKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1IxX1JGX1JQSSwgMSk7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEhZX0NTUjEsIHJlZyk7CiAKQEAgLTE4MjQsMTkgKzE4MjAsMTggQEAKIAkgKi8KIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIFJUMjU3MSwgdmFsdWUsIHJlZyk7Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKKwlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMF9DSElQU0VUKSwKKwkJCXZhbHVlLCBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMF9SRVZJU0lPTikpOwogCi0JaWYgKCFydDJ4MDBfY2hlY2tfcmV2KCZydDJ4MDBkZXYtPmNoaXAsIDB4MDAwZmZmZjAsIDB4MjU3MzApIHx8Ci0JICAgIHJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDAwMDAwZiwgMCkpIHsKKwlpZiAoIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjU3MykgfHwgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjA4MSwxNyArMjA3NiwxNyBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjgpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1Mjg7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjI2KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjY7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjVfMjUyNzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjVfMjUyNyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc181MjI1XzI1Mjc7CkBAIC0yMjQ5LDcgKzIyNDQsNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0NzN1c2JfY29uZl90eCwKLQkuZ2V0X3R4X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gcnQ3M3VzYl9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwpAQCAtMjM1NCw2ICsyMzQ4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwOGRkLCAweDAxMjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGY0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMTYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA3OTQyZjgxLi43YWJlN2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTE0Miw2ICsxNDIsOCBAQAogICogTUFDX0NTUjA6IEFTSUMgcmV2aXNpb24gbnVtYmVyLgogICovCiAjZGVmaW5lIE1BQ19DU1IwCQkJMHgzMDAwCisjZGVmaW5lIE1BQ19DU1IwX1JFVklTSU9OCQlGSUVMRDMyKDB4MDAwMDAwMGYpCisjZGVmaW5lIE1BQ19DU1IwX0NISVBTRVQJCUZJRUxEMzIoMHgwMDBmZmZmMCkKIAogLyoKICAqIE1BQ19DU1IxOiBTeXN0ZW0gY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKaW5kZXggODcyMTI4Mi4uZGUzODQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKQEAgLTYwLDcgKzYwLDYgQEAKIAlzdHJ1Y3QgcnRsODE4eF9jc3IgX19pb21lbSAqbWFwOwogCWNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyAqcmY7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlpbnQgbW9kZTsKIAogCS8qIHJ0bDgxODAgZHJpdmVyIHNwZWNpZmljICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCmluZGV4IDhhNDBhMTQuLjJiOTI4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUlRMODE4MCAvIFJUTDgxODUgUENJIHdpcmVsZXNzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE4MF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsODE4MF90YWJsZSkgPSB7CiAJLyogcnRsODE4NSAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4NSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CRUxLSU4sIDB4NzAwZikgfSwKQEAgLTgyLDggKzgyLDYgQEAKIH07CiAKIAotCi0KIHZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtNjE1LDcgKzYxMyw2IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXJldHVybiAwOwogCiAgZXJyX2ZyZWVfcmluZ3M6CkBAIC02MzMsOCArNjMwLDYgQEAKIAl1OCByZWc7CiAJaW50IGk7CiAKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7Ci0KIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CiAKIAlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKQEAgLTY1NywzOCArNjUyLDM5IEBACiB9CiAKIHN0YXRpYyBpbnQgcnRsODE4MF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZikKKwkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1swXSwKLQkJCSAgbGUzMl90b19jcHUoKihfX2xlMzIgKiljb25mLT5tYWNfYWRkcikpOworCQkJICBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXZpZi0+YWRkcikpOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIChfX2xlMTYgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1s0XSwKLQkJCSAgbGUxNl90b19jcHUoKihfX2xlMTYgKikoY29uZi0+bWFjX2FkZHIgKyA0KSkpOworCQkJICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh2aWYtPmFkZHIgKyA0KSkpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4MF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXByaXYtPnZpZiA9IE5VTEw7CiB9CiAKQEAgLTc2NSw2ICs3NjEsMTQgQEAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCBwcml2LT5yeF9jb25mKTsKIH0KIAorc3RhdGljIHU2NCBydGw4MTgwX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UU0ZUWzBdKSB8CisJICAgICAgICh1NjQpKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFsxXSkpIDw8IDMyOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsODE4MF9vcHMgPSB7CiAJLnR4CQkJPSBydGw4MTgwX3R4LAogCS5zdGFydAkJCT0gcnRsODE4MF9zdGFydCwKQEAgLTc3NSw2ICs3NzksNyBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnRsODE4MF9ic3NfaW5mb19jaGFuZ2VkLAogCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODBfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmdldF90c2YJCT0gcnRsODE4MF9nZXRfdHNmLAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmluZGV4IDZhZjBmM2YuLjZiYjMyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IHJ0bDgxOHhfY3NyICptYXA7CiAJY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzICpyZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCWludCBtb2RlOworCiAJLyogVGhlIG11dGV4IHByb3RlY3RzIHRoZSBUWCBsb29wYmFjayBzdGF0ZS4KIAkgKiBBbnkgYXR0ZW1wdCB0byBzZXQgY2hhbm5lbHMgY29uY3VycmVudGx5IGxvY2tzIHRoZSBkZXZpY2UuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggN2JhMzA1Mi4uMGZiODUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtMTAxOSwzMSArMTAxOSwzMCBAQAogfQogCiBzdGF0aWMgaW50IHJ0bDgxODdfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwlpZiAocHJpdi0+dmlmKQogCQlnb3RvIGV4aXQ7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXQgPSAwOwotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1BQ1tpXSwKLQkJCQkgKCh1OCAqKWNvbmYtPm1hY19hZGRyKVtpXSk7CisJCQkJICgodTggKil2aWYtPmFkZHIpW2ldKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCiBleGl0OgpAQCAtMTA1MiwxMSArMTA1MSwxMCBAQAogfQogCiBzdGF0aWMgdm9pZCBydGw4MTg3X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAJcHJpdi0+dmlmID0gTlVMTDsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogfQpAQCAtMTI2OCw2ICsxMjY2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgcnRsODE4N19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJcmV0dXJuIHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFswXSkgfAorCSAgICAgICAodTY0KShydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRTRlRbMV0pKSA8PCAzMjsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0bDgxODdfb3BzID0gewogCS50eAkJCT0gcnRsODE4N190eCwKIAkuc3RhcnQJCQk9IHJ0bDgxODdfc3RhcnQsCkBAIC0xMjc5LDcgKzEyODUsOCBAQAogCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmNvbmZfdHgJCT0gcnRsODE4N19jb25mX3R4LAotCS5yZmtpbGxfcG9sbAkJPSBydGw4MTg3X3Jma2lsbF9wb2xsCisJLnJma2lsbF9wb2xsCQk9IHJ0bDgxODdfcmZraWxsX3BvbGwsCisJLmdldF90c2YJCT0gcnRsODE4N19nZXRfdHNmLAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC0xMzY2LDcgKzEzNzMsNiBAQAogCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CiAKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKIAkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmluZGV4IGRlZDQ0YzAuLjQ2MzczMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBydGw4MTg3X2xlZCAqbGVkID0gJnByaXYtPmxlZF90eDsKIAogCS8qIERvbid0IGNoYW5nZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KLQlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwlpZiAoIXByaXYtPnZpZiB8fCBwcml2LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCiAJCXJldHVybiA7CiAKIAkvKiBTa2lwIGlmIHRoZSBMRUQgaXMgbm90IHJlZ2lzdGVyZWQuICovCkBAIC03MSw3ICs3MSw3IEBACiAJc3RydWN0IHJ0bDgxODdfbGVkICpsZWQgPSAmcHJpdi0+bGVkX3R4OwogCiAJLyogRG9uJ3QgY2hhbmdlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLwotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCWlmICghcHJpdi0+dmlmIHx8IHByaXYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKIAkJcmV0dXJuIDsKIAogCS8qIFNraXAgaWYgdGhlIExFRCBpcyBub3QgcmVnaXN0ZXJlZC4gKi8KQEAgLTI0MSw1ICsyNDEsNSBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwogfQotI2VuZGlmIC8qIGRlZiBDT05GSUdfUlRMODE4N19MRUQgKi8KKyNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEUyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuaAppbmRleCBlZmU4MDQxLi5kNzQzYzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmgKQEAgLTU0LDYgKzU0LDYgQEAKIHZvaWQgcnRsODE4N19sZWRzX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgY29kZSk7CiB2b2lkIHJ0bDgxODdfbGVkc19leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAKLSNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEICovCisjZW5kaWYgLyogZGVmIENPTkZJR19SVEw4MTg3X0xFRFMgKi8KIAogI2VuZGlmIC8qIFJUTDgxODdfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQppbmRleCA2MmUzN2FkLi5mNDdlYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCkBAIC0xMCw1ICsxMCw3IEBACiB3bDEyNzEtb2JqcwkJPSB3bDEyNzFfbWFpbi5vICB3bDEyNzFfc3BpLm8gd2wxMjcxX2NtZC5vICBcCiAJCQkgIHdsMTI3MV9ldmVudC5vIHdsMTI3MV90eC5vICB3bDEyNzFfcngubyAgIFwKIAkJCSAgd2wxMjcxX3BzLm8gICAgd2wxMjcxX2FjeC5vIHdsMTI3MV9ib290Lm8gXAotCQkJICB3bDEyNzFfaW5pdC5vICB3bDEyNzFfZGVidWdmcy5vCisJCQkgIHdsMTI3MV9pbml0Lm8gIHdsMTI3MV9kZWJ1Z2ZzLm8gd2wxMjcxX2lvLm8KKword2wxMjcxLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpCSs9IHdsMTI3MV90ZXN0bW9kZS5vCiBvYmotJChDT05GSUdfV0wxMjcxKQkrPSB3bDEyNzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCmluZGV4IDA1NDUzM2YuLjM3YzYxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV90eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwogCiAJc3RydWN0IGRlbnRyeSAqdHhfcXVldWVfbGVuOworCXN0cnVjdCBkZW50cnkgKnR4X3F1ZXVlX3N0YXR1czsKIAogCXN0cnVjdCBkZW50cnkgKnJldHJ5X2NvdW50OwogCXN0cnVjdCBkZW50cnkgKmV4Y2Vzc2l2ZV9yZXRyaWVzOwpAQCAtMzQwLDkgKzM0MSw2IEBACiAJLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLwogCWJvb2wgc2Nhbm5pbmc7CiAKLQkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KLQl1MTYgYWlkOwotCiAJLyogRGVmYXVsdCBrZXkgKGZvciBXRVApICovCiAJdTMyIGRlZmF1bHRfa2V5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guYwppbmRleCBhY2ZhMDg2Li5iZWZmMDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMKQEAgLTk3NiwzICs5NzYsNzIgQEAKIAlrZnJlZShhY3gpOwogCXJldHVybiByZXQ7CiB9CisKK2ludCB3bDEyNTFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmcywgdTE2IHR4b3ApCit7CisJc3RydWN0IHdsMTI1MV9hY3hfYWNfY2ZnICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFjIGNmZyAlZCBjd19taW5nICVkIGN3X21heCAlZCAiCisJCSAgICAgImFpZnMgJWQgdHhvcCAlZCIsIGFjLCBjd19taW4sIGN3X21heCwgYWlmcywgdHhvcCk7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmFjID0gYWM7CisJYWN4LT5jd19taW4gPSBjd19taW47CisJYWN4LT5jd19tYXggPSBjd19tYXg7CisJYWN4LT5haWZzbiA9IGFpZnM7CisJYWN4LT50eG9wX2xpbWl0ID0gdHhvcDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImFjeCBhYyBjZmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggcXVldWUsCisJCSAgICAgICBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlIHR5cGUsCisJCSAgICAgICB1OCB0c2lkLCBlbnVtIHdsMTI1MV9hY3hfcHNfc2NoZW1lIHBzX3NjaGVtZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9hY2tfcG9saWN5IGFja19wb2xpY3kpCit7CisJc3RydWN0IHdsMTI1MV9hY3hfdGlkX2NmZyAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB0aWQgY2ZnICVkIHR5cGUgJWQgdHNpZCAlZCAiCisJCSAgICAgInBzX3NjaGVtZSAlZCBhY2tfcG9saWN5ICVkIiwgcXVldWUsIHR5cGUsIHRzaWQsCisJCSAgICAgcHNfc2NoZW1lLCBhY2tfcG9saWN5KTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cXVldWUgPSBxdWV1ZTsKKwlhY3gtPnR5cGUgPSB0eXBlOworCWFjeC0+dHNpZCA9IHRzaWQ7CisJYWN4LT5wc19zY2hlbWUgPSBwc19zY2hlbWU7CisJYWN4LT5hY2tfcG9saWN5ID0gYWNrX3BvbGljeTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVElEX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJhY3ggdGlkIGNmZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKaW5kZXggNjUyMzcxNC4uMjYxNjBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCkBAIC0xMTY2LDYgKzExNjYsODcgQEAKIAl1OCAgcGFkZGluZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3Qgd2wxMjUxX2FjeF9hY19jZmcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogQWNjZXNzIENhdGVnb3J5IC0gVGhlIFRYIHF1ZXVlJ3MgYWNjZXNzIGNhdGVnb3J5CisJICogKHJlZmVyIHRvIEFjY2Vzc0NhdGVnb3J5X2VudW0pCisJICovCisJdTggYWM7CisKKwkvKgorCSAqIFRoZSBjb250ZW50aW9uIHdpbmRvdyBtaW5pbXVtIHNpemUgKGluIHNsb3RzKSBmb3IKKwkgKiB0aGUgYWNjZXNzIGNsYXNzLgorCSAqLworCXU4IGN3X21pbjsKKworCS8qCisJICogVGhlIGNvbnRlbnRpb24gd2luZG93IG1heGltdW0gc2l6ZSAoaW4gc2xvdHMpIGZvcgorCSAqIHRoZSBhY2Nlc3MgY2xhc3MuCisJICovCisJdTE2IGN3X21heDsKKworCS8qIFRoZSBBSUYgdmFsdWUgKGluIHNsb3RzKSBmb3IgdGhlIGFjY2VzcyBjbGFzcy4gKi8KKwl1OCBhaWZzbjsKKworCXU4IHJlc2VydmVkOworCisJLyogVGhlIFRYIE9wIExpbWl0IChpbiBtaWNyb3NlY29uZHMpIGZvciB0aGUgYWNjZXNzIGNsYXNzLiAqLworCXUxNiB0eG9wX2xpbWl0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworZW51bSB3bDEyNTFfYWN4X2NoYW5uZWxfdHlwZSB7CisJQ0hBTk5FTF9UWVBFX0RDRgk9IDAsCisJQ0hBTk5FTF9UWVBFX0VEQ0YJPSAxLAorCUNIQU5ORUxfVFlQRV9IQ0NBCT0gMiwKK307CisKK2VudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgeworCS8qIHJlZ3VsYXIgcHM6IHNpbXBsZSBzZW5kaW5nIG9mIHBhY2tldHMgKi8KKwlXTDEyNTFfQUNYX1BTX1NDSEVNRV9MRUdBQ1kJPSAwLAorCisJLyogc2VuZGluZyBhIHBhY2tldCB0cmlnZ2VycyBhIHVuc2NoZWR1bGVkIGFwc2QgZG93bnN0cmVhbSAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX1VQU0RfVFJJR0dFUgk9IDEsCisKKwkvKiBhIHBzcG9sbCBwYWNrZXQgd2lsbCBiZSBzZW50IGJlZm9yZSBldmVyeSBkYXRhIHBhY2tldCAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWV9QU1BPTEwJPSAyLAorCisJLyogc2NoZWR1bGVkIGFwc2QgbW9kZSAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX1NBUFNECQk9IDMsCit9OworCitlbnVtIHdsMTI1MV9hY3hfYWNrX3BvbGljeSB7CisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWQk9IDAsCisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX05PX0FDSwk9IDEsCisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX0JMT0NLCT0gMiwKK307CisKK3N0cnVjdCB3bDEyNTFfYWN4X3RpZF9jZmcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qIHR4IHF1ZXVlIGlkIG51bWJlciAoMC03KSAqLworCXU4IHF1ZXVlOworCisJLyogY2hhbm5lbCBhY2Nlc3MgdHlwZSBmb3IgdGhlIHF1ZXVlLCBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlICovCisJdTggdHlwZTsKKworCS8qIEVEQ0E6IGFjIGluZGV4ICgwLTMpLCBIQ0NBOiB0cmFmZmljIHN0cmVhbSBpZCAoOC0xNSkgKi8KKwl1OCB0c2lkOworCisJLyogcHMgc2NoZW1lIG9mIHRoZSBzcGVjaWZpZWQgcXVldWUsIGVudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgKi8KKwl1OCBwc19zY2hlbWU7CisKKwkvKiB0aGUgdHggcXVldWUgYWNrIHBvbGljeSwgZW51bSB3bDEyNTFfYWN4X2Fja19wb2xpY3kgKi8KKwl1OCBhY2tfcG9saWN5OworCisJdTggcGFkZGluZ1szXTsKKworCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl1MzIgYXBzZGNvbmZbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAgIEhvc3QgSW50ZXJydXB0IFJlZ2lzdGVyIChXaUxpbmsgLT4gSG9zdCkKQEAgLTEzMjIsNSArMTQwMywxMSBAQAogaW50IHdsMTI1MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2FjeF9tZW1fY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKIGludCB3bDEyNTFfYWN4X3dyX3RidHRfYW5kX2R0aW0oc3RydWN0IHdsMTI1MSAqd2wsIHUxNiB0YnR0LCB1OCBkdGltKTsKK2ludCB3bDEyNTFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmcywgdTE2IHR4b3ApOworaW50IHdsMTI1MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggcXVldWUsCisJCSAgICAgICBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlIHR5cGUsCisJCSAgICAgICB1OCB0c2lkLCBlbnVtIHdsMTI1MV9hY3hfcHNfc2NoZW1lIHBzX3NjaGVtZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9hY2tfcG9saWN5IGFja19wb2xpY3kpOwogCiAjZW5kaWYgLyogX19XTDEyNTFfQUNYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmMKaW5kZXggNzcwZjI2MC4uMDMyMGI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5jCkBAIC00MTAsMyArNDEwLDg2IEBACiAJa2ZyZWUoY21kKTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxMjUxX2NtZF9zY2FuKHN0cnVjdCB3bDEyNTEgKndsLCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsc1tdLAorCQkgICAgdW5zaWduZWQgaW50IG5fY2hhbm5lbHMsIHVuc2lnbmVkIGludCBuX3Byb2JlcykKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9zY2FuICpjbWQ7CisJaW50IGksIHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNjYW4iKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7CisJY21kLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8CisJCQkJCQkgICAgQ0ZHX1JYX01HTVRfRU4gfAorCQkJCQkJICAgIENGR19SWF9CQ05fRU4pOworCWNtZC0+cGFyYW1zLnNjYW5fb3B0aW9ucyA9IDA7CisJY21kLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwljbWQtPnBhcmFtcy5udW1fcHJvYmVfcmVxdWVzdHMgPSBuX3Byb2JlczsKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMTYoMSA8PCAxKTsgLyogMiBNYnBzICovCisJY21kLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbm5lbHM7IGkrKykgeworCQljbWQtPmNoYW5uZWxzW2ldLm1pbl9kdXJhdGlvbiA9CisJCQljcHVfdG9fbGUzMihXTDEyNTFfU0NBTl9NSU5fRFVSQVRJT04pOworCQljbWQtPmNoYW5uZWxzW2ldLm1heF9kdXJhdGlvbiA9CisJCQljcHVfdG9fbGUzMihXTDEyNTFfU0NBTl9NQVhfRFVSQVRJT04pOworCQltZW1zZXQoJmNtZC0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZjbWQtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCWNtZC0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQljbWQtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7CisJCWNtZC0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGNoYW5uZWxzW2ldLT5od192YWx1ZTsKKwl9CisKKwljbWQtPnBhcmFtcy5zc2lkX2xlbiA9IHNzaWRfbGVuOworCWlmIChzc2lkKQorCQltZW1jcHkoY21kLT5wYXJhbXMuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiY21kIHNjYW4gZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgY21kLCBzaXplb2YoKmNtZCkpOworCisJaWYgKGNtZC0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJd2wxMjUxX2Vycm9yKCJjbWQgc2NhbiBzdGF0dXMgd2Fzbid0IHN1Y2Nlc3M6ICVkIiwKKwkJCSAgICAgY21kLT5oZWFkZXIuc3RhdHVzKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF90cmlnZ2VyX3NjYW5fdG8oc3RydWN0IHdsMTI1MSAqd2wsIHUzMiB0aW1lb3V0KQoreworCXN0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byAqY21kOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHRyaWdnZXIgc2NhbiB0byIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+dGltZW91dCA9IHRpbWVvdXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJjbWQgdHJpZ2dlciBzY2FuIHRvIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaAppbmRleCBkZmY3OThhZC4uNGFkNjdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJ3bDEyNTEuaCIKIAorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorCiBzdHJ1Y3QgYWN4X2hlYWRlcjsKIAogaW50IHdsMTI1MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IHR5cGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwpAQCAtNDMsNiArNDUsMTAgQEAKIAkJCSAgIHNpemVfdCBsZW4pOwogaW50IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgY21kX2lkLAogCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOworaW50IHdsMTI1MV9jbWRfc2NhbihzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbXSwKKwkJICAgIHVuc2lnbmVkIGludCBuX2NoYW5uZWxzLCB1bnNpZ25lZCBpbnQgbl9wcm9iZXMpOworaW50IHdsMTI1MV9jbWRfdHJpZ2dlcl9zY2FuX3RvKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgdGltZW91dCk7CiAKIC8qIHVuaXQgbXMgKi8KICNkZWZpbmUgV0wxMjUxX0NPTU1BTkRfVElNRU9VVCAyMDAwCkBAIC0xNjMsOCArMTY5LDEyIEBACiAjZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0CiAjZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNAogCisjZGVmaW5lIFdMMTI1MV9TQ0FOX01JTl9EVVJBVElPTiAzMDAwMAorI2RlZmluZSBXTDEyNTFfU0NBTl9NQVhfRFVSQVRJT04gNjAwMDAKIAotc3RydWN0IGJhc2ljX3NjYW5fcGFyYW1ldGVycyB7CisjZGVmaW5lIFdMMTI1MV9TQ0FOX05VTV9QUk9CRVMgMworCitzdHJ1Y3Qgd2wxMjUxX3NjYW5fcGFyYW1ldGVycyB7CiAJdTMyIHJ4X2NvbmZpZ19vcHRpb25zOwogCXUzMiByeF9maWx0ZXJfb3B0aW9uczsKIApAQCAtMTg5LDExICsxOTksMTEgQEAKIAogCXU4IHRpZF90cmlnZ2VyOwogCXU4IHNzaWRfbGVuOwotCXUzMiBzc2lkWzhdOworCXU4IHNzaWRbMzJdOwogCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzIHsKK3N0cnVjdCB3bDEyNTFfc2Nhbl9jaF9wYXJhbWV0ZXJzIHsKIAl1MzIgbWluX2R1cmF0aW9uOyAvKiBpbiBUVSAqLwogCXUzMiBtYXhfZHVyYXRpb247IC8qIGluIFRVICovCiAJdTMyIGJzc2lkX2xzYjsKQEAgLTIxMywxMSArMjIzLDExIEBACiAvKiBTQ0FOIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgU0NBTl9NQVhfTlVNX09GX0NIQU5ORUxTIDE2CiAKLXN0cnVjdCBjbWRfc2NhbiB7CitzdHJ1Y3Qgd2wxMjUxX2NtZF9zY2FuIHsKIAlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOwogCi0Jc3RydWN0IGJhc2ljX3NjYW5fcGFyYW1ldGVycyBwYXJhbXM7Ci0Jc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107CisJc3RydWN0IHdsMTI1MV9zY2FuX3BhcmFtZXRlcnMgcGFyYW1zOworCXN0cnVjdCB3bDEyNTFfc2Nhbl9jaF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCmluZGV4IGEwMDcyMzAuLjBjY2JhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCkBAIC0yMzcsNiArMjM3LDI3IEBACiAJLm9wZW4gPSB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMsCiB9OwogCitzdGF0aWMgc3NpemVfdCB0eF9xdWV1ZV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzNdLCBzdGF0dXM7CisJaW50IGxlbjsKKworCWlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkKKwkJc3RhdHVzID0gJ3MnOworCWVsc2UKKwkJc3RhdHVzID0gJ3InOworCisJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlY1xuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHhfcXVldWVfc3RhdHVzX29wcyA9IHsKKwkucmVhZCA9IHR4X3F1ZXVlX3N0YXR1c19yZWFkLAorCS5vcGVuID0gd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljLAorfTsKKwogc3RhdGljIHZvaWQgd2wxMjUxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyNTEgKndsKQogewogCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwpAQCAtMzMxLDYgKzM1Miw3IEBACiAJREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwogCiAJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKKwlERUJVR0ZTX0RFTCh0eF9xdWV1ZV9zdGF0dXMpOwogCURFQlVHRlNfREVMKHJldHJ5X2NvdW50KTsKIAlERUJVR0ZTX0RFTChleGNlc3NpdmVfcmV0cmllcyk7CiB9CkBAIC00MzEsNiArNDUzLDcgQEAKIAlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CiAKIAlERUJVR0ZTX0FERCh0eF9xdWV1ZV9sZW4sIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCURFQlVHRlNfQUREKHR4X3F1ZXVlX3N0YXR1cywgd2wtPmRlYnVnZnMucm9vdGRpcik7CiAJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwppbmRleCA1Y2I1NzMzOC4uNWFhZDU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmMKQEAgLTI5NCw2ICsyOTQsMTEgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAorCXdsMTI1MV9hY3hfYWNfY2ZnKHdsLCBBQ19CRSwgQ1dNSU5fQkUsIENXTUFYX0JFLCBBSUZTX0RJRlMsIFRYT1BfQkUpOworCXdsMTI1MV9hY3hfYWNfY2ZnKHdsLCBBQ19CSywgQ1dNSU5fQkssIENXTUFYX0JLLCBBSUZTX0RJRlMsIFRYT1BfQkspOworCXdsMTI1MV9hY3hfYWNfY2ZnKHdsLCBBQ19WSSwgQ1dNSU5fVkksIENXTUFYX1ZJLCBBSUZTX0RJRlMsIFRYT1BfVkkpOworCXdsMTI1MV9hY3hfYWNfY2ZnKHdsLCBBQ19WTywgQ1dNSU5fVk8sIENXTUFYX1ZPLCBBSUZTX0RJRlMsIFRYT1BfVk8pOworCiBvdXQ6CiAJa2ZyZWUoY29uZmlnKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuaAppbmRleCBiM2IyNWVjLi4yNjljZWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuaApAQCAtMjYsNiArMjYsNTMgQEAKIAogI2luY2x1ZGUgIndsMTI1MS5oIgogCitlbnVtIHsKKwkvKiBiZXN0IGVmZm9ydC9sZWdhY3kgKi8KKwlBQ19CRSA9IDAsCisKKwkvKiBiYWNrZ3JvdW5kICovCisJQUNfQksgPSAxLAorCisJLyogdmlkZW8gKi8KKwlBQ19WSSA9IDIsCisKKwkvKiB2b2ljZSAqLworCUFDX1ZPID0gMywKKworCS8qIGJyb2FkY2FzdCBkdW1teSBhY2Nlc3MgY2F0ZWdvcnkgKi8KKwlBQ19CQ0FTVCA9IDQsCisKKwlOVU1fQUNDRVNTX0NBVEVHT1JJRVMgPSA0Cit9OworCisvKiBmb2xsb3dpbmcgYXJlIGRlZnVsdCB2YWx1ZXMgZm9yIHRoZSBJRSBmaWVsZHMqLworI2RlZmluZSBDV01JTl9CSyAgMTUKKyNkZWZpbmUgQ1dNSU5fQkUgIDE1CisjZGVmaW5lIENXTUlOX1ZJICA3CisjZGVmaW5lIENXTUlOX1ZPICAzCisjZGVmaW5lIENXTUFYX0JLICAxMDIzCisjZGVmaW5lIENXTUFYX0JFICA2MworI2RlZmluZSBDV01BWF9WSSAgMTUKKyNkZWZpbmUgQ1dNQVhfVk8gIDcKKworLyogc2xvdCBudW1iZXIgc2V0dGluZyB0byBzdGFydCB0cmFuc21pc3Npb24gYXQgUElGUyBpbnRlcnZhbCAqLworI2RlZmluZSBBSUZTX1BJRlMgMQorCisvKgorICogc2xvdCBudW1iZXIgc2V0dGluZyB0byBzdGFydCB0cmFuc21pc3Npb24gYXQgRElGUyBpbnRlcnZhbCAtIG5vcm1hbCBEQ0YKKyAqIGFjY2VzcworICovCisjZGVmaW5lIEFJRlNfRElGUyAyCisKKyNkZWZpbmUgQUlGU05fQksgIDcKKyNkZWZpbmUgQUlGU05fQkUgIDMKKyNkZWZpbmUgQUlGU05fVkkgIEFJRlNfUElGUworI2RlZmluZSBBSUZTTl9WTyAgQUlGU19QSUZTCisjZGVmaW5lIFRYT1BfQksgICAwCisjZGVmaW5lIFRYT1BfQkUgICAwCisjZGVmaW5lIFRYT1BfVkkgICAzMDA4CisjZGVmaW5lIFRYT1BfVk8gICAxNTA0CisKIGludCB3bDEyNTFfaHdfaW5pdF9od2VuY19jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpOwogaW50IHdsMTI1MV9od19pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpOwogaW50IHdsMTI1MV9od19pbml0X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jCmluZGV4IDJmNTBhMjUuLjI0YWU2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jCkBAIC0zOTUsNiArMzk1LDcgQEAKIAkgKiB0aGUgcXVldWUgaGVyZSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxsIGdldCB0b28gbG9uZy4KIAkgKi8KIAlpZiAoc2tiX3F1ZXVlX2xlbigmd2wtPnR4X3F1ZXVlKSA+PSBXTDEyNTFfVFhfUVVFVUVfTUFYX0xFTkdUSCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJvcF90eDogdHhfcXVldWUgZnVsbCwgc3RvcCBxdWV1ZXMiKTsKIAkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHdsLT5odyk7CiAKIAkJLyoKQEAgLTUxMCwxMyArNTExLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgd2wxMjUxX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OwogCWludCByZXQgPSAwOwogCiAJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcE0iLAotCQkgICAgIGNvbmYtPnR5cGUsIGNvbmYtPm1hY19hZGRyKTsKKwkJICAgICB2aWYtPnR5cGUsIHZpZi0+YWRkcik7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWlmICh3bC0+dmlmKSB7CkBAIC01MjQsOSArNTI1LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPnZpZiA9IGNvbmYtPnZpZjsKKwl3bC0+dmlmID0gdmlmOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CiAJCWJyZWFrOwpAQCAtNTM4LDggKzUzOSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChtZW1jbXAod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pKSB7Ci0JCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJaWYgKG1lbWNtcCh3bC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pKSB7CisJCW1lbWNweSh3bC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7CiAJCXJldCA9IHdsMTI1MV9hY3hfc3RhdGlvbl9pZCh3bCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtNTUyLDcgKzU1Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI1MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CiAKQEAgLTU2Miw0MyArNTYzLDI1IEBACiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IHdsMTI1MV9idWlsZF9udWxsX2RhdGEoc3RydWN0IHdsMTI1MSAqd2wpCitzdGF0aWMgaW50IHdsMTI1MV9idWlsZF9xb3NfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNTEgKndsKQogewotCXN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlIHRlbXBsYXRlOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2hkciB0ZW1wbGF0ZTsKIAotCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdsLT5ic3NpZCkpIHsKLQkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5kYSwgd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwotCX0KKwltZW1zZXQoJnRlbXBsYXRlLCAwLCBzaXplb2YodGVtcGxhdGUpKTsKIAotCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8Ci0JCQkJCQlJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCQkJCQkJSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJbWVtY3B5KHRlbXBsYXRlLmFkZHIxLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkodGVtcGxhdGUuYWRkcjIsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5hZGRyMywgd2wtPmJzc2lkLCBFVEhfQUxFTik7CiAKLQlyZXR1cm4gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9OVUxMX0RBVEEsICZ0ZW1wbGF0ZSwKKwl0ZW1wbGF0ZS5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCQkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9RT1NfTlVMTEZVTkMgfAorCQkJCQkgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCisJLyogRklYTUU6IG5vdCBzdXJlIHdoYXQgcHJpb3JpdHkgdG8gdXNlIGhlcmUgKi8KKwl0ZW1wbGF0ZS5xb3NfY3RybCA9IGNwdV90b19sZTE2KDApOworCisJcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUU9TX05VTExfREFUQSwgJnRlbXBsYXRlLAogCQkJCSAgICAgICBzaXplb2YodGVtcGxhdGUpKTsKLQotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9idWlsZF9wc19wb2xsKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgYWlkKQotewotCXN0cnVjdCB3bDEyeHhfcHNfcG9sbF90ZW1wbGF0ZSB0ZW1wbGF0ZTsKLQotCW1lbWNweSh0ZW1wbGF0ZS5ic3NpZCwgd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHRlbXBsYXRlLnRhLCB3bC0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQotCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLwotCXRlbXBsYXRlLmFpZCA9IGNwdV90b19sZTE2KDEgPDwgMTUgfCAxIDw8IDE0IHwgYWlkKTsKLQotCXRlbXBsYXRlLmZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOwotCi0JcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFNfUE9MTCwgJnRlbXBsYXRlLAotCQkJCSAgICAgICBzaXplb2YodGVtcGxhdGUpKTsKLQogfQogCiBzdGF0aWMgaW50IHdsMTI1MV9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQpAQCAtNjM0LDI2ICs2MTcsMzQgQEAKIAogCQl3bC0+cHNtX3JlcXVlc3RlZCA9IHRydWU7CiAKKwkJd2wtPmR0aW1fcGVyaW9kID0gY29uZi0+cHNfZHRpbV9wZXJpb2Q7CisKKwkJcmV0ID0gd2wxMjUxX2FjeF93cl90YnR0X2FuZF9kdGltKHdsLCB3bC0+YmVhY29uX2ludCwKKwkJCQkJCSAgd2wtPmR0aW1fcGVyaW9kKTsKKwogCQkvKgotCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCi0JCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCi0JCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgorCQkgKiBtYWM4MDIxMSBlbmFibGVzIFBTTSBvbmx5IGlmIHdlJ3JlIGFscmVhZHkgYXNzb2NpYXRlZC4KIAkJICovCiAJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3NsZWVwOwogCX0gZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgogCQkgICB3bC0+cHNtX3JlcXVlc3RlZCkgewogCQl3bDEyNTFfZGVidWcoREVCVUdfUFNNLCAicHNtIGRpc2FibGVkIik7CiAKIAkJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKIAotCQlpZiAod2wtPnBzbSkKKwkJaWYgKHdsLT5wc20pIHsKIAkJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQogCX0KIAogCWlmIChjb25mLT5wb3dlcl9sZXZlbCAhPSB3bC0+cG93ZXJfbGV2ZWwpIHsKIAkJcmV0ID0gd2wxMjUxX2FjeF90eF9wb3dlcih3bCwgY29uZi0+cG93ZXJfbGV2ZWwpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfc2xlZXA7CiAKIAkJd2wtPnBvd2VyX2xldmVsID0gY29uZi0+cG93ZXJfbGV2ZWw7CiAJfQpAQCAtODY0LDE4MyArODU1LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bDEyNTFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMpCi17Ci0JdTggaW5kZXggPSAwOwotCi0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzExTUI7Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzKQotewotCXU4IGluZGV4ID0gMDsKLQotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKLQotCXJldHVybiBpbmRleDsKLX0KLQotCi1zdGF0aWMgaW50IHdsMTI1MV9idWlsZF9wcm9iZV9yZXEoc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCi17Ci0Jc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgdGVtcGxhdGU7Ci0Jc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqcmF0ZXM7Ci0JY2hhciAqcHRyOwotCXUxNiBzaXplOwotCi0JcHRyID0gKGNoYXIgKikmdGVtcGxhdGU7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7Ci0KLQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwotCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQotCS8qIElFcyAqLwotCS8qIFNTSUQgKi8KLQl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5pZCA9IFdMQU5fRUlEX1NTSUQ7Ci0JdGVtcGxhdGUuc3NpZC5oZWFkZXIubGVuID0gc3NpZF9sZW47Ci0JaWYgKHNzaWRfbGVuICYmIHNzaWQpCi0JCW1lbWNweSh0ZW1wbGF0ZS5zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyBzc2lkX2xlbjsKLQlwdHIgKz0gc2l6ZTsKLQotCS8qIEJhc2ljIFJhdGVzICovCi0JcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKLQlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTI1MV9idWlsZF9iYXNpY19yYXRlcyhyYXRlcy0+cmF0ZXMpOwotCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOwotCXB0ciArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47Ci0KLQkvKiBFeHRlbmRlZCByYXRlcyAqLwotCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7Ci0JcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKHJhdGVzLT5yYXRlcyk7Ci0Jc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47Ci0KLQl3bDEyNTFfZHVtcChERUJVR19TQ0FOLCAiUFJPQkUgUkVROiAiLCAmdGVtcGxhdGUsIHNpemUpOwotCi0JcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFJPQkVfUkVRLCAmdGVtcGxhdGUsCi0JCQkJICAgICAgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2h3X3NjYW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLAotCQkJICB1OCBhY3RpdmVfc2NhbiwgdTggaGlnaF9wcmlvLCB1OCBudW1fY2hhbm5lbHMsCi0JCQkgIHU4IHByb2JlX3JlcXVlc3RzKQotewotCXN0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlciA9IE5VTEw7Ci0Jc3RydWN0IGNtZF9zY2FuICpwYXJhbXMgPSBOVUxMOwotCWludCBpLCByZXQ7Ci0JdTE2IHNjYW5fb3B0aW9ucyA9IDA7Ci0KLQlpZiAod2wtPnNjYW5uaW5nKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBhcmFtcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwYXJhbXMtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7Ci0JcGFyYW1zLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPQotCQljcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8IENGR19SWF9NR01UX0VOIHwgQ0ZHX1JYX0JDTl9FTik7Ci0KLQkvKiBIaWdoIHByaW9yaXR5IHNjYW4gKi8KLQlpZiAoIWFjdGl2ZV9zY2FuKQotCQlzY2FuX29wdGlvbnMgfD0gU0NBTl9QQVNTSVZFOwotCWlmIChoaWdoX3ByaW8pCi0JCXNjYW5fb3B0aW9ucyB8PSBTQ0FOX1BSSU9SSVRZX0hJR0g7Ci0JcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOwotCi0JcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOwotCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOwotCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUxNigxIDw8IDEpOyAvKiAyIE1icHMgKi8KLQlwYXJhbXMtPnBhcmFtcy50aWRfdHJpZ2dlciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS5taW5fZHVyYXRpb24gPSBjcHVfdG9fbGUzMigzMDAwMCk7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWF4X2R1cmF0aW9uID0gY3B1X3RvX2xlMzIoNjAwMDApOwotCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKLQkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOwotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGkgKyAxOwotCQltZW1zZXQocGFyYW1zLT5jaGFubmVsc1tpXS5wYWQsIDAsIDMpOwotCX0KLQotCWZvciAoaSA9IG51bV9jaGFubmVsczsgaSA8IFNDQU5fTUFYX05VTV9PRl9DSEFOTkVMUzsgaSsrKQotCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0sIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzKSk7Ci0KLQlpZiAobGVuICYmIHNzaWQpIHsKLQkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47Ci0JCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOwotCX0gZWxzZSB7Ci0JCXBhcmFtcy0+cGFyYW1zLnNzaWRfbGVuID0gMDsKLQkJbWVtc2V0KHBhcmFtcy0+cGFyYW1zLnNzaWQsIDAsIDMyKTsKLQl9Ci0KLQlyZXQgPSB3bDEyNTFfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI1MV9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JdHJpZ2dlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmlnZ2VyKQotCQlnb3RvIG91dDsKLQotCXRyaWdnZXItPnRpbWVvdXQgPSAwOwotCi0JcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAotCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjUxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI1MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQl3bC0+c2Nhbm5pbmcgPSB0cnVlOwotCi0JcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwotCWlmIChyZXQgPCAwKQotCQl3bDEyNTFfZXJyb3IoIlNDQU4gZmFpbGVkIik7Ci0KLQl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKLQotCWlmIChwYXJhbXMtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXdsMTI1MV9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAotCQkJICAgICBwYXJhbXMtPmhlYWRlci5zdGF0dXMpOwotCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUocGFyYW1zKTsKLQlyZXR1cm4gcmV0OwotCi19Ci0KIHN0YXRpYyBpbnQgd2wxMjUxX29wX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0JdTggKnNzaWQgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IHNzaWRfbGVuID0gMDsKKwl1OCAqc3NpZCA9IE5VTEw7CisJaW50IHJldDsKIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGh3IHNjYW4iKTsKIApAQCAtMTA1MSwxMiArODczLDQzIEBACiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCisJaWYgKHdsLT5zY2FubmluZykgeworCQl3bDEyNTFfZGVidWcoREVCVUdfU0NBTiwgInNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcyIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gd2wxMjUxX2h3X3NjYW4oaHctPnByaXYsIHNzaWQsIHNzaWRfbGVuLCAxLCAwLCAxMywgMyk7CisJc2tiID0gaWVlZTgwMjExX3Byb2JlcmVxX2dldCh3bC0+aHcsIHdsLT52aWYsIHNzaWQsIHNzaWRfbGVuLAorCQkJCSAgICAgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOworCWlmICghc2tiKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAorCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFJPQkVfUkVRLCBza2ItPmRhdGEsCisJCQkJICAgICAgc2tiLT5sZW4pOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwlyZXQgPSB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byh3bCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJd2wtPnNjYW5uaW5nID0gdHJ1ZTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2Nhbih3bCwgc3NpZCwgc3NpZF9sZW4sIHJlcS0+Y2hhbm5lbHMsCisJCQkgICAgICByZXEtPm5fY2hhbm5lbHMsIFdMMTI1MV9TQ0FOX05VTV9QUk9CRVMpOworCWlmIChyZXQgPCAwKSB7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKK291dF9zbGVlcDoKIAl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKIAogb3V0OgpAQCAtMTA5Myw5ICs5NDYsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICAgICAgdTMyIGNoYW5nZWQpCiB7Ci0JZW51bSB3bDEyNTFfY21kX3BzX21vZGUgbW9kZTsKIAlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OwotCXN0cnVjdCBza19idWZmICpiZWFjb247CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiwgKnNrYjsKIAlpbnQgcmV0OwogCiAJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYnNzIGluZm8gY2hhbmdlZCIpOwpAQCAtMTEwOSw3ICs5NjEsMTcgQEAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CiAJCW1lbWNweSh3bC0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JCXJldCA9IHdsMTI1MV9idWlsZF9udWxsX2RhdGEod2wpOworCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHdsLT5odywgd2wtPnZpZik7CisJCWlmICghc2tiKQorCQkJZ290byBvdXRfc2xlZXA7CisKKwkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9OVUxMX0RBVEEsCisJCQkJCSAgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisKKwkJcmV0ID0gd2wxMjUxX2J1aWxkX3Fvc19udWxsX2RhdGEod2wpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMTI0LDI3ICs5ODYsMjEgQEAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKIAkJCXdsLT5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0JCQl3bC0+ZHRpbV9wZXJpb2QgPSBic3NfY29uZi0+ZHRpbV9wZXJpb2Q7CiAKLQkJCXJldCA9IHdsMTI1MV9hY3hfd3JfdGJ0dF9hbmRfZHRpbSh3bCwgd2wtPmJlYWNvbl9pbnQsCi0JCQkJCQkJICB3bC0+ZHRpbV9wZXJpb2QpOwotCQkJd2wtPmFpZCA9IGJzc19jb25mLT5haWQ7CisJCQlza2IgPSBpZWVlODAyMTFfcHNwb2xsX2dldCh3bC0+aHcsIHdsLT52aWYpOworCQkJaWYgKCFza2IpCisJCQkJZ290byBvdXRfc2xlZXA7CiAKLQkJCXJldCA9IHdsMTI1MV9idWlsZF9wc19wb2xsKHdsLCB3bC0+YWlkKTsKKwkJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFNfUE9MTCwKKwkJCQkJCSAgICAgIHNrYi0+ZGF0YSwKKwkJCQkJCSAgICAgIHNrYi0+bGVuKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gb3V0X3NsZWVwOwogCi0JCQlyZXQgPSB3bDEyNTFfYWN4X2FpZCh3bCwgd2wtPmFpZCk7CisJCQlyZXQgPSB3bDEyNTFfYWN4X2FpZCh3bCwgYnNzX2NvbmYtPmFpZCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIG91dF9zbGVlcDsKLQotCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KLQkJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiAhd2wtPnBzbSkgewotCQkJCW1vZGUgPSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERTsKLQkJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIG1vZGUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIG91dF9zbGVlcDsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIHVzZSBkZWZhdWx0cyB3aGVuIG5vdCBhc3NvY2lhdGVkICovCiAJCQl3bC0+YmVhY29uX2ludCA9IFdMMTI1MV9ERUZBVUxUX0JFQUNPTl9JTlQ7CkBAIC0xMTc2LDcgKzEwMzIsNyBAQAogCQkJcmV0ID0gd2wxMjUxX2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9ESVNBQkxFKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXdsMTI1MV93YXJuaW5nKCJTZXQgY3RzcHJvdGVjdCBmYWlsZWQgJWQiLCByZXQpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9zbGVlcDsKIAkJfQogCX0KIApAQCAtMTE4Nyw3ICsxMDQzLDcgQEAKIAogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9zbGVlcDsKIAkJfQogCiAJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFJPQkVfUkVTUCwgYmVhY29uLT5kYXRhLApAQCAtMTE5NiwxMyArMTA1MiwxMyBAQAogCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7CiAKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3NsZWVwOwogCiAJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5iZWFjb25faW50LAogCQkJCSAgd2wtPmNoYW5uZWwsIHdsLT5kdGltX3BlcmlvZCk7CiAKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3NsZWVwOwogCX0KIAogb3V0X3NsZWVwOgpAQCAtMTI3Myw2ICsxMTI5LDQ5IEBACiAJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCiB9OwogCitzdGF0aWMgaW50IHdsMTI1MV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJZW51bSB3bDEyNTFfYWN4X3BzX3NjaGVtZSBwc19zY2hlbWU7CisJc3RydWN0IHdsMTI1MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmYgdHggJWQiLCBxdWV1ZSk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogbWFjODAyMTEgdXNlcyB1bml0cyBvZiAzMiB1c2VjICovCisJcmV0ID0gd2wxMjUxX2FjeF9hY19jZmcod2wsIHdsMTI1MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCXBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwKKwkJCQlwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCAqIDMyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwlpZiAocGFyYW1zLT51YXBzZCkKKwkJcHNfc2NoZW1lID0gV0wxMjUxX0FDWF9QU19TQ0hFTUVfVVBTRF9UUklHR0VSOworCWVsc2UKKwkJcHNfc2NoZW1lID0gV0wxMjUxX0FDWF9QU19TQ0hFTUVfTEVHQUNZOworCisJcmV0ID0gd2wxMjUxX2FjeF90aWRfY2ZnKHdsLCB3bDEyNTFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQkgQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJIHdsMTI1MV90eF9nZXRfcXVldWUocXVldWUpLCBwc19zY2hlbWUsCisJCQkJIFdMMTI1MV9BQ1hfQUNLX1BPTElDWV9MRUdBQ1kpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworb3V0X3NsZWVwOgorCXdsMTI1MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyNTFfYmFuZF8yZ2h6ID0gewogCS5jaGFubmVscyA9IHdsMTI1MV9jaGFubmVscywKQEAgLTEyOTMsNiArMTE5Miw3IEBACiAJLmh3X3NjYW4gPSB3bDEyNTFfb3BfaHdfc2NhbiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IHdsMTI1MV9vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5zZXRfcnRzX3RocmVzaG9sZCA9IHdsMTI1MV9vcF9zZXRfcnRzX3RocmVzaG9sZCwKKwkuY29uZl90eCA9IHdsMTI1MV9vcF9jb25mX3R4LAogfTsKIAogc3RhdGljIGludCB3bDEyNTFfcmVnaXN0ZXJfaHcoc3RydWN0IHdsMTI1MSAqd2wpCkBAIC0xMzMyLDEyICsxMjMyLDE1IEBACiAJd2wtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJSUVFRTgwMjExX0hXX05PSVNFX0RCTSB8CiAJCUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8Ci0JCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSOworCQlJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiB8CisJCUlFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRDsKIAogCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAl3bC0+aHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAJd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmd2wxMjUxX2JhbmRfMmdoejsKIAorCXdsLT5ody0+cXVldWVzID0gNDsKKwogCXJldCA9IHdsMTI1MV9yZWdpc3Rlcl9odyh3bCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmMKaW5kZXggOTkzMWIxOS4uODUxZGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYwpAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKICNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKIAotI2RlZmluZSBXTDEyNTFfV0FLRVVQX1RJTUVPVVQgMjAwMAorLyogaW4gbXMgKi8KKyNkZWZpbmUgV0wxMjUxX1dBS0VVUF9USU1FT1VUIDEwMAogCiB2b2lkIHdsMTI1MV9lbHBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC02Nyw3ICs2OCw3IEBACiAKIGludCB3bDEyNTFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBzdGFydDsKIAl1MzIgZWxwX3JlZzsKIAogCWlmICghd2wtPmVscCkKQEAgLTc1LDYgKzc2LDcgQEAKIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOwogCisJc3RhcnQgPSBqaWZmaWVzOwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNTFfV0FLRVVQX1RJTUVPVVQpOwogCiAJd2wxMjUxX3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgRUxQQ1RSTF9XQUtFX1VQKTsKQEAgLTk1LDggKzk3LDcgQEAKIAl9CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfUFNNLCAid2FrZXVwIHRpbWU6ICV1IG1zIiwKLQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpIC0KLQkJICAgICAoamlmZmllc190b19tc2Vjcyh0aW1lb3V0KSAtIFdMMTI1MV9XQUtFVVBfVElNRU9VVCkpOworCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAKIAl3bC0+ZWxwID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYwppbmRleCBmODRjYzg5Li5iNTY3MzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlpZiAod2wtPnJ4X2N1cnJlbnRfYnVmZmVyKQogCQlyeF9wYWNrZXRfcmluZ19hZGRyICs9IHdsLT5kYXRhX3BhdGgtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7CisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpIHsKIAkJd2wxMjUxX2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMKaW5kZXggZjg1OTcwNi4uYzgyMjMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpAQCAtMTY3LDggKzE2Nyw3IEBACiAJdHhfaGRyLT5leHBpcnlfdGltZSA9IGNwdV90b19sZTMyKDEgPDwgMTYpOwogCXR4X2hkci0+aWQgPSBpZDsKIAotCS8qIEZJWE1FOiBob3cgdG8gZ2V0IHRoZSBjb3JyZWN0IHF1ZXVlIGlkPyAqLwotCXR4X2hkci0+eG1pdF9xdWV1ZSA9IDA7CisJdHhfaGRyLT54bWl0X3F1ZXVlID0gd2wxMjUxX3R4X2dldF9xdWV1ZShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAKIAl3bDEyNTFfdHhfY29udHJvbCh0eF9oZHIsIGNvbnRyb2wsIGZjKTsKIAl3bDEyNTFfdHhfZnJhZ19ibG9ja19udW0odHhfaGRyKTsKQEAgLTIyMCw2ICsyMTksNyBAQAogCQkJLyogYWxpZ24gdGhlIGJ1ZmZlciBvbiBhIDQtYnl0ZSBib3VuZGFyeSAqLwogCQkJc2tiX3Jlc2VydmUoc2tiLCBvZmZzZXQpOwogCQkJbWVtbW92ZShza2ItPmRhdGEsIHNyYywgc2tiLT5sZW4pOworCQkJdHhfaGRyID0gKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKikgc2tiLT5kYXRhOwogCQl9IGVsc2UgewogCQkJd2wxMjUxX2luZm8oIk5vIGhhbmRsZXIsIGZpeG1lISIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzcsOCArMjM3LDkgQEAKIAogCXdsMTI1MV9tZW1fd3JpdGUod2wsIGFkZHIsIHNrYi0+ZGF0YSwgbGVuKTsKIAotCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInR4IGlkICV1IHNrYiAweCVwIHBheWxvYWQgJXUgcmF0ZSAweCV4IiwKLQkJICAgICB0eF9oZHItPmlkLCBza2IsIHR4X2hkci0+bGVuZ3RoLCB0eF9oZHItPnJhdGUpOworCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInR4IGlkICV1IHNrYiAweCVwIHBheWxvYWQgJXUgcmF0ZSAweCV4ICIKKwkJICAgICAicXVldWUgJWQiLCB0eF9oZHItPmlkLCBza2IsIHR4X2hkci0+bGVuZ3RoLAorCQkgICAgIHR4X2hkci0+cmF0ZSwgdHhfaGRyLT54bWl0X3F1ZXVlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCmluZGV4IDdjMWMxNjYuLjU1ODU2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX19XTDEyNTFfVFhfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCiAKIC8qCiAgKgpAQCAtMjA5LDYgKzIxMCwyMiBAQAogCXU4IGRvbmVfMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdGF0aWMgaW5saW5lIGludCB3bDEyNTFfdHhfZ2V0X3F1ZXVlKGludCBxdWV1ZSkKK3sKKwlzd2l0Y2ggKHF1ZXVlKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gUU9TX0FDX1ZPOworCWNhc2UgMToKKwkJcmV0dXJuIFFPU19BQ19WSTsKKwljYXNlIDI6CisJCXJldHVybiBRT1NfQUNfQkU7CisJY2FzZSAzOgorCQlyZXR1cm4gUU9TX0FDX0JLOworCWRlZmF1bHQ6CisJCXJldHVybiBRT1NfQUNfQkU7CisJfQorfQorCiB2b2lkIHdsMTI1MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHdsMTI1MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjUxICp3bCk7CiB2b2lkIHdsMTI1MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjUxICp3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKaW5kZXggOTQzNTliMS4uOTdlYTUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaApAQCAtNDMsNyArNDMsNyBAQAogCURFQlVHX1NQSQk9IEJJVCgxKSwKIAlERUJVR19CT09UCT0gQklUKDIpLAogCURFQlVHX01BSUxCT1gJPSBCSVQoMyksCi0JREVCVUdfTkVUTElOSwk9IEJJVCg0KSwKKwlERUJVR19URVNUTU9ERQk9IEJJVCg0KSwKIAlERUJVR19FVkVOVAk9IEJJVCg1KSwKIAlERUJVR19UWAk9IEJJVCg2KSwKIAlERUJVR19SWAk9IEJJVCg3KSwKQEAgLTEwNywxMSArMTA3LDM2IEBACiAJCQkJICBDRkdfUlhfQ1RMX0VOIHwgQ0ZHX1JYX0JDTl9FTiB8ICAgICBcCiAJCQkJICBDRkdfUlhfQVVUSF9FTiB8IENGR19SWF9BU1NPQ19FTikKIAotI2RlZmluZSBXTDEyNzFfREVGQVVMVF9CQVNJQ19SQVRFX1NFVCAoQ09ORl9UWF9SQVRFX01BU0tfQUxMKQotCiAjZGVmaW5lIFdMMTI3MV9GV19OQU1FICJ3bDEyNzEtZncuYmluIgogI2RlZmluZSBXTDEyNzFfTlZTX05BTUUgIndsMTI3MS1udnMuYmluIgogCisvKiBOVlMgZGF0YSBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgV0wxMjcxX05WU19TRUNUSU9OX1NJWkUgICAgICAgICAgICAgICAgICA0NjgKKworI2RlZmluZSBXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkUgICAgICAgICAgICA1NworI2RlZmluZSBXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkVfUEFEREVEIFwKKwkoV0wxMjcxX05WU19HRU5FUkFMX1BBUkFNU19TSVpFICsgMSkKKyNkZWZpbmUgV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFICAgICAgICAgMTcKKyNkZWZpbmUgV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFX1BBRERFRCBcCisJKFdMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRSArIDEpCisjZGVmaW5lIFdMMTI3MV9OVlNfRFlOX1JBRElPX1BBUkFNU19TSVpFICAgICAgICAgIDY1CisjZGVmaW5lIFdMMTI3MV9OVlNfRFlOX1JBRElPX1BBUkFNU19TSVpFX1BBRERFRCBcCisJKFdMMTI3MV9OVlNfRFlOX1JBRElPX1BBUkFNU19TSVpFICsgMSkKKyNkZWZpbmUgV0wxMjcxX05WU19GRU1fQ09VTlQgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV0wxMjcxX05WU19JTklfU1BBUkVfU0laRSAgICAgICAgICAgICAgICAxMjQKKworc3RydWN0IHdsMTI3MV9udnNfZmlsZSB7CisJLyogTlZTIHNlY3Rpb24gKi8KKwl1OCBudnNbV0wxMjcxX05WU19TRUNUSU9OX1NJWkVdOworCisJLyogSU5JIHNlY3Rpb24gKi8KKwl1OCBnZW5lcmFsX3BhcmFtc1tXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkVfUEFEREVEXTsKKwl1OCBzdGF0X3JhZGlvX3BhcmFtc1tXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEXTsKKwl1OCBkeW5fcmFkaW9fcGFyYW1zW1dMMTI3MV9OVlNfRkVNX0NPVU5UXQorCQkJICAgW1dMMTI3MV9OVlNfRFlOX1JBRElPX1BBUkFNU19TSVpFX1BBRERFRF07CisJdTggaW5pX3NwYXJlW1dMMTI3MV9OVlNfSU5JX1NQQVJFX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qCiAgKiBFbmFibGUvZGlzYWJsZSA4MDIuMTFhIHN1cHBvcnQgZm9yIFdMMTI3MwogICovCkBAIC0yNzYsNiArMzAxLDcgQEAKIAogCXN0cnVjdCBkZW50cnkgKnJldHJ5X2NvdW50OwogCXN0cnVjdCBkZW50cnkgKmV4Y2Vzc2l2ZV9yZXRyaWVzOworCXN0cnVjdCBkZW50cnkgKmdwaW9fcG93ZXI7CiB9OwogCiAjZGVmaW5lIE5VTV9UWF9RVUVVRVMgICAgICAgICAgICAgIDQKQEAgLTMyMiw2ICszNDgsMTcgQEAKIAllbnVtIHdsMTI3MV9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfU1RBX1JBVEVTX0NIQU5HRUQgICgwKQorI2RlZmluZSBXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCAgICAgKDEpCisjZGVmaW5lIFdMMTI3MV9GTEFHX0pPSU5FRCAgICAgICAgICAgICAoMikKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiAgICAgICAgICgzKQorI2RlZmluZSBXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVEICAgKDQpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1NDQU5OSU5HICAgICAgICAgICAoNSkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSU5fRUxQICAgICAgICAgICAgICg2KQorI2RlZmluZSBXTDEyNzFfRkxBR19QU00gICAgICAgICAgICAgICAgKDcpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQgICAgICAoOCkKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnQ7CiAKIAlzdHJ1Y3Qgd2wxMjcxX2NoaXAgY2hpcDsKQEAgLTMzMSw4ICszNjgsNyBAQAogCiAJdTggKmZ3OwogCXNpemVfdCBmd19sZW47Ci0JdTggKm52czsKLQlzaXplX3QgbnZzX2xlbjsKKwlzdHJ1Y3Qgd2wxMjcxX252c19maWxlICpudnM7CiAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwpAQCAtMzU5LDcgKzM5NSw2IEBACiAKIAkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7Ci0JYm9vbCB0eF9xdWV1ZV9zdG9wcGVkOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CiAKQEAgLTM4NywxNCArNDIyLDE1IEBACiAJdTMyIG1ib3hfcHRyWzJdOwogCiAJLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLwotCWJvb2wgc2Nhbm5pbmc7CiAJc3RydWN0IHdsMTI3MV9zY2FuIHNjYW47CiAKIAkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KIAl1MTYgYWlkOwogCiAJLyogY3VycmVudGx5IGNvbmZpZ3VyZWQgcmF0ZSBzZXQgKi8KKwl1MzIgc3RhX3JhdGVfc2V0OwogCXUzMiBiYXNpY19yYXRlX3NldDsKKwl1MzIgcmF0ZV9zZXQ7CiAKIAkvKiBUaGUgY3VycmVudCBiYW5kICovCiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwpAQCAtNDA1LDE4ICs0NDEsOSBAQAogCXVuc2lnbmVkIGludCByeF9jb25maWc7CiAJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKIAotCS8qIGlzIGZpcm13YXJlIGluIGVscCBtb2RlICovCi0JYm9vbCBlbHA7Ci0KIAlzdHJ1Y3QgY29tcGxldGlvbiAqZWxwX2NvbXBsOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZWxwX3dvcms7CiAKLQkvKiB3ZSBjYW4gYmUgaW4gcHNtLCBidXQgbm90IGluIGVscCwgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlICovCi0JYm9vbCBwc207Ci0KLQkvKiBQU00gbW9kZSByZXF1ZXN0ZWQgKi8KLQlib29sIHBzbV9yZXF1ZXN0ZWQ7Ci0KIAkvKiByZXRyeSBjb3VudGVyIGZvciBQU00gZW50cmllcyAqLwogCXU4IHBzbV9lbnRyeV9yZXRyeTsKIApAQCAtNDM1LDkgKzQ2Miw2IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCi0JLyogVXNlZCBmb3IgYSB3b3JrYXJvdW5kIHRvIHNlbmQgZGlzY29ubmVjdCBiZWZvcmUgcmVqb2luaW5nICovCi0JYm9vbCBqb2luZWQ7Ci0KIAkvKiBDdXJyZW50IGNoaXBzZXQgY29uZmlndXJhdGlvbiAqLwogCXN0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyBjb25mOwogCkBAIC00NTUsMTEgKzQ3OSwxNCBAQAogCiAjZGVmaW5lIFdMMTI3MV9UWF9RVUVVRV9NQVhfTEVOR1RIIDIwCiAKLS8qIFdMMTI3MSBuZWVkcyBhIDIwMG1zIHNsZWVwIGFmdGVyIHBvd2VyIG9uICovCisvKiBXTDEyNzEgbmVlZHMgYSAyMDBtcyBzbGVlcCBhZnRlciBwb3dlciBvbiwgYW5kIGEgMjBtcyBzbGVlcCBiZWZvcmUgcG93ZXIKKyAgIG9uIGluIGNhc2UgaXMgaGFzIGJlZW4gc2h1dCBkb3duIHNob3J0bHkgYmVmb3JlICovCisjZGVmaW5lIFdMMTI3MV9QUkVfUE9XRVJfT05fU0xFRVAgMjAgLyogaW4gbWlsaXNlY29uZHMgKi8KICNkZWZpbmUgV0wxMjcxX1BPV0VSX09OX1NMRUVQIDIwMCAvKiBpbiBtaWxpc2Vjb25kcyAqLwogCiBzdGF0aWMgaW5saW5lIGJvb2wgd2wxMjcxXzExYV9lbmFibGVkKHZvaWQpCiB7CisJLyogRklYTUU6IHRoaXMgY291bGQgYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgTlZTLUlOSSBmaWxlICovCiAjaWZkZWYgV0wxMjcxXzgwMjExQV9FTkFCTEVECiAJcmV0dXJuIHRydWU7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKaW5kZXggNWNjODliYi4uNjBmMTBkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jCkBAIC0zOTAsNiArMzkwLDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2Rjb19pdHJpbV9wYXJhbXMgKmRjbzsKKwlzdHJ1Y3QgY29uZl9pdHJpbV9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5pdHJpbTsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkY28gaXRyaW0gcGFyYW1ldGVycyIpOworCisJZGNvID0ga3phbGxvYyhzaXplb2YoKmRjbyksIEdGUF9LRVJORUwpOworCWlmICghZGNvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRjby0+ZW5hYmxlID0gYy0+ZW5hYmxlOworCWRjby0+dGltZW91dCA9IGNwdV90b19sZTMyKGMtPnRpbWVvdXQpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVRfRENPX0lUUklNX1BBUkFNUywKKwkJCQkgICBkY28sIHNpemVvZigqZGNvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZGNvIGl0cmltIHBhcmFtZXRlcnM6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoZGNvKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGVfZmlsdGVyKQogewogCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24gKmJlYWNvbl9maWx0ZXIgPSBOVUxMOwpAQCAtNzU4LDEwICs3ODcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGVuYWJsZWRfcmF0ZXMpCitpbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgKmFjeDsKIAlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzICpjID0gJndsLT5jb25mLnR4LnJjX2NvbmY7CisJaW50IGlkeCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKQEAgLTc3MywxMiArODAzLDIxIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGNvbmZpZ3VyZSBvbmUgZGVmYXVsdCAob25lLXNpemUtZml0cy1hbGwpIHJhdGUgY2xhc3MgKi8KLQlhY3gtPnJhdGVfY2xhc3NfY250ID0gY3B1X3RvX2xlMzIoMSk7Ci0JYWN4LT5yYXRlX2NsYXNzWzBdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMihlbmFibGVkX3JhdGVzKTsKLQlhY3gtPnJhdGVfY2xhc3NbMF0uc2hvcnRfcmV0cnlfbGltaXQgPSBjLT5zaG9ydF9yZXRyeV9saW1pdDsKLQlhY3gtPnJhdGVfY2xhc3NbMF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7Ci0JYWN4LT5yYXRlX2NsYXNzWzBdLmFmbGFncyA9IGMtPmFmbGFnczsKKwkvKiBjb25maWd1cmUgb25lIGJhc2ljIHJhdGUgY2xhc3MgKi8KKwlpZHggPSBBQ1hfVFhfQkFTSUNfUkFURTsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5lbmFibGVkX3JhdGVzID0gY3B1X3RvX2xlMzIod2wtPmJhc2ljX3JhdGVfc2V0KTsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5zaG9ydF9yZXRyeV9saW1pdCA9IGMtPnNob3J0X3JldHJ5X2xpbWl0OworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmxvbmdfcmV0cnlfbGltaXQgPSBjLT5sb25nX3JldHJ5X2xpbWl0OworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmFmbGFncyA9IGMtPmFmbGFnczsKKworCS8qIGNvbmZpZ3VyZSBvbmUgQVAgc3VwcG9ydGVkIHJhdGUgY2xhc3MgKi8KKwlpZHggPSBBQ1hfVFhfQVBfRlVMTF9SQVRFOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMih3bC0+cmF0ZV9zZXQpOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLnNob3J0X3JldHJ5X2xpbWl0ID0gYy0+c2hvcnRfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uYWZsYWdzID0gYy0+YWZsYWdzOworCisJYWN4LT5yYXRlX2NsYXNzX2NudCA9IGNwdV90b19sZTMyKEFDWF9UWF9SQVRFX1BPTElDWV9DTlQpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9SQVRFX1BPTElDWSwgYWN4LCBzaXplb2YoKmFjeCkpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03OTEsMTIgKzgzMCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK2ludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmc24sIHUxNiB0eG9wKQogewogCXN0cnVjdCBhY3hfYWNfY2ZnICphY3g7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFjY2VzcyBjYXRlZ29yeSBjb25maWciKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFjIGNmZyAlZCBjd19taW5nICVkIGN3X21heCAlZCAiCisJCSAgICAgImFpZnMgJWQgdHhvcCAlZCIsIGFjLCBjd19taW4sIGN3X21heCwgYWlmc24sIHR4b3ApOwogCiAJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwogCkBAIC04MDUsMjEgKzg0NiwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHguYWNfY29uZl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5ICpjID0gJih3bC0+Y29uZi50eC5hY19jb25mW2ldKTsKLQkJYWN4LT5hYyA9IGMtPmFjOwotCQlhY3gtPmN3X21pbiA9IGMtPmN3X21pbjsKLQkJYWN4LT5jd19tYXggPSBjcHVfdG9fbGUxNihjLT5jd19tYXgpOwotCQlhY3gtPmFpZnNuID0gYy0+YWlmc247Ci0JCWFjeC0+cmVzZXJ2ZWQgPSAwOwotCQlhY3gtPnR4X29wX2xpbWl0ID0gY3B1X3RvX2xlMTYoYy0+dHhfb3BfbGltaXQpOworCWFjeC0+YWMgPSBhYzsKKwlhY3gtPmN3X21pbiA9IGN3X21pbjsKKwlhY3gtPmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7CisJYWN4LT5haWZzbiA9IGFpZnNuOworCWFjeC0+dHhfb3BfbGltaXQgPSBjcHVfdG9fbGUxNih0eG9wKTsKIAotCQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0FDX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgYWNjZXNzIGNhdGVnb3J5ICIKLQkJCQkgICAgICAgImNvbmZpZzogJWQiLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0FDX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggYWMgY2ZnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKIAl9CiAKIG91dDoKQEAgLTgyNywxMCArODYzLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK2ludCB3bDEyNzFfYWN4X3RpZF9jZmcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHF1ZXVlX2lkLCB1OCBjaGFubmVsX3R5cGUsCisJCSAgICAgICB1OCB0c2lkLCB1OCBwc19zY2hlbWUsIHU4IGFja19wb2xpY3ksCisJCSAgICAgICB1MzIgYXBzZF9jb25mMCwgdTMyIGFwc2RfY29uZjEpCiB7CiAJc3RydWN0IGFjeF90aWRfY29uZmlnICphY3g7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHRpZCBjb25maWciKTsKIApAQCAtODQxLDIxICs4NzksMTggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLnR4LnRpZF9jb25mX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGNvbmZfdHhfdGlkICpjID0gJih3bC0+Y29uZi50eC50aWRfY29uZltpXSk7Ci0JCWFjeC0+cXVldWVfaWQgPSBjLT5xdWV1ZV9pZDsKLQkJYWN4LT5jaGFubmVsX3R5cGUgPSBjLT5jaGFubmVsX3R5cGU7Ci0JCWFjeC0+dHNpZCA9IGMtPnRzaWQ7Ci0JCWFjeC0+cHNfc2NoZW1lID0gYy0+cHNfc2NoZW1lOwotCQlhY3gtPmFja19wb2xpY3kgPSBjLT5hY2tfcG9saWN5OwotCQlhY3gtPmFwc2RfY29uZlswXSA9IGNwdV90b19sZTMyKGMtPmFwc2RfY29uZlswXSk7Ci0JCWFjeC0+YXBzZF9jb25mWzFdID0gY3B1X3RvX2xlMzIoYy0+YXBzZF9jb25mWzFdKTsKKwlhY3gtPnF1ZXVlX2lkID0gcXVldWVfaWQ7CisJYWN4LT5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7CisJYWN4LT50c2lkID0gdHNpZDsKKwlhY3gtPnBzX3NjaGVtZSA9IHBzX3NjaGVtZTsKKwlhY3gtPmFja19wb2xpY3kgPSBhY2tfcG9saWN5OworCWFjeC0+YXBzZF9jb25mWzBdID0gY3B1X3RvX2xlMzIoYXBzZF9jb25mMCk7CisJYWN4LT5hcHNkX2NvbmZbMV0gPSBjcHVfdG9fbGUzMihhcHNkX2NvbmYxKTsKIAotCQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RJRF9DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHRpZCBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVElEX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHRpZCBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OwogCX0KIAogb3V0OgpAQCAtMTAxMiw1OSArMTA0Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfc21hcnRfcmVmbGV4KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBhY3hfc21hcnRfcmVmbGV4X3N0YXRlICpzcl9zdGF0ZSA9IE5VTEw7Ci0Jc3RydWN0IGFjeF9zbWFydF9yZWZsZXhfY29uZmlnX3BhcmFtcyAqc3JfcGFyYW0gPSBOVUxMOwotCWludCBpLCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNtYXJ0IHJlZmxleCIpOwotCi0Jc3JfcGFyYW0gPSBremFsbG9jKHNpemVvZigqc3JfcGFyYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyX3BhcmFtKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBDT05GX1NSX0VSUl9UQkxfQ09VTlQ7IGkrKykgewotCQlzdHJ1Y3QgY29uZl9tYXJ0X3JlZmxleF9lcnJfdGFibGUgKmUgPQotCQkJJih3bC0+Y29uZi5pbml0LnNyX2Vycl90YmxbaV0pOwotCi0JCXNyX3BhcmFtLT5lcnJvcl90YWJsZVtpXS5sZW4gPSBlLT5sZW47Ci0JCXNyX3BhcmFtLT5lcnJvcl90YWJsZVtpXS51cHBlcl9saW1pdCA9IGUtPnVwcGVyX2xpbWl0OwotCQltZW1jcHkoc3JfcGFyYW0tPmVycm9yX3RhYmxlW2ldLnZhbHVlcywgZS0+dmFsdWVzLCBlLT5sZW4pOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0VUX1NNQVJUX1JFRkxFWF9QQVJBTVMsCi0JCQkJICAgc3JfcGFyYW0sIHNpemVvZigqc3JfcGFyYW0pKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzbWFydCByZWZsZXggcGFyYW1zOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNyX3N0YXRlID0ga3phbGxvYyhzaXplb2YoKnNyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcl9zdGF0ZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBlbmFibGUgc21hcnQgcmVmbGV4ICovCi0Jc3Jfc3RhdGUtPmVuYWJsZSA9IHdsLT5jb25mLmluaXQuc3JfZW5hYmxlOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVRfU01BUlRfUkVGTEVYX1NUQVRFLAotCQkJCSAgIHNyX3N0YXRlLCBzaXplb2YoKnNyX3N0YXRlKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc21hcnQgcmVmbGV4IHBhcmFtczogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShzcl9zdGF0ZSk7Ci0Ja2ZyZWUoc3JfcGFyYW0pOwotCXJldHVybiByZXQ7Ci0KLX0KLQogaW50IHdsMTI3MV9hY3hfYmV0X2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IHdsMTI3MV9hY3hfYmV0X2VuYWJsZSAqYWN4ID0gTlVMTDsKQEAgLTExMzIsMyArMTExNCwzMSBAQAogCWtmcmVlKGFjeCk7CiAJcmV0dXJuIHJldDsKIH0KKworaW50IHdsMTI3MV9hY3hfcG1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfYWN4X3BtX2NvbmZpZyAqYWN4ID0gTlVMTDsKKwlzdHJ1Y3QgIGNvbmZfcG1fY29uZmlnX3NldHRpbmdzICpjID0gJndsLT5jb25mLnBtX2NvbmZpZzsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcG0gY29uZmlnIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5ob3N0X2Nsa19zZXR0bGluZ190aW1lID0gY3B1X3RvX2xlMzIoYy0+aG9zdF9jbGtfc2V0dGxpbmdfdGltZSk7CisJYWN4LT5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQgPSBjLT5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1BNX0NPTkZJRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggcG0gY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaAppbmRleCAyY2UwYTgxLi5hZWNjYzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmgKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CiAgKgpAQCAtMzQ4LDcgKzM0OCw3IEBACiAgKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAobm90IDIyMSkKICAqIEJ5dGUgT2Zmc2V0ICAgICBTaXplIChCeXRlcykgICAgRGVmaW5pdGlvbgogICogPT09PT09PT09PT0gICAgID09PT09PT09PT09PSAgICA9PT09PT09PT09Ci0gKiAwCQkJCTEgICAgICAgICAgICAgICBJRSBpZGVudGlmaWVyCisgKiAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIElFIGlkZW50aWZpZXIKICAqIDEgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgVHJlYXRtZW50IGJpdCBtYXNrCiAgKgogICogQUNYQmVhY29uRmlsdGVyRW50cnkgKDIyMSkKQEAgLTM4MSw4ICszODEsOCBAQAogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCXU4IG51bV9pZTsKLQl1OCB0YWJsZVtCRUFDT05fRklMVEVSX1RBQkxFX01BWF9TSVpFXTsKIAl1OCBwYWRbM107CisJdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGFjeF9jb25uX21vbml0X3BhcmFtcyB7CkBAIC00MTUsMjMgKzQxNSwxMiBAQAogCXU4IHBhZFszXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgYWN4X3NtYXJ0X3JlZmxleF9zdGF0ZSB7CitzdHJ1Y3QgYWN4X2Rjb19pdHJpbV9wYXJhbXMgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCXU4IGVuYWJsZTsKIAl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzbWFydF9yZWZsZXhfZXJyX3RhYmxlIHsKLQl1OCBsZW47Ci0JczggdXBwZXJfbGltaXQ7Ci0JczggdmFsdWVzWzE0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYWN4X3NtYXJ0X3JlZmxleF9jb25maWdfcGFyYW1zIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlzdHJ1Y3Qgc21hcnRfcmVmbGV4X2Vycl90YWJsZSBlcnJvcl90YWJsZVszXTsKKwlfX2xlMzIgdGltZW91dDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIFBUQV9BTlRFTk5BX1RZUEVfREVGCQkgICgwKQpAQCAtODM3LDYgKzgyNiw5IEBACiAJdTggcmVzZXJ2ZWQ7CiB9OwogCisjZGVmaW5lIEFDWF9UWF9CQVNJQ19SQVRFICAgICAgMAorI2RlZmluZSBBQ1hfVFhfQVBfRlVMTF9SQVRFICAgIDEKKyNkZWZpbmUgQUNYX1RYX1JBVEVfUE9MSUNZX0NOVCAyCiBzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5IHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKQEAgLTg3Nyw4ICs4NjksOCBAQAogCV9fbGUxNiB0eF9jb21wbF90aHJlc2hvbGQ7ICAgLyogbnVtYmVyIG9mIHBhY2tldHMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIEFDWF9SWF9NRU1fQkxPQ0tTICAgICA2NAotI2RlZmluZSBBQ1hfVFhfTUlOX01FTV9CTE9DS1MgNjQKKyNkZWZpbmUgQUNYX1JYX01FTV9CTE9DS1MgICAgIDcwCisjZGVmaW5lIEFDWF9UWF9NSU5fTUVNX0JMT0NLUyA0MAogI2RlZmluZSBBQ1hfVFhfREVTQ1JJUFRPUlMgICAgMzIKICNkZWZpbmUgQUNYX05VTV9TU0lEX1BST0ZJTEVTIDEKIApAQCAtOTY5LDYgKzk2MSwxMyBAQAogCQkJICAgICAgIHVzZWQuICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCitzdHJ1Y3Qgd2wxMjcxX2FjeF9wbV9jb25maWcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCV9fbGUzMiBob3N0X2Nsa19zZXR0bGluZ190aW1lOworCXU4IGhvc3RfZmFzdF93YWtldXBfc3VwcG9ydDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIGVudW0gewogCUFDWF9XQUtFX1VQX0NPTkRJVElPTlMgICAgICA9IDB4MDAwMiwKQEAgLTEwMjcsMTMgKzEwMjYsMTMgQEAKIAlBQ1hfSFRfQlNTX09QRVJBVElPTiAgICAgICAgPSAweDAwNTgsCiAJQUNYX0NPRVhfQUNUSVZJVFkgICAgICAgICAgID0gMHgwMDU5LAogCUFDWF9TRVRfU01BUlRfUkVGTEVYX0RFQlVHICA9IDB4MDA1QSwKLQlBQ1hfU0VUX1NNQVJUX1JFRkxFWF9TVEFURSAgPSAweDAwNUIsCi0JQUNYX1NFVF9TTUFSVF9SRUZMRVhfUEFSQU1TID0gMHgwMDVGLAorCUFDWF9TRVRfRENPX0lUUklNX1BBUkFNUyAgICA9IDB4MDA2MSwKIAlET1QxMV9SWF9NU0RVX0xJRkVfVElNRSAgICAgPSAweDEwMDQsCiAJRE9UMTFfQ1VSX1RYX1BXUiAgICAgICAgICAgID0gMHgxMDBELAogCURPVDExX1JYX0RPVDExX01PREUgICAgICAgICA9IDB4MTAxMiwKIAlET1QxMV9SVFNfVEhSRVNIT0xEICAgICAgICAgPSAweDEwMTMsCiAJRE9UMTFfR1JPVVBfQUREUkVTU19UQkwgICAgID0gMHgxMDE0LAorCUFDWF9QTV9DT05GSUcgICAgICAgICAgICAgICA9IDB4MTAxNiwKIAogCU1BWF9ET1QxMV9JRSA9IERPVDExX0dST1VQX0FERFJFU1NfVEJMLAogCkBAIC0xMDU2LDYgKzEwNTUsNyBAQAogCQkJCSB2b2lkICptY19saXN0LCB1MzIgbWNfbGlzdF9sZW4pOwogaW50IHdsMTI3MV9hY3hfc2VydmljZV9wZXJpb2RfdGltZW91dChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgcnRzX3RocmVzaG9sZCk7CitpbnQgd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZV9maWx0ZXIpOwogaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CkBAIC0xMDY5LDkgKzEwNjksMTIgQEAKIGludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAogCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOwogaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7Ci1pbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZW5hYmxlZF9yYXRlcyk7Ci1pbnQgd2wxMjcxX2FjeF9hY19jZmcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmc24sIHUxNiB0eG9wKTsKK2ludCB3bDEyNzFfYWN4X3RpZF9jZmcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHF1ZXVlX2lkLCB1OCBjaGFubmVsX3R5cGUsCisJCSAgICAgICB1OCB0c2lkLCB1OCBwc19zY2hlbWUsIHU4IGFja19wb2xpY3ksCisJCSAgICAgICB1MzIgYXBzZF9jb25mMCwgdTMyIGFwc2RfY29uZjEpOwogaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CkBAIC0xMDgxLDUgKzEwODQsNiBAQAogaW50IHdsMTI3MV9hY3hfYmV0X2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOwogaW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsIHU4ICphZGRyZXNzLAogCQkJICAgICB1OCB2ZXJzaW9uKTsKK2ludCB3bDEyNzFfYWN4X3BtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAKICNlbmRpZiAvKiBfX1dMMTI3MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCmluZGV4IGI3Yzk2NDUuLjJiZTc2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgogI2luY2x1ZGUgIndsMTI3MV9ib290LmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgogI2luY2x1ZGUgIndsMTI3MV9ldmVudC5oIgogCiBzdGF0aWMgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRfdGFibGVbUEFSVF9UQUJMRV9MRU5dID0gewpAQCAtOTMsMTkgKzk0LDE5IEBACiAJdTMyIGNwdV9jdHJsOwogCiAJLyogMTAuNS4wIHJ1biB0aGUgZmlybXdhcmUgKEkpICovCi0JY3B1X2N0cmwgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wpOworCWNwdV9jdHJsID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wpOwogCiAJLyogMTAuNS4xIHJ1biB0aGUgZmlybXdhcmUgKElJKSAqLwogCWNwdV9jdHJsIHw9IGZsYWc7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9md192ZXJzaW9uKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfc3RhdGljX2RhdGEgc3RhdGljX2RhdGE7CiAKLQl3bDEyNzFfc3BpX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsCi0JCQkmc3RhdGljX2RhdGEsIHNpemVvZihzdGF0aWNfZGF0YSksIGZhbHNlKTsKKwl3bDEyNzFfcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgJnN0YXRpY19kYXRhLCBzaXplb2Yoc3RhdGljX2RhdGEpLAorCQkgICAgZmFsc2UpOwogCiAJc3RybmNweSh3bC0+Y2hpcC5md192ZXIsIHN0YXRpY19kYXRhLmZ3X3ZlcnNpb24sCiAJCXNpemVvZih3bC0+Y2hpcC5md192ZXIpKTsKQEAgLTE2NCw3ICsxNjUsNyBAQAogCQltZW1jcHkoY2h1bmssIHAsIENIVU5LX1NJWkUpOwogCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBjaHVuayAweCVwIHRvIDB4JXgiLAogCQkJICAgICBwLCBhZGRyKTsKLQkJd2wxMjcxX3NwaV93cml0ZSh3bCwgYWRkciwgY2h1bmssIENIVU5LX1NJWkUsIGZhbHNlKTsKKwkJd2wxMjcxX3dyaXRlKHdsLCBhZGRyLCBjaHVuaywgQ0hVTktfU0laRSwgZmFsc2UpOwogCiAJCWNodW5rX251bSsrOwogCX0KQEAgLTE3NSw3ICsxNzYsNyBAQAogCW1lbWNweShjaHVuaywgcCwgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFKTsKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBsYXN0IGNodW5rICglemQgQikgMHglcCB0byAweCV4IiwKIAkJICAgICBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUsIHAsIGFkZHIpOwotCXdsMTI3MV9zcGlfd3JpdGUod2wsIGFkZHIsIGNodW5rLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUsIGZhbHNlKTsKKwl3bDEyNzFfd3JpdGUod2wsIGFkZHIsIGNodW5rLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUsIGZhbHNlKTsKIAogCWtmcmVlKGNodW5rKTsKIAlyZXR1cm4gMDsKQEAgLTIxOSwyMyArMjIwLDE0IEBACiAJc2l6ZV90IG52c19sZW4sIGJ1cnN0X2xlbjsKIAlpbnQgaTsKIAl1MzIgZGVzdF9hZGRyLCB2YWw7Ci0JdTggKm52c19wdHIsICpudnMsICpudnNfYWxpZ25lZDsKKwl1OCAqbnZzX3B0ciwgKm52c19hbGlnbmVkOwogCi0JbnZzID0gd2wtPm52czsKLQlpZiAobnZzID09IE5VTEwpCisJaWYgKHdsLT5udnMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQludnNfcHRyID0gbnZzOwotCi0JbnZzX2xlbiA9IHdsLT5udnNfbGVuOwotCi0JLyogVXBkYXRlIHRoZSBkZXZpY2UgTUFDIGFkZHJlc3MgaW50byB0aGUgbnZzICovCi0JbnZzWzExXSA9IHdsLT5tYWNfYWRkclswXTsKLQludnNbMTBdID0gd2wtPm1hY19hZGRyWzFdOwotCW52c1s2XSA9IHdsLT5tYWNfYWRkclsyXTsKLQludnNbNV0gPSB3bC0+bWFjX2FkZHJbM107Ci0JbnZzWzRdID0gd2wtPm1hY19hZGRyWzRdOwotCW52c1szXSA9IHdsLT5tYWNfYWRkcls1XTsKKwkvKiBvbmx5IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBOVlMgbmVlZHMgdG8gYmUgdXBsb2FkZWQgKi8KKwludnNfbGVuID0gc2l6ZW9mKHdsLT5udnMtPm52cyk7CisJbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52czsKIAogCS8qCiAJICogTGF5b3V0IGJlZm9yZSB0aGUgYWN0dWFsIE5WUyB0YWJsZXM6CkBAIC0yNjUsNyArMjU3LDcgQEAKIAkJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULAogCQkJCSAgICAgIm52cyBidXJzdCB3cml0ZSAweCV4OiAweCV4IiwKIAkJCQkgICAgIGRlc3RfYWRkciwgdmFsKTsKLQkJCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgZGVzdF9hZGRyLCB2YWwpOworCQkJd2wxMjcxX3dyaXRlMzIod2wsIGRlc3RfYWRkciwgdmFsKTsKIAogCQkJbnZzX3B0ciArPSA0OwogCQkJZGVzdF9hZGRyICs9IDQ7CkBAIC0yNzcsNyArMjY5LDcgQEAKIAkgKiBpcyA3IGJ5dGVzIGZ1cnRoZXIuCiAJICovCiAJbnZzX3B0ciArPSA3OwotCW52c19sZW4gLT0gbnZzX3B0ciAtIG52czsKKwludnNfbGVuIC09IG52c19wdHIgLSAodTggKil3bC0+bnZzLT5udnM7CiAJbnZzX2xlbiA9IEFMSUdOKG52c19sZW4sIDQpOwogCiAJLyogRklYTUU6IFRoZSBkcml2ZXIgc2V0cyB0aGUgcGFydGl0aW9uIGhlcmUsIGJ1dCB0aGlzIGlzIG5vdCBuZWVkZWQsCkBAIC0yODYsMTUgKzI3OCwyMCBAQAogCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX1dPUktdKTsKIAogCS8qIENvcHkgdGhlIE5WUyB0YWJsZXMgdG8gYSBuZXcgYmxvY2sgdG8gZW5zdXJlIGFsaWdubWVudCAqLwotCW52c19hbGlnbmVkID0ga21lbWR1cChudnNfcHRyLCBudnNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW52c19hbGlnbmVkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBGSVhNRTogV2UganVtcCAzIG1vcmUgYnl0ZXMgYmVmb3JlIHVwbG9hZGluZyB0aGUgTlZTLiAgSXQgc2VlbXMKKwl0aGF0IG91ciBOVlMgZmlsZXMgaGF2ZSB0aHJlZSBleHRyYSB6ZXJvcyBoZXJlLiAgSSdtIG5vdCBzdXJlIHdoZXRoZXIKKwl0aGUgcHJvYmxlbSBpcyBpbiBvdXIgTlZTIGdlbmVyYXRpb24gb3Igd2Ugc2hvdWxkIHJlYWxseSBqdW1wdCB0aGVzZQorCTMgYnl0ZXMgaGVyZSAqLworCW52c19wdHIgKz0gMzsKKworCW52c19hbGlnbmVkID0ga21lbWR1cChudnNfcHRyLCBudnNfbGVuLCBHRlBfS0VSTkVMKTsgaWYKKwkoIW52c19hbGlnbmVkKSByZXR1cm4gLUVOT01FTTsKIAogCS8qIEFuZCBmaW5hbGx5IHdlIHVwbG9hZCB0aGUgTlZTIHRhYmxlcyAqLwogCS8qIEZJWE1FOiBJbiB3bDEyNzEsIHdlIHVwbG9hZCBldmVyeXRoaW5nIGF0IG9uY2UuCiAJICAgTm8gZW5kaWFubmVzcyBoYW5kbGluZyBuZWVkZWQgaGVyZT8hIFRoZSByZWYgZHJpdmVyIGRvZXNuJ3QgZG8KIAkgICBhbnl0aGluZyBhYm91dCBpdCBhdCB0aGlzIHBvaW50ICovCi0Jd2wxMjcxX3NwaV93cml0ZSh3bCwgQ01EX01CT1hfQUREUkVTUywgbnZzX2FsaWduZWQsIG52c19sZW4sIGZhbHNlKTsKKwl3bDEyNzFfd3JpdGUod2wsIENNRF9NQk9YX0FERFJFU1MsIG52c19hbGlnbmVkLCBudnNfbGVuLCBmYWxzZSk7CiAKIAlrZnJlZShudnNfYWxpZ25lZCk7CiAJcmV0dXJuIDA7CkBAIC0zMDMsOSArMzAwLDkgQEAKIHN0YXRpYyB2b2lkIHdsMTI3MV9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCWVuYWJsZV9pcnEod2wtPmlycSk7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAotCQkJICAgV0wxMjcxX0FDWF9JTlRSX0FMTCAmIH4oV0wxMjcxX0lOVFJfTUFTSykpOwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEhJX0NGRywgSElfQ0ZHX0RFRl9WQUwpOwogfQogCiBzdGF0aWMgaW50IHdsMTI3MV9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCkBAIC0zMTQsMTMgKzMxMSwxMiBAQAogCXUzMiBib290X2RhdGE7CiAKIAkvKiBwZXJmb3JtIHNvZnQgcmVzZXQgKi8KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQsCi0JCQkgICBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCwgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCk7CiAKIAkvKiBTT0ZUX1JFU0VUIGlzIHNlbGYgY2xlYXJpbmcgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoU09GVF9SRVNFVF9NQVhfVElNRSk7CiAJd2hpbGUgKDEpIHsKLQkJYm9vdF9kYXRhID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQpOworCQlib290X2RhdGEgPSB3bDEyNzFfcmVhZDMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUKTsKIAkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJzb2Z0IHJlc2V0IGJvb3RkYXRhIDB4JXgiLCBib290X2RhdGEpOwogCQlpZiAoKGJvb3RfZGF0YSAmIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpID09IDApCiAJCQlicmVhazsKQEAgLTMzNiwxMCArMzMyLDEwIEBACiAJfQogCiAJLyogZGlzYWJsZSBSeC9UeCAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgRU5BQkxFLCAweDApOworCXdsMTI3MV93cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7CiAKIAkvKiBkaXNhYmxlIGF1dG8gY2FsaWJyYXRpb24gb24gc3RhcnQqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgU1BBUkVfQTIsIDB4ZmZmZik7CisJd2wxMjcxX3dyaXRlMzIod2wsIFNQQVJFX0EyLCAweGZmZmYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTEsNyArMzQ3LDcgQEAKIAogCXdsMTI3MV9ib290X3NldF9lY3B1X2N0cmwod2wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKIAotCWNoaXBfaWQgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKwljaGlwX2lkID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBhZnRlciBmaXJtd2FyZSBib290OiAweCV4IiwgY2hpcF9pZCk7CiAKQEAgLTM2NCw4ICszNjAsNyBAQAogCWxvb3AgPSAwOwogCXdoaWxlIChsb29wKysgPCBJTklUX0xPT1ApIHsKIAkJdWRlbGF5KElOSVRfTE9PUF9ERUxBWSk7Ci0JCWludGVycnVwdCA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLAotCQkJCQkgICAgICBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7CisJCWludGVycnVwdCA9IHdsMTI3MV9yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKIAogCQlpZiAoaW50ZXJydXB0ID09IDB4ZmZmZmZmZmYpIHsKIAkJCXdsMTI3MV9lcnJvcigiZXJyb3IgcmVhZGluZyBoYXJkd2FyZSBjb21wbGV0ZSAiCkBAIC0zNzQsOCArMzY5LDggQEAKIAkJfQogCQkvKiBjaGVjayB0aGF0IEFDWF9JTlRSX0lOSVRfQ09NUExFVEUgaXMgZW5hYmxlZCAqLwogCQllbHNlIGlmIChpbnRlcnJ1cHQgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkgewotCQkJd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0JCQkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKTsKKwkJCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCisJCQkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzg3LDEwICszODIsMTAgQEAKIAl9CiAKIAkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGNvbW1hbmQgbWFpbCBib3ggKi8KLQl3bC0+Y21kX2JveF9hZGRyID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIFJFR19DT01NQU5EX01BSUxCT1hfUFRSKTsKKwl3bC0+Y21kX2JveF9hZGRyID0gd2wxMjcxX3JlYWQzMih3bCwgUkVHX0NPTU1BTkRfTUFJTEJPWF9QVFIpOwogCiAJLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBldmVudCBtYWlsIGJveCAqLwotCXdsLT5ldmVudF9ib3hfYWRkciA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOworCXdsLT5ldmVudF9ib3hfYWRkciA9IHdsMTI3MV9yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CiAKIAkvKiBzZXQgdGhlIHdvcmtpbmcgcGFydGl0aW9uIHRvIGl0cyAicnVubmluZyIgbW9kZSBvZmZzZXQgKi8KIAl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9XT1JLXSk7CkBAIC00NjMsOSArNDU4LDkgQEAKIAkJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE9DUF9SRUdfQ0xLX1BPTEFSSVRZLCB2YWwpOwogCX0KIAotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgUExMX1BBUkFNRVRFUlMsIGNsayk7CisJd2wxMjcxX3dyaXRlMzIod2wsIFBMTF9QQVJBTUVURVJTLCBjbGspOwogCi0JcGF1c2UgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOworCXBhdXNlID0gd2wxMjcxX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJwYXVzZTEgMHgleCIsIHBhdXNlKTsKIApAQCAtNDc0LDEwICs0NjksMTAgQEAKIAkJCQkJICAgKiAweDNmZiAobWFnaWMgbnVtYmVyICkuICBIb3cgZG9lcwogCQkJCQkgICAqIHRoaXMgd29yaz8hICovCiAJcGF1c2UgfD0gV1VfQ09VTlRFUl9QQVVTRV9WQUw7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBXVV9DT1VOVEVSX1BBVVNFLCBwYXVzZSk7CisJd2wxMjcxX3dyaXRlMzIod2wsIFdVX0NPVU5URVJfUEFVU0UsIHBhdXNlKTsKIAogCS8qIENvbnRpbnVlIHRoZSBFTFAgd2FrZSB1cCBzZXF1ZW5jZSAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgV0VMUF9BUk1fQ09NTUFORCwgV0VMUF9BUk1fQ09NTUFORF9WQUwpOworCXdsMTI3MV93cml0ZTMyKHdsLCBXRUxQX0FSTV9DT01NQU5ELCBXRUxQX0FSTV9DT01NQU5EX1ZBTCk7CiAJdWRlbGF5KDUwMCk7CiAKIAl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9EUlBXXSk7CkBAIC00ODcsMTggKzQ4MiwxOCBAQAogCSAgIGJlZm9yZSB0YWtpbmcgRFJQdyBvdXQgb2YgcmVzZXQgKi8KIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiRFJQV19TQ1JBVENIX1NUQVJUICUwOHgiLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOwotCWNsayA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCWNsayA9IHdsMTI3MV9yZWFkMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCk7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNsazIgMHgleCIsIGNsayk7CiAKIAkvKiAyICovCiAJY2xrIHw9IChSRUZfQ0xPQ0sgPDwgMSkgPDwgNDsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCwgY2xrKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJULCBjbGspOwogCiAJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgV0wxMjcxX0FDWF9JTlRSX0FMTCk7CiAKIAlyZXQgPSB3bDEyNzFfYm9vdF9zb2Z0X3Jlc2V0KHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTUxMywyMyArNTA4LDIyIEBACiAJICogQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyAqLwogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyIpOwogCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHLAotCQkJICAgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIEFDWF9FRVBST01MRVNTX0lORF9SRUcpOwogCi0JdG1wID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIENISVBfSURfQik7CisJdG1wID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4IiwgdG1wKTsKIAogCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCi0JdG1wID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIFNDUl9QQUQyKTsKKwl0bXAgPSB3bDEyNzFfcmVhZDMyKHdsLCBTQ1JfUEFEMik7CiAKIAlyZXQgPSB3bDEyNzFfYm9vdF93cml0ZV9pcnFfcG9sYXJpdHkod2wpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBOZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyByZWFsbHkgd2hhdCB3ZSB3YW50ICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAotCQkJICAgV0wxMjcxX0FDWF9BTExfRVZFTlRTX1ZFQ1RPUik7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKIAogCS8qIFdMMTI3MTogVGhlIHJlZmVyZW5jZSBkcml2ZXIgc2tpcHMgc3RlcHMgNyB0byAxMCAoanVtcHMgZGlyZWN0bHkKIAkgKiB0byB1cGxvYWRfZncpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYwppbmRleCBjMzM4NWIzLi4zNmE2NGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ3bDEyNzEuaCIKICNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgogI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKICNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCkBAIC01NywxMyArNTgsMTMgQEAKIAogCVdBUk5fT04obGVuICUgNCAhPSAwKTsKIAotCXdsMTI3MV9zcGlfd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuLCBmYWxzZSk7CisJd2wxMjcxX3dyaXRlKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBidWYsIGxlbiwgZmFsc2UpOwogCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfQ01EKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0NNRCk7CiAKIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0NPTU1BTkRfVElNRU9VVCk7CiAKLQlpbnRyID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwogCXdoaWxlICghKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJd2wxMjcxX2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKQEAgLTczLDEzICs3NCwxMyBAQAogCiAJCW1zbGVlcCgxKTsKIAotCQlpbnRyID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwkJaW50ciA9IHdsMTI3MV9yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKIAl9CiAKIAkvKiByZWFkIGJhY2sgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBjb21tYW5kICovCiAJaWYgKHJlc19sZW4gPT0gMCkKIAkJcmVzX2xlbiA9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIpOwotCXdsMTI3MV9zcGlfcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgY21kLCByZXNfbGVuLCBmYWxzZSk7CisJd2wxMjcxX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgcmVzX2xlbiwgZmFsc2UpOwogCiAJc3RhdHVzID0gbGUxNl90b19jcHUoY21kLT5zdGF0dXMpOwogCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CkBAIC04Nyw4ICs4OCw4IEBACiAJCXJldCA9IC1FSU87CiAJfQogCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0JCQkgICBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAorCQkgICAgICAgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMTkxLDIzICsxOTIsMTkgQEAKIGludCB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9nZW5lcmFsX3Bhcm1zX2NtZCAqZ2VuX3Bhcm1zOwotCXN0cnVjdCBjb25mX2dlbmVyYWxfcGFybXMgKmcgPSAmd2wtPmNvbmYuaW5pdC5nZW5wYXJhbTsKIAlpbnQgcmV0OwogCisJaWYgKCF3bC0+bnZzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWdlbl9wYXJtcyA9IGt6YWxsb2Moc2l6ZW9mKCpnZW5fcGFybXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdlbl9wYXJtcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlnZW5fcGFybXMtPnRlc3QuaWQgPSBURVNUX0NNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNOwogCi0JZ2VuX3Bhcm1zLT5yZWZfY2xrID0gZy0+cmVmX2NsazsKLQlnZW5fcGFybXMtPnNldHRsaW5nX3RpbWUgPSBnLT5zZXR0bGluZ190aW1lOwotCWdlbl9wYXJtcy0+Y2xrX3ZhbGlkX29uX3dha2V1cCA9IGctPmNsa192YWxpZF9vbl93YWtldXA7Ci0JZ2VuX3Bhcm1zLT5kYzJkY21vZGUgPSBnLT5kYzJkY21vZGU7Ci0JZ2VuX3Bhcm1zLT5zaW5nbGVfZHVhbF9iYW5kID0gZy0+c2luZ2xlX2R1YWxfYmFuZDsKLQlnZW5fcGFybXMtPnR4X2JpcF9mZW1fYXV0b2RldGVjdCA9IGctPnR4X2JpcF9mZW1fYXV0b2RldGVjdDsKLQlnZW5fcGFybXMtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0gZy0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7Ci0JZ2VuX3Bhcm1zLT5zZXR0aW5ncyA9IGctPnNldHRpbmdzOworCW1lbWNweShnZW5fcGFybXMtPnBhcmFtcywgd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXMsCisJICAgICAgIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRSk7CiAKIAlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGdlbl9wYXJtcywgc2l6ZW9mKCpnZW5fcGFybXMpLCAwKTsKIAlpZiAocmV0IDwgMCkKQEAgLTIyMCw4ICsyMTcsMTEgQEAKIGludCB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kICpyYWRpb19wYXJtczsKLQlzdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyAqciA9ICZ3bC0+Y29uZi5pbml0LnJhZGlvcGFyYW07Ci0JaW50IGksIHJldDsKKwlzdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyAqcnBhcmFtID0gJndsLT5jb25mLmluaXQucmFkaW9wYXJhbTsKKwlpbnQgcmV0OworCisJaWYgKCF3bC0+bnZzKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYWRpb19wYXJtcykKQEAgLTIyOSw2MCArMjI5LDEzIEBACiAKIAlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOwogCi0JLyogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgKi8KLQlyYWRpb19wYXJtcy0+cnhfdHJhY2VfbG9zcyA9IHItPnJ4X3RyYWNlX2xvc3M7Ci0JcmFkaW9fcGFybXMtPnR4X3RyYWNlX2xvc3MgPSByLT50eF90cmFjZV9sb3NzOwotCW1lbWNweShyYWRpb19wYXJtcy0+cnhfcnNzaV9hbmRfcHJvY19jb21wZW5zLAotCSAgICAgICByLT5yeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnMsCi0JICAgICAgIENPTkZfUlNTSV9BTkRfUFJPQ0VTU19DT01QRU5TQVRJT05fU0laRSk7CisJbWVtY3B5KHJhZGlvX3Bhcm1zLT5zdGF0X3JhZGlvX3BhcmFtcywgd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXMsCisJICAgICAgIFdMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRSk7CisJbWVtY3B5KHJhZGlvX3Bhcm1zLT5keW5fcmFkaW9fcGFyYW1zLAorCSAgICAgICB3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zW3JwYXJhbS0+ZmVtXSwKKwkgICAgICAgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUpOwogCi0JbWVtY3B5KHJhZGlvX3Bhcm1zLT5yeF90cmFjZV9sb3NzXzUsIHItPnJ4X3RyYWNlX2xvc3NfNSwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfdHJhY2VfbG9zc181LCByLT50eF90cmFjZV9sb3NzXzUsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181KTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc181LAotCSAgICAgICByLT5yeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNfNSwKLQkgICAgICAgQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFKTsKLQotCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLwotCXJhZGlvX3Bhcm1zLT50eF9yZWZfcGRfdm9sdGFnZSA9IGNwdV90b19sZTE2KHItPnR4X3JlZl9wZF92b2x0YWdlKTsKLQlyYWRpb19wYXJtcy0+dHhfcmVmX3Bvd2VyID0gci0+dHhfcmVmX3Bvd2VyOwotCXJhZGlvX3Bhcm1zLT50eF9vZmZzZXRfZGIgPSByLT50eF9vZmZzZXRfZGI7Ci0KLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X3JhdGVfbGltaXRzX25vcm1hbCwgci0+dHhfcmF0ZV9saW1pdHNfbm9ybWFsLAotCSAgICAgICBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9yYXRlX2xpbWl0c19kZWdyYWRlZCwgci0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWQsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKLQotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfY2hhbm5lbF9saW1pdHNfMTFiLCByLT50eF9jaGFubmVsX2xpbWl0c18xMWIsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNCk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9jaGFubmVsX2xpbWl0c19vZmRtLCByLT50eF9jaGFubmVsX2xpbWl0c19vZmRtLAotCSAgICAgICBDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzQpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcGR2X3JhdGVfb2Zmc2V0cywgci0+dHhfcGR2X3JhdGVfb2Zmc2V0cywKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfaWJpYXMsIHItPnR4X2liaWFzLCBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7Ci0KLQlyYWRpb19wYXJtcy0+cnhfZmVtX2luc2VydGlvbl9sb3NzID0gci0+cnhfZmVtX2luc2VydGlvbl9sb3NzOwotCi0JZm9yIChpID0gMDsgaSA8IENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181OyBpKyspCi0JCXJhZGlvX3Bhcm1zLT50eF9yZWZfcGRfdm9sdGFnZV81W2ldID0KLQkJCWNwdV90b19sZTE2KHItPnR4X3JlZl9wZF92b2x0YWdlXzVbaV0pOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmVmX3Bvd2VyXzUsIHItPnR4X3JlZl9wb3dlcl81LAotCSAgICAgICBDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNSk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9vZmZzZXRfZGJfNSwgci0+dHhfb2Zmc2V0X2RiXzUsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181KTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X3JhdGVfbGltaXRzX25vcm1hbF81LAotCSAgICAgICByLT50eF9yYXRlX2xpbWl0c19ub3JtYWxfNSwgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNSwKLQkgICAgICAgci0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNSwgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfY2hhbm5lbF9saW1pdHNfb2ZkbV81LAotCSAgICAgICByLT50eF9jaGFubmVsX2xpbWl0c19vZmRtXzUsIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzUpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcGR2X3JhdGVfb2Zmc2V0c181LCByLT50eF9wZHZfcmF0ZV9vZmZzZXRzXzUsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X2liaWFzXzUsIHItPnR4X2liaWFzXzUsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnJ4X2ZlbV9pbnNlcnRpb25fbG9zc181LAotCSAgICAgICByLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3NfNSwgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUpOworCS8qIEZJWE1FOiBjdXJyZW50IE5WUyBpcyBtaXNzaW5nIDVHSHogcGFyYW1ldGVycyAqLwogCiAJd2wxMjcxX2R1bXAoREVCVUdfQ01ELCAiVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU06ICIsCiAJCSAgICByYWRpb19wYXJtcywgc2l6ZW9mKCpyYWRpb19wYXJtcykpOwpAQCAtMzExLDE5ICsyNjQsNiBAQAogCQkJZG9fY2FsID0gZmFsc2U7CiAJfQogCi0JLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kLCBiZWNhdXNlIHdpdGggdGhlIGN1cnJlbnQgc3RhY2ssIHdlCi0JICogY2Fubm90IGtub3cgd2hlbiB3ZSBoYXZlIGRpc2Fzc29jaWF0ZWQuICBTbywgaWYgd2UgaGF2ZSBhbHJlYWR5Ci0JICogam9pbmVkLCB3ZSBkaXNjb25uZWN0IGJlZm9yZSBqb2luaW5nIGFnYWluLiAqLwotCWlmICh3bC0+am9pbmVkKSB7Ci0JCXJldCA9IHdsMTI3MV9jbWRfZGlzY29ubmVjdCh3bCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBkaXNjb25uZWN0IGJlZm9yZSByZWpvaW5pbmciKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJd2wtPmpvaW5lZCA9IGZhbHNlOwotCX0KLQogCWpvaW4gPSBremFsbG9jKHNpemVvZigqam9pbiksIEdGUF9LRVJORUwpOwogCWlmICgham9pbikgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzg4LDggKzMyOCw2IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0Jd2wtPmpvaW5lZCA9IHRydWU7Ci0KIAkvKgogCSAqIHVnbHkgaGFjazogd2Ugc2hvdWxkIHdhaXQgZm9yIEpPSU5fRVZFTlRfQ09NUExFVEVfSUQgYnV0IHRvCiAJICogc2ltcGxpZnkgbG9ja2luZyB3ZSBqdXN0IHNsZWVwIGluc3RlYWQsIGZvciBub3cKQEAgLTQ4Nyw3ICs0MjUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgd2wxMjcxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQoraW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgY21kX2VuYWJsZWRpc2FibGVfcGF0aCAqY21kOwogCWludCByZXQ7CkBAIC01MDEsNyArNDM5LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JY21kLT5jaGFubmVsID0gY2hhbm5lbDsKKwkvKiB0aGUgY2hhbm5lbCBoZXJlIGlzIG9ubHkgdXNlZCBmb3IgY2FsaWJyYXRpb24sIHNvIGhhcmRjb2RlZCB0byAxICovCisJY21kLT5jaGFubmVsID0gMTsKIAogCWlmIChlbmFibGUpIHsKIAkJY21kX3J4ID0gQ01EX0VOQUJMRV9SWDsKQEAgLTUxNCwyOSArNDUzLDI5IEBACiAJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBjbWRfcngsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoInJ4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAotCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJyeCAlcyBjbWQgY2hhbm5lbCAlZCIsCi0JCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKIAogCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3R4LCBjbWQsIHNpemVvZigqY21kKSwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKLQkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNtZC0+Y2hhbm5lbCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ0eCAlcyBjbWQgY2hhbm5lbCAlZCIsCi0JCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKIAogb3V0OgogCWtmcmVlKGNtZCk7CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSkKK2ludCB3bDEyNzFfY21kX3BzX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHBzX21vZGUsIGJvb2wgc2VuZCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF9wc19wYXJhbXMgKnBzX3BhcmFtcyA9IE5VTEw7CiAJaW50IHJldCA9IDA7CkBAIC01NTcsNyArNDk2LDcgQEAKIAl9CiAKIAlwc19wYXJhbXMtPnBzX21vZGUgPSBwc19tb2RlOwotCXBzX3BhcmFtcy0+c2VuZF9udWxsX2RhdGEgPSAxOworCXBzX3BhcmFtcy0+c2VuZF9udWxsX2RhdGEgPSBzZW5kOwogCXBzX3BhcmFtcy0+cmV0cmllcyA9IDU7CiAJcHNfcGFyYW1zLT5oYW5nX292ZXJfcGVyaW9kID0gMTI4OwogCXBzX3BhcmFtcy0+bnVsbF9kYXRhX3JhdGUgPSBjcHVfdG9fbGUzMigxKTsgLyogMSBNYnBzICovCkBAIC02MzYsNyArNTc1LDcgQEAKIAljaGFubmVscyA9IHdsLT5ody0+d2lwaHktPmJhbmRzW2llZWVfYmFuZF0tPmNoYW5uZWxzOwogCW5fY2ggPSB3bC0+aHctPndpcGh5LT5iYW5kc1tpZWVlX2JhbmRdLT5uX2NoYW5uZWxzOwogCi0JaWYgKHdsLT5zY2FubmluZykKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKQEAgLTcxMSw3ICs2NTAsNyBAQAogCiAJd2wxMjcxX2R1bXAoREVCVUdfU0NBTiwgIlNDQU46ICIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIAotCXdsLT5zY2FubmluZyA9IHRydWU7CisJc2V0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncyk7CiAJaWYgKHdsMTI3MV8xMWFfZW5hYmxlZCgpKSB7CiAJCXdsLT5zY2FuLnN0YXRlID0gYmFuZDsKIAkJaWYgKGJhbmQgPT0gV0wxMjcxX1NDQU5fQkFORF9EVUFMKSB7CkBAIC03MjksNyArNjY4LDcgQEAKIAlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX2Vycm9yKCJTQ0FOIGZhaWxlZCIpOwotCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMDAzLDcgKzk0Miw3IEBACiAJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX0tFWVMsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfd2FybmluZygiY291bGQgbm90IHNldCBrZXlzIik7Ci0JCWdvdG8gb3V0OworCWdvdG8gb3V0OwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKaW5kZXggYjRmYTRhYy4uMmRjMDZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oCkBAIC0zNyw4ICszNyw4IEBACiBpbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpOwogaW50IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKIGludCB3bDEyNzFfY21kX2NvbmZpZ3VyZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBjaGFubmVsLCBib29sIGVuYWJsZSk7Ci1pbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlKTsKK2ludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOworaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSwgYm9vbCBzZW5kKTsKIGludCB3bDEyNzFfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgYWRkciwgdm9pZCAqYW5zd2VyLAogCQkJICAgc2l6ZV90IGxlbik7CiBpbnQgd2wxMjcxX2NtZF9zY2FuKHN0cnVjdCB3bDEyNzEgKndsLCB1OCAqc3NpZCwgc2l6ZV90IGxlbiwKQEAgLTQyOCw2NyArNDI4LDI0IEBACiAKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OwogCi0JdTggcmVmX2NsazsKLQl1OCBzZXR0bGluZ190aW1lOwotCXU4IGNsa192YWxpZF9vbl93YWtldXA7Ci0JdTggZGMyZGNtb2RlOwotCXU4IHNpbmdsZV9kdWFsX2JhbmQ7Ci0KLQl1OCB0eF9iaXBfZmVtX2F1dG9kZXRlY3Q7Ci0JdTggdHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7Ci0JdTggc2V0dGluZ3M7CisJdTggcGFyYW1zW1dMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRV07CisJczggcmVzZXJ2ZWRbMjNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgV0wxMjcxX1NUQVRfUkFESU9fUEFSQU1TXzVfU0laRSAgICAyOQorI2RlZmluZSBXTDEyNzFfRFlOX1JBRElPX1BBUkFNU181X1NJWkUgICAgMTA0CisKIHN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kIHsKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwogCiAJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKIAotCS8qIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzICovCi0JLyogMi40R0h6ICovCi0JdTggcnhfdHJhY2VfbG9zczsKLQl1OCB0eF90cmFjZV9sb3NzOwotCXM4IHJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc1tDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkVdOworCXU4IHN0YXRfcmFkaW9fcGFyYW1zW1dMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRV07CisJdTggc3RhdF9yYWRpb19wYXJhbXNfNVtXTDEyNzFfU1RBVF9SQURJT19QQVJBTVNfNV9TSVpFXTsKIAotCS8qIDVHSHogKi8KLQl1OCByeF90cmFjZV9sb3NzXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXU4IHR4X3RyYWNlX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JczggcnhfcnNzaV9hbmRfcHJvY19jb21wZW5zXzVbQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFXTsKLQotCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLwotCS8qIDIuNEdIeiAqLwotCV9fbGUxNiB0eF9yZWZfcGRfdm9sdGFnZTsKLQlzOCAgdHhfcmVmX3Bvd2VyOwotCXM4ICB0eF9vZmZzZXRfZGI7Ci0KLQlzOCAgdHhfcmF0ZV9saW1pdHNfbm9ybWFsW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQlzOCAgdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JczggIHR4X2NoYW5uZWxfbGltaXRzXzExYltDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOwotCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtW0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07Ci0JczggIHR4X3Bkdl9yYXRlX29mZnNldHNbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JdTggIHR4X2liaWFzW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQl1OCAgcnhfZmVtX2luc2VydGlvbl9sb3NzOwotCi0JdTggcGFkZGluZzI7Ci0KLQkvKiA1R0h6ICovCi0JX19sZTE2IHR4X3JlZl9wZF92b2x0YWdlXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXM4ICB0eF9yZWZfcG93ZXJfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JczggIHR4X29mZnNldF9kYl81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQotCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0JczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JczggIHR4X2NoYW5uZWxfbGltaXRzX29mZG1fNVtDT05GX05VTUJFUl9PRl9DSEFOTkVMU181XTsKLQlzOCAgdHhfcGR2X3JhdGVfb2Zmc2V0c181W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQotCS8qIEZJWE1FOiB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlcyBmb3IgMi40R0h6ICovCi0JczggIHR4X2liaWFzXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCXM4ICByeF9mZW1faW5zZXJ0aW9uX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0KLQl1OCBwYWRkaW5nM1syXTsKKwl1OCBkeW5fcmFkaW9fcGFyYW1zW1dMMTI3MV9OVlNfRFlOX1JBRElPX1BBUkFNU19TSVpFXTsKKwl1OCByZXNlcnZlZDsKKwl1OCBkeW5fcmFkaW9fcGFyYW1zXzVbV0wxMjcxX0RZTl9SQURJT19QQVJBTVNfNV9TSVpFXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfY2hhbm5lbF90dW5lIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY29uZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmgKaW5kZXggNTY1MzczZS4uNmY5ZTc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmgKQEAgLTI1OCw3ICsyNTgsOCBAQAogI2RlZmluZSBDT05GX1RYX01BWF9SQVRFX0NMQVNTRVMgICAgICAgOAogCiAjZGVmaW5lIENPTkZfVFhfUkFURV9NQVNLX1VOU1BFQ0lGSUVEICAwCi0jZGVmaW5lIENPTkZfVFhfUkFURV9NQVNLX0FMTCAgICAgICAgICAweDFlZmYKKyNkZWZpbmUgQ09ORl9UWF9SQVRFX01BU0tfQkFTSUMgICAgICAgIChDT05GX0hXX0JJVF9SQVRFXzFNQlBTIHwgXAorCQkJCQlDT05GX0hXX0JJVF9SQVRFXzJNQlBTKQogI2RlZmluZSBDT05GX1RYX1JBVEVfUkVUUllfTElNSVQgICAgICAgMTAKIAogc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyB7CkBAIC03MjIsMzEgKzcyMyw2IEBACiAJdTggcHNtX2VudHJ5X3JldHJpZXM7CiB9OwogCi0jZGVmaW5lIENPTkZfU1JfRVJSX1RCTF9NQVhfVkFMVUVTICAgMTQKLQotc3RydWN0IGNvbmZfbWFydF9yZWZsZXhfZXJyX3RhYmxlIHsKLQkvKgotCSAqIExlbmd0aCBvZiB0aGUgZXJyb3IgdGFibGUgdmFsdWVzIHRhYmxlLgotCSAqCi0JICogUmFuZ2U6IDAgLSBDT05GX1NSX0VSUl9UQkxfTUFYX1ZBTFVFUwotCSAqLwotCXU4IGxlbjsKLQotCS8qCi0JICogU21hcnQgUmVmbGV4IGVycm9yIHRhYmxlIHVwcGVyIGxpbWl0LgotCSAqCi0JICogUmFuZ2U6IHM4Ci0JICovCi0JczggdXBwZXJfbGltaXQ7Ci0KLQkvKgotCSAqIFNtYXJ0IFJlZmxleCBlcnJvciB0YWJsZSB2YWx1ZXMuCi0JICoKLQkgKiBSYW5nZTogczgKLQkgKi8KLQlzOCB2YWx1ZXNbQ09ORl9TUl9FUlJfVEJMX01BWF9WQUxVRVNdOwotfTsKLQogZW51bSB7CiAJQ09ORl9SRUZfQ0xLXzE5XzJfRSwKIAlDT05GX1JFRl9DTEtfMjZfRSwKQEAgLTc1OSw2NCArNzM1LDYgQEAKIAlDT05GX0RVQUxfQkFORAogfTsKIAotc3RydWN0IGNvbmZfZ2VuZXJhbF9wYXJtcyB7Ci0JLyoKLQkgKiBSRiBSZWZlcmVuY2UgQ2xvY2sgdHlwZSAvIHNwZWVkCi0JICoKLQkgKiBSYW5nZTogQ09ORl9SRUZfQ0xLXyoKLQkgKi8KLQl1OCByZWZfY2xrOwotCi0JLyoKLQkgKiBTZXR0bGluZyB0aW1lIG9mIHRoZSByZWZlcmVuY2UgY2xvY2sgYWZ0ZXIgYm9vdC4KLQkgKgotCSAqIFJhbmdlOiB1OAotCSAqLwotCXU4IHNldHRsaW5nX3RpbWU7Ci0KLQkvKgotCSAqIEZsYWcgZGVmaW5pbmcgd2hldGhlciBjbG9jayBpcyB2YWxpZCBvbiB3YWtldXAuCi0JICoKLQkgKiBSYW5nZTogMCAtIG5vdCB2YWxpZCBvbiB3YWtldXAsIDEgLSB2YWxpZCBvbiB3YWtldXAKLQkgKi8KLQl1OCBjbGtfdmFsaWRfb25fd2FrZXVwOwotCi0JLyoKLQkgKiBEQy10by1EQyBtb2RlLgotCSAqCi0JICogUmFuZ2U6IFVua25vd24KLQkgKi8KLQl1OCBkYzJkY21vZGU7Ci0KLQkvKgotCSAqIEZsYWcgZGVmaW5pbmcgd2hldGhlciB1c2VkIGFzIHNpbmdsZSBvciBkdWFsLWJhbmQuCi0JICoKLQkgKiBSYW5nZTogQ09ORl9TSU5HTEVfQkFORCwgQ09ORl9EVUFMX0JBTkQKLQkgKi8KLQl1OCBzaW5nbGVfZHVhbF9iYW5kOwotCi0JLyoKLQkgKiBUWCBiaXAgZmVtIGF1dG9kZXRlY3QgZmxhZy4KLQkgKgotCSAqIFJhbmdlOiBVbmtub3duCi0JICovCi0JdTggdHhfYmlwX2ZlbV9hdXRvZGV0ZWN0OwotCi0JLyoKLQkgKiBUWCBiaXAgZ2VtIG1hbnVmYWN0dXJlci4KLQkgKgotCSAqIFJhbmdlOiBVbmtub3duCi0JICovCi0JdTggdHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7Ci0KLQkvKgotCSAqIFNldHRpbmdzIGZsYWdzLgotCSAqCi0JICogUmFuZ2U6IFVua25vd24KLQkgKi8KLQl1OCBzZXR0aW5nczsKLX07Ci0KICNkZWZpbmUgQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFIDE1CiAjZGVmaW5lIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181ICA3CiAjZGVmaW5lIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTICA2CkBAIC04MjUsOTUgKzc0Myw1MyBAQAogCiBzdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyB7CiAJLyoKLQkgKiBTdGF0aWMgcmFkaW8gcGFyYW1ldGVycyBmb3IgMi40R0h6CisJICogRkVNIHBhcmFtZXRlciBzZXQgdG8gdXNlCiAJICoKLQkgKiBSYW5nZTogdW5rbm93bgorCSAqIFJhbmdlOiAwIG9yIDEKIAkgKi8KLQl1OCByeF90cmFjZV9sb3NzOwotCXU4IHR4X3RyYWNlX2xvc3M7Ci0JczggcnhfcnNzaV9hbmRfcHJvY19jb21wZW5zW0NPTkZfUlNTSV9BTkRfUFJPQ0VTU19DT01QRU5TQVRJT05fU0laRV07Ci0KLQkvKgotCSAqIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzIGZvciA1R0h6Ci0JICoKLQkgKiBSYW5nZTogdW5rbm93bgotCSAqLwotCXU4IHJ4X3RyYWNlX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JdTggdHhfdHJhY2VfbG9zc181W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQlzOCByeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNfNVtDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkVdOwotCi0JLyoKLQkgKiBEeW5hbWljIHJhZGlvIHBhcmFtZXRlcnMgZm9yIDIuNEdIegotCSAqCi0JICogUmFuZ2U6IHVua25vd24KLQkgKi8KLQlzMTYgdHhfcmVmX3BkX3ZvbHRhZ2U7Ci0JczggIHR4X3JlZl9wb3dlcjsKLQlzOCAgdHhfb2Zmc2V0X2RiOwotCi0JczggIHR4X3JhdGVfbGltaXRzX25vcm1hbFtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0JczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQotCXM4ICB0eF9jaGFubmVsX2xpbWl0c18xMWJbQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfMl80XTsKLQlzOCAgdHhfY2hhbm5lbF9saW1pdHNfb2ZkbVtDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOwotCXM4ICB0eF9wZHZfcmF0ZV9vZmZzZXRzW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQotCXU4ICB0eF9pYmlhc1tDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0JdTggIHJ4X2ZlbV9pbnNlcnRpb25fbG9zczsKLQotCS8qCi0JICogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzIGZvciA1R0h6Ci0JICoKLQkgKiBSYW5nZTogdW5rbm93bgotCSAqLwotCXMxNiB0eF9yZWZfcGRfdm9sdGFnZV81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQlzOCAgdHhfcmVmX3Bvd2VyXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXM4ICB0eF9vZmZzZXRfZGJfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0KLQlzOCAgdHhfcmF0ZV9saW1pdHNfbm9ybWFsXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCXM4ICB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQotCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtXzVbQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfNV07Ci0JczggIHR4X3Bkdl9yYXRlX29mZnNldHNfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0KLQkvKiBGSVhNRTogdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdHlwZXMgZm9yIDIuNEdIeiAqLwotCXM4ICB0eF9pYmlhc181W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQlzOCAgcnhfZmVtX2luc2VydGlvbl9sb3NzXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXU4IGZlbTsKIH07CiAKLSNkZWZpbmUgQ09ORl9TUl9FUlJfVEJMX0NPVU5UICAgICAgICAzCi0KIHN0cnVjdCBjb25mX2luaXRfc2V0dGluZ3MgewogCS8qCi0JICogQ29uZmlndXJlIFNtYXJ0IFJlZmxleCBlcnJvciB0YWJsZSB2YWx1ZXMuCi0JICovCi0Jc3RydWN0IGNvbmZfbWFydF9yZWZsZXhfZXJyX3RhYmxlIHNyX2Vycl90YmxbQ09ORl9TUl9FUlJfVEJMX0NPVU5UXTsKLQotCS8qCi0JICogU21hcnQgUmVmbGV4IGVuYWJsZSBmbGFnLgotCSAqCi0JICogUmFuZ2U6IDEgLSBTbWFydCBSZWZsZXggZW5hYmxlZCwgMCAtIFNtYXJ0IFJlZmxleCBkaXNhYmxlZAotCSAqLwotCXU4IHNyX2VuYWJsZTsKLQotCS8qCi0JICogQ29uZmlndXJlIGdlbmVyYWwgcGFyYW1ldGVycy4KLQkgKi8KLQlzdHJ1Y3QgY29uZl9nZW5lcmFsX3Bhcm1zIGdlbnBhcmFtOwotCi0JLyoKIAkgKiBDb25maWd1cmUgcmFkaW8gcGFyYW1ldGVycy4KIAkgKi8KIAlzdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyByYWRpb3BhcmFtOwogCiB9OwogCitzdHJ1Y3QgY29uZl9pdHJpbV9zZXR0aW5ncyB7CisJLyogZW5hYmxlIGRjbyBpdHJpbSAqLworCXU4IGVuYWJsZTsKKworCS8qIG1vZGVyYXRpb24gdGltZW91dCBpbiBtaWNyb3NlY3MgZnJvbSB0aGUgbGFzdCBUWCAqLworCXUzMiB0aW1lb3V0OworfTsKKworc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHsKKwkvKgorCSAqIEhvc3QgY2xvY2sgc2V0dGxpbmcgdGltZQorCSAqCisJICogUmFuZ2U6IDAgLSAzMDAwMCB1cworCSAqLworCXUzMiBob3N0X2Nsa19zZXR0bGluZ190aW1lOworCisJLyoKKwkgKiBIb3N0IGZhc3Qgd2FrZXVwIHN1cHBvcnQKKwkgKgorCSAqIFJhbmdlOiB0cnVlLCBmYWxzZQorCSAqLworCWJvb2wgaG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0OworfTsKKwogc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIHsKIAlzdHJ1Y3QgY29uZl9zZ19zZXR0aW5ncyBzZzsKIAlzdHJ1Y3QgY29uZl9yeF9zZXR0aW5ncyByeDsKIAlzdHJ1Y3QgY29uZl90eF9zZXR0aW5ncyB0eDsKIAlzdHJ1Y3QgY29uZl9jb25uX3NldHRpbmdzIGNvbm47CiAJc3RydWN0IGNvbmZfaW5pdF9zZXR0aW5ncyBpbml0OworCXN0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzIGl0cmltOworCXN0cnVjdCBjb25mX3BtX2NvbmZpZ19zZXR0aW5ncyBwbV9jb25maWc7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMKaW5kZXggYzE4MDVlNS4uOGQ3NTg4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMKQEAgLTIzNyw2ICsyMzcsNjQgQEAKIAkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywKIH07CiAKK3N0YXRpYyBzc2l6ZV90IGdwaW9fcG93ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlib29sIHN0YXRlID0gdGVzdF9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7CisKKwlpbnQgcmVzOworCWNoYXIgYnVmWzEwXTsKKworCXJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIHN0YXRlKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KKworc3RhdGljIHNzaXplX3QgZ3Bpb19wb3dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEwXTsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCWJ1ZltsZW5dID0gJ1wwJzsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiaWxsZWdhbCB2YWx1ZSBpbiBncGlvX3Bvd2VyIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2YWx1ZSkgeworCQl3bC0+c2V0X3Bvd2VyKHRydWUpOworCQlzZXRfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCXdsLT5zZXRfcG93ZXIoZmFsc2UpOworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19wb3dlcl9vcHMgPSB7CisJLnJlYWQgPSBncGlvX3Bvd2VyX3JlYWQsCisJLndyaXRlID0gZ3Bpb19wb3dlcl93cml0ZSwKKwkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYworfTsKKwogc3RhdGljIHZvaWQgd2wxMjcxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwpAQCAtMzMzLDYgKzM5MSw4IEBACiAJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKIAlERUJVR0ZTX0RFTChyZXRyeV9jb3VudCk7CiAJREVCVUdGU19ERUwoZXhjZXNzaXZlX3JldHJpZXMpOworCisJREVCVUdGU19ERUwoZ3Bpb19wb3dlcik7CiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX2RlYnVnZnNfYWRkX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsKQpAQCAtNDM0LDYgKzQ5NCw4IEBACiAJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKIAorCURFQlVHRlNfQUREKGdwaW9fcG93ZXIsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCiBvdXQ6CiAJaWYgKHJldCA8IDApCiAJCXdsMTI3MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKaW5kZXggZDEzZmRkOS4uNzQ2OGVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIndsMTI3MS5oIgogI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2lvLmgiCiAjaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCiAjaW5jbHVkZSAid2wxMjcxX3BzLmgiCiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCkBAIC0zNSw3ICszNiw3IEBACiAJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4IiwKIAkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMpOwogCi0JaWYgKHdsLT5zY2FubmluZykgeworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpIHsKIAkJaWYgKHdsLT5zY2FuLnN0YXRlID09IFdMMTI3MV9TQ0FOX0JBTkRfRFVBTCkgewogCQkJd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKIAkJCQkJCU5VTEwsIHNpemUpOwpAQCAtNDMsNyArNDQsNyBAQAogCQkJICogdG8gdGhlIHdsMTI3MV9jbWRfc2NhbiBmdW5jdGlvbiB0aGF0IHdlIGFyZSBub3QKIAkJCSAqIHNjYW5uaW5nIGFzIGl0IGNoZWNrcyB0aGF0LgogCQkJICovCi0JCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncyk7CiAJCQl3bDEyNzFfY21kX3NjYW4od2wsIHdsLT5zY2FuLnNzaWQsIHdsLT5zY2FuLnNzaWRfbGVuLAogCQkJCQkJd2wtPnNjYW4uYWN0aXZlLAogCQkJCQkJd2wtPnNjYW4uaGlnaF9wcmlvLApAQCAtNjIsNyArNjMsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOwogCQkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTc4LDI1ICs3OSw2MSBAQAogCiAJc3dpdGNoIChtYm94LT5wc19zdGF0dXMpIHsKIAljYXNlIEVWRU5UX0VOVEVSX1BPV0VSX1NBVkVfRkFJTDoKLQkJaWYgKCF3bC0+cHNtKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJQU00gZW50cnkgZmFpbGVkIik7CisKKwkJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CisJCQkvKiByZW1haW4gaW4gYWN0aXZlIG1vZGUgKi8KIAkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAod2wtPnBzbV9lbnRyeV9yZXRyeSA8IHdsLT5jb25mLmNvbm4ucHNtX2VudHJ5X3JldHJpZXMpIHsKIAkJCXdsLT5wc21fZW50cnlfcmV0cnkrKzsKLQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOworCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwKKwkJCQkJCSB0cnVlKTsKIAkJfSBlbHNlIHsKIAkJCXdsMTI3MV9lcnJvcigiUFNNIGVudHJ5IGZhaWxlZCwgZ2l2aW5nIHVwLlxuIik7CisJCQkvKiBGSVhNRTogdGhpcyBtYXkgbmVlZCB0byBiZSByZWNvbnNpZGVyZWQuIGZvciBub3cgaXQKKwkJCSAgIGlzIG5vdCBwb3NzaWJsZSB0byBpbmRpY2F0ZSB0byB0aGUgbWFjODAyMTEKKwkJCSAgIGFmdGVyd2FyZHMgdGhhdCBQU00gZW50cnkgZmFpbGVkLiBUbyBtYXhpbWl6ZQorCQkJICAgZnVuY3Rpb25hbGl0eSAocmVjZWl2aW5nIGRhdGEgYW5kIHJlbWFpbmluZworCQkJICAgYXNzb2NpYXRlZCkgbWFrZSBzdXJlIHRoYXQgd2UgYXJlIGluIHN5bmMgd2l0aCB0aGUKKwkJCSAgIEFQIGluIHJlZ2FyZCBvZiBQU00gbW9kZS4gKi8KKwkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwKKwkJCQkJCSBmYWxzZSk7CiAJCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQkJCSpiZWFjb25fbG9zcyA9IHRydWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX1NVQ0NFU1M6CiAJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOworCisJCS8qIGVuYWJsZSBiZWFjb24gZmlsdGVyaW5nICovCisJCXJldCA9IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCS8qIGVuYWJsZSBiZWFjb24gZWFybHkgdGVybWluYXRpb24gKi8KKwkJcmV0ID0gd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHdsLCB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKworCQkvKiBnbyB0byBleHRyZW1lbHkgbG93IHBvd2VyIG1vZGUgKi8KKwkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfRVhJVF9QT1dFUl9TQVZFX0ZBSUw6Ci0JCXdsMTI3MV9pbmZvKCJQU00gZXhpdCBmYWlsZWQiKTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIlBTTSBleGl0IGZhaWxlZCIpOworCisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CisJCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogbWFrZSBzdXJlIHRoZSBmaXJtd2FyZSBnb2VzIHRvIGFjdGl2ZSBtb2RlIC0gdGhlIGZyYW1lIHRvCisJCSAgIGJlIHNlbnQgbmV4dCB3aWxsIGluZGljYXRlIHRvIHRoZSBBUCwgdGhhdCB3ZSBhcmUgYWN0aXZlLiAqLworCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCisJCQkJCSBmYWxzZSk7CiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfRVhJVF9QT1dFUl9TQVZFX1NVQ0NFU1M6CiAJZGVmYXVsdDoKQEAgLTEzNiw3ICsxNzMsOCBAQAogCSAqIGZpbHRlcmluZykgaXMgZW5hYmxlZC4gV2l0aG91dCBQU00sIHRoZSBzdGFjayB3aWxsIHJlY2VpdmUgYWxsCiAJICogYmVhY29ucyBhbmQgY2FuIGRldGVjdCBiZWFjb24gbG9zcyBieSBpdHNlbGYuCiAJICovCi0JaWYgKHZlY3RvciAmIEJTU19MT1NFX0VWRU5UX0lEICYmIHdsLT5wc20pIHsKKwlpZiAodmVjdG9yICYgQlNTX0xPU0VfRVZFTlRfSUQgJiYKKwkgICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkgewogCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJCU1NfTE9TRV9FVkVOVCIpOwogCiAJCS8qIGluZGljYXRlIHRvIHRoZSBzdGFjaywgdGhhdCBiZWFjb25zIGhhdmUgYmVlbiBsb3N0ICovCkBAIC0xNTAsNyArMTg4LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGJlYWNvbl9sb3NzKSB7CisJaWYgKHdsLT52aWYgJiYgYmVhY29uX2xvc3MpIHsKIAkJLyogT2J2aW91c2x5LCBpdCdzIGRhbmdlcm91cyB0byByZWxlYXNlIHRoZSBtdXRleCB3aGlsZQogCQkgICB3ZSBhcmUgaG9sZGluZyBtYW55IG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlIHdsIHN0cnVjdC4KIAkJICAgVGhhdCdzIHdoeSBpdCdzIGRvbmUgbGFzdCBpbiB0aGUgZnVuY3Rpb24sIGFuZCBjYXJlIG11c3QKQEAgLTE3NywxNCArMjE1LDE0IEBACiAKIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQogewotCXdsLT5tYm94X3B0clswXSA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOworCXdsLT5tYm94X3B0clswXSA9IHdsMTI3MV9yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CiAJd2wtPm1ib3hfcHRyWzFdID0gd2wtPm1ib3hfcHRyWzBdICsgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIk1CT1ggcHRyczogMHgleCAweCV4IiwKIAkJICAgICB3bC0+bWJveF9wdHJbMF0sIHdsLT5tYm94X3B0clsxXSk7CiB9CiAKLWludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94X251bSwgYm9vbCBkb19hY2spCitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveF9udW0pCiB7CiAJc3RydWN0IGV2ZW50X21haWxib3ggbWJveDsKIAlpbnQgcmV0OwpAQCAtMTk1LDggKzIzMyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogZmlyc3Qgd2UgcmVhZCB0aGUgbWJveCBkZXNjcmlwdG9yICovCi0Jd2wxMjcxX3NwaV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbbWJveF9udW1dLCAmbWJveCwKLQkJCXNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCksIGZhbHNlKTsKKwl3bDEyNzFfcmVhZCh3bCwgd2wtPm1ib3hfcHRyW21ib3hfbnVtXSwgJm1ib3gsCisJCSAgICBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpLCBmYWxzZSk7CiAKIAkvKiBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yICovCiAJcmV0ID0gd2wxMjcxX2V2ZW50X3Byb2Nlc3Mod2wsICZtYm94KTsKQEAgLTIwNCw5ICsyNDIsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogdGhlbiB3ZSBsZXQgdGhlIGZpcm13YXJlIGtub3cgaXQgY2FuIGdvIG9uLi4uKi8KLQlpZiAoZG9fYWNrKQotCQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsCi0JCQkJICAgSU5UUl9UUklHX0VWRU5UX0FDSyk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19FVkVOVF9BQ0spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmgKaW5kZXggNGUzZjU1ZS4uMjc4ZjkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaApAQCAtMTEyLDYgKzExMiw2IEBACiAKIGludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKTsKIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94LCBib29sIGRvX2Fjayk7CitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwppbmRleCAxMTI0OWI0Li44NmMzMGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwpAQCAtNDksNyArNDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCitpbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldDsKIApAQCAtMTU2LDcgKzE1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX2luaXRfcHRhKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9pbml0X3B0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldDsKIApAQCAtMTk1LDcgKzE5NSw5IEBACiAKIGludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5ICpjb25mX2FjOworCXN0cnVjdCBjb25mX3R4X3RpZCAqY29uZl90aWQ7CisJaW50IHJldCwgaTsKIAogCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CiAJaWYgKHJldCA8IDApCkBAIC0yMjksNiArMjMxLDEwIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCisJcmV0ID0gd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKIAkvKiBJbml0aWFsaXplIGNvbm5lY3Rpb24gbW9uaXRvcmluZyB0aHJlc2hvbGRzICovCiAJcmV0ID0gd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyh3bCk7CiAJaWYgKHJldCA8IDApCkBAIC0yNzAsMjIgKzI3NiwzNiBAQAogCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKIAogCS8qIERlZmF1bHQgVElEIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHgudGlkX2NvbmZfY291bnQ7IGkrKykgeworCQljb25mX3RpZCA9ICZ3bC0+Y29uZi50eC50aWRfY29uZltpXTsKKwkJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCBjb25mX3RpZC0+cXVldWVfaWQsCisJCQkJCSBjb25mX3RpZC0+Y2hhbm5lbF90eXBlLAorCQkJCQkgY29uZl90aWQtPnRzaWQsCisJCQkJCSBjb25mX3RpZC0+cHNfc2NoZW1lLAorCQkJCQkgY29uZl90aWQtPmFja19wb2xpY3ksCisJCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzBdLAorCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisJfQogCiAJLyogRGVmYXVsdCBBQyBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHguYWNfY29uZl9jb3VudDsgaSsrKSB7CisJCWNvbmZfYWMgPSAmd2wtPmNvbmYudHguYWNfY29uZltpXTsKKwkJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIGNvbmZfYWMtPmFjLCBjb25mX2FjLT5jd19taW4sCisJCQkJCWNvbmZfYWMtPmN3X21heCwgY29uZl9hYy0+YWlmc24sCisJCQkJCWNvbmZfYWMtPnR4X29wX2xpbWl0KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwl9CiAKIAkvKiBDb25maWd1cmUgVFggcmF0ZSBjbGFzc2VzICovCi0JcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsLCBDT05GX1RYX1JBVEVfTUFTS19BTEwpOworCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCiAJLyogRW5hYmxlIGRhdGEgcGF0aCAqLwotCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7CisJcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKIApAQCAtMjk5LDggKzMxOSw4IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCi0JLyogQ29uZmlndXJlIHNtYXJ0IHJlZmxleCAqLwotCXJldCA9IHdsMTI3MV9hY3hfc21hcnRfcmVmbGV4KHdsKTsKKwkvKiBjb25maWd1cmUgUE0gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3BtX2NvbmZpZyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCmluZGV4IDkzMDY3N2YuLmJjMjZmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgIndsMTI3MS5oIgogCiBpbnQgd2wxMjcxX2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfcHRhKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDk0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKKworc3RhdGljIGludCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCS8qCisJICogVG8gdHJhbnNsYXRlLCBmaXJzdCBjaGVjayB0byB3aGljaCB3aW5kb3cgb2YgYWRkcmVzc2VzIHRoZQorCSAqIHBhcnRpY3VsYXIgYWRkcmVzcyBiZWxvbmdzLiBUaGVuIHN1YnRyYWN0IHRoZSBzdGFydGluZyBhZGRyZXNzCisJICogb2YgdGhhdCB3aW5kb3cgZnJvbSB0aGUgYWRkcmVzcy4gVGhlbiwgYWRkIG9mZnNldCBvZiB0aGUKKwkgKiB0cmFuc2xhdGVkIHJlZ2lvbi4KKwkgKgorCSAqIFRoZSB0cmFuc2xhdGVkIHJlZ2lvbnMgb2NjdXIgbmV4dCB0byBlYWNoIG90aGVyIGluIHBoeXNpY2FsIGRldmljZQorCSAqIG1lbW9yeSwgc28ganVzdCBhZGQgdGhlIHNpemVzIG9mIHRoZSBwcmVjZWVkaW5nIGFkZHJlc3MgcmVnaW9ucyB0bworCSAqIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXcgcmVnaW9uLgorCSAqCisJICogQ3VycmVudGx5LCBvbmx5IHRoZSB0d28gZmlyc3QgcmVnaW9ucyBhcmUgYWRkcmVzc2VkLCBhbmQgdGhlCisJICogYXNzdW1wdGlvbiBpcyB0aGF0IGFsbCBhZGRyZXNzZXMgd2lsbCBmYWxsIGludG8gZWl0aGVyIG9mIHRob3NlCisJICogdHdvLgorCSAqLworCWlmICgoYWRkciA+PSB3bC0+cGFydC5yZWcuc3RhcnQpICYmCisJICAgIChhZGRyIDwgd2wtPnBhcnQucmVnLnN0YXJ0ICsgd2wtPnBhcnQucmVnLnNpemUpKQorCQlyZXR1cm4gYWRkciAtIHdsLT5wYXJ0LnJlZy5zdGFydCArIHdsLT5wYXJ0Lm1lbS5zaXplOworCWVsc2UKKwkJcmV0dXJuIGFkZHIgLSB3bC0+cGFydC5tZW0uc3RhcnQ7Cit9CisKKy8qIFNldCB0aGUgU1BJIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwIGFkZHJlc3NlcworICoKKyAqIFRvIHNpbXBsaWZ5IGRyaXZlciBjb2RlLCBhIGZpeGVkICh2aXJ0dWFsKSBtZW1vcnkgbWFwIGlzIGRlZmluZWQgZm9yCisgKiByZWdpc3RlciBhbmQgbWVtb3J5IGFkZHJlc3Nlcy4gQmVjYXVzZSBpbiB0aGUgY2hpcHNldCwgaW4gZGlmZmVyZW50IHN0YWdlcworICogb2Ygb3BlcmF0aW9uLCB0aG9zZSBhZGRyZXNzZXMgd2lsbCBtb3ZlIGFyb3VuZCwgYW4gYWRkcmVzcyB0cmFuc2xhdGlvbgorICogbWVjaGFuaXNtIGlzIHJlcXVpcmVkLgorICoKKyAqIFRoZXJlIGFyZSBmb3VyIHBhcnRpdGlvbnMgKHRocmVlIG1lbW9yeSBhbmQgb25lIHJlZ2lzdGVyIHBhcnRpdGlvbiksCisgKiB3aGljaCBhcmUgbWFwcGVkIHRvIHR3byBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIGhhcmR3YXJlIG1lbW9yeS4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiBtZW0uc3RhcnQKKyAqICAgICAgICAgIFBoeXNpY2FsIGFkZHJlc3MgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHNwYWNlICAgICAgIC4uLiAgICAgIHwgICAgfCBbUEFSVF8wXQorICogICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAwMDAwMDAwMCAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbS5zdGFydCArIG1lbS5zaXplCisgKiAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICB8TUVNIHwgICAgICAuLi4gICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8CisgKiAgbWVtLnNpemUgIDwtLSstLS0tKy4uLiAgICAgICAgICAgIHwgICAgfCB7dW51c2VkIGFyZWEpCisgKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICB8UkVHIHwgICAgICAuLi4gICAgICB8ICAgIHwKKyAqICBtZW0uc2l6ZSAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICsgICAgIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiByZWcuc3RhcnQKKyAqICByZWcuc2l6ZSAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxNRU0yfCAgICAgIC4uLiAgICAgIHwgICAgfCBbUEFSVF8xXQorICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZy5zdGFydCArIHJlZy5zaXplCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICoKKyAqLworaW50IHdsMTI3MV9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJIHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCAqcCkKK3sKKwkvKiBjb3B5IHBhcnRpdGlvbiBpbmZvICovCisJbWVtY3B5KCZ3bC0+cGFydCwgcCwgc2l6ZW9mKCpwKSk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCisJCSAgICAgcC0+bWVtLnN0YXJ0LCBwLT5tZW0uc2l6ZSk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCQkgICAgIHAtPnJlZy5zdGFydCwgcC0+cmVnLnNpemUpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW0yX3N0YXJ0ICUwOFggbWVtMl9zaXplICUwOFgiLAorCQkgICAgIHAtPm1lbTIuc3RhcnQsIHAtPm1lbTIuc2l6ZSk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbTNfc3RhcnQgJTA4WCBtZW0zX3NpemUgJTA4WCIsCisJCSAgICAgcC0+bWVtMy5zdGFydCwgcC0+bWVtMy5zaXplKTsKKworCS8qIHdyaXRlIHBhcnRpdGlvbiBpbmZvIHRvIHRoZSBjaGlwc2V0ICovCisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMF9TVEFSVF9BRERSLCBwLT5tZW0uc3RhcnQpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDBfU0laRV9BRERSLCBwLT5tZW0uc2l6ZSk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMV9TVEFSVF9BRERSLCBwLT5yZWcuc3RhcnQpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDFfU0laRV9BRERSLCBwLT5yZWcuc2l6ZSk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMl9TVEFSVF9BRERSLCBwLT5tZW0yLnN0YXJ0KTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQyX1NJWkVfQUREUiwgcC0+bWVtMi5zaXplKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQzX1NUQVJUX0FERFIsIHAtPm1lbTMuc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2wxMjcxX2lvX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsMTI3MV9zcGlfcmVzZXQod2wpOworfQorCit2b2lkIHdsMTI3MV9pb19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsMTI3MV9zcGlfaW5pdCh3bCk7Cit9CisKK3ZvaWQgd2wxMjcxX3Jhd193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwl3bDEyNzFfc3BpX3Jhd193cml0ZSh3bCwgYWRkciwgYnVmLCBsZW4sIGZpeGVkKTsKK30KKwordm9pZCB3bDEyNzFfcmF3X3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwl3bDEyNzFfc3BpX3Jhd19yZWFkKHdsLCBhZGRyLCBidWYsIGxlbiwgZml4ZWQpOworfQorCit2b2lkIHdsMTI3MV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkgICAgIGJvb2wgZml4ZWQpCit7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpOworCisJd2wxMjcxX3NwaV9yYXdfcmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Cit9CisKK3ZvaWQgd2wxMjcxX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkgIGJvb2wgZml4ZWQpCit7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpOworCisJd2wxMjcxX3NwaV9yYXdfd3JpdGUod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZml4ZWQpOworfQorCit1MzIgd2wxMjcxX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJcmV0dXJuIHdsMTI3MV9yYXdfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpKTsKK30KKwordm9pZCB3bDEyNzFfd3JpdGUzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCit7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpLCB2YWwpOworfQorCit2b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCkKK3sKKwkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCisJYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOworCisJLyogd3JpdGUgdmFsdWUgdG8gT0NQX1BPUl9XREFUQSAqLworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfREFUQV9XUklURSwgdmFsKTsKKworCS8qIHdyaXRlIDEgdG8gT0NQX0NNRCAqLworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfQ01ELCBPQ1BfQ01EX1dSSVRFKTsKK30KKwordTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXUzMiB2YWw7CisJaW50IHRpbWVvdXQgPSBPQ1BfQ01EX0xPT1A7CisKKwkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCisJYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOworCisJLyogd3JpdGUgMiB0byBPQ1BfQ01EICovCisJd2wxMjcxX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7CisKKwkvKiBwb2xsIGZvciBkYXRhIHJlYWR5ICovCisJZG8geworCQl2YWwgPSB3bDEyNzFfcmVhZDMyKHdsLCBPQ1BfREFUQV9SRUFEKTsKKwl9IHdoaWxlICghKHZhbCAmIE9DUF9SRUFEWV9NQVNLKSAmJiAtLXRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0KSB7CisJCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHRpbWVkIG91dC4iKTsKKwkJcmV0dXJuIDB4ZmZmZjsKKwl9CisKKwkvKiBjaGVjayBkYXRhIHN0YXR1cyBhbmQgcmV0dXJuIGlmIE9LICovCisJaWYgKCh2YWwgJiBPQ1BfU1RBVFVTX01BU0spID09IE9DUF9TVEFUVVNfT0spCisJCXJldHVybiB2YWwgJiAweGZmZmY7CisJZWxzZSB7CisJCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHJldHVybmVkIGVycm9yLiIpOworCQlyZXR1cm4gMHhmZmZmOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9JT19IX18KKyNkZWZpbmUgX19XTDEyNzFfSU9fSF9fCisKK3N0cnVjdCB3bDEyNzE7CisKK3ZvaWQgd2wxMjcxX2lvX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2lvX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOworCisvKiBSYXcgdGFyZ2V0IElPLCBhZGRyZXNzIGlzIG5vdCB0cmFuc2xhdGVkICovCit2b2lkIHdsMTI3MV9yYXdfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpOwordm9pZCB3bDEyNzFfcmF3X3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCk7CisKKy8qIFRyYW5zbGF0ZWQgdGFyZ2V0IElPICovCit2b2lkIHdsMTI3MV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkgICAgIGJvb2wgZml4ZWQpOwordm9pZCB3bDEyNzFfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICAgIGJvb2wgZml4ZWQpOwordTMyIHdsMTI3MV9yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKK3ZvaWQgd2wxMjcxX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKworLyogVG9wIFJlZ2lzdGVyIElPICovCit2b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCk7Cit1MTYgd2wxMjcxX3RvcF9yZWdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOworCitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKTsKKworc3RhdGljIGlubGluZSB1MzIgd2wxMjcxX3Jhd19yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXdsMTI3MV9yYXdfcmVhZCh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCisJCQkgICAgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7CisKKwlyZXR1cm4gd2wtPmJ1ZmZlcl8zMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV9yYXdfd3JpdGUzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCit7CisJd2wtPmJ1ZmZlcl8zMiA9IHZhbDsKKwl3bDEyNzFfcmF3X3dyaXRlKHdsLCBhZGRyLCAmd2wtPmJ1ZmZlcl8zMiwKKwkJCSAgICAgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKaW5kZXggYjYyYzAwZi4uMmE4NjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCiAjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgogI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKICNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKICNpbmNsdWRlICJ3bDEyNzFfdHguaCIKICNpbmNsdWRlICJ3bDEyNzFfcnguaCIKQEAgLTQ2LDYgKzQ3LDkgQEAKICNpbmNsdWRlICJ3bDEyNzFfZGVidWdmcy5oIgogI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKICNpbmNsdWRlICJ3bDEyNzFfYm9vdC5oIgorI2luY2x1ZGUgIndsMTI3MV90ZXN0bW9kZS5oIgorCisjZGVmaW5lIFdMMTI3MV9CT09UX1JFVFJJRVMgMwogCiBzdGF0aWMgc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIGRlZmF1bHRfY29uZiA9IHsKIAkuc2cgPSB7CkBAIC02NywxNiArNzEsMTcgQEAKIAkJLnBzX3BvbGxfdGltZW91dCAgICAgICAgICAgICA9IDE1LAogCQkudXBzZF90aW1lb3V0ICAgICAgICAgICAgICAgID0gMTUsCiAJCS5ydHNfdGhyZXNob2xkICAgICAgICAgICAgICAgPSAyMzQ3LAotCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMHhGRkVGLAotCQkuaXJxX2Jsa190aHJlc2hvbGQgICAgICAgICAgID0gMCwKLQkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IFVTSE9SVF9NQVgsCi0JCS5pcnFfdGltZW91dCAgICAgICAgICAgICAgICAgPSA1LAorCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMCwKKwkJLmlycV9ibGtfdGhyZXNob2xkICAgICAgICAgICA9IDB4RkZGRiwKKwkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IDAsCisJCS5pcnFfdGltZW91dCAgICAgICAgICAgICAgICAgPSA2MDAsCiAJCS5xdWV1ZV90eXBlICAgICAgICAgICAgICAgICAgPSBDT05GX1JYX1FVRVVFX1RZUEVfTE9XX1BSSU9SSVRZLAogCX0sCiAJLnR4ID0gewogCQkudHhfZW5lcmd5X2RldGVjdGlvbiAgICAgICAgID0gMCwKIAkJLnJjX2NvbmYgICAgICAgICAgICAgICAgICAgICA9IHsKLQkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gQ09ORl9UWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQsCisJCQkuZW5hYmxlZF9yYXRlcyAgICAgICA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfAorCQkJCQkgICAgICAgQ09ORl9IV19CSVRfUkFURV8yTUJQUywKIAkJCS5zaG9ydF9yZXRyeV9saW1pdCAgID0gMTAsCiAJCQkubG9uZ19yZXRyeV9saW1pdCAgICA9IDEwLAogCQkJLmFmbGFncyAgICAgICAgICAgICAgPSAwCkBAIC0xNzIsOCArMTc3LDggQEAKIAkJCX0KIAkJfSwKIAkJLmZyYWdfdGhyZXNob2xkICAgICAgICAgICAgICA9IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQsCi0JCS50eF9jb21wbF90aW1lb3V0ICAgICAgICAgICAgPSA1LAotCQkudHhfY29tcGxfdGhyZXNob2xkICAgICAgICAgID0gNQorCQkudHhfY29tcGxfdGltZW91dCAgICAgICAgICAgID0gNzAwLAorCQkudHhfY29tcGxfdGhyZXNob2xkICAgICAgICAgID0gNAogCX0sCiAJLmNvbm4gPSB7CiAJCS53YWtlX3VwX2V2ZW50ICAgICAgICAgICAgICAgPSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSwKQEAgLTE4NiwxMiArMTkxLDEyIEBACiAJCQkJLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVMRV9QQVNTX09OX0FQUEVBUkFOQ0UsCiAJCQl9CiAJCX0sCi0JCS5zeW5jaF9mYWlsX3Rob2xkICAgICAgICAgICAgPSA1LAorCQkuc3luY2hfZmFpbF90aG9sZCAgICAgICAgICAgID0gMTAsCiAJCS5ic3NfbG9zZV90aW1lb3V0ICAgICAgICAgICAgPSAxMDAsCiAJCS5iZWFjb25fcnhfdGltZW91dCAgICAgICAgICAgPSAxMDAwMCwKIAkJLmJyb2FkY2FzdF90aW1lb3V0ICAgICAgICAgICA9IDIwMDAwLAogCQkucnhfYnJvYWRjYXN0X2luX3BzICAgICAgICAgID0gMSwKLQkJLnBzX3BvbGxfdGhyZXNob2xkICAgICAgICAgICA9IDQsCisJCS5wc19wb2xsX3RocmVzaG9sZCAgICAgICAgICAgPSAyMCwKIAkJLnNpZ190cmlnZ2VyX2NvdW50ICAgICAgICAgICA9IDIsCiAJCS5zaWdfdHJpZ2dlciA9IHsKIAkJCVswXSA9IHsKQEAgLTIyNiw5NyArMjMxLDE3IEBACiAJCS5wc21fZW50cnlfcmV0cmllcyAgICAgICAgICAgPSAzCiAJfSwKIAkuaW5pdCA9IHsKLQkJLnNyX2Vycl90YmwgPSB7Ci0JCQlbMF0gPSB7Ci0JCQkJLmxlbiAgICAgICAgID0gNywKLQkJCQkudXBwZXJfbGltaXQgPSAweDAzLAotCQkJCS52YWx1ZXMgICAgICA9IHsKLQkJCQkJMHgxOCwgMHgxMCwgMHgwNSwgMHhmYiwgMHhmMCwgMHhlOCwKLQkJCQkJMHgwMCB9Ci0JCQl9LAotCQkJWzFdID0gewotCQkJCS5sZW4gICAgICAgICA9IDcsCi0JCQkJLnVwcGVyX2xpbWl0ID0gMHgwMywKLQkJCQkudmFsdWVzICAgICAgPSB7Ci0JCQkJCTB4MTgsIDB4MTAsIDB4MDUsIDB4ZjYsIDB4ZjAsIDB4ZTgsCi0JCQkJCTB4MDAgfQotCQkJfSwKLQkJCVsyXSA9IHsKLQkJCQkubGVuICAgICAgICAgPSA3LAotCQkJCS51cHBlcl9saW1pdCA9IDB4MDMsCi0JCQkJLnZhbHVlcyAgICAgID0gewotCQkJCQkweDE4LCAweDEwLCAweDA1LCAweGZiLCAweGYwLCAweGU4LAotCQkJCQkweDAwIH0KLQkJCX0KLQkJfSwKLQkJLnNyX2VuYWJsZSAgICAgICAgICAgICAgICAgICA9IDEsCi0JCS5nZW5wYXJhbSAgICAgICAgICAgICAgICAgICAgPSB7Ci0JCQkucmVmX2NsayAgICAgICAgICAgICA9IENPTkZfUkVGX0NMS18zOF80X0UsCi0JCQkuc2V0dGxpbmdfdGltZSAgICAgICA9IDUsCi0JCQkuY2xrX3ZhbGlkX29uX3dha2V1cCA9IDAsCi0JCQkuZGMyZGNtb2RlICAgICAgICAgICA9IDAsCi0JCQkuc2luZ2xlX2R1YWxfYmFuZCAgICA9IENPTkZfU0lOR0xFX0JBTkQsCi0JCQkudHhfYmlwX2ZlbV9hdXRvZGV0ZWN0ID0gMCwKLQkJCS50eF9iaXBfZmVtX21hbnVmYWN0dXJlciA9IDEsCi0JCQkuc2V0dGluZ3MgPSAxLAotCQl9LAogCQkucmFkaW9wYXJhbSA9IHsKLQkJCS5yeF90cmFjZV9sb3NzICAgICAgID0gMTAsCi0JCQkudHhfdHJhY2VfbG9zcyAgICAgICA9IDEwLAotCQkJLnJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVucyA9IHsKLQkJCQkweGVjLCAweGY2LCAweDAwLCAweDBjLCAweDE4LCAweGY4LAotCQkJCTB4ZmMsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ZjAsIDB4ZjgsCi0JCQkJMHgwMCwgMHgwYSwgMHgxNCB9LAotCQkJLnJ4X3RyYWNlX2xvc3NfNSAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKLQkJCS50eF90cmFjZV9sb3NzXzUgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCQkucnhfcnNzaV9hbmRfcHJvY19jb21wZW5zXzUgPSB7Ci0JCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJCTB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJCS50eF9yZWZfcGRfdm9sdGFnZSAgID0gMHgyNGUsCi0JCQkudHhfcmVmX3Bvd2VyICAgICAgICA9IDB4NzgsCi0JCQkudHhfb2Zmc2V0X2RiICAgICAgICA9IDB4MCwKLQkJCS50eF9yYXRlX2xpbWl0c19ub3JtYWwgPSB7Ci0JCQkJMHgxZSwgMHgxZiwgMHgyMiwgMHgyNCwgMHgyOCwgMHgyOSB9LAotCQkJLnR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkID0gewotCQkJCTB4MWIsIDB4MWMsIDB4MWUsIDB4MjAsIDB4MjQsIDB4MjUgfSwKLQkJCS50eF9jaGFubmVsX2xpbWl0c18xMWIgPSB7Ci0JCQkJMHgyMiwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKLQkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDIyLCAweDUwLAotCQkJCTB4MjIsIDB4NTAgfSwKLQkJCS50eF9jaGFubmVsX2xpbWl0c19vZmRtID0gewotCQkJCTB4MjAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCi0JCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgyMCwgMHg1MCwKLQkJCQkweDIwLCAweDUwIH0sCi0JCQkudHhfcGR2X3JhdGVfb2Zmc2V0cyA9IHsKLQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCQkudHhfaWJpYXMgICAgICAgICAgICA9IHsKLQkJCQkweDFhLCAweDFhLCAweDFhLCAweDFhLCAweDFhLCAweDI3IH0sCi0JCQkucnhfZmVtX2luc2VydGlvbl9sb3NzID0gMHgxNCwKLQkJCS50eF9yZWZfcGRfdm9sdGFnZV81ID0gewotCQkJCTB4MDE5MCwgMHgwMWE0LCAweDAxYzMsIDB4MDFkOCwKLQkJCQkweDAyMGEsIDB4MDIxYyB9LAotCQkJLnR4X3JlZl9wb3dlcl81ICAgICAgPSB7Ci0JCQkJMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCB9LAotCQkJLnR4X29mZnNldF9kYl81ICAgICAgPSB7Ci0JCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkJLnR4X3JhdGVfbGltaXRzX25vcm1hbF81ID0gewotCQkJCTB4MWIsIDB4MWUsIDB4MjEsIDB4MjMsIDB4MjcsIDB4MDAgfSwKLQkJCS50eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81ID0gewotCQkJCTB4MWIsIDB4MWUsIDB4MjEsIDB4MjMsIDB4MjcsIDB4MDAgfSwKLQkJCS50eF9jaGFubmVsX2xpbWl0c19vZmRtXzUgPSB7Ci0JCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKLQkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLAotCQkJCTB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCi0JCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKLQkJCQkweDUwLCAweDUwLCAweDUwIH0sCi0JCQkudHhfcGR2X3JhdGVfb2Zmc2V0c181ID0gewotCQkJCTB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDAgfSwKLQkJCS50eF9pYmlhc181ICAgICAgICAgID0gewotCQkJCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAgfSwKLQkJCS5yeF9mZW1faW5zZXJ0aW9uX2xvc3NfNSA9IHsKLQkJCQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwIH0KKwkJCS5mZW0gICAgICAgICAgICAgICAgID0gMSwKIAkJfQorCX0sCisJLml0cmltID0geworCQkuZW5hYmxlID0gZmFsc2UsCisJCS50aW1lb3V0ID0gNTAwMDAsCisJfSwKKwkucG1fY29uZmlnID0geworCQkuaG9zdF9jbGtfc2V0dGxpbmdfdGltZSA9IDUwMDAsCisJCS5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQgPSBmYWxzZQogCX0KIH07CiAKQEAgLTMzNywxNSArMjYyLDE0IEBACiAKIAkvKiBhcHBseSBkcml2ZXIgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiAJbWVtY3B5KCZ3bC0+Y29uZiwgJmRlZmF1bHRfY29uZiwgc2l6ZW9mKGRlZmF1bHRfY29uZikpOwotCi0JaWYgKHdsMTI3MV8xMWFfZW5hYmxlZCgpKQotCQl3bC0+Y29uZi5pbml0LmdlbnBhcmFtLnNpbmdsZV9kdWFsX2JhbmQgPSBDT05GX0RVQUxfQkFORDsKIH0KIAogCiBzdGF0aWMgaW50IHdsMTI3MV9wbHRfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5ICpjb25mX2FjOworCXN0cnVjdCBjb25mX3R4X3RpZCAqY29uZl90aWQ7CisJaW50IHJldCwgaTsKIAogCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CiAJaWYgKHJldCA8IDApCkBAIC0zNTUsMTUgKzI3OSw4OSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJcmV0ID0gd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlyZXQgPSB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB3bDEyNzFfY21kX2RhdGFfcGF0aCh3bCwgd2wtPmNoYW5uZWwsIDEpOworCS8qIFBIWSBsYXllciBjb25maWcgKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHdsKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEluaXRpYWxpemUgY29ubmVjdGlvbiBtb25pdG9yaW5nIHRocmVzaG9sZHMgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI3MV9pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRW5lcmd5IGRldGVjdGlvbiAqLworCXJldCA9IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBEZWZhdWx0IFRJRCBjb25maWd1cmF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLnR4LnRpZF9jb25mX2NvdW50OyBpKyspIHsKKwkJY29uZl90aWQgPSAmd2wtPmNvbmYudHgudGlkX2NvbmZbaV07CisJCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCwgY29uZl90aWQtPnF1ZXVlX2lkLAorCQkJCQkgY29uZl90aWQtPmNoYW5uZWxfdHlwZSwKKwkJCQkJIGNvbmZfdGlkLT50c2lkLAorCQkJCQkgY29uZl90aWQtPnBzX3NjaGVtZSwKKwkJCQkJIGNvbmZfdGlkLT5hY2tfcG9saWN5LAorCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlswXSwKKwkJCQkJIGNvbmZfdGlkLT5hcHNkX2NvbmZbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCX0KKworCS8qIERlZmF1bHQgQUMgY29uZmlndXJhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50OyBpKyspIHsKKwkJY29uZl9hYyA9ICZ3bC0+Y29uZi50eC5hY19jb25mW2ldOworCQlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgY29uZl9hYy0+YWMsIGNvbmZfYWMtPmN3X21pbiwKKwkJCQkJY29uZl9hYy0+Y3dfbWF4LCBjb25mX2FjLT5haWZzbiwKKwkJCQkJY29uZl9hYy0+dHhfb3BfbGltaXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCX0KKworCS8qIEVuYWJsZSBkYXRhIHBhdGggKi8KKwlyZXQgPSB3bDEyNzFfY21kX2RhdGFfcGF0aCh3bCwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIGZvciBDQU0gcG93ZXIgc2F2aW5nIChpZS4gYWx3YXlzIGFjdGl2ZSkgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTI3MV9QU01fQ0FNKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBjb25maWd1cmUgUE0gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3BtX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCiAJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9tZW1tYXA6CisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwl3bC0+dGFyZ2V0X21lbV9tYXAgPSBOVUxMOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKQEAgLTM3NCwxMSArMzcyLDEzIEBACiBzdGF0aWMgdm9pZCB3bDEyNzFfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXdsLT5zZXRfcG93ZXIoZmFsc2UpOworCWNsZWFyX2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX3Bvd2VyX29uKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXdsLT5zZXRfcG93ZXIodHJ1ZSk7CisJc2V0X2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX2Z3X3N0YXR1cyhzdHJ1Y3Qgd2wxMjcxICp3bCwKQEAgLTM4Nyw4ICszODcsNyBAQAogCXUzMiB0b3RhbCA9IDA7CiAJaW50IGk7CiAKLQl3bDEyNzFfc3BpX3JlYWQod2wsIEZXX1NUQVRVU19BRERSLCBzdGF0dXMsCi0JCQlzaXplb2YoKnN0YXR1cyksIGZhbHNlKTsKKwl3bDEyNzFfcmVhZCh3bCwgRldfU1RBVFVTX0FERFIsIHN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpLCBmYWxzZSk7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiaW50cjogMHgleCAoZndfcnhfY291bnRlciA9ICVkLCAiCiAJCSAgICAgImRydl9yeF9jb3VudGVyID0gJWQsIHR4X3Jlc3VsdHNfY291bnRlciA9ICVkKSIsCkBAIC00MzUsNyArNDM0LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKIAogCXdsMTI3MV9md19zdGF0dXMod2wsIHdsLT5md19zdGF0dXMpOwogCWludHIgPSBsZTMyX3RvX2NwdSh3bC0+Zndfc3RhdHVzLT5pbnRyKTsKQEAgLTQ0NywxNCArNDQ2LDEzIEBACiAJaW50ciAmPSBXTDEyNzFfSU5UUl9NQVNLOwogCiAJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSkgewotCQlib29sIGRvX2FjayA9IChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IpID8gZmFsc2UgOiB0cnVlOwogCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EiKTsKLQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMCwgZG9fYWNrKTsKKwkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMCk7CiAJfQogCiAJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQikgewogCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IiKTsKLQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMSwgdHJ1ZSk7CisJCXdsMTI3MV9ldmVudF9oYW5kbGUod2wsIDEpOwogCX0KIAogCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpCkBAIC00NzgsOCArNDc2LDggQEAKIAl9CiAKIG91dF9zbGVlcDoKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCi0JCQkgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7CiAJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiAKIG91dDoKQEAgLTU0Niw2ICs1NDQsNDAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHdsMTI3MV91cGRhdGVfbWFjX2FkZHIoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldCA9IDA7CisJdTggKm52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnM7CisKKwkvKiBnZXQgbWFjIGFkZHJlc3MgZnJvbSB0aGUgTlZTICovCisJd2wtPm1hY19hZGRyWzBdID0gbnZzX3B0clsxMV07CisJd2wtPm1hY19hZGRyWzFdID0gbnZzX3B0clsxMF07CisJd2wtPm1hY19hZGRyWzJdID0gbnZzX3B0cls2XTsKKwl3bC0+bWFjX2FkZHJbM10gPSBudnNfcHRyWzVdOworCXdsLT5tYWNfYWRkcls0XSA9IG52c19wdHJbNF07CisJd2wtPm1hY19hZGRyWzVdID0gbnZzX3B0clszXTsKKworCS8qIEZJWE1FOiBpZiBpdCBpcyBhIHplcm8tYWRkcmVzcywgd2Ugc2hvdWxkIGJhaWwgb3V0LiBOb3csIGluc3RlYWQsCisJICAgd2UgcmFuZG9taXplIGFuIGFkZHJlc3MgKi8KKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHdsLT5tYWNfYWRkcikpIHsKKwkJc3RhdGljIGNvbnN0IHU4IG5va2lhX291aVszXSA9IHsweDAwLCAweDFmLCAweGRmfTsKKwkJbWVtY3B5KHdsLT5tYWNfYWRkciwgbm9raWFfb3VpLCAzKTsKKwkJZ2V0X3JhbmRvbV9ieXRlcyh3bC0+bWFjX2FkZHIgKyAzLCAzKTsKKworCQkvKiB1cGRhdGUgdGhpcyBhZGRyZXNzIHRvIHRoZSBOVlMgKi8KKwkJbnZzX3B0clsxMV0gPSB3bC0+bWFjX2FkZHJbMF07CisJCW52c19wdHJbMTBdID0gd2wtPm1hY19hZGRyWzFdOworCQludnNfcHRyWzZdID0gd2wtPm1hY19hZGRyWzJdOworCQludnNfcHRyWzVdID0gd2wtPm1hY19hZGRyWzNdOworCQludnNfcHRyWzRdID0gd2wtPm1hY19hZGRyWzRdOworCQludnNfcHRyWzNdID0gd2wtPm1hY19hZGRyWzVdOworCX0KKworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgd2wxMjcxX2ZldGNoX252cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtNTU4LDE1ICs1OTAsMTQgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoZnctPnNpemUgJSA0KSB7Ci0JCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyIGJpdHM6ICV6dSIsCi0JCQkgICAgIGZ3LT5zaXplKTsKKwlpZiAoZnctPnNpemUgIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKSB7CisJCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkOiAlenUgIT0gJXp1IiwKKwkJCSAgICAgZnctPnNpemUsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7CiAJCXJldCA9IC1FSUxTRVE7CiAJCWdvdG8gb3V0OwogCX0KIAotCXdsLT5udnNfbGVuID0gZnctPnNpemU7Ci0Jd2wtPm52cyA9IGttYWxsb2Mod2wtPm52c19sZW4sIEdGUF9LRVJORUwpOworCXdsLT5udnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXdsLT5udnMpIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKQEAgLTU3NCw5ICs2MDUsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkod2wtPm52cywgZnctPmRhdGEsIHdsLT5udnNfbGVuKTsKKwltZW1jcHkod2wtPm52cywgZnctPmRhdGEsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7CiAKLQlyZXQgPSAwOworCXJldCA9IHdsMTI3MV91cGRhdGVfbWFjX2FkZHIod2wpOwogCiBvdXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CkBAIC02MTQsMTAgKzY0NSwxMSBAQAogCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0aXRpb247CiAJaW50IHJldCA9IDA7CiAKKwltc2xlZXAoV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCk7CiAJd2wxMjcxX3Bvd2VyX29uKHdsKTsKIAltc2xlZXAoV0wxMjcxX1BPV0VSX09OX1NMRUVQKTsKLQl3bDEyNzFfc3BpX3Jlc2V0KHdsKTsKLQl3bDEyNzFfc3BpX2luaXQod2wpOworCXdsMTI3MV9pb19yZXNldCh3bCk7CisJd2wxMjcxX2lvX2luaXQod2wpOwogCiAJLyogV2UgZG9uJ3QgbmVlZCBhIHJlYWwgbWVtb3J5IHBhcnRpdGlvbiBoZXJlLCBiZWNhdXNlIHdlIG9ubHkgd2FudAogCSAqIHRvIHVzZSB0aGUgcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQuICovCkBAIC02MzIsNyArNjY0LDcgQEAKIAkvKiB3aGFsX0Z3Q3RybF9Cb290U20oKSAqLwogCiAJLyogMC4gcmVhZCBjaGlwIGlkIGZyb20gQ0hJUF9JRCAqLwotCXdsLT5jaGlwLmlkID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIENISVBfSURfQik7CisJd2wtPmNoaXAuaWQgPSB3bDEyNzFfcmVhZDMyKHdsLCBDSElQX0lEX0IpOwogCiAJLyogMS4gY2hlY2sgaWYgY2hpcCBpZCBpcyB2YWxpZCAqLwogCkBAIC02NDMsNyArNjc1LDcgQEAKIAogCQlyZXQgPSB3bDEyNzFfc2V0dXAod2wpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3Bvd2VyX29mZjsKKwkJCWdvdG8gb3V0OwogCQlicmVhazsKIAljYXNlIENISVBfSURfMTI3MV9QRzIwOgogCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgMHgleCAoMTI3MSBQRzIwKSIsCkBAIC02NTEsMzggKzY4MywzNCBAQAogCiAJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXdsMTI3MV9lcnJvcigidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKKwkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcC5pZCk7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3Bvd2VyX29mZjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHdsLT5mdyA9PSBOVUxMKSB7CiAJCXJldCA9IHdsMTI3MV9mZXRjaF9maXJtd2FyZSh3bCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQkJZ290byBvdXQ7CiAJfQogCiAJLyogTm8gTlZTIGZyb20gbmV0bGluaywgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCiAJaWYgKHdsLT5udnMgPT0gTlVMTCkgewogCQlyZXQgPSB3bDEyNzFfZmV0Y2hfbnZzKHdsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9wb3dlcl9vZmY7CisJCQlnb3RvIG91dDsKIAl9CiAKLQlnb3RvIG91dDsKLQotb3V0X3Bvd2VyX29mZjoKLQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKLQogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIGludCB3bDEyNzFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsKQogeworCWludCByZXRyaWVzID0gV0wxMjcxX0JPT1RfUkVUUklFUzsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKQEAgLTY5NiwzNSArNzI0LDQzIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9QTFQ7CisJd2hpbGUgKHJldHJpZXMpIHsKKwkJcmV0cmllcy0tOworCQlyZXQgPSB3bDEyNzFfY2hpcF93YWtldXAod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOwogCi0JcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKLQlpZiAocmV0IDwgMCkKKwkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOworCisJCXJldCA9IHdsMTI3MV9wbHRfaW5pdCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBpcnFfZGlzYWJsZTsKKworCQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfUExUOworCQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsCisJCQkgICAgICB3bC0+Y2hpcC5md192ZXIpOwogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9ib290KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfcG93ZXJfb2ZmOworaXJxX2Rpc2FibGU6CisJCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCS8qIFVubG9ja2luZyB0aGUgbXV0ZXggaW4gdGhlIG1pZGRsZSBvZiBoYW5kbGluZyBpcworCQkgICBpbmhlcmVudGx5IHVuc2FmZS4gSW4gdGhpcyBjYXNlIHdlIGRlZW0gaXQgc2FmZSB0byBkbywKKwkJICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxldCBhbnkgcG9zc2libHkgcGVuZGluZyBJUlEgb3V0IG9mCisJCSAgIHRoZSBzeXN0ZW0gKGFuZCB3aGlsZSB3ZSBhcmUgV0wxMjcxX1NUQVRFX09GRiB0aGUgSVJRCisJCSAgIHdvcmsgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmcuKSBBbHNvLCBhbnkgb3RoZXIKKwkJICAgcG9zc2libGUgY29uY3VycmVudCBvcGVyYXRpb25zIHdpbGwgZmFpbCBkdWUgdG8gdGhlCisJCSAgIGN1cnJlbnQgc3RhdGUsIGhlbmNlIHRoZSB3bDEyNzEgc3RydWN0IHNob3VsZCBiZSBzYWZlLiAqLworCQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworcG93ZXJfb2ZmOgorCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKwl9CiAKLQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7Ci0KLQlyZXQgPSB3bDEyNzFfcGx0X2luaXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pcnFfZGlzYWJsZTsKLQotCS8qIE1ha2Ugc3VyZSBwb3dlciBzYXZpbmcgaXMgZGlzYWJsZWQgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTI3MV9QU01fQ0FNKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfaXJxX2Rpc2FibGU7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2lycV9kaXNhYmxlOgotCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCisJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBib290IGluIFBMVCBtb2RlIGZhaWxlZCBkZXNwaXRlICVkIHJldHJpZXMiLAorCQkgICAgIFdMMTI3MV9CT09UX1JFVFJJRVMpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIApAQCAtNzYyLDcgKzc5OCwyMCBAQAogc3RhdGljIGludCB3bDEyNzFfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHR4aW5mby0+Y29udHJvbC5zdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIHBlZWsgaW50byB0aGUgcmF0ZXMgY29uZmlndXJlZCBpbiB0aGUgU1RBIGVudHJ5ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJaWYgKHN0YSAmJiBzdGEtPnN1cHBfcmF0ZXNbY29uZi0+Y2hhbm5lbC0+YmFuZF0gIT0gd2wtPnN0YV9yYXRlX3NldCkgeworCQl3bC0+c3RhX3JhdGVfc2V0ID0gc3RhLT5zdXBwX3JhdGVzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1NUQV9SQVRFU19DSEFOR0VELCAmd2wtPmZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCS8qIHF1ZXVlIHRoZSBwYWNrZXQgKi8KIAlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOwogCiAJLyoKQEAgLTc4NCw3ICs4MzMsNyBAQAogCQkgKiBwcm90ZWN0ZWQuIE1heWJlIGZpeCB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzdHVwaWQKIAkJICogdmFyaWFibGUgYWx0b2dldGhlciBhbmQgY2hlY2tpbmcgdGhlIHJlYWwgcXVldWUgc3RhdGU/CiAJCSAqLwotCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IHRydWU7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwgJndsLT5mbGFncyk7CiAJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTg4MCw2ICs5MjksNyBAQAogc3RhdGljIGludCB3bDEyNzFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0cmllcyA9IFdMMTI3MV9CT09UX1JFVFJJRVM7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOwpAQCAtODkzLDMwICs5NDMsNDIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKLQlpZiAocmV0IDwgMCkKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOworCisJCXJldCA9IHdsMTI3MV9od19pbml0KHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGlycV9kaXNhYmxlOworCisJCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKKwkJd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3Bvd2VyX29mZjsKK2lycV9kaXNhYmxlOgorCQl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQkvKiBVbmxvY2tpbmcgdGhlIG11dGV4IGluIHRoZSBtaWRkbGUgb2YgaGFuZGxpbmcgaXMKKwkJICAgaW5oZXJlbnRseSB1bnNhZmUuIEluIHRoaXMgY2FzZSB3ZSBkZWVtIGl0IHNhZmUgdG8gZG8sCisJCSAgIGJlY2F1c2Ugd2UgbmVlZCB0byBsZXQgYW55IHBvc3NpYmx5IHBlbmRpbmcgSVJRIG91dCBvZgorCQkgICB0aGUgc3lzdGVtIChhbmQgd2hpbGUgd2UgYXJlIFdMMTI3MV9TVEFURV9PRkYgdGhlIElSUQorCQkgICB3b3JrIGZ1bmN0aW9uIHdpbGwgbm90IGRvIGFueXRoaW5nLikgQWxzbywgYW55IG90aGVyCisJCSAgIHBvc3NpYmxlIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aWxsIGZhaWwgZHVlIHRvIHRoZQorCQkgICBjdXJyZW50IHN0YXRlLCBoZW5jZSB0aGUgd2wxMjcxIHN0cnVjdCBzaG91bGQgYmUgc2FmZS4gKi8KKwkJY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKKwkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKK3Bvd2VyX29mZjoKKwkJd2wxMjcxX3Bvd2VyX29mZih3bCk7CisJfQogCi0JcmV0ID0gd2wxMjcxX2h3X2luaXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pcnFfZGlzYWJsZTsKLQotCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKLQotCXdsMTI3MV9pbmZvKCJmaXJtd2FyZSBib290ZWQgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2lycV9kaXNhYmxlOgotCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCisJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBib290IGZhaWxlZCBkZXNwaXRlICVkIHJldHJpZXMiLAorCQkgICAgIFdMMTI3MV9CT09UX1JFVFJJRVMpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIApAQCAtOTQ0LDExICsxMDA2LDEwIEBACiAKIAlXQVJOX09OKHdsLT5zdGF0ZSAhPSBXTDEyNzFfU1RBVEVfT04pOwogCi0JaWYgKHdsLT5zY2FubmluZykgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpKSB7CiAJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7CiAJCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOwogCX0KIAogCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CkBAIC05NzMsMTAgKzEwMzQsNyBAQAogCXdsLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAogCXdsLT5yeF9jb3VudGVyID0gMDsKLQl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7CiAJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7Ci0Jd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKIAl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTDsKIAl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9IDA7CiAJd2wtPnR4X3Jlc3VsdHNfY291bnQgPSAwOwpAQCAtOTg2LDcgKzEwNDQsOSBAQAogCXdsLT50eF9zZWN1cml0eV9zZXFfMzIgPSAwOwogCXdsLT50aW1lX29mZnNldCA9IDA7CiAJd2wtPnNlc3Npb25fY291bnRlciA9IDA7Ci0Jd2wtPmpvaW5lZCA9IGZhbHNlOworCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOworCXdsLT5mbGFncyA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKQogCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldID0gMDsKQEAgLTk5NiwxMyArMTA1NiwxMyBAQAogfQogCiBzdGF0aWMgaW50IHdsMTI3MV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gMDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGFkZCBpbnRlcmZhY2UgdHlwZSAlZCBtYWMgJXBNIiwKLQkJICAgICBjb25mLT50eXBlLCBjb25mLT5tYWNfYWRkcik7CisJCSAgICAgdmlmLT50eXBlLCB2aWYtPmFkZHIpOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAlpZiAod2wtPnZpZikgewpAQCAtMTAxMCw5ICsxMDcwLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPnZpZiA9IGNvbmYtPnZpZjsKKwl3bC0+dmlmID0gdmlmOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CiAJCWJyZWFrOwpAQCAtMTAzMiw3ICsxMDkyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIApAQCAtMTEwOSw2ICsxMTY5LDUxIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCB3bDEyNzFfam9pbl9jaGFubmVsKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgY2hhbm5lbCkKK3sKKwlpbnQgcmV0ID0gMDsKKwkvKiB3ZSBuZWVkIHRvIHVzZSBhIGR1bW15IEJTU0lEIGZvciBub3cgKi8KKwlzdGF0aWMgY29uc3QgdTggZHVtbXlfYnNzaWRbRVRIX0FMRU5dID0geyAweDBiLCAweGFkLCAweGRlLAorCQkJCQkJICAweGFkLCAweGJlLCAweGVmIH07CisKKwkvKiB0aGUgZHVtbXkgam9pbiBpcyBub3QgcmVxdWlyZWQgZm9yIGFkLWhvYyAqLworCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykKKwkJZ290byBvdXQ7CisKKwkvKiBkaXNhYmxlIG1hYyBmaWx0ZXIsIHNvIHdlIGhlYXIgZXZlcnl0aGluZyAqLworCXdsLT5yeF9jb25maWcgJj0gfkNGR19CU1NJRF9GSUxURVJfRU47CisKKwl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJbWVtY3B5KHdsLT5ic3NpZCwgZHVtbXlfYnNzaWQsIEVUSF9BTEVOKTsKKworCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2V0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfdW5qb2luX2NoYW5uZWwoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCS8qIHRvIHN0b3AgbGlzdGVuaW5nIHRvIGEgY2hhbm5lbCwgd2UgZGlzY29ubmVjdCAqLworCXJldCA9IHdsMTI3MV9jbWRfZGlzY29ubmVjdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncyk7CisJd2wtPmNoYW5uZWwgPSAwOworCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwl3bC0+cnhfY29uZmlnID0gV0wxMjcxX0RFRkFVTFRfUlhfQ09ORklHOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB3bDEyNzFfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwpAQCAtMTExNywxMCArMTIyMiwxMSBAQAogCiAJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25maWcgY2ggJWQgcHNtICVzIHBvd2VyICVkIiwKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25maWcgY2ggJWQgcHNtICVzIHBvd2VyICVkICVzIiwKIAkJICAgICBjaGFubmVsLAogCQkgICAgIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgPyAib24iIDogIm9mZiIsCi0JCSAgICAgY29uZi0+cG93ZXJfbGV2ZWwpOworCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsLAorCQkgICAgIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSA/ICJpZGxlIiA6ICJpbiB1c2UiKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKQEAgLTExMzAsMzUgKzEyMzYsNTUgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoY2hhbm5lbCAhPSB3bC0+Y2hhbm5lbCkgewotCQkvKgotCQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgc3RhY2sgd2lsbCBjb25maWd1cmUgdGhlIHJpZ2h0IGNoYW5uZWwKLQkJICogYmVmb3JlIGFzc29jaWF0aW5nLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBqb2luCi0JCSAqIGNvbW1hbmQgaGVyZS4gIFdlIHdpbGwgam9pbiB0aGUgcmlnaHQgY2hhbm5lbCB3aGVuIHRoZQotCQkgKiBCU1NJRCBjaGFuZ2VzCi0JCSAqLwotCQl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkgeworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFICYmCisJCSAgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpKQorCQkJd2wxMjcxX3Vuam9pbl9jaGFubmVsKHdsKTsKKwkJZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpKQorCQkJd2wxMjcxX2pvaW5fY2hhbm5lbCh3bCwgY2hhbm5lbCk7CisKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkgeworCQkJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJCQl3bC0+c3RhX3JhdGVfc2V0ID0gMDsKKwkJCXdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CisJCX0KIAl9CiAKLQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyAmJiAhd2wtPnBzbV9yZXF1ZXN0ZWQpIHsKLQkJd2wxMjcxX2luZm8oInBzbSBlbmFibGVkIik7CisJLyogaWYgdGhlIGNoYW5uZWwgY2hhbmdlcyB3aGlsZSBqb2luZWQsIGpvaW4gYWdhaW4gKi8KKwlpZiAoY2hhbm5lbCAhPSB3bC0+Y2hhbm5lbCAmJgorCSAgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpKSB7CisJCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwkJLyogRklYTUU6IG1heWJlIHVzZSBDTURfQ0hBTk5FTF9TV0lUQ0ggZm9yIHRoaXM/ICovCisJCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJd2wxMjcxX3dhcm5pbmcoImNtZCBqb2luIHRvIHVwZGF0ZSBjaGFubmVsIGZhaWxlZCAlZCIsCisJCQkJICAgICAgIHJldCk7CisJfSBlbHNlCisJCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKIAotCQl3bC0+cHNtX3JlcXVlc3RlZCA9IHRydWU7CisJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYKKwkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKSB7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncyk7CiAKIAkJLyoKIAkJICogV2UgZW50ZXIgUFNNIG9ubHkgaWYgd2UncmUgYWxyZWFkeSBhc3NvY2lhdGVkLgogCQkgKiBJZiB3ZSdyZSBub3QsIHdlJ2xsIGVudGVyIGl0IHdoZW4gam9pbmluZyBhbiBTU0lELAogCQkgKiB0aHJvdWdoIHRoZSBic3NfaW5mb19jaGFuZ2VkKCkgaG9vay4KIAkJICovCi0JCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOworCQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKSB7CisJCQl3bDEyNzFfaW5mbygicHNtIGVuYWJsZWQiKTsKKwkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUsCisJCQkJCQkgdHJ1ZSk7CisJCX0KIAl9IGVsc2UgaWYgKCEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKLQkJICAgd2wtPnBzbV9yZXF1ZXN0ZWQpIHsKKwkJICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKIAkJd2wxMjcxX2luZm8oInBzbSBkaXNhYmxlZCIpOwogCi0JCXdsLT5wc21fcmVxdWVzdGVkID0gZmFsc2U7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKIAotCQlpZiAod2wtPnBzbSkKLQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKQorCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLAorCQkJCQkJIHRydWUpOwogCX0KIAogCWlmIChjb25mLT5wb3dlcl9sZXZlbCAhPSB3bC0+cG93ZXJfbGV2ZWwpIHsKQEAgLTEzNTAsOSArMTQ3NiwyNCBAQAogCQkJd2wxMjcxX2Vycm9yKCJDb3VsZCBub3QgYWRkIG9yIHJlcGxhY2Uga2V5Iik7CiAJCQlnb3RvIG91dF9zbGVlcDsKIAkJfQorCisJCS8qIHRoZSBkZWZhdWx0IFdFUCBrZXkgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBhdCBsZWFzdCBvbmNlICovCisJCWlmIChrZXlfdHlwZSA9PSBLRVlfV0VQKSB7CisJCQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsCisJCQkJCQkJICAgICB3bC0+ZGVmYXVsdF9rZXkpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIERJU0FCTEVfS0VZOgorCQkvKiBUaGUgd2wxMjcxIGRvZXMgbm90IGFsbG93IHRvIHJlbW92ZSB1bmljYXN0IGtleXMgLSB0aGV5CisJCSAgIHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IG9uIG5leHQgQ01EX0pPSU4uIElnbm9yZSB0aGUKKwkJICAgcmVxdWVzdCBzaWxlbnRseSwgYXMgd2UgZG9udCB3YW50IHRoZSBtYWM4MDIxMSB0byBlbWl0CisJCSAgIGFuIGVycm9yIG1lc3NhZ2UuICovCisJCWlmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlicmVhazsKKwogCQlyZXQgPSB3bDEyNzFfY21kX3NldF9rZXkod2wsIEtFWV9SRU1PVkUsCiAJCQkJCSBrZXlfY29uZi0+a2V5aWR4LCBrZXlfdHlwZSwKIAkJCQkJIGtleV9jb25mLT5rZXlsZW4sIGtleV9jb25mLT5rZXksCkBAIC0xNDQwLDIwICsxNTgxLDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHUzMiB3bDEyNzFfZW5hYmxlZF9yYXRlc19nZXQoc3RydWN0IHdsMTI3MSAqd2wsIHU2NCBiYXNpY19yYXRlX3NldCkKK3N0YXRpYyB2b2lkIHdsMTI3MV9zc2lkX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKmJlYWNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwotCXUzMiBlbmFibGVkX3JhdGVzID0gMDsKLQlpbnQgYml0OworCXU4ICpwdHIgPSBiZWFjb24tPmRhdGEgKworCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKIAotCWJhbmQgPSB3bC0+aHctPndpcGh5LT5iYW5kc1t3bC0+YmFuZF07Ci0JZm9yIChiaXQgPSAwOyBiaXQgPCBiYW5kLT5uX2JpdHJhdGVzOyBiaXQrKykgewotCQlpZiAoYmFzaWNfcmF0ZV9zZXQgJiAweDEpCi0JCQllbmFibGVkX3JhdGVzIHw9IGJhbmQtPmJpdHJhdGVzW2JpdF0uaHdfdmFsdWU7Ci0JCWJhc2ljX3JhdGVfc2V0ID4+PSAxOworCS8qIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzc2lkIGluIHRoZSBiZWFjb24gKi8KKwl3aGlsZSAocHRyIDwgYmVhY29uLT5kYXRhICsgYmVhY29uLT5sZW4pIHsKKwkJaWYgKHB0clswXSA9PSBXTEFOX0VJRF9TU0lEKSB7CisJCQl3bC0+c3NpZF9sZW4gPSBwdHJbMV07CisJCQltZW1jcHkod2wtPnNzaWQsIHB0cisyLCB3bC0+c3NpZF9sZW4pOworCQkJcmV0dXJuOworCQl9CisJCXB0ciArPSBwdHJbMV07CiAJfQotCi0JcmV0dXJuIGVuYWJsZWRfcmF0ZXM7CisJd2wxMjcxX2Vycm9yKCJhZC1ob2MgYmVhY29uIHRlbXBsYXRlIGhhcyBubyBTU0lEIVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTQ2Myw2ICsxNjA1LDcgQEAKIHsKIAllbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlOwogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJYm9vbCBkb19qb2luID0gZmFsc2U7CiAJaW50IHJldDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGJzcyBpbmZvIGNoYW5nZWQiKTsKQEAgLTE0NzMsOSArMTYxNiw2NyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAorCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykgeworCQkvKiBGSVhNRTogVGhpcyBpbXBsZW1lbnRzIHJ1ZGltZW50YXJ5IGFkLWhvYyBzdXBwb3J0IC0KKwkJICAgcHJvcGVyIHRlbXBsYXRlcyBhcmUgb24gdGhlIHdpc2ggbGlzdCBhbmQgbm90aWZpY2F0aW9uCisJCSAgIG9uIHdoZW4gdGhleSBjaGFuZ2UuIFRoaXMgcGF0Y2ggd2lsbCB1cGRhdGUgdGhlIHRlbXBsYXRlcworCQkgICBvbiBldmVyeSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uICovCisJCXN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKworCQlpZiAoYmVhY29uKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCisJCQl3bDEyNzFfc3NpZF9zZXQod2wsIGJlYWNvbik7CisJCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0JFQUNPTiwKKwkJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7CisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisKKwkJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBiZWFjb24tPmRhdGE7CisJCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKKwkJCQlJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCisJCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwKKwkJCQkJCSAgICAgIENNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKwkJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCisJCQkvKiBOZWVkIHRvIHVwZGF0ZSB0aGUgU1NJRCAoZm9yIGZpbHRlcmluZyBldGMpICovCisJCQlkb19qb2luID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSAmJgorCSAgICAvKgorCSAgICAgKiBOb3cgd2Uga25vdyB0aGUgY29ycmVjdCBic3NpZCwgc28gd2Ugc2VuZCBhIG5ldyBqb2luIGNvbW1hbmQKKwkgICAgICogYW5kIGVuYWJsZSB0aGUgQlNTSUQgZmlsdGVyCisJICAgICAqLworCSAgICBtZW1jbXAod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfQlNTSURfRklMVEVSX0VOOworCQkJbWVtY3B5KHdsLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YSh3bCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXdsMTI3MV93YXJuaW5nKCJjbWQgYnVsZCBudWxsIGRhdGEgZmFpbGVkICVkIiwKKwkJCQkJICAgICAgIHJldCk7CisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisKKwkJCS8qIE5lZWQgdG8gdXBkYXRlIHRoZSBCU1NJRCAoZm9yIGZpbHRlcmluZyBldGMpICovCisJCQlkb19qb2luID0gdHJ1ZTsKKwl9CisKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKIAkJCXdsLT5haWQgPSBic3NfY29uZi0+YWlkOworCQkJc2V0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncyk7CiAKIAkJCS8qCiAJCQkgKiB3aXRoIHdsMTI3MSwgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlCkBAIC0xNDkyLDE1ICsxNjkzLDE2IEBACiAJCQkJZ290byBvdXRfc2xlZXA7CiAKIAkJCS8qIElmIHdlIHdhbnQgdG8gZ28gaW4gUFNNIGJ1dCB3ZSdyZSBub3QgdGhlcmUgeWV0ICovCi0JCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYgIXdsLT5wc20pIHsKKwkJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKSAmJgorCQkJICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CiAJCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOwotCQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgbW9kZSk7CisJCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBtb2RlLCB0cnVlKTsKIAkJCQlpZiAocmV0IDwgMCkKIAkJCQkJZ290byBvdXRfc2xlZXA7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiB1c2UgZGVmYXVsdHMgd2hlbiBub3QgYXNzb2NpYXRlZCAqLwotCQkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gV0wxMjcxX0RFRkFVTFRfQkFTSUNfUkFURV9TRVQ7CisJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpOwogCQkJd2wtPmFpZCA9IDA7CiAJCX0KIApAQCAtMTUzNSwxNSArMTczNywxMyBAQAogCQl9CiAJfQogCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgewotCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSB3bDEyNzFfZW5hYmxlZF9yYXRlc19nZXQoCi0JCQl3bCwgYnNzX2NvbmYtPmJhc2ljX3JhdGVzKTsKLQotCQlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wsIHdsLT5iYXNpY19yYXRlX3NldCk7CisJaWYgKGRvX2pvaW4pIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV93YXJuaW5nKCJTZXQgcmF0ZSBwb2xpY2llcyBmYWlsZWQgJWQiLCByZXQpOworCQkJd2wxMjcxX3dhcm5pbmcoImNtZCBqb2luIGZhaWxlZCAlZCIsIHJldCk7CiAJCQlnb3RvIG91dF9zbGVlcDsKIAkJfQorCQlzZXRfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncyk7CiAJfQogCiBvdXRfc2xlZXA6CkBAIC0xNTUzLDYgKzE3NTMsNDMgQEAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZiB0eCAlZCIsIHF1ZXVlKTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCXBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwKKwkJCQlwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQkgQ09ORl9DSEFOTkVMX1RZUEVfRURDRiwKKwkJCQkgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJIENPTkZfUFNfU0NIRU1FX0xFR0FDWV9QU1BPTEwsCisJCQkJIENPTkZfQUNLX1BPTElDWV9MRUdBQ1ksIDAsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwogCiAvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMjcxX3JhdGVzW10gPSB7CkBAIC0xNTk5LDE5ICsxODM2LDE5IEBACiAKIC8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB3bDEyNzFfY2hhbm5lbHNbXSA9IHsKLQl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTJ9LAotCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxN30sCi0JeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyfSwKLQl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0Mjd9LAotCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMn0sCi0JeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3fSwKLQl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDJ9LAotCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0N30sCi0JeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyfSwKLQl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3fSwKLQl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyfSwKLQl7IC5od192YWx1ZSA9IDEyLCAuY2VudGVyX2ZyZXEgPSAyNDY3fSwKLQl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyfSwKKwl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxNywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0NywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDEyLCAuY2VudGVyX2ZyZXEgPSAyNDY3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyLCAubWF4X3Bvd2VyID0gMjUgfSwKIH07CiAKIC8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwpAQCAtMTcxOCw2ICsxOTU1LDggQEAKIAkuaHdfc2NhbiA9IHdsMTI3MV9vcF9od19zY2FuLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjcxX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkLAorCS5jb25mX3R4ID0gd2wxMjcxX29wX2NvbmZfdHgsCisJQ0ZHODAyMTFfVEVTVE1PREVfQ01EKHdsMTI3MV90bV9jbWQpCiB9OwogCiBzdGF0aWMgaW50IHdsMTI3MV9yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKQEAgLTE3NTcsNyArMTk5Niw4IEBACiAJCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTOwogCi0Jd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwogCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI3MV9iYW5kXzJnaHo7CiAKQEAgLTE3ODUsMjQgKzIwMjUsMTcgQEAKIH07CiAKICNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfQ0hBTk5FTCAwCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfaHcgKndsMTI3MV9hbGxvY19odyh2b2lkKQogewotCXN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHdsMTI3MSAqd2w7Ci0JaW50IHJldCwgaTsKLQlzdGF0aWMgY29uc3QgdTggbm9raWFfb3VpWzNdID0gezB4MDAsIDB4MWYsIDB4ZGZ9OwotCi0JcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghcGRhdGEpIHsKLQkJd2wxMjcxX2Vycm9yKCJubyBwbGF0Zm9ybSBkYXRhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlpbnQgaTsKIAogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqd2wpLCAmd2wxMjcxX29wcyk7CiAJaWYgKCFodykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAogCXdsID0gaHctPnByaXY7CkBAIC0xODExLDQ0ICsyMDQ0LDgwIEBACiAJSU5JVF9MSVNUX0hFQUQoJndsLT5saXN0KTsKIAogCXdsLT5odyA9IGh3OwotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdsKTsKLQl3bC0+c3BpID0gc3BpOwogCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZ3bC0+ZWxwX3dvcmssIHdsMTI3MV9lbHBfd29yayk7CiAJd2wtPmNoYW5uZWwgPSBXTDEyNzFfREVGQVVMVF9DSEFOTkVMOwotCXdsLT5zY2FubmluZyA9IGZhbHNlOwogCXdsLT5kZWZhdWx0X2tleSA9IDA7CiAJd2wtPnJ4X2NvdW50ZXIgPSAwOwogCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CiAJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKLQl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7Ci0Jd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKIAl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwotCXdsLT5iYXNpY19yYXRlX3NldCA9IFdMMTI3MV9ERUZBVUxUX0JBU0lDX1JBVEVfU0VUOworCXdsLT5iYXNpY19yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOwogCXdsLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAl3bC0+dmlmID0gTlVMTDsKLQl3bC0+am9pbmVkID0gZmFsc2U7CisJd2wtPmZsYWdzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBQ1hfVFhfREVTQ1JJUFRPUlM7IGkrKykKIAkJd2wtPnR4X2ZyYW1lc1tpXSA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaW5pdCgmd2wtPndsX2xvY2spOwogCi0JLyoKLQkgKiBJbiBjYXNlIG91ciBNQUMgYWRkcmVzcyBpcyBub3QgY29ycmVjdGx5IHNldCwKLQkgKiB3ZSB1c2UgYSByYW5kb20gYnV0IE5va2lhIE1BQy4KLQkgKi8KLQltZW1jcHkod2wtPm1hY19hZGRyLCBub2tpYV9vdWksIDMpOwotCWdldF9yYW5kb21fYnl0ZXMod2wtPm1hY19hZGRyICsgMywgMyk7Ci0KIAl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT0ZGOwogCW11dGV4X2luaXQoJndsLT5tdXRleCk7CiAKKwkvKiBBcHBseSBkZWZhdWx0IGRyaXZlciBjb25maWd1cmF0aW9uLiAqLworCXdsMTI3MV9jb25mX2luaXQod2wpOworCisJcmV0dXJuIGh3OworfQorCitpbnQgd2wxMjcxX2ZyZWVfaHcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKKworCXdsMTI3MV9kZWJ1Z2ZzX2V4aXQod2wpOworCisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwl2ZnJlZSh3bC0+ZncpOworCXdsLT5mdyA9IE5VTEw7CisJa2ZyZWUod2wtPm52cyk7CisJd2wtPm52cyA9IE5VTEw7CisKKwlrZnJlZSh3bC0+Zndfc3RhdHVzKTsKKwlrZnJlZSh3bC0+dHhfcmVzX2lmKTsKKworCWllZWU4MDIxMV9mcmVlX2h3KHdsLT5odyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgd2wxMjcxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJd2wxMjcxX2Vycm9yKCJubyBwbGF0Zm9ybSBkYXRhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWh3ID0gd2wxMjcxX2FsbG9jX2h3KCk7CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCXdsID0gaHctPnByaXY7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB3bCk7CisJd2wtPnNwaSA9IHNwaTsKKwogCS8qIFRoaXMgaXMgdGhlIG9ubHkgU1BJIHZhbHVlIHRoYXQgd2UgbmVlZCB0byBzZXQgaGVyZSwgdGhlIHJlc3QKIAkgKiBjb21lcyBmcm9tIHRoZSBib2FyZC1wZXJpcGhlcmFscyBmaWxlICovCiAJc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7CkBAIC0xODkwLDkgKzIxNTksNiBAQAogCX0KIAlkZXZfc2V0X2RydmRhdGEoJndsMTI3MV9kZXZpY2UuZGV2LCB3bCk7CiAKLQkvKiBBcHBseSBkZWZhdWx0IGRyaXZlciBjb25maWd1cmF0aW9uLiAqLwotCXdsMTI3MV9jb25mX2luaXQod2wpOwotCiAJcmV0ID0gd2wxMjcxX2luaXRfaWVlZTgwMjExKHdsKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wbGF0Zm9ybTsKQEAgLTE5MjMsMjEgKzIxODksMTAgQEAKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKLQotCXdsMTI3MV9kZWJ1Z2ZzX2V4aXQod2wpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ3bDEyNzFfZGV2aWNlKTsKIAlmcmVlX2lycSh3bC0+aXJxLCB3bCk7Ci0Ja2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKLQl2ZnJlZSh3bC0+ZncpOwotCXdsLT5mdyA9IE5VTEw7Ci0Ja2ZyZWUod2wtPm52cyk7Ci0Jd2wtPm52cyA9IE5VTEw7CiAKLQlrZnJlZSh3bC0+Zndfc3RhdHVzKTsKLQlrZnJlZSh3bC0+dHhfcmVzX2lmKTsKLQotCWllZWU4MDIxMV9mcmVlX2h3KHdsLT5odyk7CisJd2wxMjcxX2ZyZWVfaHcod2wpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMKaW5kZXggNTA3Y2Q5MS4uZTJiMWViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKICNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2lvLmgiCiAKICNkZWZpbmUgV0wxMjcxX1dBS0VVUF9USU1FT1VUIDUwMAogCkBAIC0zOSwxMiArNDAsMTMgQEAKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKLQlpZiAod2wtPmVscCB8fCAhd2wtPnBzbSkKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkKIAkJZ290byBvdXQ7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiY2hpcCB0byBlbHAiKTsKIAl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgRUxQQ1RSTF9TTEVFUCk7Ci0Jd2wtPmVscCA9IHRydWU7CisJc2V0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwpAQCAtNTUsNyArNTcsNyBAQAogLyogUm91dGluZXMgdG8gdG9nZ2xlIHNsZWVwIG1vZGUgd2hpbGUgaW4gRUxQICovCiB2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0JaWYgKHdsLT5wc20pIHsKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkgewogCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bC0+ZWxwX3dvcmspOwogCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywKIAkJCQkJbXNlY3NfdG9famlmZmllcyhFTFBfRU5UUllfREVMQVkpKTsKQEAgLTcwLDcgKzcyLDcgQEAKIAl1MzIgc3RhcnRfdGltZSA9IGppZmZpZXM7CiAJYm9vbCBwZW5kaW5nID0gZmFsc2U7CiAKLQlpZiAoIXdsLT5lbHApCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOwpAQCAtMTAxLDcgKzEwMyw3IEBACiAJCX0KIAl9CiAKLQl3bC0+ZWxwID0gZmFsc2U7CisJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncyk7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAid2FrZXVwIHRpbWU6ICV1IG1zIiwKIAkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydF90aW1lKSk7CkBAIC0xMTcsNyArMTE5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSkKK2ludCB3bDEyNzFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGUsCisJCSAgICAgICBib29sIHNlbmQpCiB7CiAJaW50IHJldDsKIApAQCAtMTI1LDI1ICsxMjgsMTEgQEAKIAljYXNlIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOgogCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiZW50ZXJpbmcgcHNtIik7CiAKLQkJLyogZW5hYmxlIGJlYWNvbiBmaWx0ZXJpbmcgKi8KLQkJcmV0ID0gd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCwgdHJ1ZSk7CisJCXJldCA9IHdsMTI3MV9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUsIHNlbmQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogZW5hYmxlIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiAqLwotCQlyZXQgPSB3bDEyNzFfYWN4X2JldF9lbmFibGUod2wsIHRydWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gd2wxMjcxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXdsLT5wc20gPSAxOworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVElPTl9BQ1RJVkVfTU9ERToKIAlkZWZhdWx0OgpAQCAtMTYyLDExICsxNTEsMTEgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IHdsMTI3MV9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCXJldCA9IHdsMTI3MV9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwgc2VuZCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQl3bC0+cHNtID0gMDsKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncyk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oCmluZGV4IDc3OTY1M2QuLjk0MDI3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmgKQEAgLTI3LDcgKzI3LDggQEAKICNpbmNsdWRlICJ3bDEyNzEuaCIKICNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCiAKLWludCB3bDEyNzFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGUpOworaW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSwKKwkJICAgICAgIGJvb2wgc2VuZCk7CiB2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGNoaXBfYXdha2UpOwogdm9pZCB3bDEyNzFfZWxwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3JlZy5oCmluZGV4IDFmMjM3MzguLjk5MDk2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaApAQCAtNjIsNzMgKzYyLDEwIEBACiAjZGVmaW5lIFdMMTI3MV9TTFZfUkVHX0RBVEEgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMDgpCiAjZGVmaW5lIFdMMTI3MV9TTFZfUkVHX0FEQVRBICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMGMpCiAjZGVmaW5lIFdMMTI3MV9TTFZfTUVNX0RBVEEgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMTgpCi0vKgotICogSW50ZXJydXB0IHJlZ2lzdGVycy4KLSAqIDY0IGJpdCBpbnRlcnJ1cHQgc291cmNlcyByZWdpc3RlcnMgd3MgY2VkLgotICogc21lIGludGVydXB0cyB3ZXJlIHJlbW92ZWQgYW5kIG5ldyBvbmVzIHdlcmUgYWRkZWQuCi0gKiBPcmRlciB3YXMgY2hhbmdlZC4KLSAqLwotI2RlZmluZSBGSVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDAwKQotI2RlZmluZSBGSVFfTUFTS19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDAwKQotI2RlZmluZSBGSVFfTUFTS19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA0KQotI2RlZmluZSBGSVFfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA4KQotI2RlZmluZSBGSVFfTUFTS19TRVRfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA4KQotI2RlZmluZSBGSVFfTUFTS19TRVRfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDBDKQotI2RlZmluZSBGSVFfTUFTS19DTFIgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDEwKQotI2RlZmluZSBGSVFfTUFTS19DTFJfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDEwKQotI2RlZmluZSBGSVFfTUFTS19DTFJfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE0KQotI2RlZmluZSBJUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE4KQotI2RlZmluZSBJUlFfTUFTS19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE4KQotI2RlZmluZSBJUlFfTUFTS19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDFDKQotI2RlZmluZSBJUlFfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDIwKQotI2RlZmluZSBJUlFfTUFTS19TRVRfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDIwKQotI2RlZmluZSBJUlFfTUFTS19TRVRfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI0KQotI2RlZmluZSBJUlFfTUFTS19DTFIgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI4KQotI2RlZmluZSBJUlFfTUFTS19DTFJfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI4KQotI2RlZmluZSBJUlFfTUFTS19DTFJfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDJDKQotI2RlZmluZSBFQ1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQ4KQotI2RlZmluZSBGSVFfU1RTX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDRDKQotI2RlZmluZSBGSVFfU1RTX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDUwKQotI2RlZmluZSBJUlFfU1RTX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDU0KQotI2RlZmluZSBJUlFfU1RTX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDU4KQotI2RlZmluZSBJTlRfU1RTX05EICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY0KQotI2RlZmluZSBJTlRfU1RTX1JBV19MICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY0KQotI2RlZmluZSBJTlRfU1RTX1JBV19IICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY4KQotI2RlZmluZSBJTlRfU1RTX0NMUiAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI0KQotI2RlZmluZSBJTlRfU1RTX0NMUl9MICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI0KQotI2RlZmluZSBJTlRfU1RTX0NMUl9IICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI4KQotI2RlZmluZSBJTlRfQUNLICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDZDKQotI2RlZmluZSBJTlRfQUNLX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDZDKQotI2RlZmluZSBJTlRfQUNLX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDcwKQotI2RlZmluZSBJTlRfVFJJRyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQotI2RlZmluZSBJTlRfVFJJR19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQotI2RlZmluZSBJTlRfVFJJR19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc4KQotI2RlZmluZSBIT1NUX1NUU19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDVDKQotI2RlZmluZSBIT1NUX1NUU19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDYwKQotI2RlZmluZSBIT1NUX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDMwKQotI2RlZmluZSBIT1NUX01BU0tfTCAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDMwKQotI2RlZmluZSBIT1NUX01BU0tfSCAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM0KQotI2RlZmluZSBIT1NUX01BU0tfU0VUICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM4KQotI2RlZmluZSBIT1NUX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM4KQotI2RlZmluZSBIT1NUX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDNDKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQwKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQwKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQ0KQogCiAjZGVmaW5lIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzQpCiAjZGVmaW5lIEFDWF9SRUdfSU5URVJSVVBUX1RSSUdfSCAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzgpCiAKLS8qIEhvc3QgSW50ZXJydXB0cyovCi0jZGVmaW5lIEhJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0OTQpCi0jZGVmaW5lIEhJTlRfTUFTS19TRVQgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0OTgpCi0jZGVmaW5lIEhJTlRfTUFTS19DTFIgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0OUMpCi0jZGVmaW5lIEhJTlRfU1RTX05EX01BU0tFRCAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTApCi0vKjExNTAgc3BlYyBjYWxscyB0aGlzIEhJTlRfU1RTX1JBVyovCi0jZGVmaW5lIEhJTlRfU1RTX05ECQkgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEIwKQotI2RlZmluZSBISU5UX1NUU19DTFIgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEE0KQotI2RlZmluZSBISU5UX0FDSyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEE4KQotI2RlZmluZSBISU5UX1RSSUcgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEFDKQotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBIb3N0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0gMzJiaXQgKFJXKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzMywxNiArMzcwLDYgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFBoeSByZWdzCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBBQ1hfUEhZX0FERFJfUkVHICAgICAgICAgICAgICAgIFNCQl9BRERSCi0jZGVmaW5lIEFDWF9QSFlfREFUQV9SRUcgICAgICAgICAgICAgICAgU0JCX0RBVEEKLSNkZWZpbmUgQUNYX1BIWV9DVFJMX1JFRyAgICAgICAgICAgICAgICBTQkJfQ1RMCi0jZGVmaW5lIEFDWF9QSFlfUkVHX1dSX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMXVsCi0jZGVmaW5lIEFDWF9QSFlfUkVHX1JEX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMnVsCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIEVFUFJPTSBSZWFkL1dyaXRlIFJlcXVlc3QgMzJiaXQgUlcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAxIEVFX1JFQUQgLSBFRVBST00gUmVhZCBSZXF1ZXN0IDEgLSBTZXR0aW5nIHRoaXMgYml0CkBAIC01MTEsMjggKzQzOCw2IEBACiAjZGVmaW5lIEFDWF9DT05UX1dJTkRfTUlOX01BU0sgICAweDAwMDAwMDdmCiAjZGVmaW5lIEFDWF9DT05UX1dJTkRfTUFYICAgICAgICAweDAzZmYwMDAwCiAKLS8qCi0gKiBJbmRpcmVjdCBzbGF2ZSByZWdpc3Rlci9tZW1vcnkgcmVnaXN0ZXJzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgSFdfU0xBVkVfUkVHX0FERFJfUkVHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEhXX1NMQVZFX1JFR19EQVRBX1JFRwkJMHgwMDAwMDAwOAotI2RlZmluZSBIV19TTEFWRV9SRUdfQ1RSTF9SRUcJCTB4MDAwMDAwMGMKLQotI2RlZmluZSBTTEFWRV9BVVRPX0lOQwkJCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNMQVZFX05PX0FVVE9fSU5DCQkJMHgwMDAwMDAwMAotI2RlZmluZSBTTEFWRV9IT1NUX0xJVFRMRV9FTkRJQU4JMHgwMDAwMDAwMAotCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9BRERSX1JFRwkJU0xWX01FTV9BRERSCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9EQVRBX1JFRwkJU0xWX01FTV9EQVRBCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9DVFJMX1JFRwkJU0xWX01FTV9DVEwKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0VORElBTl9SRUcJCVNMVl9FTkRfQ1RMCi0KLSNkZWZpbmUgSFdfRlVOQ19FVkVOVF9JTlRfRU4JCTB4ODAwMAotI2RlZmluZSBIV19GVU5DX0VWRU5UX01BU0tfUkVHCQkweDAwMDAwMDM0Ci0KLSNkZWZpbmUgQUNYX01BQ19USU1FU1RBTVBfUkVHCShNQUNfVElNRVNUQU1QKQotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEhJX0NGRyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBWYWx1ZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NDcsMTAgKzU1Miw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2RlZmluZSBUTkVUVzEyNTFfQ0hJUF9JRF9QRzFfMCAgICAgICAgIDB4MDcwMTAxMDEKLSNkZWZpbmUgVE5FVFcxMjUxX0NISVBfSURfUEcxXzEgICAgICAgICAweDA3MDIwMTAxCi0jZGVmaW5lIFRORVRXMTI1MV9DSElQX0lEX1BHMV8yCSAgICAgICAgMHgwNzAzMDEwMQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgICAgSW50ZXJydXB0IFRyaWdnZXIgUmVnaXN0ZXIgKEhvc3QgLT4gV2lMaW5rKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jCmluZGV4IGNhNjQ1ZjMuLjY3MzBmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCiAjaW5jbHVkZSAid2wxMjcxX3J4LmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgogCiBzdGF0aWMgdTggd2wxMjcxX3J4X2dldF9tZW1fYmxvY2soc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cywKIAkJCQkgIHUzMiBkcnZfcnhfY291bnRlcikKQEAgLTE2Niw3ICsxNjcsNyBAQAogCX0KIAogCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCXdsMTI3MV9zcGlfcmVhZCh3bCwgV0wxMjcxX1NMVl9NRU1fREFUQSwgYnVmLCBsZW5ndGgsIHRydWUpOworCXdsMTI3MV9yZWFkKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBidWYsIGxlbmd0aCwgdHJ1ZSk7CiAKIAkvKiB0aGUgZGF0YSByZWFkIHN0YXJ0cyB3aXRoIHRoZSBkZXNjcmlwdG9yICovCiAJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKikgYnVmOwpAQCAtMjEwLDE1ICsyMTEsMTMgQEAKIAkJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHIgKyA0OwogCiAJCS8qIENob29zZSB0aGUgYmxvY2sgd2Ugd2FudCB0byByZWFkICovCi0JCXdsMTI3MV9zcGlfd3JpdGUod2wsIFdMMTI3MV9TTFZfUkVHX0RBVEEsCi0JCQkJICZ3bC0+cnhfbWVtX3Bvb2xfYWRkciwKLQkJCQkgc2l6ZW9mKHdsLT5yeF9tZW1fcG9vbF9hZGRyKSwgZmFsc2UpOworCQl3bDEyNzFfd3JpdGUod2wsIFdMMTI3MV9TTFZfUkVHX0RBVEEsICZ3bC0+cnhfbWVtX3Bvb2xfYWRkciwKKwkJCSAgICAgc2l6ZW9mKHdsLT5yeF9tZW1fcG9vbF9hZGRyKSwgZmFsc2UpOwogCiAJCXdsMTI3MV9yeF9oYW5kbGVfZGF0YSh3bCwgYnVmX3NpemUpOwogCiAJCXdsLT5yeF9jb3VudGVyKys7CiAJCWRydl9yeF9jb3VudGVyID0gd2wtPnJ4X2NvdW50ZXIgJiBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7CisJCXdsMTI3MV93cml0ZTMyKHdsLCBSWF9EUklWRVJfQ09VTlRFUl9BRERSRVNTLCB3bC0+cnhfY291bnRlcik7CiAJfQotCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBSWF9EUklWRVJfQ09VTlRFUl9BRERSRVNTLCB3bC0+cnhfY291bnRlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYwppbmRleCAwMjk3OGExLi42N2E4MjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKQEAgLTMwLDI4ICszMCw2IEBACiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgogCi1zdGF0aWMgaW50IHdsMTI3MV90cmFuc2xhdGVfYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCi17Ci0JLyoKLQkgKiBUbyB0cmFuc2xhdGUsIGZpcnN0IGNoZWNrIHRvIHdoaWNoIHdpbmRvdyBvZiBhZGRyZXNzZXMgdGhlCi0JICogcGFydGljdWxhciBhZGRyZXNzIGJlbG9uZ3MuIFRoZW4gc3VidHJhY3QgdGhlIHN0YXJ0aW5nIGFkZHJlc3MKLQkgKiBvZiB0aGF0IHdpbmRvdyBmcm9tIHRoZSBhZGRyZXNzLiBUaGVuLCBhZGQgb2Zmc2V0IG9mIHRoZQotCSAqIHRyYW5zbGF0ZWQgcmVnaW9uLgotCSAqCi0JICogVGhlIHRyYW5zbGF0ZWQgcmVnaW9ucyBvY2N1ciBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcGh5c2ljYWwgZGV2aWNlCi0JICogbWVtb3J5LCBzbyBqdXN0IGFkZCB0aGUgc2l6ZXMgb2YgdGhlIHByZWNlZWRpbmcgYWRkcmVzcyByZWdpb25zIHRvCi0JICogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIG5ldyByZWdpb24uCi0JICoKLQkgKiBDdXJyZW50bHksIG9ubHkgdGhlIHR3byBmaXJzdCByZWdpb25zIGFyZSBhZGRyZXNzZWQsIGFuZCB0aGUKLQkgKiBhc3N1bXB0aW9uIGlzIHRoYXQgYWxsIGFkZHJlc3NlcyB3aWxsIGZhbGwgaW50byBlaXRoZXIgb2YgdGhvc2UKLQkgKiB0d28uCi0JICovCi0JaWYgKChhZGRyID49IHdsLT5wYXJ0LnJlZy5zdGFydCkgJiYKLQkgICAgKGFkZHIgPCB3bC0+cGFydC5yZWcuc3RhcnQgKyB3bC0+cGFydC5yZWcuc2l6ZSkpCi0JCXJldHVybiBhZGRyIC0gd2wtPnBhcnQucmVnLnN0YXJ0ICsgd2wtPnBhcnQubWVtLnNpemU7Ci0JZWxzZQotCQlyZXR1cm4gYWRkciAtIHdsLT5wYXJ0Lm1lbS5zdGFydDsKLX0KIAogdm9pZCB3bDEyNzFfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQogewpAQCAtMTMzLDY3ICsxMTEsNiBAQAogCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSBpbml0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOwogfQogCi0vKiBTZXQgdGhlIFNQSSBwYXJ0aXRpb25zIHRvIGFjY2VzcyB0aGUgY2hpcCBhZGRyZXNzZXMKLSAqCi0gKiBUbyBzaW1wbGlmeSBkcml2ZXIgY29kZSwgYSBmaXhlZCAodmlydHVhbCkgbWVtb3J5IG1hcCBpcyBkZWZpbmVkIGZvcgotICogcmVnaXN0ZXIgYW5kIG1lbW9yeSBhZGRyZXNzZXMuIEJlY2F1c2UgaW4gdGhlIGNoaXBzZXQsIGluIGRpZmZlcmVudCBzdGFnZXMKLSAqIG9mIG9wZXJhdGlvbiwgdGhvc2UgYWRkcmVzc2VzIHdpbGwgbW92ZSBhcm91bmQsIGFuIGFkZHJlc3MgdHJhbnNsYXRpb24KLSAqIG1lY2hhbmlzbSBpcyByZXF1aXJlZC4KLSAqCi0gKiBUaGVyZSBhcmUgZm91ciBwYXJ0aXRpb25zICh0aHJlZSBtZW1vcnkgYW5kIG9uZSByZWdpc3RlciBwYXJ0aXRpb24pLAotICogd2hpY2ggYXJlIG1hcHBlZCB0byB0d28gZGlmZmVyZW50IGFyZWFzIG9mIHRoZSBoYXJkd2FyZSBtZW1vcnkuCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWwgYWRkcmVzcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UKLSAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gbWVtLnN0YXJ0Ci0gKiAgICAgICAgICBQaHlzaWNhbCBhZGRyZXNzICAgIC4uLiAgIHwgICAgfAotICogICAgICAgICAgICAgICBzcGFjZSAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMF0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgfCAgICB8Ci0gKiAgMDAwMDAwMDAgIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiBtZW0uc3RhcnQgKyBtZW0uc2l6ZQotICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfE1FTSB8ICAgICAgLi4uICAgICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAotICogIG1lbS5zaXplICA8LS0rLS0tLSsuLi4gICAgICAgICAgICB8ICAgIHwge3VudXNlZCBhcmVhKQotICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfFJFRyB8ICAgICAgLi4uICAgICAgfCAgICB8Ci0gKiAgbWVtLnNpemUgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAotICogICAgICArICAgICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gcmVnLnN0YXJ0Ci0gKiAgcmVnLnNpemUgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICB8TUVNMnwgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMV0KLSAqICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiByZWcuc3RhcnQgKyByZWcuc2l6ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKLSAqCi0gKi8KLWludCB3bDEyNzFfc2V0X3BhcnRpdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCSBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgKnApCi17Ci0JLyogY29weSBwYXJ0aXRpb24gaW5mbyAqLwotCW1lbWNweSgmd2wtPnBhcnQsIHAsIHNpemVvZigqcCkpOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAotCQkgICAgIHAtPm1lbS5zdGFydCwgcC0+bWVtLnNpemUpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKLQkJICAgICBwLT5yZWcuc3RhcnQsIHAtPnJlZy5zaXplKTsKLQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtMl9zdGFydCAlMDhYIG1lbTJfc2l6ZSAlMDhYIiwKLQkJICAgICBwLT5tZW0yLnN0YXJ0LCBwLT5tZW0yLnNpemUpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW0zX3N0YXJ0ICUwOFggbWVtM19zaXplICUwOFgiLAotCQkgICAgIHAtPm1lbTMuc3RhcnQsIHAtPm1lbTMuc2l6ZSk7Ci0KLQkvKiB3cml0ZSBwYXJ0aXRpb24gaW5mbyB0byB0aGUgY2hpcHNldCAqLwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDBfU1RBUlRfQUREUiwgcC0+bWVtLnN0YXJ0KTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQwX1NJWkVfQUREUiwgcC0+bWVtLnNpemUpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDFfU1RBUlRfQUREUiwgcC0+cmVnLnN0YXJ0KTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQxX1NJWkVfQUREUiwgcC0+cmVnLnNpemUpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDJfU1RBUlRfQUREUiwgcC0+bWVtMi5zdGFydCk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMl9TSVpFX0FERFIsIHAtPm1lbTIuc2l6ZSk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUM19TVEFSVF9BRERSLCBwLT5tZW0zLnN0YXJ0KTsKLQotCXJldHVybiAwOwotfQotCiAjZGVmaW5lIFdMMTI3MV9CVVNZX1dPUkRfVElNRU9VVCAxMDAwCiAKIC8qIEZJWE1FOiBDaGVjayBidXN5IHdvcmRzLCByZW1vdmVkIGR1ZSB0byBTUEkgYnVnICovCkBAIC0zMzgsNzggKzI1NSwzIEBACiAJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CiAJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGJ1ZiAtPiAiLCBidWYsIGxlbik7CiB9Ci0KLXZvaWQgd2wxMjcxX3NwaV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAotCQkgICAgIGJvb2wgZml4ZWQpCi17Ci0JaW50IHBoeXNpY2FsOwotCi0JcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpOwotCi0Jd2wxMjcxX3NwaV9yYXdfcmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Ci19Ci0KLXZvaWQgd2wxMjcxX3NwaV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJICAgICAgYm9vbCBmaXhlZCkKLXsKLQlpbnQgcGh5c2ljYWw7Ci0KLQlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcik7Ci0KLQl3bDEyNzFfc3BpX3Jhd193cml0ZSh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Ci19Ci0KLXUzMiB3bDEyNzFfc3BpX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCi17Ci0JcmV0dXJuIHdsMTI3MV9yYXdfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpKTsKLX0KLQotdm9pZCB3bDEyNzFfc3BpX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQotewotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHdsLCBhZGRyKSwgdmFsKTsKLX0KLQotdm9pZCB3bDEyNzFfdG9wX3JlZ193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUxNiB2YWwpCi17Ci0JLyogd3JpdGUgYWRkcmVzcyA+PiAxICsgMHgzMDAwMCB0byBPQ1BfUE9SX0NUUiAqLwotCWFkZHIgPSAoYWRkciA+PiAxKSArIDB4MzAwMDA7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBPQ1BfUE9SX0NUUiwgYWRkcik7Ci0KLQkvKiB3cml0ZSB2YWx1ZSB0byBPQ1BfUE9SX1dEQVRBICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBPQ1BfREFUQV9XUklURSwgdmFsKTsKLQotCS8qIHdyaXRlIDEgdG8gT0NQX0NNRCAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgT0NQX0NNRCwgT0NQX0NNRF9XUklURSk7Ci19Ci0KLXUxNiB3bDEyNzFfdG9wX3JlZ19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKLXsKLQl1MzIgdmFsOwotCWludCB0aW1lb3V0ID0gT0NQX0NNRF9MT09QOwotCi0JLyogd3JpdGUgYWRkcmVzcyA+PiAxICsgMHgzMDAwMCB0byBPQ1BfUE9SX0NUUiAqLwotCWFkZHIgPSAoYWRkciA+PiAxKSArIDB4MzAwMDA7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBPQ1BfUE9SX0NUUiwgYWRkcik7Ci0KLQkvKiB3cml0ZSAyIHRvIE9DUF9DTUQgKi8KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7Ci0KLQkvKiBwb2xsIGZvciBkYXRhIHJlYWR5ICovCi0JZG8gewotCQl2YWwgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgT0NQX0RBVEFfUkVBRCk7Ci0JCXRpbWVvdXQtLTsKLQl9IHdoaWxlICghKHZhbCAmIE9DUF9SRUFEWV9NQVNLKSAmJiB0aW1lb3V0KTsKLQotCWlmICghdGltZW91dCkgewotCQl3bDEyNzFfd2FybmluZygiVG9wIHJlZ2lzdGVyIGFjY2VzcyB0aW1lZCBvdXQuIik7Ci0JCXJldHVybiAweGZmZmY7Ci0JfQotCi0JLyogY2hlY2sgZGF0YSBzdGF0dXMgYW5kIHJldHVybiBpZiBPSyAqLwotCWlmICgodmFsICYgT0NQX1NUQVRVU19NQVNLKSA9PSBPQ1BfU1RBVFVTX09LKQotCQlyZXR1cm4gdmFsICYgMHhmZmZmOwotCWVsc2UgewotCQl3bDEyNzFfd2FybmluZygiVG9wIHJlZ2lzdGVyIGFjY2VzcyByZXR1cm5lZCBlcnJvci4iKTsKLQkJcmV0dXJuIDB4ZmZmZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuaAppbmRleCBjYjdkZjFjLi5hODAzNTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmgKQEAgLTkwLDM3ICs5MCw3IEBACiB2b2lkIHdsMTI3MV9zcGlfcmF3X3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCiAJCSAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCk7CiAKLS8qIFRyYW5zbGF0ZWQgdGFyZ2V0IElPICovCi12b2lkIHdsMTI3MV9zcGlfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJICAgICBib29sIGZpeGVkKTsKLXZvaWQgd2wxMjcxX3NwaV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJICAgICAgYm9vbCBmaXhlZCk7Ci11MzIgd2wxMjcxX3NwaV9yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKLXZvaWQgd2wxMjcxX3NwaV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7Ci0KLS8qIFRvcCBSZWdpc3RlciBJTyAqLwotdm9pZCB3bDEyNzFfdG9wX3JlZ193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUxNiB2YWwpOwotdTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKLQogLyogSU5JVCBhbmQgUkVTRVQgd29yZHMgKi8KIHZvaWQgd2wxMjcxX3NwaV9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiB2b2lkIHdsMTI3MV9zcGlfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCi0JCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKTsKLQotc3RhdGljIGlubGluZSB1MzIgd2wxMjcxX3Jhd19yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQotewotCXdsMTI3MV9zcGlfcmF3X3JlYWQod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAotCQkJICAgIHNpemVvZih3bC0+YnVmZmVyXzMyKSwgZmFsc2UpOwotCi0JcmV0dXJuIHdsLT5idWZmZXJfMzI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfcmF3X3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQotewotCXdsLT5idWZmZXJfMzIgPSB2YWw7Ci0Jd2wxMjcxX3NwaV9yYXdfd3JpdGUod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAotCQkJICAgICBzaXplb2Yod2wtPmJ1ZmZlcl8zMiksIGZhbHNlKTsKLX0KLQogI2VuZGlmIC8qIF9fV0wxMjcxX1NQSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTE5MTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisjaW5jbHVkZSAid2wxMjcxX3Rlc3Rtb2RlLmgiCisKKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorCisjZGVmaW5lIFdMMTI3MV9UTV9NQVhfREFUQV9MRU5HVEggMTAyNAorCitlbnVtIHdsMTI3MV90bV9jb21tYW5kcyB7CisJV0wxMjcxX1RNX0NNRF9VTlNQRUMsCisJV0wxMjcxX1RNX0NNRF9URVNULAorCVdMMTI3MV9UTV9DTURfSU5URVJST0dBVEUsCisJV0wxMjcxX1RNX0NNRF9DT05GSUdVUkUsCisJV0wxMjcxX1RNX0NNRF9OVlNfUFVTSCwKKwlXTDEyNzFfVE1fQ01EX1NFVF9QTFRfTU9ERSwKKworCV9fV0wxMjcxX1RNX0NNRF9BRlRFUl9MQVNUCit9OworI2RlZmluZSBXTDEyNzFfVE1fQ01EX01BWCAoX19XTDEyNzFfVE1fQ01EX0FGVEVSX0xBU1QgLSAxKQorCitlbnVtIHdsMTI3MV90bV9hdHRycyB7CisJV0wxMjcxX1RNX0FUVFJfVU5TUEVDLAorCVdMMTI3MV9UTV9BVFRSX0NNRF9JRCwKKwlXTDEyNzFfVE1fQVRUUl9BTlNXRVIsCisJV0wxMjcxX1RNX0FUVFJfREFUQSwKKwlXTDEyNzFfVE1fQVRUUl9JRV9JRCwKKwlXTDEyNzFfVE1fQVRUUl9QTFRfTU9ERSwKKworCV9fV0wxMjcxX1RNX0FUVFJfQUZURVJfTEFTVAorfTsKKyNkZWZpbmUgV0wxMjcxX1RNX0FUVFJfTUFYIChfX1dMMTI3MV9UTV9BVFRSX0FGVEVSX0xBU1QgLSAxKQorCitzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgd2wxMjcxX3RtX3BvbGljeVtXTDEyNzFfVE1fQVRUUl9NQVggKyAxXSA9IHsKKwlbV0wxMjcxX1RNX0FUVFJfQ01EX0lEXSA9CXsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1dMMTI3MV9UTV9BVFRSX0FOU1dFUl0gPQl7IC50eXBlID0gTkxBX1U4IH0sCisJW1dMMTI3MV9UTV9BVFRSX0RBVEFdID0JCXsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJCQkgIC5sZW4gPSBXTDEyNzFfVE1fTUFYX0RBVEFfTEVOR1RIIH0sCisJW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSA9CXsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1dMMTI3MV9UTV9BVFRSX1BMVF9NT0RFXSA9CXsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQoreworCWludCBidWZfbGVuLCByZXQsIGxlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKmJ1ZjsKKwl1OCBhbnN3ZXIgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIHRlc3QiKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCWJ1Zl9sZW4gPSBubGFfbGVuKHRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKTsKKworCWlmICh0YltXTDEyNzFfVE1fQVRUUl9BTlNXRVJdKQorCQlhbnN3ZXIgPSBubGFfZ2V0X3U4KHRiW1dMMTI3MV9UTV9BVFRSX0FOU1dFUl0pOworCisJaWYgKGJ1Zl9sZW4gPiBzaXplb2Yoc3RydWN0IHdsMTI3MV9jb21tYW5kKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBidWYsIGJ1Zl9sZW4sIGFuc3dlcik7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoInRlc3Rtb2RlIGNtZCB0ZXN0IGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChhbnN3ZXIpIHsKKwkJbGVuID0gbmxhX3RvdGFsX3NpemUoYnVmX2xlbik7CisJCXNrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYih3bC0+aHctPndpcGh5LCBsZW4pOworCQlpZiAoIXNrYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCU5MQV9QVVQoc2tiLCBXTDEyNzFfVE1fQVRUUl9EQVRBLCBidWZfbGVuLCBidWYpOworCQlyZXQgPSBjZmc4MDIxMV90ZXN0bW9kZV9yZXBseShza2IpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfaW50ZXJyb2dhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IGllX2lkOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIGludGVycm9nYXRlIik7CisKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZV9pZCA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXJldCA9IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUod2wsIGllX2lkLCBjbWQsIHNpemVvZigqY21kKSk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoInRlc3Rtb2RlIGNtZCBpbnRlcnJvZ2F0ZSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2Iod2wtPmh3LT53aXBoeSwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlOTEFfUFVUKHNrYiwgV0wxMjcxX1RNX0FUVFJfREFUQSwgc2l6ZW9mKCpjbWQpLCBjbWQpOworCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQoreworCWludCBidWZfbGVuLCByZXQ7CisJdm9pZCAqYnVmOworCXU4IGllX2lkOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIGNvbmZpZ3VyZSIpOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9JRV9JRF0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWVfaWQgPSBubGFfZ2V0X3U4KHRiW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSk7CisJYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCWJ1Zl9sZW4gPSBubGFfbGVuKHRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKTsKKworCWlmIChidWZfbGVuID4gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfY29tbWFuZCkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBpZV9pZCwgYnVmLCBidWZfbGVuKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIGNvbmZpZ3VyZSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfdG1fY21kX252c19wdXNoKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQoreworCWludCByZXQgPSAwOworCXNpemVfdCBsZW47CisJdm9pZCAqYnVmOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIG52cyBwdXNoIik7CisKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IG5sYV9kYXRhKHRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKTsKKwlsZW4gPSBubGFfbGVuKHRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKSB7CisJCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkOiAlenUgIT0gJXp1IiwKKwkJCSAgICAgbGVuLCBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlrZnJlZSh3bC0+bnZzKTsKKworCXdsLT5udnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+bnZzKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweSh3bC0+bnZzLCBidWYsIGxlbik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBwdXNoZWQgbnZzIik7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfc2V0X3BsdF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIGNtZCBzZXQgcGx0IG1vZGUiKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IG5sYV9nZXRfdTMyKHRiW1dMMTI3MV9UTV9BVFRSX1BMVF9NT0RFXSk7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJcmV0ID0gd2wxMjcxX3BsdF9zdG9wKHdsKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXQgPSB3bDEyNzFfcGx0X3N0YXJ0KHdsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV90bV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbmxhdHRyICp0YltXTDEyNzFfVE1fQVRUUl9NQVggKyAxXTsKKwlpbnQgZXJyOworCisJZXJyID0gbmxhX3BhcnNlKHRiLCBXTDEyNzFfVE1fQVRUUl9NQVgsIGRhdGEsIGxlbiwgd2wxMjcxX3RtX3BvbGljeSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfQ01EX0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG5sYV9nZXRfdTMyKHRiW1dMMTI3MV9UTV9BVFRSX0NNRF9JRF0pKSB7CisJY2FzZSBXTDEyNzFfVE1fQ01EX1RFU1Q6CisJCXJldHVybiB3bDEyNzFfdG1fY21kX3Rlc3Qod2wsIHRiKTsKKwljYXNlIFdMMTI3MV9UTV9DTURfSU5URVJST0dBVEU6CisJCXJldHVybiB3bDEyNzFfdG1fY21kX2ludGVycm9nYXRlKHdsLCB0Yik7CisJY2FzZSBXTDEyNzFfVE1fQ01EX0NPTkZJR1VSRToKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfY29uZmlndXJlKHdsLCB0Yik7CisJY2FzZSBXTDEyNzFfVE1fQ01EX05WU19QVVNIOgorCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9udnNfcHVzaCh3bCwgdGIpOworCWNhc2UgV0wxMjcxX1RNX0NNRF9TRVRfUExUX01PREU6CisJCXJldHVybiB3bDEyNzFfdG1fY21kX3NldF9wbHRfbW9kZSh3bCwgdGIpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5NmQyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfVEVTVE1PREVfSF9fCisjZGVmaW5lIF9fV0wxMjcxX1RFU1RNT0RFX0hfXworCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKK2ludCB3bDEyNzFfdG1fY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKworI2VuZGlmIC8qIF9fV0wxMjcxX1RFU1RNT0RFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCmluZGV4IDAwYWYwNjUuLjgxMWU3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIndsMTI3MS5oIgogI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKICNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCiAjaW5jbHVkZSAid2wxMjcxX3BzLmgiCiAjaW5jbHVkZSAid2wxMjcxX3R4LmgiCkBAIC04Nyw3ICs4OCw3IEBACiAJCQkgICAgICB1MzIgZXh0cmEsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOwotCWludCBwYWQ7CisJaW50IHBhZCwgYWM7CiAJdTE2IHR4X2F0dHI7CiAKIAlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKikgc2tiLT5kYXRhOwpAQCAtMTA3LDkgKzEwOCwxMSBAQAogCiAJLyogY29uZmlndXJlIHRoZSB0eCBhdHRyaWJ1dGVzICovCiAJdHhfYXR0ciA9IHdsLT5zZXNzaW9uX2NvdW50ZXIgPDwgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUjsKLQkvKiBGSVhNRTogZG8gd2Uga25vdyB0aGUgcGFja2V0IHByaW9yaXR5PyBjYW4gd2UgaWRlbnRpZnkgbWdtdAotCSAgIHBhY2tldHMsIGFuZCB1c2UgbWF4IHByaW8gZm9yIHRoZW0gYXQgbGVhc3Q/ICovCi0JZGVzYy0+dGlkID0gMDsKKworCS8qIHF1ZXVlICovCisJYWMgPSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwlkZXNjLT50aWQgPSB3bDEyNzFfdHhfYWNfdG9fdGlkKGFjKTsKKwogCWRlc2MtPmFpZCA9IFRYX0hXX0RFRkFVTFRfQUlEOwogCWRlc2MtPnJlc2VydmVkID0gMDsKIApAQCAtMTIxLDYgKzEyNCwxMSBAQAogCXBhZCA9IHBhZCAtIHNrYi0+bGVuOwogCXR4X2F0dHIgfD0gcGFkIDw8IFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEOwogCisJLyogaWYgdGhlIHBhY2tldHMgYXJlIGRlc3RpbmVkIGZvciBBUCAoaGF2ZSBhIFNUQSBlbnRyeSkgc2VuZCB0aGVtCisJICAgd2l0aCBBUCByYXRlIHBvbGljaWVzLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgYmFzaWMgcmF0ZXMgKi8KKwlpZiAoY29udHJvbC0+Y29udHJvbC5zdGEpCisJCXR4X2F0dHIgfD0gQUNYX1RYX0FQX0ZVTExfUkFURSA8PCBUWF9IV19BVFRSX09GU1RfUkFURV9QT0xJQ1k7CisKIAlkZXNjLT50eF9hdHRyID0gY3B1X3RvX2xlMTYodHhfYXR0cik7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogcGFkOiAlZCIsIHBhZCk7CkBAIC0xNTgsMTEgKzE2NiwxMSBAQAogCWxlbiA9IFdMMTI3MV9UWF9BTElHTihza2ItPmxlbik7CiAKIAkvKiBwZXJmb3JtIGEgZml4ZWQgYWRkcmVzcyBibG9jayB3cml0ZSB3aXRoIHRoZSBwYWNrZXQgKi8KLQl3bDEyNzFfc3BpX3dyaXRlKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBza2ItPmRhdGEsIGxlbiwgdHJ1ZSk7CisJd2wxMjcxX3dyaXRlKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBza2ItPmRhdGEsIGxlbiwgdHJ1ZSk7CiAKIAkvKiB3cml0ZSBwYWNrZXQgbmV3IGNvdW50ZXIgaW50byB0aGUgd3JpdGUgYWNjZXNzIHJlZ2lzdGVyICovCiAJd2wtPnR4X3BhY2tldHNfY291bnQrKzsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIFdMMTI3MV9IT1NUX1dSX0FDQ0VTUywgd2wtPnR4X3BhY2tldHNfY291bnQpOworCXdsMTI3MV93cml0ZTMyKHdsLCBXTDEyNzFfSE9TVF9XUl9BQ0NFU1MsIHdsLT50eF9wYWNrZXRzX2NvdW50KTsKIAogCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKSBza2ItPmRhdGE7CiAJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHggaWQgJXUgc2tiIDB4JXAgcGF5bG9hZCAldSAoJXUgd29yZHMpIiwKQEAgLTE5Niw2ICsyMDQsNyBAQAogCQkJcmV0ID0gd2wxMjcxX2NtZF9zZXRfZGVmYXVsdF93ZXBfa2V5KHdsLCBpZHgpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKKwkJCXdsLT5kZWZhdWx0X2tleSA9IGlkeDsKIAkJfQogCX0KIApAQCAtMjE0LDE4ICsyMjMsNTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdTMyIHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIHJhdGVfc2V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7CisJdTMyIGVuYWJsZWRfcmF0ZXMgPSAwOworCWludCBiaXQ7CisKKwliYW5kID0gd2wtPmh3LT53aXBoeS0+YmFuZHNbd2wtPmJhbmRdOworCWZvciAoYml0ID0gMDsgYml0IDwgYmFuZC0+bl9iaXRyYXRlczsgYml0KyspIHsKKwkJaWYgKHJhdGVfc2V0ICYgMHgxKQorCQkJZW5hYmxlZF9yYXRlcyB8PSBiYW5kLT5iaXRyYXRlc1tiaXRdLmh3X3ZhbHVlOworCQlyYXRlX3NldCA+Pj0gMTsKKwl9CisKKwlyZXR1cm4gZW5hYmxlZF9yYXRlczsKK30KKwogdm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI3MSwgdHhfd29yayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlib29sIHdva2VuX3VwID0gZmFsc2U7CisJdTMyIHN0YV9yYXRlcyA9IDA7CiAJaW50IHJldDsKIAorCS8qIGNoZWNrIGlmIHRoZSByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIEFQIGhhdmUgY2hhbmdlZCAqLworCWlmICh1bmxpa2VseSh0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX1JBVEVTX0NIQU5HRUQsCisJCQkJCSZ3bC0+ZmxhZ3MpKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwkJc3RhX3JhdGVzID0gd2wtPnN0YV9yYXRlX3NldDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwl9CisKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKIAkJZ290byBvdXQ7CiAKKwkvKiBpZiByYXRlcyBoYXZlIGNoYW5nZWQsIHJlLWNvbmZpZ3VyZSB0aGUgcmF0ZSBwb2xpY3kgKi8KKwlpZiAodW5saWtlbHkoc3RhX3JhdGVzKSkgeworCQl3bC0+cmF0ZV9zZXQgPSB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQod2wsIHN0YV9yYXRlcyk7CisJCXdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CisJfQorCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKIAkJaWYgKCF3b2tlbl91cCkgewogCQkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKQEAgLTI0MCwxOCArMjgxLDE4IEBACiAJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF93b3JrOiBmdyBidWZmZXIgZnVsbCwgIgogCQkJCSAgICAgInN0b3AgcXVldWVzIik7CiAJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKLQkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKKwkJCXNldF9iaXQoV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwgJndsLT5mbGFncyk7CiAJCQlza2JfcXVldWVfaGVhZCgmd2wtPnR4X3F1ZXVlLCBza2IpOwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocmV0IDwgMCkgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAod2wtPnR4X3F1ZXVlX3N0b3BwZWQpIHsKKwkJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwKKwkJCQkJICAgICAgJndsLT5mbGFncykpIHsKIAkJCS8qIGZpcm13YXJlIGJ1ZmZlciBoYXMgc3BhY2UsIHJlc3RhcnQgcXVldWVzICovCiAJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCiAJCQkJICAgICAiY29tcGxldGVfcGFja2V0OiB3YWtpbmcgcXVldWVzIik7CiAJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod2wtPmh3KTsKLQkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CiAJCX0KIAl9CiAKQEAgLTMzNSw4ICszNzYsOCBAQAogCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2NvbXBsZXRlIHJlY2VpdmVkLCBwYWNrZXRzOiAlZCIsIGNvdW50KTsKIAogCS8qIHJlYWQgdGhlIHR4IHJlc3VsdHMgZnJvbSB0aGUgY2hpcHNldCAqLwotCXdsMTI3MV9zcGlfcmVhZCh3bCwgbGUzMl90b19jcHUobWVtbWFwLT50eF9yZXN1bHQpLAotCQkJd2wtPnR4X3Jlc19pZiwgc2l6ZW9mKCp3bC0+dHhfcmVzX2lmKSwgZmFsc2UpOworCXdsMTI3MV9yZWFkKHdsLCBsZTMyX3RvX2NwdShtZW1tYXAtPnR4X3Jlc3VsdCksCisJCSAgICB3bC0+dHhfcmVzX2lmLCBzaXplb2YoKndsLT50eF9yZXNfaWYpLCBmYWxzZSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IGJ1ZmZlciBpcyBub3QgZ2V0dGluZyBvdmVycnVuICovCiAJaWYgKGNvdW50ID4gVFhfSFdfUkVTVUxUX1FVRVVFX0xFTikgewpAQCAtMzU3LDEwICszOTgsMTAgQEAKIAl9CiAKIAkvKiB3cml0ZSBob3N0IGNvdW50ZXIgdG8gY2hpcHNldCAodG8gYWNrKSAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgbGUzMl90b19jcHUobWVtbWFwLT50eF9yZXN1bHQpICsKLQkJCSAgIG9mZnNldG9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmLAotCQkJCSAgICB0eF9yZXN1bHRfaG9zdF9jb3VudGVyKSwKLQkJCSAgIGxlMzJfdG9fY3B1KHdsLT50eF9yZXNfaWYtPnR4X3Jlc3VsdF9md19jb3VudGVyKSk7CisJd2wxMjcxX3dyaXRlMzIod2wsIGxlMzJfdG9fY3B1KG1lbW1hcC0+dHhfcmVzdWx0KSArCisJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19pZiwKKwkJICAgICAgIHR4X3Jlc3VsdF9ob3N0X2NvdW50ZXIpLAorCQkgICAgICAgbGUzMl90b19jcHUod2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0X2Z3X2NvdW50ZXIpKTsKIH0KIAogLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaAppbmRleCA0MTYzOTZjLi4xN2U0MDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oCkBAIC0xMjMsNiArMTIzLDQyIEBACiAJc3RydWN0IHdsMTI3MV90eF9od19yZXNfZGVzY3IgdHhfcmVzdWx0c19xdWV1ZVtUWF9IV19SRVNVTFRfUVVFVUVfTEVOXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdGF0aWMgaW5saW5lIGludCB3bDEyNzFfdHhfZ2V0X3F1ZXVlKGludCBxdWV1ZSkKK3sKKwkvKiBGSVhNRTogdXNlIGJlc3QgZWZmb3J0IHVudGlsIFdNTSBpcyBlbmFibGVkICovCisJcmV0dXJuIENPTkZfVFhfQUNfQkU7CisKKwlzd2l0Y2ggKHF1ZXVlKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gQ09ORl9UWF9BQ19WTzsKKwljYXNlIDE6CisJCXJldHVybiBDT05GX1RYX0FDX1ZJOworCWNhc2UgMjoKKwkJcmV0dXJuIENPTkZfVFhfQUNfQkU7CisJY2FzZSAzOgorCQlyZXR1cm4gQ09ORl9UWF9BQ19CSzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gQ09ORl9UWF9BQ19CRTsKKwl9Cit9CisKKy8qIHdsMTI3MSB0eCBkZXNjcmlwdG9yIG5lZWRzIHRoZSB0aWQgYW5kIHdlIG5lZWQgdG8gY29udmVydCBpdCBmcm9tIGFjICovCitzdGF0aWMgaW5saW5lIGludCB3bDEyNzFfdHhfYWNfdG9fdGlkKGludCBhYykKK3sKKwlzd2l0Y2ggKGFjKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwljYXNlIDE6CisJCXJldHVybiAyOworCWNhc2UgMjoKKwkJcmV0dXJuIDQ7CisJY2FzZSAzOgorCQlyZXR1cm4gNjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKIHZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgd2wxMjcxX3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY291bnQpOwogdm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCAzM2M4YmU3Li42OTE3Mjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtODc1LDIwICs4NzUsMTggQEAKIHN0YXRpYyB2b2lkIHpkMTIwMV9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWMgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICptYzsKIAl1bnNpZ25lZCBjaGFyIHJlcWJ1ZltFVEhfQUxFTipaRDEyMDFfTUFYTVVMVEldOwogCWludCBpOwogCi0JaWYgKGRldi0+bWNfY291bnQgPiBaRDEyMDFfTUFYTVVMVEkpCisJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gWkQxMjAxX01BWE1VTFRJKQogCQlyZXR1cm47CiAKLQlmb3IgKGk9MDsgaTxkZXYtPm1jX2NvdW50OyBpKyspIHsKLQkJbWVtY3B5KHJlcWJ1ZitpKkVUSF9BTEVOLCBtYy0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJbWMgPSBtYy0+bmV4dDsKLQl9CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIGRldikKKwkJbWVtY3B5KHJlcWJ1ZiArIGkrKyAqIEVUSF9BTEVOLCBtYy0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAl6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORkdST1VQQUREUkVTUywgcmVxYnVmLAotCSAgICBkZXYtPm1jX2NvdW50KkVUSF9BTEVOLCAwKTsKLQkKKwkJCSBuZXRkZXZfbWNfY291bnQoZGV2KSAqIEVUSF9BTEVOLCAwKTsKIH0KIAogc3RhdGljIGludCB6ZDEyMDFfY29uZmlnX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggZjE0ZGViMC4uMmQ1NTVjYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC04NjksNyArODY5LDcgQEAKIH0KIAogc3RhdGljIGludCB6ZF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKIApAQCAtODc3LDIyICs4NzcsMjIgQEAKIAlpZiAobWFjLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCW1hYy0+dHlwZSA9IGNvbmYtPnR5cGU7CisJCW1hYy0+dHlwZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXJldHVybiB6ZF93cml0ZV9tYWNfYWRkcigmbWFjLT5jaGlwLCBjb25mLT5tYWNfYWRkcik7CisJcmV0dXJuIHpkX3dyaXRlX21hY19hZGRyKCZtYWMtPmNoaXAsIHZpZi0+YWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpkX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CiAJbWFjLT50eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IDcyZDNlNDMuLjQ0MmZjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0xMDc5LDExICsxMDc5LDE1IEBACiAJaW50IHI7CiAKIAkvKiBGaW5kIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0JZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMV0uZGVzYzsKLQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCi0JICAgIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZW5kcG9pbnQpKSB7Ci0JCWJ1bGtfb3V0X2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JfSBlbHNlIHsKKwlmb3IgKHIgPSAxOyByID49IDA7IHItLSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtyXS5kZXNjOworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVuZHBvaW50KSkgeworCQkJYnVsa19vdXRfZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyID09IC0xKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwKIAkJCSJ6ZDEyMTFydzogQ291bGQgbm90IGZpbmQgYnVsayBvdXQgZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hpbGlueF9lbWFjbGl0ZS5jIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKaW5kZXggOGM3NzdiYS4uMWE3NDU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKKysrIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKQEAgLTIyLDExICsyMiwxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9tZGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgInhpbGlueF9lbWFjbGl0ZSIKIAogLyogUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgdGhlIEVtYWNMaXRlIENvcmUgKi8KICNkZWZpbmUgWEVMX1RYQlVGRl9PRkZTRVQgCTB4MAkJLyogVHJhbnNtaXQgQnVmZmVyICovCisjZGVmaW5lIFhFTF9NRElPQUREUl9PRkZTRVQJMHgwN0U0CQkvKiBNRElPIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEVMX01ESU9XUl9PRkZTRVQJMHgwN0U4CQkvKiBNRElPIFdyaXRlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEVMX01ESU9SRF9PRkZTRVQJMHgwN0VDCQkvKiBNRElPIFJlYWQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBYRUxfTURJT0NUUkxfT0ZGU0VUCTB4MDdGMAkJLyogTURJTyBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFhFTF9HSUVSX09GRlNFVAkJMHgwN0Y4CQkvKiBHSUUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgWEVMX1RTUl9PRkZTRVQJCTB4MDdGQwkJLyogVHggc3RhdHVzICovCiAjZGVmaW5lIFhFTF9UUExSX09GRlNFVAkJMHgwN0Y0CQkvKiBUeCBwYWNrZXQgbGVuZ3RoICovCkBAIC0zNyw2ICs0MywyMiBAQAogCiAjZGVmaW5lIFhFTF9CVUZGRVJfT0ZGU0VUCTB4MDgwMAkJLyogTmV4dCBUeC9SeCBidWZmZXIncyBvZmZzZXQgKi8KIAorLyogTURJTyBBZGRyZXNzIFJlZ2lzdGVyIEJpdCBNYXNrcyAqLworI2RlZmluZSBYRUxfTURJT0FERFJfUkVHQURSX01BU0sgIDB4MDAwMDAwMUYJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLworI2RlZmluZSBYRUxfTURJT0FERFJfUEhZQURSX01BU0sgIDB4MDAwMDAzRTAJLyogUEhZIEFkZHJlc3MgKi8KKyNkZWZpbmUgWEVMX01ESU9BRERSX1BIWUFEUl9TSElGVCA1CisjZGVmaW5lIFhFTF9NRElPQUREUl9PUF9NQVNLCSAgMHgwMDAwMDQwMAkvKiBSRC9XUiBPcGVyYXRpb24gKi8KKworLyogTURJTyBXcml0ZSBEYXRhIFJlZ2lzdGVyIEJpdCBNYXNrcyAqLworI2RlZmluZSBYRUxfTURJT1dSX1dSREFUQV9NQVNLCSAgMHgwMDAwRkZGRgkvKiBEYXRhIHRvIGJlIFdyaXR0ZW4gKi8KKworLyogTURJTyBSZWFkIERhdGEgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9NRElPUkRfUkREQVRBX01BU0sJICAweDAwMDBGRkZGCS8qIERhdGEgdG8gYmUgUmVhZCAqLworCisvKiBNRElPIENvbnRyb2wgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0sgMHgwMDAwMDAwMQkvKiBNRElPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lIFhFTF9NRElPQ1RSTF9NRElPRU5fTUFTSyAgMHgwMDAwMDAwOAkvKiBNRElPIEVuYWJsZSAqLworCiAvKiBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoR0lFUikgQml0IE1hc2tzICovCiAjZGVmaW5lIFhFTF9HSUVSX0dJRV9NQVNLCTB4ODAwMDAwMDAgCS8qIEdsb2JhbCBFbmFibGUgKi8KIApAQCAtODcsNiArMTA5LDEyIEBACiAgKiBAcmVzZXRfbG9jazoJCWxvY2sgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uCiAgKiBAZGVmZXJyZWRfc2tiOglob2xkcyBhbiBza2IgKGZvciB0cmFuc21pc3Npb24gYXQgYSBsYXRlciB0aW1lKSB3aGVuIHRoZQogICoJCQlUeCBidWZmZXIgaXMgbm90IGZyZWUKKyAqIEBwaHlfZGV2OgkJcG9pbnRlciB0byB0aGUgUEhZIGRldmljZQorICogQHBoeV9ub2RlOgkJcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSBub2RlCisgKiBAbWlpX2J1czoJCXBvaW50ZXIgdG8gdGhlIE1JSSBidXMKKyAqIEBtZGlvX2lycXM6CQlJUlFzIHRhYmxlIGZvciBNRElPIGJ1cworICogQGxhc3RfbGluazoJCWxhc3QgbGluayBzdGF0dXMKKyAqIEBoYXNfbWRpbzoJCWluZGljYXRlcyB3aGV0aGVyIE1ESU8gaXMgaW5jbHVkZWQgaW4gdGhlIEhXCiAgKi8KIHN0cnVjdCBuZXRfbG9jYWwgewogCkBAIC0xMDAsNiArMTI4LDE1IEBACiAKIAlzcGlubG9ja190IHJlc2V0X2xvY2s7CiAJc3RydWN0IHNrX2J1ZmYgKmRlZmVycmVkX3NrYjsKKworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CisKKwlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKKwlpbnQgbWRpb19pcnFzW1BIWV9NQVhfQUREUl07CisKKwlpbnQgbGFzdF9saW5rOworCWJvb2wgaGFzX21kaW87CiB9OwogCiAKQEAgLTQzMSw3ICs0NjgsNyBAQAogfQogCiAvKioKLSAqIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MgLSBTZXQgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGlzIGRldmljZQorICogeGVtYWNsaXRlX3VwZGF0ZV9hZGRyZXNzIC0gVXBkYXRlIHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgZGV2aWNlCiAgKiBAZHJ2ZGF0YToJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQogICogQGFkZHJlc3NfcHRyOlBvaW50ZXIgdG8gdGhlIE1BQyBhZGRyZXNzIChNQUMgYWRkcmVzcyBpcyBhIDQ4LWJpdCB2YWx1ZSkKICAqCkBAIC00NDEsOCArNDc4LDggQEAKICAqIFRoZSBNQUMgYWRkcmVzcyBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyBhbnkgb2YgdGhlIHR3byB0cmFuc21pdAogICogYnVmZmVycyAoaWYgY29uZmlndXJlZCkuCiAgKi8KLXN0YXRpYyB2b2lkIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwKLQkJCQkgICAgICB1OCAqYWRkcmVzc19wdHIpCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfdXBkYXRlX2FkZHJlc3Moc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwKKwkJCQkgICAgIHU4ICphZGRyZXNzX3B0cikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAJdTMyIHJlZ19kYXRhOwpAQCAtNDY1LDYgKzUwMiwzMCBAQAogfQogCiAvKioKKyAqIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MgLSBTZXQgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGlzIGRldmljZQorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UgaW5zdGFuY2UKKyAqIEBhZGRyOglWb2lkIHBvaW50ZXIgdG8gdGhlIHNvY2thZGRyIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBIVyBhZGRyZXNzIGZyb20gdGhlIHNvY2thZGRyIHN0cnVjdXRyZSB0byB0aGUKKyAqIG5ldF9kZXZpY2Ugc3RydWN0dXJlIGFuZCB1cGRhdGVzIHRoZSBhZGRyZXNzIGluIEhXLgorICoKKyAqIFJldHVybjoJRXJyb3IgaWYgdGhlIG5ldCBkZXZpY2UgaXMgYnVzeSBvciAwIGlmIHRoZSBhZGRyIGlzIHNldAorICoJCXN1Y2Nlc3NmdWxseQorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcmVzcykKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gYWRkcmVzczsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJeGVtYWNsaXRlX3VwZGF0ZV9hZGRyZXNzKGxwLCBkZXYtPmRldl9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiB4ZW1hY2xpdGVfdHhfdGltZW91dCAtIENhbGxiYWNrIGZvciBUeCBUaW1lb3V0CiAgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQogICoKQEAgLTY0MSwxMiArNzAyLDIxOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKiovCisvKiBNRElPIEJ1cyBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3dhaXQgLSBXYWl0IGZvciB0aGUgTURJTyB0byBiZSByZWFkeSB0byB1c2UKKyAqIEBscDoJCVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHRpbGwgdGhlIGRldmljZSBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgTURJTworICogcmVxdWVzdC4KKyAqCisgKiBSZXR1cm46CTAgZm9yIHN1Y2Nlc3Mgb3IgRVRJTUVET1VUIGZvciBhIHRpbWVvdXQKKyAqLworCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3dhaXQoc3RydWN0IG5ldF9sb2NhbCAqbHApCit7CisJbG9uZyBlbmQgPSBqaWZmaWVzICsgMjsKKworCS8qIHdhaXQgZm9yIHRoZSBNRElPIGludGVyZmFjZSB0byBub3QgYmUgYnVzeSBvciB0aW1lb3V0CisJICAgYWZ0ZXIgc29tZSB0aW1lLgorCSovCisJd2hpbGUgKGluX2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQpICYKKwkJCVhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0spIHsKKwkJaWYgKGVuZCAtIGppZmZpZXMgPD0gMCkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX21kaW9fcmVhZCAtIFJlYWQgZnJvbSBhIGdpdmVuIE1JSSBtYW5hZ2VtZW50IHJlZ2lzdGVyCisgKiBAYnVzOgl0aGUgbWlpX2J1cyBzdHJ1Y3QKKyAqIEBwaHlfaWQ6CXRoZSBwaHkgYWRkcmVzcworICogQHJlZzoJcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQgZnJvbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgdGlsbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBNRElPCisgKiByZXF1ZXN0IGFuZCB0aGVuIHdyaXRlcyB0aGUgcGh5IGFkZHJlc3MgdG8gdGhlIE1ESU8gQWRkcmVzcyByZWdpc3RlcgorICogYW5kIHJlYWRzIGRhdGEgZnJvbSBNRElPIFJlYWQgRGF0YSByZWdpc3Rlciwgd2hlbiBpdHMgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybjoJVmFsdWUgcmVhZCBmcm9tIHRoZSBNSUkgbWFuYWdlbWVudCByZWdpc3RlcgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IGJ1cy0+cHJpdjsKKwl1MzIgY3RybF9yZWc7CisJdTMyIHJjOworCisJaWYgKHhlbWFjbGl0ZV9tZGlvX3dhaXQobHApKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIFdyaXRlIHRoZSBQSFkgYWRkcmVzcywgcmVnaXN0ZXIgbnVtYmVyIGFuZCBzZXQgdGhlIE9QIGJpdCBpbiB0aGUKKwkgKiBNRElPIEFkZHJlc3MgcmVnaXN0ZXIuIFNldCB0aGUgU3RhdHVzIGJpdCBpbiB0aGUgTURJTyBDb250cm9sCisJICogcmVnaXN0ZXIgdG8gc3RhcnQgYSBNRElPIHJlYWQgdHJhbnNhY3Rpb24uCisJICovCisJY3RybF9yZWcgPSBpbl9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VUKTsKKwlvdXRfYmUzMihscC0+YmFzZV9hZGRyICsgWEVMX01ESU9BRERSX09GRlNFVCwKKwkJIFhFTF9NRElPQUREUl9PUF9NQVNLIHwKKwkJICgocGh5X2lkIDw8IFhFTF9NRElPQUREUl9QSFlBRFJfU0hJRlQpIHwgcmVnKSk7CisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQsCisJCSBjdHJsX3JlZyB8IFhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0spOworCisJaWYgKHhlbWFjbGl0ZV9tZGlvX3dhaXQobHApKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJjID0gaW5fYmUzMihscC0+YmFzZV9hZGRyICsgWEVMX01ESU9SRF9PRkZTRVQpOworCisJZGV2X2RiZygmbHAtPm5kZXYtPmRldiwKKwkJInhlbWFjbGl0ZV9tZGlvX3JlYWQocGh5X2lkPSVpLCByZWc9JXgpID09ICV4XG4iLAorCQlwaHlfaWQsIHJlZywgcmMpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3dyaXRlIC0gV3JpdGUgdG8gYSBnaXZlbiBNSUkgbWFuYWdlbWVudCByZWdpc3RlcgorICogQGJ1czoJdGhlIG1paV9idXMgc3RydWN0CisgKiBAcGh5X2lkOgl0aGUgcGh5IGFkZHJlc3MKKyAqIEByZWc6CXJlZ2lzdGVyIG51bWJlciB0byB3cml0ZSB0bworICogQHZhbDoJdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIG51bWJlciBzcGVjaWZpZWQgYnkgcmVnCisgKgorICogVGhpcyBmdWNudGlvbiB3YWl0cyB0aWxsIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IE1ESU8KKyAqIHJlcXVlc3QgYW5kIHRoZW4gd3JpdGVzIHRoZSB2YWwgdG8gdGhlIE1ESU8gV3JpdGUgRGF0YSByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnLAorCQkJCXUxNiB2YWwpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBidXMtPnByaXY7CisJdTMyIGN0cmxfcmVnOworCisJZGV2X2RiZygmbHAtPm5kZXYtPmRldiwKKwkJInhlbWFjbGl0ZV9tZGlvX3dyaXRlKHBoeV9pZD0laSwgcmVnPSV4LCB2YWw9JXgpXG4iLAorCQlwaHlfaWQsIHJlZywgdmFsKTsKKworCWlmICh4ZW1hY2xpdGVfbWRpb193YWl0KGxwKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiBXcml0ZSB0aGUgUEhZIGFkZHJlc3MsIHJlZ2lzdGVyIG51bWJlciBhbmQgY2xlYXIgdGhlIE9QIGJpdCBpbiB0aGUKKwkgKiBNRElPIEFkZHJlc3MgcmVnaXN0ZXIgYW5kIHRoZW4gd3JpdGUgdGhlIHZhbHVlIGludG8gdGhlIE1ESU8gV3JpdGUKKwkgKiBEYXRhIHJlZ2lzdGVyLiBGaW5hbGx5LCBzZXQgdGhlIFN0YXR1cyBiaXQgaW4gdGhlIE1ESU8gQ29udHJvbAorCSAqIHJlZ2lzdGVyIHRvIHN0YXJ0IGEgTURJTyB3cml0ZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwljdHJsX3JlZyA9IGluX2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQpOworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0FERFJfT0ZGU0VULAorCQkgflhFTF9NRElPQUREUl9PUF9NQVNLICYKKwkJICgocGh5X2lkIDw8IFhFTF9NRElPQUREUl9QSFlBRFJfU0hJRlQpIHwgcmVnKSk7CisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPV1JfT0ZGU0VULCB2YWwpOworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VULAorCQkgY3RybF9yZWcgfCBYRUxfTURJT0NUUkxfTURJT1NUU19NQVNLKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3Jlc2V0IC0gUmVzZXQgdGhlIG1kaW8gYnVzLgorICogQGJ1czoJUG9pbnRlciB0byB0aGUgTUlJIGJ1cworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQoPykgYXMgcGVyIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkudHh0LgorICogVGhlcmUgaXMgbm8gcmVzZXQgaW4gdGhpcyBkZXZpY2U7IHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3NldHVwIC0gUmVnaXN0ZXIgbWlpX2J1cyBmb3IgdGhlIEVtYWNsaXRlIGRldmljZQorICogQGxwOgkJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQorICogQG9mZGV2OglQb2ludGVyIHRvIE9GIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgTURJTyBidXMgaW4gdGhlIEVtYWNsaXRlIGRldmljZSBhbmQgcmVnaXN0ZXJzIGEKKyAqIG1paV9idXMuCisgKgorICogUmV0dXJuOgkwIHVwb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIHVwb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3NldHVwKHN0cnVjdCBuZXRfbG9jYWwgKmxwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1czsKKwlpbnQgcmM7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZ2V0X3BhcmVudChscC0+cGh5X25vZGUpOworCisJLyogRG9uJ3QgcmVnaXN0ZXIgdGhlIE1ESU8gYnVzIGlmIHRoZSBwaHlfbm9kZSBvciBpdHMgcGFyZW50IG5vZGUKKwkgKiBjYW4ndCBiZSBmb3VuZC4KKwkgKi8KKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEVuYWJsZSB0aGUgTURJTyBidXMgYnkgYXNzZXJ0aW5nIHRoZSBlbmFibGUgYml0IGluIE1ESU8gQ29udHJvbAorCSAqIHJlZ2lzdGVyLgorCSAqLworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VULAorCQkgWEVMX01ESU9DVFJMX01ESU9FTl9NQVNLKTsKKworCWJ1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlLjhsbHgiLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuc3RhcnQpOworCWJ1cy0+cHJpdiA9IGxwOworCWJ1cy0+bmFtZSA9ICJYaWxpbnggRW1hY2xpdGUgTURJTyI7CisJYnVzLT5yZWFkID0geGVtYWNsaXRlX21kaW9fcmVhZDsKKwlidXMtPndyaXRlID0geGVtYWNsaXRlX21kaW9fd3JpdGU7CisJYnVzLT5yZXNldCA9IHhlbWFjbGl0ZV9tZGlvX3Jlc2V0OworCWJ1cy0+cGFyZW50ID0gZGV2OworCWJ1cy0+aXJxID0gbHAtPm1kaW9faXJxczsgLyogcHJlYWxsb2NhdGVkIElSUSB0YWJsZSAqLworCisJbHAtPm1paV9idXMgPSBidXM7CisKKwlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJbWRpb2J1c19mcmVlKGJ1cyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9hZGp1c3RfbGluayAtIExpbmsgc3RhdGUgY2FsbGJhY2sgZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UKKyAqIEBuZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0CisgKgorICogVGhlcmUncyBub3RoaW5nIGluIHRoZSBFbWFjbGl0ZSBkZXZpY2UgdG8gYmUgY29uZmlndXJlZCB3aGVuIHRoZSBsaW5rCisgKiBzdGF0ZSBjaGFuZ2VzLiBXZSBqdXN0IHByaW50IHRoZSBzdGF0dXMuCisgKi8KK3ZvaWQgeGVtYWNsaXRlX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IGxwLT5waHlfZGV2OworCWludCBsaW5rX3N0YXRlOworCisJLyogaGFzaCB0b2dldGhlciB0aGUgc3RhdGUgdmFsdWVzIHRvIGRlY2lkZSBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwlsaW5rX3N0YXRlID0gcGh5LT5zcGVlZCB8IChwaHktPmR1cGxleCA8PCAxKSB8IHBoeS0+bGluazsKKworCWlmIChscC0+bGFzdF9saW5rICE9IGxpbmtfc3RhdGUpIHsKKwkJbHAtPmxhc3RfbGluayA9IGxpbmtfc3RhdGU7CisJCXBoeV9wcmludF9zdGF0dXMocGh5KTsKKwl9Cit9CisKIC8qKgogICogeGVtYWNsaXRlX29wZW4gLSBPcGVuIHRoZSBuZXR3b3JrIGRldmljZQogICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1BQyBhZGRyZXNzLCByZXF1ZXN0cyBhbiBJUlEgYW5kIGVuYWJsZXMgaW50ZXJydXB0cwogICogZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UgYW5kIHN0YXJ0cyB0aGUgVHggcXVldWUuCisgKiBJdCBhbHNvIGNvbm5lY3RzIHRvIHRoZSBwaHkgZGV2aWNlLCBpZiBNRElPIGlzIGluY2x1ZGVkIGluIEVtYWNsaXRlIGRldmljZS4KICAqLwogc3RhdGljIGludCB4ZW1hY2xpdGVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjU2LDE0ICs5MjQsNDcgQEAKIAkvKiBKdXN0IHRvIGJlIHNhZmUsIHN0b3AgdGhlIGRldmljZSBmaXJzdCAqLwogCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOwogCisJaWYgKGxwLT5waHlfbm9kZSkgeworCQl1MzIgYm1jcjsKKworCQlscC0+cGh5X2RldiA9IG9mX3BoeV9jb25uZWN0KGxwLT5uZGV2LCBscC0+cGh5X25vZGUsCisJCQkJCSAgICAgeGVtYWNsaXRlX2FkanVzdF9saW5rLCAwLAorCQkJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCQlpZiAoIWxwLT5waHlfZGV2KSB7CisJCQlkZXZfZXJyKCZscC0+bmRldi0+ZGV2LCAib2ZfcGh5X2Nvbm5lY3QoKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBFbWFjTGl0ZSBkb2Vzbid0IHN1cHBvcnQgZ2lnYS1iaXQgc3BlZWRzICovCisJCWxwLT5waHlfZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyk7CisJCWxwLT5waHlfZGV2LT5hZHZlcnRpc2luZyA9IGxwLT5waHlfZGV2LT5zdXBwb3J0ZWQ7CisKKwkJLyogRG9uJ3QgYWR2ZXJ0aXNlIDEwMDBCQVNFLVQgRnVsbC9IYWxmIGR1cGxleCBzcGVlZHMgKi8KKwkJcGh5X3dyaXRlKGxwLT5waHlfZGV2LCBNSUlfQ1RSTDEwMDAsIDApOworCisJCS8qIEFkdmVydGlzZSBvbmx5IDEwIGFuZCAxMDBtYnBzIGZ1bGwvaGFsZiBkdXBsZXggc3BlZWRzICovCisJCXBoeV93cml0ZShscC0+cGh5X2RldiwgTUlJX0FEVkVSVElTRSwgQURWRVJUSVNFX0FMTCk7CisKKwkJLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCisJCWJtY3IgPSBwaHlfcmVhZChscC0+cGh5X2RldiwgTUlJX0JNQ1IpOworCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCQlwaHlfd3JpdGUobHAtPnBoeV9kZXYsIE1JSV9CTUNSLCBibWNyKTsKKworCQlwaHlfc3RhcnQobHAtPnBoeV9kZXYpOworCX0KKwogCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgZWFjaCB0aW1lIG9wZW5lZCAqLwotCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOworCXhlbWFjbGl0ZV91cGRhdGVfYWRkcmVzcyhscCwgZGV2LT5kZXZfYWRkcik7CiAKIAkvKiBHcmFiIHRoZSBJUlEgKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgeGVtYWNsaXRlX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycigmbHAtPm5kZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRlcnJ1cHQgJWRcbiIsCiAJCQlkZXYtPmlycSk7CisJCWlmIChscC0+cGh5X2RldikKKwkJCXBoeV9kaXNjb25uZWN0KGxwLT5waHlfZGV2KTsKKwkJbHAtPnBoeV9kZXYgPSBOVUxMOworCiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC02ODIsNiArOTgzLDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSBUeCBxdWV1ZSwgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgZnJlZXMgdGhlIElSUSBmb3IKICAqIHRoZSBFbWFjbGl0ZSBkZXZpY2UuCisgKiBJdCBhbHNvIGRpc2Nvbm5lY3RzIHRoZSBwaHkgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRW1hY2xpdGUgZGV2aWNlLgogICovCiBzdGF0aWMgaW50IHhlbWFjbGl0ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjkxLDYgKzk5MywxMCBAQAogCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCisJaWYgKGxwLT5waHlfZGV2KQorCQlwaHlfZGlzY29ubmVjdChscC0+cGh5X2Rldik7CisJbHAtPnBoeV9kZXYgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw0MiArMTA2MCw2IEBACiB9CiAKIC8qKgotICogeGVtYWNsaXRlX2lvY3RsIC0gUGVyZm9ybSBJTyBDb250cm9sIG9wZXJhdGlvbnMgb24gdGhlIG5ldHdvcmsgZGV2aWNlCi0gKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQotICogQHJxOgkJUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHJlcXVlc3Qgc3RydWN0dXJlCi0gKiBAY21kOglJT0NUTCBjb21tYW5kCi0gKgotICogVGhlIG9ubHkgSU9DVEwgb3BlcmF0aW9uIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIHNldHRpbmcgdGhlIE1BQwotICogYWRkcmVzcy4gQW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgYW55IG90aGVyIG9wZXJhdGlvbnMgYXJlIHJlcXVlc3RlZC4KLSAqCi0gKiBSZXR1cm46CTAgdG8gaW5kaWNhdGUgc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBmb3IgZmFpbHVyZS4KLSAqLwotc3RhdGljIGludCB4ZW1hY2xpdGVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGh3X2FkZHJfZGF0YSAqaHdfYWRkciA9IChzdHJ1Y3QgaHdfYWRkcl9kYXRhICopICZycS0+aWZyX2h3YWRkcjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DRVRIVE9PTDoKLQkJcmV0dXJuIC1FSU87Ci0KLQljYXNlIFNJT0NTSUZIV0FERFI6Ci0JCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJTSU9DU0lGSFdBRERSXG4iKTsKLQotCQkvKiBDb3B5IE1BQyBhZGRyZXNzIGluIGZyb20gdXNlciBzcGFjZSAqLwotCQljb3B5X2Zyb21fdXNlcigodm9pZCBfX2ZvcmNlICopIGRldi0+ZGV2X2FkZHIsCi0JCQkgICAgICAgKHZvaWQgX191c2VyIF9fZm9yY2UgKikgaHdfYWRkciwKLQkJCSAgICAgICBJRkhXQUREUkxFTik7Ci0JCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogeGVtYWNsaXRlX3JlbW92ZV9uZGV2IC0gRnJlZSB0aGUgbmV0d29yayBkZXZpY2UKICAqIEBuZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZSB0byBiZSBmcmVlZAogICoKQEAgLTg0MCw2ICsxMTEwLDggQEAKICAqIFRoaXMgZnVuY3Rpb24gcHJvYmVzIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlIGluIHRoZSBkZXZpY2UgdHJlZS4KICAqIEl0IGluaXRpYWxpemVzIHRoZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZSBoYXJkd2FyZSwgc2V0cyB0aGUgTUFDCiAgKiBhZGRyZXNzIGFuZCByZWdpc3RlcnMgdGhlIG5ldHdvcmsgZGV2aWNlLgorICogSXQgYWxzbyByZWdpc3RlcnMgYSBtaWlfYnVzIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlLCBpZiBNRElPIGlzIGluY2x1ZGVkCisgKiBpbiB0aGUgZGV2aWNlLgogICoKICAqIFJldHVybjoJMCwgaWYgdGhlIGRyaXZlciBpcyBib3VuZCB0byB0aGUgRW1hY2xpdGUgZGV2aWNlLCBvcgogICoJCWEgbmVnYXRpdmUgZXJyb3IgaWYgdGhlcmUgaXMgZmFpbHVyZS4KQEAgLTg4MCw2ICsxMTUyLDcgQEAKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmb2ZkZXYtPmRldik7CiAKIAluZGV2LT5pcnEgPSByX2lycS5zdGFydDsKIAluZGV2LT5tZW1fc3RhcnQgPSByX21lbS5zdGFydDsKQEAgLTkyMywxMyArMTE5NiwxNCBAQAogCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArIFhFTF9UU1JfT0ZGU0VULCAwKTsKIAogCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgaW4gdGhlIEVtYWNMaXRlIGRldmljZSAqLwotCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIG5kZXYtPmRldl9hZGRyKTsKKwl4ZW1hY2xpdGVfdXBkYXRlX2FkZHJlc3MobHAsIG5kZXYtPmRldl9hZGRyKTsKIAotCWRldl9pbmZvKGRldiwKLQkJICJNQUMgYWRkcmVzcyBpcyBub3cgJTJ4OiUyeDolMng6JTJ4OiUyeDolMnhcbiIsCi0JCSBuZGV2LT5kZXZfYWRkclswXSwgbmRldi0+ZGV2X2FkZHJbMV0sCi0JCSBuZGV2LT5kZXZfYWRkclsyXSwgbmRldi0+ZGV2X2FkZHJbM10sCi0JCSBuZGV2LT5kZXZfYWRkcls0XSwgbmRldi0+ZGV2X2FkZHJbNV0pOworCWxwLT5waHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUob2ZkZXYtPm5vZGUsICJwaHktaGFuZGxlIiwgMCk7CisJcmMgPSB4ZW1hY2xpdGVfbWRpb19zZXR1cChscCwgJm9mZGV2LT5kZXYpOworCWlmIChyYykKKwkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJlcnJvciByZWdpc3RlcmluZyBNRElPIGJ1c1xuIik7CisKKwlkZXZfaW5mbyhkZXYsICJNQUMgYWRkcmVzcyBpcyBub3cgJXBNXG4iLCBuZGV2LT5kZXZfYWRkcik7CiAKIAluZGV2LT5uZXRkZXZfb3BzID0gJnhlbWFjbGl0ZV9uZXRkZXZfb3BzOwogCW5kZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwpAQCAtOTcyLDEyICsxMjQ2LDI1IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mX2Rldi0+ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5kZXYpOworCisJLyogVW4tcmVnaXN0ZXIgdGhlIG1paV9idXMsIGlmIGNvbmZpZ3VyZWQgKi8KKwlpZiAobHAtPmhhc19tZGlvKSB7CisJCW1kaW9idXNfdW5yZWdpc3RlcihscC0+bWlpX2J1cyk7CisJCWtmcmVlKGxwLT5taWlfYnVzLT5pcnEpOworCQltZGlvYnVzX2ZyZWUobHAtPm1paV9idXMpOworCQlscC0+bWlpX2J1cyA9IE5VTEw7CisJfQorCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKKwlpZiAobHAtPnBoeV9ub2RlKQorCQlvZl9ub2RlX3B1dChscC0+cGh5X25vZGUpOworCWxwLT5waHlfbm9kZSA9IE5VTEw7CisKIAlyZWxlYXNlX21lbV9yZWdpb24obmRldi0+bWVtX3N0YXJ0LCBuZGV2LT5tZW1fZW5kLW5kZXYtPm1lbV9zdGFydCArIDEpOwogCiAJeGVtYWNsaXRlX3JlbW92ZV9uZGV2KG5kZXYpOwotCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk4Nyw3ICsxMjc0LDcgQEAKIAkubmRvX29wZW4JCT0geGVtYWNsaXRlX29wZW4sCiAJLm5kb19zdG9wCQk9IHhlbWFjbGl0ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0geGVtYWNsaXRlX3NlbmQsCi0JLm5kb19kb19pb2N0bAkJPSB4ZW1hY2xpdGVfaW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fdHhfdGltZW91dAkJPSB4ZW1hY2xpdGVfdHhfdGltZW91dCwKIAkubmRvX2dldF9zdGF0cwkJPSB4ZW1hY2xpdGVfZ2V0X3N0YXRzLAogfTsKQEAgLTk5OSw2ICsxMjg2LDcgQEAKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0xLjAwLmEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtZXRoZXJuZXRsaXRlLTIuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ldGhlcm5ldGxpdGUtMi4wMS5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0zLjAwLmEiLCB9LAogCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4ZW1hY2xpdGVfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAwZjc3M2E5Li43ZDQxMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkieWVsbG93ZmluIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xIgogI2RlZmluZSBEUlZfUkVMREFURQkiU2VwIDExLCAyMDA2IgogCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KIC8qIFRoZSB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMuCiAgICBUaGVzZSBtYXkgYmUgbW9kaWZpZWQgd2hlbiBhIGRyaXZlciBtb2R1bGUgaXMgbG9hZGVkLiovCiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHllbGxvd2Zpbl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeWVsbG93ZmluX3BjaV90YmwpID0gewogCXsgMHgxMDAwLCAweDA3MDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IDB4MTAwMCwgMHgwNzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCiAJeyB9CkBAIC0zOTksNyArMzk5LDcgQEAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbnApKTsKIAlpZiAoIWRldikgewotCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiY2Fubm90IGFsbG9jYXRlIGV0aGVybmV0IGRldmljZVxuIik7CisJCXByX2VycigiY2Fubm90IGFsbG9jYXRlIGV0aGVybmV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtNDg3LDEwICs0ODcsMTAgQEAKIAlpZiAoaSkKIAkJZ290byBlcnJfb3V0X3VubWFwX3N0YXR1czsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyB0eXBlICU4eCBhdCAlcCwgJXBNLCBJUlEgJWQuXG4iLAotCQkgICBkZXYtPm5hbWUsIHBjaV9pZF90YmxbY2hpcF9pZHhdLm5hbWUsCi0JCSAgIGlvcmVhZDMyKGlvYWRkciArIENoaXBSZXYpLCBpb2FkZHIsCi0JCSAgIGRldi0+ZGV2X2FkZHIsIGlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiJXMgdHlwZSAlOHggYXQgJXAsICVwTSwgSVJRICVkXG4iLAorCQkgICAgcGNpX2lkX3RibFtjaGlwX2lkeF0ubmFtZSwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIENoaXBSZXYpLCBpb2FkZHIsCisJCSAgICBkZXYtPmRldl9hZGRyLCBpcnEpOwogCiAJaWYgKG5wLT5kcnZfZmxhZ3MgJiBIYXNNSUkpIHsKIAkJaW50IHBoeSwgcGh5X2lkeCA9IDA7CkBAIC00OTksOSArNDk5LDggQEAKIAkJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAgJiYgIG1paV9zdGF0dXMgIT0gMHgwMDAwKSB7CiAJCQkJbnAtPnBoeXNbcGh5X2lkeCsrXSA9IHBoeTsKIAkJCQlucC0+YWR2ZXJ0aXNpbmcgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHksIDQpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNSUkgUEhZIGZvdW5kIGF0IGFkZHJlc3MgJWQsIHN0YXR1cyAiCi0JCQkJCSAgICIweCU0LjR4IGFkdmVydGlzaW5nICU0LjR4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBwaHksIG1paV9zdGF0dXMsIG5wLT5hZHZlcnRpc2luZyk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAiTUlJIFBIWSBmb3VuZCBhdCBhZGRyZXNzICVkLCBzdGF0dXMgMHglMDR4IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkJCSAgICBwaHksIG1paV9zdGF0dXMsIG5wLT5hZHZlcnRpc2luZyk7CiAJCQl9CiAJCX0KIAkJbnAtPm1paV9jbnQgPSBwaHlfaWR4OwpAQCAtNTg0LDggKzU4Myw4IEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB5ZWxsb3dmaW5fb3BlbigpIGlycSAlZC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICIlcygpIGlycSAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCBkZXYtPmlycSk7CiAKIAlyZXQgPSB5ZWxsb3dmaW5faW5pdF9yaW5nKGRldik7CiAJaWYgKHJldCkgewpAQCAtNjQyLDggKzY0MSw3IEBACiAJaW93cml0ZTMyKDB4ODAwMDgwMDAsIGlvYWRkciArIFR4Q3RybCk7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgeWVsbG93ZmluX29wZW4oKS5cbiIsCi0JCQkgICBkZXYtPm5hbWUpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIkRvbmUgJXMoKVxuIiwgX19mdW5jX18pOwogCX0KIAogCS8qIFNldCB0aGUgdGltZXIgdG8gY2hlY2sgZm9yIGxpbmsgYmVhdC4gKi8KQEAgLTY2NCw4ICs2NjIsOCBAQAogCWludCBuZXh0X3RpY2sgPSA2MCpIWjsKIAogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAzKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogWWVsbG93ZmluIHRpbWVyIHRpY2ssIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJZZWxsb3dmaW4gdGltZXIgdGljaywgc3RhdHVzICUwOHhcbiIsCisJCQkgICAgICBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CiAJfQogCiAJaWYgKHlwLT5taWlfY250KSB7CkBAIC02NzMsOSArNjcxLDggQEAKIAkJaW50IGxwYSA9IG1kaW9fcmVhZChpb2FkZHIsIHlwLT5waHlzWzBdLCBNSUlfTFBBKTsKIAkJaW50IG5lZ290aWF0ZWQgPSBscGEgJiB5cC0+YWR2ZXJ0aXNpbmc7CiAJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNSUkgIyVkIHN0YXR1cyByZWdpc3RlciBpcyAlNC40eCwgIgotCQkJCSAgICJsaW5rIHBhcnRuZXIgY2FwYWJpbGl0eSAlNC40eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCB5cC0+cGh5c1swXSwgYm1zciwgbHBhKTsKKwkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiTUlJICMlZCBzdGF0dXMgcmVnaXN0ZXIgaXMgJTA0eCwgbGluayBwYXJ0bmVyIGNhcGFiaWxpdHkgJTA0eFxuIiwKKwkJCQkgICAgICB5cC0+cGh5c1swXSwgYm1zciwgbHBhKTsKIAogCQl5cC0+ZnVsbF9kdXBsZXggPSBtaWlfZHVwbGV4KHlwLT5kdXBsZXhfbG9jaywgbmVnb3RpYXRlZCk7CiAKQEAgLTY5NiwyNSArNjkzLDI0IEBACiAJc3RydWN0IHllbGxvd2Zpbl9wcml2YXRlICp5cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB5cC0+YmFzZTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBZZWxsb3dmaW4gdHJhbnNtaXQgdGltZWQgb3V0IGF0ICVkLyVkIFR4ICIKLQkJICAgInN0YXR1cyAlNC40eCwgUnggc3RhdHVzICU0LjR4LCByZXNldHRpbmcuLi5cbiIsCi0JCSAgIGRldi0+bmFtZSwgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LAotCQkgICBpb3JlYWQzMihpb2FkZHIgKyBUeFN0YXR1cyksIGlvcmVhZDMyKGlvYWRkciArIFJ4U3RhdHVzKSk7CisJbmV0ZGV2X3dhcm4oZGV2LCAiWWVsbG93ZmluIHRyYW5zbWl0IHRpbWVkIG91dCBhdCAlZC8lZCBUeCBzdGF0dXMgJTA0eCwgUnggc3RhdHVzICUwNHgsIHJlc2V0dGluZy4uLlxuIiwKKwkJICAgIHlwLT5jdXJfdHgsIHlwLT5kaXJ0eV90eCwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIFR4U3RhdHVzKSwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIFJ4U3RhdHVzKSk7CiAKIAkvKiBOb3RlOiB0aGVzZSBzaG91bGQgYmUgS0VSTl9ERUJVRy4gKi8KIAlpZiAoeWVsbG93ZmluX2RlYnVnKSB7CiAJCWludCBpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIFJ4IHJpbmcgJXA6ICIsIHlwLT5yeF9yaW5nKTsKKwkJcHJfd2FybmluZygiICBSeCByaW5nICVwOiAiLCB5cC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAlOC44eCIsCi0JCQkgICAgICAgeXAtPnJ4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkciICBUeCByaW5nICVwOiAiLCB5cC0+dHhfcmluZyk7CisJCQlwcl9jb250KCIgJTA4eCIsIHlwLT5yeF9yaW5nW2ldLnJlc3VsdF9zdGF0dXMpOworCQlwcl9jb250KCJcbiIpOworCQlwcl93YXJuaW5nKCIgIFR4IHJpbmcgJXA6ICIsIHlwLT50eF9yaW5nKTsKIAkJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiICU0LjR4IC8lOC44eCIsCisJCQlwcl9jb250KCIgJTA0eCAvJTA4eCIsCiAJCQkgICAgICAgeXAtPnR4X3N0YXR1c1tpXS50eF9lcnJzLAogCQkJICAgICAgIHlwLT50eF9yaW5nW2ldLnJlc3VsdF9zdGF0dXMpOwotCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCX0KIAogCS8qIElmIHRoZSBoYXJkd2FyZSBpcyBmb3VuZCB0byBoYW5nIHJlZ3VsYXJseSwgd2Ugd2lsbCB1cGRhdGUgdGhlIGNvZGUKQEAgLTg5MSw4ICs4ODcsOCBAQAogCQl5cC0+dHhfZnVsbCA9IDE7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFllbGxvd2ZpbiB0cmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCB5cC0+Y3VyX3R4LCBlbnRyeSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiWWVsbG93ZmluIHRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKKwkJCSAgICAgIHlwLT5jdXJfdHgsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTkxNiw4ICs5MTIsOCBAQAogCQl1MTYgaW50cl9zdGF0dXMgPSBpb3JlYWQxNihpb2FkZHIgKyBJbnRyQ2xlYXIpOwogCiAJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBZZWxsb3dmaW4gaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJZZWxsb3dmaW4gaW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwKKwkJCQkgICAgICBpbnRyX3N0YXR1cyk7CiAKIAkJaWYgKGludHJfc3RhdHVzID09IDApCiAJCQlicmVhazsKQEAgLTk2MywxMyArOTU5LDEyIEBACiAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA1KQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHF1ZXVlICVkIGNoZWNrLCBUeCBzdGF0dXMgIgotCQkJCQkJICAgIiU0LjR4ICU0LjR4ICU0LjR4ICU0LjR4LlxuIiwKLQkJCQkJCSAgIGRldi0+bmFtZSwgZW50cnksCi0JCQkJCQkgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50eF9jbnQsCi0JCQkJCQkgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50eF9lcnJzLAotCQkJCQkJICAgeXAtPnR4X3N0YXR1c1tlbnRyeV0udG90YWxfdHhfY250LAotCQkJCQkJICAgeXAtPnR4X3N0YXR1c1tlbnRyeV0ucGF1c2VkKTsKKwkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJUeCBxdWV1ZSAlZCBjaGVjaywgVHggc3RhdHVzICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCisJCQkJCQkgICAgICBlbnRyeSwKKwkJCQkJCSAgICAgIHlwLT50eF9zdGF0dXNbZW50cnldLnR4X2NudCwKKwkJCQkJCSAgICAgIHlwLT50eF9zdGF0dXNbZW50cnldLnR4X2VycnMsCisJCQkJCQkgICAgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50b3RhbF90eF9jbnQsCisJCQkJCQkgICAgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS5wYXVzZWQpOwogI2VuZGlmCiAJCQkJaWYgKHR4X2VycnMgPT0gMCkKIAkJCQkJYnJlYWs7CS8qIEl0IHN0aWxsIGhhc24ndCBiZWVuIFR4ZWQgKi8KQEAgLTk3OCw4ICs5NzMsOCBAQAogCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCQlpZiAoeWVsbG93ZmluX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlNC40eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCB0eF9lcnJzKTsKKwkJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlMDR4XG4iLAorCQkJCQkJCSAgICAgIHR4X2VycnMpOwogI2VuZGlmCiAJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQkJCWlmICh0eF9lcnJzICYgMHhGODAwKSBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC05ODksOCArOTg0LDggQEAKIAkJCQl9IGVsc2UgewogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOb3JtYWwgdHJhbnNtaXQsIFR4IHN0YXR1cyAlNC40eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCB0eF9lcnJzKTsKKwkJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiTm9ybWFsIHRyYW5zbWl0LCBUeCBzdGF0dXMgJTA0eFxuIiwKKwkJCQkJCQkgICAgICB0eF9lcnJzKTsKICNlbmRpZgogCQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gdHhfZXJycyAmIDE1OwpAQCAtMTAwOCw4ICsxMDAzLDggQEAKIAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoeXAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgeXAtPmN1cl90eCwgeXAtPnR4X2Z1bGwpOworCQkJCW5ldGRldl9lcnIoZGV2LCAiT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkXG4iLAorCQkJCQkgICBkaXJ0eV90eCwgeXAtPmN1cl90eCwgeXAtPnR4X2Z1bGwpOwogCQkJCWRpcnR5X3R4ICs9IFRYX1JJTkdfU0laRTsKIAkJCX0KICNlbmRpZgpAQCAtMTAzMSwxNiArMTAyNiwxNSBAQAogCQkJeWVsbG93ZmluX2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLWJvZ3VzY250IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCi0JCQkJICAgInN0YXR1cz0weCU0LjR4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl93YXJuKGRldiwgIlRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXM9JSMwNHhcbiIsCisJCQkJICAgIGludHJfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoMSk7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjMDR4XG4iLAorCQkJICAgICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cykpOwogCiAJc3Bpbl91bmxvY2sgKCZ5cC0+bG9jayk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CkBAIC0xMDU1LDkgKzEwNDksOSBAQAogCWludCBib2d1c2NudCA9IHlwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSAtIHlwLT5jdXJfcng7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHllbGxvd2Zpbl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTguOHguXG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHllbGxvd2Zpbl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTA4eFxuIiwKIAkJCSAgIGVudHJ5LCB5cC0+cnhfcmluZ1tlbnRyeV0ucmVzdWx0X3N0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICAjJWQgZGVzYy4gJTguOHggJTguOHggJTguOHguXG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIGRlc2MuICUwOHggJTA4eCAlMDh4XG4iLAogCQkJICAgZW50cnksIHlwLT5yeF9yaW5nW2VudHJ5XS5kYmRtYV9jbWQsIHlwLT5yeF9yaW5nW2VudHJ5XS5hZGRyLAogCQkJICAgeXAtPnJ4X3JpbmdbZW50cnldLnJlc3VsdF9zdGF0dXMpOwogCX0KQEAgLTEwODEsMjAgKzEwNzUsMjAgQEAKIAkJCWxlMzJfdG9fY3B1KGRlc2MtPnJlc3VsdF9zdGF0dXMpKSAmIDB4ZmZmZjsKIAkJZnJhbWVfc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCYoYnVmX2FkZHJbZGF0YV9zaXplIC0gMl0pKTsKIAkJaWYgKHllbGxvd2Zpbl9kZWJ1ZyA+IDQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICB5ZWxsb3dmaW5fcngoKSBzdGF0dXMgd2FzICU0LjR4LlxuIiwKLQkJCQkgICBmcmFtZV9zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMoKSBzdGF0dXMgd2FzICUwNHhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGZyYW1lX3N0YXR1cyk7CiAJCWlmICgtLWJvZ3VzY250IDwgMCkKIAkJCWJyZWFrOwogCQlpZiAoICEgKGRlc2Nfc3RhdHVzICYgUlhfRU9QKSkgewogCQkJaWYgKGRhdGFfc2l6ZSAhPSAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzLCIKLQkJCQkJICAgIiBzdGF0dXMgJTQuNHgsIGRhdGFfc2l6ZSAlZCFcbiIsIGRldi0+bmFtZSwgZGVzY19zdGF0dXMsIGRhdGFfc2l6ZSk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LCAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwNHgsIGRhdGFfc2l6ZSAlZCFcbiIsCisJCQkJCSAgICBkZXNjX3N0YXR1cywgZGF0YV9zaXplKTsKIAkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9IGVsc2UgaWYgKCh5cC0+ZHJ2X2ZsYWdzICYgSXNHaWdhYml0KSAgJiYgIChmcmFtZV9zdGF0dXMgJiAweDAwMzgpKSB7CiAJCQkvKiBUaGVyZSB3YXMgYSBlcnJvci4gKi8KIAkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIHllbGxvd2Zpbl9yeCgpIFJ4IGVycm9yIHdhcyAlNC40eC5cbiIsCi0JCQkJCSAgIGZyYW1lX3N0YXR1cyk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMoKSBSeCBlcnJvciB3YXMgJTA0eFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIGZyYW1lX3N0YXR1cyk7CiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKGZyYW1lX3N0YXR1cyAmIDB4MDA2MCkgZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDA4KSBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwpAQCAtMTExOCw4ICsxMTEyLDggQEAKIAkJCQllbnRyeSpzaXplb2Yoc3RydWN0IHllbGxvd2Zpbl9kZXNjKSksCiAJCQkJIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIsIDYpICE9IDApIHsKIAkJCWlmIChib2d1c19yeCsrID09IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJhZCBmcmFtZSB0byAlcE1cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgYnVmX2FkZHIpOworCQkJCW5ldGRldl93YXJuKGRldiwgIkJhZCBmcmFtZSB0byAlcE1cbiIsCisJCQkJCSAgICBidWZfYWRkcik7CiAjZW5kaWYKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMTI5LDkgKzExMjMsOCBAQAogCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIHllbGxvd2Zpbl9yeCgpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIgotCQkJCQkgICAiIG9mICVkLCBib2d1c19jbnQgJWQuXG4iLAotCQkJCQkgICBwa3RfbGVuLCBkYXRhX3NpemUsIGJvZ3VzY250KTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICAlcygpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIG9mICVkLCBib2d1c19jbnQgJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBwa3RfbGVuLCBkYXRhX3NpemUsIGJvZ3VzY250KTsKICNlbmRpZgogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBqdXN0IHBhc3MgdXAgdGhlIHNrYnVmZgogCQkJICAgd2l0aG91dCBjb3B5aW5nIHRvIGEgcHJvcGVybHkgc2l6ZWQgc2tidWZmLiAqLwpAQCAtMTE5MSw4ICsxMTg0LDcgQEAKIAogc3RhdGljIHZvaWQgeWVsbG93ZmluX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cykKIHsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb21ldGhpbmcgV2lja2VkIGhhcHBlbmVkISAlNC40eC5cbiIsCi0JCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCW5ldGRldl9lcnIoZGV2LCAiU29tZXRoaW5nIFdpY2tlZCBoYXBwZW5lZCEgJTA0eFxuIiwgaW50cl9zdGF0dXMpOwogCS8qIEhtbW1tbSwgaXQncyBub3QgY2xlYXIgd2hhdCB0byBkbyBoZXJlLiAqLwogCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhQQ0lFcnIgfCBJbnRyVHhQQ0lGYXVsdCkpCiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0xMjA5LDEzICsxMjAxLDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgVHggJTQuNHggIgotCQkJICAgIlJ4ICU0LjR4IEludCAlMi4yeC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIFR4U3RhdHVzKSwKLQkJCSAgIGlvcmVhZDE2KGlvYWRkciArIFJ4U3RhdHVzKSwKLQkJCSAgIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LCB5cC0+Y3VyX3J4LCB5cC0+ZGlydHlfcngpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIFR4ICUwNHggUnggJTA0eCBJbnQgJTAyeFxuIiwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIFR4U3RhdHVzKSwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIFJ4U3RhdHVzKSwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkXG4iLAorCQkJICAgICAgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LAorCQkJICAgICAgeXAtPmN1cl9yeCwgeXAtPmRpcnR5X3J4KTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwpAQCAtMTIyOSwzMyArMTIyMSwzNSBAQAogCiAjaWYgZGVmaW5lZChfX2kzODZfXykKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyIgIFR4IHJpbmcgYXQgJTguOGxseDpcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgYXQgJTA4bGx4OlxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXlwLT50eF9yaW5nX2RtYSk7CiAJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkUqMjsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTguOHggJTguOHggJTguOHggJTguOHguXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBUeFB0cikgPT0gKGxvbmcpJnlwLT50eF9yaW5nW2ldID8gJz4nIDogJyAnLAogCQkJCSAgIGksIHlwLT50eF9yaW5nW2ldLmRiZG1hX2NtZCwgeXAtPnR4X3JpbmdbaV0uYWRkciwKIAkJCQkgICB5cC0+dHhfcmluZ1tpXS5icmFuY2hfYWRkciwgeXAtPnR4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7CiAJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHN0YXR1cyAlcDpcbiIsIHlwLT50eF9zdGF0dXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIHN0YXR1cyAlNC40eCAlNC40eCAlNC40eCAlNC40eC5cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIHN0YXR1cyAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLAogCQkJCSAgIGksIHlwLT50eF9zdGF0dXNbaV0udHhfY250LCB5cC0+dHhfc3RhdHVzW2ldLnR4X2VycnMsCiAJCQkJICAgeXAtPnR4X3N0YXR1c1tpXS50b3RhbF90eF9jbnQsIHlwLT50eF9zdGF0dXNbaV0ucGF1c2VkKTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICU4LjhsbHg6XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICUwOGxseDpcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl5cC0+cnhfcmluZ19kbWEpOwogCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgJWMgIyVkIGRlc2MuICU4Ljh4ICU4Ljh4ICU4Ljh4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTA4eCAlMDh4ICUwOHhcbiIsCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgUnhQdHIpID09IChsb25nKSZ5cC0+cnhfcmluZ1tpXSA/ICc+JyA6ICcgJywKIAkJCQkgICBpLCB5cC0+cnhfcmluZ1tpXS5kYmRtYV9jbWQsIHlwLT5yeF9yaW5nW2ldLmFkZHIsCiAJCQkJICAgeXAtPnJ4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7CiAJCQlpZiAoeWVsbG93ZmluX2RlYnVnID4gNikgewogCQkJCWlmIChnZXRfdW5hbGlnbmVkKCh1OCopeXAtPnJ4X3JpbmdbaV0uYWRkcikgIT0gMHg2OSkgewogCQkJCQlpbnQgajsKKworCQkJCQlwcmludGsoS0VSTl9ERUJVRyk7CiAJCQkJCWZvciAoaiA9IDA7IGogPCAweDUwOyBqKyspCi0JCQkJCQlwcmludGsoIiAlNC40eCIsCi0JCQkJCQkJICAgZ2V0X3VuYWxpZ25lZCgoKHUxNiopeXAtPnJ4X3JpbmdbaV0uYWRkcikgKyBqKSk7Ci0JCQkJCXByaW50aygiXG4iKTsKKwkJCQkJCXByX2NvbnQoIiAlMDR4IiwKKwkJCQkJCQlnZXRfdW5hbGlnbmVkKCgodTE2Kil5cC0+cnhfcmluZ1tpXS5hZGRyKSArIGopKTsKKwkJCQkJcHJfY29udCgiXG4iKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTEyODEsOCArMTI3NSw4IEBACiAKICNpZmRlZiBZRl9QUk9UT1RZUEUJCQkvKiBTdXBwb3J0IGZvciBwcm90b3R5cGUgaGFyZHdhcmUgZXJyYXRhLiAqLwogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZWQgJWQgZnJhbWVzIHRoYXQgd2Ugc2hvdWxkIG5vdCBoYXZlLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgYm9ndXNfcngpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlJlY2VpdmVkICVkIGZyYW1lcyB0aGF0IHdlIHNob3VsZCBub3QgaGF2ZVxuIiwKKwkJCSAgICAgIGJvZ3VzX3J4KTsKIAl9CiAjZW5kaWYKIApAQCAtMTMwMSwxNiArMTI5NSwxNyBAQAogCWlvd3JpdGUxNihjZmdfdmFsdWUgJiB+MHgxMDAwLCBpb2FkZHIgKyBDbmZnKTsKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQlpb3dyaXRlMTYoMHgwMDBGLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDY0KSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpIHx8CisJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgd2VsbCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlpb3dyaXRlMTYoMHgwMDBCLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeyAvKiBNdXN0IHVzZSB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsgLyogTXVzdCB1c2UgdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLiAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJdTE2IGhhc2hfdGFibGVbNF07CiAJCWludCBpOworCiAJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJdW5zaWduZWQgaW50IGJpdDsKIAogCQkJLyogRHVlIHRvIGEgYnVnIGluIHRoZSBlYXJseSBjaGlwIHZlcnNpb25zLCBtdWx0aXBsZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBiYzVhZTBmLi5kZWY0OWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIAkvKiBCeXRlIEQgKi8KIAljZmJsay0+ZHVtbXlfMSA9IDE7IAkvKiBzZXQgdG8gMSAqLwogCWNmYmxrLT50eF9pZnNfcmV0cmlnID0gMzsgLyogSG1tLi4uIERpc2FibGVkICovCi0JY2ZibGstPm1jX2FsbCA9IChkZXYtPm1jX2xpc3QgfHwgKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSk7LyogbXVsdGljYXN0IGFsbCBtb2RlICovCisJY2ZibGstPm1jX2FsbCA9ICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwKKwkJCShkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSk7IC8qIG11bHRpY2FzdCBhbGwgbW9kZSAqLwogCWNmYmxrLT5yY3ZfbW9uID0gMDsJLyogTW9uaXRvciBtb2RlIGRpc2FibGVkICovCiAJY2ZibGstPmZyYWdfYWNwdCA9IDA7CS8qIERvIG5vdCBhY2NlcHQgZnJhZ21lbnRzICovCiAJY2ZibGstPnRzdHJ0dHJzID0gMDsJLyogTm8gc3RhcnQgdHJhbnNtaXNzaW9uIHRocmVzaG9sZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9LY29uZmlnIGIvZHJpdmVycy9vZi9LY29uZmlnCmluZGV4IGQyZmEyN2M1Yy4uN2NlY2M4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9LY29uZmlnCisrKyBiL2RyaXZlcnMvb2YvS2NvbmZpZwpAQCAtMSwzICsxLDExIEBACitjb25maWcgT0ZfRkxBVFRSRUUKKwlib29sCisJZGVwZW5kcyBvbiBPRgorCitjb25maWcgT0ZfRFlOQU1JQworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE9GICYmIFBQQ19PRgorCiBjb25maWcgT0ZfREVWSUNFCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gT0YgJiYgKFNQQVJDIHx8IFBQQ19PRiB8fCBNSUNST0JMQVpFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9NYWtlZmlsZSBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKaW5kZXggYmRmYjVmNS4uZjIzMmNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL29mL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLXkgPSBiYXNlLm8KK29iai0kKENPTkZJR19PRl9GTEFUVFJFRSkgKz0gZmR0Lm8KIG9iai0kKENPTkZJR19PRl9ERVZJQ0UpICs9IGRldmljZS5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19PRl9HUElPKSAgICs9IGdwaW8ubwogb2JqLSQoQ09ORklHX09GX0kyQykJKz0gb2ZfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggZTY2MjdiMi4uY2I5Njg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTIwLDggKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwogCiAvKiB1c2Ugd2hlbiB0cmF2ZXJzaW5nIHRyZWUgdGhyb3VnaCB0aGUgYWxsbmV4dCwgY2hpbGQsIHNpYmxpbmcsCiAgKiBvciBwYXJlbnQgbWVtYmVycyBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuCkBAIC0zNyw3ICszOSw3IEBACiAJCQlucCA9IG5wLT5wYXJlbnQ7CiAJCWlwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKIAkJaWYgKGlwKQotCQkJcmV0dXJuICppcDsKKwkJCXJldHVybiBiZTMyX3RvX2NwdXAoaXApOwogCX0gd2hpbGUgKG5wLT5wYXJlbnQpOwogCS8qIE5vICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5IGZvciB0aGUgcm9vdCBub2RlICovCiAJcmV0dXJuIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CkBAIC01MywxMyArNTUsODggQEAKIAkJCW5wID0gbnAtPnBhcmVudDsKIAkJaXAgPSBvZl9nZXRfcHJvcGVydHkobnAsICIjc2l6ZS1jZWxscyIsIE5VTEwpOwogCQlpZiAoaXApCi0JCQlyZXR1cm4gKmlwOworCQkJcmV0dXJuIGJlMzJfdG9fY3B1cChpcCk7CiAJfSB3aGlsZSAobnAtPnBhcmVudCk7CiAJLyogTm8gI3NpemUtY2VsbHMgcHJvcGVydHkgZm9yIHRoZSByb290IG5vZGUgKi8KIAlyZXR1cm4gT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVDsKIH0KIEVYUE9SVF9TWU1CT0wob2Zfbl9zaXplX2NlbGxzKTsKIAorI2lmICFkZWZpbmVkKENPTkZJR19TUEFSQykgICAvKiBTUEFSQyBkb2Vzbid0IGRvIHJlZiBjb3VudGluZyAoeWV0KSAqLworLyoqCisgKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKKyAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KKyAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKKyAqCisgKglSZXR1cm5zIG5vZGUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWlmIChub2RlKQorCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7CisJcmV0dXJuIG5vZGU7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOworfQorCisvKioKKyAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQorICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKKyAqCisgKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKKyAqCWFzIHRoZSBkZXN0cnVjdG9yLgorICovCitzdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KKwlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKKwkJcHJfZXJyKCJFUlJPUjogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQorCQlyZXR1cm47CisKKwl3aGlsZSAocHJvcCkgeworCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OworCQlrZnJlZShwcm9wLT5uYW1lKTsKKwkJa2ZyZWUocHJvcC0+dmFsdWUpOworCQlrZnJlZShwcm9wKTsKKwkJcHJvcCA9IG5leHQ7CisKKwkJaWYgKCFwcm9wKSB7CisJCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOworCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKKwkJfQorCX0KKwlrZnJlZShub2RlLT5mdWxsX25hbWUpOworCWtmcmVlKG5vZGUtPmRhdGEpOworCWtmcmVlKG5vZGUpOworfQorCisvKioKKyAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQorICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bworICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycworICoKKyAqLwordm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaWYgKG5vZGUpCisJCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7CisjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLworCiBzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICBpbnQgKmxlbnApCkBAIC0xNDQsNiArMjIxLDI3IEBACiBFWFBPUlRfU1lNQk9MKG9mX2RldmljZV9pc19jb21wYXRpYmxlKTsKIAogLyoqCisgKiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUgLSBUZXN0IHJvb3Qgb2YgZGV2aWNlIHRyZWUgZm9yIGEgZ2l2ZW4gY29tcGF0aWJsZSB2YWx1ZQorICogQGNvbXBhdDogY29tcGF0aWJsZSBzdHJpbmcgdG8gbG9vayBmb3IgaW4gcm9vdCBub2RlJ3MgY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgbm9kZSBoYXMgdGhlIGdpdmVuIHZhbHVlIGluIGl0cworICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqLworaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290OworCWludCByYyA9IDA7CisKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAocm9vdCkgeworCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7CisJCW9mX25vZGVfcHV0KHJvb3QpOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSk7CisKKy8qKgogICogIG9mX2RldmljZV9pc19hdmFpbGFibGUgLSBjaGVjayBpZiBhIGRldmljZSBpcyBhdmFpbGFibGUgZm9yIHVzZQogICoKICAqICBAZGV2aWNlOiBOb2RlIHRvIGNoZWNrIGZvciBhdmFpbGFiaWxpdHkKQEAgLTUxOSw2ICs2MTcsMjcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG9mX21vZGFsaWFzX25vZGUpOwogCiAvKioKKyAqIG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCisgKiBAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKKyAqCisgKiBSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQorICogb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKKwlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQorCQlpZiAobnAtPnBoYW5kbGUgPT0gaGFuZGxlKQorCQkJYnJlYWs7CisJb2Zfbm9kZV9nZXQobnApOworCXJlYWRfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCXJldHVybiBucDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOworCisvKioKICAqIG9mX3BhcnNlX3BoYW5kbGUgLSBSZXNvbHZlIGEgcGhhbmRsZSBwcm9wZXJ0eSB0byBhIGRldmljZV9ub2RlIHBvaW50ZXIKICAqIEBucDogUG9pbnRlciB0byBkZXZpY2Ugbm9kZSBob2xkaW5nIHBoYW5kbGUgcHJvcGVydHkKICAqIEBwaGFuZGxlX25hbWU6IE5hbWUgb2YgcHJvcGVydHkgaG9sZGluZyBhIHBoYW5kbGUgdmFsdWUKQEAgLTU3OCw4ICs2OTcsOCBAQAogCQkJCWNvbnN0IHZvaWQgKipvdXRfYXJncykKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQljb25zdCB1MzIgKmxpc3Q7Ci0JY29uc3QgdTMyICpsaXN0X2VuZDsKKwljb25zdCBfX2JlMzIgKmxpc3Q7CisJY29uc3QgX19iZTMyICpsaXN0X2VuZDsKIAlpbnQgc2l6ZTsKIAlpbnQgY3VyX2luZGV4ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOwpAQCAtNTkzLDcgKzcxMiw3IEBACiAJbGlzdF9lbmQgPSBsaXN0ICsgc2l6ZSAvIHNpemVvZigqbGlzdCk7CiAKIAl3aGlsZSAobGlzdCA8IGxpc3RfZW5kKSB7Ci0JCWNvbnN0IHUzMiAqY2VsbHM7CisJCWNvbnN0IF9fYmUzMiAqY2VsbHM7CiAJCWNvbnN0IHBoYW5kbGUgKnBoYW5kbGU7CiAKIAkJcGhhbmRsZSA9IGxpc3QrKzsKQEAgLTYxNyw3ICs3MzYsNyBAQAogCQkJZ290byBlcnIxOwogCQl9CiAKLQkJbGlzdCArPSAqY2VsbHM7CisJCWxpc3QgKz0gYmUzMl90b19jcHVwKGNlbGxzKTsKIAkJaWYgKGxpc3QgPiBsaXN0X2VuZCkgewogCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgYXJndW1lbnRzIGxlbmd0aFxuIiwKIAkJCQkgbnAtPmZ1bGxfbmFtZSk7CkBAIC02NTgsMyArNzc3LDE5MCBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyk7CisKKy8qKgorICogcHJvbV9hZGRfcHJvcGVydHkgLSBBZGQgYSBwcm9wZXJ0eSB0byBhIG5vZGUKKyAqLworaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcm9wLT5uZXh0ID0gTlVMTDsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7CisJd2hpbGUgKCpuZXh0KSB7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgeworCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCisJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwkqbmV4dCA9IHByb3A7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHByb21fcmVtb3ZlX3Byb3BlcnR5IC0gUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiCisgKiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KKyAqLworaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQkqbmV4dCA9IHByb3AtPm5leHQ7CisJCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKKwkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKKworI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKKwkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogcHJvbV91cGRhdGVfcHJvcGVydHkgLSBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsCisgKiBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlIHByb3BlcnR5IGxpc3QKKyAqLworaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkgc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJIHN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQluZXdwcm9wLT5uZXh0ID0gb2xkcHJvcC0+bmV4dDsKKwkJCSpuZXh0ID0gbmV3cHJvcDsKKwkJCW9sZHByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOworCQkJbnAtPmRlYWRwcm9wcyA9IG9sZHByb3A7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQluZXh0ID0gJigqbmV4dCktPm5leHQ7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3VwZGF0ZV9wcm9wKG5wLT5wZGUsIG5ld3Byb3AsIG9sZHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRFlOQU1JQykKKy8qCisgKiBTdXBwb3J0IGZvciBkeW5hbWljIGRldmljZSB0cmVlcy4KKyAqCisgKiBPbiBzb21lIHBsYXRmb3JtcywgdGhlIGRldmljZSB0cmVlIGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBydW50aW1lLgorICogVGhlIHJvdXRpbmVzIGluIHRoaXMgc2VjdGlvbiBzdXBwb3J0IGFkZGluZywgcmVtb3ZpbmcgYW5kIGNoYW5naW5nCisgKiBkZXZpY2UgdHJlZSBub2Rlcy4KKyAqLworCisvKioKKyAqIG9mX2F0dGFjaF9ub2RlIC0gUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgorICovCit2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKKwlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOworCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7CisJYWxsbm9kZXMgPSBucDsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogb2ZfZGV0YWNoX25vZGUgLSAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAorICogdGhlIG5vZGUgaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCisgKi8KK3ZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCXBhcmVudCA9IG5wLT5wYXJlbnQ7CisJaWYgKCFwYXJlbnQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChhbGxub2RlcyA9PSBucCkKKwkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OworCQlmb3IgKHByZXYgPSBhbGxub2RlczsKKwkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOworCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQorCQkJOworCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7CisJfQorCisJaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCisJCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOworCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKKwkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOworCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQorCQkJOworCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7CisJfQorCisJb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOworCitvdXRfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKSAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2ZkdC5jIGIvZHJpdmVycy9vZi9mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9vZi9mZHQuYwpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIEZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHRoZSBGbGF0dGVuZWQgRGV2aWNlIFRyZWUgZGF0YSBmb3JtYXQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycAorICogYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1BQQworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjZW5kaWYgLyogQ09ORklHX1BQQyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworCitzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7CisKK2NoYXIgKmZpbmRfZmxhdF9kdF9zdHJpbmcodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKworCQliZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncykgKyBvZmZzZXQ7Cit9CisKKy8qKgorICogb2Zfc2Nhbl9mbGF0X2R0IC0gc2NhbiBmbGF0dGVuZWQgdHJlZSBibG9iIGFuZCBjYWxsIGNhbGxiYWNrIG9uIGVhY2guCisgKiBAaXQ6IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAZGF0YTogY29udGV4dCBkYXRhIHBvaW50ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbiB0aGUgZmxhdHRlbmVkIGRldmljZS10cmVlLCBpdCBpcworICogdXNlZCB0byBleHRyYWN0IHRoZSBtZW1vcnkgaW5mb3JtYXRpb24gYXQgYm9vdCBiZWZvcmUgd2UgY2FuCisgKiB1bmZsYXR0ZW4gdGhlIHRyZWUKKyAqLworaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCisJCQkJICAgICB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisJaW50IHJjID0gMDsKKwlpbnQgZGVwdGggPSAtMTsKKworCWRvIHsKKwkJdTMyIHRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCWNoYXIgKnBhdGhwOworCisJCXAgKz0gNDsKKwkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgeworCQkJZGVwdGgtLTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQorCQkJY29udGludWU7CisJCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQorCQkJYnJlYWs7CisJCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgeworCQkJdTMyIHN6ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilwKTsKKwkJCXAgKz0gODsKKwkJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOworCQkJcCArPSBzejsKKwkJCXAgPSBfQUxJR04ocCwgNCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJCXByX2VycigiSW52YWxpZCB0YWcgJXggaW4gZmxhdCBkZXZpY2UgdHJlZSFcbiIsIHRhZyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXB0aCsrOworCQlwYXRocCA9IChjaGFyICopcDsKKwkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOworCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7CisJCQljaGFyICpscCwgKm5wOworCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKKwkJCQlpZiAoKCpucCkgPT0gJy8nKQorCQkJCQlscCA9IG5wKzE7CisJCQlpZiAobHAgIT0gTlVMTCkKKwkJCQlwYXRocCA9IGxwOworCQl9CisJCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKKwkJaWYgKHJjICE9IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBvZl9nZXRfZmxhdF9kdF9yb290IC0gZmluZCB0aGUgcm9vdCBub2RlIGluIHRoZSBmbGF0IGJsb2IKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCisJd2hpbGUgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgPT0gT0ZfRFRfTk9QKQorCQlwICs9IDQ7CisJQlVHX09OKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7CisJcCArPSA0OworCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7Cit9CisKKy8qKgorICogb2ZfZ2V0X2ZsYXRfZHRfcHJvcCAtIEdpdmVuIGEgbm9kZSBpbiB0aGUgZmxhdCBibG9iLCByZXR1cm4gdGhlIHByb3BlcnR5IHB0cgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0aGluIHNjYW5fZmxhdHRlbmVkX2R0IGNhbGxiYWNrIHRvIGdldAorICogYWNjZXNzIHRvIHByb3BlcnRpZXMKKyAqLwordm9pZCAqX19pbml0IG9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7CisKKwlkbyB7CisJCXUzMiB0YWcgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXApOworCQl1MzIgc3osIG5vZmY7CisJCWNvbnN0IGNoYXIgKm5zdHI7CisKKwkJcCArPSA0OworCQlpZiAodGFnID09IE9GX0RUX05PUCkKKwkJCWNvbnRpbnVlOworCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlyZXR1cm4gTlVMTDsKKworCQlzeiA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCW5vZmYgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKShwICsgNCkpOworCQlwICs9IDg7CisJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CisKKwkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7CisJCWlmIChuc3RyID09IE5VTEwpIHsKKwkJCXByX3dhcm5pbmcoIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXggbmFtZSAhXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChzdHJjbXAobmFtZSwgbnN0cikgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzejsKKwkJCXJldHVybiAodm9pZCAqKXA7CisJCX0KKwkJcCArPSBzejsKKwkJcCA9IF9BTElHTihwLCA0KTsKKwl9IHdoaWxlICgxKTsKK30KKworLyoqCisgKiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUgLSBSZXR1cm4gdHJ1ZSBpZiBnaXZlbiBub2RlIGhhcyBjb21wYXQgaW4gY29tcGF0aWJsZSBsaXN0CisgKiBAbm9kZTogbm9kZSB0byB0ZXN0CisgKiBAY29tcGF0OiBjb21wYXRpYmxlIHN0cmluZyB0byBjb21wYXJlIHdpdGggY29tcGF0aWJsZSBsaXN0LgorICovCitpbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGNwbGVuLCBsOworCisJY3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGNwbGVuID4gMCkgeworCQlpZiAoc3RybmNhc2VjbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCisJCQlyZXR1cm4gMTsKKwkJbCA9IHN0cmxlbihjcCkgKyAxOworCQljcCArPSBsOworCQljcGxlbiAtPSBsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqX19pbml0IHVuZmxhdHRlbl9kdF9hbGxvYyh1bnNpZ25lZCBsb25nICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2b2lkICpyZXM7CisKKwkqbWVtID0gX0FMSUdOKCptZW0sIGFsaWduKTsKKwlyZXMgPSAodm9pZCAqKSptZW07CisJKm1lbSArPSBzaXplOworCisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZHRfbm9kZSAtIEFsbG9jIGFuZCBwb3B1bGF0ZSBhIGRldmljZV9ub2RlIGZyb20gdGhlIGZsYXQgdHJlZQorICogQHA6IHBvaW50ZXIgdG8gbm9kZSBpbiBmbGF0IHRyZWUKKyAqIEBkYWQ6IFBhcmVudCBzdHJ1Y3QgZGV2aWNlX25vZGUKKyAqIEBhbGxuZXh0cHA6IHBvaW50ZXIgdG8gLT5hbGxuZXh0IGZyb20gbGFzdCBhbGxvY2F0ZWQgZGV2aWNlX25vZGUKKyAqIEBmcHNpemU6IFNpemUgb2YgdGhlIG5vZGUgcGF0aCB1cCBhdCB0aGUgY3VycmVudCBkZXB0aC4KKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgKnAsCisJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAorCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAorCQkJCQl1bnNpZ25lZCBsb25nIGZwc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7CisJY2hhciAqcGF0aHA7CisJdTMyIHRhZzsKKwl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOworCWludCBoYXNfbmFtZSA9IDA7CisJaW50IG5ld19mb3JtYXQgPSAwOworCisJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgc3RhcnQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7CisJCXJldHVybiBtZW07CisJfQorCSpwICs9IDQ7CisJcGF0aHAgPSAoY2hhciAqKSpwOworCWwgPSBhbGxvY2wgPSBzdHJsZW4ocGF0aHApICsgMTsKKwkqcCA9IF9BTElHTigqcCArIGwsIDQpOworCisJLyogdmVyc2lvbiAweDEwIGhhcyBhIG1vcmUgY29tcGFjdCB1bml0IG5hbWUgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdWxsCisJICogcGF0aC4gd2UgYWNjdW11bGF0ZSB0aGUgZnVsbCBwYXRoIHNpemUgdXNpbmcgImZwc2l6ZSIsIHdlJ2xsIHJlYnVpbGQKKwkgKiBpdCBsYXRlci4gV2UgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuYW1lIGlzCisJICogbm90ICcvJy4KKwkgKi8KKwlpZiAoKCpwYXRocCkgIT0gJy8nKSB7CisJCW5ld19mb3JtYXQgPSAxOworCQlpZiAoZnBzaXplID09IDApIHsKKwkJCS8qIHJvb3Qgbm9kZTogc3BlY2lhbCBjYXNlLiBmcHNpemUgYWNjb3VudHMgZm9yIHBhdGgKKwkJCSAqIHBsdXMgdGVybWluYXRpbmcgemVyby4gcm9vdCBub2RlIG9ubHkgaGFzICcvJywgc28KKwkJCSAqIGZwc2l6ZSBzaG91bGQgYmUgMiwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGZpcnN0CisJCQkgKiBsZXZlbCBub2RlcyB0byBoYXZlIHR3byAnLycgc28gd2UgdXNlIGZwc2l6ZSAxIGhlcmUKKwkJCSAqLworCQkJZnBzaXplID0gMTsKKwkJCWFsbG9jbCA9IDI7CisJCX0gZWxzZSB7CisJCQkvKiBhY2NvdW50IGZvciAnLycgYW5kIHBhdGggc2l6ZSBtaW51cyB0ZXJtaW5hbCAwCisJCQkgKiBhbHJlYWR5IGluICdsJworCQkJICovCisJCQlmcHNpemUgKz0gbDsKKwkJCWFsbG9jbCA9IGZwc2l6ZTsKKwkJfQorCX0KKworCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAorCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCWlmIChhbGxuZXh0cHApIHsKKwkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7CisJCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIgKilucCkgKyBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKTsKKwkJaWYgKG5ld19mb3JtYXQpIHsKKwkJCWNoYXIgKmZuID0gbnAtPmZ1bGxfbmFtZTsKKwkJCS8qIHJlYnVpbGQgZnVsbCBwYXRoIGZvciBuZXcgZm9ybWF0ICovCisJCQlpZiAoZGFkICYmIGRhZC0+cGFyZW50KSB7CisJCQkJc3RyY3B5KGZuLCBkYWQtPmZ1bGxfbmFtZSk7CisjaWZkZWYgREVCVUcKKwkJCQlpZiAoKHN0cmxlbihmbikgKyBsICsgMSkgIT0gYWxsb2NsKSB7CisJCQkJCXByX2RlYnVnKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKKwkJCQkJCXBhdGhwLCAoaW50KXN0cmxlbihmbiksCisJCQkJCQlsLCBhbGxvY2wpOworCQkJCX0KKyNlbmRpZgorCQkJCWZuICs9IHN0cmxlbihmbik7CisJCQl9CisJCQkqKGZuKyspID0gJy8nOworCQkJbWVtY3B5KGZuLCBwYXRocCwgbCk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKKwkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKKwkJKiphbGxuZXh0cHAgPSBucDsKKwkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKKwkJaWYgKGRhZCAhPSBOVUxMKSB7CisJCQlucC0+cGFyZW50ID0gZGFkOworCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCisJCQlpZiAoZGFkLT5uZXh0ID09IE5VTEwpCisJCQkJZGFkLT5jaGlsZCA9IG5wOworCQkJZWxzZQorCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOworCQkJZGFkLT5uZXh0ID0gbnA7CisJCX0KKwkJa3JlZl9pbml0KCZucC0+a3JlZik7CisJfQorCXdoaWxlICgxKSB7CisJCXUzMiBzeiwgbm9mZjsKKwkJY2hhciAqcG5hbWU7CisKKwkJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKKwkJCSpwICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlicmVhazsKKwkJKnAgKz0gNDsKKwkJc3ogPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgqcCkpOworCQlub2ZmID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKCpwKSArIDQpKTsKKwkJKnAgKz0gODsKKwkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKKwkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOworCisJCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKKwkJaWYgKHBuYW1lID09IE5VTEwpIHsKKwkJCXByX2luZm8oIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQorCQkJaGFzX25hbWUgPSAxOworCQlsID0gc3RybGVuKHBuYW1lKSArIDE7CisJCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAorCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKKwkJaWYgKGFsbG5leHRwcCkgeworCQkJLyogV2UgYWNjZXB0IGZsYXR0ZW5lZCB0cmVlIHBoYW5kbGVzIGVpdGhlciBpbgorCQkJICogZVBBUFItc3R5bGUgInBoYW5kbGUiIHByb3BlcnRpZXMsIG9yIHRoZQorCQkJICogbGVnYWN5ICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiAgSWYgYm90aAorCQkJICogYXBwZWFyIGFuZCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMsIHRoaW5ncworCQkJICogd2lsbCBnZXQgd2VpcmQuICBEb24ndCBkbyB0aGF0LiAqLworCQkJaWYgKChzdHJjbXAocG5hbWUsICJwaGFuZGxlIikgPT0gMCkgfHwKKwkJCSAgICAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApKSB7CisJCQkJaWYgKG5wLT5waGFuZGxlID09IDApCisJCQkJCW5wLT5waGFuZGxlID0gKigodTMyICopKnApOworCQkJfQorCQkJLyogQW5kIHdlIHByb2Nlc3MgdGhlICJpYm0scGhhbmRsZSIgcHJvcGVydHkKKwkJCSAqIHVzZWQgaW4gcFNlcmllcyBkeW5hbWljIGRldmljZSB0cmVlCisJCQkgKiBzdHVmZiAqLworCQkJaWYgKHN0cmNtcChwbmFtZSwgImlibSxwaGFuZGxlIikgPT0gMCkKKwkJCQlucC0+cGhhbmRsZSA9ICooKHUzMiAqKSpwKTsKKwkJCXBwLT5uYW1lID0gcG5hbWU7CisJCQlwcC0+bGVuZ3RoID0gc3o7CisJCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCX0KKwkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKKwl9CisJLyogd2l0aCB2ZXJzaW9uIDB4MTAgd2UgbWF5IG5vdCBoYXZlIHRoZSBuYW1lIHByb3BlcnR5LCByZWNyZWF0ZQorCSAqIGl0IGhlcmUgZnJvbSB0aGUgdW5pdCBuYW1lIGlmIGFic2VudAorCSAqLworCWlmICghaGFzX25hbWUpIHsKKwkJY2hhciAqcDEgPSBwYXRocCwgKnBzID0gcGF0aHAsICpwYSA9IE5VTEw7CisJCWludCBzejsKKworCQl3aGlsZSAoKnAxKSB7CisJCQlpZiAoKCpwMSkgPT0gJ0AnKQorCQkJCXBhID0gcDE7CisJCQlpZiAoKCpwMSkgPT0gJy8nKQorCQkJCXBzID0gcDEgKyAxOworCQkJcDErKzsKKwkJfQorCQlpZiAocGEgPCBwcykKKwkJCXBhID0gcDE7CisJCXN6ID0gKHBhIC0gcHMpICsgMTsKKwkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKKwkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7CisJCWlmIChhbGxuZXh0cHApIHsKKwkJCXBwLT5uYW1lID0gIm5hbWUiOworCQkJcHAtPmxlbmd0aCA9IHN6OworCQkJcHAtPnZhbHVlID0gcHAgKyAxOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKKwkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7CisJCQlwcl9kZWJ1ZygiZml4ZWQgdXAgbmFtZSBmb3IgJXMgLT4gJXNcbiIsIHBhdGhwLAorCQkJCShjaGFyICopcHAtPnZhbHVlKTsKKwkJfQorCX0KKwlpZiAoYWxsbmV4dHBwKSB7CisJCSpwcmV2X3BwID0gTlVMTDsKKwkJbnAtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJuYW1lIiwgTlVMTCk7CisJCW5wLT50eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKworCQlpZiAoIW5wLT5uYW1lKQorCQkJbnAtPm5hbWUgPSAiPE5VTEw+IjsKKwkJaWYgKCFucC0+dHlwZSkKKwkJCW5wLT50eXBlID0gIjxOVUxMPiI7CisJfQorCXdoaWxlICh0YWcgPT0gT0ZfRFRfQkVHSU5fTk9ERSkgeworCQltZW0gPSB1bmZsYXR0ZW5fZHRfbm9kZShtZW0sIHAsIG5wLCBhbGxuZXh0cHAsIGZwc2l6ZSk7CisJCXRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKCpwKSk7CisJfQorCWlmICh0YWcgIT0gT0ZfRFRfRU5EX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOworCQlyZXR1cm4gbWVtOworCX0KKwkqcCArPSA0OworCXJldHVybiBtZW07Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKy8qKgorICogZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkIC0gRGVjb2RlIGluaXRyZCBsb2NhdGlvbiBmcm9tIGZsYXQgdHJlZQorICogQG5vZGU6IHJlZmVyZW5jZSB0byBub2RlIGNvbnRhaW5pbmcgaW5pdHJkIGxvY2F0aW9uICgnY2hvc2VuJykKKyAqLwordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIGxlbjsKKwlfX2JlMzIgKnByb3A7CisKKwlwcl9kZWJ1ZygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJc3RhcnQgPSBvZl9yZWFkX3Vsb25nKHByb3AsIGxlbi80KTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJZW5kID0gb2ZfcmVhZF91bG9uZyhwcm9wLCBsZW4vNCk7CisKKwllYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHN0YXJ0LCBlbmQpOworCXByX2RlYnVnKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsIHN0YXJ0LCBlbmQpOworfQorI2Vsc2UKK2lubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCisKKy8qKgorICogZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QgLSBmZXRjaCB0aGUgdG9wIGxldmVsIGFkZHJlc3MgYW5kIHNpemUgY2VsbHMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwlfX2JlMzIgKnByb3A7CisKKwlpZiAoZGVwdGggIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkdF9yb290X3NpemVfY2VsbHMgPSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUOworCWR0X3Jvb3RfYWRkcl9jZWxscyA9IE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZHRfcm9vdF9zaXplX2NlbGxzID0gYmUzMl90b19jcHVwKHByb3ApOworCXByX2RlYnVnKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCWlmIChwcm9wKQorCQlkdF9yb290X2FkZHJfY2VsbHMgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJcHJfZGVidWcoImR0X3Jvb3RfYWRkcl9jZWxscyA9ICV4XG4iLCBkdF9yb290X2FkZHJfY2VsbHMpOworCisJLyogYnJlYWsgbm93ICovCisJcmV0dXJuIDE7Cit9CisKK3U2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApCit7CisJX19iZTMyICpwID0gKmNlbGxwOworCisJKmNlbGxwID0gcCArIHM7CisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOworfQorCisvKioKKyAqIGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkgLSBMb29rIGZvciBhbiBwYXJzZSBtZW1vcnkgbm9kZXMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CisJX19iZTMyICpyZWcsICplbmRwOworCXVuc2lnbmVkIGxvbmcgbDsKKworCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCisJaWYgKHR5cGUgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQorCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCisJCSAqLworCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoX19iZTMyKSk7CisKKwlwcl9kZWJ1ZygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCisJICAgIHVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOworCisJd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgeworCQl1NjQgYmFzZSwgc2l6ZTsKKworCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOworCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOworCisJCWlmIChzaXplID09IDApCisJCQljb250aW51ZTsKKwkJcHJfZGVidWcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKworCQllYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaChiYXNlLCBzaXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsOworCWNoYXIgKnA7CisKKwlwcl9kZWJ1Zygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOworCisJaWYgKGRlcHRoICE9IDEgfHwKKwkgICAgKHN0cmNtcCh1bmFtZSwgImNob3NlbiIpICE9IDAgJiYgc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7CisKKwkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KKwlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CisJaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKKwkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKKworI2lmZGVmIENPTkZJR19DTURMSU5FCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCisJaWYgKHAgPT0gTlVMTCB8fCBsID09IDAgfHwgKGwgPT0gMSAmJiAoKnApID09IDApKQorI2VuZGlmCisJCXN0cmxjcHkoY21kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KKworCWVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fYXJjaChub2RlKTsKKworCXByX2RlYnVnKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7CisKKwkvKiBicmVhayBub3cgKi8KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUgLSBjcmVhdGUgdHJlZSBvZiBkZXZpY2Vfbm9kZXMgZnJvbSBmbGF0IGJsb2IKKyAqCisgKiB1bmZsYXR0ZW5zIHRoZSBkZXZpY2UtdHJlZSBwYXNzZWQgYnkgdGhlIGZpcm13YXJlLCBjcmVhdGluZyB0aGUKKyAqIHRyZWUgb2Ygc3RydWN0IGRldmljZV9ub2RlLiBJdCBhbHNvIGZpbGxzIHRoZSAibmFtZSIgYW5kICJ0eXBlIgorICogcG9pbnRlcnMgb2YgdGhlIG5vZGVzIHNvIHRoZSBub3JtYWwgZGV2aWNlLXRyZWUgd2Fsa2luZyBmdW5jdGlvbnMKKyAqIGNhbiBiZSB1c2VkLgorICovCit2b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7CisJc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7CisKKwlwcl9kZWJ1ZygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKKworCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOworCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKKworCXByX2RlYnVnKCIgIHNpemUgaXMgJWx4LCBhbGxvY2F0aW5nLi4uXG4iLCBzaXplKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGV4cGFuZGVkIGRldmljZSB0cmVlICovCisJbWVtID0gZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaChzaXplICsgNCwKKwkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7CisKKwkoKF9fYmUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gY3B1X3RvX2JlMzIoMHhkZWFkYmVlZik7CisKKwlwcl9kZWJ1ZygiICB1bmZsYXR0ZW5pbmcgJWx4Li4uXG4iLCBtZW0pOworCisJLyogU2Vjb25kIHBhc3MsIGRvIGFjdHVhbCB1bmZsYXR0ZW5pbmcgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgJnN0YXJ0LCBOVUxMLCAmYWxsbmV4dHAsIDApOworCWlmIChiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXN0YXJ0KSAhPSBPRl9EVF9FTkQpCisJCXByX3dhcm5pbmcoIldlaXJkIHRhZyBhdCBlbmQgb2YgdHJlZTogJTA4eFxuIiwgKigodTMyICopc3RhcnQpKTsKKwlpZiAoYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkgIT0gMHhkZWFkYmVlZikKKwkJcHJfd2FybmluZygiRW5kIG9mIHRyZWUgbWFya2VyIG92ZXJ3cml0dGVuOiAlMDh4XG4iLAorCQkJICAgYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkpOworCSphbGxuZXh0cCA9IE5VTEw7CisKKwkvKiBHZXQgcG9pbnRlciB0byBPRiAiL2Nob3NlbiIgbm9kZSBmb3IgdXNlIGV2ZXJ5d2hlcmUgKi8KKwlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOworCWlmIChvZl9jaG9zZW4gPT0gTlVMTCkKKwkJb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW5AMCIpOworCisJcHJfZGVidWcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2dwaW8uYyBiL2RyaXZlcnMvb2YvZ3Bpby5jCmluZGV4IDZlZWE2MDEuLjI0YzM2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZ3Bpby5jCisrKyBiL2RyaXZlcnMvb2YvZ3Bpby5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOwogCWludCBzaXplOwogCWNvbnN0IHZvaWQgKmdwaW9fc3BlYzsKLQljb25zdCB1MzIgKmdwaW9fY2VsbHM7CisJY29uc3QgX19iZTMyICpncGlvX2NlbGxzOwogCiAJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKG5wLCAiZ3Bpb3MiLCAiI2dwaW8tY2VsbHMiLCBpbmRleCwKIAkJCQkJICAmZ2MsICZncGlvX3NwZWMpOwpAQCAtNTUsNyArNTUsNyBAQAogCiAJZ3Bpb19jZWxscyA9IG9mX2dldF9wcm9wZXJ0eShnYywgIiNncGlvLWNlbGxzIiwgJnNpemUpOwogCWlmICghZ3Bpb19jZWxscyB8fCBzaXplICE9IHNpemVvZigqZ3Bpb19jZWxscykgfHwKLQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7CisJCQliZTMyX3RvX2NwdXAoZ3Bpb19jZWxscykgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKIAkJcHJfZGVidWcoIiVzOiB3cm9uZyAjZ3Bpby1jZWxscyBmb3IgJXNcbiIsCiAJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjcsNyArMTI3LDggQEAKIGludCBvZl9ncGlvX3NpbXBsZV94bGF0ZShzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSBjb25zdCB2b2lkICpncGlvX3NwZWMsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpCiB7Ci0JY29uc3QgdTMyICpncGlvID0gZ3Bpb19zcGVjOworCWNvbnN0IF9fYmUzMiAqZ3BpbyA9IGdwaW9fc3BlYzsKKwljb25zdCB1MzIgbiA9IGJlMzJfdG9fY3B1cChncGlvKTsKIAogCS8qCiAJICogV2UncmUgZGlzY291cmFnaW5nIGdwaW9fY2VsbHMgPCAyLCBzaW5jZSB0aGF0IHdheSB5b3UnbGwgaGF2ZSB0bwpAQCAtMTQwLDEzICsxNDEsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCpncGlvID4gb2ZfZ2MtPmdjLm5ncGlvKQorCWlmIChuID4gb2ZfZ2MtPmdjLm5ncGlvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncykKLQkJKmZsYWdzID0gZ3Bpb1sxXTsKKwkJKmZsYWdzID0gYmUzMl90b19jcHUoZ3Bpb1sxXSk7CiAKLQlyZXR1cm4gKmdwaW87CisJcmV0dXJuIG47CiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dwaW9fc2ltcGxlX3hsYXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9pMmMuYyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKaW5kZXggZmE2NWEyYi4uYTNhNzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9pMmMuYworKysgYi9kcml2ZXJzL29mL29mX2kyYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShhZGFwX25vZGUsIG5vZGUpIHsKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7fTsKIAkJc3RydWN0IGRldl9hcmNoZGF0YSBkZXZfYWQgPSB7fTsKLQkJY29uc3QgdTMyICphZGRyOworCQljb25zdCBfX2JlMzIgKmFkZHI7CiAJCWludCBsZW47CiAKIAkJaWYgKG9mX21vZGFsaWFzX25vZGUobm9kZSwgaW5mby50eXBlLCBzaXplb2YoaW5mby50eXBlKSkgPCAwKQpAQCAtNDAsNyArNDAsNyBAQAogCiAJCWluZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CiAKLQkJaW5mby5hZGRyID0gKmFkZHI7CisJCWluZm8uYWRkciA9IGJlMzJfdG9fY3B1cChhZGRyKTsKIAogCQlkZXZfYXJjaGRhdGFfc2V0X25vZGUoJmRldl9hZCwgbm9kZSk7CiAJCWluZm8uYXJjaGRhdGEgPSAmZGV2X2FkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9tZGlvLmMgYi9kcml2ZXJzL29mL29mX21kaW8uYwppbmRleCA0YjIyYmE1Li4xOGVjYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX21kaW8uYworKysgYi9kcml2ZXJzL29mL29mX21kaW8uYwpAQCAtNTEsNyArNTEsNyBAQAogCiAJLyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIG9uZSAqLwogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Ci0JCWNvbnN0IHUzMiAqYWRkcjsKKwkJY29uc3QgX19iZTMyICphZGRyOwogCQlpbnQgbGVuOwogCiAJCS8qIEEgUEhZIG11c3QgaGF2ZSBhIHJlZyBwcm9wZXJ0eSBpbiB0aGUgcmFuZ2UgWzAtMzFdICovCkBAIC02OCw3ICs2OCw3IEBACiAJCQkJbWRpby0+aXJxWyphZGRyXSA9IFBIWV9QT0xMOwogCQl9CiAKLQkJcGh5ID0gZ2V0X3BoeV9kZXZpY2UobWRpbywgKmFkZHIpOworCQlwaHkgPSBnZXRfcGh5X2RldmljZShtZGlvLCBiZTMyX3RvX2NwdXAoYWRkcikpOwogCQlpZiAoIXBoeSkgewogCQkJZGV2X2VycigmbWRpby0+ZGV2LCAiZXJyb3IgcHJvYmluZyBQSFkgYXQgYWRkcmVzcyAlaVxuIiwKIAkJCQkqYWRkcik7CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5ldF9ucDsKIAljaGFyIGJ1c19pZFtNSUlfQlVTX0lEX1NJWkUgKyAzXTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwotCWNvbnN0IHUzMiAqcGh5X2lkOworCWNvbnN0IF9fYmUzMiAqcGh5X2lkOwogCWludCBzejsKIAogCWlmICghZGV2LT5kZXYucGFyZW50KQpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKCFwaHlfaWQgfHwgc3ogPCBzaXplb2YoKnBoeV9pZCkpCiAJCXJldHVybiBOVUxMOwogCi0Jc3ByaW50ZihidXNfaWQsIFBIWV9JRF9GTVQsICIwIiwgcGh5X2lkWzBdKTsKKwlzcHJpbnRmKGJ1c19pZCwgUEhZX0lEX0ZNVCwgIjAiLCBiZTMyX3RvX2NwdShwaHlfaWRbMF0pKTsKIAogCXBoeSA9IHBoeV9jb25uZWN0KGRldiwgYnVzX2lkLCBobmRsciwgMCwgaWZhY2UpOwogCXJldHVybiBJU19FUlIocGh5KSA/IE5VTEwgOiBwaHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3NwaS5jIGIvZHJpdmVycy9vZi9vZl9zcGkuYwppbmRleCBiZWQwZWQ2Li5mNjVmNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX3NwaS5jCisrKyBiL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmM7Ci0JY29uc3QgdTMyICpwcm9wOworCWNvbnN0IF9fYmUzMiAqcHJvcDsKIAlpbnQgcmM7CiAJaW50IGxlbjsKIApAQCAtNTQsNyArNTQsNyBAQAogCQkJc3BpX2Rldl9wdXQoc3BpKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaS0+Y2hpcF9zZWxlY3QgPSAqcHJvcDsKKwkJc3BpLT5jaGlwX3NlbGVjdCA9IGJlMzJfdG9fY3B1cChwcm9wKTsKIAogCQkvKiBNb2RlIChjbG9jayBwaGFzZS9wb2xhcml0eS9ldGMuKSAqLwogCQlpZiAob2ZfZmluZF9wcm9wZXJ0eShuYywgInNwaS1jcGhhIiwgTlVMTCkpCkBAIC03Miw3ICs3Miw3IEBACiAJCQlzcGlfZGV2X3B1dChzcGkpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3BpLT5tYXhfc3BlZWRfaHogPSAqcHJvcDsKKwkJc3BpLT5tYXhfc3BlZWRfaHogPSBiZTMyX3RvX2NwdXAocHJvcCk7CiAKIAkJLyogSVJRICovCiAJCXNwaS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobmMsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggYWQxMTNiMC4uMDk1MGZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC0yOTA4LDYgKzI5MDgsNyBAQAogCW5ldG1vc185ODA1LAogCW5ldG1vc185ODE1LAogCW5ldG1vc185OTAxLAorCW5ldG1vc185ODY1LAogCXF1YXRlY2hfc3BweHAxMDAsCiB9OwogCkBAIC0yOTg5LDYgKzI5OTAsNyBAQAogCS8qIG5ldG1vc185ODA1ICovICAgICAgICAgICAgICAgeyAxLCB7IHsgMCwgLTEgfSwgfSB9LAogCS8qIG5ldG1vc185ODE1ICovICAgICAgICAgICAgICAgeyAyLCB7IHsgMCwgLTEgfSwgeyAyLCAtMSB9LCB9IH0sCiAJLyogbmV0bW9zXzk5MDEgKi8gICAgICAgICAgICAgICB7IDEsIHsgeyAwLCAtMSB9LCB9IH0sCisJLyogbmV0bW9zXzk4NjUgKi8gICAgICAgICAgICAgICB7IDEsIHsgeyAwLCAtMSB9LCB9IH0sCiAJLyogcXVhdGVjaF9zcHB4cDEwMCAqLwkJeyAxLCB7IHsgMCwgMSB9LCB9IH0sCiB9OwogCkBAIC0zMDkyLDYgKzMwOTQsMTAgQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185ODE1IH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTkwMSwKIAkgIDB4QTAwMCwgMHgyMDAwLCAwLCAwLCBuZXRtb3NfOTkwMSB9LAorCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJICAweEEwMDAsIDB4MTAwMCwgMCwgMCwgbmV0bW9zXzk4NjUgfSwKKwl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODY1LAorCSAgMHhBMDAwLCAweDIwMDAsIDAsIDAsIG5ldG1vc185ODY1IH0sCiAJLyogUXVhdGVjaCBTUFBYUC0xMDAgUGFyYWxsZWwgcG9ydCBQQ0kgRXhwcmVzc0NhcmQgKi8KIAl7IFBDSV9WRU5ET1JfSURfUVVBVEVDSCwgUENJX0RFVklDRV9JRF9RVUFURUNIX1NQUFhQXzEwMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHF1YXRlY2hfc3BweHAxMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnCmluZGV4IGIxZWNlZmEuLjc4NThhMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvS2NvbmZpZwpAQCAtMjEsMTcgKzIxLDYgQEAKIAogCSAgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCiAKLWNvbmZpZyBQQ0lfTEVHQUNZCi0JYm9vbCAiRW5hYmxlIGRlcHJlY2F0ZWQgcGNpX2ZpbmRfKiBBUEkiCi0JZGVwZW5kcyBvbiBQQ0kKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGRlcHJlY2F0ZWQKLQkgIHBjaV9maW5kX2RldmljZSgpIEFQSS4gIE1vc3QgZHJpdmVycyBoYXZlIGJlZW4gY29udmVydGVkIG92ZXIKLQkgIHRvIHVzaW5nIHRoZSBwcm9wZXIgaG90cGx1ZyBBUElzLCBzbyB0aGlzIG9wdGlvbiBzZXJ2ZXMgdG8KLQkgIGluY2x1ZGUvZXhjbHVkZSBvbmx5IGEgZmV3IGRyaXZlcnMgdGhhdCBhcmUgc3RpbGwgdXNpbmcgdGhpcwotCSAgQVBJLgotCiBjb25maWcgUENJX0RFQlVHCiAJYm9vbCAiUENJIERlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggNGRmNDhkNS4uM2QxMDJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTIsMTQgKzIsMTMgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBQQ0kgYnVzIHNwZWNpZmljIGRyaXZlcnMuCiAjCiAKLW9iai15CQkrPSBhY2Nlc3MubyBidXMubyBwcm9iZS5vIHJlbW92ZS5vIHBjaS5vIHF1aXJrcy5vIFwKK29iai15CQkrPSBhY2Nlc3MubyBidXMubyBwcm9iZS5vIHJlbW92ZS5vIHBjaS5vIFwKIAkJCXBjaS1kcml2ZXIubyBzZWFyY2gubyBwY2ktc3lzZnMubyByb20ubyBzZXR1cC1yZXMubyBcCi0JCQlpcnEubworCQkJaXJxLm8gdnBkLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNGUykgKz0gc2xvdC5vCiAKLW9iai0kKENPTkZJR19QQ0lfTEVHQUNZKSArPSBsZWdhY3kubwotQ0ZMQUdTX2xlZ2FjeS5vICs9IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMKK29iai0kKENPTkZJR19QQ0lfUVVJUktTKSArPSBxdWlya3MubwogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIHN0dWZmIGlmIG5lZWRlZAogb2JqLSQoQ09ORklHX1BDSUVQT1JUQlVTKSArPSBwY2llLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3BjaS9idXMuYwppbmRleCBjZWYyOGE3Li43MTIyNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9idXMuYworKysgYi9kcml2ZXJzL3BjaS9idXMuYwpAQCAtMTcsNiArMTcsNTIgQEAKIAogI2luY2x1ZGUgInBjaS5oIgogCit2b2lkIHBjaV9idXNfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBjaV9idXNfcmVzb3VyY2UgKmJ1c19yZXM7CisKKwlidXNfcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9idXNfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1c19yZXMpIHsKKwkJZGV2X2VycigmYnVzLT5kZXYsICJjYW4ndCBhZGQgJXBSIHJlc291cmNlXG4iLCByZXMpOworCQlyZXR1cm47CisJfQorCisJYnVzX3Jlcy0+cmVzID0gcmVzOworCWJ1c19yZXMtPmZsYWdzID0gZmxhZ3M7CisJbGlzdF9hZGRfdGFpbCgmYnVzX3Jlcy0+bGlzdCwgJmJ1cy0+cmVzb3VyY2VzKTsKK30KKworc3RydWN0IHJlc291cmNlICpwY2lfYnVzX3Jlc291cmNlX24oY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IG4pCit7CisJc3RydWN0IHBjaV9idXNfcmVzb3VyY2UgKmJ1c19yZXM7CisKKwlpZiAobiA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNKQorCQlyZXR1cm4gYnVzLT5yZXNvdXJjZVtuXTsKKworCW4gLT0gUENJX0JSSURHRV9SRVNPVVJDRV9OVU07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXNfcmVzLCAmYnVzLT5yZXNvdXJjZXMsIGxpc3QpIHsKKwkJaWYgKG4tLSA9PSAwKQorCQkJcmV0dXJuIGJ1c19yZXMtPnJlczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfYnVzX3Jlc291cmNlX24pOworCit2b2lkIHBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzLCAqdG1wOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspCisJCWJ1cy0+cmVzb3VyY2VbaV0gPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1c19yZXMsIHRtcCwgJmJ1cy0+cmVzb3VyY2VzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZidXNfcmVzLT5saXN0KTsKKwkJa2ZyZWUoYnVzX3Jlcyk7CisJfQorfQorCiAvKioKICAqIHBjaV9idXNfYWxsb2NfcmVzb3VyY2UgLSBhbGxvY2F0ZSBhIHJlc291cmNlIGZyb20gYSBwYXJlbnQgYnVzCiAgKiBAYnVzOiBQQ0kgYnVzCkBAIC0zNiwxMSArODIsMTQgQEAKIHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCiAJCXJlc291cmNlX3NpemVfdCBtaW4sIHVuc2lnbmVkIGludCB0eXBlX21hc2ssCi0JCXZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosIHJlc291cmNlX3NpemVfdCwKLQkJCQlyZXNvdXJjZV9zaXplX3QpLAorCQlyZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJICByZXNvdXJjZV9zaXplX3QsCisJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJaW50IGksIHJldCA9IC1FTk9NRU07CisJc3RydWN0IHJlc291cmNlICpyOwogCXJlc291cmNlX3NpemVfdCBtYXggPSAtMTsKIAogCXR5cGVfbWFzayB8PSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07CkBAIC00OSw4ICs5OCw3IEBACiAJaWYgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0KSkKIAkJbWF4ID0gUENJQklPU19NQVhfTUVNXzMyOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqciA9IGJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKIAkJaWYgKCFyKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IDRkZDcxMTQuLmVmYTlmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtMzMyLDggKzMzMiw2IEBACiAJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gMDsKIAlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmxhdGNoX3N0YXR1cyA9IGFjcGlwaHBfZ2V0X2xhdGNoX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+YWRhcHRlcl9zdGF0dXMgPSBhY3BpcGhwX2dldF9hZGFwdGVyX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwotCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+Y3VyX2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCiAJYWNwaXBocF9zbG90LT5zbG90ID0gc2xvdDsKIAlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgIiVsbHUiLCBzbG90LT5hY3BpX3Nsb3QtPnN1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKaW5kZXggMTQ4ZmI0Ni4uZmIzZjg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgUENJX0RFVkZOKGJyaWRnZV9zbG90LCAwKSk7CiAJaWYoIWRldiB8fCBkZXYtPmhkcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKIAkJZXJyKCJJbnZhbGlkIGJyaWRnZSBkZXZpY2UgJXMiLCBicmlkZ2UpOworCQlwY2lfZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJYnVzID0gZGV2LT5zdWJvcmRpbmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IDljNmE5ZmQuLmQ4ZmZjNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtMzEwLDggKzMxMCw2IEBACiAJdTggZmlyc3Rfc2xvdDsKIAl1OCBhZGRfc3VwcG9ydDsKIAl1OCBwdXNoX2ZsYWc7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZF9jYXBhYmlsaXR5OwogCXU4IHB1c2hfYnV0dG9uOwkJCS8qIDAgPSBubyBwdXNoYnV0dG9uLCAxID0gcHVzaGJ1dHRvbiBwcmVzZW50ICovCiAJdTggc2xvdF9zd2l0Y2hfdHlwZTsJCS8qIDAgPSBubyBzd2l0Y2gsIDEgPSBzd2l0Y2ggcHJlc2VudCAqLwogCXU4IGRlZmVhdHVyZV9QSFA7CQkvKiAwID0gUEhQIG5vdCBzdXBwb3J0ZWQsIDEgPSBQSFAgc3VwcG9ydGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKaW5kZXggMDc1YjRmNC4uZjE4NGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwpAQCAtNTgzLDMwICs1ODMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQkqdmFsdWUgPSBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0KLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCSp2YWx1ZSA9IGN0cmwtPnNwZWVkOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyBjcHFwaHBfaG90cGx1Z19zbG90X29wcyA9IHsKIAkuc2V0X2F0dGVudGlvbl9zdGF0dXMgPQlzZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZW5hYmxlX3Nsb3QgPQkJcHJvY2Vzc19TSSwKQEAgLTYxNiw4ICs1OTIsNiBAQAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9CWdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfbGF0Y2hfc3RhdHVzID0JZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0JZ2V0X2FkYXB0ZXJfc3RhdHVzLAotCS5nZXRfbWF4X2J1c19zcGVlZCA9CWdldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZCA9CWdldF9jdXJfYnVzX3NwZWVkLAogfTsKIAogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMApAQCAtNjI5LDYgKzYwMyw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaG90cGx1Z19zbG90X2luZm87CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggbnVtYmVyX29mX3Nsb3RzOwogCXU4IHNsb3RfZGV2aWNlOwogCXU4IHNsb3RfbnVtYmVyOwpAQCAtNjk0LDcgKzY2OSw3IEBACiAJCQlzbG90LT5jYXBhYmlsaXRpZXMgfD0gUENJU0xPVF82NF9CSVRfU1VQUE9SVEVEOwogCQlpZiAoaXNfc2xvdDY2bWh6KHNsb3QpKQogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjZfTUhaX1NVUFBPUlRFRDsKLQkJaWYgKGN0cmwtPnNwZWVkID09IFBDSV9TUEVFRF82Nk1IeikKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopCiAJCQlzbG90LT5jYXBhYmlsaXRpZXMgfD0gUENJU0xPVF82Nl9NSFpfT1BFUkFUSU9OOwogCiAJCWN0cmxfc2xvdCA9CkBAIC04NDQsNiArODE5LDcgQEAKIAl1MzIgcmM7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CiAJc3RydWN0IHBjaV9mdW5jICpmdW5jOworCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJaW50IGVycjsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtODUyLDYgKzgyOCw3IEBACiAJCQlwY2lfbmFtZShwZGV2KSwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CisJYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAKIAkvKiBOZWVkIHRvIHJlYWQgVklEIGVhcmx5IGIvYyBpdCdzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBDUFEgYW5kIElOVEMKIAkgKiBkaXNjb3ZlcnkKQEAgLTkyOSwyMiArOTA2LDIyIEBACiAJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAmYnVzX2NhcCk7CiAJCQlpZiAoYnVzX2NhcCAmIDB4ODApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgMTMzTUh6IFBDSS1YXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMHg0MCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyAxMDBNSHogUENJLVhcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c19jYXAgJiAyMCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyA2Nk1IeiBQQ0ktWFxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c19jYXAgJiAxMCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyA2Nk1IeiBQQ0lcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHo7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC05NTUsNyArOTMyLDcgQEAKIAkJY2FzZSBQQ0lfU1VCX0hQQ19JRDoKIAkJCS8qIE9yaWdpbmFsIDY1MDAvNzAwMCBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAwOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTk2Niw3ICs5NDMsNyBAQAogCQkJLyogRmlyc3QgUHVzaGJ1dHRvbiBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+cHVzaF9mbGFnID0gMTsKIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMTsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05NzYsNyArOTUzLDcgQEAKIAkJY2FzZSBQQ0lfU1VCX0hQQ19JRF9JTlRDOgogCQkJLyogVGhpcmQgcGFydHkgKDY1MDAvNzAwMCkgKi8KIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMDsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05ODcsNyArOTY0LDcgQEAKIAkJCS8qIEZpcnN0IDY2IE1oeiBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+cHVzaF9mbGFnID0gMTsKIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMTsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05OTgsNyArOTc1LDcgQEAKIAkJCS8qIEZpcnN0IFBDSS1YIGltcGxlbWVudGF0aW9uLCAxMDBNSHogKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtMTAxNSw5ICs5OTIsOSBAQAogCWNhc2UgUENJX1ZFTkRPUl9JRF9JTlRFTDoKIAkJLyogQ2hlY2sgZm9yIHNwZWVkIGNhcGFiaWxpdHkgKDA9MzMsIDE9NjYpICovCiAJCWlmIChzdWJzeXN0ZW1fZGV2aWNlaWQgJiAweDAwMDEpCi0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQllbHNlCi0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCiAJCS8qIENoZWNrIGZvciBwdXNoIGJ1dHRvbiAqLwogCQlpZiAoc3Vic3lzdGVtX2RldmljZWlkICYgMHgwMDAyKQpAQCAtMTA3OSw3ICsxMDU2LDcgQEAKIAkJCQkJcGRldi0+YnVzLT5udW1iZXIpOwogCiAJZGJnKCJIb3RwbHVnIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzOlxuIik7Ci0JZGJnKCIgICAgc3BlZWRfY2FwYWJpbGl0eSAgICAgICAlZFxuIiwgY3RybC0+c3BlZWRfY2FwYWJpbGl0eSk7CisJZGJnKCIgICAgc3BlZWRfY2FwYWJpbGl0eSAgICAgICAlZFxuIiwgYnVzLT5tYXhfYnVzX3NwZWVkKTsKIAlkYmcoIiAgICBzbG90X3N3aXRjaF90eXBlICAgICAgICVzXG4iLCBjdHJsLT5zbG90X3N3aXRjaF90eXBlID8KIAkJCQkJInN3aXRjaCBwcmVzZW50IiA6ICJubyBzd2l0Y2giKTsKIAlkYmcoIiAgICBkZWZlYXR1cmVfUEhQICAgICAgICAgICVzXG4iLCBjdHJsLT5kZWZlYXR1cmVfUEhQID8KQEAgLTExNDIsNyArMTExOSw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIDY2TWh6IG9wZXJhdGlvbiAqLwotCWN0cmwtPnNwZWVkID0gZ2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCk7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gZ2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCk7CiAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCmluZGV4IDBmZjY4OWEuLmU0MzkwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKQEAgLTExMzAsMTIgKzExMzAsMTMgQEAKIHN0YXRpYyB1OCBzZXRfY29udHJvbGxlcl9zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgdTggYWRhcHRlcl9zcGVlZCwgdTggaHBfc2xvdCkKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAl1OCByZWc7CiAJdTggc2xvdF9wb3dlciA9IHJlYWRiKGN0cmwtPmhwY19yZWcgKyBTTE9UX1BPV0VSKTsKIAl1MTYgcmVnMTY7CiAJdTMyIGxlZHMgPSByZWFkbChjdHJsLT5ocGNfcmVnICsgTEVEX0NPTlRST0wpOwogCi0JaWYgKGN0cmwtPnNwZWVkID09IGFkYXB0ZXJfc3BlZWQpCisJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBhZGFwdGVyX3NwZWVkKQogCQlyZXR1cm4gMDsKIAogCS8qIFdlIGRvbid0IGFsbG93IGZyZXEvbW9kZSBjaGFuZ2VzIGlmIHdlIGZpbmQgYW5vdGhlciBhZGFwdGVyIHJ1bm5pbmcKQEAgLTExNTIsNyArMTE1Myw3IEBACiAJCSAqIGxvd2VyIHNwZWVkL21vZGUsIHdlIGFsbG93IHRoZSBuZXcgYWRhcHRlciB0byBmdW5jdGlvbiBhdAogCQkgKiB0aGlzIHJhdGUgaWYgc3VwcG9ydGVkCiAJCSAqLwotCQlpZiAoY3RybC0+c3BlZWQgPCBhZGFwdGVyX3NwZWVkKQorCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkIDwgYWRhcHRlcl9zcGVlZCkKIAkJCXJldHVybiAwOwogCiAJCXJldHVybiAxOwpAQCAtMTE2MSwyMCArMTE2MiwyMCBAQAogCS8qIElmIHRoZSBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBmcmVxL21vZGUgY2hhbmdlcyBhbmQgdGhlCiAJICogY29udHJvbGxlciBpcyBydW5uaW5nIGF0IGEgaGlnaGVyIG1vZGUsIHdlIGJhaWwKIAkgKi8KLQlpZiAoKGN0cmwtPnNwZWVkID4gYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQorCWlmICgoYnVzLT5jdXJfYnVzX3NwZWVkID4gYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQogCQlyZXR1cm4gMTsKIAogCS8qIEJ1dCB3ZSBhbGxvdyB0aGUgYWRhcHRlciB0byBydW4gYXQgYSBsb3dlciByYXRlIGlmIHBvc3NpYmxlICovCi0JaWYgKChjdHJsLT5zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKKwlpZiAoKGJ1cy0+Y3VyX2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSB0cnkgdG8gc2V0IHRoZSBtYXggc3BlZWQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGFkYXB0ZXIgYW5kCiAJICogY29udHJvbGxlcgogCSAqLwotCWlmIChjdHJsLT5zcGVlZF9jYXBhYmlsaXR5IDwgYWRhcHRlcl9zcGVlZCkgewotCQlpZiAoY3RybC0+c3BlZWQgPT0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eSkKKwlpZiAoYnVzLT5tYXhfYnVzX3NwZWVkIDwgYWRhcHRlcl9zcGVlZCkgeworCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkID09IGJ1cy0+bWF4X2J1c19zcGVlZCkKIAkJCXJldHVybiAwOwotCQlhZGFwdGVyX3NwZWVkID0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eTsKKwkJYWRhcHRlcl9zcGVlZCA9IGJ1cy0+bWF4X2J1c19zcGVlZDsKIAl9CiAKIAl3cml0ZWwoMHgwTCwgY3RybC0+aHBjX3JlZyArIExFRF9DT05UUk9MKTsKQEAgLTEyMjksOCArMTIzMCw4IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGN0cmwtPnBjaV9kZXYsIDB4NDMsIHJlZyk7CiAKIAkvKiBPbmx5IGlmIG1vZGUgY2hhbmdlLi4uKi8KLQlpZiAoKChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSkgfHwKLQkJKChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkgJiYgKGFkYXB0ZXJfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSkpIAorCWlmICgoKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSkgfHwKKwkJKChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikpKSAKIAkJCXNldF9TT0dPKGN0cmwpOwogCiAJd2FpdF9mb3JfY3RybF9pcnEoY3RybCk7CkBAIC0xMjQzLDcgKzEyNDQsNyBAQAogCXNldF9TT0dPKGN0cmwpOwogCXdhaXRfZm9yX2N0cmxfaXJxKGN0cmwpOwogCi0JY3RybC0+c3BlZWQgPSBhZGFwdGVyX3NwZWVkOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGFkYXB0ZXJfc3BlZWQ7CiAJc2xvdCA9IGNwcWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCWluZm8oIlN1Y2Nlc3NmdWxseSBjaGFuZ2VkIGZyZXF1ZW5jeS9tb2RlIGZvciBhZGFwdGVyIGluIHNsb3QgJWRcbiIsCkBAIC0xMjY5LDYgKzEyNzAsNyBAQAogICovCiBzdGF0aWMgdTMyIGJvYXJkX3JlcGxhY2VkKHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggaHBfc2xvdDsKIAl1OCB0ZW1wX2J5dGU7CiAJdTggYWRhcHRlcl9zcGVlZDsKQEAgLTEzMDksNyArMTMxMSw3IEBACiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAogCQlhZGFwdGVyX3NwZWVkID0gZ2V0X2FkYXB0ZXJfc3BlZWQoY3RybCwgaHBfc2xvdCk7Ci0JCWlmIChjdHJsLT5zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQorCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCiAJCQlpZiAoc2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCwgYWRhcHRlcl9zcGVlZCwgaHBfc2xvdCkpCiAJCQkJcmMgPSBXUk9OR19CVVNfRlJFUVVFTkNZOwogCkBAIC0xNDI2LDYgKzE0MjgsNyBAQAogCXUzMiB0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKIAl1MzIgcmMgPSAwOwogCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3QgPSBOVUxMOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKIApAQCAtMTQ1Niw3ICsxNDU5LDcgQEAKIAl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKIAlhZGFwdGVyX3NwZWVkID0gZ2V0X2FkYXB0ZXJfc3BlZWQoY3RybCwgaHBfc2xvdCk7Ci0JaWYgKGN0cmwtPnNwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCisJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQogCQlpZiAoc2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCwgYWRhcHRlcl9zcGVlZCwgaHBfc2xvdCkpCiAJCQlyYyA9IFdST05HX0JVU19GUkVRVUVOQ1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYwppbmRleCA3NDg1ZmZkLi5kOTM0ZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCkBAIC0zOTUsODkgKzM5NSw0MCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCitzdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90KQogewotCWludCByYyA9IC1FTk9ERVY7Ci0Jc3RydWN0IHNsb3QgKnBzbG90OworCWludCByYzsKIAl1OCBtb2RlID0gMDsKKwllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3QtPmhvdHBsdWdfc2xvdC0+cGNpX3Nsb3QtPmJ1czsKIAotCWRlYnVnKCIlcyAtIEVudHJ5IGhvdHBsdWdfc2xvdFslcF0gcHZhbHVlWyVwXVxuIiwgX19mdW5jX18sCi0JCWhvdHBsdWdfc2xvdCwgdmFsdWUpOworCWRlYnVnKCIlcyAtIEVudHJ5IHNsb3RbJXBdXG4iLCBfX2Z1bmNfXywgc2xvdCk7CiAKIAlpYm1waHBfbG9ja19vcGVyYXRpb25zKCk7CisJbW9kZSA9IHNsb3QtPnN1cHBvcnRlZF9idXNfbW9kZTsKKwlzcGVlZCA9IHNsb3QtPnN1cHBvcnRlZF9zcGVlZDsgCisJaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7CiAKLQlpZiAoaG90cGx1Z19zbG90KSB7Ci0JCXBzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCQlpZiAocHNsb3QpIHsKLQkJCXJjID0gMDsKLQkJCW1vZGUgPSBwc2xvdC0+c3VwcG9ydGVkX2J1c19tb2RlOwotCQkJKnZhbHVlID0gcHNsb3QtPnN1cHBvcnRlZF9zcGVlZDsgCi0JCQlzd2l0Y2ggKCp2YWx1ZSkgewotCQkJY2FzZSBCVVNfU1BFRURfMzM6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJVU19TUEVFRF82NjoKLQkJCQlpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0lYKSAKLQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJVU19TUEVFRF8xMDA6Ci0JCQljYXNlIEJVU19TUEVFRF8xMzM6Ci0JCQkJKnZhbHVlID0gcHNsb3QtPnN1cHBvcnRlZF9zcGVlZCArIDB4MDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIE5vdGUgKHdpbGwgbmVlZCB0byBjaGFuZ2UpOiB0aGVyZSB3b3VsZCBiZSBzb29uIDI1NiwgNTEyIGFsc28gKi8KLQkJCQlyYyA9IC1FTk9ERVY7Ci0JCQl9Ci0JCX0KKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBCVVNfU1BFRURfMzM6CisJCWJyZWFrOworCWNhc2UgQlVTX1NQRUVEXzY2OgorCQlpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0lYKSAKKwkJCXNwZWVkICs9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgQlVTX1NQRUVEXzEwMDoKKwljYXNlIEJVU19TUEVFRF8xMzM6CisJCXNwZWVkICs9IDB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdGUgKHdpbGwgbmVlZCB0byBjaGFuZ2UpOiB0aGVyZSB3b3VsZCBiZSBzb29uIDI1NiwgNTEyIGFsc28gKi8KKwkJcmMgPSAtRU5PREVWOwogCX0KIAotCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwotCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHZhbHVlWyV4XVxuIiwgX19mdW5jX18sIHJjLCAqdmFsdWUpOwotCXJldHVybiByYzsKLX0KKwlpZiAoIXJjKQorCQlidXMtPm1heF9idXNfc3BlZWQgPSBzcGVlZDsKIAotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0JaW50IHJjID0gLUVOT0RFVjsKLQlzdHJ1Y3Qgc2xvdCAqcHNsb3Q7Ci0JdTggbW9kZSA9IDA7Ci0KLQlkZWJ1ZygiJXMgLSBFbnRyeSBob3RwbHVnX3Nsb3RbJXBdIHB2YWx1ZVslcF1cbiIsIF9fZnVuY19fLAotCQlob3RwbHVnX3Nsb3QsIHZhbHVlKTsKLQotCWlibXBocF9sb2NrX29wZXJhdGlvbnMoKTsKLQotCWlmIChob3RwbHVnX3Nsb3QpIHsKLQkJcHNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0JCWlmIChwc2xvdCkgewotCQkJcmMgPSBnZXRfY3VyX2J1c19pbmZvKCZwc2xvdCk7Ci0JCQlpZiAoIXJjKSB7Ci0JCQkJbW9kZSA9IHBzbG90LT5idXNfb24tPmN1cnJlbnRfYnVzX21vZGU7Ci0JCQkJKnZhbHVlID0gcHNsb3QtPmJ1c19vbi0+Y3VycmVudF9zcGVlZDsKLQkJCQlzd2l0Y2ggKCp2YWx1ZSkgewotCQkJCWNhc2UgQlVTX1NQRUVEXzMzOgotCQkJCQlicmVhazsKLQkJCQljYXNlIEJVU19TUEVFRF82NjoKLQkJCQkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCi0JCQkJCQkqdmFsdWUgKz0gMHgwMTsKLQkJCQkJZWxzZSBpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0kpCi0JCQkJCQk7Ci0JCQkJCWVsc2UKLQkJCQkJCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEJVU19TUEVFRF8xMDA6Ci0JCQkJY2FzZSBCVVNfU1BFRURfMTMzOgotCQkJCQkqdmFsdWUgKz0gMHgwMTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogTm90ZSBvZiBjaGFuZ2U6IHRoZXJlIHdvdWxkIGFsc28gYmUgMjU2LCA1MTIgc29vbiAqLwotCQkJCQlyYyA9IC1FTk9ERVY7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7Ci0JZGVidWcoIiVzIC0gRXhpdCByY1slZF0gdmFsdWVbJXhdXG4iLCBfX2Z1bmNfXywgcmMsICp2YWx1ZSk7CisJZGVidWcoIiVzIC0gRXhpdCByY1slZF0gc3BlZWRbJXhdXG4iLCBfX2Z1bmNfXywgcmMsIHNwZWVkKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU3Miw2ICs1MjMsNyBAQAogCQlpZiAoc2xvdF9jdXItPmJ1c19vbi0+Y3VycmVudF9zcGVlZCA9PSAweEZGKSAKIAkJCWlmIChnZXRfY3VyX2J1c19pbmZvKCZzbG90X2N1cikpIAogCQkJCXJldHVybiAtMTsKKwkJZ2V0X21heF9idXNfc3BlZWQoc2xvdF9jdXIpOwogCiAJCWlmIChzbG90X2N1ci0+Y3RybC0+b3B0aW9ucyA9PSAweEZGKQogCQkJaWYgKGdldF9ocGNfb3B0aW9ucyhzbG90X2N1ciwgJnNsb3RfY3VyLT5jdHJsLT5vcHRpb25zKSkKQEAgLTY1NSw2ICs2MDcsNyBAQAogaW50IGlibXBocF91cGRhdGVfc2xvdF9pbmZvKHN0cnVjdCBzbG90ICpzbG90X2N1cikKIHsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmluZm87CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QtPnBjaV9zbG90LT5idXM7CiAJaW50IHJjOwogCXU4IGJ1c19zcGVlZDsKIAl1OCBtb2RlOwpAQCAtNzAwLDggKzY1Myw3IEBACiAJCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAl9CiAKLQlpbmZvLT5jdXJfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwotCWluZm8tPm1heF9idXNfc3BlZWQgPSBzbG90X2N1ci0+aG90cGx1Z19zbG90LT5pbmZvLT5tYXhfYnVzX3NwZWVkOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKIAkvLyBUbyBkbzogYnVzX25hbWVzIAogCQogCXJjID0gcGNpX2hwX2NoYW5nZV9zbG90X2luZm8oc2xvdF9jdXItPmhvdHBsdWdfc2xvdCwgaW5mbyk7CkBAIC0xMzI2LDggKzEyNzgsNiBAQAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9CQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CQlnZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPQkJZ2V0X2FkYXB0ZXJfcHJlc2VudCwKLQkuZ2V0X21heF9idXNfc3BlZWQgPQkJZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkID0JCWdldF9jdXJfYnVzX3NwZWVkLAogLyoJLmdldF9tYXhfYWRhcHRlcl9zcGVlZCA9CWdldF9tYXhfYWRhcHRlcl9zcGVlZCwKIAkuZ2V0X2J1c19uYW1lX3N0YXR1cyA9CQlnZXRfYnVzX25hbWUsCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCmluZGV4IGMxYWJhYzguLjViZWNiZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogaW50IF9faW5pdCBpYm1waHBfYWNjZXNzX2ViZGEgKHZvaWQpCiB7Ci0JdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGU7CisJdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGUsIGViZGFfc3o7CiAJdTE2IGViZGFfc2VnLCBudW1fZW50cmllcywgbmV4dF9vZmZzZXQsIG9mZnNldCwgYmxrX2lkLCBzdWJfYWRkciwgcmUsIHJjX2lkLCByZV9pZCwgYmFzZTsKIAlpbnQgcmMgPSAwOwogCkBAIC0yNjAsNyArMjYwLDE2IEBACiAJaW91bm1hcCAoaW9fbWVtKTsKIAlkZWJ1ZyAoInJldHVybmVkIGViZGEgc2VnbWVudDogJXhcbiIsIGViZGFfc2VnKTsKIAkKLQlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxMDI0KTsKKwlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxKTsKKwlpZiAoIWlvX21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZWJkYV9zeiA9IHJlYWRiKGlvX21lbSk7CisJaW91bm1hcChpb19tZW0pOworCWRlYnVnKCJlYmRhIHNpemU6ICVkKEtpQilcbiIsIGViZGFfc3opOworCWlmIChlYmRhX3N6ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgKGViZGFfc3ogKiAxMDI0KSk7CiAJaWYgKCFpb19tZW0gKQogCQlyZXR1cm4gLUVOT01FTTsKIAluZXh0X29mZnNldCA9IDB4MTgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwppbmRleCBjNzA4NGYwLi4xYWFmM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgImlibXBocC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3Jlcy5jCmluZGV4IGVjNzMyOTQuLmUyZGMyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3Jlcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3Jlcy5jCkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgaW50IG9uY2Vfb3ZlciAodm9pZCk7CiBzdGF0aWMgaW50IHJlbW92ZV9yYW5nZXMgKHN0cnVjdCBidXNfbm9kZSAqLCBzdHJ1Y3QgYnVzX25vZGUgKik7CiBzdGF0aWMgaW50IHVwZGF0ZV9icmlkZ2VfcmFuZ2VzIChzdHJ1Y3QgYnVzX25vZGUgKiopOwotc3RhdGljIGludCBhZGRfcmFuZ2UgKGludCB0eXBlLCBzdHJ1Y3QgcmFuZ2Vfbm9kZSAqLCBzdHJ1Y3QgYnVzX25vZGUgKik7CitzdGF0aWMgaW50IGFkZF9idXNfcmFuZ2UgKGludCB0eXBlLCBzdHJ1Y3QgcmFuZ2Vfbm9kZSAqLCBzdHJ1Y3QgYnVzX25vZGUgKik7CiBzdGF0aWMgdm9pZCBmaXhfcmVzb3VyY2VzIChzdHJ1Y3QgYnVzX25vZGUgKik7CiBzdGF0aWMgc3RydWN0IGJ1c19ub2RlICpmaW5kX2J1c193cHJldiAodTgsIHN0cnVjdCBidXNfbm9kZSAqKiwgdTgpOwogCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJbmV3cmFuZ2UtPnJhbmdlbm8gPSAxOwogCWVsc2UgewogCQkvKiBuZWVkIHRvIGluc2VydCBvdXIgcmFuZ2UgKi8KLQkJYWRkX3JhbmdlIChmbGFnLCBuZXdyYW5nZSwgbmV3YnVzKTsKKwkJYWRkX2J1c19yYW5nZSAoZmxhZywgbmV3cmFuZ2UsIG5ld2J1cyk7CiAJCWRlYnVnICgiJWQgcmVzb3VyY2UgUHJpbWFyeSBCdXMgaW5zZXJ0ZWQgb24gYnVzICV4IFsleCAtICV4XVxuIiwgZmxhZywgbmV3YnVzLT5idXNubywgbmV3cmFuZ2UtPnN0YXJ0LCBuZXdyYW5nZS0+ZW5kKTsKIAl9CiAKQEAgLTM4NCw3ICszODQsNyBAQAogICogSW5wdXQ6IHR5cGUgb2YgdGhlIHJlc291cmNlLCByYW5nZSB0byBhZGQsIGN1cnJlbnQgYnVzCiAgKiBPdXRwdXQ6IDAgb3IgLTEsIGJ1cyBhbmQgcmFuZ2UgcHRycyAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgYWRkX3JhbmdlIChpbnQgdHlwZSwgc3RydWN0IHJhbmdlX25vZGUgKnJhbmdlLCBzdHJ1Y3QgYnVzX25vZGUgKmJ1c19jdXIpCitzdGF0aWMgaW50IGFkZF9idXNfcmFuZ2UgKGludCB0eXBlLCBzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmFuZ2UsIHN0cnVjdCBidXNfbm9kZSAqYnVzX2N1cikKIHsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmFuZ2VfY3VyID0gTlVMTDsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmFuZ2VfcHJldjsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyByb3V0aW5lIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiByZXNvdXJjZXMgb2YgdHlwZSAndHlwZScgYW5kIHVwZGF0ZXMKLSAqIHRoZSByYW5nZSBudW1iZXJzIHRoYXQgdGhleSBjb3JyZXNwb25kIHRvLiAgSXQgd2FzIGNhbGxlZCBmcm9tIGFkZF9yYW5nZSBmbmMKKyAqIHRoZSByYW5nZSBudW1iZXJzIHRoYXQgdGhleSBjb3JyZXNwb25kIHRvLiAgSXQgd2FzIGNhbGxlZCBmcm9tIGFkZF9idXNfcmFuZ2UgZm5jCiAgKgogICogSW5wdXQ6IGJ1cywgdHlwZSBvZiB0aGUgcmVzb3VyY2UsIHRoZSByYW5nZW5vIHN0YXJ0aW5nIGZyb20gd2hpY2ggdG8gdXBkYXRlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTk5OSw3ICsxOTk5LDcgQEAKIAogCQkJCQkJCWlmIChidXNfc2VjLT5ub0lPUmFuZ2VzID4gMCkgewogCQkJCQkJCQlpZiAoIXJhbmdlX2V4aXN0c19hbHJlYWR5IChyYW5nZSwgYnVzX3NlYywgSU8pKSB7Ci0JCQkJCQkJCQlhZGRfcmFuZ2UgKElPLCByYW5nZSwgYnVzX3NlYyk7CisJCQkJCQkJCQlhZGRfYnVzX3JhbmdlIChJTywgcmFuZ2UsIGJ1c19zZWMpOwogCQkJCQkJCQkJKytidXNfc2VjLT5ub0lPUmFuZ2VzOwogCQkJCQkJCQl9IGVsc2UgewogCQkJCQkJCQkJa2ZyZWUgKHJhbmdlKTsKQEAgLTIwNDgsNyArMjA0OCw3IEBACiAKIAkJCQkJCQlpZiAoYnVzX3NlYy0+bm9NZW1SYW5nZXMgPiAwKSB7CiAJCQkJCQkJCWlmICghcmFuZ2VfZXhpc3RzX2FscmVhZHkgKHJhbmdlLCBidXNfc2VjLCBNRU0pKSB7Ci0JCQkJCQkJCQlhZGRfcmFuZ2UgKE1FTSwgcmFuZ2UsIGJ1c19zZWMpOworCQkJCQkJCQkJYWRkX2J1c19yYW5nZSAoTUVNLCByYW5nZSwgYnVzX3NlYyk7CiAJCQkJCQkJCQkrK2J1c19zZWMtPm5vTWVtUmFuZ2VzOwogCQkJCQkJCQl9IGVsc2UgewogCQkJCQkJCQkJa2ZyZWUgKHJhbmdlKTsKQEAgLTIxMDIsNyArMjEwMiw3IEBACiAKIAkJCQkJCQlpZiAoYnVzX3NlYy0+bm9QRk1lbVJhbmdlcyA+IDApIHsKIAkJCQkJCQkJaWYgKCFyYW5nZV9leGlzdHNfYWxyZWFkeSAocmFuZ2UsIGJ1c19zZWMsIFBGTUVNKSkgewotCQkJCQkJCQkJYWRkX3JhbmdlIChQRk1FTSwgcmFuZ2UsIGJ1c19zZWMpOworCQkJCQkJCQkJYWRkX2J1c19yYW5nZSAoUEZNRU0sIHJhbmdlLCBidXNfc2VjKTsKIAkJCQkJCQkJCSsrYnVzX3NlYy0+bm9QRk1lbVJhbmdlczsKIAkJCQkJCQkJfSBlbHNlIHsKIAkJCQkJCQkJCWtmcmVlIChyYW5nZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDM4MTgzYTUzLi43MjhiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwpAQCAtNjQsMzIgKzY0LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQocGNpX2hvdHBsdWdfc2xvdF9saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgocGNpX2hwX211dGV4KTsKIAotLyogdGhlc2Ugc3RyaW5ncyBtYXRjaCB1cCB3aXRoIHRoZSB2YWx1ZXMgaW4gcGNpX2J1c19zcGVlZCAqLwotc3RhdGljIGNoYXIgKnBjaV9idXNfc3BlZWRfc3RyaW5nc1tdID0gewotCSIzMyBNSHogUENJIiwJCS8qIDB4MDAgKi8KLQkiNjYgTUh6IFBDSSIsCQkvKiAweDAxICovCi0JIjY2IE1IeiBQQ0ktWCIsCQkvKiAweDAyICovCi0JIjEwMCBNSHogUENJLVgiLAkvKiAweDAzICovCi0JIjEzMyBNSHogUENJLVgiLAkvKiAweDA0ICovCi0JTlVMTCwJCQkvKiAweDA1ICovCi0JTlVMTCwJCQkvKiAweDA2ICovCi0JTlVMTCwJCQkvKiAweDA3ICovCi0JTlVMTCwJCQkvKiAweDA4ICovCi0JIjY2IE1IeiBQQ0ktWCAyNjYiLAkvKiAweDA5ICovCi0JIjEwMCBNSHogUENJLVggMjY2IiwJLyogMHgwYSAqLwotCSIxMzMgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGIgKi8KLQlOVUxMLAkJCS8qIDB4MGMgKi8KLQlOVUxMLAkJCS8qIDB4MGQgKi8KLQlOVUxMLAkJCS8qIDB4MGUgKi8KLQlOVUxMLAkJCS8qIDB4MGYgKi8KLQlOVUxMLAkJCS8qIDB4MTAgKi8KLQkiNjYgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTEgKi8KLQkiMTAwIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEyICovCi0JIjEzMyBNSHogUENJLVggNTMzIiwJLyogMHgxMyAqLwotCSIyLjUgR1QvcyBQQ0llIiwJLyogMHgxNCAqLwotCSI1LjAgR1QvcyBQQ0llIiwJLyogMHgxNSAqLwotfTsKLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX1BDSV9DUENJCiBleHRlcm4gaW50IGNwY2lfaG90cGx1Z19pbml0KGludCBkZWJ1Zyk7CiBleHRlcm4gdm9pZCBjcGNpX2hvdHBsdWdfZXhpdCh2b2lkKTsKQEAgLTExOCw4ICs5Miw2IEBACiBHRVRfU1RBVFVTKGF0dGVudGlvbl9zdGF0dXMsIHU4KQogR0VUX1NUQVRVUyhsYXRjaF9zdGF0dXMsIHU4KQogR0VUX1NUQVRVUyhhZGFwdGVyX3N0YXR1cywgdTgpCi1HRVRfU1RBVFVTKG1heF9idXNfc3BlZWQsIGVudW0gcGNpX2J1c19zcGVlZCkKLUdFVF9TVEFUVVMoY3VyX2J1c19zcGVlZCwgZW51bSBwY2lfYnVzX3NwZWVkKQogCiBzdGF0aWMgc3NpemVfdCBwb3dlcl9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCiB7CkBAIC0yNjMsNjAgKzIzNSw2IEBACiAJLnNob3cgPSBwcmVzZW5jZV9yZWFkX2ZpbGUsCiB9OwogCi1zdGF0aWMgY2hhciAqdW5rbm93bl9zcGVlZCA9ICJVbmtub3duIGJ1cyBzcGVlZCI7Ci0KLXN0YXRpYyBzc2l6ZV90IG1heF9idXNfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQotewotCWNoYXIgKnNwZWVkX3N0cmluZzsKLQlpbnQgcmV0dmFsOwotCWVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZTsKLQkKLQlyZXR2YWwgPSBnZXRfbWF4X2J1c19zcGVlZChzbG90LT5ob3RwbHVnLCAmdmFsdWUpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCWlmICh2YWx1ZSA9PSBQQ0lfU1BFRURfVU5LTk9XTikKLQkJc3BlZWRfc3RyaW5nID0gdW5rbm93bl9zcGVlZDsKLQllbHNlCi0JCXNwZWVkX3N0cmluZyA9IHBjaV9idXNfc3BlZWRfc3RyaW5nc1t2YWx1ZV07Ci0JCi0JcmV0dmFsID0gc3ByaW50ZiAoYnVmLCAiJXNcbiIsIHNwZWVkX3N0cmluZyk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZCA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJtYXhfYnVzX3NwZWVkIiwgLm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHT30sCi0JLnNob3cgPSBtYXhfYnVzX3NwZWVkX3JlYWRfZmlsZSwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGN1cl9idXNfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQotewotCWNoYXIgKnNwZWVkX3N0cmluZzsKLQlpbnQgcmV0dmFsOwotCWVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZTsKLQotCXJldHZhbCA9IGdldF9jdXJfYnVzX3NwZWVkKHNsb3QtPmhvdHBsdWcsICZ2YWx1ZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JaWYgKHZhbHVlID09IFBDSV9TUEVFRF9VTktOT1dOKQotCQlzcGVlZF9zdHJpbmcgPSB1bmtub3duX3NwZWVkOwotCWVsc2UKLQkJc3BlZWRfc3RyaW5nID0gcGNpX2J1c19zcGVlZF9zdHJpbmdzW3ZhbHVlXTsKLQkKLQlyZXR2YWwgPSBzcHJpbnRmIChidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKLQotZXhpdDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkID0gewotCS5hdHRyID0gey5uYW1lID0gImN1cl9idXNfc3BlZWQiLCAubW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPfSwKLQkuc2hvdyA9IGN1cl9idXNfc3BlZWRfcmVhZF9maWxlLAotfTsKLQogc3RhdGljIHNzaXplX3QgdGVzdF93cml0ZV9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJc2l6ZV90IGNvdW50KQogewpAQCAtMzkxLDI2ICszMDksNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaGFzX21heF9idXNfc3BlZWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90KQotewotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QgPSBwY2lfc2xvdC0+aG90cGx1ZzsKLQlpZiAoKCFzbG90KSB8fCAoIXNsb3QtPm9wcykpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoc2xvdC0+b3BzLT5nZXRfbWF4X2J1c19zcGVlZCkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBoYXNfY3VyX2J1c19zcGVlZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QpCi17Ci0Jc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCA9IHBjaV9zbG90LT5ob3RwbHVnOwotCWlmICgoIXNsb3QpIHx8ICghc2xvdC0+b3BzKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChzbG90LT5vcHMtPmdldF9jdXJfYnVzX3NwZWVkKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIGhhc190ZXN0X2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCkKIHsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90ID0gcGNpX3Nsb3QtPmhvdHBsdWc7CkBAIC00NTYsMjAgKzM1NCw2IEBACiAJCQlnb3RvIGV4aXRfYWRhcHRlcjsKIAl9CiAKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkgewotCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkJJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGV4aXRfbWF4X3NwZWVkOwotCX0KLQotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKSB7Ci0JCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCQkmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXhpdF9jdXJfc3BlZWQ7Ci0JfQotCiAJaWYgKGhhc190ZXN0X2ZpbGUoc2xvdCkpIHsKIAkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJCSAgICZob3RwbHVnX3Nsb3RfYXR0cl90ZXN0LmF0dHIpOwpAQCAtNDgwLDE0ICszNjQsNiBAQAogCWdvdG8gZXhpdDsKIAogZXhpdF90ZXN0OgotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotZXhpdF9jdXJfc3BlZWQ6Ci0JaWYgKGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci1leGl0X21heF9zcGVlZDoKIAlpZiAoaGFzX2FkYXB0ZXJfZmlsZShzbG90KSkKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJICAmaG90cGx1Z19zbG90X2F0dHJfcHJlc2VuY2UuYXR0cik7CkBAIC01MjMsMTQgKzM5OSw2IEBACiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAogCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX3ByZXNlbmNlLmF0dHIpOwogCi0JaWYgKGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci0KLQlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKLQogCWlmIChoYXNfdGVzdF9maWxlKHNsb3QpKQogCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX3Rlc3QuYXR0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwppbmRleCA1Njc0YjIwLi45MjBmODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC02OSw4ICs2OSw2IEBACiBzdGF0aWMgaW50IGdldF9hdHRlbnRpb25fc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfYWRhcHRlcl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwogCiAvKioKICAqIHJlbGVhc2Vfc2xvdCAtIGZyZWUgdXAgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgc2xvdApAQCAtMTEzLDggKzExMSw2IEBACiAJb3BzLT5kaXNhYmxlX3Nsb3QgPSBkaXNhYmxlX3Nsb3Q7CiAJb3BzLT5nZXRfcG93ZXJfc3RhdHVzID0gZ2V0X3Bvd2VyX3N0YXR1czsKIAlvcHMtPmdldF9hZGFwdGVyX3N0YXR1cyA9IGdldF9hZGFwdGVyX3N0YXR1czsKLQlvcHMtPmdldF9tYXhfYnVzX3NwZWVkID0gZ2V0X21heF9idXNfc3BlZWQ7Ci0Jb3BzLT5nZXRfY3VyX2J1c19zcGVlZCA9IGdldF9jdXJfYnVzX3NwZWVkOwogCWlmIChNUkxfU0VOUyhjdHJsKSkKIAkJb3BzLT5nZXRfbGF0Y2hfc3RhdHVzID0gZ2V0X2xhdGNoX3N0YXR1czsKIAlpZiAoQVRUTl9MRUQoY3RybCkpIHsKQEAgLTIyNywyNyArMjIzLDYgQEAKIAlyZXR1cm4gcGNpZWhwX2dldF9hZGFwdGVyX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAotCQkJCWVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0KLQljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKLQkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JcmV0dXJuIHBjaWVocF9nZXRfbWF4X2xpbmtfc3BlZWQoc2xvdCwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR1cm4gcGNpZWhwX2dldF9jdXJfbGlua19zcGVlZChzbG90LCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgcGNpZWhwX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCWludCByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwppbmRleCBkNmFjMWIyLi45YTdmMjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCkBAIC0zNDEsNiArMzQxLDcgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWtmcmVlKGluZm8pOwogCQlnb3RvIG91dDsKIAl9CiAJcXVldWVfd29yayhwY2llaHBfd3EsICZpbmZvLT53b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggMTAwNDBkNS4uNDBiNDhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTQ5Miw2ICs0OTIsNyBAQAogCXUxNiBzbG90X2NtZDsKIAl1MTYgY21kX21hc2s7CiAJdTE2IHNsb3Rfc3RhdHVzOworCXUxNiBsbmtfc3RhdHVzOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogQ2xlYXIgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCBmcm9tIHByZXZpb3VzIHBvd2VyIGZhaWx1cmVzICovCkBAIC01MjMsNiArNTI0LDE0IEBACiAJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsIF9fZnVuY19fLAogCQkgcGNpX3BjaWVfY2FwKGN0cmwtPnBjaWUtPnBvcnQpICsgUENJX0VYUF9TTFRDVEwsIHNsb3RfY21kKTsKIAorCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBQQ0lfRVhQX0xOS1NUQSwgJmxua19zdGF0dXMpOworCWlmIChyZXR2YWwpIHsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEEgcmVnaXN0ZXJcbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlwY2llX3VwZGF0ZV9saW5rX3NwZWVkKGN0cmwtPnBjaWUtPnBvcnQtPnN1Ym9yZGluYXRlLCBsbmtfc3RhdHVzKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTYxMCwzNyArNjE5LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBwY2llaHBfZ2V0X21heF9saW5rX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaWVfbGlua19zcGVlZCBsbmtfc3BlZWQ7Ci0JdTMyCWxua19jYXA7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlyZXR2YWwgPSBwY2llaHBfcmVhZGwoY3RybCwgUENJX0VYUF9MTktDQVAsICZsbmtfY2FwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0Jc3dpdGNoIChsbmtfY2FwICYgMHgwMDBGKSB7Ci0JY2FzZSAxOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzJfNUdCOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWxua19zcGVlZCA9IFBDSUVfNV8wR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxua19zcGVlZCA9IFBDSUVfTE5LX1NQRUVEX1VOS05PV047Ci0JCWJyZWFrOwotCX0KLQotCSp2YWx1ZSA9IGxua19zcGVlZDsKLQljdHJsX2RiZyhjdHJsLCAiTWF4IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBwY2llaHBfZ2V0X21heF9sbmtfd2lkdGgoc3RydWN0IHNsb3QgKnNsb3QsCiAJCQkJIGVudW0gcGNpZV9saW5rX3dpZHRoICp2YWx1ZSkKIHsKQEAgLTY5MSwzOCArNjY5LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgcGNpZWhwX2dldF9jdXJfbGlua19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0JZW51bSBwY2llX2xpbmtfc3BlZWQgbG5rX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JaW50IHJldHZhbCA9IDA7Ci0JdTE2IGxua19zdGF0dXM7Ci0KLQlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgUENJX0VYUF9MTktTVEEsICZsbmtfc3RhdHVzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLAotCQkJIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzd2l0Y2ggKGxua19zdGF0dXMgJiBQQ0lfRVhQX0xOS1NUQV9DTFMpIHsKLQljYXNlIDE6Ci0JCWxua19zcGVlZCA9IFBDSUVfMl81R0I7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbG5rX3NwZWVkID0gUENJRV81XzBHQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbG5rX3NwZWVkID0gUENJRV9MTktfU1BFRURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JKnZhbHVlID0gbG5rX3NwZWVkOwotCWN0cmxfZGJnKGN0cmwsICJDdXJyZW50IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBwY2llaHBfZ2V0X2N1cl9sbmtfd2lkdGgoc3RydWN0IHNsb3QgKnNsb3QsCiAJCQkJIGVudW0gcGNpZV9saW5rX3dpZHRoICp2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKaW5kZXggMjE3MzMxMC4uMGExNjQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKQEAgLTUzLDE3ICs1MywxNSBAQAogCQlidXNuciA9IHBjaV9zY2FuX2JyaWRnZShwYXJlbnQsIGRldiwgYnVzbnIsIHBhc3MpOwogCWlmICghZGV2LT5zdWJvcmRpbmF0ZSkKIAkJcmV0dXJuIC0xOwotCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGRldi0+c3Vib3JkaW5hdGUpOwotCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhwYXJlbnQpOwotCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwotCXBjaV9idXNfYWRkX2RldmljZXMocGFyZW50KTsKKwogCXJldHVybiAwOwogfQogCiBpbnQgcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBwX3Nsb3QtPmN0cmwtPnBjaWUtPnBvcnQtPnN1Ym9yZGluYXRlOworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBwX3Nsb3QtPmN0cmwtPnBjaWUtPnBvcnQ7CisJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IGJyaWRnZS0+c3Vib3JkaW5hdGU7CiAJaW50IG51bSwgZm47CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKQEAgLTk2LDEyICs5NCwyNSBAQAogCQkJCShkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSkgewogCQkJcGNpZWhwX2FkZF9icmlkZ2UoZGV2KTsKIAkJfQorCQlwY2lfZGV2X3B1dChkZXYpOworCX0KKworCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKGJyaWRnZSk7CisKKwlmb3IgKGZuID0gMDsgZm4gPCA4OyBmbisrKSB7CisJCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTigwLCBmbikpOworCQlpZiAoIWRldikKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKKwkJCXBjaV9kZXZfcHV0KGRldik7CisJCQljb250aW51ZTsKKwkJfQogCQlwY2lfY29uZmlndXJlX3Nsb3QoZGV2KTsKIAkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9CiAKLQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMocGFyZW50KTsKIAlwY2lfYnVzX2FkZF9kZXZpY2VzKHBhcmVudCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IGMxNTkyMjMuLmRjYWFlNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTEzMCwxMCArMTMwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCitzdGF0aWMgZW51bSBwY2lfYnVzX3NwZWVkIGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90KQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gKHN0cnVjdCBzbG90ICopaG90cGx1Z19zbG90LT5wcml2YXRlOwotCisJZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOwogCXN3aXRjaCAoc2xvdC0+dHlwZSkgewogCWNhc2UgMToKIAljYXNlIDI6CkBAIC0xNDEsMzAgKzE0MCwzMCBAQAogCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMzNNSHo7CS8qIHNwZWVkIGZvciBjYXNlIDEtNiAqLworCQlzcGVlZCA9IFBDSV9TUEVFRF8zM01IejsJLyogc3BlZWQgZm9yIGNhc2UgMS02ICovCiAJCWJyZWFrOwogCWNhc2UgNzoKIAljYXNlIDg6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCWJyZWFrOwogCWNhc2UgMTE6CiAJY2FzZSAxNDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CiAJCWJyZWFrOwogCWNhc2UgMTI6CiAJY2FzZSAxNToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQlzcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJYnJlYWs7CiAJY2FzZSAxMzoKIAljYXNlIDE2OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAkJYnJlYWs7Ci0KIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gc3BlZWQ7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2NoaWxkcmVuX3Byb3BzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IGludCAqKmRyY19pbmRleGVzLApAQCAtNDA4LDYgKzQwNyw4IEBACiAJCXNsb3QtPnN0YXRlID0gTk9UX1ZBTElEOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlzbG90LT5idXMtPm1heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZChzbG90KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI5LDcgKzQzMCw2IEBACiAJLmdldF9wb3dlcl9zdGF0dXMgPSBnZXRfcG93ZXJfc3RhdHVzLAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9IGdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPSBnZXRfYWRhcHRlcl9zdGF0dXMsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0gZ2V0X21heF9idXNfc3BlZWQsCiB9OwogCiBtb2R1bGVfaW5pdChycGFwaHBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAppbmRleCA4ZTIxMGNkNy4uZDI2MjdlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC0zMzMsOCArMzMzLDYgQEAKIAlpbnQgKCpzZXRfYXR0ZW50aW9uX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4IHN0YXR1cyk7CiAJaW50ICgqZ2V0X2xhdGNoX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOwogCWludCAoKmdldF9hZGFwdGVyX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOwotCWludCAoKmdldF9tYXhfYnVzX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7Ci0JaW50ICgqZ2V0X2N1cl9idXNfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKIAlpbnQgKCpnZXRfYWRhcHRlcl9zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwogCWludCAoKmdldF9tb2RlMV9FQ0NfY2FwKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKm1vZGUpOwogCWludCAoKmdldF9wcm9nX2ludCkoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpwcm9nX2ludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKaW5kZXggOGE1MjBhM2QuLmE1MDYyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKQEAgLTY1LDggKzY1LDYgQEAKIHN0YXRpYyBpbnQgZ2V0X2F0dGVudGlvbl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9sYXRjaF9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyBzaHBjaHBfaG90cGx1Z19zbG90X29wcyA9IHsKIAkuc2V0X2F0dGVudGlvbl9zdGF0dXMgPQlzZXRfYXR0ZW50aW9uX3N0YXR1cywKQEAgLTc2LDggKzc0LDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CWdldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9CWdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPQlnZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQgPQlnZXRfY3VyX2J1c19zcGVlZCwKIH07CiAKIC8qKgpAQCAtMjc5LDM3ICsyNzUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwKLQkJCQllbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKLQlpbnQgcmV0dmFsOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9tYXhfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKLQlpbnQgcmV0dmFsOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpc19zaHBjX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKSB8fCAoZGV2LT5kZXZpY2UgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCBiOGFiMjc5Li4zYmJhMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC0yODUsMTcgKzI4NSw4IEBACiAJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCX0KIAotCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChwX3Nsb3QsICZic3ApOwotCWlmIChyYykgewotCQljdHJsX2VycihjdHJsLCAiQ2FuJ3QgZ2V0IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwotCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKLQl9Ci0KLQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQocF9zbG90LCAmbXNwKTsKLQlpZiAocmMpIHsKLQkJY3RybF9lcnIoY3RybCwgIkNhbid0IGdldCBtYXggYnVzIG9wZXJhdGlvbiBzcGVlZFxuIik7Ci0JCW1zcCA9IGJzcDsKLQl9CisJYnNwID0gY3RybC0+cGNpX2Rldi0+YnVzLT5jdXJfYnVzX3NwZWVkOworCW1zcCA9IGN0cmwtPnBjaV9kZXYtPmJ1cy0+bWF4X2J1c19zcGVlZDsKIAogCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzbG90cyBvciBkZXZpY2VzIG9uIHRoZSBzYW1lIGJ1cyAqLwogCWlmICghbGlzdF9lbXB0eSgmY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPmRldmljZXMpKQpAQCAtNDYyLDYgKzQ1Myw3IEBACiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlrZnJlZShpbmZvKTsKIAkJZ290byBvdXQ7CiAJfQogCXF1ZXVlX3dvcmsoc2hwY2hwX3dxLCAmaW5mby0+d29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCmluZGV4IDg2ZGMzOTguLjVmNWU4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCkBAIC02NjAsNiArNjYwLDc1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCBzaHBjX2dldF9jdXJfYnVzX3NwZWVkKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CisJdTE2IHNlY19idXNfcmVnID0gc2hwY19yZWFkdyhjdHJsLCBTRUNfQlVTX0NPTkZJRyk7CisJdTggcGkgPSBzaHBjX3JlYWRiKGN0cmwsIFBST0dfSU5URVJGQUNFKTsKKwl1OCBzcGVlZF9tb2RlID0gKHBpID09IDIpID8gKHNlY19idXNfcmVnICYgMHhGKSA6IChzZWNfYnVzX3JlZyAmIDB4Nyk7CisKKwlpZiAoKHBpID09IDEpICYmIChzcGVlZF9tb2RlID4gNCkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChzcGVlZF9tb2RlKSB7CisJY2FzZSAweDA6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4NDoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHg5OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4YToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweGI6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJY2FzZSAweGM6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWNhc2UgMHhkOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PREVWOworCQlicmVhazsKKwl9CisKKyBvdXQ6CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gYnVzX3NwZWVkOworCWRiZygiQ3VycmVudCBidXMgc3BlZWQgPSAlZFxuIiwgYnVzX3NwZWVkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBpbnQgaHBjX3NldF9idXNfc3BlZWRfbW9kZShzdHJ1Y3Qgc2xvdCAqIHNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZSkKIHsKIAlpbnQgcmV0dmFsOwpAQCAtNzIwLDYgKzc4OSw4IEBACiAJcmV0dmFsID0gc2hwY193cml0ZV9jbWQoc2xvdCwgMCwgY21kKTsKIAlpZiAocmV0dmFsKQogCQljdHJsX2VycihjdHJsLCAiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJc2hwY19nZXRfY3VyX2J1c19zcGVlZChjdHJsKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MDMsMTAgKzg3NCwxMCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBocGNfZ2V0X21heF9idXNfc3BlZWQgKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQorc3RhdGljIGludCBzaHBjX2dldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewogCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAJZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCXU4IHBpID0gc2hwY19yZWFkYihjdHJsLCBQUk9HX0lOVEVSRkFDRSk7CiAJdTMyIHNsb3RfYXZhaWwxID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX0FWQUlMMSk7CkBAIC04NDIsNzkgKzkxMywxMiBAQAogCQkJcmV0dmFsID0gLUVOT0RFVjsKIAl9CiAKLQkqdmFsdWUgPSBidXNfc3BlZWQ7CisJYnVzLT5tYXhfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwogCWN0cmxfZGJnKGN0cmwsICJNYXggYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGhwY19nZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCWVudW0gcGNpX2J1c19zcGVlZCBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQl1MTYgc2VjX2J1c19yZWcgPSBzaHBjX3JlYWR3KGN0cmwsIFNFQ19CVVNfQ09ORklHKTsKLQl1OCBwaSA9IHNocGNfcmVhZGIoY3RybCwgUFJPR19JTlRFUkZBQ0UpOwotCXU4IHNwZWVkX21vZGUgPSAocGkgPT0gMikgPyAoc2VjX2J1c19yZWcgJiAweEYpIDogKHNlY19idXNfcmVnICYgMHg3KTsKLQotCWlmICgocGkgPT0gMSkgJiYgKHNwZWVkX21vZGUgPiA0KSkgewotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3dpdGNoIChzcGVlZF9tb2RlKSB7Ci0JY2FzZSAweDA6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8zM01IejsKLQkJYnJlYWs7Ci0JY2FzZSAweDE6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1IejsKLQkJYnJlYWs7Ci0JY2FzZSAweDI6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4MzoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4NDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4NToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOwotCQlicmVhazsKLQljYXNlIDB4NjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQzsKLQkJYnJlYWs7Ci0JY2FzZSAweDc6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M7Ci0JCWJyZWFrOwotCWNhc2UgMHg4OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjY7Ci0JCWJyZWFrOwotCWNhc2UgMHg5OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OwotCQlicmVhazsKLQljYXNlIDB4YToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKLQkJYnJlYWs7Ci0JY2FzZSAweGI6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMzsKLQkJYnJlYWs7Ci0JY2FzZSAweGM6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzM7Ci0JCWJyZWFrOwotCWNhc2UgMHhkOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JfQotCi0JY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIHN0cnVjdCBocGNfb3BzIHNocGNocF9ocGNfb3BzID0gewogCS5wb3dlcl9vbl9zbG90CQkJPSBocGNfcG93ZXJfb25fc2xvdCwKIAkuc2xvdF9lbmFibGUJCQk9IGhwY19zbG90X2VuYWJsZSwKQEAgLTkyNiw4ICs5MzAsNiBAQAogCS5nZXRfbGF0Y2hfc3RhdHVzCQk9IGhwY19nZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMJCT0gaHBjX2dldF9hZGFwdGVyX3N0YXR1cywKIAotCS5nZXRfbWF4X2J1c19zcGVlZAkJPSBocGNfZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkCQk9IGhwY19nZXRfY3VyX2J1c19zcGVlZCwKIAkuZ2V0X2FkYXB0ZXJfc3BlZWQJCT0gaHBjX2dldF9hZGFwdGVyX3NwZWVkLAogCS5nZXRfbW9kZTFfRUNDX2NhcAkJPSBocGNfZ2V0X21vZGUxX0VDQ19jYXAsCiAJLmdldF9wcm9nX2ludAkJCT0gaHBjX2dldF9wcm9nX2ludCwKQEAgLTEwODYsNiArMTA4OCw5IEBACiAJfQogCWN0cmxfZGJnKGN0cmwsICJIUEMgYXQgJXMgaXJxPSV4XG4iLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKIAorCXNocGNfZ2V0X21heF9idXNfc3BlZWQoY3RybCk7CisJc2hwY19nZXRfY3VyX2J1c19zcGVlZChjdHJsKTsKKwogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY29udHJvbGxlciB0byBiZSBpbml0aWFsaXplZCwKIAkgKiBpbml0aWFsaXplIHRoZSBzaHBjaHBkIHdvcmsgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCmluZGV4IDI5ZmE5ZDIuLjA3MWI3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYwpAQCAtNDcsOCArNDcsNyBAQAogCWJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCiAJb3V0ICs9IHNwcmludGYoYnVmLCAiRnJlZSByZXNvdXJjZXM6IG1lbW9yeVxuIik7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpbmRleCsrKSB7Ci0JCXJlcyA9IGJ1cy0+cmVzb3VyY2VbaW5kZXhdOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGluZGV4KSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCQkhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCkBAIC01OCw4ICs1Nyw3IEBACiAJCX0KIAl9CiAJb3V0ICs9IHNwcmludGYob3V0LCAiRnJlZSByZXNvdXJjZXM6IHByZWZldGNoYWJsZSBtZW1vcnlcbiIpOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewotCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpbmRleCkgewogCQlpZiAocmVzICYmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCiAJCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCkBAIC02OSw4ICs2Nyw3IEBACiAJCX0KIAl9CiAJb3V0ICs9IHNwcmludGYob3V0LCAiRnJlZSByZXNvdXJjZXM6IElPXG4iKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGluZGV4KyspIHsKLQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKSB7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhsbHgsICIKIAkJCQkJImxlbmd0aCA9ICU4LjhsbHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3YuYyBiL2RyaXZlcnMvcGNpL2lvdi5jCmluZGV4IGIyYTQ0OGUuLjNlNWFiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jCisrKyBiL2RyaXZlcnMvcGNpL2lvdi5jCkBAIC03MDYsNiArNzA2LDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfc3Jpb3ZfbWlncmF0aW9uKTsKIAorLyoqCisgKiBwY2lfbnVtX3ZmIC0gcmV0dXJuIG51bWJlciBvZiBWRnMgYXNzb2NpYXRlZCB3aXRoIGEgUEYgZGV2aWNlX3JlbGVhc2VfZHJpdmVyCisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIFZGcywgb3IgMCBpZiBTUi1JT1YgaXMgbm90IGVuYWJsZWQuCisgKi8KK2ludCBwY2lfbnVtX3ZmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKCFkZXYgfHwgIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBkZXYtPnNyaW92LT5ucl92aXJ0Zm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbnVtX3ZmKTsKKwogc3RhdGljIGludCBhdHNfYWxsb2Nfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcykKIHsKIAlpbnQgcG9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGVnYWN5LmMgYi9kcml2ZXJzL3BjaS9sZWdhY3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcxZjY1Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9sZWdhY3kuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSAicGNpLmgiCi0KLS8qKgotICogcGNpX2ZpbmRfZGV2aWNlIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgdmVuZG9yL2RldmljZSBpZAotICogQHZlbmRvcjogUENJIHZlbmRvciBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIHZlbmRvciBpZHMKLSAqIEBkZXZpY2U6IFBDSSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCi0gKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgotICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQKLSAqIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKLSAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCi0gKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCi0gKgotICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLCBhcwotICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KLSAqIHRpbWUuCi0gKi8KLXN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCXBjaV9kZXZfZ2V0KGZyb20pOwotCXBkZXYgPSBwY2lfZ2V0X3N1YnN5cyh2ZW5kb3IsIGRldmljZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZnJvbSk7Ci0JcGNpX2Rldl9wdXQocGRldik7Ci0JcmV0dXJuIHBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCA3ZTI4Mjk1Li4yZTdhM2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTE2LDggKzE2LDE0NCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgInBjaS5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisvKioKKyAqIHBjaV9hY3BpX3dha2VfYnVzIC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3Igcm9vdCBidXNlcy4KKyAqIEBoYW5kbGU6IEFDUEkgaGFuZGxlIG9mIGEgZGV2aWNlIHRoZSBub3RpZmljYXRpb24gaXMgZm9yLgorICogQGV2ZW50OiBUeXBlIG9mIHRoZSBzaWduYWxlZCBldmVudC4KKyAqIEBjb250ZXh0OiBQQ0kgcm9vdCBidXMgdG8gd2FrZSB1cCBkZXZpY2VzIG9uLgorICovCitzdGF0aWMgdm9pZCBwY2lfYWNwaV93YWtlX2J1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyA9IGNvbnRleHQ7CisKKwlpZiAoZXZlbnQgPT0gQUNQSV9OT1RJRllfREVWSUNFX1dBS0UgJiYgcGNpX2J1cykKKwkJcGNpX3BtZV93YWtldXBfYnVzKHBjaV9idXMpOworfQorCisvKioKKyAqIHBjaV9hY3BpX3dha2VfZGV2IC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3IgUENJIGRldmljZXMuCisgKiBAaGFuZGxlOiBBQ1BJIGhhbmRsZSBvZiBhIGRldmljZSB0aGUgbm90aWZpY2F0aW9uIGlzIGZvci4KKyAqIEBldmVudDogVHlwZSBvZiB0aGUgc2lnbmFsZWQgZXZlbnQuCisgKiBAY29udGV4dDogUENJIGRldmljZSBvYmplY3QgdG8gd2FrZSB1cC4KKyAqLworc3RhdGljIHZvaWQgcGNpX2FjcGlfd2FrZV9kZXYoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBjb250ZXh0OworCisJaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0RFVklDRV9XQUtFICYmIHBjaV9kZXYpIHsKKwkJcGNpX2NoZWNrX3BtZV9zdGF0dXMocGNpX2Rldik7CisJCXBtX3J1bnRpbWVfcmVzdW1lKCZwY2lfZGV2LT5kZXYpOworCQlpZiAocGNpX2Rldi0+c3Vib3JkaW5hdGUpCisJCQlwY2lfcG1lX3dha2V1cF9idXMocGNpX2Rldi0+c3Vib3JkaW5hdGUpOworCX0KK30KKworLyoqCisgKiBhZGRfcG1fbm90aWZpZXIgLSBSZWdpc3RlciBQTSBub3RpZmllciBmb3IgZ2l2ZW4gQUNQSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBjb250ZXh0OiBQQ0kgZGV2aWNlIG9yIGJ1cyB0byBjaGVjayBmb3IgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqCisgKiBOT1RFOiBAZGV2IG5lZWQgbm90IGJlIGEgcnVuLXdha2Ugb3Igd2FrZS11cCBkZXZpY2UgdG8gYmUgYSB2YWxpZCBzb3VyY2Ugb2YKKyAqIFBNIHdha2UtdXAgZXZlbnRzLiAgRm9yIGV4YW1wbGUsIHdha2UtdXAgZXZlbnRzIG1heSBiZSBnZW5lcmF0ZWQgZm9yIGJyaWRnZXMKKyAqIGlmIG9uZSBvZiB0aGUgZGV2aWNlcyBiZWxvdyB0aGUgYnJpZGdlIGlzIHNpZ25hbGluZyBQTUUsIGV2ZW4gaWYgdGhlIGJyaWRnZQorICogaXRzZWxmIGRvZXNuJ3QgaGF2ZSBhIHdha2UtdXAgR1BFIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGFkZF9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKGRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQpCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJICAgICBoYW5kbGVyLCBjb250ZXh0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCWdvdG8gb3V0OworCisJZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCA9IHRydWU7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHJlbW92ZV9wbV9ub3RpZmllciAtIFVucmVnaXN0ZXIgUE0gbm90aWZpZXIgZnJvbSBnaXZlbiBBQ1BJIGRldmljZS4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIHJlbW92ZSB0aGUgbm90aWZpZXIgZnJvbS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIHJlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkgICAgaGFuZGxlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSBmYWxzZTsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllciAtIFJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZvciBnaXZlbiBQQ0kgYnVzLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gYWRkIHRoZSBub3RpZmllciBmb3IuCisgKiBAcGNpX2J1czogUENJIGJ1cyB0byB3YWxrIGNoZWNraW5nIGZvciBQTUUgc3RhdHVzIGlmIGFuIGV2ZW50IGlzIHNpZ25hbGVkLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHBjaV9idXMgKnBjaV9idXMpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfYnVzLCBwY2lfYnVzKTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyIC0gVW5yZWdpc3RlciBQQ0kgYnVzIFBNIG5vdGlmaWVyLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gcmVtb3ZlIHRoZSBub3RpZmllciBmcm9tLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KQoreworCXJldHVybiByZW1vdmVfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2J1cyk7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyIC0gUmVnaXN0ZXIgUE0gbm90aWZpZXIgZm9yIGdpdmVuIFBDSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGNoZWNrIGZvciB0aGUgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfZGV2LCBwY2lfZGV2KTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIgLSBVbnJlZ2lzdGVyIFBDSSBkZXZpY2UgUE0gbm90aWZpZXIuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byByZW1vdmUgdGhlIG5vdGlmaWVyIGZyb20uCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcmVtb3ZlX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9kZXYpOworfQorCiAvKgogICogX1N4RCByZXR1cm5zIHRoZSBELXN0YXRlIHdpdGggdGhlIGhpZ2hlc3QgcG93ZXIKICAqIChsb3dlc3QgRC1zdGF0ZSBudW1iZXIpIHN1cHBvcnRlZCBpbiB0aGUgUy1zdGF0ZSAieCIuCkBAIC0xMzEsMTkgKzI2Nyw5NCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGFjcGlfZGV2X3J1bl93YWtlIC0gRW5hYmxlL2Rpc2FibGUgd2FrZS11cCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQHBoeXNfZGV2OiBEZXZpY2UgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHBsYXRmb3JtIHRvIHdha2UtdXAgdGhlIHN5c3RlbSBmb3IuCisgKiBAZW5hYmxlOiBXaGV0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB3YWtlLXVwIGZ1bmN0aW9uYWxpdHkuCisgKgorICogRmluZCB0aGUgQUNQSSBkZXZpY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gQHBjaV9kZXYgYW5kIHRyeSB0bworICogZW5hYmxlL2Rpc2FibGUgdGhlIEdQRSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9kZXZfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqcGh5c19kZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgZXJyb3IgPSAtRU5PREVWOworCisJaWYgKCFkZXZpY2VfcnVuX3dha2UocGh5c19kZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRShwaHlzX2Rldik7CisJaWYgKCFoYW5kbGUgfHwgQUNQSV9GQUlMVVJFKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2KSkpIHsKKwkJZGV2X2RiZyhwaHlzX2RldiwgIkFDUEkgaGFuZGxlIGhhcyBubyBjb250ZXh0IGluICVzIVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KyspIHsKKwkJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBBQ1BJX1NUQVRFX1MwKTsKKwkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQlBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQl9CisJfSBlbHNlIGlmIChkZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCA+IDApIHsKKwkJaWYgKCEtLWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KSB7CisJCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldik7CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9IC1FQUxSRUFEWTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGNpX3Byb3BhZ2F0ZV9ydW5fd2FrZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIGVuYWJsZSkKK3sKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoYnJpZGdlLT5wbWVfaW50ZXJydXB0KQorCQkJcmV0dXJuOworCQlpZiAoIWFjcGlfZGV2X3J1bl93YWtlKCZicmlkZ2UtPmRldiwgZW5hYmxlKSkKKwkJCXJldHVybjsKKwkJYnVzID0gYnVzLT5wYXJlbnQ7CisJfQorCisJLyogV2UgaGF2ZSByZWFjaGVkIHRoZSByb290IGJ1cy4gKi8KKwlpZiAoYnVzLT5icmlkZ2UpCisJCWFjcGlfZGV2X3J1bl93YWtlKGJ1cy0+YnJpZGdlLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGFjcGlfcGNpX3J1bl93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWlmIChkZXYtPnBtZV9pbnRlcnJ1cHQpCisJCXJldHVybiAwOworCisJaWYgKCFhY3BpX2Rldl9ydW5fd2FrZSgmZGV2LT5kZXYsIGVuYWJsZSkpCisJCXJldHVybiAwOworCisJYWNwaV9wY2lfcHJvcGFnYXRlX3J1bl93YWtlKGRldi0+YnVzLCBlbmFibGUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgYWNwaV9wY2lfcGxhdGZvcm1fcG0gPSB7CiAJLmlzX21hbmFnZWFibGUgPSBhY3BpX3BjaV9wb3dlcl9tYW5hZ2VhYmxlLAogCS5zZXRfc3RhdGUgPSBhY3BpX3BjaV9zZXRfcG93ZXJfc3RhdGUsCiAJLmNob29zZV9zdGF0ZSA9IGFjcGlfcGNpX2Nob29zZV9zdGF0ZSwKIAkuY2FuX3dha2V1cCA9IGFjcGlfcGNpX2Nhbl93YWtldXAsCiAJLnNsZWVwX3dha2UgPSBhY3BpX3BjaV9zbGVlcF93YWtlLAorCS5ydW5fd2FrZSA9IGFjcGlfcGNpX3J1bl93YWtlLAogfTsKIAogLyogQUNQSSBidXMgdHlwZSAqLwogc3RhdGljIGludCBhY3BpX3BjaV9maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICpoYW5kbGUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2OwotCWFjcGlfaW50ZWdlcglhZGRyOworCXU2NAlhZGRyOwogCiAJcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAkvKiBQbGVhc2UgcmVmIHRvIEFDUEkgc3BlYyBmb3IgdGhlIHN5bnRheCBvZiBfQURSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZTVkNDdiZS4uZjlhMGFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlICJwY2kuaCIKIAogc3RydWN0IHBjaV9keW5pZCB7CkBAIC00MDQsNiArNDA1LDM1IEBACiAJcGNpX21zaXhfc2h1dGRvd24ocGNpX2Rldik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fT1BTCisKKy8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgdXNlZCBmb3Igc3lzdGVtIHJlc3VtZSBhbmQgcnVuLXRpbWUgcmVzdW1lLiAqLworCisvKioKKyAqIHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyAtIHJlc3RvcmUgc3RhbmRhcmQgY29uZmlnIHJlZ2lzdGVycyBvZiBQQ0kgZGV2aWNlCisgKiBAcGNpX2RldjogUENJIGRldmljZSB0byBoYW5kbGUKKyAqLworc3RhdGljIGludCBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKHBjaV9kZXYsIFBDSV9VTktOT1dOKTsKKworCWlmIChwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCkgeworCQlpbnQgZXJyb3IgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcocGNpX2Rldik7CisJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lX2Vhcmx5LCBwY2lfZGV2KTsKK30KKworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAogLyoKQEAgLTUyMCwyOSArNTUwLDYgQEAKIAogLyogQXV4aWxpYXJ5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBuZXcgcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsgKi8KIAotLyoqCi0gKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQotICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCi0gKi8KLXN0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7Ci0KLQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKLQkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JcmV0dXJuIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOwotfQotCi1zdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfbm9pcnEoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCi17Ci0JcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOwotCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaV9wbV9kZWZhdWx0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOwpAQCAtNTgxLDYgKzU4OCwxNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCisJLyoKKwkgKiBQQ0kgZGV2aWNlcyBzdXNwZW5kZWQgYXQgcnVuIHRpbWUgbmVlZCB0byBiZSByZXN1bWVkIGF0IHRoaXMKKwkgKiBwb2ludCwgYmVjYXVzZSBpbiBnZW5lcmFsIGl0IGlzIG5lY2Vzc2FyeSB0byByZWNvbmZpZ3VyZSB0aGVtIGZvcgorCSAqIHN5c3RlbSBzdXNwZW5kLiAgTmFtZWx5LCBpZiB0aGUgZGV2aWNlIGlzIHN1cHBvc2VkIHRvIHdha2UgdXAgdGhlCisJICogc3lzdGVtIGZyb20gdGhlIHNsZWVwIHN0YXRlLCB3ZSBtYXkgbmVlZCB0byByZWNvbmZpZ3VyZSBpdCBmb3IgdGhpcworCSAqIHB1cnBvc2UuICBJbiB0dXJuLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBzdXBwb3NlZCB0byB3YWtlIHVwIHRoZQorCSAqIHN5c3RlbSBmcm9tIHRoZSBzbGVlcCBzdGF0ZSwgd2UnbGwgaGF2ZSB0byBwcmV2ZW50IGl0IGZyb20gc2lnbmFsaW5nCisJICogd2FrZS11cC4KKwkgKi8KKwlwbV9ydW50aW1lX3Jlc3VtZShkZXYpOworCiAJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnByZXBhcmUpCiAJCWVycm9yID0gZHJ2LT5wbS0+cHJlcGFyZShkZXYpOwogCkBAIC01OTUsNiArNjEzLDEzIEBACiAJCWRydi0+cG0tPmNvbXBsZXRlKGRldik7CiB9CiAKKyNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKworI2RlZmluZSBwY2lfcG1fcHJlcGFyZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9jb21wbGV0ZQlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKICNpZmRlZiBDT05GSUdfU1VTUEVORAogCiBzdGF0aWMgaW50IHBjaV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTY4MSw3ICs3MDYsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHBjaV9kZXYpOworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKIAogCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQogCQlyZXR1cm4gcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKQEAgLTg3OSw3ICs5MDQsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHBjaV9kZXYpOworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKIAogCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQogCQlyZXR1cm4gcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKQEAgLTkzMSw2ICs5NTYsODQgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOworCWludCBlcnJvcjsKKworCWlmICghcG0gfHwgIXBtLT5ydW50aW1lX3N1c3BlbmQpCisJCXJldHVybiAtRU5PU1lTOworCisJZXJyb3IgPSBwbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KHBtLT5ydW50aW1lX3N1c3BlbmQsIGVycm9yKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3N1c3BlbmQsIHBjaV9kZXYpOworCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAorCSAgICAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9VTktOT1dOKSB7CisJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkiUENJIFBNOiBTdGF0ZSBvZiBkZXZpY2Ugbm90IHNhdmVkIGJ5ICVwRlxuIiwKKwkJCXBtLT5ydW50aW1lX3N1c3BlbmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKworCXBjaV9maW5pc2hfcnVudGltZV9zdXNwZW5kKHBjaV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9yZXN1bWUpCisJCXJldHVybiAtRU5PU1lTOworCisJcGNpX3BtX2RlZmF1bHRfcmVzdW1lX2Vhcmx5KHBjaV9kZXYpOworCV9fcGNpX2VuYWJsZV93YWtlKHBjaV9kZXYsIFBDSV9EMCwgdHJ1ZSwgZmFsc2UpOworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZSwgcGNpX2Rldik7CisKKwlyZXR1cm4gcG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKCFwbSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAocG0tPnJ1bnRpbWVfaWRsZSkgeworCQlpbnQgcmV0ID0gcG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlwbV9ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCXJldHVybiAwOworfQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2RlZmluZSBwY2lfcG1fcnVudGltZV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfcmVzdW1lCU5VTEwKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfaWRsZQlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2lmZGVmIENPTkZJR19QTV9PUFMKKwogY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGNpX2Rldl9wbV9vcHMgPSB7CiAJLnByZXBhcmUgPSBwY2lfcG1fcHJlcGFyZSwKIAkuY29tcGxldGUgPSBwY2lfcG1fY29tcGxldGUsCkBAIC05NDYsMTUgKzEwNDksMTggQEAKIAkudGhhd19ub2lycSA9IHBjaV9wbV90aGF3X25vaXJxLAogCS5wb3dlcm9mZl9ub2lycSA9IHBjaV9wbV9wb3dlcm9mZl9ub2lycSwKIAkucmVzdG9yZV9ub2lycSA9IHBjaV9wbV9yZXN0b3JlX25vaXJxLAorCS5ydW50aW1lX3N1c3BlbmQgPSBwY2lfcG1fcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IHBjaV9wbV9ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlID0gcGNpX3BtX3J1bnRpbWVfaWRsZSwKIH07CiAKICNkZWZpbmUgUENJX1BNX09QU19QVFIJKCZwY2lfZGV2X3BtX29wcykKIAotI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2Vsc2UgLyogIUNPTUZJR19QTV9PUFMgKi8KIAogI2RlZmluZSBQQ0lfUE1fT1BTX1BUUglOVUxMCiAKLSNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYgLyogIUNPTUZJR19QTV9PUFMgKi8KIAogLyoqCiAgKiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIG5ldyBwY2kgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDMxNWZlYTQuLjViNTQ4YWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fd2FrZXVwLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMjksNiArMjksMTIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcG93ZXJfbmFtZXMpOwogCitpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CitFWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKKworaW50IHBjaV9wY2lfcHJvYmxlbXM7CitFWFBPUlRfU1lNQk9MKHBjaV9wY2lfcHJvYmxlbXMpOworCiB1bnNpZ25lZCBpbnQgcGNpX3BtX2QzX2RlbGF5OwogCiBzdGF0aWMgdm9pZCBwY2lfZGV2X2QzX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0zODAsMTAgKzM4Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwogCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqYmVzdCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpiZXN0ID0gTlVMTCwgKnI7CiAKLQlmb3IoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVzLT5zdGFydCAmJiAhKHJlcy0+c3RhcnQgPj0gci0+c3RhcnQgJiYgcmVzLT5lbmQgPD0gci0+ZW5kKSkKQEAgLTQ1Nyw2ICs0NjIsMTIgQEAKIAkJCXBjaV9wbGF0Zm9ybV9wbS0+c2xlZXBfd2FrZShkZXYsIGVuYWJsZSkgOiAtRU5PREVWOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwbGF0Zm9ybV9wY2lfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIHBjaV9wbGF0Zm9ybV9wbSA/CisJCQlwY2lfcGxhdGZvcm1fcG0tPnJ1bl93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7Cit9CisKIC8qKgogICogcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUgLSBVc2UgUENJIFBNIHJlZ2lzdGVycyB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKQEAgLTExOTAsNiArMTIwMSw2NiBAQAogfQogCiAvKioKKyAqIHBjaV9jaGVja19wbWVfc3RhdHVzIC0gQ2hlY2sgaWYgZ2l2ZW4gZGV2aWNlIGhhcyBnZW5lcmF0ZWQgUE1FLgorICogQGRldjogRGV2aWNlIHRvIGNoZWNrLgorICoKKyAqIENoZWNrIHRoZSBQTUUgc3RhdHVzIG9mIHRoZSBkZXZpY2UgYW5kIGlmIHNldCwgY2xlYXIgaXQgYW5kIGNsZWFyIFBNRSBlbmFibGUKKyAqIChpZiBzZXQpLiAgUmV0dXJuICd0cnVlJyBpZiBQTUUgc3RhdHVzIGFuZCBQTUUgZW5hYmxlIHdlcmUgYm90aCBzZXQgb3IKKyAqICdmYWxzZScgb3RoZXJ3aXNlLgorICovCitib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBtY3NyX3BvczsKKwl1MTYgcG1jc3I7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmICghZGV2LT5wbV9jYXApCisJCXJldHVybiBmYWxzZTsKKworCXBtY3NyX3BvcyA9IGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsICZwbWNzcik7CisJaWYgKCEocG1jc3IgJiBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgUE1FIHN0YXR1cy4gKi8KKwlwbWNzciB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOworCWlmIChwbWNzciAmIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpIHsKKwkJLyogRGlzYWJsZSBQTUUgdG8gYXZvaWQgaW50ZXJydXB0IGZsb29kLiAqLworCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsIHBtY3NyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXAgLSBXYWtlIHVwIGEgUENJIGRldmljZSBpZiBpdHMgUE1FIFN0YXR1cyBiaXQgaXMgc2V0LgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBpZ246IElnbm9yZWQuCisgKgorICogQ2hlY2sgaWYgQGRldiBoYXMgZ2VuZXJhdGVkIFBNRSBhbmQgcXVldWUgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQgaW4gdGhhdAorICogY2FzZS4KKyAqLworc3RhdGljIGludCBwY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pCit7CisJaWYgKHBjaV9jaGVja19wbWVfc3RhdHVzKGRldikpCisJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXBfYnVzIC0gV2FsayBnaXZlbiBidXMgYW5kIHdha2UgdXAgZGV2aWNlcyBvbiBpdCwgaWYgbmVjZXNzYXJ5LgorICogQGJ1czogVG9wIGJ1cyBvZiB0aGUgc3VidHJlZSB0byB3YWxrLgorICovCit2b2lkIHBjaV9wbWVfd2FrZXVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWlmIChidXMpCisJCXBjaV93YWxrX2J1cyhidXMsIHBjaV9wbWVfd2FrZXVwLCBOVUxMKTsKK30KKworLyoqCiAgKiBwY2lfcG1lX2NhcGFibGUgLSBjaGVjayB0aGUgY2FwYWJpbGl0eSBvZiBQQ0kgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgc3RhdGUgZnJvbSB3aGljaCBkZXZpY2Ugd2lsbCBpc3N1ZSBQTUUjLgpAQCAtMTIzMCw5ICsxMzAxLDEwIEBACiB9CiAKIC8qKgotICogcGNpX2VuYWJsZV93YWtlIC0gZW5hYmxlIFBDSSBkZXZpY2UgYXMgd2FrZXVwIGV2ZW50IHNvdXJjZQorICogX19wY2lfZW5hYmxlX3dha2UgLSBlbmFibGUgUENJIGRldmljZSBhcyB3YWtldXAgZXZlbnQgc291cmNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIGFmZmVjdGVkCiAgKiBAc3RhdGU6IFBDSSBzdGF0ZSBmcm9tIHdoaWNoIGRldmljZSB3aWxsIGlzc3VlIHdha2V1cCBldmVudHMKKyAqIEBydW50aW1lOiBUcnVlIGlmIHRoZSBldmVudHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhdCBydW4gdGltZQogICogQGVuYWJsZTogVHJ1ZSB0byBlbmFibGUgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQogICoKICAqIFRoaXMgZW5hYmxlcyB0aGUgZGV2aWNlIGFzIGEgd2FrZXVwIGV2ZW50IHNvdXJjZSwgb3IgZGlzYWJsZXMgaXQuCkBAIC0xMjQ4LDExICsxMzIwLDEyIEBACiAgKiBFcnJvciBjb2RlIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gaXMgcmV0dXJuZWQgaWYgYm90aCB0aGUgcGxhdGZvcm0gYW5kCiAgKiB0aGUgbmF0aXZlIG1lY2hhbmlzbSBmYWlsIHRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB3YWtlLXVwIGV2ZW50cwogICovCi1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSkKK2ludCBfX3BjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJICAgICAgYm9vbCBydW50aW1lLCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChlbmFibGUgJiYgIWRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikpCisJaWYgKGVuYWJsZSAmJiAhcnVudGltZSAmJiAhZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZSBpbiBhIHJvdyBmb3Igb25lIGRldmljZS4gKi8KQEAgLTEyNzIsMTkgKzEzNDUsMjQgQEAKIAkJCXBjaV9wbWVfYWN0aXZlKGRldiwgdHJ1ZSk7CiAJCWVsc2UKIAkJCXJldCA9IDE7Ci0JCWVycm9yID0gcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCB0cnVlKTsKKwkJZXJyb3IgPSBydW50aW1lID8gcGxhdGZvcm1fcGNpX3J1bl93YWtlKGRldiwgdHJ1ZSkgOgorCQkJCQlwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIHRydWUpOwogCQlpZiAocmV0KQogCQkJcmV0ID0gZXJyb3I7CiAJCWlmICghcmV0KQogCQkJZGV2LT53YWtldXBfcHJlcGFyZWQgPSB0cnVlOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3BjaV9zbGVlcF93YWtlKGRldiwgZmFsc2UpOworCQlpZiAocnVudGltZSkKKwkJCXBsYXRmb3JtX3BjaV9ydW5fd2FrZShkZXYsIGZhbHNlKTsKKwkJZWxzZQorCQkJcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCBmYWxzZSk7CiAJCXBjaV9wbWVfYWN0aXZlKGRldiwgZmFsc2UpOwogCQlkZXYtPndha2V1cF9wcmVwYXJlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fcGNpX2VuYWJsZV93YWtlKTsKIAogLyoqCiAgKiBwY2lfd2FrZV9mcm9tX2QzIC0gZW5hYmxlL2Rpc2FibGUgZGV2aWNlIHRvIHdha2UgdXAgZnJvbSBEM19ob3Qgb3IgRDNfY29sZApAQCAtMTM5NCw2ICsxNDcyLDY2IEBACiB9CiAKIC8qKgorICogcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgUENJLXNwZWNpZmljIHBhcnQgb2YgcnVudGltZSBzdXNwZW5kLgorICogQGRldjogUENJIGRldmljZSBiZWluZyBzdXNwZW5kZWQuCisgKgorICogUHJlcGFyZSBAZGV2IHRvIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzIGF0IHJ1biB0aW1lIGFuZCBwdXQgaXQgaW50byBhIGxvdworICogcG93ZXIgc3RhdGUuCisgKi8KK2ludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV9wb3dlcl90IHRhcmdldF9zdGF0ZSA9IHBjaV90YXJnZXRfc3RhdGUoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKKwkJcmV0dXJuIC1FSU87CisKKwlfX3BjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgdHJ1ZSwgcGNpX2Rldl9ydW5fd2FrZShkZXYpKTsKKworCWVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHRhcmdldF9zdGF0ZSk7CisKKwlpZiAoZXJyb3IpCisJCV9fcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlLCBmYWxzZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGNpX2Rldl9ydW5fd2FrZSAtIENoZWNrIGlmIGRldmljZSBjYW4gZ2VuZXJhdGUgcnVuLXRpbWUgd2FrZS11cCBldmVudHMuCisgKiBAZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpdHNlbGYgaXMgY2FiYWJsZSBvZiBnZW5lcmF0aW5nIHdha2UtdXAgZXZlbnRzCisgKiAodGhyb3VnaCB0aGUgcGxhdGZvcm0gb3IgdXNpbmcgdGhlIG5hdGl2ZSBQQ0llIFBNRSkgb3IgaWYgdGhlIGRldmljZSBzdXBwb3J0cworICogUE1FIGFuZCBvbmUgb2YgaXRzIHVwc3RyZWFtIGJyaWRnZXMgY2FuIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzLgorICovCitib29sIHBjaV9kZXZfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisKKwlpZiAoZGV2aWNlX3J1bl93YWtlKCZkZXYtPmRldikpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFkZXYtPnBtZV9zdXBwb3J0KQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoZGV2aWNlX3J1bl93YWtlKCZicmlkZ2UtPmRldikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisKKwkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QgYnVzLiAqLworCWlmIChidXMtPmJyaWRnZSkKKwkJcmV0dXJuIGRldmljZV9ydW5fd2FrZShidXMtPmJyaWRnZSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2X3J1bl93YWtlKTsKKworLyoqCiAgKiBwY2lfcG1faW5pdCAtIEluaXRpYWxpemUgUE0gZnVuY3Rpb25zIG9mIGdpdmVuIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICovCkBAIC0xNDAyLDYgKzE1NDAsNyBAQAogCWludCBwbTsKIAl1MTYgcG1jOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZkZXYtPmRldik7CiAJZGV2LT53YWtldXBfcHJlcGFyZWQgPSBmYWxzZTsKIAlkZXYtPnBtX2NhcCA9IDA7CiAKQEAgLTI2MTUsNiArMjc1NCwyMyBAQAogCXJldHVybiAwOwogfQogCisvKiBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHByb2dyYW1taW5nIHRvIGVuYWJsZSBWR0EgKi8KK3N0YXRpYyBhcmNoX3NldF92Z2Ffc3RhdGVfdCBhcmNoX3NldF92Z2Ffc3RhdGU7CisKK3ZvaWQgX19pbml0IHBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGZ1bmMpCit7CisJYXJjaF9zZXRfdmdhX3N0YXRlID0gZnVuYzsJLyogTlVMTCBkaXNhYmxlcyAqLworfQorCitzdGF0aWMgaW50IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKK3sKKwlpZiAoYXJjaF9zZXRfdmdhX3N0YXRlKQorCQlyZXR1cm4gYXJjaF9zZXRfdmdhX3N0YXRlKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsCisJCQkJCQljaGFuZ2VfYnJpZGdlKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCkBAIC0yNjI4LDkgKzI3ODQsMTUgQEAKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7CiAJdTE2IGNtZDsKKwlpbnQgcmM7CiAKIAlXQVJOX09OKGNvbW1hbmRfYml0cyAmIH4oUENJX0NPTU1BTkRfSU98UENJX0NPTU1BTkRfTUVNT1JZKSk7CiAKKwkvKiBBUkNIIHNwZWNpZmljIFZHQSBlbmFibGVzICovCisJcmMgPSBwY2lfc2V0X3ZnYV9zdGF0ZV9hcmNoKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsIGNoYW5nZV9icmlkZ2UpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKGRlY29kZSA9PSB0cnVlKQogCQljbWQgfD0gY29tbWFuZF9iaXRzOwpAQCAtMjg0NSw2ICszMDA3LDcgQEAKIEVYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfY2FwYWJpbGl0eSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KTsKK0VYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX3NldF92Z2Ffc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcmVsZWFzZV9yZWdpb25zKTsKIEVYUE9SVF9TWU1CT0wocGNpX3JlcXVlc3RfcmVnaW9ucyk7CiBFWFBPUlRfU1lNQk9MKHBjaV9yZXF1ZXN0X3JlZ2lvbnNfZXhjbHVzaXZlKTsKQEAgLTI4NzEsMTAgKzMwMzQsOCBAQAogRVhQT1JUX1NZTUJPTChwY2lfcmVzdG9yZV9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfY2FwYWJsZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfYWN0aXZlKTsKLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV93YWtlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3dha2VfZnJvbV9kMyk7CiBFWFBPUlRfU1lNQk9MKHBjaV90YXJnZXRfc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcHJlcGFyZV90b19zbGVlcCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9iYWNrX2Zyb21fc2xlZXApOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBmYmQwZTNhLi40ZWIxMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMzUsNiArMzUsMTAgQEAKICAqCiAgKiBAc2xlZXBfd2FrZTogZW5hYmxlcy9kaXNhYmxlcyB0aGUgc3lzdGVtIHdha2UgdXAgY2FwYWJpbGl0eSBvZiBnaXZlbiBkZXZpY2UKICAqCisgKiBAcnVuX3dha2U6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHBsYXRmb3JtIHRvIGdlbmVyYXRlIHJ1bi10aW1lIHdha2UtdXAgZXZlbnRzCisgKgkJZm9yIGdpdmVuIGRldmljZSAodGhlIGRldmljZSdzIHdha2UtdXAgY2FwYWJpbGl0eSBoYXMgdG8gYmUKKyAqCQllbmFibGVkIGJ5IEBzbGVlcF93YWtlIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yaykKKyAqCiAgKiBJZiBnaXZlbiBwbGF0Zm9ybSBpcyBnZW5lcmFsbHkgY2FwYWJsZSBvZiBwb3dlciBtYW5hZ2luZyBQQ0kgZGV2aWNlcywgYWxsIG9mCiAgKiB0aGVzZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeS4KICAqLwpAQCAtNDQsMTEgKzQ4LDE2IEBACiAJcGNpX3Bvd2VyX3QgKCpjaG9vc2Vfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWJvb2wgKCpjYW5fd2FrZXVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgKCpzbGVlcF93YWtlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CisJaW50ICgqcnVuX3dha2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIH07CiAKIGV4dGVybiBpbnQgcGNpX3NldF9wbGF0Zm9ybV9wbShzdHJ1Y3QgcGNpX3BsYXRmb3JtX3BtX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIHBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgX19wY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pOworZXh0ZXJuIHZvaWQgcGNpX3BtZV93YWtldXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpX3BtX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9wY2lfd2FrZXVwX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwY2lfYWxsb2NhdGVfY2FwX3NhdmVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKQEAgLTMxOSw2ICszMjgsMTMgQEAKIAlpbnQgKCpyZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKIH07CiAKKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogZXh0ZXJuIGludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpCit7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIERSSVZFUlNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCA1YTBjNmFkLi5iOGI0OTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC00NiwzICs0Niw3IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gZGVidWcgc3VwcG9ydC4gSXQgd2lsbCBhZGQgcGVyLWRldmljZQogCSAgaW50ZXJmYWNlIHRvIGNvbnRyb2wgQVNQTS4KKworY29uZmlnIFBDSUVfUE1FCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUENJRVBPUlRCVVMgJiYgUE1fUlVOVElNRSAmJiBFWFBFUklNRU5UQUwgJiYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKaW5kZXggMTFmNmJiMWUuLmVhNjU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNSBAQAogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIEFFUiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFQUVSKQkJKz0gYWVyLworCitvYmotJChDT05GSUdfUENJRV9QTUUpICs9IHBtZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5MjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUm9vdCBQb3J0IFBNRSBzaWduYWxpbmcgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19QQ0lFX1BNRSkgKz0gcG1lZHJpdmVyLm8KKworcG1lZHJpdmVyLW9ianMgOj0gcGNpZV9wbWUubworcG1lZHJpdmVyLSQoQ09ORklHX0FDUEkpICs9IHBjaWVfcG1lX2FjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzY2JmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBQQ0llIE5hdGl2ZSBQTUUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycAorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgIi4uLy4uL3BjaS5oIgorI2luY2x1ZGUgInBjaWVfcG1lLmgiCisKKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUJMHgxMDAwMCAvKiBQTUUgc3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEFfUEVORElORwkweDIwMDAwIC8qIFBNRSBwZW5kaW5nICovCisKKy8qCisgKiBJZiBzZXQsIHRoaXMgc3dpdGNoIHdpbGwgcHJldmVudCB0aGUgUENJZSByb290IHBvcnQgUE1FIHNlcnZpY2UgZHJpdmVyIGZyb20KKyAqIGJlaW5nIHJlZ2lzdGVyZWQuICBDb25zZXF1ZW50bHksIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHdpbGwKKyAqIG5vdCBiZSB1c2VkIGJ5IGFueSBQQ0llIHJvb3QgcG9ydHMgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9kaXNhYmxlZDsKKworLyoKKyAqIFRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wLCBTZWN0aW9uIDYuMS44LCBzdGF0ZXMgdGhlIGZvbGxvd2luZzoKKyAqICJJbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbm9uLVBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUsIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljIG11c3QgYmUgY29uZmlndXJlZCBieSBmaXJtd2FyZSB0byB1c2UKKyAqIHRoZSBsZWdhY3kgbWVjaGFuaXNtIG9mIHNpZ25hbGluZyBQTUUgYnkgZGVmYXVsdC4gIFBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUgbXVzdCBub3RpZnkgdGhlIGZpcm13YXJlIHByaW9yIHRvIGVuYWJsaW5nIG5hdGl2ZSwgaW50ZXJydXB0LWJhc2VkCisgKiBQTUUgc2lnbmFsaW5nLiIgIEhvd2V2ZXIsIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBhIHN1aXRhYmxlCisgKiBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9yIHRoZSBub3RpZmljYXRpb24gZmFpbHMsIGl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIG9yCisgKiBub3Qgd2UgYXJlIHN1cHBvc2VkIHRvIHVzZSB0aGUgaW50ZXJydXB0LWJhc2VkIFBDSWUgUE1FIHNpZ25hbGluZy4gIFRoZQorICogc3dpdGNoIGJlbG93IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBkZXNpcmVkIGJlaGF2aW91ci4gIFdoZW4gc2V0LCBpdAorICogd2lsbCBtYWtlIHRoZSBrZXJuZWwgdXNlIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBwbGF0Zm9ybSBub3RpZmljYXRpb24gc3RhdHVzLCBhbHRob3VnaCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBub3RpZnkKKyAqIHRoZSBwbGF0Zm9ybSBhbnl3YXkuICBXaGVuIHVuc2V0LCBpdCB3aWxsIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZQorICogdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgaWYgdGhlIHBsYXRmb3JtIG5vdGlmaWNhdGlvbiBmYWlscywKKyAqIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9mb3JjZV9lbmFibGU7CisKKy8qCisgKiBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIE1TSSB3aWxsIG5vdCBiZSB1c2VkIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuICBUaGlzCisgKiBjYXVzZXMgdGhlIFBDSWUgcG9ydCBkcml2ZXIgdG8gdXNlIElOVHggaW50ZXJydXB0cyBvbmx5LCBidXQgaXQgdHVybnMgb3V0CisgKiB0aGF0IHVzaW5nIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUENJZSBQTUUtYmFzZWQKKyAqIHdha2UtdXAgZnJvbSBzeXN0ZW0gc2xlZXAgc3RhdGVzLgorICovCitib29sIHBjaWVfcG1lX21zaV9kaXNhYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgcGNpZV9wbWVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQlwY2llX3BtZV9kaXNhYmxlZCA9IHRydWU7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJmb3JjZSIpKQorCQlwY2llX3BtZV9mb3JjZV9lbmFibGUgPSB0cnVlOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9tc2kiKSkKKwkJcGNpZV9wbWVfbXNpX2Rpc2FibGVkID0gdHJ1ZTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInBjaWVfcG1lPSIsIHBjaWVfcG1lX3NldHVwKTsKKworLyoqCisgKiBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cCAtIEVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgY29udHJvbHMgdGhlIFBDSWUgUE1FLgorICogQHNydjogUENJZSBQTUUgcm9vdCBwb3J0IHNlcnZpY2UgdG8gdXNlIGZvciBjYXJyeWluZyBvdXQgdGhlIGNoZWNrLgorICoKKyAqIE5vdGlmeSB0aGUgcGxhdGZvcm0gdGhhdCB0aGUgbmF0aXZlIFBDSWUgUE1FIGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHJldHVybgorICogJ3RydWUnIGlmIHRoZSBjb250cm9sIG9mIHRoZSBQQ0llIFBNRSByZWdpc3RlcnMgaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUKKyAqIHBsYXRmb3JtLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlpZiAoIXBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzcnYpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gcGNpZV9wbWVfZm9yY2VfZW5hYmxlOworfQorCitzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHBjaWVfZGV2aWNlICpzcnY7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBub2lycTsgLyogRG9uJ3QgZW5hYmxlIHRoZSBQTUUgaW50ZXJydXB0IHVzZWQgYnkgdGhpcyBzZXJ2aWNlLiAqLworfTsKKworLyoqCisgKiBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlIC0gRW5hYmxlL2Rpc2FibGUgUENJZSBQTUUgaW50ZXJydXB0IGdlbmVyYXRpb24uCisgKiBAZGV2OiBQQ0llIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKiBAZW5hYmxlOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWludCBydGN0bF9wb3M7CisJdTE2IHJ0Y3RsOworCisJcnRjdGxfcG9zID0gcGNpX3BjaWVfY2FwKGRldikgKyBQQ0lfRVhQX1JUQ1RMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBydGN0bF9wb3MsICZydGN0bCk7CisJaWYgKGVuYWJsZSkKKwkJcnRjdGwgfD0gUENJX0VYUF9SVENUTF9QTUVJRTsKKwllbHNlCisJCXJ0Y3RsICY9IH5QQ0lfRVhQX1JUQ1RMX1BNRUlFOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJ0Y3RsX3BvcywgcnRjdGwpOworfQorCisvKioKKyAqIHBjaWVfcG1lX2NsZWFyX3N0YXR1cyAtIENsZWFyIHJvb3QgcG9ydCBQTUUgaW50ZXJydXB0IHN0YXR1cy4KKyAqIEBkZXY6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAoZGV2KSArIFBDSV9FWFBfUlRTVEE7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBydHN0YV9wb3MsICZydHN0YSk7CisJcnRzdGEgfD0gUENJX0VYUF9SVFNUQV9QTUU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJ0c3RhX3BvcywgcnRzdGEpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dhbGtfYnVzIC0gU2NhbiBhIFBDSSBidXMgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4uCisgKgorICogU2NhbiBnaXZlbiBQQ0kgYnVzIGFuZCBhbGwgYnVzZXMgdW5kZXIgaXQgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX3dhbGtfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIHJldCA9IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCS8qIFNraXAgUENJZSBkZXZpY2VzIGluIGNhc2Ugd2Ugc3RhcnRlZCBmcm9tIGEgcm9vdCBwb3J0LiAqLworCQlpZiAoIXBjaV9pc19wY2llKGRldikgJiYgcGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJmRldi0+ZGV2KTsKKwkJCXJldCA9IHRydWU7CisJCX0KKworCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSAmJiBwY2llX3BtZV93YWxrX2J1cyhkZXYtPnN1Ym9yZGluYXRlKSkKKwkJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9mcm9tX3BjaV9icmlkZ2UgLSBDaGVjayBpZiBQQ0llLVBDSSBicmlkZ2UgZ2VuZXJhdGVkIGEgUE1FLgorICogQGJ1czogU2Vjb25kYXJ5IGJ1cyBvZiB0aGUgYnJpZGdlLgorICogQGRldmZuOiBEZXZpY2UvZnVuY3Rpb24gbnVtYmVyIHRvIGNoZWNrLgorICoKKyAqIFBNRSBmcm9tIFBDSSBkZXZpY2VzIHVuZGVyIGEgUENJZS1QQ0kgYnJpZGdlIG1heSBiZSBjb252ZXJ0ZWQgdG8gYW4gaW4tYmFuZAorICogUENJZSBQTUUgbWVzc2FnZS4gIEluIHN1Y2ggdGhhdCBjYXNlIHRoZSBicmlkZ2Ugc2hvdWxkIHVzZSB0aGUgUmVxdWVzdGVyIElECisgKiBvZiBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyIDAgb24gaXRzIHNlY29uZGFyeSBidXMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1OCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmIChkZXZmbikKKwkJcmV0dXJuIGZhbHNlOworCisJZGV2ID0gcGNpX2Rldl9nZXQoYnVzLT5zZWxmKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBjaV9pc19wY2llKGRldikgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1BDSV9CUklER0UpIHsKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWlmIChwY2llX3BtZV93YWxrX2J1cyhidXMpKQorCQkJZm91bmQgPSB0cnVlOworCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJfQorCisJcGNpX2Rldl9wdXQoZGV2KTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaGFuZGxlX3JlcXVlc3QgLSBGaW5kIGRldmljZSB0aGF0IGdlbmVyYXRlZCBQTUUgYW5kIGhhbmRsZSBpdC4KKyAqIEBwb3J0OiBSb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSBQTUUgaW50ZXJydXB0LgorICogQHJlcV9pZDogUENJZSBSZXF1ZXN0ZXIgSUQgb2YgdGhlIGRldmljZSB0aGF0IGdlbmVyYXRlZCB0aGUgUE1FLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNpX2RldiAqcG9ydCwgdTE2IHJlcV9pZCkKK3sKKwl1OCBidXNuciA9IHJlcV9pZCA+PiA4LCBkZXZmbiA9IHJlcV9pZCAmIDB4ZmY7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIEZpcnN0LCBjaGVjayBpZiB0aGUgUE1FIGlzIGZyb20gdGhlIHJvb3QgcG9ydCBpdHNlbGYuICovCisJaWYgKHBvcnQtPmRldmZuID09IGRldmZuICYmIHBvcnQtPmJ1cy0+bnVtYmVyID09IGJ1c25yKSB7CisJCWlmIChwY2lfY2hlY2tfcG1lX3N0YXR1cyhwb3J0KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJnBvcnQtPmRldik7CisJCQlmb3VuZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQXBwYXJlbnRseSwgdGhlIHJvb3QgcG9ydCBnZW5lcmF0ZWQgdGhlIFBNRSBvbiBiZWhhbGYKKwkJCSAqIG9mIGEgbm9uLVBDSWUgZGV2aWNlIGRvd25zdHJlYW0uICBJZiB0aGlzIGlzIGRvbmUgYnkKKwkJCSAqIGEgcm9vdCBwb3J0LCB0aGUgUmVxdWVzdGVyIElEIGZpZWxkIGluIGl0cyBzdGF0dXMKKwkJCSAqIHJlZ2lzdGVyIG1heSBjb250YWluIGVpdGhlciB0aGUgcm9vdCBwb3J0J3MsIG9yIHRoZQorCQkJICogc291cmNlIGRldmljZSdzIGluZm9ybWF0aW9uIChQQ0kgRXhwcmVzcyBCYXNlCisJCQkgKiBTcGVjaWZpY2F0aW9uLCBSZXYuIDIuMCwgU2VjdGlvbiA2LjEuOSkuCisJCQkgKi8KKwkJCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCQkJZm91bmQgPSBwY2llX3BtZV93YWxrX2J1cyhwb3J0LT5zdWJvcmRpbmF0ZSk7CisJCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogU2Vjb25kLCBmaW5kIHRoZSBidXMgdGhlIHNvdXJjZSBkZXZpY2UgaXMgb24uICovCisJYnVzID0gcGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIocG9ydC0+YnVzKSwgYnVzbnIpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIE5leHQsIGNoZWNrIGlmIHRoZSBQTUUgaXMgZnJvbSBhIFBDSWUtUENJIGJyaWRnZS4gKi8KKwlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIGRldmZuKTsKKwlpZiAoZm91bmQpCisJCWdvdG8gb3V0OworCisJLyogRmluYWxseSwgdHJ5IHRvIGZpbmQgdGhlIFBNRSBzb3VyY2Ugb24gdGhlIGJ1cy4gKi8KKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX2Rldl9nZXQoZGV2KTsKKwkJaWYgKGRldi0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKworCWlmIChmb3VuZCkgeworCQkvKiBUaGUgZGV2aWNlIGlzIHRoZXJlLCBidXQgd2UgaGF2ZSB0byBjaGVjayBpdHMgUE1FIHN0YXR1cy4gKi8KKwkJZm91bmQgPSBwY2lfY2hlY2tfcG1lX3N0YXR1cyhkZXYpOworCQlpZiAoZm91bmQpCisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQlwY2lfZGV2X3B1dChkZXYpOworCX0gZWxzZSBpZiAoZGV2Zm4pIHsKKwkJLyoKKwkJICogVGhlIGRldmljZSBpcyBub3QgdGhlcmUsIGJ1dCB3ZSBjYW4gc3RpbGwgdHJ5IHRvIHJlY292ZXIgYnkKKwkJICogYXNzdW1pbmcgdGhhdCB0aGUgUE1FIHdhcyByZXBvcnRlZCBieSBhIFBDSWUtUENJIGJyaWRnZSB0aGF0CisJCSAqIHVzZWQgZGV2Zm4gZGlmZmVyZW50IGZyb20gemVyby4KKwkJICovCisJCWRldl9kYmcoJnBvcnQtPmRldiwgIlBNRSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGZvciAiCisJCQkibm9uLWV4aXN0ZW50IGRldmljZSAlMDJ4OiUwMnguJWRcbiIsCisJCQlidXNuciwgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOworCQlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIDApOworCX0KKworIG91dDoKKwlpZiAoIWZvdW5kKQorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJTcHVyaW91cyBuYXRpdmUgUE1FIGludGVycnVwdCFcbiIpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dvcmtfZm4gLSBXb3JrIGhhbmRsZXIgZm9yIFBDSWUgUE1FIGludGVycnVwdC4KKyAqIEB3b3JrOiBXb3JrIHN0cnVjdHVyZSBnaXZpbmcgYWNjZXNzIHRvIHNlcnZpY2UgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YSA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSwgd29yayk7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBkYXRhLT5zcnYtPnBvcnQ7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlmb3IgKDs7KSB7CisJCWlmIChkYXRhLT5ub2lycSkKKwkJCWJyZWFrOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwb3J0LCBydHN0YV9wb3MsICZydHN0YSk7CisJCWlmIChydHN0YSAmIFBDSV9FWFBfUlRTVEFfUE1FKSB7CisJCQkvKgorCQkJICogQ2xlYXIgUE1FIHN0YXR1cyBvZiB0aGUgcG9ydC4gIElmIHRoZXJlIGFyZSBvdGhlcgorCQkJICogcGVuZGluZyBQTUVzLCB0aGUgc3RhdHVzIHdpbGwgYmUgc2V0IGFnYWluLgorCQkJICovCisJCQlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJCQlwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChwb3J0LCBydHN0YSAmIDB4ZmZmZik7CisJCQlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBuZWVkIHRvIGxvb3AgaWYgdGhlcmUgYXJlIG5vIG1vcmUgUE1FcyBwZW5kaW5nLiAqLworCQlpZiAoIShydHN0YSAmIFBDSV9FWFBfUlRTVEFfUEVORElORykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCQljcHVfcmVsYXgoKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJfQorCisJaWYgKCFkYXRhLT5ub2lycSkKKwkJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaXJxIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIFBDSWUgcm9vdCBwb3J0IFBNRSBpbnRlcnJ1cHQuCisgKiBAaXJxOiBJbnRlcnJ1cHQgdmVjdG9yLgorICogQGNvbnRleHQ6IEludGVycnVwdCBjb250ZXh0IHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2llX3BtZV9pcnEoaW50IGlycSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydDsKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhOworCWludCBydHN0YV9wb3M7CisJdTMyIHJ0c3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb3J0ID0gKChzdHJ1Y3QgcGNpZV9kZXZpY2UgKiljb250ZXh0KS0+cG9ydDsKKwlkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YSgoc3RydWN0IHBjaWVfZGV2aWNlICopY29udGV4dCk7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocG9ydCwgcnRzdGFfcG9zLCAmcnRzdGEpOworCisJaWYgKCEocnRzdGEgJiBQQ0lfRVhQX1JUU1RBX1BNRSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgZG9uJ3QgdXNlIHBtX3dxLCBiZWNhdXNlIGl0J3MgZnJlZXphYmxlLiAqLworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBjaWVfcG1lX3NldF9uYXRpdmUgLSBTZXQgdGhlIFBNRSBpbnRlcnJ1cHQgZmxhZyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCisgKiBAaWduOiBJZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3NldF9uYXRpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKQoreworCWRldl9pbmZvKCZkZXYtPmRldiwgIlNpZ25hbGluZyBQTUUgdGhyb3VnaCBQQ0llIFBNRSBpbnRlcnJ1cHRcbiIpOworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIHRydWUpOworCWRldi0+cG1lX2ludGVycnVwdCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfbWFya19kZXZpY2VzIC0gU2V0IHRoZSBQTUUgaW50ZXJydXB0IGZsYWcgZm9yIGRldmljZXMgYmVsb3cgYSBwb3J0LgorICogQHBvcnQ6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3RvciB0byBoYW5kbGUuCisgKgorICogRm9yIGVhY2ggZGV2aWNlIGJlbG93IGdpdmVuIHJvb3QgcG9ydCwgaW5jbHVkaW5nIHRoZSBwb3J0IGl0c2VsZiAob3IgZm9yIGVhY2gKKyAqIHJvb3QgY29tcGxleCBpbnRlZ3JhdGVkIGVuZHBvaW50IGlmIEBwb3J0IGlzIGEgcm9vdCBjb21wbGV4IGV2ZW50IGNvbGxlY3RvcikKKyAqIHNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgY2FuIHNpZ25hbCBydW4tdGltZSB3YWtlLXVwIGV2ZW50cyB2aWEgUENJZQorICogUE1FIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX21hcmtfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcG9ydCkKK3sKKwlwY2llX3BtZV9zZXRfbmF0aXZlKHBvcnQsIE5VTEwpOworCWlmIChwb3J0LT5zdWJvcmRpbmF0ZSkgeworCQlwY2lfd2Fsa19idXMocG9ydC0+c3Vib3JkaW5hdGUsIHBjaWVfcG1lX3NldF9uYXRpdmUsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBwb3J0LT5idXM7CisJCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHJvb3QgcG9ydCBldmVudCBjb2xsZWN0b3IuICovCisJCWlmIChwb3J0LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JDX0VDIHx8ICFidXMpCisJCQlyZXR1cm47CisKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJCWlmIChwY2lfaXNfcGNpZShkZXYpCisJCQkgICAgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JDX0VORCkKKwkJCQlwY2llX3BtZV9zZXRfbmF0aXZlKGRldiwgTlVMTCk7CisJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwl9Cit9CisKKy8qKgorICogcGNpZV9wbWVfcHJvYmUgLSBJbml0aWFsaXplIFBDSWUgUE1FIHNlcnZpY2UgZm9yIGdpdmVuIHJvb3QgcG9ydC4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSB0byBpbml0aWFsaXplLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKworCWlmICghcGNpZV9wbWVfcGxhdGZvcm1fc2V0dXAoc3J2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcGNpZV9wbWVfd29ya19mbik7CisJZGF0YS0+c3J2ID0gc3J2OworCXNldF9zZXJ2aWNlX2RhdGEoc3J2LCBkYXRhKTsKKworCXBvcnQgPSBzcnYtPnBvcnQ7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHBvcnQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoc3J2LT5pcnEsIHBjaWVfcG1lX2lycSwgSVJRRl9TSEFSRUQsICJQQ0llIFBNRSIsIHNydik7CisJaWYgKHJldCkgeworCQlrZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQlwY2llX3BtZV9tYXJrX2RldmljZXMocG9ydCk7CisJCXBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUocG9ydCwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9zdXNwZW5kIC0gU3VzcGVuZCBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZS4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSBkZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBwY2llX3BtZV9zdXNwZW5kKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGEgPSBnZXRfc2VydmljZV9kYXRhKHNydik7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBzcnYtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJZGF0YS0+bm9pcnEgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlzeW5jaHJvbml6ZV9pcnEoc3J2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVzdW1lIC0gUmVzdW1lIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlLgorICogQHNydiAtIFBDSWUgc2VydmljZSBkZXZpY2UgdG8gcmVzdW1lLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Jlc3VtZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YShzcnYpOworCXN0cnVjdCBwY2lfZGV2ICpwb3J0ID0gc3J2LT5wb3J0OworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJZGF0YS0+bm9pcnEgPSBmYWxzZTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVtb3ZlIC0gUHJlcGFyZSBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZSBmb3IgcmVtb3ZhbC4KKyAqIEBzcnYgLSBQQ0llIHNlcnZpY2UgZGV2aWNlIHRvIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXBjaWVfcG1lX3N1c3BlbmQoc3J2KTsKKwlmcmVlX2lycShzcnYtPmlycSwgc3J2KTsKKwlrZnJlZShnZXRfc2VydmljZV9kYXRhKHNydikpOworfQorCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBwY2llX3BtZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBjaWVfcG1lIiwKKwkucG9ydF90eXBlIAk9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQsCisJLnNlcnZpY2UgCT0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FLAorCisJLnByb2JlCQk9IHBjaWVfcG1lX3Byb2JlLAorCS5zdXNwZW5kCT0gcGNpZV9wbWVfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaWVfcG1lX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHBjaWVfcG1lX3JlbW92ZSwKK307CisKKy8qKgorICogcGNpZV9wbWVfc2VydmljZV9pbml0IC0gUmVnaXN0ZXIgdGhlIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwY2llX3BtZV9zZXJ2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfZGlzYWJsZWQgPworCQktRU5PREVWIDogcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJnBjaWVfcG1lX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaWVfcG1lX3NlcnZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaAorICoKKyAqIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBQTUUgc2lnbmFsaW5nIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqLworCisjaWZuZGVmIF9QQ0lFX1BNRV9IXworI2RlZmluZSBfUENJRV9QTUVfSF8KKworc3RydWN0IHBjaWVfZGV2aWNlOworCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBpbnQgcGNpZV9wbWVfYWNwaV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlyZXR1cm4gcGNpZV9wbWVfYWNwaV9zZXR1cChzcnYpOworfQorI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCitzdGF0aWMgaW5saW5lIGludCBwY2llX3BtZV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIUNPTkZJR19BQ1BJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIFBDSWUgTmF0aXZlIFBNRSBzdXBwb3J0LCBBQ1BJLXJlbGF0ZWQgcGFydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisKKy8qKgorICogcGNpZV9wbWVfYWNwaV9zZXR1cCAtIFJlcXVlc3QgdGhlIEFDUEkgQklPUyB0byByZWxlYXNlIGNvbnRyb2wgb3ZlciBQQ0llIFBNRS4KKyAqIEBzcnYgLSBQQ0llIFBNRSBzZXJ2aWNlIGZvciBhIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKgorICogSW52b2tlZCB3aGVuIHRoZSBQQ0llIGJ1cyB0eXBlIGxvYWRzIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLiAgVG8gYXZvaWQKKyAqIGNvbmZsaWN0IHdpdGggdGhlIEJJT1MgUENJZSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBCSU9TIHRvIHlpZWxkIFBDSWUgUE1FCisgKiBjb250cm9sIHRvIHRoZSBrZXJuZWwuCisgKi8KK2ludCBwY2llX3BtZV9hY3BpX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IHNydi0+cG9ydDsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGVycm9yID0gMDsKKworCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiUmVxdWVzdGluZyBjb250cm9sIG9mIFBDSWUgUE1FIGZyb20gQUNQSSBCSU9TXG4iKTsKKworCWhhbmRsZSA9IGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUocG9ydCk7CisJaWYgKCFoYW5kbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKKwkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CisJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZGV2X2luZm8oJnBvcnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVjZWl2ZSBjb250cm9sIG9mIFBDSWUgUE1FIHNlcnZpY2U6ICVzXG4iLAorCQkJKHN0YXR1cyA9PSBBRV9TVVBQT1JUIHx8IHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8KKwkJCSJubyBfT1NDIHN1cHBvcnQiIDogIkFDUEkgX09TQyBmYWlsZWQiKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggYWFlYjlkMi4uODEzYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTMwLDQgKzMwLDIxIEBACiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2J1c191bnJlZ2lzdGVyKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1BDSUVfUE1FCitleHRlcm4gYm9vbCBwY2llX3BtZV9tc2lfZGlzYWJsZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX3BtZV9kaXNhYmxlX21zaSh2b2lkKQoreworCXBjaWVfcG1lX21zaV9kaXNhYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3BtZV9ub19tc2kodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfbXNpX2Rpc2FibGVkOworfQorI2Vsc2UgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaWVfcG1lX2Rpc2FibGVfbXNpKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV9wbWVfbm9fbXNpKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworCiAjZW5kaWYgLyogX1BPUlREUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IGIxNzQxODguLmU3M2VmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTg2LDE2ICsxODYsMjQgQEAKICAqLwogc3RhdGljIGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKmlycXMsIGludCBtYXNrKQogewotCWludCBpLCBpcnE7CisJaW50IGksIGlycSA9IC0xOworCisJLyogV2UgaGF2ZSB0byB1c2UgSU5UeCBpZiBNU0kgY2Fubm90IGJlIHVzZWQgZm9yIFBDSWUgUE1FLiAqLworCWlmICgobWFzayAmIFBDSUVfUE9SVF9TRVJWSUNFX1BNRSkgJiYgcGNpZV9wbWVfbm9fbXNpKCkpIHsKKwkJaWYgKGRldi0+cGluKQorCQkJaXJxID0gZGV2LT5pcnE7CisJCWdvdG8gbm9fbXNpOworCX0KIAogCS8qIFRyeSB0byB1c2UgTVNJLVggaWYgc3VwcG9ydGVkICovCiAJaWYgKCFwY2llX3BvcnRfZW5hYmxlX21zaXgoZGV2LCBpcnFzLCBtYXNrKSkKIAkJcmV0dXJuIDA7CisKIAkvKiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sgdG8gSU5UeCAqLwotCWlycSA9IC0xOwogCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSB8fCBkZXYtPnBpbikKIAkJaXJxID0gZGV2LT5pcnE7CiAKKyBub19tc2k6CiAJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKIAkJaXJxc1tpXSA9IGlycTsKIAlpcnFzW1BDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUXSA9IC0xOwpAQCAtMjc3LDYgKzI4NSw3IEBACiAJCSAgICAgcGNpX25hbWUocGRldiksCiAJCSAgICAgZ2V0X2Rlc2NyaXB0b3JfaWQocGRldi0+cGNpZV90eXBlLCBzZXJ2aWNlKSk7CiAJZGV2aWNlLT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChkZXZpY2UpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCAxM2M4OTcyLi4xMjdlOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlICJwb3J0ZHJ2LmgiCiAjaW5jbHVkZSAiYWVyL2FlcmRydi5oIgpAQCAtMjczLDEwICsyNzQsMzYgQEAKIAkuZHJpdmVyLnBtIAk9IFBDSUVfUE9SVERSVl9QTV9PUFMsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJfbm90aWNlKCIlcyBkZXRlY3RlZDogd2lsbCBub3QgdXNlIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nXG4iLAorCQkJZC0+aWRlbnQpOworCXBjaWVfcG1lX2Rpc2FibGVfbXNpKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHBjaWVfcG9ydGRydl9kbWlfdGFibGVbXSA9IHsKKwkvKgorCSAqIEJveGVzIHRoYXQgc2hvdWxkIG5vdCB1c2UgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2ksCisJIC5pZGVudCA9ICJNU0kgV2luZCBVLTEwMCIsCisJIC5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJICAgICAJCSJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLCBMVEQiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlUtMTAwIiksCisJCSAgICAgfSwKKwkgfSwKKwkge30KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAorCWRtaV9jaGVja19zeXN0ZW0ocGNpZV9wb3J0ZHJ2X2RtaV90YWJsZSk7CisKIAlyZXR2YWwgPSBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0lFOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggNDQ2ZTRhOS4uMmE5NDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC04OSw2ICs4OSw3IEBACiAKIAlpZiAocGNpX2J1cy0+YnJpZGdlKQogCQlwdXRfZGV2aWNlKHBjaV9idXMtPmJyaWRnZSk7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHBjaV9idXMpOwogCWtmcmVlKHBjaV9idXMpOwogfQogCkBAIC0yODEsMjYgKzI4MiwxMiBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1OCBpb19iYXNlX2xvLCBpb19saW1pdF9sbzsKLQl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpOwotCi0JaWYgKHBjaV9pc19yb290X2J1cyhjaGlsZCkpCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdJXNcbiIsCi0JCSBjaGlsZC0+c2Vjb25kYXJ5LCBjaGlsZC0+c3Vib3JkaW5hdGUsCi0JCSBkZXYtPnRyYW5zcGFyZW50ID8gIiAoc3VidHJhY3RpdmUgZGVjb2RlKSI6ICIiKTsKLQotCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7Ci0JCWZvcihpID0gMzsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKQotCQkJY2hpbGQtPnJlc291cmNlW2ldID0gY2hpbGQtPnBhcmVudC0+cmVzb3VyY2VbaSAtIDNdOwotCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVswXTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JT19CQVNFLCAmaW9fYmFzZV9sbyk7CkBAIC0zMTYsMjYgKzMwMyw1MCBAQAogCQlsaW1pdCB8PSAoaW9fbGltaXRfaGkgPDwgMTYpOwogCX0KIAotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKGlvX2Jhc2VfbG8gJiBQQ0lfSU9fUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfSU87CiAJCWlmICghcmVzLT5zdGFydCkKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkgIiAgYnJpZGdlIHdpbmRvdyBbaW8gICUwNGx4IC0gJTA0bHhdIHJlZyByZWFkaW5nXG4iLAorCQkJCSBiYXNlLCBsaW1pdCk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9CQVNFLCAmbWVtX2Jhc2VfbG8pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9MSU1JVCwgJm1lbV9saW1pdF9sbyk7CiAJYmFzZSA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfTUFTSykgPDwgMTY7CiAJbGltaXQgPSAobWVtX2xpbWl0X2xvICYgUENJX01FTU9SWV9SQU5HRV9NQVNLKSA8PCAxNjsKLQlpZiAoYmFzZSA8PSBsaW1pdCkgeworCWlmIChiYXNlICYmIGJhc2UgPD0gbGltaXQpIHsKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSIgIGJyaWRnZSB3aW5kb3cgW21lbSAweCUwOGx4IC0gMHglMDhseF0gcmVnIHJlYWRpbmdcbiIsCisJCQkJCSBiYXNlLCBsaW1pdCArIDB4ZmZmZmYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9tbWlvX3ByZWYoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CkBAIC0zNjYsNyArMzc3LDcgQEAKICNlbmRpZgogCQl9CiAJfQotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSB8CiAJCQkJCSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCWlmIChyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKQEAgLTM3NCw2ICszODUsNDQgQEAKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCSAgICAgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4JTA4bHggLSAlMDhseCBwcmVmXSByZWcgcmVhZGluZ1xuIiwKKwkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CisJfQorfQorCit2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWlmIChwY2lfaXNfcm9vdF9idXMoY2hpbGQpKQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLworCQlyZXR1cm47CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XSVzXG4iLAorCQkgY2hpbGQtPnNlY29uZGFyeSwgY2hpbGQtPnN1Ym9yZGluYXRlLAorCQkgZGV2LT50cmFuc3BhcmVudCA/ICIgKHN1YnRyYWN0aXZlIGRlY29kZSkiIDogIiIpOworCisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGNoaWxkKTsKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykKKwkJY2hpbGQtPnJlc291cmNlW2ldID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CisKKwlwY2lfcmVhZF9icmlkZ2VfaW8oY2hpbGQpOworCXBjaV9yZWFkX2JyaWRnZV9tbWlvKGNoaWxkKTsKKwlwY2lfcmVhZF9icmlkZ2VfbW1pb19wcmVmKGNoaWxkKTsKKworCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7CisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoY2hpbGQtPnBhcmVudCwgcmVzLCBpKSB7CisJCQlpZiAocmVzKSB7CisJCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoY2hpbGQsIHJlcywKKwkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJCSAgICIgIGJyaWRnZSB3aW5kb3cgJXBSIChzdWJ0cmFjdGl2ZSBkZWNvZGUpXG4iLAorCQkJCQkgICByZXMpOworCQkJfQorCQl9CiAJfQogfQogCkBAIC0zODcsMTAgKzQzNiwxNDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmNoaWxkcmVuKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmRldmljZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+c2xvdHMpOworCQlJTklUX0xJU1RfSEVBRCgmYi0+cmVzb3VyY2VzKTsKKwkJYi0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCQliLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCXJldHVybiBiOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBwY2l4X2J1c19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYLAkJLyogMSAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWCwJCS8qIDIgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVgsCQkvKiAzICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA0ICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDLAkvKiA1ICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQywJLyogNiAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MsCS8qIDcgKi8KKwlQQ0lfU1BFRURfVU5LTk9XTiwJCS8qIDggKi8KKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYsCS8qIDkgKi8KKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2LAkvKiBBICovCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NiwJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMywJLyogRCAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMsCS8qIEUgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCS8qIEYgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBjaWVfbGlua19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSUVfU1BFRURfMl81R1QsCQkvKiAxICovCisJUENJRV9TUEVFRF81XzBHVCwJCS8qIDIgKi8KKwlQQ0lFX1NQRUVEXzhfMEdULAkJLyogMyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRSAqLworCVBDSV9TUEVFRF9VTktOT1dOCQkvKiBGICovCit9OworCit2b2lkIHBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdTE2IGxpbmtzdGEpCit7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtzdGEgJiAweGZdOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpZV91cGRhdGVfbGlua19zcGVlZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFncF9zcGVlZHNbXSA9IHsKKwlBR1BfVU5LTk9XTiwKKwlBR1BfMVgsCisJQUdQXzJYLAorCUFHUF80WCwKKwlBR1BfOFgKK307CisKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgYWdwX3NwZWVkKGludCBhZ3AzLCBpbnQgYWdwc3RhdCkKK3sKKwlpbnQgaW5kZXggPSAwOworCisJaWYgKGFncHN0YXQgJiA0KQorCQlpbmRleCA9IDM7CisJZWxzZSBpZiAoYWdwc3RhdCAmIDIpCisJCWluZGV4ID0gMjsKKwllbHNlIGlmIChhZ3BzdGF0ICYgMSkKKwkJaW5kZXggPSAxOworCWVsc2UKKwkJZ290byBvdXQ7CisJCisJaWYgKGFncDMpIHsKKwkJaW5kZXggKz0gMjsKKwkJaWYgKGluZGV4ID09IDUpCisJCQlpbmRleCA9IDA7CisJfQorCisgb3V0OgorCXJldHVybiBhZ3Bfc3BlZWRzW2luZGV4XTsKK30KKworCitzdGF0aWMgdm9pZCBwY2lfc2V0X2J1c19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUCk7CisJaWYgKCFwb3MpCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUDMpOworCWlmIChwb3MpIHsKKwkJdTMyIGFncHN0YXQsIGFncGNtZDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX1NUQVRVUywgJmFncHN0YXQpOworCQlidXMtPm1heF9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncHN0YXQgJiA3KTsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX0NPTU1BTkQsICZhZ3BjbWQpOworCQlidXMtPmN1cl9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncGNtZCAmIDcpOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX1BDSVgpOworCWlmIChwb3MpIHsKKwkJdTE2IHN0YXR1czsKKwkJZW51bSBwY2lfYnVzX3NwZWVkIG1heDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyAyLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CisJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIDB4NDAwMCkgeworCQkJbWF4ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAweDAwMDIpIHsKKwkJCWlmICgoKHN0YXR1cyA+PiAxMikgJiAweDMpID09IDIpIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQkJfSBlbHNlIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCQl9CisJCX0gZWxzZSB7CisJCQltYXggPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJfQorCisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IG1heDsKKwkJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpeF9idXNfc3BlZWRbKHN0YXR1cyA+PiA2KSAmIDB4Zl07CisKKwkJcmV0dXJuOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKHBvcykgeworCQl1MzIgbGlua2NhcDsKKwkJdTE2IGxpbmtzdGE7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktDQVAsICZsaW5rY2FwKTsKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtjYXAgJiAweGZdOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktTVEEsICZsaW5rc3RhKTsKKwkJcGNpZV91cGRhdGVfbGlua19zcGVlZChidXMsIGxpbmtzdGEpOworCX0KK30KKworCiBzdGF0aWMgc3RydWN0IHBjaV9idXMgKnBjaV9hbGxvY19jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwKIAkJCQkJICAgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGJ1c25yKQogewpAQCAtNDMwLDYgKzYxNiw4IEBACiAJY2hpbGQtPnNlbGYgPSBicmlkZ2U7CiAJY2hpbGQtPmJyaWRnZSA9IGdldF9kZXZpY2UoJmJyaWRnZS0+ZGV2KTsKIAorCXBjaV9zZXRfYnVzX3NwZWVkKGNoaWxkKTsKKwogCS8qIFNldCB1cCBkZWZhdWx0IHJlc291cmNlIHBvaW50ZXJzIGFuZCBuYW1lcy4uICovCiAJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspIHsKIAkJY2hpbGQtPnJlc291cmNlW2ldID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CkBAIC0xMDgxLDYgKzEyNjksNDUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX3NjYW5fc2luZ2xlX2RldmljZSk7CiAKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X2FyaV9mbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBmbikKK3sKKwl1MTYgY2FwOworCXVuc2lnbmVkIHBvcywgbmV4dF9mbjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIDA7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyA0LCAmY2FwKTsKKwluZXh0X2ZuID0gY2FwID4+IDg7CisJaWYgKG5leHRfZm4gPD0gZm4pCisJCXJldHVybiAwOworCXJldHVybiBuZXh0X2ZuOworfQorCitzdGF0aWMgdW5zaWduZWQgbmV4dF90cmFkX2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXJldHVybiAoZm4gKyAxKSAlIDg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBub19uZXh0X2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9ubHlfb25lX2NoaWxkKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy0+c2VsZjsKKwlpZiAoIXBhcmVudCB8fCAhcGNpX2lzX3BjaWUocGFyZW50KSkKKwkJcmV0dXJuIDA7CisJaWYgKHBhcmVudC0+cGNpZV90eXBlID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgfHwKKwkgICAgcGFyZW50LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX0RPV05TVFJFQU0pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAvKioKICAqIHBjaV9zY2FuX3Nsb3QgLSBzY2FuIGEgUENJIHNsb3Qgb24gYSBidXMgZm9yIGRldmljZXMuCiAgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4KQEAgLTEwOTQsMjEgKzEzMjEsMzAgQEAKICAqLwogaW50IHBjaV9zY2FuX3Nsb3Qoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKQogewotCWludCBmbiwgbnIgPSAwOworCXVuc2lnbmVkIGZuLCBuciA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl1bnNpZ25lZCAoKm5leHRfZm4pKHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkKSA9IG5vX25leHRfZm47CisKKwlpZiAob25seV9vbmVfY2hpbGQoYnVzKSAmJiAoZGV2Zm4gPiAwKSkKKwkJcmV0dXJuIDA7IC8qIEFscmVhZHkgc2Nhbm5lZCB0aGUgZW50aXJlIHNsb3QgKi8KIAogCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbik7Ci0JaWYgKGRldiAmJiAhZGV2LT5pc19hZGRlZCkJLyogbmV3IGRldmljZT8gKi8KKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisJaWYgKCFkZXYtPmlzX2FkZGVkKQogCQlucisrOwogCi0JaWYgKGRldiAmJiBkZXYtPm11bHRpZnVuY3Rpb24pIHsKLQkJZm9yIChmbiA9IDE7IGZuIDwgODsgZm4rKykgewotCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOwotCQkJaWYgKGRldikgewotCQkJCWlmICghZGV2LT5pc19hZGRlZCkKLQkJCQkJbnIrKzsKLQkJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwotCQkJfQorCWlmIChwY2lfYXJpX2VuYWJsZWQoYnVzKSkKKwkJbmV4dF9mbiA9IG5leHRfYXJpX2ZuOworCWVsc2UgaWYgKGRldi0+bXVsdGlmdW5jdGlvbikKKwkJbmV4dF9mbiA9IG5leHRfdHJhZF9mbjsKKworCWZvciAoZm4gPSBuZXh0X2ZuKGRldiwgMCk7IGZuID4gMDsgZm4gPSBuZXh0X2ZuKGRldiwgZm4pKSB7CisJCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbiArIGZuKTsKKwkJaWYgKGRldikgeworCQkJaWYgKCFkZXYtPmlzX2FkZGVkKQorCQkJCW5yKys7CisJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwogCQl9CiAJfQogCkBAIC0xMjAwLDYgKzE0MzYsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBkZXZfcmVnX2VycjsKIAliLT5icmlkZ2UgPSBnZXRfZGV2aWNlKGRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGItPmJyaWRnZSk7CiAKIAlpZiAoIXBhcmVudCkKIAkJc2V0X2Rldl9ub2RlKGItPmJyaWRnZSwgcGNpYnVzX3RvX25vZGUoYikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCBkNThiOTQwLi4wMzllODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtMjUsMTQgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KICNpbmNsdWRlICJwY2kuaCIKIAotaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwotRVhQT1JUX1NZTUJPTChpc2FfZG1hX2JyaWRnZV9idWdneSk7Ci1pbnQgcGNpX3BjaV9wcm9ibGVtczsKLUVYUE9SVF9TWU1CT0wocGNpX3BjaV9wcm9ibGVtcyk7Ci0KLSNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogLyoKICAqIFRoaXMgcXVpcmsgZnVuY3Rpb24gZGlzYWJsZXMgbWVtb3J5IGRlY29kaW5nIGFuZCByZWxlYXNlcyBtZW1vcnkgcmVzb3VyY2VzCiAgKiBvZiB0aGUgZGV2aWNlIHNwZWNpZmllZCBieSBrZXJuZWwncyBib290IHBhcmFtZXRlciAncGNpPXJlc291cmNlX2FsaWdubWVudD0nLgpAQCAtMjUzNCw2ICsyNTI5LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxNTBhLCBxdWlya19pODI1NzZfc3Jpb3YpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTUwZCwgcXVpcmtfaTgyNTc2X3NyaW92KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDE1MTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7CiAKICNlbmRpZgkvKiBDT05GSUdfUENJX0lPViAqLwogCkBAIC0yNjEyLDYgKzI2MDgsNyBAQAogCX0KIAlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7CiB9CitFWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfYXBwbHlfZmluYWxfcXVpcmtzKHZvaWQpCiB7CkBAIC0yNzIzLDkgKzI3MjAsMyBAQAogCiAJcmV0dXJuIC1FTk9UVFk7CiB9Ci0KLSNlbHNlCi12b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQotaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKSB7IHJldHVybiAtRU5PVFRZOyB9Ci0jZW5kaWYKLUVYUE9SVF9TWU1CT0wocGNpX2ZpeHVwX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IGM0OGNkMzcuLjRmZTM2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yNywzNyArMjcsOTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKLXN0YXRpYyB2b2lkIHBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2Oworc3RydWN0IHJlc291cmNlX2xpc3RfeCB7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbmV4dDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBoZWFkLCAqbGlzdCwgKnRtcDsKLQlpbnQgaWR4OworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OworCXJlc291cmNlX3NpemVfdCBlbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CiAKLQloZWFkLm5leHQgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CitzdGF0aWMgdm9pZCBhZGRfdG9fZmFpbGVkX2xpc3Qoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqaGVhZCwKKwkJCQkgc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbGlzdCA9IGhlYWQ7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbG4gPSBsaXN0LT5uZXh0OworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKnRtcDsKIAotCQkvKiBEb24ndCB0b3VjaCBjbGFzc2xlc3MgZGV2aWNlcyBvciBob3N0IGJyaWRnZXMgb3IgaW9hcGljcy4gICovCi0JCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwKLQkJICAgIGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfSE9TVCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIERvbid0IHRvdWNoIGlvYXBpYyBkZXZpY2VzIGFscmVhZHkgZW5hYmxlZCBieSBmaXJtd2FyZSAqLwotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKLQkJCXUxNiBjb21tYW5kOwotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOwotCQkJaWYgKGNvbW1hbmQgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcGRldl9zb3J0X3Jlc291cmNlcyhkZXYsICZoZWFkKTsKKwl0bXAgPSBrbWFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXApIHsKKwkJcHJfd2FybmluZygiYWRkX3RvX2ZhaWxlZF9saXN0OiBrbWFsbG9jKCkgZmFpbGVkIVxuIik7CisJCXJldHVybjsKIAl9CiAKLQlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJdG1wLT5uZXh0ID0gbG47CisJdG1wLT5yZXMgPSByZXM7CisJdG1wLT5kZXYgPSBkZXY7CisJdG1wLT5zdGFydCA9IHJlcy0+c3RhcnQ7CisJdG1wLT5lbmQgPSByZXMtPmVuZDsKKwl0bXAtPmZsYWdzID0gcmVzLT5mbGFnczsKKwlsaXN0LT5uZXh0ID0gdG1wOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbGlzdCwgKnRtcDsKKworCWZvciAobGlzdCA9IGhlYWQtPm5leHQ7IGxpc3Q7KSB7CisJCXRtcCA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlrZnJlZSh0bXApOworCX0KKworCWhlYWQtPm5leHQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2Rldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCkKK3sKKwl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CisKKwkvKiBEb24ndCB0b3VjaCBjbGFzc2xlc3MgZGV2aWNlcyBvciBob3N0IGJyaWRnZXMgb3IgaW9hcGljcy4gICovCisJaWYgKGNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCB8fCBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCisJCXJldHVybjsKKworCS8qIERvbid0IHRvdWNoIGlvYXBpYyBkZXZpY2VzIGFscmVhZHkgZW5hYmxlZCBieSBmaXJtd2FyZSAqLworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfU1lTVEVNX1BJQykgeworCQl1MTYgY29tbWFuZDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSkpCisJCQlyZXR1cm47CisJfQorCisJcGRldl9zb3J0X3Jlc291cmNlcyhkZXYsIGhlYWQpOworfQorCitzdGF0aWMgdm9pZCBfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHJlc291cmNlX2xpc3QgKmxpc3QsICp0bXA7CisJaW50IGlkeDsKKworCWZvciAobGlzdCA9IGhlYWQtPm5leHQ7IGxpc3Q7KSB7CiAJCXJlcyA9IGxpc3QtPnJlczsKIAkJaWR4ID0gcmVzIC0gJmxpc3QtPmRldi0+cmVzb3VyY2VbMF07CisKIAkJaWYgKHBjaV9hc3NpZ25fcmVzb3VyY2UobGlzdC0+ZGV2LCBpZHgpKSB7CisJCQlpZiAoZmFpbF9oZWFkICYmICFwY2lfaXNfcm9vdF9idXMobGlzdC0+ZGV2LT5idXMpKSB7CisJCQkJLyoKKwkJCQkgKiBpZiB0aGUgZmFpbGVkIHJlcyBpcyBmb3IgUk9NIEJBUiwgYW5kIGl0IHdpbGwKKwkJCQkgKiBiZSBlbmFibGVkIGxhdGVyLCBkb24ndCBhZGQgaXQgdG8gdGhlIGxpc3QKKwkJCQkgKi8KKwkJCQlpZiAoISgoaWR4ID09IFBDSV9ST01fUkVTT1VSQ0UpICYmCisJCQkJICAgICAgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSkpKSkKKwkJCQkJYWRkX3RvX2ZhaWxlZF9saXN0KGZhaWxfaGVhZCwgbGlzdC0+ZGV2LCByZXMpOworCQkJfQogCQkJcmVzLT5zdGFydCA9IDA7CiAJCQlyZXMtPmVuZCA9IDA7CiAJCQlyZXMtPmZsYWdzID0gMDsKQEAgLTY4LDYgKzEyMiwzMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcGRldl9hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZDsKKworCWhlYWQubmV4dCA9IE5VTEw7CisJX19kZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKKworfQorCitzdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBoZWFkOworCisJaGVhZC5uZXh0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCV9fZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOworCisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKK30KKwogdm9pZCBwY2lfc2V0dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CkBAIC0xMzQsMTggKzIxMiwxMiBAQAogICAgY29uZmlnIHNwYWNlIHdyaXRlcywgc28gaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGFuIEkvTyB3aW5kb3cgb2YKICAgIHRoZSBicmlkZ2Ugd2lsbCBoYXZlIHNvbWUgdW5kZXNpcmFibGUgYWRkcmVzcyAoZS5nLiAwKSBhZnRlciB0aGUKICAgIGZpcnN0IHdyaXRlLiBEaXR0byA2NC1iaXQgcHJlZmV0Y2hhYmxlIE1NSU8uICAqLwotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKLQl1MzIgbCwgYnUsIGx1LCBpb191cHBlcjE2OwotCi0JaWYgKHBjaV9pc19lbmFibGVkKGJyaWRnZSkpCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdXG4iLAotCQkgYnVzLT5zZWNvbmRhcnksIGJ1cy0+c3Vib3JkaW5hdGUpOworCXUzMiBsLCBpb191cHBlcjE2OwogCiAJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIEkvTyBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KIAlyZXMgPSBidXMtPnJlc291cmNlWzBdOwpAQCAtMTU4LDggKzIzMCw3IEBACiAJCS8qIFNldCB1cCB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gKHJlZ2lvbi5lbmQgJiAweGZmZmYwMDAwKSB8IChyZWdpb24uc3RhcnQgPj4gMTYpOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBDbGVhciB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gMDsKIAkJbCA9IDB4MDBmMDsKQEAgLTE3MSwyMSArMjQyLDM1IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCBsKTsKIAkvKiBVcGRhdGUgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX0lPX0JBU0VfVVBQRVIxNiwgaW9fdXBwZXIxNik7Cit9CiAKLQkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQKLQkgICBmb3IgdGhpcyBidXMuICovCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CisJdTMyIGw7CisKKwkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQgZm9yIHRoaXMgYnVzLiAqLwogCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMV07CiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLCAmcmVnaW9uLCByZXMpOwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwogCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gZGlzYWJsZWRdXG4iKTsKIAl9CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9NRU1PUllfQkFTRSwgbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOworCXUzMiBsLCBidSwgbHU7CiAKIAkvKiBDbGVhciBvdXQgdGhlIHVwcGVyIDMyIGJpdHMgb2YgUFJFRiBsaW1pdC4KIAkgICBJZiBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIgd2FzIG5vbi16ZXJvLCB0aGlzIHRlbXBvcmFyaWx5CkBAIC0yMDQsOCArMjg5LDcgQEAKIAkJCWx1ID0gdXBwZXJfMzJfYml0cyhyZWdpb24uZW5kKTsKIAkJfQogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gcHJlZiBkaXNhYmxlZF1cbiIpOwogCX0KQEAgLTIxNCwxMCArMjk4LDM1IEBACiAJLyogU2V0IHRoZSB1cHBlciAzMiBiaXRzIG9mIFBSRUYgYmFzZSAmIGxpbWl0LiAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIsIGJ1KTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwgbHUpOworfQorCitzdGF0aWMgdm9pZCBfX3BjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisKKwlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XVxuIiwKKwkJIGJ1cy0+c2Vjb25kYXJ5LCBidXMtPnN1Ym9yZGluYXRlKTsKKworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykKKwkJcGNpX3NldHVwX2JyaWRnZV9pbyhidXMpOworCisJaWYgKHR5cGUgJiBJT1JFU09VUkNFX01FTSkKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJ1cyk7CisKKwlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKGJ1cyk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJ1cy0+YnJpZGdlX2N0bCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwl1bnNpZ25lZCBsb25nIHR5cGUgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAorCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKworCV9fcGNpX3NldHVwX2JyaWRnZShidXMsIHR5cGUpOworfQorCiAvKiBDaGVjayB3aGV0aGVyIHRoZSBicmlkZ2Ugc3VwcG9ydHMgb3B0aW9uYWwgSS9PIGFuZAogICAgcHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZXMuIElmIG5vdCwgdGhlIHJlc3BlY3RpdmUKICAgIGJhc2UvbGltaXQgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZC1vbmx5IGFuZCByZWFkIGFzIDAuICovCkBAIC0yNTMsOCArMzYyLDExIEBACiAJfQogCWlmIChwbWVtKSB7CiAJCWJfcmVzWzJdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQkJaWYgKChwbWVtICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KQorCQlpZiAoKHBtZW0gJiBQQ0lfUFJFRl9SQU5HRV9UWVBFX01BU0spID09CisJCSAgICBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSB7CiAJCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTV82NDsKKwkJCWJfcmVzWzJdLmZsYWdzIHw9IFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQ7CisJCX0KIAl9CiAKIAkvKiBkb3VibGUgY2hlY2sgaWYgYnJpZGdlIGRvZXMgc3VwcG9ydCA2NCBiaXQgcHJlZiAqLwpAQCAtMjgzLDggKzM5NSw3IEBACiAJdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAogCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlyID0gYnVzLT5yZXNvdXJjZVtpXTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgciwgaSkgewogCQlpZiAociA9PSAmaW9wb3J0X3Jlc291cmNlIHx8IHIgPT0gJmlvbWVtX3Jlc291cmNlKQogCQkJY29udGludWU7CiAJCWlmIChyICYmIChyLT5mbGFncyAmIHR5cGVfbWFzaykgPT0gdHlwZSAmJiAhci0+cGFyZW50KQpAQCAtMzAxLDcgKzQxMiw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIElPUkVTT1VSQ0VfSU8pOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDAsIHNpemUxID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMSA9IDAsIG9sZF9zaXplOwogCiAJaWYgKCFiX3JlcykKICAJCXJldHVybjsKQEAgLTMyNiwxMiArNDM3LDE3IEBACiAJfQogCWlmIChzaXplIDwgbWluX3NpemUpCiAJCXNpemUgPSBtaW5fc2l6ZTsKKwlvbGRfc2l6ZSA9IHJlc291cmNlX3NpemUoYl9yZXMpOworCWlmIChvbGRfc2l6ZSA9PSAxKQorCQlvbGRfc2l6ZSA9IDA7CiAvKiBUbyBiZSBmaXhlZCBpbiAyLjU6IHdlIHNob3VsZCBoYXZlIHNvcnQgb2YgSEFWRV9JU0EKICAgIGZsYWcgaW4gdGhlIHN0cnVjdCBwY2lfYnVzLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKIAlzaXplID0gKHNpemUgJiAweGZmKSArICgoc2l6ZSAmIH4weGZmVUwpIDw8IDIpOwogI2VuZGlmCiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplMSwgNDA5Nik7CisJaWYgKHNpemUgPCBvbGRfc2l6ZSkKKwkJc2l6ZSA9IG9sZF9zaXplOwogCWlmICghc2l6ZSkgewogCQlpZiAoYl9yZXMtPnN0YXJ0IHx8IGJfcmVzLT5lbmQpCiAJCQlkZXZfaW5mbygmYnVzLT5zZWxmLT5kZXYsICJkaXNhYmxpbmcgYnJpZGdlIHdpbmRvdyAiCkBAIC0zNTIsNyArNDY4LDcgQEAKIAkJCSB1bnNpZ25lZCBsb25nIHR5cGUsIHJlc291cmNlX3NpemVfdCBtaW5fc2l6ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplOworCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBvbGRfc2l6ZTsKIAlyZXNvdXJjZV9zaXplX3QgYWxpZ25zWzEyXTsJLyogQWxpZ25tZW50cyBmcm9tIDFNYiB0byAyR2IgKi8KIAlpbnQgb3JkZXIsIG1heF9vcmRlcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIHR5cGUpOwpAQCAtNDAyLDYgKzUxOCwxMSBAQAogCX0KIAlpZiAoc2l6ZSA8IG1pbl9zaXplKQogCQlzaXplID0gbWluX3NpemU7CisJb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKKwlpZiAob2xkX3NpemUgPT0gMSkKKwkJb2xkX3NpemUgPSAwOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKIAogCWFsaWduID0gMDsKIAltaW5fYWxpZ24gPSAwOwpAQCAtNTM4LDIzICs2NTksMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCi12b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChidXMpOworCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzLCBmYWlsX2hlYWQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCWIgPSBkZXYtPnN1Ym9yZGluYXRlOwogCQlpZiAoIWIpCiAJCQljb250aW51ZTsKIAotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYik7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIsIGZhaWxfaGVhZCk7CiAKIAkJc3dpdGNoIChkZXYtPmNsYXNzID4+IDgpIHsKIAkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKLQkJCXBjaV9zZXR1cF9icmlkZ2UoYik7CisJCQlpZiAoIXBjaV9pc19lbmFibGVkKGRldikpCisJCQkJcGNpX3NldHVwX2JyaWRnZShiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgpAQCAtNTY4LDE1ICs2OTEsMTMwIEBACiAJCX0KIAl9CiB9CisKK3ZvaWQgX19yZWYgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKTsKIAorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnJpZGdlX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYjsKKworCXBkZXZfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoKHN0cnVjdCBwY2lfZGV2ICopYnJpZGdlLCBmYWlsX2hlYWQpOworCisJYiA9IGJyaWRnZS0+c3Vib3JkaW5hdGU7CisJaWYgKCFiKQorCQlyZXR1cm47CisKKwlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOworCisJc3dpdGNoIChicmlkZ2UtPmNsYXNzID4+IDgpIHsKKwljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgorCQlwY2lfc2V0dXBfYnJpZGdlKGIpOworCQlicmVhazsKKworCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgorCQlwY2lfc2V0dXBfY2FyZGJ1cyhiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJub3Qgc2V0dGluZyB1cCBicmlkZ2UgZm9yIGJ1cyAiCisJCQkgIiUwNHg6JTAyeFxuIiwgcGNpX2RvbWFpbl9ucihiKSwgYi0+bnVtYmVyKTsKKwkJYnJlYWs7CisJfQorfQorc3RhdGljIHZvaWQgcGNpX2JyaWRnZV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKwlpbnQgaWR4OworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlkZXYgPSBidXMtPnNlbGY7CisJZm9yIChpZHggPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaWR4IDw9IFBDSV9CUklER0VfUkVTT1VSQ0VfRU5EOworCSAgICAgaWR4KyspIHsKKwkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJCWlmICgoci0+ZmxhZ3MgJiB0eXBlX21hc2spICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKCFyLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogaWYgdGhlcmUgYXJlIGNoaWxkcmVuIHVuZGVyIHRoYXQsIHdlIHNob3VsZCByZWxlYXNlIHRoZW0KKwkJICogIGFsbAorCQkgKi8KKwkJcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJCWlmICghcmVsZWFzZV9yZXNvdXJjZShyKSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJICJyZXNvdXJjZSAlZCAlcFIgcmVsZWFzZWRcbiIsIGlkeCwgcik7CisJCQkvKiBrZWVwIHRoZSBvbGQgc2l6ZSAqLworCQkJci0+ZW5kID0gcmVzb3VyY2Vfc2l6ZShyKSAtIDE7CisJCQlyLT5zdGFydCA9IDA7CisJCQlyLT5mbGFncyA9IDA7CisJCQljaGFuZ2VkID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCS8qIGF2b2lkaW5nIHRvdWNoIHRoZSBvbmUgd2l0aG91dCBQUkVGICovCisJCWlmICh0eXBlICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkKKwkJCXR5cGUgPSBJT1JFU09VUkNFX1BSRUZFVENIOworCQlfX3BjaV9zZXR1cF9icmlkZ2UoYnVzLCB0eXBlKTsKKwl9Cit9CisKK2VudW0gcmVsZWFzZV90eXBlIHsKKwlsZWFmX29ubHksCisJd2hvbGVfc3VidHJlZSwKK307CisvKgorICogdHJ5IHRvIHJlbGVhc2UgcGNpIGJyaWRnZSByZXNvdXJjZXMgdGhhdCBpcyBmcm9tIGxlYWYgYnJpZGdlLAorICogc28gd2UgY2FuIGFsbG9jYXRlIGJpZyBuZXcgb25lIGxhdGVyCisgKi8KK3N0YXRpYyB2b2lkIF9fcmVmIHBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJCQkgICBlbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgaXNfbGVhZl9icmlkZ2UgPSB0cnVlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJaWYgKCFiKQorCQkJY29udGludWU7CisKKwkJaXNfbGVhZl9icmlkZ2UgPSBmYWxzZTsKKworCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCQljb250aW51ZTsKKworCQlpZiAocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkKKwkJCXBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKGIsIHR5cGUsCisJCQkJCQkgd2hvbGVfc3VidHJlZSk7CisJfQorCisJaWYgKHBjaV9pc19yb290X2J1cyhidXMpKQorCQlyZXR1cm47CisKKwlpZiAoKGJ1cy0+c2VsZi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCXJldHVybjsKKworCWlmICgocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkgfHwgaXNfbGVhZl9icmlkZ2UpCisJCXBjaV9icmlkZ2VfcmVsZWFzZV9yZXNvdXJjZXMoYnVzLCB0eXBlKTsKK30KKwogc3RhdGljIHZvaWQgcGNpX2J1c19kdW1wX3JlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy0+ZW5kKQorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKCFyZXMgfHwgIXJlcy0+ZW5kIHx8ICFyZXMtPmZsYWdzKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYnVzLT5kZXYsICJyZXNvdXJjZSAlZCAlcFJcbiIsIGksIHJlcyk7CkBAIC02MDAsMTEgKzgzOCw2NSBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX2luaXQgcGNpX2J1c19nZXRfZGVwdGgoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlpbnQgZGVwdGggPSAwOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHBjaV9idXMgKmIgPSBkZXYtPnN1Ym9yZGluYXRlOworCQlpZiAoIWIpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChiKTsKKwkJaWYgKHJldCArIDEgPiBkZXB0aCkKKwkJCWRlcHRoID0gcmV0ICsgMTsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CitzdGF0aWMgaW50IF9faW5pdCBwY2lfZ2V0X21heF9kZXB0aCh2b2lkKQoreworCWludCBkZXB0aCA9IDA7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChidXMpOworCQlpZiAocmV0ID4gZGVwdGgpCisJCQlkZXB0aCA9IHJldDsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CisKKy8qCisgKiBmaXJzdCB0cnkgd2lsbCBub3QgdG91Y2ggcGNpIGJyaWRnZSByZXMKKyAqIHNlY29uZCAgYW5kIGxhdGVyIHRyeSB3aWxsIGNsZWFyIHNtYWxsIGxlYWYgYnJpZGdlIHJlcworICogd2lsbCBzdG9wIHRpbGwgdG8gdGhlIG1heCAgZGVlcHRoIGlmIGNhbiBub3QgZmluZCBnb29kIG9uZQorICovCiB2b2lkIF9faW5pdAogcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CisJaW50IHRyaWVkX3RpbWVzID0gMDsKKwllbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSA9IGxlYWZfb25seTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94IGhlYWQsICpsaXN0OworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJdW5zaWduZWQgbG9uZyBmYWlsZWRfdHlwZTsKKwlpbnQgbWF4X2RlcHRoID0gcGNpX2dldF9tYXhfZGVwdGgoKTsKKwlpbnQgcGNpX3RyeV9udW07CiAKKwloZWFkLm5leHQgPSBOVUxMOworCisJcGNpX3RyeV9udW0gPSBtYXhfZGVwdGggKyAxOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1heCBidXMgZGVwdGg6ICVkIHBjaV90cnlfbnVtOiAlZFxuIiwKKwkJIG1heF9kZXB0aCwgcGNpX3RyeV9udW0pOworCithZ2FpbjoKIAkvKiBEZXB0aCBmaXJzdCwgY2FsY3VsYXRlIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIGFsbAogCSAgIHN1Ym9yZGluYXRlIGJ1c2VzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKQEAgLTYxMiwxMiArOTA0LDEzMCBAQAogCX0KIAkvKiBEZXB0aCBsYXN0LCBhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkgewotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgJmhlYWQpOwogCX0KKwl0cmllZF90aW1lcysrOworCisJLyogYW55IGRldmljZSBjb21wbGFpbj8gKi8KKwlpZiAoIWhlYWQubmV4dCkKKwkJZ290byBlbmFibGVfYW5kX2R1bXA7CisJZmFpbGVkX3R5cGUgPSAwOworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJZmFpbGVkX3R5cGUgfD0gbGlzdC0+ZmxhZ3M7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKgorCSAqIGlvIHBvcnQgYXJlIHRpZ2h0LCBkb24ndCB0cnkgZXh0cmEKKwkgKiBvciBpZiByZWFjaCB0aGUgbGltaXQsIGRvbid0IHdhbnQgdG8gdHJ5IG1vcmUKKwkgKi8KKwlmYWlsZWRfdHlwZSAmPSB0eXBlX21hc2s7CisJaWYgKChmYWlsZWRfdHlwZSA9PSBJT1JFU09VUkNFX0lPKSB8fCAodHJpZWRfdGltZXMgPj0gcGNpX3RyeV9udW0pKSB7CisJCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCQlnb3RvIGVuYWJsZV9hbmRfZHVtcDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBOby4gJWQgdHJ5IHRvIGFzc2lnbiB1bmFzc2lnbmVkIHJlc1xuIiwKKwkJCSB0cmllZF90aW1lcyArIDEpOworCisJLyogdGhpcmQgdGltZXMgYW5kIGxhdGVyIHdpbGwgbm90IGNoZWNrIGlmIGl0IGlzIGxlYWYgKi8KKwlpZiAoKHRyaWVkX3RpbWVzICsgMSkgPiAyKQorCQlyZWxfdHlwZSA9IHdob2xlX3N1YnRyZWU7CisKKwkvKgorCSAqIFRyeSB0byByZWxlYXNlIGxlYWYgYnJpZGdlJ3MgcmVzb3VyY2VzIHRoYXQgZG9lc24ndCBmaXQgcmVzb3VyY2Ugb2YKKwkgKiBjaGlsZCBkZXZpY2UgdW5kZXIgdGhhdCBicmlkZ2UKKwkgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCWJ1cyA9IGxpc3QtPmRldi0+YnVzOworCQlwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhidXMsIGxpc3QtPmZsYWdzICYgdHlwZV9tYXNrLAorCQkJCQkJICByZWxfdHlwZSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKiByZXN0b3JlIHNpemUgYW5kIGZsYWdzICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGxpc3QtPnJlczsKKworCQlyZXMtPnN0YXJ0ID0gbGlzdC0+c3RhcnQ7CisJCXJlcy0+ZW5kID0gbGlzdC0+ZW5kOworCQlyZXMtPmZsYWdzID0gbGlzdC0+ZmxhZ3M7CisJCWlmIChsaXN0LT5kZXYtPnN1Ym9yZGluYXRlKQorCQkJcmVzLT5mbGFncyA9IDA7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCisJZ290byBhZ2FpbjsKKworZW5hYmxlX2FuZF9kdW1wOgorCS8qIERlcHRoIGxhc3QsIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkKKwkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CiAKIAkvKiBkdW1wIHRoZSByZXNvdXJjZSBvbiBidXNlcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKIAkJcGNpX2J1c19kdW1wX3Jlc291cmNlcyhidXMpOwogCX0KIH0KKwordm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQoreworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOworCWludCB0cmllZF90aW1lcyA9IDA7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCBoZWFkLCAqbGlzdDsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwloZWFkLm5leHQgPSBOVUxMOworCithZ2FpbjoKKwlwY2lfYnVzX3NpemVfYnJpZGdlcyhwYXJlbnQpOworCV9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGJyaWRnZSwgJmhlYWQpOworCXJldHZhbCA9IHBjaV9yZWVuYWJsZV9kZXZpY2UoYnJpZGdlKTsKKwlwY2lfc2V0X21hc3RlcihicmlkZ2UpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOworCisJdHJpZWRfdGltZXMrKzsKKworCWlmICghaGVhZC5uZXh0KQorCQlyZXR1cm47CisKKwlpZiAodHJpZWRfdGltZXMgPj0gMikgeworCQkvKiBzdGlsbCBmYWlsLCBkb24ndCBuZWVkIHRvIHRyeSBtb3JlICovCisJCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogTm8uICVkIHRyeSB0byBhc3NpZ24gdW5hc3NpZ25lZCByZXNcbiIsCisJCQkgdHJpZWRfdGltZXMgKyAxKTsKKworCS8qCisJICogVHJ5IHRvIHJlbGVhc2UgbGVhZiBicmlkZ2UncyByZXNvdXJjZXMgdGhhdCBkb2Vzbid0IGZpdCByZXNvdXJjZSBvZgorCSAqIGNoaWxkIGRldmljZSB1bmRlciB0aGF0IGJyaWRnZQorCSAqLworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGxpc3QtPmRldi0+YnVzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gbGlzdC0+ZmxhZ3M7CisKKwkJcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoYnVzLCBmbGFncyAmIHR5cGVfbWFzaywKKwkJCQkJCSB3aG9sZV9zdWJ0cmVlKTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCS8qIHJlc3RvcmUgc2l6ZSBhbmQgZmxhZ3MgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gbGlzdC0+cmVzOworCisJCXJlcy0+c3RhcnQgPSBsaXN0LT5zdGFydDsKKwkJcmVzLT5lbmQgPSBsaXN0LT5lbmQ7CisJCXJlcy0+ZmxhZ3MgPSBsaXN0LT5mbGFnczsKKwkJaWYgKGxpc3QtPmRldi0+c3Vib3JkaW5hdGUpCisJCQlyZXMtPmZsYWdzID0gMDsKKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJZnJlZV9mYWlsZWRfbGlzdCgmaGVhZCk7CisKKwlnb3RvIGFnYWluOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2xvdC5jIGIvZHJpdmVycy9wY2kvc2xvdC5jCmluZGV4IDhjMDJiNmMuLjQ5YzllNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9zbG90LmMKQEAgLTQ3LDYgKzQ3LDU1IEBACiAJCQkJc2xvdC0+bnVtYmVyKTsKIH0KIAorLyogdGhlc2Ugc3RyaW5ncyBtYXRjaCB1cCB3aXRoIHRoZSB2YWx1ZXMgaW4gcGNpX2J1c19zcGVlZCAqLworc3RhdGljIGNoYXIgKnBjaV9idXNfc3BlZWRfc3RyaW5nc1tdID0geworCSIzMyBNSHogUENJIiwJCS8qIDB4MDAgKi8KKwkiNjYgTUh6IFBDSSIsCQkvKiAweDAxICovCisJIjY2IE1IeiBQQ0ktWCIsIAkvKiAweDAyICovCisJIjEwMCBNSHogUENJLVgiLAkvKiAweDAzICovCisJIjEzMyBNSHogUENJLVgiLAkvKiAweDA0ICovCisJTlVMTCwJCQkvKiAweDA1ICovCisJTlVMTCwJCQkvKiAweDA2ICovCisJTlVMTCwJCQkvKiAweDA3ICovCisJTlVMTCwJCQkvKiAweDA4ICovCisJIjY2IE1IeiBQQ0ktWCAyNjYiLAkvKiAweDA5ICovCisJIjEwMCBNSHogUENJLVggMjY2IiwJLyogMHgwYSAqLworCSIxMzMgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGIgKi8KKwkiVW5rbm93biBBR1AiLAkJLyogMHgwYyAqLworCSIxeCBBR1AiLAkJLyogMHgwZCAqLworCSIyeCBBR1AiLAkJLyogMHgwZSAqLworCSI0eCBBR1AiLAkJLyogMHgwZiAqLworCSI4eCBBR1AiLAkJLyogMHgxMCAqLworCSI2NiBNSHogUENJLVggNTMzIiwJLyogMHgxMSAqLworCSIxMDAgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTIgKi8KKwkiMTMzIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEzICovCisJIjIuNSBHVC9zIFBDSWUiLAkvKiAweDE0ICovCisJIjUuMCBHVC9zIFBDSWUiLAkvKiAweDE1ICovCisJIjguMCBHVC9zIFBDSWUiLAkvKiAweDE2ICovCit9OworCitzdGF0aWMgc3NpemVfdCBidXNfc3BlZWRfcmVhZChlbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpzcGVlZF9zdHJpbmc7CisKKwlpZiAoc3BlZWQgPCBBUlJBWV9TSVpFKHBjaV9idXNfc3BlZWRfc3RyaW5ncykpCisJCXNwZWVkX3N0cmluZyA9IHBjaV9idXNfc3BlZWRfc3RyaW5nc1tzcGVlZF07CisJZWxzZQorCQlzcGVlZF9zdHJpbmcgPSAiVW5rbm93biI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4X3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYnVzX3NwZWVkX3JlYWQoc2xvdC0+YnVzLT5tYXhfYnVzX3NwZWVkLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBjdXJfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQoreworCXJldHVybiBidXNfc3BlZWRfcmVhZChzbG90LT5idXMtPmN1cl9idXNfc3BlZWQsIGJ1Zik7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9zbG90X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTY2LDkgKzExNSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBwY2lfc2xvdF9hdHRyX2FkZHJlc3MgPQogCV9fQVRUUihhZGRyZXNzLCAoU19JRlJFRyB8IFNfSVJVR08pLCBhZGRyZXNzX3JlYWRfZmlsZSwgTlVMTCk7CitzdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBwY2lfc2xvdF9hdHRyX21heF9zcGVlZCA9CisJX19BVFRSKG1heF9idXNfc3BlZWQsIChTX0lGUkVHIHwgU19JUlVHTyksIG1heF9zcGVlZF9yZWFkX2ZpbGUsIE5VTEwpOworc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9jdXJfc3BlZWQgPQorCV9fQVRUUihjdXJfYnVzX3NwZWVkLCAoU19JRlJFRyB8IFNfSVJVR08pLCBjdXJfc3BlZWRfcmVhZF9maWxlLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjaV9zbG90X2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmcGNpX3Nsb3RfYXR0cl9hZGRyZXNzLmF0dHIsCisJJnBjaV9zbG90X2F0dHJfbWF4X3NwZWVkLmF0dHIsCisJJnBjaV9zbG90X2F0dHJfY3VyX3NwZWVkLmF0dHIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3ZwZC5jIGIvZHJpdmVycy9wY2kvdnBkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhNWNhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3ZwZC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBGaWxlOgl2cGQuYworICogUHVycG9zZToJUHJvdmlkZSBQQ0kgVlBEIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitpbnQgcGNpX3ZwZF9maW5kX3RhZyhjb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCByZHQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBvZmY7IGkgPCBsZW47ICkgeworCQl1OCB2YWwgPSBidWZbaV07CisKKwkJaWYgKHZhbCAmIFBDSV9WUERfTFJEVCkgeworCQkJLyogRG9uJ3QgcmV0dXJuIHN1Y2Nlc3Mgb2YgdGhlIHRhZyBpc24ndCBjb21wbGV0ZSAqLworCQkJaWYgKGkgKyBQQ0lfVlBEX0xSRFRfVEFHX1NJWkUgPiBsZW4pCisJCQkJYnJlYWs7CisKKwkJCWlmICh2YWwgPT0gcmR0KQorCQkJCXJldHVybiBpOworCisJCQlpICs9IFBDSV9WUERfTFJEVF9UQUdfU0laRSArCisJCQkgICAgIHBjaV92cGRfbHJkdF9zaXplKCZidWZbaV0pOworCQl9IGVsc2UgeworCQkJdTggdGFnID0gdmFsICYgflBDSV9WUERfU1JEVF9MRU5fTUFTSzsKKworCQkJaWYgKHRhZyA9PSByZHQpCisJCQkJcmV0dXJuIGk7CisKKwkJCWlmICh0YWcgPT0gUENJX1ZQRF9TUkRUX0VORCkKKwkJCQlicmVhazsKKworCQkJaSArPSBQQ0lfVlBEX1NSRFRfVEFHX1NJWkUgKworCQkJICAgICBwY2lfdnBkX3NyZHRfc2l6ZSgmYnVmW2ldKTsKKwkJfQorCX0KKworCXJldHVybiAtRU5PRU5UOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3ZwZF9maW5kX3RhZyk7CisKK2ludCBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICprdykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IG9mZjsgaSArIFBDSV9WUERfSU5GT19GTERfSERSX1NJWkUgPD0gb2ZmICsgbGVuOykgeworCQlpZiAoYnVmW2kgKyAwXSA9PSBrd1swXSAmJgorCQkgICAgYnVmW2kgKyAxXSA9PSBrd1sxXSkKKwkJCXJldHVybiBpOworCisJCWkgKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRSArCisJCSAgICAgcGNpX3ZwZF9pbmZvX2ZpZWxkX3NpemUoJmJ1ZltpXSk7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IDlmM2FkYmQuLmQxODllNDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTUxLDE3ICs1MSwyMyBAQAogCiBjb25maWcgUENNQ0lBX0lPQ1RMCiAJYm9vbCAiUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG9ic29sZXRlKSIKLQlkZXBlbmRzIG9uIFBDTUNJQQorCWRlcGVuZHMgb24gUENNQ0lBICYmIEFSTSAmJiAhU01QICYmICFQUkVFTVBUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBkZXByZWNhdGVkIGlvY3RsIGludGVyZmFjZSB0byB0aGUgUENNQ0lBCi0JICBzdWJzeXN0ZW0gd2lsbCBiZSBidWlsdC4gSXQgaXMgbmVlZGVkIGJ5IGNhcmRtZ3IgYW5kIGNhcmRjdGwKLQkgIChwY21jaWEtY3MpIHRvIGZ1bmN0aW9uIHByb3Blcmx5LgorCSAgc3Vic3lzdGVtIHdpbGwgYmUgYnVpbHQuIEl0IGlzIG5lZWRlZCBieSB0aGUgZGVwcmVjYXRlZCBwY21jaWEtY3MKKwkgIHRvb2xzIChjYXJkbWdyLCBjYXJkY3RsKSB0byBmdW5jdGlvbiBwcm9wZXJseS4KIAogCSAgWW91IHNob3VsZCB1c2UgdGhlIG5ldyBwY21jaWF1dGlscyBwYWNrYWdlIGluc3RlYWQgKHNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzPiBmb3IgbG9jYXRpb24gYW5kIGRldGFpbHMpLgogCi0JICBJZiB1bnN1cmUsIHNheSBZLgorCSAgVGhpcyBjb25maWcgb3B0aW9uIHdpbGwgbW9zdCBsaWtlbHkgYmUgcmVtb3ZlZCBmcm9tIGtlcm5lbCAyLjYuMzUsCisJICB0aGUgYXNzb2NpYXRlZCBjb2RlIGZyb20ga2VybmVsIDIuNi4zNi4KKworCSAgQXMgdGhlIFBDTUNJQSBpb2N0bCBpcyBub3QgbG9ja2luZyBzYWZlLCBpdCBkZXBlbmRzIG9uICFTTVAgYW5kCisJICAhUFJFRU1QVC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENBUkRCVVMKIAlib29sICIzMi1iaXQgQ2FyZEJ1cyBzdXBwb3J0IgpAQCAtODQsNyArOTAsNyBAQAogCXRyaXN0YXRlICJDYXJkQnVzIHllbnRhLWNvbXBhdGlibGUgYnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgQ0FSREJVUyBpZiAhRU1CRURERUQKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQworCXNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDIGlmIFBDTUNJQSAhPSBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBDYXJkQnVzIGhvc3QgYnJpZGdlcy4gIFZpcnR1YWxseQogCSAgYWxsIG1vZGVybiBQQ01DSUEgYnJpZGdlcyBhcmUgQ2FyZEJ1cyBjb21wYXRpYmxlLiAgQSAiYnJpZGdlIiBpcwpAQCAtMTYxLDkgKzE2Nyw4IEBACiAKIGNvbmZpZyBQQ01DSUFfTThYWAogCXRyaXN0YXRlICJNUEM4eHggUENNQ0lBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDICYmIDh4eAotCXNlbGVjdCBQQ0NBUkRfSU9EWU4KLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQworCWRlcGVuZHMgb24gUENDQVJEICYmIFBQQyAmJiA4eHgKKwlzZWxlY3QgUENDQVJEX0lPRFlOIGlmIFBDTUNJQSAhPSBuCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBvd2VyUEMgOHh4IHNlcmllcyBQQ01DSUEKIAkgIGNvbnRyb2xsZXIuCkBAIC0xNzQsNiArMTc5LDI3IEBACiAJdHJpc3RhdGUgIkF1MXgwMCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfQUxDSEVNWV9ERVZCT0FSRAorCXRyaXN0YXRlICJBbGNoZW15IERiL1BiMXh4eCBQQ01DSUEgc29ja2V0IHNlcnZpY2VzIgorCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBQQ01DSUEKKwlzZWxlY3QgNjRCSVRfUEhZU19BRERSCisJaGVscAorCSAgRW5hYmxlIHRoaXMgZHJpdmVyIG9mIHlvdSB3YW50IFBDTUNJQSBzdXBwb3J0IG9uIHlvdXIgQWxjaGVteQorCSAgRGIxMDAwLCBEYi9QYjExMDAsIERiL1BiMTUwMCwgRGIvUGIxNTUwLCBEYi9QYjEyMDAgYm9hcmQuCisJICBOT1Qgc3VpdGFibGUgZm9yIHRoZSBQQjEwMDAhCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGNhbGxlZCBkYjF4eHhfc3Mua28KKworY29uZmlnIFBDTUNJQV9YWFMxNTAwCisJdHJpc3RhdGUgIk15Q2FibGUgWFhTMTUwMCBQQ01DSUEgc29ja2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgTUlQU19YWFMxNTAwCisJc2VsZWN0IDY0QklUX1BIWVNfQUREUgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBQQ01DSUEvQ0Ygc29ja2V0IGludGVyZmFjZSBvbiBNeUNhYmxlIFhYUzE1MDAKKwkgIHN5c3RlbXMuCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGNhbGxlZCB4eHMxNTAwX3NzLmtvCisKIGNvbmZpZyBQQ01DSUFfQkNNNjNYWAogCXRyaXN0YXRlICJiY202M3h4IHBjbWNpYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQkNNNjNYWCAmJiBQQ01DSUEKQEAgLTIzOCwxNCArMjY0LDEyIEBACiBjb25maWcgTTMyUl9QQ0MKIAlib29sICJNMzJSIFBDTUNJQSBJL0YiCiAJZGVwZW5kcyBvbiBNMzJSICYmIENISVBfTTMyNzAwICYmIFBDTUNJQQotCXNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIE0zMlIgUENNQ0lBIGNvbnRyb2xsZXIuCiAKIGNvbmZpZyBNMzJSX0NGQwogCWJvb2wgIk0zMlIgQ0YgSS9GIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBNMzJSICYmIChQTEFUX1VTUlYgfHwgUExBVF9NMzI3MDBVVCB8fCBQTEFUX01BUFBJMiB8fCBQTEFUX01BUFBJMyB8fCBQTEFUX09QU1BVVCkKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIENvbXBhY3RGbGFzaCBjb250cm9sbGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDgzZmY4MDIuLjM4MWIwMzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMiwxMSArMiwxMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBwY21jaWEgc3Vic3lzdGVtIChjL28gRGF2aWQgSGluZHMpCiAjCiAKLXBjbWNpYV9jb3JlLXkJCQkJCSs9IGNzLm8gY2lzdHBsLm8gcnNyY19tZ3IubyBzb2NrZXRfc3lzZnMubworcGNtY2lhX2NvcmUteQkJCQkJKz0gY3MubyByc3JjX21nci5vIHNvY2tldF9zeXNmcy5vCiBwY21jaWFfY29yZS0kKENPTkZJR19DQVJEQlVTKQkJCSs9IGNhcmRidXMubwogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCQkJKz0gcGNtY2lhX2NvcmUubwogCi1wY21jaWEteQkJCQkJKz0gZHMubyBwY21jaWFfcmVzb3VyY2UubworcGNtY2lhLXkJCQkJCSs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8KIHBjbWNpYS0kKENPTkZJR19QQ01DSUFfSU9DVEwpCQkJKz0gcGNtY2lhX2lvY3RsLm8KIG9iai0kKENPTkZJR19QQ01DSUEpCQkJCSs9IHBjbWNpYS5vCiAKQEAgLTM1LDE4ICszNSwxMCBAQAogb2JqLSQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpCQkJKz0gYmZpbl9jZl9wY21jaWEubwogb2JqLSQoQ09ORklHX0FUOTFfQ0YpCQkJCSs9IGF0OTFfY2Yubwogb2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpCQkJKz0gZWxlY3RyYV9jZi5vCitvYmotJChDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQpCQkrPSBkYjF4eHhfc3MubwogCiBhdTF4MDBfc3MteQkJCQkJKz0gYXUxMDAwX2dlbmVyaWMubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMDAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxNTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMDAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkJCSs9IGF1MTAwMF94eHMxNTAwLm8KIAogc2ExMTExX2NzLXkJCQkJCSs9IHNhMTExMV9nZW5lcmljLm8KIHNhMTExMV9jcy0kKENPTkZJR19BU1NBQkVUX05FUE9OU0VUKQkJKz0gc2ExMTAwX25lcG9uc2V0Lm8KQEAgLTc2LDMgKzY4LDUgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9TVEFSR0FURTIpCQkrPSBweGEyeHhfc3RhcmdhdGUyLm8KIAogb2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpCQkJKz0gcHhhMnh4X2Jhc2UubyAkKHB4YTJ4eC1vYmoteSkKKworb2JqLSQoQ09ORklHX1BDTUNJQV9YWFMxNTAwKQkJCSs9IHh4czE1MDBfc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGUxZGNjZWQuLjVkMjI4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTUyLDggKzUyLDYgQEAKIAl1bnNpZ25lZCBsb25nCQlwaHlzX2Jhc2VhZGRyOwogfTsKIAotI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0OTFfY2ZfcHJlc2VudChzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgKmNmKQogewogCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoY2YtPmJvYXJkLT5kZXRfcGluKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4ZDc3Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSAqCi0gKiBBbGNoZW15IFNlbWkgRGIxeDAwIGJvYXJkcyBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogQ29weXJpZ2h0IDIwMDQgUGV0ZSBQb3BvdiwgdXBkYXRlZCB0aGUgZHJpdmVyIHRvIDIuNi4KLSAqIEZvbGxvd2VkIHRoZSBzYTExeHggQVBJIGFuZCBsYXJnZWx5IGNvcGllZCBtYW55IG9mIHRoZSBoYXJkd2FyZQotICogaW5kZXBlbmRlbnQgZnVuY3Rpb25zLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkKLQkjaW5jbHVkZSA8ZGIxMjAwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkjaW5jbHVkZSA8cGIxMjAwLmg+Ci0jZWxzZQotCSNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAwLmg+Ci0Jc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgImF1MTAwMF9nZW5lcmljLmgiCi0KLSNpZiAwCi0jZGVmaW5lIGRlYnVnKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIHgsIF9fZnVuY19fICwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcoeCxhcmdzLi4uKQotI2VuZGlmCi0KLQotc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0IGF1MTAwMF9wY21jaWFfc29ja2V0W1BDTUNJQV9OVU1fU09DS1NdOwotZXh0ZXJuIGludCBhdTF4MDBfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICosIGludCwgaW50KTsKLQotc3RhdGljIGludCBkYjF4MDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQVUxMDAwX0dQSU9fNSA6IEFVMTAwMF9HUElPXzM7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQk9BUkRfUEMxX0lOVCA6IEJPQVJEX1BDMF9JTlQ7Ci0jZWxzZQotCXNrdC0+aXJxID0gc2t0LT5uciA/IEFVMTAwMF9HUElPXzUgOiBBVTEwMDBfR1BJT18yOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRiMXgwMF9wY21jaWFfc2h1dGRvd24oc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0JYmNzci0+cGNtY2lhID0gMDsgLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotfQotCi1zdGF0aWMgdm9pZAotZGIxeDAwX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QsIHN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQotewotCXUzMiBpbnNlcnRlZDsKLQl1bnNpZ25lZCBjaGFyIHZzOwotCi0Jc3RhdGUtPnJlYWR5ID0gMDsKLQlzdGF0ZS0+dnNfWHYgPSAwOwotCXN0YXRlLT52c18zdiA9IDA7Ci0Jc3RhdGUtPmRldGVjdCA9IDA7Ci0KLQlzd2l0Y2ggKHNrdC0+bnIpIHsKLQljYXNlIDA6Ci0JCXZzID0gYmNzci0+c3RhdHVzICYgMHgzOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDApOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw0KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl2cyA9IChiY3NyLT5zdGF0dXMgJiAweEMpPj4yOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDEpOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw1KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDovKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaW5zZXJ0ZWQpCi0JCWRlYnVnKCJkYjF4MDAgc29ja2V0ICVkOiBpbnNlcnRlZCAlZCwgdnMgJWQgcGNtY2lhICV4XG4iLAotCQkJCXNrdC0+bnIsIGluc2VydGVkLCB2cywgYmNzci0+cGNtY2lhKTsKLQotCWlmIChpbnNlcnRlZCkgewotCQlzd2l0Y2ggKHZzKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDI6Ci0JCQkJc3RhdGUtPnZzXzN2PTE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6IC8qIDVWICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIHJldHVybiB3aXRob3V0IHNldHRpbmcgJ2RldGVjdCcgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgImRiMXgwMCBiYWQgVlMgKCVkKVxuIiwKLQkJCQkJCXZzKTsKLQkJfQotCQlzdGF0ZS0+ZGV0ZWN0ID0gMTsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGlmIHRoZSBjYXJkIHdhcyBwcmV2aW91c2x5IGluc2VydGVkIGFuZCB0aGVuIGVqZWN0ZWQsCi0JCSAqIHdlIHNob3VsZCB0dXJuIG9mZiBwb3dlciB0byBpdAotCQkgKi8KLQkJaWYgKChza3QtPm5yID09IDApICYmIChiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzBSU1QpKSB7Ci0JCQliY3NyLT5wY21jaWEgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfAotCQkJCQlCQ1NSX1BDTUNJQV9QQzBEUlZFTiB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZQUCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZDQyk7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwKTsKLQkJfQotCQllbHNlIGlmICgoc2t0LT5uciA9PSAxKSAmJiBiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzFSU1QpIHsKLQkJCWJjc3ItPnBjbWNpYSAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMURSVkVOIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVlBQIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVkNDKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTApOwotCQl9Ci0JfQotCi0Jc3RhdGUtPmJ2ZDE9MTsKLQlzdGF0ZS0+YnZkMj0xOwotCXN0YXRlLT53cnByb3Q9MDsKLX0KLQotc3RhdGljIGludAotZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0LCBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQotewotCXUxNiBwd3I7Ci0JaW50IHNvY2sgPSBza3QtPm5yOwotCi0JZGVidWcoImNvbmZpZ19za3QgJWQgVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCXNvY2ssIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsCi0JCQlzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCk7Ci0KLQkvKiBwY21jaWEgcmVnIHdhcyBzZXQgdG8gemVybyBhdCBpbml0IHRpbWUuIEJlIGNhcmVmdWwgd2hlbgotCSAqIGluaXRpYWxpemluZyBhIHNvY2tldCBub3QgdG8gd2lwZSBvdXQgdGhlIHNldHRpbmdzIG9mIHRoZQotCSAqIG90aGVyIHNvY2tldC4KLQkgKi8KLQlwd3IgPSBiY3NyLT5wY21jaWE7Ci0JcHdyICY9IH4oMHhmIDw8IHNvY2sqOCk7IC8qIGNsZWFyIHZvbHRhZ2Ugc2V0dGluZ3MgKi8KLQotCXN0YXRlLT5WcHAgPSAwOwotCXN3aXRjaChzdGF0ZS0+VmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlicmVhazsKLQkJY2FzZSA1MDogLyogVmNjIDVWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMzM6IC8qIFZjYyAzLjNWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIHdoYXQncyB0aGlzID8gKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgVmNjICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgc3RhdGUtPlZjYyk7Ci0JCQlicmVhazsKLQl9Ci0KLQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKHNvY2sgPT0gMCkgewotCQlpZiAoIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpIHsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBEUlZFTjsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMzAwKTsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBSU1Q7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwd3IgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfCBCQ1NSX1BDTUNJQV9QQzBEUlZFTik7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCWlmICghKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgewotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMURSVkVOOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgzMDApOwotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMVJTVDsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCQllbHNlIHsKLQkJCXB3ciAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8IEJDU1JfUENNQ0lBX1BDMURSVkVOKTsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuYWJsZSBjYXJkIHN0YXR1cyBJUlFzIG9uIChyZS0paW5pdGlhbGlzYXRpb24uICBUaGlzIGNhbgotICogYmUgY2FsbGVkIGF0IGluaXRpYWxpc2F0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGV2ZW50LCBvcgotICogcGNtY2lhIGV2ZW50LgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfaW5pdChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotLyoKLSAqIERpc2FibGUgY2FyZCBzdGF0dXMgSVJRcyBhbmQgUENNQ0lBIGJ1cyBvbiBzdXNwZW5kLgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfc3VzcGVuZChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgZGIxeDAwX3BjbWNpYV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQotCS5od19pbml0IAkJPSBkYjF4MDBfcGNtY2lhX2h3X2luaXQsCi0JLmh3X3NodXRkb3duCQk9IGRiMXgwMF9wY21jaWFfc2h1dGRvd24sCi0KLQkuc29ja2V0X3N0YXRlCQk9IGRiMXgwMF9wY21jaWFfc29ja2V0X3N0YXRlLAotCS5jb25maWd1cmVfc29ja2V0CT0gZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCi0JLnNvY2tldF9pbml0CQk9IGRiMXgwMF9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gZGIxeDAwX3NvY2tldF9zdXNwZW5kCi19OwotCi1pbnQgYXUxeF9ib2FyZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKLQliY3NyLT5wY21jaWEgPSAwOyAvKiB0dXJuIG9mZiBwb3dlciwgaWYgaXQncyBub3QgYWxyZWFkeSBvZmYgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldCA9IGF1MXgwMF9wY21jaWFfc29ja2V0X3Byb2JlKGRldiwgJmRiMXgwMF9wY21jaWFfb3BzLCAwLCAyKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggMDIwODg3MC4uMTcxYzhhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC00MDUsMTggKzQwNSwxNiBAQAogCQkJc2t0LT52aXJ0X2lvID0gKHZvaWQgKikKIAkJCQkoaW9yZW1hcCgocGh5c190KUFVMVhfU09DSzBfSU8sIDB4MTAwMCkgLQogCQkJCSh1MzIpbWlwc19pb19wb3J0X2Jhc2UpOwotCQkJc2t0LT5waHlzX2F0dHIgPSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFI7Ci0JCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMF9QU0VVRE9fUEhZU19NRU07CisJCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzBfUEhZU19BVFRSOworCQkJc2t0LT5waHlzX21lbSA9IEFVMVhfU09DSzBfUEhZU19NRU07CiAJCX0KLSNpZm5kZWYgQ09ORklHX01JUFNfWFhTMTUwMAogCQllbHNlICB7CiAJCQlza3QtPnZpcnRfaW8gPSAodm9pZCAqKQogCQkJCShpb3JlbWFwKChwaHlzX3QpQVUxWF9TT0NLMV9JTywgMHgxMDAwKSAtCiAJCQkJKHUzMiltaXBzX2lvX3BvcnRfYmFzZSk7Ci0JCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUjsKLQkJCXNrdC0+cGh5c19tZW0gPSBBVTFYX1NPQ0sxX1BTRVVET19QSFlTX01FTTsKKwkJCXNrdC0+cGh5c19hdHRyID0gQVUxWF9TT0NLMV9QSFlTX0FUVFI7CisJCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMV9QSFlTX01FTTsKIAkJfQotI2VuZGlmCiAJCXBjbWNpYV9iYXNlX3ZhZGRyc1tpXSA9ICh1MzIgKilza3QtPnZpcnRfaW87CiAJCXJldCA9IG9wcy0+aHdfaW5pdChza3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCAxM2E0ZmJjLi5hMzI0ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTM2LDMwICszNiwxNCBAQAogI2RlZmluZSBBVTFYX1NPQ0swX0lPICAgICAgICAweEYwMDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfQVRUUiAweEY0MDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfTUVNICAweEY4MDAwMDAwMFVMTAotLyogcHNldWRvIDMyIGJpdCBwaHlzIGFkZHJlc3Nlcywgd2hpY2ggZ2V0IGZpeGVkIHVwIHRvIHRoZQotICogcmVhbCAzNiBiaXQgYWRkcmVzcyBpbiBmaXh1cF9iaWdwaHlzX2FkZHIoKSAqLwotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFIgMHhGNDAwMDAwMAotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX01FTSAgMHhGODAwMDAwMAogCiAvKiBwY21jaWEgc29ja2V0IDEgbmVlZHMgZXh0ZXJuYWwgZ2x1ZSBsb2dpYyBzbyB0aGUgbWVtb3J5IG1hcAogICogZGlmZmVycyBmcm9tIGJvYXJkIHRvIGJvYXJkLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxMTAwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjE1MDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCiAjZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg4MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0ODAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4ODAwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTUlQU19EQjEyMDApCi0jZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0NDAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4NDAwMDAwCiAjZW5kaWYKIAogc3RydWN0IHBjbWNpYV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKaW5kZXggYjE5ODRlZC4uNWE5NzljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogQWxjaGVteSBTZW1pIFBiMXgwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgorICogQWxjaGVteSBTZW1pIFBiMTAwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgogICoKICAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC00NiwyMCArNDYsMTEgQEAKIAogI2RlZmluZSBkZWJ1ZyhmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAjaW5jbHVkZSA8YXNtL3BiMTAwMC5oPgogI2RlZmluZSBQQ01DSUFfSVJRIEFVMTAwMF9HUElPXzE1Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTUlQU19QQjE1MDApCi0jaW5jbHVkZSA8YXNtL3BiMTUwMC5oPgotI2RlZmluZSBQQ01DSUFfSVJRIEFVMTUwMF9HUElPXzIwMwotI2VsaWYgZGVmaW5lZCAoQ09ORklHX01JUFNfUEIxMTAwKQotI2luY2x1ZGUgPGFzbS9wYjExMDAuaD4KLSNkZWZpbmUgUENNQ0lBX0lSUSBBVTEwMDBfR1BJT18xMQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9pbml0KHN0cnVjdCBwY21jaWFfaW5pdCAqaW5pdCkKIHsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKIAl1MTYgcGNyOwogCXBjciA9IFBDUl9TTE9UXzBfUlNUIHwgUENSX1NMT1RfMV9SU1Q7CiAKQEAgLTc0LDIxICs2NSwxMCBAQAogCWF1X3N5bmNfZGVsYXkoMjApOwogCSAgCiAJcmV0dXJuIFBDTUNJQV9OVU1fU09DS1M7Ci0KLSNlbHNlIC8qIGZpeG1lIC0tIHRha2UgY2FyZSBvZiB0aGUgUGIxNTAwIGF0IHNvbWUgcG9pbnQgKi8KLQotCXUxNiBwY3I7Ci0JcGNyID0gYXVfcmVhZHcoUENNQ0lBX0JPQVJEX1JFRykgJiB+MHhmOyAvKiB0dXJuIG9mZiBwb3dlciAqLwotCXBjciAmPSB+KFBDX0RFQVNTRVJUX1JTVCB8IFBDX0RSVl9FTik7Ci0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSg1MDApOwotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9zaHV0ZG93bih2b2lkKQogewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXUxNiBwY3I7CiAJcGNyID0gUENSX1NMT1RfMF9SU1QgfCBQQ1JfU0xPVF8xX1JTVDsKIAlwY3IgfD0gU0VUX1ZDQ19WUFAoVkNDX0hJWixWUFBfSElaLDApOwpAQCAtOTYsMTQgKzc2LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDIwKTsKIAlyZXR1cm4gMDsKLSNlbHNlCi0JdTE2IHBjcjsKLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7IC8qIHR1cm4gb2ZmIHBvd2VyICovCi0JcGNyICY9IH4oUENfREVBU1NFUlRfUlNUIHwgUENfRFJWX0VOKTsKLQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgCkBAIC0xMTIsMjEgKzg0LDExIEBACiAJdTMyIGluc2VydGVkMCwgaW5zZXJ0ZWQxOwogCXUxNiB2czAsIHZzMTsKIAotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXZzMCA9IHZzMSA9ICh1MTYpYXVfcmVhZGwoUEIxMDAwX0FDUjEpOwogCWluc2VydGVkMCA9ICEodnMwICYgKEFDUjFfU0xPVF8wX0NEMSB8IEFDUjFfU0xPVF8wX0NEMikpOwogCWluc2VydGVkMSA9ICEodnMxICYgKEFDUjFfU0xPVF8xX0NEMSB8IEFDUjFfU0xPVF8xX0NEMikpOwogCXZzMCA9ICh2czAgPj4gNCkgJiAweDM7CiAJdnMxID0gKHZzMSA+PiAxMikgJiAweDM7Ci0jZWxzZQotCXZzMCA9IChhdV9yZWFkdyhCT0FSRF9TVEFUVVNfUkVHKSA+PiA0KSAmIDB4MzsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1MDAKLQlpbnNlcnRlZDAgPSAhKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgPj4gMSkgJiAweDEpOyAvKiBncGlvIDIwMSAqLwotI2Vsc2UgLyogUGIxMTAwICovCi0JaW5zZXJ0ZWQwID0gISgoYXVfcmVhZGwoU1lTX1BJTlNUQVRFUkQpID4+IDkpICYgMHgxKTsgLyogZ3BpbyA5ICovCi0jZW5kaWYKLQlpbnNlcnRlZDEgPSAwOwotI2VuZGlmCiAKIAlzdGF0ZS0+cmVhZHkgPSAwOwogCXN0YXRlLT52c19YdiA9IDA7CkBAIC0yMDMsNyArMTY1LDYgQEAKIAogCWlmKGNvbmZpZ3VyZS0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAJcGNyID0gYXVfcmVhZGwoUEIxMDAwX1BDUik7CiAKIAlpZiAoY29uZmlndXJlLT5zb2NrID09IDApIHsKQEAgLTMyMyw4NCArMjg0LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDMwMCk7CiAKLSNlbHNlCi0KLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7Ci0KLQlkZWJ1ZygiVmNjICVkViBWcHAgJWRWLCBwY3IgJXgsIHJlc2V0ICVkXG4iLCAKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgcGNyLCBjb25maWd1cmUtPnJlc2V0KTsKLQotCi0Jc3dpdGNoKGNvbmZpZ3VyZS0+dmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTA6IC8qIFZjYyA1ViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMiwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDIsMSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMTI6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgyLDIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDMzOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMSwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDEsMik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzM6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgxLDEpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiB3aGF0J3MgdGhpcyA/ICovCi0JCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMCwwKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBWY2MgJWRcbiIsIAotCQkJCQlfX2Z1bmNfXywgY29uZmlndXJlLT52Y2MpOwotCQkJYnJlYWs7Ci0JfQotCi0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKCFjb25maWd1cmUtPnJlc2V0KSB7Ci0JCXBjciB8PSBQQ19EUlZfRU47Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCXBjciB8PSBQQ19ERUFTU0VSVF9SU1Q7Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JfQotCWVsc2UgewotCQlwY3IgJj0gfihQQ19ERUFTU0VSVF9SU1QgfCBQQ19EUlZfRU4pOwotCQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzZDQ3Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKgotICogTXlDYWJsZSBib2FyZCBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IFBldGUgUG9wb3YsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvYnVzX29wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vYXUxMDAwX3BjbWNpYS5oPgotCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSwkJMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTCShQQ01DSUFfTUFYX1NPQ0sgKyAxKQotI2RlZmluZSBQQ01DSUFfSVJRCQlBVTEwMDBfR1BJT180Ci0KLSNpZiAwCi0jZGVmaW5lIERFQlVHKHgsIGFyZ3MuLi4pCXByaW50ayhfX2Z1bmNfXyAiOiAiIHgsICMjYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKHgsYXJncy4uLikKLSNlbmRpZgotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2luaXQoc3RydWN0IHBjbWNpYV9pbml0ICppbml0KQotewotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotfQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NodXRkb3duKHZvaWQpCi17Ci0JLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDE0KXwoMTw8MzApLAotCQkJR1BJTzJfT1VUUFVUKTsKLQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0KLQkvKiBhc3NlcnQgcmVzZXQgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQlHUElPMl9PVVRQVVQpOwotCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci14eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUodW5zaWduZWQgc29jaywgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCi17Ci0JdTMyIGluc2VydGVkOyB1MzIgdnM7Ci0JdW5zaWduZWQgbG9uZyBncGlvLCBncGlvMjsKLQotCWlmKHNvY2sgPiBQQ01DSUFfTUFYX1NPQ0spIHJldHVybiAtMTsKLQotCWdwaW8gPSBhdV9yZWFkbChTWVNfUElOU1RBVEVSRCk7Ci0JZ3BpbzIgPSBhdV9yZWFkbChHUElPMl9QSU5TVEFURSk7Ci0KLQl2cyA9IGdwaW8yICYgKCgxPDw4KSB8ICgxPDw5KSk7Ci0JaW5zZXJ0ZWQgPSAoIShncGlvICYgMHgxKSAmJiAhKGdwaW8gJiAweDIpKTsKLQotCXN0YXRlLT5yZWFkeSA9IDA7Ci0Jc3RhdGUtPnZzX1h2ID0gMDsKLQlzdGF0ZS0+dnNfM3YgPSAwOwotCXN0YXRlLT5kZXRlY3QgPSAwOwotCi0JaWYgKGluc2VydGVkKSB7Ci0JCXN3aXRjaCAodnMpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMToKLQkJCWNhc2UgMjoKLQkJCQlzdGF0ZS0+dnNfM3Y9MTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzogLyogNVYgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogcmV0dXJuIHdpdGhvdXQgc2V0dGluZyAnZGV0ZWN0JyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiYXUxeDAwX2NzOiB1bnN1cHBvcnRlZCBWU1xuIiwKLQkJCQkJCXZzKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJc3RhdGUtPmRldGVjdCA9IDE7Ci0JfQotCi0JaWYgKHN0YXRlLT5kZXRlY3QpIHsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0KLQlzdGF0ZS0+YnZkMT0gZ3BpbzIgJiAoMTw8MTApOwotCXN0YXRlLT5idmQyID0gZ3BpbzIgJiAoMTw8MTEpOwotCXN0YXRlLT53cnByb3Q9MDsKLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2dldF9pcnFfaW5mbyhzdHJ1Y3QgcGNtY2lhX2lycV9pbmZvICppbmZvKQotewotCi0JaWYoaW5mby0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwotCWluZm8tPmlycSA9IFBDTUNJQV9JUlE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAoteHhzMTUwMF9wY21jaWFfY29uZmlndXJlX3NvY2tldChjb25zdCBzdHJ1Y3QgcGNtY2lhX2NvbmZpZ3VyZSAqY29uZmlndXJlKQotewotCi0JaWYoY29uZmlndXJlLT5zb2NrID4gUENNQ0lBX01BWF9TT0NLKSByZXR1cm4gLTE7Ci0KLQlERUJVRygiVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgY29uZmlndXJlLT5yZXNldCk7Ci0KLQlzd2l0Y2goY29uZmlndXJlLT52Y2MpewotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJLyogdHVybiBvbiBwb3dlciAqLwotCQkJREVCVUcoInR1cm4gb24gcG93ZXJcbiIpOwotCQkJYXVfd3JpdGVsKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgJiB+KDE8PDE0KSl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDUwOiAvKiBWY2MgNVYgKi8KLQkJZGVmYXVsdDogLyogd2hhdCdzIHRoaXMgPyAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJhdTF4MDBfY3M6IHVuc3VwcG9ydGVkIFZDQ1xuIik7Ci0JCWNhc2UgMDogIC8qIFZjYyAwICovCi0JCQkvKiB0dXJuIG9mZiBwb3dlciAqLwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQkJYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSB8ICgxPDwxNCl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWJyZWFrOwotCX0KLQotCWlmICghY29uZmlndXJlLT5yZXNldCkgewotCQlERUJVRygiZGVhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NCkpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NSkpfCgxPDwyMSksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JZWxzZSB7Ci0JCURFQlVHKCJhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JYXVfc3luY19kZWxheSgxMDApOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCB4eHMxNTAwX3BjbWNpYV9vcHMgPSB7Ci0JeHhzMTUwMF9wY21jaWFfaW5pdCwKLQl4eHMxNTAwX3BjbWNpYV9zaHV0ZG93biwKLQl4eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUsCi0JeHhzMTUwMF9wY21jaWFfZ2V0X2lycV9pbmZvLAotCXh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwppbmRleCAzMDBiMzY4Li4yNDgyY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCbGFja2ZpbiBDb21wYWN0Rmxhc2gvUENNQ0lBIFNvY2tldCBEcml2ZXJcbiIpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWlycSkKKwlpZiAoaXJxIDw9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2RfcGZ4ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsJLypDYXJkIERldGVjdCBHUElPIFBJTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IGQ5OWY4NDYuLmU2YWIyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTIwLDE3MCArMjAsMTIgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogT2Zmc2V0cyBpbiB0aGUgRXhwYW5zaW9uIFJPTSBJbWFnZSBIZWFkZXIgKi8KLSNkZWZpbmUgUk9NX1NJR05BVFVSRQkJMHgwMDAwCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUk9NX0RBVEFfUFRSCQkweDAwMTgJLyogMiBieXRlcyAqLwotCi0vKiBPZmZzZXRzIGluIHRoZSBDYXJkQnVzIFBDIENhcmQgRGF0YSBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgUENEQVRBX1NJR05BVFVSRQkweDAwMDAJLyogNCBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfVlBEX1BUUgkJMHgwMDA4CS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX0xFTkdUSAkJMHgwMDBhCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX1JFVklTSU9OCQkweDAwMGMKLSNkZWZpbmUgUENEQVRBX0lNQUdFX1NaCQkweDAwMTAJLyogMiBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfUk9NX0xFVkVMCTB4MDAxMgkvKiAyIGJ5dGVzICovCi0jZGVmaW5lIFBDREFUQV9DT0RFX1RZUEUJMHgwMDE0Ci0jZGVmaW5lIFBDREFUQV9JTkRJQ0FUT1IJMHgwMDE1Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBFeHBhbnNpb24gUk9NJ3MgaGF2ZSBhIHNwZWNpYWwgbGF5b3V0LCBhbmQgcG9pbnRlcnMgc3BlY2lmeSBhbgotICAgIGltYWdlIG51bWJlciBhbmQgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IGltYWdlLiAgeGxhdGVfcm9tX2FkZHIoKQotICAgIGNvbnZlcnRzIGFuIGltYWdlL29mZnNldCBhZGRyZXNzIHRvIGFuIGFic29sdXRlIG9mZnNldCBmcm9tIHRoZQotICAgIFJPTSdzIGJhc2UgYWRkcmVzcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHVfaW50IHhsYXRlX3JvbV9hZGRyKHZvaWQgX19pb21lbSAqYiwgdV9pbnQgYWRkcikKLXsKLQl1X2ludCBpbWcgPSAwLCBvZnMgPSAwLCBzejsKLQl1X3Nob3J0IGRhdGE7Ci0Jd2hpbGUgKChyZWFkYihiKSA9PSAweDU1KSAmJiAocmVhZGIoYiArIDEpID09IDB4YWEpKSB7Ci0JCWlmIChpbWcgPT0gKGFkZHIgPj4gMjgpKQotCQkJcmV0dXJuIChhZGRyICYgMHgwZmZmZmZmZikgKyBvZnM7Ci0JCWRhdGEgPSByZWFkYihiICsgUk9NX0RBVEFfUFRSKSArIChyZWFkYihiICsgUk9NX0RBVEFfUFRSICsgMSkgPDwgOCk7Ci0JCXN6ID0gNTEyICogKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaKSArCi0JCQkgICAgKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaICsgMSkgPDwgOCkpOwotCQlpZiAoKHN6ID09IDApIHx8IChyZWFkYihiICsgZGF0YSArIFBDREFUQV9JTkRJQ0FUT1IpICYgMHg4MCkpCi0JCQlicmVhazsKLQkJYiArPSBzejsKLQkJb2ZzICs9IHN6OwotCQlpbWcrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGVzZSBhcmUgc2ltaWxhciB0byBzZXR1cF9jaXNfbWVtIGFuZCByZWxlYXNlX2Npc19tZW0gZm9yIDE2LWJpdAotICAgIGNhcmRzLiAgVGhlICJyZXN1bHQiIHRoYXQgaXMgdXNlZCBleHRlcm5hbGx5IGlzIHRoZSBjYl9jaXNfdmlydAotICAgIHBvaW50ZXIgaW4gdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHN0cnVjdHVyZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgY2JfcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5jYl9jaXNfdmlydCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJjYl9yZWxlYXNlX2Npc19tZW0oKVxuIik7Ci0JCWlvdW5tYXAocy0+Y2JfY2lzX3ZpcnQpOwotCQlzLT5jYl9jaXNfdmlydCA9IE5VTEw7Ci0JCXMtPmNiX2Npc19yZXMgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBjYl9zZXR1cF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQl1bnNpZ25lZCBpbnQgc3RhcnQsIHNpemU7Ci0KLQlpZiAocmVzID09IHMtPmNiX2Npc19yZXMpCi0JCXJldHVybiAwOwotCi0JaWYgKHMtPmNiX2Npc19yZXMpCi0JCWNiX3JlbGVhc2VfY2lzX21lbShzKTsKLQotCXN0YXJ0ID0gcmVzLT5zdGFydDsKLQlzaXplID0gcmVzLT5lbmQgLSBzdGFydCArIDE7Ci0Jcy0+Y2JfY2lzX3ZpcnQgPSBpb3JlbWFwKHN0YXJ0LCBzaXplKTsKLQotCWlmICghcy0+Y2JfY2lzX3ZpcnQpCi0JCXJldHVybiAtMTsKLQotCXMtPmNiX2Npc19yZXMgPSByZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgQ0lTIHByb2Nlc3NpbmcgY29kZSB0byByZWFkIENJUyBpbmZvcm1hdGlvbgotICAgIGZyb20gYSBDYXJkQnVzIGRldmljZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgc3BhY2UsIHVfaW50IGFkZHIsIHVfaW50IGxlbiwKLQkJdm9pZCAqcHRyKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlkZXZfZGJnKCZzLT5kZXYsICJyZWFkX2NiX21lbSglZCwgJSN4LCAldSlcbiIsIHNwYWNlLCBhZGRyLCBsZW4pOwotCi0JZGV2ID0gcGNpX2dldF9zbG90KHMtPmNiX2Rldi0+c3Vib3JkaW5hdGUsIDApOwotCWlmICghZGV2KQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBDb25maWcgc3BhY2U/ICovCi0JaWYgKHNwYWNlID09IDApIHsKLQkJaWYgKGFkZHIgKyBsZW4gPiAweDEwMCkKLQkJCWdvdG8gZmFpbHB1dDsKLQkJZm9yICg7IGxlbjsgYWRkcisrLCBwdHIrKywgbGVuLS0pCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGFkZHIsIHB0cik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBzcGFjZSAtIDE7Ci0KLQlwY2lfZGV2X3B1dChkZXYpOwotCi0JaWYgKCFyZXMtPmZsYWdzKQotCQlnb3RvIGZhaWw7Ci0KLQlpZiAoY2Jfc2V0dXBfY2lzX21lbShzLCByZXMpICE9IDApCi0JCWdvdG8gZmFpbDsKLQotCWlmIChzcGFjZSA9PSA3KSB7Ci0JCWFkZHIgPSB4bGF0ZV9yb21fYWRkcihzLT5jYl9jaXNfdmlydCwgYWRkcik7Ci0JCWlmIChhZGRyID09IDApCi0JCQlnb3RvIGZhaWw7Ci0JfQotCi0JaWYgKGFkZHIgKyBsZW4gPiByZXMtPmVuZCAtIHJlcy0+c3RhcnQpCi0JCWdvdG8gZmFpbDsKLQotCW1lbWNweV9mcm9taW8ocHRyLCBzLT5jYl9jaXNfdmlydCArIGFkZHIsIGxlbik7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxwdXQ6Ci0JcGNpX2Rldl9wdXQoZGV2KTsKLWZhaWw6Ci0JbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBjYl9hbGxvYygpIGFuZCBjYl9mcmVlKCkgYWxsb2NhdGUgYW5kIGZyZWUgdGhlIGtlcm5lbCBkYXRhCi0gICAgc3RydWN0dXJlcyBmb3IgYSBDYXJkYnVzIGRldmljZSwgYW5kIGhhbmRsZSB0aGUgbG93ZXN0IGxldmVsIFBDSQotICAgIGRldmljZSBzZXR1cCBpc3N1ZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGNhcmRidXNfY29uZmlnX2lycV9hbmRfY2xzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBpcnEpCiB7CkBAIC0yMTUsNiArNTcsMTMgQEAKIAl9CiB9CiAKKy8qKgorICogY2JfYWxsb2MoKSAtIGFkZCBDYXJkQnVzIGRldmljZQorICogQHM6CQl0aGUgcGNtY2lhX3NvY2tldCB3aGVyZSB0aGUgQ2FyZEJ1cyBkZXZpY2UgaXMgbG9jYXRlZAorICoKKyAqIGNiX2FsbG9jKCkgYWxsb2NhdGVzIHRoZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIENhcmRidXMgZGV2aWNlCisgKiBhbmQgaGFuZGxlcyB0aGUgbG93ZXN0IGxldmVsIFBDSSBkZXZpY2Ugc2V0dXAgaXNzdWVzLgorICovCiBpbnQgX19yZWYgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHMtPmNiX2Rldi0+c3Vib3JkaW5hdGU7CkBAIC0yMjIsNyArNzEsNyBAQAogCXVuc2lnbmVkIGludCBtYXgsIHBhc3M7CiAKIAlzLT5mdW5jdGlvbnMgPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKDAsIDApKTsKLQlwY2lfZml4dXBfY2FyZGJ1cyhidXMpOyAKKwlwY2lfZml4dXBfY2FyZGJ1cyhidXMpOwogCiAJbWF4ID0gYnVzLT5zZWNvbmRhcnk7CiAJZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykKQEAgLTI0OSwxMiArOTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBjYl9mcmVlKCkgLSByZW1vdmUgQ2FyZEJ1cyBkZXZpY2UKKyAqIEBzOgkJdGhlIHBjbWNpYV9zb2NrZXQgd2hlcmUgdGhlIENhcmRCdXMgZGV2aWNlIHdhcyBsb2NhdGVkCisgKgorICogY2JfZnJlZSgpIGhhbmRsZXMgdGhlIGxvd2VzdCBsZXZlbCBQQ0kgZGV2aWNlIGNsZWFudXAuCisgKi8KIHZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gcy0+Y2JfZGV2OwogCi0JY2JfcmVsZWFzZV9jaXNfbWVtKHMpOwotCiAJaWYgKGJyaWRnZSkKIAkJcGNpX3JlbW92ZV9iZWhpbmRfYnJpZGdlKGJyaWRnZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDI1YjFjZDIuLmYyMzBmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC01NCw0MyArNTQsNDQgQEAKIC8qIFVwcGVyIGxpbWl0IG9uIHJlYXNvbmFibGUgIyBvZiB0dXBsZXMgKi8KICNkZWZpbmUgTUFYX1RVUExFUwkJMjAwCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBQYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHNldCB3aXRoICdpbnNtb2QnICovCi0KIC8qIDE2LWJpdCBDSVM/ICovCiBzdGF0aWMgaW50IGNpc193aWR0aDsKIG1vZHVsZV9wYXJhbShjaXNfd2lkdGgsIGludCwgMDQ0NCk7CiAKIHZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewotICAgIGlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgewotCXMtPmNpc19tZW0uZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7Ci0Jcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+Y2lzX21lbSk7Ci0JaWYgKHMtPmNpc19tZW0ucmVzKSB7Ci0JICAgIHJlbGVhc2VfcmVzb3VyY2Uocy0+Y2lzX21lbS5yZXMpOwotCSAgICBrZnJlZShzLT5jaXNfbWVtLnJlcyk7Ci0JICAgIHMtPmNpc19tZW0ucmVzID0gTlVMTDsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgeworCQlzLT5jaXNfbWVtLmZsYWdzICY9IH5NQVBfQUNUSVZFOworCQlzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT5jaXNfbWVtKTsKKwkJaWYgKHMtPmNpc19tZW0ucmVzKSB7CisJCQlyZWxlYXNlX3Jlc291cmNlKHMtPmNpc19tZW0ucmVzKTsKKwkJCWtmcmVlKHMtPmNpc19tZW0ucmVzKTsKKwkJCXMtPmNpc19tZW0ucmVzID0gTlVMTDsKKwkJfQorCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKKwkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwogCX0KLQlpb3VubWFwKHMtPmNpc192aXJ0KTsKLQlzLT5jaXNfdmlydCA9IE5VTEw7Ci0gICAgfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocmVsZWFzZV9jaXNfbWVtKTsKIAotLyoKLSAqIE1hcCB0aGUgY2FyZCBtZW1vcnkgYXQgImNhcmRfb2Zmc2V0IiBpbnRvIHZpcnR1YWwgc3BhY2UuCisvKioKKyAqIHNldF9jaXNfbWFwKCkgLSBtYXAgdGhlIGNhcmQgbWVtb3J5IGF0ICJjYXJkX29mZnNldCIgaW50byB2aXJ0dWFsIHNwYWNlLgorICoKICAqIElmIGZsYWdzICYgTUFQX0FUVFJJQiwgbWFwIHRoZSBhdHRyaWJ1dGUgc3BhY2UsIG90aGVyd2lzZQogICogbWFwIHRoZSBtZW1vcnkgc3BhY2UuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvcHNfbXV0ZXggaGVsZC4KICAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqCi1zZXRfY2lzX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGNhcmRfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZXRfY2lzX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQl1bnNpZ25lZCBpbnQgY2FyZF9vZmZzZXQsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlwY2NhcmRfbWVtX21hcCAqbWVtID0gJnMtPmNpc19tZW07CiAJaW50IHJldDsKIAogCWlmICghKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApICYmIChtZW0tPnJlcyA9PSBOVUxMKSkgewotCQltZW0tPnJlcyA9IHBjbWNpYV9maW5kX21lbV9yZWdpb24oMCwgcy0+bWFwX3NpemUsIHMtPm1hcF9zaXplLCAwLCBzKTsKKwkJbWVtLT5yZXMgPSBwY21jaWFfZmluZF9tZW1fcmVnaW9uKDAsIHMtPm1hcF9zaXplLAorCQkJCQkJcy0+bWFwX3NpemUsIDAsIHMpOwogCQlpZiAobWVtLT5yZXMgPT0gTlVMTCkgewogCQkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnMtPmRldiwKIAkJCQkgICAiY3M6IHVuYWJsZSB0byBtYXAgY2FyZCBtZW1vcnkhXG4iKTsKQEAgLTEyMSwxNzYgKzEyMiwyMDAgQEAKIAlyZXR1cm4gcy0+Y2lzX3ZpcnQ7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgTG93LWxldmVsIGZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSBDSVMgbWVtb3J5LiAgSSB0aGluayB0aGUKLSAgICB3cml0ZSByb3V0aW5lIGlzIG9ubHkgdXNlZnVsIGZvciB3cml0aW5nIG9uZS1ieXRlIHJlZ2lzdGVycy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIEJpdHMgaW4gYXR0ciBmaWVsZCAqLwogI2RlZmluZSBJU19BVFRSCQkxCiAjZGVmaW5lIElTX0lORElSRUNUCTgKIAorLyoqCisgKiBwY21jaWFfcmVhZF9jaXNfbWVtKCkgLSBsb3ctbGV2ZWwgZnVuY3Rpb24gdG8gcmVhZCBDSVMgbWVtb3J5CisgKi8KIGludCBwY21jaWFfcmVhZF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKIAkJIHVfaW50IGxlbiwgdm9pZCAqcHRyKQogewotICAgIHZvaWQgX19pb21lbSAqc3lzLCAqZW5kOwotICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHB0cjsKKwl2b2lkIF9faW9tZW0gKnN5cywgKmVuZDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBwdHI7CiAKLSAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVhZF9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKKwlkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVhZF9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKIAotICAgIGlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKLQkvKiBJbmRpcmVjdCBhY2Nlc3NlcyB1c2UgYSBidW5jaCBvZiBzcGVjaWFsIHJlZ2lzdGVycyBhdCBmaXhlZAotCSAgIGxvY2F0aW9ucyBpbiBjb21tb24gbWVtb3J5ICovCi0JdV9jaGFyIGZsYWdzID0gSUNUUkwwX0NPTU1PTnxJQ1RSTDBfQVVUT0lOQ3xJQ1RSTDBfQllURUdSQU47Ci0JaWYgKGF0dHIgJiBJU19BVFRSKSB7Ci0JICAgIGFkZHIgKj0gMjsKLQkgICAgZmxhZ3MgPSBJQ1RSTDBfQVVUT0lOQzsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKKwkJLyogSW5kaXJlY3QgYWNjZXNzZXMgdXNlIGEgYnVuY2ggb2Ygc3BlY2lhbCByZWdpc3RlcnMgYXQgZml4ZWQKKwkJICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KKwkJdV9jaGFyIGZsYWdzID0gSUNUUkwwX0NPTU1PTnxJQ1RSTDBfQVVUT0lOQ3xJQ1RSTDBfQllURUdSQU47CisJCWlmIChhdHRyICYgSVNfQVRUUikgeworCQkJYWRkciAqPSAyOworCQkJZmxhZ3MgPSBJQ1RSTDBfQVVUT0lOQzsKKwkJfQorCisJCXN5cyA9IHNldF9jaXNfbWFwKHMsIDAsIE1BUF9BQ1RJVkUgfAorCQkJCSgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKKwkJaWYgKCFzeXMpIHsKKwkJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKKwkJd3JpdGViKGFkZHIgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMCk7CisJCXdyaXRlYigoYWRkcj4+OCkgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMSk7CisJCXdyaXRlYigoYWRkcj4+MTYpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjIpOworCQl3cml0ZWIoKGFkZHI+PjI0KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIzKTsKKwkJZm9yICggOyBsZW4gPiAwOyBsZW4tLSwgYnVmKyspCisJCQkqYnVmID0gcmVhZGIoc3lzK0NJU1JFR19JREFUQTApOworCX0gZWxzZSB7CisJCXVfaW50IGluYyA9IDEsIGNhcmRfb2Zmc2V0LCBmbGFnczsKKworCQlpZiAoYWRkciA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCQlkZXZfZGJnKCZzLT5kZXYsCisJCQkJImF0dGVtcHQgdG8gcmVhZCBDSVMgbWVtIGF0IGFkZHIgJSN4IiwgYWRkcik7CisKKwkJZmxhZ3MgPSBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCk7CisJCWlmIChhdHRyKSB7CisJCQlmbGFncyB8PSBNQVBfQVRUUklCOworCQkJaW5jKys7CisJCQlhZGRyICo9IDI7CisJCX0KKworCQljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOworCQl3aGlsZSAobGVuKSB7CisJCQlzeXMgPSBzZXRfY2lzX21hcChzLCBjYXJkX29mZnNldCwgZmxhZ3MpOworCQkJaWYgKCFzeXMpIHsKKwkJCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCQkJbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CisJCQlzeXMgPSBzeXMgKyAoYWRkciAmIChzLT5tYXBfc2l6ZS0xKSk7CisJCQlmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKywgc3lzICs9IGluYykgeworCQkJCWlmIChzeXMgPT0gZW5kKQorCQkJCQlicmVhazsKKwkJCQkqYnVmID0gcmVhZGIoc3lzKTsKKwkJCX0KKwkJCWNhcmRfb2Zmc2V0ICs9IHMtPm1hcF9zaXplOworCQkJYWRkciA9IDA7CisJCX0KIAl9Ci0KLQlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwotCWlmICghc3lzKSB7Ci0JICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7Ci0JICAgIHJldHVybiAtMTsKLQl9Ci0KLQl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKLQl3cml0ZWIoYWRkciAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIwKTsKLQl3cml0ZWIoKGFkZHI+PjgpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjEpOwotCXdyaXRlYigoYWRkcj4+MTYpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjIpOwotCXdyaXRlYigoYWRkcj4+MjQpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjMpOwotCWZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrKQotCSAgICAqYnVmID0gcmVhZGIoc3lzK0NJU1JFR19JREFUQTApOwotICAgIH0gZWxzZSB7Ci0JdV9pbnQgaW5jID0gMSwgY2FyZF9vZmZzZXQsIGZsYWdzOwotCi0JZmxhZ3MgPSBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCk7Ci0JaWYgKGF0dHIpIHsKLQkgICAgZmxhZ3MgfD0gTUFQX0FUVFJJQjsKLQkgICAgaW5jKys7Ci0JICAgIGFkZHIgKj0gMjsKLQl9Ci0KLQljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOwotCXdoaWxlIChsZW4pIHsKLQkgICAgc3lzID0gc2V0X2Npc19tYXAocywgY2FyZF9vZmZzZXQsIGZsYWdzKTsKLQkgICAgaWYgKCFzeXMpIHsKLQkJbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQkJcmV0dXJuIC0xOwotCSAgICB9Ci0JICAgIGVuZCA9IHN5cyArIHMtPm1hcF9zaXplOwotCSAgICBzeXMgPSBzeXMgKyAoYWRkciAmIChzLT5tYXBfc2l6ZS0xKSk7Ci0JICAgIGZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrLCBzeXMgKz0gaW5jKSB7Ci0JCWlmIChzeXMgPT0gZW5kKQotCQkgICAgYnJlYWs7Ci0JCSpidWYgPSByZWFkYihzeXMpOwotCSAgICB9Ci0JICAgIGNhcmRfb2Zmc2V0ICs9IHMtPm1hcF9zaXplOwotCSAgICBhZGRyID0gMDsKLQl9Ci0gICAgfQotICAgIGRldl9kYmcoJnMtPmRldiwgIiAgJSMyLjJ4ICUjMi4yeCAlIzIuMnggJSMyLjJ4IC4uLlxuIiwKLQkgICoodV9jaGFyICopKHB0ciswKSwgKih1X2NoYXIgKikocHRyKzEpLAotCSAgKih1X2NoYXIgKikocHRyKzIpLCAqKHVfY2hhciAqKShwdHIrMykpOwotICAgIHJldHVybiAwOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXZfZGJnKCZzLT5kZXYsICIgICUjMi4yeCAlIzIuMnggJSMyLjJ4ICUjMi4yeCAuLi5cbiIsCisJCSoodV9jaGFyICopKHB0ciswKSwgKih1X2NoYXIgKikocHRyKzEpLAorCQkqKHVfY2hhciAqKShwdHIrMiksICoodV9jaGFyICopKHB0ciszKSk7CisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWFkX2Npc19tZW0pOwogCiAKKy8qKgorICogcGNtY2lhX3dyaXRlX2Npc19tZW0oKSAtIGxvdy1sZXZlbCBmdW5jdGlvbiB0byB3cml0ZSBDSVMgbWVtb3J5CisgKgorICogUHJvYmFibHkgb25seSB1c2VmdWwgZm9yIHdyaXRpbmcgb25lLWJ5dGUgcmVnaXN0ZXJzLgorICovCiB2b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKIAkJICAgdV9pbnQgbGVuLCB2b2lkICpwdHIpCiB7Ci0gICAgdm9pZCBfX2lvbWVtICpzeXMsICplbmQ7Ci0gICAgdW5zaWduZWQgY2hhciAqYnVmID0gcHRyOworCXZvaWQgX19pb21lbSAqc3lzLCAqZW5kOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHB0cjsKIAotICAgIGRldl9kYmcoJnMtPmRldiwgInBjbWNpYV93cml0ZV9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKKwlkZXZfZGJnKCZzLT5kZXYsCisJCSJwY21jaWFfd3JpdGVfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKLSAgICBpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7Ci0JLyogSW5kaXJlY3QgYWNjZXNzZXMgdXNlIGEgYnVuY2ggb2Ygc3BlY2lhbCByZWdpc3RlcnMgYXQgZml4ZWQKLQkgICBsb2NhdGlvbnMgaW4gY29tbW9uIG1lbW9yeSAqLwotCXVfY2hhciBmbGFncyA9IElDVFJMMF9DT01NT058SUNUUkwwX0FVVE9JTkN8SUNUUkwwX0JZVEVHUkFOOwotCWlmIChhdHRyICYgSVNfQVRUUikgewotCSAgICBhZGRyICo9IDI7Ci0JICAgIGZsYWdzID0gSUNUUkwwX0FVVE9JTkM7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7CisJCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCisJCSAgIGxvY2F0aW9ucyBpbiBjb21tb24gbWVtb3J5ICovCisJCXVfY2hhciBmbGFncyA9IElDVFJMMF9DT01NT058SUNUUkwwX0FVVE9JTkN8SUNUUkwwX0JZVEVHUkFOOworCQlpZiAoYXR0ciAmIElTX0FUVFIpIHsKKwkJCWFkZHIgKj0gMjsKKwkJCWZsYWdzID0gSUNUUkwwX0FVVE9JTkM7CisJCX0KKworCQlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwKKwkJCQkoKGNpc193aWR0aCkgPyBNQVBfMTZCSVQgOiAwKSk7CisJCWlmICghc3lzKSB7CisJCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQlyZXR1cm47IC8qIEZJWE1FOiBFcnJvciAqLworCQl9CisKKwkJd3JpdGViKGZsYWdzLCBzeXMrQ0lTUkVHX0lDVFJMMCk7CisJCXdyaXRlYihhZGRyICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjApOworCQl3cml0ZWIoKGFkZHI+PjgpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjEpOworCQl3cml0ZWIoKGFkZHI+PjE2KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIyKTsKKwkJd3JpdGViKChhZGRyPj4yNCkgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMyk7CisJCWZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrKQorCQkJd3JpdGViKCpidWYsIHN5cytDSVNSRUdfSURBVEEwKTsKKwl9IGVsc2UgeworCQl1X2ludCBpbmMgPSAxLCBjYXJkX29mZnNldCwgZmxhZ3M7CisKKwkJZmxhZ3MgPSBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCk7CisJCWlmIChhdHRyICYgSVNfQVRUUikgeworCQkJZmxhZ3MgfD0gTUFQX0FUVFJJQjsKKwkJCWluYysrOworCQkJYWRkciAqPSAyOworCQl9CisKKwkJY2FyZF9vZmZzZXQgPSBhZGRyICYgfihzLT5tYXBfc2l6ZS0xKTsKKwkJd2hpbGUgKGxlbikgeworCQkJc3lzID0gc2V0X2Npc19tYXAocywgY2FyZF9vZmZzZXQsIGZsYWdzKTsKKwkJCWlmICghc3lzKSB7CisJCQkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLworCQkJfQorCisJCQllbmQgPSBzeXMgKyBzLT5tYXBfc2l6ZTsKKwkJCXN5cyA9IHN5cyArIChhZGRyICYgKHMtPm1hcF9zaXplLTEpKTsKKwkJCWZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrLCBzeXMgKz0gaW5jKSB7CisJCQkJaWYgKHN5cyA9PSBlbmQpCisJCQkJCWJyZWFrOworCQkJCXdyaXRlYigqYnVmLCBzeXMpOworCQkJfQorCQkJY2FyZF9vZmZzZXQgKz0gcy0+bWFwX3NpemU7CisJCQlhZGRyID0gMDsKKwkJfQogCX0KLQotCXN5cyA9IHNldF9jaXNfbWFwKHMsIDAsIE1BUF9BQ1RJVkUgfCAoKGNpc193aWR0aCkgPyBNQVBfMTZCSVQgOiAwKSk7Ci0JaWYgKCFzeXMpCi0JCXJldHVybjsgLyogRklYTUU6IEVycm9yICovCi0KLQl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKLQl3cml0ZWIoYWRkciAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIwKTsKLQl3cml0ZWIoKGFkZHI+PjgpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjEpOwotCXdyaXRlYigoYWRkcj4+MTYpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjIpOwotCXdyaXRlYigoYWRkcj4+MjQpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjMpOwotCWZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrKQotCSAgICB3cml0ZWIoKmJ1Ziwgc3lzK0NJU1JFR19JREFUQTApOwotICAgIH0gZWxzZSB7Ci0JdV9pbnQgaW5jID0gMSwgY2FyZF9vZmZzZXQsIGZsYWdzOwotCi0JZmxhZ3MgPSBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCk7Ci0JaWYgKGF0dHIgJiBJU19BVFRSKSB7Ci0JICAgIGZsYWdzIHw9IE1BUF9BVFRSSUI7Ci0JICAgIGluYysrOwotCSAgICBhZGRyICo9IDI7Ci0JfQotCi0JY2FyZF9vZmZzZXQgPSBhZGRyICYgfihzLT5tYXBfc2l6ZS0xKTsKLQl3aGlsZSAobGVuKSB7Ci0JICAgIHN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7Ci0JICAgIGlmICghc3lzKQotCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLwotCi0JICAgIGVuZCA9IHN5cyArIHMtPm1hcF9zaXplOwotCSAgICBzeXMgPSBzeXMgKyAoYWRkciAmIChzLT5tYXBfc2l6ZS0xKSk7Ci0JICAgIGZvciAoIDsgbGVuID4gMDsgbGVuLS0sIGJ1ZisrLCBzeXMgKz0gaW5jKSB7Ci0JCWlmIChzeXMgPT0gZW5kKQotCQkgICAgYnJlYWs7Ci0JCXdyaXRlYigqYnVmLCBzeXMpOwotCSAgICB9Ci0JICAgIGNhcmRfb2Zmc2V0ICs9IHMtPm1hcF9zaXplOwotCSAgICBhZGRyID0gMDsKLQl9Ci0gICAgfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3dyaXRlX2Npc19tZW0pOwogCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWRfY2lzX21lbSwgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UsCi0gICAgYnV0IHdoaWNoIGNhY2hlcyBpbmZvcm1hdGlvbiwgZm9yIGNhcmRzIHdob3NlIENJUyBtYXkgbm90IGJlCi0gICAgcmVhZGFibGUgYWxsIHRoZSB0aW1lLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgcmVhZF9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAotCQkJICAgc2l6ZV90IGxlbiwgdm9pZCAqcHRyKQorLyoqCisgKiByZWFkX2Npc19jYWNoZSgpIC0gcmVhZCBDSVMgbWVtb3J5IG9yIGl0cyBhc3NvY2lhdGVkIGNhY2hlCisgKgorICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWRfY2lzX21lbSwgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UsCisgKiBidXQgd2hpY2ggY2FjaGVzIGluZm9ybWF0aW9uLCBmb3IgY2FyZHMgd2hvc2UgQ0lTIG1heSBub3QgYmUKKyAqIHJlYWRhYmxlIGFsbCB0aGUgdGltZS4KKyAqLworc3RhdGljIGludCByZWFkX2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCisJCQlzaXplX3QgbGVuLCB2b2lkICpwdHIpCiB7Ci0gICAgc3RydWN0IGNpc19jYWNoZV9lbnRyeSAqY2lzOwotICAgIGludCByZXQ7CisJc3RydWN0IGNpc19jYWNoZV9lbnRyeSAqY2lzOworCWludCByZXQgPSAwOwogCi0gICAgaWYgKHMtPmZha2VfY2lzKSB7Ci0JaWYgKHMtPmZha2VfY2lzX2xlbiA+PSBhZGRyK2xlbikKLQkgICAgbWVtY3B5KHB0ciwgcy0+ZmFrZV9jaXMrYWRkciwgbGVuKTsKLQllbHNlCi0JICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7Ci0JcmV0dXJuOwotICAgIH0KKwlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpcywgJnMtPmNpc19jYWNoZSwgbm9kZSkgewotCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKLQkgICAgbWVtY3B5KHB0ciwgY2lzLT5jYWNoZSwgbGVuKTsKLQkgICAgcmV0dXJuOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKHMtPmZha2VfY2lzKSB7CisJCWlmIChzLT5mYWtlX2Npc19sZW4gPj0gYWRkcitsZW4pCisJCQltZW1jcHkocHRyLCBzLT5mYWtlX2NpcythZGRyLCBsZW4pOworCQllbHNlIHsKKwkJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJcmV0dXJuIHJldDsKIAl9Ci0gICAgfQogCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKLQlyZXQgPSByZWFkX2NiX21lbShzLCBhdHRyLCBhZGRyLCBsZW4sIHB0cik7Ci0gICAgZWxzZQotI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpIHsKKwkJaWYgKGNpcy0+YWRkciA9PSBhZGRyICYmIGNpcy0+bGVuID09IGxlbiAmJiBjaXMtPmF0dHIgPT0gYXR0cikgeworCQkJbWVtY3B5KHB0ciwgY2lzLT5jYWNoZSwgbGVuKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwogCXJldCA9IHBjbWNpYV9yZWFkX2Npc19tZW0ocywgYXR0ciwgYWRkciwgbGVuLCBwdHIpOwogCiAJaWYgKHJldCA9PSAwKSB7CkBAIC0zMDEsOSArMzI2LDEyIEBACiAJCQljaXMtPmxlbiA9IGxlbjsKIAkJCWNpcy0+YXR0ciA9IGF0dHI7CiAJCQltZW1jcHkoY2lzLT5jYWNoZSwgcHRyLCBsZW4pOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWxpc3RfYWRkKCZjaXMtPm5vZGUsICZzLT5jaXNfY2FjaGUpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTEsNDQgKzMzOSw0NiBAQAogewogCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpCiAJCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKIAkJCWxpc3RfZGVsKCZjaXMtPm5vZGUpOwogCQkJa2ZyZWUoY2lzKTsKIAkJCWJyZWFrOwogCQl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogfQogCisvKioKKyAqIGRlc3Ryb3lfY2lzX2NhY2hlKCkgLSBkZXN0cm95IHRoZSBDSVMgY2FjaGUKKyAqIEBzOgkJcGNtY2lhX3NvY2tldCBmb3Igd2hpY2ggQ0lTIGNhY2hlIHNoYWxsIGJlIGRlc3Ryb3llZAorICoKKyAqIFRoaXMgZGVzdHJveXMgdGhlIENJUyBjYWNoZSBidXQga2VlcHMgYW55IGZha2UgQ0lTIGFsaXZlLiBNdXN0IGJlCisgKiBjYWxsZWQgd2l0aCBvcHNfbXV0ZXggaGVsZC4KKyAqLwogdm9pZCBkZXN0cm95X2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKKwlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJnMtPmNpc19jYWNoZSkgewotCQlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjaXNfY2FjaGVfZW50cnksIG5vZGUpOwotCisJCWNpcyA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNpc19jYWNoZV9lbnRyeSwgbm9kZSk7CiAJCWxpc3RfZGVsKCZjaXMtPm5vZGUpOwogCQlrZnJlZShjaXMpOwogCX0KLQotCS8qCi0JICogSWYgdGhlcmUgd2FzIGEgZmFrZSBDSVMsIGRlc3Ryb3kgdGhhdCBhcyB3ZWxsLgotCSAqLwotCWtmcmVlKHMtPmZha2VfY2lzKTsKLQlzLT5mYWtlX2NpcyA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKGRlc3Ryb3lfY2lzX2NhY2hlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGlzIHZlcmlmaWVzIGlmIHRoZSBDSVMgb2YgYSBjYXJkIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgQ0lTCi0gICAgY2FjaGUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCisvKioKKyAqIHZlcmlmeV9jaXNfY2FjaGUoKSAtIGRvZXMgdGhlIENJUyBtYXRjaCB3aGF0IGlzIGluIHRoZSBDSVMgY2FjaGU/CisgKi8KIGludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKIAljaGFyICpidWY7CisJaW50IHJldDsKKworCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ1ZiA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKQEAgLTM2MSwxNCArMzkxLDkgQEAKIAogCQlpZiAobGVuID4gMjU2KQogCQkJbGVuID0gMjU2OwotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKQotCQkJcmVhZF9jYl9tZW0ocywgY2lzLT5hdHRyLCBjaXMtPmFkZHIsIGxlbiwgYnVmKTsKLQkJZWxzZQotI2VuZGlmCi0JCQlwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7CiAKLQkJaWYgKG1lbWNtcChidWYsIGNpcy0+Y2FjaGUsIGxlbikgIT0gMCkgeworCQlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7CisJCWlmIChyZXQgfHwgbWVtY21wKGJ1ZiwgY2lzLT5jYWNoZSwgbGVuKSAhPSAwKSB7CiAJCQlrZnJlZShidWYpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC0zNzcsMTMgKzQwMiwxMiBAQAogCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIEZvciByZWFsbHkgYmFkIGNhcmRzLCB3ZSBwcm92aWRlIGEgZmFjaWxpdHkgZm9yIHVwbG9hZGluZyBhCi0gICAgcmVwbGFjZW1lbnQgQ0lTLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQorLyoqCisgKiBwY21jaWFfcmVwbGFjZV9jaXMoKSAtIHVzZSBhIHJlcGxhY2VtZW50IENJUyBpbnN0ZWFkIG9mIHRoZSBjYXJkJ3MgQ0lTCisgKgorICogRm9yIHJlYWxseSBiYWQgY2FyZHMsIHdlIHByb3ZpZGUgYSBmYWNpbGl0eSBmb3IgdXBsb2FkaW5nIGEKKyAqIHJlcGxhY2VtZW50IENJUy4KKyAqLwogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewpAQCAtMzkxLDI5ICs0MTUsMjggQEAKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJyZXBsYWNlbWVudCBDSVMgdG9vIGJpZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWtmcmVlKHMtPmZha2VfY2lzKTsKIAlzLT5mYWtlX2NpcyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAocy0+ZmFrZV9jaXMgPT0gTlVMTCkgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byByZXBsYWNlIENJU1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXMtPmZha2VfY2lzX2xlbiA9IGxlbjsKIAltZW1jcHkocy0+ZmFrZV9jaXMsIGRhdGEsIGxlbik7CisJZGV2X2luZm8oJnMtPmRldiwgIlVzaW5nIHJlcGxhY2VtZW50IENJU1xuIik7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVwbGFjZV9jaXMpOwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZSBoaWdoLWxldmVsIENJUyB0dXBsZSBzZXJ2aWNlcwotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFRoZSBoaWdoLWxldmVsIENJUyB0dXBsZSBzZXJ2aWNlcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB0dXBsZV9mbGFncyB7Ci0gICAgdV9pbnQJCWxpbmtfc3BhY2U6NDsKLSAgICB1X2ludAkJaGFzX2xpbms6MTsKLSAgICB1X2ludAkJbWZjX2ZuOjM7Ci0gICAgdV9pbnQJCXNwYWNlOjQ7CisJdV9pbnQJCWxpbmtfc3BhY2U6NDsKKwl1X2ludAkJaGFzX2xpbms6MTsKKwl1X2ludAkJbWZjX2ZuOjM7CisJdV9pbnQJCXNwYWNlOjQ7CiB9IHR1cGxlX2ZsYWdzOwogCiAjZGVmaW5lIExJTktfU1BBQ0UoZikJKCgodHVwbGVfZmxhZ3MgKikoJihmKSkpLT5saW5rX3NwYWNlKQpAQCAtNDIxLDEwOTkgKzQ0NCw5NjIgQEAKICNkZWZpbmUgTUZDX0ZOKGYpCSgoKHR1cGxlX2ZsYWdzICopKCYoZikpKS0+bWZjX2ZuKQogI2RlZmluZSBTUEFDRShmKQkoKCh0dXBsZV9mbGFncyAqKSgmKGYpKSktPnNwYWNlKQogCi1pbnQgcGNjYXJkX2dldF9maXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB0dXBsZV90ICp0dXBsZSkKK2ludCBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCisJCQl0dXBsZV90ICp0dXBsZSkKIHsKLSAgICBpZiAoIXMpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JcmV0dXJuIC1FTk9ERVY7Ci0gICAgdHVwbGUtPlR1cGxlTGluayA9IHR1cGxlLT5GbGFncyA9IDA7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBzLT5jYl9kZXY7Ci0JdV9pbnQgcHRyOwotCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5zdWJvcmRpbmF0ZSwgMCwgUENJX0NBUkRCVVNfQ0lTLCAmcHRyKTsKLQl0dXBsZS0+Q0lTT2Zmc2V0ID0gcHRyICYgfjc7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChwdHIgJiA3KTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgfHwgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl0dXBsZS0+VHVwbGVMaW5rID0gdHVwbGUtPkZsYWdzID0gMDsKKwogCS8qIEFzc3VtZSBwcmVzZW5jZSBvZiBhIExPTkdMSU5LX0MgdG8gYWRkcmVzcyAwICovCiAJdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKIAlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7Ci0gICAgfQotICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChzLT5mdW5jdGlvbnMgPiAxKSAmJgotCSEodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fQ09NTU9OKSkgewotCWNpc2RhdGFfdCByZXEgPSB0dXBsZS0+RGVzaXJlZFR1cGxlOwotCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwotCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSA9PSAwKSB7Ci0JICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTElOS1RBUkdFVDsKLQkgICAgaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpICE9IDApCi0JCXJldHVybiAtRU5PU1BDOwotCX0gZWxzZQotCSAgICB0dXBsZS0+Q0lTT2Zmc2V0ID0gdHVwbGUtPlR1cGxlTGluayA9IDA7Ci0JdHVwbGUtPkRlc2lyZWRUdXBsZSA9IHJlcTsKLSAgICB9Ci0gICAgcmV0dXJuIHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCisJaWYgKChzLT5mdW5jdGlvbnMgPiAxKSAmJiAhKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0NPTU1PTikpIHsKKwkJY2lzZGF0YV90IHJlcSA9IHR1cGxlLT5EZXNpcmVkVHVwbGU7CisJCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOworCQlpZiAocGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSkgPT0gMCkgeworCQkJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MSU5LVEFSR0VUOworCQkJaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpICE9IDApCisJCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0gZWxzZQorCQkJdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5UdXBsZUxpbmsgPSAwOworCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gcmVxOworCX0KKwlyZXR1cm4gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUpOwogCiBzdGF0aWMgaW50IGZvbGxvd19saW5rKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKLSAgICB1X2NoYXIgbGlua1s1XTsKLSAgICB1X2ludCBvZnM7CisJdV9jaGFyIGxpbmtbNV07CisJdV9pbnQgb2ZzOworCWludCByZXQ7CiAKLSAgICBpZiAoTUZDX0ZOKHR1cGxlLT5GbGFncykpIHsKLQkvKiBHZXQgaW5kaXJlY3QgbGluayBmcm9tIHRoZSBNRkMgdHVwbGUgKi8KLQlyZWFkX2Npc19jYWNoZShzLCBMSU5LX1NQQUNFKHR1cGxlLT5GbGFncyksCi0JCSAgICAgICB0dXBsZS0+TGlua09mZnNldCwgNSwgbGluayk7Ci0Jb2ZzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGxpbmsgKyAxKTsKLQlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gKGxpbmtbMF0gPT0gQ0lTVFBMX01GQ19BVFRSKTsKLQkvKiBNb3ZlIHRvIHRoZSBuZXh0IGluZGlyZWN0IGxpbmsgKi8KLQl0dXBsZS0+TGlua09mZnNldCArPSA1OwotCU1GQ19GTih0dXBsZS0+RmxhZ3MpLS07Ci0gICAgfSBlbHNlIGlmIChIQVNfTElOSyh0dXBsZS0+RmxhZ3MpKSB7Ci0Jb2ZzID0gdHVwbGUtPkxpbmtPZmZzZXQ7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKTsKLQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMDsKLSAgICB9IGVsc2UgewotCXJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgJiYgU1BBQ0UodHVwbGUtPkZsYWdzKSkgewotCS8qIFRoaXMgaXMgdWdseSwgYnV0IGEgY29tbW9uIENJUyBlcnJvciBpcyB0byBjb2RlIHRoZSBsb25nCi0JICAgbGluayBvZmZzZXQgaW5jb3JyZWN0bHksIHNvIHdlIGNoZWNrIHRoZSByaWdodCBzcG90Li4uICovCi0JcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKLQlpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpICYmIChsaW5rWzFdID49IDMpICYmCi0JICAgIChzdHJuY21wKGxpbmsrMiwgIkNJUyIsIDMpID09IDApKQotCSAgICByZXR1cm4gb2ZzOwotCXJlbW92ZV9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1KTsKLQkvKiBUaGVuLCB3ZSB0cnkgdGhlIHdyb25nIHNwb3QuLi4gKi8KLQlvZnMgPSBvZnMgPj4gMTsKLSAgICB9Ci0gICAgcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKLSAgICBpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpICYmIChsaW5rWzFdID49IDMpICYmCi0JKHN0cm5jbXAobGluaysyLCAiQ0lTIiwgMykgPT0gMCkpCi0JcmV0dXJuIG9mczsKLSAgICByZW1vdmVfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgcGNjYXJkX2dldF9uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHR1cGxlX3QgKnR1cGxlKQotewotICAgIHVfY2hhciBsaW5rWzJdLCB0bXA7Ci0gICAgaW50IG9mcywgaSwgYXR0cjsKLQotICAgIGlmICghcykKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQlyZXR1cm4gLUVOT0RFVjsKLQotICAgIGxpbmtbMV0gPSB0dXBsZS0+VHVwbGVMaW5rOwotICAgIG9mcyA9IHR1cGxlLT5DSVNPZmZzZXQgKyB0dXBsZS0+VHVwbGVMaW5rOwotICAgIGF0dHIgPSBTUEFDRSh0dXBsZS0+RmxhZ3MpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IE1BWF9UVVBMRVM7IGkrKykgewotCWlmIChsaW5rWzFdID09IDB4ZmYpIHsKLQkgICAgbGlua1swXSA9IENJU1RQTF9FTkQ7Ci0JfSBlbHNlIHsKLQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKLQkgICAgaWYgKGxpbmtbMF0gPT0gQ0lTVFBMX05VTEwpIHsKLQkJb2ZzKys7IGNvbnRpbnVlOwotCSAgICB9Ci0JfQotCi0JLyogRW5kIG9mIGNoYWluPyAgRm9sbG93IGxvbmcgbGluayBpZiBwb3NzaWJsZSAqLwotCWlmIChsaW5rWzBdID09IENJU1RQTF9FTkQpIHsKLQkgICAgb2ZzID0gZm9sbG93X2xpbmsocywgdHVwbGUpOwotCSAgICBpZiAob2ZzIDwgMCkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JICAgIGF0dHIgPSBTUEFDRSh0dXBsZS0+RmxhZ3MpOwotCSAgICByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOwotCX0KLQotCS8qIElzIHRoaXMgYSBsaW5rIHR1cGxlPyAgTWFrZSBhIG5vdGUgb2YgaXQgKi8KLQlpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xPTkdMSU5LX0EpIHx8Ci0JICAgIChsaW5rWzBdID09IENJU1RQTF9MT05HTElOS19DKSB8fAotCSAgICAobGlua1swXSA9PSBDSVNUUExfTE9OR0xJTktfTUZDKSB8fAotCSAgICAobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgfHwKLQkgICAgKGxpbmtbMF0gPT0gQ0lTVFBMX0lORElSRUNUKSB8fAotCSAgICAobGlua1swXSA9PSBDSVNUUExfTk9fTElOSykpIHsKLQkgICAgc3dpdGNoIChsaW5rWzBdKSB7Ci0JICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX0E6Ci0JCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwotCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyIHwgSVNfQVRUUjsKLQkJcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDQsICZ0dXBsZS0+TGlua09mZnNldCk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIENJU1RQTF9MT05HTElOS19DOgotCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKLQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0ciAmIH5JU19BVFRSOwotCQlyZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwgJnR1cGxlLT5MaW5rT2Zmc2V0KTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgQ0lTVFBMX0lORElSRUNUOgotCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKLQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gSVNfQVRUUiB8IElTX0lORElSRUNUOwotCQl0dXBsZS0+TGlua09mZnNldCA9IDA7Ci0JCWJyZWFrOwotCSAgICBjYXNlIENJU1RQTF9MT05HTElOS19NRkM6Ci0JCXR1cGxlLT5MaW5rT2Zmc2V0ID0gb2ZzICsgMzsKLQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0cjsKLQkJaWYgKGZ1bmN0aW9uID09IEJJTkRfRk5fQUxMKSB7Ci0JCSAgICAvKiBGb2xsb3cgYWxsIHRoZSBNRkMgbGlua3MgKi8KLQkJICAgIHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCAxLCAmdG1wKTsKLQkJICAgIE1GQ19GTih0dXBsZS0+RmxhZ3MpID0gdG1wOwotCQl9IGVsc2UgewotCQkgICAgLyogRm9sbG93IGV4YWN0bHkgb25lIG9mIHRoZSBsaW5rcyAqLwotCQkgICAgTUZDX0ZOKHR1cGxlLT5GbGFncykgPSAxOwotCQkgICAgdHVwbGUtPkxpbmtPZmZzZXQgKz0gZnVuY3Rpb24gKiA1OwotCQl9Ci0JCWJyZWFrOwotCSAgICBjYXNlIENJU1RQTF9OT19MSU5LOgorCWlmIChNRkNfRk4odHVwbGUtPkZsYWdzKSkgeworCQkvKiBHZXQgaW5kaXJlY3QgbGluayBmcm9tIHRoZSBNRkMgdHVwbGUgKi8KKwkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpLAorCQkJCXR1cGxlLT5MaW5rT2Zmc2V0LCA1LCBsaW5rKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwkJb2ZzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGxpbmsgKyAxKTsKKwkJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChsaW5rWzBdID09IENJU1RQTF9NRkNfQVRUUik7CisJCS8qIE1vdmUgdG8gdGhlIG5leHQgaW5kaXJlY3QgbGluayAqLworCQl0dXBsZS0+TGlua09mZnNldCArPSA1OworCQlNRkNfRk4odHVwbGUtPkZsYWdzKS0tOworCX0gZWxzZSBpZiAoSEFTX0xJTksodHVwbGUtPkZsYWdzKSkgeworCQlvZnMgPSB0dXBsZS0+TGlua09mZnNldDsKKwkJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKTsKIAkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDA7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlmICgodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fTElOSykgJiYKLQkJKHR1cGxlLT5EZXNpcmVkVHVwbGUgPT0gUkVUVVJOX0ZJUlNUX1RVUExFKSkKLQkJYnJlYWs7CiAJfSBlbHNlCi0JICAgIGlmICh0dXBsZS0+RGVzaXJlZFR1cGxlID09IFJFVFVSTl9GSVJTVF9UVVBMRSkKLQkJYnJlYWs7CisJCXJldHVybiAtMTsKIAotCWlmIChsaW5rWzBdID09IHR1cGxlLT5EZXNpcmVkVHVwbGUpCi0JICAgIGJyZWFrOwotCW9mcyArPSBsaW5rWzFdICsgMjsKLSAgICB9Ci0gICAgaWYgKGkgPT0gTUFYX1RVUExFUykgewotCWRldl9kYmcoJnMtPmRldiwgImNzOiBvdmVycnVuIGluIHBjbWNpYV9nZXRfbmV4dF90dXBsZVxuIik7Ci0JcmV0dXJuIC1FTk9TUEM7Ci0gICAgfQotCi0gICAgdHVwbGUtPlR1cGxlQ29kZSA9IGxpbmtbMF07Ci0gICAgdHVwbGUtPlR1cGxlTGluayA9IGxpbmtbMV07Ci0gICAgdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7Ci0gICAgcmV0dXJuIDA7CisJaWYgKFNQQUNFKHR1cGxlLT5GbGFncykpIHsKKwkJLyogVGhpcyBpcyB1Z2x5LCBidXQgYSBjb21tb24gQ0lTIGVycm9yIGlzIHRvIGNvZGUgdGhlIGxvbmcKKwkJICAgbGluayBvZmZzZXQgaW5jb3JyZWN0bHksIHNvIHdlIGNoZWNrIHRoZSByaWdodCBzcG90Li4uICovCisJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLTE7CisJCWlmICgobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgJiYgKGxpbmtbMV0gPj0gMykgJiYKKwkJCShzdHJuY21wKGxpbmsrMiwgIkNJUyIsIDMpID09IDApKQorCQkJcmV0dXJuIG9mczsKKwkJcmVtb3ZlX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUpOworCQkvKiBUaGVuLCB3ZSB0cnkgdGhlIHdyb25nIHNwb3QuLi4gKi8KKwkJb2ZzID0gb2ZzID4+IDE7CisJfQorCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCWlmICgobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgJiYgKGxpbmtbMV0gPj0gMykgJiYKKwkJKHN0cm5jbXAobGluaysyLCAiQ0lTIiwgMykgPT0gMCkpCisJCXJldHVybiBvZnM7CisJcmVtb3ZlX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUpOworCXJldHVybiAtMTsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF9uZXh0X3R1cGxlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitpbnQgcGNjYXJkX2dldF9uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCisJCQl0dXBsZV90ICp0dXBsZSkKK3sKKwl1X2NoYXIgbGlua1syXSwgdG1wOworCWludCBvZnMsIGksIGF0dHI7CisJaW50IHJldDsKIAotI2RlZmluZSBfTUlOKGEsIGIpCQkoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB8fCAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpCisJCXJldHVybiAtRU5PREVWOworCisJbGlua1sxXSA9IHR1cGxlLT5UdXBsZUxpbms7CisJb2ZzID0gdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZUxpbms7CisJYXR0ciA9IFNQQUNFKHR1cGxlLT5GbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RVUExFUzsgaSsrKSB7CisJCWlmIChsaW5rWzFdID09IDB4ZmYpCisJCQlsaW5rWzBdID0gQ0lTVFBMX0VORDsKKwkJZWxzZSB7CisJCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAobGlua1swXSA9PSBDSVNUUExfTlVMTCkgeworCQkJCW9mcysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyogRW5kIG9mIGNoYWluPyAgRm9sbG93IGxvbmcgbGluayBpZiBwb3NzaWJsZSAqLworCQlpZiAobGlua1swXSA9PSBDSVNUUExfRU5EKSB7CisJCQlvZnMgPSBmb2xsb3dfbGluayhzLCB0dXBsZSk7CisJCQlpZiAob2ZzIDwgMCkKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCWF0dHIgPSBTUEFDRSh0dXBsZS0+RmxhZ3MpOworCQkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogSXMgdGhpcyBhIGxpbmsgdHVwbGU/ICBNYWtlIGEgbm90ZSBvZiBpdCAqLworCQlpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xPTkdMSU5LX0EpIHx8CisJCQkobGlua1swXSA9PSBDSVNUUExfTE9OR0xJTktfQykgfHwKKwkJCShsaW5rWzBdID09IENJU1RQTF9MT05HTElOS19NRkMpIHx8CisJCQkobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgfHwKKwkJCShsaW5rWzBdID09IENJU1RQTF9JTkRJUkVDVCkgfHwKKwkJCShsaW5rWzBdID09IENJU1RQTF9OT19MSU5LKSkgeworCQkJc3dpdGNoIChsaW5rWzBdKSB7CisJCQljYXNlIENJU1RQTF9MT05HTElOS19BOgorCQkJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOworCQkJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHIgfCBJU19BVFRSOworCQkJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LAorCQkJCQkJJnR1cGxlLT5MaW5rT2Zmc2V0KTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gLTE7CisJCQkJYnJlYWs7CisJCQljYXNlIENJU1RQTF9MT05HTElOS19DOgorCQkJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOworCQkJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHIgJiB+SVNfQVRUUjsKKwkJCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwKKwkJCQkJCSZ0dXBsZS0+TGlua09mZnNldCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWJyZWFrOworCQkJY2FzZSBDSVNUUExfSU5ESVJFQ1Q6CisJCQkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7CisJCQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gSVNfQVRUUiB8CisJCQkJCUlTX0lORElSRUNUOworCQkJCXR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0lTVFBMX0xPTkdMSU5LX01GQzoKKwkJCQl0dXBsZS0+TGlua09mZnNldCA9IG9mcyArIDM7CisJCQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0cjsKKwkJCQlpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpIHsKKwkJCQkJLyogRm9sbG93IGFsbCB0aGUgTUZDIGxpbmtzICovCisJCQkJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLAorCQkJCQkJCTEsICZ0bXApOworCQkJCQlpZiAocmV0KQorCQkJCQkJcmV0dXJuIC0xOworCQkJCQlNRkNfRk4odHVwbGUtPkZsYWdzKSA9IHRtcDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBGb2xsb3cgZXhhY3RseSBvbmUgb2YgdGhlIGxpbmtzICovCisJCQkJCU1GQ19GTih0dXBsZS0+RmxhZ3MpID0gMTsKKwkJCQkJdHVwbGUtPkxpbmtPZmZzZXQgKz0gZnVuY3Rpb24gKiA1OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQ0lTVFBMX05PX0xJTks6CisJCQkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0xJTkspICYmCisJCQkJKHR1cGxlLT5EZXNpcmVkVHVwbGUgPT0gUkVUVVJOX0ZJUlNUX1RVUExFKSkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQlpZiAodHVwbGUtPkRlc2lyZWRUdXBsZSA9PSBSRVRVUk5fRklSU1RfVFVQTEUpCisJCQkJYnJlYWs7CisKKwkJaWYgKGxpbmtbMF0gPT0gdHVwbGUtPkRlc2lyZWRUdXBsZSkKKwkJCWJyZWFrOworCQlvZnMgKz0gbGlua1sxXSArIDI7CisJfQorCWlmIChpID09IE1BWF9UVVBMRVMpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiY3M6IG92ZXJydW4gaW4gcGNtY2lhX2dldF9uZXh0X3R1cGxlXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJdHVwbGUtPlR1cGxlQ29kZSA9IGxpbmtbMF07CisJdHVwbGUtPlR1cGxlTGluayA9IGxpbmtbMV07CisJdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7CisJcmV0dXJuIDA7Cit9CiAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKQogewotICAgIHVfaW50IGxlbjsKKwl1X2ludCBsZW47CisJaW50IHJldDsKIAotICAgIGlmICghcykKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKHR1cGxlLT5UdXBsZUxpbmsgPCB0dXBsZS0+VHVwbGVPZmZzZXQpCi0JcmV0dXJuIC1FTk9TUEM7Ci0gICAgbGVuID0gdHVwbGUtPlR1cGxlTGluayAtIHR1cGxlLT5UdXBsZU9mZnNldDsKLSAgICB0dXBsZS0+VHVwbGVEYXRhTGVuID0gdHVwbGUtPlR1cGxlTGluazsKLSAgICBpZiAobGVuID09IDApCisJaWYgKHR1cGxlLT5UdXBsZUxpbmsgPCB0dXBsZS0+VHVwbGVPZmZzZXQpCisJCXJldHVybiAtRU5PU1BDOworCWxlbiA9IHR1cGxlLT5UdXBsZUxpbmsgLSB0dXBsZS0+VHVwbGVPZmZzZXQ7CisJdHVwbGUtPlR1cGxlRGF0YUxlbiA9IHR1cGxlLT5UdXBsZUxpbms7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLAorCQkJdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZU9mZnNldCwKKwkJCW1pbihsZW4sICh1X2ludCkgdHVwbGUtPlR1cGxlRGF0YU1heCksCisJCQl0dXBsZS0+VHVwbGVEYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7Ci0gICAgcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwKLQkJICAgdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZU9mZnNldCwKLQkJICAgX01JTihsZW4sIHR1cGxlLT5UdXBsZURhdGFNYXgpLCB0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICByZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF90dXBsZV9kYXRhKTsKIAogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFBhcnNpbmcgcm91dGluZXMgZm9yIGluZGl2aWR1YWwgdHVwbGVzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUGFyc2luZyByb3V0aW5lcyBmb3IgaW5kaXZpZHVhbCB0dXBsZXMgKi8KIAogc3RhdGljIGludCBwYXJzZV9kZXZpY2UodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9kZXZpY2VfdCAqZGV2aWNlKQogewotICAgIGludCBpOwotICAgIHVfY2hhciBzY2FsZTsKLSAgICB1X2NoYXIgKnAsICpxOworCWludCBpOworCXVfY2hhciBzY2FsZTsKKwl1X2NoYXIgKnAsICpxOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCi0gICAgZGV2aWNlLT5uZGV2ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgQ0lTVFBMX01BWF9ERVZJQ0VTOyBpKyspIHsKKwlkZXZpY2UtPm5kZXYgPSAwOworCWZvciAoaSA9IDA7IGkgPCBDSVNUUExfTUFYX0RFVklDRVM7IGkrKykgewogCi0JaWYgKCpwID09IDB4ZmYpCi0JCWJyZWFrOwotCWRldmljZS0+ZGV2W2ldLnR5cGUgPSAoKnAgPj4gNCk7Ci0JZGV2aWNlLT5kZXZbaV0ud3AgPSAoKnAgJiAweDA4KSA/IDEgOiAwOwotCXN3aXRjaCAoKnAgJiAweDA3KSB7Ci0JY2FzZSAwOgotCQlkZXZpY2UtPmRldltpXS5zcGVlZCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyNTA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyMDA7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJaWYgKCsrcCA9PSBxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gU1BFRURfQ1ZUKCpwKTsKLQkJd2hpbGUgKCpwICYgMHg4MCkKKwkJaWYgKCpwID09IDB4ZmYpCisJCQlicmVhazsKKwkJZGV2aWNlLT5kZXZbaV0udHlwZSA9ICgqcCA+PiA0KTsKKwkJZGV2aWNlLT5kZXZbaV0ud3AgPSAoKnAgJiAweDA4KSA/IDEgOiAwOworCQlzd2l0Y2ggKCpwICYgMHgwNykgeworCQljYXNlIDA6CisJCQlkZXZpY2UtPmRldltpXS5zcGVlZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyNTA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyMDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7CisJCQlicmVhazsKKwkJY2FzZSA3OgogCQkJaWYgKCsrcCA9PSBxKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gU1BFRURfQ1ZUKCpwKTsKKwkJCXdoaWxlICgqcCAmIDB4ODApCisJCQkJaWYgKCsrcCA9PSBxKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCpwID09IDB4ZmYpCisJCQlicmVhazsKKwkJc2NhbGUgPSAqcCAmIDc7CisJCWlmIChzY2FsZSA9PSA3KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRldmljZS0+ZGV2W2ldLnNpemUgPSAoKCpwID4+IDMpICsgMSkgKiAoNTEyIDw8IChzY2FsZSoyKSk7CisJCWRldmljZS0+bmRldisrOworCQlpZiAoKytwID09IHEpCisJCQlicmVhazsKIAl9CiAKLQlpZiAoKytwID09IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgqcCA9PSAweGZmKQotCQlicmVhazsKLQlzY2FsZSA9ICpwICYgNzsKLQlpZiAoc2NhbGUgPT0gNykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGV2aWNlLT5kZXZbaV0uc2l6ZSA9ICgoKnAgPj4gMykgKyAxKSAqICg1MTIgPDwgKHNjYWxlKjIpKTsKLQlkZXZpY2UtPm5kZXYrKzsKLQlpZiAoKytwID09IHEpCi0JCWJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9jaGVja3N1bSh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2NoZWNrc3VtX3QgKmNzdW0pCiB7Ci0gICAgdV9jaGFyICpwOwotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNSkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBwID0gKHVfY2hhciAqKSB0dXBsZS0+VHVwbGVEYXRhOwotICAgIGNzdW0tPmFkZHIgPSB0dXBsZS0+Q0lTT2Zmc2V0ICsgZ2V0X3VuYWxpZ25lZF9sZTE2KHApIC0gMjsKLSAgICBjc3VtLT5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArIDIpOwotICAgIGNzdW0tPnN1bSA9ICoocCArIDQpOwotICAgIHJldHVybiAwOworCXVfY2hhciAqcDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDUpCisJCXJldHVybiAtRUlOVkFMOworCXAgPSAodV9jaGFyICopIHR1cGxlLT5UdXBsZURhdGE7CisJY3N1bS0+YWRkciA9IHR1cGxlLT5DSVNPZmZzZXQgKyBnZXRfdW5hbGlnbmVkX2xlMTYocCkgLSAyOworCWNzdW0tPmxlbiA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMik7CisJY3N1bS0+c3VtID0gKihwICsgNCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX2xvbmdsaW5rKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfbG9uZ2xpbmtfdCAqbGluaykKIHsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgbGluay0+YWRkciA9IGdldF91bmFsaWduZWRfbGUzMih0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCisJCXJldHVybiAtRUlOVkFMOworCWxpbmstPmFkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIodHVwbGUtPlR1cGxlRGF0YSk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHBhcnNlX2xvbmdsaW5rX21mYyh0dXBsZV90ICp0dXBsZSwKLQkJCSAgICAgIGNpc3RwbF9sb25nbGlua19tZmNfdCAqbGluaykKK3N0YXRpYyBpbnQgcGFyc2VfbG9uZ2xpbmtfbWZjKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfbG9uZ2xpbmtfbWZjX3QgKmxpbmspCiB7Ci0gICAgdV9jaGFyICpwOwotICAgIGludCBpOworCXVfY2hhciAqcDsKKwlpbnQgaTsKIAotICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CiAKLSAgICBsaW5rLT5uZm4gPSAqcDsgcCsrOwotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDw9IGxpbmstPm5mbio1KQotCXJldHVybiAtRUlOVkFMOwotICAgIGZvciAoaSA9IDA7IGkgPCBsaW5rLT5uZm47IGkrKykgewotCWxpbmstPmZuW2ldLnNwYWNlID0gKnA7IHArKzsKLQlsaW5rLT5mbltpXS5hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwotCXAgKz0gNDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJbGluay0+bmZuID0gKnA7IHArKzsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8PSBsaW5rLT5uZm4qNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IGxpbmstPm5mbjsgaSsrKSB7CisJCWxpbmstPmZuW2ldLnNwYWNlID0gKnA7IHArKzsKKwkJbGluay0+Zm5baV0uYWRkciA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKKwkJcCArPSA0OworCX0KKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2Vfc3RyaW5ncyh1X2NoYXIgKnAsIHVfY2hhciAqcSwgaW50IG1heCwKIAkJCSBjaGFyICpzLCB1X2NoYXIgKm9mcywgdV9jaGFyICpmb3VuZCkKIHsKLSAgICBpbnQgaSwgaiwgbnM7CisJaW50IGksIGosIG5zOwogCi0gICAgaWYgKHAgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgbnMgPSAwOyBqID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKLQlpZiAoKnAgPT0gMHhmZikKLQkJYnJlYWs7Ci0Jb2ZzW2ldID0gajsKLQlucysrOwotCWZvciAoOzspIHsKLQkgICAgc1tqKytdID0gKCpwID09IDB4ZmYpID8gJ1wwJyA6ICpwOwotCSAgICBpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAweGZmKSkKLQkJICAgIGJyZWFrOwotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlucyA9IDA7IGogPSAwOworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlpZiAoKnAgPT0gMHhmZikKKwkJCWJyZWFrOworCQlvZnNbaV0gPSBqOworCQlucysrOworCQlmb3IgKDs7KSB7CisJCQlzW2orK10gPSAoKnAgPT0gMHhmZikgPyAnXDAnIDogKnA7CisJCQlpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAweGZmKSkKKwkJCQlicmVhazsKKwkJCWlmICgrK3AgPT0gcSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKCpwID09IDB4ZmYpIHx8ICgrK3AgPT0gcSkpCisJCQlicmVhazsKIAl9Ci0JaWYgKCgqcCA9PSAweGZmKSB8fCAoKytwID09IHEpKQotCQlicmVhazsKLSAgICB9Ci0gICAgaWYgKGZvdW5kKSB7Ci0JKmZvdW5kID0gbnM7Ci0JcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKKwlpZiAoZm91bmQpIHsKKwkJKmZvdW5kID0gbnM7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiAobnMgPT0gbWF4KSA/IDAgOiAtRUlOVkFMOwotICAgIH0KIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfdmVyc18xKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfdmVyc18xX3QgKnZlcnNfMSkKIHsKLSAgICB1X2NoYXIgKnAsICpxOworCXVfY2hhciAqcCwgKnE7CiAKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKLSAgICB2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKLSAgICB2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKLSAgICBpZiAocCA+PSBxKQotCSAgICByZXR1cm4gLUVJTlZBTDsKKwl2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKKwl2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKKwlpZiAocCA+PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9WRVJTXzFfTUFYX1BST0RfU1RSSU5HUywKLQkJCSB2ZXJzXzEtPnN0ciwgdmVyc18xLT5vZnMsICZ2ZXJzXzEtPm5zKTsKKwlyZXR1cm4gcGFyc2Vfc3RyaW5ncyhwLCBxLCBDSVNUUExfVkVSU18xX01BWF9QUk9EX1NUUklOR1MsCisJCQl2ZXJzXzEtPnN0ciwgdmVyc18xLT5vZnMsICZ2ZXJzXzEtPm5zKTsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfYWx0c3RyKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfYWx0c3RyX3QgKmFsdHN0cikKIHsKLSAgICB1X2NoYXIgKnAsICpxOworCXVfY2hhciAqcCwgKnE7CiAKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKLSAgICByZXR1cm4gcGFyc2Vfc3RyaW5ncyhwLCBxLCBDSVNUUExfTUFYX0FMVFNUUl9TVFJJTkdTLAotCQkJIGFsdHN0ci0+c3RyLCBhbHRzdHItPm9mcywgJmFsdHN0ci0+bnMpOworCXJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9NQVhfQUxUU1RSX1NUUklOR1MsCisJCQlhbHRzdHItPnN0ciwgYWx0c3RyLT5vZnMsICZhbHRzdHItPm5zKTsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfamVkZWModHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9qZWRlY190ICpqZWRlYykKIHsKLSAgICB1X2NoYXIgKnAsICpxOwotICAgIGludCBuaWQ7CisJdV9jaGFyICpwLCAqcTsKKwlpbnQgbmlkOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCi0gICAgZm9yIChuaWQgPSAwOyBuaWQgPCBDSVNUUExfTUFYX0RFVklDRVM7IG5pZCsrKSB7Ci0JaWYgKHAgPiBxLTIpCi0JCWJyZWFrOwotCWplZGVjLT5pZFtuaWRdLm1mciA9IHBbMF07Ci0JamVkZWMtPmlkW25pZF0uaW5mbyA9IHBbMV07Ci0JcCArPSAyOwotICAgIH0KLSAgICBqZWRlYy0+bmlkID0gbmlkOwotICAgIHJldHVybiAwOworCWZvciAobmlkID0gMDsgbmlkIDwgQ0lTVFBMX01BWF9ERVZJQ0VTOyBuaWQrKykgeworCQlpZiAocCA+IHEtMikKKwkJCWJyZWFrOworCQlqZWRlYy0+aWRbbmlkXS5tZnIgPSBwWzBdOworCQlqZWRlYy0+aWRbbmlkXS5pbmZvID0gcFsxXTsKKwkJcCArPSAyOworCX0KKwlqZWRlYy0+bmlkID0gbmlkOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9tYW5maWQodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9tYW5maWRfdCAqbSkKIHsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgbS0+bWFuZiA9IGdldF91bmFsaWduZWRfbGUxNih0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICBtLT5jYXJkID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR1cGxlLT5UdXBsZURhdGEgKyAyKTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCisJCXJldHVybiAtRUlOVkFMOworCW0tPm1hbmYgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHVwbGUtPlR1cGxlRGF0YSk7CisJbS0+Y2FyZCA9IGdldF91bmFsaWduZWRfbGUxNih0dXBsZS0+VHVwbGVEYXRhICsgMik7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX2Z1bmNpZCh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2Z1bmNpZF90ICpmKQogewotICAgIHVfY2hhciAqcDsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDIpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGYtPmZ1bmMgPSBwWzBdOwotICAgIGYtPnN5c2luaXQgPSBwWzFdOwotICAgIHJldHVybiAwOworCXVfY2hhciAqcDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlmLT5mdW5jID0gcFswXTsKKwlmLT5zeXNpbml0ID0gcFsxXTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfZnVuY2UodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9mdW5jZV90ICpmKQogewotICAgIHVfY2hhciAqcDsKLSAgICBpbnQgaTsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGYtPnR5cGUgPSBwWzBdOwotICAgIGZvciAoaSA9IDE7IGkgPCB0dXBsZS0+VHVwbGVEYXRhTGVuOyBpKyspCi0JZi0+ZGF0YVtpLTFdID0gcFtpXTsKLSAgICByZXR1cm4gMDsKKwl1X2NoYXIgKnA7CisJaW50IGk7CisJaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJZi0+dHlwZSA9IHBbMF07CisJZm9yIChpID0gMTsgaSA8IHR1cGxlLT5UdXBsZURhdGFMZW47IGkrKykKKwkJZi0+ZGF0YVtpLTFdID0gcFtpXTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKIHsKLSAgICBpbnQgcmFzeiwgcm1zeiwgaTsKLSAgICB1X2NoYXIgKnA7CisJaW50IHJhc3osIHJtc3osIGk7CisJdV9jaGFyICpwOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHJhc3ogPSAqcCAmIDB4MDM7Ci0gICAgcm1zeiA9ICgqcCAmIDB4M2MpID4+IDI7Ci0gICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCByYXN6K3Jtc3orNCkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBjb25maWctPmxhc3RfaWR4ID0gKigrK3ApOwotICAgIHArKzsKLSAgICBjb25maWctPmJhc2UgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPD0gcmFzejsgaSsrKQotCWNvbmZpZy0+YmFzZSArPSBwW2ldIDw8ICg4KmkpOwotICAgIHAgKz0gcmFzeisxOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JY29uZmlnLT5ybWFza1tpXSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBybXN6OyBpKyspCi0JY29uZmlnLT5ybWFza1tpPj4yXSArPSBwW2ldIDw8ICg4KihpJTQpKTsKLSAgICBjb25maWctPnN1YnR1cGxlcyA9IHR1cGxlLT5UdXBsZURhdGFMZW4gLSAocmFzeitybXN6KzQpOwotICAgIHJldHVybiAwOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlyYXN6ID0gKnAgJiAweDAzOworCXJtc3ogPSAoKnAgJiAweDNjKSA+PiAyOworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgcmFzeitybXN6KzQpCisJCXJldHVybiAtRUlOVkFMOworCWNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7CisJcCsrOworCWNvbmZpZy0+YmFzZSA9IDA7CisJZm9yIChpID0gMDsgaSA8PSByYXN6OyBpKyspCisJCWNvbmZpZy0+YmFzZSArPSBwW2ldIDw8ICg4KmkpOworCXAgKz0gcmFzeisxOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWNvbmZpZy0+cm1hc2tbaV0gPSAwOworCWZvciAoaSA9IDA7IGkgPD0gcm1zejsgaSsrKQorCQljb25maWctPnJtYXNrW2k+PjJdICs9IHBbaV0gPDwgKDgqKGklNCkpOworCWNvbmZpZy0+c3VidHVwbGVzID0gdHVwbGUtPlR1cGxlRGF0YUxlbiAtIChyYXN6K3Jtc3orNCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgYWxsIHVzZWQgdG8gcGFyc2UgdGhlIG5pZ2h0bWFyaXNoCisgKiBjb25maWcgdGFibGUgZW50cmllcy4KKyAqLwogCi0gICAgVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgYWxsIHVzZWQgdG8gcGFyc2UgdGhlIG5pZ2h0bWFyaXNoCi0gICAgY29uZmlnIHRhYmxlIGVudHJpZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdV9jaGFyICpwYXJzZV9wb3dlcih1X2NoYXIgKnAsIHVfY2hhciAqcSwKLQkJCSAgIGNpc3RwbF9wb3dlcl90ICpwd3IpCitzdGF0aWMgdV9jaGFyICpwYXJzZV9wb3dlcih1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX3Bvd2VyX3QgKnB3cikKIHsKLSAgICBpbnQgaTsKLSAgICB1X2ludCBzY2FsZTsKKwlpbnQgaTsKKwl1X2ludCBzY2FsZTsKIAotICAgIGlmIChwID09IHEpCi0JICAgIHJldHVybiBOVUxMOwotICAgIHB3ci0+cHJlc2VudCA9ICpwOwotICAgIHB3ci0+ZmxhZ3MgPSAwOwotICAgIHArKzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCWlmIChwd3ItPnByZXNlbnQgJiAoMTw8aSkpIHsKLQkgICAgaWYgKHAgPT0gcSkKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICBwd3ItPnBhcmFtW2ldID0gUE9XRVJfQ1ZUKCpwKTsKLQkgICAgc2NhbGUgPSBQT1dFUl9TQ0FMRSgqcCk7Ci0JICAgIHdoaWxlICgqcCAmIDB4ODApIHsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKKwlwd3ItPnByZXNlbnQgPSAqcDsKKwlwd3ItPmZsYWdzID0gMDsKKwlwKys7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJaWYgKHB3ci0+cHJlc2VudCAmICgxPDxpKSkgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXB3ci0+cGFyYW1baV0gPSBQT1dFUl9DVlQoKnApOworCQkJc2NhbGUgPSBQT1dFUl9TQ0FMRSgqcCk7CisJCQl3aGlsZSAoKnAgJiAweDgwKSB7CisJCQkJaWYgKCsrcCA9PSBxKQorCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQlpZiAoKCpwICYgMHg3ZikgPCAxMDApCisJCQkJCXB3ci0+cGFyYW1baV0gKz0KKwkJCQkJCSgqcCAmIDB4N2YpICogc2NhbGUgLyAxMDA7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZCkKKwkJCQkJcHdyLT5mbGFncyB8PSBDSVNUUExfUE9XRVJfSElHSFpfT0s7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZSkKKwkJCQkJcHdyLT5wYXJhbVtpXSA9IDA7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZikKKwkJCQkJcHdyLT5mbGFncyB8PSBDSVNUUExfUE9XRVJfSElHSFpfUkVROworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlwKys7CisJCX0KKwlyZXR1cm4gcDsKK30KKworCitzdGF0aWMgdV9jaGFyICpwYXJzZV90aW1pbmcodV9jaGFyICpwLCB1X2NoYXIgKnEsIGNpc3RwbF90aW1pbmdfdCAqdGltaW5nKQoreworCXVfY2hhciBzY2FsZTsKKworCWlmIChwID09IHEpCisJCXJldHVybiBOVUxMOworCXNjYWxlID0gKnA7CisJaWYgKChzY2FsZSAmIDMpICE9IDMpIHsKIAkJaWYgKCsrcCA9PSBxKQogCQkJcmV0dXJuIE5VTEw7Ci0JCWlmICgoKnAgJiAweDdmKSA8IDEwMCkKLQkJICAgIHB3ci0+cGFyYW1baV0gKz0gKCpwICYgMHg3ZikgKiBzY2FsZSAvIDEwMDsKLQkJZWxzZSBpZiAoKnAgPT0gMHg3ZCkKLQkJICAgIHB3ci0+ZmxhZ3MgfD0gQ0lTVFBMX1BPV0VSX0hJR0haX09LOwotCQllbHNlIGlmICgqcCA9PSAweDdlKQotCQkgICAgcHdyLT5wYXJhbVtpXSA9IDA7Ci0JCWVsc2UgaWYgKCpwID09IDB4N2YpCi0JCSAgICBwd3ItPmZsYWdzIHw9IENJU1RQTF9QT1dFUl9ISUdIWl9SRVE7Ci0JCWVsc2UKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICB9Ci0JICAgIHArKzsKLQl9Ci0gICAgcmV0dXJuIHA7CisJCXRpbWluZy0+d2FpdCA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+d2FpdHNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiAzXTsKKwl9IGVsc2UKKwkJdGltaW5nLT53YWl0ID0gMDsKKwlzY2FsZSA+Pj0gMjsKKwlpZiAoKHNjYWxlICYgNykgIT0gNykgeworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gTlVMTDsKKwkJdGltaW5nLT5yZWFkeSA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+cmR5c2NhbGUgPSBleHBvbmVudFtzY2FsZSAmIDddOworCX0gZWxzZQorCQl0aW1pbmctPnJlYWR5ID0gMDsKKwlzY2FsZSA+Pj0gMzsKKwlpZiAoc2NhbGUgIT0gNykgeworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gTlVMTDsKKwkJdGltaW5nLT5yZXNlcnZlZCA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+cnN2c2NhbGUgPSBleHBvbmVudFtzY2FsZV07CisJfSBlbHNlCisJCXRpbWluZy0+cmVzZXJ2ZWQgPSAwOworCXArKzsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB1X2NoYXIgKnBhcnNlX3RpbWluZyh1X2NoYXIgKnAsIHVfY2hhciAqcSwKLQkJCSAgICBjaXN0cGxfdGltaW5nX3QgKnRpbWluZykKLXsKLSAgICB1X2NoYXIgc2NhbGU7Ci0KLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBzY2FsZSA9ICpwOwotICAgIGlmICgoc2NhbGUgJiAzKSAhPSAzKSB7Ci0JaWYgKCsrcCA9PSBxKQotCQlyZXR1cm4gTlVMTDsKLQl0aW1pbmctPndhaXQgPSBTUEVFRF9DVlQoKnApOwotCXRpbWluZy0+d2FpdHNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiAzXTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPndhaXQgPSAwOwotICAgIHNjYWxlID4+PSAyOwotICAgIGlmICgoc2NhbGUgJiA3KSAhPSA3KSB7Ci0JaWYgKCsrcCA9PSBxKQotCQlyZXR1cm4gTlVMTDsKLQl0aW1pbmctPnJlYWR5ID0gU1BFRURfQ1ZUKCpwKTsKLQl0aW1pbmctPnJkeXNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiA3XTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPnJlYWR5ID0gMDsKLSAgICBzY2FsZSA+Pj0gMzsKLSAgICBpZiAoc2NhbGUgIT0gNykgewotCWlmICgrK3AgPT0gcSkKLQkJcmV0dXJuIE5VTEw7Ci0JdGltaW5nLT5yZXNlcnZlZCA9IFNQRUVEX0NWVCgqcCk7Ci0JdGltaW5nLT5yc3ZzY2FsZSA9IGV4cG9uZW50W3NjYWxlXTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPnJlc2VydmVkID0gMDsKLSAgICBwKys7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdV9jaGFyICpwYXJzZV9pbyh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX2lvX3QgKmlvKQogewotICAgIGludCBpLCBqLCBic3osIGxzejsKKwlpbnQgaSwgaiwgYnN6LCBsc3o7CiAKLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBpby0+ZmxhZ3MgPSAqcDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKKwlpby0+ZmxhZ3MgPSAqcDsKIAotICAgIGlmICghKCpwICYgMHg4MCkpIHsKLQlpby0+bndpbiA9IDE7Ci0JaW8tPndpblswXS5iYXNlID0gMDsKLQlpby0+d2luWzBdLmxlbiA9ICgxIDw8IChpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykpOwotCXJldHVybiBwKzE7Ci0gICAgfQotCi0gICAgaWYgKCsrcCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBpby0+bndpbiA9ICgqcCAmIDB4MGYpICsgMTsKLSAgICBic3ogPSAoKnAgJiAweDMwKSA+PiA0OwotICAgIGlmIChic3ogPT0gMykKLQkgICAgYnN6Kys7Ci0gICAgbHN6ID0gKCpwICYgMHhjMCkgPj4gNjsKLSAgICBpZiAobHN6ID09IDMpCi0JICAgIGxzeisrOwotICAgIHArKzsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBpby0+bndpbjsgaSsrKSB7Ci0JaW8tPndpbltpXS5iYXNlID0gMDsKLQlpby0+d2luW2ldLmxlbiA9IDE7Ci0JZm9yIChqID0gMDsgaiA8IGJzejsgaisrLCBwKyspIHsKLQkgICAgaWYgKHAgPT0gcSkKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICBpby0+d2luW2ldLmJhc2UgKz0gKnAgPDwgKGoqOCk7CisJaWYgKCEoKnAgJiAweDgwKSkgeworCQlpby0+bndpbiA9IDE7CisJCWlvLT53aW5bMF0uYmFzZSA9IDA7CisJCWlvLT53aW5bMF0ubGVuID0gKDEgPDwgKGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSk7CisJCXJldHVybiBwKzE7CiAJfQotCWZvciAoaiA9IDA7IGogPCBsc3o7IGorKywgcCsrKSB7Ci0JICAgIGlmIChwID09IHEpCi0JCSAgICByZXR1cm4gTlVMTDsKLQkgICAgaW8tPndpbltpXS5sZW4gKz0gKnAgPDwgKGoqOCk7CisKKwlpZiAoKytwID09IHEpCisJCXJldHVybiBOVUxMOworCWlvLT5ud2luID0gKCpwICYgMHgwZikgKyAxOworCWJzeiA9ICgqcCAmIDB4MzApID4+IDQ7CisJaWYgKGJzeiA9PSAzKQorCQlic3orKzsKKwlsc3ogPSAoKnAgJiAweGMwKSA+PiA2OworCWlmIChsc3ogPT0gMykKKwkJbHN6Kys7CisJcCsrOworCisJZm9yIChpID0gMDsgaSA8IGlvLT5ud2luOyBpKyspIHsKKwkJaW8tPndpbltpXS5iYXNlID0gMDsKKwkJaW8tPndpbltpXS5sZW4gPSAxOworCQlmb3IgKGogPSAwOyBqIDwgYnN6OyBqKyssIHArKykgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlvLT53aW5baV0uYmFzZSArPSAqcCA8PCAoaio4KTsKKwkJfQorCQlmb3IgKGogPSAwOyBqIDwgbHN6OyBqKyssIHArKykgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlvLT53aW5baV0ubGVuICs9ICpwIDw8IChqKjgpOworCQl9CiAJfQotICAgIH0KLSAgICByZXR1cm4gcDsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX21lbSh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX21lbV90ICptZW0pCiB7Ci0gICAgaW50IGksIGosIGFzeiwgbHN6LCBoYXNfaGE7Ci0gICAgdV9pbnQgbGVuLCBjYSwgaGE7CisJaW50IGksIGosIGFzeiwgbHN6LCBoYXNfaGE7CisJdV9pbnQgbGVuLCBjYSwgaGE7CiAKLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKIAotICAgIG1lbS0+bndpbiA9ICgqcCAmIDB4MDcpICsgMTsKLSAgICBsc3ogPSAoKnAgJiAweDE4KSA+PiAzOwotICAgIGFzeiA9ICgqcCAmIDB4NjApID4+IDU7Ci0gICAgaGFzX2hhID0gKCpwICYgMHg4MCk7Ci0gICAgaWYgKCsrcCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKKwltZW0tPm53aW4gPSAoKnAgJiAweDA3KSArIDE7CisJbHN6ID0gKCpwICYgMHgxOCkgPj4gMzsKKwlhc3ogPSAoKnAgJiAweDYwKSA+PiA1OworCWhhc19oYSA9ICgqcCAmIDB4ODApOworCWlmICgrK3AgPT0gcSkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbWVtLT5ud2luOyBpKyspIHsKLQlsZW4gPSBjYSA9IGhhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgbHN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKQotCQkgICAgcmV0dXJuIE5VTEw7Ci0JICAgIGxlbiArPSAqcCA8PCAoaio4KTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtLT5ud2luOyBpKyspIHsKKwkJbGVuID0gY2EgPSBoYSA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBsc3o7IGorKywgcCsrKSB7CisJCQlpZiAocCA9PSBxKQorCQkJCXJldHVybiBOVUxMOworCQkJbGVuICs9ICpwIDw8IChqKjgpOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBhc3o7IGorKywgcCsrKSB7CisJCQlpZiAocCA9PSBxKQorCQkJCXJldHVybiBOVUxMOworCQkJY2EgKz0gKnAgPDwgKGoqOCk7CisJCX0KKwkJaWYgKGhhc19oYSkKKwkJCWZvciAoaiA9IDA7IGogPCBhc3o7IGorKywgcCsrKSB7CisJCQkJaWYgKHAgPT0gcSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJaGEgKz0gKnAgPDwgKGoqOCk7CisJCQl9CisJCW1lbS0+d2luW2ldLmxlbiA9IGxlbiA8PCA4OworCQltZW0tPndpbltpXS5jYXJkX2FkZHIgPSBjYSA8PCA4OworCQltZW0tPndpbltpXS5ob3N0X2FkZHIgPSBoYSA8PCA4OwogCX0KLQlmb3IgKGogPSAwOyBqIDwgYXN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKQotCQkgICAgcmV0dXJuIE5VTEw7Ci0JICAgIGNhICs9ICpwIDw8IChqKjgpOwotCX0KLQlpZiAoaGFzX2hhKQotCSAgICBmb3IgKGogPSAwOyBqIDwgYXN6OyBqKyssIHArKykgewotCQlpZiAocCA9PSBxKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWhhICs9ICpwIDw8IChqKjgpOwotCSAgICB9Ci0JbWVtLT53aW5baV0ubGVuID0gbGVuIDw8IDg7Ci0JbWVtLT53aW5baV0uY2FyZF9hZGRyID0gY2EgPDwgODsKLQltZW0tPndpbltpXS5ob3N0X2FkZHIgPSBoYSA8PCA4OwotICAgIH0KLSAgICByZXR1cm4gcDsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX2lycSh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX2lycV90ICppcnEpCiB7Ci0gICAgaWYgKHAgPT0gcSkKLQkgICAgcmV0dXJuIE5VTEw7Ci0gICAgaXJxLT5JUlFJbmZvMSA9ICpwOyBwKys7Ci0gICAgaWYgKGlycS0+SVJRSW5mbzEgJiBJUlFfSU5GTzJfVkFMSUQpIHsKLQlpZiAocCsyID4gcSkKKwlpZiAocCA9PSBxKQogCQlyZXR1cm4gTlVMTDsKLQlpcnEtPklSUUluZm8yID0gKHBbMV08PDgpICsgcFswXTsKLQlwICs9IDI7Ci0gICAgfQotICAgIHJldHVybiBwOworCWlycS0+SVJRSW5mbzEgPSAqcDsgcCsrOworCWlmIChpcnEtPklSUUluZm8xICYgSVJRX0lORk8yX1ZBTElEKSB7CisJCWlmIChwKzIgPiBxKQorCQkJcmV0dXJuIE5VTEw7CisJCWlycS0+SVJRSW5mbzIgPSAocFsxXTw8OCkgKyBwWzBdOworCQlwICs9IDI7CisJfQorCXJldHVybiBwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9jZnRhYmxlX2VudHJ5KHR1cGxlX3QgKnR1cGxlLAogCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmVudHJ5KQogewotICAgIHVfY2hhciAqcCwgKnEsIGZlYXR1cmVzOworCXVfY2hhciAqcCwgKnEsIGZlYXR1cmVzOwogCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwotICAgIGVudHJ5LT5pbmRleCA9ICpwICYgMHgzZjsKLSAgICBlbnRyeS0+ZmxhZ3MgPSAwOwotICAgIGlmICgqcCAmIDB4NDApCi0JZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0RFRkFVTFQ7Ci0gICAgaWYgKCpwICYgMHg4MCkgeworCXAgPSB0dXBsZS0+VHVwbGVEYXRhOworCXEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwllbnRyeS0+aW5kZXggPSAqcCAmIDB4M2Y7CisJZW50cnktPmZsYWdzID0gMDsKKwlpZiAoKnAgJiAweDQwKQorCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfREVGQVVMVDsKKwlpZiAoKnAgJiAweDgwKSB7CisJCWlmICgrK3AgPT0gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKnAgJiAweDEwKQorCQkJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0JWRFM7CisJCWlmICgqcCAmIDB4MjApCisJCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfV1A7CisJCWlmICgqcCAmIDB4NDApCisJCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfUkRZQlNZOworCQlpZiAoKnAgJiAweDgwKQorCQkJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX01XQUlUOworCQllbnRyeS0+aW50ZXJmYWNlID0gKnAgJiAweDBmOworCX0gZWxzZQorCQllbnRyeS0+aW50ZXJmYWNlID0gMDsKKworCS8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KIAlpZiAoKytwID09IHEpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqcCAmIDB4MTApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9CVkRTOwotCWlmICgqcCAmIDB4MjApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9XUDsKLQlpZiAoKnAgJiAweDQwKQotCSAgICBlbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfUkRZQlNZOwotCWlmICgqcCAmIDB4ODApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9NV0FJVDsKLQllbnRyeS0+aW50ZXJmYWNlID0gKnAgJiAweDBmOwotICAgIH0gZWxzZQotCWVudHJ5LT5pbnRlcmZhY2UgPSAwOworCWZlYXR1cmVzID0gKnA7IHArKzsKIAotICAgIC8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KLSAgICBpZiAoKytwID09IHEpCi0JICAgIHJldHVybiAtRUlOVkFMOwotICAgIGZlYXR1cmVzID0gKnA7IHArKzsKKwkvKiBQb3dlciBvcHRpb25zICovCisJaWYgKChmZWF0dXJlcyAmIDMpID4gMCkgeworCQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7CisJaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgeworCQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAxKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQllbnRyeS0+dnBwMS5wcmVzZW50ID0gMDsKKwlpZiAoKGZlYXR1cmVzICYgMykgPiAyKSB7CisJCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDIpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWVudHJ5LT52cHAyLnByZXNlbnQgPSAwOwogCi0gICAgLyogUG93ZXIgb3B0aW9ucyAqLwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7Ci0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52cHAxLnByZXNlbnQgPSAwOwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDIpIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAyKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKLQotICAgIC8qIFRpbWluZyBvcHRpb25zICovCi0gICAgaWYgKGZlYXR1cmVzICYgMHgwNCkgewotCXAgPSBwYXJzZV90aW1pbmcocCwgcSwgJmVudHJ5LT50aW1pbmcpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZSB7Ci0JZW50cnktPnRpbWluZy53YWl0ID0gMDsKLQllbnRyeS0+dGltaW5nLnJlYWR5ID0gMDsKLQllbnRyeS0+dGltaW5nLnJlc2VydmVkID0gMDsKLSAgICB9Ci0KLSAgICAvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDA4KSB7Ci0JcCA9IHBhcnNlX2lvKHAsIHEsICZlbnRyeS0+aW8pOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT5pby5ud2luID0gMDsKLQotICAgIC8qIEludGVycnVwdCBvcHRpb25zICovCi0gICAgaWYgKGZlYXR1cmVzICYgMHgxMCkgewotCXAgPSBwYXJzZV9pcnEocCwgcSwgJmVudHJ5LT5pcnEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT5pcnEuSVJRSW5mbzEgPSAwOwotCi0gICAgc3dpdGNoIChmZWF0dXJlcyAmIDB4NjApIHsKLSAgICBjYXNlIDB4MDA6Ci0JZW50cnktPm1lbS5ud2luID0gMDsKLQlicmVhazsKLSAgICBjYXNlIDB4MjA6Ci0JZW50cnktPm1lbS5ud2luID0gMTsKLQllbnRyeS0+bWVtLndpblswXS5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCkgPDwgODsKLQllbnRyeS0+bWVtLndpblswXS5jYXJkX2FkZHIgPSAwOwotCWVudHJ5LT5tZW0ud2luWzBdLmhvc3RfYWRkciA9IDA7Ci0JcCArPSAyOwotCWlmIChwID4gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYnJlYWs7Ci0gICAgY2FzZSAweDQwOgotCWVudHJ5LT5tZW0ubndpbiA9IDE7Ci0JZW50cnktPm1lbS53aW5bMF0ubGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHApIDw8IDg7Ci0JZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKSA8PCA4OwotCWVudHJ5LT5tZW0ud2luWzBdLmhvc3RfYWRkciA9IDA7Ci0JcCArPSA0OwotCWlmIChwID4gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYnJlYWs7Ci0gICAgY2FzZSAweDYwOgotCXAgPSBwYXJzZV9tZW0ocCwgcSwgJmVudHJ5LT5tZW0pOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCWJyZWFrOwotICAgIH0KLQotICAgIC8qIE1pc2MgZmVhdHVyZXMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDgwKSB7Ci0JaWYgKHAgPT0gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKLQl3aGlsZSAoKnAgJiAweDgwKQotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQlwKys7Ci0gICAgfQotCi0gICAgZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKLQotICAgIHJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0KLXN0YXRpYyBpbnQgcGFyc2VfYmFyKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfYmFyX3QgKmJhcikKLXsKLSAgICB1X2NoYXIgKnA7Ci0gICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCA2KQotCXJldHVybiAtRUlOVkFMOwotICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBiYXItPmF0dHIgPSAqcDsKLSAgICBwICs9IDI7Ci0gICAgYmFyLT5zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX2NvbmZpZ19jYih0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2NvbmZpZ190ICpjb25maWcpCi17Ci0gICAgdV9jaGFyICpwOwotCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGlmICgoKnAgIT0gMykgfHwgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCA2KSkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBjb25maWctPmxhc3RfaWR4ID0gKigrK3ApOwotICAgIHArKzsKLSAgICBjb25maWctPmJhc2UgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7Ci0gICAgY29uZmlnLT5zdWJ0dXBsZXMgPSB0dXBsZS0+VHVwbGVEYXRhTGVuIC0gNjsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwYXJzZV9jZnRhYmxlX2VudHJ5X2NiKHR1cGxlX3QgKnR1cGxlLAotCQkJCSAgY2lzdHBsX2NmdGFibGVfZW50cnlfY2JfdCAqZW50cnkpCi17Ci0gICAgdV9jaGFyICpwLCAqcSwgZmVhdHVyZXM7Ci0KLSAgICBwID0gdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47Ci0gICAgZW50cnktPmluZGV4ID0gKnAgJiAweDNmOwotICAgIGVudHJ5LT5mbGFncyA9IDA7Ci0gICAgaWYgKCpwICYgMHg0MCkKLQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfREVGQVVMVDsKLQotICAgIC8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KLSAgICBpZiAoKytwID09IHEpCi0JICAgIHJldHVybiAtRUlOVkFMOwotICAgIGZlYXR1cmVzID0gKnA7IHArKzsKLQotICAgIC8qIFBvd2VyIG9wdGlvbnMgKi8KLSAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAwKSB7Ci0JcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dmNjKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dmNjLnByZXNlbnQgPSAwOwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDEpIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAxKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dnBwMS5wcmVzZW50ID0gMDsKLSAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAyKSB7Ci0JcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMik7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgfSBlbHNlCi0JZW50cnktPnZwcDIucHJlc2VudCA9IDA7Ci0KLSAgICAvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDA4KSB7Ci0JaWYgKHAgPT0gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZW50cnktPmlvID0gKnA7IHArKzsKLSAgICB9IGVsc2UKLQllbnRyeS0+aW8gPSAwOwotCi0gICAgLyogSW50ZXJydXB0IG9wdGlvbnMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDEwKSB7Ci0JcCA9IHBhcnNlX2lycShwLCBxLCAmZW50cnktPmlycSk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgfSBlbHNlCi0JZW50cnktPmlycS5JUlFJbmZvMSA9IDA7Ci0KLSAgICBpZiAoZmVhdHVyZXMgJiAweDIwKSB7Ci0JaWYgKHAgPT0gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZW50cnktPm1lbSA9ICpwOyBwKys7Ci0gICAgfSBlbHNlCi0JZW50cnktPm1lbSA9IDA7Ci0KLSAgICAvKiBNaXNjIGZlYXR1cmVzICovCi0gICAgaWYgKGZlYXR1cmVzICYgMHg4MCkgewotCWlmIChwID09IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWVudHJ5LT5mbGFncyB8PSAoKnAgPDwgOCk7Ci0JaWYgKCpwICYgMHg4MCkgewotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQkgICAgZW50cnktPmZsYWdzIHw9ICgqcCA8PCAxNik7CisJLyogVGltaW5nIG9wdGlvbnMgKi8KKwlpZiAoZmVhdHVyZXMgJiAweDA0KSB7CisJCXAgPSBwYXJzZV90aW1pbmcocCwgcSwgJmVudHJ5LT50aW1pbmcpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJZW50cnktPnRpbWluZy53YWl0ID0gMDsKKwkJZW50cnktPnRpbWluZy5yZWFkeSA9IDA7CisJCWVudHJ5LT50aW1pbmcucmVzZXJ2ZWQgPSAwOwogCX0KLQl3aGlsZSAoKnAgJiAweDgwKQotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQlwKys7Ci0gICAgfQogCi0gICAgZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKKwkvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KKwlpZiAoZmVhdHVyZXMgJiAweDA4KSB7CisJCXAgPSBwYXJzZV9pbyhwLCBxLCAmZW50cnktPmlvKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQllbnRyeS0+aW8ubndpbiA9IDA7CiAKLSAgICByZXR1cm4gMDsKKwkvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLworCWlmIChmZWF0dXJlcyAmIDB4MTApIHsKKwkJcCA9IHBhcnNlX2lycShwLCBxLCAmZW50cnktPmlycSk7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJZW50cnktPmlycS5JUlFJbmZvMSA9IDA7CisKKwlzd2l0Y2ggKGZlYXR1cmVzICYgMHg2MCkgeworCWNhc2UgMHgwMDoKKwkJZW50cnktPm1lbS5ud2luID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDIwOgorCQllbnRyeS0+bWVtLm53aW4gPSAxOworCQllbnRyeS0+bWVtLndpblswXS5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCkgPDwgODsKKwkJZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gMDsKKwkJZW50cnktPm1lbS53aW5bMF0uaG9zdF9hZGRyID0gMDsKKwkJcCArPSAyOworCQlpZiAocCA+IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAweDQwOgorCQllbnRyeS0+bWVtLm53aW4gPSAxOworCQllbnRyeS0+bWVtLndpblswXS5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCkgPDwgODsKKwkJZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKSA8PCA4OworCQllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOworCQlwICs9IDQ7CisJCWlmIChwID4gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDB4NjA6CisJCXAgPSBwYXJzZV9tZW0ocCwgcSwgJmVudHJ5LT5tZW0pOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCS8qIE1pc2MgZmVhdHVyZXMgKi8KKwlpZiAoZmVhdHVyZXMgJiAweDgwKSB7CisJCWlmIChwID09IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKKwkJd2hpbGUgKCpwICYgMHg4MCkKKwkJCWlmICgrK3AgPT0gcSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcCsrOworCX0KKworCWVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7CisKKwlyZXR1cm4gMDsKIH0KIAotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX2RldmljZV9nZW8odHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9kZXZpY2VfZ2VvX3QgKmdlbykKIHsKLSAgICB1X2NoYXIgKnAsICpxOwotICAgIGludCBuOworCXVfY2hhciAqcCwgKnE7CisJaW50IG47CiAKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKLSAgICBmb3IgKG4gPSAwOyBuIDwgQ0lTVFBMX01BWF9ERVZJQ0VTOyBuKyspIHsKLQlpZiAocCA+IHEtNikKLQkJYnJlYWs7Ci0JZ2VvLT5nZW9bbl0uYnVzd2lkdGggPSBwWzBdOwotCWdlby0+Z2VvW25dLmVyYXNlX2Jsb2NrID0gMSA8PCAocFsxXS0xKTsKLQlnZW8tPmdlb1tuXS5yZWFkX2Jsb2NrICA9IDEgPDwgKHBbMl0tMSk7Ci0JZ2VvLT5nZW9bbl0ud3JpdGVfYmxvY2sgPSAxIDw8IChwWzNdLTEpOwotCWdlby0+Z2VvW25dLnBhcnRpdGlvbiAgID0gMSA8PCAocFs0XS0xKTsKLQlnZW8tPmdlb1tuXS5pbnRlcmxlYXZlICA9IDEgPDwgKHBbNV0tMSk7Ci0JcCArPSA2OwotICAgIH0KLSAgICBnZW8tPm5nZW8gPSBuOwotICAgIHJldHVybiAwOworCWZvciAobiA9IDA7IG4gPCBDSVNUUExfTUFYX0RFVklDRVM7IG4rKykgeworCQlpZiAocCA+IHEtNikKKwkJCWJyZWFrOworCQlnZW8tPmdlb1tuXS5idXN3aWR0aCA9IHBbMF07CisJCWdlby0+Z2VvW25dLmVyYXNlX2Jsb2NrID0gMSA8PCAocFsxXS0xKTsKKwkJZ2VvLT5nZW9bbl0ucmVhZF9ibG9jayAgPSAxIDw8IChwWzJdLTEpOworCQlnZW8tPmdlb1tuXS53cml0ZV9ibG9jayA9IDEgPDwgKHBbM10tMSk7CisJCWdlby0+Z2VvW25dLnBhcnRpdGlvbiAgID0gMSA8PCAocFs0XS0xKTsKKwkJZ2VvLT5nZW9bbl0uaW50ZXJsZWF2ZSAgPSAxIDw8IChwWzVdLTEpOworCQlwICs9IDY7CisJfQorCWdlby0+bmdlbyA9IG47CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX3ZlcnNfMih0dXBsZV90ICp0dXBsZSwgY2lzdHBsX3ZlcnNfMl90ICp2MikKIHsKLSAgICB1X2NoYXIgKnAsICpxOworCXVfY2hhciAqcCwgKnE7CiAKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEwKQotCXJldHVybiAtRUlOVkFMOworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMTApCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSB0dXBsZS0+VHVwbGVEYXRhOworCXEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKIAotICAgIHYyLT52ZXJzID0gcFswXTsKLSAgICB2Mi0+Y29tcGx5ID0gcFsxXTsKLSAgICB2Mi0+ZGluZGV4ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKTsKLSAgICB2Mi0+dnNwZWM4ID0gcFs2XTsKLSAgICB2Mi0+dnNwZWM5ID0gcFs3XTsKLSAgICB2Mi0+bmhkciA9IHBbOF07Ci0gICAgcCArPSA5OwotICAgIHJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIDIsIHYyLT5zdHIsICZ2Mi0+dmVuZG9yLCBOVUxMKTsKKwl2Mi0+dmVycyA9IHBbMF07CisJdjItPmNvbXBseSA9IHBbMV07CisJdjItPmRpbmRleCA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMik7CisJdjItPnZzcGVjOCA9IHBbNl07CisJdjItPnZzcGVjOSA9IHBbN107CisJdjItPm5oZHIgPSBwWzhdOworCXAgKz0gOTsKKwlyZXR1cm4gcGFyc2Vfc3RyaW5ncyhwLCBxLCAyLCB2Mi0+c3RyLCAmdjItPnZlbmRvciwgTlVMTCk7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX29yZyh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX29yZ190ICpvcmcpCiB7Ci0gICAgdV9jaGFyICpwLCAqcTsKLSAgICBpbnQgaTsKKwl1X2NoYXIgKnAsICpxOworCWludCBpOwogCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwotICAgIGlmIChwID09IHEpCi0JICAgIHJldHVybiAtRUlOVkFMOwotICAgIG9yZy0+ZGF0YV9vcmcgPSAqcDsKLSAgICBpZiAoKytwID09IHEpCi0JICAgIHJldHVybiAtRUlOVkFMOwotICAgIGZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7Ci0Jb3JnLT5kZXNjW2ldID0gKnA7Ci0JaWYgKCpwID09ICdcMCcpCi0JCWJyZWFrOworCXAgPSB0dXBsZS0+VHVwbGVEYXRhOworCXEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvcmctPmRhdGFfb3JnID0gKnA7CiAJaWYgKCsrcCA9PSBxKQogCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKKwkJb3JnLT5kZXNjW2ldID0gKnA7CisJCWlmICgqcCA9PSAnXDAnKQorCQkJYnJlYWs7CisJCWlmICgrK3AgPT0gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfZm9ybWF0KHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfZm9ybWF0X3QgKmZtdCkKIHsKLSAgICB1X2NoYXIgKnA7CisJdV9jaGFyICpwOwogCi0gICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxMCkKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOworCXAgPSB0dXBsZS0+VHVwbGVEYXRhOwogCi0gICAgZm10LT50eXBlID0gcFswXTsKLSAgICBmbXQtPmVkYyA9IHBbMV07Ci0gICAgZm10LT5vZmZzZXQgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCArIDIpOwotICAgIGZtdC0+bGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHAgKyA2KTsKKwlmbXQtPnR5cGUgPSBwWzBdOworCWZtdC0+ZWRjID0gcFsxXTsKKwlmbXQtPm9mZnNldCA9IGdldF91bmFsaWduZWRfbGUzMihwICsgMik7CisJZm10LT5sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMzIocCArIDYpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBpbnQgcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKLSAgICBpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuID4gdHVwbGUtPlR1cGxlRGF0YU1heCkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBzd2l0Y2ggKHR1cGxlLT5UdXBsZUNvZGUpIHsKLSAgICBjYXNlIENJU1RQTF9ERVZJQ0U6Ci0gICAgY2FzZSBDSVNUUExfREVWSUNFX0E6Ci0JcmV0ID0gcGFyc2VfZGV2aWNlKHR1cGxlLCAmcGFyc2UtPmRldmljZSk7Ci0JYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBjYXNlIENJU1RQTF9CQVI6Ci0JcmV0ID0gcGFyc2VfYmFyKHR1cGxlLCAmcGFyc2UtPmJhcik7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQ09ORklHX0NCOgotCXJldCA9IHBhcnNlX2NvbmZpZ19jYih0dXBsZSwgJnBhcnNlLT5jb25maWcpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0I6Ci0JcmV0ID0gcGFyc2VfY2Z0YWJsZV9lbnRyeV9jYih0dXBsZSwgJnBhcnNlLT5jZnRhYmxlX2VudHJ5X2NiKTsKLQlicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ0lTVFBMX0NIRUNLU1VNOgotCXJldCA9IHBhcnNlX2NoZWNrc3VtKHR1cGxlLCAmcGFyc2UtPmNoZWNrc3VtKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9MT05HTElOS19BOgotICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX0M6Ci0JcmV0ID0gcGFyc2VfbG9uZ2xpbmsodHVwbGUsICZwYXJzZS0+bG9uZ2xpbmspOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX01GQzoKLQlyZXQgPSBwYXJzZV9sb25nbGlua19tZmModHVwbGUsICZwYXJzZS0+bG9uZ2xpbmtfbWZjKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9WRVJTXzE6Ci0JcmV0ID0gcGFyc2VfdmVyc18xKHR1cGxlLCAmcGFyc2UtPnZlcnNpb25fMSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQUxUU1RSOgotCXJldCA9IHBhcnNlX2FsdHN0cih0dXBsZSwgJnBhcnNlLT5hbHRzdHIpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0pFREVDX0E6Ci0gICAgY2FzZSBDSVNUUExfSkVERUNfQzoKLQlyZXQgPSBwYXJzZV9qZWRlYyh0dXBsZSwgJnBhcnNlLT5qZWRlYyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfTUFORklEOgotCXJldCA9IHBhcnNlX21hbmZpZCh0dXBsZSwgJnBhcnNlLT5tYW5maWQpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0ZVTkNJRDoKLQlyZXQgPSBwYXJzZV9mdW5jaWQodHVwbGUsICZwYXJzZS0+ZnVuY2lkKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9GVU5DRToKLQlyZXQgPSBwYXJzZV9mdW5jZSh0dXBsZSwgJnBhcnNlLT5mdW5jZSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQ09ORklHOgotCXJldCA9IHBhcnNlX2NvbmZpZyh0dXBsZSwgJnBhcnNlLT5jb25maWcpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0NGVEFCTEVfRU5UUlk6Ci0JcmV0ID0gcGFyc2VfY2Z0YWJsZV9lbnRyeSh0dXBsZSwgJnBhcnNlLT5jZnRhYmxlX2VudHJ5KTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9ERVZJQ0VfR0VPOgotICAgIGNhc2UgQ0lTVFBMX0RFVklDRV9HRU9fQToKLQlyZXQgPSBwYXJzZV9kZXZpY2VfZ2VvKHR1cGxlLCAmcGFyc2UtPmRldmljZV9nZW8pOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX1ZFUlNfMjoKLQlyZXQgPSBwYXJzZV92ZXJzXzIodHVwbGUsICZwYXJzZS0+dmVyc18yKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9PUkc6Ci0JcmV0ID0gcGFyc2Vfb3JnKHR1cGxlLCAmcGFyc2UtPm9yZyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfRk9STUFUOgotICAgIGNhc2UgQ0lTVFBMX0ZPUk1BVF9BOgotCXJldCA9IHBhcnNlX2Zvcm1hdCh0dXBsZSwgJnBhcnNlLT5mb3JtYXQpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX05PX0xJTks6Ci0gICAgY2FzZSBDSVNUUExfTElOS1RBUkdFVDoKLQlyZXQgPSAwOwotCWJyZWFrOwotICAgIGRlZmF1bHQ6Ci0JcmV0ID0gLUVJTlZBTDsKLQlicmVhazsKLSAgICB9Ci0gICAgaWYgKHJldCkKLQkgICAgcHJfZGVidWcoInBhcnNlX3R1cGxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuID4gdHVwbGUtPlR1cGxlRGF0YU1heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoICh0dXBsZS0+VHVwbGVDb2RlKSB7CisJY2FzZSBDSVNUUExfREVWSUNFOgorCWNhc2UgQ0lTVFBMX0RFVklDRV9BOgorCQlyZXQgPSBwYXJzZV9kZXZpY2UodHVwbGUsICZwYXJzZS0+ZGV2aWNlKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfQ0hFQ0tTVU06CisJCXJldCA9IHBhcnNlX2NoZWNrc3VtKHR1cGxlLCAmcGFyc2UtPmNoZWNrc3VtKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfTE9OR0xJTktfQToKKwljYXNlIENJU1RQTF9MT05HTElOS19DOgorCQlyZXQgPSBwYXJzZV9sb25nbGluayh0dXBsZSwgJnBhcnNlLT5sb25nbGluayk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0xPTkdMSU5LX01GQzoKKwkJcmV0ID0gcGFyc2VfbG9uZ2xpbmtfbWZjKHR1cGxlLCAmcGFyc2UtPmxvbmdsaW5rX21mYyk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX1ZFUlNfMToKKwkJcmV0ID0gcGFyc2VfdmVyc18xKHR1cGxlLCAmcGFyc2UtPnZlcnNpb25fMSk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0FMVFNUUjoKKwkJcmV0ID0gcGFyc2VfYWx0c3RyKHR1cGxlLCAmcGFyc2UtPmFsdHN0cik7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0pFREVDX0E6CisJY2FzZSBDSVNUUExfSkVERUNfQzoKKwkJcmV0ID0gcGFyc2VfamVkZWModHVwbGUsICZwYXJzZS0+amVkZWMpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9NQU5GSUQ6CisJCXJldCA9IHBhcnNlX21hbmZpZCh0dXBsZSwgJnBhcnNlLT5tYW5maWQpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9GVU5DSUQ6CisJCXJldCA9IHBhcnNlX2Z1bmNpZCh0dXBsZSwgJnBhcnNlLT5mdW5jaWQpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9GVU5DRToKKwkJcmV0ID0gcGFyc2VfZnVuY2UodHVwbGUsICZwYXJzZS0+ZnVuY2UpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9DT05GSUc6CisJCXJldCA9IHBhcnNlX2NvbmZpZyh0dXBsZSwgJnBhcnNlLT5jb25maWcpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9DRlRBQkxFX0VOVFJZOgorCQlyZXQgPSBwYXJzZV9jZnRhYmxlX2VudHJ5KHR1cGxlLCAmcGFyc2UtPmNmdGFibGVfZW50cnkpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9ERVZJQ0VfR0VPOgorCWNhc2UgQ0lTVFBMX0RFVklDRV9HRU9fQToKKwkJcmV0ID0gcGFyc2VfZGV2aWNlX2dlbyh0dXBsZSwgJnBhcnNlLT5kZXZpY2VfZ2VvKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfVkVSU18yOgorCQlyZXQgPSBwYXJzZV92ZXJzXzIodHVwbGUsICZwYXJzZS0+dmVyc18yKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfT1JHOgorCQlyZXQgPSBwYXJzZV9vcmcodHVwbGUsICZwYXJzZS0+b3JnKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfRk9STUFUOgorCWNhc2UgQ0lTVFBMX0ZPUk1BVF9BOgorCQlyZXQgPSBwYXJzZV9mb3JtYXQodHVwbGUsICZwYXJzZS0+Zm9ybWF0KTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfTk9fTElOSzoKKwljYXNlIENJU1RQTF9MSU5LVEFSR0VUOgorCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJcHJfZGVidWcoInBhcnNlX3R1cGxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfcGFyc2VfdHVwbGUpOwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IENhcmQgU2VydmljZXMgdG8gbG9vayB1cCBDSVMgc3R1ZmYuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1pbnQgcGNjYXJkX3JlYWRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY2lzZGF0YV90IGNvZGUsIHZvaWQgKnBhcnNlKQorLyoqCisgKiBwY2NhcmRfcmVhZF90dXBsZSgpIC0gaW50ZXJuYWwgQ0lTIHR1cGxlIGFjY2VzcworICogQHM6CQl0aGUgc3RydWN0IHBjbWNpYV9zb2NrZXQgd2hlcmUgdGhlIGNhcmQgaXMgaW5zZXJ0ZWQKKyAqIEBmdW5jdGlvbjoJdGhlIGRldmljZSBmdW5jdGlvbiB3ZSBsb29wIGZvcgorICogQGNvZGU6CXdoaWNoIENJUyBjb2RlIHNoYWxsIHdlIGxvb2sgZm9yPworICogQHBhcnNlOglidWZmZXIgd2hlcmUgdGhlIHR1cGxlIHNoYWxsIGJlIHBhcnNlZCAob3IgTlVMTCwgaWYgbm8gcGFyc2UpCisgKgorICogcGNjYXJkX3JlYWRfdHVwbGUoKSByZWFkcyBvdXQgb25lIHR1cGxlIGFuZCBhdHRlbXB0cyB0byBwYXJzZSBpdAorICovCitpbnQgcGNjYXJkX3JlYWRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJY2lzZGF0YV90IGNvZGUsIHZvaWQgKnBhcnNlKQogewotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzZGF0YV90ICpidWY7Ci0gICAgaW50IHJldDsKKwl0dXBsZV90IHR1cGxlOworCWNpc2RhdGFfdCAqYnVmOworCWludCByZXQ7CiAKLSAgICBidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlYWQgdHVwbGVcbiIpOwotCSAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCi0JICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7Ci0gICAgaWYgKHJldCAhPSAwKQotCSAgICBnb3RvIGRvbmU7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0gICAgcmV0ID0gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSk7Ci0gICAgaWYgKHJldCAhPSAwKQotCSAgICBnb3RvIGRvbmU7Ci0gICAgcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgcGFyc2UpOworCWJ1ZiA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJubyBtZW1vcnkgdG8gcmVhZCB0dXBsZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBjb2RlOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCWlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkKKwkJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZG9uZTsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKKwlyZXQgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZG9uZTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCBwYXJzZSk7CiBkb25lOgotICAgIGtmcmVlKGJ1Zik7Ci0gICAgcmV0dXJuIHJldDsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9yZWFkX3R1cGxlKTsKIAogCiAvKioKQEAgLTE1NzMsODQgKzE0NTksMjM4IEBACiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfbG9vcF90dXBsZSk7CiAKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGlzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGNhcmQgaGFzIGEgc2Vuc2libGUgQ0lTLiAgSXQgcmV0dXJucwotICAgIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBDSVMsIG9yIDAgaWYgdGhlIENJUyBsb29rcyBiYWQuICBUaGUKLSAgICBjaGVja3MgaW5jbHVkZSBtYWtpbmcgc3VyZSBzZXZlcmFsIGNyaXRpY2FsIHR1cGxlcyBhcmUgcHJlc2VudCBhbmQKLSAgICB2YWxpZDsgc2VlaW5nIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIGlzIHJlYXNvbmFibGU7IGFuZAotICAgIGxvb2tpbmcgZm9yIHR1cGxlcyB0aGF0IHVzZSByZXNlcnZlZCBjb2Rlcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KKy8qKgorICogcGNjYXJkX3ZhbGlkYXRlX2NpcygpIC0gY2hlY2sgd2hldGhlciBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUworICogQHM6CQl0aGUgc3RydWN0IHBjbWNpYV9zb2NrZXQgd2UgYXJlIHRvIGNoZWNrCisgKiBAaW5mbzoJcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgKHZhbGlkKSBDSVMsIG9yIDAKKyAqCisgKiBUaGlzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGNhcmQgaGFzIGEgc2Vuc2libGUgQ0lTLiAgSW4gQGluZm8sIGl0CisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBDSVMsIG9yIDAgaWYgdGhlIENJUyBsb29rcyBiYWQuIFRoZQorICogY2hlY2tzIGluY2x1ZGUgbWFraW5nIHN1cmUgc2V2ZXJhbCBjcml0aWNhbCB0dXBsZXMgYXJlIHByZXNlbnQgYW5kCisgKiB2YWxpZDsgc2VlaW5nIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIGlzIHJlYXNvbmFibGU7IGFuZAorICogbG9va2luZyBmb3IgdHVwbGVzIHRoYXQgdXNlIHJlc2VydmVkIGNvZGVzLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLwogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaW5mbykKIHsKLSAgICB0dXBsZV90ICp0dXBsZTsKLSAgICBjaXNwYXJzZV90ICpwOwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0gICAgaW50IHJldCwgcmVzZXJ2ZWQsIGRldl9vayA9IDAsIGlkZW50X29rID0gMDsKKwl0dXBsZV90ICp0dXBsZTsKKwljaXNwYXJzZV90ICpwOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJaW50IHJldCwgcmVzZXJ2ZWQsIGRldl9vayA9IDAsIGlkZW50X29rID0gMDsKIAotICAgIGlmICghcykKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgdHVwbGUgPSBrbWFsbG9jKHNpemVvZigqdHVwbGUpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAodHVwbGUgPT0gTlVMTCkgewotCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOwotCSAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0gICAgcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotCSAgICBrZnJlZSh0dXBsZSk7Ci0JICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7Ci0JICAgIHJldHVybiAtRU5PTUVNOwotICAgIH0KKwkvKiBXZSBkbyBub3Qgd2FudCB0byB2YWxpZGF0ZSB0aGUgQ0lTIGNhY2hlLi4uICovCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXN0cm95X2Npc19jYWNoZShzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKLSAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwotICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7Ci0gICAgaWYgKHJldCAhPSAwKQotCWdvdG8gZG9uZTsKKwl0dXBsZSA9IGttYWxsb2Moc2l6ZW9mKCp0dXBsZSksIEdGUF9LRVJORUwpOworCWlmICh0dXBsZSA9PSBOVUxMKSB7CisJCWRldl93YXJuKCZzLT5kZXYsICJubyBtZW1vcnkgdG8gdmFsaWRhdGUgQ0lTXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmIChwID09IE5VTEwpIHsKKwkJa2ZyZWUodHVwbGUpOworCQlkZXZfd2Fybigmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotICAgIC8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAotICAgICAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KLSAgICBpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQotCWRldl9vaysrOwotCi0gICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCi0gICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCi0gICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKLQlpZGVudF9vaysrOwotCi0gICAgaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQotCWdvdG8gZG9uZTsKLQotICAgIGZvciAoY291bnQgPSAxOyBjb3VudCA8IE1BWF9UVVBMRVM7IGNvdW50KyspIHsKLQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKKwljb3VudCA9IHJlc2VydmVkID0gMDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOworCXR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKwlyZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAJaWYgKHJldCAhPSAwKQotCQlicmVhazsKLQlpZiAoKCh0dXBsZS0+VHVwbGVDb2RlID4gMHgyMykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDQwKSkgfHwKLQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg0NykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDgwKSkgfHwKLQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg5MCkgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweGZmKSkpCi0JICAgIHJlc2VydmVkKys7Ci0gICAgfQotICAgIGlmICgoY291bnQgPT0gTUFYX1RVUExFUykgfHwgKHJlc2VydmVkID4gNSkgfHwKLQkoKCFkZXZfb2sgfHwgIWlkZW50X29rKSAmJiAoY291bnQgPiAxMCkpKQotCWNvdW50ID0gMDsKKwkJZ290byBkb25lOworCisJLyogRmlyc3QgdHVwbGUgc2hvdWxkIGJlIERFVklDRTsgd2Ugc2hvdWxkIHJlYWxseSBoYXZlIGVpdGhlciB0aGF0CisJICAgb3IgYSBDRlRBQkxFX0VOVFJZIG9mIHNvbWUgc29ydCAqLworCWlmICgodHVwbGUtPlR1cGxlQ29kZSA9PSBDSVNUUExfREVWSUNFKSB8fAorCSAgICAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkpIHx8CisJICAgICghcGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSkpCisJCWRldl9vaysrOworCisJLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCisJICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCisJICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCisJaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKKwkgICAgKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAorCSAgICAocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQorCQlpZGVudF9vaysrOworCisJaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQorCQlnb3RvIGRvbmU7CisKKwlmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7CisJCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CisJCSAgICAoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDQ3KSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4ODApKSB8fAorCQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg5MCkgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweGZmKSkpCisJCQlyZXNlcnZlZCsrOworCX0KKwlpZiAoKGNvdW50ID09IE1BWF9UVVBMRVMpIHx8IChyZXNlcnZlZCA+IDUpIHx8CisJCSgoIWRldl9vayB8fCAhaWRlbnRfb2spICYmIChjb3VudCA+IDEwKSkpCisJCWNvdW50ID0gMDsKKworCXJldCA9IDA7CiAKIGRvbmU6Ci0gICAgaWYgKGluZm8pCi0JICAgICppbmZvID0gY291bnQ7Ci0gICAga2ZyZWUodHVwbGUpOwotICAgIGtmcmVlKHApOwotICAgIHJldHVybiAwOworCS8qIGludmFsaWRhdGUgQ0lTIGNhY2hlIG9uIGZhaWx1cmUgKi8KKwlpZiAoIWRldl9vayB8fCAhaWRlbnRfb2sgfHwgIWNvdW50KSB7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJCWRlc3Ryb3lfY2lzX2NhY2hlKHMpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCXJldCA9IC1FSU87CisJfQorCisJaWYgKGluZm8pCisJCSppbmZvID0gY291bnQ7CisJa2ZyZWUodHVwbGUpOworCWtmcmVlKHApOworCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF92YWxpZGF0ZV9jaXMpOworCisKKyNkZWZpbmUgdG9fc29ja2V0KF9kZXYpIGNvbnRhaW5lcl9vZihfZGV2LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCwgZGV2KQorCitzdGF0aWMgc3NpemVfdCBwY2NhcmRfZXh0cmFjdF9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNoYXIgKmJ1ZiwKKwkJCQkgIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwl0dXBsZV90IHR1cGxlOworCWludCBzdGF0dXMsIGk7CisJbG9mZl90IHBvaW50ZXIgPSAwOworCXNzaXplX3QgcmV0ID0gMDsKKwl1X2NoYXIgKnR1cGxlYnVmZmVyOworCXVfY2hhciAqdGVtcGJ1ZmZlcjsKKworCXR1cGxlYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0dXBsZWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0ZW1wYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1OCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wYnVmZmVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV90dXBsZTsKKwl9CisKKwltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGVfdCkpOworCisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9MSU5LIHwgVFVQTEVfUkVUVVJOX0NPTU1PTjsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCisJc3RhdHVzID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKKwl3aGlsZSAoIXN0YXR1cykgeworCQl0dXBsZS5UdXBsZURhdGEgPSB0dXBsZWJ1ZmZlcjsKKwkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCQltZW1zZXQodHVwbGVidWZmZXIsIDAsIHNpemVvZih1X2NoYXIpICogMjU1KTsKKworCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCisJCWlmIChvZmYgPCAocG9pbnRlciArIDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pKSB7CisJCQl0ZW1wYnVmZmVyWzBdID0gdHVwbGUuVHVwbGVDb2RlICYgMHhmZjsKKwkJCXRlbXBidWZmZXJbMV0gPSB0dXBsZS5UdXBsZUxpbmsgJiAweGZmOworCQkJZm9yIChpID0gMDsgaSA8IHR1cGxlLlR1cGxlRGF0YUxlbjsgaSsrKQorCQkJCXRlbXBidWZmZXJbaSArIDJdID0gdHVwbGVidWZmZXJbaV0gJiAweGZmOworCisJCQlmb3IgKGkgPSAwOyBpIDwgKDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pOyBpKyspIHsKKwkJCQlpZiAoKChpICsgcG9pbnRlcikgPj0gb2ZmKSAmJgorCQkJCSAgICAoaSArIHBvaW50ZXIpIDwgKG9mZiArIGNvdW50KSkgeworCQkJCQlidWZbcmV0XSA9IHRlbXBidWZmZXJbaV07CisJCQkJCXJldCsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXBvaW50ZXIgKz0gMiArIHR1cGxlLlR1cGxlRGF0YUxlbjsKKworCQlpZiAocG9pbnRlciA+PSAob2ZmICsgY291bnQpKQorCQkJYnJlYWs7CisKKwkJaWYgKHR1cGxlLlR1cGxlQ29kZSA9PSBDSVNUUExfRU5EKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKKwl9CisKKwlrZnJlZSh0ZW1wYnVmZmVyKTsKKyBmcmVlX3R1cGxlOgorCWtmcmVlKHR1cGxlYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IDB4MjAwOworCisJaWYgKG9mZiA+PSBzaXplKQorCQljb3VudCA9IDA7CisJZWxzZSB7CisJCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCQl1bnNpZ25lZCBpbnQgY2hhaW5zOworCisJCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCisJCQljb3VudCA9IHNpemUgLSBvZmY7CisKKwkJcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCisJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZjaGFpbnMpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICghY2hhaW5zKQorCQkJcmV0dXJuIC1FTk9EQVRBOworCisJCWNvdW50ID0gcGNjYXJkX2V4dHJhY3RfY2lzKHMsIGJ1Ziwgb2ZmLCBjb3VudCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jaXMoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCWludCBlcnJvcjsKKworCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKworCWlmIChvZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvdW50ID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyb3IgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLCBjb3VudCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLUVJTzsKKworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyID0geworCS5hdHRyID0geyAubmFtZSA9ICJjaXMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCisJLnNpemUgPSAweDIwMCwKKwkucmVhZCA9IHBjY2FyZF9zaG93X2NpcywKKwkud3JpdGUgPSBwY2NhcmRfc3RvcmVfY2lzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDZkNmY4MmIuLmU2NzllNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtMTQwLDE5ICsxNDAsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnZXRfZGV2aWNlKCZza3QtPmRldik7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwotCXNrdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmICghdHJ5X21vZHVsZV9nZXQoc2t0LT5vd25lcikpIHsKLQkJcHV0X2RldmljZSgmc2t0LT5kZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHNrdDsKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfc29ja2V0KTsKIAogCiB2b2lkIHBjbWNpYV9wdXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JbW9kdWxlX3B1dChza3QtPm93bmVyKTsKIAlwdXRfZGV2aWNlKCZza3QtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9wdXRfc29ja2V0KTsKQEAgLTE4MSw4ICsxNzUsNiBAQAogCiAJZGV2X2RiZygmc29ja2V0LT5kZXYsICJwY21jaWFfcmVnaXN0ZXJfc29ja2V0KDB4JXApXG4iLCBzb2NrZXQtPm9wcyk7CiAKLQlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT5sb2NrKTsKLQogCS8qIHRyeSB0byBvYnRhaW4gYSBzb2NrZXQgbnVtYmVyIFt5ZXMsIGl0IGdldHMgdWdseSBpZiB3ZQogCSAqIHJlZ2lzdGVyIG1vcmUgdGhhbiAyXnNpemVvZih1bnNpZ25lZCBpbnQpIHBjbWNpYQogCSAqIHNvY2tldHMuLi4gYnV0IHRoZSBzb2NrZXQgbnVtYmVyIGlzIGRlcHJlY2F0ZWQKQEAgLTIyOCwxMCArMjIwLDEzIEBACiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnNvY2tldF9yZWxlYXNlZCk7CiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnRocmVhZF9kb25lKTsKIAltdXRleF9pbml0KCZzb2NrZXQtPnNrdF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc29ja2V0LT5vcHNfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzb2NrZXQtPnRocmVhZF9sb2NrKTsKIAogCWlmIChzb2NrZXQtPnJlc291cmNlX29wcy0+aW5pdCkgeworCQltdXRleF9sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldCA9IHNvY2tldC0+cmVzb3VyY2Vfb3BzLT5pbml0KHNvY2tldCk7CisJCW11dGV4X3VubG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJfQpAQCAtMjgzLDE1ICsyNzgsMTcgQEAKIAlpZiAoc29ja2V0LT50aHJlYWQpCiAJCWt0aHJlYWRfc3RvcChzb2NrZXQtPnRocmVhZCk7CiAKLQlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKLQogCS8qIHJlbW92ZSBmcm9tIG91ciBvd24gbGlzdCAqLwogCWRvd25fd3JpdGUoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAJbGlzdF9kZWwoJnNvY2tldC0+c29ja2V0X2xpc3QpOwogCXVwX3dyaXRlKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCiAJLyogd2FpdCBmb3Igc3lzZnMgdG8gZHJvcCBhbGwgcmVmZXJlbmNlcyAqLwotCXJlbGVhc2VfcmVzb3VyY2VfZGIoc29ja2V0KTsKKwlpZiAoc29ja2V0LT5yZXNvdXJjZV9vcHMtPmV4aXQpIHsKKwkJbXV0ZXhfbG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOworCQlzb2NrZXQtPnJlc291cmNlX29wcy0+ZXhpdChzb2NrZXQpOworCQltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwl9CiAJd2FpdF9mb3JfY29tcGxldGlvbigmc29ja2V0LT5zb2NrZXRfcmVsZWFzZWQpOwogfSAvKiBwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KTsKQEAgLTMyOCw3ICszMjUsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwlpZiAoKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChldmVudCAhPSBDU19FVkVOVF9DQVJEX1JFTU9WQUwpKQogCQlyZXR1cm4gMDsKIAogCWRldl9kYmcoJnMtPmRldiwgInNlbmRfZXZlbnQoZXZlbnQgJWQsIHByaSAlZCwgY2FsbGJhY2sgMHglcClcbiIsCkBAIC0zNDYsMTMgKzM0Myw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZV9kcml2ZXJzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JZGV2X2RiZygmc2t0LT5kZXYsICJyZW1vdmVfZHJpdmVyc1xuIik7Ci0KLQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7Ci19Ci0KIHN0YXRpYyBpbnQgc29ja2V0X3Jlc2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7CiAJaW50IHN0YXR1cywgaTsKQEAgLTM5NSw3ICszODUsOSBAQAogCiAJZGV2X2RiZygmcy0+ZGV2LCAic2h1dGRvd25cbiIpOwogCi0Jc29ja2V0X3JlbW92ZV9kcml2ZXJzKHMpOworCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXMtPnN0YXRlICY9IFNPQ0tFVF9JTlVTRSB8IFNPQ0tFVF9QUkVTRU5UOwogCW1zbGVlcChzaHV0ZG93bl9kZWxheSAqIDEwKTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0U7CkBAIC00MDYsMTEgKzM5OCwyMSBAQAogCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAlzLT5pcnEuQXNzaWduZWRJUlEgPSBzLT5pcnEuQ29uZmlnID0gMDsKIAlzLT5sb2NrX2NvdW50ID0gMDsKLQlkZXN0cm95X2Npc19jYWNoZShzKTsKKwlrZnJlZShzLT5mYWtlX2Npcyk7CisJcy0+ZmFrZV9jaXMgPSBOVUxMOworCXMtPmZ1bmN0aW9ucyA9IDA7CisKKwkvKiBGcm9tIGhlcmUgb24gd2UgY2FuIGJlIHN1cmUgdGhhdCBvbmx5IHdlICh0aGF0IGlzLCB0aGUKKwkgKiBwY2NhcmRkIHRocmVhZCkgYWNjZXNzZXMgdGhpcyBzb2NrZXQsIGFuZCBhbGwgKDE2LWJpdCkKKwkgKiBQQ01DSUEgaW50ZXJhY3Rpb25zIGFyZSBnb25lLiBUaGVyZWZvcmUsIHJlbGVhc2UKKwkgKiBvcHNfbXV0ZXggc28gdGhhdCB3ZSBkb24ndCBnZXQgYSBzeXNmcy1yZWxhdGVkIGxvY2tkZXAKKwkgKiB3YXJuaW5nLgorCSAqLworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwogI2lmZGVmIENPTkZJR19DQVJEQlVTCiAJY2JfZnJlZShzKTsKICNlbmRpZgotCXMtPmZ1bmN0aW9ucyA9IDA7CiAKIAkvKiBnaXZlIHNvY2tldCBzb21lIHRpbWUgdG8gcG93ZXIgZG93biAqLwogCW1zbGVlcCgxMDApOwpAQCAtNDIxLDcgKzQyMyw3IEBACiAJCQkgICAiKioqIERBTkdFUiAqKiogdW5hYmxlIHRvIHJlbW92ZSBzb2NrZXQgcG93ZXJcbiIpOwogCX0KIAotCWNzX3NvY2tldF9wdXQocyk7CisJcy0+c3RhdGUgJj0gflNPQ0tFVF9JTlVTRTsKIH0KIAogc3RhdGljIGludCBzb2NrZXRfc2V0dXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwgaW50IGluaXRpYWxfZGVsYXkpCkBAIC00NjAsNyArNDYyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXNrdC0+c3RhdGUgfD0gU09DS0VUX0NBUkRCVVM7Ci0JfQorCX0gZWxzZQorCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfQ0FSREJVUzsKIAogCS8qCiAJICogRGVjb2RlIHRoZSBjYXJkIHZvbHRhZ2UgcmVxdWlyZW1lbnRzLCBhbmQgYXBwbHkgcG93ZXIgdG8gdGhlIGNhcmQuCkBAIC01MDksOCArNTEyLDEyIEBACiAKIAlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydFxuIik7CiAKLQlpZiAoIWNzX3NvY2tldF9nZXQoc2t0KSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0lOVVNFKSB7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfSU5VU0U7CiAKIAlyZXQgPSBzb2NrZXRfc2V0dXAoc2t0LCBzZXR1cF9kZWxheSk7CiAJaWYgKHJldCA9PSAwKSB7CkBAIC01MjgsOSArNTM1LDExIEBACiAJCX0KICNlbmRpZgogCQlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydCBkb25lXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKIAkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKIAl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKIAkJc29ja2V0X3NodXRkb3duKHNrdCk7CiAJfQogCkBAIC01NDIsNTggKzU1MSw2NiBAQAogCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJc2t0LT5zdXNwZW5kZWRfc3RhdGUgPSBza3QtPnN0YXRlOworCiAJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1NVU1BFTkQsIENTX0VWRU5UX1BSSV9MT1cpOwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPm9wcy0+c3VzcGVuZCkKIAkJc2t0LT5vcHMtPnN1c3BlbmQoc2t0KTsKIAlza3QtPnN0YXRlIHw9IFNPQ0tFVF9TVVNQRU5EOwotCisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogeworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKIAlza3QtPnNvY2tldCA9IGRlYWRfc29ja2V0OwogCXNrdC0+b3BzLT5pbml0KHNrdCk7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpCiAJCXNrdC0+cmVzdW1lX3N0YXR1cyA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X2xhdGVfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfU1VTUEVORDsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CisKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOworCisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cykgeworCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNrdC0+c3VzcGVuZGVkX3N0YXRlICE9IHNrdC0+c3RhdGUpIHsKKwkJZGV2X2RiZygmc2t0LT5kZXYsCisJCQkic3VzcGVuZCBzdGF0ZSAweCV4ICE9IHJlc3VtZSBzdGF0ZSAweCV4XG4iLAorCQkJc2t0LT5zdXNwZW5kZWRfc3RhdGUsIHNrdC0+c3RhdGUpOworCisJCXNvY2tldF9zaHV0ZG93bihza3QpOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCWlmIChza3QtPnJlc3VtZV9zdGF0dXMgPT0gMCkgewotCQkvKgotCQkgKiBGSVhNRTogbmVlZCBhIGJldHRlciBjaGVjayBoZXJlIGZvciBjYXJkYnVzIGNhcmRzLgotCQkgKi8KLQkJaWYgKHZlcmlmeV9jaXNfY2FjaGUoc2t0KSAhPSAwKSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKLQkJCXNvY2tldF9yZW1vdmVfZHJpdmVycyhza3QpOwotCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKLQkJCS8qCi0JCQkgKiBXb3JrYXJvdW5kOiBnaXZlIERTIHRpbWUgdG8gc2NoZWR1bGUgcmVtb3ZhbC4KLQkJCSAqIFJlbW92ZSBtZSBvbmNlIHRoZSAxMDBtcyBkZWxheSBpcyBlbGltaW5hdGVkCi0JCQkgKiBpbiBkcy5jCi0JCQkgKi8KLQkJCW1zbGVlcCgyMDApOwotCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJnNrdC0+ZGV2LCAiY2lzIG1hdGNoZXMgY2FjaGVcbiIpOwotCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1JFU1VNRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0KLQl9IGVsc2UgewotCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKKwkJLyogV2UgY2FuJ3QgYmUgc3VyZSB0aGUgQ2FyZEJ1cyBjYXJkIGlzIHRoZSBzYW1lCisJCSAqIGFzIHRoZSBvbmUgcHJldmlvdXNseSBpbnNlcnRlZC4gVGhlcmVmb3JlLCByZW1vdmUKKwkJICogYW5kIHJlLWFkZC4uLiAqLworCQljYl9mcmVlKHNrdCk7CisJCWNiX2FsbG9jKHNrdCk7CisJCXJldHVybiAwOwogCX0KKyNlbmRpZgogCi0Jc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7Ci0KKwlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUE1fUkVTVU1FLCBDU19FVkVOVF9QUklfTE9XKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcyLDIwICs2ODksMjYgQEAKIAogCWNvbXBsZXRlKCZza3QtPnRocmVhZF9kb25lKTsKIAorCS8qIHdhaXQgZm9yIHVzZXJzcGFjZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgyNTApOworCiAJc2V0X2ZyZWV6YWJsZSgpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgaW50IGV2ZW50czsKKwkJdW5zaWduZWQgaW50IHN5c2ZzX2V2ZW50czsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZza3QtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAJCWV2ZW50cyA9IHNrdC0+dGhyZWFkX2V2ZW50czsKIAkJc2t0LT50aHJlYWRfZXZlbnRzID0gMDsKKwkJc3lzZnNfZXZlbnRzID0gc2t0LT5zeXNmc19ldmVudHM7CisJCXNrdC0+c3lzZnNfZXZlbnRzID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2t0LT50aHJlYWRfbG9jaywgZmxhZ3MpOwogCisJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJaWYgKGV2ZW50cykgewotCQkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0RFVEVDVCkKIAkJCQlzb2NrZXRfZGV0ZWN0X2NoYW5nZShza3QpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0JBVERFQUQpCkBAIC02OTQsMTAgKzcxNywzOSBAQAogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9CQVRURVJZX0xPVywgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJCQlpZiAoZXZlbnRzICYgU1NfUkVBRFkpCiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFQURZX0NIQU5HRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKHN5c2ZzX2V2ZW50cykgeworCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfRUpFQ1QpCisJCQkJc29ja2V0X3JlbW92ZShza3QpOworCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfSU5TRVJUKQorCQkJCXNvY2tldF9pbnNlcnQoc2t0KTsKKwkJCWlmICgoc3lzZnNfZXZlbnRzICYgUENNQ0lBX1VFVkVOVF9SRVNVTUUpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJcmV0ID0gc29ja2V0X3Jlc3VtZShza3QpOworCQkJCWlmICghcmV0ICYmIHNrdC0+Y2FsbGJhY2spCisJCQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOworCQkJfQorCQkJaWYgKChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJaWYgKHNrdC0+Y2FsbGJhY2spCisJCQkJCXJldCA9IHNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKKwkJCQllbHNlCisJCQkJCXJldCA9IDA7CisJCQkJaWYgKCFyZXQpCisJCQkJCXNvY2tldF9zdXNwZW5kKHNrdCk7CisJCQl9CisJCQlpZiAoKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSkgJiYKKwkJCQkhKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKKwkJCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQorCQkJCQlza3QtPmNhbGxiYWNrLT5yZXF1ZXJ5KHNrdCk7CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CisKKwkJaWYgKGV2ZW50cyB8fCBzeXNmc19ldmVudHMpCisJCQljb250aW51ZTsKKwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKQEAgLTcwNyw2ICs3NTksMTMgQEAKIAkvKiBtYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgYmVmb3JlIHdlIGV4aXQgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCisJLyogc2h1dCBkb3duIHNvY2tldCwgaWYgYSBkZXZpY2UgaXMgc3RpbGwgcHJlc2VudCAqLworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHsKKwkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOworCQlzb2NrZXRfcmVtb3ZlKHNrdCk7CisJCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOworCX0KKwogCS8qIHJlbW92ZSBmcm9tIHRoZSBkZXZpY2UgY29yZSAqLwogCXBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KCZza3QtPmRldik7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnNrdC0+ZGV2KTsKQEAgLTczMiw2ICs3OTEsMzEgQEAKIH0gLyogcGNtY2lhX3BhcnNlX2V2ZW50cyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcGFyc2VfZXZlbnRzKTsKIAorLyoqCisgKiBwY21jaWFfcGFyc2VfdWV2ZW50cygpIC0gdGVsbCBwY2NhcmRkIHRvIGlzc3VlIG1hbnVhbCBjb21tYW5kcworICogQHM6CQl0aGUgUENNQ0lBIHNvY2tldCB3ZSB3YW4ndCB0byBjb21tYW5kCisgKiBAZXZlbnRzOglldmVudHMgdG8gcGFzcyB0byBwY2NhcmRkCisgKgorICogdXNlcnNwYWNlLWlzc3VlZCBpbnNlcnQsIGVqZWN0LCBzdXNwZW5kIGFuZCByZXN1bWUgY29tbWFuZHMgbXVzdCBiZQorICogaGFuZGxlZCBieSBwY2NhcmRkIHRvIGF2b2lkIGFueSBzeXNmcy1yZWxhdGVkIGRlYWRsb2Nrcy4gVmFsaWQgZXZlbnRzCisgKiBhcmUgUENNQ0lBX1VFVkVOVF9FSkVDVCAoZm9yIGVqZWN0KSwgUENNQ0lBX1VFVkVOVF9fSU5TRVJUIChmb3IgaW5zZXJ0KSwKKyAqIFBDTUNJQV9VRVZFTlRfUkVTVU1FIChmb3IgcmVzdW1lKSwgUENNQ0lBX1VFVkVOVF9TVVNQRU5EIChmb3Igc3VzcGVuZCkKKyAqIGFuZCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkgKGZvciByZS1xdWVyeWluZyB0aGUgUENNQ0lBIGNhcmQpLgorICovCit2b2lkIHBjbWNpYV9wYXJzZV91ZXZlbnRzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2ludCBldmVudHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkZXZfZGJnKCZzLT5kZXYsICJwYXJzZV91ZXZlbnRzOiBldmVudHMgJTA4eFxuIiwgZXZlbnRzKTsKKwlpZiAocy0+dGhyZWFkKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT50aHJlYWRfbG9jaywgZmxhZ3MpOworCQlzLT5zeXNmc19ldmVudHMgfD0gZXZlbnRzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT50aHJlYWRfbG9jaywgZmxhZ3MpOworCisJCXdha2VfdXBfcHJvY2VzcyhzLT50aHJlYWQpOworCX0KK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3VldmVudHMpOworCiAKIC8qIHJlZ2lzdGVyIHBjbWNpYV9jYWxsYmFjayAqLwogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpCkBAIC03OTYsNyArODgwLDEwIEBACiAJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKHNrdC0+Y2FsbGJhY2spCiAJCQkJc2t0LT5jYWxsYmFjay0+c3VzcGVuZChza3QpOwotCQkJaWYgKHNvY2tldF9yZXNldChza3QpID09IDApIHsKKwkJCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJCXJldCA9IHNvY2tldF9yZXNldChza3QpOworCQkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CisJCQlpZiAocmV0ID09IDApIHsKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJCQkJaWYgKHNrdC0+Y2FsbGJhY2spCiAJCQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOwpAQCAtODEyLDEyMSArODk5LDYgQEAKIEVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc2V0X2NhcmQpOwogCiAKLS8qIFRoZXNlIHNodXQgZG93biBvciB3YWtlIHVwIGEgc29ja2V0LiAgVGhleSBhcmUgc29ydCBvZiB1c2VyCi0gKiBpbml0aWF0ZWQgdmVyc2lvbnMgb2YgdGhlIEFQTSBzdXNwZW5kIGFuZCByZXN1bWUgYWN0aW9ucy4KLSAqLwotaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+Y2FsbGJhY2spIHsKLQkJCXJldCA9IHNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKLQkJCWlmIChyZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ID0gc29ja2V0X3N1c3BlbmQoc2t0KTsKLQl9IHdoaWxlICgwKTsKLQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19IC8qIHN1c3BlbmRfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfc3VzcGVuZF9jYXJkKTsKLQotCi1pbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAid2FraW5nIHVwIHNvY2tldFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ID0gc29ja2V0X3Jlc3VtZShza3QpOwotCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQotCQkJc2t0LT5jYWxsYmFjay0+cmVzdW1lKHNrdCk7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiByZXN1bWVfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVzdW1lX2NhcmQpOwotCi0KLS8qIFRoZXNlIGhhbmRsZSB1c2VyIHJlcXVlc3RzIHRvIGVqZWN0IG9yIGluc2VydCBhIGNhcmQuICovCi1pbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJ1c2VyIGVqZWN0IHJlcXVlc3RcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0ID0gc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1QsIENTX0VWRU5UX1BSSV9MT1cpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JCXNvY2tldF9yZW1vdmUoc2t0KTsKLQkJcmV0ID0gMDsKLQl9IHdoaWxlICgwKTsKLQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19IC8qIGVqZWN0X2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2VqZWN0X2NhcmQpOwotCi0KLWludCBwY21jaWFfaW5zZXJ0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJ1c2VyIGluc2VydCByZXF1ZXN0XG4iKTsKLQotCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKLQlkbyB7Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzb2NrZXRfaW5zZXJ0KHNrdCkgPT0gLUVOT0RFVikgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IDA7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBpbnNlcnRfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfaW5zZXJ0X2NhcmQpOwotCi0KIHN0YXRpYyBpbnQgcGNtY2lhX3NvY2tldF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDNiYzAyZDUzLi5mOTU4NjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTg3LDM3ICs4NywxMSBAQAogI2RlZmluZSBTT0NLRVRfQ0FSREJVUwkJMHg4MDAwCiAjZGVmaW5lIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRwkweDEwMDAwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGNzX3NvY2tldF9nZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JV0FSTl9PTihza3QtPnN0YXRlICYgU09DS0VUX0lOVVNFKTsKLQotCXJldCA9IHRyeV9tb2R1bGVfZ2V0KHNrdC0+b3duZXIpOwotCWlmIChyZXQpCi0JCXNrdC0+c3RhdGUgfD0gU09DS0VUX0lOVVNFOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjc19zb2NrZXRfcHV0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfSU5VU0UpIHsKLQkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX0lOVVNFOwotCQltb2R1bGVfcHV0KHNrdC0+b3duZXIpOwotCX0KLX0KLQogCiAvKgogICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWFfY29yZSI6CiAgKi8KIAotLyogY2lzdHBsLmMgKi8KLWludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQotLyogcnNyY19tZ3IuYyAqLwotdm9pZCByZWxlYXNlX3Jlc291cmNlX2RiKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQogLyogc29ja2V0X3N5c2ZzLmMgKi8KIGV4dGVybiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMjUsOCArOTksNiBAQAogLyogY2FyZGJ1cy5jICovCiBpbnQgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogdm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sCi0JCXZvaWQgKnB0cik7CiAKIAogCkBAIC0xMzgsNyArMTEwLDggQEAKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKIAlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7Ci0Jdm9pZAkJKCpyZXF1ZXJ5KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBuZXdfY2lzKTsKKwl2b2lkCQkoKnJlcXVlcnkpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJaW50CQkoKnZhbGlkYXRlKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaSk7CiAJaW50CQkoKnN1c3BlbmQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiAJaW50CQkoKnJlc3VtZSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIH07CkBAIC0xNTEsMTYgKzEyNCwzNSBAQAogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpOwogc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0X2J5X25yKHVuc2lnbmVkIGludCBucik7CiAKLWludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLQotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3ZvaWQgcGNtY2lhX3BhcnNlX3VldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfRUpFQ1QJMHgwMDAxCisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfSU5TRVJUCTB4MDAwMgorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1NVU1BFTkQJMHgwMDA0CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfUkVTVU1FCTB4MDAwOAorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1JFUVVFUlkJMHgwMDEwCiAKIHN0cnVjdCBwY21jaWFfc29ja2V0ICpwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHZvaWQgcGNtY2lhX3B1dF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKKy8qCisgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCisgKi8KKy8qIGRzLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOworCisvKiBwY21jaWFfcmVzb3VyY2UuYyAqLworZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitleHRlcm4gaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKKwkJCQkJICAgICAgIHVfbG9uZyBudW0sCisJCQkJCSAgICAgICB1X2xvbmcgYWxpZ24sCisJCQkJCSAgICAgICBpbnQgbG93LAorCQkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCisKIC8qIGNpc3RwbC5jICovCitleHRlcm4gc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyOworCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCiAJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7CiB2b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKQEAgLTE3Miw4ICsxNjQsOCBAQAogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAotLyogbG9vcCBvdmVyIENJUyBlbnRyaWVzICovCiBpbnQgcGNjYXJkX2xvb3BfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKIAkJICAgICAgY2lzZGF0YV90IGNvZGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2X2RhdGEsCiAJCSAgICAgIGludCAoKmxvb3BfdHVwbGUpICh0dXBsZV90ICp0dXBsZSwKQEAgLTE4OSwzNSArMTgxLDggQEAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKIAogCi0vKiByc3JjX21nci5jICovCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJICAgICAgIGludCBudW0sCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJICAgICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyByX2VuZCwKLQkJCSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsCi0JCQkJCXVfbG9uZyBudW0sCi0JCQkJCXVfbG9uZyBhbGlnbiwKLQkJCQkJaW50IGxvdywKLQkJCQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCi0vKgotICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWEiLgotICovCi0vKiBkcy5jICovCi1leHRlcm4gc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTsKLQotLyogcGNtY2lhX3Jlc291cmNlLmMgKi8KLWV4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogLyogZHMuYyAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgcGNtY2lhX2Rldl9saXN0X2xvY2s7Ci0KIGV4dGVybiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2dldF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIGV4dGVybiB2b2lkIHBjbWNpYV9wdXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jIGIvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1NGFiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCkBAIC0wLDAgKzEsNjEyIEBACisvKgorICogUENNQ0lBIHNvY2tldCBjb2RlIGZvciB0aGUgQWxjaGVteSBEYjF4eHgvUGIxeHh4IGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgorICoKKyAqLworCisvKiBUaGlzIGlzIGEgZmFpcmx5IGdlbmVyaWMgUENNQ0lBIHNvY2tldCBkcml2ZXIgc3VpdGFibGUgZm9yIHRoZQorICogZm9sbG93aW5nIEFsY2hlbXkgRGV2ZWxvcG1lbnQgYm9hcmRzOgorICogIERiMTAwMCwgRGIvUGIxNTAwLCBEYi9QYjExMDAsIERiL1BiMTU1MCwgRGIvUGIxMjAwLgorICoKKyAqIFRoZSBEYjEwMDAgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZTogIFBlci1zb2NrZXQgY2FyZC0sIGNhcmRkZXRlY3QtIGFuZAorICogIHN0YXR1c2NoYW5nZSBJUlFzIGNvbm5lY3RlZCB0byBTb0MgR1BJT3MsIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorICogIGJpdHMgYXJyYW5nZWQgaW4gcGVyLXNvY2tldCBncm91cHMgaW4gYW4gZXh0ZXJuYWwgUExELiAgQWxsIGJvYXJkcworICogIGxpc3RlZCBoZXJlIHVzZSB0aGlzIGxheW91dCwgaW5jbHVkaW5nIGJpdCBwb3NpdGlvbnMgYW5kIG1lYW5pbmdzLgorICogIE9mIGNvdXJzZSB0aGVyZSBhcmUgZXhjZXB0aW9ucyBpbiBsYXRlciBib2FyZHM6CisgKgorICoJLSBQYjExMDAvUGIxNTAwOiAgc2luZ2xlIHNvY2tldCBvbmx5OyB2b2x0YWdlIGtleSBiaXRzIFZTIGFyZQorICoJCQkgIGF0IFNUQVRVU1s1OjRdIChpbnN0ZWFkIG9mIFNUQVRVU1sxOjBdKS4KKyAqCS0gQXUxMjAwLWJhc2VkOgkgIGFkZGl0aW9uYWwgY2FyZC1lamVjdCBpcnFzLCBpcnFzIG5vdCBncGlvcyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjZGVmaW5lIE1FTV9NQVBfU0laRQkweDQwMDAwMAorI2RlZmluZSBJT19NQVBfU0laRQkweDEwMDAKKworc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKwlpbnQJCW5yOwkJLyogc29ja2V0IG51bWJlciAqLworCXZvaWQJCSp2aXJ0X2lvOworCisJcGh5c19hZGRyX3QJcGh5c19pbzsKKwlwaHlzX2FkZHJfdAlwaHlzX2F0dHI7CisJcGh5c19hZGRyX3QJcGh5c19tZW07CisKKwkvKiBwcmV2aW91cyBmbGFncyBmb3Igc2V0X3NvY2tldCgpICovCisJdW5zaWduZWQgaW50IG9sZF9mbGFnczsKKworCS8qIGludGVycnVwdCBzb3VyY2VzOiBsaW51eCBpcnEgbnVtYmVycyEgKi8KKwlpbnQJaW5zZXJ0X2lycTsJLyogZGVmYXVsdCBjYXJkZGV0ZWN0IGlycSAqLworCWludAlzdHNjaGdfaXJxOwkvKiBjYXJkLXN0YXR1cy1jaGFuZ2UgaXJxICovCisJaW50CWNhcmRfaXJxOwkvKiBjYXJkIGlycSAqLworCWludAllamVjdF9pcnE7CS8qIGRiMTIwMC9wYjEyMDAgaGF2ZSB0aGVzZSAqLworCisjZGVmaW5lIEJPQVJEX1RZUEVfREVGQVVMVAkwCS8qIG1vc3QgYm9hcmRzICovCisjZGVmaW5lIEJPQVJEX1RZUEVfREIxMjAwCTEJLyogSVJRcyBhcmVuJ3QgZ3Bpb3MgKi8KKyNkZWZpbmUgQk9BUkRfVFlQRV9QQjExMDAJMgkvKiBWUyBiaXRzIHNsaWdodGx5IGRpZmZlcmVudCAqLworCWludAlib2FyZF90eXBlOworfTsKKworI2RlZmluZSB0b19kYjF4X3NvY2tldCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRiMXhfcGNtY2lhX3NvY2ssIHNvY2tldCkKKworLyogREIvUEIxMjAwOiBjaGVjayBDUExEIFNJR1NUQVRVUyByZWdpc3RlciBiaXQgMTAvMTIgKi8KK3N0YXRpYyBpbnQgZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJdW5zaWduZWQgc2hvcnQgc2lnc3RhdDsKKworCXNpZ3N0YXQgPSBiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKTsKKwlyZXR1cm4gc2lnc3RhdCAmIDEgPDwgKDggKyAyICogc29jay0+bnIpOworfQorCisvKiBjYXJkZGV0ZWN0IGdwaW86IGxvdy1hY3RpdmUgKi8KK3N0YXRpYyBpbnQgZGIxMDAwX2NhcmRfaW5zZXJ0ZWQoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShpcnFfdG9fZ3Bpbyhzb2NrLT5pbnNlcnRfaXJxKSk7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXN3aXRjaCAoc29jay0+Ym9hcmRfdHlwZSkgeworCWNhc2UgQk9BUkRfVFlQRV9EQjEyMDA6CisJCXJldHVybiBkYjEyMDBfY2FyZF9pbnNlcnRlZChzb2NrKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZGIxMDAwX2NhcmRfaW5zZXJ0ZWQoc29jayk7CisJfQorfQorCisvKiBTVFNDSEcgdGVuZHMgdG8gYm91bmNlIGhlYXZpbHkgd2hlbiBjYXJkcyBhcmUgaW5zZXJ0ZWQvZWplY3RlZC4KKyAqIFRvIGF2b2lkIHRoaXMsIHRoZSBpbnRlcnJ1cHQgaXMgbm9ybWFsbHkgZGlzYWJsZWQgYW5kIG9ubHkgZW5hYmxlZAorICogYWZ0ZXIgcmVzZXQgdG8gYSBjYXJkIGhhcyBiZWVuIGRlLWFzc2VydGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N0c2NoZyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaywgaW50IGVuKQoreworCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKSB7CisJCWlmIChlbikKKwkJCWVuYWJsZV9pcnEoc29jay0+c3RzY2hnX2lycSk7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxKHNvY2stPnN0c2NoZ19pcnEpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGRiMTAwMF9wY21jaWFfY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEwMDBfcGNtY2lhX3N0c2NoZ2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfU1RTQ0hHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRiMTIwMF9wY21jaWFfY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwkvKiBEYi9QYjEyMDAgaGF2ZSBzZXBhcmF0ZSBwZXItc29ja2V0IGluc2VydGlvbiBhbmQgZWplY3Rpb24KKwkgKiBpbnRlcnJ1cHRzIHdoaWNoIHN0YXkgYXNzZXJ0ZWQgYXMgbG9uZyBhcyB0aGUgY2FyZCBpcworCSAqIGluc2VydGVkL21pc3NpbmcuICBUaGUgb25lIHdoaWNoIGNhdXNlZCB1cyB0byBiZSBjYWxsZWQKKwkgKiBuZWVkcyB0byBiZSBkaXNhYmxlZCBhbmQgdGhlIG90aGVyIG9uZSBlbmFibGVkLgorCSAqLworCWlmIChpcnEgPT0gc29jay0+aW5zZXJ0X2lycSkgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+aW5zZXJ0X2lycSk7CisJCWVuYWJsZV9pcnEoc29jay0+ZWplY3RfaXJxKTsKKwl9IGVsc2UgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+ZWplY3RfaXJxKTsKKwkJZW5hYmxlX2lycShzb2NrLT5pbnNlcnRfaXJxKTsKKwl9CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc2V0dXBfaXJxcyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShzb2NrLT5zdHNjaGdfaXJxLCBkYjEwMDBfcGNtY2lhX3N0c2NoZ2lycSwKKwkJCQkgIDAsICJwY21jaWFfc3RzY2hnIiwgc29jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERiL1BiMTIwMCBoYXZlIHNlcGFyYXRlIHBlci1zb2NrZXQgaW5zZXJ0aW9uIGFuZCBlamVjdGlvbgorCSAqIGludGVycnVwdHMsIHdoaWNoIHNob3VsZCBzaG93IGVkZ2UgYmVoYXZpb3VyIGJ1dCBkb24ndC4KKwkgKiBTbyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bnRpbCBib3RoIGluc2VydGlvbiBhbmQKKwkgKiBlamVjdGlvbiBoYW5kbGVyIGhhdmUgYmVlbiByZWdpc3RlcmVkIGFuZCB0aGUgY3VycmVudGx5CisJICogYWN0aXZlIG9uZSBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoc29jay0+Ym9hcmRfdHlwZSA9PSBCT0FSRF9UWVBFX0RCMTIwMCkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+aW5zZXJ0X2lycSwgZGIxMjAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJwY21jaWFfaW5zZXJ0Iiwgc29jayk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDE7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+ZWplY3RfaXJxLCBkYjEyMDBfcGNtY2lhX2NkaXJxLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInBjbWNpYV9lamVjdCIsIHNvY2spOworCQlpZiAocmV0KSB7CisJCQlmcmVlX2lycShzb2NrLT5pbnNlcnRfaXJxLCBzb2NrKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCS8qIGRpc2FibGUgdGhlIGN1cnJlbnRseSBhY3RpdmUgb25lICovCisJCWlmIChkYjEyMDBfY2FyZF9pbnNlcnRlZChzb2NrKSkKKwkJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5pbnNlcnRfaXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmVqZWN0X2lycSk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIGFsbCBvdGhlciAob2xkZXIpIERiMXgwMCBib2FyZHMgdXNlIGEgR1BJTyB0byBzaG93CisJCSAqIGNhcmQgZGV0ZWN0aW9uIHN0YXR1czogIHVzZSBib3RoLWVkZ2UgdHJpZ2dlcnMuCisJCSAqLworCQlzZXRfaXJxX3R5cGUoc29jay0+aW5zZXJ0X2lycSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+aW5zZXJ0X2lycSwgZGIxMDAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIDAsICJwY21jaWFfY2FyZGRldGVjdCIsIHNvY2spOworCisJCWlmIChyZXQpCisJCQlnb3RvIG91dDE7CisJfQorCisJcmV0dXJuIDA7CS8qIGFsbCBkb25lICovCisKK291dDE6CisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpCisJCWZyZWVfaXJxKHNvY2stPnN0c2NoZ19pcnEsIHNvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGIxeF9wY21jaWFfZnJlZV9pcnFzKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5zdHNjaGdfaXJxLCBzb2NrKTsKKworCWZyZWVfaXJxKHNvY2stPmluc2VydF9pcnEsIHNvY2spOworCWlmIChzb2NrLT5lamVjdF9pcnEgIT0gLTEpCisJCWZyZWVfaXJxKHNvY2stPmVqZWN0X2lycSwgc29jayk7Cit9CisKKy8qCisgKiBjb25maWd1cmUgYSBQQ01DSUEgc29ja2V0IG9uIHRoZSBEYjF4MDAgc2VyaWVzIG9mIGJvYXJkcyAoYW5kCisgKiBjb21wYXRpYmxlcykuCisgKgorICogMiBleHRlcm5hbCByZWdpc3RlcnMgYXJlIGludm9sdmVkOgorICogICBwY21jaWFfc3RhdHVzIChvZmZzZXQgMHgwNCk6IGJpdHMgWzA6MS8yOjNdOiByZWFkIGNhcmQgdm9sdGFnZSBpZAorICogICBwY21jaWFfY29udHJvbChvZmZzZXQgMHgxMCk6CisgKgliaXRzWzA6MV0gc2V0IHZjYyBmb3IgY2FyZAorICoJYml0c1syOjNdIHNldCB2cHAgZm9yIGNhcmQKKyAqCWJpdCA0OgllbmFibGUgZGF0YSBidWZmZXJzCisgKgliaXQgNzoJcmVzZXQjIGZvciBjYXJkCisgKglhZGQgOCBmb3Igc2Vjb25kIHNvY2tldC4KKyAqLworc3RhdGljIGludCBkYjF4X3BjbWNpYV9jb25maWd1cmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgc3RydWN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgc2hvcnQgY3JfY2xyLCBjcl9zZXQ7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisJaW50IHYsIHAsIHJldDsKKworCS8qIGNhcmQgdm9sdGFnZSBzZXR1cCAqLworCWNyX2NsciA9ICgweGYgPDwgKHNvY2stPm5yICogOCkpOyAvKiBjbGVhciB2b2x0YWdlIHNldHRpbmdzICovCisJY3Jfc2V0ID0gMDsKKwl2ID0gcCA9IHJldCA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwljYXNlIDUwOgorCQkrK3Y7CisJY2FzZSAzMzoKKwkJKyt2OworCWNhc2UgMDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhJWQgdW5zdXBwb3J0ZWQgVmNjICVkXG4iLAorCQkJc29jay0+bnIsIHN0YXRlLT5WY2MpOworCX0KKworCXN3aXRjaCAoc3RhdGUtPlZwcCkgeworCWNhc2UgMTI6CisJCSsrcDsKKwljYXNlIDMzOgorCWNhc2UgNTA6CisJCSsrcDsKKwljYXNlIDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYSVkIHVuc3VwcG9ydGVkIFZwcCAlZFxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VnBwKTsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2s6IFZwcCBtdXN0IGJlIDAsIDEyLCBvciBWY2MgKi8KKwlpZiAoKChzdGF0ZS0+VmNjID09IDMzKSAmJiAoc3RhdGUtPlZwcCA9PSA1MCkpIHx8CisJICAgICgoc3RhdGUtPlZjYyA9PSA1MCkgJiYgKHN0YXRlLT5WcHAgPT0gMzMpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWElZCBiYWQgVmNjL1ZwcCBjb21ibyAoJWQgJWQpXG4iLAorCQkJc29jay0+bnIsIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHApOworCQl2ID0gcCA9IDA7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogY3JlYXRlIG5ldyB2b2x0YWdlIGNvZGUgKi8KKwljcl9zZXQgfD0gKCh2IDw8IDIpIHwgcCkgPDwgKHNvY2stPm5yICogOCk7CisKKwljaGFuZ2VkID0gc3RhdGUtPmZsYWdzIF4gc29jay0+b2xkX2ZsYWdzOworCisJaWYgKGNoYW5nZWQgJiBTU19SRVNFVCkgeworCQlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpIHsKKwkJCXNldF9zdHNjaGcoc29jaywgMCk7CisJCQkvKiBhc3NlcnQgcmVzZXQsIGRpc2FibGUgaW8gYnVmZmVycyAqLworCQkJY3JfY2xyIHw9ICgxIDw8ICg3ICsgKHNvY2stPm5yICogOCkpKTsKKwkJCWNyX2NsciB8PSAoMSA8PCAoNCArIChzb2NrLT5uciAqIDgpKSk7CisJCX0gZWxzZSB7CisJCQkvKiBkZS1hc3NlcnQgcmVzZXQsIGVuYWJsZSBpbyBidWZmZXJzICovCisJCQljcl9zZXQgfD0gMSA8PCAoNyArIChzb2NrLT5uciAqIDgpKTsKKwkJCWNyX3NldCB8PSAxIDw8ICg0ICsgKHNvY2stPm5yICogOCkpOworCQl9CisJfQorCisJLyogdXBkYXRlIFBDTUNJQSBjb25maWd1cmF0aW9uICovCisJYmNzcl9tb2QoQkNTUl9QQ01DSUEsIGNyX2NsciwgY3Jfc2V0KTsKKworCXNvY2stPm9sZF9mbGFncyA9IHN0YXRlLT5mbGFnczsKKworCS8qIHJlc2V0IHdhcyB0YWtlbiBhd2F5OiBnaXZlIGNhcmQgdGltZSB0byBpbml0aWFsaXplIHByb3Blcmx5ICovCisJaWYgKChjaGFuZ2VkICYgU1NfUkVTRVQpICYmICEoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpKSB7CisJCW1zbGVlcCg1MDApOworCQlzZXRfc3RzY2hnKHNvY2ssIDEpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFZDQyBiaXRzIGF0IFszOjJdL1sxMToxMF0gKi8KKyNkZWZpbmUgR0VUX1ZDQyhjciwgc29ja25yKQkJXAorCSgoKChjcikgPj4gMikgPj4gKChzb2NrbnIpICogOCkpICYgMykKKworLyogVlMgYml0cyBhdCBbMDoxXS9bMzoyXSAqLworI2RlZmluZSBHRVRfVlMoc3IsIHNvY2tucikJCVwKKwkoKChzcikgPj4gKDIgKiAoc29ja25yKSkpICYgMykKKworLyogcmVzZXQgYml0cyBhdCBbN10vWzE1XSAqLworI2RlZmluZSBHRVRfUkVTRVQoY3IsIHNvY2tucikJCVwKKwkoKGNyKSAmICgxIDw8ICg3ICsgKDggKiAoc29ja25yKSkpKSkKKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICB1bnNpZ25lZCBpbnQgKnZhbHVlKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKwl1bnNpZ25lZCBzaG9ydCBjciwgc3I7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGRiMXhfY2FyZF9pbnNlcnRlZChzb2NrKSA/IFNTX0RFVEVDVCA6IDA7CisKKwljciA9IGJjc3JfcmVhZChCQ1NSX1BDTUNJQSk7CisJc3IgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpOworCisJLyogUEIxMTAwL1BCMTUwMDogdm9sdGFnZSBrZXkgYml0cyBhcmUgYXQgWzU6NF0gKi8KKwlpZiAoc29jay0+Ym9hcmRfdHlwZSA9PSBCT0FSRF9UWVBFX1BCMTEwMCkKKwkJc3IgPj49IDQ7CisKKwkvKiBkZXRlcm1pbmUgY2FyZCB0eXBlICovCisJc3dpdGNoIChHRVRfVlMoc3IsIHNvY2stPm5yKSkgeworCWNhc2UgMDoKKwljYXNlIDI6CisJCXN0YXR1cyB8PSBTU18zVkNBUkQ7CS8qIDNWIGNhcmQgKi8KKwljYXNlIDM6CisJCWJyZWFrOwkJCS8qIDVWIGNhcmQ6IHNldCBub3RoaW5nICovCisJZGVmYXVsdDoKKwkJc3RhdHVzIHw9IFNTX1hWQ0FSRDsJLyogdHJlYXRlZCBhcyB1bnN1cHBvcnRlZCBpbiBjb3JlICovCisJfQorCisJLyogaWYgVmNjIGlzIG5vdCB6ZXJvLCB3ZSBoYXZlIGFwcGxpZWQgcG93ZXIgdG8gYSBjYXJkICovCisJc3RhdHVzIHw9IEdFVF9WQ0MoY3IsIHNvY2stPm5yKSA/IFNTX1BPV0VST04gOiAwOworCisJLyogcmVzZXQgZGUtYXNzZXJ0ZWQ/IHRoZW4gd2UncmUgcmVhZHkgKi8KKwlzdGF0dXMgfD0gKEdFVF9SRVNFVChjciwgc29jay0+bnIpKSA/IFNTX1JFQURZIDogU1NfUkVTRVQ7CisKKwkqdmFsdWUgPSBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9zb2NrX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHBjY2FyZF9pb19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisKKwltYXAtPnN0YXJ0ID0gKHUzMilzb2NrLT52aXJ0X2lvOworCW1hcC0+c3RvcCA9IG1hcC0+c3RhcnQgKyBJT19NQVBfU0laRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWFwKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX2F0dHIgKyBtYXAtPmNhcmRfc3RhcnQ7CisJZWxzZQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfbWVtICsgbWFwLT5jYXJkX3N0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgZGIxeF9wY21jaWFfb3BlcmF0aW9ucyA9IHsKKwkuaW5pdAkJCT0gZGIxeF9wY21jaWFfc29ja19pbml0LAorCS5zdXNwZW5kCQk9IGRiMXhfcGNtY2lhX3NvY2tfc3VzcGVuZCwKKwkuZ2V0X3N0YXR1cwkJPSBkYjF4X3BjbWNpYV9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IGRiMXhfcGNtY2lhX2NvbmZpZ3VyZSwKKwkuc2V0X2lvX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYjF4X3BjbWNpYV9zb2NrZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCwgYmlkOworCisJc29jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNvY2stPm5yID0gcGRldi0+aWQ7CisKKwliaWQgPSBCQ1NSX1dIT0FNSV9CT0FSRChiY3NyX3JlYWQoQkNTUl9XSE9BTUkpKTsKKwlzd2l0Y2ggKGJpZCkgeworCWNhc2UgQkNTUl9XSE9BTUlfUEIxNTAwOgorCWNhc2UgQkNTUl9XSE9BTUlfUEIxNTAwUjI6CisJY2FzZSBCQ1NSX1dIT0FNSV9QQjExMDA6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX1BCMTEwMDsKKwkJYnJlYWs7CisJY2FzZSBCQ1NSX1dIT0FNSV9EQjEwMDAgLi4uIEJDU1JfV0hPQU1JX1BCMTU1MF9TRFI6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgQkNTUl9XSE9BTUlfUEIxMjAwIC4uLiBCQ1NSX1dIT0FNSV9EQjEyMDA6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX0RCMTIwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGIxeHh4LXNzOiB1bmtub3duIGJvYXJkICVkIVxuIiwgYmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQwOworCX07CisKKwkvKgorCSAqIGdhdGhlciByZXNvdXJjZXMgbmVjZXNzYXJ5IGFuZCBvcHRpb25hbCBuaWNlLXRvLWhhdmVzIHRvCisJICogb3BlcmF0ZSBhIHNvY2tldDoKKwkgKiBUaGlzIGluY2x1ZGVzIElSUXMgZm9yIENhcmRkZXRlY3Rpb24vZWplY3Rpb24sIHRoZSBjYXJkCisJICogIGl0c2VsZiBhbmQgb3B0aW9uYWwgc3RhdHVzIGNoYW5nZSBkZXRlY3Rpb24uCisJICogQWxzbywgdGhlIG1lbW9yeSBhcmVhcyBjb3ZlcmVkIGJ5IGEgc29ja2V0LiAgRm9yIHRoZXNlCisJICogIHdlIHJlcXVpcmUgdGhlIHJlYWwgMzZiaXQgYWRkcmVzc2VzIChzZWUgdGhlIGF1MTAwMC5oCisJICogIGhlYWRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisJICovCisKKwkvKiBjYXJkOiBpcnEgYXNzaWduZWQgdG8gdGhlIGNhcmQgaXRzZWxmLiAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAiY2FyZCIpOworCXNvY2stPmNhcmRfaXJxID0gciA/IHItPnN0YXJ0IDogMDsKKworCS8qIGluc2VydDogaXJxIHdoaWNoIHRyaWdnZXJzIG9uIGNhcmQgaW5zZXJ0aW9uL2VqZWN0aW9uICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJpbnNlcnQiKTsKKwlzb2NrLT5pbnNlcnRfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwkvKiBzdHNjaGc6IGlycSB3aGljaCB0cmlnZ2VyIG9uIGNhcmQgc3RhdHVzIGNoYW5nZSAob3B0aW9uYWwpICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJzdHNjaGciKTsKKwlzb2NrLT5zdHNjaGdfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwkvKiBlamVjdDogaXJxIHdoaWNoIHRyaWdnZXJzIG9uIGVqZWN0aW9uIChEQjEyMDAvUEIxMjAwIG9ubHkpICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJlamVjdCIpOworCXNvY2stPmVqZWN0X2lycSA9IHIgPyByLT5zdGFydCA6IC0xOworCisJcmV0ID0gLUVOT0RFVjsKKworCS8qIDM2Yml0IFBDTUNJQSBBdHRyaWJ1dGUgYXJlYSBhZGRyZXNzICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtYXR0ciIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWF0dHInIHJlc291cmNlIVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2F0dHIgPSByLT5zdGFydDsKKworCS8qIDM2Yml0IFBDTUNJQSBNZW1vcnkgYXJlYSBhZGRyZXNzICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtbWVtIik7CisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgaGFzIG5vICdwc2V1ZG8tbWVtJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19tZW0gPSByLT5zdGFydDsKKworCS8qIDM2Yml0IFBDTUNJQSBJTyBhcmVhIGFkZHJlc3MgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWlvJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19pbyA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBQQ01DSUEgY2xpZW50IGRyaXZlcnMgdXNlIHRoZSBpbmIvb3V0YiBtYWNyb3MgdG8gYWNjZXNzCisJICogdGhlIElPIHJlZ2lzdGVycy4gIFNpbmNlIG1pcHNfaW9fcG9ydF9iYXNlIGlzIGFkZGVkCisJICogdG8gdGhlIGFjY2VzcyBhZGRyZXNzIG9mIHRoZSBtaXBzIGltcGxlbWVudGF0aW9uIG9mCisJICogaW5iL291dGIsIHdlIG5lZWQgdG8gc3VidHJhY3QgaXQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKwkgKiB0byBhY2Nlc3MgdGhlIEkvTyBvciBNRU0gYWRkcmVzcyBkaXJlY3RseSwgd2l0aG91dAorCSAqIGdvaW5nIHRocm91Z2ggdGhpcyAibWlwc19pb19wb3J0X2Jhc2UiIG1lY2hhbmlzbS4KKwkgKi8KKwlzb2NrLT52aXJ0X2lvID0gKHZvaWQgKikoaW9yZW1hcChzb2NrLT5waHlzX2lvLCBJT19NQVBfU0laRSkgLQorCQkJCSBtaXBzX2lvX3BvcnRfYmFzZSk7CisKKwlpZiAoIXNvY2stPnZpcnRfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZDogY2Fubm90IHJlbWFwIElPIGFyZWFcbiIsCisJCQlzb2NrLT5ucik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwlzb2NrLT5zb2NrZXQub3BzCT0gJmRiMXhfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+c29ja2V0Lm93bmVyCT0gVEhJU19NT0RVTEU7CisJc29jay0+c29ja2V0LnBjaV9pcnEJPSBzb2NrLT5jYXJkX2lycTsKKwlzb2NrLT5zb2NrZXQuZmVhdHVyZXMJPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+c29ja2V0Lm1hcF9zaXplCT0gTUVNX01BUF9TSVpFOworCXNvY2stPnNvY2tldC5pb19vZmZzZXQJPSAodW5zaWduZWQgbG9uZylzb2NrLT52aXJ0X2lvOworCXNvY2stPnNvY2tldC5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NrLT5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc29jayk7CisKKwlyZXQgPSBkYjF4X3BjbWNpYV9zZXR1cF9pcnFzKHNvY2spOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBjYW5ub3Qgc2V0dXAgaW50ZXJydXB0c1xuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQxOworCX0KKworCXNldF9zdHNjaGcoc29jaywgMCk7CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsIHNvY2stPm5yKTsKKwkJZ290byBvdXQyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgRGIvUGIxeHh4IHBjbWNpYSVkIEAgaW8vYXR0ci9tZW0gJTA5bGx4IgorCQkiKCVwKSAlMDlsbHggJTA5bGx4ICBjYXJkL2luc2VydC9zdHNjaGcvZWplY3QgaXJxcyBAICVkICIKKwkJIiVkICVkICVkXG4iLCBzb2NrLT5uciwgc29jay0+cGh5c19pbywgc29jay0+dmlydF9pbywKKwkJc29jay0+cGh5c19hdHRyLCBzb2NrLT5waHlzX21lbSwgc29jay0+Y2FyZF9pcnEsCisJCXNvY2stPmluc2VydF9pcnEsIHNvY2stPnN0c2NoZ19pcnEsIHNvY2stPmVqZWN0X2lycSk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CitvdXQxOgorCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKK291dDA6CisJa2ZyZWUoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CisJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKKwlrZnJlZShzb2NrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBkYjF4X3BjbWNpYV9wbW9wcyA9IHsKKwkucmVzdW1lCQk9IGRiMXhfcGNtY2lhX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGRiMXhfcGNtY2lhX3N1c3BlbmQsCisJLnRoYXcJCT0gZGIxeF9wY21jaWFfcmVzdW1lLAorCS5mcmVlemUJCT0gZGIxeF9wY21jaWFfc3VzcGVuZCwKK307CisKKyNkZWZpbmUgREIxWFhYX1NTX1BNT1BTICZkYjF4X3BjbWNpYV9wbW9wcworCisjZWxzZQorCisjZGVmaW5lIERCMVhYWF9TU19QTU9QUyBOVUxMCisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYjF4X3BjbWNpYV9zb2NrZXRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRiMXh4eF9wY21jaWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gREIxWFhYX1NTX1BNT1BTCisJfSwKKwkucHJvYmUJCT0gZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZSksCit9OworCitpbnQgX19pbml0IGRiMXhfcGNtY2lhX3NvY2tldF9sb2FkKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGIxeF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK3ZvaWQgIF9fZXhpdCBkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRiMXhfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkYjF4X3BjbWNpYV9zb2NrZXRfbG9hZCk7Cittb2R1bGVfZXhpdChkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgU29ja2V0IFNlcnZpY2VzIGZvciBBbGNoZW15IERiL1BiMXgwMCBib2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggMWE0YTNjNC4uMGY5OGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC00Miw4ICs0Miw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIHBjbWNpYV9jaGVja19kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2KQpAQCAtMTI2LDkgKzEyNCw5IEBACiAJZHluaWQtPmlkLmRldmljZV9ubyA9IGRldmljZV9ubzsKIAltZW1jcHkoZHluaWQtPmlkLnByb2RfaWRfaGFzaCwgcHJvZF9pZF9oYXNoLCBzaXplb2YoX191MzIpICogNCk7CiAKLQlzcGluX2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZHluaWQtPm5vZGUsICZwZHJ2LT5keW5pZHMubGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAogCWlmIChnZXRfZHJpdmVyKCZwZHJ2LT5kcnYpKSB7CiAJCXJldHZhbCA9IGRyaXZlcl9hdHRhY2goJnBkcnYtPmRydik7CkBAIC0xNDYsMTIgKzE0NCwxMiBAQAogewogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkLCAqbjsKIAotCXNwaW5fbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR5bmlkLCBuLCAmZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlsaXN0X2RlbCgmZHluaWQtPm5vZGUpOwogCQlrZnJlZShkeW5pZCk7CiAJfQotCXNwaW5fdW5sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xODIsNyArMTgwLDcgQEAKIAkvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KIAlkcml2ZXItPmRydi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwogCWRyaXZlci0+ZHJ2Lm93bmVyID0gZHJpdmVyLT5vd25lcjsKLQlzcGluX2xvY2tfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CisJbXV0ZXhfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+ZHluaWRzLmxpc3QpOwogCiAJcHJfZGVidWcoInJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5kcnYubmFtZSk7CkBAIC0yMzksMzAgKzIzNywyMSBAQAogc3RhdGljIHZvaWQgcGNtY2lhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CisJaW50IGk7CiAJZGV2X2RiZyhkZXYsICJyZWxlYXNpbmcgZGV2aWNlXG4iKTsKIAlwY21jaWFfcHV0X3NvY2tldChwX2Rldi0+c29ja2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtyZWZfcHV0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYsIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKTsKIAlrZnJlZShwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbWZjKQotewotCWlmICghcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZykgewotCQlkZXZfZGJnKCZzLT5kZXYsICJzY2hlZHVsaW5nIHRvIGFkZCAlcyBzZWNvbmRhcnkiCi0JCSAgICAgICAiIGRldmljZSB0byAlZFxuIiwgbWZjID8gIm1mYyIgOiAicGZjIiwgcy0+c29jayk7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAxOwotCQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IG1mYzsKLQkJc2NoZWR1bGVfd29yaygmcy0+ZGV2aWNlX2FkZCk7Ci0JfQotCXJldHVybjsKLX0KIAogc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY2lzdHBsX2NvbmZpZ190IGNpc19jb25maWc7CiAJaW50IHJldCA9IDA7CkBAIC0yNzUsMTggKzI2NCw2IEBACiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAlzID0gcF9kZXYtPnNvY2tldDsKIAotCS8qIFRoZSBQQ01DSUEgY29kZSBwYXNzZXMgdGhlIG1hdGNoIGRhdGEgaW4gdmlhIGRldl9zZXRfZHJ2ZGF0YShkZXYpCi0JICogd2hpY2ggaXMgYW4gdWdseSBoYWNrLiBPbmNlIHRoZSBkcml2ZXIgcHJvYmUgaXMgY2FsbGVkIGl0IG1heQotCSAqIGFuZCBvZnRlbiB3aWxsIG92ZXJ3cml0ZSB0aGUgbWF0Y2ggZGF0YSBzbyB3ZSBtdXN0IHNhdmUgaXQgZmlyc3QKLQkgKgotCSAqIGhhbmRsZSBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzOgotCSAqIHRoZXJlIGFyZSBhdCBtb3N0IHR3byBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzLgotCSAqIGlmIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QgdGhlIGZpcnN0LCBzY2hlZHVsZSBhCi0JICogY2FsbCB3aGljaCB3aWxsIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgdHdvCi0JICogcHNldWRvIGRldmljZXMsIGFuZCBpZiBub3QsIGFkZCB0aGUgc2Vjb25kIG9uZS4KLQkgKi8KLQlkaWQgPSBkZXZfZ2V0X2RydmRhdGEoJnBfZGV2LT5kZXYpOwotCiAJZGV2X2RiZyhkZXYsICJ0cnlpbmcgdG8gYmluZCB0byAlc1xuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAogCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fApAQCAtMzE1LDkgKzI5MiwxMSBAQAogCQlnb3RvIHB1dF9tb2R1bGU7CiAJfQogCi0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKChzLT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKIAkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA9PSAxKSAmJiAocF9kZXYtPmRldmljZV9ubyA9PSAwKSkKLQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocF9kZXYtPnNvY2tldCwgMCk7CisJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiBwdXRfbW9kdWxlOgogCWlmIChyZXQpCkBAIC0zMzYsMjYgKzMxNSwyNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqdG1wOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJZGV2X2RiZyhsZWZ0b3ZlciA/ICZsZWZ0b3Zlci0+ZGV2IDogJnMtPmRldiwKIAkJICAgInBjbWNpYV9jYXJkX3JlbW92ZSglZCkgJXNcbiIsIHMtPnNvY2ssCiAJCSAgIGxlZnRvdmVyID8gbGVmdG92ZXItPmRldm5hbWUgOiAiIik7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghbGVmdG92ZXIpCiAJCXMtPmRldmljZV9jb3VudCA9IDA7CiAJZWxzZQogCQlzLT5kZXZpY2VfY291bnQgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCS8qIHVucmVnaXN0ZXIgYWxsIHBjbWNpYV9kZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNvY2tldCwgZXhjZXB0IGxlZnRvdmVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBfZGV2LCB0bXAsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYgPT0gbGVmdG92ZXIpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwogCQlwX2Rldi0+X3JlbW92ZWQgPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnBfZGV2LT5kZXYpOwpAQCAtMzY4LDcgKzM0OCw2IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOwogCWludCBpOwogCiAJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CkBAIC0zODAsOSArMzU5LDggQEAKIAkgKiBwc2V1ZG8gbXVsdGktZnVuY3Rpb24gY2FyZCwgd2UgbmVlZCB0byB1bmJpbmQKIAkgKiBhbGwgZGV2aWNlcwogCSAqLwotCWRpZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7Ci0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgotCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ICE9IDApICYmCisJaWYgKChwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKKwkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA+IDApICYmCiAJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOwogCkBAIC00MzEsMTYgKzQwOSwyMCBAQAogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwogCQlwX2Rldi0+aGFzX21hbmZfaWQgPSAxOwogCQlwX2Rldi0+aGFzX2NhcmRfaWQgPSAxOworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfQogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKIAkJCSAgICAgICBDSVNUUExfRlVOQ0lELCAmZnVuY19pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPmZ1bmNfaWQgPSBmdW5jX2lkLmZ1bmM7CiAJCXBfZGV2LT5oYXNfZnVuY19pZCA9IDE7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9IGVsc2UgewogCQkvKiBydWxlIG9mIHRodW1iOiBjYXJkcyB3aXRoIG5vIEZVTkNJRCwgYnV0IHdpdGgKIAkJICogY29tbW9uIG1lbW9yeSBkZXZpY2UgZ2VvbWV0cnkgaW5mb3JtYXRpb24sIGFyZQpAQCAtNDU3LDE3ICs0MzksMjEgQEAKIAkJCWRldl9kYmcoJnBfZGV2LT5kZXYsCiAJCQkJICAgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgogCQkJCSAgICJGVU5DSURfTUVNT1JZXG4iKTsKKwkJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlwX2Rldi0+ZnVuY19pZCA9IENJU1RQTF9GVU5DSURfTUVNT1JZOwogCQkJcF9kZXYtPmhhc19mdW5jX2lkID0gMTsKKwkJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJfQogCQlrZnJlZShkZXZnZW8pOwogCX0KIAogCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7CisJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCWNoYXIgKm5ldzsKIAogCQkJdG1wID0gdmVyczEtPnN0ciArIHZlcnMxLT5vZnNbaV07CiAKQEAgLTQ3NSwxNCArNDYxLDE3IEBACiAJCQlpZiAoKGxlbmd0aCA8IDIpIHx8IChsZW5ndGggPiAyNTUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLAotCQkJCQkJICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwX2Rldi0+cHJvZF9pZFtpXSkKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghbmV3KQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IHN0cm5jcHkocF9kZXYtPnByb2RfaWRbaV0sCi0JCQkJCQkgICAgdG1wLCBsZW5ndGgpOworCQkJbmV3ID0gc3RybmNweShuZXcsIHRtcCwgbGVuZ3RoKTsKKworCQkJdG1wID0gcF9kZXYtPnByb2RfaWRbaV07CisJCQlwX2Rldi0+cHJvZF9pZFtpXSA9IG5ldzsKKwkJCWtmcmVlKHRtcCk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWtmcmVlKHZlcnMxKTsKQEAgLTUwMiw3ICs0OTEsNyBAQAogc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCAqdG1wX2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJcyA9IHBjbWNpYV9nZXRfc29ja2V0KHMpOwogCWlmICghcykKQEAgLTUxMiwxNiArNTAxLDE5IEBACiAKIAlwcl9kZWJ1ZygiYWRkaW5nIGRldmljZSB0byAlZCwgZnVuY3Rpb24gJWRcbiIsIHMtPnNvY2ssIGZ1bmN0aW9uKTsKIAotCS8qIG1heCBvZiA0IGRldmljZXMgcGVyIGNhcmQgKi8KLQlpZiAocy0+ZGV2aWNlX2NvdW50ID09IDQpCi0JCWdvdG8gZXJyX3B1dDsKLQogCXBfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBfZGV2KQogCQlnb3RvIGVycl9wdXQ7CiAKLQlwX2Rldi0+c29ja2V0ID0gczsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXBfZGV2LT5kZXZpY2Vfbm8gPSAocy0+ZGV2aWNlX2NvdW50KyspOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCS8qIG1heCBvZiAyIGRldmljZXMgcGVyIGNhcmQgKi8KKwlpZiAocF9kZXYtPmRldmljZV9ubyA+PSAyKQorCQlnb3RvIGVycl9mcmVlOworCisJcF9kZXYtPnNvY2tldCA9IHM7CiAJcF9kZXYtPmZ1bmMgICA9IGZ1bmN0aW9uOwogCiAJcF9kZXYtPmRldi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwpAQCAtNTM4LDcgKzUzMCw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJZGV2X2RiZygmcF9kZXYtPmRldiwgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKgogCSAqIHBfZGV2LT5mdW5jdGlvbl9jb25maWcgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIGNhcmQgZnVuY3Rpb25zLgpAQCAtNTU2LDcgKzU0OCw3IEBACiAJLyogQWRkIHRvIHRoZSBsaXN0IGluIHBjbWNpYV9idXNfc29ja2V0ICovCiAJbGlzdF9hZGQoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QsICZzLT5kZXZpY2VzX2xpc3QpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgImNyZWF0aW5nIGNvbmZpZ190XG4iKTsKQEAgLTU4MSwxNCArNTczLDE5IEBACiAJcmV0dXJuIHBfZGV2OwogCiAgZXJyX3VucmVnOgotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAgZXJyX2ZyZWU6CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlzLT5kZXZpY2VfY291bnQtLTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtmcmVlKHBfZGV2KTsKLQlzLT5kZXZpY2VfY291bnQtLTsKICBlcnJfcHV0OgogCW11dGV4X3VubG9jaygmZGV2aWNlX2FkZF9sb2NrKTsKIAlwY21jaWFfcHV0X3NvY2tldChzKTsKQEAgLTYwMSwxOSArNTk4LDIzIEBACiB7CiAJY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKIAl1bnNpZ25lZCBpbnQgbm9fZnVuY3MsIGksIG5vX2NoYWluczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LAogCQkJICAgIm5vIHJlc291cmNlcyBhdmFpbGFibGUsIGRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CiAKIAlpZiAocGNtY2lhX3ZhbGlkYXRlX21lbShzKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCiAJCSAgICAgICAiZGVsYXlpbmcgY2FyZF9hZGRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZub19jaGFpbnMpOwogCWlmIChyZXQgfHwgIW5vX2NoYWlucykgewpAQCAtNjM0LDE3ICs2MzUsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9kZWxheWVkX2FkZF9kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY21jaWFfc29ja2V0LCBkZXZpY2VfYWRkKTsKLQlkZXZfZGJnKCZzLT5kZXYsICJhZGRpbmcgYWRkaXRpb25hbCBkZXZpY2UgdG8gJWRcbiIsIHMtPnNvY2spOwotCXBjbWNpYV9kZXZpY2VfYWRkKHMsIHMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjKTsKLQlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMDsKLQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICogX2RhdGEpCitzdGF0aWMgaW50IHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqIF9kYXRhKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpZiAoIXBfZGV2LT5kZXYuZHJpdmVyKSB7CkBAIC02NTUsNDUgKzY0Niw2NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwY21jaWFfYnVzX3Jlc2NhbihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LCBpbnQgbmV3X2NpcykKKworc3RhdGljIHZvaWQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JaW50IG5vX2RldmljZXMgPSAwOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXNlbnQsIGhhc19wZmM7CiAKLQkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkICovCi0JZGV2X2RiZygmc2t0LT5kZXYsICJyZS1zY2FubmluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlwcmVzZW50ID0gcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQ7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnNrdC0+ZGV2aWNlc19saXN0KSkKLQkJbm9fZGV2aWNlcyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXByZXNlbnQpCisJCXJldHVybjsKIAotCS8qIElmIHRoaXMgaXMgYmVjYXVzZSBvZiBhIENJUyBvdmVycmlkZSwgc3RhcnQgb3ZlciAqLwotCWlmIChuZXdfY2lzICYmICFub19kZXZpY2VzKQotCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0LCBOVUxMKTsKLQotCS8qIGlmIG5vIGRldmljZXMgd2VyZSBhZGRlZCBmb3IgdGhpcyBzb2NrZXQgeWV0IGJlY2F1c2Ugb2YKLQkgKiBtaXNzaW5nIHJlc291cmNlIGluZm9ybWF0aW9uIG9yIG90aGVyIHRyb3VibGUsIHdlIG5lZWQgdG8KLQkgKiBkbyB0aGlzIG5vdy4gKi8KLQlpZiAobm9fZGV2aWNlcyB8fCBuZXdfY2lzKSB7Ci0JCXJldCA9IHBjbWNpYV9jYXJkX2FkZChza3QpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuOworCWlmIChzLT5mdW5jdGlvbnMgPT0gMCkgeworCQlwY21jaWFfY2FyZF9hZGQocyk7CisJCXJldHVybjsKIAl9CiAKIAkvKiBzb21lIGRldmljZSBpbmZvcm1hdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQgYmVjYXVzZSBvZiBhIENJUwogCSAqIHVwZGF0ZSBvciBiZWNhdXNlIHdlIGNhbiBmaW5hbGx5IHJlYWQgaXQgY29ycmVjdGx5Li4uIHNvCiAJICogZGV0ZXJtaW5lIGl0IGFnYWluLCBvdmVyd3JpdGluZyBvbGQgdmFsdWVzIGlmIG5lY2Vzc2FyeS4gKi8KLQlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5KTsKKwlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKTsKKworCS8qIGlmIHRoZSBDSVMgY2hhbmdlZCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBudW1iZXIgb2YKKwkgKiBmdW5jdGlvbnMgY2hhbmdlZC4gKi8KKwlpZiAocy0+ZmFrZV9jaXMpIHsKKwkJaW50IG9sZF9mdW5jcywgbmV3X2Z1bmNzOworCQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOworCisJCS8qIGRvZXMgdGhpcyBjaXMgb3ZlcnJpZGUgYWRkIG9yIHJlbW92ZSBmdW5jdGlvbnM/ICovCisJCW9sZF9mdW5jcyA9IHMtPmZ1bmN0aW9uczsKKworCQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTE9OR0xJTktfTUZDLAorCQkJCQkmbWZjKSkKKwkJCW5ld19mdW5jcyA9IG1mYy5uZm47CisJCWVsc2UKKwkJCW5ld19mdW5jcyA9IDE7CisJCWlmIChvbGRfZnVuY3MgPiBuZXdfZnVuY3MpIHsKKwkJCXBjbWNpYV9jYXJkX3JlbW92ZShzLCBOVUxMKTsKKwkJCXBjbWNpYV9jYXJkX2FkZChzKTsKKwkJfSBlbHNlIGlmIChuZXdfZnVuY3MgPiBvbGRfZnVuY3MpIHsKKwkJCXMtPmZ1bmN0aW9ucyA9IG5ld19mdW5jczsKKwkJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDEpOworCQl9CisJfQorCisJLyogSWYgdGhlIFBDTUNJQSBkZXZpY2UgY29uc2lzdHMgb2YgdHdvIHBzZXVkbyBkZXZpY2VzLAorCSAqIGNhbGwgcGNtY2lhX2RldmljZV9hZGQoKSAtLSB3aGljaCB3aWxsIGZhaWwgaWYgYm90aAorCSAqIGRldmljZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWhhc19wZmMgPSBzLT5wY21jaWFfc3RhdGUuaGFzX3BmYzsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKGhhc19wZmMpCisJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDApOwogCiAJLyogd2UgcmUtc2NhbiBhbGwgZGV2aWNlcywgbm90IGp1c3QgdGhlIG9uZXMgY29ubmVjdGVkIHRvIHRoaXMKIAkgKiBzb2NrZXQuIFRoaXMgZG9lcyBub3QgbWF0dGVyLCB0aG91Z2guICovCi0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogYnVzX3Jlc2Nhbl9kZXZpY2VzIGZhaWxlZFxuIik7CisJaWYgKGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKSkKKwkJZGV2X3dhcm4oJnMtPmRldiwgInJlc2Nhbm5pbmcgdGhlIGJ1cyBmYWlsZWRcbiIpOwogfQogCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTCiAKIC8qKgpAQCAtNzEwLDkgKzcyMyw2IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBkZXYtPnNvY2tldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQgPSAtRU5PTUVNOwotCWludCBub19mdW5jczsKLQlpbnQgb2xkX2Z1bmNzOwotCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczOSwxOSArNzQ5LDggQEAKIAkJLyogdXBkYXRlIGluZm9ybWF0aW9uICovCiAJCXBjbWNpYV9kZXZpY2VfcXVlcnkoZGV2KTsKIAotCQkvKiBkb2VzIHRoaXMgY2lzIG92ZXJyaWRlIGFkZCBvciByZW1vdmUgZnVuY3Rpb25zPyAqLwotCQlvbGRfZnVuY3MgPSBzLT5mdW5jdGlvbnM7Ci0KLQkJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0xPTkdMSU5LX01GQywgJm1mYykpCi0JCQlub19mdW5jcyA9IG1mYy5uZm47Ci0JCWVsc2UKLQkJCW5vX2Z1bmNzID0gMTsKLQkJcy0+ZnVuY3Rpb25zID0gbm9fZnVuY3M7Ci0KLQkJaWYgKG9sZF9mdW5jcyA+IG5vX2Z1bmNzKQotCQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHMsIGRldik7Ci0JCWVsc2UgaWYgKG5vX2Z1bmNzID4gb2xkX2Z1bmNzKQotCQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocywgMSk7CisJCS8qIHJlcXVlcnkgKGFzIG51bWJlciBvZiBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBjaGFuZ2VkKSAqLworCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCX0KICByZWxlYXNlOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpAQCAtODE4LDkgKzgxNywxNCBAQAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKIAkJaWYgKGRldi0+ZGV2aWNlX25vICE9IGRpZC0+ZGV2aWNlX25vKQogCQkJcmV0dXJuIDA7CisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlkZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAxOworCQltdXRleF91bmxvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9GVU5DX0lEKSB7CisJCWludCByZXQ7CisKIAkJaWYgKCghZGV2LT5oYXNfZnVuY19pZCkgfHwgKGRldi0+ZnVuY19pZCAhPSBkaWQtPmZ1bmNfaWQpKQogCQkJcmV0dXJuIDA7CiAKQEAgLTgzNSwxMCArODM5LDE1IEBACiAJCSAqIGFmdGVyIGl0IGhhcyByZS1jaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gcG9zc2libGUgbW9kdWxlCiAJCSAqIHdpdGggYSBwcm9kX2lkL21hbmZfaWQvY2FyZF9pZCBtYXRjaC4KIAkJICovCi0JCWRldl9kYmcoJmRldi0+ZGV2LAotCQkJInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggdW50aWwgdXNlcnNwYWNlIGludGVyYWN0aW9uXG4iKTsKLQkJaWYgKCFkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2gpCisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlyZXQgPSBkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2g7CisJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisKKwkJaWYgKCFyZXQpIHsKKwkJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBBQ0tcbiIpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfRkFLRV9DSVMpIHsKQEAgLTg1OSw4ICs4NjgsNiBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGlkKTsKLQogCXJldHVybiAxOwogfQogCkBAIC04NzMsMTYgKzg4MCwxNiBAQAogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkOwogCiAJLyogbWF0Y2ggZHluYW1pYyBkZXZpY2VzIGZpcnN0ICovCi0Jc3Bpbl9sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCW11dGV4X2xvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJnBfZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgJmR5bmlkLT5pZCkpIHsKIAkJCWRldl9kYmcoZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKLQkJCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCS8qIG1hdGNoaW5nIGJ5IGNhcmRtZ3IgKi8KQEAgLTk3MCwxMyArOTc3LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAKIAlkb3duKCZkZXYtPnNlbSk7CiAJcmMgPSBwY21jaWFfZGV2X3Jlc3VtZShkZXYpOwogCXVwKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIHBlci1kZXZpY2Ugc3lzZnMgb3V0cHV0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwMjcsNyArMTAzNSw3IEBACiAJaWYgKCghcF9kZXYtPnN1c3BlbmRlZCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCiAJCXJldCA9IHJ1bnRpbWVfc3VzcGVuZChkZXYpOwogCWVsc2UgaWYgKHBfZGV2LT5zdXNwZW5kZWQgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKLQkJcnVudGltZV9yZXN1bWUoZGV2KTsKKwkJcmV0ID0gcnVudGltZV9yZXN1bWUoZGV2KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KQEAgLTEwNTksMTkgKzEwNjcsMTQgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKLQlpbnQgcmV0OwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOworCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJcF9kZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2ggPSAxOwotCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+c2t0X211dGV4KTsKLQotCXJldCA9IGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGJ1c19yZXNjYW5fZGV2aWNlcyBmYWlsZWQgYWZ0ZXIgIgotCQkgICAgICAgImFsbG93aW5nIGZ1bmNfaWQgbWF0Y2hlc1xuIik7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHBfZGV2LT5zb2NrZXQsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMDk5LDggKzExMDIsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKHBfZGV2LT5zdXNwZW5kZWQpCisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwlpZiAocF9kZXYtPnN1c3BlbmRlZCkgeworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldHVybiAwOworCX0KKwlwX2Rldi0+c3VzcGVuZGVkID0gMTsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAKIAlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmdcbiIpOwogCkBAIC0xMTE3LDYgKzExMjUsOSBAQAogCQkJCSAgICJwY21jaWE6IGRldmljZSAlcyAoZHJpdmVyICVzKSBkaWQgIgogCQkJCSAgICJub3Qgd2FudCB0byBnbyB0byBzbGVlcCAoJWQpXG4iLAogCQkJCSAgIHBfZGV2LT5kZXZuYW1lLCBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CisJCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CisJCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTExMjcsOCArMTEzOCw2IEBACiAJfQogCiAgb3V0OgotCWlmICghcmV0KQotCQlwX2Rldi0+c3VzcGVuZGVkID0gMTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTM5LDggKzExNDgsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFwX2Rldi0+c3VzcGVuZGVkKQorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJaWYgKCFwX2Rldi0+c3VzcGVuZGVkKSB7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcmV0dXJuIDA7CisJfQorCXBfZGV2LT5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAogCWRldl9kYmcoZGV2LCAicmVzdW1pbmdcbiIpOwogCkBAIC0xMTYxLDggKzExNzUsNiBAQAogCQlyZXQgPSBwX2Rydi0+cmVzdW1lKHBfZGV2KTsKIAogIG91dDoKLQlpZiAoIXJldCkKLQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIzNywxMyArMTI0OSwyMiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlzLT5wY21jaWFfc3RhdGUucHJlc2VudCA9IDA7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7CiAJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJYnJlYWs7CiAKIAljYXNlIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlzLT5wY21jaWFfc3RhdGUuaGFzX3BmYyA9IDA7CiAJCXMtPnBjbWNpYV9zdGF0ZS5wcmVzZW50ID0gMTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7IC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuLi4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlwY21jaWFfY2FyZF9hZGQoc2t0KTsKIAkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwogCQlicmVhazsKQEAgLTEyNTEsOCArMTI3MiwyNCBAQAogCWNhc2UgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVDoKIAkJYnJlYWs7CiAKLQljYXNlIENTX0VWRU5UX1BNX1NVU1BFTkQ6CiAJY2FzZSBDU19FVkVOVF9QTV9SRVNVTUU6CisJCWlmICh2ZXJpZnlfY2lzX2NhY2hlKHNrdCkgIT0gMCkgeworCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7CisJCQkvKiBmaXJzdCwgcmVtb3ZlIHRoZSBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJCWRlc3Ryb3lfY2lzX2NhY2hlKHNrdCk7CisJCQlrZnJlZShza3QtPmZha2VfY2lzKTsKKwkJCXNrdC0+ZmFrZV9jaXMgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkJLyogbm93LCBhZGQgdGhlIG5ldyBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLAorCQkJCSBDU19FVkVOVF9QUklfTE9XKTsKKwkJfQorCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgogCWNhc2UgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUw6CiAJY2FzZSBDU19FVkVOVF9DQVJEX1JFU0VUOgogCWRlZmF1bHQ6CkBAIC0xMjc1LDkgKzEzMTIsMTMgQEAKIAlpZiAoIXBfZGV2KQogCQlyZXR1cm4gTlVMTDsKIAorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJaWYgKCFwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUucHJlc2VudCkKIAkJZ290byBvdXQ7CiAKKwlpZiAocF9kZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmRlYWQpCisJCWdvdG8gb3V0OworCiAJaWYgKHBfZGV2LT5fcmVtb3ZlZCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyODYsNiArMTMyNyw3IEBACiAKIAlyZXQgPSBwX2RldjsKICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI5NSw3ICsxMzM3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrIHBjbWNpYV9idXNfY2FsbGJhY2sgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmV2ZW50ID0gZHNfZXZlbnQsCi0JLnJlcXVlcnkgPSBwY21jaWFfYnVzX3Jlc2NhbiwKKwkucmVxdWVyeSA9IHBjbWNpYV9yZXF1ZXJ5LAorCS52YWxpZGF0ZSA9IHBjY2FyZF92YWxpZGF0ZV9jaXMsCiAJLnN1c3BlbmQgPSBwY21jaWFfYnVzX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHBjbWNpYV9idXNfcmVzdW1lLAogfTsKQEAgLTEzMTMsMTcgKzEzNTYsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyoKLQkgKiBVZ2x5LiBCdXQgd2Ugd2FudCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRocmVhZHMgdG8gaGF2ZSBzdGFydGVkIHVwLgotCSAqIFdlIHJlYWxseSBzaG91bGQgbGV0IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMgZHJpdmUgc29tZSBvZiB0aGlzLi4KLQkgKi8KLQltc2xlZXAoMjUwKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CisJaWYgKHJldCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJQQ01DSUEgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvY2tldC0+cXVldWUpOwogI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJnNvY2tldC0+ZGV2aWNlc19saXN0KTsKLQlJTklUX1dPUksoJnNvY2tldC0+ZGV2aWNlX2FkZCwgcGNtY2lhX2RlbGF5ZWRfYWRkX2RldmljZSk7CiAJbWVtc2V0KCZzb2NrZXQtPnBjbWNpYV9zdGF0ZSwgMCwgc2l6ZW9mKHU4KSk7CiAJc29ja2V0LT5kZXZpY2VfY291bnQgPSAwOwogCkBAIC0xMzQ1LDE0ICsxMzg4LDIwIEBACiAJaWYgKCFzb2NrZXQpCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnNvY2tldC0+b3BzX211dGV4KTsKIAlzb2NrZXQtPnBjbWNpYV9zdGF0ZS5kZWFkID0gMTsKKwltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwogCXBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc29ja2V0LCBOVUxMKTsKIAogCS8qIHVucmVnaXN0ZXIgYW55IHVuYm91bmQgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAlwY21jaWFfY2FyZF9yZW1vdmUoc29ja2V0LCBOVUxMKTsKKwlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKIAltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKKwogCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CiAKIAlyZXR1cm47CkBAIC0xMzgzLDggKzE0MzIsNiBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmcGNtY2lhX2Rldl9saXN0X2xvY2spOwotCiAJcmV0ID0gYnVzX3JlZ2lzdGVyKCZwY21jaWFfYnVzX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogYnVzX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYwppbmRleCBkMTg3YmE0Li44OWNmZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgICA9ICJlbGVjdHJhLWNmIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmggYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAppbmRleCA2MjI4NjBjLi44NDllZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaApAQCAtNzcsOCArNzcsOCBAQAogI2RlZmluZSBJMzY1X1ZQUDJfNVYJMHgwNAkvKiBWcHAyID0gNS4wdiAqLwogI2RlZmluZSBJMzY1X1ZQUDJfMTJWCTB4MDgJLyogVnBwMiA9IDEyLjB2ICovCiAjZGVmaW5lIEkzNjVfVlBQMV9NQVNLCTB4MDMJLyogTWFzayBmb3IgdHVybmluZyBvZmYgVnBwMSAqLwotI2RlZmluZSBJMzY1X1ZQUDFfNVYJMHgwMQkvKiBWcHAyID0gNS4wdiAqLwotI2RlZmluZSBJMzY1X1ZQUDFfMTJWCTB4MDIJLyogVnBwMiA9IDEyLjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV81VgkweDAxCS8qIFZwcDEgPSA1LjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV8xMlYJMHgwMgkvKiBWcHAxID0gMTIuMHYgKi8KIAogLyogRmxhZ3MgZm9yIEkzNjVfSU5UQ1RMICovCiAjZGVmaW5lIEkzNjVfUklOR19FTkEJMHg4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggMjZhNjIxYy4uMGVjZTJjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJZm9yIChpID0gMCA7IGkgPCBwY2Nfc29ja2V0cyA7IGkrKykgewogCQlzb2NrZXRbaV0uc29ja2V0LmRldi5wYXJlbnQgPSAmcGNjX2RldmljZS5kZXY7CiAJCXNvY2tldFtpXS5zb2NrZXQub3BzID0gJnBjY19vcGVyYXRpb25zOwotCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfbm9uc3RhdGljX29wczsKKwkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CiAJCXNvY2tldFtpXS5zb2NrZXQub3duZXIgPSBUSElTX01PRFVMRTsKIAkJc29ja2V0W2ldLm51bWJlciA9IGk7CiAJCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2tldFtpXS5zb2NrZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggN2Y3OWM0ZS4uNjFjMjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCQlzb2NrZXRbaV0uc29ja2V0LmlvX29mZnNldCA9IDA7CiAJCXNvY2tldFtpXS5zb2NrZXQucGNpX2lycSA9IHBjbWNpYV9zY2hsdmw7CiAJCXNvY2tldFtpXS5zb2NrZXQub3BzID0gJm04eHhfc2VydmljZXM7Ci0JCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9ub25zdGF0aWNfb3BzOworCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfaW9keW5fb3BzOwogCQlzb2NrZXRbaV0uc29ja2V0LmNiX2RldiA9IE5VTEw7CiAJCXNvY2tldFtpXS5zb2NrZXQuZGV2LnBhcmVudCA9ICZvZmRldi0+ZGV2OwogCQlzb2NrZXRbaV0ucGNtY2lhID0gcGNtY2lhOwpAQCAtMTMwMyw3ICsxMzAzLDcgQEAKICNkZWZpbmUgbTh4eF9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG04eHhfcGNtY2lhX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtOHh4X3BjbWNpYV9tYXRjaFtdID0gewogCXsKIAkgLnR5cGUgPSAicGNtY2lhIiwKIAkgLmNvbXBhdGlibGUgPSAiZnNsLHBxLXBjbWNpYSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmggYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKaW5kZXggNjI0NDQyZi4uZTc0YmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaApAQCAtMTE2LDEzICsxMTYsMTIgQEAKIAkgKiBmcm9tIEVyaWMgU3RpbGwsIDAyTWljcm8uCiAJICovCiAJdTggYSwgYjsKKwlib29sIHVzZV9zcGVlZHVwOwogCiAJaWYgKFBDSV9GVU5DKHNvY2tldC0+ZGV2LT5kZXZmbikgPT0gMCkgewogCQlhID0gY29uZmlnX3JlYWRiKHNvY2tldCwgTzJfUkVTRVJWRUQxKTsKIAkJYiA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIE8yX1JFU0VSVkVEMik7Ci0KLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJICAgIk8yOiByZXMgYXQgMHg5NC8weEQ0OiAlMDJ4LyUwMnhcbiIsIGEsIGIpOworCQlkZXZfZGJnKCZzb2NrZXQtPmRldi0+ZGV2LCAiTzI6IDB4OTQvMHhENDogJTAyeC8lMDJ4XG4iLCBhLCBiKTsKIAogCQlzd2l0Y2ggKHNvY2tldC0+ZGV2LT5kZXZpY2UpIHsKIAkJLyoKQEAgLTEzNSwyMyArMTM0LDM3IEBACiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODEyOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgzMjoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MzY6Ci0gCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjkzMzoKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKLQkJCQkgICAiWWVudGEgTzI6IG9sZCBicmlkZ2UsIGRpc2FibGluZyByZWFkICIKLQkJCQkgICAicHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwotCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKLQkJCSAgICAgICAgICAgICAgYSAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKLQkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCi0JCQkgICAgICAgICAgICAgIGIgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CisJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82OTMzOgorCQkJdXNlX3NwZWVkdXAgPSBmYWxzZTsKIAkJCWJyZWFrOwotCiAJCWRlZmF1bHQ6Ci0JCQlkZXZfcHJpbnRrKEtFUk5fSU5GTyAsICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJCSAgICJPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQl1c2Vfc3BlZWR1cCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHRoZSB1c2VyIG1heSBvdmVycmlkZSBvdXIgZGVjaXNpb24gKi8KKwkJaWYgKHN0cmNhc2VjbXAobzJfc3BlZWR1cCwgIm9uIikgPT0gMCkKKwkJCXVzZV9zcGVlZHVwID0gdHJ1ZTsKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAib2ZmIikgPT0gMCkKKwkJCXVzZV9zcGVlZHVwID0gZmFsc2U7CisJCWVsc2UgaWYgKHN0cmNhc2VjbXAobzJfc3BlZWR1cCwgImRlZmF1bHQiKSAhPSAwKQorCQkJZGV2X3dhcm4oJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJIk8yOiBVbmtub3duIHBhcmFtZXRlciwgdXNpbmcgJ2RlZmF1bHQnIik7CisKKwkJaWYgKHVzZV9zcGVlZHVwKSB7CisJCQlkZXZfaW5mbygmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IGVuYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKLQkJCSAgICAgICAgICAgICAgYSB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKKwkJCQkgICAgICBhIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKLQkJCSAgICAgICAgICAgICAgYiB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKKwkJCQkgICAgICBiIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJIk8yOiBkaXNhYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAorCQkJCSAgICAgIGEgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CisJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLAorCQkJCSAgICAgIGIgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwppbmRleCA2NjM3ODFkLi4zZWY5OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC03MSw4ICs3MSw2IEBACiAKICNkZWZpbmUJUE9MTF9JTlRFUlZBTAkJKDIgKiBIWikKIAotI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IG9tYXBfY2Zfc3NfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggZjczZmQ1Yi4uMTNhNzEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTYyLDE2ICs2MiwxNSBAQAogCQkJCQkJdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2Rldi0+ZnVuYyA9PSBmdW5jdGlvbikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCXJldHVybiBwY21jaWFfZ2V0X2RldihwX2Rldik7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2OSw3ICsxNjgsNiBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWludCByZXQgPSAtRU5PU1lTOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkgewpAQCAtMTgyLDE0ICsxODAsMTMgQEAKIAogCQkJLyogeW91IGNhbid0IHVzZSB0aGUgb2xkIGludGVyZmFjZSBpZiB0aGUgbmV3CiAJCQkgKiBvbmUgd2FzIHVzZWQgYmVmb3JlICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWlmICgocy0+cmVzb3VyY2Vfc2V0dXBfbmV3KSAmJgogCQkJICAgICEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkKIAkJCQlzLT5yZXNvdXJjZV9zZXR1cF9vbGQgPSAxOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCiAJCQlzd2l0Y2ggKGFkai0+UmVzb3VyY2UpIHsKIAkJCWNhc2UgUkVTX01FTU9SWV9SQU5HRToKQEAgLTIwOCwxMCArMjA1LDkgQEAKIAkJCQkgKiBsYXN0IGNhbGwgdG8gYWRqdXN0X3Jlc291cmNlX2luZm8sIHdlCiAJCQkJICogYWx3YXlzIG5lZWQgdG8gYXNzdW1lIHRoaXMgaXMgdGhlIGxhdGVzdAogCQkJCSAqIG9uZS4uLiAqLwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJCQkJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQl9CiAJfQogCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CkBAIC00NzAsNyArNDY2LDYgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzID0gcGNtY2lhX2dldF9zb2NrZXQocyk7CiAJaWYgKCFzKQpAQCAtNDkwLDcgKzQ4NSw3IEBACiAJCWdvdG8gZXJyX3B1dF9kcml2ZXI7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2LT5mdW5jID09IGJpbmRfaW5mby0+ZnVuY3Rpb24pIHsKIAkJCWlmICgocF9kZXYtPmRldi5kcml2ZXIgPT0gJnBfZHJ2LT5kcnYpKSB7CkBAIC00OTksNyArNDk0LDcgQEAKIAkJCQkJICogcmVnaXN0ZXJlZCwgYW5kIGl0IHdhcyByZWdpc3RlcmVkCiAJCQkJCSAqIGJ5IHVzZXJzcGFjZSBiZWZvcmUsIHdlIG5lZWQgdG8KIAkJCQkJICogcmV0dXJuIHRoZSAiaW5zdGFuY2UiLiAqLwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJCWJpbmRfaW5mby0+aW5zdGFuY2UgPSBwX2RldjsKIAkJCQkJcmV0ID0gLUVCVVNZOwogCQkJCQlnb3RvIGVycl9wdXRfbW9kdWxlOwpAQCAtNTA3LDcgKzUwMiw3IEBACiAJCQkJCS8qIHRoZSBjb3JyZWN0IGRyaXZlciBtYW5hZ2VkIHRvIGJpbmQKIAkJCQkJICogaXRzZWxmIG1hZ2ljYWxseSB0byB0aGUgY29ycmVjdAogCQkJCQkgKiBkZXZpY2UuICovCi0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQkJcF9kZXYtPmNhcmRtZ3IgPSBwX2RydjsKIAkJCQkJcmV0ID0gMDsKIAkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKQEAgLTUxNiwxMiArNTExLDEyIEBACiAJCQkJLyogdGhlcmUncyBhbHJlYWR5IGEgZGV2aWNlIGF2YWlsYWJsZSB3aGVyZQogCQkJCSAqIG5vIGRldmljZSBoYXMgYmVlbiBib3VuZCB0byB5ZXQuIFNvIHdlIGRvbid0CiAJCQkJICogbmVlZCB0byByZWdpc3RlciBhIGRldmljZSEgKi8KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQlnb3RvIHJlc2NhbjsKIAkJCX0KIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXBfZGV2ID0gcGNtY2lhX2RldmljZV9hZGQocywgYmluZF9pbmZvLT5mdW5jdGlvbik7CiAJaWYgKCFwX2RldikgewpAQCAtNTc4LDcgKzU3Myw2IEBACiAJZGV2X25vZGVfdCAqbm9kZTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBDT05GSUdfQ0FSREJVUwpAQCAtNjE3LDcgKzYxMSw3IEBACiAJfQogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewogCQkJcF9kZXYgPSBwY21jaWFfZ2V0X2RldihwX2Rldik7CkBAIC02MjYsMTEgKzYyMCwxMSBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogIGZvdW5kOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KHBfZGV2LT5kZXYuZHJpdmVyKTsKIAlpZiAocF9kcnYgJiYgIXBfZGV2LT5fbG9ja2VkKSB7CkBAIC05MzEsMTYgKzkyNSwxNiBAQAogCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgotCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKTsKIAlicmVhazsKICAgICBjYXNlIERTX1JFU1VNRV9DQVJEOgotCXJldCA9IHBjbWNpYV9yZXN1bWVfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19FSkVDVF9DQVJEOgotCWVyciA9IHBjbWNpYV9lamVjdF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfRUpFQ1QpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfSU5TRVJUX0NBUkQ6Ci0JZXJyID0gcGNtY2lhX2luc2VydF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfSU5TRVJUKTsKIAlicmVhazsKICAgICBjYXNlIERTX0FDQ0VTU19DT05GSUdVUkFUSU9OX1JFR0lTVEVSOgogCWlmICgoYnVmLT5jb25mX3JlZy5BY3Rpb24gPT0gQ1NfV1JJVEUpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IGQ1ZGI5NTYuLmIyZGYwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC00Myw2ICs0MywzOSBAQAogc3RhdGljIHU4IHBjbWNpYV91c2VkX2lycVtOUl9JUlFTXTsKICNlbmRpZgogCitzdGF0aWMgaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKHJlcywgc3RhcnQsIGVuZCwgcyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCSAgICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8oYmFzZSwgbnVtLCBhbGlnbiwgcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbSkKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKHMpOworCS8qIGlmIHRoZXJlIGlzIG5vIGNhbGxiYWNrLCB3ZSBjYW4gYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBpcyBPSyAqLworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHVfbG9uZyBhbGlnbiwKKwkJCQkgaW50IGxvdywgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKGJhc2UsIG51bSwgYWxpZ24sIGxvdywgcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKIAogLyoqIGFsbG9jX2lvX3NwYWNlCiAgKgpAQCAtMTU4LDE0ICsxOTEsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzID0gcF9kZXYtPnNvY2tldDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNudCd0IGxvY2tlZFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCiAJYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJc3dpdGNoIChyZWctPkFjdGlvbikgewogCWNhc2UgQ1NfUkVBRDoKQEAgLTE5MCw2ICsyMjcsNyBAQAogCQkJbWVtcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJaW50IHJldDsKIAogCXdoLS07CiAJaWYgKHdoID49IE1BWF9XSU4pCkBAIC0xOTgsMTIgKzIzNiwxMyBAQAogCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcy0+d2luW3doXS5jYXJkX3N0YXJ0ID0gcmVxLT5DYXJkT2Zmc2V0OwotCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT53aW5bd2hdKSAhPSAwKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKKwlyZXQgPSBzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT53aW5bd2hdKTsKKwlpZiAocmV0KQorCQlkZXZfd2Fybigmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX21hcF9tZW1fcGFnZSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfbWFwX21lbV9wYWdlKTsKIApAQCAtMjE5LDE0ICsyNTgsMTggQEAKIAljb25maWdfdCAqYzsKIAogCXMgPSBwX2Rldi0+c29ja2V0OworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKQEAgLTI1MSwxMCArMjk0LDEyIEBACiAJICAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlpZiAobW9kLT5WcHAxICE9IG1vZC0+VnBwMikgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiVnBwMSBhbmQgVnBwMiBtdXN0IGJlIHRoZSBzYW1lXG4iKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXMtPnNvY2tldC5WcHAgPSBtb2QtPlZwcDE7CiAJCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpIHsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAogCQkJCSAgICJVbmFibGUgdG8gc2V0IFZQUFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI2Miw2ICszMDcsNyBAQAogCX0gZWxzZSBpZiAoKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQpIHx8CiAJCSAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJjaGFuZ2luZyBWY2MgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI4Niw2ICszMzIsNyBAQAogCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpb19vbik7CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIG1vZGlmeV9jb25maWd1cmF0aW9uICovCkBAIC0yOTYsOSArMzQzLDExIEBACiB7CiAJcGNjYXJkX2lvX21hcCBpbyA9IHsgMCwgMCwgMCwgMCwgMSB9OwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJY29uZmlnX3QgKmM7CiAJaW50IGk7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChwX2Rldi0+X2xvY2tlZCkgewogCQlwX2Rldi0+X2xvY2tlZCA9IDA7CiAJCWlmICgtLShzLT5sb2NrX2NvdW50KSA9PSAwKSB7CkBAIC0zMjEsNiArMzcwLDcgQEAKIAkJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvKTsKIAkJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24gKi8KQEAgLTMzNywxMCArMzg3LDE0IEBACiBzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCWludCByZXQgPSAtRUlOVkFMOworCWNvbmZpZ190ICpjOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pbykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJcF9kZXYtPl9pbyA9IDA7CiAKQEAgLTM0OCw3ICs0MDIsNyBAQAogCSAgICAoYy0+aW8uTnVtUG9ydHMxICE9IHJlcS0+TnVtUG9ydHMxKSB8fAogCSAgICAoYy0+aW8uQmFzZVBvcnQyICE9IHJlcS0+QmFzZVBvcnQyKSB8fAogCSAgICAoYy0+aW8uTnVtUG9ydHMyICE9IHJlcS0+TnVtUG9ydHMyKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJYy0+c3RhdGUgJj0gfkNPTkZJR19JT19SRVE7CiAKQEAgLTM1NiwyOCArNDEwLDM4IEBACiAJaWYgKHJlcS0+TnVtUG9ydHMyKQogCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQyLCByZXEtPk51bVBvcnRzMik7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVsZWFzZV9pbyAqLwogCiAKIHN0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwljb25maWdfdCAqYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pcnEpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKwogCXBfZGV2LT5faXJxID0gMDsKIAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKKwogCWlmIChjLT5pcnEuQXR0cmlidXRlcyAhPSByZXEtPkF0dHJpYnV0ZXMpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIGF0dHJpYnV0ZXMgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAocy0+aXJxLkFzc2lnbmVkSVJRICE9IHJlcS0+QXNzaWduZWRJUlEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoLS1zLT5pcnEuQ29uZmlnID09IDApIHsKIAkJYy0+c3RhdGUgJj0gfkNPTkZJR19JUlFfUkVROwpAQCAtMzkwLDggKzQ1NCwxMiBAQAogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAlwY21jaWFfdXNlZF9pcnFbcmVxLT5Bc3NpZ25lZElSUV0tLTsKICNlbmRpZgorCXJldCA9IDA7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVsZWFzZV9pcnEgKi8KIAogCkBAIC00MDQsMTAgKzQ3MiwxMiBAQAogCWlmICh3aCA+PSBNQVhfV0lOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJd2luID0gJnMtPndpblt3aF07CiAKIAlpZiAoIShwX2Rldi0+X3dpbiAmIENMSUVOVF9XSU5fUkVRKHdoKSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAibm90IHJlbGVhc2luZyB1bmtub3duIHdpbmRvd1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MjMsNiArNDkzLDcgQEAKIAkJd2luLT5yZXMgPSBOVUxMOwogCX0KIAlwX2Rldi0+X3dpbiAmPSB+Q0xJRU5UX1dJTl9SRVEod2gpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV93aW5kb3cgKi8KQEAgLTQ0NSw4ICs1MTYsMTEgQEAKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSW50VHlwZSBtYXkgbm90IGJlIElOVF9DQVJEQlVTXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSB7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC00NTQsNiArNTI4LDcgQEAKIAkvKiBEbyBwb3dlciBjb250cm9sLiAgV2UgZG9uJ3QgYWxsb3cgY2hhbmdlcyBpbiBWY2MuICovCiAJcy0+c29ja2V0LlZwcCA9IHJlcS0+VnBwOwogCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwKIAkJCSAgICJVbmFibGUgdG8gc2V0IHNvY2tldCBzdGF0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDc2LDYgKzU1MSw3IEBACiAJCXMtPnNvY2tldC5pb19pcnEgPSAwOwogCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAlzLT5sb2NrX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJLyogU2V0IHVwIENJUyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCWJhc2UgPSBjLT5Db25maWdCYXNlID0gcmVxLT5Db25maWdCYXNlOwpAQCAtNTI0LDYgKzYwMCw3IEBACiAKIAkvKiBDb25maWd1cmUgSS9PIHdpbmRvd3MgKi8KIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKSB7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCWlvbWFwLnNwZWVkID0gaW9fc3BlZWQ7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCiAJCQlpZiAocy0+aW9baV0ucmVzKSB7CkBAIC01NDIsNiArNjE5LDcgQEAKIAkJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvbWFwKTsKIAkJCQlzLT5pb1tpXS5Db25maWcrKzsKIAkJCX0KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCX0KIAogCWMtPnN0YXRlIHw9IENPTkZJR19MT0NLRUQ7CkBAIC01NjAsNTQgKzYzOCw2NSBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAljb25maWdfdCAqYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSU8gYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChyZXEtPkF0dHJpYnV0ZXMxICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKChyZXEtPk51bVBvcnRzMiA+IDApICYmCiAJICAgIChyZXEtPkF0dHJpYnV0ZXMyICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJZGV2X2RiZygmcy0+ZGV2LCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDFcbiIpOwotCWlmIChhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMxLCAmcmVxLT5CYXNlUG9ydDEsCi0JCQkgICByZXEtPk51bVBvcnRzMSwgcmVxLT5JT0FkZHJMaW5lcykpIHsKKwlyZXQgPSBhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMxLCAmcmVxLT5CYXNlUG9ydDEsCisJCQkgICAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKTsKKwlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocmVxLT5OdW1Qb3J0czIpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDJcbiIpOwotCQlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAotCQkJCSAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKSkgeworCQlyZXQgPSBhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMyLCAmcmVxLT5CYXNlUG9ydDIsCisJCQkJICAgICByZXEtPk51bVBvcnRzMiwgcmVxLT5JT0FkZHJMaW5lcyk7CisJCWlmIChyZXQpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMiBmYWlsZWRcbiIpOwogCQkJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MSwgcmVxLT5OdW1Qb3J0czEpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJYy0+aW8gPSAqcmVxOwogCWMtPnN0YXRlIHw9IENPTkZJR19JT19SRVE7CiAJcF9kZXYtPl9pbyA9IDE7Ci0JcmV0dXJuIDA7CisJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGluZyByZXNvdXJjZXMgc3VjY2VlZGVkOiAlZFxuIiwgcmV0KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lvICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lvKTsKIApAQCAtNjM2LDE4ICs3MjUsMjAgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaXJxID0gMDsKIAlpbnQgdHlwZTsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JUlFfUkVRKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIklSUSBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBEZWNpZGUgd2hhdCB0eXBlIG9mIGludGVycnVwdCB3ZSBhcmUgcmVnaXN0ZXJpbmcgKi8KQEAgLTcwOCw3ICs3OTksNyBAQAogCWlmIChyZXQgJiYgIXMtPmlycS5Bc3NpZ25lZElSUSkgewogCQlpZiAoIXMtPnBjaV9pcnEpIHsKIAkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQl0eXBlID0gSVJRRl9TSEFSRUQ7CiAJCWlycSA9IHMtPnBjaV9pcnE7CkBAIC03MjAsNyArODExLDcgQEAKIAkJaWYgKHJldCkgewogCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsCiAJCQkJInJlcXVlc3RfaXJxKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtNzQzLDcgKzgzNCwxMCBAQAogCXBjbWNpYV91c2VkX2lycVtpcnFdKys7CiAjZW5kaWYKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lycSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9pcnEpOwogCkBAIC03OTYsNiArODkwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3ddOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKQEAgLTgwMyw2ICs4OTgsNyBAQAogCQkJCQkJICAgICAgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9NQVBfQkVMT1dfMU1CKSwgcyk7CiAJCWlmICghd2luLT5yZXMpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC04MjEsOCArOTE3LDEwIEBACiAJaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9VU0VfV0FJVCkKIAkJd2luLT5mbGFncyB8PSBNQVBfVVNFX1dBSVQ7CiAJd2luLT5jYXJkX3N0YXJ0ID0gMDsKKwogCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsIHdpbikgIT0gMCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsZWQgdG8gc2V0IG1lbW9yeSBtYXBwaW5nXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcy0+c3RhdGUgfD0gU09DS0VUX1dJTl9SRVEodyk7CkBAIC04MzMsNiArOTMxLDcgQEAKIAllbHNlCiAJCXJlcS0+QmFzZSA9IHdpbi0+cmVzLT5zdGFydDsKIAorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkqd2ggPSB3ICsgMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwppbmRleCBlMTc0MWNkLi43YzIwNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwpAQCAtNDgsMjMgKzQ4LDEzIEBACiAgKiAgICAgU3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4gIFRoZSBkZWZhdWx0ICgxKSBpcyB0byB1c2UgUENJCiAgKiAgICAgaW50ZXJydXB0czsgYSB2YWx1ZSBvZiAwIHNlbGVjdHMgSVNBIGludGVycnVwdHMuIFRoaXMgbXVzdCBiZSBzZXQgZm9yCiAgKiAgICAgY29ycmVjdCBvcGVyYXRpb24gb2YgUENJIGNhcmQgcmVhZGVycy4KLSAqCi0gKiAgaXJxX2xpc3Q9aSxqLC4uLgotICogICAgIFRoaXMgbGlzdCBsaW1pdHMgdGhlIHNldCBvZiBpbnRlcnJ1cHRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgUENNQ0lBCi0gKiAgICAgY2FyZHMuCi0gKiAgICAgVGhlIGRlZmF1bHQgbGlzdCBpcyAzLDQsNSw3LDksMTAsMTEuCi0gKiAgICAgKGlycV9saXN0IHBhcmFtZXRlciBpcyBub3QgdXNlZCwgaWYgaXJxX21vZGUgPSAxKQogICovCiAKIHN0YXRpYyBpbnQgaXJxX21vZGUgPSAxOyAvKiAwID0gSVNBIGludGVycnVwdCwgMSA9IFBDSSBpbnRlcnJ1cHQgKi8KLXN0YXRpYyBpbnQgaXJxX2xpc3RbMTZdOwotc3RhdGljIHVuc2lnbmVkIGludCBpcnFfbGlzdF9jb3VudCA9IDA7CiAKIG1vZHVsZV9wYXJhbShpcnFfbW9kZSwgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShpcnFfbGlzdCwgaW50LCAmaXJxX2xpc3RfY291bnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfbW9kZSwKIAkJImludGVycnVwdCBkZWxpdmVyeSBtb2RlLiAwID0gSVNBLCAxID0gUENJLiBkZWZhdWx0IGlzIDEiKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXJxX2xpc3QsICJpbnRlcnJ1cHRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgUENNQ0lBIGNhcmRzIik7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG9ydF9sb2NrKTsKIApAQCAtNjA1LDEzICs1OTUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaXJxX2xpc3RfY291bnQgPT0gMCkKLQkJbWFzazAgPSAweGZmZmY7Ci0JZWxzZQotCQlmb3IgKGkgPSBtYXNrMCA9IDA7IGkgPCBpcnFfbGlzdF9jb3VudDsgaSsrKQotCQkJbWFzazAgfD0gKDE8PGlycV9saXN0W2ldKTsKLQotCW1hc2swICY9IFBENjdfTUFTSzsKKwltYXNrMCA9IFBENjdfTUFTSzsKIAogCS8qIGp1c3QgZmluZCBpbnRlcnJ1cHRzIHRoYXQgYXJlbid0IGluIHVzZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggNTJkYjE3Mi4uNDUyYzgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0yMSw2MCArMjEsMTIgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAotCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbShzKTsKLQkvKiBpZiB0aGVyZSBpcyBubyBjYWxsYmFjaywgd2UgY2FuIGFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3ZhbGlkYXRlX21lbSk7Ci0KLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcl9lbmQsIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24ocmVzLCByX3N0YXJ0LCByX2VuZCwgcyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKTsKLQotc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9pb19yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgbnVtLAotCQkgICB1bnNpZ25lZCBsb25nIGFsaWduLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKQotCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKGJhc2UsIG51bSwgYWxpZ24sIHMpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZmluZF9pb19yZWdpb24pOwotCi1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHVfbG9uZyBhbGlnbiwKLQkJCQkgaW50IGxvdywgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKGJhc2UsIG51bSwgYWxpZ24sIGxvdywgcyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9maW5kX21lbV9yZWdpb24pOwotCi12b2lkIHJlbGVhc2VfcmVzb3VyY2VfZGIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+ZXhpdCkKLQkJcy0+cmVzb3VyY2Vfb3BzLT5leGl0KHMpOwotfQotCi0KIHN0YXRpYyBpbnQgc3RhdGljX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCS8qIHRoZSBnb29kIHRoaW5nIGFib3V0IFNTX0NBUF9TVEFUSUNfTUFQIHNvY2tldHMgaXMKIAkgKiB0aGF0IHRoZXkgZG9uJ3QgbmVlZCBhIHJlc291cmNlIGRhdGFiYXNlICovCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0LDMyICs2NiwzMiBAQAogCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OwogfTsKIAotc3RhdGljIHZvaWQgcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorc3RhdGljIHJlc291cmNlX3NpemVfdCBwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwKKwkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSAqZGF0YSA9IGFsaWduX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CiAKIAlzdGFydCA9IChyZXMtPnN0YXJ0ICYgfmRhdGEtPm1hc2spICsgZGF0YS0+b2Zmc2V0OwogCWlmIChzdGFydCA8IHJlcy0+c3RhcnQpCiAJCXN0YXJ0ICs9IGRhdGEtPm1hc2sgKyAxOwotCXJlcy0+c3RhcnQgPSBzdGFydDsKIAogI2lmZGVmIENPTkZJR19YODYKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQogCX0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX002OEsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJaWYgKChyZXMtPnN0YXJ0ICsgc2l6ZSAtIDEpID49IDEwMjQpCi0JCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQ7CisJCQlzdGFydCA9IHJlcy0+ZW5kOwogCX0KICNlbmRpZgorCisJcmV0dXJuIHN0YXJ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDliMGRjNDMuLjQ2NjNiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCBzb2NrZXRfZGF0YSB7CiAJc3RydWN0IHJlc291cmNlX21hcAkJbWVtX2RiOworCXN0cnVjdCByZXNvdXJjZV9tYXAJCW1lbV9kYl92YWxpZDsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwCQlpb19kYjsKLQl1bnNpZ25lZCBpbnQJCQlyc3JjX21lbV9wcm9iZTsKIH07CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocnNyY19tdXRleCk7CiAjZGVmaW5lIE1FTV9QUk9CRV9MT1cJKDEgPDwgMCkKICNkZWZpbmUgTUVNX1BST0JFX0hJR0gJKDEgPDwgMSkKIApAQCAtMTI1LDggKzEyNCwxMCBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCiAJZm9yIChwID0gbWFwOyA7IHAgPSBwLT5uZXh0KSB7Ci0JCWlmICgocCAhPSBtYXApICYmIChwLT5iYXNlK3AtPm51bS0xID49IGJhc2UpKQotCQkJcmV0dXJuIC0xOworCQlpZiAoKHAgIT0gbWFwKSAmJiAocC0+YmFzZStwLT5udW0gPj0gYmFzZSkpIHsKKwkJCXAtPm51bSA9IG1heChudW0gKyBiYXNlIC0gcC0+YmFzZSwgcC0+bnVtKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWlmICgocC0+bmV4dCA9PSBtYXApIHx8IChwLT5uZXh0LT5iYXNlID4gYmFzZStudW0tMSkpCiAJCQlicmVhazsKIAl9CkBAIC0yNjQsMzYgKzI2NSw0NCBAQAogfQogI2VuZGlmCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotICAgIFRoaXMgaXMgdHJpY2t5Li4uIHdoZW4gd2Ugc2V0IHVwIENJUyBtZW1vcnksIHdlIHRyeSB0byB2YWxpZGF0ZQotICAgIHRoZSBtZW1vcnkgd2luZG93IHNwYWNlIGFsbG9jYXRpb25zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgY2FyZHMgd2l0aCBhIHZhbGlkIENJUyAqLworLyoqCisgKiByZWFkYWJsZSgpIC0gaW9tZW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgY2FyZHMgd2l0aCBhIHZhbGlkIENJUworICovCiBzdGF0aWMgaW50IHJlYWRhYmxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgIHVuc2lnbmVkIGludCAqY291bnQpCiB7Ci0JaW50IHJldCA9IC0xOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHMtPmZha2VfY2lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImZha2UgQ0lTIGlzIGJlaW5nIHVzZWQ6IGNhbid0IHZhbGlkYXRlIG1lbVxuIik7CisJCXJldHVybiAwOworCX0KIAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwotCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCS8qIGFzIHdlJ3JlIG9ubHkgY2FsbGVkIGZyb20gcGNtY2lhLmMsIHdlJ3JlIHNhZmUgKi8KKwkJaWYgKHMtPmNhbGxiYWNrLT52YWxpZGF0ZSkKKwkJCXJldCA9IHMtPmNhbGxiYWNrLT52YWxpZGF0ZShzLCBjb3VudCk7CisJCS8qIGludmFsaWRhdGUgbWFwcGluZyAqLworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwotCQlkZXN0cm95X2Npc19jYWNoZShzKTsKIAl9CiAJcy0+Y2lzX21lbS5yZXMgPSBOVUxMOwotCWlmICgocmV0ICE9IDApIHx8ICgqY291bnQgPT0gMCkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCWlmICgocmV0KSB8fCAoKmNvdW50ID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAotLyogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3Igc2ltcGxlIG1lbW9yeSBjYXJkcyAqLwotc3RhdGljIGludCBjaGVja3N1bShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHJlc291cmNlICpyZXMpCisvKioKKyAqIGNoZWNrc3VtKCkgLSBpb21lbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBzaW1wbGUgbWVtb3J5IGNhcmRzCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tzdW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkgICAgdW5zaWduZWQgaW50ICp2YWx1ZSkKIHsKIAlwY2NhcmRfbWVtX21hcCBtYXA7CiAJaW50IGksIGEgPSAwLCBiID0gLTEsIGQ7CkBAIC0zMjEsNjEgKzMzMCw5MCBAQAogCQlpb3VubWFwKHZpcnQpOwogCX0KIAotCXJldHVybiAoYiA9PSAtMSkgPyAtMSA6IChhPj4xKTsKKwlpZiAoYiA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmFsdWUgPSBhOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNpc19yZWFkYWJsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCisvKioKKyAqIGRvX3ZhbGlkYXRlX21lbSgpIC0gbG93IGxldmVsIHZhbGlkYXRlIGEgbWVtb3J5IHJlZ2lvbiBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAYmFzZToJc3RhcnQgYWRkcmVzcyBvZiByZXNvdXJjZSB0byBjaGVjaworICogQHNpemU6CXNpemUgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWxpZGF0ZToJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UKKyAqCisgKiBkb192YWxpZGF0ZV9tZW0oKSBzcGxpdHMgdXAgdGhlIG1lbW9yeSByZWdpb24gd2hpY2ggaXMgdG8gYmUgY2hlY2tlZAorICogaW50byB0d28gcGFydHMuIEJvdGggYXJlIHBhc3NlZCB0byB0aGUgQHZhbGlkYXRlKCkgZnVuY3Rpb24uIElmCisgKiBAdmFsaWRhdGUoKSByZXR1cm5zIG5vbi16ZXJvLCBvciB0aGUgdmFsdWUgcGFyYW1ldGVyIHRvIEB2YWxpZGF0ZSgpCisgKiBpcyB6ZXJvLCBvciB0aGUgdmFsdWUgcGFyYW1ldGVyIGlzIGRpZmZlcmVudCBiZXR3ZWVuIGJvdGggY2FsbHMsCisgKiB0aGUgY2hlY2sgZmFpbHMsIGFuZCAtRUlOVkFMIGlzIHJldHVybmVkLiBFbHNlLCAwIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IGRvX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgaW50IHZhbGlkYXRlIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCQkgdW5zaWduZWQgaW50ICp2YWx1ZSkpCiB7CisJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczI7Ci0JdW5zaWduZWQgaW50IGluZm8xLCBpbmZvMjsKLQlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaW5mbzEgPSAxLCBpbmZvMiA9IDE7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlyZXMxID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sICJQQ01DSUEgbWVtcHJvYmUiKTsKIAlyZXMyID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UgKyBzaXplLzIsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sCiAJCQkiUENNQ0lBIG1lbXByb2JlIik7CiAKIAlpZiAocmVzMSAmJiByZXMyKSB7Ci0JCXJldCA9IHJlYWRhYmxlKHMsIHJlczEsICZpbmZvMSk7Ci0JCXJldCArPSByZWFkYWJsZShzLCByZXMyLCAmaW5mbzIpOworCQlyZXQgPSAwOworCQlpZiAodmFsaWRhdGUpIHsKKwkJCXJldCA9IHZhbGlkYXRlKHMsIHJlczEsICZpbmZvMSk7CisJCQlyZXQgKz0gdmFsaWRhdGUocywgcmVzMiwgJmluZm8yKTsKKwkJfQogCX0KIAogCWZyZWVfcmVnaW9uKHJlczIpOwogCWZyZWVfcmVnaW9uKHJlczEpOwogCi0JcmV0dXJuIChyZXQgPT0gMikgJiYgKGluZm8xID09IGluZm8yKTsKLX0KKwlkZXZfZGJnKCZzLT5kZXYsICJjczogbWVtb3J5IHByb2JlIDB4JTA2bHgtMHglMDZseDogJXAgJXAgJXUgJXUgJXUiLAorCQliYXNlLCBiYXNlK3NpemUtMSwgcmVzMSwgcmVzMiwgcmV0LCBpbmZvMSwgaW5mbzIpOwogCi1zdGF0aWMgaW50Ci1jaGVja3N1bV9tYXRjaChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXMxLCAqcmVzMjsKLQlpbnQgYSA9IC0xLCBiID0gLTE7CisJaWYgKChyZXQpIHx8IChpbmZvMSAhPSBpbmZvMikgfHwgKGluZm8xID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlczEgPSBjbGFpbV9yZWdpb24ocywgYmFzZSwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgIlBDTUNJQSBtZW1wcm9iZSIpOwotCXJlczIgPSBjbGFpbV9yZWdpb24ocywgYmFzZSArIHNpemUvMiwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwKLQkJCSJQQ01DSUEgbWVtcHJvYmUiKTsKLQotCWlmIChyZXMxICYmIHJlczIpIHsKLQkJYSA9IGNoZWNrc3VtKHMsIHJlczEpOwotCQliID0gY2hlY2tzdW0ocywgcmVzMik7CisJaWYgKHZhbGlkYXRlICYmICFzLT5mYWtlX2NpcykgeworCQkvKiBtb3ZlIGl0IHRvIHRoZSB2YWxpZGF0ZWQgZGF0YSBzZXQgKi8KKwkJYWRkX2ludGVydmFsKCZzX2RhdGEtPm1lbV9kYl92YWxpZCwgYmFzZSwgc2l6ZSk7CisJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGIsIGJhc2UsIHNpemUpOwogCX0KIAotCWZyZWVfcmVnaW9uKHJlczIpOwotCWZyZWVfcmVnaW9uKHJlczEpOwotCi0JcmV0dXJuIChhID09IGIpICYmIChhID49IDApOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFRoZSBtZW1vcnkgcHJvYmUuICBJZiB0aGUgbWVtb3J5IGxpc3QgaW5jbHVkZXMgYSA2NEstYWxpZ25lZCBibG9jawotICAgIGJlbG93IDFNQiwgd2UgcHJvYmUgaW4gNjRLIGNodW5rcywgYW5kIGFzIHNvb24gYXMgd2UgYWNjdW11bGF0ZSBhdAotICAgIGxlYXN0IG1lbV9saW1pdCBmcmVlIHNwYWNlLCB3ZSBxdWl0LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBkb19tZW1fcHJvYmUodV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQorLyoqCisgKiBkb19tZW1fcHJvYmUoKSAtIHZhbGlkYXRlIGEgbWVtb3J5IHJlZ2lvbiBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAYmFzZToJc3RhcnQgYWRkcmVzcyBvZiByZXNvdXJjZSB0byBjaGVjaworICogQG51bToJc2l6ZSBvZiByZXNvdXJjZSB0byBjaGVjaworICogQHZhbGlkYXRlOgl2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIHVzZQorICogQGZhbGxiYWNrOgl2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIHVzZSBpZiB2YWxpZGF0ZSBmYWlscworICoKKyAqIGRvX21lbV9wcm9iZSgpIGNoZWNrcyBhIG1lbW9yeSByZWdpb24gZm9yIHVzZSBieSB0aGUgUENNQ0lBIHN1YnN5c3RlbS4KKyAqIFRvIGRvIHNvLCB0aGUgYXJlYSBpcyBzcGxpdCB1cCBpbnRvIHNlbnNpYmxlIHBhcnRzLCBhbmQgdGhlbiBwYXNzZWQKKyAqIGludG8gdGhlIEB2YWxpZGF0ZSgpIGZ1bmN0aW9uLiBPbmx5IGlmIEB2YWxpZGF0ZSgpIGFuZCBAZmFsbGJhY2soKSBmYWlsLAorICogdGhlIGFyZWEgaXMgbWFya2VkIGFzIHVuYXZhaWJhbGUgZm9yIHVzZSBieSB0aGUgUENNQ0lBIHN1YnN5c3RlbS4gVGhlCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB1c2FibGUgbWVtb3J5IGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwKKwkJCWludCB2YWxpZGF0ZSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSksCisJCQlpbnQgZmFsbGJhY2sgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCSAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAl1X2xvbmcgaSwgaiwgYmFkLCBmYWlsLCBzdGVwOwpAQCAtMzkzLDE1ICs0MzEsMTQgQEAKIAlmb3IgKGkgPSBqID0gYmFzZTsgaSA8IGJhc2UrbnVtOyBpID0gaiArIHN0ZXApIHsKIAkJaWYgKCFmYWlsKSB7CiAJCQlmb3IgKGogPSBpOyBqIDwgYmFzZStudW07IGogKz0gc3RlcCkgewotCQkJCWlmIChjaXNfcmVhZGFibGUocywgaiwgc3RlcCkpCisJCQkJaWYgKCFkb192YWxpZGF0ZV9tZW0ocywgaiwgc3RlcCwgdmFsaWRhdGUpKQogCQkJCQlicmVhazsKIAkJCX0KIAkJCWZhaWwgPSAoKGkgPT0gYmFzZSkgJiYgKGogPT0gYmFzZStudW0pKTsKIAkJfQotCQlpZiAoZmFpbCkgewotCQkJZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IDIqc3RlcCkKLQkJCQlpZiAoY2hlY2tzdW1fbWF0Y2gocywgaiwgc3RlcCkgJiYKLQkJCQkJY2hlY2tzdW1fbWF0Y2gocywgaiArIHN0ZXAsIHN0ZXApKQorCQlpZiAoKGZhaWwpICYmIChmYWxsYmFjaykpIHsKKwkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSBzdGVwKQorCQkJCWlmICghZG9fdmFsaWRhdGVfbWVtKHMsIGosIHN0ZXAsIGZhbGxiYWNrKSkKIAkJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGkgIT0gaikgewpAQCAtNDE2LDggKzQ1MywxNCBAQAogCXJldHVybiBudW0gLSBiYWQ7CiB9CiAKKwogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAorLyoqCisgKiBpbnZfcHJvYmUoKSAtIHRvcC10by1ib3R0b20gc2VhcmNoIGZvciBvbmUgdXN1YWJsZSBoaWdoIG1lbW9yeSBhcmVhCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBtOgkJcmVzb3VyY2VfbWFwIHRvIGNoZWNrCisgKi8KIHN0YXRpYyB1X2xvbmcgaW52X3Byb2JlKHN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKQEAgLTQzMiw5ICs0NzUsMTggQEAKIAl9CiAJaWYgKG0tPmJhc2UgPCAweDEwMDAwMCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGRvX21lbV9wcm9iZShtLT5iYXNlLCBtLT5udW0sIHMpOworCXJldHVybiBkb19tZW1fcHJvYmUocywgbS0+YmFzZSwgbS0+bnVtLCByZWFkYWJsZSwgY2hlY2tzdW0pOwogfQogCisvKioKKyAqIHZhbGlkYXRlX21lbSgpIC0gbWVtb3J5IHByb2JlIGZ1bmN0aW9uCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBwcm9iZV9tYXNrOiBNRU1fUFJPQkVfTE9XIHwgTUVNX1BST0JFX0hJR0gKKyAqCisgKiBUaGUgbWVtb3J5IHByb2JlLiAgSWYgdGhlIG1lbW9yeSBsaXN0IGluY2x1ZGVzIGEgNjRLLWFsaWduZWQgYmxvY2sKKyAqIGJlbG93IDFNQiwgd2UgcHJvYmUgaW4gNjRLIGNodW5rcywgYW5kIGFzIHNvb24gYXMgd2UgYWNjdW11bGF0ZSBhdAorICogbGVhc3QgbWVtX2xpbWl0IGZyZWUgc3BhY2UsIHdlIHF1aXQuIFJldHVybnMgMCBvbiB1c3VhYmxlIHBvcnRzLgorICovCiBzdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spCiB7CiAJc3RydWN0IHJlc291cmNlX21hcCAqbSwgbW07CkBAIC00NDYsNiArNDk4LDggQEAKIAlpZiAocHJvYmVfbWFzayAmIE1FTV9QUk9CRV9ISUdIKSB7CiAJCWlmIChpbnZfcHJvYmUoc19kYXRhLT5tZW1fZGIubmV4dCwgcykgPiAwKQogCQkJcmV0dXJuIDA7CisJCWlmIChzX2RhdGEtPm1lbV9kYl92YWxpZC5uZXh0ICE9ICZzX2RhdGEtPm1lbV9kYl92YWxpZCkKKwkJCXJldHVybiAwOwogCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcy0+ZGV2LAogCQkJICAgImNzOiB3YXJuaW5nOiBubyBoaWdoIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NTcsNyArNTExLDggQEAKIAkJaWYgKG1tLmJhc2UgPj0gMHgxMDAwMDApCiAJCQljb250aW51ZTsKIAkJaWYgKChtbS5iYXNlIHwgbW0ubnVtKSAmIDB4ZmZmZikgewotCQkJb2sgKz0gZG9fbWVtX3Byb2JlKG1tLmJhc2UsIG1tLm51bSwgcyk7CisJCQlvayArPSBkb19tZW1fcHJvYmUocywgbW0uYmFzZSwgbW0ubnVtLCByZWFkYWJsZSwKKwkJCQkJICAgY2hlY2tzdW0pOwogCQkJY29udGludWU7CiAJCX0KIAkJLyogU3BlY2lhbCBwcm9iZSBmb3IgNjRLLWFsaWduZWQgYmxvY2sgKi8KQEAgLTQ2Nyw3ICs1MjIsOCBAQAogCQkJCWlmIChvayA+PSBtZW1fbGltaXQpCiAJCQkJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGIsIGIsIDB4MTAwMDApOwogCQkJCWVsc2UKLQkJCQkJb2sgKz0gZG9fbWVtX3Byb2JlKGIsIDB4MTAwMDAsIHMpOworCQkJCQlvayArPSBkb19tZW1fcHJvYmUocywgYiwgMHgxMDAwMCwKKwkJCQkJCQkgICByZWFkYWJsZSwgY2hlY2tzdW0pOwogCQkJfQogCQl9CiAJfQpAQCAtNDgwLDYgKzUzNiwxMyBAQAogCiAjZWxzZSAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovCiAKKy8qKgorICogdmFsaWRhdGVfbWVtKCkgLSBtZW1vcnkgcHJvYmUgZnVuY3Rpb24KKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQHByb2JlX21hc2s6IGlnbm9yZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gdXN1YWJsZSBwb3J0cy4KKyAqLwogc3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKQogewogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIG1tOwpAQCAtNDg4LDcgKzU1MSw3IEBACiAKIAlmb3IgKG0gPSBzX2RhdGEtPm1lbV9kYi5uZXh0OyBtICE9ICZzX2RhdGEtPm1lbV9kYjsgbSA9IG1tLm5leHQpIHsKIAkJbW0gPSAqbTsKLQkJb2sgKz0gZG9fbWVtX3Byb2JlKG1tLmJhc2UsIG1tLm51bSwgcyk7CisJCW9rICs9IGRvX21lbV9wcm9iZShzLCBtbS5iYXNlLCBtbS5udW0sIHJlYWRhYmxlLCBjaGVja3N1bSk7CiAJfQogCWlmIChvayA+IDApCiAJCXJldHVybiAwOwpAQCAtNDk4LDMxICs1NjEsMzEgQEAKICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovCiAKIAotLyoKKy8qKgorICogcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0oKSAtIHRyeSB0byB2YWxpZGF0ZSBpb21lbSBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKgorICogVGhpcyBpcyB0cmlja3kuLi4gd2hlbiB3ZSBzZXQgdXAgQ0lTIG1lbW9yeSwgd2UgdHJ5IHRvIHZhbGlkYXRlCisgKiB0aGUgbWVtb3J5IHdpbmRvdyBzcGFjZSBhbGxvY2F0aW9ucy4KKyAqCiAgKiBMb2NraW5nIG5vdGU6IE11c3QgYmUgY2FsbGVkIHdpdGggc2t0X211dGV4IGhlbGQhCiAgKi8KIHN0YXRpYyBpbnQgcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXVuc2lnbmVkIGludCBwcm9iZV9tYXNrID0gTUVNX1BST0JFX0xPVzsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JaWYgKCFwcm9iZV9tZW0pCisJaWYgKCFwcm9iZV9tZW0gfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKLQogCWlmIChzLT5mZWF0dXJlcyAmIFNTX0NBUF9QQUdFX1JFR1MpCiAJCXByb2JlX21hc2sgPSBNRU1fUFJPQkVfSElHSDsKIAotCWlmIChwcm9iZV9tYXNrICYgfnNfZGF0YS0+cnNyY19tZW1fcHJvYmUpIHsKLQkJaWYgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpCi0JCQlyZXQgPSB2YWxpZGF0ZV9tZW0ocywgcHJvYmVfbWFzayk7Ci0JCWlmICghcmV0KQotCQkJc19kYXRhLT5yc3JjX21lbV9wcm9iZSB8PSBwcm9iZV9tYXNrOwotCX0KKwlyZXQgPSB2YWxpZGF0ZV9tZW0ocywgcHJvYmVfbWFzayk7CiAKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCWlmIChzX2RhdGEtPm1lbV9kYl92YWxpZC5uZXh0ICE9ICZzX2RhdGEtPm1lbV9kYl92YWxpZCkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTMzLDggKzU5Niw4IEBACiAJc3RydWN0IHJlc291cmNlX21hcAkqbWFwOwogfTsKIAotc3RhdGljIHZvaWQKLXBjbWNpYV9jb21tb25fYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90CitwY21jaWFfY29tbW9uX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwpAQCAtNTQ1LDE3ICs2MDgsMTggQEAKIAlzdGFydCA9IChyZXMtPnN0YXJ0ICYgfmRhdGEtPm1hc2spICsgZGF0YS0+b2Zmc2V0OwogCWlmIChzdGFydCA8IHJlcy0+c3RhcnQpCiAJCXN0YXJ0ICs9IGRhdGEtPm1hc2sgKyAxOwotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1wY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzaXplLAotCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24pCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90CitwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm07CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OwogCi0JcGNtY2lhX2NvbW1vbl9hbGlnbihkYXRhLCByZXMsIHNpemUsIGFsaWduKTsKKwlzdGFydCA9IHBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CiAKIAlmb3IgKG0gPSBkYXRhLT5tYXAtPm5leHQ7IG0gIT0gZGF0YS0+bWFwOyBtID0gbS0+bmV4dCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbS0+YmFzZTsKQEAgLTU2Nyw4ICs2MzEsNyBAQAogCQkgKiBmaXQgaGVyZS4KIAkJICovCiAJCWlmIChyZXMtPnN0YXJ0IDwgc3RhcnQpIHsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJCXBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CisJCQlzdGFydCA9IHBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CiAJCX0KIAogCQkvKgpAQCAtNTg2LDcgKzY0OSw5IEBACiAJICogSWYgd2UgZmFpbGVkIHRvIGZpbmQgc29tZXRoaW5nIHN1aXRhYmxlLCBlbnN1cmUgd2UgZmFpbC4KIAkgKi8KIAlpZiAobSA9PSBkYXRhLT5tYXApCi0JCXJlcy0+c3RhcnQgPSByZXMtPmVuZDsKKwkJc3RhcnQgPSByZXMtPmVuZDsKKworCXJldHVybiBzdGFydDsKIH0KIAogLyoKQEAgLTYwMCw3ICs2NjUsNiBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCWZvciAobSA9IHNfZGF0YS0+aW9fZGIubmV4dDsgbSAhPSAmc19kYXRhLT5pb19kYjsgbSA9IG0tPm5leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG0tPmJhc2U7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gbS0+YmFzZSArIG0tPm51bSAtIDE7CkBAIC02MTEsNyArNjc1LDYgQEAKIAkJcmV0ID0gYWRqdXN0X3Jlc291cmNlKHJlcywgcl9zdGFydCwgcl9lbmQgLSByX3N0YXJ0ICsgMSk7CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY0NSw3ICs3MDgsNiBAQAogCWRhdGEub2Zmc2V0ID0gYmFzZSAmIGRhdGEubWFzazsKIAlkYXRhLm1hcCA9ICZzX2RhdGEtPmlvX2RiOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAjaWZkZWYgQ09ORklHX1BDSQogCWlmIChzLT5jYl9kZXYpIHsKIAkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBudW0sIDEsCkBAIC02NTQsNyArNzE2LDYgQEAKICNlbmRpZgogCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCByZXMsIG51bSwgbWluLCB+MFVMLAogCQkJCQkxLCBwY21jaWFfYWxpZ24sICZkYXRhKTsKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJaWYgKHJldCAhPSAwKSB7CiAJCWtmcmVlKHJlcyk7CkBAIC02NzAsMTUgKzczMSwxNSBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIG1pbiwgbWF4OwotCWludCByZXQsIGk7CisJaW50IHJldCwgaSwgajsKIAogCWxvdyA9IGxvdyB8fCAhKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1BBR0VfUkVHUyk7CiAKIAlkYXRhLm1hc2sgPSBhbGlnbiAtIDE7CiAJZGF0YS5vZmZzZXQgPSBiYXNlICYgZGF0YS5tYXNrOwotCWRhdGEubWFwID0gJnNfZGF0YS0+bWVtX2RiOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYl92YWxpZDsKIAkJaWYgKGxvdykgewogCQkJbWF4ID0gMHgxMDAwMDBVTDsKIAkJCW1pbiA9IGJhc2UgPCBtYXggPyBiYXNlIDogMDsKQEAgLTY4NywxNyArNzQ4LDIzIEBACiAJCQltaW4gPSAweDEwMDAwMFVMICsgYmFzZTsKIAkJfQogCi0JCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CiAjaWZkZWYgQ09ORklHX1BDSQotCQlpZiAocy0+Y2JfZGV2KSB7Ci0JCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIG51bSwKLQkJCQkJCSAgICAgMSwgbWluLCAwLAotCQkJCQkJICAgICBwY21jaWFfYWxpZ24sICZkYXRhKTsKLQkJfSBlbHNlCisJCQlpZiAocy0+Y2JfZGV2KSB7CisJCQkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywKKwkJCQkJCQlyZXMsIG51bSwgMSwgbWluLCAwLAorCQkJCQkJCXBjbWNpYV9hbGlnbiwgJmRhdGEpOworCQkJfSBlbHNlCiAjZW5kaWYKLQkJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwKLQkJCQkJCW1heCwgMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJCQl7CisJCQkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLAorCQkJCQkJCXJlcywgbnVtLCBtaW4sIG1heCwgMSwKKwkJCQkJCQlwY21jaWFfYWxpZ24sICZkYXRhKTsKKwkJCX0KKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlicmVhazsKKwkJCWRhdGEubWFwID0gJnNfZGF0YS0+bWVtX2RiOworCQl9CiAJCWlmIChyZXQgPT0gMCB8fCBsb3cpCiAJCQlicmVhazsKIAkJbG93ID0gMTsKQEAgLTcyMCwyNSArNzg3LDE4IEBACiAJaWYgKGVuZCA8IHN0YXJ0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJcmV0ID0gYWRkX2ludGVydmFsKCZkYXRhLT5tZW1fZGIsIHN0YXJ0LCBzaXplKTsKKwkJaWYgKCFyZXQpCisJCQlkb19tZW1fcHJvYmUocywgc3RhcnQsIHNpemUsIE5VTEwsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFJFTU9WRV9NQU5BR0VEX1JFU09VUkNFOgogCQlyZXQgPSBzdWJfaW50ZXJ2YWwoJmRhdGEtPm1lbV9kYiwgc3RhcnQsIHNpemUpOwotCQlpZiAoIXJldCkgewotCQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldDsKLQkJCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc29ja2V0LCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkKLQkJCQlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKLQkJCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NTYsNyArODE2LDYgQEAKIAlpZiAoZW5kID4gSU9fU1BBQ0VfTElNSVQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFERF9NQU5BR0VEX1JFU09VUkNFOgogCQlpZiAoYWRkX2ludGVydmFsKCZkYXRhLT5pb19kYiwgc3RhcnQsIHNpemUpICE9IDApIHsKQEAgLTc3NSw3ICs4MzQsNiBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MDEsOCArODU5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlyZXMgPSBzLT5jYl9kZXYtPmJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBpKSB7CiAJCWlmICghcmVzKQogCQkJY29udGludWU7CiAKQEAgLTg1OSw2ICs5MTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEtPm1lbV9kYi5uZXh0ID0gJmRhdGEtPm1lbV9kYjsKKwlkYXRhLT5tZW1fZGJfdmFsaWQubmV4dCA9ICZkYXRhLT5tZW1fZGJfdmFsaWQ7CiAJZGF0YS0+aW9fZGIubmV4dCA9ICZkYXRhLT5pb19kYjsKIAogCXMtPnJlc291cmNlX2RhdGEgPSAodm9pZCAqKSBkYXRhOwpAQCAtODczLDcgKzkzMSwxMCBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHJlc291cmNlX21hcCAqcCwgKnE7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwlmb3IgKHAgPSBkYXRhLT5tZW1fZGJfdmFsaWQubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiX3ZhbGlkOyBwID0gcSkgeworCQlxID0gcC0+bmV4dDsKKwkJa2ZyZWUocCk7CisJfQogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBxKSB7CiAJCXEgPSBwLT5uZXh0OwogCQlrZnJlZShwKTsKQEAgLTg4Miw3ICs5NDMsNiBAQAogCQlxID0gcC0+bmV4dDsKIAkJa2ZyZWUocCk7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiB9CiAKIApAQCAtOTA5LDcgKzk2OSw3IEBACiAJc3RydWN0IHJlc291cmNlX21hcCAqcDsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCiAJZm9yIChwID0gZGF0YS0+aW9fZGIubmV4dDsgcCAhPSAmZGF0YS0+aW9fZGI7IHAgPSBwLT5uZXh0KSB7CkBAIC05MjEsNyArOTgxLDcgQEAKIAkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTQ5LDkgKzEwMDksMTEgQEAKIAlpZiAoZW5kX2FkZHIgPCBzdGFydF9hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0ID0gYWRqdXN0X2lvKHMsIGFkZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogCWlmICghcmV0KQogCQlzLT5yZXNvdXJjZV9zZXR1cF9uZXcgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KQEAgLTk2NSw5ICsxMDI3LDE5IEBACiAJc3RydWN0IHJlc291cmNlX21hcCAqcDsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCisJZm9yIChwID0gZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYl92YWxpZDsKKwkgICAgIHAgPSBwLT5uZXh0KSB7CisJCWlmIChyZXQgPiAoUEFHRV9TSVpFIC0gMTApKQorCQkJY29udGludWU7CisJCXJldCArPSBzbnByaW50ZigmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKKwkJCQkiMHglMDhseCAtIDB4JTA4bHhcbiIsCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlKSwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CisJfQorCiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKHJldCA+IChQQUdFX1NJWkUgLSAxMCkpCiAJCQljb250aW51ZTsKQEAgLTk3Nyw3ICsxMDQ5LDcgQEAKIAkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNSw5ICsxMDc3LDExIEBACiAJaWYgKGVuZF9hZGRyIDwgc3RhcnRfYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldCA9IGFkanVzdF9tZW1vcnkocywgYWRkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7CiAJaWYgKCFyZXQpCiAJCXMtPnJlc291cmNlX3NldHVwX25ldyA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCA3YTQ1NjAwLi4wODI3ODAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtODgsMTUgKzg4LDE0IEBACiBzdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfaW5zZXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcGNtY2lhX2luc2VydF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfSU5TRVJUKTsKIAotCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpOwogCkBAIC0xMTMsMTggKzExMiwyMiBAQAogCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOworCXNzaXplX3QgcmV0ID0gY291bnQ7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpICYmICFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKQotCQlyZXQgPSBwY21jaWFfc3VzcGVuZF9jYXJkKHMpOwotCWVsc2UgaWYgKChzLT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSAmJiAhc3RybmNtcChidWYsICJvbiIsIDIpKQotCQlyZXQgPSBwY21jaWFfcmVzdW1lX2NhcmQocyk7CisJaWYgKCFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKQorCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpOworCWVsc2UgeworCQlpZiAoIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKKwkJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVTVU1FKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwl9CiAKLQlyZXR1cm4gcmV0ID8gLUVOT0RFViA6IGNvdW50OworCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9wbV9zdGF0ZSwgMDY0NCwgcGNjYXJkX3Nob3dfY2FyZF9wbV9zdGF0ZSwgcGNjYXJkX3N0b3JlX2NhcmRfcG1fc3RhdGUpOwogCkBAIC0xMzIsMTUgKzEzNSwxNCBAQAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBwY21jaWFfZWplY3RfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0VKRUNUKTsKIAotCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9lamVjdCwgMDIwMCwgTlVMTCwgcGNjYXJkX3N0b3JlX2VqZWN0KTsKIApAQCAtMTY3LDcgKzE2OSw5IEBACiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIjB4JXhcbiIsICZtYXNrKTsKIAogCWlmIChyZXQgPT0gMSkgeworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlzLT5pcnFfbWFzayAmPSBtYXNrOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldCA9IDA7CiAJfQogCkBAIC0xODcsMTY0ICsxOTEsMjIgQEAKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCFzLT5yZXNvdXJjZV9zZXR1cF9kb25lKQogCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0JbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKLQlpZiAoKHMtPmNhbGxiYWNrKSAmJgotCSAgICAocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgJiYKLQkgICAgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgewotCQlpZiAodHJ5X21vZHVsZV9nZXQocy0+Y2FsbGJhY2stPm93bmVyKSkgewotCQkJcy0+Y2FsbGJhY2stPnJlcXVlcnkocywgMCk7Ci0JCQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19zZXR1cF9kb25lLCAwNjAwLCBwY2NhcmRfc2hvd19yZXNvdXJjZSwgcGNjYXJkX3N0b3JlX3Jlc291cmNlKTsKIAotCi1zdGF0aWMgc3NpemVfdCBwY2NhcmRfZXh0cmFjdF9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXR1cGxlX3QgdHVwbGU7Ci0JaW50IHN0YXR1cywgaTsKLQlsb2ZmX3QgcG9pbnRlciA9IDA7Ci0Jc3NpemVfdCByZXQgPSAwOwotCXVfY2hhciAqdHVwbGVidWZmZXI7Ci0JdV9jaGFyICp0ZW1wYnVmZmVyOwotCi0JdHVwbGVidWZmZXIgPSBrbWFsbG9jKHNpemVvZih1X2NoYXIpICogMjU2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXR1cGxlYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRlbXBidWZmZXIgPSBrbWFsbG9jKHNpemVvZih1X2NoYXIpICogMjU4LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBidWZmZXIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmcmVlX3R1cGxlOwotCX0KLQotCW1lbXNldCgmdHVwbGUsIDAsIHNpemVvZih0dXBsZV90KSk7Ci0KLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0xJTksgfCBUVVBMRV9SRVRVUk5fQ09NTU9OOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlzdGF0dXMgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCAmdHVwbGUpOwotCXdoaWxlICghc3RhdHVzKSB7Ci0JCXR1cGxlLlR1cGxlRGF0YSA9IHR1cGxlYnVmZmVyOwotCQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JCW1lbXNldCh0dXBsZWJ1ZmZlciwgMCwgc2l6ZW9mKHVfY2hhcikgKiAyNTUpOwotCi0JCXN0YXR1cyA9IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzLCAmdHVwbGUpOwotCQlpZiAoc3RhdHVzKQotCQkJYnJlYWs7Ci0KLQkJaWYgKG9mZiA8IChwb2ludGVyICsgMiArIHR1cGxlLlR1cGxlRGF0YUxlbikpIHsKLQkJCXRlbXBidWZmZXJbMF0gPSB0dXBsZS5UdXBsZUNvZGUgJiAweGZmOwotCQkJdGVtcGJ1ZmZlclsxXSA9IHR1cGxlLlR1cGxlTGluayAmIDB4ZmY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuOyBpKyspCi0JCQkJdGVtcGJ1ZmZlcltpICsgMl0gPSB0dXBsZWJ1ZmZlcltpXSAmIDB4ZmY7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAoMiArIHR1cGxlLlR1cGxlRGF0YUxlbik7IGkrKykgewotCQkJCWlmICgoKGkgKyBwb2ludGVyKSA+PSBvZmYpICYmCi0JCQkJICAgIChpICsgcG9pbnRlcikgPCAob2ZmICsgY291bnQpKSB7Ci0JCQkJCWJ1ZltyZXRdID0gdGVtcGJ1ZmZlcltpXTsKLQkJCQkJcmV0Kys7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcG9pbnRlciArPSAyICsgdHVwbGUuVHVwbGVEYXRhTGVuOwotCi0JCWlmIChwb2ludGVyID49IChvZmYgKyBjb3VudCkpCi0JCQlicmVhazsKLQotCQlpZiAodHVwbGUuVHVwbGVDb2RlID09IENJU1RQTF9FTkQpCi0JCQlicmVhazsKLQkJc3RhdHVzID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCAmdHVwbGUpOwotCX0KLQotCWtmcmVlKHRlbXBidWZmZXIpOwotIGZyZWVfdHVwbGU6Ci0Ja2ZyZWUodHVwbGVidWZmZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDB4MjAwOwotCi0JaWYgKG9mZiA+PSBzaXplKQotCQljb3VudCA9IDA7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCQl1bnNpZ25lZCBpbnQgY2hhaW5zOwotCi0JCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCi0JCQljb3VudCA9IHNpemUgLSBvZmY7Ci0KLQkJcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwotCi0JCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZjaGFpbnMpKQotCQkJcmV0dXJuIC1FSU87Ci0JCWlmICghY2hhaW5zKQotCQkJcmV0dXJuIC1FTk9EQVRBOwotCi0JCWNvdW50ID0gcGNjYXJkX2V4dHJhY3RfY2lzKHMsIGJ1Ziwgb2ZmLCBjb3VudCk7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwotCWludCBlcnJvcjsKLQotCWlmIChvZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvdW50ID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZXJyb3IgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLCBjb3VudCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gLUVJTzsKLQotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JaWYgKChzLT5jYWxsYmFjaykgJiYgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCi0JICAgICEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpIHsKLQkJCXMtPmNhbGxiYWNrLT5yZXF1ZXJ5KHMsIDEpOwotCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNjYXJkX3NvY2tldF9hdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX2NhcmRfdHlwZS5hdHRyLAogCSZkZXZfYXR0cl9jYXJkX3ZvbHRhZ2UuYXR0ciwKQEAgLTM2MiwyOCArMjI0LDEyIEBACiAJLmF0dHJzID0gcGNjYXJkX3NvY2tldF9hdHRyaWJ1dGVzLAogfTsKIAotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHBjY2FyZF9jaXNfYXR0ciA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiY2lzIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaXplID0gMHgyMDAsCi0JLnJlYWQgPSBwY2NhcmRfc2hvd19jaXMsCi0JLndyaXRlID0gcGNjYXJkX3N0b3JlX2NpcywKLX07Ci0KIGludCBwY2NhcmRfc3lzZnNfYWRkX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7Ci0JaWYgKCFyZXQpIHsKLQkJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZkZXYtPmtvYmosICZwY2NhcmRfY2lzX2F0dHIpOwotCQlpZiAocmV0KQotCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7CiB9CiAKIHZvaWQgcGNjYXJkX3N5c2ZzX3JlbW92ZV9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwMDlkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIFBDTUNJQSBzb2NrZXQgY29kZSBmb3IgdGhlIE15Q2FibGUgWFhTMTUwMCBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCisjZGVmaW5lIE1FTV9NQVBfU0laRQkweDQwMDAwMAorI2RlZmluZSBJT19NQVBfU0laRQkweDEwMDAKKworCisvKgorICogMy4zViBjYXJkcyBvbmx5OyBhbGwgaW50ZXJmYWNpbmcgaXMgZG9uZSB2aWEgZ3Bpb3M6CisgKgorICogMC8xOiAgY2FyZGRldGVjdCAoMDAgPSBjYXJkIHByZXNlbnQsIHh4ID0gaHVoKQorICogNDoJIGNhcmQgaXJxCisgKiAyMDQ6ICByZXNldCAoaGlnaC1hY3QpCisgKiAyMDU6ICBidWZmZXIgZW5hYmxlIChsb3ctYWN0KQorICogMjA4LzIwOTogY2FyZCB2b2x0YWdlIGtleSAoMDAsMDEsMTAsMTEpCisgKiAyMTA6ICBiYXR0d2FybgorICogMjExOiAgYmF0ZGVhZAorICogMjE0OiAgcG93ZXIgKGxvdy1hY3QpCisgKi8KKyNkZWZpbmUgR1BJT19DREEJMAorI2RlZmluZSBHUElPX0NEQgkxCisjZGVmaW5lIEdQSU9fQ0FSRElSUQk0CisjZGVmaW5lIEdQSU9fUkVTRVQJMjA0CisjZGVmaW5lIEdQSU9fT1VURU4JMjA1CisjZGVmaW5lIEdQSU9fVlNMCTIwOAorI2RlZmluZSBHUElPX1ZTSAkyMDkKKyNkZWZpbmUgR1BJT19CQVRUREVBRAkyMTAKKyNkZWZpbmUgR1BJT19CQVRUV0FSTgkyMTEKKyNkZWZpbmUgR1BJT19QT1dFUgkyMTQKKworc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKwl2b2lkCQkqdmlydF9pbzsKKworCXBoeXNfYWRkcl90CXBoeXNfaW87CisJcGh5c19hZGRyX3QJcGh5c19hdHRyOworCXBoeXNfYWRkcl90CXBoeXNfbWVtOworCisJLyogcHJldmlvdXMgZmxhZ3MgZm9yIHNldF9zb2NrZXQoKSAqLworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7Cit9OworCisjZGVmaW5lIHRvX3h4c19zb2NrZXQoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrLCBzb2NrZXQpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjZGlycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfREVURUNUKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9jb25maWd1cmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKworCS8qIHBvd2VyIGNvbnRyb2wgKi8KKwlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwljYXNlIDA6CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9XRVIsIDEpOwkvKiBwb3dlciBvZmYgKi8KKwkJYnJlYWs7CisJY2FzZSAzMzoKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1dFUiwgMCk7CS8qIHBvd2VyIG9uICovCisJCWJyZWFrOworCWNhc2UgNTA6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hhbmdlZCA9IHN0YXRlLT5mbGFncyBeIHNvY2stPm9sZF9mbGFnczsKKworCWlmIChjaGFuZ2VkICYgU1NfUkVTRVQpIHsKKwkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7CisJCQlncGlvX3NldF92YWx1ZShHUElPX1JFU0VULCAxKTsJLyogYXNzZXJ0IHJlc2V0ICovCisJCQlncGlvX3NldF92YWx1ZShHUElPX09VVEVOLCAxKTsJLyogYnVmZmVycyBvZmYgKi8KKwkJfSBlbHNlIHsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUkVTRVQsIDApOwkvKiBkZWFzc2VydCByZXNldCAqLworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19PVVRFTiwgMCk7CS8qIGJ1ZmZlcnMgb24gKi8KKwkJCW1zbGVlcCg1MDApOworCQl9CisJfQorCisJc29jay0+b2xkX2ZsYWdzID0gc3RhdGUtPmZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0gMDsKKworCS8qIGNoZWNrIGNhcmRkZXRlY3RzOiBHUElPWzA6MV0gbXVzdCBib3RoIGJlIGxvdyAqLworCWlmICghZ3Bpb19nZXRfdmFsdWUoR1BJT19DREEpICYmICFncGlvX2dldF92YWx1ZShHUElPX0NEQikpCisJCXN0YXR1cyB8PSBTU19ERVRFQ1Q7CisKKwkvKiBkZXRlcm1pbmUgY2FyZCB2b2x0YWdlOiBHUElPWzIwODoyMDldIGJpbmFyeSB2YWx1ZSAqLworCWkgPSAoISFncGlvX2dldF92YWx1ZShHUElPX1ZTTCkpIHwgKCghIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fVlNIKSkgPDwgMSk7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJc3RhdHVzIHw9IFNTXzNWQ0FSRDsJLyogM1YgY2FyZCAqLworCQlicmVhazsKKwljYXNlIDM6CQkJCS8qIDVWIGNhcmQsIHVuc3VwcG9ydGVkICovCisJZGVmYXVsdDoKKwkJc3RhdHVzIHw9IFNTX1hWQ0FSRDsJLyogdHJlYXRlZCBhcyB1bnN1cHBvcnRlZCBpbiBjb3JlICovCisJfQorCisJLyogR1BJTzIxNDogbG93IGFjdGl2ZSBwb3dlciBzd2l0Y2ggKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1dFUikgPyAwIDogU1NfUE9XRVJPTjsKKworCS8qIEdQSU8yMDQ6IGhpZ2gtYWN0aXZlIHJlc2V0IGxpbmUgKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19SRVNFVCkgPyBTU19SRVNFVCA6IFNTX1JFQURZOworCisJLyogb3RoZXIgc3R1ZmYgKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19CQVRUREVBRCkgPyAwIDogU1NfQkFUREVBRDsKKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19CQVRUV0FSTikgPyAwIDogU1NfQkFUV0FSTjsKKworCSp2YWx1ZSA9IHN0YXR1czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NvY2tfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fQ0RBKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0NEQik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19WU0wpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fVlNIKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0JBVFRERUFEKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0JBVFRXQVJOKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19SRVNFVCwgMSk7CS8qIGFzc2VydCByZXNldCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX09VVEVOLCAxKTsJLyogZGlzYWJsZSBidWZmZXJzICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9XRVIsIDEpOwkvKiBwb3dlciBvZmYgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NvY2tfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X2lvX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gdG9feHhzX3NvY2tldChza3QpOworCisJbWFwLT5zdGFydCA9ICh1MzIpc29jay0+dmlydF9pbzsKKwltYXAtPnN0b3AgPSBtYXAtPnN0YXJ0ICsgSU9fTUFQX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX2F0dHIgKyBtYXAtPmNhcmRfc3RhcnQ7CisJZWxzZQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfbWVtICsgbWFwLT5jYXJkX3N0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgeHhzMTUwMF9wY21jaWFfb3BlcmF0aW9ucyA9IHsKKwkuaW5pdAkJCT0geHhzMTUwMF9wY21jaWFfc29ja19pbml0LAorCS5zdXNwZW5kCQk9IHh4czE1MDBfcGNtY2lhX3NvY2tfc3VzcGVuZCwKKwkuZ2V0X3N0YXR1cwkJPSB4eHMxNTAwX3BjbWNpYV9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IHh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZSwKKwkuc2V0X2lvX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4eHMxNTAwX3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0LCBpcnE7CisKKwlzb2NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gLUVOT0RFVjsKKworCS8qIDM2Yml0IFBDTUNJQSBBdHRyaWJ1dGUgYXJlYSBhZGRyZXNzICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtYXR0ciIpOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtYXR0cicgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2F0dHIgPSByLT5zdGFydDsKKworCS8qIDM2Yml0IFBDTUNJQSBNZW1vcnkgYXJlYSBhZGRyZXNzICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtbWVtIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1tZW0nIHJlc291cmNlIVxuIik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19tZW0gPSByLT5zdGFydDsKKworCS8qIDM2Yml0IFBDTUNJQSBJTyBhcmVhIGFkZHJlc3MgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtaW8nIHJlc291cmNlIVxuIik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19pbyA9IHItPnN0YXJ0OworCisKKwkvKgorCSAqIFBDTUNJQSBjbGllbnQgZHJpdmVycyB1c2UgdGhlIGluYi9vdXRiIG1hY3JvcyB0byBhY2Nlc3MKKwkgKiB0aGUgSU8gcmVnaXN0ZXJzLiAgU2luY2UgbWlwc19pb19wb3J0X2Jhc2UgaXMgYWRkZWQKKwkgKiB0byB0aGUgYWNjZXNzIGFkZHJlc3Mgb2YgdGhlIG1pcHMgaW1wbGVtZW50YXRpb24gb2YKKwkgKiBpbmIvb3V0Yiwgd2UgbmVlZCB0byBzdWJ0cmFjdCBpdCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorCSAqIHRvIGFjY2VzcyB0aGUgSS9PIG9yIE1FTSBhZGRyZXNzIGRpcmVjdGx5LCB3aXRob3V0CisJICogZ29pbmcgdGhyb3VnaCB0aGlzICJtaXBzX2lvX3BvcnRfYmFzZSIgbWVjaGFuaXNtLgorCSAqLworCXNvY2stPnZpcnRfaW8gPSAodm9pZCAqKShpb3JlbWFwKHNvY2stPnBoeXNfaW8sIElPX01BUF9TSVpFKSAtCisJCQkJIG1pcHNfaW9fcG9ydF9iYXNlKTsKKworCWlmICghc29jay0+dmlydF9pbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSU8gYXJlYVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwlzb2NrLT5zb2NrZXQub3BzCT0gJnh4czE1MDBfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+c29ja2V0Lm93bmVyCT0gVEhJU19NT0RVTEU7CisJc29jay0+c29ja2V0LnBjaV9pcnEJPSBncGlvX3RvX2lycShHUElPX0NBUkRJUlEpOworCXNvY2stPnNvY2tldC5mZWF0dXJlcwk9IFNTX0NBUF9TVEFUSUNfTUFQIHwgU1NfQ0FQX1BDQ0FSRDsKKwlzb2NrLT5zb2NrZXQubWFwX3NpemUJPSBNRU1fTUFQX1NJWkU7CisJc29jay0+c29ja2V0LmlvX29mZnNldAk9ICh1bnNpZ25lZCBsb25nKXNvY2stPnZpcnRfaW87CisJc29jay0+c29ja2V0LmRldi5wYXJlbnQJPSAmcGRldi0+ZGV2OworCXNvY2stPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzb2NrKTsKKworCS8qIHNldHVwIGNhcmRkZXRlY3QgaXJxOiB1c2Ugb25lIG9mIHRoZSAyIEdQSU9zIGFzIGFuCisJICogZWRnZSBkZXRlY3Rvci4KKwkgKi8KKwlpcnEgPSBncGlvX3RvX2lycShHUElPX0NEQSk7CisJc2V0X2lycV90eXBlKGlycSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGNkaXJxLCAwLCAicGNtY2lhX2NhcmRkZXRlY3QiLCBzb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzZXR1cCBjZCBpcnFcbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlclxuIik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJNeUNhYmxlIFhYUzE1MDAgUENNQ0lBIHNvY2tldCBzZXJ2aWNlc1xuIik7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX0NEQSksIHNvY2spOworb3V0MToKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CitvdXQwOgorCWtmcmVlKHNvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHh4czE1MDBfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19DREEpLCBzb2NrKTsKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CisJa2ZyZWUoc29jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHhzMTUwMF9wY21jaWFfc29ja2V0X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ4eHMxNTAwX3BjbWNpYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHh4czE1MDBfcGNtY2lhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoeHhzMTUwMF9wY21jaWFfcmVtb3ZlKSwKK307CisKK2ludCBfX2luaXQgeHhzMTUwMF9wY21jaWFfc29ja2V0X2xvYWQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKwordm9pZCAgX19leGl0IHh4czE1MDBfcGNtY2lhX3NvY2tldF91bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeHhzMTUwMF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHh4czE1MDBfcGNtY2lhX3NvY2tldF9sb2FkKTsKK21vZHVsZV9leGl0KHh4czE1MDBfcGNtY2lhX3NvY2tldF91bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBTb2NrZXQgU2VydmljZXMgZm9yIE15Q2FibGUgWFhTMTUwMCBzeXN0ZW1zIik7CitNT0RVTEVfQVVUSE9SKCJNYW51ZWwgTGF1c3MiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggZTRkMTJhYy4uOTY3Yzc2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTM3LDYgKzM3LDExIEBACiBtb2R1bGVfcGFyYW0ocHdyX2lycXNfb2ZmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocHdyX2lycXNfb2ZmLCAiRm9yY2UgSVJRcyBvZmYgZHVyaW5nIHBvd2VyLW9uIG9mIHNsb3QuIFVzZSBvbmx5IHdoZW4gc2VlaW5nIElSUSBzdG9ybXMhIik7CiAKK3N0YXRpYyBjaGFyIG8yX3NwZWVkdXBbXSA9ICJkZWZhdWx0IjsKK21vZHVsZV9wYXJhbV9zdHJpbmcobzJfc3BlZWR1cCwgbzJfc3BlZWR1cCwgc2l6ZW9mKG8yX3NwZWVkdXApLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobzJfc3BlZWR1cCwgIlVzZSBwcmVmZXRjaC9idXJzdCBmb3IgTzItYnJpZGdlczogJ29uJywgJ29mZicgIgorCSJvciAnZGVmYXVsdCcgKHVzZXMgcmVjb21tZW5kZWQgYmVoYXZpb3VyIGZvciB0aGUgZGV0ZWN0ZWQgYnJpZGdlKSIpOworCiAjZGVmaW5lIGRlYnVnKHgsIHMsIGFyZ3MuLi4pIGRldl9kYmcoJnMtPmRldi0+ZGV2LCB4LCAjI2FyZ3MpCiAKIC8qIERvbid0IGFzay4uICovCkBAIC02NDksOSArNjU0LDEwIEBACiBzdGF0aWMgaW50IHllbnRhX3NlYXJjaF9yZXMoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCSAgICB1MzIgbWluKQogeworCXN0cnVjdCByZXNvdXJjZSAqcm9vdDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyb290ID0gc29ja2V0LT5kZXYtPmJ1cy0+cmVzb3VyY2VbaV07CisKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKHNvY2tldC0+ZGV2LT5idXMsIHJvb3QsIGkpIHsKIAkJaWYgKCFyb290KQogCQkJY29udGludWU7CiAKQEAgLTE0MDIsMTAgKzE0MDgsMTAgQEAKIAlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJXzc1MTAsIFRJMTJYWCksCiAJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV83NjEwLCBUSTEyWFgpLAogCi0JQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcxMCwgVEkxMlhYKSwKLQlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzEyLCBUSTEyWFgpLAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MjAsIFRJMTJYWCksCi0JQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcyMiwgVEkxMlhYKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzEwLCBFTkUpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MTIsIEVORSksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcyMCwgRU5FKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzIyLCBFTkUpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xMjExLCBFTkUpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xMjI1LCBFTkUpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xNDEwLCBFTkUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZjUyNmU3My4uY2QyZWU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC01OSw2ICs1OSw4IEBACiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIElOUFVUCisJZGVwZW5kcyBvbiBSRktJTEwgfHwgUkZLSUxMID0gbgorCXNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgbmV3IExpbnV4IGRyaXZlciBmb3IgQXN1cyBsYXB0b3BzLiBJdCBtYXkgYWxzbyBzdXBwb3J0IHNvbWUKIAkgIE1FRElPTiwgSlZDIG9yIFZJQ1RPUiBsYXB0b3BzLiBJdCBtYWtlcyBhbGwgdGhlIGV4dHJhIGJ1dHRvbnMgZ2VuZXJhdGUKQEAgLTc5LDYgKzgxLDcgQEAKIAlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIFJGS0lMTCB8fCBSRktJTEwgPSBuCiAJZGVwZW5kcyBvbiBQT1dFUl9TVVBQTFkKKwlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgcmZraWxsIGFuZCBiYWNrbGlnaHQgY29udHJvbCB0byBEZWxsCkBAIC0xNzYsNiArMTc5LDcgQEAKIAl0cmlzdGF0ZSAiQ29tcGFsIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVwZW5kcyBvbiBSRktJTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBsYXB0b3BzIGJ1aWx0IGJ5IENvbXBhbDoKIApAQCAtMzE5LDkgKzMyMywxNSBAQAogCSAgc2VydmVyIHJ1bm5pbmcsIHBoYXNlIG9mIHRoZSBtb29uLCBhbmQgdGhlIGN1cnJlbnQgbW9vZCBvZgogCSAgU2Nocm9lZGluZ2VyJ3MgY2F0LiAgSWYgeW91IGNhbiB1c2UgWC5vcmcncyBSYW5kUiB0byBjb250cm9sCiAJICB5b3VyIFRoaW5rUGFkJ3MgdmlkZW8gb3V0cHV0IHBvcnRzIGluc3RlYWQgb2YgdGhpcyBmZWF0dXJlLAotCSAgZG9uJ3QgdGhpbmsgdHdpY2U6IGRvIGl0IGFuZCBzYXkgTiBoZXJlIHRvIHNhdmUgc29tZSBtZW1vcnkuCisJICBkb24ndCB0aGluayB0d2ljZTogZG8gaXQgYW5kIHNheSBOIGhlcmUgdG8gc2F2ZSBtZW1vcnkgYW5kIGF2b2lkCisJICBiYWQgaW50ZXJhY3Rpb25zIHdpdGggWC5vcmcuCiAKLQkgIElmIHlvdSBhcmUgbm90IHN1cmUsIHNheSBZIGhlcmUuCisJICBOT1RFOiBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlIGlzIGxpbWl0ZWQgdG8gcHJvY2Vzc2VzIHdpdGggdGhlCisJICBDQVBfU1lTX0FETUlOIGNhcGFiaWxpdHksIHRvIGF2b2lkIGxvY2FsIERvUyBpc3N1ZXMgaW4gcGxhdGZvcm1zCisJICB3aGVyZSBpdCBpbnRlcmFjdHMgYmFkbHkgd2l0aCBYLm9yZy4KKworCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkgaGVyZSBidXQgZG8gdHJ5IHRvIGNoZWNrIGlmIHlvdSBjb3VsZAorCSAgYmUgdXNpbmcgWC5vcmcgUmFuZFIgaW5zdGVhZC4KIAogY29uZmlnIFRISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAlib29sICJTdXBwb3J0IE5WUkFNIHBvbGxpbmcgZm9yIGhvdCBrZXlzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggNjFhMWM3NS4uNzkxZmNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC00NSw1OCArNDUsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9zcGFyc2Uta2V5bWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCi0jZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04gIjAuNDIiCisjZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04JIjAuNDIiCiAKLSNkZWZpbmUgQVNVU19IT1RLX05BTUUgICAgICAgICAgIkFzdXMgTGFwdG9wIFN1cHBvcnQiCi0jZGVmaW5lIEFTVVNfSE9US19DTEFTUyAgICAgICAgICJob3RrZXkiCi0jZGVmaW5lIEFTVVNfSE9US19ERVZJQ0VfTkFNRSAgICJIb3RrZXkiCi0jZGVmaW5lIEFTVVNfSE9US19GSUxFICAgICAgICAgIEtCVUlMRF9NT0ROQU1FCi0jZGVmaW5lIEFTVVNfSE9US19QUkVGSVggICAgICAgICJcXF9TQi5BVEtELiIKLQotCi0vKgotICogU29tZSBldmVudHMgd2UgdXNlLCBzYW1lIGZvciBhbGwgQXN1cwotICovCi0jZGVmaW5lIEFUS0RfQlJfVVAgICAgICAgMHgxMAotI2RlZmluZSBBVEtEX0JSX0RPV04gICAgIDB4MjAKLSNkZWZpbmUgQVRLRF9MQ0RfT04gICAgICAweDMzCi0jZGVmaW5lIEFUS0RfTENEX09GRiAgICAgMHgzNAotCi0vKgotICogS25vd24gYml0cyByZXR1cm5lZCBieSBcX1NCLkFUS0QuSFdSUwotICovCi0jZGVmaW5lIFdMX0hXUlMgICAgIDB4ODAKLSNkZWZpbmUgQlRfSFdSUyAgICAgMHgxMDAKLQotLyoKLSAqIEZsYWdzIGZvciBob3RrIHN0YXR1cwotICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCi0gKi8KLSNkZWZpbmUgV0xfT04gICAgICAgMHgwMQkvKiBpbnRlcm5hbCBXaWZpICovCi0jZGVmaW5lIEJUX09OICAgICAgIDB4MDIJLyogaW50ZXJuYWwgQmx1ZXRvb3RoICovCi0jZGVmaW5lIE1MRURfT04gICAgIDB4MDQJLyogbWFpbCBMRUQgKi8KLSNkZWZpbmUgVExFRF9PTiAgICAgMHgwOAkvKiB0b3VjaHBhZCBMRUQgKi8KLSNkZWZpbmUgUkxFRF9PTiAgICAgMHgxMAkvKiBSZWNvcmQgTEVEICovCi0jZGVmaW5lIFBMRURfT04gICAgIDB4MjAJLyogUGhvbmUgTEVEICovCi0jZGVmaW5lIEdMRURfT04gICAgIDB4NDAJLyogR2FtaW5nIExFRCAqLwotI2RlZmluZSBMQ0RfT04gICAgICAweDgwCS8qIExDRCBiYWNrbGlnaHQgKi8KLSNkZWZpbmUgR1BTX09OICAgICAgMHgxMDAJLyogR1BTICovCi0jZGVmaW5lIEtFWV9PTiAgICAgIDB4MjAwCS8qIEtleWJvYXJkIGJhY2tsaWdodCAqLwotCi0jZGVmaW5lIEFTVVNfTE9HICAgIEFTVVNfSE9US19GSUxFICI6ICIKLSNkZWZpbmUgQVNVU19FUlIgICAgS0VSTl9FUlIgICAgQVNVU19MT0cKLSNkZWZpbmUgQVNVU19XQVJOSU5HICAgIEtFUk5fV0FSTklORyAgICBBU1VTX0xPRwotI2RlZmluZSBBU1VTX05PVElDRSBLRVJOX05PVElDRSBBU1VTX0xPRwotI2RlZmluZSBBU1VTX0lORk8gICBLRVJOX0lORk8gICBBU1VTX0xPRwotI2RlZmluZSBBU1VTX0RFQlVHICBLRVJOX0RFQlVHICBBU1VTX0xPRworI2RlZmluZSBBU1VTX0xBUFRPUF9OQU1FCSJBc3VzIExhcHRvcCBTdXBwb3J0IgorI2RlZmluZSBBU1VTX0xBUFRPUF9DTEFTUwkiaG90a2V5IgorI2RlZmluZSBBU1VTX0xBUFRPUF9ERVZJQ0VfTkFNRQkiSG90a2V5IgorI2RlZmluZSBBU1VTX0xBUFRPUF9GSUxFCUtCVUlMRF9NT0ROQU1FCisjZGVmaW5lIEFTVVNfTEFQVE9QX1BSRUZJWAkiXFxfU0IuQVRLRC4iCiAKIE1PRFVMRV9BVVRIT1IoIkp1bGllbiBMZXJvdWdlLCBLYXJvbCBLb3ppbW9yLCBDb3JlbnRpbiBDaGFyeSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEFTVVNfSE9US19OQU1FKTsKK01PRFVMRV9ERVNDUklQVElPTihBU1VTX0xBUFRPUF9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKQEAgLTExMywyMjUgKzc4LDIwOSBAQAogbW9kdWxlX3BhcmFtKHdhcGYsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3YXBmLCAiV0FQRiB2YWx1ZSIpOwogCi0jZGVmaW5lIEFTVVNfSEFORExFKG9iamVjdCwgcGF0aHMuLi4pCQkJCQlcCi0Jc3RhdGljIGFjcGlfaGFuZGxlICBvYmplY3QjI19oYW5kbGUgPSBOVUxMOwkJCVwKLQlzdGF0aWMgY2hhciAqb2JqZWN0IyNfcGF0aHNbXSA9IHsgcGF0aHMgfQorc3RhdGljIHVpbnQgd2xhbl9zdGF0dXMgPSAxOworc3RhdGljIHVpbnQgYmx1ZXRvb3RoX3N0YXR1cyA9IDE7CisKK21vZHVsZV9wYXJhbSh3bGFuX3N0YXR1cywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fc3RhdHVzLCAiU2V0IHRoZSB3aXJlbGVzcyBzdGF0dXMgb24gYm9vdCAiCisJCSAiKDAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQsIC0xID0gZG9uJ3QgZG8gYW55dGhpbmcpLiAiCisJCSAiZGVmYXVsdCBpcyAxIik7CisKK21vZHVsZV9wYXJhbShibHVldG9vdGhfc3RhdHVzLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYmx1ZXRvb3RoX3N0YXR1cywgIlNldCB0aGUgd2lyZWxlc3Mgc3RhdHVzIG9uIGJvb3QgIgorCQkgIigwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkLCAtMSA9IGRvbid0IGRvIGFueXRoaW5nKS4gIgorCQkgImRlZmF1bHQgaXMgMSIpOworCisvKgorICogU29tZSBldmVudHMgd2UgdXNlLCBzYW1lIGZvciBhbGwgQXN1cworICovCisjZGVmaW5lIEFUS0RfQlJfVVAJMHgxMAkvKiAoZXZlbnQgJiB+QVRLRF9CUl9VUCkgPSBicmlnaHRuZXNzIGxldmVsICovCisjZGVmaW5lIEFUS0RfQlJfRE9XTgkweDIwCS8qIChldmVudCAmIH5BVEtEX0JSX0RPV04pID0gYnJpdGdobmVzcyBsZXZlbCAqLworI2RlZmluZSBBVEtEX0JSX01JTglBVEtEX0JSX1VQCisjZGVmaW5lIEFUS0RfQlJfTUFYCShBVEtEX0JSX0RPV04gfCAweEYpCS8qIDB4MmYgKi8KKyNkZWZpbmUgQVRLRF9MQ0RfT04JMHgzMworI2RlZmluZSBBVEtEX0xDRF9PRkYJMHgzNAorCisvKgorICogS25vd24gYml0cyByZXR1cm5lZCBieSBcX1NCLkFUS0QuSFdSUworICovCisjZGVmaW5lIFdMX0hXUlMJCTB4ODAKKyNkZWZpbmUgQlRfSFdSUwkJMHgxMDAKKworLyoKKyAqIEZsYWdzIGZvciBob3RrIHN0YXR1cworICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCisgKi8KKyNkZWZpbmUgV0xfUlNUUwkJMHgwMQkvKiBpbnRlcm5hbCBXaWZpICovCisjZGVmaW5lIEJUX1JTVFMJCTB4MDIJLyogaW50ZXJuYWwgQmx1ZXRvb3RoICovCiAKIC8qIExFRCAqLwotQVNVU19IQU5ETEUobWxlZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIk1MRUQiKTsKLUFTVVNfSEFORExFKHRsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJUTEVEIik7Ci1BU1VTX0hBTkRMRShybGVkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiUkxFRCIpOwkvKiBXMUpDICovCi1BU1VTX0hBTkRMRShwbGVkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiUExFRCIpOwkvKiBBN0ogKi8KLUFTVVNfSEFORExFKGdsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJHTEVEIik7CS8qIEcxLCBHMiAocHJvYmFibHkpICovCisjZGVmaW5lIE1FVEhPRF9NTEVECQkiTUxFRCIKKyNkZWZpbmUgTUVUSE9EX1RMRUQJCSJUTEVEIgorI2RlZmluZSBNRVRIT0RfUkxFRAkJIlJMRUQiCS8qIFcxSkMgKi8KKyNkZWZpbmUgTUVUSE9EX1BMRUQJCSJQTEVEIgkvKiBBN0ogKi8KKyNkZWZpbmUgTUVUSE9EX0dMRUQJCSJHTEVEIgkvKiBHMSwgRzIgKHByb2JhYmx5KSAqLwogCiAvKiBMRUREICovCi1BU1VTX0hBTkRMRShsZWRkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0xDTSIpOworI2RlZmluZSBNRVRIT0RfTEVERAkJIlNMQ00iCiAKIC8qCiAgKiBCbHVldG9vdGggYW5kIFdMQU4KICAqIFdMRUQgYW5kIEJMRUQgYXJlIG5vdCBoYW5kbGVkIGxpa2Ugb3RoZXIgWExFRCwgYmVjYXVzZSBpbiBzb21lIGRzZHQKICAqIHRoZXkgYWxzbyBjb250cm9sIHRoZSBXTEFOL0JsdWV0b290aCBkZXZpY2UuCiAgKi8KLUFTVVNfSEFORExFKHdsX3N3aXRjaCwgQVNVU19IT1RLX1BSRUZJWCAiV0xFRCIpOwotQVNVU19IQU5ETEUoYnRfc3dpdGNoLCBBU1VTX0hPVEtfUFJFRklYICJCTEVEIik7Ci1BU1VTX0hBTkRMRSh3aXJlbGVzc19zdGF0dXMsIEFTVVNfSE9US19QUkVGSVggIlJTVFMiKTsJLyogQWxsIG5ldyBtb2RlbHMgKi8KKyNkZWZpbmUgTUVUSE9EX1dMQU4JCSJXTEVEIgorI2RlZmluZSBNRVRIT0RfQkxVRVRPT1RICSJCTEVEIgorI2RlZmluZSBNRVRIT0RfV0xfU1RBVFVTCSJSU1RTIgogCiAvKiBCcmlnaHRuZXNzICovCi1BU1VTX0hBTkRMRShicmlnaHRuZXNzX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU1BMViIpOwotQVNVU19IQU5ETEUoYnJpZ2h0bmVzc19nZXQsIEFTVVNfSE9US19QUkVGSVggIkdQTFYiKTsKKyNkZWZpbmUgTUVUSE9EX0JSSUdIVE5FU1NfU0VUCSJTUExWIgorI2RlZmluZSBNRVRIT0RfQlJJR0hUTkVTU19HRVQJIkdQTFYiCiAKIC8qIEJhY2tsaWdodCAqLwotQVNVU19IQU5ETEUobGNkX3N3aXRjaCwgIlxcX1NCLlBDSTAuU0JSRy5FQzAuX1ExMCIsCS8qIEFsbCBuZXcgbW9kZWxzICovCi0JICAgICJcXF9TQi5QQ0kwLklTQS5FQzAuX1ExMCIsCS8qIEExeCAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLkVDRDAuX1ExMCIsCS8qIEwzQyAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLkVDMC5RMTAiLAkvKiBNMUEgKi8KLQkgICAgIlxcX1NCLlBDSTAuTFBDQi5FQzAuX1ExMCIsCS8qIFAzMCAqLwotCSAgICAiXFxfU0IuUENJMC5MUENCLkVDMC5fUTBFIiwgLyogUDMwL1AzNSAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLlExMCIsCS8qIFMxeCAqLwotCSAgICAiXFxRMTAiKTsJCS8qIEEyeCwgTDJELCBMM0QsIE0yRSAqLworc3RhdGljIGFjcGlfaGFuZGxlIGxjZF9zd2l0Y2hfaGFuZGxlOworc3RhdGljIGNvbnN0IGNoYXIgKmxjZF9zd2l0Y2hfcGF0aHNbXSA9IHsKKyAgIlxcX1NCLlBDSTAuU0JSRy5FQzAuX1ExMCIsCS8qIEFsbCBuZXcgbW9kZWxzICovCisgICJcXF9TQi5QQ0kwLklTQS5FQzAuX1ExMCIsCS8qIEExeCAqLworICAiXFxfU0IuUENJMC5QWDQwLkVDRDAuX1ExMCIsCS8qIEwzQyAqLworICAiXFxfU0IuUENJMC5QWDQwLkVDMC5RMTAiLAkvKiBNMUEgKi8KKyAgIlxcX1NCLlBDSTAuTFBDQi5FQzAuX1ExMCIsCS8qIFAzMCAqLworICAiXFxfU0IuUENJMC5MUENCLkVDMC5fUTBFIiwgLyogUDMwL1AzNSAqLworICAiXFxfU0IuUENJMC5QWDQwLlExMCIsCS8qIFMxeCAqLworICAiXFxRMTAifTsJCS8qIEEyeCwgTDJELCBMM0QsIE0yRSAqLwogCiAvKiBEaXNwbGF5ICovCi1BU1VTX0hBTkRMRShkaXNwbGF5X3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0RTUCIpOwotQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsCi0JICAgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KLQkgICAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCi0JICAgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAotCSAgICAvKiBBNlYgQTZRICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAotCSAgICAvKiBBNlQsIEE2TSAqLwotCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKLQkgICAgLyogTDNDICovCi0JICAgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKLQkgICAgLyogWjk2RiAqLwotCSAgICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCi0JICAgIC8qIEEyRCAqLwotCSAgICAiXFxBQ1REIiwKLQkgICAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KLQkgICAgIlxcQURWRyIsCi0JICAgIC8qIFAzMCAqLwotCSAgICAiXFxETlhUIiwKLQkgICAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLwotCSAgICAiXFxJTkZCIiwKLQkgICAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCi0JICAgICJcXFNTVEUiKTsKKyNkZWZpbmUgTUVUSE9EX1NXSVRDSF9ESVNQTEFZCSJTRFNQIgogCi1BU1VTX0hBTkRMRShsc19zd2l0Y2gsIEFTVVNfSE9US19QUkVGSVggIkFMU0MiKTsgLyogWjcxQSBaNzFWICovCi1BU1VTX0hBTkRMRShsc19sZXZlbCwgQVNVU19IT1RLX1BSRUZJWCAiQUxTTCIpOwkgLyogWjcxQSBaNzFWICovCitzdGF0aWMgYWNwaV9oYW5kbGUgZGlzcGxheV9nZXRfaGFuZGxlOworc3RhdGljIGNvbnN0IGNoYXIgKmRpc3BsYXlfZ2V0X3BhdGhzW10gPSB7CisgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KKyAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCisgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCisgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAorICAvKiBBNlYgQTZRICovCisgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAorICAvKiBBNlQsIEE2TSAqLworICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKKyAgLyogTDNDICovCisgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKKyAgLyogWjk2RiAqLworICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCisgIC8qIEEyRCAqLworICAiXFxBQ1REIiwKKyAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KKyAgIlxcQURWRyIsCisgIC8qIFAzMCAqLworICAiXFxETlhUIiwKKyAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLworICAiXFxJTkZCIiwKKyAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCisgICJcXFNTVEUifTsKKworI2RlZmluZSBNRVRIT0RfQUxTX0NPTlRST0wJIkFMU0MiIC8qIFo3MUEgWjcxViAqLworI2RlZmluZSBNRVRIT0RfQUxTX0xFVkVMCSJBTFNMIiAvKiBaNzFBIFo3MVYgKi8KIAogLyogR1BTICovCiAvKiBSMkggdXNlIGRpZmZlcmVudCBoYW5kbGUgZm9yIEdQUyBvbi9vZmYgKi8KLUFTVVNfSEFORExFKGdwc19vbiwgQVNVU19IT1RLX1BSRUZJWCAiU0RPTiIpOwkvKiBSMkggKi8KLUFTVVNfSEFORExFKGdwc19vZmYsIEFTVVNfSE9US19QUkVGSVggIlNET0YiKTsJLyogUjJIICovCi1BU1VTX0hBTkRMRShncHNfc3RhdHVzLCBBU1VTX0hPVEtfUFJFRklYICJHUFNUIik7CisjZGVmaW5lIE1FVEhPRF9HUFNfT04JCSJTRE9OIgorI2RlZmluZSBNRVRIT0RfR1BTX09GRgkJIlNET0YiCisjZGVmaW5lIE1FVEhPRF9HUFNfU1RBVFVTCSJHUFNUIgogCiAvKiBLZXlib2FyZCBsaWdodCAqLwotQVNVU19IQU5ETEUoa2xlZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIlNMS0IiKTsKLUFTVVNfSEFORExFKGtsZWRfZ2V0LCBBU1VTX0hPVEtfUFJFRklYICJHTEtCIik7CisjZGVmaW5lIE1FVEhPRF9LQkRfTElHSFRfU0VUCSJTTEtCIgorI2RlZmluZSBNRVRIT0RfS0JEX0xJR0hUX0dFVAkiR0xLQiIKKworLyoKKyAqIERlZmluZSBhIHNwZWNpZmljIGxlZCBzdHJ1Y3R1cmUgdG8ga2VlcCB0aGUgbWFpbiBzdHJ1Y3R1cmUgY2xlYW4KKyAqLworc3RydWN0IGFzdXNfbGVkIHsKKwlpbnQgd2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzOworCWNvbnN0IGNoYXIgKm1ldGhvZDsKK307CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYWluIHN0cnVjdHVyZSwgd2UgY2FuIHVzZSBpdCB0byBzdG9yZSBhbnl0aGluZyBpbnRlcmVzdGluZwogICogYWJvdXQgdGhlIGhvdGsgZGV2aWNlCiAgKi8KLXN0cnVjdCBhc3VzX2hvdGsgeworc3RydWN0IGFzdXNfbGFwdG9wIHsKIAljaGFyICpuYW1lOwkJLyogbGFwdG9wIG5hbWUgKi8KLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsJLyogdGhlIGRldmljZSB3ZSBhcmUgaW4gKi8KKworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqZHNkdF9pbmZvOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsJCS8qIHRoZSBkZXZpY2Ugd2UgYXJlIGluICovCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2U7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXltYXA7CisKKwlzdHJ1Y3QgYXN1c19sZWQgbWxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgdGxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgcmxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgcGxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgZ2xlZDsKKwlzdHJ1Y3QgYXN1c19sZWQga2xlZDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkX3dvcmtxdWV1ZTsKKworCWludCB3aXJlbGVzc19zdGF0dXM7CisJYm9vbCBoYXZlX3JzdHM7CisJaW50IGxjZF9zdGF0ZTsKKworCXN0cnVjdCByZmtpbGwgKmdwc19yZmtpbGw7CisKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CS8qIHRoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlICovCi0JY2hhciBzdGF0dXM7CQkvKiBzdGF0dXMgb2YgdGhlIGhvdGssIGZvciBMRURzLCAuLi4gKi8KIAl1MzIgbGVkZF9zdGF0dXM7CS8qIHN0YXR1cyBvZiB0aGUgTEVEIGRpc3BsYXkgKi8KIAl1OCBsaWdodF9sZXZlbDsJCS8qIGxpZ2h0IHNlbnNvciBsZXZlbCAqLwogCXU4IGxpZ2h0X3N3aXRjaDsJLyogbGlnaHQgc2Vuc29yIHN3aXRjaCB2YWx1ZSAqLwogCXUxNiBldmVudF9jb3VudFsxMjhdOwkvKiBjb3VudCBmb3IgZWFjaCBldmVudCBUT0RPIG1ha2UgdGhpcyBiZXR0ZXIgKi8KLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKIAl1MTYgKmtleWNvZGVfbWFwOwogfTsKIAotLyoKLSAqIFRoaXMgaGVhZGVyIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFsbG93IHByb3BlciBjb25maWd1cmF0aW9uIGdpdmVuIG1vZGVsLAotICogcmV2aXNpb24gbnVtYmVyICwgLi4uIHRoaXMgaW5mbyBjYW5ub3QgZ28gaW4gc3RydWN0IGFzdXNfaG90ayBiZWNhdXNlIGl0IGlzCi0gKiBhdmFpbGFibGUgYmVmb3JlIHRoZSBob3RrCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmFzdXNfaW5mbzsKLQotLyogVGhlIGFjdHVhbCBkZXZpY2UgdGhlIGRyaXZlciBiaW5kcyB0byAqLwotc3RhdGljIHN0cnVjdCBhc3VzX2hvdGsgKmhvdGs7Ci0KLS8qCi0gKiBUaGUgaG90a2V5IGRyaXZlciBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGFzdXNfZGV2aWNlX2lkc1tdID0gewotCXsiQVRLMDEwMCIsIDB9LAotCXsiQVRLMDEwMSIsIDB9LAotCXsiIiwgMH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBhc3VzX2RldmljZV9pZHMpOwotCi1zdGF0aWMgaW50IGFzdXNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBhc3VzX2hvdGtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwotCi1zdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFzdXNfaG90a19kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBU1VTX0hPVEtfTkFNRSwKLQkuY2xhc3MgPSBBU1VTX0hPVEtfQ0xBU1MsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmlkcyA9IGFzdXNfZGV2aWNlX2lkcywKLQkuZmxhZ3MgPSBBQ1BJX0RSSVZFUl9BTExfTk9USUZZX0VWRU5UUywKLQkub3BzID0gewotCQkuYWRkID0gYXN1c19ob3RrX2FkZCwKLQkJLnJlbW92ZSA9IGFzdXNfaG90a19yZW1vdmUsCi0JCS5ub3RpZnkgPSBhc3VzX2hvdGtfbm90aWZ5LAotCQl9LAotfTsKLQotLyogVGhlIGJhY2tsaWdodCBkZXZpY2UgL3N5cy9jbGFzcy9iYWNrbGlnaHQgKi8KLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYXN1c19iYWNrbGlnaHRfZGV2aWNlOwotCi0vKgotICogVGhlIGJhY2tsaWdodCBjbGFzcyBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpOwotc3RhdGljIGludCB1cGRhdGVfYmxfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKLQkuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0dXMgPSB1cGRhdGVfYmxfc3RhdHVzLAotfTsKLQotLyoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSB1cGRhdGUgdGhlIExFRCdzLCBhbmQgYXJlIGNhbGxlZCBmcm9tIGEKLSAqIHdvcmtxdWV1ZS4gQnkgZG9pbmcgdGhpcyBhcyBzZXBhcmF0ZSB3b3JrIHJhdGhlciB0aGFuIHdoZW4gdGhlIExFRAotICogc3Vic3lzdGVtIGFza3MsIHdlIGF2b2lkIG1lc3Npbmcgd2l0aCB0aGUgQXN1cyBBQ1BJIHN0dWZmIGR1cmluZyBhCi0gKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KLSAqLwotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRfd29ya3F1ZXVlOwotCi0jZGVmaW5lIEFTVVNfTEVEKG9iamVjdCwgbGVkbmFtZSwgbWF4KQkJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCVwKLQkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpOwlcCi0Jc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mgb2JqZWN0IyNfbGVkX2dldCgJCQlcCi0JCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKTsJXAotCXN0YXRpYyBpbnQgb2JqZWN0IyNfbGVkX3drOwkJCQkJXAotCXN0YXRpYyBERUNMQVJFX1dPUksob2JqZWN0IyNfbGVkX3dvcmssIG9iamVjdCMjX2xlZF91cGRhdGUpOwlcCi0Jc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgb2JqZWN0IyNfbGVkID0gewkJCVwKLQkJLm5hbWUgICAgICAgICAgID0gImFzdXM6OiIgbGVkbmFtZSwJCQlcCi0JCS5icmlnaHRuZXNzX3NldCA9IG9iamVjdCMjX2xlZF9zZXQsCQkJXAotCQkuYnJpZ2h0bmVzc19nZXQgPSBvYmplY3QjI19sZWRfZ2V0LAkJCVwKLQkJLm1heF9icmlnaHRuZXNzID0gbWF4CQkJCQlcCi0JfQotCi1BU1VTX0xFRChtbGVkLCAibWFpbCIsIDEpOwotQVNVU19MRUQodGxlZCwgInRvdWNocGFkIiwgMSk7Ci1BU1VTX0xFRChybGVkLCAicmVjb3JkIiwgMSk7Ci1BU1VTX0xFRChwbGVkLCAicGhvbmUiLCAxKTsKLUFTVVNfTEVEKGdsZWQsICJnYW1pbmciLCAxKTsKLUFTVVNfTEVEKGtsZWQsICJrYmRfYmFja2xpZ2h0IiwgMyk7Ci0KLXN0cnVjdCBrZXlfZW50cnkgewotCWNoYXIgdHlwZTsKLQl1OCBjb2RlOwotCXUxNiBrZXljb2RlOwotfTsKLQotZW51bSB7IEtFX0tFWSwgS0VfRU5EIH07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGFzdXNfa2V5bWFwW10gPSB7Ci0Je0tFX0tFWSwgMHgwMiwgS0VZX1NDUkVFTkxPQ0t9LAotCXtLRV9LRVksIDB4MDUsIEtFWV9XTEFOfSwKLQl7S0VfS0VZLCAweDA4LCBLRVlfRjEzfSwKLQl7S0VfS0VZLCAweDE3LCBLRVlfWk9PTX0sCi0Je0tFX0tFWSwgMHgxZiwgS0VZX0JBVFRFUll9LAotCXtLRV9LRVksIDB4MzAsIEtFWV9WT0xVTUVVUH0sCi0Je0tFX0tFWSwgMHgzMSwgS0VZX1ZPTFVNRURPV059LAotCXtLRV9LRVksIDB4MzIsIEtFWV9NVVRFfSwKLQl7S0VfS0VZLCAweDMzLCBLRVlfU1dJVENIVklERU9NT0RFfSwKLQl7S0VfS0VZLCAweDM0LCBLRVlfU1dJVENIVklERU9NT0RFfSwKLQl7S0VfS0VZLCAweDQwLCBLRVlfUFJFVklPVVNTT05HfSwKLQl7S0VfS0VZLCAweDQxLCBLRVlfTkVYVFNPTkd9LAotCXtLRV9LRVksIDB4NDMsIEtFWV9TVE9QQ0R9LAotCXtLRV9LRVksIDB4NDUsIEtFWV9QTEFZUEFVU0V9LAotCXtLRV9LRVksIDB4NGMsIEtFWV9NRURJQX0sCi0Je0tFX0tFWSwgMHg1MCwgS0VZX0VNQUlMfSwKLQl7S0VfS0VZLCAweDUxLCBLRVlfV1dXfSwKLQl7S0VfS0VZLCAweDU1LCBLRVlfQ0FMQ30sCi0Je0tFX0tFWSwgMHg1QywgS0VZX1NDUkVFTkxPQ0t9LCAgLyogU2NyZWVubG9jayAqLwotCXtLRV9LRVksIDB4NUQsIEtFWV9XTEFOfSwKLQl7S0VfS0VZLCAweDVFLCBLRVlfV0xBTn0sCi0Je0tFX0tFWSwgMHg1RiwgS0VZX1dMQU59LAotCXtLRV9LRVksIDB4NjAsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjEsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjIsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjMsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NkIsIEtFWV9GMTN9LCAvKiBMb2NrIFRvdWNocGFkICovCi0Je0tFX0tFWSwgMHg4MiwgS0VZX0NBTUVSQX0sCi0Je0tFX0tFWSwgMHg4OCwgS0VZX1dMQU4gfSwKLQl7S0VfS0VZLCAweDhBLCBLRVlfUFJPRzF9LAotCXtLRV9LRVksIDB4OTUsIEtFWV9NRURJQX0sCi0Je0tFX0tFWSwgMHg5OSwgS0VZX1BIT05FfSwKLQl7S0VfS0VZLCAweGM0LCBLRVlfS0JESUxMVU1VUH0sCi0Je0tFX0tFWSwgMHhjNSwgS0VZX0tCRElMTFVNRE9XTn0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9lbnRyeSBhc3VzX2tleW1hcFtdID0geworCS8qIExlbm92byBTTCBTcGVjaWZpYyBrZXljb2RlcyAqLworCXtLRV9LRVksIDB4MDIsIHsgS0VZX1NDUkVFTkxPQ0sgfSB9LAorCXtLRV9LRVksIDB4MDUsIHsgS0VZX1dMQU4gfSB9LAorCXtLRV9LRVksIDB4MDgsIHsgS0VZX0YxMyB9IH0sCisJe0tFX0tFWSwgMHgxNywgeyBLRVlfWk9PTSB9IH0sCisJe0tFX0tFWSwgMHgxZiwgeyBLRVlfQkFUVEVSWSB9IH0sCisJLyogRW5kIG9mIExlbm92byBTTCBTcGVjaWZpYyBrZXljb2RlcyAqLworCXtLRV9LRVksIDB4MzAsIHsgS0VZX1ZPTFVNRVVQIH0gfSwKKwl7S0VfS0VZLCAweDMxLCB7IEtFWV9WT0xVTUVET1dOIH0gfSwKKwl7S0VfS0VZLCAweDMyLCB7IEtFWV9NVVRFIH0gfSwKKwl7S0VfS0VZLCAweDMzLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4MzQsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCisJe0tFX0tFWSwgMHg0MCwgeyBLRVlfUFJFVklPVVNTT05HIH0gfSwKKwl7S0VfS0VZLCAweDQxLCB7IEtFWV9ORVhUU09ORyB9IH0sCisJe0tFX0tFWSwgMHg0MywgeyBLRVlfU1RPUENEIH0gfSwKKwl7S0VfS0VZLCAweDQ1LCB7IEtFWV9QTEFZUEFVU0UgfSB9LAorCXtLRV9LRVksIDB4NGMsIHsgS0VZX01FRElBIH0gfSwKKwl7S0VfS0VZLCAweDUwLCB7IEtFWV9FTUFJTCB9IH0sCisJe0tFX0tFWSwgMHg1MSwgeyBLRVlfV1dXIH0gfSwKKwl7S0VfS0VZLCAweDU1LCB7IEtFWV9DQUxDIH0gfSwKKwl7S0VfS0VZLCAweDVDLCB7IEtFWV9TQ1JFRU5MT0NLIH0gfSwgIC8qIFNjcmVlbmxvY2sgKi8KKwl7S0VfS0VZLCAweDVELCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDVFLCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDVGLCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDYwLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4NjEsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCisJe0tFX0tFWSwgMHg2MiwgeyBLRVlfU1dJVENIVklERU9NT0RFIH0gfSwKKwl7S0VfS0VZLCAweDYzLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4NkIsIHsgS0VZX0YxMyB9IH0sIC8qIExvY2sgVG91Y2hwYWQgKi8KKwl7S0VfS0VZLCAweDdFLCB7IEtFWV9CTFVFVE9PVEggfSB9LAorCXtLRV9LRVksIDB4N0QsIHsgS0VZX0JMVUVUT09USCB9IH0sCisJe0tFX0tFWSwgMHg4MiwgeyBLRVlfQ0FNRVJBIH0gfSwKKwl7S0VfS0VZLCAweDg4LCB7IEtFWV9XTEFOICB9IH0sCisJe0tFX0tFWSwgMHg4QSwgeyBLRVlfUFJPRzEgfSB9LAorCXtLRV9LRVksIDB4OTUsIHsgS0VZX01FRElBIH0gfSwKKwl7S0VfS0VZLCAweDk5LCB7IEtFWV9QSE9ORSB9IH0sCisJe0tFX0tFWSwgMHhjNCwgeyBLRVlfS0JESUxMVU1VUCB9IH0sCisJe0tFX0tFWSwgMHhjNSwgeyBLRVlfS0JESUxMVU1ET1dOIH0gfSwKIAl7S0VfRU5ELCAwfSwKIH07CiAKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIGFuIEFDUEkgbWV0aG9kLCBnaXZlbiBhbiBpbnQgYXMgcGFyYW1ldGVyLCB0aGUKICAqIG1ldGhvZCBpcyBzZWFyY2hlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBoYW5kbGUsIGNhbiBiZSBOVUxMLiBUaGUgb3V0cHV0CkBAIC0zMzksOCArMjg4LDggQEAKICAqCiAgKiByZXR1cm5zIDAgaWYgd3JpdGUgaXMgc3VjY2Vzc2Z1bCwgLTEgZWxzZS4KICAqLwotc3RhdGljIGludCB3cml0ZV9hY3BpX2ludChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKLQkJCSAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQpCitzdGF0aWMgaW50IHdyaXRlX2FjcGlfaW50X3JldChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKKwkJCSAgICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqb3V0cHV0KQogewogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLyogbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXJzIChhbiBpbnQpICovCiAJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvKiB0aGUgb25seSBwYXJhbSB3ZSB1c2UgKi8KQEAgLTM2MSwxMDIgKzMxMCw4MiBAQAogCQlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF93aXJlbGVzc19zdGF0dXMoaW50IG1hc2spCitzdGF0aWMgaW50IHdyaXRlX2FjcGlfaW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciAqbWV0aG9kLCBpbnQgdmFsKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7Ci0JYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKLQotCWlmICghd2lyZWxlc3Nfc3RhdHVzX2hhbmRsZSkKLQkJcmV0dXJuIChob3RrLT5zdGF0dXMgJiBtYXNrKSA/IDEgOiAwOwotCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIod2lyZWxlc3Nfc3RhdHVzX2hhbmRsZSwgTlVMTCwgTlVMTCwgJnN0YXR1cyk7Ci0JaWYgKEFDUElfRkFJTFVSRShydikpCi0JCXByX3dhcm5pbmcoIkVycm9yIHJlYWRpbmcgV2lyZWxlc3Mgc3RhdHVzXG4iKTsKLQllbHNlCi0JCXJldHVybiAoc3RhdHVzICYgbWFzaykgPyAxIDogMDsKLQotCXJldHVybiAoaG90ay0+c3RhdHVzICYgbWFzaykgPyAxIDogMDsKKwlyZXR1cm4gd3JpdGVfYWNwaV9pbnRfcmV0KGhhbmRsZSwgbWV0aG9kLCB2YWwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZ3BzX3N0YXR1cyh2b2lkKQorc3RhdGljIGludCBhY3BpX2NoZWNrX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwKKwkJCSAgICAgYWNwaV9oYW5kbGUgKnJldCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdHVzOwotCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZ3BzX3N0YXR1c19oYW5kbGUsIE5VTEwsIE5VTEwsICZzdGF0dXMpOwotCWlmIChBQ1BJX0ZBSUxVUkUocnYpKQotCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIEdQUyBzdGF0dXNcbiIpOwotCWVsc2UKLQkJcmV0dXJuIHN0YXR1cyA/IDEgOiAwOworCWlmIChtZXRob2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIEdQU19PTikgPyAxIDogMDsKLX0KKwlpZiAocmV0KQorCQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAoY2hhciAqKW1ldGhvZCwKKwkJCQkJIHJldCk7CisJZWxzZSB7CisJCWFjcGlfaGFuZGxlIGR1bW15OwogCi0vKiBHZW5lcmljIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVhZF9zdGF0dXMoaW50IG1hc2spCi17Ci0JLyogVGhlcmUgaXMgYSBzcGVjaWFsIG1ldGhvZCBmb3IgYm90aCB3aXJlbGVzcyBkZXZpY2VzICovCi0JaWYgKG1hc2sgPT0gQlRfT04gfHwgbWFzayA9PSBXTF9PTikKLQkJcmV0dXJuIHJlYWRfd2lyZWxlc3Nfc3RhdHVzKG1hc2spOwotCWVsc2UgaWYgKG1hc2sgPT0gR1BTX09OKQotCQlyZXR1cm4gcmVhZF9ncHNfc3RhdHVzKCk7Ci0KLQlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIG1hc2spID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX3N0YXR1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBvdXQsIGludCBtYXNrKQotewotCWhvdGstPnN0YXR1cyA9IChvdXQpID8gKGhvdGstPnN0YXR1cyB8IG1hc2spIDogKGhvdGstPnN0YXR1cyAmIH5tYXNrKTsKLQotCXN3aXRjaCAobWFzaykgewotCWNhc2UgTUxFRF9PTjoKLQkJb3V0ID0gIShvdXQgJiAweDEpOwotCQlicmVhazsKLQljYXNlIEdMRURfT046Ci0JCW91dCA9IChvdXQgJiAweDEpICsgMTsKLQkJYnJlYWs7Ci0JY2FzZSBHUFNfT046Ci0JCWhhbmRsZSA9IChvdXQpID8gZ3BzX29uX2hhbmRsZSA6IGdwc19vZmZfaGFuZGxlOwotCQlvdXQgPSAweDAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlvdXQgJj0gMHgxOwotCQlicmVhazsKKwkJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgKGNoYXIgKiltZXRob2QsCisJCQkJCSAmZHVtbXkpOwogCX0KIAotCWlmICh3cml0ZV9hY3BpX2ludChoYW5kbGUsIE5VTEwsIG91dCwgTlVMTCkpCi0JCXByX3dhcm5pbmcoIiB3cml0ZSBmYWlsZWQgJXhcbiIsIG1hc2spOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm5pbmcoIkVycm9yIGZpbmRpbmcgJXNcbiIsIG1ldGhvZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKIH0KIAotLyogL3N5cy9jbGFzcy9sZWQgaGFuZGxlcnMgKi8KLSNkZWZpbmUgQVNVU19MRURfSEFORExFUihvYmplY3QsIG1hc2spCQkJCQlcCi0Jc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwJXAotCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkJCVwKLQl7CQkJCQkJCQlcCi0JCW9iamVjdCMjX2xlZF93ayA9ICh2YWx1ZSA+IDApID8gMSA6IDA7CQkJXAotCQlxdWV1ZV93b3JrKGxlZF93b3JrcXVldWUsICZvYmplY3QjI19sZWRfd29yayk7CQlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQlcCi0JewkJCQkJCQkJXAotCQlpbnQgdmFsdWUgPSBvYmplY3QjI19sZWRfd2s7CQkJCVwKLQkJd3JpdGVfc3RhdHVzKG9iamVjdCMjX3NldF9oYW5kbGUsIHZhbHVlLCAobWFzaykpOwlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIG9iamVjdCMjX2xlZF9nZXQoCQkJXAotCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikJCQkJXAotCXsJCQkJCQkJCVwKLQkJcmV0dXJuIGxlZF9jZGV2LT5icmlnaHRuZXNzOwkJCQlcCi0JfQorLyogR2VuZXJpYyBMRUQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgYXN1c19sZWRfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgY29uc3QgY2hhciAqbWV0aG9kLAorCQkJIGludCB2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcChtZXRob2QsIE1FVEhPRF9NTEVEKSkKKwkJdmFsdWUgPSAhdmFsdWU7CisJZWxzZSBpZiAoIXN0cmNtcChtZXRob2QsIE1FVEhPRF9HTEVEKSkKKwkJdmFsdWUgPSAhdmFsdWUgKyAxOworCWVsc2UKKwkJdmFsdWUgPSAhIXZhbHVlOwogCi1BU1VTX0xFRF9IQU5ETEVSKG1sZWQsIE1MRURfT04pOwotQVNVU19MRURfSEFORExFUihwbGVkLCBQTEVEX09OKTsKLUFTVVNfTEVEX0hBTkRMRVIocmxlZCwgUkxFRF9PTik7Ci1BU1VTX0xFRF9IQU5ETEVSKHRsZWQsIFRMRURfT04pOwotQVNVU19MRURfSEFORExFUihnbGVkLCBHTEVEX09OKTsKKwlyZXR1cm4gd3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBtZXRob2QsIHZhbHVlKTsKK30KIAogLyoKLSAqIEtleWJvYXJkIGJhY2tsaWdodAorICogTEVEcwogICovCi1zdGF0aWMgaW50IGdldF9rbGVkX2x2bCh2b2lkKQorLyogL3N5cy9jbGFzcy9sZWQgaGFuZGxlcnMgKi8KK3N0YXRpYyB2b2lkIGFzdXNfbGVkX2NkZXZfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IGFzdXNfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhc3VzX2xlZCwgbGVkKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBsZWQtPmFzdXM7CisKKwlsZWQtPndrID0gISF2YWx1ZTsKKwlxdWV1ZV93b3JrKGFzdXMtPmxlZF93b3JrcXVldWUsICZsZWQtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBhc3VzX2xlZF9jZGV2X3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFzdXNfbGVkICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzdXNfbGVkLCB3b3JrKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBsZWQtPmFzdXM7CisKKwlhc3VzX2xlZF9zZXQoYXN1cywgbGVkLT5tZXRob2QsIGxlZC0+d2spOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBhc3VzX2xlZF9jZGV2X2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gbGVkX2NkZXYtPmJyaWdodG5lc3M7Cit9CisKKy8qCisgKiBLZXlib2FyZCBiYWNrbGlnaHQgKGFsc28gYSBMRUQpCisgKi8KK3N0YXRpYyBpbnQgYXN1c19rbGVkX2x2bChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIGtibHY7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwpAQCAtNDY4LDc1ICszOTcsMTgzIEBACiAJaW5fb2JqLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlpbl9vYmouaW50ZWdlci52YWx1ZSA9IDI7CiAKLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihrbGVkX2dldF9oYW5kbGUsIE5VTEwsICZwYXJhbXMsICZrYmx2KTsKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsIE1FVEhPRF9LQkRfTElHSFRfR0VULAorCQkJCSAgICZwYXJhbXMsICZrYmx2KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHJ2KSkgewogCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIGtsZWQgbGV2ZWxcbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiBrYmx2OwogfQogCi1zdGF0aWMgaW50IHNldF9rbGVkX2x2bChpbnQga2JsdikKK3N0YXRpYyBpbnQgYXN1c19rbGVkX3NldChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBrYmx2KQogewogCWlmIChrYmx2ID4gMCkKIAkJa2JsdiA9ICgxIDw8IDcpIHwgKGtibHYgJiAweDdGKTsKIAllbHNlCiAJCWtibHYgPSAwOwogCi0JaWYgKHdyaXRlX2FjcGlfaW50KGtsZWRfc2V0X2hhbmRsZSwgTlVMTCwga2JsdiwgTlVMTCkpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfS0JEX0xJR0hUX1NFVCwga2JsdikpIHsKIAkJcHJfd2FybmluZygiS2V5Ym9hcmQgTEVEIGRpc3BsYXkgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrbGVkX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3N0YXRpYyB2b2lkIGFzdXNfa2xlZF9jZGV2X3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCiB7Ci0Ja2xlZF9sZWRfd2sgPSB2YWx1ZTsKLQlxdWV1ZV93b3JrKGxlZF93b3JrcXVldWUsICZrbGVkX2xlZF93b3JrKTsKKwlzdHJ1Y3QgYXN1c19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFzdXNfbGVkLCBsZWQpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGxlZC0+YXN1czsKKworCWxlZC0+d2sgPSB2YWx1ZTsKKwlxdWV1ZV93b3JrKGFzdXMtPmxlZF93b3JrcXVldWUsICZsZWQtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBrbGVkX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQorc3RhdGljIHZvaWQgYXN1c19rbGVkX2NkZXZfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzZXRfa2xlZF9sdmwoa2xlZF9sZWRfd2spOworCXN0cnVjdCBhc3VzX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhc3VzX2xlZCwgd29yayk7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gbGVkLT5hc3VzOworCisJYXN1c19rbGVkX3NldChhc3VzLCBsZWQtPndrKTsKIH0KIAotc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mga2xlZF9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQorc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgYXN1c19rbGVkX2NkZXZfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewotCXJldHVybiBnZXRfa2xlZF9sdmwoKTsKKwlzdHJ1Y3QgYXN1c19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFzdXNfbGVkLCBsZWQpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGxlZC0+YXN1czsKKworCXJldHVybiBhc3VzX2tsZWRfbHZsKGFzdXMpOwogfQogCi1zdGF0aWMgaW50IGdldF9sY2Rfc3RhdGUodm9pZCkKK3N0YXRpYyB2b2lkIGFzdXNfbGVkX2V4aXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCXJldHVybiByZWFkX3N0YXR1cyhMQ0RfT04pOworCWlmIChhc3VzLT5tbGVkLmxlZC5kZXYpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhc3VzLT5tbGVkLmxlZCk7CisJaWYgKGFzdXMtPnRsZWQubGVkLmRldikKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFzdXMtPnRsZWQubGVkKTsKKwlpZiAoYXN1cy0+cGxlZC5sZWQuZGV2KQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYXN1cy0+cGxlZC5sZWQpOworCWlmIChhc3VzLT5ybGVkLmxlZC5kZXYpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhc3VzLT5ybGVkLmxlZCk7CisJaWYgKGFzdXMtPmdsZWQubGVkLmRldikKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFzdXMtPmdsZWQubGVkKTsKKwlpZiAoYXN1cy0+a2xlZC5sZWQuZGV2KQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYXN1cy0+a2xlZC5sZWQpOworCWlmIChhc3VzLT5sZWRfd29ya3F1ZXVlKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGFzdXMtPmxlZF93b3JrcXVldWUpOworCQlhc3VzLT5sZWRfd29ya3F1ZXVlID0gTlVMTDsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2xjZF9zdGF0ZShpbnQgdmFsdWUpCisvKiAgVWdseSBtYWNybywgbmVlZCB0byBmaXggdGhhdCBsYXRlciAqLworc3RhdGljIGludCBhc3VzX2xlZF9yZWdpc3RlcihzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsCisJCQkgICAgIHN0cnVjdCBhc3VzX2xlZCAqbGVkLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptZXRob2QpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSAmbGVkLT5sZWQ7CisKKwlpZiAoIW1ldGhvZCB8fCBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIG1ldGhvZCwgTlVMTCkpCisJCXJldHVybiAwOyAvKiBMZWQgbm90IHByZXNlbnQgKi8KKworCWxlZC0+YXN1cyA9IGFzdXM7CisJbGVkLT5tZXRob2QgPSBtZXRob2Q7CisKKwlJTklUX1dPUksoJmxlZC0+d29yaywgYXN1c19sZWRfY2Rldl91cGRhdGUpOworCWxlZF9jZGV2LT5uYW1lID0gbmFtZTsKKwlsZWRfY2Rldi0+YnJpZ2h0bmVzc19zZXQgPSBhc3VzX2xlZF9jZGV2X3NldDsKKwlsZWRfY2Rldi0+YnJpZ2h0bmVzc19nZXQgPSBhc3VzX2xlZF9jZGV2X2dldDsKKwlsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MgPSAxOworCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBsZWRfY2Rldik7Cit9CisKK3N0YXRpYyBpbnQgYXN1c19sZWRfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJaW50IHI7CisKKwkvKgorCSAqIEZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgTEVEJ3MgYXJlIGNhbGxlZCBmcm9tIGEKKwkgKiB3b3JrcXVldWUuIEJ5IGRvaW5nIHRoaXMgYXMgc2VwYXJhdGUgd29yayByYXRoZXIgdGhhbiB3aGVuIHRoZSBMRUQKKwkgKiBzdWJzeXN0ZW0gYXNrcywgd2UgYXZvaWQgbWVzc2luZyB3aXRoIHRoZSBBc3VzIEFDUEkgc3R1ZmYgZHVyaW5nIGEKKwkgKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KKwkgKi8KKwlhc3VzLT5sZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKKwlpZiAoIWFzdXMtPmxlZF93b3JrcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5tbGVkLCAiYXN1czo6bWFpbCIsIE1FVEhPRF9NTEVEKTsKKwlpZiAocikKKwkJZ290byBlcnJvcjsKKwlyID0gYXN1c19sZWRfcmVnaXN0ZXIoYXN1cywgJmFzdXMtPnRsZWQsICJhc3VzOjp0b3VjaHBhZCIsIE1FVEhPRF9UTEVEKTsKKwlpZiAocikKKwkJZ290byBlcnJvcjsKKwlyID0gYXN1c19sZWRfcmVnaXN0ZXIoYXN1cywgJmFzdXMtPnJsZWQsICJhc3VzOjpyZWNvcmQiLCBNRVRIT0RfUkxFRCk7CisJaWYgKHIpCisJCWdvdG8gZXJyb3I7CisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5wbGVkLCAiYXN1czo6cGhvbmUiLCBNRVRIT0RfUExFRCk7CisJaWYgKHIpCisJCWdvdG8gZXJyb3I7CisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5nbGVkLCAiYXN1czo6Z2FtaW5nIiwgTUVUSE9EX0dMRUQpOworCWlmIChyKQorCQlnb3RvIGVycm9yOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfS0JEX0xJR0hUX1NFVCwgTlVMTCkgJiYKKwkgICAgIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0tCRF9MSUdIVF9HRVQsIE5VTEwpKSB7CisJCXN0cnVjdCBhc3VzX2xlZCAqbGVkID0gJmFzdXMtPmtsZWQ7CisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYgPSAmbGVkLT5sZWQ7CisKKwkJbGVkLT5hc3VzID0gYXN1czsKKworCQlJTklUX1dPUksoJmxlZC0+d29yaywgYXN1c19rbGVkX2NkZXZfdXBkYXRlKTsKKwkJY2Rldi0+bmFtZSA9ICJhc3VzOjprYmRfYmFja2xpZ2h0IjsKKwkJY2Rldi0+YnJpZ2h0bmVzc19zZXQgPSBhc3VzX2tsZWRfY2Rldl9zZXQ7CisJCWNkZXYtPmJyaWdodG5lc3NfZ2V0ID0gYXN1c19rbGVkX2NkZXZfZ2V0OworCQljZGV2LT5tYXhfYnJpZ2h0bmVzcyA9IDM7CisJCXIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBjZGV2KTsKKwl9CitlcnJvcjoKKwlpZiAocikKKwkJYXN1c19sZWRfZXhpdChhc3VzKTsKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIEJhY2tsaWdodCBkZXZpY2UKKyAqLworc3RhdGljIGludCBhc3VzX2xjZF9zdGF0dXMoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXJldHVybiBhc3VzLT5sY2Rfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgYXN1c19sY2Rfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewogCWludCBsY2QgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAKLQlsY2QgPSB2YWx1ZSA/IDEgOiAwOworCWxjZCA9ICEhdmFsdWU7CiAKLQlpZiAobGNkID09IGdldF9sY2Rfc3RhdGUoKSkKKwlpZiAobGNkID09IGFzdXNfbGNkX3N0YXR1cyhhc3VzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobGNkX3N3aXRjaF9oYW5kbGUpIHsKLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QobGNkX3N3aXRjaF9oYW5kbGUsCi0JCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmICghbGNkX3N3aXRjaF9oYW5kbGUpCisJCXJldHVybiAtRU5PREVWOwogCi0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXByX3dhcm5pbmcoIkVycm9yIHN3aXRjaGluZyBMQ0RcbiIpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGxjZF9zd2l0Y2hfaGFuZGxlLAorCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByX3dhcm5pbmcoIkVycm9yIHN3aXRjaGluZyBMQ0RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl3cml0ZV9zdGF0dXMoTlVMTCwgbGNkLCBMQ0RfT04pOworCWFzdXMtPmxjZF9zdGF0ZSA9IGxjZDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbGNkX2JsYW5rKGludCBibGFuaykKK3N0YXRpYyB2b2lkIGxjZF9ibGFuayhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBibGFuaykKIHsKLQlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBhc3VzX2JhY2tsaWdodF9kZXZpY2U7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gYXN1cy0+YmFja2xpZ2h0X2RldmljZTsKKworCWFzdXMtPmxjZF9zdGF0ZSA9IChibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKTsKIAogCWlmIChiZCkgewogCQliZC0+cHJvcHMucG93ZXIgPSBibGFuazsKQEAgLTU0NCw0NCArNTgxLDkxIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCitzdGF0aWMgaW50IGFzdXNfcmVhZF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwogCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CiAKLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihicmlnaHRuZXNzX2dldF9oYW5kbGUsIE5VTEwsIE5VTEwsICZ2YWx1ZSk7CisJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19HRVQsCisJCQkJICAgTlVMTCwgJnZhbHVlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHJ2KSkKIAkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBicmlnaHRuZXNzXG4iKTsKIAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgYXN1c19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCB2YWx1ZSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAKLQl2YWx1ZSA9ICgwIDwgdmFsdWUpID8gKCgxNSA8IHZhbHVlKSA/IDE1IDogdmFsdWUpIDogMDsKLQkvKiAwIDw9IHZhbHVlIDw9IDE1ICovCi0KLQlpZiAod3JpdGVfYWNwaV9pbnQoYnJpZ2h0bmVzc19zZXRfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19TRVQsIHZhbHVlKSkgewogCQlwcl93YXJuaW5nKCJFcnJvciBjaGFuZ2luZyBicmlnaHRuZXNzXG4iKTsKLQkJcmV0ID0gLUVJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfYmxfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAJaW50IHJ2OwogCWludCB2YWx1ZSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCi0JcnYgPSBzZXRfYnJpZ2h0bmVzcyhiZCwgdmFsdWUpOworCXJ2ID0gYXN1c19zZXRfYnJpZ2h0bmVzcyhiZCwgdmFsdWUpOwogCWlmIChydikKIAkJcmV0dXJuIHJ2OwogCiAJdmFsdWUgPSAoYmQtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspID8gMSA6IDA7Ci0JcmV0dXJuIHNldF9sY2Rfc3RhdGUodmFsdWUpOworCXJldHVybiBhc3VzX2xjZF9zZXQoYXN1cywgdmFsdWUpOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBhc3VzX3JlYWRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCit9OworCitzdGF0aWMgaW50IGFzdXNfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gYXN1cy0+YmFja2xpZ2h0X2RldmljZTsKKwlpbnQgb2xkID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisKKwliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGJkLCBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CisKKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW50IGFzdXNfYmFja2xpZ2h0X2luaXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXY7CisKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0JSSUdIVE5FU1NfR0VULCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19TRVQsIE5VTEwpICYmCisJICAgIGxjZF9zd2l0Y2hfaGFuZGxlKSB7CisJCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihBU1VTX0xBUFRPUF9GSUxFLCBkZXYsCisJCQkJCSAgICAgICBhc3VzLCAmYXN1c2JsX29wcyk7CisJCWlmIChJU19FUlIoYmQpKSB7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCByZWdpc3RlciBhc3VzIGJhY2tsaWdodCBkZXZpY2VcbiIpOworCQkJYXN1cy0+YmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJCQlyZXR1cm4gUFRSX0VSUihiZCk7CisJCX0KKworCQlhc3VzLT5iYWNrbGlnaHRfZGV2aWNlID0gYmQ7CisKKwkJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7CisJCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYXN1c19yZWFkX2JyaWdodG5lc3MoYmQpOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhc3VzX2JhY2tsaWdodF9leGl0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlpZiAoYXN1cy0+YmFja2xpZ2h0X2RldmljZSkKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGFzdXMtPmJhY2tsaWdodF9kZXZpY2UpOworCWFzdXMtPmJhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogfQogCiAvKgpAQCAtNTk2LDI1ICs2ODAsMjYgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfaW5mb3Moc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKIAljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIAogCS8qCi0JICogV2UgdXNlIHRoZSBlYXN5IHdheSwgd2UgZG9uJ3QgY2FyZSBvZiBvZmYgYW5kIGNvdW50LCBzbyB3ZSBkb24ndCBzZXQgZW9mCi0JICogdG8gMQorCSAqIFdlIHVzZSB0aGUgZWFzeSB3YXksIHdlIGRvbid0IGNhcmUgb2Ygb2ZmIGFuZCBjb3VudCwKKwkgKiBzbyB3ZSBkb24ndCBzZXQgZW9mIHRvIDEKIAkgKi8KIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsIEFTVVNfSE9US19OQU1FICIgIiBBU1VTX0xBUFRPUF9WRVJTSU9OICJcbiIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbCByZWZlcmVuY2UgICAgOiAlc1xuIiwgaG90ay0+bmFtZSk7CisJbGVuICs9IHNwcmludGYocGFnZSwgQVNVU19MQVBUT1BfTkFNRSAiICIgQVNVU19MQVBUT1BfVkVSU0lPTiAiXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsIGFzdXMtPm5hbWUpOwogCS8qCiAJICogVGhlIFNGVU4gbWV0aG9kIHByb2JhYmx5IGFsbG93cyB0aGUgb3JpZ2luYWwgZHJpdmVyIHRvIGdldCB0aGUgbGlzdAogCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwCiAJICogYml0IHNpZ25pZmllcyB0aGF0IHRoZSBsYXB0b3AgaXMgZXF1aXBwZWQgd2l0aCBhIFdpLUZpIE1pbmlQQ0kgY2FyZC4KIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICovCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiU0ZVTiIsIE5VTEwsICZ0ZW1wKTsKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsICJTRlVOIiwgTlVMTCwgJnRlbXApOwogCWlmICghQUNQSV9GQUlMVVJFKHJ2KSkKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNGVU4gdmFsdWUgICAgICAgICA6ICUjeFxuIiwKIAkJCSAgICAgICAodWludCkgdGVtcCk7CkBAIC02MjQsNyArNzA5LDcgQEAKIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICogSWYgd2UgZG9uJ3QgZmluZCB0aGUgbWV0aG9kLCB3ZSBhc3N1bWUgdGhlIGRldmljZSBhcmUgcHJlc2VudC4KIAkgKi8KLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihob3RrLT5oYW5kbGUsICJIUldTIiwgTlVMTCwgJnRlbXApOworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiSFJXUyB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKQEAgLTYzNSwyNiArNzIwLDI2IEBACiAJICogTm90ZTogc2luY2Ugbm90IGFsbCB0aGUgbGFwdG9wcyBwcm92aWRlIHRoaXMgbWV0aG9kLCBlcnJvcnMgYXJlCiAJICogc2lsZW50bHkgaWdub3JlZC4KIAkgKi8KLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihob3RrLT5oYW5kbGUsICJBU1lNIiwgTlVMTCwgJnRlbXApOworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkFTWU0iLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKLQlpZiAoYXN1c19pbmZvKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKKwlpZiAoYXN1cy0+ZHNkdF9pbmZvKSB7CisJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXMtPmRzZHRfaW5mby0+bGVuZ3RoKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgbGVuZ3RoICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPmNoZWNrc3VtKTsKKwkJc25wcmludGYoYnVmLCAxNiwgIiVkIiwgYXN1cy0+ZHNkdF9pbmZvLT5jaGVja3N1bSk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJEU0RUIGNoZWNrc3VtICAgICAgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiVkIiwgYXN1c19pbmZvLT5yZXZpc2lvbik7CisJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXMtPmRzZHRfaW5mby0+cmV2aXNpb24pOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNEVCByZXZpc2lvbiAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgNywgIiVzIiwgYXN1c19pbmZvLT5vZW1faWQpOworCQlzbnByaW50ZihidWYsIDcsICIlcyIsIGFzdXMtPmRzZHRfaW5mby0+b2VtX2lkKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSBpZCAgICAgICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDksICIlcyIsIGFzdXNfaW5mby0+b2VtX3RhYmxlX2lkKTsKKwkJc25wcmludGYoYnVmLCA5LCAiJXMiLCBhc3VzLT5kc2R0X2luZm8tPm9lbV90YWJsZV9pZCk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gdGFibGUgaWQgICAgICAgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiV4IiwgYXN1c19pbmZvLT5vZW1fcmV2aXNpb24pOworCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzLT5kc2R0X2luZm8tPm9lbV9yZXZpc2lvbik7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gcmV2aXNpb24gICAgICAgOiAweCVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDUsICIlcyIsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKKwkJc25wcmludGYoYnVmLCA1LCAiJXMiLCBhc3VzLT5kc2R0X2luZm8tPmFzbF9jb21waWxlcl9pZCk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCB2ZW5kb3IgaWQgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiV4IiwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfcmV2aXNpb24pOworCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzLT5kc2R0X2luZm8tPmFzbF9jb21waWxlcl9yZXZpc2lvbik7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCByZXZpc2lvbiAgOiAweCVzXG4iLCBidWYpOwogCX0KIApAQCAtNjcyLDggKzc1Nyw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9zdGF0dXMoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgICAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgbWFzaykKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2FjcGlfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgICAgY29uc3QgY2hhciAqbWV0aG9kKQogewogCWludCBydiwgdmFsdWU7CiAJaW50IG91dCA9IDA7CkBAIC02ODIsOCArNzY4LDggQEAKIAlpZiAocnYgPiAwKQogCQlvdXQgPSB2YWx1ZSA/IDEgOiAwOwogCi0Jd3JpdGVfc3RhdHVzKGhhbmRsZSwgb3V0LCBtYXNrKTsKLQorCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIG1ldGhvZCwgdmFsdWUpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTY5Myw2NyArNzc5LDExNiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19sZWRkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgaG90ay0+bGVkZF9zdGF0dXMpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCBhc3VzLT5sZWRkX3N0YXR1cyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2xlZGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJ2LCB2YWx1ZTsKIAogCXJ2ID0gcGFyc2VfYXJnKGJ1ZiwgY291bnQsICZ2YWx1ZSk7CiAJaWYgKHJ2ID4gMCkgewotCQlpZiAod3JpdGVfYWNwaV9pbnQobGVkZF9zZXRfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9MRURELCB2YWx1ZSkpCiAJCQlwcl93YXJuaW5nKCJMRUQgZGlzcGxheSB3cml0ZSBmYWlsZWRcbiIpOwogCQllbHNlCi0JCQlob3RrLT5sZWRkX3N0YXR1cyA9ICh1MzIpIHZhbHVlOworCQkJYXN1cy0+bGVkZF9zdGF0dXMgPSAodTMyKSB2YWx1ZTsKIAl9CiAJcmV0dXJuIHJ2OwogfQogCiAvKgorICogV2lyZWxlc3MKKyAqLworc3RhdGljIGludCBhc3VzX3dpcmVsZXNzX3N0YXR1cyhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKKworCWlmICghYXN1cy0+aGF2ZV9yc3RzKQorCQlyZXR1cm4gKGFzdXMtPndpcmVsZXNzX3N0YXR1cyAmIG1hc2spID8gMSA6IDA7CisKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsIE1FVEhPRF9XTF9TVEFUVVMsCisJCQkJICAgTlVMTCwgJnN0YXR1cyk7CisJaWYgKEFDUElfRkFJTFVSRShydikpIHsKKwkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBXaXJlbGVzcyBzdGF0dXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuICEhKHN0YXR1cyAmIG1hc2spOworfQorCisvKgogICogV0xBTgogICovCitzdGF0aWMgaW50IGFzdXNfd2xhbl9zZXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9XTEFOLCAhIXN0YXR1cykpIHsKKwkJcHJfd2FybmluZygiRXJyb3Igc2V0dGluZyB3bGFuIHN0YXR1cyB0byAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd193bGFuKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByZWFkX3N0YXR1cyhXTF9PTikpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXNfd2lyZWxlc3Nfc3RhdHVzKGFzdXMsIFdMX1JTVFMpKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfd2xhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gc3RvcmVfc3RhdHVzKGJ1ZiwgY291bnQsIHdsX3N3aXRjaF9oYW5kbGUsIFdMX09OKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzeXNmc19hY3BpX3NldChhc3VzLCBidWYsIGNvdW50LCBNRVRIT0RfV0xBTik7CiB9CiAKIC8qCiAgKiBCbHVldG9vdGgKICAqLworc3RhdGljIGludCBhc3VzX2JsdWV0b290aF9zZXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9CTFVFVE9PVEgsICEhc3RhdHVzKSkgeworCQlwcl93YXJuaW5nKCJFcnJvciBzZXR0aW5nIGJsdWV0b290aCBzdGF0dXMgdG8gJWQiLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfYmx1ZXRvb3RoKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfc3RhdHVzKEJUX09OKSk7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYXN1c193aXJlbGVzc19zdGF0dXMoYXN1cywgQlRfUlNUUykpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBzdG9yZV9zdGF0dXMoYnVmLCBjb3VudCwgYnRfc3dpdGNoX2hhbmRsZSwgQlRfT04pOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHN5c2ZzX2FjcGlfc2V0KGFzdXMsIGJ1ZiwgY291bnQsIE1FVEhPRF9CTFVFVE9PVEgpOwogfQogCiAvKgogICogRGlzcGxheQogICovCi1zdGF0aWMgdm9pZCBzZXRfZGlzcGxheShpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhc3VzX3NldF9kaXNwbGF5KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewogCS8qIG5vIHNhbml0eSBjaGVjayBuZWVkZWQgZm9yIG5vdyAqLwotCWlmICh3cml0ZV9hY3BpX2ludChkaXNwbGF5X3NldF9oYW5kbGUsIE5VTEwsIHZhbHVlLCBOVUxMKSkKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfU1dJVENIX0RJU1BMQVksIHZhbHVlKSkKIAkJcHJfd2FybmluZygiRXJyb3Igc2V0dGluZyBkaXNwbGF5XG4iKTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9kaXNwbGF5KHZvaWQpCitzdGF0aWMgaW50IHJlYWRfZGlzcGxheShzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gMDsKIAlhY3BpX3N0YXR1cyBydiA9IEFFX09LOwpAQCAtNzY5LDcgKzkwNCw3IEBACiAJCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIGRpc3BsYXkgc3RhdHVzXG4iKTsKIAl9CiAKLQl2YWx1ZSAmPSAweDBGOwkJLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCisJdmFsdWUgJj0gMHgwRjsgLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCiAKIAlyZXR1cm4gdmFsdWU7CiB9CkBAIC03ODEsNyArOTE2LDExIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2Rpc3Aoc3RydWN0IGRldmljZSAqZGV2LAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfZGlzcGxheSgpKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghZGlzcGxheV9nZXRfaGFuZGxlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVhZF9kaXNwbGF5KGFzdXMpKTsKIH0KIAogLyoKQEAgLTc5NCw2NSArOTMzLDcyIEBACiBzdGF0aWMgc3NpemVfdCBzdG9yZV9kaXNwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApCi0JCXNldF9kaXNwbGF5KHZhbHVlKTsKKwkJYXN1c19zZXRfZGlzcGxheShhc3VzLCB2YWx1ZSk7CiAJcmV0dXJuIHJ2OwogfQogCiAvKgogICogTGlnaHQgU2VucwogICovCi1zdGF0aWMgdm9pZCBzZXRfbGlnaHRfc2Vuc19zd2l0Y2goaW50IHZhbHVlKQorc3RhdGljIHZvaWQgYXN1c19hbHNfc3dpdGNoKHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewotCWlmICh3cml0ZV9hY3BpX2ludChsc19zd2l0Y2hfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19DT05UUk9MLCB2YWx1ZSkpCiAJCXByX3dhcm5pbmcoIkVycm9yIHNldHRpbmcgbGlnaHQgc2Vuc29yIHN3aXRjaFxuIik7Ci0JaG90ay0+bGlnaHRfc3dpdGNoID0gdmFsdWU7CisJYXN1cy0+bGlnaHRfc3dpdGNoID0gdmFsdWU7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbHNzdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaG90ay0+bGlnaHRfc3dpdGNoKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBhc3VzLT5saWdodF9zd2l0Y2gpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9sc3N3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApCi0JCXNldF9saWdodF9zZW5zX3N3aXRjaCh2YWx1ZSA/IDEgOiAwKTsKKwkJYXN1c19hbHNfc3dpdGNoKGFzdXMsIHZhbHVlID8gMSA6IDApOwogCiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfbGlnaHRfc2Vuc19sZXZlbChpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhc3VzX2Fsc19sZXZlbChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCB2YWx1ZSkKIHsKLQlpZiAod3JpdGVfYWNwaV9pbnQobHNfbGV2ZWxfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19MRVZFTCwgdmFsdWUpKQogCQlwcl93YXJuaW5nKCJFcnJvciBzZXR0aW5nIGxpZ2h0IHNlbnNvciBsZXZlbFxuIik7Ci0JaG90ay0+bGlnaHRfbGV2ZWwgPSB2YWx1ZTsKKwlhc3VzLT5saWdodF9sZXZlbCA9IHZhbHVlOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2xzbHZsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaG90ay0+bGlnaHRfbGV2ZWwpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXMtPmxpZ2h0X2xldmVsKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbHNsdmwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApIHsKIAkJdmFsdWUgPSAoMCA8IHZhbHVlKSA/ICgoMTUgPCB2YWx1ZSkgPyAxNSA6IHZhbHVlKSA6IDA7CiAJCS8qIDAgPD0gdmFsdWUgPD0gMTUgKi8KLQkJc2V0X2xpZ2h0X3NlbnNfbGV2ZWwodmFsdWUpOworCQlhc3VzX2Fsc19sZXZlbChhc3VzLCB2YWx1ZSk7CiAJfQogCiAJcmV0dXJuIHJ2OwpAQCAtODYxLDE5NyArMTAwNywzMDkgQEAKIC8qCiAgKiBHUFMKICAqLworc3RhdGljIGludCBhc3VzX2dwc19zdGF0dXMoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKKworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0dQU19TVEFUVVMsCisJCQkJICAgTlVMTCwgJnN0YXR1cyk7CisJaWYgKEFDUElfRkFJTFVSRShydikpIHsKKwkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBHUFMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAhIXN0YXR1czsKK30KKworc3RhdGljIGludCBhc3VzX2dwc19zd2l0Y2goc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWNvbnN0IGNoYXIgKm1ldGggPSBzdGF0dXMgPyBNRVRIT0RfR1BTX09OIDogTUVUSE9EX0dQU19PRkY7CisKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBtZXRoLCAweDAyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfZ3BzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfc3RhdHVzKEdQU19PTikpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXNfZ3BzX3N0YXR1cyhhc3VzKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2dwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBzdG9yZV9zdGF0dXMoYnVmLCBjb3VudCwgTlVMTCwgR1BTX09OKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcnYsIHZhbHVlOworCWludCByZXQ7CisKKwlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOworCWlmIChydiA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBhc3VzX2dwc19zd2l0Y2goYXN1cywgISF2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZmtpbGxfc2V0X3N3X3N0YXRlKGFzdXMtPmdwc19yZmtpbGwsICF2YWx1ZSk7CisJcmV0dXJuIHJ2OwogfQogCiAvKgotICogSG90a2V5IGZ1bmN0aW9ucworICogcmZraWxsCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICphc3VzX2dldF9lbnRyeV9ieV9zY2FuY29kZShpbnQgY29kZSkKK3N0YXRpYyBpbnQgYXN1c19ncHNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0Jc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRhdGE7CiAKLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKLQkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQotCQkJcmV0dXJuIGtleTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiBhc3VzX2dwc19zd2l0Y2goaGFuZGxlLCAhYmxvY2tlZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICphc3VzX2dldF9lbnRyeV9ieV9rZXljb2RlKGludCBjb2RlKQorc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGFzdXNfZ3BzX3Jma2lsbF9vcHMgPSB7CisJLnNldF9ibG9jayA9IGFzdXNfZ3BzX3Jma2lsbF9zZXQsCit9OworCitzdGF0aWMgdm9pZCBhc3VzX3Jma2lsbF9leGl0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKIHsKLQlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7Ci0KLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKLQkJaWYgKGNvZGUgPT0ga2V5LT5rZXljb2RlICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpCi0JCQlyZXR1cm4ga2V5OwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQgKmtleWNvZGUpCi17Ci0Jc3RydWN0IGtleV9lbnRyeSAqa2V5ID0gYXN1c19nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOwotCi0JaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7Ci0JCSprZXljb2RlID0ga2V5LT5rZXljb2RlOwotCQlyZXR1cm4gMDsKKwlpZiAoYXN1cy0+Z3BzX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3Rlcihhc3VzLT5ncHNfcmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koYXN1cy0+Z3BzX3Jma2lsbCk7CisJCWFzdXMtPmdwc19yZmtpbGwgPSBOVUxMOwogCX0KLQotCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGFzdXNfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCitzdGF0aWMgaW50IGFzdXNfcmZraWxsX2luaXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQlpbnQgb2xkX2tleWNvZGU7CisJaW50IHJlc3VsdDsKIAotCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwlpZiAoYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfR1BTX09OLCBOVUxMKSB8fAorCSAgICBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT0ZGLCBOVUxMKSB8fAorCSAgICBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfU1RBVFVTLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlhc3VzLT5ncHNfcmZraWxsID0gcmZraWxsX2FsbG9jKCJhc3VzLWdwcyIsICZhc3VzLT5wbGF0Zm9ybV9kZXZpY2UtPmRldiwKKwkJCQkJUkZLSUxMX1RZUEVfR1BTLAorCQkJCQkmYXN1c19ncHNfcmZraWxsX29wcywgTlVMTCk7CisJaWYgKCFhc3VzLT5ncHNfcmZraWxsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtleSA9IGFzdXNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKLQlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKLQkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7Ci0JCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7Ci0JCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCQlpZiAoIWFzdXNfZ2V0X2VudHJ5X2J5X2tleWNvZGUob2xkX2tleWNvZGUpKQotCQkJY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCXJldHVybiAwOworCXJlc3VsdCA9IHJma2lsbF9yZWdpc3Rlcihhc3VzLT5ncHNfcmZraWxsKTsKKwlpZiAocmVzdWx0KSB7CisJCXJma2lsbF9kZXN0cm95KGFzdXMtPmdwc19yZmtpbGwpOworCQlhc3VzLT5ncHNfcmZraWxsID0gTlVMTDsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCisvKgorICogSW5wdXQgZGV2aWNlIChpLmUuIGhvdGtleXMpCisgKi8KK3N0YXRpYyB2b2lkIGFzdXNfaW5wdXRfbm90aWZ5KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IGV2ZW50KQogewotCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7Ci0JdTE2IGNvdW50OworCWlmIChhc3VzLT5pbnB1dGRldikKKwkJc3BhcnNlX2tleW1hcF9yZXBvcnRfZXZlbnQoYXN1cy0+aW5wdXRkZXYsIGV2ZW50LCAxLCB0cnVlKTsKK30KIAotCS8qIFRPRE8gRmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGV2ZW50cyBjb3VudC4gKi8KLQlpZiAoIWhvdGspCi0JCXJldHVybjsKK3N0YXRpYyBpbnQgYXN1c19pbnB1dF9pbml0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlpbnQgZXJyb3I7CisKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJcHJfaW5mbygiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAwOworCX0KKwlpbnB1dC0+bmFtZSA9ICJBc3VzIExhcHRvcCBleHRyYSBidXR0b25zIjsKKwlpbnB1dC0+cGh5cyA9IEFTVVNfTEFQVE9QX0ZJTEUgIi9pbnB1dDAiOworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXY7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGFzdXMpOworCisJZXJyb3IgPSBzcGFyc2Vfa2V5bWFwX3NldHVwKGlucHV0LCBhc3VzX2tleW1hcCwgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHNldHVwIGlucHV0IGRldmljZSBrZXltYXBcbiIpOworCQlnb3RvIGVycl9rZXltYXA7CisJfQorCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJfaW5mbygiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2RldmljZTsKKwl9CisKKwlhc3VzLT5pbnB1dGRldiA9IGlucHV0OworCXJldHVybiAwOworCitlcnJfa2V5bWFwOgorCXNwYXJzZV9rZXltYXBfZnJlZShpbnB1dCk7CitlcnJfZGV2aWNlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGFzdXNfaW5wdXRfZXhpdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJaWYgKGFzdXMtPmlucHV0ZGV2KSB7CisJCXNwYXJzZV9rZXltYXBfZnJlZShhc3VzLT5pbnB1dGRldik7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFzdXMtPmlucHV0ZGV2KTsKKwl9Cit9CisKKy8qCisgKiBBQ1BJIGRyaXZlcgorICovCitzdGF0aWMgdm9pZCBhc3VzX2FjcGlfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXUxNiBjb3VudDsKIAogCS8qCiAJICogV2UgbmVlZCB0byB0ZWxsIHRoZSBiYWNrbGlnaHQgZGV2aWNlIHdoZW4gdGhlIGJhY2tsaWdodCBwb3dlciBpcwogCSAqIHN3aXRjaGVkCiAJICovCi0JaWYgKGV2ZW50ID09IEFUS0RfTENEX09OKSB7Ci0JCXdyaXRlX3N0YXR1cyhOVUxMLCAxLCBMQ0RfT04pOwotCQlsY2RfYmxhbmsoRkJfQkxBTktfVU5CTEFOSyk7Ci0JfSBlbHNlIGlmIChldmVudCA9PSBBVEtEX0xDRF9PRkYpIHsKLQkJd3JpdGVfc3RhdHVzKE5VTEwsIDAsIExDRF9PTik7Ci0JCWxjZF9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04pOwotCX0KKwlpZiAoZXZlbnQgPT0gQVRLRF9MQ0RfT04pCisJCWxjZF9ibGFuayhhc3VzLCBGQl9CTEFOS19VTkJMQU5LKTsKKwllbHNlIGlmIChldmVudCA9PSBBVEtEX0xDRF9PRkYpCisJCWxjZF9ibGFuayhhc3VzLCBGQl9CTEFOS19QT1dFUkRPV04pOwogCi0JY291bnQgPSBob3RrLT5ldmVudF9jb3VudFtldmVudCAlIDEyOF0rKzsKLQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGhvdGstPmRldmljZSwgZXZlbnQsIGNvdW50KTsKLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGhvdGstPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKLQkJCQkJZGV2X25hbWUoJmhvdGstPmRldmljZS0+ZGV2KSwgZXZlbnQsCisJLyogVE9ETyBGaW5kIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgZXZlbnRzIGNvdW50LiAqLworCWNvdW50ID0gYXN1cy0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKys7CisJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChhc3VzLT5kZXZpY2UsIGV2ZW50LCBjb3VudCk7CisJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChhc3VzLT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCisJCQkJCWRldl9uYW1lKCZhc3VzLT5kZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQljb3VudCk7CiAKLQlpZiAoaG90ay0+aW5wdXRkZXYpIHsKLQkJa2V5ID0gYXN1c19nZXRfZW50cnlfYnlfc2NhbmNvZGUoZXZlbnQpOwotCQlpZiAoIWtleSkKLQkJCXJldHVybiA7CisJLyogQnJpZ2h0bmVzcyBldmVudHMgYXJlIHNwZWNpYWwgKi8KKwlpZiAoZXZlbnQgPj0gQVRLRF9CUl9NSU4gJiYgZXZlbnQgPD0gQVRLRF9CUl9NQVgpIHsKIAotCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQljYXNlIEtFX0tFWToKLQkJCWlucHV0X3JlcG9ydF9rZXkoaG90ay0+aW5wdXRkZXYsIGtleS0+a2V5Y29kZSwgMSk7Ci0JCQlpbnB1dF9zeW5jKGhvdGstPmlucHV0ZGV2KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoaG90ay0+aW5wdXRkZXYsIGtleS0+a2V5Y29kZSwgMCk7Ci0JCQlpbnB1dF9zeW5jKGhvdGstPmlucHV0ZGV2KTsKLQkJCWJyZWFrOworCQkvKiBJZ25vcmUgdGhlbSBjb21wbGV0ZWx5IGlmIHRoZSBhY3BpIHZpZGVvIGRyaXZlciBpcyB1c2VkICovCisJCWlmIChhc3VzLT5iYWNrbGlnaHRfZGV2aWNlICE9IE5VTEwpIHsKKwkJCS8qIFVwZGF0ZSB0aGUgYmFja2xpZ2h0IGRldmljZS4gKi8KKwkJCWFzdXNfYmFja2xpZ2h0X25vdGlmeShhc3VzKTsKIAkJfQorCQlyZXR1cm4gOwogCX0KKwlhc3VzX2lucHV0X25vdGlmeShhc3VzLCBldmVudCk7CiB9CiAKLSNkZWZpbmUgQVNVU19DUkVBVEVfREVWSUNFX0FUVFIoX25hbWUpCQkJCQlcCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IHsJCQlcCi0JCS5hdHRyID0gewkJCQkJCVwKLQkJCS5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLAkJCVwKLQkJCS5tb2RlID0gMCB9LAkJCQkJXAotCQkuc2hvdyAgID0gTlVMTCwJCQkJCQlcCi0JCS5zdG9yZSAgPSBOVUxMLAkJCQkJCVwKLQl9CitzdGF0aWMgREVWSUNFX0FUVFIoaW5mb3MsIFNfSVJVR08sIHNob3dfaW5mb3MsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHdsYW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3dsYW4sIHN0b3JlX3dsYW4pOworc3RhdGljIERFVklDRV9BVFRSKGJsdWV0b290aCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmx1ZXRvb3RoLAorCQkgICBzdG9yZV9ibHVldG9vdGgpOworc3RhdGljIERFVklDRV9BVFRSKGRpc3BsYXksIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Rpc3AsIHN0b3JlX2Rpc3ApOworc3RhdGljIERFVklDRV9BVFRSKGxlZGQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2xlZGQsIHN0b3JlX2xlZGQpOworc3RhdGljIERFVklDRV9BVFRSKGxzX2xldmVsLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19sc2x2bCwgc3RvcmVfbHNsdmwpOworc3RhdGljIERFVklDRV9BVFRSKGxzX3N3aXRjaCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbHNzdywgc3RvcmVfbHNzdyk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ3BzLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19ncHMsIHN0b3JlX2dwcyk7CiAKLSNkZWZpbmUgQVNVU19TRVRfREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJZGV2X2F0dHJfIyNfbmFtZS5hdHRyLm1vZGUgPSBfbW9kZTsJCQlcCi0JCWRldl9hdHRyXyMjX25hbWUuc2hvdyA9IF9zaG93OwkJCQlcCi0JCWRldl9hdHRyXyMjX25hbWUuc3RvcmUgPSBfc3RvcmU7CQkJXAotCX0gd2hpbGUoMCkKLQotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGluZm9zKTsKLXN0YXRpYyBBU1VTX0NSRUFURV9ERVZJQ0VfQVRUUih3bGFuKTsKLXN0YXRpYyBBU1VTX0NSRUFURV9ERVZJQ0VfQVRUUihibHVldG9vdGgpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGRpc3BsYXkpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxlZGQpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxzX3N3aXRjaCk7Ci1zdGF0aWMgQVNVU19DUkVBVEVfREVWSUNFX0FUVFIobHNfbGV2ZWwpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGdwcyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphc3VzcGZfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9pbmZvcy5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCi0JJmRldl9hdHRyX2JsdWV0b290aC5hdHRyLAotCSZkZXZfYXR0cl9kaXNwbGF5LmF0dHIsCi0JJmRldl9hdHRyX2xlZGQuYXR0ciwKLQkmZGV2X2F0dHJfbHNfc3dpdGNoLmF0dHIsCi0JJmRldl9hdHRyX2xzX2xldmVsLmF0dHIsCi0JJmRldl9hdHRyX2dwcy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzdXNwZl9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYXN1c3BmX2F0dHJpYnV0ZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzdXNwZl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSBBU1VTX0hPVEtfRklMRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAgIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphc3VzcGZfZGV2aWNlOwotCi1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfYWRkX2ZzKHZvaWQpCitzdGF0aWMgdm9pZCBhc3VzX3N5c2ZzX2V4aXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCUFTVVNfU0VUX0RFVklDRV9BVFRSKGluZm9zLCAwNDQ0LCBzaG93X2luZm9zLCBOVUxMKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UgPSBhc3VzLT5wbGF0Zm9ybV9kZXZpY2U7CiAKLQlpZiAod2xfc3dpdGNoX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIod2xhbiwgMDY0NCwgc2hvd193bGFuLCBzdG9yZV93bGFuKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaW5mb3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93bGFuKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfYmx1ZXRvb3RoKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfZGlzcGxheSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2xlZGQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19zd2l0Y2gpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19sZXZlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2dwcyk7Cit9CiAKLQlpZiAoYnRfc3dpdGNoX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoYmx1ZXRvb3RoLCAwNjQ0LAotCQkJCSAgICAgc2hvd19ibHVldG9vdGgsIHN0b3JlX2JsdWV0b290aCk7CitzdGF0aWMgaW50IGFzdXNfc3lzZnNfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlID0gYXN1cy0+cGxhdGZvcm1fZGV2aWNlOworCWludCBlcnI7CiAKLQlpZiAoZGlzcGxheV9zZXRfaGFuZGxlICYmIGRpc3BsYXlfZ2V0X2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoZGlzcGxheSwgMDY0NCwgc2hvd19kaXNwLCBzdG9yZV9kaXNwKTsKLQllbHNlIGlmIChkaXNwbGF5X3NldF9oYW5kbGUpCi0JCUFTVVNfU0VUX0RFVklDRV9BVFRSKGRpc3BsYXksIDAyMDAsIE5VTEwsIHN0b3JlX2Rpc3ApOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pbmZvcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWlmIChsZWRkX3NldF9oYW5kbGUpCi0JCUFTVVNfU0VUX0RFVklDRV9BVFRSKGxlZGQsIDA2NDQsIHNob3dfbGVkZCwgc3RvcmVfbGVkZCk7Ci0KLQlpZiAobHNfc3dpdGNoX2hhbmRsZSAmJiBsc19sZXZlbF9oYW5kbGUpIHsKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIobHNfbGV2ZWwsIDA2NDQsIHNob3dfbHNsdmwsIHN0b3JlX2xzbHZsKTsKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIobHNfc3dpdGNoLCAwNjQ0LCBzaG93X2xzc3csIHN0b3JlX2xzc3cpOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfV0xBTiwgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX3dsYW4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoZ3BzX3N0YXR1c19oYW5kbGUgJiYgZ3BzX29uX2hhbmRsZSAmJiBncHNfb2ZmX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoZ3BzLCAwNjQ0LCBzaG93X2dwcywgc3RvcmVfZ3BzKTsKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0JMVUVUT09USCwgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2JsdWV0b290aCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfU1dJVENIX0RJU1BMQVksIE5VTEwpKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kaXNwbGF5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9MRURELCBOVUxMKSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfbGVkZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQUxTX0NPTlRST0wsIE5VTEwpICYmCisJICAgICFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9BTFNfTEVWRUwsIE5VTEwpKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19zd2l0Y2gpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2xzX2xldmVsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT04sIE5VTEwpICYmCisJICAgICFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT0ZGLCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfR1BTX1NUQVRVUywgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2dwcyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYXN1c19wbGF0Zm9ybV9pbml0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlpbnQgZXJyOworCisJYXN1cy0+cGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKEFTVVNfTEFQVE9QX0ZJTEUsIC0xKTsKKwlpZiAoIWFzdXMtPnBsYXRmb3JtX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoYXN1cy0+cGxhdGZvcm1fZGV2aWNlLCBhc3VzKTsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXN1cy0+cGxhdGZvcm1fZGV2aWNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOworCisJZXJyID0gYXN1c19zeXNmc19pbml0KGFzdXMpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9zeXNmczsKKwlyZXR1cm4gMDsKKworZmFpbF9zeXNmczoKKwlhc3VzX3N5c2ZzX2V4aXQoYXN1cyk7CisJcGxhdGZvcm1fZGV2aWNlX2RlbChhc3VzLT5wbGF0Zm9ybV9kZXZpY2UpOworZmFpbF9wbGF0Zm9ybV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChhc3VzLT5wbGF0Zm9ybV9kZXZpY2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFzdXNfcGxhdGZvcm1fZXhpdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJYXN1c19zeXNmc19leGl0KGFzdXMpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFzdXMtPnBsYXRmb3JtX2RldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsYXRmb3JtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEFTVVNfTEFQVE9QX0ZJTEUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0KK307CisKIHN0YXRpYyBpbnQgYXN1c19oYW5kbGVfaW5pdChjaGFyICpuYW1lLCBhY3BpX2hhbmRsZSAqIGhhbmRsZSwKIAkJCSAgICBjaGFyICoqcGF0aHMsIGludCBudW1fcGF0aHMpCiB7CkBAIC0xMDczLDEwICsxMzMxLDExIEBACiAJCQkgQVJSQVlfU0laRShvYmplY3QjI19wYXRocykpCiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaG90ayB3aXRoIHJpZ2h0IHZhbHVlcy4gSW4gdGhpcwotICogbWV0aG9kLCB3ZSBjYW4gbWFrZSBhbGwgdGhlIGRldGVjdGlvbiB3ZSB3YW50LCBhbmQgbW9kaWZ5IHRoZSBob3RrIHN0cnVjdAorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGNvbnRleHQgd2l0aCByaWdodCB2YWx1ZXMuIEluIHRoaXMKKyAqIG1ldGhvZCwgd2UgY2FuIG1ha2UgYWxsIHRoZSBkZXRlY3Rpb24gd2Ugd2FudCwgYW5kIG1vZGlmeSB0aGUgYXN1c19sYXB0b3AKKyAqIHN0cnVjdAogICovCi1zdGF0aWMgaW50IGFzdXNfaG90a19nZXRfaW5mbyh2b2lkKQorc3RhdGljIGludCBhc3VzX2xhcHRvcF9nZXRfaW5mbyhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqbW9kZWwgPSBOVUxMOwpAQCAtMTA4OSwyMiArMTM0OCwyMSBAQAogCSAqIG1vZGVscywgYnV0IGxhdGUgZW5vdWdoIHRvIGFsbG93IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigpIHRvIGZhaWwKIAkgKiBiZWZvcmUgZG9pbmcgYW55dGhpbmcgQUNQSS1zcGVjaWZpYy4gU2hvdWxkIHdlIGVuY291bnRlciBhIG1hY2hpbmUsCiAJICogd2hpY2ggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAoaS5lLiBpdHMgaG90a2V5IGRldmljZSBoYXMgYSBkaWZmZXJlbnQKLQkgKiBISUQpLCB0aGlzIGJpdCB3aWxsIGJlIG1vdmVkLiBBIGdsb2JhbCB2YXJpYWJsZSBhc3VzX2luZm8gY29udGFpbnMKLQkgKiB0aGUgRFNEVCBoZWFkZXIuCisJICogSElEKSwgdGhpcyBiaXQgd2lsbCBiZSBtb3ZlZC4KIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19EU0RULCAxLCAmYXN1c19pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19EU0RULCAxLCAmYXN1cy0+ZHNkdF9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByX3dhcm5pbmcoIkNvdWxkbid0IGdldCB0aGUgRFNEVCB0YWJsZSBoZWFkZXJcbiIpOwogCiAJLyogV2UgaGF2ZSB0byB3cml0ZSAwIG9uIGluaXQgdGhpcyBmYXIgZm9yIGFsbCBBU1VTIG1vZGVscyAqLwotCWlmICh3cml0ZV9hY3BpX2ludChob3RrLT5oYW5kbGUsICJJTklUIiwgMCwgJmJ1ZmZlcikpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnRfcmV0KGFzdXMtPmhhbmRsZSwgIklOSVQiLCAwLCAmYnVmZmVyKSkgewogCQlwcl9lcnIoIkhvdGtleSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBmb3Igc29tZSBsYXB0b3BzIHRvIGluaXQgcHJvcGVybHkgKi8KIAlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiQlNUUyIsIE5VTEwsICZic3RzX3Jlc3VsdCk7CisJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsICJCU1RTIiwgTlVMTCwgJmJzdHNfcmVzdWx0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByX3dhcm5pbmcoIkVycm9yIGNhbGxpbmcgQlNUU1xuIik7CiAJZWxzZSBpZiAoYnN0c19yZXN1bHQpCkBAIC0xMTEyLDggKzEzNzAsOCBAQAogCQkgICAgICAgKHVpbnQpIGJzdHNfcmVzdWx0KTsKIAogCS8qIFRoaXMgdG9vIC4uLiAqLwotCXdyaXRlX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgIkNXQVAiLCB3YXBmLCBOVUxMKTsKLQorCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsICJDV0FQIiwgd2FwZikpCisJCXByX2VycigiRXJyb3IgY2FsbGluZyBDV0FQKCVkKVxuIiwgd2FwZik7CiAJLyoKIAkgKiBUcnkgdG8gbWF0Y2ggdGhlIG9iamVjdCByZXR1cm5lZCBieSBJTklUIHRvIHRoZSBzcGVjaWZpYyBtb2RlbC4KIAkgKiBIYW5kbGUgZXZlcnkgcG9zc2libGUgb2JqZWN0IChvciB0aGUgbGFjayBvZiB0aGVyZW9mKSB0aGUgRFNEVApAQCAtMTEzNCwzOTcgKzEzOTIsMjEwIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlob3RrLT5uYW1lID0ga3N0cmR1cChzdHJpbmcsIEdGUF9LRVJORUwpOwotCWlmICghaG90ay0+bmFtZSkKKwlhc3VzLT5uYW1lID0ga3N0cmR1cChzdHJpbmcsIEdGUF9LRVJORUwpOworCWlmICghYXN1cy0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoKnN0cmluZykKIAkJcHJfbm90aWNlKCIgICVzIG1vZGVsIGRldGVjdGVkXG4iLCBzdHJpbmcpOwogCi0JQVNVU19IQU5ETEVfSU5JVChtbGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVCh0bGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChybGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChwbGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChnbGVkX3NldCk7Ci0KLQlBU1VTX0hBTkRMRV9JTklUKGxlZGRfc2V0KTsKLQotCUFTVVNfSEFORExFX0lOSVQoa2xlZF9zZXQpOwotCUFTVVNfSEFORExFX0lOSVQoa2xlZF9nZXQpOwotCiAJLyoKIAkgKiBUaGUgSFdSUyBtZXRob2QgcmV0dXJuIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgaGFyZHdhcmUuCiAJICogMHg4MCBiaXQgaXMgZm9yIFdMQU4sIDB4MTAwIGZvciBCbHVldG9vdGguCiAJICogVGhlIHNpZ25pZmljYW5jZSBvZiBvdGhlcnMgaXMgeWV0IHRvIGJlIGZvdW5kLgotCSAqIElmIHdlIGRvbid0IGZpbmQgdGhlIG1ldGhvZCwgd2UgYXNzdW1lIHRoZSBkZXZpY2UgYXJlIHByZXNlbnQuCiAJICovCiAJc3RhdHVzID0KLQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmaHdyc19yZXN1bHQpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJaHdyc19yZXN1bHQgPSBXTF9IV1JTIHwgQlRfSFdSUzsKKwkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmaHdyc19yZXN1bHQpOworCWlmICghQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXByX25vdGljZSgiICBIUldTIHJldHVybmVkICV4IiwgKGludClod3JzX3Jlc3VsdCk7CiAKLQlpZiAoaHdyc19yZXN1bHQgJiBXTF9IV1JTKQotCQlBU1VTX0hBTkRMRV9JTklUKHdsX3N3aXRjaCk7Ci0JaWYgKGh3cnNfcmVzdWx0ICYgQlRfSFdSUykKLQkJQVNVU19IQU5ETEVfSU5JVChidF9zd2l0Y2gpOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfV0xfU1RBVFVTLCBOVUxMKSkKKwkJYXN1cy0+aGF2ZV9yc3RzID0gdHJ1ZTsKIAotCUFTVVNfSEFORExFX0lOSVQod2lyZWxlc3Nfc3RhdHVzKTsKLQotCUFTVVNfSEFORExFX0lOSVQoYnJpZ2h0bmVzc19zZXQpOwotCUFTVVNfSEFORExFX0lOSVQoYnJpZ2h0bmVzc19nZXQpOwotCisJLyogU2NoZWR1bGVkIGZvciByZW1vdmFsICovCiAJQVNVU19IQU5ETEVfSU5JVChsY2Rfc3dpdGNoKTsKLQotCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9zZXQpOwogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9nZXQpOwogCi0JLyoKLQkgKiBUaGVyZSBpcyBhIGxvdCBvZiBtb2RlbHMgd2l0aCAiQUxTTCIsIGJ1dCBhIGZldyBnZXQKLQkgKiBhIHJlYWwgbGlnaHQgc2Vucywgc28gd2UgbmVlZCB0byBjaGVjayBpdC4KLQkgKi8KLQlpZiAoIUFTVVNfSEFORExFX0lOSVQobHNfc3dpdGNoKSkKLQkJQVNVU19IQU5ETEVfSU5JVChsc19sZXZlbCk7Ci0KLQlBU1VTX0hBTkRMRV9JTklUKGdwc19vbik7Ci0JQVNVU19IQU5ETEVfSU5JVChncHNfb2ZmKTsKLQlBU1VTX0hBTkRMRV9JTklUKGdwc19zdGF0dXMpOwotCiAJa2ZyZWUobW9kZWwpOwogCiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgaW50IGFzdXNfaW5wdXRfaW5pdCh2b2lkKQotewotCWNvbnN0IHN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQlpbnQgcmVzdWx0Oworc3RhdGljIGJvb2wgYXN1c19kZXZpY2VfcHJlc2VudDsKIAotCWhvdGstPmlucHV0ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFob3RrLT5pbnB1dGRldikgewotCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWhvdGstPmlucHV0ZGV2LT5uYW1lID0gIkFzdXMgTGFwdG9wIGV4dHJhIGJ1dHRvbnMiOwotCWhvdGstPmlucHV0ZGV2LT5waHlzID0gQVNVU19IT1RLX0ZJTEUgIi9pbnB1dDAiOwotCWhvdGstPmlucHV0ZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JaG90ay0+aW5wdXRkZXYtPmdldGtleWNvZGUgPSBhc3VzX2dldGtleWNvZGU7Ci0JaG90ay0+aW5wdXRkZXYtPnNldGtleWNvZGUgPSBhc3VzX3NldGtleWNvZGU7Ci0KLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgewotCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQljYXNlIEtFX0tFWToKLQkJCXNldF9iaXQoRVZfS0VZLCBob3RrLT5pbnB1dGRldi0+ZXZiaXQpOwotCQkJc2V0X2JpdChrZXktPmtleWNvZGUsIGhvdGstPmlucHV0ZGV2LT5rZXliaXQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmVzdWx0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhvdGstPmlucHV0ZGV2KTsKLQlpZiAocmVzdWx0KSB7Ci0JCXByX2luZm8oIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwotCQlpbnB1dF9mcmVlX2RldmljZShob3RrLT5pbnB1dGRldik7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19ob3RrX2NoZWNrKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhc3VzX2FjcGlfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGhvdGstPmRldmljZSk7CisJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3N0YXR1cyhhc3VzLT5kZXZpY2UpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaWYgKCFhc3VzLT5kZXZpY2UtPnN0YXR1cy5wcmVzZW50KSB7CisJCXByX2VycigiSG90a2V5IGRldmljZSBub3QgcHJlc2VudCwgYWJvcnRpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXN1bHQgPSBhc3VzX2xhcHRvcF9nZXRfaW5mbyhhc3VzKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JaWYgKGhvdGstPmRldmljZS0+c3RhdHVzLnByZXNlbnQpIHsKLQkJcmVzdWx0ID0gYXN1c19ob3RrX2dldF9pbmZvKCk7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJIb3RrZXkgZGV2aWNlIG5vdCBwcmVzZW50LCBhYm9ydGluZ1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIFdMRUQgYW5kIEJMRUQgYXJlIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoYmx1ZXRvb3RoX3N0YXR1cyA+PSAwKQorCQlhc3VzX2JsdWV0b290aF9zZXQoYXN1cywgISFibHVldG9vdGhfc3RhdHVzKTsKKworCWlmICh3bGFuX3N0YXR1cyA+PSAwKQorCQlhc3VzX3dsYW5fc2V0KGFzdXMsICEhd2xhbl9zdGF0dXMpOworCisJLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0tCRF9MSUdIVF9TRVQsIE5VTEwpKQorCQlhc3VzX2tsZWRfc2V0KGFzdXMsIDEpOworCisJLyogTEVEIGRpc3BsYXkgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKwlhc3VzLT5sZWRkX3N0YXR1cyA9IDB4RkZGOworCisJLyogU2V0IGluaXRpYWwgdmFsdWVzIG9mIGxpZ2h0IHNlbnNvciBhbmQgbGV2ZWwgKi8KKwlhc3VzLT5saWdodF9zd2l0Y2ggPSAwOwkvKiBEZWZhdWx0IHRvIGxpZ2h0IHNlbnNvciBkaXNhYmxlZCAqLworCWFzdXMtPmxpZ2h0X2xldmVsID0gNTsJLyogbGV2ZWwgNSBmb3Igc2Vuc29yIHNlbnNpdGl2aXR5ICovCisKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19DT05UUk9MLCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQUxTX0xFVkVMLCBOVUxMKSkgeworCQlhc3VzX2Fsc19zd2l0Y2goYXN1cywgYXN1cy0+bGlnaHRfc3dpdGNoKTsKKwkJYXN1c19hbHNfbGV2ZWwoYXN1cywgYXN1cy0+bGlnaHRfbGV2ZWwpOwogCX0KIAorCWFzdXMtPmxjZF9zdGF0ZSA9IDE7IC8qIExDRCBzaG91bGQgYmUgb24gd2hlbiB0aGUgbW9kdWxlIGxvYWQgKi8KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFzdXNfaG90a19mb3VuZDsKLQotc3RhdGljIGludCBhc3VzX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgYXN1c19hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXM7CiAJaW50IHJlc3VsdDsKIAogCXByX25vdGljZSgiQXN1cyBMYXB0b3AgU3VwcG9ydCB2ZXJzaW9uICVzXG4iLAotCSAgICAgICBBU1VTX0xBUFRPUF9WRVJTSU9OKTsKLQotCWhvdGsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXN1c19ob3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFob3RrKQorCQkgIEFTVVNfTEFQVE9QX1ZFUlNJT04pOworCWFzdXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXN1c19sYXB0b3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFzdXMpCiAJCXJldHVybiAtRU5PTUVNOworCWFzdXMtPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFTVVNfTEFQVE9QX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQVNVU19MQVBUT1BfQ0xBU1MpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBhc3VzOworCWFzdXMtPmRldmljZSA9IGRldmljZTsKIAotCWhvdGstPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFTVVNfSE9US19ERVZJQ0VfTkFNRSk7Ci0Jc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFTVVNfSE9US19DTEFTUyk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGhvdGs7Ci0JaG90ay0+ZGV2aWNlID0gZGV2aWNlOwotCi0JcmVzdWx0ID0gYXN1c19ob3RrX2NoZWNrKCk7CisJcmVzdWx0ID0gYXN1c19hY3BpX2luaXQoYXN1cyk7CiAJaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7CisJCWdvdG8gZmFpbF9wbGF0Zm9ybTsKIAotCWFzdXNfaG90a19hZGRfZnMoKTsKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBwbGF0Zm9ybSBkZXZpY2UgZmlyc3QuICBJdCBpcyB1c2VkIGFzIGEgcGFyZW50IGZvciB0aGUKKwkgKiBzdWItZGV2aWNlcyBiZWxvdy4KKwkgKi8KKwlyZXN1bHQgPSBhc3VzX3BsYXRmb3JtX2luaXQoYXN1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX3BsYXRmb3JtOwogCi0JYXN1c19ob3RrX2ZvdW5kID0gMTsKKwlpZiAoIWFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgeworCQlyZXN1bHQgPSBhc3VzX2JhY2tsaWdodF9pbml0KGFzdXMpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBmYWlsX2JhY2tsaWdodDsKKwl9IGVsc2UKKwkJcHJfaW5mbygiQmFja2xpZ2h0IGNvbnRyb2xsZWQgYnkgQUNQSSB2aWRlbyBkcml2ZXJcbiIpOwogCi0JLyogV0xFRCBhbmQgQkxFRCBhcmUgb24gYnkgZGVmYXVsdCAqLwotCXdyaXRlX3N0YXR1cyhidF9zd2l0Y2hfaGFuZGxlLCAxLCBCVF9PTik7Ci0Jd3JpdGVfc3RhdHVzKHdsX3N3aXRjaF9oYW5kbGUsIDEsIFdMX09OKTsKKwlyZXN1bHQgPSBhc3VzX2lucHV0X2luaXQoYXN1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX2lucHV0OwogCi0JLyogSWYgdGhlIGgvdyBzd2l0Y2ggaXMgb2ZmLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZWFsIHN0YXR1cyAqLwotCXdyaXRlX3N0YXR1cyhOVUxMLCByZWFkX3N0YXR1cyhCVF9PTiksIEJUX09OKTsKLQl3cml0ZV9zdGF0dXMoTlVMTCwgcmVhZF9zdGF0dXMoV0xfT04pLCBXTF9PTik7CisJcmVzdWx0ID0gYXN1c19sZWRfaW5pdChhc3VzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWxfbGVkOwogCi0JLyogTENEIEJhY2tsaWdodCBpcyBvbiBieSBkZWZhdWx0ICovCi0Jd3JpdGVfc3RhdHVzKE5VTEwsIDEsIExDRF9PTik7CisJcmVzdWx0ID0gYXN1c19yZmtpbGxfaW5pdChhc3VzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWxfcmZraWxsOwogCi0JLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KLQlpZiAoa2xlZF9zZXRfaGFuZGxlKQotCQlzZXRfa2xlZF9sdmwoMSk7CisJYXN1c19kZXZpY2VfcHJlc2VudCA9IHRydWU7CisJcmV0dXJuIDA7CiAKLQkvKiBMRUQgZGlzcGxheSBpcyBvZmYgYnkgZGVmYXVsdCAqLwotCWhvdGstPmxlZGRfc3RhdHVzID0gMHhGRkY7Ci0KLQkvKiBTZXQgaW5pdGlhbCB2YWx1ZXMgb2YgbGlnaHQgc2Vuc29yIGFuZCBsZXZlbCAqLwotCWhvdGstPmxpZ2h0X3N3aXRjaCA9IDA7CS8qIERlZmF1bHQgdG8gbGlnaHQgc2Vuc29yIGRpc2FibGVkICovCi0JaG90ay0+bGlnaHRfbGV2ZWwgPSA1OwkvKiBsZXZlbCA1IGZvciBzZW5zb3Igc2Vuc2l0aXZpdHkgKi8KLQotCWlmIChsc19zd2l0Y2hfaGFuZGxlKQotCQlzZXRfbGlnaHRfc2Vuc19zd2l0Y2goaG90ay0+bGlnaHRfc3dpdGNoKTsKLQotCWlmIChsc19sZXZlbF9oYW5kbGUpCi0JCXNldF9saWdodF9zZW5zX2xldmVsKGhvdGstPmxpZ2h0X2xldmVsKTsKLQotCS8qIEdQUyBpcyBvbiBieSBkZWZhdWx0ICovCi0Jd3JpdGVfc3RhdHVzKE5VTEwsIDEsIEdQU19PTik7Ci0KLWVuZDoKLQlpZiAocmVzdWx0KSB7Ci0JCWtmcmVlKGhvdGstPm5hbWUpOwotCQlrZnJlZShob3RrKTsKLQl9CitmYWlsX3Jma2lsbDoKKwlhc3VzX2xlZF9leGl0KGFzdXMpOworZmFpbF9sZWQ6CisJYXN1c19pbnB1dF9leGl0KGFzdXMpOworZmFpbF9pbnB1dDoKKwlhc3VzX2JhY2tsaWdodF9leGl0KGFzdXMpOworZmFpbF9iYWNrbGlnaHQ6CisJYXN1c19wbGF0Zm9ybV9leGl0KGFzdXMpOworZmFpbF9wbGF0Zm9ybToKKwlrZnJlZShhc3VzLT5uYW1lKTsKKwlrZnJlZShhc3VzKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgYXN1c19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCitzdGF0aWMgaW50IGFzdXNfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCWtmcmVlKGhvdGstPm5hbWUpOwotCWtmcmVlKGhvdGspOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAorCWFzdXNfYmFja2xpZ2h0X2V4aXQoYXN1cyk7CisJYXN1c19yZmtpbGxfZXhpdChhc3VzKTsKKwlhc3VzX2xlZF9leGl0KGFzdXMpOworCWFzdXNfaW5wdXRfZXhpdChhc3VzKTsKKwlhc3VzX3BsYXRmb3JtX2V4aXQoYXN1cyk7CisKKwlrZnJlZShhc3VzLT5uYW1lKTsKKwlrZnJlZShhc3VzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXN1c19iYWNrbGlnaHRfZXhpdCh2b2lkKQotewotCWlmIChhc3VzX2JhY2tsaWdodF9kZXZpY2UpCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihhc3VzX2JhY2tsaWdodF9kZXZpY2UpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBhc3VzX2RldmljZV9pZHNbXSA9IHsKKwl7IkFUSzAxMDAiLCAwfSwKKwl7IkFUSzAxMDEiLCAwfSwKKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYXN1c19kZXZpY2VfaWRzKTsKIAotI2RlZmluZSAgQVNVU19MRURfVU5SRUdJU1RFUihvYmplY3QpCQkJCVwKLQlpZiAob2JqZWN0IyNfbGVkLmRldikJCQkJCVwKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJm9iamVjdCMjX2xlZCkKLQotc3RhdGljIHZvaWQgYXN1c19sZWRfZXhpdCh2b2lkKQotewotCWRlc3Ryb3lfd29ya3F1ZXVlKGxlZF93b3JrcXVldWUpOwotCUFTVVNfTEVEX1VOUkVHSVNURVIobWxlZCk7Ci0JQVNVU19MRURfVU5SRUdJU1RFUih0bGVkKTsKLQlBU1VTX0xFRF9VTlJFR0lTVEVSKHBsZWQpOwotCUFTVVNfTEVEX1VOUkVHSVNURVIocmxlZCk7Ci0JQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKLQlBU1VTX0xFRF9VTlJFR0lTVEVSKGtsZWQpOwotfQotCi1zdGF0aWMgdm9pZCBhc3VzX2lucHV0X2V4aXQodm9pZCkKLXsKLQlpZiAoaG90ay0+aW5wdXRkZXYpCi0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGhvdGstPmlucHV0ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFzdXNfbGFwdG9wX2V4aXQodm9pZCkKLXsKLQlhc3VzX2JhY2tsaWdodF9leGl0KCk7Ci0JYXN1c19sZWRfZXhpdCgpOwotCWFzdXNfaW5wdXRfZXhpdCgpOwotCi0JYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmYXN1c3BmX2RldmljZS0+ZGV2LmtvYmosICZhc3VzcGZfYXR0cmlidXRlX2dyb3VwKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihhc3VzcGZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXN1c3BmX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwotCi0JaWYgKGJyaWdodG5lc3Nfc2V0X2hhbmRsZSAmJiBsY2Rfc3dpdGNoX2hhbmRsZSkgewotCQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoQVNVU19IT1RLX0ZJTEUsIGRldiwKLQkJCQkJICAgICAgIE5VTEwsICZhc3VzYmxfb3BzKTsKLQkJaWYgKElTX0VSUihiZCkpIHsKLQkJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGFzdXMgYmFja2xpZ2h0IGRldmljZVxuIik7Ci0JCQlhc3VzX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwotCQkJcmV0dXJuIFBUUl9FUlIoYmQpOwotCQl9Ci0KLQkJYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gYmQ7Ci0KLQkJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7Ci0JCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKE5VTEwpOwotCQliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFzdXNfbGVkX3JlZ2lzdGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgICAgc3RydWN0IGxlZF9jbGFzc2RldiAqbGRldiwgc3RydWN0IGRldmljZSAqZGV2KQotewotCWlmICghaGFuZGxlKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCBsZGV2KTsKLX0KLQotI2RlZmluZSBBU1VTX0xFRF9SRUdJU1RFUihvYmplY3QsIGRldmljZSkJCQkJXAotCWFzdXNfbGVkX3JlZ2lzdGVyKG9iamVjdCMjX3NldF9oYW5kbGUsICZvYmplY3QjI19sZWQsIGRldmljZSkKLQotc3RhdGljIGludCBhc3VzX2xlZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcnY7Ci0KLQlydiA9IEFTVVNfTEVEX1JFR0lTVEVSKG1sZWQsIGRldik7Ci0JaWYgKHJ2KQotCQlnb3RvIG91dDsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIodGxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MTsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIocmxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MjsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIocGxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MzsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIoZ2xlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0NDsKLQotCWlmIChrbGVkX3NldF9oYW5kbGUgJiYga2xlZF9nZXRfaGFuZGxlKQotCQlydiA9IEFTVVNfTEVEX1JFR0lTVEVSKGtsZWQsIGRldik7Ci0JaWYgKHJ2KQotCQlnb3RvIG91dDU7Ci0KLQlsZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKLQlpZiAoIWxlZF93b3JrcXVldWUpCi0JCWdvdG8gb3V0NjsKLQotCXJldHVybiAwOwotb3V0NjoKLQlydiA9IC1FTk9NRU07Ci0JQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKLW91dDU6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKLW91dDQ6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKLW91dDM6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihybGVkKTsKLW91dDI6Ci0JQVNVU19MRURfVU5SRUdJU1RFUih0bGVkKTsKLW91dDE6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihtbGVkKTsKLW91dDoKLQlyZXR1cm4gcnY7Ci19CitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFzdXNfYWNwaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBBU1VTX0xBUFRPUF9OQU1FLAorCS5jbGFzcyA9IEFTVVNfTEFQVE9QX0NMQVNTLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZHMgPSBhc3VzX2RldmljZV9pZHMsCisJLmZsYWdzID0gQUNQSV9EUklWRVJfQUxMX05PVElGWV9FVkVOVFMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGFzdXNfYWNwaV9hZGQsCisJCS5yZW1vdmUgPSBhc3VzX2FjcGlfcmVtb3ZlLAorCQkubm90aWZ5ID0gYXN1c19hY3BpX25vdGlmeSwKKwkJfSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGFzdXNfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0OwogCi0JcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhc3VzX2hvdGtfZHJpdmVyKTsKKwlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7CiAKLQkvKgotCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UuICBXZSBvbmx5IHdhbnQgdGhpcyBtb2R1bGUgbG9hZGVkCi0JICogZm9yIEFTVVMgc3lzdGVtcywgYnV0IHRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0byBwcm9iZSB0aGUKLQkgKiBBQ1BJIG5hbWVzcGFjZSBmb3IgQVNVUyBISURzLiAgU28gd2UganVzdCByZXR1cm4gZmFpbHVyZSBpZgotCSAqIHdlIGRpZG4ndCBmaW5kIG9uZSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgbW9kdWxlIHRvIGJlCi0JICogdW5sb2FkZWQuCi0JICovCi0JaWYgKCFhc3VzX2hvdGtfZm91bmQpIHsKLQkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfYWNwaV9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGZhaWxfYWNwaV9kcml2ZXI7CisJaWYgKCFhc3VzX2RldmljZV9wcmVzZW50KSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub19kZXZpY2U7CiAJfQotCi0JcmVzdWx0ID0gYXN1c19pbnB1dF9pbml0KCk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX2lucHV0OwotCi0JLyogUmVnaXN0ZXIgcGxhdGZvcm0gc3R1ZmYgKi8KLQlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFzdXNwZl9kcml2ZXIpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kcml2ZXI7Ci0KLQlhc3VzcGZfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKEFTVVNfSE9US19GSUxFLCAtMSk7Ci0JaWYgKCFhc3VzcGZfZGV2aWNlKSB7Ci0JCXJlc3VsdCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOwotCX0KLQotCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXN1c3BmX2RldmljZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7Ci0KLQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmFzdXNwZl9kZXZpY2UtPmRldi5rb2JqLAotCQkJCSAgICAmYXN1c3BmX2F0dHJpYnV0ZV9ncm91cCk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3N5c2ZzOwotCi0JcmVzdWx0ID0gYXN1c19sZWRfaW5pdCgmYXN1c3BmX2RldmljZS0+ZGV2KTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGZhaWxfbGVkOwotCi0JaWYgKCFhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkpIHsKLQkJcmVzdWx0ID0gYXN1c19iYWNrbGlnaHRfaW5pdCgmYXN1c3BmX2RldmljZS0+ZGV2KTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZmFpbF9iYWNrbGlnaHQ7Ci0JfSBlbHNlCi0JCXByX2luZm8oIkJyaWdodG5lc3MgaWdub3JlZCwgbXVzdCBiZSBjb250cm9sbGVkIGJ5ICIKLQkJICAgICAgICJBQ1BJIHZpZGVvIGRyaXZlclxuIik7Ci0KIAlyZXR1cm4gMDsKIAotZmFpbF9iYWNrbGlnaHQ6Ci0gICAgICAgYXN1c19sZWRfZXhpdCgpOwotCi1mYWlsX2xlZDoKLSAgICAgICBzeXNmc19yZW1vdmVfZ3JvdXAoJmFzdXNwZl9kZXZpY2UtPmRldi5rb2JqLAotCQkJICAmYXN1c3BmX2F0dHJpYnV0ZV9ncm91cCk7Ci0KLWZhaWxfc3lzZnM6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChhc3VzcGZfZGV2aWNlKTsKLQotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCXBsYXRmb3JtX2RldmljZV9wdXQoYXN1c3BmX2RldmljZSk7Ci0KLWZhaWxfcGxhdGZvcm1fZGV2aWNlMToKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXN1c3BmX2RyaXZlcik7Ci0KLWZhaWxfcGxhdGZvcm1fZHJpdmVyOgotCWFzdXNfaW5wdXRfZXhpdCgpOwotCi1mYWlsX2lucHV0OgotCitmYWlsX25vX2RldmljZToKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYXN1c19hY3BpX2RyaXZlcik7CitmYWlsX2FjcGlfZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBhc3VzX2xhcHRvcF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfYWNwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworfQorCiBtb2R1bGVfaW5pdChhc3VzX2xhcHRvcF9pbml0KTsKIG1vZHVsZV9leGl0KGFzdXNfbGFwdG9wX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwppbmRleCBjMWQyYWVlLi4xMzgxNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwpAQCAtMTIyNSw5ICsxMjI1LDggQEAKIAllbHNlIGlmIChzdHJuY21wKG1vZGVsLCAiTTJOIiwgMykgPT0gMCB8fAogCQkgc3RybmNtcChtb2RlbCwgIk0zTiIsIDMpID09IDAgfHwKIAkJIHN0cm5jbXAobW9kZWwsICJNNU4iLCAzKSA9PSAwIHx8Ci0JCSBzdHJuY21wKG1vZGVsLCAiTTZOIiwgMykgPT0gMCB8fAogCQkgc3RybmNtcChtb2RlbCwgIlMxTiIsIDMpID09IDAgfHwKLQkJIHN0cm5jbXAobW9kZWwsICJTNU4iLCAzKSA9PSAwIHx8IHN0cm5jbXAobW9kZWwsICJXMU4iLCAzKSA9PSAwKQorCQkgc3RybmNtcChtb2RlbCwgIlM1TiIsIDMpID09IDApCiAJCXJldHVybiB4eE47CiAJZWxzZSBpZiAoc3RybmNtcChtb2RlbCwgIk0xIiwgMikgPT0gMCkKIAkJcmV0dXJuIE0xQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwppbmRleCBlZDkwMDgyLi4wMzVhN2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCkBAIC0zNCw2ICszNCwxMSBAQAogI2RlZmluZSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQJCTUKIAogCisjZGVmaW5lIENNUENfQUNDRUxfSElECQkiQUNDRTAwMDAiCisjZGVmaW5lIENNUENfVEFCTEVUX0hJRAkJIlRCTFQwMDAwIgorI2RlZmluZSBDTVBDX0JMX0hJRAkJIklQTUwyMDAiCisjZGVmaW5lIENNUENfS0VZU19ISUQJCSJGbkJUMDAwMCIKKwogLyoKICAqIEdlbmVyaWMgaW5wdXQgZGV2aWNlIGNvZGUuCiAgKi8KQEAgLTI4MiwxMCArMjg3LDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2FjY2VsX2RldmljZV9pZHNbXSA9IHsKLQl7IkFDQ0UwMDAwIiwgMH0sCisJe0NNUENfQUNDRUxfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2FjY2VsX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYWNjZWxfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC0zNjYsMTAgKzM3MCw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY190YWJsZXRfZGV2aWNlX2lkc1tdID0gewotCXsiVEJMVDAwMDAiLCAwfSwKKwl7Q01QQ19UQUJMRVRfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX3RhYmxldF9hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTQ3NywxNyArNDgwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19kZXZpY2VfaWRzW10gPSB7Ci0JeyJJUE1MMjAwIiwgMH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYmxfZGV2aWNlX2lkc1tdID0geworCXtDTVBDX0JMX0hJRCwgMH0sCiAJeyIiLCAwfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX2JsX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gImNtcGMiLAogCS5jbGFzcyA9ICJjbXBjIiwKLQkuaWRzID0gY21wY19kZXZpY2VfaWRzLAorCS5pZHMgPSBjbXBjX2JsX2RldmljZV9pZHMsCiAJLm9wcyA9IHsKIAkJLmFkZCA9IGNtcGNfYmxfYWRkLAogCQkucmVtb3ZlID0gY21wY19ibF9yZW1vdmUKQEAgLTUwNSw2ICs1MDcsMTAgQEAKIAlLRVlfQlJJR0hUTkVTU0RPV04sCiAJS0VZX0JSSUdIVE5FU1NVUCwKIAlLRVlfVkVORE9SLAorCUtFWV9VTktOT1dOLAorCUtFWV9DQU1FUkEsCisJS0VZX0JBQ0ssCisJS0VZX0ZPUldBUkQsCiAJS0VZX01BWAogfTsKIApAQCAtNTQwLDEwICs1NDYsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfa2V5c19kZXZpY2VfaWRzW10gPSB7Ci0JeyJGbkJUMDAwMCIsIDB9LAorCXtDTVBDX0tFWVNfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2tleXNfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19rZXlzX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjA3LDMgKzYxMiwxMyBAQAogCiBtb2R1bGVfaW5pdChjbXBjX2luaXQpOwogbW9kdWxlX2V4aXQoY21wY19leGl0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKKwl7Q01QQ19BQ0NFTF9ISUQsIDB9LAorCXtDTVBDX1RBQkxFVF9ISUQsIDB9LAorCXtDTVBDX0JMX0hJRCwgMH0sCisJe0NNUENfS0VZU19ISUQsIDB9LAorCXsiIiwgMH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19kZXZpY2VfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCAxYTM4N2U3Li4yNzQwYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC0yNiwxNyArMjYsOCBAQAogLyoKICAqIGNvbWFwbC1sYXB0b3AuYyAtIENvbXBhbCBsYXB0b3Agc3VwcG9ydC4KICAqCi0gKiBUaGlzIGRyaXZlciBleHBvcnRzIGEgZmV3IGZpbGVzIGluIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9jb21wYWwtbGFwdG9wLzoKLSAqCi0gKiAgIHdsYW4gLSB3bGFuIHN1YnN5c3RlbSBzdGF0ZTogY29udGFpbnMgMCBvciAxIChydykKLSAqCi0gKiAgIGJsdWV0b290aCAtIEJsdWV0b290aCBzdWJzeXN0ZW0gc3RhdGU6IGNvbnRhaW5zIDAgb3IgMSAocncpCi0gKgotICogICByYXcgLSByYXcgdmFsdWUgdGFrZW4gZnJvbSBlbWJlZGRlZCBjb250cm9sbGVyIHJlZ2lzdGVyIChybykKLSAqCi0gKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBwbGF0Zm9ybSBkZXZpY2UgYXR0cmlidXRlcyB0aGUgZHJpdmVyCi0gKiByZWdpc3RlcnMgaXRzZWxmIGluIHRoZSBMaW51eCBiYWNrbGlnaHQgY29udHJvbCBzdWJzeXN0ZW0gYW5kIGlzCi0gKiBhdmFpbGFibGUgdG8gdXNlcnNwYWNlIHVuZGVyIC9zeXMvY2xhc3MvYmFja2xpZ2h0L2NvbXBhbC1sYXB0b3AvLgorICogVGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIHJma2lsbCBzdWJzeXN0ZW0gYW5kCisgKiB0aGUgTGludXggYmFja2xpZ2h0IGNvbnRyb2wgc3Vic3lzdGVtLgogICoKICAqIFRoaXMgZHJpdmVyIG1pZ2h0IHdvcmsgb24gb3RoZXIgbGFwdG9wcyBwcm9kdWNlZCBieSBDb21wYWwuIElmIHlvdQogICogd2FudCB0byB0cnkgaXQgeW91IGNhbiBwYXNzIGZvcmNlPTEgYXMgYXJndW1lbnQgdG8gdGhlIG1vZHVsZSB3aGljaApAQCAtNTEsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCiAjZGVmaW5lIENPTVBBTF9EUklWRVJfVkVSU0lPTiAiMC4yLjYiCiAKQEAgLTYzLDYgKzU1LDEwIEBACiAjZGVmaW5lIFdMQU5fTUFTSwkweDAxCiAjZGVmaW5lIEJUX01BU0sgCTB4MDIKIAorc3RhdGljIHN0cnVjdCByZmtpbGwgKndpZmlfcmZraWxsOworc3RhdGljIHN0cnVjdCByZmtpbGwgKmJ0X3Jma2lsbDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOworCiBzdGF0aWMgaW50IGZvcmNlOwogbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJGb3JjZSBkcml2ZXIgbG9hZCwgaWdub3JlIERNSSBkYXRhIik7CkBAIC04OCw2NSArODQsNzUgQEAKIAlyZXR1cm4gKGludCkgcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IHNldF93bGFuX3N0YXRlKGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29tcGFsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogeworCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZykgZGF0YTsKIAl1OCByZXN1bHQsIHZhbHVlOwogCiAJZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7CiAKLQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCWlmIChzdGF0ZSkKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0IHwgV0xBTl9NQVNLKTsKLQkJZWxzZQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgJiB+V0xBTl9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9CisJaWYgKCFibG9ja2VkKQorCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IHJhZGlvKTsKKwllbHNlCisJCXZhbHVlID0gKHU4KSAocmVzdWx0ICYgfnJhZGlvKTsKKwllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgdmFsdWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2JsdWV0b290aF9zdGF0ZShpbnQgc3RhdGUpCi17Ci0JdTggcmVzdWx0LCB2YWx1ZTsKLQotCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwotCi0JaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQlpZiAoc3RhdGUpCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IEJUX01BU0spOwotCQllbHNlCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5CVF9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfd2lyZWxlc3Nfc3RhdGUoaW50ICp3bGFuLCBpbnQgKmJsdWV0b290aCkKK3N0YXRpYyB2b2lkIGNvbXBhbF9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpCiB7CiAJdTggcmVzdWx0OworCWJvb2wgaHdfYmxvY2tlZDsKIAogCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwogCi0JaWYgKHdsYW4pIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqd2xhbiA9IDA7Ci0JCWVsc2UKLQkJCSp3bGFuID0gcmVzdWx0ICYgV0xBTl9NQVNLOwotCX0KKwlod19ibG9ja2VkID0gIShyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spOworCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCBod19ibG9ja2VkKTsKK30KIAotCWlmIChibHVldG9vdGgpIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqYmx1ZXRvb3RoID0gMDsKLQkJZWxzZQotCQkJKmJsdWV0b290aCA9IChyZXN1bHQgJiBCVF9NQVNLKSA+PiAxOworc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGNvbXBhbF9yZmtpbGxfb3BzID0geworCS5wb2xsID0gY29tcGFsX3Jma2lsbF9wb2xsLAorCS5zZXRfYmxvY2sgPSBjb21wYWxfcmZraWxsX3NldCwKK307CisKK3N0YXRpYyBpbnQgc2V0dXBfcmZraWxsKHZvaWQpCit7CisJaW50IHJldDsKKworCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtd2lmaSIsICZjb21wYWxfZGV2aWNlLT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfV0xBTiwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIFdMQU5fTUFTSyk7CisJaWYgKCF3aWZpX3Jma2lsbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3dpZmk7CisKKwlidF9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC1ibHVldG9vdGgiLCAmY29tcGFsX2RldmljZS0+ZGV2LAorCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIEJUX01BU0spOworCWlmICghYnRfcmZraWxsKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jYXRlX2J0OwogCX0KKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIoYnRfcmZraWxsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3Rlcl9idDsKIAogCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXJfYnQ6CisJcmZraWxsX2Rlc3Ryb3koYnRfcmZraWxsKTsKKworZXJyX2FsbG9jYXRlX2J0OgorCXJma2lsbF91bnJlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKworZXJyX3dpZmk6CisJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyogQmFja2xpZ2h0IGRldmljZSBzdHVmZiAqLwpAQCAtMTY5LDg2ICsxNzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvbXBhbGJsX2RldmljZTsKIAotLyogUGxhdGZvcm0gZGV2aWNlICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfd2xhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBlbmFibGVkOwotCi0JcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlKCZlbmFibGVkLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBlbmFibGVkKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19yYXcoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JdTggcmVzdWx0OwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcmVzdWx0KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JaW50IHJldCwgZW5hYmxlZDsKLQotCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZShOVUxMLCAmZW5hYmxlZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgZW5hYmxlZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3dsYW5fc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgc3RhdGUsIHJldDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmc3RhdGUpICE9IDEgfHwgKHN0YXRlIDwgMCB8fCBzdGF0ZSA+IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHNldF93bGFuX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfYmx1ZXRvb3RoX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IHN0YXRlLCByZXQ7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSA8IDAgfHwgc3RhdGUgPiAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBzZXRfYmx1ZXRvb3RoX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGJsdWV0b290aCwgMDY0NCwgc2hvd19ibHVldG9vdGgsIHN0b3JlX2JsdWV0b290aF9zdGF0ZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIod2xhbiwgMDY0NCwgc2hvd193bGFuLCBzdG9yZV93bGFuX3N0YXRlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihyYXcsIDA0NDQsIHNob3dfcmF3LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmNvbXBhbF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2JsdWV0b290aC5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCi0JJmRldl9hdHRyX3Jhdy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gY29tcGFsX2F0dHJpYnV0ZXMKLX07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvbXBhbF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKQEAgLTI1Nyw4ICsxODMsNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOwotCiAvKiBJbml0aWFsaXphdGlvbiAqLwogCiBzdGF0aWMgaW50IGRtaV9jaGVja19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCkBAIC0zMTAsNiArMjM0LDQ3IEBACiAJCX0sCiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgogCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwdiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTEiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTIiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMjEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisKIAl7IH0KIH07CiAKQEAgLTM0OCwyMyArMzEzLDIxIEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGNvbXBhbF9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOworCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOwogCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjb21wYWxfZGV2aWNlLT5kZXYua29iaiwKLQkJJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOworCXJldCA9IHNldHVwX3Jma2lsbCgpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOworCQlnb3RvIGZhaWxfcmZraWxsOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGFsLWxhcHRvcDogZHJpdmVyICJDT01QQUxfRFJJVkVSX1ZFUlNJT04KIAkJIiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIAotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCitmYWlsX3Jma2lsbDoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKGNvbXBhbF9kZXZpY2UpOwogCi1mYWlsX3BsYXRmb3JtX2RldmljZTE6CitmYWlsX3BsYXRmb3JtX2RldmljZToKIAogCXBsYXRmb3JtX2RldmljZV9wdXQoY29tcGFsX2RldmljZSk7CiAKQEAgLTM4MiwxMCArMzQ1LDEzIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY29tcGFsX2NsZWFudXAodm9pZCkKIHsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY29tcGFsX2RldmljZS0+ZGV2LmtvYmosICZjb21wYWxfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihjb21wYWxfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29tcGFsX2RyaXZlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvbXBhbGJsX2RldmljZSk7CisJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKKwlyZmtpbGxfdW5yZWdpc3RlcihidF9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KGJ0X3Jma2lsbCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKIH0KQEAgLTQwMywzICszNjksOCBAQAogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGTDkxOnJ2cklGVDAwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6cm5KRkw5MjpydnJJRlQwMDoqIik7CiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSUZUMDA6cnZySUZUMDA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uOTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEwMTA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTAxMToqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEyMTA6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKaW5kZXggMzc4MDk5NC4uZWY2MTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaTgwNDIuaD4KICNpbmNsdWRlICIuLi8uLi9maXJtd2FyZS9kY2RiYXMuaCIKIAogI2RlZmluZSBCUklHSFRORVNTX1RPS0VOIDB4N2QKQEAgLTc5LDkgKzgxLDczIEBACiAJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjgiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBkZWxsX2JsYWNrbGlzdFtdID0geworCS8qIFN1cHBvcnRlZCBieSBjb21wYWwtbGFwdG9wICovCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMHYiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDExIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEyMTAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciAqYnVmZmVyOworc3RhdGljIHN0cnVjdCBwYWdlICpidWZmZXJwYWdlOworc3RhdGljIERFRklORV9NVVRFWChidWZmZXJfbXV0ZXgpOworCitzdGF0aWMgaW50IGh3c3dpdGNoX3N0YXRlOworCitzdGF0aWMgdm9pZCBnZXRfYnVmZmVyKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2J1ZmZlcih2b2lkKQoreworCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2RhX3RhYmxlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAkvKiBGaW5hbCB0b2tlbiBpcyBhIHRlcm1pbmF0b3IsIHNvIHdlIGRvbid0IHdhbnQgdG8gY29weSBpdCAqLwpAQCAtMTYwLDYgKzIyNiw4IEBACiAvKiBEZXJpdmVkIGZyb20gaW5mb3JtYXRpb24gaW4gRGVsbFdpcmVsZXNzQ3RsLmNwcDoKICAgIENsYXNzIDE3LCBzZWxlY3QgMTEgaXMgcmFkaW8gY29udHJvbC4gSXQgcmV0dXJucyBhbiBhcnJheSBvZiAzMi1iaXQgdmFsdWVzLgogCisgICBJbnB1dCBieXRlIDAgPSAwOiBXaXJlbGVzcyBpbmZvcm1hdGlvbgorCiAgICByZXN1bHRbMF06IHJldHVybiBjb2RlCiAgICByZXN1bHRbMV06CiAgICAgIEJpdCAwOiAgICAgIEhhcmR3YXJlIHN3aXRjaCBzdXBwb3J0ZWQKQEAgLTE4MCwzMyArMjQ4LDYyIEBACiAgICAgIEJpdHMgMjAtMzE6IFJlc2VydmVkCiAgICByZXN1bHRbMl06IE5WUkFNIHNpemUgaW4gYnl0ZXMKICAgIHJlc3VsdFszXTogTlZSQU0gZm9ybWF0IHZlcnNpb24gbnVtYmVyCisKKyAgIElucHV0IGJ5dGUgMCA9IDI6IFdpcmVsZXNzIHN3aXRjaCBjb25maWd1cmF0aW9uCisgICByZXN1bHRbMF06IHJldHVybiBjb2RlCisgICByZXN1bHRbMV06CisgICAgIEJpdCAwOiAgICAgIFdpZmkgY29udHJvbGxlZCBieSBzd2l0Y2gKKyAgICAgQml0IDE6ICAgICAgQmx1ZXRvb3RoIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdCAyOiAgICAgIFdXQU4gY29udHJvbGxlZCBieSBzd2l0Y2gKKyAgICAgQml0cyAzLTY6ICAgUmVzZXJ2ZWQKKyAgICAgQml0IDc6ICAgICAgV2lyZWxlc3Mgc3dpdGNoIGNvbmZpZyBsb2NrZWQKKyAgICAgQml0IDg6ICAgICAgV2lmaSBsb2NhdG9yIGVuYWJsZWQKKyAgICAgQml0cyA5LTE0OiAgUmVzZXJ2ZWQKKyAgICAgQml0IDE1OiAgICAgV2lmaSBsb2NhdG9yIHNldHRpbmcgbG9ja2VkCisgICAgIEJpdHMgMTYtMzE6IFJlc2VydmVkCiAqLwogCiBzdGF0aWMgaW50IGRlbGxfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IGRpc2FibGUgPSBibG9ja2VkID8gMSA6IDA7CiAJdW5zaWduZWQgbG9uZyByYWRpbyA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisJaW50IGh3c3dpdGNoX2JpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgLSAxOworCWludCByZXQgPSAwOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gKDEgfCAocmFkaW88PDgpIHwgKGRpc2FibGUgPDwgMTYpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CiAKLQlyZXR1cm4gMDsKKwkvKiBJZiB0aGUgaGFyZHdhcmUgc3dpdGNoIGNvbnRyb2xzIHRoaXMgcmFkaW8sIGFuZCB0aGUgaGFyZHdhcmUKKwkgICBzd2l0Y2ggaXMgZGlzYWJsZWQsIGRvbid0IGFsbG93IGNoYW5naW5nIHRoZSBzb2Z0d2FyZSBzdGF0ZSAqLworCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKKwkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlci0+aW5wdXRbMF0gPSAoMSB8IChyYWRpbzw8OCkgfCAoZGlzYWJsZSA8PCAxNikpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKworb3V0OgorCXJlbGVhc2VfYnVmZmVyKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZGVsbF9yZmtpbGxfcXVlcnkoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBzdGF0dXM7CiAJaW50IGJpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgKyAxNjsKKwlpbnQgaHdzd2l0Y2hfYml0ID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAtIDE7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOwotCXN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07CisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOwogCiAJcmZraWxsX3NldF9zd19zdGF0ZShyZmtpbGwsICEhKHN0YXR1cyAmIEJJVChiaXQpKSk7Ci0JcmZraWxsX3NldF9od19zdGF0ZShyZmtpbGwsICEoc3RhdHVzICYgQklUKDE2KSkpOworCisJaWYgKGh3c3dpdGNoX3N0YXRlICYgKEJJVChod3N3aXRjaF9iaXQpKSkKKwkJcmZraWxsX3NldF9od19zdGF0ZShyZmtpbGwsICEoc3RhdHVzICYgQklUKDE2KSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgZGVsbF9yZmtpbGxfb3BzID0gewpAQCAtMjE0LDE1ICszMTEsMzYgQEAKIAkucXVlcnkgPSBkZWxsX3Jma2lsbF9xdWVyeSwKIH07CiAKK3N0YXRpYyB2b2lkIGRlbGxfdXBkYXRlX3Jma2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCit7CisJaWYgKHdpZmlfcmZraWxsKQorCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKKwlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJZGVsbF9yZmtpbGxfcXVlcnkoYmx1ZXRvb3RoX3Jma2lsbCwgKHZvaWQgKikyKTsKKwlpZiAod3dhbl9yZmtpbGwpCisJCWRlbGxfcmZraWxsX3F1ZXJ5KHd3YW5fcmZraWxsLCAodm9pZCAqKTMpOworfQorc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGRlbGxfcmZraWxsX3dvcmssIGRlbGxfdXBkYXRlX3Jma2lsbCk7CisKKwogc3RhdGljIGludCBfX2luaXQgZGVsbF9zZXR1cF9yZmtpbGwodm9pZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgc3RhdHVzOwogCWludCByZXQ7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOwotCXN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07CisJaWYgKGRtaV9jaGVja19zeXN0ZW0oZGVsbF9ibGFja2xpc3QpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImRlbGwtbGFwdG9wOiBCbGFja2xpc3RlZCBoYXJkd2FyZSBkZXRlY3RlZCAtICIKKwkJCQkibm90IGVuYWJsaW5nIHJma2lsbFxuIik7CisJCXJldHVybiAwOworCX0KKworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJc3RhdHVzID0gYnVmZmVyLT5vdXRwdXRbMV07CisJYnVmZmVyLT5pbnB1dFswXSA9IDB4MjsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJaHdzd2l0Y2hfc3RhdGUgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOwogCiAJaWYgKChzdGF0dXMgJiAoMTw8MnwxPDw4KSkgPT0gKDE8PDJ8MTw8OCkpIHsKIAkJd2lmaV9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImRlbGwtd2lmaSIsICZwbGF0Zm9ybV9kZXZpY2UtPmRldiwKQEAgLTI5OCwzOSArNDE2LDQ5IEBACiAKIHN0YXRpYyBpbnQgZGVsbF9zZW5kX2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CisJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwotCWJ1ZmZlci5pbnB1dFsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKKwlidWZmZXItPmlucHV0WzFdID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKLQlpZiAoYnVmZmVyLmlucHV0WzBdID09IC0xKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYnVmZmVyLT5pbnB1dFswXSA9PSAtMSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCgpID4gMCkKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMSwgMik7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMik7CiAJZWxzZQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxLCAxKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxLCAxKTsKIAorb3V0OgorCXJlbGVhc2VfYnVmZmVyKCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGVsbF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CisJZ2V0X2J1ZmZlcigpOworCWJ1ZmZlci0+aW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwogCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSA9PSAtMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJ1ZmZlci0+aW5wdXRbMF0gPT0gLTEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoKSA+IDApCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDAsIDIpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDIpOwogCWVsc2UKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMCwgMSk7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMCwgMSk7CiAKLQlyZXR1cm4gYnVmZmVyLm91dHB1dFsxXTsKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZmZlci0+b3V0cHV0WzFdOwogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZGVsbF9vcHMgPSB7CkBAIC0zMzgsOSArNDY2LDMyIEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gZGVsbF9zZW5kX2ludGVuc2l0eSwKIH07CiAKK2Jvb2wgZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCisJCQkgICAgICBzdHJ1Y3Qgc2VyaW8gKnBvcnQpCit7CisJc3RhdGljIGJvb2wgZXh0ZW5kZWQ7CisKKwlpZiAoc3RyICYgMHgyMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHVubGlrZWx5KGRhdGEgPT0gMHhlMCkpIHsKKwkJZXh0ZW5kZWQgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICh1bmxpa2VseShleHRlbmRlZCkpIHsKKwkJc3dpdGNoIChkYXRhKSB7CisJCWNhc2UgMHg4OgorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZWxsX3Jma2lsbF93b3JrLAorCQkJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSk7CisJCQlicmVhazsKKwkJfQorCQlleHRlbmRlZCA9IGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGludCBfX2luaXQgZGVsbF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IG1heF9pbnRlbnNpdHkgPSAwOwogCWludCByZXQ7CiAKQEAgLTM2Niw2ICs1MTcsMTcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjsKIAorCS8qCisJICogQWxsb2NhdGUgYnVmZmVyIGJlbG93IDRHQiBmb3IgU01JIGRhdGEtLW9ubHkgMzItYml0IHBoeXNpY2FsIGFkZHIKKwkgKiBpcyBwYXNzZWQgdG8gU01JIGhhbmRsZXIuCisJICovCisJYnVmZmVycGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMik7CisKKwlpZiAoIWJ1ZmZlcnBhZ2UpCisJCWdvdG8gZmFpbF9idWZmZXI7CisJYnVmZmVyID0gcGFnZV9hZGRyZXNzKGJ1ZmZlcnBhZ2UpOworCW11dGV4X2luaXQoJmJ1ZmZlcl9tdXRleCk7CisKIAlyZXQgPSBkZWxsX3NldHVwX3Jma2lsbCgpOwogCiAJaWYgKHJldCkgewpAQCAtMzczLDYgKzUzNSwxMyBAQAogCQlnb3RvIGZhaWxfcmZraWxsOwogCX0KIAorCXJldCA9IGk4MDQyX2luc3RhbGxfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiZGVsbC1sYXB0b3A6IFVuYWJsZSB0byBpbnN0YWxsIGtleSBmaWx0ZXJcbiIpOworCQlnb3RvIGZhaWxfZmlsdGVyOworCX0KKwogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyogSW4gdGhlIGV2ZW50IG9mIGFuIEFDUEkgYmFja2xpZ2h0IGJlaW5nIGF2YWlsYWJsZSwgZG9uJ3QKIAkgKiByZWdpc3RlciB0aGUgcGxhdGZvcm0gY29udHJvbGxlci4KQEAgLTM4MSwxMyArNTUwLDEzIEBACiAJCXJldHVybiAwOwogI2VuZGlmCiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwotCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSAhPSAtMSkgewotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAwLCAyKTsKLQkJbWF4X2ludGVuc2l0eSA9IGJ1ZmZlci5vdXRwdXRbM107CisJZ2V0X2J1ZmZlcigpOworCWJ1ZmZlci0+aW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOworCWlmIChidWZmZXItPmlucHV0WzBdICE9IC0xKSB7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMCwgMik7CisJCW1heF9pbnRlbnNpdHkgPSBidWZmZXItPm91dHB1dFszXTsKIAl9CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCWlmIChtYXhfaW50ZW5zaXR5KSB7CiAJCWRlbGxfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoCkBAIC00MTAsOCArNTc5LDEzIEBACiAJcmV0dXJuIDA7CiAKIGZhaWxfYmFja2xpZ2h0OgorCWk4MDQyX3JlbW92ZV9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRlbGxfcmZraWxsX3dvcmspOworZmFpbF9maWx0ZXI6CiAJZGVsbF9jbGVhbnVwX3Jma2lsbCgpOwogZmFpbF9yZmtpbGw6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcnBhZ2UpOworZmFpbF9idWZmZXI6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbChwbGF0Zm9ybV9kZXZpY2UpOwogZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGxhdGZvcm1fZGV2aWNlKTsKQEAgLTQyNCw4ICs1OTgsMTYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGRlbGxfZXhpdCh2b2lkKQogeworCWk4MDQyX3JlbW92ZV9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRlbGxfcmZraWxsX3dvcmspOwogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihkZWxsX2JhY2tsaWdodF9kZXZpY2UpOwogCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsKKwlpZiAocGxhdGZvcm1fZGV2aWNlKSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2RldmljZSk7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworCX0KKwlrZnJlZShkYV90b2tlbnMpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOwogfQogCiBtb2R1bGVfaW5pdChkZWxsX2luaXQpOwpAQCAtNDM1LDMgKzYxNyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgbGFwdG9wIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KnN2bkRlbGxJbmMuOio6Y3Q4OioiKTsKK01PRFVMRV9BTElBUygiZG1pOipzdm5EZWxsQ29tcHV0ZXJDb3Jwb3JhdGlvbi46KjpjdDg6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCBlMmJlNmJiLi45YTg0NGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtNTc4LDYgKzU3OCw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCWJvb2wgYmxvY2tlZCA9IGVlZXBjX3dsYW5fcmZraWxsX2Jsb2NrZWQoZWVlcGMpOworCWJvb2wgYWJzZW50OworCXUzMiBsOwogCiAJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+d2xhbl9yZmtpbGwsIGJsb2NrZWQpOwpAQCAtNTkxLDYgKzU5MywyMiBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKKwkJaWYgKHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCAwLCBQQ0lfVkVORE9SX0lELCAmbCkpIHsKKwkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUENJIGNvbmZpZyBzcGFjZT9cbiIpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJCWFic2VudCA9IChsID09IDB4ZmZmZmZmZmYpOworCisJCWlmIChibG9ja2VkICE9IGFic2VudCkgeworCQkJcHJfd2FybmluZygiQklPUyBzYXlzIHdpcmVsZXNzIGxhbiBpcyAlcywgIgorCQkJCQkiYnV0IHRoZSBwY2kgZGV2aWNlIGlzICVzXG4iLAorCQkJCWJsb2NrZWQgPyAiYmxvY2tlZCIgOiAidW5ibG9ja2VkIiwKKwkJCQlhYnNlbnQgPyAiYWJzZW50IiA6ICJwcmVzZW50Iik7CisJCQlwcl93YXJuaW5nKCJza2lwcGVkIHdpcmVsZXNzIGhvdHBsdWcgYXMgcHJvYmFibHkgIgorCQkJCQkiaW5hcHByb3ByaWF0ZSBmb3IgdGhpcyBtb2RlbFxuIik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwogCQlpZiAoIWJsb2NrZWQpIHsKIAkJCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIDApOwogCQkJaWYgKGRldikgewpAQCAtMTI3Nyw3ICsxMjk1LDggQEAKIAkgKiBob3RwbHVnIGNvZGUuIEluIGZhY3QsIGN1cnJlbnQgaG90cGx1ZyBjb2RlIHNlZW1zIHRvIHVucGx1ZyBhbm90aGVyCiAJICogZGV2aWNlLi4uCiAJICovCi0JaWYgKHN0cmNtcChtb2RlbCwgIjEwMDVIQSIpID09IDAgfHwgc3RyY21wKG1vZGVsLCAiMTIwMU4iKSA9PSAwKSB7CisJaWYgKHN0cmNtcChtb2RlbCwgIjEwMDVIQSIpID09IDAgfHwgc3RyY21wKG1vZGVsLCAiMTIwMU4iKSA9PSAwIHx8CisJICAgIHN0cmNtcChtb2RlbCwgIjEwMDVQRSIpID09IDApIHsKIAkJZWVlcGMtPmhvdHBsdWdfZGlzYWJsZWQgPSB0cnVlOwogCQlwcl9pbmZvKCJ3bGFuIGhvdHBsdWcgZGlzYWJsZWRcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYWQ0YzQxNGQuLjNhYTU3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC04OSw2ICs4OSw3IEBACiAJe0tFX0tFWSwgMHgyMGU2LCBLRVlfUFJPRzF9LAogCXtLRV9LRVksIDB4MjE0MiwgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDIxM2IsIEtFWV9JTkZPfSwKKwl7S0VfS0VZLCAweDIxNjksIEtFWV9ESVJFQ1RJT059LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGViNjAzZjFkNS4uZTdiMGMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjg2LDYgKzI4Niw3IEBACiAJY2hhciBwYXJhbVszMl07CiAKIAlpbnQgKCppbml0KSAoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqKTsKKwltb2RlX3QgYmFzZV9wcm9jZnNfbW9kZTsKIAlzdHJ1Y3QgaWJtX3N0cnVjdCAqZGF0YTsKIH07CiAKQEAgLTIwODIsNiArMjA4Myw3IEBACiAKIHN0YXRpYyB2b2lkIHRwYWNwaV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IGhrZXlfZXZlbnQpOwogc3RhdGljIHZvaWQgaG90a2V5X2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpOworc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXAoY29uc3QgYm9vbCBtYXlfd2Fybik7CiAKIC8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICovCiAjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQpAQCAtMjI2NCw2ICsyMjY2LDggQEAKIAogCXJjID0gaG90a2V5X21hc2tfc2V0KChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X2RyaXZlcl9tYXNrKSAmCiAJCQkJCQkJfmhvdGtleV9zb3VyY2VfbWFzayk7CisJaG90a2V5X3BvbGxfc2V0dXAodHJ1ZSk7CisKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAKIAlyZXR1cm4gcmM7CkBAIC0yNTQ4LDcgKzI1NTIsNyBAQAogfQogCiAvKiBjYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQgKi8KLXN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGJvb2wgbWF5X3dhcm4pCitzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChjb25zdCBib29sIG1heV93YXJuKQogewogCWNvbnN0IHUzMiBwb2xsX2RyaXZlcl9tYXNrID0gaG90a2V5X2RyaXZlcl9tYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOwogCWNvbnN0IHUzMiBwb2xsX3VzZXJfbWFzayA9IGhvdGtleV91c2VyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CkBAIC0yNTc5LDcgKzI1ODMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXBfc2FmZShib29sIG1heV93YXJuKQorc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXBfc2FmZShjb25zdCBib29sIG1heV93YXJuKQogewogCW11dGV4X2xvY2soJmhvdGtleV9tdXRleCk7CiAJaG90a2V5X3BvbGxfc2V0dXAobWF5X3dhcm4pOwpAQCAtMjU5Nyw3ICsyNjAxLDExIEBACiAKICNlbHNlIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCiAKLXN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoYm9vbCBfX3VudXNlZCkKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGNvbnN0IGJvb2wgX191bnVzZWQpCit7Cit9CisKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoY29uc3QgYm9vbCBfX3VudXNlZCkKIHsKIH0KIApAQCAtMjYwNywxNiArMjYxNSwxMSBAQAogewogCXN3aXRjaCAodHBhY3BpX2xpZmVjeWNsZSkgewogCWNhc2UgVFBBQ1BJX0xJRkVfSU5JVDoKLQkJLyoKLQkJICogaG90a2V5X2luaXQgd2lsbCBjYWxsIGhvdGtleV9wb2xsX3NldHVwX3NhZmUKLQkJICogYXQgdGhlIGFwcHJvcHJpYXRlIG1vbWVudAotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBUUEFDUElfTElGRV9FWElUSU5HOgotCQlyZXR1cm4gLUVCVVNZOwogCWNhc2UgVFBBQ1BJX0xJRkVfUlVOTklORzoKIAkJaG90a2V5X3BvbGxfc2V0dXBfc2FmZShmYWxzZSk7CiAJCXJldHVybiAwOworCWNhc2UgVFBBQ1BJX0xJRkVfRVhJVElORzoKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKiBTaG91bGQgb25seSBoYXBwZW4gaWYgdHBhY3BpX2xpZmVjeWNsZSBpcyBjb3JydXB0ICovCkBAIC0yNjI3LDcgKzI2MzAsNyBAQAogc3RhdGljIHZvaWQgaG90a2V5X2lucHV0ZGV2X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAkvKiBkaXNhYmxlIGhvdGtleSBwb2xsaW5nIHdoZW4gcG9zc2libGUgKi8KLQlpZiAodHBhY3BpX2xpZmVjeWNsZSA9PSBUUEFDUElfTElGRV9SVU5OSU5HICYmCisJaWYgKHRwYWNwaV9saWZlY3ljbGUgIT0gVFBBQ1BJX0xJRkVfRVhJVElORyAmJgogCSAgICAhKGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9kcml2ZXJfbWFzaykpCiAJCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQpAQCAtMzY1NSwxMyArMzY1OCwxOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCS8qIDB4MzAwMC0weDNGRkY6IGJheS1yZWxhdGVkIHdha2V1cHMgKi8KLQkJCWlmIChoa2V5ID09IFRQX0hLRVlfRVZfQkFZRUpfQUNLKSB7CisJCQlzd2l0Y2ggKGhrZXkpIHsKKwkJCWNhc2UgVFBfSEtFWV9FVl9CQVlFSl9BQ0s6CiAJCQkJaG90a2V5X2F1dG9zbGVlcF9hY2sgPSAxOwogCQkJCXByaW50ayhUUEFDUElfSU5GTwogCQkJCSAgICAgICAiYmF5IGVqZWN0ZWRcbiIpOwogCQkJCWhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2UoKTsKIAkJCQlrbm93bl9ldiA9IHRydWU7Ci0JCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJY2FzZSBUUF9IS0VZX0VWX09QVERSVl9FSjoKKwkJCQkvKiBGSVhNRToga2ljayBsaWJhdGEgaWYgU0FUQSBsaW5rIG9mZmxpbmUgKi8KKwkJCQlrbm93bl9ldiA9IHRydWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgogCQkJCWtub3duX2V2ID0gZmFsc2U7CiAJCQl9CiAJCQlicmVhazsKQEAgLTM4NzAsNyArMzg3OSw3IEBACiAJVFBfQUNQSV9CTFVFVE9PVEhfSFdQUkVTRU5UCT0gMHgwMSwJLyogQmx1ZXRvb3RoIGh3IGF2YWlsYWJsZSAqLwogCVRQX0FDUElfQkxVRVRPT1RIX1JBRElPU1NXCT0gMHgwMiwJLyogQmx1ZXRvb3RoIHJhZGlvIGVuYWJsZWQgKi8KIAlUUF9BQ1BJX0JMVUVUT09USF9SRVNVTUVDVFJMCT0gMHgwNCwJLyogQmx1ZXRvb3RoIHN0YXRlIGF0IHJlc3VtZToKLQkJCQkJCSAgIG9mZiAvIGxhc3Qgc3RhdGUgKi8KKwkJCQkJCSAgIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlICovCiB9OwogCiBlbnVtIHsKQEAgLTM5MTYsMTAgKzM5MjUsMTEgQEAKIAl9CiAjZW5kaWYKIAotCS8qIFdlIG1ha2Ugc3VyZSB0byBrZWVwIFRQX0FDUElfQkxVRVRPT1RIX1JFU1VNRUNUUkwgb2ZmICovCi0Jc3RhdHVzID0gVFBfQUNQSV9CTFVFVE9PVEhfUkVTVU1FQ1RSTDsKIAlpZiAoc3RhdGUgPT0gVFBBQ1BJX1JGS19SQURJT19PTikKLQkJc3RhdHVzIHw9IFRQX0FDUElfQkxVRVRPT1RIX1JBRElPU1NXOworCQlzdGF0dXMgPSBUUF9BQ1BJX0JMVUVUT09USF9SQURJT1NTVworCQkJICB8IFRQX0FDUElfQkxVRVRPT1RIX1JFU1VNRUNUUkw7CisJZWxzZQorCQlzdGF0dXMgPSAwOwogCiAJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCBOVUxMLCAiU0JEQyIsICJ2ZCIsIHN0YXR1cykpCiAJCXJldHVybiAtRUlPOwpAQCAtNDA3MCw3ICs0MDgwLDcgQEAKIAlUUF9BQ1BJX1dBTkNBUkRfSFdQUkVTRU5UCT0gMHgwMSwJLyogV2FuIGh3IGF2YWlsYWJsZSAqLwogCVRQX0FDUElfV0FOQ0FSRF9SQURJT1NTVwk9IDB4MDIsCS8qIFdhbiByYWRpbyBlbmFibGVkICovCiAJVFBfQUNQSV9XQU5DQVJEX1JFU1VNRUNUUkwJPSAweDA0LAkvKiBXYW4gc3RhdGUgYXQgcmVzdW1lOgotCQkJCQkJICAgb2ZmIC8gbGFzdCBzdGF0ZSAqLworCQkJCQkJICAgMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKi8KIH07CiAKICNkZWZpbmUgVFBBQ1BJX1JGS19XV0FOX1NXX05BTUUJCSJ0cGFjcGlfd3dhbl9zdyIKQEAgLTQxMDcsMTAgKzQxMTcsMTEgQEAKIAl9CiAjZW5kaWYKIAotCS8qIFdlIG1ha2Ugc3VyZSB0byBzZXQgVFBfQUNQSV9XQU5DQVJEX1JFU1VNRUNUUkwgKi8KLQlzdGF0dXMgPSBUUF9BQ1BJX1dBTkNBUkRfUkVTVU1FQ1RSTDsKIAlpZiAoc3RhdGUgPT0gVFBBQ1BJX1JGS19SQURJT19PTikKLQkJc3RhdHVzIHw9IFRQX0FDUElfV0FOQ0FSRF9SQURJT1NTVzsKKwkJc3RhdHVzID0gVFBfQUNQSV9XQU5DQVJEX1JBRElPU1NXCisJCQkgfCBUUF9BQ1BJX1dBTkNBUkRfUkVTVU1FQ1RSTDsKKwllbHNlCisJCXN0YXR1cyA9IDA7CiAKIAlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIE5VTEwsICJTV0FOIiwgInZkIiwgc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CkBAIC00NjE5LDYgKzQ2MzAsMTAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogRXZlbiByZWFkcyBjYW4gY3Jhc2ggWC5vcmcsIHNvLi4uICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCiAJc3RhdHVzID0gdmlkZW9fb3V0cHV0c3dfZ2V0KCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CkBAIC00NjUyLDYgKzQ2NjcsMTAgQEAKIAlpZiAodmlkZW9fc3VwcG9ydGVkID09IFRQQUNQSV9WSURFT19OT05FKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCS8qIEV2ZW4gcmVhZHMgY2FuIGNyYXNoIFgub3JnLCBsZXQgYWxvbmUgd3JpdGVzLi4uICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCiAJZW5hYmxlID0gMDsKIAlkaXNhYmxlID0gMDsKIApAQCAtNjEzMywxMyArNjE1MiwxMyBAQAogCVRQQUNQSV9RX0lCTSgnMScsICdZJywgVFBBQ1BJX0JSR0hUX1FfRUMpLAkvKiBUNDMvcCBBVEkgKi8KIAogCS8qIE1vZGVscyB3aXRoIEFUSSBHUFVzIHRoYXQgY2FuIHVzZSBFQ05WUkFNICovCi0JVFBBQ1BJX1FfSUJNKCcxJywgJ1InLCBUUEFDUElfQlJHSFRfUV9FQyksCisJVFBBQ1BJX1FfSUJNKCcxJywgJ1InLCBUUEFDUElfQlJHSFRfUV9FQyksCS8qIFI1MCw1MSBUNDAtNDIgKi8KIAlUUEFDUElfUV9JQk0oJzEnLCAnUScsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCi0JVFBBQ1BJX1FfSUJNKCc3JywgJzYnLCBUUEFDUElfQlJHSFRfUV9BU0t8VFBBQ1BJX0JSR0hUX1FfRUMpLAorCVRQQUNQSV9RX0lCTSgnNycsICc2JywgVFBBQ1BJX0JSR0hUX1FfRUMpLAkvKiBSNTIgKi8KIAlUUEFDUElfUV9JQk0oJzcnLCAnOCcsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCiAKIAkvKiBNb2RlbHMgd2l0aCBJbnRlbCBFeHRyZW1lIEdyYXBoaWNzIDIgKi8KLQlUUEFDUElfUV9JQk0oJzEnLCAnVScsIFRQQUNQSV9CUkdIVF9RX05PRUMpLAorCVRQQUNQSV9RX0lCTSgnMScsICdVJywgVFBBQ1BJX0JSR0hUX1FfTk9FQyksCS8qIFg0MCAqLwogCVRQQUNQSV9RX0lCTSgnMScsICdWJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKIAlUUEFDUElfUV9JQk0oJzEnLCAnVycsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCiAKQEAgLTY1MjIsNyArNjU0MSw4IEBACiAJcmV0dXJuIHZvbHVtZV9zZXRfc3RhdHVzX2VjKHN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbnQgdm9sdW1lX3NldF9tdXRlX2VjKGNvbnN0IGJvb2wgbXV0ZSkKKy8qIHJldHVybnMgPCAwIG9uIGVycm9yLCAwIG9uIG5vIGNoYW5nZSwgMSBvbiBjaGFuZ2UgKi8KK3N0YXRpYyBpbnQgX192b2x1bWVfc2V0X211dGVfZWMoY29uc3QgYm9vbCBtdXRlKQogewogCWludCByYzsKIAl1OCBzLCBuOwpAQCAtNjUzNywyMiArNjU1NywzNyBAQAogCW4gPSAobXV0ZSkgPyBzIHwgVFBfRUNfQVVESU9fTVVURVNXX01TSyA6CiAJCSAgICAgcyAmIH5UUF9FQ19BVURJT19NVVRFU1dfTVNLOwogCi0JaWYgKG4gIT0gcykKKwlpZiAobiAhPSBzKSB7CiAJCXJjID0gdm9sdW1lX3NldF9zdGF0dXNfZWMobik7CisJCWlmICghcmMpCisJCQlyYyA9IDE7CisJfQogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ2b2x1bWVfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2b2x1bWVfc2V0X211dGUoY29uc3QgYm9vbCBtdXRlKQorc3RhdGljIGludCB2b2x1bWVfYWxzYV9zZXRfbXV0ZShjb25zdCBib29sIG11dGUpCiB7Ci0JZGJnX3ByaW50ayhUUEFDUElfREJHX01JWEVSLCAidHJ5aW5nIHRvICVzbXV0ZVxuIiwKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsICJBTFNBOiB0cnlpbmcgdG8gJXNtdXRlXG4iLAogCQkgICAobXV0ZSkgPyAiIiA6ICJ1biIpOwotCXJldHVybiB2b2x1bWVfc2V0X211dGVfZWMobXV0ZSk7CisJcmV0dXJuIF9fdm9sdW1lX3NldF9tdXRlX2VjKG11dGUpOwogfQogCi1zdGF0aWMgaW50IHZvbHVtZV9zZXRfdm9sdW1lX2VjKGNvbnN0IHU4IHZvbCkKK3N0YXRpYyBpbnQgdm9sdW1lX3NldF9tdXRlKGNvbnN0IGJvb2wgbXV0ZSkKK3sKKwlpbnQgcmM7CisKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsICJ0cnlpbmcgdG8gJXNtdXRlXG4iLAorCQkgICAobXV0ZSkgPyAiIiA6ICJ1biIpOworCisJcmMgPSBfX3ZvbHVtZV9zZXRfbXV0ZV9lYyhtdXRlKTsKKwlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IDA7Cit9CisKKy8qIHJldHVybnMgPCAwIG9uIGVycm9yLCAwIG9uIG5vIGNoYW5nZSwgMSBvbiBjaGFuZ2UgKi8KK3N0YXRpYyBpbnQgX192b2x1bWVfc2V0X3ZvbHVtZV9lYyhjb25zdCB1OCB2b2wpCiB7CiAJaW50IHJjOwogCXU4IHMsIG47CkBAIC02NTY5LDE5ICs2NjA0LDIyIEBACiAKIAluID0gKHMgJiB+VFBfRUNfQVVESU9fTFZMX01TSykgfCB2b2w7CiAKLQlpZiAobiAhPSBzKQorCWlmIChuICE9IHMpIHsKIAkJcmMgPSB2b2x1bWVfc2V0X3N0YXR1c19lYyhuKTsKKwkJaWYgKCFyYykKKwkJCXJjID0gMTsKKwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJnZvbHVtZV9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHZvbHVtZV9zZXRfdm9sdW1lKGNvbnN0IHU4IHZvbCkKK3N0YXRpYyBpbnQgdm9sdW1lX2Fsc2Ffc2V0X3ZvbHVtZShjb25zdCB1OCB2b2wpCiB7CiAJZGJnX3ByaW50ayhUUEFDUElfREJHX01JWEVSLAotCQkgICAidHJ5aW5nIHRvIHNldCB2b2x1bWUgbGV2ZWwgdG8gJWh1XG4iLCB2b2wpOwotCXJldHVybiB2b2x1bWVfc2V0X3ZvbHVtZV9lYyh2b2wpOworCQkgICAiQUxTQTogdHJ5aW5nIHRvIHNldCB2b2x1bWUgbGV2ZWwgdG8gJWh1XG4iLCB2b2wpOworCXJldHVybiBfX3ZvbHVtZV9zZXRfdm9sdW1lX2VjKHZvbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZvbHVtZV9hbHNhX25vdGlmeV9jaGFuZ2Uodm9pZCkKQEAgLTY2MjgsNyArNjY2Niw3IEBACiBzdGF0aWMgaW50IHZvbHVtZV9hbHNhX3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0JcmV0dXJuIHZvbHVtZV9zZXRfdm9sdW1lKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKwlyZXR1cm4gdm9sdW1lX2Fsc2Ffc2V0X3ZvbHVtZSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CiB9CiAKICNkZWZpbmUgdm9sdW1lX2Fsc2FfbXV0ZV9pbmZvIHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8KQEAgLTY2NTEsNyArNjY4OSw3IEBACiBzdGF0aWMgaW50IHZvbHVtZV9hbHNhX211dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXJldHVybiB2b2x1bWVfc2V0X211dGUoIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKwlyZXR1cm4gdm9sdW1lX2Fsc2Ffc2V0X211dGUoIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZvbHVtZV9hbHNhX2NvbnRyb2xfdm9sIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC04NDc3LDkgKzg1MTUsMTAgQEAKIAkJIiVzIGluc3RhbGxlZFxuIiwgaWJtLT5uYW1lKTsKIAogCWlmIChpYm0tPnJlYWQpIHsKLQkJbW9kZV90IG1vZGU7CisJCW1vZGVfdCBtb2RlID0gaWlibS0+YmFzZV9wcm9jZnNfbW9kZTsKIAotCQltb2RlID0gU19JUlVHTzsKKwkJaWYgKCFtb2RlKQorCQkJbW9kZSA9IFNfSVJVR087CiAJCWlmIChpYm0tPndyaXRlKQogCQkJbW9kZSB8PSBTX0lXVVNSOwogCQllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoaWJtLT5uYW1lLCBtb2RlLCBwcm9jX2RpciwKQEAgLTg2NzAsNiArODcwOSw3IEBACiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfVklERU8KIAl7CiAJCS5pbml0ID0gdmlkZW9faW5pdCwKKwkJLmJhc2VfcHJvY2ZzX21vZGUgPSBTX0lSVVNSLAogCQkuZGF0YSA9ICZ2aWRlb19kcml2ZXJfZGF0YSwKIAl9LAogI2VuZGlmCkBAIC05MDMyLDYgKzkwNzIsOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KKworCXRwYWNwaV9saWZlY3ljbGUgPSBUUEFDUElfTElGRV9SVU5OSU5HOworCiAJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRwYWNwaV9pbnB1dGRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKFRQQUNQSV9FUlIgInVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwpAQCAtOTA0MSw3ICs5MDg0LDYgQEAKIAkJdHBfZmVhdHVyZXMuaW5wdXRfZGV2aWNlX3JlZ2lzdGVyZWQgPSAxOwogCX0KIAotCXRwYWNwaV9saWZlY3ljbGUgPSBUUEFDUElfTElGRV9SVU5OSU5HOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCmluZGV4IDc3YmY1ZDguLjQwNWI5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTYyLDkgKzYzLDEwIEBACiAKIC8qIFRvc2hpYmEgQUNQSSBtZXRob2QgcGF0aHMgKi8KICNkZWZpbmUgTUVUSE9EX0xDRF9CUklHSFRORVNTCSJcXF9TQl8uUENJMC5WR0FfLkxDRF8uX0JDTSIKLSNkZWZpbmUgTUVUSE9EX0hDSV8xCQkiXFxfU0JfLlZBTEQuR0hDSSIKLSNkZWZpbmUgTUVUSE9EX0hDSV8yCQkiXFxfU0JfLlZBTFouR0hDSSIKKyNkZWZpbmUgVE9TSF9JTlRFUkZBQ0VfMQkiXFxfU0JfLlZBTEQiCisjZGVmaW5lIFRPU0hfSU5URVJGQUNFXzIJIlxcX1NCXy5WQUxaIgogI2RlZmluZSBNRVRIT0RfVklERU9fT1VUCSJcXF9TQl8uVkFMWC5EU1NYIgorI2RlZmluZSBHSENJX01FVEhPRAkJIi5HSENJIgogCiAvKiBUb3NoaWJhIEhDSSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKICAqCkBAIC0xMTYsNiArMTE4LDM2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCB0b3NoaWJhX2RldmljZV9pZHMpOwogCitzdHJ1Y3Qga2V5X2VudHJ5IHsKKwljaGFyIHR5cGU7CisJdTE2IGNvZGU7CisJdTE2IGtleWNvZGU7Cit9OworCitlbnVtIHtLRV9LRVksIEtFX0VORH07CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IHRvc2hpYmFfYWNwaV9rZXltYXBbXSAgPSB7CisJe0tFX0tFWSwgMHgxMDEsIEtFWV9NVVRFfSwKKwl7S0VfS0VZLCAweDEzYiwgS0VZX0NPRkZFRX0sCisJe0tFX0tFWSwgMHgxM2MsIEtFWV9CQVRURVJZfSwKKwl7S0VfS0VZLCAweDEzZCwgS0VZX1NMRUVQfSwKKwl7S0VfS0VZLCAweDEzZSwgS0VZX1NVU1BFTkR9LAorCXtLRV9LRVksIDB4MTNmLCBLRVlfU1dJVENIVklERU9NT0RFfSwKKwl7S0VfS0VZLCAweDE0MCwgS0VZX0JSSUdIVE5FU1NET1dOfSwKKwl7S0VfS0VZLCAweDE0MSwgS0VZX0JSSUdIVE5FU1NVUH0sCisJe0tFX0tFWSwgMHgxNDIsIEtFWV9XTEFOfSwKKwl7S0VfS0VZLCAweDE0MywgS0VZX1BST0cxfSwKKwl7S0VfS0VZLCAweGIwNSwgS0VZX1BST0cyfSwKKwl7S0VfS0VZLCAweGIwNiwgS0VZX1dXV30sCisJe0tFX0tFWSwgMHhiMDcsIEtFWV9NQUlMfSwKKwl7S0VfS0VZLCAweGIzMCwgS0VZX1NUT1B9LAorCXtLRV9LRVksIDB4YjMxLCBLRVlfUFJFVklPVVNTT05HfSwKKwl7S0VfS0VZLCAweGIzMiwgS0VZX05FWFRTT05HfSwKKwl7S0VfS0VZLCAweGIzMywgS0VZX1BMQVlQQVVTRX0sCisJe0tFX0tFWSwgMHhiNWEsIEtFWV9NRURJQX0sCisJe0tFX0VORCwgMCwgMH0sCit9OworCiAvKiB1dGlsaXR5CiAgKi8KIApAQCAtMjUxLDYgKzI4Myw4IEBACiBzdHJ1Y3QgdG9zaGliYV9hY3BpX2RldiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHJma2lsbCAqYnRfcmZrOworCXN0cnVjdCBpbnB1dF9kZXYgKmhvdGtleV9kZXY7CisJYWNwaV9oYW5kbGUgaGFuZGxlOwogCiAJY29uc3QgY2hhciAqYnRfbmFtZTsKIApAQCAtNzExLDggKzc0NSwxNjEgQEAKICAgICAgICAgLnVwZGF0ZV9zdGF0dXMgID0gc2V0X2xjZF9zdGF0dXMsCiB9OwogCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZShpbnQgY29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IHRvc2hpYmFfYWNwaV9rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmNvZGUpCisJCQlyZXR1cm4ga2V5OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICp0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X2tleWNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSB0b3NoaWJhX2FjcGlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5rZXljb2RlICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpCisJCQlyZXR1cm4ga2V5OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9hY3BpX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJICAgaW50ICprZXljb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleSA9IHRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCisJaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7CisJCSprZXljb2RlID0ga2V5LT5rZXljb2RlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzY2FuY29kZSwKKwkJCQkgICBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJaW50IG9sZF9rZXljb2RlOworCisJaWYgKGtleWNvZGUgPCAwIHx8IGtleWNvZGUgPiBLRVlfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtleSA9IHRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgeworCQlvbGRfa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwkJa2V5LT5rZXljb2RlID0ga2V5Y29kZTsKKwkJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCWlmICghdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9rZXljb2RlKG9sZF9rZXljb2RlKSkKKwkJCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgdG9zaGliYV9hY3BpX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwl1MzIgaGNpX3Jlc3VsdCwgdmFsdWU7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJaWYgKGV2ZW50ICE9IDB4ODApCisJCXJldHVybjsKKwlkbyB7CisJCWhjaV9yZWFkMShIQ0lfU1lTVEVNX0VWRU5ULCAmdmFsdWUsICZoY2lfcmVzdWx0KTsKKwkJaWYgKGhjaV9yZXN1bHQgPT0gSENJX1NVQ0NFU1MpIHsKKwkJCWlmICh2YWx1ZSA9PSAweDEwMCkKKwkJCQljb250aW51ZTsKKwkJCS8qIGFjdCBvbiBrZXkgcHJlc3M7IGlnbm9yZSBrZXkgcmVsZWFzZSAqLworCQkJaWYgKHZhbHVlICYgMHg4MCkKKwkJCQljb250aW51ZTsKKworCQkJa2V5ID0gdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZQorCQkJCSh2YWx1ZSk7CisJCQlpZiAoIWtleSkgeworCQkJCXByaW50ayhNWV9JTkZPICJVbmtub3duIGtleSAleFxuIiwKKwkJCQkgICAgICAgdmFsdWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaW5wdXRfcmVwb3J0X2tleSh0b3NoaWJhX2FjcGkuaG90a2V5X2RldiwKKwkJCQkJIGtleS0+a2V5Y29kZSwgMSk7CisJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCisJCQkJCSBrZXktPmtleWNvZGUsIDApOworCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CisJCX0gZWxzZSBpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfTk9UX1NVUFBPUlRFRCkgeworCQkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIHVucmVzb2x2ZWQgaXNzdWUgb24KKwkJCSAqIHNvbWUgbWFjaGluZXMgd2hlcmUgc3lzdGVtIGV2ZW50cyBzcG9yYWRpY2FsbHkKKwkJCSAqIGJlY29tZSBkaXNhYmxlZC4gKi8KKwkJCWhjaV93cml0ZTEoSENJX1NZU1RFTV9FVkVOVCwgMSwgJmhjaV9yZXN1bHQpOworCQkJcHJpbnRrKE1ZX05PVElDRSAiUmUtZW5hYmxlZCBob3RrZXlzXG4iKTsKKwkJfQorCX0gd2hpbGUgKGhjaV9yZXN1bHQgIT0gSENJX0VNUFRZKTsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoY2hhciAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IHJlc3VsdDsKKwljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZGV2aWNlLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBnZXQgbm90aWZpY2F0aW9uIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5oYW5kbGUgPSBoYW5kbGU7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJFTkFCIiwgTlVMTCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gZW5hYmxlIGhvdGtleXNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICAgIHRvc2hpYmFfYWNwaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGluc3RhbGwgaG90a2V5IG5vdGlmaWNhdGlvblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3NoaWJhX2FjcGkuaG90a2V5X2RldikgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5uYW1lID0gIlRvc2hpYmEgaW5wdXQgZGV2aWNlIjsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+cGh5cyA9IGRldmljZTsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5nZXRrZXljb2RlID0gdG9zaGliYV9hY3BpX2dldGtleWNvZGU7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPnNldGtleWNvZGUgPSB0b3NoaWJhX2FjcGlfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc2V0X2JpdChFVl9LRVksIHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5ldmJpdCk7CisJCXNldF9iaXQoa2V5LT5rZXljb2RlLCB0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+a2V5Yml0KTsKKwl9CisKKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQogeworCWlmICh0b3NoaWJhX2FjcGkuaG90a2V5X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCiAJaWYgKHRvc2hpYmFfYWNwaS5idF9yZmspIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIodG9zaGliYV9hY3BpLmJ0X3Jmayk7CiAJCXJma2lsbF9kZXN0cm95KHRvc2hpYmFfYWNwaS5idF9yZmspOwpAQCAtNzI2LDYgKzkxMyw5IEBACiAJaWYgKHRvc2hpYmFfcHJvY19kaXIpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7CiAKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcih0b3NoaWJhX2FjcGkuaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJICAgdG9zaGliYV9hY3BpX25vdGlmeSk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b3NoaWJhX2FjcGkucF9kZXYpOwogCiAJcmV0dXJuOwpAQCAtNzQyLDExICs5MzIsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBzaW1wbGUgZGV2aWNlIGRldGVjdGlvbjogbG9vayBmb3IgSENJIG1ldGhvZCAqLwotCWlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8xKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMTsKLQllbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8yKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMjsKLQllbHNlCisJaWYgKGlzX3ZhbGlkX2FjcGlfcGF0aChUT1NIX0lOVEVSRkFDRV8xIEdIQ0lfTUVUSE9EKSkgeworCQltZXRob2RfaGNpID0gVE9TSF9JTlRFUkZBQ0VfMSBHSENJX01FVEhPRDsKKwkJaWYgKHRvc2hpYmFfYWNwaV9zZXR1cF9rZXlib2FyZChUT1NIX0lOVEVSRkFDRV8xKSkKKwkJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gYWN0aXZhdGUgaG90a2V5c1xuIik7CisJfSBlbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoVE9TSF9JTlRFUkZBQ0VfMiBHSENJX01FVEhPRCkpIHsKKwkJbWV0aG9kX2hjaSA9IFRPU0hfSU5URVJGQUNFXzIgR0hDSV9NRVRIT0Q7CisJCWlmICh0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoVE9TSF9JTlRFUkZBQ0VfMikpCisJCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGFjdGl2YXRlIGhvdGtleXNcbiIpOworCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhNWV9JTkZPICJUb3NoaWJhIExhcHRvcCBBQ1BJIEV4dHJhcyB2ZXJzaW9uICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9ibHVldG9vdGguYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYmx1ZXRvb3RoLmMKaW5kZXggYTM1MDQxOC4uOTQ0MDY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9ibHVldG9vdGguYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2JsdWV0b290aC5jCkBAIC01Nyw3ICs1Nyw3IEBACiBzdGF0aWMgaW50IHRvc2hpYmFfYmx1ZXRvb3RoX2VuYWJsZShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJYWNwaV9zdGF0dXMgcmVzMSwgcmVzMjsKLQlhY3BpX2ludGVnZXIgcmVzdWx0OworCXU2NCByZXN1bHQ7CiAKIAkvKgogCSAqIFF1ZXJ5IEFDUEkgdG8gdmVyaWZ5IFJGS2lsbCBzd2l0Y2ggaXMgc2V0IHRvICdvbicuCkBAIC05NSw3ICs5NSw3IEBACiBzdGF0aWMgaW50IHRvc2hpYmFfYnRfcmZraWxsX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JYWNwaV9pbnRlZ2VyIGJ0X3ByZXNlbnQ7CisJdTY0IGJ0X3ByZXNlbnQ7CiAJaW50IHJlc3VsdCA9IC1FTk9ERVY7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCBiMTA0MzAyLi4wOWU5OTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAgKi8KIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV93bWlfZWNfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkgICAgICB1MzIgYml0cywgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCSAgICAgIHUzMiBiaXRzLCB1NjQgKnZhbHVlLAogCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KQogewogCWludCByZXN1bHQgPSAwLCBpID0gMDsKQEAgLTgxMyw3ICs4MTMsNyBAQAogCiAJaWYgKGZ1bmN0aW9uID09IEFDUElfUkVBRCkgewogCQlyZXN1bHQgPSBlY19yZWFkKGFkZHJlc3MsICZ0ZW1wKTsKLQkJKCp2YWx1ZSkgfD0gKChhY3BpX2ludGVnZXIpdGVtcCkgPDwgaTsKKwkJKCp2YWx1ZSkgfD0gKCh1NjQpdGVtcCkgPDwgaTsKIAl9IGVsc2UgewogCQl0ZW1wID0gMHhmZiAmICgoKnZhbHVlKSA+PiBpKTsKIAkJcmVzdWx0ID0gZWNfd3JpdGUoYWRkcmVzcywgdGVtcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggZDRiM2Q2Ny4uYmYxNDY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAtOTgsMTAgKzk4LDEwIEBACiAJICBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYmF0dGVyeSBtZWFzdXJlZCBieSBXTTk3eHggYXV4IHBvcnQuCiAKIGNvbmZpZyBCQVRURVJZX0JRMjd4MDAKLQl0cmlzdGF0ZSAiQlEyNzIwMCBiYXR0ZXJ5IGRyaXZlciIKKwl0cmlzdGF0ZSAiQlEyN3gwMCBiYXR0ZXJ5IGRyaXZlciIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcmllcyB3aXRoIEJRMjcyMDAoSTJDKSBjaGlwLgorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYmF0dGVyaWVzIHdpdGggQlEyN3gwMCAoSTJDKSBjaGlwcy4KIAogY29uZmlnIEJBVFRFUllfREE5MDMwCiAJdHJpc3RhdGUgIkRBOTAzMCBiYXR0ZXJ5IGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCmluZGV4IDYyYmI5ODEuLmJlY2UzM2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKQEAgLTI2LDEzICsyNiwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjAuMCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCQkiMS4xLjAiCiAKICNkZWZpbmUgQlEyN3gwMF9SRUdfVEVNUAkJMHgwNgogI2RlZmluZSBCUTI3eDAwX1JFR19WT0xUCQkweDA4Ci0jZGVmaW5lIEJRMjd4MDBfUkVHX1JTT0MJCTB4MEIgLyogUmVsYXRpdmUgU3RhdGUtb2YtQ2hhcmdlICovCiAjZGVmaW5lIEJRMjd4MDBfUkVHX0FJCQkJMHgxNAogI2RlZmluZSBCUTI3eDAwX1JFR19GTEFHUwkJMHgwQQorI2RlZmluZSBCUTI3eDAwX1JFR19UVEUJCQkweDE2CisjZGVmaW5lIEJRMjd4MDBfUkVHX1RURgkJCTB4MTgKKyNkZWZpbmUgQlEyN3gwMF9SRUdfVFRFQ1AJCTB4MjYKKworI2RlZmluZSBCUTI3MDAwX1JFR19SU09DCQkweDBCIC8qIFJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZSAqLworI2RlZmluZSBCUTI3MDAwX0ZMQUdfQ0hHUwkJQklUKDcpCisKKyNkZWZpbmUgQlEyNzUwMF9SRUdfU09DCQkJMHgyYworI2RlZmluZSBCUTI3NTAwX0ZMQUdfRFNDCQlCSVQoMCkKKyNkZWZpbmUgQlEyNzUwMF9GTEFHX0ZDCQkJQklUKDkpCiAKIC8qIElmIHRoZSBzeXN0ZW0gaGFzIHNldmVyYWwgYmF0dGVyaWVzIHdlIG5lZWQgYSBkaWZmZXJlbnQgbmFtZSBmb3IgZWFjaAogICogb2YgdGhlbS4uLgpAQCAtNDYsMjUgKzU1LDI4IEBACiAJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSk7CiB9OwogCitlbnVtIGJxMjd4MDBfY2hpcCB7IEJRMjcwMDAsIEJRMjc1MDAgfTsKKwogc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gewogCXN0cnVjdCBkZXZpY2UgCQkqZGV2OwogCWludAkJCWlkOwotCWludAkJCXZvbHRhZ2VfdVY7Ci0JaW50CQkJY3VycmVudF91QTsKLQlpbnQJCQl0ZW1wX0M7Ci0JaW50CQkJY2hhcmdlX3Jzb2M7CiAJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMJKmJ1czsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdDsKKwllbnVtIGJxMjd4MDBfY2hpcAljaGlwOwogCiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKIH07CiAKIHN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBicTI3eDAwX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCiAJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKIAlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfQVZHLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRlVMTF9OT1csCiB9OwogCiAvKgpAQCAtNzQsMTYgKzg2LDExIEBACiBzdGF0aWMgaW50IGJxMjd4MDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKIAkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZGktPmJ1cy0+cmVhZChyZWcsIHJ0X3ZhbHVlLCBiX3NpbmdsZSwgZGkpOwotCSpydF92YWx1ZSA9IGJlMTZfdG9fY3B1KCpydF92YWx1ZSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBkaS0+YnVzLT5yZWFkKHJlZywgcnRfdmFsdWUsIGJfc2luZ2xlLCBkaSk7CiB9CiAKIC8qCi0gKiBSZXR1cm4gdGhlIGJhdHRlcnkgdGVtcGVyYXR1cmUgaW4gQ2Vsc2l1cyBkZWdyZWVzCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgdGVtcGVyYXR1cmUgaW4gdGVudGhzIG9mIGRlZ3JlZSBDZWxzaXVzCiAgKiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLgogICovCiBzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV90ZW1wZXJhdHVyZShzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCkBAIC05Nyw3ICsxMDQsMTAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gKHRlbXAgPj4gMikgLSAyNzM7CisJaWYgKGRpLT5jaGlwID09IEJRMjc1MDApCisJCXJldHVybiB0ZW1wIC0gMjczMTsKKwllbHNlCisJCXJldHVybiAoKHRlbXAgPj4gMikgLSAyNzMpICogMTA7CiB9CiAKIC8qCkBAIC0xMTUsNyArMTI1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gdm9sdDsKKwlyZXR1cm4gdm9sdCAqIDEwMDA7CiB9CiAKIC8qCkBAIC0xMzQsMTYgKzE0NCwyMyBAQAogCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIGN1cnJlbnRcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX0ZMQUdTLCAmZmxhZ3MsIDAsIGRpKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIGZsYWdzXG4iKTsKLQkJcmV0dXJuIDA7CisKKwlpZiAoZGktPmNoaXAgPT0gQlEyNzUwMCkgeworCQkvKiBicTI3NTAwIHJldHVybnMgc2lnbmVkIHZhbHVlICovCisJCWN1cnIgPSAoaW50KShzMTYpY3VycjsKKwl9IGVsc2UgeworCQlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBmbGFnc1xuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZmxhZ3MgJiBCUTI3MDAwX0ZMQUdfQ0hHUykgeworCQkJZGV2X2RiZyhkaS0+ZGV2LCAibmVnYXRpdmUgY3VycmVudCFcbiIpOworCQkJY3VyciA9IC1jdXJyOworCQl9CiAJfQotCWlmICgoZmxhZ3MgJiAoMSA8PCA3KSkgIT0gMCkgewotCQlkZXZfZGJnKGRpLT5kZXYsICJuZWdhdGl2ZSBjdXJyZW50IVxuIik7Ci0JCXJldHVybiAtY3VycjsKLQl9Ci0JcmV0dXJuIGN1cnI7CisKKwlyZXR1cm4gY3VyciAqIDEwMDA7CiB9CiAKIC8qCkBAIC0xNTUsMTMgKzE3Miw3MCBAQAogCWludCByZXQ7CiAJaW50IHJzb2MgPSAwOwogCi0JcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1JTT0MsICZyc29jLCAxLCBkaSk7CisJaWYgKGRpLT5jaGlwID09IEJRMjc1MDApCisJCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3NTAwX1JFR19TT0MsICZyc29jLCAwLCBkaSk7CisJZWxzZQorCQlyZXQgPSBicTI3eDAwX3JlYWQoQlEyNzAwMF9SRUdfUlNPQywgJnJzb2MsIDEsIGRpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgcmVsYXRpdmUgU3RhdGUtb2YtQ2hhcmdlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gcnNvYyA+PiA4OworCXJldHVybiByc29jOworfQorCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV9zdGF0dXMoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpLAorCQkJCSAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlpbnQgZmxhZ3MgPSAwOworCWludCBzdGF0dXM7CisJaW50IHJldDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19GTEFHUywgJmZsYWdzLCAwLCBkaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBmbGFnc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGRpLT5jaGlwID09IEJRMjc1MDApIHsKKwkJaWYgKGZsYWdzICYgQlEyNzUwMF9GTEFHX0ZDKQorCQkJc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19GVUxMOworCQllbHNlIGlmIChmbGFncyAmIEJRMjc1MDBfRkxBR19EU0MpCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCQllbHNlCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCX0gZWxzZSB7CisJCWlmIChmbGFncyAmIEJRMjcwMDBfRkxBR19DSEdTKQorCQkJc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lORzsKKwkJZWxzZQorCQkJc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKwl9CisKKwl2YWwtPmludHZhbCA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYSB0aW1lIHJlZ2lzdGVyLgorICogUmV0dXJuIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3RpbWUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpLCBpbnQgcmVnLAorCQkJCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJaW50IHR2YWwgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBicTI3eDAwX3JlYWQocmVnLCAmdHZhbCwgMCwgZGkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyByZWdpc3RlciAlMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh0dmFsID09IDY1NTM1KQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwl2YWwtPmludHZhbCA9IHR2YWwgKiA2MDsKKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSB0b19icTI3eDAwX2RldmljZV9pbmZvKHgpIGNvbnRhaW5lcl9vZigoeCksIFwKQEAgLTE3MSw5ICsyNDUsMTMgQEAKIAkJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAogCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQogeworCWludCByZXQgPSAwOwogCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IHRvX2JxMjd4MDBfZGV2aWNlX2luZm8ocHN5KTsKIAogCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCXJldCA9IGJxMjd4MDBfYmF0dGVyeV9zdGF0dXMoZGksIHZhbCk7CisJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgogCQl2YWwtPmludHZhbCA9IGJxMjd4MDBfYmF0dGVyeV92b2x0YWdlKGRpKTsKQEAgLTE4OSwxMSArMjY3LDIwIEBACiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QOgogCQl2YWwtPmludHZhbCA9IGJxMjd4MDBfYmF0dGVyeV90ZW1wZXJhdHVyZShkaSk7CiAJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9OT1c6CisJCXJldCA9IGJxMjd4MDBfYmF0dGVyeV90aW1lKGRpLCBCUTI3eDAwX1JFR19UVEUsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9BVkc6CisJCXJldCA9IGJxMjd4MDBfYmF0dGVyeV90aW1lKGRpLCBCUTI3eDAwX1JFR19UVEVDUCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0ZVTExfTk9XOgorCQlyZXQgPSBicTI3eDAwX2JhdHRlcnlfdGltZShkaSwgQlEyN3gwMF9SRUdfVFRGLCB2YWwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBicTI3eDAwX3Bvd2Vyc3VwcGx5X2luaXQoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQpAQCAtMjA2LDEwICsyOTMsMTAgQEAKIH0KIAogLyoKLSAqIEJRMjcyMDAgc3BlY2lmaWMgY29kZQorICogaTJjIHNwZWNpZmljIGNvZGUKICAqLwogCi1zdGF0aWMgaW50IGJxMjcyMDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKK3N0YXRpYyBpbnQgYnEyN3gwMF9yZWFkX2kyYyh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKIAkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGktPmNsaWVudDsKQEAgLTIzOCw3ICszMjUsNyBAQAogCQllcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOwogCQlpZiAoZXJyID49IDApIHsKIAkJCWlmICghYl9zaW5nbGUpCi0JCQkJKnJ0X3ZhbHVlID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOworCQkJCSpydF92YWx1ZSA9IGdldF91bmFsaWduZWRfbGUxNihkYXRhKTsKIAkJCWVsc2UKIAkJCQkqcnRfdmFsdWUgPSBkYXRhWzBdOwogCkBAIC0yNDgsNyArMzM1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGJxMjcyMDBfYmF0dGVyeV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWNoYXIgKm5hbWU7CkBAIC0yNjcsNyArMzU0LDcgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImJxMjcyMDAtJWQiLCBudW0pOworCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzLSVkIiwgaWQtPm5hbWUsIG51bSk7CiAJaWYgKCFuYW1lKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBuYW1lXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKQEAgLTI4MSw2ICszNjgsNyBAQAogCQlnb3RvIGJhdHRfZmFpbGVkXzI7CiAJfQogCWRpLT5pZCA9IG51bTsKKwlkaS0+Y2hpcCA9IGlkLT5kcml2ZXJfZGF0YTsKIAogCWJ1cyA9IGt6YWxsb2Moc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1cykgewpAQCAtMjkzLDcgKzM4MSw3IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGkpOwogCWRpLT5kZXYgPSAmY2xpZW50LT5kZXY7CiAJZGktPmJhdC5uYW1lID0gbmFtZTsKLQlidXMtPnJlYWQgPSAmYnEyNzIwMF9yZWFkOworCWJ1cy0+cmVhZCA9ICZicTI3eDAwX3JlYWRfaTJjOwogCWRpLT5idXMgPSBidXM7CiAJZGktPmNsaWVudCA9IGNsaWVudDsKIApAQCAtMzIzLDcgKzQxMSw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMzQ0LDI3ICs0MzIsMjggQEAKICAqIE1vZHVsZSBzdHVmZgogICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBicTI3MjAwX2lkW10gPSB7Ci0JeyAiYnEyNzIwMCIsIDAgfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBicTI3eDAwX2lkW10gPSB7CisJeyAiYnEyNzIwMCIsIEJRMjcwMDAgfSwJLyogYnEyNzIwMCBpcyBzYW1lIGFzIGJxMjcwMDAsIGJ1dCB3aXRoIGkyYyAqLworCXsgImJxMjc1MDAiLCBCUTI3NTAwIH0sCiAJe30sCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBicTI3eDAwX2JhdHRlcnlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJxMjcyMDAtYmF0dGVyeSIsCisJCS5uYW1lID0gImJxMjd4MDAtYmF0dGVyeSIsCiAJfSwKLQkucHJvYmUgPSBicTI3MjAwX2JhdHRlcnlfcHJvYmUsCi0JLnJlbW92ZSA9IGJxMjcyMDBfYmF0dGVyeV9yZW1vdmUsCi0JLmlkX3RhYmxlID0gYnEyNzIwMF9pZCwKKwkucHJvYmUgPSBicTI3eDAwX2JhdHRlcnlfcHJvYmUsCisJLnJlbW92ZSA9IGJxMjd4MDBfYmF0dGVyeV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYnEyN3gwMF9pZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJxMjd4MDBfYmF0dGVyeV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZicTI3MjAwX2JhdHRlcnlfZHJpdmVyKTsKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYnEyN3gwMF9iYXR0ZXJ5X2RyaXZlcik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQlEyNzIwMCBkcml2ZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBCUTI3eDAwIGRyaXZlclxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzcyLDcgKzQ2MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicTI3eDAwX2JhdHRlcnlfZXhpdCh2b2lkKQogewotCWkyY19kZWxfZHJpdmVyKCZicTI3MjAwX2JhdHRlcnlfZHJpdmVyKTsKKwlpMmNfZGVsX2RyaXZlcigmYnEyN3gwMF9iYXR0ZXJ5X2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChicTI3eDAwX2JhdHRlcnlfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZGE5MDMwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvZGE5MDMwX2JhdHRlcnkuYwppbmRleCAzMzY0MTk4MTMuLmEyZTcxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvZGE5MDMwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2RhOTAzMF9iYXR0ZXJ5LmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCiAJY2hhcmdlci0+bWFzdGVyID0gcGRldi0+ZGV2LnBhcmVudDsKIAotCS8qIDEwIHNlY29uZHMgYmV0d2VlbiBtb25vdG9yIHJ1bnMgdW5sZXNzIHBsYXRmcm9tIGRlZmluZXMgb3RoZXIKKwkvKiAxMCBzZWNvbmRzIGJldHdlZW4gbW9uaXRvciBydW5zIHVubGVzcyBwbGF0Zm9ybSBkZWZpbmVzIG90aGVyCiAJICAgaW50ZXJ2YWwgKi8KIAljaGFyZ2VyLT5pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoCiAJCShwZGF0YS0+YmF0bW9uX2ludGVydmFsID8gOiAxMCkgKiAxMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYwppbmRleCA2ZWEzY2I1Li4yM2VlZDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYmF0X2xvY2spOwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBiYXRfd29yazsKLXN0cnVjdCBtdXRleCB3b3JrX2xvY2s7CitzdGF0aWMgc3RydWN0IG11dGV4IHdvcmtfbG9jazsKIHN0YXRpYyBpbnQgYmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKIHN0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqZ3BkYXRhOwogc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5ICpwcm9wOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCQlnb3RvIGVycjI7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5jaGFyZ2VfZ3BpbyksCiAJCQkJd205N3h4X2NocmdfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJCSJBQyBEZXRlY3QiLCAwKTsKKwkJCQkiQUMgRGV0ZWN0IiwgZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyMjsKIAkJcHJvcHMrKzsJLyogUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCBlODJkOGM5Li45NWE2ODliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogCXJlcyA9IHBzM2F2X2NtZF9hdmJfcGFyYW0oJmF2Yl9wYXJhbSwgbGVuKTsKIAlpZiAocmVzID09IFBTM0FWX1NUQVRVU19OT19TWU5DX0hFQUQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICIlczogQ29tbWFuZCBmYWlsZWQuIFBsZWFzZSB0cnkgeW91ciByZXF1ZXN0IGFnYWluLiBcbiIsCisJCSAgICAgICAiJXM6IENvbW1hbmQgZmFpbGVkLiBQbGVhc2UgdHJ5IHlvdXIgcmVxdWVzdCBhZ2Fpbi5cbiIsCiAJCSAgICAgICBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAocmVzKQogCQlkZXZfZGJnKCZwczNhdi0+ZGV2LT5jb3JlLCAicHMzYXZfY21kX2F2Yl9wYXJhbSBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKaW5kZXggMjYyZjYyZS4uODM0YjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCkBAIC0yNyw2ICsyNywxNyBAQAogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUgZGVidWdnaW5nIHN1cHBvcnQuCiAKK2NvbmZpZyBSRUdVTEFUT1JfRFVNTVkKKwlib29sICJQcm92aWRlIGEgZHVtbXkgcmVndWxhdG9yIGlmIHJlZ3VsYXRvciBsb29rdXBzIGZhaWwiCisJaGVscAorCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIHdoZW4gYSByZWd1bGF0b3IgbG9va3VwIGZhaWxzCisJICBhbmQgdGhlIGJvYXJkIGhhcyBub3Qgc3BlY2lmaWVkIHRoYXQgaXQgaGFzIHByb3ZpZGVkIGZ1bGwKKwkgIGNvbnN0cmFpbnRzIHRoZW4gdGhlIHJlZ3VsYXRvciBjb3JlIHdpbGwgcHJvdmlkZSBhbiBhbHdheXMKKwkgIGVuYWJsZWQgZHVtbXkgcmVndWxhdG9yIHdpbGwgYmUgcHJvdmlkZWQsIGFsbG93aW5nIGNvbnN1bWVyCisJICBkcml2ZXJzIHRvIGNvbnRpbnVlLgorCisJICBBIHdhcm5pbmcgd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiB0aGlzIHN1YnN0aXR1dGlvbiBpcyBkb25lLgorCiBjb25maWcgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKIAl0cmlzdGF0ZSAiRml4ZWQgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydCIKIAloZWxwCkBAIC02OSw2ICs4MCwxMyBAQAogCSAgcmVndWxhdG9yIHZpYSBJMkMgYnVzLiBUaGUgcHJvdmlkZWQgcmVndWxhdG9yIGlzIHN1aXRhYmxlCiAJICBmb3IgUFhBMjd4IGNoaXBzIHRvIGNvbnRyb2wgVkNDX0NPUkUgYW5kIFZDQ19VU0lNIHZvbHRhZ2VzLgogCitjb25maWcgUkVHVUxBVE9SX01BWDg2NDkKKwl0cmlzdGF0ZSAiTWF4aW0gODY0OSB2b2x0YWdlIHJlZ3VsYXRvciIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGNvbnRyb2xzIGEgTWF4aW0gODY0OSB2b2x0YWdlIG91dHB1dCByZWd1bGF0b3IgdmlhCisJICBJMkMgYnVzLgorCiBjb25maWcgUkVHVUxBVE9SX01BWDg2NjAKIAl0cmlzdGF0ZSAiTWF4aW0gODY2MC84NjYxIHZvbHRhZ2UgcmVndWxhdG9yIgogCWRlcGVuZHMgb24gSTJDCkBAIC05MSwxOSArMTA5LDI2IEBACiAJICBvZiBQTUlDIGRldmljZXMuCiAKIGNvbmZpZyBSRUdVTEFUT1JfV004MzUwCi0JdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmNpcyBXTTgzNTAgQXVkaW9QbHVzIFBNSUMiCisJdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzNTAgQXVkaW9QbHVzIFBNSUMiCiAJZGVwZW5kcyBvbiBNRkRfV004MzUwCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHZvbHRhZ2UgYW5kIGN1cnJlbnQgcmVndWxhdG9ycwogICAgICAgICAgIG9mIHRoZSBXTTgzNTAgQXVkaW9QbHVzIFBNSUMuCiAKIGNvbmZpZyBSRUdVTEFUT1JfV004NDAwCi0JdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmNpcyBXTTg0MDAgQXVkaW9QbHVzIFBNSUMiCisJdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg0MDAgQXVkaW9QbHVzIFBNSUMiCiAJZGVwZW5kcyBvbiBNRkRfV004NDAwCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBvZiB0aGUKIAkgIFdNODQwMCBBdWRpb1BsdXMgUE1JQy4KIAorY29uZmlnIFJFR1VMQVRPUl9XTTg5OTQKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODk5NCBDT0RFQyIKKwlkZXBlbmRzIG9uIE1GRF9XTTg5OTQKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgdm9sdGFnZSByZWd1bGF0b3JzIG9uIHRoZQorCSAgV004OTk0IENPREVDLgorCiBjb25maWcgUkVHVUxBVE9SX0RBOTAzWAogCXRyaXN0YXRlICJTdXBwb3J0IHJlZ3VsYXRvcnMgb24gRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNCBQTUlDIgogCWRlcGVuZHMgb24gUE1JQ19EQTkwM1gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggYjNjODA2Yy4uZTg0NWI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTksMTUgKzksMTggQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSKSArPSB1c2Vyc3BhY2UtY29uc3VtZXIubwogCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIpICs9IGJxMjQwMjIubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9EVU1NWSkgKz0gZHVtbXkubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEpICs9IGxwMzk3MS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYpICs9IG1heDE1ODYubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwKSArPSB0d2wtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSkJKz0gbWF4ODY0OS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDg2NjApICs9IG1heDg2NjAubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1kY2RjLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzFYKSArPSB3bTgzMXgtaXNpbmsubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1sZG8ubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzNTApICs9IHdtODM1MC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg0MDApICs9IHdtODQwMC1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg5OTQpICs9IHdtODk5NC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9EQTkwM1gpCSs9IGRhOTAzeC5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1BDRjUwNjMzKSArPSBwY2Y1MDYzMy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9QQ0FQKSArPSBwY2FwLXJlZ3VsYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCmluZGV4IGIzNDlkYjQuLjdkZTk1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCkBAIC01NjEsNyArNTYxLDcgQEAKICAqIGZvciBhbGwgdGhlIGRpZmZlcmVudCByZWd1bGF0b3JzLgogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGFiMzEwMF9yZWd1bGF0b3JzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhYjMxMDBfcmVndWxhdG9yc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhYjMxMDBfcGxhdGZvcm1fZGF0YSAqcGxmZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhYjMxMDAgKmFiMzEwMCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGFiMzEwMF9yZWd1bGF0b3JzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgYWIzMTAwX3JlZ3VsYXRvcnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGk7CiAKQEAgLTY1OSw3ICs2NTksNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IGFiMzEwMF9yZWd1bGF0b3JzX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChhYjMxMDBfcmVndWxhdG9yc19yZW1vdmUpLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhYjMxMDBfcmVndWxhdG9yc19yZW1vdmUpLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYWIzMTAwX3JlZ3VsYXRvcnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGI2MGE0YzkuLmM3YmJlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTE5LDEwICsxOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKKyNpbmNsdWRlICJkdW1teS5oIgorCiAjZGVmaW5lIFJFR1VMQVRPUl9WRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVndWxhdG9yX2xpc3RfbXV0ZXgpOwpAQCAtMTA4NCw2ICsxMDg3LDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgX3JlZ3VsYXRvcl9nZXRfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaWYgKCFyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZV90aW1lKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmRldi0+ZGVzYy0+b3BzLT5lbmFibGVfdGltZShyZGV2KTsKK30KKwogLyogSW50ZXJuYWwgcmVndWxhdG9yIHJlcXVlc3QgZnVuY3Rpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpfcmVndWxhdG9yX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkLAogCQkJCQlpbnQgZXhjbHVzaXZlKQpAQCAtMTExNSw2ICsxMTI1LDIyIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQorCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUl9EVU1NWQorCWlmICghZGV2bmFtZSkKKwkJZGV2bmFtZSA9ICJkZXZpY2VsZXNzIjsKKworCS8qIElmIHRoZSBib2FyZCBkaWRuJ3QgZmxhZyB0aGF0IGl0IHdhcyBmdWxseSBjb25zdHJhaW5lZCB0aGVuCisJICogc3Vic3RpdHV0ZSBpbiBhIGR1bW15IHJlZ3VsYXRvciBzbyBjb25zdW1lcnMgY2FuIGNvbnRpbnVlLgorCSAqLworCWlmICghaGFzX2Z1bGxfY29uc3RyYWludHMpIHsKKwkJcHJfd2FybmluZygiJXMgc3VwcGx5ICVzIG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkgcmVndWxhdG9yXG4iLAorCQkJICAgZGV2bmFtZSwgaWQpOworCQlyZGV2ID0gZHVtbXlfcmVndWxhdG9yX3JkZXY7CisJCWdvdG8gZm91bmQ7CisJfQorI2VuZGlmCisKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmVndWxhdG9yOwogCkBAIC0xMjUxLDcgKzEyNzcsNyBAQAogLyogbG9ja3MgaGVsZCBieSByZWd1bGF0b3JfZW5hYmxlKCkgKi8KIHN0YXRpYyBpbnQgX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBkZWxheTsKIAogCS8qIGRvIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBzdXBwbHkgcmVndWxhdG9yIGZpcnN0ICovCiAJaWYgKHJkZXYtPnN1cHBseSkgewpAQCAtMTI3NSwxMyArMTMwMSwzNCBAQAogCQkJaWYgKCFfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpKQogCQkJCXJldHVybiAtRVBFUk07CiAKLQkJCWlmIChyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZSkgewotCQkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZW5hYmxlKHJkZXYpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfSBlbHNlIHsKKwkJCWlmICghcmRldi0+ZGVzYy0+b3BzLT5lbmFibGUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIFF1ZXJ5IGJlZm9yZSBlbmFibGluZyBpbiBjYXNlIGNvbmZpZ3VyYXRpb24KKwkJCSAqIGRlcGVuZGFudC4gICovCisJCQlyZXQgPSBfcmVndWxhdG9yX2dldF9lbmFibGVfdGltZShyZGV2KTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCWRlbGF5ID0gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSIlczogZW5hYmxlX3RpbWUoKSBmYWlsZWQgZm9yICVzOiAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksCisJCQkJCXJldCk7CisJCQkJZGVsYXkgPSAwOwogCQkJfQorCisJCQkvKiBBbGxvdyB0aGUgcmVndWxhdG9yIHRvIHJhbXA7IGl0IHdvdWxkIGJlIHVzZWZ1bAorCQkJICogdG8gZXh0ZW5kIHRoaXMgZm9yIGJ1bGsgb3BlcmF0aW9ucyBzbyB0aGF0IHRoZQorCQkJICogcmVndWxhdG9ycyBjYW4gcmFtcCB0b2dldGhlci4gICovCisJCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmVuYWJsZShyZGV2KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCWlmIChkZWxheSA+PSAxMDAwKQorCQkJCW1kZWxheShkZWxheSAvIDEwMDApOworCQkJZWxzZSBpZiAoZGVsYXkpCisJCQkJdWRlbGF5KGRlbGF5KTsKKwogCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlzX2VuYWJsZWQoKSBmYWlsZWQgZm9yICVzOiAlZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSwgcmV0KTsKQEAgLTEzNDEsNiArMTM4OCw5IEBACiAJCQkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQorCisJCQlfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LCBSRUdVTEFUT1JfRVZFTlRfRElTQUJMRSwKKwkJCQkJICAgICBOVUxMKTsKIAkJfQogCiAJCS8qIGRlY3JlYXNlIG91ciBzdXBwbGllcyByZWYgY291bnQgYW5kIGRpc2FibGUgaWYgcmVxdWlyZWQgKi8KQEAgLTEzOTksOCArMTQ0OSw4IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCS8qIG5vdGlmeSBvdGhlciBjb25zdW1lcnMgdGhhdCBwb3dlciBoYXMgYmVlbiBmb3JjZWQgb2ZmICovCi0JCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFLAotCQkJTlVMTCk7CisJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCVJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFLCBOVUxMKTsKIAl9CiAKIAkvKiBkZWNyZWFzZSBvdXIgc3VwcGxpZXMgcmVmIGNvdW50IGFuZCBkaXNhYmxlIGlmIHJlcXVpcmVkICovCkBAIC0xNDM0LDkgKzE0ODQsOSBAQAogCiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkvKiBJZiB3ZSBkb24ndCBrbm93IHRoZW4gYXNzdW1lIHRoYXQgdGhlIHJlZ3VsYXRvciBpcyBhbHdheXMgb24gKi8KIAlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAxOwogCiAJcmV0dXJuIHJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZChyZGV2KTsKIH0KQEAgLTI0NTEsOCArMjUwMSwxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCByZWd1bGF0b3JfaW5pdCh2b2lkKQogeworCWludCByZXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6IGNvcmUgdmVyc2lvbiAlc1xuIiwgUkVHVUxBVE9SX1ZFUlNJT04pOwotCXJldHVybiBjbGFzc19yZWdpc3RlcigmcmVndWxhdG9yX2NsYXNzKTsKKworCXJldCA9IGNsYXNzX3JlZ2lzdGVyKCZyZWd1bGF0b3JfY2xhc3MpOworCisJcmVndWxhdG9yX2R1bW15X2luaXQoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qIGluaXQgZWFybHkgdG8gYWxsb3cgb3VyIGNvbnN1bWVycyB0byBjb21wbGV0ZSBzeXN0ZW0gYm9vdGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0MTBiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIGR1bW15LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG1peGVkIGNvbnRyb2xsYWJsZSBhbmQKKyAqIG5vbi1jb250cm9sbGFibGUgcmVndWxhdG9ycywgYXMgd2VsbCBhcyBmb3IgYWxsb3dpbmcgdGVzdGluZyBvbgorICogc3lzdGVtcyB3aXRoIG5vIGNvbnRyb2xsYWJsZSByZWd1bGF0b3JzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgImR1bW15LmgiCisKK3N0cnVjdCByZWd1bGF0b3JfZGV2ICpkdW1teV9yZWd1bGF0b3JfcmRldjsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGR1bW15X2luaXRkYXRhOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZHVtbXlfb3BzOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGR1bW15X2Rlc2MgPSB7CisJLm5hbWUgPSAiZHVtbXkiLAorCS5pZCA9IC0xLAorCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wcyA9ICZkdW1teV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHVtbXlfcGRldjsKKwordm9pZCBfX2luaXQgcmVndWxhdG9yX2R1bW15X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJZHVtbXlfcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicmVnLWR1bW15IiwgLTEpOworCWlmICghZHVtbXlfcGRldikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSByZWd1bGF0b3IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZHVtbXlfcGRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIGR1bW15IHJlZ3VsYXRvciBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGR1bW15X3BkZXYpOworCQlyZXR1cm47CisJfQorCisJZHVtbXlfcmVndWxhdG9yX3JkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmR1bW15X2Rlc2MsIE5VTEwsCisJCQkJCQkgICZkdW1teV9pbml0ZGF0YSwgTlVMTCk7CisJaWYgKElTX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR1bW15X3BkZXYpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuaCBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyMWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGR1bW15LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG1peGVkIGNvbnRyb2xsYWJsZSBhbmQKKyAqIG5vbi1jb250cm9sbGFibGUgcmVndWxhdG9ycywgYXMgd2VsbCBhcyBmb3IgYWxsb3dpbmcgdGVzdGluZyBvbgorICogc3lzdGVtcyB3aXRoIG5vIGNvbnRyb2xsYWJsZSByZWd1bGF0b3JzLgorICovCisKKyNpZm5kZWYgX0RVTU1ZX0gKKyNkZWZpbmUgX0RVTU1ZX0gKKworc3RydWN0IHJlZ3VsYXRvcl9kZXY7CisKK2V4dGVybiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZHVtbXlfcmVndWxhdG9yX3JkZXY7CisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SX0RVTU1ZCit2b2lkIF9faW5pdCByZWd1bGF0b3JfZHVtbXlfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcmVndWxhdG9yX2R1bW15X2luaXQodm9pZCkgeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBmOWY1MTZhLi5kMTFmNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTI0LDE0ICsyNCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldjsKIAlpbnQgbWljcm92b2x0czsKIAlpbnQgZ3BpbzsKLQl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOwotCXVuc2lnbmVkIGlzX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBzdGFydHVwX2RlbGF5OworCWJvb2wgZW5hYmxlX2hpZ2g7CisJYm9vbCBpc19lbmFibGVkOwogfTsKIAogc3RhdGljIGludCBmaXhlZF92b2x0YWdlX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKQEAgLTQ3LDcgKzQ5LDcgQEAKIAogCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CiAJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sIGRhdGEtPmVuYWJsZV9oaWdoKTsKLQkJZGF0YS0+aXNfZW5hYmxlZCA9IDE7CisJCWRhdGEtPmlzX2VuYWJsZWQgPSB0cnVlOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTksMTIgKzYxLDE5IEBACiAKIAlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5ncGlvKSkgewogCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkYXRhLT5ncGlvLCAhZGF0YS0+ZW5hYmxlX2hpZ2gpOwotCQlkYXRhLT5pc19lbmFibGVkID0gMDsKKwkJZGF0YS0+aXNfZW5hYmxlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhICpkYXRhID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGRhdGEtPnN0YXJ0dXBfZGVsYXk7Cit9CisKIHN0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQogewogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRhdGEgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC04NywxMSArOTYsMTIgQEAKIAkuaXNfZW5hYmxlZCA9IGZpeGVkX3ZvbHRhZ2VfaXNfZW5hYmxlZCwKIAkuZW5hYmxlID0gZml4ZWRfdm9sdGFnZV9lbmFibGUsCiAJLmRpc2FibGUgPSBmaXhlZF92b2x0YWdlX2Rpc2FibGUsCisJLmVuYWJsZV90aW1lID0gZml4ZWRfdm9sdGFnZV9lbmFibGVfdGltZSwKIAkuZ2V0X3ZvbHRhZ2UgPSBmaXhlZF92b2x0YWdlX2dldF92b2x0YWdlLAogCS5saXN0X3ZvbHRhZ2UgPSBmaXhlZF92b2x0YWdlX2xpc3Rfdm9sdGFnZSwKIH07CiAKLXN0YXRpYyBpbnQgcmVndWxhdG9yX2ZpeGVkX3ZvbHRhZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJlZ19maXhlZF92b2x0YWdlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhICpkcnZkYXRhOwpAQCAtMTE3LDYgKzEyNyw3IEBACiAKIAlkcnZkYXRhLT5taWNyb3ZvbHRzID0gY29uZmlnLT5taWNyb3ZvbHRzOwogCWRydmRhdGEtPmdwaW8gPSBjb25maWctPmdwaW87CisJZHJ2ZGF0YS0+c3RhcnR1cF9kZWxheSA9IGNvbmZpZy0+c3RhcnR1cF9kZWxheTsKIAogCWlmIChncGlvX2lzX3ZhbGlkKGNvbmZpZy0+Z3BpbykpIHsKIAkJZHJ2ZGF0YS0+ZW5hYmxlX2hpZ2ggPSBjb25maWctPmVuYWJsZV9oaWdoOwpAQCAtMTYzLDcgKzE3NCw3IEBACiAJCS8qIFJlZ3VsYXRvciB3aXRob3V0IEdQSU8gY29udHJvbCBpcyBjb25zaWRlcmVkCiAJCSAqIGFsd2F5cyBlbmFibGVkCiAJCSAqLwotCQlkcnZkYXRhLT5pc19lbmFibGVkID0gMTsKKwkJZHJ2ZGF0YS0+aXNfZW5hYmxlZCA9IHRydWU7CiAJfQogCiAJZHJ2ZGF0YS0+ZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkcnZkYXRhLT5kZXNjLCAmcGRldi0+ZGV2LApAQCAtMTkxLDcgKzIwMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZWd1bGF0b3JfZml4ZWRfdm9sdGFnZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlZ19maXhlZF92b2x0YWdlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtMjA1LDEwICsyMTYsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmVndWxhdG9yX2ZpeGVkX3ZvbHRhZ2VfZHJpdmVyID0gewotCS5wcm9iZQkJPSByZWd1bGF0b3JfZml4ZWRfdm9sdGFnZV9wcm9iZSwKLQkucmVtb3ZlCQk9IHJlZ3VsYXRvcl9maXhlZF92b2x0YWdlX3JlbW92ZSwKKwkucHJvYmUJCT0gcmVnX2ZpeGVkX3ZvbHRhZ2VfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyZWdfZml4ZWRfdm9sdGFnZV9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKaW5kZXggNGYzM2EwZi4uZjU1MzJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNkZWZpbmUgTFAzOTcxX0JVQ0syX0JBU0UgMHgyOQogI2RlZmluZSBMUDM5NzFfQlVDSzNfQkFTRSAweDMyCiAKLWNvbnN0IHN0YXRpYyBpbnQgYnVja19iYXNlX2FkZHJbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgYnVja19iYXNlX2FkZHJbXSA9IHsKIAlMUDM5NzFfQlVDSzFfQkFTRSwKIAlMUDM5NzFfQlVDSzJfQkFTRSwKIAlMUDM5NzFfQlVDSzNfQkFTRSwKQEAgLTYzLDcgKzYzLDcgQEAKICNkZWZpbmUgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDFfUkVHKHgpIChidWNrX2Jhc2VfYWRkclt4XSkKICNkZWZpbmUgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDJfUkVHKHgpIChidWNrX2Jhc2VfYWRkclt4XSsxKQogCi1jb25zdCBzdGF0aWMgaW50IGJ1Y2tfdm9sdGFnZV9tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgYnVja192b2x0YWdlX21hcFtdID0gewogCSAgIDAsICA4MDAsICA4NTAsICA5MDAsICA5NTAsIDEwMDAsIDEwNTAsIDExMDAsCiAJMTE1MCwgMTIwMCwgMTI1MCwgMTMwMCwgMTM1MCwgMTQwMCwgMTQ1MCwgMTUwMCwKIAkxNTUwLCAxNjAwLCAxNjUwLCAxNzAwLCAxODAwLCAxOTAwLCAyNTAwLCAyODAwLApAQCAtOTYsMTcgKzk2LDE3IEBACiAjZGVmaW5lIExET19WT0xfQ09OVFJfU0hJRlQoeCkgKCh4ICYgMSkgPDwgMikKICNkZWZpbmUgTERPX1ZPTF9DT05UUl9NQVNLIDB4MGYKIAotY29uc3Qgc3RhdGljIGludCBsZG80NV92b2x0YWdlX21hcFtdID0geworc3RhdGljIGNvbnN0IGludCBsZG80NV92b2x0YWdlX21hcFtdID0gewogCTEwMDAsIDEwNTAsIDExMDAsIDExNTAsIDEyMDAsIDEyNTAsIDEzMDAsIDEzNTAsCiAJMTQwMCwgMTUwMCwgMTgwMCwgMTkwMCwgMjUwMCwgMjgwMCwgMzAwMCwgMzMwMCwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgbGRvMTIzX3ZvbHRhZ2VfbWFwW10gPSB7CitzdGF0aWMgY29uc3QgaW50IGxkbzEyM192b2x0YWdlX21hcFtdID0gewogCTE4MDAsIDE5MDAsIDIwMDAsIDIxMDAsIDIyMDAsIDIzMDAsIDI0MDAsIDI1MDAsCiAJMjYwMCwgMjcwMCwgMjgwMCwgMjkwMCwgMzAwMCwgMzEwMCwgMzIwMCwgMzMwMCwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgKmxkb192b2x0YWdlX21hcFtdID0geworc3RhdGljIGNvbnN0IGludCAqbGRvX3ZvbHRhZ2VfbWFwW10gPSB7CiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8xICovCiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8yICovCiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8zICovCkBAIC00MzEsMjAgKzQzMSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0dXBfcmVndWxhdG9ycyhzdHJ1Y3QgbHAzOTcxICpscDM5NzEsCi0Jc3RydWN0IGxwMzk3MV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX3JlZ3VsYXRvcnMoc3RydWN0IGxwMzk3MSAqbHAzOTcxLAorCQkJCSAgICAgIHN0cnVjdCBscDM5NzFfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJaW50IGksIGVycjsKLQlpbnQgbnVtX3JlZ3VsYXRvcnMgPSBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7Ci0JbHAzOTcxLT5udW1fcmVndWxhdG9ycyA9IG51bV9yZWd1bGF0b3JzOwotCWxwMzk3MS0+cmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfZGV2ICopICogbnVtX3JlZ3VsYXRvcnMsCi0JCUdGUF9LRVJORUwpOworCisJbHAzOTcxLT5udW1fcmVndWxhdG9ycyA9IHBkYXRhLT5udW1fcmVndWxhdG9yczsKKwlscDM5NzEtPnJkZXYgPSBrY2FsbG9jKHBkYXRhLT5udW1fcmVndWxhdG9ycywKKwkJCQlzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiksIEdGUF9LRVJORUwpOwogCiAJLyogSW5zdGFudGlhdGUgdGhlIHJlZ3VsYXRvcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlZ3VsYXRvcnM7IGkrKykgewotCQlpbnQgaWQgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5pZDsKLQkJbHAzOTcxLT5yZGV2W2ldID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW2lkXSwKLQkJCWxwMzk3MS0+ZGV2LCBwZGF0YS0+cmVndWxhdG9yc1tpXS5pbml0ZGF0YSwgbHAzOTcxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspIHsKKwkJc3RydWN0IGxwMzk3MV9yZWd1bGF0b3Jfc3ViZGV2ICpyZWcgPSAmcGRhdGEtPnJlZ3VsYXRvcnNbaV07CisJCWxwMzk3MS0+cmRldltpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1tyZWctPmlkXSwKKwkJCQkJbHAzOTcxLT5kZXYsIHJlZy0+aW5pdGRhdGEsIGxwMzk3MSk7CiAKIAkJaWYgKElTX0VSUihscDM5NzEtPnJkZXZbaV0pKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwMzk3MS0+cmRldltpXSk7CkBAIC00NTUsMTAgKzQ1NSwxMCBAQAogCX0KIAogCXJldHVybiAwOworCiBlcnJvcjoKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlZ3VsYXRvcnM7IGkrKykKLQkJaWYgKGxwMzk3MS0+cmRldltpXSkKLQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxwMzk3MS0+cmRldltpXSk7CisJd2hpbGUgKC0taSA+PSAwKQorCQlyZWd1bGF0b3JfdW5yZWdpc3RlcihscDM5NzEtPnJkZXZbaV0pOwogCWtmcmVlKGxwMzk3MS0+cmRldik7CiAJbHAzOTcxLT5yZGV2ID0gTlVMTDsKIAlyZXR1cm4gZXJyOwpAQCAtNDcyLDE1ICs0NzIsMTcgQEAKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKLQlscDM5NzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHAzOTcxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGxwMzk3MSA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJObyBwbGF0Zm9ybSBpbml0IGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlscDM5NzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHAzOTcxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxwMzk3MSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWxwMzk3MS0+aTJjID0gaTJjOwogCWxwMzk3MS0+ZGV2ID0gJmkyYy0+ZGV2OwotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGxwMzk3MSk7CiAKIAltdXRleF9pbml0KCZscDM5NzEtPmlvX2xvY2spOwogCkBAIC00OTMsMTkgKzQ5NSwxNSBAQAogCQlnb3RvIGVycl9kZXRlY3Q7CiAJfQogCi0JaWYgKHBkYXRhKSB7Ci0JCXJldCA9IHNldHVwX3JlZ3VsYXRvcnMobHAzOTcxLCBwZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJfZGV0ZWN0OwotCX0gZWxzZQotCQlkZXZfd2FybihscDM5NzEtPmRldiwgIk5vIHBsYXRmb3JtIGluaXQgZGF0YSBzdXBwbGllZFxuIik7CisJcmV0ID0gc2V0dXBfcmVndWxhdG9ycyhscDM5NzEsIHBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGV0ZWN0OwogCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgbHAzOTcxKTsKIAlyZXR1cm4gMDsKIAogZXJyX2RldGVjdDoKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBOVUxMKTsKIAlrZnJlZShscDM5NzEpOwotZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUxMywxMSArNTExLDEzIEBACiB7CiAJc3RydWN0IGxwMzk3MSAqbHAzOTcxID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGxwMzk3MS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKLQkJaWYgKGxwMzk3MS0+cmRldltpXSkKLQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxwMzk3MS0+cmRldltpXSk7Ci0Ja2ZyZWUobHAzOTcxLT5yZGV2KTsKKwogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGxwMzk3MS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXIobHAzOTcxLT5yZGV2W2ldKTsKKworCWtmcmVlKGxwMzk3MS0+cmRldik7CiAJa2ZyZWUobHAzOTcxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jCmluZGV4IDJjMDgyZDMuLmE0OWZjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDE1ODYuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNTg2LmMKQEAgLTE3OSw4ICsxNzksOCBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IG1heDE1ODZfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDE1ODZfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmRldjsKIAlzdHJ1Y3QgbWF4MTU4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1heDE1ODZfcG1pY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDE1ODZfcG1pY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKQEAgLTI1Nyw5ICsyNTcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDE1ODZfcG1pY19kcml2ZXIgPSB7CiAJLnByb2JlID0gbWF4MTU4Nl9wbWljX3Byb2JlLAotCS5yZW1vdmUgPSBtYXgxNTg2X3BtaWNfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXgxNTg2X3BtaWNfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAibWF4MTU4NiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLmlkX3RhYmxlCT0gbWF4MTU4Nl9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViZGY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIFJlZ3VsYXRvcnMgZHJpdmVyIGZvciBNYXhpbSBtYXg4NjQ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqICAgICAgSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDg2NDkuaD4KKworI2RlZmluZSBNQVg4NjQ5X0RDRENfVk1JTgk3NTAwMDAJCS8qIHVWICovCisjZGVmaW5lIE1BWDg2NDlfRENEQ19WTUFYCTEzODAwMDAJCS8qIHVWICovCisjZGVmaW5lIE1BWDg2NDlfRENEQ19TVEVQCTEwMDAwCQkvKiB1ViAqLworI2RlZmluZSBNQVg4NjQ5X1ZPTF9NQVNLCTB4M2YKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIE1BWDg2NDlfTU9ERTAJCTB4MDAKKyNkZWZpbmUgTUFYODY0OV9NT0RFMQkJMHgwMQorI2RlZmluZSBNQVg4NjQ5X01PREUyCQkweDAyCisjZGVmaW5lIE1BWDg2NDlfTU9ERTMJCTB4MDMKKyNkZWZpbmUgTUFYODY0OV9DT05UUk9MCQkweDA0CisjZGVmaW5lIE1BWDg2NDlfU1lOQwkJMHgwNQorI2RlZmluZSBNQVg4NjQ5X1JBTVAJCTB4MDYKKyNkZWZpbmUgTUFYODY0OV9DSElQX0lEMQkweDA4CisjZGVmaW5lIE1BWDg2NDlfQ0hJUF9JRDIJMHgwOQorCisvKiBCaXRzICovCisjZGVmaW5lIE1BWDg2NDlfRU5fUEQJCSgxIDw8IDcpCisjZGVmaW5lIE1BWDg2NDlfVklEMF9QRAkJKDEgPDwgNikKKyNkZWZpbmUgTUFYODY0OV9WSUQxX1BECQkoMSA8PCA1KQorI2RlZmluZSBNQVg4NjQ5X1ZJRF9NQVNLCSgzIDw8IDUpCisKKyNkZWZpbmUgTUFYODY0OV9GT1JDRV9QV00JKDEgPDwgNykKKyNkZWZpbmUgTUFYODY0OV9TWU5DX0VYVENMSwkoMSA8PCA2KQorCisjZGVmaW5lIE1BWDg2NDlfRVhUX01BU0sJKDMgPDwgNikKKworI2RlZmluZSBNQVg4NjQ5X1JBTVBfTUFTSwkoNyA8PCA1KQorI2RlZmluZSBNQVg4NjQ5X1JBTVBfRE9XTgkoMSA8PCAxKQorCitzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJlZ3VsYXRvcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqaTJjOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IG11dGV4CQlpb19sb2NrOworCisJaW50CQl2b2xfcmVnOworCXVuc2lnbmVkCW1vZGU6MjsJLyogYml0WzE6MF0gPSBWSUQxLCBWSUQwICovCisJdW5zaWduZWQJZXh0Y2xrX2ZyZXE6MjsKKwl1bnNpZ25lZAlleHRjbGs6MTsKKwl1bnNpZ25lZAlyYW1wX3RpbWluZzozOworCXVuc2lnbmVkCXJhbXBfZG93bjoxOworfTsKKworLyogSTJDIG9wZXJhdGlvbnMgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWF4ODY0OV9yZWFkX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGludCByZWcsIGludCBieXRlcywgdm9pZCAqZGVzdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZWc7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgJmRhdGEsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWF4ODY0OV93cml0ZV9kZXZpY2Uoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJdW5zaWduZWQgY2hhciBidWZbYnl0ZXMgKyAxXTsKKwlpbnQgcmV0OworCisJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCW1lbWNweSgmYnVmWzFdLCBzcmMsIGJ5dGVzKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIGJ1ZiwgYnl0ZXMgKyAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3JlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmluZm8tPmlvX2xvY2spOworCXJldCA9IG1heDg2NDlfcmVhZF9kZXZpY2UoaTJjLCByZWcsIDEsICZkYXRhKTsKKwltdXRleF91bmxvY2soJmluZm8tPmlvX2xvY2spOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChpbnQpZGF0YTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcsCisJCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZpbmZvLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4NjQ5X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1ZSB8PSBkYXRhOworCXJldCA9IG1heDg2NDlfd3JpdGVfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmaW5mby0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcmFuZ2UoaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAoKG1pbl91ViA8IE1BWDg2NDlfRENEQ19WTUlOKSB8fCAobWF4X3VWID4gTUFYODY0OV9EQ0RDX1ZNQVgpCisJCXx8IChtaW5fdVYgPiBtYXhfdVYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJcmV0dXJuIChNQVg4NjQ5X0RDRENfVk1JTiArIGluZGV4ICogTUFYODY0OV9EQ0RDX1NURVApOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4ODY0OV9yZWdfcmVhZChpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZXQgJiBNQVg4NjQ5X1ZPTF9NQVNLOworCXJldHVybiBtYXg4NjQ5X2xpc3Rfdm9sdGFnZShyZGV2LCBkYXRhKTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YSwgbWFzazsKKworCWlmIChjaGVja19yYW5nZShtaW5fdVYsIG1heF91VikpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVZcbiIsCisJCQltaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkYXRhID0gKG1pbl91ViAtIE1BWDg2NDlfRENEQ19WTUlOICsgTUFYODY0OV9EQ0RDX1NURVAgLSAxKQorCQkvIE1BWDg2NDlfRENEQ19TVEVQOworCW1hc2sgPSBNQVg4NjQ5X1ZPTF9NQVNLOworCisJcmV0dXJuIG1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBtYXNrLCBkYXRhKTsKK30KKworLyogRU5fUEQgbWVhbnMgcHVsbGRvd24gb24gRU4gaW5wdXQgKi8KK3N0YXRpYyBpbnQgbWF4ODY0OV9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBtYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9DT05UUk9MLCBNQVg4NjQ5X0VOX1BELCAwKTsKK30KKworLyoKKyAqIEFwcGxpZWQgaW50ZXJuYWwgcHVsbGRvd24gcmVzaXN0b3Igb24gRU4gaW5wdXQgcGluLgorICogSWYgcHVsbGRvd24gRU4gcGluIG91dHNpZGUsIGl0IHdvdWxkIGJlIGJldHRlci4KKyAqLworc3RhdGljIGludCBtYXg4NjQ5X2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBtYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9DT05UUk9MLCBNQVg4NjQ5X0VOX1BELAorCQkJCU1BWDg2NDlfRU5fUEQpOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldDsKKworCXJldCA9IG1heDg2NDlfcmVnX3JlYWQoaW5mby0+aTJjLCBNQVg4NjQ5X0NPTlRST0wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAhKCh1bnNpZ25lZCBjaGFyKXJldCAmIE1BWDg2NDlfRU5fUEQpOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0YWdlLCByYXRlLCByZXQ7CisKKwkvKiBnZXQgdm9sdGFnZSAqLworCXJldCA9IG1heDg2NDlfcmVnX3JlYWQoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgJj0gTUFYODY0OV9WT0xfTUFTSzsKKwl2b2x0YWdlID0gbWF4ODY0OV9saXN0X3ZvbHRhZ2UocmRldiwgKHVuc2lnbmVkIGNoYXIpcmV0KTsgLyogdVYgKi8KKworCS8qIGdldCByYXRlICovCisJcmV0ID0gbWF4ODY0OV9yZWdfcmVhZChpbmZvLT5pMmMsIE1BWDg2NDlfUkFNUCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gKHJldCAmIE1BWDg2NDlfUkFNUF9NQVNLKSA+PiA1OworCXJhdGUgPSAoMzIgKiAxMDAwKSA+PiByZXQ7CS8qIHVWL3VTICovCisKKwlyZXR1cm4gKHZvbHRhZ2UgLyByYXRlKTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0ZBU1Q6CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBNQVg4NjQ5X0ZPUkNFX1BXTSwKKwkJCQkgTUFYODY0OV9GT1JDRV9QV00pOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJbWF4ODY0OV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsCisJCQkJIE1BWDg2NDlfRk9SQ0VfUFdNLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1heDg2NDlfZ2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBtYXg4NjQ5X3JlZ19yZWFkKGluZm8tPmkyYywgaW5mby0+dm9sX3JlZyk7CisJaWYgKHJldCAmIE1BWDg2NDlfRk9SQ0VfUFdNKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfRkFTVDsKKwlyZXR1cm4gUkVHVUxBVE9SX01PREVfTk9STUFMOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4ODY0OV9kY2RjX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJPSBtYXg4NjQ5X3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IG1heDg2NDlfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IG1heDg2NDlfbGlzdF92b2x0YWdlLAorCS5lbmFibGUJCT0gbWF4ODY0OV9lbmFibGUsCisJLmRpc2FibGUJPSBtYXg4NjQ5X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSBtYXg4NjQ5X2lzX2VuYWJsZWQsCisJLmVuYWJsZV90aW1lCT0gbWF4ODY0OV9lbmFibGVfdGltZSwKKwkuc2V0X21vZGUJPSBtYXg4NjQ5X3NldF9tb2RlLAorCS5nZXRfbW9kZQk9IG1heDg2NDlfZ2V0X21vZGUsCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZGNkY19kZXNjID0geworCS5uYW1lCQk9ICJtYXg4NjQ5IiwKKwkub3BzCQk9ICZtYXg4NjQ5X2RjZGNfb3BzLAorCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCS5uX3ZvbHRhZ2VzCT0gMSA8PCA2LAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg2NDlfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtYXg4NjQ5X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBkYXRhOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+aTJjID0gY2xpZW50OworCWluZm8tPmRldiA9ICZjbGllbnQtPmRldjsKKwltdXRleF9pbml0KCZpbmZvLT5pb19sb2NrKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmZvKTsKKworCWluZm8tPm1vZGUgPSBwZGF0YS0+bW9kZTsKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwljYXNlIDA6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUwOworCQlicmVhazsKKwljYXNlIDE6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUxOworCQlicmVhazsKKwljYXNlIDI6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUyOworCQlicmVhazsKKwljYXNlIDM6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXQgPSBtYXg4NjQ5X3JlZ19yZWFkKGluZm8tPmkyYywgTUFYODY0OV9DSElQX0lEMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJGYWlsZWQgdG8gZGV0ZWN0IElEIG9mIE1BWDg2NDk6JWRcbiIsCisJCQlyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZGV2X2luZm8oaW5mby0+ZGV2LCAiRGV0ZWN0ZWQgTUFYODY0OSAoSUQ6JXgpXG4iLCByZXQpOworCisJLyogZW5hYmxlIFZJRDAgJiBWSUQxICovCisJbWF4ODY0OV9zZXRfYml0cyhpbmZvLT5pMmMsIE1BWDg2NDlfQ09OVFJPTCwgTUFYODY0OV9WSURfTUFTSywgMCk7CisKKwkvKiBlbmFibGUvZGlzYWJsZSBleHRlcm5hbCBjbG9jayBzeW5jaHJvbml6YXRpb24gKi8KKwlpbmZvLT5leHRjbGsgPSBwZGF0YS0+ZXh0Y2xrOworCWRhdGEgPSAoaW5mby0+ZXh0Y2xrKSA/IE1BWDg2NDlfU1lOQ19FWFRDTEsgOiAwOworCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBNQVg4NjQ5X1NZTkNfRVhUQ0xLLCBkYXRhKTsKKwlpZiAoaW5mby0+ZXh0Y2xrKSB7CisJCS8qIHNldCBleHRlcm5hbCBjbG9jayBmcmVxdWVuY3kgKi8KKwkJaW5mby0+ZXh0Y2xrX2ZyZXEgPSBwZGF0YS0+ZXh0Y2xrX2ZyZXE7CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBNQVg4NjQ5X1NZTkMsIE1BWDg2NDlfRVhUX01BU0ssCisJCQkJIGluZm8tPmV4dGNsa19mcmVxKTsKKwl9CisKKwlpZiAocGRhdGEtPnJhbXBfdGltaW5nKSB7CisJCWluZm8tPnJhbXBfdGltaW5nID0gcGRhdGEtPnJhbXBfdGltaW5nOworCQltYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9SQU1QLCBNQVg4NjQ5X1JBTVBfTUFTSywKKwkJCQkgaW5mby0+cmFtcF90aW1pbmcgPDwgNSk7CisJfQorCisJaW5mby0+cmFtcF9kb3duID0gcGRhdGEtPnJhbXBfZG93bjsKKwlpZiAoaW5mby0+cmFtcF9kb3duKSB7CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBNQVg4NjQ5X1JBTVAsIE1BWDg2NDlfUkFNUF9ET1dOLAorCQkJCSBNQVg4NjQ5X1JBTVBfRE9XTik7CisJfQorCisJaW5mby0+cmVndWxhdG9yID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkY2RjX2Rlc2MsICZjbGllbnQtPmRldiwKKwkJCQkJICAgICBwZGF0YS0+cmVndWxhdG9yLCBpbmZvKTsKKwlpZiAoSVNfRVJSKGluZm8tPnJlZ3VsYXRvcikpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzXG4iLAorCQkJZGNkY19kZXNjLm5hbWUpOworCQlyZXQgPSBQVFJfRVJSKGluZm8tPnJlZ3VsYXRvcik7CisJCWdvdG8gb3V0OworCX0KKworCWRldl9pbmZvKGluZm8tPmRldiwgIk1heDg2NDkgcmVndWxhdG9yIGRldmljZSBpcyBkZXRlY3RlZC5cbiIpOworCXJldHVybiAwOworb3V0OgorCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDg2NDlfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtYXg4NjQ5X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoaW5mbykgeworCQlpZiAoaW5mby0+cmVndWxhdG9yKQorCQkJcmVndWxhdG9yX3VucmVnaXN0ZXIoaW5mby0+cmVndWxhdG9yKTsKKwkJa2ZyZWUoaW5mbyk7CisJfQorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg4NjQ5X2lkW10gPSB7CisJeyAibWF4ODY0OSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4ODY0OV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg4NjQ5X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWF4ODY0OV9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXg4NjQ5X3JlZ3VsYXRvcl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtYXg4NjQ5IiwKKwl9LAorCS5pZF90YWJsZQk9IG1heDg2NDlfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg4NjQ5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDg2NDlfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtYXg4NjQ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODY0OV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1heDg2NDlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDg2NDlfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVhJTSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMKaW5kZXggYWNjMmZiNy4uZjEyZjFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY2MC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgbWF4ODY2MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg2NjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmRldjsKIAlzdHJ1Y3QgbWF4ODY2MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpbnQgYm9vdF9vbiwgaSwgaWQsIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAocGRhdGEtPm51bV9zdWJkZXZzID4gTUFYODY2MF9WX0VORCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlRvbyBtdWNoIHJlZ3VsYXRvcnMgZm91bmQhXG4iKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJUb28gbWFueSByZWd1bGF0b3JzIGZvdW5kIVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtYXg4NjYwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgbWF4ODY2MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKQEAgLTQ4NSw5ICs0ODUsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDg2NjBfZHJpdmVyID0gewogCS5wcm9iZSA9IG1heDg2NjBfcHJvYmUsCi0JLnJlbW92ZSA9IG1heDg2NjBfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg4NjYwX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1heDg2NjAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5pZF90YWJsZQk9IG1heDg2NjBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTM3ODMtcmVndWxhdG9yLmMKaW5kZXggMzljNDk1My4uZjdiODE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jCkBAIC0yLDYgKzIsNyBAQAogICogUmVndWxhdG9yIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQwogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IDIwMDkgQWxiZXJ0byBQYW5penpvIDxtYXJhbWFvcGVyY2hlc2VpbW9ydG9AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTYsMTEgKzE3LDQ0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCi0jZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzQJCQkyOAotI2RlZmluZSBNQzEzNzgzX1JFR19TV0lUQ0hFUlM0X1BMTEVOCQkJKDEgPDwgMTgpCi0KICNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNQkJCTI5CiAjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzVfU1czRU4JCQkoMSA8PCAyMCkKKyNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNV9TVzNWU0VMCQkJMTgKKyNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNV9TVzNWU0VMX00JCSgzIDw8IDE4KQorCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwCQkzMAorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WSU9MT1ZTRUwJCTIKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkRJR1ZTRUwJCTQKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkdFTlZTRUwJCTYKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVlJGRElHVlNFTAk5CisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRlJFRlZTRUwJMTEKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVlJGQ1BWU0VMCQkxMworI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WU0lNVlNFTAkJMTQKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkVTSU1WU0VMCQkxNQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WQ0FNVlNFTAkJMTYKKworI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WSU9MT1ZTRUxfTQkoMyA8PCAyKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WRElHVlNFTF9NCSgzIDw8IDQpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZHRU5WU0VMX00JKDcgPDwgNikKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVlJGRElHVlNFTF9NCSgzIDw8IDkpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRlJFRlZTRUxfTQkoMyA8PCAxMSkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVlJGQ1BWU0VMX00JKDEgPDwgMTMpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZTSU1WU0VMX00JKDEgPDwgMTQpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZFU0lNVlNFTF9NCSgxIDw8IDE1KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WQ0FNVlNFTF9NCSg3IDw8IDE2KQorCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxCQkzMQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WVklCVlNFTAkJMAorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WUkYxVlNFTAkJMgorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WUkYyVlNFTAkJNAorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WTU1DMVZTRUwJCTYKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVk1NQzJWU0VMCQk5CisKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVlZJQlZTRUxfTQkoMyA8PCAwKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WUkYxVlNFTF9NCSgzIDw8IDIpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxX1ZSRjJWU0VMX00JKDMgPDwgNCkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVk1NQzFWU0VMX00JKDcgPDwgNikKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVk1NQzJWU0VMX00JKDcgPDwgOSkKIAogI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMAkJMzIKICNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9STU9ERTBfVkFVRElPRU4JCSgxIDw8IDApCkBAIC00OCwxOSArODIsMTA3IEBACiAjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19HUE8yRU4JCQkoMSA8PCA4KQogI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfR1BPM0VOCQkJKDEgPDwgMTApCiAjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19HUE80RU4JCQkoMSA8PCAxMikKKyNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1QxU1BJRU4JCSgxIDw8IDE1KQorI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfUFdHVDJTUElFTgkJKDEgPDwgMTYpCisKKyNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1RTUElfTQkJCSgzIDw8IDE1KQorCiAKIHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvciB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJaW50IHJlZzsKIAlpbnQgZW5hYmxlX2JpdDsKKwlpbnQgdnNlbF9yZWc7CisJaW50IHZzZWxfc2hpZnQ7CisJaW50IHZzZWxfbWFzazsKKwlpbnQgY29uc3QgKnZvbHRhZ2VzOworfTsKKworLyogVm9sdGFnZSBWYWx1ZXMgKi8KK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M19zdzNfdmFsW10gPSB7CisJNTAwMDAwMCwgNTAwMDAwMCwgNTAwMDAwMCwgNTUwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192YXVkaW9fdmFsW10gPSB7CisJMjc3NTAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192aW9oaV92YWxbXSA9IHsKKwkyNzc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3Zpb2xvX3ZhbFtdID0geworCTEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmRpZ192YWxbXSA9IHsKKwkxMjAwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZnZW5fdmFsW10gPSB7CisJMTIwMDAwMCwgMTMwMDAwMCwgMTUwMDAwMCwgMTgwMDAwMCwKKwkxMTAwMDAwLCAyMDAwMDAwLCAyNzc1MDAwLCAyNDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZmRpZ192YWxbXSA9IHsKKwkxMjAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAxODc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZnJlZl92YWxbXSA9IHsKKwkyNDc1MDAwLCAyNjAwMDAwLCAyNzAwMDAwLCAyNzc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZmNwX3ZhbFtdID0geworCTI3MDAwMDAsIDI3NzUwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnNpbV92YWxbXSA9IHsKKwkxODAwMDAwLCAyOTAwMDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3Zlc2ltX3ZhbFtdID0geworCTE4MDAwMDAsIDI5MDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmNhbV92YWxbXSA9IHsKKwkxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyNTUwMDAwLAorCTI2MDAwMDAsIDI3NTAwMDAsIDI4MDAwMDAsIDMwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnJmYmdfdmFsW10gPSB7CisJMTI1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192dmliX3ZhbFtdID0geworCTEzMDAwMDAsIDE4MDAwMDAsIDIwMDAwMDAsIDMwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdm1tY192YWxbXSA9IHsKKwkxNjAwMDAwLCAxODAwMDAwLCAyMDAwMDAwLCAyNjAwMDAwLAorCTI3MDAwMDAsIDI4MDAwMDAsIDI5MDAwMDAsIDMwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnJmX3ZhbFtdID0geworCTE1MDAwMDAsIDE4NzUwMDAsIDI3MDAwMDAsIDI3NzUwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfZ3BvX3ZhbFtdID0geworCTMxMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfcHdndGRydl92YWxbXSA9IHsKKwk1NTAwMDAwLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTM3ODNfcmVndWxhdG9yX29wczsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9vcHM7CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19ncG9fcmVndWxhdG9yX29wczsKIAotI2RlZmluZSBNQzEzNzgzX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnKQkJCQlcCisjZGVmaW5lIE1DMTM3ODNfREVGSU5FKHByZWZpeCwgX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzKQlcCiAJW01DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lXSA9IHsJCQkJXAogCQkuZGVzYyA9IHsJCQkJCQlcCiAJCQkubmFtZSA9ICNwcmVmaXggIl8iICNfbmFtZSwJCQlcCisJCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUoX3ZvbHRhZ2VzKSwJCVwKIAkJCS5vcHMgPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAkJCVwKIAkJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAogCQkJLmlkID0gTUMxMzc4M18gIyMgcHJlZml4ICMjIF8gIyMgX25hbWUsCQlcCkBAIC02OCw0MCArMTkwLDkyIEBACiAJCX0sCQkJCQkJCVwKIAkJLnJlZyA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnLAkJCQlcCiAJCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdfICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAorCQkudnNlbF9yZWcgPSBNQzEzNzgzX1JFR18gIyMgX3ZzZWxfcmVnLAkJCVwKKwkJLnZzZWxfc2hpZnQgPSBNQzEzNzgzX1JFR18gIyMgX3ZzZWxfcmVnICMjIF8gIyMgX25hbWUgIyMgVlNFTCxcCisJCS52c2VsX21hc2sgPSBNQzEzNzgzX1JFR18gIyMgX3ZzZWxfcmVnICMjIF8gIyMgX25hbWUgIyMgVlNFTF9NLFwKKwkJLnZvbHRhZ2VzID0gIF92b2x0YWdlcywJCQkJCVwKIAl9CiAKLSNkZWZpbmUgTUMxMzc4M19ERUZJTkVfU1coX25hbWUsIF9yZWcpIE1DMTM3ODNfREVGSU5FKFNXLCBfbmFtZSwgX3JlZykKLSNkZWZpbmUgTUMxMzc4M19ERUZJTkVfUkVHVShfbmFtZSwgX3JlZykgTUMxMzc4M19ERUZJTkUoUkVHVSwgX25hbWUsIF9yZWcpCisjZGVmaW5lIE1DMTM3ODNfRklYRURfREVGSU5FKHByZWZpeCwgX25hbWUsIF9yZWcsIF92b2x0YWdlcykJCVwKKwlbTUMxMzc4M18gIyMgcHJlZml4ICMjIF8gIyMgX25hbWVdID0gewkJCQlcCisJCS5kZXNjID0gewkJCQkJCVwKKwkJCS5uYW1lID0gI3ByZWZpeCAiXyIgI19uYW1lLAkJCVwKKwkJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShfdm9sdGFnZXMpLAkJXAorCQkJLm9wcyA9ICZtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9vcHMsCQlcCisJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkJCS5pZCA9IE1DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lLAkJXAorCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCVwKKwkJfSwJCQkJCQkJXAorCQkucmVnID0gTUMxMzc4M19SRUdfICMjIF9yZWcsCQkJCVwKKwkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR18gIyMgX3JlZyAjIyBfICMjIF9uYW1lICMjIEVOLAlcCisJCS52b2x0YWdlcyA9ICBfdm9sdGFnZXMsCQkJCQlcCisJfQorCisjZGVmaW5lIE1DMTM3ODNfR1BPX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCAgX3ZvbHRhZ2VzKQkJXAorCVtNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZV0gPSB7CQkJCVwKKwkJLmRlc2MgPSB7CQkJCQkJXAorCQkJLm5hbWUgPSAjcHJlZml4ICJfIiAjX25hbWUsCQkJXAorCQkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKF92b2x0YWdlcyksCQlcCisJCQkub3BzID0gJm1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9vcHMsCQlcCisJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkJCS5pZCA9IE1DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lLAkJXAorCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCVwKKwkJfSwJCQkJCQkJXAorCQkucmVnID0gTUMxMzc4M19SRUdfICMjIF9yZWcsCQkJCVwKKwkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR18gIyMgX3JlZyAjIyBfICMjIF9uYW1lICMjIEVOLAlcCisJCS52b2x0YWdlcyA9ICBfdm9sdGFnZXMsCQkJCQlcCisJfQorCisjZGVmaW5lIE1DMTM3ODNfREVGSU5FX1NXKF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykJCVwKKwlNQzEzNzgzX0RFRklORShTVywgX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzKQorI2RlZmluZSBNQzEzNzgzX0RFRklORV9SRUdVKF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykJCVwKKwlNQzEzNzgzX0RFRklORShSRUdVLCBfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMpCiAKIHN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgbWMxMzc4M19yZWd1bGF0b3JzW10gPSB7Ci0JTUMxMzc4M19ERUZJTkVfU1coU1czLCBTV0lUQ0hFUlM1KSwKLQlNQzEzNzgzX0RFRklORV9TVyhQTEwsIFNXSVRDSEVSUzQpLAorCU1DMTM3ODNfREVGSU5FX1NXKFNXMywgU1dJVENIRVJTNSwgU1dJVENIRVJTNSwgbWMxMzc4M19zdzNfdmFsKSwKIAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVkFVRElPLCBSRUdVTEFUT1JNT0RFMCksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWSU9ISSwgUkVHVUxBVE9STU9ERTApLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVklPTE8sIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZESUcsIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZHRU4sIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZSRkRJRywgUkVHVUxBVE9STU9ERTApLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGUkVGLCBSRUdVTEFUT1JNT0RFMCksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWUkZDUCwgUkVHVUxBVE9STU9ERTApLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlNJTSwgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVkVTSU0sIFJFR1VMQVRPUk1PREUxKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZDQU0sIFJFR1VMQVRPUk1PREUxKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZSRkJHLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWVklCLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWUkYxLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWUkYyLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWTU1DMSwgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVk1NQzIsIFJFR1VMQVRPUk1PREUxKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKEdQTzEsIFBPV0VSTUlTQyksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShHUE8yLCBQT1dFUk1JU0MpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoR1BPMywgUE9XRVJNSVNDKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKEdQTzQsIFBPV0VSTUlTQyksCisJTUMxMzc4M19GSVhFRF9ERUZJTkUoUkVHVSwgVkFVRElPLCBSRUdVTEFUT1JNT0RFMCwgbWMxMzc4M192YXVkaW9fdmFsKSwKKwlNQzEzNzgzX0ZJWEVEX0RFRklORShSRUdVLCBWSU9ISSwgUkVHVUxBVE9STU9ERTAsIG1jMTM3ODNfdmlvaGlfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZJT0xPLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3Zpb2xvX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWRElHLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZkaWdfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZHRU4sIFJFR1VMQVRPUk1PREUwLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQkJICAgIG1jMTM3ODNfdmdlbl92YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGRElHLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZyZmRpZ192YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGUkVGLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZyZnJlZl92YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGQ1AsIFJFR1VMQVRPUk1PREUwLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQkJICAgIG1jMTM3ODNfdnJmY3BfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZTSU0sIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQkJICAgIG1jMTM3ODNfdnNpbV92YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVkVTSU0sIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQkJICAgIG1jMTM3ODNfdmVzaW1fdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZDQU0sIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQkJICAgIG1jMTM3ODNfdmNhbV92YWwpLAorCU1DMTM3ODNfRklYRURfREVGSU5FKFJFR1UsIFZSRkJHLCBSRUdVTEFUT1JNT0RFMSwgbWMxMzc4M192cmZiZ192YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlZJQiwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCQkgICAgbWMxMzc4M192dmliX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWUkYxLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzEsCVwKKwkJCSAgICBtYzEzNzgzX3ZyZl92YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGMiwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCQkgICAgbWMxMzc4M192cmZfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZNTUMxLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzEsCVwKKwkJCSAgICBtYzEzNzgzX3ZtbWNfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZNTUMyLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzEsCVwKKwkJCSAgICBtYzEzNzgzX3ZtbWNfdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgR1BPMSwgUE9XRVJNSVNDLCBtYzEzNzgzX2dwb192YWwpLAorCU1DMTM3ODNfR1BPX0RFRklORShSRUdVLCBHUE8yLCBQT1dFUk1JU0MsIG1jMTM3ODNfZ3BvX3ZhbCksCisJTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIEdQTzMsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgR1BPNCwgUE9XRVJNSVNDLCBtYzEzNzgzX2dwb192YWwpLAorCU1DMTM3ODNfR1BPX0RFRklORShSRUdVLCBQV0dUMVNQSSwgUE9XRVJNSVNDLCBtYzEzNzgzX3B3Z3RkcnZfdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgUFdHVDJTUEksIFBPV0VSTUlTQywgbWMxMzc4M19wd2d0ZHJ2X3ZhbCksCiB9OwogCiBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiB7CiAJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODM7CisJdTMyIHBvd2VybWlzY19wd2d0X3N0YXRlOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JzW107CiB9OwogCkBAIC0xNTQsMTAgKzMyOCwyNDEgQEAKIAlyZXR1cm4gKHZhbCAmIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCkgIT0gMDsKIH0KIAorc3RhdGljIGludCBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJCQl1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCWlmIChzZWxlY3RvciA+PSBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1tzZWxlY3Rvcl07Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19nZXRfYmVzdF92b2x0YWdlX2luZGV4KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpbnQgcmVnX2lkID0gcmRldl9nZXRfaWQocmRldik7CisJaW50IGk7CisJaW50IGJlc3RtYXRjaDsKKwlpbnQgYmVzdGluZGV4OworCisJLyoKKwkgKiBMb2NhdGUgdGhlIG1pbmltdW0gdm9sdGFnZSBmaXR0aW5nIHRoZSBjcml0ZXJpYSBvbgorCSAqIHRoaXMgcmVndWxhdG9yLiBUaGUgc3dpdGNoYWJsZSB2b2x0YWdlcyBhcmUgbm90CisJICogaW4gc3RyaWN0IGZhbGxpbmcgb3JkZXIgc28gd2UgbmVlZCB0byBjaGVjayB0aGVtCisJICogYWxsIGZvciB0aGUgYmVzdCBtYXRjaC4KKwkgKi8KKwliZXN0bWF0Y2ggPSBJTlRfTUFYOworCWJlc3RpbmRleCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBtYzEzNzgzX3JlZ3VsYXRvcnNbcmVnX2lkXS5kZXNjLm5fdm9sdGFnZXM7IGkrKykgeworCQlpZiAobWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV0gPj0gbWluX3VWICYmCisJCSAgICBtYzEzNzgzX3JlZ3VsYXRvcnNbcmVnX2lkXS52b2x0YWdlc1tpXSA8IGJlc3RtYXRjaCkgeworCQkJYmVzdG1hdGNoID0gbWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV07CisJCQliZXN0aW5kZXggPSBpOworCQl9CisJfQorCisJaWYgKGJlc3RpbmRleCA8IDAgfHwgYmVzdG1hdGNoID4gbWF4X3VWKSB7CisJCWRldl93YXJuKCZyZGV2LT5kZXYsICJubyBwb3NzaWJsZSB2YWx1ZSBmb3IgJWQ8PXg8PSVkIHVWXG4iLAorCQkJCW1pbl91ViwgbWF4X3VWKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBiZXN0aW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdmFsdWUsIGlkID0gcmRldl9nZXRfaWQocmRldik7CisJaW50IHJldDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIG1pbl91VjogJWQgbWF4X3VWOiAlZFxuIiwKKwkJX19mdW5jX18sIGlkLCBtaW5fdVYsIG1heF91Vik7CisKKwkvKiBGaW5kIHRoZSBiZXN0IGluZGV4ICovCisJdmFsdWUgPSBtYzEzNzgzX2dldF9iZXN0X3ZvbHRhZ2VfaW5kZXgocmRldiwgbWluX3VWLCBtYXhfdVYpOworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgYmVzdCB2YWx1ZTogJWQgXG4iLCBfX2Z1bmNfXywgdmFsdWUpOworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiB2YWx1ZTsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXQgPSBtYzEzNzgzX3JlZ19ybXcocHJpdi0+bWMxMzc4MywgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX3JlZywKKwkJCW1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9tYXNrLAorCQkJdmFsdWUgPDwgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX3NoaWZ0KTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCByZXQsIGlkID0gcmRldl9nZXRfaWQocmRldik7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywKKwkJCQltYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZzZWxfcmVnLCAmdmFsKTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSAodmFsICYgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX21hc2spCisJCT4+IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9zaGlmdDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBpZCwgdmFsKTsKKworCUJVR19PTih2YWwgPCAwIHx8IHZhbCA+IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKTsKKworCXJldHVybiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzW3ZhbF07Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX3JlZ3VsYXRvcl9vcHMgPSB7CiAJLmVuYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2VuYWJsZSwKIAkuZGlzYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQgPSBtYzEzNzgzX3JlZ3VsYXRvcl9pc19lbmFibGVkLAorCS5saXN0X3ZvbHRhZ2UgPSBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCit9OworCitzdGF0aWMgaW50IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIG1pbl91VjogJWQgbWF4X3VWOiAlZFxuIiwKKwkJX19mdW5jX18sIGlkLCBtaW5fdVYsIG1heF91Vik7CisKKwlpZiAobWluX3VWID4gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1swXSAmJgorCSAgICBtYXhfdVYgPCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzWzBdKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CisKKwlyZXR1cm4gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1swXTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gbWMxMzc4M19yZWd1bGF0b3JfZW5hYmxlLAorCS5kaXNhYmxlID0gbWMxMzc4M19yZWd1bGF0b3JfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZCA9IG1jMTM3ODNfcmVndWxhdG9yX2lzX2VuYWJsZWQsCisJLmxpc3Rfdm9sdGFnZSA9IG1jMTM3ODNfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSwKK307CisKK2ludCBtYzEzNzgzX3Bvd2VybWlzY19ybXcoc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYsIHUzMiBtYXNrLAorCQkJCQkJCQkJdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MyA9IHByaXYtPm1jMTM3ODM7CisJaW50IHJldDsKKwl1MzIgdmFscmVhZDsKKworCUJVR19PTih2YWwgJiB+bWFzayk7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIE1DMTM3ODNfUkVHX1BPV0VSTUlTQywgJnZhbHJlYWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBVcGRhdGUgdGhlIHN0b3JlZCBzdGF0ZSBmb3IgUG93ZXIgR2F0ZXMuICovCisJcHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGUgPQorCQkJCShwcml2LT5wb3dlcm1pc2NfcHdndF9zdGF0ZSAmIH5tYXNrKSB8IHZhbDsKKwlwcml2LT5wb3dlcm1pc2NfcHdndF9zdGF0ZSAmPSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfUFdHVFNQSV9NOworCisJLyogQ29uc3RydWN0IHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8KKwl2YWxyZWFkID0gKHZhbHJlYWQgJiB+bWFzaykgfCB2YWw7CisJLyogT3ZlcndyaXRlIHRoZSBQV0dUeEVOIHdpdGggdGhlIHN0b3JlZCB2ZXJzaW9uICovCisJdmFscmVhZCA9ICh2YWxyZWFkICYgfk1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUU1BJX00pIHwKKwkJCQkJCXByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlOworCisJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX1BPV0VSTUlTQywgdmFscmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ncG9fcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CisJaW50IHJldDsKKwl1MzIgZW5fdmFsID0gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0OworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CisKKwkvKiBQb3dlciBHYXRlIGVuYWJsZSB2YWx1ZSBpcyAwICovCisJaWYgKGlkID09IE1DMTM3ODNfUkVHVV9QV0dUMVNQSSB8fAorCSAgICBpZCA9PSBNQzEzNzgzX1JFR1VfUFdHVDJTUEkpCisJCWVuX3ZhbCA9IDA7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisJcmV0ID0gbWMxMzc4M19wb3dlcm1pc2Nfcm13KHByaXYsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCwKKwkJCQkJZW5fdmFsKTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ncG9fcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisJdTMyIGRpc192YWwgPSAwOworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CisKKwkvKiBQb3dlciBHYXRlIGRpc2FibGUgdmFsdWUgaXMgMSAqLworCWlmIChpZCA9PSBNQzEzNzgzX1JFR1VfUFdHVDFTUEkgfHwKKwkgICAgaWQgPT0gTUMxMzc4M19SRUdVX1BXR1QyU1BJKQorCQlkaXNfdmFsID0gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfcG93ZXJtaXNjX3Jtdyhwcml2LCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQsCisJCQkJCWRpc192YWwpOworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYzEzNzgzX2dwb19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5yZWcsICZ2YWwpOworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFBvd2VyIEdhdGVzIHN0YXRlIGlzIHN0b3JlZCBpbiBwb3dlcm1pc2NfcHdndF9zdGF0ZQorCSAqIHdoZXJlIHRoZSBtZWFuaW5nIG9mIGJpdHMgaXMgbmVnYXRlZCAqLworCXZhbCA9ICh2YWwgJiB+TUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1RTUElfTSkgfAorCSAgICAgIChwcml2LT5wb3dlcm1pc2NfcHdndF9zdGF0ZSBeIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUU1BJX00pOworCisJcmV0dXJuICh2YWwgJiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQpICE9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX2dwb19yZWd1bGF0b3Jfb3BzID0geworCS5lbmFibGUgPSBtYzEzNzgzX2dwb19yZWd1bGF0b3JfZW5hYmxlLAorCS5kaXNhYmxlID0gbWMxMzc4M19ncG9fcmVndWxhdG9yX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSBtYzEzNzgzX2dwb19yZWd1bGF0b3JfaXNfZW5hYmxlZCwKKwkubGlzdF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3JfbGlzdF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZSA9IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX2dldF92b2x0YWdlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbWMxMzc4M19yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BjYXAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jCmluZGV4IDMzZDdkODkuLjI5ZDA1NjYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGNhcC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jCkBAIC0yODgsMTYgKzI4OCwxOCBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2FwX3JlZ3VsYXRvcl9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicGNhcC1yZWd1bGF0b3IiLAorCQkubmFtZQk9ICJwY2FwLXJlZ3VsYXRvciIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCi0JLnByb2JlID0gcGNhcF9yZWd1bGF0b3JfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBjYXBfcmVndWxhdG9yX3JlbW92ZSksCisJLnByb2JlCT0gcGNhcF9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHBjYXBfcmVndWxhdG9yX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwY2FwX3JlZ3VsYXRvcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTAyMy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jCmluZGV4IDA3ZmRhMGEuLjFmMTgzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jCkBAIC00NTcsOCArNDU3LDggQEAKIAkubGlzdF92b2x0YWdlID0gdHBzNjUwMjNfbGRvX2xpc3Rfdm9sdGFnZSwKIH07CiAKLXN0YXRpYwotaW50IHRwc182NTAyM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0cHNfNjUwMjNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgaW50IGRlc2NfaWQ7CiAJY29uc3Qgc3RydWN0IHRwc19pbmZvICppbmZvID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CkBAIC00NjYsNiArNDY2LDcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAlzdHJ1Y3QgdHBzX3BtaWMgKnRwczsKIAlpbnQgaTsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CkBAIC00NzUsNyArNDc2LDYgQEAKIAkgKiBjb21pbmcgZnJvbSB0aGUgYm9hcmQtZXZtIGZpbGUuCiAJICovCiAJaW5pdF9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNTAyLDIxICs1MDIsMTIgQEAKIAogCQkvKiBSZWdpc3RlciB0aGUgcmVndWxhdG9ycyAqLwogCQlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZ0cHMtPmRlc2NbaV0sICZjbGllbnQtPmRldiwKLQkJCQkJCQkJaW5pdF9kYXRhLCB0cHMpOworCQkJCQkgIGluaXRfZGF0YSwgdHBzKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgewogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCiAJCQkJaWQtPm5hbWUpOwotCi0JCQkvKiBVbnJlZ2lzdGVyICovCi0JCQl3aGlsZSAoaSkKLQkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7Ci0KLQkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKLQotCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLwotCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0JCQlrZnJlZSh0cHMpOwotCQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJCQllcnJvciA9IFBUUl9FUlIocmRldik7CisJCQlnb3RvIGZhaWw7CiAJCX0KIAogCQkvKiBTYXZlIHJlZ3VsYXRvciBmb3IgY2xlYW51cCAqLwpAQCAtNTI2LDYgKzUxNywxMyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRwcyk7CiAKIAlyZXR1cm4gMDsKKworIGZhaWw6CisJd2hpbGUgKC0taSA+PSAwKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbaV0pOworCisJa2ZyZWUodHBzKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgpAQCAtNTM5LDEzICs1MzcsMTIgQEAKIAlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCisJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCiAJZm9yIChpID0gMDsgaSA8IFRQUzY1MDIzX05VTV9SRUdVTEFUT1I7IGkrKykKIAkJcmVndWxhdG9yX3VucmVnaXN0ZXIodHBzLT5yZGV2W2ldKTsKIAotCXRwcy0+Y2xpZW50ID0gTlVMTDsKLQotCS8qIGNsZWFyIHRoZSBjbGllbnQgZGF0YSBpbiBpMmMgKi8KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZSh0cHMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA3eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCmluZGV4IGY4YTZkZmIuLmMyYTk1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCkBAIC01MzgsOCArNTM4LDggQEAKIAkubGlzdF92b2x0YWdlID0gdHBzNjUwN3hfbGRvX2xpc3Rfdm9sdGFnZSwKIH07CiAKLXN0YXRpYwotaW50IHRwc182NTA3eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0cHNfNjUwN3hfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgaW50IGRlc2NfaWQ7CiAJY29uc3Qgc3RydWN0IHRwc19pbmZvICppbmZvID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CkBAIC01NDcsNiArNTQ3LDcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAlzdHJ1Y3QgdHBzX3BtaWMgKnRwczsKIAlpbnQgaTsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKIAkJCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtNTU3LDcgKzU1OCw2IEBACiAJICogY29taW5nIGZyb20gdGhlIGJvYXJkLWV2bSBmaWxlLgogCSAqLwogCWluaXRfZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KIAlpZiAoIWluaXRfZGF0YSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTU4NiwxOCArNTg2LDggQEAKIAkJaWYgKElTX0VSUihyZGV2KSkgewogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCiAJCQkJaWQtPm5hbWUpOwotCi0JCQkvKiBVbnJlZ2lzdGVyICovCi0JCQl3aGlsZSAoaSkKLQkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7Ci0KLQkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKLQotCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLwotCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0KLQkJCWtmcmVlKHRwcyk7Ci0JCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJCWVycm9yID0gUFRSX0VSUihyZGV2KTsKKwkJCWdvdG8gZmFpbDsKIAkJfQogCiAJCS8qIFNhdmUgcmVndWxhdG9yIGZvciBjbGVhbnVwICovCkBAIC02MDcsNiArNTk3LDEzIEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHBzKTsKIAogCXJldHVybiAwOworCitmYWlsOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXIodHBzLT5yZGV2W2ldKTsKKworCWtmcmVlKHRwcyk7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTYyMCwxMyArNjE3LDEyIEBACiAJc3RydWN0IHRwc19wbWljICp0cHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAorCS8qIGNsZWFyIHRoZSBjbGllbnQgZGF0YSBpbiBpMmMgKi8KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwogCWZvciAoaSA9IDA7IGkgPCBUUFM2NTA3WF9OVU1fUkVHVUxBVE9SOyBpKyspCiAJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldltpXSk7CiAKLQl0cHMtPmNsaWVudCA9IE5VTEw7Ci0KLQkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUodHBzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCmluZGV4IDdlNjc0ODUuLjk3MjlkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKQEAgLTUxOSwxOSArNTE5LDE5IEBACiAJLyogNjAzMCBSRUcgd2l0aCBiYXNlIGFzIFBNQyBTbGF2ZSBNaXNjIDogMHgwMDMwICovCiAJLyogVHVybm9uLWRlbGF5IGFuZCByZW1hcCBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgNjAzMCBhcmUgbm90CiAJICAgdmVyaWZpZWQgc2luY2UgdGhlIHNwZWNpZmljYXRpb24gaXMgbm90IHB1YmxpYyAqLwotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDFfNjAzMCwgMHg1NCwgMSwgMCwgMHgwOCksCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYMl82MDMwLCAweDU4LCAyLCAwLCAweDA4KSwKLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgzXzYwMzAsIDB4NWMsIDMsIDAsIDB4MDgpLAotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVk1NQywgMHg2OCwgNCwgMCwgMHgwOCksCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWUFAsIDB4NmMsIDUsIDAsIDB4MDgpLAotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVlVTSU0sIDB4NzQsIDcsIDAsIDB4MDgpLAotCVRXTDYwMzBfRklYRURfTERPKFZBTkEsIDB4NTAsIDIxMDAsIDE1LCAwLCAweDA4KSwKLQlUV0w2MDMwX0ZJWEVEX0xETyhWQ1hJTywgMHg2MCwgMTgwMCwgMTYsIDAsIDB4MDgpLAotCVRXTDYwMzBfRklYRURfTERPKFZEQUMsIDB4NjQsIDE4MDAsIDE3LCAwLCAweDA4KSwKLQlUV0w2MDMwX0ZJWEVEX0xETyhWVVNCLCAweDcwLCAzMzAwLCAxOCwgMCwgMHgwOCkKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgxXzYwMzAsIDB4NTQsIDEsIDAsIDB4MjEpLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDJfNjAzMCwgMHg1OCwgMiwgMCwgMHgyMSksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYM182MDMwLCAweDVjLCAzLCAwLCAweDIxKSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZNTUMsIDB4NjgsIDQsIDAsIDB4MjEpLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVlBQLCAweDZjLCA1LCAwLCAweDIxKSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZVU0lNLCAweDc0LCA3LCAwLCAweDIxKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWQU5BLCAweDUwLCAyMTAwLCAxNSwgMCwgMHgyMSksCisJVFdMNjAzMF9GSVhFRF9MRE8oVkNYSU8sIDB4NjAsIDE4MDAsIDE2LCAwLCAweDIxKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWREFDLCAweDY0LCAxODAwLCAxNywgMCwgMHgyMSksCisJVFdMNjAzMF9GSVhFRF9MRE8oVlVTQiwgMHg3MCwgMzMwMCwgMTgsIDAsIDB4MjEpCiB9OwogCi1zdGF0aWMgaW50IHR3bHJlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgdHdscmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50CQkJCWk7CiAJc3RydWN0IHR3bHJlZ19pbmZvCQkqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYwppbmRleCBhZGRjMDMyLi5kOTZjZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCkBAIC0xOSw3ICsxOSw3IEBACiBzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhIHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7Ci0JaW50IGVuYWJsZWQ7CisJYm9vbCBlbmFibGVkOwogCWludCBtaW5fdVY7CiAJaW50IG1heF91VjsKIAlpbnQgbWluX3VBOwpAQCAtNDksNyArNDksNyBAQAogCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CisJCQlkYXRhLT5lbmFibGVkID0gdHJ1ZTsKIAkJZWxzZQogCQkJZGV2X2VycihkZXYsICJyZWd1bGF0b3JfZW5hYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwpAQCAtNTksNyArNTksNyBAQAogCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCi0JCQlkYXRhLT5lbmFibGVkID0gMDsKKwkJCWRhdGEtPmVuYWJsZWQgPSBmYWxzZTsKIAkJZWxzZQogCQkJZGV2X2VycihkZXYsICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKQEAgLTg5LDcgKzg5LDcgQEAKIAkJZGV2X2RiZyhkZXYsICJFbmFibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGRhdGEtPnJlZ3VsYXRvcik7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWRhdGEtPmVuYWJsZWQgPSAxOworCQkJZGF0YS0+ZW5hYmxlZCA9IHRydWU7CiAJCWVsc2UKIAkJCWRldl9lcnIoZGV2LCAicmVndWxhdG9yX2VuYWJsZSgpIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKQEAgLTk5LDcgKzk5LDcgQEAKIAkJZGV2X2RiZyhkZXYsICJEaXNhYmxpbmcgcmVndWxhdG9yXG4iKTsKIAkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZGF0YS0+ZW5hYmxlZCA9IDA7CisJCQlkYXRhLT5lbmFibGVkID0gZmFsc2U7CiAJCWVsc2UKIAkJCWRldl9lcnIoZGV2LCAicmVndWxhdG9yX2Rpc2FibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CkBAIC0yNzAsMjQgKzI3MCwyOCBAQAogc3RhdGljIERFVklDRV9BVFRSKG1heF9taWNyb2FtcHMsIDA2NjYsIHNob3dfbWF4X3VBLCBzZXRfbWF4X3VBKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCAwNjY2LCBzaG93X21vZGUsIHNldF9tb2RlKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX21pbl9taWNyb3ZvbHRzLAotCSZkZXZfYXR0cl9tYXhfbWljcm92b2x0cywKLQkmZGV2X2F0dHJfbWluX21pY3JvYW1wcywKLQkmZGV2X2F0dHJfbWF4X21pY3JvYW1wcywKLQkmZGV2X2F0dHJfbW9kZSwKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZWd1bGF0b3JfdmlydHVhbF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX21pbl9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX21pbl9taWNyb2FtcHMuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X21pY3JvYW1wcy5hdHRyLAorCSZkZXZfYXR0cl9tb2RlLmF0dHIsCisJTlVMTAogfTsKIAotc3RhdGljIGludCByZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcmVndWxhdG9yX3ZpcnR1YWxfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMJPSByZWd1bGF0b3JfdmlydHVhbF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcmVndWxhdG9yX3ZpcnR1YWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljaGFyICpyZWdfaWQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhICpkcnZkYXRhOwotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCWRydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRydmRhdGEgPT0gTlVMTCkgeworCWlmIChkcnZkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCW11dGV4X2luaXQoJmRydmRhdGEtPmxvY2spOwogCkBAIC0yOTksMTMgKzMwMywxMiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyaWJ1dGVzKTsgaSsrKSB7Ci0JCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIGF0dHIgJWQ6ICVkXG4iLAotCQkJCWksIHJldCk7Ci0JCQlnb3RvIGVycl9yZWd1bGF0b3I7Ci0JCX0KKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLAorCQkJCSAmcmVndWxhdG9yX3ZpcnR1YWxfYXR0cl9ncm91cCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gY3JlYXRlIGF0dHJpYnV0ZSBncm91cDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKIAl9CiAKIAlkcnZkYXRhLT5tb2RlID0gcmVndWxhdG9yX2dldF9tb2RlKGRydmRhdGEtPnJlZ3VsYXRvcik7CkBAIC0zMTcsMzcgKzMyMCwzNiBAQAogZXJyX3JlZ3VsYXRvcjoKIAlyZWd1bGF0b3JfcHV0KGRydmRhdGEtPnJlZ3VsYXRvcik7CiBlcnI6Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOwogCWtmcmVlKGRydmRhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcmVndWxhdG9yX3ZpcnR1YWxfY29uc3VtZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCByZWd1bGF0b3JfdmlydHVhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhICpkcnZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyaWJ1dGVzKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgYXR0cmlidXRlc1tpXSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnJlZ3VsYXRvcl92aXJ0dWFsX2F0dHJfZ3JvdXApOworCiAJaWYgKGRydmRhdGEtPmVuYWJsZWQpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKGRydmRhdGEtPnJlZ3VsYXRvcik7CiAJcmVndWxhdG9yX3B1dChkcnZkYXRhLT5yZWd1bGF0b3IpOwogCiAJa2ZyZWUoZHJ2ZGF0YSk7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHJlZ3VsYXRvcl92aXJ0dWFsX2NvbnN1bWVyX3Byb2JlLAotCS5yZW1vdmUJCT0gcmVndWxhdG9yX3ZpcnR1YWxfY29uc3VtZXJfcmVtb3ZlLAorCS5wcm9iZQkJPSByZWd1bGF0b3JfdmlydHVhbF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJlZ3VsYXRvcl92aXJ0dWFsX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJyZWctdmlydC1jb25zdW1lciIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAotCiBzdGF0aWMgaW50IF9faW5pdCByZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmVndWxhdG9yX3ZpcnR1YWxfY29uc3VtZXJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCmluZGV4IDBhNjU3NzUuLjZlMThlNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYwpAQCAtNjAwLDYgKzYwMCw4IEBACiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGNkYy0+d204MzF4OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiSEMiKSwgZGNkYyk7CiAJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlVWIiksIGRjZGMpOwogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGRjZGMtPnJlZ3VsYXRvcik7CkBAIC02MTUsNiArNjE3LDcgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X2J1Y2t2X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1idWNrdiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC03NjksNiArNzcyLDggQEAKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkY2RjLT53bTgzMXg7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJVViIpLCBkY2RjKTsKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihkY2RjLT5yZWd1bGF0b3IpOwogCWtmcmVlKGRjZGMpOwpAQCAtNzgxLDYgKzc4Niw3IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF9idWNrcF9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ3bTgzMXgtYnVja3AiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtODk1LDYgKzkwMSw4IEBACiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGNkYy0+d204MzF4OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiVVYiKSwgZGNkYyk7CiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoZGNkYy0+cmVndWxhdG9yKTsKIAlrZnJlZShkY2RjKTsKQEAgLTkwNyw2ICs5MTUsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfYm9vc3RwX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1ib29zdHAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtOTc5LDYgKzk4OCw4IEBACiB7CiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGRjZGMtPnJlZ3VsYXRvcik7CiAJa2ZyZWUoZGNkYyk7CiAKQEAgLTk5MCw2ICsxMDAxLDcgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X2VwZV9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ3bTgzMXgtZXBlIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1pc2luay5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWlzaW5rLmMKaW5kZXggNDg4NTcwMC4uY2EwZjZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWlzaW5rLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWlzaW5rLmMKQEAgLTIyMiw2ICsyMjIsOCBAQAogCXN0cnVjdCB3bTgzMXhfaXNpbmsgKmlzaW5rID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gaXNpbmstPndtODMxeDsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgaXNpbmspOwogCiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoaXNpbmstPnJlZ3VsYXRvcik7CkBAIC0yMzUsNiArMjM3LDcgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X2lzaW5rX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1pc2luayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKaW5kZXggNjFlMDJhYy4uZDI0MDZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwpAQCAtMzcxLDYgKzM3MSw4IEBACiAJc3RydWN0IHdtODMxeF9sZG8gKmxkbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiVVYiKSwgbGRvKTsKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihsZG8tPnJlZ3VsYXRvcik7CiAJa2ZyZWUobGRvKTsKQEAgLTM4Myw2ICszODUsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfZ3BfbGRvX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1sZG8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtNjQwLDYgKzY0Myw3IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF9hbGRvX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1hbGRvIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTgxMSw2ICs4MTUsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfYWxpdmVfbGRvX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1hbGl2ZS1sZG8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IGU3Yjg5ZTcuLjk0MjI3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTI5MCw2ICsyOTAsNTEgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfaXNpbmtfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmVnOworCisJc3dpdGNoIChpc2luaykgeworCWNhc2UgV004MzUwX0lTSU5LX0E6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DU0FfRkxBU0hfQ09OVFJPTCk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0lTSU5LX0I6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DU0JfRkxBU0hfQ09OVFJPTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZWcgJiBXTTgzNTBfQ1MxX0ZMQVNIX01PREUpIHsKKwkJc3dpdGNoIChyZWcgJiBXTTgzNTBfQ1MxX09OX1JBTVBfTUFTSykgeworCQljYXNlIDA6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIDE5NTA7CisJCWNhc2UgMjoKKwkJCXJldHVybiAzOTEwOworCQljYXNlIDM6CisJCQlyZXR1cm4gNzgwMDsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAocmVnICYgV004MzUwX0NTMV9PTl9SQU1QX01BU0spIHsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIDA7CisJCWNhc2UgMToKKwkJCXJldHVybiAyNTAwMDA7CisJCWNhc2UgMjoKKwkJCXJldHVybiA1MDAwMDA7CisJCWNhc2UgMzoKKwkJCXJldHVybiAxMDAwMDAwOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKwogaW50IHdtODM1MF9pc2lua19zZXRfZmxhc2goc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXNpbmssIHUxNiBtb2RlLAogCQkJICAgdTE2IHRyaWdnZXIsIHUxNiBkdXJhdGlvbiwgdTE2IG9uX3JhbXAsIHUxNiBvZmZfcmFtcCwKIAkJCSAgIHUxNiBkcml2ZSkKQEAgLTEyMjEsNiArMTI2Niw3IEBACiAJLmVuYWJsZSA9IHdtODM1MF9pc2lua19lbmFibGUsCiAJLmRpc2FibGUgPSB3bTgzNTBfaXNpbmtfZGlzYWJsZSwKIAkuaXNfZW5hYmxlZCA9IHdtODM1MF9pc2lua19pc19lbmFibGVkLAorCS5lbmFibGVfdGltZSA9IHdtODM1MF9pc2lua19lbmFibGVfdGltZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgd204MzUwX3JlZ1tOVU1fV004MzUwX1JFR1VMQVRPUlNdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCmluZGV4IGQ5YTJjOTguLjkyNGM3ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKQEAgLTMxNywxNCArMzE3LDE3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODQwMF9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSBjb250YWluZXJfb2YocGRldiwgc3RydWN0IHdtODQwMCwgcmVndWxhdG9yc1twZGV2LT5pZF0pOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCiAJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCi0JCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldikpOworCQkJCSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHdtODQwMCk7CiAKIAlpZiAoSVNfRVJSKHJkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzMiw2ICszMzUsNyBAQAogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMzcwLDcgKzM3NCw2IEBACiAJd204NDAwLT5yZWd1bGF0b3JzW3JlZ10uaWQgPSByZWc7CiAJd204NDAwLT5yZWd1bGF0b3JzW3JlZ10uZGV2LnBhcmVudCA9IGRldjsKIAl3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5kZXYucGxhdGZvcm1fZGF0YSA9IGluaXRkYXRhOwotCWRldl9zZXRfZHJ2ZGF0YSgmd204NDAwLT5yZWd1bGF0b3JzW3JlZ10uZGV2LCB3bTg0MDApOwogCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd204NDAwLT5yZWd1bGF0b3JzW3JlZ10pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiB3bTg5OTQtcmVndWxhdG9yLmMgIC0tICBSZWd1bGF0b3IgZHJpdmVyIGZvciB0aGUgV004OTk0CisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3BkYXRhLmg+CisKK3N0cnVjdCB3bTg5OTRfbGRvIHsKKwlpbnQgZW5hYmxlOworCWJvb2wgaXNfZW5hYmxlZDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOworCXN0cnVjdCB3bTg5OTQgKndtODk5NDsKK307CisKKyNkZWZpbmUgV004OTk0X0xETzFfTUFYX1NFTEVDVE9SIDB4NworI2RlZmluZSBXTTg5OTRfTERPMl9NQVhfU0VMRUNUT1IgMHgzCisKK3N0YXRpYyBpbnQgd204OTk0X2xkb19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwkvKiBJZiB3ZSBoYXZlIG5vIHNvZnQgY29udHJvbCBhc3N1bWUgdGhhdCB0aGUgTERPIGlzIGFsd2F5cyBlbmFibGVkLiAqLworCWlmICghbGRvLT5lbmFibGUpCisJCXJldHVybiAwOworCisJZ3Bpb19zZXRfdmFsdWUobGRvLT5lbmFibGUsIDEpOworCWxkby0+aXNfZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwkvKiBJZiB3ZSBoYXZlIG5vIHNvZnQgY29udHJvbCBhc3N1bWUgdGhhdCB0aGUgTERPIGlzIGFsd2F5cyBlbmFibGVkLiAqLworCWlmICghbGRvLT5lbmFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZ3Bpb19zZXRfdmFsdWUobGRvLT5lbmFibGUsIDApOworCWxkby0+aXNfZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2xkb19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIGxkby0+aXNfZW5hYmxlZDsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvX2VuYWJsZV90aW1lKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCS8qIDNtcyBpcyBmYWlybHkgY29uc2VydmF0aXZlIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSB0b28gcGVyZm9ybWFuY2UKKwkgKiBjcml0aWNhbDsgY2FuIGJlIHR3ZWFrZWQgcGVyLXN5c3RlbSBpZiByZXF1aXJlZC4gKi8KKwlyZXR1cm4gMzAwMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvMV9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBzZWxlY3RvcikKK3sKKwlpZiAoc2VsZWN0b3IgPiBXTTg5OTRfTERPMV9NQVhfU0VMRUNUT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIChzZWxlY3RvciAqIDEwMDAwMCkgKyAyNDAwMDAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9sZG8xX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2YWw7CisKKwl2YWwgPSB3bTg5OTRfcmVnX3JlYWQobGRvLT53bTg5OTQsIFdNODk5NF9MRE9fMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwl2YWwgPSAodmFsICYgV004OTk0X0xETzFfVlNFTF9NQVNLKSA+PiBXTTg5OTRfTERPMV9WU0VMX1NISUZUOworCisJcmV0dXJuIHdtODk5NF9sZG8xX2xpc3Rfdm9sdGFnZShyZGV2LCB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODk5NF9sZG8xX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHNlbGVjdG9yLCB2OworCisJc2VsZWN0b3IgPSAobWluX3VWIC0gMjQwMDAwMCkgLyAxMDAwMDA7CisJdiA9IHdtODk5NF9sZG8xX2xpc3Rfdm9sdGFnZShyZGV2LCBzZWxlY3Rvcik7CisJaWYgKHYgPCAwIHx8IHYgPiBtYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VsZWN0b3IgPDw9IFdNODk5NF9MRE8xX1ZTRUxfU0hJRlQ7CisKKwlyZXR1cm4gd204OTk0X3NldF9iaXRzKGxkby0+d204OTk0LCBXTTg5OTRfTERPXzEsCisJCQkgICAgICAgV004OTk0X0xETzFfVlNFTF9NQVNLLCBzZWxlY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTg5OTRfbGRvMV9vcHMgPSB7CisJLmVuYWJsZSA9IHdtODk5NF9sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gd204OTk0X2xkb19kaXNhYmxlLAorCS5pc19lbmFibGVkID0gd204OTk0X2xkb19pc19lbmFibGVkLAorCS5lbmFibGVfdGltZSA9IHdtODk5NF9sZG9fZW5hYmxlX3RpbWUsCisKKwkubGlzdF92b2x0YWdlID0gd204OTk0X2xkbzFfbGlzdF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZSA9IHdtODk5NF9sZG8xX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHdtODk5NF9sZG8xX3NldF92b2x0YWdlLAorfTsKKworc3RhdGljIGludCB3bTg5OTRfbGRvMl9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBzZWxlY3RvcikKK3sKKwlpZiAoc2VsZWN0b3IgPiBXTTg5OTRfTERPMl9NQVhfU0VMRUNUT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIChzZWxlY3RvciAqIDEwMDAwMCkgKyA5MDAwMDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2xkbzJfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZhbDsKKworCXZhbCA9IHdtODk5NF9yZWdfcmVhZChsZG8tPndtODk5NCwgV004OTk0X0xET18yKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCA9ICh2YWwgJiBXTTg5OTRfTERPMl9WU0VMX01BU0spID4+IFdNODk5NF9MRE8yX1ZTRUxfU0hJRlQ7CisKKwlyZXR1cm4gd204OTk0X2xkbzJfbGlzdF92b2x0YWdlKHJkZXYsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2xkbzJfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgc2VsZWN0b3IsIHY7CisKKwlzZWxlY3RvciA9IChtaW5fdVYgLSA5MDAwMDApIC8gMTAwMDAwOworCXYgPSB3bTg5OTRfbGRvMl9saXN0X3ZvbHRhZ2UocmRldiwgc2VsZWN0b3IpOworCWlmICh2IDwgMCB8fCB2ID4gbWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNlbGVjdG9yIDw8PSBXTTg5OTRfTERPMl9WU0VMX1NISUZUOworCisJcmV0dXJuIHdtODk5NF9zZXRfYml0cyhsZG8tPndtODk5NCwgV004OTk0X0xET18yLAorCQkJICAgICAgIFdNODk5NF9MRE8yX1ZTRUxfTUFTSywgc2VsZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204OTk0X2xkbzJfb3BzID0geworCS5lbmFibGUgPSB3bTg5OTRfbGRvX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHdtODk5NF9sZG9fZGlzYWJsZSwKKwkuaXNfZW5hYmxlZCA9IHdtODk5NF9sZG9faXNfZW5hYmxlZCwKKwkuZW5hYmxlX3RpbWUgPSB3bTg5OTRfbGRvX2VuYWJsZV90aW1lLAorCisJLmxpc3Rfdm9sdGFnZSA9IHdtODk5NF9sZG8yX2xpc3Rfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMl9nZXRfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMl9zZXRfdm9sdGFnZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgd204OTk0X2xkb19kZXNjW10gPSB7CisJeworCQkubmFtZSA9ICJMRE8xIiwKKwkJLmlkID0gMSwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTg5OTRfTERPMV9NQVhfU0VMRUNUT1IgKyAxLAorCQkub3BzID0gJndtODk5NF9sZG8xX29wcywKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzIiLAorCQkuaWQgPSAyLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODk5NF9MRE8yX01BWF9TRUxFQ1RPUiArIDEsCisJCS5vcHMgPSAmd204OTk0X2xkbzJfb3BzLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTk0X2xkb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCBpZCA9IHBkZXYtPmlkICUgQVJSQVlfU0laRShwZGF0YS0+bGRvKTsKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvOworCWludCByZXQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJQcm9iaW5nIExETyVkXG4iLCBpZCArIDEpOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsZG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTk0X2xkbyksIEdGUF9LRVJORUwpOworCWlmIChsZG8gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbGRvLT53bTg5OTQgPSB3bTg5OTQ7CisKKwlsZG8tPmlzX2VuYWJsZWQgPSB0cnVlOworCisJaWYgKHBkYXRhLT5sZG9baWRdLmVuYWJsZSAmJiBncGlvX2lzX3ZhbGlkKHBkYXRhLT5sZG9baWRdLmVuYWJsZSkpIHsKKwkJbGRvLT5lbmFibGUgPSBwZGF0YS0+bGRvW2lkXS5lbmFibGU7CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGxkby0+ZW5hYmxlLCAiV004OTk0IExETyBlbmFibGUiKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgZW5hYmxlIEdQSU86ICVkXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChsZG8tPmVuYWJsZSwgbGRvLT5pc19lbmFibGVkKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgR1BJTyB1cDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyX2dwaW87CisJCX0KKwl9CisKKwlsZG8tPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9yZWdpc3Rlcigmd204OTk0X2xkb19kZXNjW2lkXSwgJnBkZXYtPmRldiwKKwkJCQkJICAgICBwZGF0YS0+bGRvW2lkXS5pbml0X2RhdGEsIGxkbyk7CisJaWYgKElTX0VSUihsZG8tPnJlZ3VsYXRvcikpIHsKKwkJcmV0ID0gUFRSX0VSUihsZG8tPnJlZ3VsYXRvcik7CisJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTERPJWQ6ICVkXG4iLAorCQkJaWQgKyAxLCByZXQpOworCQlnb3RvIGVycl9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxkbyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2dwaW86CisJaWYgKGdwaW9faXNfdmFsaWQobGRvLT5lbmFibGUpKQorCQlncGlvX2ZyZWUobGRvLT5lbmFibGUpOworZXJyOgorCWtmcmVlKGxkbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTk0X2xkb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxkby0+cmVndWxhdG9yKTsKKwlpZiAoZ3Bpb19pc192YWxpZChsZG8tPmVuYWJsZSkpCisJCWdwaW9fZnJlZShsZG8tPmVuYWJsZSk7CisJa2ZyZWUobGRvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg5OTRfbGRvX2RyaXZlciA9IHsKKwkucHJvYmUgPSB3bTg5OTRfbGRvX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5OTRfbGRvX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIndtODk5NC1sZG8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204OTk0X2xkb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204OTk0X2xkb19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV204OTk0IEdQIExETyBkcml2ZXI6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK3N1YnN5c19pbml0Y2FsbCh3bTg5OTRfbGRvX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTk0X2xkb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODk5NF9sZG9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk5NF9sZG9fZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldNODk5NCBMRE8gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODk5NC1sZG8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDgxNjdlOWUuLjJiYjhhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtODY4LDQgKzg2OCwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQyBSVEMKIAorY29uZmlnIFJUQ19EUlZfTVBDNTEyMQorCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBDNTEyMSBidWlsdC1pbiBSVEMiCisJZGVwZW5kcyBvbiBQUENfTVBDNTEyeCAmJiBSVENfQ0xBU1MKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIGJ1aWx0LWluIFJUQyBNUEM1MTIxLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tcGM1MTIxLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCBlNTE2MGZkLi5iNzE0OGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNTUsNiArNTUsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUFYNjkwMikJKz0gcnRjLW1heDY5MDIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUMxMzc4MykJKz0gcnRjLW1jMTM3ODMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVNNNjI0MikJKz0gcnRjLW1zbTYyNDIubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTVBDNTEyMSkJKz0gcnRjLW1wYzUxMjEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVYpCSs9IHJ0Yy1tdi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9OVUM5MDApCSs9IHJ0Yy1udWM5MDAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfT01BUCkJKz0gcnRjLW9tYXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxM2NhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBSZWFsLXRpbWUgY2xvY2sgZHJpdmVyIGZvciBNUEM1MTIxCisgKgorICogQ29weXJpZ2h0IDIwMDcsIERvbWVuIFB1bmNlciA8ZG9tZW4ucHVuY2VyQHRlbGFyZ28uY29tPgorICogQ29weXJpZ2h0IDIwMDgsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgeworCXU4IHNldF90aW1lOwkJLyogUlRDICsgMHgwMCAqLworCXU4IGhvdXJfc2V0OwkJLyogUlRDICsgMHgwMSAqLworCXU4IG1pbnV0ZV9zZXQ7CQkvKiBSVEMgKyAweDAyICovCisJdTggc2Vjb25kX3NldDsJCS8qIFJUQyArIDB4MDMgKi8KKworCXU4IHNldF9kYXRlOwkJLyogUlRDICsgMHgwNCAqLworCXU4IG1vbnRoX3NldDsJCS8qIFJUQyArIDB4MDUgKi8KKwl1OCB3ZWVrZGF5X3NldDsJCS8qIFJUQyArIDB4MDYgKi8KKwl1OCBkYXRlX3NldDsJCS8qIFJUQyArIDB4MDcgKi8KKworCXU4IHdyaXRlX3N3OwkJLyogUlRDICsgMHgwOCAqLworCXU4IHN3X3NldDsJCS8qIFJUQyArIDB4MDkgKi8KKwl1MTYgeWVhcl9zZXQ7CQkvKiBSVEMgKyAweDBhICovCisKKwl1OCBhbG1fZW5hYmxlOwkJLyogUlRDICsgMHgwYyAqLworCXU4IGFsbV9ob3VyX3NldDsJLyogUlRDICsgMHgwZCAqLworCXU4IGFsbV9taW5fc2V0OwkJLyogUlRDICsgMHgwZSAqLworCXU4IGludF9lbmFibGU7CQkvKiBSVEMgKyAweDBmICovCisKKwl1OCByZXNlcnZlZDE7CisJdTggaG91cjsJCS8qIFJUQyArIDB4MTEgKi8KKwl1OCBtaW51dGU7CQkvKiBSVEMgKyAweDEyICovCisJdTggc2Vjb25kOwkJLyogUlRDICsgMHgxMyAqLworCisJdTggbW9udGg7CQkvKiBSVEMgKyAweDE0ICovCisJdTggd2RheV9tZGF5OwkJLyogUlRDICsgMHgxNSAqLworCXUxNiB5ZWFyOwkJLyogUlRDICsgMHgxNiAqLworCisJdTggaW50X2FsbTsJCS8qIFJUQyArIDB4MTggKi8KKwl1OCBpbnRfc3c7CQkvKiBSVEMgKyAweDE5ICovCisJdTggYWxtX3N0YXR1czsJCS8qIFJUQyArIDB4MWEgKi8KKwl1OCBzd19taW51dGU7CQkvKiBSVEMgKyAweDFiICovCisKKwl1OCBidXNfZXJyb3JfMTsJCS8qIFJUQyArIDB4MWMgKi8KKwl1OCBpbnRfZGF5OwkJLyogUlRDICsgMHgxZCAqLworCXU4IGludF9taW47CQkvKiBSVEMgKyAweDFlICovCisJdTggaW50X3NlYzsJCS8qIFJUQyArIDB4MWYgKi8KKworCS8qCisJICogdGFyZ2V0X3RpbWU6CisJICoJaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgaGliZXJuYXRpb24gYnV0IGhpYmVybmF0aW9uCisJICoJZG9lcyBub3Qgd29yayBvbiBzaWxpY29uIHJldiAxLjUgc28gdXNlIGl0IGZvciBub24tdm9sYXRpbGUKKwkgKglzdG9yYWdlIG9mIG9mZnNldCBiZXR3ZWVuIHRoZSBhY3R1YWxfdGltZSByZWdpc3RlciBhbmQgbGludXgKKwkgKgl0aW1lCisJICovCisJdTMyIHRhcmdldF90aW1lOwkvKiBSVEMgKyAweDIwICovCisJLyoKKwkgKiBhY3R1YWxfdGltZToKKwkgKiAJcmVhZG9ubHkgdGltZSBzaW5jZSBWQkFUX1JUQyB3YXMgbGFzdCBjb25uZWN0ZWQKKwkgKi8KKwl1MzIgYWN0dWFsX3RpbWU7CS8qIFJUQyArIDB4MjQgKi8KKwl1MzIga2VlcF9hbGl2ZTsJCS8qIFJUQyArIDB4MjggKi8KK307CisKK3N0cnVjdCBtcGM1MTIxX3J0Y19kYXRhIHsKKwl1bnNpZ25lZCBpcnE7CisJdW5zaWduZWQgaXJxX3BlcmlvZGljOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcnRjX3drYWxybSB3a2FsYXJtOworfTsKKworLyoKKyAqIFVwZGF0ZSBzZWNvbmQvbWludXRlL2hvdXIgcmVnaXN0ZXJzLgorICoKKyAqIFRoaXMgaXMganVzdCBzbyBhbGFybSB3aWxsIHdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIG1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgoc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncywKKwkJCQkgICBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCW91dF84KCZyZWdzLT5zZWNvbmRfc2V0LCB0bS0+dG1fc2VjKTsKKwlvdXRfOCgmcmVncy0+bWludXRlX3NldCwgdG0tPnRtX21pbik7CisJb3V0XzgoJnJlZ3MtPmhvdXJfc2V0LCB0bS0+dG1faG91cik7CisKKwkvKiBzZXQgdGltZSBzZXF1ZW5jZSAqLworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgxKTsKKwlvdXRfOCgmcmVncy0+c2V0X3RpbWUsIDB4Myk7CisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDEpOworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgwKTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBsaW51eCB0aW1lIGlzIGFjdHVhbF90aW1lIHBsdXMgdGhlIG9mZnNldCBzYXZlZCBpbiB0YXJnZXRfdGltZQorCSAqLworCW5vdyA9IGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSArIGluX2JlMzIoJnJlZ3MtPnRhcmdldF90aW1lKTsKKworCXJ0Y190aW1lX3RvX3RtKG5vdywgdG0pOworCisJLyoKKwkgKiB1cGRhdGUgc2Vjb25kIG1pbnV0ZSBob3VyIHJlZ2lzdGVycworCSAqIHNvIGFsYXJtcyB3aWxsIHdvcmsKKwkgKi8KKwltcGM1MTIxX3J0Y191cGRhdGVfc21oKHJlZ3MsIHRtKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBUaGUgYWN0dWFsX3RpbWUgcmVnaXN0ZXIgaXMgcmVhZCBvbmx5IHNvIHdlIHdyaXRlIHRoZSBvZmZzZXQKKwkgKiBiZXR3ZWVuIGl0IGFuZCBsaW51eCB0aW1lIHRvIHRoZSB0YXJnZXRfdGltZSByZWdpc3Rlci4KKwkgKi8KKwlyZXQgPSBydGNfdG1fdG9fdGltZSh0bSwgJm5vdyk7CisJaWYgKHJldCA9PSAwKQorCQlvdXRfYmUzMigmcmVncy0+dGFyZ2V0X3RpbWUsIG5vdyAtIGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSk7CisKKwkvKgorCSAqIHVwZGF0ZSBzZWNvbmQgbWludXRlIGhvdXIgcmVnaXN0ZXJzCisJICogc28gYWxhcm1zIHdpbGwgd29yaworCSAqLworCW1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgocmVncywgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCSphbGFybSA9IHJ0Yy0+d2thbGFybTsKKworCWFsYXJtLT5wZW5kaW5nID0gaW5fOCgmcmVncy0+YWxtX3N0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwkvKgorCSAqIHRoZSBhbGFybSBoYXMgbm8gc2Vjb25kcyBzbyBkZWFsIHdpdGggaXQKKwkgKi8KKwlpZiAoYWxhcm0tPnRpbWUudG1fc2VjKSB7CisJCWFsYXJtLT50aW1lLnRtX3NlYyA9IDA7CisJCWFsYXJtLT50aW1lLnRtX21pbisrOworCQlpZiAoYWxhcm0tPnRpbWUudG1fbWluID49IDYwKSB7CisJCQlhbGFybS0+dGltZS50bV9taW4gPSAwOworCQkJYWxhcm0tPnRpbWUudG1faG91cisrOworCQkJaWYgKGFsYXJtLT50aW1lLnRtX2hvdXIgPj0gMjQpCisJCQkJYWxhcm0tPnRpbWUudG1faG91ciA9IDA7CisJCX0KKwl9CisKKwlhbGFybS0+dGltZS50bV9tZGF5ID0gLTE7CisJYWxhcm0tPnRpbWUudG1fbW9uID0gLTE7CisJYWxhcm0tPnRpbWUudG1feWVhciA9IC0xOworCisJb3V0XzgoJnJlZ3MtPmFsbV9taW5fc2V0LCBhbGFybS0+dGltZS50bV9taW4pOworCW91dF84KCZyZWdzLT5hbG1faG91cl9zZXQsIGFsYXJtLT50aW1lLnRtX2hvdXIpOworCisJb3V0XzgoJnJlZ3MtPmFsbV9lbmFibGUsIGFsYXJtLT5lbmFibGVkKTsKKworCXJ0Yy0+d2thbGFybSA9ICphbGFybTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1wYzUxMjFfcnRjX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X2FsbSkpIHsKKwkJLyogYWNrbm93bGVkZ2UgYW5kIGNsZWFyIHN0YXR1cyAqLworCQlvdXRfOCgmcmVncy0+aW50X2FsbSwgMSk7CisJCW91dF84KCZyZWdzLT5hbG1fc3RhdHVzLCAxKTsKKworCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X3NlYykgJiYgKGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgMHgxKSkgeworCQkvKiBhY2tub3dsZWRnZSAqLworCQlvdXRfOCgmcmVncy0+aW50X3NlYywgMSk7CisKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCWlmIChlbmFibGVkKQorCQl2YWwgPSAxOworCWVsc2UKKwkJdmFsID0gMDsKKworCW91dF84KCZyZWdzLT5hbG1fZW5hYmxlLCB2YWwpOworCXJ0Yy0+d2thbGFybS5lbmFibGVkID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCXZhbCA9IGluXzgoJnJlZ3MtPmludF9lbmFibGUpOworCisJaWYgKGVuYWJsZWQpCisJCXZhbCA9ICh2YWwgJiB+MHg4KSB8IDB4MTsKKwllbHNlCisJCXZhbCAmPSB+MHgxOworCisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1wYzUxMjFfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gbXBjNTEyMV9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IG1wYzUxMjFfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gbXBjNTEyMV9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gbXBjNTEyMV9ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbXBjNTEyMV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSBtcGM1MTIxX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUxMjFfcnRjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjOworCWludCBlcnIgPSAwOworCXUzMiBrYTsKKworCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKCpydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydGMtPnJlZ3MgPSBvZl9pb21hcChvcC0+bm9kZSwgMCk7CisJaWYgKCFydGMtPnJlZ3MpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIiVzOiBjb3VsZG4ndCBtYXAgaW8gc3BhY2VcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVOT1NZUzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJm9wLT5kZXYsIDEpOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBydGMpOworCisJcnRjLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvcC0+bm9kZSwgMSk7CisJZXJyID0gcmVxdWVzdF9pcnEocnRjLT5pcnEsIG1wYzUxMjFfcnRjX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCisJCQkJCQkibXBjNTEyMS1ydGMiLCAmb3AtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IGlycTogJWlcbiIsCisJCQkJCQkJX19mdW5jX18sIHJ0Yy0+aXJxKTsKKwkJZ290byBvdXRfZGlzcG9zZTsKKwl9CisKKwlydGMtPmlycV9wZXJpb2RpYyA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKKwllcnIgPSByZXF1ZXN0X2lycShydGMtPmlycV9wZXJpb2RpYywgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQsCisJCQkJSVJRRl9ESVNBQkxFRCwgIm1wYzUxMjEtcnRjX3VwZCIsICZvcC0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogY291bGQgbm90IHJlcXVlc3QgaXJxOiAlaVxuIiwKKwkJCQkJCV9fZnVuY19fLCBydGMtPmlycV9wZXJpb2RpYyk7CisJCWdvdG8gb3V0X2Rpc3Bvc2UyOworCX0KKworCWthID0gaW5fYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlKTsKKwlpZiAoa2EgJiAweDAyKSB7CisJCWRldl93YXJuKCZvcC0+ZGV2LAorCQkJIm1wYzUxMjEtcnRjOiBCYXR0ZXJ5IG9yIG9zY2lsbGF0b3IgZmFpbHVyZSFcbiIpOworCQlvdXRfYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlLCBrYSk7CisJfQorCisJcnRjLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtcGM1MTIxLXJ0YyIsICZvcC0+ZGV2LAorCQkJCQkmbXBjNTEyMV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihydGMtPnJ0Yyk7CisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocnRjLT5pcnFfcGVyaW9kaWMsICZvcC0+ZGV2KTsKK291dF9kaXNwb3NlMjoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworb3V0X2Rpc3Bvc2U6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaW91bm1hcChydGMtPnJlZ3MpOworb3V0X2ZyZWU6CisJa2ZyZWUocnRjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wYzUxMjFfcnRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHNvIHRoZXJlIGFyZSBubyBuYXN0eSBzdXJwcmlzZXMgKi8KKwlvdXRfOCgmcmVncy0+YWxtX2VuYWJsZSwgMCk7CisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgfjB4MSk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGMpOworCWlvdW5tYXAocnRjLT5yZWdzKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworCWZyZWVfaXJxKHJ0Yy0+aXJxX3BlcmlvZGljLCAmb3AtPmRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycV9wZXJpb2RpYyk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKKwlrZnJlZShydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUxMjFfcnRjX21hdGNoW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXJ0YyIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1MTIxX3J0Y19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTEyMS1ydGMiLAorCS5tYXRjaF90YWJsZSA9IG1wYzUxMjFfcnRjX21hdGNoLAorCS5wcm9iZSA9IG1wYzUxMjFfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtcGM1MTIxX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTEyMV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUxMjFfcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtcGM1MTIxX3J0Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUxMjFfcnRjX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTEyMV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wYzUxMjFfcnRjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIFJpZ2J5IDxqY3JpZ2J5QGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKaW5kZXggMDI2NGIxMS4uYzI1NmFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKQEAgLTcsNiArNyw5IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCisgKiBBdXRob3I6IE1pYW4gWW91c2FmIEthdWthYiA8bWlhbi55b3VzYWYua2F1a2FiQHN0ZXJpY3Nzb24uY29tPgorICogQ29weXJpZ2h0IDIwMTAgKGMpIFNULUVyaWNzc29uIEFCCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMTgsNiArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogLyoKICAqIFJlZ2lzdGVyIGRlZmluaXRpb25zCkBAIC0zMCwzNSArMzYsMjA3IEBACiAjZGVmaW5lCVJUQ19SSVMJCTB4MTQJLyogUmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUJUlRDX01JUwkJMHgxOAkvKiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQlSVENfSUNSCQkweDFjCS8qIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLworLyogU1QgdmFyaWFudHMgaGF2ZSBhZGRpdGlvbmFsIHRpbWVyIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgUlRDX1REUgkJMHgyMAkvKiBUaW1lciBkYXRhIHJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RMUgkJMHgyNAkvKiBUaW1lciBkYXRhIGxvYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RDUgkJMHgyOAkvKiBUaW1lciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19ZRFIJCTB4MzAJLyogWWVhciBkYXRhIHJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1lNUgkJMHgzNAkvKiBZZWFyIG1hdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19ZTFIJCTB4MzgJLyogWWVhciBkYXRhIGxvYWQgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBSVENfQ1JfQ1dFTgkoMSA8PCAyNikJLyogQ2xvY2t3YXRjaCBlbmFibGUgYml0ICovCisKKyNkZWZpbmUgUlRDX1RDUl9FTgkoMSA8PCAxKSAvKiBQZXJpb2RpYyB0aW1lciBlbmFibGUgYml0ICovCisKKy8qIENvbW1vbiBiaXQgZGVmaW5pdGlvbnMgZm9yIEludGVycnVwdCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJUQ19CSVRfQUkJKDEgPDwgMCkgLyogQWxhcm0gaW50ZXJydXB0IGJpdCAqLworI2RlZmluZSBSVENfQklUX1BJCSgxIDw8IDEpIC8qIFBlcmlvZGljIGludGVycnVwdCBiaXQuIFNUIHZhcmlhbnRzIG9ubHkuICovCisKKy8qIENvbW1vbiBiaXQgZGVmaW5hdGlvbnMgZm9yIFNUIHYyIGZvciByZWFkaW5nL3dyaXRpbmcgdGltZSAqLworI2RlZmluZSBSVENfU0VDX1NISUZUIDAKKyNkZWZpbmUgUlRDX1NFQ19NQVNLICgweDNGIDw8IFJUQ19TRUNfU0hJRlQpIC8qIFNlY29uZCBbMC01OV0gKi8KKyNkZWZpbmUgUlRDX01JTl9TSElGVCA2CisjZGVmaW5lIFJUQ19NSU5fTUFTSyAoMHgzRiA8PCBSVENfTUlOX1NISUZUKSAvKiBNaW51dGUgWzAtNTldICovCisjZGVmaW5lIFJUQ19IT1VSX1NISUZUIDEyCisjZGVmaW5lIFJUQ19IT1VSX01BU0sgKDB4MUYgPDwgUlRDX0hPVVJfU0hJRlQpIC8qIEhvdXIgWzAtMjNdICovCisjZGVmaW5lIFJUQ19XREFZX1NISUZUIDE3CisjZGVmaW5lIFJUQ19XREFZX01BU0sgKDB4NyA8PCBSVENfV0RBWV9TSElGVCkgLyogRGF5IG9mIFdlZWsgWzEtN10gMT1TdW5kYXkgKi8KKyNkZWZpbmUgUlRDX01EQVlfU0hJRlQgMjAKKyNkZWZpbmUgUlRDX01EQVlfTUFTSyAoMHgxRiA8PCBSVENfTURBWV9TSElGVCkgLyogRGF5IG9mIE1vbnRoIFsxLTMxXSAqLworI2RlZmluZSBSVENfTU9OX1NISUZUIDI1CisjZGVmaW5lIFJUQ19NT05fTUFTSyAoMHhGIDw8IFJUQ19NT05fU0hJRlQpIC8qIE1vbnRoIFsxLTEyXSAxPUphbnVhcnkgKi8KKworI2RlZmluZSBSVENfVElNRVJfRlJFUSAzMjc2OAogCiBzdHJ1Y3QgcGwwMzFfbG9jYWwgewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworCXU4IGh3X2Rlc2lnbmVyOworCXU4IGh3X3JldmlzaW9uOjQ7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgcGwwMzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgcGwwMzFfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGRldl9pZDsKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBpbXNjOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBSVENfQUYpOworCS8qIENsZWFyIGFueSBwZW5kaW5nIGFsYXJtIGludGVycnVwdHMuICovCisJd3JpdGVsKFJUQ19CSVRfQUksIGxkYXRhLT5iYXNlICsgUlRDX0lDUik7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaW1zYyA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJaWYgKGVuYWJsZWQgPT0gMSkKKwkJd3JpdGVsKGltc2MgfCBSVENfQklUX0FJLCBsZGF0YS0+YmFzZSArIFJUQ19JTVNDKTsKKwllbHNlCisJCXdyaXRlbChpbXNjICYgflJUQ19CSVRfQUksIGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGwwMzFfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKy8qCisgKiBDb252ZXJ0IEdyZWdvcmlhbiBkYXRlIHRvIFNUIHYyIFJUQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml90bV90b190aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqc3RfdGltZSwKKwl1bnNpZ25lZCBsb25nICpiY2RfeWVhcikKK3sKKwlpbnQgeWVhciA9IHRtLT50bV95ZWFyICsgMTkwMDsKKwlpbnQgd2RheSA9IHRtLT50bV93ZGF5OworCisJLyogd2RheSBtYXNraW5nIGlzIG5vdCB3b3JraW5nIGluIGhhcmR3YXJlIHNvIHdkYXkgbXVzdCBiZSB2YWxpZCAqLworCWlmICh3ZGF5IDwgLTEgfHwgd2RheSA+IDYpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHdkYXkgdmFsdWUgJWRcbiIsIHRtLT50bV93ZGF5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIGlmICh3ZGF5ID09IC0xKSB7CisJCS8qIHdkYXkgaXMgbm90IHByb3ZpZGVkLCBjYWxjdWxhdGUgaXQgaGVyZSAqLworCQl1bnNpZ25lZCBsb25nIHRpbWU7CisJCXN0cnVjdCBydGNfdGltZSBjYWxjX3RtOworCisJCXJ0Y190bV90b190aW1lKHRtLCAmdGltZSk7CisJCXJ0Y190aW1lX3RvX3RtKHRpbWUsICZjYWxjX3RtKTsKKwkJd2RheSA9IGNhbGNfdG0udG1fd2RheTsKKwl9CisKKwkqYmNkX3llYXIgPSAoYmluMmJjZCh5ZWFyICUgMTAwKSB8IGJpbjJiY2QoeWVhciAvIDEwMCkgPDwgOCk7CisKKwkqc3RfdGltZSA9ICgodG0tPnRtX21vbiArIDEpIDw8IFJUQ19NT05fU0hJRlQpCisJCQl8CSh0bS0+dG1fbWRheSA8PCBSVENfTURBWV9TSElGVCkKKwkJCXwJKCh3ZGF5ICsgMSkgPDwgUlRDX1dEQVlfU0hJRlQpCisJCQl8CSh0bS0+dG1faG91ciA8PCBSVENfSE9VUl9TSElGVCkKKwkJCXwJKHRtLT50bV9taW4gPDwgUlRDX01JTl9TSElGVCkKKwkJCXwJKHRtLT50bV9zZWMgPDwgUlRDX1NFQ19TSElGVCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnZlcnQgU1QgdjIgUlRDIGZvcm1hdCB0byBHcmVnb3JpYW4gZGF0ZS4KKyAqLworc3RhdGljIGludCBwbDAzMV9zdHYyX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyBzdF90aW1lLCB1bnNpZ25lZCBsb25nIGJjZF95ZWFyLAorCXN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJjZF95ZWFyKSArIChiY2QyYmluKGJjZF95ZWFyID4+IDgpICogMTAwKTsKKwl0bS0+dG1fbW9uICA9ICgoc3RfdGltZSAmIFJUQ19NT05fTUFTSykgPj4gUlRDX01PTl9TSElGVCkgLSAxOworCXRtLT50bV9tZGF5ID0gKChzdF90aW1lICYgUlRDX01EQVlfTUFTSykgPj4gUlRDX01EQVlfU0hJRlQpOworCXRtLT50bV93ZGF5ID0gKChzdF90aW1lICYgUlRDX1dEQVlfTUFTSykgPj4gUlRDX1dEQVlfU0hJRlQpIC0gMTsKKwl0bS0+dG1faG91ciA9ICgoc3RfdGltZSAmIFJUQ19IT1VSX01BU0spID4+IFJUQ19IT1VSX1NISUZUKTsKKwl0bS0+dG1fbWluICA9ICgoc3RfdGltZSAmIFJUQ19NSU5fTUFTSykgPj4gUlRDX01JTl9TSElGVCk7CisJdG0tPnRtX3NlYyAgPSAoKHN0X3RpbWUgJiBSVENfU0VDX01BU0spID4+IFJUQ19TRUNfU0hJRlQpOworCisJdG0tPnRtX3lkYXkgPSBydGNfeWVhcl9kYXlzKHRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhcik7CisJdG0tPnRtX3llYXIgLT0gMTkwMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsMDMxX3N0djJfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXdyaXRlbCgxLCBsZGF0YS0+YmFzZSArIFJUQ19NSVMpOwotCQlyZXR1cm4gMDsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXdyaXRlbCgwLCBsZGF0YS0+YmFzZSArIFJUQ19NSVMpOwotCQlyZXR1cm4gMDsKKwlwbDAzMV9zdHYyX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfRFIpLAorCQkJcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfWURSKSwgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml9zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXVuc2lnbmVkIGxvbmcgYmNkX3llYXI7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBwbDAzMV9zdHYyX3RtX3RvX3RpbWUoZGV2LCB0bSwgJnRpbWUsICZiY2RfeWVhcik7CisJaWYgKHJldCA9PSAwKSB7CisJCXdyaXRlbChiY2RfeWVhciwgbGRhdGEtPmJhc2UgKyBSVENfWUxSKTsKKwkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX0xSKTsKIAl9CiAKLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcGwwMzFfc3R2Ml90aW1lX3RvX3RtKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX01SKSwKKwkJCXJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1lNUiksICZhbGFybS0+dGltZSk7CisKKwlhbGFybS0+cGVuZGluZyA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1JJUykgJiBSVENfQklUX0FJOworCWFsYXJtLT5lbmFibGVkID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQykgJiBSVENfQklUX0FJOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbDAzMV9zdHYyX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXVuc2lnbmVkIGxvbmcgYmNkX3llYXI7CisJaW50IHJldDsKKworCS8qIEF0IHRoZSBtb21lbnQsIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBub24td2lsZGNhcmRlZCBhbGFybSB0aW1lcy4gKi8KKwlyZXQgPSBydGNfdmFsaWRfdG0oJmFsYXJtLT50aW1lKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gcGwwMzFfc3R2Ml90bV90b190aW1lKGRldiwgJmFsYXJtLT50aW1lLAorCQkJCQkgICAgJnRpbWUsICZiY2RfeWVhcik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJd3JpdGVsKGJjZF95ZWFyLCBsZGF0YS0+YmFzZSArIFJUQ19ZTVIpOworCQkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX01SKTsKKworCQkJcGwwMzFfYWxhcm1faXJxX2VuYWJsZShkZXYsIGFsYXJtLT5lbmFibGVkKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwbDAzMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBydGNtaXM7CisJdW5zaWduZWQgbG9uZyBldmVudHMgPSAwOworCisJcnRjbWlzID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKKwlpZiAocnRjbWlzKSB7CisJCXdyaXRlbChydGNtaXMsIGxkYXRhLT5iYXNlICsgUlRDX0lDUik7CisKKwkJaWYgKHJ0Y21pcyAmIFJUQ19CSVRfQUkpCisJCQlldmVudHMgfD0gKFJUQ19BRiB8IFJUQ19JUlFGKTsKKworCQkvKiBUaW1lciBpbnRlcnJ1cHQgaXMgb25seSBhdmFpbGFibGUgaW4gU1QgdmFyaWFudHMgKi8KKwkJaWYgKChydGNtaXMgJiBSVENfQklUX1BJKSAmJgorCQkJKGxkYXRhLT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkpCisJCQlldmVudHMgfD0gKFJUQ19QRiB8IFJUQ19JUlFGKTsKKworCQlydGNfdXBkYXRlX2lycShsZGF0YS0+cnRjLCAxLCBldmVudHMpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGwwMzFfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTc0LDExICsyNTIsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CiAKLQlydGNfdG1fdG9fdGltZSh0bSwgJnRpbWUpOwotCXdyaXRlbCh0aW1lLCBsZGF0YS0+YmFzZSArIFJUQ19MUik7CisJcmV0ID0gcnRjX3RtX3RvX3RpbWUodG0sICZ0aW1lKTsKIAotCXJldHVybiAwOworCWlmIChyZXQgPT0gMCkKKwkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX0xSKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGwwMzFfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKQEAgLTg2LDggKzI2Nyw5IEBACiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTVIpLCAmYWxhcm0tPnRpbWUpOwotCWFsYXJtLT5wZW5kaW5nID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfUklTKTsKLQlhbGFybS0+ZW5hYmxlZCA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJYWxhcm0tPnBlbmRpbmcgPSByZWFkbChsZGF0YS0+YmFzZSArIFJUQ19SSVMpICYgUlRDX0JJVF9BSTsKKwlhbGFybS0+ZW5hYmxlZCA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpICYgUlRDX0JJVF9BSTsKIAogCXJldHVybiAwOwogfQpAQCAtOTYsMjIgKzI3OCw3MSBAQAogewogCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CisJaW50IHJldDsKIAotCXJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJnRpbWUpOworCS8qIEF0IHRoZSBtb21lbnQsIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBub24td2lsZGNhcmRlZCBhbGFybSB0aW1lcy4gKi8KKwlyZXQgPSBydGNfdmFsaWRfdG0oJmFsYXJtLT50aW1lKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFsYXJtLT50aW1lLCAmdGltZSk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX01SKTsKKwkJCXBsMDMxX2FsYXJtX2lycV9lbmFibGUoZGV2LCBhbGFybS0+ZW5hYmxlZCk7CisJCX0KKwl9CiAKLQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTVIpOwotCXdyaXRlbCghYWxhcm0tPmVuYWJsZWQsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7CisJcmV0dXJuIHJldDsKK30KKworLyogUGVyaW9kaWMgaW50ZXJydXB0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFNUIHZhcmlhbnRzLiAqLworc3RhdGljIGludCBwbDAzMV9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGVuYWJsZWQgPT0gMSkgeworCQkvKiBDbGVhciBhbnkgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHQuICovCisJCXdyaXRlbChSVENfQklUX1BJLCBsZGF0YS0+YmFzZSArIFJUQ19JQ1IpOworCisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19JTVNDKSB8IFJUQ19CSVRfUEksCisJCQlsZGF0YS0+YmFzZSArIFJUQ19JTVNDKTsKKworCQkvKiBOb3cgc3RhcnQgdGhlIHRpbWVyICovCisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19UQ1IpIHwgUlRDX1RDUl9FTiwKKwkJCWxkYXRhLT5iYXNlICsgUlRDX1RDUik7CisKKwl9IGVsc2UgeworCQl3cml0ZWwocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQykgJiAoflJUQ19CSVRfUEkpLAorCQkJbGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisKKwkJLyogQWxzbyBzdG9wIHRoZSB0aW1lciAqLworCQl3cml0ZWwocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfVENSKSAmICh+UlRDX1RDUl9FTiksCisJCQlsZGF0YS0+YmFzZSArIFJUQ19UQ1IpOworCX0KKwkvKiBXYWl0IGF0IGxlYXN0IDEgUlRDMzIgY2xvY2sgY3ljbGUgdG8gZW5zdXJlIG5leHQgYWNjZXNzCisJICogdG8gUlRDX1RDUiB3aWxsIHN1Y2NlZWQuCisJICovCisJdWRlbGF5KDQwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGwwMzFfb3BzID0gewotCS5pb2N0bCA9IHBsMDMxX2lvY3RsLAotCS5yZWFkX3RpbWUgPSBwbDAzMV9yZWFkX3RpbWUsCi0JLnNldF90aW1lID0gcGwwMzFfc2V0X3RpbWUsCi0JLnJlYWRfYWxhcm0gPSBwbDAzMV9yZWFkX2FsYXJtLAotCS5zZXRfYWxhcm0gPSBwbDAzMV9zZXRfYWxhcm0sCi19Oworc3RhdGljIGludCBwbDAzMV9pcnFfc2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZnJlcSkKK3sKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBDYW50IHNldCB0aW1lciBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlpZiAocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfVENSKSAmIFJUQ19UQ1JfRU4pIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBjaGFuZ2UgZnJlcXVlbmN5IHdoaWxlIHRpbWVyIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBzZWxmIHN0YXJ0IGJpdCBpbiBSVENfVENSIGlzIHNldCB0aW1lciB3aWxsIHN0YXJ0IGhlcmUsCisJICogYnV0IHdlIG5ldmVyIHNldCB0aGF0IGJpdC4gSW5zdGVhZCB3ZSBzdGFydCB0aGUgdGltZXIgd2hlbgorCSAqIHNldF9zdGF0ZSBpcyBjYWxsZWQgd2l0aCBlbmFibGVkID09IDEuCisJICovCisJd3JpdGVsKFJUQ19USU1FUl9GUkVRIC8gZnJlcSwgbGRhdGEtPmJhc2UgKyBSVENfVExSKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHBsMDMxX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCiB7CkBAIC0xMzEsMTggKzM2MiwyMCBAQAogewogCWludCByZXQ7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YTsKKwlzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gaWQtPmRhdGE7CiAKIAlyZXQgPSBhbWJhX3JlcXVlc3RfcmVnaW9ucyhhZGV2LCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXE7CiAKLQlsZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDAzMV9sb2NhbCksIEdGUF9LRVJORUwpOworCWxkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsMDMxX2xvY2FsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKIAlsZGF0YS0+YmFzZSA9IGlvcmVtYXAoYWRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZhZGV2LT5yZXMpKTsKKwogCWlmICghbGRhdGEtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfbm9fcmVtYXA7CkBAIC0xNTAsMjQgKzM4MywzNiBAQAogCiAJYW1iYV9zZXRfZHJ2ZGF0YShhZGV2LCBsZGF0YSk7CiAKLQlpZiAocmVxdWVzdF9pcnEoYWRldi0+aXJxWzBdLCBwbDAzMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkicnRjLXBsMDMxIiwgbGRhdGEtPnJ0YykpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfbm9faXJxOwotCX0KKwlsZGF0YS0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoYWRldik7CisJbGRhdGEtPmh3X3JldmlzaW9uID0gYW1iYV9yZXYoYWRldik7CiAKLQlsZGF0YS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGwwMzEiLCAmYWRldi0+ZGV2LCAmcGwwMzFfb3BzLAotCQkJCQkgVEhJU19NT0RVTEUpOworCWRldl9kYmcoJmFkZXYtPmRldiwgImRlc2lnbmVyIElEID0gMHglMDJ4XG4iLCBsZGF0YS0+aHdfZGVzaWduZXIpOworCWRldl9kYmcoJmFkZXYtPmRldiwgInJldmlzaW9uID0gMHglMDF4XG4iLCBsZGF0YS0+aHdfcmV2aXNpb24pOworCisJLyogRW5hYmxlIHRoZSBjbG9ja3dhdGNoIG9uIFNUIFZhcmlhbnRzICovCisJaWYgKChsZGF0YS0+aHdfZGVzaWduZXIgPT0gQU1CQV9WRU5ET1JfU1QpICYmCisJICAgIChsZGF0YS0+aHdfcmV2aXNpb24gPiAxKSkKKwkJd3JpdGVsKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0NSKSB8IFJUQ19DUl9DV0VOLAorCQkgICAgICAgbGRhdGEtPmJhc2UgKyBSVENfQ1IpOworCisJbGRhdGEtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBsMDMxIiwgJmFkZXYtPmRldiwgb3BzLAorCQkJCQlUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihsZGF0YS0+cnRjKSkgewogCQlyZXQgPSBQVFJfRVJSKGxkYXRhLT5ydGMpOwogCQlnb3RvIG91dF9ub19ydGM7CiAJfQogCisJaWYgKHJlcXVlc3RfaXJxKGFkZXYtPmlycVswXSwgcGwwMzFfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAicnRjLXBsMDMxIiwgbGRhdGEpKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X25vX2lycTsKKwl9CisKIAlyZXR1cm4gMDsKIAotb3V0X25vX3J0YzoKLQlmcmVlX2lycShhZGV2LT5pcnFbMF0sIGxkYXRhLT5ydGMpOwogb3V0X25vX2lycToKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIobGRhdGEtPnJ0Yyk7CitvdXRfbm9fcnRjOgogCWlvdW5tYXAobGRhdGEtPmJhc2UpOwogCWFtYmFfc2V0X2RydmRhdGEoYWRldiwgTlVMTCk7CiBvdXRfbm9fcmVtYXA6CkBAIC0xNzUsMTMgKzQyMCw1NyBAQAogb3V0OgogCWFtYmFfcmVsZWFzZV9yZWdpb25zKGFkZXYpOwogZXJyX3JlcToKKwogCXJldHVybiByZXQ7CiB9CiAKKy8qIE9wZXJhdGlvbnMgZm9yIHRoZSBvcmlnaW5hbCBBUk0gdmVyc2lvbiAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGFybV9wbDAzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IHBsMDMxX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBwbDAzMV9zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IHBsMDMxX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IHBsMDMxX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHBsMDMxX2FsYXJtX2lycV9lbmFibGUsCit9OworCisvKiBUaGUgRmlyc3QgU1QgZGVyaXZhdGl2ZSAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0djFfcGwwMzFfb3BzID0geworCS5yZWFkX3RpbWUgPSBwbDAzMV9yZWFkX3RpbWUsCisJLnNldF90aW1lID0gcGwwMzFfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0gPSBwbDAzMV9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwbDAzMV9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBwbDAzMV9hbGFybV9pcnFfZW5hYmxlLAorCS5pcnFfc2V0X3N0YXRlID0gcGwwMzFfaXJxX3NldF9zdGF0ZSwKKwkuaXJxX3NldF9mcmVxID0gcGwwMzFfaXJxX3NldF9mcmVxLAorfTsKKworLyogQW5kIHRoZSBzZWNvbmQgU1QgZGVyaXZhdGl2ZSAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0djJfcGwwMzFfb3BzID0geworCS5yZWFkX3RpbWUgPSBwbDAzMV9zdHYyX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBwbDAzMV9zdHYyX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gcGwwMzFfc3R2Ml9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwbDAzMV9zdHYyX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHBsMDMxX2FsYXJtX2lycV9lbmFibGUsCisJLmlycV9zZXRfc3RhdGUgPSBwbDAzMV9pcnFfc2V0X3N0YXRlLAorCS5pcnFfc2V0X2ZyZXEgPSBwbDAzMV9pcnFfc2V0X2ZyZXEsCit9OworCiBzdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwMzFfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS5pZCA9IDB4MDAwNDEwMzEsCiAJCS5tYXNrID0gMHgwMDBmZmZmZiwKKwkJLmRhdGEgPSAmYXJtX3BsMDMxX29wcywKKwl9LAorCS8qIFNUIE1pY3JvIHZhcmlhbnRzICovCisJeworCQkuaWQgPSAweDAwMTgwMDMxLAorCQkubWFzayA9IDB4MDBmZmZmZmYsCisJCS5kYXRhID0gJnN0djFfcGwwMzFfb3BzLAorCX0sCisJeworCQkuaWQgPSAweDAwMjgwMDMxLAorCQkubWFzayA9IDB4MDBmZmZmZmYsCisJCS5kYXRhID0gJnN0djJfcGwwMzFfb3BzLAogCX0sCiAJezAsIDB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDU5MDU5MzYuLjQ5NTFhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgpAQCAtMTEyLDYgKzExMyw3IEBACiAJSU5JVF9XT1JLKCZkZXZpY2UtPnJlc3RvcmVfZGV2aWNlLCBkb19yZXN0b3JlX2RldmljZSk7CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfTkVXOwogCWRldmljZS0+dGFyZ2V0ID0gREFTRF9TVEFURV9ORVc7CisJbXV0ZXhfaW5pdCgmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAKIAlyZXR1cm4gZGV2aWNlOwogfQpAQCAtMzIxLDggKzMyMyw4IEBACiAJCQlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9SRUFEWTsKIAkJCXJldHVybiByYzsKIAkJfQotCQlkYXNkX2Rlc3Ryb3lfcGFydGl0aW9ucyhibG9jayk7CiAJCWRhc2RfZmx1c2hfcmVxdWVzdF9xdWV1ZShibG9jayk7CisJCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGJsb2NrKTsKIAkJYmxvY2stPmJsb2NrcyA9IDA7CiAJCWJsb2NrLT5icF9ibG9jayA9IDA7CiAJCWJsb2NrLT5zMmJfc2hpZnQgPSAwOwpAQCAtNDg0LDEwICs0ODYsOCBAQAogCWlmIChyYykKIAkJZGV2aWNlLT50YXJnZXQgPSBkZXZpY2UtPnN0YXRlOwogCi0JaWYgKGRldmljZS0+c3RhdGUgPT0gZGV2aWNlLT50YXJnZXQpIHsKKwlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBkZXZpY2UtPnRhcmdldCkKIAkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfQogCiAJLyogbGV0IHVzZXItc3BhY2Uga25vdyB0aGF0IHRoZSBkZXZpY2Ugc3RhdHVzIGNoYW5nZWQgKi8KIAlrb2JqZWN0X3VldmVudCgmZGV2aWNlLT5jZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwpAQCAtNTAyLDcgKzUwMiw5IEBACiBzdGF0aWMgdm9pZCBkb19raWNrX2RldmljZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRhc2RfZGV2aWNlLCBraWNrX3dvcmspOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCWRhc2RfY2hhbmdlX3N0YXRlKGRldmljZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2UtPnN0YXRlX211dGV4KTsKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQpAQCAtNTM5LDE4ICs1NDEsMTkgQEAKIHZvaWQgZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgdGFyZ2V0KQogewogCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCS8qIElmIHdlIGFyZSBpbiBwcm9iZW9ubHkgbW9kZSBzdG9wIGF0IERBU0RfU1RBVEVfUkVBRFkuICovCiAJaWYgKGRhc2RfcHJvYmVvbmx5ICYmIHRhcmdldCA+IERBU0RfU1RBVEVfUkVBRFkpCiAJCXRhcmdldCA9IERBU0RfU1RBVEVfUkVBRFk7CiAJaWYgKGRldmljZS0+dGFyZ2V0ICE9IHRhcmdldCkgewotCQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSB0YXJnZXQpIHsKKwkJaWYgKGRldmljZS0+c3RhdGUgPT0gdGFyZ2V0KQogCQkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCQl9CiAJCWRldmljZS0+dGFyZ2V0ID0gdGFyZ2V0OwogCX0KIAlpZiAoZGV2aWNlLT5zdGF0ZSAhPSBkZXZpY2UtPnRhcmdldCkKIAkJZGFzZF9jaGFuZ2Vfc3RhdGUoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQogCiAvKgpAQCAtMTAwMCwxMiArMTAwMywyMCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwotCWlmIChkZXZpY2UgPT0gTlVMTCB8fAotCSAgICBkZXZpY2UgIT0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KSB8fAotCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CisJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKKwlpZiAoSVNfRVJSKGRldmljZSkpIHsKKwkJREJGX0VWRU5UX0RFVklEKERCRl9ERUJVRywgY2RldiwgIiVzIiwKKwkJCQkidW5hYmxlIHRvIGdldCBkZXZpY2UgZnJvbSBjZGV2Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNxci0+c3RhcnRkZXYgfHwKKwkgICAgZGV2aWNlICE9IGNxci0+c3RhcnRkZXYgfHwKKwkgICAgc3RybmNtcChjcXItPnN0YXJ0ZGV2LT5kaXNjaXBsaW5lLT5lYmNuYW1lLAorCQkgICAgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CiAJCURCRl9FVkVOVF9ERVZJRChEQkZfREVCVUcsIGNkZXYsICIlcyIsCiAJCQkJImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3QiKTsKKwkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2OTIsNyArMTcwMyw2IEBACiAJCQkJY3FyLCByYyk7CiAJCX0gZWxzZSB7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKLQkJCXJjID0gMTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBhbHJlYWR5IGZpbmlzaGVkIG9yIGNsZWFyIHBlbmRpbmcgLSBkbyBub3RoaW5nICovCkBAIC0yMTI5LDkgKzIxMzksOCBAQAogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgYmxvY2stPmJwX2Jsb2NrKTsKIAltYXggPSBibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+bWF4X2Jsb2NrcyA8PCBibG9jay0+czJiX3NoaWZ0OwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgbWF4KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYmxvY2stPnJlcXVlc3RfcXVldWUsIG1heCk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAkvKiB3aXRoIHBhZ2Ugc2l6ZWQgc2VnbWVudHMgd2UgY2FuIHRyYW5zbGF0ZSBlYWNoIHNlZ2VtZW50IGludG8KIAkgKiBvbmUgaWRhdy90aWRhdwogCSAqLwpAQCAtMjE3MCw5ICsyMTc5LDEzIEBACiBzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZSA9IGJsb2NrLT5iYXNlOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlpbnQgcmM7CiAKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWJhc2UgPSBibG9jay0+YmFzZTsKIAlhdG9taWNfaW5jKCZibG9jay0+b3Blbl9jb3VudCk7CiAJaWYgKHRlc3RfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmYmFzZS0+ZmxhZ3MpKSB7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTIyODUsMTEgKzIyOTgsNiBAQAogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoIiVzOiBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgd2l0aCByYz0lZFxuIiwKIAkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCByZXQpOwotCWVsc2UgewotCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2RldihjZGV2KTsKLQkJd2FpdF9ldmVudChkYXNkX2luaXRfd2FpdHEsIF93YWl0X2Zvcl9kZXZpY2UoZGV2aWNlKSk7Ci0JCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCX0KIH0KIAogLyoKQEAgLTI0MjQsNiArMjQzMiw5IEBACiAJfSBlbHNlCiAJCXByX2RlYnVnKCJkYXNkX2dlbmVyaWMgZGV2aWNlICVzIGZvdW5kXG4iLAogCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKworCXdhaXRfZXZlbnQoZGFzZF9pbml0X3dhaXRxLCBfd2FpdF9mb3JfZGV2aWNlKGRldmljZSkpOworCiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCA0Y2FjNWI1Li5kNDk3NjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtODc0LDEyICs4NzQsMTkgQEAKIAlzc2l6ZV90IGxlbjsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7Ci0JaWYgKCFJU19FUlIoZGV2aWNlKSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUpIHsKKwlpZiAoSVNfRVJSKGRldmljZSkpCisJCWdvdG8gb3V0OworCWVsc2UgaWYgKCFkZXZpY2UtPmRpc2NpcGxpbmUpIHsKKwkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CiAJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCiAJCQkgICAgICAgZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lKTsKIAkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfSBlbHNlCi0JCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibm9uZVxuIik7CisJCXJldHVybiBsZW47CisJfQorb3V0OgorCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibm9uZVxuIik7CiAJcmV0dXJuIGxlbjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggZDMxOTgzMC4uOTRmOTJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC04OCw2ICs4OCw3IEBACiAJaWYgKGJsb2NrLT5nZHApIHsKIAkJZGVsX2dlbmRpc2soYmxvY2stPmdkcCk7CiAJCWJsb2NrLT5nZHAtPnF1ZXVlID0gTlVMTDsKKwkJYmxvY2stPmdkcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAkJcHV0X2Rpc2soYmxvY2stPmdkcCk7CiAJCWJsb2NrLT5nZHAgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZTRjMjE0My4uZWQ3M2NlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTM2OCw2ICszNjgsNyBAQAogCiAJLyogRGV2aWNlIHN0YXRlIGFuZCB0YXJnZXQgc3RhdGUuICovCiAJaW50IHN0YXRlLCB0YXJnZXQ7CisJc3RydWN0IG11dGV4IHN0YXRlX211dGV4OwogCWludCBzdG9wcGVkOwkJLyogZGV2aWNlIChjY3dfZGV2aWNlX3N0YXJ0KSB3YXMgc3RvcHBlZCAqLwogCiAJLyogcmVmZXJlbmNlIGNvdW50LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDcxZjk1ZjUuLmYxM2EwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTE2NSw1MSArMTY1LDMyIEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQKLWRhc2RfY2FsY19tZXRyaWNzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkgIGludCBjb3VudCwgaW50ICplb2YsIGludCBsZW4pCi17Ci0JbGVuID0gKGxlbiA+IG9mZikgPyBsZW4gLSBvZmYgOiAwOwotCWlmIChsZW4gPiBjb3VudCkKLQkJbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47Ci19Ci0KICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCi1zdGF0aWMgY2hhciAqCi1kYXNkX3N0YXRpc3RpY3NfYXJyYXkoY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgZmFjdG9yKQorc3RhdGljIHZvaWQgZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgaW50ICphcnJheSwgaW50IGZhY3RvcikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXN0ciArPSBzcHJpbnRmKHN0ciwgIiU3ZCAiLCBhcnJheVtpXSAvIGZhY3Rvcik7CisJCXNlcV9wcmludGYobSwgIiU3ZCAiLCBhcnJheVtpXSAvIGZhY3Rvcik7CiAJCWlmIChpID09IDE1KQotCQkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KLQlzdHIgKz0gc3ByaW50ZihzdHIsIlxuIik7Ci0JcmV0dXJuIHN0cjsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiAKLXN0YXRpYyBpbnQKLWRhc2Rfc3RhdGlzdGljc19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRhc2Rfc3RhdHNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQl1bnNpZ25lZCBsb25nIGxlbjsKICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCiAJc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QgKnByb2Y7Ci0JY2hhciAqc3RyOwogCWludCBmYWN0b3I7CiAKIAkvKiBjaGVjayBmb3IgYWN0aXZlIHByb2ZpbGluZyAqLwogCWlmIChkYXNkX3Byb2ZpbGVfbGV2ZWwgPT0gREFTRF9QUk9GSUxFX09GRikgewotCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJTdGF0aXN0aWNzIGFyZSBvZmYgLSB0aGV5IG1pZ2h0IGJlICIKKwkJc2VxX3ByaW50ZihtLCAiU3RhdGlzdGljcyBhcmUgb2ZmIC0gdGhleSBtaWdodCBiZSAiCiAJCQkJICAgICJzd2l0Y2hlZCBvbiB1c2luZyAnZWNobyBzZXQgb24gPiAiCiAJCQkJICAgICIvcHJvYy9kYXNkL3N0YXRpc3RpY3MnXG4iKTsKLQkJcmV0dXJuIGRhc2RfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJCXJldHVybiAwOwogCX0KIAogCXByb2YgPSAmZGFzZF9nbG9iYWxfcHJvZmlsZTsKQEAgLTIxNyw0NyArMTk4LDQ5IEBACiAJZm9yIChmYWN0b3IgPSAxOyAocHJvZi0+ZGFzZF9pb19yZXFzIC8gZmFjdG9yKSA+IDk5OTk5OTk7CiAJICAgICBmYWN0b3IgKj0gMTApOwogCi0Jc3RyID0gcGFnZTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZCBkYXNkIEkvTyByZXF1ZXN0c1xuIiwgcHJvZi0+ZGFzZF9pb19yZXFzKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJ3aXRoICV1IHNlY3RvcnMoNTEyQiBlYWNoKVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlZCBkYXNkIEkvTyByZXF1ZXN0c1xuIiwgcHJvZi0+ZGFzZF9pb19yZXFzKTsKKwlzZXFfcHJpbnRmKG0sICJ3aXRoICV1IHNlY3RvcnMoNTEyQiBlYWNoKVxuIiwKIAkJICAgICAgIHByb2YtPmRhc2RfaW9fc2VjdHMpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIlNjYWxlIEZhY3RvciBpcyAgJWRcbiIsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLAorCXNlcV9wcmludGYobSwgIlNjYWxlIEZhY3RvciBpcyAgJWRcbiIsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLAogCQkgICAgICAgIiAgIF9fPDQJICAgX19fOAkgICBfXzE2CSAgIF9fMzIJICAgX182NAkgICBfMTI4CSIKIAkJICAgICAgICIgICBfMjU2CSAgIF81MTIJICAgX18xawkgICBfXzJrCSAgIF9fNGsJICAgX184awkiCiAJCSAgICAgICAiICAgXzE2awkgICBfMzJrCSAgIF82NGsJICAgMTI4a1xuIik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLAorCXNlcV9wcmludGYobSwKIAkJICAgICAgICIgICBfMjU2CSAgIF81MTIJICAgX18xTQkgICBfXzJNCSAgIF9fNE0JICAgX184TQkiCiAJCSAgICAgICAiICAgXzE2TQkgICBfMzJNCSAgIF82NE0JICAgMTI4TQkgICAyNTZNCSAgIDUxMk0JIgogCQkgICAgICAgIiAgIF9fMUcJICAgX18yRwkgICBfXzRHICIgIiAgIF8+NEdcbiIpOwogCi0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIHNpemVzICg1MTJCIHNlY3MpXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3NlY3MsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyAobWljcm9zZWNvbmRzKVxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIHBlciBzZWN0b3JcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltcHMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIHRpbGwgc3NjaFxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMSwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoIGFuZCBpcnFcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTIsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCAiCisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIHNpemVzICg1MTJCIHNlY3MpXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb19zZWNzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgKG1pY3Jvc2Vjb25kcylcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWVzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgcGVyIHNlY3RvclxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltcHMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIHRpbGwgc3NjaFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTEsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCBhbmQgaXJxXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMiwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoICIKIAkJCSAgICAiYW5kIGlycSBwZXIgc2VjdG9yXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUycHMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gaXJxIGFuZCBlbmRcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiIyBvZiByZXEgaW4gY2hhbnEgYXQgZW5xdWV1aW5nICgxLi4zMikgXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX25yX3JlcSwgZmFjdG9yKTsKLQlsZW4gPSBzdHIgLSBwYWdlOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUycHMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gaXJxIGFuZCBlbmRcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIiMgb2YgcmVxIGluIGNoYW5xIGF0IGVucXVldWluZyAoMS4uMzIpIFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fbnJfcmVxLCBmYWN0b3IpOwogI2Vsc2UKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJTdGF0aXN0aWNzIGFyZSBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKICNlbmRpZgotCXJldHVybiBkYXNkX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1kYXNkX3N0YXRpc3RpY3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJICAgICAgdW5zaWduZWQgbG9uZyB1c2VyX2xlbiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZGFzZF9zdGF0c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhc2Rfc3RhdHNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgZGFzZF9zdGF0c19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCB1c2VyX2xlbiwgbG9mZl90ICpwb3MpCiB7CiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQogCWNoYXIgKmJ1ZmZlciwgKnN0cjsKQEAgLTMwOCw2ICsyOTEsMTUgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhc2Rfc3RhdHNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYXNkX3N0YXRzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBkYXNkX3N0YXRzX3Byb2Nfd3JpdGUsCit9OworCiAvKgogICogQ3JlYXRlIGRhc2QgcHJvYy1mcyBlbnRyaWVzLgogICogSW4gY2FzZSBjcmVhdGlvbiBmYWlsZWQsIGNsZWFudXAgYW5kIHJldHVybiAtRU5PRU5ULgpAQCAtMzI0LDEzICszMTYsMTIgQEAKIAkJCQkJICZkYXNkX2RldmljZXNfZmlsZV9vcHMpOwogCWlmICghZGFzZF9kZXZpY2VzX2VudHJ5KQogCQlnb3RvIG91dF9ub2RldmljZXM7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInN0YXRpc3RpY3MiLAotCQkJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJCQkgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBwcm9jX2NyZWF0ZSgic3RhdGlzdGljcyIsCisJCQkJCSAgICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJCSAgICBkYXNkX3Byb2Nfcm9vdF9lbnRyeSwKKwkJCQkJICAgICZkYXNkX3N0YXRzX3Byb2NfZm9wcyk7CiAJaWYgKCFkYXNkX3N0YXRpc3RpY3NfZW50cnkpCiAJCWdvdG8gb3V0X25vc3RhdGlzdGljczsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnktPnJlYWRfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc19yZWFkOwotCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+d3JpdGVfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc193cml0ZTsKIAlyZXR1cm4gMDsKIAogIG91dF9ub3N0YXRpc3RpY3M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggOGQzZDcyMC4uMDk3ZGE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMjIyLDkgKzIyMiw4IEBACiAJCWdvdG8gY2xlYW51cF9xdWV1ZTsKIAogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfSFNFQ19TSVpFKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfTUFYX1NFQyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfTUFYX1NFQyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhibGtkYXQtPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggODJkYWEzYy4uMzQzODY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2lwbC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00MCwxMiArNDEsMTIgQEAKIC8qIGR1bXAgc3lzdGVtIGluZm8gKi8KIAogc3RydWN0IHN5c19pbmZvIHsKLQllbnVtIGFyY2hfaWQJYXJjaDsKLQl1bnNpZ25lZCBsb25nCXNhX2Jhc2U7Ci0JdTMyCQlzYV9zaXplOwotCWludAkJY3B1X21hcFtOUl9DUFVTXTsKLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOwotCXVuaW9uIHNhdmVfYXJlYQlsY19tYXNrOworCWVudW0gYXJjaF9pZAkgYXJjaDsKKwl1bnNpZ25lZCBsb25nCSBzYV9iYXNlOworCXUzMgkJIHNhX3NpemU7CisJaW50CQkgY3B1X21hcFtOUl9DUFVTXTsKKwl1bnNpZ25lZCBsb25nCSBtZW1fc2l6ZTsKKwlzdHJ1Y3Qgc2F2ZV9hcmVhIGxjX21hc2s7CiB9OwogCiBzdHJ1Y3QgaXBpYl9pbmZvIHsKQEAgLTE4Myw1MiArMTg0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIF9fczM5MHhfXwotLyoKLSAqIENvbnZlcnQgczM5MHggKDY0IGJpdCkgY3B1IGluZm8gdG8gczM5MCAoMzIgYml0KSBjcHUgaW5mbwotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgczM5MHhfdG9fczM5MF9yZWdzKHVuaW9uIHNhdmVfYXJlYSAqb3V0LCB1bmlvbiBzYXZlX2FyZWEgKmluLAotCQkJCSAgICAgIGludCBjcHUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlvdXQtPnMzOTAuZ3BfcmVnc1tpXSA9IGluLT5zMzkweC5ncF9yZWdzW2ldICYgMHgwMDAwMDAwMGZmZmZmZmZmOwotCQlvdXQtPnMzOTAuYWNjX3JlZ3NbaV0gPSBpbi0+czM5MHguYWNjX3JlZ3NbaV07Ci0JCW91dC0+czM5MC5jdHJsX3JlZ3NbaV0gPQotCQkJaW4tPnMzOTB4LmN0cmxfcmVnc1tpXSAmIDB4MDAwMDAwMDBmZmZmZmZmZjsKLQl9Ci0JLyogbG9jb3JlIGZvciAzMSBiaXQgaGFzIG9ubHkgc3BhY2UgZm9yIGZwcmVncyAwLDIsNCw2ICovCi0Jb3V0LT5zMzkwLmZwX3JlZ3NbMF0gPSBpbi0+czM5MHguZnBfcmVnc1swXTsKLQlvdXQtPnMzOTAuZnBfcmVnc1sxXSA9IGluLT5zMzkweC5mcF9yZWdzWzJdOwotCW91dC0+czM5MC5mcF9yZWdzWzJdID0gaW4tPnMzOTB4LmZwX3JlZ3NbNF07Ci0Jb3V0LT5zMzkwLmZwX3JlZ3NbM10gPSBpbi0+czM5MHguZnBfcmVnc1s2XTsKLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzBdKSwgJihpbi0+czM5MHgucHN3WzBdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1sxXSB8PSAweDg7IC8qIHNldCBiaXQgMTIgKi8KLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzRdKSwmKGluLT5zMzkweC5wc3dbMTJdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1s0XSB8PSAweDgwOyAvKiBzZXQgKDMxYml0KSBhZGRyZXNzaW5nIGJpdCAqLwotCW91dC0+czM5MC5wcmVmX3JlZyA9IGluLT5zMzkweC5wcmVmX3JlZzsKLQlvdXQtPnMzOTAudGltZXIgPSBpbi0+czM5MHgudGltZXI7Ci0Jb3V0LT5zMzkwLmNsa19jbXAgPSBpbi0+czM5MHguY2xrX2NtcDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHMzOTB4X3RvX3MzOTBfc2F2ZV9hcmVhcyh2b2lkKQotewotCWludCBpID0gMTsKLQlzdGF0aWMgdW5pb24gc2F2ZV9hcmVhIHRtcDsKLQotCXdoaWxlICh6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldKSB7Ci0JCXMzOTB4X3RvX3MzOTBfcmVncygmdG1wLCB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLCBpKTsKLQkJbWVtY3B5KHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0sICZ0bXAsIHNpemVvZih0bXApKTsKLQkJaSsrOwotCX0KLX0KLQotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2NwdV9pbmZvKGVudW0gYXJjaF9pZCBhcmNoKQogewotCXVuaW9uIHNhdmVfYXJlYSAqc2E7CisJc3RydWN0IHNhdmVfYXJlYSAqc2E7CiAKIAkvKiBnZXQgaW5mbyBmb3IgYm9vdCBjcHUgZnJvbSBsb3djb3JlLCBzdG9yZWQgaW4gdGhlIEhTQSAqLwogCkBAIC0yNDEsMjAgKzE5OSwxMiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJemZjcGR1bXBfc2F2ZV9hcmVhc1swXSA9IHNhOwotCi0jaWZkZWYgX19zMzkweF9fCi0JLyogY29udmVydCBzMzkweCByZWdzIHRvIHMzOTAsIGlmIHdlIGFyZSBkdW1waW5nIGFuIHMzOTAgTGludXggKi8KLQotCWlmIChhcmNoID09IEFSQ0hfUzM5MCkKLQkJczM5MHhfdG9fczM5MF9zYXZlX2FyZWFzKCk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgREVGSU5FX01VVEVYKHpjb3JlX211dGV4KTsKIAotI2RlZmluZSBEVU1QX1ZFUlNJT04JMHgzCisjZGVmaW5lIERVTVBfVkVSU0lPTgkweDUKICNkZWZpbmUgRFVNUF9NQUdJQwkweGE4MTkwMTczNjE4ZjIzZmRVTEwKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTBYCTIKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTAJMQpAQCAtMjc5LDcgKzIyOSwxNCBAQAogCXUzMiB2b2xucjsKIAl1MzIgYnVpbGRfYXJjaDsKIAl1NjQgcm1lbV9zaXplOwotCWNoYXIgcGFkMls0MDE2XTsKKwl1OCBtdmR1bXA7CisJdTE2IGNwdV9jbnQ7CisJdTE2IHJlYWxfY3B1X2NudDsKKwl1OCBlbmRfcGFkMVsweDIwMC0weDA2MV07CisJdTY0IG12ZHVtcF9zaWduOworCXU2NCBtdmR1bXBfemlwbF90aW1lOworCXU4IGVuZF9wYWQyWzB4ODAwLTB4MjEwXTsKKwl1MzIgbGNfdmVjWzUxMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCxfX2FsaWduZWRfXygxNikpKTsKIAogc3RhdGljIHN0cnVjdCB6Y29yZV9oZWFkZXIgemNvcmVfaGVhZGVyID0gewpAQCAtMjg5LDcgKzI0Niw3IEBACiAJLmR1bXBfbGV2ZWwJPSAwLAogCS5wYWdlX3NpemUJPSBQQUdFX1NJWkUsCiAJLm1lbV9zdGFydAk9IDAsCi0jaWZkZWYgX19zMzkweF9fCisjaWZkZWYgQ09ORklHXzY0QklUCiAJLmJ1aWxkX2FyY2gJPSBEVU1QX0FSQ0hfUzM5MFgsCiAjZWxzZQogCS5idWlsZF9hcmNoCT0gRFVNUF9BUkNIX1MzOTAsCkBAIC0zNDAsMTEgKzI5Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcHJlZml4OwogCQl1bnNpZ25lZCBsb25nIHNhX29mZiwgbGVuLCBidWZfb2ZmOwogCi0JCWlmIChzeXNfaW5mby5hcmNoID09IEFSQ0hfUzM5MCkKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTAucHJlZl9yZWc7Ci0JCWVsc2UKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTB4LnByZWZfcmVnOwotCisJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnByZWZfcmVnOwogCQlzYV9zdGFydCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2U7CiAJCXNhX2VuZCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2UgKyBzeXNfaW5mby5zYV9zaXplOwogCkBAIC01NjEsMzQgKzUxNCwzOSBAQAogCS5yZWxlYXNlCT0gemNvcmVfcmVpcGxfcmVsZWFzZSwKIH07CiAKKyNpZmRlZiBDT05GSUdfMzJCSVQKIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9zMzkwX2xjX21hc2sodW5pb24gc2F2ZV9hcmVhICptYXApCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkwLmV4dF9zYXZlLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmV4dF9zYXZlKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAudGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAudGltZXIpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmNsa19jbXApKTsKLQltZW1zZXQoJm1hcC0+czM5MC5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHN3KSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHJlZl9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZnBfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZ3BfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5jdHJsX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZXh0X3NhdmUsIDB4ZmYsIHNpemVvZihtYXAtPmV4dF9zYXZlKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+cHN3KSk7CisJbWVtc2V0KCZtYXAtPnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5wcmVmX3JlZykpOworCW1lbXNldCgmbWFwLT5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+YWNjX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+ZnBfcmVncykpOworCW1lbXNldCgmbWFwLT5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5ncF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Y3RybF9yZWdzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MHhfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkweC5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmdwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHN3LCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5wc3cpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnByZWZfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9jdHJsX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkweC50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50b2RfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50aW1lcikpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5jbGtfY21wKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmN0cmxfcmVncykpOworCW1lbXNldCgmbWFwLT5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5mcF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmdwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+cHN3LCAweGZmLCBzaXplb2YobWFwLT5wc3cpKTsKKwltZW1zZXQoJm1hcC0+cHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnByZWZfcmVnKSk7CisJbWVtc2V0KCZtYXAtPmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5mcF9jdHJsX3JlZykpOworCW1lbXNldCgmbWFwLT50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT50b2RfcmVnKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5hY2NfcmVncykpOworCW1lbXNldCgmbWFwLT5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmN0cmxfcmVncykpOwogfQogCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCisKIC8qCiAgKiBJbml0aWFsaXplIGR1bXAgZ2xvYmFscyBmb3IgYSBnaXZlbiBhcmNoaXRlY3R1cmUKICAqLwpAQCAtNTk5LDIxICs1NTcsMTggQEAKIAlzd2l0Y2ggKGFyY2gpIHsKIAljYXNlIEFSQ0hfUzM5MFg6CiAJCXByX2FsZXJ0KCJERVRFQ1RFRCAnUzM5MFggKDY0IGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTBYOwotCQlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgpOwotCQlzZXRfczM5MHhfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWNhc2UgQVJDSF9TMzkwOgogCQlwcl9hbGVydCgiREVURUNURUQgJ1MzOTAgKDMyIGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTA7Ci0JCXN5c19pbmZvLnNhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkwKTsKLQkJc2V0X3MzOTBfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2FsZXJ0KCIweCV4IGlzIGFuIHVua25vd24gYXJjaGl0ZWN0dXJlLlxuIixhcmNoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXN5c19pbmZvLnNhX2Jhc2UgPSBTQVZFX0FSRUFfQkFTRTsKKwlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWEpOwogCXN5c19pbmZvLmFyY2ggPSBhcmNoOworCXNldF9sY19tYXNrKCZzeXNfaW5mby5sY19tYXNrKTsKIAlyYyA9IGluaXRfY3B1X2luZm8oYXJjaCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC02NjAsOCArNjE1LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgemNvcmVfaGVhZGVyX2luaXQoaW50IGFyY2gsIHN0cnVjdCB6Y29yZV9oZWFkZXIgKmhkcikKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBpOwogCXVuc2lnbmVkIGxvbmcgbWVtb3J5ID0gMDsKKwl1MzIgcHJlZml4OwogCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkKIAkJaGRyLT5hcmNoX2lkID0gRFVNUF9BUkNIX1MzOTBYOwpAQCAtNjc2LDYgKzYzMiwxNCBAQAogCWhkci0+bnVtX3BhZ2VzID0gbWVtb3J5IC8gUEFHRV9TSVpFOwogCWhkci0+dG9kID0gZ2V0X2Nsb2NrKCk7CiAJZ2V0X2NwdV9pZCgmaGRyLT5jcHVfaWQpOworCWZvciAoaSA9IDA7IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV07IGkrKykgeworCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5wcmVmX3JlZzsKKwkJaGRyLT5yZWFsX2NwdV9jbnQrKzsKKwkJaWYgKCFwcmVmaXgpCisJCQljb250aW51ZTsKKwkJaGRyLT5sY192ZWNbaGRyLT5jcHVfY250XSA9IHByZWZpeDsKKwkJaGRyLT5jcHVfY250Kys7CisJfQogCXJldHVybiAwOwogfQogCkBAIC03NDEsMTQgKzcwNSwyMSBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCi0jaWZuZGVmIF9fczM5MHhfXworI2lmZGVmIENPTkZJR182NEJJVAorCWlmIChhcmNoID09IEFSQ0hfUzM5MCkgeworCQlwcl9hbGVydCgiVGhlIDY0LWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgorCQkJICIzMi1iaXQgc3lzdGVtXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkgewogCQlwcl9hbGVydCgiVGhlIDMyLWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgogCQkJICI2NC1iaXQgc3lzdGVtXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWw7CiAJfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKIAlyYyA9IHN5c19pbmZvX2luaXQoYXJjaCk7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggN2EyOGEzMC4uMzdkZjQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC0yMjQsOCArMjI0LDggQEAKICAqLwogdm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogeworCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOwogCWVudW0gaW9fc3RhdHVzIHN0YXR1czsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCAxZWNkM2U1Li40MDM4ZjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCXNlY21fYXJlYS0+cmVxdWVzdC5sZW5ndGggPSAweDAwNTA7CiAJc2VjbV9hcmVhLT5yZXF1ZXN0LmNvZGUgPSAweDAwMTY7CiAKLQlzZWNtX2FyZWEtPmtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJc2VjbV9hcmVhLT5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJc2VjbV9hcmVhLT5jdWJfYWRkcjEgPSAodTY0KSh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIxOwogCXNlY21fYXJlYS0+Y3ViX2FkZHIyID0gKHU2NCkodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IGM4NGFjOTQuLjg1MjYxMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlzdHJ1Y3QgY2hzY19wcml2YXRlICpwcml2YXRlID0gc2NoLT5wcml2YXRlOwogCXN0cnVjdCBjaHNjX3JlcXVlc3QgKnJlcXVlc3QgPSBwcml2YXRlLT5yZXF1ZXN0OwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopX19MQ19JUkI7CisJc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAogCUNIU0NfTE9HKDQsICJpcmIiKTsKIAlDSFNDX0xPR19IRVgoNCwgaXJiLCBzaXplb2YoKmlyYikpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAJY2hhciBkYmZbMTBdOwogCi0JY2hzY19hcmVhLT5oZWFkZXIua2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwljaHNjX2FyZWEtPmhlYWRlci5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJd2hpbGUgKChzY2ggPSBjaHNjX2dldF9uZXh0X3N1YmNoYW5uZWwoc2NoKSkpIHsKIAkJc3Bpbl9sb2NrKHNjaC0+bG9jayk7CiAJCXByaXZhdGUgPSBzY2gtPnByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCAxMjZmMjQwLi5mNzM2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTYyNSw4ICs2MjUsOCBAQAogCS8qCiAJICogR2V0IGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIGxvd2NvcmUKIAkgKi8KLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCWRvIHsKIAkJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tJT19JTlRFUlJVUFRdKys7CiAJCS8qCkBAIC02NjEsNyArNjYxLDcgQEAKIAkJICogV2UgZG9uJ3QgZG8gdGhpcyBmb3IgVk0gYmVjYXVzZSBhIHRwaSBkcm9wcyB0aGUgY3B1CiAJCSAqIG91dCBvZiB0aGUgc2llIHdoaWNoIGNvc3RzIG1vcmUgY3ljbGVzIHRoYW4gaXQgc2F2ZXMuCiAJCSAqLwotCX0gd2hpbGUgKCFNQUNISU5FX0lTX1ZNICYmIHRwaSAoTlVMTCkgIT0gMCk7CisJfSB3aGlsZSAoTUFDSElORV9JU19MUEFSICYmIHRwaShOVUxMKSAhPSAwKTsKIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CkBAIC02ODIsMTAgKzY4MiwxMCBAQAogCXN0cnVjdCBpcmIgKmlyYjsKIAlpbnQgaXJxX2NvbnRleHQ7CiAKLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAodHBpKE5VTEwpICE9IDEpCiAJCXJldHVybiAwOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJLyogU3RvcmUgaW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrIHRvIGxvd2NvcmUuICovCiAJaWYgKHRzY2godHBpX2luZm8tPnNjaGlkLCBpcmIpICE9IDApCiAJCS8qIE5vdCBzdGF0dXMgcGVuZGluZyBvciBub3Qgb3BlcmF0aW9uYWwuICovCkBAIC04ODUsNyArODg1LDcgQEAKIAkJc3RydWN0IHRwaV9pbmZvIHRpOwogCiAJCWlmICh0cGkoJnRpKSkgewotCQkJdHNjaCh0aS5zY2hpZCwgKHN0cnVjdCBpcmIgKilfX0xDX0lSQik7CisJCQl0c2NoKHRpLnNjaGlkLCAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiKTsKIAkJCWlmIChzY2hpZF9lcXVhbCgmdGkuc2NoaWQsICZzY2hpZCkpCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEwODMsNyArMTA4Myw3IEBACiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CiAJc3RydWN0IHNjaGliIHNjaGliOwogCi0Jc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopX19MQ19TVUJDSEFOTkVMX0lEOworCXNjaGlkID0gKihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAoIXNjaGlkLm9uZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHN0c2NoKHNjaGlkLCAmc2NoaWIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jcncuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKaW5kZXggZDE1NzY2NS4uNDI1Zjc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jcncuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCkBAIC04LDE1ICs4LDE2IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGNyd19zZW1hcGhvcmU7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNyd19oYW5kbGVyX211dGV4KTsKIHN0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKK3N0YXRpYyBhdG9taWNfdCBjcndfbnJfcmVxID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY3J3X2hhbmRsZXJfd2FpdF9xKTsKIAogLyoqCiAgKiBjcndfcmVnaXN0ZXJfaGFuZGxlcigpIC0gcmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKQEAgLTU5LDEyICs2MCwxNCBAQAogc3RhdGljIGludCBjcndfY29sbGVjdF9pbmZvKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY3J3IGNyd1syXTsKLQlpbnQgY2NvZGU7CisJaW50IGNjb2RlLCBzaWduYWw7CiAJdW5zaWduZWQgaW50IGNoYWluOwotCWludCBpZ25vcmU7CiAKIHJlcGVhdDoKLQlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmNyd19zZW1hcGhvcmUpOworCXNpZ25hbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcndfaGFuZGxlcl93YWl0X3EsCisJCQkJCSAgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID4gMCk7CisJaWYgKHVubGlrZWx5KHNpZ25hbCkpCisJCWF0b21pY19pbmMoJmNyd19ucl9yZXEpOwogCWNoYWluID0gMDsKIAl3aGlsZSAoMSkgewogCQljcndfaGFuZGxlcl90IGhhbmRsZXI7CkBAIC0xMjIsMjUgKzEyNSwyMyBAQAogCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCiAJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOwogCX0KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3J3X25yX3JlcSkpCisJCXdha2VfdXAoJmNyd19oYW5kbGVyX3dhaXRfcSk7CiAJZ290byByZXBlYXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKQogewotCXVwKCZjcndfc2VtYXBob3JlKTsKKwlhdG9taWNfaW5jKCZjcndfbnJfcmVxKTsKKwl3YWtlX3VwKCZjcndfaGFuZGxlcl93YWl0X3EpOwogfQogCi0vKgotICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKLSAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJmNyd19zZW1hcGhvcmUpOwotCXJldHVybiAwOworCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwl3YWl0X2V2ZW50KGNyd19oYW5kbGVyX3dhaXRfcSwgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID09IDApOwogfQotcHVyZV9pbml0Y2FsbChjcndfaW5pdF9zZW1hcGhvcmUpOwogCiAvKgogICogTWFjaGluZSBjaGVja3MgZm9yIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBtdXN0IGJlIGVuYWJsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDc2NzlhZWUuLjI3NjlkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGFzbS9pc2MuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKQEAgLTIzMiw3ICsyMzMsNyBAQAogCWlmICghZ2V0X2RldmljZSgmc2NoLT5kZXYpKQogCQlyZXR1cm47CiAJc2NoLT50b2RvID0gdG9kbzsKLQlpZiAoIXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2NoLT50b2RvX3dvcmspKSB7CisJaWYgKCFxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzY2gtPnRvZG9fd29yaykpIHsKIAkJLyogQWxyZWFkeSBxdWV1ZWQsIHJlbGVhc2Ugd29ya3F1ZXVlIHJlZi4gKi8KIAkJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogCX0KQEAgLTU0Myw3ICs1NDQsNyBAQAogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHNsb3dfcGF0aF93b3JrLCBjc3Nfc2xvd19wYXRoX2Z1bmMpOwotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNsb3dfcGF0aF93cTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjaW9fd29ya19xOwogCiB2b2lkIGNzc19zY2hlZHVsZV9ldmFsKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQogewpAQCAtNTUyLDcgKzU1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfc2NoX2FkZChzbG93X3N1YmNoYW5uZWxfc2V0LCBzY2hpZCk7CiAJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzbG93X3BhdGhfd29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNTYzLDcgKzU2NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZmlsbChzbG93X3N1YmNoYW5uZWxfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01OTQsMTQgKzU5NSwxNCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2FkZF9zZXQoc2xvd19zdWJjaGFubmVsX3NldCwgdW5yZWdfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2ZyZWUodW5yZWdfc2V0KTsKIH0KIAogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpCiB7Ci0JZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOwogfQogCiAvKiBTY2hlZHVsZSByZXByb2Jpbmcgb2YgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KQEAgLTk5MiwxMiArOTkzLDIxIEBACiAJcmV0ID0gY3NzX2J1c19pbml0KCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQorCWNpb193b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvIik7CisJaWYgKCFjaW9fd29ya19xKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2J1czsKKwl9CiAJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0KCk7CiAJaWYgKHJldCkKLQkJY3NzX2J1c19jbGVhbnVwKCk7CisJCWdvdG8gb3V0X3dxOwogCiAJcmV0dXJuIHJldDsKK291dF93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShjaW9fd29ya19xKTsKK291dF9idXM6CisJY3NzX2J1c19jbGVhbnVwKCk7CisJcmV0dXJuIHJldDsKIH0KIHN1YnN5c19pbml0Y2FsbChjaGFubmVsX3N1YnN5c3RlbV9pbml0KTsKIApAQCAtMTAwNiwxMCArMTAxNiwyNSBAQAogCXN0cnVjdCBjc3NfZHJpdmVyICpjc3NkcnYgPSB0b19jc3Nkcml2ZXIoZHJ2KTsKIAogCWlmIChjc3NkcnYtPnNldHRsZSkKLQkJY3NzZHJ2LT5zZXR0bGUoKTsKKwkJcmV0dXJuIGNzc2Rydi0+c2V0dGxlKCk7CiAJcmV0dXJuIDA7CiB9CiAKK2ludCBjc3NfY29tcGxldGVfd29yayh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzc19ldmFsX3dxLAorCQkJCSAgICAgICBhdG9taWNfcmVhZCgmY3NzX2V2YWxfc2NoZWR1bGVkKSA9PSAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlRSOworCWZsdXNoX3dvcmtxdWV1ZShjaW9fd29ya19xKTsKKwkvKiBXYWl0IGZvciB0aGUgc3ViY2hhbm5lbCB0eXBlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHRvIGZpbmlzaCAqLworCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZjc3NfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIGNzc19zZXR0bGUpOworfQorCisKIC8qCiAgKiBXYWl0IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZGV2aWNlcyB0byBmaW5pc2gsIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKICAqIGRvbmUgd2l0aCBvdXIgc2V0dXAgaWYgdGhlIHNlYXJjaCBmb3IgdGhlIHJvb3QgZGV2aWNlIHN0YXJ0cy4KQEAgLTEwMTgsMTMgKzEwNDMsNDEgQEAKIHsKIAkvKiBTdGFydCBpbml0aWFsIHN1YmNoYW5uZWwgZXZhbHVhdGlvbi4gKi8KIAljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKLQkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCi0Jd2FpdF9ldmVudChjc3NfZXZhbF93cSwgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7Ci0JLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KLQlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKKwljc3NfY29tcGxldGVfd29yaygpOworCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsX3N5bmMoY2hhbm5lbF9zdWJzeXN0ZW1faW5pdF9zeW5jKTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3NpemVfdCBjaW9fc2V0dGxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisKKwkvKiBIYW5kbGUgcGVuZGluZyBDUlcncy4gKi8KKwljcndfd2FpdF9mb3JfY2hhbm5lbF9yZXBvcnQoKTsKKwlyZXQgPSBjc3NfY29tcGxldGVfd29yaygpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaW9fc2V0dGxlX3Byb2NfZm9wcyA9IHsKKwkud3JpdGUgPSBjaW9fc2V0dGxlX3dyaXRlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2lvX3NldHRsZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGUoImNpb19zZXR0bGUiLCBTX0lXVVNSLCBOVUxMLAorCQkJICAgICZjaW9fc2V0dGxlX3Byb2NfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY2lvX3NldHRsZV9pbml0KTsKKyNlbmRpZiAvKkNPTkZJR19QUk9DX0ZTKi8KKwogaW50IHNjaF9pc19wc2V1ZG9fc2NoKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJcmV0dXJuIHNjaCA9PSB0b19jc3Moc2NoLT5kZXYucGFyZW50KS0+cHNldWRvX3N1YmNoYW5uZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCBmZTg0YjkyLi43ZTM3ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAlpbnQgKCpmcmVlemUpKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnRoYXcpIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCpyZXN0b3JlKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKLQl2b2lkICgqc2V0dGxlKSh2b2lkKTsKKwlpbnQgKCpzZXR0bGUpKHZvaWQpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC0xNDYsMTIgKzE0NiwxMyBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyB0byBidWlsZCBsaXN0cyBmb3IgdGhlIHNsb3cgcGF0aC4gKi8KIHZvaWQgY3NzX3NjaGVkdWxlX2V2YWwoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpOwogdm9pZCBjc3Nfc2NoZWR1bGVfZXZhbF9hbGwodm9pZCk7CitpbnQgY3NzX2NvbXBsZXRlX3dvcmsodm9pZCk7CiAKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIHN0cnVjdCBzY2hpYjsKIGludCBjc3Nfc2NoX2lzX3ZhbGlkKHN0cnVjdCBzY2hpYiAqKTsKIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzbG93X3BhdGhfd3E7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNpb193b3JrX3E7CiB2b2lkIGNzc193YWl0X2Zvcl9zbG93X3BhdGgodm9pZCk7CiB2b2lkIGNzc19zY2hlZF9zY2hfdG9kbyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBlbnVtIHNjaF90b2RvIHRvZG8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBhNmM3ZDU0Mi4uYzZhYmI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMzYsNyArMTM2LDYgQEAKIHN0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9jaHBfZXZlbnQoc3RydWN0IHN1YmNoYW5uZWwgKiwgc3RydWN0IGNocF9saW5rICosCiAJCQkJICAgaW50KTsKIHN0YXRpYyB2b2lkIHJlY292ZXJ5X2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiB3YWl0X3F1ZXVlX2hlYWRfdCBjY3dfZGV2aWNlX2luaXRfd3E7CiBhdG9taWNfdCBjY3dfZGV2aWNlX2luaXRfY291bnQ7CiAKQEAgLTE1OSwxMSArMTU4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCitzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCiB7Ci0Jd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCi0JCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOwotCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOworCWludCByZXQ7CisKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2N3X2RldmljZV9pbml0X3dxLAorCQkJCWF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVFI7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNzc19kcml2ZXIgaW9fc3ViY2hhbm5lbF9kcml2ZXIgPSB7CkBAIC0xODgsMjcgKzE5MiwxMyBAQAogCWF0b21pY19zZXQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCwgMCk7CiAJc2V0dXBfdGltZXIoJnJlY292ZXJ5X3RpbWVyLCByZWNvdmVyeV9mdW5jLCAwKTsKIAotCWNjd19kZXZpY2Vfd29yayA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW8iKTsKLQlpZiAoIWNjd19kZXZpY2Vfd29yaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2xvd19wYXRoX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtzbG93Y3J3Iik7Ci0JaWYgKCFzbG93X3BhdGhfd3EpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQlpZiAoKHJldCA9IGJ1c19yZWdpc3RlciAoJmNjd19idXNfdHlwZSkpKQotCQlnb3RvIG91dF9lcnI7Ci0KKwlyZXQgPSBidXNfcmVnaXN0ZXIoJmNjd19idXNfdHlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAlyZXQgPSBjc3NfZHJpdmVyX3JlZ2lzdGVyKCZpb19zdWJjaGFubmVsX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZXJyOworCQlidXNfdW5yZWdpc3RlcigmY2N3X2J1c190eXBlKTsKIAotCXJldHVybiAwOwotb3V0X2VycjoKLQlpZiAoY2N3X2RldmljZV93b3JrKQotCQlkZXN0cm95X3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOwotCWlmIChzbG93X3BhdGhfd3EpCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTM0OCw3ICsxMzM4LDcgQEAKIAkJLyogTm90IG9wZXJhdGlvbmFsLiAqLwogCQlpZiAoIWNkZXYpCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwogCQlyZXR1cm4gSU9fU0NIX09SUEhfVU5SRUc7CiAJfQpAQCAtMTM1NiwxMiArMTM0NiwxMiBAQAogCWlmICghY2RldikKIAkJcmV0dXJuIElPX1NDSF9BVFRBQ0g7CiAJaWYgKHNjaC0+c2NoaWIucG1jdy5kZXYgIT0gY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vKSB7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUdfQVRUQUNIOwogCQlyZXR1cm4gSU9fU0NIX09SUEhfQVRUQUNIOwogCX0KIAlpZiAoKHNjaC0+c2NoaWIucG1jdy5wYW0gJiBzY2gtPm9wbSkgPT0gMCkgewotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSAhPSBOT1RJRllfT0spCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwogCQlyZXR1cm4gSU9fU0NIX0RJU0M7CiAJfQpAQCAtMTQxMCw2ICsxNDAwLDEyIEBACiAJCXJjID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwogCWNhc2UgSU9fU0NIX1ZFUklGWToKKwkJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nID09IDEpIHsKKwkJCWlmIChjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAodTMyKShhZGRyX3Qpc2NoKSkgeworCQkJCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAkJLyogVHJpZ2dlciBwYXRoIHZlcmlmaWNhdGlvbi4gKi8KIAkJaW9fc3ViY2hhbm5lbF92ZXJpZnkoc2NoKTsKIAkJcmMgPSAwOwpAQCAtMTQ0OCw3ICsxNDQ0LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBJT19TQ0hfVU5SRUdfQVRUQUNIOgogCQkvKiBVbnJlZ2lzdGVyIGNjdyBkZXZpY2UuICovCi0JCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKKwkJaWYgKCFjZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZykKKwkJCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xNDU3LDcgKzE0NTQsOCBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBJT19TQ0hfT1JQSF9VTlJFRzoKIAljYXNlIElPX1NDSF9VTlJFRzoKLQkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOworCQlpZiAoIWNkZXYgfHwgIWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nKQorCQkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwogCQlicmVhazsKIAljYXNlIElPX1NDSF9PUlBIX0FUVEFDSDoKIAljYXNlIElPX1NDSF9VTlJFR19BVFRBQ0g6CkBAIC0xNzc5LDI2ICsxNzc3LDQyIEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKLQlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpCi0JCWdvdG8gb3V0OworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKKwkJY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMikoYWRkcl90KXNjaCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJLyoKIAkgKiBXaGlsZSB3ZSB3ZXJlIHNsZWVwaW5nLCBkZXZpY2VzIG1heSBoYXZlIGdvbmUgb3IgYmVjb21lCiAJICogYXZhaWxhYmxlIGFnYWluLiBLaWNrIHJlLWRldGVjdGlvbi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPSAxOworCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCWNzc19jb21wbGV0ZV93b3JrKCk7CisKKwkvKiBjZGV2IG1heSBoYXZlIGJlZW4gbW92ZWQgdG8gYSBkaWZmZXJlbnQgc3ViY2hhbm5lbC4gKi8KKwlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSAmJgorCSAgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT0ZGTElORSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJY2N3X2RldmljZV9yZWNvZ25pdGlvbihjZGV2KTsKIAlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSB8fAogCQkgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKTsKLW91dDoKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisKK291dF91bmxvY2s6CiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHJlc3VtZV9oYW5kbGVfYm94ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfQk9YRUQ7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkgPT0gTk9USUZZX09LKQogCQlyZXR1cm4gMDsKIAljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4MDcsNyArMTgyMSw3IEBACiBzdGF0aWMgaW50IHJlc3VtZV9oYW5kbGVfZGlzYyhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpID09IE5PVElGWV9PSykKIAkJcmV0dXJuIDA7CiAJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODE2LDQwICsxODMwLDMxIEBACiBzdGF0aWMgaW50IGNjd19kZXZpY2VfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSB0b19jY3dkZXYoZGV2KTsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKLQlpbnQgcmV0ID0gMCwgY21fZW5hYmxlZDsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByZXQgPSAwOwogCiAJX19jY3dfZGV2aWNlX3BtX3Jlc3RvcmUoY2Rldik7CisJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7Ci0JaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7Ci0JCWNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpKGFkZHJfdClzY2gpOwotCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpCiAJCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwogCS8qIGNoZWNrIHJlY29nbml0aW9uIHJlc3VsdHMgKi8KIAlzd2l0Y2ggKGNkZXYtPnByaXZhdGUtPnN0YXRlKSB7CiAJY2FzZSBERVZfU1RBVEVfT0ZGTElORToKKwljYXNlIERFVl9TVEFURV9PTkxJTkU6CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CiAJCXJldCA9IHJlc3VtZV9oYW5kbGVfYm94ZWQoY2Rldik7Ci0JCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JY2FzZSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOgotCQlnb3RvIG91dF9kaXNjX3VubG9jazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dF91bnJlZ191bmxvY2s7Ci0JfQotCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaWQgaGFzIGNoYW5nZWQgKi8KLQlpZiAoc2NoLT5zY2hpYi5wbWN3LmRldiAhPSBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pIHsKLQkJQ0lPX01TR19FVkVOVCgwLCAicmVzdW1lOiBzY2ggMC4leC4lMDR4OiBmYWlsZWQgKGRldm5vICIKLQkJCSAgICAgICJjaGFuZ2VkIGZyb20gJTA0eCB0byAlMDR4KVxuIiwKLQkJCSAgICAgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sCi0JCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCi0JCQkgICAgICBzY2gtPnNjaGliLnBtY3cuZGV2KTsKLQkJZ290byBvdXRfdW5yZWdfdW5sb2NrOworCQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3Jlc3RvcmU7CiAJfQogCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgdHlwZSBoYXMgY2hhbmdlZCAqLwogCWlmICghY2N3X2RldmljZV90ZXN0X3NlbnNlX2RhdGEoY2RldikpIHsKQEAgLTE4NTgsMjQgKzE4NjMsMzAgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAoIWNkZXYtPm9ubGluZSkgewotCQlyZXQgPSAwOworCWlmICghY2Rldi0+b25saW5lKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoY2N3X2RldmljZV9vbmxpbmUoY2RldikpIHsKKwkJcmV0ID0gcmVzdW1lX2hhbmRsZV9kaXNjKGNkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9yZXN0b3JlOworCX0KKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19PUEVSKSA9PSBOT1RJRllfQkFEKSB7CisJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCXJldCA9IGNjd19kZXZpY2Vfb25saW5lKGNkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2Rpc2NfdW5sb2NrOwogCi0JY21fZW5hYmxlZCA9IGNkZXYtPnByaXZhdGUtPmNtYiAhPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwotCi0Jd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGRldl9mc21fZmluYWxfc3RhdGUoY2RldikpOwotCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKSB7Ci0JCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKLQkJZ290byBvdXRfZGlzY191bmxvY2s7Ci0JfQotCWlmIChjbV9lbmFibGVkKSB7CisJLyogcmVlbmFibGUgY21mLCBpZiBuZWVkZWQgKi8KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+Y21iKSB7CisJCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCQlyZXQgPSBjY3dfc2V0X2NtZihjZGV2LCAxKTsKKwkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCQlpZiAocmV0KSB7CiAJCQlDSU9fTVNHX0VWRU5UKDIsICJyZXN1bWU6IGNkZXYgMC4leC4lMDR4OiBjbWYgZmFpbGVkICIKIAkJCQkgICAgICAiKHJjPSVkKVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC0xODg1LDIxICsxODk2LDExIEBACiAJfQogCiBvdXRfcmVzdG9yZToKKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAlpZiAoY2Rldi0+b25saW5lICYmIGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnJlc3RvcmUpCiAJCXJldCA9IGNkZXYtPmRydi0+cmVzdG9yZShjZGV2KTsKLW91dDoKIAlyZXR1cm4gcmV0OwogCi1vdXRfZGlzY191bmxvY2s6Ci0JcmV0ID0gcmVzdW1lX2hhbmRsZV9kaXNjKGNkZXYpOwotCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JZ290byBvdXRfcmVzdG9yZTsKLQotb3V0X3VucmVnX3VubG9jazoKLQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHX0VWQUwpOwotCXJldCA9IC1FTk9ERVY7CiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0yMDI4LDcgKzIwMjksNyBAQAogCS8qIEdldCB3b3JrcXVldWUgcmVmLiAqLwogCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJcmV0dXJuOwotCWlmICghcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT50b2RvX3dvcmspKSB7CisJaWYgKCFxdWV1ZV93b3JrKGNpb193b3JrX3EsICZjZGV2LT5wcml2YXRlLT50b2RvX3dvcmspKSB7CiAJCS8qIEFscmVhZHkgcXVldWVkLCByZWxlYXNlIHdvcmtxdWV1ZSByZWYuICovCiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJfQpAQCAtMjA0MSw1ICsyMDQyLDQgQEAKIEVYUE9SVF9TWU1CT0woY2N3X2RyaXZlcl91bnJlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woZ2V0X2Njd2Rldl9ieV9idXNpZCk7CiBFWFBPUlRfU1lNQk9MKGNjd19idXNfdHlwZSk7Ci1FWFBPUlRfU1lNQk9MKGNjd19kZXZpY2Vfd29yayk7CiBFWFBPUlRfU1lNQk9MX0dQTChjY3dfZGV2aWNlX2dldF9zdWJjaGFubmVsX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGJjZmUxM2UuLjM3OWRlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSAiaW9fc2NoLmgiCiAKIC8qCkBAIC03MSw3ICs3MSw2IEBACiAJCWNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9CT1hFRCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOwogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGNjd19kZXZpY2VfaW5pdF93cTsKIGV4dGVybiBhdG9taWNfdCBjY3dfZGV2aWNlX2luaXRfY291bnQ7CiBpbnQgX19pbml0IGlvX3N1YmNoYW5uZWxfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggYWU3NjA2NS4uYzU2YWI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTMxMywyMSArMzEzLDQzIEBACiAJfQogfQogCisvKioKKyAgKiBjY3dfZGV2aWNlX25vdGlmeSgpIC0gaW5mb3JtIHRoZSBkZXZpY2UncyBkcml2ZXIgYWJvdXQgYW4gZXZlbnQKKyAgKiBAY2RldjogZGV2aWNlIGZvciB3aGljaCBhbiBldmVudCBvY2N1cmVkCisgICogQGV2ZW50OiBldmVudCB0aGF0IG9jY3VycmVkCisgICoKKyAgKiBSZXR1cm5zOgorICAqICAgLSVFSU5WQUwgaWYgdGhlIGRldmljZSBpcyBvZmZsaW5lIG9yIGhhcyBubyBkcml2ZXIuCisgICogICAtJUVPUE5PVFNVUFAgaWYgdGhlIGRldmljZSdzIGRyaXZlciBoYXMgbm8gbm90aWZpZXIgcmVnaXN0ZXJlZC4KKyAgKiAgICVOT1RJRllfT0sgaWYgdGhlIGRyaXZlciB3YW50cyB0byBrZWVwIHRoZSBkZXZpY2UuCisgICogICAlTk9USUZZX0JBRCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgd2FudCB0byBrZWVwIHRoZSBkZXZpY2UuCisgICovCiBpbnQgY2N3X2RldmljZV9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBldmVudCkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghY2Rldi0+ZHJ2KQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJaWYgKCFjZGV2LT5vbmxpbmUpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAlDSU9fTVNHX0VWRU5UKDIsICJub3RpZnkgY2FsbGVkIGZvciAwLiV4LiUwNHgsIGV2ZW50PSVkXG4iLAogCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkgICAgICBldmVudCk7Ci0JcmV0dXJuIGNkZXYtPmRydi0+bm90aWZ5ID8gY2Rldi0+ZHJ2LT5ub3RpZnkoY2RldiwgZXZlbnQpIDogMDsKKwlpZiAoIWNkZXYtPmRydi0+bm90aWZ5KSB7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGNkZXYtPmRydi0+bm90aWZ5KGNkZXYsIGV2ZW50KSkKKwkJcmV0ID0gTk9USUZZX09LOworCWVsc2UKKwkJcmV0ID0gTk9USUZZX0JBRDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX29wZXJfbm90aWZ5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fT1BFUikpIHsKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX09QRVIpID09IE5PVElGWV9PSykgewogCQkvKiBSZWVuYWJsZSBjaGFubmVsIG1lYXN1cmVtZW50cywgaWYgbmVlZGVkLiAqLwogCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX0VOQUJMRV9DTUYpOwogCQlyZXR1cm47CkBAIC0zNjEsMTQgKzM4MywxNSBAQAogCWNhc2UgREVWX1NUQVRFX0JPWEVEOgogCQlDSU9fTVNHX0VWRU5UKDAsICJCb3hlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKLQkJaWYgKGNkZXYtPm9ubGluZSAmJiAhY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKKwkJaWYgKGNkZXYtPm9ubGluZSAmJgorCQkgICAgY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwogCQlicmVhazsKIAljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJQ0lPX01TR19FVkVOVCgwLCAiRGV2aWNlICUwNHggZ29uZSBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJCWVsc2UKIAkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKQEAgLTM3OCw3ICs0MDEsNyBAQAogCQlDSU9fTVNHX0VWRU5UKDAsICJEaXNjb25uZWN0ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAiCiAJCQkgICAgICAiJTA0eFxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkJICAgICAgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJZWxzZQogCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtNTg2LDcgKzYwOSw3IEBACiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX2dlbmVyaWNfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCQkgICAgICAgZW51bSBkZXZfZXZlbnQgZGV2X2V2ZW50KQogewotCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAllbHNlCiAJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKQEAgLTY2Nyw3ICs2OTAsNyBAQAogCXN0cnVjdCBpcmIgKmlyYjsKIAlpbnQgaXNfY21kOwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAlpc19jbWQgPSAhc2Nzd19pc190bSgmaXJiLT5zY3N3KTsKIAkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0LiAqLwogCWlmICghc2Nzd19pc19zb2xpY2l0ZWQoJmlyYi0+c2NzdykpIHsKQEAgLTczMiw3ICs3NTUsNyBAQAogewogCXN0cnVjdCBpcmIgKmlyYjsKIAotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJLyogQ2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdC4gKi8KIAlpZiAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSA9PQogCSAgICAoU0NTV19TVENUTF9TVEFUVVNfUEVORCB8IFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0NGYyZjZhLi40OGFhMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjA4LDE4ICsyMDgsMjcgQEAKIAl1bnNpZ25lZCBpbnQgZXFic19wYXJ0aWFsOwogCXVuc2lnbmVkIGludCBzcWJzOwogCXVuc2lnbmVkIGludCBzcWJzX3BhcnRpYWw7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IHFkaW9fcXVldWVfcGVyZl9zdGF0IHsKKwkvKgorCSAqIFNvcnRlZCBpbnRvIG9yZGVyLTIgYnVja2V0czogMSwgMi0zLCA0LTcsIC4uLiA2NC0xMjcsIDEyOC4KKwkgKiBTaW5jZSBtYXguIDEyNyBTQkFMcyBhcmUgc2Nhbm5lZCByZXVzZSBlbnRyeSBmb3IgMTI4IGFzIHF1ZXVlIGZ1bGwKKwkgKiBha2EgMTI3IFNCQUxzIGZvdW5kLgorCSAqLworCXVuc2lnbmVkIGludCBucl9zYmFsc1s4XTsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF9lcnJvcjsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF9ub3A7CisJdW5zaWduZWQgaW50IG5yX3NiYWxfdG90YWw7CiB9OwogCiBzdHJ1Y3QgcWRpb19pbnB1dF9xIHsKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKLQogCS8qIGZpcnN0IEFDSydlZCBidWZmZXIgKi8KIAlpbnQgYWNrX3N0YXJ0OwotCiAJLyogaG93IG11Y2ggc2JhbHMgYXJlIGFja25vd2xlZGdlZCB3aXRoIHFlYnNtICovCiAJaW50IGFja19jb3VudDsKLQogCS8qIGxhc3QgdGltZSBvZiBub3RpY2luZyBpbmNvbWluZyBkYXRhICovCiAJdTY0IHRpbWVzdGFtcDsKIH07CkBAIC0yMjcsMjEgKzIzNiw0NyBAQAogc3RydWN0IHFkaW9fb3V0cHV0X3EgewogCS8qIFBDSXMgYXJlIGVuYWJsZWQgZm9yIHRoZSBxdWV1ZSAqLwogCWludCBwY2lfb3V0X2VuYWJsZWQ7Ci0KIAkvKiBJUURJTzogb3V0cHV0IG11bHRpcGxlIGJ1ZmZlcnMgKGVuaGFuY2VkIFNJR0EpICovCiAJaW50IHVzZV9lbmhfc2lnYTsKLQogCS8qIHRpbWVyIHRvIGNoZWNrIGZvciBtb3JlIG91dGJvdW5kIHdvcmsgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKKy8qCisgKiBOb3RlIG9uIGNhY2hlIGFsaWdubWVudDogZ3JvdXBlZCBzbHNiIGFuZCB3cml0ZSBtb3N0bHkgZGF0YSBhdCB0aGUgYmVnaW5uaW5nCisgKiBzYmFsW10gaXMgcmVhZC1vbmx5IGFuZCBzdGFydHMgb24gYSBuZXcgY2FjaGVsaW5lIGZvbGxvd2VkIGJ5IHJlYWQgbW9zdGx5LgorICovCiBzdHJ1Y3QgcWRpb19xIHsKIAlzdHJ1Y3Qgc2xzYiBzbHNiOworCiAJdW5pb24gewogCQlzdHJ1Y3QgcWRpb19pbnB1dF9xIGluOwogCQlzdHJ1Y3QgcWRpb19vdXRwdXRfcSBvdXQ7CiAJfSB1OwogCisJLyoKKwkgKiBpbmJvdW5kOiBuZXh0IGJ1ZmZlciB0aGUgcHJvZ3JhbSBzaG91bGQgY2hlY2sgZm9yCisJICogb3V0Ym91bmQ6IG5leHQgYnVmZmVyIHRvIGNoZWNrIGlmIGFkYXB0ZXIgcHJvY2Vzc2VkIGl0CisJICovCisJaW50IGZpcnN0X3RvX2NoZWNrOworCisJLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLworCWludCBsYXN0X21vdmU7CisKKwkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KKwlpbnQgZmlyc3RfdG9fa2ljazsKKworCS8qIG51bWJlciBvZiBidWZmZXJzIGluIHVzZSBieSB0aGUgYWRhcHRlciAqLworCWF0b21pY190IG5yX2J1Zl91c2VkOworCisJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KKwl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXN0cnVjdCBxZGlvX3F1ZXVlX3BlcmZfc3RhdCBxX3N0YXRzOworCisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwogCS8qIHF1ZXVlIG51bWJlciAqLwogCWludCBucjsKIApAQCAtMjU3LDMyICsyOTIsOSBAQAogCS8qIHVwcGVyLWxheWVyIHByb2dyYW0gaGFuZGxlciAqLwogCXFkaW9faGFuZGxlcl90ICgqaGFuZGxlcik7CiAKLQkvKgotCSAqIGluYm91bmQ6IG5leHQgYnVmZmVyIHRoZSBwcm9ncmFtIHNob3VsZCBjaGVjayBmb3IKLQkgKiBvdXRib3VuZDogbmV4dCBidWZmZXIgdG8gY2hlY2sgZm9yIGhhdmluZyBiZWVuIHByb2Nlc3NlZAotCSAqIGJ5IHRoZSBjYXJkCi0JICovCi0JaW50IGZpcnN0X3RvX2NoZWNrOwotCi0JLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLwotCWludCBsYXN0X21vdmU7Ci0KLQkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KLQlpbnQgZmlyc3RfdG9fa2ljazsKLQotCS8qIG51bWJlciBvZiBidWZmZXJzIGluIHVzZSBieSB0aGUgYWRhcHRlciAqLwotCWF0b21pY190IG5yX2J1Zl91c2VkOwotCi0Jc3RydWN0IHFkaW9faXJxICppcnFfcHRyOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcTsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLQotCS8qIGVycm9yIGNvbmRpdGlvbiBkdXJpbmcgYSBkYXRhIHRyYW5zZmVyICovCi0JdW5zaWduZWQgaW50IHFkaW9fZXJyb3I7Ci0KKwlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IHNsICpzbDsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0KIAkvKgogCSAqIFdhcm5pbmc6IExlYXZlIHRoaXMgbWVtYmVyIGF0IHRoZSBlbmQgc28gaXQgd29uJ3QgYmUgY2xlYXJlZCBpbgogCSAqIHFkaW9fZmlsbF9xcy4gQSBwYWdlIGlzIGFsbG9jYXRlZCB1bmRlciB0aGlzIHBvaW50ZXIgYW5kIHVzZWQgZm9yCkBAIC0zMTcsMTIgKzMyOSw4IEBACiAJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWRfZGVzYzsKIAl2b2lkICgqb3JpZ19oYW5kbGVyKSAoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGlyYiAqKTsKIAotCXN0cnVjdCBxZGlvX2Rldl9wZXJmX3N0YXQgcGVyZl9zdGF0OwogCWludCBwZXJmX3N0YXRfZW5hYmxlZDsKLQkvKgotCSAqIFdhcm5pbmc6IExlYXZlIHRoZXNlIG1lbWJlcnMgdG9nZXRoZXIgYXQgdGhlIGVuZCBzbyB0aGV5IHdvbid0IGJlCi0JICogY2xlYXJlZCBpbiBxZGlvX3NldHVwX2lycS4KLQkgKi8KKwogCXN0cnVjdCBxZHIgKnFkcjsKIAl1bnNpZ25lZCBsb25nIGNoc2NfcGFnZTsKIApAQCAtMzMxLDYgKzMzOSw3IEBACiAKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2FyZWE7CiAJc3RydWN0IG11dGV4IHNldHVwX211dGV4OworCXN0cnVjdCBxZGlvX2Rldl9wZXJmX3N0YXQgcGVyZl9zdGF0OwogfTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyAqLwpAQCAtMzQxLDkgKzM1MCwyMCBAQAogCShpcnEtPnFpYi5xZm10ID09IFFESU9fSVFESU9fUUZNVCB8fCBcCiAJIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5haWZfb3NhKQogCi0jZGVmaW5lIHFwZXJmKHFkZXYsYXR0cikJcWRldi0+cGVyZl9zdGF0LmF0dHIKLSNkZWZpbmUgcXBlcmZfaW5jKHEsYXR0cikJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSBcCi0JCQkJCXEtPmlycV9wdHItPnBlcmZfc3RhdC5hdHRyKysKKyNkZWZpbmUgcXBlcmYoX19xZGV2LCBfX2F0dHIpCSgoX19xZGV2KS0+cGVyZl9zdGF0LihfX2F0dHIpKQorCisjZGVmaW5lIHFwZXJmX2luYyhfX3EsIF9fYXR0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlzdHJ1Y3QgcWRpb19pcnEgKnFkZXYgPSAoX19xKS0+aXJxX3B0cjsJCQkJXAorCWlmIChxZGV2LT5wZXJmX3N0YXRfZW5hYmxlZCkJCQkJCVwKKwkJKHFkZXYtPnBlcmZfc3RhdC5fX2F0dHIpKys7CQkJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NiYWxzX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKK3sKKwlxLT5xX3N0YXRzLm5yX3NiYWxfZXJyb3IgKz0gY291bnQ7CisJcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsICs9IGNvdW50OworfQogCiAvKiB0aGUgaGlnaGVzdCBpcWRpbyBxdWV1ZSBpcyB1c2VkIGZvciBtdWx0aWNhc3QgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG11bHRpY2FzdF9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCBmNDk3NjFmLi5jOTRlYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtNjAsNyArNjAsNyBAQAogCXNlcV9wcmludGYobSwgImZ0YzogJWQgIGxhc3RfbW92ZTogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrLCBxLT5sYXN0X21vdmUpOwogCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkICBhY2sgc3RhcnQ6ICVkICBhY2sgY291bnQ6ICVkXG4iLAogCQkgICBxLT51LmluLnBvbGxpbmcsIHEtPnUuaW4uYWNrX3N0YXJ0LCBxLT51LmluLmFja19jb3VudCk7Ci0Jc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CisJc2VxX3ByaW50ZihtLCAiU0JBTCBzdGF0ZXM6XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8MCAgICAgIHw4ICAgICAgfDE2ICAgICB8MjQgICAgIHwzMiAgICAgfDQwICAgICB8NDggICAgIHw1NiAgNjN8XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBpKyspIHsKQEAgLTk3LDYgKzk3LDIwIEBACiAJfQogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDY0ICAgICB8NzIgICAgIHw4MCAgICAgfDg4ICAgICB8OTYgICAgIHwxMDQgICAgfDExMiAgICB8ICAgMTI3fFxuIik7CisKKwlzZXFfcHJpbnRmKG0sICJcblNCQUwgc3RhdGlzdGljczoiKTsKKwlpZiAoIXEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSB7CisJCXNlcV9wcmludGYobSwgIiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYobSwgIlxuMSAgICAgICAgICAyLi4gICAgICAgIDQuLiAgICAgICAgOC4uICAgICAgICAiCisJCSAgICIxNi4uICAgICAgIDMyLi4gICAgICAgNjQuLiAgICAgICAxMjdcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHEtPnFfc3RhdHMubnJfc2JhbHMpOyBpKyspCisJCXNlcV9wcmludGYobSwgIiUtMTB1ICIsIHEtPnFfc3RhdHMubnJfc2JhbHNbaV0pOworCXNlcV9wcmludGYobSwgIlxuRXJyb3IgICAgICBOT1AgICAgICAgIFRvdGFsXG4lLTEwdSAlLTEwdSAlLTEwdVxuXG4iLAorCQkgICBxLT5xX3N0YXRzLm5yX3NiYWxfZXJyb3IsIHEtPnFfc3RhdHMubnJfc2JhbF9ub3AsCisJCSAgIHEtPnFfc3RhdHMubnJfc2JhbF90b3RhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MSw5ICsxOTUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHFkaW9fcSAqcTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAljaGFyIGJ1Zls4XTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAwOwpAQCAtMjAxLDYgKzIxNiwxMCBAQAogCWNhc2UgMDoKIAkJaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAwOwogCQltZW1zZXQoJmlycV9wdHItPnBlcmZfc3RhdCwgMCwgc2l6ZW9mKGlycV9wdHItPnBlcmZfc3RhdCkpOworCQlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQorCQkJbWVtc2V0KCZxLT5xX3N0YXRzLCAwLCBzaXplb2YocS0+cV9zdGF0cykpOworCQlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKKwkJCW1lbXNldCgmcS0+cV9zdGF0cywgMCwgc2l6ZW9mKHEtPnFfc3RhdHMpKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCA2MmI2NTRhLi4yMzJlZjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTM5Miw2ICszOTIsMjAgQEAKIAkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2JhbHMoc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQoreworCWludCBwb3MgPSAwOworCisJcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsICs9IGNvdW50OworCWlmIChjb3VudCA9PSBRRElPX01BWF9CVUZGRVJTX01BU0spIHsKKwkJcS0+cV9zdGF0cy5ucl9zYmFsc1s3XSsrOworCQlyZXR1cm47CisJfQorCXdoaWxlIChjb3VudCA+Pj0gMSkKKwkJcG9zKys7CisJcS0+cV9zdGF0cy5ucl9zYmFsc1twb3NdKys7Cit9CisKIHN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCiB7CiAJcS0+cWRpb19lcnJvciB8PSBRRElPX0VSUk9SX1NMU0JfU1RBVEU7CkBAIC00ODcsMTYgKzUwMSwyMiBAQAogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJaWYgKGF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCkgPT0gMCkKIAkJCXFwZXJmX2luYyhxLCBpbmJvdW5kX3F1ZXVlX2Z1bGwpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfSU5QVVRfRVJST1I6CiAJCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzX2Vycm9yKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX0NVX0lOUFVUX0VNUFRZOgogCWNhc2UgU0xTQl9QX0lOUFVUX05PVF9JTklUOgogCWNhc2UgU0xTQl9QX0lOUFVUX0FDSzoKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJcS0+cV9zdGF0cy5ucl9zYmFsX25vcCsrOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gbm9wIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01MTQsNyArNTM0LDcgQEAKIAogCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CiAJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwotCQlpZiAoIWlzX3RoaW5pbnRfaXJxKHEtPmlycV9wdHIpICYmICFNQUNISU5FX0lTX1ZNKQorCQlpZiAoIWlzX3RoaW5pbnRfaXJxKHEtPmlycV9wdHIpICYmIE1BQ0hJTkVfSVNfTFBBUikKIAkJCXEtPnUuaW4udGltZXN0YW1wID0gZ2V0X3VzZWNzKCk7CiAJCXJldHVybiAxOwogCX0gZWxzZQpAQCAtNjQzLDE1ICs2NjMsMjEgQEAKIAogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX09VVFBVVF9FUlJPUjoKIAkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHNfZXJyb3IocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfQ1VfT1VUUFVUX1BSSU1FRDoKIAkJLyogdGhlIGFkYXB0ZXIgaGFzIG5vdCBmZXRjaGVkIHRoZSBvdXRwdXQgeWV0ICovCisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCXEtPnFfc3RhdHMubnJfc2JhbF9ub3ArKzsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIm91dCBwcmltZWQ6JTFkIiwgcS0+bnIpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfTk9UX0lOSVQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IDhjMmRlYTUuLjdmNGE3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLnNsc2JhID0KIAkJKHVuc2lnbmVkIGxvbmcpJmlycV9wdHJfcXNbaV0tPnNsc2IudmFsWzBdOwogCi0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYWtleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYmtleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uY2tleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uZGtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYWtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ia2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmNrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uZGtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfcWRyKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlycV9wdHItPnFkci0+aXFkc3ogPSBzaXplb2Yoc3RydWN0IHFkZXNmbXQwKSAvIDQ7IC8qIHNpemUgaW4gd29yZHMgKi8KIAlpcnFfcHRyLT5xZHItPm9xZHN6ID0gc2l6ZW9mKHN0cnVjdCBxZGVzZm10MCkgLyA0OwogCWlycV9wdHItPnFkci0+cWliYSA9ICh1bnNpZ25lZCBsb25nKSZpcnFfcHRyLT5xaWI7Ci0JaXJxX3B0ci0+cWRyLT5xa2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlpcnFfcHRyLT5xZHItPnFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRpb19pbml0LT5ub19pbnB1dF9xczsgaSsrKQogCQlfX3FkaW9fYWxsb2NhdGVfZmlsbF9xZHIoaXJxX3B0ciwgaXJxX3B0ci0+aW5wdXRfcXMsIGksIDApOwpAQCAtMzgyLDcgKzM4MiwxNSBAQAogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IGluaXRfZGF0YS0+Y2Rldi0+cHJpdmF0ZS0+cWRpb19kYXRhOwogCWludCByYzsKIAotCW1lbXNldChpcnFfcHRyLCAwLCAoKGNoYXIgKikmaXJxX3B0ci0+cWRyKSAtICgoY2hhciAqKWlycV9wdHIpKTsKKwltZW1zZXQoJmlycV9wdHItPnFpYiwgMCwgc2l6ZW9mKGlycV9wdHItPnFpYikpOworCW1lbXNldCgmaXJxX3B0ci0+c2lnYV9mbGFnLCAwLCBzaXplb2YoaXJxX3B0ci0+c2lnYV9mbGFnKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5jY3csIDAsIHNpemVvZihpcnFfcHRyLT5jY3cpKTsKKwltZW1zZXQoJmlycV9wdHItPnNzcWRfZGVzYywgMCwgc2l6ZW9mKGlycV9wdHItPnNzcWRfZGVzYykpOworCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisKKwlpcnFfcHRyLT5kZWJ1Z2ZzX2RldiA9IGlycV9wdHItPmRlYnVnZnNfcGVyZiA9IE5VTEw7CisJaXJxX3B0ci0+c2NoX3Rva2VuID0gaXJxX3B0ci0+c3RhdGUgPSBpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CisKIAkvKiB3aXBlcyBxaWIuYWMsIHJlcXVpcmVkIGJ5IGFyNzA2MyAqLwogCW1lbXNldChpcnFfcHRyLT5xZHIsIDAsIHNpemVvZihzdHJ1Y3QgcWRyKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCmluZGV4IDA5MWQ5MDQuLjk5NDJjMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwpAQCAtMTk4LDggKzE5OCw4IEBACiAJCS5jb2RlCT0gMHgwMDIxLAogCX07CiAJc2Nzc2NfYXJlYS0+b3BlcmF0aW9uX2NvZGUgPSAwOwotCXNjc3NjX2FyZWEtPmtzID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlzY3NzY19hcmVhLT5rYyA9IFBBR0VfREVGQVVMVF9LRVk7CisJc2Nzc2NfYXJlYS0+a3MgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJc2Nzc2NfYXJlYS0+a2MgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJc2Nzc2NfYXJlYS0+aXNjID0gUURJT19BSVJRX0lTQzsKIAlzY3NzY19hcmVhLT5zY2hpZCA9IGlycV9wdHItPnNjaGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCmluZGV4IGM2OGJlMjQuLmJhNTBmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC05MTIsMTI2ICs5MTMsMTA1IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnpjcnlwdF9lbnRyeTsKIAotc3RhdGljIGludCBzcHJpbnRjbCh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGNsKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGk7CisJaW50IGk7CiAKLQlobCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIlMDF4IiwgKHVuc2lnbmVkIGludCkgYWRkcltpXSk7Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiICIpOwotCXJldHVybiBobDsKKwkJc2VxX3ByaW50ZihtLCAiJTAxeCIsICh1bnNpZ25lZCBpbnQpIGFkZHJbaV0pOworCXNlcV9wdXRjKG0sICcgJyk7CiB9CiAKLXN0YXRpYyBpbnQgc3ByaW50cncodW5zaWduZWQgY2hhciAqb3V0YWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKLQkJICAgIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9pZCBzcHJpbnRydyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCBpbmwsIGMsIGN4OworCWludCBpbmwsIGMsIGN4OwogCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICIJICAgIik7CisJc2VxX3ByaW50ZihtLCAiCSAgICIpOwogCWlubCA9IDA7CiAJZm9yIChjID0gMDsgYyA8IChsZW4gLyAxNik7IGMrKykgewotCQlobCArPSBzcHJpbnRjbChvdXRhZGRyK2hsLCBhZGRyK2lubCwgMTYpOworCQlzcHJpbnRjbChtLCBhZGRyK2lubCwgMTYpOwogCQlpbmwgKz0gMTY7CiAJfQogCWN4ID0gbGVuJTE2OwogCWlmIChjeCkgewotCQlobCArPSBzcHJpbnRjbChvdXRhZGRyK2hsLCBhZGRyK2lubCwgY3gpOworCQlzcHJpbnRjbChtLCBhZGRyK2lubCwgY3gpOwogCQlpbmwgKz0gY3g7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHNwcmludGh4KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCB1bnNpZ25lZCBjaGFyICpvdXRhZGRyLAotCQkgICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGh4KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCSAgICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGlubCwgciwgcng7CisJaW50IGlubCwgciwgcng7CiAKLQlobCA9IHNwcmludGYob3V0YWRkciwgIlxuJXNcbiIsIHRpdGxlKTsKKwlzZXFfcHJpbnRmKG0sICJcbiVzXG4iLCB0aXRsZSk7CiAJaW5sID0gMDsKIAlmb3IgKHIgPSAwOyByIDwgKGxlbiAvIDY0KTsgcisrKSB7Ci0JCWhsICs9IHNwcmludHJ3KG91dGFkZHIraGwsIGFkZHIraW5sLCA2NCk7CisJCXNwcmludHJ3KG0sIGFkZHIraW5sLCA2NCk7CiAJCWlubCArPSA2NDsKIAl9CiAJcnggPSBsZW4gJSA2NDsKIAlpZiAocngpIHsKLQkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIHJ4KTsKKwkJc3ByaW50cncobSwgYWRkcitpbmwsIHJ4KTsKIAkJaW5sICs9IHJ4OwogCX0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCXJldHVybiBobDsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIGludCBzcHJpbnRoeDQodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JCSAgICAgdW5zaWduZWQgaW50ICphcnJheSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGh4NCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgc3RydWN0IHNlcV9maWxlICptLAorCQkgICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgcjsKKwlpbnQgcjsKIAotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiXG4lc1xuIiwgdGl0bGUpOworCXNlcV9wcmludGYobSwgIlxuJXNcbiIsIHRpdGxlKTsKIAlmb3IgKHIgPSAwOyByIDwgbGVuOyByKyspIHsKIAkJaWYgKChyICUgOCkgPT0gMCkKLQkJCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiAgICAiKTsKLQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiJTA4WCAiLCBhcnJheVtyXSk7CisJCQlzZXFfcHJpbnRmKG0sICIgICAgIik7CisJCXNlcV9wcmludGYobSwgIiUwOFggIiwgYXJyYXlbcl0pOwogCQlpZiAoKHIgJSA4KSA9PSA3KQotCQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCXJldHVybiBobDsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIGludCB6Y3J5cHRfc3RhdHVzX3JlYWQoY2hhciAqcmVzcF9idWZmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHpjcnlwdF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXVuc2lnbmVkIGNoYXIgKndvcmthcmVhOwotCWludCBsZW47CisJY2hhciB3b3JrYXJlYVtzaXplb2YoaW50KSAqIEFQX0RFVklDRVNdOwogCi0JbGVuID0gMDsKLQotCS8qIHJlc3BfYnVmZiBpcyBhIHBhZ2UuIFVzZSB0aGUgcmlnaHQgaGFsZiBmb3IgYSB3b3JrIGFyZWEgKi8KLQl3b3JrYXJlYSA9IHJlc3BfYnVmZiArIDIwMDA7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiXG56Y3J5cHQgdmVyc2lvbjogJWQuJWQuJWRcbiIsCi0JCVpDUllQVF9WRVJTSU9OLCBaQ1JZUFRfUkVMRUFTRSwgWkNSWVBUX1ZBUklBTlQpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNyeXB0b2dyYXBoaWMgZG9tYWluOiAlZFxuIiwKLQkJICAgICAgIGFwX2RvbWFpbl9pbmRleCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiVG90YWwgZGV2aWNlIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9kZXZpY2VfY291bnQpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSUNBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSUNDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSVhDQyBNQ0wyIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMikpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSVhDQyBNQ0wzIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDJDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDJBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDNDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDNBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgInJlcXVlc3RxIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9yZXF1ZXN0cV9jb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJwZW5kaW5ncSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfcGVuZGluZ3FfY291bnQoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiVG90YWwgb3BlbiBoYW5kbGVzOiAlZFxuXG4iLAotCQkgICAgICAgYXRvbWljX3JlYWQoJnpjcnlwdF9vcGVuX2NvdW50KSk7CisJc2VxX3ByaW50ZihtLCAiXG56Y3J5cHQgdmVyc2lvbjogJWQuJWQuJWRcbiIsCisJCSAgIFpDUllQVF9WRVJTSU9OLCBaQ1JZUFRfUkVMRUFTRSwgWkNSWVBUX1ZBUklBTlQpOworCXNlcV9wcmludGYobSwgIkNyeXB0b2dyYXBoaWMgZG9tYWluOiAlZFxuIiwgYXBfZG9tYWluX2luZGV4KTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBkZXZpY2UgY291bnQ6ICVkXG4iLCB6Y3J5cHRfZGV2aWNlX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lDQSBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQSkpOworCXNlcV9wcmludGYobSwgIlBDSUNDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNDKSk7CisJc2VxX3ByaW50ZihtLCAiUENJWENDIE1DTDIgY291bnQ6ICVkXG4iLAorCQkgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDIpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lYQ0MgTUNMMyBjb3VudDogJWRcbiIsCisJCSAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMykpOworCXNlcV9wcmludGYobSwgIkNFWDJDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJDKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYMkEgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkEpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgzQyBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQykpOworCXNlcV9wcmludGYobSwgIkNFWDNBIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNBKSk7CisJc2VxX3ByaW50ZihtLCAicmVxdWVzdHEgY291bnQ6ICVkXG4iLCB6Y3J5cHRfcmVxdWVzdHFfY291bnQoKSk7CisJc2VxX3ByaW50ZihtLCAicGVuZGluZ3EgY291bnQ6ICVkXG4iLCB6Y3J5cHRfcGVuZGluZ3FfY291bnQoKSk7CisJc2VxX3ByaW50ZihtLCAiVG90YWwgb3BlbiBoYW5kbGVzOiAlZFxuXG4iLAorCQkgICBhdG9taWNfcmVhZCgmemNyeXB0X29wZW5fY291bnQpKTsKIAl6Y3J5cHRfc3RhdHVzX21hc2sod29ya2FyZWEpOwotCWxlbiArPSBzcHJpbnRoeCgiT25saW5lIGRldmljZXM6IDE9UENJQ0EgMj1QQ0lDQyAzPVBDSVhDQyhNQ0wyKSAiCi0JCQkiND1QQ0lYQ0MoTUNMMykgNT1DRVgyQyA2PUNFWDJBIDc9Q0VYM0MgOD1DRVgzQSIsCi0JCQlyZXNwX2J1ZmYrbGVuLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CisJc3ByaW50aHgoIk9ubGluZSBkZXZpY2VzOiAxPVBDSUNBIDI9UENJQ0MgMz1QQ0lYQ0MoTUNMMikgIgorCQkgIjQ9UENJWENDKE1DTDMpIDU9Q0VYMkMgNj1DRVgyQSA3PUNFWDNDIDg9Q0VYM0EiLAorCQkgbSwgd29ya2FyZWEsIEFQX0RFVklDRVMpOwogCXpjcnlwdF9xZGVwdGhfbWFzayh3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4KCJXYWl0aW5nIHdvcmsgZWxlbWVudCBjb3VudHMiLAotCQkJcmVzcF9idWZmK2xlbiwgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXNwcmludGh4KCJXYWl0aW5nIHdvcmsgZWxlbWVudCBjb3VudHMiLCBtLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CiAJemNyeXB0X3BlcmRldl9yZXFjbnQoKGludCAqKSB3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4NCgiUGVyLWRldmljZSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3QgY291bnRzIiwKLQkJCSByZXNwX2J1ZmYrbGVuLCh1bnNpZ25lZCBpbnQgKikgd29ya2FyZWEsIEFQX0RFVklDRVMpOwotCSplb2YgPSAxOwotCW1lbXNldCgodm9pZCAqKSB3b3JrYXJlYSwgMHgwMCwgQVBfREVWSUNFUyAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKLQlyZXR1cm4gbGVuOworCXNwcmludGh4NCgiUGVyLWRldmljZSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3QgY291bnRzIiwKKwkJICBtLCAodW5zaWduZWQgaW50ICopIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6Y3J5cHRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB6Y3J5cHRfcHJvY19zaG93LCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgemNyeXB0X2Rpc2FibGVfY2FyZChpbnQgaW5kZXgpCkBAIC0xMDYxLDExICsxMDQxLDExIEBACiAJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgemNyeXB0X3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgemNyeXB0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJdW5zaWduZWQgY2hhciAqbGJ1ZiwgKnB0cjsKLQl1bnNpZ25lZCBsb25nIGxvY2FsX2NvdW50OworCXNpemVfdCBsb2NhbF9jb3VudDsKIAlpbnQgajsKIAogCWlmIChjb3VudCA8PSAwKQpAQCAtMTExNSw2ICsxMDk1LDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6Y3J5cHRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB6Y3J5cHRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHpjcnlwdF9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIGludCB6Y3J5cHRfcm5nX2RldmljZV9jb3VudDsKIHN0YXRpYyB1MzIgKnpjcnlwdF9ybmdfYnVmZmVyOwogc3RhdGljIGludCB6Y3J5cHRfcm5nX2J1ZmZlcl9pbmRleDsKQEAgLTExOTcsMTQgKzExODYsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBTZXQgdXAgdGhlIHByb2MgZmlsZSBzeXN0ZW0gKi8KLQl6Y3J5cHRfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVyL3o5MGNyeXB0IiwgMDY0NCwgTlVMTCk7CisJemNyeXB0X2VudHJ5ID0gcHJvY19jcmVhdGUoImRyaXZlci96OTBjcnlwdCIsIDA2NDQsIE5VTEwsICZ6Y3J5cHRfcHJvY19mb3BzKTsKIAlpZiAoIXpjcnlwdF9lbnRyeSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X21pc2M7CiAJfQotCXpjcnlwdF9lbnRyeS0+ZGF0YSA9IE5VTEw7Ci0JemNyeXB0X2VudHJ5LT5yZWFkX3Byb2MgPSB6Y3J5cHRfc3RhdHVzX3JlYWQ7Ci0JemNyeXB0X2VudHJ5LT53cml0ZV9wcm9jID0gemNyeXB0X3N0YXR1c193cml0ZTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCmluZGV4IDI5MzBmYzcuLmIyZmM0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCkBAIC0zNDAsMTEgKzM0MCwxMSBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGUgTFNCIG1pZ2h0IGJlIG92ZXJsb2FkZWQsIHdlIGhhdmUgdG8gbWFzayBpdCAqLwotCXZxID0gKHN0cnVjdCB2aXJ0cXVldWUgKikgKCgqKGxvbmcgKikgX19MQ19QRkFVTFRfSU5UUEFSTSkgJiB+MVVMKTsKKwl2cSA9IChzdHJ1Y3QgdmlydHF1ZXVlICopKFMzOTBfbG93Y29yZS5leHRfcGFyYW1zMiAmIH4xVUwpOwogCiAJLyogV2UgdXNlIHRoZSBMU0Igb2YgZXh0cGFyYW0sIHRvIGRlY2lkZSwgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgYSBjb25maWcKIAkgKiBjaGFuZ2Ugb3IgYSAic3RhbmRhcmQiIGludGVycnVwdCAqLwotCWNvbmZpZ19jaGFuZ2VkID0gICgqKGludCAqKSAgX19MQ19FWFRfUEFSQU1TICYgMSk7CisJY29uZmlnX2NoYW5nZWQgPSBTMzkwX2xvd2NvcmUuZXh0X3BhcmFtcyAmIDE7CiAKIAlpZiAoY29uZmlnX2NoYW5nZWQpIHsKIAkJc3RydWN0IHZpcnRpb19kcml2ZXIgKmRydjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IGIyMzI2OTMuLmEzYWM0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtNjQ5LDYgKzY0OSw3IEBACiAJaW50IHBlcmZvcm1hbmNlX3N0YXRzOwogCWludCByeF9zZ19jYjsKIAllbnVtIHFldGhfaXBhX2lzb2xhdGlvbl9tb2RlcyBpc29sYXRpb247CisJaW50IHNuaWZmZXI7CiB9OwogCiAvKgpAQCAtNzM3LDYgKzczOCw3IEBACiAJc3RydWN0IHFldGhfZGlzY2lwbGluZSBkaXNjaXBsaW5lOwogCWF0b21pY190IGZvcmNlX2FsbG9jX3NrYjsKIAlzdHJ1Y3Qgc2VydmljZV9sZXZlbCBxZXRoX3NlcnZpY2VfbGV2ZWw7CisJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWQ7CiB9OwogCiBzdHJ1Y3QgcWV0aF9jYXJkX2xpc3Rfc3RydWN0IHsKQEAgLTgxMSw3ICs4MTMsOCBAQAogc3RydWN0IHFldGhfY21kX2J1ZmZlciAqcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihzdHJ1Y3QgcWV0aF9jYXJkICosCiAJCQllbnVtIHFldGhfaXBhX2NtZHMsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zKTsKIGludCBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICopOwotaW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFkaW9fYnVmZmVyICosIHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK2ludCBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFkaW9fYnVmZmVyICosCisJCXVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKIHZvaWQgcWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIoc3RydWN0IHFldGhfY2FyZCAqLCBpbnQpOwogc3RydWN0IHNrX2J1ZmYgKnFldGhfY29yZV9nZXRfbmV4dF9za2Ioc3RydWN0IHFldGhfY2FyZCAqLAogCQlzdHJ1Y3QgcWRpb19idWZmZXIgKiwgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKiosIGludCAqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IGQzNDgwNGQuLmZhOGE1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTI2OSw2ICsyNjksNyBAQAogCWNhcmQtPnFkaW8uaW5pdF9wb29sLmJ1Zl9jb3VudCA9IGJ1ZmNudDsKIAlyZXR1cm4gcWV0aF9hbGxvY19idWZmZXJfcG9vbChjYXJkKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcmVhbGxvY19idWZmZXJfcG9vbCk7CiAKIHN0YXRpYyBpbnQgcWV0aF9pc3N1ZV9uZXh0X3JlYWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKQEAgLTM1MCw4ICszNTEsMTAgQEAKIAlpZiAoSVNfSVBBKGlvYi0+ZGF0YSkpIHsKIAkJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgUERVX0VOQ0FQU1VMQVRJT04oaW9iLT5kYXRhKTsKIAkJaWYgKElTX0lQQV9SRVBMWShjbWQpKSB7Ci0JCQlpZiAoY21kLT5oZHIuY29tbWFuZCA8IElQQV9DTURfU0VUQ0NJRCB8fAotCQkJICAgIGNtZC0+aGRyLmNvbW1hbmQgPiBJUEFfQ01EX01PRENDSUQpCisJCQlpZiAoY21kLT5oZHIuY29tbWFuZCAhPSBJUEFfQ01EX1NFVENDSUQgJiYKKwkJCSAgICBjbWQtPmhkci5jb21tYW5kICE9IElQQV9DTURfREVMQ0NJRCAmJgorCQkJICAgIGNtZC0+aGRyLmNvbW1hbmQgIT0gSVBBX0NNRF9NT0RDQ0lEICYmCisJCQkgICAgY21kLT5oZHIuY29tbWFuZCAhPSBJUEFfQ01EX1NFVF9ESUFHX0FTUykKIAkJCQlxZXRoX2lzc3VlX2lwYV9tc2coY21kLAogCQkJCQkJY21kLT5oZHIucmV0dXJuX2NvZGUsIGNhcmQpOwogCQkJcmV0dXJuIGNtZDsKQEAgLTExMDAsMTEgKzExMDMsNiBAQAogCWNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgPSAwOwogCUlOSVRfV09SSygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyLCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5pcF9saXN0KTsKLQljYXJkLT5pcF90YmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhcmQtPmlwX3RiZF9saXN0KSB7Ci0JCVFFVEhfREJGX1RFWFQoU0VUVVAsIDAsICJpcHRiZG5vbSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJSU5JVF9MSVNUX0hFQUQoY2FyZC0+aXBfdGJkX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jbWRfd2FpdGVyX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPndhaXRfcSk7CkBAIC0xMTM4LDIxICsxMTM2LDMwIEBACiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImFsbG9jY3JkIik7CiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2NhcmQpLCBHRlBfRE1BfEdGUF9LRVJORUwpOwogCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0OwogCVFFVEhfREJGX0hFWChTRVRVUCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQlpZiAocWV0aF9zZXR1cF9jaGFubmVsKCZjYXJkLT5yZWFkKSkgewotCQlrZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7CisJY2FyZC0+aXBfdGJkX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5pcF90YmRfbGlzdCkgeworCQlRRVRIX0RCRl9URVhUKFNFVFVQLCAwLCAiaXB0YmRub20iKTsKKwkJZ290byBvdXRfY2FyZDsKIAl9Ci0JaWYgKHFldGhfc2V0dXBfY2hhbm5lbCgmY2FyZC0+d3JpdGUpKSB7Ci0JCXFldGhfY2xlYW5fY2hhbm5lbCgmY2FyZC0+cmVhZCk7Ci0JCWtmcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKHFldGhfc2V0dXBfY2hhbm5lbCgmY2FyZC0+cmVhZCkpCisJCWdvdG8gb3V0X2lwOworCWlmIChxZXRoX3NldHVwX2NoYW5uZWwoJmNhcmQtPndyaXRlKSkKKwkJZ290byBvdXRfY2hhbm5lbDsKIAljYXJkLT5vcHRpb25zLmxheWVyMiA9IC0xOwogCWNhcmQtPnFldGhfc2VydmljZV9sZXZlbC5zZXFfcHJpbnQgPSBxZXRoX2NvcmVfc2xfcHJpbnQ7CiAJcmVnaXN0ZXJfc2VydmljZV9sZXZlbCgmY2FyZC0+cWV0aF9zZXJ2aWNlX2xldmVsKTsKIAlyZXR1cm4gY2FyZDsKKworb3V0X2NoYW5uZWw6CisJcWV0aF9jbGVhbl9jaGFubmVsKCZjYXJkLT5yZWFkKTsKK291dF9pcDoKKwlrZnJlZShjYXJkLT5pcF90YmRfbGlzdCk7CitvdXRfY2FyZDoKKwlrZnJlZShjYXJkKTsKK291dDoKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBxZXRoX2RldGVybWluZV9jYXJkX3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKQEAgLTEzNTUsMjYgKzEzNjIsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHFldGhfZ2V0X3VuaXRhZGRyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCitzdGF0aWMgdm9pZCBxZXRoX2NvbmZpZ3VyZV91bml0YWRkcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBjaGFyICpwcmNkKQogewotCWludCBsZW5ndGg7Ci0JY2hhciAqcHJjZDsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZ2V0dW5pdCIpOwotCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAotCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiY2ZndW5pdCIpOwogCWNhcmQtPmluZm8uY2hwaWQgPSBwcmNkWzMwXTsKIAljYXJkLT5pbmZvLnVuaXRfYWRkcjIgPSBwcmNkWzMxXTsKIAljYXJkLT5pbmZvLmN1bGEgPSBwcmNkWzYzXTsKIAljYXJkLT5pbmZvLmd1ZXN0bGFuID0gKChwcmNkWzB4MTBdID09IF9hc2NlYmNbJ1YnXSkgJiYKIAkJCSAgICAgICAocHJjZFsweDExXSA9PSBfYXNjZWJjWydNJ10pKTsKLQlrZnJlZShwcmNkKTsKLQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWV0aF9jb25maWd1cmVfYmxrdF9kZWZhdWx0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGNoYXIgKnByY2QpCit7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImNmZ2Jsa3QiKTsKKworCWlmIChwcmNkWzc0XSA9PSAweEYwICYmIHByY2RbNzVdID09IDB4RjAgJiYgcHJjZFs3Nl0gPT0gMHhGNSkgeworCQljYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCA9IDI1MDsKKwkJY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldCA9IDU7CisJCWNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXRfanVtYm8gPSAxNTsKKwl9IGVsc2UgeworCQljYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCA9IDA7CisJCWNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXQgPSAwOworCQljYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0X2p1bWJvID0gMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHFldGhfaW5pdF90b2tlbnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKQEAgLTI1NzMsOCArMjU4Myw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyk7CiAKLWludCBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKHN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmLCB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwKLQkJY29uc3QgY2hhciAqZGJmdGV4dCkKK2ludCBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmLAorCQl1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwgY29uc3QgY2hhciAqZGJmdGV4dCkKIHsKIAlpZiAocWRpb19lcnJvcikgewogCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCBkYmZ0ZXh0KTsKQEAgLTI1ODQsNyArMjU5NCwxMSBAQAogCQlRRVRIX0RCRl9URVhUXyhRRVJSLCAyLCAiIEYxND0lMDJYIiwKIAkJCSAgICAgICBidWYtPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZik7CiAJCVFFVEhfREJGX1RFWFRfKFFFUlIsIDIsICIgcWVycj0lWCIsIHFkaW9fZXJyb3IpOwotCQlyZXR1cm4gMTsKKwkJaWYgKChidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMikgeworCQkJY2FyZC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjY2Nyw3ICsyNjgxLDcgQEAKIAkJCXFkaW9fZXJyID0gMTsKIAkJfQogCX0KLQlxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLCBxZGlvX2VyciwgInFvdXRlcnIiKTsKKwlxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGNhcmQsIGJ1ZmZlci0+YnVmZmVyLCBxZGlvX2VyciwgInFvdXRlcnIiKTsKIAogCWlmICghcWRpb19lcnIpCiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTk9ORTsKQEAgLTM1MDksNiArMzUyMyw3IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAorCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJ0eHRpbWVvIik7CiAJY2FyZCA9IGRldi0+bWxfcHJpdjsKIAljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKIAlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwpAQCAtMzg0Nyw5ICszODYyLDcgQEAKIAogaW50IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewotCXN0cnVjdCBxZGlvX3NzcWRfZGVzYyAqc3NxZDsKIAlpbnQgcmV0cmllcyA9IDA7Ci0JaW50IG1wbm8gPSAwOwogCWludCByYzsKIAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJocmRzZXR1cCIpOwpAQCAtMzg4MiwzMSArMzg5NSw2IEBACiAJCWVsc2UKIAkJCWdvdG8gcmV0cnk7CiAJfQotCi0JcmMgPSBxZXRoX2dldF91bml0YWRkcihjYXJkKTsKLQlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlzc3FkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFkaW9fc3NxZF9kZXNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzc3FkKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKENBUkRfRERFVihjYXJkKSwgc3NxZCk7Ci0JaWYgKHJjID09IDApCi0JCW1wbm8gPSBzc3FkLT5wY250OwotCWtmcmVlKHNzcWQpOwotCi0JaWYgKG1wbm8pCi0JCW1wbm8gPSBtaW4obXBubyAtIDEsIFFFVEhfTUFYX1BPUlROTyk7Ci0JaWYgKGNhcmQtPmluZm8ucG9ydG5vID4gbXBubykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJEZXZpY2UgJXMgZG9lcyBub3Qgb2ZmZXIgcG9ydCBudW1iZXIgJWQiCi0JCQkiXG4uIiwgQ0FSRF9CVVNfSUQoY2FyZCksIGNhcmQtPmluZm8ucG9ydG5vKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CiAJcWV0aF9pbml0X3Rva2VucyhjYXJkKTsKIAlxZXRoX2luaXRfZnVuY19sZXZlbChjYXJkKTsKIAlyYyA9IHFldGhfaWR4X2FjdGl2YXRlX2NoYW5uZWwoJmNhcmQtPnJlYWQsIHFldGhfaWR4X3JlYWRfY2IpOwpAQCAtMzk5MCw3ICszOTc4LDcgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqZWxlbWVudCA9ICpfX2VsZW1lbnQ7CiAJaW50IG9mZnNldCA9ICpfX29mZnNldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQlpbnQgc2tiX2xlbjsKKwlpbnQgc2tiX2xlbiA9IDA7CiAJdm9pZCAqZGF0YV9wdHI7CiAJaW50IGRhdGFfbGVuOwogCWludCBoZWFkcm9vbSA9IDA7CkBAIC00MDA5LDIwICszOTk3LDI0IEBACiAJKmhkciA9IGVsZW1lbnQtPmFkZHIgKyBvZmZzZXQ7CiAKIAlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7Ci0JCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7Ci0JCQlza2JfbGVuID0gKCpoZHIpLT5oZHIub3NuLnBkdV9sZW5ndGg7Ci0JCQloZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOwotCQl9IGVsc2UgewotCQkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLmwyLnBrdF9sZW5ndGg7Ci0JCX0KLQl9IGVsc2UgeworCXN3aXRjaCAoKCpoZHIpLT5oZHIubDIuaWQpIHsKKwljYXNlIFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyOgorCQlza2JfbGVuID0gKCpoZHIpLT5oZHIubDIucGt0X2xlbmd0aDsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMzoKIAkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLmwzLmxlbmd0aDsKIAkJaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSB8fAogCQkgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0hTVFIpKQogCQkJaGVhZHJvb20gPSBUUl9ITEVOOwogCQllbHNlCiAJCQloZWFkcm9vbSA9IEVUSF9ITEVOOworCQlicmVhazsKKwljYXNlIFFFVEhfSEVBREVSX1RZUEVfT1NOOgorCQlza2JfbGVuID0gKCpoZHIpLT5oZHIub3NuLnBkdV9sZW5ndGg7CisJCWhlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmICghc2tiX2xlbikKQEAgLTQxNzcsNiArNDE2OSw0MSBAQAogCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHFldGhfZGV0ZXJtaW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKwlpbnQgbGVuZ3RoOworCWNoYXIgKnByY2Q7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGV0Y2FwYWIiKTsKKwlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX0RERVYoY2FyZCkpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgcWV0aF9yZWFkX2NvbmZfZGF0YSByZXR1cm5lZCAlaVxuIiwKKwkJCWRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQlnb3RvIG91dF9vZmZsaW5lOworCX0KKwlxZXRoX2NvbmZpZ3VyZV91bml0YWRkcihjYXJkLCBwcmNkKTsKKwlxZXRoX2NvbmZpZ3VyZV9ibGt0X2RlZmF1bHQoY2FyZCwgcHJjZCk7CisJa2ZyZWUocHJjZCk7CisKKwlyYyA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksICZjYXJkLT5zc3FkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCitvdXRfb2ZmbGluZToKKwljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7CitvdXQ6CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHFldGhfY29yZV9wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwpAQCAtNDI0Miw2ICs0MjY5LDggQEAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJnFldGhfY29yZV9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGlzdCwgJnFldGhfY29yZV9jYXJkX2xpc3QubGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnFldGhfY29yZV9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7CisKKwlxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoY2FyZCk7CiAJcmV0dXJuIDA7CiAKIGVycl9jYXJkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAppbmRleCAxYmE1MTE1Li4xMDRhMzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaApAQCAtMTU2LDYgKzE1Niw4IEBACiAJSVBBX1JDX0lQX1RBQkxFX0ZVTEwJCT0gMHgwMDAyLAogCUlQQV9SQ19VTktOT1dOX0VSUk9SCQk9IDB4MDAwMywKIAlJUEFfUkNfVU5TVVBQT1JURURfQ09NTUFORAk9IDB4MDAwNCwKKwlJUEFfUkNfVFJBQ0VfQUxSRUFEWV9BQ1RJVkUJPSAweDAwMDUsCisJSVBBX1JDX0lOVkFMSURfRk9STUFUCQk9IDB4MDAwNiwKIAlJUEFfUkNfRFVQX0lQVjZfUkVNT1RFCQk9IDB4MDAwOCwKIAlJUEFfUkNfRFVQX0lQVjZfSE9NRQkJPSAweDAwMTAsCiAJSVBBX1JDX1VOUkVHSVNURVJFRF9BRERSCT0gMHgwMDExLApAQCAtMTk2LDYgKzE5OCwxMSBAQAogCUlQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04yCT0gMHhmMDAxLAogCUlQQV9SQ19GRkZGCQkJPSAweGZmZmYKIH07CisvKiBmb3IgREVMSVAgKi8KKyNkZWZpbmUgSVBBX1JDX0lQX0FERFJFU1NfTk9UX0RFRklORUQJSVBBX1JDX1BSSU1BUllfQUxSRUFEWV9ERUZJTkVECisvKiBmb3IgU0VUX0RJQUdOT1NUSUNfQVNTSVNUICovCisjZGVmaW5lIElQQV9SQ19JTlZBTElEX1NVQkNNRAkJSVBBX1JDX0lQX1RBQkxFX0ZVTEwKKyNkZWZpbmUgSVBBX1JDX0hBUkRXQVJFX0FVVEhfRVJST1IJSVBBX1JDX1VOS05PV05fRVJST1IKIAogLyogSVBBIGZ1bmN0aW9uIGZsYWdzOyBlYWNoIGZsYWcgbWFya3MgYXZhaWxhYmlsaXR5IG9mIHJlc3BlY3RpdmUgZnVuY3Rpb24gKi8KIGVudW0gcWV0aF9pcGFfZnVuY3MgewpAQCAtMjQ2LDYgKzI1Myw3IEBACiAJSVBBX1NFVEFEUF9TRVRfU05NUF9DT05UUk9MCQk9IDB4MDAwMDAyMDBMLAogCUlQQV9TRVRBRFBfUVVFUllfQ0FSRF9JTkZPCQk9IDB4MDAwMDA0MDBMLAogCUlQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERQkJPSAweDAwMDAwODAwTCwKKwlJUEFfU0VUQURQX1NFVF9ESUFHX0FTU0lTVAkJPSAweDAwMDAyMDAwTCwKIAlJUEFfU0VUQURQX1NFVF9BQ0NFU1NfQ09OVFJPTAkJPSAweDAwMDEwMDAwTCwKIH07CiBlbnVtIHFldGhfaXBhX21hY19vcHMgewpAQCAtNDI0LDYgKzQzMiw0MCBAQAogCV9fdTggdW5pcXVlX2lkWzhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qIFNFVCBESUFHTk9TVElDIEFTU0lTVCBJUEEgQ29tbWFuZDoJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2VudW0gcWV0aF9kaWFnc19jbWRzIHsKKwlRRVRIX0RJQUdTX0NNRF9RVUVSWQk9IDB4MDAwMSwKKwlRRVRIX0RJQUdTX0NNRF9UUkFQCT0gMHgwMDAyLAorCVFFVEhfRElBR1NfQ01EX1RSQUNFCT0gMHgwMDA0LAorCVFFVEhfRElBR1NfQ01EX05PTE9HCT0gMHgwMDA4LAorCVFFVEhfRElBR1NfQ01EX0RVTVAJPSAweDAwMTAsCit9OworCitlbnVtIHFldGhfZGlhZ3NfdHJhY2VfdHlwZXMgeworCVFFVEhfRElBR1NfVFlQRV9ISVBFUlNPQ0tFVAk9IDB4MDIsCit9OworCitlbnVtIHFldGhfZGlhZ3NfdHJhY2VfY21kcyB7CisJUUVUSF9ESUFHU19DTURfVFJBQ0VfRU5BQkxFCT0gMHgwMDAxLAorCVFFVEhfRElBR1NfQ01EX1RSQUNFX0RJU0FCTEUJPSAweDAwMDIsCisJUUVUSF9ESUFHU19DTURfVFJBQ0VfTU9ESUZZCT0gMHgwMDA0LAorCVFFVEhfRElBR1NfQ01EX1RSQUNFX1JFUExBQ0UJPSAweDAwMDgsCisJUUVUSF9ESUFHU19DTURfVFJBQ0VfUVVFUlkJPSAweDAwMTAsCit9OworCitzdHJ1Y3QgcWV0aF9pcGFjbWRfZGlhZ2FzcyB7CisJX191MzIgIGhvc3RfdG9kMjsKKwlfX3UzMjozMjsKKwlfX3UxNiAgc3ViY21kX2xlbjsKKwlfX3UxNjoxNjsKKwlfX3UzMiAgc3ViY21kOworCV9fdTggICB0eXBlOworCV9fdTggICBhY3Rpb247CisJX191MTYgIG9wdGlvbnM7CisJX191MzI6MzI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogSGVhZGVyIGZvciBlYWNoIElQQSBjb21tYW5kICovCiBzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyIHsKIAlfX3U4ICAgY29tbWFuZDsKQEAgLTQ1Miw2ICs0OTQsNyBAQAogCQlzdHJ1Y3QgcWV0aF9jcmVhdGVfZGVzdHJveV9hZGRyZXNzCWNyZWF0ZV9kZXN0cm95X2FkZHI7CiAJCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcwkJc2V0YWRhcHRlcnBhcm1zOwogCQlzdHJ1Y3QgcWV0aF9zZXRfcm91dGluZwkJCXNldHJ0ZzsKKwkJc3RydWN0IHFldGhfaXBhY21kX2RpYWdhc3MJCWRpYWdhc3M7CiAJfSBkYXRhOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTQ2OSw3ICs1MTIsNiBAQAogCVFFVEhfSVBBX0FSUF9SQ19RX05PX0RBVEEgICAgPSAweDAwMDgsCiB9OwogCi0KIGV4dGVybiBjaGFyICpxZXRoX2dldF9pcGFfbXNnKGVudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHJjKTsKIGV4dGVybiBjaGFyICpxZXRoX2dldF9pcGFfY21kX25hbWUoZW51bSBxZXRoX2lwYV9jbWRzIGNtZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKaW5kZXggOWZmMmIzNi4uODhhZTQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAljaGFyICp0bXA7Ci0JdW5zaWduZWQgaW50IHBvcnRubzsKKwl1bnNpZ25lZCBpbnQgcG9ydG5vLCBsaW1pdDsKIAogCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjgsOSArMTI4LDExIEBACiAJCXJldHVybiAtRVBFUk07CiAKIAlwb3J0bm8gPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKLQlpZiAocG9ydG5vID4gUUVUSF9NQVhfUE9SVE5PKSB7CisJaWYgKHBvcnRubyA+IFFFVEhfTUFYX1BPUlROTykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWxpbWl0ID0gKGNhcmQtPnNzcWQucGNudCA/IGNhcmQtPnNzcWQucGNudCAtIDEgOiBjYXJkLT5zc3FkLnBjbnQpOworCWlmIChwb3J0bm8gPiBsaW1pdCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXJkLT5pbmZvLnBvcnRubyA9IHBvcnRubzsKIAlyZXR1cm4gY291bnQ7CkBAIC01MzcsNyArNTM5LDcgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zdG9yZShjYXJkLCBidWYsIGNvdW50LAotCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCwgMTAwMCk7CisJCQkJICAgJmNhcmQtPmluZm8uYmxrdC50aW1lX3RvdGFsLCA1MDAwKTsKIH0KIAogCkBAIC01NTksNyArNTYxLDcgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zdG9yZShjYXJkLCBidWYsIGNvdW50LAotCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0LCAxMDApOworCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0LCAxMDAwKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGludGVyLCAwNjQ0LCBxZXRoX2Rldl9ibGt0X2ludGVyX3Nob3csCkBAIC01ODAsNyArNTgyLDcgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zdG9yZShjYXJkLCBidWYsIGNvdW50LAotCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0X2p1bWJvLCAxMDApOworCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0X2p1bWJvLCAxMDAwKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGludGVyX2p1bWJvLCAwNjQ0LCBxZXRoX2Rldl9ibGt0X2ludGVyX2p1bWJvX3Nob3csCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAwYjc2MzM5Li41MWZkZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTQ4NiwyMiArNDg2LDE0IEBACiAJCWNhc2UgSVBBX1JDX0wyX0RVUF9NQUM6CiAJCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKLQkJCQkiTUFDIGFkZHJlc3MgIgotCQkJCSIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCAiCi0JCQkJImFscmVhZHkgZXhpc3RzXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbMV0sCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclsyXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclszXSwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzRdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzVdKTsKKwkJCQkiTUFDIGFkZHJlc3MgJXBNIGFscmVhZHkgZXhpc3RzXG4iLAorCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfQVVUSF9CWV9IWVA6CiAJCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfQVVUSF9CWV9BRFA6CiAJCQlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJCSJNQUMgYWRkcmVzcyAiCi0JCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKLQkJCQkiaXMgbm90IGF1dGhvcml6ZWRcbiIsCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclswXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclsxXSwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzJdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzNdLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbNF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbNV0pOworCQkJCSJNQUMgYWRkcmVzcyAlcE0gaXMgbm90IGF1dGhvcml6ZWRcbiIsCisJCQkJY2FyZC0+ZGV2LT5kZXZfYWRkcik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtNTEyLDEyICs1MDQsOCBAQAogCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwgY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsCiAJCSAgICAgICBPU0FfQUREUl9MRU4pOwogCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJIk1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKLQkJCSJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCi0JCQljYXJkLT5kZXYtPmRldl9hZGRyWzBdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzFdLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclsyXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclszXSwKLQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbNF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbNV0sCi0JCQljYXJkLT5kZXYtPm5hbWUpOworCQkJIk1BQyBhZGRyZXNzICVwTSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCisJCQljYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5kZXYtPm5hbWUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYzNCw3ICs2MjIsNyBAQAogCWZvciAoZG0gPSBkZXYtPm1jX2xpc3Q7IGRtOyBkbSA9IGRtLT5uZXh0KQogCQlxZXRoX2wyX2FkZF9tYyhjYXJkLCBkbS0+ZGFfYWRkciwgMCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KQorCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpCiAJCXFldGhfbDJfYWRkX21jKGNhcmQsIGhhLT5hZGRyLCAxKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5tY2xvY2spOwpAQCAtNzgxLDcgKzc2OSw4IEBACiAJCWluZGV4ID0gaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJCWJ1ZmZlciA9ICZjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaW5kZXhdOwogCQlpZiAoIShxZGlvX2VyciAmJgotCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLCBxZGlvX2VyciwgInFpbmVyciIpKSkKKwkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhjYXJkLCBidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsCisJCQkJCSAgICAgInFpbmVyciIpKSkKIAkJCXFldGhfbDJfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihjYXJkLCBidWZmZXIsIGluZGV4KTsKIAkJLyogY2xlYXIgYnVmZmVyIGFuZCBnaXZlIGJhY2sgdG8gaGFyZHdhcmUgKi8KIAkJcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCwgYnVmZmVyLT5wb29sX2VudHJ5KTsKQEAgLTkzOCw3ICs5MjcsNiBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzZXRvbmxpbiIpOwogCVFFVEhfREJGX0hFWChTRVRVUCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKIAotCXFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFELCAxKTsKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKIAlyYyA9IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChjYXJkKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKaW5kZXggMzIxOTg4Zi4uODQ0N2QyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKQEAgLTEzLDYgKzEzLDggQEAKIAogI2luY2x1ZGUgInFldGhfY29yZS5oIgogCisjZGVmaW5lIFFFVEhfU05JRkZfQVZBSUwJMHgwMDA4CisKIHN0cnVjdCBxZXRoX2lwYWRkciB7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKIAllbnVtIHFldGhfaXBfdHlwZXMgdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IGZkMWI2ZWQuLjU0NzU4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtMjQyLDYgKzI0Miw4IEBACiAJc3RydWN0IHFldGhfaXBhZGRyICp0bXAsICp0OwogCWludCBmb3VuZCA9IDA7CiAKKwlpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyKQorCQlyZXR1cm4gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wLCB0LCBjYXJkLT5pcF90YmRfbGlzdCwgZW50cnkpIHsKIAkJaWYgKChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9ERUxfQUxMX01DKSAmJgogCQkgICAgKHRtcC0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykpCkBAIC00NTcsNiArNDU5LDggQEAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2RpcGxpc3QiKTsKIAlRRVRIX0RCRl9IRVgoVFJBQ0UsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKKwlpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyKQorCQlyZXR1cm47CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAl0YmRfbGlzdCA9IGNhcmQtPmlwX3RiZF9saXN0OwogCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9BVE9NSUMpOwpAQCAtNDk1LDcgKzQ5OSw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJCQlyYyA9IHFldGhfbDNfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJCWlmICghcmMgfHwgKHJjID09IElQQV9SQ19QUklNQVJZX0FMUkVBRFlfREVGSU5FRCkpCisJCQlpZiAoIXJjIHx8IChyYyA9PSBJUEFfUkNfSVBfQUREUkVTU19OT1RfREVGSU5FRCkpCiAJCQkJa2ZyZWUoYWRkcik7CiAJCQllbHNlCiAJCQkJbGlzdF9hZGRfdGFpbCgmYWRkci0+ZW50cnksICZjYXJkLT5pcF9saXN0KTsKQEAgLTUxMyw2ICs1MTcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiY2xlYXJpcCIpOworCWlmIChyZWNvdmVyICYmIGNhcmQtPm9wdGlvbnMuc25pZmZlcikKKwkJcmV0dXJuOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJLyogY2xlYXIgdG9kbyBsaXN0ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRtcCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CkBAIC0xNjc0LDYgKzE2ODAsNzYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQKK3FldGhfZGlhZ3NfdHJhY2VfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kCSAgICpjbWQ7CisJX191MTYgcmM7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGlhc3RyY2IiKTsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopZGF0YTsKKwlyYyA9IGNtZC0+aGRyLnJldHVybl9jb2RlOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgImR4dGVyJXgiLCByYyk7CisJCWlmIChjbWQtPmRhdGEuZGlhZ2Fzcy5hY3Rpb24gPT0gUUVUSF9ESUFHU19DTURfVFJBQ0VfRU5BQkxFKSB7CisJCQlzd2l0Y2ggKHJjKSB7CisJCQljYXNlIElQQV9SQ19IQVJEV0FSRV9BVVRIX0VSUk9SOgorCQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsICJUaGUgZGV2aWNlIGlzIG5vdCAiCisJCQkJCSJhdXRob3JpemVkIHRvIHJ1biBhcyBhIEhpcGVyU29ja2V0cyAiCisJCQkJCSJuZXR3b3JrIHRyYWZmaWMgYW5hbHl6ZXJcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBJUEFfUkNfVFJBQ0VfQUxSRUFEWV9BQ1RJVkU6CisJCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwgIkEgSGlwZXJTb2NrZXRzICIKKwkJCQkJIm5ldHdvcmsgdHJhZmZpYyBhbmFseXplciBpcyBhbHJlYWR5ICIKKwkJCQkJImFjdGl2ZSBpbiB0aGUgSGlwZXJTb2NrZXRzIExBTlxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY21kLT5kYXRhLmRpYWdhc3MuYWN0aW9uKSB7CisJY2FzZSBRRVRIX0RJQUdTX0NNRF9UUkFDRV9RVUVSWToKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0RJQUdTX0NNRF9UUkFDRV9ESVNBQkxFOgorCQljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOworCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LCAiVGhlIEhpcGVyU29ja2V0cyBuZXR3b3JrIHRyYWZmaWMgIgorCQkJImFuYWx5emVyIGlzIGRlYWN0aXZhdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0RJQUdTX0NNRF9UUkFDRV9FTkFCTEU6CisJCWNhcmQtPmluZm8ucHJvbWlzY19tb2RlID0gU0VUX1BST01JU0NfTU9ERV9PTjsKKwkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwgIlRoZSBIaXBlclNvY2tldHMgbmV0d29yayB0cmFmZmljICIKKwkJCSJhbmFseXplciBpcyBhY3RpdmF0ZWRcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJVbmtub3duIHNuaWZmZXIgYWN0aW9uICgweCUwNHgpIG9uICVzXG4iLAorCQkJY21kLT5kYXRhLmRpYWdhc3MuYWN0aW9uLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWV0aF9kaWFnc190cmFjZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfZGlhZ3NfdHJhY2VfY21kcyBkaWFnc19jbWQpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgICAgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkaWFndHJhYyIpOworCisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSAxNjsKKwljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9UUkFDRTsKKwljbWQtPmRhdGEuZGlhZ2Fzcy50eXBlID0gUUVUSF9ESUFHU19UWVBFX0hJUEVSU09DS0VUOworCWNtZC0+ZGF0YS5kaWFnYXNzLmFjdGlvbiA9IGRpYWdzX2NtZDsKKwlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX2RpYWdzX3RyYWNlX2NiLCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgcWV0aF9sM19nZXRfbWFjX2Zvcl9pcG0oX191MzIgaXBtLCBjaGFyICptYWMsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE5NTEsNyArMjAyNywxMCBAQAogCQljYXNlIFFFVEhfQ0FTVF9BTllDQVNUOgogCQljYXNlIFFFVEhfQ0FTVF9OT0NBU1Q6CiAJCWRlZmF1bHQ6Ci0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyKQorCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJZWxzZQorCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAkJCW1lbWNweSh0Z19hZGRyLCBjYXJkLT5kZXYtPmRldl9hZGRyLAogCQkJCWNhcmQtPmRldi0+YWRkcl9sZW4pOwogCQl9CkBAIC0yMDA3LDcgKzIwODYsNiBAQAogCWludCBvZmZzZXQ7CiAJX191MTYgdmxhbl90YWcgPSAwOwogCXVuc2lnbmVkIGludCBsZW47Ci0KIAkvKiBnZXQgZmlyc3QgZWxlbWVudCBvZiBjdXJyZW50IGJ1ZmZlciAqLwogCWVsZW1lbnQgPSAoc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKikmYnVmLT5idWZmZXItPmVsZW1lbnRbMF07CiAJb2Zmc2V0ID0gMDsKQEAgLTIwMjYsNyArMjEwNCw3IEBACiAJCWNhc2UgUUVUSF9IRUFERVJfVFlQRV9MQVlFUjM6CiAJCQl2bGFuX3RhZyA9IHFldGhfbDNfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwogCQkJbGVuID0gc2tiLT5sZW47Ci0JCQlpZiAodmxhbl90YWcpCisJCQlpZiAodmxhbl90YWcgJiYgIWNhcmQtPm9wdGlvbnMuc25pZmZlcikKIAkJCQlpZiAoY2FyZC0+dmxhbmdycCkKIAkJCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgY2FyZC0+dmxhbmdycCwKIAkJCQkJCXZsYW5fdGFnKTsKQEAgLTIwMzcsNiArMjExNSwxNiBAQAogCQkJZWxzZQogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQlicmVhazsKKwkJY2FzZSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMjogLyogZm9yIEhpcGVyU29ja2V0cyBzbmlmZmVyICovCisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IE5PX0NIRUNLU1VNTUlORykKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJZWxzZQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCWxlbiA9IHNrYi0+bGVuOworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJpbmJ1bmtubyIpOwpAQCAtMjExOCw2ICsyMjA2LDkgQEAKIAlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKIAlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgMCwgMSk7CisJaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlciAmJgorCSAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PTikpCisJCXFldGhfZGlhZ3NfdHJhY2UoY2FyZCwgUUVUSF9ESUFHU19DTURfVFJBQ0VfRElTQUJMRSk7CiAJaWYgKGNhcmQtPnJlYWQuc3RhdGUgPT0gQ0hfU1RBVEVfVVAgJiYKIAkgICAgY2FyZC0+d3JpdGUuc3RhdGUgPT0gQ0hfU1RBVEVfVVAgJiYKIAkgICAgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApKSB7CkBAIC0yMTYyLDYgKzIyNTMsMzYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qCisgKiB0ZXN0IGZvciBhbmQgU3dpdGNoIHByb21pc2N1b3VzIG1vZGUgKG9uIG9yIG9mZikKKyAqICBlaXRoZXIgZm9yIGd1ZXN0bGFuIG9yIEhpcGVyU29ja2V0IFNuaWZmZXIKKyAqLworc3RhdGljIHZvaWQKK3FldGhfbDNfaGFuZGxlX3Byb21pc2NfbW9kZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT5kZXY7CisKKwlpZiAoKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCisJICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PTikpIHx8CisJICAgICghKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKKwkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09GRikpKQorCQlyZXR1cm47CisKKwlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgewkJLyogR3Vlc3RsYW4gdHJhY2UgKi8KKwkJaWYgKHFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUpKQorCQkJcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKGNhcmQpOworCX0gZWxzZSBpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyICYmCS8qIEhpcGVyU29ja2V0cyB0cmFjZSAqLworCQkgICBxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfRElBR19BU1NJU1QpKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICIrcHJvbWlzYyIpOworCQkJcWV0aF9kaWFnc190cmFjZShjYXJkLCBRRVRIX0RJQUdTX0NNRF9UUkFDRV9FTkFCTEUpOworCQl9IGVsc2UgeworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgIi1wcm9taXNjIik7CisJCQlxZXRoX2RpYWdzX3RyYWNlKGNhcmQsIFFFVEhfRElBR1NfQ01EX1RSQUNFX0RJU0FCTEUpOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBxZXRoX2wzX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CkBAIC0yMTcwLDE1ICsyMjkxLDE3IEBACiAJaWYgKHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpICYmCiAJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSkKIAkJcmV0dXJuOwotCXFldGhfbDNfZGVsZXRlX21jX2FkZHJlc3NlcyhjYXJkKTsKLQlxZXRoX2wzX2FkZF9tdWx0aWNhc3RfaXB2NChjYXJkKTsKKwlpZiAoIWNhcmQtPm9wdGlvbnMuc25pZmZlcikgeworCQlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CisJCXFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY0KGNhcmQpOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQlxZXRoX2wzX2FkZF9tdWx0aWNhc3RfaXB2NihjYXJkKTsKKwkJcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjYoY2FyZCk7CiAjZW5kaWYKLQlxZXRoX2wzX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7Ci0JaWYgKCFxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFKSkKLQkJcmV0dXJuOwotCXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShjYXJkKTsKKwkJcWV0aF9sM19zZXRfaXBfYWRkcl9saXN0KGNhcmQpOworCQlpZiAoIXFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUpKQorCQkJcmV0dXJuOworCX0KKwlxZXRoX2wzX2hhbmRsZV9wcm9taXNjX21vZGUoY2FyZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpxZXRoX2wzX2FycF9nZXRfZXJyb3JfY2F1c2UoaW50ICpyYykKQEAgLTI3NzgsOCArMjkwMSw5IEBACiAJaW50IG5yX2ZyYWdzOwogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJgotCSAgICAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkgJiYKLQkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSkKKwkgICAgKCgoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkgJiYKKwkgICAgICAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpKSB8fAorCSAgICAgY2FyZC0+b3B0aW9ucy5zbmlmZmVyKSkKIAkJCWdvdG8gdHhfZHJvcDsKIAogCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgfHwgIWNhcmQtPmxhbl9vbmxpbmUpIHsKQEAgLTMxNTUsNyArMzI3OSw3IEBACiAJCWluZGV4ID0gaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJCWJ1ZmZlciA9ICZjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaW5kZXhdOwogCQlpZiAoIShxZGlvX2VyciAmJgotCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLAorCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGNhcmQsIGJ1ZmZlci0+YnVmZmVyLAogCQkJCQkgICAgIHFkaW9fZXJyLCAicWluZXJyIikpKQogCQkJcWV0aF9sM19wcm9jZXNzX2luYm91bmRfYnVmZmVyKGNhcmQsIGJ1ZmZlciwgaW5kZXgpOwogCQkvKiBjbGVhciBidWZmZXIgYW5kIGdpdmUgYmFjayB0byBoYXJkd2FyZSAqLwpAQCAtMzIxNCw4ICszMzM4LDYgQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0b25saW4iKTsKIAlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKLQlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCwgMSk7Ci0KIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKIAlyYyA9IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChjYXJkKTsKIAlpZiAocmMpIHsKQEAgLTMyNTAsMjAgKzMzNzIsMjIgQEAKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0gZWxzZQogCQljYXJkLT5sYW5fb25saW5lID0gMTsKLQlxZXRoX2wzX3NldF9sYXJnZV9zZW5kKGNhcmQsIGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCk7CiAKIAlyYyA9IHFldGhfbDNfc2V0YWRhcHRlcl9wYXJtcyhjYXJkKTsKIAlpZiAocmMpCiAJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOwotCXJjID0gcWV0aF9sM19zdGFydF9pcGFzc2lzdHMoY2FyZCk7Ci0JaWYgKHJjKQotCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKLQlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NChjYXJkKTsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOwotCXJjID0gcWV0aF9sM19zZXRyb3V0aW5nX3Y2KGNhcmQpOwotCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJaWYgKCFjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKKwkJcmMgPSBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhjYXJkKTsKKwkJaWYgKHJjKQorCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCXFldGhfbDNfc2V0X2xhcmdlX3NlbmQoY2FyZCwgY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKTsKKwkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CisJCWlmIChyYykKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCQlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NihjYXJkKTsKKwkJaWYgKHJjKQorCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJfQogCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAogCXJjID0gcWV0aF9pbml0X3FkaW9fcXVldWVzKGNhcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCmluZGV4IDMzNjBiMDkuLjNmMDhiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKQEAgLTMxOSw2ICszMTksNjEgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihjaGVja3N1bW1pbmcsIDA2NDQsIHFldGhfbDNfZGV2X2NoZWNrc3VtX3Nob3csCiAJCXFldGhfbDNfZGV2X2NoZWNrc3VtX3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfc25pZmZlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMuc25pZmZlciA/IDEgOiAwKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfc25pZmZlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDE2LCAmaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCQljYXJkLT5vcHRpb25zLnNuaWZmZXIgPSBpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksICZjYXJkLT5zc3FkKTsKKwkJaWYgKGNhcmQtPnNzcWQucWRpb2FjMiAmIFFFVEhfU05JRkZfQVZBSUwpIHsKKwkJCWNhcmQtPm9wdGlvbnMuc25pZmZlciA9IGk7CisJCQlpZiAoY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50ICE9CisJCQkJCVFFVEhfSU5fQlVGX0NPVU5UX01BWCkKKwkJCQlxZXRoX3JlYWxsb2NfYnVmZmVyX3Bvb2woY2FyZCwKKwkJCQkJUUVUSF9JTl9CVUZfQ09VTlRfTUFYKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJldHVybiAtRVBFUk07CisJZGVmYXVsdDogICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNuaWZmZXIsIDA2NDQsIHFldGhfbDNfZGV2X3NuaWZmZXJfc2hvdywKKwkJcWV0aF9sM19kZXZfc25pZmZlcl9zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2xhcmdlX3NlbmRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTM3Myw2ICs0MjgsNyBAQAogCSZkZXZfYXR0cl9icm9hZGNhc3RfbW9kZS5hdHRyLAogCSZkZXZfYXR0cl9jYW5vbmljYWxfbWFjYWRkci5hdHRyLAogCSZkZXZfYXR0cl9jaGVja3N1bW1pbmcuYXR0ciwKKwkmZGV2X2F0dHJfc25pZmZlci5hdHRyLAogCSZkZXZfYXR0cl9sYXJnZV9zZW5kLmF0dHIsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCA5ZDBjOTQxLi42NmQ2YzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogTW9kdWxlIGludGVyZmFjZSBhbmQgaGFuZGxpbmcgb2YgemZjcCBkYXRhIHN0cnVjdHVyZXMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAvKgpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9CVVNfSURfU0laRQkyMAogCkBAIC00OSwzNiArNTAsNiBAQAogCXJldHVybiBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCBzaXplLCByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSksIDAsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHpmY3BfcmVxbGlzdF9hbGxvYyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBpZHg7Ci0KLQlhZGFwdGVyLT5yZXFfbGlzdCA9IGtjYWxsb2MoUkVRVUVTVF9MSVNUX1NJWkUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5yZXFfbGlzdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFJFUVVFU1RfTElTVF9TSVpFOyBpZHgrKykKLQkJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHpmY3BfcmVxbGlzdF9pc2VtcHR5IC0gaXMgdGhlIHJlcXVlc3QgbGlzdCBlbXB0eQotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgotICoKLSAqIFJldHVybnM6IHRydWUgaWYgbGlzdCBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlCi0gKi8KLWludCB6ZmNwX3JlcWxpc3RfaXNlbXB0eShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFJFUVVFU1RfTElTVF9TSVpFOyBpZHgrKykKLQkJaWYgKCFsaXN0X2VtcHR5KCZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKSkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoY2hhciAqYnVzaWQsIHU2NCB3d3BuLCB1NjQgbHVuKQogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwpAQCAtMTEwLDcgKzgxLDcgQEAKIAlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCiBvdXRfdW5pdDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiBvdXRfcG9ydDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIG91dF9jY3dfZGV2aWNlOgpAQCAtMjU1LDcgKzIyNiw3IEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJnBvcnQtPnVuaXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh1bml0LCAmcG9ydC0+dW5pdF9saXN0LCBsaXN0KQogCQlpZiAodW5pdC0+ZmNwX2x1biA9PSBmY3BfbHVuKSB7Ci0JCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSkpCisJCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPmRldikpCiAJCQkJdW5pdCA9IE5VTEw7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT51bml0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIHVuaXQ7CkBAIC0yODAsNyArMjUxLDcgQEAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3QsIGxpc3QpCiAJCWlmIChwb3J0LT53d3BuID09IHd3cG4pIHsKLQkJCWlmICghZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkKKwkJCWlmICghZ2V0X2RldmljZSgmcG9ydC0+ZGV2KSkKIAkJCQlwb3J0ID0gTlVMTDsKIAkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gcG9ydDsKQEAgLTI5OCwxMCArMjY5LDkgQEAKICAqLwogc3RhdGljIHZvaWQgemZjcF91bml0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF91bml0LAotCQkJCQkgICAgICBzeXNmc19kZXZpY2UpOworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF91bml0LCBkZXYpOwogCi0JcHV0X2RldmljZSgmdW5pdC0+cG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5wb3J0LT5kZXYpOwogCWtmcmVlKHVuaXQpOwogfQogCkBAIC0zMTgsMTEgKzI4OCwxMSBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl1bml0ID0gemZjcF9nZXRfdW5pdF9ieV9sdW4ocG9ydCwgZmNwX2x1bik7CiAJaWYgKHVuaXQpIHsKLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJcmV0dmFsID0gLUVFWElTVDsKIAkJZ290byBlcnJfb3V0OwogCX0KQEAgLTMzMywxMCArMzAzLDEwIEBACiAKIAl1bml0LT5wb3J0ID0gcG9ydDsKIAl1bml0LT5mY3BfbHVuID0gZmNwX2x1bjsKLQl1bml0LT5zeXNmc19kZXZpY2UucGFyZW50ID0gJnBvcnQtPnN5c2ZzX2RldmljZTsKLQl1bml0LT5zeXNmc19kZXZpY2UucmVsZWFzZSA9IHpmY3BfdW5pdF9yZWxlYXNlOworCXVuaXQtPmRldi5wYXJlbnQgPSAmcG9ydC0+ZGV2OworCXVuaXQtPmRldi5yZWxlYXNlID0gemZjcF91bml0X3JlbGVhc2U7CiAKLQlpZiAoZGV2X3NldF9uYW1lKCZ1bml0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAorCWlmIChkZXZfc2V0X25hbWUoJnVuaXQtPmRldiwgIjB4JTAxNmxseCIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZmNwX2x1bikpIHsKIAkJa2ZyZWUodW5pdCk7CiAJCWdvdG8gZXJyX291dDsKQEAgLTM1MywxMyArMzIzLDEyIEBACiAJdW5pdC0+bGF0ZW5jaWVzLmNtZC5jaGFubmVsLm1pbiA9IDB4RkZGRkZGRkY7CiAJdW5pdC0+bGF0ZW5jaWVzLmNtZC5mYWJyaWMubWluID0gMHhGRkZGRkZGRjsKIAotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSkpIHsKLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5kZXYpKSB7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZ1bml0LT5zeXNmc19kZXZpY2Uua29iaiwKLQkJCSAgICAgICAmemZjcF9zeXNmc191bml0X2F0dHJzKSkKKwlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZ1bml0LT5kZXYua29iaiwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycykpCiAJCWdvdG8gZXJyX291dF9wdXQ7CiAKIAl3cml0ZV9sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwpAQCAtMzcxLDkgKzM0MCw5IEBACiAJcmV0dXJuIHVuaXQ7CiAKIGVycl9vdXRfcHV0OgotCWRldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCWRldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5kZXYpOwogZXJyX291dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIApAQCAtNTM5LDcgKzUwOCw4IEBACiAJaWYgKHpmY3BfYWxsb2NhdGVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpKQogCQlnb3RvIGZhaWxlZDsKIAotCWlmICh6ZmNwX3JlcWxpc3RfYWxsb2MoYWRhcHRlcikpCisJYWRhcHRlci0+cmVxX2xpc3QgPSB6ZmNwX3JlcWxpc3RfYWxsb2MoKTsKKwlpZiAoIWFkYXB0ZXItPnJlcV9saXN0KQogCQlnb3RvIGZhaWxlZDsKIAogCWlmICh6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKGFkYXB0ZXIpKQpAQCAtNTYwLDggKzUzMCw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+ZXJwX3J1bm5pbmdfaGVhZCk7CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0KIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hYm9ydF9sb2NrKTsKIApAQCAtNjQwLDggKzYwOCw3IEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfcG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KHBvcnQtPmFkYXB0ZXIpOwogCWtmcmVlKHBvcnQpOwpAQCAtNjY5LDcgKzYzNiw3IEBACiAKIAlwb3J0ID0gemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pOwogCWlmIChwb3J0KSB7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCXJldHZhbCA9IC1FRVhJU1Q7CiAJCWdvdG8gZXJyX291dDsKIAl9CkBAIC02ODksMjIgKzY1NiwyMSBAQAogCXBvcnQtPmRfaWQgPSBkX2lkOwogCXBvcnQtPnd3cG4gPSB3d3BuOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9OT05FOwotCXBvcnQtPnN5c2ZzX2RldmljZS5wYXJlbnQgPSAmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2OwotCXBvcnQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF9wb3J0X3JlbGVhc2U7CisJcG9ydC0+ZGV2LnBhcmVudCA9ICZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXY7CisJcG9ydC0+ZGV2LnJlbGVhc2UgPSB6ZmNwX3BvcnRfcmVsZWFzZTsKIAotCWlmIChkZXZfc2V0X25hbWUoJnBvcnQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKSkgeworCWlmIChkZXZfc2V0X25hbWUoJnBvcnQtPmRldiwgIjB4JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbikpIHsKIAkJa2ZyZWUocG9ydCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAJcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSkpIHsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5kZXYpKSB7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5zeXNmc19kZXZpY2Uua29iaiwKKwlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5kZXYua29iaiwKIAkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKSkKIAkJZ290byBlcnJfb3V0X3B1dDsKIApAQCAtNzE3LDcgKzY4Myw3IEBACiAJcmV0dXJuIHBvcnQ7CiAKIGVycl9vdXRfcHV0OgotCWRldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWRldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYpOwogZXJyX291dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggYzIyY2I3Mi4uY2UxY2M3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC0zLDEzICszLDE0IEBACiAgKgogICogUmVnaXN0cmF0aW9uIGFuZCBjYWxsYmFjayBmb3IgdGhlIHMzOTAgY29tbW9uIEkvTyBsYXllci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiAjZGVmaW5lIFpGQ1BfTU9ERUxfUFJJViAweDQKIApAQCAtMTIyLDEyICsxMjMsMTAgQEAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsgLyogcHV0IGZyb20gemZjcF9jY3dfYWRhcHRlcl9ieV9jZGV2ICovCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5pdCwgdSwgJnVuaXRfcmVtb3ZlX2xoLCBsaXN0KQotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5kZXYsICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZwb3J0X3JlbW92ZV9saCwgbGlzdCkKLQkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLAotCQkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2LCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKIAogCXpmY3BfYWRhcHRlcl91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogfQpAQCAtMTYyLDcgKzE2MSw3IEBACiAJfQogCiAJLyogaW5pdGlhbGl6ZSByZXF1ZXN0IGNvdW50ZXIgKi8KLQlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXIpKTsKKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXItPnJlcV9saXN0KSk7CiAJYWRhcHRlci0+cmVxX25vID0gMDsKIAogCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiY2Nzb25sMSIsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwppbmRleCA3MzY5Yzg5MS4uN2ExNDlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0xNDAsOSArMTQwLDkgQEAKIAltZW1jcHkocmVzcG9uc2UtPmZzZl9zdGF0dXNfcXVhbCwKIAkgICAgICAgZnNmX3N0YXR1c19xdWFsLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKIAlyZXNwb25zZS0+ZnNmX3JlcV9zdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7Ci0JcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdDsKLQlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfbGFzdDsKLQlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlOworCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9maXJzdDsKKwlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9sYXN0OworCXJlc3BvbnNlLT5zYmFsX3Jlc3BvbnNlID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZTsKIAlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKIAlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CiAKQEAgLTU3Niw3ICs1NzYsOCBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYmYtPmFkYXB0ZXI7CiAKIAl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJmFkYXB0ZXItPnN0YXR1cywKLQkJCQkgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwgMCk7CisJCQkgICAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC01OTAsOCArNTkxLDggQEAKIAlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHBvcnQtPmFkYXB0ZXItPmRiZjsKIAogCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmcG9ydC0+c3RhdHVzLAotCQkJCSAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAotCQkJCSAgMCk7CisJCQkgICAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC02NDIsMTAgKzY0Myw5IEBACiAJCXItPnUudHJpZ2dlci5wcyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCQlyLT51LnRyaWdnZXIud3dwbiA9IHBvcnQtPnd3cG47CiAJfQotCWlmICh1bml0KSB7CisJaWYgKHVuaXQpCiAJCXItPnUudHJpZ2dlci51cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOwotCQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47Ci0JfQorCXItPnUudHJpZ2dlci5mY3BfbHVuID0gdW5pdCA/IHVuaXQtPmZjcF9sdW4gOiBaRkNQX0RCRl9JTlZBTElEX0xVTjsKIAlkZWJ1Z19ldmVudChkYmYtPnJlYywgYWN0aW9uID8gMSA6IDQsIHIsIHNpemVvZigqcikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTY2OCw3ICs2NjgsNyBAQAogCXItPnUuYWN0aW9uLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb247CiAJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOwogCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOwotCXItPnUuYWN0aW9uLmZzZl9yZXEgPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uLT5mc2ZfcmVxOworCXItPnUuYWN0aW9uLmZzZl9yZXEgPSBlcnBfYWN0aW9uLT5mc2ZfcmVxX2lkOwogCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCA1LCByLCBzaXplb2YoKnIpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCA4YjdmZDlhLi40NTdlMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgWkZDUF9EQkZfVEFHX1NJWkUgICAgICA0CiAjZGVmaW5lIFpGQ1BfREJGX0lEX1NJWkUgICAgICAgNwogCisjZGVmaW5lIFpGQ1BfREJGX0lOVkFMSURfTFVOCTB4RkZGRkZGRkZGRkZGRkZGRnVsbAorCiBzdHJ1Y3QgemZjcF9kYmZfZHVtcCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1MzIgdG90YWxfc2l6ZTsJCS8qIHNpemUgb2YgdG90YWwgZHVtcCBkYXRhICovCkBAIC0xOTIsMTAgKzE5NCwxMCBAQAogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSBjdF9yZXNwOwogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9lbHMgZWxzOwogCX0gdTsKLSNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIDEwMjQKLQl1OCBwYXlsb2FkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCAxMDI0CisKIHN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKQEAgLTMwMSwxNyArMzAzLDMxIEBACiAKIC8qKgogICogemZjcF9kYmZfc2NzaV9yZXN1bHQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24KLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBTQ1NJIGNvbW1hbmQKLSAqIEBsZXZlbDogdHJhY2UgbGV2ZWwgYXBwbGljYWJsZSBmb3IgdGhpcyBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIHRoZSBTQ1NJIGNvbW1hbmQKKyAqIEBkYmY6IGFkYXB0ZXIgZGJmIHRyYWNlCiAgKiBAc2NtZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKLSAqIEBmc2ZfcmVxOiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIChtaWdodCBiZSBOVUxMKQorICogQHJlcTogRlNGIHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwgc3RydWN0IHpmY3BfZGJmICpkYmYsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Njc2lfcmVzdWx0KHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorCQkJICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0JemZjcF9kYmZfc2NzaSgicnNsdCIsIHRhZywgbGV2ZWwsIGRiZiwgc2NtZCwgZnNmX3JlcSwgMCk7CisJaWYgKHNjbWQtPnJlc3VsdCAhPSAwKQorCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgImVycm8iLCAzLCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJZWxzZSBpZiAoc2NtZC0+cmV0cmllcyA+IDApCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAicmV0ciIsIDQsIGRiZiwgc2NtZCwgcmVxLCAwKTsKKwllbHNlCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAibm9ybSIsIDYsIGRiZiwgc2NtZCwgcmVxLCAwKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZCAtIHRyYWNlIGV2ZW50IGZvciBmYWlsdXJlIHRvIHNlbmQgU0NTSSBjb21tYW5kCisgKiBAZGJmOiBhZGFwdGVyIGRiZiB0cmFjZQorICogQHNjbWQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJemZjcF9kYmZfc2NzaSgicnNsdCIsICJmYWlsIiwgNCwgZGJmLCBzY21kLCBOVUxMLCAwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAppbmRleCBlMWI1Yjg4Li43MTMxYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgemZjcCBkZXZpY2UgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2lmbmRlZiBaRkNQX0RFRl9ICkBAIC0zMywxNSArMzMsMTMgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2JzZ19mYy5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KLSNpbmNsdWRlIDxhc20vcWRpby5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgInpmY3BfZnNmLmgiCisjaW5jbHVkZSAiemZjcF9xZGlvLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKiogR0VORVJBTCBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBSRVFVRVNUX0xJU1RfU0laRSAxMjgKK3N0cnVjdCB6ZmNwX3JlcWxpc3Q7CiAKIC8qKioqKioqKioqKioqKioqKioqKiogU0NTSSBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgWkZDUF9TQ1NJX0VSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICgxMCpIWikKQEAgLTEyOSwxMiArMTI3LDYgQEAKIAltZW1wb29sX3QgKnF0Y2JfcG9vbDsKIH07CiAKLXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQl1OAkJICAgZmlyc3Q7CS8qIGluZGV4IG9mIG5leHQgZnJlZSBiZnIgaW4gcXVldWUgKi8KLQlhdG9taWNfdCAgICAgICAgICAgY291bnQ7CS8qIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUgKi8KLX07Ci0KIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgYWN0aW9uOwkgICAgICAgICAgICAgIC8qIHJlcXVlc3RlZCBhY3Rpb24gY29kZSAqLwpAQCAtMTQzLDggKzEzNSw3IEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1MzIJCXN0YXR1czsJICAgICAgLyogcmVjb3Zlcnkgc3RhdHVzICovCiAJdTMyIHN0ZXA7CSAgICAgICAgICAgICAgLyogYWN0aXZlIHN0ZXAgb2YgdGhpcyBlcnAgYWN0aW9uICovCi0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsgLyogZnNmIHJlcXVlc3QgY3VycmVudGx5IHBlbmRpbmcKLQkJCQkJIGZvciB0aGlzIGFjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCWZzZl9yZXFfaWQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwogCkBAIC0xNjcsMjkgKzE1OCw2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotLyoqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBRRElPIGRhdGEgc3RydWN0dXJlCi0gKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQotICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCi0gKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQotICogQHJlcV9xX2xvY2s7IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCi0gKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCi0gKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZwotICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCi0gKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIFFESU8gc3RydWN0dXJlCi0gKi8KLXN0cnVjdCB6ZmNwX3FkaW8gewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7Ci0Jc3BpbmxvY2tfdAkJc3RhdF9sb2NrOwotCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7Ci0JdTY0CQkJcmVxX3FfdXRpbDsKLQlhdG9taWNfdAkJcmVxX3FfZnVsbDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOwotfTsKLQogc3RydWN0IHpmY3BfYWRhcHRlciB7CiAJc3RydWN0IGtyZWYJCXJlZjsKIAl1NjQJCQlwZWVyX3d3bm47CSAgIC8qIFAyUCBwZWVyIFdXTk4gKi8KQEAgLTIwNyw4ICsxNzUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9saXN0OwkgICAvKiByZW1vdGUgcG9ydCBsaXN0ICovCiAJcndsb2NrX3QJCXBvcnRfbGlzdF9sb2NrOyAgICAvKiBwb3J0IGxpc3QgbG9jayAqLwogCXVuc2lnbmVkIGxvbmcJCXJlcV9ubzsJCSAgIC8qIHVuaXF1ZSBGU0YgcmVxIG51bWJlciAqLwotCXN0cnVjdCBsaXN0X2hlYWQJKnJlcV9saXN0OwkgICAvKiBsaXN0IG9mIHBlbmRpbmcgcmVxcyAqLwotCXNwaW5sb2NrX3QJCXJlcV9saXN0X2xvY2s7CSAgIC8qIHJlcXVlc3QgbGlzdCBsb2NrICovCisJc3RydWN0IHpmY3BfcmVxbGlzdAkqcmVxX2xpc3Q7CiAJdTMyCQkJZnNmX3JlcV9zZXFfbm87CSAgIC8qIEZTRiBjbW5kIHNlcSBudW1iZXIgKi8KIAlyd2xvY2tfdAkJYWJvcnRfbG9jazsgICAgICAgIC8qIFByb3RlY3RzIGFnYWluc3QgU0NTSQogCQkJCQkJICAgICAgc3RhY2sgYWJvcnQvY29tbWFuZApAQCAtMjQxLDcgKzIwOCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgZmNfcnBvcnQgICAgICAgICpycG9ydDsgICAgICAgICAvKiBycG9ydCBvZiBmYyB0cmFuc3BvcnQgY2xhc3MgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIHJlbW90ZSBwb3J0cyAqLwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgICAgKmFkYXB0ZXI7ICAgICAgIC8qIGFkYXB0ZXIgdXNlZCB0byBhY2Nlc3MgcG9ydCAqLwpAQCAtMjYzLDcgKzIzMCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF91bml0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIGxvZ2ljYWwgdW5pdHMgKi8KIAlzdHJ1Y3QgemZjcF9wb3J0ICAgICAgICpwb3J0OwkgICAgICAgLyogcmVtb3RlIHBvcnQgb2YgdW5pdCAqLwogCWF0b21pY190CSAgICAgICBzdGF0dXM7CSAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyBsb2dpY2FsIHVuaXQgKi8KQEAgLTI3NywzMyArMjQ0LDExIEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAtIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzIGZvciBhIHJlcXVlc3QKLSAqIEBzYmFsX251bWJlcjogbnVtYmVyIG9mIGZyZWUgU0JBTHMKLSAqIEBzYmFsX2ZpcnN0OiBmaXJzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsX2xhc3Q6IGxhc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbF9saW1pdDogbGFzdCBwb3NzaWJsZSBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsZV9jdXJyOiBjdXJyZW50IFNCQUxFIGF0IGNyZWF0aW9uIG9mIHRoaXMgcmVxdWVzdAotICogQHNiYWxfcmVzcG9uc2U6IFNCQUwgdXNlZCBpbiBpbnRlcnJ1cHQKLSAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCi0gKiBAcWRpb19pbmJfdXNhZ2U6IHVzYWdlIG9mIGluYm91bmQgcXVldWUKLSAqLwotc3RydWN0IHpmY3BfcXVldWVfcmVxIHsKLQl1OAkJICAgICAgIHNiYWxfbnVtYmVyOwotCXU4CQkgICAgICAgc2JhbF9maXJzdDsKLQl1OAkJICAgICAgIHNiYWxfbGFzdDsKLQl1OAkJICAgICAgIHNiYWxfbGltaXQ7Ci0JdTgJCSAgICAgICBzYmFsZV9jdXJyOwotCXU4CQkgICAgICAgc2JhbF9yZXNwb25zZTsKLQl1MTYJCSAgICAgICBxZGlvX291dGJfdXNhZ2U7Ci0JdTE2CQkgICAgICAgcWRpb19pbmJfdXNhZ2U7Ci19OwotCi0vKioKICAqIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgLSBiYXNpYyBGU0YgcmVxdWVzdCBzdHJ1Y3R1cmUKICAqIEBsaXN0OiBsaXN0IG9mIEZTRiByZXF1ZXN0cwogICogQHJlcV9pZDogdW5pcXVlIHJlcXVlc3QgSUQKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoaXMgcmVxdWVzdCBiZWxvbmdzIHRvCi0gKiBAcXVldWVfcmVxOiBxdWV1ZSByZWxhdGVkIHZhbHVlcworICogQHFkaW9fcmVxOiBxZGlvIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzCiAgKiBAY29tcGxldGlvbjogdXNlZCB0byBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3QKICAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGUgcmVxdWVzdAogICogQGZzZl9jb21tYW5kOiBGU0YgY29tbWFuZCBpc3N1ZWQKQEAgLTMyMSw3ICsyNjYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1bnNpZ25lZCBsb25nCQlyZXFfaWQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEJcXVldWVfcmVxOworCXN0cnVjdCB6ZmNwX3FkaW9fcmVxCXFkaW9fcmVxOwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJdTMyCQkJc3RhdHVzOwogCXUzMgkJCWZzZl9jb21tYW5kOwpAQCAtMzUyLDQ1ICsyOTcsNCBAQAogI2RlZmluZSBaRkNQX1NFVCAgICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfQ0xFQVIgICAgICAgICAgICAgIDB4MDAwMDAyMDAKIAotLyoKLSAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlcXVlc3QgSUQgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCi17Ci0JcmV0dXJuIHJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X3JlbW92ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQotewotCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWlkeCA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcV9pZCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSwgbGlzdCkKLQkJaWYgKHJlcXVlc3QtPnJlcV9pZCA9PSByZXFfaWQpCi0JCQlyZXR1cm4gcmVxdWVzdDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kX3NhZmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0sIGxpc3QpCi0JCQlpZiAocmVxdWVzdCA9PSByZXEpCi0JCQkJcmV0dXJuIHJlcXVlc3Q7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCiAjZW5kaWYgLyogWkZDUF9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggYjUxYTExYS4uMGJlNWU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMgKEVSUCkuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9NQVhfRVJQUyAgICAgICAgICAgICAgICAgICAzCiAKQEAgLTE3NCw3ICsxNzUsNyBAQAogCiAJc3dpdGNoIChuZWVkKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6Ci0JCWlmICghZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmdW5pdC0+c3RhdHVzKTsKIAkJZXJwX2FjdGlvbiA9ICZ1bml0LT5lcnBfYWN0aW9uOwpAQCAtMTg0LDcgKzE4NSw3IEBACiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6Ci0JCWlmICghZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCXpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3BvcnQocG9ydCk7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmcG9ydC0+c3RhdHVzKTsKQEAgLTQ3OCwyNiArNDc5LDI3IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19mc2ZyZXEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCi0JaWYgKCFhY3QtPmZzZl9yZXEpCisJaWYgKCFhY3QtPmZzZl9yZXFfaWQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0JaWYgKHpmY3BfcmVxbGlzdF9maW5kX3NhZmUoYWRhcHRlciwgYWN0LT5mc2ZfcmVxKSAmJgotCSAgICBhY3QtPmZzZl9yZXEtPmVycF9hY3Rpb24gPT0gYWN0KSB7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXItPnJlcV9saXN0LCBhY3QtPmZzZl9yZXFfaWQpOworCWlmIChyZXEgJiYgcmVxLT5lcnBfYWN0aW9uID09IGFjdCkgewogCQlpZiAoYWN0LT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJICAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewotCQkJYWN0LT5mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKKwkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CiAJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8xIiwgYWN0KTsKLQkJCWFjdC0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IE5VTEw7CisJCQlyZXEtPmVycF9hY3Rpb24gPSBOVUxMOwogCQl9CiAJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzIiLCBhY3QpOwotCQlpZiAoYWN0LT5mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKQotCQkJYWN0LT5mc2ZfcmVxID0gTlVMTDsKKwkJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkKKwkJCWFjdC0+ZnNmX3JlcV9pZCA9IDA7CiAJfSBlbHNlCi0JCWFjdC0+ZnNmX3JlcSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCQlhY3QtPmZzZl9yZXFfaWQgPSAwOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMTE3OSwxOSArMTE4MSwxOSBAQAogCXN3aXRjaCAoYWN0LT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKIAkJaWYgKChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSAmJiAhdW5pdC0+ZGV2aWNlKSB7Ci0JCQlnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJCWlmIChzY3NpX3F1ZXVlX3dvcmsodW5pdC0+cG9ydC0+YWRhcHRlci0+c2NzaV9ob3N0LAogCQkJCQkgICAgJnVuaXQtPnNjc2lfd29yaykgPD0gMCkKLQkJCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCX0KLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6CiAJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQogCQkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggNjZiZGIzNC4uODc4NmE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0yMSw3ICsyMSw2IEBACiBleHRlcm4gc3RydWN0IHpmY3BfcG9ydCAqemZjcF9wb3J0X2VucXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1NjQsIHUzMiwKIAkJCQkJICAgdTMyKTsKIGV4dGVybiBzdHJ1Y3QgemZjcF91bml0ICp6ZmNwX3VuaXRfZW5xdWV1ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHU2NCk7Ci1leHRlcm4gaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3NnX2ZyZWVfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3Bfc2dfc2V0dXBfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gdm9pZCB6ZmNwX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKiwKQEAgLTE0NCwxMyArMTQzLDkgQEAKIC8qIHpmY3BfcWRpby5jICovCiBleHRlcm4gaW50IHpmY3BfcWRpb19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Rlc3Ryb3koc3RydWN0IHpmY3BfcWRpbyAqKTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKLQkqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudAotCSp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKK2V4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqKTsKIGV4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqLAotCQkJCSAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCSAgIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICosIHVuc2lnbmVkIGxvbmcsCiAJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCAyNzEzOTlmLi41MjE5NjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEZpYnJlIENoYW5uZWwgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIAl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNncG5fMyIsIE5VTEwpOwogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zMjUsOSArMzI1LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zODksNyArMzg5LDcgQEAKIAl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIocG9ydCk7CiAgb3V0OgogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNULCAmcG9ydC0+c3RhdHVzKTsKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJa21lbV9jYWNoZV9mcmVlKHpmY3BfZGF0YS5hZGlzY19jYWNoZSwgYWRpc2MpOwogfQogCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsIHRlc3RfbGlua193b3JrKTsKIAlpbnQgcmV0dmFsOwogCi0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAJemZjcF9zY3NpX3Jwb3J0X3dvcmsoJnBvcnQtPnJwb3J0X3dvcmspOwogCkBAIC00NTUsNyArNDU1LDcgQEAKIAl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjbHR3azEiLCBOVUxMKTsKIAogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC00NjgsOSArNDY4LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mcmVlX3NnX2VudihzdHJ1Y3QgemZjcF9mY19ncG5fZnQgKmdwbl9mdCwgaW50IGJ1Zl9udW0pCkBAIC02MTcsOCArNjE3LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZyZW1vdmVfbGgsIGxpc3QpIHsKIAkJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAiZmNlZ3BmMiIsIE5VTEwpOwotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC03MzEsNyArNzMwLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWRfaWQgPSBwb3J0LT5kX2lkOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCX0gZWxzZQogCQlkX2lkID0gbnRvaDI0KGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBlOGZiNGQ5Li42NTM4NzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgRlNGIGNvbW1hbmRzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgInpmY3BfZmMuaCIKICNpbmNsdWRlICJ6ZmNwX2RiZi5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9yZXF1ZXN0X3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0zOTMsNyArMzk1LDcgQEAKIAljYXNlIEZTRl9QUk9UX0xJTktfRE9XTjoKIAkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsICJmc3BzZV81IiwKIAkJCQkJICAgICAmcHNxLT5saW5rX2Rvd25faW5mbyk7Ci0JCS8qIEZJWE1FOiByZW9wZW5pbmcgYWRhcHRlciBub3c/IGJldHRlciB3YWl0IGZvciBsaW5rIHVwICovCisJCS8qIGdvIHRocm91Z2ggcmVvcGVuIHRvIGZsdXNoIHBlbmRpbmcgcmVxdWVzdHMgKi8KIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcHNlXzYiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX1JFRVNUX1FVRVVFOgpAQCAtNDU3LDE1ICs0NTksMTAgQEAKIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKHJlbW92ZV9xdWV1ZSk7Ci0JdW5zaWduZWQgaW50IGk7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgUkVRVUVTVF9MSVNUX1NJWkU7IGkrKykKLQkJbGlzdF9zcGxpY2VfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RbaV0sICZyZW1vdmVfcXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwl6ZmNwX3JlcWxpc3RfbW92ZShhZGFwdGVyLT5yZXFfbGlzdCwgJnJlbW92ZV9xdWV1ZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZyZW1vdmVfcXVldWUsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CkBAIC00OTUsOCArNDkyLDYgQEAKIAlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gbnRvaDI0KGJvdHRvbS0+c19pZCk7CiAJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBib3R0b20tPmZjX2xpbmtfc3BlZWQ7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyhzaG9zdCkgPSBGQ19DT1NfQ0xBU1MyIHwgRkNfQ09TX0NMQVNTMzsKLQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KVsyXSA9IDE7IC8qIEZDUCAqLwotCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsgLyogRkNQICovCiAKIAlhZGFwdGVyLT5oeWRyYV92ZXJzaW9uID0gYm90dG9tLT5hZGFwdGVyX3R5cGU7CiAJYWRhcHRlci0+dGltZXJfdGlja3MgPSBib3R0b20tPnRpbWVyX2ludGVydmFsOwpAQCAtNjE5LDYgKzYxNCwxMCBAQAogCQlmY19ob3N0X3Blcm1hbmVudF9wb3J0X25hbWUoc2hvc3QpID0gZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpOwogCWZjX2hvc3RfbWF4ZnJhbWVfc2l6ZShzaG9zdCkgPSBib3R0b20tPm1heGltdW1fZnJhbWVfc2l6ZTsKIAlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpID0gYm90dG9tLT5zdXBwb3J0ZWRfc3BlZWQ7CisJbWVtY3B5KGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpLCBib3R0b20tPnN1cHBvcnRlZF9mYzRfdHlwZXMsCisJICAgICAgIEZDX0ZDNF9MSVNUX1NJWkUpOworCW1lbWNweShmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgYm90dG9tLT5hY3RpdmVfZmM0X3R5cGVzLAorCSAgICAgICBGQ19GQzRfTElTVF9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQpAQCAtNzI1LDEyICs3MjQsMTIgQEAKIAlyZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCXJlcS0+ZnNmX2NvbW1hbmQgPSBmc2ZfY21kOwogCXJlcS0+cmVxX2lkID0gYWRhcHRlci0+cmVxX25vOwotCXJlcS0+cXVldWVfcmVxLnNiYWxfbnVtYmVyID0gMTsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX2ZpcnN0ID0gcmVxX3EtPmZpcnN0OwotCXJlcS0+cXVldWVfcmVxLnNiYWxfbGFzdCA9IHJlcV9xLT5maXJzdDsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gMTsKKwlyZXEtPnFkaW9fcmVxLnNiYWxfbnVtYmVyID0gMTsKKwlyZXEtPnFkaW9fcmVxLnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xZGlvX3JlcS5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xZGlvX3JlcS5zYmFsZV9jdXJyID0gMTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uYWRkciA9ICh2b2lkICopIHJlcS0+cmVxX2lkOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX0NPTU1BTkQ7CiAKQEAgLTc0NSw2ICs3NDQsNyBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCX0KIAorCQlyZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9pZCA9IHJlcS0+cmVxX2lkOwogCQlyZXEtPnF0Y2ItPnByZWZpeC51bHBfaW5mbyA9IDI2OwpAQCAtNzUyLDggKzc1Miw2IEBACiAJCXJlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdmVyc2lvbiA9IEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTjsKIAkJcmVxLT5xdGNiLT5oZWFkZXIucmVxX2hhbmRsZSA9IHJlcS0+cmVxX2lkOwogCQlyZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCA9IHJlcS0+ZnNmX2NvbW1hbmQ7Ci0JCXJlcS0+c2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87Ci0JCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJc2JhbGVbMV0uYWRkciA9ICh2b2lkICopIHJlcS0+cXRjYjsKIAkJc2JhbGVbMV0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYik7CiAJfQpAQCAtNzcwLDI1ICs3NjgsMTcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwotCXVuc2lnbmVkIGxvbmcJICAgICBmbGFnczsKLQlpbnQJCSAgICAgaWR4OwotCWludAkJICAgICB3aXRoX3F0Y2IgPSAocmVxLT5xdGNiICE9IE5VTEwpOworCWludCB3aXRoX3F0Y2IgPSAocmVxLT5xdGNiICE9IE5VTEwpOworCWludCByZXFfaWQgPSByZXEtPnJlcV9pZDsKIAotCS8qIHB1dCBhbGxvY2F0ZWQgRlNGIHJlcXVlc3QgaW50byBoYXNoIHRhYmxlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlpZHggPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXEtPnJlcV9pZCk7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCXpmY3BfcmVxbGlzdF9hZGQoYWRhcHRlci0+cmVxX2xpc3QsIHJlcSk7CiAKLQlyZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOworCXJlcS0+cWRpb19yZXEucWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKIAlyZXEtPmlzc3VlZCA9IGdldF9jbG9jaygpOwotCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpKSB7CisJaWYgKHpmY3BfcWRpb19zZW5kKHFkaW8sICZyZXEtPnFkaW9fcmVxKSkgewogCQlkZWxfdGltZXIoJnJlcS0+dGltZXIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCQkvKiBsb29rdXAgcmVxdWVzdCBhZ2FpbiwgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgKi8KLQkJaWYgKHpmY3BfcmVxbGlzdF9maW5kX3NhZmUoYWRhcHRlciwgcmVxKSkKLQkJCXpmY3BfcmVxbGlzdF9yZW1vdmUoYWRhcHRlciwgcmVxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCQl6ZmNwX3JlcWxpc3RfZmluZF9ybShhZGFwdGVyLT5yZXFfbGlzdCwgcmVxX2lkKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcnNfXzEiLCByZXEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC04MjYsOSArODE2LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVsyXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IDI7CisJcmVxLT5xZGlvX3JlcS5zYmFsZV9jdXJyID0gMjsKIAogCXNyX2J1ZiA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNyX2J1ZikgewpAQCAtODM3LDcgKzgyNyw3IEBACiAJfQogCW1lbXNldChzcl9idWYsIDAsIHNpemVvZigqc3JfYnVmKSk7CiAJcmVxLT5kYXRhID0gc3JfYnVmOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZS0+YWRkciA9ICh2b2lkICopIHNyX2J1ZjsKIAlzYmFsZS0+bGVuZ3RoID0gc2l6ZW9mKCpzcl9idWYpOwogCkBAIC05MzQsNyArOTI0LDcgQEAKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJZ290byBvdXRfZXJyb3JfZnJlZTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTAyOSw3ICsxMDE5LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEoYWRhcHRlci0+cWRpbywKLQkJCQkJCQkgICAgICAgJnJlcS0+cXVldWVfcmVxKTsKKwkJCQkJCQkgICAgICAgJnJlcS0+cWRpb19yZXEpOwogCXUzMiBmZWF0ID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlczsKIAlpbnQgYnl0ZXM7CiAKQEAgLTEwNDcsMTUgKzEwMzcsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXEsIG1heF9zYmFscyk7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2J1Zl9sZW5ndGggPSBieXRlczsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMOworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTDsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCiAJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVzcCwgbWF4X3NiYWxzKTsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOwpAQCAtMTI1MSw3ICsxMjQxLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEyNjIsMTMgKzEyNTIsMTMgQEAKIAkJCUZTRl9GRUFUVVJFX1VQREFURV9BTEVSVDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX2hhbmRsZXI7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xMjkzLDcgKzEyODMsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX2hhbmRsZXI7CkBAIC0xMzQ5LDE5ICsxMzM5LDE5IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX2hhbmRsZXI7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTEzOTgsNyArMTM4OCw3IEBACiAJaWYgKGRhdGEpCiAJCXJlcS0+ZGF0YSA9IGRhdGE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE0ODQsNyArMTQ3NCw3IEBACiAJfQogCiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAvKioKQEAgLTE1MTMsNyArMTUwMyw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE1MjEsMTUgKzE1MTEsMTUgQEAKIAlodG9uMjQocmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkLCBwb3J0LT5kX2lkKTsKIAlyZXEtPmRhdGEgPSBwb3J0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTU4Myw3ICsxNTczLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE1OTEsMTMgKzE1ODEsMTMgQEAKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT5wb3J0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xNjYwLDcgKzE2NTAsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTcxNSw3ICsxNzA1LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE4MDksNyArMTc5OSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xODE3LDEzICsxODA3LDEzIEBACiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9jbG9zZV9waHlzaWNhbF9wb3J0X2hhbmRsZXI7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xOTgyLDcgKzE5NzIsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xOTkxLDcgKzE5ODEsNyBAQAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX29wZW5fdW5pdF9oYW5kbGVyOwogCXJlcS0+ZGF0YSA9IGVycF9hY3Rpb24tPnVuaXQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCWlmICghKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpKQogCQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0Lm9wdGlvbiA9IEZTRl9PUEVOX0xVTl9TVVBQUkVTU19CT1hJTkc7CkBAIC0yMDAwLDcgKzE5OTAsNyBAQAogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTIwNjgsNyArMjA1OCw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0yMDc3LDEzICsyMDY3LDEzIEBACiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY2xvc2VfdW5pdF9oYW5kbGVyOwogCXJlcS0+ZGF0YSA9IGVycF9hY3Rpb24tPnVuaXQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTIxMTEsOCArMjEwMSw4IEBACiAJYmxrdHJjLm1hZ2ljID0gWkZDUF9CTEtfRFJWX0RBVEFfTUFHSUM7CiAJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQogCQlibGt0cmMuZmxhZ3MgfD0gWkZDUF9CTEtfUkVRX0VSUk9SOwotCWJsa3RyYy5pbmJfdXNhZ2UgPSByZXEtPnF1ZXVlX3JlcS5xZGlvX2luYl91c2FnZTsKLQlibGt0cmMub3V0Yl91c2FnZSA9IHJlcS0+cXVldWVfcmVxLnFkaW9fb3V0Yl91c2FnZTsKKwlibGt0cmMuaW5iX3VzYWdlID0gcmVxLT5xZGlvX3JlcS5xZGlvX2luYl91c2FnZTsKKwlibGt0cmMub3V0Yl91c2FnZSA9IHJlcS0+cWRpb19yZXEucWRpb19vdXRiX3VzYWdlOwogCiAJaWYgKHJlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpIHsKIAkJYmxrdHJjLmZsYWdzIHw9IFpGQ1BfQkxLX0xBVF9WQUxJRDsKQEAgLTIxNjksMTIgKzIxNTksNyBAQAogCXpmY3BfZnNmX3JlcV90cmFjZShyZXEsIHNjcG50KTsKIAogc2tpcF9mc2ZzdGF0dXM6Ci0JaWYgKHNjcG50LT5yZXN1bHQgIT0gMCkKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImVycm8iLCAzLCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7Ci0JZWxzZSBpZiAoc2NwbnQtPnJldHJpZXMgPiAwKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgicmV0ciIsIDQsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKLQllbHNlCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJub3JtIiwgNiwgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOworCXpmY3BfZGJmX3Njc2lfcmVzdWx0KHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKIAogCXNjcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkoc2NwbnQtPnNjc2lfZG9uZSkgKHNjcG50KTsKQEAgLTIyNzQsNyArMjI1OSw3IEBACiAJZWxzZSB7CiAJCXpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19oYW5kbGVyKHJlcSk7CiAJCXJlcS0+dW5pdCA9IE5VTEw7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJfQogfQogCkBAIC0yMzEyLDcgKzIyOTcsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAlyZXEtPnVuaXQgPSB1bml0OwogCXJlcS0+ZGF0YSA9IHNjc2lfY21uZDsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX2hhbmRsZXI7CkBAIC0yMzQ2LDExICsyMzMxLDExIEBACiAJZmNwX2NtbmQgPSAoc3RydWN0IGZjcF9jbW5kICopICZyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZDsKIAl6ZmNwX2ZjX3Njc2lfdG9fZmNwKGZjcF9jbW5kLCBzY3NpX2NtbmQpOwogCi0JcmVhbF9ieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwgc2J0eXBlLAorCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwgc2J0eXBlLAogCQkJCQkgICAgIHNjc2lfc2dsaXN0KHNjc2lfY21uZCksCiAJCQkJCSAgICAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAodW5saWtlbHkocmVhbF9ieXRlcyA8IDApKSB7Ci0JCWlmIChyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA+PSBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpIHsKKwkJaWYgKHJlcS0+cWRpb19yZXEuc2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkJIk92ZXJzaXplIGRhdGEgcGFja2FnZSwgdW5pdCAweCUwMTZMeCAiCiAJCQkJIm9uIHBvcnQgMHglMDE2THggY2xvc2VkXG4iLApAQCAtMjM2OSw3ICsyMzU0LDcgQEAKIAlnb3RvIG91dDsKIAogZmFpbGVkX3Njc2lfY21uZDoKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogb3V0OgpAQCAtMjQxNSw3ICsyNDAwLDcgQEAKIAlyZXEtPnF0Y2ItPmJvdHRvbS5pby5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmRfbGVuZ3RoID0gRkNQX0NNTkRfTEVOOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjQ3OCwxNCArMjQ2MywxNCBAQAogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY29udHJvbF9maWxlX2hhbmRsZXI7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IGRpcmVjdGlvbjsKIAogCWJvdHRvbSA9ICZyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OwogCWJvdHRvbS0+b3BlcmF0aW9uX3N1YnR5cGUgPSBGU0ZfQ0ZEQ19PUEVSQVRJT05fU1VCVFlQRTsKIAlib3R0b20tPm9wdGlvbiA9IGZzZl9jZmRjLT5vcHRpb247CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnFkaW9fcmVxLAogCQkJCQlkaXJlY3Rpb24sIGZzZl9jZmRjLT5zZywKIAkJCQkJRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAoYnl0ZXMgIT0gWkZDUF9DRkRDX01BWF9TSVpFKSB7CkBAIC0yNTE2LDE1ICsyNTAxLDE0IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsID0gcWRpby0+cmVzcF9xLnNiYWxbc2JhbF9pZHhdOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJlcV9pZDsKKwl1bnNpZ25lZCBsb25nIHJlcV9pZDsKIAlpbnQgaWR4OwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBRRElPX01BWF9FTEVNRU5UU19QRVJfQlVGRkVSOyBpZHgrKykgewogCiAJCXNiYWxlID0gJnNiYWwtPmVsZW1lbnRbaWR4XTsKIAkJcmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpIHNiYWxlLT5hZGRyOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgcmVxX2lkKTsKKwkJZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kX3JtKGFkYXB0ZXItPnJlcV9saXN0LCByZXFfaWQpOwogCiAJCWlmICghZnNmX3JlcSkKIAkJCS8qCkBAIC0yNTM0LDExICsyNTE4LDggQEAKIAkJCXBhbmljKCJlcnJvcjogdW5rbm93biByZXFfaWQgKCVseCkgb24gYWRhcHRlciAlcy5cbiIsCiAJCQkgICAgICByZXFfaWQsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKIAotCQlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQotCQlmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OwotCQlmc2ZfcmVxLT5xdWV1ZV9yZXEucWRpb19pbmJfdXNhZ2UgPQorCQlmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7CisJCWZzZl9yZXEtPnFkaW9fcmVxLnFkaW9faW5iX3VzYWdlID0KIAkJCWF0b21pY19yZWFkKCZxZGlvLT5yZXNwX3EuY291bnQpOwogCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggNmM1MjI4Yi4uNzFiOTdmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgogCiAjZGVmaW5lIFFCVUZGX1BFUl9QQUdFCQkoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBxZGlvX2J1ZmZlcikpCiAKQEAgLTI4LDEyICsyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbGUoc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcSwgaW50IHNiYWxfaWR4LCBpbnQgc2JhbGVfaWR4KQotewotCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgY2hhciAqaWQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CkBAIC0xMDYsNyArMTAxLDcgQEAKIAogCWlmICh1bmxpa2VseShyZXR2YWwpKSB7CiAJCWF0b21pY19zZXQoJnF1ZXVlLT5jb3VudCwgY291bnQpOwotCQkvKiBGSVhNRTogUmVjb3ZlciB0aGlzIHdpdGggYW4gYWRhcHRlciByZW9wZW4/ICovCisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHFkaW8tPmFkYXB0ZXIsIDAsICJxZHJwYl8xIiwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcXVldWUtPmZpcnN0ICs9IGNvdW50OwogCQlxdWV1ZS0+Zmlyc3QgJT0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKQEAgLTE0NSwzMiArMTQwLDggQEAKIAl6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhxZGlvLCBjb3VudCk7CiB9CiAKLS8qKgotICogemZjcF9xZGlvX3NiYWxlX3JlcSAtIHJldHVybiBwdHIgdG8gU0JBTEUgb2YgcmVxX3EgZm9yIGEgc3RydWN0IHpmY3BfZnNmX3JlcQotICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwotICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlYwotICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChTQkFMRSkgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQotewotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKLX0KLQotLyoqCi0gKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyIFNCQUxFIG9uIHJlcV9xIGZvciBhIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcmVxCi0gKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKLXsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKLQkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Ci19Ci0KIHN0YXRpYyB2b2lkIHpmY3BfcWRpb19zYmFsX2xpbWl0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCisJCQkJIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwgaW50IG1heF9zYmFscykKIHsKIAlpbnQgY291bnQgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCWNvdW50ID0gbWluKGNvdW50LCBtYXhfc2JhbHMpOwpAQCAtMTc5LDcgKzE1MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbF9jaGFpbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAoremZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKQEAgLTIxNCw3ICsxODUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK3pmY3BfcWRpb19zYmFsZV9uZXh0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJICAgICB1bnNpZ25lZCBpbnQgc2J0eXBlKQogewogCWlmIChxX3JlcS0+c2JhbGVfY3VyciA9PSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUwpCkBAIC0yMjQsNyArMTk1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgemZjcF9xZGlvX3VuZG9fc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKKwkJCQkgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwgPSBxZGlvLT5yZXFfcS5zYmFsOwogCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OwpAQCAtMjM1LDcgKzIwNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgemZjcF9xZGlvX2ZpbGxfc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAorCQkJCXN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJCQl1bnNpZ25lZCBpbnQgc2J0eXBlLCB2b2lkICpzdGFydF9hZGRyLAogCQkJCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGgpCiB7CkBAIC0yNzEsOCArMjQyLDcgQEAKICAqIEBtYXhfc2JhbHM6IHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgU0JBTHMgdG8gYmUgdXNlZAogICogUmV0dXJuczogbnVtYmVyIG9mIGJ5dGVzLCBvciBlcnJvciAobmVnYXRpdikKICAqLwotaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkgICAgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK2ludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzYnR5cGUsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCQkgICAgaW50IG1heF9zYmFscykKIHsKQEAgLTMwNCwxMCArMjc0LDEwIEBACiAvKioKICAqIHpmY3BfcWRpb19zZW5kIC0gc2V0IFBDSSBmbGFnIGluIGZpcnN0IFNCQUxFIGFuZCBzZW5kIHJlcSB0byBRRElPCiAgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCi0gKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVxCisgKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgZXJyb3Igb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQoraW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZxZGlvLT5yZXFfcTsKIAlpbnQgZmlyc3QgPSBxX3JlcS0+c2JhbF9maXJzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogemZjcCBkZXZpY2UgZHJpdmVyCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHpmY3AgcWRpbyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMTAKKyAqLworCisjaWZuZGVmIFpGQ1BfUURJT19ICisjZGVmaW5lIFpGQ1BfUURJT19ICisKKyNpbmNsdWRlIDxhc20vcWRpby5oPgorCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgLSBxZGlvIHF1ZXVlIGJ1ZmZlciwgemZjcCBpbmRleCBhbmQgZnJlZSBjb3VudAorICogQHNiYWw6IHFkaW8gYnVmZmVycworICogQGZpcnN0OiBpbmRleCBvZiBuZXh0IGZyZWUgYnVmZmVyIGluIHF1ZXVlCisgKiBAY291bnQ6IG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUKKyAqLworc3RydWN0IHpmY3BfcWRpb19xdWV1ZSB7CisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCXU4CQkgICBmaXJzdDsKKwlhdG9taWNfdCAgICAgICAgICAgY291bnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBxZGlvIGRhdGEgc3RydWN0dXJlCisgKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQorICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCisgKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQorICogQHJlcV9xX2xvY2s6IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCisgKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCisgKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZworICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCisgKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIHFkaW8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCB6ZmNwX3FkaW8geworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CisJc3BpbmxvY2tfdAkJc3RhdF9sb2NrOworCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7CisJdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7CisJdTY0CQkJcmVxX3FfdXRpbDsKKwlhdG9taWNfdAkJcmVxX3FfZnVsbDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAtIHFkaW8gcXVldWUgcmVsYXRlZCB2YWx1ZXMgZm9yIGEgcmVxdWVzdAorICogQHNiYWxfbnVtYmVyOiBudW1iZXIgb2YgZnJlZSBzYmFscworICogQHNiYWxfZmlyc3Q6IGZpcnN0IHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxfbGFzdDogbGFzdCBzYmFsIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX2xpbWl0OiBsYXN0IHBvc3NpYmxlIHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxlX2N1cnI6IGN1cnJlbnQgc2JhbGUgYXQgY3JlYXRpb24gb2YgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9yZXNwb25zZTogc2JhbCB1c2VkIGluIGludGVycnVwdAorICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKKyAqIEBxZGlvX2luYl91c2FnZTogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZQorICovCitzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7CisJdTgJc2JhbF9udW1iZXI7CisJdTgJc2JhbF9maXJzdDsKKwl1OAlzYmFsX2xhc3Q7CisJdTgJc2JhbF9saW1pdDsKKwl1OAlzYmFsZV9jdXJyOworCXU4CXNiYWxfcmVzcG9uc2U7CisJdTE2CXFkaW9fb3V0Yl91c2FnZTsKKwl1MTYJcWRpb19pbmJfdXNhZ2U7Cit9OworCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZSAtIHJldHVybiBwb2ludGVyIHRvIHNiYWxlIGluIHFkaW8gcXVldWUKKyAqIEBxOiBxdWV1ZSB3aGVyZSB0byBmaW5kIHNiYWwKKyAqIEBzYmFsX2lkeDogc2JhbCBpbmRleCBpbiBxdWV1ZQorICogQHNiYWxlX2lkeDogc2JhbGUgaW5kZXggaW4gc2JhbAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZShzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxLCBpbnQgc2JhbF9pZHgsIGludCBzYmFsZV9pZHgpCit7CisJcmV0dXJuICZxLT5zYmFsW3NiYWxfaWR4XS0+ZWxlbWVudFtzYmFsZV9pZHhdOworfQorCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZV9yZXEgLSByZXR1cm4gcG9pbnRlciB0byBzYmFsZSBvbiByZXFfcSBmb3IgYSByZXF1ZXN0CisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZWM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQoreworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKK30KKworLyoqCisgKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyZW50IHNiYWxlIG9uIHJlcV9xIGZvciBhIHJlcXVlc3QKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KKyAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKK3sKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKKwkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Cit9CisKKyNlbmRpZiAvKiBaRkNQX1FESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3JlcWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzJkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiB6ZmNwIGRldmljZSBkcml2ZXIKKyAqCisgKiBEYXRhIHN0cnVjdHVyZSBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgcGVuZGluZyBGU0YKKyAqIHJlcXVlc3RzLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOQorICovCisKKyNpZm5kZWYgWkZDUF9SRVFMSVNUX0gKKyNkZWZpbmUgWkZDUF9SRVFMSVNUX0gKKworLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworI2RlZmluZSBaRkNQX1JFUV9MSVNUX0JVQ0tFVFMgMTI4CisKKy8qKgorICogc3RydWN0IHpmY3BfcmVxbGlzdCAtIENvbnRhaW5lciBmb3IgcmVxdWVzdCBsaXN0IChyZXFsaXN0KQorICogQGxvY2s6IFNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBoYXNoIGxpc3QKKyAqIEBsaXN0OiBBcnJheSBvZiBoYXNoYnVja2V0cywgZWFjaCBpcyBhIGxpc3Qgb2YgcmVxdWVzdHMgaW4gdGhpcyBidWNrZXQKKyAqLworc3RydWN0IHpmY3BfcmVxbGlzdCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgYnVja2V0c1taRkNQX1JFUV9MSVNUX0JVQ0tFVFNdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJcmV0dXJuIHJlcV9pZCAlIFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfYWxsb2MgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZXFsaXN0CisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCByZXFsaXN0IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24KKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9yZXFsaXN0ICp6ZmNwX3JlcWxpc3RfYWxsb2Modm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybDsKKworCXJsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3BfcmVxbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghcmwpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJnJsLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnJsLT5idWNrZXRzW2ldKTsKKworCXJldHVybiBybDsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfaXNlbXB0eSAtIENoZWNrIHdoZXRoZXIgdGhlIHJlcXVlc3QgbGlzdCBlbXB0eQorICogQHJsOiBwb2ludGVyIHRvIHJlcWxpc3QKKyAqCisgKiBSZXR1cm5zOiAxIGlmIGxpc3QgaXMgZW1wdHksIDAgaWYgbm90CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsgaSsrKQorCQlpZiAoIWxpc3RfZW1wdHkoJnJsLT5idWNrZXRzW2ldKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9mcmVlIC0gRnJlZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciByZXFsaXN0CisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGZyZWUgbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfZnJlZShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCkKK3sKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KHJsKSk7CisKKwlrZnJlZShybCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCitfemZjcF9yZXFsaXN0X2ZpbmQoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXFfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmcmwtPmJ1Y2tldHNbaV0sIGxpc3QpCisJCWlmIChyZXEtPnJlcV9pZCA9PSByZXFfaWQpCisJCQlyZXR1cm4gcmVxOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9maW5kIC0gTG9va3VwIEZTRiByZXF1ZXN0IGJ5IGl0cyByZXF1ZXN0IGlkCisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGxvb2t1cCB0aGUgRlNGIHJlcXVlc3QKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIHRvIGxvb2sgZm9yCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEZTRiByZXF1ZXN0IHdpdGggdGhlIHNwZWNpZmllZCByZXF1ZXN0IGlkCisgKiBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGtub3duIEZTRiByZXF1ZXN0IHdpdGggdGhpcyBpZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKK3pmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCXJlcSA9IF96ZmNwX3JlcWxpc3RfZmluZChybCwgcmVxX2lkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfZmluZF9ybSAtIExvb2t1cCByZXF1ZXN0IGJ5IGlkIGFuZCByZW1vdmUgaXQgZnJvbSByZXFsaXN0CisgKiBAcmw6IHJlcWxpc3Qgd2hlcmUgdG8gc2VhcmNoIGFuZCByZW1vdmUgZW50cnkKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIG9mIHRoZSByZXF1ZXN0IHRvIGxvb2sgZm9yCisgKgorICogVGhpcyBmdW5jdGlvbnMgdHJpZXMgdG8gZmluZCB0aGUgRlNGIHJlcXVlc3Qgd2l0aCB0aGUgc3BlY2lmaWVkCisgKiBpZCBhbmQgdGhlbiByZW1vdmVzIGl0IGZyb20gdGhlIHJlcWxpc3QuIFRoZSByZXFsaXN0IGxvY2sgaXMgaGVsZAorICogZHVyaW5nIGJvdGggc3RlcHMgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBQb2ludGVyIHRvIHRoZSBGU0YgcmVxdWVzdCBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmb3VuZCwKKyAqIE5VTEwgaWYgaXQgaGFzIG5vdCBiZWVuIGZvdW5kLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgoremZjcF9yZXFsaXN0X2ZpbmRfcm0oc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKHJsLCByZXFfaWQpOworCWlmIChyZXEpCisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9hZGQgLSBBZGQgZW50cnkgdG8gcmVxbGlzdAorICogQHJsOiByZXFsaXN0IHdoZXJlIHRvIGFkZCB0aGUgZW50cnkKKyAqIEByZXE6IFRoZSBlbnRyeSB0byBhZGQKKyAqCisgKiBUaGUgcmVxdWVzdCBpZCBhbHdheXMgaW5jcmVhc2VzLiBBcyBhbiBvcHRpbWl6YXRpb24gbmV3IHJlcXVlc3RzCisgKiBhcmUgYWRkZWQgaGVyZSB3aXRoIGxpc3RfYWRkX3RhaWwgYXQgdGhlIGVuZCBvZiB0aGUgYnVja2V0IGxpc3RzCisgKiB3aGlsZSBvbGQgcmVxdWVzdHMgYXJlIGxvb2tlZCB1cCBzdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICogbGlzdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfYWRkKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLAorCQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXEtPnJlcV9pZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZybC0+YnVja2V0c1tpXSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfbW92ZSAtIE1vdmUgYWxsIGVudHJpZXMgZnJvbSByZXFsaXN0IHRvIHNpbXBsZSBsaXN0CisgKiBAcmw6IFRoZSB6ZmNwX3JlcWxpc3Qgd2hlcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzCisgKiBAbGlzdDogVGhlIGxpc3Qgd2hlcmUgdG8gbW92ZSBhbGwgZW50cmllcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X21vdmUoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgWkZDUF9SRVFfTElTVF9CVUNLRVRTOyBpKyspCisJCWxpc3Rfc3BsaWNlX2luaXQoJnJsLT5idWNrZXRzW2ldLCBsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYgLyogWkZDUF9SRVFMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggOGU2ZmM2OC4uYzNjNDE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW50ZXJmYWNlIHRvIExpbnV4IFNDU0kgbWlkbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kZXB0aCA9IDMyOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlX2RlcHRoLCBkZWZhdWx0X2RlcHRoLCB1aW50LCAwNjAwKTsKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2RwbnQtPmhvc3RkYXRhOwogCXVuaXQtPmRldmljZSA9IE5VTEw7Ci0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCkBAIC01OSwxMCArNjAsOSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwogCXNldF9ob3N0X2J5dGUoc2NwbnQsIHJlc3VsdCk7Ci0JaWYgKChzY3BudC0+ZGV2aWNlICE9IE5VTEwpICYmIChzY3BudC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOwotCS8qIHJldHVybiBkaXJlY3RseSAqLworCXpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKGFkYXB0ZXItPmRiZiwgc2NwbnQpOwogCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogfQogCkBAIC04NiwxOCArODYsMTAgQEAKIAlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCi0JQlVHX09OKCFhZGFwdGVyIHx8IChhZGFwdGVyICE9IHVuaXQtPnBvcnQtPmFkYXB0ZXIpKTsKLQlCVUdfT04oIXNjcG50LT5zY3NpX2RvbmUpOwotCi0JaWYgKHVubGlrZWx5KCF1bml0KSkgewotCQl6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHNjcG50LCBESURfTk9fQ09OTkVDVCk7Ci0JCXJldHVybiAwOwotCX0KLQogCXNjc2lfcmVzdWx0ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmICh1bmxpa2VseShzY3NpX3Jlc3VsdCkpIHsKIAkJc2NwbnQtPnJlc3VsdCA9IHNjc2lfcmVzdWx0OwotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOworCQl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChhZGFwdGVyLT5kYmYsIHNjcG50KTsKIAkJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE4OSw5ICsxODEsNyBAQAogCS8qIGF2b2lkIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbGF0ZSBub3JtYWwgY29tcGxldGlvbiBhbmQgYWJvcnQgKi8KIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0Jb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIG9sZF9yZXFpZCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCW9sZF9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLT5yZXFfbGlzdCwgb2xkX3JlcWlkKTsKIAlpZiAoIW9sZF9yZXEpIHsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAkJemZjcF9kYmZfc2NzaV9hYm9ydCgibHRlMSIsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwsCkBAIC01MjEsNyArNTExLDcgQEAKIAogCWlmIChwb3J0KSB7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJzY3RycGkxIiwgTlVMTCk7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfQogfQogCkBAIC01NjMsMjMgKzU1MywyMyBAQAogCiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfQUREOwogCiAJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5ycG9ydF93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKIAogCWlmIChwb3J0LT5ycG9ydCAmJiBxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsCiAJCQkJICAgICAgJnBvcnQtPnJwb3J0X3dvcmspKQogCQlyZXR1cm47CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQpAQCAtNjA4LDcgKzU5OCw3IEBACiAJCX0KIAl9CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIApAQCAtNjI2LDcgKzYxNiw3IEBACiAJCQkJIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikKIAkJCQkJCSZ1bml0LT5mY3BfbHVuKSwgMCk7CiAKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiB9CiAKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggZjUzOWUwMC4uYTQzMDM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBzeXNmcyBhdHRyaWJ1dGVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE5LDggKzE5LDcgQEAKIAkJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdCxcCiAJCQkJCQkgICBjaGFyICpidWYpCQkgICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCi0Jc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLAkgICAgICAgXAotCQkJCQkgICAgICAgc3lzZnNfZGV2aWNlKTsJCSAgICAgICBcCisJc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLCBkZXYpOyAgICBcCiAJCQkJCQkJCQkgICAgICAgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsJCQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXApAQCAtODcsOCArODYsNyBAQAogCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKIAkJCQkJCWNoYXIgKmJ1ZikJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsCSAgICAgICBcCi0JCQkJCSAgICAgICBzeXNmc19kZXZpY2UpOwkJICAgICAgIFwKKwlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsIGRldik7ICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKGF0b21pY19yZWFkKCZfZmVhdC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSAgICAgICBcCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwkJCQkgICAgICAgXApAQCAtOTksMTIgKzk3LDExIEBACiAJCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXAogCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVwKIHsJCQkJCQkJCQkgICAgICAgXAotCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwJICAgICAgIFwKLQkJCQkJICAgICAgIHN5c2ZzX2RldmljZSk7CQkgICAgICAgXAorCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwgZGV2KTsgICAgXAogCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJCSAgICAgICBcCiAJaW50IHJldHZhbCA9IDA7CQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotCWlmICghKF9mZWF0ICYmIGdldF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpKSkJCSAgICAgICBcCisJaWYgKCEoX2ZlYXQgJiYgZ2V0X2RldmljZSgmX2ZlYXQtPmRldikpKQkJCSAgICAgICBcCiAJCXJldHVybiAtRUJVU1k7CQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgfHwgdmFsICE9IDApIHsJCQkgICAgICAgXApAQCAtMTE4LDcgKzExNSw3IEBACiAJCQkJICBfcmVvcGVuX2lkLCBOVUxMKTsJCQkgICAgICAgXAogCXpmY3BfZXJwX3dhaXQoX2FkYXB0ZXIpOwkJCQkJICAgICAgIFwKIG91dDoJCQkJCQkJCQkgICAgICAgXAotCXB1dF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpOwkJCQkgICAgICAgXAorCXB1dF9kZXZpY2UoJl9mZWF0LT5kZXYpOwkJCQkJICAgICAgIFwKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIHN0YXRpYyBaRkNQX0RFVl9BVFRSKF9mZWF0LCBmYWlsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLAkJCSAgICAgICBcCkBAIC0yMjQsMTAgKzIyMSwxMCBAQAogCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jayk7CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsICJzeXByc18xIiwgTlVMTCk7Ci0JemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogIG91dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwpAQCAtMjU4LDEzICsyNTUsMTIgQEAKIAkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1NjQgZmNwX2x1bjsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkpCisJaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZmY3BfbHVuKSkKQEAgLTI4MCw3ICsyNzYsNyBAQAogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X2FkZCwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X2FkZF9zdG9yZSk7CkBAIC0yODksMTMgKzI4NSwxMiBAQAogCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXU2NCBmY3BfbHVuOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKSkKKwlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPmRldikpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmZjcF9sdW4pKQpAQCAtMzE0LDEyICszMDksMTIgQEAKIAlsaXN0X2RlbCgmdW5pdC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwogCi0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCiAJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAic3l1cnNfMSIsIE5VTEwpOwotCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CisJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2LCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X3JlbW92ZSwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X3JlbW92ZV9zdG9yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCA3NWFjMTliLi5mYzJmNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAJcGggPSAwOwogCWlmIChkcCkKLQkJcGggPSBkcC0+bm9kZTsKKwkJcGggPSBkcC0+cGhhbmRsZTsKIAogCWRhdGEtPmN1cnJlbnRfbm9kZSA9IGRwOwogCSooKGludCAqKSBvcC0+b3Byb21fYXJyYXkpID0gcGg7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAogCQlkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAkJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7Ci0JCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBkcC0+bm9kZTsKKwkJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IGRwLT5waGFuZGxlOwogCQlvcC0+b3Byb21fc2l6ZSA9IHNpemVvZihpbnQpOwogCQllcnIgPSBjb3B5b3V0KGFyZ3AsIG9wLCBidWZzaXplICsgc2l6ZW9mKGludCkpOwogCkBAIC0yNzMsNyArMjczLDcgQEAKIAogCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgob3AtPm9wcm9tX2FycmF5KTsKIAlpZiAoZHApCi0JCXBoID0gZHAtPm5vZGU7CisJCXBoID0gZHAtPnBoYW5kbGU7CiAJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7CiAJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IHBoOwogCW9wLT5vcHJvbV9zaXplID0gc2l6ZW9mKGludCk7CkBAIC01NDAsNyArNTQwLDcgQEAKIAkJfQogCX0KIAlpZiAoZHApCi0JCW5kID0gZHAtPm5vZGU7CisJCW5kID0gZHAtPnBoYW5kbGU7CiAJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbmQsIHNpemVvZihwaGFuZGxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NzAsNyArNTcwLDcgQEAKIAljYXNlIE9QSU9DR0VUT1BUTk9ERToKIAkJQlVJTERfQlVHX09OKHNpemVvZihwaGFuZGxlKSAhPSBzaXplb2YoaW50KSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmb3B0aW9uc19ub2RlLT5ub2RlLCBzaXplb2YocGhhbmRsZSkpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvcHRpb25zX25vZGUtPnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCmluZGV4IGI4OThkMzguLmU0MGNkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKKysrIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwpAQCAtMzkyNCw3ICszOTI0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotCWlmICgocF9zY2NiLT5UYXJnSUQgPiBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+IE1BWF9MVU4pKSB7CisJaWYgKChwX3NjY2ItPlRhcmdJRCA+PSBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+PSBNQVhfTFVOKSkgewogCQlyZXR1cm47CiAJfQogCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKaW5kZXggYTkzYTUwNC4uMTM2YjQ5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDEwIEBACiAjZGVmaW5lIEZXX1ZFUl9MRU4JMzIKICNkZWZpbmUgTUNDX1FfTEVOCTEyOAogI2RlZmluZSBNQ0NfQ1FfTEVOCTI1NgorI2RlZmluZSBNQVhfTUNDX0NNRAkxNgorLyogQmxhZGVFbmdpbmUgR2VuZXJhdGlvbiBudW1iZXJzICovCisjZGVmaW5lIEJFX0dFTjIgMgorI2RlZmluZSBCRV9HRU4zIDMKIAogc3RydWN0IGJlX2RtYV9tZW0gewogCXZvaWQgKnZhOwpAQCAtNTcsNiArNjEsMTEgQEAKIAlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPmhlYWQgKiBxLT5lbnRyeV9zaXplOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX2dldF93cmIoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsIHVuc2lnbmVkIGludCB3cmJfbnVtKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgd3JiX251bSAqIHEtPmVudHJ5X3NpemU7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfdGFpbF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQogewogCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+dGFpbCAqIHEtPmVudHJ5X3NpemU7CkBAIC0xMDQsMTUgKzExMywxOSBAQAogCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCiAJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKIAotCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLwotCXZvaWQgKCphc3luY19jYikgKHZvaWQgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7Ci0Jdm9pZCAqYWRhcHRlcl9jdHh0OworCXdhaXRfcXVldWVfaGVhZF90IG1jY193YWl0W01BWF9NQ0NfQ01EICsgMV07CisJdW5zaWduZWQgaW50IG1jY190YWdbTUFYX01DQ19DTURdOworCXVuc2lnbmVkIGludCBtY2NfbnVtdGFnW01BWF9NQ0NfQ01EICsgMV07CisJdW5zaWduZWQgc2hvcnQgbWNjX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IG1jY19mcmVlX2luZGV4OworCXVuc2lnbmVkIGludCBtY2NfdGFnX2F2YWlsYWJsZTsKIH07CiAKICNpbmNsdWRlICJiZV9jbWRzLmgiCiAKICNkZWZpbmUgUEFHRV9TSElGVF80SyAxMgogI2RlZmluZSBQQUdFX1NJWkVfNEsgKDEgPDwgUEFHRV9TSElGVF80SykKKyNkZWZpbmUgbWNjX3RpbWVvdXQJCTEyMDAwMCAvKiA1cyB0aW1lb3V0ICovCiAKIC8qIFJldHVybnMgbnVtYmVyIG9mIHBhZ2VzIHNwYW5uZWQgYnkgdGhlIGRhdGEgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHIgKi8KICNkZWZpbmUgUEFHRVNfNEtfU1BBTk5FRChfYWRkcmVzcywgc2l6ZSkgCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCmluZGV4IGYwMDg3MDguLjY3MDk4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImJlX21nbXQuaCIKICNpbmNsdWRlICJiZV9tYWluLmgiCiAKLXN0YXRpYyB2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQordm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKIAl1MzIgdmFsID0gMDsKQEAgLTI5LDYgKzI5LDUyIEBACiAJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9NQ0NRX09GRlNFVCk7CiB9CiAKK3Vuc2lnbmVkIGludCBhbGxvY19tY2NfdGFnKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKKwl1bnNpZ25lZCBpbnQgbnVtID0gMDsKKworbWNjX3RhZ19yZHk6CisJaWYgKHBoYmEtPmN0cmwubWNjX3RhZ19hdmFpbGFibGUpIHsKKwkJdGFnID0gcGhiYS0+Y3RybC5tY2NfdGFnW3BoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4XTsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnW3BoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4XSA9IDA7CisJCXBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddID0gMDsKKwl9IGVsc2UgeworCQl1ZGVsYXkoMTAwKTsKKwkJbnVtKys7CisJCWlmIChudW0gPCBtY2NfdGltZW91dCkKKwkJCWdvdG8gbWNjX3RhZ19yZHk7CisJfQorCWlmICh0YWcpIHsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnX2F2YWlsYWJsZS0tOworCQlpZiAocGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXggPT0gKE1BWF9NQ0NfQ01EIC0gMSkpCisJCQlwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4Kys7CisJfQorCXJldHVybiB0YWc7Cit9CisKK3ZvaWQgZnJlZV9tY2NfdGFnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHVuc2lnbmVkIGludCB0YWcpCit7CisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXRhZyA9IHRhZyAmIDB4MDAwMDAwRkY7CisJY3RybC0+bWNjX3RhZ1tjdHJsLT5tY2NfZnJlZV9pbmRleF0gPSB0YWc7CisJaWYgKGN0cmwtPm1jY19mcmVlX2luZGV4ID09IChNQVhfTUNDX0NNRCAtIDEpKQorCQljdHJsLT5tY2NfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQljdHJsLT5tY2NfZnJlZV9pbmRleCsrOworCWN0cmwtPm1jY190YWdfYXZhaWxhYmxlKys7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Cit9CisKK2Jvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCit7CisJcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCisJCSAgQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX01BU0spID09CisJCSAgQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGJlX21jY19jb21wbF9pc19uZXcoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCiB7CiAJaWYgKGNvbXBsLT5mbGFncyAhPSAwKSB7CkBAIC02NCwxMiArMTEwLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKQoraW50IGJlX21jY19jb21wbF9wcm9jZXNzX2lzcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKLQlyZXR1cm4gKCgodHJhaWxlciA+PiBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQpICYKLQkJICBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSykgPT0KLQkJICBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworCXUxNiBjb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IHRhZzsKKworCWJlX2R3c19sZV90b19jcHUoY29tcGwsIDQpOworCisJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJLyogVGhlIGN0cmwubWNjX251bXRhZ1t0YWddIGlzIGZpbGxlZCB3aXRoCisJICogWzMxXSA9IHZhbGlkLCBbMzA6MjRdID0gUnN2ZCwgWzIzOjE2XSA9IHdyYiwgWzE1OjhdID0gZXh0ZF9zdGF0dXMsCisJICogWzc6MF0gPSBjb21wbF9zdGF0dXMKKwkgKi8KKwl0YWcgPSAoY29tcGwtPnRhZzAgJiAweDAwMDAwMEZGKTsKKwlleHRkX3N0YXR1cyA9IChjb21wbC0+c3RhdHVzID4+IENRRV9TVEFUVVNfRVhURF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0VYVERfTUFTSzsKKworCWN0cmwtPm1jY19udW10YWdbdGFnXSAgPSAweDgwMDAwMDAwOworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoY29tcGwtPnRhZzAgJiAweDAwRkYwMDAwKTsKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gfD0gKGV4dGRfc3RhdHVzICYgMHgwMDAwMDBGRikgPDwgODsKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gfD0gKGNvbXBsX3N0YXR1cyAmIDB4MDAwMDAwRkYpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+bWNjX3dhaXRbdGFnXSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpiZV9tY2NfY29tcGxfZ2V0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKQEAgLTg5LDcgKzE1Myw3IEBACiAJaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKGNsc19zZXNzaW9uLT5kZF9kYXRhLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogfQogCi1zdGF0aWMgdm9pZCBiZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCit2b2lkIGJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKIAkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKmV2dCkKIHsKIAlzd2l0Y2ggKGV2dC0+cG9ydF9saW5rX3N0YXR1cykgewpAQCAtOTcsMTMgKzE2MSwxMyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJMaW5rIERvd24gb24gUGh5c2ljYWwgUG9ydCAlZCBcbiIsCiAJCQkJCQlldnQtPnBoeXNpY2FsX3BvcnQpOwogCQlwaGJhLT5zdGF0ZSB8PSBCRV9BREFQVEVSX0xJTktfRE9XTjsKKwkJaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHBoYmEtPnNob3N0LAorCQkJCQkgICAgYmUyaXNjc2lfZmFpbF9zZXNzaW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBBU1lOQ19FVkVOVF9MSU5LX1VQOgogCQlwaGJhLT5zdGF0ZSA9IEJFX0FEQVBURVJfVVA7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgVVAgb24gUGh5c2ljYWwgUG9ydCAlZCBcbiIsCiAJCQkJCQlldnQtPnBoeXNpY2FsX3BvcnQpOwotCQlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24ocGhiYS0+c2hvc3QsCi0JCQkJCSAgICBiZTJpc2NzaV9mYWlsX3Nlc3Npb24pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJVbmV4cGVjdGVkIEFzeW5jIE5vdGlmaWNhdGlvbiAlZCBvbiIKQEAgLTE2Miw3ICsyMjYsNiBAQAogLyogV2FpdCB0aWxsIG5vIG1vcmUgcGVuZGluZyBtY2MgcmVxdWVzdHMgYXJlIHByZXNlbnQgKi8KIHN0YXRpYyBpbnQgYmVfbWNjX3dhaXRfY29tcGwoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewotI2RlZmluZSBtY2NfdGltZW91dAkJMTIwMDAwIC8qIDVzIHRpbWVvdXQgKi8KIAlpbnQgaSwgc3RhdHVzOwogCWZvciAoaSA9IDA7IGkgPCBtY2NfdGltZW91dDsgaSsrKSB7CiAJCXN0YXR1cyA9IGJlaXNjc2lfcHJvY2Vzc19tY2MocGhiYSk7CkBAIC0zNzIsOSArNDM1LDEwIEBACiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJm1jY3EtPnVzZWQpID49IG1jY3EtPmxlbik7CiAJd3JiID0gcXVldWVfaGVhZF9ub2RlKG1jY3EpOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJd3JiLT50YWcwID0gKG1jY3EtPmhlYWQgJiAweDAwMDAwMEZGKSA8PCAxNjsKIAlxdWV1ZV9oZWFkX2luYyhtY2NxKTsKIAlhdG9taWNfaW5jKCZtY2NxLT51c2VkKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCXJldHVybiB3cmI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCmluZGV4IDVkZThhY2I5Li40OWZjYzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQyNSwxNCArNDI1LDIwIEBACiBpbnQgYmVfcG9sbF9tY2Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiB1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCiAJCQkJICAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKLWludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdTggKm1hY19hZGRyKTsKLQordW5zaWduZWQgaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgZnJlZV9tY2NfdGFnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHVuc2lnbmVkIGludCB0YWcpOwogLypJU0NTSSBGdW5jdHVpb25zICovCiBpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiAKIHN0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSk7CiBzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWNjcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwogaW50IGJlX21jY19ub3RpZnlfd2FpdChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit1bnNpZ25lZCBpbnQgYWxsb2NfbWNjX3RhZyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordm9pZCBiZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCXN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICpldnQpOworaW50IGJlX21jY19jb21wbF9wcm9jZXNzX2lzcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCk7CiAKIGludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKIApAQCAtNDQ4LDYgKzQ1NCw4IEBACiBpbnQgYmVfY21kX3dyYnFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwKIAkJICAgICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICp3cmJxKTsKIAorYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcik7CisKIHN0cnVjdCBiZV9kZWZhdWx0X3BkdV9jb250ZXh0IHsKIAl1MzIgZHdbNF07CiB9IF9fcGFja2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwppbmRleCBkNTg3YjAzNjJmLi4yOWEzYWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTAxLDYgKzEwMSw3IEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3MgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBzZXNzLT5kZF9kYXRhOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3lcbiIpOwogCXBjaV9wb29sX2Rlc3Ryb3koYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCk7CiAJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiB9CkBAIC0yMjQsNiArMjI1LDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCWludCBsZW4gPSAwOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKQEAgLTI1NCw2ICsyNTYsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlpbnQgcmV0OwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3NldF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJcmV0ID0gaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0yNzEsOCArMjc0LDggQEAKIAkJCWNvbm4tPm1heF9yZWN2X2RsZW5ndGggPSA2NTUzNjsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9NQVhfQlVSU1Q6Ci0JCWlmIChzZXNzaW9uLT5maXJzdF9idXJzdCA+IDI2MjE0NCkKLQkJCXNlc3Npb24tPmZpcnN0X2J1cnN0ID0gMjYyMTQ0OworCQlpZiAoc2Vzc2lvbi0+bWF4X2J1cnN0ID4gMjYyMTQ0KQorCQkJc2Vzc2lvbi0+bWF4X2J1cnN0ID0gMjYyMTQ0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTI5MywxMiArMjk2LDQxIEBACiAJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X21hY19hZGRyICpyZXNwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJdW5zaWduZWQgaW50IHRhZywgd3JiX251bTsKIAlpbnQgbGVuID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5xOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJc3dpdGNoIChwYXJhbSkgewogCWNhc2UgSVNDU0lfSE9TVF9QQVJBTV9IV0FERFJFU1M6Ci0JCWJlX2NtZF9nZXRfbWFjX2FkZHIocGhiYSwgcGhiYS0+bWFjX2FkZHJlc3MpOwotCQlsZW4gPSBzeXNmc19mb3JtYXRfbWFjKGJ1ZiwgcGhiYS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJdGFnID0gYmVfY21kX2dldF9tYWNfYWRkcihwaGJhKTsKKwkJaWYgKCF0YWcpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9nZXRfbWFjX2FkZHIgRmFpbGVkIFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisKKwkJd3JiX251bSA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDBGRjAwMDApID4+IDE2OworCQlleHRkX3N0YXR1cyA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMEZGMDApID4+IDg7CisJCXN0YXR1cyA9IHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwMDBGRjsKKwkJaWYgKHN0YXR1cyB8fCBleHRkX3N0YXR1cykgeworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2dldF9tYWNfYWRkciBGYWlsZWQiCisJCQkJCSAgICAiIHN0YXR1cyA9ICVkIGV4dGRfc3RhdHVzID0gJWQgXG4iLAorCQkJCQkgICAgc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQl3cmIgPSBxdWV1ZV9nZXRfd3JiKG1jY3EsIHdyYl9udW0pOworCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQkJcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJCW1lbWNweShwaGJhLT5tYWNfYWRkcmVzcywgcmVzcC0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywKKwkJCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaXNjc2lfaG9zdF9nZXRfcGFyYW0oc2hvc3QsIHBhcmFtLCBidWYpOwpAQCAtMzc4LDYgKzQxMCw3IEBACiAJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CiAJc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgcGFyYW1zOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0YXJ0XG4iKTsKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zKSk7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKQpAQCAtNDIyLDggKzQ1NSwxNCBAQAogewogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOworCXVuc2lnbmVkIGludCB0YWcsIHdyYl9udW07CiAJaW50IHJldCA9IC0xOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm5cbiIpOwogCWJlaXNjc2lfZXAtPmVwX2NpZCA9IGJlaXNjc2lfZ2V0X2NpZChwaGJhKTsKIAlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID09IDB4RkZGRikgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJObyBmcmVlIGNpZCBhdmFpbGFibGVcbiIpOwpAQCAtNDMxLDE1ICs0NzAsNDQgQEAKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZCAiLAogCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKLQlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWRdID0gZXA7Ci0JaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+Ci0JICAgIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpKSB7CisJcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkIC0KKwkJICAgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+IChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsKKwkJCQkgIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMikpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDA7Ci0JcmV0dXJuIG1nbXRfb3Blbl9jb25uZWN0aW9uKHBoYmEsIGRzdF9hZGRyLCBiZWlzY3NpX2VwKTsKKwl0YWcgPSBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7CisJaWYgKCF0YWcpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCX0KKwl3cmJfbnVtID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJZXh0ZF9zdGF0dXMgPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDBGRjAwKSA+PiA4OworCXN0YXR1cyA9IHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwMDBGRjsKKwlpZiAoc3RhdHVzIHx8IGV4dGRfc3RhdHVzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIEZhaWxlZCIKKwkJCQkgICAgIiBzdGF0dXMgPSAlZCBleHRkX3N0YXR1cyA9ICVkIFxuIiwKKwkJCQkgICAgc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXdyYiA9IHF1ZXVlX2dldF93cmIobWNjcSwgd3JiX251bSk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKworCQlwdGNwY25jdF9vdXQgPSAJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IHB0Y3BjbmN0X291dC0+Y29ubmVjdGlvbl9oYW5kbGU7CisJCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDU5LDE0ICs1MjcsMTIgQEAKICAqIGJlaXNjc2lfZnJlZV9lcCAtIGZyZWUgZW5kcG9pbnQKICAqIEBlcDoJcG9pbnRlciB0byBpc2NzaSBlbmRwb2ludCBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX2VwKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApCitzdGF0aWMgdm9pZCBiZWlzY3NpX2ZyZWVfZXAoc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXApCiB7Ci0Jc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOwogCiAJYmVpc2NzaV9wdXRfY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAJYmVpc2NzaV9lcC0+cGhiYSA9IE5VTEw7Ci0JaXNjc2lfZGVzdHJveV9lbmRwb2ludChlcCk7CiB9CiAKIC8qKgpAQCAtNDk1LDkgKzU2MSw5IEBACiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCi0JaWYgKHBoYmEtPnN0YXRlKSB7CisJaWYgKHBoYmEtPnN0YXRlICE9IEJFX0FEQVBURVJfVVApIHsKIAkJcmV0ID0gLUVCVVNZOwotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJUaGUgQWRhcGV0IHN0YXRlIGlzIE5vdCBVUCBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJUaGUgQWRhcHRlciBzdGF0ZSBpcyBOb3QgVVAgXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKQEAgLTUwOSw5ICs1NzUsOSBAQAogCiAJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCWJlaXNjc2lfZXAtPnBoYmEgPSBwaGJhOwotCisJYmVpc2NzaV9lcC0+b3BlbmlzY3NpX2VwID0gZXA7CiAJaWYgKGJlaXNjc2lfb3Blbl9jb25uKGVwLCBOVUxMLCBkc3RfYWRkciwgbm9uX2Jsb2NraW5nKSkgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGJlaXNjc2lfb3Blbl9jb25uIFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9lcDsKIAl9CkBAIC01MTksNyArNTg1LDcgQEAKIAlyZXR1cm4gZXA7CiAKIGZyZWVfZXA6Ci0JYmVpc2NzaV9mcmVlX2VwKGVwKTsKKwliZWlzY3NpX2ZyZWVfZXAoYmVpc2NzaV9lcCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIApAQCAtNTQ2LDIwICs2MTIsMjIgQEAKICAqIEBlcDogVGhlIGlzY3NpIGVuZHBvaW50CiAgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCiAgKi8KLXN0YXRpYyBpbnQgYmVpc2NzaV9jbG9zZV9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCBmbGFnKQorc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0ICBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLCBpbnQgZmxhZykKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXVuc2lnbmVkIGludCB0YWc7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKIAotCWlmIChNR01UX1NUQVRVU19TVUNDRVNTICE9Ci0JICAgIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkLAotCQlDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCkpIHsKKwl0YWcgPSBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCwgZmxhZyk7CisJaWYgKCF0YWcpIHsKIAkJU0VfREVCVUcoREJHX0xWTF84LCAidXBsb2FkIGZhaWxlZCBmb3IgY2lkIDB4JXgiLAogCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAJCXJldCA9IC0xOworCX0gZWxzZSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzQsMTkgKzY0MiwxNyBAQAogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKIAlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7Ci0JaW50IGZsYWcgPSAwOwogCiAJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCXBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOwotCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfZGlzY29ubmVjdFxuIik7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0IGZvciBlcF9jaWQgPSAlZFxuIiwKKwkJCSAgICAgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAogCWlmIChiZWlzY3NpX2VwLT5jb25uKSB7CiAJCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CiAJCWlzY3NpX3N1c3BlbmRfcXVldWUoYmVpc2NzaV9jb25uLT5jb25uKTsKLQkJYmVpc2NzaV9jbG9zZV9jb25uKGVwLCBmbGFnKTsKIAl9CiAKLQliZWlzY3NpX2ZyZWVfZXAoZXApOwogfQogCiAvKioKQEAgLTYxOSwyMyArNjg1LDMxIEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCB0YWc7CiAJdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnID0gQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0g7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcFxuIik7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wICwgbm8gYmVpc2NzaV9lcFxuIik7CiAJCXJldHVybjsKIAl9Ci0Jc3RhdHVzID0gbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcCwKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcCAgZXBfY2lkID0gJWRcbiIsCisJCQkgICAgIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJdGFnID0gbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcCwKIAkJCQkJICAgIGJlaXNjc2lfZXAtPmVwX2NpZCwgMSwKIAkJCQkJICAgIHNhdmVjZmdfZmxhZyk7Ci0JaWYgKHN0YXR1cyAhPSBNR01UX1NUQVRVU19TVUNDRVNTKSB7CisJaWYgKCF0YWcpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLAogCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCiAJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQorCWJlaXNjc2lfY2xvc2VfY29ubihiZWlzY3NpX2VwLCBDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCk7CisJYmVpc2NzaV9mcmVlX2VwKGJlaXNjc2lfZXApOworCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoYmVpc2NzaV9lcC0+b3BlbmlzY3NpX2VwKTsKIAliZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCWlzY3NpX2Nvbm5fc3RvcChjbHNfY29ubiwgZmxhZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCmluZGV4IGY5MmZmYzUuLjFmNTEyYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwppbmRleCAxYTU1N2ZhLi43YzIyNjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQwLDcgKzQwLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVfaW9wb2xsX2J1ZGdldCA9IDEwOwogc3RhdGljIHVuc2lnbmVkIGludCBiZV9tYXhfcGh5c19zaXplID0gNjQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGVuYWJsZV9tc2l4ID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmluZ19tb2RlOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVpc2NzaV9wY2lfaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDICIgIiBCVUlMRF9TVFIpOwpAQCAtNjIsMTAgKzYxLDEwIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0gUENJIERyaXZlciBvcGVyYXRpb25zIGFuZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVpc2NzaV9wY2lfaWRfdGFibGUpID0gewogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgQkVfREVWSUNFX0lEMikgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQxKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMykgfSwKLQl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQ0KSB9LAogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKQEAgLTExMiw2ICsxMTEsNyBAQAogCW1lbXNldChwaGJhLCAwLCBzaXplb2YoKnBoYmEpKTsKIAlwaGJhLT5zaG9zdCA9IHNob3N0OwogCXBoYmEtPnBjaWRldiA9IHBjaV9kZXZfZ2V0KHBjaWRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgcGhiYSk7CiAKIAlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsICZwaGJhLT5wY2lkZXYtPmRldikpCiAJCWdvdG8gZnJlZV9kZXZpY2VzOwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJCQkJc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKIAl1OCBfX2lvbWVtICphZGRyOworCWludCBwY2ljZmdfcmVnOwogCiAJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKSwKIAkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMikpOwpAQCAtMTU5LDEzICsxNjAsMTkgQEAKIAlwaGJhLT5kYl92YSA9IGFkZHI7CiAJcGhiYS0+ZGJfcGEudS5hNjQuYWRkcmVzcyA9ICBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCA0KTsKIAotCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSksCi0JCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDEpKTsKKwlpZiAocGhiYS0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKQorCQlwY2ljZmdfcmVnID0gMTsKKwllbHNlCisJCXBjaWNmZ19yZWcgPSAwOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBwY2ljZmdfcmVnKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgcGNpY2ZnX3JlZykpOworCiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJZ290byBwY2lfbWFwX2VycjsKIAlwaGJhLT5jdHJsLnBjaWNmZyA9IGFkZHI7CiAJcGhiYS0+cGNpX3ZhID0gYWRkcjsKLQlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCXBoYmEtPnBjaV9wYS51LmE2NC5hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgcGNpY2ZnX3JlZyk7CiAJcmV0dXJuIDA7CiAKIHBjaV9tYXBfZXJyOgpAQCAtMjMwLDI5ICsyMzcsMjcgQEAKIAogc3RhdGljIHZvaWQgYmVpc2NzaV9nZXRfcGFyYW1zKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKLQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsID0gQkUyX0lPX0RFUFRIOwotCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsID0gQkUyX01BWF9TRVNTSU9OUzsKLQlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsID0gQkUyX0FTWU5DUERVUzsKLQlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCA9IEJFMl9NQVhfSUNEUyAvIDI7CisJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCA9IChwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50CisJCQkJICAgIC0gKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQKKwkJCQkgICAgKyBCRTJfVE1GUworCQkJCSAgICArIEJFMl9OT1BPVVRfUkVRKSk7CisJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50OworCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50OzsKKwlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2RfY291bnQ7OwogCXBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyA9IEJFMl9TR0U7CiAJcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3ogPSBCRTJfREVGUERVX0hEUl9TWjsKIAlwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3ogPSBCRTJfREVGUERVX0RBVEFfU1o7CiAJcGhiYS0+cGFyYW1zLmVxX3RpbWVyID0gNjQ7CiAJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0KLQkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX0FTWU5DUERVUykgLwotCQkJCQkJCQk1MTIpICsgMSkgKiA1MTI7CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCAqIDIKKwkJCQkgICAgKyBCRTJfVE1GUykgLyA1MTIpICsgMSkgKiA1MTI7CiAJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0gKHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA8IDEwMjQpCiAJCQkJPyAxMDI0IDogcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzOwogCVNFX0RFQlVHKERCR19MVkxfOCwgInBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcz0lZCBcbiIsCi0JCSBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMpOworCQkJICAgICBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMpOwogCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcyA9Ci0JICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KLQkJCQkJCQkJNTEyKSArIDEpICogNTEyOwotCVNFX0RFQlVHKERCR19MVkxfOCwKLQkJInBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcz0lZCBCRTJfQ01EU19QRVJfQ1hOPSVkIgotCQkiQkUyX0xPR09VVFM9JWQgQkUyX1RNRlM9JWQgQkUyX0FTWU5DUERVUz0lZCBcbiIsCi0JCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcywgQkUyX0NNRFNfUEVSX0NYTiwKLQkJQkUyX0xPR09VVFMsIEJFMl9UTUZTLCBCRTJfQVNZTkNQRFVTKTsKKwkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCAqIDIKKwkJCQkgICAgKyBCRTJfVE1GUykgLyA1MTIpICsgMSkgKiA1MTI7CiAJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biA9IDI1NjsKIH0KIApAQCAtNDQzLDcgKzQ0OCw3IEBACiAJCQlpZiAocGhiYS0+dG9kb19tY2NfY3EpCiAJCQkJcXVldWVfd29yayhwaGJhLT53cSwgJnBoYmEtPndvcmtfY3FzKTsKIAotCQlpZiAoKG51bV9tY2NlcV9wcm9jZXNzZWQpICYmICghbnVtX2lvZXFfcHJvY2Vzc2VkKSkKKwkJCWlmICgobnVtX21jY2VxX3Byb2Nlc3NlZCkgJiYgKCFudW1faW9lcV9wcm9jZXNzZWQpKQogCQkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwKIAkJCQkJICAgICAgKG51bV9pb2VxX3Byb2Nlc3NlZCArCiAJCQkJCSAgICAgICBudW1fbWNjZXFfcHJvY2Vzc2VkKSAsIDEsIDEpOwpAQCAtNTYxLDYgKzU2Niw3IEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIElTQ1NJX09QX1JFSkVDVFxuIik7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgorCWNhc2UgSVNDU0lfT1BfVEVYVF9SU1A6CiAJCXRhc2sgPSBjb25uLT5sb2dpbl90YXNrOwogCQlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAkJbG9naW5faGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKilwcGR1OwpAQCAtNjMxLDI5ICs2MzcsMjkgQEAKICAqIGFsbG9jX3dyYl9oYW5kbGUgLSBUbyBhbGxvY2F0ZSBhIHdyYiBoYW5kbGUKICAqIEBwaGJhOiBUaGUgaGJhIHBvaW50ZXIKICAqIEBjaWQ6IFRoZSBjaWQgdG8gdXNlIGZvciBhbGxvY2F0aW9uCi0gKiBAaW5kZXg6IGluZGV4IGFsbG9jYXRpb24gYW5kIHdyYiBpbmRleAogICoKICAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCiAgKi8KLXN0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKLQkJCQkgICAgaW50IGluZGV4KQorc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkKQogewogCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7Ci0Jc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSwgKnB3cmJfaGFuZGxlX3RtcDsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwogCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWRdOwotCWlmIChwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSkgeworCWlmIChwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSA+PSAyKSB7CiAJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlWwogCQkJCQkgICAgcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleF07CiAJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlLS07Ci0JCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gcHdyYl9oYW5kbGUtPndyYl9pbmRleDsKIAkJaWYgKHB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXggPT0KIAkJCQkJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huIC0gMSkpCiAJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKIAkJZWxzZQogCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCsrOworCQlwd3JiX2hhbmRsZV90bXAgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbCisJCQkJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4XTsKKwkJcHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXggPSBwd3JiX2hhbmRsZV90bXAtPndyYl9pbmRleDsKIAl9IGVsc2UKIAkJcHdyYl9oYW5kbGUgPSBOVUxMOwogCXJldHVybiBwd3JiX2hhbmRsZTsKQEAgLTY3MSw5ICs2NzcsNyBAQAogZnJlZV93cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0LAogCQlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUpCiB7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXhdID0KLQkJCQkJICAgICAgIHB3cmJfaGFuZGxlOworCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXhdID0gcHdyYl9oYW5kbGU7CiAJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKIAlpZiAocHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID09IChwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huIC0gMSkpCiAJCXB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9IDA7CkBAIC03OTAsNiArNzk0LDcgQEAKIAkJbWVtY3B5KHRhc2stPnNjLT5zZW5zZV9idWZmZXIsIHNlbnNlLAogCQkgICAgICAgbWluX3QodTE2LCBzZW5zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkpOwogCX0KKwogCWlmIChpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9SRUFEKSB7CiAJCWlmIChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCiAJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKQpAQCAtODExLDYgKzgxNiw3IEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CiAKIAloZHIgPSAoc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT5vcGNvZGUgPSBJU0NTSV9PUF9MT0dPVVRfUlNQOwogCWhkci0+dDJ3YWl0ID0gNTsKIAloZHItPnQycmV0YWluID0gMDsKIAloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQpAQCAtODI1LDYgKzgzMSw5IEBACiAJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKwogCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCiAJCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5kbGVuZ3RoWzBdID0gMDsKKwloZHItPmRsZW5ndGhbMV0gPSAwOworCWhkci0+ZGxlbmd0aFsyXSA9IDA7CiAJaGRyLT5obGVuZ3RoID0gMDsKIAloZHItPml0dCA9IGlvX3Rhc2stPmxpYmlzY3NpX2l0dDsKIAlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7CkBAIC04MzksNiArODQ4LDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAogCWhkciA9IChzdHJ1Y3QgaXNjc2lfdG1fcnNwICopdGFzay0+aGRyOworCWhkci0+b3Bjb2RlID0gSVNDU0lfT1BfU0NTSV9UTUZVTkNfUlNQOwogCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCiAJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CiAJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KQEAgLTg1OSw3ICs4NjksNiBAQAogewogCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKIAlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSA9IE5VTEw7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwogCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2s7CkBAIC04NjcsMjIgKzg3NiwxNCBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCWlmIChyaW5nX21vZGUpIHsKLQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5zZ2xfaG5kbF9hcnJheVsoKHBzb2wtPgotCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLCBpY2RfaW5kZXgpIC8KLQkJCQkzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spID4+IDYpXTsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W3BzZ2xfaGFuZGxlLT5jaWRdOwotCQl0YXNrID0gcHNnbF9oYW5kbGUtPnRhc2s7Ci0JCXB3cmJfaGFuZGxlID0gTlVMTDsKLQl9IGVsc2UgewotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT4KKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT4KIAkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKLQkJCQlTT0xfQ0lEX01BU0spID4+IDYpXTsKLQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgogCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLwogCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKLQkJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwotCX0KKwl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7CiAKIAlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOwpAQCAtOTIzLDMxICs5MjQsMjMgQEAKIAlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiID0gTlVMTDsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChwc29sLT4KLQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywgaWNkX2luZGV4KSAvCi0JCQkgICAgICAzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spID4+IDYpXTsKLQkJdGFzayA9IHBzZ2xfaGFuZGxlLT50YXNrOwotCQl0eXBlID0gcHNnbF9oYW5kbGUtPnR5cGU7Ci0JfSBlbHNlIHsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPgotCQkJCXdyYl9jb250ZXh0WygocHNvbC0+ZHdbb2Zmc2V0b2YKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT5kd1tvZmZzZXRvZgogCQkJCShzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdCi0JCQkJJiBTT0xfQ0lEX01BU0spID4+IDYpXTsKLQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQkmIFNPTF9DSURfTUFTSykgPj4gNikgLQorCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CiAJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgd3JiX2luZGV4KSAvCiAJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNildOwotCQl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7Ci0JCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKLQkJdHlwZSA9IChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKLQkJCSBXUkJfVFlQRV9NQVNLKSA+PiAyODsKLQl9CisJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOworCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKKwl0eXBlID0gKHB3cmItPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSkgLyAzMl0gJgorCQkJCSBXUkJfVFlQRV9NQVNLKSA+PiAyODsKKwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBIV0hfVFlQRV9JTzoKQEAgLTk3OCwxNSArOTcxLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAocmluZ19tb2RlKQotCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJIkluIGh3aV9jb21wbGV0ZV9jbWQsIHVua25vd24gdHlwZSA9ICVkIgotCQkJCSJpY2RfaW5kZXggMHgleCBDSUQgMHgleFxuIiwgdHlwZSwKLQkJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywKLQkJCQlpY2RfaW5kZXgpIC8gMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KSwKLQkJCQlwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJZWxzZQotCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJCSJJbiBod2lfY29tcGxldGVfY21kLCB1bmtub3duIHR5cGUgPSAlZCIKIAkJCQkid3JiX2luZGV4IDB4JXggQ0lEIDB4JXhcbiIsIHR5cGUsCiAJCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsCkBAIC0xMDc3LDcgKzEwNjIsOCBAQAogCiAJV0FSTl9PTighcGFzeW5jX2hhbmRsZSk7CiAKLQlwYXN5bmNfaGFuZGxlLT5jcmkgPSAodW5zaWduZWQgc2hvcnQpYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOworCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCQkgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQ7CiAJcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyID0gaXNfaGVhZGVyOwogCXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW4gPSAoKHBkcGR1X2NxZS0+CiAJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KQEAgLTEzMjcsOSArMTMxMywxMCBAQAogCX0KIAogCXN0YXR1cyA9IGJlaXNjc2lfcHJvY2Vzc19hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLAotCQkJCQkgICBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCi0JCQkJCSAgIHBoZHIsIGhkcl9sZW4sIHBmaXJzdF9idWZmZXIsCi0JCQkJCSAgIGJ1Zl9sZW4pOworCQkJCQkgICAoYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpLAorCQkJCQkgICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKKwkJCQkJICAgIGJ1Zl9sZW4pOwogCiAJaWYgKHN0YXR1cyA9PSAwKQogCQlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgY3JpKTsKQEAgLTE0MjIsNiArMTQwOSw0OCBAQAogCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyKTsKIH0KIAorc3RhdGljIHZvaWQgIGJlaXNjc2lfcHJvY2Vzc19tY2NfaXNyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjX2NxOworCXN0cnVjdCAgYmVfbWNjX2NvbXBsICptY2NfY29tcGw7CisJdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQgPSAwOworCisJbWNjX2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5jcTsKKwltY2NfY29tcGwgPSBxdWV1ZV90YWlsX25vZGUobWNjX2NxKTsKKwltY2NfY29tcGwtPmZsYWdzID0gbGUzMl90b19jcHUobWNjX2NvbXBsLT5mbGFncyk7CisJd2hpbGUgKG1jY19jb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykgeworCisJCWlmIChudW1fcHJvY2Vzc2VkID49IDMyKSB7CisJCQlod2lfcmluZ19jcV9kYihwaGJhLCBtY2NfY3EtPmlkLAorCQkJCQludW1fcHJvY2Vzc2VkLCAwLCAwKTsKKwkJCW51bV9wcm9jZXNzZWQgPSAwOworCQl9CisJCWlmIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0FTWU5DX01BU0spIHsKKwkJCS8qIEludGVycHJldCBmbGFncyBhcyBhbiBhc3luYyB0cmFpbGVyICovCisJCQlpZiAoaXNfbGlua19zdGF0ZV9ldnQobWNjX2NvbXBsLT5mbGFncykpCisJCQkJLyogSW50ZXJwcmV0IGNvbXBsIGFzIGEgYXN5bmMgbGluayBldnQgKi8KKwkJCQliZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhwaGJhLAorCQkJCShzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqKSBtY2NfY29tcGwpOworCQkJZWxzZQorCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkJIiBVbnN1cHBvcnRlZCBBc3luYyBFdmVudCwgZmxhZ3MiCisJCQkJCSIgPSAweCUwOHggXG4iLCBtY2NfY29tcGwtPmZsYWdzKTsKKwkJfSBlbHNlIGlmIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0NPTVBMRVRFRF9NQVNLKSB7CisJCQliZV9tY2NfY29tcGxfcHJvY2Vzc19pc3IoJnBoYmEtPmN0cmwsIG1jY19jb21wbCk7CisJCQlhdG9taWNfZGVjKCZwaGJhLT5jdHJsLm1jY19vYmoucS51c2VkKTsKKwkJfQorCisJCW1jY19jb21wbC0+ZmxhZ3MgPSAwOworCQlxdWV1ZV90YWlsX2luYyhtY2NfY3EpOworCQltY2NfY29tcGwgPSBxdWV1ZV90YWlsX25vZGUobWNjX2NxKTsKKwkJbWNjX2NvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KG1jY19jb21wbC0+ZmxhZ3MpOworCQludW1fcHJvY2Vzc2VkKys7CisJfQorCisJaWYgKG51bV9wcm9jZXNzZWQgPiAwKQorCQlod2lfcmluZ19jcV9kYihwaGJhLCBtY2NfY3EtPmlkLCBudW1fcHJvY2Vzc2VkLCAxLCAwKTsKKworfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGJlaXNjc2lfcHJvY2Vzc19jcShzdHJ1Y3QgYmVfZXFfb2JqICpwYmVfZXEpCiB7CkBAIC0xNDMxLDcgKzE0NjAsOCBAQAogCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90X251bXAgPSAwOwogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKLQlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUgPSBOVUxMOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwogCiAJY3EgPSBwYmVfZXEtPmNxOwpAQCAtMTQ0MiwzMiArMTQ3MiwxMyBAQAogCSAgICAgICBDUUVfVkFMSURfTUFTSykgewogCQliZV9kd3NfbGVfdG9fY3B1KHNvbCwgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CiAKLQkJaWYgKHJpbmdfbW9kZSkgewotCQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5zZ2xfaG5kbF9hcnJheVsoKHNvbC0+Ci0JCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLAotCQkJCSAgICAgIGljZF9pbmRleCkgLyAzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spCi0JCQkJICAgICAgPj4gNildOwotCQkJYmVpc2NzaV9jb25uID0gcGhiYS0+Y29ubl90YWJsZVtwc2dsX2hhbmRsZS0+Y2lkXTsKLQkJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7Ci0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJICAgICAiQ29ubmVjdGlvbiB0YWJsZSBlbXB0eSBmb3IgY2lkID0gJWRcbiIsCi0JCQkJICAgICAgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9CisJCWVwID0gcGhiYS0+ZXBfYXJyYXlbKHUzMikgKChzb2wtPgorCQkJCSAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCSAgIFNPTF9DSURfTUFTSykgPj4gNikgLQorCQkJCSAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCi0JCX0gZWxzZSB7Ci0JCQliZWlzY3NpX2Nvbm4gPSBwaGJhLT5jb25uX3RhYmxlWyh1MzIpIChzb2wtPgotCQkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKLQkJCQkgU09MX0NJRF9NQVNLKSA+PiA2XTsKLQotCQkJaWYgKCFiZWlzY3NpX2Nvbm4gfHwgIWJlaXNjc2lfY29ubi0+ZXApIHsKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKLQkJCQkgICAgICh1MzIpKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKLQkJCQkgICAgIGNpZCkgLyAzMl0gJiBTT0xfQ0lEX01BU0spID4+IDYpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9CisJCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKIAogCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgewogCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgY3EtPmlkLApAQCAtMTUxMSwyMSArMTUyMiwxMyBAQAogCQljYXNlIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElEOgogCQljYXNlIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSOgogCQljYXNlIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQ6Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLAotCQkJCSAiQ1EgRXJyb3Igbm90aWZpY2F0aW9uIGZvciBjbWQuLiAiCi0JCQkJICJjb2RlICVkIGNpZCAweCV4XG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCQkgIkNRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kLi4gIgogCQkJCSAiY29kZSAlZCBjaWQgMHgleFxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCiAJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLwogCQkJCSAzMl0gJiBTT0xfQ0lEX01BU0spKTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWToKIAkJCVNFX0RFQlVHKERCR19MVkxfMSwKQEAgLTE1NDcsMzcgKzE1NTAsMjMgQEAKIAkJY2FzZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMOgogCQljYXNlIENYTl9LSUxMRURfVU5ERVJfUlVOX1JFU0lEVUFMOgogCQljYXNlIENYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk46Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IENJRCAiCi0JCQkJICIweCV4Li4uXG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IENJRCAiCiAJCQkJICIweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKLQkJCX0KKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKIAkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJCWJyZWFrOwogCQljYXNlIENYTl9LSUxMRURfUlNUX1NFTlQ6CiAJCWNhc2UgQ1hOX0tJTExFRF9SU1RfUkNWRDoKLQkJCWlmIChyaW5nX21vZGUpIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQiCi0JCQkJInJlY2VpdmVkL3NlbnQgb24gQ0lEIDB4JXguLi5cbiIsCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwotCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLCBwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgogCQkJCSJyZWNlaXZlZC9zZW50IG9uIENJRCAweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKLQkJCX0KKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKIAkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMTU4Niw4ICsxNTc1LDggQEAKIAkJCQkgInJlY2VpdmVkIG9uIENJRCAweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTYwNCw3ICsxNTkzLDcgQEAKIAlyZXR1cm4gdG90X251bXA7CiB9CiAKLXN0YXRpYyB2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwpAQCAtMTYyNCw2ICsxNjEzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CiAJCXBoYmEtPnRvZG9fbWNjX2NxID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJYmVpc2NzaV9wcm9jZXNzX21jY19pc3IocGhiYSk7CiAJfQogCiAJaWYgKHBoYmEtPnRvZG9fY3EpIHsKQEAgLTE2NjgsNyArMTY1OCw4IEBACiAJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOwogCiAJbF9zZyA9IHNnOwotCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLCBzZ19uZXh0KHNnKSkgeworCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLAorCQkJCQkJCSBzZyA9IHNnX25leHQoc2cpKSB7CiAJCWlmIChpbmRleCA9PSAwKSB7CiAJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKIAkJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CkBAIC0xNjc5LDExICsxNjcwLDcgQEAKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKIAkJCQkJCQlzZ19sZW4pOwogCQkJc2dlX2xlbiA9IHNnX2xlbjsKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCi0JCQkJCQkJMSk7CiAJCX0gZWxzZSB7Ci0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAotCQkJCQkJCTApOwogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfcjJ0X29mZnNldCwKIAkJCQkJCQlwd3JiLCBzZ2VfbGVuKTsKIAkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwpAQCAtMTcwNiwxMyArMTY5MywyNyBAQAogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAogCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOwogCi0JaWYgKG51bV9zZyA9PSAyKQotCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLCAxKTsKKwlpZiAobnVtX3NnID09IDEpIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCX0gZWxzZSBpZiAobnVtX3NnID09IDIpIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsCisJCQkJCQkJCTEpOworCX0gZWxzZSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwl9CiAJc2cgPSBsX3NnOwogCXBzZ2wrKzsKIAlwc2dsKys7CiAJb2Zmc2V0ID0gMDsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fc2c7IGluZGV4KyssIHNnX25leHQoc2cpLCBwc2dsKyspIHsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fc2c7IGluZGV4KyssIHNnID0gc2dfbmV4dChzZyksIHBzZ2wrKykgewogCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKIAkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCkBAIC0yMDQ4LDEwICsyMDQ5LDkgQEAKIAl9CiAJaWR4ID0gMDsKIAlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOwotCW51bV9jeG5fd3JiID0KLQkgICAgKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvIChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKLQkgICAgIHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOwotCisJbnVtX2N4bl93cmIgPSAobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkgICAgICAoKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSAqCisJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGluZGV4ICs9IDIpIHsKIAkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKIAkJaWYgKG51bV9jeG5fd3JiKSB7CkBAIC0yMDY0LDkgKzIwNjQsOSBAQAogCQl9IGVsc2UgewogCQkJaWR4Kys7CiAJCQlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOwotCQkJbnVtX2N4bl93cmIgPSAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KLQkJCQkJKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgotCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJCW51bV9jeG5fd3JiID0gKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCQkgICAgICAoKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pKTsKIAkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKIAkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKIAkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CkBAIC0yMzgzLDcgKzIzODMsNyBAQAogCQkJCQkJICAgICAmcGFkZHIpOwogCQlpZiAoIWNxX3ZhZGRyZXNzKQogCQkJZ290byBjcmVhdGVfY3FfZXJyb3I7Ci0JCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC8gMiwKKwkJcmV0ID0gYmVfZmlsbF9xdWV1ZShjcSwgcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzLAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpLCBjcV92YWRkcmVzcyk7CiAJCWlmIChyZXQpIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0yNjM0LDcgKzI2MzQsOCBAQAogCQkJCSAgICAgIndyYnEgY3JlYXRlIGZhaWxlZC4iKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KLQkJcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaV0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLmlkOworCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpICogMl0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLgorCQkJCQkJCQkgICBpZDsKIAl9CiAJa2ZyZWUocHdyYl9hcnIpOwogCXJldHVybiAwOwpAQCAtMjgwMywxNyArMjgwNCw2IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9mZWF0dXJlcyA9PSAweDEpCi0JCXJpbmdfbW9kZSA9IDE7Ci0JZWxzZQotCQlyaW5nX21vZGUgPSAwOwotCXN0YXR1cyA9IG1nbXRfZ2V0X2Z3X2NvbmZpZyhjdHJsLCBwaGJhKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIkVycm9yIGdldHRpbmcgZncgY29uZmlnXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KIAlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9jcXMocGhiYSwgcGh3aV9jb250ZXh0KTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkNRIG5vdCBjcmVhdGVkXG4iKTsKQEAgLTI5NDEsMTcgKzI5MzEsNiBAQAogCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwgPSAwOwogCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwgPSAwOwogCi0JaWYgKHJpbmdfbW9kZSkgewotCQlwaGJhLT5zZ2xfaG5kbF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKLQkJCQkJICAgICAgcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwsCi0JCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGhiYS0+c2dsX2huZGxfYXJyYXkpIHsKLQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCi0JCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KIAltZW1fZGVzY3Jfc2dsaCA9IHBoYmEtPmluaXRfbWVtOwogCW1lbV9kZXNjcl9zZ2xoICs9IEhXSV9NRU1fU0dMSDsKIAlpZiAoMSA9PSBtZW1fZGVzY3Jfc2dsaC0+bnVtX2VsZW1lbnRzKSB7CkBAIC0yOTU5LDggKzI5MzgsNiBAQAogCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwsCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGhiYS0+aW9fc2dsX2huZGxfYmFzZSkgewotCQkJaWYgKHJpbmdfbW9kZSkKLQkJCQlrZnJlZShwaGJhLT5zZ2xfaG5kbF9hcnJheSk7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAogCQkJCSAgICAgIk1lbSBBbGxvYyBGYWlsZWQuIEZhaWxpbmcgdG8gbG9hZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwMzIsNyArMzAwOSw3IEBACiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcGZyYWcsIDApOwogCQkJcGZyYWcgKz0gcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvOwogCQkJcHNnbF9oYW5kbGUtPnNnbF9pbmRleCA9Ci0JCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIGFycl9pbmRleCsrOworCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQgKyBhcnJfaW5kZXgrKzsKIAkJfQogCQlpZHgrKzsKIAl9CkBAIC0zMDQ3LDcgKzMwMjQsNyBAQAogewogCWludCBpLCBuZXdfY2lkOwogCi0JcGhiYS0+Y2lkX2FycmF5ID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCXBoYmEtPmNpZF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKIAkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghcGhiYS0+Y2lkX2FycmF5KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0zMDU1LDcgKzMwMzIsNyBAQAogCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXBoYmEtPmVwX2FycmF5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKKwlwaGJhLT5lcF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKSAqCiAJCQkJIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaGJhLT5lcF9hcnJheSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMzA2NCw3ICszMDQxLDcgQEAKIAkJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW5ld19jaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0OworCW5ld19jaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0OwogCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaSsrKSB7CiAJCXBoYmEtPmNpZF9hcnJheVtpXSA9IG5ld19jaWQ7CiAJCW5ld19jaWQgKz0gMjsKQEAgLTMxNDUsOCArMzEyMiw2IEBACiAJaWYgKGhiYV9zZXR1cF9jaWRfdGJscyhwaGJhKSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAogCQkJICAgICAiRmFpbGVkIGluIGhiYV9zZXR1cF9jaWRfdGJsc1xuIik7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlrZnJlZShwaGJhLT5zZ2xfaG5kbF9hcnJheSk7CiAJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOwogCQlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKIAkJZ290byBkb19jbGVhbnVwX2N0cmxyOwpAQCAtMzE2Niw2ICszMTQxLDcgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CiAJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOwogCWludCBpLCBlcV9tc2l4OworCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CiAJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OwpAQCAtMzE3NywxMyArMzE1MywxNyBAQAogCWZvciAoaSA9IDA7IGkgPCAocGhiYS0+bnVtX2NwdXMgKyBlcV9tc2l4KTsgaSsrKSB7CiAJCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXFbaV0ucTsKIAkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKLQorCQludW1fcHJvY2Vzc2VkID0gMDsKIAkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQogCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKIAkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKIAkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fcHJvY2Vzc2VkKys7CiAJCX0KKworCQlpZiAobnVtX3Byb2Nlc3NlZCkKKwkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMSwJbnVtX3Byb2Nlc3NlZCwgMSwgMSk7CiAJfQogfQogCkBAIC0zMTk1LDEwICszMTc1LDkgQEAKIAlpZiAobWdtdF9zdGF0dXMpCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAibWdtdF9lcGZ3X2NsZWFudXAgRkFJTEVEIFxuIik7Ci0JaHdpX2NsZWFudXAocGhiYSk7CisKIAlod2lfcHVyZ2VfZXEocGhiYSk7Ci0JaWYgKHJpbmdfbW9kZSkKLQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOworCWh3aV9jbGVhbnVwKHBoYmEpOwogCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOwogCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOwogCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CkBAIC0zMjE5LDcgKzMxOTgsOCBAQAogCSAqIFdlIGNhbiBhbHdheXMgdXNlIDAgaGVyZSBiZWNhdXNlIGl0IGlzIHJlc2VydmVkIGJ5IGxpYmlzY3NpIGZvcgogCSAqIGxvZ2luL3N0YXJ0dXAgcmVsYXRlZCB0YXNrcy4KIAkgKi8KLQlwd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLCAwKTsKKwlwd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwgKGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJICAgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpKTsKIAlwd3JiID0gKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiICopcHdyYl9oYW5kbGUtPnB3cmI7CiAJbWVtc2V0KHB3cmIsIDAsIHNpemVvZigqcHdyYikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKQEAgLTMyODMsOCArMzI2Myw3IEBACiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAocHdyYl9oYW5kbGUtPndyYl9pbmRleCAmIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spCisJZG9vcmJlbGwgfD0gKHB3cmJfaGFuZGxlLT53cmJfaW5kZXggJiBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKQogCQkJICAgICA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKIAlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKIApAQCAtMzMyOCw4ICszMzA3LDkgQEAKIAlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOwogCWlvX3Rhc2stPmxpYmlzY3NpX2l0dCA9IChpdHRfdCl0YXNrLT5pdHQ7CiAJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsCi0JCQkJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCi0JCQkJCQl0YXNrLT5pdHQpOworCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQKKwkJCQkJCSk7CiAJaW9fdGFzay0+Y29ubiA9IGJlaXNjc2lfY29ubjsKIAogCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkcjsKQEAgLTMzNDMsNyArMzMyMyw3IEBACiAJCQlnb3RvIGZyZWVfaG5kbHM7CiAJfSBlbHNlIHsKIAkJaW9fdGFzay0+c2NzaV9jbW5kID0gTlVMTDsKLQkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgeworCQlpZiAoKG9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgewogCQkJaWYgKCFiZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzKSB7CiAJCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKIAkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IChzdHJ1Y3Qgc2dsX2hhbmRsZSAqKQpAQCAtMzM3MCwyMSArMzM1MCwxNiBAQAogCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpaW9fdGFzay0+cHdyYl9oYW5kbGUtPgogCQkJCSB3cmJfaW5kZXggPDwgMTYpIHwgKHVuc2lnbmVkIGludCkKIAkJCQkoaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCkpOwotCWlmIChyaW5nX21vZGUpIHsKLQkJcGhiYS0+c2dsX2huZGxfYXJyYXlbaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCAtCi0JCQkJICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XSA9Ci0JCQkJICAgICBpb190YXNrLT5wc2dsX2hhbmRsZTsKLQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnRhc2sgPSB0YXNrOwotCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+Y2lkID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOwotCX0gZWxzZQotCQlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUtPnBpb19oYW5kbGUgPSB0YXNrOwogCiAJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCA9IGl0dDsKIAlyZXR1cm4gMDsKIAogZnJlZV9obmRsczoKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbCisJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgaW9fdGFzay0+cHdyYl9oYW5kbGUpOwogCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKIAlwY2lfcG9vbF9mcmVlKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsIGlvX3Rhc2stPmNtZF9iaHMsCkBAIC0zNDA0LDcgKzMzNzksOCBAQAogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWRdOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQKKwkJCS0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKSB7CiAJCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKIAkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOwpAQCAtMzQ2MCwxOCArMzQzNiwxMiBAQAogCQkJICAgICAgSVNDU0lfT1BDT0RFX1NDU0lfREFUQV9PVVQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgZmluYWxfYml0LAogCQkJICAgICAgJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LCAxKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1dSX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgSU5JX1dSX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOwogCX0gZWxzZSB7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9SRF9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9SRF9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9SRF9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAwKTsKIAl9CiAJbWVtY3B5KCZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdS4KQEAgLTM0OTYsOCArMzQ2Niw3IEBACiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOwogCiAJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCiAJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAKQEAgLTM1MTksNDkgKzM0ODgsNDYgQEAKIAl1bnNpZ25lZCBpbnQgZG9vcmJlbGwgPSAwOwogCXVuc2lnbmVkIGludCBpLCBjaWQ7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKmFib3J0ZWRfdGFzazsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCiAJY2lkID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOwogCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwltZW1zZXQocHdyYiwgMCwgc2l6ZW9mKCpwd3JiKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwKIAkJICAgICAgYmUzMl90b19jcHUodGFzay0+Y21kc24pKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgd3JiX2lkeCwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnbF9pY2RfaWR4LCBwd3JiLAogCQkgICAgICBpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KTsKLQogCXN3aXRjaCAodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgewogCWNhc2UgSVNDU0lfT1BfTE9HSU46Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IFRHVF9ETV9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIFRHVF9ETV9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsIDEpOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX05PT1BfT1VUOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfUkRfQ01EOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9SRF9DTUQpOworCQlpZiAodGFzay0+aGRyLT50dHQgPT0gSVNDU0lfUkVTRVJWRURfVEFHKQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAxKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9URVhUOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfV1JfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfV1JfQ01EKTsKLQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgVEdUX0RNX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9TQ1NJX1RNRlVOQzoKIAkJc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAJCWkgPSAoKHN0cnVjdCBpc2NzaV90bSAqKXRhc2stPmhkciktPnJ0dDsKIAkJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWRdOworCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkIC0KKwkJCQkJICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFtiZTMyX3RvX2NwdShpKQogCQkJCQkJCQk+PiAxNl07CiAJCWFib3J0ZWRfdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwpAQCAtMzU3MiwyMiArMzUzOCwyNSBAQAogCQlpZiAoIWFib3J0ZWRfaW9fdGFzay0+c2NzaV9jbW5kKQogCQkJcmV0dXJuIDA7CiAKLQkJbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKKwkJdGFnID0gbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKIAkJCQkgICAgIGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCwKIAkJCQkgICAgIGNpZCk7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9UTUZfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfVE1GX0NNRCk7CisJCWlmICghdGFnKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJtZ210X2ludmFsaWRhdGVfaWNkcyBjb3VsZCBub3QgYmUiCisJCQkJICAgICAiIHN1Ym1pdHRlZFxuIik7CisJCX0gZWxzZSB7CisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwkJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9UTUZfQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX0xPR09VVDoKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBIV0hfVFlQRV9MT0dPVVQ7Ci0JCWVsc2UKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCiAJCQkJSFdIX1RZUEVfTE9HT1VUKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKQEAgLTM2MDAsMTQgKzM1NjksMTMgQEAKIAl9CiAKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsCi0JCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmRhdGFfY291bnQpKTsKKwkJICAgICAgdGFzay0+ZGF0YV9jb3VudCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAogCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOwogCiAJZG9vcmJlbGwgfD0gY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCiAJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOwpAQCAtMzY0OSw3ICszNjE3LDYgQEAKIAlyZXR1cm4gYmVpc2NzaV9pb3Rhc2sodGFzaywgc2csIG51bV9zZywgeGZlcmxlbiwgd3JpdGVkaXIpOwogfQogCi0KIHN0YXRpYyB2b2lkIGJlaXNjc2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCiB7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKQEAgLTM3MzQsNyArMzcwMSwyMCBAQAogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGhiYSA9ICVwIFxuIiwgcGhiYSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBwaGJhKTsKKwlzd2l0Y2ggKHBjaWRldi0+ZGV2aWNlKSB7CisJY2FzZSBCRV9ERVZJQ0VfSUQxOgorCWNhc2UgT0NfREVWSUNFX0lEMToKKwljYXNlIE9DX0RFVklDRV9JRDI6CisJCXBoYmEtPmdlbmVyYXRpb24gPSBCRV9HRU4yOworCQlicmVhazsKKwljYXNlIEJFX0RFVklDRV9JRDI6CisJY2FzZSBPQ19ERVZJQ0VfSUQzOgorCQlwaGJhLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGhiYS0+Z2VuZXJhdGlvbiA9IDA7CisJfQorCiAJaWYgKGVuYWJsZV9tc2l4KQogCQludW1fY3B1cyA9IGZpbmRfbnVtX2NwdXMoKTsKIAllbHNlCkBAIC0zNzU0LDcgKzM3MzQsMTUgQEAKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aW9fc2dsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aXNyX2xvY2spOworCXJldCA9IG1nbXRfZ2V0X2Z3X2NvbmZpZygmcGhiYS0+Y3RybCwgcGhiYSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwaGJhLT5zaG9zdC0+bWF4X2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDsKIAliZWlzY3NpX2dldF9wYXJhbXMocGhiYSk7CisJcGhiYS0+c2hvc3QtPmNhbl9xdWV1ZSA9IHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmw7CiAJcmV0ID0gYmVpc2NzaV9pbml0X3BvcnQocGhiYSk7CiAJaWYgKHJldCA8IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKQEAgLTM3NjIsNiArMzc1MCwxNSBAQAogCQlnb3RvIGZyZWVfcG9ydDsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX01DQ19DTUQgOyBpKyspIHsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcGhiYS0+Y3RybC5tY2Nfd2FpdFtpICsgMV0pOworCQlwaGJhLT5jdHJsLm1jY190YWdbaV0gPSBpICsgMTsKKwkJcGhiYS0+Y3RybC5tY2NfbnVtdGFnW2kgKyAxXSA9IDA7CisJCXBoYmEtPmN0cmwubWNjX3RhZ19hdmFpbGFibGUrKzsKKwl9CisKKwlwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9IHBoYmEtPmN0cmwubWNjX2ZyZWVfaW5kZXggPSAwOworCiAJc25wcmludGYocGhiYS0+d3FfbmFtZSwgc2l6ZW9mKHBoYmEtPndxX25hbWUpLCAiYmVpc2NzaV9xX2lycSV1IiwKIAkJIHBoYmEtPnNob3N0LT5ob3N0X25vKTsKIAlwaGJhLT53cSA9IGNyZWF0ZV93b3JrcXVldWUocGhiYS0+d3FfbmFtZSk7CkBAIC0zODM2LDcgKzM4MzMsNyBAQAogc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9IERSVl9OQU1FLAotCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfAorCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfCBDQVBfVEVYVF9ORUdPIHwKIAkJQ0FQX01VTFRJX1IyVCB8IENBUF9EQVRBREdTVCB8IENBUF9EQVRBX1BBVEhfT0ZGTE9BRCwKIAkucGFyYW1fbWFzayA9IElTQ1NJX01BWF9SRUNWX0RMRU5HVEggfAogCQlJU0NTSV9NQVhfWE1JVF9ETEVOR1RIIHwKQEAgLTM4NTksNyArMzg1Niw3IEBACiAJCUlTQ1NJX1VTRVJOQU1FIHwgSVNDU0lfUEFTU1dPUkQgfAogCQlJU0NTSV9VU0VSTkFNRV9JTiB8IElTQ1NJX1BBU1NXT1JEX0lOIHwKIAkJSVNDU0lfRkFTVF9BQk9SVCB8IElTQ1NJX0FCT1JUX1RNTyB8Ci0JCUlTQ1NJX0xVX1JFU0VUX1RNTyB8IElTQ1NJX1RHVF9SRVNFVF9UTU8gfAorCQlJU0NTSV9MVV9SRVNFVF9UTU8gfAogCQlJU0NTSV9QSU5HX1RNTyB8IElTQ1NJX1JFQ1ZfVE1PIHwKIAkJSVNDU0lfSUZBQ0VfTkFNRSB8IElTQ1NJX0lOSVRJQVRPUl9OQU1FLAogCS5ob3N0X3BhcmFtX21hc2sgPSBJU0NTSV9IT1NUX0hXQUREUkVTUyB8IElTQ1NJX0hPU1RfSVBBRERSRVNTIHwKQEAgLTM5MDUsNyArMzkwMiw3IEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIgYmVpc2NzaSIKIAkJCSAidHJhbnNwb3J0LlxuIik7Ci0JCXJldCA9IC1FTk9NRU07CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCiAJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOwpAQCAtMzkxNyw3ICszOTE0LDYgQEAKIAkJCSAiYmVpc2NzaSBwY2kgZHJpdmVyLlxuIik7CiAJCWdvdG8gdW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ7CiAJfQotCXJpbmdfbW9kZSA9IDA7CiAJcmV0dXJuIDA7CiAKIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKaW5kZXggMjVlNmIyMC4uYzUzYTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MCwzMSArNDAsMjkgQEAKICNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCiAKICNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisvKiBERVZJQ0UgSUQncyBmb3IgQkUyICovCiAjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCiAjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCiAjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAzCi0jZGVmaW5lIE9DX0RFVklDRV9JRDMJCTB4NzEyCi0jZGVmaW5lIE9DX0RFVklDRV9JRDQJCTB4MjIyCiAKLSNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwk2NAorLyogREVWSUNFIElEJ3MgZm9yIEJFMyAqLworI2RlZmluZSBCRV9ERVZJQ0VfSUQyCQkweDIyMgorI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweDcxMgorCisjZGVmaW5lIEJFMl9JT19ERVBUSAkJMTAyNAorI2RlZmluZSBCRTJfTUFYX1NFU1NJT05TCTI1NgogI2RlZmluZSBCRTJfQ01EU19QRVJfQ1hOCTEyOAotI2RlZmluZSBCRTJfTE9HT1VUUwkJQkUyX01BWF9TRVNTSU9OUwogI2RlZmluZSBCRTJfVE1GUwkJMTYKICNkZWZpbmUgQkUyX05PUE9VVF9SRVEJCTE2Ci0jZGVmaW5lIEJFMl9BU1lOQ1BEVVMJCUJFMl9NQVhfU0VTU0lPTlMKLSNkZWZpbmUgQkUyX01BWF9JQ0RTCQkyMDQ4CiAjZGVmaW5lIEJFMl9TR0UJCQkzMgogI2RlZmluZSBCRTJfREVGUERVX0hEUl9TWgk2NAogI2RlZmluZSBCRTJfREVGUERVX0RBVEFfU1oJODE5MgotI2RlZmluZSBCRTJfSU9fREVQVEggXAotCShCRTJfTUFYX0lDRFMgLyAyIC0gKEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfTk9QT1VUX1JFUSkpCiAKICNkZWZpbmUgTUFYX0NQVVMJCTMxCi0jZGVmaW5lIEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTCUJFMl9TR0UKKyNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJMzAKIAotI2RlZmluZSBCRUlTQ1NJX01BWF9DTU5EUwkxMDI0CS8qIE1heCBJTydzIHBlciBDdHJsciBzaHQtPmNhbl9xdWV1ZSAqLwogI2RlZmluZSBCRUlTQ1NJX0NNRF9QRVJfTFVOCTEyOAkvKiBzY3NpX2hvc3QtPmNtZF9wZXJfbHVuICovCi0jZGVmaW5lIEJFSVNDU0lfTUFYX1NFQ1RPUlMJMjA0OAkvKiBzY3NpX2hvc3QtPm1heF9zZWN0b3JzICovCisjZGVmaW5lIEJFSVNDU0lfTUFYX1NFQ1RPUlMJMjU2CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KIAogI2RlZmluZSBCRUlTQ1NJX01BWF9DTURfTEVOCTE2CS8qIHNjc2lfaG9zdC0+bWF4X2NtZF9sZW4gKi8KICNkZWZpbmUgQkVJU0NTSV9OVU1fTUFYX0xVTgkyNTYJLyogc2NzaV9ob3N0LT5tYXhfbHVuICovCkBAIC0zMzAsNiArMzI4LDcgQEAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CS8qIFRoZSBhY3R1YWsgd29yayBxdWV1ZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2NxczsJLyogVGhlIHdvcmsgYmVpbmcgcXVldWVkICovCiAJc3RydWN0IGJlX2N0cmxfaW5mbyBjdHJsOworCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uOwogfTsKIAogc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiB7CkBAIC02NTYsMTEgKzY1NSwxMiBAQAogCiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCi0JCQkJICAgIGludCBpbmRleCk7CitzdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQpOwogdm9pZAogZnJlZV9tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpOwogCit2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIHN0cnVjdCBwZHVfbm9wX291dCB7CiAJdTMyIGR3WzEyXTsKIH07CkBAIC04MDIsNyArODAyLDYgQEAKIAlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9oZHI7CiAJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfZGF0YTsKIAlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2N0eHQ7Ci0JdW5zaWduZWQgc2hvcnQgY3FfZXJyb3JzW0NYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk5dOwogfTsKIAogZW51bSBod2hfdHlwZV9lbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCmluZGV4IDc5YzJiZDUuLjMxN2JjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDgsNiArNDgsMTQgQEAKIAkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2Jhc2U7CiAJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPQogCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfY291bnQ7CisJCWlmIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID4gKEJFMl9NQVhfU0VTU0lPTlMgLyAyKSkgeworCQkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJCSJGVyByZXBvcnRlZCBNQVggQ1hOUyBhcyAlZCBcdCIKKwkJCQkiTWF4IFN1cHBvcnRlZCA9ICVkLlxuIiwKKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50LAorCQkJCUJFMl9NQVhfU0VTU0lPTlMpOworCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9IEJFMl9NQVhfU0VTU0lPTlMgLyAyOworCQl9CiAJfSBlbHNlIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCiAJCQkgICAgICJGYWlsZWQgaW4gbWdtdF9nZXRfZndfY29uZmlnIFxuIik7CkBAIC03Nyw2ICs4NSw3IEBACiAJfQogCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMpOwogCXJlcSA9IG5vbmVtYl9jbWQudmE7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKQEAgLTE0MCwxMCArMTQ5LDE3IEBACiB7CiAJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CiAJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luICpyZXE7Ci0JaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CiAKIAlub25lbWJfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY3RybC0+cGRldiwKIAkJCQlzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKSwKQEAgLTE1Niw4ICsxNzIsMTAgQEAKIAl9CiAJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbik7CiAJcmVxID0gbm9uZW1iX2NtZC52YTsKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCkBAIC0xNzIsMTQgKzE5MCwxMiBAQAogCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOwogCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKIAotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoc3RhdHVzKQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJQ0RTIEludmFsaWRhdGlvbiBGYWlsZWRcbiIpOworCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CiAJaWYgKG5vbmVtYl9jbWQudmEpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAogCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCiB1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKQEAgLTE4OSwxMyArMjA1LDE5IEBACiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luICpyZXEgPQotCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJd3JiLT50YWcwIHw9IHRhZzsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JLApAQCAtMjA4LDM1ICsyMzAsMzcgQEAKIAllbHNlCiAJCXJlcS0+Y2xlYW51cF90eXBlID0gQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSU5WQUxJREFURTsKIAlyZXEtPnNhdmVfY2ZnID0gc2F2ZWNmZ19mbGFnOwotCXN0YXR1cyA9ICBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW52YWxpZGF0aW9uIEZhaWxlZFxuIik7Ci0KKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogdW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKIAkJCQl1bnNpZ25lZCBzaG9ydCBjaWQsIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZykKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4gKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9DT01NT05fVENQX1VQTE9BRCwKIAkJCSAgIE9QQ09ERV9DT01NT05fVENQX1VQTE9BRCwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPmlkID0gKHVuc2lnbmVkIHNob3J0KWNpZDsKIAlyZXEtPnVwbG9hZF90eXBlID0gKHVuc2lnbmVkIGNoYXIpdXBsb2FkX2ZsYWc7Ci0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmIChzdGF0dXMpCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKQEAgLTI0OCwxMyArMjcyLDEzIEBACiAJc3RydWN0IHNvY2thZGRyX2luICpkYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3RfYWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdF9hZGRyOwogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxOwogCXVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7CiAJdW5zaWduZWQgc2hvcnQgZGVmX2RhdGFfaWQ7CiAJc3RydWN0IHBoeXNfYWRkciB0ZW1wbGF0ZV9hZGRyZXNzID0geyAwLCAwIH07CiAJc3RydWN0IHBoeXNfYWRkciAqcHRlbXBsYXRlX2FkZHJlc3M7Ci0JaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOwogCkBAIC0yNjYsNyArMjkwLDE0IEBACiAJcHRlbXBsYXRlX2FkZHJlc3MgPSAmdGVtcGxhdGVfYWRkcmVzczsKIAlJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGhiYSwgcHRlbXBsYXRlX2FkZHJlc3MpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCkBAIC0zMTEsNDYgKzM0MiwzNiBAQAogCXJlcS0+ZG9fb2ZmbG9hZCA9IDE7CiAJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmxvID0gcHRlbXBsYXRlX2FkZHJlc3MtPmxvOwogCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5oaSA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5oaTsKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKLQkJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0ID0KLQkJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0KLQkJZXAgPSBwaGJhLT5lcF9hcnJheVtwdGNwY25jdF9vdXQtPmNpZF07Ci0JCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKLQkJYmVpc2NzaV9lcC0+ZndfaGFuZGxlID0gcHRjcGNuY3Rfb3V0LT5jb25uZWN0aW9uX2hhbmRsZTsKLQkJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDE7Ci0JCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIFN1Y2Nlc3NcbiIpOwotCX0gZWxzZQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWRcbiIpOworCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCi1pbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHU4ICptYWNfYWRkcikKK3Vuc2lnbmVkIGludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IGJlX2NtZF9yZXFfZ2V0X21hY19hZGRyICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVfY21kX2dldF9tYWNfYWRkclxuIik7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CisKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKIAkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfTlRXS19HRVRfTklDX0NPTkZJRywKIAkJCSAgIHNpemVvZigqcmVxKSk7CiAKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQotCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7Ci0JfQotCisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCmluZGV4IDI0ZWFmZjkuLmVjZWFkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMxLDYgKzIzMSw3IEBACiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwogCXN0cnVjdCBiZWlzY3NpX3Nlc3MgKnNlc3M7CiAJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKm9wZW5pc2NzaV9lcDsKIAl1bnNpZ25lZCBzaG9ydCBpcF90eXBlOwogCWNoYXIgZHN0Nl9hZGRyW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CiAJdW5zaWduZWQgbG9uZyBkc3RfYWRkcjsKQEAgLTI0OSw3ICsyNTAsNCBAQAogCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpOwogCi11bnNpZ25lZCBjaGFyIG1nbXRfZndfY21kKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCi0JCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKLQkJCSAgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCAzM2IyMjk0Li4xYzRkMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMTQyNiw4ICsxNDI2LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9DT05OX0FERFJFU1M6CiAJCWlmIChibngyaV9jb25uLT5lcCkKLQkJCWxlbiA9IHNwcmludGYoYnVmLCBOSVBRVUFEX0ZNVCAiXG4iLAotCQkJCSAgICAgIE5JUFFVQUQoYm54MmlfY29ubi0+ZXAtPmNtX3NrLT5kc3RfaXApKTsKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNFxuIiwKKwkJCQkgICAgICAmYm54MmlfY29ubi0+ZXAtPmNtX3NrLT5kc3RfaXApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaXNjc2lfY29ubl9nZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYpOwpAQCAtMTk5MCw2ICsxOTkwLDcgQEAKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IDEwMjQsCiAJLm1heF9zZWN0b3JzCQk9IDEyNywKIAkuY21kX3Blcl9sdW4JCT0gMzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggOTEyOWJjZi4uY2QwNWUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMjE5LDE4ICsyMTksMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXNhID0gKGNkYnBbOF0gPDwgOCkgKyBjZGJwWzldOwotCQluYW1lID0gZ2V0X3NhX25hbWUobWFpbnRfaW5fYXJyLCBNQUlOVF9JTl9TWiwgc2EpOwotCQlpZiAobmFtZSkgeworCQluYW1lID0gZ2V0X3NhX25hbWUodmFyaWFibGVfbGVuZ3RoX2FyciwgVkFSSUFCTEVfTEVOR1RIX1NaLCBzYSk7CisJCWlmIChuYW1lKQogCQkJcHJpbnRrKCIlcyIsIG5hbWUpOwotCQkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKLQkJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsCi0JCQkJICAgICAgIGxlbiwgY2RiX2xlbik7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQotCQkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwKLQkJCQkgICAgICAgbGVuLCBjZGJfbGVuKTsKLQkJfQorCisJCWlmICgoY2RiX2xlbiA+IDApICYmIChsZW4gIT0gY2RiX2xlbikpCisJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsIGxlbiwgY2RiX2xlbik7CisKIAkJYnJlYWs7CiAJY2FzZSBNQUlOVEVOQU5DRV9JTjoKIAkJc2EgPSBjZGJwWzFdICYgMHgxZjsKQEAgLTM0OSw2ICszNDYsOSBAQAogewogCWludCBrOwogCisJaWYgKGNtZC0+Y21uZCA9PSBOVUxMKQorCQlyZXR1cm47CisKIAlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIkNEQjogIik7CiAJcHJpbnRfb3Bjb2RlX25hbWUoY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwppbmRleCA5NjljODMxLi40MTI4NTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKQEAgLTU5MSw4ICs1OTEsNyBAQAogCWN4Z2IzaV9jb25uX21heF9yZWN2X2RsZW5ndGgoY29ubik7CiAKIAlzcGluX2xvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwotCXNwcmludGYoY29ubi0+cG9ydGFsX2FkZHJlc3MsIE5JUFFVQURfRk1ULAotCQlOSVBRVUFEKGMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkcikpOworCXNwcmludGYoY29ubi0+cG9ydGFsX2FkZHJlc3MsICIlcEk0IiwgJmMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkcik7CiAJY29ubi0+cG9ydGFsX3BvcnQgPSBudG9ocyhjM2NuLT5kYWRkci5zaW5fcG9ydCk7CiAJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCkBAIC03MDksNiArNzA4LDEyIEBACiB7CiAJc3RydWN0IGN4Z2IzaV9oYmEgKmhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CiAKKwlpZiAoIWhiYS0+bmRldikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LCAiQ291bGQgbm90IHNldCBob3N0IHBhcmFtLiAiCisJCQkgICAgICJOZXRkZXYgZm9yIGhvc3Qgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAljeGdiM2lfYXBpX2RlYnVnKCJwYXJhbSAlZCwgYnVmICVzLlxuIiwgcGFyYW0sIGJ1Zik7CiAKIAlzd2l0Y2ggKHBhcmFtKSB7CkBAIC03MzksNiArNzQ0LDEyIEBACiAJc3RydWN0IGN4Z2IzaV9oYmEgKmhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CiAJaW50IGxlbiA9IDA7CiAKKwlpZiAoIWhiYS0+bmRldikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LCAiQ291bGQgbm90IHNldCBob3N0IHBhcmFtLiAiCisJCQkgICAgICJOZXRkZXYgZm9yIGhvc3Qgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAljeGdiM2lfYXBpX2RlYnVnKCJoYmEgJXMsIHBhcmFtICVkLlxuIiwgaGJhLT5uZGV2LT5uYW1lLCBwYXJhbSk7CiAKIAlzd2l0Y2ggKHBhcmFtKSB7CkBAIC03NTMsNyArNzY0LDcgQEAKIAkJX19iZTMyIGFkZHI7CiAKIAkJYWRkciA9IGN4Z2IzaV9nZXRfcHJpdmF0ZV9pcHY0YWRkcihoYmEtPm5kZXYpOwotCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgTklQUVVBRF9GTVQsIE5JUFFVQUQoYWRkcikpOworCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTQiLCAmYWRkcik7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCmluZGV4IDE1YTAwZTguLjNlMDhjNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCkBAIC0xNjc1LDEwICsxNjc1LDExIEBACiAJfSBlbHNlCiAJCWMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNpcHY0OwogCi0JYzNjbl9jb25uX2RlYnVnKCJjM2NuIDB4JXAsICV1LiV1LiV1LiV1LCV1LSV1LiV1LiV1LiV1LCV1IFNZTl9TRU5ULlxuIiwKLQkJCWMzY24sIE5JUFFVQUQoYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyKSwKKwljM2NuX2Nvbm5fZGVidWcoImMzY24gMHglcCwgJXBJNCwldS0lcEk0LCV1IFNZTl9TRU5ULlxuIiwKKwkJCWMzY24sCisJCQkmYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJbnRvaHMoYzNjbi0+c2FkZHIuc2luX3BvcnQpLAotCQkJTklQUVVBRChjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpLAorCQkJJmMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCW50b2hzKGMzY24tPmRhZGRyLnNpbl9wb3J0KSk7CiAKIAljM2NuX3NldF9zdGF0ZShjM2NuLCBDM0NOX1NUQVRFX0NPTk5FQ1RJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwppbmRleCAxZmUzYjBmLi45YzM4NTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwpAQCAtNDYxLDEwICs0NjEsOCBAQAogCQlza2IgPSBza2JfcGVlaygmYzNjbi0+cmVjZWl2ZV9xdWV1ZSk7CiAJfQogCXJlYWRfdW5sb2NrKCZjM2NuLT5jYWxsYmFja19sb2NrKTsKLQlpZiAoYzNjbikgewotCQljM2NuLT5jb3BpZWRfc2VxICs9IHJlYWQ7Ci0JCWN4Z2IzaV9jM2NuX3J4X2NyZWRpdHMoYzNjbiwgcmVhZCk7Ci0JfQorCWMzY24tPmNvcGllZF9zZXEgKz0gcmVhZDsKKwljeGdiM2lfYzNjbl9yeF9jcmVkaXRzKGMzY24sIHJlYWQpOwogCWNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gcmVhZDsKIAogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCA0ZjBkMDEzLi5iYzllOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC03MTcsNiArNzE3LDggQEAKIAl7IklCTSIsICIyMTQ1IiB9LAogCXsiUGlsbGFyIiwgIkF4aW9tIiB9LAogCXsiSW50ZWwiLCAiTXVsdGktRmxleCJ9LAorCXsiTkVUQVBQIiwgIkxVTiJ9LAorCXsiQUlYIiwgIk5WRElTSyJ9LAogCXtOVUxMLCBOVUxMfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGEuYyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKaW5kZXggYzcwNzZjZS4uM2M1YWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VhdGEuYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCkBAIC0xNTA5LDcgKzE1MDksNyBAQAogCWNoYXIgKmN1ciA9IHN0cjsKIAlpbnQgaSA9IDE7CiAKLQl3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisJd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPCBNQVhfSU5UX1BBUkFNKSB7CiAJCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKIAkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwppbmRleCBhNjgwZTE4Li5lMmJjNzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwpAQCAtMTQ0OSw5ICsxNDQ5LDYgQEAKIAlpZiAob2Zmc2V0ID4gMTUpCiAJCWdvdG8gZG9fcmVqZWN0OwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpCi0JCW9mZnNldCA9IDA7Ci0KIAlpZiAob2Zmc2V0KSB7CiAJCWludCBvbmVfY2xvY2s7CiAKQEAgLTI0MDUsMTIgKzI0MDIsNiBAQAogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwogCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpIHsKLQkJLyogQnlwYXNzIGFzeW5jIGRvbWFpbiB2YWxpZGF0aW9uICovCi0JCWRldi0+cHByICA9IDA7Ci0JCWRldi0+c2R0ciA9IDA7Ci0JfQotCiAJZ29hbF90YWdzID0gMDsKIAogCWlmIChkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKQEAgLTI2NjAsNyArMjY1MSwxMCBAQAogCXN0cnVjdCBlc3AgKmVzcCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJc3RydWN0IGVzcF90YXJnZXRfZGF0YSAqdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0LT5pZF07CiAKLQl0cC0+bmVnb19nb2FsX29mZnNldCA9IG9mZnNldDsKKwlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSAwOworCWVsc2UKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSBvZmZzZXQ7CiAJdHAtPmZsYWdzIHw9IEVTUF9UR1RfQ0hFQ0tfTkVHTzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCmluZGV4IGJiMjA4YTYuLjM5NjZjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImZuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIEZDb0UgSEJBIERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC4xMTIxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNC4wLjk4IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAjZGVmaW5lIERGWCAgICAgICAgICAgICAgICAgICAgIERSVl9OQU1FICIlZDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IGZlMWIxMDMxLi41MDdlMjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwpAQCAtNjIwLDYgKzYyMCw4IEBACiAJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZm5pYy0+bHBvcnQtPmhvc3QsCiAJCQkgICAgICJmaXJtd2FyZSBzdXBwb3J0cyBGSVBcbiIpOworCQkvKiBlbmFibGUgZGlyZWN0ZWQgYW5kIG11bHRpY2FzdCAqLworCQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGZuaWMtPnZkZXYsIDEsIDEsIDAsIDAsIDApOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MpOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBmbmljLT5jdGxyLmN0bF9zcmNfYWRkcik7CiAJfSBlbHNlIHsKQEAgLTY5OCw2ICs3MDAsOCBAQAogCQlnb3RvIGVycl9vdXRfcmVtb3ZlX3Njc2lfaG9zdDsKIAl9CiAKKwlmY19scG9ydF9pbml0X3N0YXRzKGxwKTsKKwogCWZjX2xwb3J0X2NvbmZpZyhscCk7CiAKIAlpZiAoZmNfc2V0X21mcyhscCwgZm5pYy0+Y29uZmlnLm1heGRhdGFmaWVsZHNpemUgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvc2NzaS9mbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggZDYyYjkwNi4uN2M5Y2NiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy92bmljX2RldmNtZC5oCkBAIC05NCw3ICs5NCw3IEBACiAJQ01EX1NUQVRTX0RVTVAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDQpLAogCiAJLyogc2V0IFJ4IHBhY2tldCBmaWx0ZXI6ICh1MzIpYTA9ZmlsdGVycyAoc2VlIENNRF9QRklMVEVSXyopICovCi0JQ01EX1BBQ0tFVF9GSUxURVIJPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDcpLAorCUNNRF9QQUNLRVRfRklMVEVSICAgICAgID0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDcpLAogCiAJLyogaGFuZyBkZXRlY3Rpb24gbm90aWZpY2F0aW9uICovCiAJQ01EX0hBTkdfTk9USUZZICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgOCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCA5ZThmY2UwLi5iYTNjOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTE0MCw0MCArMTQwLDQwIEBACiAjaW5jbHVkZSAiZ2R0aC5oIgogCiBzdGF0aWMgdm9pZCBnZHRoX2RlbGF5KGludCBtaWxsaXNlY29uZHMpOwotc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodWxvbmczMiBzaXplLCB1bG9uZzMyICpjeWxzLCBpbnQgKmhlYWRzLCBpbnQgKnNlY3MpOworc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBnZHRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IF9fZ2R0aF9pbnRlcnJ1cHQoZ2R0aF9oYV9zdHIgKmhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdkdGhfZnJvbV93YWl0LCBpbnQqIHBJbmRleCk7Ci1zdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1bmNoYXIgaW5kZXgsCitzdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1OCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKTsKIHN0YXRpYyBpbnQgZ2R0aF9hc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIHZvaWQgZ2R0aF9sb2dfZXZlbnQoZ2R0aF9ldnRfZGF0YSAqZHZyLCBjaGFyICpidWZmZXIpOwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KTsKK3N0YXRpYyB2b2lkIGdkdGhfcHV0cShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBwcmlvcml0eSk7CiBzdGF0aWMgdm9pZCBnZHRoX25leHQoZ2R0aF9oYV9zdHIgKmhhKTsKLXN0YXRpYyBpbnQgZ2R0aF9maWxsX3Jhd19jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIGIpOworc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKTsKIHN0YXRpYyBpbnQgZ2R0aF9zcGVjaWFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwKTsKLXN0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1c2hvcnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgaWR4LCBnZHRoX2V2dF9kYXRhICpldnQpOworc3RhdGljIGdkdGhfZXZ0X3N0ciAqZ2R0aF9zdG9yZV9ldmVudChnZHRoX2hhX3N0ciAqaGEsIHUxNiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCk7CiBzdGF0aWMgaW50IGdkdGhfcmVhZF9ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBoYW5kbGUsIGdkdGhfZXZ0X3N0ciAqZXN0cik7Ci1zdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgYXBwbGljYXRpb24sIAorc3RhdGljIHZvaWQgZ2R0aF9yZWFkYXBwX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdTggYXBwbGljYXRpb24sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkdGhfZXZ0X3N0ciAqZXN0cik7CiBzdGF0aWMgdm9pZCBnZHRoX2NsZWFyX2V2ZW50cyh2b2lkKTsKIAogc3RhdGljIHZvaWQgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdXNob3J0IGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KTsKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCk7Ci1zdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSk7CiAKIHN0YXRpYyB2b2lkIGdkdGhfZW5hYmxlX2ludChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX3Rlc3RfYnVzeShnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX2dldF9jbWRfaW5kZXgoZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyB2b2lkIGdkdGhfcmVsZWFzZV9ldmVudChnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsdWxvbmczMiB0aW1lKTsKLXN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jbWQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgc2VydmljZSwgdXNob3J0IG9wY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsdWxvbmc2NCBwMyk7CitzdGF0aWMgaW50IGdkdGhfd2FpdChnZHRoX2hhX3N0ciAqaGEsIGludCBpbmRleCx1MzIgdGltZSk7CitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwMSwgdTY0IHAyLHU2NCBwMyk7CiBzdGF0aWMgaW50IGdkdGhfc2VhcmNoX2RyaXZlcyhnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX2FuYWx5c2VfaGRyaXZlKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdkdGhfY3RyX25hbWUoZ2R0aF9oYV9zdHIgKmhhKTsKIApAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgdm9pZCBnZHRoX3Njc2lfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApOwogCiAjaWZkZWYgREVCVUdfR0RUSAotc3RhdGljIHVuY2hhciAgIERlYnVnU3RhdGUgPSBERUJVR19HRFRIOworc3RhdGljIHU4ICAgRGVidWdTdGF0ZSA9IERFQlVHX0dEVEg7CiAKICNpZmRlZiBfX1NFUklBTF9fCiAjZGVmaW5lIE1BWF9TRVJCVUYgMTYwCkBAIC0yNzAsMzAgKzI3MCwzMCBAQAogI2VuZGlmCiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLXN0YXRpYyB1bG9uZzMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CitzdGF0aWMgdTMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CiAjaWZkZWYgSU5UX0NPQUwKLXN0YXRpYyB1bG9uZzMyIG1heF9pbnRfY29hbD0wOworc3RhdGljIHUzMiBtYXhfaW50X2NvYWw9MDsKICNlbmRpZgotc3RhdGljIHVsb25nMzIgYWN0X2ludHM9MCwgYWN0X2lvcz0wLCBhY3Rfc3RhdHM9MCwgYWN0X3JxPTA7CitzdGF0aWMgdTMyIGFjdF9pbnRzPTAsIGFjdF9pb3M9MCwgYWN0X3N0YXRzPTAsIGFjdF9ycT0wOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGdkdGhfdGltZXI7CiAjZW5kaWYKIAotI2RlZmluZSBQVFIyVVNIT1JUKGEpICAgKHVzaG9ydCkodWxvbmcpKGEpCisjZGVmaW5lIFBUUjJVU0hPUlQoYSkgICAodTE2KSh1bnNpZ25lZCBsb25nKShhKQogI2RlZmluZSBHRFRPRkZTT0YoYSxiKSAgKHNpemVfdCkmKCgoYSopMCktPmIpCiAjZGVmaW5lIElOREVYX09LKGksdCkgICAoKGkpPEFSUkFZX1NJWkUodCkpCiAKICNkZWZpbmUgQlVTX0wyUChhLGIpICAgICgoYik+KGEpLT52aXJ0X2J1cyA/IChiLTEpOihiKSkKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyB1bmNoYXIgICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCitzdGF0aWMgdTggICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19JU0EpCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLworc3RhdGljIHU4ICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLwogI2VuZGlmCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLworc3RhdGljIHU4ICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLwogc3RhdGljIGludCAgICAgIGdkdGhfY3RyX2NvdW50ICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiBzdGF0aWMgTElTVF9IRUFEKGdkdGhfaW5zdGFuY2VzKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbGlzdCAqLwotc3RhdGljIHVuY2hhciAgIGdkdGhfd3JpdGVfdGhyb3VnaCA9IEZBTFNFOyAgICAgICAgICAgICAvKiB3cml0ZSB0aHJvdWdoICovCitzdGF0aWMgdTggICBnZHRoX3dyaXRlX3Rocm91Z2ggPSBGQUxTRTsgICAgICAgICAgICAgLyogd3JpdGUgdGhyb3VnaCAqLwogc3RhdGljIGdkdGhfZXZ0X3N0ciBlYnVmZmVyW01BWF9FVkVOVFNdOyAgICAgICAgICAgICAgICAvKiBldmVudCBidWZmZXIgKi8KIHN0YXRpYyBpbnQgZWxhc3RpZHg7CiBzdGF0aWMgaW50IGVvbGRpZHg7CkBAIC0zMDMsNyArMzAzLDcgQEAKICNkZWZpbmUgRE9VICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVCBkYXRhIGRpcmVjdGlvbiAqLwogI2RlZmluZSBETk8gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZGF0YSB0cmFuc2ZlciAqLwogI2RlZmluZSBEVU4gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5rbm93biBkYXRhIGRpcmVjdGlvbiAqLwotc3RhdGljIHVuY2hhciBnZHRoX2RpcmVjdGlvbl90YWJbMHgxMDBdID0geworc3RhdGljIHU4IGdkdGhfZGlyZWN0aW9uX3RhYlsweDEwMF0gPSB7CiAgICAgRE5PLEROTyxESU4sRElOLERPVSxESU4sRElOLERPVSxESU4sRFVOLERPVSxET1UsRFVOLERVTixEVU4sRElOLAogICAgIEROTyxESU4sRElOLERPVSxESU4sRE9VLEROTyxETk8sRE9VLEROTyxESU4sRE5PLERJTixET1UsRE5PLERVTiwKICAgICBESU4sRFVOLERJTixEVU4sRE9VLERJTixEVU4sRFVOLERJTixESU4sRE9VLEROTyxEVU4sRElOLERPVSxET1UsCkBAIC0zOTAsNyArMzkwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqZ2R0aF9nZXRfY21uZGluZm8oZ2R0aF9oYV9zdHIgKmhhKQogewogCXN0cnVjdCBnZHRoX2NtbmRpbmZvICpwcml2ID0gTlVMTDsKLQl1bG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgcmV0dXJuIHJ2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHVsb25nMzIgc2l6ZSwgdWxvbmczMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQorc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQogewogICAgICpjeWxzID0gc2l6ZSAvSEVBRFMvU0VDUzsKICAgICBpZiAoKmN5bHMgPD0gTUFYQ1lMUykgewpAQCAtNTE0LDkgKzUxNCw5IEBACiAKIC8qIGNvbnRyb2xsZXIgc2VhcmNoIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfZWlzYSh1c2hvcnQgZWlzYV9hZHIpCitzdGF0aWMgaW50IF9faW5pdCBnZHRoX3NlYXJjaF9laXNhKHUxNiBlaXNhX2FkcikKIHsKLSAgICB1bG9uZzMyIGlkOworICAgIHUzMiBpZDsKICAgICAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2Vpc2EoKSBhZHIuICV4XG4iLGVpc2FfYWRyKSk7CiAgICAgaWQgPSBpbmwoZWlzYV9hZHIrSUQwUkVHKTsKQEAgLTUzMywxMyArNTMzLDEzIEBACiAjZW5kaWYgLyogQ09ORklHX0VJU0EgKi8KIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfc2VhcmNoX2lzYSh1bG9uZzMyIGJpb3NfYWRyKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfaXNhKHUzMiBiaW9zX2FkcikKIHsKICAgICB2b2lkIF9faW9tZW0gKmFkZHI7Ci0gICAgdWxvbmczMiBpZDsKKyAgICB1MzIgaWQ7CiAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2lzYSgpIGJpb3MgYWRyLiAleFxuIixiaW9zX2FkcikpOwotICAgIGlmICgoYWRkciA9IGlvcmVtYXAoYmlvc19hZHIrQklPU19JRF9PRkZTLCBzaXplb2YodWxvbmczMikpKSAhPSBOVUxMKSB7CisgICAgaWYgKChhZGRyID0gaW9yZW1hcChiaW9zX2FkcitCSU9TX0lEX09GRlMsIHNpemVvZih1MzIpKSkgIT0gTlVMTCkgewogICAgICAgICBpZCA9IHJlYWRsKGFkZHIpOwogICAgICAgICBpb3VubWFwKGFkZHIpOwogICAgICAgICBpZiAoaWQgPT0gR0RUMl9JRCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdEVDIwMDAgKi8KQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSQogCi1zdGF0aWMgYm9vbCBnZHRoX3NlYXJjaF92b3J0ZXgodXNob3J0IGRldmljZSkKK3N0YXRpYyBib29sIGdkdGhfc2VhcmNoX3ZvcnRleCh1MTYgZGV2aWNlKQogewogCWlmIChkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NSkKIAkJcmV0dXJuIHRydWU7CkBAIC02MDMsOSArNjAzLDkgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdkdGhfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXVzaG9ydCB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7Ci0JdXNob3J0IGRldmljZSA9IHBkZXYtPmRldmljZTsKLQl1bG9uZyBiYXNlMCwgYmFzZTEsIGJhc2UyOworCXUxNiB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7CisJdTE2IGRldmljZSA9IHBkZXYtPmRldmljZTsKKwl1bnNpZ25lZCBsb25nIGJhc2UwLCBiYXNlMSwgYmFzZTI7CiAJaW50IHJjOwogCWdkdGhfcGNpX3N0ciBnZHRoX3BjaXN0cjsKIAlnZHRoX2hhX3N0ciAqaGEgPSBOVUxMOwpAQCAtNjU4LDEwICs2NTgsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2Vpc2EodXNob3J0IGVpc2FfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9laXNhKHUxNiBlaXNhX2FkcixnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdWxvbmczMiByZXRyaWVzLGlkOwotICAgIHVuY2hhciBwcm90X3ZlcixlaXNhY2YsaSxpcnFfZm91bmQ7CisgICAgdTMyIHJldHJpZXMsaWQ7CisgICAgdTggcHJvdF92ZXIsZWlzYWNmLGksaXJxX2ZvdW5kOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfZWlzYSgpIGFkci4gJXhcbiIsZWlzYV9hZHIpKTsKICAgICAKQEAgLTY4OCw3ICs2ODgsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaGEtPmJtaWMgPSBlaXNhX2FkcjsKLSAgICBoYS0+YnJkX3BoeXMgPSAodWxvbmczMillaXNhX2FkciA+PiAxMjsKKyAgICBoYS0+YnJkX3BoeXMgPSAodTMyKWVpc2FfYWRyID4+IDEyOwogCiAgICAgb3V0bCgwLGVpc2FfYWRyK01BSUxCT1hSRUcpOwogICAgIG91dGwoMCxlaXNhX2FkcitNQUlMQk9YUkVHKzQpOwpAQCAtNzUyLDEyICs3NTIsMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfRUlTQSAqLwogCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2lzYSh1bG9uZzMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9pc2EodTMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKIHsKICAgICByZWdpc3RlciBnZHQyX2RwcmFtX3N0ciBfX2lvbWVtICpkcDJfcHRyOwogICAgIGludCBpOwotICAgIHVuY2hhciBpcnFfZHJxLHByb3RfdmVyOwotICAgIHVsb25nMzIgcmV0cmllczsKKyAgICB1OCBpcnFfZHJxLHByb3RfdmVyOworICAgIHUzMiByZXRyaWVzOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfaXNhKCkgYmlvcyBhZHIuICV4XG4iLGJpb3NfYWRyKSk7CiAKQEAgLTgxMiw3ICs4MTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgfQotICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHAyX3B0ci0+dS5pYy5TX0luZm9bMF0pOworICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDJfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgd3JpdGViKDAsICZkcDJfcHRyLT51LmljLlN0YXR1cyk7CiAgICAgd3JpdGViKDB4ZmYsICZkcDJfcHRyLT5pby5pcnFkZWwpOwogICAgIGlmIChwcm90X3ZlciAhPSBQUk9UT0NPTF9WRVJTSU9OKSB7CkBAIC04NTksOSArODU5LDkgQEAKICAgICByZWdpc3RlciBnZHQ2X2RwcmFtX3N0ciBfX2lvbWVtICpkcDZfcHRyOwogICAgIHJlZ2lzdGVyIGdkdDZjX2RwcmFtX3N0ciBfX2lvbWVtICpkcDZjX3B0cjsKICAgICByZWdpc3RlciBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7Ci0gICAgdWxvbmczMiByZXRyaWVzOwotICAgIHVuY2hhciBwcm90X3ZlcjsKLSAgICB1c2hvcnQgY29tbWFuZDsKKyAgICB1MzIgcmV0cmllczsKKyAgICB1OCBwcm90X3ZlcjsKKyAgICB1MTYgY29tbWFuZDsKICAgICBpbnQgaSwgZm91bmQgPSBGQUxTRTsKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X3BjaSgpXG4iKSk7CkBAIC04NzEsNyArODcxLDcgQEAKICAgICBlbHNlCiAgICAgICAgIGhhLT5vZW1faWQgPSBPRU1fSURfSUNQOwogICAgIGhhLT5icmRfcGh5cyA9IChwZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IChwZGV2LT5kZXZmbiAmIDB4ZjgpOwotICAgIGhhLT5zdHlwZSA9ICh1bG9uZzMyKXBkZXYtPmRldmljZTsKKyAgICBoYS0+c3R5cGUgPSAodTMyKXBkZXYtPmRldmljZTsKICAgICBoYS0+aXJxID0gcGRldi0+aXJxOwogICAgIGhhLT5wZGV2ID0gcGRldjsKICAgICAKQEAgLTg5MSw3ICs4OTEsNyBAQAogICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgIGZvciAoaSA9IDB4QzgwMDA7IGkgPCAweEU4MDAwOyBpICs9IDB4NDAwMCkgewogICAgICAgICAgICAgICAgIGlvdW5tYXAoaGEtPmJyZCk7Ci0gICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHVzaG9ydCkpOyAKKyAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodTE2KSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CisgICAgICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2X3B0ci0+dS5pYy5TX1N0YXR1cyk7CiAgICAgICAgIHdyaXRlYigweGZmLCAmZHA2X3B0ci0+aW8uaXJxZGVsKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2Y19wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNmNfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2Y19wdHItPnUuaWMuU3RhdHVzKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKICAgICAgICAgICAgIHByaW50aygiR0RULVBDSTogSWxsZWdhbCBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKQEAgLTExMjgsNyArMTEyOCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTExODAsNyArMTE4MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgIT0gUFJPVE9DT0xfVkVSU0lPTikgewogICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbGxlZ2FsIHByb3RvY29sIHZlcnNpb25cbiIpOwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CisgICAgICAgIHByb3RfdmVyID0gKHU4KShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgPCAweDJiKSAgICAgIC8qIEZXIDwgeC40Mzogbm8gNjQtYml0IERNQSBzdXBwb3J0ICovCiAgICAgICAgICAgICBoYS0+ZG1hNjRfc3VwcG9ydCA9IDA7CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2R0aF9lbmFibGVfaW50KGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgZ2R0Nl9kcHJhbV9zdHIgX19pb21lbSAqZHA2X3B0cjsKICAgICBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7CkBAIC0xMjc0LDE0ICsxMjc0LDE0IEBACiB9CiAKIC8qIHJldHVybiBJU3RhdHVzIGlmIGludGVycnVwdCB3YXMgZnJvbSB0aGlzIGNhcmQgZWxzZSAwICovCi1zdGF0aWMgdW5jaGFyIGdkdGhfZ2V0X3N0YXR1cyhnZHRoX2hhX3N0ciAqaGEpCitzdGF0aWMgdTggZ2R0aF9nZXRfc3RhdHVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bmNoYXIgSVN0YXR1cyA9IDA7CisgICAgdTggSVN0YXR1cyA9IDA7CiAKICAgICBUUkFDRSgoImdkdGhfZ2V0X3N0YXR1cygpIGlycSAlZCBjdHJfY291bnQgJWRcbiIsIGhhLT5pcnEsIGdkdGhfY3RyX2NvdW50KSk7CiAKICAgICAgICAgaWYgKGhhLT50eXBlID09IEdEVF9FSVNBKQotICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodXNob3J0KWhhLT5ibWljICsgRURPT1JSRUcpOworICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodTE2KWhhLT5ibWljICsgRURPT1JSRUcpOwogICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQogICAgICAgICAgICAgSVN0YXR1cyA9CiAgICAgICAgICAgICAgICAgcmVhZGIoJigoZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqKWhhLT5icmQpLT51LmljLkNtZF9JbmRleCk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQAogICAgICAgICBpZiAoaGEtPmNtZF90YWJbaV0uY21uZCA9PSBVTlVTRURfQ01ORCkgewogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uY21uZCA9IGhhLT5wY2NiLT5SZXF1ZXN0QnVmZmVyOwogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uc2VydmljZSA9IGhhLT5wY2NiLT5TZXJ2aWNlOwotICAgICAgICAgICAgaGEtPnBjY2ItPkNvbW1hbmRJbmRleCA9ICh1bG9uZzMyKWkrMjsKKyAgICAgICAgICAgIGhhLT5wY2NiLT5Db21tYW5kSW5kZXggPSAodTMyKWkrMjsKICAgICAgICAgICAgIHJldHVybiAoaSsyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM2Miw3IEBACiAgICAgcmVnaXN0ZXIgZ2R0NmNfZHByYW1fc3RyIF9faW9tZW0gKmRwNmNfcHRyOwogICAgIGdkdDZfZHByYW1fc3RyIF9faW9tZW0gKmRwNl9wdHI7CiAgICAgZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqZHAyX3B0cjsKLSAgICB1c2hvcnQgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKKyAgICB1MTYgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKICAgICAKICAgICBUUkFDRSgoImdkdGhfY29weV9jb21tYW5kKCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwogCkBAIC0xMzg2LDI4ICsxMzg2LDI4IEBACiAgICAgICAgIGRwMl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDJfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHAyX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDJfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJKSB7CiAgICAgICAgIGRwNl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDZfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2X3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJTkVXKSB7CiAgICAgICAgIGRwNmNfcHRyID0gaGEtPmJyZDsKICAgICAgICAgd3JpdGV3KGRwX29mZnNldCArIERQTUVNX0NPTU1BTkRfT0ZGU0VULAogICAgICAgICAgICAgICAgICAgICAmZHA2Y19wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLm9mZnNldCk7Ci0gICAgICAgIHdyaXRldygodXNob3J0KWNtZF9wdHItPlNlcnZpY2UsCisgICAgICAgIHdyaXRldygodTE2KWNtZF9wdHItPlNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICZkcDZjX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZjX3B0ci0+dS5pYy5nZHRfZHByX2NtZFtkcF9vZmZzZXRdLGNtZF9wdHIsY3BfY291bnQpOwogICAgIH0gZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX1BDSU1QUikgewogICAgICAgICBkcDZtX3B0ciA9IGhhLT5icmQ7CiAgICAgICAgIHdyaXRldyhkcF9vZmZzZXQgKyBEUE1FTV9DT01NQU5EX09GRlNFVCwKICAgICAgICAgICAgICAgICAgICAgJmRwNm1fcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2bV9wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHA2bV9wdHItPnUuaWMuZ2R0X2Rwcl9jbWRbZHBfb2Zmc2V0XSxjbWRfcHRyLGNwX2NvdW50KTsKICAgICB9CkBAIC0xNDIwLDE0ICsxNDIwLDE0IEBACiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKICAgICB7Ci0gICAgICAgIHVsb25nMzIgaSxqOworICAgICAgICB1MzIgaSxqOwogICAgICAgICBmb3IgKGk9MCxqPTA7IGo8R0RUSF9NQVhDTURTOyArK2opIHsKICAgICAgICAgICAgIGlmIChoYS0+Y21kX3RhYltqXS5jbW5kICE9IFVOVVNFRF9DTU5EKQogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQogICAgICAgICBpZiAobWF4X2luZGV4IDwgaSkgewogICAgICAgICAgICAgbWF4X2luZGV4ID0gaTsKLSAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X2luZGV4ID0gJWRcbiIsKHVzaG9ydClpKSk7CisgICAgICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9pbmRleCA9ICVkXG4iLCh1MTYpaSkpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNDUwLDcgKzE0NTAsNyBAQAogICAgIH0KIH0KIAotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsIHVsb25nMzIgdGltZSkKK3N0YXRpYyBpbnQgZ2R0aF93YWl0KGdkdGhfaGFfc3RyICpoYSwgaW50IGluZGV4LCB1MzIgdGltZSkKIHsKICAgICBpbnQgYW5zd2VyX2ZvdW5kID0gRkFMU0U7CiAgICAgaW50IHdhaXRfaW5kZXggPSAwOwpAQCAtMTQ3Niw4ICsxNDc2LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdW5jaGFyIHNlcnZpY2UsIHVzaG9ydCBvcGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsIHVsb25nNjQgcDMpCitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHAxLCB1NjQgcDIsIHU2NCBwMykKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZF9wdHI7CiAgICAgaW50IHJldHJpZXMsaW5kZXg7CkBAIC0xNTAxLDM1ICsxNTAxLDM1IEBACiAgICAgICAgIGlmIChzZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBHRFRfSU9DVEwpIHsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnN1YmZ1bmMgPSBwMTsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLmNoYW5uZWwgPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBhcmFtX3NpemUgPSAodXNob3J0KXAzOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuaW9jdGwuY2hhbm5lbCA9ICh1MzIpcDI7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5wYXJhbV9zaXplID0gKHUxNilwMzsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBfcGFyYW0gPSBoYS0+c2NyYXRjaF9waHlzOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHVzaG9ydClwMTsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHUxNilwMTsKICAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkJsb2NrTm8gID0gcDI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1c2hvcnQpcDE7Ci0gICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodWxvbmczMilwMjsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1MTYpcDE7CisgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodTMyKXAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlID09IFNDU0lSQVdTRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAoaGEtPnJhd19mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5kaXJlY3Rpb24gID0gcDE7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5idXMgICAgICAgID0gKHVuY2hhcilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQubHVuICAgICAgICA9ICh1bmNoYXIpKHAzID4+IDgpOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQuYnVzICAgICAgICA9ICh1OClwMjsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5sdW4gICAgICAgID0gKHU4KShwMyA+PiA4KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcuZGlyZWN0aW9uICA9IHAxOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LmJ1cyAgICAgICAgPSAodW5jaGFyKXAyOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3Lmx1biAgICAgICAgPSAodW5jaGFyKShwMyA+PiA4KTsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy5idXMgICAgICAgID0gKHU4KXAyOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcubHVuICAgICAgICA9ICh1OCkocDMgPj4gOCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZSA9PSBTQ1JFRU5TRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAob3Bjb2RlID09IEdEVF9SRUFMVElNRSkgewotICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzBdID0gcDE7Ci0gICAgICAgICAgICAgICAgKih1bG9uZzMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbNF0gPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICAqKHVsb25nMzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVs4XSA9ICh1bG9uZzMyKXAzOworICAgICAgICAgICAgICAgICoodTMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbMF0gPSBwMTsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzRdID0gKHUzMilwMjsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzhdID0gKHUzMilwMzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBoYS0+Y21kX2xlbiAgICAgICAgICA9IHNpemVvZihnZHRoX2NtZF9zdHIpOwpAQCAtMTU1NSw5ICsxNTU1LDkgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2R0aF9zZWFyY2hfZHJpdmVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1c2hvcnQgY2Rldl9jbnQsIGk7CisgICAgdTE2IGNkZXZfY250LCBpOwogICAgIGludCBvazsKLSAgICB1bG9uZzMyIGJ1c19ubywgZHJ2X2NudCwgZHJ2X25vLCBqOworICAgIHUzMiBidXNfbm8sIGRydl9jbnQsIGRydl9ubywgajsKICAgICBnZHRoX2dldGNoX3N0ciAqY2huOwogICAgIGdkdGhfZHJsaXN0X3N0ciAqZHJsOwogICAgIGdkdGhfaW9jaGFuX3N0ciAqaW9jOwpAQCAtMTU3MCw4ICsxNTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgR0RUSF9SVEMKLSAgICB1bmNoYXIgcnRjWzEyXTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBydGNbMTJdOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZW5kaWYgICAgIAogICAgCiAgICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSBoYW51bSAlZFxuIiwgaGEtPmhhbnVtKSk7CkBAIC0xNTg0LDcgKzE1ODQsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+c2NyZWVuX2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX0lOSVQsIDAsIDAsIDApOwogICAgIGlmICghb2spIHsKICAgICAgICAgcHJpbnRrKCJHRFQtSEEgJWQ6IEluaXRpYWxpemF0aW9uIGVycm9yIHNjcmVlbiBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MDksMTEgKzE2MDksMTEgQEAKICAgICAgICAgICAgIHJ0Y1tqXSA9IENNT1NfUkVBRChqKTsKICAgICB9IHdoaWxlIChydGNbMF0gIT0gQ01PU19SRUFEKDApKTsKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyaXZlcygpOiBSVEM6ICV4LyV4LyV4XG4iLCoodWxvbmczMiAqKSZydGNbMF0sCi0gICAgICAgICAgICAqKHVsb25nMzIgKikmcnRjWzRdLCAqKHVsb25nMzIgKikmcnRjWzhdKSk7CisgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCk6IFJUQzogJXgvJXgvJXhcbiIsKih1MzIgKikmcnRjWzBdLAorICAgICAgICAgICAgKih1MzIgKikmcnRjWzRdLCAqKHUzMiAqKSZydGNbOF0pKTsKICAgICAvKiAzLiBzZW5kIHRvIGNvbnRyb2xsZXIgZmlybXdhcmUgKi8KLSAgICBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX1JFQUxUSU1FLCAqKHVsb25nMzIgKikmcnRjWzBdLAotICAgICAgICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZydGNbNF0sICoodWxvbmczMiAqKSZydGNbOF0pOworICAgIGdkdGhfaW50ZXJuYWxfY21kKGhhLCBTQ1JFRU5TRVJWSUNFLCBHRFRfUkVBTFRJTUUsICoodTMyICopJnJ0Y1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAqKHUzMiAqKSZydGNbNF0sICoodTMyICopJnJ0Y1s4XSk7CiAjZW5kaWYgIAogIAogICAgIC8qIHVuZnJlZXplIGFsbCBJT3MgKi8KQEAgLTE2MjcsNyArMTYyNyw3IEBACiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0ID0gR0RUXzY0QklUOwogICAgIH0KLSAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1c2hvcnQpU19OT0ZVTkMpKQorICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHUxNilTX05PRlVOQykpCiAgICAgICAgIG9rID0gZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX0lOSVQsIExJTlVYX09TLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciBjYWNoZSBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKTogQ0FDSEVTRVJWSUNFIGluaXRpYWxpemVkXG4iKSk7Ci0gICAgY2Rldl9jbnQgPSAodXNob3J0KWhhLT5pbmZvOworICAgIGNkZXZfY250ID0gKHUxNiloYS0+aW5mbzsKICAgICBoYS0+ZndfdmVycyA9IGhhLT5zZXJ2aWNlOwogCiAjaWZkZWYgSU5UX0NPQUwKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAgICAgICAgIHBtb2QgPSAoZ2R0aF9wZXJmX21vZGVzICopaGEtPnBzY3JhdGNoOwogICAgICAgICBwbW9kLT52ZXJzaW9uICAgICAgICAgID0gMTsKICAgICAgICAgcG1vZC0+c3RfbW9kZSAgICAgICAgICA9IDE7ICAgIC8qIGVuYWJsZSBvbmUgc3RhdHVzIGJ1ZmZlciAqLwotICAgICAgICAqKCh1bG9uZzY0ICopJnBtb2QtPnN0X2J1ZmZfYWRkcjEpID0gaGEtPmNvYWxfc3RhdF9waHlzOworICAgICAgICAqKCh1NjQgKikmcG1vZC0+c3RfYnVmZl9hZGRyMSkgPSBoYS0+Y29hbF9zdGF0X3BoeXM7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfaW5keDEgICAgPSBDT0FMSU5ERVg7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfYWRkcjIgICAgPSAwOwogICAgICAgICBwbW9kLT5zdF9idWZmX3VfYWRkcjIgID0gMDsKQEAgLTE3MDUsNyArMTcwNSw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGEtPmJ1c19pZFtidXNfbm9dID0gMHhmZjsKICAgICAgICAgfSAgICAgICAKLSAgICAgICAgaGEtPmJ1c19jbnQgPSAodW5jaGFyKWJ1c19ubzsKKyAgICAgICAgaGEtPmJ1c19jbnQgPSAodTgpYnVzX25vOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSAlZCBjaGFubmVsc1xuIixoYS0+YnVzX2NudCkpOwogCkBAIC0xNzg5LDEyICsxNzg5LDEyIEBACiAKICAgICAgICAgLyogbG9naWNhbCBkcml2ZXMgKi8KICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0NOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxzaXplb2YodWxvbmczMikpKSB7Ci0gICAgICAgICAgICBkcnZfY250ID0gKih1bG9uZzMyICopaGEtPnBzY3JhdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLHNpemVvZih1MzIpKSkgeworICAgICAgICAgICAgZHJ2X2NudCA9ICoodTMyICopaGEtPnBzY3JhdGNoOwogICAgICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0xJU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodWxvbmczMikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodTMyKSkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZHJ2X2NudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodWxvbmczMiAqKWhhLT5wc2NyYXRjaClbal07CisgICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodTMyICopaGEtPnBzY3JhdGNoKVtqXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRydl9ubyA8IE1BWF9MRFJJVkVTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW2Rydl9ub10uaXNfbG9nZHJ2ID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMigoIkRyaXZlICVkIGlzIGxvZy4gZHJpdmVcbiIsZHJ2X25vKSk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NTSVJBV1NFUlZJQ0UsIEdEVF9JTklULCAwLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciByYXcgc2VydmljZSAoY29kZSAlZClcbiIsCkBAIC0xODU0LDcgKzE4NTQsNyBAQAogICAgICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDU0lSQVdTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBSQVdTRVJWSUNFICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPnJhd19mZWF0IHw9ICh1c2hvcnQpaGEtPmluZm87CisgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgfD0gKHUxNiloYS0+aW5mbzsKICAgICAgICAgfQogICAgIH0gCiAKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBDQUNIRVNFUlYuICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPmNhY2hlX2ZlYXQgfD0gKHVzaG9ydCloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0IHw9ICh1MTYpaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5MjMsOSArMTkyMyw5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9hbmFseXNlX2hkcml2ZShnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKQogewotICAgIHVsb25nMzIgZHJ2X2N5bHM7CisgICAgdTMyIGRydl9jeWxzOwogICAgIGludCBkcnZfaGRzLCBkcnZfc2VjczsKIAogICAgIFRSQUNFKCgiZ2R0aF9hbmFseXNlX2hkcml2ZSgpIGhhbnVtICVkIGRyaXZlICVkXG4iLCBoYS0+aGFudW0sIGhkcml2ZSkpOwpAQCAtMTk0NCwxNyArMTk0NCwxNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGRydl9oZHMgPSBoYS0+aW5mbzIgJiAweGZmOwogICAgICAgICBkcnZfc2VjcyA9IChoYS0+aW5mbzIgPj4gOCkgJiAweGZmOwotICAgICAgICBkcnZfY3lscyA9ICh1bG9uZzMyKWhhLT5oZHJbaGRyaXZlXS5zaXplIC8gZHJ2X2hkcyAvIGRydl9zZWNzOworICAgICAgICBkcnZfY3lscyA9ICh1MzIpaGEtPmhkcltoZHJpdmVdLnNpemUgLyBkcnZfaGRzIC8gZHJ2X3NlY3M7CiAgICAgfQotICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1bmNoYXIpZHJ2X2hkczsKLSAgICBoYS0+aGRyW2hkcml2ZV0uc2VjcyAgPSAodW5jaGFyKWRydl9zZWNzOworICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1OClkcnZfaGRzOworICAgIGhhLT5oZHJbaGRyaXZlXS5zZWNzICA9ICh1OClkcnZfc2VjczsKICAgICAvKiByb3VuZCBzaXplICovCiAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgID0gZHJ2X2N5bHMgKiBkcnZfaGRzICogZHJ2X3NlY3M7CiAgICAgCiAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfWF9JTkZPLCBoZHJpdmUsIDAsIDApCiAgICAgICAgICAgICAmJiBoYS0+aW5mbzIgIT0gMCkgewotICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHVsb25nNjQpaGEtPmluZm8yIDw8IDMyKSB8IGhhLT5pbmZvOworICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHU2NCloYS0+aW5mbzIgPDwgMzIpIHwgaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjZHIuICVkIHNpemUgJWQgaGRzICVkIHNjcyAlZFxuIiwKQEAgLTE5NjQsNyArMTk2NCw3IEBACiAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9ERVZUWVBFLCBoZHJpdmUsIDAsIDApKSB7CiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgZGV2dHlwZSAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLmRldnR5cGUgPSAodXNob3J0KWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0uZGV2dHlwZSA9ICh1MTYpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogY2x1c3RlciBpbmZvICovCkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBACiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgY2x1c3RlciBpbmZvICVkXG4iLAogICAgICAgICAgICAgICAgIGhkcml2ZSxoYS0+aW5mbykpOwogICAgICAgICBpZiAoIXNoYXJlZF9hY2Nlc3MpCi0gICAgICAgICAgICBoYS0+aGRyW2hkcml2ZV0uY2x1c3Rlcl90eXBlID0gKHVuY2hhciloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5oZHJbaGRyaXZlXS5jbHVzdGVyX3R5cGUgPSAodTgpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogUi9XIGF0dHJpYnV0ZXMgKi8KICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX1JXX0FUVFJJQlMsIGhkcml2ZSwgMCwgMCkpIHsKICAgICAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjYWNoZSBkcml2ZSAlZCByL3cgYXR0cmliLiAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLnJ3X2F0dHJpYnMgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0ucndfYXR0cmlicyA9ICh1OCloYS0+aW5mbzsKICAgICB9CiAKICAgICByZXR1cm4gMTsKQEAgLTE5ODgsMTIgKzE5ODgsMTIgQEAKIAogLyogY29tbWFuZCBxdWV1ZWluZy9zZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KQorc3RhdGljIHZvaWQgZ2R0aF9wdXRxKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHU4IHByaW9yaXR5KQogewogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgVFJBQ0UoKCJnZHRoX3B1dHEoKSBwcmlvcml0eSAlZFxuIixwcmlvcml0eSkpOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKQEAgLTIwMjMsNyArMjAyMyw3IEBACiAgICAgICAgICsrZmxhZ3M7CiAgICAgaWYgKG1heF9ycSA8IGZsYWdzKSB7CiAgICAgICAgIG1heF9ycSA9IGZsYWdzOwotICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9ycSA9ICVkXG4iLCh1c2hvcnQpbWF4X3JxKSk7CisgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3JxID0gJWRcbiIsKHUxNiltYXhfcnEpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTIwMzIsOSArMjAzMiw5IEBACiB7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bmNoYXIgYiwgdCwgbCwgZmlyc3R0aW1lOwotICAgIHVuY2hhciB0aGlzX2NtZCwgbmV4dF9jbWQ7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IGIsIHQsIGwsIGZpcnN0dGltZTsKKyAgICB1OCB0aGlzX2NtZCwgbmV4dF9jbWQ7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAgICAgaW50IGNtZF9pbmRleDsKIAogICAgIFRSQUNFKCgiZ2R0aF9uZXh0KCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwpAQCAtMjI4MiwyMCArMjI4MiwyMCBAQAogICogYnVmZmVycywga21hcF9hdG9taWMoKSBhcyBuZWVkZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHVzaG9ydCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KQogewotICAgIHVzaG9ydCBjcGNvdW50LGksIG1heF9zZyA9IHNjc2lfc2dfY291bnQoc2NwKTsKLSAgICB1c2hvcnQgY3BzdW0sY3Bub3c7CisgICAgdTE2IGNwY291bnQsaSwgbWF4X3NnID0gc2NzaV9zZ19jb3VudChzY3ApOworICAgIHUxNiBjcHN1bSxjcG5vdzsKICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogICAgIGNoYXIgKmFkZHJlc3M7CiAKLSAgICBjcGNvdW50ID0gbWluX3QodXNob3J0LCBjb3VudCwgc2NzaV9idWZmbGVuKHNjcCkpOworICAgIGNwY291bnQgPSBtaW5fdCh1MTYsIGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSk7CiAKICAgICBpZiAoY3Bjb3VudCkgewogICAgICAgICBjcHN1bT0wOwogICAgICAgICBzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgc2wsIG1heF9zZywgaSkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgICAgIGNwbm93ID0gKHVzaG9ydClzbC0+bGVuZ3RoOworICAgICAgICAgICAgY3Bub3cgPSAodTE2KXNsLT5sZW5ndGg7CiAgICAgICAgICAgICBUUkFDRSgoImNvcHlfaW50ZXJuYWwoKSBub3cgJWQgc3VtICVkIGNvdW50ICVkICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjcG5vdywgY3BzdW0sIGNwY291bnQsIHNjc2lfYnVmZmxlbihzY3ApKSk7CiAgICAgICAgICAgICBpZiAoY3BzdW0rY3Bub3cgPiBjcGNvdW50KSAKQEAgLTIzMjUsNyArMjMyNSw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCkKIHsKLSAgICB1bmNoYXIgdDsKKyAgICB1OCB0OwogICAgIGdkdGhfaW5xX2RhdGEgaW5xOwogICAgIGdkdGhfcmRjYXBfZGF0YSByZGM7CiAgICAgZ2R0aF9zZW5zZV9kYXRhIHNkOwpAQCAtMjM4OSw3ICsyMzg5LDcgQEAKIAogICAgICAgY2FzZSBSRUFEX0NBUEFDSVRZOgogICAgICAgICBUUkFDRTIoKCJSZWFkIGNhcGFjaXR5IGhkcml2ZSAlZFxuIix0KSk7Ci0gICAgICAgIGlmIChoYS0+aGRyW3RdLnNpemUgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICBpZiAoaGEtPmhkclt0XS5zaXplID4gKHU2NCkweGZmZmZmZmZmKQogICAgICAgICAgICAgcmRjLmxhc3RfYmxvY2tfbm8gPSAweGZmZmZmZmZmOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZGMubGFzdF9ibG9ja19ubyA9IGNwdV90b19iZTMyKGhhLT5oZHJbdF0uc2l6ZS0xKTsKQEAgLTI0MjUsMTIgKzI0MjUsMTIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSkKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZHA7CiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8gKmNtbmRpbmZvID0gZ2R0aF9jbW5kX3ByaXYoc2NwKTsKLSAgICB1bG9uZzMyIGNudCwgYmxvY2tjbnQ7Ci0gICAgdWxvbmc2NCBubywgYmxvY2tubzsKKyAgICB1MzIgY250LCBibG9ja2NudDsKKyAgICB1NjQgbm8sIGJsb2Nrbm87CiAgICAgaW50IGksIGNtZF9pbmRleCwgcmVhZF93cml0ZSwgc2djbnQsIG1vZGU2NDsKIAogICAgIGNtZHAgPSBoYS0+cGNjYjsKQEAgLTI0OTgsMTcgKzI0OTgsMTcgQEAKIAogICAgIGlmIChyZWFkX3dyaXRlKSB7CiAgICAgICAgIGlmIChzY3AtPmNtZF9sZW4gPT0gMTYpIHsKLSAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMl0sIHNpemVvZih1bG9uZzY0KSk7CisgICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodTY0KSk7CiAgICAgICAgICAgICBibG9ja25vID0gYmU2NF90b19jcHUobm8pOwotICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodTMyKSk7CiAgICAgICAgICAgICBibG9ja2NudCA9IGJlMzJfdG9fY3B1KGNudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDEwKSB7Ci0gICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFsyXSwgc2l6ZW9mKHUzMikpOwogICAgICAgICAgICAgYmxvY2tubyA9IGJlMzJfdG9fY3B1KG5vKTsKLSAgICAgICAgICAgIG1lbWNweSgmY250LCAmc2NwLT5jbW5kWzddLCBzaXplb2YodXNob3J0KSk7CisgICAgICAgICAgICBtZW1jcHkoJmNudCwgJnNjcC0+Y21uZFs3XSwgc2l6ZW9mKHUxNikpOwogICAgICAgICAgICAgYmxvY2tjbnQgPSBiZTE2X3RvX2NwdShjbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFswXSwgc2l6ZW9mKHVsb25nMzIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMF0sIHNpemVvZih1MzIpKTsKICAgICAgICAgICAgIGJsb2Nrbm8gPSBiZTMyX3RvX2NwdShubykgJiAweDAwMWZmZmZmVUw7CiAgICAgICAgICAgICBibG9ja2NudD0gc2NwLT5jbW5kWzRdPT0wID8gMHgxMDAgOiBzY3AtPmNtbmRbNF07CiAgICAgICAgIH0KQEAgLTI1MTYsNyArMjUxNiw3IEBACiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tObyA9IGJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tDbnQgPSBibG9ja2NudDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtZHAtPnUuY2FjaGUuQmxvY2tObyA9ICh1bG9uZzMyKWJsb2Nrbm87CisgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrTm8gPSAodTMyKWJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrQ250ID0gYmxvY2tjbnQ7CiAgICAgICAgIH0KIApAQCAtMjUyOCwxMiArMjUyOCwxMiBAQAogICAgICAgICAgICAgaWYgKG1vZGU2NCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2w7CiAKLSAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuRGVzdEFkZHI9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUuY2FjaGU2NC5EZXN0QWRkcj0gKHU2NCktMTsKICAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuc2dfY2FueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPSBzZ19kbWFfYWRkcmVzcyhzbCk7CiAjaWZkZWYgR0RUSF9ETUFfU1RBVElTVElDUwotICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI1NTUsOCArMjU1NSw4IEBACiAgICAgICAgICAgICB9CiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgIGlmIChtYXhfc2cgPCAodWxvbmczMilzZ2NudCkgewotICAgICAgICAgICAgICAgIG1heF9zZyA9ICh1bG9uZzMyKXNnY250OworICAgICAgICAgICAgaWYgKG1heF9zZyA8ICh1MzIpc2djbnQpIHsKKyAgICAgICAgICAgICAgICBtYXhfc2cgPSAodTMyKXNnY250OwogICAgICAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3NnID0gJWRcbiIsbWF4X3NnKSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKQEAgLTI1NzIsNyArMjU3Miw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGU2NC5CbG9ja05vLGNtZHAtPnUuY2FjaGU2NC5CbG9ja0NudCkpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5jYWNoZTY0LnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlNjQuc2dfY2FueiAqIHNpemVvZihnZHRoX3NnNjRfc3RyKTsKKyAgICAgICAgICAgICh1MTYpY21kcC0+dS5jYWNoZTY0LnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZzY0X3N0cik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQ6IGFkZHIuICV4IHNnYW56ICV4IHNncHRyMCAleCBzZ2xlbjAgJXhcbiIsCiAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkRlc3RBZGRyLGNtZHAtPnUuY2FjaGUuc2dfY2FueiwKQEAgLTI1ODEsNyArMjU4MSw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGUuQmxvY2tObyxjbWRwLT51LmNhY2hlLkJsb2NrQ250KSk7CiAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmNhY2hlLnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOworICAgICAgICAgICAgKHUxNiljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOwogICAgIH0KICAgICBpZiAoaGEtPmNtZF9sZW4gJiAzKQogICAgICAgICBoYS0+Y21kX2xlbiArPSAoNCAtIChoYS0+Y21kX2xlbiAmIDMpKTsKQEAgLTI2MDAsMTUgKzI2MDAsMTUgQEAKICAgICByZXR1cm4gY21kX2luZGV4OwogfQogCi1zdGF0aWMgaW50IGdkdGhfZmlsbF9yYXdfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBiKQorc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKQogewogICAgIHJlZ2lzdGVyIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1c2hvcnQgaTsKKyAgICB1MTYgaTsKICAgICBkbWFfYWRkcl90IHNlbnNlX3BhZGRyOwogICAgIGludCBjbWRfaW5kZXgsIHNnY250LCBtb2RlNjQ7Ci0gICAgdW5jaGFyIHQsbDsKKyAgICB1OCB0LGw7CiAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7Ci0gICAgdWxvbmcgb2Zmc2V0OworICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKIAogICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7CkBAIC0yNjU0LDcgKzI2NTQsNyBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcGFnZSA9IHZpcnRfdG9fcGFnZShzY3AtPnNlbnNlX2J1ZmZlcik7Ci0gICAgICAgIG9mZnNldCA9ICh1bG9uZylzY3AtPnNlbnNlX2J1ZmZlciAmIH5QQUdFX01BU0s7CisgICAgICAgIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNjcC0+c2Vuc2VfYnVmZmVyICYgflBBR0VfTUFTSzsKICAgICAgICAgc2Vuc2VfcGFkZHIgPSBwY2lfbWFwX3BhZ2UoaGEtPnBkZXYscGFnZSxvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKQEAgLTI3MDMsMTIgKzI3MDMsMTIgQEAKICAgICAgICAgICAgIGlmIChtb2RlNjQpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogCi0gICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZGF0YSA9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2dfcmFueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbaV0uc2dfcHRyID0gc2dfZG1hX2FkZHJlc3Moc2wpOwogI2lmZGVmIEdEVEhfRE1BX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtZHAtPnUucmF3NjQuc2dfbHN0W2ldLnNnX3B0ciA+ICh1bG9uZzY0KTB4ZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgICAgIGlmIChjbWRwLT51LnJhdzY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI3NDQsNyArMjc0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuKSk7CiAgICAgICAgICAgICAvKiBldmFsdWF0ZSBjb21tYW5kIHNpemUgKi8KICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnJhdzY0LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOworICAgICAgICAgICAgICAgICh1MTYpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVFJBQ0UoKCJyYXcgY21kOiBhZGRyLiAleCBzZ2FueiAleCBzZ3B0cjAgJXggc2dsZW4wICV4XG4iLAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNkYXRhLGNtZHAtPnUucmF3LnNnX3JhbnosCkBAIC0yNzUyLDcgKzI3NTIsNyBAQAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNnX2xzdFswXS5zZ19sZW4pKTsKICAgICAgICAgICAgIC8qIGV2YWx1YXRlIGNvbW1hbmQgc2l6ZSAqLwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUucmF3LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXcuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnX3N0cik7CisgICAgICAgICAgICAgICAgKHUxNiljbWRwLT51LnJhdy5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2dfc3RyKTsKICAgICAgICAgfQogICAgIH0KICAgICAvKiBjaGVjayBzcGFjZSAqLwpAQCAtMjgwMiw3ICsyODAyLDcgQEAKICAgICBpZiAoY21kcC0+T3BDb2RlID09IEdEVF9JT0NUTCkgewogICAgICAgICBUUkFDRTIoKCJJT0NUTFxuIikpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IAotICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHU2NCk7CiAgICAgfSBlbHNlIGlmIChjbWRwLT5TZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICBUUkFDRTIoKCJjYWNoZSBjb21tYW5kICVkXG4iLGNtZHAtPk9wQ29kZSkpOwogICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpCkBAIC0yODQwLDggKzI4NDAsOCBAQAogCiAKIC8qIENvbnRyb2xsZXIgZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb25zICovCi1zdGF0aWMgZ2R0aF9ldnRfc3RyICpnZHRoX3N0b3JlX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydCBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCkKK3N0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGlkeCwgZ2R0aF9ldnRfZGF0YSAqZXZ0KQogewogICAgIGdkdGhfZXZ0X3N0ciAqZTsKICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKQEAgLTI4OTAsNyArMjg5MCw3IEBACiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIFRSQUNFMigoImdkdGhfcmVhZF9ldmVudCgpIGhhbmRsZSAlZFxuIiwgaGFuZGxlKSk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtMjkxOSwxMiArMjkxOSwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY2hhciBhcHBsaWNhdGlvbiwgZ2R0aF9ldnRfc3RyICplc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFwcGxpY2F0aW9uLCBnZHRoX2V2dF9zdHIgKmVzdHIpCiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7Ci0gICAgdW5jaGFyIGZvdW5kID0gRkFMU0U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICB1OCBmb3VuZCA9IEZBTFNFOwogCiAgICAgVFJBQ0UyKCgiZ2R0aF9yZWFkYXBwX2V2ZW50KCkgYXBwLiAlZFxuIiwgYXBwbGljYXRpb24pKTsKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC0yOTY5LDkgKzI5NjksOSBAQAogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgU2NzaV9DbW5kICpzY3A7CiAgICAgaW50IHJ2YWwsIGk7Ci0gICAgdW5jaGFyIElTdGF0dXM7Ci0gICAgdXNob3J0IFNlcnZpY2U7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IElTdGF0dXM7CisgICAgdTE2IFNlcnZpY2U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAjaWZkZWYgSU5UX0NPQUwKICAgICBpbnQgY29hbGVzY2VkID0gRkFMU0U7CiAgICAgaW50IG5leHQgPSBGQUxTRTsKQEAgLTMwMTgsNyArMzAxOCw3IEBACiAgICAgICAgIGlmIChjb2FsZXNjZWQpIHsKICAgICAgICAgICAgIC8qIEZvciBjb2FsZXNjZWQgcmVxdWVzdHMgYWxsIHN0YXR1cwogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaXMgZm91bmQgaW4gdGhlIHN0YXR1cyBidWZmZXIgKi8KLSAgICAgICAgICAgIElTdGF0dXMgPSAodW5jaGFyKShwY3MtPnN0YXR1cyAmIDB4ZmYpOworICAgICAgICAgICAgSVN0YXR1cyA9ICh1OCkocGNzLT5zdGF0dXMgJiAweGZmKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0zMTk3LDcgKzMxOTcsNyBAQAogICAgICAgICAgICAgKythY3RfaW50X2NvYWw7CiAgICAgICAgICAgICBpZiAoYWN0X2ludF9jb2FsID4gbWF4X2ludF9jb2FsKSB7CiAgICAgICAgICAgICAgICAgbWF4X2ludF9jb2FsID0gYWN0X2ludF9jb2FsOwotICAgICAgICAgICAgICAgIHByaW50aygiR0RUOiBtYXhfaW50X2NvYWwgPSAlZFxuIiwodXNob3J0KW1heF9pbnRfY29hbCk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQ6IG1heF9pbnRfY29hbCA9ICVkXG4iLCh1MTYpbWF4X2ludF9jb2FsKTsKICAgICAgICAgICAgIH0KICNlbmRpZiAgICAgIAogICAgICAgICAgICAgLyogc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgc3RhdHVzICovCkBAIC0zMjI1LDEyICszMjI1LDEyIEBACiAJcmV0dXJuIF9fZ2R0aF9pbnRlcnJ1cHQoaGEsIGZhbHNlLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdW5jaGFyIGluZGV4LAorc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdTggaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKQogewogICAgIGdkdGhfbXNnX3N0ciAqbXNnOwogICAgIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAKICAgICBjbWRwID0gaGEtPnBjY2I7CkBAIC0zMjYzLDcgKzMyNjMsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyICA9IGhhLT5tc2dfcGh5czsKICAgICAgICAgICAgIGhhLT5jbWRfb2Zmc19kcG1lbSA9IDA7CiAgICAgICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyKSAKLSAgICAgICAgICAgICAgICArIHNpemVvZih1bG9uZzY0KTsKKyAgICAgICAgICAgICAgICArIHNpemVvZih1NjQpOwogICAgICAgICAgICAgaGEtPmNtZF9jbnQgPSAwOwogICAgICAgICAgICAgZ2R0aF9jb3B5X2NvbW1hbmQoaGEpOwogICAgICAgICAgICAgZ2R0aF9yZWxlYXNlX2V2ZW50KGhhKTsKQEAgLTMyOTcsNyArMzI5Nyw3IEBACiAgICAgICAgICAgICBjbWRwLT51LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIgID0gaGEtPm1zZ19waHlzOwogICAgICAgICAgICAgaGEtPmNtZF9vZmZzX2RwbWVtID0gMDsKICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIpIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgICAgICsgc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICBoYS0+Y21kX2NudCA9IDA7CiAgICAgICAgICAgICBnZHRoX2NvcHlfY29tbWFuZChoYSk7CiAgICAgICAgICAgICBnZHRoX3JlbGVhc2VfZXZlbnQoaGEpOwpAQCAtMzMzNSw3ICszMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNtbmRpbmZvLT5PcENvZGUpKTsKICAgICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNvbW1hbmRzIEdEVF9DTFVTVF9JTkZPL0dEVF9NT1VOVCA/ICovCiAgICAgICAgICAgICAgICAgaWYgKGNtbmRpbmZvLT5PcENvZGUgPT0gR0RUX0NMVVNUX0lORk8pIHsKLSAgICAgICAgICAgICAgICAgICAgaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSA9ICh1OCloYS0+aW5mbzsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgJiAKICAgICAgICAgICAgICAgICAgICAgICAgIENMVVNURVJfTU9VTlRFRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVCBNT1VOVEVEIC0+IE1PVU5UICovCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSAmPSB+Q0xVU1RFUl9SRVNFUlZFRDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KChjaGFyKilzY3AtPnNlbnNlX2J1ZmZlciwwLDE2KTsKLSAgICAgICAgICAgICAgICBpZiAoaGEtPnN0YXR1cyA9PSAodXNob3J0KVNfQ0FDSEVfUkVTRVJWKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhLT5zdGF0dXMgPT0gKHUxNilTX0NBQ0hFX1JFU0VSVikgewogICAgICAgICAgICAgICAgICAgICBzY3AtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgKFJFU0VSVkFUSU9OX0NPTkZMSUNUIDw8IDEpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNjcC0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsKQEAgLTM2MTQsMTYgKzM2MTQsMTYgQEAKICAgICAgICAgICAgIGNtZHAtPnUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkciAgPSBoYS0+bXNnX3BoeXM7CiAgICAgICAgICAgICBoYS0+Y21kX29mZnNfZHBtZW0gPSAwOwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkcikgCi0gICAgICAgICAgICAgICAgKyBzaXplb2YodWxvbmc2NCk7CisgICAgICAgICAgICAgICAgKyBzaXplb2YodTY0KTsKICAgICAgICAgICAgIGhhLT5jbWRfY250ID0gMDsKICAgICAgICAgICAgIGdkdGhfY29weV9jb21tYW5kKGhhKTsKICAgICAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfRUlTQSkKLSAgICAgICAgICAgICAgICBwcmludGsoIltFSVNBIHNsb3QgJWRdICIsKHVzaG9ydCloYS0+YnJkX3BoeXMpOworICAgICAgICAgICAgICAgIHByaW50aygiW0VJU0Egc2xvdCAlZF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQotICAgICAgICAgICAgICAgIHByaW50aygiW0RQTUVNIDB4JTRYXSAiLCh1c2hvcnQpaGEtPmJyZF9waHlzKTsKKyAgICAgICAgICAgICAgICBwcmludGsoIltEUE1FTSAweCU0WF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgIHByaW50aygiW1BDSSAlZC8lZF0gIiwodXNob3J0KShoYS0+YnJkX3BoeXM+PjgpLAotICAgICAgICAgICAgICAgICAgICAgICAodXNob3J0KSgoaGEtPmJyZF9waHlzPj4zKSYweDFmKSk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJbUENJICVkLyVkXSAiLCh1MTYpKGhhLT5icmRfcGh5cz4+OCksCisgICAgICAgICAgICAgICAgICAgICAgICh1MTYpKChoYS0+YnJkX3BoeXM+PjMpJjB4MWYpKTsKICAgICAgICAgICAgIGdkdGhfcmVsZWFzZV9ldmVudChoYSk7CiAgICAgICAgIH0KIApAQCAtMzY0MCw3ICszNjQwLDcgQEAKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuc2VydmljZSA9IGhhLT5zZXJ2aWNlOwogICAgICAgICAgICAgaGEtPmR2ci5ldS5hc3luYy5zdGF0dXMgID0gaGEtPnN0YXR1czsKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuaW5mbyAgICA9IGhhLT5pbmZvOwotICAgICAgICAgICAgKih1bG9uZzMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKKyAgICAgICAgICAgICoodTMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKICAgICAgICAgfQogICAgICAgICBnZHRoX3N0b3JlX2V2ZW50KCBoYSwgRVNfQVNZTkMsIGhhLT5zZXJ2aWNlLCAmaGEtPmR2ciApOwogICAgICAgICBnZHRoX2xvZ19ldmVudCggJmhhLT5kdnIsIE5VTEwgKTsKQEAgLTM2NDgsOCArMzY0OCw4IEBACiAgICAgICAgIC8qIG5ldyBob3N0IGRyaXZlIGZyb20gZXhwYW5kPyAqLwogICAgICAgICBpZiAoaGEtPnNlcnZpY2UgPT0gQ0FDSEVTRVJWSUNFICYmIGhhLT5zdGF0dXMgPT0gNTYpIHsKICAgICAgICAgICAgIFRSQUNFMigoImdkdGhfYXN5bmNfZXZlbnQoKTogbmV3IGhvc3QgZHJpdmUgJWQgY3JlYXRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKHVzaG9ydCloYS0+aW5mbykpOwotICAgICAgICAgICAgLyogZ2R0aF9hbmFseXNlX2hkcml2ZShoYW51bSwgKHVzaG9ydCloYS0+aW5mbyk7ICovCisgICAgICAgICAgICAgICAgICAgICh1MTYpaGEtPmluZm8pKTsKKyAgICAgICAgICAgIC8qIGdkdGhfYW5hbHlzZV9oZHJpdmUoaGFudW0sICh1MTYpaGEtPmluZm8pOyAqLwogICAgICAgICB9ICAgCiAgICAgfQogICAgIHJldHVybiAxOwpAQCAtMzY4MCwxMyArMzY4MCwxMyBAQAogICAgICAgICBmb3IgKGo9MCxpPTE7IGkgPCBmWzBdOyBpKz0yKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGZbaSsxXSkgewogICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bG9uZzMyKikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKKyAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHUzMiopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHVzaG9ydCopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CisgICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1MTYqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bmNoYXIqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOworICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodTgqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzcxMiwxNCArMzcxMiwxNCBAQAogfQogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi1zdGF0aWMgdW5jaGFyCWdkdGhfdGltZXJfcnVubmluZzsKK3N0YXRpYyB1OAlnZHRoX3RpbWVyX3J1bm5pbmc7CiAKLXN0YXRpYyB2b2lkIGdkdGhfdGltZW91dCh1bG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZ2R0aF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICB1bG9uZzMyIGk7CisgICAgdTMyIGk7CiAgICAgU2NzaV9DbW5kICpuc2NwOwogICAgIGdkdGhfaGFfc3RyICpoYTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYodW5saWtlbHkobGlzdF9lbXB0eSgmZ2R0aF9pbnN0YW5jZXMpKSkgewogCSAgICBnZHRoX3RpbWVyX3J1bm5pbmcgPSAwOwpAQCAtMzg5MSw4ICszODkxLDggQEAKIHsKIAlnZHRoX2hhX3N0ciAqaGEgPSBzaG9zdF9wcml2KHNjcC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm8gPSBnZHRoX2NtbmRfcHJpdihzY3ApOwotCXVuY2hhciBiLCB0OwotCXVsb25nIGZsYWdzOworCXU4IGIsIHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllbnVtIGJsa19laF90aW1lcl9yZXR1cm4gcmV0dmFsID0gQkxLX0VIX05PVF9IQU5ETEVEOwogCiAJVFJBQ0UoKCIlcygpIGNtZCAweCV4XG4iLCBzY3AtPmNtbmRbMF0sIF9fZnVuY19fKSk7CkBAIC0zOTI0LDkgKzM5MjQsOSBAQAogewogICAgIGdkdGhfaGFfc3RyICpoYSA9IHNob3N0X3ByaXYoc2NwLT5kZXZpY2UtPmhvc3QpOwogICAgIGludCBpOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgU2NzaV9DbW5kICpjbW5kOwotICAgIHVuY2hhciBiOworICAgIHU4IGI7CiAKICAgICBUUkFDRTIoKCJnZHRoX2VoX2J1c19yZXNldCgpXG4iKSk7CiAKQEAgLTM5NzQsNyArMzk3NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldixzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LHNlY3Rvcl90IGNhcCxpbnQgKmlwKQogewotICAgIHVuY2hhciBiLCB0OworICAgIHU4IGIsIHQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkOwogICAgIHVuc2lnbmVkIGNhcGFjaXR5OwpAQCAtNDA2Miw3ICs0MDYyLDcgQEAKIHsKICAgICBnZHRoX2lvY3RsX2V2ZW50IGV2dDsKICAgICBnZHRoX2hhX3N0ciAqaGE7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZXZ0LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2V2ZW50KSkpCiAgICAgICAgIHJldHVybiAtRUZBVUxUOwpAQCAtNDA5OCw4ICs0MDk4LDggQEAKIHN0YXRpYyBpbnQgaW9jX2xvY2tkcnYodm9pZCBfX3VzZXIgKmFyZykKIHsKICAgICBnZHRoX2lvY3RsX2xvY2tkcnYgbGRydjsKLSAgICB1bmNoYXIgaSwgajsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBpLCBqOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogCiAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZsZHJ2LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2xvY2tkcnYpKSkKQEAgLTQxNjUsNyArNDE2NSw3IEBACiB7CiAgICAgZ2R0aF9pb2N0bF9nZW5lcmFsIGdlbjsKICAgICBjaGFyICpidWYgPSBOVUxMOwotICAgIHVsb25nNjQgcGFkZHI7IAorICAgIHU2NCBwYWRkcjsgCiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogICAgIGludCBydmFsOwogCkBAIC00MTk0LDcgKzQxOTQsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXZpY2VObyA9IGdlbi5jb21tYW5kLnUuY2FjaGUuRGV2aWNlTm87CiAgICAgICAgICAgICAgICAgLyogYWRkcmVzc2VzICovCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgU0NBVFRFUl9HQVRIRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LkRlc3RBZGRyID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXN0QWRkciA9ICh1NjQpLTE7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5zZ19jYW56ID0gMTsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19sZW4gPSBnZW4uZGF0YV9sZW47CkBAIC00MjA3LDcgKzQyMDcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+Y2FjaGVfZmVhdCAmIFNDQVRURVJfR0FUSEVSKSB7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGUuRGVzdEFkZHIgPSAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2NhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFswXS5zZ19wdHIgPSAodWxvbmczMilwYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfcHRyID0gKHUzMilwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFsxXS5zZ19sZW4gPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MjMwLDcgKzQyMzAsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuZGlyZWN0aW9uID0gZ2VuLmNvbW1hbmQudS5yYXcuZGlyZWN0aW9uOwogICAgICAgICAgICAgICAgIC8qIGFkZHJlc3NlcyAqLwogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNkYXRhID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX3JhbnogPSAxOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwpAQCAtNDI0NCwxNCArNDI0NCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX3JhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfcHRyID0gKHVsb25nMzIpcGFkZHI7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX2xzdFswXS5zZ19wdHIgPSAodTMyKXBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMV0uc2dfbGVuID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IHBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19yYW56ID0gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2Vuc2VfZGF0YSA9ICh1bG9uZzMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOworICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNlbnNlX2RhdGEgPSAodTMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBnZW4uZGF0YV9sZW4rZ2VuLnNlbnNlX2xlbiwgYnVmLCBwYWRkcik7CkBAIC00MjgzLDcgKzQyODMsNyBAQAogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwotICAgIHVuY2hhciBpOworICAgIHU4IGk7CiAgICAgaW50IHJjID0gLUVOT01FTTsKICAgICB1MzIgY2x1c3Rlcl90eXBlID0gMDsKIApAQCAtNDMzNSwxMSArNDMzNSwxMSBAQAogewogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7Ci0gICAgdXNob3J0IGksIHN0YXR1cywgaGRyX2NudDsKLSAgICB1bG9uZzMyIGluZm87CisgICAgdTE2IGksIHN0YXR1cywgaGRyX2NudDsKKyAgICB1MzIgaW5mbzsKICAgICBpbnQgY3lscywgaGRzLCBzZWNzOwogICAgIGludCByYyA9IC1FTk9NRU07Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogCiAgICAgcnNjID0ga21hbGxvYyhzaXplb2YoKnJzYyksIEdGUF9LRVJORUwpOwpAQCAtNDM2Nyw3ICs0MzY3LDcgQEAKIAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogICAgICAgICBpID0gMDsKLSAgICAgICAgaGRyX2NudCA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoZHJfY250ID0gKHN0YXR1cyA9PSBTX09LID8gKHUxNilpbmZvIDogMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSA9IHJzYy0+aGRyX25vOwogICAgICAgICBoZHJfY250ID0gaSArIDE7CkBAIC00NDE4LDcgKzQ0MTgsNyBAQAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgaGEtPmhkcltpXS5kZXZ0eXBlID0gKHN0YXR1cyA9PSBTX09LID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgIGhhLT5oZHJbaV0uZGV2dHlwZSA9IChzdGF0dXMgPT0gU19PSyA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICBjbWQtPlNlcnZpY2UgPSBDQUNIRVNFUlZJQ0U7CkBAIC00NDMyLDcgKzQ0MzIsNyBAQAogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaGEtPmhkcltpXS5jbHVzdGVyX3R5cGUgPSAKLSAgICAgICAgICAgICgoc3RhdHVzID09IFNfT0sgJiYgIXNoYXJlZF9hY2Nlc3MpID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgICAgICAoKHN0YXR1cyA9PSBTX09LICYmICFzaGFyZWRfYWNjZXNzKSA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcnNjLT5oZHJfbGlzdFtpXS5jbHVzdGVyX3R5cGUgPSBoYS0+aGRyW2ldLmNsdXN0ZXJfdHlwZTsKIApAQCAtNDQ0Niw3ICs0NDQ2LDcgQEAKICAgICAgICAgc3RhdHVzID0gX19nZHRoX2V4ZWN1dGUoaGEtPnNkZXYsIGNtZCwgY21uZCwgMzAsICZpbmZvKTsKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGhhLT5oZHJbaV0ucndfYXR0cmlicyA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoYS0+aGRyW2ldLnJ3X2F0dHJpYnMgPSAoc3RhdHVzID09IFNfT0sgPyAodTE2KWluZm8gOiAwKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgfQogIApAQCAtNDQ2Niw3ICs0NDY2LDcgQEAKIHsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogICAgIFNjc2lfQ21uZCAqc2NwOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciBjbW5kW01BWF9DT01NQU5EX1NJWkVdOyAgIAogICAgIHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCkBAIC00NDk1LDkgKzQ0OTUsOSBAQAogICAgICAgeyAKICAgICAgICAgZ2R0aF9pb2N0bF9vc3ZlcnMgb3N2OyAKIAotICAgICAgICBvc3YudmVyc2lvbiA9ICh1bmNoYXIpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7Ci0gICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHVuY2hhcikoTElOVVhfVkVSU0lPTl9DT0RFID4+IDgpOwotICAgICAgICBvc3YucmV2aXNpb24gPSAodXNob3J0KShMSU5VWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKyAgICAgICAgb3N2LnZlcnNpb24gPSAodTgpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7CisgICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHU4KShMSU5VWF9WRVJTSU9OX0NPREUgPj4gOCk7CisgICAgICAgIG9zdi5yZXZpc2lvbiA9ICh1MTYpKExJTlVYX1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwogICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZvc3YsIHNpemVvZihnZHRoX2lvY3RsX29zdmVycykpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogICAgICAgICBicmVhazsKQEAgLTQ1MTIsMTAgKzQ1MTIsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogCiAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBIHx8IGhhLT50eXBlID09IEdEVF9FSVNBKSB7Ci0gICAgICAgICAgICBjdHJ0LnR5cGUgPSAodW5jaGFyKSgoaGEtPnN0eXBlPj4yMCkgLSAweDEwKTsKKyAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1OCkoKGhhLT5zdHlwZT4+MjApIC0gMHgxMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaGEtPnR5cGUgIT0gR0RUX1BDSU1QUikgewotICAgICAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1bmNoYXIpKChoYS0+c3R5cGU8PDQpICsgNik7CisgICAgICAgICAgICAgICAgY3RydC50eXBlID0gKHU4KSgoaGEtPnN0eXBlPDw0KSArIDYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjdHJ0LnR5cGUgPSAKICAgICAgICAgICAgICAgICAgICAgKGhhLT5vZW1faWQgPT0gT0VNX0lEX0lOVEVMID8gMHhmZCA6IDB4ZmUpOwpAQCAtNDU0Niw3ICs0NTQ2LDcgQEAKICAgICAgIGNhc2UgR0RUSU9DVExfTE9DS0NITjoKICAgICAgIHsKICAgICAgICAgZ2R0aF9pb2N0bF9sb2NrY2huIGxjaG47Ci0gICAgICAgIHVuY2hhciBpLCBqOworICAgICAgICB1OCBpLCBqOwogCiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbGNobiwgYXJncCwgc2l6ZW9mKGdkdGhfaW9jdGxfbG9ja2NobikpIHx8CiAgICAgICAgICAgICAoTlVMTCA9PSAoaGEgPSBnZHRoX2ZpbmRfaGEobGNobi5pb25vZGUpKSkpCkBAIC00NjcwLDcgKzQ2NzAsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfaXNhX3Byb2JlX29uZSh1bG9uZzMyIGlzYV9iaW9zKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9pc2FfcHJvYmVfb25lKHUzMiBpc2FfYmlvcykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHA7CiAJZ2R0aF9oYV9zdHIgKmhhOwpAQCAtNDgwMiw3ICs0ODAyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSVNBICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1c2hvcnQgZWlzYV9zbG90KQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1MTYgZWlzYV9zbG90KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNocDsKIAlnZHRoX2hhX3N0ciAqaGE7CkBAIC01MTIwLDcgKzUxMjAsNyBAQAogCXNjc2lfaG9zdF9wdXQoc2hwKTsKIH0KIAotc3RhdGljIGludCBnZHRoX2hhbHQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdWxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKK3N0YXRpYyBpbnQgZ2R0aF9oYWx0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKIHsKIAlnZHRoX2hhX3N0ciAqaGE7CiAKQEAgLTUxNTgsMTQgKzUxNTgsMTQgQEAKIAlpZiAocHJvYmVfZWlzYV9pc2EpIHsKIAkJLyogc2Nhbm5pbmcgZm9yIGNvbnRyb2xsZXJzLCBhdCBmaXJzdDogSVNBIGNvbnRyb2xsZXIgKi8KICNpZmRlZiBDT05GSUdfSVNBCi0JCXVsb25nMzIgaXNhX2Jpb3M7CisJCXUzMiBpc2FfYmlvczsKIAkJZm9yIChpc2FfYmlvcyA9IDB4YzgwMDBVTDsgaXNhX2Jpb3MgPD0gMHhkODAwMFVMOwogCQkgICAgICAgICAgICAgICAgaXNhX2Jpb3MgKz0gMHg4MDAwVUwpCiAJCQlnZHRoX2lzYV9wcm9iZV9vbmUoaXNhX2Jpb3MpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VJU0EKIAkJewotCQkJdXNob3J0IGVpc2Ffc2xvdDsKKwkJCXUxNiBlaXNhX3Nsb3Q7CiAJCQlmb3IgKGVpc2Ffc2xvdCA9IDB4MTAwMDsgZWlzYV9zbG90IDw9IDB4ODAwMDsKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBlaXNhX3Nsb3QgKz0gMHgxMDAwKQogCQkJCWdkdGhfZWlzYV9wcm9iZV9vbmUoZWlzYV9zbG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmggYi9kcml2ZXJzL3Njc2kvZ2R0aC5oCmluZGV4IDE2NDY0NDQuLjEyMGEwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmgKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguaApAQCAtMzIxLDUyNCArMzIxLDUyNCBAQAogCiAvKiBzY3JlZW5zZXJ2aWNlIG1lc3NhZ2UgKi8KIHR5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgbXNnX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgIHVsb25nMzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCi0gICAgdWxvbmczMiAgICAgbXNnX2FsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgbGVuZ3RoICovCi0gICAgdW5jaGFyICAgICAgbXNnX2Fuc3dlcjsgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgZmxhZyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19yZXNlcnZlZFsyXTsKKyAgICB1MzIgICAgIG1zZ19oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KKyAgICB1MzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCisgICAgdTMyICAgICBtc2dfYWxlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuc3dlciBsZW5ndGggKi8KKyAgICB1OCAgICAgIG1zZ19hbnN3ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogYW5zd2VyIGZsYWcgKi8KKyAgICB1OCAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLworICAgIHU4ICAgICAgbXNnX3Jlc2VydmVkWzJdOwogICAgIGNoYXIgICAgICAgIG1zZ190ZXh0W01TR0xFTisyXTsgICAgICAgICAgICAgLyogdGhlIG1lc3NhZ2UgdGV4dCAqLwotfSBQQUNLRUQgZ2R0aF9tc2dfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX21zZ19zdHI7CiAKIAogLyogSU9DVEwgZGF0YSBzdHJ1Y3R1cmVzICovCiAKIC8qIFN0YXR1cyBjb2FsZXNjaW5nIGJ1ZmZlciBmb3IgcmV0dXJuaW5nIG11bHRpcGxlIHJlcXVlc3RzIHBlciBpbnRlcnJ1cHQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzdGF0dXM7Ci0gICAgdWxvbmczMiAgICAgZXh0X3N0YXR1czsKLSAgICB1bG9uZzMyICAgICBpbmZvMDsKLSAgICB1bG9uZzMyICAgICBpbmZvMTsKLX0gUEFDS0VEIGdkdGhfY29hbF9zdGF0dXM7CisgICAgdTMyICAgICBzdGF0dXM7CisgICAgdTMyICAgICBleHRfc3RhdHVzOworICAgIHUzMiAgICAgaW5mbzA7CisgICAgdTMyICAgICBpbmZvMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jb2FsX3N0YXR1czsKIAogLyogcGVyZm9ybWFuY2UgbW9kZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgLyogVGhlIHZlcnNpb24gb2YgdGhpcyBJT0NUTCBzdHJ1Y3R1cmUuICovCi0gICAgdWxvbmczMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMTsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMTsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMjsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMjsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9zaXplOyAgICAgICAvKiBzaXplIG9mIGVhY2ggYnVmZmVyIGluIGJ5dGVzICovCi0gICAgdWxvbmczMiAgICAgY21kX21vZGU7ICAgICAgICAgICAvKiAwID0gbW9kZSBkaXNhYmxlZCwgMSA9IGNtZF9idWZmX2FkZHIxICovIAotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIxOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgxOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIyOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgyOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLwotICAgIHVsb25nMzIgICAgIHJlc2VydmVkMTsKLSAgICB1bG9uZzMyICAgICByZXNlcnZlZDI7Ci19IFBBQ0tFRCBnZHRoX3BlcmZfbW9kZXM7CisgICAgdTMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHRoaXMgSU9DVEwgc3RydWN0dXJlLiAqLworICAgIHUzMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIxOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjE7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIyOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjI7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX3NpemU7ICAgICAgIC8qIHNpemUgb2YgZWFjaCBidWZmZXIgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICAgIGNtZF9tb2RlOyAgICAgICAgICAgLyogMCA9IG1vZGUgZGlzYWJsZWQsIDEgPSBjbWRfYnVmZl9hZGRyMSAqLyAKKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjE7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MTsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjI7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MjsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLworICAgIHUzMiAgICAgcmVzZXJ2ZWQxOworICAgIHUzMiAgICAgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3BlcmZfbW9kZXM7CiAKIC8qIFNDU0kgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsgICAgICAgICAgICAgICAgICAgICAgLyogdmVuZG9yIHN0cmluZyAqLwotICAgIHVuY2hhciAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCi0gICAgdWxvbmczMiAgICAgc3lfcmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHJhdGUgZm9yIHN5bmMuIHRyLiAqLwotICAgIHVsb25nMzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KLSAgICB1bG9uZzMyICAgICBub19sZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJlbG9uZ3MgdG8gdGhpcyBsb2cuIGRydi4qLwotICAgIHVsb25nMzIgICAgIGJsa2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVzaG9ydCAgICAgIGJsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBibG9jayBpbiBieXRlcyAqLwotICAgIHVuY2hhciAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLwotICAgIHVuY2hhciAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICB3cF9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBhbnNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgSS9JSSBvciBJSUk/ICovCi0gICAgdW5jaGFyICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KLSAgICB1bmNoYXIgICAgICBzeW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHN5bmMuIHRyYW5zZmVyIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgZGlzYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBkaXNjb25uZWN0IGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgY2FjaGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjYWNoaW5nIGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICB0YXJnZXRfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBvcnBoYW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGRyaXZlIGZyYWdtZW50ICovCi0gICAgdWxvbmczMiAgICAgbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBrZXkgb3IgZHJpdmUgc3RhdGUgKi8KLSAgICB1bG9uZzMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KLSAgICB1bG9uZzMyICAgICBjaGVja19lcnJvcnM7ICAgICAgICAgICAgICAgICAgIC8qIGVyci4gaW4gbGFzdCBzdXJmYWNlIGNoZWNrICovCi0gICAgdW5jaGFyICAgICAgcGVyY2VudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmVzcyBmb3Igc3VyZmFjZSBjaGVjayAqLwotICAgIHVuY2hhciAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLwotICAgIHVuY2hhciAgICAgIHJlc1syXTsKLSAgICB1bG9uZzMyICAgICBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20gMS4xOS8yLjE5OiByYXcgcmVzZXJ2LiovCi0gICAgdW5jaGFyICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLwotICAgIHVuY2hhciAgICAgIG1iX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzOiBhdmFpbGFibGU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzMlsyXTsKLSAgICB1bmNoYXIgICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCi0gICAgdW5jaGFyICAgICAgbWJfYWx0X2JpZDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc2Vjb25kIGJ1cyAqLwotICAgIHVuY2hhciAgICAgIG1iX2FsdF90aWQ7ICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IGlkIG9uIHNlY29uZCBidXMgKi8KLSAgICB1bmNoYXIgICAgICByZXMzOwotICAgIHVuY2hhciAgICAgIGZjX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSAxLjIyLzIuMjI6IGluZm8gdmFsaWQ/Ki8KLSAgICB1bmNoYXIgICAgICByZXM0OwotICAgIHVzaG9ydCAgICAgIGZjX2ZyYW1lX3NpemU7ICAgICAgICAgICAgICAgICAgLyogZnJhbWUgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICB2ZW5kb3JbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHZlbmRvciBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOyAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHN5X3JhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIG5vX2xkcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogYmVsb25ncyB0byB0aGlzIGxvZy4gZHJ2LiovCisgICAgdTMyICAgICBibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MTYgICAgICBibGtzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgYmxvY2sgaW4gYnl0ZXMgKi8KKyAgICB1OCAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLworICAgIHU4ICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCisgICAgdTggICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KKyAgICB1OCAgICAgIHdwX21lZGl1bTsgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgYW5zaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIEkvSUkgb3IgSUlJPyAqLworICAgIHU4ICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KKyAgICB1OCAgICAgIHN5bmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogc3luYy4gdHJhbnNmZXIgZW5hYi4gKi8KKyAgICB1OCAgICAgIGRpc2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZGlzY29ubmVjdCBlbmFibGVkICovCisgICAgdTggICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCisgICAgdTggICAgICBjYWNoZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNhY2hpbmcgZW5hYmxlZCAqLworICAgIHU4ICAgICAgdGFyZ2V0X2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgb2YgZGV2aWNlICovCisgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KKyAgICB1OCAgICAgIG9ycGhhbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZHJpdmUgZnJhZ21lbnQgKi8KKyAgICB1MzIgICAgIGxhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2Uga2V5IG9yIGRyaXZlIHN0YXRlICovCisgICAgdTMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KKyAgICB1MzIgICAgIGNoZWNrX2Vycm9yczsgICAgICAgICAgICAgICAgICAgLyogZXJyLiBpbiBsYXN0IHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIHBlcmNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3MgZm9yIHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLworICAgIHU4ICAgICAgcmVzWzJdOworICAgIHUzMiAgICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMTkvMi4xOTogcmF3IHJlc2Vydi4qLworICAgIHU4ICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLworICAgIHU4ICAgICAgbWJfc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXM6IGF2YWlsYWJsZT8gKi8KKyAgICB1OCAgICAgIHJlczJbMl07CisgICAgdTggICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfYmlkOyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfdGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBpZCBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICByZXMzOworICAgIHU4ICAgICAgZmNfZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMjIvMi4yMjogaW5mbyB2YWxpZD8qLworICAgIHU4ICAgICAgcmVzNDsKKyAgICB1MTYgICAgICBmY19mcmFtZV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIGZyYW1lIHNpemUgKGJ5dGVzKSAqLwogICAgIGNoYXIgICAgICAgIHd3bls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogd29ybGQgd2lkZSBuYW1lICovCi19IFBBQ0tFRCBnZHRoX2Rpc2tpbmZvX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kaXNraW5mb19zdHI7CiAKIC8qIGdldCBTQ1NJIGNoYW5uZWwgY291bnQgICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICBzaW9wX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgcHJvY2Vzc29yIElEICovCi0gICAgdW5jaGFyICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKLX0gUEFDS0VEIGdkdGhfZ2V0Y2hfc3RyOworICAgIHUzMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLworICAgIHU4ICAgICAgc2lvcF9pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBJRCAqLworICAgIHU4ICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9nZXRjaF9zdHI7CiAKIC8qIGdldCBTQ1NJIGRyaXZlIG51bWJlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzY19ubzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCi0gICAgdWxvbmczMiAgICAgc2NfbGlzdFtNQVhJRF07ICAgICAgICAgICAgICAgICAvKiBtaW5vciBkZXZpY2UgbnVtYmVycyAqLwotfSBQQUNLRUQgZ2R0aF9kcmxpc3Rfc3RyOworICAgIHUzMiAgICAgc2Nfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KKyAgICB1MzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCisgICAgdTMyICAgICBzY19saXN0W01BWElEXTsgICAgICAgICAgICAgICAgIC8qIG1pbm9yIGRldmljZSBudW1iZXJzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZHJsaXN0X3N0cjsKIAogLyogZ2V0IGdyb3duL3ByaW1hcnkgZGVmZWN0IGNvdW50ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgc2RkY190eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4OiBncm93biwgMHgxMDogcHJpbS4gKi8KLSAgICB1bmNoYXIgICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCi0gICAgdW5jaGFyICAgICAgc2RkY19sZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGxlbmd0aCAqLwotICAgIHVuY2hhciAgICAgIHNkZGNfcmVzOwotICAgIHVsb25nMzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KLX0gUEFDS0VEIGdkdGhfZGVmY250X3N0cjsKKyAgICB1OCAgICAgIHNkZGNfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwODogZ3Jvd24sIDB4MTA6IHByaW0uICovCisgICAgdTggICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCisgICAgdTggICAgICBzZGRjX2xlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgbGVuZ3RoICovCisgICAgdTggICAgICBzZGRjX3JlczsKKyAgICB1MzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kZWZjbnRfc3RyOwogCiAvKiBkaXNrIHN0YXRpc3RpY3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgU0NTSSBkaXNrICovCi0gICAgdWxvbmczMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KLSAgICB1bG9uZzMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCi0gICAgdWxvbmczMiAgICAgbW9uX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHN0YW1wICovCisgICAgdTMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBTQ1NJIGRpc2sgKi8KKyAgICB1MzIgICAgIGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzICovCisgICAgdTMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCisgICAgdTMyICAgICBtb25fdGltZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUgc3RhbXAgKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgIHRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciAgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyICByZXNbMl07Ci0gICAgICAgIHVsb25nMzIgYmxrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayBzaXplIGluIGJ5dGVzICovCi0gICAgICAgIHVsb25nMzIgcmRfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyByZWFkICovCi0gICAgICAgIHVsb25nMzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCi0gICAgICAgIHVsb25nMzIgcmRfYmxrX2NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBibG9ja3MgcmVhZCAqLwotICAgICAgICB1bG9uZzMyIHdyX2Jsa19jb3VudDsgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzIHdyaXR0ZW4gKi8KLSAgICAgICAgdWxvbmczMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KLSAgICAgICAgdWxvbmczMiByZWFzc2lnbnM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYXNzaWducyAqLwotICAgIH0gUEFDS0VEIGxpc3RbMV07Ci19IFBBQ0tFRCBnZHRoX2Rza3N0YXRfc3RyOworICAgICAgICB1OCAgdGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggIGx1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4ICByZXNbMl07CisgICAgICAgIHUzMiBibGtfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICAgdTMyIHJkX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgcmVhZCAqLworICAgICAgICB1MzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZF9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyByZWFkICovCisgICAgICAgIHUzMiB3cl9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KKyAgICAgICAgdTMyIHJlYXNzaWduczsgICAgICAgICAgICAgICAgICAgICAgLyogcmVhc3NpZ25zICovCisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsaXN0WzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2Rza3N0YXRfc3RyOwogCiAvKiBJTyBjaGFubmVsIGhlYWRlciAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiAoLTFVTDogbmV3ZXN0KSAqLwotICAgIHVuY2hhciAgICAgIGxpc3RfZW50cmllczsgICAgICAgICAgICAgICAgICAgLyogbGlzdCBlbnRyeSBjb3VudCAqLwotICAgIHVuY2hhciAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsYXN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBjaGFubmVsIGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLwotfSBQQUNLRUQgZ2R0aF9pb2NoYW5faGVhZGVyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9uICgtMVVMOiBuZXdlc3QpICovCisgICAgdTggICAgICBsaXN0X2VudHJpZXM7ICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgY291bnQgKi8KKyAgICB1OCAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hhbjsgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBjaGFubmVsIG51bWJlciAqLworICAgIHU4ICAgICAgY2hhbl9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiAoUikgY2hhbm5lbCBjb3VudCAqLworICAgIHUzMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9oZWFkZXI7CiAKIC8qIGdldCBJTyBjaGFubmVsIGRlc2NyaXB0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgZ2R0aF9pb2NoYW5faGVhZGVyICBoZHI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdWxvbmczMiAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgYWRkcmVzcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSAoU0NTSSwgRkNBTCkgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfaW9jaGFuX3N0cjsKKyAgICAgICAgdTMyICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBhZGRyZXNzICovCisgICAgICAgIHU4ICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgKFNDU0ksIEZDQUwpICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLworICAgICAgICB1MTYgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9zdHI7CiAKIC8qIGdldCByYXcgSU8gY2hhbm5lbCBkZXNjcmlwdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfaW9jaGFuX2hlYWRlciAgaGRyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgIHByb2NfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgaWQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgcHJvY19kZWZlY3Q7ICAgICAgICAgICAgICAgIC8qIGRlZmVjdCA/ICovCi0gICAgICAgIHVuY2hhciAgICAgIHJlc2VydmVkWzJdOwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfcmF3X2lvY2hhbl9zdHI7CisgICAgICAgIHU4ICAgICAgcHJvY19pZDsgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBpZCAqLworICAgICAgICB1OCAgICAgIHByb2NfZGVmZWN0OyAgICAgICAgICAgICAgICAvKiBkZWZlY3QgPyAqLworICAgICAgICB1OCAgICAgIHJlc2VydmVkWzJdOworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3Jhd19pb2NoYW5fc3RyOwogCiAvKiBhcnJheSBkcml2ZSBjb21wb25lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBhbF9jb250cm9sbGVyOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgKi8KLSAgICB1bmNoYXIgICAgICBhbF9jYWNoZV9kcml2ZTsgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIG51bWJlciAqLwotICAgIHVuY2hhciAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KLSAgICB1bmNoYXIgICAgICBhbF9yZXNbMl07ICAgICAKLX0gUEFDS0VEIGdkdGhfYXJyYXljb21wX3N0cjsKKyAgICB1MzIgICAgIGFsX2NvbnRyb2xsZXI7ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCAqLworICAgIHU4ICAgICAgYWxfY2FjaGVfZHJpdmU7ICAgICAgICAgICAgICAgICAvKiBjYWNoZSBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFsX3Jlc1syXTsgICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5Y29tcF9zdHI7CiAKIC8qIGFycmF5IGRyaXZlIGluZm9ybWF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgYWlfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheSB0eXBlIChSQUlEMCw0LDUpICovCi0gICAgdW5jaGFyICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KLSAgICB1bmNoYXIgICAgICBhaV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfbWFzdGVyX2NkOyAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KLSAgICB1bG9uZzMyICAgICBhaV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZXIgY2FwYWNpdHkgW3NlY3RvcnNdICovCi0gICAgdWxvbmczMiAgICAgYWlfc3RyaXBpbmdfc2l6ZTsgICAgICAgICAgICAgICAvKiBzdHJpcGluZyBzaXplIFtzZWN0b3JzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX2Vycl9pbmZvOyAgICAgICAgICAgICAgICAgICAgLyogZmFpbGVkIGNhY2hlIGRyaXZlICovCi0gICAgdW5jaGFyICAgICAgYWlfbmFtZVs4XTsgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHRoZSBhcnJheSBkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCi0gICAgdW5jaGFyICAgICAgYWlfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBhaV93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIGZsYWc6IHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KKyAgICB1OCAgICAgIGFpX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgdHlwZSAoUkFJRDAsNCw1KSAqLworICAgIHU4ICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KKyAgICB1OCAgICAgIGFpX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX21hc3Rlcl9jZDsgICAgICAgICAgICAgICAgICAgLyogbWFzdGVyIGNhY2hlZHJpdmUgKi8KKyAgICB1MzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KKyAgICB1MzIgICAgIGFpX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlciBjYXBhY2l0eSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3N0cmlwaW5nX3NpemU7ICAgICAgICAgICAgICAgLyogc3RyaXBpbmcgc2l6ZSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLworICAgIHUzMiAgICAgYWlfZXJyX2luZm87ICAgICAgICAgICAgICAgICAgICAvKiBmYWlsZWQgY2FjaGUgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgYXJyYXkgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCisgICAgdTggICAgICBhaV9yZW1vdmFibGU7ICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHJlbW92YWJsZSAqLworICAgIHU4ICAgICAgYWlfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiBmbGFnOiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyAgICB1OCAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KICAgICBnZHRoX2FycmF5Y29tcF9zdHIgIGFpX2RyaXZlc1szNV07ICAgICAgICAgIC8qIGRyaXZlIGNvbXBvbmVudHM6ICovCi0gICAgdW5jaGFyICAgICAgYWlfZHJpdmVfZW50cmllczsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZHJpdmUgY29tcG9uZW50cyAqLwotICAgIHVuY2hhciAgICAgIGFpX3Byb3RlY3RlZDsgICAgICAgICAgICAgICAgICAgLyogcHJvdGVjdGlvbiBmbGFnICovCi0gICAgdW5jaGFyICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KLSAgICB1bmNoYXIgICAgICBhaV9leHRfc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfZXhwYW5kX3N0YXRlOyAgICAgICAgICAgICAgICAvKiBhcnJheSBleHBhbmQgc3RhdGUgKD49Mi4xOCkqLwotICAgIHVuY2hhciAgICAgIGFpX3Jlc2VydmVkWzNdOwotfSBQQUNLRUQgZ2R0aF9hcnJheWluZl9zdHI7CisgICAgdTggICAgICBhaV9kcml2ZV9lbnRyaWVzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkcml2ZSBjb21wb25lbnRzICovCisgICAgdTggICAgICBhaV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gZmxhZyAqLworICAgIHU4ICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KKyAgICB1OCAgICAgIGFpX2V4dF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5kZWQgYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX2V4cGFuZF9zdGF0ZTsgICAgICAgICAgICAgICAgLyogYXJyYXkgZXhwYW5kIHN0YXRlICg+PTIuMTgpKi8KKyAgICB1OCAgICAgIGFpX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5aW5mX3N0cjsKIAogLyogZ2V0IGFycmF5IGRyaXZlIGxpc3QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCi0gICAgdW5jaGFyICAgICAgY2RfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGlzX2FycmF5ZDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgYXJyYXkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCi0gICAgdW5jaGFyICAgICAgaXNfcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBwYXJpdHkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBob3RmaXggZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzWzNdOwotfSBQQUNLRUQgZ2R0aF9hbGlzdF9zdHI7CisgICAgdTMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCisgICAgdTggICAgICBjZF9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1hc3RlciBjYWNoZWRyaXZlICovCisgICAgdTggICAgICBpc19hcnJheWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIGFycmF5IGRyaXZlPyAqLworICAgIHU4ICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCisgICAgdTggICAgICBpc19wYXJpdHk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIHBhcml0eSBkcml2ZT8gKi8KKyAgICB1OCAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgaG90Zml4IGRyaXZlPyAqLworICAgIHU4ICAgICAgcmVzWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FsaXN0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGVudHJpZXNfYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBmaXJzdF9lbnRyeTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGVudHJ5IG51bWJlciAqLwotICAgIHVsb25nMzIgICAgIGxpc3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGZvbGxvd2luZyBsaXN0ICovCisgICAgdTMyICAgICBlbnRyaWVzX2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBlbnRyaWVzICovCisgICAgdTMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KKyAgICB1MzIgICAgIGZpcnN0X2VudHJ5OyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZW50cnkgbnVtYmVyICovCisgICAgdTMyICAgICBsaXN0X29mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCBvZiBmb2xsb3dpbmcgbGlzdCAqLwogICAgIGdkdGhfYWxpc3Rfc3RyIGxpc3RbMV07ICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCAqLwotfSBQQUNLRUQgZ2R0aF9hcmNkbF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYXJjZGxfc3RyOwogCiAvKiBjYWNoZSBpbmZvL2NvbmZpZyBJT0NUTCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgIHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RhdGUgKG9uL29mZikgKi8KLSAgICB1c2hvcnQgICAgICBzdHJhdGVneTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHN0cmF0ZWd5ICovCi0gICAgdXNob3J0ICAgICAgd3JpdGVfYmFjazsgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBiYWNrIHN0YXRlIChvbi9vZmYpICovCi0gICAgdXNob3J0ICAgICAgYmxvY2tfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBibG9jayBzaXplICovCi19IFBBQ0tFRCBnZHRoX2NwYXJfc3RyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTE2ICAgICAgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzdGF0ZSAob24vb2ZmKSAqLworICAgIHUxNiAgICAgIHN0cmF0ZWd5OyAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RyYXRlZ3kgKi8KKyAgICB1MTYgICAgICB3cml0ZV9iYWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGJhY2sgc3RhdGUgKG9uL29mZikgKi8KKyAgICB1MTYgICAgICBibG9ja19zaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGJsb2NrIHNpemUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jcGFyX3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgIHJlYWRfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZC93cml0ZSBjb3VudGVyICovCi0gICAgdWxvbmczMiAgICAgd3JpdGVfY250OwotICAgIHVsb25nMzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLwotICAgIHVsb25nMzIgICAgIHNlY19oaXRzOwotICAgIHVsb25nMzIgICAgIHNlY19taXNzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWlzc2VzICovCi19IFBBQ0tFRCBnZHRoX2NzdGF0X3N0cjsKKyAgICB1MzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLworICAgIHUzMiAgICAgcmVhZF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkL3dyaXRlIGNvdW50ZXIgKi8KKyAgICB1MzIgICAgIHdyaXRlX2NudDsKKyAgICB1MzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLworICAgIHUzMiAgICAgc2VjX2hpdHM7CisgICAgdTMyICAgICBzZWNfbWlzczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pc3NlcyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NzdGF0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfY3Bhcl9zdHIgICBjcGFyOwogICAgIGdkdGhfY3N0YXRfc3RyICBjc3RhdDsKLX0gUEFDS0VEIGdkdGhfY2luZm9fc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NpbmZvX3N0cjsKIAogLyogY2FjaGUgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLwotICAgIHVsb25nMzIgICAgIGNkX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCi0gICAgdWxvbmczMiAgICAgY2RfbGRjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbG9nLiBkcml2ZXMgKi8KLSAgICB1bG9uZzMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KLSAgICB1bmNoYXIgICAgICBjZF9pbml0aWFsaXplZDsgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgY2RfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBtZWRpYSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGNkX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9vbCBIb3QgRml4PyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCi0gICAgdWxvbmczMiAgICAgbGRfZGNudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlza3MgKi8KLSAgICB1bG9uZzMyICAgICBsZF9zbGF2ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgaW5kZXggKi8KLSAgICB1bG9uZzMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGxkX2xhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgLyogbGFzdCBlcnJvciAqLwotICAgIHVuY2hhciAgICAgIGxkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSBuYW1lICovCi0gICAgdW5jaGFyICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLwotfSBQQUNLRUQgZ2R0aF9jZHJpbmZvX3N0cjsKKyAgICB1OCAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLworICAgIHUzMiAgICAgY2RfZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KKyAgICB1MzIgICAgIGNkX2xkY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxvZy4gZHJpdmVzICovCisgICAgdTMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KKyAgICB1OCAgICAgIGNkX2luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgLyogZHJpdmUgaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGNkX3JlbW92YWJsZTsgICAgICAgICAgICAgICAgICAgLyogbWVkaWEgaXMgcmVtb3ZhYmxlICovCisgICAgdTggICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgY2RfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb29sIEhvdCBGaXg/ICovCisgICAgdTMyICAgICBsZF9ibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCisgICAgdTMyICAgICBsZF9kY250OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXNrcyAqLworICAgIHUzMiAgICAgbGRfc2xhdmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIGluZGV4ICovCisgICAgdTMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLworICAgIHUzMiAgICAgbGRfbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAvKiBsYXN0IGVycm9yICovCisgICAgdTggICAgICBsZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbmFtZSAqLworICAgIHU4ICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NkcmluZm9fc3RyOwogCiAvKiBPRU0gc3RyaW5nICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY3RsX3ZlcnNpb247Ci0gICAgdWxvbmczMiAgICAgZmlsZV9tYWpvcl92ZXJzaW9uOwotICAgIHVsb25nMzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKLSAgICB1bG9uZzMyICAgICBidWZmZXJfc2l6ZTsKLSAgICB1bG9uZzMyICAgICBjcHlfY291bnQ7Ci0gICAgdWxvbmczMiAgICAgZXh0X2Vycm9yOwotICAgIHVsb25nMzIgICAgIG9lbV9pZDsKLSAgICB1bG9uZzMyICAgICBib2FyZF9pZDsKLX0gUEFDS0VEIGdkdGhfb2VtX3N0cl9wYXJhbXM7CisgICAgdTMyICAgICBjdGxfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWFqb3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGJ1ZmZlcl9zaXplOworICAgIHUzMiAgICAgY3B5X2NvdW50OworICAgIHUzMiAgICAgZXh0X2Vycm9yOworICAgIHUzMiAgICAgb2VtX2lkOworICAgIHUzMiAgICAgYm9hcmRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9wYXJhbXM7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzRfNV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0X2NsdXN0ZXJfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07Ci0gICAgdW5jaGFyICAgICAgc2NzaV9jbHVzdGVyX3RhcmdldF92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGNsdXN0ZXJfcmFpZF9md19uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBvZW1fYnJhbmRfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgb2VtX3JhaWRfdHlwZVsxNl07Ci0gICAgdW5jaGFyICAgICAgYmlvc190eXBlWzEzXTsKLSAgICB1bmNoYXIgICAgICBiaW9zX3RpdGxlWzUwXTsKLSAgICB1bmNoYXIgICAgICBvZW1fY29tcGFueV9uYW1lWzM3XTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMjsKLSAgICB1bmNoYXIgICAgICB2YWxpZGF0aW9uX3N0YXR1c1s4MF07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMVs0XTsKLSAgICB1bmNoYXIgICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGxpYnJhcnlfZmlsZV90ZW1wbGF0ZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMlsxNl07Ci0gICAgdW5jaGFyICAgICAgdG9vbF9uYW1lXzFbMzJdOwotICAgIHVuY2hhciAgICAgIHRvb2xfbmFtZV8yWzMyXTsKLSAgICB1bmNoYXIgICAgICB0b29sX25hbWVfM1szMl07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMVs4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMls4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfM1s4NF07Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHI7CisgICAgdTggICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKKyAgICB1OCAgICAgIHByb2R1Y3RfNF81X25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9jbHVzdGVyX25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07CisgICAgdTggICAgICBzY3NpX2NsdXN0ZXJfdGFyZ2V0X3ZlbmRvcl9pZFsxNl07CisgICAgdTggICAgICBjbHVzdGVyX3JhaWRfZndfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fYnJhbmRfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fcmFpZF90eXBlWzE2XTsKKyAgICB1OCAgICAgIGJpb3NfdHlwZVsxM107CisgICAgdTggICAgICBiaW9zX3RpdGxlWzUwXTsKKyAgICB1OCAgICAgIG9lbV9jb21wYW55X25hbWVbMzddOworICAgIHUzMiAgICAgcGNpX2lkXzE7CisgICAgdTMyICAgICBwY2lfaWRfMjsKKyAgICB1OCAgICAgIHZhbGlkYXRpb25fc3RhdHVzWzgwXTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzFbNF07CisgICAgdTggICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOworICAgIHU4ICAgICAgbGlicmFyeV9maWxlX3RlbXBsYXRlWzE2XTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzJbMTZdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzFbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzJbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzNbMzJdOworICAgIHU4ICAgICAgb2VtX2NvbnRhY3RfMVs4NF07CisgICAgdTggICAgICBvZW1fY29udGFjdF8yWzg0XTsKKyAgICB1OCAgICAgIG9lbV9jb250YWN0XzNbODRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX29lbV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHRoX29lbV9zdHJfcGFyYW1zIHBhcmFtczsKICAgICBnZHRoX29lbV9zdHIgICAgICAgIHRleHQ7Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHJfaW9jdGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9pb2N0bDsKIAogLyogYm9hcmQgZmVhdHVyZXMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBjaGFpbmluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYWluaW5nIHN1cHBvcnRlZCAqLwotICAgIHVuY2hhciAgICAgIHN0cmlwaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXBpbmcgKFJBSUQtMCkgc3VwcC4gKi8KLSAgICB1bmNoYXIgICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLwotICAgIHVuY2hhciAgICAgIHJhaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkFJRC00LzUvMTAgc3VwcG9ydGVkICovCi19IFBBQ0tFRCBnZHRoX2JmZWF0X3N0cjsKKyAgICB1OCAgICAgIGNoYWluaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhaW5pbmcgc3VwcG9ydGVkICovCisgICAgdTggICAgICBzdHJpcGluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwaW5nIChSQUlELTApIHN1cHAuICovCisgICAgdTggICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLworICAgIHU4ICAgICAgcmFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSQUlELTQvNS8xMCBzdXBwb3J0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9iZmVhdF9zdHI7CiAKIC8qIGJvYXJkIGluZm8gSU9DVEwgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZXJfbm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcmlhbCBuby4gKi8KLSAgICB1bmNoYXIgICAgICBvZW1faWRbMl07ICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLwotICAgIHVzaG9ydCAgICAgIGVwX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogZXByb20gZmxhZ3MgKi8KLSAgICB1bG9uZzMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLwotICAgIHVsb25nMzIgICAgIG1lbXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IHNpemUgKGJ5dGVzKSAqLwotICAgIHVuY2hhciAgICAgIG1lbV9iYW5rczsgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGJhbmtzICovCi0gICAgdW5jaGFyICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICByZG9uZ2xlX3ByZXM7ICAgICAgICAgICAgICAgICAgIC8qIGRvbmdsZSBwcmVzZW50PyAqLwotICAgIHVsb25nMzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX2Z3X3ZlcjsgICAgICAgICAgICAgICAgICAgICAvKiAodXBkYXRlKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX3JldmlzaW9uOyAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHNlcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VyaWFsIG5vLiAqLworICAgIHU4ICAgICAgb2VtX2lkWzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICB1MTYgICAgICBlcF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVwcm9tIGZsYWdzICovCisgICAgdTMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLworICAgIHUzMiAgICAgbWVtc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICBtZW1fYmFua3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBiYW5rcyAqLworICAgIHU4ICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KKyAgICB1OCAgICAgIGNoYW5fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBjb3VudCAqLworICAgIHU4ICAgICAgcmRvbmdsZV9wcmVzOyAgICAgICAgICAgICAgICAgICAvKiBkb25nbGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTMyICAgICB1cGRfZndfdmVyOyAgICAgICAgICAgICAgICAgICAgIC8qICh1cGRhdGUpIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MzIgICAgIHVwZF9yZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHJldmlzaW9uICovCiAgICAgY2hhciAgICAgICAgdHlwZV9zdHJpbmdbMTZdOyAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG5hbWUgKi8KICAgICBjaGFyICAgICAgICByYWlkX3N0cmluZ1sxNl07ICAgICAgICAgICAgICAgIC8qIFJBSUQgZmlybXdhcmUgbmFtZSAqLwotICAgIHVuY2hhciAgICAgIHVwZGF0ZV9wcmVzOyAgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgcHJvbV90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBST00gdHlwZSAoZXByb20vZmxhc2gpICovCi0gICAgdW5jaGFyICAgICAgcHJvbV9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgUk9NIGRldmljZXMgKi8KLSAgICB1bG9uZzMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KLSAgICB1bG9uZzMyICAgICBjaGFuX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHBhbnNpb24gY2huLiAqLwotICAgIHVsb25nMzIgICAgIG1lbV9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGV4cGFuc2lvbiBpbnN0LiA/ICovCi0gICAgdW5jaGFyICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLwotICAgIHVuY2hhciAgICAgIHN1YnR5cGVfdmFsaWQ7ICAgICAgICAgICAgICAgICAgLyogYm9hcmRfc3VidHlwZSB2YWxpZD8gKi8KLSAgICB1bmNoYXIgICAgICBib2FyZF9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUvaGFyZHdhcmUgbGV2ZWwgKi8KLSAgICB1bmNoYXIgICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCi19IFBBQ0tFRCBnZHRoX2JpbmZvX3N0cjsgCisgICAgdTggICAgICB1cGRhdGVfcHJlczsgICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBwcmVzZW50PyAqLworICAgIHU4ICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCisgICAgdTggICAgICBwcm9tX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJPTSB0eXBlIChlcHJvbS9mbGFzaCkgKi8KKyAgICB1OCAgICAgIHByb21fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFJPTSBkZXZpY2VzICovCisgICAgdTMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGNoYW5fcHJlczsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4cGFuc2lvbiBjaG4uICovCisgICAgdTMyICAgICBtZW1fcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBleHBhbnNpb24gaW5zdC4gPyAqLworICAgIHU4ICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLworICAgIHU4ICAgICAgc3VidHlwZV92YWxpZDsgICAgICAgICAgICAgICAgICAvKiBib2FyZF9zdWJ0eXBlIHZhbGlkPyAqLworICAgIHU4ICAgICAgYm9hcmRfc3VidHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlL2hhcmR3YXJlIGxldmVsICovCisgICAgdTggICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYmluZm9fc3RyOyAKIAogLyogZ2V0IGhvc3QgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgIG5hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBuYW1lICovCi0gICAgdWxvbmczMiAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIChzZWN0b3JzKSAqLwotICAgIHVuY2hhciAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsb2dfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgKG1hc3RlcikgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1bmNoYXIgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCi0gICAgdWxvbmczMiAgICAgc3RhcnRfc2VjOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KLX0gUEFDS0VEIGdkdGhfaGVudHJ5X3N0cjsKKyAgICB1MzIgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSAoc2VjdG9ycykgKi8KKyAgICB1OCAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxvZ19kcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSAobWFzdGVyKSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTggICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCisgICAgdTMyICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hlbnRyeV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVudHJ5IGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLwotICAgIHVuY2hhciAgICAgIHNlY3NfcF9oZWFkOyAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9ycy9oZWFkICovCi0gICAgdW5jaGFyICAgICAgaGVhZHNfcF9jeWw7ICAgICAgICAgICAgICAgICAgICAvKiBoZWFkcy9jeWxpbmRlciAqLwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkOwotICAgIHVuY2hhciAgICAgIGNsdXN0X2RydnR5cGU7ICAgICAgICAgICAgICAgICAgLyogY2x1c3RlciBkcml2ZSB0eXBlICovCi0gICAgdWxvbmczMiAgICAgbG9jYXRpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHUzMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbnRyeSBjb3VudCAqLworICAgIHUzMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLworICAgIHU4ICAgICAgc2Vjc19wX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAvKiBzZWN0b3JzL2hlYWQgKi8KKyAgICB1OCAgICAgIGhlYWRzX3BfY3lsOyAgICAgICAgICAgICAgICAgICAgLyogaGVhZHMvY3lsaW5kZXIgKi8KKyAgICB1OCAgICAgIHJlc2VydmVkOworICAgIHU4ICAgICAgY2x1c3RfZHJ2dHlwZTsgICAgICAgICAgICAgICAgICAvKiBjbHVzdGVyIGRyaXZlIHR5cGUgKi8KKyAgICB1MzIgICAgIGxvY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KICAgICBnZHRoX2hlbnRyeV9zdHIgZW50cnlbTUFYX0hEUklWRVNdOyAgICAgICAgIC8qIGVudHJpZXMgKi8KLX0gUEFDS0VEIGdkdGhfaGdldF9zdHI7ICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hnZXRfc3RyOyAgICAKIAogCiAvKiBEUFJBTSBzdHJ1Y3R1cmVzICovCiAKIC8qIGludGVyZmFjZSBhcmVhIElTQS9QQ0kgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU19TdGF0dXM7ICAgICAgICAgICAgICAgLyogc3RhdHVzIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwotICAgIHVsb25nMzIgICAgICAgICAgICAgU19JbmZvWzRdOyAgICAgICAgICAgICAgLyogYWRkLiBpbmZvIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHJlc2VydmVkMlszXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIENtZF9JbmRleDsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICByZXNlcnZlZDNbM107Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgSW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTggICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLworICAgIHU4IHZvbGF0aWxlICAgICBTX1N0YXR1czsgICAgICAgICAgICAgICAvKiBzdGF0dXMgc3BlY2lhbCBjb21tYW5kICovCisgICAgdTE2ICAgICAgICAgICAgICByZXNlcnZlZDE7CisgICAgdTMyICAgICAgICAgICAgIFNfSW5mb1s0XTsgICAgICAgICAgICAgIC8qIGFkZC4gaW5mbyBzcGVjaWFsIGNvbW1hbmQgKi8KKyAgICB1OCB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICB1OCAgICAgICAgICAgICAgcmVzZXJ2ZWQyWzNdOworICAgIHU4ICAgICAgICAgICAgICBDbWRfSW5kZXg7ICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLworICAgIHU4ICAgICAgICAgICAgICByZXNlcnZlZDNbM107CisgICAgdTE2IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLworICAgIHUzMiAgICAgICAgICAgICBJbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1c2hvcnQgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIH0gUEFDS0VEIGNvbW1fcXVldWVbTUFYT0ZGU0VUU107ICAgICAgICAgICAgLyogY29tbWFuZCBxdWV1ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgYmlvc19yZXNlcnZlZFsyXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCi19IFBBQ0tFRCBnZHRfZHByX2lmOworICAgICAgICB1MTYgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLworICAgICAgICB1MTYgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY29tbV9xdWV1ZVtNQVhPRkZTRVRTXTsgICAgICAgICAgICAvKiBjb21tYW5kIHF1ZXVlICovCisgICAgdTMyICAgICAgICAgICAgIGJpb3NfcmVzZXJ2ZWRbMl07CisgICAgdTggICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9kcHJfaWY7CiAKIC8qIFNSQU0gc3RydWN0dXJlIFBDSSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KLSAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLwotICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCi0gICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICB1bmNoYXIgICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICB1bnVzZWRbMjhdOwotICAgIHVuY2hhciAgICAgIGZ3X21hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHIuIElEIGZyb20gZmlybXdhcmUgKi8KLX0gUEFDS0VEIGdkdF9wY2lfc3JhbTsKKyAgICB1MzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KKyAgICB1MTYgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLworICAgIHU4ICAgICAgc3dpdGNoX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KKyAgICB1OCAgICAgIHBhZGRpbmdbOV07CisgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KKyAgICB1OCAgICAgIHVudXNlZFsyOF07CisgICAgdTggICAgICBmd19tYWdpYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyLiBJRCBmcm9tIGZpcm13YXJlICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9wY2lfc3JhbTsKIAogLyogU1JBTSBzdHJ1Y3R1cmUgRUlTQSBjb250cm9sbGVycyAoYnV0IE5PVCBHRFQzMDAwLzMwMjApICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICB1bmNoYXIgICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgIHVuY2hhciAgICAgIHBhZGRpbmc7Ci19IFBBQ0tFRCBnZHRfZWlzYV9zcmFtOworICAgIHU4ICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KKyAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCisgICAgdTggICAgICBwYWRkaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRfZWlzYV9zcmFtOwogCiAKIC8qIERQUkFNIElTQSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJpb3NfdXNlZFsweDNjMDAtMzJdOyAgIC8qIDE1S0IgLSAzMkJ5dGVzIEJJT1MgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgKEVJU0EpIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIG9zX3VzZWRbMTZdOyAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICAgICAgfSBQQUNLRUQgZHBfc3JhbTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGJpb3NfYXJlYVsweDQwMDBdOyAgICAgIC8qIDE2S0IgcmVzZXJ2ZWQgZm9yIEJJT1MgKi8KKyAgICAgICAgICAgIHU4ICAgICAgYmlvc191c2VkWzB4M2MwMC0zMl07ICAgLyogMTVLQiAtIDMyQnl0ZXMgQklPUyAqLworICAgICAgICAgICAgdTMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIChFSVNBKSBJRCAqLworICAgICAgICAgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCisgICAgICAgICAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLworICAgICAgICAgICAgdTggICAgICBwYWRkaW5nWzldOworICAgICAgICAgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHBfc3JhbTsKKyAgICAgICAgdTggICAgICAgICAgYmlvc19hcmVhWzB4NDAwMF07ICAgICAgLyogMTZLQiByZXNlcnZlZCBmb3IgQklPUyAqLwogICAgIH0gYnU7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwXTsgICAgICAgIC8qIDEyS0IgZm9yIGludGVyZmFjZSAqLworICAgICAgICB1OCAgICAgICAgICBpZl9hcmVhWzB4MzAwMF07ICAgICAgICAvKiAxMktCIGZvciBpbnRlcmZhY2UgKi8KICAgICB9IHU7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1lbWxvY2s7ICAgICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3Rpb24gRFBSQU0gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCi0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBycTsgICAgICAgICAgICAgICAgICAgICAvKiBJUlEvRFJRIGNvbmZpZ3VyYXRpb24gKi8KLSAgICB9IFBBQ0tFRCBpbzsKLX0gUEFDS0VEIGdkdDJfZHByYW1fc3RyOworICAgICAgICB1OCAgICAgICAgICBtZW1sb2NrOyAgICAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0aW9uIERQUkFNICovCisgICAgICAgIHU4ICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZGVsOyAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgYm9hcmQgaW50LiAqLworICAgICAgICB1OCB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgICAgIHU4ICAgICAgICAgIHJxOyAgICAgICAgICAgICAgICAgICAgIC8qIElSUS9EUlEgY29uZmlndXJhdGlvbiAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDJfZHByYW1fc3RyOwogCiAvKiBEUFJBTSBQQ0kgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB1bmlvbiB7CiAgICAgICAgIGdkdF9kcHJfaWYgICAgICBpYzsgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2UgYXJlYSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaWZfYXJlYVsweGZmMC1zaXplb2YoZ2R0X3BjaV9zcmFtKV07CisgICAgICAgIHU4ICAgICAgICAgIGlmX2FyZWFbMHhmZjAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDBbMV07Ci0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkMVszXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICB1bnVzZWQyWzJdOwotICAgICAgICB1bmNoYXIgICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkM1szXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWRlbDsgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIGJvYXJkIGludC4gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDRbM107Ci0gICAgfSBQQUNLRUQgaW87Ci19IFBBQ0tFRCBnZHQ2X2RwcmFtX3N0cjsKKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMFsxXTsKKyAgICAgICAgdTggdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMVszXTsKKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMlsyXTsKKyAgICAgICAgdTggICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLworICAgICAgICB1OCAgICAgICAgICB1bnVzZWQzWzNdOworICAgICAgICB1OCAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDRbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0Nl9kcHJhbV9zdHI7CiAKIC8qIFBMWCByZWdpc3RlciBzdHJ1Y3R1cmUgKG5ldyBQQ0kgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBjZmdfcmVnOyAgICAgICAgLyogRFBSQU0gY2ZnLigyOmJlbG93IDFNQiwwOmFueXdoZXJlKSovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTBfcmVnOyAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWExX3JlZzsgICAgICAgICAgICAgIC8qIHN0YXR1cyBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDJbMl07Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQzWzB4MTBdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ0WzNdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgZWRvb3JfcmVnOyAgICAgICAgICAgICAgLyogbG9jYWwgdG8gUENJIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ1WzNdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDA7ICAgICAgICAgICAgICAgLyogY29udHJvbDAgcmVnaXN0ZXIodW51c2VkKSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDE7ICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Ci19IFBBQ0tFRCBnZHQ2Y19wbHhfcmVnczsKKyAgICB1OCAgICAgICAgICAgICAgY2ZnX3JlZzsgICAgICAgIC8qIERQUkFNIGNmZy4oMjpiZWxvdyAxTUIsMDphbnl3aGVyZSkqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDJbMl07CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkM1sweDEwXTsKKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbM107CisgICAgdTggdm9sYXRpbGUgICAgIGVkb29yX3JlZzsgICAgICAgICAgICAgIC8qIGxvY2FsIHRvIFBDSSBkb29yYmVsbCAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ1WzNdOworICAgIHU4ICAgICAgICAgICAgICBjb250cm9sMDsgICAgICAgICAgICAgICAvKiBjb250cm9sMCByZWdpc3Rlcih1bnVzZWQpICovCisgICAgdTggICAgICAgICAgICAgIGNvbnRyb2wxOyAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX3BseF9yZWdzOwogCiAvKiBEUFJBTSBuZXcgUENJIGNvbnRyb2xsZXJzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHg0MDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDQwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2Y19kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX2RwcmFtX3N0cjsKIAogLyogaTk2MCByZWdpc3RlciBzdHJ1Y3R1cmUgKFBDSSBNUFIgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzE2XTsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWEwX3JlZzsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQyOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTFfcmVnOyAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMzsKLSAgICB1c2hvcnQgdm9sYXRpbGUgICAgIHN0YXR1czsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc3RhdHVzICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNFsxMV07Ci0gICAgdW5jaGFyIHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDVbN107Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBlZG9vcl9lbl9yZWc7ICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNlsyN107Ci0gICAgdWxvbmczMiAgICAgICAgICAgICB1bnVzZWQ3WzkzOV07ICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgICAgICAgICBzZXZlcml0eTsgICAgICAgCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDFbMTZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQyOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDM7CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbMTFdOworICAgIHU4IHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNVs3XTsKKyAgICB1OCAgICAgICAgICAgICAgZWRvb3JfZW5fcmVnOyAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNlsyN107CisgICAgdTMyICAgICAgICAgICAgIHVudXNlZDdbOTM5XTsgICAgICAgICAKKyAgICB1MzIgICAgICAgICAgICAgc2V2ZXJpdHk7ICAgICAgIAogICAgIGNoYXIgICAgICAgICAgICAgICAgZXZ0X3N0clsyNTZdOyAgICAgICAgICAgLyogZXZlbnQgc3RyaW5nICovCi19IFBBQ0tFRCBnZHQ2bV9pOTYwX3JlZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2k5NjBfcmVnczsKIAogLyogRFBSQU0gUENJIE1QUiBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdDZtX2k5NjBfcmVncyAgICAgaTk2MHI7ICAgICAgICAgICAgICAgICAgLyogNEtCIGk5NjAgcmVnaXN0ZXJzICovCiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDMwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2bV9kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2RwcmFtX3N0cjsKIAogCiAvKiBQQ0kgcmVzb3VyY2VzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgc3RydWN0IHBjaV9kZXYgICAgICAqcGRldjsKLSAgICB1bG9uZyAgICAgICAgICAgICAgIGRwbWVtOyAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZyAgICAgICAgICAgICAgIGlvOyAgICAgICAgICAgICAgICAgICAgIC8qIElPIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgZHBtZW07ICAgICAgICAgICAgICAgICAgLyogRFBSQU0gYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICBpbzsgICAgICAgICAgICAgICAgICAgICAvKiBJTyBhZGRyZXNzICovCiB9IGdkdGhfcGNpX3N0cjsKIAogCkBAIC04NDYsOTMgKzg0Niw5MyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCBTY3NpX0hvc3QgICAgKnNob3N0OwogICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgbGlzdDsKLSAgICB1c2hvcnQgICAgICAJaGFudW07Ci0gICAgdXNob3J0ICAgICAgICAgICAgICBvZW1faWQ7ICAgICAgICAgICAgICAgICAvKiBPRU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgY2xhc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIHN0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUgKFBDSTogZGV2aWNlIElEKSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgZndfdmVyczsgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgY2FjaGVfZmVhdDsgICAgICAgICAgICAgLyogZmVhdC4gY2FjaGUgc2Vydi4gKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmF3X2ZlYXQ7ICAgICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2NyZWVuX2ZlYXQ7ICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgYm1pYzsgICAgICAgICAgICAgICAgICAgLyogQk1JQyBhZGRyZXNzIChFSVNBKSAqLworICAgIHUxNiAgICAgIAloYW51bTsKKyAgICB1MTYgICAgICAgICAgICAgIG9lbV9pZDsgICAgICAgICAgICAgICAgIC8qIE9FTSAqLworICAgIHUxNiAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjbGFzcyAqLworICAgIHUzMiAgICAgICAgICAgICBzdHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlIChQQ0k6IGRldmljZSBJRCkgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGZ3X3ZlcnM7ICAgICAgICAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNhY2hlX2ZlYXQ7ICAgICAgICAgICAgIC8qIGZlYXQuIGNhY2hlIHNlcnYuIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHJhd19mZWF0OyAgICAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNjcmVlbl9mZWF0OyAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIGJtaWM7ICAgICAgICAgICAgICAgICAgIC8qIEJNSUMgYWRkcmVzcyAoRUlTQSkgKi8KICAgICB2b2lkIF9faW9tZW0gICAgICAgICpicmQ7ICAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGJyZF9waHlzOyAgICAgICAgICAgICAgIC8qIHNsb3QgbnVtYmVyL0JJT1MgYWRkcmVzcyAqLworICAgIHUzMiAgICAgICAgICAgICBicmRfcGh5czsgICAgICAgICAgICAgICAvKiBzbG90IG51bWJlci9CSU9TIGFkZHJlc3MgKi8KICAgICBnZHQ2Y19wbHhfcmVncyAgICAgICpwbHg7ICAgICAgICAgICAgICAgICAgIC8qIFBMWCByZWdzIChuZXcgUENJIGNvbnRyLikgKi8KICAgICBnZHRoX2NtZF9zdHIgICAgICAgIGNtZGV4dDsKICAgICBnZHRoX2NtZF9zdHIgICAgICAgICpwY2NiOyAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGNjYl9waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgICAgICAgICAgY2NiX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwogI2lmZGVmIElOVF9DT0FMCiAgICAgZ2R0aF9jb2FsX3N0YXR1cyAgICAqY29hbF9zdGF0OyAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIGNvYWxlc2NpbmcgaW50LiovCi0gICAgdWxvbmc2NCAgICAgICAgICAgICBjb2FsX3N0YXRfcGh5czsgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTY0ICAgICAgICAgICAgIGNvYWxfc3RhdF9waHlzOyAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KICNlbmRpZgogICAgIGNoYXIgICAgICAgICAgICAgICAgKnBzY3JhdGNoOyAgICAgICAgICAgICAgLyogc2NyYXRjaCAoRE1BKSBidWZmZXIgKi8KLSAgICB1bG9uZzY0ICAgICAgICAgICAgIHNjcmF0Y2hfcGh5czsgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGRtYTY0X3N1cHBvcnQ7ICAgICAgICAgIC8qIDY0LWJpdCBETUEgc3VwcG9ydGVkPyAqLworICAgIHU2NCAgICAgICAgICAgICBzY3JhdGNoX3BoeXM7ICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTggICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KKyAgICB1OCAgICAgICAgICAgICAgZG1hNjRfc3VwcG9ydDsgICAgICAgICAgLyogNjQtYml0IERNQSBzdXBwb3J0ZWQ/ICovCiAgICAgZ2R0aF9tc2dfc3RyICAgICAgICAqcG1zZzsgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciAqLwotICAgIHVsb25nNjQgICAgICAgICAgICAgbXNnX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGlycTsgICAgICAgICAgICAgICAgICAgIC8qIElSUSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgZHJxOyAgICAgICAgICAgICAgICAgICAgLyogRFJRIChJU0EgY29udHJvbGxlcnMpICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZS9maXJtd2FyZSB2ZXIuLy4uICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvOwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mbzI7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTY0ICAgICAgICAgICAgIG1zZ19waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1OCAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgaXJxOyAgICAgICAgICAgICAgICAgICAgLyogSVJRICovCisgICAgdTggICAgICAgICAgICAgIGRycTsgICAgICAgICAgICAgICAgICAgIC8qIERSUSAoSVNBIGNvbnRyb2xsZXJzKSAqLworICAgIHUxNiAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UvZmlybXdhcmUgdmVyLi8uLiAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvOworICAgIHUzMiAgICAgICAgICAgICBpbmZvMjsgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBTY3NpX0NtbmQgICAgICAgICAgICpyZXFfZmlyc3Q7ICAgICAgICAgICAgIC8qIHRvcCBvZiByZXF1ZXN0IHF1ZXVlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHByZXNlbnQ7ICAgICAgICAgICAgICAgIC8qIEZsYWc6IGhvc3QgZHJpdmUgcHJlc2VudD8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19hcnJheWRydjsgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX21hc3RlcjsgICAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlIG1hc3Rlcj8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgIC8qIEZsYWc6IGhvdGZpeCBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1hc3Rlcl9ubzsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtYXN0ZXIgZHJpdmUgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaGVhZHM7ICAgICAgICAgICAgICAgICAgLyogbWFwcGluZyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgc2VjczsKLSAgICAgICAgdXNob3J0ICAgICAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgIC8qIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgdWxvbmc2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgcndfYXR0cmliczsgICAgICAgICAgICAgLyogci93IGF0dHJpYnV0ZXMgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworICAgICAgICB1OCAgICAgICAgICBwcmVzZW50OyAgICAgICAgICAgICAgICAvKiBGbGFnOiBob3N0IGRyaXZlIHByZXNlbnQ/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2FycmF5ZHJ2OyAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBpc19tYXN0ZXI7ICAgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZSBtYXN0ZXI/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KKyAgICAgICAgdTggICAgICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgLyogRmxhZzogaG90Zml4IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBtYXN0ZXJfbm87ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWFzdGVyIGRyaXZlICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBoZWFkczsgICAgICAgICAgICAgICAgICAvKiBtYXBwaW5nICovCisgICAgICAgIHU4ICAgICAgICAgIHNlY3M7CisgICAgICAgIHUxNiAgICAgICAgICBkZXZ0eXBlOyAgICAgICAgICAgICAgICAvKiBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisgICAgICAgIHU2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCisgICAgICAgIHU4ICAgICAgICAgIGxkcl9ubzsgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbm8uICovCisgICAgICAgIHU4ICAgICAgICAgIHJ3X2F0dHJpYnM7ICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJ1dGVzICovCisgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCAgICAgICAgICBtZWRpYV9jaGFuZ2VkOyAgICAgICAgICAvKiBGbGFnOk1PVU5UL1VOTU9VTlQgb2NjdXJlZCAqLworICAgICAgICB1MzIgICAgICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KICAgICB9IGhkcltNQVhfTERSSVZFU107ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmVzICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgbG9ja2VkPyAoaG90IHBsdWcpICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIGNoYW5uZWwgbnVtYmVyICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpb19jbnRbTUFYSURdOyAgICAgICAgICAvKiBjdXJyZW50IElPIGNvdW50ICovCi0gICAgICAgIHVsb25nMzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIGlkX2xpc3RbTUFYSURdOyAgICAgICAgIC8qIElEcyBvZiB0aGUgcGh5cy4gZGV2aWNlcyAqLworICAgICAgICB1OCAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KKyAgICAgICAgdTggICAgICAgICAgbG9jYWxfbm87ICAgICAgICAgICAgICAgLyogbG9jYWwgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgdTggICAgICAgICAgaW9fY250W01BWElEXTsgICAgICAgICAgLyogY3VycmVudCBJTyBjb3VudCAqLworICAgICAgICB1MzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KKyAgICAgICAgdTMyICAgICAgICAgaWRfbGlzdFtNQVhJRF07ICAgICAgICAgLyogSURzIG9mIHRoZSBwaHlzLiBkZXZpY2VzICovCiAgICAgfSByYXdbTUFYQlVTXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWxzICovCiAgICAgc3RydWN0IHsKICAgICAgICAgU2NzaV9DbW5kICAgICAgICpjbW5kOyAgICAgICAgICAgICAgICAgIC8qIHBlbmRpbmcgcmVxdWVzdCAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwogICAgIH0gY21kX3RhYltHRFRIX01BWENNRFNdOyAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgb2YgcGVuZC4gcmVxdWVzdHMgKi8KICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHBlci1jb21tYW5kIHByaXZhdGUgaW5mbyAqLwogICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgIGludCBpbnRlcm5hbF9jb21tYW5kOyAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjYWxsIHNjc2lfZG9uZSAqLwogICAgICAgICBnZHRoX2NtZF9zdHIgKmludGVybmFsX2NtZF9zdHI7ICAgICAgICAgLyogY3JpZXIgZm9yIGludGVybmFsIG1lc3NhZ2VzKi8KICAgICAgICAgZG1hX2FkZHJfdCBzZW5zZV9wYWRkcjsgICAgICAgICAgICAgICAgIC8qIHNlbnNlIGRtYS1hZGRyICovCi0gICAgICAgIHVuY2hhciBwcmlvcml0eTsKKyAgICAgICAgdTggcHJpb3JpdHk7CiAJaW50IHRpbWVvdXRfY291bnQ7CQkJLyogIyBvZiB0aW1lb3V0IGNhbGxzICovCiAgICAgICAgIHZvbGF0aWxlIGludCB3YWl0X2Zvcl9jb21wbGV0aW9uOwotICAgICAgICB1c2hvcnQgc3RhdHVzOwotICAgICAgICB1bG9uZzMyIGluZm87CisgICAgICAgIHUxNiBzdGF0dXM7CisgICAgICAgIHUzMiBpbmZvOwogICAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyOwogICAgICAgICBpbnQgcGhhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8/PyAqLwogICAgICAgICBpbnQgT3BDb2RlOwogICAgIH0gY21uZGluZm9bR0RUSF9NQVhDTURTXTsgICAgICAgICAgICAgICAgICAgLyogaW5kZXg9PTAgaXMgZnJlZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHRpZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIFRhcmdldCBJRCBjb3VudCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2lkW01BWEJVU107ICAgICAgICAgLyogSU9QIElEcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBtb3JlX3Byb2M7ICAgICAgICAgICAgICAvKiBtb3JlIC9wcm9jIGluZm8gc3VwcG9ydGVkICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfY250OyAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGNvdW50IGluIERQUkFNICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWN0dWFsIGNvbW1hbmQgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGNtZF9vZmZzX2RwbWVtOyAgICAgICAgIC8qIGFjdHVhbCBvZmZzZXQgaW4gRFBSQU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGljX2FsbF9zaXplOyAgICAgICAgICAgIC8qIHNpemVvZiBEUFJBTSBpbnRlcmYuIGFyZWEgKi8KKyAgICB1OCAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KKyAgICB1OCAgICAgICAgICAgICAgdGlkX2NudDsgICAgICAgICAgICAgICAgLyogVGFyZ2V0IElEIGNvdW50ICovCisgICAgdTggICAgICAgICAgICAgIGJ1c19pZFtNQVhCVVNdOyAgICAgICAgIC8qIElPUCBJRHMgKi8KKyAgICB1OCAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCisgICAgdTggICAgICAgICAgICAgIG1vcmVfcHJvYzsgICAgICAgICAgICAgIC8qIG1vcmUgL3Byb2MgaW5mbyBzdXBwb3J0ZWQgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgY291bnQgaW4gRFBSQU0gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9sZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhY3R1YWwgY29tbWFuZCAqLworICAgIHUxNiAgICAgICAgICAgICAgY21kX29mZnNfZHBtZW07ICAgICAgICAgLyogYWN0dWFsIG9mZnNldCBpbiBEUFJBTSAqLworICAgIHUxNiAgICAgICAgICAgICAgaWNfYWxsX3NpemU7ICAgICAgICAgICAgLyogc2l6ZW9mIERQUkFNIGludGVyZi4gYXJlYSAqLwogICAgIGdkdGhfY3Bhcl9zdHIgICAgICAgY3BhcjsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjYWNoZSBwYXIuICovCiAgICAgZ2R0aF9iZmVhdF9zdHIgICAgICBiZmVhdDsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGZlYXR1cmVzICovCiAgICAgZ2R0aF9iaW5mb19zdHIgICAgICBiaW5mbzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGluZm8gKi8KQEAgLTk0MSw3ICs5NDEsNyBAQAogICAgIHN0cnVjdCBwY2lfZGV2ICAgICAgKnBkZXY7CiAgICAgY2hhciAgICAgICAgICAgICAgICBvZW1fbmFtZVs4XTsKICNpZmRlZiBHRFRIX0RNQV9TVEFUSVNUSUNTCi0gICAgdWxvbmcgICAgICAgICAgICAgICBkbWEzMl9jbnQsIGRtYTY0X2NudDsgICAvKiBzdGF0aXN0aWNzOiBETUEgYnVmZmVyICovCisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIGRtYTMyX2NudCwgZG1hNjRfY250OyAgIC8qIHN0YXRpc3RpY3M6IERNQSBidWZmZXIgKi8KICNlbmRpZgogICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgICAgICpzZGV2OwogfSBnZHRoX2hhX3N0cjsKQEAgLTk1Myw2NSArOTUzLDY1IEBACiAKIC8qIElOUVVJUlkgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICB0eXBlX3F1YWw7Ci0gICAgdW5jaGFyICAgICAgbW9kaWZfcm1iOwotICAgIHVuY2hhciAgICAgIHZlcnNpb247Ci0gICAgdW5jaGFyICAgICAgcmVzcF9hZW5jOwotICAgIHVuY2hhciAgICAgIGFkZF9sZW5ndGg7Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWQxOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkMjsKLSAgICB1bmNoYXIgICAgICBtaXNjOwotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0WzE2XTsKLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsKLX0gUEFDS0VEIGdkdGhfaW5xX2RhdGE7CisgICAgdTggICAgICB0eXBlX3F1YWw7CisgICAgdTggICAgICBtb2RpZl9ybWI7CisgICAgdTggICAgICB2ZXJzaW9uOworICAgIHU4ICAgICAgcmVzcF9hZW5jOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1OCAgICAgIHJlc2VydmVkMTsKKyAgICB1OCAgICAgIHJlc2VydmVkMjsKKyAgICB1OCAgICAgIG1pc2M7CisgICAgdTggICAgICB2ZW5kb3JbOF07CisgICAgdTggICAgICBwcm9kdWN0WzE2XTsKKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lucV9kYXRhOwogCiAvKiBSRUFEX0NBUEFDSVRZIGRhdGEgZm9ybWF0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgbGFzdF9ibG9ja19ubzsKLSAgICB1bG9uZzMyICAgICBibG9ja19sZW5ndGg7Ci19IFBBQ0tFRCBnZHRoX3JkY2FwX2RhdGE7CisgICAgdTMyICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwX2RhdGE7CiAKIC8qIFJFQURfQ0FQQUNJVFkgKDE2KSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nNjQgICAgIGxhc3RfYmxvY2tfbm87Ci0gICAgdWxvbmczMiAgICAgYmxvY2tfbGVuZ3RoOwotfSBQQUNLRUQgZ2R0aF9yZGNhcDE2X2RhdGE7CisgICAgdTY0ICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwMTZfZGF0YTsKIAogLyogUkVRVUVTVF9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGVycm9yY29kZTsKLSAgICB1bmNoYXIgICAgICBzZWdubzsKLSAgICB1bmNoYXIgICAgICBrZXk7Ci0gICAgdWxvbmczMiAgICAgaW5mbzsKLSAgICB1bmNoYXIgICAgICBhZGRfbGVuZ3RoOwotICAgIHVsb25nMzIgICAgIGNtZF9pbmZvOwotICAgIHVuY2hhciAgICAgIGFkc2M7Ci0gICAgdW5jaGFyICAgICAgYWRzcTsKLSAgICB1bmNoYXIgICAgICBmcnVjOwotICAgIHVuY2hhciAgICAgIGtleV9zcGVjWzNdOwotfSBQQUNLRUQgZ2R0aF9zZW5zZV9kYXRhOworICAgIHU4ICAgICAgZXJyb3Jjb2RlOworICAgIHU4ICAgICAgc2Vnbm87CisgICAgdTggICAgICBrZXk7CisgICAgdTMyICAgICBpbmZvOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1MzIgICAgIGNtZF9pbmZvOworICAgIHU4ICAgICAgYWRzYzsKKyAgICB1OCAgICAgIGFkc3E7CisgICAgdTggICAgICBmcnVjOworICAgIHU4ICAgICAga2V5X3NwZWNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2Vuc2VfZGF0YTsKIAogLyogTU9ERV9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGF0YV9sZW5ndGg7Ci0gICAgICAgIHVuY2hhciAgbWVkX3R5cGU7Ci0gICAgICAgIHVuY2hhciAgZGV2X3BhcjsKLSAgICAgICAgdW5jaGFyICBiZF9sZW5ndGg7Ci0gICAgfSBQQUNLRUQgaGQ7CisgICAgICAgIHU4ICBkYXRhX2xlbmd0aDsKKyAgICAgICAgdTggIG1lZF90eXBlOworICAgICAgICB1OCAgZGV2X3BhcjsKKyAgICAgICAgdTggIGJkX2xlbmd0aDsKKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGhkOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGVuc19jb2RlOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2NvdW50WzNdOwotICAgICAgICB1bmNoYXIgIHJlc2VydmVkOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2xlbmd0aFszXTsKLSAgICB9IFBBQ0tFRCBiZDsKLX0gUEFDS0VEIGdkdGhfbW9kZXBfZGF0YTsKKyAgICAgICAgdTggIGRlbnNfY29kZTsKKyAgICAgICAgdTggIGJsb2NrX2NvdW50WzNdOworICAgICAgICB1OCAgcmVzZXJ2ZWQ7CisgICAgICAgIHU4ICBibG9ja19sZW5ndGhbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBiZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9tb2RlcF9kYXRhOwogCiAvKiBzdGFjayBmcmFtZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KLX0gUEFDS0VEIGdkdGhfc3RhY2tmcmFtZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9zdGFja2ZyYW1lOwogCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oIGIvZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAppbmRleCA3ODNmYWU3Li5iMDA0YzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKQEAgLTMyLDEwOSArMzIsMTAxIEBACiAjZGVmaW5lIE1BWF9IRFJJVkVTICAgICBNQVhfTERSSVZFUyAgICAgICAgICAgICAvKiBtYXguIGhvc3QgZHJpdmUgY291bnQgKi8KICNlbmRpZgogCi0vKiB0eXBlZGVmcyAqLwotI2lmZGVmIF9fS0VSTkVMX18KLXR5cGVkZWYgdTMyICAgICB1bG9uZzMyOwotdHlwZWRlZiB1NjQgICAgIHVsb25nNjQ7Ci0jZW5kaWYKLQotI2RlZmluZSBQQUNLRUQgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0KIC8qIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICBzZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAqLwotfSBQQUNLRUQgZ2R0aF9zZ19zdHI7CisgICAgdTMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2dfc3RyOwogCiAvKiBzY2F0dGVyL2dhdGhlciBlbGVtZW50IC0gNjRiaXQgYWRkcmVzc2VzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmc2NCAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCi0gICAgdWxvbmczMiAgICAgc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggKi8KLX0gUEFDS0VEIGdkdGhfc2c2NF9zdHI7CisgICAgdTY0ICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2c2NF9zdHI7CiAKIC8qIGNvbW1hbmQgc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgQm9hcmROb2RlOyAgICAgICAgICAgICAgICAgICAgICAvKiBib2FyZCBub2RlIChhbHdheXMgMCkgKi8KLSAgICB1bG9uZzMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdXNob3J0ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KKyAgICB1MzIgICAgIEJvYXJkTm9kZTsgICAgICAgICAgICAgICAgICAgICAgLyogYm9hcmQgbm9kZSAoYWx3YXlzIDApICovCisgICAgdTMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCisgICAgdTE2ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICBEZXZpY2VObzsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2FjaGUgZHJpdmUgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIERlc3RBZGRyOyAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja05vOyAgICAgICAgICAgICAgICAvKiBibG9jayBudW1iZXIgKi8KKyAgICAgICAgICAgIHUzMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KKyAgICAgICAgICAgIHUzMiAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCisgICAgICAgICAgICB1MzIgICAgIHNnX2Nhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnX3N0ciBzZ19sc3RbR0RUSF9NQVhTR107ICAgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgQmxvY2tObzsgICAgICAgICAgICAgICAgLyogYmxvY2sgbnVtYmVyICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZ19jYW56OyAgICAgICAgICAgICAgICAvKiBzL2cgZWxlbWVudCBjb3VudCAqLworICAgICAgICAgICAgdTE2ICAgICAgRGV2aWNlTm87ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNhY2hlIGRyaXZlICovCisgICAgICAgICAgICB1NjQgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLworICAgICAgICAgICAgdTY0ICAgICBEZXN0QWRkcjsgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc3ViZnVuYzsgICAgICAgICAgICAgICAgLyogSU9DVEwgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNoYW5uZWw7ICAgICAgICAgICAgICAgIC8qIGRldmljZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCi0gICAgICAgIH0gUEFDS0VEIGlvY3RsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT0NUTCBjb21tYW5kIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTE2ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLworICAgICAgICAgICAgdTMyICAgICBzdWJmdW5jOyAgICAgICAgICAgICAgICAvKiBJT0NUTCBmdW5jdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBjaGFubmVsOyAgICAgICAgICAgICAgICAvKiBkZXZpY2UgKi8KKyAgICAgICAgICAgIHU2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW9jdGw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElPQ1RMIGNvbW1hbmQgc3RydWN0dXJlICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgICAgIHVsb25nMzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICBtc2dfYWRkcjsgICAgICAgICAgLyogbWVzc2FnZSBidWZmZXIgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIH0gUEFDS0VEIG1zZzsKLSAgICAgICAgICAgICAgICB1bmNoYXIgICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLworICAgICAgICAgICAgICAgICAgICB1MzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICB1NjQgIG1zZ19hZGRyOyAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtc2c7CisgICAgICAgICAgICAgICAgdTggICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLwogICAgICAgICAgICAgfSBzdTsKLSAgICAgICAgfSBQQUNLRUQgc2NyZWVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjcmVlbiBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjcmVlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIHJlc2VydmVkOwotICAgICAgICAgICAgdWxvbmczMiAgICAgZGlyZWN0aW9uOyAgICAgICAgICAgICAgLyogZGF0YSBkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1kaXNjX3RpbWU7ICAgICAgICAgICAgIC8qIGRpc2MuIHRpbWUgKDA6IG5vIHRpbWVvdXQpKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGF0YTsgICAgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNkbGVuOyAgICAgICAgICAgICAgICAgIC8qIGRhdGEgbGVuZ3RoIChieXRlcykgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGNtZFsxMl07ICAgICAgICAgICAgICAgIC8qIFNDU0kgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIG51bWJlciAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgLyogb25seSAwIHVzZWQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9kYXRhOyAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGFkZHIuICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBsaW5rX3A7ICAgICAgICAgICAgICAgICAvKiBsaW5rZWQgY21kcyAobm90IHN1cHAuKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1MzIgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzEyXTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgbGlua19wOyAgICAgICAgICAgICAgICAgLyogbGlua2VkIGNtZHMgKG5vdCBzdXBwLikgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2dfc3RyIHNnX2xzdFtHRFRIX01BWFNHXTsgICAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKLSAgICAgICAgICAgIHVsb25nMzIgICAgIGRpcmVjdGlvbjsgICAgICAgICAgICAgIC8qIGRhdGEgZGlyZWN0aW9uICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2RhdGE7ICAgICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsLi4sMTYpICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBjbWRbMTZdOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBidXM7ICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2Vuc2VfZGF0YTsgICAgICAgICAgICAgLyogc2Vuc2UgZGF0YSBhZGRyLiAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1NjQgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwuLiwxNikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzE2XTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1NjQgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzY0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc2NDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgfSB1OwogICAgIC8qIGFkZGl0aW9uYWwgdmFyaWFibGVzICovCi0gICAgdW5jaGFyICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1c2hvcnQgICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgcmVzdWx0ICovCi0gICAgdWxvbmczMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCisgICAgdTggICAgICBTZXJ2aWNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTE2ICAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHJlc3VsdCAqLworICAgIHUzMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCiAgICAgdm9pZCAgICAgICAgKlJlcXVlc3RCdWZmZXI7ICAgICAgICAgICAgICAgICAvKiByZXF1ZXN0IGJ1ZmZlciAqLwotfSBQQUNLRUQgZ2R0aF9jbWRfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NtZF9zdHI7CiAKIC8qIGNvbnRyb2xsZXIgZXZlbnQgc3RydWN0dXJlICovCiAjZGVmaW5lIEVTX0FTWU5DICAgIDEKQEAgLTE0MiwxMjkgKzEzNCwxMjkgQEAKICNkZWZpbmUgRVNfVEVTVCAgICAgMwogI2RlZmluZSBFU19TWU5DICAgICA0CiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBzaXplIG9mIHN0cnVjdHVyZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzdHJ1Y3R1cmUgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgc3RyZWFtWzE2XTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpb25vZGU7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmRleDsKLSAgICAgICAgfSBQQUNLRUQgZHJpdmVyOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTMyICAgICAgICAgaW5kZXg7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHJpdmVyOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNjc2lfY29vcmRbM107Ci0gICAgICAgIH0gUEFDS0VEIGFzeW5jOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTE2ICAgICAgICAgIHN0YXR1czsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGluZm87CisgICAgICAgICAgICB1OCAgICAgICAgICBzY3NpX2Nvb3JkWzNdOworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGFzeW5jOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhvc3Rkcml2ZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzY3NpX2Nvb3JkWzNdOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNlbnNlX2tleTsKLSAgICAgICAgfSBQQUNLRUQgc3luYzsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpb25vZGU7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzdGF0dXM7CisgICAgICAgICAgICB1MzIgICAgICAgICBpbmZvOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGhvc3Rkcml2ZTsKKyAgICAgICAgICAgIHU4ICAgICAgICAgIHNjc2lfY29vcmRbM107CisgICAgICAgICAgICB1OCAgICAgICAgICBzZW5zZV9rZXk7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc3luYzsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBsMSwgbDIsIGwzLCBsNDsKLSAgICAgICAgfSBQQUNLRUQgdGVzdDsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGwxLCBsMiwgbDMsIGw0OworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRlc3Q7CiAgICAgfSBldTsKLSAgICB1bG9uZzMyICAgICAgICAgICAgICAgICBzZXZlcml0eTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCi19IFBBQ0tFRCBnZHRoX2V2dF9kYXRhOworICAgIHUzMiAgICAgICAgICAgICAgICAgc2V2ZXJpdHk7CisgICAgdTggICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X2RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICAgICAgZmlyc3Rfc3RhbXA7Ci0gICAgdWxvbmczMiAgICAgICAgIGxhc3Rfc3RhbXA7Ci0gICAgdXNob3J0ICAgICAgICAgIHNhbWVfY291bnQ7Ci0gICAgdXNob3J0ICAgICAgICAgIGV2ZW50X3NvdXJjZTsKLSAgICB1c2hvcnQgICAgICAgICAgZXZlbnRfaWR4OwotICAgIHVuY2hhciAgICAgICAgICBhcHBsaWNhdGlvbjsKLSAgICB1bmNoYXIgICAgICAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICAgICAgZmlyc3Rfc3RhbXA7CisgICAgdTMyICAgICAgICAgbGFzdF9zdGFtcDsKKyAgICB1MTYgICAgICAgICAgc2FtZV9jb3VudDsKKyAgICB1MTYgICAgICAgICAgZXZlbnRfc291cmNlOworICAgIHUxNiAgICAgICAgICBldmVudF9pZHg7CisgICAgdTggICAgICAgICAgYXBwbGljYXRpb247CisgICAgdTggICAgICAgICAgcmVzZXJ2ZWQ7CiAgICAgZ2R0aF9ldnRfZGF0YSAgIGV2ZW50X2RhdGE7Ci19IFBBQ0tFRCBnZHRoX2V2dF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X3N0cjsKIAogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHdyaXRlKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIG1hZ2ljOyAgICAgICAgICAgICAgLyogSU9DVEwgbWFnaWMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgICAgICBpb2N0bDsgICAgICAgICAgICAgIC8qIElPQ1RMICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgaW9ub2RlOyAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgLyogY29udHJvbGxlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyICAgICAgICAgICAgICAgICBtYWdpYzsgICAgICAgICAgICAgIC8qIElPQ1RMIG1hZ2ljICovCisgICAgdTE2ICAgICAgICAgICAgICAgICAgaW9jdGw7ICAgICAgICAgICAgICAvKiBJT0NUTCAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIGlvbm9kZTsgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgLyogdGltZW91dCAqLwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogYWRkLiBkYXRhICovCisgICAgICAgICAgICB1OCAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBhZGQuIGRhdGEgKi8KICAgICAgICAgfSBnZW5lcmFsOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBkcml2ZV9jbnQ7ICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgZHJpdmVzW01BWF9IRFJJVkVTXTsvKiBkcml2ZXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGRyaXZlX2NudDsgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBkcml2ZXNbTUFYX0hEUklWRVNdOy8qIGRyaXZlcyAqLwogICAgICAgICB9IGxvY2tkcnY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNoYW5uZWw7ICAgICAgICAgICAgLyogY2hhbm5lbCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLworICAgICAgICAgICAgdTggICAgICAgICAgY2hhbm5lbDsgICAgICAgICAgICAvKiBjaGFubmVsICovCiAgICAgICAgIH0gbG9ja2NobjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBlcmFzZTsgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50ID8gKi8KICAgICAgICAgICAgIGludCAgICAgICAgICAgICBoYW5kbGU7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGV2dFtFVkVOVF9TSVpFXTsgICAgLyogZXZlbnQgc3RydWN0dXJlICovCiAgICAgICAgIH0gZXZlbnQ7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgYnVzOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgIC8qIGNvbW1hbmQgbGVuZ3RoICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGJ1czsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kX2xlbjsgICAgICAgICAgICAvKiBjb21tYW5kIGxlbmd0aCAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KICAgICAgICAgfSBzY3NpOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhkcl9ubzsgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBmbGFnOyAgICAgICAgICAgICAgIC8qIG9sZCBtZXRoLi9hZGQvcmVtb3ZlICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgaGRyX25vOyAgICAgICAgICAgICAvKiBob3N0IGRyaXZlIG51bWJlciAqLworICAgICAgICAgICAgdTggICAgICAgICAgZmxhZzsgICAgICAgICAgICAgICAvKiBvbGQgbWV0aC4vYWRkL3JlbW92ZSAqLwogICAgICAgICB9IHJlc2NhbjsKICAgICB9IGl1OwogfSBnZHRoX2lvd3Jfc3RyOwogCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHJlYWQpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIHN0YXR1czsgICAgICAgICAgICAgLyogSU9DVEwgZXJyb3IgY29kZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAvKiBJT0NUTCBlcnJvciBjb2RlICovCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogZGF0YSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBkYXRhICovCiAgICAgICAgIH0gZ2VuZXJhbDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIGRyaXZlciB2ZXJzaW9uICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBkcml2ZXIgdmVyc2lvbiAqLwogICAgICAgICB9IGRydmVyczsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCiAgICAgICAgIH0gY3RydHlwZTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzdWJ2ZXJzaW9uOyAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgICAgICAgICB1OCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHN1YnZlcnNpb247ICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIHJldmlzaW9uOyAgICAgICAgICAgLyogcmV2aXNpb24gKi8KICAgICAgICAgfSBvc3ZlcnM7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiAgICAgICAgIH0gY3RyY250OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGhhbmRsZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBldnRbRVZFTlRfU0laRV07ICAgIC8qIGV2ZW50IHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KICAgICAgICAgfSBldmVudDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCisgICAgICAgICAgICB1OCAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCiAgICAgICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAvKiBpbmRleCBpcyBob3N0IGRyaXZlIG51bWJlciAqLwogICAgIH0gaXU7CiB9IGdkdGhfaW9yZF9zdHI7CkBAIC0yNzIsNTMgKzI2NCw1MyBAQAogCiAvKiBHRFRJT0NUTF9HRU5FUkFMICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCB0aW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIHVsb25nMzIgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IgaW5mbyAqLyAKLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLwotICAgIHVsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nIHNlbnNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2UgYnVmZmVyIHNpemUgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTE2IHRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVycm9yIGluZm8gKi8gCisgICAgdTE2IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgc2Vuc2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBidWZmZXIgc2l6ZSAqLwogICAgIGdkdGhfY21kX3N0ciBjb21tYW5kOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCAqLyAgICAgICAgICAgICAgICAgICAKIH0gZ2R0aF9pb2N0bF9nZW5lcmFsOwogCiAvKiBHRFRJT0NUTF9MT0NLRFJWICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgdXNob3J0IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCisgICAgdTE2IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrZHJ2OwogCiAvKiBHRFRJT0NUTF9MT0NLQ0hOICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrY2huOwogCiAvKiBHRFRJT0NUTF9PU1ZFUlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICB1bmNoYXIgc3VidmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICB1c2hvcnQgcmV2aXNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgdTggdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICB1OCBzdWJ2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgIHUxNiByZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KIH0gZ2R0aF9pb2N0bF9vc3ZlcnM7CiAKIC8qIEdEVElPQ1RMX0NUUlRZUEUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUgKi8KLSAgICB1c2hvcnQgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNsb3QgZXRjLiAqLwotICAgIHVzaG9ydCBvZW1faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT0VNIElEICovCi0gICAgdXNob3J0IGJpb3NfdmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgIHVzaG9ydCBhY2Nlc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KLSAgICB1c2hvcnQgZXh0X3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIHR5cGUgKi8KLSAgICB1c2hvcnQgZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldmljZSBJRCAqLwotICAgIHVzaG9ydCBzdWJfZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgLyogc3ViIGRldmljZSBJRCAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1OCB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciB0eXBlICovCisgICAgdTE2IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbG90IGV0Yy4gKi8KKyAgICB1MTYgb2VtX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLworICAgIHUxNiBiaW9zX3ZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKyAgICB1MTYgYWNjZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgdTE2IGV4dF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCB0eXBlICovCisgICAgdTE2IGRldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgSUQgKi8KKyAgICB1MTYgc3ViX2RldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YiBkZXZpY2UgSUQgKi8KIH0gZ2R0aF9pb2N0bF9jdHJ0eXBlOwogCiAvKiBHRFRJT0NUTF9FVkVOVCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7CisgICAgdTE2IGlvbm9kZTsKICAgICBpbnQgZXJhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50PyAqLwogICAgIGludCBoYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgaGFuZGxlICovCiAgICAgZ2R0aF9ldnRfc3RyIGV2ZW50OwpAQCAtMzI2LDIyICszMTgsMjIgQEAKIAogLyogR0RUSU9DVExfUkVTQ0FOL0dEVElPQ1RMX0hEUkxJU1QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIGZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQvcmVtb3ZlICovCi0gICAgdXNob3J0IGhkcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBuby4gKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZC9yZW1vdmUgKi8KKyAgICB1MTYgaGRyX25vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIG5vLiAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICB1bmNoYXIgdGFyZ2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLworICAgICAgICB1OCB0YXJnZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4IGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwogICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaXMgaG9zdCBkcml2ZSBudW1iZXIgKi8KIH0gZ2R0aF9pb2N0bF9yZXNjYW47CiAKIC8qIEdEVElPQ1RMX1JFU0VUX0JVUy9HRFRJT0NUTF9SRVNFVF9EUlYgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdXNob3J0IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXMvaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgbnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1cy9ob3N0IGRyaXZlIG51bWJlciAqLworICAgIHUxNiBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzICovCiB9IGdkdGhfaW9jdGxfcmVzZXQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IDEyNThkYTMuLmZmYjJiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBpbnQgaSwgZm91bmQ7CiAgICAgZ2R0aF9jbWRfc3RyICAgIGdkdGNtZDsKICAgICBnZHRoX2NwYXJfc3RyICAgKnBjcGFyOwotICAgIHVsb25nNjQgICAgICAgICBwYWRkcjsKKyAgICB1NjQgICAgICAgICBwYWRkcjsKIAogICAgIGNoYXIgICAgICAgICAgICBjbW5kW01BWF9DT01NQU5EX1NJWkVdOwogICAgIG1lbXNldChjbW5kLCAweGZmLCAxMik7CkBAIC0xNTYsOCArMTU2LDggQEAKICAgICBvZmZfdCBiZWdpbiA9IDAscG9zID0gMDsKICAgICBpbnQgaWQsIGksIGosIGssIHNlYywgZmxhZzsKICAgICBpbnQgbm9fbWRydiA9IDAsIGRydl9ubywgaXNfbWlycjsKLSAgICB1bG9uZzMyIGNudDsKLSAgICB1bG9uZzY0IHBhZGRyOworICAgIHUzMiBjbnQ7CisgICAgdTY0IHBhZGRyOwogICAgIGludCByYyA9IC1FTk9NRU07CiAKICAgICBnZHRoX2NtZF9zdHIgKmdkdGNtZDsKQEAgLTIyMCwxNCArMjIwLDE0IEBACiAKICAgICBpZiAoaGEtPm1vcmVfcHJvYykKICAgICAgICAgc3ByaW50ZihocmVjLCAiJWQuJTAyZC4lMDJkLSVjJTAzWCIsIAotICAgICAgICAgICAgICAgICh1bmNoYXIpKGhhLT5iaW5mby51cGRfZndfdmVyPj4yNCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKLSAgICAgICAgICAgICAgICAodW5jaGFyKShoYS0+YmluZm8udXBkX2Z3X3ZlciksCisgICAgICAgICAgICAgICAgKHU4KShoYS0+YmluZm8udXBkX2Z3X3Zlcj4+MjQpLAorICAgICAgICAgICAgICAgICh1OCkoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5iaW5mby51cGRfZndfdmVyKSwKICAgICAgICAgICAgICAgICBoYS0+YmZlYXQucmFpZCA/ICdSJzonTicsCiAgICAgICAgICAgICAgICAgaGEtPmJpbmZvLnVwZF9yZXZpc2lvbik7CiAgICAgZWxzZQotICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbj4+OCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbikpOworICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHU4KShoYS0+Y3Bhci52ZXJzaW9uPj44KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5jcGFyLnZlcnNpb24pKTsKIAogICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgIiBEcml2ZXIgVmVyLjogIFx0JS0xMHNcdEZpcm13YXJlIFZlci46IFx0JXNcbiIsCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgICAgIHBkcy0+YmlkID0gaGEtPnJhd1tpXS5sb2NhbF9ubzsKICAgICAgICAgICAgIHBkcy0+Zmlyc3QgPSAwOwogICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gaGEtPnJhd1tpXS5wZGV2X2NudDsKLSAgICAgICAgICAgIGNudCA9ICgzKkdEVEhfU0NSQVRDSC80IC0gNSAqIHNpemVvZih1bG9uZzMyKSkgLworICAgICAgICAgICAgY250ID0gKDMqR0RUSF9TQ1JBVENILzQgLSA1ICogc2l6ZW9mKHUzMikpIC8KICAgICAgICAgICAgICAgICBzaXplb2YocGRzLT5saXN0WzBdKTsKICAgICAgICAgICAgIGlmIChwZHMtPmVudHJpZXMgPiBjbnQpCiAgICAgICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gY250OwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKICAgICAgICAgICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENhcGFjaXR5IFtNQl06XHQlLTZkICAgIFx0U3RhcnQgU2VjdG9yOiAgXHQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bG9uZzMyKShoYS0+aGRyW2ldLnNpemUvMjA0OCksIGhhLT5oZHJbaV0uc3RhcnRfc2VjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzIpKGhhLT5oZHJbaV0uc2l6ZS8yMDQ4KSwgaGEtPmhkcltpXS5zdGFydF9zZWMpOwogICAgICAgICAgICAgbGVuICs9IHNpemU7ICBwb3MgPSBiZWdpbiArIGxlbjsKICAgICAgICAgICAgIGlmIChwb3MgPCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICBsZW4gPSAwOwpAQCAtNjY0LDkgKzY2NCw5IEBACiB9CiAKIHN0YXRpYyBjaGFyICpnZHRoX2lvY3RsX2FsbG9jKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGludCBzY3JhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmc2NCAqcGFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgKnBhZGRyKQogewotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciAqcmV0X3ZhbDsKIAogICAgIGlmIChzaXplID09IDApCkBAIC02OTEsOSArNjkxLDkgQEAKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdWxvbmc2NCBwYWRkcikKK3N0YXRpYyB2b2lkIGdkdGhfaW9jdGxfZnJlZShnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBjaGFyICpidWYsIHU2NCBwYWRkcikKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYgKGJ1ZiA9PSBoYS0+cHNjcmF0Y2gpIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MDUsMTYgKzcwNSwxNiBAQAogfQogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCi1zdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNpemUpCitzdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdTE2IHNpemUpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmV0X3ZhbDsKIAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgIHJldF92YWwgPSBGQUxTRTsKICAgICBpZiAoaGEtPnNjcmF0Y2hfYnVzeSkgewotICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodWxvbmczMilzaXplKQorICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodTMyKXNpemUpCiAgICAgICAgICAgICByZXRfdmFsID0gVFJVRTsKICAgICB9CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MjQsMTEgKzcyNCwxMSBAQAogCiBzdGF0aWMgdm9pZCBnZHRoX3dhaXRfY29tcGxldGlvbihnZHRoX2hhX3N0ciAqaGEsIGludCBidXNudW0sIGludCBpZCkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCBpOwogICAgIFNjc2lfQ21uZCAqc2NwOwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogCkBAIC03MzgsOCArNzM4LDggQEAKIAogICAgICAgICBiID0gc2NwLT5kZXZpY2UtPmNoYW5uZWw7CiAgICAgICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7Ci0gICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1bmNoYXIpaWQgJiYgCi0gICAgICAgICAgICBiID09ICh1bmNoYXIpYnVzbnVtKSB7CisgICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1OClpZCAmJiAKKyAgICAgICAgICAgIGIgPT0gKHU4KWJ1c251bSkgewogICAgICAgICAgICAgY21uZGluZm8tPndhaXRfZm9yX2NvbXBsZXRpb24gPSAwOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICB3aGlsZSAoIWNtbmRpbmZvLT53YWl0X2Zvcl9jb21wbGV0aW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oCmluZGV4IDliOTAwY2MuLmRhYjE1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmgKQEAgLTE3LDggKzE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwgZ2R0aF9oYV9zdHIgKmhhKTsKIAogc3RhdGljIGNoYXIgKmdkdGhfaW9jdGxfYWxsb2MoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgaW50IHNjcmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICpwYWRkcik7Ci1zdGF0aWMgdm9pZCBnZHRoX2lvY3RsX2ZyZWUoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgY2hhciAqYnVmLCB1bG9uZzY0IHBhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqcGFkZHIpOworc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdTY0IHBhZGRyKTsKIHN0YXRpYyB2b2lkIGdkdGhfd2FpdF9jb21wbGV0aW9uKGdkdGhfaGFfc3RyICpoYSwgaW50IGJ1c251bSwgaW50IGlkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDU1NDYyNmUxLi4wOWRiY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaG9zdHMuYworKysgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwpAQCAtMjE1LDYgKzIxNSw4IEBACiAJCXNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50ID0gZGV2ID8gZGV2IDogJnBsYXRmb3JtX2J1czsKIAlzaG9zdC0+ZG1hX2RldiA9IGRtYV9kZXY7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNob3N0LT5zaG9zdF9nZW5kZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwpAQCAtMjIyLDYgKzIyNCw4IEBACiAJc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfUlVOTklORyk7CiAJZ2V0X2RldmljZShzaG9zdC0+c2hvc3RfZ2VuZGV2LnBhcmVudCk7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNob3N0LT5zaG9zdF9kZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RlbF9nZW5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5jIGIvZHJpdmVycy9zY3NpL2hwc2EuYwppbmRleCBiYjk2ZmRkLi4wMzY5N2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJocHNhLmgiCiAKIC8qIEhQU0FfRFJJVkVSX1ZFUlNJT04gbXVzdCBiZSAzIGJ5dGUgdmFsdWVzICgwLTI1NSkgc2VwYXJhdGVkIGJ5ICcuJyAqLwotI2RlZmluZSBIUFNBX0RSSVZFUl9WRVJTSU9OICIxLjAuMCIKKyNkZWZpbmUgSFBTQV9EUklWRVJfVkVSU0lPTiAiMi4wLjEtMyIKICNkZWZpbmUgRFJJVkVSX05BTUUgIkhQIEhQU0EgRHJpdmVyICh2ICIgSFBTQV9EUklWRVJfVkVSU0lPTiAiKSIKIAogLyogSG93IGxvbmcgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgYm9hcmQgdG8gZ28gaW50byBzaW1wbGUgbW9kZSAqLwpAQCAtNzcsOSArNzcsNiBAQAogCiAvKiBkZWZpbmUgdGhlIFBDSSBpbmZvIGZvciB0aGUgY2FyZHMgd2UgY2FuIGNvbnRyb2wgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHNhX3BjaV9kZXZpY2VfaWRbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIyM30sCi0Je1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyMzR9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjNEfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0MX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDN9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ1fSwKQEAgLTg3LDYgKzg0LDkgQEAKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRifSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzIzM30sCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0YgMHgzMzNmCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NGLCAgICAgMHgxMDNDLCAweDMzM0Z9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwgICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCiAJezAsfQpAQCAtOTksOSArOTksNiBAQAogICogIGFjY2VzcyA9IEFkZHJlc3Mgb2YgdGhlIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycwogICovCiBzdGF0aWMgc3RydWN0IGJvYXJkX3R5cGUgcHJvZHVjdHNbXSA9IHsKLQl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAotCXsweDMyM2QxMDNjLCAiU21hcnQgQXJyYXkgUDcwME0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MTEwM0MsICJTbWFydCBBcnJheSBQMjEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDMxMDNDLCAiU21hcnQgQXJyYXkgUDQxMCIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQ1MTAzQywgIlNtYXJ0IEFycmF5IFA0MTBpIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTA5LDYgKzEwNiw4IEBACiAJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNGExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0YjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjMzMTAzQywgIlN0b3JhZ2VXb3JrcyBQMTIxMG0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzMzRjEwM0MsICJTdG9yYWdlV29ya3MgUDEyMTBtIiwgJlNBNV9hY2Nlc3N9LAogCXsweEZGRkYxMDNDLCAiVW5rbm93biBTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKIH07CiAKQEAgLTEyNiwxMiArMTI1LDE1IEBACiBzdGF0aWMgdm9pZCBjbWRfc3BlY2lhbF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiBzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfc3BlY2lhbF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKLXN0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgX191OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCi0Jdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIF9fdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCitzdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHU4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCiAJaW50IGNtZF90eXBlKTsKIAogc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK3N0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCisJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpOwogCiBzdGF0aWMgaW50IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCk7CiBzdGF0aWMgaW50IGhwc2Ffc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKQEAgLTE1MCw2ICsxNTIsMTEgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOwogc3RhdGljIHZvaWQgY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOworLyogcGVyZm9ybWFudCBtb2RlIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGNhbGNfYnVja2V0X21hcChpbnQgKmJ1Y2tldCwgaW50IG51bV9idWNrZXRzLAorCWludCBuc2dzLCBpbnQgKmJ1Y2tldF9tYXApOworc3RhdGljIHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKK3N0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAogc3RhdGljIERFVklDRV9BVFRSKHJhaWRfbGV2ZWwsIFNfSVJVR08sIHJhaWRfbGV2ZWxfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobHVuaWQsIFNfSVJVR08sIGx1bmlkX3Nob3csIE5VTEwpOwpAQCAtMTczLDEwICsxODAsMTAgQEAKIAkubmFtZQkJCT0gImhwc2EiLAogCS5wcm9jX25hbWUJCT0gImhwc2EiLAogCS5xdWV1ZWNvbW1hbmQJCT0gaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQsCi0JLmNhbl9xdWV1ZQkJPSA1MTIsCisJLnNjYW5fc3RhcnQJCT0gaHBzYV9zY2FuX3N0YXJ0LAorCS5zY2FuX2ZpbmlzaGVkCQk9IGhwc2Ffc2Nhbl9maW5pc2hlZCwKIAkudGhpc19pZAkJPSAtMSwKIAkuc2dfdGFibGVzaXplCQk9IE1BWFNHRU5UUklFUywKLQkuY21kX3Blcl9sdW4JCT0gNTEyLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyLAogCS5pb2N0bAkJCT0gaHBzYV9pb2N0bCwKQEAgLTE5NSw2ICsyMDIsMTIgQEAKIAlyZXR1cm4gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN0bHJfaW5mbyAqc2hvc3RfdG9faGJhKHN0cnVjdCBTY3NpX0hvc3QgKnNoKQoreworCXVuc2lnbmVkIGxvbmcgKnByaXYgPSBzaG9zdF9wcml2KHNoKTsKKwlyZXR1cm4gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmhwc2Ffc2Nhbl90aHJlYWQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKGhwc2Ffc2Nhbl9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGhwc2Ffc2Nhbl9xKTsKQEAgLTMxMiw3ICszMjUsNyBAQAogCQkJaC0+YnVzeV9zY2FubmluZyA9IDE7CiAJCQltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CiAJCQlob3N0X25vID0gaC0+c2NzaV9ob3N0ID8gIGgtPnNjc2lfaG9zdC0+aG9zdF9ubyA6IC0xOwotCQkJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGhvc3Rfbm8pOworCQkJaHBzYV9zY2FuX3N0YXJ0KGgtPnNjc2lfaG9zdCk7CiAJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CiAJCQltdXRleF9sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOwogCQkJaC0+YnVzeV9zY2FubmluZyA9IDA7CkBAIC0zNzksOCArMzkyLDcgQEAKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKLQl1bnNpZ25lZCBsb25nICpwcml2ID0gc2hvc3RfcHJpdihzaG9zdCk7Ci0JaCA9IChzdHJ1Y3QgY3Rscl9pbmZvICopICpwcml2OworCWggPSBzaG9zdF90b19oYmEoc2hvc3QpOwogCWlmIChhZGRfdG9fc2Nhbl9saXN0KGgpKSB7CiAJCXdha2VfdXBfcHJvY2VzcyhocHNhX3NjYW5fdGhyZWFkKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZoLT5zY2FuX3dhaXQpOwpAQCAtMzk0LDEwICs0MDYsNDQgQEAKIAlobGlzdF9hZGRfaGVhZCgmYy0+bGlzdCwgbGlzdCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXUzMiBhOworCisJaWYgKHVubGlrZWx5KGgtPnRyYW5zTWV0aG9kICE9IENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkKKwkJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKTsKKworCWlmICgoKihoLT5yZXBseV9wb29sX2hlYWQpICYgMSkgPT0gKGgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCkpIHsKKwkJYSA9ICooaC0+cmVwbHlfcG9vbF9oZWFkKTsgLyogTmV4dCBjbWQgaW4gcmluZyBidWZmZXIgKi8KKwkJKGgtPnJlcGx5X3Bvb2xfaGVhZCkrKzsKKwkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKKwl9IGVsc2UgeworCQlhID0gRklGT19FTVBUWTsKKwl9CisJLyogQ2hlY2sgZm9yIHdyYXBhcm91bmQgKi8KKwlpZiAoaC0+cmVwbHlfcG9vbF9oZWFkID09IChoLT5yZXBseV9wb29sICsgaC0+bWF4X2NvbW1hbmRzKSkgeworCQloLT5yZXBseV9wb29sX2hlYWQgPSBoLT5yZXBseV9wb29sOworCQloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgXj0gMTsKKwl9CisJcmV0dXJuIGE7Cit9CisKKy8qIHNldF9wZXJmb3JtYW50X21vZGU6IE1vZGlmeSB0aGUgdGFnIGZvciBjY2lzcyBwZXJmb3JtYW50CisgKiBzZXQgYml0IDAgZm9yIHB1bGwgbW9kZWwsIGJpdHMgMy0xIGZvciBibG9jayBmZXRjaAorICogcmVnaXN0ZXIgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCWlmIChsaWtlbHkoaC0+dHJhbnNNZXRob2QgPT0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQpKQorCQljLT5idXNhZGRyIHw9IDEgfCAoaC0+YmxvY2tGZXRjaFRhYmxlW2MtPkhlYWRlci5TR0xpc3RdIDw8IDEpOworfQorCiBzdGF0aWMgdm9pZCBlbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNldF9wZXJmb3JtYW50X21vZGUoaCwgYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlhZGRRKCZoLT5yZXFRLCBjKTsKIAloLT5RZGVwdGgrKzsKQEAgLTQyMiw2ICs0NjgsMTUgQEAKIAlyZXR1cm4gKHNjc2kzYWRkclszXSAmIDB4QzApID09IDB4NDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Njc2lfcmV2XzUoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpZiAoIWgtPmhiYV9pbnF1aXJ5X2RhdGEpCisJCXJldHVybiAwOworCWlmICgoaC0+aGJhX2lucXVpcnlfZGF0YVsyXSAmIDB4MDcpID09IDUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAogCSJVTktOT1dOIgogfTsKQEAgLTQzMSw3ICs0ODYsNyBAQAogCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGwgPSAwOwotCWludCBybGV2ZWw7CisJdW5zaWduZWQgY2hhciBybGV2ZWw7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqaGRldjsKQEAgLTQ1NSw3ICs1MTAsNyBAQAogCiAJcmxldmVsID0gaGRldi0+cmFpZF9sZXZlbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJsZXZlbCA8IDAgfHwgcmxldmVsID4gUkFJRF9VTktOT1dOKQorCWlmIChybGV2ZWwgPiBSQUlEX1VOS05PV04pCiAJCXJsZXZlbCA9IFJBSURfVU5LTk9XTjsKIAlsID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJSQUlEICVzXG4iLCByYWlkX2xhYmVsW3JsZXZlbF0pOwogCXJldHVybiBsOwpAQCAtNjIwLDYgKzY3NSwyNCBAQAogCXJldHVybiAwOwogfQogCisvKiBSZXBsYWNlIGFuIGVudHJ5IGZyb20gaC0+ZGV2W10gYXJyYXkuICovCitzdGF0aWMgdm9pZCBocHNhX3Njc2lfcmVwbGFjZV9lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorCWludCBlbnRyeSwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqbmV3X2VudHJ5LAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmFkZGVkW10sIGludCAqbmFkZGVkLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnJlbW92ZWRbXSwgaW50ICpucmVtb3ZlZCkKK3sKKwkvKiBhc3N1bWVzIGgtPmRldmxvY2sgaXMgaGVsZCAqLworCUJVR19PTihlbnRyeSA8IDAgfHwgZW50cnkgPj0gSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEpOworCXJlbW92ZWRbKm5yZW1vdmVkXSA9IGgtPmRldltlbnRyeV07CisJKCpucmVtb3ZlZCkrKzsKKwloLT5kZXZbZW50cnldID0gbmV3X2VudHJ5OworCWFkZGVkWypuYWRkZWRdID0gbmV3X2VudHJ5OworCSgqbmFkZGVkKSsrOworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBkZXZpY2UgYyVkYiVkdCVkbCVkIGNoYW5nZWQuXG4iLAorCQlzY3NpX2RldmljZV90eXBlKG5ld19lbnRyeS0+ZGV2dHlwZSksIGhvc3RubywgbmV3X2VudHJ5LT5idXMsCisJCQluZXdfZW50cnktPnRhcmdldCwgbmV3X2VudHJ5LT5sdW4pOworfQorCiAvKiBSZW1vdmUgYW4gZW50cnkgZnJvbSBoLT5kZXZbXSBhcnJheS4gKi8KIHN0YXRpYyB2b2lkIGhwc2Ffc2NzaV9yZW1vdmVfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubywgaW50IGVudHJ5LAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnJlbW92ZWRbXSwgaW50ICpucmVtb3ZlZCkKQEAgLTYyOCw4ICs3MDEsNyBAQAogCWludCBpOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkOwogCi0JaWYgKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSkKLQkJQlVHKCk7CisJQlVHX09OKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSk7CiAKIAlzZCA9IGgtPmRldltlbnRyeV07CiAJcmVtb3ZlZFsqbnJlbW92ZWRdID0gaC0+ZGV2W2VudHJ5XTsKQEAgLTcyMiw2ICs3OTQsOCBAQAogI2RlZmluZSBERVZJQ0VfQ0hBTkdFRCAxCiAjZGVmaW5lIERFVklDRV9TQU1FIDIKIAlmb3IgKGkgPSAwOyBpIDwgaGF5c3RhY2tfc2l6ZTsgaSsrKSB7CisJCWlmIChoYXlzdGFja1tpXSA9PSBOVUxMKSAvKiBwcmV2aW91c2x5IHJlbW92ZWQuICovCisJCQljb250aW51ZTsKIAkJaWYgKFNDU0kzQUREUl9FUShuZWVkbGUtPnNjc2kzYWRkciwgaGF5c3RhY2tbaV0tPnNjc2kzYWRkcikpIHsKIAkJCSppbmRleCA9IGk7CiAJCQlpZiAoZGV2aWNlX2lzX3RoZV9zYW1lKG5lZWRsZSwgaGF5c3RhY2tbaV0pKQpAQCAtNzM0LDcgKzgwOCw3IEBACiAJcmV0dXJuIERFVklDRV9OT1RfRk9VTkQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorc3RhdGljIHZvaWQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkW10sIGludCBuc2RzKQogewogCS8qIHNkIGNvbnRhaW5zIHNjc2kzIGFkZHJlc3NlcyBhbmQgZGV2dHlwZXMsIGFuZCBpbnF1aXJ5CkBAIC03NzksMTIgKzg1MywxMiBAQAogCQkJY29udGludWU7IC8qIHJlbW92ZSBeXl4sIGhlbmNlIGkgbm90IGluY3JlbWVudGVkICovCiAJCX0gZWxzZSBpZiAoZGV2aWNlX2NoYW5nZSA9PSBERVZJQ0VfQ0hBTkdFRCkgewogCQkJY2hhbmdlcysrOwotCQkJaHBzYV9zY3NpX3JlbW92ZV9lbnRyeShoLCBob3N0bm8sIGksCi0JCQkJcmVtb3ZlZCwgJm5yZW1vdmVkKTsKLQkJCSh2b2lkKSBocHNhX3Njc2lfYWRkX2VudHJ5KGgsIGhvc3Rubywgc2RbZW50cnldLAotCQkJCWFkZGVkLCAmbmFkZGVkKTsKLQkJCS8qIGFkZCBjYW4ndCBmYWlsLCB3ZSBqdXN0IHJlbW92ZWQgb25lLiAqLwotCQkJc2RbZW50cnldID0gTlVMTDsgLyogcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkICovCisJCQlocHNhX3Njc2lfcmVwbGFjZV9lbnRyeShoLCBob3N0bm8sIGksIHNkW2VudHJ5XSwKKwkJCQlhZGRlZCwgJm5hZGRlZCwgcmVtb3ZlZCwgJm5yZW1vdmVkKTsKKwkJCS8qIFNldCBpdCB0byBOVUxMIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmcmVlZAorCQkJICogYXQgdGhlIGJvdHRvbSBvZiBocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoKQorCQkJICovCisJCQlzZFtlbnRyeV0gPSBOVUxMOwogCQl9CiAJCWkrKzsKIAl9CkBAIC04NjAsNyArOTM0LDYgQEAKIGZyZWVfYW5kX291dDoKIAlrZnJlZShhZGRlZCk7CiAJa2ZyZWUocmVtb3ZlZCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC05MDAsNyArOTczLDcgQEAKIAogc3RhdGljIHZvaWQgaHBzYV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlyZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8uICovCisJLyogbm90aGluZyB0byBkby4gKi8KIH0KIAogc3RhdGljIHZvaWQgaHBzYV9zY3NpX3NldHVwKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC05MDgsMTEgKzk4MSwxMCBAQAogCWgtPm5kZXZpY2VzID0gMDsKIAloLT5zY3NpX2hvc3QgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZoLT5kZXZsb2NrKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwLAotCWludCB0aW1lb3V0LCBfX3UzMiB0YWcpCisJaW50IHRpbWVvdXQsIHUzMiB0YWcpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CkBAIC05ODcsNyArMTA1OSw2IEBACiAJCQkJICogcmVxdWlyZWQKIAkJCQkgKi8KIAkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgewotCQkJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgogCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgogCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKQEAgLTk5NSwxNCArMTA2NiwyMiBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0KLQorCQkJaWYgKHNlbnNlX2tleSA9PSBBQk9SVEVEX0NPTU1BTkQpIHsKKwkJCQkvKiBBYm9ydGVkIGNvbW1hbmQgaXMgcmV0cnlhYmxlICovCisJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKKwkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IGFib3J0ZWQgY29tbWFuZDogIgorCQkJCQkiQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAorCQkJCQljcCwgYXNjLCBhc2NxKTsKKwkJCQljbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQkJCWJyZWFrOworCQkJfQogCQkJLyogTXVzdCBiZSBzb21lIG90aGVyIHR5cGUgb2YgY2hlY2sgY29uZGl0aW9uICovCiAJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIGNoZWNrIGNvbmRpdGlvbjogIgogCQkJCQkidW5rbm93biB0eXBlOiAiCiAJCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCiAJCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4LCAiCiAJCQkJCSJjbWQ9WyUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCisJCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCiAJCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhdXG4iLAogCQkJCQljcCwgc2Vuc2Vfa2V5LCBhc2MsIGFzY3EsCiAJCQkJCWNtZC0+cmVzdWx0LApAQCAtMTAxMCw3ICsxMDg5LDEwIEBACiAJCQkJCWNtZC0+Y21uZFsyXSwgY21kLT5jbW5kWzNdLAogCQkJCQljbWQtPmNtbmRbNF0sIGNtZC0+Y21uZFs1XSwKIAkJCQkJY21kLT5jbW5kWzZdLCBjbWQtPmNtbmRbN10sCi0JCQkJCWNtZC0+Y21uZFs4XSwgY21kLT5jbW5kWzldKTsKKwkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0sCisJCQkJCWNtZC0+Y21uZFsxMF0sIGNtZC0+Y21uZFsxMV0sCisJCQkJCWNtZC0+Y21uZFsxMl0sIGNtZC0+Y21uZFsxM10sCisJCQkJCWNtZC0+Y21uZFsxNF0sIGNtZC0+Y21uZFsxNV0pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA4Niw3ICsxMTY4LDcgQEAKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHJlcG9ydHMgYWJvcnQgZmFpbGVkXG4iLCBjcCk7CiAJCWJyZWFrOwogCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgotCQljbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBhYm9ydGVkIGRvIHRvIGFuIHVuc29saWNpdGVkICIKIAkJCSJhYm9ydFxuIiwgY3ApOwogCQlicmVhazsKQEAgLTExMTksOSArMTIwMSwxMSBAQAogCXNoLT5tYXhfY21kX2xlbiA9IE1BWF9DT01NQU5EX1NJWkU7CiAJc2gtPm1heF9sdW4gPSBIUFNBX01BWF9MVU47CiAJc2gtPm1heF9pZCA9IEhQU0FfTUFYX0xVTjsKKwlzaC0+Y2FuX3F1ZXVlID0gaC0+bnJfY21kczsKKwlzaC0+Y21kX3Blcl9sdW4gPSBoLT5ucl9jbWRzOwogCWgtPnNjc2lfaG9zdCA9IHNoOwogCXNoLT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKSBoOwotCXNoLT5pcnEgPSBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF07CisJc2gtPmlycSA9IGgtPmludHJbUEVSRl9NT0RFX0lOVF07CiAJc2gtPnVuaXF1ZV9pZCA9IHNoLT5pcnE7CiAJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNoLCAmaC0+cGRldi0+ZGV2KTsKIAlpZiAoZXJyb3IpCkBAIC0xMTMzLDExICsxMjE3LDExIEBACiAJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiaHBzYV9zY3NpX2RldGVjdDogc2NzaV9hZGRfaG9zdCIKIAkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOwogCXNjc2lfaG9zdF9wdXQoc2gpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiAgZmFpbDoKIAlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3Njc2lfZGV0ZWN0OiBzY3NpX2hvc3RfYWxsb2MiCiAJCSIgZmFpbGVkIGZvciBjb250cm9sbGVyICVkXG4iLCBoLT5jdGxyKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIGhwc2FfcGNpX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTE2MCw3ICsxMjQ0LDcgQEAKIAkJc2l6ZV90IGJ1ZmxlbiwKIAkJaW50IGRhdGFfZGlyZWN0aW9uKQogewotCV9fdTY0IGFkZHI2NDsKKwl1NjQgYWRkcjY0OwogCiAJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgewogCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7CkBAIC0xMTY4LDE0ICsxMjUyLDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlhZGRyNjQgPSAoX191NjQpIHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CisJYWRkcjY0ID0gKHU2NCkgcGNpX21hcF9zaW5nbGUocGRldiwgYnVmLCBidWZsZW4sIGRhdGFfZGlyZWN0aW9uKTsKIAljcC0+U0dbMF0uQWRkci5sb3dlciA9Ci0JICAoX191MzIpIChhZGRyNjQgJiAoX191NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJICAodTMyKSAoYWRkcjY0ICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAljcC0+U0dbMF0uQWRkci51cHBlciA9Ci0JICAoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkgICh1MzIpICgoYWRkcjY0ID4+IDMyKSAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJY3AtPlNHWzBdLkxlbiA9IGJ1ZmxlbjsKLQljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSAxOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLworCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoc3RydWN0IGN0bHJfaW5mbyAqaCwKQEAgLTEyNzQsNyArMTM1OCw3IEBACiAKIAlpZiAoYyA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLwogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZpbGxfY21kKGMsIEhQU0FfSU5RVUlSWSwgaCwgYnVmLCBidWZzaXplLCBwYWdlLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKQEAgLTEzNjYsOSArMTQ1MCw4IEBACiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQotCW1lbXNldCgmc2NzaTNhZGRyWzBdLCAwLCA4KTsgLyogYWRkcmVzcyB0aGUgY29udHJvbGxlciAqLwotCisJLyogYWRkcmVzcyB0aGUgY29udHJvbGxlciAqLworCW1lbXNldChzY3NpM2FkZHIsIDAsIHNpemVvZihzY3NpM2FkZHIpKTsKIAlmaWxsX2NtZChjLCBsb2dpY2FsID8gSFBTQV9SRVBPUlRfTE9HIDogSFBTQV9SRVBPUlRfUEhZUywgaCwKIAkJYnVmLCBidWZzaXplLCAwLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKIAlpZiAoZXh0ZW5kZWRfcmVzcG9uc2UpCkBAIC0xNDA5LDEzICsxNDkyLDEyIEBACiAJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdGhpc19kZXZpY2UpCiB7CiAjZGVmaW5lIE9CRFJfVEFQRV9JTlFfU0laRSA0OQotCXVuc2lnbmVkIGNoYXIgKmlucV9idWZmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICppbnFfYnVmZjsKIAotCWlucV9idWZmID0ga21hbGxvYyhPQkRSX1RBUEVfSU5RX1NJWkUsIEdGUF9LRVJORUwpOworCWlucV9idWZmID0ga3phbGxvYyhPQkRSX1RBUEVfSU5RX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghaW5xX2J1ZmYpCiAJCWdvdG8gYmFpbF9vdXQ7CiAKLQltZW1zZXQoaW5xX2J1ZmYsIDAsIE9CRFJfVEFQRV9JTlFfU0laRSk7CiAJLyogRG8gYW4gaW5xdWlyeSB0byB0aGUgZGV2aWNlIHRvIHNlZSB3aGF0IGl0IGlzLiAqLwogCWlmIChocHNhX3Njc2lfZG9faW5xdWlyeShoLCBzY3NpM2FkZHIsIDAsIGlucV9idWZmLAogCQkodW5zaWduZWQgY2hhcikgT0JEUl9UQVBFX0lOUV9TSVpFKSAhPSAwKSB7CkBAIC0xNDg1LDMyICsxNTY3LDUxIEBACiAgKiBpbiBocHNhX2ZpbmRfdGFyZ2V0X2x1biwgY2FsbGVkIGJ5IGhwc2Ffc2NzaV9hZGRfZW50cnkuKQogICovCiBzdGF0aWMgdm9pZCBmaWd1cmVfYnVzX3RhcmdldF9sdW4oc3RydWN0IGN0bHJfaW5mbyAqaCwKLQlfX3U4ICpsdW5hZGRyYnl0ZXMsIGludCAqYnVzLCBpbnQgKnRhcmdldCwgaW50ICpsdW4sCisJdTggKmx1bmFkZHJieXRlcywgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1biwKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UpCiB7Ci0KLQlfX3UzMiBsdW5pZDsKKwl1MzIgbHVuaWQ7CiAKIAlpZiAoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGx1bmFkZHJieXRlcykpIHsKIAkJLyogbG9naWNhbCBkZXZpY2UgKi8KLQkJbWVtY3B5KCZsdW5pZCwgbHVuYWRkcmJ5dGVzLCBzaXplb2YobHVuaWQpKTsKLQkJbHVuaWQgPSBsZTMyX3RvX2NwdShsdW5pZCk7Ci0KLQkJaWYgKGlzX21zYTJ4eHgoaCwgZGV2aWNlKSkgewotCQkJKmJ1cyA9IDE7Ci0JCQkqdGFyZ2V0ID0gKGx1bmlkID4+IDE2KSAmIDB4M2ZmZjsKLQkJCSpsdW4gPSBsdW5pZCAmIDB4MDBmZjsKLQkJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKSB7CisJCQkvKiBwMTIxMG0sIGxvZ2ljYWwgZHJpdmVzIGx1biBhc3NpZ25tZW50cworCQkJICogbWF0Y2ggU0NTSSBSRVBPUlQgTFVOUyBkYXRhLgorCQkJICovCisJCQlsdW5pZCA9IGxlMzJfdG9fY3B1KCooKF9fbGUzMiAqKSBsdW5hZGRyYnl0ZXMpKTsKIAkJCSpidXMgPSAwOwotCQkJKmx1biA9IDA7Ci0JCQkqdGFyZ2V0ID0gbHVuaWQgJiAweDNmZmY7CisJCQkqdGFyZ2V0ID0gMDsKKwkJCSpsdW4gPSAobHVuaWQgJiAweDNmZmYpICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIG5vdCBwMTIxMG0uLi4gKi8KKwkJCWx1bmlkID0gbGUzMl90b19jcHUoKigoX19sZTMyICopIGx1bmFkZHJieXRlcykpOworCQkJaWYgKGlzX21zYTJ4eHgoaCwgZGV2aWNlKSkgeworCQkJCS8qIG1zYTJ4eHggd2F5LCBwdXQgbG9naWNhbHMgb24gYnVzIDEKKwkJCQkgKiBhbmQgbWF0Y2ggdGFyZ2V0L2x1biBudW1iZXJzIGJveAorCQkJCSAqIHJlcG9ydHMuCisJCQkJICovCisJCQkJKmJ1cyA9IDE7CisJCQkJKnRhcmdldCA9IChsdW5pZCA+PiAxNikgJiAweDNmZmY7CisJCQkJKmx1biA9IGx1bmlkICYgMHgwMGZmOworCQkJfSBlbHNlIHsKKwkJCQkvKiBUcmFkaXRpb25hbCBzbWFydCBhcnJheSB3YXkuICovCisJCQkJKmJ1cyA9IDA7CisJCQkJKmx1biA9IDA7CisJCQkJKnRhcmdldCA9IGx1bmlkICYgMHgzZmZmOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJLyogcGh5c2ljYWwgZGV2aWNlICovCiAJCWlmIChpc19oYmFfbHVuaWQobHVuYWRkcmJ5dGVzKSkKLQkJCSpidXMgPSAzOworCQkJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKSB7CisJCQkJKmJ1cyA9IDA7IC8qIHB1dCBwMTIxMG0gY3RsciBhdCAwLDAsMCAqLworCQkJCSp0YXJnZXQgPSAwOworCQkJCSpsdW4gPSAwOworCQkJCXJldHVybjsKKwkJCX0gZWxzZQorCQkJCSpidXMgPSAzOyAvKiB0cmFkaXRpb25hbCBzbWFydGFycmF5ICovCiAJCWVsc2UKLQkJCSpidXMgPSAyOworCQkJKmJ1cyA9IDI7IC8qIHBoeXNpY2FsIGRpc2sgKi8KIAkJKnRhcmdldCA9IC0xOwogCQkqbHVuID0gLTE7IC8qIHdlIHdpbGwgZmlsbCB0aGVzZSBpbiBsYXRlci4gKi8KIAl9CkBAIC0xNTI5LDcgKzE2MzAsNyBAQAogICovCiBzdGF0aWMgaW50IGFkZF9tc2EyeHh4X2VuY2xvc3VyZV9kZXZpY2Uoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0bXBkZXZpY2UsCi0Jc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdGhpc19kZXZpY2UsIF9fdTggKmx1bmFkZHJieXRlcywKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSwgdTggKmx1bmFkZHJieXRlcywKIAlpbnQgYnVzLCBpbnQgdGFyZ2V0LCBpbnQgbHVuLCB1bnNpZ25lZCBsb25nIGx1bnplcm9iaXRzW10sCiAJaW50ICpubXNhMnh4eF9lbmNsb3N1cmVzKQogewpAQCAtMTU1MCw2ICsxNjUxLDkgQEAKIAlpZiAoaXNfaGJhX2x1bmlkKHNjc2kzYWRkcikpCiAJCXJldHVybiAwOyAvKiBEb24ndCBhZGQgdGhlIFJBSUQgY29udHJvbGxlciBoZXJlLiAqLwogCisJaWYgKGlzX3Njc2lfcmV2XzUoaCkpCisJCXJldHVybiAwOyAvKiBwMTIxMG0gZG9lc24ndCBuZWVkIHRvIGRvIHRoaXMuICovCisKICNkZWZpbmUgTUFYX01TQTJYWFhfRU5DTE9TVVJFUyAzMgogCWlmICgqbm1zYTJ4eHhfZW5jbG9zdXJlcyA+PSBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTKSB7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJNYXhpbXVtIG51bWJlciBvZiBNU0EyWFhYICIKQEAgLTE1NzYsMTggKzE2ODAsMTQgQEAKICAqLwogc3RhdGljIGludCBocHNhX2dhdGhlcl9sdW5faW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCWludCByZXBvcnRsdW5zaXplLAotCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2LCBfX3UzMiAqbnBoeXNpY2FscywKLQlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2LCBfX3UzMiAqbmxvZ2ljYWxzKQorCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2LCB1MzIgKm5waHlzaWNhbHMsCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2RldiwgdTMyICpubG9naWNhbHMpCiB7CiAJaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGgsIHBoeXNkZXYsIHJlcG9ydGx1bnNpemUsIDApKSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBwaHlzaWNhbCBMVU5zIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCW1lbWNweShucGh5c2ljYWxzLCAmcGh5c2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpucGh5c2ljYWxzKSk7Ci0JKm5waHlzaWNhbHMgPSBiZTMyX3RvX2NwdSgqbnBoeXNpY2FscykgLyA4OwotI2lmZGVmIERFQlVHCi0JZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBwaHlzaWNhbCBsdW5zIGlzICVkXG4iLCAqbnBoeXNpY2Fscyk7Ci0jZW5kaWYKKwkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKXBoeXNkZXYtPkxVTkxpc3RMZW5ndGgpKSAvIDg7CiAJaWYgKCpucGh5c2ljYWxzID4gSFBTQV9NQVhfUEhZU19MVU4pIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm1heGltdW0gcGh5c2ljYWwgTFVOcyAoJWQpIGV4Y2VlZGVkLiIKIAkJCSIgICVkIExVTnMgaWdub3JlZC5cbiIsIEhQU0FfTUFYX1BIWVNfTFVOLApAQCAtMTU5OCwxMSArMTY5OCw3IEBACiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBsb2dpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtY3B5KG5sb2dpY2FscywgJmxvZ2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpubG9naWNhbHMpKTsKLQkqbmxvZ2ljYWxzID0gYmUzMl90b19jcHUoKm5sb2dpY2FscykgLyA4OwotI2lmZGVmIERFQlVHCi0JZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBsb2dpY2FsIGx1bnMgaXMgJWRcbiIsICpubG9naWNhbHMpOwotI2VuZGlmCisJKm5sb2dpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSBsb2dkZXYtPkxVTkxpc3RMZW5ndGgpKSAvIDg7CiAJLyogUmVqZWN0IExvZ2ljYWxzIGluIGV4Y2VzcyBvZiBvdXIgbWF4IGNhcGFiaWxpdHkuICovCiAJaWYgKCpubG9naWNhbHMgPiBIUFNBX01BWF9MVU4pIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKQEAgLTE2MjEsNiArMTcxNywzMSBAQAogCXJldHVybiAwOwogfQogCit1OCAqZmlndXJlX2x1bmFkZHJieXRlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uLCBpbnQgaSwKKwlpbnQgbnBoeXNpY2FscywgaW50IG5sb2dpY2Fscywgc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCwKKwlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2X2xpc3QpCit7CisJLyogSGVscGVyIGZ1bmN0aW9uLCBmaWd1cmUgb3V0IHdoZXJlIHRoZSBMVU4gSUQgaW5mbyBpcyBjb21pbmcgZnJvbQorCSAqIGdpdmVuIGluZGV4IGksIGxpc3RzIG9mIHBoeXNpY2FsIGFuZCBsb2dpY2FsIGRldmljZXMsIHdoZXJlIGluCisJICogdGhlIGxpc3QgdGhlIHJhaWQgY29udHJvbGxlciBpcyBzdXBwb3NlZCB0byBhcHBlYXIgKGZpcnN0IG9yIGxhc3QpCisJICovCisKKwlpbnQgbG9naWNhbHNfc3RhcnQgPSBucGh5c2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKTsKKwlpbnQgbGFzdF9kZXZpY2UgPSBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKTsKKworCWlmIChpID09IHJhaWRfY3Rscl9wb3NpdGlvbikKKwkJcmV0dXJuIFJBSURfQ1RMUl9MVU5JRDsKKworCWlmIChpIDwgbG9naWNhbHNfc3RhcnQpCisJCXJldHVybiAmcGh5c2Rldl9saXN0LT5MVU5baSAtIChyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCldWzBdOworCisJaWYgKGkgPCBsYXN0X2RldmljZSkKKwkJcmV0dXJuICZsb2dkZXZfbGlzdC0+TFVOW2kgLSBucGh5c2ljYWxzIC0KKwkJCShyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCldWzBdOworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubykKIHsKIAkvKiB0aGUgaWRlYSBoZXJlIGlzIHdlIGNvdWxkIGdldCBub3RpZmllZApAQCAtMTYzNiwxNCArMTc1NywxNSBAQAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2X2xpc3QgPSBOVUxMOwogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXZfbGlzdCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOwotCV9fdTMyIG5waHlzaWNhbHMgPSAwOwotCV9fdTMyIG5sb2dpY2FscyA9IDA7Ci0JX191MzIgbmRldl9hbGxvY2F0ZWQgPSAwOworCXUzMiBucGh5c2ljYWxzID0gMDsKKwl1MzIgbmxvZ2ljYWxzID0gMDsKKwl1MzIgbmRldl9hbGxvY2F0ZWQgPSAwOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKipjdXJyZW50c2QsICp0aGlzX2RldmljZSwgKnRtcGRldmljZTsKIAlpbnQgbmN1cnJlbnQgPSAwOwogCWludCByZXBvcnRsdW5zaXplID0gc2l6ZW9mKCpwaHlzZGV2X2xpc3QpICsgSFBTQV9NQVhfUEhZU19MVU4gKiA4OwogCWludCBpLCBubXNhMnh4eF9lbmNsb3N1cmVzLCBuZGV2c190b19hbGxvY2F0ZTsKIAlpbnQgYnVzLCB0YXJnZXQsIGx1bjsKKwlpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uOwogCURFQ0xBUkVfQklUTUFQKGx1bnplcm9iaXRzLCBIUFNBX01BWF9UQVJHRVRTX1BFUl9DVExSKTsKIAogCWN1cnJlbnRzZCA9IGt6YWxsb2Moc2l6ZW9mKCpjdXJyZW50c2QpICogSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEsCkBAIC0xNjgxLDIzICsxODAzLDIyIEBACiAJCW5kZXZfYWxsb2NhdGVkKys7CiAJfQogCisJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKQorCQlyYWlkX2N0bHJfcG9zaXRpb24gPSAwOworCWVsc2UKKwkJcmFpZF9jdGxyX3Bvc2l0aW9uID0gbnBoeXNpY2FscyArIG5sb2dpY2FsczsKKwogCS8qIGFkanVzdCBvdXIgdGFibGUgb2YgZGV2aWNlcyAqLwogCW5tc2EyeHh4X2VuY2xvc3VyZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgMTsgaSsrKSB7Ci0JCV9fdTggKmx1bmFkZHJieXRlczsKKwkJdTggKmx1bmFkZHJieXRlczsKIAogCQkvKiBGaWd1cmUgb3V0IHdoZXJlIHRoZSBMVU4gSUQgaW5mbyBpcyBjb21pbmcgZnJvbSAqLwotCQlpZiAoaSA8IG5waHlzaWNhbHMpCi0JCQlsdW5hZGRyYnl0ZXMgPSAmcGh5c2Rldl9saXN0LT5MVU5baV1bMF07Ci0JCWVsc2UKLQkJCWlmIChpIDwgbnBoeXNpY2FscyArIG5sb2dpY2FscykKLQkJCQlsdW5hZGRyYnl0ZXMgPQotCQkJCQkmbG9nZGV2X2xpc3QtPkxVTltpLW5waHlzaWNhbHNdWzBdOwotCQkJZWxzZSAvKiBqYW0gaW4gdGhlIFJBSUQgY29udHJvbGxlciBhdCB0aGUgZW5kICovCi0JCQkJbHVuYWRkcmJ5dGVzID0gUkFJRF9DVExSX0xVTklEOwotCisJCWx1bmFkZHJieXRlcyA9IGZpZ3VyZV9sdW5hZGRyYnl0ZXMoaCwgcmFpZF9jdGxyX3Bvc2l0aW9uLAorCQkJaSwgbnBoeXNpY2FscywgbmxvZ2ljYWxzLCBwaHlzZGV2X2xpc3QsIGxvZ2Rldl9saXN0KTsKIAkJLyogc2tpcCBtYXNrZWQgcGh5c2ljYWwgZGV2aWNlcy4gKi8KLQkJaWYgKGx1bmFkZHJieXRlc1szXSAmIDB4QzAgJiYgaSA8IG5waHlzaWNhbHMpCisJCWlmIChsdW5hZGRyYnl0ZXNbM10gJiAweEMwICYmCisJCQlpIDwgbnBoeXNpY2FscyArIChyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCkpCiAJCQljb250aW51ZTsKIAogCQkvKiBHZXQgZGV2aWNlIHR5cGUsIHZlbmRvciwgbW9kZWwsIGRldmljZSBpZCAqLwpAQCAtMTc3Nyw3ICsxODk4LDYgQEAKIAlrZnJlZShpbnFfYnVmZik7CiAJa2ZyZWUocGh5c2Rldl9saXN0KTsKIAlrZnJlZShsb2dkZXZfbGlzdCk7Ci0JcmV0dXJuOwogfQogCiAvKiBocHNhX3NjYXR0ZXJfZ2F0aGVyIHRha2VzIGEgc3RydWN0IHNjc2lfY21uZCwgKGNtZCksIGFuZCBkb2VzIHRoZSBwY2kKQEAgLTE3OTAsNyArMTkxMCw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCV9fdTY0IGFkZHI2NDsKKwl1NjQgYWRkcjY0OwogCWludCB1c2Vfc2csIGk7CiAKIAlCVUdfT04oc2NzaV9zZ19jb3VudChjbWQpID4gTUFYU0dFTlRSSUVTKTsKQEAgLTE4MDMsMjAgKzE5MjMsMjAgQEAKIAkJZ290byBzZ2xpc3RfZmluaXNoZWQ7CiAKIAlzY3NpX2Zvcl9lYWNoX3NnKGNtZCwgc2csIHVzZV9zZywgaSkgewotCQlhZGRyNjQgPSAoX191NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJYWRkcjY0ID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlsZW4gID0gc2dfZG1hX2xlbihzZyk7CiAJCWNwLT5TR1tpXS5BZGRyLmxvd2VyID0KLQkJCShfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJCSh1MzIpIChhZGRyNjQgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwogCQljcC0+U0dbaV0uQWRkci51cHBlciA9Ci0JCQkoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJCSh1MzIpICgoYWRkcjY0ID4+IDMyKSAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJCWNwLT5TR1tpXS5MZW4gPSBsZW47CiAJCWNwLT5TR1tpXS5FeHQgPSAwOyAgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwogCX0KIAogc2dsaXN0X2ZpbmlzaGVkOgogCi0JY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR0xpc3QgPSAodTgpIHVzZV9zZzsgICAvKiBuby4gU0dzIGNvbnRpZyBpbiB0aGlzIGNtZCAqLworCWNwLT5IZWFkZXIuU0dUb3RhbCA9ICh1MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2MCw3ICsxOTgwLDggQEAKIAljLT5zY3NpX2NtZCA9IGNtZDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KIAltZW1jcHkoJmMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzWzBdLCAmc2NzaTNhZGRyWzBdLCA4KTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8qIFVzZSBrLiBhZGRyZXNzIG9mIGNtZCBhcyB0YWcgKi8KKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IERJUkVDVF9MT09LVVBfU0hJRlQpOworCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gRElSRUNUX0xPT0tVUF9CSVQ7CiAKIAkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCiAKQEAgLTE5MTQsNiArMjAzNSw0OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBocHNhX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2gpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHNob3N0X3RvX2hiYShzaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHdhaXQgdW50aWwgYW55IHNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcyBpcyBmaW5pc2hlZC4gKi8KKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJCWlmIChoLT5zY2FuX2ZpbmlzaGVkKQorCQkJYnJlYWs7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCQl3YWl0X2V2ZW50KGgtPnNjYW5fd2FpdF9xdWV1ZSwgaC0+c2Nhbl9maW5pc2hlZCk7CisJCS8qIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYSByYWNlIGJldHdlZW4gdGhpcworCQkgKiB0aHJlYWQgYW5kIGRyaXZlciB1bmxvYWQgYmVjYXVzZSB0aGUgbWlkbGF5ZXIgd2lsbAorCQkgKiBoYXZlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQsIHNvIHVubG9hZCB3b24ndAorCQkgKiBoYXBwZW4gaWYgd2UncmUgaW4gaGVyZS4KKwkJICovCisJfQorCWgtPnNjYW5fZmluaXNoZWQgPSAwOyAvKiBtYXJrIHNjYW4gYXMgaW4gcHJvZ3Jlc3MgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKworCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCBoLT5zY3NpX2hvc3QtPmhvc3Rfbm8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWgtPnNjYW5fZmluaXNoZWQgPSAxOyAvKiBtYXJrIHNjYW4gYXMgZmluaXNoZWQuICovCisJd2FrZV91cF9hbGwoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNoLAorCXVuc2lnbmVkIGxvbmcgZWxhcHNlZF90aW1lKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSBzaG9zdF90b19oYmEoc2gpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZpbmlzaGVkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWZpbmlzaGVkID0gaC0+c2Nhbl9maW5pc2hlZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmluaXNoZWQ7Cit9CisKIHN0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCkBAIC0xOTI2LDcgKzIwODksNiBAQAogewogCWludCByYzsKIAotCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCAtMSk7CiAJcmMgPSBocHNhX3Njc2lfZGV0ZWN0KGgpOwogCWlmIChyYyAhPSAwKQogCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3JlZ2lzdGVyX3Njc2k6IGZhaWxlZCIKQEAgLTIwMDMsMTQgKzIxNjUsMTQgQEAKIAloID0gc2Rldl90b19oYmEoc2NzaWNtZC0+ZGV2aWNlKTsKIAlpZiAoaCA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOwotCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZXNldHRpbmcgZHJpdmVcbiIpOwotCiAJZGV2ID0gc2NzaWNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlpZiAoIWRldikgewogCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyOiAiCiAJCQkiZGV2aWNlIGxvb2t1cCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkZXZpY2UgJWQ6JWQ6JWQ6JWRcbiIsCisJCWgtPnNjc2lfaG9zdC0+aG9zdF9ubywgZGV2LT5idXMsIGRldi0+dGFyZ2V0LCBkZXYtPmx1bik7CiAJLyogc2VuZCBhIHJlc2V0IHRvIHRoZSBTQ1NJIExVTiB3aGljaCB0aGUgY29tbWFuZCB3YXMgc2VudCB0byAqLwogCXJjID0gaHBzYV9zZW5kX3Jlc2V0KGgsIGRldi0+c2NzaTNhZGRyKTsKIAlpZiAocmMgPT0gMCAmJiB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KGgsIGRldi0+c2NzaTNhZGRyKSA9PSAwKQpAQCAtMjA1Myw4ICsyMjE1LDggQEAKIAljLT5jbWRpbmRleCA9IGk7CiAKIAlJTklUX0hMSVNUX05PREUoJmMtPmxpc3QpOwotCWMtPmJ1c2FkZHIgPSAoX191MzIpIGNtZF9kbWFfaGFuZGxlOwotCXRlbXA2NC52YWwgPSAoX191NjQpIGVycl9kbWFfaGFuZGxlOworCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKKwl0ZW1wNjQudmFsID0gKHU2NCkgZXJyX2RtYV9oYW5kbGU7CiAJYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwogCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKIAljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOwpAQCAtMjA5MSw4ICsyMjUzLDggQEAKIAltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAogCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7Ci0JYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7Ci0JdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOworCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKIAljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CkBAIC0yMTI1LDUwICsyMjg3LDYgQEAKIAogI2lmZGVmIENPTkZJR19DT01QQVQKIAotc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCByZXQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGhwc2FfaW9jdGwoZGV2LCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpOwotc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAotCWludCBjbWQsIHZvaWQgKmFyZyk7Ci0KLXN0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKLQljYXNlIENDSVNTX0dFVElOVElORk86Ci0JY2FzZSBDQ0lTU19TRVRJTlRJTkZPOgotCWNhc2UgQ0NJU1NfR0VUTk9ERU5BTUU6Ci0JY2FzZSBDQ0lTU19TRVROT0RFTkFNRToKLQljYXNlIENDSVNTX0dFVEhFQVJUQkVBVDoKLQljYXNlIENDSVNTX0dFVEJVU1RZUEVTOgotCWNhc2UgQ0NJU1NfR0VURklSTVZFUjoKLQljYXNlIENDSVNTX0dFVERSSVZWRVI6Ci0JY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKLQljYXNlIENDSVNTX0RFUkVHRElTSzoKLQljYXNlIENDSVNTX1JFR05FV0RJU0s6Ci0JY2FzZSBDQ0lTU19SRUdORVdEOgotCWNhc2UgQ0NJU1NfUkVTQ0FORElTSzoKLQljYXNlIENDSVNTX0dFVExVTklORk86Ci0JCXJldHVybiBkb19pb2N0bChkZXYsIGNtZCwgYXJnKTsKLQotCWNhc2UgQ0NJU1NfUEFTU1RIUlUzMjoKLQkJcmV0dXJuIGhwc2FfaW9jdGwzMl9wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKLQljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgotCQlyZXR1cm4gaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotfQotCiBzdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCUlPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICphcmczMiA9CkBAIC0yMTkzLDcgKzIzMTEsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZG9faW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsICh2b2lkICopcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAllcnIgfD0gY29weV9pbl91c2VyKCZhcmczMi0+ZXJyb3JfaW5mbywgJnAtPmVycm9yX2luZm8sCkBAIC0yMjMwLDcgKzIzNDgsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZG9faW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsICh2b2lkICopcCk7CisJZXJyID0gaHBzYV9pb2N0bChkZXYsIENDSVNTX0JJR19QQVNTVEhSVSwgKHZvaWQgKilwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciB8PSBjb3B5X2luX3VzZXIoJmFyZzMyLT5lcnJvcl9pbmZvLCAmcC0+ZXJyb3JfaW5mbywKQEAgLTIyMzksNiArMjM1NywzNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENDSVNTX0dFVFBDSUlORk86CisJY2FzZSBDQ0lTU19HRVRJTlRJTkZPOgorCWNhc2UgQ0NJU1NfU0VUSU5USU5GTzoKKwljYXNlIENDSVNTX0dFVE5PREVOQU1FOgorCWNhc2UgQ0NJU1NfU0VUTk9ERU5BTUU6CisJY2FzZSBDQ0lTU19HRVRIRUFSVEJFQVQ6CisJY2FzZSBDQ0lTU19HRVRCVVNUWVBFUzoKKwljYXNlIENDSVNTX0dFVEZJUk1WRVI6CisJY2FzZSBDQ0lTU19HRVREUklWVkVSOgorCWNhc2UgQ0NJU1NfUkVWQUxJRFZPTFM6CisJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdESVNLOgorCWNhc2UgQ0NJU1NfUkVHTkVXRDoKKwljYXNlIENDSVNTX1JFU0NBTkRJU0s6CisJY2FzZSBDQ0lTU19HRVRMVU5JTkZPOgorCQlyZXR1cm4gaHBzYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKKworCWNhc2UgQ0NJU1NfUEFTU1RIUlUzMjoKKwkJcmV0dXJuIGhwc2FfaW9jdGwzMl9wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKwljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaHBzYV9nZXRwY2lpbmZvX2lvY3RsKHN0cnVjdCBjdGxyX2luZm8gKmgsIHZvaWQgX191c2VyICphcmdwKQpAQCAtMjM3OCw4ICsyNTI2LDggQEAKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwotCV9fdTMyIGxlZnQ7Ci0JX191MzIgc3o7CisJdTMyIGxlZnQ7CisJdTMyIHN6OwogCUJZVEUgX191c2VyICpkYXRhX3B0cjsKIAogCWlmICghYXJncCkKQEAgLTI1MjcsNyArMjY3NSw3IEBACiAJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdESVNLOgogCWNhc2UgQ0NJU1NfUkVHTkVXRDoKLQkJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGRldi0+aG9zdC0+aG9zdF9ubyk7CisJCWhwc2Ffc2Nhbl9zdGFydChoLT5zY3NpX2hvc3QpOwogCQlyZXR1cm4gMDsKIAljYXNlIENDSVNTX0dFVFBDSUlORk86CiAJCXJldHVybiBocHNhX2dldHBjaWluZm9faW9jdGwoaCwgYXJncCk7CkBAIC0yNTQyLDggKzI2OTAsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKLQl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKK3N0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCB1OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAlpbnQgY21kX3R5cGUpCiB7CiAJaW50IHBjaV9kaXIgPSBYRkVSX05PTkU7CkBAIC0yNzEwLDE5ICsyODU4LDIwIEBACiAJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW50ZXJydXB0X3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlcnJ1cHRfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCXJldHVybiBoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgaW50ZXJydXB0X25vdF9mb3JfdXMoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKLQlyZXR1cm4gKChoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpID09IDApIHx8Ci0JCSAoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKKwlyZXR1cm4gIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSAmJgorCQkoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKKwkJKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwgX191MzIgdGFnX2luZGV4LAotCV9fdTMyIHJhd190YWcpCitzdGF0aWMgaW5saW5lIGludCBiYWRfdGFnKHN0cnVjdCBjdGxyX2luZm8gKmgsIHUzMiB0YWdfaW5kZXgsCisJdTMyIHJhd190YWcpCiB7CiAJaWYgKHVubGlrZWx5KHRhZ19pbmRleCA+PSBoLT5ucl9jbWRzKSkgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiYmFkIHRhZyAweCUwOHggaWdub3JlZC5cbiIsIHJhd190YWcpOwpAQCAtMjczMSw3ICsyODgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3UzMiByYXdfdGFnKQorc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1MzIgcmF3X3RhZykKIHsKIAlyZW1vdmVRKGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpKQpAQCAtMjc0MCw0MiArMjg4OSw3OSBAQAogCQljb21wbGV0ZShjLT53YWl0aW5nKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgaHBzYV90YWdfY29udGFpbnNfaW5kZXgodTMyIHRhZykKK3sKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9CSVQgMHgxMAorCXJldHVybiB0YWcgJiBESVJFQ1RfTE9PS1VQX0JJVDsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHBzYV90YWdfdG9faW5kZXgodTMyIHRhZykKK3sKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA1CisJcmV0dXJuIHRhZyA+PiBESVJFQ1RfTE9PS1VQX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHModTMyIHRhZykKK3sKKyNkZWZpbmUgSFBTQV9FUlJPUl9CSVRTIDB4MDMKKwlyZXR1cm4gdGFnICYgfkhQU0FfRVJST1JfQklUUzsKK30KKworLyogcHJvY2VzcyBjb21wbGV0aW9uIG9mIGFuIGluZGV4ZWQgKCJkaXJlY3QgbG9va3VwIikgY29tbWFuZCAqLworc3RhdGljIGlubGluZSB1MzIgcHJvY2Vzc19pbmRleGVkX2NtZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXUzMiByYXdfdGFnKQoreworCXUzMiB0YWdfaW5kZXg7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCisJdGFnX2luZGV4ID0gaHBzYV90YWdfdG9faW5kZXgocmF3X3RhZyk7CisJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKKwkJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKKwljID0gaC0+Y21kX3Bvb2wgKyB0YWdfaW5kZXg7CisJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKKwlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworfQorCisvKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYSBub24taW5kZXhlZCBjb21tYW5kICovCitzdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX25vbmluZGV4ZWRfY21kKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdTMyIHJhd190YWcpCit7CisJdTMyIHRhZzsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwl0YWcgPSBocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHMocmF3X3RhZyk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYywgdG1wLCAmaC0+Y21wUSwgbGlzdCkgeworCQlpZiAoKGMtPmJ1c2FkZHIgJiAweEZGRkZGRkUwKSA9PSAodGFnICYgMHhGRkZGRkZFMCkpIHsKKwkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7CisJCQlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworCQl9CisJfQorCWJhZF90YWcoaCwgaC0+bnJfY21kcyArIDEsIHJhd190YWcpOworCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjdGxyX2luZm8gKmggPSBkZXZfaWQ7Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MzIgcmF3X3RhZywgdGFnLCB0YWdfaW5kZXg7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwl1MzIgcmF3X3RhZzsKIAogCWlmIChpbnRlcnJ1cHRfbm90X2Zvcl91cyhoKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKGludGVycnVwdF9wZW5kaW5nKGgpKSB7Ci0JCXdoaWxlICgocmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCkpICE9IEZJRk9fRU1QVFkpIHsKLQkJCWlmIChsaWtlbHkoSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgocmF3X3RhZykpKSB7Ci0JCQkJdGFnX2luZGV4ID0gSFBTQV9UQUdfVE9fSU5ERVgocmF3X3RhZyk7Ci0JCQkJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKLQkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJCWMgPSBoLT5jbWRfcG9vbCArIHRhZ19pbmRleDsKLQkJCQlmaW5pc2hfY21kKGMsIHJhd190YWcpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJdGFnID0gSFBTQV9UQUdfRElTQ0FSRF9FUlJPUl9CSVRTKHJhd190YWcpOwotCQkJYyA9IE5VTEw7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7Ci0JCQkJaWYgKGMtPmJ1c2FkZHIgPT0gdGFnKSB7Ci0JCQkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQorCXJhd190YWcgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpOworCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpIHsKKwkJaWYgKGhwc2FfdGFnX2NvbnRhaW5zX2luZGV4KHJhd190YWcpKQorCQkJcmF3X3RhZyA9IHByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CisJCWVsc2UKKwkJCXJhd190YWcgPSBwcm9jZXNzX25vbmluZGV4ZWRfY21kKGgsIHJhd190YWcpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJlLiAqLworLyogU2VuZCBhIG1lc3NhZ2UgQ0RCIHRvIHRoZSBmaXJtd2FydC4gKi8KIHN0YXRpYyBfX2RldmluaXQgaW50IGhwc2FfbWVzc2FnZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgY2hhciBvcGNvZGUsCiAJCQkJCQl1bnNpZ25lZCBjaGFyIHR5cGUpCiB7CkBAIC0yODQxLDcgKzMwMjcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQ7IGkrKykgewogCQl0YWcgPSByZWFkbCh2YWRkciArIFNBNV9SRVBMWV9QT1JUX09GRlNFVCk7Ci0JCWlmIChIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSA9PSBwYWRkcjMyKQorCQlpZiAoaHBzYV90YWdfZGlzY2FyZF9lcnJvcl9iaXRzKHRhZykgPT0gcGFkZHIzMikKIAkJCWJyZWFrOwogCQltc2xlZXAoSFBTQV9NU0dfU0VORF9SRVRSWV9JTlRFUlZBTF9NU0VDUyk7CiAJfQpAQCAtMzA2Myw3ICszMjQ5LDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaHBzYV9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgX191MzIgYm9hcmRfaWQpCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgYm9hcmRfaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpbnQgZXJyOwpAQCAtMzEwNywyMiArMzI5MywyMiBAQAogZGVmYXVsdF9pbnRfbW9kZToKICNlbmRpZgkJCQkvKiBDT05GSUdfUENJX01TSSAqLwogCS8qIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgbW9kZSAqLwotCWgtPmludHJbU0lNUExFX01PREVfSU5UXSA9IHBkZXYtPmlycTsKLQlyZXR1cm47CisJaC0+aW50cltQRVJGX01PREVfSU5UXSA9IHBkZXYtPmlycTsKIH0KIAogc3RhdGljIGludCBocHNhX3BjaV9pbml0KHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXVzaG9ydCBzdWJzeXN0ZW1fdmVuZG9yX2lkLCBzdWJzeXN0ZW1fZGV2aWNlX2lkLCBjb21tYW5kOwotCV9fdTMyIGJvYXJkX2lkLCBzY3JhdGNocGFkID0gMDsKLQlfX3U2NCBjZmdfb2Zmc2V0OwotCV9fdTMyIGNmZ19iYXNlX2FkZHI7Ci0JX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKKwl1MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOworCXU2NCBjZmdfb2Zmc2V0OworCXUzMiBjZmdfYmFzZV9hZGRyOworCXU2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCXUzMiB0cmFuc19vZmZzZXQ7CiAJaW50IGksIHByb2RfaW5kZXgsIGVycjsKIAogCXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwogCXN1YnN5c3RlbV9kZXZpY2VfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCWJvYXJkX2lkID0gKCgoX191MzIpIChzdWJzeXN0ZW1fZGV2aWNlX2lkIDw8IDE2KSAmIDB4ZmZmZjAwMDApIHwKKwlib2FyZF9pZCA9ICgoKHUzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAogCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykKQEAgLTMxOTksNyArMzM4NSw3IEBACiAKIAkvKiBnZXQgdGhlIGFkZHJlc3MgaW5kZXggbnVtYmVyICovCiAJY2ZnX2Jhc2VfYWRkciA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0NUQ0ZHX09GRlNFVCk7Ci0JY2ZnX2Jhc2VfYWRkciAmPSAoX191MzIpIDB4MDAwMGZmZmY7CisJY2ZnX2Jhc2VfYWRkciAmPSAodTMyKSAweDAwMDBmZmZmOwogCWNmZ19iYXNlX2FkZHJfaW5kZXggPSBmaW5kX1BDSV9CQVJfaW5kZXgocGRldiwgY2ZnX2Jhc2VfYWRkcik7CiAJaWYgKGNmZ19iYXNlX2FkZHJfaW5kZXggPT0gLTEpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIGNmZ19iYXNlX2FkZHJfaW5kZXhcbiIpOwpAQCAtMzIxMSwxMSArMzM5NywxNCBAQAogCWgtPmNmZ3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKIAkJCSAgICAgICBjZmdfYmFzZV9hZGRyX2luZGV4KSArIGNmZ19vZmZzZXQsCiAJCQkJc2l6ZW9mKGgtPmNmZ3RhYmxlKSk7CisJLyogRmluZCBwZXJmb3JtYW50IG1vZGUgdGFibGUuICovCisJdHJhbnNfb2Zmc2V0ID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNNZXRob2RPZmZzZXQpKTsKKwloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKKwkJCQljZmdfYmFzZV9hZGRyX2luZGV4KStjZmdfb2Zmc2V0K3RyYW5zX29mZnNldCwKKwkJCQlzaXplb2YoKmgtPnRyYW5zdGFibGUpKTsKKwogCWgtPmJvYXJkX2lkID0gYm9hcmRfaWQ7Ci0KLQkvKiBRdWVyeSBjb250cm9sbGVyIGZvciBtYXggc3VwcG9ydGVkIGNvbW1hbmRzOiAqLwotCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPkNtZHNPdXRNYXgpKTsKLQorCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHMpKTsKIAloLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CiAJaC0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOwogCS8qIEFsbG93IHJvb20gZm9yIHNvbWUgaW9jdGxzICovCkBAIC0zMjMyLDcgKzM0MjEsNyBAQAogI2lmZGVmIENPTkZJR19YODYKIAl7CiAJCS8qIE5lZWQgdG8gZW5hYmxlIHByZWZldGNoIGluIHRoZSBTQ1NJIGNvcmUgZm9yIDY0MDAgaW4geDg2ICovCi0JCV9fdTMyIHByZWZldGNoOworCQl1MzIgcHJlZmV0Y2g7CiAJCXByZWZldGNoID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOwogCQlwcmVmZXRjaCB8PSAweDEwMDsKIAkJd3JpdGVsKHByZWZldGNoLCAmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CkBAIC0zMjQ0LDcgKzM0MzMsNyBAQAogCSAqIHBoeXNpY2FsIG1lbW9yeS4KIAkgKi8KIAlpZiAoYm9hcmRfaWQgPT0gMHgzMjI1MTAzQykgewotCQlfX3UzMiBkbWFfcHJlZmV0Y2g7CisJCXUzMiBkbWFfcHJlZmV0Y2g7CiAJCWRtYV9wcmVmZXRjaCA9IHJlYWRsKGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKIAkJZG1hX3ByZWZldGNoIHw9IDB4ODAwMDsKIAkJd3JpdGVsKGRtYV9wcmVmZXRjaCwgaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOwpAQCAtMzI4NiwxMCArMzQ3NSwyNiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2hiYV9pbnF1aXJ5KHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaW50IHJjOworCisjZGVmaW5lIEhCQV9JTlFVSVJZX0JZVEVfQ09VTlQgNjQKKwloLT5oYmFfaW5xdWlyeV9kYXRhID0ga21hbGxvYyhIQkFfSU5RVUlSWV9CWVRFX0NPVU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgtPmhiYV9pbnF1aXJ5X2RhdGEpCisJCXJldHVybjsKKwlyYyA9IGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIFJBSURfQ1RMUl9MVU5JRCwgMCwKKwkJaC0+aGJhX2lucXVpcnlfZGF0YSwgSEJBX0lOUVVJUllfQllURV9DT1VOVCk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoaC0+aGJhX2lucXVpcnlfZGF0YSk7CisJCWgtPmhiYV9pbnF1aXJ5X2RhdGEgPSBOVUxMOworCX0KK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJaW50IGRhYzsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCkBAIC0zMzE0LDE3ICszNTE5LDIzIEBACiAJCX0KIAl9CiAKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCkgJSA4KTsKKwkvKiBDb21tYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMzItYnl0ZSBib3VuZGFyeSBiZWNhdXNlCisJICogdGhlIDUgbG93ZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgdXNlZCBieSB0aGUgaGFyZHdhcmUuIGFuZCBieQorCSAqIHRoZSBkcml2ZXIuICBTZWUgY29tbWVudHMgaW4gaHBzYS5oIGZvciBtb3JlIGluZm8uCisJICovCisjZGVmaW5lIENPTU1BTkRMSVNUX0FMSUdOTUVOVCAzMgorCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCk7CiAJaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAxOwogCUlOSVRfSExJU1RfSEVBRCgmaC0+Y21wUSk7CiAJSU5JVF9ITElTVF9IRUFEKCZoLT5yZXFRKTsKIAltdXRleF9pbml0KCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOwogCWluaXRfY29tcGxldGlvbigmaC0+c2Nhbl93YWl0KTsKLQlpZiAoaHBzYV9wY2lfaW5pdChoLCBwZGV2KSAhPSAwKQorCXJjID0gaHBzYV9wY2lfaW5pdChoLCBwZGV2KTsKKwlpZiAocmMgIT0gMCkKIAkJZ290byBjbGVhbjE7CiAKIAlzcHJpbnRmKGgtPmRldm5hbWUsICJocHNhJWQiLCBudW1iZXJfb2ZfY29udHJvbGxlcnMpOwpAQCAtMzMzMywyNyArMzU0NCwzMiBAQAogCWgtPnBkZXYgPSBwZGV2OwogCiAJLyogY29uZmlndXJlIFBDSSBETUEgc3R1ZmYgKi8KLQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCisJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCWlmIChyYyA9PSAwKSB7CiAJCWRhYyA9IDE7Ci0JZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpCi0JCWRhYyA9IDA7Ci0JZWxzZSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOwotCQlnb3RvIGNsZWFuMTsKKwl9IGVsc2UgeworCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChyYyA9PSAwKSB7CisJCQlkYWMgPSAwOworCQl9IGVsc2UgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIGNsZWFuMTsKKwkJfQogCX0KIAogCS8qIG1ha2Ugc3VyZSB0aGUgYm9hcmQgaW50ZXJydXB0cyBhcmUgb2ZmICovCiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7Ci0JaWYgKHJlcXVlc3RfaXJxKGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgZG9faHBzYV9pbnRyLAotCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBoLT5kZXZuYW1lLCBoKSkgeworCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgZG9faHBzYV9pbnRyLAorCQkJSVJRRl9ESVNBQkxFRCwgaC0+ZGV2bmFtZSwgaCk7CisJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgaXJxICVkIGZvciAlc1xuIiwKLQkJICAgICAgIGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgaC0+ZGV2bmFtZSk7CisJCSAgICAgICBoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBoLT5kZXZuYW1lKTsKIAkJZ290byBjbGVhbjI7CiAJfQogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgUENJICVzIElSUSAlZCVzIHVzaW5nIERBQ1xuIiwKLQkgICAgICAgaC0+ZGV2bmFtZSwgcGRldi0+ZGV2aWNlLCBwY2lfbmFtZShwZGV2KSwKLQkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkYWMgPyAiIiA6ICIgbm90Iik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgSVJRICVkJXMgdXNpbmcgREFDXG4iLAorCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsCisJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKIAogCWgtPmNtZF9wb29sX2JpdHMgPQogCSAgICBrbWFsbG9jKCgoaC0+bnJfY21kcyArIEJJVFNfUEVSX0xPTkcgLQpAQCAtMzM2OCw5ICszNTg0LDEzIEBACiAJICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQogCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkiKTsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGNsZWFuNDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZoLT5zY2FuX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7CisJaC0+c2Nhbl9maW5pc2hlZCA9IDE7IC8qIG5vIHNjYW4gY3VycmVudGx5IGluIHByb2dyZXNzICovCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaCk7CiAJbWVtc2V0KGgtPmNtZF9wb29sX2JpdHMsIDAsCkBAIC0zMzgyLDYgKzM2MDIsOCBAQAogCS8qIFR1cm4gdGhlIGludGVycnVwdHMgb24gc28gd2UgY2FuIHNlcnZpY2UgcmVxdWVzdHMgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT04pOwogCisJaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShoKTsKKwlocHNhX2hiYV9pbnF1aXJ5KGgpOwogCWhwc2FfcmVnaXN0ZXJfc2NzaShoKTsJLyogaG9vayBvdXJzZWx2ZXMgaW50byBTQ1NJIHN1YnN5c3RlbSAqLwogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAlyZXR1cm4gMTsKQEAgLTMzOTcsMTIgKzM2MTksMTIgQEAKIAkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAogCQkJICAgIGgtPmVycmluZm9fcG9vbCwKIAkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7Ci0JZnJlZV9pcnEoaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoKTsKKwlmcmVlX2lycShoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBoKTsKIGNsZWFuMjoKIGNsZWFuMToKIAloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CiAJa2ZyZWUoaCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgaHBzYV9mbHVzaF9jYWNoZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQpAQCAtMzQ0MSw3ICszNjYzLDcgQEAKIAkgKi8KIAlocHNhX2ZsdXNoX2NhY2hlKGgpOwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOwotCWZyZWVfaXJxKGgtPmludHJbMl0sIGgpOworCWZyZWVfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgpOwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJaWYgKGgtPm1zaXhfdmVjdG9yKQogCQlwY2lfZGlzYWJsZV9tc2l4KGgtPnBkZXYpOwpAQCAtMzQ3MCw3ICszNjkyLDExIEBACiAJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LAogCQloLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAogCQloLT5lcnJpbmZvX3Bvb2wsIGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIGgtPnJlcGx5X3Bvb2xfc2l6ZSwKKwkJaC0+cmVwbHlfcG9vbCwgaC0+cmVwbHlfcG9vbF9kaGFuZGxlKTsKIAlrZnJlZShoLT5jbWRfcG9vbF9iaXRzKTsKKwlrZnJlZShoLT5ibG9ja0ZldGNoVGFibGUpOworCWtmcmVlKGgtPmhiYV9pbnF1aXJ5X2RhdGEpOwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCkBAIC0zNTAyLDYgKzM3MjgsMTI5IEBACiAJLnJlc3VtZSA9IGhwc2FfcmVzdW1lLAogfTsKIAorLyogRmlsbCBpbiBidWNrZXRfbWFwW10sIGdpdmVuIG5zZ3MgKHRoZSBtYXggbnVtYmVyIG9mCisgKiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyBzdXBwb3J0ZWQpIGFuZCBidWNrZXRbXSwKKyAqIHdoaWNoIGlzIGFuIGFycmF5IG9mIDggaW50ZWdlcnMuICBUaGUgYnVja2V0W10gYXJyYXkKKyAqIGNvbnRhaW5zIDggZGlmZmVyZW50IERNQSB0cmFuc2ZlciBzaXplcyAoaW4gMTYKKyAqIGJ5dGUgaW5jcmVtZW50cykgd2hpY2ggdGhlIGNvbnRyb2xsZXIgdXNlcyB0byBmZXRjaAorICogY29tbWFuZHMuICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIGJ1Y2tldF9tYXBbXSwgd2hpY2gKKyAqIG1hcHMgYSBnaXZlbiBudW1iZXIgb2Ygc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgdG8gb25lIG9mCisgKiB0aGUgOCBETUEgdHJhbnNmZXIgc2l6ZXMuICBUaGUgcG9pbnQgb2YgaXQgaXMgdG8gYWxsb3cgdGhlCisgKiBjb250cm9sbGVyIHRvIG9ubHkgZG8gYXMgbXVjaCBETUEgYXMgbmVlZGVkIHRvIGZldGNoIHRoZQorICogY29tbWFuZCwgd2l0aCB0aGUgRE1BIHRyYW5zZmVyIHNpemUgZW5jb2RlZCBpbiB0aGUgbG93ZXIKKyAqIGJpdHMgb2YgdGhlIGNvbW1hbmQgYWRkcmVzcy4KKyAqLworc3RhdGljIHZvaWQgIGNhbGNfYnVja2V0X21hcChpbnQgYnVja2V0W10sIGludCBudW1fYnVja2V0cywKKwlpbnQgbnNncywgaW50ICpidWNrZXRfbWFwKQoreworCWludCBpLCBqLCBiLCBzaXplOworCisJLyogZXZlbiBhIGNvbW1hbmQgd2l0aCAwIFNHcyByZXF1aXJlcyA0IGJsb2NrcyAqLworI2RlZmluZSBNSU5JTVVNX1RSQU5TRkVSX0JMT0NLUyA0CisjZGVmaW5lIE5VTV9CVUNLRVRTIDgKKwkvKiBOb3RlLCBidWNrZXRfbWFwIG11c3QgaGF2ZSBuc2dzKzEgZW50cmllcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG5zZ3M7IGkrKykgeworCQkvKiBDb21wdXRlIHNpemUgb2YgYSBjb21tYW5kIHdpdGggaSBTRyBlbnRyaWVzICovCisJCXNpemUgPSBpICsgTUlOSU1VTV9UUkFOU0ZFUl9CTE9DS1M7CisJCWIgPSBudW1fYnVja2V0czsgLyogQXNzdW1lIHRoZSBiaWdnZXN0IGJ1Y2tldCAqLworCQkvKiBGaW5kIHRoZSBidWNrZXQgdGhhdCBpcyBqdXN0IGJpZyBlbm91Z2ggKi8KKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKGJ1Y2tldFtqXSA+PSBzaXplKSB7CisJCQkJYiA9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogZm9yIGEgY29tbWFuZCB3aXRoIGkgU0cgZW50cmllcywgdXNlIGJ1Y2tldCBiLiAqLworCQlidWNrZXRfbWFwW2ldID0gYjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfcHV0X2N0bHJfaW50b19wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1MzIgdHJhbnNfc3VwcG9ydDsKKwl1NjQgdHJhbnNfb2Zmc2V0OworCS8qICA1ID0gMSBzL2cgZW50cnkgb3IgNGsKKwkgKiAgNiA9IDIgcy9nIGVudHJ5IG9yIDhrCisJICogIDggPSA0IHMvZyBlbnRyeSBvciAxNmsKKwkgKiAxMCA9IDYgcy9nIGVudHJ5IG9yIDI0aworCSAqLworCWludCBiZnRbOF0gPSB7NSwgNiwgOCwgMTAsIDEyLCAyMCwgMjgsIDM1fTsgLyogZm9yIHNjYXR0ZXIvZ2F0aGVycyAqLworCWludCBpID0gMDsKKwlpbnQgbCA9IDA7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZTsKKworCXRyYW5zX3N1cHBvcnQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRTdXBwb3J0KSk7CisJaWYgKCEodHJhbnNfc3VwcG9ydCAmIFBFUkZPUk1BTlRfTU9ERSkpCisJCXJldHVybjsKKworCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHMpKTsKKwloLT5tYXhfc2dfZW50cmllcyA9IDMyOworCS8qIFBlcmZvcm1hbnQgbW9kZSByaW5nIGJ1ZmZlciBhbmQgc3VwcG9ydGluZyBkYXRhIHN0cnVjdHVyZXMgKi8KKwloLT5yZXBseV9wb29sX3NpemUgPSBoLT5tYXhfY29tbWFuZHMgKiBzaXplb2YodTY0KTsKKwloLT5yZXBseV9wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+cmVwbHlfcG9vbF9zaXplLAorCQkJCSYoaC0+cmVwbHlfcG9vbF9kaGFuZGxlKSk7CisKKwkvKiBOZWVkIGEgYmxvY2sgZmV0Y2ggdGFibGUgZm9yIHBlcmZvcm1hbnQgbW9kZSAqLworCWgtPmJsb2NrRmV0Y2hUYWJsZSA9IGttYWxsb2MoKChoLT5tYXhfc2dfZW50cmllcysxKSAqCisJCQkJc2l6ZW9mKHUzMikpLCBHRlBfS0VSTkVMKTsKKworCWlmICgoaC0+cmVwbHlfcG9vbCA9PSBOVUxMKQorCQl8fCAoaC0+YmxvY2tGZXRjaFRhYmxlID09IE5VTEwpKQorCQlnb3RvIGNsZWFuX3VwOworCisJaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kID0gMTsgLyogc3BlYzogaW5pdCB0byAxICovCisKKwkvKiBDb250cm9sbGVyIHNwZWM6IHplcm8gb3V0IHRoaXMgYnVmZmVyLiAqLworCW1lbXNldChoLT5yZXBseV9wb29sLCAwLCBoLT5yZXBseV9wb29sX3NpemUpOworCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisKKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOworCWJmdFs3XSA9IGgtPm1heF9zZ19lbnRyaWVzICsgNDsKKwljYWxjX2J1Y2tldF9tYXAoYmZ0LCBBUlJBWV9TSVpFKGJmdCksIDMyLCBoLT5ibG9ja0ZldGNoVGFibGUpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXdyaXRlbChiZnRbaV0sICZoLT50cmFuc3RhYmxlLT5CbG9ja0ZldGNoW2ldKTsKKworCS8qIHNpemUgb2YgY29udHJvbGxlciByaW5nIGJ1ZmZlciAqLworCXdyaXRlbChoLT5tYXhfY29tbWFuZHMsICZoLT50cmFuc3RhYmxlLT5SZXBRU2l6ZSk7CisJd3JpdGVsKDEsICZoLT50cmFuc3RhYmxlLT5SZXBRQ291bnQpOworCXdyaXRlbCgwLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUN0ckFkZHJMb3czMik7CisJd3JpdGVsKDAsICZoLT50cmFuc3RhYmxlLT5SZXBRQ3RyQWRkckhpZ2gzMik7CisJd3JpdGVsKGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSwgJmgtPnRyYW5zdGFibGUtPlJlcFFBZGRyMExvdzMyKTsKKwl3cml0ZWwoMCwgJmgtPnRyYW5zdGFibGUtPlJlcFFBZGRyMEhpZ2gzMik7CisJd3JpdGVsKENGR1RCTF9UcmFuc19QZXJmb3JtYW50LAorCQkmKGgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuVHJhbnNwb3J0UmVxdWVzdCkpOworCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CisJLyogdW5kZXIgY2VydGFpbiB2ZXJ5IHJhcmUgY29uZGl0aW9ucywgdGhpcyBjYW4gdGFrZSBhd2hpbGUuCisJICogKGUuZy46IGhvdCByZXBsYWNlIGEgZmFpbGVkIDE0NEdCIGRyaXZlIGluIGEgUkFJRCA1IHNldCByaWdodAorCSAqIGFzIHdlIGVudGVyIHRoaXMgY29kZS4pICovCisJZm9yIChsID0gMDsgbCA8IE1BWF9DT05GSUdfV0FJVDsgbCsrKSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOworCQlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9DaGFuZ2VSZXEpKQorCQkJYnJlYWs7CisJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CisJfQorCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSk7CisJaWYgKCEocmVnaXN0ZXJfdmFsdWUgJiBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYm9hcmQgaW50byIKKwkJCQkJIiBwZXJmb3JtYW50IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hhbmdlIHRoZSBhY2Nlc3MgbWV0aG9kcyB0byB0aGUgcGVyZm9ybWFudCBhY2Nlc3MgbWV0aG9kcyAqLworCWgtPmFjY2VzcyA9IFNBNV9wZXJmb3JtYW50X2FjY2VzczsKKwloLT50cmFuc01ldGhvZCA9IENGR1RCTF9UcmFuc19QZXJmb3JtYW50OworCisJcmV0dXJuOworCitjbGVhbl91cDoKKwlpZiAoaC0+cmVwbHlfcG9vbCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCQloLT5yZXBseV9wb29sLCBoLT5yZXBseV9wb29sX2RoYW5kbGUpOworCWtmcmVlKGgtPmJsb2NrRmV0Y2hUYWJsZSk7Cit9CisKIC8qCiAgKiAgVGhpcyBpcyBpdC4gIFJlZ2lzdGVyIHRoZSBQQ0kgZHJpdmVyIGluZm9ybWF0aW9uIGZvciB0aGUgY2FyZHMgd2UgY29udHJvbAogICogIHRoZSBPUyB3aWxsIGNhbGwgb3VyIHJlZ2lzdGVyZWQgcm91dGluZXMgd2hlbiBpdCBmaW5kcyBvbmUgb2Ygb3VyIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuaCBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKaW5kZXggNmJkMTk0OS4uYTA1MDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5oCkBAIC0zMyw3ICszMyw3IEBACiAJCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiAJdm9pZCAoKnNldF9pbnRyX21hc2spKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgdmFsKTsKIAl1bnNpZ25lZCBsb25nICgqZmlmb19mdWxsKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKLQl1bnNpZ25lZCBsb25nICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKKwlib29sICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAl1bnNpZ25lZCBsb25nICgqY29tbWFuZF9jb21wbGV0ZWQpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogfTsKIApAQCAtNTUsMTkgKzU1LDIwIEBACiAJY2hhciAgICAqcHJvZHVjdF9uYW1lOwogCWNoYXIJZmlybV92ZXJbNF07IC8qIEZpcm13YXJlIHZlcnNpb24gKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlfX3UzMglib2FyZF9pZDsKKwl1MzIJYm9hcmRfaWQ7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCWludCAJbnJfY21kczsgLyogTnVtYmVyIG9mIGNvbW1hbmRzIGFsbG93ZWQgb24gdGhpcyBjb250cm9sbGVyICovCiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOworCWludCAgICAgbWF4X3NnX2VudHJpZXM7CiAJaW50CWludGVycnVwdHNfZW5hYmxlZDsKIAlpbnQJbWFqb3I7CiAJaW50IAltYXhfY29tbWFuZHM7CiAJaW50CWNvbW1hbmRzX291dHN0YW5kaW5nOwogCWludCAJbWF4X291dHN0YW5kaW5nOyAvKiBEZWJ1ZyAqLwogCWludAl1c2FnZV9jb3VudDsgIC8qIG51bWJlciBvZiBvcGVucyBhbGwgYWxsIG1pbm9yIGRldmljZXMgKi8KLSMJZGVmaW5lIERPT1JCRUxMX0lOVAkwCi0jCWRlZmluZSBQRVJGX01PREVfSU5UCTEKKyMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMAorIwlkZWZpbmUgRE9PUkJFTExfSU5UCTEKICMJZGVmaW5lIFNJTVBMRV9NT0RFX0lOVAkyCiAjCWRlZmluZSBNRU1RX01PREVfSU5UCTMKIAl1bnNpZ25lZCBpbnQgaW50cls0XTsKQEAgLTkzLDYgKzk0LDkgQEAKIAlpbnQJCQlucl9mcmVlczsKIAlpbnQJCQlidXN5X2luaXRpYWxpemluZzsKIAlpbnQJCQlidXN5X3NjYW5uaW5nOworCWludAkJCXNjYW5fZmluaXNoZWQ7CisJc3BpbmxvY2tfdAkJc2Nhbl9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90CXNjYW5fd2FpdF9xdWV1ZTsKIAlzdHJ1Y3QgbXV0ZXgJCWJ1c3lfc2h1dHRpbmdfZG93bjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNjYW5fbGlzdDsKIAlzdHJ1Y3QgY29tcGxldGlvbglzY2FuX3dhaXQ7CkBAIC0xMDIsNiArMTA2LDI0IEBACiAJaW50IG5kZXZpY2VzOyAvKiBudW1iZXIgb2YgdXNlZCBlbGVtZW50cyBpbiAuZGV2W10gYXJyYXkuICovCiAjZGVmaW5lIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBIDI1NgogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldltIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQV07CisJLyoKKwkgKiBQZXJmb3JtYW50IG1vZGUgdGFibGVzLgorCSAqLworCXUzMiB0cmFuc19zdXBwb3J0OworCXUzMiB0cmFuc19vZmZzZXQ7CisJc3RydWN0IFRyYW5zVGFibGVfc3RydWN0ICp0cmFuc3RhYmxlOworCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CisKKwkvKgorCSAqIFBlcmZvcm1hbnQgbW9kZSBjb21wbGV0aW9uIGJ1ZmZlcgorCSAqLworCXU2NCAqcmVwbHlfcG9vbDsKKwlkbWFfYWRkcl90IHJlcGx5X3Bvb2xfZGhhbmRsZTsKKwl1NjQgKnJlcGx5X3Bvb2xfaGVhZDsKKwlzaXplX3QgcmVwbHlfcG9vbF9zaXplOworCXVuc2lnbmVkIGNoYXIgcmVwbHlfcG9vbF93cmFwYXJvdW5kOworCXUzMiAqYmxvY2tGZXRjaFRhYmxlOworCXVuc2lnbmVkIGNoYXIgKmhiYV9pbnF1aXJ5X2RhdGE7CiB9OwogI2RlZmluZSBIUFNBX0FCT1JUX01TRyAwCiAjZGVmaW5lIEhQU0FfREVWSUNFX1JFU0VUX01TRyAxCkBAIC0xNjQsOSArMTg2LDE2IEBACiAjZGVmaW5lIEhQU0FfRklSTVdBUkVfUkVBRFkJMHhmZmZmMDAwMCAvKiB2YWx1ZSBpbiBzY3JhdGNocGFkIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgSFBTQV9FUlJPUl9CSVQJCTB4MDIKLSNkZWZpbmUgSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgodGFnKSAoKHRhZykgJiAweDA0KQotI2RlZmluZSBIUFNBX1RBR19UT19JTkRFWCh0YWcpICgodGFnKSA+PiAzKQotI2RlZmluZSBIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSAoKHRhZykgJiB+MykKKworLyogUGVyZm9ybWFudCBtb2RlIGZsYWdzICovCisjZGVmaW5lIFNBNV9QRVJGX0lOVFJfUEVORElORyAgIDB4MDQKKyNkZWZpbmUgU0E1X1BFUkZfSU5UUl9PRkYgICAgICAgMHgwNQorI2RlZmluZSBTQTVfT1VUREJfU1RBVFVTX1BFUkZfQklUICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSX1BFUkZfQklUICAgICAgICAweDAxCisjZGVmaW5lIFNBNV9PVVREQl9DTEVBUiAgICAgICAgIDB4QTAKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSX1BFUkZfQklUICAgICAgICAweDAxCisjZGVmaW5lIFNBNV9PVVREQl9TVEFUVVMgICAgICAgIDB4OUMKKwogCiAjZGVmaW5lIEhQU0FfSU5UUl9PTiAJMQogI2RlZmluZSBIUFNBX0lOVFJfT0ZGCTAKQEAgLTE3NiwxMCArMjA1LDggQEAKIHN0YXRpYyB2b2lkIFNBNV9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKLSNpZmRlZiBIUFNBX0RFQlVHCi0JIHByaW50ayhLRVJOX1dBUk5JTkcgImhwc2E6IFNlbmRpbmcgJXggLSBkb3duIHRvIGNvbnRyb2xsZXJcbiIsCi0JCWMtPmJ1c2FkZHIpOwotI2VuZGlmIC8qIEhQU0FfREVCVUcgKi8KKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJTZW5kaW5nICV4LCB0YWcgPSAleFxuIiwgYy0+YnVzYWRkciwKKwkJYy0+SGVhZGVyLlRhZy5sb3dlcik7CiAJd3JpdGVsKGMtPmJ1c2FkZHIsIGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOwogCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nKys7CiAJaWYgKGgtPmNvbW1hbmRzX291dHN0YW5kaW5nID4gaC0+bWF4X291dHN0YW5kaW5nKQpAQCAtMjAyLDYgKzIyOSw1MiBAQAogCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBTQTVfcGVyZm9ybWFudF9pbnRyX21hc2soc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKHZhbCkgeyAvKiB0dXJuIG9uIGludGVycnVwdHMgKi8KKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMTsKKwkJd3JpdGVsKDAsIGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0gZWxzZSB7CisJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDA7CisJCXdyaXRlbChTQTVfUEVSRl9JTlRSX09GRiwKKwkJCWgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisKKwkvKiBmbHVzaCB0aGUgY29udHJvbGxlciB3cml0ZSBvZiB0aGUgcmVwbHkgcXVldWUgYnkgcmVhZGluZworCSAqIG91dGJvdW5kIGRvb3JiZWxsIHN0YXR1cyByZWdpc3Rlci4KKwkgKi8KKwlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJLyogbXNpIGF1dG8gY2xlYXJzIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuICovCisJaWYgKCEoaC0+bXNpX3ZlY3RvciB8fCBoLT5tc2l4X3ZlY3RvcikpIHsKKwkJd3JpdGVsKFNBNV9PVVREQl9DTEVBUl9QRVJGX0JJVCwgaC0+dmFkZHIgKyBTQTVfT1VUREJfQ0xFQVIpOworCQkvKiBEbyBhIHJlYWQgaW4gb3JkZXIgdG8gZmx1c2ggdGhlIHdyaXRlIHRvIHRoZSBjb250cm9sbGVyCisJCSAqIChhcyBwZXIgc3BlYy4pCisJCSAqLworCQlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJfQorCisJaWYgKCgqKGgtPnJlcGx5X3Bvb2xfaGVhZCkgJiAxKSA9PSAoaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kKSkgeworCQlyZWdpc3Rlcl92YWx1ZSA9ICooaC0+cmVwbHlfcG9vbF9oZWFkKTsKKwkJKGgtPnJlcGx5X3Bvb2xfaGVhZCkrKzsKKwkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKKwl9IGVsc2UgeworCQlyZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisJfQorCS8qIENoZWNrIGZvciB3cmFwYXJvdW5kICovCisJaWYgKGgtPnJlcGx5X3Bvb2xfaGVhZCA9PSAoaC0+cmVwbHlfcG9vbCArIGgtPm1heF9jb21tYW5kcykpIHsKKwkJaC0+cmVwbHlfcG9vbF9oZWFkID0gaC0+cmVwbHlfcG9vbDsKKwkJaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kIF49IDE7CisJfQorCisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlOworfQorCiAvKgogICogIFJldHVybnMgdHJ1ZSBpZiBmaWZvIGlzIGZ1bGwuCiAgKgpAQCAtMjI4LDEwICszMDEsMTAgQEAKIAogI2lmZGVmIEhQU0FfREVCVUcKIAlpZiAocmVnaXN0ZXJfdmFsdWUgIT0gRklGT19FTVBUWSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogIFJlYWQgJWx4IGJhY2sgZnJvbSBib2FyZFxuIiwKKwkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiUmVhZCAlbHggYmFjayBmcm9tIGJvYXJkXG4iLAogCQkJcmVnaXN0ZXJfdmFsdWUpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogIEZJRk8gRW1wdHkgcmVhZFxuIik7CisJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImhwc2E6IEZJRk8gRW1wdHkgcmVhZFxuIik7CiAjZW5kaWYKIAogCXJldHVybiByZWdpc3Rlcl92YWx1ZTsKQEAgLTIzOSwxOCArMzEyLDI4IEBACiAvKgogICoJUmV0dXJucyB0cnVlIGlmIGFuIGludGVycnVwdCBpcyBwZW5kaW5nLi4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ludHJfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQorc3RhdGljIGJvb2wgU0E1X2ludHJfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJfdmFsdWUgID0KIAkJcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOwotI2lmZGVmIEhQU0FfREVCVUcKLQlwcmludGsoS0VSTl9JTkZPICJocHNhOiBpbnRyX3BlbmRpbmcgJWx4XG4iLCByZWdpc3Rlcl92YWx1ZSk7Ci0jZW5kaWYgIC8qIEhQU0FfREVCVUcgKi8KLQlpZiAocmVnaXN0ZXJfdmFsdWUgJiAgU0E1X0lOVFJfUEVORElORykKLQkJcmV0dXJuICAxOwotCXJldHVybiAwIDsKKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJpbnRyX3BlbmRpbmcgJWx4XG4iLCByZWdpc3Rlcl92YWx1ZSk7CisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlICYgU0E1X0lOVFJfUEVORElORzsKIH0KIAorc3RhdGljIGJvb2wgU0E1X3BlcmZvcm1hbnRfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0lOVFJfU1RBVFVTKTsKKworCWlmICghcmVnaXN0ZXJfdmFsdWUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIFJlYWQgb3V0Ym91bmQgZG9vcmJlbGwgdG8gZmx1c2ggKi8KKwlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlICYgU0E1X09VVERCX1NUQVRVU19QRVJGX0JJVDsKK30KIAogc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9hY2Nlc3MgPSB7CiAJU0E1X3N1Ym1pdF9jb21tYW5kLApAQCAtMjYwLDE0ICszNDMsMTkgQEAKIAlTQTVfY29tcGxldGVkLAogfTsKIAorc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9wZXJmb3JtYW50X2FjY2VzcyA9IHsKKwlTQTVfc3VibWl0X2NvbW1hbmQsCisJU0E1X3BlcmZvcm1hbnRfaW50cl9tYXNrLAorCVNBNV9maWZvX2Z1bGwsCisJU0E1X3BlcmZvcm1hbnRfaW50cl9wZW5kaW5nLAorCVNBNV9wZXJmb3JtYW50X2NvbXBsZXRlZCwKK307CisKIHN0cnVjdCBib2FyZF90eXBlIHsKLQlfX3UzMglib2FyZF9pZDsKKwl1MzIJYm9hcmRfaWQ7CiAJY2hhcgkqcHJvZHVjdF9uYW1lOwogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kICphY2Nlc3M7CiB9OwogCi0KLS8qIGVuZCBvZiBvbGQgaHBzYV9zY3NpLmggZmlsZSAqLwotCiAjZW5kaWYgLyogSFBTQV9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggMTJkNzEzOC4uM2UwYWJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTEwMSwxOSArMTAxLDIwIEBACiAjZGVmaW5lIENGR1RCTF9BY2NDbWRzICAgICAgICAgIDB4MDAwMDAwMDFsCiAKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1NpbXBsZSAgICAgMHgwMDAwMDAwMmwKKyNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQgMHgwMDAwMDAwNGwKIAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTIgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTMgICAweDAwMDAwMDAybAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTFHICAweDAwMDAwMTAwbAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTJHICAweDAwMDAwMjAwbAogc3RydWN0IHZhbHMzMiB7Ci0JX191MzIgICBsb3dlcjsKLQlfX3UzMiAgIHVwcGVyOworCXUzMiAgIGxvd2VyOworCXUzMiAgIHVwcGVyOwogfTsKIAogdW5pb24gdTY0Yml0IHsKIAlzdHJ1Y3QgdmFsczMyIHZhbDMyOwotCV9fdTY0IHZhbDsKKwl1NjQgdmFsOwogfTsKIAogLyogRklYTUUgdGhpcyBpcyBhIHBlciBjb250cm9sbGVyIHZhbHVlIChiYXJmISkgKi8KQEAgLTEyNiwzNCArMTI3LDM0IEBACiAKICNkZWZpbmUgSFBTQV9JTlFVSVJZIDB4MTIKIHN0cnVjdCBJbnF1aXJ5RGF0YSB7Ci0JX191OCBkYXRhX2J5dGVbMzZdOworCXU4IGRhdGFfYnl0ZVszNl07CiB9OwogCiAjZGVmaW5lIEhQU0FfUkVQT1JUX0xPRyAweGMyICAgIC8qIFJlcG9ydCBMb2dpY2FsIExVTnMgKi8KICNkZWZpbmUgSFBTQV9SRVBPUlRfUEhZUyAweGMzICAgLyogUmVwb3J0IFBoeXNpY2FsIExVTnMgKi8KIHN0cnVjdCBSZXBvcnRMVU5kYXRhIHsKLQlfX3U4IExVTkxpc3RMZW5ndGhbNF07Ci0JX191MzIgcmVzZXJ2ZWQ7Ci0JX191OCBMVU5bSFBTQV9NQVhfTFVOXVs4XTsKKwl1OCBMVU5MaXN0TGVuZ3RoWzRdOworCXUzMiByZXNlcnZlZDsKKwl1OCBMVU5bSFBTQV9NQVhfTFVOXVs4XTsKIH07CiAKIHN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgewotCV9fdTggTFVOTGlzdExlbmd0aFs0XTsKLQlfX3U4IGV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWc7Ci0JX191OCByZXNlcnZlZFszXTsKLQlfX3U4IExVTltIUFNBX01BWF9MVU5dWzI0XTsKKwl1OCBMVU5MaXN0TGVuZ3RoWzRdOworCXU4IGV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWc7CisJdTggcmVzZXJ2ZWRbM107CisJdTggTFVOW0hQU0FfTUFYX0xVTl1bMjRdOwogfTsKIAogc3RydWN0IFNlbnNlU3Vic3lzdGVtX2luZm8gewotCV9fdTggcmVzZXJ2ZWRbMzZdOwotCV9fdTggcG9ydG5hbWVbOF07Ci0JX191OCByZXNlcnZlZDFbMTEwOF07CisJdTggcmVzZXJ2ZWRbMzZdOworCXU4IHBvcnRuYW1lWzhdOworCXU4IHJlc2VydmVkMVsxMTA4XTsKIH07CiAKICNkZWZpbmUgSFBTQV9SRUFEX0NBUEFDSVRZIDB4MjUgLyogUmVhZCBDYXBhY2l0eSAqLwogc3RydWN0IFJlYWRDYXBkYXRhIHsKLQlfX3U4IHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCi0JX191OCBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLworCXU4IHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCisJdTggYmxvY2tfc2l6ZVs0XTsJLyogU2l6ZSBvZiBibG9ja3MgaW4gYnl0ZXMgKi8KIH07CiAKICNpZiAwCkBAIC0xNzQsMTEyICsxNzUsMTMxIEBACiAvKiBDb21tYW5kIExpc3QgU3RydWN0dXJlICovCiB1bmlvbiBTQ1NJM0FkZHIgewogCXN0cnVjdCB7Ci0JCV9fdTggRGV2OwotCQlfX3U4IEJ1czo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIwMCAqLworCQl1OCBEZXY7CisJCXU4IEJ1czo2OworCQl1OCBNb2RlOjI7ICAgICAgICAvKiBiMDAgKi8KIAl9IFBlcmlwRGV2OwogCXN0cnVjdCB7Ci0JCV9fdTggRGV2TFNCOwotCQlfX3U4IERldk1TQjo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIwMSAqLworCQl1OCBEZXZMU0I7CisJCXU4IERldk1TQjo2OworCQl1OCBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KIAl9IExvZ0RldjsKIAlzdHJ1Y3QgewotCQlfX3U4IERldjo1OwotCQlfX3U4IEJ1czozOwotCQlfX3U4IFRhcmc6NjsKLQkJX191OCBNb2RlOjI7ICAgICAgICAvKiBiMTAgKi8KKwkJdTggRGV2OjU7CisJCXU4IEJ1czozOworCQl1OCBUYXJnOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLwogCX0gTG9nVW5pdDsKIH07CiAKIHN0cnVjdCBQaHlzRGV2QWRkciB7Ci0JX191MzIgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0JX191MzIgICAgICAgICAgICAgQnVzOjY7Ci0JX191MzIgICAgICAgICAgICAgTW9kZToyOworCXUzMiAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKwl1MzIgICAgICAgICAgICAgQnVzOjY7CisJdTMyICAgICAgICAgICAgIE1vZGU6MjsKIAkvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLwogCXVuaW9uIFNDU0kzQWRkciAgVGFyZ2V0WzJdOwogfTsKIAogc3RydWN0IExvZ0RldkFkZHIgewotCV9fdTMyICAgICAgICAgICAgVm9sSWQ6MzA7Ci0JX191MzIgICAgICAgICAgICBNb2RlOjI7Ci0JX191OCAgICAgICAgICAgICByZXNlcnZlZFs0XTsKKwl1MzIgICAgICAgICAgICBWb2xJZDozMDsKKwl1MzIgICAgICAgICAgICBNb2RlOjI7CisJdTggICAgICAgICAgICAgcmVzZXJ2ZWRbNF07CiB9OwogCiB1bmlvbiBMVU5BZGRyIHsKLQlfX3U4ICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworCXU4ICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOwogCXVuaW9uIFNDU0kzQWRkciAgICBTQ1NJM0x1bls0XTsKIAlzdHJ1Y3QgUGh5c0RldkFkZHIgUGh5c0RldjsKIAlzdHJ1Y3QgTG9nRGV2QWRkciAgTG9nRGV2OwogfTsKIAogc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIHsKLQlfX3U4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOwotCV9fdTggICAgICAgICAgICAgIFNHTGlzdDsKLQlfX3UxNiAgICAgICAgICAgICBTR1RvdGFsOworCXU4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOworCXU4ICAgICAgICAgICAgICBTR0xpc3Q7CisJdTE2ICAgICAgICAgICAgIFNHVG90YWw7CiAJc3RydWN0IHZhbHMzMiAgICAgVGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKIHN0cnVjdCBSZXF1ZXN0QmxvY2sgewotCV9fdTggICBDREJMZW47CisJdTggICBDREJMZW47CiAJc3RydWN0IHsKLQkJX191OCBUeXBlOjM7Ci0JCV9fdTggQXR0cmlidXRlOjM7Ci0JCV9fdTggRGlyZWN0aW9uOjI7CisJCXU4IFR5cGU6MzsKKwkJdTggQXR0cmlidXRlOjM7CisJCXU4IERpcmVjdGlvbjoyOwogCX0gVHlwZTsKLQlfX3UxNiAgVGltZW91dDsKLQlfX3U4ICAgQ0RCWzE2XTsKKwl1MTYgIFRpbWVvdXQ7CisJdTggICBDREJbMTZdOwogfTsKIAogc3RydWN0IEVyckRlc2NyaXB0b3IgewogCXN0cnVjdCB2YWxzMzIgQWRkcjsKLQlfX3UzMiAgTGVuOworCXUzMiAgTGVuOwogfTsKIAogc3RydWN0IFNHRGVzY3JpcHRvciB7CiAJc3RydWN0IHZhbHMzMiBBZGRyOwotCV9fdTMyICBMZW47Ci0JX191MzIgIEV4dDsKKwl1MzIgIExlbjsKKwl1MzIgIEV4dDsKIH07CiAKIHVuaW9uIE1vcmVFcnJJbmZvIHsKIAlzdHJ1Y3QgewotCQlfX3U4ICBSZXNlcnZlZFszXTsKLQkJX191OCAgVHlwZTsKLQkJX191MzIgRXJyb3JJbmZvOworCQl1OCAgUmVzZXJ2ZWRbM107CisJCXU4ICBUeXBlOworCQl1MzIgRXJyb3JJbmZvOwogCX0gQ29tbW9uX0luZm87CiAJc3RydWN0IHsKLQkJX191OCAgUmVzZXJ2ZWRbMl07Ci0JCV9fdTggIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KLQkJX191OCAgb2ZmZW5zZV9udW07ICAvKiBieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UgKi8KLQkJX191MzIgb2ZmZW5zZV92YWx1ZTsKKwkJdTggIFJlc2VydmVkWzJdOworCQl1OCAgb2ZmZW5zZV9zaXplOyAvKiBzaXplIG9mIG9mZmVuZGluZyBlbnRyeSAqLworCQl1OCAgb2ZmZW5zZV9udW07ICAvKiBieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UgKi8KKwkJdTMyIG9mZmVuc2VfdmFsdWU7CiAJfSBJbnZhbGlkX0NtZDsKIH07CiBzdHJ1Y3QgRXJyb3JJbmZvIHsKLQlfX3U4ICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKLQlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0JX191MTYgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7Ci0JX191MzIgICAgICAgICAgICAgIFJlc2lkdWFsQ250OworCXU4ICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKKwl1OCAgICAgICAgICAgICAgIFNlbnNlTGVuOworCXUxNiAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKKwl1MzIgICAgICAgICAgICAgIFJlc2lkdWFsQ250OwogCXVuaW9uIE1vcmVFcnJJbmZvICBNb3JlRXJySW5mbzsKLQlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKKwl1OCAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107CiB9OwogLyogQ29tbWFuZCB0eXBlcyAqLwogI2RlZmluZSBDTURfSU9DVExfUEVORCAgMHgwMQogI2RlZmluZSBDTURfU0NTSQkweDAzCiAKLXN0cnVjdCBjdGxyX2luZm87IC8qIGRlZmluZWQgaW4gaHBzYS5oICovCi0vKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgOAotICogb2Qgb24gYWxsIGFyY2hpdGVjdHVyZXMsIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgdXNlcyAyCi0gKiBsb3dlciBiaXRzIG9mIHRoZSBhZGRyZXNzLCBhbmQgdGhlIGRyaXZlciB1c2VzIDEgbG93ZXIKLSAqIGJpdCAoMyBiaXRzIHRvdGFsLikKKy8qIFRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSAzMiBmb3IgbmV3CisgKiBpbmRleGluZyBtZXRob2QgYW5kIHBlcmZvcm1hbnQgbW9kZS4KICAqLworI2RlZmluZSBQQUQzMiAzMgorI2RlZmluZSBQQUQ2NERJRkYgMAorI2RlZmluZSBVU0VFWFRSQSAoKHNpemVvZih2b2lkICopIC0gNCkvNCkKKyNkZWZpbmUgUEFEU0laRSAoUEFEMzIgKyBQQUQ2NERJRkYgKiBVU0VFWFRSQSkKKworI2RlZmluZSBESVJFQ1RfTE9PS1VQX1NISUZUIDUKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9CSVQgMHgxMAorCisjZGVmaW5lIEhQU0FfRVJST1JfQklUICAgICAgICAgIDB4MDIKK3N0cnVjdCBjdGxyX2luZm87IC8qIGRlZmluZWQgaW4gaHBzYS5oICovCisvKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgMzIKKyAqIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGJlY2F1c2UgbG93IDUgYml0cyBvZiB0aGUgYWRkcmVzc2VzCisgKiBhcmUgdXNlZCBhcyBmb2xsb3dzOgorICoKKyAqIGJpdCAwOiB0byBkZXZpY2UsIHVzZWQgdG8gaW5kaWNhdGUgInBlcmZvcm1hbnQgbW9kZSIgY29tbWFuZAorICogICAgICAgIGZyb20gZGV2aWNlLCBpbmRpZGNhdGVzIGVycm9yIHN0YXR1cy4KKyAqIGJpdCAxLTM6IHRvIGRldmljZSwgaW5kaWNhdGVzIGJsb2NrIGZldGNoIHRhYmxlIGVudHJ5IGZvcgorICogICAgICAgICAgcmVkdWNpbmcgRE1BIGluIGZldGNoaW5nIGNvbW1hbmRzIGZyb20gaG9zdCBtZW1vcnkuCisgKiBiaXQgNDogdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRhZyBpcyAiZGlyZWN0IGxvb2t1cCIgKGluZGV4KSwKKyAqICAgICAgICBvciBhIGJ1cyBhZGRyZXNzLgorICovCisKIHN0cnVjdCBDb21tYW5kTGlzdCB7CiAJc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIEhlYWRlcjsKIAlzdHJ1Y3QgUmVxdWVzdEJsb2NrICAgICAgUmVxdWVzdDsKIAlzdHJ1Y3QgRXJyRGVzY3JpcHRvciAgICAgRXJyRGVzYzsKIAlzdHJ1Y3QgU0dEZXNjcmlwdG9yICAgICAgU0dbTUFYU0dFTlRSSUVTXTsKIAkvKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgKi8KLQlfX3UzMgkJCSAgIGJ1c2FkZHI7IC8qIHBoeXNpY2FsIGFkZHIgb2YgdGhpcyByZWNvcmQgKi8KKwl1MzIJCQkgICBidXNhZGRyOyAvKiBwaHlzaWNhbCBhZGRyIG9mIHRoaXMgcmVjb3JkICovCiAJc3RydWN0IEVycm9ySW5mbyAqZXJyX2luZm87IC8qIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW0gKi8KIAlzdHJ1Y3QgY3Rscl9pbmZvCSAgICpoOwogCWludAkJCSAgIGNtZF90eXBlOwpAQCAtMjkxLDM1ICszMTEsNjMgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKIAlpbnQJIHJldHJ5X2NvdW50OwogCXZvaWQgICAqc2NzaV9jbWQ7CisKKy8qIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzLCB0byBnZXQgdGhpcyB0byBiZSAzMi1ieXRlLWFsaWduZWQKKyAqIGl0IHNvIGhhcHBlbnMgd2UgbmVlZCBubyBwYWRkaW5nLCBvbiAzMiBiaXQgc3lzdGVtcywKKyAqIHdlIG5lZWQgOCBieXRlcyBvZiBwYWRkaW5nLiAgIFRoaXMgZG9lcyB0aGF0LgorICovCisjZGVmaW5lIENPTU1BTkRMSVNUX1BBRCAoKDggLSBzaXplb2YobG9uZykpLzQgKiA4KQorCXU4IHBhZFtDT01NQU5ETElTVF9QQURdOworCiB9OwogCiAvKiBDb25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZSAqLwogc3RydWN0IEhvc3RXcml0ZSB7Ci0JX191MzIgVHJhbnNwb3J0UmVxdWVzdDsKLQlfX3UzMiBSZXNlcnZlZDsKLQlfX3UzMiBDb2FsSW50RGVsYXk7Ci0JX191MzIgQ29hbEludENvdW50OworCXUzMiBUcmFuc3BvcnRSZXF1ZXN0OworCXUzMiBSZXNlcnZlZDsKKwl1MzIgQ29hbEludERlbGF5OworCXUzMiBDb2FsSW50Q291bnQ7CiB9OwogCisjZGVmaW5lIFNJTVBMRV9NT0RFICAgICAweDAyCisjZGVmaW5lIFBFUkZPUk1BTlRfTU9ERSAweDA0CisjZGVmaW5lIE1FTVFfTU9ERSAgICAgICAweDA4CisKIHN0cnVjdCBDZmdUYWJsZSB7Ci0JX191OCAgICAgICAgICAgICBTaWduYXR1cmVbNF07Ci0JX191MzIgICAgICAgICAgICBTcGVjVmFsZW5jZTsKLQlfX3UzMiAgICAgICAgICAgIFRyYW5zcG9ydFN1cHBvcnQ7Ci0JX191MzIgICAgICAgICAgICBUcmFuc3BvcnRBY3RpdmU7Ci0Jc3RydWN0IEhvc3RXcml0ZSBIb3N0V3JpdGU7Ci0JX191MzIgICAgICAgICAgICBDbWRzT3V0TWF4OwotCV9fdTMyICAgICAgICAgICAgQnVzVHlwZXM7Ci0JX191MzIgICAgICAgICAgICBSZXNlcnZlZDsKLQlfX3U4ICAgICAgICAgICAgIFNlcnZlck5hbWVbMTZdOwotCV9fdTMyICAgICAgICAgICAgSGVhcnRCZWF0OwotCV9fdTMyICAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKKwl1OCAgICAgICAgICAgIFNpZ25hdHVyZVs0XTsKKwl1MzIJCVNwZWNWYWxlbmNlOworCXUzMiAgICAgICAgICAgVHJhbnNwb3J0U3VwcG9ydDsKKwl1MzIgICAgICAgICAgIFRyYW5zcG9ydEFjdGl2ZTsKKwlzdHJ1Y3QgCQlIb3N0V3JpdGUgSG9zdFdyaXRlOworCXUzMiAgICAgICAgICAgQ21kc091dE1heDsKKwl1MzIgICAgICAgICAgIEJ1c1R5cGVzOworCXUzMiAgICAgICAgICAgVHJhbnNNZXRob2RPZmZzZXQ7CisJdTggICAgICAgICAgICBTZXJ2ZXJOYW1lWzE2XTsKKwl1MzIgICAgICAgICAgIEhlYXJ0QmVhdDsKKwl1MzIgICAgICAgICAgIFNDU0lfUHJlZmV0Y2g7CisJdTMyCSAJTWF4U2NhdHRlckdhdGhlckVsZW1lbnRzOworCXUzMgkJTWF4TG9naWNhbFVuaXRzOworCXUzMgkJTWF4UGh5c2ljYWxEZXZpY2VzOworCXUzMgkJTWF4UGh5c2ljYWxEcml2ZXNQZXJMb2dpY2FsVW5pdDsKKwl1MzIJCU1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHM7Cit9OworCisjZGVmaW5lIE5VTV9CTE9DS0ZFVENIX0VOVFJJRVMgOAorc3RydWN0IFRyYW5zVGFibGVfc3RydWN0IHsKKwl1MzIgICAgICAgICAgICBCbG9ja0ZldGNoW05VTV9CTE9DS0ZFVENIX0VOVFJJRVNdOworCXUzMiAgICAgICAgICAgIFJlcFFTaXplOworCXUzMiAgICAgICAgICAgIFJlcFFDb3VudDsKKwl1MzIgICAgICAgICAgICBSZXBRQ3RyQWRkckxvdzMyOworCXUzMiAgICAgICAgICAgIFJlcFFDdHJBZGRySGlnaDMyOworCXUzMiAgICAgICAgICAgIFJlcFFBZGRyMExvdzMyOworCXUzMiAgICAgICAgICAgIFJlcFFBZGRyMEhpZ2gzMjsKIH07CiAKIHN0cnVjdCBocHNhX3BjaV9pbmZvIHsKIAl1bnNpZ25lZCBjaGFyCWJ1czsKIAl1bnNpZ25lZCBjaGFyCWRldl9mbjsKIAl1bnNpZ25lZCBzaG9ydAlkb21haW47Ci0JX191MzIJCWJvYXJkX2lkOworCXUzMgkJYm9hcmRfaWQ7CiB9OwogCiAjcHJhZ21hIHBhY2soKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libW1jYS5jIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCmluZGV4IDljMWU2YTUuLjlhNGI2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKQEAgLTIzMzYsNyArMjMzNiw3IEBACiAJY2hhciAqY3VyID0gc3RyOwogCWludCBpID0gMTsKIAotCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDw9IElNX01BWF9IT1NUUykgeworCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDwgSU1fTUFYX0hPU1RTKSB7CiAJCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAJCWlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkKIAkJCWN1cisrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDg3YjUzNmEuLjczMmY2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTQxOTUsNyArNDE5NSw3IEBACiAJCWlmICh0Z3QtPnNlcnZpY2VfcGFybXMuY2xhc3MzX3Bhcm1zWzBdICYgMHg4MDAwMDAwMCkKIAkJCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyB8PSBGQ19DT1NfQ0xBU1MzOwogCQlpZiAocnBvcnQtPnJxc3RfcSkKLQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocnBvcnQtPnJxc3RfcSwgMSk7CisJCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHJwb3J0LT5ycXN0X3EsIDEpOwogCX0gZWxzZQogCQl0Z3RfZGJnKHRndCwgInJwb3J0IGFkZCBmYWlsZWRcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodmhvc3QtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtNDY2OSw3ICs0NjY5LDcgQEAKIAl9CiAKIAlpZiAoc2hvc3RfdG9fZmNfaG9zdChzaG9zdCktPnJxc3RfcSkKLQkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzaG9zdF90b19mY19ob3N0KHNob3N0KS0+cnFzdF9xLCAxKTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhzaG9zdF90b19mY19ob3N0KHNob3N0KS0+cnFzdF9xLCAxKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2aG9zdCk7CiAJc3Bpbl9sb2NrKCZpYm12ZmNfZHJpdmVyX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnZob3N0LT5xdWV1ZSwgJmlibXZmY19oZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggZTQ3NWI3OS4uZTNhMThlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTQwLDcgKzQwLDcgQEAKICAqIChDUlEpLCB3aGljaCBpcyBqdXN0IGEgYnVmZmVyIG9mIDE2IGJ5dGUgZW50cmllcyBpbiB0aGUgcmVjZWl2ZXIncyAKICAqIFNlbmRlcnMgY2Fubm90IGFjY2VzcyB0aGUgYnVmZmVyIGRpcmVjdGx5LCBidXQgc2VuZCBtZXNzYWdlcyBieQogICogbWFraW5nIGEgaHlwZXJ2aXNvciBjYWxsIGFuZCBwYXNzaW5nIGluIHRoZSAxNiBieXRlcy4gIFRoZSBoeXBlcnZpc29yCi0gKiBwdXRzIHRoZSBtZXNzYWdlIGluIHRoZSBuZXh0IDE2IGJ5dGUgc3BhY2UgaW4gcm91bmQtcm9iYmluIGZhc2hpb24sCisgKiBwdXRzIHRoZSBtZXNzYWdlIGluIHRoZSBuZXh0IDE2IGJ5dGUgc3BhY2UgaW4gcm91bmQtcm9iaW4gZmFzaGlvbiwKICAqIHR1cm5zIG9uIHRoZSBoaWdoIG9yZGVyIGJpdCBvZiB0aGUgbWVzc2FnZSAodGhlIHZhbGlkIGJpdCksIGFuZCAKICAqIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgdG8gdGhlIHJlY2VpdmVyIChpZiBpbnRlcnJ1cHRzIGFyZSB0dXJuZWQgb24uKSAKICAqIFRoZSByZWNlaXZlciBqdXN0IHR1cm5zIG9mZiB0aGUgdmFsaWQgYml0IHdoZW4gdGhleSBoYXZlIGNvcGllZCBvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCA5ZTUyZDE2Li4wMzJmMGQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMzY3NCw3ICszNjc0LDcgQEAKIAkJaWYgKGlwcl9pc192c2V0X2RldmljZShyZXMpKSB7CiAJCQlibGtfcXVldWVfcnFfdGltZW91dChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgICAgIElQUl9WU0VUX1JXX1RJTUVPVVQpOwotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIElQUl9WU0VUX01BWF9TRUNUT1JTKTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBJUFJfVlNFVF9NQVhfU0VDVE9SUyk7CiAJCX0KIAkJaWYgKGlwcl9pc192c2V0X2RldmljZShyZXMpIHx8IGlwcl9pc19zY3NpX2Rpc2socmVzKSkKIAkJCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDUxN2RhM2YuLjhhODliYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTU4NCw5ICs1ODQsMTAgQEAKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV9zd190Y3BfY29ubiAqdGNwX3N3X2Nvbm4gPSB0Y3BfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGNwX3N3X2Nvbm4tPnNvY2s7CiAKIAkvKiB1c2Vyc3BhY2UgbWF5IGhhdmUgZ29vZmVkIHVwIGFuZCBub3QgYm91bmQgdXMgKi8KLQlpZiAoIXRjcF9zd19jb25uLT5zb2NrKQorCWlmICghc29jaykKIAkJcmV0dXJuOwogCS8qCiAJICogTWFrZSBzdXJlIG91ciByZWN2IHNpZGUgaXMgc3RvcHBlZC4KQEAgLTU5Nyw2ICs1OTgsMTEgQEAKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF9yeCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3Bfc3dfY29ubi0+c29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOwogCisJaWYgKHNvY2stPnNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNvY2stPnNrLT5za19zbGVlcCkpIHsKKwkJc29jay0+c2stPnNrX2VyciA9IEVJTzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNvY2stPnNrLT5za19zbGVlcCk7CisJfQorCiAJaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKIAlpc2NzaV9zd190Y3BfcmVsZWFzZV9jb25uKGNvbm4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBjMjhhNzEyLi43MDNlYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTkxOSwxMCArMTkxOSwxMSBAQAogc3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBpc2NzaV9laF9jbWRfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQogewogCWVudW0gYmxrX2VoX3RpbWVyX3JldHVybiByYyA9IEJMS19FSF9OT1RfSEFORExFRDsKLQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IE5VTEw7CisJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBOVUxMLCAqcnVubmluZ190YXNrOwogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJaW50IGk7CiAKIAljbHNfc2Vzc2lvbiA9IHN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwpAQCAtMTk0Nyw4ICsxOTQ4LDE1IEBACiAJfQogCiAJdGFzayA9IChzdHJ1Y3QgaXNjc2lfdGFzayAqKXNjLT5TQ3AucHRyOwotCWlmICghdGFzaykKKwlpZiAoIXRhc2spIHsKKwkJLyoKKwkJICogUmFjZWQgd2l0aCBjb21wbGV0aW9uLiBKdXN0IHJlc2V0IHRpbWVyLCBhbmQgbGV0IGl0CisJCSAqIGNvbXBsZXRlIG5vcm1hbGx5CisJCSAqLworCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKIAkJZ290byBkb25lOworCX0KKwogCS8qCiAJICogSWYgd2UgaGF2ZSBzZW50IChhdCBsZWFzdCBxdWV1ZWQgdG8gdGhlIG5ldHdvcmsgbGF5ZXIpIGEgcGR1IG9yCiAJICogcmVjdmQgb25lIGZvciB0aGUgdGFzayBzaW5jZSB0aGUgbGFzdCB0aW1lb3V0IGFzayBmb3IKQEAgLTE5NTYsMTAgKzE5NjQsMTAgQEAKIAkgKiB3ZSBjYW4gY2hlY2sgaWYgaXQgaXMgdGhlIHRhc2sgb3IgY29ubmVjdGlvbiB3aGVuIHdlIHNlbmQgdGhlCiAJICogbm9wIGFzIGEgcGluZy4KIAkgKi8KLQlpZiAodGltZV9hZnRlcl9lcSh0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKKwlpZiAodGltZV9hZnRlcih0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKIAkJSVNDU0lfREJHX0VIKHNlc3Npb24sICJDb21tYW5kIG1ha2luZyBwcm9ncmVzcy4gQXNraW5nICIKIAkJCSAgICAgInNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byBjb21wbGV0ZS4gIgotCQkJICAgICAiTGFzdCBkYXRhIHJlY3YgYXQgJWx1LiBMYXN0IHRpbWVvdXQgd2FzIGF0ICIKKwkJCSAgICAgIkxhc3QgZGF0YSB4ZmVyIGF0ICVsdS4gTGFzdCB0aW1lb3V0IHdhcyBhdCAiCiAJCQkgICAgICIlbHVcbi4iLCB0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCk7CiAJCXRhc2stPmhhdmVfY2hlY2tlZF9jb25uID0gZmFsc2U7CiAJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOwpAQCAtMTk3Nyw2ICsxOTg1LDQzIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY29ubi0+c2Vzc2lvbi0+Y21kc19tYXg7IGkrKykgeworCQlydW5uaW5nX3Rhc2sgPSBjb25uLT5zZXNzaW9uLT5jbWRzW2ldOworCQlpZiAoIXJ1bm5pbmdfdGFzay0+c2MgfHwgcnVubmluZ190YXNrID09IHRhc2sgfHwKKwkJICAgICBydW5uaW5nX3Rhc2stPnN0YXRlICE9IElTQ1NJX1RBU0tfUlVOTklORykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE9ubHkgY2hlY2sgaWYgY21kcyBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIG1hZGUKKwkJICogcHJvZ3Jlc3MsIG9yIHRoaXMgY291bGQgbmV2ZXIgZmFpbAorCQkgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIocnVubmluZ190YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYywKKwkJCSAgICAgICB0YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYykpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9hZnRlcihydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgdGFzayBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MsIGJ1dCBhIHRhc2sKKwkJCSAqIHN0YXJ0ZWQgYmVmb3JlIHVzIGhhcyB0cmFuc2ZlcnJlZCBkYXRhIHNpbmNlCisJCQkgKiB3ZSBzdGFydGVkL2xhc3QtY2hlY2tlZC4gV2UgY291bGQgYmUgcXVldWVpbmcKKwkJCSAqIHRvbyBtYW55IHRhc2tzIG9yIHRoZSBMVSBpcyBiYWQuCisJCQkgKgorCQkJICogSWYgdGhlIGRldmljZSBpcyBiYWQgdGhlIGNtZHMgYWhlYWQgb2YgdXMgb24KKwkJCSAqIG90aGVyIGRldnMgd2lsbCBjb21wbGV0ZSwgYW5kIHRoaXMgbG9vcCB3aWxsCisJCQkgKiBldmVudHVhbGx5IGZhaWwgc3RhcnRpbmcgdGhlIHNjc2kgZWguCisJCQkgKi8KKwkJCUlTQ1NJX0RCR19FSChzZXNzaW9uLCAiQ29tbWFuZCBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MgIgorCQkJCSAgICAgImJ1dCBjb21tYW5kcyBhaGVhZCBvZiBpdCBoYXZlLiAiCisJCQkJICAgICAiQXNraW5nIHNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byAiCisJCQkJICAgICAiY29tcGxldGUuIE91ciBsYXN0IHhmZXIgdnMgcnVubmluZyB0YXNrICIKKwkJCQkgICAgICJsYXN0IHhmZXIgJWx1LyVsdS4gTGFzdCBjaGVjayAlbHUuXG4iLAorCQkJCSAgICAgdGFzay0+bGFzdF94ZmVyLCBydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwKKwkJCQkgICAgIHRhc2stPmxhc3RfdGltZW91dCk7CisJCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwogCS8qIEFzc3VtZXMgbm9wIHRpbWVvdXQgaXMgc2hvcnRlciB0aGFuIHNjc2kgY21kIHRpbWVvdXQgKi8KIAlpZiAodGFzay0+aGF2ZV9jaGVja2VkX2Nvbm4pCiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCBhYjE5YjNiLi4yMjc3NTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFNDU0kgUkRBTSBQcm90b2NvbCBsaWIgZnVuY3Rpb25zCisgKiBTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBGVUpJVEEgVG9tb25vcmkgPHRvbW9mQGFjbS5vcmc+CiAgKgpAQCAtMzI4LDcgKzMyOCw3IEBACiAJaW50IG9mZnNldCwgZXJyID0gMDsKIAl1OCBmb3JtYXQ7CiAKLQlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICogNDsKKwlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAKIAlkaXIgPSBzcnBfY21kX2RpcmVjdGlvbihjbWQpOwogCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQpAQCAtMzY2LDcgKzM2Niw3IEBACiB7CiAJc3RydWN0IHNycF9kaXJlY3RfYnVmICptZDsKIAlzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqaWQ7Ci0JaW50IGxlbiA9IDAsIG9mZnNldCA9IGNtZC0+YWRkX2NkYl9sZW4gKiA0OworCWludCBsZW4gPSAwLCBvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAJdTggZm10OwogCiAJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQpAQCAtNDQwLDYgKzQ0MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcnBfY21kX3F1ZXVlKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJEQU0gUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOwogTU9EVUxFX0FVVEhPUigiRlVKSVRBIFRvbW9ub3JpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMWNjMjNhNi4uODRiNjk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzE1LDYgKzMxNSw5IEBACiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX1JFR19WUEkJMHg4MDAwMCAgLyogTmVlZHMgdG8gaGF2ZSBpdHMgdnBpIHJlZ2lzdGVyZWQgKi8KICNkZWZpbmUgRkNfUlNDTl9ERUZFUlJFRAkweDEwMDAwMCAvKiBBIGRlZmVycmVkIFJTQ04gYmVpbmcgcHJvY2Vzc2VkICovCiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJIDB4MjAwMDAwIC8qIE5lZWQgdG8gSU5JVF9WUEkgYmVmb3JlIEZESVNDICovCisjZGVmaW5lIEZDX1ZQT1JUX0NWTF9SQ1ZECTB4NDAwMDAwIC8qIFZMaW5rIGZhaWxlZCBkdWUgdG8gQ1ZMCSAqLworI2RlZmluZSBGQ19WRklfUkVHSVNURVJFRAkweDgwMDAwMCAvKiBWRkkgaXMgcmVnaXN0ZXJlZCAqLworI2RlZmluZSBGQ19GRElTQ19DT01QTEVURUQJMHgxMDAwMDAwLyogRkRJU0MgY29tcGxldGVkICovCiAKIAl1aW50MzJfdCBjdF9mbGFnczsKICNkZWZpbmUgRkNfQ1RfUkZGX0lECQkweDEJIC8qIFJGRl9JRCBhY2NlcHRlZCBieSBzd2l0Y2ggKi8KQEAgLTQ0OCw2ICs0NTEsOCBAQAogCXVpbnQzMl90IGN0eHRfaWQ7CiAJdWludDMyX3QgU0lEOwogCXVpbnQzMl90IG94aWQ7CisJdWludDMyX3QgZmxhZ3M7CisjZGVmaW5lIFVOU09MX1ZBTElECTB4MDAwMDAwMDEKIH07CiAKIHN0cnVjdCBscGZjX2hiYSB7CkBAIC00OTksNiArNTA0LDEwIEBACiAJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAJdm9pZCAoKmxwZmNfc3RvcF9wb3J0KQogCQkoc3RydWN0IGxwZmNfaGJhICopOworCWludCAoKmxwZmNfaGJhX2luaXRfbGluaykKKwkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwlpbnQgKCpscGZjX2hiYV9kb3duX2xpbmspCisJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIAogCS8qIFNMSTQgc3BlY2lmaWMgSEJBIGRhdGEgc3RydWN0dXJlICovCkBAIC02MTMsNiArNjIyLDcgQEAKIAl1aW50MzJfdCBjZmdfZW5hYmxlX2JnOwogCXVpbnQzMl90IGNmZ19sb2dfdmVyYm9zZTsKIAl1aW50MzJfdCBjZmdfYWVyX3N1cHBvcnQ7CisJdWludDMyX3QgY2ZnX3N1cHByZXNzX2xpbmtfdXA7CiAKIAlscGZjX3ZwZF90IHZwZDsJCS8qIHZpdGFsIHByb2R1Y3QgZGF0YSAqLwogCkBAIC03OTAsNyArODAwLDcgQEAKIAl1aW50MTZfdCB2bGFuX2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgZmNmX2Nvbm5fcmVjX2xpc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXggY3RfZXZlbnRfbXV0ZXg7IC8qIHN5bmNocm9uaXplIGFjY2VzcyB0byBjdF9ldl93YWl0ZXJzICovCisJc3BpbmxvY2tfdCBjdF9ldl9sb2NrOyAvKiBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gY3RfZXZfd2FpdGVycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY3RfZXZfd2FpdGVyczsKIAlzdHJ1Y3QgdW5zb2xfcmN2X2N0X2N0eCBjdF9jdHhbNjRdOwogCXVpbnQzMl90IGN0eF9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDkxNTQyZjcuLmM5OTJlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC00ODIsNiArNDgyLDQxIEBACiB9CiAKIC8qKgorICogbHBmY19saW5rX3N0YXRlX3N0b3JlIC0gVHJhbnNpdGlvbiB0aGUgbGlua19zdGF0ZSBvbiBhbiBIQkEgcG9ydAorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbmUgb3IgbW9yZSBscGZjX3BvbGxpbmdfZmxhZ3MgdmFsdWVzLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGlzIG5vdCAidXAiIG9yICJkb3duIgorICogcmV0dXJuIGZyb20gbGluayBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gaWYgbm9uLXplcm8KKyAqIGxlbmd0aCBvZiB0aGUgYnVmIG9uIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2xpbmtfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICgoc3RybmNtcChidWYsICJ1cCIsIHNpemVvZigidXAiKSAtIDEpID09IDApICYmCisJCQkocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0xJTktfRE9XTikpCisJCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2luaXRfbGluayhwaGJhKTsKKwllbHNlIGlmICgoc3RybmNtcChidWYsICJkb3duIiwgc2l6ZW9mKCJkb3duIikgLSAxKSA9PSAwKSAmJgorCQkJKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKSkKKwkJc3RhdHVzID0gcGhiYS0+bHBmY19oYmFfZG93bl9saW5rKHBoYmEpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyAtIFJldHVybiBzdW0gb2YgbWFwcGVkIGFuZCB1bm1hcHBlZCB2cG9ydHMKICAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgpAQCAtMTIxOSw3ICsxMjU0LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSBwaGJhLT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjQ3LDcgKzEyODIsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAotCWludCB2YWwgPSAwO1wKKwl1aW50IHZhbCA9IDA7XAogCXZhbCA9IHBoYmEtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjc0LDcgKzEzMDksNyBAQAogICoqLwogI2RlZmluZSBscGZjX3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCiAJCXBoYmEtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTMwOSw3ICsxMzQ0LDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQlwaGJhLT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTEzNTAsNyArMTM4NSw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTEzODIsNyArMTQxNyw3IEBACiB7IFwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSB2cG9ydC0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CkBAIC0xNDA5LDcgKzE0NDQsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgdnBvcnQtPmNmZ18jI2F0dHIpO1wKIH0KQEAgLTE0MzQsNyArMTQ2OSw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1faW5pdChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCi1scGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJdnBvcnQtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTQ2Niw3ICsxNTAxLDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQl2cG9ydC0+Y2ZnXyMjYXR0ciA9IHZhbDtcCkBAIC0xNTAyLDcgKzE1MzcsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTE1MTUsMjIgKzE1NTAsMjIgQEAKIAogCiAjZGVmaW5lIExQRkNfQVRUUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY19wYXJhbV9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKQEAgLTE1NDAsMTYgKzE1NzUsMTYgQEAKIAkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19BVFRSX0hFWF9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTU5LDIyICsxNTk0LDIyIEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFIobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTg0LDE2ICsxNjE5LDE2IEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfVlBPUlRfQVRUUl9IRVhfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTYxNCw3ICsxNjQ5LDggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3J0bnVtLCBTX0lSVUdPLCBscGZjX3Zwb3J0bnVtX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGZ3cmV2LCBTX0lSVUdPLCBscGZjX2Z3cmV2X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGhkdywgU19JUlVHTywgbHBmY19oZHdfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JUlVHTywgbHBmY19saW5rX3N0YXRlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdywKKwkJbHBmY19saW5rX3N0YXRlX3N0b3JlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCiAJCSAgIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLApAQCAtMTg5Nyw2ICsxOTMzLDE1IEBACiAJCQkgbHBmY19lbmFibGVfbnBpdl9zaG93LCBOVUxMKTsKIAogLyoKKyMgbHBmY19zdXBwcmVzc19saW5rX3VwOiAgQnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbgorIyAgICAgICAgICAgIDB4MCAgPSBicmluZyBsaW5rIHVwIChpc3N1ZSBNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MSAgPSBkbyBOT1QgYnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbihNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MiAgPSBuZXZlciBicmluZyB1cCBsaW5rCisjIERlZmF1bHQgdmFsdWUgaXMgMC4KKyovCitMUEZDX0FUVFJfUihzdXBwcmVzc19saW5rX3VwLCAwLCAwLCAyLCAiU3VwcHJlc3MgTGluayBVcCBhdCBpbml0aWFsaXphdGlvbiIpOworCisvKgogIyBscGZjX25vZGV2X3RtbzogSWYgc2V0LCBpdCB3aWxsIGhvbGQgYWxsIEkvTyBlcnJvcnMgb24gZGV2aWNlcyB0aGF0IGRpc2FwcGVhcgogIyB1bnRpbCB0aGUgdGltZXIgZXhwaXJlcy4gVmFsdWUgcmFuZ2UgaXMgWzAsMjU1XS4gRGVmYXVsdCB2YWx1ZSBpcyAzMC4KICovCkBAIC0zMTE0LDEyICszMTU5LDEyIEBACiAvKgogIyBscGZjX3VzZV9tc2k6IFVzZSBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cykgaW4gc3lzdGVtcyB0aGF0CiAjCQlzdXBwb3J0IHRoaXMgZmVhdHVyZQotIyAgICAgICAwICA9IE1TSSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQKICMgICAgICAgMSAgPSBNU0kgZW5hYmxlZAotIyAgICAgICAyICA9IE1TSS1YIGVuYWJsZWQKLSMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMC4KKyMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkIChkZWZhdWx0KQorIyBWYWx1ZSByYW5nZSBpcyBbMCwyXS4gRGVmYXVsdCB2YWx1ZSBpcyAyLgogKi8KLUxQRkNfQVRUUl9SKHVzZV9tc2ksIDAsIDAsIDIsICJVc2UgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzICgxKSBvciAiCitMUEZDX0FUVFJfUih1c2VfbXNpLCAyLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgogCSAgICAiTVNJLVggKDIpLCBpZiBwb3NzaWJsZSIpOwogCiAvKgpAQCAtMzI3OCw2ICszMzIzLDcgQEAKIAkmZGV2X2F0dHJfbHBmY19wcm90X3NnX3NlZ19jbnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N1cHBvcnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N0YXRlX2NsZWFudXAsCisJJmRldl9hdHRyX2xwZmNfc3VwcHJlc3NfbGlua191cCwKIAlOVUxMLAogfTsKIApAQCAtNDQ1Niw3ICs0NTAyLDcgQEAKIAlscGZjX2hiYV9xdWV1ZV9kZXB0aF9pbml0KHBoYmEsIGxwZmNfaGJhX3F1ZXVlX2RlcHRoKTsKIAlscGZjX2hiYV9sb2dfdmVyYm9zZV9pbml0KHBoYmEsIGxwZmNfbG9nX3ZlcmJvc2UpOwogCWxwZmNfYWVyX3N1cHBvcnRfaW5pdChwaGJhLCBscGZjX2Flcl9zdXBwb3J0KTsKLQorCWxwZmNfc3VwcHJlc3NfbGlua191cF9pbml0KHBoYmEsIGxwZmNfc3VwcHJlc3NfbGlua191cCk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCBhNWQ5MDQ4Li5mM2YxYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJscGZjX3NsaS5oIgogI2luY2x1ZGUgImxwZmNfc2xpNC5oIgogI2luY2x1ZGUgImxwZmNfbmwuaCIKKyNpbmNsdWRlICJscGZjX2JzZy5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQxLDE0ICs0MywxODMgQEAKICNpbmNsdWRlICJscGZjX3Zwb3J0LmgiCiAjaW5jbHVkZSAibHBmY192ZXJzaW9uLmgiCiAKK3N0cnVjdCBscGZjX2JzZ19ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBrcmVmIGtyZWY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisKKwkvKiBFdmVudCB0eXBlIGFuZCB3YWl0ZXIgaWRlbnRpZmllcnMgKi8KKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgcmVxX2lkOworCXVpbnQzMl90IHJlZ19pZDsKKworCS8qIG5leHQgdHdvIGZsYWdzIGFyZSBoZXJlIGZvciB0aGUgYXV0by1kZWxldGUgbG9naWMgKi8KKwl1bnNpZ25lZCBsb25nIHdhaXRfdGltZV9zdGFtcDsKKwlpbnQgd2FpdGluZzsKKworCS8qIHNlZW4gYW5kIG5vdCBzZWVuIGV2ZW50cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX2dldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19zZWU7CisKKwkvKiBqb2Igd2FpdGluZyBmb3IgdGhpcyBldmVudCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19pb2NiIHsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnE7CisJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgaW9jYiB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19tYm94IHsKKwlMUEZDX01CT1hRX3QgKnBtYm94cTsKKwlNQUlMQk9YX3QgKm1iOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgbWJveCBjb21tYW5kIHRvIGZpbmlzaCAqLworCXN0cnVjdCBmY19ic2dfam9iICpzZXRfam9iOworfTsKKworI2RlZmluZSBUWVBFX0VWVCAJMQorI2RlZmluZSBUWVBFX0lPQ0IJMgorI2RlZmluZSBUWVBFX01CT1gJMworc3RydWN0IGJzZ19qb2JfZGF0YSB7CisJdWludDMyX3QgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCQlzdHJ1Y3QgbHBmY19ic2dfaW9jYiBpb2NiOworCQlzdHJ1Y3QgbHBmY19ic2dfbWJveCBtYm94OworCX0gY29udGV4dF91bjsKK307CisKK3N0cnVjdCBldmVudF9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCBpbW1lZF9kYXQ7CisJdm9pZCAqZGF0YTsKKwl1aW50MzJfdCBsZW47Cit9OworCisjZGVmaW5lIEJVRl9TWl80SyA0MDk2CisjZGVmaW5lIFNMSV9DVF9FTFhfTE9PUEJBQ0sgMHgxMAorCitlbnVtIEVMWF9MT09QQkFDS19DTUQgeworCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCisJRUxYX0xPT1BCQUNLX0RBVEEsCit9OworCisjZGVmaW5lIEVMWF9MT09QQkFDS19IRUFERVJfU1ogXAorCShzaXplX3QpKCYoKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopTlVMTCktPnVuKQorCitzdHJ1Y3QgbHBmY19kbWFidWZleHQgeworCXN0cnVjdCBscGZjX2RtYWJ1ZiBkbWE7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmbGFnOworfTsKKwogLyoqCi0gKiBscGZjX2JzZ19ycG9ydF9jdCAtIHNlbmQgYSBDVCBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAotICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKLSAqLwotc3RhdGljIGludAotbHBmY19ic2dfcnBvcnRfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wIC0gbHBmY19ic2dfc2VuZF9tZ210X2NtZCdzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWNoCisgKiBjbGVhbnMgdXAgdGhlIFNMSSBsYXllciBvYmplY3RzLgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19ic2dfc2VuZF9tZ210X2NtZF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gam9iLT5zaG9zdDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfYnNnX2lvY2IgKmlvY2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwlqb2IgPSBpb2NiLT5zZXRfam9iOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7IC8qIHNvIHRpbWVvdXQgaGFuZGxlciBkb2VzIG5vdCByZXBseSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX1dBS0U7CisJaWYgKGNtZGlvY2JxLT5jb250ZXh0MiAmJiByc3Bpb2NicSkKKwkJbWVtY3B5KCYoKHN0cnVjdCBscGZjX2lvY2JxICopY21kaW9jYnEtPmNvbnRleHQyKS0+aW9jYiwKKwkJICAgICAgICZyc3Bpb2NicS0+aW9jYiwgc2l6ZW9mKElPQ0JfdCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisKKwlibXAgPSBpb2NiLT5ibXA7CisJcnNwaW9jYnEgPSBpb2NiLT5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGlvY2ItPm5kbHA7CisKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWQgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19zZW5kX21nbXRfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBqb2ItPnJwb3J0LT5kZF9kYXRhOwpAQCAtNjUsNTcgKzIzNiw2MCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CiAJaW50IG51bWJkZTsKIAlkbWFfYWRkcl90IGJ1c2FkZHI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKIAlpbnQgcmMgPSAwOwogCiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczMyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX2RkX2RhdGE7CisJfQorCiAJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKLQkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIDA7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBub19uZGxwOworCX0KKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25kbHA7CiAJfQogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0VMU19TTkRfTUFTSykgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9uZGxwX2V4aXQ7CisJCWdvdG8gZnJlZV9ibXA7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKIAlpZiAoIWNtZGlvY2JxKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OworCQlnb3RvIGZyZWVfYm1wOwogCX0KLQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFyc3Bpb2NicSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9jbWRpb2NicTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJcnNwID0gJnJzcGlvY2JxLT5pb2NiOwotCi0JYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibXApIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfcnNwaW9jYnE7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CiAJaWYgKCFibXAtPnZpcnQpIHsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfYm1wOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CiAJfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOwogCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGJtcC0+dmlydDsKLQogCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKIAlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgewpAQCAtMTU3LDc4ICszMzEsMTUyIEBACiAJY21kLT51bHBDb250ZXh0ID0gbmRscC0+bmxwX3JwaTsKIAljbWQtPnVscE93bmVyID0gT1dOX0NISVA7CiAJY21kaW9jYnEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JY21kaW9jYnEtPmNvbnRleHQxID0gTlVMTDsKLQljbWRpb2NicS0+Y29udGV4dDIgPSBOVUxMOworCWNtZGlvY2JxLT5jb250ZXh0MyA9IGJtcDsKIAljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOwotCiAJdGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwljbWQtPnVscFRpbWVvdXQgPSB0aW1lb3V0OwogCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIHJzcGlvY2JxLAotCQkJCQl0aW1lb3V0ICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kX2NtcDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IHJzcGlvY2JxOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CiAKLQlpZiAocmMgIT0gSU9DQl9USU1FRE9VVCkgewotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAotCQkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KIAl9CiAKLQlpZiAocmMgPT0gSU9DQl9USU1FRE9VVCkgewotCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKLQkJcmMgPSAtRUFDQ0VTOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OwotCX0KKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOwogCi0JaWYgKHJjICE9IElPQ0JfU1VDQ0VTUykgewotCQlyYyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnJlZV9vdXRkbXA7Ci0JfQorCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChyc3AtPnVscFN0YXR1cykgewotCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgewotCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7Ci0JCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6Ci0JCQkJcmMgPSAtRVRJTUVET1VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKLQkJCQlyYyA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJjID0gLUVBQ0NFUzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWdvdG8gZnJlZV9vdXRkbXA7Ci0JCX0KLQl9IGVsc2UKLQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KLQkJCXJzcC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemU7CisJLyogaW9jYiBmYWlsZWQgc28gY2xlYW51cCAqLworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOwogCi1mcmVlX291dGRtcDoKLQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKLWZyZWVfYm1wOgotCWtmcmVlKGJtcCk7CisKIGZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiBmcmVlX2NtZGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLWZyZWVfbmRscF9leGl0OgorZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK2ZyZWVfbmRscDoKIAlscGZjX25scF9wdXQobmRscCk7Ci0KK25vX25kbHA6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfcnBvcnRfZWxzX2NtcCAtIGxwZmNfYnNnX3Jwb3J0X2VscydzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19ycG9ydF9lbHNfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYnNnX3Jwb3J0X2Vsc19jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5ICplbHNfcmVwbHk7CisJdWludDhfdCAqcmp0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fV0FLRTsKKwlpZiAoY21kaW9jYnEtPmNvbnRleHQyICYmIHJzcGlvY2JxKQorCQltZW1jcHkoJigoc3RydWN0IGxwZmNfaW9jYnEgKiljbWRpb2NicS0+Y29udGV4dDIpLT5pb2NiLAorCQkgICAgICAgJnJzcGlvY2JxLT5pb2NiLCBzaXplb2YoSU9DQl90KSk7CisKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYjsKKwljbWRpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicTsKKwlyc3Bpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwOworCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoam9iLT5yZXBseS0+cmVzdWx0ID09IC1FQUdBSU4pCisJCXJjID0gLUVBR0FJTjsKKwllbHNlIGlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfU1VDQ0VTUykKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7CisJZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgeworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ic2dfY3RlbHNfcmVwbHkpOworCQkvKiBMU19SSlQgZGF0YSByZXR1cm5lZCBpbiB3b3JkIDQgKi8KKwkJcmp0X2RhdGEgPSAodWludDhfdCAqKSZyc3AtPnVuLnVscFdvcmRbNF07CisJCWVsc19yZXBseSA9ICZqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5OworCQllbHNfcmVwbHktPnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19SRUpFQ1Q7CisJCWVsc19yZXBseS0+cmp0X2RhdGEuYWN0aW9uID0gcmp0X2RhdGFbM107CisJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsyXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS5yZWFzb25fZXhwbGFuYXRpb24gPSByanRfZGF0YVsxXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS52ZW5kb3JfdW5pcXVlID0gcmp0X2RhdGFbMF07CisJfSBlbHNlCisJCXJjID0gLUVJTzsKKworCXBidWZsaXN0ID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDM7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGJ1Zmxpc3QtPnZpcnQsIHBidWZsaXN0LT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoZGRfZGF0YSk7CisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOwogCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KIAlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3Jwb3J0X2VscyAtIHNlbmQgYW4gRUxTIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2JzZ19ycG9ydF9lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKQEAgLTIzNiw3ICs0ODQsNiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKLQogCXVpbnQzMl90IGVsc2NtZDsKIAl1aW50MzJfdCBjbWRzaXplOwogCXVpbnQzMl90IHJzcHNpemU7CkBAIC0yNDgsMjAgKzQ5NSwzMCBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcHJzcDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7Ci0JaW50IGlvY2Jfc3RhdHVzOwogCWludCByZXF1ZXN0X25zZWc7CiAJaW50IHJlcGx5X25zZWc7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKIAlpbnQgbnVtYmRlOwogCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IGNyZWdfdmFsOwogCWludCByYyA9IDA7CiAKIAkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KIAlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCisJLyogYWxsb2NhdGUgb3VyIGJzZyB0cmFja2luZyBzdHJ1Y3R1cmUgKi8KKwlkZF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2JfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRfZGF0YSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM1IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRfZGF0YTsKKwl9CisKIAlpZiAoIWxwZmNfbmxwX2dldChuZGxwKSkgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfZGRfZGF0YTsKIAl9CiAKIAllbHNjbWQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5yX2Vscy5lbHNfY29kZTsKQEAgLTI3MSwyNCArNTI4LDI0IEBACiAJaWYgKCFyc3Bpb2NicSkgewogCQlscGZjX25scF9wdXQobmRscCk7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZnJlZV9kZF9kYXRhOwogCX0KIAogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKIAlycGkgPSBuZGxwLT5ubHBfcnBpOwogCi0JY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYS0+cHBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCisJY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCiAJCQkJICAgICAgbmRscC0+bmxwX0RJRCwgZWxzY21kKTsKLQogCWlmICghY21kaW9jYnEpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWdvdG8gZnJlZV9yc3Bpb2NicTsKIAl9CiAKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwkvKiBwcmVwIGVscyBpb2NiIHNldCBjb250ZXh0MSB0byB0aGUgbmRscCwgY29udGV4dDIgdG8gdGhlIGNvbW1hbmQKKwkgKiBkbWFidWYsIGNvbnRleHQzIGhvbGRzIHRoZSBkYXRhIGRtYWJ1ZgorCSAqLwogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2JxLT5jb250ZXh0MjsKIAlwcnNwID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwY21kLT5saXN0Lm5leHQ7Ci0KIAlscGZjX21idWZfZnJlZShwaGJhLCBwY21kLT52aXJ0LCBwY21kLT5waHlzKTsKIAlrZnJlZShwY21kKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBwcnNwLT52aXJ0LCBwcnNwLT5waHlzKTsKQEAgLTMwMCw3ICs1NTcsNiBAQAogCiAJcmVxdWVzdF9uc2VnID0gcGNpX21hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCiAJCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCiAJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKIAkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKQEAgLTMyMiw3ICs1NzgsNiBAQAogCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKIAkJYnBsKys7CiAJfQotCiAJY21kaW9jYnEtPmlvY2IudW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPQogCQkocmVxdWVzdF9uc2VnICsgcmVwbHlfbnNlZykgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCk7CiAJY21kaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IHJwaTsKQEAgLTMzMCwxMDIgKzU4NSw2MiBAQAogCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7CiAJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKIAotCWlvY2Jfc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLAotCQkJCQlyc3Bpb2NicSwgKHBoYmEtPmZjX3JhdG92ICogMikKLQkJCQkJICAgICAgICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19ycG9ydF9lbHNfY21wOworCWNtZGlvY2JxLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY21kaW9jYnEtPmNvbnRleHQyID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjbWRpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnEgPSByc3Bpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gTlVMTDs7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHAgPSBuZGxwOwogCi0JLyogcmVsZWFzZSB0aGUgbmV3IG5kbHAgb25jZSB0aGUgaW9jYiBjb21wbGV0ZXMgKi8KLQlscGZjX25scF9wdXQobmRscCk7Ci0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpIHsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQorCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgMCk7CisJbHBmY19ubHBfcHV0KG5kbHApOworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChpb2NiX3N0YXR1cyA9PSBJT0NCX1NVQ0NFU1MpIHsKLQkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9TVUNDRVNTKSB7Ci0JCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQotCQkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7Ci0JCQlyYyA9IDA7Ci0JCX0gZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgewotCQkJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OwotCQkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCi0JCQl1aW50OF90ICpyanRfZGF0YSA9ICh1aW50OF90ICopJnJzcC0+dW4udWxwV29yZFs0XTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKIAotCQkJZWxzX3JlcGx5ID0gJmpvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHk7Ci0JCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOwotCQkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOwotCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5hY3Rpb24gPSByanRfZGF0YVswXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsxXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMl07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnZlbmRvcl91bmlxdWUgPSByanRfZGF0YVszXTsKLQkJfSBlbHNlCi0JCQlyYyA9IC1FSU87Ci0JfSBlbHNlCi0JCXJjID0gLUVJTzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBwYnVmbGlzdC0+dmlydCwgcGJ1Zmxpc3QtPnBoeXMpOwogCi0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpCi0JCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NicSk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CiAKK2ZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiAKLW91dDoKK2ZyZWVfZGRfZGF0YToKKwlrZnJlZShkZF9kYXRhKTsKKworbm9fZGRfZGF0YToKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAotc3RydWN0IGxwZmNfY3RfZXZlbnQgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgcmVmOwotCXdhaXRfcXVldWVfaGVhZF90IHdxOwotCi0JLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCi0JdWludDMyX3QgdHlwZV9tYXNrOwotCXVpbnQzMl90IHJlcV9pZDsKLQl1aW50MzJfdCByZWdfaWQ7Ci0KLQkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCi0JdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7Ci0JaW50IHdhaXRpbmc7Ci0KLQkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOwotfTsKLQotc3RydWN0IGV2ZW50X2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl1aW50MzJfdCB0eXBlOwotCXVpbnQzMl90IGltbWVkX2RhdDsKLQl2b2lkICpkYXRhOwotCXVpbnQzMl90IGxlbjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbHBmY19jdF9ldmVudCAqCi1scGZjX2N0X2V2ZW50X25ldyhpbnQgZXZfcmVnX2lkLCB1aW50MzJfdCBldl9yZXFfaWQpCi17Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV2dCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKLQlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7Ci0KLQlyZXR1cm4gZXZ0OwotfQotCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X2ZyZWUgLSBmcmVlcyBhbiBhbGxvY2F0ZWQgZXZlbnQgc3RydWN0dXJlCisgKiBAa3JlZjogUG9pbnRlciB0byBhIGtyZWYuCisgKgorICogQ2FsbGVkIGZyb20ga3JlZl9wdXQuIEJhY2sgY2FzdCB0aGUga3JlZiBpbnRvIGFuIGV2ZW50IHN0cnVjdHVyZSBhZGRyZXNzLgorICogRnJlZSBhbnkgZXZlbnRzIHRvIGdldCwgZGVsZXRlIGFzc29jaWF0ZWQgbm9kZXMsIGZyZWUgYW55IGV2ZW50cyB0byBzZWUsCisgKiBmcmVlIGFueSBkYXRhIHRoZW4gZnJlZSB0aGUgZXZlbnQgaXRzZWxmLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfY3RfZXZlbnRfZnJlZShzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0KQorbHBmY19ic2dfZXZlbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbHBmY19ic2dfZXZlbnQsCisJCQkJCQkgIGtyZWYpOwogCXN0cnVjdCBldmVudF9kYXRhICplZDsKIAogCWxpc3RfZGVsKCZldnQtPm5vZGUpOwpAQCAtNDQ3LDI1ICs2NjIsODIgQEAKIAlrZnJlZShldnQpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3JlZiAtIGluY3JlbWVudHMgdGhlIGtyZWYgZm9yIGFuIGV2ZW50CisgKiBAZXZ0OiBQb2ludGVyIHRvIGFuIGV2ZW50IHN0cnVjdHVyZS4KKyAqKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotbHBmY19jdF9ldmVudF9yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3JlZihzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCkKIHsKLQlldnQtPnJlZisrOworCWtyZWZfZ2V0KCZldnQtPmtyZWYpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3VucmVmIC0gVXNlcyBrcmVmX3B1dCB0byBmcmVlIGFuIGV2ZW50IHN0cnVjdHVyZQorICogQGV2dDogUG9pbnRlciB0byBhbiBldmVudCBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWxwZmNfY3RfZXZlbnRfdW5yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0KQogewotCWlmICgtLWV2dC0+cmVmIDwgMCkKLQkJbHBmY19jdF9ldmVudF9mcmVlKGV2dCk7CisJa3JlZl9wdXQoJmV2dC0+a3JlZiwgbHBmY19ic2dfZXZlbnRfZnJlZSk7CiB9CiAKLSNkZWZpbmUgU0xJX0NUX0VMWF9MT09QQkFDSyAweDEwCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X25ldyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgZXZlbnQgc3RydWN0dXJlCisgKiBAZXZfbWFzazogTWFzayBvZiBldmVudHMuCisgKiBAZXZfcmVnX2lkOiBFdmVudCByZWcgaWQuCisgKiBAZXZfcmVxX2lkOiBFdmVudCByZXF1ZXN0IGlkLgorICoqLworc3RhdGljIHN0cnVjdCBscGZjX2JzZ19ldmVudCAqCitscGZjX2JzZ19ldmVudF9uZXcodWludDMyX3QgZXZfbWFzaywgaW50IGV2X3JlZ19pZCwgdWludDMyX3QgZXZfcmVxX2lkKQoreworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0ID0ga3phbGxvYyhzaXplb2YoKmV2dCksIEdGUF9LRVJORUwpOwogCi1lbnVtIEVMWF9MT09QQkFDS19DTUQgewotCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCi0JRUxYX0xPT1BCQUNLX0RBVEEsCi19OworCWlmICghZXZ0KQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19nZXQpOworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19zZWUpOworCWV2dC0+dHlwZV9tYXNrID0gZXZfbWFzazsKKwlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKKwlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7CisJa3JlZl9pbml0KCZldnQtPmtyZWYpOworCXJldHVybiBldnQ7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9mcmVlIC0gRnJlZXMgYW4gbHBmYyBkbWEgYnVmZmVyIGV4dGVuc2lvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1saXN0OiBQb2ludGVyIHRvIGFuIGxwZmMgZG1hIGJ1ZmZlciBleHRlbnNpb24uCisgKiovCitzdGF0aWMgaW50CitkaWFnX2NtZF9kYXRhX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1saXN0KQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxhc3Q7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKworCWlmICgoIW1saXN0KSB8fCAoIWxwZmNfaXNfbGlua191cChwaGJhKSAmJgorCQkocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpKSB7CisJCXJldHVybiAwOworCX0KKworCXBjaWRldiA9IHBoYmEtPnBjaWRldjsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmbWxpc3QtPmRtYS5saXN0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJyLCBuZXh0LCAmaGVhZCkgeworCQltbGFzdCA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICwgZG1hLmxpc3QpOworCQlpZiAobWxhc3QtPmRtYS52aXJ0KQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBjaWRldi0+ZGV2LAorCQkJCQkgIG1sYXN0LT5zaXplLAorCQkJCQkgIG1sYXN0LT5kbWEudmlydCwKKwkJCQkJICBtbGFzdC0+ZG1hLnBoeXMpOworCQlrZnJlZShtbGFzdCk7CisJfQorCXJldHVybiAwOworfQogCiAvKioKICAqIGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50IC0gcHJvY2VzcyBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kCkBAIC00NzQsOSArNzQ2LDkgQEAKICAqIEBwaW9jYnE6CiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kIGlzIHJlY2VpdmVkLiAgSXQKLSAqIGZvcndhcmRzIHRoZSBldmVudCB0byBhbnkgcHJvY2Vzc2VzIHJlZ2lzdGVyZCB0byByZWNlaXZlIENUIGV2ZW50cy4KLSAqLwotdm9pZAorICogZm9yd2FyZHMgdGhlIGV2ZW50IHRvIGFueSBwcm9jZXNzZXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIENUIGV2ZW50cy4KKyAqKi8KK2ludAogbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2JxKQogewpAQCAtNDg0LDcgKzc1Niw3IEBACiAJdWludDMyX3QgY21kOwogCXVpbnQzMl90IGxlbjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCXNpemVfdCBvZmZzZXQgPSAwOwpAQCAtNDk2LDYgKzc2OCw5IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYyID0gcGlvY2JxLT5jb250ZXh0MzsKIAlzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKmhicWU7CiAJc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKmN0X3JlcTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzaXplID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKIAlsaXN0X2FkZF90YWlsKCZoZWFkLCAmcGlvY2JxLT5saXN0KTsKQEAgLTUwNCw2ICs3NzksMTAgQEAKIAkgICAgcGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID09IDApCiAJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAorCWlmIChwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SIHx8CisJCSghKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CisKIAlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKQogCQlkbWFidWYgPSBiZGVCdWYxOwogCWVsc2UgewpAQCAtNTExLDcgKzc5MCw4IEBACiAJCQkJICAgIHBpb2NicS0+aW9jYi51bi5jb250NjRbMF0uYWRkckxvdyk7CiAJCWRtYWJ1ZiA9IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChwaGJhLCBwcmluZywgZG1hX2FkZHIpOwogCX0KLQorCWlmIChkbWFidWYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCWN0X3JlcSA9IChzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqKWRtYWJ1Zi0+dmlydDsKIAlldnRfcmVxX2lkID0gY3RfcmVxLT5Gc1R5cGU7CiAJY21kID0gY3RfcmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3A7CkBAIC01MTksMjQgKzc5OSwyNCBAQAogCWlmICghKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCiAJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgZG1hYnVmKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewotCQlpZiAoZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKKwkJaWYgKCEoZXZ0LT50eXBlX21hc2sgJiBGQ19SRUdfQ1RfRVZFTlQpIHx8CisJCQlldnQtPnJlcV9pZCAhPSBldnRfcmVxX2lkKQogCQkJY29udGludWU7CiAKLQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKLQorCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlldnRfZGF0ID0ga3phbGxvYyhzaXplb2YoKmV2dF9kYXQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0KSB7Ci0JCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCWlmIChldnRfZGF0ID09IE5VTEwpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkJIjI2MTQgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciAiCiAJCQkJCSJDVCBldmVudFxuIik7CiAJCQlicmVhazsKIAkJfQogCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCiAJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCS8qIHRha2UgYWNjdW11bGF0ZWQgYnl0ZSBjb3VudCBmcm9tIHRoZSBsYXN0IGlvY2JxICovCiAJCQlpb2NicSA9IGxpc3RfZW50cnkoaGVhZC5wcmV2LCB0eXBlb2YoKmlvY2JxKSwgbGlzdCk7CkBAIC01NTAsMjUgKzgzMCwyNSBAQAogCQl9CiAKIAkJZXZ0X2RhdC0+ZGF0YSA9IGt6YWxsb2MoZXZ0X2RhdC0+bGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0LT5kYXRhKSB7CisJCWlmIChldnRfZGF0LT5kYXRhID09IE5VTEwpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJCSIyNjE1IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgogCQkJCQkiQ1QgZXZlbnQgZGF0YSwgc2l6ZSAlZFxuIiwKIAkJCQkJZXZ0X2RhdC0+bGVuKTsKIAkJCWtmcmVlKGV2dF9kYXQpOwotCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jYnEsICZoZWFkLCBsaXN0KSB7CisJCQlzaXplID0gMDsKIAkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCQliZGVCdWYxID0gaW9jYnEtPmNvbnRleHQyOwogCQkJCWJkZUJ1ZjIgPSBpb2NicS0+Y29udGV4dDM7CiAJCQl9CiAJCQlmb3IgKGkgPSAwOyBpIDwgaW9jYnEtPmlvY2IudWxwQmRlQ291bnQ7IGkrKykgewotCQkJCWludCBzaXplID0gMDsKIAkJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYKIAkJCQkgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkJCWlmIChpID09IDApIHsKQEAgLTYwMSw5ICs4ODEsMTEgQEAKIAkJCQkJCWlvY2JxKTsKIAkJCQkJa2ZyZWUoZXZ0X2RhdC0+ZGF0YSk7CiAJCQkJCWtmcmVlKGV2dF9kYXQpOwotCQkJCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JCQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLAorCQkJCQkJZmxhZ3MpOworCQkJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkJJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCQkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCQkJCX0KIAkJCQltZW1jcHkoKGNoYXIgKikoZXZ0X2RhdC0+ZGF0YSkgKyBvZmZzZXQsCkBAIC02MTYsMTUgKzg5OCwyNCBAQAogCQkJCQkJCQkgZG1hYnVmKTsKIAkJCQl9IGVsc2UgewogCQkJCQlzd2l0Y2ggKGNtZCkgeworCQkJCQljYXNlIEVMWF9MT09QQkFDS19EQVRBOgorCQkJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCQkoc3RydWN0IGxwZmNfZG1hYnVmZXh0ICopCisJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCWJyZWFrOwogCQkJCQljYXNlIEVMWF9MT09QQkFDS19YUklfU0VUVVA6Ci0JCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgotCQkJCQkJICAgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSkKKwkJCQkJCWlmICgocGhiYS0+c2xpX3JldiA9PQorCQkJCQkJCUxQRkNfU0xJX1JFVjIpIHx8CisJCQkJCQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmCisJCQkJCQkJTFBGQ19TTEkzX0hCUV9FTkFCTEVECisJCQkJCQkJKSkgeworCQkJCQkJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwKKwkJCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQl9IGVsc2UgewogCQkJCQkJCWxwZmNfcG9zdF9idWZmZXIocGhiYSwKIAkJCQkJCQkJCSBwcmluZywKIAkJCQkJCQkJCSAxKTsKLQkJCQkJCWVsc2UKLQkJCQkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsCi0JCQkJCQkJCQlkbWFidWYpOworCQkJCQkJfQogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgpAQCAtNjM4LDcgKzkyOSw3IEBACiAJCQl9CiAJCX0KIAotCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKIAkJCWV2dF9kYXQtPmltbWVkX2RhdCA9IHBoYmEtPmN0eF9pZHg7CiAJCQlwaGJhLT5jdHhfaWR4ID0gKHBoYmEtPmN0eF9pZHggKyAxKSAlIDY0OwpAQCAtNjUxLDEyMiArOTQyLDE0NCBAQAogCiAJCWV2dF9kYXQtPnR5cGUgPSBGQ19SRUdfQ1RfRVZFTlQ7CiAJCWxpc3RfYWRkKCZldnRfZGF0LT5ub2RlLCAmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldnQtPndxKTsKLQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKQorCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2dC0+d3EpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKIAkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKworCQlqb2IgPSBldnQtPnNldF9qb2I7CisJCWV2dC0+c2V0X2pvYiA9IE5VTEw7CisJCWlmIChqb2IpIHsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IHNpemU7CisJCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogZXJyb3JfY3RfdW5zb2xfZXhpdDoKIAlpZiAoIWxpc3RfZW1wdHkoJmhlYWQpKQogCQlsaXN0X2RlbCgmaGVhZCk7Ci0KLQlyZXR1cm47CisJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgotICogbHBmY19ic2dfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIGxwZmNfYnNnX2hiYV9zZXRfZXZlbnQgLSBwcm9jZXNzIGEgU0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAogICogQGpvYjogU0VUX0VWRU5UIGZjX2JzZ19qb2IKLSAqLworICoqLwogc3RhdGljIGludAotbHBmY19ic2dfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19oYmFfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IHNldF9jdF9ldmVudCAqZXZlbnRfcmVxOwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhID0gTlVMTDsKKwl1aW50MzJfdCBldl9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CiAJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBzZXRfY3RfZXZlbnQpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJIjI2MTIgUmVjZWl2ZWQgU0VUX0NUX0VWRU5UIGJlbG93IG1pbmltdW0gIgogCQkJCSJzaXplXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGRfZGF0YSA9PSBOVUxMKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzQgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCiAJZXZlbnRfcmVxID0gKHN0cnVjdCBzZXRfY3RfZXZlbnQgKikKIAkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlldl9tYXNrID0gKCh1aW50MzJfdCkodW5zaWduZWQgbG9uZylldmVudF9yZXEtPnR5cGVfbWFzayAmCisJCQkJRkNfUkVHX0VWRU5UX01BU0spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CiAJCWlmIChldnQtPnJlZ19pZCA9PSBldmVudF9yZXEtPmV2X3JlZ19pZCkgewotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCZldnQtPm5vZGUgPT0gJnBoYmEtPmN0X2V2X3dhaXRlcnMpIHsKIAkJLyogbm8gZXZlbnQgd2FpdGluZyBzdHJ1Y3QgeWV0IC0gZmlyc3QgY2FsbCAqLwotCQlldnQgPSBscGZjX2N0X2V2ZW50X25ldyhldmVudF9yZXEtPmV2X3JlZ19pZCwKKwkJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KGV2X21hc2ssIGV2ZW50X3JlcS0+ZXZfcmVnX2lkLAogCQkJCQlldmVudF9yZXEtPmV2X3JlcV9pZCk7CiAJCWlmICghZXZ0KSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCQkiMjYxNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBldmVudCAiCiAJCQkJCSJ3YWl0ZXJcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGpvYl9lcnJvcjsKIAkJfQogCi0JCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwotCQlscGZjX2N0X2V2ZW50X3JlZihldnQpOwotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJZXZ0LT53YWl0aW5nID0gMTsKLQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGV2dC0+d3EsCi0JCQkJICAgICAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkpIHsKLQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCi0JCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlyYyA9IC1FSU5UUjsKLQkJZ290byBzZXRfZXZlbnRfb3V0OwotCX0KKwlkZF9kYXRhLT50eXBlID0gVFlQRV9FVlQ7CisJZGRfZGF0YS0+Y29udGV4dF91bi5ldnQgPSBldnQ7CisJZXZ0LT5zZXRfam9iID0gam9iOyAvKiBmb3IgdW5zb2xpY2l0ZWQgY29tbWFuZCAqLworCWpvYi0+ZGRfZGF0YSA9IGRkX2RhdGE7IC8qIGZvciBmYyB0cmFuc3BvcnQgdGltZW91dCBjYWxsYmFjayovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOyAvKiBjYWxsIGpvYiBkb25lIGxhdGVyICovCiAKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JZXZ0LT53YWl0aW5nID0gMDsKK2pvYl9lcnJvcjoKKwlpZiAoZGRfZGF0YSAhPSBOVUxMKQorCQlrZnJlZShkZF9kYXRhKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOwotCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQotc2V0X2V2ZW50X291dDoKLQkvKiBzZXRfZXZlbnQgY2FycmllcyBubyByZXBseSBwYXlsb2FkICovCi0Jam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwotCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAogLyoqCi0gKiBscGZjX2JzZ19nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAorICogbHBmY19ic2dfaGJhX2dldF9ldmVudCAtIHByb2Nlc3MgYSBHRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCiAgKiBAam9iOiBHRVRfRVZFTlQgZmNfYnNnX2pvYgotICovCisgKiovCiBzdGF0aWMgaW50Ci1scGZjX2JzZ19nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK2xwZmNfYnNnX2hiYV9nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICpldmVudF9yZXE7CiAJc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSAqZXZlbnRfcmVwbHk7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7Ci0JaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQzMl90IHJjID0gMDsKIAogCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKIAkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9jdF9ldmVudCkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkiMjYxMyBSZWNlaXZlZCBHRVRfQ1RfRVZFTlQgcmVxdWVzdCBiZWxvdyAiCiAJCQkJIm1pbmltdW0gc2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAogCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICopCkBAIC03NzQsMTMgKzEwODcsMTIgQEAKIAogCWV2ZW50X3JlcGx5ID0gKHN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKikKIAkJam9iLT5yZXBseS0+cmVwbHlfZGF0YS52ZW5kb3JfcmVwbHkudmVuZG9yX3JzcDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewogCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKIAkJCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19nZXQpKQogCQkJCWJyZWFrOwotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJZXZ0X2RhdCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCiAJCQkJCSAgICAgc3RydWN0IGV2ZW50X2RhdGEsIG5vZGUpOwpAQCAtNzg4LDQ1ICsxMTAwLDE1MzkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAotCWlmICghZXZ0X2RhdCkgeworCS8qIFRoZSBhcHAgbWF5IGNvbnRpbnVlIHRvIGFzayBmb3IgZXZlbnQgZGF0YSB1bnRpbCBpdCBnZXRzCisJICogYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzbid0IGFueW1vcmUKKwkgKi8KKwlpZiAoZXZ0X2RhdCA9PSBOVUxMKSB7CiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJCXJjID0gLUVOT0VOVDsKLQkJZ290byBlcnJvcl9nZXRfZXZlbnRfZXhpdDsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCi0JaWYgKGV2dF9kYXQtPmxlbiA+IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbikgewotCQlldnRfZGF0LT5sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47Ci0JCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAotCQkJCQkiMjYxOCBUcnVuY2F0ZWQgZXZlbnQgZGF0YSBhdCAlZCAiCi0JCQkJCSJieXRlc1xuIiwKLQkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKwlpZiAoZXZ0X2RhdC0+bGVuID4gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgorCQkJCSJieXRlc1xuIiwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CiAJfQogCisJZXZlbnRfcmVwbHktPnR5cGUgPSBldnRfZGF0LT50eXBlOwogCWV2ZW50X3JlcGx5LT5pbW1lZF9kYXRhID0gZXZ0X2RhdC0+aW1tZWRfZGF0OwotCiAJaWYgKGV2dF9kYXQtPmxlbiA+IDApCiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9Ci0JCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAotCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKIAkJCQkJICAgIGV2dF9kYXQtPmRhdGEsIGV2dF9kYXQtPmxlbik7CiAJZWxzZQogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwotCXJjID0gMDsKIAotCWlmIChldnRfZGF0KQorCWlmIChldnRfZGF0KSB7CiAJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOwotCWtmcmVlKGV2dF9kYXQpOwotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWtmcmVlKGV2dF9kYXQpOworCX0KIAotZXJyb3JfZ2V0X2V2ZW50X2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiAwOworCitqb2JfZXJyb3I6CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIC0gbHBmY19pc3N1ZV9jdF9yc3AncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29weSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2lzc3VlX2N0X3JzcF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSBjbWRpb2NicS0+Y29udGV4dDE7CisJLyogbm9ybWFsIGNvbXBsZXRpb24gYW5kIHRpbWVvdXQgY3Jvc3NlZCBwYXRocywgYWxyZWFkeSBkb25lICovCisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iOworCWJtcCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXA7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscDsKKworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOwogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKIAkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCiAJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3AgLSBpc3N1ZSBhIGN0IHJlc3BvbnNlCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAam9iOiBQb2ludGVyIHRvIHRoZSBqb2Igb2JqZWN0LgorICogQHRhZzogdGFnIGluZGV4IHZhbHVlIGludG8gdGhlIHBvcnRzIGNvbnRleHQgZXhjaGFuZ2UgYXJyYXkuCisgKiBAYm1wOiBQb2ludGVyIHRvIGEgZG1hIGJ1ZmZlciBkZXNjcmlwdG9yLgorICogQG51bV9lbnRyeTogTnVtYmVyIG9mIGVudGllcyBpbiB0aGUgYmRlLgorICoqLworc3RhdGljIGludAorbHBmY19pc3N1ZV9jdF9yc3Aoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iLCB1aW50MzJfdCB0YWcsCisJCSAgc3RydWN0IGxwZmNfZG1hYnVmICpibXAsIGludCBudW1fZW50cnkpCit7CisJSU9DQl90ICppY21kOworCXN0cnVjdCBscGZjX2lvY2JxICpjdGlvY2IgPSBOVUxMOworCWludCByYyA9IDA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJdWludDMyX3QgY3JlZ192YWw7CisKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzYgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19kZF9kYXRhOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgIGNvbW1hbmQgaW9jYiAqLworCWN0aW9jYiA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlpZiAoIWN0aW9jYikgeworCQlyYyA9IEVOT01FTTsKKwkJZ290byBub19jdGlvY2I7CisJfQorCisJaWNtZCA9ICZjdGlvY2ItPmlvY2I7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC51bHBJb1RhZzMyID0gMDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKGJtcC0+cGh5cyk7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coYm1wLT5waHlzKTsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZVNpemUgPSAobnVtX2VudHJ5ICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gKExTIHwgTEEpOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9TT0xfQ1RMOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJLyogRmlsbCBpbiByZXN0IG9mIGlvY2IgKi8KKwlpY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwlpY21kLT51bHBCZGVDb3VudCA9IDE7CisJaWNtZC0+dWxwTGUgPSAxOworCWljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJLyogRG8gbm90IGlzc3VlIHVuc29sIHJlc3BvbnNlIGlmIG94aWQgbm90IG1hcmtlZCBhcyB2YWxpZCAqLworCQlpZiAoIShwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmIFVOU09MX1ZBTElEKSkgeworCQkJcmMgPSBJT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCQlpY21kLT51bHBDb250ZXh0ID0gcGhiYS0+Y3RfY3R4W3RhZ10ub3hpZDsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEtPnBwb3J0LCBwaGJhLT5jdF9jdHhbdGFnXS5TSUQpOworCQlpZiAoIW5kbHApIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19FTFMsCisJCQkJICIyNzIxIG5kbHAgbnVsbCBmb3Igb3hpZCAleCBTSUQgJXhcbiIsCisJCQkJCWljbWQtPnVscENvbnRleHQsCisJCQkJCXBoYmEtPmN0X2N0eFt0YWddLlNJRCk7CisJCQlyYyA9IElPQ0JfRVJST1I7CisJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OworCQl9CisJCWljbWQtPnVuLnVscFdvcmRbM10gPSBuZGxwLT5ubHBfcnBpOworCQkvKiBUaGUgZXhjaGFuZ2UgaXMgZG9uZSwgbWFyayB0aGUgZW50cnkgYXMgaW52YWxpZCAqLworCQlwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmPSB+VU5TT0xfVkFMSUQ7CisJfSBlbHNlCisJCWljbWQtPnVscENvbnRleHQgPSAodXNob3J0KSB0YWc7CisKKwlpY21kLT51bHBUaW1lb3V0ID0gcGhiYS0+ZmNfcmF0b3YgKiAyOworCisJLyogWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSA8eGlkPiAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkiMjcyMiBYbWl0IENUIHJlc3BvbnNlIG9uIGV4Y2hhbmdlIHgleCBEYXRhOiB4JXggeCV4XG4iLAorCQkJaWNtZC0+dWxwQ29udGV4dCwgaWNtZC0+dWxwSW9UYWcsIHBoYmEtPmxpbmtfc3RhdGUpOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOworCWN0aW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWN0aW9jYi0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwljdGlvY2ItPmNvbnRleHQzID0gYm1wOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBscGZjX2lzc3VlX2N0X3JzcF9jbXA7CisJY3Rpb2NiLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY3Rpb2NiLT5jb250ZXh0MiA9IE5VTEw7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjdGlvY2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gTlVMTDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gYm1wOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwID0gbmRscDsKKworCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSB7CisJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJY3JlZ192YWwgfD0gKEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCX0KKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjdGlvY2IsIDApOworCisJaWYgKHJjID09IElPQ0JfU1VDQ0VTUykKKwkJcmV0dXJuIDA7IC8qIGRvbmUgZm9yIG5vdyAqLworCitpc3N1ZV9jdF9yc3BfZXhpdDoKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGN0aW9jYik7Citub19jdGlvY2I6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19zZW5kX21nbXRfcnNwIC0gcHJvY2VzcyBhIFNFTkRfTUdNVF9SRVNQIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogU0VORF9NR01UX1JFU1AgZmNfYnNnX2pvYgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfc2VuZF9tZ210X3JzcChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBzZW5kX21nbXRfcmVzcCAqbWdtdF9yZXNwID0gKHN0cnVjdCBzZW5kX21nbXRfcmVzcCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCXN0cnVjdCB1bHBfYmRlNjQgKmJwbDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcCA9IE5VTEw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKKwlpbnQgcmVxdWVzdF9uc2VnOworCWludCBudW1iZGU7CisJZG1hX2FkZHJfdCBidXNhZGRyOworCXVpbnQzMl90IHRhZyA9IG1nbXRfcmVzcC0+dGFnOworCXVuc2lnbmVkIGxvbmcgcmVxYmZyY250ID0KKwkJCSh1bnNpZ25lZCBsb25nKWpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKCFyZXFiZnJjbnQgfHwgKHJlcWJmcmNudCA+ICg4MCAqIEJVRl9TWl80SykpKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2V4aXQ7CisJfQorCisJYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXApIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZXhpdDsKKwl9CisKKwlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CisJaWYgKCFibXAtPnZpcnQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZnJlZV9ibXA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJtcC0+bGlzdCk7CisJYnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgYm1wLT52aXJ0OworCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgeworCQlidXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQlicGwtPnR1cy53ID0gY3B1X3RvX2xlMzIoYnBsLT50dXMudyk7CisJCWJwbC0+YWRkckxvdyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KGJ1c2FkZHIpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CisJCWJwbCsrOworCX0KKworCXJjID0gbHBmY19pc3N1ZV9jdF9yc3AocGhiYSwgam9iLCB0YWcsIGJtcCwgcmVxdWVzdF9uc2VnKTsKKworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKworCS8qIFRCRCBuZWVkIHRvIGhhbmRsZSBhIHRpbWVvdXQgKi8KKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXJjID0gLUVBQ0NFUzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7CisKK3NlbmRfbWdtdF9yc3BfZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK3NlbmRfbWdtdF9yc3BfZXhpdDoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfbW9kZSAtIHByb2Nlc3MgYSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgYSBwb3J0IGludG8gZGlhZ25vc3RpYyBsb29wYmFjaworICogbW9kZSBpbiBvcmRlciB0byBwZXJmb3JtIGEgZGlhZ25vc3RpYyBsb29wYmFjayB0ZXN0LgorICogQWxsIG5ldyBzY3NpIHJlcXVlc3RzIGFyZSBibG9ja2VkLCBhIHNtYWxsIGRlbGF5IGlzIHVzZWQgdG8gYWxsb3cgdGhlCisgKiBzY3NpIHJlcXVlc3RzIHRvIGNvbXBsZXRlIHRoZW4gdGhlIGxpbmsgaXMgYnJvdWdodCBkb3duLiBJZiB0aGUgbGluayBpcworICogaXMgcGxhY2VkIGluIGxvb3BiYWNrIG1vZGUgdGhlbiBzY3NpIHJlcXVlc3RzIGFyZSBhZ2FpbiBhbGxvd2VkCisgKiBzbyB0aGUgc2NzaSBtaWQtbGF5ZXIgZG9lc24ndCBnaXZlIHVwIG9uIHRoZSBwb3J0LgorICogQWxsIG9mIHRoaXMgaXMgZG9uZSBpbi1saW5lLgorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19kaWFnX21vZGUoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV9zZXQgKmxvb3BiYWNrX21vZGU7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0ZDUF9SSU5HXTsKKwl1aW50MzJfdCBsaW5rX2ZsYWdzOworCXVpbnQzMl90IHRpbWVvdXQ7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJaW50IG1ieHN0YXR1czsKKwlpbnQgaSA9IDA7CisJaW50IHJjID0gMDsKKworCS8qIG5vIGRhdGEgdG8gcmV0dXJuIGp1c3QgdGhlIHJldHVybiBjb2RlICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRpYWdfbW9kZV9zZXQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzggUmVjZWl2ZWQgRElBRyBNT0RFIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWxvb3BiYWNrX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV9zZXQgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlsaW5rX2ZsYWdzID0gbG9vcGJhY2tfbW9kZS0+dHlwZTsKKwl0aW1lb3V0ID0gbG9vcGJhY2tfbW9kZS0+dGltZW91dDsKKworCWlmICgocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikgfHwKKwkgICAgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB8fAorCSAgICAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKSB7CisJCXJjID0gLUVBQ0NFUzsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cykgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisKKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9IGVsc2UgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCXdoaWxlIChwcmluZy0+dHhjbXBscV9jbnQpIHsKKwkJaWYgKGkrKyA+IDUwMCkJLyogd2FpdCB1cCB0byA1IHNlY29uZHMgKi8KKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJfQorCisJbWVtc2V0KCh2b2lkICopcG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfRE9XTl9MSU5LOworCXBtYm94cS0+dS5tYi5tYnhPd25lciA9IE9XTl9IT1NUOworCisJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwgTFBGQ19NQk9YX1RNTyk7CisKKwlpZiAoKG1ieHN0YXR1cyA9PSBNQlhfU1VDQ0VTUykgJiYgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMgPT0gMCkpIHsKKwkJLyogd2FpdCBmb3IgbGluayBkb3duIGJlZm9yZSBwcm9jZWVkaW5nICovCisJCWkgPSAwOworCQl3aGlsZSAocGhiYS0+bGlua19zdGF0ZSAhPSBMUEZDX0xJTktfRE9XTikgeworCQkJaWYgKGkrKyA+IHRpbWVvdXQpIHsKKwkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJZ290byBsb29wYmFja19tb2RlX2V4aXQ7CisJCQl9CisKKwkJCW1zbGVlcCgxMCk7CisJCX0KKworCQltZW1zZXQoKHZvaWQgKilwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwkJaWYgKGxpbmtfZmxhZ3MgPT0gSU5URVJOQUxfTE9PUF9CQUNLKQorCQkJcG1ib3hxLT51Lm1iLnVuLnZhckluaXRMbmsubGlua19mbGFncyA9IEZMQUdTX0xPQ0FMX0xCOworCQllbHNlCisJCQlwbWJveHEtPnUubWIudW4udmFySW5pdExuay5saW5rX2ZsYWdzID0KKwkJCQlGTEFHU19UT1BPTE9HWV9NT0RFX0xPT1A7CisKKwkJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfSU5JVF9MSU5LOworCQlwbWJveHEtPnUubWIubWJ4T3duZXIgPSBPV05fSE9TVDsKKworCQltYnhzdGF0dXMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLAorCQkJCQkJICAgICBMUEZDX01CT1hfVE1PKTsKKworCQlpZiAoKG1ieHN0YXR1cyAhPSBNQlhfU1VDQ0VTUykgfHwgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMpKQorCQkJcmMgPSAtRU5PREVWOworCQllbHNlIHsKKwkJCXBoYmEtPmxpbmtfZmxhZyB8PSBMU19MT09QQkFDS19NT0RFOworCQkJLyogd2FpdCBmb3IgdGhlIGxpbmsgYXR0ZW50aW9uIGludGVycnVwdCAqLworCQkJbXNsZWVwKDEwMCk7CisKKwkJCWkgPSAwOworCQkJd2hpbGUgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19IQkFfUkVBRFkpIHsKKwkJCQlpZiAoaSsrID4gdGltZW91dCkgeworCQkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCX0KKworCX0gZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKK2xvb3BiYWNrX21vZGVfZXhpdDoKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMpIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfSBlbHNlIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCS8qCisJICogTGV0IFNMSSBsYXllciByZWxlYXNlIG1ib3hxIGlmIG1ib3ggY29tbWFuZCBjb21wbGV0ZWQgYWZ0ZXIgdGltZW91dC4KKwkgKi8KKwlpZiAobWJ4c3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKworam9iX2Vycm9yOgorCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSBpZiBubyBlcnJvciAqLworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcgLSBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUG9pbnRlciB0byBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQgc28gdGhlIGRpYWcgbG9vcGJhY2sgdGVzdAorICogY2FuIHNlbmQgYW5kIHJlY2VpdmUgaXRzIG93biB1bnNvbGljaXRlZCBDVCBjb21tYW5kLgorICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfcmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgKiBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmZjsKKwlpbnQgc3RhdHVzOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3RhdHVzID0gbHBmY19yZWdfcnBpKHBoYmEsIDAsIHBoYmEtPnBwb3J0LT5mY19teURJRCwKKwkJCQkodWludDhfdCAqKSZwaGJhLT5wcG9ydC0+ZmNfc3BhcmFtLCBtYm94LCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlkbWFidWZmID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBtYm94LT5jb250ZXh0MTsKKwltYm94LT5jb250ZXh0MSA9IE5VTEw7CisJc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIG1ib3gsIExQRkNfTUJPWF9UTU8pOworCisJaWYgKChzdGF0dXMgIT0gTUJYX1NVQ0NFU1MpIHx8IChtYm94LT51Lm1iLm1ieFN0YXR1cykpIHsKKwkJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJCWtmcmVlKGRtYWJ1ZmYpOworCQlpZiAoc3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gRU5PREVWOworCX0KKworCSpycGkgPSBtYm94LT51Lm1iLnVuLnZhcldvcmRzWzBdOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJa2ZyZWUoZG1hYnVmZik7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyAtIHVucmVncyBmcm9tIHRoZSBycGkKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBycGkgb2J0YWluZWQgaW4gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZworICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCWludCBzdGF0dXM7CisKKwkvKiBBbGxvY2F0ZSBtYm94cSBzdHJ1Y3R1cmUgKi8KKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAobWJveCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PTUVNOworCisJbHBmY191bnJlZ19sb2dpbihwaGJhLCAwLCBycGksIG1ib3gpOworCXN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94LCBMUEZDX01CT1hfVE1PKTsKKworCWlmICgoc3RhdHVzICE9IE1CWF9TVUNDRVNTKSB8fCAobWJveC0+dS5tYi5tYnhTdGF0dXMpKSB7CisJCWlmIChzdGF0dXMgIT0gTUJYX1RJTUVPVVQpCisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiBFSU87CisJfQorCisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfZ2V0X3hyaSAtIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnBpOiBSZW1vdGUgcG9ydCBsb2dpbiBpZAorICogQHR4eHJpOiBQb2ludGVyIHRvIHRyYW5zbWl0IGV4Y2hhbmdlIGlkCisgKiBAcnh4cmk6IFBvaW50ZXIgdG8gcmVzcG9uc2UgZXhjaGFiZ2UgaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcyByZXF1aXJlZCB0byBzZW5kCisgKiBhbiB1bnNvbGljaXRlZCBjdCBjb21tYW5kIHdpdGggYSBwYXlsb2FkLiBBIHNwZWNpYWwgbHBmYyBGc1R5cGUgYW5kIENtZFJzcAorICogZmxhZ3MgYXJlIHVzZWQgdG8gdGhlIHVuc29saWN0ZWQgcmVzcG9uc2UgaGFuZGxlciBpcyBhYmxlIHRvIHByb2Nlc3MKKyAqIHRoZSBjdCBjb21tYW5kIHNlbnQgb24gdGhlIHNhbWUgcG9ydC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9nZXRfeHJpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgcnBpLAorCQkJIHVpbnQxNl90ICp0eHhyaSwgdWludDE2X3QgKiByeHhyaSkKK3sKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsICpyc3Bpb2NicTsKKwlJT0NCX3QgKmNtZCwgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZjsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGwgPSBOVUxMOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcSA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkqdHh4cmkgPSAwOworCSpyeHhyaSA9IDA7CisJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KEZDX1JFR19DVF9FVkVOVCwgY3VycmVudC0+cGlkLAorCQkJCVNMSV9DVF9FTFhfTE9PUEJBQ0spOworCWlmICghZXZ0KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisKKwlkbWFidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hYnVmKSB7CisJCWRtYWJ1Zi0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmZG1hYnVmLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRtYWJ1Zi0+bGlzdCk7CisJCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGRtYWJ1Zi0+dmlydDsKKwkJbWVtc2V0KGJwbCwgMCwgc2l6ZW9mKCpicGwpKTsKKwkJY3RyZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKikoYnBsICsgMSk7CisJCWJwbC0+YWRkckhpZ2ggPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtYWJ1Zi0+cGh5cyArIHNpemVvZigqYnBsKSkpOworCQlicGwtPmFkZHJMb3cgPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1hYnVmLT5waHlzICsgc2l6ZW9mKCpicGwpKSk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSAwOworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJfQorCisJaWYgKGNtZGlvY2JxID09IE5VTEwgfHwgcnNwaW9jYnEgPT0gTlVMTCB8fAorCSAgICBkbWFidWYgPT0gTlVMTCB8fCBicGwgPT0gTlVMTCB8fCBjdHJlcSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyX2dldF94cmlfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKworCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJY3RyZXEtPlJldmlzaW9uSWQuYml0cy5JbklkID0gMDsKKwljdHJlcS0+RnNUeXBlID0gU0xJX0NUX0VMWF9MT09QQkFDSzsKKwljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0gRUxYX0xPT1BCQUNLX1hSSV9TRVRVUDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZSA9IDA7CisKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChkbWFidWYtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coZG1hYnVmLT5waHlzKTsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OworCWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVTaXplID0gc2l6ZW9mKCpicGwpOworCisJY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gTEE7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9VTlNPTF9DVEw7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1I7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSBycGk7CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OworCisJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKKwkJCQlyc3Bpb2NicSwKKwkJCQkocGhiYS0+ZmNfcmF0b3YgKiAyKQorCQkJCSsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIGVycl9nZXRfeHJpX2V4aXQ7CisKKwkqdHh4cmkgPSAgcnNwLT51bHBDb250ZXh0OworCisJZXZ0LT53YWl0aW5nID0gMTsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJcmV0X3ZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlldnQtPndxLCAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSwKKwkJKChwaGJhLT5mY19yYXRvdiAqIDIpICsgTFBGQ19EUlZSX1RJTUVPVVQpICogSFopOworCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpKQorCQlyZXRfdmFsID0gKHJldF92YWwpID8gRUlOVFIgOiBFVElNRURPVVQ7CisJZWxzZSB7CisJCXJldF92YWwgPSBJT0NCX1NVQ0NFU1M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJKnJ4eHJpID0gKGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCisJCQkJICAgICB0eXBlb2Yoc3RydWN0IGV2ZW50X2RhdGEpLAorCQkJCSAgICAgbm9kZSkpLT5pbW1lZF9kYXQ7CisJfQorCWV2dC0+d2FpdGluZyA9IDA7CisKK2Vycl9nZXRfeHJpX2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLworCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWlmIChkbWFidWYpIHsKKwkJaWYgKGRtYWJ1Zi0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1Zi0+dmlydCwgZG1hYnVmLT5waHlzKTsKKwkJa2ZyZWUoZG1hYnVmKTsKKwl9CisKKwlpZiAoY21kaW9jYnEgJiYgKHJldF92YWwgIT0gSU9DQl9USU1FRE9VVCkpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWlmIChyc3Bpb2NicSkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9hbGxvYyAtIGZpbGxzIGluIGEgYmRlIHN0cnVjdCB3aXRoIGRtYSBidWZmZXJzCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBicGw6IFBvaW50ZXIgdG8gNjQgYml0IGJkZSBzdHJ1Y3R1cmUKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcworICogQG5vY29weWRhdGE6IEZsYWcgdG8gY29weSB1c2VyIGRhdGEgaW50byB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHBhZ2Ugc2l6ZSBidWZmZXJzIGFuZCBwb3B1bGF0ZXMgYW4gbHBmY19kbWFidWZleHQuCisgKiBJZiBhbGxvd2VkIHRoZSB1c2VyIGRhdGEgcG9pbnRlZCB0byB3aXRoIGluZGF0YXB0ciBpcyBjb3BpZWQgaW50byB0aGUga2VybmVsCisgKiBtZW1vcnkuIFRoZSBjaGFpbmVkIGxpc3Qgb2YgcGFnZSBzaXplIGJ1ZmZlcnMgaXMgcmV0dXJuZWQuCisgKiovCitzdGF0aWMgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICoKK2RpYWdfY21kX2RhdGFfYWxsb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkgICBzdHJ1Y3QgdWxwX2JkZTY0ICpicGwsIHVpbnQzMl90IHNpemUsCisJCSAgIGludCBub2NvcHlkYXRhKQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxpc3QgPSBOVUxMOworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqZG1wOworCWludCBjbnQsIG9mZnNldCA9IDAsIGkgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisKKwlwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisKKwl3aGlsZSAoc2l6ZSkgeworCQkvKiBXZSBnZXQgY2h1bmtzIG9mIDRLICovCisJCWlmIChzaXplID4gQlVGX1NaXzRLKQorCQkJY250ID0gQlVGX1NaXzRLOworCQllbHNlCisJCQljbnQgPSBzaXplOworCisJCS8qIGFsbG9jYXRlIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCBidWZmZXIgaGVhZGVyICovCisJCWRtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRtcCkKKwkJCWdvdG8gb3V0OworCisJCUlOSVRfTElTVF9IRUFEKCZkbXAtPmRtYS5saXN0KTsKKworCQkvKiBRdWV1ZSBpdCB0byBhIGxpbmtlZCBsaXN0ICovCisJCWlmIChtbGlzdCkKKwkJCWxpc3RfYWRkX3RhaWwoJmRtcC0+ZG1hLmxpc3QsICZtbGlzdC0+ZG1hLmxpc3QpOworCQllbHNlCisJCQltbGlzdCA9IGRtcDsKKworCQkvKiBhbGxvY2F0ZSBidWZmZXIgKi8KKwkJZG1wLT5kbWEudmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGNpZGV2LT5kZXYsCisJCQkJCQkgICBjbnQsCisJCQkJCQkgICAmKGRtcC0+ZG1hLnBoeXMpLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkbXAtPmRtYS52aXJ0KQorCQkJZ290byBvdXQ7CisKKwkJZG1wLT5zaXplID0gY250OworCisJCWlmIChub2NvcHlkYXRhKSB7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwaGJhLT5wY2lkZXYsCisJCQkJZG1wLT5kbWEucGh5cywgTFBGQ19CUExfU0laRSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJfSBlbHNlIHsKKwkJCW1lbXNldCgodWludDhfdCAqKWRtcC0+ZG1hLnZpcnQsIDAsIGNudCk7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CisJCX0KKworCQkvKiBidWlsZCBidWZmZXIgcHRyIGxpc3QgZm9yIElPQ0IgKi8KKwkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1wLT5kbWEucGh5cykpOworCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtcC0+ZG1hLnBoeXMpKTsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gKHVzaG9ydCkgY250OworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCWJwbCsrOworCisJCWkrKzsKKwkJb2Zmc2V0ICs9IGNudDsKKwkJc2l6ZSAtPSBjbnQ7CisJfQorCisJbWxpc3QtPmZsYWcgPSBpOworCXJldHVybiBtbGlzdDsKK291dDoKKwlkaWFnX2NtZF9kYXRhX2ZyZWUocGhiYSwgbWxpc3QpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMgLSBwb3N0IHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGFuIHVuc29sIENUIGNtZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnh4cmk6IFJlY2VpdmUgZXhjaGFuZ2UgaWQKKyAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHBvc3RzIGEgZGF0YSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIHRvIHJlY2lldmUKKyAqIGFuIHVuc29saWN0ZWQgQ1QgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9wb3N0X3J4YnVmcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHJ4eHJpLAorCQkJICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxOworCUlPQ0JfdCAqY21kID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnJ4Ym1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXBbMl0gPSB7TlVMTCwgTlVMTH07CisJc3RydWN0IHVscF9iZGU2NCAqcnhicGwgPSBOVUxMOworCXVpbnQzMl90IG51bV9iZGU7CisJc3RydWN0IGxwZmNfZG1hYnVmZXh0ICpyeGJ1ZmZlciA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCWludCBpID0gMDsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJ4Ym1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4Ym1wICE9IE5VTEwpIHsKKwkJcnhibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJnJ4Ym1wLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJ4Ym1wLT5saXN0KTsKKwkJcnhicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSByeGJtcC0+dmlydDsKKwkJcnhidWZmZXIgPSBkaWFnX2NtZF9kYXRhX2FsbG9jKHBoYmEsIHJ4YnBsLCBsZW4sIDApOworCX0KKworCWlmICghY21kaW9jYnEgfHwgIXJ4Ym1wIHx8ICFyeGJwbCB8fCAhcnhidWZmZXIpIHsKKwkJcmV0X3ZhbCA9IEVOT01FTTsKKwkJZ290byBlcnJfcG9zdF9yeGJ1ZnNfZXhpdDsKKwl9CisKKwkvKiBRdWV1ZSBidWZmZXJzIGZvciB0aGUgcmVjZWl2ZSBleGNoYW5nZSAqLworCW51bV9iZGUgPSAodWludDMyX3QpcnhidWZmZXItPmZsYWc7CisJZG1wID0gJnJ4YnVmZmVyLT5kbWE7CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJaSA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJmRtcC0+bGlzdCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnIsIG5leHQsICZoZWFkKSB7CisJCW1wW2ldID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQlsaXN0X2RlbChjdXJyKTsKKworCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CisJCQltcFtpXS0+YnVmZmVyX3RhZyA9IGxwZmNfc2xpX2dldF9idWZmZXJfdGFnKHBoYmEpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJIaWdoID0KKwkJCQlwdXRQYWRkckhpZ2gobXBbaV0tPnBoeXMpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJMb3cgPQorCQkJCXB1dFBhZGRyTG93KG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJ1ZmZlcl90YWcgPSBtcFtpXS0+YnVmZmVyX3RhZzsKKwkJCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9RVUVfWFJJNjRfQ1g7CisJCQljbWQtPnVscFBVID0gMDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQkJY21kLT51bHBCZGVDb3VudCA9IDE7CisJCQljbWQtPnVuc2xpMy5xdWVfeHJpNjRjeF9leHRfd29yZHMuZWJkZV9jb3VudCA9IDA7CisKKwkJfSBlbHNlIHsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCQkJY21kLT51bHBCZGVDb3VudCA9ICsraTsKKworCQkJaWYgKCgtLW51bV9iZGUgPiAwKSAmJiAoaSA8IDIpKQorCQkJCWNvbnRpbnVlOworCisJCQljbWQtPnVscENvbW1hbmQgPSBDTURfUVVFX1hSSV9CVUY2NF9DWDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQl9CisKKwkJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwkJY21kLT51bHBDb250ZXh0ID0gcnh4cmk7CisKKwkJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOworCisJCWlmIChyZXRfdmFsID09IElPQ0JfRVJST1IpIHsKKwkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCShzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFswXSk7CisJCQlpZiAobXBbMV0pCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCSAgKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wWzFdKTsKKwkJCWRtcCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJCXJldF92YWwgPSBFSU87CisJCQlnb3RvIGVycl9wb3N0X3J4YnVmc19leGl0OworCQl9CisKKwkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFswXSk7CisJCWlmIChtcFsxXSkgeworCQkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFsxXSk7CisJCQltcFsxXSA9IE5VTEw7CisJCX0KKworCQkvKiBUaGUgaW9jYiB3YXMgZnJlZWQgYnkgbHBmY19zbGlfaXNzdWVfaW9jYiAqLworCQljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwkJaWYgKCFjbWRpb2NicSkgeworCQkJZG1wID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQkJcmV0X3ZhbCA9IEVJTzsKKwkJCWdvdG8gZXJyX3Bvc3RfcnhidWZzX2V4aXQ7CisJCX0KKworCQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJCWkgPSAwOworCX0KKwlsaXN0X2RlbCgmaGVhZCk7CisKK2Vycl9wb3N0X3J4YnVmc19leGl0OgorCisJaWYgKHJ4Ym1wKSB7CisJCWlmIChyeGJtcC0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHJ4Ym1wLT52aXJ0LCByeGJtcC0+cGh5cyk7CisJCWtmcmVlKHJ4Ym1wKTsKKwl9CisKKwlpZiAoY21kaW9jYnEpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfdGVzdCAtIHdpdGggYSBwb3J0IGluIGxvb3BiYWNrIGlzc3VlcyBhIEN0IGNtZCB0byBpdHNlbGYKKyAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX1RFU1QgZmNfYnNnX2pvYgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYSB1c2VyIGRhdGEgYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkIGFuZCByZWNlaXZlZCBvbgorICogdGhlIHNhbWUgcG9ydCwgdGhlIGxpbmsgbXVzdCBiZSB1cCBhbmQgaW4gbG9vcGJhY2sgbW9kZSBwcmlvcgorICogdG8gYmVpbmcgY2FsbGVkLgorICogMS4gQSBrZXJuZWwgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byBjb3B5IHRoZSB1c2VyIGRhdGEgaW50by4KKyAqIDIuIFRoZSBwb3J0IHJlZ2lzdGVycyB3aXRoICJpdHNlbGYiLgorICogMy4gVGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGV4Y2hhbmdlIGlkcyBhcmUgb2J0YWluZWQuCisgKiA0LiBUaGUgcmVjZWl2ZSBleGNoYW5nZSBpZCBpcyBwb3N0ZWQuCisgKiA1LiBBIG5ldyBlbHMgbG9vcGJhY2sgZXZlbnQgaXMgY3JlYXRlZC4KKyAqIDYuIFRoZSBjb21tYW5kIGFuZCByZXNwb25zZSBpb2NicyBhcmUgYWxsb2NhdGVkLgorICogNy4gVGhlIGNtZCBpb2NiIEZzVHlwZSBpcyBzZXQgdG8gZWx4IGxvb3BiYWNrIGFuZCB0aGUgQ21kUnNwIHRvIGxvb3BwYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBuIHRpbWVzIHdoaWxlIHRoZSBwb3J0IGlzIGluIGxvb3BiYWNrCisgKiBzbyBpdCBpcyB0aGUgYXBwcyByZXNwb25zaWJpbGl0eSB0byBpc3N1ZSBhIHJlc2V0IHRvIHRha2UgdGhlIHBvcnQgb3V0CisgKiBvZiBsb29wYmFjayBtb2RlLgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfZGlhZ190ZXN0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV90ZXN0ICpkaWFnX21vZGU7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CisJc3RydWN0IGV2ZW50X2RhdGEgKmV2ZGF0OworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmdWxsX3NpemU7CisJc2l6ZV90IHNlZ21lbnRfbGVuID0gMCwgc2VnbWVudF9vZmZzZXQgPSAwLCBjdXJyZW50X29mZnNldCA9IDA7CisJdWludDE2X3QgcnBpOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwgKnJzcGlvY2JxOworCUlPQ0JfdCAqY21kLCAqcnNwOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnR4Ym1wOworCXN0cnVjdCB1bHBfYmRlNjQgKnR4YnBsID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKnR4YnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICAqY3VycjsKKwl1aW50MTZfdCB0eHhyaSwgcnh4cmk7CisJdWludDMyX3QgbnVtX2JkZTsKKwl1aW50OF90ICpwdHIgPSBOVUxMLCAqcnhfZGF0YWJ1ZiA9IE5VTEw7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRhdGFvdXQgPSBOVUxMOworCXVpbnQzMl90IHRvdGFsX21lbTsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyByZXR1cm5lZCByZXR1cm4ganVzdCB0aGUgcmV0dXJuIGNvZGUgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzkgUmVjZWl2ZWQgRElBRyBURVNUIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPQorCQlqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlkaWFnX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV90ZXN0ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpIHx8CisJICAgIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgfHwKKwkgICAgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmICghbHBmY19pc19saW5rX3VwKHBoYmEpIHx8ICEocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJZnVsbF9zaXplID0gc2l6ZSArIEVMWF9MT09QQkFDS19IRUFERVJfU1o7IC8qIHBsdXMgdGhlIGhlYWRlciAqLworCisJaWYgKChzaXplID09IDApIHx8IChzaXplID4gODAgKiBCVUZfU1pfNEspKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJaWYgKHNpemUgPj0gQlVGX1NaXzRLKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YS4gSWYgYnVmZmVyIGlzIGJpZ2dlciB0aGFuIDY0aywKKwkJICogdGhlbiB3ZSBhbGxvY2F0ZSA2NGsgYW5kIHJlLXVzZSB0aGF0IGJ1ZmZlciBvdmVyIGFuZCBvdmVyIHRvCisJCSAqIHhmZXIgdGhlIHdob2xlIGJsb2NrLiBUaGlzIGlzIGJlY2F1c2UgTGludXgga2VybmVsIGhhcyBhCisJCSAqIHByb2JsZW0gYWxsb2NhdGluZyBtb3JlIHRoYW4gMTIwayBvZiBrZXJuZWwgc3BhY2UgbWVtb3J5LiBTYXcKKwkJICogcHJvYmxlbSB3aXRoIEdFVF9GQ1BUQVJHRVRNQVBQSU5HLi4uCisJCSAqLworCQlpZiAoc2l6ZSA8PSAoNjQgKiAxMDI0KSkKKwkJCXRvdGFsX21lbSA9IHNpemU7CisJCWVsc2UKKwkJCXRvdGFsX21lbSA9IDY0ICogMTAyNDsKKwl9IGVsc2UKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBpb2N0bCBkYXRhICovCisJCXRvdGFsX21lbSA9IEJVRl9TWl80SzsKKworCWRhdGFvdXQgPSBrbWFsbG9jKHRvdGFsX21lbSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGFvdXQgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXB0ciA9IGRhdGFvdXQ7CisJcHRyICs9IEVMWF9MT09QQkFDS19IRUFERVJfU1o7CisJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJcHRyLCBzaXplKTsKKworCXJjID0gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhwaGJhLCAmcnBpKTsKKwlpZiAocmMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlyYyA9IGxwZmNkaWFnX2xvb3BfZ2V0X3hyaShwaGJhLCBycGksICZ0eHhyaSwgJnJ4eHJpKTsKKwlpZiAocmMpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJcmMgPSBscGZjZGlhZ19sb29wX3Bvc3RfcnhidWZzKHBoYmEsIHJ4eHJpLCBmdWxsX3NpemUpOworCWlmIChyYykgeworCQlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQgPSBscGZjX2JzZ19ldmVudF9uZXcoRkNfUkVHX0NUX0VWRU5ULCBjdXJyZW50LT5waWQsCisJCQkJU0xJX0NUX0VMWF9MT09QQkFDSyk7CisJaWYgKCFldnQpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJdHhibXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKworCWlmICh0eGJtcCkgeworCQl0eGJtcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmdHhibXAtPnBoeXMpOworCQlJTklUX0xJU1RfSEVBRCgmdHhibXAtPmxpc3QpOworCQl0eGJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIHR4Ym1wLT52aXJ0OworCQlpZiAodHhicGwpCisJCQl0eGJ1ZmZlciA9IGRpYWdfY21kX2RhdGFfYWxsb2MocGhiYSwKKwkJCQkJCQl0eGJwbCwgZnVsbF9zaXplLCAwKTsKKwl9CisKKwlpZiAoIWNtZGlvY2JxIHx8ICFyc3Bpb2NicSB8fCAhdHhibXAgfHwgIXR4YnBsIHx8ICF0eGJ1ZmZlcikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZ0eGJ1ZmZlci0+ZG1hLmxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyciwgJmhlYWQsIGxpc3QpIHsKKwkJc2VnbWVudF9sZW4gPSAoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKWN1cnIpLT5zaXplOworCQlpZiAoY3VycmVudF9vZmZzZXQgPT0gMCkgeworCQkJY3RyZXEgPSBjdXJyLT52aXJ0OworCQkJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKwkJCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJCQljdHJlcS0+UmV2aXNpb25JZC5iaXRzLkluSWQgPSAwOworCQkJY3RyZXEtPkZzVHlwZSA9IFNMSV9DVF9FTFhfTE9PUEJBQ0s7CisJCQljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPSBFTFhfTE9PUEJBQ0tfREFUQTsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5TaXplICAgPSBzaXplOworCQkJc2VnbWVudF9vZmZzZXQgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQl9IGVsc2UKKwkJCXNlZ21lbnRfb2Zmc2V0ID0gMDsKKworCQlCVUdfT04oc2VnbWVudF9vZmZzZXQgPj0gc2VnbWVudF9sZW4pOworCQltZW1jcHkoY3Vyci0+dmlydCArIHNlZ21lbnRfb2Zmc2V0LAorCQkJcHRyICsgY3VycmVudF9vZmZzZXQsCisJCQlzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0KTsKKworCQljdXJyZW50X29mZnNldCArPSBzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0OworCQlCVUdfT04oY3VycmVudF9vZmZzZXQgPiBzaXplKTsKKwl9CisJbGlzdF9kZWwoJmhlYWQpOworCisJLyogQnVpbGQgdGhlIFhNSVRfU0VRVUVOQ0UgaW9jYiAqLworCisJbnVtX2JkZSA9ICh1aW50MzJfdCl0eGJ1ZmZlci0+ZmxhZzsKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaCh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlU2l6ZSA9IChudW1fYmRlICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IChMUyB8IExBKTsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlJjdGwgPSBGQ19SQ1RMX0REX1VOU09MX0NUTDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwljbWQtPnVscEJkZUNvdW50ID0gMTsKKwljbWQtPnVscExlID0gMTsKKwljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWNtZC0+dWxwQ29udGV4dCA9IHR4eHJpOworCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKKwkJCQkgICAgICAocGhiYS0+ZmNfcmF0b3YgKiAyKSArIExQRkNfRFJWUl9USU1FT1VUKTsKKworCWlmICgocmMgIT0gSU9DQl9TVUNDRVNTKSB8fCAocnNwLT51bHBTdGF0dXMgIT0gSU9DQl9TVUNDRVNTKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQtPndhaXRpbmcgPSAxOworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCWV2dC0+d3EsICFsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpLAorCQkoKHBoYmEtPmZjX3JhdG92ICogMikgKyBMUEZDX0RSVlJfVElNRU9VVCkgKiBIWik7CisJZXZ0LT53YWl0aW5nID0gMDsKKwlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkKKwkJcmMgPSAocmMpID8gLUVJTlRSIDogLUVUSU1FRE9VVDsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJZXZkYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCSAgIHR5cGVvZigqZXZkYXQpLCBub2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyeF9kYXRhYnVmID0gZXZkYXQtPmRhdGE7CisJCWlmIChldmRhdC0+bGVuICE9IGZ1bGxfc2l6ZSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElCREZDLAorCQkJCSIxNjAzIExvb3BiYWNrIHRlc3QgZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkICIKKwkJCQkiZGF0YSBsZW5ndGguIGFjdHVhbCBsZW5ndGggMHgleCBleHBlY3RlZCAiCisJCQkJImxlbmd0aCAweCV4XG4iLAorCQkJCWV2ZGF0LT5sZW4sIGZ1bGxfc2l6ZSk7CisJCQlyYyA9IC1FSU87CisJCX0gZWxzZSBpZiAocnhfZGF0YWJ1ZiA9PSBOVUxMKQorCQkJcmMgPSAtRUlPOworCQllbHNlIHsKKwkJCXJjID0gSU9DQl9TVUNDRVNTOworCQkJLyogc2tpcCBvdmVyIGVseCBsb29wYmFjayBoZWFkZXIgKi8KKwkJCXJ4X2RhdGFidWYgKz0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJCSAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCQkJICAgIHJ4X2RhdGFidWYsIHNpemUpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gc2l6ZTsKKwkJfQorCX0KKworZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDoKKwlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiBkZWxldGUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisKKwlpZiAoY21kaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisKKwlpZiAocnNwaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisKKwlpZiAodHhibXAgIT0gTlVMTCkgeworCQlpZiAodHhicGwgIT0gTlVMTCkgeworCQkJaWYgKHR4YnVmZmVyICE9IE5VTEwpCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsIHR4YnVmZmVyKTsKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHR4Ym1wLT52aXJ0LCB0eGJtcC0+cGh5cyk7CisJCX0KKwkJa2ZyZWUodHhibXApOworCX0KKworbG9vcGJhY2tfdGVzdF9leGl0OgorCWtmcmVlKGRhdGFvdXQpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlIGlmIG5vIGVycm9yICovCisJaWYgKHJjID09IDApCisJCWpvYi0+am9iX2RvbmUoam9iKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfZ2V0X2RmY19yZXYgLSBwcm9jZXNzIGEgR0VUX0RGQ19SRVYgYnNnIHZlbmRvciBjb21tYW5kCisgKiBAam9iOiBHRVRfREZDX1JFViBmY19ic2dfam9iCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19nZXRfZGZjX3JldihzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBnZXRfbWdtdF9yZXYgKmV2ZW50X3JlcTsKKwlzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICpldmVudF9yZXBseTsKKwlpbnQgcmMgPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQwIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICopCisJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7CisKKwlpZiAoam9iLT5yZXBseV9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQxIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcGx5IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlldmVudF9yZXBseS0+aW5mby5hX01ham9yID0gTUFOQUdFTUVOVF9NQUpPUl9SRVY7CisJZXZlbnRfcmVwbHktPmluZm8uYV9NaW5vciA9IE1BTkFHRU1FTlRfTUlOT1JfUkVWOworam9iX2Vycm9yOgorCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX3dha2VfbWJveF93YWl0IC0gbHBmY19ic2dfaXNzdWVfbWJveCBtYm94IGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94cTogUG9pbnRlciB0byBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gZm9yIG1haWxib3ggY29tbWFuZHMgaXNzdWVkIGZyb20KKyAqIGxwZmNfYnNnX2lzc3VlX21ib3ggZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZQorICogbWFpbGJveCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHdha2UgdXAgdGhyZWFkIHdhaXRpbmcgb24gdGhlIHdhaXQgcXVldWUgcG9pbnRlZCBieSBjb250ZXh0MQorICogb2YgdGhlIG1haWxib3guCisgKiovCit2b2lkCitscGZjX2JzZ193YWtlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3hxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IHBtYm94cS0+Y29udGV4dDE7CisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXBtYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gucG1ib3hxLT51Lm1iOworCW1iID0gZGRfZGF0YS0+Y29udGV4dF91bi5tYm94Lm1iOworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iOworCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCXNpemUgPSBqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBOVUxMOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwltZW1wb29sX2ZyZWUoZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJa2ZyZWUobWIpOworCWtmcmVlKGRkX2RhdGEpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzIC0gdGVzdCBmb3IgYSBzdXBwb3J0ZWQgbWFpbGJveCBjb21tYW5kCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBTb21lIGNvbW1hbmRzIHJlcXVpcmUgdGhlIHBvcnQgdG8gYmUgb2ZmbGluZSwgc29tZSBtYXkgbm90IGJlIGNhbGxlZCBmcm9tCisgKiB0aGUgYXBwbGljYXRpb24uCisgKiovCitzdGF0aWMgaW50IGxwZmNfYnNnX2NoZWNrX2NtZF9hY2Nlc3Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCU1BSUxCT1hfdCAqbWIsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwkvKiByZXR1cm4gbmVnYXRpdmUgZXJyb3IgdmFsdWVzIGZvciBic2cgam9iICovCisJc3dpdGNoIChtYi0+bWJ4Q29tbWFuZCkgeworCS8qIE9mZmxpbmUgb25seSAqLworCWNhc2UgTUJYX0lOSVRfTElOSzoKKwljYXNlIE1CWF9ET1dOX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX1JJTkc6CisJY2FzZSBNQlhfUkVTRVRfUklORzoKKwljYXNlIE1CWF9VTlJFR19MT0dJTjoKKwljYXNlIE1CWF9DTEVBUl9MQToKKwljYXNlIE1CWF9EVU1QX0NPTlRFWFQ6CisJY2FzZSBNQlhfUlVOX0RJQUdTOgorCWNhc2UgTUJYX1JFU1RBUlQ6CisJY2FzZSBNQlhfU0VUX01BU0s6CisJCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MyBDb21tYW5kIDB4JXggaXMgaWxsZWdhbCBpbiBvbi1saW5lICIKKwkJCQkic3RhdGVcbiIsCisJCQkJbWItPm1ieENvbW1hbmQpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCWNhc2UgTUJYX1dSSVRFX05WOgorCWNhc2UgTUJYX1dSSVRFX1ZQQVJNUzoKKwljYXNlIE1CWF9MT0FEX1NNOgorCWNhc2UgTUJYX1JFQURfTlY6CisJY2FzZSBNQlhfUkVBRF9DT05GSUc6CisJY2FzZSBNQlhfUkVBRF9SQ09ORklHOgorCWNhc2UgTUJYX1JFQURfU1RBVFVTOgorCWNhc2UgTUJYX1JFQURfWFJJOgorCWNhc2UgTUJYX1JFQURfUkVWOgorCWNhc2UgTUJYX1JFQURfTE5LX1NUQVQ6CisJY2FzZSBNQlhfRFVNUF9NRU1PUlk6CisJY2FzZSBNQlhfRE9XTl9MT0FEOgorCWNhc2UgTUJYX1VQREFURV9DRkc6CisJY2FzZSBNQlhfS0lMTF9CT0FSRDoKKwljYXNlIE1CWF9MT0FEX0FSRUE6CisJY2FzZSBNQlhfTE9BRF9FWFBfUk9NOgorCWNhc2UgTUJYX0JFQUNPTjoKKwljYXNlIE1CWF9ERUxfTERfRU5UUlk6CisJY2FzZSBNQlhfU0VUX0RFQlVHOgorCWNhc2UgTUJYX1dSSVRFX1dXTjoKKwljYXNlIE1CWF9TTEk0X0NPTkZJRzoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPR19TVEFUVVM6CisJY2FzZSBNQlhfV1JJVEVfRVZFTlRfTE9HOgorCWNhc2UgTUJYX1BPUlRfQ0FQQUJJTElUSUVTOgorCWNhc2UgTUJYX1BPUlRfSU9WX0NPTlRST0w6CisJCWJyZWFrOworCWNhc2UgTUJYX1NFVF9WQVJJQUJMRToKKwljYXNlIE1CWF9SVU5fQklVX0RJQUc2NDoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPRzoKKwljYXNlIE1CWF9SRUFEX1NQQVJNNjQ6CisJY2FzZSBNQlhfUkVBRF9MQToKKwljYXNlIE1CWF9SRUFEX0xBNjQ6CisJY2FzZSBNQlhfUkVHX0xPR0lOOgorCWNhc2UgTUJYX1JFR19MT0dJTjY0OgorCWNhc2UgTUJYX0NPTkZJR19QT1JUOgorCWNhc2UgTUJYX1JVTl9CSVVfRElBRzoKKwlkZWZhdWx0OgorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJIjI3NDIgVW5rbm93biBDb21tYW5kIDB4JXhcbiIsCisJCQltYi0+bWJ4Q29tbWFuZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7IC8qIG9rICovCit9CisKKy8qKgorICogbHBmY19ic2dfaXNzdWVfbWJveCAtIGlzc3VlcyBhIG1haWxib3ggY29tbWFuZCBvbiBiZWhhbGYgb2YgYW4gYXBwCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBBbGxvY2F0ZSBhIHRyYWNraW5nIG9iamVjdCwgbWFpbGJveCBjb21tYW5kIG1lbW9yeSwgZ2V0IGEgbWFpbGJveAorICogZnJvbSB0aGUgbWFpbGJveCBwb29sLCBjb3B5IHRoZSBjYWxsZXIgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIElmIG9mZmxpbmUgYW5kIHRoZSBzbGkgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcG9sbCBmb3IgdGhlIGNvbW1hbmQgKHBvcnQgaXMKKyAqIGJlaW5nIHJlc2V0KSBhbmQgY29tLXBsZXRlIHRoZSBqb2IsIG90aGVyd2lzZSBpc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFuZAorICogbGV0IG91ciBjb21wbGV0aW9uIGhhbmRsZXIgZmluaXNoIHRoZSBjb21tYW5kLgorICoqLworc3RhdGljIHVpbnQzMl90CitscGZjX2JzZ19pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2JzZ19qb2IgKmpvYiwKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IHNpemU7CisJaW50IHJjID0gMDsKKworCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjcyNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYikgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCisJcmMgPSBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzKHBoYmEsIG1iLCB2cG9ydCk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiByYzsgLyogbXVzdCBiZSBuZWdhdGl2ZSAqLworCX0KKworCW1lbXNldChwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwlwbWIgPSAmcG1ib3hxLT51Lm1iOworCW1lbWNweShwbWIsIG1iLCBzaXplb2YoKnBtYikpOworCXBtYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKKwlwbWJveHEtPmNvbnRleHQxID0gTlVMTDsKKwlwbWJveHEtPnZwb3J0ID0gdnBvcnQ7CisKKwlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCSAgICAoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfUE9MTCk7CisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQkJaWYgKHJjICE9IE1CWF9USU1FT1VUKSB7CisJCQkJa2ZyZWUoZGRfZGF0YSk7CisJCQkJa2ZyZWUobWIpOworCQkJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJfQorCQkJcmV0dXJuICAocmMgPT0gTUJYX1RJTUVPVVQpID8gLUVUSU1FIDogLUVOT0RFVjsKKwkJfQorCisJCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJbWIsIHNpemUpOworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJLyogbm90IHdhaXRpbmcgbWJveCBhbHJlYWR5IGRvbmUgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2V0dXAgd2FrZSBjYWxsIGFzIElPQ0IgY2FsbGJhY2sgKi8KKwlwbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfYnNnX3dha2VfbWJveF93YWl0OworCS8qIHNldHVwIGNvbnRleHQgZmllbGQgdG8gcGFzcyB3YWl0X3F1ZXVlIHBvaW50ZXIgdG8gd2FrZSBmdW5jdGlvbiAqLworCXBtYm94cS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX01CT1g7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSA9IHBtYm94cTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gubWIgPSBtYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYiA9IGpvYjsKKwlqb2ItPmRkX2RhdGEgPSBkZF9kYXRhOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWJveHEsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGxwZmNfYnNnX21ib3hfY21kIC0gcHJvY2VzcyBhbiBmYyBic2cgTFBGQ19CU0dfVkVORE9SX01CT1ggY29tbWFuZAorICogQGpvYjogTUJPWCBmY19ic2dfam9iIGZvciBMUEZDX0JTR19WRU5ET1JfTUJPWC4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX21ib3hfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJaW50IHJjID0gMDsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGZjX21ib3hfcmVxKSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM3IFJlY2VpdmVkIE1CT1hfUkVRIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPSBQQUdFX1NJWkUpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcmMgPSBscGZjX2JzZ19pc3N1ZV9tYm94KHBoYmEsIGpvYiwgdnBvcnQpOworCitqb2JfZXJyb3I6CisJaWYgKHJjID09IDApIHsKKwkJLyogam9iIGRvbmUgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCX0gZWxzZSBpZiAocmMgPT0gMSkKKwkJLyogam9iIHN1Ym1pdHRlZCwgd2lsbCBjb21wbGV0ZSBsYXRlciovCisJCXJjID0gMDsgLyogcmV0dXJuIHplcm8sIG5vIGVycm9yICovCisJZWxzZSB7CisJCS8qIHNvbWUgZXJyb3Igb2NjdXJyZWQgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtODM0LDM4ICsyNjQwLDU3IEBACiAvKioKICAqIGxwZmNfYnNnX2hzdF92ZW5kb3IgLSBwcm9jZXNzIGEgdmVuZG9yLXNwZWNpZmljIGZjX2JzZ19qb2IKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfYnNnX2hzdF92ZW5kb3Ioc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlpbnQgY29tbWFuZCA9IGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF07CisJaW50IHJjOwogCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UOgotCQlyZXR1cm4gbHBmY19ic2dfc2V0X2V2ZW50KGpvYik7CisJCXJjID0gbHBmY19ic2dfaGJhX3NldF9ldmVudChqb2IpOwogCQlicmVhazsKLQogCWNhc2UgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVDoKLQkJcmV0dXJuIGxwZmNfYnNnX2dldF9ldmVudChqb2IpOworCQlyYyA9IGxwZmNfYnNnX2hiYV9nZXRfZXZlbnQoam9iKTsKIAkJYnJlYWs7Ci0KKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9TRU5EX01HTVRfUkVTUDoKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfcnNwKGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERToKKwkJcmMgPSBscGZjX2JzZ19kaWFnX21vZGUoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfRElBR19URVNUOgorCQlyYyA9IGxwZmNfYnNnX2RpYWdfdGVzdChqb2IpOworCQlicmVhazsKKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVY6CisJCXJjID0gbHBmY19ic2dfZ2V0X2RmY19yZXYoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfTUJPWDoKKwkJcmMgPSBscGZjX2JzZ19tYm94X2NtZChqb2IpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJjOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3JlcXVlc3QgLSBoYW5kbGUgYSBic2cgcmVxdWVzdCBmcm9tIHRoZSBGQyB0cmFuc3BvcnQKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXVpbnQzMl90IG1zZ2NvZGU7Ci0JaW50IHJjID0gLUVJTlZBTDsKKwlpbnQgcmM7CiAKIAltc2djb2RlID0gam9iLT5yZXF1ZXN0LT5tc2djb2RlOwotCiAJc3dpdGNoIChtc2djb2RlKSB7CiAJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKIAkJcmMgPSBscGZjX2JzZ19oc3RfdmVuZG9yKGpvYik7CkBAIC04NzQsOSArMjY5OSwxMyBAQAogCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2Vscyhqb2IpOwogCQlicmVhazsKIAljYXNlIEZDX0JTR19SUFRfQ1Q6Ci0JCXJjID0gbHBmY19ic2dfcnBvcnRfY3Qoam9iKTsKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kKGpvYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CiAJCWJyZWFrOwogCX0KIApAQCAtODg5LDE3ICsyNzE4LDcxIEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBqdXN0IGFib3J0cyB0aGUgam9iJ3MgSU9DQi4gIFRoZSBhYm9ydGVkIElPQ0Igd2lsbCByZXR1cm4gdG8KICAqIHRoZSB3YWl0aW5nIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGFuZGxlIHBhc3NpbmcgdGhlIGVycm9yIGJhY2sgdG8gdXNlcnNwYWNlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwotCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopam9iLT5kZF9kYXRhOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiOworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCXN0cnVjdCBscGZjX2JzZ19pb2NiICppb2NiOworCXN0cnVjdCBscGZjX2JzZ19tYm94ICptYm94OwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY21kaW9jYikKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSAoc3RydWN0IGJzZ19qb2JfZGF0YSAqKWpvYi0+ZGRfZGF0YTsKKwkvKiB0aW1lb3V0IGFuZCBjb21wbGV0aW9uIGNyb3NzZWQgcGF0aHMgaWYgbm8gZGRfZGF0YSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoZGRfZGF0YS0+dHlwZSkgeworCWNhc2UgVFlQRV9JT0NCOgorCQlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwkJY21kaW9jYiA9IGlvY2ItPmNtZGlvY2JxOworCQkvKiBoaW50IHRvIGNvbXBsZXRpb24gaGFuZGxlciB0aGF0IHRoZSBqb2IgdGltZWQgb3V0ICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJLyogdGhpcyB3aWxsIGNhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlciAqLworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGNtZGlvY2IpOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlicmVhazsKKwljYXNlIFRZUEVfRVZUOgorCQlldnQgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmV2dDsKKwkJLyogdGhpcyBldmVudCBoYXMgbm8gam9iIGFueW1vcmUgKi8KKwkJZXZ0LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogUmV0dXJuIC1FQUdBSU4gd2hpY2ggaXMgb3VyIHdheSBvZiBzaWduYWxseWluZyB0aGUKKwkJICogYXBwIHRvIHJldHJ5LgorCQkgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9NQk9YOgorCQltYm94ID0gJmRkX2RhdGEtPmNvbnRleHRfdW4ubWJveDsKKwkJLyogdGhpcyBtYm94IGhhcyBubyBqb2IgYW55bW9yZSAqLworCQltYm94LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQogCisJLyogc2NzaSB0cmFuc3BvcnQgZmMgZmNfYnNnX2pvYl90aW1lb3V0IGV4cGVjdHMgYSB6ZXJvIHJldHVybiBjb2RlLAorCSAqIG90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlCisJICogc28gYWx3YXlzIHJldHVybiBzdWNjZXNzICh6ZXJvKQorCSAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4Zjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCisgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAqCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgICAgICAgKgorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiAqCisgKiBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgICAgICAgICAgKgorICogV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgICoKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgICAgICAqCisgKiBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFNVQ0ggRElTQ0xBSU1FUlMgQVJFIEhFTEQgKgorICogVE8gQkUgTEVHQUxMWSBJTlZBTElELiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgICoKKyAqIG1vcmUgZGV0YWlscywgYSBjb3B5IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HICAqCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBic2cgZGVmaW5pdGlvbnMKKyAqIE5vIHBvaW50ZXJzIHRvIHVzZXIgZGF0YSBhcmUgYWxsb3dlZCwgYWxsIGFwcGxpY2F0aW9uIGJ1ZmZlcnMgYW5kIHNpemVzIHdpbGwKKyAqIGRlcml2ZWQgdGhyb3VnaCB0aGUgYnNnIGludGVyZmFjZS4KKyAqCisgKiBUaGVzZSBhcmUgdGhlIHZlbmRvciB1bmlxdWUgc3RydWN0dXJlcyBwYXNzZWQgaW4gdXNpbmcgdGhlIGJzZworICogRkNfQlNHX0hTVF9WRU5ET1IgbWVzc2FnZSBjb2RlIHR5cGUuCisgKi8KKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VORF9NR01UX1JFU1AJMworI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFCTQKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0RJQUdfVEVTVAk1CisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVYJNgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfTUJPWAkJNworCitzdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHR5cGVfbWFzazsKKwl1aW50MzJfdCBldl9yZXFfaWQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCBldl9yZWdfaWQ7CisJdWludDMyX3QgZXZfcmVxX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSB7CisJdWludDMyX3QgaW1tZWRfZGF0YTsKKwl1aW50MzJfdCB0eXBlOworfTsKKworc3RydWN0IHNlbmRfbWdtdF9yZXNwIHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHRhZzsKK307CisKKworI2RlZmluZSBJTlRFUk5BTF9MT09QX0JBQ0sgMHgxIC8qIGFkYXB0ZXIgc2hvcnQgY3V0cyB0aGUgbG9vcCBpbnRlcm5hbGx5ICovCisjZGVmaW5lIEVYVEVSTkFMX0xPT1BfQkFDSyAweDIgLyogcmVxdWlyZXMgYW4gZXh0ZXJuYWwgbG9vcGJhY2sgcGx1ZyAqLworCitzdHJ1Y3QgZGlhZ19tb2RlX3NldCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIExQRkNfV1dOTl9UWVBFCQkwCisjZGVmaW5lIExQRkNfV1dQTl9UWVBFCQkxCisKK3N0cnVjdCBnZXRfbWdtdF9yZXYgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIE1BTkFHRU1FTlRfTUFKT1JfUkVWICAgMQorI2RlZmluZSBNQU5BR0VNRU5UX01JTk9SX1JFViAgIDAKKworLyogdGhlIE1nbXRSZXZJbmZvIHN0cnVjdHVyZSAqLworc3RydWN0IE1nbXRSZXZJbmZvIHsKKwl1aW50MzJfdCBhX01ham9yOworCXVpbnQzMl90IGFfTWlub3I7Cit9OworCitzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5IHsKKwlzdHJ1Y3QgTWdtdFJldkluZm8gaW5mbzsKK307CisKK3N0cnVjdCBkZmNfbWJveF9yZXEgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgaW5FeHRXTGVuOworCXVpbnQzMl90IG91dEV4dFdMZW47CisJdWludDhfdCBtYk9mZnNldDsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggNjUwNDk0ZC4uNmYwZmI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTQ0LDE4ICs0NCwyNiBAQAogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKiwKKwkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3JlcXVlc3RfZmVhdHVyZXMoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc3VwcG9ydGVkX3BhZ2VzKHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqKTsKK2ludCBscGZjX3BjX3NsaTRfcGFyYW1zX2dldChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogCiBzdHJ1Y3QgbHBmY192cG9ydCAqbHBmY19maW5kX3Zwb3J0X2J5X2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX2NsZWFudXBfcmN2X2J1ZmZlcnMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfcmN2X3NlcV9jaGVja19lZHRvdihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19jbGVhbnVwX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKiwgaW50KTsKK3ZvaWQgbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2xpbmtkb3duKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19saW5rZG93bl9wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21ieF9jbXBsX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19pbml0X3ZwaV9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqKTsKIAogdm9pZCBscGZjX21ieF9jbXBsX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ieF9jbXBsX2RmbHRfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC03Myw2ICs4MSw3IEBACiBpbnQgIGxwZmNfY2FuX2Rpc2N0bW8oc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgIGxwZmNfdW5yZWdfcnBpKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX2FsbF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX3VucmVnX2hiYV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY191bnJlZ19kZWZhdWx0X3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfaXNzdWVfcmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKQEAgLTk5LDcgKzEwOCw3IEBACiAKIHZvaWQgbHBmY19kb19zY3JfbnNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfY2hlY2tfc3Bhcm0oc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwKLQkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90KTsKKwkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90LCBpbnQpOwogaW50IGxwZmNfZWxzX2Fib3J0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19tb3JlX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21vcmVfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKik7CkBAIC0xOTcsNiArMjA2LDcgQEAKIHZvaWQgbHBmY191bnJlZ19mY2ZpKHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3Jlc3VtZV9ycGkoc3RydWN0IGxwZmNNYm94cSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIGludCBscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCk7Cit2b2lkIGxwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKIHZvaWQgbHBmY19jb25maWdfaGJxKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgc3RydWN0IGxwZmNfaGJxX2luaXQgKiwKIAl1aW50MzJfdCAsIExQRkNfTUJPWFFfdCAqKTsKQEAgLTIwNiw3ICsyMTYsMTEgQEAKIHZvaWQgbHBmY19zbGk0X3JiX2ZyZWUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBoYnFfZG1hYnVmICopOwogdm9pZCBscGZjX3NsaTRfYnVpbGRfZGZsdF9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgZmNmX3JlY29yZCAqLAogCQkJdWludDE2X3QpOwordm9pZCBscGZjX3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4oc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIGludCBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgaW50IGFsaWduKTsKIHZvaWQgbHBmY19tZW1fZnJlZShzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0zNjUsNiArMzc5LDggQEAKIHZvaWQgbHBmY19jcmVhdGVfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zdG9wX2hiYV90aW1lcnMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3N0b3BfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19wYXJzZV9mY29lX2NvbmYoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QgKiwgdWludDMyX3QpOwogaW50IGxwZmNfcGFyc2VfdnBkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIGludCk7CiB2b2lkIGxwZmNfc3RhcnRfZmRpc2NzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSk7CkBAIC0zNzgsNSArMzk0LDUgQEAKIC8qIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFNHSU92NC9ic2cgaW50ZXJmYWNlICovCiBpbnQgbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIGludCBscGZjX2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICopOwotdm9pZCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKK2ludCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKIAkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggMGViY2Q5Yi4uYzdlOTIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtOTcsNyArOTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjsKIAotCWxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpOworCWlmIChscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKSA9PSAwKQorCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoaWNtZC0+dWxwU3RhdHVzID09IElPU1RBVF9ORUVEX0JVRkZFUikpIHsKIAkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CkBAIC0xODEsNyArMTgyLDggQEAKIAl1aW50MzJfdCBzaXplOwogCiAJLyogRm9yd2FyZCBhYm9ydCBldmVudCB0byBhbnkgcHJvY2VzcyByZWdpc3RlcmVkIHRvIHJlY2VpdmUgY3QgZXZlbnQgKi8KLQlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwlpZiAobHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSkgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyogSWYgdGhlcmUgaXMgbm8gQkRFIGFzc29jaWF0ZWQgd2l0aCBJT0NCLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovCiAJaWYgKGljbWQtPnVscEJkZUNvdW50ID09IDApCkBAIC0xODQzLDEyICsxODQ1LDcgQEAKIAkJYyAgPSAocmV2ICYgMHgwMDAwZmYwMCkgPj4gODsKIAkJYjQgPSAocmV2ICYgMHgwMDAwMDBmZik7CiAKLQkJaWYgKGZsYWcpCi0JCQlzcHJpbnRmKGZ3cmV2aXNpb24sICIlZC4lZCVkJWMlZCAiLCBiMSwKLQkJCQliMiwgYjMsIGMsIGI0KTsKLQkJZWxzZQotCQkJc3ByaW50Zihmd3JldmlzaW9uLCAiJWQuJWQlZCVjJWQgIiwgYjEsCi0JCQkJYjIsIGIzLCBjLCBiNCk7CisJCXNwcmludGYoZndyZXZpc2lvbiwgIiVkLiVkJWQlYyVkIiwgYjEsIGIyLCBiMywgYywgYjQpOwogCX0KIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAyY2MzOTY4Li4wOGI2NjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTUwLDkgKzUwLDYgQEAKIAkJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDhfdCByZXRyeSk7CiBzdGF0aWMgaW50IGxwZmNfaXNzdWVfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJCSAgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IpOwotc3RhdGljIHZvaWQgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAotCQkJCSAgICBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCi0JCQkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKTsKIAogc3RhdGljIGludCBscGZjX21heF9lbHNfdHJpZXMgPSAzOwogCkBAIC01OTIsNiArNTg5LDE1IEBACiAJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl9CisJCS8qCisJCSAqIElmIFZQSSBpcyB1bnJlZ2VkLCBkcml2ZXIgbmVlZCB0byBkbyBJTklUX1ZQSQorCQkgKiBiZWZvcmUgcmUtcmVnaXN0ZXJpbmcKKwkJICovCisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQogCX0KIAogCWlmIChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgewpAQCAtNjA0LDEwICs2MTAsMTMgQEAKIAl9IGVsc2UgewogCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCQlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7Ci0JCWlmICh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkgeworCQlpZiAoKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKSkgJiYKKwkJCSh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKIAkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwogCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwotCQl9IGVsc2UKKwkJfSBlbHNlIGlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKQorCQkJbHBmY19pc3N1ZV9pbml0X3ZwaSh2cG9ydCk7CisJCWVsc2UKIAkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7CiAJfQogCXJldHVybiAwOwpAQCAtODA0LDYgKzgxMyw5IEBACiAJCQkJIGlyc3AtPnVscFRpbWVvdXQpOwogCQlnb3RvIGZsb2dpZmFpbDsKIAl9CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJLyoKIAkgKiBUaGUgRkxvZ0kgc3VjY2VlZGVkLiAgU3luYyB0aGUgZGF0YSBmb3IgdGhlIENQVSBiZWZvcmUKQEAgLTI3MjAsNyArMjczMiw3IEBACiAJaWYgKGRpZCA9PSBGRE1JX0RJRCkKIAkJcmV0cnkgPSAxOwogCi0JaWYgKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgJiYKKwlpZiAoKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgfHwgKGNtZCA9PSBFTFNfQ01EX0ZESVNDKSkgJiYKIAkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IFRPUE9MT0dZX0xPT1ApICYmCiAJICAgICFscGZjX2Vycm9yX2xvc3RfbGluayhpcnNwKSkgewogCQkvKiBGTE9HSSByZXRyeSBwb2xpY3kgKi8KQEAgLTQzODUsNyArNDM5Nyw3IEBACiAKIAlkaWQgPSBGYWJyaWNfRElEOwogCi0JaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzKSkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDEpKSkgewogCQkvKiBGb3IgYSBGTE9HSSB3ZSBhY2NlcHQsIHRoZW4gaWYgb3VyIHBvcnRuYW1lIGlzIGdyZWF0ZXIKIAkJICogdGhlbiB0aGUgcmVtb3RlIHBvcnRuYW1lIHdlIGluaXRpYXRlIE5wb3J0IGxvZ2luLgogCQkgKi8KQEAgLTU5MTUsNiArNTkyNyw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOwogCU1BSUxCT1hfdCAqbWIgPSAmcG1iLT51Lm1iOworCWludCByYzsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CkBAIC01OTM2LDYgKzU5NDksMjYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwogCQkJYnJlYWs7CisJCS8qIElmIHJlZ192cGkgZmFpbCB3aXRoIGludmFsaWQgVlBJIHN0YXR1cywgcmUtaW5pdCBWUEkgKi8KKwkJY2FzZSAweDIwOgorCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlscGZjX2luaXRfdnBpKHBoYmEsIHBtYiwgdnBvcnQtPnZwaSk7CisJCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKKwkJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsCisJCQkJTUJYX05PV0FJVCk7CisJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsCisJCQkJCUtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkJIjI3MzIgRmFpbGVkIHRvIGlzc3VlIElOSVRfVlBJIgorCQkJCQkiIG1haWxib3ggY29tbWFuZFxuIik7CisJCQl9IGVsc2UgeworCQkJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJCQlyZXR1cm47CisJCQl9CisKIAkJZGVmYXVsdDoKIAkJCS8qIFRyeSB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvciAqLwogCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKQEAgLTU5NDksMTMgKzU5ODIsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQlpZiAodnBvcnQgPT0gcGhiYS0+cHBvcnQpCisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJaWYgKHZwb3J0ID09IHBoYmEtPnBwb3J0KSB7CiAJCQlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpCiAJCQkJbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4odnBvcnQpOwotCQkJZWxzZQotCQkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7Ci0JCWVsc2UKKwkJCWVsc2UgeworCQkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOworCQkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKKwkJCX0KKwkJfSBlbHNlCiAJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CiAJfQogCkBAIC01OTc3LDcgKzYwMTQsNyBAQAogICogVGhpcyByb3V0aW5lIHJlZ2lzdGVycyB0aGUgQHZwb3J0IGFzIGEgbmV3IHZpcnR1YWwgcG9ydCB3aXRoIGEgSEJBLgogICogSXQgaXMgZG9uZSB0aHJvdWdoIGEgcmVnaXN0ZXJpbmcgdnBpIG1haWxib3ggY29tbWFuZC4KICAqKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewpAQCAtNjAxOCw2ICs2MDU1LDc4IEBACiB9CiAKIC8qKgorICogbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkgLSBTdGFydCB0aW1lciB0byByZXRyeSBGTE9HSS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydCBhbGwgcGVuZGluZyBkaXNjb3ZlcnkgY29tbWFuZHMgYW5kCisgKiBzdGFydCBhIHRpbWVyIHRvIHJldHJ5IEZMT0dJIGZvciB0aGUgcGh5c2ljYWwgcG9ydAorICogZGlzY292ZXJ5LgorICoqLwordm9pZAorbHBmY19yZXRyeV9wcG9ydF9kaXNjb3Zlcnkoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwlpbnQgaTsKKwl1aW50MzJfdCBsaW5rX3N0YXRlOworCisJLyogVHJlYXQgdGhpcyBmYWlsdXJlIGFzIGxpbmtkb3duIGZvciBhbGwgdnBvcnRzICovCisJbGlua19zdGF0ZSA9IHBoYmEtPmxpbmtfc3RhdGU7CisJbHBmY19saW5rZG93bihwaGJhKTsKKwlwaGJhLT5saW5rX3N0YXRlID0gbGlua19zdGF0ZTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisKKwlpZiAodnBvcnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnRzW2ldLCBGYWJyaWNfRElEKTsKKwkJCWlmIChuZGxwKQorCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydHNbaV0sIG5kbHApOworCQkJbHBmY19lbHNfZmx1c2hfY21kKHZwb3J0c1tpXSk7CisJCX0KKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9CisKKwkvKiBJZiBmYWJyaWMgcmVxdWlyZSBGTE9HSSwgdGhlbiByZS1pbnN0YW50aWF0ZSBwaHlzaWNhbCBsb2dpbiAqLworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLT5wcG9ydCwgRmFicmljX0RJRCk7CisJaWYgKCFuZGxwKQorCQlyZXR1cm47CisKKworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfZmxhZyB8PSBOTFBfREVMQVlfVE1POworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZMT0dJOworCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19GTE9HSTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19mYWJyaWNfbG9naW5fcmVxZCAtIENoZWNrIGlmIEZMT0dJIHJlcXVpcmVkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBGRElTQyBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBGRElTQyByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgaWYgYSBGTE9HSSBpcyByZWd1aXJlZCBmb3IgRkRJU0MKKyAqIHRvIHN1Y2NlZWQuCisgKiovCitzdGF0aWMgaW50CitscGZjX2ZhYnJpY19sb2dpbl9yZXFkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQoreworCisJaWYgKChyc3Bpb2NiLT5pb2NiLnVscFN0YXR1cyAhPSBJT1NUQVRfRkFCUklDX1JKVCkgfHwKKwkJKHJzcGlvY2ItPmlvY2IudW4udWxwV29yZFs0XSAhPSBSSlRfTE9HSU5fUkVRVUlSRUQpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKioKICAqIGxwZmNfY21wbF9lbHNfZmRpc2MgLSBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmZGlzYyBpb2NiIGNvbW1hbmQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCkBAIC02MDY2LDYgKzYxNzUsMTIgQEAKIAkJaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdLCB2cG9ydC0+ZmNfcHJldkRJRCk7CiAKIAlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CisKKwkJaWYgKGxwZmNfZmFicmljX2xvZ2luX3JlcWQocGhiYSwgY21kaW9jYiwgcnNwaW9jYikpIHsKKwkJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQkvKiBDaGVjayBmb3IgcmV0cnkgKi8KIAkJaWYgKGxwZmNfZWxzX3JldHJ5KHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKQogCQkJZ290byBvdXQ7CkBAIC02MDc2LDYgKzYxOTEsNyBAQAogCQlnb3RvIGZkaXNjX2ZhaWxlZDsKIAl9CiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfRkFCUklDOwogCWlmICh2cG9ydC0+cGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gIEZDX1BVQkxJQ19MT09QOwpAQCAtNjEwMywxMCArNjIxOSwxMyBAQAogCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOwogCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAotCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCisJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpCisJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnQpOworCWVsc2UgaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkKIAkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOwogCWVsc2UKIAkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCAyNDQ1ZTM5Li4yMzU5ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CiAJCX0KKwkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKQorCQkJbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhwaGJhKTsKIAl9CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwpAQCAtNzA2LDYgKzcwOCw4IEBACiB2b2lkCiBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKKwlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOworCiAJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgcmVjZWl2ZWQgYnVmZmVycyAqLwogCWxwZmNfY2xlYW51cF9yY3ZfYnVmZmVycyh2cG9ydCk7CiAKQEAgLTc1MiwxMiArNzU2LDE0IEBACiAJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKIAogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfRElTQ09WRVJFRCk7CisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPiBMUEZDX0xJTktfRE9XTikgewogCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX0RPV047CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPnBwb3J0LT5mY19mbGFnICY9IH5GQ19MQklUOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpCiAJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CkBAIC0xMDIzLDcgKzEwMjksNyBAQAogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfRElTQ09WRVJFRCB8IEZDRl9JTl9VU0UpOworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX1NDQU5fRE9ORSB8IEZDRl9JTl9VU0UpOwogCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkKQEAgLTEwNDUsMjUgKzEwNTEsMjMgQEAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19mYWJfbmFtZV9tYXRjaCh1aW50OF90ICpmYWJfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoZmFiX25hbWVbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVsxXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs0XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbNl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs3XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkpCi0JCXJldHVybiAxOwotCWVsc2UKKwlpZiAoZmFiX25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs3XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMTA3OCwzMCArMTA4MiwyOCBAQAogc3RhdGljIHVpbnQzMl90CiBscGZjX3N3X25hbWVfbWF0Y2godWludDhfdCAqc3dfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoc3dfbmFtZVswXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbMV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVszXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbNF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVs2XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbN10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKHN3X25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChzd19uYW1lWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzddICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCiAgKiBscGZjX21hY19hZGRyX21hdGNoIC0gQ2hlY2sgaWYgdGhlIGZjZiBtYWMgYWRkcmVzcyBtYXRjaC4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1hY19hZGRyOiBwb2ludGVyIHRvIG1hYyBhZGRyZXNzLgogICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGZjZiByZWNvcmQuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQncyBtYWMgYWRkcmVzcyB3aXRoIEhCQSdzCkBAIC0xMTA5LDg1ICsxMTExLDExNSBAQAogICogcmV0dXJucyAxIGVsc2UgcmV0dXJuIDAuCiAgKiovCiBzdGF0aWMgdWludDMyX3QKLWxwZmNfbWFjX2FkZHJfbWF0Y2goc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCitscGZjX21hY19hZGRyX21hdGNoKHVpbnQ4X3QgKm1hY19hZGRyLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCiB7Ci0JaWYgKChwaGJhLT5mY2YubWFjX2FkZHJbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzFdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkclsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzRdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkcls1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKG1hY19hZGRyWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKSkKIAkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBib29sCitscGZjX3ZsYW5faWRfbWF0Y2godWludDE2X3QgY3Vycl92bGFuX2lkLCB1aW50MTZfdCBuZXdfdmxhbl9pZCkKK3sKKwlyZXR1cm4gKGN1cnJfdmxhbl9pZCA9PSBuZXdfdmxhbl9pZCk7CiB9CiAKIC8qKgogICogbHBmY19jb3B5X2ZjZl9yZWNvcmQgLSBDb3B5IGZjZiBpbmZvcm1hdGlvbiB0byBscGZjX2hiYS4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZjogcG9pbnRlciB0byBkcml2ZXIgZmNmIHJlY29yZC4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICoKICAqIFRoaXMgcm91dGluZSBjb3BpZXMgdGhlIEZDRiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBGQ0YKICAqIHJlY29yZCB0byBscGZjX2hiYSBkYXRhIHN0cnVjdHVyZS4KICAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX2NvcHlfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKK2xwZmNfY29weV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2ZjZl9yZWMgKmZjZl9yZWMsCisJCSAgICAgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVswXSA9CisJLyogRmFicmljIG5hbWUgKi8KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVswXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVsxXSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbMV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMl0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzJdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzNdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVszXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs0XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbNF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbNV0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzVdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzZdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVs2XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs3XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbN10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbMF0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzFdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkclsyXSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbM10gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzRdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkcls1XSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzBdID0KKwkvKiBNYWMgYWRkcmVzcyAqLworCWZjZl9yZWMtPm1hY19hZGRyWzBdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzFdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzJdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMiwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzNdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzRdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzVdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNSwgbmV3X2ZjZl9yZWNvcmQpOworCS8qIEZDRiByZWNvcmQgaW5kZXggKi8KKwlmY2ZfcmVjLT5mY2ZfaW5keCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7CisJLyogRkNGIHJlY29yZCBwcmlvcml0eSAqLworCWZjZl9yZWMtPnByaW9yaXR5ID0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eTsKKwkvKiBTd2l0Y2ggbmFtZSAqLworCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzBdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzFdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVsxXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsyXSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbMl0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbM10gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzNdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzRdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs0XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs1XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbNV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbNl0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzZdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzddID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs3XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpOwogfQogCiAvKioKKyAqIGxwZmNfdXBkYXRlX2ZjZl9yZWNvcmQgLSBVcGRhdGUgZHJpdmVyIGZjZiByZWNvcmQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9yZWM6IHBvaW50ZXIgdG8gZHJpdmVyIGZjZiByZWNvcmQuCisgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gaGJhIGZjZiByZWNvcmQuCisgKiBAYWRkcl9tb2RlOiBhZGRyZXNzIG1vZGUgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqIEB2bGFuX2lkOiB2bGFuIHRhZyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICogQGZsYWc6IGZsYWcgYml0cyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICoKKyAqIFRoaXMgcm91dGluZSB1cGRhdGVzIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBmcm9tIHRoZSBuZXcgSEJBIEZDRiByZWNvcmQKKyAqIHRvZ2V0aGVyIHdpdGggdGhlIGFkZHJlc3MgbW9kZSwgdmxhbl9pZCwgYW5kIG90aGVyIGluZm9ybWF0aW9ucy4gVGhpcworICogcm91dGluZSBpcyBjYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZAorX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZmNmX3JlYyAqZmNmX3JlYywKKwkJICAgICAgIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCwgdWludDMyX3QgYWRkcl9tb2RlLAorCQkgICAgICAgdWludDE2X3Qgdmxhbl9pZCwgdWludDMyX3QgZmxhZykKK3sKKwkvKiBDb3B5IHRoZSBmaWVsZHMgZnJvbSB0aGUgSEJBJ3MgRkNGIHJlY29yZCAqLworCWxwZmNfY29weV9mY2ZfcmVjb3JkKGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkKTsKKwkvKiBVcGRhdGUgb3RoZXIgZmllbGRzIG9mIGRyaXZlciBGQ0YgcmVjb3JkICovCisJZmNmX3JlYy0+YWRkcl9tb2RlID0gYWRkcl9tb2RlOworCWZjZl9yZWMtPnZsYW5faWQgPSB2bGFuX2lkOworCWZjZl9yZWMtPmZsYWcgfD0gKGZsYWcgfCBSRUNPUkRfVkFMSUQpOworfQorCisvKioKICAqIGxwZmNfcmVnaXN0ZXJfZmNmIC0gUmVnaXN0ZXIgdGhlIEZDRiB3aXRoIGhiYS4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMTIsNyArMTI0NCw3IEBACiAKIAkvKiBUaGUgRkNGIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgc3RhcnQgZGlzY292ZXJ5ICovCiAJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB7Ci0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfU0NBTl9ET05FIHwgRkNGX0lOX1VTRSk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKQpAQCAtMTI1MCw2ICsxMjgyLDcgQEAKICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICogQGJvb3RfZmxhZzogSW5kaWNhdGVzIGlmIHRoaXMgcmVjb3JkIHVzZWQgYnkgYm9vdCBiaW9zLgogICogQGFkZHJfbW9kZTogVGhlIGFkZHJlc3MgbW9kZSB0byBiZSB1c2VkIGJ5IHRoaXMgRkNGCisgKiBAdmxhbl9pZDogVGhlIHZsYW4gaWQgdG8gYmUgdXNlZCBhcyB2bGFuIHRhZ2dpbmcgYnkgdGhpcyBGQ0YuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQgd2l0aCBjb25uZWN0IGxpc3Qgb2J0YWluZWQgZnJvbSB0aGUKICAqIGNvbmZpZyByZWdpb24gdG8gZGVjaWRlIGlmIHRoaXMgRkNGIGNhbiBiZSB1c2VkIGZvciBTQU4gZGlzY292ZXJ5LiBJdCByZXR1cm5zCkBAIC0xMzIzLDcgKzEzNTYsOCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5fZW50cnksICZwaGJhLT5mY2ZfY29ubl9yZWNfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubl9lbnRyeSwKKwkJCSAgICAmcGhiYS0+ZmNmX2Nvbm5fcmVjX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCEoY29ubl9lbnRyeS0+Y29ubl9yZWMuZmxhZ3MgJiBGQ0ZDTkNUX1ZBTElEKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNDcwLDYgKzE1MDQsNyBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRk9WOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCX0KIApAQCAtMTUyNCwxMSArMTU1OSwxMiBAQAogCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CiAJdW5pb24gbHBmY19zbGk0X2NmZ19zaGRyICpzaGRyOwogCXN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZDsKLQlpbnQgcmM7CiAJdWludDMyX3QgYm9vdF9mbGFnLCBhZGRyX21vZGU7CiAJdWludDMyX3QgbmV4dF9mY2ZfaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAl1aW50MTZfdCB2bGFuX2lkOworCWludCByYzsKIAogCS8qIElmIHRoZXJlIGlzIHBlbmRpbmcgRkNvRSBldmVudCByZXN0YXJ0IEZDRiB0YWJsZSBzY2FuICovCiAJaWYgKGxwZmNfY2hlY2tfcGVuZGluZ19mY29lX2V2ZW50KHBoYmEsIDApKSB7CkBAIC0xNTgzLDkgKzE2MTksOCBAQAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSk7CiAJYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKIAotCXJjID0gbHBmY19tYXRjaF9mY2ZfY29ubl9saXN0KHBoYmEsIG5ld19mY2ZfcmVjb3JkLAotCQkJCSAgICAgICZib290X2ZsYWcsICZhZGRyX21vZGUsCi0JCQkJCSZ2bGFuX2lkKTsKKwlyYyA9IGxwZmNfbWF0Y2hfZmNmX2Nvbm5fbGlzdChwaGJhLCBuZXdfZmNmX3JlY29yZCwgJmJvb3RfZmxhZywKKwkJCQkgICAgICAmYWRkcl9tb2RlLCAmdmxhbl9pZCk7CiAJLyoKIAkgKiBJZiB0aGUgZmNmIHJlY29yZCBkb2VzIG5vdCBtYXRjaCB3aXRoIGNvbm5lY3QgbGlzdCBlbnRyaWVzCiAJICogcmVhZCB0aGUgbmV4dCBlbnRyeS4KQEAgLTE1OTQsOTAgKzE2MjksMTU5IEBACiAJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkvKgogCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBGQ0YgZGlzY292ZXJ5IG9mIHRoZSBIQkEsIHVzZSBsYXN0Ci0JICogRkNGIHJlY29yZCBmb3IgdGhlIGRpc2NvdmVyeS4KKwkgKiBGQ0YgcmVjb3JkIGZvciB0aGUgZGlzY292ZXJ5LiBUaGUgY29uZGl0aW9uIHRoYXQgYSByZXNjYW4KKwkgKiBtYXRjaGVzIHRoZSBpbi11c2UgRkNGIHJlY29yZDogZmFicmljIG5hbWUsIHN3aXRjaCBuYW1lLCBtYWMKKwkgKiBhZGRyZXNzLCBhbmQgdmxhbl9pZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfSU5fVVNFKSB7Ci0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfc3dfbmFtZV9tYXRjaChwaGJhLT5mY2Yuc3dpdGNoX25hbWUsCisJCSAgICBscGZjX3N3X25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfbWFjX2FkZHJfbWF0Y2gocGhiYSwgbmV3X2ZjZl9yZWNvcmQpKSB7CisJCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5tYWNfYWRkciwKKwkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICBscGZjX3ZsYW5faWRfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQsCisJCQkJCXZsYW5faWQpKSB7CiAJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpCisJCQkJLyogU3RvcCBGQ0YgcmVkaXNjIHdhaXQgdGltZXIgaWYgcGVuZGluZyAqLworCQkJCV9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOworCQkJZWxzZSBpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpCisJCQkJLyogSWYgaW4gZmFzdCBmYWlsb3ZlciwgbWFyayBpdCdzIGNvbXBsZXRlZCAqLworCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19GT1Y7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCS8qCisJCSAqIFJlYWQgbmV4dCBGQ0YgcmVjb3JkIGZyb20gSEJBIHNlYXJjaGluZyBmb3IgdGhlIG1hdGNoaW5nCisJCSAqIHdpdGggaW4tdXNlIHJlY29yZCBvbmx5IGlmIG5vdCBkdXJpbmcgdGhlIGZhc3QgZmFpbG92ZXIKKwkJICogcGVyaW9kLiBJbiBjYXNlIG9mIGZhc3QgZmFpbG92ZXIgcGVyaW9kLCBpdCBzaGFsbCB0cnkgdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEZDRiByZWNvcmQganVzdCByZWFkIHNob3VsZCBiZSB0aGUKKwkJICogbmV4dCBjYW5kaWRhdGUuCisJCSAqLworCQlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCX0KIAl9CisJLyoKKwkgKiBVcGRhdGUgb24gZmFpbG92ZXIgRkNGIHJlY29yZCBvbmx5IGlmIGl0J3MgaW4gRkNGIGZhc3QtZmFpbG92ZXIKKwkgKiBwZXJpb2Q7IG90aGVyd2lzZSwgdXBkYXRlIG9uIGN1cnJlbnQgRkNGIHJlY29yZC4KKwkgKi8KKwlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpIHsKKwkJLyogRmFzdCBGQ0YgZmFpbG92ZXIgb25seSB0byB0aGUgc2FtZSBmYWJyaWMgbmFtZSAqLworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWUsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSkKKwkJCWZjZl9yZWMgPSAmcGhiYS0+ZmNmLmZhaWxvdmVyX3JlYzsKKwkJZWxzZQorCQkJZ290byByZWFkX25leHRfZmNmOworCX0gZWxzZQorCQlmY2ZfcmVjID0gJnBoYmEtPmZjZi5jdXJyZW50X3JlYzsKKwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQVZBSUxBQkxFKSB7CiAJCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcKLQkJICogc2V0IGFuZCBuZXcgZmNmIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCwgdXNlIHRoZQotCQkgKiBuZXcgZmNmIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnCisJCSAqIHNldCBhbmQgbmV3IGhiYSBmY2YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0LCB1c2UKKwkJICogdGhlIG5ldyBoYmEgZmNmIHJlY29yZC4KIAkJICovCi0JCWlmIChib290X2ZsYWcgJiYgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQk9PVF9FTkFCTEUpKSB7Ci0JCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCi0JCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7Ci0JCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQkJCWlmICh2bGFuX2lkICE9IDB4RkZGRikgewotCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfVkFMSURfVkxBTjsKLQkJCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCWlmIChib290X2ZsYWcgJiYgIShmY2ZfcmVjLT5mbGFnICYgQk9PVF9FTkFCTEUpKSB7CisJCQkvKiBDaG9vc2UgdGhpcyBGQ0YgcmVjb3JkICovCisJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywgbmV3X2ZjZl9yZWNvcmQsCisJCQkJCWFkZHJfbW9kZSwgdmxhbl9pZCwgQk9PVF9FTkFCTEUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKLQkJICogbmV3IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcsIHJlYWQgdGhlIG5leHQKLQkJICogRkNGIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKKwkJICogbmV3IGhiYSBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnLCByZWFkCisJCSAqIHRoZSBuZXh0IEZDRiByZWNvcmQuCiAJCSAqLwotCQlpZiAoIWJvb3RfZmxhZyAmJiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0JPT1RfRU5BQkxFKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlpZiAoIWJvb3RfZmxhZyAmJiAoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBhIHJlY29yZCB3aXRoIGxvd2VyIHByaW9yaXR5IHZhbHVlIGZvcgotCQkgKiB0aGUgY3VycmVudCBGQ0YsIHVzZSB0aGF0IHJlY29yZC4KKwkJICogSWYgdGhlIG5ldyBoYmEgRkNGIHJlY29yZCBoYXMgbG93ZXIgcHJpb3JpdHkgdmFsdWUKKwkJICogdGhhbiB0aGUgZHJpdmVyIEZDRiByZWNvcmQsIHVzZSB0aGUgbmV3IHJlY29yZC4KIAkJICovCi0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKLQkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IHBoYmEtPmZjZi5wcmlvcml0eSkpIHsKLQkJCS8qIFVzZSB0aGlzIEZDRiByZWNvcmQgKi8KLQkJCWxwZmNfY29weV9mY2ZfcmVjb3JkKHBoYmEsIG5ld19mY2ZfcmVjb3JkKTsKLQkJCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JCQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1ZBTElEX1ZMQU47Ci0JCQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQkJZ290byByZWFkX25leHRfZmNmOworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChmY2ZfcmVjLT5mYWJyaWNfbmFtZSwgbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IGZjZl9yZWMtPnByaW9yaXR5KSkgeworCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQlhZGRyX21vZGUsIHZsYW5faWQsIDApOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJZ290byByZWFkX25leHRfZmNmOwogCX0KIAkvKgotCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBGQ0YgcmVjb3JkLCB1c2UgdGhpcwotCSAqIHJlY29yZC4KKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjaG9vc2UgdGhpcyByZWNvcmQgZm9yCisJICogaW5pdGlhbCBiZXN0LWZpdCBGQ0YuCiAJICovCi0JbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JaWYgKGJvb3RfZmxhZykKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9WQUxJRF9WTEFOOwotCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7CisJaWYgKGZjZl9yZWMpIHsKKwkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQkgYWRkcl9tb2RlLCB2bGFuX2lkLCAoYm9vdF9mbGFnID8KKwkJCQkJIEJPT1RfRU5BQkxFIDogMCkpOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJZ290byByZWFkX25leHRfZmNmOwogCiByZWFkX25leHRfZmNmOgogCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKLQlpZiAobmV4dF9mY2ZfaW5kZXggPT0gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUgfHwgbmV4dF9mY2ZfaW5kZXggPT0gMCkKLQkJbHBmY19yZWdpc3Rlcl9mY2YocGhiYSk7Ci0JZWxzZQorCWlmIChuZXh0X2ZjZl9pbmRleCA9PSBMUEZDX0ZDT0VfRkNGX05FWFRfTk9ORSB8fCBuZXh0X2ZjZl9pbmRleCA9PSAwKSB7CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikgeworCQkJLyoKKwkJCSAqIENhc2Ugb2YgRkNGIGZhc3QgZmFpbG92ZXIgc2NhbgorCQkJICovCisKKwkJCS8qCisJCQkgKiBJdCBoYXMgbm90IGZvdW5kIGFueSBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjYW5jZWwKKwkJCSAqIEZDRiBzY2FuIGlucHJvZ3Jlc3MsIGFuZCBkbyBub3RoaW5nCisJCQkgKi8KKwkJCWlmICghKHBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyAmIFJFQ09SRF9WQUxJRCkpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qCisJCQkgKiBJdCBoYXMgZm91bmQgYSBzdWl0YWJsZSBGQ0YgcmVjb3JkIHRoYXQgaXMgbm90CisJCQkgKiB0aGUgc2FtZSBhcyBpbi11c2UgRkNGIHJlY29yZCwgdW5yZWdpc3RlciB0aGUKKwkJCSAqIGluLXVzZSBGQ0YgcmVjb3JkLCByZXBsYWNlIHRoZSBpbi11c2UgRkNGIHJlY29yZAorCQkJICogd2l0aCB0aGUgbmV3IEZDRiByZWNvcmQsIG1hcmsgRkNGIGZhc3QgZmFpbG92ZXIKKwkJCSAqIGNvbXBsZXRlZCwgYW5kIHRoZW4gc3RhcnQgcmVnaXN0ZXIgdGhlIG5ldyBGQ0YKKwkJCSAqIHJlY29yZC4KKwkJCSAqLworCisJCQkvKiB1bnJlZ2lzdGVyIHRoZSBjdXJyZW50IGluLXVzZSBGQ0YgcmVjb3JkICovCisJCQlscGZjX3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCQkJLyogcmVwbGFjZSBpbi11c2UgcmVjb3JkIHdpdGggdGhlIG5ldyByZWNvcmQgKi8KKwkJCW1lbWNweSgmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAorCQkJICAgICAgICZwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbHBmY19mY2ZfcmVjKSk7CisJCQkvKiBtYXJrIHRoZSBGQ0YgZmFzdCBmYWlsb3ZlciBjb21wbGV0ZWQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkvKiBSZWdpc3RlciB0byB0aGUgbmV3IEZDRiByZWNvcmQgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gcGVyaW9kIHRvIGZhc3QgRkNGIGZhaWxvdmVyLAorCQkJICogZG8gbm90aGluZyB3aGVuIHNlYXJjaCB0byB0aGUgZW5kIG9mIHRoZSBGQ0YgdGFibGUuCisJCQkgKi8KKwkJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHx8CisJCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpCisJCQkJcmV0dXJuOworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgaW5pdGlhbCBzY2FuIG9yIHBvc3QgbGlua2Rvd24gcmVzY2FuLAorCQkJICogcmVnaXN0ZXIgd2l0aCB0aGUgYmVzdCBmaXQgRkNGIHJlY29yZCBmb3VuZCBzbworCQkJICogZmFyIHRocm91Z2ggdGhlIHNjYW5uaW5nIHByb2Nlc3MuCisJCQkgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9CisJfSBlbHNlCiAJCWxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgbmV4dF9mY2ZfaW5kZXgpOwogCXJldHVybjsKIApAQCAtMTY5NSwxMCArMTc5OSwxMyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb21wbGV0aW9uIG9mIGluaXQgdnBpIG1haWxib3ggY29tbWFuZC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGxwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gbWJveHEtPnZwb3J0OworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwogCWlmIChtYm94cS0+dS5tYi5tYnhTdGF0dXMpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCiAJCQkJTE9HX01CT1gsCkBAIC0xNzA4LDkgKzE4MTUsMjMgQEAKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwkvKiBJZiB0aGlzIHBvcnQgaXMgcGh5c2ljYWwgcG9ydCBvciBGRElTQyBpcyBkb25lLCBkbyByZWdfdnBpICovCisJaWYgKChwaGJhLT5wcG9ydCA9PSB2cG9ydCkgfHwgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkRJU0MpKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnQsIEZhYnJpY19ESUQpOworCQkJaWYgKCFuZGxwKQorCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJCQlMT0dfRElTQ09WRVJZLAorCQkJCQkiMjczMSBDYW5ub3QgZmluZCBmYWJyaWMgIgorCQkJCQkiY29udHJvbGxlciBub2RlXG4iKTsKKwkJCWVsc2UKKwkJCQlscGZjX3JlZ2lzdGVyX25ld192cG9ydChwaGJhLCB2cG9ydCwgbmRscCk7CisJCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuOworCX0KIAogCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCiAJCWxwZmNfaW5pdGlhbF9mZGlzYyh2cG9ydCk7CkBAIC0xNzE5LDEwICsxODQwLDQyIEBACiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAogCQkJCSAiMjYwNiBObyBOUElWIEZhYnJpYyBzdXBwb3J0XG4iKTsKIAl9CisJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm47CiB9CiAKIC8qKgorICogbHBmY19pc3N1ZV9pbml0X3ZwaSAtIElzc3VlIGluaXRfdnBpIG1haWxib3ggY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBscGZjX3Zwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWUgYSBpbml0X3ZwaSBtYWlsYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZQorICogVlBJIGZvciB0aGUgdnBvcnQuCisgKi8KK3ZvaWQKK2xwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjOworCisJbWJveHEgPSBtZW1wb29sX2FsbG9jKHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3hxKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7CisJCXJldHVybjsKKwl9CisJbHBmY19pbml0X3ZwaSh2cG9ydC0+cGhiYSwgbWJveHEsIHZwb3J0LT52cGkpOworCW1ib3hxLT52cG9ydCA9IHZwb3J0OworCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHZwb3J0LT5waGJhLCBtYm94cSwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQlMT0dfTUJPWCwgIjI2MDggRmFpbGVkIHRvIGlzc3VlIGluaXRfdnBpIG1haWxib3hcbiIpOworCQltZW1wb29sX2ZyZWUobWJveHEsIHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sKTsKKwl9Cit9CisKKy8qKgogICogbHBmY19zdGFydF9mZGlzY3MgLSBzZW5kIGZkaXNjcyBmb3IgZWFjaCB2cG9ydHMgb24gdGhpcyBwb3J0LgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMTczNCw4ICsxODg3LDYgQEAKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKIAlpbnQgaTsKLQlMUEZDX01CT1hRX3QgKm1ib3hxOwotCWludCByYzsKIAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKSB7CkBAIC0xNzU0LDI2ICsxOTA1LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICh2cG9ydHNbaV0tPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSkgewotCQkJCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIW1ib3hxKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWxwZmNfaW5pdF92cGkocGhiYSwgbWJveHEsIHZwb3J0c1tpXS0+dnBpKTsKLQkJCQltYm94cS0+dnBvcnQgPSB2cG9ydHNbaV07Ci0JCQkJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKLQkJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsCi0JCQkJCU1CWF9OT1dBSVQpOwotCQkJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJbWVtcG9vbF9mcmVlKG1ib3hxLAotCQkJCQkJcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCQkJfQorCQkJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnRzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCkBAIC0xNzk2LDYgKzE5MjgsNyBAQAogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmID0gbWJveHEtPmNvbnRleHQxOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfTUJPWCwKQEAgLTE4MTMsNyArMTk0NiwxMSBAQAogCQlnb3RvIGZhaWxfZnJlZV9tZW07CiAJfQogCS8qIFRoZSBWUEkgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIHdoZW4gdGhlIFZGSSBpcyByZWdpc3RlcmVkICovCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVkZJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkFCUklDX0NGR19MSU5LKSB7CiAJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwpAQCAtMjA1MCw4ICsyMTg3LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwKLQkJCQkJTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOworCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMTM5LDEwICsyMjc1LDEyIEBACiAJfQogCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSBsYS0+ZXZlbnRUYWc7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKGxhLT5tbSkKIAkJcGhiYS0+c2xpLnNsaV9mbGFnIHw9IExQRkNfTUVOTE9fTUFJTlQ7CiAJZWxzZQogCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfTUVOTE9fTUFJTlQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCXBoYmEtPmxpbmtfZXZlbnRzKys7CiAJaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVAgJiYgKCFsYS0+bW0pKSB7CkBAIC0yMjcxLDEwICsyNDA5LDEwIEBACiAJCQkJIG1iLT5tYnhTdGF0dXMpOwogCQlicmVhazsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfT0s7CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJLyoKQEAgLTIzMzIsNyArMjQ3MCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT52cGlfc3RhdGUgfD0gTFBGQ19WUElfUkVHSVNURVJFRDsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPm51bV9kaXNjX25vZGVzID0gMDsKIAkvKiBnbyB0aHJ1IE5QUiBsaXN0IGFuZCBpc3N1ZSBFTFMgUExPR0lzICovCiAJaWYgKHZwb3J0LT5mY19ucHJfY250KQpAQCAtMzIxOCw2ICszMzU5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY191bnJlZ19oYmFfcnBpcyAtIFVucmVnaXN0ZXIgcnBpcyByZWdpc3RlcmVkIHRvIHRoZSBoYmEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byB1bnJlZ2lzdGVyIGFsbCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgUlBJcworICogdG8gdGhlIEhCQS4KKyAqKi8KK3ZvaWQKK2xwZmNfdW5yZWdfaGJhX3JwaXMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCWludCBpOworCisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZ2cG9ydHNbaV0tPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpCisJCQkJbHBmY191bnJlZ19ycGkodnBvcnRzW2ldLCBuZGxwKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJfQorCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Cit9CisKIHZvaWQKIGxwZmNfdW5yZWdfYWxsX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNDQ0OCw2ICs0NjE3LDE5NSBAQAogfQogCiAvKioKKyAqIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcCAtIFVucmVnaXN0ZXIgZmNmIHJlY29yZCBwcmVwYXJhdGlvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZSB0aGUgSEJBIGZvciB1bnJlZ2lzdGVyaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZAorICogRkNGIGZyb20gdGhlIEhCQS4gSXQgcGVyZm9ybXMgdW5yZWdpc3RlcmluZywgaW4gb3JkZXIsIFJQSXMsIFZQSXMsIGFuZAorICogVkZJcy4KKyAqLworaW50CitscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgaSwgcmM7CisKKwkvKiBVbnJlZ2lzdGVyIFJQSXMgKi8KKwlpZiAobHBmY19mY2ZfaW51c2UocGhiYSkpCisJCWxwZmNfdW5yZWdfaGJhX3JwaXMocGhiYSk7CisKKwkvKiBBdCB0aGlzIHBvaW50LCBhbGwgZGlzY292ZXJ5IGlzIGFib3J0ZWQgKi8KKwlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfVlBPUlRfVU5LTk9XTjsKKworCS8qIFVucmVnaXN0ZXIgVlBJcyAqLworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cyAmJiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkpCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQkvKiBTdG9wIEZMT0dJL0ZESVNDIHJldHJpZXMgKi8KKwkJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZCh2cG9ydHNbaV0sIEZhYnJpY19ESUQpOworCQkJaWYgKG5kbHApCisJCQkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHZwb3J0c1tpXSwgbmRscCk7CisJCQlscGZjX21ieF91bnJlZ192cGkodnBvcnRzW2ldKTsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOworCQkJdnBvcnRzW2ldLT52cGlfc3RhdGUgJj0gfkxQRkNfVlBJX1JFR0lTVEVSRUQ7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCisJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzICovCisJbHBmY19lbHNfZmx1c2hfYWxsX2NtZChwaGJhKTsKKworCS8qIFVucmVnaXN0ZXIgVkZJICovCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlscGZjX3VucmVnX3ZmaShtYm94LCBwaGJhLT5wcG9ydCk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfdmZpX2NtcGw7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgorCQkJCSJIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXJjLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJcGhiYS0+cHBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZiAtIFVucmVnaXN0ZXIgY3VycmVudGx5IHJlZ2lzdGVyZWQgRkNGIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHN5bmNocm9ub3VzIHVucmVnaXN0ZXIgRkNGIG1haWxib3ggY29tbWFuZCB0byBIQkEgdG8KKyAqIHVucmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiByZWNvcmQuIFRoZSBkcml2ZXIgZG9lcyBub3QgcmVzZXQKKyAqIHRoZSBkcml2ZXIgRkNGIHVzYWdlIHN0YXRlIGZsYWdzLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWxseSBpc3N1ZWQsIG5vbmUtemVybyBvdGhlcndpc2UuCisgKi8KK2ludAorbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJaW50IHJjOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkiMjU1MiBVbnJlZ2lzdGVyIEZDRkkgY29tbWFuZCBmYWlsZWQgcmMgeCV4ICIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4gLSBVbnJlZ2lzdGVyIGN1cnJlbnRseSByZWdpc3RlcmVkIGZjZiBhbmQgcmVzY2FuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBUaGlzIGZ1bmN0aW9uCisgKiBhbHNvIHRyaWVzIHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeSBieSByZXNjYW4gdGhlIEhCQSBGQ0YgdGFibGUuCisgKi8KK3ZvaWQKK2xwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmM7CisKKwkvKiBQcmVwYXJhdGlvbiBmb3IgdW5yZWdpc3RlcmluZyBmY2YgKi8KKwlyYyA9IGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcChwaGJhKTsKKwlpZiAocmMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAorCQkJCSIyNzQ4IEZhaWxlZCB0byBwcmVwYXJlIGZvciB1bnJlZ2lzdGVyaW5nICIKKwkJCQkiSEJBJ3MgRkNGIHJlY29yZDogcmM9JWRcbiIsIHJjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdywgdW5yZWdpc3RlciBGQ0YgcmVjb3JkIGFuZCByZXNldCBIQkEgRkNGIHN0YXRlICovCisJcmMgPSBscGZjX3NsaTRfdW5yZWdpc3Rlcl9mY2YocGhiYSk7CisJaWYgKHJjKQorCQlyZXR1cm47CisJLyogUmVzZXQgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyA9IDA7CisKKwkvKgorCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKKwkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KKwkgKi8KKwlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8CisJICAgIChwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKKwkJcmV0dXJuOworCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKworCWlmIChyYykKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTUzIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmIGZhaWxlZCAiCisJCQkJInRvIHJlYWQgRkNGIHJlY29yZCBIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKK30KKworLyoqCisgKiBscGZjX3VucmVnaXN0ZXJfZmNmIC0gVW5yZWdpc3RlciB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZmNmIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24ganVzdCB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBJdCBkb2VzIG5vdAorICogdHJ5IHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeS4KKyAqLwordm9pZAorbHBmY191bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJLyogUHJlcGFyYXRpb24gZm9yIHVucmVnaXN0ZXJpbmcgZmNmICovCisJcmMgPSBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAocGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0OSBGYWlsZWQgdG8gcHJlcGFyZSBmb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJIkhCQSdzIEZDRiByZWNvcmQ6IHJjPSVkXG4iLCByYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIHVucmVnaXN0ZXIgRkNGIHJlY29yZCBhbmQgcmVzZXQgSEJBIEZDRiBzdGF0ZSAqLworCXJjID0gbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCWlmIChyYykKKwkJcmV0dXJuOworCS8qIFNldCBwcm9wZXIgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFR0lTVEVSRUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZiAtIFVucmVnaXN0ZXIgRkNGIGlmIGFsbCBkZXZpY2VzIGFyZSBkaXNjb25uZWN0ZWQuCiAgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCiAgKgpAQCAtNDQ1OCwyMSArNDgxNiwxNCBAQAogdm9pZAogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCUxQRkNfTUJPWFFfdCAqbWJveDsKLQlpbnQgcmM7Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7Ci0JaW50IGk7Ci0KLQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkvKgotCSAqIElmIEhCQSBpcyBub3QgcnVubmluZyBpbiBGSVAgbW9kZSBvcgotCSAqIElmIEhCQSBkb2VzIG5vdCBzdXBwb3J0IEZDb0Ugb3IKLQkgKiBJZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQuCi0JICogZG8gbm90aGluZy4KKwkgKiBJZiBIQkEgaXMgbm90IHJ1bm5pbmcgaW4gRklQIG1vZGUgb3IgaWYgSEJBIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBGQ29FIG9yIGlmIEZDRiBpcyBub3QgcmVnaXN0ZXJlZCwgZG8gbm90aGluZy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpIHx8Ci0JCSEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8Ci0JCSghKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSkpIHsKKwkgICAgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgfHwKKwkgICAgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ0ODEsOTEgKzQ4MzIsNyBAQAogCWlmIChscGZjX2ZjZl9pbnVzZShwaGJhKSkKIAkJcmV0dXJuOwogCi0JLyogQXQgdGhpcyBwb2ludCwgYWxsIGRpc2NvdmVyeSBpcyBhYm9ydGVkICovCi0JcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047Ci0KLQkvKiBVbnJlZ2lzdGVyIFZQSXMgKi8KLQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwotCWlmICh2cG9ydHMgJiYKLQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQotCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewotCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7Ci0JCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKLQkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJfQotCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Ci0KLQkvKiBVbnJlZ2lzdGVyIFZGSSAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JbHBmY191bnJlZ192ZmkobWJveCwgcGhiYS0+cHBvcnQpOwotCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX3ZmaV9jbXBsOwotCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOwotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgotCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBVbnJlZ2lzdGVyIEZDRiAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7Ci0JbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKLQltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKLQotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTUyIFVOUkVHX0ZDRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwKLQkJRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfQk9PVF9FTkFCTEUgfCBGQ0ZfSU5fVVNFIHwKLQkJRkNGX1ZBTElEX1ZMQU4pOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0KLQkvKgotCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKLQkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KLQkgKi8KLQlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8Ci0JCShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKLQkJcmV0dXJuOwotCi0JcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKLQotCWlmIChyYykKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTMgbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YgZmFpbGVkIHRvIHJlYWQgRkNGIgotCQkJIiByZWNvcmQgSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwlscGZjX3VucmVnaXN0ZXJfZmNmX3Jlc2NhbihwaGJhKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggYzlmYWExZC4uODlmZjdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTM0Niw2ICsxMzQ2LDkgQEAKICNkZWZpbmUgTUJYX0hFQVJUQkVBVCAgICAgICAweDMxCiAjZGVmaW5lIE1CWF9XUklURV9WUEFSTVMgICAgMHgzMgogI2RlZmluZSBNQlhfQVNZTkNFVlRfRU5BQkxFIDB4MzMKKyNkZWZpbmUgTUJYX1JFQURfRVZFTlRfTE9HX1NUQVRVUyAweDM3CisjZGVmaW5lIE1CWF9SRUFEX0VWRU5UX0xPRyAgMHgzOAorI2RlZmluZSBNQlhfV1JJVEVfRVZFTlRfTE9HIDB4MzkKIAogI2RlZmluZSBNQlhfUE9SVF9DQVBBQklMSVRJRVMgMHgzQgogI2RlZmluZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTCAweDNDCkBAIC0xNDY1LDE3ICsxNDY4LDEzIEBACiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0NOCQkweDk0CiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0FTWU5DX0NOCTB4OTYKIAotLyogVW5oYW5kbGVkIERhdGEgU2VjdXJpdHkgU0xJIENvbW1hbmRzICovCi0jZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DUiAJCTB4RDgKLSNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NYCQkweEQ5Ci0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NSCQkweERBCi0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NYCQkweERCCi0jZGVmaW5lIERTU0NNRF9JTlZBTElEQVRFX0RFSwkJMHhEQwotI2RlZmluZSBEU1NDTURfU0VUX0tFSwkJCTB4REQKLSNkZWZpbmUgRFNTQ01EX0dFVF9LRUtfSUQJCTB4REUKLSNkZWZpbmUgRFNTQ01EX0dFTl9YRkVSCQkJMHhERgorLyogRGF0YSBTZWN1cml0eSBTTEkgQ29tbWFuZHMgKi8KKyNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NSCQkweEY4CisjZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DWAkJMHhGOQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DUgkJMHhGQQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DWAkJMHhGQgogCi0jZGVmaW5lIENNRF9NQVhfSU9DQl9DTUQgICAgICAgIDB4RTYKKyNkZWZpbmUgQ01EX01BWF9JT0NCX0NNRCAgICAgICAgMHhGQgogI2RlZmluZSBDTURfSU9DQl9NQVNLICAgICAgICAgICAweGZmCiAKICNkZWZpbmUgTUFYX01TR19EQVRBICAgICAgICAgICAgMjgJLyogbWF4IG1zZyBkYXRhIGluIENNRF9BREFQVEVSX01TRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKaW5kZXggOGEyYTFjNS4uODIwMDE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC01MiwzNSArNTIsMzcgQEAKIAl1aW50MzJfdCBhZGRyX2hpOwogfTsKIAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1dPUkQJMHg1OAogc3RydWN0IGxwZmNfc2xpX2ludGYgewogCXVpbnQzMl90IHdvcmQwOwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9NQVNLIAkweDAwMDAwMDA3Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1NISUZUCTAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9NQVNLIAkJMHgwMDAwMDAwZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9TSElGVAkJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9XT1JECQl3b3JkMAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1NMSTQJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9NQVNLIAkweDAwMDAwMGZmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1NISUZUCTgKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX01BU0sgCTB4MDAwMDAwZmYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9TSElGVAkxNgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9NQVNLIAkweDAwMDAwMDFmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfU0hJRlQJMjQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfTUFTSyAJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCTI5Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCQkyOQorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9XT1JECQl3b3JkMAogI2RlZmluZSBMUEZDX1NMSV9JTlRGX1ZBTElECQk2CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9TSElGVAkyNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfTUFTSwkweDAwMDAwMDFGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9TSElGVAkxNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9XT1JECXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xCTEKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9GRUFUVVJFTEVWRUwxXzIJMgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfU0hJRlQJCTgKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMgkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMwkxCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1NISUZUCQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X01BU0sJCTB4MDAwMDAwMEYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlyZXZfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJMwkJMworI2RlZmluZSBMUEZDX1NMSV9JTlRGX1JFVl9TTEk0CQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZfdHlwZV9TSElGVAkJMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzAJCTAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzEJCTEKIH07CiAKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjAJCTEKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjEJCTIKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjIJCTQKLQogI2RlZmluZSBMUEZDX1NMSTRfTUJYX0VNQkVECXRydWUKICNkZWZpbmUgTFBGQ19TTEk0X01CWF9ORU1CRUQJZmFsc2UKIApAQCAtMTYxLDYgKzE2Myw5IEBACiAjZGVmaW5lIExQRkNfRlBfREVGX0lNQVggICAgICAgMTAwMDAKICNkZWZpbmUgTFBGQ19TUF9ERUZfSU1BWCAgICAgICAxMDAwMAogCisvKiBQT1JUX0NBUEFCSUxJVElFUyBjb25zdGFudHMuICovCisjZGVmaW5lIExQRkNfTUFYX1NVUFBPUlRFRF9QQUdFUwk4CisKIHN0cnVjdCB1bHBfYmRlNjQgewogCXVuaW9uIFVMUF9CREVfVFVTIHsKIAkJdWludDMyX3QgdzsKQEAgLTUxNiw3ICs1MjEsNyBAQAogI2RlZmluZSBMUEZDX1VFUlJfU1RBVFVTX0xPCQkweDAwQTAKICNkZWZpbmUgTFBGQ19VRV9NQVNLX0hJCQkJMHgwMEFDCiAjZGVmaW5lIExQRkNfVUVfTUFTS19MTwkJCTB4MDBBOAotI2RlZmluZSBMUEZDX1NDUkFUQ0hQQUQJCQkweDAwNTgKKyNkZWZpbmUgTFBGQ19TTElfSU5URgkJCTB4MDA1OAogCiAvKiBCQVIwIFJlZ2lzdGVycyAqLwogI2RlZmluZSBMUEZDX0hTVF9TVEFURQkJCTB4MDBBQwpAQCAtNTc2LDE5ICs1ODEsNiBAQAogI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfQVJNRldfUkVBRFkJCQkweEMwMDAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1VFIAkJCTB4RjAwMAogCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfU0hJRlQJCQk0Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfTUFTSwkJCTB4RgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X1dPUkQJCQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfU0hJRlQJCQk4Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9jaGlwdHlwZV9NQVNLCQkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfV09SRAkJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1NISUZUCQkxNgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1dPUkQJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1NISUZUCQkyNAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1dPUkQJCXdvcmQwCi0KIC8qIEJBUjEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIExQRkNfSU1SX01BU0tfQUxMCTB4RkZGRkZGRkYKICNkZWZpbmUgTFBGQ19JU0NSX0NMRUFSX0FMTAkweEZGRkZGRkZGCkBAIC04MDEsNiArNzkzLDcgQEAKICNkZWZpbmUgTFBGQ19NQk9YX09QQ09ERV9GQ09FX0FERF9GQ0YJCQkweDA5CiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9ERUxFVEVfRkNGCQkweDBBCiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9QT1NUX0hEUl9URU1QTEFURQkJMHgwQgorI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVESVNDT1ZFUl9GQ0YJCTB4MTAKIAogLyogTWFpbGJveCBjb21tYW5kIHN0cnVjdHVyZXMgKi8KIHN0cnVjdCBlcV9jb250ZXh0IHsKQEAgLTExNDksMTAgKzExNDIsNyBAQAogCQkJCQkJdGhpcyAgZmxhZyAhISAqLwogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfTUFTSwkJMHgwMDAwMDAwMQogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfV09SRAkJd29yZDIKLQl1aW50MzJfdCB3b3JkMzsKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fU0hJRlQJCTAKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fTUFTSwkJMHgwMDAxRkZGRgotI2RlZmluZSBscGZjX3NsaTRfc2dlX2xlbl9XT1JECQl3b3JkMworCXVpbnQzMl90IHNnZV9sZW47CiB9OwogCiBzdHJ1Y3QgZmNmX3JlY29yZCB7CkBAIC0xMzAxLDYgKzEyOTEsMTkgQEAKICNkZWZpbmUgbHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXhfV09SRAkJd29yZDEwCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgeworCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1NISUZUCQkwCisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnRfTUFTSwkJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1dPUkQJCXdvcmQxMAorCXVpbnQzMl90IHJlc3ZkOworCXVpbnQzMl90IHdvcmQxMjsKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2luZGV4X01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9XT1JECQl3b3JkMTIKK307CisKIHN0cnVjdCBscGZjX21ieF9xdWVyeV9md19jZmcgewogCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CiAJdWludDMyX3QgY29uZmlnX251bWJlcjsKQEAgLTE4MzQsNiArMTgzNywxNzcgQEAKICNkZWZpbmUgbHBmY19tYnhfcnFfZnRyX3JzcF9pZmlwX1dPUkQJCXdvcmQzCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyB7CisJdWludDMyX3Qgd29yZDE7CisjZGVmaW5lIHFzX1NISUZUIAkJCQkwCisjZGVmaW5lIHFzX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcXNfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgd3JfU0hJRlQJCQkJMQorI2RlZmluZSB3cl9NQVNLIAkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHdyX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHBmX1NISUZUCQkJCTgKKyNkZWZpbmUgcGZfTUFTSwkJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwZl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBjcG5fU0hJRlQJCQkJMTYKKyNkZWZpbmUgY3BuX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcG5fV09SRAkJCQl3b3JkMQorCXVpbnQzMl90IHdvcmQyOworI2RlZmluZSBsaXN0X29mZnNldF9TSElGVCAJCQkwCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X1dPUkQJCQl3b3JkMgorI2RlZmluZSBuZXh0X29mZnNldF9TSElGVAkJCTgKKyNkZWZpbmUgbmV4dF9vZmZzZXRfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbmV4dF9vZmZzZXRfV09SRAkJCXdvcmQyCisjZGVmaW5lIGVsZW1fY250X1NISUZUCQkJCTE2CisjZGVmaW5lIGVsZW1fY250X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBlbGVtX2NudF9XT1JECQkJCXdvcmQyCisJdWludDMyX3Qgd29yZDM7CisjZGVmaW5lIHBuXzBfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fMF9NQVNLICAJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8wX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMV9TSElGVAkJCQkxNgorI2RlZmluZSBwbl8xX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8xX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMl9TSElGVAkJCQk4CisjZGVmaW5lIHBuXzJfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzJfV09SRAkJCQl3b3JkMworI2RlZmluZSBwbl8zX1NISUZUCQkJCTAKKyNkZWZpbmUgcG5fM19NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fM19XT1JECQkJCXdvcmQzCisJdWludDMyX3Qgd29yZDQ7CisjZGVmaW5lIHBuXzRfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fNF9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNF9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzVfU0hJRlQJCQkJMTYKKyNkZWZpbmUgcG5fNV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNV9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzZfU0hJRlQJCQkJOAorI2RlZmluZSBwbl82X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl82X1dPUkQJCQkJd29yZDQKKyNkZWZpbmUgcG5fN19TSElGVAkJCQkwCisjZGVmaW5lIHBuXzdfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzdfV09SRAkJCQl3b3JkNAorCXVpbnQzMl90IHJzdmRbMjddOworI2RlZmluZSBMUEZDX1NVUFBfUEFHRVMJCQkwCisjZGVmaW5lIExQRkNfQkxPQ0tfR1VBUkRfUFJPRklMRVMJMQorI2RlZmluZSBMUEZDX1NMSTRfUEFSQU1FVEVSUwkJMgorfTsKKworc3RydWN0IGxwZmNfbWJ4X3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCB3b3JkMTsKKyNkZWZpbmUgcXNfU0hJRlQJCQkJMAorI2RlZmluZSBxc19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHFzX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHdyX1NISUZUCQkJCTEKKyNkZWZpbmUgd3JfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSB3cl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBwZl9TSElGVAkJCQk4CisjZGVmaW5lIHBmX01BU0sJCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcGZfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgY3BuX1NISUZUCQkJCTE2CisjZGVmaW5lIGNwbl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3BuX1dPUkQJCQkJd29yZDEKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgaWZfdHlwZV9TSElGVAkJCQkwCisjZGVmaW5lIGlmX3R5cGVfTUFTSwkJCQkweDAwMDAwMDA3CisjZGVmaW5lIGlmX3R5cGVfV09SRAkJCQl3b3JkMgorI2RlZmluZSBzbGlfcmV2X1NISUZUCQkJCTQKKyNkZWZpbmUgc2xpX3Jldl9NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2xpX3Jldl9XT1JECQkJCXdvcmQyCisjZGVmaW5lIHNsaV9mYW1pbHlfU0hJRlQJCQk4CisjZGVmaW5lIHNsaV9mYW1pbHlfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHNsaV9mYW1pbHlfV09SRAkJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9TSElGVAkJCTE2CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX1dPUkQJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9TSElGVAkJCTI0CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX01BU0sJCQkweDAwMDAwMDFmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX1dPUkQJCQl3b3JkMgorCXVpbnQzMl90IHdvcmQzOworI2RlZmluZSBmY29lX1NISUZUIAkJCQkwCisjZGVmaW5lIGZjb2VfTUFTSwkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZjb2VfV09SRAkJCQl3b3JkMworI2RlZmluZSBmY19TSElGVAkJCQkxCisjZGVmaW5lIGZjX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZmNfV09SRAkJCQkJd29yZDMKKyNkZWZpbmUgbmljX1NISUZUCQkJCTIKKyNkZWZpbmUgbmljX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBuaWNfV09SRAkJCQl3b3JkMworI2RlZmluZSBpc2NzaV9TSElGVAkJCQkzCisjZGVmaW5lIGlzY3NpX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBpc2NzaV9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHJkbWFfU0hJRlQJCQkJNAorI2RlZmluZSByZG1hX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSByZG1hX1dPUkQJCQkJd29yZDMKKwl1aW50MzJfdCBzZ2Vfc3VwcF9sZW47CisJdWludDMyX3Qgd29yZDU7CisjZGVmaW5lIGlmX3BhZ2Vfc3pfU0hJRlQJCQkwCisjZGVmaW5lIGlmX3BhZ2Vfc3pfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIGlmX3BhZ2Vfc3pfV09SRAkJCQl3b3JkNQorI2RlZmluZSBsb29wYmtfc2NvcGVfU0hJRlQJCQkyNAorI2RlZmluZSBsb29wYmtfc2NvcGVfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX1dPUkQJCQl3b3JkNQorI2RlZmluZSBycV9kYl93aW5kb3dfU0hJRlQJCQkyOAorI2RlZmluZSBycV9kYl93aW5kb3dfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgcnFfZGJfd2luZG93X1dPUkQJCQl3b3JkNQorCXVpbnQzMl90IHdvcmQ2OworI2RlZmluZSBlcV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIGVxX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBlcV9wYWdlc19XT1JECQkJCXdvcmQ2CisjZGVmaW5lIGVxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgZXFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIGVxZV9zaXplX1dPUkQJCQkJd29yZDYKKwl1aW50MzJfdCB3b3JkNzsKKyNkZWZpbmUgY3FfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBjcV9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgY3FfcGFnZXNfV09SRAkJCQl3b3JkNworI2RlZmluZSBjcWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGNxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcWVfc2l6ZV9XT1JECQkJCXdvcmQ3CisJdWludDMyX3Qgd29yZDg7CisjZGVmaW5lIG1xX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgbXFfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIG1xX3BhZ2VzX1dPUkQJCQkJd29yZDgKKyNkZWZpbmUgbXFlX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBtcWVfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbXFlX3NpemVfV09SRAkJCQl3b3JkOAorI2RlZmluZSBtcV9lbGVtX2NudF9TSElGVAkJCTE2CisjZGVmaW5lIG1xX2VsZW1fY250X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIG1xX2VsZW1fY250X1dPUkQJCQl3b3JkOAorCXVpbnQzMl90IHdvcmQ5OworI2RlZmluZSB3cV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHdxX3BhZ2VzX01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSB3cV9wYWdlc19XT1JECQkJCXdvcmQ5CisjZGVmaW5lIHdxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgd3FlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHdxZV9zaXplX1dPUkQJCQkJd29yZDkKKwl1aW50MzJfdCB3b3JkMTA7CisjZGVmaW5lIHJxX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgcnFfcGFnZXNfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIHJxX3BhZ2VzX1dPUkQJCQkJd29yZDEwCisjZGVmaW5lIHJxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgcnFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHJxZV9zaXplX1dPUkQJCQkJd29yZDEwCisJdWludDMyX3Qgd29yZDExOworI2RlZmluZSBoZHJfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBoZHJfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIGhkcl9wYWdlc19XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGhkcl9zaXplX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBoZHJfc2l6ZV9XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfcHBfYWxpZ25fU0hJRlQJCQkxNgorI2RlZmluZSBoZHJfcHBfYWxpZ25fTUFTSwkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgaGRyX3BwX2FsaWduX1dPUkQJCQl3b3JkMTEKKwl1aW50MzJfdCB3b3JkMTI7CisjZGVmaW5lIHNnbF9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHNnbF9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2dsX3BhZ2VzX1dPUkQJCQkJd29yZDEyCisjZGVmaW5lIHNnbF9wcF9hbGlnbl9TSElGVAkJCTE2CisjZGVmaW5lIHNnbF9wcF9hbGlnbl9NQVNLCQkJMHgwMDAwZmZmZgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fV09SRAkJCXdvcmQxMgorCXVpbnQzMl90IHJzdmRfMTNfNjNbNTFdOworfTsKKwogLyogTWFpbGJveCBDb21wbGV0aW9uIFF1ZXVlIEVycm9yIE1lc3NhZ2VzICovCiAjZGVmaW5lIE1CX0NRRV9TVEFUVVNfU1VDQ0VTUyAJCQkweDAKICNkZWZpbmUgTUJfQ1FFX1NUQVRVU19JTlNVRkZJQ0lFTlRfUFJJVklMRUdFUwkweDEKQEAgLTE4NjMsNiArMjAzNyw3IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgcmVhZF9mY2ZfdGJsOwogCQlzdHJ1Y3QgbHBmY19tYnhfYWRkX2ZjZl90YmxfZW50cnkgYWRkX2ZjZl9lbnRyeTsKIAkJc3RydWN0IGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2VudHJ5IGRlbF9mY2ZfZW50cnk7CisJCXN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCByZWRpc2NfZmNmX3RibDsKIAkJc3RydWN0IGxwZmNfbWJ4X3JlZ19mY2ZpIHJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfdW5yZWdfZmNmaSB1bnJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfbXFfY3JlYXRlIG1xX2NyZWF0ZTsKQEAgLTE4ODMsNiArMjA1OCw4IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZXF1ZXN0X2ZlYXR1cmVzIHJlcV9mdHJzOwogCQlzdHJ1Y3QgbHBmY19tYnhfcG9zdF9oZHJfdG1wbCBoZHJfdG1wbDsKIAkJc3RydWN0IGxwZmNfbWJ4X3F1ZXJ5X2Z3X2NmZyBxdWVyeV9md19jZmc7CisJCXN0cnVjdCBscGZjX21ieF9zdXBwX3BhZ2VzIHN1cHBfcGFnZXM7CisJCXN0cnVjdCBscGZjX21ieF9zbGk0X3BhcmFtcyBzbGk0X3BhcmFtczsKIAkJc3RydWN0IGxwZmNfbWJ4X25vcCBub3A7CiAJfSB1bjsKIH07CkBAIC0xOTU5LDYgKzIxMzYsOSBAQAogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfTk9ORQkweDAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX0xPQ0FMCTB4MQogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfUkVNT1RFCTB4MgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX01BU0sJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfV09SRAl3b3JkMQogCXVpbnQzMl90IGV2ZW50X3RhZzsKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKQEAgLTE5NzYsNiArMjE1Niw3IEBACiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9UQUJMRV9GVUxMCTB4MgogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfREVBRAkJMHgzCiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0NWTAkJMHg0CisjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0QJMHg1CiAJdWludDMyX3QgZXZlbnRfdGFnOwogCXVpbnQzMl90IHRyYWlsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBiOGViMWI2Li5kMjlhYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID09IDApIHsKIAkJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksCiAJCQlwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKQEAgLTYwMyw2ICs2MDMsMTAyIEBACiB9CiAKIC8qKgorICogbHBmY19oYmFfaW5pdF9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgRkMgbGluaworICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIElOSVRfTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIGFzIGEgZGVsYXllZCBsaW5rIHVwIG1lY2hhbmlzbSB3aXRoIHRoZQorICogbW9kdWxlIHBhcmFtZXRlciBscGZjX3N1cHByZXNzX2xpbmtfdXAuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2luaXRfbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlpbnQgcmM7CisKKwlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghcG1iKSB7CisJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1iID0gJnBtYi0+dS5tYjsKKwlwbWItPnZwb3J0ID0gdnBvcnQ7CisKKwlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwKKwkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJIjA0OTggQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCisJCQkiSU5JVF9MSU5LLCBtYnhTdGF0dXMgeCV4XG4iLAorCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOworCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCisJCXdyaXRlbCgwLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCWlmIChyYyAhPSBNQlhfQlVTWSkKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcGhiYS0+Y2ZnX3N1cHByZXNzX2xpbmtfdXAgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19oYmFfZG93bl9saW5rIC0gdGhpcyByb3V0aW5lIGRvd25zIHRoZSBGQyBsaW5rCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIERPV05fTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIHRvIHN0b3AgdGhlIGxpbmsuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJaW50IHJjOworCisJcG1iID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCSIwNDkxIEFkYXB0ZXIgTGluayBpcyBkaXNhYmxlZC5cbiIpOworCWxwZmNfZG93bl9saW5rKHBoYmEsIHBtYik7CisJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCUtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJIjI1MjIgQWRhcHRlciBmYWlsZWQgdG8gaXNzdWUgRE9XTl9MSU5LIgorCQkiIG1ib3ggY29tbWFuZCByYyAweCV4XG4iLCByYyk7CisKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX2hiYV9kb3duX3ByZXAgLSBQZXJmb3JtIGxwZmMgdW5pbml0aWFsaXphdGlvbiBwcmlvciB0byBIQkEgcmVzZXQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgSEJBIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTIwNzMsNiArMjE2OSw0NCBAQAogfQogCiAvKioKKyAqIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gVGhlCisgKiBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNob3VsZCBhbHJlYWR5IGhvbGQgdGhlIGhvc3QgbG9jay4KKyAqKi8KK3ZvaWQKK19fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwkvKiBDbGVhciBwZW5kaW5nIEZDRiByZWRpc2NvdmVyeSB3YWl0IHRpbWVyICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX1BFTkQ7CisJLyogTm93LCB0cnkgdG8gc3RvcCB0aGUgdGltZXIgKi8KKwlkZWxfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gSXQKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZSBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBpcyBwZW5kaW5nIHdpdGggdGhlIGhvc3QKKyAqIGxvY2sgaGVsZCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRpc2FibGluZyB0aGUgdGltZXIgYW5kIGNsZWFyaW5nIHRoZQorICogd2FpdCB0aW1lciBwZW5kaWcgZmxhZy4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKSkgeworCQkvKiBGQ0YgcmVkaXNjb3ZlcnkgdGltZXIgYWxyZWFkeSBmaXJlZCBvciBzdG9wcGVkICovCisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJX19scGZjX3NsaTRfc3RvcF9mY2ZfcmVkaXNjX3dhaXRfdGltZXIocGhiYSk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3N0b3BfaGJhX3RpbWVycyAtIFN0b3AgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGFuIEhCQQogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMjA5Niw2ICsyMjMwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX1BDSV9ERVZfT0M6CiAJCS8qIFN0b3AgYW55IE9uZUNvbm5lY3QgZGV2aWNlIHNlcGNpZmljIGRyaXZlciB0aW1lcnMgKi8KKwkJbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApAQCAtMjIyOCw2ICsyMzYzLDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHAsICpuZXh0X25kbHA7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJaW50IGk7CiAKIAlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19PRkZMSU5FX01PREUpCkBAIC0yMjQxLDExICsyMzc3LDE1IEBACiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKLQkJCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwotCiAJCQlpZiAodnBvcnRzW2ldLT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpCiAJCQkJY29udGludWU7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCiAJCQlzaG9zdCA9CWxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwKIAkJCQkJCSAmdnBvcnRzW2ldLT5mY19ub2RlcywKQEAgLTI0MDEsNyArMjU0MSw4IEBACiAJc2hvc3QtPnRoaXNfaWQgPSAtMTsKIAlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKIAlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7Ci0JCXNob3N0LT5kbWFfYm91bmRhcnkgPSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRTsKKwkJc2hvc3QtPmRtYV9ib3VuZGFyeSA9CisJCQlwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zZ2Vfc3VwcF9sZW47CiAJCXNob3N0LT5zZ190YWJsZXNpemUgPSBwaGJhLT5jZmdfc2dfc2VnX2NudDsKIAl9CiAKQEAgLTI2NTAsOCArMjc5MSw2IEBACiAJbHBmY19zdG9wX2hiYV90aW1lcnMocGhiYSk7CiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogCXBoYmEtPnNsaTRfaGJhLmludHJfZW5hYmxlID0gMDsKLQkvKiBIYXJkIGNsZWFyIGl0IGZvciBub3csIHNoYWxsIGhhdmUgbW9yZSBncmFjZWZ1bCB3YXkgdG8gd2FpdCBsYXRlciAqLwotCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiB9CiAKIC8qKgpAQCAtMjcwMyw3ICsyODQyLDcgQEAKIAlkZWxfZmNmX3JlY29yZCA9ICZtYm94cS0+dS5tcWUudW4uZGVsX2ZjZl9lbnRyeTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfY291bnQsIGRlbF9mY2ZfcmVjb3JkLCAxKTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXgsIGRlbF9mY2ZfcmVjb3JkLAotCSAgICAgICBwaGJhLT5mY2YuZmNmX2luZHgpOworCSAgICAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpOwogCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CkBAIC0yNzI3LDYgKzI4NjYsNTcgQEAKIH0KIAogLyoqCisgKiBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lciAtIFN0YXJ0IGZjZiByZWRpc2NvdmVyIHdhaXQgdGltZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIHRpbWVyIHdhaXRpbmcgZm9yIHRoZSBGQ0YgcmVkaXNjb3ZlcnkgdG8gY29tcGxldGUuCisgKiovCit2b2lkCitscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgbG9uZyBmY2ZfcmVkaXNjX3dhaXRfdG1vID0KKwkJKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8pKTsKKwkvKiBTdGFydCBmY2YgcmVkaXNjb3Zlcnkgd2FpdCBwZXJpb2QgdGltZXIgKi8KKwltb2RfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCwgZmNmX3JlZGlzY193YWl0X3Rtbyk7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQWxsb3cgYWN0aW9uIHRvIG5ldyBmY2YgYXN5bmNocm9ub3VzIGV2ZW50ICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCS8qIE1hcmsgdGhlIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nIHN0YXRlICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfUEVORDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vIC0gRkNGIHRhYmxlIHJlZGlzY292ZXIgd2FpdCB0aW1lb3V0CisgKiBAcHRyOiBNYXAgdG8gbHBmY19oYmEgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB3aGVuIHdhaXRpbmcgZm9yIEZDRiB0YWJsZSByZWRpc2NvdmVyIGhhcyBiZWVuCisgKiB0aW1lZCBvdXQuIElmIG5ldyBGQ0YgcmVjb3JkKHMpIGhhcyAoaGF2ZSkgYmVlbiBkaXNjb3ZlcmVkIGR1cmluZyB0aGUKKyAqIHdhaXQgcGVyaW9kLCBhIG5ldyBGQ0YgZXZlbnQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIEZDT0UgYXN5bmMgZXZlbnQKKyAqIGxpc3QsIGFuZCB0aGVuIHdvcmtlciB0aHJlYWQgc2hhbGwgYmUgd2FrZWQgdXAgZm9yIHByb2Nlc3NpbmcgZnJvbSB0aGUKKyAqIHdvcmtlciB0aHJlYWQgY29udGV4dC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisKKwkvKiBEb24ndCBzZW5kIEZDRiByZWRpc2NvdmVyeSBldmVudCBpZiB0aW1lciBjYW5jZWxsZWQgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVyIHBlbmRpbmcgZmxhZyAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19QRU5EOworCS8qIEZDRiByZWRpc2NvdmVyeSBldmVudCB0byB3b3JrZXIgdGhyZWFkICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfRVZUOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogd2FrZSB1cCB3b3JrZXIgdGhyZWFkICovCisJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKK30KKworLyoqCiAgKiBscGZjX3NsaTRfZndfY2ZnX2NoZWNrIC0gUmVhZCB0aGUgZmlybXdhcmUgY29uZmlnIGFuZCB2ZXJpZnkgRkNvRSBzdXBwb3J0CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0yOTc4LDYgKzMxNjgsOCBAQAogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19waHlzaWNhbCwgYWNxZV9saW5rKTsKIAlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmZhdWx0ID0KIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfZmF1bHQsIGFjcWVfbGluayk7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkID0KKwkJCQliZl9nZXQobHBmY19hY3FlX3Fvc19saW5rX3NwZWVkLCBhY3FlX2xpbmspOwogCiAJLyogSW52b2tlIHRoZSBscGZjX2hhbmRsZV9sYXR0IG1haWxib3ggY29tbWFuZCBjYWxsYmFjayBmdW5jdGlvbiAqLwogCWxwZmNfbWJ4X2NtcGxfcmVhZF9sYShwaGJhLCBwbWIpOwpAQCAtMzAwNywyMiArMzE5OSwzNCBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKIAl1aW50MzJfdCBsaW5rX3N0YXRlOworCWludCBhY3RpdmVfdmxpbmtfcHJlc2VudDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlpbnQgaTsKIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CiAJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwogCXN3aXRjaCAoZXZlbnRfdHlwZSkgewogCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfTkVXX0ZDRjoKKwljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0Q6CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKIAkJCSIyNTQ2IE5ldyBGQ0YgZm91bmQgaW5kZXggMHgleCB0YWcgMHgleFxuIiwKIAkJCWFjcWVfZmNvZS0+aW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7Ci0JCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiBpcyBpbiBkaXNjb3ZlcmVkIHN0YXRlLCBvcgotCQkgKiBGQ0YgZGlzY292ZXJ5IGlzIGluIHByb2dyZXNzIGRvIG5vdGhpbmcuCi0JCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJFRCkgfHwKLQkJICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfU0NBTl9ET05FKSB8fAorCQkgICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSBvcgorCQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcywgZG8gbm90aGluZy4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0VWVCkgeworCQkJLyoKKwkJCSAqIElmIGZhc3QgRkNGIGZhaWxvdmVyIHJlc2NhbiBldmVudCBpcyBwZW5kaW5nLAorCQkJICogZG8gbm90aGluZy4KKwkJCSAqLwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDQ5LDcgKzMyNTMsNyBAQAogCQkJIiB0YWcgMHgleFxuIiwgYWNxZV9mY29lLT5pbmRleCwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJLyogSWYgdGhlIGV2ZW50IGlzIG5vdCBmb3IgY3VycmVudGx5IHVzZWQgZmNmIGRvIG5vdGhpbmcgKi8KLQkJaWYgKHBoYmEtPmZjZi5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmluZGV4KQorCQlpZiAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4ICE9IGFjcWVfZmNvZS0+aW5kZXgpCiAJCQlicmVhazsKIAkJLyoKIAkJICogQ3VycmVudGx5LCBkcml2ZXIgc3VwcG9ydCBvbmx5IG9uZSBGQ0YgLSBzbyB0cmVhdCB0aGlzIGFzCkBAIC0zMDc0LDE0ICszMjc4LDU4IEBACiAJCWlmICghbmRscCkKIAkJCWJyZWFrOwogCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKQorCQkJYnJlYWs7CisJCS8qIElmIHZpcnR1YWwgbGluayBpcyBub3QgeWV0IGluc3RhbnRpYXRlZCBpZ25vcmUgQ1ZMICovCisJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZESVNDKQorCQkJYnJlYWs7CisKIAkJbHBmY19saW5rZG93bl9wb3J0KHZwb3J0KTsKLQkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgIT0gTFBGQ19OUElWX1BPUlQpIHsKKwkJbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCh2cG9ydCk7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX0NWTF9SQ1ZEOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWFjdGl2ZV92bGlua19wcmVzZW50ID0gMDsKKworCQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCQlpZiAodnBvcnRzKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7CisJCQkJCWkrKykgeworCQkJCWlmICgoISh2cG9ydHNbaV0tPmZjX2ZsYWcgJgorCQkJCQlGQ19WUE9SVF9DVkxfUkNWRCkpICYmCisJCQkJCSh2cG9ydHNbaV0tPnBvcnRfc3RhdGUgPiBMUEZDX0ZESVNDKSkgeworCQkJCQlhY3RpdmVfdmxpbmtfcHJlc2VudCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJCX0KKworCQlpZiAoYWN0aXZlX3ZsaW5rX3ByZXNlbnQpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgb3RoZXIgYWN0aXZlIFZMaW5rcyBwcmVzZW50LAorCQkJICogcmUtaW5zdGFudGlhdGUgdGhlIFZsaW5rIHVzaW5nIEZESVNDLgorCQkJICovCiAJCQltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IEVMU19DTURfRkxPR0k7Ci0JCQl2cG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfRkxPR0k7CisJCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZESVNDOworCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX0ZESVNDOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgd2UgcmVxdWVzdCBwb3J0IHRvIHJlZGlzY292ZXIKKwkJCSAqIHRoZSBlbnRpcmUgRkNGIHRhYmxlIGZvciBhIGZhc3QgcmVjb3ZlcnkKKwkJCSAqIGZyb20gcG9zc2libGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IEZDRgorCQkJICogaXMgbm8gbG9uZ2VyIHZhbGlkLgorCQkJICovCisJCQlyYyA9IGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlKHBoYmEpOworCQkJaWYgKHJjKQorCQkJCS8qCisJCQkJICogTGFzdCByZXNvcnQgd2lsbCBiZSByZS10cnkgb24gdGhlCisJCQkJICogdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBGQ0YgZW50cnkuCisJCQkJICovCisJCQkJbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkocGhiYSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxNTgsNiArMzQwNiwzNCBAQAogfQogCiAvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2MgLSBQcm9jZXNzIGZjZiB0YWJsZSByZWRpc2NvdmVyeSBldmVudAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyBGQ0YgdGFibGUKKyAqIHJlZGlzY292ZXJ5IHBlbmRpbmcgY29tcGxldGlvbiBldmVudC4KKyAqKi8KK3ZvaWQgbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVvdXQgZXZlbnQgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRVZUOworCS8qIENsZWFyIGRyaXZlciBmYXN0IGZhaWxvdmVyIEZDRiByZWNvcmQgZmxhZyAqLworCXBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyA9IDA7CisJLyogU2V0IHN0YXRlIGZvciBGQ0YgZmFzdCBmYWlsb3ZlciAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0ZPVjsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJLyogU2NhbiBGQ0YgdGFibGUgZnJvbSB0aGUgZmlyc3QgZW50cnkgdG8gcmUtZGlzY292ZXIgU0FOICovCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwlpZiAocmMpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0NyBQb3N0IEZDRiByZWRpc2NvdmVyeSByZWFkIEZDRiByZWNvcmQgIgorCQkJCSJmYWlsZWQgMHgleFxuIiwgcmMpOworfQorCisvKioKICAqIGxwZmNfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIHBlciBoYmEgcGNpLWRldmljZSBncm91cCBmdW5jIGFwaSBqdW1wIHRhYmxlCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgpAQCAtMzQ0Miw4ICszNzE4LDEwIEBACiBscGZjX3NsaTRfZHJpdmVyX3Jlc291cmNlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7Ci0JaW50IHJjOwotCWludCBpLCBoYnFfY291bnQ7CisJTFBGQ19NQk9YUV90ICptYm94cTsKKwlpbnQgcmMsIGksIGhicV9jb3VudCwgYnVmX3NpemUsIGRtYV9idWZfc2l6ZSwgbWF4X2J1Zl9zaXplOworCXVpbnQ4X3QgcG5fcGFnZVtMUEZDX01BWF9TVVBQT1JURURfUEFHRVNdID0gezB9OworCXN0cnVjdCBscGZjX21xZSAqbXFlOwogCiAJLyogQmVmb3JlIHByb2NlZWQsIHdhaXQgZm9yIFBPU1QgZG9uZSBhbmQgZGV2aWNlIHJlYWR5ICovCiAJcmMgPSBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2socGhiYSk7CkBAIC0zNDcyLDYgKzM3NTAsMTEgQEAKIAlpbml0X3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsKTsKIAlwaGJhLT5lcmF0dF9wb2xsLmZ1bmN0aW9uID0gbHBmY19wb2xsX2VyYXR0OwogCXBoYmEtPmVyYXR0X3BvbGwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaGJhOworCS8qIEZDRiByZWRpc2NvdmVyIHRpbWVyICovCisJaW5pdF90aW1lcigmcGhiYS0+ZmNmLnJlZGlzY193YWl0KTsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZnVuY3Rpb24gPSBscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3RtbzsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoYmE7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8gZG8gYSBSRUFEX0NPTkZJRyBtYWlsYm94IGNvbW1hbmQgaGVyZSBiZWZvcmUKIAkgKiBjYWxsaW5nIGxwZmNfZ2V0X2NmZ3BhcmFtLiBGb3IgVkZzIHRoaXMgd2lsbCByZXBvcnQgdGhlCkBAIC0zNDk2LDMxICszNzc5LDI2IEBACiAJICogdXNlZCB0byBjcmVhdGUgdGhlIHNnX2RtYV9idWZfcG9vbCBtdXN0IGJlIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQuCiAJICogMiBzZWdtZW50cyBhcmUgYWRkZWQgc2luY2UgdGhlIElPQ0IgbmVlZHMgYSBjb21tYW5kIGFuZCByZXNwb25zZSBiZGUuCiAJICogVG8gaW5zdXJlIHRoYXQgdGhlIHNjc2kgc2dsIGRvZXMgbm90IGNyb3NzIGEgNGsgcGFnZSBib3VuZGFyeSBvbmx5Ci0JICogc2dsIHNpemVzIG9mIDFrLCAyaywgNGssIGFuZCA4ayBhcmUgc3VwcG9ydGVkLgotCSAqIFRhYmxlIG9mIHNnbCBzaXplcyBhbmQgc2VnX2NudDoKLQkgKiBzZ2wgc2l6ZSwgCXNnX3NlZ19jbnQJdG90YWwgc2VnCi0JICogMWsJCTUwCQk1MgotCSAqIDJrCQkxMTQJCTExNgotCSAqIDRrCQkyNDIJCTI0NAotCSAqIDhrCQk0OTgJCTUwMAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICg1MiAqIHNpemVvZihzbGk0X3NnZSkpID0gMTAyNAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICgxMTYgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDIwNDgKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoMjQ0ICogc2l6ZW9mKHNsaTRfc2dlKSkgPSA0MDk2Ci0JICogY21kKDMyKSArIHJzcCgxNjApICsgKDUwMCAqIHNpemVvZihzbGk0X3NnZSkpID0gODE5MgorCSAqIHNnbCBzaXplcyBvZiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KIAkgKi8KLQlpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gTFBGQ19ERUZBVUxUX1NHX1NFR19DTlQpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gNTA7Ci0JZWxzZSBpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gMTE0KQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDExNDsKLQllbHNlIGlmIChwaGJhLT5jZmdfc2dfc2VnX2NudCA8PSAyNDIpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gMjQyOworCWJ1Zl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCisJCSAgICAoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpOworCS8qIEZlYXR1cmUgTGV2ZWwgMSBoYXJkd2FyZSBpcyBsaW1pdGVkIHRvIDIgcGFnZXMgKi8KKwlpZiAoKGJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDEsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkgICAgIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xKSkKKwkJbWF4X2J1Zl9zaXplID0gTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkU7CiAJZWxzZQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDQ5ODsKLQotCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKQotCQkJCQkrIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7Ci0JcGhiYS0+Y2ZnX3NnX2RtYV9idWZfc2l6ZSArPQotCQkoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSk7CisJCW1heF9idWZfc2l6ZSA9IExQRkNfU0xJNF9NQVhfQlVGX1NJWkU7CisJZm9yIChkbWFfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFOworCSAgICAgZG1hX2J1Zl9zaXplIDwgbWF4X2J1Zl9zaXplICYmIGJ1Zl9zaXplID4gZG1hX2J1Zl9zaXplOworCSAgICAgZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplIDw8IDEpCisJCTsKKwlpZiAoZG1hX2J1Zl9zaXplID09IG1heF9idWZfc2l6ZSkKKwkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSAoZG1hX2J1Zl9zaXplIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpIC0gc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSAtCisJCQkoMiAqIHNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpKSkgLworCQkJCXNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpOworCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBkbWFfYnVmX3NpemU7CiAKIAkvKiBJbml0aWFsaXplIGJ1ZmZlciBxdWV1ZSBtYW5hZ2VtZW50IGZpZWxkcyAqLwogCWhicV9jb3VudCA9IGxwZmNfc2xpX2hicV9jb3VudCgpOwpAQCAtMzYzOCw2ICszOTE2LDQzIEBACiAJCWdvdG8gb3V0X2ZyZWVfZmNwX2VxX2hkbDsKIAl9CiAKKwltYm94cSA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbWJveHEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJLyogR2V0IHRoZSBTdXBwb3J0ZWQgUGFnZXMuIEl0IGlzIGFsd2F5cyBhdmFpbGFibGUuICovCisJbHBmY19zdXBwb3J0ZWRfcGFnZXMobWJveHEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJcmMgPSAtRUlPOworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJbXFlID0gJm1ib3hxLT51Lm1xZTsKKwltZW1jcHkoJnBuX3BhZ2VbMF0sICgodWludDhfdCAqKSZtcWUtPnVuLnN1cHBfcGFnZXMud29yZDMpLAorCSAgICAgICBMUEZDX01BWF9TVVBQT1JURURfUEFHRVMpOworCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9TVVBQT1JURURfUEFHRVM7IGkrKykgeworCQlzd2l0Y2ggKHBuX3BhZ2VbaV0pIHsKKwkJY2FzZSBMUEZDX1NMSTRfUEFSQU1FVEVSUzoKKwkJCXBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zLnN1cHBvcnRlZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUmVhZCB0aGUgcG9ydCdzIFNMSTQgUGFyYW1ldGVycyBjYXBhYmlsaXRpZXMgaWYgc3VwcG9ydGVkLiAqLworCWlmIChwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zdXBwb3J0ZWQpCisJCXJjID0gbHBmY19wY19zbGk0X3BhcmFtc19nZXQocGhiYSwgbWJveHEpOworCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KIAlyZXR1cm4gcmM7CiAKIG91dF9mcmVlX2ZjcF9lcV9oZGw6CkBAIC0zNzMzLDYgKzQwNDgsOCBAQAogaW50CiBscGZjX2luaXRfYXBpX3RhYmxlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDhfdCBkZXZfZ3JwKQogeworCXBoYmEtPmxwZmNfaGJhX2luaXRfbGluayA9IGxwZmNfaGJhX2luaXRfbGluazsKKwlwaGJhLT5scGZjX2hiYV9kb3duX2xpbmsgPSBscGZjX2hiYV9kb3duX2xpbms7CiAJc3dpdGNoIChkZXZfZ3JwKSB7CiAJY2FzZSBMUEZDX1BDSV9ERVZfTFA6CiAJCXBoYmEtPmxwZmNfaGJhX2Rvd25fcG9zdCA9IGxwZmNfaGJhX2Rvd25fcG9zdF9zMzsKQEAgLTQyOTEsNyArNDYwOCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW11dGV4X2luaXQoJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+Y3RfZXZfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwogCiAJcmV0dXJuIHBoYmE7CkBAIC00NjQxLDcgKzQ5NTgsNyBAQAogaW50CiBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWcsIHNjcmF0Y2hwYWQ7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgc3RhX3JlZywgdWVycmxvX3JlZywgdWVycmhpX3JlZzsKIAlpbnQgaSwgcG9ydF9lcnJvciA9IC1FTk9ERVY7CiAKIAlpZiAoIXBoYmEtPnNsaTRfaGJhLlNUQXJlZ2FkZHIpCkBAIC00Njc3LDE0ICs0OTk0LDIxIEBACiAJCQliZl9nZXQobHBmY19oc3Rfc3RhdGVfcG9ydF9zdGF0dXMsICZzdGFfcmVnKSk7CiAKIAkvKiBMb2cgZGV2aWNlIGluZm9ybWF0aW9uICovCi0Jc2NyYXRjaHBhZC53b3JkMCA9ICByZWFkbChwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkcik7Ci0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkiMjUzNCBEZXZpY2UgSW5mbzogQ2hpcFR5cGU9MHgleCwgU2xpUmV2PTB4JXgsICIKLQkJCSJGZWF0dXJlTDE9MHgleCwgRmVhdHVyZUwyPTB4JXhcbiIsCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2NoaXB0eXBlLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX3NsaXJldiwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDIsICZzY3JhdGNocGFkKSk7CisJcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkcik7CisJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX3ZhbGlkLAorCQkgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCisJCQkJIkZlYXR1cmVMMT0weCV4LCBGZWF0dXJlTDI9MHgleFxuIiwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5LAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDIsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikpOworCX0KIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLTE9yZWdhZGRyKTsKIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLSElyZWdhZGRyKTsKIAkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLwpAQCAtNDcyMyw4ICs1MDQ3LDggQEAKIAkJCQkJTFBGQ19VRV9NQVNLX0xPOwogCXBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCiAJCQkJCUxQRkNfVUVfTUFTS19ISTsKLQlwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfU0NSQVRDSFBBRDsKKwlwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfU0xJX0lOVEY7CiB9CiAKIC8qKgpAQCAtNTk5OSw3ICs2MzIzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJLyogTWFyayB0aGUgRkNGSSBpcyBubyBsb25nZXIgcmVnaXN0ZXJlZCAqLwogCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0KLQkJCX4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwgRkNGX0RJU0NPVkVSRUQpOworCQkJfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX1JFR0lTVEVSRUQgfCBGQ0ZfU0NBTl9ET05FKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCX0KIH0KQEAgLTYwMzksMTYgKzYzNjMsMjAgQEAKIAogCS8qIEdldCB0aGUgYnVzIGFkZHJlc3Mgb2YgU0xJNCBkZXZpY2UgQmFyMCwgQmFyMSwgYW5kIEJhcjIgYW5kIHRoZQogCSAqIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBieSBlYWNoIG1hcHBpbmcuIFRoZXkgYXJlIGFjdHVhbGx5Ci0JICogbWFwcGluZyB0byB0aGUgUENJIEJBUiByZWdpb25zIDEsIDIsIGFuZCA0IGJ5IHRoZSBTTEk0IGRldmljZS4KKwkgKiBtYXBwaW5nIHRvIHRoZSBQQ0kgQkFSIHJlZ2lvbnMgMCBvciAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCiAJICovCi0JcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIwKTsKLQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjApOworCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJfSBlbHNlIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJfQorCXBoYmEtPnBjaV9iYXIxX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CiAKLQlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjEpOwotCWJhcjFtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMSk7Ci0KLQlwaGJhLT5wY2lfYmFyMl9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjIpOwotCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMik7CisJcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOworCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKIAogCS8qIE1hcCBTTEk0IFBDSSBDb25maWcgU3BhY2UgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHIgKi8KIAlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgPQpAQCAtNjc5Myw2ICs3MTIxLDczIEBACiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogfQogCisgLyoqCisgKiBscGZjX3BjX3NsaTRfcGFyYW1zX2dldCAtIEdldCB0aGUgU0xJNF9QQVJBTVMgcG9ydCBjYXBhYmlsaXRpZXMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWJveHE6IFBvaW50ZXIgdG8gdGhlIG1haWxib3hxIG1lbW9yeSBmb3IgdGhlIG1haWxib3ggY29tbWFuZCByZXNwb25zZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgU0xJNCBjb2RlIHBhdGggdG8gcmVhZCB0aGUgcG9ydCdzCisgKiBzbGk0IGNhcGFiaWxpdGllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCB0aGF0IGNhbiBibG9jay13YWl0CisgKiBmb3IgdGhlIGNvbXBsZXRpb24uICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkCisgKiB0eXBpY2FsbHkgZnJvbSBwcm9iZV9vbmUgb3IgZnJvbSB0aGUgb25saW5lIHJvdXRpbmUuCisgKiovCitpbnQKK2xwZmNfcGNfc2xpNF9wYXJhbXNfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICptYm94cSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGxwZmNfbXFlICptcWU7CisJc3RydWN0IGxwZmNfcGNfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCXVpbnQzMl90IG1ib3hfdG1vOworCisJcmMgPSAwOworCW1xZSA9ICZtYm94cS0+dS5tcWU7CisKKwkvKiBSZWFkIHRoZSBwb3J0J3MgU0xJNCBQYXJhbWV0ZXJzIHBvcnQgY2FwYWJpbGl0aWVzICovCisJbHBmY19zbGk0X3BhcmFtcyhtYm94cSk7CisJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CisJZWxzZSB7CisJCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveHEsIG1ib3hfdG1vKTsKKwl9CisKKwlpZiAodW5saWtlbHkocmMpKQorCQlyZXR1cm4gMTsKKworCXNsaTRfcGFyYW1zID0gJnBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zOworCXNsaTRfcGFyYW1zLT5pZl90eXBlID0gYmZfZ2V0KGlmX3R5cGUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2xpX3JldiA9IGJmX2dldChzbGlfcmV2LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNsaV9mYW1pbHkgPSBiZl9nZXQoc2xpX2ZhbWlseSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5mZWF0dXJlbGV2ZWxfMSA9IGJmX2dldChmZWF0dXJlbGV2ZWxfMSwKKwkJCQkJICAgICAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmZlYXR1cmVsZXZlbF8yID0gYmZfZ2V0KGZlYXR1cmVsZXZlbF8yLAorCQkJCQkgICAgICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cHJvdG9fdHlwZXMgPSBtcWUtPnVuLnNsaTRfcGFyYW1zLndvcmQzOworCXNsaTRfcGFyYW1zLT5zZ2Vfc3VwcF9sZW4gPSBtcWUtPnVuLnNsaTRfcGFyYW1zLnNnZV9zdXBwX2xlbjsKKwlzbGk0X3BhcmFtcy0+aWZfcGFnZV9zeiA9IGJmX2dldChpZl9wYWdlX3N6LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxX2RiX3dpbmRvdyA9IGJmX2dldChycV9kYl93aW5kb3csICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bG9vcGJrX3Njb3BlID0gYmZfZ2V0KGxvb3Bia19zY29wZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5lcV9wYWdlc19tYXggPSBiZl9nZXQoZXFfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZXFlX3NpemUgPSBiZl9nZXQoZXFlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+Y3FfcGFnZXNfbWF4ID0gYmZfZ2V0KGNxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmNxZV9zaXplID0gYmZfZ2V0KGNxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPm1xX3BhZ2VzX21heCA9IGJmX2dldChtcV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcWVfc2l6ZSA9IGJmX2dldChtcWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcV9lbGVtX2NudCA9IGJmX2dldChtcV9lbGVtX2NudCwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT53cV9wYWdlc19tYXggPSBiZl9nZXQod3FfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+d3FlX3NpemUgPSBiZl9nZXQod3FlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cnFfcGFnZXNfbWF4ID0gYmZfZ2V0KHJxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxZV9zaXplID0gYmZfZ2V0KHJxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wYWdlc19tYXggPSBiZl9nZXQoaGRyX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9zaXplID0gYmZfZ2V0KGhkcl9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wcF9hbGlnbiA9IGJmX2dldChoZHJfcHBfYWxpZ24sICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BhZ2VzX21heCA9IGJmX2dldChzZ2xfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BwX2FsaWduID0gYmZfZ2V0KHNnbF9wcF9hbGlnbiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKiBscGZjX3BjaV9wcm9iZV9vbmVfczMgLSBQQ0kgcHJvYmUgZnVuYyB0byByZWcgU0xJLTMgZGV2aWNlIHRvIFBDSSBzdWJzeXN0ZW0uCiAgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCkBAIC03MTM0LDYgKzc1MjksMTIgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzMxNyw2ICs3NzE4LDEzIEBACiAJfQogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzcyNiw2ICs4MTM0LDEzIEBACiAJLyogUmVzdG9yZSBkZXZpY2Ugc3RhdGUgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTc4NDUsMTEgKzgyNjAsMTEgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGxwZmNfc2xpX2ludGYgaW50ZjsKIAotCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElSRVZfQ09ORl9XT1JELCAmaW50Zi53b3JkMCkpCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMUEZDX1NMSV9JTlRGLCAmaW50Zi53b3JkMCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwgJmludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpICYmCi0JCShiZl9nZXQobHBmY19zbGlfaW50Zl9yZXYsICZpbnRmKSA9PSBMUEZDX1NMSVJFVl9DT05GX1NMSTQpKQorCSAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpcmV2LCAmaW50ZikgPT0gTFBGQ19TTElfSU5URl9SRVZfU0xJNCkpCiAJCXJjID0gbHBmY19wY2lfcHJvYmVfb25lX3M0KHBkZXYsIHBpZCk7CiAJZWxzZQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zMyhwZGV2LCBwaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCBhOWFmZDhiLi42YzRkY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMTcwNyw3ICsxNzA3LDggQEAKIAkJCQlhbGxvY19sZW4gLSBzaXplb2YodW5pb24gIGxwZmNfc2xpNF9jZmdfc2hkcik7CiAJfQogCS8qIFRoZSBzdWItaGVhZGVyIGlzIGluIERNQSBtZW1vcnksIHdoaWNoIG5lZWRzIGVuZGlhbiBjb252ZXJzdGlvbiAqLwotCWxwZmNfc2xpX3BjaW1lbV9iY29weShjZmdfc2hkciwgY2ZnX3NoZHIsCisJaWYgKGNmZ19zaGRyKQorCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY2ZnX3NoZHIsIGNmZ19zaGRyLAogCQkJICAgICAgc2l6ZW9mKHVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIpKTsKIAogCXJldHVybiBhbGxvY19sZW47CkBAIC0xNzQ3LDYgKzE3NDgsNjUgQEAKIH0KIAogLyoqCisgKiBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZCAtIEFsbG9jYXRlIGFuZCBjb25zdHJ1Y3QgcmVhZCBmY2YgbWJveCBjbWQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9pbmRleDogaW5kZXggdG8gZmNmIHRhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSByb3V0aW5lIGFsbG9jYXRlcyBhbmQgY29uc3RydWN0cyBub24tZW1iZWRkZWQgbWFpbGJveCBjb21tYW5kCisgKiBmb3IgcmVhZGluZyBhIEZDRiB0YWJsZSBlbnRyeSByZWZlcmVkIGJ5IEBmY2ZfaW5kZXguCisgKgorICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbW1hbmQgY29uc3RydWN0ZWQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisgKiBOVUxMLgorICoqLworaW50CitscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICAgICBzdHJ1Y3QgbHBmY01ib3hxICptYm94cSwKKwkJCSAgICAgIHVpbnQxNl90IGZjZl9pbmRleCkKK3sKKwl2b2lkICp2aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJdWludDhfdCAqYnl0ZXA7CisJc3RydWN0IGxwZmNfbWJ4X3NnZSBzZ2U7CisJdWludDMyX3QgYWxsb2NfbGVuLCByZXFfbGVuOworCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKnJlYWRfZmNmOworCisJaWYgKCFtYm94cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCisJCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KKwlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCisJCQlMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVBRF9GQ0ZfVEFCTEUsIHJlcV9sZW4sCisJCQlMUEZDX1NMSTRfTUJYX05FTUJFRCk7CisKKwlpZiAoYWxsb2NfbGVuIDwgcmVxX2xlbikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJCSIwMjkxIEFsbG9jYXRlZCBETUEgbWVtb3J5IHNpemUgKHgleCkgaXMgIgorCQkJCSJsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBETUEgbWVtb3J5ICIKKwkJCQkic2l6ZSAoeCV4KVxuIiwgYWxsb2NfbGVuLCByZXFfbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBTR0UgZW50cnkgZnJvbSB0aGUgbm9uLWVtYmVkZGVkIERNQSBtZW1vcnkuIFRoaXMKKwkgKiByb3V0aW5lIG9ubHkgdXNlcyBhIHNpbmdsZSBTR0UuCisJICovCisJbHBmY19zbGk0X21ieF9zZ2VfZ2V0KG1ib3hxLCAwLCAmc2dlKTsKKwlwaHlzX2FkZHIgPSBnZXRQYWRkcihzZ2UucGFfaGksIHNnZS5wYV9sbyk7CisJdmlydF9hZGRyID0gbWJveHEtPnNnZV9hcnJheS0+YWRkclswXTsKKwlyZWFkX2ZjZiA9IChzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICopdmlydF9hZGRyOworCisJLyogU2V0IHVwIGNvbW1hbmQgZmllbGRzICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlYWRfZmNmX3RibF9pbmR4LCAmcmVhZF9mY2YtPnUucmVxdWVzdCwgZmNmX2luZGV4KTsKKwkvKiBQZXJmb3JtIG5lY2Vzc2FyeSBlbmRpYW4gY29udmVyc2lvbiAqLworCWJ5dGVwID0gdmlydF9hZGRyICsgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcik7CisJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KGJ5dGVwLCBieXRlcCwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX3JlcXVlc3RfZmVhdHVyZXM6IENvbmZpZ3VyZSBTTEk0IFJFUVVFU1RfRkVBVFVSRVMgbWFpbGJveAogICogQG1ib3hxOiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kLgogICoKQEAgLTE5NDYsMTMgKzIwMDYsMTQgQEAKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDEsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDIsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDMsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKLQliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwgcGhiYS0+ZmNmLmZjZl9pbmR4KTsKKwliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwKKwkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKIAkvKiByZWdfZmNmIGFkZHIgbW9kZSBpcyBiaXQgd2lzZSBpbnZlcnRlZCB2YWx1ZSBvZiBmY2YgYWRkcl9tb2RlICovCi0JYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwKLQkJKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7Ci0JaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9WQUxJRF9WTEFOKSB7CisJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwgKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7CisJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkICE9IDB4RkZGRikgewogCQliZl9zZXQobHBmY19yZWdfZmNmaV92diwgcmVnX2ZjZmksIDEpOwotCQliZl9zZXQobHBmY19yZWdfZmNmaV92bGFuX3RhZywgcmVnX2ZjZmksIHBoYmEtPmZjZi52bGFuX2lkKTsKKwkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdmxhbl90YWcsIHJlZ19mY2ZpLAorCQkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQpOwogCX0KIH0KIApAQCAtMTk5MiwzICsyMDUzLDQxIEBACiAJYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9paSwgcmVzdW1lX3JwaSwgUkVTVU1FX0lOREVYX1JQSSk7CiAJcmVzdW1lX3JwaS0+ZXZlbnRfdGFnID0gbmRscC0+cGhiYS0+ZmNfZXZlbnRUYWc7CiB9CisKKy8qKgorICogbHBmY19zdXBwb3J0ZWRfcGFnZXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBzdXBwb3J0ZWQgcGFnZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kLgorICogQG1ib3g6IHBvaW50ZXIgdG8gbHBmYyBtYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZS4KKyAqCisgKiBUaGUgUE9SVF9DQVBBQklMSVRJRVMgc3VwcG9ydGVkIHBhZ2VzIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8KKyAqIHJldHJpZXZlIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgorICoqLwordm9pZAorbHBmY19zdXBwb3J0ZWRfcGFnZXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyAqc3VwcF9wYWdlczsKKworCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKKwlzdXBwX3BhZ2VzID0gJm1ib3gtPnUubXFlLnVuLnN1cHBfcGFnZXM7CisJYmZfc2V0KGxwZmNfbXFlX2NvbW1hbmQsICZtYm94LT51Lm1xZSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwliZl9zZXQoY3BuLCBzdXBwX3BhZ2VzLCBMUEZDX1NVUFBfUEFHRVMpOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9wYXJhbXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBTTEk0IFBhcmFtcworICogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZC4KKyAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCisgKgorICogVGhlIFBPUlRfQ0FQQUJJTElUSUVTIFNMSTQgcGFyYW1ldGVycyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvCisgKiByZXRyaWV2ZSB0aGUgcGFydGljdWxhciBTTEk0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCisJbWVtc2V0KG1ib3gsIDAsIHNpemVvZigqbWJveCkpOworCXNsaTRfcGFyYW1zID0gJm1ib3gtPnUubXFlLnVuLnNsaTRfcGFyYW1zOworCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJYmZfc2V0KGNwbiwgc2xpNF9wYXJhbXMsIExQRkNfU0xJNF9QQVJBTUVURVJTKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAppbmRleCBkNjU1ZWQzLi5mM2NmYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xNzcsMjMgKzE3NywzIEBACiAJdWludDMyX3QgZGF0YTsKIH07CiAKLS8qIGJzZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UCTEKLSNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVAkyCi0KLXN0cnVjdCBzZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVxX2lkOwotCXVpbnQzMl90IGV2X3JlZ19pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVnX2lkOwotCXVpbnQzMl90IGV2X3JlcV9pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgewotCXVpbnQzMl90IGltbWVkX2RhdGE7Ci0JdWludDMyX3QgdHlwZTsKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCAyZWQ2YWYxLi5kMjBhZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogaW50CiBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCSBzdHJ1Y3Qgc2Vydl9wYXJtICogc3AsIHVpbnQzMl90IGNsYXNzKQorCQkgc3RydWN0IHNlcnZfcGFybSAqc3AsIHVpbnQzMl90IGNsYXNzLCBpbnQgZmxvZ2kpCiB7CiAJdm9sYXRpbGUgc3RydWN0IHNlcnZfcGFybSAqaHNwID0gJnZwb3J0LT5mY19zcGFyYW07CiAJdWludDE2X3QgaHNwX3ZhbHVlLCBzc3BfdmFsdWUgPSAwOwpAQCAtNzUsNDkgKzc1LDU2IEBACiAJICogY29ycmVjdGluZyB0aGUgYnl0ZSB2YWx1ZXMuCiAJICovCiAJaWYgKHNwLT5jbHMxLmNsYXNzVmFsaWQpIHsKLQkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlzc3BfdmFsdWUgPSAoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlpZiAoIXNzcF92YWx1ZSkKLQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKLQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCWlmICghZmxvZ2kpIHsKKwkJCWhzcF92YWx1ZSA9ICgoaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYik7CisJCQlzc3BfdmFsdWUgPSAoKHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiKTsKKwkJCWlmICghc3NwX3ZhbHVlKQorCQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07CisJCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVMc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVMc2I7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkgeworCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MxKQogCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCX0KLQogCWlmIChzcC0+Y2xzMi5jbGFzc1ZhbGlkKSB7Ci0JCWhzcF92YWx1ZSA9IChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJc3NwX3ZhbHVlID0gKHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJaWYgKCFzc3BfdmFsdWUpCi0JCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7Ci0JCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQlpZiAoIWZsb2dpKSB7CisJCQloc3BfdmFsdWUgPSAoKGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBoc3AtPmNsczIucmN2RGF0YVNpemVMc2IpOworCQkJc3NwX3ZhbHVlID0gKChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYik7CisJCQlpZiAoIXNzcF92YWx1ZSkKKwkJCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOworCQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgeworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTHNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTHNiOworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzIpIHsKKwl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMikKIAkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQl9Ci0KIAlpZiAoc3AtPmNsczMuY2xhc3NWYWxpZCkgewotCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCXNzcF92YWx1ZSA9IChzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCWlmICghc3NwX3ZhbHVlKQotCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewotCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJaWYgKCFmbG9naSkgeworCQkJaHNwX3ZhbHVlID0gKChoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiKTsKKwkJCXNzcF92YWx1ZSA9ICgoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgc3AtPmNsczMucmN2RGF0YVNpemVMc2IpOworCQkJaWYgKCFzc3BfdmFsdWUpCisJCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKKwkJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYjsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJCX0KIAkJfQotCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MzKSB7CisJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzMpCiAJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JfQogCiAJLyoKIAkgKiBQcmVzZXJ2ZSB0aGUgdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBNU0IgZnJvbSB0aGUgUExPR0kgcmVzcG9uc2UuCkBAIC0yNDcsNyArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZiAoc3RydWN0IGxzX3JqdCkpOwotCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKSB7CisJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDw9IExQRkNfRkRJU0MpIHsKIAkJLyogQmVmb3JlIHJlc3BvbmRpbmcgdG8gUExPR0ksIGNoZWNrIGZvciBwdDJwdCBtb2RlLgogCQkgKiBJZiB3ZSBhcmUgcHQycHQsIHdpdGggYW4gb3V0c3RhbmRpbmcgRkxPR0ksIGFib3J0CiAJCSAqIHRoZSBGTE9HSSBhbmQgcmVzZW5kIGl0IGZpcnN0LgpAQCAtMjk1LDcgKzMwMiw3IEBACiAJCQlOVUxMKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICgobHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykgPT0gMCkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDApID09IDApKSB7CiAJCS8qIFJlamVjdCB0aGlzIHJlcXVlc3QgYmVjYXVzZSBpbnZhbGlkIHBhcmFtZXRlcnMgKi8KIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9TUEFSTV9PUFRJT05TOwpAQCAtODMxLDcgKzgzOCw3IEBACiAJCQkJICIwMTQyIFBMT0dJIFJTUDogSW52YWxpZCBXV04uXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICghbHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykpCisJaWYgKCFscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAwKSkKIAkJZ290byBvdXQ7CiAJLyogUExPR0kgY2hrcGFybSBPSyAqLwogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggYTI0NjQxMC4uN2YyMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTYyNiw2ICs2MjYsNyBAQAogCQkmcGhiYS0+c2xpNF9oYmEubHBmY19hYnRzX3Njc2lfYnVmX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHBzYi0+Y3VyX2lvY2JxLnNsaTRfeHJpdGFnID09IHhyaSkgewogCQkJbGlzdF9kZWwoJnBzYi0+bGlzdCk7CisJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKIAkJCQkmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCkBAIC02ODgsMTEgKzY4OSwxMiBAQAogCQkJCQkgbGlzdCk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCX0KQEAgLTc5NiwxOSArNzk4LDE3IEBACiAJCSAqLwogCQlzZ2wtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9jbWQpKTsKIAkJc2dsLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9jbWQpKTsKLQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJc2dsKys7CiAKIAkJLyogU2V0dXAgdGhlIHBoeXNpY2FsIHJlZ2lvbiBmb3IgdGhlIEZDUCBSU1AgKi8KIAkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfcnNwKSk7CiAJCXNnbC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfcnNwKSk7Ci0JCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLCBzaXplb2Yoc3RydWN0IGZjcF9yc3ApKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkpOwogCiAJCS8qCiAJCSAqIFNpbmNlIHRoZSBJT0NCIGZvciB0aGUgRkNQIEkvTyBpcyBidWlsdCBpbnRvIHRoaXMKQEAgLTgzOSwxMSArODM5LDEyIEBACiAJCQkJCQlwc2ItPmN1cl9pb2NicS5zbGk0X3hyaXRhZyk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCQlicmVhazsKQEAgLTg1NywxMSArODU4LDEyIEBACiAJCQkJIGxpc3QpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQl9CkBAIC05NTEsOCArOTUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnID0gMDsKIAotCWlmIChwc2ItPnN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUCi0JCSYmIHBzYi0+cmVzdWx0ID09IElPRVJSX0FCT1JUX1JFUVVFU1RFRCkgeworCWlmIChwc2ItPmV4Y2hfYnVzeSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJcHNiLT5wQ21kID0gTlVMTDsKQEAgLTE4NjksNyArMTg3MCw2IEBACiAJCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbW5kLCBzZ2VsLCBuc2VnLCBudW1fYmRlKSB7CiAJCQlwaHlzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQkJZG1hX2xlbiA9IHNnX2RtYV9sZW4oc2dlbCk7Ci0JCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgc2dfZG1hX2xlbihzZ2VsKSk7CiAJCQlzZ2wtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhwaHlzYWRkcikpOwogCQkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBoeXNhZGRyKSk7CiAJCQlpZiAoKG51bV9iZGUgKyAxKSA9PSBuc2VnKQpAQCAtMTg3OCw3ICsxODc4LDcgQEAKIAkJCQliZl9zZXQobHBmY19zbGk0X3NnZV9sYXN0LCBzZ2wsIDApOwogCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2Vfb2Zmc2V0LCBzZ2wsIGRtYV9vZmZzZXQpOwogCQkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoZG1hX2xlbik7CiAJCQlkbWFfb2Zmc2V0ICs9IGRtYV9sZW47CiAJCQlzZ2wrKzsKIAkJfQpAQCAtMjIyMSw2ICsyMjIxLDkgQEAKIAogCWxwZmNfY21kLT5yZXN1bHQgPSBwSW9jYk91dC0+aW9jYi51bi51bHBXb3JkWzRdOwogCWxwZmNfY21kLT5zdGF0dXMgPSBwSW9jYk91dC0+aW9jYi51bHBTdGF0dXM7CisJLyogcGljayB1cCBTTEk0IGV4aGFuZ2UgYnVzeSBzdGF0dXMgZnJvbSBIQkEgKi8KKwlscGZjX2NtZC0+ZXhjaF9idXN5ID0gcElvY2JPdXQtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWTsKKwogCWlmIChwbm9kZSAmJiBOTFBfQ0hLX05PREVfQUNUKHBub2RlKSkKIAkJYXRvbWljX2RlYygmcG5vZGUtPmNtZF9wZW5kaW5nKTsKIApAQCAtMjYzNyw2ICsyNjQwLDcgQEAKIAl9CiAJcGhiYS0+bHBmY19nZXRfc2NzaV9idWYgPSBscGZjX2dldF9zY3NpX2J1ZjsKIAlwaGJhLT5scGZjX3JhbXBkb3duX3F1ZXVlX2RlcHRoID0gbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aDsKKwlwaGJhLT5scGZjX3Njc2lfY21kX2lvY2JfY21wbCA9IGxwZmNfc2NzaV9jbWRfaW9jYl9jbXBsOwogCXJldHVybiAwOwogfQogCkBAIC0yNjk1LDYgKzI2OTksMTMgQEAKIAkJCQkgIiBwb3J0ICVzIiwKIAkJCQkgcGhiYS0+UG9ydCk7CiAJCX0KKwkJbGVuID0gc3RybGVuKGxwZmNpbmZvYnVmKTsKKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCkgeworCQkJc25wcmludGYobHBmY2luZm9idWYgKyBsZW4sCisJCQkJIDM4NC1sZW4sCisJCQkJICIgTG9naWNhbCBMaW5rIFNwZWVkOiAlZCBNYnBzIiwKKwkJCQkgcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkICogMTApOworCQl9CiAJfQogCXJldHVybiBscGZjaW5mb2J1ZjsKIH0KQEAgLTI5OTAsNiArMzAwMSw3IEBACiAKIAkvKiBBQlRTIFdRRSBtdXN0IGdvIHRvIHRoZSBzYW1lIFdRIGFzIHRoZSBXUUUgdG8gYmUgYWJvcnRlZCAqLwogCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NiLT5mY3Bfd3FpZHg7CisJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpCiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfQUJPUlRfWFJJX0NOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAppbmRleCA2NWRmYzhiLi41OTMyMjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaApAQCAtMTE4LDYgKzExOCw3IEBACiAKIAl1aW50MzJfdCB0aW1lb3V0OwogCisJdWludDE2X3QgZXhjaF9idXN5OyAgICAgLyogU0xJNCBoYmEgcmVwb3J0ZWQgWEIgb24gY29tcGxldGUgV0NRRSAqLwogCXVpbnQxNl90IHN0YXR1czsJLyogRnJvbSBJT0NCIFdvcmQgNy0gdWxwU3RhdHVzICovCiAJdWludDMyX3QgcmVzdWx0OwkvKiBGcm9tIElPQ0IgV29yZCA0LiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA1ODk1NDliMi4uMzVlM2I5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC01ODAsMTAgKzU4MCw3IEBACiAJZWxzZQogCQlzZ2xxID0gX19scGZjX2NsZWFyX2FjdGl2ZV9zZ2xxKHBoYmEsIGlvY2JxLT5zbGk0X3hyaXRhZyk7CiAJaWYgKHNnbHEpICB7Ci0JCWlmIChpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19EUklWRVJfQUJPUlRFRAotCQkJJiYgKChpb2NicS0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkKLQkJCSYmIChpb2NicS0+aW9jYi51bi51bHBXb3JkWzRdCi0JCQkJPT0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEKSkpIHsKKwkJaWYgKGlvY2JxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zbGk0X2hiYS5hYnRzX3NnbF9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJCWxpc3RfYWRkKCZzZ2xxLT5saXN0LApAQCAtNzY0LDEwICs3NjEsNiBAQAogCWNhc2UgRFNTQ01EX0lXUklURTY0X0NYOgogCWNhc2UgRFNTQ01EX0lSRUFENjRfQ1I6CiAJY2FzZSBEU1NDTURfSVJFQUQ2NF9DWDoKLQljYXNlIERTU0NNRF9JTlZBTElEQVRFX0RFSzoKLQljYXNlIERTU0NNRF9TRVRfS0VLOgotCWNhc2UgRFNTQ01EX0dFVF9LRUtfSUQ6Ci0JY2FzZSBEU1NDTURfR0VOX1hGRVI6CiAJCXR5cGUgPSBMUEZDX1NPTF9JT0NCOwogCQlicmVhazsKIAljYXNlIENNRF9BQk9SVF9YUklfQ046CkBAIC0xNzE3LDYgKzE3MTAsNyBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7CiAJdWludDE2X3QgcnBpLCB2cGk7CiAJaW50IHJjOworCXN0cnVjdCBscGZjX3Zwb3J0ICAqdnBvcnQgPSBwbWItPnZwb3J0OwogCiAJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIApAQCAtMTc0NSw2ICsxNzM5LDE4IEBACiAJCQlyZXR1cm47CiAJfQogCisJLyogVW5yZWcgVlBJLCBpZiB0aGUgUkVHX1ZQSSBzdWNjZWVkIGFmdGVyIFZMaW5rIGZhaWx1cmUgKi8KKwlpZiAoKHBtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9SRUdfVlBJKSAmJgorCQkhKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpICYmCisJCSFwbWItPnUubWIubWJ4U3RhdHVzKSB7CisJCWxwZmNfdW5yZWdfdnBpKHBoYmEsIHBtYi0+dS5tYi51bi52YXJSZWdWcGkudnBpLCBwbWIpOworCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJCWlmIChyYyAhPSBNQlhfTk9UX0ZJTklTSEVEKQorCQkJcmV0dXJuOworCX0KKwogCWlmIChiZl9nZXQobHBmY19tcWVfY29tbWFuZCwgJnBtYi0+dS5tcWUpID09IE1CWF9TTEk0X0NPTkZJRykKIAkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgcG1iKTsKIAllbHNlCkBAIC0yMjI4LDkgKzIyMzQsMTUgQEAKIAkJCSAqIEFsbCBvdGhlciBhcmUgcGFzc2VkIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrLgogCQkJICovCiAJCQlpZiAocHJpbmctPnJpbmdubyA9PSBMUEZDX0VMU19SSU5HKSB7Ci0JCQkJaWYgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSB7CisJCQkJaWYgKChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJgorCQkJCQkJCUxQRkNfRFJJVkVSX0FCT1JURUQpKSB7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOwogCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CiAJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQogCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKIAkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CkBAIC0yMjQwLDcgKzIyNTIsNDcgQEAKIAkJCQkJICogb2YgRE1BaW5nIHBheWxvYWQsIHNvIGRvbid0IGZyZWUgZGF0YQogCQkJCQkgKiBidWZmZXIgdGlsbCBhZnRlciBhIGhiZWF0LgogCQkJCQkgKi8KKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CiAJCQkJCXNhdmVxLT5pb2NiX2ZsYWcgfD0gTFBGQ19ERUxBWV9NRU1fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOworCQkJCX0KKwkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKHNhdmVxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpKSB7CisJCQkJCS8qIFNldCBjbWRpb2NiIGZsYWcgZm9yIHRoZSBleGNoYW5nZQorCQkJCQkgKiBidXN5IHNvIHNnbCAoeHJpKSB3aWxsIG5vdCBiZQorCQkJCQkgKiByZWxlYXNlZCB1bnRpbCB0aGUgYWJvcnQgeHJpIGlzCisJCQkJCSAqIHJlY2VpdmVkIGZyb20gaGJhLCBjbGVhciB0aGUKKwkJCQkJICogTFBGQ19EUklWRVJfQUJPUlRFRCBiaXQgaW4gY2FzZQorCQkJCQkgKiBpdCB3YXMgZHJpdmVyIGluaXRpYXRlZCBhYm9ydC4KKwkJCQkJICovCisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CisJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJY21kaW9jYnAtPmlvY2JfZmxhZyB8PQorCQkJCQkJTFBGQ19FWENIQU5HRV9CVVNZOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CisJCQkJCWNtZGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9CisJCQkJCQlJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJCQljbWRpb2NicC0+aW9jYi51bi51bHBXb3JkWzRdID0KKwkJCQkJCUlPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQkJLyoKKwkJCQkJICogRm9yIFNMSTQsIGlyc2lvY2IgY29udGFpbnMgTk9fWFJJCisJCQkJCSAqIGluIHNsaV94cml0YWcsIGl0IHNoYWxsIG5vdCBhZmZlY3QKKwkJCQkJICogcmVsZWFzaW5nIHNnbCAoeHJpKSBwcm9jZXNzLgorCQkJCQkgKi8KKwkJCQkJc2F2ZXEtPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJCUlPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQkJCXNhdmVxLT5pb2NiLnVuLnVscFdvcmRbNF0gPQorCQkJCQkJSU9FUlJfU0xJX0FCT1JURUQ7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQlzYXZlcS0+aW9jYl9mbGFnIHw9IExQRkNfREVMQVlfTUVNX0ZSRUU7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICAgICAgIGlmbGFnKTsKIAkJCQl9CiAJCQl9CiAJCQkoY21kaW9jYnAtPmlvY2JfY21wbCkgKHBoYmEsIGNtZGlvY2JwLCBzYXZlcSk7CkBAIC01Njg3LDE5ICs1NzM5LDE5IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IG51bUJkZXM7IGkrKykgewogCQkJLyogU2hvdWxkIGFscmVhZHkgYmUgYnl0ZSBzd2FwcGVkLiAqLwotCQkJc2dsLT5hZGRyX2hpID0gIGJwbC0+YWRkckhpZ2g7Ci0JCQlzZ2wtPmFkZHJfbG8gPSAgYnBsLT5hZGRyTG93OwotCQkJLyogc3dhcCB0aGUgc2l6ZSBmaWVsZCBiYWNrIHRvIHRoZSBjcHUgc28gd2UKLQkJCSAqIGNhbiBhc3NpZ24gaXQgdG8gdGhlIHNnbC4KLQkJCSAqLwotCQkJYmRlLnR1cy53ICA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIGJkZS50dXMuZi5iZGVTaXplKTsKKwkJCXNnbC0+YWRkcl9oaSA9IGJwbC0+YWRkckhpZ2g7CisJCQlzZ2wtPmFkZHJfbG8gPSBicGwtPmFkZHJMb3c7CisKIAkJCWlmICgoaSsxKSA9PSBudW1CZGVzKQogCQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQllbHNlCiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCS8qIHN3YXAgdGhlIHNpemUgZmllbGQgYmFjayB0byB0aGUgY3B1IHNvIHdlCisJCQkgKiBjYW4gYXNzaWduIGl0IHRvIHRoZSBzZ2wuCisJCQkgKi8KKwkJCWJkZS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoYmRlLnR1cy5mLmJkZVNpemUpOwogCQkJYnBsKys7CiAJCQlzZ2wrKzsKIAkJfQpAQCAtNTcxMiwxMSArNTc2NCwxMCBAQAogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRySGlnaCk7CiAJCQlzZ2wtPmFkZHJfbG8gPQogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRyTG93KTsKLQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLAotCQkJCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQlzZ2wtPndvcmQyID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMik7Ci0JCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCQlzZ2wtPnNnZV9sZW4gPQorCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAl9CiAJcmV0dXJuIHNnbHEtPnNsaTRfeHJpdGFnOwogfQpAQCAtNTk4NywxMiArNjAzOCwxMCBAQAogCQllbHNlCiAJCQliZl9zZXQoYWJvcnRfY21kX2lhLCAmd3FlLT5hYm9ydF9jbWQsIDApOwogCQliZl9zZXQoYWJvcnRfY21kX2NyaXRlcmlhLCAmd3FlLT5hYm9ydF9jbWQsIFRfWFJJX1RBRyk7Ci0JCWFib3J0X3RhZyA9IGlvY2JxLT5pb2NiLnVuLmFjeHJpLmFib3J0SW9UYWc7CiAJCXdxZS0+d29yZHNbNV0gPSAwOwogCQliZl9zZXQobHBmY193cWVfZ2VuX2N0LCAmd3FlLT5nZW5lcmljLAogCQkJKChpb2NicS0+aW9jYi51bHBDdF9oIDw8IDEpIHwgaW9jYnEtPmlvY2IudWxwQ3RfbCkpOwogCQlhYm9ydF90YWcgPSBpb2NicS0+aW9jYi51bi5hY3hyaS5hYm9ydElvVGFnOwotCQl3cWUtPmdlbmVyaWMuYWJvcnRfdGFnID0gYWJvcnRfdGFnOwogCQkvKgogCQkgKiBUaGUgYWJvcnQgaGFuZGxlciB3aWxsIHNlbmQgdXMgQ01EX0FCT1JUX1hSSV9DTiBvcgogCQkgKiBDTURfQ0xPU0VfWFJJX0NOIGFuZCB0aGUgZncgb25seSBhY2NlcHRzIENNRF9BQk9SVF9YUklfQ1gKQEAgLTYxMjEsMTUgKzYxNzAsMTUgQEAKIAlpZiAobHBmY19zbGk0X2lvY2Iyd3FlKHBoYmEsIHBpb2NiLCAmd3FlKSkKIAkJcmV0dXJuIElPQ0JfRVJST1I7CiAKLQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmICBMUEZDX0lPX0ZDUCkgeworCWlmICgocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKSB8fAorCQkocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfVVNFX0ZDUFdRSURYKSkgewogCQkvKgogCQkgKiBGb3IgRkNQIGNvbW1hbmQgSU9DQiwgZ2V0IGEgbmV3IFdRIGluZGV4IHRvIGRpc3RyaWJ1dGUKIAkJICogV1FFIGFjcm9zcyB0aGUgV1Fzci4gT24gdGhlIG90aGVyIGhhbmQsIGZvciBhYm9ydCBJT0NCLAogCQkgKiBpdCBjYXJyaWVzIHRoZSBzYW1lIFdRIGluZGV4IHRvIHRoZSBvcmlnaW5hbCBjb21tYW5kCiAJCSAqIElPQ0IuCiAJCSAqLwotCQlpZiAoKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0FCT1JUX1hSSV9DTikgJiYKLQkJICAgIChwaW9jYi0+aW9jYi51bHBDb21tYW5kICE9IENNRF9DTE9TRV9YUklfQ04pKQorCQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQogCQkJcGlvY2ItPmZjcF93cWlkeCA9IGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHBoYmEpOwogCQlpZiAobHBmY19zbGk0X3dxX3B1dChwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbcGlvY2ItPmZjcF93cWlkeF0sCiAJCQkJICAgICAmd3FlKSkKQEAgLTcwMDQsNyArNzA1MywxNCBAQAogCQkgICAgYWJvcnRfaW9jYi0+aW9jYi51bHBDb250ZXh0ICE9IGFib3J0X2NvbnRleHQgfHwKIAkJICAgIChhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSA9PSAwKQogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJZWxzZSB7CisJCWVsc2UgaWYgKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSB7CisJCQkvKgorCQkJICogbGVhdmUgdGhlIFNMSTQgYWJvcnRlZCBjb21tYW5kIG9uIHRoZSB0eGNtcGxxCisJCQkgKiBsaXN0IGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZSBXQ1FFJ3MgWEIgYml0CisJCQkgKiB3aWxsIHRlbGwgd2hldGhlciB0aGUgU0dMIChYUkkpIGNhbiBiZSByZWxlYXNlZAorCQkJICogaW1tZWRpYXRlbHkgb3IgdG8gdGhlIGFib3J0ZWQgU0dMIGxpc3QgZm9yIHRoZQorCQkJICogZm9sbG93aW5nIGFib3J0IFhSSSBmcm9tIHRoZSBIQkEuCisJCQkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJmFib3J0X2lvY2ItPmxpc3QpOwogCQkJcHJpbmctPnR4Y21wbHFfY250LS07CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtNzAxMywxMSArNzA2OSwxMyBAQAogCQkJICogcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhIGJ1ZmZlciB0aWxsIGFmdGVyCiAJCQkgKiBhIGhiZWF0LgogCQkJICovCisJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWFib3J0X2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RFTEFZX01FTV9GUkVFOwotCiAJCQlhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJj0gfkxQRkNfRFJJVkVSX0FCT1JURUQ7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCiAJCQlhYm9ydF9pb2NiLT5pb2NiLnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCQlhYm9ydF9pb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfQUJPUlRFRDsKKwkJCWFib3J0X2lvY2ItPmlvY2IudW4udWxwV29yZFs0XSA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKIAkJCShhYm9ydF9pb2NiLT5pb2NiX2NtcGwpKHBoYmEsIGFib3J0X2lvY2IsIGFib3J0X2lvY2IpOwogCQl9CiAJfQpAQCAtNzEwNiw3ICs3MTY0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBUaGlzIHNpZ25hbHMgdGhlIHJlc3BvbnNlIHRvIHNldCB0aGUgY29ycmVjdCBzdGF0dXMKLQkgKiBiZWZvcmUgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorCSAqIGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKIAkgKi8KIAljbWRpb2NiLT5pb2NiX2ZsYWcgfD0gTFBGQ19EUklWRVJfQUJPUlRFRDsKIApAQCAtNzEyNCw2ICs3MTgyLDggQEAKIAogCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJYWJ0c2lvY2JwLT5mY3Bfd3FpZHggPSBjbWRpb2NiLT5mY3Bfd3FpZHg7CisJaWYgKGNtZGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQlhYnRzaW9jYnAtPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkKIAkJaWFidC0+dWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC03MzMwLDYgKzczOTAsOCBAQAogCiAJCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NicS0+ZmNwX3dxaWR4OworCQlpZiAoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQkJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCQlpZiAobHBmY19pc19saW5rX3VwKHBoYmEpKQogCQkJYWJ0c2lvY2ItPmlvY2IudWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC04MzU5LDExICs4NDIxLDI0IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyIC0gVHJhbnNmZXIgcElvY2JPdXQgYW5kIGNtcGwgc3RhdHVzIHRvIHBJb2NiSW4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlCisgKiBAcElvY2JJbjogcG9pbnRlciB0byB0aGUgcnNwaW9jYnEKKyAqIEBwSW9jYk91dDogcG9pbnRlciB0byB0aGUgY21kaW9jYnEKKyAqIEB3Y3FlOiBwb2ludGVyIHRvIHRoZSBjb21wbGV0ZSB3Y3FlCisgKgorICogVGhpcyByb3V0aW5lIHRyYW5zZmVycyB0aGUgZmllbGRzIG9mIGEgY29tbWFuZCBpb2NicSB0byBhIHJlc3BvbnNlIGlvY2JxCisgKiBieSBjb3B5aW5nIGFsbCB0aGUgSU9DQiBmaWVsZHMgZnJvbSBjb21tYW5kIGlvY2JxIGFuZCB0cmFuc2ZlcnJpbmcgdGhlCisgKiBjb21wbGV0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21wbGV0ZSB3Y3FlLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHN0cnVjdCBscGZjX2lvY2JxICpwSW9jYkluLAorbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBJb2NiSW4sCiAJCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcElvY2JPdXQsCiAJCQkgICAgICBzdHJ1Y3QgbHBmY193Y3FlX2NvbXBsZXRlICp3Y3FlKQogeworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXNpemVfdCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19pb2NicSwgaW9jYik7CiAKIAltZW1jcHkoKGNoYXIgKilwSW9jYkluICsgb2Zmc2V0LCAoY2hhciAqKXBJb2NiT3V0ICsgb2Zmc2V0LApAQCAtODM3Nyw4ICs4NDUyLDE3IEBACiAJCQkJCXdjcWUtPnRvdGFsX2RhdGFfcGxhY2VkOwogCQllbHNlCiAJCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7Ci0JZWxzZQorCWVsc2UgewogCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7CisJCXBJb2NiSW4tPmlvY2IudW4uZ2VucmVxNjQuYmRsLmJkZVNpemUgPSB3Y3FlLT50b3RhbF9kYXRhX3BsYWNlZDsKKwl9CisKKwkvKiBQaWNrIHVwIEhCQSBleGNoYW5nZSBidXN5IGNvbmRpdGlvbiAqLworCWlmIChiZl9nZXQobHBmY193Y3FlX2NfeGIsIHdjcWUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQlwSW9jYkluLT5pb2NiX2ZsYWcgfD0gTFBGQ19FWENIQU5HRV9CVVNZOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCX0KIH0KIAogLyoqCkBAIC04NDE5LDcgKzg1MDMsNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NicSBhbmQgY29weSBuZWNlc3NhcnkgcmVzcG9uc2UgaW5mb3JtYXRpb24gKi8KLQlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCBpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKIAogCXJldHVybiBpcnNwaW9jYnE7CiB9CkBAIC04ODQ5LDggKzg5MzMsNyBAQAogCWludCBlY291bnQgPSAwOwogCXVpbnQxNl90IGNxaWQ7CiAKLQlpZiAoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCB8fAotCSAgICBiZl9nZXQobHBmY19lcWVfbWlub3JfY29kZSwgZXFlKSAhPSAwKSB7CisJaWYgKGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIwMzU5IE5vdCBhIHZhbGlkIHNsb3ctcGF0aCBjb21wbGV0aW9uICIKIAkJCQkiZXZlbnQ6IG1ham9yY29kZT14JXgsIG1pbm9yY29kZT14JXhcbiIsCkBAIC04OTc2LDcgKzkwNTksNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NiIGFuZCBjb3B5IG5lY2Vzc2FyeSByZXNwb25zZSBpbmZvcm1hdGlvbiAqLwotCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKCZpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCAmaXJzcGlvY2JxLCBjbWRpb2NicSwgd2NxZSk7CiAKIAkvKiBQYXNzIHRoZSBjbWRfaW9jYiBhbmQgdGhlIHJzcCBzdGF0ZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KIAkoY21kaW9jYnEtPmlvY2JfY21wbCkocGhiYSwgY21kaW9jYnEsICZpcnNwaW9jYnEpOwpAQCAtOTA4Miw4ICs5MTY1LDcgQEAKIAl1aW50MTZfdCBjcWlkOwogCWludCBlY291bnQgPSAwOwogCi0JaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHx8Ci0JICAgIHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9taW5vcl9jb2RlLCBlcWUpICE9IDApKSB7CisJaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKIAkJCQkiMDM2NiBOb3QgYSB2YWxpZCBmYXN0LXBhdGggY29tcGxldGlvbiAiCiAJCQkJImV2ZW50OiBtYWpvcmNvZGU9eCV4LCBtaW5vcmNvZGU9eCV4XG4iLApAQCAtMTE4NzEsMTIgKzExOTUzLDYgQEAKIHsKIAlpbnQgcmMgPSAwLCBlcnJvcjsKIAlMUEZDX01CT1hRX3QgKm1ib3hxOwotCXZvaWQgKnZpcnRfYWRkcjsKLQlkbWFfYWRkcl90IHBoeXNfYWRkcjsKLQl1aW50OF90ICpieXRlcDsKLQlzdHJ1Y3QgbHBmY19tYnhfc2dlIHNnZTsKLQl1aW50MzJfdCBhbGxvY19sZW4sIHJlcV9sZW47Ci0Jc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqcmVhZF9mY2Y7CiAKIAlwaGJhLT5mY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuID0gcGhiYS0+ZmNvZV9ldmVudHRhZzsKIAltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC0xMTg4Nyw0MyArMTE5NjMsMTkgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCi0JCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KLQlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCi0JCQkgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFQURfRkNGX1RBQkxFLCByZXFfbGVuLAotCQkJIExQRkNfU0xJNF9NQlhfTkVNQkVEKTsKLQotCWlmIChhbGxvY19sZW4gPCByZXFfbGVuKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjAyOTEgQWxsb2NhdGVkIERNQSBtZW1vcnkgc2l6ZSAoeCV4KSBpcyAiCi0JCQkJImxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIERNQSBtZW1vcnkgIgotCQkJCSJzaXplICh4JXgpXG4iLCBhbGxvY19sZW4sIHJlcV9sZW4pOwotCQllcnJvciA9IC1FTk9NRU07CisJLyogQ29uc3RydWN0IHRoZSByZWFkIEZDRiByZWNvcmQgbWFpbGJveCBjb21tYW5kICovCisJcmMgPSBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChwaGJhLCBtYm94cSwgZmNmX2luZGV4KTsKKwlpZiAocmMpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQkvKiBHZXQgdGhlIGZpcnN0IFNHRSBlbnRyeSBmcm9tIHRoZSBub24tZW1iZWRkZWQgRE1BIG1lbW9yeS4gVGhpcwotCSAqIHJvdXRpbmUgb25seSB1c2VzIGEgc2luZ2xlIFNHRS4KLQkgKi8KLQlscGZjX3NsaTRfbWJ4X3NnZV9nZXQobWJveHEsIDAsICZzZ2UpOwotCXBoeXNfYWRkciA9IGdldFBhZGRyKHNnZS5wYV9oaSwgc2dlLnBhX2xvKTsKLQl2aXJ0X2FkZHIgPSBtYm94cS0+c2dlX2FycmF5LT5hZGRyWzBdOwotCXJlYWRfZmNmID0gKHN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKil2aXJ0X2FkZHI7Ci0KLQkvKiBTZXQgdXAgY29tbWFuZCBmaWVsZHMgKi8KLQliZl9zZXQobHBmY19tYnhfcmVhZF9mY2ZfdGJsX2luZHgsICZyZWFkX2ZjZi0+dS5yZXF1ZXN0LCBmY2ZfaW5kZXgpOwotCS8qIFBlcmZvcm0gbmVjZXNzYXJ5IGVuZGlhbiBjb252ZXJzaW9uICovCi0JYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoYnl0ZXAsIGJ5dGVwLCBzaXplb2YodWludDMyX3QpKTsKKwkvKiBJc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFzeW5jaHJvbm91c2x5ICovCiAJbWJveHEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVhZF9mY2ZfcmVjb3JkOwogCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX05PV0FJVCk7Ci0JaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkKIAkJZXJyb3IgPSAtRUlPOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwaGJhLT5oYmFfZmxhZyB8PSBGQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTE5NDIsNiArMTE5OTQsOTAgQEAKIH0KIAogLyoqCisgKiBscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUgLSBjb21wbGV0aW9uIHJvdXRpbmUgZm9yIHJlZGlzY292ZXIgRkNGIHRhYmxlCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gcm91dGluZSBmb3IgdGhlIHJlZGlzY292ZXIgRkNGIHRhYmxlIG1haWxib3gKKyAqIGNvbW1hbmQuIElmIHRoZSBtYWlsYm94IGNvbW1hbmQgcmV0dXJuZWQgZmFpbHVyZSwgaXQgd2lsbCB0cnkgdG8gc3RvcCB0aGUKKyAqIEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIuCisgKiovCit2b2lkCitscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3JlZGlzY19mY2ZfdGJsICpyZWRpc2NfZmNmOworCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CisKKwlyZWRpc2NfZmNmID0gJm1ib3gtPnUubXFlLnVuLnJlZGlzY19mY2ZfdGJsOworCisJc2hkcl9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCXNoZHJfYWRkX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX2FkZF9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCWlmIChzaGRyX3N0YXR1cyB8fCBzaGRyX2FkZF9zdGF0dXMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ2IFJlcXVlc3RpbmcgZm9yIEZDRiByZWRpc2NvdmVyeSBmYWlsZWQgIgorCQkJCSJzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4XG4iLAorCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMpOworCQkvKgorCQkgKiBSZXF1ZXN0IGZhaWxlZCwgbGFzdCByZXNvcnQgdG8gcmUtdHJ5IGN1cnJlbnQKKwkJICogcmVnaXN0ZXJlZCBGQ0YgZW50cnkKKwkJICovCisJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCX0gZWxzZQorCQkvKgorCQkgKiBTdGFydCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBmb3IgcGVuZGluZyBGQ0YKKwkJICogYmVmb3JlIHJlc2NhbiBGQ0YgcmVjb3JkIHRhYmxlLgorCQkgKi8KKwkJbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIocGhiYSk7CisKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3JlZGlzY19hbGxfZmNmIC0gUmVxdWVzdCB0byByZWRpc2NvdmVyIGVudGlyZSBGQ0YgdGFibGUgYnkgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlcXVlc3QgZm9yIHJlZGlzY292ZXJ5IG9mIHRoZSBlbnRpcmUgRkNGIHRhYmxlCisgKiBieSB0aGUgcG9ydC4KKyAqKi8KK2ludAorbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgKnJlZGlzY19mY2Y7CisJaW50IHJjLCBsZW5ndGg7CisKKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3gpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ1IEZhaWxlZCB0byBhbGxvY2F0ZSBtYm94IGZvciAiCisJCQkJInJlcXVlc3RpbmcgRkNGIHJlZGlzY292ZXIuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwpIC0KKwkJICBzaXplb2Yoc3RydWN0IGxwZmNfc2xpNF9jZmdfbWhkcikpOworCWxwZmNfc2xpNF9jb25maWcocGhiYSwgbWJveCwgTFBGQ19NQk9YX1NVQlNZU1RFTV9GQ09FLAorCQkJIExQRkNfTUJPWF9PUENPREVfRkNPRV9SRURJU0NPVkVSX0ZDRiwKKwkJCSBsZW5ndGgsIExQRkNfU0xJNF9NQlhfRU1CRUQpOworCisJcmVkaXNjX2ZjZiA9ICZtYm94LT51Lm1xZS51bi5yZWRpc2NfZmNmX3RibDsKKwkvKiBTZXQgY291bnQgdG8gMCBmb3IgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUgRkNGIGRhdGFiYXNlICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnQsIHJlZGlzY19mY2YsIDApOworCisJLyogSXNzdWUgdGhlIG1haWxib3ggY29tbWFuZCBhc3luY2hyb25vdXNseSAqLworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWRpc2NfZmNmX3RhYmxlOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIGxwZmNfc2xpX3JlYWRfbGlua19zdGUgLSBSZWFkIHJlZ2lvbiAyMyB0byBkZWNpZGUgaWYgbGluayBpcyBkaXNhYmxlZC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMDY5LDMgKzEyMjA1LDQ4IEBACiAJa2ZyZWUocmduMjNfZGF0YSk7CiAJcmV0dXJuOwogfQorCisvKioKKyAqIGxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3ggLSBGcmVlIHVwIHZwb3J0IGRpc2NvdmVyeSBtYWlsYm94IGNvbW1hbmRzLgorICogQHZwb3J0OiBwb2ludGVyIHRvIHZwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYWlsYm94cSBhbmQgY2xlYW4gdXAgYWxsIFJFR19MT0dJTgorICogYW5kIFJFR19WUEkgbWFpbGJveCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZwb3J0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgd2hlbiBkcml2ZXIgd2FudCB0byByZXN0YXJ0IGRpc2NvdmVyeSBvZiB0aGUgdnBvcnQgZHVlIHRvCisgKiBhIENsZWFyIFZpcnR1YWwgTGluayBldmVudC4KKyAqKi8KK3ZvaWQKK2xwZmNfY2xlYW51cF9wZW5kaW5nX21ib3goc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCUxQRkNfTUJPWFFfdCAqbWIsICpuZXh0bWI7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYiwgbmV4dG1iLCAmcGhiYS0+c2xpLm1ib3hxLCBsaXN0KSB7CisJCWlmIChtYi0+dnBvcnQgIT0gdnBvcnQpCisJCQljb250aW51ZTsKKworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19WUEkpKQorCQkJY29udGludWU7CisKKwkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7CisJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKG1iLT5jb250ZXh0MSk7CisJCQlpZiAobXApIHsKKwkJCQlfX2xwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CisJCQkJa2ZyZWUobXApOworCQkJfQorCQl9CisJCWxpc3RfZGVsKCZtYi0+bGlzdCk7CisJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorCW1iID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlOworCWlmIChtYiAmJiAobWItPnZwb3J0ID09IHZwb3J0KSkgeworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB8fAorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19WUEkpKQorCQkJbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGJhMzhkZTMuLmRmY2Y1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtNTMsMTcgKzUzLDE5IEBACiAKIAlJT0NCX3QgaW9jYjsJCS8qIElPQ0IgY21kICovCiAJdWludDhfdCByZXRyeTsJCS8qIHJldHJ5IGNvdW50ZXIgZm9yIElPQ0IgY21kIC0gaWYgbmVlZGVkICovCi0JdWludDhfdCBpb2NiX2ZsYWc7CisJdWludDE2X3QgaW9jYl9mbGFnOwogI2RlZmluZSBMUEZDX0lPX0xJQkRGQwkJMQkvKiBsaWJkZmMgaW9jYiAqLwogI2RlZmluZSBMUEZDX0lPX1dBS0UJCTIJLyogSGlnaCBQcmlvcml0eSBRdWV1ZSBzaWduYWwgZmxhZyAqLwogI2RlZmluZSBMUEZDX0lPX0ZDUAkJNAkvKiBGQ1AgY29tbWFuZCAtLSBpb2NicSBpbiBzY3NpX2J1ZiAqLwogI2RlZmluZSBMUEZDX0RSSVZFUl9BQk9SVEVECTgJLyogZHJpdmVyIGFib3J0ZWQgdGhpcyByZXF1ZXN0ICovCiAjZGVmaW5lIExQRkNfSU9fRkFCUklDCQkweDEwCS8qIElvY2Igc2VuZCB1c2luZyBmYWJyaWMgc2NoZWR1bGVyICovCiAjZGVmaW5lIExQRkNfREVMQVlfTUVNX0ZSRUUJMHgyMCAgICAvKiBEZWZlciBmcmVlJ2luZyBvZiBGQyBkYXRhICovCi0jZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAJLyogRUxTX0lEIHJhbmdlIDAtMyAqLwotI2RlZmluZSBMUEZDX0ZJUF9FTFNfSURfU0hJRlQJNgorI2RlZmluZSBMUEZDX0VYQ0hBTkdFX0JVU1kJMHg0MCAgICAvKiBTTEk0IGhiYSByZXBvcnRlZCBYQiBpbiByZXNwb25zZSAqLworI2RlZmluZSBMUEZDX1VTRV9GQ1BXUUlEWAkweDgwICAgIC8qIFN1Ym1pdCB0byBzcGVjaWZpZWQgRkNQV1EgaW5kZXggKi8KIAotCXVpbnQ4X3QgYWJvcnRfY291bnQ7CisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAwMAkvKiBFTFNfSUQgcmFuZ2UgMC0zLCBub24tc2hpZnRlZCBtYXNrICovCisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAkxNAorCiAJdWludDhfdCByc3ZkMjsKIAl1aW50MzJfdCBkcnZyVGltZW91dDsJLyogZHJpdmVyIHRpbWVvdXQgaW4gc2Vjb25kcyAqLwogCXVpbnQzMl90IGZjcF93cWlkeDsJLyogaW5kZXggdG8gRkNQIHdvcmsgcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKaW5kZXggNDRlNWY1Ny4uODYzMDg4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC0yMiw2ICsyMiwxMCBAQAogI2RlZmluZSBMUEZDX1JFTEVBU0VfTk9USUZJQ0FUSU9OX0lOVEVSVkFMCTMyCiAjZGVmaW5lIExQRkNfR0VUX1FFX1JFTF9JTlQJCQkzMgogI2RlZmluZSBMUEZDX1JQSV9MT1dfV0FURVJfTUFSSwkJCTEwCisKKy8qIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgZm9yIHdhaXRpbmcgRkNGIHJlZGlzY292ZXJ5IHRvIGNvbXBsZXRlICovCisjZGVmaW5lIExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8JCTIwMDAgLyogbXNlYyAqLworCiAvKiBOdW1iZXIgb2YgU0dMIGVudHJpZXMgY2FuIGJlIHBvc3RlZCBpbiBhIDRLQiBub25lbWJlZGRlZCBtYm94IGNvbW1hbmQgKi8KICNkZWZpbmUgTFBGQ19ORU1CRURfTUJPWF9TR0xfQ05UCQkyNTQKIApAQCAtMTI2LDI0ICsxMzAsMzYgQEAKIAl1aW50OF90IHN0YXR1czsKIAl1aW50OF90IHBoeXNpY2FsOwogCXVpbnQ4X3QgZmF1bHQ7CisJdWludDE2X3QgbG9naWNhbF9zcGVlZDsKK307CisKK3N0cnVjdCBscGZjX2ZjZl9yZWMgeworCXVpbnQ4X3QgIGZhYnJpY19uYW1lWzhdOworCXVpbnQ4X3QgIHN3aXRjaF9uYW1lWzhdOworCXVpbnQ4X3QgIG1hY19hZGRyWzZdOworCXVpbnQxNl90IGZjZl9pbmR4OworCXVpbnQzMl90IHByaW9yaXR5OworCXVpbnQxNl90IHZsYW5faWQ7CisJdWludDMyX3QgYWRkcl9tb2RlOworCXVpbnQzMl90IGZsYWc7CisjZGVmaW5lIEJPT1RfRU5BQkxFCTB4MDEKKyNkZWZpbmUgUkVDT1JEX1ZBTElECTB4MDIKIH07CiAKIHN0cnVjdCBscGZjX2ZjZiB7Ci0JdWludDhfdAkgZmFicmljX25hbWVbOF07Ci0JdWludDhfdAkgc3dpdGNoX25hbWVbOF07Ci0JdWludDhfdCAgbWFjX2FkZHJbNl07Ci0JdWludDE2X3QgZmNmX2luZHg7CiAJdWludDE2X3QgZmNmaTsKIAl1aW50MzJfdCBmY2ZfZmxhZzsKICNkZWZpbmUgRkNGX0FWQUlMQUJMRQkweDAxIC8qIEZDRiBhdmFpbGFibGUgZm9yIGRpc2NvdmVyeSAqLwogI2RlZmluZSBGQ0ZfUkVHSVNURVJFRAkweDAyIC8qIEZDRiByZWdpc3RlcmVkIHdpdGggRlcgKi8KLSNkZWZpbmUgRkNGX0RJU0NPVkVSRUQJMHgwNCAvKiBGQ0YgZGlzY292ZXJ5IHN0YXJ0ZWQgICovCi0jZGVmaW5lIEZDRl9CT09UX0VOQUJMRSAweDA4IC8qIEJvb3QgYmlvcyB1c2UgdGhpcyBGQ0YgKi8KLSNkZWZpbmUgRkNGX0lOX1VTRQkweDEwIC8qIEF0bGVhc3Qgb25lIGRpc2NvdmVyeSBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgRkNGX1ZBTElEX1ZMQU4JMHgyMCAvKiBVc2UgdGhlIHZsYW4gaWQgc3BlY2lmaWVkICovCi0JdWludDMyX3QgcHJpb3JpdHk7CisjZGVmaW5lIEZDRl9TQ0FOX0RPTkUJMHgwNCAvKiBGQ0YgdGFibGUgc2NhbiBkb25lICovCisjZGVmaW5lIEZDRl9JTl9VU0UJMHgwOCAvKiBBdGxlYXN0IG9uZSBkaXNjb3ZlcnkgY29tcGxldGVkICovCisjZGVmaW5lIEZDRl9SRURJU0NfUEVORAkweDEwIC8qIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nICovCisjZGVmaW5lIEZDRl9SRURJU0NfRVZUCTB4MjAgLyogRkNGIHJlZGlzY292ZXJ5IGV2ZW50IHRvIHdvcmtlciB0aHJlYWQgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19GT1YJMHg0MCAvKiBQb3N0IEZDRiByZWRpc2NvdmVyeSBmYXN0IGZhaWxvdmVyICovCiAJdWludDMyX3QgYWRkcl9tb2RlOwotCXVpbnQxNl90IHZsYW5faWQ7CisJc3RydWN0IGxwZmNfZmNmX3JlYyBjdXJyZW50X3JlYzsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGZhaWxvdmVyX3JlYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWRpc2Nfd2FpdDsKIH07CiAKICNkZWZpbmUgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUgIlJHMjMiCkBAIC0yNDgsNyArMjY0LDEwIEBACiAjZGVmaW5lIFNMSTRfQ1RfVkZJIDIKICNkZWZpbmUgU0xJNF9DVF9GQ0ZJIDMKIAotI2RlZmluZSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRSAweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX1NFR01FTlRfU0laRQkweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX0JVRl9TSVpFCTBYMjAwMAorI2RlZmluZSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFCQkweDQwMAorI2RlZmluZSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFCQkweDIwMDAwCiAKIC8qCiAgKiBTTEk0IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcwpAQCAtMjgyLDYgKzMwMSw0MiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYTsKIH07CiAKKy8qIFBvcnQgQ2FwYWJpbGl0aWVzIGZvciBTTEk0IFBhcmFtZXRlcnMgKi8KK3N0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCBzdXBwb3J0ZWQ7CisJdWludDMyX3QgaWZfdHlwZTsKKwl1aW50MzJfdCBzbGlfcmV2OworCXVpbnQzMl90IHNsaV9mYW1pbHk7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzE7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzI7CisJdWludDMyX3QgcHJvdG9fdHlwZXM7CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19GQ09FCTB4MDAwMDAwMQorI2RlZmluZSBMUEZDX1NMSTRfUFJPVE9fRkMJMHgwMDAwMDAyCisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19OSUMJMHgwMDAwMDA0CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19JU0NTSQkweDAwMDAwMDgKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX1JETUEJMHgwMDAwMDEwCisJdWludDMyX3Qgc2dlX3N1cHBfbGVuOworCXVpbnQzMl90IGlmX3BhZ2Vfc3o7CisJdWludDMyX3QgcnFfZGJfd2luZG93OworCXVpbnQzMl90IGxvb3Bia19zY29wZTsKKwl1aW50MzJfdCBlcV9wYWdlc19tYXg7CisJdWludDMyX3QgZXFlX3NpemU7CisJdWludDMyX3QgY3FfcGFnZXNfbWF4OworCXVpbnQzMl90IGNxZV9zaXplOworCXVpbnQzMl90IG1xX3BhZ2VzX21heDsKKwl1aW50MzJfdCBtcWVfc2l6ZTsKKwl1aW50MzJfdCBtcV9lbGVtX2NudDsKKwl1aW50MzJfdCB3cV9wYWdlc19tYXg7CisJdWludDMyX3Qgd3FlX3NpemU7CisJdWludDMyX3QgcnFfcGFnZXNfbWF4OworCXVpbnQzMl90IHJxZV9zaXplOworCXVpbnQzMl90IGhkcl9wYWdlc19tYXg7CisJdWludDMyX3QgaGRyX3NpemU7CisJdWludDMyX3QgaGRyX3BwX2FsaWduOworCXVpbnQzMl90IHNnbF9wYWdlc19tYXg7CisJdWludDMyX3Qgc2dsX3BwX2FsaWduOworfTsKKwogLyogU0xJNCBIQkEgZGF0YSBzdHJ1Y3R1cmUgZW50cmllcyAqLwogc3RydWN0IGxwZmNfc2xpNF9oYmEgewogCXZvaWQgX19pb21lbSAqY29uZl9yZWdzX21lbW1hcF9wOyAvKiBLZXJuZWwgbWVtb3J5IG1hcHBlZCBhZGRyZXNzIGZvcgpAQCAtMjk1LDcgKzM1MCw3IEBACiAJdm9pZCBfX2lvbWVtICpVRVJSSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFUlJfU1RBVFVTX0hJIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpVRU1BU0tMT3JlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19MTyByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqVUVNQVNLSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFX01BU0tfSEkgcmVnaXN0ZXIgKi8KLQl2b2lkIF9faW9tZW0gKlNDUkFUQ0hQQURyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKlNMSUlOVEZyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFNMSV9JTlRGIHJlZ2lzdGVyICovCiAJLyogQkFSMSBGQ29FIGZ1bmN0aW9uIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCiAJdm9pZCBfX2lvbWVtICpTVEFyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9TVEFURSByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqSVNScmVnYWRkcjsgICAgLyogQWRkcmVzcyB0byBIU1RfSVNSIHJlZ2lzdGVyICovCkBAIC0zMTAsNiArMzY1LDggQEAKIAogCXVpbnQzMl90IHVlX21hc2tfbG87CiAJdWludDMyX3QgdWVfbWFza19oaTsKKwlzdHJ1Y3QgbHBmY19yZWdpc3RlciBzbGlfaW50ZjsKKwlzdHJ1Y3QgbHBmY19wY19zbGk0X3BhcmFtcyBwY19zbGk0X3BhcmFtczsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOwogCXVpbnQzMl90IGNmZ19lcW47CiAJc3RydWN0IGxwZmNfZmNwX2VxX2hkbCAqZmNwX2VxX2hkbDsgLyogRkNQIHBlci1XUSBoYW5kbGUgKi8KQEAgLTQwNiw2ICs0NjMsOCBAQAogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9zZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwgZG1hX2FkZHJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9nZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwKIAkJCSAgIHN0cnVjdCBscGZjX21ieF9zZ2UgKik7CitpbnQgbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKiwKKwkJCQkgIHVpbnQxNl90KTsKIAogdm9pZCBscGZjX3NsaTRfaGJhX3Jlc2V0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHN0cnVjdCBscGZjX3F1ZXVlICpscGZjX3NsaTRfcXVldWVfYWxsb2Moc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LApAQCAtNDQ4LDYgKzUwNyw3IEBACiB2b2lkIGxwZmNfc2xpNF9mcmVlX3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgaW50KTsKIHZvaWQgbHBmY19zbGk0X3JlbW92ZV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2FzeW5jX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3NsaTRfZmNmX3JlZGlzY19ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaTRfcmVzdW1lX3JwaShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19zbGk0X2ZjcF94cmlfYWJvcnRfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpNF9lbHNfeHJpX2Fib3J0X2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCA3OTJmNzIyLi5hYzI3NmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy43IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuOSIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCmluZGV4IGUzYzdmYTYuLmRjODZlODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKQEAgLTM4OSw3ICszODksNyBAQAogCSAqIGJ5IHRoZSBwb3J0LgogCSAqLwogCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgotCSAgICAocHBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKSB7CisJCShwcG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKSkgewogCQlyYyA9IGxwZmNfc2xpNF9pbml0X3ZwaShwaGJhLCB2cGkpOwogCQlpZiAocmMpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1ZQT1JULApAQCAtNTA1LDYgKzUwNSw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKihzdHJ1Y3QgbHBmY192cG9ydCAqKilmY192cG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8CiAJICAgIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSkgewpAQCAtNTEyLDEwICs1MTMsMTAgQEAKIAkJcmV0dXJuIFZQT1JUX09LOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmxvYWRfZmxhZyB8PSBGQ19MT0FESU5HOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAkvKiBVc2UgdGhlIFBoeXNpY2FsIG5vZGVzIEZhYnJpYyBORExQIHRvIGRldGVybWluZSBpZiB0aGUgbGluayBpcwogCSAqIHVwIGFuZCByZWFkeSB0byBGRElTQy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCmluZGV4IGMyNGU4NmYuLjRhOTBlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL21hY19lc3AuYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgogCkBAIC01Myw3ICs1Miw2IEBACiAJdm9pZCBfX2lvbWVtICpwZG1hX2lvOwogCWludCBlcnJvcjsKIH07Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW50ZXJuYWxfcGRldiwgKmV4dGVybmFsX3BkZXY7CiBzdGF0aWMgc3RydWN0IGVzcCAqZXNwX2NoaXBzWzJdOwogCiAjZGVmaW5lIE1BQ19FU1BfR0VUX1BSSVYoZXNwKSAoKHN0cnVjdCBtYWNfZXNwX3ByaXYgKikgXApAQCAtMjc5LDI0ICsyNzcsMjcgQEAKICAqIFByb2dyYW1tZWQgSU8gcm91dGluZXMgZm9sbG93LgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZXNwICplc3ApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oc3RydWN0IGVzcCAqZXNwKQogewogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewotCQlpZiAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUykKLQkJCXJldHVybiAwOworCQl1bnNpZ25lZCBpbnQgZmJ5dGVzID0gZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUzsKKworCQlpZiAoZmJ5dGVzKQorCQkJcmV0dXJuIGZieXRlczsKIAogCQl1ZGVsYXkoMik7CiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIkZJRk8gaXMgZW1wdHkgKHNyZWcgJTAyeClcbiIsCiAJICAgICAgIGVzcF9yZWFkOChFU1BfU1RBVFVTKSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfaW50cihzdHJ1Y3QgZXNwICplc3ApCiB7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwID0gTUFDX0VTUF9HRVRfUFJJVihlc3ApOwogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewpAQCAtMzA4LDYgKzMwOSw3IEBACiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIklSUSB0aW1lb3V0IChzcmVnICUwMngpXG4iLCBlc3AtPnNyZWcpOworCW1lcC0+ZXJyb3IgPSAxOwogCXJldHVybiAxOwogfQogCkBAIC0zNDcsMTEgKzM0OSwxMCBAQAogc3RhdGljIHZvaWQgbWFjX2VzcF9zZW5kX3Bpb19jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKIAkJCQkgdTMyIGRtYV9jb3VudCwgaW50IHdyaXRlLCB1OCBjbWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CiAJdTggKmZpZm8gPSBlc3AtPnJlZ3MgKyBFU1BfRkRBVEEgKiAxNjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkaXNhYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiAKIAljbWQgJj0gfkVTUF9DTURfRE1BOwogCW1lcC0+ZXJyb3IgPSAwOwpAQCAtMzU5LDExICszNjAsMzUgQEAKIAlpZiAod3JpdGUpIHsKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKIAotCQlpZiAoIW1hY19lc3Bfd2FpdF9mb3JfaW50cihlc3ApKSB7Ci0JCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9maWZvKGVzcCkpCi0JCQkJZXNwX2NvdW50ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWVzcF9jb3VudCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKKworCQkJbiA9IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhlc3ApOworCQkJaWYgKCFuKQorCQkJCWJyZWFrOworCisJCQlpZiAobiA+IGVzcF9jb3VudCkKKwkJCQluID0gZXNwX2NvdW50OworCQkJZXNwX2NvdW50IC09IG47CisKKwkJCU1BQ19FU1BfUElPX0xPT1AoIiUyQCwlMEArIiwgbik7CisKKwkJCWlmICghZXNwX2NvdW50KQorCQkJCWJyZWFrOworCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCisJCQkJYnJlYWs7CisKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRElQKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApKQorCQkJCWJyZWFrOworCisJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKKwkJCQlicmVhazsKKworCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCX0KIAl9IGVsc2UgewogCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKQEAgLTM3NCw0NyArMzk5LDI0IEBACiAJCQlNQUNfRVNQX1BJT19MT09QKCIlMEArLCUyQCIsIGVzcF9jb3VudCk7CiAKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKLQl9CiAKLQl3aGlsZSAoZXNwX2NvdW50KSB7Ci0JCXVuc2lnbmVkIGludCBuOworCQl3aGlsZSAoZXNwX2NvdW50KSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKIAotCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKLQkJCW1lcC0+ZXJyb3IgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZXNwLT5zcmVnICYgRVNQX1NUQVRfU1BBTSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZ3Jvc3MgZXJyb3JcbiIpOwotCQkJbWVwLT5lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCW4gPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOwotCi0JCWlmICh3cml0ZSkgewotCQkJaWYgKG4gPiBlc3BfY291bnQpCi0JCQkJbiA9IGVzcF9jb3VudDsKLQkJCWVzcF9jb3VudCAtPSBuOwotCi0JCQlNQUNfRVNQX1BJT19MT09QKCIlMkAsJTBAKyIsIG4pOwotCi0JCQlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfU1RBVFApCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChlc3BfY291bnQpIHsKLQkJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQkJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKQotCQkJCQlicmVhazsKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRE9QKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NT1ApKQorCQkJCWJyZWFrOwogCi0JCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7Ci0JCQl9Ci0JCX0gZWxzZSB7CiAJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfREMpCisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKIAkJCQlicmVhazsKIAotCQkJbiA9IE1BQ19FU1BfRklGT19TSVpFIC0gbjsKKwkJCW4gPSBNQUNfRVNQX0ZJRk9fU0laRSAtCisJCQkgICAgKGVzcF9yZWFkOChFU1BfRkZMQUdTKSAmIEVTUF9GRl9GQllURVMpOwogCQkJaWYgKG4gPiBlc3BfY291bnQpCiAJCQkJbiA9IGVzcF9jb3VudDsKIApAQCAtNDI5LDcgKzQzMSw3IEBACiAJCX0KIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZW5hYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjX2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCkBAIC00OTIsMjkgKzQ5NCwxMiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGVzcCAqZXNwOwogCWludCBlcnI7Ci0JaW50IGNoaXBzX3ByZXNlbnQ7CiAJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwOwogCiAJaWYgKCFNQUNIX0lTX01BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgewotCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMzoKLQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKLQkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKLQkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCi0JCQljaGlwc19wcmVzZW50ID0gMjsKLQkJZWxzZQotCQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNoaXBzX3ByZXNlbnQgPSAwOwotCX0KLQotCWlmIChkZXYtPmlkICsgMSA+IGNoaXBzX3ByZXNlbnQpCisJaWYgKGRldi0+aWQgPiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2ModHBudCwgc2l6ZW9mKHN0cnVjdCBlc3ApKTsKQEAgLTYzOSw1NSArNjI0LDI2IEBACiAJLnByb2JlICAgID0gZXNwX21hY19wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChlc3BfbWFjX3JlbW92ZSksCiAJLmRyaXZlciAgID0gewotCQkubmFtZSAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJCS5uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX2VzcF9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpbnRlcm5hbF9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMCk7Ci0JaWYgKGludGVybmFsX3BkZXYgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChpbnRlcm5hbF9wZGV2KSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JZXh0ZXJuYWxfcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZfTU9EVUxFX05BTUUsIDEpOwotCWlmIChleHRlcm5hbF9wZGV2ICYmIHBsYXRmb3JtX2RldmljZV9hZGQoZXh0ZXJuYWxfcGRldikpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChleHRlcm5hbF9wZGV2KTsKLQkJZXh0ZXJuYWxfcGRldiA9IE5VTEw7Ci0JfQotCi0JaWYgKGludGVybmFsX3BkZXYgfHwgZXh0ZXJuYWxfcGRldikgewotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX2VzcF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzcF9tYWNfZHJpdmVyKTsKLQotCWlmIChpbnRlcm5hbF9wZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JaWYgKGV4dGVybmFsX3BkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXh0ZXJuYWxfcGRldik7Ci0JCWV4dGVybmFsX3BkZXYgPSBOVUxMOwotCX0KIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWMgRVNQIFNDU0kgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJGaW5uIFRoYWluIDxmdGhhaW5AdGVsZWdyYXBoaWNzLmNvbS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTU9EVUxFX05BTUUpOwogCiBtb2R1bGVfaW5pdChtYWNfZXNwX2luaXQpOwogbW9kdWxlX2V4aXQobWFjX2VzcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCBkOWI4Y2E1Li40MDk2NDhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwpAQCAtMTAsNyArMTAsNyBAQAogICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiBGSUxFCQk6IG1lZ2FyYWlkX3Nhcy5jCi0gKiBWZXJzaW9uICAgICA6IHYwMC4wMC4wNC4xMi1yYzEKKyAqIFZlcnNpb24gICAgIDogdjAwLjAwLjA0LjE3LjEtcmMxCiAgKgogICogQXV0aG9yczoKICAqCShlbWFpbC1pZCA6IG1lZ2FyYWlkbGludXhAbHNpLmNvbSkKQEAgLTg0Myw2ICs4NDMsNyBAQAogCXB0aHJ1LT5sdW4gPSBzY3AtPmRldmljZS0+bHVuOwogCXB0aHJ1LT5jZGJfbGVuID0gc2NwLT5jbWRfbGVuOwogCXB0aHJ1LT50aW1lb3V0ID0gMDsKKwlwdGhydS0+cGFkXzAgPSAwOwogCXB0aHJ1LT5mbGFncyA9IGZsYWdzOwogCXB0aHJ1LT5kYXRhX3hmZXJfbGVuID0gc2NzaV9idWZmbGVuKHNjcCk7CiAKQEAgLTg3NCw2ICs4NzUsMTIgQEAKIAkJcHRocnUtPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2wzMihpbnN0YW5jZSwgc2NwLAogCQkJCQkJICAgICAgJnB0aHJ1LT5zZ2wpOwogCisJaWYgKHB0aHJ1LT5zZ2VfY291bnQgPiBpbnN0YW5jZS0+bWF4X251bV9zZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBEQ0RCIHR3byBtYW55IFNHRSBOVU09JXhcbiIsCisJCQlwdGhydS0+c2dlX2NvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBTZW5zZSBpbmZvIHNwZWNpZmljCiAJICovCkBAIC0xMDAwLDYgKzEwMDcsMTIgQEAKIAl9IGVsc2UKIAkJbGRpby0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDMyKGluc3RhbmNlLCBzY3AsICZsZGlvLT5zZ2wpOwogCisJaWYgKGxkaW8tPnNnZV9jb3VudCA+IGluc3RhbmNlLT5tYXhfbnVtX3NnZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGJ1aWxkX2xkX2lvOiBzZ2VfY291bnQgPSAleFxuIiwKKwkJCWxkaW8tPnNnZV9jb3VudCk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogU2Vuc2UgaW5mbyBzcGVjaWZpYwogCSAqLwpAQCAtMjI1MCw2ICsyMjYzLDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAxOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IE1SX1BEX0xJU1QpOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfUERfTElTVF9RVUVSWTsKIAlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKQEAgLTIyOTQsNiArMjMwOCw4NiBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBtZWdhc2FzX2dldF9sZF9saXN0X2luZm8gLQlSZXR1cm5zIEZXJ3MgbGRfbGlzdCBzdHJ1Y3R1cmUKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAbGRfbGlzdDoJCQkJbGRfbGlzdCBzdHJ1Y3R1cmUKKyAqCisgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgUEQKKyAqIGxpc3Qgc3RydWN0dXJlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCBTWVNURU0KKyAqIHN1cHBvcnRlZCBieSB0aGUgRlcuCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfZ2V0X2xkX2xpc3Qoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCWludCByZXQgPSAwLCBsZF9pbmRleCA9IDAsIGlkcyA9IDA7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwlzdHJ1Y3QgTVJfTERfTElTVCAqY2k7CisJZG1hX2FkZHJfdCBjaV9oID0gMDsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpZiAoIWNtZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhc19nZXRfbGRfbGlzdDogRmFpbGVkIHRvIGdldCBjbWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwljaSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCksCisJCQkJJmNpX2gpOworCisJaWYgKCFjaSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIGFsbG9jIG1lbSBpbiBnZXRfbGRfbGlzdFxuIik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNpLCAwLCBzaXplb2YoKmNpKSk7CisJbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKwlkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7CisJZGNtZC0+Y21kX3N0YXR1cyA9IDB4RkY7CisJZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKTsKKwlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0xEX0dFVF9MSVNUOworCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpOworCWRjbWQtPnBhZF8wICA9IDA7CisKKwlpZiAoIW1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpKSB7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0ID0gLTE7CisJfQorCisJLyogdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgaW5zdGFuY2UgUEQgTElTVCAqLworCisJaWYgKChyZXQgPT0gMCkgJiYgKGNpLT5sZENvdW50IDwgTUFYX0xPR0lDQUxfRFJJVkVTKSkgeworCQltZW1zZXQoaW5zdGFuY2UtPmxkX2lkcywgMHhmZiwgTUVHQVNBU19NQVhfTERfSURTKTsKKworCQlmb3IgKGxkX2luZGV4ID0gMDsgbGRfaW5kZXggPCBjaS0+bGRDb3VudDsgbGRfaW5kZXgrKykgeworCQkJaWYgKGNpLT5sZExpc3RbbGRfaW5kZXhdLnN0YXRlICE9IDApIHsKKwkJCQlpZHMgPSBjaS0+bGRMaXN0W2xkX2luZGV4XS5yZWYudGFyZ2V0SWQ7CisJCQkJaW5zdGFuY2UtPmxkX2lkc1tpZHNdID0KKwkJCQkJY2ktPmxkTGlzdFtsZF9pbmRleF0ucmVmLnRhcmdldElkOworCQkJfQorCQl9CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpLAorCQkJCWNpLAorCQkJCWNpX2gpOworCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogbWVnYXNhc19nZXRfY29udHJvbGxlcl9pbmZvIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCiAgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQpAQCAtMjMzOSw2ICsyNDMzLDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAxOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0dFVF9JTkZPOwogCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOwpAQCAtMjU5MCw2ICsyNjg1LDkgQEAKIAkJKE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3BkX2xpc3QpKSk7CiAJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7CiAKKwltZW1zZXQoaW5zdGFuY2UtPmxkX2lkcywgMHhmZiwgTUVHQVNBU19NQVhfTERfSURTKTsKKwltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwogCWN0cmxfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksIEdGUF9LRVJORUwpOwogCiAJLyoKQEAgLTI3MTQsNiArMjgxMiw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8pOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVRfSU5GTzsKIAlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gZWxfaW5mb19oOwpAQCAtMjgyOCw2ICsyOTI3LDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAxOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9kZXRhaWwpOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9FVkVOVF9XQUlUOwogCWRjbWQtPm1ib3gud1swXSA9IHNlcV9udW07CkBAIC0zMTY2LDYgKzMyNjYsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDA7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9DQUNIRV9GTFVTSDsKIAlkY21kLT5tYm94LmJbMF0gPSBNUl9GTFVTSF9DVFJMX0NBQ0hFIHwgTVJfRkxVU0hfRElTS19DQUNIRTsKQEAgLTMyMDUsNiArMzMwNiw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMDsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IDA7CiAJZGNtZC0+b3Bjb2RlID0gb3Bjb2RlOwogCkBAIC0zOTg0LDYgKzQwODYsNyBAQAogCXN0cnVjdCAgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCAgc2NzaV9kZXZpY2UgKnNkZXYxOwogCXUxNiAgICAgcGRfaW5kZXggPSAwOworCXUxNglsZF9pbmRleCA9IDA7CiAJaW50ICAgICBpLCBqLCBkb3NjYW4gPSAwOwogCXUzMiBzZXFfbnVtOwogCWludCBlcnJvcjsKQEAgLTM5OTksOCArNDEwMiwxMjQgQEAKIAogCQlzd2l0Y2ggKGluc3RhbmNlLT5ldnRfZGV0YWlsLT5jb2RlKSB7CiAJCWNhc2UgTVJfRVZUX1BEX0lOU0VSVEVEOgorCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJcGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9CisJCQkJc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsIGksIGosIDApOworCisJCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlCisJCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LCBpLCBqLCAwKTsKKwkJCQkJCX0KKworCQkJCQlpZiAoc2RldjEpCisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCiAJCWNhc2UgTVJfRVZUX1BEX1JFTU9WRUQ6CisJCQlpZiAobWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSkgPT0gMCkgeworCQkJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCXBkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPQorCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQorCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBNUl9FVlRfTERfT0ZGTElORToKKwkJY2FzZSBNUl9FVlRfTERfREVMRVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlsZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCWkgKyBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKKwkJCQkJaiwKKwkJCQkJMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNUl9FVlRfTERfQ1JFQVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCQlqKyspIHsKKwkJCQkJbGRfaW5kZXggPQorCQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLAorCQkJCQkJaiwgMCk7CisKKwkJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9CisJCQkJCQkJCTB4ZmYpIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKKwkJCQkJCQkJaSArIDIsCisJCQkJCQkJCWosIDApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKIAkJY2FzZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRDoKKwkJY2FzZSBNUl9FVlRfRk9SRUlHTl9DRkdfSU1QT1JURUQ6CiAJCQlkb3NjYW4gPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00MDM1LDYgKzQyNTQsMzEgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKworCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7IGorKykgeworCQkJCWxkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwKKwkJCQkJaStNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywgaiwgMCk7CisJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9IDB4ZmYpIHsKKwkJCQkJaWYgKCFzZGV2MSkgeworCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsCisJCQkJCQkJCWkrMiwKKwkJCQkJCQkJaiwgMCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCWlmICggaW5zdGFuY2UtPmFlbl9jbWQgIT0gTlVMTCApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAppbmRleCA3MmIyOGU0Li45ZDhiNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCkBAIC0xOCw5ICsxOCw5IEBACiAvKgogICogTWVnYVJBSUQgU0FTIERyaXZlciBtZXRhIGRhdGEKICAqLwotI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkJIjAwLjAwLjA0LjEyLXJjMSIKLSNkZWZpbmUgTUVHQVNBU19SRUxEQVRFCQkJCSJTZXAuIDE3LCAyMDA5IgotI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIlRodSBTZXAuIDE3IDExOjQxOjUxIFBTVCAyMDA5IgorI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkiMDAuMDAuMDQuMTcuMS1yYzEiCisjZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCSJPY3QuIDI5LCAyMDA5IgorI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkiVGh1LiBPY3QuIDI5LCAxMTo0MTo1MSBQU1QgMjAwOSIKIAogLyoKICAqIERldmljZSBJRHMKQEAgLTExNyw2ICsxMTcsNyBAQAogI2RlZmluZSBNRklfQ01EX1NUUAkJCQkweDA4CiAKICNkZWZpbmUgTVJfRENNRF9DVFJMX0dFVF9JTkZPCQkJMHgwMTAxMDAwMAorI2RlZmluZSBNUl9EQ01EX0xEX0dFVF9MSVNUCQkJMHgwMzAxMDAwMAogCiAjZGVmaW5lIE1SX0RDTURfQ1RSTF9DQUNIRV9GTFVTSAkJMHgwMTEwMTAwMAogI2RlZmluZSBNUl9GTFVTSF9DVFJMX0NBQ0hFCQkJMHgwMQpAQCAtMzQ5LDYgKzM1MCwzMiBAQAogCXU4ICAgICAgICAgICAgIGRyaXZlU3RhdGU7CiB9IF9fcGFja2VkOwogCisgLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgcmVmZXJlbmNlIHN0cnVjdHVyZQorICovCit1bmlvbiAgTVJfTERfUkVGIHsKKwlzdHJ1Y3QgeworCQl1OCAgICAgIHRhcmdldElkOworCQl1OCAgICAgIHJlc2VydmVkOworCQl1MTYgICAgIHNlcU51bTsKKwl9OworCXUzMiAgICAgcmVmOworfSBfX3BhY2tlZDsKKworLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgbGlzdCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IE1SX0xEX0xJU1QgeworCXUzMiAgICAgbGRDb3VudDsKKwl1MzIgICAgIHJlc2VydmVkOworCXN0cnVjdCB7CisJCXVuaW9uIE1SX0xEX1JFRiAgIHJlZjsKKwkJdTggICAgICAgICAgc3RhdGU7CisJCXU4ICAgICAgICAgIHJlc2VydmVkWzNdOworCQl1NjQgICAgICAgICBzaXplOworCX0gbGRMaXN0W01BWF9MT0dJQ0FMX0RSSVZFU107Cit9IF9fcGFja2VkOworCiAvKgogICogU0FTIGNvbnRyb2xsZXIgcHJvcGVydGllcwogICovCkBAIC02MzcsNiArNjY0LDggQEAKICNkZWZpbmUgTUVHQVNBU19NQVhfTEQJCQkJNjQKICNkZWZpbmUgTUVHQVNBU19NQVhfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIChNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAqIFwKIAkJCQkJCU1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKKyNkZWZpbmUgTUVHQVNBU19NQVhfTERfSURTCQkJKE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTICogXAorCQkJCQkJTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKQogCiAjZGVmaW5lIE1FR0FTQVNfREJHX0xWTAkJCQkxCiAKQEAgLTExODcsNiArMTIxNiw3IEBACiAJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ19zZXQ7CiAKIAlzdHJ1Y3QgbWVnYXNhc19wZF9saXN0ICAgICAgICAgIHBkX2xpc3RbTUVHQVNBU19NQVhfUERdOworCXU4ICAgICBsZF9pZHNbTUVHQVNBU19NQVhfTERfSURTXTsKIAlzOCBpbml0X2lkOwogCiAJdTE2IG1heF9udW1fc2dlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKaW5kZXggNzBjNGMyNC4uYmE4ZTEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCkBAIC00NCw2ICs0NCw3IEBACiAJdHJpc3RhdGUgIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCiAJc2VsZWN0IFNDU0lfU0FTX0FUVFJTCisJc2VsZWN0IFJBSURfQVRUUlMKIAktLS1oZWxwLS0tCiAJVGhpcyBkcml2ZXIgc3VwcG9ydHMgUENJLUV4cHJlc3MgU0FTIDZHYi9zIEhvc3QgQWRhcHRlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCmluZGV4IDkxNDE2ODEuLjk5NThkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjEzCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xNAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTUzLDYgKzUzLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KICAqICAwNy0zMC0wOSAgMDIuMDAuMTMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjE0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVNJLXggaW5kZXggbWFzayBhbmQgc2hpZnQgZm9yIFJlcGx5IFBvc3QgSG9zdAorICogICAgICAgICAgICAgICAgICAgICAgSW5kZXggcmVnaXN0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiBjb2RlIGZvciBIb3N0IEJhc2VkIERpc2NvdmVyeSBBY3Rpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03OCw3ICs4Miw3IEBACiAjZGVmaW5lIE1QSTJfVkVSU0lPTl8wMl8wMCAgICAgICAgICAgICAgICAgICgweDAyMDApCiAKIC8qIHZlcnNpb25pbmcgZm9yIHRoaXMgTVBJIGhlYWRlciBzZXQgKi8KLSNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEQpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBFKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX0RFViAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX01BU0sgICAgICAgKDB4RkYwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCkBAIC0yMzIsOSArMjM2LDEyIEBACiAjZGVmaW5lIE1QSTJfUkVQTFlfRlJFRV9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA0OCkKIAogLyoKLSAqIE9mZnNldCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZQorICogRGVmaW5lcyBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZQogICovCiAjZGVmaW5lIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA2QykKKyNkZWZpbmUgTVBJMl9SRVBMWV9QT1NUX0hPU1RfSU5ERVhfTUFTSyAgICAgICAgICgweDAwRkZGRkZGKQorI2RlZmluZSBNUEkyX1JQSElfTVNJWF9JTkRFWF9NQVNLICAgICAgICAgICAgICAgKDB4RkYwMDAwMDApCisjZGVmaW5lIE1QSTJfUlBISV9NU0lYX0lOREVYX1NISUZUICAgICAgICAgICAgICAoMjQpCiAKIC8qCiAgKiBEZWZpbmVzIGZvciB0aGUgSENCU2l6ZSBhbmQgYWRkcmVzcwpAQCAtNDk3LDEyICs1MDQsMTMgQEAKICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9CQVNFX1BPU1QgICAgICAoMHgyNCkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgQmFzZSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0xJU1RfUE9TVCAgICAgICgweDI1KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBMaXN0ICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgICAgICAgKDB4MkMpIC8qIFJBSUQgQWNjZWxlcmF0b3IqLworLyogSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSE9TVF9CQVNFRF9ESVNDT1ZFUllfQUNUSU9OICAgKDB4MkYpCiAKIAogCiAvKiBEb29yYmVsbCBmdW5jdGlvbnMgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VUICAgICAgICAoMHg0MCkKLS8qICNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT19VTklUX1JFU0VUICAgICAgICAgICAgICAgICAoMHg0MSkgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAgICAoMHg0MikKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggMTYxMWM1Ny4uY2YwYWM5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEyCisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDcsNiArMTA3LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIHRvIFNBUyBEZXZpY2UgUGFnZSAwIEZsYWdzIGZpZWxkLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5SW5mbyBkZWZpbmVzIGZvciBwb3dlciBjb25kaXRpb24uCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBhZ2VzLgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgNCBzdHJ1Y3R1cmUgYW5kIGRlZmluZXMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MTIsNiArNzE0LDcgQEAKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDQpCiAKIC8qIElPIFVuaXQgUGFnZSAxIEZsYWdzIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkgICAgKDB4MDAwMDA4MDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfTUFTS19TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAgICgweDAwMDAwNjAwKQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAoMHgwMDAwMDAwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgKDB4MDAwMDAyMDApCkBAIC0yMjkxLDYgKzIyOTQsMjYgQEAKICNkZWZpbmUgTVBJMl9TQVNQSFkzX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCiAKIAorLyogU0FTIFBIWSBQYWdlIDQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80IHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxGcmFtZVsyOF07ICAgICAgICAgICAvKiAweDBDICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80LAorICBNcGkyU2FzUGh5UGFnZTRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTRfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTRfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKKworLyogdmFsdWVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFk0X0ZMQUdTX0ZSQU1FX1ZBTElEICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNQSFk0X0ZMQUdTX1NBVEFfRlJBTUUgICAgICAgICAoMHgwMSkKKworCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICBTQVMgUG9ydCBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CmluZGV4IDY1ZmNhYTMuLmM0YWRmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CkBAIC01LDIzICs1LDI0IEBACiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjEyCi0gSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDA1LTA2LTA5CisgSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjE0CisgSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDEwLTI4LTA5CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICBGaWxlbmFtZSAgICAgICAgICAgICAgIEN1cnJlbnQgdmVyc2lvbiAgICAgUHJpb3IgdmVyc2lvbgogIC0tLS0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tCi0gbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xMiAgICAgICAgICAgIDAyLjAwLjExCi0gbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCi0gbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wNyAgICAgICAgICAgIDAyLjAwLjA2Ci0gbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCi0gbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCi0gbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMiAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xNCAgICAgICAgICAgIDAyLjAwLjEzCisgbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMyAgICAgICAgICAgIDAyLjAwLjEyCisgbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wOCAgICAgICAgICAgIDAyLjAwLjA3CisgbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMyAgICAgICAgICAgIDAyLjAwLjEyCisgbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wNCAgICAgICAgICAgIDAyLjAwLjA0CisgbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCiAgbXBpMl90YXJnLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCi0gbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wNCAgICAgICAgICAgIDAyLjAwLjA0CiAgbXBpMl90eXBlLmggICAgICAgICAgICAwMi4wMC4wMCAgICAgICAgICAgIDAyLjAwLjAwCi0gbXBpMl9yYS5oICAgICAgICAgICAgICAwMi4wMC4wMAotIG1waTJfaGlzdG9yeS50eHQgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfcmEuaCAgICAgICAgICAgICAgMDIuMDAuMDAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfaGJkLmggICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX2hpc3RvcnkudHh0ICAgICAgIDAyLjAwLjE0ICAgICAgICAgICAgMDIuMDAuMTMKIAogCiAgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgpAQCAtNjUsNiArNjYsMTEgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgYW5kIG1hZGUgdGhvc2UKICAqICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlc2VydmVkLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUkFJRCBBY2NlbGVyYXRvciBmdW5jdGlvbmFsaXR5LgorICogIDA3LTMwLTA5ICAwMi4wMC4xMyAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNU0kteCBpbmRleCBtYXNrIGFuZCBzaGlmdCBmb3IgUmVwbHkgUG9zdCBIb3N0CisgKiAgICAgICAgICAgICAgICAgICAgICBJbmRleCByZWdpc3Rlci4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZ1bmN0aW9uIGNvZGUgZm9yIEhvc3QgQmFzZWQgRGlzY292ZXJ5IEFjdGlvbi4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX2NuZmcuaApAQCAtMTU1LDYgKzE2MSwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCiAgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCisgKiAgMDctMzAtMDkgIDAyLjAwLjEyICBBZGRlZCBJTyBVbml0IFBhZ2UgNy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBkZXZpY2UgaWRzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIElPIFVuaXQgUGFnZSA1LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcGFydGlhbCBhbmQgc2x1bWJlciBwb3dlciBtYW5hZ2VtZW50IGNhcGFibGUgZmxhZ3MKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIFNBUyBEZXZpY2UgUGFnZSAwIEZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5SW5mbyBkZWZpbmVzIGZvciBwb3dlciBjb25kaXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBhZ2VzLgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgNCBzdHJ1Y3R1cmUgYW5kIGRlZmluZXMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9pbml0LmgKQEAgLTE3Miw2ICsxODcsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCiAgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIDEwLTI4LTA5ICAwMi4wMC4wOCAgQWRkZWQgZGVmaW5lcyBmb3IgZGVjb2RpbmcgdGhlIFJlc3BvbnNlSW5mbyBieXRlcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIGJvdGggU0NTSSBJTyBFcnJvciBSZXBseSBhbmQgU0NTSSBUYXNrIE1hbmFnZW1lbnQgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSZXNwb25zZUluZm8gZmllbGQgdG8gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHIGRlZmluZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX2lvYy5oCkBAIC0yNDYsNiArMjY1LDIwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgorICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgR1BJTyBJbnRlcnJ1cHQgZXZlbnQgZGVmaW5lIGFuZCBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBwcm9kdWN0IGlkIGZhbWlseSBmb3IgMjIwOC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIEhvc3RNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1pbkRldkhhbmRsZSBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfSE9TVF9CQVNFRF9ESVNDT1ZFUllfUEhZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciBQcm9kdWN0SUQgUHJvZHVjdCBmaWVsZAorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF8pLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgdmFsdWVzIGZvciBTQVMgUHJvZHVjdElEIEZhbWlseQorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfKS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3JhaWQuaApAQCAtMjU2LDYgKzI4OSw4IEBACiAgKiAgMDUtMjEtMDggIDAyLjAwLjAzICBBZGRlZCBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1Mgc28gdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgdGhlIFBoeXNEaXNrIGFycmF5IGluIE1QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNUCiAgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICogIDA3LTMwLTA5ICAwMi4wMC4wNCAgQWRkZWQgcHJvcGVyIGRlZmluZSBmb3IgdGhlIFVzZSBEZWZhdWx0IFNldHRpbmdzIGJpdCBvZgorICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lQ3JlYXRpb25GbGFncyBhbmQgbWFya2VkIHRoZSBvbGQgb25lIGFzIG9ic29sZXRlLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfc2FzLmgKQEAgLTI2NCw2ICsyOTksOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgogICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKICAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjAzICBDaGFuZ2VkIHRoZSB0eXBlIG9mIFNHTCBpbiBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVAorICogICAgICAgICAgICAgICAgICAgICAgdG8gTVBJMl9TR0VfSU9fVU5JT04gc2luY2UgaXQgc3VwcG9ydHMgY2hhaW5lZCBTR0xzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfdGFyZy5oCkBAIC0yODMsNiArMzIwLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgogICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KICAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMDQgIEFkZGVkIEV4dGVuZGVkVHlwZSBmaWVsZCB0byBEaWFnbm9zdGljQnVmZmVyUG9zdCByZXF1ZXN0CisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVwbHkgbWVzc2FnZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0RJQUdfQlVGX1RZUEVfRVhURU5ERUQuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbmNyZW1lbnRlZCBNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlQuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl90eXBlLmgKQEAgLTI5MywyMCArMzM0LDI2IEBACiAgKiAgMDUtMDYtMDkgIDAyLjAwLjAwICBJbml0aWFsIHZlcnNpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorbXBpMl9oYmQuaAorICogIDEwLTI4LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwogbXBpMl9oaXN0b3J5LnR4dCAgICAgICAgIFBhcnRzIGxpc3QgaGlzdG9yeQogCi1GaWxlbmFtZSAgICAgMDIuMDAuMTIKLS0tLS0tLS0tLS0gICAtLS0tLS0tLQotbXBpMi5oICAgICAgIDAyLjAwLjEyCi1tcGkyX2NuZmcuaCAgMDIuMDAuMTEKLW1waTJfaW5pdC5oICAwMi4wMC4wNwotbXBpMl9pb2MuaCAgIDAyLjAwLjExCi1tcGkyX3JhaWQuaCAgMDIuMDAuMDMKLW1waTJfc2FzLmggICAwMi4wMC4wMgotbXBpMl90YXJnLmggIDAyLjAwLjAzCi1tcGkyX3Rvb2wuaCAgMDIuMDAuMDMKLW1waTJfdHlwZS5oICAwMi4wMC4wMAotbXBpMl9yYS5oICAgIDAyLjAwLjAwCitGaWxlbmFtZSAgICAgMDIuMDAuMTQgIDAyLjAwLjEzICAwMi4wMC4xMgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xNCAgMDIuMDAuMTMgIDAyLjAwLjEyCittcGkyX2NuZmcuaCAgMDIuMDAuMTMgIDAyLjAwLjEyICAwMi4wMC4xMQorbXBpMl9pbml0LmggIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDcKK21waTJfaW9jLmggICAwMi4wMC4xMyAgMDIuMDAuMTIgIDAyLjAwLjExCittcGkyX3JhaWQuaCAgMDIuMDAuMDQgIDAyLjAwLjA0ICAwMi4wMC4wMworbXBpMl9zYXMuaCAgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfdGFyZy5oICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAzCittcGkyX3Rvb2wuaCAgMDIuMDAuMDQgIDAyLjAwLjA0ICAwMi4wMC4wMworbXBpMl90eXBlLmggIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfcmEuaCAgICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX2hiZC5oICAgMDIuMDAuMDAKIAogRmlsZW5hbWUgICAgIDAyLjAwLjExICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYKIC0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKaW5kZXggNTYzZTU2ZC4uNjU0MTk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNDU0kgaW5pdGlhdG9yIG1vZGUgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMywgMjAwNgogICoKLSAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNworICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA4CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjcsNiArMjcsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCiAgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIDEwLTI4LTA5ICAwMi4wMC4wOCAgQWRkZWQgZGVmaW5lcyBmb3IgZGVjb2RpbmcgdGhlIFJlc3BvbnNlSW5mbyBieXRlcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIGJvdGggU0NTSSBJTyBFcnJvciBSZXBseSBhbmQgU0NTSSBUYXNrIE1hbmFnZW1lbnQgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSZXNwb25zZUluZm8gZmllbGQgdG8gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHIGRlZmluZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI1NCw2ICsyNTgsMTEgQEAKICNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEICAgICAgICAgKDB4MDEpCiAKKy8qIG1hc2tzIGFuZCBzaGlmdHMgZm9yIHRoZSBSZXNwb25zZUluZm8gZmllbGQgKi8KKworI2RlZmluZSBNUEkyX1NDU0lfUklfTUFTS19SRUFTT05DT0RFICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfU0NTSV9SSV9TSElGVF9SRUFTT05DT0RFICAgICAgICAgICAoMCkKKwogI2RlZmluZSBNUEkyX1NDU0lfVEFTS1RBR19VTktOT1dOICAgICAgICAgICAgICAgKDB4RkZGRikKIAogCkBAIC0zMjcsNiArMzM2LDcgQEAKICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbkNvdW50OyAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZUluZm87ICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KIH0gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLAogICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKICAgTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lNYW5hZ2VtZW50UmVwbHlfdDsKQEAgLTMzOSw4ICszNDksMjAgQEAKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0ZBSUxFRCAgICAgICAgICAgICAgICAgKDB4MDUpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9TVUNDRUVERUQgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fSU5WQUxJRF9MVU4gICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHICAgICAgICAgKDB4MEEpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DICAgICAgICAgICgweDgwKQogCisvKiBtYXNrcyBhbmQgc2hpZnRzIGZvciB0aGUgUmVzcG9uc2VJbmZvIGZpZWxkICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19SRUFTT05DT0RFICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX1JFQVNPTkNPREUgICAgICAgICAgICgwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTIgICAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMiAgICAgICAgICAgICAgICAgKDgpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfQVJJMSAgICAgICAgICAgICAgICAgICgweDAwRkYwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9BUkkxICAgICAgICAgICAgICAgICAoMTYpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfQVJJMCAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9BUkkwICAgICAgICAgICAgICAgICAoMjQpCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIFNDU0kgRW5jbG9zdXJlIFByb2Nlc3NvciBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCBlYTUxY2U4Li43NTQ5Mzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTIKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTg3LDYgKzg3LDE3IEBACiAgKiAgMDctMzAtMDkgIDAyLjAwLjEyICBBZGRlZCBHUElPIEludGVycnVwdCBldmVudCBkZWZpbmUgYW5kIHN0cnVjdHVyZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FWFRFTkRFRF9CVUZGRVIgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHByb2R1Y3QgaWQgZmFtaWx5IGZvciAyMjA4LgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgSG9zdE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1heE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWluRGV2SGFuZGxlIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9IT1NUX0JBU0VEX0RJU0NPVkVSWV9QSFkgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT19FWFBBTkRFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBIb3N0IEJhc2VkIERpc2NvdmVyeSBQaHkgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZXMgZm9yIFByb2R1Y3RJRCBQcm9kdWN0IGZpZWxkCisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEXykuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCB2YWx1ZXMgZm9yIFNBUyBQcm9kdWN0SUQgRmFtaWx5CisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8pLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMTE5LDggKzEzMCwxMCBAQAogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1zZ1ZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEhlYWRlclZlcnNpb247ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwotICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEhvc3RNU0l4VmVjdG9yczsgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVJlcXVlc3RGcmFtZVNpemU7ICAgICAgICAgLyogMHgxQSAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOyAgLyogMHgxQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RnJlZVF1ZXVlRGVwdGg7ICAgICAgICAgICAgLyogMHgxRSAqLwpAQCAtMjE1LDcgKzIyOCw3IEBACiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Q2hhaW5EZXB0aDsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQb3J0czsgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCi0gICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4TVNJeFZlY3RvcnM7ICAgICAgICAgICAgICAgICAvKiAweDE3ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdENyZWRpdDsgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdElEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDFBICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DQ2FwYWJpbGl0aWVzOyAgICAgICAgICAgICAgICAvKiAweDFDICovCkBAIC0yMzMsNyArMjQ2LDggQEAKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhWb2x1bWVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzcgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MzggKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhQZXJzaXN0ZW50RW50cmllczsgICAgICAgICAgIC8qIDB4M0EgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNaW5EZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0UgKi8KIH0gTVBJMl9JT0NfRkFDVFNfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfRkFDVFNfUkVQTFksCiAgIE1waTJJT0NGYWN0c1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ0ZhY3RzUmVwbHlfdDsKIApAQCAtMjY5LDYgKzI4Myw3IEBACiAvKiBQcm9kdWN0SUQgZmllbGQgdXNlcyBNUEkyX0ZXX0hFQURFUl9QSURfICovCiAKIC8qIElPQ0NhcGFiaWxpdGllcyAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSE9TVF9CQVNFRF9ESVNDT1ZFUlkgICAoMHgwMDAxMDAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYICAgICAgICAgICAgKDB4MDAwMDgwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICgweDAwMDA0MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZICAgICAgICAgICAoMHgwMDAwMjAwMCkKQEAgLTQ1Myw2ICs0NjgsNyBAQAogI2RlZmluZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCAgICAgICAgICAgICAgICAgICgweDAwMjEpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1BIWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgKDB4MDAyMikKICNkZWZpbmUgTVBJMl9FVkVOVF9HUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAoMHgwMDIzKQorI2RlZmluZSBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSAgICAgICAgICgweDAwMjQpCiAKIAogLyogTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGRhdGEgKi8KQEAgLTc5Myw2ICs4MDksNyBAQAogICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdDsKIAogLyogdmFsdWVzIGZvciB0aGUgRXhwU3RhdHVzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgICAgICAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRCAgICAgICAgICAgICAgICAgICAgICAgICgweDAxKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PVF9SRVNQT05ESU5HICAgICAgICAgICAgICAgKDB4MDIpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfUkVTUE9ORElORyAgICAgICAgICAgICAgICAgICAoMHgwMykKQEAgLTg3OCw2ICs4OTUsNDQgQEAKICAqICovCiAKIAorLyogSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfSEJEX1BIWV9TQVMgeworICAgIFU4ICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgTmVnb3RpYXRlZExpbmtSYXRlOyAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICBJbml0aWFsRnJhbWVbMjhdOyAgICAgICAgICAgLyogMHgwOCAqLworfSBNUEkyX0VWRU5UX0hCRF9QSFlfU0FTLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfSEJEX1BIWV9TQVMsCisgIE1waTJFdmVudEhiZFBoeVNhc190LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudEhiZFBoeVNhc190OworCisvKiB2YWx1ZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9TQVNfRkxBR1NfRlJBTUVfVkFMSUQgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9TQVNfRkxBR1NfU0FUQV9GUkFNRSAgICAgICAgICgweDAxKQorCisvKiB1c2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8gZGVmaW5lcyBmcm9tIG1waTJfY25mZy5oIGZvcgorICogdGhlIE5lZ290aWF0ZWRMaW5rUmF0ZSBmaWVsZCAqLworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SIHsKKyAgICBNUEkyX0VWRU5UX0hCRF9QSFlfU0FTICAgICAgU2FzOworfSBNUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IsCisgIE1waTJFdmVudEhiZERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnRIYmREZXNjcmlwdG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfSEJEX1BIWSB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlOyAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgwNCAqLworICAgIE1QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IgICBEZXNjcmlwdG9yOyAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFksCisgIE1waTJFdmVudERhdGFIYmRQaHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhTXBpMkV2ZW50RGF0YUhiZFBoeV90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBEZXNjcmlwdG9yVHlwZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9EVF9TQVMgICAgICAgICAgICAgICAoMHgwMSkKKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFdmVudEFjayBtZXNzYWdlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTEyNiwxMyArMTE4MSwxNyBAQAogI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfVFlQRV9NQVNLICAgICAgICAgICAgKDB4RjAwMCkKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfU0FTICAgICAgICAgICAgICgweDIwMDApCiAKLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICgweDBGMDApCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0EgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9BICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9UQVJHRVRfSU5JVElBVE9SX1NDU0kgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9JUl9TQ1NJICAgICAgICAgICAgICAgICAoMHgwNzAwKQorCiAKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV9NQVNLICAgICAgICAgICgweDAwRkYpCiAvKiBTQVMgKi8KLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMTA4X1NBUyAgICAgICgweDAwMTApCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjIwOF9TQVMgICAgICAoMHgwMDExKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIxMDhfU0FTICAgICAgKDB4MDAxMykKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMjA4X1NBUyAgICAgICgweDAwMTQpCiAKIC8qIHVzZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MXyBkZWZpbmVzIGZvciBQcm90b2NvbEZsYWdzIGZpZWxkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKaW5kZXggOGE0MmIxMy4uMmQ4YWVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTZXJpYWwgQXR0YWNoZWQgU0NTSSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwogICogIENyZWF0aW9uIERhdGU6ICBGZWJydWFyeSA5LCAyMDA3CiAgKgotICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMDIKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjAzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTgsNiArMTgsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgogICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKICAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjAzICBDaGFuZ2VkIHRoZSB0eXBlIG9mIFNHTCBpbiBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVAorICogICAgICAgICAgICAgICAgICAgICAgdG8gTVBJMl9TR0VfSU9fVU5JT04gc2luY2UgaXQgc3VwcG9ydHMgY2hhaW5lZCBTR0xzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMTYwLDcgKzE2Miw3IEBACiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDE0ICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAvKiAweDE4ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZJU1syMF07ICAgICAvKiAweDFDICovCi0gICAgTVBJMl9TSU1QTEVfU0dFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgTVBJMl9TR0VfSU9fVU5JT04gICAgICAgU0dMOyAgICAgICAgICAgICAgICAvKiAweDIwICovCiB9IE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNULAogICBNcGkyU2F0YVBhc3N0aHJvdWdoUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXRhUGFzc3Rocm91Z2hSZXF1ZXN0X3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggODlkMDI0MC4uODhlNmVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTEwNyw4ICsxMDcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJzZXR0aW5nIGxvZ2dpbmdfbGV2ZWwoMHglMDh4KVxuIiwKLQkJCQltcHQyc2FzX2Z3ZmF1bHRfZGVidWcpOworCXByaW50ayhLRVJOX0lORk8gInNldHRpbmcgZndmYXVsdF9kZWJ1ZyglZClcbiIsIG1wdDJzYXNfZndmYXVsdF9kZWJ1Zyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZtcHQyc2FzX2lvY19saXN0LCBsaXN0KQogCQlpb2MtPmZ3ZmF1bHRfZGVidWcgPSBtcHQyc2FzX2Z3ZmF1bHRfZGVidWc7CiAJcmV0dXJuIDA7CkBAIC0xMjIyLDYgKzEyMjEsOCBAQAogCXUzMiBtZW1hcF9zejsKIAl1MzIgcGlvX3N6OwogCWludCBpLCByID0gMDsKKwl1NjQgcGlvX2NoaXAgPSAwOworCXU2NCBjaGlwX3BoeXMgPSAwOwogCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLAogCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CkBAIC0xMjU1LDEyICsxMjU2LDEzIEBACiAJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7CiAJCQlpZiAocGlvX3N6KQogCQkJCWNvbnRpbnVlOwotCQkJaW9jLT5waW9fY2hpcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCXBpb19jaGlwID0gKHU2NClwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CiAJCQlwaW9fc3ogPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOwogCQl9IGVsc2UgewogCQkJaWYgKG1lbWFwX3N6KQogCQkJCWNvbnRpbnVlOwogCQkJaW9jLT5jaGlwX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQljaGlwX3BoeXMgPSAodTY0KWlvYy0+Y2hpcF9waHlzOwogCQkJbWVtYXBfc3ogPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOwogCQkJaW9jLT5jaGlwID0gaW9yZW1hcChpb2MtPmNoaXBfcGh5cywgbWVtYXBfc3opOwogCQkJaWYgKGlvYy0+Y2hpcCA9PSBOVUxMKSB7CkBAIC0xMjgwLDEwICsxMjgyLDEwIEBACiAJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBJUlEgJWRcbiIsCiAJICAgIGlvYy0+bmFtZSwgICgoaW9jLT5tc2l4X2VuYWJsZSkgPyAiUENJLU1TSS1YIGVuYWJsZWQiIDoKIAkgICAgIklPLUFQSUMgZW5hYmxlZCIpLCBpb2MtPnBjaV9pcnEpOwotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb21lbSgweCVseCksIG1hcHBlZCgweCVwKSwgc2l6ZSglZClcbiIsCi0JICAgIGlvYy0+bmFtZSwgaW9jLT5jaGlwX3BoeXMsIGlvYy0+Y2hpcCwgbWVtYXBfc3opOwotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb3BvcnQoMHglbHgpLCBzaXplKCVkKVxuIiwKLQkgICAgaW9jLT5uYW1lLCBpb2MtPnBpb19jaGlwLCBwaW9fc3opOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb21lbSgweCUwMTZsbHgpLCBtYXBwZWQoMHglcCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpY2hpcF9waHlzLCBpb2MtPmNoaXAsIG1lbWFwX3N6KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9wb3J0KDB4JTAxNmxseCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGlvX2NoaXAsIHBpb19zeik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzU3Myw2ICszNTc1LDggQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvYy0+cmVzZXRfd3EpOwogCisJaW9jLT5md2ZhdWx0X2RlYnVnID0gbXB0MnNhc19md2ZhdWx0X2RlYnVnOworCiAJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAltdXRleF9pbml0KCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CiAJaW9jLT5iYXNlX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCBiYjRmMTQ2NS4uZTE4YjA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTY5LDEwICs2OSwxMCBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAzLjEwMC4wMy4wMCIKLSNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMworI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDQuMTAwLjAxLjAwIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTA0CiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCi0jZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDMKKyNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMQogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKQEAgLTMyMyw2ICszMjMsNyBAQAogICogQGRldmljZV9pbmZvOiBiaXRmaWVsZCBwcm92aWRlcyBkZXRhaWxlZCBpbmZvIGFib3V0IHRoZSBoaWRkZW4gY29tcG9uZW50cwogICogQG51bV9wZHM6IG51bWJlciBvZiBoaWRkZW4gcmFpZCBjb21wb25lbnRzCiAgKiBAcmVzcG9uZGluZzogdXNlZCBpbiBfc2NzaWhfcmFpZF9kZXZpY2VfbWFya19yZXNwb25kaW5nCisgKiBAcGVyY2VudF9jb21wbGV0ZTogcmVzeW5jIHBlcmNlbnQgY29tcGxldGUKICAqLwogc3RydWN0IF9yYWlkX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMzM2LDYgKzMzNyw3IEBACiAJdTMyCWRldmljZV9pbmZvOwogCXU4CW51bV9wZHM7CiAJdTgJcmVzcG9uZGluZzsKKwl1OAlwZXJjZW50X2NvbXBsZXRlOwogfTsKIAogLyoqCkBAIC00NjQsNyArNDY2LDYgQEAKICAqIEBwZGV2OiBwY2kgcGRldiBvYmplY3QKICAqIEBjaGlwOiBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIHNwYWNlCiAgKiBAY2hpcF9waHlzOiBwaHlzaWNhbCBhZGRyc3MgcHJpb3IgdG8gbWFwcGluZwotICogQHBpb19jaGlwOiBJL08gbWFwcGVkIHJlZ2lzdGVyIHNwYWNlCiAgKiBAbG9nZ2luZ19sZXZlbDogc2VlIG1wdDJzYXNfZGVidWcuaAogICogQGZ3ZmF1bHRfZGVidWc6IGRlYnVnaW5nIEZXIHRpbWVvdXRzCiAgKiBAaXJfZmlybXdhcmU6IElSIGZpcm13YXJlIHByZXNlbnQKQEAgLTU4Nyw4ICs1ODgsNyBAQAogCWNoYXIJCXRtcF9zdHJpbmdbTVBUX1NUUklOR19MRU5HVEhdOwogCXN0cnVjdCBwY2lfZGV2CSpwZGV2OwogCU1waTJTeXN0ZW1JbnRlcmZhY2VSZWdzX3QgX19pb21lbSAqY2hpcDsKLQl1bnNpZ25lZCBsb25nCWNoaXBfcGh5czsKLQl1bnNpZ25lZCBsb25nCXBpb19jaGlwOworCXJlc291cmNlX3NpemVfdAljaGlwX3BoeXM7CiAJaW50CQlsb2dnaW5nX2xldmVsOwogCWludAkJZndmYXVsdF9kZWJ1ZzsKIAl1OAkJaXJfZmlybXdhcmU7CkBAIC04NTMsNiArODUzLDggQEAKICAgICAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOworaW50IG1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKICAgICAqbXBpX3JlcGx5LCBNcGkySU9DUGFnZThfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggNTk0YTM4OS4uNDExYzI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0zMjQsNyArMzI0LDkgQEAKIAkJaWYgKHIgIT0gMCkKIAkJCWdvdG8gb3V0OwogCQlpZiAobXBpX3JlcXVlc3QtPkFjdGlvbiA9PQotCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVCkgeworCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVCB8fAorCQkgICAgbXBpX3JlcXVlc3QtPkFjdGlvbiA9PQorCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfTlZSQU0pIHsKIAkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC0+UGFnZUJ1ZmZlclNHRSwKIAkJCSAgICBNUFQyX0NPTkZJR19DT01NT05fV1JJVEVfU0dMRkxBR1MgfCBtZW0uc3osCiAJCQkgICAgbWVtLnBhZ2VfZG1hKTsKQEAgLTg4Miw3ICs4ODQsNyBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMSAtIG9idGFpbiBzYXMgaW91bml0IHBhZ2UgMAorICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxIC0gb2J0YWluIHNhcyBpb3VuaXQgcGFnZSAxCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQogICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKQEAgLTkwNyw3ICs5MDksNyBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOwogCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKIAkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwpAQCAtOTIyLDYgKzkyNCw0OSBAQAogfQogCiAvKioKKyAqIG1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMSAtIHNlbmQgc2FzIGlvdW5pdCBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHN6OiBzaXplIG9mIGJ1ZmZlciBwYXNzZWQgaW4gY29uZmlnX3BhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGNhbGwgY29uZmlnX2dldF9udW1iZXJfaGJhX3BoeXMgcHJpb3IgdG8KKyAqIHRoaXMgZnVuY3Rpb24sIHNvIGVub3VnaCBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBjb25maWdfcGFnZS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7CisJX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX05WUkFNOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLCBzeik7Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKICAqIG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAgLSBvYnRhaW4gZXhwYW5kZXIgcGFnZSAwCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggODRhMTI0Zi4uZmE5YmY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC04OTEsNiArODkxLDcgQEAKIAogIGlzc3VlX2hvc3RfcmVzZXQ6CiAJaWYgKGlzc3VlX3Jlc2V0KSB7CisJCXJldCA9IC1FTk9EQVRBOwogCQlpZiAoKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAogCQkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09CiAJCSAgICBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSCkpIHsKQEAgLTIyMDIsMTQgKzIyMDMsMTAgQEAKIAlrYXJnLmRhdGFfb3V0X3NpemUgPSBrYXJnMzIuZGF0YV9vdXRfc2l6ZTsKIAlrYXJnLm1heF9zZW5zZV9ieXRlcyA9IGthcmczMi5tYXhfc2Vuc2VfYnl0ZXM7CiAJa2FyZy5kYXRhX3NnZV9vZmZzZXQgPSBrYXJnMzIuZGF0YV9zZ2Vfb2Zmc2V0OwotCW1lbWNweSgma2FyZy5yZXBseV9mcmFtZV9idWZfcHRyLCAma2FyZzMyLnJlcGx5X2ZyYW1lX2J1Zl9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOwotCW1lbWNweSgma2FyZy5kYXRhX2luX2J1Zl9wdHIsICZrYXJnMzIuZGF0YV9pbl9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuZGF0YV9vdXRfYnVmX3B0ciwgJmthcmczMi5kYXRhX291dF9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuc2Vuc2VfZGF0YV9wdHIsICZrYXJnMzIuc2Vuc2VfZGF0YV9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOworCWthcmcucmVwbHlfZnJhbWVfYnVmX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLnJlcGx5X2ZyYW1lX2J1Zl9wdHIpOworCWthcmcuZGF0YV9pbl9idWZfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuZGF0YV9pbl9idWZfcHRyKTsKKwlrYXJnLmRhdGFfb3V0X2J1Zl9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5kYXRhX291dF9idWZfcHRyKTsKKwlrYXJnLnNlbnNlX2RhdGFfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuc2Vuc2VfZGF0YV9wdHIpOwogCXN0YXRlID0gKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IE5PTl9CTE9DS0lORyA6IEJMT0NLSU5HOwogCXJldHVybiBfY3RsX2RvX21wdF9jb21tYW5kKGlvYywga2FyZywgJnVhcmctPm1mLCBzdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWZhYmVhMS4uYzdlYzNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZF9jbGFzcy5oPgogCiAjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCiAKQEAgLTEzMyw2ICsxMzQsOSBAQAogCXZvaWQJCQkqZXZlbnRfZGF0YTsKIH07CiAKKy8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFpZF90ZW1wbGF0ZSAqbXB0MnNhc19yYWlkX3RlbXBsYXRlOworCiAvKioKICAqIHN0cnVjdCBfc2NzaV9pb190cmFuc2ZlciAtIHNjc2kgaW8gdHJhbnNmZXIKICAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKQEAgLTEzMDUsNyArMTMwOSw2IEBACiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7Ci0Jc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3NpX2RldmljZSksIEdGUF9LRVJORUwpOwpAQCAtMTMzMiwyMSArMTMzNSw4IEBACiAJCWlmIChyYWlkX2RldmljZSkKIAkJCXJhaWRfZGV2aWNlLT5zZGV2ID0gc2RldjsgLyogcmFpZCBpcyBzaW5nbGUgbHVuICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCS8qIHNldCBUTFIgYml0IGZvciBTU1AgZGV2aWNlcyAqLwotCQlpZiAoIShpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCi0JCSAgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUikpCi0JCQlnb3RvIG91dDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCi0JCSAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCWlmIChzYXNfZGV2aWNlICYmIHNhc19kZXZpY2UtPmRldmljZV9pbmZvICYKLQkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpCi0JCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgfD0gTVBUX0RFVklDRV9UTFJfT047CiAJfQogCi0gb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0xNDE5LDYgKzE0MDksMTQwIEBACiB9CiAKIC8qKgorICogX3Njc2loX2lzX3JhaWQgLSByZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIGRldmljZSBpcyByYWlkIHZvbHVtZQorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIGludAorX3Njc2loX2lzX3JhaWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gKHNkZXYtPmNoYW5uZWwgPT0gUkFJRF9DSEFOTkVMKSA/IDEgOiAwOworfQorCisvKioKKyAqIF9zY3NpaF9nZXRfcmVzeW5jIC0gZ2V0IHJhaWQgdm9sdW1lIHJlc3luYyBwZXJjZW50IGNvbXBsZXRlCisgKiBAZGV2IHRoZSBkZXZpY2Ugc3RydWN0IG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2dldF9yZXN5bmMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyUmFpZFZvbFBhZ2UwX3Qgdm9sX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTMyIHZvbHVtZV9zdGF0dXNfZmxhZ3M7CisJdTggcGVyY2VudF9jb21wbGV0ZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChpb2MsIHNkZXYtPmlkLAorCSAgICBzZGV2LT5jaGFubmVsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmICghcmFpZF9kZXZpY2UpCisJCWdvdG8gb3V0OworCisJaWYgKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmdm9sX3BnMCwKKwkgICAgIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkgICAgIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UwX3QpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJdm9sdW1lX3N0YXR1c19mbGFncyA9IGxlMzJfdG9fY3B1KHZvbF9wZzAuVm9sdW1lU3RhdHVzRmxhZ3MpOworCWlmICh2b2x1bWVfc3RhdHVzX2ZsYWdzICYgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19SRVNZTkNfSU5fUFJPR1JFU1MpCisJCXBlcmNlbnRfY29tcGxldGUgPSByYWlkX2RldmljZS0+cGVyY2VudF9jb21wbGV0ZTsKKyBvdXQ6CisJcmFpZF9zZXRfcmVzeW5jKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSwgZGV2LCBwZXJjZW50X2NvbXBsZXRlKTsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X3N0YXRlIC0gZ2V0IHJhaWQgdm9sdW1lIGxldmVsCisgKiBAZGV2IHRoZSBkZXZpY2Ugc3RydWN0IG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2dldF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCU1waTJSYWlkVm9sUGFnZTBfdCB2b2xfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MzIgdm9sc3RhdGU7CisJZW51bSByYWlkX3N0YXRlIHN0YXRlID0gUkFJRF9TVEFURV9VTktOT1dOOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQoaW9jLCBzZGV2LT5pZCwKKwkgICAgc2Rldi0+Y2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJhaWRfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgJnZvbF9wZzAsCisJICAgICBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJICAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXZvbHN0YXRlID0gbGUzMl90b19jcHUodm9sX3BnMC5Wb2x1bWVTdGF0dXNGbGFncyk7CisJaWYgKHZvbHN0YXRlICYgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19SRVNZTkNfSU5fUFJPR1JFU1MpIHsKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX1JFU1lOQ0lORzsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoICh2b2xfcGcwLlZvbHVtZVN0YXRlKSB7CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09QVElNQUw6CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORToKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSAgTVBJMl9SQUlEX1ZPTF9TVEFURV9ERUdSQURFRDoKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX0RFR1JBREVEOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfRkFJTEVEOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9NSVNTSU5HOgorCQlzdGF0ZSA9IFJBSURfU1RBVEVfT0ZGTElORTsKKwkJYnJlYWs7CisJfQorIG91dDoKKwlyYWlkX3NldF9zdGF0ZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUsIGRldiwgc3RhdGUpOworfQorCisvKioKKyAqIF9zY3NpaF9zZXRfbGV2ZWwgLSBzZXQgcmFpZCBsZXZlbAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHJhaWRfZGV2aWNlOiByYWlkX2RldmljZSBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZXRfbGV2ZWwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSkKK3sKKwllbnVtIHJhaWRfbGV2ZWwgbGV2ZWwgPSBSQUlEX0xFVkVMX1VOS05PV047CisKKwlzd2l0Y2ggKHJhaWRfZGV2aWNlLT52b2x1bWVfdHlwZSkgeworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQwOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDEwOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMTA7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxRToKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzFFOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMToKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzE7CisJCWJyZWFrOworCX0KKworCXJhaWRfc2V0X2xldmVsKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSwgJnNkZXYtPnNkZXZfZ2VuZGV2LCBsZXZlbCk7Cit9CisKKy8qKgogICogX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzIC0gdm9sdW1lIGNhcGFiaWxpdGllcwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc2FzX2RldmljZTogdGhlIHJhaWRfZGV2aWNlIG9iamVjdApAQCAtMTQ3OSw2ICsxNjAzLDMyIEBACiB9CiAKIC8qKgorICogX3Njc2loX2VuYWJsZV90bHIgLSBzZXR0aW5nIFRMUiBmbGFncworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogRW5hYmxpbmcgVHJhbnNhY3Rpb24gTGF5ZXIgUmV0cmllcyBmb3IgdGFwZSBkZXZpY2VzIHdoZW4KKyAqIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudAorICoKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9lbmFibGVfdGxyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCS8qIG9ubHkgZm9yIFRBUEUgKi8KKwlpZiAoc2Rldi0+dHlwZSAhPSBUWVBFX1RBUEUpCisJCXJldHVybjsKKworCWlmICghKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUikpCisJCXJldHVybjsKKworCXNhc19lbmFibGVfdGxyKHNkZXYpOworCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIlRMUiAlc1xuIiwKKwkgICAgc2FzX2lzX3Rscl9lbmFibGVkKHNkZXYpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJcmV0dXJuOworCit9CisKKy8qKgogICogX3Njc2loX3NsYXZlX2NvbmZpZ3VyZSAtIGRldmljZSBjb25maWd1cmUgcm91dGluZS4KICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqCkBAIC0xNTc0LDYgKzE3MjQsOCBAQAogCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKIAkJICAgIHJhaWRfZGV2aWNlLT5udW1fcGRzLCBkcyk7CiAJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKKwkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCQlfc2NzaWhfc2V0X2xldmVsKHNkZXYsIHJhaWRfZGV2aWNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjIxLDggKzE3NzMsMTAgQEAKIAogCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKIAotCWlmIChzc3BfdGFyZ2V0KQorCWlmIChzc3BfdGFyZ2V0KSB7CiAJCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNkZXYpOworCQlfc2NzaWhfZW5hYmxlX3Rscihpb2MsIHNkZXYpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkwOCw4ICszMDYyLDkgQEAKIAogCX0gZWxzZQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0KLQlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSkKKwkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZSAqLworCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCisJICAgIHNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpKQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKIAogCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCwgc2NtZCk7CkBAIC0zMjk4LDEwICszNDUzLDEyIEBACiAJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlSW5mbykgJiAweEZGOwogCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaykgewogCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKys7Ci0JCWlmICgoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pICYmCi0JCSAgICByZXNwb25zZV9jb2RlID09IE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKQotCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICY9Ci0JCQkgICAgfk1QVF9ERVZJQ0VfVExSX09OOworCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCisJCXNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpICYmCisJCSAgICByZXNwb25zZV9jb2RlID09IE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKSB7CisJCQlzYXNfZGlzYWJsZV90bHIoc2NtZC0+ZGV2aWNlKTsKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NtZC0+ZGV2aWNlLCAiVExSIGRpc2FibGVkXG4iKTsKKwkJfQogCX0KIAogCXhmZXJfY250ID0gbGUzMl90b19jcHUobXBpX3JlcGx5LT5UcmFuc2ZlckNvdW50KTsKQEAgLTUxNzAsMTEgKzUzMjcsMzMgQEAKIF9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogeworCU1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQogCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAotCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJICAgICBldmVudF9kYXRhKTsKICNlbmRpZgorCisJLyogY29kZSBhZGRlZCBmb3IgcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCWlmIChldmVudF9kYXRhLT5SQUlET3BlcmF0aW9uID09IE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQykgeworCisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlZvbERldkhhbmRsZSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJCWlmICghcmFpZF9kZXZpY2UpCisJCQlyZXR1cm47CisKKwkJaWYgKGV2ZW50X2RhdGEtPlJBSURPcGVyYXRpb24gPT0gTVBJMl9FVkVOVF9JUl9SQUlET1BfUkVTWU5DKQorCQkJcmFpZF9kZXZpY2UtPnBlcmNlbnRfY29tcGxldGUgPQorCQkJICAgIGV2ZW50X2RhdGEtPlBlcmNlbnRDb21wbGV0ZTsKKwl9CiB9CiAKIC8qKgpAQCAtNTk5OCw2ICs2MTc3LDggQEAKIAlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXN0cnVjdCBfc2FzX25vZGUgKmV4cGFuZGVyX3NpYmxpbmc7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsICpuZXh0OworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTYwMTEsNiArNjE5MiwyMSBAQAogCWlmICh3cSkKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCisJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCisJICAgIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9CisJCQkgICAgcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmRlbGV0ZWQgPSAxOworCQkJc2NzaV9yZW1vdmVfdGFyZ2V0KCZyYWlkX2RldmljZS0+c3RhcmdldC0+ZGV2KTsKKwkJfQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVtb3ZpbmcgaGFuZGxlKDB4JTA0eCksIHd3aWQiCisJCSAgICAiKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSByYWlkX2RldmljZS0+d3dpZCk7CisJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJfQorCiAJLyogZnJlZSBwb3J0cyBhdHRhY2hlZCB0byB0aGUgc2FzX2hvc3QgKi8KICByZXRyeV9hZ2FpbjoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKQEAgLTYzNzMsNiArNjU2OSwxMyBAQAogI2VuZGlmCiB9OwogCisvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHJhaWRfZnVuY3Rpb25fdGVtcGxhdGUgbXB0MnNhc19yYWlkX2Z1bmN0aW9ucyA9IHsKKwkuY29va2llCQk9ICZzY3NpaF9kcml2ZXJfdGVtcGxhdGUsCisJLmlzX3JhaWQJPSBfc2NzaWhfaXNfcmFpZCwKKwkuZ2V0X3Jlc3luYwk9IF9zY3NpaF9nZXRfcmVzeW5jLAorCS5nZXRfc3RhdGUJPSBfc2NzaWhfZ2V0X3N0YXRlLAorfTsKIAogLyoqCiAgKiBfc2NzaWhfaW5pdCAtIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgZHJpdmVyLgpAQCAtNjM5Miw2ICs2NTk1LDEyIEBACiAJICAgIHNhc19hdHRhY2hfdHJhbnNwb3J0KCZtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnMpOwogCWlmICghbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpCiAJCXJldHVybiAtRU5PREVWOworCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwltcHQyc2FzX3JhaWRfdGVtcGxhdGUgPSByYWlkX2NsYXNzX2F0dGFjaCgmbXB0MnNhc19yYWlkX2Z1bmN0aW9ucyk7CisJaWYgKCFtcHQyc2FzX3JhaWRfdGVtcGxhdGUpIHsKKwkJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcigpOwogCkBAIC02NDI2LDggKzY2MzUsMTEgQEAKIAltcHQyc2FzX2N0bF9pbml0KCk7CiAKIAllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJCXJhaWRfY2xhc3NfcmVsZWFzZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUpOwogCQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTY0NDUsNyArNjY1Nyw4IEBACiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7CiAKLQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCW1wdDJzYXNfY3RsX2V4aXQoKTsKKwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoc2NzaV9pb19jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGJhc2VfY2JfaWR4KTsKQEAgLTY0NTcsNyArNjY3MCwxMCBAQAogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fdHJfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3Nhc19jb250cm9sX2NiX2lkeCk7CiAKLQltcHQyc2FzX2N0bF9leGl0KCk7CisJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCXJhaWRfY2xhc3NfcmVsZWFzZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUpOworCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisKIH0KIAogbW9kdWxlX2luaXQoX3Njc2loX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggM2E4Mjg3Mi4uNzg5ZjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC04NTUsNiArODU1LDE3IEBACiAJcmV0dXJuIHNob3N0X3ByaXYoc2hvc3QpOwogfQogCitzdGF0aWMgc3RydWN0IF9zYXNfcGh5ICoKK190cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5czsgaSsrKQorCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgPT0gcGh5KQorCQkJcmV0dXJuKCZpb2MtPnNhc19oYmEucGh5W2ldKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBfdHJhbnNwb3J0X2dldF9saW5rZXJyb3JzIC0KICAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdApAQCAtODcwLDE0ICs4ODEsOCBAQAogCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNQaHlQYWdlMV90IHBoeV9wZzE7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKLQkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKLQkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKLQkJCWNvbnRpbnVlOwotCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOwotCX0KKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOwogCiAJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTcxLDE0ICs5NzYsOCBAQAogCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKLQlpbnQgaTsKIAotCWZvciAoaSA9IDAsIG1wdDJzYXNfcGh5ID0gTlVMTDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyAmJgotCSAgICAhbXB0MnNhc19waHk7IGkrKykgewotCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgIT0gcGh5KQotCQkJY29udGludWU7Ci0JCW1wdDJzYXNfcGh5ID0gJmlvYy0+c2FzX2hiYS5waHlbaV07Ci0JfQorCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CiAKIAlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDA2LDYgKzEwMDUsMTczIEBACiB9CiAKIC8qKgorICogX3RyYW5zcG9ydF9waHlfZW5hYmxlIC0gZW5hYmxlL2Rpc2FibGUgcGh5cworICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKiBAZW5hYmxlOiBlbmFibGUgcGh5IHdoZW4gdHJ1ZQorICoKKyAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK190cmFuc3BvcnRfcGh5X2VuYWJsZShzdHJ1Y3Qgc2FzX3BoeSAqcGh5LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzejsKKwlpbnQgcmMgPSAwOworCisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHNhc19pb3VuaXQgcGFnZSAxICovCisJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTFfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzICoKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXQxUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcxLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZW5hYmxlKQorCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQkgICAgJj0gfk1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19QSFlfRElTQUJMRTsKKwllbHNlCisJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW21wdDJzYXNfcGh5LT5waHlfaWRdLlBoeUZsYWdzCisJCSAgICB8PSBNUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEU7CisKKwltcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCBzYXNfaW91bml0X3BnMSwgc3opOworCisgb3V0OgorCWtmcmVlKHNhc19pb3VuaXRfcGcxKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9waHlfc3BlZWQgLSBzZXQgcGh5IG1pbi9tYXggbGluayByYXRlcworICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKiBAcmF0ZXM6IHJhdGVzIGRlZmluZWQgaW4gc2FzX3BoeV9saW5rcmF0ZXMKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfdHJhbnNwb3J0X3BoeV9zcGVlZChzdHJ1Y3Qgc2FzX3BoeSAqcGh5LCBzdHJ1Y3Qgc2FzX3BoeV9saW5rcmF0ZXMgKnJhdGVzKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMlNhc1BoeVBhZ2UwX3QgcGh5X3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJdTE2IHN6OworCWludCBpOworCWludCByYyA9IDA7CisKKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOworCisJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyYXRlcy0+bWluaW11bV9saW5rcmF0ZSkKKwkJcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPSBwaHktPm1pbmltdW1fbGlua3JhdGU7CisJZWxzZSBpZiAocmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPCBwaHktPm1pbmltdW1fbGlua3JhdGVfaHcpCisJCXJhdGVzLT5taW5pbXVtX2xpbmtyYXRlID0gcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3OworCisJaWYgKCFyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSkKKwkJcmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPSBwaHktPm1heGltdW1fbGlua3JhdGU7CisJZWxzZSBpZiAocmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPiBwaHktPm1heGltdW1fbGlua3JhdGVfaHcpCisJCXJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID0gcGh5LT5tYXhpbXVtX2xpbmtyYXRlX2h3OworCisJLyogc2FzX2lvdW5pdCBwYWdlIDEgKi8KKwlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMV90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgorCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QpKTsKKwlzYXNfaW91bml0X3BnMSA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghc2FzX2lvdW5pdF9wZzEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgc2FzX2lvdW5pdF9wZzEsIHN6KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykgeworCQlpZiAobXB0MnNhc19waHktPnBoeV9pZCAhPSBpKSB7CisJCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVtpXS5NYXhNaW5MaW5rUmF0ZSA9CisJCQkgICAgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5LT5taW5pbXVtX2xpbmtyYXRlICsKKwkJCSAgICAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHktPm1heGltdW1fbGlua3JhdGUgPDwgNCkpOworCQl9IGVsc2UgeworCQkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbaV0uTWF4TWluTGlua1JhdGUgPQorCQkJICAgIChyYXRlcy0+bWluaW11bV9saW5rcmF0ZSArCisJCQkgICAgKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlIDw8IDQpKTsKKwkJfQorCX0KKworCWlmIChtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCBzYXNfaW91bml0X3BnMSwKKwkgICAgc3opKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbGluayByZXNldCAqLworCV90cmFuc3BvcnRfcGh5X3Jlc2V0KHBoeSwgMCk7CisKKwkvKiByZWFkIHBoeSBwYWdlIDAsIHRoZW4gdXBkYXRlIHRoZSByYXRlcyBpbiB0aGUgc2FzIHRyYW5zcG9ydCBwaHkgKi8KKwlpZiAoIW1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcwKGlvYywgJm1waV9yZXBseSwgJnBoeV9wZzAsCisJICAgIG1wdDJzYXNfcGh5LT5waHlfaWQpKSB7CisJCXBoeS0+bWluaW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5Qcm9ncmFtbWVkTGlua1JhdGUgJiBNUEkyX1NBU19QUkFURV9NSU5fUkFURV9NQVNLKTsKKwkJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSA+PiA0KTsKKwkJcGh5LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJCSAgICBwaHlfcGcwLk5lZ290aWF0ZWRMaW5rUmF0ZSAmCisJCSAgICBNUEkyX1NBU19ORUdfTElOS19SQVRFX01BU0tfUEhZU0lDQUwpOworCX0KKworIG91dDoKKwlrZnJlZShzYXNfaW91bml0X3BnMSk7CisJcmV0dXJuIHJjOworfQorCisKKy8qKgogICogX3RyYW5zcG9ydF9zbXBfaGFuZGxlciAtIHRyYW5zcG9ydCBwb3J0YWwgZm9yIHNtcCBwYXNzdGhydQogICogQHNob3N0OiBzaG9zdCBvYmplY3QKICAqIEBycGh5OiBzYXMgdHJhbnNwb3J0IHJwaHkgb2JqZWN0CkBAIC0xMjA3LDYgKzEzNzMsOCBAQAogCS5nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIgPSBfdHJhbnNwb3J0X2dldF9lbmNsb3N1cmVfaWRlbnRpZmllciwKIAkuZ2V0X2JheV9pZGVudGlmaWVyCT0gX3RyYW5zcG9ydF9nZXRfYmF5X2lkZW50aWZpZXIsCiAJLnBoeV9yZXNldAkJPSBfdHJhbnNwb3J0X3BoeV9yZXNldCwKKwkucGh5X2VuYWJsZQkJPSBfdHJhbnNwb3J0X3BoeV9lbmFibGUsCisJLnNldF9waHlfc3BlZWQJCT0gX3RyYW5zcG9ydF9waHlfc3BlZWQsCiAJLnNtcF9oYW5kbGVyCQk9IF90cmFuc3BvcnRfc21wX2hhbmRsZXIsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKaW5kZXggYzJmMTAzMi4uZjgwYzFkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTY1NCw3ICs2NTQsNyBAQAogCX0KIAljaGlwID0gJnBtODAwMV9jaGlwc1tlbnQtPmRyaXZlcl9kYXRhXTsKIAlTSE9TVF9UT19TQVNfSEEoc2hvc3QpID0KLQkJa2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNhc19oYV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHNhc19oYV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIVNIT1NUX1RPX1NBU19IQShzaG9zdCkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9ob3N0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggYjZmMWVmOS4uOWIxYzE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJc2NzaV9kZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwogCQlibGtfcXVldWVfcnFfdGltZW91dChzY3NpX2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkgICAgIFBNQ1JBSURfVlNFVF9JT19USU1FT1VUKTsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNjc2lfZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2NzaV9kZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJICAgICAgUE1DUkFJRF9WU0VUX01BWF9TRUNUT1JTKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCmluZGV4IDgzNzFkOTEuLjQ5YWM0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwpAQCAtMTY0MCw4ICsxNjQwLDEwIEBACiAJdWludDE2X3QgbWJbTUFJTEJPWF9SRUdJU1RFUl9DT1VOVF0sIGk7CiAJaW50IGVycjsKIAorCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsCiAJCQkgICAgICAgJmhhLT5wZGV2LT5kZXYpOworCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBsb2FkIGltYWdlIFwiJXNcIiBlcnIgJWRcbiIsCiAJCSAgICAgICBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwgZXJyKTsKQEAgLTE2OTksOCArMTcwMSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgogCisJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwKIAkJCSAgICAgICAmaGEtPnBkZXYtPmRldik7CisJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgaW1hZ2UgXCIlc1wiIGVyciAlZFxuIiwKIAkJICAgICAgIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggM2E5ZjViMi4uOTBkMWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xMSw3ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogc3RhdGljIGludCBxbGEyNHh4X3Zwb3J0X2Rpc2FibGUoc3RydWN0IGZjX3Zwb3J0ICosIGJvb2wpOwotCitzdGF0aWMgaW50IHFsYTg0eHhfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKK2ludCBxbGE4NHh4X3Jlc2V0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCAqKTsKK3N0YXRpYyBpbnQgcWxhODR4eF9tZ210X2NtZChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHN0cnVjdCBmY19ic2dfam9iICopOwogLyogU1lTRlMgYXR0cmlidXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHNzaXplX3QKQEAgLTExNjgsNiArMTE3MCwyOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAorcWxhMjR4eF84NHh4X2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcnZhbCA9IFFMQV9TVUNDRVNTOworCXVpbnQxNl90IHN0YXR1c1syXSA9IHswLCAwfTsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoSVNfUUxBODRYWChoYSkgJiYgaGEtPmNzODR4eCkgeworCQlpZiAoaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbiA9PSAwKSB7CisJCQlydmFsID0gcWxhODR4eF92ZXJpZnlfY2hpcCh2aGEsIHN0YXR1cyk7CisJfQorCisJaWYgKChydmFsID09IFFMQV9TVUNDRVNTKSAmJiAoc3RhdHVzWzBdID09IDApKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCSh1aW50MzJfdCloYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uKTsKKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAogcWxhMngwMF9tcGlfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAgICAgY2hhciAqYnVmKQogewpAQCAtMTI4MSw2ICsxMzA1LDggQEAKIAkJICAgcWxhMngwMF9vcHRyb21fZmNvZGVfdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvcHRyb21fZndfdmVyc2lvbiwgU19JUlVHTywgcWxhMngwMF9vcHRyb21fZndfdmVyc2lvbl9zaG93LAogCQkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUig4NHh4X2Z3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTI0eHhfODR4eF9md192ZXJzaW9uX3Nob3csCisJCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRvdGFsX2lzcF9hYm9ydHMsIFNfSVJVR08sIHFsYTJ4MDBfdG90YWxfaXNwX2Fib3J0c19zaG93LAogCQkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihtcGlfdmVyc2lvbiwgU19JUlVHTywgcWxhMngwMF9tcGlfdmVyc2lvbl9zaG93LCBOVUxMKTsKQEAgLTEzMTAsNiArMTMzNiw3IEBACiAJJmRldl9hdHRyX29wdHJvbV9lZmlfdmVyc2lvbiwKIAkmZGV2X2F0dHJfb3B0cm9tX2Zjb2RlX3ZlcnNpb24sCiAJJmRldl9hdHRyX29wdHJvbV9md192ZXJzaW9uLAorCSZkZXZfYXR0cl84NHh4X2Z3X3ZlcnNpb24sCiAJJmRldl9hdHRyX3RvdGFsX2lzcF9hYm9ydHMsCiAJJmRldl9hdHRyX21waV92ZXJzaW9uLAogCSZkZXZfYXR0cl9waHlfdmVyc2lvbiwKQEAgLTE1MDQsOCArMTUzMSw2IEBACiAJCWZjcG9ydC0+dmhhLT5ody0+aXNwX29wcy0+ZmFicmljX2xvZ291dChmY3BvcnQtPnZoYSwKIAkJCWZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAogCQkJZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwotCi0JcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY3BvcnQpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzk1LDYgKzE4MjAsNTgxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEJTRyBzdXBwb3J0IGZvciBFTFMvQ1QgcGFzcyB0aHJvdWdoICovCitpbmxpbmUgc3JiX3QgKgorcWxhMngwMF9nZXRfY3R4X2JzZ19zcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsIHNpemVfdCBzaXplKQoreworCXNyYl90ICpzcDsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHJ1Y3Qgc3JiX2JzZ19jdHggKmN0eDsKKworCXNwID0gbWVtcG9vbF9hbGxvYyhoYS0+c3JiX21lbXBvb2wsIEdGUF9LRVJORUwpOworCWlmICghc3ApCisJCWdvdG8gZG9uZTsKKwljdHggPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghY3R4KSB7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldChzcCwgMCwgc2l6ZW9mKCpzcCkpOworCXNwLT5mY3BvcnQgPSBmY3BvcnQ7CisJc3AtPmN0eCA9IGN0eDsKK2RvbmU6CisJcmV0dXJuIHNwOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfZWxzKHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJZmNfcG9ydF90ICpmY3BvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhOworCXNyYl90ICpzcDsKKwljb25zdCBjaGFyICp0eXBlOworCWludCByZXFfc2dfY250LCByc3Bfc2dfY250OworCWludCBydmFsID0gIChEUklWRVJfRVJST1IgPDwgMTYpOworCXVpbnQxNl90IG5leHRsaWQgPSAwOworCXN0cnVjdCBzcmJfYnNnICplbHM7CisKKwkvKiAgTXVsdGlwbGUgU0cncyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgRUxTIHJlcXVlc3RzICovCisgICAgICAgIGlmIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250ID4gMSB8fAorCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCA+IDEpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJtdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMiCisJCSAgICAiIFtyZXF1ZXN0X3NnX2NudDogJXggcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKTsKKwkJcnZhbCA9IC1FUEVSTTsKKwkJZ290byBkb25lOworICAgICAgICB9CisKKwkvKiBFTFMgcmVxdWVzdCBmb3IgcnBvcnQgKi8KKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfUlBUX0VMUykgeworCQlycG9ydCA9IGJzZ19qb2ItPnJwb3J0OworCQlmY3BvcnQgPSAqKGZjX3BvcnRfdCAqKikgcnBvcnQtPmRkX2RhdGE7CisJCWhvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CisJCXZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJCWhhID0gdmhhLT5odzsKKwkJdHlwZSA9ICJGQ19CU0dfUlBUX0VMUyI7CisKKwkJLyogbWFrZSBzdXJlIHRoZSBycG9ydCBpcyBsb2dnZWQgaW4sCisJCSAqIGlmIG5vdCBwZXJmb3JtIGZhYnJpYyBsb2dpbgorCQkgKi8KKwkJaWYgKHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LCAmbmV4dGxpZCkpIHsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgImZhaWxlZCB0byBsb2dpbiBwb3J0ICUwNlggZm9yIEVMUyBwYXNzdGhydVxuIiwKKwkJCSAgICBmY3BvcnQtPmRfaWQuYjI0KSk7CisJCQlydmFsID0gLUVJTzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwkJaGEgPSB2aGEtPmh3OworCQl0eXBlID0gIkZDX0JTR19IU1RfRUxTX05PTE9HSU4iOworCisJCS8qIEFsbG9jYXRlIGEgZHVtbXkgZmNwb3J0IHN0cnVjdHVyZSwgc2luY2UgZnVuY3Rpb25zCisJCSAqIHByZXBhcmluZyB0aGUgSU9DQiBhbmQgbWFpbGJveCBjb21tYW5kIHJldHJpZXZlcyBwb3J0CisJCSAqIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gZmNwb3J0IHN0cnVjdHVyZS4gRm9yIEhvc3QgYmFzZWQKKwkJICogRUxTIGNvbW1hbmRzIHRoZXJlIHdpbGwgYmUgbm8gZmNwb3J0IHN0cnVjdHVyZSBhbGxvY2F0ZWQKKwkJICovCisJCWZjcG9ydCA9IHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHZoYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZmNwb3J0KSB7CisJCQlydmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgYWxsIHJlcXVpcmVkICBmaWVsZHMgb2YgZmNwb3J0ICovCisJCWZjcG9ydC0+dmhhID0gdmhhOworCQlmY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OworCQlmY3BvcnQtPmRfaWQuYi5hbF9wYSA9CisJCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZFswXTsKKwkJZmNwb3J0LT5kX2lkLmIuYXJlYSA9CisJCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZFsxXTsKKwkJZmNwb3J0LT5kX2lkLmIuZG9tYWluID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzJdOworCQlmY3BvcnQtPmxvb3BfaWQgPQorCQkgICAgKGZjcG9ydC0+ZF9pZC5iLmFsX3BhID09IDB4RkQpID8KKwkJICAgIE5QSF9GQUJSSUNfQ09OVFJPTExFUiA6IE5QSF9GX1BPUlQ7CisJfQorCisJaWYgKCF2aGEtPmZsYWdzLm9ubGluZSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworICAgICAgICByZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIXJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisgICAgICAgIHJzcF9zZ19jbnQgPSBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIXJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKworCWlmICgocmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkgICAgKHJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwkvKiBBbGxvYyBTUkIgc3RydWN0dXJlICovCisJc3AgPSBxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9ic2cpKTsKKwlpZiAoIXNwKSB7CisJCXJ2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwllbHMgPSBzcC0+Y3R4OworCWVscy0+Y3R4LnR5cGUgPQorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfUlBUX0VMUyA/CisJICAgIFNSQl9FTFNfQ01EX1JQVCA6IFNSQl9FTFNfQ01EX0hTVCk7CisJZWxzLT5ic2dfam9iID0gYnNnX2pvYjsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJICAgICJzY3NpKCVsZDoleCk6IGJzZyBycXN0IHR5cGU6ICVzIGVscyB0eXBlOiAleCAtIGxvb3AtaWQ9JXggIgorCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLmNvbW1hbmRfY29kZSwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJa2ZyZWUoc3AtPmN0eCk7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfdW5tYXBfc2c6CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKworZG9uZV9mcmVlX2ZjcG9ydDoKKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfSFNUX0VMU19OT0xPR0lOKQorCQlrZnJlZShmY3BvcnQpOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMngwMF9wcm9jZXNzX2N0KHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXNyYl90ICpzcDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWludCBydmFsID0gKERSSVZFUl9FUlJPUiA8PCAxNik7CisJaW50IHJlcV9zZ19jbnQsIHJzcF9zZ19jbnQ7CisJdWludDE2X3QgbG9vcF9pZDsKKwlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OworCWNoYXIgICp0eXBlID0gIkZDX0JTR19IU1RfQ1QiOworCXN0cnVjdCBzcmJfYnNnICpjdDsKKworCS8qIHBhc3MgdGhyb3VnaCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgSVNQIDRHYiBvciBoaWdoZXIgKi8KKyAgICAgICAgaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAic2NzaSglbGQpOkZpcm13YXJlIGlzIG5vdCBjYXBhYmxlIHRvIHN1cHBvcnQgRkMgIgorCQkgICAgIkNUIHBhc3MgdGhydVxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXJ2YWwgPSAtRVBFUk07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworICAgICAgICByZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIXJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKyAgICAgICAgcnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKyAgICAgICAgICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIXJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworCWlmICgocmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkJKHJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXJ2YWwgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwlsb29wX2lkID0KKwkgICAgKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnByZWFtYmxlX3dvcmQxICYgMHhGRjAwMDAwMCkKKwkgICAgPj4gMjQ7CisJc3dpdGNoIChsb29wX2lkKSB7CisJCWNhc2UgMHhGQzoKKwkJCWxvb3BfaWQgPSBjcHVfdG9fbGUxNihOUEhfU05TKTsKKwkJCWJyZWFrOworCQljYXNlIDB4RkE6CisJCQlsb29wX2lkID0gdmhhLT5tZ210X3N2cl9sb29wX2lkOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJICAgICJVbmtub3duIGxvb3AgaWQ6ICV4XG4iLCBsb29wX2lkKSk7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGR1bW15IGZjcG9ydCBzdHJ1Y3R1cmUsIHNpbmNlIGZ1bmN0aW9ucyBwcmVwYXJpbmcgdGhlCisJICogSU9DQiBhbmQgbWFpbGJveCBjb21tYW5kIHJldHJpZXZlcyBwb3J0IHNwZWNpZmljIGluZm9ybWF0aW9uCisJICogZnJvbSBmY3BvcnQgc3RydWN0dXJlLiBGb3IgSG9zdCBiYXNlZCBFTFMgY29tbWFuZHMgdGhlcmUgd2lsbCBiZQorCSAqIG5vIGZjcG9ydCBzdHJ1Y3R1cmUgYWxsb2NhdGVkCisJICovCisJZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZjcG9ydCkKKwl7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvICBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEluaXRpYWxpemUgYWxsIHJlcXVpcmVkICBmaWVsZHMgb2YgZmNwb3J0ICovCisJZmNwb3J0LT52aGEgPSB2aGE7CisJZmNwb3J0LT52cF9pZHggPSB2aGEtPnZwX2lkeDsKKwlmY3BvcnQtPmRfaWQuYi5hbF9wYSA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnBvcnRfaWRbMF07CisJZmNwb3J0LT5kX2lkLmIuYXJlYSA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnBvcnRfaWRbMV07CisJZmNwb3J0LT5kX2lkLmIuZG9tYWluID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFsyXTsKKwlmY3BvcnQtPmxvb3BfaWQgPSBsb29wX2lkOworCisJLyogQWxsb2MgU1JCIHN0cnVjdHVyZSAqLworCXNwID0gcWxhMngwMF9nZXRfY3R4X2JzZ19zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfYnNnKSk7CisJaWYgKCFzcCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKworCWN0ID0gc3AtPmN0eDsKKwljdC0+Y3R4LnR5cGUgPSBTUkJfQ1RfQ01EOworCWN0LT5ic2dfam9iID0gYnNnX2pvYjsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJICAgICJzY3NpKCVsZDoleCk6IGJzZyBycXN0IHR5cGU6ICVzIGVscyB0eXBlOiAleCAtIGxvb3AtaWQ9JXggIgorCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkgICAgKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnByZWFtYmxlX3dvcmQyID4+IDE2KSwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJa2ZyZWUoc3AtPmN0eCk7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfZnJlZV9mY3BvcnQ6CisJa2ZyZWUoZmNwb3J0KTsKK2RvbmVfdW5tYXBfc2c6CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMngwMF9wcm9jZXNzX3ZlbmRvcl9zcGVjaWZpYyhzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWludCBydmFsOworCXVpbnQ4X3QgY29tbWFuZF9zZW50OworCXVpbnQzMl90IHZlbmRvcl9jbWQ7CisJY2hhciAqdHlwZTsKKwlzdHJ1Y3QgbXNnX2VjaG9fbGIgZWxyZXE7CisJdWludDE2X3QgcmVzcG9uc2VbTUFJTEJPWF9SRUdJU1RFUl9DT1VOVF07CisJdWludDhfdCogZndfc3RzX3B0cjsKKwl1aW50OF90ICpyZXFfZGF0YTsKKwlkbWFfYWRkcl90IHJlcV9kYXRhX2RtYTsKKwl1aW50MzJfdCByZXFfZGF0YV9sZW47CisJdWludDhfdCAqcnNwX2RhdGE7CisJZG1hX2FkZHJfdCByc3BfZGF0YV9kbWE7CisJdWludDMyX3QgcnNwX2RhdGFfbGVuOworCisJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpIHsKKwkJcnZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcnZhbCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworICAgICAgICBlbHJlcS5yZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIWVscmVxLnJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisgICAgICAgIGVscmVxLnJzcF9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIWVscmVxLnJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworCWlmICgoZWxyZXEucmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkgICAgKGVscmVxLnJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgZWxyZXEucmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBlbHJlcS5yc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisJcmVxX2RhdGFfbGVuID0gcnNwX2RhdGFfbGVuID0gYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCXJlcV9kYXRhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCByZXFfZGF0YV9sZW4sCisJICAgICZyZXFfZGF0YV9kbWEsIEdGUF9LRVJORUwpOworCisJcnNwX2RhdGEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHJzcF9kYXRhX2xlbiwKKwkgICAgJnJzcF9kYXRhX2RtYSwgR0ZQX0tFUk5FTCk7CisKKwkvKiBDb3B5IHRoZSByZXF1ZXN0IGJ1ZmZlciBpbiByZXFfZGF0YSBub3cgKi8KKwlzZ19jb3B5X3RvX2J1ZmZlcihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX2RhdGEsCisJICAgIHJlcV9kYXRhX2xlbik7CisKKwllbHJlcS5zZW5kX2RtYSA9IHJlcV9kYXRhX2RtYTsKKwllbHJlcS5yY3ZfZG1hID0gcnNwX2RhdGFfZG1hOworCWVscmVxLnRyYW5zZmVyX3NpemUgPSByZXFfZGF0YV9sZW47CisKKwkvKiBWZW5kb3IgY21kIDogbG9vcGJhY2sgb3IgRUNITyBkaWFnbm9zdGljCisJICogT3B0aW9uczoKKwkgKiAJTG9vcGJhY2sgOiBFaXRoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbG9vcGJhY2sKKwkgKiAJRUNITzogRUNITyBFTFMgb3IgVmVuZG9yIHNwZWNpZmljIEZDNCAgbGluayBkYXRhCisJICovCisJdmVuZG9yX2NtZCA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdOworCWVscmVxLm9wdGlvbnMgPQorCSAgICAqKCgodWludDMyX3QgKilic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCkKKwkgICAgKyAxKTsKKworCXN3aXRjaCAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF0pIHsKKwljYXNlIFFMX1ZORF9MT09QQkFDSzoKKwkJaWYgKGhhLT5jdXJyZW50X3RvcG9sb2d5ICE9IElTUF9DRkdfRikgeworCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9MT09QQkFDSyI7CisKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlcyB2ZW5kb3IgcnFzdCB0eXBlOiAleCBvcHRpb25zOiAleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlLCB2ZW5kb3JfY21kLCBlbHJlcS5vcHRpb25zKSk7CisKKwkJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfTE9PUEJBQ0tfQ01EOworCQkJcnZhbCA9IHFsYTJ4MDBfbG9vcGJhY2tfdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOworCQkJaWYgKElTX1FMQTgxWFgoaGEpKSB7CisJCQkJaWYgKHJlc3BvbnNlWzBdID09IE1CU19DT01NQU5EX0VSUk9SICYmIHJlc3BvbnNlWzFdID09IE1CU19MQl9SRVNFVCkgeworCQkJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbGQpOiBBQk9SVGluZyAiCisJCQkJCQkiSVNQXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOworCQkJCSB9CisJCQl9CisJCX0gZWxzZSB7CisJCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0VDSE9fRElBRyI7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXMgdmVuZG9yIHJxc3QgdHlwZTogJXggb3B0aW9uczogJXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgdHlwZSwgdmVuZG9yX2NtZCwgZWxyZXEub3B0aW9ucykpOworCisJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0VDSE9fQ01EOworCQkJcnZhbCA9IHFsYTJ4MDBfZWNob190ZXN0KHZoYSwgJmVscmVxLCByZXNwb25zZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9SRVNFVDoKKwkJaWYgKCFJU19RTEE4NFhYKHZoYS0+aHcpKSB7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCURFQlVHMTYocHJpbnRrKAorCQkJCSIlcyglbGQpOiA4eHh4IGV4aXRpbmcuXG4iLAorCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXJldHVybiBydmFsOworCQl9CisJCXJ2YWwgPSBxbGE4NHh4X3Jlc2V0KHZoYSwgJmVscmVxLCBic2dfam9iKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0NNRDoKKwkJaWYgKCFJU19RTEE4NFhYKHZoYS0+aHcpKSB7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCURFQlVHMTYocHJpbnRrKAorCQkJCSIlcyglbGQpOiA4eHh4IGV4aXRpbmcuXG4iLAorCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXJldHVybiBydmFsOworCQl9CisJCXJ2YWwgPSBxbGE4NHh4X21nbXRfY21kKHZoYSwgJmVscmVxLCBic2dfam9iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnZhbCA9IC1FTk9TWVM7CisJfQorCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSJzY3NpKCVsZCkgVmVuZG9yIHJlcXVlc3QgJXMgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKKwkJcnZhbCA9IDA7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQltZW1jcHkoIGZ3X3N0c19wdHIsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKTsKKwkJZndfc3RzX3B0ciArPSBzaXplb2YocmVzcG9uc2UpOworICAgICAgICAgICAgICAgICpmd19zdHNfcHRyID0gY29tbWFuZF9zZW50OworCX0gZWxzZSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkic2NzaSglbGQpIFZlbmRvciByZXF1ZXN0ICVzIGNvbXBsZXRlZFxuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCXJ2YWwgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpICsgc2l6ZW9mKHJlc3BvbnNlKSArIHNpemVvZih1aW50OF90KTsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQltZW1jcHkoZndfc3RzX3B0ciwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCQlmd19zdHNfcHRyICs9IHNpemVvZihyZXNwb25zZSk7CisJCSpmd19zdHNfcHRyID0gY29tbWFuZF9zZW50OworCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9kYXRhLAorCQlyc3BfZGF0YV9sZW4pOworCX0KKwlic2dfam9iLT5qb2JfZG9uZShic2dfam9iKTsKKworZG9uZV91bm1hcF9zZzoKKworCWlmKHJlcV9kYXRhKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcmVxX2RhdGFfbGVuLAorCQkJcmVxX2RhdGEsIHJlcV9kYXRhX2RtYSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCitkb25lOgorICAgICAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMjR4eF9ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKyAgICAgICAgaW50IHJldCA9IC1FSU5WQUw7CisKKyAgICAgICAgc3dpdGNoIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlKSB7CisJCWNhc2UgRkNfQlNHX1JQVF9FTFM6CisJCWNhc2UgRkNfQlNHX0hTVF9FTFNfTk9MT0dJTjoKKwkJCXJldCA9IHFsYTJ4MDBfcHJvY2Vzc19lbHMoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX0NUOgorCQkJcmV0ID0gcWxhMngwMF9wcm9jZXNzX2N0KGJzZ19qb2IpOworCQkJYnJlYWs7CisJCWNhc2UgRkNfQlNHX0hTVF9WRU5ET1I6CisJCQlyZXQgPSBxbGEyeDAwX3Byb2Nlc3NfdmVuZG9yX3NwZWNpZmljKGJzZ19qb2IpOworCQkJYnJlYWs7CisJCWNhc2UgRkNfQlNHX0hTVF9BRERfUlBPUlQ6CisJCWNhc2UgRkNfQlNHX0hTVF9ERUxfUlBPUlQ6CisJCWNhc2UgRkNfQlNHX1JQVF9DVDoKKwkJZGVmYXVsdDoKKwkJCURFQlVHMihwcmludGsoInFsYTJ4eHg6IHVuc3VwcG9ydGVkIEJTRyByZXF1ZXN0XG4iKSk7CisJCQlicmVhazsKKyAgICAgICAgfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTI0eHhfYnNnX3RpbWVvdXQoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisgICAgICAgIHNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihic2dfam9iLT5zaG9zdCk7CisgICAgICAgIHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworICAgICAgICBzcmJfdCAqc3A7CisgICAgICAgIGludCBjbnQsIHF1ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IHJlcV9xdWUgKnJlcTsKKwlzdHJ1Y3Qgc3JiX2JzZyAqc3BfYnNnOworCisJLyogZmluZCB0aGUgYnNnIGpvYiBmcm9tIHRoZSBhY3RpdmUgbGlzdCBvZiBjb21tYW5kcyAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlmb3IgKHF1ZSA9IDA7IHF1ZSA8IGhhLT5tYXhfcmVxX3F1ZXVlczsgcXVlKyspIHsKKwkJcmVxID0gaGEtPnJlcV9xX21hcFtxdWVdOworCQlpZiAoIXJlcSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoY250ID0gMTsgY250IDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBjbnQrKyApIHsKKwkJCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF07CisKKwkJCWlmIChzcCkgeworCQkJCXNwX2JzZyA9IChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eDsKKworCQkJCWlmICgoKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0NUX0NNRCkgfHwKKwkJCQkgICAgKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfUlBUKQorCQkJCSAgICB8fCAoIHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfSFNUKSkgJiYKKwkJCQkgICAgKHNwX2JzZy0+YnNnX2pvYiA9PSBic2dfam9iKSkgeworCQkJCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7CisJCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCQkJInNjc2koJWxkKTogbWJ4IGFib3J0X2NvbW1hbmQgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IC1FSU87CisJCQkJCX0gZWxzZSB7CisJCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCQkJInNjc2koJWxkKTogbWJ4IGFib3J0X2NvbW1hbmQgc3VjY2Vzc1xuIiwgdmhhLT5ob3N0X25vKSk7CisJCQkJCQlic2dfam9iLT5yZXEtPmVycm9ycyA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCQkJCQl9CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkic2NzaSglbGQpIFNSQiBub3QgZm91bmQgdG8gYWJvcnRcbiIsIHZoYS0+aG9zdF9ubykpOworCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IC1FTlhJTzsKKwlyZXR1cm4gMDsKKworZG9uZToKKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfSFNUX0NUKQorCQlrZnJlZShzcC0+ZmNwb3J0KTsKKwlrZnJlZShzcC0+Y3R4KTsKKwltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBxbGEyeHh4X3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CiAKIAkuc2hvd19ob3N0X25vZGVfbmFtZSA9IDEsCkBAIC0xODM4LDYgKzI0MzgsOCBAQAogCS52cG9ydF9jcmVhdGUgPSBxbGEyNHh4X3Zwb3J0X2NyZWF0ZSwKIAkudnBvcnRfZGlzYWJsZSA9IHFsYTI0eHhfdnBvcnRfZGlzYWJsZSwKIAkudnBvcnRfZGVsZXRlID0gcWxhMjR4eF92cG9ydF9kZWxldGUsCisJLmJzZ19yZXF1ZXN0ID0gcWxhMjR4eF9ic2dfcmVxdWVzdCwKKwkuYnNnX3RpbWVvdXQgPSBxbGEyNHh4X2JzZ190aW1lb3V0LAogfTsKIAogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHFsYTJ4eHhfdHJhbnNwb3J0X3Zwb3J0X2Z1bmN0aW9ucyA9IHsKQEAgLTE4NzgsNiArMjQ4MCw4IEBACiAJLmRldl9sb3NzX3Rtb19jYWxsYmsgPSBxbGEyeDAwX2Rldl9sb3NzX3Rtb19jYWxsYmssCiAJLnRlcm1pbmF0ZV9ycG9ydF9pbyA9IHFsYTJ4MDBfdGVybWluYXRlX3Jwb3J0X2lvLAogCS5nZXRfZmNfaG9zdF9zdGF0cyA9IHFsYTJ4MDBfZ2V0X2ZjX2hvc3Rfc3RhdHMsCisJLmJzZ19yZXF1ZXN0ID0gcWxhMjR4eF9ic2dfcmVxdWVzdCwKKwkuYnNnX3RpbWVvdXQgPSBxbGEyNHh4X2JzZ190aW1lb3V0LAogfTsKIAogdm9pZApAQCAtMTkwNiwzICsyNTEwLDEyNSBAQAogCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKIAlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHModmhhLT5ob3N0KSA9IHNwZWVkOwogfQorc3RhdGljIGludAorcWxhODR4eF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCWludCAgICAgICAgICAgICByZXQgPSAwOworCWludCAgICAgICAgICAgICBjbWQ7CisJdWludDE2X3QgICAgICAgIGNtZF9zdGF0dXM7CisKKwlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJY21kID0gKCooKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kKSArIDIpKQorCQkJPT0gQTg0X1JFU0VUX0ZMQUdfRU5BQkxFX0RJQUdfRlcgPworCQkJCUE4NF9JU1NVRV9SRVNFVF9ESUFHX0ZXIDogQTg0X0lTU1VFX1JFU0VUX09QX0ZXOworCXJldCA9IHFsYTg0eHhfcmVzZXRfY2hpcChoYSwgY21kID09IEE4NF9JU1NVRV9SRVNFVF9ESUFHX0ZXLAorCSZjbWRfc3RhdHVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitxbGE4NHh4X21nbXRfY21kKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3RydWN0IGFjY2Vzc19jaGlwXzg0eHggKm1uOworCWRtYV9hZGRyX3QgbW5fZG1hLCBtZ210X2RtYTsKKwl2b2lkICptZ210X2IgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCByc3BfaGRyX2xlbiwgbGVuID0gMDsKKwlzdHJ1Y3QgcWxhODRfbXNnX21nbXQgKnFsODRfbWdtdDsKKworCXFsODRfbWdtdCA9IChzdHJ1Y3QgcWxhODRfbXNnX21nbXQgKikgdm1hbGxvYyhzaXplb2Yoc3RydWN0IHFsYTg0X21zZ19tZ210KSk7CisJcWw4NF9tZ210LT5jbWQgPQorCQkqKCh1aW50MTZfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDIpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUubWVtLnN0YXJ0X2FkZHIgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDMpKTsKKwlxbDg0X21nbXQtPmxlbiA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNCkpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcuaWQgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDUpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNikpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0xID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA3KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmluZm8udHlwZSA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgOCkpOworCXFsODRfbWdtdC0+bWdtdHAudS5pbmZvLmNvbnRleHQgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDkpKTsKKworCXJzcF9oZHJfbGVuID0gYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCisJbW4gPSBkbWFfcG9vbF9hbGxvYyhoYS0+aHctPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsICZtbl9kbWEpOworCWlmIChtbiA9PSBOVUxMKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIGZ3IGJ1ZmZlciAiCisJCSJmYWlsZWQlbHVcbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobW4sIDAsIHNpemVvZiAoc3RydWN0IGFjY2Vzc19jaGlwXzg0eHgpKTsKKworCW1uLT5lbnRyeV90eXBlID0gQUNDRVNTX0NISVBfSU9DQl9UWVBFOworCW1uLT5lbnRyeV9jb3VudCA9IDE7CisKKwlzd2l0Y2ggKHFsODRfbWdtdC0+Y21kKSB7CisJY2FzZSBRTEE4NF9NR01UX1JFQURfTUVNOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19EVU1QX01FTU9SWSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51Lm1lbS5zdGFydF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX1dSSVRFX01FTToKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fTE9BRF9NRU1PUlkpOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5tZW0uc3RhcnRfYWRkcik7CisJCWJyZWFrOworCWNhc2UgUUxBODRfTUdNVF9DSE5HX0NPTkZJRzoKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fQ0hBTkdFX0NPTkZJR19QQVJBTSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5pZCk7CisJCW1uLT5wYXJhbWV0ZXIyID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTApOworCQltbi0+cGFyYW1ldGVyMyA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0xKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0dFVF9JTkZPOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19SRVFVRVNUX0lORk8pOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5pbmZvLnR5cGUpOworCQltbi0+cGFyYW1ldGVyMiA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5pbmZvLmNvbnRleHQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXRfbWdtdDA7CisJfQorCisJaWYgKChsZW4gPT0gcWw4NF9tZ210LT5sZW4pICYmCisJCXFsODRfbWdtdC0+Y21kICE9IFFMQTg0X01HTVRfQ0hOR19DT05GSUcpIHsKKwkJbWdtdF9iID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+aHctPnBkZXYtPmRldiwgbGVuLAorCQkJCSZtZ210X2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtZ210X2IgPT0gTlVMTCkgeworCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXM6IGRtYSBhbGxvYyBtZ210X2IgIgorCQkJImZhaWxlZCVsdVxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0X21nbXQwOworCQl9CisJCW1uLT50b3RhbF9ieXRlX2NudCA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bGVuKTsKKwkJbW4tPmRzZWdfY291bnQgPSBjcHVfdG9fbGUxNigxKTsKKwkJbW4tPmRzZWdfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChtZ210X2RtYSkpOworCQltbi0+ZHNlZ19hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKG1nbXRfZG1hKSk7CisJCW1uLT5kc2VnX2xlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7CisKKwkJaWYgKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfV1JJVEVfTUVNKSB7CisJCQltZW1jcHkobWdtdF9iLCBxbDg0X21nbXQtPnBheWxvYWQsIGxlbik7CisJCX0KKwl9CisKKwlyZXQgPSBxbGEyeDAwX2lzc3VlX2lvY2IoaGEsIG1uLCBtbl9kbWEsIDApOworCWlmICgocmV0ICE9IFFMQV9TVUNDRVNTKSB8fCAocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9XUklURV9NRU0pCisJCXx8IChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX0NITkdfQ09ORklHKSkgeworCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykKKwkJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbHUpOiBmYWlsZWRcbiIsCisJCQkJCV9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCX0gZWxzZSBpZiAoKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfUkVBRF9NRU0pIHx8CisJCQkocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9HRVRfSU5GTykpIHsKKwl9CisKKwlpZiAobWdtdF9iKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPmh3LT5wZGV2LT5kZXYsIGxlbiwgbWdtdF9iLCBtZ210X2RtYSk7CisKK2V4aXRfbWdtdDA6CisJZG1hX3Bvb2xfZnJlZShoYS0+aHctPnNfZG1hX3Bvb2wsIG1uLCBtbl9kbWEpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggMTI2M2Q5Ny4uYWZhOTU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CiAKICNkZWZpbmUgUUxBMlhYWF9EUklWRVJfTkFNRSAgInFsYTJ4eHgiCiAKQEAgLTIyOCw2ICsyMjksMjcgQEAKIAl1aW50MTZfdCBmbGFnczsKIH07CiAKK3N0cnVjdCBzcmJfYnNnX2N0eCB7CisjZGVmaW5lIFNSQl9FTFNfQ01EX1JQVCAzCisjZGVmaW5lIFNSQl9FTFNfQ01EX0hTVCA0CisjZGVmaW5lIFNSQl9DVF9DTUQgNQorCXVpbnQxNl90IHR5cGU7Cit9OworCitzdHJ1Y3Qgc3JiX2JzZyB7CisJc3RydWN0IHNyYl9ic2dfY3R4IGN0eDsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYjsKK307CisKK3N0cnVjdCBtc2dfZWNob19sYiB7CisJZG1hX2FkZHJfdCBzZW5kX2RtYTsKKwlkbWFfYWRkcl90IHJjdl9kbWE7CisJdWludDE2X3QgcmVxX3NnX2NudDsKKwl1aW50MTZfdCByc3Bfc2dfY250OworCXVpbnQxNl90IG9wdGlvbnM7CisJdWludDMyX3QgdHJhbnNmZXJfc2l6ZTsKK307CisKIC8qCiAgKiBJU1AgSS9PIFJlZ2lzdGVyIFNldCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCiAgKi8KQEAgLTUyMiw2ICs1NDQsOCBAQAogI2RlZmluZSBNQkFfRElTQ0FSRF9STkRfRlJBTUUJMHg4MDQ4CS8qIGRpc2NhcmQgUk5EIGZyYW1lIGR1ZSB0byBlcnJvci4gKi8KICNkZWZpbmUgTUJBX1JFSkVDVEVEX0ZDUF9DTUQJMHg4MDQ5CS8qIHJlamVjdGVkIEZDUF9DTUQuICovCiAKKy8qIElTUCBtYWlsYm94IGxvb3BiYWNrIGVjaG8gZGlhZ25vc3RpYyBlcnJvciBjb2RlICovCisjZGVmaW5lIE1CU19MQl9SRVNFVAkweDE3CiAvKgogICogRmlybXdhcmUgb3B0aW9ucyAxLCAyLCAzLgogICovCkBAIC0yMjMwLDYgKzIyNTQsMTMgQEAKIAlpbnQgbWF4X3FfZGVwdGg7CiB9OwogCisvKiBQbGFjZSBob2xkZXIgZm9yIEZXIGJ1ZmZlciBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgcWxmY19mdyB7CisJdm9pZCAqZndfYnVmOworCWRtYV9hZGRyX3QgZndfZG1hOworCXVpbnQzMl90IGxlbjsKK307CisKIC8qCiAgKiBRbG9naWMgaG9zdCBhZGFwdGVyIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLgogKi8KQEAgLTI1OTQsNiArMjYyNSw3IEBACiAJc3RydWN0IHFsYV9zdGF0aXN0aWNzIHFsYV9zdGF0czsKIAlzdHJ1Y3QgaXNwX29wZXJhdGlvbnMgKmlzcF9vcHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCBxbGZjX2Z3IGZ3X2J1ZjsKIH07CiAKIC8qCkBAIC0yNzY2LDQgKzI3OTgsMTI3IEBACiAKICNkZWZpbmUgQ01EX1NQKENtbmQpCQkoKENtbmQpLT5TQ3AucHRyKQogCisvKgorICogQlNHIFZlbmRvciBzcGVjaWZpYyBjb21tYW5kcworICovCisKKyNkZWZpbmUgUUxfVk5EX0xPT1BCQUNLCQkweDAxCisjZGVmaW5lIFFMQTg0X1JFU0VUCQkweDAyCisjZGVmaW5lIFFMQTg0X1VQREFURV9GVwkJMHgwMworI2RlZmluZSBRTEE4NF9NR01UX0NNRAkJMHgwNAorCisvKiBCU0cgZGVmaW5hdGlvbnMgZm9yIGludGVycHJldGluZyBDb21tYW5kU2VudCBmaWVsZCAqLworI2RlZmluZSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRCAgICAgICAgIDAKKyNkZWZpbmUgSU5UX0RFRl9MQl9FQ0hPX0NNRCAgICAgICAgICAgICAxCisKKy8qIEJTRyBWZW5kb3Igc3BlY2lmaWMgZGVmaW5hdGlvbnMgKi8KK3R5cGVkZWYgc3RydWN0IF9BODRfUkVTRVQgeworCXVpbnQxNl90IEZsYWdzOworCXVpbnQxNl90IFJlc2VydmVkOworI2RlZmluZSBBODRfUkVTRVRfRkxBR19FTkFCTEVfRElBR19GVyAgIDEKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQTg0X1JFU0VULCAqUEE4NF9SRVNFVDsKKworI2RlZmluZSBBODRfSVNTVUVfV1JJVEVfVFlQRV9DTUQgICAgICAgIDAKKyNkZWZpbmUgQTg0X0lTU1VFX1JFQURfVFlQRV9DTUQgICAgICAgICAxCisjZGVmaW5lIEE4NF9DTEVBTlVQX0NNRCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBODRfSVNTVUVfUkVTRVRfT1BfRlcgICAgICAgICAgIDMKKyNkZWZpbmUgQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcgICAgICAgICA0CisjZGVmaW5lIEE4NF9JU1NVRV9VUERBVEVfT1BGV19DTUQgICAgICAgNQorI2RlZmluZSBBODRfSVNTVUVfVVBEQVRFX0RJQUdGV19DTUQgICAgIDYKKworc3RydWN0IHFsYTg0X21nbXRfcGFyYW0geworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IHN0YXJ0X2FkZHI7CisJCX0gbWVtOyAvKiBmb3IgUUxBODRfTUdNVF9SRUFEL1dSSVRFX01FTSAqLworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgaWQ7CisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX1VJRiAgICAgICAgMQorI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9GQ09FX0NPUyAgIDIKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfUEFVU0UgICAgICAzCisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX1RJTUVPVVRTICAgNAorCisJCXVpbnQzMl90IHBhcmFtMDsKKwkJdWludDMyX3QgcGFyYW0xOworCX0gY29uZmlnOyAvKiBmb3IgUUxBODRfTUdNVF9DSE5HX0NPTkZJRyAqLworCisJc3RydWN0IHsKKwkJdWludDMyX3QgdHlwZTsKKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19MT0dfREFUQSAgICAgICAgIDEgLyogR2V0IENvbmZpZyBMb2cgRGF0YSAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fTE9HX0RBVEEgICAgICAgICAgICAgICAgMiAvKiBHZXQgTG9nIERhdGEgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX1BPUlRfU1RBVCAgICAgICAgICAgICAgIDMgLyogR2V0IFBvcnQgU3RhdGlzdGljcyAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fTElGX1NUQVQgICAgICAgICAgICAgICAgNCAvKiBHZXQgTElGIFN0YXRpc3RpY3MgICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19BU0lDX1NUQVQgICAgICAgICAgICAgICA1IC8qIEdldCBBU0lDIFN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19QQVJBTVMgICAgICAgICAgIDYgLyogR2V0IENvbmZpZyBQYXJhbWV0ZXJzICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19QQU5JQ19MT0cgICAgICAgICAgICAgICA3IC8qIEdldCBQYW5pYyBMb2cgKi8KKworCQl1aW50MzJfdCBjb250ZXh0OworLyoKKyogY29udGV4dCBkZWZpbml0aW9ucyBmb3IgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19MT0dfREFUQQorKi8KKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0RFQlVHX0xPRyAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTEVBUk5fTE9HICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9GQ19BQ0xfSU5HUkVTU19MT0cgICAgICAgICAgIDIKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0ZDX0FDTF9FR1JFU1NfTE9HICAgICAgICAgICAgMworI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRVRIRVJORVRfQUNMX0lOR1JFU1NfTE9HICAgICA0CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9FVEhFUk5FVF9BQ0xfRUdSRVNTX0xPRyAgICAgIDUKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX01FU1NBR0VfVFJBTlNNSVRfTE9HICAgICAgICAgNgorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTUVTU0FHRV9SRUNFSVZFX0xPRyAgICAgICAgICA3CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9MSU5LX0VWRU5UX0xPRyAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0RDWF9MT0cgICAgICAgICAgICAgICAgICAgICAgOQorCisvKgorKiBjb250ZXh0IGRlZmluaXRpb25zIGZvciBRTEE4NF9NR01UX0lORk9fUE9SVF9TVEFUCisqLworI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRVRIRVJORVRfUE9SVDAgICAwCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9FVEhFUk5FVF9QT1JUMSAgIDEKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX05TTF9QT1JUMCAgICAgICAgMgorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfTlNMX1BPUlQxICAgICAgICAzCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9GQ19QT1JUMCAgICAgICAgIDQKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0ZDX1BPUlQxICAgICAgICAgNQorCisKKy8qCisqIGNvbnRleHQgZGVmaW5pdGlvbnMgZm9yIFFMQTg0X01HTVRfSU5GT19MSUZfU1RBVAorKi8KKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9FVEhFUk5FVF9QT1JUMCAgICAgMAorI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0VUSEVSTkVUX1BPUlQxICAgICAxCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRkNfUE9SVDAgICAgICAgICAgIDIKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9GQ19QT1JUMSAgICAgICAgICAgMworI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0NQVSAgICAgICAgICAgICAgICA2CisKKwkJfSBpbmZvOyAvKiBmb3IgUUxBODRfTUdNVF9HRVRfSU5GTyAqLworCX0gdTsKK307CisKK3N0cnVjdCBxbGE4NF9tc2dfbWdtdCB7CisJdWludDE2X3QgY21kOworI2RlZmluZSBRTEE4NF9NR01UX1JFQURfTUVNICAgICAweDAwCisjZGVmaW5lIFFMQTg0X01HTVRfV1JJVEVfTUVNICAgIDB4MDEKKyNkZWZpbmUgUUxBODRfTUdNVF9DSE5HX0NPTkZJRyAgMHgwMgorI2RlZmluZSBRTEE4NF9NR01UX0dFVF9JTkZPICAgICAweDAzCisJdWludDE2X3QgcnNydmQ7CisJc3RydWN0IHFsYTg0X21nbXRfcGFyYW0gbWdtdHA7LyogcGFyYW1ldGVycyBmb3IgY21kICovCisJdWludDMyX3QgbGVuOyAvKiBieXRlcyBpbiBwYXlsb2FkIGZvbGxvd2luZyB0aGlzIHN0cnVjdCAqLworCXVpbnQ4X3QgcGF5bG9hZFswXTsgLyogcGF5bG9hZCBmb3IgY21kICovCit9OworCitzdHJ1Y3QgbXNnX3VwZGF0ZV9mdyB7CisJLyoKKwkqIGRpYWdfZncgPSAwICBvcGVyYXRpb25hbCBmdworCSogICAgICBvdGhlcndpc2UgZGlhZ25vc3RpYyBmdworCSogb2Zmc2V0LCBsZW4sIGZ3X2xlbiBhcmUgcHJlc2VudCB0byBvdmVyY29tZSB0aGUgY3VycmVudCBsaW1pdGF0aW9uCisJKiBvZiAxMjhLYiB4ZmVyIHNpemUuIFRoZSBmdyBpcyBzZW50IGluIHNtYWxsZXIgY2h1bmtzLiBFYWNoIGNodW5rCisJKiBzcGVjaWZpZXMgdGhlIGJ5dGUgIm9mZnNldCIgd2hlcmUgaXQgZml0cyBpbiB0aGUgZncgYnVmZmVyLiBUaGUKKwkqIG51bWJlciBvZiBieXRlcyBpbiBlYWNoIGNodW5rIGlzIHNwZWNpZmllZCBpbiAibGVuIi4gImZ3X2xlbiIKKwkqIGlzIHRoZSB0b3RhbCBzaXplIG9mIGZ3LiBUaGUgZmlyc3QgY2h1bmsgc2hvdWxkIHN0YXJ0IGF0IG9mZnNldCA9IDAuCisJKiBXaGVuIG9mZnNldCtsZW4gPT0gZndfbGVuLCB0aGUgZncgaXMgd3JpdHRlbiB0byB0aGUgSEJBLgorCSovCisJdWludDMyX3QgZGlhZ19mdzsKKwl1aW50MzJfdCBvZmZzZXQ7Lyogc3RhcnQgb2Zmc2V0ICovCisJdWludDMyX3QgbGVuOyAgIC8qIG51bSBieXRlcyBpbiBjdXIgeGZlciAqLworCXVpbnQzMl90IGZ3X2xlbjsgLyogc2l6ZSBvZiBmdyBpbiBieXRlcyAqLworCXVpbnQ4X3QgZndfYnl0ZXNbMF07Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggNjZhOGRhNS4uY2ViZjRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTYyNyw2ICs2MjcsMzkgQEAKIAl1aW50MzJfdCByeF9sZW47CQkvKiBEYXRhIHNlZ21lbnQgMSBsZW5ndGguICovCiB9OwogCitzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4IHsKKwl1aW50OF90IGVudHJ5X3R5cGU7CQkvKiBFbnRyeSB0eXBlLiAqLworCXVpbnQ4X3QgZW50cnlfY291bnQ7CQkvKiBFbnRyeSBjb3VudC4gKi8KKwl1aW50OF90IHN5c19kZWZpbmU7CQkvKiBTeXN0ZW0gRGVmaW5lZC4gKi8KKwl1aW50OF90IGVudHJ5X3N0YXR1czsJCS8qIEVudHJ5IFN0YXR1cy4gKi8KKworCXVpbnQzMl90IGhhbmRsZTsJCS8qIFN5c3RlbSBoYW5kbGUuICovCisKKwl1aW50MTZfdCBjb21wX3N0YXR1czsKKworCXVpbnQxNl90IG5wb3J0X2hhbmRsZTsJCS8qIE5fUE9SVCBoYW5kbGUuICovCisKKwl1aW50MTZfdCByZXNlcnZlZF8xOworCisJdWludDhfdCB2cF9pbmRleDsKKwl1aW50OF90IHNvZl90eXBlOworCisJdWludDMyX3QgcnhfeGNoZ19hZGRyZXNzOwkvKiBSZWNlaXZlIGV4Y2hhbmdlIGFkZHJlc3MuICovCisJdWludDE2X3QgcmVzZXJ2ZWRfMjsKKworCXVpbnQ4X3Qgb3Bjb2RlOworCXVpbnQ4X3QgcmVzZXJ2ZWRfMzsKKworCXVpbnQ4X3QgcG9ydF9pZFszXTsKKwl1aW50OF90IHJlc2VydmVkXzQ7CisKKwl1aW50MTZfdCByZXNlcnZlZF81OworCisJdWludDE2X3QgY29udHJvbF9mbGFnczsJCS8qIENvbnRyb2wgZmxhZ3MuICovCisJdWludDMyX3QgdG90YWxfYnl0ZV9jb3VudDsKKwl1aW50MzJfdCBlcnJvcl9zdWJjb2RlXzE7CisJdWludDMyX3QgZXJyb3Jfc3ViY29kZV8yOworfTsKIC8qCiAgKiBJU1AgcXVldWUgLSBNYWlsYm94IENvbW1hbmQgZW50cnkgc3RydWN0dXJlIGRlZmluaXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCA4YmM2ZjUzLi4zYTg5YmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC02MCw2ICs2MCw4IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfbG9nb3V0X2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCiAgICAgdWludDE2X3QgKik7CiAKK2V4dGVybiBmY19wb3J0X3QgKgorcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGdmcF90ICk7CiAvKgogICogR2xvYmFsIERhdGEgaW4gcWxhX29zLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTc2LDYgKzc4LDcgQEAKIGV4dGVybiBpbnQgcWwyeG1heHF1ZXVlczsKIGV4dGVybiBpbnQgcWwyeG11bHRpcXVlX3RhZzsKIGV4dGVybiBpbnQgcWwyeGZ3bG9hZGJpbjsKK2V4dGVybiBpbnQgcWwyeGV0c2VuYWJsZTsKIAogZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9hbGxfY21kcyhzY3NpX3FsYV9ob3N0X3QgKiwgaW50KTsKQEAgLTk0LDcgKzk3LDYgQEAKIAogZXh0ZXJuIGludCBxbGE4MXh4X3Jlc3RhcnRfbXBpX2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAotZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY19wb3J0X3QgKik7CiBleHRlcm4gc3RydWN0IHNjc2lfcWxhX2hvc3QgKnFsYTJ4MDBfY3JlYXRlX2hvc3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqLAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9ob3N0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwpAQCAtMTU0LDYgKzE1Niw3IEBACiBpbnQgX19xbGEyeDAwX21hcmtlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcmVxX3F1ZSAqLCBzdHJ1Y3QgcnNwX3F1ZSAqLAogCQkJCQkJdWludDE2X3QsIHVpbnQxNl90LCB1aW50OF90KTsKIGV4dGVybiBpbnQgcWxhMngwMF9zdGFydF9zcChzcmJfdCAqKTsKK2V4dGVybiB2b2lkIHFsYTJ4MDBfY3R4X3NwX2ZyZWUoc3JiX3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfbWJ4LmMgc291cmNlIGZpbGUuCkBAIC00MjYsNiArNDI5LDggQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfaW5pdF9ob3N0X2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hbGxvY19zeXNmc19hdHRyKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9zeXNmc19hdHRyKHNjc2lfcWxhX2hvc3RfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9sb29wYmFja190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfZWNob190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgdWludDE2X3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfZGZzLmMgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCAzZjhlODQ5Li5hNjdiMmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTYyLDcgKzYyLDcgQEAKIAljdHgtPmZyZWUoc3ApOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqc3ApCiB7CiAJc3RydWN0IHNyYl9jdHggKmN0eCA9IHNwLT5jdHg7CkBAIC0zMzgsNiArMzM4LDE2IEBACiAJcnZhbCA9IHFsYTJ4MDBfaW5pdF9yaW5ncyh2aGEpOwogCWhhLT5mbGFncy5jaGlwX3Jlc2V0X2RvbmUgPSAxOwogCisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MgJiYgSVNfUUxBODRYWChoYSkpIHsKKwkvKiBJc3N1ZSB2ZXJpZnkgODR4eCBGVyBJT0NCIHRvIGNvbXBsZXRlIDg0eHggaW5pdGlhbGl6YXRpb24gKi8KKwkJcnZhbCA9IHFsYTg0eHhfaW5pdF9jaGlwKHZoYSk7CisJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKKwkJCQkiVW5hYmxlIHRvIGluaXRpYWxpemUgSVNQODRYWC5cbiIpOworCQlxbGE4NHh4X3B1dF9jaGlwKHZoYSk7CisJCX0KKwl9CisKIAlyZXR1cm4gKHJ2YWwpOwogfQogCkBAIC0yMjE2LDcgKzIyMjYsNyBAQAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZmNwb3J0LCBvciBOVUxMLCBpZiBub25lIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIGZjX3BvcnRfdCAqCitmY19wb3J0X3QgKgogcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGdmcF90IGZsYWdzKQogewogCWZjX3BvcnRfdCAqZmNwb3J0OwpAQCAtMjkwMCw4ICsyOTEwLDEzIEBACiAJCWlmIChxbGEyeDAwX2lzX3Jlc2VydmVkX2lkKHZoYSwgbG9vcF9pZCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fCBMT09QX1RSQU5TSVRJT04odmhhKSkKKwkJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikgfHwKKwkJICAgIExPT1BfVFJBTlNJVElPTih2aGEpKSB7CisJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3BfZG93bl90aW1lciwgMCk7CisJCQlzZXRfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCXNldF9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZ2aGEtPmRwY19mbGFncyk7CiAJCQlicmVhazsKKwkJfQogCiAJCWlmIChzd2wgIT0gTlVMTCkgewogCQkJaWYgKGxhc3RfZGV2KSB7CkBAIC00ODc3LDYgKzQ4OTIsMTUgQEAKIH0KIAogdm9pZAotcWxhODF4eF91cGRhdGVfZndfb3B0aW9ucyhzY3NpX3FsYV9ob3N0X3QgKmhhKQorcWxhODF4eF91cGRhdGVfZndfb3B0aW9ucyhzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmICghcWwyeGV0c2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIEVUUyBCdXJzdC4gKi8KKwltZW1zZXQoaGEtPmZ3X29wdGlvbnMsIDAsIHNpemVvZihoYS0+Zndfb3B0aW9ucykpOworCWhhLT5md19vcHRpb25zWzJdIHw9IEJJVF85OworCXFsYTJ4MDBfc2V0X2Z3X29wdGlvbnModmhhLCBoYS0+Zndfb3B0aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCBjNWNjYWMwLi44Mjk5YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTEwMjUsNiArMTAyNSwxMTkgQEAKIAkvKiBJbXBsaWNpdDogbWJ4LT5tYngxMCA9IDAuICovCiB9CiAKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2Vsc19pb2NiKHNyYl90ICpzcCwgc3RydWN0IGVsc19lbnRyeV8yNHh4ICplbHNfaW9jYikKK3sKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYiA9ICgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5ic2dfam9iOworCisgICAgICAgIGVsc19pb2NiLT5lbnRyeV90eXBlID0gRUxTX0lPQ0JfVFlQRTsKKyAgICAgICAgZWxzX2lvY2ItPmVudHJ5X2NvdW50ID0gMTsKKyAgICAgICAgZWxzX2lvY2ItPnN5c19kZWZpbmUgPSAwOworICAgICAgICBlbHNfaW9jYi0+ZW50cnlfc3RhdHVzID0gMDsKKyAgICAgICAgZWxzX2lvY2ItPmhhbmRsZSA9IHNwLT5oYW5kbGU7CisgICAgICAgIGVsc19pb2NiLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGVsc19pb2NiLT52cF9pbmRleCA9IHNwLT5mY3BvcnQtPnZwX2lkeDsKKyAgICAgICAgZWxzX2lvY2ItPnNvZl90eXBlID0gRVNUX1NPRkkzOworICAgICAgICBlbHNfaW9jYi0+cnhfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCk7CisKKyAgICAgICAgZWxzX2lvY2ItPm9wY29kZSA9KCgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9SUFQpID8KKwkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLnJfZWxzLmVsc19jb2RlIDogYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLmNvbW1hbmRfY29kZTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMF0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYWxfcGE7CisgICAgICAgIGVsc19pb2NiLT5wb3J0X2lkWzFdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmFyZWE7CisgICAgICAgIGVsc19pb2NiLT5wb3J0X2lkWzJdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmRvbWFpbjsKKyAgICAgICAgZWxzX2lvY2ItPmNvbnRyb2xfZmxhZ3MgPSAwOworICAgICAgICBlbHNfaW9jYi0+cnhfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKworICAgICAgICBlbHNfaW9jYi0+dHhfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+dHhfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+dHhfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSk7CisKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT5yeF9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+cnhfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpOworfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF9jdF9pb2NiKHNyYl90ICpzcCwgc3RydWN0IGN0X2VudHJ5XzI0eHggKmN0X2lvY2IpCit7CisJdWludDE2X3QgICAgICAgIGF2YWlsX2RzZHM7CisJdWludDMyX3QgICAgICAgICpjdXJfZHNkOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGluZGV4OworCXVpbnQxNl90IHRvdF9kc2RzOworICAgICAgICBzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNwLT5mY3BvcnQtPnZoYTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYiA9ICgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5ic2dfam9iOworCWludCBsb29wX2l0ZXJhcnRpb24gPSAwOworCWludCBjb250X2lvY2JfcHJzbnQgPSAwOworCWludCBlbnRyeV9jb3VudCA9IDE7CisKKwljdF9pb2NiLT5lbnRyeV90eXBlID0gQ1RfSU9DQl9UWVBFOworICAgICAgICBjdF9pb2NiLT5lbnRyeV9zdGF0dXMgPSAwOworICAgICAgICBjdF9pb2NiLT5zeXNfZGVmaW5lID0gMDsKKyAgICAgICAgY3RfaW9jYi0+aGFuZGxlID0gc3AtPmhhbmRsZTsKKworCWN0X2lvY2ItPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworCWN0X2lvY2ItPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OworICAgICAgICBjdF9pb2NiLT5jb21wX3N0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisKKwljdF9pb2NiLT5jbWRfZHNkX2NvdW50ID0KKyAgICAgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGN0X2lvY2ItPnRpbWVvdXQgPSAwOworICAgICAgICBjdF9pb2NiLT5yc3BfZHNkX2NvdW50ID0KKyAgICAgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpOworICAgICAgICBjdF9pb2NiLT5yc3BfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgY3RfaW9jYi0+Y21kX2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgY3RfaW9jYi0+ZHNlZ18wX2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgY3RfaW9jYi0+ZHNlZ18wX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSk7CisKKwlhdmFpbF9kc2RzID0gMTsKKwljdXJfZHNkID0gKHVpbnQzMl90ICopY3RfaW9jYi0+ZHNlZ18xX2FkZHJlc3M7CisJaW5kZXggPSAwOworCXRvdF9kc2RzID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQ7CisKKwlmb3JfZWFjaF9zZyhic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsIHNnLCB0b3RfZHNkcywgaW5kZXgpIHsKKwkJZG1hX2FkZHJfdCAgICAgICBzbGVfZG1hOworCQljb250X2E2NF9lbnRyeV90ICpjb250X3BrdDsKKworCQkvKiBBbGxvY2F0ZSBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYWNrZXRzPyAqLworCQlpZiAoYXZhaWxfZHNkcyA9PSAwKSB7CisJCQkvKgorCQkJKiBGaXZlIERTRHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgQ29udC4KKwkJCSogVHlwZSAxIElPQ0IuCisJCQkgICAgICAgKi8KKwkJCWNvbnRfcGt0ID0gcWxhMngwMF9wcmVwX2NvbnRfdHlwZTFfaW9jYih2aGEpOworCQkJY3VyX2RzZCA9ICh1aW50MzJfdCAqKSBjb250X3BrdC0+ZHNlZ18wX2FkZHJlc3M7CisJCQlhdmFpbF9kc2RzID0gNTsKKwkJCWNvbnRfaW9jYl9wcnNudCA9IDE7CisJCQllbnRyeV9jb3VudCsrOworCQl9CisKKwkJc2xlX2RtYSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTFNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTVNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlsb29wX2l0ZXJhcnRpb24rKzsKKwkJYXZhaWxfZHNkcy0tOworCX0KKyAgICAgICAgY3RfaW9jYi0+ZW50cnlfY291bnQgPSBlbnRyeV9jb3VudDsKK30KKwogaW50CiBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICpzcCkKIHsKQEAgLTEwNTIsNiArMTE2NSwxMyBAQAogCQkgICAgcWxhMjR4eF9sb2dvdXRfaW9jYihzcCwgcGt0KToKIAkJICAgIHFsYTJ4MDBfbG9nb3V0X2lvY2Ioc3AsIHBrdCk7CiAJCWJyZWFrOworCWNhc2UgU1JCX0VMU19DTURfUlBUOgorCWNhc2UgU1JCX0VMU19DTURfSFNUOgorCQlxbGEyNHh4X2Vsc19pb2NiKHNwLCBwa3QpOworCQlicmVhazsKKwljYXNlIFNSQl9DVF9DTUQ6CisJCXFsYTI0eHhfY3RfaW9jYihzcCwgcGt0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IDZmYzYzYjkuLmFiOTAzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CiAKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfbWJ4X2NvbXBsZXRpb24oc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90KTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfcHJvY2Vzc19jb21wbGV0ZWRfcmVxdWVzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLApAQCAtODgxLDcgKzg4Miw5IEBACiAJCSAgICBpbmRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KKwogCXJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF0gPSBOVUxMOworCiBkb25lOgogCXJldHVybiBzcDsKIH0KQEAgLTk4Miw2ICs5ODUsMTAwIEBACiB9CiAKIHN0YXRpYyB2b2lkCitxbGEyNHh4X2Vsc19jdF9lbnRyeShzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKKyAgICBzdHJ1Y3Qgc3RzX2VudHJ5XzI0eHggKnBrdCwgaW50IGlvY2JfdHlwZSkKK3sKKwljb25zdCBjaGFyIGZ1bmNbXSA9ICJFTFNfQ1RfSU9DQiI7CisJY29uc3QgY2hhciAqdHlwZTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzcmJfdCAqc3A7CisJc3RydWN0IHNyYl9ic2cgKnNwX2JzZzsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYjsKKwl1aW50MTZfdCBjb21wX3N0YXR1czsKKwl1aW50MzJfdCBmd19zdGF0dXNbM107CisJdWludDhfdCogZndfc3RzX3B0cjsKKworCXNwID0gcWxhMngwMF9nZXRfc3BfZnJvbV9oYW5kbGUodmhhLCBmdW5jLCByZXEsIHBrdCk7CisJaWYgKCFzcCkKKwkJcmV0dXJuOworCXNwX2JzZyA9IChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eDsKKwlic2dfam9iID0gc3BfYnNnLT5ic2dfam9iOworCisJdHlwZSA9IE5VTEw7CisJc3dpdGNoIChzcF9ic2ctPmN0eC50eXBlKSB7CisJY2FzZSBTUkJfRUxTX0NNRF9SUFQ6CisJY2FzZSBTUkJfRUxTX0NNRF9IU1Q6CisJCXR5cGUgPSAiZWxzIjsKKwkJYnJlYWs7CisJY2FzZSBTUkJfQ1RfQ01EOgorCQl0eXBlID0gImN0IHBhc3MtdGhyb3VnaCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogVW5yZWNvZ25pemVkIFNSQjogKCVwKSB0eXBlPSVkLlxuIiwgZnVuYywgc3AsCisJCSAgICBzcF9ic2ctPmN0eC50eXBlKTsKKwkJcmV0dXJuOworCX0KKworCWNvbXBfc3RhdHVzID0gZndfc3RhdHVzWzBdID0gbGUxNl90b19jcHUocGt0LT5jb21wX3N0YXR1cyk7CisJZndfc3RhdHVzWzFdID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzEpOworCWZ3X3N0YXR1c1syXSA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8yKTsKKworCS8qIHJldHVybiBGQ19DVEVMU19TVEFUVVNfT0sgYW5kIGxlYXZlIHRoZSBkZWNvZGluZyBvZiB0aGUgRUxTL0NUCisJICogZmMgcGF5bG9hZCAgdG8gdGhlIGNhbGxlcgorCSAqLworCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5LnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19PSzsKKwlic2dfam9iLT5yZXBseV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSkgKyBzaXplb2YoZndfc3RhdHVzKTsKKworCWlmIChjb21wX3N0YXR1cyAhPSBDU19DT01QTEVURSkgeworCQlpZiAoY29tcF9zdGF0dXMgPT0gQ1NfREFUQV9VTkRFUlJVTikgeworCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+dG90YWxfYnl0ZV9jb3VudCk7CisKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgInNjc2koJWxkOjB4JXgpOiBFTFMtQ1QgcGFzcy10aHJvdWdoLSVzIGVycm9yIGNvbXBfc3RhdHVzLXN0YXR1cz0weCV4ICIKKwkJCSAgICAiZXJyb3Igc3ViY29kZSAxPTB4JXggZXJyb3Igc3ViY29kZSAyPTB4JXggdG90YWxfYnl0ZSA9IDB4JXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgY29tcF9zdGF0dXMsIGZ3X3N0YXR1c1sxXSwgZndfc3RhdHVzWzJdLAorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+dG90YWxfYnl0ZV9jb3VudCkpKTsKKwkJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQkJbWVtY3B5KCBmd19zdHNfcHRyLCBmd19zdGF0dXMsIHNpemVvZihmd19zdGF0dXMpKTsKKwkJfQorCQllbHNlIHsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgInNjc2koJWxkOjB4JXgpOiBFTFMtQ1QgcGFzcy10aHJvdWdoLSVzIGVycm9yIGNvbXBfc3RhdHVzLXN0YXR1cz0weCV4ICIKKwkJCSAgICAiZXJyb3Igc3ViY29kZSAxPTB4JXggZXJyb3Igc3ViY29kZSAyPTB4JXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgY29tcF9zdGF0dXMsCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzEpLAorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8yKSkpOworCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCQltZW1jcHkoIGZ3X3N0c19wdHIsIGZ3X3N0YXR1cywgc2l6ZW9mKGZ3X3N0YXR1cykpOworCQl9CisJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopcGt0LCBzaXplb2YoKnBrdCkpKTsKKwl9CisJZWxzZSB7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OzsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWJzZ19qb2ItPnJlcGx5X2xlbiA9IDA7CisJfQorCisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmICgoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QpIHx8CisJICAgIChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9DVF9DTUQpKQorCQlrZnJlZShzcC0+ZmNwb3J0KTsKKwlrZnJlZShzcC0+Y3R4KTsKKwltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJYnNnX2pvYi0+am9iX2RvbmUoYnNnX2pvYik7Cit9CisKK3N0YXRpYyB2b2lkCiBxbGEyNHh4X2xvZ2lvX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAogICAgIHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICpsb2dpbykKIHsKQEAgLTE3NDksNiArMTg0NiwxMyBAQAogCQkJcWxhMjR4eF9sb2dpb19lbnRyeSh2aGEsIHJzcC0+cmVxLAogCQkJICAgIChzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqKXBrdCk7CiAJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENUX0lPQ0JfVFlQRToKKwkJCXFsYTI0eHhfZWxzX2N0X2VudHJ5KHZoYSwgcnNwLT5yZXEsIHBrdCwgQ1RfSU9DQl9UWVBFKTsKKwkJCWNsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmdmhhLT5ody0+bWJ4X2NtZF9mbGFncyk7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVMU19JT0NCX1RZUEU6CisJCQlxbGEyNHh4X2Vsc19jdF9lbnRyeSh2aGEsIHJzcC0+cmVxLCBwa3QsIEVMU19JT0NCX1RZUEUpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBUeXBlIE5vdCBTdXBwb3J0ZWQuICovCiAJCQlERUJVRzQocHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMjA0OSw3ICsyMTUzLDYgQEAKIAkJc2V0X2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCQljb21wbGV0ZSgmaGEtPm1ieF9pbnRyX2NvbXApOwogCX0KLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjI1NSwxMCArMjM1OCwxMSBAQAogCiAJaWYgKGhhLT5mbGFncy5tc2l4X2VuYWJsZWQpCiAJCXFsYTI0eHhfZGlzYWJsZV9tc2l4KGhhKTsKLQllbHNlIGlmIChoYS0+ZmxhZ3MuaW50YV9lbmFibGVkKSB7CisJZWxzZSBpZiAoaGEtPmZsYWdzLm1zaV9lbmFibGVkKSB7CiAJCWZyZWVfaXJxKGhhLT5wZGV2LT5pcnEsIHJzcCk7CiAJCXBjaV9kaXNhYmxlX21zaShoYS0+cGRldik7Ci0JfQorCX0gZWxzZQorCQlmcmVlX2lycShoYS0+cGRldi0+aXJxLCByc3ApOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwppbmRleCAwNTZlNGQ0Li42ZTUzYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCkBAIC0zNjM2LDYgKzM2MzYsMTU3IEBACiB9CiAKIGludAorcWxhMngwMF9sb29wYmFja190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHVpbnQxNl90ICptcmVzcCkKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJdWludDMyX3QgaXRlcl9jbnQgPSAweDE7CisKKwlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisKKwltZW1zZXQobWNwLT5tYiwgMCAsIHNpemVvZihtY3AtPm1iKSk7CisJbWNwLT5tYlswXSA9IE1CQ19ESUFHTk9TVElDX0xPT1BfQkFDSzsKKwltY3AtPm1iWzFdID0gbXJlcS0+b3B0aW9ucyB8IEJJVF82OwkvLyBCSVRfNiBzcGVjaWZpZXMgNjQgYml0IGFkZHJlc3NpbmcKKworCS8qIHRyYW5zZmVyIGNvdW50ICovCisJbWNwLT5tYlsxMF0gPSBMU1cobXJlcS0+dHJhbnNmZXJfc2l6ZSk7CisJbWNwLT5tYlsxMV0gPSBNU1cobXJlcS0+dHJhbnNmZXJfc2l6ZSk7CisKKwkvKiBzZW5kIGRhdGEgYWRkcmVzcyAqLworCW1jcC0+bWJbMTRdID0gTFNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzE1XSA9IE1TVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisKKwkvKiByZWNpZXZlIGRhdGEgYWRkcmVzcyAqLworCW1jcC0+bWJbMTZdID0gTFNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbMTddID0gTVNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbNl0gPSBMU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKwltY3AtPm1iWzddID0gTVNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisKKwkvKiBJdGVyYXRpb24gY291bnQgKi8KKwltY3AtPm1iWzE4XSA9IExTVyhpdGVyX2NudCk7CisJbWNwLT5tYlsxOV0gPSBNU1coaXRlcl9jbnQpOworCisJbWNwLT5vdXRfbWIgPSBNQlhfMjF8TUJYXzIwfE1CWF8xOXxNQlhfMTh8TUJYXzE3fE1CWF8xNnxNQlhfMTV8CisJICAgIE1CWF8xNHxNQlhfMTN8TUJYXzEyfE1CWF8xMXxNQlhfMTB8TUJYXzd8TUJYXzZ8TUJYXzF8TUJYXzA7CisJaWYgKElTX1FMQTgxWFgodmhhLT5odykpCisJCW1jcC0+b3V0X21iIHw9IE1CWF8yOworCW1jcC0+aW5fbWIgPSBNQlhfMTl8TUJYXzE4fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOworCisJbWNwLT5idWZfc2l6ZSA9IG1yZXEtPnRyYW5zZmVyX3NpemU7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IE1CWF9ETUFfT1VUfE1CWF9ETUFfSU58SU9DVExfQ01EOworCisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAiKCVsZCk6IGZhaWxlZD0leCBtYlswXT0weCV4ICIKKwkJCSJtYlsxXT0weCV4IG1iWzJdPTB4JXggbWJbM109MHgleCBtYlsxOF09MHgleCBtYlsxOV09MHgleC4gXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsCisJCQltY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdLCBtY3AtPm1iWzNdLCBtY3AtPm1iWzE4XSwgbWNwLT5tYlsxOV0pKTsKKwl9IGVsc2UgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkKTogZG9uZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCX0KKworCS8qIENvcHkgbWFpbGJveCBpbmZvcm1hdGlvbiAqLworCW1lbWNweSggbXJlc3AsIG1jcC0+bWIsIDY0KTsKKwltcmVzcFszXSA9IG1jcC0+bWJbMThdOworCW1yZXNwWzRdID0gbWNwLT5tYlsxOV07CisJcmV0dXJuIHJ2YWw7Cit9CisKK2ludAorcWxhMngwMF9lY2hvX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgdWludDE2X3QgKm1yZXNwKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCURFQlVHMTEocHJpbnRrKCJzY3NpKCVsZCk6IGVudGVyZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKKwltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfRUNITzsKKwltY3AtPm1iWzFdID0gbXJlcS0+b3B0aW9ucyB8IEJJVF82OwkvKiBCSVRfNiBzcGVjaWZpZXMgNjRiaXQgYWRkcmVzcyAqLworCWlmIChJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5tYlsxXSB8PSBCSVRfMTU7CisJbWNwLT5tYlsyXSA9IElTX1FMQTgxWFgoaGEpID8gdmhhLT5mY29lX2ZjZl9pZHggOiAwOworCW1jcC0+bWJbMTZdID0gTFNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbMTddID0gTVNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbNl0gPSBMU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKwltY3AtPm1iWzddID0gTVNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisKKwltY3AtPm1iWzEwXSA9IExTVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKworCW1jcC0+bWJbMTRdID0gTFNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzE1XSA9IE1TVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisKKwltY3AtPm91dF9tYiA9IE1CWF8yMXxNQlhfMjB8TUJYXzE3fE1CWF8xNnxNQlhfMTV8CisJICAgIE1CWF8xNHxNQlhfMTB8TUJYXzd8TUJYXzZ8TUJYXzF8TUJYXzA7CisJaWYgKElTX1FMQTgxWFgoaGEpKQorCQltY3AtPm91dF9tYiB8PSBNQlhfMjsKKworCW1jcC0+aW5fbWIgPSBNQlhfMDsKKwlpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSB8fCBJU19RTEEyNVhYKGhhKSB8fCBJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5pbl9tYiB8PSBNQlhfMTsKKwlpZiAoSVNfUUxBODFYWChoYSkpCisJCW1jcC0+aW5fbWIgfD0gTUJYXzM7CisKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisJbWNwLT5idWZfc2l6ZSA9IG1yZXEtPnRyYW5zZmVyX3NpemU7CisKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICIoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggbWJbMV09MHgleC5cbiIsCisJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwl9IGVsc2UgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkKTogZG9uZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCX0KKworCS8qIENvcHkgbWFpbGJveCBpbmZvcm1hdGlvbiAqLworCW1lbWNweSggbXJlc3AsIG1jcC0+bWIsIDMyKTsKKwlyZXR1cm4gcnZhbDsKK30KK2ludAorcWxhODR4eF9yZXNldF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQxNl90IGVuYWJsZV9kaWFnbm9zdGljLAorICAgIHVpbnQxNl90ICpjbWRfc3RhdHVzKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKworCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBlbmFibGVfZGlhZz0lZCBlbnRlcmVkLlxuIiwgX19mdW5jX18sCisJCWhhLT5ob3N0X25vLCBlbmFibGVfZGlhZ25vc3RpYykpOworCisJbWNwLT5tYlswXSA9IE1CQ19JU1A4NFhYX1JFU0VUOworCW1jcC0+bWJbMV0gPSBlbmFibGVfZGlhZ25vc3RpYzsKKwltY3AtPm91dF9tYiA9IE1CWF8xfE1CWF8wOworCW1jcC0+aW5fbWIgPSBNQlhfMXxNQlhfMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOworCisJLyogUmV0dXJuIG1haWxib3ggc3RhdHVzZXMuICovCisJKmNtZF9zdGF0dXMgPSBtY3AtPm1iWzBdOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQorCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLAorCQkJcnZhbCkpOworCWVsc2UKKwkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKworCXJldHVybiBydmFsOworfQorCitpbnQKIHFsYTJ4MDBfd3JpdGVfcmFtX3dvcmQoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQzMl90IHJpc2NfYWRkciwgdWludDMyX3QgZGF0YSkKIHsKIAlpbnQgcnZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggODUyOWViMS4uNDY3MjBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTEwNyw2ICsxMDcsMTIgQEAKIAkJIiAxIC0tIGxvYWQgZmlybXdhcmUgZnJvbSBmbGFzaC5cbiIKIAkJIiAwIC0tIHVzZSBkZWZhdWx0IHNlbWFudGljcy5cbiIpOwogCitpbnQgcWwyeGV0c2VuYWJsZTsKK21vZHVsZV9wYXJhbShxbDJ4ZXRzZW5hYmxlLCBpbnQsIFNfSVJVR098U19JUlVTUik7CitNT0RVTEVfUEFSTV9ERVNDKHFsMnhldHNlbmFibGUsCisJCSJFbmFibGVzIGZpcm13YXJlIEVUUyBidXJzdC4iCisJCSJEZWZhdWx0IGlzIDAgLSBza2lwIEVUUyBlbmFibGVtZW50LiIpOworCiAvKgogICogU0NTSSBob3N0IHRlbXBsYXRlIGVudHJ5IHBvaW50cwogICovCkBAIC02ODIsNDQgKzY4OCw2IEBACiAJcmV0dXJuIChyZXR1cm5fc3RhdHVzKTsKIH0KIAotdm9pZAotcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY19wb3J0X3QgKmZjcG9ydCkKLXsKLQlpbnQgY250OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3JiX3QgKnNwOwotCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCXJlcSA9IHZoYS0+cmVxOwotCWZvciAoY250ID0gMTsgY250IDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBjbnQrKykgewotCQlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdOwotCQlpZiAoIXNwKQotCQkJY29udGludWU7Ci0JCWlmIChzcC0+ZmNwb3J0ICE9IGZjcG9ydCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3AtPmN0eCkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChzcCkpIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiQWJvcnQgZmFpbGVkIC0tICAlbHhcbiIsCi0JCQlzcC0+Y21kLT5zZXJpYWxfbnVtYmVyKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocWxhMngwMF9laF93YWl0X29uX2NvbW1hbmQoc3AtPmNtZCkgIT0KLQkJCQlRTEFfU1VDQ0VTUykKLQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSJBYm9ydCBmYWlsZWQgd2hpbGUgd2FpdGluZyAtLSAgJWx4XG4iLAotCQkJCXNwLT5jbWQtPnNlcmlhbF9udW1iZXIpKTsKLQkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHFsYTJ4eHhfZWhfYWJvcnQKICoKQEAgLTEwOTUsNiArMTA2MywyMCBAQAogCXN0cnVjdCBmY19wb3J0ICpmY3BvcnQ7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlpZiAoaGEtPmZsYWdzLmVuYWJsZV90YXJnZXRfcmVzZXQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKKwkJCWlmIChmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBoYS0+aXNwX29wcy0+dGFyZ2V0X3Jlc2V0KGZjcG9ydCwgMCwgMCk7CisJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CisJCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBidXNfcmVzZXQgZmFpbGVkOiAiCisJCQkJICAgICJ0YXJnZXRfcmVzZXQ9JWQgZF9pZD0leC5cbiIsIF9fZnVuY19fLAorCQkJCSAgICB2aGEtPmhvc3Rfbm8sIHJldCwgZmNwb3J0LT5kX2lkLmIyNCkpOworCQkJfQorCQl9CisJfQorCiAJaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX2Z1bGxfbG9naW4gJiYgIUlTX1FMQTgxWFgoaGEpKSB7CiAJCXJldCA9IHFsYTJ4MDBfZnVsbF9sb2dpbl9saXAodmhhKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewpAQCAtMTExNywxOSArMTA5OSw2IEBACiAJCQlxbGEyeDAwX3dhaXRfZm9yX2xvb3BfcmVhZHkodmhhKTsKIAl9CiAKLQlpZiAoaGEtPmZsYWdzLmVuYWJsZV90YXJnZXRfcmVzZXQpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKLQkJCWlmIChmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUKQotCQkJCWNvbnRpbnVlOwotCi0JCQlyZXQgPSBoYS0+aXNwX29wcy0+dGFyZ2V0X3Jlc2V0KGZjcG9ydCwgMCwgMCk7Ci0JCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBidXNfcmVzZXQgZmFpbGVkOiAiCi0JCQkJICAgICJ0YXJnZXRfcmVzZXQ9JWQgZF9pZD0leC5cbiIsIF9fZnVuY19fLAotCQkJCSAgICB2aGEtPmhvc3Rfbm8sIHJldCwgZmNwb3J0LT5kX2lkLmIyNCkpOwotCQkJfQotCQl9Ci0JfQogCS8qIElzc3VlIG1hcmtlciBjb21tYW5kIG9ubHkgd2hlbiB3ZSBhcmUgZ29pbmcgdG8gc3RhcnQgdGhlIEkvTyAqLwogCXZoYS0+bWFya2VyX25lZWRlZCA9IDE7CiAKQEAgLTExNjAsOCArMTEyOSwxOSBAQAogCQkJCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJY3R4ID0gc3AtPmN0eDsKLQkJCQkJZGVsX3RpbWVyX3N5bmMoJmN0eC0+dGltZXIpOwotCQkJCQljdHgtPmZyZWUoc3ApOworCQkJCQlpZiAoY3R4LT50eXBlID09IFNSQl9MT0dJTl9DTUQgfHwgY3R4LT50eXBlID09IFNSQl9MT0dPVVRfQ01EKSB7CisJCQkJCQlkZWxfdGltZXJfc3luYygmY3R4LT50aW1lcik7CisJCQkJCQljdHgtPmZyZWUoc3ApOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RydWN0IHNyYl9ic2cqIHNwX2JzZyA9IChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eDsKKwkJCQkJCWlmIChzcF9ic2ctPmJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX0hTVF9DVCkKKwkJCQkJCQlrZnJlZShzcC0+ZmNwb3J0KTsKKwkJCQkJCXNwX2JzZy0+YnNnX2pvYi0+cmVxLT5lcnJvcnMgPSAwOworCQkJCQkJc3BfYnNnLT5ic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gcmVzOworCQkJCQkJc3BfYnNnLT5ic2dfam9iLT5qb2JfZG9uZShzcF9ic2ctPmJzZ19qb2IpOworCQkJCQkJa2ZyZWUoc3AtPmN0eCk7CisJCQkJCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTEyNTgsNyArMTIzOCw3IEBACiAJCXFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX3VwKHNkZXYsIHFkZXB0aCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBFT1BOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwpAQCAtMTgxOCw3ICsxNzk4LDYgQEAKIAkvKiBTZXQgRUVIIHJlc2V0IHR5cGUgdG8gZnVuZGFtZW50YWwgaWYgcmVxdWlyZWQgYnkgaGJhICovCiAJaWYgKCBJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSB8fCBJU19RTEE4MVhYKGhhKSkgewogCQlwZGV2LT5uZWVkc19mcmVzZXQgPSAxOwotCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAl9CiAKIAkvKiBDb25maWd1cmUgUENJIEkvTyBzcGFjZSAqLwpAQCAtMTk3MCwxMSArMTk0OSwxNSBAQAogCWhvc3QtPm1heF9jaGFubmVsID0gTUFYX0JVU0VTIC0gMTsKIAlob3N0LT5tYXhfbHVuID0gTUFYX0xVTlM7CiAJaG9zdC0+dHJhbnNwb3J0dCA9IHFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlOworCXNodC0+dmVuZG9yX2lkID0gKFNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9RTE9HSUMpOwogCiAJLyogU2V0IHVwIHRoZSBpcnFzICovCiAJcmV0ID0gcWxhMngwMF9yZXF1ZXN0X2lycXMoaGEsIHJzcCk7CiAJaWYgKHJldCkKIAkJZ290byBwcm9iZV9pbml0X2ZhaWxlZDsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJLyogQWxsb2MgYXJyYXlzIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJpbmcgcHRycyAqLwogcXVlX2luaXQ6CiAJaWYgKCFxbGEyeDAwX2FsbG9jX3F1ZXVlcyhoYSkpIHsKQEAgLTIxNzYsNiArMjE1OSw4IEBACiAJa2ZyZWUoaGEpOwogCWhhID0gTlVMTDsKIAorCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KQEAgLTMzMTAsNiArMzI5NSw3IEBACiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUjsKIAljYXNlIHBjaV9jaGFubmVsX2lvX2Zyb3plbjoKIAkJaGEtPmZsYWdzLmVlaF9idXN5ID0gMTsKKwkJcWxhMngwMF9mcmVlX2lycXModmhhKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKIAljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKQEAgLTMzNjMsMTAgKzMzNDksMjQgQEAKIAlwY2lfZXJzX3Jlc3VsdF90IHJldCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJc2NzaV9xbGFfaG9zdF90ICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gYmFzZV92aGEtPmh3OwotCWludCByYzsKKwlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOworCWludCByYywgcmV0cmllcyA9IDEwOwogCiAJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzbG90X3Jlc2V0XG4iKSk7CiAKKwkvKiBXb3JrYXJvdW5kOiBxbGEyeHh4IGRyaXZlciB3aGljaCBhY2Nlc3MgaGFyZHdhcmUgZWFybGllcgorCSAqIG5lZWRzIGVycm9yIHN0YXRlIHRvIGJlIHBjaV9jaGFubmVsX2lvX29ubGluZS4KKwkgKiBPdGhlcndpc2UgbWFpbGJveCBjb21tYW5kIHRpbWVzb3V0LgorCSAqLworCXBkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOworCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKiBwY2lfcmVzdG9yZV9zdGF0ZSgpIGNsZWFycyB0aGUgc2F2ZWRfc3RhdGUgZmxhZyBvZiB0aGUgZGV2aWNlCisJICogc2F2ZSByZXN0b3JlZCBzdGF0ZSB3aGljaCByZXNldHMgc2F2ZWRfc3RhdGUgZmxhZworCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKGhhLT5tZW1fb25seSkKIAkJcmMgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJZWxzZQpAQCAtMzM3OCwyNyArMzM3OCwyMyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCXJzcCA9IGhhLT5yc3BfcV9tYXBbMF07CisJaWYgKHFsYTJ4MDBfcmVxdWVzdF9pcnFzKGhhLCByc3ApKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGhhLT5pc3Bfb3BzLT5wY2lfY29uZmlnKGJhc2VfdmhhKSkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIFFMX0RFQlVHX0xFVkVMXzE3Ci0JewotCQl1aW50OF90IGI7Ci0JCXVpbnQzMl90IGk7CisJd2hpbGUgKGhhLT5mbGFncy5tYm94X2J1c3kgJiYgcmV0cmllcy0tKQorCQltc2xlZXAoMTAwMCk7CiAKLQkJcHJpbnRrKCJzbG90X3Jlc2V0XzE6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGhhLT5wZGV2LCBpLCAmYik7Ci0JCQlwcmludGsoIiVzJTAyeCIsIChpJTE2KSA/ICIgIiA6ICJcbiIsIGIpOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0jZW5kaWYKIAlzZXRfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIAlpZiAocWxhMngwMF9hYm9ydF9pc3AoYmFzZV92aGEpID09IFFMQV9TVUNDRVNTKQogCQlyZXQgPSAgUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogCWNsZWFyX2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAKKwlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKKwogCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCSAgICAic2xvdF9yZXNldC1yZXR1cm46cmV0PSV4XG4iLCByZXQpKTsKIApAQCAtMzQyMiw4ICszNDE4LDYgQEAKIAl9CiAKIAloYS0+ZmxhZ3MuZWVoX2J1c3kgPSAwOwotCi0JcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsYTJ4eHhfZXJyX2hhbmRsZXIgPSB7CkBAIC0zNTM2LDQgKzM1MzAsMyBAQAogTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfSVNQMjMyMik7CiBNT0RVTEVfRklSTVdBUkUoRldfRklMRV9JU1AyNFhYKTsKIE1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDI1WFgpOwotTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfSVNQODFYWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCBlZDM2Mjc5Li44ZDJmYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsOSArNyw5IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMS1rMTAiCisjZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAyLWsxIgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMwotI2RlZmluZSBRTEFfRFJJVkVSX1BBVENIX1ZFUgkxCi0jZGVmaW5lIFFMQV9EUklWRVJfQkVUQV9WRVIJMAorI2RlZmluZSBRTEFfRFJJVkVSX1BBVENIX1ZFUgkyCisjZGVmaW5lIFFMQV9EUklWRVJfQkVUQV9WRVIJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKaW5kZXggYWY4YzMyMy4uOTIzMjlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCkBAIC04NDQsMTAgKzg0NCwxMCBAQAogCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBHZXQgRUVQcm9tIHBhcmFtZXRlcnMgXG4iLCBoYS0+aG9zdF9ubywKIAkJICAgICAgX19mdW5jX18pKTsKIAlpZiAocWw0eHh4X2xvY2tfZmxhc2goaGEpICE9IFFMQV9TVUNDRVNTKQotCQlyZXR1cm4gKFFMQV9FUlJPUik7CisJCXJldHVybiBRTEFfRVJST1I7CiAJaWYgKHFsNHh4eF9sb2NrX252cmFtKGhhKSAhPSBRTEFfU1VDQ0VTUykgewogCQlxbDR4eHhfdW5sb2NrX2ZsYXNoKGhhKTsKLQkJcmV0dXJuIChRTEFfRVJST1IpOworCQlyZXR1cm4gUUxBX0VSUk9SOwogCX0KIAogCS8qIEdldCBFRVBSb20gUGFyYW1ldGVycyBmcm9tIE5WUkFNIGFuZCB2YWxpZGF0ZSAqLwpAQCAtODU4LDIwICs4NTgsMTggQEAKIAkJCXJkX252cmFtX3dvcmQoaGEsIGVlcHJvbV9leHRfaHdfY29uZl9vZmZzZXQoaGEpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBRTG9naWMgYWRhcHRlcnMgc2hvdWxkIGFsd2F5cyBoYXZlIGEgdmFsaWQgTlZSQU0uCi0JCSAqIElmIG5vdCB2YWxpZCwgZG8gbm90IGxvYWQuCi0JCSAqLwogCQlkZXZfd2FybigmaGEtPnBkZXYtPmRldiwKIAkJCSAgICJzY3NpJWxkOiAlczogRUVQcm9tIGNoZWNrc3VtIGludmFsaWQuICAiCiAJCQkgICAiUGxlYXNlIHVwZGF0ZSB5b3VyIEVFUFJPTVxuIiwgaGEtPmhvc3Rfbm8sCiAJCQkgICBfX2Z1bmNfXyk7CiAKLQkJLyogc2V0IGRlZmF1bHRzICovCisJCS8qIEF0dGVtcHQgdG8gc2V0IGRlZmF1bHRzICovCiAJCWlmIChpc19xbGE0MDEwKGhhKSkKIAkJCWV4dEh3Q29uZmlnLkFzdWludDMyX3QgPSAweDE5MTI7CiAJCWVsc2UgaWYgKGlzX3FsYTQwMjIoaGEpIHwgaXNfcWxhNDAzMihoYSkpCiAJCQlleHRId0NvbmZpZy5Bc3VpbnQzMl90ID0gMHgwMDIzOworCQllbHNlCisJCQlyZXR1cm4gUUxBX0VSUk9SOwogCX0KIAlERUJVRyhwcmludGsoInNjc2klbGQ6ICVzOiBTZXR0aW5nIGV4dEh3Q29uZmlnIHRvIDB4RkZGRiUwNHhcbiIsCiAJCSAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBleHRId0NvbmZpZy5Bc3VpbnQzMl90KSk7CkBAIC04ODQsNyArODgyLDcgQEAKIAlxbDR4eHhfdW5sb2NrX252cmFtKGhhKTsKIAlxbDR4eHhfdW5sb2NrX2ZsYXNoKGhhKTsKIAotCXJldHVybiAoUUxBX1NVQ0NFU1MpOworCXJldHVybiBRTEFfU1VDQ0VTUzsKIH0KIAogc3RhdGljIHZvaWQgcWxhNHgwMF9wY2lfY29uZmlnKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMgYi9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCmluZGV4IDhlNWMxNjkuLmJkODgzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKKysrIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJeyBSQUlEX0xFVkVMXzAsICJyYWlkMCIgfSwKIAl7IFJBSURfTEVWRUxfMSwgInJhaWQxIiB9LAogCXsgUkFJRF9MRVZFTF8xMCwgInJhaWQxMCIgfSwKKwl7IFJBSURfTEVWRUxfMUUsICJyYWlkMWUiIH0sCiAJeyBSQUlEX0xFVkVMXzMsICJyYWlkMyIgfSwKIAl7IFJBSURfTEVWRUxfNCwgInJhaWQ0IiB9LAogCXsgUkFJRF9MRVZFTF81LCAicmFpZDUiIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBhNjBkYTU1Li4xYzA4ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTEwMTgsNiArMTAxOCw4IEBACiAgKiBzY3NpX2dldF92cGRfcGFnZSAtIEdldCBWaXRhbCBQcm9kdWN0IERhdGEgZnJvbSBhIFNDU0kgZGV2aWNlCiAgKiBAc2RldjogVGhlIGRldmljZSB0byBhc2sKICAqIEBwYWdlOiBXaGljaCBWaXRhbCBQcm9kdWN0IERhdGEgdG8gcmV0dXJuCisgKiBAYnVmOiB3aGVyZSB0byBzdG9yZSB0aGUgVlBECisgKiBAYnVmX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBWUEQgYnVmZmVyIGFyZWEKICAqCiAgKiBTQ1NJIGRldmljZXMgbWF5IG9wdGlvbmFsbHkgc3VwcGx5IFZpdGFsIFByb2R1Y3QgRGF0YS4gIEVhY2ggJ3BhZ2UnCiAgKiBvZiBWUEQgaXMgZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgU0NTSSBkb2N1bWVudCAoZWcgU1BDLCBTQkMpLgpAQCAtMTAyNiw1NSArMTAyOCwzOSBAQAogICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcga2ZyZWUoKSBvbiB0aGlzIHBvaW50ZXIgd2hlbiBpdCBpcyBubyBsb25nZXIKICAqIG5lZWRlZC4gIElmIHdlIGNhbm5vdCByZXRyaWV2ZSB0aGUgVlBEIHBhZ2UgdGhpcyByb3V0aW5lIHJldHVybnMgJU5VTEwuCiAgKi8KLXVuc2lnbmVkIGNoYXIgKnNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdTggcGFnZSkKK2ludCBzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHU4IHBhZ2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICAgaW50IGJ1Zl9sZW4pCiB7CiAJaW50IGksIHJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWNvbnN0IHVuc2lnbmVkIGludCBpbml0X3ZwZF9sZW4gPSAyNTU7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYyhpbml0X3ZwZF9sZW4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiBOVUxMOwogCiAJLyogQXNrIGZvciBhbGwgdGhlIHBhZ2VzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLwotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCBpbml0X3ZwZF9sZW4pOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCBidWZfbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CiAKIAkvKiBJZiB0aGUgdXNlciBhY3R1YWxseSB3YW50ZWQgdGhpcyBwYWdlLCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLwogCWlmIChwYWdlID09IDApCi0JCXJldHVybiBidWY7CisJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGJ1ZlszXTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtaW4oKGludClidWZbM10sIGJ1Zl9sZW4gLSA0KTsgaSsrKQogCQlpZiAoYnVmW2kgKyA0XSA9PSBwYWdlKQogCQkJZ290byBmb3VuZDsKKworCWlmIChpIDwgYnVmWzNdICYmIGkgPiBidWZfbGVuKQorCQkvKiByYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgZ2l2ZSB1cyBiZW5lZml0IG9mIGRvdWJ0ICovCisJCWdvdG8gZm91bmQ7CiAJLyogVGhlIGRldmljZSBjbGFpbXMgaXQgZG9lc24ndCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcGFnZSAqLwogCWdvdG8gZmFpbDsKIAogIGZvdW5kOgotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCAyNTUpOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBidWZfbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CiAKLQkvKgotCSAqIFNvbWUgcGFnZXMgYXJlIGxvbmdlciB0aGFuIDI1NSBieXRlcy4gIFRoZSBhY3R1YWwgbGVuZ3RoIG9mCi0JICogdGhlIHBhZ2UgaXMgcmV0dXJuZWQgaW4gdGhlIGhlYWRlci4KLQkgKi8KLQlsZW4gPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgKyA0OwotCWlmIChsZW4gPD0gaW5pdF92cGRfbGVuKQotCQlyZXR1cm4gYnVmOwotCi0Ja2ZyZWUoYnVmKTsKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIHBhZ2UsIGxlbik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsOwotCi0JcmV0dXJuIGJ1ZjsKKwlyZXR1cm4gMDsKIAogIGZhaWw6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZ2V0X3ZwZF9wYWdlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBjNjY0MjQyLi4xNjQ2ZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNzczLDggKzc3MywxNCBAQAogCSAqIHdlIGFscmVhZHkgdG9vayBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGludG8gcnEtPmVycm9ycyB3aGljaAogCSAqIGlzIHdoYXQgZ2V0cyByZXR1cm5lZCB0byB0aGUgdXNlcgogCSAqLwotCWlmIChzZW5zZV92YWxpZCAmJiBzc2hkci5zZW5zZV9rZXkgPT0gUkVDT1ZFUkVEX0VSUk9SKSB7Ci0JCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKKwlpZiAoc2Vuc2VfdmFsaWQgJiYgKHNzaGRyLnNlbnNlX2tleSA9PSBSRUNPVkVSRURfRVJST1IpKSB7CisJCS8qIGlmIEFUQSBQQVNTLVRIUk9VR0ggSU5GT1JNQVRJT04gQVZBSUxBQkxFIHNraXAKKwkJICogcHJpbnQgc2luY2UgY2FsbGVyIHdhbnRzIEFUQSByZWdpc3RlcnMuIE9ubHkgb2NjdXJzIG9uCisJCSAqIFNDU0kgQVRBIFBBU1NfVEhST1VHSCBjb21tYW5kcyB3aGVuIENLX0NPTkQ9MQorCQkgKi8KKwkJaWYgKChzc2hkci5hc2MgPT0gMHgwKSAmJiAoc3NoZHIuYXNjcSA9PSAweDFkKSkKKwkJCTsKKwkJZWxzZSBpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCiAJCQlzY3NpX3ByaW50X3NlbnNlKCIiLCBjbWQpOwogCQlyZXN1bHQgPSAwOwogCQkvKiBCTE9DS19QQyBtYXkgaGF2ZSBzZXQgZXJyb3IgKi8KQEAgLTE2MjQsMTAgKzE2MzAsMTAgQEAKIAkvKgogCSAqIHRoaXMgbGltaXQgaXMgaW1wb3NlZCBieSBoYXJkd2FyZSByZXN0cmljdGlvbnMKIAkgKi8KLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHNob3N0LT5zZ190YWJsZXNpemUpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBTQ1NJX01BWF9TR19DSEFJTl9TRUdNRU5UUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtaW5fdCh1bnNpZ25lZCBzaG9ydCwgc2hvc3QtPnNnX3RhYmxlc2l6ZSwKKwkJCQkJU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMpKTsKIAotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBzaG9zdC0+bWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBzaG9zdC0+bWF4X3NlY3RvcnMpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgc2NzaV9jYWxjdWxhdGVfYm91bmNlX2xpbWl0KHNob3N0KSk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgc2hvc3QtPmRtYV9ib3VuZGFyeSk7CiAJZG1hX3NldF9zZWdfYm91bmRhcnkoZGV2LCBzaG9zdC0+ZG1hX2JvdW5kYXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKaW5kZXggOTk4Y2I1YmUuLjYyNjZhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCkBAIC01LDcgKzUsNyBAQAogI2RlZmluZSBTQVNfUEhZX0FUVFJTCQkxNwogI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMQogI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKLSNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMworI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwk1CiAjZGVmaW5lIFNBU19FWFBBTkRFUl9BVFRSUwk3CiAKIHN0cnVjdCBzYXNfaW50ZXJuYWwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDAxMmY3M2EuLjRiYzhiNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCSAqIGJyb2tlbiBSQTR4MDAgQ29tcGFxIERpc2sgQXJyYXkKIAkgKi8KIAlpZiAoKmJmbGFncyAmIEJMSVNUX01BWF81MTIpCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyKTsKIAogCS8qCiAJICogU29tZSBkZXZpY2VzIG1heSBub3Qgd2FudCB0byBoYXZlIGEgc3RhcnQgY29tbWFuZCBhdXRvbWF0aWNhbGx5CkBAIC0xMzM5LDggKzEzMzksMTAgQEAKIAkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKIAkJaWYgKCFzZGV2KQogCQkJcmV0dXJuIDA7Ci0JCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCisJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpIHsKKwkJCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzcHJpbnRmKGRldm5hbWUsICJob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQiLApAQCAtMTkwNywxMCArMTkwOSw5IEBACiAJCWdvdG8gb3V0OwogCiAJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKLQlpZiAoc2RldikgewotCQlzZGV2LT5zZGV2X2dlbmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCWlmIChzZGV2KQogCQlzZGV2LT5ib3JrZW4gPSAwOwotCX0gZWxzZQorCWVsc2UKIAkJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDVhMDY1MDUuLjE5ZWM5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODQ3LDYgKzg0Nyw4IEBACiAJaWYgKHN0YXJnZXQtPnN0YXRlICE9IFNUQVJHRVRfQ1JFQVRFRCkKIAkJcmV0dXJuIDA7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnN0YXJnZXQtPmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnN0YXJnZXQtPmRldik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnN0YXJnZXQtPmRldiwgInRhcmdldCBkZXZpY2VfYWRkIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycm9yKTsKQEAgLTg3OCw3ICs4ODAsOCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7CiAKLQlpZiAoKGVycm9yID0gc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORykpICE9IDApCisJZXJyb3IgPSBzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9SVU5OSU5HKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc2NzaV90YXJnZXRfYWRkKHN0YXJnZXQpOwpAQCAtODg2LDE2ICs4ODksMTggQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAl9CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2Rldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwogCQlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAl0cmFuc3BvcnRfYWRkX2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPmlzX3Zpc2libGUgPSAxOwpAQCAtOTEwLDE0ICs5MTUsMTQgQEAKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX2RlcHRoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfdHlwZSkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX3R5cGVfcncpOwogCWVsc2UKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmZGV2X2F0dHJfcXVldWVfdHlwZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gYnNnX3JlZ2lzdGVyX3F1ZXVlKHJxLCAmc2Rldi0+c2Rldl9nZW5kZXYsIE5VTEwsIE5VTEwpOwogCkBAIC05MzMsMTYgKzkzOCwxMSBAQAogCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LAogCQkJCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2Rldl9hdHRyc1tpXSk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfcmVtb3ZlOworCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KIAotCXJldHVybiAwOwotCi0gb3V0X3JlbW92ZToKLQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAlyZXR1cm4gZXJyb3I7Ci0KIH0KIAogdm9pZCBfX3Njc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDY1M2YyMmEuLjc5NjYwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC00NzUsNyArNDc1LDggQEAKIAkJICJNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgdGhlIEZDIHRyYW5zcG9ydCBzaG91bGQiCiAJCSAiIGluc3VsYXRlIHRoZSBsb3NzIG9mIGEgcmVtb3RlIHBvcnQuIE9uY2UgdGhpcyB2YWx1ZSBpcyIKIAkJICIgZXhjZWVkZWQsIHRoZSBzY3NpIHRhcmdldCBpcyByZW1vdmVkLiBWYWx1ZSBzaG91bGQgYmUiCi0JCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuIik7CisJCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQgaWYiCisJCSAiIGZhc3RfaW9fZmFpbF90bW8gaXMgbm90IHNldC4iKTsKIAogLyoKICAqIE5ldGxpbmsgSW5mcmFzdHJ1Y3R1cmUKQEAgLTg0Miw5ICs4NDMsMTcgQEAKIAkgICAgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZjcCwgMCk7Ci0JaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwKLQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkpCisJaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwgKHZhbCA8IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSWYgZmFzdF9pb19mYWlsIGlzIG9mZiB3ZSBoYXZlIHRvIGNhcAorCSAqIGRldl9sb3NzX3RtbyBhdCBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVAorCSAqLworCWlmIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA9PSAtMSAmJgorCSAgICB2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpLT5mLT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0LCB2YWwpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTkyNSw5ICs5MzQsMTYgQEAKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSAtMTsKIAllbHNlIHsKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmY3AsIDApOwotCQlpZiAoKCpjcCAmJiAoKmNwICE9ICdcbicpKSB8fAotCQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPj0gcnBvcnQtPmRldl9sb3NzX3RtbykpCisJCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8ICh2YWwgPCAwKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQkvKgorCQkgKiBDYXAgZmFzdF9pb19mYWlsIGJ5IGRldl9sb3NzX3RtbyBvcgorCQkgKiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVC4KKwkJICovCisJCWlmICgodmFsID49IHJwb3J0LT5kZXZfbG9zc190bW8pIHx8CisJCSAgICAodmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSB2YWw7CiAJfQogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCBmMjdlNTJkLi45MjdlOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNTUsNiArMTU1LDE3IEBACiBzYXNfYml0ZmllbGRfbmFtZV9zZWFyY2gobGlua3NwZWVkLCBzYXNfbGlua3NwZWVkX25hbWVzKQogc2FzX2JpdGZpZWxkX25hbWVfc2V0KGxpbmtzcGVlZCwgc2FzX2xpbmtzcGVlZF9uYW1lcykKIAorc3RhdGljIHN0cnVjdCBzYXNfZW5kX2RldmljZSAqc2FzX3NkZXZfdG9fcmRldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKworCUJVR19PTihycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSk7CisKKwlyZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXJldHVybiByZGV2OworfQorCiBzdGF0aWMgdm9pZCBzYXNfc21wX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJICAgIHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKQEAgLTM1OCw2ICszNjksODUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9ob3N0KTsKIAorLyoqCisgKiBzYXNfdGxyX3N1cHBvcnRlZCAtIGNoZWNraW5nIFRMUiBiaXQgaW4gdnBkIDB4OTAKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBDaGVjayBUcmFuc3BvcnQgTGF5ZXIgUmV0cmllcyBhcmUgc3VwcG9ydGVkIG9yIG5vdC4KKyAqIElmIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudCwgVFJMIGlzIHN1cHBvcnRlZC4KKyAqCisgKi8KK3Vuc2lnbmVkIGludAorc2FzX3Rscl9zdXBwb3J0ZWQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWNvbnN0IGludCB2cGRfbGVuID0gMzI7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKwljaGFyICpidWZmZXIgPSBremFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOworCWludCByZXQgPSAwOworCisJaWYgKHNjc2lfZ2V0X3ZwZF9wYWdlKHNkZXYsIDB4OTAsIGJ1ZmZlciwgdnBkX2xlbikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBNYWdpYyBudW1iZXJzOiB0aGUgVlBEIFByb3RvY29sIHBhZ2UgKDB4OTApCisJICogaGFzIGEgNCBieXRlIGhlYWRlciBhbmQgdGhlbiBvbmUgZW50cnkgcGVyIGRldmljZSBwb3J0CisJICogdGhlIFRMUiBiaXQgaXMgYXQgb2Zmc2V0IDggb24gZWFjaCBwb3J0IGVudHJ5CisJICogaWYgd2UgdGFrZSB0aGUgZmlyc3QgcG9ydCwgdGhhdCdzIGF0IHRvdGFsIG9mZnNldCAxMgorCSAqLworCXJldCA9IGJ1ZmZlclsxMl0gJiAweDAxOworCisgb3V0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmRldi0+dGxyX3N1cHBvcnRlZCA9IHJldDsKKwlyZXR1cm4gcmV0OworCit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXNfdGxyX3N1cHBvcnRlZCk7CisKKy8qKgorICogc2FzX2Rpc2FibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBTZXRpbmcgdGxyX2VuYWJsZWQgZmxhZyB0byAwLgorICoKKyAqLwordm9pZAorc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCisJcmRldi0+dGxyX2VuYWJsZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2Rpc2FibGVfdGxyKTsKKworLyoqCisgKiBzYXNfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogU2V0aW5nIHRscl9lbmFibGVkIGZsYWcgMS4KKyAqCisgKi8KK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGludCB0bHJfc3VwcG9ydGVkID0gMDsKKwl0bHJfc3VwcG9ydGVkICA9IHNhc190bHJfc3VwcG9ydGVkKHNkZXYpOworCisJaWYgKHRscl9zdXBwb3J0ZWQpIHsKKwkJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKworCQlyZGV2LT50bHJfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2VuYWJsZV90bHIpOworCit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCXJldHVybiByZGV2LT50bHJfZW5hYmxlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19pc190bHJfZW5hYmxlZCk7CiAKIC8qCiAgKiBTQVMgUGh5IGF0dHJpYnV0ZXMKQEAgLTExNDYsMTUgKzEyMzYsMTAgQEAKIGludCBzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJY2hhciAqYnVmZmVyID0ga3phbGxvYyhCVUZfU0laRSwgR0ZQX0tFUk5FTCksICptc2RhdGE7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOwotCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOwogCXN0cnVjdCBzY3NpX21vZGVfZGF0YSBtb2RlX2RhdGE7CiAJaW50IHJlcywgZXJyb3I7CiAKLQlCVUdfT04ocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgIT0gU0FTX0VORF9ERVZJQ0UpOwotCi0JcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKLQogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIwNyw2ICsxMjkyLDEwIEBACiAJCQkiJWRcbiIsIGludCk7CiBzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cihpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCwgaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQsCiAJCQkiJWRcbiIsIGludCk7CitzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cih0bHJfc3VwcG9ydGVkLCB0bHJfc3VwcG9ydGVkLAorCQkJIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIodGxyX2VuYWJsZWQsIHRscl9lbmFibGVkLAorCQkJIiVkXG4iLCBpbnQpOwogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1Moc2FzX2V4cGFuZGVyX2NsYXNzLAogCQkJICAgICAgICJzYXNfZXhwYW5kZXIiLCBOVUxMLCBOVUxMLCBOVUxMKTsKQEAgLTE3MzMsNiArMTgyMiw4IEBACiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9yZWFkeV9sZWRfbWVhbmluZyk7CiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9JX1RfbmV4dXNfbG9zc190aW1lb3V0KTsKIAlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X2luaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0KTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3Rscl9zdXBwb3J0ZWQpOworCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfdGxyX2VuYWJsZWQpOwogCWktPmVuZF9kZXZfYXR0cnNbY291bnRdID0gTlVMTDsKIAogCWNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMjU1ZGE1My4uMWRkNGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExOTYsMTkgKzExOTYsMTAgQEAKIAkJU0NwbnQtPnJlc3VsdCA9IDA7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlicmVhazsKLQljYXNlIEFCT1JURURfQ09NTUFORDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJRjogRGlzayBkZXRlY3RlZCBjb3JydXB0aW9uICovCi0JCQlzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKKwljYXNlIEFCT1JURURfQ09NTUFORDogLyogRElGOiBUYXJnZXQgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCWNhc2UgSUxMRUdBTF9SRVFVRVNUOiAvKiBESVg6IEhvc3QgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCQlpZiAoc3NoZHIuYXNjID09IDB4MTApCiAJCQlnb29kX2J5dGVzID0gc2RfY29tcGxldGVkX2J5dGVzKFNDcG50KTsKLQkJfQotCQlicmVhazsKLQljYXNlIElMTEVHQUxfUkVRVUVTVDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJWDogSEJBIGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KFNDcG50KTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoInNkIiwgU0NwbnQpOwotCQkJZ29vZF9ieXRlcyA9IHNkX2NvbXBsZXRlZF9ieXRlcyhTQ3BudCk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMjE4LDggKzEyMDksMTkgQEAKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIAogCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RrcC0+ZGV2aWNlLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpCi0JICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpCisJICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpIHsKKworCQkvKiBXZSBoYXZlIHRvIHByaW50IGEgZmFpbGVkIGNvbW1hbmQgaGVyZSBhcyB0aGUKKwkJICogZXh0ZW5kZWQgQ0RCIGdldHMgZnJlZWQgYmVmb3JlIHNjc2lfaW9fY29tcGxldGlvbigpCisJCSAqIGlzIGNhbGxlZC4KKwkJICovCisJCWlmIChyZXN1bHQpCisJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOworCiAJCW1lbXBvb2xfZnJlZShTQ3BudC0+Y21uZCwgc2RfY2RiX3Bvb2wpOworCQlTQ3BudC0+Y21uZCA9IE5VTEw7CisJCVNDcG50LT5jbWRfbGVuID0gMDsKKwl9CiAKIAlyZXR1cm4gZ29vZF9ieXRlczsKIH0KQEAgLTE5NDYsMTMgKzE5NDgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGludCBzZWN0b3Jfc3ogPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwotCWNoYXIgKmJ1ZmZlcjsKKwljb25zdCBpbnQgdnBkX2xlbiA9IDMyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CiAKLQkvKiBCbG9jayBMaW1pdHMgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwKTsKLQotCWlmIChidWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmICghYnVmZmVyIHx8CisJICAgIC8qIEJsb2NrIExpbWl0cyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCWJsa19xdWV1ZV9pb19taW4oc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTE2KCZidWZmZXJbNl0pICogc2VjdG9yX3N6KTsKQEAgLTE5ODQsNiArMTk4Niw3IEBACiAJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMzJdKSAmIH4oMSA8PCAzMSk7CiAJfQogCisgb3V0OgogCWtmcmVlKGJ1ZmZlcik7CiB9CiAKQEAgLTE5OTMsMjAgKzE5OTYsMjMgQEAKICAqLwogc3RhdGljIHZvaWQgc2RfcmVhZF9ibG9ja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IHNjc2lfZGlzayAqc2RrcCkKIHsKLQljaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXUxNiByb3Q7CisJY29uc3QgaW50IHZwZF9sZW4gPSAzMjsKIAotCS8qIEJsb2NrIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxKTsKKwlidWZmZXIgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwogCi0JaWYgKGJ1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKCFidWZmZXIgfHwKKwkgICAgLyogQmxvY2sgRGV2aWNlIENoYXJhY3RlcmlzdGljcyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCXJvdCA9IGdldF91bmFsaWduZWRfYmUxNigmYnVmZmVyWzRdKTsKIAogCWlmIChyb3QgPT0gMSkKIAkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHNka3AtPmRpc2stPnF1ZXVlKTsKIAorIG91dDoKIAlrZnJlZShidWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggNTViMDM0Yi4uMWQ3YTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNDQ4LDEzICs0NDgsMTcgQEAKIAkJLmFkZHIgPSAwLAogCX07CiAKLQlidWYgPSBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2MoSU5JVF9BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZiB8fCBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIElOSVRfQUxMT0NfU0laRSkpCisJCWdvdG8gZnJlZTsKIAogCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KSwgMCk7CiAKIAl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKKwlrZnJlZShidWYpOworCWJ1ZiA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYgfHxzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIHZwZF9sZW4pKQorCQlnb3RvIGZyZWU7CiAKIAlkZXNjID0gYnVmICsgNDsKIAl3aGlsZSAoZGVzYyA8IGJ1ZiArIHZwZF9sZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggMDQwZjc1MS4uYzk5NmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTI4Nyw4ICsyODcsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZzZHAtPnNmZHMpKSB7CS8qIG5vIGV4aXN0aW5nIG9wZW5zIG9uIHRoaXMgZGV2aWNlICovCiAJCXNkcC0+c2dkZWJ1ZyA9IDA7CiAJCXEgPSBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKLQkJc2RwLT5zZ190YWJsZXNpemUgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpLAotCQkJCQlxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSk7CisJCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCX0KIAlpZiAoKHNmcCA9IHNnX2FkZF9zZnAoc2RwLCBkZXYpKSkKIAkJZmlscC0+cHJpdmF0ZV9kYXRhID0gc2ZwOwpAQCAtMTM3Niw4ICsxMzc1LDcgQEAKIAlzZHAtPmRldmljZSA9IHNjc2lkcDsKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZmRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPm9fZXhjbF93YWl0KTsKLQlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSksCi0JCQkJcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpOworCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCXNkcC0+aW5kZXggPSBrOwogCWtyZWZfaW5pdCgmc2RwLT5kX3JlZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggZDA0ZWE5YS4uZjY3ZDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTM5ODMsOCArMzk4Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWkgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSksCi0JCXF1ZXVlX21heF9waHlzX3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSkpOworCWkgPSBxdWV1ZV9tYXhfc2VnbWVudHMoU0RwLT5yZXF1ZXN0X3F1ZXVlKTsKIAlpZiAoc3RfbWF4X3NnX3NlZ3MgPCBpKQogCQlpID0gc3RfbWF4X3NnX3NlZ3M7CiAJYnVmZmVyID0gbmV3X3RhcGVfYnVmZmVyKChTRHAtPmhvc3QpLT51bmNoZWNrZWRfaXNhX2RtYSwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCA1NDAyM2Q0MS4uMjZlOGUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogICAgY2hhciAqY3VyID0gc3RyOwogICAgaW50IGkgPSAxOwogCi0gICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisgICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8IE1BWF9JTlRfUEFSQU0pIHsKICAgICAgIGludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKICAgICAgIGlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkgY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwppbmRleCBkMjYwNGM4Li5lNGFjNTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKQEAgLTEwNjksNyArMTA2OSw4IEBACiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3R4LT5zZ2wsIGdldF9vcmRlcihTR0xfU0laRSkpOwogfQogCi1zdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwgaW50ICppcnEpCitzdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdW5zaWduZWQgaW50ICppcnEpCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cnkgPSB7IDAsIFBWU0NTSV9WRUNUT1JfQ09NUExFVElPTiB9OwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCBkOTM1YjJkLi5hZTAyNTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKIAk5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDAgfTsKIAotI2RlZmluZSBCQVVEX1RBQkxFX1NJWkUgKHNpemVvZihiYXVkX3RhYmxlKS9zaXplb2YoYmF1ZF90YWJsZVswXSkpCi0KIC8qIFNldHMgb3IgY2xlYXJzIERUUi9SVFMgb24gdGhlIHJlcXVlc3RlZCBsaW5lICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbTY4a19ydHNkdHIoc3RydWN0IG02OGtfc2VyaWFsICpzcywgaW50IHNldCkKIHsKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAKIAlVU1RDTlQgPSB1c3RjbnQgJiB+VVNUQ05UX1RYRU47CiAKIGFnYWluOgotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYmF1ZF90YWJsZSkgLyBzaXplb2YoYmF1ZF90YWJsZVswXSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXVkX3RhYmxlKTsgaSsrKQogCQlpZiAoYmF1ZF90YWJsZVtpXSA9PSBtNjgzMjhfY29uc29sZV9iYXVkKQogCQkJYnJlYWs7Ci0JaWYgKGkgPj0gc2l6ZW9mKGJhdWRfdGFibGUpIC8gc2l6ZW9mKGJhdWRfdGFibGVbMF0pKSB7CisJaWYgKGkgPj0gQVJSQVlfU0laRShiYXVkX3RhYmxlKSkgewogCQltNjgzMjhfY29uc29sZV9iYXVkID0gOTYwMDsKIAkJZ290byBhZ2FpbjsKIAl9CkBAIC0xNDM1LDcgKzE0MzMsNyBAQAogCWlmIChhcmcpCiAJCW4gPSBzaW1wbGVfc3RydG91bChhcmcsTlVMTCwwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBCQVVEX1RBQkxFX1NJWkU7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXVkX3RhYmxlKTsgaSsrKQogCQlpZiAoYmF1ZF90YWJsZVtpXSA9PSBuKQogCQkJYnJlYWs7CiAJaWYgKGkgPCBCQVVEX1RBQkxFX1NJWkUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBlOWIxNWMzLi43YzRlYmU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTIxNywxMiArMTIxNyw2IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCi0JLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KLQlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKLQkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7Ci0jZW5kaWYKLQogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgc2F2ZV9sY3IpOwogCiAJaWYgKHVwLT5jYXBhYmlsaXRpZXMgIT0gdWFydF9jb25maWdbdXAtPnBvcnQudHlwZV0uZmxhZ3MpIHsKQEAgLTI0MjgsNyArMjQyMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfcG9ydF9zaXplKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcHQpCiB7CiAJaWYgKHB0LT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQotCQlyZXR1cm4gMHgxMDAwMDA7CisJCXJldHVybiAweDEwMDA7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAogCWlmIChpc19vbWFwX3BvcnQocHQpKQogCQlyZXR1cm4gMHgxNiA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKQEAgLTI1ODUsNiArMjU3OSwxMyBAQAogCiAJaWYgKGZsYWdzICYgVUFSVF9DT05GSUdfVFlQRSkKIAkJYXV0b2NvbmZpZyh1cCwgcHJvYmVmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCisJLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KKwlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7CisjZW5kaWYKKwogCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBmbGFncyAmIFVBUlRfQ09ORklHX0lSUSkKIAkJYXV0b2NvbmZpZ19pcnEodXApOwogCkBAIC0yNjg5LDYgKzI2OTAsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitzZXJpYWw4MjUwX2luaXRfZml4ZWRfdHlwZV9wb3J0KHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVwLT5wb3J0LnR5cGUgPSB0eXBlOworCXVwLT5wb3J0LmZpZm9zaXplID0gdWFydF9jb25maWdbdHlwZV0uZmlmb19zaXplOworCXVwLT5jYXBhYmlsaXRpZXMgPSB1YXJ0X2NvbmZpZ1t0eXBlXS5mbGFnczsKKwl1cC0+dHhfbG9hZHN6ID0gdWFydF9jb25maWdbdHlwZV0udHhfbG9hZHN6OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydHMoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTI3MDUsNiArMjcxNSwxMCBAQAogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKIAkJdXAtPnBvcnQuZGV2ID0gZGV2OworCisJCWlmICh1cC0+cG9ydC5mbGFncyAmIFVQRl9GSVhFRF9UWVBFKQorCQkJc2VyaWFsODI1MF9pbml0X2ZpeGVkX3R5cGVfcG9ydCh1cCwgdXAtPnBvcnQudHlwZSk7CisKIAkJdWFydF9hZGRfb25lX3BvcnQoZHJ2LCAmdXAtPnBvcnQpOwogCX0KIH0KQEAgLTMxMTcsMTIgKzMxMzEsOCBAQAogCQlpZiAocG9ydC0+ZGV2KQogCQkJdWFydC0+cG9ydC5kZXYgPSBwb3J0LT5kZXY7CiAKLQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1RZUEUpIHsKLQkJCXVhcnQtPnBvcnQudHlwZSA9IHBvcnQtPnR5cGU7Ci0JCQl1YXJ0LT5wb3J0LmZpZm9zaXplID0gdWFydF9jb25maWdbcG9ydC0+dHlwZV0uZmlmb19zaXplOwotCQkJdWFydC0+Y2FwYWJpbGl0aWVzID0gdWFydF9jb25maWdbcG9ydC0+dHlwZV0uZmxhZ3M7Ci0JCQl1YXJ0LT50eF9sb2Fkc3ogPSB1YXJ0X2NvbmZpZ1twb3J0LT50eXBlXS50eF9sb2Fkc3o7Ci0JCX0KKwkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1RZUEUpCisJCQlzZXJpYWw4MjUwX2luaXRfZml4ZWRfdHlwZV9wb3J0KHVhcnQsIHBvcnQtPnR5cGUpOwogCiAJCXNldF9pb19mcm9tX3VwaW8oJnVhcnQtPnBvcnQpOwogCQkvKiBQb3NzaWJseSBvdmVycmlkZSBkZWZhdWx0IEkvTyBmdW5jdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggYjI4YWYxMy4uMDFjMDEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC03NjAsNyArNzYwLDggQEAKIAkvKiBzdWJkZXZpY2UgMHgwMFBTIG1lYW5zIDxQPiBwYXJhbGxlbCwgPFM+IHNlcmlhbCAqLwogCXVuc2lnbmVkIGludCBudW1fc2VyaWFsID0gZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk5MDEpCisJaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05FVE1PU185OTAxKSB8fAorCQkoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ORVRNT1NfOTg2NSkpCiAJCXJldHVybiAwOwogCWlmIChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JQk0gJiYKIAkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAyOTkpCkBAIC0xNDc5LDYgKzE0ODAsNyBAQAogCiAJcGJuX2IwX2J0XzFfMTE1MjAwLAogCXBibl9iMF9idF8yXzExNTIwMCwKKwlwYm5fYjBfYnRfNF8xMTUyMDAsCiAJcGJuX2IwX2J0XzhfMTE1MjAwLAogCiAJcGJuX2IwX2J0XzFfNDYwODAwLApAQCAtMTcwMyw2ICsxNzA1LDEyIEBACiAJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCiAJCS51YXJ0X29mZnNldAk9IDgsCiAJfSwKKwlbcGJuX2IwX2J0XzRfMTE1MjAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKKwkJLm51bV9wb3J0cwk9IDQsCisJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCisJCS51YXJ0X29mZnNldAk9IDgsCisJfSwKIAlbcGJuX2IwX2J0XzhfMTE1MjAwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKIAkJLm51bV9wb3J0cwk9IDgsCkBAIC0zMTkxLDYgKzMxOTksMTUgQEAKIAkJMHgxMjA4LCAweDAwMDQsIDAsIDAsCiAJCXBibl9iMF80XzkyMTYwMCB9LAogCisJewlQQ0lfVkVORE9SX0lEX0tPUkVOSVgsIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjIsCisJCTB4MTIwNCwgMHgwMDA0LCAwLCAwLAorCQlwYm5fYjBfNF85MjE2MDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfS09SRU5JWCwgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMiwKKwkJMHgxMjA4LCAweDAwMDQsIDAsIDAsCisJCXBibl9iMF80XzkyMTYwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9LT1JFTklYLCBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYzLAorCQkweDEyMDgsIDB4MDAwNCwgMCwgMCwKKwkJcGJuX2IwXzRfOTIxNjAwIH0sCiAJLyoKIAkgKiBEZWxsIFJlbW90ZSBBY2Nlc3MgQ2FyZCA0IC0gVGltX1RfTXVycGh5QERlbGwuY29tCiAJICovCkBAIC0zNjQ5LDYgKzM2NjYsMTggQEAKIAkJMCwgMCwgcGJuX2IwXzFfMTE1MjAwIH0sCiAKIAkvKgorCSAqIEJlc3QgQ29ubmVjdGl2aXR5IFBDSSBNdWx0aSBJL08gY2FyZHMKKwkgKi8KKworCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJCTB4QTAwMCwgMHgxMDAwLAorCQkwLCAwLCBwYm5fYjBfMV8xMTUyMDAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJCTB4QTAwMCwgMHgzMDA0LAorCQkwLCAwLCBwYm5fYjBfYnRfNF8xMTUyMDAgfSwKKworCS8qCiAJICogVGhlc2UgZW50cmllcyBtYXRjaCBkZXZpY2VzIHdpdGggY2xhc3MgQ09NTVVOSUNBVElPTl9TRVJJQUwsCiAJICogQ09NTVVOSUNBVElPTl9NT0RFTSBvciBDT01NVU5JQ0FUSU9OX01VTFRJU0VSSUFMCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA5ZmY0N2RiMC4uNzQ2ZTA3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xMDg2LDEyICsxMDg2LDEyIEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HCi0JdHJpc3RhdGUgIlBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX1BNQUMKKwl0cmlzdGF0ZSAiTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoTTY4SyAmJiBNQUMpIHx8IChQUENfT0YgJiYgUFBDX1BNQUMpCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFppbG9nIHo4NUMzMCBzZXJpYWwgcG9ydHMgZm91bmQgb24KLQkgIFBvd2VyTWFjIG1hY2hpbmVzLgorCSAgKFBvd2VyKU1hYyBtYWNoaW5lcy4KIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0aGVzZSBzZXJpYWwgcG9ydHMuCiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HX1RUWVMKQEAgLTExMTYsMTYgKzExMTYsMTYgQEAKIAkgIHVuYWJsZSB0byB1c2UgdGhlIDgyNTAgbW9kdWxlIGZvciBQQ01DSUEgb3Igb3RoZXIgMTZDNTUwLXN0eWxlCiAJICBVQVJUcy4KIAotCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciBwb3dlcm1hYworCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciAoUG93ZXIpTWFjCiAJICB0byBhcHBlYXIgYXMgL2Rldi90dHlTbi4KIAogY29uZmlnIFNFUklBTF9QTUFDWklMT0dfQ09OU09MRQotCWJvb2wgIkNvbnNvbGUgb24gUG93ZXJNYWMgejg1YzMwIHNlcmlhbCBwb3J0IgorCWJvb2wgIkNvbnNvbGUgb24gTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBzZXJpYWwgcG9ydCIKIAlkZXBlbmRzIG9uIFNFUklBTF9QTUFDWklMT0c9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCiAJaGVscAogCSAgSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHo4NWMzMCBzZXJpYWwgcG9ydAotCSAgb24geW91ciBQb3dlck1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKKwkgIG9uIHlvdXIgKFBvd2VyKU1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKIAkgIFkgdG8gdGhpcyBvcHRpb24uCiAKIGNvbmZpZyBTRVJJQUxfTEg3QTQwWApAQCAtMTQxOCw0MiArMTQxOCwzNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmZpbl9zcG9ydF91YXJ0LgogCi1jaG9pY2UKLQlwcm9tcHQgIkJhdWQgcmF0ZSBmb3IgQmxhY2tmaW4gU1BPUlQgVUFSVCIKLQlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUCi0JZGVmYXVsdCBTRVJJQUxfU1BPUlRfQkFVRF9SQVRFXzU3NjAwCitjb25maWcgU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorCWJvb2wgIkNvbnNvbGUgb24gQmxhY2tmaW4gc3BvcnQgZW11bGF0ZWQgdWFydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUPXkKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCitjb25maWcgU0VSSUFMX0JGSU5fU1BPUlQwX1VBUlQKKwlib29sICJFbmFibGUgVUFSVCBvdmVyIFNQT1JUMCIKKwlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUICYmICEoQkY1NDIgfHwgQkY1NDJNIHx8IEJGNTQ0IHx8IEJGNTQ0TSkKIAloZWxwCi0JICBDaG9vc2UgYSBiYXVkIHJhdGUgZm9yIHRoZSBTUE9SVCBVQVJULCBvdGhlciB1YXJ0IHNldHRpbmdzIGFyZQotCSAgOCBiaXQsIDEgc3RvcCBiaXQsIG5vIHBhcml0eSwgbm8gZmxvdyBjb250cm9sLgorCSAgRW5hYmxlIFVBUlQgb3ZlciBTUE9SVDAKIAotY29uZmlnIFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfMTE1MjAwCi0JYm9vbCAiMTE1MjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV81NzYwMAotCWJvb2wgIjU3NjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV8zODQwMAotCWJvb2wgIjM4NDAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV8xOTIwMAotCWJvb2wgIjE5MjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV85NjAwCi0JYm9vbCAiOTYwMCIKLWVuZGNob2ljZQotCi1jb25maWcgU1BPUlRfQkFVRF9SQVRFCi0JaW50Citjb25maWcgU0VSSUFMX0JGSU5fU1BPUlQxX1VBUlQKKwlib29sICJFbmFibGUgVUFSVCBvdmVyIFNQT1JUMSIKIAlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUCi0JZGVmYXVsdCAxMTUyMDAgaWYgKFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfMTE1MjAwKQotCWRlZmF1bHQgNTc2MDAgaWYgKFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfNTc2MDApCi0JZGVmYXVsdCAzODQwMCBpZiAoU0VSSUFMX1NQT1JUX0JBVURfUkFURV8zODQwMCkKLQlkZWZhdWx0IDE5MjAwIGlmIChTRVJJQUxfU1BPUlRfQkFVRF9SQVRFXzE5MjAwKQotCWRlZmF1bHQgOTYwMCBpZiAoU0VSSUFMX1NQT1JUX0JBVURfUkFURV85NjAwKQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQxCisKK2NvbmZpZyBTRVJJQUxfQkZJTl9TUE9SVDJfVUFSVAorCWJvb2wgIkVuYWJsZSBVQVJUIG92ZXIgU1BPUlQyIgorCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fU1BPUlQgJiYgKEJGNTR4IHx8IEJGNTM4IHx8IEJGNTM5KQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQyCisKK2NvbmZpZyBTRVJJQUxfQkZJTl9TUE9SVDNfVUFSVAorCWJvb2wgIkVuYWJsZSBVQVJUIG92ZXIgU1BPUlQzIgorCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fU1BPUlQgJiYgKEJGNTR4IHx8IEJGNTM4IHx8IEJGNTM5KQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQzCiAKIGNvbmZpZyBTRVJJQUxfVElNQkVSREFMRQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aW1iZXJkYWxlIFVBUlQiCi0JZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCS0tLWhlbHAtLS0KIAlBZGQgc3VwcG9ydCBmb3IgVUFSVCBjb250cm9sbGVyIG9uIHRpbWJlcmRhbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggZWY3YWRjOC4uY2U2YzM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtNzEsNiArNzEsNyBAQAogCXVuc2lnbmVkIGludAkJaW07CS8qIGludGVycnVwdCBtYXNrICovCiAJdW5zaWduZWQgaW50CQlvbGRfc3RhdHVzOwogCXVuc2lnbmVkIGludAkJaWZsczsJLyogdmVuZG9yLXNwZWNpZmljICovCisJYm9vbAkJCWF1dG9ydHM7CiB9OwogCiAvKiBUaGVyZSBpcyBieSBub3cgYXQgbGVhc3Qgb25lIHZlbmRvciB3aXRoIGRpZmZlcmluZyBkZXRhaWxzLCBzbyBoYW5kbGUgaXQgKi8KQEAgLTMwOCw2ICszMDksMTEgQEAKIAlUSU9DTUJJVChUSU9DTV9PVVQxLCBVQVJUMDExX0NSX09VVDEpOwogCVRJT0NNQklUKFRJT0NNX09VVDIsIFVBUlQwMTFfQ1JfT1VUMik7CiAJVElPQ01CSVQoVElPQ01fTE9PUCwgVUFSVDAxMV9DUl9MQkUpOworCisJaWYgKHVhcC0+YXV0b3J0cykgeworCQkvKiBXZSBuZWVkIHRvIGRpc2FibGUgYXV0by1SVFMgaWYgd2Ugd2FudCB0byB0dXJuIFJUUyBvZmYgKi8KKwkJVElPQ01CSVQoVElPQ01fUlRTLCBVQVJUMDExX0NSX1JUU0VOKTsKKwl9CiAjdW5kZWYgVElPQ01CSVQKIAogCXdyaXRldyhjciwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0NSKTsKQEAgLTQzNyw2ICs0NDMsNyBAQAogCS8qCiAJICogZGlzYWJsZSB0aGUgcG9ydAogCSAqLworCXVhcC0+YXV0b3J0cyA9IGZhbHNlOwogCXdyaXRldyhVQVJUMDF4X0NSX1VBUlRFTiB8IFVBUlQwMTFfQ1JfVFhFLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCiAJLyoKQEAgLTQ1Niw2ICs0NjMsNyBAQAogcGwwMTFfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogeworCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CiAJdW5zaWduZWQgaW50IGxjcl9oLCBvbGRfY3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgYmF1ZCwgcXVvdDsKQEAgLTUzMiw2ICs1NDAsMTcgQEAKIAlvbGRfY3IgPSByZWFkdyhwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9DUik7CiAJd3JpdGV3KDAsIHBvcnQtPm1lbWJhc2UgKyBVQVJUMDExX0NSKTsKIAorCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQlpZiAob2xkX2NyICYgVUFSVDAxMV9DUl9SVFMpCisJCQlvbGRfY3IgfD0gVUFSVDAxMV9DUl9SVFNFTjsKKworCQlvbGRfY3IgfD0gVUFSVDAxMV9DUl9DVFNFTjsKKwkJdWFwLT5hdXRvcnRzID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlvbGRfY3IgJj0gfihVQVJUMDExX0NSX0NUU0VOIHwgVUFSVDAxMV9DUl9SVFNFTik7CisJCXVhcC0+YXV0b3J0cyA9IGZhbHNlOworCX0KKwogCS8qIFNldCBiYXVkIHJhdGUgKi8KIAl3cml0ZXcocXVvdCAmIDB4M2YsIHBvcnQtPm1lbWJhc2UgKyBVQVJUMDExX0ZCUkQpOwogCXdyaXRldyhxdW90ID4+IDYsIHBvcnQtPm1lbWJhc2UgKyBVQVJUMDExX0lCUkQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwppbmRleCA5ZDk0OGJjLi4yYzliZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtMTIxMyw2ICsxMjEzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKK3N0YXRpYyBpbnQgYXRtZWxfcG9sbF9nZXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXdoaWxlICghKFVBUlRfR0VUX0NTUihwb3J0KSAmIEFUTUVMX1VTX1JYUkRZKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gVUFSVF9HRVRfQ0hBUihwb3J0KTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfcG9sbF9wdXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIGNoKQoreworCXdoaWxlICghKFVBUlRfR0VUX0NTUihwb3J0KSAmIEFUTUVMX1VTX1RYUkRZKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlVQVJUX1BVVF9DSEFSKHBvcnQsIGNoKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHVhcnRfb3BzIGF0bWVsX3BvcHMgPSB7CiAJLnR4X2VtcHR5CT0gYXRtZWxfdHhfZW1wdHksCiAJLnNldF9tY3RybAk9IGF0bWVsX3NldF9tY3RybCwKQEAgLTEyMzIsNiArMTI1MCwxMCBAQAogCS5jb25maWdfcG9ydAk9IGF0bWVsX2NvbmZpZ19wb3J0LAogCS52ZXJpZnlfcG9ydAk9IGF0bWVsX3ZlcmlmeV9wb3J0LAogCS5wbQkJPSBhdG1lbF9zZXJpYWxfcG0sCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCS5wb2xsX2dldF9jaGFyCT0gYXRtZWxfcG9sbF9nZXRfY2hhciwKKwkucG9sbF9wdXRfY2hhcgk9IGF0bWVsX3BvbGxfcHV0X2NoYXIsCisjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCmluZGV4IDM3YWQwYzQuLmExYTBlNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgogCi0jZGVmaW5lIEJDTTYzWFhfTlJfVUFSVFMJMQorI2RlZmluZSBCQ002M1hYX05SX1VBUlRTCTIKIAogc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgcG9ydHNbQkNNNjNYWF9OUl9VQVJUU107CiAKQEAgLTc4NCw3ICs3ODQsNyBAQAogCS5kZXZfbmFtZQk9ICJ0dHlTIiwKIAkubWFqb3IJCT0gVFRZX01BSk9SLAogCS5taW5vcgkJPSA2NCwKLQkubnIJCT0gMSwKKwkubnIJCT0gQkNNNjNYWF9OUl9VQVJUUywKIAkuY29ucwkJPSBCQ002M1hYX0NPTlNPTEUsCiB9OwogCkBAIC04MjYsMTEgKzgyNiwxMiBAQAogCXBvcnQtPmRldiA9ICZwZGV2LT5kZXY7CiAJcG9ydC0+Zmlmb3NpemUgPSAxNjsKIAlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgLyAyOworCXBvcnQtPmxpbmUgPSBwZGV2LT5pZDsKIAljbGtfcHV0KGNsayk7CiAKIAlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmYmNtX3VhcnRfZHJpdmVyLCBwb3J0KTsKIAlpZiAocmV0KSB7Ci0JCWtmcmVlKHBvcnQpOworCQlwb3J0c1twZGV2LT5pZF0ubWVtYmFzZSA9IDA7CiAJCXJldHVybiByZXQ7CiAJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYyBiL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKaW5kZXggNTBhYmI3ZS4uZmNmMjczZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CkBAIC0yMzcsNyArMjM4LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19LR0RCX1NFUklBTF9DT05TT0xFX01PRFVMRSkKLQlpZiAoa2dkYl9jb25uZWN0ZWQgJiYga2dkYm9jX3BvcnRfbGluZSA9PSB1YXJ0LT5wb3J0LmxpbmUpCisJaWYgKGtnZGJfY29ubmVjdGVkICYmIGtnZGJvY19wb3J0X2xpbmUgPT0gdWFydC0+cG9ydC5saW5lCisJCSYmIGtnZGJvY19icmVha19lbmFibGVkKQogCQlpZiAoY2ggPT0gMHgzKSB7LyogQ3RybCArIEMgKi8KIAkJCWtnZGJfYnJlYWtwb2ludCgpOwogCQkJcmV0dXJuOwpAQCAtNDg4LDYgKzQ5MCw3IEBACiB7CiAJaW50IHhfcG9zLCBwb3M7CiAKKwlkbWFfZGlzYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOwogCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAJc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5wb3J0LmxvY2spOwogCkBAIC01MjEsNiArNTI0LDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdWFydC0+cG9ydC5sb2NrKTsKKwlkbWFfZW5hYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CiAJZG1hX2VuYWJsZV9pcnEodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCiAJbW9kX3RpbWVyKCYodWFydC0+cnhfZG1hX3RpbWVyKSwgamlmZmllcyArIERNQV9SWF9GTFVTSF9KSUZGSUVTKTsKQEAgLTc0NiwxNSArNzUwLDYgQEAKIAkJCVN0YXR1cyBpbnRlcnJ1cHQuXG4iKTsKIAl9CiAKLQlpZiAodWFydC0+Y3RzX3BpbiA+PSAwKSB7Ci0JCWdwaW9fcmVxdWVzdCh1YXJ0LT5jdHNfcGluLCBEUklWRVJfTkFNRSk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dCh1YXJ0LT5jdHNfcGluLCAxKTsKLQl9Ci0JaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewotCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodWFydC0+cnRzX3BpbiwgMCk7Ci0JfQotCiAJLyogQ1RTIFJUUyBQSU5zIGFyZSBuZWdhdGl2ZSBhc3NlcnRpdmUuICovCiAJVUFSVF9QVVRfTUNSKHVhcnQsIEFDVFMpOwogCVVBUlRfU0VUX0lFUih1YXJ0LCBFRFNTSSk7CkBAIC04MDEsMTAgKzc5Niw2IEBACiAJCWdwaW9fZnJlZSh1YXJ0LT5ydHNfcGluKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9IQVJEX0NUU1JUUwotCWlmICh1YXJ0LT5jdHNfcGluID49IDApCi0JCWdwaW9fZnJlZSh1YXJ0LT5jdHNfcGluKTsKLQlpZiAodWFydC0+cnRzX3BpbiA+PSAwKQotCQlncGlvX2ZyZWUodWFydC0+cnRzX3Bpbik7CiAJaWYgKFVBUlRfR0VUX0lFUih1YXJ0KSAmJiBFRFNTSSkKIAkJZnJlZV9pcnEodWFydC0+c3RhdHVzX2lycSwgdWFydCk7CiAjZW5kaWYKQEAgLTE0MDksOCArMTQwMCw3IEBACiAJCQljb250aW51ZTsKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOwogCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiA9IE5VTEw7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMpCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKQogCQlncGlvX2ZyZWUoYmZpbl9zZXJpYWxfcG9ydHNbaV0uY3RzX3Bpbik7CiAJCWdwaW9fZnJlZShiZmluX3NlcmlhbF9wb3J0c1tpXS5ydHNfcGluKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwppbmRleCAwODhiYjM1Li43YzcyODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpAQCAtMSwyNyArMSwxMSBAQAogLyoKLSAqIEZpbGU6CWxpbnV4L2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jCisgKiBCbGFja2ZpbiBPbi1DaGlwIFNwb3J0IEVtdWxhdGVkIFVBUlQgRHJpdmVyCiAgKgotICogQmFzZWQgb246CWRyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYnkgQXVicmV5IExpLgotICogQXV0aG9yOglSb3kgSHVhbmcgPHJveS5odWFuZ0BhbmFsb2cuY29tPgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoJTm92IDIyLCAyMDA2Ci0gKiBDb3B5cmlnaHQ6CShjKSAyMDA2LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogRGVzY3JpcHRpb246IHRoaXMgZHJpdmVyIGVuYWJsZSBTUE9SVHMgb24gQmxhY2tmaW4gZW11bGF0ZSBVQVJULgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qCkBAIC0yOSwzOSArMTMsMTggQEAKICAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9VcGxvYWRlZEZpbGVzL0FwcGxpY2F0aW9uX05vdGVzLzM5OTQ0NzY2M0VFMTkxLnBkZgogICogVGhpcyBhcHBsaWNhdGlvbiBub3RlIGRlc2NyaWJlIGhvdyB0byBpbXBsZW1lbnQgYSBVQVJUIG9uIGEgU2hhcmMgRFNQLAogICogYnV0IHRoaXMgZHJpdmVyIGlzIGltcGxlbWVudGVkIG9uIEJsYWNrZmluIFByb2Nlc3Nvci4KKyAqIFRyYW5zbWl0IEZyYW1lIFN5bmMgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgdG8gdHJhbnNmZXIgZGF0YSBvdXQuCiAgKi8KIAotLyogQWZ0ZXIgcmVzZXQsIHRoZXJlIGlzIGEgcHJlbHVkZSBvZiBsb3cgbGV2ZWwgcHVsc2Ugd2hlbiB0cmFuc21pdCBkYXRhIGZpcnN0Ci0gKiB0aW1lLiBObyBhZGR0aW9uYWwgcHVsc2UgaW4gZm9sbG93aW5nIHRyYW5zbWl0LgotICogQWNjb3JkaW5nIHRvIGRvY3VtZW50OgotICogVGhlIFNQT1JUcyBhcmUgcmVhZHkgdG8gc3RhcnQgdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZyBkYXRhIG5vIGxhdGVyIHRoYW4KLSAqIHRocmVlIHNlcmlhbCBjbG9jayBjeWNsZXMgYWZ0ZXIgdGhleSBhcmUgZW5hYmxlZCBpbiB0aGUgU1BPUlR4X1RDUjEgb3IKLSAqIFNQT1JUeF9SQ1IxIHJlZ2lzdGVyLiBObyBzZXJpYWwgY2xvY2sgY3ljbGVzIGFyZSBsb3N0IGZyb20gdGhpcyBwb2ludCBvbi4KLSAqIFRoZSBmaXJzdCBpbnRlcm5hbCBmcmFtZSBzeW5jIHdpbGwgb2NjdXIgb25lIGZyYW1lIHN5bmMgZGVsYXkgYWZ0ZXIgdGhlCi0gKiBTUE9SVHMgYXJlIHJlYWR5LiBFeHRlcm5hbCBmcmFtZSBzeW5jcyBjYW4gb2NjdXIgYXMgc29vbiBhcyB0aGUgU1BPUlQgaXMKLSAqIHJlYWR5LgotICovCisvKiAjZGVmaW5lIERFQlVHICovCiAKLS8qIFRoYW5rcyB0byBBeGVsIEFsYXRhbG8gPGF4ZWxAcnViaWNvLnNlPiBmb3IgZml4aW5nIHNwb3J0IHJ4IGJ1Zy4gU29tZXRpbWVzCi0gKiBzcG9ydCByZWNlaXZlcyBkYXRhIGluY29ycmVjdGx5LiBUaGUgZm9sbG93aW5nIGlzIEF4ZWwncyB3b3Jkcy4KLSAqIEFzIEVFLTE5MSwgc3BvcnQgcnggc2FtcGxlcyAzIHRpbWVzIG9mIHRoZSBVQVJUIGJhdWRyYXRlIGFuZCB0YWtlcyB0aGUKLSAqIG1pZGRsZSBzbWFwbGUgb2YgZXZlcnkgMyBzYW1wbGVzIGFzIHRoZSBkYXRhIGJpdC4gRm9yIGEgOC1OLTEgVUFSVCBzZXR0aW5nLAotICogMzAgc2FtcGxlcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBhIGJ5dGUuIElmIHRyYW5zbWl0dGVyIHNlbmRzIGEgMS8zIGJpdCBzaG9ydAotICogYnl0ZSBkdWUgdG8gYnVhZHJhdGUgZHJpZnQsIHRoZW4gdGhlIDMwdGggc2FtcGxlIG9mIGEgYnl0ZSwgdGhpcyBzYW1wbGUgaXMKLSAqIGFsc28gdGhlIHRoaXJkIHNhbXBsZSBvZiB0aGUgc3RvcCBiaXQsIHdpbGwgaGFwcGVucyBvbiB0aGUgaW1tZWRpYXRlbHkKLSAqIGZvbGxvd2luZyBzdGFydCBiaXQgd2hpY2ggd2lsbCBiZSB0aHJvd24gYXdheSBhbmQgbWlzc2VkLiBUaHVzIHNpbmNlIHBhcnRzCi0gKiBvZiB0aGUgc3RhcnRiaXQgd2lsbCBiZSBtaXNzZWQgYW5kIHRoZSByZWNlaXZlciB3aWxsIGJlZ2luIHRvIGRyaWZ0LCB0aGUKLSAqIGVmZmVjdCBhY2N1bXVsYXRlcyBvdmVyIHRpbWUgdW50aWwgc3luY2hyb25pemF0aW9uIGlzIGxvc3QuCi0gKiBJZiBvbmx5IHJlcXVpcmUgMiBzYW1wbGVzIG9mIHRoZSBzdG9wYml0IChieSBzYW1wbGluZyBpbiB0b3RhbCAyOSBzYW1wbGVzKSwKLSAqIHRoZW4gYSB0byBzaG9ydCBieXRlIGFzIGluIHRoZSBjYXNlIGFib3ZlIHdpbGwgYmUgdG9sZXJhdGVkLiBUaGVuIHRoZSAxLzMKLSAqIGVhcmx5IHN0YXJ0Yml0IHdpbGwgdHJpZ2dlciBhIGZyYW1lc3luYyBzaW5jZSB0aGUgbGFzdCByZWFkIGlzIGNvbXBsZXRlCi0gKiBhZnRlciBvbmx5IDIvMyBzdG9wYml0IGFuZCBmcmFtZXN5bmMgaXMgYWN0aXZlIGR1cmluZyB0aGUgbGFzdCAxLzMgbG9va2luZwotICogZm9yIGEgcG9zc2libGUgZWFybHkgc3RhcnRiaXQuICovCi0KLS8vI2RlZmluZSBERUJVRworI2RlZmluZSBEUlZfTkFNRSAiYmZpbi1zcG9ydC11YXJ0IgorI2RlZmluZSBERVZJQ0VfTkFNRQkidHR5U1MiCisjZGVmaW5lIHByX2ZtdChmbXQpIERSVl9OQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KQEAgLTc1LDIzICszOCwzNiBAQAogCiAjaW5jbHVkZSAiYmZpbl9zcG9ydF91YXJ0LmgiCiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQwX1VBUlQKIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MFtdID0KIAl7UF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywgXAogCSBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX0RSU0VDLCBQX1NQT1JUMF9EVFNFQywgMH07Ci0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVDFfVUFSVAogdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQxW10gPQogCXtQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLCBcCiAJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDB9OwotCi0jZGVmaW5lIERSVl9OQU1FICJiZmluLXNwb3J0LXVhcnQiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQyX1VBUlQKK3Vuc2lnbmVkIHNob3J0IGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MltdID0KKwl7UF9TUE9SVDJfVEZTLCBQX1NQT1JUMl9EVFBSSSwgUF9TUE9SVDJfVFNDTEssIFBfU1BPUlQyX1JGUywgXAorCVBfU1BPUlQyX0RSUFJJLCBQX1NQT1JUMl9SU0NMSywgUF9TUE9SVDJfRFJTRUMsIFBfU1BPUlQyX0RUU0VDLCAwfTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVDNfVUFSVAordW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQzW10gPQorCXtQX1NQT1JUM19URlMsIFBfU1BPUlQzX0RUUFJJLCBQX1NQT1JUM19UU0NMSywgUF9TUE9SVDNfUkZTLCBcCisJUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCBQX1NQT1JUM19EUlNFQywgUF9TUE9SVDNfRFRTRUMsIDB9OworI2VuZGlmCiAKIHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgewogCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKLQljaGFyCQkJKm5hbWU7Ci0KLQlpbnQJCQl0eF9pcnE7Ci0JaW50CQkJcnhfaXJxOwogCWludAkJCWVycl9pcnE7CisJdW5zaWduZWQgc2hvcnQJCWNzaXplOworCXVuc2lnbmVkIHNob3J0CQlyeG1hc2s7CisJdW5zaWduZWQgc2hvcnQJCXR4bWFzazE7CisJdW5zaWduZWQgc2hvcnQJCXR4bWFzazI7CisJdW5zaWduZWQgY2hhcgkJc3RvcGI7CisvKgl1bnNpZ25lZCBjaGFyCQlwYXJpYjsgKi8KIH07CiAKIHN0YXRpYyB2b2lkIHNwb3J0X3VhcnRfdHhfY2hhcnMoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXApOwpAQCAtOTksMzYgKzc1LDQyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eF9vbmVfYnl0ZShzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCwgdW5zaWduZWQgaW50IHZhbHVlKQogewotCXByX2RlYnVnKCIlcyB2YWx1ZToleFxuIiwgX19mdW5jX18sIHZhbHVlKTsKLQkvKiBQbGFjZSBhIFN0YXJ0IGFuZCBTdG9wIGJpdCAqLworCXByX2RlYnVnKCIlcyB2YWx1ZToleCwgbWFzazE9MHgleCwgbWFzazI9MHgleFxuIiwgX19mdW5jX18sIHZhbHVlLAorCQl1cC0+dHhtYXNrMSwgdXAtPnR4bWFzazIpOworCisJLyogUGxhY2UgU3RhcnQgYW5kIFN0b3AgYml0cyAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIlIyID0gYiMwMTExMTExMTEwMDsiCi0JCSJSMyA9IGIjMTAwMDAwMDAwMDE7IgotCQkiJTAgPDw9IDI7IgotCQkiJTAgPSAlMCAmIFIyOyIKLQkJIiUwID0gJTAgfCBSMzsiCi0JCTogIj1kIih2YWx1ZSkKLQkJOiAiZCIodmFsdWUpCi0JCTogIkFTVEFUIiwgIlIyIiwgIlIzIgorCQkiJVt2YWxdIDw8PSAxOyIKKwkJIiVbdmFsXSA9ICVbdmFsXSAmICVbbWFzazFdOyIKKwkJIiVbdmFsXSA9ICVbdmFsXSB8ICVbbWFzazJdOyIKKwkJOiBbdmFsXSIrZCIodmFsdWUpCisJCTogW21hc2sxXSJkIih1cC0+dHhtYXNrMSksIFttYXNrMl0iZCIodXAtPnR4bWFzazIpCisJCTogIkFTVEFUIgogCSk7CiAJcHJfZGVidWcoIiVzIHZhbHVlOiV4XG4iLCBfX2Z1bmNfXywgdmFsdWUpOwogCiAJU1BPUlRfUFVUX1RYKHVwLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ4X29uZV9ieXRlKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHJ4X29uZV9ieXRlKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwKQogewotCXVuc2lnbmVkIGludCB2YWx1ZSwgZXh0cmFjdDsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJdW5zaWduZWQgY2hhciBleHRyYWN0OwogCXUzMiB0bXBfbWFzazEsIHRtcF9tYXNrMiwgdG1wX3NoaWZ0LCB0bXA7CiAKLQl2YWx1ZSA9IFNQT1JUX0dFVF9SWDMyKHVwKTsKLQlwcl9kZWJ1ZygiJXMgdmFsdWU6JXhcbiIsIF9fZnVuY19fLCB2YWx1ZSk7CisJaWYgKCh1cC0+Y3NpemUgKyB1cC0+c3RvcGIpID4gNykKKwkJdmFsdWUgPSBTUE9SVF9HRVRfUlgzMih1cCk7CisJZWxzZQorCQl2YWx1ZSA9IFNQT1JUX0dFVF9SWCh1cCk7CiAKLQkvKiBFeHRyYWN0IDggYml0cyBkYXRhICovCisJcHJfZGVidWcoIiVzIHZhbHVlOiV4LCBjcz0lZCwgbWFzaz0weCV4XG4iLCBfX2Z1bmNfXywgdmFsdWUsCisJCXVwLT5jc2l6ZSwgdXAtPnJ4bWFzayk7CisKKwkvKiBFeHRyYWN0IGRhdGEgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIlW2V4dHJdID0gMDsiCi0JCSIlW21hc2sxXSA9IDB4MTgwMShaKTsiCi0JCSIlW21hc2syXSA9IDB4MDMwMChaKTsiCisJCSIlW21hc2sxXSA9ICVbcnhtYXNrXTsiCisJCSIlW21hc2syXSA9IDB4MDIwMChaKTsiCiAJCSIlW3NoaWZ0XSA9IDA7IgogCQkiTFNFVFVQKC5MbG9vcF9zLCAuTGxvb3BfZSkgTEMwID0gJVtsY107IgogCQkiLkxsb29wX3M6IgpAQCAtMTM4LDkgKzEyMCw5IEBACiAJCSIlW21hc2sxXSA9ICVbbWFzazFdIC0gJVttYXNrMl07IgogCQkiLkxsb29wX2U6IgogCQkiJVtzaGlmdF0gKz0gMTsiCi0JCTogW3ZhbF0iPWQiKHZhbHVlKSwgW2V4dHJdIj1kIihleHRyYWN0KSwgW3NoaWZ0XSI9ZCIodG1wX3NoaWZ0KSwgW3RtcF0iPWQiKHRtcCksCi0JCSAgW21hc2sxXSI9ZCIodG1wX21hc2sxKSwgW21hc2syXSI9ZCIodG1wX21hc2syKQotCQk6ICJkIih2YWx1ZSksIFtsY10iYSIoOCkKKwkJOiBbZXh0cl0iPSZkIihleHRyYWN0KSwgW3NoaWZ0XSI9JmQiKHRtcF9zaGlmdCksIFt0bXBdIj0mZCIodG1wKSwKKwkJICBbbWFzazFdIj0mZCIodG1wX21hc2sxKSwgW21hc2syXSI9JmQiKHRtcF9tYXNrMikKKwkJOiBbdmFsXSJkIih2YWx1ZSksIFtyeG1hc2tdImQiKHVwLT5yeG1hc2spLCBbbGNdImEiKHVwLT5jc2l6ZSkKIAkJOiAiQVNUQVQiLCAiTEIwIiwgIkxDMCIsICJMVDAiCiAJKTsKIApAQCAtMTQ4LDI5ICsxMzAsMjggQEAKIAlyZXR1cm4gZXh0cmFjdDsKIH0KIAotc3RhdGljIGludCBzcG9ydF91YXJ0X3NldHVwKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwLCBpbnQgc2NsaywgaW50IGJhdWRfcmF0ZSkKK3N0YXRpYyBpbnQgc3BvcnRfdWFydF9zZXR1cChzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCwgaW50IHNpemUsIGludCBiYXVkX3JhdGUpCiB7Ci0JaW50IHRjbGtkaXYsIHRmc2RpdiwgcmNsa2RpdjsKKwlpbnQgdGNsa2RpdiwgcmNsa2RpdjsKKwl1bnNpZ25lZCBpbnQgc2NsayA9IGdldF9zY2xrKCk7CiAKLQkvKiBTZXQgVENSMSBhbmQgVENSMiAqLwotCVNQT1JUX1BVVF9UQ1IxKHVwLCAoTEFURlMgfCBJVEZTIHwgVEZTUiB8IFRMU0JJVCB8IElUQ0xLKSk7Ci0JU1BPUlRfUFVUX1RDUjIodXAsIDEwKTsKKwkvKiBTZXQgVENSMSBhbmQgVENSMiwgVEZTUiBpcyBub3QgZW5hYmxlZCBmb3IgdWFydCAqLworCVNQT1JUX1BVVF9UQ1IxKHVwLCAoSVRGUyB8IFRMU0JJVCB8IElUQ0xLKSk7CisJU1BPUlRfUFVUX1RDUjIodXAsIHNpemUgKyAxKTsKIAlwcl9kZWJ1ZygiJXMgVENSMToleCwgVENSMjoleFxuIiwgX19mdW5jX18sIFNQT1JUX0dFVF9UQ1IxKHVwKSwgU1BPUlRfR0VUX1RDUjIodXApKTsKIAogCS8qIFNldCBSQ1IxIGFuZCBSQ1IyICovCiAJU1BPUlRfUFVUX1JDUjEodXAsIChSQ0tGRSB8IExBUkZTIHwgTFJGUyB8IFJGU1IgfCBJUkNMSykpOwotCVNQT1JUX1BVVF9SQ1IyKHVwLCAyOCk7CisJU1BPUlRfUFVUX1JDUjIodXAsIChzaXplICsgMSkgKiAyIC0gMSk7CiAJcHJfZGVidWcoIiVzIFJDUjE6JXgsIFJDUjI6JXhcbiIsIF9fZnVuY19fLCBTUE9SVF9HRVRfUkNSMSh1cCksIFNQT1JUX0dFVF9SQ1IyKHVwKSk7CiAKLQl0Y2xrZGl2ID0gc2Nsay8oMiAqIGJhdWRfcmF0ZSkgLSAxOwotCXRmc2RpdiA9IDEyOwotCXJjbGtkaXYgPSBzY2xrLygyICogYmF1ZF9yYXRlICogMykgLSAxOworCXRjbGtkaXYgPSBzY2xrIC8gKDIgKiBiYXVkX3JhdGUpIC0gMTsKKwlyY2xrZGl2ID0gc2NsayAvICgyICogYmF1ZF9yYXRlICogMikgLSAxOwogCVNQT1JUX1BVVF9UQ0xLRElWKHVwLCB0Y2xrZGl2KTsKLQlTUE9SVF9QVVRfVEZTRElWKHVwLCB0ZnNkaXYpOwogCVNQT1JUX1BVVF9SQ0xLRElWKHVwLCByY2xrZGl2KTsKIAlTU1lOQygpOwotCXByX2RlYnVnKCIlcyBzY2xrOiVkLCBiYXVkX3JhdGU6JWQsIHRjbGtkaXY6JWQsIHRmc2RpdjolZCwgcmNsa2RpdjolZFxuIiwKLQkJCV9fZnVuY19fLCBzY2xrLCBiYXVkX3JhdGUsIHRjbGtkaXYsIHRmc2RpdiwgcmNsa2Rpdik7CisJcHJfZGVidWcoIiVzIHNjbGs6JWQsIGJhdWRfcmF0ZTolZCwgdGNsa2RpdjolZCwgcmNsa2RpdjolZFxuIiwKKwkJCV9fZnVuY19fLCBzY2xrLCBiYXVkX3JhdGUsIHRjbGtkaXYsIHJjbGtkaXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODEsMjMgKzE2MiwyOSBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IGNoOwogCi0JZG8geworCXNwaW5fbG9jaygmdXAtPnBvcnQubG9jayk7CisKKwl3aGlsZSAoU1BPUlRfR0VUX1NUQVQodXApICYgUlhORSkgewogCQljaCA9IHJ4X29uZV9ieXRlKHVwKTsKIAkJdXAtPnBvcnQuaWNvdW50LnJ4Kys7CiAKLQkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVwLT5wb3J0LCBjaCkpCi0JCQk7Ci0JCWVsc2UKKwkJaWYgKCF1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKCZ1cC0+cG9ydCwgY2gpKQogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgVFRZX05PUk1BTCk7Ci0JfSB3aGlsZSAoU1BPUlRfR0VUX1NUQVQodXApICYgUlhORSk7CisJfQogCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzcG9ydF91YXJ0X3R4X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3BvcnRfdWFydF90eF9jaGFycyhkZXZfaWQpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gZGV2X2lkOworCisJc3Bpbl9sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwlzcG9ydF91YXJ0X3R4X2NoYXJzKHVwKTsKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yMDgsNiArMTk1LDggQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0ID0gU1BPUlRfR0VUX1NUQVQodXApOwogCisJc3Bpbl9sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwogCS8qIE92ZXJmbG93IGluIFJYIEZJRk8gKi8KIAlpZiAoc3RhdCAmIFJPVkYpIHsKIAkJdXAtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKQEAgLTIxNiwxNSArMjA1LDE2IEBACiAJfQogCS8qIFRoZXNlIHNob3VsZCBub3QgaGFwcGVuICovCiAJaWYgKHN0YXQgJiAoVE9WRiB8IFRVVkYgfCBSVVZGKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNQT1JUIEVycm9yOiVzICVzICVzXG4iLAotCQkJCShzdGF0ICYgVE9WRik/IlRYIG92ZXJmbG93IjoiIiwKLQkJCQkoc3RhdCAmIFRVVkYpPyJUWCB1bmRlcmZsb3ciOiIiLAotCQkJCShzdGF0ICYgUlVWRik/IlJYIHVuZGVyZmxvdyI6IiIpOworCQlwcl9lcnIoIlNQT1JUIEVycm9yOiVzICVzICVzXG4iLAorCQkgICAgICAgKHN0YXQgJiBUT1ZGKSA/ICJUWCBvdmVyZmxvdyIgOiAiIiwKKwkJICAgICAgIChzdGF0ICYgVFVWRikgPyAiVFggdW5kZXJmbG93IiA6ICIiLAorCQkgICAgICAgKHN0YXQgJiBSVVZGKSA/ICJSWCB1bmRlcmZsb3ciIDogIiIpOwogCQlTUE9SVF9QVVRfVENSMSh1cCwgU1BPUlRfR0VUX1RDUjEodXApICYgflRTUEVOKTsKIAkJU1BPUlRfUFVUX1JDUjEodXAsIFNQT1JUX0dFVF9SQ1IxKHVwKSAmIH5SU1BFTik7CiAJfQogCVNTWU5DKCk7CiAKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yMzIsNjAgKzIyMiwzNyBAQAogc3RhdGljIGludCBzcG9ydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7Ci0JY2hhciBidWZmZXJbMjBdOwotCWludCByZXR2YWw7CisJaW50IHJldDsKIAogCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNucHJpbnRmKGJ1ZmZlciwgMjAsICIlcyByeCIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+cnhfaXJxLCBzcG9ydF91YXJ0X3J4X2lycSwgSVJRRl9TQU1QTEVfUkFORE9NLCBidWZmZXIsIHVwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVzXG4iLCBidWZmZXIpOwotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc3BvcnRfdWFydF9yeF9pcnEsIDAsCisJCSJTUE9SVF9VQVJUX1JYIiwgdXApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBTUE9SVCBSWCBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCXNucHJpbnRmKGJ1ZmZlciwgMjAsICIlcyB0eCIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+dHhfaXJxLCBzcG9ydF91YXJ0X3R4X2lycSwgSVJRRl9TQU1QTEVfUkFORE9NLCBidWZmZXIsIHVwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVzXG4iLCBidWZmZXIpOworCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSsxLCBzcG9ydF91YXJ0X3R4X2lycSwgMCwKKwkJIlNQT1JUX1VBUlRfVFgiLCB1cCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFNQT1JUIFRYIGludGVycnVwdFxuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCi0Jc25wcmludGYoYnVmZmVyLCAyMCwgIiVzIGVyciIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+ZXJyX2lycSwgc3BvcnRfdWFydF9lcnJfaXJxLCBJUlFGX1NBTVBMRV9SQU5ET00sIGJ1ZmZlciwgdXApOwotCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgJXNcbiIsIGJ1ZmZlcik7CisJcmV0ID0gcmVxdWVzdF9pcnEodXAtPmVycl9pcnEsIHNwb3J0X3VhcnRfZXJyX2lycSwgMCwKKwkJIlNQT1JUX1VBUlRfU1RBVFVTIiwgdXApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBTUE9SVCBzdGF0dXMgaW50ZXJydXB0XG4iKTsKIAkJZ290byBmYWlsMjsKIAl9CiAKLQlpZiAocG9ydC0+bGluZSkgewotCQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQxLCBEUlZfTkFNRSkpCi0JCQlnb3RvIGZhaWwzOwotCX0gZWxzZSB7Ci0JCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChiZmluX3VhcnRfcGluX3JlcV9zcG9ydDAsIERSVl9OQU1FKSkKLQkJCWdvdG8gZmFpbDM7Ci0JfQotCi0Jc3BvcnRfdWFydF9zZXR1cCh1cCwgZ2V0X3NjbGsoKSwgcG9ydC0+dWFydGNsayk7Ci0KLQkvKiBFbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KLQlTUE9SVF9QVVRfUkNSMSh1cCwgKFNQT1JUX0dFVF9SQ1IxKHVwKSB8IFJTUEVOKSk7Ci0JU1NZTkMoKTsKLQogCXJldHVybiAwOworIGZhaWwyOgorCWZyZWVfaXJxKHVwLT5wb3J0LmlycSsxLCB1cCk7CisgZmFpbDE6CisJZnJlZV9pcnEodXAtPnBvcnQuaXJxLCB1cCk7CiAKLQotZmFpbDM6Ci0JcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSI6IFJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKLQotCWZyZWVfaXJxKHVwLT5lcnJfaXJxLCB1cCk7Ci1mYWlsMjoKLQlmcmVlX2lycSh1cC0+dHhfaXJxLCB1cCk7Ci1mYWlsMToKLQlmcmVlX2lycSh1cC0+cnhfaXJxLCB1cCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3BvcnRfdWFydF90eF9jaGFycyhzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCkKQEAgLTM0NCwyMCArMzExLDE3IEBACiBzdGF0aWMgdm9pZCBzcG9ydF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7Ci0JdW5zaWduZWQgaW50IHN0YXQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKIAotCXN0YXQgPSBTUE9SVF9HRVRfU1RBVCh1cCk7Ci0Jd2hpbGUoIShzdGF0ICYgVFhIUkUpKSB7Ci0JCXVkZWxheSgxKTsKLQkJc3RhdCA9IFNQT1JUX0dFVF9TVEFUKHVwKTsKLQl9CiAJLyogQWx0aG91Z2ggdGhlIGhvbGQgcmVnaXN0ZXIgaXMgZW1wdHksIGxhc3QgYnl0ZSBpcyBzdGlsbCBpbiBzaGlmdAotCSAqIHJlZ2lzdGVyIGFuZCBub3Qgc2VudCBvdXQgeWV0LiBJZiBiYXVkIHJhdGUgaXMgbG93ZXIgdGhhbiBkZWZhdWx0LAotCSAqIGRlbGF5IHNob3VsZCBiZSBsb25nZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgYmF1ZCByYXRlIGlzIDk2MDAsCi0JICogdGhlIGRlbGF5IG11c3QgYmUgYXQgbGVhc3QgMm1zIGJ5IGV4cGVyaWVuY2UgKi8KLQl1ZGVsYXkoNTAwKTsKKwkgKiByZWdpc3RlciBhbmQgbm90IHNlbnQgb3V0IHlldC4gU28sIHB1dCBhIGR1bW15IGRhdGEgaW50byBUWCBGSUZPLgorCSAqIFRoZW4sIHNwb3J0IHR4IHN0b3BzIHdoZW4gbGFzdCBieXRlIGlzIHNoaWZ0IG91dCBhbmQgdGhlIGR1bW15CisJICogZGF0YSBpcyBtb3ZlZCBpbnRvIHRoZSBzaGlmdCByZWdpc3Rlci4KKwkgKi8KKwlTUE9SVF9QVVRfVFgodXAsIDB4ZmZmZik7CisJd2hpbGUgKCEoU1BPUlRfR0VUX1NUQVQodXApICYgVFhIUkUpKQorCQljcHVfcmVsYXgoKTsKIAogCVNQT1JUX1BVVF9UQ1IxKHVwLCAoU1BPUlRfR0VUX1RDUjEodXApICYgflRTUEVOKSk7CiAJU1NZTkMoKTsKQEAgLTM3MCw2ICszMzQsNyBAQAogCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKilwb3J0OwogCiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisKIAkvKiBXcml0ZSBkYXRhIGludG8gU1BPUlQgRklGTyBiZWZvcmUgZW5hYmxlIFNQUk9UIHRvIHRyYW5zbWl0ICovCiAJc3BvcnRfdWFydF90eF9jaGFycyh1cCk7CiAKQEAgLTQwMywzNyArMzY4LDI0IEBACiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBEaXNhYmxlIHNwb3J0ICovCiAJU1BPUlRfUFVUX1RDUjEodXAsIChTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pKTsKIAlTUE9SVF9QVVRfUkNSMSh1cCwgKFNQT1JUX0dFVF9SQ1IxKHVwKSAmIH5SU1BFTikpOwogCVNTWU5DKCk7CiAKLQlpZiAocG9ydC0+bGluZSkgewotCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdChiZmluX3VhcnRfcGluX3JlcV9zcG9ydDEpOwotCX0gZWxzZSB7Ci0JCXBlcmlwaGVyYWxfZnJlZV9saXN0KGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MCk7Ci0JfQotCi0JZnJlZV9pcnEodXAtPnJ4X2lycSwgdXApOwotCWZyZWVfaXJxKHVwLT50eF9pcnEsIHVwKTsKKwlmcmVlX2lycSh1cC0+cG9ydC5pcnEsIHVwKTsKKwlmcmVlX2lycSh1cC0+cG9ydC5pcnErMSwgdXApOwogCWZyZWVfaXJxKHVwLT5lcnJfaXJxLCB1cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNwb3J0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCi0JCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCi17Ci0JcHJfZGVidWcoIiVzIGVudGVyLCBjX2NmbGFnOiUwOHhcbiIsIF9fZnVuY19fLCB0ZXJtaW9zLT5jX2NmbGFnKTsKLQl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIENTOCAscG9ydC0+dWFydGNsayk7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpzcG9ydF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gdXAtPm5hbWU7CisJcmV0dXJuIHVwLT5wb3J0LnR5cGUgPT0gUE9SVF9CRklOX1NQT1JUID8gIkJGSU4tU1BPUlQtVUFSVCIgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBzcG9ydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTQ2MSw2ICs0MTMsMTEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNwb3J0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXByX2RlYnVnKCIlcyBlbnRlciwgY19jZmxhZzolMDh4XG4iLCBfX2Z1bmNfXywgdGVybWlvcy0+Y19jZmxhZyk7CisKKwlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M4OgorCQl1cC0+Y3NpemUgPSA4OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJdXAtPmNzaXplID0gNzsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCXVwLT5jc2l6ZSA9IDY7CisJCWJyZWFrOworCWNhc2UgQ1M1OgorCQl1cC0+Y3NpemUgPSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl93YXJuaW5nKCJyZXF1ZXN0ZWQgd29yZCBsZW5ndGggbm90IHN1cHBvcnRlZFxuIik7CisJfQorCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpIHsKKwkJdXAtPnN0b3BiID0gMTsKKwl9CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJcHJfd2FybmluZygiUEFSRU4gYml0cyBpcyBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCS8qIHVwLT5wYXJpYiA9IDE7ICovCisJfQorCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IE9FOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gKEZFIHwgUEUpOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gQkk7CisKKwkvKgorCSAqIENoYXJhY3RlcnMgdG8gaWdub3JlCisJICovCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEZFIHwgUEU7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05CUkspIHsKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEJJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IE9FOworCX0KKworCS8qIFJYIGV4dHJhY3QgbWFzayAqLworCXVwLT5yeG1hc2sgPSAweDAxIHwgKCgodXAtPmNzaXplICsgdXAtPnN0b3BiKSAqIDIgLSAxKSA8PCAweDgpOworCS8qIFRYIG1hc2tzLCA4IGJpdCBkYXRhIGFuZCAxIGJpdCBzdG9wIGZvciBleGFtcGxlOgorCSAqIG1hc2sxID0gYiMwMTExMTExMTEwCisJICogbWFzazIgPSBiIzEwMDAwMDAwMDAKKwkgKi8KKwlmb3IgKGkgPSAwLCB1cC0+dHhtYXNrMSA9IDA7IGkgPCB1cC0+Y3NpemU7IGkrKykKKwkJdXAtPnR4bWFzazEgfD0gKDE8PGkpOworCXVwLT50eG1hc2syID0gKDE8PGkpOworCWlmICh1cC0+c3RvcGIpIHsKKwkJKytpOworCQl1cC0+dHhtYXNrMiB8PSAoMTw8aSk7CisJfQorCXVwLT50eG1hc2sxIDw8PSAxOworCXVwLT50eG1hc2syIDw8PSAxOworCS8qIHVhcnQgYmF1ZCByYXRlICovCisJcG9ydC0+dWFydGNsayA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIGdldF9zY2xrKCkvMTYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgVUFSVCAqLworCVNQT1JUX1BVVF9UQ1IxKHVwLCBTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pOworCVNQT1JUX1BVVF9SQ1IxKHVwLCBTUE9SVF9HRVRfUkNSMSh1cCkgJiB+UlNQRU4pOworCisJc3BvcnRfdWFydF9zZXR1cCh1cCwgdXAtPmNzaXplICsgdXAtPnN0b3BiLCBwb3J0LT51YXJ0Y2xrKTsKKworCS8qIGRyaXZlciBUWCBsaW5lIGhpZ2ggYWZ0ZXIgY29uZmlnLCBvbmUgZHVtbXkgZGF0YSBpcworCSAqIG5lY2Vzc2FyeSB0byBzdG9wIHNwb3J0IGFmdGVyIHNoaWZ0IG9uZSBieXRlCisJICovCisJU1BPUlRfUFVUX1RYKHVwLCAweGZmZmYpOworCVNQT1JUX1BVVF9UWCh1cCwgMHhmZmZmKTsKKwlTUE9SVF9QVVRfVENSMSh1cCwgKFNQT1JUX0dFVF9UQ1IxKHVwKSB8IFRTUEVOKSk7CisJU1NZTkMoKTsKKwl3aGlsZSAoIShTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEhSRSkpCisJCWNwdV9yZWxheCgpOworCVNQT1JUX1BVVF9UQ1IxKHVwLCBTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pOworCVNTWU5DKCk7CisKKwkvKiBQb3J0IHNwZWVkIGNoYW5nZWQsIHVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4gKi8KKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIHBvcnQtPnVhcnRjbGspOworCisJLyogRW5hYmxlIHNwb3J0IHJ4ICovCisJU1BPUlRfUFVUX1JDUjEodXAsIFNQT1JUX0dFVF9SQ1IxKHVwKSB8IFJTUEVOKTsKKwlTU1lOQygpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworfQorCiBzdHJ1Y3QgdWFydF9vcHMgc3BvcnRfdWFydF9vcHMgPSB7CiAJLnR4X2VtcHR5CT0gc3BvcnRfdHhfZW1wdHksCiAJLnNldF9tY3RybAk9IHNwb3J0X3NldF9tY3RybCwKQEAgLTQ4MCwxMzggKzUzNiwzMTkgQEAKIAkudmVyaWZ5X3BvcnQJPSBzcG9ydF92ZXJpZnlfcG9ydCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0IHNwb3J0X3VhcnRfcG9ydHNbXSA9IHsKLQl7IC8qIFNQT1JUIDAgKi8KLQkJLm5hbWUJPSAiU1BPUlQwIiwKLQkJLnR4X2lycSA9IElSUV9TUE9SVDBfVFgsCi0JCS5yeF9pcnEgPSBJUlFfU1BPUlQwX1JYLAotCQkuZXJyX2lycT0gSVJRX1NQT1JUMF9FUlJPUiwKLQkJLnBvcnQJPSB7Ci0JCQkudHlwZQkJPSBQT1JUX0JGSU5fU1BPUlQsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopU1BPUlQwX1RDUjEsCi0JCQkubWFwYmFzZQk9IFNQT1JUMF9UQ1IxLAotCQkJLmlycQkJPSBJUlFfU1BPUlQwX1JYLAotCQkJLnVhcnRjbGsJPSBDT05GSUdfU1BPUlRfQkFVRF9SQVRFLAotCQkJLmZpZm9zaXplCT0gOCwKLQkJCS5vcHMJCT0gJnNwb3J0X3VhcnRfb3BzLAotCQkJLmxpbmUJCT0gMCwKLQkJfSwKLQl9LCB7IC8qIFNQT1JUIDEgKi8KLQkJLm5hbWUJPSAiU1BPUlQxIiwKLQkJLnR4X2lycSA9IElSUV9TUE9SVDFfVFgsCi0JCS5yeF9pcnEgPSBJUlFfU1BPUlQxX1JYLAotCQkuZXJyX2lycT0gSVJRX1NQT1JUMV9FUlJPUiwKLQkJLnBvcnQJPSB7Ci0JCQkudHlwZQkJPSBQT1JUX0JGSU5fU1BPUlQsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopU1BPUlQxX1RDUjEsCi0JCQkubWFwYmFzZQk9IFNQT1JUMV9UQ1IxLAotCQkJLmlycQkJPSBJUlFfU1BPUlQxX1JYLAotCQkJLnVhcnRjbGsJPSBDT05GSUdfU1BPUlRfQkFVRF9SQVRFLAotCQkJLmZpZm9zaXplCT0gOCwKLQkJCS5vcHMJCT0gJnNwb3J0X3VhcnRfb3BzLAotCQkJLmxpbmUJCT0gMSwKLQkJfSwKKyNkZWZpbmUgQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUUyA0CisKK3N0YXRpYyBzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICpiZmluX3Nwb3J0X3VhcnRfcG9ydHNbQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUU107CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorc3RhdGljIGludCBfX2luaXQKK3Nwb3J0X3VhcnRfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXA7CisJaW50IGJhdWQgPSA1NzYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKworCS8qIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQgKi8KKwlpZiAoY28tPmluZGV4IDwgMCB8fCBjby0+aW5kZXggPj0gQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1cCA9IGJmaW5fc3BvcnRfdWFydF9wb3J0c1tjby0+aW5kZXhdOworCWlmICghdXApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9wdGlvbnMpCisJCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKKworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKCZ1cC0+cG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHNwb3J0X3VhcnRfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwlzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCA9IChzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICopcG9ydDsKKworCXdoaWxlIChTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEYpCisJCWJhcnJpZXIoKTsKKworCXR4X29uZV9ieXRlKHVwLCBjaCk7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZworICovCitzdGF0aWMgdm9pZAorc3BvcnRfdWFydF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gYmZpbl9zcG9ydF91YXJ0X3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwlpZiAoU1BPUlRfR0VUX1RDUjEodXApICYgVFNQRU4pCisJCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBzcG9ydF91YXJ0X2NvbnNvbGVfcHV0Y2hhcik7CisJZWxzZSB7CisJCS8qIGR1bW15IGRhdGEgdG8gc3RhcnQgc3BvcnQgKi8KKwkJd2hpbGUgKFNQT1JUX0dFVF9TVEFUKHVwKSAmIFRYRikKKwkJCWJhcnJpZXIoKTsKKwkJU1BPUlRfUFVUX1RYKHVwLCAweGZmZmYpOworCQkvKiBFbmFibGUgdHJhbnNtaXQsIHRoZW4gYW4gaW50ZXJydXB0IHdpbGwgZ2VuZXJhdGVkICovCisJCVNQT1JUX1BVVF9UQ1IxKHVwLCAoU1BPUlRfR0VUX1RDUjEodXApIHwgVFNQRU4pKTsKKwkJU1NZTkMoKTsKKworCQl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVwLT5wb3J0LCBzLCBjb3VudCwgc3BvcnRfdWFydF9jb25zb2xlX3B1dGNoYXIpOworCisJCS8qIEFsdGhvdWdoIHRoZSBob2xkIHJlZ2lzdGVyIGlzIGVtcHR5LCBsYXN0IGJ5dGUgaXMgc3RpbGwgaW4gc2hpZnQKKwkJICogcmVnaXN0ZXIgYW5kIG5vdCBzZW50IG91dCB5ZXQuIFNvLCBwdXQgYSBkdW1teSBkYXRhIGludG8gVFggRklGTy4KKwkJICogVGhlbiwgc3BvcnQgdHggc3RvcHMgd2hlbiBsYXN0IGJ5dGUgaXMgc2hpZnQgb3V0IGFuZCB0aGUgZHVtbXkKKwkJICogZGF0YSBpcyBtb3ZlZCBpbnRvIHRoZSBzaGlmdCByZWdpc3Rlci4KKwkJICovCisJCXdoaWxlIChTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEYpCisJCQliYXJyaWVyKCk7CisJCVNQT1JUX1BVVF9UWCh1cCwgMHhmZmZmKTsKKwkJd2hpbGUgKCEoU1BPUlRfR0VUX1NUQVQodXApICYgVFhIUkUpKQorCQkJYmFycmllcigpOworCisJCS8qIFN0b3Agc3BvcnQgdHggdHJhbnNmZXIgKi8KKwkJU1BPUlRfUFVUX1RDUjEodXAsIChTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pKTsKKwkJU1NZTkMoKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc3BvcnRfdWFydF9yZWc7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzcG9ydF91YXJ0X2NvbnNvbGUgPSB7CisJLm5hbWUJCT0gREVWSUNFX05BTUUsCisJLndyaXRlCQk9IHNwb3J0X3VhcnRfY29uc29sZV93cml0ZSwKKwkuZGV2aWNlCQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCisJLnNldHVwCQk9IHNwb3J0X3VhcnRfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmc3BvcnRfdWFydF9yZWcsCiB9OwogCisjZGVmaW5lIFNQT1JUX1VBUlRfQ09OU09MRQkoJnNwb3J0X3VhcnRfY29uc29sZSkKKyNlbHNlCisjZGVmaW5lIFNQT1JUX1VBUlRfQ09OU09MRQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUgKi8KKworCiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNwb3J0X3VhcnRfcmVnID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZHJpdmVyX25hbWUJPSAiU1BPUlQtVUFSVCIsCi0JLmRldl9uYW1lCT0gInR0eVNTIiwKKwkuZHJpdmVyX25hbWUJPSBEUlZfTkFNRSwKKwkuZGV2X25hbWUJPSBERVZJQ0VfTkFNRSwKIAkubWFqb3IJCT0gMjA0LAogCS5taW5vcgkJPSA4NCwKLQkubnIJCT0gQVJSQVlfU0laRShzcG9ydF91YXJ0X3BvcnRzKSwKLQkuY29ucwkJPSBOVUxMLAorCS5ucgkJPSBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTLAorCS5jb25zCQk9IFNQT1JUX1VBUlRfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc3BvcnRfdWFydF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzcG9ydF91YXJ0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCWlmIChzcG9ydCkKIAkJdWFydF9zdXNwZW5kX3BvcnQoJnNwb3J0X3VhcnRfcmVnLCAmc3BvcnQtPnBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BvcnRfdWFydF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzcG9ydF91YXJ0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJaWYgKHNwb3J0KQogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzcG9ydF91YXJ0X3JlZywgJnNwb3J0LT5wb3J0KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNwb3J0X3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNwb3J0X3VhcnRfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7Ci0JdWFydF9hZGRfb25lX3BvcnQoJnNwb3J0X3VhcnRfcmVnLCAmc3BvcnRfdWFydF9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZzcG9ydF91YXJ0X3BvcnRzW2Rldi0+aWRdKTsKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBiZmluX3Nwb3J0X3VhcnRfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNwb3J0X3VhcnRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNwb3J0X3VhcnRfcmVzdW1lLAorfTsKKyNlbmRpZgogCi0JcmV0dXJuIDA7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBzcG9ydF91YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQ7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIldyb25nIHNwb3J0IHVhcnQgcGxhdGZvcm0gZGV2aWNlIGlkLlxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChiZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdID09IE5VTEwpIHsKKwkJYmZpbl9zcG9ydF91YXJ0X3BvcnRzW3BkZXYtPmlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCXNwb3J0ID0gYmZpbl9zcG9ydF91YXJ0X3BvcnRzW3BkZXYtPmlkXTsKKwkJaWYgKCFzcG9ydCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsIHRvIGttYWxsb2Mgc3BvcnRfdWFydF9wb3J0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gcGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoCisJCQkodW5zaWduZWQgc2hvcnQgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgRFJWX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkZhaWwgdG8gcmVxdWVzdCBTUE9SVCBwZXJpcGhlcmFsc1xuIik7CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX21lbTsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZzcG9ydC0+cG9ydC5sb2NrKTsKKwkJc3BvcnQtPnBvcnQuZmlmb3NpemUgID0gU1BPUlRfVFhfRklGT19TSVpFLAorCQlzcG9ydC0+cG9ydC5vcHMgICAgICAgPSAmc3BvcnRfdWFydF9vcHM7CisJCXNwb3J0LT5wb3J0LmxpbmUgICAgICA9IHBkZXYtPmlkOworCQlzcG9ydC0+cG9ydC5pb3R5cGUgICAgPSBVUElPX01FTTsKKwkJc3BvcnQtPnBvcnQuZmxhZ3MgICAgID0gVVBGX0JPT1RfQVVUT0NPTkY7CisKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwkJaWYgKHJlcyA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IElPUkVTT1VSQ0VfTUVNXG4iKTsKKwkJCXJldCA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOworCQl9CisKKwkJc3BvcnQtPnBvcnQubWVtYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJCWlmICghc3BvcnQtPnBvcnQubWVtYmFzZSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBzcG9ydCBJT1xuIik7CisJCQlyZXQgPSAtRU5YSU87CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOworCQl9CisKKwkJc3BvcnQtPnBvcnQuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwkJaWYgKHNwb3J0LT5wb3J0LmlycSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHNwb3J0IFJYL1RYIElSUSBzcGVjaWZpZWRcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0X2Vycm9yX3VubWFwOworCQl9CisKKwkJc3BvcnQtPmVycl9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCQlpZiAoc3BvcnQtPmVycl9pcnEgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzcG9ydCBzdGF0dXMgSVJRIHNwZWNpZmllZFxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXRfZXJyb3JfdW5tYXA7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorCWlmICghaXNfZWFybHlfcGxhdGZvcm1fZGV2aWNlKHBkZXYpKSB7CisjZW5kaWYKKwkJc3BvcnQgPSBiZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdOworCQlzcG9ydC0+cG9ydC5kZXYgPSAmcGRldi0+ZGV2OworCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgc3BvcnQpOworCQlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc3BvcnRfdWFydF9yZWcsICZzcG9ydC0+cG9ydCk7CisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUKKwl9CisjZW5kaWYKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3BvcnQpIHsKK291dF9lcnJvcl91bm1hcDoKKwkJaW91bm1hcChzcG9ydC0+cG9ydC5tZW1iYXNlKTsKK291dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOgorCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgKKwkJCSh1bnNpZ25lZCBzaG9ydCAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKK291dF9lcnJvcl9mcmVlX21lbToKKwkJa2ZyZWUoc3BvcnQpOworCQliZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNwb3J0X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNwb3J0X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOwogCi0JaWYgKHNwb3J0KQorCWlmIChzcG9ydCkgewogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3BvcnRfdWFydF9yZWcsICZzcG9ydC0+cG9ydCk7CisJCWlvdW5tYXAoc3BvcnQtPnBvcnQubWVtYmFzZSk7CisJCXBlcmlwaGVyYWxfZnJlZV9saXN0KAorCQkJKHVuc2lnbmVkIHNob3J0ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCQlrZnJlZShzcG9ydCk7CisJCWJmaW5fc3BvcnRfdWFydF9wb3J0c1twZGV2LT5pZF0gPSBOVUxMOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcG9ydF91YXJ0X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc3BvcnRfdWFydF9wcm9iZSwKLQkucmVtb3ZlCQk9IHNwb3J0X3VhcnRfcmVtb3ZlLAotCS5zdXNwZW5kCT0gc3BvcnRfdWFydF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc3BvcnRfdWFydF9yZXN1bWUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzcG9ydF91YXJ0X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJWX05BTUUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZiZmluX3Nwb3J0X3VhcnRfZGV2X3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBlYXJseV9wbGF0Zm9ybV9kcml2ZXIgZWFybHlfc3BvcnRfdWFydF9kcml2ZXIgPSB7CisJLmNsYXNzX3N0ciA9IERSVl9OQU1FLAorCS5wZHJ2ID0gJnNwb3J0X3VhcnRfZHJpdmVyLAorCS5yZXF1ZXN0ZWRfaWQgPSBFQVJMWV9QTEFURk9STV9JRF9VTlNFVCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwb3J0X3VhcnRfcnNfY29uc29sZV9pbml0KHZvaWQpCit7CisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlYXJseV9zcG9ydF91YXJ0X2RyaXZlciwgRFJWX05BTUUpOworCisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKERSVl9OQU1FLCBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTLCAwKTsKKworCXJlZ2lzdGVyX2NvbnNvbGUoJnNwb3J0X3VhcnRfY29uc29sZSk7CisKKwlyZXR1cm4gMDsKK30KK2NvbnNvbGVfaW5pdGNhbGwoc3BvcnRfdWFydF9yc19jb25zb2xlX2luaXQpOworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHNwb3J0X3VhcnRfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlwcl9pbmZvKCJTZXJpYWw6IEJsYWNrZmluIHVhcnQgb3ZlciBzcG9ydCBkcml2ZXJcbiIpOworCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnNwb3J0X3VhcnRfcmVnKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgJXM6JWRcbiIsCisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciAlczolZFxuIiwKIAkJCQlzcG9ydF91YXJ0X3JlZy5kcml2ZXJfbmFtZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwb3J0X3VhcnRfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3BvcnQgdWFydCBkcml2ZXI6JWRcbiIsIHJldCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzcG9ydCB1YXJ0IGRyaXZlcjolZFxuIiwgcmV0KTsKIAkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3BvcnRfdWFydF9yZWcpOwogCX0KIAotCi0JcHJfZGVidWcoIiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0OwogfQorbW9kdWxlX2luaXQoc3BvcnRfdWFydF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHNwb3J0X3VhcnRfZXhpdCh2b2lkKQogewotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcG9ydF91YXJ0X2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3BvcnRfdWFydF9yZWcpOwogfQotCi1tb2R1bGVfaW5pdChzcG9ydF91YXJ0X2luaXQpOwogbW9kdWxlX2V4aXQoc3BvcnRfdWFydF9leGl0KTsKIAorTU9EVUxFX0FVVEhPUigiU29uaWMgWmhhbmcsIFJveSBIdWFuZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBzZXJpYWwgb3ZlciBTUE9SVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5oIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKaW5kZXggNjcxZDQxYy4uYWJlMDM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKQEAgLTEsMjkgKzEsMjMgQEAKIC8qCi0gKiBGaWxlOglsaW51eC9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuaAorICogQmxhY2tmaW4gT24tQ2hpcCBTcG9ydCBFbXVsYXRlZCBVQVJUIERyaXZlcgogICoKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLTUzMy9iZmluX3NlcmlhbF81eHguaAotICogQXV0aG9yOglSb3kgSHVhbmcgPHJveS5odWFuZz5hbmFsb2cuY29tPgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoJTm92IDIyLCAyMDA2Ci0gKiBDb3B5cmlnaHQ6CShDKSBBbmFsb2cgRGV2aWNlIEluYy4KLSAqIERlc2NyaXB0aW9uOiB0aGlzIGRyaXZlciBlbmFibGUgU1BPUlRzIG9uIEJsYWNrZmluIGVtdWxhdGUgVUFSVC4KKyAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisvKgorICogVGhpcyBkcml2ZXIgYW5kIHRoZSBoYXJkd2FyZSBzdXBwb3J0ZWQgYXJlIGluIHRlcm0gb2YgRUUtMTkxIG9mIEFESS4KKyAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9VcGxvYWRlZEZpbGVzL0FwcGxpY2F0aW9uX05vdGVzLzM5OTQ0NzY2M0VFMTkxLnBkZgorICogVGhpcyBhcHBsaWNhdGlvbiBub3RlIGRlc2NyaWJlIGhvdyB0byBpbXBsZW1lbnQgYSBVQVJUIG9uIGEgU2hhcmMgRFNQLAorICogYnV0IHRoaXMgZHJpdmVyIGlzIGltcGxlbWVudGVkIG9uIEJsYWNrZmluIFByb2Nlc3Nvci4KKyAqIFRyYW5zbWl0IEZyYW1lIFN5bmMgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgdG8gdHJhbnNmZXIgZGF0YSBvdXQuCisgKi8KKworI2lmbmRlZiBfQkZJTl9TUE9SVF9VQVJUX0gKKyNkZWZpbmUgX0JGSU5fU1BPUlRfVUFSVF9ICiAKICNkZWZpbmUgT0ZGU0VUX1RDUjEJCTB4MDAJLyogVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCiAjZGVmaW5lIE9GRlNFVF9UQ1IyCQkweDA0CS8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLwpAQCAtNjEsMyArNTUsNyBAQAogI2RlZmluZSBTUE9SVF9QVVRfUkNMS0RJVihzcG9ydCwgdikJYmZpbl93cml0ZTE2KCgoc3BvcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfUkNMS0RJViksIHYpCiAjZGVmaW5lIFNQT1JUX1BVVF9SRlNESVYoc3BvcnQsIHYpCWJmaW5fd3JpdGUxNigoKHNwb3J0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JGU0RJViksIHYpCiAjZGVmaW5lIFNQT1JUX1BVVF9TVEFUKHNwb3J0LCB2KQliZmluX3dyaXRlMTYoKChzcG9ydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9TVEFUKSwgdikKKworI2RlZmluZSBTUE9SVF9UWF9GSUZPX1NJWkUJOAorCisjZW5kaWYgLyogX0JGSU5fU1BPUlRfVUFSVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMDAyOGI2Zi4uNTNhNDY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwpAQCAtNzUxLDcgKzc1MSw2IEBACiAJCXRyYWNlKGljb21fcG9ydCwgIkZJRF9TVEFUVVMiLCBzdGF0dXMpOwogCQljb3VudCA9IGNwdV90b19sZTE2KGljb21fcG9ydC0+c3RhdFN0Zy0+cmN2W3Jjdl9idWZmXS5sZUxlbmd0aCk7CiAKLSAgICAgICAgICAgICAgICBjb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOwogCQl0cmFjZShpY29tX3BvcnQsICJSQ1ZfQ09VTlQiLCBjb3VudCk7CiAKIAkJdHJhY2UoaWNvbV9wb3J0LCAiUkVBTF9DT1VOVCIsIGNvdW50KTsKQEAgLTE2NTQsNCArMTY1Myw2IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRQogICAgICgiSUJNIGlTZXJpZXMgMjc0NSwgMjc3MSwgMjc3MiwgMjc0MiwgMjc5MyBhbmQgMjgwNSBDb21tdW5pY2F0aW9ucyBhZGFwdGVycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfRklSTVdBUkUoImljb21fY2FsbF9zZXR1cC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiaWNvbV9yZXNfZGNlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJpY29tX2FzYy5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggNjBkNjY1YS4uZDAwZmNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTEyNzksNyArMTI3OSw3IEBACiAJCXNwb3J0LT51c2VfaXJkYSA9IDE7CiAjZW5kaWYKIAotCWlmIChwZGF0YS0+aW5pdCkgeworCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewogCQlyZXQgPSBwZGF0YS0+aW5pdChwZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gY2xrcHV0OwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAogCXJldHVybiAwOwogZGVpbml0OgotCWlmIChwZGF0YS0+ZXhpdCkKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KHBkZXYpOwogY2xrcHV0OgogCWNsa19wdXQoc3BvcnQtPmNsayk7CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCiAJY2xrX2Rpc2FibGUoc3BvcnQtPmNsayk7CiAKLQlpZiAocGRhdGEtPmV4aXQpCisJaWYgKHBkYXRhICYmIHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdChwZGV2KTsKIAogCWlvdW5tYXAoc3BvcnQtPnBvcnQubWVtYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYwppbmRleCA4NWRjMDQxMC4uMjNiYTZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCkBAIC0xNDExLDggKzE0MTEsNyBAQAogCXJlYWRfY291bnQgPSBkb19yZWFkKHRoZV9wb3J0LCBjaCwgTUFYX0NIQVJTKTsKIAlpZiAocmVhZF9jb3VudCA+IDApIHsKIAkJZmxpcCA9IDE7Ci0JCXJlYWRfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgcmVhZF9jb3VudCk7Ci0JCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBjaCwgcmVhZF9yb29tKTsKKwkJcmVhZF9yb29tID0gdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGNoLCByZWFkX2NvdW50KTsKIAkJdGhlX3BvcnQtPmljb3VudC5yeCArPSByZWFkX2NvdW50OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfcG9ydC0+bG9jaywgcGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCmluZGV4IDEwOGMzZTAuLjEyY2I1ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpAQCAtMTc5LDYgKzE3OSw3IEBACiAKIAlyZXR1cm4gMDsKICBvdXRfZnJlZV9pcnE6CisJanNtX3JlbW92ZV91YXJ0X3BvcnQoYnJkKTsKIAlmcmVlX2lycShicmQtPmlycSwgYnJkKTsKICBvdXRfaW91bm1hcDoKIAlpb3VubWFwKGJyZC0+cmVfbWFwX21lbWJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKaW5kZXggY2Q5NWUyMS4uNTY3M2NhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAogaW50IGpzbV91YXJ0X3BvcnRfaW5pdChzdHJ1Y3QganNtX2JvYXJkICpicmQpCiB7Ci0JaW50IGk7CisJaW50IGksIHJjOwogCXVuc2lnbmVkIGludCBsaW5lOwogCXN0cnVjdCBqc21fY2hhbm5lbCAqY2g7CiAKQEAgLTQ2Nyw4ICs0NjcsMTEgQEAKIAkJfSBlbHNlCiAJCQlzZXRfYml0KGxpbmUsIGxpbmVtYXApOwogCQlicmQtPmNoYW5uZWxzW2ldLT51YXJ0X3BvcnQubGluZSA9IGxpbmU7Ci0JCWlmICh1YXJ0X2FkZF9vbmVfcG9ydCAoJmpzbV91YXJ0X2RyaXZlciwgJmJyZC0+Y2hhbm5lbHNbaV0tPnVhcnRfcG9ydCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJqc206IGFkZCBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmMgPSB1YXJ0X2FkZF9vbmVfcG9ydCAoJmpzbV91YXJ0X2RyaXZlciwgJmJyZC0+Y2hhbm5lbHNbaV0tPnVhcnRfcG9ydCk7CisJCWlmIChyYyl7CisJCQlwcmludGsoS0VSTl9JTkZPICJqc206IFBvcnQgJWQgZmFpbGVkLiBBYm9ydGluZy4uLlxuIiwgaSk7CisJCQlyZXR1cm4gcmM7CisJCX0KIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fSU5GTyAianNtOiBQb3J0ICVkIGFkZGVkXG4iLCBpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDdjZTllOWYuLjMxMTlmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4X3BzYy5oPgpAQCAtMTEzLDYgKzExNCw3IEBACiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIGludGVycnVwdGlvbiBoYW5kbGluZyByb3V0aW5lICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF91YXJ0X2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IG1wYzV4eHhfdWFydF9wcm9jZXNzX2ludChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIAogCiAvKiBTaW1wbGUgbWFjcm8gdG8gdGVzdCBpZiBhIHBvcnQgaXMgY29uc29sZSBvciBub3QuIFRoaXMgb25lIGlzIHRha2VuCkBAIC0xNDUsNiArMTQ3LDExIEBACiAJdm9pZAkJKCpjd19kaXNhYmxlX2ludHMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCXZvaWQJCSgqY3dfcmVzdG9yZV9pbnRzKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIAl1bnNpZ25lZCBsb25nCSgqZ2V0dWFydGNsaykodm9pZCAqcCk7CisJaW50CQkoKmNsb2NrKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZW5hYmxlKTsKKwlpbnQJCSgqZmlmb2NfaW5pdCkodm9pZCk7CisJdm9pZAkJKCpmaWZvY191bmluaXQpKHZvaWQpOworCXZvaWQJCSgqZ2V0X2lycSkoc3RydWN0IHVhcnRfcG9ydCAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIH07CiAKICNpZmRlZiBDT05GSUdfUFBDX01QQzUyeHgKQEAgLTI1Niw2ICsyNjMsMTggQEAKIAlyZXR1cm4gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShwKSAvIDI7CiB9CiAKK3N0YXRpYyB2b2lkIG1wYzUyeHhfcHNjX2dldF9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlwb3J0LT5pcnFmbGFncyA9IElSUUZfRElTQUJMRUQ7CisJcG9ydC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworfQorCisvKiA1Mnh4IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwb3J0IGxvY2sgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3BzY19oYW5kbGVfaXJxKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIG1wYzV4eHhfdWFydF9wcm9jZXNzX2ludChwb3J0KTsKK30KKwogc3RhdGljIHN0cnVjdCBwc2Nfb3BzIG1wYzUyeHhfcHNjX29wcyA9IHsKIAkuZmlmb19pbml0ID0gbXBjNTJ4eF9wc2NfZmlmb19pbml0LAogCS5yYXdfcnhfcmR5ID0gbXBjNTJ4eF9wc2NfcmF3X3J4X3JkeSwKQEAgLTI3MywxNCArMjkyLDMyIEBACiAJLmN3X2Rpc2FibGVfaW50cyA9IG1wYzUyeHhfcHNjX2N3X2Rpc2FibGVfaW50cywKIAkuY3dfcmVzdG9yZV9pbnRzID0gbXBjNTJ4eF9wc2NfY3dfcmVzdG9yZV9pbnRzLAogCS5nZXR1YXJ0Y2xrID0gbXBjNTJ4eF9nZXR1YXJ0Y2xrLAorCS5nZXRfaXJxID0gbXBjNTJ4eF9wc2NfZ2V0X2lycSwKKwkuaGFuZGxlX2lycSA9IG1wYzUyeHhfcHNjX2hhbmRsZV9pcnEsCiB9OwogCiAjZW5kaWYgLyogQ09ORklHX01QQzUyeHggKi8KIAogI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAogI2RlZmluZSBGSUZPXzUxMngocG9ydCkgKChzdHJ1Y3QgbXBjNTEyeF9wc2NfZmlmbyBfX2lvbWVtICopKFBTQyhwb3J0KSsxKSkKKworLyogUFNDIEZJRk8gQ29udHJvbGxlciBmb3IgbXBjNTEyeCAqLworc3RydWN0IHBzY19maWZvYyB7CisJdTMyIGZpZm9jX2NtZDsKKwl1MzIgZmlmb2NfaW50OworCXUzMiBmaWZvY19kbWE7CisJdTMyIGZpZm9jX2F4ZTsKKwl1MzIgZmlmb2NfZGVidWc7Cit9OworCitzdGF0aWMgc3RydWN0IHBzY19maWZvYyBfX2lvbWVtICpwc2NfZmlmb2M7CitzdGF0aWMgdW5zaWduZWQgaW50IHBzY19maWZvY19pcnE7CisKIHN0YXRpYyB2b2lkIG1wYzUxMnhfcHNjX2ZpZm9faW5pdChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogeworCS8qIC8zMiBwcmVzY2FsZXIgKi8KKwlvdXRfYmUxNigmUFNDKHBvcnQpLT5tcGM1Mnh4X3BzY19jbG9ja19zZWxlY3QsIDB4ZGQwMCk7CisKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGNtZCwgTVBDNTEyeF9QU0NfRklGT19SRVNFVF9TTElDRSk7CiAJb3V0X2JlMzIoJkZJRk9fNTEyeChwb3J0KS0+dHhjbWQsIE1QQzUxMnhfUFNDX0ZJRk9fRU5BQkxFX1NMSUNFKTsKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGFsYXJtLCAxKTsKQEAgLTM5Myw2ICs0MzAsMTYwIEBACiAJcmV0dXJuIG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kocCk7CiB9CiAKKyNkZWZpbmUgREVGQVVMVF9GSUZPX1NJWkUgMTYKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZ2V0X2ZpZm9fc2l6ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgY2hhciAqZmlmb19uYW1lKQoreworCWNvbnN0IHVuc2lnbmVkIGludCAqZnA7CisKKwlmcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgZmlmb19uYW1lLCBOVUxMKTsKKwlpZiAoZnApCisJCXJldHVybiAqZnA7CisKKwlwcl93YXJuaW5nKCJubyAlcyBwcm9wZXJ0eSBpbiAlcyBub2RlLCBkZWZhdWx0aW5nIHRvICVkXG4iLAorCQkgICBmaWZvX25hbWUsIG5wLT5mdWxsX25hbWUsIERFRkFVTFRfRklGT19TSVpFKTsKKworCXJldHVybiBERUZBVUxUX0ZJRk9fU0laRTsKK30KKworI2RlZmluZSBGSUZPQyhfYmFzZSkgKChzdHJ1Y3QgbXBjNTEyeF9wc2NfZmlmbyBfX2lvbWVtICopIFwKKwkJICAgICgodTMyKShfYmFzZSkgKyBzaXplb2Yoc3RydWN0IG1wYzUyeHhfcHNjKSkpCisKKy8qIEluaXQgUFNDIEZJRk8gQ29udHJvbGxlciAqLworc3RhdGljIGludCBfX2luaXQgbXBjNTEyeF9wc2NfZmlmb2NfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpwc2M7CisJdW5zaWduZWQgaW50IHR4X2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhfZmlmb19zaXplOworCWludCBmaWZvYmFzZSA9IDA7IC8qIGN1cnJlbnQgZmlmbyBhZGRyZXNzIGluIDMyIGJpdCB3b3JkcyAqLworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCSAgICAgImZzbCxtcGM1MTIxLXBzYy1maWZvIik7CisJaWYgKCFucCkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBmaW5kIEZJRk9DIG5vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHNjX2ZpZm9jID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghcHNjX2ZpZm9jKSB7CisJCXByX2VycigiJXM6IENhbid0IG1hcCBGSUZPQ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc2NfZmlmb2NfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAocHNjX2ZpZm9jX2lycSA9PSBOT19JUlEpIHsKKwkJcHJfZXJyKCIlczogQ2FuJ3QgZ2V0IEZJRk9DIGlycVxuIiwgX19mdW5jX18pOworCQlpb3VubWFwKHBzY19maWZvYyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM1MTIxLXBzYy11YXJ0IikgeworCQl0eF9maWZvX3NpemUgPSBnZXRfZmlmb19zaXplKG5wLCAiZnNsLHR4LWZpZm8tc2l6ZSIpOworCQlyeF9maWZvX3NpemUgPSBnZXRfZmlmb19zaXplKG5wLCAiZnNsLHJ4LWZpZm8tc2l6ZSIpOworCisJCS8qIHNpemUgaW4gcmVnaXN0ZXIgaXMgaW4gNCBieXRlIHVuaXRzICovCisJCXR4X2ZpZm9fc2l6ZSAvPSA0OworCQlyeF9maWZvX3NpemUgLz0gNDsKKwkJaWYgKCF0eF9maWZvX3NpemUpCisJCQl0eF9maWZvX3NpemUgPSAxOworCQlpZiAoIXJ4X2ZpZm9fc2l6ZSkKKwkJCXJ4X2ZpZm9fc2l6ZSA9IDE7CisKKwkJcHNjID0gb2ZfaW9tYXAobnAsIDApOworCQlpZiAoIXBzYykgeworCQkJcHJfZXJyKCIlczogQ2FuJ3QgbWFwICVzIGRldmljZVxuIiwKKwkJCQlfX2Z1bmNfXywgbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZJRk8gc3BhY2UgaXMgNEtpQiwgY2hlY2sgaWYgcmVxdWVzdGVkIHNpemUgaXMgYXZhaWxhYmxlICovCisJCWlmICgoZmlmb2Jhc2UgKyB0eF9maWZvX3NpemUgKyByeF9maWZvX3NpemUpID4gMHgxMDAwKSB7CisJCQlwcl9lcnIoIiVzOiBubyBmaWZvIHNwYWNlIGF2YWlsYWJsZSBmb3IgJXNcbiIsCisJCQkJX19mdW5jX18sIG5wLT5mdWxsX25hbWUpOworCQkJaW91bm1hcChwc2MpOworCQkJLyoKKwkJCSAqIGNoYW5jZXMgYXJlIHRoYXQgYW5vdGhlciBkZXZpY2UgcmVxdWVzdHMgbGVzcworCQkJICogZmlmbyBzcGFjZSwgc28gd2UgY29udGludWUuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIHNldCB0eCBhbmQgcnggZmlmbyBzaXplIHJlZ2lzdGVycyAqLworCQlvdXRfYmUzMigmRklGT0MocHNjKS0+dHhzeiwgKGZpZm9iYXNlIDw8IDE2KSB8IHR4X2ZpZm9fc2l6ZSk7CisJCWZpZm9iYXNlICs9IHR4X2ZpZm9fc2l6ZTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4c3osIChmaWZvYmFzZSA8PCAxNikgfCByeF9maWZvX3NpemUpOworCQlmaWZvYmFzZSArPSByeF9maWZvX3NpemU7CisKKwkJLyogcmVzZXQgYW5kIGVuYWJsZSB0aGUgc2xpY2VzICovCisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eGNtZCwgMHg4MCk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eGNtZCwgMHgwMSk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT5yeGNtZCwgMHg4MCk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT5yeGNtZCwgMHgwMSk7CisKKwkJaW91bm1hcChwc2MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTEyeF9wc2NfZmlmb2NfdW5pbml0KHZvaWQpCit7CisJaW91bm1hcChwc2NfZmlmb2MpOworfQorCisvKiA1MTJ4IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwb3J0IGxvY2sgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1MTJ4X3BzY19oYW5kbGVfaXJxKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmaWZvY19pbnQ7CisJaW50IHBzY19udW07CisKKwkvKiBSZWFkIHBlbmRpbmcgUFNDIEZJRk9DIGludGVycnVwdHMgKi8KKwlmaWZvY19pbnQgPSBpbl9iZTMyKCZwc2NfZmlmb2MtPmZpZm9jX2ludCk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBhbiBpbnRlcnJ1cHQgZm9yIHRoaXMgcG9ydCAqLworCXBzY19udW0gPSAocG9ydC0+bWFwYmFzZSAmIDB4ZjAwKSA+PiA4OworCWlmICh0ZXN0X2JpdChwc2NfbnVtLCAmZmlmb2NfaW50KSB8fAorCSAgICB0ZXN0X2JpdChwc2NfbnVtICsgMTYsICZmaWZvY19pbnQpKQorCQlyZXR1cm4gbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHBvcnQpOworCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaW50IG1wYzUxMnhfcHNjX2Nsb2NrKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBlbmFibGUpCit7CisJc3RydWN0IGNsayAqcHNjX2NsazsKKwlpbnQgcHNjX251bTsKKwljaGFyIGNsa19uYW1lWzEwXTsKKworCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkpCisJCXJldHVybiAwOworCisJcHNjX251bSA9IChwb3J0LT5tYXBiYXNlICYgMHhmMDApID4+IDg7CisJc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksICJwc2MlZF9jbGsiLCBwc2NfbnVtKTsKKwlwc2NfY2xrID0gY2xrX2dldChwb3J0LT5kZXYsIGNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHBzY19jbGspKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQU0MgY2xvY2sgZW50cnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyAlc2FibGVcbiIsIGNsa19uYW1lLCBlbmFibGUgPyAiZW4iIDogImRpcyIpOworCisJaWYgKGVuYWJsZSkKKwkJY2xrX2VuYWJsZShwc2NfY2xrKTsKKwllbHNlCisJCWNsa19kaXNhYmxlKHBzY19jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUxMnhfcHNjX2dldF9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlwb3J0LT5pcnFmbGFncyA9IElSUUZfU0hBUkVEOworCXBvcnQtPmlycSA9IHBzY19maWZvY19pcnE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcHNjX29wcyBtcGM1MTJ4X3BzY19vcHMgPSB7CiAJLmZpZm9faW5pdCA9IG1wYzUxMnhfcHNjX2ZpZm9faW5pdCwKIAkucmF3X3J4X3JkeSA9IG1wYzUxMnhfcHNjX3Jhd19yeF9yZHksCkBAIC00MTAsNiArNjAxLDExIEBACiAJLmN3X2Rpc2FibGVfaW50cyA9IG1wYzUxMnhfcHNjX2N3X2Rpc2FibGVfaW50cywKIAkuY3dfcmVzdG9yZV9pbnRzID0gbXBjNTEyeF9wc2NfY3dfcmVzdG9yZV9pbnRzLAogCS5nZXR1YXJ0Y2xrID0gbXBjNTEyeF9nZXR1YXJ0Y2xrLAorCS5jbG9jayA9IG1wYzUxMnhfcHNjX2Nsb2NrLAorCS5maWZvY19pbml0ID0gbXBjNTEyeF9wc2NfZmlmb2NfaW5pdCwKKwkuZmlmb2NfdW5pbml0ID0gbXBjNTEyeF9wc2NfZmlmb2NfdW5pbml0LAorCS5nZXRfaXJxID0gbXBjNTEyeF9wc2NfZ2V0X2lycSwKKwkuaGFuZGxlX2lycSA9IG1wYzUxMnhfcHNjX2hhbmRsZV9pcnEsCiB9OwogI2VuZGlmCiAKQEAgLTUxOSwxMCArNzE1LDE1IEBACiAJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IFBTQyhwb3J0KTsKIAlpbnQgcmV0OwogCisJaWYgKHBzY19vcHMtPmNsb2NrKSB7CisJCXJldCA9IHBzY19vcHMtPmNsb2NrKHBvcnQsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBSZXF1ZXN0IElSUSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgbXBjNTJ4eF91YXJ0X2ludCwKLQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKLQkJIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKKwkJCSAgcG9ydC0+aXJxZmxhZ3MsICJtcGM1Mnh4X3BzY191YXJ0IiwgcG9ydCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTUzLDYgKzc1NCw5IEBACiAJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IDA7CiAJb3V0X2JlMTYoJnBzYy0+bXBjNTJ4eF9wc2NfaW1yLCBwb3J0LT5yZWFkX3N0YXR1c19tYXNrKTsKIAorCWlmIChwc2Nfb3BzLT5jbG9jaykKKwkJcHNjX29wcy0+Y2xvY2socG9ydCwgMCk7CisKIAkvKiBSZWxlYXNlIGludGVycnVwdCAqLwogCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7CiB9CkBAIC04NTEsMTUgKzEwNTUsMTIgQEAKIH0KIAogc3RhdGljIGlycXJldHVybl90Ci1tcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK21wYzV4eHhfdWFydF9wcm9jZXNzX2ludChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CiAJdW5zaWduZWQgbG9uZyBwYXNzID0gSVNSX1BBU1NfTElNSVQ7CiAJdW5zaWduZWQgaW50IGtlZXBnb2luZzsKIAl1OCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJnBvcnQtPmxvY2spOwotCiAJLyogV2hpbGUgd2UgaGF2ZSBzdHVmZiB0byBkbywgd2UgY29udGludWUgKi8KIAlkbyB7CiAJCS8qIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcgdG8gZG8sIHdlIHN0b3AgKi8KQEAgLTg4NiwxMSArMTA4NywyMyBAQAogCiAJfSB3aGlsZSAoa2VlcGdvaW5nKTsKIAotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlycXJldHVybl90CittcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOworCWlycXJldHVybl90IHJldDsKKworCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXQgPSBwc2Nfb3BzLT5oYW5kbGVfaXJxKHBvcnQpOworCisJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBDb25zb2xlICggaWYgYXBwbGljYWJsZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExNTIsNyArMTM2NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBvcnQtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKKwlwc2Nfb3BzLT5nZXRfaXJxKHBvcnQsIG9wLT5ub2RlKTsKIAlpZiAocG9ydC0+aXJxID09IE5PX0lSUSkgewogCQlkZXZfZGJnKCZvcC0+ZGV2LCAiQ291bGQgbm90IGdldCBpcnFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNjMsMTAgKzEzNzYsOCBAQAogCiAJLyogQWRkIHRoZSBwb3J0IHRvIHRoZSB1YXJ0IHN1Yi1zeXN0ZW0gKi8KIAlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0JaWYgKHJldCkgewotCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHBvcnQtPmlycSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsICh2b2lkICopcG9ydCk7CiAJcmV0dXJuIDA7CkBAIC0xMTc4LDEwICsxMzg5LDggQEAKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwogCi0JaWYgKHBvcnQpIHsKKwlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHBvcnQtPmlycSk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjg4LDYgKzE0OTcsMTUgQEAKIAogCW1wYzUyeHhfdWFydF9vZl9lbnVtZXJhdGUoKTsKIAorCS8qCisJICogTWFwIHRoZSBQU0MgRklGTyBDb250cm9sbGVyIGFuZCBpbml0IGlmIG9uIE1QQzUxMnguCisJICovCisJaWYgKHBzY19vcHMtPmZpZm9jX2luaXQpIHsKKwkJcmV0ID0gcHNjX29wcy0+Zmlmb2NfaW5pdCgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfdWFydF9vZl9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyIGZhaWxlZCAoJWkpXG4iLApAQCAtMTMwMiw2ICsxNTIwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBjNTJ4eF91YXJ0X2V4aXQodm9pZCkKIHsKKwlpZiAocHNjX29wcy0+Zmlmb2NfdW5pbml0KQorCQlwc2Nfb3BzLT5maWZvY191bmluaXQoKTsKKwogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3VhcnRfb2ZfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYwppbmRleCBiMDVjNWFhLi5lY2RjMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jCkBAIC02OTEsNiArNjkxLDcgQEAKIAlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlpbnQgaXJxOwogCiAJaWYgKHVubGlrZWx5KHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBVQVJUX05SKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTcxMSw5ICs3MTIsMTAgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlwb3J0LT5tYXBiYXNlID0gcmVzb3VyY2UtPnN0YXJ0OwogCi0JcG9ydC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAodW5saWtlbHkocG9ydC0+aXJxIDwgMCkpCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAodW5saWtlbHkoaXJxIDwgMCkpCiAJCXJldHVybiAtRU5YSU87CisJcG9ydC0+aXJxID0gaXJxOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCA2ODNlNjZmLi5mMDIwZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC02MywxMSArNjMsMTcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9kYmRtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNpby5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNkZWZpbmUgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKHgpICgwKQorI2VuZGlmCiAKICNpZiBkZWZpbmVkIChDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtODMsMTEgKzg5LDkgQEAKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAicG1hY196aWxvZzogMC42IChCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+KSI7CiBNT0RVTEVfQVVUSE9SKCJCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFBvd2VyTWFjIHNlcmlhbCBwb3J0cy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgTWFjIGFuZCBQb3dlck1hYyBzZXJpYWwgcG9ydHMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgUFdSREJHKGZtdCwgYXJnLi4uKQlwcmludGsoS0VSTl9ERUJVRyBmbXQgLCAjIyBhcmcpCi0KICNpZmRlZiBDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19UVFlTCiAjZGVmaW5lIFBNQUNaSUxPR19NQUpPUgkJVFRZX01BSk9SCiAjZGVmaW5lIFBNQUNaSUxPR19NSU5PUgkJNjQKQEAgLTE1Myw4ICsxNTcsOCBAQAogCXdyaXRlX3pzcmVnKHVhcCwgUjEwLCByZWdzW1IxMF0pOwogCiAJLyogU2V0IFRYL1JYIGNvbnRyb2xzIHNhbnMgdGhlIGVuYWJsZSBiaXRzLiAgKi8KLSAgICAgICAJd3JpdGVfenNyZWcodWFwLCBSMywgcmVnc1tSM10gJiB+UnhFTkFCTEUpOwotICAgICAgIAl3cml0ZV96c3JlZyh1YXAsIFI1LCByZWdzW1I1XSAmIH5UeEVOQUJMRSk7CisJd3JpdGVfenNyZWcodWFwLCBSMywgcmVnc1tSM10gJiB+UnhFTkFCTEUpOworCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHJlZ3NbUjVdICYgflR4RU5BQkxFKTsKIAogCS8qIG5vdyBzZXQgUjcgInByaW1lIiBvbiBFU0NDICovCiAJd3JpdGVfenNyZWcodWFwLCBSMTUsIHJlZ3NbUjE1XSB8IEVOODVDMzApOwpAQCAtMjA1LDcgKzIwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBtel9tYXliZV91cGRhdGVfcmVncyhzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKIHsKLSAgICAgICAJaWYgKCFaU19SRUdTX0hFTEQodWFwKSkgeworCWlmICghWlNfUkVHU19IRUxEKHVhcCkpIHsKIAkJaWYgKFpTX1RYX0FDVElWRSh1YXApKSB7CiAJCQl1YXAtPmZsYWdzIHw9IFBNQUNaSUxPR19GTEFHX1JFR1NfSEVMRDsKIAkJfSBlbHNlIHsKQEAgLTI4MSw3ICsyODUsNyBAQAogCQkJc3Bpbl9sb2NrKCZ1YXAtPnBvcnQubG9jayk7CiAJCQlpZiAoc3dhbGxvdykKIAkJCQlnb3RvIG5leHRfY2hhcjsKLSAJCX0KKwkJfQogI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAmJiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRSAqLwogCiAJCS8qIEEgcmVhbCBzZXJpYWwgbGluZSwgcmVjb3JkIHRoZSBjaGFyYWN0ZXIgYW5kIHN0YXR1cy4gICovCkBAIC0zMTcsNyArMzIxLDcgQEAKIAogCQlpZiAodWFwLT5wb3J0Lmlnbm9yZV9zdGF0dXNfbWFzayA9PSAweGZmIHx8CiAJCSAgICAocjEgJiB1YXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrKSA9PSAwKSB7Ci0JCSAgICAJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZyk7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKIAkJfQogCQlpZiAocjEgJiBSeF9PVlIpCiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKQEAgLTM0MSw3ICszNDUsNyBAQAogCXVhcC0+Y3VycmVnc1tSMV0gJj0gfihFWFRfSU5UX0VOQUIgfCBUeElOVF9FTkFCIHwgUnhJTlRfTUFTSyk7CiAJd3JpdGVfenNyZWcodWFwLCBSMSwgdWFwLT5jdXJyZWdzW1IxXSk7CiAJenNzeW5jKHVhcCk7Ci0JZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInBtejogcnggaXJxIGZsb29kICFcbiIpOworCXBtel9lcnJvcigicG16OiByeCBpcnEgZmxvb2QgIVxuIik7CiAJcmV0dXJuIHR0eTsKIH0KIApAQCAtNDcwLDQ3ICs0NzQsNDcgQEAKIAogCXVhcF9hID0gcG16X2dldF9wb3J0X0EodWFwKTsKIAl1YXBfYiA9IHVhcF9hLT5tYXRlOwotICAgICAgIAotICAgICAgIAlzcGluX2xvY2soJnVhcF9hLT5wb3J0LmxvY2spOworCisJc3Bpbl9sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKIAlyMyA9IHJlYWRfenNyZWcodWFwX2EsIFIzKTsKIAogI2lmZGVmIERFQlVHX0hBUkQKIAlwbXpfZGVidWcoImlycSwgcjM6ICV4XG4iLCByMyk7CiAjZW5kaWYKLSAgICAgICAJLyogQ2hhbm5lbCBBICovCisJLyogQ2hhbm5lbCBBICovCiAJdHR5ID0gTlVMTDsKLSAgICAgICAJaWYgKHIzICYgKENIQUVYVCB8IENIQVR4SVAgfCBDSEFSeElQKSkgeworCWlmIChyMyAmIChDSEFFWFQgfCBDSEFUeElQIHwgQ0hBUnhJUCkpIHsKIAkJd3JpdGVfenNyZWcodWFwX2EsIFIwLCBSRVNfSF9JVVMpOwogCQl6c3N5bmModWFwX2EpOwkJCi0gICAgICAgCQlpZiAocjMgJiBDSEFFWFQpCi0gICAgICAgCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2EpOworCQlpZiAocjMgJiBDSEFFWFQpCisJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYSk7CiAJCWlmIChyMyAmIENIQVJ4SVApCiAJCQl0dHkgPSBwbXpfcmVjZWl2ZV9jaGFycyh1YXBfYSk7Ci0gICAgICAgCQlpZiAocjMgJiBDSEFUeElQKQotICAgICAgIAkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYSk7Ci0JICAgICAgICByYyA9IElSUV9IQU5ETEVEOwotICAgICAgIAl9Ci0gICAgICAgCXNwaW5fdW5sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKKwkJaWYgKHIzICYgQ0hBVHhJUCkKKwkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYSk7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCXNwaW5fdW5sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKIAlpZiAodHR5ICE9IE5VTEwpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKIAlpZiAodWFwX2ItPm5vZGUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLSAgICAgICAJc3Bpbl9sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKKwlzcGluX2xvY2soJnVhcF9iLT5wb3J0LmxvY2spOwogCXR0eSA9IE5VTEw7CiAJaWYgKHIzICYgKENIQkVYVCB8IENIQlR4SVAgfCBDSEJSeElQKSkgewogCQl3cml0ZV96c3JlZyh1YXBfYiwgUjAsIFJFU19IX0lVUyk7CiAJCXpzc3luYyh1YXBfYik7Ci0gICAgICAgCQlpZiAocjMgJiBDSEJFWFQpCi0gICAgICAgCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2IpOwotICAgICAgIAkgICAgICAgCWlmIChyMyAmIENIQlJ4SVApCi0gICAgICAgCQkJdHR5ID0gcG16X3JlY2VpdmVfY2hhcnModWFwX2IpOwotICAgICAgIAkJaWYgKHIzICYgQ0hCVHhJUCkKLSAgICAgICAJCQlwbXpfdHJhbnNtaXRfY2hhcnModWFwX2IpOwotCSAgICAgICAJcmMgPSBJUlFfSEFORExFRDsKLSAgICAgICAJfQotICAgICAgIAlzcGluX3VubG9jaygmdWFwX2ItPnBvcnQubG9jayk7CisJCWlmIChyMyAmIENIQkVYVCkKKwkJCXBtel9zdGF0dXNfaGFuZGxlKHVhcF9iKTsKKwkJaWYgKHIzICYgQ0hCUnhJUCkKKwkJCXR0eSA9IHBtel9yZWNlaXZlX2NoYXJzKHVhcF9iKTsKKwkJaWYgKHIzICYgQ0hCVHhJUCkKKwkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYik7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCXNwaW5fdW5sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKIAlpZiAodHR5ICE9IE5VTEwpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKQEAgLTcxOCw3ICs3MjIsNyBAQAogCiAJCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJCXJldHVybjsKLQkJLyogTk9URTogTm90IHN1YmplY3QgdG8gJ3RyYW5zbWl0dGVyIGFjdGl2ZScgcnVsZS4gICovIAorCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAqLwogCQl3cml0ZV96c3JlZyh1YXAsIFIxNSwgdWFwLT5jdXJyZWdzW1IxNV0pOwogCX0KIH0KQEAgLTc0OCw3ICs3NTIsNyBAQAogCWlmIChuZXdfcmVnICE9IHVhcC0+Y3VycmVnc1tSNV0pIHsKIAkJdWFwLT5jdXJyZWdzW1I1XSA9IG5ld19yZWc7CiAKLQkJLyogTk9URTogTm90IHN1YmplY3QgdG8gJ3RyYW5zbWl0dGVyIGFjdGl2ZScgcnVsZS4gICovIAorCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAqLwogCQlpZiAoWlNfSVNfQVNMRUVQKHVhcCkpCiAJCQlyZXR1cm47CiAJCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHVhcC0+Y3VycmVnc1tSNV0pOwpAQCAtNzU3LDYgKzc2MSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisKIC8qCiAgKiBUdXJuIHBvd2VyIG9uIG9yIG9mZiB0byB0aGUgU0NDIGFuZCBhc3NvY2lhdGVkIHN0dWZmCiAgKiAocG9ydCBkcml2ZXJzLCBtb2RlbSwgSVIgcG9ydCwgZXRjLikKQEAgLTc5Miw2ICs3OTgsMTUgQEAKIAlyZXR1cm4gZGVsYXk7CiB9CiAKKyNlbHNlCisKK3N0YXRpYyBpbnQgcG16X3NldF9zY2NfcG93ZXIoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXAsIGludCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogLyoKICAqIEZpeFplcm9CdWcuLi4uV29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBTQ0MgcmVjZXZpbmcgY2hhbm5lbC4KICAqIEluc3BpcmVkIGZyb20gRGFyd2luIGNvZGUsIDE1IFNlcHQuIDIwMDAgIC1EYW5NCkBAIC05MDgsNyArOTIzLDYgQEAKIAkvKiBSZW1lbWJlciBzdGF0dXMgZm9yIERDRC9DVFMgY2hhbmdlcyAqLwogCXVhcC0+cHJldl9zdGF0dXMgPSByZWFkX3pzcmVnKHVhcCwgUjApOwogCi0KIAlyZXR1cm4gcHdyX2RlbGF5OwogfQogCkBAIC05NTUsOSArOTY5LDkgQEAKIAl9CQogCiAJcG16X2dldF9wb3J0X0EodWFwKS0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfSVNfSVJRX09OOwotCWlmIChyZXF1ZXN0X2lycSh1YXAtPnBvcnQuaXJxLCBwbXpfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIlBvd2VyTWFjIFppbG9nIiwgdWFwKSkgewotCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJIlVuYWJsZSB0byByZWdpc3RlciB6cyBpbnRlcnJ1cHQgaGFuZGxlci5cbiIpOworCWlmIChyZXF1ZXN0X2lycSh1YXAtPnBvcnQuaXJxLCBwbXpfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJTQ0MiLCB1YXApKSB7CisJCXBtel9lcnJvcigiVW5hYmxlIHRvIHJlZ2lzdGVyIHpzIGludGVycnVwdCBoYW5kbGVyLlxuIik7CiAJCXBtel9zZXRfc2NjX3Bvd2VyKHVhcCwgMCk7CiAJCW11dGV4X3VubG9jaygmcG16X2lycV9tdXRleCk7CiAJCXJldHVybiAtRU5YSU87CkBAIC05ODMsNyArOTk3LDcgQEAKIAlpZiAoIVpTX0lTX0VYVENMSyh1YXApKQogCQl1YXAtPmN1cnJlZ3NbUjFdIHw9IEVYVF9JTlRfRU5BQjsKIAl3cml0ZV96c3JlZyh1YXAsIFIxLCB1YXAtPmN1cnJlZ3NbUjFdKTsKLSAgICAgICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCXBtel9kZWJ1ZygicG16OiBzdGFydHVwKCkgZG9uZS5cbiIpOwogCkBAIC0xMDAzLDcgKzEwMTcsNyBAQAogCW11dGV4X2xvY2soJnBtel9pcnFfbXV0ZXgpOwogCiAJLyogUmVsZWFzZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwotICAgICAgIAlmcmVlX2lycSh1YXAtPnBvcnQuaXJxLCB1YXApOworCWZyZWVfaXJxKHVhcC0+cG9ydC5pcnEsIHVhcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDUxLDcgKzEwNjUsNiBAQAogewogCWludCBicmc7CiAKLQogCS8qIFN3aXRjaCB0byBleHRlcm5hbCBjbG9ja2luZyBmb3IgSXJEQSBoaWdoIGNsb2NrIHJhdGVzLiBUaGF0CiAJICogY29kZSBjb3VsZCBiZSByZS11c2VkIGZvciBNaWRpIGludGVyZmFjZXMgd2l0aCBkaWZmZXJlbnQKIAkgKiBtdWx0aXBsaWVycwpAQCAtMTE5OCw3ICsxMjExLDcgQEAKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBUeF9CVUZfRU1QKSA9PSAwCiAJICAgICAgIHx8IChyZWFkX3pzcmVnKHVhcCwgUjEpICYgQUxMX1NOVCkgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsICJ0cmFuc21pdHRlciBkaWRuJ3QgZHJhaW5cbiIpOworCQkJcG16X2Vycm9yKCJ0cmFuc21pdHRlciBkaWRuJ3QgZHJhaW5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCXVkZWxheSgxMCk7CkBAIC0xMjE0LDcgKzEyMjcsNyBAQAogCQlyZWFkX3pzZGF0YSh1YXApOwogCQltZGVsYXkoMTApOwogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsICJyZWNlaXZlciBkaWRuJ3QgZHJhaW5cbiIpOworCQkJcG16X2Vycm9yKCJyZWNlaXZlciBkaWRuJ3QgZHJhaW5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTIyMywyMCArMTIzNiwxOSBAQAogCXVhcC0+Y3VycmVnc1tSNV0gfD0gRFRSOwogCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHVhcC0+Y3VycmVnc1tSNV0pOwogCXpzc3luYyh1YXApOwotICAgICAgIAltZGVsYXkoMSk7CisJbWRlbGF5KDEpOwogCiAJLyogU3dpdGNoIFNDQyB0byAxOTIwMCAqLwogCXBtel9jb252ZXJ0X3RvX3pzKHVhcCwgQ1M4LCAwLCAxOTIwMCk7CQkKIAlwbXpfbG9hZF96c3JlZ3ModWFwLCB1YXAtPmN1cnJlZ3MpOwotICAgICAgIAltZGVsYXkoMSk7CisJbWRlbGF5KDEpOwogCiAJLyogV3JpdGUgZ2V0X3ZlcnNpb24gY29tbWFuZCBieXRlICovCiAJd3JpdGVfenNkYXRhKHVhcCwgMSk7CiAJdCA9IDUwMDA7CiAJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgUnhfQ0hfQVYpID09IDApIHsKIAkJaWYgKC0tdCA8PSAwKSB7Ci0JCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJCSJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBnZXRfdmVyc2lvbiBieXRlXG4iKTsKKwkJCXBtel9lcnJvcigiaXJkYV9zZXR1cCB0aW1lZCBvdXQgb24gZ2V0X3ZlcnNpb24gYnl0ZVxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1ZGVsYXkoMTApOwpAQCAtMTI0NCw4ICsxMjU2LDcgQEAKIAl2ZXJzaW9uID0gcmVhZF96c2RhdGEodWFwKTsKIAogCWlmICh2ZXJzaW9uIDwgNCkgewotCQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgIklyREE6IGRvbmdsZSB2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgdmVyc2lvbik7CisJCXBtel9pbmZvKCJJckRBOiBkb25nbGUgdmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMjU0LDE4ICsxMjY1LDE2IEBACiAJdCA9IDUwMDA7CiAJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgUnhfQ0hfQVYpID09IDApIHsKIAkJaWYgKC0tdCA8PSAwKSB7Ci0JCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJCSJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBzcGVlZCBtb2RlIGJ5dGVcbiIpOworCQkJcG16X2Vycm9yKCJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBzcGVlZCBtb2RlIGJ5dGVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJdWRlbGF5KDEwKTsKIAl9CiAJdCA9IHJlYWRfenNkYXRhKHVhcCk7CiAJaWYgKHQgIT0gY21kYnl0ZSkKLQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwKLQkJCSJpcmRhX3NldHVwIHNwZWVkIG1vZGUgYnl0ZSA9ICV4ICgleClcbiIsIHQsIGNtZGJ5dGUpOworCQlwbXpfZXJyb3IoImlyZGFfc2V0dXAgc3BlZWQgbW9kZSBieXRlID0gJXggKCV4KVxuIiwgdCwgY21kYnl0ZSk7CiAKLQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgIklyREEgc2V0dXAgZm9yICVsZCBicHMsIGRvbmdsZSB2ZXJzaW9uOiAlZFxuIiwKKwlwbXpfaW5mbygiSXJEQSBzZXR1cCBmb3IgJWxkIGJwcywgZG9uZ2xlIHZlcnNpb246ICVkXG4iLAogCQkgKmJhdWQsIHZlcnNpb24pOwogCiAJKHZvaWQpcmVhZF96c2RhdGEodWFwKTsKQEAgLTE0MTUsNyArMTQyNCw3IEBACiAJd3JpdGVfenNkYXRhKHVhcCwgYyk7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgKi8KIAogc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBwbXpfcG9wcyA9IHsKIAkudHhfZW1wdHkJPQlwbXpfdHhfZW1wdHksCkBAIC0xNDQwLDYgKzE0NDksOCBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisKIC8qCiAgKiBTZXR1cCBvbmUgcG9ydCBzdHJ1Y3R1cmUgYWZ0ZXIgcHJvYmluZywgSFcgaXMgZG93biBhdCB0aGlzIHBvaW50LAogICogVW5saWtlIHN1bnppbG9nLCB3ZSBkb24ndCBuZWVkIHRvIHByZS1pbml0IHRoZSBzcGlubG9jayBhcyB3ZSBkb24ndApAQCAtMTQ2Myw3ICsxNDc0LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdWFwLT5wb3J0Lm1hcGJhc2UgPSByX3BvcnRzLnN0YXJ0OwogCXVhcC0+cG9ydC5tZW1iYXNlID0gaW9yZW1hcCh1YXAtPnBvcnQubWFwYmFzZSwgMHgxMDAwKTsKLSAgICAgIAorCiAJdWFwLT5jb250cm9sX3JlZyA9IHVhcC0+cG9ydC5tZW1iYXNlOwogCXVhcC0+ZGF0YV9yZWcgPSB1YXAtPmNvbnRyb2xfcmVnICsgMHgxMDsKIAkKQEAgLTE1OTAsNyArMTYwMSw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgdXBvbiBtYXRjaCB3aXRoIGFuIGVzY2Mgbm9kZSBpbiB0aGUgZGV2aXZlLXRyZWUuCisgKiBDYWxsZWQgdXBvbiBtYXRjaCB3aXRoIGFuIGVzY2Mgbm9kZSBpbiB0aGUgZGV2aWNlLXRyZWUuCiAgKi8KIHN0YXRpYyBpbnQgcG16X2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKQEAgLTE4MTIsNyArMTgyMyw3IEBACiAJCXBtel9wb3J0c1tjb3VudF0ubm9kZQkJPSBub2RlX2E7CiAJCXBtel9wb3J0c1tjb3VudCsxXS5ub2RlCQk9IG5vZGVfYjsKIAkJcG16X3BvcnRzW2NvdW50XS5wb3J0LmxpbmUJPSBjb3VudDsKLQkJcG16X3BvcnRzW2NvdW50KzFdLnBvcnQubGluZSAgIAk9IGNvdW50KzE7CisJCXBtel9wb3J0c1tjb3VudCsxXS5wb3J0LmxpbmUJPSBjb3VudCsxOwogCiAJCS8qCiAJCSAqIFNldHVwIHRoZSBwb3J0cyBmb3IgcmVhbApAQCAtMTgzNiw2ICsxODQ3LDg4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNlbHNlCisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19hX3BkZXYsIHNjY19iX3BkZXY7CisKK3N0YXRpYyBpbnQgX19pbml0IHBtel9pbml0X3BvcnQoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXApCit7CisJc3RydWN0IHJlc291cmNlICpyX3BvcnRzOworCWludCBpcnE7CisKKwlyX3BvcnRzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHVhcC0+bm9kZSwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEodWFwLT5ub2RlLCAwKTsKKwlpZiAoIXJfcG9ydHMgfHwgIWlycSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1YXAtPnBvcnQubWFwYmFzZSAgPSByX3BvcnRzLT5zdGFydDsKKwl1YXAtPnBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciBfX2lvbWVtICopIHJfcG9ydHMtPnN0YXJ0OworCXVhcC0+cG9ydC5pb3R5cGUgICA9IFVQSU9fTUVNOworCXVhcC0+cG9ydC5pcnEgICAgICA9IGlycTsKKwl1YXAtPnBvcnQudWFydGNsayAgPSBaU19DTE9DSzsKKwl1YXAtPnBvcnQuZmlmb3NpemUgPSAxOworCXVhcC0+cG9ydC5vcHMgICAgICA9ICZwbXpfcG9wczsKKwl1YXAtPnBvcnQudHlwZSAgICAgPSBQT1JUX1BNQUNfWklMT0c7CisJdWFwLT5wb3J0LmZsYWdzICAgID0gMDsKKworCXVhcC0+Y29udHJvbF9yZWcgICA9IHVhcC0+cG9ydC5tZW1iYXNlOworCXVhcC0+ZGF0YV9yZWcgICAgICA9IHVhcC0+Y29udHJvbF9yZWcgKyA0OworCXVhcC0+cG9ydF90eXBlICAgICA9IDA7CisKKwlwbXpfY29udmVydF90b196cyh1YXAsIENTOCwgMCwgOTYwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcG16X3Byb2JlKHZvaWQpCit7CisJaW50IGVycjsKKworCXBtel9wb3J0c19jb3VudCA9IDA7CisKKwlwbXpfcG9ydHNbMF0ubWF0ZSAgICAgID0gJnBtel9wb3J0c1sxXTsKKwlwbXpfcG9ydHNbMF0ucG9ydC5saW5lID0gMDsKKwlwbXpfcG9ydHNbMF0uZmxhZ3MgICAgID0gUE1BQ1pJTE9HX0ZMQUdfSVNfQ0hBTk5FTF9BOworCXBtel9wb3J0c1swXS5ub2RlICAgICAgPSAmc2NjX2FfcGRldjsKKwllcnIgPSBwbXpfaW5pdF9wb3J0KCZwbXpfcG9ydHNbMF0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcG16X3BvcnRzX2NvdW50Kys7CisKKwlwbXpfcG9ydHNbMV0ubWF0ZSAgICAgID0gJnBtel9wb3J0c1swXTsKKwlwbXpfcG9ydHNbMV0ucG9ydC5saW5lID0gMTsKKwlwbXpfcG9ydHNbMV0uZmxhZ3MgICAgID0gMDsKKwlwbXpfcG9ydHNbMV0ubm9kZSAgICAgID0gJnNjY19iX3BkZXY7CisJZXJyID0gcG16X2luaXRfcG9ydCgmcG16X3BvcnRzWzFdKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXBtel9wb3J0c19jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBtel9kaXNwb3NlX3BvcnQoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXApCit7CisJbWVtc2V0KHVhcCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BtYWNfcG9ydCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbXpfYXR0YWNoKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG16X3BvcnRzX2NvdW50OyBpKyspCisJCWlmIChwbXpfcG9ydHNbaV0ubm9kZSA9PSBwZGV2KQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHBtel9kZXRhY2goc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogI2lmZGVmIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEUKIAogc3RhdGljIHZvaWQgcG16X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KTsKQEAgLTE4OTYsMjggKzE5ODksNDEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG16X21hdGNoW10gPSAKIHsKIAl7Ci0JLm5hbWUgCQk9ICJjaC1hIiwKKwkubmFtZQkJPSAiY2gtYSIsCiAJfSwKIAl7Ci0JLm5hbWUgCQk9ICJjaC1iIiwKKwkubmFtZQkJPSAiY2gtYiIsCiAJfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFIChvZiwgcG16X21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgcG16X2RyaXZlciA9IAoteworc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgcG16X2RyaXZlciA9IHsKIAkubmFtZSAJCT0gInBtYWNfemlsb2ciLAogCS5tYXRjaF90YWJsZQk9IHBtel9tYXRjaCwKIAkucHJvYmUJCT0gcG16X2F0dGFjaCwKIAkucmVtb3ZlCQk9IHBtel9kZXRhY2gsCiAJLnN1c3BlbmQJPSBwbXpfc3VzcGVuZCwKLSAgICAgICAJLnJlc3VtZQkJPSBwbXpfcmVzdW1lLAorCS5yZXN1bWUJCT0gcG16X3Jlc3VtZSwKIH07CiAKKyNlbHNlCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtel9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChwbXpfZGV0YWNoKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gInNjYyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9wbXoodm9pZCkKIHsKIAlpbnQgcmMsIGk7CkBAIC0xOTUyLDE5ICsyMDU4LDI3IEBACiAJCQlwbXpfZGlzcG9zZV9wb3J0KCZwbXpfcG9ydHNbaV0pOwogCQlyZXR1cm4gcmM7CiAJfQotCQorCiAJLyoKIAkgKiBUaGVuIHdlIHJlZ2lzdGVyIHRoZSBtYWNpbyBkcml2ZXIgaXRzZWxmCiAJICovCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJcmV0dXJuIG1hY2lvX3JlZ2lzdGVyX2RyaXZlcigmcG16X2RyaXZlcik7CisjZWxzZQorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnBtel9kcml2ZXIsIHBtel9hdHRhY2gpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3Bteih2b2lkKQogewogCWludCBpOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJLyogR2V0IHJpZCBvZiBtYWNpby1kcml2ZXIgKGRldGFjaCBmcm9tIG1hY2lvKSAqLwogCW1hY2lvX3VucmVnaXN0ZXJfZHJpdmVyKCZwbXpfZHJpdmVyKTsKKyNlbHNlCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBtel9kcml2ZXIpOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgcG16X3BvcnRzX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1cG9ydCA9ICZwbXpfcG9ydHNbaV07CkBAIC0yMDMxLDEwICsyMTQ1LDEwIEBACiAJLyoKIAkgKiBYU2VydmUncyBkZWZhdWx0IHRvIDU3NjAwIGJwcwogCSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDIiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCi0JIAliYXVkID0gNTc2MDA7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwkJYmF1ZCA9IDU3NjAwOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIGFuIGludmFsaWQgdWFydCBudW1iZXIgaGFzIGJlZW4gc3BlY2lmaWVkLCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaCBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaAppbmRleCBmNmU3N2YxLi5jYmMzNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oCkBAIC0xLDcgKzEsMTUgQEAKICNpZm5kZWYgX19QTUFDX1pJTE9HX0hfXwogI2RlZmluZSBfX1BNQUNfWklMT0dfSF9fCiAKLSNkZWZpbmUgcG16X2RlYnVnKGZtdCxhcmcuLi4pCWRldl9kYmcoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2lmZGVmIENPTkZJR19QUENfUE1BQworI2RlZmluZSBwbXpfZGVidWcoZm10LCBhcmcuLi4pCWRldl9kYmcoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfZXJyb3IoZm10LCBhcmcuLi4pCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfaW5mbyhmbXQsIGFyZy4uLikJZGV2X2luZm8oJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgcG16X2RlYnVnKGZtdCwgYXJnLi4uKQlkZXZfZGJnKCZ1YXAtPm5vZGUtPmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9lcnJvcihmbXQsIGFyZy4uLikJZGV2X2VycigmdWFwLT5ub2RlLT5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfaW5mbyhmbXQsIGFyZy4uLikJZGV2X2luZm8oJnVhcC0+bm9kZS0+ZGV2LCBmbXQsICMjIGFyZykKKyNlbmRpZgogCiAvKgogICogQXQgbW9zdCAyIEVTQ0NzIHdpdGggMiBwb3J0cyBlYWNoCkBAIC0xNyw2ICsyNSw3IEBACiAJc3RydWN0IHVhcnRfcG9ydAkJcG9ydDsKIAlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQJCSptYXRlOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJLyogbWFjaW9fZGV2IGZvciB0aGUgZXNjYyBob2xkaW5nIHRoaXMgcG9ydCAobWF5YmUgYmUgbnVsbCBvbgogCSAqIGVhcmx5IGluaXRlZCBwb3J0KQogCSAqLwpAQCAtMjUsNiArMzQsOSBAQAogCSAqIG9mICJlc2NjIiBub2RlIChpZS4gY2gtYSBvciBjaC1iKQogCSAqLwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKm5vZGU7CisjZWxzZQorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpub2RlOworI2VuZGlmCiAKIAkvKiBQb3J0IHR5cGUgYXMgb2J0YWluZWQgZnJvbSBkZXZpY2UgdHJlZSAoSVJEQSwgbW9kZW0sIC4uLikgKi8KIAlpbnQJCQkJcG9ydF90eXBlOwpAQCAtNTUsMTAgKzY3LDEyIEBACiAJdm9sYXRpbGUgdTgJCQlfX2lvbWVtICpjb250cm9sX3JlZzsKIAl2b2xhdGlsZSB1OAkJCV9faW9tZW0gKmRhdGFfcmVnOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJdW5zaWduZWQgaW50CQkJdHhfZG1hX2lycTsKIAl1bnNpZ25lZCBpbnQJCQlyeF9kbWFfaXJxOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzCV9faW9tZW0gKnR4X2RtYV9yZWdzOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzCV9faW9tZW0gKnJ4X2RtYV9yZWdzOworI2VuZGlmCiAKIAlzdHJ1Y3Qga3Rlcm1pb3MJCQl0ZXJtaW9zX2NhY2hlOwogfTsKQEAgLTExMyw3ICsxMjcsNyBAQAogI2RlZmluZSBCUkdfVE9fQlBTKGJyZywgZnJlcSkgKChmcmVxKSAvIDIgLyAoKGJyZykgKyAyKSkKICNkZWZpbmUgQlBTX1RPX0JSRyhicHMsIGZyZXEpICgoKChmcmVxKSArIChicHMpKSAvICgyICogKGJwcykpKSAtIDIpCiAKLSNkZWZpbmUgWlNfQ0xPQ0sgICAgICAgICAzNjg2NDAwIAkvKiBaODUzMCBSVHhDIGlucHV0IGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgWlNfQ0xPQ0sgICAgICAgICAzNjg2NDAwCS8qIFo4NTMwIFJUeEMgaW5wdXQgY2xvY2sgcmF0ZSAqLwogCiAvKiBUaGUgWmlsb2cgcmVnaXN0ZXIgc2V0ICovCiAKQEAgLTE3MSw3ICsxODUsNyBAQAogCiAvKiBXcml0ZSBSZWdpc3RlciAzICovCiAKLSNkZWZpbmUJUnhFTkFCTEUgICAgICAgCTB4MQkvKiBSeCBFbmFibGUgKi8KKyNkZWZpbmUJUnhFTkFCTEUJMHgxCS8qIFJ4IEVuYWJsZSAqLwogI2RlZmluZQlTWU5DX0xfSU5ICTB4MgkvKiBTeW5jIENoYXJhY3RlciBMb2FkIEluaGliaXQgKi8KICNkZWZpbmUJQUREX1NNCQkweDQJLyogQWRkcmVzcyBTZWFyY2ggTW9kZSAoU0RMQykgKi8KICNkZWZpbmUJUnhDUkNfRU5BQgkweDgJLyogUnggQ1JDIEVuYWJsZSAqLwpAQCAtMTg1LDcgKzE5OSw3IEBACiAKIC8qIFdyaXRlIFJlZ2lzdGVyIDQgKi8KIAotI2RlZmluZQlQQVJfRU5BQiAgICAgICAJMHgxCS8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUJUEFSX0VOQUIJMHgxCS8qIFBhcml0eSBFbmFibGUgKi8KICNkZWZpbmUJUEFSX0VWRU4JMHgyCS8qIFBhcml0eSBFdmVuL09kZCogKi8KIAogI2RlZmluZQlTWU5DX0VOQUIJMAkvKiBTeW5jIE1vZGVzIEVuYWJsZSAqLwpAQCAtMjEwLDcgKzIyNCw3IEBACiAjZGVmaW5lCVR4Q1JDX0VOQUIJMHgxCS8qIFR4IENSQyBFbmFibGUgKi8KICNkZWZpbmUJUlRTCQkweDIJLyogUlRTICovCiAjZGVmaW5lCVNETENfQ1JDCTB4NAkvKiBTRExDL0NSQy0xNiAqLwotI2RlZmluZQlUeEVOQUJMRSAgICAgICAJMHg4CS8qIFR4IEVuYWJsZSAqLworI2RlZmluZQlUeEVOQUJMRQkweDgJLyogVHggRW5hYmxlICovCiAjZGVmaW5lCVNORF9CUksJCTB4MTAJLyogU2VuZCBCcmVhayAqLwogI2RlZmluZQlUeDUJCTB4MAkvKiBUeCA1IGJpdHMgKG9yIGxlc3MpL2NoYXJhY3RlciAqLwogI2RlZmluZQlUeDcJCTB4MjAJLyogVHggNyBiaXRzL2NoYXJhY3RlciAqLwpAQCAtMzcyLDExICszODYsMTEgQEAKICNkZWZpbmUgWlNfVFhfQUNUSVZFKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfVFhfQUNUSVZFKQogI2RlZmluZSBaU19XQU5UU19NT0RFTV9TVEFUVVMoVVApCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX01PREVNX1NUQVRVUykKICNkZWZpbmUgWlNfSVNfSVJEQShVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUkRBKQotI2RlZmluZSBaU19JU19JTlRNT0RFTShVUCkJICAgICAgIAkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JTlRNT0RFTSkKKyNkZWZpbmUgWlNfSVNfSU5UTU9ERU0oVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JTlRNT0RFTSkKICNkZWZpbmUgWlNfSEFTX0RNQShVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19IQVNfRE1BKQotI2RlZmluZSBaU19JU19BU0xFRVAoVVApICAgICAgIAkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfQVNMRUVQKQotI2RlZmluZSBaU19JU19PUEVOKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX09QRU4pCi0jZGVmaW5lIFpTX0lTX0lSUV9PTihVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUlFfT04pCi0jZGVmaW5lIFpTX0lTX0VYVENMSyhVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19FWFRDTEspCisjZGVmaW5lIFpTX0lTX0FTTEVFUChVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0FTTEVFUCkKKyNkZWZpbmUgWlNfSVNfT1BFTihVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19PUEVOKQorI2RlZmluZSBaU19JU19JUlFfT04oVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUlFfT04pCisjZGVmaW5lIFpTX0lTX0VYVENMSyhVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0VYVENMSykKIAogI2VuZGlmIC8qIF9fUE1BQ19aSUxPR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggOTU0MjFmYS4uZTkxZGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTY5NiwxMSArNjk2LDExIEBACiAJCWluZm8tPm11bHRpID0gaW5mby0+cXVpcmstPm11bHRpOwogCiAJaWYgKGluZm8tPm11bHRpID4gMSkKLQkJbXVsdGlfY29uZmlnKGxpbmspOworCQlpID0gbXVsdGlfY29uZmlnKGxpbmspOwogCWVsc2UKLQkJc2ltcGxlX2NvbmZpZyhsaW5rKTsKKwkJaSA9IHNpbXBsZV9jb25maWcobGluayk7CiAKLQlpZiAoaW5mby0+bmRldiA9PSAwKQorCWlmIChpIHx8IGluZm8tPm5kZXYgPT0gMCkKIAkJZ290byBmYWlsZWQ7CiAKIAkvKgpAQCAtNzE1LDYgKzcxNSw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKKwlkZXZfd2FybigmbGluay0+ZGV2LCAic2VyaWFsX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZVxuIik7CiAJc2VyaWFsX3JlbW92ZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMGVmY2RlZDUuLmY3ZDI1ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC01MTgsMzQgKzUxOCw2IEBACiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZmZmU4MCkKIAkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQwMDAxNTApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgxMCA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDAwMDE0MCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDA0ID8gMSA6IDA7IC8qIElSREEgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSBTQ0lGMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDA0ID8gMSA6IDA7IC8qIElSREEgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSBTQ0lGMikKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCSAgcmV0dXJuIHNjaV9pbihwb3J0LFNDeFNSKSYweDAwMTAgPyAxIDogMDsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzAwMDApCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0N4U1IpICYgMHgwMDAzID8gMSA6IDA7Ci0JZWxzZSBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0NDM4MDAwKQotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDeFNSKSAmIDB4MDAwMyA/IDEgOiAwOwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwKSAgfHwgXApAQCAtNTU4LDIwNyArNTMwLDE3IEBACiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKIAkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmU4MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0YjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0YzAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0ZDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMzAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjAgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoUFNEUikgJiAweDAyID8gMSA6IDA7IC8qIFNDSUYwICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFBBRFIpICYgMHg0MCA/IDEgOiAwOyAvKiBTQ0lGMSAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihQV0RSKSAmIDB4MDQgPyAxIDogMDsgLyogU0NJRjIgKi8KLQotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIwKSAmIDB4MDAwOCA/IDEgOiAwOyAvKiBTQ0lGMCAqLwotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIxKSAmIDB4MDAyMCA/IDEgOiAwOyAvKiBTQ0lGMSAqLwotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMiAqLwotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTMwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMyAqLwotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTQwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFI0KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGNCAqLwotICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTUwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFI1KSAmIDB4MDAwOCA/IDEgOiAwOyAvKiBTQ0lGNSAqLwotICAgICAgICByZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKLSMgIGRlZmluZSBTQ0ZTUiAgICAweDAwMTAKLSMgIGRlZmluZSBTQ0FTU1IgICAweDAwMTQKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpCi0JCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDRlNSKSkgICYgU0NJRl9CUksgPyAxIDogMDsKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoKHBvcnQtPm1hcGJhc2UgKyBTQ0FTU1IpKSAmIFNDSUZfQlJLID8gMSA6IDA7Ci0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotICAgICAgICAgcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1NQVFIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi19CiAjZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpbnQgY2ggPSAocG9ydC0+bWFwYmFzZSAtIFNNUjApID4+IDM7CiAJcmV0dXJuIChIODMwMF9TQ0lfRFIoY2gpICYgaDgzMDBfc2NpX3BpbnNbY2hdLnJ4KSA/IDEgOiAwOwogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQorI2Vsc2UgLyogZGVmYXVsdCBjYXNlIGZvciBub24tU0NJIHByb2Nlc3NvcnMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYvSVJEQSAqLwotCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyMzAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTI0MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjUwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVhMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYzAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVkMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWUwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4ODAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTkwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBODAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUIwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLSNlbmRpZgotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM1MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzYwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jIGIvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYwppbmRleCAzNGIzMWRhMC4uN2JmMTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jCkBAIC00MjEsNyArNDIxLDcgQEAKIAogc3RhdGljIGludCB0aW1idWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpcnE7CiAJc3RydWN0IHRpbWJ1YXJ0X3BvcnQgKnVhcnQ7CiAJc3RydWN0IHJlc291cmNlICppb21lbTsKIApAQCAtNDUzLDExICs0NTMsMTIgQEAKIAl1YXJ0LT5wb3J0Lm1hcGJhc2UgPSBpb21lbS0+c3RhcnQ7CiAJdWFydC0+cG9ydC5tZW1iYXNlID0gTlVMTDsKIAotCXVhcnQtPnBvcnQuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwotCWlmICh1YXJ0LT5wb3J0LmlycSA8IDApIHsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAJfQorCXVhcnQtPnBvcnQuaXJxID0gaXJxOwogCiAJdGFza2xldF9pbml0KCZ1YXJ0LT50YXNrbGV0LCB0aW1idWFydF90YXNrbGV0LCAodW5zaWduZWQgbG9uZyl1YXJ0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCBkNWQ3ZjIzLi4zYTVhMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMjU5LDYgKzI1OSw0MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgKCppbnRjX2VuYWJsZV9ub3ByaW9fZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkJCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkJdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCit9OworCitzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlLCBpbnQgZG9fZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJICAgdm9pZCAoKikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCisJCSAgIHVuc2lnbmVkIGludCk7CisKKwlpZiAoZG9fZW5hYmxlKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpKTsgY3B1KyspIHsKKwkJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKKwkJCWZuID0gaW50Y19lbmFibGVfbm9wcmlvX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldOworCQkJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNbX0lOVENfRk4oaGFuZGxlKV0sIDApOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9EKGhhbmRsZSkpOyBjcHUrKykgeworCQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOworCQkJZm4gPSBpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV07CisJCQlmbihhZGRyLCBoYW5kbGUsIGludGNfcmVnX2Zuc1tfSU5UQ19GTihoYW5kbGUpXSwgMCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgaW50Y19zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJcmV0dXJuIDA7IC8qIGFsbG93IHdha2V1cCwgYnV0IHNldHVwIGhhcmR3YXJlIGluIGludGNfc3VzcGVuZCgpICovCkBAIC00MDAsMTEgKzQzNywxMSBAQAogc3RhdGljIGludGNfZW51bSBfX2luaXQgaW50Y19ncnBfaWQoc3RydWN0IGludGNfZGVzYyAqZGVzYywKIAkJCQkgICAgaW50Y19lbnVtIGVudW1faWQpCiB7Ci0Jc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ncm91cHM7CisJc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ody5ncm91cHM7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2dyb3VwczsgaSsrKSB7Ci0JCWcgPSBkZXNjLT5ncm91cHMgKyBpOworCWZvciAoaSA9IDA7IGcgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfZ3JvdXBzOyBpKyspIHsKKwkJZyA9IGRlc2MtPmh3Lmdyb3VwcyArIGk7CiAKIAkJZm9yIChqID0gMDsgZy0+ZW51bV9pZHNbal07IGorKykgewogCQkJaWYgKGctPmVudW1faWRzW2pdICE9IGVudW1faWQpCkBAIC00MTcsMTkgKzQ1NCwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IF9pbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqcmVnX2lkeCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpmbGRfaWR4KQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPm1hc2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+aHcubWFza19yZWdzOworCXVuc2lnbmVkIGludCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKKwl3aGlsZSAobXIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX21hc2tfcmVncykgeworCQltciA9IGRlc2MtPmh3Lm1hc2tfcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7CkBAIC00NTUsMjkgKzQ5NCw0OSBAQAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAogCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSAqZmxkX2lkeCk7CiAJCX0KKworCQkqZmxkX2lkeCA9IDA7CisJCSgqcmVnX2lkeCkrKzsKIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBqID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX2ludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChkb19ncnBzKQogCQlyZXR1cm4gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgX2ludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpyZWdfaWR4LAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKmZsZF9pZHgpCiB7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByID0gZGVzYy0+cHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZSwgYml0OworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPmh3LnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgZm4sIG4sIG1vZGUsIGJpdDsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IHByICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCXByID0gZGVzYy0+cHJpb19yZWdzICsgaTsKKwl3aGlsZSAocHIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX3ByaW9fcmVncykgeworCQlwciA9IGRlc2MtPmh3LnByaW9fcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHByLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKHByLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKHByLT5zZXRfcmVnICYmIHByLT5jbHJfcmVnKSB7CkBAIC00OTUsMzQgKzU1NCw3OSBAQAogCQkJfQogCiAJCQlmbiArPSAocHItPnJlZ193aWR0aCA+PiAzKSAtIDE7CisJCQluID0gKmZsZF9pZHggKyAxOwogCi0JCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCQkJQlVHX09OKG4gKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKIAotCQkJYml0ID0gcHItPnJlZ193aWR0aCAtICgoaiArIDEpICogcHItPmZpZWxkX3dpZHRoKTsKKwkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAobiAqIHByLT5maWVsZF93aWR0aCk7CiAKIAkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKIAkJCQkJcHItPmZpZWxkX3dpZHRoLCBiaXQpOwogCQl9CisKKwkJKmZsZF9pZHggPSAwOworCQkoKnJlZ19pZHgpKys7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1bnNpZ25lZCBpbnQgaiA9IDA7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IF9pbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAmaSwgJmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoZG9fZ3JwcykKIAkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBpLCBqLCBkYXRhOworCisJLyogZ28gdGhyb3VnaCBhbmQgZW5hYmxlL2Rpc2FibGUgYWxsIG1hc2sgYml0cyAqLworCWkgPSBqID0gMDsKKwlkbyB7CisJCWRhdGEgPSBfaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgJmksICZqKTsKKwkJaWYgKGRhdGEpCisJCQlpbnRjX2VuYWJsZV9kaXNhYmxlKGQsIGRhdGEsIGVuYWJsZSk7CisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKKworCS8qIGdvIHRocm91Z2ggYW5kIGVuYWJsZS9kaXNhYmxlIGFsbCBwcmlvcml0eSBmaWVsZHMgKi8KKwlpID0gaiA9IDA7CisJZG8geworCQlkYXRhID0gX2ludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJCWlmIChkYXRhKQorCQkJaW50Y19lbmFibGVfZGlzYWJsZShkLCBkYXRhLCBlbmFibGUpOworCisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19hY2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAogCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgIGludGNfZW51bSBlbnVtX2lkKQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmFja19yZWdzOworCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmh3LmFja19yZWdzOwogCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspIHsKLQkJbXIgPSBkZXNjLT5hY2tfcmVncyArIGk7CisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfYWNrX3JlZ3M7IGkrKykgeworCQltciA9IGRlc2MtPmh3LmFja19yZWdzICsgaTsKIAogCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKIAkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKQEAgLTU0OSwxMSArNjUzLDExIEBACiAJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKIHsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+aHcuc2Vuc2VfcmVnczsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKIAotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOworCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPmh3Lm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQlzciA9IGRlc2MtPmh3LnNlbnNlX3JlZ3MgKyBpOwogCiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewogCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQpAQCAtNjU2LDcgKzc2MCw3IEBACiAJLyogaXJxIHNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0ICovCiAJZC0+Y2hpcC5tYXNrKGlycSk7CiAKLQlpZiAoZGVzYy0+YWNrX3JlZ3MpCisJaWYgKGRlc2MtPmh3LmFja19yZWdzKQogCQlhY2tfaGFuZGxlW2lycV0gPSBpbnRjX2Fja19kYXRhKGRlc2MsIGQsIGVudW1faWQpOwogfQogCkBAIC02ODQsNiArNzg4LDcgQEAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewogCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7CisJc3RydWN0IGludGNfaHdfZGVzYyAqaHcgPSAmZGVzYy0+aHc7CiAJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CiAKIAlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfTk9XQUlUKTsKQEAgLTY5MSwxMCArNzk2LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJmQtPmxpc3QpOwogCWxpc3RfYWRkKCZkLT5saXN0LCAmaW50Y19saXN0KTsKIAotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5hY2tfcmVncyA/IGRlc2MtPm5yX2Fja19yZWdzIDogMDsKKwlkLT5ucl9yZWcgPSBody0+bWFza19yZWdzID8gaHctPm5yX21hc2tfcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+cHJpb19yZWdzID8gaHctPm5yX3ByaW9fcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+c2Vuc2VfcmVncyA/IGh3LT5ucl9zZW5zZV9yZWdzIDogMDsKKwlkLT5ucl9yZWcgKz0gaHctPmFja19yZWdzID8gaHctPm5yX2Fja19yZWdzIDogMDsKIAogCWQtPnJlZyA9IGt6YWxsb2MoZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5yZWcpLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCkBAIC03MDIsMzAgKzgwNywzMSBAQAogI2VuZGlmCiAJayA9IDA7CiAKLQlpZiAoZGVzYy0+bWFza19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPm1hc2tfcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKKwlpZiAoaHctPm1hc2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPm1hc2tfcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0ga3phbGxvYyhkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5wcmlvX3JlZ3MpIHsKKwkJZC0+cHJpbyA9IGt6YWxsb2MoaHctPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnByaW8pLAorCQkJCSAgR0ZQX05PV0FJVCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPnByaW9fcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5wcmlvX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBremFsbG9jKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5zZW5zZV9yZWdzKSB7CisJCWQtPnNlbnNlID0ga3phbGxvYyhody0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+c2Vuc2UpLAorCQkJCSAgIEdGUF9OT1dBSVQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBody0+bnJfc2Vuc2VfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwogCX0KIAogCWQtPmNoaXAubmFtZSA9IGRlc2MtPm5hbWU7CkBAIC03MzgsMTggKzg0NCwyNiBAQAogCWQtPmNoaXAuc2V0X3R5cGUgPSBpbnRjX3NldF9zZW5zZTsKIAlkLT5jaGlwLnNldF93YWtlID0gaW50Y19zZXRfd2FrZTsKIAotCWlmIChkZXNjLT5hY2tfcmVncykgewotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+YWNrX3JlZ3NbaV0uc2V0X3JlZywgMCk7CisJaWYgKGh3LT5hY2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX2Fja19yZWdzOyBpKyspCisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKIAogCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKIAl9CiAKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZGlzYWJsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgaXJxcyAqLworCWlmIChkZXNjLT5mb3JjZV9kaXNhYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZGlzYWJsZSwgMCk7CisKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGJlZm9yZSByZWdpc3RlcmluZyBpcnFzICovCisJaWYgKGRlc2MtPmZvcmNlX2VuYWJsZSkKKwkJaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKGRlc2MsIGQsIGRlc2MtPmZvcmNlX2VuYWJsZSwgMCk7CisKIAlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCiAKIAkvKiByZWdpc3RlciB0aGUgdmVjdG9ycyBvbmUgYnkgb25lICovCi0JZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgewotCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGh3LT52ZWN0b3JzICsgaTsKIAkJdW5zaWduZWQgaW50IGlycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CiAJCXN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2M7CiAKQEAgLTc2NCw4ICs4NzgsOCBAQAogCiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGlycSk7CiAKLQkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKLQkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisJCWZvciAoayA9IGkgKyAxOyBrIDwgaHctPm5yX3ZlY3RvcnM7IGsrKykgeworCQkJc3RydWN0IGludGNfdmVjdCAqdmVjdDIgPSBody0+dmVjdG9ycyArIGs7CiAJCQl1bnNpZ25lZCBpbnQgaXJxMiA9IGV2dDJpcnEodmVjdDItPnZlY3QpOwogCiAJCQlpZiAodmVjdC0+ZW51bV9pZCAhPSB2ZWN0Mi0+ZW51bV9pZCkKQEAgLTc4NSwxMSArODk5LDE1IEBACiAJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CiAKIAkJCS8qIHJlZGlyZWN0IHRoaXMgaW50ZXJydXB0cyB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEyLCAmZC0+Y2hpcCwKLQkJCQkJaW50Y19yZWRpcmVjdF9pcnEsICJyZWRpcmVjdCIpOworCQkJc2V0X2lycV9jaGlwKGlycTIsICZkdW1teV9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEyLCBpbnRjX3JlZGlyZWN0X2lycSk7CiAJCQlzZXRfaXJxX2RhdGEoaXJxMiwgKHZvaWQgKilpcnEpOwogCQl9CiAJfQorCisJLyogZW5hYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGFmdGVyIHJlZ2lzdGVyaW5nIGlycXMgKi8KKwlpZiAoZGVzYy0+Zm9yY2VfZW5hYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZW5hYmxlLCAxKTsKIH0KIAogc3RhdGljIGludCBpbnRjX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODcyLDcgKzk5MCw3IEBACiAvKgogICogRHluYW1pYyBJUlEgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9vbl9ub2RlKHVuc2lnbmVkIGludCBpcnFfd2FudCwgaW50IG5vZGUpCit1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQsIGludCBub2RlKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAwLCBuZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg4MSwyNCArOTk5LDI4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUSwgdGhlbiBzY2FuLgorCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUQogCSAqLwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlycV93YW50LCBpbnRjX2lycV9tYXApKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoaXJxX3dhbnQsIGludGNfaXJxX21hcCkgPT0gMCkgeworCQluZXcgPSBpcnFfd2FudDsKKwl9IGVsc2UgeworCQkvKiAuLiB0aGVuIGZhbGwgYmFjayB0byBzY2FubmluZy4gKi8KIAkJbmV3ID0gZmluZF9maXJzdF96ZXJvX2JpdChpbnRjX2lycV9tYXAsIG5yX2lycXMpOwogCQlpZiAodW5saWtlbHkobmV3ID09IG5yX2lycXMpKQogCQkJZ290byBvdXRfdW5sb2NrOwogCi0JCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7Ci0JCWlmICh1bmxpa2VseSghZGVzYykpIHsKLQkJCXByX2luZm8oImNhbid0IGdldCBpcnFfZGVzYyBmb3IgJWRcbiIsIG5ldyk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQlkZXNjID0gbW92ZV9pcnFfZGVzYyhkZXNjLCBub2RlKTsKIAkJX19zZXRfYml0KG5ldywgaW50Y19pcnFfbWFwKTsKLQkJaXJxID0gbmV3OwogCX0KIAorCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQlwcl9pbmZvKCJjYW4ndCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbm9kZSk7CisJaXJxID0gbmV3OworCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKQEAgLTkxMyw3ICsxMDM1LDcgQEAKIAlpbnQgbmlkID0gY3B1X3RvX25vZGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpbnQgaXJxOwogCi0JaXJxID0gY3JlYXRlX2lycV9vbl9ub2RlKE5SX0lSUVNfTEVHQUNZLCBuaWQpOworCWlycSA9IGNyZWF0ZV9pcnFfbnIoTlJfSVJRU19MRUdBQ1ksIG5pZCk7CiAJaWYgKGlycSA9PSAwKQogCQlpcnEgPSAtMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9wZmMuYyBiL2RyaXZlcnMvc2gvcGZjLmMKaW5kZXggMDgyNjA0ZS4uY2YwMzAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvcGZjLmMKKysrIGIvZHJpdmVycy9zaC9wZmMuYwpAQCAtMzM3LDEyICszMzcsMzkgQEAKIAkJaWYgKCFlbnVtX2lkKQogCQkJYnJlYWs7CiAKKwkJLyogZmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uIGVudW0gKi8KIAkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsICZncGlvYy0+ZnVuY3Rpb24pOwotCQlpZiAoIWluX3JhbmdlICYmIHJhbmdlKSB7Ci0JCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCQlpZiAoIWluX3JhbmdlKSB7CisJCQkvKiBub3QgYSBmdW5jdGlvbiBlbnVtICovCisJCQlpZiAocmFuZ2UpIHsKKwkJCQkvKgorCQkJCSAqIG90aGVyIHJhbmdlIGV4aXN0cywgc28gdGhpcyBwaW4gaXMKKwkJCQkgKiBhIHJlZ3VsYXIgR1BJTyBwaW4gdGhhdCBub3cgaXMgYmVpbmcKKwkJCQkgKiBib3VuZCB0byBhIHNwZWNpZmljIGRpcmVjdGlvbi4KKwkJCQkgKgorCQkJCSAqIGZvciB0aGlzIGNhc2Ugd2Ugb25seSBhbGxvdyBmdW5jdGlvbiBlbnVtcworCQkJCSAqIGFuZCB0aGUgZW51bXMgdGhhdCBtYXRjaCB0aGUgb3RoZXIgcmFuZ2UuCisJCQkJICovCisJCQkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsIHJhbmdlKTsKIAotCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQotCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogc3BlY2lhbCBjYXNlIHBhc3MgdGhyb3VnaCBmb3IgZml4ZWQKKwkJCQkgKiBpbnB1dC1vbmx5IG9yIG91dHB1dC1vbmx5IHBpbnMgd2l0aG91dAorCQkJCSAqIGZ1bmN0aW9uIGVudW0gcmVnaXN0ZXIgYXNzb2NpYXRpb24uCisJCQkJICovCisJCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQorCQkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBubyBvdGhlciByYW5nZSBleGlzdHMsIHNvIHRoaXMgcGluCisJCQkJICogbXVzdCB0aGVuIGJlIG9mIHRoZSBmdW5jdGlvbiB0eXBlLgorCQkJCSAqCisJCQkJICogYWxsb3cgZnVuY3Rpb24gdHlwZSBwaW5zIHRvIHNlbGVjdAorCQkJCSAqIGFueSBjb21iaW5hdGlvbiBvZiBmdW5jdGlvbi9pbi9vdXQKKwkJCQkgKiBpbiB0aGVpciBNQVJLIGxpc3RzLgorCQkJCSAqLworCQkJCWluX3JhbmdlID0gMTsKKwkJCX0KIAkJfQogCiAJCWlmICghaW5fcmFuZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCBmNTVlYjAxLi5hMTkxZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTEwMCw2ICsxMDAsMjMgQEAKIAkgIGluZXhwZW5zaXZlIGJhdHRlcnkgcG93ZXJlZCBtaWNyb2NvbnRyb2xsZXIgZXZhbHVhdGlvbiBib2FyZC4KIAkgIFRoaXMgc2FtZSBjYWJsZSBjYW4gYmUgdXNlZCB0byBmbGFzaCBuZXcgZmlybXdhcmUuCiAKK2NvbmZpZyBTUElfQ09MREZJUkVfUVNQSQorCXRyaXN0YXRlICJGcmVlc2NhbGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gKE01MjB4IHx8IE01MjN4IHx8IE01MjQ5IHx8IE01Mjd4IHx8IE01Mjh4IHx8IE01MzJ4KQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIGluIG1hc3RlcgorCSAgbW9kZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgY29sZGZpcmVfcXNwaS4KKworY29uZmlnIFNQSV9EQVZJTkNJCisJdHJpc3RhdGUgIlNQSSBjb250cm9sbGVyIGRyaXZlciBmb3IgRGFWaW5jaS9EQTh4eCBTb0MncyIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9EQVZJTkNJCisJc2VsZWN0IFNQSV9CSVRCQU5HCisJaGVscAorCSAgU1BJIG1hc3RlciBjb250cm9sbGVyIGZvciBEYVZpbmNpIGFuZCBEQTh4eCBTUEkgbW9kdWxlcy4KKwogY29uZmlnIFNQSV9HUElPCiAJdHJpc3RhdGUgIkdQSU8tYmFzZWQgYml0YmFuZ2luZyBTUEkgTWFzdGVyIgogCWRlcGVuZHMgb24gR0VORVJJQ19HUElPCkBAIC0xNjQsNyArMTgxLDcgQEAKIAogY29uZmlnIFNQSV9PTUFQMjRYWAogCXRyaXN0YXRlICJNY1NQSSBkcml2ZXIgZm9yIE9NQVAyNHh4L09NQVAzNHh4IgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWCB8fCBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAloZWxwCiAJICBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZm9yIE9NQVAyNHh4L09NQVAzNHh4IE11bHRpY2hhbm5lbCBTUEkKIAkgIChNY1NQSSkgbW9kdWxlcy4KQEAgLTMwOCw3ICszMjUsNyBAQAogIwogCiBjb25maWcgU1BJX0RFU0lHTldBUkUKLQlib29sICJEZXNpZ25XYXJlIFNQSSBjb250cm9sbGVyIGNvcmUgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSCiAJaGVscAogCSAgZ2VuZXJhbCBkcml2ZXIgZm9yIFNQSSBjb250cm9sbGVyIGNvcmUgZnJvbSBEZXNpZ25XYXJlCkBAIC0zMTcsNiArMzM0LDEwIEBACiAJdHJpc3RhdGUgIlBDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgY29yZSIKIAlkZXBlbmRzIG9uIFNQSV9ERVNJR05XQVJFICYmIFBDSQogCitjb25maWcgU1BJX0RXX01NSU8KKwl0cmlzdGF0ZSAiTWVtb3J5LW1hcHBlZCBpbyBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgY29yZSIKKwlkZXBlbmRzIG9uIFNQSV9ERVNJR05XQVJFICYmIEhBVkVfQ0xLCisKICMKICMgVGhlcmUgYXJlIGxvdHMgb2YgU1BJIGRldmljZSB0eXBlcywgd2l0aCBzZW5zb3JzIGFuZCBtZW1vcnkKICMgYmVpbmcgcHJvYmFibHkgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgb25lcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggZjNkMjgxMC4uZDdkMGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE2LDggKzE2LDExIEBACiBvYmotJChDT05GSUdfU1BJX0JJVEJBTkcpCQkrPSBzcGlfYml0YmFuZy5vCiBvYmotJChDT05GSUdfU1BJX0FVMTU1MCkJCSs9IGF1MTU1MF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9CVVRURVJGTFkpCQkrPSBzcGlfYnV0dGVyZmx5Lm8KK29iai0kKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkJCSs9IGNvbGRmaXJlX3FzcGkubworb2JqLSQoQ09ORklHX1NQSV9EQVZJTkNJKQkJKz0gZGF2aW5jaV9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9ERVNJR05XQVJFKQkJKz0gZHdfc3BpLm8KIG9iai0kKENPTkZJR19TUElfRFdfUENJKQkJKz0gZHdfc3BpX3BjaS5vCitvYmotJChDT05GSUdfU1BJX0RXX01NSU8pCQkrPSBkd19zcGlfbW1pby5vCiBvYmotJChDT05GSUdfU1BJX0dQSU8pCQkJKz0gc3BpX2dwaW8ubwogb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gc3BpX2lteC5vCiBvYmotJChDT05GSUdfU1BJX0xNNzBfTExQKQkJKz0gc3BpX2xtNzBsbHAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IGZmNWJiYjkuLjlhZWI2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTM2Myw2ICszNjMsNyBAQAogCXZvaWQJCQkJKnJ4X2VuZDsKIAllbnVtIHNzcF9yZWFkaW5nCQlyZWFkOwogCWVudW0gc3NwX3dyaXRpbmcJCXdyaXRlOworCXUzMgkJCQlleHBfZmlmb19sZXZlbDsKIH07CiAKIC8qKgpAQCAtNTAxLDYgKzUwMiw5IEBACiAJCXdoaWxlIChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19STkUpCiAJCQlyZWFkdyhTU1BfRFIocGwwMjItPnZpcnRiYXNlKSk7CiAJfSB3aGlsZSAoKHJlYWR3KFNTUF9TUihwbDAyMi0+dmlydGJhc2UpKSAmIFNTUF9TUl9NQVNLX0JTWSkgJiYgbGltaXQtLSk7CisKKwlwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwgPSAwOworCiAJcmV0dXJuIGxpbWl0OwogfQogCkBAIC01ODMsMTAgKzU4Nyw5IEBACiAJICogZXJyb25zIGluIDhiaXQgd2lkZSB0cmFuc2ZlcnMgb24gQVJNIHZhcmlhbnRzIChqdXN0IDggd29yZHMKIAkgKiBGSUZPLCBtZWFucyBvbmx5IDh4OCA9IDY0IGJpdHMgaW4gRklGTykgYXQgbGVhc3QuCiAJICoKLQkgKiBGSVhNRTogY3VycmVudGx5IHdlIGhhdmUgbm8gbG9naWMgdG8gYWNjb3VudCBmb3IgdGhpcy4KLQkgKiBwZXJoYXBzIHRoZXJlIGlzIGV2ZW4gc29tZXRoaW5nIGJyb2tlbiBpbiBIVyByZWdhcmRpbmcKLQkgKiA4Yml0IHRyYW5zZmVycyAoaXQgZG9lc24ndCBmYWlsIG9uIDE2Yml0KSBzbyB0aGlzIG5lZWRzCi0JICogbW9yZSBpbnZlc3RpZ2F0aW9uLi4uCisJICogVG8gcHJldmVudCB0aGlzIGlzc3VlLCB0aGUgVFggRklGTyBpcyBvbmx5IGZpbGxlZCB0byB0aGUKKwkgKiB1bnVzZWQgUlggRklGTyBmaWxsIGxlbmd0aCwgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBUWAorCSAqIEZJRk8gc3RhdHVzIGZsYWcgaW5kaWNhdGVzLgogCSAqLwogCWRldl9kYmcoJnBsMDIyLT5hZGV2LT5kZXYsCiAJCSIlcywgcng6ICVwLCByeGVuZDogJXAsIHR4OiAlcCwgdHhlbmQ6ICVwXG4iLApAQCAtNjEzLDExICs2MTYsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXBsMDIyLT5yeCArPSAocGwwMjItPmN1cl9jaGlwLT5uX2J5dGVzKTsKKwkJcGwwMjItPmV4cF9maWZvX2xldmVsLS07CiAJfQogCS8qCi0JICogV3JpdGUgYXMgbXVjaCBhcyB5b3UgY2FuLCB3aGlsZSBrZWVwaW5nIGFuIGV5ZSBvbiB0aGUgUlggRklGTyEKKwkgKiBXcml0ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHVwIHRvIHRoZSBSWCBGSUZPIHNpemUKIAkgKi8KLQl3aGlsZSAoKHJlYWR3KFNTUF9TUihwbDAyMi0+dmlydGJhc2UpKSAmIFNTUF9TUl9NQVNLX1RORikKKwl3aGlsZSAoKHBsMDIyLT5leHBfZmlmb19sZXZlbCA8IHBsMDIyLT52ZW5kb3ItPmZpZm9kZXB0aCkKIAkgICAgICAgJiYgKHBsMDIyLT50eCA8IHBsMDIyLT50eF9lbmQpKSB7CiAJCXN3aXRjaCAocGwwMjItPndyaXRlKSB7CiAJCWNhc2UgV1JJVElOR19OVUxMOgpAQCAtNjM0LDYgKzYzOCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlwbDAyMi0+dHggKz0gKHBsMDIyLT5jdXJfY2hpcC0+bl9ieXRlcyk7CisJCXBsMDIyLT5leHBfZmlmb19sZXZlbCsrOwogCQkvKgogCQkgKiBUaGlzIGlubmVyIHJlYWRlciB0YWtlcyBjYXJlIG9mIHRoaW5ncyBhcHBlYXJpbmcgaW4gdGhlIFJYCiAJCSAqIEZJRk8gYXMgd2UncmUgdHJhbnNtaXR0aW5nLiBUaGlzIHdpbGwgaGFwcGVuIGEgbG90IHNpbmNlIHRoZQpAQCAtNjYwLDYgKzY2NSw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlwbDAyMi0+cnggKz0gKHBsMDIyLT5jdXJfY2hpcC0+bl9ieXRlcyk7CisJCQlwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwtLTsKIAkJfQogCX0KIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCmluZGV4IGNmZDVmZjkuLmJhOGFjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKQEAgLTQxMiwxMSArNDEyLDEzIEBACiAJfQogCiAJLyogcHV0IGJ1ZmZlcnMgb24gdGhlIHJpbmcgKi8KLQlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoaHctPmRtYV9yeF9jaCwgaHctPnJ4LCB0LT5sZW4pOworCXJlcyA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdChody0+ZG1hX3J4X2NoLCB2aXJ0X3RvX3BoeXMoaHctPnJ4KSwKKwkJCQkgICAgdC0+bGVuLCBERE1BX0ZMQUdTX0lFKTsKIAlpZiAoIXJlcykKIAkJZGV2X2Vycihody0+ZGV2LCAicnggZG1hIHB1dCBkZXN0IGVycm9yXG4iKTsKIAotCXJlcyA9IGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGh3LT5kbWFfdHhfY2gsICh2b2lkICopaHctPnR4LCB0LT5sZW4pOworCXJlcyA9IGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGh3LT5kbWFfdHhfY2gsIHZpcnRfdG9fcGh5cyhody0+dHgpLAorCQkJCSAgICAgIHQtPmxlbiwgRERNQV9GTEFHU19JRSk7CiAJaWYgKCFyZXMpCiAJCWRldl9lcnIoaHctPmRldiwgInR4IGRtYSBwdXQgc291cmNlIGVycm9yXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvY29sZGZpcmVfcXNwaS5jIGIvZHJpdmVycy9zcGkvY29sZGZpcmVfcXNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YmUzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9jb2xkZmlyZV9xc3BpLmMKQEAgLTAsMCArMSw2NDAgQEAKKy8qCisgKiBGcmVlc2NhbGUvTW90b3JvbGEgQ29sZGZpcmUgUXVldWVkIFNQSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBTdGV2ZW4gS2luZyA8c2ZraW5nQGZkd2RjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9tY2Zxc3BpLmg+CisKKyNkZWZpbmUJRFJJVkVSX05BTUUgIm1jZnFzcGkiCisKKyNkZWZpbmUJTUNGUVNQSV9CVVNDTEsJCQkoTUNGX0JVU0NMSyAvIDIpCisKKyNkZWZpbmUJTUNGUVNQSV9RTVIJCQkweDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FNUl9NU1RSCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RTVJfQ1BPTAkweDAyMDAKKyNkZWZpbmUJCU1DRlFTUElfUU1SX0NQSEEJMHgwMTAwCisjZGVmaW5lCU1DRlFTUElfUURMWVIJCQkweDA0CisjZGVmaW5lCQlNQ0ZRU1BJX1FETFlSX1NQRQkweDgwMDAKKyNkZWZpbmUJTUNGUVNQSV9RV1IJCQkweDA4CisjZGVmaW5lCQlNQ0ZRU1BJX1FXUl9IQUxUCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RV1JfV1JFTgkweDQwMDAKKyNkZWZpbmUJCU1DRlFTUElfUVdSX0NTSVYJMHgxMDAwCisjZGVmaW5lCU1DRlFTUElfUUlSCQkJMHgwQworI2RlZmluZQkJTUNGUVNQSV9RSVJfV0NFRkIJMHg4MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJUQgkweDQwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX0FCUlRMCTB4MTAwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfV0NFRkUJMHgwODAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJURQkweDA0MDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1NQSUZFCTB4MDEwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfV0NFRgkweDAwMDgKKyNkZWZpbmUJCU1DRlFTUElfUUlSX0FCUlQJMHgwMDA0CisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9TUElGCTB4MDAwMQorI2RlZmluZQlNQ0ZRU1BJX1FBUgkJCTB4MDEwCisjZGVmaW5lCQlNQ0ZRU1BJX1FBUl9UWEJVRgkweDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FBUl9SWEJVRgkweDEwCisjZGVmaW5lCQlNQ0ZRU1BJX1FBUl9DTURCVUYJMHgyMAorI2RlZmluZQlNQ0ZRU1BJX1FEUgkJCTB4MDE0CisjZGVmaW5lCU1DRlFTUElfUUNSCQkJMHgwMTQKKyNkZWZpbmUJCU1DRlFTUElfUUNSX0NPTlQJMHg4MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FDUl9CSVRTRQkweDQwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUNSX0RUCQkweDIwMDAKKworc3RydWN0IG1jZnFzcGkgeworCXZvaWQgX19pb21lbSAqaW9iYXNlOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBtY2Zxc3BpX2NzX2NvbnRyb2wgKmNzX2NvbnRyb2w7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBtc2dxOworfTsKKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xbXIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RTVIpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FkbHlyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUURMWVIpOworfQorCitzdGF0aWMgdTE2IG1jZnFzcGlfcmRfcWRseXIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJcmV0dXJuIHJlYWR3KG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUURMWVIpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3F3cihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FXUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcWlyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUUlSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xYXIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RQVIpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FkcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FEUik7Cit9CisKK3N0YXRpYyB1MTYgbWNmcXNwaV9yZF9xZHIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJcmV0dXJuIHJlYWR3KG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUURSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV9jc19zZWxlY3Qoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHU4IGNoaXBfc2VsZWN0LAorCQkJICAgIGJvb2wgY3NfaGlnaCkKK3sKKwltY2Zxc3BpLT5jc19jb250cm9sLT5zZWxlY3QobWNmcXNwaS0+Y3NfY29udHJvbCwgY2hpcF9zZWxlY3QsIGNzX2hpZ2gpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX2NzX2Rlc2VsZWN0KHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1OCBjaGlwX3NlbGVjdCwKKwkJCQlib29sIGNzX2hpZ2gpCit7CisJbWNmcXNwaS0+Y3NfY29udHJvbC0+ZGVzZWxlY3QobWNmcXNwaS0+Y3NfY29udHJvbCwgY2hpcF9zZWxlY3QsIGNzX2hpZ2gpOworfQorCitzdGF0aWMgaW50IG1jZnFzcGlfY3Nfc2V0dXAoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJcmV0dXJuIChtY2Zxc3BpLT5jc19jb250cm9sICYmIG1jZnFzcGktPmNzX2NvbnRyb2wtPnNldHVwKSA/CisJCW1jZnFzcGktPmNzX2NvbnRyb2wtPnNldHVwKG1jZnFzcGktPmNzX2NvbnRyb2wpIDogMDsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV9jc190ZWFyZG93bihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlpZiAobWNmcXNwaS0+Y3NfY29udHJvbCAmJiBtY2Zxc3BpLT5jc19jb250cm9sLT50ZWFyZG93bikKKwkJbWNmcXNwaS0+Y3NfY29udHJvbC0+dGVhcmRvd24obWNmcXNwaS0+Y3NfY29udHJvbCk7Cit9CisKK3N0YXRpYyB1OCBtY2Zxc3BpX3Ftcl9iYXVkKHUzMiBzcGVlZF9oeikKK3sKKwlyZXR1cm4gY2xhbXAoKE1DRlFTUElfQlVTQ0xLICsgc3BlZWRfaHogLSAxKSAvIHNwZWVkX2h6LCAydSwgMjU1dSk7Cit9CisKK3N0YXRpYyBib29sIG1jZnFzcGlfcWRseXJfc3BlKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiBtY2Zxc3BpX3JkX3FkbHlyKG1jZnFzcGkpICYgTUNGUVNQSV9RRExZUl9TUEU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2Zxc3BpX2lycV9oYW5kbGVyKGludCB0aGlzX2lycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gZGV2X2lkOworCisJLyogY2xlYXIgaW50ZXJydXB0ICovCisJbWNmcXNwaV93cl9xaXIobWNmcXNwaSwgTUNGUVNQSV9RSVJfU1BJRkUgfCBNQ0ZRU1BJX1FJUl9TUElGKTsKKwl3YWtlX3VwKCZtY2Zxc3BpLT53YWl0cSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfdHJhbnNmZXJfbXNnOChzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdW5zaWduZWQgY291bnQsCisJCQkJICBjb25zdCB1OCAqdHhidWYsIHU4ICpyeGJ1ZikKK3sKKwl1bnNpZ25lZCBpLCBuLCBvZmZzZXQgPSAwOworCisJbiA9IG1pbihjb3VudCwgMTZ1KTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX0NNREJVRik7CisJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgTUNGUVNQSV9RQ1JfQklUU0UpOworCisJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfVFhCVUYpOworCWlmICh0eGJ1ZikKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwllbHNlCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQorCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgMCk7CisKKwljb3VudCAtPSBuOworCWlmIChjb3VudCkgeworCQl1MTYgcXdyID0gMHhmMDg7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIDB4NzAwKTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisKKwkJZG8geworCQkJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwkJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIHF3cik7CisJCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwkJCWlmIChyeGJ1ZikgeworCQkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksCisJCQkJCSAgICAgICBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwkJCX0KKwkJCW4gPSBtaW4oY291bnQsIDh1KTsKKwkJCWlmICh0eGJ1ZikgeworCQkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksCisJCQkJCSAgICAgICBNQ0ZRU1BJX1FBUl9UWEJVRiArIG9mZnNldCk7CisJCQkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgKnR4YnVmKyspOworCQkJfQorCQkJcXdyID0gKG9mZnNldCA/IDB4ODA4IDogMCkgKyAoKG4gLSAxKSA8PCA4KTsKKwkJCW9mZnNldCBePSA4OworCQkJY291bnQgLT0gbjsKKwkJfSB3aGlsZSAoY291bnQpOworCQl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwkJaWYgKHJ4YnVmKSB7CisJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQlvZmZzZXQgXj0gODsKKwkJfQorCX0gZWxzZSB7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIChuIC0gMSkgPDwgOCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCX0KKwl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCWlmIChyeGJ1ZikgeworCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCX0KK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV90cmFuc2Zlcl9tc2cxNihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdW5zaWduZWQgY291bnQsCisJCQkJICAgY29uc3QgdTE2ICp0eGJ1ZiwgdTE2ICpyeGJ1ZikKK3sKKwl1bnNpZ25lZCBpLCBuLCBvZmZzZXQgPSAwOworCisJbiA9IG1pbihjb3VudCwgMTZ1KTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX0NNREJVRik7CisJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgTUNGUVNQSV9RQ1JfQklUU0UpOworCisJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfVFhCVUYpOworCWlmICh0eGJ1ZikKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwllbHNlCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQorCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgMCk7CisKKwljb3VudCAtPSBuOworCWlmIChjb3VudCkgeworCQl1MTYgcXdyID0gMHhmMDg7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIDB4NzAwKTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisKKwkJZG8geworCQkJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwkJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIHF3cik7CisJCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwkJCWlmIChyeGJ1ZikgeworCQkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksCisJCQkJCSAgICAgICBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwkJCX0KKwkJCW4gPSBtaW4oY291bnQsIDh1KTsKKwkJCWlmICh0eGJ1ZikgeworCQkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksCisJCQkJCSAgICAgICBNQ0ZRU1BJX1FBUl9UWEJVRiArIG9mZnNldCk7CisJCQkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgKnR4YnVmKyspOworCQkJfQorCQkJcXdyID0gKG9mZnNldCA/IDB4ODA4IDogMHgwMDApICsgKChuIC0gMSkgPDwgOCk7CisJCQlvZmZzZXQgXj0gODsKKwkJCWNvdW50IC09IG47CisJCX0gd2hpbGUgKGNvdW50KTsKKwkJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgcXdyKTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCWlmIChyeGJ1ZikgeworCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCQkJb2Zmc2V0IF49IDg7CisJCX0KKwl9IGVsc2UgeworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAobiAtIDEpIDw8IDgpOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwl9CisJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwlpZiAocnhidWYpIHsKKwkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jZnFzcGksIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmbWNmcXNwaS0+bXNncSkpIHsKKwkJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CisJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CisJCWludCBzdGF0dXMgPSAwOworCisJCW1zZyA9IGNvbnRhaW5lcl9vZihtY2Zxc3BpLT5tc2dxLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwKKwkJCQkgICBxdWV1ZSk7CisKKwkJbGlzdF9kZWxfaW5pdCgmbWNmcXNwaS0+bXNncSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKworCQlzcGkgPSBtc2ctPnNwaTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQkJYm9vbCBjc19oaWdoID0gc3BpLT5tb2RlICYgU1BJX0NTX0hJR0g7CisJCQl1MTYgcW1yID0gTUNGUVNQSV9RTVJfTVNUUjsKKworCQkJaWYgKHhmZXItPmJpdHNfcGVyX3dvcmQpCisJCQkJcW1yIHw9IHhmZXItPmJpdHNfcGVyX3dvcmQgPDwgMTA7CisJCQllbHNlCisJCQkJcW1yIHw9IHNwaS0+Yml0c19wZXJfd29yZCA8PCAxMDsKKwkJCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJCQlxbXIgfD0gTUNGUVNQSV9RTVJfQ1BIQTsKKwkJCWlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKKwkJCQlxbXIgfD0gTUNGUVNQSV9RTVJfQ1BPTDsKKwkJCWlmICh4ZmVyLT5zcGVlZF9oeikKKwkJCQlxbXIgfD0gbWNmcXNwaV9xbXJfYmF1ZCh4ZmVyLT5zcGVlZF9oeik7CisJCQllbHNlCisJCQkJcW1yIHw9IG1jZnFzcGlfcW1yX2JhdWQoc3BpLT5tYXhfc3BlZWRfaHopOworCQkJbWNmcXNwaV93cl9xbXIobWNmcXNwaSwgcW1yKTsKKworCQkJbWNmcXNwaV9jc19zZWxlY3QobWNmcXNwaSwgc3BpLT5jaGlwX3NlbGVjdCwgY3NfaGlnaCk7CisKKwkJCW1jZnFzcGlfd3JfcWlyKG1jZnFzcGksIE1DRlFTUElfUUlSX1NQSUZFKTsKKwkJCWlmICgoeGZlci0+Yml0c19wZXJfd29yZCA/IHhmZXItPmJpdHNfcGVyX3dvcmQgOgorCQkJCQkJc3BpLT5iaXRzX3Blcl93b3JkKSA9PSA4KQorCQkJCW1jZnFzcGlfdHJhbnNmZXJfbXNnOChtY2Zxc3BpLCB4ZmVyLT5sZW4sCisJCQkJCQkgICAgICB4ZmVyLT50eF9idWYsCisJCQkJCQkgICAgICB4ZmVyLT5yeF9idWYpOworCQkJZWxzZQorCQkJCW1jZnFzcGlfdHJhbnNmZXJfbXNnMTYobWNmcXNwaSwgeGZlci0+bGVuIC8gMiwKKwkJCQkJCSAgICAgICB4ZmVyLT50eF9idWYsCisJCQkJCQkgICAgICAgeGZlci0+cnhfYnVmKTsKKwkJCW1jZnFzcGlfd3JfcWlyKG1jZnFzcGksIDApOworCisJCQlpZiAoeGZlci0+ZGVsYXlfdXNlY3MpCisJCQkJdWRlbGF5KHhmZXItPmRlbGF5X3VzZWNzKTsKKwkJCWlmICh4ZmVyLT5jc19jaGFuZ2UpIHsKKwkJCQlpZiAoIWxpc3RfaXNfbGFzdCgmeGZlci0+dHJhbnNmZXJfbGlzdCwKKwkJCQkJCSAgJm1zZy0+dHJhbnNmZXJzKSkKKwkJCQkJbWNmcXNwaV9jc19kZXNlbGVjdChtY2Zxc3BpLAorCQkJCQkJCSAgICBzcGktPmNoaXBfc2VsZWN0LAorCQkJCQkJCSAgICBjc19oaWdoKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGxpc3RfaXNfbGFzdCgmeGZlci0+dHJhbnNmZXJfbGlzdCwKKwkJCQkJCSAmbXNnLT50cmFuc2ZlcnMpKQorCQkJCQltY2Zxc3BpX2NzX2Rlc2VsZWN0KG1jZnFzcGksCisJCQkJCQkJICAgIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJCQkJICAgIGNzX2hpZ2gpOworCQkJfQorCQkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHhmZXItPmxlbjsKKwkJfQorCQltc2ctPnN0YXR1cyA9IHN0YXR1czsKKwkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1jZnFzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCWlmICh4ZmVyLT5iaXRzX3Blcl93b3JkICYmICgoeGZlci0+Yml0c19wZXJfd29yZCA8IDgpCisJCQkJCXx8ICh4ZmVyLT5iaXRzX3Blcl93b3JkID4gMTYpKSkgeworCQkJZGV2X2RiZygmc3BpLT5kZXYsCisJCQkJIiVkIGJpdHMgcGVyIHdvcmQgaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCQl4ZmVyLT5iaXRzX3Blcl93b3JkKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlpZiAoeGZlci0+c3BlZWRfaHopIHsKKwkJCXUzMiByZWFsX3NwZWVkID0gTUNGUVNQSV9CVVNDTEsgLworCQkJCW1jZnFzcGlfcW1yX2JhdWQoeGZlci0+c3BlZWRfaHopOworCQkJaWYgKHJlYWxfc3BlZWQgIT0geGZlci0+c3BlZWRfaHopCisJCQkJZGV2X2RiZygmc3BpLT5kZXYsCisJCQkJCSJ1c2luZyBzcGVlZCAlZCBpbnN0ZWFkIG9mICVkXG4iLAorCQkJCQlyZWFsX3NwZWVkLCB4ZmVyLT5zcGVlZF9oeik7CisJCX0KKwl9CisJbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJbXNnLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJm1jZnFzcGktPm1zZ3EpOworCXF1ZXVlX3dvcmsobWNmcXNwaS0+d29ya3EsICZtY2Zxc3BpLT53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJbXNnLT5zdGF0dXMgPSAtRUlOVkFMOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG1jZnFzcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpZiAoKHNwaS0+Yml0c19wZXJfd29yZCA8IDgpIHx8IChzcGktPmJpdHNfcGVyX3dvcmQgPiAxNikpIHsKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzIHBlciB3b3JkIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlzcGktPmJpdHNfcGVyX3dvcmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPj0gc3BpLT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0KSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgY2hpcCBzZWxlY3QgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1jZnFzcGlfY3NfZGVzZWxlY3Qoc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3RlciksCisJCQkgICAgc3BpLT5jaGlwX3NlbGVjdCwgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCisJZGV2X2RiZygmc3BpLT5kZXYsCisJCQkiYml0cyBwZXIgd29yZCAlZCwgY2hpcCBzZWxlY3QgJWQsIHNwZWVkICVkIEtIelxuIiwKKwkJCXNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCShNQ0ZRU1BJX0JVU0NMSyAvIG1jZnFzcGlfcW1yX2JhdWQoc3BpLT5tYXhfc3BlZWRfaHopKQorCQkJLyAxMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtY2Zxc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgbWNmcXNwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgc3RhdHVzOworCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YoKm1jZnFzcGkpKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAic3BpX2FsbG9jX21hc3RlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltY2Zxc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9nZXRfcmVzb3VyY2UgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOWElPOworCQlnb3RvIGZhaWwwOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsMDsKKwl9CisKKwltY2Zxc3BpLT5pb2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFtY2Zxc3BpLT5pb2Jhc2UpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KKworCW1jZnFzcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKG1jZnFzcGktPmlycSA8IDApIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZ2V0X2lycSBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5YSU87CisJCWdvdG8gZmFpbDI7CisJfQorCisJc3RhdHVzID0gcmVxdWVzdF9pcnEobWNmcXNwaS0+aXJxLCBtY2Zxc3BpX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICBwZGV2LT5uYW1lLCBtY2Zxc3BpKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDI7CisJfQorCisJbWNmcXNwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicXNwaV9jbGsiKTsKKwlpZiAoSVNfRVJSKG1jZnFzcGktPmNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2xrX2dldCBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSBQVFJfRVJSKG1jZnFzcGktPmNsayk7CisJCWdvdG8gZmFpbDM7CisJfQorCWNsa19lbmFibGUobWNmcXNwaS0+Y2xrKTsKKworCW1jZnFzcGktPndvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CisJaWYgKCFtY2Zxc3BpLT53b3JrcSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjcmVhdGVfd29ya3F1ZXVlIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDQ7CisJfQorCUlOSVRfV09SSygmbWNmcXNwaS0+d29yaywgbWNmcXNwaV93b3JrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWNmcXNwaS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1jZnFzcGktPm1zZ3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1jZnFzcGktPndhaXRxKTsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIGlzIG1pc3NpbmdcbiIpOworCQlnb3RvIGZhaWw1OworCX0KKwltYXN0ZXItPmJ1c19udW0gPSBwZGF0YS0+YnVzX251bTsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm51bV9jaGlwc2VsZWN0OworCisJbWNmcXNwaS0+Y3NfY29udHJvbCA9IHBkYXRhLT5jc19jb250cm9sOworCXN0YXR1cyA9IG1jZnFzcGlfY3Nfc2V0dXAobWNmcXNwaSk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBpbml0aWFsaXppbmcgY3NfY29udHJvbFxuIik7CisJCWdvdG8gZmFpbDU7CisJfQorCisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1NfSElHSCB8IFNQSV9DUE9MIHwgU1BJX0NQSEE7CisJbWFzdGVyLT5zZXR1cCA9IG1jZnFzcGlfc2V0dXA7CisJbWFzdGVyLT50cmFuc2ZlciA9IG1jZnFzcGlfdHJhbnNmZXI7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJc3RhdHVzID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAic3BpX3JlZ2lzdGVyX21hc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw2OworCX0KKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ29sZGZpcmUgUVNQSSBidXMgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworCitmYWlsNjoKKwltY2Zxc3BpX2NzX3RlYXJkb3duKG1jZnFzcGkpOworZmFpbDU6CisJZGVzdHJveV93b3JrcXVldWUobWNmcXNwaS0+d29ya3EpOworZmFpbDQ6CisJY2xrX2Rpc2FibGUobWNmcXNwaS0+Y2xrKTsKKwljbGtfcHV0KG1jZnFzcGktPmNsayk7CitmYWlsMzoKKwlmcmVlX2lycShtY2Zxc3BpLT5pcnEsIG1jZnFzcGkpOworZmFpbDI6CisJaW91bm1hcChtY2Zxc3BpLT5pb2Jhc2UpOworZmFpbDE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsMDoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ29sZGZpcmUgUVNQSSBwcm9iZSBmYWlsZWRcbiIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWNmcXNwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJLyogZGlzYWJsZSB0aGUgaGFyZHdhcmUgKHNldCB0aGUgYmF1ZCByYXRlIHRvIDApICovCisJbWNmcXNwaV93cl9xbXIobWNmcXNwaSwgTUNGUVNQSV9RTVJfTVNUUik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwltY2Zxc3BpX2NzX3RlYXJkb3duKG1jZnFzcGkpOworCWRlc3Ryb3lfd29ya3F1ZXVlKG1jZnFzcGktPndvcmtxKTsKKwljbGtfZGlzYWJsZShtY2Zxc3BpLT5jbGspOworCWNsa19wdXQobWNmcXNwaS0+Y2xrKTsKKwlmcmVlX2lycShtY2Zxc3BpLT5pcnEsIG1jZnFzcGkpOworCWlvdW5tYXAobWNmcXNwaS0+aW9iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBtY2Zxc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCisJY2xrX2Rpc2FibGUobWNmcXNwaS0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZnFzcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKworCWNsa19lbmFibGUobWNmcXNwaS0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgbWNmcXNwaV9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbWNmcXNwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbWNmcXNwaV9yZXN1bWUsCit9OworCisjZGVmaW5lCU1DRlFTUElfREVWX1BNX09QUwkoJm1jZnFzcGlfZGV2X3BtX29wcykKKyNlbHNlCisjZGVmaW5lCU1DRlFTUElfREVWX1BNX09QUwlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWNmcXNwaV9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gRFJJVkVSX05BTUUsCisJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXIucG0JPSBNQ0ZRU1BJX0RFVl9QTV9PUFMsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtY2Zxc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtY2Zxc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtY2Zxc3BpX2RyaXZlciwgbWNmcXNwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChtY2Zxc3BpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNmcXNwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1jZnFzcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jZnFzcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXZlbiBLaW5nIDxzZmtpbmdAZmR3ZGMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb2xkZmlyZSBRU1BJIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZGF2aW5jaV9zcGkuYyBiL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1YWI2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMKQEAgLTAsMCArMSwxMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKworI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9lZG1hLmg+CisKKyNkZWZpbmUgU1BJX05PX1JFU09VUkNFCQkoKHJlc291cmNlX3NpemVfdCktMSkKKworI2RlZmluZSBTUElfTUFYX0NISVBTRUxFQ1QJMgorCisjZGVmaW5lIENTX0RFRkFVTFQJMHhGRgorCisjZGVmaW5lIFNQSV9CVUZTSVoJKFNNUF9DQUNIRV9CWVRFUyArIDEpCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TOAkweDAxCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMTYJMHgwMgorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzMyCTB4MDQKKworI2RlZmluZSBTUElGTVRfUEhBU0VfTUFTSwlCSVQoMTYpCisjZGVmaW5lIFNQSUZNVF9QT0xBUklUWV9NQVNLCUJJVCgxNykKKyNkZWZpbmUgU1BJRk1UX0RJU1RJTUVSX01BU0sJQklUKDE4KQorI2RlZmluZSBTUElGTVRfU0hJRlRESVJfTUFTSwlCSVQoMjApCisjZGVmaW5lIFNQSUZNVF9XQUlURU5BX01BU0sJQklUKDIxKQorI2RlZmluZSBTUElGTVRfUEFSSVRZRU5BX01BU0sJQklUKDIyKQorI2RlZmluZSBTUElGTVRfT0REX1BBUklUWV9NQVNLCUJJVCgyMykKKyNkZWZpbmUgU1BJRk1UX1dERUxBWV9NQVNLCTB4M2YwMDAwMDB1CisjZGVmaW5lIFNQSUZNVF9XREVMQVlfU0hJRlQJMjQKKyNkZWZpbmUgU1BJRk1UX0NIQVJMRU5fTUFTSwkweDAwMDAwMDFGdQorCisvKiBTUElHQ1IxICovCisjZGVmaW5lIFNQSUdDUjFfU1BJRU5BX01BU0sJMHgwMTAwMDAwMHUKKworLyogU1BJUEMwICovCisjZGVmaW5lIFNQSVBDMF9ESUZVTl9NQVNLCUJJVCgxMSkJCS8qIE1JU08gKi8KKyNkZWZpbmUgU1BJUEMwX0RPRlVOX01BU0sJQklUKDEwKQkJLyogTU9TSSAqLworI2RlZmluZSBTUElQQzBfQ0xLRlVOX01BU0sJQklUKDkpCQkvKiBDTEsgKi8KKyNkZWZpbmUgU1BJUEMwX1NQSUVOQV9NQVNLCUJJVCg4KQkJLyogblJFQURZICovCisjZGVmaW5lIFNQSVBDMF9FTjFGVU5fTUFTSwlCSVQoMSkKKyNkZWZpbmUgU1BJUEMwX0VOMEZVTl9NQVNLCUJJVCgwKQorCisjZGVmaW5lIFNQSUlOVF9NQVNLQUxMCQkweDAxMDEwMzVGCisjZGVmaW5lIFNQSV9JTlRMVkxfMQkJMHgwMDAwMDFGRnUKKyNkZWZpbmUgU1BJX0lOVExWTF8wCQkweDAwMDAwMDAwdQorCisvKiBTUElEQVQxICovCisjZGVmaW5lIFNQSURBVDFfQ1NIT0xEX1NISUZUCTI4CisjZGVmaW5lIFNQSURBVDFfQ1NOUl9TSElGVAkxNgorI2RlZmluZSBTUElHQ1IxX0NMS01PRF9NQVNLCUJJVCgxKQorI2RlZmluZSBTUElHQ1IxX01BU1RFUl9NQVNLICAgICBCSVQoMCkKKyNkZWZpbmUgU1BJR0NSMV9MT09QQkFDS19NQVNLCUJJVCgxNikKKworLyogU1BJQlVGICovCisjZGVmaW5lIFNQSUJVRl9UWEZVTExfTUFTSwlCSVQoMjkpCisjZGVmaW5lIFNQSUJVRl9SWEVNUFRZX01BU0sJQklUKDMxKQorCisvKiBFcnJvciBNYXNrcyAqLworI2RlZmluZSBTUElGTEdfRExFTl9FUlJfTUFTSwkJQklUKDApCisjZGVmaW5lIFNQSUZMR19USU1FT1VUX01BU0sJCUJJVCgxKQorI2RlZmluZSBTUElGTEdfUEFSRVJSX01BU0sJCUJJVCgyKQorI2RlZmluZSBTUElGTEdfREVTWU5DX01BU0sJCUJJVCgzKQorI2RlZmluZSBTUElGTEdfQklURVJSX01BU0sJCUJJVCg0KQorI2RlZmluZSBTUElGTEdfT1ZSUlVOX01BU0sJCUJJVCg2KQorI2RlZmluZSBTUElGTEdfUlhfSU5UUl9NQVNLCQlCSVQoOCkKKyNkZWZpbmUgU1BJRkxHX1RYX0lOVFJfTUFTSwkJQklUKDkpCisjZGVmaW5lIFNQSUZMR19CVUZfSU5JVF9BQ1RJVkVfTUFTSwlCSVQoMjQpCisjZGVmaW5lIFNQSUZMR19NQVNLCQkJKFNQSUZMR19ETEVOX0VSUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19USU1FT1VUX01BU0sgfCBTUElGTEdfUEFSRVJSX01BU0sgXAorCQkJCXwgU1BJRkxHX0RFU1lOQ19NQVNLIHwgU1BJRkxHX0JJVEVSUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19PVlJSVU5fTUFTSyB8IFNQSUZMR19SWF9JTlRSX01BU0sgXAorCQkJCXwgU1BJRkxHX1RYX0lOVFJfTUFTSyBcCisJCQkJfCBTUElGTEdfQlVGX0lOSVRfQUNUSVZFX01BU0spCisKKyNkZWZpbmUgU1BJSU5UX0RMRU5fRVJSX0lOVFIJQklUKDApCisjZGVmaW5lIFNQSUlOVF9USU1FT1VUX0lOVFIJQklUKDEpCisjZGVmaW5lIFNQSUlOVF9QQVJFUlJfSU5UUglCSVQoMikKKyNkZWZpbmUgU1BJSU5UX0RFU1lOQ19JTlRSCUJJVCgzKQorI2RlZmluZSBTUElJTlRfQklURVJSX0lOVFIJQklUKDQpCisjZGVmaW5lIFNQSUlOVF9PVlJSVU5fSU5UUglCSVQoNikKKyNkZWZpbmUgU1BJSU5UX1JYX0lOVFIJCUJJVCg4KQorI2RlZmluZSBTUElJTlRfVFhfSU5UUgkJQklUKDkpCisjZGVmaW5lIFNQSUlOVF9ETUFfUkVRX0VOCUJJVCgxNikKKyNkZWZpbmUgU1BJSU5UX0VOQUJMRV9ISUdIWglCSVQoMjQpCisKKyNkZWZpbmUgU1BJX1QyQ0RFTEFZX1NISUZUCTE2CisjZGVmaW5lIFNQSV9DMlRERUxBWV9TSElGVAkyNAorCisvKiBTUEkgQ29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJR0NSMAkJMHgwMAorI2RlZmluZSBTUElHQ1IxCQkweDA0CisjZGVmaW5lIFNQSUlOVAkJMHgwOAorI2RlZmluZSBTUElMVkwJCTB4MGMKKyNkZWZpbmUgU1BJRkxHCQkweDEwCisjZGVmaW5lIFNQSVBDMAkJMHgxNAorI2RlZmluZSBTUElQQzEJCTB4MTgKKyNkZWZpbmUgU1BJUEMyCQkweDFjCisjZGVmaW5lIFNQSVBDMwkJMHgyMAorI2RlZmluZSBTUElQQzQJCTB4MjQKKyNkZWZpbmUgU1BJUEM1CQkweDI4CisjZGVmaW5lIFNQSVBDNgkJMHgyYworI2RlZmluZSBTUElQQzcJCTB4MzAKKyNkZWZpbmUgU1BJUEM4CQkweDM0CisjZGVmaW5lIFNQSURBVDAJCTB4MzgKKyNkZWZpbmUgU1BJREFUMQkJMHgzYworI2RlZmluZSBTUElCVUYJCTB4NDAKKyNkZWZpbmUgU1BJRU1VCQkweDQ0CisjZGVmaW5lIFNQSURFTEFZCTB4NDgKKyNkZWZpbmUgU1BJREVGCQkweDRjCisjZGVmaW5lIFNQSUZNVDAJCTB4NTAKKyNkZWZpbmUgU1BJRk1UMQkJMHg1NAorI2RlZmluZSBTUElGTVQyCQkweDU4CisjZGVmaW5lIFNQSUZNVDMJCTB4NWMKKyNkZWZpbmUgVEdJTlRWRUMwCTB4NjAKKyNkZWZpbmUgVEdJTlRWRUMxCTB4NjQKKworc3RydWN0IGRhdmluY2lfc3BpX3NsYXZlIHsKKwl1MzIJY21kX3RvX3dyaXRlOworCXUzMgljbGtfY3RybF90b193cml0ZTsKKwl1MzIJYnl0ZXNfcGVyX3dvcmQ7CisJdTgJYWN0aXZlX2NzOworfTsKKworLyogV2UgaGF2ZSAyIERNQSBjaGFubmVscyBwZXIgQ1MsIG9uZSBmb3IgUlggYW5kIG9uZSBmb3IgVFggKi8KK3N0cnVjdCBkYXZpbmNpX3NwaV9kbWEgeworCWludAkJCWRtYV90eF9jaGFubmVsOworCWludAkJCWRtYV9yeF9jaGFubmVsOworCWludAkJCWRtYV90eF9zeW5jX2RldjsKKwlpbnQJCQlkbWFfcnhfc3luY19kZXY7CisJZW51bSBkbWFfZXZlbnRfcQlldmVudHE7CisKKwlzdHJ1Y3QgY29tcGxldGlvbglkbWFfdHhfY29tcGxldGlvbjsKKwlzdHJ1Y3QgY29tcGxldGlvbglkbWFfcnhfY29tcGxldGlvbjsKK307CisKKy8qIFNQSSBDb250cm9sbGVyIGRyaXZlcidzIHByaXZhdGUgZGF0YS4gKi8KK3N0cnVjdCBkYXZpbmNpX3NwaSB7CisJc3RydWN0IHNwaV9iaXRiYW5nCWJpdGJhbmc7CisJc3RydWN0IGNsawkJKmNsazsKKworCXU4CQkJdmVyc2lvbjsKKwlyZXNvdXJjZV9zaXplX3QJCXBiYXNlOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJc2l6ZV90CQkJcmVnaW9uX3NpemU7CisJdTMyCQkJaXJxOworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisKKwljb25zdCB2b2lkCQkqdHg7CisJdm9pZAkJCSpyeDsKKwl1OAkJCSp0bXBfYnVmOworCWludAkJCWNvdW50OworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEJKmRtYV9jaGFubmVsczsKKwlzdHJ1Y3QJCQlkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXZvaWQJCQkoKmdldF9yeCkodTMyIHJ4X2RhdGEsIHN0cnVjdCBkYXZpbmNpX3NwaSAqKTsKKwl1MzIJCQkoKmdldF90eCkoc3RydWN0IGRhdmluY2lfc3BpICopOworCisJc3RydWN0IGRhdmluY2lfc3BpX3NsYXZlIHNsYXZlW1NQSV9NQVhfQ0hJUFNFTEVDVF07Cit9OworCitzdGF0aWMgdW5zaWduZWQgdXNlX2RtYTsKKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfcnhfYnVmX3U4KHUzMiBkYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXU4ICpyeCA9IGRhdmluY2lfc3BpLT5yeDsKKworCSpyeCsrID0gKHU4KWRhdGE7CisJZGF2aW5jaV9zcGktPnJ4ID0gcng7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91MTYodTMyIGRhdGEsIHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCit7CisJdTE2ICpyeCA9IGRhdmluY2lfc3BpLT5yeDsKKworCSpyeCsrID0gKHUxNilkYXRhOworCWRhdmluY2lfc3BpLT5yeCA9IHJ4OworfQorCitzdGF0aWMgdTMyIGRhdmluY2lfc3BpX3R4X2J1Zl91OChzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXUzMiBkYXRhOworCWNvbnN0IHU4ICp0eCA9IGRhdmluY2lfc3BpLT50eDsKKworCWRhdGEgPSAqdHgrKzsKKwlkYXZpbmNpX3NwaS0+dHggPSB0eDsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHUzMiBkYXZpbmNpX3NwaV90eF9idWZfdTE2KHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCit7CisJdTMyIGRhdGE7CisJY29uc3QgdTE2ICp0eCA9IGRhdmluY2lfc3BpLT50eDsKKworCWRhdGEgPSAqdHgrKzsKKwlkYXZpbmNpX3NwaS0+dHggPSB0eDsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9pb19iaXRzKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIGJpdHMpCit7CisJdTMyIHYgPSBpb3JlYWQzMihhZGRyKTsKKworCXYgfD0gYml0czsKKwlpb3dyaXRlMzIodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pb19iaXRzKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIGJpdHMpCit7CisJdTMyIHYgPSBpb3JlYWQzMihhZGRyKTsKKworCXYgJj0gfmJpdHM7CisJaW93cml0ZTMyKHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZtdF9iaXRzKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIGJpdHMsIGludCBjc19udW0pCit7CisJc2V0X2lvX2JpdHMoYWRkciArIFNQSUZNVDAgKyAoMHg0ICogY3NfbnVtKSwgYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mbXRfYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzLCBpbnQgY3NfbnVtKQoreworCWNsZWFyX2lvX2JpdHMoYWRkciArIFNQSUZNVDAgKyAoMHg0ICogY3NfbnVtKSwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3NldF9kbWFfcmVxKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBlbmFibGUpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKGVuYWJsZSkKKwkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9ETUFfUkVRX0VOKTsKKwllbHNlCisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9ETUFfUkVRX0VOKTsKK30KKworLyoKKyAqIEludGVyZmFjZSB0byBjb250cm9sIHRoZSBjaGlwIHNlbGVjdCBzaWduYWwKKyAqLworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdTMyIGRhdGExX3JlZ192YWwgPSAwOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCS8qCisJICogQm9hcmQgc3BlY2lmaWMgY2hpcCBzZWxlY3QgbG9naWMgZGVjaWRlcyB0aGUgcG9sYXJpdHkgYW5kIGNzCisJICogbGluZSBmb3IgdGhlIGNvbnRyb2xsZXIKKwkgKi8KKwlpZiAodmFsdWUgPT0gQklUQkFOR19DU19JTkFDVElWRSkgeworCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFRiwgQ1NfREVGQVVMVCk7CisKKwkJZGF0YTFfcmVnX3ZhbCB8PSBDU19ERUZBVUxUIDw8IFNQSURBVDFfQ1NOUl9TSElGVDsKKwkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisKKwkJd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKSA9PSAwKQorCQkJY3B1X3JlbGF4KCk7CisJfQorfQorCisvKioKKyAqIGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyIC0gVGhpcyBmdW5jdGlvbnMgd2lsbCBkZXRlcm1pbmUgdHJhbnNmZXIgbWV0aG9kCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICogQHQ6IHNwaSB0cmFuc2ZlciBpbiB3aGljaCB0cmFuc2ZlciBpbmZvIGlzIGZpbGxlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBkYXRhIHRyYW5zZmVyIG1ldGhvZCAoOC8xNi8zMiBiaXQgdHJhbnNmZXIpLgorICogSXQgd2lsbCBhbHNvIHNldCB0aGUgU1BJIENsb2NrIENvbnRyb2wgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvCisgKiBTUEkgc2xhdmUgZGV2aWNlIGZyZXEuCisgKi8KK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXU4IGJpdHNfcGVyX3dvcmQgPSAwOworCXUzMiBoeiA9IDAsIHByZXNjYWxlOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCWlmICh0KSB7CisJCWJpdHNfcGVyX3dvcmQgPSB0LT5iaXRzX3Blcl93b3JkOworCQloeiA9IHQtPnNwZWVkX2h6OworCX0KKworCS8qIGlmIGJpdHNfcGVyX3dvcmQgaXMgbm90IHNldCB0aGVuIHNldCBpdCBkZWZhdWx0ICovCisJaWYgKCFiaXRzX3Blcl93b3JkKQorCQliaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOworCisJLyoKKwkgKiBBc3NpZ24gZnVuY3Rpb24gcG9pbnRlciB0byBhcHByb3ByaWF0ZSB0cmFuc2ZlciBtZXRob2QKKwkgKiA4Yml0LCAxNmJpdCBvciAzMmJpdCB0cmFuc2ZlcgorCSAqLworCWlmIChiaXRzX3Blcl93b3JkIDw9IDggJiYgYml0c19wZXJfd29yZCA+PSAyKSB7CisJCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7CisJCWRhdmluY2lfc3BpLT5nZXRfdHggPSBkYXZpbmNpX3NwaV90eF9idWZfdTg7CisJCWRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZCA9IDE7CisJfSBlbHNlIGlmIChiaXRzX3Blcl93b3JkIDw9IDE2ICYmIGJpdHNfcGVyX3dvcmQgPj0gMikgeworCQlkYXZpbmNpX3NwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3UxNjsKKwkJZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91MTY7CisJCWRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZCA9IDI7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFoeikKKwkJaHogPSBzcGktPm1heF9zcGVlZF9oejsKKworCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfQ0hBUkxFTl9NQVNLLAorCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBiaXRzX3Blcl93b3JkICYgMHgxZiwKKwkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJcHJlc2NhbGUgPSAoKGNsa19nZXRfcmF0ZShkYXZpbmNpX3NwaS0+Y2xrKSAvIGh6KSAtIDEpICYgMHhmZjsKKworCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCAweDAwMDBmZjAwLCBzcGktPmNoaXBfc2VsZWN0KTsKKwlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIHByZXNjYWxlIDw8IDgsIHNwaS0+Y2hpcF9zZWxlY3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2RtYV9yeF9jYWxsYmFjayh1bnNpZ25lZCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IChzdHJ1Y3Qgc3BpX2RldmljZSAqKWRhdGE7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkYXZpbmNpX3NwaV9kbWEgPSAmKGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF0pOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJaWYgKGNoX3N0YXR1cyA9PSBETUFfQ09NUExFVEUpCisJCWVkbWFfc3RvcChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKwllbHNlCisJCWVkbWFfY2xlYW5fY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKworCWNvbXBsZXRlKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKKwkvKiBXZSBtdXN0IGRpc2FibGUgdGhlIERNQSBSWCByZXF1ZXN0ICovCisJZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfZG1hX3R4X2NhbGxiYWNrKHVuc2lnbmVkIGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gKHN0cnVjdCBzcGlfZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWRhdmluY2lfc3BpX2RtYSA9ICYoZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XSk7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlpZiAoY2hfc3RhdHVzID09IERNQV9DT01QTEVURSkKKwkJZWRtYV9zdG9wKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCWVsc2UKKwkJZWRtYV9jbGVhbl9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCisJY29tcGxldGUoJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOworCS8qIFdlIG11c3QgZGlzYWJsZSB0aGUgRE1BIFRYIHJlcXVlc3QgKi8KKwlkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShzcGksIDApOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3JlcXVlc3RfZG1hKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKnNkZXY7CisJaW50IHI7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCXNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X3N5bmNfZGV2LAorCQkJCWRhdmluY2lfc3BpX2RtYV9yeF9jYWxsYmFjaywgc3BpLAorCQkJCWRhdmluY2lfc3BpX2RtYS0+ZXZlbnRxKTsKKwlpZiAociA8IDApIHsKKwkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBSWFxuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID0gcjsKKwlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X3N5bmNfZGV2LAorCQkJCWRhdmluY2lfc3BpX2RtYV90eF9jYWxsYmFjaywgc3BpLAorCQkJCWRhdmluY2lfc3BpX2RtYS0+ZXZlbnRxKTsKKwlpZiAociA8IDApIHsKKwkJZWRtYV9mcmVlX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisJCWRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgPSAtMTsKKwkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBUWFxuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsID0gcjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX3NldHVwIC0gVGhpcyBmdW5jdGlvbnMgd2lsbCBzZXQgZGVmYXVsdCB0cmFuc2ZlciBtZXRob2QKKyAqIEBzcGk6IHNwaSBkZXZpY2Ugb24gd2hpY2ggZGF0YSB0cmFuc2ZlciB0byBiZSBkb25lCisgKgorICogVGhpcyBmdW5jdGlvbnMgc2V0cyB0aGUgZGVmYXVsdCB0cmFuc2ZlciBtZXRob2QuCisgKi8KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXR2YWw7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJc3RydWN0IGRldmljZSAqc2RldjsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKKworCS8qIGlmIGJpdHMgcGVyIHdvcmQgbGVuZ3RoIGlzIHplcm8gdGhlbiBzZXQgaXQgZGVmYXVsdCA4ICovCisJaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCisJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisKKwlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uY21kX3RvX3dyaXRlID0gMDsKKworCWlmICh1c2VfZG1hICYmIGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMpIHsKKwkJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisKKwkJaWYgKChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID09IC0xKQorCQkJCXx8IChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsID09IC0xKSkgeworCQkJcmV0dmFsID0gZGF2aW5jaV9zcGlfcmVxdWVzdF9kbWEoc3BpKTsKKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwkvKgorCSAqIFNQSSBpbiBEYVZpbmNpIGFuZCBEQTh4eCBvcGVyYXRlIGJldHdlZW4KKwkgKiA2MDAgS0h6IGFuZCA1MCBNSHoKKwkgKi8KKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCA2MDAwMDAgfHwgc3BpLT5tYXhfc3BlZWRfaHogPiA1MDAwMDAwMCkgeworCQlkZXZfZGJnKHNkZXYsICJPcGVyYXRpbmcgZnJlcXVlbmN5IGlzIG5vdCBpbiBhY2NlcHRhYmxlICIKKwkJCQkicmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFNldCB1cCBTUElGTVRuIHJlZ2lzdGVyLCB1bmlxdWUgdG8gdGhpcyBjaGlwc2VsZWN0LgorCSAqCisJICogTk9URTogd2UgY291bGQgZG8gYWxsIG9mIHRoZXNlIHdpdGggb25lIHdyaXRlLiAgQWxzbywgc29tZQorCSAqIG9mIHRoZSAidmVyc2lvbiAyIiBmZWF0dXJlcyBhcmUgZm91bmQgaW4gY2hpcHMgdGhhdCBkb24ndAorCSAqIHN1cHBvcnQgYWxsIG9mIHRoZW0uLi4KKwkgKi8KKwlpZiAoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkKKwkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfU0hJRlRESVJfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwllbHNlCisJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfU0hJRlRESVJfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCWlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKKwkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfUE9MQVJJVFlfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwllbHNlCisJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfUE9MQVJJVFlfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCWlmICghKHNwaS0+bW9kZSAmIFNQSV9DUEhBKSkKKwkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfUEhBU0VfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwllbHNlCisJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfUEhBU0VfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCS8qCisJICogVmVyc2lvbiAxIGhhcmR3YXJlIHN1cHBvcnRzIHR3byBiYXNpYyBTUEkgbW9kZXM6CisJICogIC0gU3RhbmRhcmQgU1BJIG1vZGUgdXNlcyA0IHBpbnMsIHdpdGggY2hpcHNlbGVjdAorCSAqICAtIDMgcGluIFNQSSBpcyBhIDQgcGluIHZhcmlhbnQgd2l0aG91dCBDUyAoU1BJX05PX0NTKQorCSAqCShkaXN0aW5jdCBmcm9tIFNQSV8zV0lSRSwgd2l0aCBqdXN0IG9uZSBkYXRhIHdpcmU7CisJICoJb3Igc2ltaWxhciB2YXJpYW50cyB3aXRob3V0IE1PU0kgb3Igd2l0aG91dCBNSVNPKQorCSAqCisJICogVmVyc2lvbiAyIGhhcmR3YXJlIHN1cHBvcnRzIGFuIG9wdGlvbmFsIGhhbmRzaGFraW5nIHNpZ25hbCwKKwkgKiBzbyBpdCBjYW4gc3VwcG9ydCB0d28gbW9yZSBtb2RlczoKKwkgKiAgLSA1IHBpbiBTUEkgdmFyaWFudCBpcyBzdGFuZGFyZCBTUEkgcGx1cyBTUElfUkVBRFkKKwkgKiAgLSA0IHBpbiB3aXRoIGVuYWJsZSBpcyAoU1BJX1JFQURZIHwgU1BJX05PX0NTKQorCSAqLworCisJaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpIHsKKwkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9XREVMQVlfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCShkYXZpbmNpX3NwaS0+cGRhdGEtPndkZWxheQorCQkJCQkJPDwgU1BJRk1UX1dERUxBWV9TSElGVCkKKwkJCQkJJiBTUElGTVRfV0RFTEFZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+b2RkX3Bhcml0eSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX09ERF9QQVJJVFlfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCWVsc2UKKwkJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfT0REX1BBUklUWV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5wYXJpdHlfZW5hYmxlKQorCQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfUEFSSVRZRU5BX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1BBUklUWUVOQV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT53YWl0X2VuYWJsZSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1dBSVRFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCWVsc2UKKwkJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfV0FJVEVOQV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT50aW1lcl9kaXNhYmxlKQorCQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfRElTVElNRVJfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCWVsc2UKKwkJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfRElTVElNRVJfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJfQorCisJcmV0dmFsID0gZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXIoc3BpLCBOVUxMKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCisJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisKKwlpZiAodXNlX2RtYSAmJiBkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzKSB7CisJCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJCWlmICgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCAhPSAtMSkKKwkJCQkmJiAoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCAhPSAtMSkpIHsKKwkJCWVkbWFfZnJlZV9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCQkJZWRtYV9mcmVlX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfYnVmc19wcmVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCit7CisJaW50IG9wX21vZGUgPSAwOworCisJLyoKKwkgKiBSRVZJU0lUICB1bmxlc3MgZGV2aWNlcyBkaXNhZ3JlZSBhYm91dCBTUElfTE9PUCBvcgorCSAqIFNQSV9SRUFEWSAoU1BJX05PX0NTIG9ubHkgYWxsb3dzIG9uZSBkZXZpY2UhKSwgdGhpcworCSAqIHNob3VsZCBub3QgbmVlZCB0byBiZSBkb25lIGJlZm9yZSBlYWNoIG1lc3NhZ2UuLi4KKwkgKiBvcHRpbWl6ZSBmb3IgYm90aCBmbGFncyBzdGF5aW5nIGNsZWFyZWQuCisJICovCisKKwlvcF9tb2RlID0gU1BJUEMwX0RJRlVOX01BU0sKKwkJfCBTUElQQzBfRE9GVU5fTUFTSworCQl8IFNQSVBDMF9DTEtGVU5fTUFTSzsKKwlpZiAoIShzcGktPm1vZGUgJiBTUElfTk9fQ1MpKQorCQlvcF9tb2RlIHw9IDEgPDwgc3BpLT5jaGlwX3NlbGVjdDsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX1JFQURZKQorCQlvcF9tb2RlIHw9IFNQSVBDMF9TUElFTkFfTUFTSzsKKworCWlvd3JpdGUzMihvcF9tb2RlLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSVBDMCk7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0xPT1ApCisJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKKwkJCQlTUElHQ1IxX0xPT1BCQUNLX01BU0spOworCWVsc2UKKwkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9MT09QQkFDS19NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGksCisJCQkJICAgaW50IGludF9zdGF0dXMpCit7CisJc3RydWN0IGRldmljZSAqc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKKworCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX1RJTUVPVVRfTUFTSykgeworCQlkZXZfZGJnKHNkZXYsICJTUEkgVGltZS1vdXQgRXJyb3JcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfREVTWU5DX01BU0spIHsKKwkJZGV2X2RiZyhzZGV2LCAiU1BJIERlc3luY2hyb25pemF0aW9uIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0JJVEVSUl9NQVNLKSB7CisJCWRldl9kYmcoc2RldiwgIlNQSSBCaXQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZGF2aW5jaV9zcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikgeworCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19ETEVOX0VSUl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgRGF0YSBMZW5ndGggRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfUEFSRVJSX01BU0spIHsKKwkJCWRldl9kYmcoc2RldiwgIlNQSSBQYXJpdHkgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfT1ZSUlVOX01BU0spIHsKKwkJCWRldl9kYmcoc2RldiwgIlNQSSBEYXRhIE92ZXJydW4gZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfVFhfSU5UUl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgVFggaW50ciBiaXQgc2V0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgQnVmZmVyIEluaXQgQWN0aXZlXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9idWZzIC0gZnVuY3Rpb25zIHdoaWNoIHdpbGwgaGFuZGxlIHRyYW5zZmVyIGRhdGEKKyAqIEBzcGk6IHNwaSBkZXZpY2Ugb24gd2hpY2ggZGF0YSB0cmFuc2ZlciB0byBiZSBkb25lCisgKiBAdDogc3BpIHRyYW5zZmVyIGluIHdoaWNoIHRyYW5zZmVyIGluZm8gaXMgZmlsbGVkCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHB1dCBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGludG8gZGF0YSByZWdpc3RlcgorICogb2YgU1BJIGNvbnRyb2xsZXIgYW5kIHRoZW4gd2FpdCB1bnRpbCB0aGUgY29tcGxldGlvbiB3aWxsIGJlIG1hcmtlZAorICogYnkgdGhlIElSUSBIYW5kbGVyLgorICovCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2J1ZnNfcGlvKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlpbnQgaW50X3N0YXR1cywgY291bnQsIHJldDsKKwl1OCBjb252LCB0bXA7CisJdTMyIHR4X2RhdGEsIGRhdGExX3JlZ192YWw7CisJdTMyIGJ1Zl92YWwsIGZsZ192YWw7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCWRhdmluY2lfc3BpLT50eCA9IHQtPnR4X2J1ZjsKKwlkYXZpbmNpX3NwaS0+cnggPSB0LT5yeF9idWY7CisKKwkvKiBjb252ZXJ0IGxlbiB0byB3b3JkcyBiYXNlZCBvbiBiaXRzX3Blcl93b3JkICovCisJY29udiA9IGRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZDsKKwlkYXZpbmNpX3NwaS0+Y291bnQgPSB0LT5sZW4gLyBjb252OworCisJSU5JVF9DT01QTEVUSU9OKGRhdmluY2lfc3BpLT5kb25lKTsKKworCXJldCA9IGRhdmluY2lfc3BpX2J1ZnNfcHJlcChzcGksIGRhdmluY2lfc3BpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIFNQSSAqLworCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9TUElFTkFfTUFTSyk7CisKKwlpb3dyaXRlMzIoMCB8IChwZGF0YS0+YzJ0ZGVsYXkgPDwgU1BJX0MyVERFTEFZX1NISUZUKSB8CisJCQkocGRhdGEtPnQyY2RlbGF5IDw8IFNQSV9UMkNERUxBWV9TSElGVCksCisJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFTEFZKTsKKworCWNvdW50ID0gZGF2aW5jaV9zcGktPmNvdW50OworCWRhdGExX3JlZ192YWwgPSBwZGF0YS0+Y3NfaG9sZCA8PCBTUElEQVQxX0NTSE9MRF9TSElGVDsKKwl0bXAgPSB+KDB4MSA8PCBzcGktPmNoaXBfc2VsZWN0KTsKKworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIH50bXApOworCisJZGF0YTFfcmVnX3ZhbCB8PSB0bXAgPDwgU1BJREFUMV9DU05SX1NISUZUOworCisJd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCisJCWNwdV9yZWxheCgpOworCisJLyogRGV0ZXJtaW5lIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgUkVBRCBvciBXUklURSAqLworCWlmICh0LT50eF9idWYpIHsKKwkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX01BU0tBTEwpOworCisJCXdoaWxlICgxKSB7CisJCQl0eF9kYXRhID0gZGF2aW5jaV9zcGktPmdldF90eChkYXZpbmNpX3NwaSk7CisKKwkJCWRhdGExX3JlZ192YWwgJj0gfigweEZGRkYpOworCQkJZGF0YTFfcmVnX3ZhbCB8PSAoMHhGRkZGICYgdHhfZGF0YSk7CisKKwkJCWJ1Zl92YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRik7CisJCQlpZiAoKGJ1Zl92YWwgJiBTUElCVUZfVFhGVUxMX01BU0spID09IDApIHsKKwkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKKwkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisKKwkJCQljb3VudC0tOworCQkJfQorCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQorCQkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spCisJCQkJY3B1X3JlbGF4KCk7CisKKwkJCS8qIGdldHRpbmcgdGhlIHJldHVybmVkIGJ5dGUgKi8KKwkJCWlmICh0LT5yeF9idWYpIHsKKwkJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCQkJCWRhdmluY2lfc3BpLT5nZXRfcngoYnVmX3ZhbCwgZGF2aW5jaV9zcGkpOworCQkJfQorCQkJaWYgKGNvdW50IDw9IDApCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGRhdGEtPnBvbGxfbW9kZSkgeworCQkJd2hpbGUgKDEpIHsKKwkJCQkvKiBrZWVwcyB0aGUgc2VyaWFsIGNsb2NrIGdvaW5nICovCisJCQkJaWYgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkJCSYgU1BJQlVGX1RYRlVMTF9NQVNLKSA9PSAwKQorCQkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKKwkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisKKwkJCQl3aGlsZSAoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpICYKKwkJCQkJCVNQSUJVRl9SWEVNUFRZX01BU0spCisJCQkJCWNwdV9yZWxheCgpOworCisJCQkJZmxnX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKwkJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCisJCQkJZGF2aW5jaV9zcGktPmdldF9yeChidWZfdmFsLCBkYXZpbmNpX3NwaSk7CisKKwkJCQljb3VudC0tOworCQkJCWlmIChjb3VudCA8PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsJLyogUmVjZWl2ZSBpbiBJbnRlcnJ1cHQgbW9kZSAqLworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBkYXZpbmNpX3NwaS0+Y291bnQ7IGkrKykgeworCQkJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULAorCQkJCQkJU1BJSU5UX0JJVEVSUl9JTlRSCisJCQkJCQl8IFNQSUlOVF9PVlJSVU5fSU5UUgorCQkJCQkJfCBTUElJTlRfUlhfSU5UUik7CisKKwkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKKwkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisKKwkJCQl3aGlsZSAoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQpICYKKwkJCQkJCVNQSUlOVF9SWF9JTlRSKQorCQkJCQljcHVfcmVsYXgoKTsKKwkJCX0KKwkJCWlvd3JpdGUzMigoZGF0YTFfcmVnX3ZhbCAmIDB4MGZmY2ZmZmYpLAorCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgYml0IGVycm9yLCBkZXN5bmMgZXJyb3IscGFyaXR5IGVycm9yLHRpbWVvdXQgZXJyb3IgYW5kCisJICogcmVjZWl2ZSBvdmVyZmxvdyBlcnJvcnMKKwkgKi8KKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCisJcmV0ID0gZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNQSSBGcmFtZXdvcmsgbWFpbnRhaW5zIHRoZSBjb3VudCBvbmx5IGluIGJ5dGVzIHNvIGNvbnZlcnQgYmFjayAqLworCWRhdmluY2lfc3BpLT5jb3VudCAqPSBjb252OworCisJcmV0dXJuIHQtPmxlbjsKK30KKworI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzgJMHgwMQorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2CTB4MDIKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MzMgkweDA0CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfYnVmc19kbWEoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCWludCBpbnRfc3RhdHVzID0gMDsKKwlpbnQgY291bnQsIHRlbXBfY291bnQ7CisJdTggY29udiA9IDE7CisJdTggdG1wOworCXUzMiBkYXRhMV9yZWdfdmFsOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKwlpbnQgd29yZF9sZW4sIGRhdGFfdHlwZSwgcmV0OworCXVuc2lnbmVkIGxvbmcgdHhfcmVnLCByeF9yZWc7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKnNkZXY7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCXNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKworCXR4X3JlZyA9ICh1bnNpZ25lZCBsb25nKWRhdmluY2lfc3BpLT5wYmFzZSArIFNQSURBVDE7CisJcnhfcmVnID0gKHVuc2lnbmVkIGxvbmcpZGF2aW5jaV9zcGktPnBiYXNlICsgU1BJQlVGOworCisJZGF2aW5jaV9zcGktPnR4ID0gdC0+dHhfYnVmOworCWRhdmluY2lfc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKKworCS8qIGNvbnZlcnQgbGVuIHRvIHdvcmRzIGJhc2VkIG9uIGJpdHNfcGVyX3dvcmQgKi8KKwljb252ID0gZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmJ5dGVzX3Blcl93b3JkOworCWRhdmluY2lfc3BpLT5jb3VudCA9IHQtPmxlbiAvIGNvbnY7CisKKwlJTklUX0NPTVBMRVRJT04oZGF2aW5jaV9zcGktPmRvbmUpOworCisJaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKKwlpbml0X2NvbXBsZXRpb24oJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOworCisJd29yZF9sZW4gPSBjb252ICogODsKKworCWlmICh3b3JkX2xlbiA8PSA4KQorCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzg7CisJZWxzZSBpZiAod29yZF9sZW4gPD0gMTYpCisJCWRhdGFfdHlwZSA9IERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMTY7CisJZWxzZSBpZiAod29yZF9sZW4gPD0gMzIpCisJCWRhdGFfdHlwZSA9IERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGRhdmluY2lfc3BpX2J1ZnNfcHJlcChzcGksIGRhdmluY2lfc3BpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogUHV0IGRlbGF5IHZhbCBpZiByZXF1aXJlZCAqLworCWlvd3JpdGUzMigwIHwgKHBkYXRhLT5jMnRkZWxheSA8PCBTUElfQzJUREVMQVlfU0hJRlQpIHwKKwkJCShwZGF0YS0+dDJjZGVsYXkgPDwgU1BJX1QyQ0RFTEFZX1NISUZUKSwKKwkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVMQVkpOworCisJY291bnQgPSBkYXZpbmNpX3NwaS0+Y291bnQ7CS8qIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgKi8KKwlkYXRhMV9yZWdfdmFsID0gcGRhdGEtPmNzX2hvbGQgPDwgU1BJREFUMV9DU0hPTERfU0hJRlQ7CisKKwkvKiBDUyBkZWZhdWx0ID0gMHhGRiAqLworCXRtcCA9IH4oMHgxIDw8IHNwaS0+Y2hpcF9zZWxlY3QpOworCisJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFRiwgfnRtcCk7CisKKwlkYXRhMV9yZWdfdmFsIHw9IHRtcCA8PCBTUElEQVQxX0NTTlJfU0hJRlQ7CisKKwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGZvciBkbWEgdHJhbnNmZXJzICovCisJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX01BU0tBTEwpOworCS8qIERpc2FibGUgU1BJIHRvIHdyaXRlIGNvbmZpZ3VyYXRpb24gYml0cyBpbiBTUElEQVQgKi8KKwljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9TUElFTkFfTUFTSyk7CisJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisJLyogRW5hYmxlIFNQSSAqLworCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9TUElFTkFfTUFTSyk7CisKKwl3aGlsZSAoKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQorCQkJCSYgU1BJQlVGX1JYRU1QVFlfTUFTSykgPT0gMCkKKwkJY3B1X3JlbGF4KCk7CisKKworCWlmICh0LT50eF9idWYpIHsKKwkJdC0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LCAodm9pZCAqKXQtPnR4X2J1ZiwgY291bnQsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmc3BpLT5kZXYsIHQtPnR4X2RtYSkpIHsKKwkJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byBETUEgbWFwIGEgJWQgYnl0ZXMiCisJCQkJIiBUWCBidWZmZXJcbiIsIGNvdW50KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRlbXBfY291bnQgPSBjb3VudDsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIFRYIGNsb2NraW5nIGZvciBSWCB0cmFuc2FjdGlvbiAqLworCQl0LT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsCisJCQkJKHZvaWQgKilkYXZpbmNpX3NwaS0+dG1wX2J1ZiwgY291bnQgKyAxLAorCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT50eF9kbWEpKSB7CisJCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gRE1BIG1hcCBhICVkIGJ5dGVzIgorCQkJCSIgVFggdG1wIGJ1ZmZlclxuIiwgY291bnQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdGVtcF9jb3VudCA9IGNvdW50ICsgMTsKKwl9CisKKwllZG1hX3NldF90cmFuc2Zlcl9wYXJhbXMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwKKwkJCQkJZGF0YV90eXBlLCB0ZW1wX2NvdW50LCAxLCAwLCBBU1lOQyk7CisJZWRtYV9zZXRfZGVzdChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCB0eF9yZWcsIElOQ1IsIFc4QklUKTsKKwllZG1hX3NldF9zcmMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgdC0+dHhfZG1hLCBJTkNSLCBXOEJJVCk7CisJZWRtYV9zZXRfc3JjX2luZGV4KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIGRhdGFfdHlwZSwgMCk7CisJZWRtYV9zZXRfZGVzdF9pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCAwLCAwKTsKKworCWlmICh0LT5yeF9idWYpIHsKKwkJLyogaW5pdGlhdGUgdHJhbnNhY3Rpb24gKi8KKwkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisKKwkJdC0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LCAodm9pZCAqKXQtPnJ4X2J1ZiwgY291bnQsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+cnhfZG1hKSkgeworCQkJZGV2X2RiZyhzZGV2LCAiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGVzIFJYIGJ1ZmZlclxuIiwKKwkJCQkJY291bnQpOworCQkJaWYgKHQtPnR4X2J1ZiAhPSBOVUxMKQorCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+dHhfZG1hLAorCQkJCQkJIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWVkbWFfc2V0X3RyYW5zZmVyX3BhcmFtcyhkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCWRhdGFfdHlwZSwgY291bnQsIDEsIDAsIEFTWU5DKTsKKwkJZWRtYV9zZXRfc3JjKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCisJCQkJcnhfcmVnLCBJTkNSLCBXOEJJVCk7CisJCWVkbWFfc2V0X2Rlc3QoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKKwkJCQl0LT5yeF9kbWEsIElOQ1IsIFc4QklUKTsKKwkJZWRtYV9zZXRfc3JjX2luZGV4KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsIDAsIDApOworCQllZG1hX3NldF9kZXN0X2luZGV4KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCisJCQkJZGF0YV90eXBlLCAwKTsKKwl9CisKKwlpZiAoKHQtPnR4X2J1ZikgfHwgKHQtPnJ4X2J1ZikpCisJCWVkbWFfc3RhcnQoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCk7CisKKwlpZiAodC0+cnhfYnVmKQorCQllZG1hX3N0YXJ0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCisJaWYgKCh0LT5yeF9idWYpIHx8ICh0LT50eF9idWYpKQorCQlkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShzcGksIDEpOworCisJaWYgKHQtPnR4X2J1ZikKKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKAorCQkJCSZkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jb21wbGV0aW9uKTsKKworCWlmICh0LT5yeF9idWYpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKKwkJCQkmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisKKwlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwgdGVtcF9jb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAodC0+cnhfYnVmKQorCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnJ4X2RtYSwgY291bnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwkvKgorCSAqIENoZWNrIGZvciBiaXQgZXJyb3IsIGRlc3luYyBlcnJvcixwYXJpdHkgZXJyb3IsdGltZW91dCBlcnJvciBhbmQKKwkgKiByZWNlaXZlIG92ZXJmbG93IGVycm9ycworCSAqLworCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihkYXZpbmNpX3NwaSwgaW50X3N0YXR1cyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU1BJIEZyYW1ld29yayBtYWludGFpbnMgdGhlIGNvdW50IG9ubHkgaW4gYnl0ZXMgc28gY29udmVydCBiYWNrICovCisJZGF2aW5jaV9zcGktPmNvdW50ICo9IGNvbnY7CisKKwlyZXR1cm4gdC0+bGVuOworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX2lycSAtIElSUSBoYW5kbGVyIGZvciBEYVZpbmNpIFNQSQorICogQGlycTogSVJRIG51bWJlciBmb3IgdGhpcyBTUEkgTWFzdGVyCisgKiBAY29udGV4dF9kYXRhOiBzdHJ1Y3R1cmUgZm9yIFNQSSBNYXN0ZXIgY29udHJvbGxlciBkYXZpbmNpX3NwaQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGF2aW5jaV9zcGlfaXJxKHMzMiBpcnEsIHZvaWQgKmNvbnRleHRfZGF0YSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpID0gY29udGV4dF9kYXRhOworCXUzMiBpbnRfc3RhdHVzLCByeF9kYXRhID0gMDsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKworCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisKKwl3aGlsZSAoKGludF9zdGF0dXMgJiBTUElGTEdfUlhfSU5UUl9NQVNLKSkgeworCQlpZiAobGlrZWx5KGludF9zdGF0dXMgJiBTUElGTEdfUlhfSU5UUl9NQVNLKSkgeworCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CisKKwkJCXJ4X2RhdGEgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRik7CisJCQlkYXZpbmNpX3NwaS0+Z2V0X3J4KHJ4X2RhdGEsIGRhdmluY2lfc3BpKTsKKworCQkJLyogRGlzYWJsZSBSZWNlaXZlIEludGVycnVwdCAqLworCQkJaW93cml0ZTMyKH4oU1BJSU5UX1JYX0lOVFIgfCBTUElJTlRfVFhfSU5UUiksCisJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5UKTsKKwkJfSBlbHNlCisJCQkodm9pZClkYXZpbmNpX3NwaV9jaGVja19lcnJvcihkYXZpbmNpX3NwaSwgaW50X3N0YXR1cyk7CisKKwkJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX3Byb2JlIC0gcHJvYmUgZnVuY3Rpb24gZm9yIFNQSSBNYXN0ZXIgQ29udHJvbGxlcgorICogQHBkZXY6IHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgcGxhdGVmb3JtIHNwZWNpZmljIGRhdGEKKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlICpyLCAqbWVtOworCXJlc291cmNlX3NpemVfdCBkbWFfcnhfY2hhbiA9IFNQSV9OT19SRVNPVVJDRTsKKwlyZXNvdXJjZV9zaXplX3QJZG1hX3R4X2NoYW4gPSBTUElfTk9fUkVTT1VSQ0U7CisJcmVzb3VyY2Vfc2l6ZV90CWRtYV9ldmVudHEgPSBTUElfTk9fUkVTT1VSQ0U7CisJaW50IGkgPSAwLCByZXQgPSAwOworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9zcGkpKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG1hc3Rlcik7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlpZiAoZGF2aW5jaV9zcGkgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlkYXZpbmNpX3NwaS0+cGJhc2UgPSByLT5zdGFydDsKKwlkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOworCWRhdmluY2lfc3BpLT5wZGF0YSA9IHBkYXRhOworCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUsCisJCQkJCXBkZXYtPm5hbWUpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZnJlZV9tYXN0ZXI7CisJfQorCisJZGF2aW5jaV9zcGktPmJhc2UgPSAoc3RydWN0IGRhdmluY2lfc3BpX3JlZyBfX2lvbWVtICopCisJCQlpb3JlbWFwKHItPnN0YXJ0LCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworCWlmIChkYXZpbmNpX3NwaS0+YmFzZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZV9yZWdpb247CisJfQorCisJZGF2aW5jaV9zcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRhdmluY2lfc3BpLT5pcnEgPD0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubWFwX2lvOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGRhdmluY2lfc3BpLT5pcnEsIGRhdmluY2lfc3BpX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgZGV2X25hbWUoJnBkZXYtPmRldiksIGRhdmluY2lfc3BpKTsKKwlpZiAocmV0KQorCQlnb3RvIHVubWFwX2lvOworCisJLyogQWxsb2NhdGUgdG1wX2J1ZiBmb3IgdHhfYnVmICovCisJZGF2aW5jaV9zcGktPnRtcF9idWYgPSBremFsbG9jKFNQSV9CVUZTSVosIEdGUF9LRVJORUwpOworCWlmIChkYXZpbmNpX3NwaS0+dG1wX2J1ZiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gaXJxX2ZyZWU7CisJfQorCisJZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlpZiAoZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3RtcF9idWY7CisJfQorCisJZGF2aW5jaV9zcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkYXZpbmNpX3NwaS0+Y2xrKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHB1dF9tYXN0ZXI7CisJfQorCWNsa19lbmFibGUoZGF2aW5jaV9zcGktPmNsayk7CisKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bnVtX2NoaXBzZWxlY3Q7CisJbWFzdGVyLT5zZXR1cCA9IGRhdmluY2lfc3BpX3NldHVwOworCW1hc3Rlci0+Y2xlYW51cCA9IGRhdmluY2lfc3BpX2NsZWFudXA7CisKKwlkYXZpbmNpX3NwaS0+Yml0YmFuZy5jaGlwc2VsZWN0ID0gZGF2aW5jaV9zcGlfY2hpcHNlbGVjdDsKKwlkYXZpbmNpX3NwaS0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyOworCisJZGF2aW5jaV9zcGktPnZlcnNpb24gPSBwZGF0YS0+dmVyc2lvbjsKKwl1c2VfZG1hID0gcGRhdGEtPnVzZV9kbWE7CisKKwlkYXZpbmNpX3NwaS0+Yml0YmFuZy5mbGFncyA9IFNQSV9OT19DUyB8IFNQSV9MU0JfRklSU1QgfCBTUElfTE9PUDsKKwlpZiAoZGF2aW5jaV9zcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikKKwkJZGF2aW5jaV9zcGktPmJpdGJhbmcuZmxhZ3MgfD0gU1BJX1JFQURZOworCisJaWYgKHVzZV9kbWEpIHsKKwkJCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCQkJaWYgKHIpCisJCQkJZG1hX3J4X2NoYW4gPSByLT5zdGFydDsKKwkJCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCQkJaWYgKHIpCisJCQkJZG1hX3R4X2NoYW4gPSByLT5zdGFydDsKKwkJCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDIpOworCQkJaWYgKHIpCisJCQkJZG1hX2V2ZW50cSA9IHItPnN0YXJ0OworCX0KKworCWlmICghdXNlX2RtYSB8fAorCSAgICBkbWFfcnhfY2hhbiA9PSBTUElfTk9fUkVTT1VSQ0UgfHwKKwkgICAgZG1hX3R4X2NoYW4gPT0gU1BJX05PX1JFU09VUkNFIHx8CisJICAgIGRtYV9ldmVudHEJPT0gU1BJX05PX1JFU09VUkNFKSB7CisJCWRhdmluY2lfc3BpLT5iaXRiYW5nLnR4cnhfYnVmcyA9IGRhdmluY2lfc3BpX2J1ZnNfcGlvOworCQl1c2VfZG1hID0gMDsKKwl9IGVsc2UgeworCQlkYXZpbmNpX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkYXZpbmNpX3NwaV9idWZzX2RtYTsKKwkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVscyA9IGt6YWxsb2MobWFzdGVyLT5udW1fY2hpcHNlbGVjdAorCQkJCSogc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3NwaV9kbWEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZV9jbGs7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV9yeF9jaGFubmVsID0gLTE7CisJCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV9yeF9zeW5jX2RldiA9CisJCQkJZG1hX3J4X2NoYW47CisJCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9jaGFubmVsID0gLTE7CisJCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9zeW5jX2RldiA9CisJCQkJZG1hX3R4X2NoYW47CisJCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmV2ZW50cSA9IGRtYV9ldmVudHE7CisJCX0KKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRhVmluY2kgU1BJIGRyaXZlciBpbiBFRE1BIG1vZGVcbiIKKwkJCQkiVXNpbmcgUlggY2hhbm5lbCA9ICVkICwgVFggY2hhbm5lbCA9ICVkIGFuZCAiCisJCQkJImV2ZW50IHF1ZXVlID0gJWQiLCBkbWFfcnhfY2hhbiwgZG1hX3R4X2NoYW4sCisJCQkJZG1hX2V2ZW50cSk7CisJfQorCisJZGF2aW5jaV9zcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91ODsKKwlkYXZpbmNpX3NwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3U4OworCisJaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaS0+ZG9uZSk7CisKKwkvKiBSZXNldCBJbi9PVVQgU1BJIG1vZHVsZSAqLworCWlvd3JpdGUzMigwLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjApOworCXVkZWxheSgxMDApOworCWlvd3JpdGUzMigxLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjApOworCisJLyogQ2xvY2sgaW50ZXJuYWwgKi8KKwlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5jbGtfaW50ZXJuYWwpCisJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKKwkJCQlTUElHQ1IxX0NMS01PRF9NQVNLKTsKKwllbHNlCisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLAorCQkJCVNQSUdDUjFfQ0xLTU9EX01BU0spOworCisJLyogbWFzdGVyIG1vZGUgZGVmYXVsdCAqLworCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9NQVNURVJfTUFTSyk7CisKKwlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5pbnRyX2xldmVsKQorCQlpb3dyaXRlMzIoU1BJX0lOVExWTF8xLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUxWTCk7CisJZWxzZQorCQlpb3dyaXRlMzIoU1BJX0lOVExWTF8wLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUxWTCk7CisKKwlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmZGF2aW5jaV9zcGktPmJpdGJhbmcpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9jbGs7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ29udHJvbGxlciBhdCAweCVwIFxuIiwgZGF2aW5jaV9zcGktPmJhc2UpOworCisJaWYgKCFwZGF0YS0+cG9sbF9tb2RlKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiT3BlcmF0aW5nIGluIGludGVycnVwdCBtb2RlIgorCQkJIiB1c2luZyBJUlEgJWRcbiIsIGRhdmluY2lfc3BpLT5pcnEpOworCisJcmV0dXJuIHJldDsKKworZnJlZV9jbGs6CisJY2xrX2Rpc2FibGUoZGF2aW5jaV9zcGktPmNsayk7CisJY2xrX3B1dChkYXZpbmNpX3NwaS0+Y2xrKTsKK3B1dF9tYXN0ZXI6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKK2ZyZWVfdG1wX2J1ZjoKKwlrZnJlZShkYXZpbmNpX3NwaS0+dG1wX2J1Zik7CitpcnFfZnJlZToKKwlmcmVlX2lycShkYXZpbmNpX3NwaS0+aXJxLCBkYXZpbmNpX3NwaSk7Cit1bm1hcF9pbzoKKwlpb3VubWFwKGRhdmluY2lfc3BpLT5iYXNlKTsKK3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihkYXZpbmNpX3NwaS0+cGJhc2UsIGRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSk7CitmcmVlX21hc3RlcjoKKwlrZnJlZShtYXN0ZXIpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfcmVtb3ZlIC0gcmVtb3ZlIGZ1bmN0aW9uIGZvciBTUEkgTWFzdGVyIENvbnRyb2xsZXIKKyAqIEBwZGV2OiBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHBsYXRlZm9ybSBzcGVjaWZpYyBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRvIHRoZSByZXZlcnNlIGFjdGlvbiBvZiBkYXZpbmNpX3NwaV9wcm9iZSBmdW5jdGlvbgorICogSXQgd2lsbCBmcmVlIHRoZSBJUlEgYW5kIFNQSSBjb250cm9sbGVyJ3MgbWVtb3J5IHJlZ2lvbi4KKyAqIEl0IHdpbGwgYWxzbyBjYWxsIHNwaV9iaXRiYW5nX3N0b3AgdG8gZGVzdHJveSB0aGUgd29yayBxdWV1ZSB3aGljaCB3YXMKKyAqIGNyZWF0ZWQgYnkgc3BpX2JpdGJhbmdfc3RhcnQuCisgKi8KK3N0YXRpYyBpbnQgX19leGl0IGRhdmluY2lfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJmRhdmluY2lfc3BpLT5iaXRiYW5nKTsKKworCWNsa19kaXNhYmxlKGRhdmluY2lfc3BpLT5jbGspOworCWNsa19wdXQoZGF2aW5jaV9zcGktPmNsayk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlrZnJlZShkYXZpbmNpX3NwaS0+dG1wX2J1Zik7CisJZnJlZV9pcnEoZGF2aW5jaV9zcGktPmlycSwgZGF2aW5jaV9zcGkpOworCWlvdW5tYXAoZGF2aW5jaV9zcGktPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkYXZpbmNpX3NwaS0+cGJhc2UsIGRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGF2aW5jaV9zcGlfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSA9ICJzcGlfZGF2aW5jaSIsCisJLnJlbW92ZSA9IF9fZXhpdF9wKGRhdmluY2lfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZGF2aW5jaV9zcGlfZHJpdmVyLCBkYXZpbmNpX3NwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChkYXZpbmNpX3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhdmluY2lfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGF2aW5jaV9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhdmluY2lfc3BpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIERhVmluY2kgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGkuYwppbmRleCAzMTYyMGZhLi44ZWQzOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9kd19zcGkuYwpAQCAtMTUyLDYgKzE1Miw3IEBACiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbXJzdF9zcGlfZGVidWdmc19pbml0KHN0cnVjdCBkd19zcGkgKmR3cykKIHsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1yc3Rfc3BpX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkd19zcGkgKmR3cykKQEAgLTE2MSwxNCArMTYyLDE0IEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfdGlsbF9ub3RfYnVzeShzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDAwKTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyAxICsgdXNlY3NfdG9famlmZmllcygxMDAwKTsKIAogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKSB7CiAJCWlmICghKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfQlVTWSkpCiAJCQlyZXR1cm47CiAJfQogCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsCi0JCSJEVyBTUEk6IFN0dXR1cyBrZWVwcyBidXN5IGZvciAxMDAwdXMgYWZ0ZXIgYSByZWFkL3dyaXRlIVxuIik7CisJCSJEVyBTUEk6IFN0YXR1cyBrZWVwcyBidXN5IGZvciAxMDAwdXMgYWZ0ZXIgYSByZWFkL3dyaXRlIVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBkd19zcGkgKmR3cykKQEAgLTM1OCw2ICszNTksOCBAQAogc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF90cmFuc2ZlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CiAJdTE2IGlycV9zdGF0dXMsIGlycV9tYXNrID0gMHgzZjsKKwl1MzIgaW50X2xldmVsID0gZHdzLT5maWZvX2xlbiAvIDI7CisJdTMyIGxlZnQ7CiAKIAlpcnFfc3RhdHVzID0gZHdfcmVhZHcoZHdzLCBpc3IpICYgaXJxX21hc2s7CiAJLyogRXJyb3IgaGFuZGxpbmcgKi8KQEAgLTM2OSwyMiArMzcyLDIzIEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQkvKiBJTlQgY29tZXMgZnJvbSB0eCAqLwotCWlmIChkd3MtPnR4ICYmIChpcnFfc3RhdHVzICYgU1BJX0lOVF9UWEVJKSkgewotCQl3aGlsZSAoZHdzLT50eCA8IGR3cy0+dHhfZW5kKQorCWlmIChpcnFfc3RhdHVzICYgU1BJX0lOVF9UWEVJKSB7CisJCXNwaV9tYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOworCisJCWxlZnQgPSAoZHdzLT50eF9lbmQgLSBkd3MtPnR4KSAvIGR3cy0+bl9ieXRlczsKKwkJbGVmdCA9IChsZWZ0ID4gaW50X2xldmVsKSA/IGludF9sZXZlbCA6IGxlZnQ7CisKKwkJd2hpbGUgKGxlZnQtLSkKIAkJCWR3cy0+d3JpdGUoZHdzKTsKKwkJZHdzLT5yZWFkKGR3cyk7CiAKLQkJaWYgKGR3cy0+dHggPT0gZHdzLT50eF9lbmQpIHsKLQkJCXNwaV9tYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOwotCQkJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKLQkJfQotCX0KLQotCS8qIElOVCBjb21lcyBmcm9tIHJ4ICovCi0JaWYgKGR3cy0+cnggJiYgKGlycV9zdGF0dXMgJiBTUElfSU5UX1JYRkkpKSB7Ci0JCWlmIChkd3MtPnJlYWQoZHdzKSkKKwkJLyogUmUtZW5hYmxlIHRoZSBJUlEgaWYgdGhlcmUgaXMgc3RpbGwgZGF0YSBsZWZ0IHRvIHR4ICovCisJCWlmIChkd3MtPnR4X2VuZCA+IGR3cy0+dHgpCisJCQlzcGlfdW1hc2tfaW50cihkd3MsIFNQSV9JTlRfVFhFSSk7CisJCWVsc2UKIAkJCXRyYW5zZmVyX2NvbXBsZXRlKGR3cyk7CiAJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00MDQsMTIgKzQwOCw5IEBACiAvKiBNdXN0IGJlIGNhbGxlZCBpbnNpZGUgcHVtcF90cmFuc2ZlcnMoKSAqLwogc3RhdGljIHZvaWQgcG9sbF90cmFuc2ZlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7Ci0JaWYgKGR3cy0+dHgpIHsKLQkJd2hpbGUgKGR3cy0+d3JpdGUoZHdzKSkKLQkJCWR3cy0+cmVhZChkd3MpOwotCX0KKwl3aGlsZSAoZHdzLT53cml0ZShkd3MpKQorCQlkd3MtPnJlYWQoZHdzKTsKIAotCWR3cy0+cmVhZChkd3MpOwogCXRyYW5zZmVyX2NvbXBsZXRlKGR3cyk7CiB9CiAKQEAgLTQyOCw2ICs0MjksNyBAQAogCXU4IGJpdHMgPSAwOwogCXU4IGltYXNrID0gMDsKIAl1OCBjc19jaGFuZ2UgPSAwOworCXUxNiB0eGludF9sZXZlbCA9IDA7CiAJdTE2IGNsa19kaXYgPSAwOwogCXUzMiBzcGVlZCA9IDA7CiAJdTMyIGNyMCA9IDA7CkBAIC00MzgsNiArNDQwLDkgQEAKIAljaGlwID0gZHdzLT5jdXJfY2hpcDsKIAlzcGkgPSBtZXNzYWdlLT5zcGk7CiAKKwlpZiAodW5saWtlbHkoIWNoaXAtPmNsa19kaXYpKQorCQljaGlwLT5jbGtfZGl2ID0gZHdzLT5tYXhfZnJlcSAvIGNoaXAtPnNwZWVkX2h6OworCiAJaWYgKG1lc3NhZ2UtPnN0YXRlID09IEVSUk9SX1NUQVRFKSB7CiAJCW1lc3NhZ2UtPnN0YXR1cyA9IC1FSU87CiAJCWdvdG8gZWFybHlfZXhpdDsKQEAgLTQ5Miw3ICs0OTcsNyBAQAogCiAJCQkvKiBjbGtfZGl2IGRvZXNuJ3Qgc3VwcG9ydCBvZGQgbnVtYmVyICovCiAJCQljbGtfZGl2ID0gZHdzLT5tYXhfZnJlcSAvIHNwZWVkOwotCQkJY2xrX2RpdiA9IChjbGtfZGl2ID4+IDEpIDw8IDE7CisJCQljbGtfZGl2ID0gKGNsa19kaXYgKyAxKSAmIDB4ZmZmZTsKIAogCQkJY2hpcC0+c3BlZWRfaHogPSBzcGVlZDsKIAkJCWNoaXAtPmNsa19kaXYgPSBjbGtfZGl2OwpAQCAtNTMyLDE0ICs1MzcsMzUgQEAKIAl9CiAJbWVzc2FnZS0+c3RhdGUgPSBSVU5OSU5HX1NUQVRFOwogCisJLyoKKwkgKiBBZGp1c3QgdHJhbnNmZXIgbW9kZSBpZiBuZWNlc3NhcnkuIFJlcXVpcmVzIHBsYXRmb3JtIGRlcGVuZGVudAorCSAqIGNoaXBzZWxlY3QgbWVjaGFuaXNtLgorCSAqLworCWlmIChkd3MtPmNzX2NvbnRyb2wpIHsKKwkJaWYgKGR3cy0+cnggJiYgZHdzLT50eCkKKwkJCWNoaXAtPnRtb2RlID0gMHgwMDsKKwkJZWxzZSBpZiAoZHdzLT5yeCkKKwkJCWNoaXAtPnRtb2RlID0gMHgwMjsKKwkJZWxzZQorCQkJY2hpcC0+dG1vZGUgPSAweDAxOworCisJCWNyMCAmPSB+KDB4MyA8PCBTUElfTU9ERV9PRkZTRVQpOworCQljcjAgfD0gKGNoaXAtPnRtb2RlIDw8IFNQSV9UTU9EX09GRlNFVCk7CisJfQorCiAJLyogQ2hlY2sgaWYgY3VycmVudCB0cmFuc2ZlciBpcyBhIERNQSB0cmFuc2FjdGlvbiAqLwogCWR3cy0+ZG1hX21hcHBlZCA9IG1hcF9kbWFfYnVmZmVycyhkd3MpOwogCisJLyoKKwkgKiBJbnRlcnJ1cHQgbW9kZQorCSAqIHdlIG9ubHkgbmVlZCBzZXQgdGhlIFRYRUkgSVJRLCBhcyBUWC9SWCBhbHdheXMgaGFwcGVuIHN5bmNyb25pemVseQorCSAqLwogCWlmICghZHdzLT5kbWFfbWFwcGVkICYmICFjaGlwLT5wb2xsX21vZGUpIHsKLQkJaWYgKGR3cy0+cngpCi0JCQlpbWFzayB8PSBTUElfSU5UX1JYRkk7Ci0JCWlmIChkd3MtPnR4KQotCQkJaW1hc2sgfD0gU1BJX0lOVF9UWEVJOworCQlpbnQgdGVtcGxlbiA9IGR3cy0+bGVuIC8gZHdzLT5uX2J5dGVzOworCQl0eGludF9sZXZlbCA9IGR3cy0+Zmlmb19sZW4gLyAyOworCQl0eGludF9sZXZlbCA9ICh0ZW1wbGVuID4gdHhpbnRfbGV2ZWwpID8gdHhpbnRfbGV2ZWwgOiB0ZW1wbGVuOworCisJCWltYXNrIHw9IFNQSV9JTlRfVFhFSTsKIAkJZHdzLT50cmFuc2Zlcl9oYW5kbGVyID0gaW50ZXJydXB0X3RyYW5zZmVyOwogCX0KIApAQCAtNTQ5LDIxICs1NzUsMjMgQEAKIAkgKgkyLiBjbGtfZGl2IGlzIGNoYW5nZWQKIAkgKgkzLiBjb250cm9sIHZhbHVlIGNoYW5nZXMKIAkgKi8KLQlpZiAoZHdfcmVhZHcoZHdzLCBjdHJsMCkgIT0gY3IwIHx8IGNzX2NoYW5nZSB8fCBjbGtfZGl2KSB7CisJaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCB8fCBjc19jaGFuZ2UgfHwgY2xrX2RpdiB8fCBpbWFzaykgewogCQlzcGlfZW5hYmxlX2NoaXAoZHdzLCAwKTsKIAogCQlpZiAoZHdfcmVhZHcoZHdzLCBjdHJsMCkgIT0gY3IwKQogCQkJZHdfd3JpdGV3KGR3cywgY3RybDAsIGNyMCk7CiAKLQkJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzaywgZm9yIHBvbGwgbW9kZSBqdXN0IGRpYWJsZSBhbGwgaW50ICovCi0JCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKLQkJaWYgKCFjaGlwLT5wb2xsX21vZGUpCi0JCQlzcGlfdW1hc2tfaW50cihkd3MsIGltYXNrKTsKLQogCQlzcGlfc2V0X2Nsayhkd3MsIGNsa19kaXYgPyBjbGtfZGl2IDogY2hpcC0+Y2xrX2Rpdik7CiAJCXNwaV9jaGlwX3NlbChkd3MsIHNwaS0+Y2hpcF9zZWxlY3QpOwotCQlzcGlfZW5hYmxlX2NoaXAoZHdzLCAxKTsKIAorCQkvKiBTZXQgdGhlIGludGVycnVwdCBtYXNrLCBmb3IgcG9sbCBtb2RlIGp1c3QgZGlhYmxlIGFsbCBpbnQgKi8KKwkJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOworCQlpZiAoaW1hc2spCisJCQlzcGlfdW1hc2tfaW50cihkd3MsIGltYXNrKTsKKwkJaWYgKHR4aW50X2xldmVsKQorCQkJZHdfd3JpdGV3KGR3cywgdHhmbHRyLCB0eGludF9sZXZlbCk7CisKKwkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CiAJCWlmIChjc19jaGFuZ2UpCiAJCQlkd3MtPnByZXZfY2hpcCA9IGNoaXA7CiAJfQpAQCAtNzEyLDExICs3NDAsMTEgQEAKIAl9CiAJY2hpcC0+Yml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKIAorCWlmICghc3BpLT5tYXhfc3BlZWRfaHopIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJObyBtYXggc3BlZWQgSFogcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWNoaXAtPnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7Ci0JaWYgKGNoaXAtPnNwZWVkX2h6KQotCQljaGlwLT5jbGtfZGl2ID0gMjUwMDAwMDAgLyBjaGlwLT5zcGVlZF9oejsKLQllbHNlCi0JCWNoaXAtPmNsa19kaXYgPSA4OwkvKiBkZWZhdWx0IHZhbHVlICovCiAKIAljaGlwLT50bW9kZSA9IDA7IC8qIFR4ICYgUnggKi8KIAkvKiBEZWZhdWx0IFNQSSBtb2RlIGlzIFNDUE9MID0gMCwgU0NQSCA9IDAgKi8KQEAgLTczNSw3ICs3NjMsNyBAQAogCWtmcmVlKGNoaXApOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQogewogCUlOSVRfTElTVF9IRUFEKCZkd3MtPnF1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmZHdzLT5sb2NrKTsKQEAgLTgxNyw2ICs4NDUsMjIgQEAKIAlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7CiAJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CiAJZmx1c2goZHdzKTsKKworCS8qCisJICogVHJ5IHRvIGRldGVjdCB0aGUgRklGTyBkZXB0aCBpZiBub3Qgc2V0IGJ5IGludGVyZmFjZSBkcml2ZXIsCisJICogdGhlIGRlcHRoIGNvdWxkIGJlIGZyb20gMiB0byAyNTYgZnJvbSBIVyBzcGVjCisJICovCisJaWYgKCFkd3MtPmZpZm9fbGVuKSB7CisJCXUzMiBmaWZvOworCQlmb3IgKGZpZm8gPSAyOyBmaWZvIDw9IDI1NzsgZmlmbysrKSB7CisJCQlkd193cml0ZXcoZHdzLCB0eGZsdHIsIGZpZm8pOworCQkJaWYgKGZpZm8gIT0gZHdfcmVhZHcoZHdzLCB0eGZsdHIpKQorCQkJCWJyZWFrOworCQl9CisKKwkJZHdzLT5maWZvX2xlbiA9IChmaWZvID09IDI1NykgPyAwIDogZmlmbzsKKwkJZHdfd3JpdGV3KGR3cywgdHhmbHRyLCAwKTsKKwl9CiB9CiAKIGludCBfX2RldmluaXQgZHdfc3BpX2FkZF9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cykKQEAgLTkxMyw2ICs5NTcsNyBAQAogCS8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgU1BJIGZyYW1ld29yayAqLwogCXNwaV91bnJlZ2lzdGVyX21hc3Rlcihkd3MtPm1hc3Rlcik7CiB9CitFWFBPUlRfU1lNQk9MKGR3X3NwaV9yZW1vdmVfaG9zdCk7CiAKIGludCBkd19zcGlfc3VzcGVuZF9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaV9tbWlvLmMgYi9kcml2ZXJzL3NwaS9kd19zcGlfbW1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWI0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9kd19zcGlfbW1pby5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogZHdfc3BpX21taW8uYyAtIE1lbW9yeS1tYXBwZWQgaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIENvcmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIE9jdGFzaWMgc2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9kd19zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImR3X3NwaV9tbWlvIgorCitzdHJ1Y3QgZHdfc3BpX21taW8geworCXN0cnVjdCBkd19zcGkgIGR3czsKKwlzdHJ1Y3QgY2xrICAgICAqY2xrOworfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZHdfc3BpX21taW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfc3BpX21taW8gKmR3c21taW87CisJc3RydWN0IGR3X3NwaSAqZHdzOworCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaW9hcmVhOworCWludCByZXQ7CisKKwlkd3NtbWlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR3X3NwaV9tbWlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkd3NtbWlvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2VuZDsKKwl9CisKKwlkd3MgPSAmZHdzbW1pby0+ZHdzOworCisJLyogR2V0IGJhc2ljIGlvIHJlc291cmNlIGFuZCBtYXAgaXQgKi8KKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlpb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pLAorCQkJcGRldi0+bmFtZSk7CisJaWYgKCFpb2FyZWEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiU1BJIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCWR3cy0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghZHdzLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNQSSByZWdpb24gYWxyZWFkeSBtYXBwZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZzsKKwl9CisKKwlkd3MtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGR3cy0+aXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgcmVzb3VyY2U/XG4iKTsKKwkJcmV0ID0gZHdzLT5pcnE7IC8qIC1FTlhJTyAqLworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKKwlkd3NtbWlvLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmICghZHdzbW1pby0+Y2xrKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2lycTsKKwl9CisJY2xrX2VuYWJsZShkd3NtbWlvLT5jbGspOworCisJZHdzLT5wYXJlbnRfZGV2ID0gJnBkZXYtPmRldjsKKwlkd3MtPmJ1c19udW0gPSAwOworCWR3cy0+bnVtX2NzID0gNDsKKwlkd3MtPm1heF9mcmVxID0gY2xrX2dldF9yYXRlKGR3c21taW8tPmNsayk7CisKKwlyZXQgPSBkd19zcGlfYWRkX2hvc3QoZHdzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGs7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkd3NtbWlvKTsKKwlyZXR1cm4gMDsKKworZXJyX2NsazoKKwljbGtfZGlzYWJsZShkd3NtbWlvLT5jbGspOworCWNsa19wdXQoZHdzbW1pby0+Y2xrKTsKKwlkd3NtbWlvLT5jbGsgPSBOVUxMOworZXJyX2lycToKKwlmcmVlX2lycShkd3MtPmlycSwgZHdzKTsKK2Vycl91bm1hcDoKKwlpb3VubWFwKGR3cy0+cmVncyk7CitlcnJfcmVsZWFzZV9yZWc6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CitlcnJfa2ZyZWU6CisJa2ZyZWUoZHdzbW1pbyk7CitlcnJfZW5kOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGR3X3NwaV9tbWlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkd19zcGlfbW1pbyAqZHdzbW1pbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwljbGtfZGlzYWJsZShkd3NtbWlvLT5jbGspOworCWNsa19wdXQoZHdzbW1pby0+Y2xrKTsKKwlkd3NtbWlvLT5jbGsgPSBOVUxMOworCisJZnJlZV9pcnEoZHdzbW1pby0+ZHdzLmlycSwgJmR3c21taW8tPmR3cyk7CisJZHdfc3BpX3JlbW92ZV9ob3N0KCZkd3NtbWlvLT5kd3MpOworCWlvdW5tYXAoZHdzbW1pby0+ZHdzLnJlZ3MpOworCWtmcmVlKGR3c21taW8pOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfc3BpX21taW9fZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZHdfc3BpX21taW9fcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGR3X3NwaV9tbWlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkd19zcGlfbW1pb19kcml2ZXIsIGR3X3NwaV9tbWlvX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGR3X3NwaV9tbWlvX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZHdfc3BpX21taW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkd19zcGlfbW1pb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZHdfc3BpX21taW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkplYW4tSHVndWVzIERlc2NoZW5lcyA8amVhbi1odWd1ZXMuZGVzY2hlbmVzQG9jdGFzaWMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZW1vcnktbWFwcGVkIEkvTyBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgQ29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCmluZGV4IDM0YmE2OTEuLjFmMDczNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYworKysgYi9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKQEAgLTczLDYgKzczLDcgQEAKIAlkd3MtPm51bV9jcyA9IDQ7CiAJZHdzLT5tYXhfZnJlcSA9IDI1MDAwMDAwOwkvKiBmb3IgTW9vcmVzdHdvbiAqLwogCWR3cy0+aXJxID0gcGRldi0+aXJxOworCWR3cy0+Zmlmb19sZW4gPSA0MDsJCS8qIEZJRk8gaGFzIDQwIHdvcmRzIGJ1ZmZlciAqLwogCiAJcmV0ID0gZHdfc3BpX2FkZF9ob3N0KGR3cyk7CiAJaWYgKHJldCkKQEAgLTk4LDYgKzk5LDcgQEAKIAlzdHJ1Y3QgZHdfc3BpX3BjaSAqZHdwY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZHdfc3BpX3JlbW92ZV9ob3N0KCZkd3BjaS0+ZHdzKTsKIAlpb3VubWFwKGR3cGNpLT5kd3MucmVncyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwogCWtmcmVlKGR3cGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggZjUwYzgxZC4uMDQ3NDc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTUwMyw3ICs1MDMsNyBAQAogCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcmVtb3ZlKCZvcC0+ZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9wc2Nfc3BpX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3BzY19zcGlfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy1zcGkiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1wc2Mtc3BpIiwgfSwgLyogb2xkICovCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCmluZGV4IDQ1YmZlNjQuLjZlYWI0NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3BpIiwgfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IGJmNWY5NWEuLjcxNWM1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAlPTUFQMjRYWF9ETUFfU1BJMl9UWDEsCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgXAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIFwKIAl8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpM19yeGRtYV9pZFtdID0gewogCU9NQVAyNFhYX0RNQV9TUEkzX1JYMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAxODkzZjFlOS4uMGRkYmJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2lteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCWludCBncGlvID0gc3BpX2lteC0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKIAotCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCisJZGV2X2RiZygmc3BpLT5kZXYsICIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCiAJCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOwogCiAJaWYgKGdwaW8gPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCmluZGV4IDFmYjJhNmUuLjRmMGNjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIAlpZiAoKG1wYzh4eHhfc3BpLT5zcGlicmcgLyBoeikgPiA2NCkgewogCQljcy0+aHdfbW9kZSB8PSBTUE1PREVfRElWMTY7Ci0JCXBtID0gbXBjOHh4eF9zcGktPnNwaWJyZyAvIChoeiAqIDY0KTsKKwkJcG0gPSAobXBjOHh4eF9zcGktPnNwaWJyZyAtIDEpIC8gKGh6ICogNjQpICsgMTsKIAogCQlXQVJOX09OQ0UocG0gPiAxNiwgIiVzOiBSZXF1ZXN0ZWQgc3BlZWQgaXMgdG9vIGxvdzogJWQgSHouICIKIAkJCSAgIldpbGwgdXNlICVkIEh6IGluc3RlYWQuXG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLApAQCAtMzczLDcgKzM3Myw3IEBACiAJCWlmIChwbSA+IDE2KQogCQkJcG0gPSAxNjsKIAl9IGVsc2UKLQkJcG0gPSBtcGM4eHh4X3NwaS0+c3BpYnJnIC8gKGh6ICogNCk7CisJCXBtID0gKG1wYzh4eHhfc3BpLT5zcGlicmcgLSAxKSAvIChoeiAqIDQpICsgMTsKIAlpZiAocG0pCiAJCXBtLS07CiAKQEAgLTEzMjgsNyArMTMyOCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwbGF0X21wYzh4eHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICptZW07Ci0JdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaXJxOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CiAKIAlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQpAQCAtMTMzOSw3ICsxMzM5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghaXJxKQorCWlmIChpcnEgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltYXN0ZXIgPSBtcGM4eHh4X3NwaV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKaW5kZXggMTQwYTE4ZC4uNmQ4ZDQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9wcGM0eHhfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9wcGM0eHhfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwcGM0eHgtc3BpIiwgfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYwppbmRleCA4OGE0NTZkLi45NzM2NTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPHBsYXQvc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NHh4LXNwaS5oPgogCiAvKiBSZWdpc3RlcnMgYW5kIGJpdC1maWVsZHMgKi8KIApAQCAtMTM3LDYgKzEzNyw3IEBACiAvKioKICAqIHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAtIFJ1bnRpbWUgaW5mbyBob2xkZXIgZm9yIFNQSSBkcml2ZXIuCiAgKiBAY2xrOiBQb2ludGVyIHRvIHRoZSBzcGkgY2xvY2suCisgKiBAc3JjX2NsazogUG9pbnRlciB0byB0aGUgY2xvY2sgdXNlZCB0byBnZW5lcmF0ZSBTUEkgc2lnbmFscy4KICAqIEBtYXN0ZXI6IFBvaW50ZXIgdG8gdGhlIFNQSSBQcm90b2NvbCBtYXN0ZXIuCiAgKiBAd29ya3F1ZXVlOiBXb3JrIHF1ZXVlIGZvciB0aGUgU1BJIHhmZXIgcmVxdWVzdHMuCiAgKiBAY250cmxyX2luZm86IFBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIHRoZSBjb250cm9sbGVyIHRoaXMgZHJpdmVyIG1hbmFnZXMuCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhIHsKIAl2b2lkIF9faW9tZW0gICAgICAgICAgICAgICAgICAgICpyZWdzOwogCXN0cnVjdCBjbGsgICAgICAgICAgICAgICAgICAgICAgKmNsazsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAgICAgICAgICpzcmNfY2xrOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICAgICAgICAgKnBkZXY7CiAJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgICAgICAgICAqbWFzdGVyOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSAgICAgICAgKndvcmtxdWV1ZTsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gICpjbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAgKmNudHJscl9pbmZvOwogCXN0cnVjdCBzcGlfZGV2aWNlICAgICAgICAgICAgICAgKnRnbF9zcGk7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgICAgICB3b3JrOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgcXVldWU7CkBAIC0xODAsNyArMTgyLDcgQEAKIAogc3RhdGljIHZvaWQgZmx1c2hfZmlmbyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgbG9vcHM7CiAJdTMyIHZhbDsKQEAgLTIyNSw3ICsyMjcsNyBAQAogCQkJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciwgaW50IGRtYV9tb2RlKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdTMyIG1vZGVjZmcsIGNoY2ZnOwogCkBAIC0yOTgsMTkgKzMwMCwyMCBAQAogCQlpZiAoc2RkLT50Z2xfc3BpICE9IHNwaSkgeyAvKiBpZiBsYXN0IG1zc2cgb24gZGlmZiBkZXZpY2UgKi8KIAkJCS8qIERlc2VsZWN0IHRoZSBsYXN0IHRvZ2dsZWQgZGV2aWNlICovCiAJCQljcyA9IHNkZC0+dGdsX3NwaS0+Y29udHJvbGxlcl9kYXRhOwotCQkJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwkJCWNzLT5zZXRfbGV2ZWwoY3MtPmxpbmUsCisJCQkJCXNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOwogCQl9CiAJCXNkZC0+dGdsX3NwaSA9IE5VTEw7CiAJfQogCiAJY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKLQljcy0+c2V0X2xldmVsKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDApOworCWNzLT5zZXRfbGV2ZWwoY3MtPmxpbmUsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDApOwogfQogCiBzdGF0aWMgaW50IHdhaXRfZm9yX3hmZXIoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCiAJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciwgaW50IGRtYV9tb2RlKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IG1zOwpAQCAtMzg0LDEyICszODcsMTEgQEAKIAlpZiAoc2RkLT50Z2xfc3BpID09IHNwaSkKIAkJc2RkLT50Z2xfc3BpID0gTlVMTDsKIAotCWNzLT5zZXRfbGV2ZWwoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CisJY3MtPnNldF9sZXZlbChjcy0+bGluZSwgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHMzYzY0eHhfc3BpX2NvbmZpZyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXUzMiB2YWw7CiAKQEAgLTQzNSw3ICs0MzcsNyBAQAogCS8qIENvbmZpZ3VyZSBDbG9jayAqLwogCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKIAl2YWwgJj0gflMzQzY0WFhfU1BJX1BTUl9NQVNLOwotCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKKwl2YWwgfD0gKChjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIHNkZC0+Y3VyX3NwZWVkIC8gMiAtIDEpCiAJCQkmIFMzQzY0WFhfU1BJX1BTUl9NQVNLKTsKIAl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CiAKQEAgLTU1OCw3ICs1NjAsNyBAQAogc3RhdGljIHZvaWQgaGFuZGxlX21zZyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKIAkJCQkJc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBtc2ctPnNwaTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CkBAIC02MzIsOCArNjM0LDggQEAKIAkJUzNDNjRYWF9TUElfREVBQ1Qoc2RkKTsKIAogCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKCZzcGktPmRldiwgIkkvTyBFcnJvcjogXAotCQkJCXJ4LSVkIHR4LSVkIHJlczpyeC0lYyB0eC0lYyBsZW4tJWRcbiIsCisJCQlkZXZfZXJyKCZzcGktPmRldiwgIkkvTyBFcnJvcjogIgorCQkJCSJyeC0lZCB0eC0lZCByZXM6cngtJWMgdHgtJWMgbGVuLSVkXG4iLAogCQkJCXhmZXItPnJ4X2J1ZiA/IDEgOiAwLCB4ZmVyLT50eF9idWYgPyAxIDogMCwKIAkJCQkoc2RkLT5zdGF0ZSAmIFJYQlVTWSkgPyAnZicgOiAncCcsCiAJCQkJKHNkZC0+c3RhdGUgJiBUWEJVU1kpID8gJ2YnIDogJ3AnLApAQCAtNzg2LDcgKzc4OCw3IEBACiB7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpOwogCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOwogCXUzMiBwc3IsIHNwZWVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04MzEsMTcgKzgzMywxNyBAQAogCX0KIAogCS8qIENoZWNrIGlmIHdlIGNhbiBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgcmF0ZSAqLwotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKDAgKyAxKTsgLyogTWF4IHBvc3NpYmxlICovCisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIDIgLyAoMCArIDEpOyAvKiBNYXggcG9zc2libGUgKi8KIAogCWlmIChzcGktPm1heF9zcGVlZF9oeiA+IHNwZWVkKQogCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOwogCi0JcHNyID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gc3BpLT5tYXhfc3BlZWRfaHogLSAxOworCXBzciA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvIHNwaS0+bWF4X3NwZWVkX2h6IC0gMTsKIAlwc3IgJj0gUzNDNjRYWF9TUElfUFNSX01BU0s7CiAJaWYgKHBzciA9PSBTM0M2NFhYX1NQSV9QU1JfTUFTSykKIAkJcHNyLS07CiAKLQlzcGVlZCA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKIAlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCBzcGVlZCkgewogCQlpZiAocHNyKzEgPCBTM0M2NFhYX1NQSV9QU1JfTUFTSykgewogCQkJcHNyKys7CkBAIC04NTEsNyArODUzLDcgQEAKIAkJfQogCX0KIAotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOwogCWlmIChzcGktPm1heF9zcGVlZF9oeiA+PSBzcGVlZCkKIAkJc3BpLT5tYXhfc3BlZWRfaHogPSBzcGVlZDsKIAllbHNlCkBAIC04NjcsNyArODY5LDcgQEAKIAogc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfaHdpbml0KHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLCBpbnQgY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXVuc2lnbmVkIGludCB2YWw7CiAKQEAgLTkwMiw3ICs5MDQsNyBAQAogewogCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlcywgKmRtYXR4X3JlcywgKmRtYXJ4X3JlczsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CiAJaW50IHJldDsKIApAQCAtMTAwMCwxOCArMTAwMiwxNSBAQAogCQlnb3RvIGVycjQ7CiAJfQogCi0JaWYgKHNjaS0+c3JjX2Nsa19uciA9PSBTM0M2NFhYX1NQSV9TUkNDTEtfUENMSykKLQkJc2NpLT5zcmNfY2xrID0gc2RkLT5jbGs7Ci0JZWxzZQotCQlzY2ktPnNyY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIHNjaS0+c3JjX2Nsa19uYW1lKTsKLQlpZiAoSVNfRVJSKHNjaS0+c3JjX2NsaykpIHsKKwlzZGQtPnNyY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIHNjaS0+c3JjX2Nsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHNkZC0+c3JjX2NsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIlVuYWJsZSB0byBhY3F1aXJlIGNsb2NrICclcydcbiIsIHNjaS0+c3JjX2Nsa19uYW1lKTsKLQkJcmV0ID0gUFRSX0VSUihzY2ktPnNyY19jbGspOworCQlyZXQgPSBQVFJfRVJSKHNkZC0+c3JjX2Nsayk7CiAJCWdvdG8gZXJyNTsKIAl9CiAKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrICYmIGNsa19lbmFibGUoc2NpLT5zcmNfY2xrKSkgeworCWlmIChjbGtfZW5hYmxlKHNkZC0+c3JjX2NsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgZW5hYmxlIGNsb2NrICclcydcbiIsCiAJCQkJCQkJc2NpLT5zcmNfY2xrX25hbWUpOwogCQlyZXQgPSAtRUJVU1k7CkBAIC0xMDQwLDExICsxMDM5LDEwIEBACiAJCWdvdG8gZXJyODsKIAl9CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJTYW1zdW5nIFNvQyBTUEkgRHJpdmVyIGxvYWRlZCBmb3IgQnVzIFNQSS0lZCBcCi0JCQkJCXdpdGggJWQgU2xhdmVzIGF0dGFjaGVkXG4iLAorCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkICIKKwkJCQkJIndpdGggJWQgU2xhdmVzIGF0dGFjaGVkXG4iLAogCQkJCQlwZGV2LT5pZCwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdCk7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAiXHRJT21lbT1bMHgleC0weCV4XVwKLQkJCQkJXHRETUE9W1J4LSVkLCBUeC0lZF1cbiIsCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXHRJT21lbT1bMHgleC0weCV4XVx0RE1BPVtSeC0lZCwgVHgtJWRdXG4iLAogCQkJCQltZW1fcmVzLT5lbmQsIG1lbV9yZXMtPnN0YXJ0LAogCQkJCQlzZGQtPnJ4X2RtYWNoLCBzZGQtPnR4X2RtYWNoKTsKIApAQCAtMTA1MywxMSArMTA1MSw5IEBACiBlcnI4OgogCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKIGVycjc6Ci0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2Rpc2FibGUoc2NpLT5zcmNfY2xrKTsKKwljbGtfZGlzYWJsZShzZGQtPnNyY19jbGspOwogZXJyNjoKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisJY2xrX3B1dChzZGQtPnNyY19jbGspOwogZXJyNToKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiBlcnI0OgpAQCAtMTA3OCw3ICsxMDc0LDYgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTA5MywxMSArMTA4OCw4IEBACiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzZGQtPndvcmtxdWV1ZSk7CiAKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOwotCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX3B1dChzY2ktPnNyY19jbGspOworCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CisJY2xrX3B1dChzZGQtPnNyY19jbGspOwogCiAJY2xrX2Rpc2FibGUoc2RkLT5jbGspOwogCWNsa19wdXQoc2RkLT5jbGspOwpAQCAtMTEwNSw3ICsxMDk3LDggQEAKIAlpb3VubWFwKCh2b2lkICopIHNkZC0+cmVncyk7CiAKIAltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCWlmIChtZW1fcmVzICE9IE5VTEwpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwpAQCAtMTExOCw4ICsxMTExLDYgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOwpAQCAtMTEzMCw5ICsxMTIxLDcgQEAKIAkJbXNsZWVwKDEwKTsKIAogCS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2Rpc2FibGUoc2NpLT5zcmNfY2xrKTsKLQorCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CiAJY2xrX2Rpc2FibGUoc2RkLT5jbGspOwogCiAJc2RkLT5jdXJfc3BlZWQgPSAwOyAvKiBPdXRwdXQgQ2xvY2sgaXMgc3RvcHBlZCAqLwpAQCAtMTE0NCwxNSArMTEzMywxMyBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzY2ktPmNmZ19ncGlvKHBkZXYpOwogCiAJLyogRW5hYmxlIHRoZSBjbG9jayAqLwotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19lbmFibGUoc2NpLT5zcmNfY2xrKTsKLQorCWNsa19lbmFibGUoc2RkLT5zcmNfY2xrKTsKIAljbGtfZW5hYmxlKHNkZC0+Y2xrKTsKIAogCXMzYzY0eHhfc3BpX2h3aW5pdChzZGQsIHBkZXYtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggMzA5NzNlYy4uZDkzYjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKQEAgLTIwLDEyICsyMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NoX21zaW9mLmg+CiAKLSNpbmNsdWRlIDxhc20vc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3N0bXAuYyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKaW5kZXggMjU1MmJiMy4uZmFkZmY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3N0bXAuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCkBAIC03Niw3ICs3Niw3IEBACiAJCQlicmVhazsJCQkJCQlcCiAJCX0JCQkJCQkJXAogCQljcHVfcmVsYXgoKTsJCQkJCQlcCi0JfSB3aGlsZSAodGltZV9iZWZvcmUoZW5kX2ppZmZpZXMsIGppZmZpZXMpKTsJCQlcCisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX2ppZmZpZXMpKTsJCQlcCiAJc3VjY2VlZGVkOwkJCQkJCQlcCiAJfSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IDlmMzg2MzcuLjFiNDczNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTkzLDYgKzkzLDI2IEBACiAJdm9pZCAoKnJ4X2ZuKSAoc3RydWN0IHhpbGlueF9zcGkgKik7CiB9OwogCitzdGF0aWMgdm9pZCB4c3BpX3dyaXRlMzIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMih2YWwsIGFkZHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhzcGlfcmVhZDMyKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gaW9yZWFkMzIoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHhzcGlfd3JpdGUzMl9iZSh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4c3BpX3JlYWQzMl9iZSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIHhzcGlfdHg4KHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQogewogCXhzcGktPndyaXRlX2ZuKCp4c3BpLT50eF9wdHIsIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOwpAQCAtMzc0LDExICszOTQsMTEgQEAKIAl4c3BpLT5tZW0gPSAqbWVtOwogCXhzcGktPmlycSA9IGlycTsKIAlpZiAocGRhdGEtPmxpdHRsZV9lbmRpYW4pIHsKLQkJeHNwaS0+cmVhZF9mbiA9IGlvcmVhZDMyOwotCQl4c3BpLT53cml0ZV9mbiA9IGlvd3JpdGUzMjsKKwkJeHNwaS0+cmVhZF9mbiA9IHhzcGlfcmVhZDMyOworCQl4c3BpLT53cml0ZV9mbiA9IHhzcGlfd3JpdGUzMjsKIAl9IGVsc2UgewotCQl4c3BpLT5yZWFkX2ZuID0gaW9yZWFkMzJiZTsKLQkJeHNwaS0+d3JpdGVfZm4gPSBpb3dyaXRlMzJiZTsKKwkJeHNwaS0+cmVhZF9mbiA9IHhzcGlfcmVhZDMyX2JlOworCQl4c3BpLT53cml0ZV9mbiA9IHhzcGlfd3JpdGUzMl9iZTsKIAl9CiAJeHNwaS0+Yml0c19wZXJfd29yZCA9IHBkYXRhLT5iaXRzX3Blcl93b3JkOwogCWlmICh4c3BpLT5iaXRzX3Blcl93b3JkID09IDgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYwppbmRleCA3MWRjM2FkLi5lZDM0YThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCkBAIC05OSw3ICs5OSw3IEBACiAJcmV0dXJuIHhpbGlueF9zcGlfcmVtb3ZlKG9wKTsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X3NwaV9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X3NwaV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtc3BpLTIuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5iIiwgfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwppbmRleCA2NGFiZDExLi4zZDU1MTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwpAQCAtMzMyLDYgKzMzMiwxMiBAQAogCWNhc2UgMHg1MzU0OgogCQlzc2JfcG11MF9wbGxpbml0X3IwKGNjLCBjcnlzdGFsZnJlcSk7CiAJCWJyZWFrOworCWNhc2UgMHg0MzIyOgorCQlpZiAoY2MtPnBtdS5yZXYgPT0gMikgeworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0FERFIsIDB4MDAwMDAwMEEpOworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEsIDB4MzgwMDA1QzApOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCiAJCQkgICAiRVJST1I6IFBMTCBpbml0IHVua25vd24gZm9yIGRldmljZSAlMDRYXG4iLApAQCAtNDE3LDYgKzQyMyw3IEBACiAKIAlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgewogCWNhc2UgMHg0MzEyOgorCWNhc2UgMHg0MzIyOgogCQkvKiBXZSBrZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzOgogCQkgKiBtaW5fbXNrID0gMHhDQkIKIAkJICogbWF4X21zayA9IDB4N0ZGRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX21pcHNjb3JlLmMKaW5kZXggM2M2ZmVlZDQuLjk3ZWZjZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCkBAIC0yNzAsNyArMjcwLDYgQEAKIAkJCQlzZXRfaXJxKGRldiwgaXJxKyspOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFNTQl9ERVZfUENJOgogCQljYXNlIFNTQl9ERVZfRVRIRVJORVQ6CiAJCWNhc2UgU1NCX0RFVl9FVEhFUk5FVF9HQklUOgpAQCAtMjgxLDYgKzI4MCwxMCBAQAogCQkJCXNldF9pcnEoZGV2LCBpcnErKyk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFNTQl9ERVZfRVhUSUY6CisJCQlzZXRfaXJxKGRldiwgMCk7CisJCQlicmVhazsKIAkJfQogCX0KIAlzc2JfZHByaW50ayhLRVJOX0lORk8gUEZYICJhZnRlciBpcnEgcmVjb25maWd1cmF0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IDU2MDU0YmUuLjAzMzExMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTk2LDcgKzE5Niw3IEBACiAjaWZkZWYgQ09ORklHX1NTQl9CNDNfUENJX0JSSURHRQogZXh0ZXJuIGludCBfX2luaXQgYjQzX3BjaV9zc2JfYnJpZGdlX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2V4aXQgYjQzX3BjaV9zc2JfYnJpZGdlX2V4aXQodm9pZCk7Ci0jZWxzZSAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdSICovCisjZWxzZSAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFICovCiBzdGF0aWMgaW5saW5lIGludCBiNDNfcGNpX3NzYl9icmlkZ2VfaW5pdCh2b2lkKQogewogCXJldHVybiAwOwpAQCAtMjA0LDYgKzIwNCw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYjQzX3BjaV9zc2JfYnJpZGdlX2V4aXQodm9pZCkKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU1NCX1BDSUhPU1QgKi8KKyNlbmRpZiAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFICovCiAKICNlbmRpZiAvKiBMSU5VWF9TU0JfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FybGFuL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9hcmxhbi9hcmxhbi1tYWluLmMKaW5kZXggOTIxYTA4Mi4uODhmZGQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FybGFuL2FybGFuLW1haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4tbWFpbi5jCkBAIC0xNDU1LDEwICsxNDU1LDEwIEBACiAjaWZkZWYgQVJMQU5fTVVMVElDQVNUCiAJCQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJgogCQkJCSEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgotCQkJCWRldi0+bWNfbGlzdCkKKwkJCQkhbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCQl7CiAJCQkJY2hhciBod19kc3RfYWRkcls2XTsKLQkJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwkJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJCQlpbnQgaTsKIAogCQkJCW1lbWNweV9mcm9taW8oaHdfZHN0X2FkZHIsIGFybGFuLT51bHRpbWF0ZURlc3RBZGRyZXNzLCA2KTsKQEAgLTE0NjksMjAgKzE0NjksMTUgQEAKIAkJCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIG1jYXN0IDB4MDEwMCBcbiIsIGRldi0+bmFtZSk7CiAJCQkJCQllbHNlIGlmIChod19kc3RfYWRkclsxXSA9PSAweDQwKQogCQkJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgbS9iY2FzdCAweDAxNDAgXG4iLCBkZXYtPm5hbWUpOwotCQkJCQl3aGlsZSAoZG1pKQotCQkJCQl7Ci0JCQkJCQlpZiAoZG1pLT5kbWlfYWRkcmxlbiA9PSA2KSB7Ci0JCQkJCQkJaWYgKGFybGFuX2RlYnVnICYgQVJMQU5fREVCVUdfSEVBREVSX0RVTVApCi0JCQkJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgbWNsICVwTVxuIiwKLQkJCQkJCQkJICAgICAgIGRldi0+bmFtZSwgZG1pLT5kbWlfYWRkcik7Ci0JCQkJCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQkJCQkJaWYgKGRtaS0+ZG1pX2FkZHJbaV0gIT0gaHdfZHN0X2FkZHJbaV0pCi0JCQkJCQkJCQlicmVhazsKLQkJCQkJCQlpZiAoaSA9PSA2KQorCQkJCQluZXRkZXZfZm9yX2VhY2hfbWNfZW50cnkoZG1pLCBkZXYpIHsKKwkJCQkJCWlmIChhcmxhbl9kZWJ1ZyAmIEFSTEFOX0RFQlVHX0hFQURFUl9EVU1QKQorCQkJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgbWNsICVwTVxuIiwKKwkJCQkJCQkgICAgICAgZGV2LT5uYW1lLCBkbWktPmRtaV9hZGRyKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQkJCQkJaWYgKGRtaS0+ZG1pX2FkZHJbaV0gIT0gaHdfZHN0X2FkZHJbaV0pCiAJCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlCi0JCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGggZ2l2ZW4uXG4iLCBkZXYtPm5hbWUpOwotCQkJCQkJZG1pID0gZG1pLT5uZXh0OworCQkJCQkJaWYgKGkgPT0gNikKKwkJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQkvKiB3ZSByZWFjaCBoZXJlIGlmIG11bHRpY2FzdCBmaWx0ZXJpbmcgaXMgb24gYW5kIHBhY2tldCAKIAkJCQkJICogaXMgbXVsdGljYXN0IGFuZCBub3QgZm9yIHJlY2VpdmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKaW5kZXggMjRkOTdiNC4uZWRiNzhhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKQEAgLTQxMSw5ICs0MTEsOSBAQAogewogCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdWludDMyX3QgUGFja2V0RmlsdGVyID0gMDsKLQl1aW50MzJfdCBjb3VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gbmV0ZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPkxvY2ssIGZsYWdzKTsKIApAQCAtNDQ0LDExICs0NDQsMTEgQEAKIAkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwogCX0KIAotCWlmIChuZXRkZXYtPm1jX2NvdW50ID4gTklDX01BWF9NQ0FTVF9MSVNUKSB7CisJaWYgKG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gTklDX01BWF9NQ0FTVF9MSVNUKSB7CiAJCWFkYXB0ZXItPlBhY2tldEZpbHRlciB8PSBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKIAl9CiAKLQlpZiAobmV0ZGV2LT5tY19jb3VudCA8IDEpIHsKKwlpZiAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPCAxKSB7CiAJCWFkYXB0ZXItPlBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CiAJCWFkYXB0ZXItPlBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVDsKIAl9IGVsc2UgewpAQCAtNDU2LDEyICs0NTYsMTMgQEAKIAl9CiAKIAkvKiBTZXQgdmFsdWVzIGluIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0ICovCi0JYWRhcHRlci0+TUNBZGRyZXNzQ291bnQgPSBuZXRkZXYtPm1jX2NvdW50OwotCi0JaWYgKG5ldGRldi0+bWNfY291bnQpIHsKLQkJY291bnQgPSBuZXRkZXYtPm1jX2NvdW50IC0gMTsKLQkJbWVtY3B5KGFkYXB0ZXItPk1DTGlzdFtjb3VudF0sIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIG5ldGRldikgeworCQlpZiAoaSA9PSBOSUNfTUFYX01DQVNUX0xJU1QpCisJCQlicmVhazsKKwkJbWVtY3B5KGFkYXB0ZXItPk1DTGlzdFtpKytdLCBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJfQorCWFkYXB0ZXItPk1DQWRkcmVzc0NvdW50ID0gaTsKIAogCS8qIEFyZSB0aGUgbmV3IGZsYWdzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBvbmVzPyBJZiBub3QsIHRoZW4gbm8KIAkgKiBhY3Rpb24gaXMgcmVxdWlyZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwppbmRleCA4Y2Y3ZjI3Li5jMzI0ZjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKIAlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOwogCWludCByYzsKLQlpbnQgZGV2X2FkZHIgPSBjbGllbnQtPmFkZHI7CisJaW50IGRldl9hZGRyID0gY2xpZW50LT5hZGRyIDw8IDE7ICAvKiBmaXJtd2FyZSB3YW50cyA4LWJpdCBhZGRyZXNzICovCiAJdTggKmJ1ZjsKIAogCWlmIChnbyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggNjJiMjgyOC4uNDVkOTA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0zNjMsMTAgKzM2Myw3IEBACiAJYmxrZGV2LT5nZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShibGt2c2NfcmVxdWVzdCwgJmJsa2Rldi0+bG9jayk7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibGtkZXYtPmdkLT5xdWV1ZSwgUEFHRV9TSVpFKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxrZGV2LT5nZC0+cXVldWUsCi0JCQkJICAgIE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLAotCQkJCSAgTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlQpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoYmxrZGV2LT5nZC0+cXVldWUsIE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKTsKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShibGtkZXYtPmdkLT5xdWV1ZSwgUEFHRV9TSVpFLTEpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoYmxrZGV2LT5nZC0+cXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKIAlibGtfcXVldWVfZG1hX2FsaWdubWVudChibGtkZXYtPmdkLT5xdWV1ZSwgNTExKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL25ldHdhdmVfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL25ldHdhdmVfY3MuYwppbmRleCBlNjFlNmI5Li5lOTM2NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbmV0d2F2ZS9uZXR3YXZlX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL25ldHdhdmUvbmV0d2F2ZV9jcy5jCkBAIC0xMzQxLDE1ICsxMzQxLDE1IEBACiAjaWZkZWYgUENNQ0lBX0RFQlVHCiAgICAgewogCXhzdGF0aWMgaW50IG9sZDsKLQlpZiAob2xkICE9IGRldi0+bWNfY291bnQpIHsKLQkgICAgb2xkID0gZGV2LT5tY19jb3VudDsKKwlpZiAob2xkICE9IG5ldGRldl9tY19jb3VudChkZXYpKSB7CisJICAgIG9sZCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCSAgICBwcl9kZWJ1ZygiJXM6IHNldHRpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLAotCQkgIGRldi0+bmFtZSwgZGV2LT5tY19jb3VudCk7CisJCSAgZGV2LT5uYW1lLCBuZXRkZXZfbWNfY291bnQoZGV2KSk7CiAJfQogICAgIH0KICNlbmRpZgogCQotICAgIGlmIChkZXYtPm1jX2NvdW50IHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworICAgIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJLyogTXVsdGljYXN0IE1vZGUgKi8KIAlyY3ZNb2RlID0gcnhDb25mUnhFbmEgKyByeENvbmZBTVAgKyByeENvbmZCY2FzdDsKICAgICB9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vTWFrZWZpbGUKaW5kZXggYzBhNTgzYy4uODc0NDdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw2IEBACiBvY3Rlb24tZXRoZXJuZXQtb2JqcyA6PSBldGhlcm5ldC5vCiBvY3Rlb24tZXRoZXJuZXQtb2JqcyArPSBldGhlcm5ldC1tZGlvLm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LW1lbS5vCi1vY3Rlb24tZXRoZXJuZXQtb2JqcyArPSBldGhlcm5ldC1wcm9jLm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXJnbWlpLm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXJ4Lm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXNnbWlpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtZGVmaW5lcy5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1kZWZpbmVzLmgKaW5kZXggZjEzMTMxYjAuLjZhMmNkNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaApAQCAtNDEsMTcgKzQxLDEwIEBACiAgKiAgICAgIFRlbGxzIHRoZSBkcml2ZXIgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBidWZmZXJzIHdpdGgga2VybmVsIHNrYnVmZnMuCiAgKiAgICAgIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBwYWNrZXRzIHdpdGhvdXQgY29weWluZyB0aGVtLiBJdCBhbHNvCiAgKiAgICAgIG1lYW5zIHRoYXQgMzJiaXQgdXNlcnNwYWNlIGNhbid0IGFjY2VzcyB0aGUgcGFja2V0IGJ1ZmZlcnMuCi0gKiAgVVNFXzMyQklUX1NIQVJFRAotICogICAgICBUaGlzIGRlZmluZSB0ZWxscyB0aGUgZHJpdmVyIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmcm9tIHRoZQotICogICAgICAzMmJpdCBzYWhyZWQgcmVnaW9uIGluc3RlYWQgb2YgdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuCiAgKiAgVVNFX0hXX1RDUFVEUF9DSEVDS1NVTQogICogICAgICBDb250cm9scyBpZiB0aGUgT2N0ZW9uIFRDUC9VRFAgY2hlY2tzdW0gZW5naW5lIGlzIHVzZWQgZm9yIHBhY2tldAogICogICAgICBvdXRwdXQuIElmIHRoaXMgaXMgemVybywgdGhlIGtlcm5lbCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrc3VtIGluCiAgKiAgICAgIHNvZnR3YXJlLgotICogIFVTRV9NVUxUSUNPUkVfUkVDRUlWRQotICogICAgICBQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBjb3Jlcy4gVGhpcyBzcHJlYWRzIHRoZSBuZXR3b3JrCi0gKiAgICAgIGxvYWQgYWNyb3NzIHRoZSBmaXJzdCA4IHByb2Nlc3NvcnMuIElmIHRocyBpcyB6ZXJvLCBvbmx5IG9uZSBjb3JlCi0gKiAgICAgIHByb2Nlc3NlcyBpbmNvbW1pbmcgcGFja2V0cy4KICAqICBVU0VfQVNZTkNfSU9CRE1BCiAgKiAgICAgIFVzZSBhc3luY2hyb25vdXMgSU8gYWNjZXNzIHRvIGhhcmR3YXJlLiBUaGlzIHVzZXMgT2N0ZW9uJ3MgYXN5bmNocm9ub3VzCiAgKiAgICAgIElPQkRNQXMgdG8gaXNzdWUgSU8gYWNjZXNzZXMgd2l0aG91dCBzdGFsbGluZy4gU2V0IHRoaXMgdG8gemVybwpAQCAtNzUsMjkgKzY4LDE1IEBACiAjZGVmaW5lIENPTkZJR19DQVZJVU1fUkVTRVJWRTMyIDAKICNlbmRpZgogCi0jaWYgQ09ORklHX0NBVklVTV9SRVNFUlZFMzIKLSNkZWZpbmUgVVNFXzMyQklUX1NIQVJFRCAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNFX1NLQlVGRlNfSU5fSFcgICAgICAgICAgIDAKLSNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDAKLSNlbHNlCi0jZGVmaW5lIFVTRV8zMkJJVF9TSEFSRUQgICAgICAgICAgICAwCiAjZGVmaW5lIFVTRV9TS0JVRkZTX0lOX0hXICAgICAgICAgICAxCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogI2RlZmluZSBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAgMAogI2Vsc2UKICNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDEKICNlbmRpZgotI2VuZGlmCiAKLS8qIE1heCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgcGVyIGNvcmUgKi8KLSNkZWZpbmUgSU5URVJSVVBUX0xJTUlUICAgICAgICAgICAgIDEwMDAwCi0KLS8qIERvbid0IGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotLyojZGVmaW5lIElOVEVSUlVQVF9MSU1JVCAgICAgICAgICAgICAwICAgICAqLwogI2RlZmluZSBVU0VfSFdfVENQVURQX0NIRUNLU1VNICAgICAgMQogCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAgICAgICAxCi0KIC8qIEVuYWJsZSBSYW5kb20gRWFybHkgRHJvcHBpbmcgdW5kZXIgbG9hZCAqLwogI2RlZmluZSBVU0VfUkVEICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBVU0VfQVNZTkNfSU9CRE1BICAgICAgICAgICAgKENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFID4gMCkKQEAgLTExNSwyMSArOTQsMTIgQEAKIC8qIFVzZSB0aGlzIHRvIG5vdCBoYXZlIEZQQSBmcmVlcyBjb250cm9sIEwyICovCiAvKiNkZWZpbmUgRE9OVF9XUklURUJBQ0soeCkgICAgICAgICAwICAgKi8KIAotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBwcm9jZXNzIHBlciBpbnRlcnJ1cHQuICovCi0jZGVmaW5lIE1BWF9SWF9QQUNLRVRTIDEyMAogLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCi0jZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAxMAogI2RlZmluZSBNQVhfT1VUX1FVRVVFX0RFUFRIIDEwMDAKIAotI2lmbmRlZiBDT05GSUdfU01QCi0jdW5kZWYgVVNFX01VTFRJQ09SRV9SRUNFSVZFCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAwCi0jZW5kaWYKKyNkZWZpbmUgRkFVX1RPVEFMX1RYX1RPX0NMRUFOIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKKyNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChGQVVfVE9UQUxfVFhfVE9fQ0xFQU4gLSBzaXplb2YodWludDMyX3QpKQogCi0jZGVmaW5lIElQX1BST1RPQ09MX1RDUCAgICAgICAgICAgICA2Ci0jZGVmaW5lIElQX1BST1RPQ09MX1VEUCAgICAgICAgICAgICAweDExCi0KLSNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgVE9UQUxfTlVNQkVSX09GX1BPUlRTICAgICAgIChDVk1YX1BJUF9OVU1fSU5QVVRfUE9SVFMrMSkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCmluZGV4IDA1YTVjYzAuLjdlMGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCkBAIC05NiwxMSArOTYsMTEgQEAKIH07CiAKIC8qKgotICogSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKLSAqCisgKiBjdm1fb2N0X2lvY3RsIC0gSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKICAqIEBkZXY6ICAgIERldmljZSB0byBjaGFuZ2UKICAqIEBycTogICAgIHRoZSByZXF1ZXN0CiAgKiBAY21kOiAgICB0aGUgY29tbWFuZAorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCiAgKi8KIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogCiAvKioKLSAqIFNldHVwIHRoZSBQSFkKKyAqIGN2bV9vY3RfcGh5X3NldHVwX2RldmljZSAtIHNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDU1ZDA2MTRhLi5hNDE3ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1lbS5jCmluZGV4IGI1OTU5MDMuLjAwY2M5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI2LDggKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KIApAQCAtMzYsMTggKzM0LDE5IEBACiAjaW5jbHVkZSAiY3ZteC1mcGEuaCIKIAogLyoqCi0gKiBGaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwotICoKKyAqIGN2bV9vY3RfZmlsbF9od19za2J1ZmYgLSBmaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkLgogICovCiBzdGF0aWMgaW50IGN2bV9vY3RfZmlsbF9od19za2J1ZmYoaW50IHBvb2wsIGludCBzaXplLCBpbnQgZWxlbWVudHMpCiB7CiAJaW50IGZyZWVkID0gZWxlbWVudHM7CiAJd2hpbGUgKGZyZWVkKSB7CiAKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSArIDEyOCk7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyAyNTYpOwogCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CiAJCQlwcl93YXJuaW5nCiAJCQkgICAgKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciBoYXJkd2FyZSBwb29sICVkXG4iLApAQCAtNTUsNyArNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlza2JfcmVzZXJ2ZShza2IsIDEyOCAtICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAmIDB4N2YpKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyNTYgLSAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJiAweDdmKSk7CiAJCSooc3RydWN0IHNrX2J1ZmYgKiopKHNrYi0+ZGF0YSAtIHNpemVvZih2b2lkICopKSA9IHNrYjsKIAkJY3ZteF9mcGFfZnJlZShza2ItPmRhdGEsIHBvb2wsIERPTlRfV1JJVEVCQUNLKHNpemUgLyAxMjgpKTsKIAkJZnJlZWQtLTsKQEAgLTY0LDggKzYzLDcgQEAKIH0KIAogLyoqCi0gKiBGcmVlIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIG9mIHNrYnVmZnMKLSAqCisgKiBjdm1fb2N0X2ZyZWVfaHdfc2tidWZmLSBmcmVlIGhhcmR3YXJlIHBvb2wgc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKQEAgLTkzLDk2ICs5MSw3NiBAQAogfQogCiAvKioKLSAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBoYXJkd2FyZSBwb29sIHdpdGggbWVtb3J5LiBEZXBlbmRpbmcKLSAqIG9uIHRoZSBjb25maWcgZGVmaW5lcywgdGhpcyBtZW1vcnkgbWlnaHQgY29tZSBmcm9tIHRoZQotICoga2VybmVsIG9yIGdsb2JhbCAzMmJpdCBtZW1vcnkgYWxsb2NhdGVkIHdpdGgKLSAqIGN2bXhfYm9vdG1lbV9hbGxvYy4KLSAqCisgKiBjdm1fb2N0X2ZpbGxfaHdfbWVtb3J5IC0gZmlsbCBhIGhhcmR3YXJlIHBvb2wgd2l0aCBtZW1vcnkuCiAgKiBAcG9vbDogICAgIFBvb2wgdG8gcG9wdWxhdGUKICAqIEBzaXplOiAgICAgU2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiB0aGUgcG9vbAogICogQGVsZW1lbnRzOiBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgY3ZtX29jdF9maWxsX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKIAljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOwogCWludCBmcmVlZCA9IGVsZW1lbnRzOwogCi0JaWYgKFVTRV8zMkJJVF9TSEFSRUQpIHsKLQkJZXh0ZXJuIHVpbnQ2NF90IG9jdGVvbl9yZXNlcnZlMzJfbWVtb3J5OwotCi0JCW1lbW9yeSA9Ci0JCSAgICBjdm14X2Jvb3RtZW1fYWxsb2NfcmFuZ2UoZWxlbWVudHMgKiBzaXplLCAxMjgsCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnksCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnkgKwotCQkJCQkgICAgIChDT05GSUdfQ0FWSVVNX1JFU0VSVkUzMiA8PCAyMCkgLQotCQkJCQkgICAgIDEpOwotCQlpZiAobWVtb3J5ID09IE5VTEwpCi0JCQlwYW5pYygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciBGUEEgcG9vbCAlZFxuIiwKLQkJCSAgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0KLQkJcHJfbm90aWNlKCJNZW1vcnkgcmFuZ2UgJXAgLSAlcCByZXNlcnZlZCBmb3IgIgotCQkJICAiaGFyZHdhcmVcbiIsIG1lbW9yeSwKLQkJCSAgbWVtb3J5ICsgZWxlbWVudHMgKiBzaXplIC0gMSk7Ci0KLQkJd2hpbGUgKGZyZWVkKSB7Ci0JCQljdm14X2ZwYV9mcmVlKG1lbW9yeSwgcG9vbCwgMCk7Ci0JCQltZW1vcnkgKz0gc2l6ZTsKLQkJCWZyZWVkLS07CisJd2hpbGUgKGZyZWVkKSB7CisJCS8qCisJCSAqIEZQQSBtZW1vcnkgbXVzdCBiZSAxMjggYnl0ZSBhbGlnbmVkLiAgU2luY2Ugd2UgYXJlCisJCSAqIGFsaWduaW5nIHdlIG5lZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBzbyB3ZQorCQkgKiBjYW4gZmVlZCBpdCB0byBrZnJlZSB3aGVuIHRoZSBtZW1vcnkgaXMgcmV0dXJuZWQgdG8KKwkJICogdGhlIGtlcm5lbC4KKwkJICoKKwkJICogV2UgYWxsb2NhdGUgYW4gZXh0cmEgMjU2IGJ5dGVzIHRvIGFsbG93IGZvcgorCQkgKiBhbGlnbm1lbnQgYW5kIHNwYWNlIGZvciB0aGUgb3JpZ2luYWwgcG9pbnRlciBzYXZlZAorCQkgKiBqdXN0IGJlZm9yZSB0aGUgYmxvY2suCisJCSAqLworCQltZW1vcnkgPSBrbWFsbG9jKHNpemUgKyAyNTYsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gYWxsb2NhdGUgJXUgYnl0ZXMgZm9yIEZQQSBwb29sICVkXG4iLAorCQkJCSAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7CisJCQlicmVhazsKIAkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChmcmVlZCkgewotCQkJLyogV2UgbmVlZCB0byBmb3JjZSBhbGlnbm1lbnQgdG8gMTI4IGJ5dGVzIGhlcmUgKi8KLQkJCW1lbW9yeSA9IGttYWxsb2Moc2l6ZSArIDEyNywgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7Ci0JCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciAiCi0JCQkJCSAgICJGUEEgcG9vbCAlZFxuIiwKLQkJCQkgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1vcnkgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMTI3KSAmIC0xMjgpOwotCQkJY3ZteF9mcGFfZnJlZShtZW1vcnksIHBvb2wsIDApOwotCQkJZnJlZWQtLTsKLQkJfQorCQlmcGEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMjU2KSAmIH4weDdmVUwpOworCQkqKChjaGFyICoqKWZwYSAtIDEpID0gbWVtb3J5OworCQljdm14X2ZwYV9mcmVlKGZwYSwgcG9vbCwgMCk7CisJCWZyZWVkLS07CiAJfQogCXJldHVybiBlbGVtZW50cyAtIGZyZWVkOwogfQogCiAvKioKLSAqIEZyZWUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggY3ZtX29jdF9maWxsX2h3X21lbW9yeQotICoKKyAqIGN2bV9vY3RfZnJlZV9od19tZW1vcnkgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgY3ZtX29jdF9maWxsX2h3X21lbW9yeQogICogQHBvb2w6ICAgICBGUEEgcG9vbCB0byBmcmVlCiAgKiBAc2l6ZTogICAgIFNpemUgb2YgZWFjaCBidWZmZXIgaW4gdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wKICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9mcmVlX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKLQlpZiAoVVNFXzMyQklUX1NIQVJFRCkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiAzMiBzaGFyZWQgbWVtb3J5IGlzIG5vdCBmcmVlYWJsZVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hhciAqbWVtb3J5OwotCQlkbyB7Ci0JCQltZW1vcnkgPSBjdm14X2ZwYV9hbGxvYyhwb29sKTsKLQkJCWlmIChtZW1vcnkpIHsKLQkJCQllbGVtZW50cy0tOwotCQkJCWtmcmVlKHBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKG1lbW9yeSkpKTsKLQkJCX0KLQkJfSB3aGlsZSAobWVtb3J5KTsKKwljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOworCWRvIHsKKwkJZnBhID0gY3ZteF9mcGFfYWxsb2MocG9vbCk7CisJCWlmIChmcGEpIHsKKwkJCWVsZW1lbnRzLS07CisJCQlmcGEgPSAoY2hhciAqKXBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKGZwYSkpOworCQkJbWVtb3J5ID0gKigoY2hhciAqKilmcGEgLSAxKTsKKwkJCWtmcmVlKG1lbW9yeSk7CisJCX0KKwl9IHdoaWxlIChmcGEpOwogCi0JCWlmIChlbGVtZW50cyA8IDApCi0JCQlwcl93YXJuaW5nKCJGcmVlaW5nIG9mIHBvb2wgJXUgaGFkIHRvbyBtYW55ICIKLQkJCQkgICAiYnVmZmVycyAoJWQpXG4iLAotCQkJICAgICAgIHBvb2wsIGVsZW1lbnRzKTsKLQkJZWxzZSBpZiAoZWxlbWVudHMgPiAwKQotCQkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzICIKLQkJCQkibWlzc2luZyAlZCBidWZmZXJzXG4iLAotCQkJICAgICBwb29sLCBlbGVtZW50cyk7Ci0JfQorCWlmIChlbGVtZW50cyA8IDApCisJCXByX3dhcm5pbmcoIkZyZWVpbmcgb2YgcG9vbCAldSBoYWQgdG9vIG1hbnkgYnVmZmVycyAoJWQpXG4iLAorCQkJcG9vbCwgZWxlbWVudHMpOworCWVsc2UgaWYgKGVsZW1lbnRzID4gMCkKKwkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzIG1pc3NpbmcgJWQgYnVmZmVyc1xuIiwKKwkJCXBvb2wsIGVsZW1lbnRzKTsKIH0KIAogaW50IGN2bV9vY3RfbWVtX2ZpbGxfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewogCWludCBmcmVlZDsKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpCisJaWYgKFVTRV9TS0JVRkZTX0lOX0hXICYmIHBvb2wgPT0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0wpCiAJCWZyZWVkID0gY3ZtX29jdF9maWxsX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQlmcmVlZCA9IGN2bV9vY3RfZmlsbF9od19tZW1vcnkocG9vbCwgc2l6ZSwgZWxlbWVudHMpOwpAQCAtMTkxLDcgKzE2OSw3IEBACiAKIHZvaWQgY3ZtX29jdF9tZW1fZW1wdHlfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewotCWlmIChVU0VfU0tCVUZGU19JTl9IVykKKwlpZiAoVVNFX1NLQlVGRlNfSU5fSFcgJiYgcG9vbCA9PSBDVk1YX0ZQQV9QQUNLRVRfUE9PTCkKIAkJY3ZtX29jdF9mcmVlX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQljdm1fb2N0X2ZyZWVfaHdfbWVtb3J5KHBvb2wsIHNpemUsIGVsZW1lbnRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzA4ZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxuZXQvZHN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgotCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCi0jaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgotCi0jaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKLSNpbmNsdWRlICJjdm14LXBpcC5oIgotCi0vKioKLSAqIFVzZXIgaXMgcmVhZGluZyAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMKLSAqCi0gKiBAbToKLSAqIEB2OgotICogUmV0dXJucwotICovCi1zdGF0aWMgaW50IGN2bV9vY3Rfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlpbnQgcG9ydDsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9OVU1CRVJfT0ZfUE9SVFM7IHBvcnQrKykgewotCi0JCWlmIChjdm1fb2N0X2RldmljZVtwb3J0XSkgewotCQkJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCQkJc2VxX3ByaW50ZihtLCAiXG5PY3Rlb24gUG9ydCAlZCAoJXMpXG4iLCBwb3J0LAotCQkJCSAgIGN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uYW1lKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfYnl0ZXMsIHByaXYtPnN0YXRzLnR4X2J5dGVzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZHJvcHBlZCk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2xlbmd0aF9lcnJvcnM6ICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Fib3J0ZWRfZXJyb3JzOiAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9vdmVyX2Vycm9yczogICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9jYXJyaWVyX2Vycm9yczogICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2NyY19lcnJvcnM6ICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9mcmFtZV9lcnJvcnM6ICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9oZWFydGJlYXRfZXJyb3JzOiAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X3dpbmRvd19lcnJvcnM6ICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9taXNzZWRfZXJyb3JzOiAgICAgICAlMTJsdVx0IgotCQkJCSAgICJtdWx0aWNhc3Q6ICAgICAgICAgICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLm11bHRpY2FzdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMgd2FzIG9wZW5uZWQuIFVzZSB0aGUgc2luZ2xlX29wZW4gaXRlcmF0b3IKLSAqCi0gKiBAaW5vZGU6Ci0gKiBAZmlsZToKLSAqIFJldHVybnMKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGN2bV9vY3Rfc3RhdHNfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN2bV9vY3Rfc3RhdHNfb3BlcmF0aW9ucyA9IHsKLQkub3BlbiA9IGN2bV9vY3Rfc3RhdHNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX2luaXRpYWxpemUodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIDAsIE5VTEwpOwotCWlmIChlbnRyeSkKLQkJZW50cnktPnByb2NfZm9wcyA9ICZjdm1fb2N0X3N0YXRzX29wZXJhdGlvbnM7Ci19Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX3NodXRkb3duKHZvaWQpCi17Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjN2Q5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGN2bV9vY3RfcHJvY19pbml0aWFsaXplKHZvaWQpOwotdm9pZCBjdm1fb2N0X3Byb2Nfc2h1dGRvd24odm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggMzgyMGYxZS4uYTBkNGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMjYsNyArMjYsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtNDgsMTQgKzQ4LDIwIEBACiBzdGF0aWMgdm9pZCBjdm1fb2N0X3JnbWlpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWN2bXhfaGVscGVyX2xpbmtfaW5mb190IGxpbmtfaW5mbzsKKwlpbnQgdXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrID0gKHByaXYtPnBoeWRldiA9PSBOVUxMKTsKIAotCS8qCi0JICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHRvdWNoCi0JICogcmVnaXN0ZXJzIHRoYXQgYWZmZWN0IG1vcmUgdGhhbiBvbmUgcG9ydC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICh1c2VfZ2xvYmFsX3JlZ2lzdGVyX2xvY2spIHsKKwkJLyoKKwkJICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvCisJCSAqIHRvdWNoIHJlZ2lzdGVycyB0aGF0IGFmZmVjdCBtb3JlIHRoYW4gb25lIHBvcnQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2dldChwcml2LT5wb3J0KTsKIAlpZiAobGlua19pbmZvLnU2NCA9PSBwcml2LT5saW5rX2luZm8pIHsKQEAgLTExNSw3ICsxMjEsMTEgQEAKIAkJCQkgICAgIGRldi0+bmFtZSk7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwkJZWxzZQorCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTUxLDcgKzE2MSwxMiBAQAogCQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwogCQlwcml2LT5saW5rX2luZm8gPSBsaW5rX2luZm8udTY0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnbG9iYWxfcmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKHVzZV9nbG9iYWxfcmVnaXN0ZXJfbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwllbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKIAkJLyogVGVsbCBjb3JlLiAqLwpAQCAtMjEzLDggKzIyOCwxMSBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQogCQkJCSAgICBjdm1fb2N0X2RldmljZVtjdm14X2hlbHBlcl9nZXRfaXBkX3BvcnQKIAkJCQkJCSAgIChpbnRlcmZhY2UsIGluZGV4KV07Ci0JCQkJaWYgKGRldikKLQkJCQkJY3ZtX29jdF9yZ21paV9wb2xsKGRldik7CisJCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkJCQlpZiAoZGV2ICYmICFhdG9taWNfcmVhZCgmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKSkKKwkJCQkJcXVldWVfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3dvcmspOworCiAJCQkJZ214X3J4X2ludF9yZWcudTY0ID0gMDsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9kdXB4ID0gMTsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9saW5rID0gMTsKQEAgLTI1Miw4ICsyNzAsMTEgQEAKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KIAkJCQkgICAgY3ZtX29jdF9kZXZpY2VbY3ZteF9oZWxwZXJfZ2V0X2lwZF9wb3J0CiAJCQkJCQkgICAoaW50ZXJmYWNlLCBpbmRleCldOwotCQkJCWlmIChkZXYpCi0JCQkJCWN2bV9vY3RfcmdtaWlfcG9sbChkZXYpOworCQkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCQkJaWYgKGRldiAmJiAhYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCQkJCXF1ZXVlX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLCAmcHJpdi0+cG9ydF93b3JrKTsKKwogCQkJCWdteF9yeF9pbnRfcmVnLnU2NCA9IDA7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfZHVweCA9IDE7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfbGluayA9IDE7CkBAIC0zMDIsNiArMzIzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcmdtaWlfaW1tZWRpYXRlX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9jdGVvbl9ldGhlcm5ldCwgcG9ydF93b3JrKTsKKwljdm1fb2N0X3JnbWlpX3BvbGwoY3ZtX29jdF9kZXZpY2VbcHJpdi0+cG9ydF0pOworfQorCiBpbnQgY3ZtX29jdF9yZ21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDksNyArMzM2LDcgQEAKIAogCWN2bV9vY3RfY29tbW9uX2luaXQoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKGRldik7Ci0KKwlJTklUX1dPUksoJnByaXYtPnBvcnRfd29yaywgY3ZtX29jdF9yZ21paV9pbW1lZGlhdGVfcG9sbCk7CiAJLyoKIAkgKiBEdWUgdG8gR01YIGVycmF0YSBpbiBDTjNYWFggc2VyaWVzIGNoaXBzLCBpdCBpcyBuZWNlc3NhcnkKIAkgKiB0byB0YWtlIHRoZSBsaW5rIGRvd24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgUEhZIGNoYW5nZXMKQEAgLTM5Nyw0ICs0MjQsNSBAQAogCW51bWJlcl9yZ21paV9wb3J0cy0tOwogCWlmIChudW1iZXJfcmdtaWlfcG9ydHMgPT0gMCkKIAkJZnJlZV9pcnEoT0NURU9OX0lSUV9STUwsICZudW1iZXJfcmdtaWlfcG9ydHMpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBvcnRfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMKaW5kZXggMWIyMzdiNy4uY2IzOGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI3LDE2ICsyNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2lmZGVmIENPTkZJR19YRlJNCiAjaW5jbHVkZSA8bGludXgveGZybS5oPgpAQCAtNDgsOCArNDYsOSBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CiAKICNpbmNsdWRlICJldGhlcm5ldC1kZWZpbmVzLmgiCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWVtLmgiCisjaW5jbHVkZSAiZXRoZXJuZXQtcnguaCIKKyNpbmNsdWRlICJvY3Rlb24tZXRoZXJuZXQuaCIKICNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgpAQCAtNjEsNjIgKzYwLDg4IEBACiAKICNpbmNsdWRlICJjdm14LWdteHgtZGVmcy5oIgogCi1zdHJ1Y3QgY3ZtX3Rhc2tsZXRfd3JhcHBlciB7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHQ7Ci19Oworc3RydWN0IGN2bV9uYXBpX3dyYXBwZXIgeworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCi0vKgotICogQWxpZ25pbmcgdGhlIHRhc2tsZXRfc3RydWN0IG9uIGNhY2hsaW5lIGJvdW5kcmllcyBzZWVtcyB0byBkZWNyZWFzZQotICogdGhyb3VnaHB1dCBldmVuIHRob3VnaCBpbiB0aGVvcnkgaXQgd291bGQgcmVkdWNlIGNvbnRhbnRpb24gb24gdGhlCi0gKiBjYWNoZSBsaW5lcyBjb250YWluaW5nIHRoZSBsb2Nrcy4KLSAqLworc3RhdGljIHN0cnVjdCBjdm1fbmFwaV93cmFwcGVyIGN2bV9vY3RfbmFwaVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAotc3RhdGljIHN0cnVjdCBjdm1fdGFza2xldF93cmFwcGVyIGN2bV9vY3RfdGFza2xldFtOUl9DUFVTXTsKK3N0cnVjdCBjdm1fb2N0X2NvcmVfc3RhdGUgeworCWludCBiYXNlbGluZV9jb3JlczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb3JlcyB0aGF0IGNvdWxkIGJlIHByb2Nlc3NpbmcKKwkgKiBpbnB1dCBwYWNrdGVzLgorCSAqLworCWF0b21pY190IGF2YWlsYWJsZV9jb3JlczsKKwljcHVtYXNrX3QgY3B1X3N0YXRlOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgc3RydWN0IGN2bV9vY3RfY29yZV9zdGF0ZSBjb3JlX3N0YXRlIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgdm9pZCBjdm1fb2N0X2VuYWJsZV9uYXBpKHZvaWQgKl8pCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwluYXBpX3NjaGVkdWxlKCZjdm1fb2N0X25hcGlbY3B1XS5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgY3ZtX29jdF9lbmFibGVfb25lX2NwdSh2b2lkKQoreworCWludCB2OworCWludCBjcHU7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBDUFVzIGFyZSBhdmFpbGFibGUgZm9yIHJlY2VpdmUgcHJvY2Vzc2luZy4uLiAqLworCXYgPSBhdG9taWNfc3ViX2lmX3Bvc2l0aXZlKDEsICZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisJaWYgKHYgPCAwKQorCQlyZXR1cm47CisKKwkvKiAuLi4gaWYgYSBDUFUgaXMgYXZhaWxhYmxlLCBUdXJuIG9uIE5BUEkgcG9sbGluZyBmb3IgdGhhdCBDUFUuICAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNvcmVfc3RhdGUuY3B1X3N0YXRlKSkgeworCQkJdiA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGN2bV9vY3RfZW5hYmxlX25hcGksCisJCQkJCQkgICAgIE5VTEwsIDApOworCQkJaWYgKHYpCisJCQkJcGFuaWMoIkNhbid0IGVuYWJsZSBOQVBJLiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN2bV9vY3Rfbm9fbW9yZV93b3JrKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogQ1BVIHplcm8gaXMgc3BlY2lhbC4gIEl0IGFsd2F5cyBoYXMgdGhlIGlycSBlbmFibGVkIHdoZW4KKwkgKiB3YWl0aW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLgorCSAqLworCWlmIChjcHUgPT0gMCkgeworCQllbmFibGVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXApOworCQlyZXR1cm47CisJfQorCisJY3B1X2NsZWFyKGNwdSwgY29yZV9zdGF0ZS5jcHVfc3RhdGUpOworCWF0b21pY19hZGQoMSwgJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzKTsKK30KIAogLyoqCi0gKiBJbnRlcnJ1cHQgaGFuZGxlci4gVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVwotICogdHJhbnNpdGlvbnMgZnJvbSAwLT4xIHBhY2tldHMgaW4gb3VyIGdyb3VwLgorICogY3ZtX29jdF9kb19pbnRlcnJ1cHQgLSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCi0gKiBAY3BsOgotICogQGRldl9pZDoKLSAqIEByZWdzOgotICogUmV0dXJucworICogVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVyBoYXMgcGFja2V0cyBpbiBvdXIgZ3JvdXAuCisgKgogICovCi1pcnFyZXR1cm5fdCBjdm1fb2N0X2RvX2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF9kb19pbnRlcnJ1cHQoaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQlpZiAoSU5URVJSVVBUX0xJTUlUKQotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlQsIDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwotCWVsc2UKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCAweDEwMDAxIDw8IHBvd19yZWNlaXZlX2dyb3VwKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3Rhc2tsZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXS50KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCS8qIERpc2FibGUgdGhlIElSUSBhbmQgc3RhcnQgbmFwaV9wb2xsLiAqLworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKwljdm1fb2N0X2VuYWJsZV9uYXBpKE5VTEwpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIG1hbnVhbGx5IHBvbGwgdGhlCi0gKiBkZXZpY2UuIEZvciBPY3Rlb24sIHRoaXMgaXMgc2ltcGx5IGNhbGxpbmcgdGhlIGludGVycnVwdAotICogaGFuZGxlci4gV2UgYWN0dWFsbHkgcG9sbCBhbGwgdGhlIGRldmljZXMsIG5vdCBqdXN0IHRoZQotICogb25lIHN1cHBsaWVkLgotICoKLSAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKLSAqLwotdm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmN2bV9vY3RfdGFza2xldFtzbXBfcHJvY2Vzc29yX2lkKCldLnQpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBUaGlzIGlzIGNhbGxlZCBvbiByZWNlaXZlIGVycm9ycywgYW5kIGRldGVybWluZXMgaWYgdGhlIHBhY2tldAotICogY2FuIGJlIGRyb3BwZWQgZWFybHktb24gaW4gY3ZtX29jdF90YXNrbGV0X3J4KCkuCi0gKgorICogY3ZtX29jdF9jaGVja19yY3ZfZXJyb3IgLSBwcm9jZXNzIHJlY2VpdmUgZXJyb3JzCiAgKiBAd29yazogV29yayBxdWV1ZSBlbnRyeSBwb2ludGluZyB0byB0aGUgcGFja2V0LgorICoKICAqIFJldHVybnMgTm9uLXplcm8gaWYgdGhlIHBhY2tldCBjYW4gYmUgZHJvcHBlZCwgemVybyBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKGN2bXhfd3FlX3QgKndvcmspCkBAIC0xOTksMTkgKzIyNCwyMCBAQAogfQogCiAvKioKLSAqIFRhc2tsZXQgZnVuY3Rpb24gdGhhdCBpcyBzY2hlZHVsZWQgb24gYSBjb3JlIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKyAqIGN2bV9vY3RfbmFwaV9wb2xsIC0gdGhlIE5BUEkgcG9sbCBmdW5jdGlvbi4KKyAqIEBuYXBpOiBUaGUgTkFQSSBpbnN0YW5jZSwgb3IgbnVsbCBpZiBjYWxsZWQgZnJvbSBjdm1fb2N0X3BvbGxfY29udHJvbGxlcgorICogQGJ1ZGdldDogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byByZWNlaXZlLgogICoKLSAqIEB1bnVzZWQ6CisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBwcm9jZXNzZWQuCiAgKi8KLXZvaWQgY3ZtX29jdF90YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgdW51c2VkKQorc3RhdGljIGludCBjdm1fb2N0X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0JY29uc3QgaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JdWludDY0X3Qgb2xkX2dyb3VwX21hc2s7Ci0JdWludDY0X3Qgb2xkX3NjcmF0Y2g7Ci0JaW50IHJ4X2NvdW50ID0gMDsKLQlpbnQgbnVtYmVyX3RvX2ZyZWU7Ci0JaW50IG51bV9mcmVlZDsKLQlpbnQgcGFja2V0X25vdF9jb3BpZWQ7CisJY29uc3QgaW50CWNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJdWludDY0X3QJb2xkX2dyb3VwX21hc2s7CisJdWludDY0X3QJb2xkX3NjcmF0Y2g7CisJaW50CQlyeF9jb3VudCA9IDA7CisJaW50CQlkaWRfd29ya19yZXF1ZXN0ID0gMDsKKwlpbnQJCXBhY2tldF9ub3RfY29waWVkOwogCiAJLyogUHJlZmV0Y2ggY3ZtX29jdF9kZXZpY2Ugc2luY2Ugd2Uga25vdyB3ZSBuZWVkIGl0IHNvb24gKi8KIAlwcmVmZXRjaChjdm1fb2N0X2RldmljZSk7CkBAIC0yMjcsNTkgKzI1Myw2MyBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1BQX0dSUF9NU0tYKGNvcmVpZCksCiAJCSAgICAgICAob2xkX2dyb3VwX21hc2sgJiB+MHhGRkZGdWxsKSB8IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwogCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpCisJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKIAkJY3ZteF9wb3dfd29ya19yZXF1ZXN0X2FzeW5jKENWTVhfU0NSX1NDUkFUQ0gsIENWTVhfUE9XX05PX1dBSVQpOworCQlkaWRfd29ya19yZXF1ZXN0ID0gMTsKKwl9CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChyeF9jb3VudCA8IGJ1ZGdldCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwkJc3RydWN0IHNrX2J1ZmYgKipwc2tiID0gTlVMTDsKIAkJaW50IHNrYl9pbl9odzsKIAkJY3ZteF93cWVfdCAqd29yazsKIAotCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSAmJiBkaWRfd29ya19yZXF1ZXN0KQogCQkJd29yayA9IGN2bXhfcG93X3dvcmtfcmVzcG9uc2VfYXN5bmMoQ1ZNWF9TQ1JfU0NSQVRDSCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKElOVEVSUlVQVF9MSU1JVCA9PSAwKQotCQkJICAgIHx8IGxpa2VseShyeF9jb3VudCA8IE1BWF9SWF9QQUNLRVRTKSkKLQkJCQl3b3JrID0KLQkJCQkgICAgY3ZteF9wb3dfd29ya19yZXF1ZXN0X3N5bmMKLQkJCQkgICAgKENWTVhfUE9XX05PX1dBSVQpOwotCQkJZWxzZQotCQkJCXdvcmsgPSBOVUxMOwotCQl9CisJCWVsc2UKKwkJCXdvcmsgPSBjdm14X3Bvd193b3JrX3JlcXVlc3Rfc3luYyhDVk1YX1BPV19OT19XQUlUKTsKKwogCQlwcmVmZXRjaCh3b3JrKTsKLQkJaWYgKHdvcmsgPT0gTlVMTCkKKwkJZGlkX3dvcmtfcmVxdWVzdCA9IDA7CisJCWlmICh3b3JrID09IE5VTEwpIHsKKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludCB3cV9pbnQ7CisJCQl3cV9pbnQudTY0ID0gMDsKKwkJCXdxX2ludC5zLmlxX2RpcyA9IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXA7CisJCQl3cV9pbnQucy53cV9pbnQgPSAxIDw8IHBvd19yZWNlaXZlX2dyb3VwOworCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCB3cV9pbnQudTY0KTsKIAkJCWJyZWFrOworCQl9CisJCXBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiopKGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIod29yay0+cGFja2V0X3B0cikgLSBzaXplb2Yodm9pZCAqKSk7CisJCXByZWZldGNoKHBza2IpOwogCi0JCS8qCi0JCSAqIExpbWl0IGVhY2ggY29yZSB0byBwcm9jZXNzaW5nIE1BWF9SWF9QQUNLRVRTCi0JCSAqIHBhY2tldHMgd2l0aG91dCBhIGJyZWFrLiAgVGhpcyB3YXkgdGhlIFJYIGNhbid0Ci0JCSAqIHN0YXJ2ZSB0aGUgVFggdGFzay4KLQkJICovCi0JCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CisJCWlmIChVU0VfQVNZTkNfSU9CRE1BICYmIHJ4X2NvdW50IDwgKGJ1ZGdldCAtIDEpKSB7CisJCQljdm14X3Bvd193b3JrX3JlcXVlc3RfYXN5bmNfbm9jaGVjayhDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKKwkJCWRpZF93b3JrX3JlcXVlc3QgPSAxOworCQl9CiAKLQkJCWlmICgoSU5URVJSVVBUX0xJTUlUID09IDApCi0JCQkgICAgfHwgbGlrZWx5KHJ4X2NvdW50IDwgTUFYX1JYX1BBQ0tFVFMpKQotCQkJCWN2bXhfcG93X3dvcmtfcmVxdWVzdF9hc3luY19ub2NoZWNrCi0JCQkJICAgIChDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKLQkJCWVsc2UgewotCQkJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsCi0JCQkJCQkgICAgIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCk7Ci0JCQkJY3ZteF9wb3dfdGFnX3N3X251bGxfbm9jaGVjaygpOwotCQkJfQorCQlpZiAocnhfY291bnQgPT0gMCkgeworCQkJLyoKKwkJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc2VlIGlmIHRoZXJlIGlzIGVub3VnaAorCQkJICogd29yayB3YWl0aW5nIHRvIG1lcml0IHdha2luZyBhbm90aGVyCisJCQkgKiBDUFUuCisJCQkgKi8KKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludF9jbnR4IGNvdW50czsKKwkJCWludCBiYWNrbG9nOworCQkJaW50IGNvcmVzX2luX3VzZSA9IGNvcmVfc3RhdGUuYmFzZWxpbmVfY29yZXMgLSBhdG9taWNfcmVhZCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMpOworCQkJY291bnRzLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QT1dfV1FfSU5UX0NOVFgocG93X3JlY2VpdmVfZ3JvdXApKTsKKwkJCWJhY2tsb2cgPSBjb3VudHMucy5pcV9jbnQgKyBjb3VudHMucy5kc19jbnQ7CisJCQlpZiAoYmFja2xvZyA+IGJ1ZGdldCAqIGNvcmVzX2luX3VzZSAmJiBuYXBpICE9IE5VTEwpCisJCQkJY3ZtX29jdF9lbmFibGVfb25lX2NwdSgpOwogCQl9CiAKIAkJc2tiX2luX2h3ID0gVVNFX1NLQlVGRlNfSU5fSFcgJiYgd29yay0+d29yZDIucy5idWZzID09IDE7CiAJCWlmIChsaWtlbHkoc2tiX2luX2h3KSkgewotCQkJc2tiID0KLQkJCSAgICAqKHN0cnVjdCBza19idWZmCi0JCQkgICAgICAqKikoY3ZtX29jdF9nZXRfYnVmZmVyX3B0cih3b3JrLT5wYWNrZXRfcHRyKSAtCi0JCQkJICBzaXplb2Yodm9pZCAqKSk7CisJCQlza2IgPSAqcHNrYjsKIAkJCXByZWZldGNoKCZza2ItPmhlYWQpOwogCQkJcHJlZmV0Y2goJnNrYi0+bGVuKTsKIAkJfQogCQlwcmVmZXRjaChjdm1fb2N0X2RldmljZVt3b3JrLT5pcHBydF0pOwogCi0JCXJ4X2NvdW50Kys7CiAJCS8qIEltbWVkaWF0ZWx5IHRocm93IGF3YXkgYWxsIHBhY2tldHMgd2l0aCByZWNlaXZlIGVycm9ycyAqLwogCQlpZiAodW5saWtlbHkod29yay0+d29yZDIuc25vaXAucmN2X2Vycm9yKSkgewogCQkJaWYgKGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKHdvcmspKQpAQCAtMjkyLDM5ICszMjIsMjcgQEAKIAkJICogYnVmZmVyLgogCQkgKi8KIAkJaWYgKGxpa2VseShza2JfaW5faHcpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBjYWxjdWxhdGlvbiB3YXMgY2hhbmdlZCBpbiBjYXNlIHRoZQotCQkJICogc2tiIGhlYWRlciBpcyB1c2luZyBhIGRpZmZlcmVudCBhZGRyZXNzCi0JCQkgKiBhbGlhc2luZyB0eXBlIHRoYW4gdGhlIGJ1ZmZlci4gSXQgZG9lc24ndAotCQkJICogbWFrZSBhbnkgZGlmZmVybmVjZSBub3csIGJ1dCB0aGUgbmV3IG9uZSBpcwotCQkJICogbW9yZSBjb3JyZWN0LgotCQkJICovCi0JCQlza2ItPmRhdGEgPQotCQkJICAgIHNrYi0+aGVhZCArIHdvcmstPnBhY2tldF9wdHIucy5hZGRyIC0KLQkJCSAgICBjdm14X3B0cl90b19waHlzKHNrYi0+aGVhZCk7CisJCQlza2ItPmRhdGEgPSBza2ItPmhlYWQgKyB3b3JrLT5wYWNrZXRfcHRyLnMuYWRkciAtIGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5oZWFkKTsKIAkJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCQlza2ItPmxlbiA9IHdvcmstPmxlbjsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgc2tiLT5sZW4pOwogCQkJcGFja2V0X25vdF9jb3BpZWQgPSAxOwogCQl9IGVsc2UgewotCiAJCQkvKgogCQkJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBwYWNrZXQuIEZpcnN0IGFsbG9jYXRlCiAJCQkgKiBhbiBza2J1ZmYgZm9yIGl0LgogCQkJICovCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHdvcmstPmxlbik7CiAJCQlpZiAoIXNrYikgewotCQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgZmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCQkJICAgInNrYnVmZiwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgICB3b3JrLT5pcHBydCk7CisJCQkJREVCVUdQUklOVCgiUG9ydCAlZCBmYWlsZWQgdG8gYWxsb2NhdGUgc2tidWZmLCBwYWNrZXQgZHJvcHBlZFxuIiwKKwkJCQkJICAgd29yay0+aXBwcnQpOwogCQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKgogCQkJICogQ2hlY2sgaWYgd2UndmUgcmVjZWl2ZWQgYSBwYWNrZXQgdGhhdCB3YXMKLQkJCSAqIGVudGlyZWx5IHN0b3JlZCBpbiB0aGUgd29yayBlbnRyeS4gVGhpcyBpcwotCQkJICogdW50ZXN0ZWQuCisJCQkgKiBlbnRpcmVseSBzdG9yZWQgaW4gdGhlIHdvcmsgZW50cnkuCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLmJ1ZnMgPT0gMCkpIHsKIAkJCQl1aW50OF90ICpwdHIgPSB3b3JrLT5wYWNrZXRfZGF0YTsKQEAgLTM0MywxNSArMzYxLDEzIEBACiAJCQkJLyogTm8gcGFja2V0IGJ1ZmZlcnMgdG8gZnJlZSAqLwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgc2VnbWVudHMgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JCQkJdW5pb24gY3ZteF9idWZfcHRyIHNlZ21lbnRfcHRyID0KLQkJCQkJd29yay0+cGFja2V0X3B0cjsKKwkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgc2VnbWVudF9wdHIgPSB3b3JrLT5wYWNrZXRfcHRyOwogCQkJCWludCBsZW4gPSB3b3JrLT5sZW47CiAKIAkJCQl3aGlsZSAoc2VnbWVudHMtLSkgewogCQkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgbmV4dF9wdHIgPQotCQkJCQkgICAgKih1bmlvbiBjdm14X2J1Zl9wdHIgKikKLQkJCQkJICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy4KLQkJCQkJCQkgICAgIGFkZHIgLSA4KTsKKwkJCQkJICAgICoodW5pb24gY3ZteF9idWZfcHRyICopY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLmFkZHIgLSA4KTsKKwogCQkJLyoKIAkJCSAqIE9jdGVvbiBFcnJhdGEgUEtJLTEwMDogVGhlIHNlZ21lbnQgc2l6ZSBpcwogCQkJICogd3JvbmcuIFVudGlsIGl0IGlzIGZpeGVkLCBjYWxjdWxhdGUgdGhlCkBAIC0zNjEsMjIgKzM3NywxOCBAQAogCQkJICogb25lOiBpbnQgc2VnbWVudF9zaXplID0KIAkJCSAqIHNlZ21lbnRfcHRyLnMuc2l6ZTsKIAkJCSAqLwotCQkJCQlpbnQgc2VnbWVudF9zaXplID0KLQkJCQkJICAgIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUgLQotCQkJCQkgICAgKHNlZ21lbnRfcHRyLnMuYWRkciAtCi0JCQkJCSAgICAgKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0KLQkJCQkJICAgICAgIHNlZ21lbnRfcHRyLnMuYmFjaykgPDwgNykpOwotCQkJCQkvKiBEb24ndCBjb3B5IG1vcmUgdGhhbiB3aGF0IGlzIGxlZnQKLQkJCQkJICAgaW4gdGhlIHBhY2tldCAqLworCQkJCQlpbnQgc2VnbWVudF9zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSAtCisJCQkJCQkoc2VnbWVudF9wdHIucy5hZGRyIC0gKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0gc2VnbWVudF9wdHIucy5iYWNrKSA8PCA3KSk7CisJCQkJCS8qCisJCQkJCSAqIERvbid0IGNvcHkgbW9yZSB0aGFuIHdoYXQKKwkJCQkJICogaXMgbGVmdCBpbiB0aGUgcGFja2V0LgorCQkJCQkgKi8KIAkJCQkJaWYgKHNlZ21lbnRfc2l6ZSA+IGxlbikKIAkJCQkJCXNlZ21lbnRfc2l6ZSA9IGxlbjsKIAkJCQkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWNrZXQgKi8KIAkJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzZWdtZW50X3NpemUpLAotCQkJCQkgICAgICAgY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLgotCQkJCQkJCQlhZGRyKSwKKwkJCQkJICAgICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy5hZGRyKSwKIAkJCQkJICAgICAgIHNlZ21lbnRfc2l6ZSk7Ci0JCQkJCS8qIFJlZHVjZSB0aGUgYW1vdW50IG9mIGJ5dGVzIGxlZnQKLQkJCQkJICAgdG8gY29weSAqLwogCQkJCQlsZW4gLT0gc2VnbWVudF9zaXplOwogCQkJCQlzZWdtZW50X3B0ciA9IG5leHRfcHRyOwogCQkJCX0KQEAgLTM4OSwxNiArNDAxLDE1IEBACiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2Vbd29yay0+aXBwcnRdOwogCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJCS8qIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMKLQkJCSAgIHRoYXQgYXJlIGN1cnJlbnRseSB1cCAqLworCQkJLyoKKwkJCSAqIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMgdGhhdCBhcmUKKwkJCSAqIGN1cnJlbnRseSB1cC4KKwkJCSAqLwogCQkJaWYgKGxpa2VseShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CiAKLQkJCQlpZiAodW5saWtlbHkKLQkJCQkgICAgKHdvcmstPndvcmQyLnMubm90X0lQCi0JCQkJICAgICB8fCB3b3JrLT53b3JkMi5zLklQX2V4YwotCQkJCSAgICAgfHwgd29yay0+d29yZDIucy5MNF9lcnJvcikpCisJCQkJaWYgKHVubGlrZWx5KHdvcmstPndvcmQyLnMubm90X0lQIHx8IHdvcmstPndvcmQyLnMuSVBfZXhjIHx8IHdvcmstPndvcmQyLnMuTDRfZXJyb3IpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQkJZWxzZQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtNDE0LDE1ICs0MjUsMTMgQEAKICNlbmRpZgogCQkJCX0KIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJCXJ4X2NvdW50Kys7CiAJCQl9IGVsc2UgeworCQkJCS8qIERyb3AgYW55IHBhY2tldCByZWNlaXZlZCBmb3IgYSBkZXZpY2UgdGhhdCBpc24ndCB1cCAqLwogCQkJCS8qCi0JCQkJICogRHJvcCBhbnkgcGFja2V0IHJlY2VpdmVkIGZvciBhCi0JCQkJICogZGV2aWNlIHRoYXQgaXNuJ3QgdXAuCi0JCQkJICovCi0JCQkJLyoKLQkJCQkgICBERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKLQkJCQkgKi8KKwkJCQlERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCisJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQlhdG9taWM2NF9hZGQoMSwgKGF0b21pYzY0X3QgKikmcHJpdi0+c3RhdHMucnhfZHJvcHBlZCk7CiAjZWxzZQpAQCAtNDM1LDkgKzQ0NCw4IEBACiAJCQkgKiBEcm9wIGFueSBwYWNrZXQgcmVjZWl2ZWQgZm9yIGEgZGV2aWNlIHRoYXQKIAkJCSAqIGRvZXNuJ3QgZXhpc3QuCiAJCQkgKi8KLQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCAiCi0JCQkJICAgImRyb3BwZWRcbiIsCi0JCQkgICAgIHdvcmstPmlwcHJ0KTsKKwkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCBkcm9wcGVkXG4iLAorCQkJCSAgIHdvcmstPmlwcHJ0KTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAkJLyoKQEAgLTQ1OSw0NyArNDY3LDkzIEBACiAJCQljdm1fb2N0X2ZyZWVfd29yayh3b3JrKTsKIAkJfQogCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFBPVyBncm91cCBtYXNrICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfUFBfR1JQX01TS1goY29yZWlkKSwgb2xkX2dyb3VwX21hc2spOwogCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CiAJCS8qIFJlc3RvcmUgdGhlIHNjcmF0Y2ggYXJlYSAqLwogCQljdm14X3NjcmF0Y2hfd3JpdGU2NChDVk1YX1NDUl9TQ1JBVENILCBvbGRfc2NyYXRjaCk7CiAJfQorCWN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woMCk7CiAKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpIHsKLQkJLyogUmVmaWxsIHRoZSBwYWNrZXQgYnVmZmVyIHBvb2wgKi8KLQkJbnVtYmVyX3RvX2ZyZWUgPQotCQkgICAgY3ZteF9mYXVfZmV0Y2hfYW5kX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwgMCk7Ci0KLQkJaWYgKG51bWJlcl90b19mcmVlID4gMCkgewotCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwKLQkJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKLQkJCW51bV9mcmVlZCA9Ci0JCQkgICAgY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCi0JCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKLQkJCQkJCSBudW1iZXJfdG9fZnJlZSk7Ci0JCQlpZiAobnVtX2ZyZWVkICE9IG51bWJlcl90b19mcmVlKSB7Ci0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCi0JCQkJICAgICBudW1iZXJfdG9fZnJlZSAtIG51bV9mcmVlZCk7Ci0JCQl9Ci0JCX0KKwlpZiAocnhfY291bnQgPCBidWRnZXQgJiYgbmFwaSAhPSBOVUxMKSB7CisJCS8qIE5vIG1vcmUgd29yayAqLworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQljdm1fb2N0X25vX21vcmVfd29yaygpOwogCX0KKwlyZXR1cm4gcnhfY291bnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoqCisgKiBjdm1fb2N0X3BvbGxfY29udHJvbGxlciAtIHBvbGwgZm9yIHJlY2VpdmUgcGFja2V0cworICogZGV2aWNlLgorICoKKyAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKKyAqLwordm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWN2bV9vY3RfbmFwaV9wb2xsKE5VTEwsIDE2KTsKK30KKyNlbmRpZgorCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKQogewogCWludCBpOwotCS8qIEluaXRpYWxpemUgYWxsIG9mIHRoZSB0YXNrbGV0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCXRhc2tsZXRfaW5pdCgmY3ZtX29jdF90YXNrbGV0W2ldLnQsIGN2bV9vY3RfdGFza2xldF9yeCwgMCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9mb3JfbmFwaSA9IE5VTEw7CisJdW5pb24gY3ZteF9wb3dfd3FfaW50X3RocnggaW50X3RocjsKKwl1bmlvbiBjdm14X3Bvd193cV9pbnRfcGMgaW50X3BjOworCisJZm9yIChpID0gMDsgaSA8IFRPVEFMX05VTUJFUl9PRl9QT1JUUzsgaSsrKSB7CisJCWlmIChjdm1fb2N0X2RldmljZVtpXSkgeworCQkJZGV2X2Zvcl9uYXBpID0gY3ZtX29jdF9kZXZpY2VbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldl9mb3JfbmFwaSkKKwkJcGFuaWMoIk5vIG5ldF9kZXZpY2VzIHdlcmUgYWxsb2NhdGVkLiIpOworCisJaWYgKG1heF9yeF9jcHVzID4gMSAgJiYgbWF4X3J4X2NwdXMgPCBudW1fb25saW5lX2NwdXMoKSkKKwkJYXRvbWljX3NldCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMsIG1heF9yeF9jcHVzKTsKKwllbHNlCisJCWF0b21pY19zZXQoJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzLCBudW1fb25saW5lX2NwdXMoKSk7CisJY29yZV9zdGF0ZS5iYXNlbGluZV9jb3JlcyA9IGF0b21pY19yZWFkKCZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisKKwljb3JlX3N0YXRlLmNwdV9zdGF0ZSA9IENQVV9NQVNLX05PTkU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJbmV0aWZfbmFwaV9hZGQoZGV2X2Zvcl9uYXBpLCAmY3ZtX29jdF9uYXBpW2ldLm5hcGksCisJCQkgICAgICAgY3ZtX29jdF9uYXBpX3BvbGwsIHJ4X25hcGlfd2VpZ2h0KTsKKwkJbmFwaV9lbmFibGUoJmN2bV9vY3RfbmFwaVtpXS5uYXBpKTsKKwl9CisJLyogUmVnaXN0ZXIgYW4gSVJRIGhhbmRlciBmb3IgdG8gcmVjZWl2ZSBQT1cgaW50ZXJydXB0cyAqLworCWkgPSByZXF1ZXN0X2lycShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAorCQkJY3ZtX29jdF9kb19pbnRlcnJ1cHQsIDAsICJFdGhlcm5ldCIsIGN2bV9vY3RfZGV2aWNlKTsKKworCWlmIChpKQorCQlwYW5pYygiQ291bGQgbm90IGFjcXVpcmUgRXRoZXJuZXQgSVJRICVkXG4iLAorCQkgICAgICBPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWludF90aHIudTY0ID0gMDsKKwlpbnRfdGhyLnMudGNfZW4gPSAxOworCWludF90aHIucy50Y190aHIgPSAxOworCS8qIEVuYWJsZSBQT1cgaW50ZXJydXB0IHdoZW4gb3VyIHBvcnQgaGFzIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksIGludF90aHIudTY0KTsKKworCWludF9wYy51NjQgPSAwOworCWludF9wYy5zLnBjX3RociA9IDU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLCBpbnRfcGMudTY0KTsKKworCisJLyogU2NoZWR1bGQgTkFQSSBub3cuICBUaGlzIHdpbGwgaW5kaXJlY3RseSBlbmFibGUgaW50ZXJydXB0cy4gKi8KKwljdm1fb2N0X2VuYWJsZV9vbmVfY3B1KCk7CiB9CiAKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKQogewogCWludCBpOwotCS8qIFNodXRkb3duIGFsbCBvZiB0aGUgdGFza2xldHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQl0YXNrbGV0X2tpbGwoJmN2bV9vY3RfdGFza2xldFtpXS50KTsKKwkvKiBTaHV0ZG93biBhbGwgb2YgdGhlIE5BUElzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCW5ldGlmX25hcGlfZGVsKCZjdm1fb2N0X25hcGlbaV0ubmFwaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmgKaW5kZXggYTliNzJiOC4uYTA3NDNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguaApAQCAtMjQsMTAgKzI0LDI5IEBACiAgKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCiAgKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN2bXgtZmF1LmgiCiAKLWlycXJldHVybl90IGN2bV9vY3RfZG9faW50ZXJydXB0KGludCBjcGwsIHZvaWQgKmRldl9pZCk7CiB2b2lkIGN2bV9vY3RfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBjdm1fb2N0X3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKTsKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woaW50IGZpbGxfdGhyZXNob2xkKQoreworCWludCBudW1iZXJfdG9fZnJlZTsKKwlpbnQgbnVtX2ZyZWVkOworCS8qIFJlZmlsbCB0aGUgcGFja2V0IGJ1ZmZlciBwb29sICovCisJbnVtYmVyX3RvX2ZyZWUgPQorCQljdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKKworCWlmIChudW1iZXJfdG9fZnJlZSA+IGZpbGxfdGhyZXNob2xkKSB7CisJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKKwkJbnVtX2ZyZWVkID0gY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCisJCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKKwkJCQkJCSBudW1iZXJfdG9fZnJlZSk7CisJCWlmIChudW1fZnJlZWQgIT0gbnVtYmVyX3RvX2ZyZWUpIHsKKwkJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJCW51bWJlcl90b19mcmVlIC0gbnVtX2ZyZWVkKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCA2MDYxZDAxLi4yZDg1ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0yNiw3ICsyNiw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwppbmRleCAwMGRjMGY0Li5iNThiODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYwppbmRleCA1MzUyOTQxLi5hZmMyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBDYXZpdW0gTmV0d29ya3MKICAqCiAgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcwpAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpZmRlZiBDT05GSUdfWEZSTQogI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KQEAgLTUyLDExICs0OCwxNCBAQAogCiAjaW5jbHVkZSAiY3ZteC13cWUuaCIKICNpbmNsdWRlICJjdm14LWZhdS5oIgorI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgogCiAjaW5jbHVkZSAiY3ZteC1nbXh4LWRlZnMuaCIKIAorI2RlZmluZSBDVk1fT0NUX1NLQl9DQihza2IpCSgodTY0ICopKChza2IpLT5jYikpCisKIC8qCiAgKiBZb3UgY2FuIGRlZmluZSBHRVRfU0tCVUZGX1FPUygpIHRvIG92ZXJyaWRlIGhvdyB0aGUgc2tidWZmIG91dHB1dAogICogZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGljaCBvdXRwdXQgcXVldWUgaXMgdXNlZC4gVGhlIGRlZmF1bHQKQEAgLTY4LDEyICs2Nyw4MSBAQAogI2RlZmluZSBHRVRfU0tCVUZGX1FPUyhza2IpIDAKICNlbmRpZgogCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIERFQ0xBUkVfVEFTS0xFVChjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCwgY3ZtX29jdF90eF9kb19jbGVhbnVwLCAwKTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCisjZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAoTUFYX09VVF9RVUVVRV9ERVBUSCAqIDIpCisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBjdm1fb2N0X2FkanVzdF9za2JfdG9fZnJlZShpbnQzMl90IHNrYl90b19mcmVlLCBpbnQgZmF1KQoreworCWludDMyX3QgdW5kbzsKKwl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8gTUFYX1NLQl9UT19GUkVFIDogc2tiX3RvX2ZyZWUgKyBNQVhfU0tCX1RPX0ZSRUU7CisJaWYgKHVuZG8gPiAwKQorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoZmF1LCAtdW5kbyk7CisJc2tiX3RvX2ZyZWUgPSAtc2tiX3RvX2ZyZWUgPiBNQVhfU0tCX1RPX0ZSRUUgPyBNQVhfU0tCX1RPX0ZSRUUgOiAtc2tiX3RvX2ZyZWU7CisJcmV0dXJuIHNrYl90b19mcmVlOworfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X2tpY2tfdHhfcG9sbF93YXRjaGRvZyh2b2lkKQoreworCXVuaW9uIGN2bXhfY2l1X3RpbXggY2l1X3RpbXg7CisJY2l1X3RpbXgudTY0ID0gMDsKKwljaXVfdGlteC5zLm9uZV9zaG90ID0gMTsKKwljaXVfdGlteC5zLmxlbiA9IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCBjaXVfdGlteC51NjQpOworfQorCit2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50MzJfdCBza2JfdG9fZnJlZTsKKwlpbnQgcW9zLCBxdWV1ZXNfcGVyX3BvcnQ7CisJaW50IHRvdGFsX2ZyZWVkID0gMDsKKwlpbnQgdG90YWxfcmVtYWluaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcXVldWVzX3Blcl9wb3J0ID0gY3ZteF9wa29fZ2V0X251bV9xdWV1ZXMocHJpdi0+cG9ydCk7CisJLyogRHJhaW4gYW55IHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgZnJlZSBsaXN0ICovCisJZm9yIChxb3MgPSAwOyBxb3MgPCBxdWV1ZXNfcGVyX3BvcnQ7IHFvcysrKSB7CisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUrcW9zKjQsIE1BWF9TS0JfVE9fRlJFRSk7CisJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdStxb3MqNCk7CisKKworCQl0b3RhbF9mcmVlZCArPSBza2JfdG9fZnJlZTsKKwkJaWYgKHNrYl90b19mcmVlID4gMCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRvX2ZyZWVfbGlzdCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJd2hpbGUgKHNrYl90b19mcmVlID4gMCkgeworCQkJCXN0cnVjdCBza19idWZmICp0ID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOworCQkJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdDsKKwkJCQlza2JfdG9fZnJlZS0tOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJCQl3aGlsZSAodG9fZnJlZV9saXN0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQkJCWRldl9rZnJlZV9za2JfYW55KHQpOworCQkJfQorCQl9CisJCXRvdGFsX3JlbWFpbmluZyArPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJfQorCWlmICh0b3RhbF9mcmVlZCA+PSAwICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWlmICh0b3RhbF9yZW1haW5pbmcpCisJCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7Cit9CisKIC8qKgotICogUGFja2V0IHRyYW5zbWl0Ci0gKgorICogY3ZtX29jdF94bWl0IC0gdHJhbnNtaXQgYSBwYWNrZXQKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKLSAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgemVybworICoKKyAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgTkVUREVWX1RYX09LCiAgKi8KIGludCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTgxLDEzICsxNDksMTUgQEAKIAl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoMjsKLQlpbnQgZHJvcHBlZDsKIAlpbnQgcW9zOwotCWludCBxdWV1ZV9pdF91cDsKKwlpbnQgaTsKKwllbnVtIHtRVUVVRV9DT1JFLCBRVUVVRV9IVywgUVVFVUVfRFJPUH0gcXVldWVfdHlwZTsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG9fZnJlZV9saXN0OwogCWludDMyX3Qgc2tiX3RvX2ZyZWU7Ci0JaW50MzJfdCB1bmRvOwogCWludDMyX3QgYnVmZmVyc190b19mcmVlOworCXUzMiB0b3RhbF90b19jbGVhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmIFJFVVNFX1NLQlVGRlNfV0lUSE9VVF9GUkVFCiAJdW5zaWduZWQgY2hhciAqZnBhX2hlYWQ7CiAjZW5kaWYKQEAgLTk4LDkgKzE2OCw2IEBACiAJICovCiAJcHJlZmV0Y2gocHJpdik7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCiAJLyoKIAkgKiBUaGUgY2hlY2sgb24gQ1ZNWF9QS09fUVVFVUVTX1BFUl9QT1JUXyogaXMgZGVzaWduZWQgdG8KIAkgKiBjb21wbGV0ZWx5IHJlbW92ZSAicW9zIiBpbiB0aGUgZXZlbnQgbmVpdGhlciBpbnRlcmZhY2UKQEAgLTEzNSw2ICsyMDIsMjggQEAKIAl9CiAKIAkvKgorCSAqIFdlIGhhdmUgc3BhY2UgZm9yIDYgc2VnbWVudCBwb2ludGVycywgSWYgdGhlcmUgd2lsbCBiZSBtb3JlCisJICogdGhhbiB0aGF0LCB3ZSBtdXN0IGxpbmVhcml6ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDUpKSB7CisJCWlmICh1bmxpa2VseShfX3NrYl9saW5lYXJpemUoc2tiKSkpIHsKKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlDVk1YX1NZTkNJT0JETUE7CisJCQkJc2tiX3RvX2ZyZWUgPSBjdm14X3NjcmF0Y2hfcmVhZDY0KENWTVhfU0NSX1NDUkFUQ0gpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUgKyBxb3MgKiA0LAorCQkJCQkJCQkgICAgICAgTUFYX1NLQl9UT19GUkVFKTsKKwkJCX0KKwkJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdSArIHFvcyAqIDQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gc2tpcF94bWl0OworCQl9CisJfQorCisJLyoKIAkgKiBUaGUgQ04zWFhYIHNlcmllcyBvZiBwYXJ0cyBoYXMgYW4gZXJyYXRhIChHTVgtNDAxKSB3aGljaAogCSAqIGNhdXNlcyB0aGUgR01YIGJsb2NrIHRvIGhhbmcgaWYgYSBjb2xsaXNpb24gb2NjdXJzIHRvd2FyZHMKIAkgKiB0aGUgZW5kIG9mIGEgPDY4IGJ5dGUgcGFja2V0LiBBcyBhIHdvcmthcm91bmQgZm9yIHRoaXMsIHdlCkBAIC0xNjIsMTMgKzI1MSw2IEBACiAJCX0KIAl9CiAKLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5kYXRhKTsKLQlod19idWZmZXIucy5wb29sID0gMDsKLQlod19idWZmZXIucy5zaXplID0KLQkgICAgKHVuc2lnbmVkIGxvbmcpc2tiX2VuZF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgbG9uZylza2ItPmhlYWQ7Ci0KIAkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KIAlwa29fY29tbWFuZC51NjQgPSAwOwogCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwpAQCAtMTc4LDcgKzI2MCwzMSBAQAogCXBrb19jb21tYW5kLnMuc3Vib25lMCA9IDE7CiAKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUgKyBxb3MgKiA0OworCisJLyogQnVpbGQgdGhlIFBLTyBidWZmZXIgcG9pbnRlciAqLworCWh3X2J1ZmZlci51NjQgPSAwOworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpc2tiLT5kYXRhKTsKKwkJaHdfYnVmZmVyLnMucG9vbCA9IDA7CisJCWh3X2J1ZmZlci5zLnNpemUgPSBza2ItPmxlbjsKKwl9IGVsc2UgeworCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClza2ItPmRhdGEpOworCQlod19idWZmZXIucy5wb29sID0gMDsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYik7CisJCUNWTV9PQ1RfU0tCX0NCKHNrYilbMF0gPSBod19idWZmZXIudTY0OworCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKyBpOworCQkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpKHBhZ2VfYWRkcmVzcyhmcy0+cGFnZSkgKyBmcy0+cGFnZV9vZmZzZXQpKTsKKwkJCWh3X2J1ZmZlci5zLnNpemUgPSBmcy0+c2l6ZTsKKwkJCUNWTV9PQ1RfU0tCX0NCKHNrYilbaSArIDFdID0gaHdfYnVmZmVyLnU2NDsKKwkJfQorCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClDVk1fT0NUX1NLQl9DQihza2IpKTsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCQlwa29fY29tbWFuZC5zLnNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKwkJcGtvX2NvbW1hbmQucy5nYXRoZXIgPSAxOworCQlnb3RvIGRvbnRfcHV0X3NrYnVmZl9pbl9odzsKKwl9CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4gcHV0IHRoaXMgc2tiIGluIHRoZSBGUEEgcG9vbC4gQW55IHN0cmFuZ2UKIAkgKiBiZWhhdmlvciBmcm9tIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHdpbGwgbW9zdCBsaWtlbHkKQEAgLTE5MCw3ICsyOTYsNyBAQAogCSAqIHNob3duIGEgMjUlIGluY3JlYXNlIGluIHBlcmZvcm1hbmNlIHVuZGVyIHNvbWUgbG9hZHMuCiAJICovCiAjaWYgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUKLQlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDEyOCAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKKwlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDI1NiAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKIAlpZiAodW5saWtlbHkoc2tiLT5kYXRhIDwgZnBhX2hlYWQpKSB7CiAJCS8qCiAJCSAqIHByaW50aygiVFggYnVmZmVyIGJlZ2lubmluZyBjYW4ndCBtZWV0IEZQQQpAQCAtMjQ4LDEwICszNTQsOSBAQAogCSAqIFdlIGNhbiB1c2UgdGhpcyBidWZmZXIgaW4gdGhlIEZQQS4gIFdlIGRvbid0IG5lZWQgdGhlIEZBVQogCSAqIHVwZGF0ZSBhbnltb3JlCiAJICovCi0JcGtvX2NvbW1hbmQucy5yZWcwID0gMDsKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMDsKIAotCWh3X2J1ZmZlci5zLmJhY2sgPSAoc2tiLT5kYXRhIC0gZnBhX2hlYWQpID4+IDc7CisJaHdfYnVmZmVyLnMuYmFjayA9ICgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgPj4gNykgLSAoKHVuc2lnbmVkIGxvbmcpZnBhX2hlYWQgPj4gNyk7CiAJKihzdHJ1Y3Qgc2tfYnVmZiAqKikoZnBhX2hlYWQgLSBzaXplb2Yodm9pZCAqKSkgPSBza2I7CiAKIAkvKgpAQCAtMjcyLDE2ICszNzcsMTYgQEAKIAlza2ItPnRjX3ZlcmQgPSAwOwogI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLwogI2VuZGlmIC8qIENPTkZJR19ORVRfU0NIRUQgKi8KKyNlbmRpZiAvKiBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAqLwogCiBkb250X3B1dF9za2J1ZmZfaW5faHc6Ci0jZW5kaWYgLyogUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgKi8KIAogCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwogCWlmIChVU0VfSFdfVENQVURQX0NIRUNLU1VNICYmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgJiYKIAkgICAgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpICYmIChpcF9oZHIoc2tiKS0+aWhsID09IDUpICYmCiAJICAgICgoaXBfaGRyKHNrYiktPmZyYWdfb2ZmID09IDApIHx8IChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgPT0gMSA8PCAxNCkpCi0JICAgICYmICgoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1RDUCkKLQkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9VRFApKSkgeworCSAgICAmJiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpKSB7CiAJCS8qIFVzZSBoYXJkd2FyZSBjaGVja3N1bSBjYWxjICovCiAJCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDE7CiAJfQpAQCAtMjk5LDg5ICs0MDQsMTE2IEBACiAJCSAgICBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKIAl9CiAKLQkvKgotCSAqIFdlIHRyeSB0byBjbGFpbSBNQVhfU0tCX1RPX0ZSRUUgYnVmZmVycy4gIElmIHRoZXJlIHdlcmUgbm90Ci0JICogdGhhdCBtYW55IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byB1bi1jbGFpbSAodW5kbykgYW55IHRoYXQKLQkgKiB3ZXJlIGluIGV4Y2Vzcy4gIElmIHNrYl90b19mcmVlIGlzIHBvc2l0aXZlIHdlIHdpbGwgZnJlZQotCSAqIHRoYXQgbWFueSBidWZmZXJzLgotCSAqLwotCXVuZG8gPSBza2JfdG9fZnJlZSA+IDAgPwotCQlNQVhfU0tCX1RPX0ZSRUUgOiBza2JfdG9fZnJlZSArIE1BWF9TS0JfVE9fRlJFRTsKLQlpZiAodW5kbyA+IDApCi0JCWN2bXhfZmF1X2F0b21pY19hZGQzMihwcml2LT5mYXUrcW9zKjQsIC11bmRvKTsKLQlza2JfdG9fZnJlZSA9IC1za2JfdG9fZnJlZSA+IE1BWF9TS0JfVE9fRlJFRSA/Ci0JCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKKwlza2JfdG9fZnJlZSA9IGN2bV9vY3RfYWRqdXN0X3NrYl90b19mcmVlKHNrYl90b19mcmVlLCBwcml2LT5mYXUrcW9zKjQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBzZW5kaW5nIGZhc3RlciB0aGFuIHRoZSByZWNlaXZlIGNhbiBmcmVlIHRoZW0gdGhlbgogCSAqIGRvbid0IGRvIHRoZSBIVyBmcmVlLgogCSAqLwotCWlmICgoYnVmZmVyc190b19mcmVlIDwgLTEwMCkgJiYgIXBrb19jb21tYW5kLnMuZG9udGZyZWUpIHsKKwlpZiAoKGJ1ZmZlcnNfdG9fZnJlZSA8IC0xMDApICYmICFwa29fY29tbWFuZC5zLmRvbnRmcmVlKQogCQlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQkJcGtvX2NvbW1hbmQucy5yZWcwID0gcHJpdi0+ZmF1ICsgcW9zICogNDsKLQl9CiAKLQljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAotCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpOworCWlmIChwa29fY29tbWFuZC5zLmRvbnRmcmVlKSB7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9DT1JFOworCQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUrcW9zKjQ7CisJfSBlbHNlIHsKKwkJcXVldWVfdHlwZSA9IFFVRVVFX0hXOworCX0KKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkKKwkJY3ZteF9mYXVfYXN5bmNfZmV0Y2hfYW5kX2FkZDMyKENWTVhfU0NSX1NDUkFUQ0gsIEZBVV9UT1RBTF9UWF9UT19DTEVBTiwgMSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOwogCiAJLyogRHJvcCB0aGlzIHBhY2tldCBpZiB3ZSBoYXZlIHRvbyBtYW55IGFscmVhZHkgcXVldWVkIHRvIHRoZSBIVyAqLwotCWlmICh1bmxpa2VseQotCSAgICAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7Ci0JCS8qCi0JCSAgIERFQlVHUFJJTlQoIiVzOiBUeCBkcm9wcGVkLiBUb28gbWFueSBxdWV1ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCSAqLwotCQlkcm9wcGVkID0gMTsKLQl9Ci0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQllbHNlIGlmICh1bmxpa2VseQotCQkgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCQkgIChwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSArIHFvcywgcGtvX2NvbW1hbmQsIGh3X2J1ZmZlciwKLQkJICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpKSkgewotCQlERUJVR1BSSU5UKCIlczogRmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJZHJvcHBlZCA9IDE7Ci0JfQotCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKLQkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCi0JCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKLQkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7Ci0JfQotCi0JcXVldWVfaXRfdXAgPSAwOwotCWlmICh1bmxpa2VseShkcm9wcGVkKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJaWYgKFVTRV9TS0JVRkZTX0lOX0hXKSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlpZiAocGtvX2NvbW1hbmQucy5kb250ZnJlZSkKLQkJCQlxdWV1ZV9pdF91cCA9IDE7Ci0JCQllbHNlCi0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIC0xKTsKKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7CisJCWlmIChkZXYtPnR4X3F1ZXVlX2xlbiAhPSAwKSB7CisJCQkvKiBEcm9wIHRoZSBsb2NrIHdoZW4gbm90aWZ5aW5nIHRoZSBjb3JlLiAgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlxdWV1ZV9pdF91cCA9IDE7CisJCQkvKiBJZiBub3QgdXNpbmcgbm9ybWFsIHF1ZXVlaW5nLiAgKi8KKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJZ290byBza2lwX3htaXQ7CiAJCX0KIAl9CiAKLQlpZiAocXVldWVfaXRfdXApIHsKLQkJc3Bpbl9sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKKwljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19OT05FKTsKKworCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgb3V0cHV0IHF1ZXVlICovCisJaWYgKHVubGlrZWx5KGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaChwcml2LT5wb3J0LAorCQkJCQkJIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCQkJIHBrb19jb21tYW5kLCBod19idWZmZXIsCisJCQkJCQkgQ1ZNWF9QS09fTE9DS19OT05FKSkpIHsKKwkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCX0KK3NraXBfeG1pdDoKKwl0b19mcmVlX2xpc3QgPSBOVUxMOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVUVVRV9EUk9QOgorCQlza2ItPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHNrYjsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlicmVhazsKKwljYXNlIFFVRVVFX0hXOgorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAtMSk7CisJCWJyZWFrOworCWNhc2UgUVVFVUVfQ09SRToKIAkJX19za2JfcXVldWVfdGFpbCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10sIHNrYik7Ci0JCWN2bV9vY3RfZnJlZV90eF9za2JzKHByaXYsIHNrYl90b19mcmVlLCBxb3MsIDApOwotCQlzcGluX3VubG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JfSBlbHNlIHsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOwogCX0KIAotCXJldHVybiAwOworCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnQgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHQ7CisJCXNrYl90b19mcmVlLS07CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCisJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJd2hpbGUgKHRvX2ZyZWVfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqdCA9IHRvX2ZyZWVfbGlzdDsKKwkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiX2FueSh0KTsKKwl9CisKKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlDVk1YX1NZTkNJT0JETUE7CisJCXRvdGFsX3RvX2NsZWFuID0gY3ZteF9zY3JhdGNoX3JlYWQ2NChDVk1YX1NDUl9TQ1JBVENIKTsKKwkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCisJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKKwkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7CisJfSBlbHNlIHsKKwkJdG90YWxfdG9fY2xlYW4gPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAxKTsKKwl9CisKKwlpZiAodG90YWxfdG9fY2xlYW4gJiAweDNmZikgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aGUgY2xlYW51cCB0YXNrbGV0IGV2ZXJ5IDEwMjQgcGFja2V0cyBmb3IKKwkJICogdGhlIHBhdGhvbG9naWNhbCBjYXNlIG9mIGhpZ2ggdHJhZmZpYyBvbiBvbmUgcG9ydAorCQkgKiBkZWxheWluZyBjbGVhbiB1cCBvZiBwYWNrZXRzIG9uIGEgZGlmZmVyZW50IHBvcnQKKwkJICogdGhhdCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBjbGVhbnVwLgorCQkgKi8KKwkJdGFza2xldF9zY2hlZHVsZSgmY3ZtX29jdF90eF9jbGVhbnVwX3Rhc2tsZXQpOworCX0KKworCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKLSAqIFBhY2tldCB0cmFuc21pdCB0byB0aGUgUE9XCi0gKgorICogY3ZtX29jdF94bWl0X3BvdyAtIHRyYW5zbWl0IGEgcGFja2V0IHRvIHRoZSBQT1cKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKKwogICogUmV0dXJucyBBbHdheXMgcmV0dXJucyB6ZXJvCiAgKi8KIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTksOCArNTkxLDggQEAKIAkJd29yay0+d29yZDIucy5kZWNfaXBjb21wID0gMDsJLyogRklYTUUgKi8KICNlbmRpZgogCQl3b3JrLT53b3JkMi5zLnRjcF9vcl91ZHAgPQotCQkgICAgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9UQ1ApCi0JCSAgICB8fCAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1VEUCk7CisJCSAgICAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkgICAgfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7CiAjaWYgMAogCQkvKiBGSVhNRSAqLwogCQl3b3JrLT53b3JkMi5zLmRlY19pcHNlYyA9IDA7CkBAIC01MjksMTA2ICs2NjEsMTEgQEAKIH0KIAogLyoqCi0gKiBUcmFuc21pdCBhIHdvcmsgcXVldWUgZW50cnkgb3V0IG9mIHRoZSBldGhlcm5ldCBwb3J0LiBCb3RoCi0gKiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgdGhlIHBhY2tldCBkYXRhIGNhbiBvcHRpb25hbGx5IGJlCi0gKiBmcmVlZC4gVGhlIHdvcmsgd2lsbCBiZSBmcmVlZCBvbiBlcnJvciBhcyB3ZWxsLgotICoKLSAqIEBkZXY6ICAgICBEZXZpY2UgdG8gdHJhbnNtaXQgb3V0LgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgICBXb3JrIHF1ZXVlIGVudHJ5IHRvIHNlbmQKLSAqIEBkb19mcmVlOiBUcnVlIGlmIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCBwYWNrZXQgZGF0YSBzaG91bGQgYmUKLSAqICAgICAgICAgICAgICAgIGZyZWVkLiBJZiBmYWxzZSwgbmVpdGhlciB3aWxsIGJlIGZyZWVkLgotICogQHFvczogICAgIEluZGV4IGludG8gdGhlIHF1ZXVlcyBmb3IgdGhpcyBwb3J0IHRvIHRyYW5zbWl0IG9uLiBUaGlzCi0gKiAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGltcGxlbWVudCBRb1MgaWYgdGhlaXIgYXJlIG11bHRpcGxlIHF1ZXVlcyBwZXIKLSAqICAgICAgICAgICAgICAgIHBvcnQuIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mCi0gKiAgICAgICAgICAgICAgICBxdWV1ZXMgcGVyIHBvcnQgbWludXMgMS4gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsCi0gKiAgICAgICAgICAgICAgICBiZSBjaGFuZ2UgdG8gemVyby4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCi0JCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwotCWN2bXhfcGtvX2NvbW1hbmRfd29yZDBfdCBwa29fY29tbWFuZDsKLQlpbnQgZHJvcHBlZDsKLQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljdm14X3dxZV90ICp3b3JrID0gd29ya19xdWV1ZV9lbnRyeTsKLQotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCURFQlVHUFJJTlQoIiVzOiBEZXZpY2Ugbm90IHVwXG4iLCBkZXYtPm5hbWUpOwotCQlpZiAoZG9fZnJlZSkKLQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogVGhlIGNoZWNrIG9uIENWTVhfUEtPX1FVRVVFU19QRVJfUE9SVF8qIGlzIGRlc2lnbmVkIHRvIGNvbXBsZXRlbHkKLQkgICByZW1vdmUgInFvcyIgaW4gdGhlIGV2ZW50IG5laXRoZXIgaW50ZXJmYWNlIHN1cHBvcnRzCi0JICAgbXVsdGlwbGUgcXVldWVzIHBlciBwb3J0ICovCi0JaWYgKChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMCA+IDEpIHx8Ci0JICAgIChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMSA+IDEpKSB7Ci0JCWlmIChxb3MgPD0gMCkKLQkJCXFvcyA9IDA7Ci0JCWVsc2UgaWYgKHFvcyA+PSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSkKLQkJCXFvcyA9IDA7Ci0JfSBlbHNlCi0JCXFvcyA9IDA7Ci0KLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN2bXhfcGtvX3NlbmRfcGFja2V0X3ByZXBhcmUocHJpdi0+cG9ydCwgcHJpdi0+cXVldWUgKyBxb3MsCi0JCQkJICAgICBDVk1YX1BLT19MT0NLX0NNRF9RVUVVRSk7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IHdvcmstPnBhY2tldF9wdHIucy5hZGRyOwotCWh3X2J1ZmZlci5zLnBvb2wgPSBDVk1YX0ZQQV9QQUNLRVRfUE9PTDsKLQlod19idWZmZXIucy5zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRTsKLQlod19idWZmZXIucy5iYWNrID0gd29yay0+cGFja2V0X3B0ci5zLmJhY2s7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KLQlwa29fY29tbWFuZC51NjQgPSAwOwotCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwotCXBrb19jb21tYW5kLnMuZG9udGZyZWUgPSAhZG9fZnJlZTsKLQlwa29fY29tbWFuZC5zLnNlZ3MgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JcGtvX2NvbW1hbmQucy50b3RhbF9ieXRlcyA9IHdvcmstPmxlbjsKLQotCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwotCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLm5vdF9JUCB8fCB3b3JrLT53b3JkMi5zLklQX2V4YykpCi0JCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IDA7Ci0JZWxzZQotCQlwa29fY29tbWFuZC5zLmlwb2ZmcDEgPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAxOwotCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQlpZiAodW5saWtlbHkKLQkgICAgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCSAgICAgKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLCBwa29fY29tbWFuZCwgaHdfYnVmZmVyLAotCSAgICAgIENWTVhfUEtPX0xPQ0tfQ01EX1FVRVVFKSkpIHsKLQkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWRyb3BwZWQgPSAtMTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGRyb3BwZWQpKSB7Ci0JCWlmIChkb19mcmVlKQotCQkJY3ZtX29jdF9mcmVlX3dvcmsod29yayk7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQl9IGVsc2UgaWYgKGRvX2ZyZWUpCi0JCWN2bXhfZnBhX2ZyZWUod29yaywgQ1ZNWF9GUEFfV1FFX1BPT0wsIERPTlRfV1JJVEVCQUNLKDEpKTsKLQotCXJldHVybiBkcm9wcGVkOwotfQotRVhQT1JUX1NZTUJPTChjdm1fb2N0X3RyYW5zbWl0X3Fvcyk7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgotICoKKyAqIGN2bV9vY3RfdHhfc2h1dGRvd25fZGV2IC0gZnJlZSBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgogICogQGRldjogICAgRGV2aWNlIGJlaW5nIHNodXRkb3duCisgKgogICovCi12b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjQyLDMgKzY3OSw0NSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHBvcnQ7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKKwkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2VbcG9ydF07CisJCQljdm1fb2N0X2ZyZWVfdHhfc2ticyhkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF90eF9jbGVhbnVwX3dhdGNoZG9nKGludCBjcGwsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuICAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1RJTVgoMSksIDApOworCS8qIERvIHRoZSB3b3JrIGluIHRoZSB0YXNrbGV0LiAgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKQoreworCWludCBpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCAwKTsKKwkvKiBSZWdpc3RlciBhbiBJUlEgaGFuZGVyIGZvciB0byByZWNlaXZlIENJVV9USU1YKDEpIGludGVycnVwdHMgKi8KKwlpID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9USU1FUjEsCisJCQljdm1fb2N0X3R4X2NsZWFudXBfd2F0Y2hkb2csIDAsCisJCQkiRXRoZXJuZXQiLCBjdm1fb2N0X2RldmljZSk7CisKKwlpZiAoaSkKKwkJcGFuaWMoIkNvdWxkIG5vdCBhY3F1aXJlIEV0aGVybmV0IElSUSAlZFxuIiwgT0NURU9OX0lSUV9USU1FUjEpOworfQorCit2b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWZyZWVfaXJxKE9DVEVPTl9JUlFfVElNRVIxLCBjdm1fb2N0X2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmgKaW5kZXggYzBiZWJmNy4uNTQ3NjgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguaApAQCAtMjksMjkgKzI5LDYgQEAKIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCiAJCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpOwotdm9pZCBjdm1fb2N0X3R4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIEZyZWUgZGVhZCB0cmFuc21pdCBza2JzLgotICoKLSAqIEBwcml2OgkJVGhlIGRyaXZlciBkYXRhCi0gKiBAc2tiX3RvX2ZyZWU6CVRoZSBudW1iZXIgb2YgU0tCcyB0byBmcmVlIChmcmVlIG5vbmUgaWYgbmVnYXRpdmUpLgotICogQHFvczoJCVRoZSBxdWV1ZSB0byBmcmVlIGZyb20uCi0gKiBAdGFrZV9sb2NrOgkJSWYgdHJ1ZSwgYWNxdWlyZSB0aGUgc2tiIGxpc3QgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYsCi0JCQkJCWludCBza2JfdG9fZnJlZSwKLQkJCQkJaW50IHFvcywgaW50IHRha2VfbG9jaykKLXsKLQkvKiBGcmVlIHNrYnVmZnMgbm90IGluIHVzZSBieSB0aGUgaGFyZHdhcmUuICAqLwotCWlmIChza2JfdG9fZnJlZSA+IDApIHsKLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fbG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKLQkJCWRldl9rZnJlZV9za2IoX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pKTsKLQkJCXNrYl90b19mcmVlLS07Ci0JCX0KLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKLQl9Ci19Cit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bih2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCmluZGV4IDM3YjY2NTkuLjIzNDY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCkBAIC0zMCwxMCArMzAsOSBAQAogCQkJCX0gd2hpbGUgKDApCiAKIC8qKgotICogR2l2ZW4gYSBwYWNrZXQgZGF0YSBhZGRyZXNzLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgYnVmZmVyLgotICoKKyAqIGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIgLSBjb252ZXJ0IHBhY2tldCBkYXRhIGFkZHJlc3MgdG8gcG9pbnRlcgogICogQHBhY2tldF9wdHI6IFBhY2tldCBkYXRhIGhhcmR3YXJlIGFkZHJlc3MKKyAqCiAgKiBSZXR1cm5zIFBhY2tldCBidWZmZXIgcG9pbnRlcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIodW5pb24gY3ZteF9idWZfcHRyIHBhY2tldF9wdHIpCkBAIC00Myw5ICs0Miw3IEBACiB9CiAKIC8qKgotICogR2l2ZW4gYW4gSVBEL1BLTyBwb3J0IG51bWJlciwgcmV0dXJuIHRoZSBsb2dpY2FsIGludGVyZmFjZSBpdCBpcwotICogb24uCi0gKgorICogSU5URVJGQUNFIC0gY29udmVydCBJUEQgcG9ydCB0byBsb2NnaWNhbCBpbnRlcmZhY2UKICAqIEBpcGRfcG9ydDogUG9ydCB0byBjaGVjawogICoKICAqIFJldHVybnMgTG9naWNhbCBpbnRlcmZhY2UKQEAgLTY1LDkgKzYyLDcgQEAKIH0KIAogLyoqCi0gKiBHaXZlbiBhbiBJUEQvUEtPIHBvcnQgbnVtYmVyLCByZXR1cm4gdGhlIHBvcnQncyBpbmRleCBvbiBhCi0gKiBsb2dpY2FsIGludGVyZmFjZS4KLSAqCisgKiBJTkRFWCAtIGNvbnZlcnQgSVBEL1BLTyBwb3J0IG51bWJlciB0byB0aGUgcG9ydCdzIGludGVyZmFjZSBpbmRleAogICogQGlwZF9wb3J0OiBQb3J0IHRvIGNoZWNrCiAgKgogICogUmV0dXJucyBJbmRleCBpbnRvIGludGVyZmFjZSBwb3J0IGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKaW5kZXggZWUzZGM0MS4uM2ZjYTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYwppbmRleCA0Y2ZkNGIxLi40YTIxNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNDMsOCArNDIsNiBAQAogI2luY2x1ZGUgImV0aGVybmV0LXR4LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWRpby5oIgogI2luY2x1ZGUgImV0aGVybmV0LXV0aWwuaCIKLSNpbmNsdWRlICJldGhlcm5ldC1wcm9jLmgiCi0KIAogI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKQEAgLTEwNCwxMyArMTAxLDE1IEBACiAJIlx0XCJldGgyLHNwaTMsc3BpN1wiIHdvdWxkIGNhdXNlIHRoZXNlIHRocmVlIGRldmljZXMgdG8gdHJhbnNtaXRcbiIKIAkiXHR1c2luZyB0aGUgcG93X3NlbmRfZ3JvdXAuIik7CiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9jb3JlX3F1ZXVlaW5nID0gMTsKLW1vZHVsZV9wYXJhbShkaXNhYmxlX2NvcmVfcXVldWVpbmcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfY29yZV9xdWV1ZWluZywgIlxuIgotCSJcdFdoZW4gc2V0IHRoZSBuZXR3b3JraW5nIGNvcmUncyB0eF9xdWV1ZV9sZW4gaXMgc2V0IHRvIHplcm8uICBUaGlzXG4iCi0JIlx0YWxsb3dzIHBhY2tldHMgdG8gYmUgc2VudCB3aXRob3V0IGxvY2sgY29udGVudGlvbiBpbiB0aGUgcGFja2V0XG4iCi0JIlx0c2NoZWR1bGVyIHJlc3VsdGluZyBpbiBzb21lIGNhc2VzIGluIGltcHJvdmVkIHRocm91Z2hwdXQuXG4iKTsKK2ludCBtYXhfcnhfY3B1cyA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9yeF9jcHVzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcnhfY3B1cywgIlxuIgorCSJcdFx0VGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgdG8gdXNlIGZvciBwYWNrZXQgcmVjZXB0aW9uLlxuIgorCSJcdFx0VXNlIC0xIHRvIHVzZSBhbGwgYXZhaWxhYmxlIENQVXMuIik7CiAKK2ludCByeF9uYXBpX3dlaWdodCA9IDMyOworbW9kdWxlX3BhcmFtKHJ4X25hcGlfd2VpZ2h0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9uYXBpX3dlaWdodCwgIlRoZSBOQVBJIFdFSUdIVCBwYXJhbWV0ZXIuIik7CiAKIC8qCiAgKiBUaGUgb2Zmc2V0IGZyb20gbWFjX2FkZHJfYmFzZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBwb3J0CkBAIC0xMjIsOSArMTIxLDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0OwogCiAvKioKLSAqIFBlcmlvZGljIHRpbWVyIHRvIGNoZWNrIGF1dG8gbmVnb3RpYXRpb24KKyAqIGN2bV9vY3RfcG9sbF9xdWV1ZSAtIFdvcmtxdWV1ZSBmb3IgcG9sbGluZyBvcGVyYXRpb25zLgogICovCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3ZtX29jdF9wb2xsX3RpbWVyOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKKworLyoqCisgKiBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcgLSBmbGFnIHRvIGluZGljYXRlIHBvbGxpbmcgc2hvdWxkIHN0b3AuCisgKgorICogU2V0IHRvIG9uZSByaWdodCBiZWZvcmUgY3ZtX29jdF9wb2xsX3F1ZXVlIGlzIGRlc3Ryb3llZC4KKyAqLworYXRvbWljX3QgY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qKgogICogQXJyYXkgb2YgZXZlcnkgZXRoZXJuZXQgZGV2aWNlIG93bmVkIGJ5IHRoaXMgZHJpdmVyIGluZGV4ZWQgYnkKQEAgLTEzMiw2NSArMTM4LDQ0IEBACiAgKi8KIHN0cnVjdCBuZXRfZGV2aWNlICpjdm1fb2N0X2RldmljZVtUT1RBTF9OVU1CRVJfT0ZfUE9SVFNdOwogCi0vKioKLSAqIFBlcmlvZGljIHRpbWVyIHRpY2sgZm9yIHNsb3cgbWFuYWdlbWVudCBvcGVyYXRpb25zCi0gKgotICogQGFyZzogICAgRGV2aWNlIHRvIGNoZWNrCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9kb190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3U2NCBjdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWw7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGN2bV9vY3RfcnhfcmVmaWxsX3dvcmssIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcik7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50MzJfdCBza2JfdG9fZnJlZSwgdW5kbzsKLQlpbnQgcXVldWVzX3Blcl9wb3J0OwotCWludCBxb3M7Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlzdGF0aWMgaW50IHBvcnQ7CisJLyoKKwkgKiBGUEEgMCBtYXkgaGF2ZSBiZWVuIGRyYWluZWQsIHRyeSB0byByZWZpbGwgaXQgaWYgd2UgbmVlZAorCSAqIG1vcmUgdGhhbiBudW1fcGFja2V0X2J1ZmZlcnMgLyAyLCBvdGhlcndpc2Ugbm9ybWFsIHJlY2VpdmUKKwkgKiBwcm9jZXNzaW5nIHdpbGwgcmVmaWxsIGl0LiAgSWYgaXQgd2VyZSBkcmFpbmVkLCBubyBwYWNrZXRzCisJICogY291bGQgYmUgcmVjZWl2ZWQgc28gY3ZtX29jdF9uYXBpX3BvbGwgd291bGQgbmV2ZXIgYmUKKwkgKiBpbnZva2VkIHRvIGRvIHRoZSByZWZpbGwuCisJICovCisJY3ZtX29jdF9yeF9yZWZpbGxfcG9vbChudW1fcGFja2V0X2J1ZmZlcnMgLyAyKTsKIAotCWlmIChwb3J0ID49IENWTVhfUElQX05VTV9JTlBVVF9QT1JUUykgewotCQkvKgotCQkgKiBBbGwgcG9ydHMgaGF2ZSBiZWVuIHBvbGxlZC4gU3RhcnQgdGhlIG5leHQKLQkJICogaXRlcmF0aW9uIHRocm91Z2ggdGhlIHBvcnRzIGluIG9uZSBzZWNvbmQuCi0JCSAqLwotCQlwb3J0ID0gMDsKLQkJbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFjdm1fb2N0X2RldmljZVtwb3J0XSkKLQkJZ290byBvdXQ7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCWlmIChwcml2LT5wb2xsKQotCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCXF1ZXVlc19wZXJfcG9ydCA9IGN2bXhfcGtvX2dldF9udW1fcXVldWVzKHBvcnQpOwotCS8qIERyYWluIGFueSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGZyZWUgbGlzdCAqLwotCWZvciAocW9zID0gMDsgcW9zIDwgcXVldWVzX3Blcl9wb3J0OyBxb3MrKykgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID09IDApCi0JCQljb250aW51ZTsKLQkJc2tiX3RvX2ZyZWUgPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIocHJpdi0+ZmF1ICsgcW9zICogNCwKLQkJCQkJCSAgICAgICBNQVhfU0tCX1RPX0ZSRUUpOwotCQl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IHNrYl90b19mcmVlICsgTUFYX1NLQl9UT19GUkVFOwotCQlpZiAodW5kbyA+IDApCi0JCQljdm14X2ZhdV9hdG9taWNfYWRkMzIocHJpdi0+ZmF1K3Fvcyo0LCAtdW5kbyk7Ci0JCXNrYl90b19mcmVlID0gLXNrYl90b19mcmVlID4gTUFYX1NLQl9UT19GUkVFID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7Ci0JfQotCWN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotb3V0OgotCXBvcnQrKzsKLQkvKiBQb2xsIHRoZSBuZXh0IHBvcnQgaW4gYSA1MHRoIG9mIGEgc2Vjb25kLgotCSAgIFRoaXMgc3ByZWFkcyB0aGUgcG9sbGluZyBvZiBwb3J0cyBvdXQgYSBsaXR0bGUgYml0ICovCi0JbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWiAvIDUwKTsKKwlpZiAoIWF0b21pY19yZWFkKCZjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLAorCQkJCSAgICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiB9CiAKLS8qKgotICogQ29uZmlndXJlIGNvbW1vbiBoYXJkd2FyZSBmb3IgYWxsIGludGVyZmFjZXMKLSAqLworc3RhdGljIHZvaWQgY3ZtX29jdF9wZXJpb2RpY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICBzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0LAorCQkJCQkJICAgIHBvcnRfcGVyaW9kaWNfd29yay53b3JrKTsKKworCWlmIChwcml2LT5wb2xsKQorCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWlmICghYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKKyB9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBjdm1fb2N0X2NvbmZpZ3VyZV9jb21tb25faHcodm9pZCkKIHsKLQlpbnQgcjsKIAkvKiBTZXR1cCB0aGUgRlBBICovCiAJY3ZteF9mcGFfZW5hYmxlKCk7CiAJY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUsCkBAIC0yMDUsMjggKzE5MCwxMyBAQAogCQljdm14X2hlbHBlcl9zZXR1cF9yZWQobnVtX3BhY2tldF9idWZmZXJzIC8gNCwKIAkJCQkgICAgICBudW1fcGFja2V0X2J1ZmZlcnMgLyA4KTsKIAotCS8qIEVuYWJsZSB0aGUgTUlJIGludGVyZmFjZSAqLwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0VOKDApLCAxKTsKLQotCS8qIFJlZ2lzdGVyIGFuIElSUSBoYW5kZXIgZm9yIHRvIHJlY2VpdmUgUE9XIGludGVycnVwdHMgKi8KLQlyID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9XT1JLUTAgKyBwb3dfcmVjZWl2ZV9ncm91cCwKLQkJCWN2bV9vY3RfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIkV0aGVybmV0IiwKLQkJCWN2bV9vY3RfZGV2aWNlKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgMAotCWlmIChVU0VfTVVMVElDT1JFX1JFQ0VJVkUpIHsKLQkJaXJxX3NldF9hZmZpbml0eShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAotCQkJCSBjcHVfb25saW5lX21hc2spOwotCX0KLSNlbmRpZgogfQogCiAvKioKLSAqIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5IHJlY2VpdmVkIGluIGEgaW50ZXJjZXB0IGNhbGxiYWNrLgorICogY3ZtX29jdF9mcmVlX3dvcmstIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5CiAgKgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICogQHdvcmtfcXVldWVfZW50cnk6IFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBvbiBmYWlsdXJlLgogICovCiBpbnQgY3ZtX29jdF9mcmVlX3dvcmsodm9pZCAqd29ya19xdWV1ZV9lbnRyeSkKQEAgLTI1Myw5ICsyMjMsOSBAQAogRVhQT1JUX1NZTUJPTChjdm1fb2N0X2ZyZWVfd29yayk7CiAKIC8qKgotICogR2V0IHRoZSBsb3cgbGV2ZWwgZXRoZXJuZXQgc3RhdGlzdGljcwotICoKKyAqIGN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyAtIGdldCB0aGUgbG93IGxldmVsIGV0aGVybmV0IHN0YXRpc3RpY3MKICAqIEBkZXY6ICAgIERldmljZSB0byBnZXQgdGhlIHN0YXRpc3RpY3MgZnJvbQorICoKICAqIFJldHVybnMgUG9pbnRlciB0byB0aGUgc3RhdGlzdGljcwogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjk5LDggKzI2OSw3IEBACiB9CiAKIC8qKgotICogQ2hhbmdlIHRoZSBsaW5rIE1UVS4gVW5pbXBsZW1lbnRlZAotICoKKyAqIGN2bV9vY3RfY29tbW9uX2NoYW5nZV9tdHUgLSBjaGFuZ2UgdGhlIGxpbmsgTVRVCiAgKiBAZGV2OiAgICAgRGV2aWNlIHRvIGNoYW5nZQogICogQG5ld19tdHU6IFRoZSBuZXcgTVRVCiAgKgpAQCAtMzY0LDggKzMzMyw3IEBACiB9CiAKIC8qKgotICogU2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4gQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCi0gKgorICogY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0IC0gc2V0IHRoZSBtdWx0aWNhc3QgbGlzdAogICogQGRldjogICAgRGV2aWNlIHRvIHdvcmsgb24KICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zODIsNyArMzUwLDcgQEAKIAkJY29udHJvbC51NjQgPSAwOwogCQljb250cm9sLnMuYmNzdCA9IDE7CS8qIEFsbG93IGJyb2FkY2FzdCBNQUMgYWRkcmVzc2VzICovCiAKLQkJaWYgKGRldi0+bWNfbGlzdCB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkJICAgIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQogCQkJLyogRm9yY2UgYWNjZXB0IG11bHRpY2FzdCBwYWNrZXRzICovCiAJCQljb250cm9sLnMubWNzdCA9IDI7CkBAIC00MjAsMTAgKzM4OCwxMCBAQAogfQogCiAvKioKLSAqIFNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCi0gKgotICogQGRldjogICAgRGV2aWNlIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgZm9yCi0gKiBAYWRkcjogICBBZGRyZXNzIHN0cnVjdHVyZSB0byBjaGFuZ2UgaXQgdG9vLiBNQUMgYWRkcmVzcyBpcyBhZGRyICsgMi4KKyAqIGN2bV9vY3RfY29tbW9uX3NldF9tYWNfYWRkcmVzcyAtIHNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCisgKiBAZGV2OiAgICBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uLgorICogQGFkZHI6ICAgQWRkcmVzcyBzdHJ1Y3R1cmUgdG8gY2hhbmdlIGl0IHRvby4KKwogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjdm1fb2N0X2NvbW1vbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTQ3MCw5ICs0MzgsOSBAQAogfQogCiAvKioKLSAqIFBlciBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbgotICoKKyAqIGN2bV9vY3RfY29tbW9uX2luaXQgLSBwZXIgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24KICAqIEBkZXY6ICAgIERldmljZSB0byBpbml0aWFsaXplCisgKgogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogaW50IGN2bV9vY3RfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUxMCw4ICs0NzgsMTEgQEAKIAkgICAgJiYgKGFsd2F5c191c2VfcG93IHx8IHN0cnN0cihwb3dfc2VuZF9saXN0LCBkZXYtPm5hbWUpKSkKIAkJcHJpdi0+cXVldWUgPSAtMTsKIAotCWlmIChwcml2LT5xdWV1ZSAhPSAtMSAmJiBVU0VfSFdfVENQVURQX0NIRUNLU1VNKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAocHJpdi0+cXVldWUgIT0gLTEpIHsKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCQlpZiAoVVNFX0hXX1RDUFVEUF9DSEVDS1NVTSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCX0KIAogCS8qIFdlIGRvIG91ciBvd24gbG9ja2luZywgTGludXggZG9lc24ndCBuZWVkIHRvICovCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CkBAIC02MjUsMTIgKzU5Niw2IEBACiAKIGV4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOwogCi0vKioKLSAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCi0gKiBkZXZpY2VzLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGN2bV9vY3RfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgbnVtX2ludGVyZmFjZXM7CkBAIC02NDgsOCArNjEzLDEyIEBACiAJZWxzZQogCQljdm1fb2N0X21hY19hZGRyX29mZnNldCA9IDA7CiAKLQljdm1fb2N0X3Byb2NfaW5pdGlhbGl6ZSgpOwotCWN2bV9vY3RfcnhfaW5pdGlhbGl6ZSgpOworCWN2bV9vY3RfcG9sbF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvY3Rlb24tZXRoZXJuZXQiKTsKKwlpZiAoY3ZtX29jdF9wb2xsX3F1ZXVlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJvY3Rlb24tZXRoZXJuZXQ6IENhbm5vdCBjcmVhdGUgd29ya3F1ZXVlIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWN2bV9vY3RfY29uZmlndXJlX2NvbW1vbl9odygpOwogCiAJY3ZteF9oZWxwZXJfaW5pdGlhbGl6ZV9wYWNrZXRfaW9fZ2xvYmFsKCk7CkBAIC02ODIsNiArNjUxLDkgQEAKIAkgKi8KIAljdm14X2ZhdV9hdG9taWNfd3JpdGUzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIDApOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgRkFVIHVzZWQgZm9yIGNvdW50aW5nIHR4IFNLQnMgdGhhdCBuZWVkIHRvIGJlIGZyZWVkICovCisJY3ZteF9mYXVfYXRvbWljX3dyaXRlMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAwKTsKKwogCWlmICgocG93X3NlbmRfZ3JvdXAgIT0gLTEpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJCXByX2luZm8oIlx0Q29uZmlndXJpbmcgZGV2aWNlIGZvciBQT1cgb25seSBhY2Nlc3NcbiIpOwpAQCAtNjg5LDcgKzY2MSw2IEBACiAJCWlmIChkZXYpIHsKIAkJCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gKi8KIAkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0KSk7CiAKIAkJCWRldi0+bmV0ZGV2X29wcyA9ICZjdm1fb2N0X3Bvd19uZXRkZXZfb3BzOwogCQkJcHJpdi0+aW1vZGUgPSBDVk1YX0hFTFBFUl9JTlRFUkZBQ0VfTU9ERV9ESVNBQkxFRDsKQEAgLTcwMCwxOSArNjcxLDE2IEBACiAJCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOwogCiAJCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgPCAwKSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZXRoZXJuZXQgIgotCQkJCQkgImRldmljZSBmb3IgUE9XXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBldGhlcm5ldCBkZXZpY2UgZm9yIFBPV1xuIik7CiAJCQkJa2ZyZWUoZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJY3ZtX29jdF9kZXZpY2VbQ1ZNWF9QSVBfTlVNX0lOUFVUX1BPUlRTXSA9IGRldjsKLQkJCQlwcl9pbmZvKCIlczogUE9XIHNlbmQgZ3JvdXAgJWQsIHJlY2VpdmUgIgotCQkJCQkiZ3JvdXAgJWRcbiIsCi0JCQkJICAgICBkZXYtPm5hbWUsIHBvd19zZW5kX2dyb3VwLAotCQkJCSAgICAgcG93X3JlY2VpdmVfZ3JvdXApOworCQkJCXByX2luZm8oIiVzOiBQT1cgc2VuZCBncm91cCAlZCwgcmVjZWl2ZSBncm91cCAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBwb3dfc2VuZF9ncm91cCwKKwkJCQkJcG93X3JlY2VpdmVfZ3JvdXApOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkgImZvciBQT1dcbiIpOworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBQT1dcbiIpOwogCQl9CiAJfQogCkBAIC03MzAsMTcgKzY5OCwxNSBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9CiAJCQkgICAgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQpKTsKIAkJCWlmICghZGV2KSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkJICJmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisJCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBwb3J0ICVkXG4iLCBwb3J0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChkaXNhYmxlX2NvcmVfcXVldWVpbmcpCi0JCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuICovCiAJCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG9jdGVvbl9ldGhlcm5ldCkpOwogCisJCQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9ydF9wZXJpb2RpY193b3JrLAorCQkJCQkgIGN2bV9vY3RfcGVyaW9kaWNfd29ya2VyKTsKIAkJCXByaXYtPmltb2RlID0gaW1vZGU7CiAJCQlwcml2LT5wb3J0ID0gcG9ydDsKIAkJCXByaXYtPnF1ZXVlID0gY3ZteF9wa29fZ2V0X2Jhc2VfcXVldWUocHJpdi0+cG9ydCk7CkBAIC04MDMsNDQgKzc2OSwyNSBAQAogCQkJCWZhdSAtPQogCQkJCSAgICBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSAqCiAJCQkJICAgIHNpemVvZih1aW50MzJfdCk7CisJCQkJcXVldWVfZGVsYXllZF93b3JrKGN2bV9vY3RfcG9sbF9xdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChJTlRFUlJVUFRfTElNSVQpIHsKLQkJLyoKLQkJICogU2V0IHRoZSBQT1cgdGltZXIgcmF0ZSB0byBnaXZlIGFuIGludGVycnVwdCBhdCBtb3N0Ci0JCSAqIElOVEVSUlVQVF9MSU1JVCB0aW1lcyBwZXIgc2Vjb25kLgotCQkgKi8KLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLAotCQkJICAgICAgIG9jdGVvbl9ib290aW5mby0+ZWNsb2NrX2h6IC8gKElOVEVSUlVQVF9MSU1JVCAqCi0JCQkJCQkJICAgICAxNiAqIDI1NikgPDwgOCk7CisJY3ZtX29jdF90eF9pbml0aWFsaXplKCk7CisJY3ZtX29jdF9yeF9pbml0aWFsaXplKCk7CiAKLQkJLyoKLQkJICogRW5hYmxlIFBPVyB0aW1lciBpbnRlcnJ1cHQuIEl0IHdpbGwgY291bnQgd2hlbgotCQkgKiB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksCi0JCQkgICAgICAgMHgxZnVsIDw8IDI0KTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUE9XIGludGVycnVwdCB3aGVuIG91ciBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgcGFja2V0ICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1dRX0lOVF9USFJYKHBvd19yZWNlaXZlX2dyb3VwKSwgMHgxMDAxKTsKLQl9CisJLyoKKwkgKiAxNTAgdVM6IGFib3V0IDEwIDE1MDAtYnl0ZSBwYWNrdGVzIGF0IDFHRS4KKwkgKi8KKwljdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWwgPSAxNTAgKiAob2N0ZW9uX2dldF9jbG9ja19yYXRlKCkgLyAxMDAwMDAwKTsKIAotCS8qIEVuYWJsZSB0aGUgcG9sbCB0aW1lciBmb3IgY2hlY2tpbmcgUkdNSUkgc3RhdHVzICovCi0JaW5pdF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKLQljdm1fb2N0X3BvbGxfdGltZXIuZGF0YSA9IDA7Ci0JY3ZtX29jdF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gY3ZtX2RvX3RpbWVyOwotCW1vZF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBNb2R1bGUgLyBkcml2ZXIgc2h1dGRvd24KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcwotICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3ZtX29jdF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBwb3J0OwpAQCAtODUzLDIyICs4MDAsMzEgQEAKIAkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXAsIGN2bV9vY3RfZGV2aWNlKTsKIAotCWRlbF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKKwlhdG9taWNfaW5jX3JldHVybigmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmN2bV9vY3RfcnhfcmVmaWxsX3dvcmspOworCiAJY3ZtX29jdF9yeF9zaHV0ZG93bigpOworCWN2bV9vY3RfdHhfc2h1dGRvd24oKTsKKwogCWN2bXhfcGtvX2Rpc2FibGUoKTsKIAogCS8qIEZyZWUgdGhlIGV0aGVybmV0IGRldmljZXMgKi8KIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKIAkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7Ci0JCQljdm1fb2N0X3R4X3NodXRkb3duKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCWtmcmVlKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdm1fb2N0X2RldmljZVtwb3J0XTsKKwkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmspOworCisJCQljdm1fb2N0X3R4X3NodXRkb3duX2RldihkZXYpOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQljdm1fb2N0X2RldmljZVtwb3J0XSA9IE5VTEw7CiAJCX0KIAl9CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShjdm1fb2N0X3BvbGxfcXVldWUpOworCiAJY3ZteF9wa29fc2h1dGRvd24oKTsKLQljdm1fb2N0X3Byb2Nfc2h1dGRvd24oKTsKIAogCWN2bXhfaXBkX2ZyZWVfcHRyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDQwMmExNWIuLmQ1ODE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTU3LDU4ICs1NywxMiBAQAogCXVpbnQ2NF90IGxpbmtfaW5mbzsKIAkvKiBDYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIGxpbmsgc3RhdHVzICovCiAJdm9pZCAoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvcnRfcGVyaW9kaWNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG9ydF93b3JrOwkvKiBtYXkgYmUgdW51c2VkLiAqLwogfTsKIAotLyoqCi0gKiBGcmVlIGEgd29yayBxdWV1ZSBlbnRyeSByZWNlaXZlZCBpbiBhIGludGVyY2VwdCBjYWxsYmFjay4KLSAqCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBmcmVlCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwogaW50IGN2bV9vY3RfZnJlZV93b3JrKHZvaWQgKndvcmtfcXVldWVfZW50cnkpOwogCi0vKioKLSAqIFRyYW5zbWl0IGEgd29yayBxdWV1ZSBlbnRyeSBvdXQgb2YgdGhlIGV0aGVybmV0IHBvcnQuIEJvdGgKLSAqIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCB0aGUgcGFja2V0IGRhdGEgY2FuIG9wdGlvbmFsbHkgYmUKLSAqIGZyZWVkLiBUaGUgd29yayB3aWxsIGJlIGZyZWVkIG9uIGVycm9yIGFzIHdlbGwuCi0gKgotICogQGRldjogICAgIERldmljZSB0byB0cmFuc21pdCBvdXQuCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gc2VuZAotICogQGRvX2ZyZWU6IFRydWUgaWYgdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHBhY2tldCBkYXRhIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgZnJlZWQuIElmIGZhbHNlLCBuZWl0aGVyIHdpbGwgYmUgZnJlZWQuCi0gKiBAcW9zOiAgICAgSW5kZXggaW50byB0aGUgcXVldWVzIGZvciB0aGlzIHBvcnQgdG8gdHJhbnNtaXQgb24uIFRoaXMKLSAqICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW1wbGVtZW50IFFvUyBpZiB0aGVpciBhcmUgbXVsdGlwbGUgcXVldWVzIHBlcgotICogICAgICAgICAgICAgICAgcG9ydC4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YKLSAqICAgICAgICAgICAgICAgIHF1ZXVlcyBwZXIgcG9ydCBtaW51cyAxLiBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwKLSAqICAgICAgICAgICAgICAgIGJlIGNoYW5nZSB0byB6ZXJvLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgY3ZtX29jdF90cmFuc21pdF9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqd29ya19xdWV1ZV9lbnRyeSwKLQkJCSBpbnQgZG9fZnJlZSwgaW50IHFvcyk7Ci0KLS8qKgotICogVHJhbnNtaXQgYSB3b3JrIHF1ZXVlIGVudHJ5IG91dCBvZiB0aGUgZXRoZXJuZXQgcG9ydC4gQm90aAotICogdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHRoZSBwYWNrZXQgZGF0YSBjYW4gb3B0aW9uYWxseSBiZQotICogZnJlZWQuIFRoZSB3b3JrIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IgYXMgd2VsbC4gVGhpcyBzaW1wbHkKLSAqIHdyYXBzIGN2bXhfb2N0X3RyYW5zbWl0X3FvcygpIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqCi0gKiBAZGV2OiAgICAgRGV2aWNlIHRvIHRyYW5zbWl0IG91dC4KLSAqIEB3b3JrX3F1ZXVlX2VudHJ5OgotICogICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBzZW5kCi0gKiBAZG9fZnJlZTogVHJ1ZSBpZiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgcGFja2V0IGRhdGEgc2hvdWxkIGJlCi0gKiAgICAgICAgICAgICAgICBmcmVlZC4gSWYgZmFsc2UsIG5laXRoZXIgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3ZtX29jdF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHZvaWQgKndvcmtfcXVldWVfZW50cnksIGludCBkb19mcmVlKQotewotCXJldHVybiBjdm1fb2N0X3RyYW5zbWl0X3FvcyhkZXYsIHdvcmtfcXVldWVfZW50cnksIGRvX2ZyZWUsIDApOwotfQotCiBleHRlcm4gaW50IGN2bV9vY3RfcmdtaWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGN2bV9vY3RfcmdtaWlfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBjdm1fb2N0X3JnbWlpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNSArODgsMTEgQEAKIGV4dGVybiBpbnQgcG93X3JlY2VpdmVfZ3JvdXA7CiBleHRlcm4gY2hhciBwb3dfc2VuZF9saXN0W107CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmN2bV9vY3RfZGV2aWNlW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKK2V4dGVybiBhdG9taWNfdCBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmc7CitleHRlcm4gdTY0IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKworZXh0ZXJuIGludCBtYXhfcnhfY3B1czsKK2V4dGVybiBpbnQgcnhfbmFwaV93ZWlnaHQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKaW5kZXggMzgxN2Q3NC4uZmNiYTc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCkBAIC02Miw3ICs2Miw3IEBACiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKLQlyZXQgPSBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwaGlzb25fc2h0LCBOVUxMKTsKKwlyZXQgPSBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwaGlzb25fc2h0LCBOVUxMLCAwKTsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgInBoaXNvbl9pbml0X29uZSgpLCByZXQgPSAleFxuIiwgcmV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCAwZDQ5MGMxLi45MDg2MDQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTQ4MiwxNSArNDgyLDYgQEAKIAl1MTYgc2VxX2N0cmw7CiB9OwogCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciB7Ci0JdTE2IGZyYW1lX2N0bDsKLQl1MTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JdTE2IHNlcV9jdGw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgewogCXUxNiBmcmFtZV9jdGw7CiAJdTE2IGR1cmF0aW9uX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggYzdjNjQ1YS4uYTIxNTA2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCQkJZW5xdWV1ZV9tZ210KGllZWUsc2tiKTsKIAkJfWVsc2V7Ci0JCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXTw8NCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF08PDQpOwogCiAJCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MpOwogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAlpZihzaW5nbGUpewogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIAl9ZWxzZXsKIAotCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKKwkJaGVhZGVyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOwogCiAJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCWllZWUtPnNlcV9jdHJsWzBdID0gMDsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWRpc2FzcyA9IChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jX2ZyYW1lICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jX2ZyYW1lKSk7Ci0JZGlzYXNzLT5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKTsKKwlkaXNhc3MtPmhlYWRlci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKTsKIAlkaXNhc3MtPmhlYWRlci5kdXJhdGlvbl9pZCA9IDA7CiAKIAltZW1jcHkoZGlzYXNzLT5oZWFkZXIuYWRkcjEsIGJlYWNvbi0+YnNzaWQsIEVUSF9BTEVOKTsKQEAgLTkwNSw3ICs5MDUsNyBAQAogCWFzc29jID0gKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2VfZnJhbWUgKikKIAkJc2tiX3B1dChza2Isc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2VfZnJhbWUpKTsKIAotCWFzc29jLT5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1ApOworCWFzc29jLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKTsKIAltZW1jcHkoYXNzb2MtPmhlYWRlci5hZGRyMSwgZGVzdCxFVEhfQUxFTik7CiAJbWVtY3B5KGFzc29jLT5oZWFkZXIuYWRkcjMsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoYXNzb2MtPmhlYWRlci5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwpAQCAtOTgxLDcgKzk4MSw3IEBACiAJbWVtY3B5KGhkci0+YWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5hZGRyMywgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBFVEhfQUxFTik7CiAKLQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CiAJCUlFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMgfAogCQkocHdyID8gSUVFRTgwMjExX0ZDVExfUE06MCkpOwogCkBAIC0xMDg0LDcgKzEwODQsNyBAQAogCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdF9mcmFtZSkpOwogCiAKLQloZHItPmhlYWRlci5mcmFtZV9jdGwgPSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROworCWhkci0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROwogCWhkci0+aGVhZGVyLmR1cmF0aW9uX2lkPSAzNzsgLy9GSVhNRQogCW1lbWNweShoZHItPmhlYWRlci5hZGRyMSwgYmVhY29uLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmhlYWRlci5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwpAQCAtMTc4NiwxMSArMTc4NiwxMSBAQAogCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmllZWUtPnBzX3Rhc2spOwogCi0JaWYoV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpICE9IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICYmCi0JCVdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSAhPSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQorCWlmIChXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2NvbnRyb2wpICE9IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICYmCisJCVdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY29udHJvbCkgIT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKIAkJaWVlZS0+bGFzdF9yeF9wc190aW1lID0gamlmZmllczsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpKSB7CisJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2NvbnRyb2wpKSB7CiAKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgpAQCAtMjA2NCw3ICsyMDY0LDcgQEAKIAogCQkJaGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICAqKSBza2ItPmRhdGE7CiAKLQkJCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQkJaGVhZGVyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOwogCiAJCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwppbmRleCBlMGYxM2VmLi4xODQ3ZjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwpAQCAtMTg5MCw3ICsxODkwLDcgQEAKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IG1vZGU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgICpoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICAqKSBza2ItPmRhdGE7Ci0Jc2hvcnQgbW9yZWZyYWcgPSAoaC0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUzsKKwlzaG9ydCBtb3JlZnJhZyA9IChoLT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwcmlvcml0eTsKIApAQCAtMjE1OCw3ICsyMTU4LDcgQEAKIAkJCQlUeERlc2NEdXJhdGlvbiA9IFRoaXNGcmFtZVRpbWUgKyBhU2lmc1RpbWUgKyBBY2tUaW1lOwogCQkJfQogCi0JCQlpZighKGZyYWdfaGRyLT5mcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSB7IC8vbm8gbW9yZSBmcmFnbWVudAorCQkJaWYgKCEoZnJhZ19oZHItPmZyYW1lX2NvbnRyb2wgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSB7CiAJCQkJLy8gVGhpc0ZyYW1lLUFDSy4KIAkJCQlEdXJhdGlvbiA9IGFTaWZzVGltZSArIEFja1RpbWU7CiAJCQl9IGVsc2UgeyAvLyBPbmUgb3IgbW9yZSBmcmFnbWVudHMgcmVtYWluZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDlhNGM4NTguLjJiOGM4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC02MDksMTYgKzYwOSw2IEBACiAgICAgICAgIHU4IHBheWxvYWRbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotICAgICAgICB1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwogCV9fbGUxNiBkdXJhdGlvbl9pZDsKQEAgLTE2NzIsNyArMTY2Miw3IEBACiAgICAgICAgIGNhc2UgSUVFRTgwMjExXzJBRERSX0xFTjoKICAgICAgICAgICAgICAgICByZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKWhkciktPnBheWxvYWQ7CiAgICAgICAgIGNhc2UgSUVFRTgwMjExXzNBRERSX0xFTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWhkciktPnBheWxvYWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopaGRyK3NpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAgICAgICAgIGNhc2UgSUVFRTgwMjExXzRBRERSX0xFTjoKICAgICAgICAgICAgICAgICByZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKWhkciktPnBheWxvYWQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yODE5MnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yODE5MnMuaAppbmRleCAxMjNhYmNmLi43ZDZjM2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3I4MTkycy5oCkBAIC0yMDEsNyArMjAxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdTggRnJhbWVfUW9TVElEKHU4ICpidWYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1ZjsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCXJldHVybiAodTgpKChmcmFtZXFvcyAqKShidWYgKwogCQkoKChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGZlY2ZhMTIuLjA5NWI4YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC03NDQsNyArNzQ0LDcgQEAKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4YiAqcnhiLHU4KiBzcmMsdTgqIGRzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciogKXNrYi0+ZGF0YTsKLQl1MTYJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCXUxNgkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJdTE2CQlMTENPZmZzZXQ9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAJdTE2CQlDaGtMZW5ndGg7CkBAIC03NTYsNyArNzU2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc3ViX3NrYjsKIAl1OCAgICAgICAgICAgICAqZGF0YV9wdHI7CiAJLyoganVzdCBmb3IgZGVidWcgcHVycG9zZSAqLwotCVNlcU51bSA9IFdMQU5fR0VUX1NFUV9TRVEobGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJU2VxTnVtID0gV0xBTl9HRVRfU0VRX1NFUShsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlpZigoSUVFRTgwMjExX1FPU19IQVNfU0VRKGZjKSkmJlwKIAkJCSgoKGZyYW1lcW9zICopKHNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4pKS0+ZmllbGQucmVzZXJ2ZWQpKSB7CkBAIC0yMzcwLDcgKzIzNzAsNyBAQAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKGluZm9fZWxlbWVudC0+ZGF0YSwKIAkJCQkJCSAgaW5mb19lbGVtZW50LT5sZW4pLAogCQkJCSAgICAgTUFDX0FSRyhiZWFjb24tPmhlYWRlci5hZGRyMyksCi0JCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CisJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jb250cm9sKSA9PQogCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgPwogCQkJCSAgICAgIlBST0JFIFJFU1BPTlNFIiA6ICJCRUFDT04iKTsKIAkJcmV0dXJuOwpAQCAtMjM4Nyw3ICsyMzg3LDcgQEAKIAkJcmV0dXJuOwogCWlmKGllZWUtPmJHbG9iYWxEb21haW4pCiAJewotCQlpZiAoV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCkKKwkJaWYgKFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKQogCQl7CiAJCQkvLyBDYXNlIDE6IENvdW50cnkgY29kZQogCQkJaWYoSVNfQ09VTlRSWV9JRV9WQUxJRChpZWVlKSApCkBAIC0yNDU0LDcgKzI0NTQsNyBAQAogCQllbHNlCiAJCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuYnVzZXByb3RlY3Rpb24gPSBmYWxzZTsKIAkJfQotCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSkKKwkJaWYoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpKQogCQl7CiAJCQlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKQogCQkJCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJlY3ZCY25JblBlcmlvZCsrOwpAQCAtMjQ5Niw3ICsyNDk2LDcgQEAKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLnNzaWQsCiAJCQkJCQkgIG5ldHdvcmsuc3NpZF9sZW4pLAogCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLmJzc2lkKSwKLQkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KKwkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwogI2VuZGlmCkBAIC0yNTA5LDcgKzI1MDksNyBAQAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCiAJCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpLAotCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PQorCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CiAKQEAgLTI1MTksNyArMjUxOSw3IEBACiAJCSAqLwogCQlyZW5ldyA9ICF0aW1lX2FmdGVyKHRhcmdldC0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpOwogCQkvL1lKLGFkZCwwODA4MTksZm9yIGhpZGRlbiBhcAotCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PSAwKQorCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0gMCkKIAkJCW5ldHdvcmsuZmxhZ3MgPSAofk5FVFdPUktfRU1QVFlfRVNTSUQgJiBuZXR3b3JrLmZsYWdzKXwoTkVUV09SS19FTVBUWV9FU1NJRCAmIHRhcmdldC0+ZmxhZ3MpOwogCQkvL2lmKHN0cm5jbXAobmV0d29yay5zc2lkLCAibGlua3N5cy1jIiw5KSA9PSAwKQogCQkvLwlwcmludGsoIj09PT0+MiBuZXR3b3JrLnNzaWQ9JXMgRkxBRz0lZCB0YXJnZXQuc3NpZD0lcyBGTEFHPSVkXG4iLCBuZXR3b3JrLnNzaWQsIG5ldHdvcmsuZmxhZ3MsIHRhcmdldC0+c3NpZCwgdGFyZ2V0LT5mbGFncyk7CkBAIC0yNTM1LDcgKzI1MzUsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkmJmlzX3NhbWVfbmV0d29yaygmaWVlZS0+Y3VycmVudF9uZXR3b3JrLCAmbmV0d29yaywgaWVlZSkmJlwKKwlpZiAoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpJiZpc19zYW1lX25ldHdvcmsoJmllZWUtPmN1cnJlbnRfbmV0d29yaywgJm5ldHdvcmssIGllZWUpJiZcCiAJCShpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSkgewogCQlpZihpZWVlLT5oYW5kbGVfYmVhY29uICE9IE5VTEwpIHsKIAkJCWllZWUtPmhhbmRsZV9iZWFjb24oaWVlZS0+ZGV2LGJlYWNvbiwmaWVlZS0+Y3VycmVudF9uZXR3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDk1ZDRmODQuLjBiYTJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCWlmKGllZWUtPnF1ZXVlX3N0b3ApewogCQkJZW5xdWV1ZV9tZ210KGllZWUsc2tiKTsKIAkJfWVsc2V7Ci0JCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXTw8NCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF08PDQpOwogCiAJCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MpOwogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJLy9wcmludGsoIj09PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAlpZihzaW5nbGUpewogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIAl9ZWxzZXsKIAotCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKKwkJaGVhZGVyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOwogCiAJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCWllZWUtPnNlcV9jdHJsWzBdID0gMDsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXNrYl9yZXNlcnZlKHNrYiwgaWVlZS0+dHhfaGVhZHJvb20pOwogCiAJcmVxID0gKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0KSk7Ci0JcmVxLT5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7CisJcmVxLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwogCXJlcS0+aGVhZGVyLmR1cmF0aW9uX2lkID0gMDsgLy9GSVhNRTogaXMgdGhpcyBPSyA/CiAKIAltZW1zZXQocmVxLT5oZWFkZXIuYWRkcjEsIDB4ZmYsIEVUSF9BTEVOKTsKQEAgLTY2Miw4ICs2NjIsOCBAQAogCWF1dGggPSAoc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdGlvbiAqKQogCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRpb24pKTsKIAotCWF1dGgtPmhlYWRlci5mcmFtZV9jdGwgPSBJRUVFODAyMTFfU1RZUEVfQVVUSDsKLQlpZiAoY2hhbGxlbmdlbGVuKSBhdXRoLT5oZWFkZXIuZnJhbWVfY3RsIHw9IElFRUU4MDIxMV9GQ1RMX1dFUDsKKwlhdXRoLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9TVFlQRV9BVVRIOworCWlmIChjaGFsbGVuZ2VsZW4pIGF1dGgtPmhlYWRlci5mcmFtZV9jb250cm9sIHw9IElFRUU4MDIxMV9GQ1RMX1dFUDsKIAogCWF1dGgtPmhlYWRlci5kdXJhdGlvbl9pZCA9IDB4MDEzYTsgLy9GSVhNRQogCkBAIC04MDEsNyArODAxLDcgQEAKIAkJYmVhY29uX2J1Zi0+Y2FwYWJpbGl0eSB8PSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CiAKIAotCWJlYWNvbl9idWYtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CisJYmVhY29uX2J1Zi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJYmVhY29uX2J1Zi0+aW5mb19lbGVtZW50WzBdLmlkID0gTUZJRV9UWVBFX1NTSUQ7CiAJYmVhY29uX2J1Zi0+aW5mb19lbGVtZW50WzBdLmxlbiA9IHNzaWRfbGVuOwogCkBAIC04ODAsNyArODgwLDcgQEAKIAlhc3NvYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lICopCiAJCXNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lKSk7CiAKLQlhc3NvYy0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKTsKKwlhc3NvYy0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7CiAJbWVtY3B5KGFzc29jLT5oZWFkZXIuYWRkcjEsIGRlc3QsRVRIX0FMRU4pOwogCW1lbWNweShhc3NvYy0+aGVhZGVyLmFkZHIzLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGFzc29jLT5oZWFkZXIuYWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTkzNSw3ICs5MzUsNyBAQAogCW1lbWNweShhdXRoLT5oZWFkZXIuYWRkcjMsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoYXV0aC0+aGVhZGVyLmFkZHIyLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGF1dGgtPmhlYWRlci5hZGRyMSwgZGVzdCwgRVRIX0FMRU4pOwotCWF1dGgtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk7CisJYXV0aC0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk7CiAJcmV0dXJuIHNrYjsKIAogCkBAIC05NTcsNyArOTU3LDcgQEAKIAltZW1jcHkoaGRyLT5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKIAkJSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwgSUVFRTgwMjExX0ZDVExfVE9EUyB8CiAJCShwd3IgPyBJRUVFODAyMTFfRkNUTF9QTTowKSk7CiAKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0X2ZyYW1lKSsyKTsKIAogCi0JaGRyLT5oZWFkZXIuZnJhbWVfY3RsID0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUTsKKwloZHItPmhlYWRlci5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUTsKIAloZHItPmhlYWRlci5kdXJhdGlvbl9pZD0gMzc7IC8vRklYTUUKIAltZW1jcHkoaGRyLT5oZWFkZXIuYWRkcjEsIGJlYWNvbi0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5oZWFkZXIuYWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTE5NDAsMTMgKzE5NDAsMTMgQEAKIAlpZighaWVlZS0+cHJvdG9fc3RhcnRlZCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSkgeworCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jb250cm9sKSkgewogCiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAogCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIFtSRV1BU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAotCQkJCQlXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2N0bCkpOworCQkJCQlXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2NvbnRyb2wpKTsKIAkJCWlmICgoaWVlZS0+c29mdG1hY19mZWF0dXJlcyAmIElFRUVfU09GVE1BQ19BU1NPQ0lBVEUpICYmCiAJCQkJaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0FTU09DSUFUSU5HX0FVVEhFTlRJQ0FURUQgJiYKIAkJCQlpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpewpAQCAtMjA4OCw3ICsyMDg4LDcgQEAKIAkJCWlmICgoaWVlZS0+c29mdG1hY19mZWF0dXJlcyAmIElFRUVfU09GVE1BQ19BU1NPQ0lBVEUpICYmCiAJCQkJaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCAmJgogCQkJCWllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSl7Ci0JCQkJcHJpbnRrKCI9PT09PT09PT09PnJlY2VpdmVkIGRpc2Fzc29jL2RlYXV0aCgleCkgZnJhbWUsIHJlYXNvbiBjb2RlOiV4XG4iLFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSwgKChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jKilza2ItPmRhdGEpLT5yZWFzb24pOworCQkJCXByaW50aygiPT09PT09PT09PT5yZWNlaXZlZCBkaXNhc3NvYy9kZWF1dGgoJXgpIGZyYW1lLCByZWFzb24gY29kZToleFxuIixXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2NvbnRyb2wpLCAoKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MqKXNrYi0+ZGF0YSktPnJlYXNvbik7CiAJCQkJaWVlZS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRJTkc7CiAJCQkJaWVlZS0+c29mdG1hY19zdGF0cy5yZWFzc29jKys7CiAJCQkJaWVlZS0+aXNfcm9hbWluZyA9IHRydWU7CkBAIC0yMjM5LDcgKzIyMzksNyBAQAogCiAJCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgICopIHNrYi0+ZGF0YTsKIAotCQkJaGVhZGVyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CkBAIC0yNTc0LDcgKzI1NzQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWIgPSAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKSBza2ItPmRhdGE7Ci0JYi0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOworCWItPmhlYWRlci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAKIAlyZXR1cm4gc2tiOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWIgPSAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKSBza2ItPmRhdGE7Ci0JYi0+aGVhZGVyLnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKKwliLT5oZWFkZXIuc2VxX2N0cmwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKIAogCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzEzOSw3ICszMTM5LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlkaXNhc3MgPSAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYykpOwotCWRpc2Fzcy0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyk7CisJZGlzYXNzLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyk7CiAJZGlzYXNzLT5oZWFkZXIuZHVyYXRpb25faWQgPSAwOwogCiAJbWVtY3B5KGRpc2Fzcy0+aGVhZGVyLmFkZHIxLCBiZWFjb24tPmJzc2lkLCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCA4ZDEyZmZjLi5jNjk2MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiAJbWVtY3B5KEJBUmVxLT5hZGRyMywgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBFVEhfQUxFTik7CiAKLQlCQVJlcS0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX01BTkFHRV9BQ1QpOyAvL2FjdGlvbiBmcmFtZQorCUJBUmVxLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX01BTkFHRV9BQ1QpOyAvL2FjdGlvbiBmcmFtZQogCiAJLy90YWcgKz0gc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7IC8vbW92ZSB0byBhY3Rpb24gZmllbGQKIAl0YWcgPSAodTgqKXNrYl9wdXQoc2tiLCA5KTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCW1lbWNweShEZWxiYS0+YWRkcjEsIGRzdCwgRVRIX0FMRU4pOwogCW1lbWNweShEZWxiYS0+YWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoRGVsYmEtPmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKLQlEZWxiYS0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX01BTkFHRV9BQ1QpOyAvL2FjdGlvbiBmcmFtZQorCURlbGJhLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX01BTkFHRV9BQ1QpOyAvL2FjdGlvbiBmcmFtZQogCiAJdGFnID0gKHU4Kilza2JfcHV0KHNrYiwgNik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwppbmRleCBjY2I5ZDViLi42ZjQyNGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCkBAIC02MTY4LDcgKzYxNjgsNyBAQAogCXUxNiBzYyA7CiAJdW5zaWduZWQgaW50IGZyYWcsc2VxOwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1ZmZlcjsKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7CisJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKIAlmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOwogCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpOwogCS8vY29zYSBhZGQgMDQyOTIwMDggdG8gcmVjb3JkIHRoZSBzZXF1ZW5jZSBudW1iZXIKQEAgLTY4MjcsNyArNjgyNyw3IEBACiAJdG1wX2J1ZiA9ICh1OCopc2tiLT5kYXRhOy8vICsgZ2V0X3J4cGFja2V0X3NoaWZ0Ynl0ZXNfODE5eHVzYihwc3RhdHMpOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopdG1wX2J1ZjsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwogCXByYWRkciA9IGhkci0+YWRkcjE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwppbmRleCA1YjE5MWFmLi5mNWNjMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC0xMzYyLDI1ICsxMzYyLDE3IEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOwogCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKLQlpbnQgaTsKIAljaGFyICphZGRyZXNzZXM7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5tY19saXN0OwotCWludCBtY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCiAJQVNTRVJUKGFkYXB0ZXIpOwogCi0JZm9yIChpID0gMTsgaSA8PSBtY19jb3VudDsgaSsrKSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgZGV2KSB7CiAJCWFkZHJlc3NlcyA9IChjaGFyICopICZtY19saXN0LT5kbWlfYWRkcjsKLQkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IDYpIHsKLQkJCXN0YXR1cyA9IHNsaWNfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRUlOVkFMOworCQlzdGF0dXMgPSBzbGljX21jYXN0X2FkZF9saXN0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCQlicmVhazsKLQkJfQogCQlzbGljX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmluZGV4IDEzM2I4NmMuLjJmZmYwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAppbmRleCAzOGQwYzMzLi4wMmI0ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAxNjFkYmM5Li5hNGY2ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC02LDcgKzYsNyBAQAogICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggN2YyYzM0MS4uN2VlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtNiw3ICs2LDcgQEAKICAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKaW5kZXggZDg5OTJkMS4uZjZlMzRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAljYXNlIFVTQl9TUEVFRF9MT1c6CiAJY2FzZSBVU0JfU1BFRURfRlVMTDoKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgotCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCWNhc2UgVVNCX1NQRUVEX1dJUkVMRVNTOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQl1c2JpcF91ZXJyKCJzcGVlZCAlZFxuIiwgc3BlZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCmluZGV4IDBkYjhkN2IuLjBkYWRiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKQEAgLTMwODIsOCArMzA4Miw3IEBACiAKICAgICBQU01nbXRPYmplY3QgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgdTMyICAgICAgICAgICAgICBtY19maWx0ZXJbMl07Ci0gICAgaW50ICAgICAgICAgICAgICBpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAgKm1jbGlzdDsKKyAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCiAgICAgVk5TdkluUG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfUkNSLCAmKHBEZXZpY2UtPmJ5UnhNb2RlKSk7CkBAIC0zMDkzLDcgKzMwOTIsNyBAQAogICAgICAgICAvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwogICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSB8PSAoUkNSX01VTFRJQ0FTVHxSQ1JfQlJPQURDQVNUfFJDUl9VTklDQVNUKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBwRGV2aWNlLT5tdWx0aWNhc3RfbGltaXQpCisgICAgZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gcERldmljZS0+bXVsdGljYXN0X2xpbWl0KQogICAgICAgICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgVk5Tdk91dFBvcnREKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX01BUjAsIDB4ZmZmZmZmZmYpOwpAQCAtMzEwMyw4ICszMTAyLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLSAgICAgICAgZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0gICAgICAgICAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogICAgICAgICAgICAgaW50IGJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAgICAgICAgICAgICBtY19maWx0ZXJbYml0X25yID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKGJpdF9uciAmIDMxKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwppbmRleCBlZjE3YzQ5Li5hOGUxYWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCkBAIC0xNTk2LDcgKzE1OTYsNyBAQAogICAgIFBTTWdtdE9iamVjdCAgICAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgICB1MzIgICAgICAgICAgICAgIG1jX2ZpbHRlclsyXTsKICAgICBpbnQgICAgICAgICAgICAgIGlpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAgKm1jbGlzdDsKKyAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKICAgICBCWVRFICAgICAgICAgICAgIHBieURhdGFbOF0gPSB7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfTsKICAgICBCWVRFICAgICAgICAgICAgIGJ5VG1wTW9kZSA9IDA7CiAgICAgaW50ICAgICAgICAgICAgICByYzsKQEAgLTE2MTksNyArMTYxOSw4IEBACiAgICAgICAgIC8vIFVuY29uZGl0aW9uYWxseSBsb2cgbmV0IHRhcHMuCiAgICAgICAgIHBEZXZpY2UtPmJ5UnhNb2RlIHw9IChSQ1JfTVVMVElDQVNUfFJDUl9CUk9BRENBU1R8UkNSX1VOSUNBU1QpOwogICAgIH0KLSAgICBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IHBEZXZpY2UtPm11bHRpY2FzdF9saW1pdCkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisgICAgZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gcERldmljZS0+bXVsdGljYXN0X2xpbWl0KSB8fAorCSAgICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAgICAgICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfV1JJVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDX1JFR19NQVIwLApAQCAtMTYzMSw4ICsxNjMyLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLSAgICAgICAgZm9yIChpaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGlpIDwgZGV2LT5tY19jb3VudDsKLSAgICAgICAgICAgICBpaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogICAgICAgICAgICAgaW50IGJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAgICAgICAgICAgICBtY19maWx0ZXJbYml0X25yID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKGJpdF9uciAmIDMxKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW4uYwppbmRleCBkNjM0YjJkLi41NGNhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi93YXZlbGFuLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dhdmVsYW4vd2F2ZWxhbi5jCkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogI2lmZGVmIERFQlVHX0lPQ1RMX0lORk8KIAlwcmludGsoS0VSTl9ERUJVRwogCSAgICAgICAiJXM6IHdhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0KCk6IHNldHRpbmcgUnggbW9kZSAlMDJYIHRvICVkIGFkZHJlc3Nlcy5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5mbGFncywgZGV2LT5tY19jb3VudCk7CisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5mbGFncywgbmV0ZGV2X21jX2NvdW50KGRldikpOwogI2VuZGlmCiAKIAkvKiBBcmUgd2UgYXNraW5nIGZvciBwcm9taXNjdW91cyBtb2RlLApAQCAtMTM3NSw3ICsxMzc1LDcgQEAKIAkgKiBvciB0b28gbWFueSBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciB0aGUgaGFyZHdhcmUgZmlsdGVyPyAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fAogCSAgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgKGRldi0+bWNfY291bnQgPiBJODI1ODZfTUFYX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CisJICAgIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEk4MjU4Nl9NQVhfTVVMVElDQVNUX0FERFJFU1NFUykpIHsKIAkJLyoKIAkJICogRW5hYmxlIHByb21pc2N1b3VzIG1vZGU6IHJlY2VpdmUgYWxsIHBhY2tldHMuCiAJCSAqLwpAQCAtMTM4NywxNyArMTM4NywxNyBAQAogCQl9CiAJfSBlbHNlCiAJCS8qIEFyZSB0aGVyZSBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHNlbmQ/ICovCi0JaWYgKGRldi0+bWNfbGlzdCAhPSAoc3RydWN0IGRldl9tY19saXN0ICopIE5VTEwpIHsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qCiAJCSAqIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgYnV0IHJlY2VpdmUgYWxsIHBhY2tldHMKIAkJICogaW4gbXVsdGljYXN0IGxpc3QKIAkJICovCiAjaWZkZWYgTVVMVElDQVNUX0FWT0lECi0JCWlmIChscC0+cHJvbWlzY3VvdXMgfHwgKGRldi0+bWNfY291bnQgIT0gbHAtPm1jX2NvdW50KSkKKwkJaWYgKGxwLT5wcm9taXNjdW91cyB8fCAobmV0ZGV2X21jX2NvdW50KGRldikgIT0gbHAtPm1jX2NvdW50KSkKICNlbmRpZgogCQl7CiAJCQlscC0+cHJvbWlzY3VvdXMgPSAwOwotCQkJbHAtPm1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKwkJCWxwLT5tY19jb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJCQl3dl84MjU4Nl9yZWNvbmZpZyhkZXYpOwogCQl9CkBAIC0zNTMxLDcgKzM1MzEsNyBAQAogCiAJLyogQW55IGFkZHJlc3MgdG8gc2V0PyAqLwogCWlmIChscC0+bWNfY291bnQpIHsKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7IGRtaTsgZG1pID0gZG1pLT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAkJCW91dHN3KFBJT1AxKGlvYWRkciksICh1MTYgKikgZG1pLT5kbWlfYWRkciwKIAkJCSAgICAgIFdBVkVMQU5fQUREUl9TSVpFID4+IDEpOwogCkBAIC0zNTM5LDcgKzM1MzksNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRwogCQkgICAgICAgIiVzOiB3dl84MjU4Nl9jb25maWcoKTogc2V0ICVkIG11bHRpY2FzdCBhZGRyZXNzZXM6XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBscC0+bWNfY291bnQpOwotCQlmb3IgKGRtaSA9IGRldi0+bWNfbGlzdDsgZG1pOyBkbWkgPSBkbWktPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlcE1cbiIsIGRtaS0+ZG1pX2FkZHIpOwogI2VuZGlmCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dhdmVsYW4vd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL3dhdmVsYW4vd2F2ZWxhbl9jcy5jCmluZGV4IDEwYzcwMmIuLjA0ZjY5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi93YXZlbGFuX2NzLmMKQEAgLTEzNzMsNyArMTM3Myw3IEBACiAKICNpZmRlZiBERUJVR19JT0NUTF9JTkZPCiAgIHByaW50ayhLRVJOX0RFQlVHICIlczogd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3QoKTogc2V0dGluZyBSeCBtb2RlICUwMlggdG8gJWQgYWRkcmVzc2VzLlxuIiwKLQkgZGV2LT5uYW1lLCBkZXYtPmZsYWdzLCBkZXYtPm1jX2NvdW50KTsKKwkgZGV2LT5uYW1lLCBkZXYtPmZsYWdzLCBuZXRkZXZfbWNfY291bnQoZGV2KSk7CiAjZW5kaWYKIAogICBpZihkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCkBAIC0xMzk0LDcgKzEzOTQsNyBAQAogICAgIC8qIElmIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzCiAgICAgICogb3IgdG9vIG11Y2ggbXVsdGljYXN0IGFkZHJlc3NlcyBmb3IgdGhlIGhhcmR3YXJlIGZpbHRlciAqLwogICAgIGlmKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotICAgICAgIChkZXYtPm1jX2NvdW50ID4gSTgyNTkzX01BWF9NVUxUSUNBU1RfQUREUkVTU0VTKSkKKyAgICAgICAobmV0ZGV2X21jX2NvdW50KGRldikgPiBJODI1OTNfTUFYX01VTFRJQ0FTVF9BRERSRVNTRVMpKQogICAgICAgewogCS8qCiAJICogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLCBidXQgYWN0aXZlIHRoZSBhbGwgbXVsdGljYXN0IG1vZGUKQEAgLTE0MTAsMjAgKzE0MTAsMTkgQEAKICAgICAgIH0KICAgICBlbHNlCiAgICAgICAvKiBJZiB0aGVyZSBpcyBzb21lIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gc2VuZCAqLwotICAgICAgaWYoZGV2LT5tY19saXN0ICE9IChzdHJ1Y3QgZGV2X21jX2xpc3QgKikgTlVMTCkKLQl7CisgICAgICBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJICAvKgogCSAgICogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLCBidXQgcmVjZWl2ZSBhbGwgcGFja2V0cwogCSAgICogaW4gbXVsdGljYXN0IGxpc3QKIAkgICAqLwogI2lmZGVmIE1VTFRJQ0FTVF9BVk9JRAogCSAgaWYobHAtPnByb21pc2N1b3VzIHx8IGxwLT5hbGxtdWx0aWNhc3QgfHwKLQkgICAgIChkZXYtPm1jX2NvdW50ICE9IGxwLT5tY19jb3VudCkpCisJICAgICAobmV0ZGV2X21jX2NvdW50KGRldikgIT0gbHAtPm1jX2NvdW50KSkKICNlbmRpZgogCSAgICB7CiAJICAgICAgbHAtPnByb21pc2N1b3VzID0gMDsKIAkgICAgICBscC0+YWxsbXVsdGljYXN0ID0gMDsKLQkgICAgICBscC0+bWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCSAgICAgIGxwLT5tY19jb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJICAgICAgd3ZfODI1OTNfcmVjb25maWcoZGV2KTsKIAkgICAgfQpAQCAtMzU5OCwxMyArMzU5NywxMyBAQAogICAvKiBJZiBhbnkgbXVsdGljYXN0IGFkZHJlc3MgdG8gc2V0ICovCiAgIGlmKGxwLT5tY19jb3VudCkKICAgICB7Ci0gICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKglkbWk7CisgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKICAgICAgIGludAkJCWFkZHJzX2xlbiA9IFdBVkVMQU5fQUREUl9TSVpFICogbHAtPm1jX2NvdW50OwogCiAjaWZkZWYgREVCVUdfQ09ORklHX0lORk8KICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaHdfY29uZmlnKCk6IHNldCAlZCBtdWx0aWNhc3QgYWRkcmVzc2VzOlxuIiwKIAkgICAgIGRldi0+bmFtZSwgbHAtPm1jX2NvdW50KTsKLSAgICAgIGZvcihkbWk9ZGV2LT5tY19saXN0OyBkbWk7IGRtaT1kbWktPm5leHQpCisgICAgICBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAlwcmludGsoS0VSTl9ERUJVRyAiICVwTVxuIiwgZG1pLT5kbWlfYWRkcik7CiAjZW5kaWYKIApAQCAtMzYxMyw3ICszNjEyLDcgQEAKICAgICAgIG91dGIoKChUWF9CQVNFID4+IDgpICYgUElPUkhfTUFTSykgfCBQSU9SSF9TRUxfVFgsIFBJT1JIKGJhc2UpKTsKICAgICAgIG91dGIoYWRkcnNfbGVuICYgMHhmZiwgUElPUChiYXNlKSk7CS8qIGJ5dGUgY291bnQgbHNiICovCiAgICAgICBvdXRiKChhZGRyc19sZW4gPj4gOCksIFBJT1AoYmFzZSkpOwkvKiBieXRlIGNvdW50IG1zYiAqLwotICAgICAgZm9yKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pPWRtaS0+bmV4dCkKKyAgICAgIG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQogCW91dHNiKFBJT1AoYmFzZSksIGRtaS0+ZG1pX2FkZHIsIGRtaS0+ZG1pX2FkZHJsZW4pOwogCiAgICAgICAvKiByZXNldCB0cmFuc21pdCBETUEgcG9pbnRlciAqLwpAQCAtMzYyMiw3ICszNjIxLDggQEAKICAgICAgIGlmKCF3dl84MjU5M19jbWQoZGV2LCAid3ZfODI1OTNfY29uZmlnKCk6IG1jLXNldHVwIiwKIAkJICAgICAgIE9QMF9NQ19TRVRVUCwgU1IwX01DX1NFVFVQX0RPTkUpKQogCXJldCA9IEZBTFNFOwotICAgICAgbHAtPm1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsJLyogcmVtZW1iZXIgdG8gYXZvaWQgcmVwZWF0ZWQgcmVzZXQgKi8KKyAgICAgIC8qIHJlbWVtYmVyIHRvIGF2b2lkIHJlcGVhdGVkIHJlc2V0ICovCisgICAgICBscC0+bWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKICAgICB9CiAKICAgLyogSm9iIGRvbmUsIGNsZWFyIHRoZSBmbGFnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCmluZGV4IGFjMzg5MDIuLmMzM2UyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogLy87P3NlZW1zIHJlYXNvbmFibGUgdGhhdCBldmVuIGFuIEFQLW9ubHkgZHJpdmVyIGNvdWxkIGFmZm9yZCB0aGlzIHNtYWxsIGFkZGl0aW9uYWwgZm9vdHByaW50CiAKICAgICBpbnQgICAgICAgICAgICAgICAgIHg7Ci0gICAgc3RydWN0IGRldl9tY19saXN0ICAqbWNsaXN0OworICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogICAgIHN0cnVjdCB3bF9wcml2YXRlICAgKmxwID0gd2xfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGxvbmcgICAgICAgZmxhZ3M7CiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTA3MCwxMyArMTA3MCwxMSBAQAogICAgICAgICAgICAgKCBkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCApID8gIk11bHRpY2FzdCAiIDogIiIsCiAgICAgICAgICAgICAoIGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgKSA/ICJBbGwtTXVsdGljYXN0IiA6ICIiICk7CiAKLSAgICAgICAgREJHX1BSSU5UKCAiICBtY19jb3VudDogJWRcbiIsIGRldi0+bWNfY291bnQgKTsKKyAgICAgICAgREJHX1BSSU5UKCAiICBtY19jb3VudDogJWRcbiIsIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAotICAgICAgICBmb3IoIHggPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiB4IDwgZGV2LT5tY19jb3VudDsKLSAgICAgICAgICAgICB4KyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCApIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikKICAgICAgICAgICAgIERCR19QUklOVCggIiAgICAlcyAoJWQpXG4iLCBEYmdId0FkZHIobWNsaXN0LT5kbWlfYWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgIG1jbGlzdC0+ZG1pX2FkZHJsZW4gKTsKLSAgICAgICAgfQogICAgIH0KICNlbmRpZiAvKiBEQkcgKi8KIApAQCAtMTEwMyw3ICsxMTAxLDcgQEAKICAgICAgICAgICAgICAgICBEQkdfUFJJTlQoICJFbmFibGluZyBQcm9taXNjdW91cyBtb2RlIChJRkZfUFJPTUlTQylcbiIgKTsKICAgICAgICAgICAgICAgICBoY2ZfcHV0X2luZm8oICYoIGxwLT5oY2ZDdHggKSwgKExUVlApJiggbHAtPmx0dlJlY29yZCApKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoKCBkZXYtPm1jX2NvdW50ID4gSENGX01BWF9NVUxUSUNBU1QgKSB8fAorICAgICAgICAgICAgZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gSENGX01BWF9NVUxUSUNBU1QpIHx8CiAgICAgICAgICAgICAgICAgICAgICggZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSApKSB7CiAgICAgICAgICAgICAgICAgLyogU2h1dHRpbmcgb2ZmIHRoaXMgZmlsdGVyIHdpbGwgZW5hYmxlIGFsbCBtdWx0aWNhc3QgZnJhbWVzIHRvCiAgICAgICAgICAgICAgICAgICAgYmUgc2VudCB1cCBmcm9tIHRoZSBkZXZpY2U7IGhvd2V2ZXIsIHRoaXMgaXMgYSBzdGF0aWMgUklELCBzbwpAQCAtMTExNSwxNyArMTExMywxNSBAQAogICAgICAgICAgICAgICAgIGhjZl9wdXRfaW5mbyggJiggbHAtPmhjZkN0eCApLCAoTFRWUCkmKCBscC0+bHR2UmVjb3JkICkpOwogICAgICAgICAgICAgICAgIHdsX2FwcGx5KCBscCApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggZGV2LT5tY19jb3VudCAhPSAwICkgeworICAgICAgICAgICAgZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzICovCi0gICAgICAgICAgICAgICAgbHAtPmx0dlJlY29yZC5sZW4gPSAoIGRldi0+bWNfY291bnQgKiAzICkgKyAxOworICAgICAgICAgICAgICAgIGxwLT5sdHZSZWNvcmQubGVuID0gKCBuZXRkZXZfbWNfY291bnQoZGV2KSAqIDMgKSArIDE7CiAgICAgICAgICAgICAgICAgbHAtPmx0dlJlY29yZC50eXAgPSBDRkdfR1JPVVBfQUREUjsKIAotICAgICAgICAgICAgICAgIGZvciggeCA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLSAgICAgICAgICAgICAgICAoIHggPCBkZXYtPm1jX2NvdW50ICkgJiYgKCBtY2xpc3QgIT0gTlVMTCApOwotICAgICAgICAgICAgICAgICAgICB4KyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCApIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCAmKCBscC0+bHR2UmVjb3JkLnUudThbeCAqIEVUSF9BTEVOXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOICk7Ci0gICAgICAgICAgICAgICAgfQorCQl4ID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpCisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmKGxwLT5sdHZSZWNvcmQudS51OFt4KysgKiBFVEhfQUxFTl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4pOwogICAgICAgICAgICAgICAgIERCR19QUklOVCggIlNldHRpbmcgbXVsdGljYXN0IGxpc3RcbiIgKTsKICAgICAgICAgICAgICAgICBoY2ZfcHV0X2luZm8oICYoIGxwLT5oY2ZDdHggKSwgKExUVlApJiggbHAtPmx0dlJlY29yZCApKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTk0LDkgKzExOTAsNyBAQAogICAgIC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gJndsX2FkYXB0ZXJfY2xvc2UsCiAgICAgLm5kb19kb19pb2N0bCAgICAgICAgICAgPSAmd2xfaW9jdGwsCiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKICAgICAubmRvX3R4X3RpbWVvdXQgICAgICAgICA9ICZ3bF90eF90aW1lb3V0LAotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogICAgIC5uZG9fcG9sbF9jb250cm9sbGVyICAgID0gd2xfcG9sbCwKQEAgLTEyNzAsOSArMTI2NCw3IEBACiAgICAgZGV2LT5zdG9wICAgICAgICAgICAgICAgPSAmd2xfYWRhcHRlcl9jbG9zZTsKICAgICBkZXYtPmRvX2lvY3RsICAgICAgICAgICA9ICZ3bF9pb2N0bDsKIAotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAogICAgIGRldi0+dHhfdGltZW91dCAgICAgICAgID0gJndsX3R4X3RpbWVvdXQ7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAgICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSB3bF9wb2xsOwpAQCAtMTI4MCw5ICsxMjcyLDcgQEAKIAogI2VuZGlmIC8vIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMzApKQogCi0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyAgICAgPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKICAgICBkZXYtPmV0aHRvb2xfb3BzCSAgICA9ICZ3bF9ldGh0b29sX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggODFhYWM3Zi4uNmE1OGNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0yMSw2ICsyMSw3IEBACiAJZGVmYXVsdCB5IGlmIFVTQl9BUkNIX0hBU19FSENJCiAJZGVmYXVsdCB5IGlmIFBDTUNJQSAmJiAhTTMyUgkJCSMgc2w4MTFfY3MKIAlkZWZhdWx0IHkgaWYgQVJNCQkJCSMgU0wtODExCisJZGVmYXVsdCB5IGlmIEJMQUNLRklOCQkJCSMgU0wtODExCiAJZGVmYXVsdCB5IGlmIFNVUEVSSAkJCQkjIHI4YTY2NTk3LWhjZAogCWRlZmF1bHQgUENJCiAKQEAgLTM5LDYgKzQwLDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9QTlg0MDA4ICYmIEkyQwogCWRlZmF1bHQgeSBpZiBNRkRfVEM2MzkzWEIKIAlkZWZhdWx0IHkgaWYgQVJDSF9XOTBYOTAwCisJZGVmYXVsdCB5IGlmIEFSQ0hfREFWSU5DSV9EQThYWAogCSMgUFBDOgogCWRlZmF1bHQgeSBpZiBTVEIwM3h4eAogCWRlZmF1bHQgeSBpZiBQUENfTVBDNTJ4eApAQCAtNjEsNyArNjMsNyBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX1c5MFg5MDAKIAlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxU0FNOUc0NQogCWRlZmF1bHQgeSBpZiBBUkNIX01YQwotCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDMKIAlkZWZhdWx0IFBDSQogCiAjIEFSTSBTQTExMTEgY2hpcHMgaGF2ZSBhIG5vbi1QQ0kgYmFzZWQgIk9IQ0ktY29tcGF0aWJsZSIgVVNCIGhvc3QgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCBiZTNjOWI4Li44MGI0MDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX0hXQV9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX0lTUDE3NjBfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9JTVgyMV9IQ0QpCSs9IGhvc3QvCiAKIG9iai0kKENPTkZJR19VU0JfQzY3WDAwX0hDRCkJKz0gYzY3eDAwLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKaW5kZXggNTY4MDJkMi4uYzg5OTkwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgV29vZGhvdXNlLCBEdW5jYW4gU2FuZHMsIFJvbWFuIEthZ2FuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IER1bmNhbiBTYW5kcywgUm9tYW4gS2FnYW4gKHJrYWdhbiAlIG1haWwgISBydSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2ltb24gQXJsb3R0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFNpbW9uIEFybG90dAogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC00Myw3ICs0NCw3IEBACiAjaW5jbHVkZSAidXNiYXRtLmgiCiAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiUm9tYW4gS2FnYW4sIERhdmlkIFdvb2Rob3VzZSwgRHVuY2FuIFNhbmRzLCBTaW1vbiBBcmxvdHQiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjQiCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJDb25leGFudCBBY2Nlc3NSdW5uZXIgQURTTCBVU0IgbW9kZW0gZHJpdmVyIgogCiBzdGF0aWMgY29uc3QgY2hhciBjeGFjcnVfZHJpdmVyX25hbWVbXSA9ICJjeGFjcnUiOwpAQCAtNTIsNiArNTMsNyBAQAogI2RlZmluZSBDWEFDUlVfRVBfREFUQQkJMHgwMgkvKiBCdWxrIGluL291dCAqLwogCiAjZGVmaW5lIENNRF9QQUNLRVRfU0laRQkJNjQJLyogU2hvdWxkIGJlIG1heHBhY2tldChlcCk/ICovCisjZGVmaW5lIENNRF9NQVhfQ09ORklHCQkoKENNRF9QQUNLRVRfU0laRSAvIDQgLSAxKSAvIDIpCiAKIC8qIEFkZHJlc3NlcyAqLwogI2RlZmluZSBQTExGQ0xLX0FERFIJMHgwMDM1MDA2OApAQCAtMTA1LDYgKzEwNywyNiBAQAogCUNNX1JFUVVFU1RfTUFYLAogfTsKIAorLyogY29tbWFuZHMgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGZsYXNoIG1lbW9yeQorICoKKyAqIHJlYWQ6ICByZXNwb25zZSBpcyB0aGUgY29udGVudHMgb2YgdGhlIGZpcnN0IDYwIGJ5dGVzIG9mIGZsYXNoIG1lbW9yeQorICogd3JpdGU6IHJlcXVlc3QgY29udGFpbnMgdGhlIDYwIGJ5dGVzIG9mIGRhdGEgdG8gd3JpdGUgdG8gZmxhc2ggbWVtb3J5CisgKiAgICAgICAgcmVzcG9uc2UgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaXJzdCA2MCBieXRlcyBvZiBmbGFzaCBtZW1vcnkKKyAqCisgKiBsYXlvdXQ6IFBQIFBQIFZWIFZWICBNTSBNTSBNTSBNTSAgTU0gTU0gPz8gPz8gIFNTIFNTIFNTIFNTICBTUyBTUyBTUyBTUworICogICAgICAgICBTUyBTUyBTUyBTUyAgU1MgU1MgU1MgU1MgIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAKKyAqICAgICAgICAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIDAwCisgKgorICogICBQOiBsZTE2ICBVU0IgUHJvZHVjdCBJRAorICogICBWOiBsZTE2ICBVU0IgVmVuZG9yIElECisgKiAgIE06IGJlNDggIE1BQyBBZGRyZXNzCisgKiAgIFM6IGxlMTYgIEFTQ0lJIFNlcmlhbCBOdW1iZXIKKyAqLworZW51bSBjeGFjcnVfY21fZmxhc2ggeworCUNNX0ZMQVNIX1JFQUQgPSAweGExLAorCUNNX0ZMQVNIX1dSSVRFID0gMHhhMgorfTsKKwogLyogcmVwbHkgY29kZXMgdG8gdGhlIGNvbW1hbmRzIGFib3ZlICovCiBlbnVtIGN4YWNydV9jbV9zdGF0dXMgewogCUNNX1NUQVRVU19VTkRFRklORUQsCkBAIC0xOTYsMjMgKzIxOCwzMiBAQAogc3RhdGljIERFVklDRV9BVFRSKF9uYW1lLCBTX0lXVVNSIHwgU19JUlVHTywgXAogCWN4YWNydV9zeXNmc19zaG93XyMjX25hbWUsIGN4YWNydV9zeXNmc19zdG9yZV8jI19uYW1lKQogCisjZGVmaW5lIENYQUNSVV9TRVRfSU5JVChfbmFtZSkgXAorc3RhdGljIERFVklDRV9BVFRSKF9uYW1lLCBTX0lXVVNSLCBcCisJTlVMTCwgY3hhY3J1X3N5c2ZzX3N0b3JlXyMjX25hbWUpCisKICNkZWZpbmUgQ1hBQ1JVX0FUVFJfSU5JVChfdmFsdWUsIF90eXBlLCBfbmFtZSkgXAogc3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCiB7IFwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsgXAotCXN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsgXAotCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB1c2JhdG1faW5zdGFuY2UtPmRyaXZlcl9kYXRhOyBcCisJc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YShcCisJCXRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7IFwKK1wKKwlpZiAoaW5zdGFuY2UgPT0gTlVMTCkgXAorCQlyZXR1cm4gLUVOT0RFVjsgXAorXAogCXJldHVybiBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfIyNfdHlwZShpbnN0YW5jZS0+Y2FyZF9pbmZvW192YWx1ZV0sIGJ1Zik7IFwKIH0gXAogQ1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpCiAKICNkZWZpbmUgQ1hBQ1JVX0FUVFJfQ1JFQVRFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfQ1JFQVRFX0ZJTEUoX25hbWUpCiAjZGVmaW5lIENYQUNSVV9DTURfQ1JFQVRFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX0NSRUFURV9GSUxFKF9uYW1lKQorI2RlZmluZSBDWEFDUlVfU0VUX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSkKICNkZWZpbmUgQ1hBQ1JVX19BVFRSX0NSRUFURShfbmFtZSkgICAgICAgIENYQUNSVV9ERVZJQ0VfQ1JFQVRFX0ZJTEUoX25hbWUpCiAKICNkZWZpbmUgQ1hBQ1JVX0FUVFJfUkVNT1ZFKF92LCBfdCwgX25hbWUpIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpCiAjZGVmaW5lIENYQUNSVV9DTURfUkVNT1ZFKF9uYW1lKSAgICAgICAgICBDWEFDUlVfREVWSUNFX1JFTU9WRV9GSUxFKF9uYW1lKQorI2RlZmluZSBDWEFDUlVfU0VUX1JFTU9WRShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9SRU1PVkVfRklMRShfbmFtZSkKICNkZWZpbmUgQ1hBQ1JVX19BVFRSX1JFTU9WRShfbmFtZSkgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpCiAKIHN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl91MzIodTMyIHZhbHVlLCBjaGFyICpidWYpCkBAIC0yNjcsMTIgKzI5OCwxMiBAQAogc3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3Nob3dhdHRyX01PRFUodTMyIHZhbHVlLCBjaGFyICpidWYpCiB7CiAJc3RhdGljIGNoYXIgKnN0cltdID0gewotCQkJTlVMTCwKKwkJCSIiLAogCQkJIkFOU0kgVDEuNDEzIiwKIAkJCSJJVFUtVCBHLjk5Mi4xIChHLkRNVCkiLAogCQkJIklUVS1UIEcuOTkyLjIgKEcuTElURSkiCiAJfTsKLQlpZiAodW5saWtlbHkodmFsdWUgPj0gQVJSQVlfU0laRShzdHIpIHx8IHN0clt2YWx1ZV0gPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KHZhbHVlID49IEFSUkFZX1NJWkUoc3RyKSkpCiAJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWx1ZSk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHN0clt2YWx1ZV0pOwogfQpAQCAtMjg4LDIyICszMTksMjggQEAKIHN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldiA9IHVzYmF0bV9pbnN0YW5jZS0+YXRtX2RldjsKKwlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKAorCQkJdG9fdXNiX2ludGVyZmFjZShkZXYpKTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwTVxuIiwgYXRtX2Rldi0+ZXNpKTsKKwlpZiAoaW5zdGFuY2UgPT0gTlVMTCB8fCBpbnN0YW5jZS0+dXNiYXRtLT5hdG1fZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXBNXG4iLAorCQlpbnN0YW5jZS0+dXNiYXRtLT5hdG1fZGV2LT5lc2kpOwogfQogCiBzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd19hZHNsX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdXNiYXRtX2luc3RhbmNlLT5kcml2ZXJfZGF0YTsKLQl1MzIgdmFsdWUgPSBpbnN0YW5jZS0+Y2FyZF9pbmZvW0NYSU5GX0xJTkVfU1RBUlRBQkxFXTsKLQogCXN0YXRpYyBjaGFyICpzdHJbXSA9IHsgInJ1bm5pbmciLCAic3RvcHBlZCIgfTsKKwlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKAorCQkJdG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwl1MzIgdmFsdWU7CisKKwlpZiAoaW5zdGFuY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2YWx1ZSA9IGluc3RhbmNlLT5jYXJkX2luZm9bQ1hJTkZfTElORV9TVEFSVEFCTEVdOwogCWlmICh1bmxpa2VseSh2YWx1ZSA+PSBBUlJBWV9TSVpFKHN0cikpKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgdmFsdWUpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzdHJbdmFsdWVdKTsKQEAgLTMxMiw5ICszNDksOCBAQAogc3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3N0b3JlX2Fkc2xfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0Jc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHVzYmF0bV9pbnN0YW5jZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YSgKKwkJCXRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAJaW50IHJldDsKIAlpbnQgcG9sbCA9IC0xOwogCWNoYXIgc3RyX2NtZFs4XTsKQEAgLTMyOCwxMyArMzY0LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXJldCA9IDA7CiAKKwlpZiAoaW5zdGFuY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnN0YW5jZS0+YWRzbF9zdGF0ZV9zZXJpYWxpemUpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCFzdHJjbXAoc3RyX2NtZCwgInN0b3AiKSB8fCAhc3RyY21wKHN0cl9jbWQsICJyZXN0YXJ0IikpIHsKIAkJcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApOwogCQlpZiAocmV0IDwgMCkgewotCQkJYXRtX2Vycih1c2JhdG1faW5zdGFuY2UsICJjaGFuZ2UgYWRzbCBzdGF0ZToiCisJCQlhdG1fZXJyKGluc3RhbmNlLT51c2JhdG0sICJjaGFuZ2UgYWRzbCBzdGF0ZToiCiAJCQkJIiBDSElQX0FEU0xfTElORV9TVE9QIHJldHVybmVkICVkXG4iLCByZXQpOwogCiAJCQlyZXQgPSAtRUlPOwpAQCAtMzU0LDcgKzM5Myw3IEBACiAJaWYgKCFzdHJjbXAoc3RyX2NtZCwgInN0YXJ0IikgfHwgIXN0cmNtcChzdHJfY21kLCAicmVzdGFydCIpKSB7CiAJCXJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgImNoYW5nZSBhZHNsIHN0YXRlOiIKKwkJCWF0bV9lcnIoaW5zdGFuY2UtPnVzYmF0bSwgImNoYW5nZSBhZHNsIHN0YXRlOiIKIAkJCQkiIENISVBfQURTTF9MSU5FX1NUQVJUIHJldHVybmVkICVkXG4iLCByZXQpOwogCiAJCQlyZXQgPSAtRUlPOwpAQCAtNDA3LDYgKzQ0Niw3MiBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIENNX1JFUVVFU1RfQ0FSRF9EQVRBX0dFVCB0aW1lcyBvdXQsIHNvIG5vIHNob3cgYXR0cmlidXRlICovCisKK3N0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zdG9yZV9hZHNsX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoCisJCQl0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwlpbnQgcmV0LCBwb3MsIG51bTsKKwlfX2xlMzIgZGF0YVtDTURfUEFDS0VUX1NJWkUgLyA0XTsKKworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlpZiAoaW5zdGFuY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb3MgPSAwOworCW51bSA9IDA7CisJd2hpbGUgKHBvcyA8IGxlbikgeworCQlpbnQgdG1wOworCQl1MzIgaW5kZXg7CisJCXUzMiB2YWx1ZTsKKworCQlyZXQgPSBzc2NhbmYoYnVmICsgcG9zLCAiJXg9JXglbiIsICZpbmRleCwgJnZhbHVlLCAmdG1wKTsKKwkJaWYgKHJldCA8IDIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IDB4N2YpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcG9zICs9IHRtcDsKKworCQkvKiBza2lwIHRyYWlsaW5nIG5ld2xpbmUgKi8KKwkJaWYgKGJ1Zltwb3NdID09ICdcbicgJiYgcG9zID09IGxlbi0xKQorCQkJcG9zKys7CisKKwkJZGF0YVtudW0gKiAyICsgMV0gPSBjcHVfdG9fbGUzMihpbmRleCk7CisJCWRhdGFbbnVtICogMiArIDJdID0gY3B1X3RvX2xlMzIodmFsdWUpOworCQludW0rKzsKKworCQkvKiBzZW5kIGNvbmZpZyB2YWx1ZXMgd2hlbiBkYXRhIGJ1ZmZlciBpcyBmdWxsCisJCSAqIG9yIG5vIG1vcmUgZGF0YQorCQkgKi8KKwkJaWYgKHBvcyA+PSBsZW4gfHwgbnVtID49IENNRF9NQVhfQ09ORklHKSB7CisJCQljaGFyIGxvZ1tDTURfTUFYX0NPTkZJRyAqIDEyICsgMV07IC8qICUwMng9JTA4eCAqLworCisJCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIobnVtKTsKKwkJCXJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0RBVEFfU0VULAorCQkJCSh1OCAqKSBkYXRhLCA0ICsgbnVtICogOCwgTlVMTCwgMCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWF0bV9lcnIoaW5zdGFuY2UtPnVzYmF0bSwKKwkJCQkJInNldCBjYXJkIGRhdGEgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCWZvciAodG1wID0gMDsgdG1wIDwgbnVtOyB0bXArKykKKwkJCQlzbnByaW50Zihsb2cgKyB0bXAqMTIsIDEzLCAiICUwMng9JTA4eCIsCisJCQkJCWxlMzJfdG9fY3B1KGRhdGFbdG1wICogMiArIDFdKSwKKwkJCQkJbGUzMl90b19jcHUoZGF0YVt0bXAgKiAyICsgMl0pKTsKKwkJCWF0bV9pbmZvKGluc3RhbmNlLT51c2JhdG0sICJjb25maWclc1xuIiwgbG9nKTsKKwkJCW51bSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCiAvKgogICogQWxsIGRldmljZSBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiBDWEFDUlVfQUxMX0ZJTEVTCiAgKiBzbyB0aGF0IHRoZSBzYW1lIGxpc3QgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXM6CkBAIC00NDIsNyArNTQ3LDggQEAKIENYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9BRFNMX0hFQURFTkQsICAgICAgICAgICAgICB1MzIsICBhZHNsX2hlYWRlbmQpOyBcCiBDWEFDUlVfQVRUUl8jI19hY3Rpb24oQ1hJTkZfQURTTF9IRUFERU5EX0VOVklST05NRU5ULCAgdTMyLCAgYWRzbF9oZWFkZW5kX2Vudmlyb25tZW50KTsgXAogQ1hBQ1JVX0FUVFJfIyNfYWN0aW9uKENYSU5GX0NPTlRST0xMRVJfVkVSU0lPTiwgICAgICAgIHUzMiwgIGFkc2xfY29udHJvbGxlcl92ZXJzaW9uKTsgXAotQ1hBQ1JVX0NNRF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfc3RhdGUpOworQ1hBQ1JVX0NNRF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfc3RhdGUpOyBcCitDWEFDUlVfU0VUXyMjX2FjdGlvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRzbF9jb25maWcpOwogCiBDWEFDUlVfQUxMX0ZJTEVTKElOSVQpOwogCkBAIC01OTYsNyArNzAyLDcgQEAKIAlsZW4gPSByZXQgLyA0OwogCWZvciAob2ZmYiA9IDA7IG9mZmIgPCBsZW47ICkgewogCQlpbnQgbCA9IGxlMzJfdG9fY3B1KGJ1ZltvZmZiKytdKTsKLQkJaWYgKGwgPiBzdHJpZGUgfHwgbCA+IChsZW4gLSBvZmZiKSAvIDIpIHsKKwkJaWYgKGwgPCAwIHx8IGwgPiBzdHJpZGUgfHwgbCA+IChsZW4gLSBvZmZiKSAvIDIpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQkJdXNiX2VycihpbnN0YW5jZS0+dXNiYXRtLCAiaW52YWxpZCBkYXRhIGxlbmd0aCBmcm9tIGNtICUjeDogJWRcbiIsCiAJCQkJCWNtLCBsKTsKQEAgLTY0OSw5ICs3NTUsNiBAQAogewogCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB1c2JhdG1faW5zdGFuY2UtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdXNiYXRtX2luc3RhbmNlLT51c2JfaW50ZjsKLQkvKgotCXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2ID0gdXNiYXRtX2luc3RhbmNlLT5hdG1fZGV2OwotCSovCiAJaW50IHJldDsKIAlpbnQgc3RhcnRfcG9sbGluZyA9IDE7CiAKQEAgLTY5Nyw2ICs4MDAsOSBAQAogCW11dGV4X3VubG9jaygmaW5zdGFuY2UtPnBvbGxfc3RhdGVfc2VyaWFsaXplKTsKIAltdXRleF91bmxvY2soJmluc3RhbmNlLT5hZHNsX3N0YXRlX3NlcmlhbGl6ZSk7CiAKKwlwcmludGsoS0VSTl9JTkZPICIlcyVkOiAlcyAlcE1cbiIsIGF0bV9kZXYtPnR5cGUsIGF0bV9kZXYtPm51bWJlciwKKwkJCXVzYmF0bV9pbnN0YW5jZS0+ZGVzY3JpcHRpb24sIGF0bV9kZXYtPmVzaSk7CisKIAlpZiAoc3RhcnRfcG9sbGluZykKIAkJY3hhY3J1X3BvbGxfc3RhdHVzKCZpbnN0YW5jZS0+cG9sbF93b3JrLndvcmspOwogCXJldHVybiAwOwpAQCAtODczLDExICs5NzksOSBAQAogCiBzdGF0aWMgdm9pZCBjeGFjcnVfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsCiAJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJwLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2YpCisJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpicCkKIHsKIAlpbnQgcmV0OwotCWludCBvZmY7CiAJc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0gPSBpbnN0YW5jZS0+dXNiYXRtOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXNiYXRtLT51c2JfZGV2OwogCV9fbGUxNiBzaWduYXR1cmVbXSA9IHsgdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciwKQEAgLTkxMSw2ICsxMDE1LDcgQEAKIAl9CiAKIAkvKiBGaXJtd2FyZSAqLworCXVzYl9pbmZvKHVzYmF0bSwgImxvYWRpbmcgZmlybXdhcmVcbiIpOwogCXJldCA9IGN4YWNydV9mdyh1c2JfZGV2LCBGV19XUklURV9NRU0sIDB4MiwgMHgwLCBGV19BRERSLCBmdy0+ZGF0YSwgZnctPnNpemUpOwogCWlmIChyZXQpIHsKIAkJdXNiX2Vycih1c2JhdG0sICJGaXJtd2FyZSB1cGxvYWQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKQEAgLTkxOSw2ICsxMDI0LDcgQEAKIAogCS8qIEJvb3QgUk9NIHBhdGNoICovCiAJaWYgKGluc3RhbmNlLT5tb2RlbV90eXBlLT5ib290X3JvbV9wYXRjaCkgeworCQl1c2JfaW5mbyh1c2JhdG0sICJsb2FkaW5nIGJvb3QgUk9NIHBhdGNoXG4iKTsKIAkJcmV0ID0gY3hhY3J1X2Z3KHVzYl9kZXYsIEZXX1dSSVRFX01FTSwgMHgyLCAweDAsIEJSX0FERFIsIGJwLT5kYXRhLCBicC0+c2l6ZSk7CiAJCWlmIChyZXQpIHsKIAkJCXVzYl9lcnIodXNiYXRtLCAiQm9vdCBST00gcGF0Y2hpbmcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKQEAgLTkzMyw2ICsxMDM5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorCXVzYl9pbmZvKHVzYmF0bSwgInN0YXJ0aW5nIGRldmljZVxuIik7CiAJaWYgKGluc3RhbmNlLT5tb2RlbV90eXBlLT5ib290X3JvbV9wYXRjaCkgewogCQl2YWwgPSBjcHVfdG9fbGUzMihCUl9BRERSKTsKIAkJcmV0ID0gY3hhY3J1X2Z3KHVzYl9kZXYsIEZXX1dSSVRFX01FTSwgMHgyLCAweDAsIEJSX1NUQUNLX0FERFIsICh1OCAqKSAmdmFsLCA0KTsKQEAgLTk1OCwyNiArMTA2NSw2IEBACiAJCXVzYl9lcnIodXNiYXRtLCAibW9kZW0gZmFpbGVkIHRvIGluaXRpYWxpemU6ICVkXG4iLCByZXQpOwogCQlyZXR1cm47CiAJfQotCi0JLyogTG9hZCBjb25maWcgZGF0YSAobGUzMiksIGRvaW5nIG9uZSBwYWNrZXQgYXQgYSB0aW1lICovCi0JaWYgKGNmKQotCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGNmLT5zaXplIC8gNDsgKSB7Ci0JCQlfX2xlMzIgYnVmW0NNRF9QQUNLRVRfU0laRSAvIDQgLSAxXTsKLQkJCWludCBpLCBsZW4gPSBtaW5fdChpbnQsIGNmLT5zaXplIC8gNCAtIG9mZiwgQ01EX1BBQ0tFVF9TSVpFIC8gNCAvIDIgLSAxKTsKLQkJCWJ1ZlswXSA9IGNwdV90b19sZTMyKGxlbik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIG9mZisrKSB7Ci0JCQkJYnVmW2kgKiAyICsgMV0gPSBjcHVfdG9fbGUzMihvZmYpOwotCQkJCW1lbWNweShidWYgKyBpICogMiArIDIsIGNmLT5kYXRhICsgb2ZmICogNCwgNCk7Ci0JCQl9Ci0JCQlyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCwKLQkJCQkJKHU4ICopIGJ1ZiwgbGVuLCBOVUxMLCAwKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJdXNiX2Vycih1c2JhdG0sICJsb2FkIGNvbmZpZyBkYXRhIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQltc2xlZXBfaW50ZXJydXB0aWJsZSg0MDAwKTsKIH0KIAogc3RhdGljIGludCBjeGFjcnVfZmluZF9maXJtd2FyZShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLApAQCAtMTAwMyw3ICsxMDkwLDcgQEAKIHN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsCiAJCQkgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZikKIHsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCAqYnAsICpjZjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCAqYnA7CiAJc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHVzYmF0bV9pbnN0YW5jZS0+ZHJpdmVyX2RhdGE7CiAKIAlpbnQgcmV0ID0gY3hhY3J1X2ZpbmRfZmlybXdhcmUoaW5zdGFuY2UsICJmdyIsICZmdyk7CkBAIC0xMDIxLDEzICsxMTA4LDggQEAKIAkJfQogCX0KIAotCWlmIChjeGFjcnVfZmluZF9maXJtd2FyZShpbnN0YW5jZSwgImNmIiwgJmNmKSkJCS8qIG9wdGlvbmFsICovCi0JCWNmID0gTlVMTDsKKwljeGFjcnVfdXBsb2FkX2Zpcm13YXJlKGluc3RhbmNlLCBmdywgYnApOwogCi0JY3hhY3J1X3VwbG9hZF9maXJtd2FyZShpbnN0YW5jZSwgZncsIGJwLCBjZik7Ci0KLQlpZiAoY2YpCi0JCXJlbGVhc2VfZmlybXdhcmUoY2YpOwogCWlmIChpbnN0YW5jZS0+bW9kZW1fdHlwZS0+Ym9vdF9yb21fcGF0Y2gpCiAJCXJlbGVhc2VfZmlybXdhcmUoYnApOwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IGZiZWE4NTYuLjliNTNlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTEzMzMsNiArMTMzMyw3IEBACiAJaWYgKGluc3RhbmNlLT5hdG1fZGV2KSB7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZpbnN0YW5jZS0+YXRtX2Rldi0+Y2xhc3NfZGV2LmtvYmosICJkZXZpY2UiKTsKIAkJYXRtX2Rldl9kZXJlZ2lzdGVyKGluc3RhbmNlLT5hdG1fZGV2KTsKKwkJaW5zdGFuY2UtPmF0bV9kZXYgPSBOVUxMOwogCX0KIAogCXVzYmF0bV9wdXRfaW5zdGFuY2UoaW5zdGFuY2UpOwkvKiB0YWtlbiBpbiB1c2JhdG1fdXNiX3Byb2JlICovCkBAIC0xMzQ4LDcgKzEzNDksNyBAQAogewogCWRiZygiJXM6IGRyaXZlciB2ZXJzaW9uICVzIiwgX19mdW5jX18sIERSSVZFUl9WRVJTSU9OKTsKIAotCWlmIChzaXplb2Yoc3RydWN0IHVzYmF0bV9jb250cm9sKSA+IHNpemVvZigoKHN0cnVjdCBza19idWZmICopIDApLT5jYikpIHsKKwlpZiAoc2l6ZW9mKHN0cnVjdCB1c2JhdG1fY29udHJvbCkgPiBGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGNiKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIHVudXNhYmxlIHdpdGggdGhpcyBrZXJuZWwhXG4iLCB1c2JhdG1fZHJpdmVyX25hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmggYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKaW5kZXggZjZmNDUwOC4uMDg2M2Y4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaApAQCAtMjA0LDQgKzIwNCwxOSBAQAogCXN0cnVjdCB1cmIgKnVyYnNbMF07CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgKnRvX3VzYmF0bV9kcml2ZXJfZGF0YShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZTsKKworCWlmIChpbnRmID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJdXNiYXRtX2luc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmICh1c2JhdG1faW5zdGFuY2UgPT0gTlVMTCkgLyogc2V0IE5VTEwgYmVmb3JlIHVuYmluZCgpICovCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHVzYmF0bV9pbnN0YW5jZS0+ZHJpdmVyX2RhdGE7IC8qIHNldCBOVUxMIGFmdGVyIHVuYmluZCgpICovCit9CisKICNlbmRpZgkvKiBfVVNCQVRNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYwppbmRleCA1NjMzYmM1Li4wMjllZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jCisrKyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtZHJ2LmMKQEAgLTEzNywxMyArMTM3LDEzIEBACiAJaWYgKCFjNjd4MDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJcGRldi0+bmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBidXN5XG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIHJlcXVlc3RfbWVtX2ZhaWxlZDsKIAl9Ci0JYzY3eDAwLT5ocGkuYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJYzY3eDAwLT5ocGkuYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWM2N3gwMC0+aHBpLmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBIUEkgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVJTzsKQEAgLTE4Miw3ICsxODIsNyBAQAogIHJlcXVlc3RfaXJxX2ZhaWxlZDoKIAlpb3VubWFwKGM2N3gwMC0+aHBpLmJhc2UpOwogIG1hcF9mYWlsZWQ6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogIHJlcXVlc3RfbWVtX2ZhaWxlZDoKIAlrZnJlZShjNjd4MDApOwogCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcykKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAogCWtmcmVlKGM2N3gwMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAzNGQ0ZWI5Li45NzVkNTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNzAsNiArMTcwLDcgQEAKIHsKIAl3Yi0+dXNlID0gMDsKIAlhY20tPnRyYW5zbWl0dGluZy0tOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhhY20tPmNvbnRyb2wpOwogfQogCiAvKgpAQCAtMjExLDkgKzIxMiwxMiBAQAogCX0KIAogCWRiZygiJXMgc3VzcF9jb3VudDogJWQiLCBfX2Z1bmNfXywgYWNtLT5zdXNwX2NvdW50KTsKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoYWNtLT5jb250cm9sKTsKIAlpZiAoYWNtLT5zdXNwX2NvdW50KSB7Ci0JCWFjbS0+ZGVsYXllZF93YiA9IHdiOwotCQlzY2hlZHVsZV93b3JrKCZhY20tPndha2VyKTsKKwkJaWYgKCFhY20tPmRlbGF5ZWRfd2IpCisJCQlhY20tPmRlbGF5ZWRfd2IgPSB3YjsKKwkJZWxzZQorCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKGFjbS0+Y29udHJvbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+d3JpdGVfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsJLyogQSB3aGl0ZSBsaWUgKi8KIAl9CkBAIC00MjQsNyArNDI4LDYgQEAKIAkJdGhyb3R0bGVkID0gYWNtLT50aHJvdHRsZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT50aHJvdHRsZV9sb2NrLCBmbGFncyk7CiAJCWlmICghdGhyb3R0bGVkKSB7Ci0JCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGJ1Zi0+c2l6ZSk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgYnVmLT5iYXNlLCBidWYtPnNpemUpOwogCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJfSBlbHNlIHsKQEAgLTUzNCwyMyArNTM3LDYgQEAKIAl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAotc3RhdGljIHZvaWQgYWNtX3dha2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2FrZXIpCi17Ci0Jc3RydWN0IGFjbSAqYWNtID0gY29udGFpbmVyX29mKHdha2VyLCBzdHJ1Y3QgYWNtLCB3YWtlcik7Ci0JaW50IHJ2OwotCi0JcnYgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKLQlpZiAocnYgPCAwKSB7Ci0JCWRldl9lcnIoJmFjbS0+ZGV2LT5kZXYsICJBdXRvcG0gZmFpbHVyZSBpbiAlc1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCWlmIChhY20tPmRlbGF5ZWRfd2IpIHsKLQkJYWNtX3N0YXJ0X3diKGFjbSwgYWNtLT5kZWxheWVkX3diKTsKLQkJYWNtLT5kZWxheWVkX3diID0gTlVMTDsKLQl9Ci0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7Ci19Ci0KIC8qCiAgKiBUVFkgaGFuZGxlcnMKICAqLwpAQCAtNTY2LDcgKzU1Miw3IEBACiAKIAlhY20gPSBhY21fdGFibGVbdHR5LT5pbmRleF07CiAJaWYgKCFhY20gfHwgIWFjbS0+ZGV2KQotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gb3V0OwogCWVsc2UKIAkJcnYgPSAwOwogCkBAIC01ODIsOCArNTY4LDkgQEAKIAogCW11dGV4X2xvY2soJmFjbS0+bXV0ZXgpOwogCWlmIChhY20tPnBvcnQuY291bnQrKykgeworCQltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOwogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKLQkJZ290byBkb25lOworCQlnb3RvIG91dDsKIAl9CiAKIAlhY20tPmN0cmx1cmItPmRldiA9IGFjbS0+ZGV2OwpAQCAtNjEyLDE4ICs1OTksMTggQEAKIAlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJmFjbS0+cG9ydC5mbGFncyk7CiAJcnYgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKTsKIAl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKLWRvbmU6CisKIAltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOwotZXJyX291dDoKK291dDoKIAltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCXJldHVybiBydjsKIAogZnVsbF9iYWlsb3V0OgogCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogYmFpbF9vdXQ6Ci0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CiAJYWNtLT5wb3J0LmNvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIGVhcmx5X2JhaWw6CiAJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIAl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOwpAQCAtMTAyMyw3ICsxMDEwLDcgQEAKIAkJY2FzZSBVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFOgogCQkJY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOwogCQkJY2FsbF9pbnRlcmZhY2VfbnVtID0gYnVmZmVyWzRdOwotCQkJaWYgKChjYWxsX21hbmFnZW1lbnRfZnVuY3Rpb24gJiAzKSAhPSAzKQorCQkJaWYgKCAocXVpcmtzICYgTk9UX0FfTU9ERU0pID09IDAgJiYgKGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiAmIDMpICE9IDMpCiAJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiVGhpcyBkZXZpY2UgY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uIEl0IGlzIG5vdCBhIG1vZGVtLlxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTExNzgsNyArMTE2NSw2IEBACiAJYWNtLT51cmJfdGFzay5mdW5jID0gYWNtX3J4X3Rhc2tsZXQ7CiAJYWNtLT51cmJfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjbTsKIAlJTklUX1dPUksoJmFjbS0+d29yaywgYWNtX3NvZnRpbnQpOwotCUlOSVRfV09SSygmYWNtLT53YWtlciwgYWNtX3dha2VyKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhY20tPmRyYWluX3dhaXQpOwogCXNwaW5fbG9ja19pbml0KCZhY20tPnRocm90dGxlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhY20tPndyaXRlX2xvY2spOwpAQCAtMTM0Myw3ICsxMzI5LDYgQEAKIAl0YXNrbGV0X2VuYWJsZSgmYWNtLT51cmJfdGFzayk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZhY20tPndvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJmFjbS0+d2FrZXIpOwogfQogCiBzdGF0aWMgdm9pZCBhY21fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTE0MzUsNiArMTQyMCw3IEBACiBzdGF0aWMgaW50IGFjbV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgYWNtX3diICp3YjsKIAlpbnQgcnYgPSAwOwogCWludCBjbnQ7CiAKQEAgLTE0NDksNiArMTQzNSwyMSBAQAogCW11dGV4X2xvY2soJmFjbS0+bXV0ZXgpOwogCWlmIChhY20tPnBvcnQuY291bnQpIHsKIAkJcnYgPSB1c2Jfc3VibWl0X3VyYihhY20tPmN0cmx1cmIsIEdGUF9OT0lPKTsKKworCQlzcGluX2xvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOworCQlpZiAoYWNtLT5kZWxheWVkX3diKSB7CisJCQl3YiA9IGFjbS0+ZGVsYXllZF93YjsKKwkJCWFjbS0+ZGVsYXllZF93YiA9IE5VTEw7CisJCQlzcGluX3VubG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CisJCQlhY21fc3RhcnRfd2IoYWNtLCBhY20tPmRlbGF5ZWRfd2IpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOworCQl9CisKKwkJLyoKKwkJICogZGVsYXllZCBlcnJvciBjaGVja2luZyBiZWNhdXNlIHdlIG11c3QKKwkJICogZG8gdGhlIHdyaXRlIHBhdGggYXQgYWxsIGNvc3QKKwkJICovCiAJCWlmIChydiA8IDApCiAJCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTE0NjAsNiArMTQ2MSwyMyBAQAogCXJldHVybiBydjsKIH0KIAorc3RhdGljIGludCBhY21fcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCW11dGV4X2xvY2soJmFjbS0+bXV0ZXgpOworCWlmIChhY20tPnBvcnQuY291bnQpIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmYWNtLT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X2hhbmd1cCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKKwlyZXR1cm4gYWNtX3Jlc3VtZShpbnRmKTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAjZGVmaW5lIE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oeCkgXApAQCAtMTQ3MSw3ICsxNDg5LDcgQEAKICAqIFVTQiBkcml2ZXIgc3RydWN0dXJlLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhY21faWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWNtX2lkc1tdID0gewogCS8qIHF1aXJreSBhbmQgYnJva2VuIGRldmljZXMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwODcwLCAweDAwMDEpLCAvKiBNZXRyaWNvbSBHUyBNb2RlbSAqLwogCS5kcml2ZXJfaW5mbyA9IE5PX1VOSU9OX05PUk1BTCwgLyogaGFzIG5vIHVuaW9uIGRlc2NyaXB0b3IgKi8KQEAgLTE1NzYsNiArMTU5NCwxMSBAQAogCiAJLyogTk9URTogbm9uLU5va2lhIENPTU0vQUNNLzB4ZmYgaXMgbGlrZWx5IE1TRlQgUk5ESVMuLi4gTk9UIGEgbW9kZW0hICovCiAKKwkvKiBTdXBwb3J0IExlZ28gTlhUIHVzaW5nIHBiTHVhIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDY5NCwgMHhmZjAwKSwKKwkuZHJpdmVyX2luZm8gPSBOT1RfQV9NT0RFTSwKKyAgICAgICAJfSwKKwogCS8qIGNvbnRyb2wgaW50ZXJmYWNlcyB3aXRoIHZhcmlvdXMgQVQtY29tbWFuZCBzZXRzICovCiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAogCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIpIH0sCkBAIC0xNjAyLDYgKzE2MjUsNyBAQAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0JYWNtX3N1c3BlbmQsCiAJLnJlc3VtZSA9CWFjbV9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CWFjbV9yZXNldF9yZXN1bWUsCiAjZW5kaWYKIAkuaWRfdGFibGUgPQlhY21faWRzLAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCmluZGV4IGM0YTBlZTguLjRhOGU4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKQEAgLTExMiw3ICsxMTIsNiBAQAogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBsaW5lOwkJLyogYml0cywgc3RvcCwgcGFyaXR5ICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CQkJLyogd29yayBxdWV1ZSBlbnRyeSBmb3IgbGluZSBkaXNjaXBsaW5lIHdha2luZyB1cCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3YWtlcjsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkcmFpbl93YWl0OwkJCS8qIGNsb3NlIHByb2Nlc3NpbmcgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdXJiX3Rhc2s7ICAgICAgICAgICAgICAgICAvKiByeCBwcm9jZXNzaW5nICovCiAJc3BpbmxvY2tfdCB0aHJvdHRsZV9sb2NrOwkJCS8qIHN5bmNocm9uaXplIHRocm90dGVsaW5nIGFuZCByZWFkIGNhbGxiYWNrICovCkBAIC0xMzcsMyArMTM2LDQgQEAKICNkZWZpbmUgTk9fVU5JT05fTk9STUFMCQkJMQogI2RlZmluZSBTSU5HTEVfUlhfVVJCCQkJMgogI2RlZmluZSBOT19DQVBfTElORQkJCTQKKyNkZWZpbmUgTk9UX0FfTU9ERU0JCQk4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKaW5kZXggM2U1NjRiZi4uMThhYWZjYjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk9saXZlciBOZXVrdW0iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yIFVTQiBXQ00gRGV2aWNlIE1hbmFnZW1lbnQiCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3ZG1faWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2RtX2lkc1tdID0gewogCXsKIAkJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAogCQkJCSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDliYzExMmUuLjkzYjVmODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtMTYzLDcgKzE2Myw2IEBACiAJdW5zaWduZWQgY2hhcgkJdXNlZDsJCQkvKiBUcnVlIGlmIG9wZW4gKi8KIAl1bnNpZ25lZCBjaGFyCQlwcmVzZW50OwkJLyogVHJ1ZSBpZiBub3QgZGlzY29ubmVjdGVkICovCiAJdW5zaWduZWQgY2hhcgkJYmlkaXI7CQkJLyogaW50ZXJmYWNlIGlzIGJpZGlyZWN0aW9uYWwgKi8KLQl1bnNpZ25lZCBjaGFyCQlzbGVlcGluZzsJCS8qIGludGVyZmFjZSBpcyBzdXNwZW5kZWQgKi8KIAl1bnNpZ25lZCBjaGFyCQlub19wYXBlcjsJCS8qIFBhcGVyIE91dCBoYXBwZW5lZCAqLwogCXVuc2lnbmVkIGNoYXIJCSpkZXZpY2VfaWRfc3RyaW5nOwkvKiBJRUVFIDEyODQgREVWSUNFIElEIHN0cmluZyAocHRyKSAqLwogCQkJCQkJCS8qIGZpcnN0IDIgYnl0ZXMgYXJlIChiaWctZW5kaWFuKSBsZW5ndGggKi8KQEAgLTE5MSw3ICsxOTAsNiBAQAogCWRiZygicXVpcmtzPSVkIiwgdXNibHAtPnF1aXJrcyk7CiAJZGJnKCJ1c2VkPSVkIiwgdXNibHAtPnVzZWQpOwogCWRiZygiYmlkaXI9JWQiLCB1c2JscC0+YmlkaXIpOwotCWRiZygic2xlZXBpbmc9JWQiLCB1c2JscC0+c2xlZXBpbmcpOwogCWRiZygiZGV2aWNlX2lkX3N0cmluZz1cIiVzXCIiLAogCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyA/CiAJCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyArIDIgOgpAQCAtMzc2LDcgKzM3NCw3IEBACiAKIHN0YXRpYyBpbnQgaGFuZGxlX2JpZGlyIChzdHJ1Y3QgdXNibHAgKnVzYmxwKQogewotCWlmICh1c2JscC0+YmlkaXIgJiYgdXNibHAtPnVzZWQgJiYgIXVzYmxwLT5zbGVlcGluZykgeworCWlmICh1c2JscC0+YmlkaXIgJiYgdXNibHAtPnVzZWQpIHsKIAkJaWYgKHVzYmxwX3N1Ym1pdF9yZWFkKHVzYmxwKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC01MDMsMTEgKzUwMSw2IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodXNibHAtPnNsZWVwaW5nKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KIAlkYmcoInVzYmxwX2lvY3RsOiBjbWQ9MHgleCAoJWMgbnI9JWQgbGVuPSVkIGRpcj0lZCkiLCBjbWQsIF9JT0NfVFlQRShjbWQpLAogCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpLCBfSU9DX0RJUihjbWQpICk7CiAKQEAgLTkxNCw4ICs5MDcsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNibHAtPmxvY2ssIGZsYWdzKTsKLQlpZiAodXNibHAtPnNsZWVwaW5nKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAobm9uYmxvY2spCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiAxOwpAQCAtOTY4LDggKzk1OSw2IEBACiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JscC0+bG9jaywgZmxhZ3MpOwotCWlmICh1c2JscC0+c2xlZXBpbmcpCi0JCXJldHVybiAtRU5PREVWOwogCWlmIChub25ibG9jaykKIAkJcmV0dXJuIC1FQUdBSU47CiAJcmV0dXJuIDE7CkBAIC0xMzc3LDEyICsxMzY2LDEwIEBACiAJbXV0ZXhfdW5sb2NrICgmdXNibHBfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IHVzYmxwX3N1c3BlbmQgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgdXNibHBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHVzYmxwICp1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCi0JLyogd2UgdGFrZSBubyBtb3JlIElPICovCi0JdXNibHAtPnNsZWVwaW5nID0gMTsKIAl1c2JscF91bmxpbmtfdXJicyh1c2JscCk7CiAjaWYgMCAvKiBYWFggRG8gd2Ugd2FudCB0aGlzPyBXaGF0IGlmIHNvbWVvbmUgaXMgcmVhZGluZywgc2hvdWxkIHdlIGZhaWw/ICovCiAJLyogbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGp1c3QgaW4gY2FzZSAqLwpAQCAtMTM5MywxOCArMTM4MCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmxwX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgaW50IHVzYmxwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAJaW50IHI7CiAKLQl1c2JscC0+c2xlZXBpbmcgPSAwOwogCXIgPSBoYW5kbGVfYmlkaXIgKHVzYmxwKTsKIAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNibHBfaWRzIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmxwX2lkc1tdID0gewogCXsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDEpIH0sCiAJeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMikgfSwKIAl7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAzKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCA3YzVmNGUzLi44NTg4YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtNDgsNyArNDgsNyBAQAogICovCiAjZGVmaW5lIFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTgkxMDAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnRtY19kZXZpY2VzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG1jX2RldmljZXNbXSA9IHsKIAl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQVBQX1NQRUMsIDMsIDApLCB9LAogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19BUFBfU1BFQywgMywgMSksIH0sCiAJeyAwLCB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKaW5kZXggYWQ5MjU5NC4uOTdhODE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpAQCAtOTEsOCArOTEsOCBAQAogCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgc2F5IE4gaGVyZS4KIAogY29uZmlnIFVTQl9TVVNQRU5ECi0JYm9vbCAiVVNCIHNlbGVjdGl2ZSBzdXNwZW5kL3Jlc3VtZSBhbmQgd2FrZXVwIgotCWRlcGVuZHMgb24gVVNCICYmIFBNCisJYm9vbCAiVVNCIHJ1bnRpbWUgcG93ZXIgbWFuYWdlbWVudCAoc3VzcGVuZC9yZXN1bWUgYW5kIHdha2V1cCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgUE1fUlVOVElNRQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHVzZSBkcml2ZXIgY2FsbHMgb3IgdGhlIHN5c2ZzCiAJICAicG93ZXIvbGV2ZWwiIGZpbGUgdG8gc3VzcGVuZCBvciByZXN1bWUgaW5kaXZpZHVhbCBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKaW5kZXggMzU1ZGZmYy4uYzgzYzk3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTExOCw2ICsxMTgsNyBAQAogICovCiAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkZXZpY2Vjb25uZGlzY3dxKTsKKy8qIGd1YXJkZWQgYnkgdXNiZnNfbXV0ZXggKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29ubmRpc2NldmNudDsKIAogLyogdGhpcyBzdHJ1Y3Qgc3RvcmVzIHRoZSBwb2xsIHN0YXRlIGZvciA8bW91bnRwb2ludD4vZGV2aWNlcyBwb2xsZXJzICovCkBAIC0xNTYsNyArMTU3LDkgQEAKIAogdm9pZCB1c2Jmc19jb25uX2Rpc2NfZXZlbnQodm9pZCkKIHsKKwltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7CiAJY29ubmRpc2NldmNudCsrOworCW11dGV4X3VubG9jaygmdXNiZnNfbXV0ZXgpOwogCXdha2VfdXAoJmRldmljZWNvbm5kaXNjd3EpOwogfQogCkBAIC02MjksNDIgKzYzMiwyOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCB1c2JfZGV2aWNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgKnN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyAqc3Q7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7CisJc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKCFzdCkgewogCQlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyksIEdGUF9LRVJORUwpOwotCi0JCS8qIHdlIG1heSBoYXZlIGRyb3BwZWQgQktMIC0KLQkJICogbmVlZCB0byBjaGVjayBmb3IgaGF2aW5nIGxvc3QgdGhlIHJhY2UgKi8KLQkJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkgewotCQkJa2ZyZWUoc3QpOwotCQkJc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCQlnb3RvIGxvc3RfcmFjZTsKLQkJfQotCQkvKiB3ZSBoYXZlbid0IGxvc3QgLSBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIG5vdyAqLwogCQlpZiAoIXN0KSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKIAkJCXJldHVybiBQT0xMSU47CiAJCX0KIAotCQkvKgotCQkgKiBuZWVkIHRvIHByZXZlbnQgdGhlIG1vZHVsZSBmcm9tIGJlaW5nIHVubG9hZGVkLCBzaW5jZQotCQkgKiBwcm9jX3VucmVnaXN0ZXIgZG9lcyBub3QgY2FsbCB0aGUgcmVsZWFzZSBtZXRob2QgYW5kCi0JCSAqIHdlIHdvdWxkIGhhdmUgYSBtZW1vcnkgbGVhawotCQkgKi8KIAkJc3QtPmxhc3RldiA9IGNvbm5kaXNjZXZjbnQ7CiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9IHN0OwogCQltYXNrID0gUE9MTElOOwogCX0KLWxvc3RfcmFjZToKKwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQogCQlwb2xsX3dhaXQoZmlsZSwgJmRldmljZWNvbm5kaXNjd3EsIHdhaXQpOwogCWlmIChzdC0+bGFzdGV2ICE9IGNvbm5kaXNjZXZjbnQpCiAJCW1hc2sgfD0gUE9MTElOOwogCXN0LT5sYXN0ZXYgPSBjb25uZGlzY2V2Y250OwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKIAlyZXR1cm4gbWFzazsKIH0KIApAQCAtNjg1LDcgKzY3NSw3IEBACiB7CiAJbG9mZl90IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJc3dpdGNoIChvcmlnKSB7CiAJY2FzZSAwOgpAQCAtNzAxLDcgKzY5MSw3IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCBhNjc4MTg2Li5lOTA5ZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIHsKIAlsb2ZmX3QgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlzd2l0Y2ggKG9yaWcpIHsKIAljYXNlIDA6CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzEwLDcgKzMxMCw4IEBACiAKIHN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJdm9pZCBfX3VzZXIgKnVzZXJ1cmIsIGludCBwaXBlLCB1bnNpZ25lZCBsZW5ndGgsCi0JCWludCB0aW1lb3V0X29yX3N0YXR1cywgZW51bSBzbm9vcF93aGVuIHdoZW4pCisJCWludCB0aW1lb3V0X29yX3N0YXR1cywgZW51bSBzbm9vcF93aGVuIHdoZW4sCisJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRhdGFfbGVuKQogewogCXN0YXRpYyBjb25zdCBjaGFyICp0eXBlc1tdID0geyJpc29jIiwgImludCIsICJjdHJsIiwgImJ1bGsifTsKIAlzdGF0aWMgY29uc3QgY2hhciAqZGlyc1tdID0geyJvdXQiLCAiaW4ifTsKQEAgLTM0NCw2ICszNDUsMTEgQEAKIAkJCQkJInN0YXR1cyAlZFxuIiwKIAkJCQkJZXAsIHQsIGQsIGxlbmd0aCwgdGltZW91dF9vcl9zdGF0dXMpOwogCX0KKworCWlmIChkYXRhICYmIGRhdGFfbGVuID4gMCkgeworCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiZGF0YTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMzIsIDEsCisJCQlkYXRhLCBkYXRhX2xlbiwgMSk7CisJfQogfQogCiAjZGVmaW5lIEFTX0NPTlRJTlVBVElPTgkxCkBAIC00MTAsNyArNDE2LDkgQEAKIAl9CiAJc25vb3AoJnVyYi0+ZGV2LT5kZXYsICJ1cmIgY29tcGxldGVcbiIpOwogCXNub29wX3VyYih1cmItPmRldiwgYXMtPnVzZXJ1cmIsIHVyYi0+cGlwZSwgdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkJYXMtPnN0YXR1cywgQ09NUExFVEUpOworCQkJYXMtPnN0YXR1cywgQ09NUExFVEUsCisJCQkoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSA/CisJCQkJTlVMTCA6IHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWlmIChhcy0+c3RhdHVzIDwgMCAmJiBhcy0+YnVsa19hZGRyICYmIGFzLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQgJiYKIAkJCWFzLT5zdGF0dXMgIT0gLUVOT0VOVCkKIAkJY2FuY2VsX2J1bGtfdXJicyhwcywgYXMtPmJ1bGtfYWRkcik7CkBAIC02NTMsMjAgKzY2MSwyMCBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JLyogUHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cyByZW1vdmFsIG9yIHJlbGVhc2UgKi8KLQltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7Ci0KIAlyZXQgPSAtRU5PTUVNOwogCXBzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHMpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3BzOwogCiAJcmV0ID0gLUVOT0RFVjsKIAorCS8qIFByb3RlY3QgYWdhaW5zdCBzaW11bHRhbmVvdXMgcmVtb3ZhbCBvciByZWxlYXNlICovCisJbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOworCiAJLyogdXNiZGV2IGRldmljZS1ub2RlICovCiAJaWYgKGltYWpvcihpbm9kZSkgPT0gVVNCX0RFVklDRV9NQUpPUikKIAkJZGV2ID0gdXNiZGV2X2xvb2t1cF9ieV9kZXZ0KGlub2RlLT5pX3JkZXYpOworCiAjaWZkZWYgQ09ORklHX1VTQl9ERVZJQ0VGUwogCS8qIHByb2NmcyBmaWxlICovCiAJaWYgKCFkZXYpIHsKQEAgLTY3OCwxMyArNjg2LDE5IEBACiAJCQlkZXYgPSBOVUxMOwogCX0KICNlbmRpZgotCWlmICghZGV2IHx8IGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQotCQlnb3RvIG91dDsKKwltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKKworCWlmICghZGV2KQorCQlnb3RvIG91dF9mcmVlX3BzOworCisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlnb3RvIG91dF91bmxvY2tfZGV2aWNlOworCiAJcmV0ID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9ja19kZXZpY2U7CiAKLQlyZXQgPSAwOwogCXBzLT5kZXYgPSBkZXY7CiAJcHMtPmZpbGUgPSBmaWxlOwogCXNwaW5fbG9ja19pbml0KCZwcy0+bG9jayk7CkBAIC03MDIsMTUgKzcxNiwxNiBAQAogCXNtcF93bWIoKTsKIAlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOworCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJc25vb3AoJmRldi0+ZGV2LCAib3BlbmVkIGJ5IHByb2Nlc3MgJWQ6ICVzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJCWN1cnJlbnQtPmNvbW0pOwotIG91dDoKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKHBzKTsKLQkJdXNiX3B1dF9kZXYoZGV2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ1c2Jmc19tdXRleCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CisKKyBvdXRfdW5sb2NrX2RldmljZToKKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCXVzYl9wdXRfZGV2KGRldik7Cisgb3V0X2ZyZWVfcHM6CisJa2ZyZWUocHMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyNCwxMCArNzM5LDcgQEAKIAl1c2JfbG9ja19kZXZpY2UoZGV2KTsKIAl1c2JfaHViX3JlbGVhc2VfYWxsX3BvcnRzKGRldiwgcHMpOwogCi0JLyogUHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBvcGVuICovCi0JbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOwogCWxpc3RfZGVsX2luaXQoJnBzLT5saXN0KTsKLQltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKIAogCWZvciAoaWZudW0gPSAwOyBwcy0+aWZjbGFpbWVkICYmIGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCk7CiAJCQlpZm51bSsrKSB7CkBAIC03NzAsNiArNzgyLDEzIEBACiAJaWYgKCF0YnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0bW8gPSBjdHJsLnRpbWVvdXQ7CisJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCB1cmI6IGJSZXF1ZXN0VHlwZT0lMDJ4ICIKKwkJImJSZXF1ZXN0PSUwMnggd1ZhbHVlPSUwNHggIgorCQkid0luZGV4PSUwNHggd0xlbmd0aD0lMDR4XG4iLAorCQljdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC5iUmVxdWVzdCwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud1ZhbHVlKSwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud0luZGV4KSwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud0xlbmd0aCkpOwogCWlmIChjdHJsLmJSZXF1ZXN0VHlwZSAmIDB4ODApIHsKIAkJaWYgKGN0cmwud0xlbmd0aCAmJiAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgY3RybC5kYXRhLAogCQkJCQkgICAgICAgY3RybC53TGVuZ3RoKSkgewpAQCAtNzc3LDE1ICs3OTYsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKTsKLQkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGN0cmwud0xlbmd0aCwgdG1vLCBTVUJNSVQsIE5VTEwsIDApOwogCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCBjdHJsLmJSZXF1ZXN0LAogCQkJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LAogCQkJCSAgICB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUpOwotCisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIG1heChpLCAwKSwgbWluKGksIDApLCBDT01QTEVURSwKKwkJCXRidWYsIGkpOwogCQlpZiAoKGkgPiAwKSAmJiBjdHJsLndMZW5ndGgpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoY3RybC5kYXRhLCB0YnVmLCBpKSkgewogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKQEAgLTgwMCwxNCArODE5LDE1IEBACiAJCQl9CiAJCX0KIAkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBjdHJsLndMZW5ndGgsIHRtbywgU1VCTUlUKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCwKKwkJCXRidWYsIGN0cmwud0xlbmd0aCk7CiAKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LAogCQkJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LAogCQkJCSAgICB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUpOworCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUsIE5VTEwsIDApOwogCX0KIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CiAJaWYgKGkgPCAwICYmIGkgIT0gLUVQSVBFKSB7CkBAIC04NTMsMTIgKzg3MywxMiBAQAogCQkJa2ZyZWUodGJ1Zik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4xLCB0bW8sIFNVQk1JVCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjEsIHRtbywgU1VCTUlULCBOVUxMLCAwKTsKIAogCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOwogCQlpID0gdXNiX2J1bGtfbXNnKGRldiwgcGlwZSwgdGJ1ZiwgbGVuMSwgJmxlbjIsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4yLCBpLCBDT01QTEVURSk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFLCB0YnVmLCBsZW4yKTsKIAogCQlpZiAoIWkgJiYgbGVuMikgewogCQkJaWYgKGNvcHlfdG9fdXNlcihidWxrLmRhdGEsIHRidWYsIGxlbjIpKSB7CkBAIC04NzMsMTIgKzg5MywxMiBAQAogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQl9Ci0JCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjEsIHRtbywgU1VCTUlUKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMSwgdG1vLCBTVUJNSVQsIHRidWYsIGxlbjEpOwogCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7Ci0JCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMiwgaSwgQ09NUExFVEUsIE5VTEwsIDApOwogCX0KIAlrZnJlZSh0YnVmKTsKIAlpZiAoaSA8IDApCkBAIC0xMDk3LDYgKzExMTcsMTMgQEAKIAkJCWlzX2luID0gMDsKIAkJCXV1cmItPmVuZHBvaW50ICY9IH5VU0JfRElSX0lOOwogCQl9CisJCXNub29wKCZwcy0+ZGV2LT5kZXYsICJjb250cm9sIHVyYjogYlJlcXVlc3RUeXBlPSUwMnggIgorCQkJImJSZXF1ZXN0PSUwMnggd1ZhbHVlPSUwNHggIgorCQkJIndJbmRleD0lMDR4IHdMZW5ndGg9JTA0eFxuIiwKKwkJCWRyLT5iUmVxdWVzdFR5cGUsIGRyLT5iUmVxdWVzdCwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d1ZhbHVlKSwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d0luZGV4KSwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d0xlbmd0aCkpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQlVMSzoKQEAgLTExMDQsMTMgKzExMzEsMjUgQEAKIAkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogYWxsb3cgc2luZ2xlLXNob3QgaW50ZXJydXB0IHRyYW5zZmVycywgYXQgYm9ndXMgcmF0ZXMgKi8KKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkvKiBhbGxvdyBzaW5nbGUtc2hvdCBpbnRlcnJ1cHQgdHJhbnNmZXJzICovCisJCQl1dXJiLT50eXBlID0gVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOworCQkJZ290byBpbnRlcnJ1cHRfdXJiOwogCQl9CiAJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVDoKKwkJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSkKKwkJCXJldHVybiAtRUlOVkFMOworIGludGVycnVwdF91cmI6CisJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKKwkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKIAkJLyogYXJiaXRyYXJ5IGxpbWl0ICovCiAJCWlmICh1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDEgfHwKQEAgLTExNDMsMTQgKzExODIsNiBAQAogCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gdG90bGVuOwogCQlicmVhazsKIAotCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOgotCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7Ci0JCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaW50KCZlcC0+ZGVzYykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMjM2LDcgKzEyNjcsOSBAQAogCQl9CiAJfQogCXNub29wX3VyYihwcy0+ZGV2LCBhcy0+dXNlcnVyYiwgYXMtPnVyYi0+cGlwZSwKLQkJCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIDAsIFNVQk1JVCk7CisJCQlhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCAwLCBTVUJNSVQsCisJCQlpc19pbiA/IE5VTEwgOiBhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXVyYi0+YnVmZmVyX2xlbmd0aCk7CiAJYXN5bmNfbmV3cGVuZGluZyhhcyk7CiAKIAlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXAtPmRlc2MpKSB7CkBAIC0xMjc0LDcgKzEzMDcsNyBAQAogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwcy0+ZGV2LT5kZXYsCiAJCQkgICAidXNiZnM6IHVzYl9zdWJtaXRfdXJiIHJldHVybmVkICVkXG4iLCByZXQpOwogCQlzbm9vcF91cmIocHMtPmRldiwgYXMtPnVzZXJ1cmIsIGFzLT51cmItPnBpcGUsCi0JCQkJMCwgcmV0LCBDT01QTEVURSk7CisJCQkJMCwgcmV0LCBDT01QTEVURSwgTlVMTCwgMCk7CiAJCWFzeW5jX3JlbW92ZXBlbmRpbmcoYXMpOwogCQlmcmVlX2FzeW5jKGFzKTsKIAkJcmV0dXJuIHJldDsKQEAgLTE2MjgsNyArMTY2MSwxMCBAQAogCQlpZiAoZHJpdmVyID09IE5VTEwgfHwgZHJpdmVyLT5pb2N0bCA9PSBOVUxMKSB7CiAJCQlyZXR2YWwgPSAtRU5PVFRZOwogCQl9IGVsc2UgeworCQkJLyoga2VlcCBBUEkgdGhhdCBndWFyYW50ZWVzIEJLTCAqLworCQkJbG9ja19rZXJuZWwoKTsKIAkJCXJldHZhbCA9IGRyaXZlci0+aW9jdGwoaW50ZiwgY3RsLT5pb2N0bF9jb2RlLCBidWYpOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJaWYgKHJldHZhbCA9PSAtRU5PSU9DVExDTUQpCiAJCQkJcmV0dmFsID0gLUVOT1RUWTsKIAkJfQpAQCAtMTcxMSw2ICsxNzQ3LDcgQEAKIAogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1FUEVSTTsKKwogCXVzYl9sb2NrX2RldmljZShkZXYpOwogCWlmICghY29ubmVjdGVkKHBzKSkgewogCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOwpAQCAtMTg3Nyw5ICsxOTE0LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXQgPSB1c2JkZXZfZG9faW9jdGwoZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODkwLDkgKzE5MjUsNyBAQAogewogCWludCByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXJldCA9IHVzYmRldl9kb19pb2N0bChmaWxlLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDYwYTQ1ZjEuLmE3MDM3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAiaGNkLmgiCiAjaW5jbHVkZSAidXNiLmgiCiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqdWRyaXZlciA9IHRvX3VzYl9kZXZpY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQlpbnQgZXJyb3IgPSAtRU5PREVWOworCWludCBlcnJvciA9IDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTIzMCwxOCArMjMwLDIzIEBACiAJLyogVGhlIGRldmljZSBzaG91bGQgYWx3YXlzIGFwcGVhciB0byBiZSBpbiB1c2UKIAkgKiB1bmxlc3MgdGhlIGRyaXZlciBzdXBvcnRzIGF1dG9zdXNwZW5kLgogCSAqLwotCXVkZXYtPnBtX3VzYWdlX2NudCA9ICEodWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOworCWlmICghdWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCWVycm9yID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOwogCi0JZXJyb3IgPSB1ZHJpdmVyLT5wcm9iZSh1ZGV2KTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHVkcml2ZXItPnByb2JlKHVkZXYpOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCBkZXYgbG9ja2VkICovCiBzdGF0aWMgaW50IHVzYl91bmJpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIgKnVkcml2ZXIgPSB0b191c2JfZGV2aWNlX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKLQl1ZHJpdmVyLT5kaXNjb25uZWN0KHRvX3VzYl9kZXZpY2UoZGV2KSk7CisJdWRyaXZlci0+ZGlzY29ubmVjdCh1ZGV2KTsKKwlpZiAoIXVkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKQorCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzQsNjAgKzI3OSw2MiBAQAogCWludGYtPm5lZWRzX2JpbmRpbmcgPSAwOwogCiAJaWYgKHVzYl9kZXZpY2VfaXNfb3duZWQodWRldikpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAodWRldi0+YXV0aG9yaXplZCA9PSAwKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkRldmljZSBpcyBub3QgYXV0aG9yaXplZCBmb3IgdXNhZ2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWlkID0gdXNiX21hdGNoX2lkKGludGYsIGRyaXZlci0+aWRfdGFibGUpOwogCWlmICghaWQpCiAJCWlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgZHJpdmVyKTsKLQlpZiAoaWQpIHsKLQkJZGV2X2RiZyhkZXYsICIlcyAtIGdvdCBpZFxuIiwgX19mdW5jX18pOworCWlmICghaWQpCisJCXJldHVybiBlcnJvcjsKIAotCQllcnJvciA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCWRldl9kYmcoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fZnVuY19fKTsKIAotCQkvKiBJbnRlcmZhY2UgInBvd2VyIHN0YXRlIiBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGhhcmR3YXJlCi0JCSAqIHN0YXRlIHdoYXRzb2V2ZXIuICBXZSB1c2UgaXQgdG8gcmVjb3JkIHdoZW4gaXQncyBib3VuZCB0bwotCQkgKiBhIGRyaXZlciB0aGF0IG1heSBzdGFydCBJLzA6ICBpdCdzIG5vdCBmcm96ZW4vcXVpZXNjZWQuCi0JCSAqLwotCQltYXJrX2FjdGl2ZShpbnRmKTsKLQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HOworCWVycm9yID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCi0JCS8qIFRoZSBpbnRlcmZhY2Ugc2hvdWxkIGFsd2F5cyBhcHBlYXIgdG8gYmUgaW4gdXNlCi0JCSAqIHVubGVzcyB0aGUgZHJpdmVyIHN1cG9ydHMgYXV0b3N1c3BlbmQuCi0JCSAqLwotCQlhdG9taWNfc2V0KCZpbnRmLT5wbV91c2FnZV9jbnQsICFkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JJTkRJTkc7CiAKLQkJLyogQ2Fycnkgb3V0IGEgZGVmZXJyZWQgc3dpdGNoIHRvIGFsdHNldHRpbmcgMCAqLwotCQlpZiAoaW50Zi0+bmVlZHNfYWx0c2V0dGluZzApIHsKLQkJCWVycm9yID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS4KLQkJCQkJZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJZ290byBlcnI7CisJLyogQm91bmQgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGx5IGFjdGl2ZS4gIFRoZXkgYXJlCisJICogcnVudGltZS1QTS1lbmFibGVkIG9ubHkgaWYgdGhlIGRyaXZlciBoYXMgYXV0b3N1c3BlbmQgc3VwcG9ydC4KKwkgKiBUaGV5IGFyZSBzZW5zaXRpdmUgdG8gdGhlaXIgY2hpbGRyZW4ncyBwb3dlciBzdGF0ZXMuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJaWYgKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAKLQkJCWludGYtPm5lZWRzX2FsdHNldHRpbmcwID0gMDsKLQkJfQotCi0JCWVycm9yID0gZHJpdmVyLT5wcm9iZShpbnRmLCBpZCk7Ci0JCWlmIChlcnJvcikKKwkvKiBDYXJyeSBvdXQgYSBkZWZlcnJlZCBzd2l0Y2ggdG8gYWx0c2V0dGluZyAwICovCisJaWYgKGludGYtPm5lZWRzX2FsdHNldHRpbmcwKSB7CisJCWVycm9yID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS4KKwkJCQlkZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBlcnI7Ci0KLQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKLQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKKwkJaW50Zi0+bmVlZHNfYWx0c2V0dGluZzAgPSAwOwogCX0KIAorCWVycm9yID0gZHJpdmVyLT5wcm9iZShpbnRmLCBpZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycjsKKworCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiAKLWVycjoKLQltYXJrX3F1aWVzY2VkKGludGYpOworIGVycjoKIAlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CiAJdXNiX2NhbmNlbF9xdWV1ZWRfcmVzZXQoaW50Zik7CisKKwkvKiBVbmJvdW5kIGludGVyZmFjZXMgYXJlIGFsd2F5cyBydW50aW1lLVBNLWRpc2FibGVkIGFuZCAtc3VzcGVuZGVkICovCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisKIAl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTM3Nyw5ICszODQsMTcgQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOwotCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAKKwkvKiBVbmJvdW5kIGludGVyZmFjZXMgYXJlIGFsd2F5cyBydW50aW1lLVBNLWRpc2FibGVkIGFuZCAtc3VzcGVuZGVkICovCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisKKwkvKiBVbmRvIGFueSByZXNpZHVhbCBwbV9hdXRvcG1fZ2V0X2ludGVyZmFjZV8qIGNhbGxzICovCisJZm9yIChyID0gYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCk7IHIgPiAwOyAtLXIpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kKGludGYpOworCWF0b21pY19zZXQoJmludGYtPnBtX3VzYWdlX2NudCwgMCk7CisKIAlpZiAoIWVycm9yKQogCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCkBAIC00MTAsNyArNDI1LDYgQEAKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmIChkZXYtPmRyaXZlcikKQEAgLTQyMCwxMSArNDM0LDE2IEBACiAJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CiAJaWZhY2UtPm5lZWRzX2JpbmRpbmcgPSAwOwogCi0JdXNiX3BtX2xvY2sodWRldik7CiAJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7Ci0JbWFya19hY3RpdmUoaWZhY2UpOwotCWF0b21pY19zZXQoJmlmYWNlLT5wbV91c2FnZV9jbnQsICFkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKLQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCisJLyogQm91bmQgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGx5IGFjdGl2ZS4gIFRoZXkgYXJlCisJICogcnVudGltZS1QTS1lbmFibGVkIG9ubHkgaWYgdGhlIGRyaXZlciBoYXMgYXV0b3N1c3BlbmQgc3VwcG9ydC4KKwkgKiBUaGV5IGFyZSBzZW5zaXRpdmUgdG8gdGhlaXIgY2hpbGRyZW4ncyBwb3dlciBzdGF0ZXMuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJaWYgKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAKIAkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldAogCSAqIHRoZSBmdXR1cmUgZGV2aWNlX2FkZCgpIGJpbmQgaXQsIGJ5cGFzc2luZyBwcm9iZSgpCkBAIC02OTEsOSArNzEwLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAotCS8qIGRyaXZlciBpcyBvZnRlbiBudWxsIGhlcmU7IGRldl9kYmcoKSB3b3VsZCBvb3BzICovCi0JcHJfZGVidWcoInVzYiAlczogdWV2ZW50XG4iLCBkZXZfbmFtZShkZXYpKTsKLQogCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKIAkJdXNiX2RldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAl9IGVsc2UgaWYgKGlzX3VzYl9pbnRlcmZhY2UoZGV2KSkgewpAQCAtNzA1LDYgKzcyMSw3IEBACiAJfQogCiAJaWYgKHVzYl9kZXYtPmRldm51bSA8IDApIHsKKwkJLyogZHJpdmVyIGlzIG9mdGVuIG51bGwgaGVyZTsgZGV2X2RiZygpIHdvdWxkIG9vcHMgKi8KIAkJcHJfZGVidWcoInVzYiAlczogYWxyZWFkeSBkZWxldGVkP1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk4Myw3ICsxMDAwLDYgQEAKIAl9CiB9CiAKLS8qIENhbGxlciBoYXMgbG9ja2VkIHVkZXYncyBwbV9tdXRleCAqLwogc3RhdGljIGludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyCSp1ZHJpdmVyOwpAQCAtMTAwNyw3ICsxMDIzLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiBDYWxsZXIgaGFzIGxvY2tlZCB1ZGV2J3MgcG1fbXV0ZXggKi8KIHN0YXRpYyBpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyCSp1ZHJpdmVyOwpAQCAtMTAyMiw2ICsxMDM3LDE0IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwkvKiBOb24tcm9vdCBkZXZpY2VzIG9uIGEgZnVsbC9sb3ctc3BlZWQgYnVzIG11c3Qgd2FpdCBmb3IgdGhlaXIKKwkgKiBjb21wYW5pb24gaGlnaC1zcGVlZCByb290IGh1YiwgaW4gY2FzZSBhIGhhbmRvZmYgaXMgbmVlZGVkLgorCSAqLworCWlmICghKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8pICYmIHVkZXYtPnBhcmVudCAmJgorCQkJdWRldi0+YnVzLT5oc19jb21wYW5pb24pCisJCWRldmljZV9wbV93YWl0X2Zvcl9kZXYoJnVkZXYtPmRldiwKKwkJCQkmdWRldi0+YnVzLT5oc19jb21wYW5pb24tPnJvb3RfaHViLT5kZXYpOworCiAJaWYgKHVkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19SRVNFVF9SRVNVTUUpCiAJCXVkZXYtPnJlc2V0X3Jlc3VtZSA9IDE7CiAKQEAgLTEwMzMsMjcgKzEwNTYsMjAgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiBDYWxsZXIgaGFzIGxvY2tlZCBpbnRmJ3MgdXNiX2RldmljZSdzIHBtIG11dGV4ICovCiBzdGF0aWMgaW50IHVzYl9zdXNwZW5kX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9kcml2ZXIJKmRyaXZlcjsKIAlpbnQJCQlzdGF0dXMgPSAwOwogCi0JLyogd2l0aCBubyBoYXJkd2FyZSwgVVNCIGludGVyZmFjZXMgb25seSB1c2UgRlJFRVpFIGFuZCBPTiBzdGF0ZXMgKi8KLQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEIHx8ICFpc19hY3RpdmUoaW50ZikpCi0JCWdvdG8gZG9uZTsKLQotCS8qIFRoaXMgY2FuIGhhcHBlbjsgc2VlIHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoKSAqLwotCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKQorCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKKwkJCWludGYtPmNvbmRpdGlvbiA9PSBVU0JfSU5URVJGQUNFX1VOQk9VTkQpCiAJCWdvdG8gZG9uZTsKIAlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOwogCiAJaWYgKGRyaXZlci0+c3VzcGVuZCkgewogCQlzdGF0dXMgPSBkcml2ZXItPnN1c3BlbmQoaW50ZiwgbXNnKTsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJbWFya19xdWllc2NlZChpbnRmKTsKLQkJZWxzZSBpZiAoIShtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPKSkKKwkJaWYgKHN0YXR1cyAmJiAhKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8pKQogCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgZXJyb3IgJWRcbiIsCiAJCQkJCSJzdXNwZW5kIiwgc3RhdHVzKTsKIAl9IGVsc2UgewpAQCAtMTA2MSw3ICsxMDc3LDYgQEAKIAkJaW50Zi0+bmVlZHNfYmluZGluZyA9IDE7CiAJCWRldl93YXJuKCZpbnRmLT5kZXYsICJubyAlcyBmb3IgZHJpdmVyICVzP1xuIiwKIAkJCQkic3VzcGVuZCIsIGRyaXZlci0+bmFtZSk7Ci0JCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAJfQogCiAgZG9uZToKQEAgLTEwNjksMTQgKzEwODQsMTMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiBDYWxsZXIgaGFzIGxvY2tlZCBpbnRmJ3MgdXNiX2RldmljZSdzIHBtX211dGV4ICovCiBzdGF0aWMgaW50IHVzYl9yZXN1bWVfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1zZywgaW50IHJlc2V0X3Jlc3VtZSkKIHsKIAlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOwogCWludAkJCXN0YXR1cyA9IDA7CiAKLQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEIHx8IGlzX2FjdGl2ZShpbnRmKSkKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQogCQlnb3RvIGRvbmU7CiAKIAkvKiBEb24ndCBsZXQgYXV0b3Jlc3VtZSBpbnRlcmZlcmUgd2l0aCB1bmJpbmRpbmcgKi8KQEAgLTExMjcsOTAgKzExNDEsMTEgQEAKIAogZG9uZToKIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JaWYgKHN0YXR1cyA9PSAwICYmIGludGYtPmNvbmRpdGlvbiA9PSBVU0JfSU5URVJGQUNFX0JPVU5EKQotCQltYXJrX2FjdGl2ZShpbnRmKTsKIAogCS8qIExhdGVyIHdlIHdpbGwgdW5iaW5kIHRoZSBkcml2ZXIgYW5kL29yIHJlcHJvYmUsIGlmIG5lY2Vzc2FyeSAqLwogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQotLyogSW50ZXJuYWwgcm91dGluZSB0byBjaGVjayB3aGV0aGVyIHdlIG1heSBhdXRvc3VzcGVuZCBhIGRldmljZS4gKi8KLXN0YXRpYyBpbnQgYXV0b3N1c3BlbmRfY2hlY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCByZXNjaGVkdWxlKQotewotCWludAkJCWk7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0JdW5zaWduZWQgbG9uZwkJc3VzcGVuZF90aW1lLCBqOwotCi0JLyogRm9yIGF1dG9zdXNwZW5kLCBmYWlsIGZhc3QgaWYgYW55dGhpbmcgaXMgaW4gdXNlIG9yIGF1dG9zdXNwZW5kCi0JICogaXMgZGlzYWJsZWQuICBBbHNvIGZhaWwgaWYgYW55IGludGVyZmFjZXMgcmVxdWlyZSByZW1vdGUgd2FrZXVwCi0JICogYnV0IGl0IGlzbid0IGF2YWlsYWJsZS4KLQkgKi8KLQlpZiAodWRldi0+cG1fdXNhZ2VfY250ID4gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQlpZiAodWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPCAwIHx8IHVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jc3VzcGVuZF90aW1lID0gdWRldi0+bGFzdF9idXN5ICsgdWRldi0+YXV0b3N1c3BlbmRfZGVsYXk7Ci0JaWYgKHVkZXYtPmFjdGNvbmZpZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKLQkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKLQkJCWlmICghaXNfYWN0aXZlKGludGYpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpID4gMCkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJaWYgKGludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgJiYKLQkJCQkJIXVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKLQkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJyZW1vdGUgd2FrZXVwIG5lZWRlZCAiCi0JCQkJCQkiZm9yIGF1dG9zdXNwZW5kXG4iKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0KLQkJCS8qIERvbid0IGFsbG93IGF1dG9zdXNwZW5kIGlmIHRoZSBkZXZpY2Ugd2lsbCBuZWVkCi0JCQkgKiBhIHJlc2V0LXJlc3VtZSBhbmQgYW55IG9mIGl0cyBpbnRlcmZhY2UgZHJpdmVycwotCQkJICogZG9lc24ndCBpbmNsdWRlIHN1cHBvcnQuCi0JCQkgKi8KLQkJCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfUkVTVU1FKSB7Ci0JCQkJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKLQotCQkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCQkJaWYgKCFkcml2ZXItPnJlc2V0X3Jlc3VtZSB8fAotCQkJCSAgICBpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwKQotCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBJZiBldmVyeXRoaW5nIGlzIG9rYXkgYnV0IHRoZSBkZXZpY2UgaGFzbid0IGJlZW4gaWRsZSBmb3IgbG9uZwotCSAqIGVub3VnaCwgcXVldWUgYSBkZWxheWVkIGF1dG9zdXNwZW5kIHJlcXVlc3QuICBJZiB0aGUgZGV2aWNlCi0JICogX2hhc18gYmVlbiBpZGxlIGZvciBsb25nIGVub3VnaCBhbmQgdGhlIHJlc2NoZWR1bGUgZmxhZyBpcyBzZXQsCi0JICogbGlrZXdpc2UgcXVldWUgYSBkZWxheWVkICgxIHNlY29uZCkgYXV0b3N1c3BlbmQgcmVxdWVzdC4KLQkgKi8KLQlqID0gamlmZmllczsKLQlpZiAodGltZV9iZWZvcmUoaiwgc3VzcGVuZF90aW1lKSkKLQkJcmVzY2hlZHVsZSA9IDE7Ci0JZWxzZQotCQlzdXNwZW5kX3RpbWUgPSBqICsgSFo7Ci0JaWYgKHJlc2NoZWR1bGUpIHsKLQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZ1ZGV2LT5hdXRvc3VzcGVuZC50aW1lcikpIHsKLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhrc3VzcGVuZF91c2Jfd3EsICZ1ZGV2LT5hdXRvc3VzcGVuZCwKLQkJCQlyb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKHN1c3BlbmRfdGltZSAtIGopKTsKLQkJfQotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IGF1dG9zdXNwZW5kX2NoZWNrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcmVzY2hlZHVsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19VU0JfU1VTUEVORCAqLwotCiAvKioKICAqIHVzYl9zdXNwZW5kX2JvdGggLSBzdXNwZW5kIGEgVVNCIGRldmljZSBhbmQgaXRzIGludGVyZmFjZXMKICAqIEB1ZGV2OiB0aGUgdXNiX2RldmljZSB0byBzdXNwZW5kCkBAIC0xMjIyLDI3ICsxMTU3LDEyIEBACiAgKiBhbGwgdGhlIGludGVyZmFjZXMgd2hpY2ggd2VyZSBzdXNwZW5kZWQgYXJlIHJlc3VtZWQgc28gdGhhdCB0aGV5IHJlbWFpbgogICogaW4gdGhlIHNhbWUgc3RhdGUgYXMgdGhlIGRldmljZS4KICAqCi0gKiBJZiBhbiBhdXRvc3VzcGVuZCBpcyBpbiBwcm9ncmVzcyB0aGUgcm91dGluZSBjaGVja3MgZmlyc3QgdG8gbWFrZSBzdXJlCi0gKiB0aGF0IG5laXRoZXIgdGhlIGRldmljZSBpdHNlbGYgb3IgYW55IG9mIGl0cyBhY3RpdmUgaW50ZXJmYWNlcyBpcyBpbiB1c2UKLSAqIChwbV91c2FnZV9jbnQgaXMgZ3JlYXRlciB0aGFuIDApLiAgSWYgdGhleSBhcmUsIHRoZSBhdXRvc3VzcGVuZCBmYWlscy4KLSAqCi0gKiBJZiB0aGUgc3VzcGVuZCBzdWNjZWVkcywgdGhlIHJvdXRpbmUgcmVjdXJzaXZlbHkgcXVldWVzIGFuIGF1dG9zdXNwZW5kCi0gKiByZXF1ZXN0IGZvciBAdWRldidzIHBhcmVudCBkZXZpY2UsIHRoZXJlYnkgcHJvcGFnYXRpbmcgdGhlIGNoYW5nZSB1cAotICogdGhlIGRldmljZSB0cmVlLiAgSWYgYWxsIG9mIHRoZSBwYXJlbnQncyBjaGlsZHJlbiBhcmUgbm93IHN1c3BlbmRlZCwKLSAqIHRoZSBwYXJlbnQgd2lsbCBhdXRvc3VzcGVuZCBpbiB0dXJuLgotICoKLSAqIFRoZSBzdXNwZW5kIG1ldGhvZCBjYWxscyBhcmUgc3ViamVjdCB0byBtdXR1YWwgZXhjbHVzaW9uIHVuZGVyIGNvbnRyb2wKLSAqIG9mIEB1ZGV2J3MgcG1fbXV0ZXguICBNYW55IG9mIHRoZXNlIGNhbGxzIGFyZSBhbHNvIHVuZGVyIHRoZSBwcm90ZWN0aW9uCi0gKiBvZiBAdWRldidzIGRldmljZSBsb2NrIChpbmNsdWRpbmcgYWxsIHJlcXVlc3RzIG9yaWdpbmF0aW5nIG91dHNpZGUgdGhlCi0gKiBVU0Igc3Vic3lzdGVtKSwgYnV0IGF1dG9zdXNwZW5kIHJlcXVlc3RzIGdlbmVyYXRlZCBieSBhIGNoaWxkIGRldmljZSBvcgotICogaW50ZXJmYWNlIGRyaXZlciBtYXkgbm90IGJlLiAgVXNiY29yZSB3aWxsIGluc3VyZSB0aGF0IHRoZSBtZXRob2QgY2FsbHMKLSAqIGRvIG5vdCBhcnJpdmUgZHVyaW5nIGJpbmQsIHVuYmluZCwgb3IgcmVzZXQgb3BlcmF0aW9ucy4gIEhvd2V2ZXIsIGRyaXZlcnMKLSAqIG11c3QgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIHN1c3BlbmQgY2FsbHMgYXJyaXZpbmcgYXQgdW5wcmVkaWN0YWJsZSB0aW1lcy4KLSAqIFRoZSBvbmx5IHdheSB0byBibG9jayBzdWNoIGNhbGxzIGlzIHRvIGRvIGFuIGF1dG9yZXN1bWUgKHByZXZlbnRpbmcKLSAqIGF1dG9zdXNwZW5kcykgd2hpbGUgaG9sZGluZyBAdWRldidzIGRldmljZSBsb2NrIChwcmV2ZW50aW5nIG91dHNpZGUKLSAqIHN1c3BlbmRzKS4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldi0+cG1fbXV0ZXguCisgKiBBdXRvc3VzcGVuZCByZXF1ZXN0cyBvcmlnaW5hdGluZyBmcm9tIGEgY2hpbGQgZGV2aWNlIG9yIGFuIGludGVyZmFjZQorICogZHJpdmVyIG1heSBiZSBtYWRlIHdpdGhvdXQgdGhlIHByb3RlY3Rpb24gb2YgQHVkZXYncyBkZXZpY2UgbG9jaywgYnV0CisgKiBhbGwgb3RoZXIgc3VzcGVuZCBjYWxscyB3aWxsIGhvbGQgdGhlIGxvY2suICBVc2Jjb3JlIHdpbGwgaW5zdXJlIHRoYXQKKyAqIG1ldGhvZCBjYWxscyBkbyBub3QgYXJyaXZlIGR1cmluZyBiaW5kLCB1bmJpbmQsIG9yIHJlc2V0IG9wZXJhdGlvbnMuCisgKiBIb3dldmVyIGRyaXZlcnMgbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgc3VzcGVuZCBjYWxscyBhcnJpdmluZyBhdAorICogdW5wcmVkaWN0YWJsZSB0aW1lcy4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KICAqLwpAQCAtMTI1MSwyMCArMTE3MSwxMSBAQAogCWludAkJCXN0YXR1cyA9IDA7CiAJaW50CQkJaSA9IDA7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IHVkZXYtPnBhcmVudDsKIAogCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKIAkJCXVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCiAJCWdvdG8gZG9uZTsKIAotCXVkZXYtPmRvX3JlbW90ZV93YWtldXAgPSBkZXZpY2VfbWF5X3dha2V1cCgmdWRldi0+ZGV2KTsKLQotCWlmIChtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPKSB7Ci0JCXN0YXR1cyA9IGF1dG9zdXNwZW5kX2NoZWNrKHVkZXYsIDApOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCWdvdG8gZG9uZTsKLQl9Ci0KIAkvKiBTdXNwZW5kIGFsbCB0aGUgaW50ZXJmYWNlcyBhbmQgdGhlbiB1ZGV2IGl0c2VsZiAqLwogCWlmICh1ZGV2LT5hY3Rjb25maWcpIHsKIAkJZm9yICg7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewpAQCAtMTI3OSwzNSArMTE5MCwyMSBAQAogCiAJLyogSWYgdGhlIHN1c3BlbmQgZmFpbGVkLCByZXN1bWUgaW50ZXJmYWNlcyB0aGF0IGRpZCBnZXQgc3VzcGVuZGVkICovCiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXBtX21lc3NhZ2VfdCBtc2cyOwotCi0JCW1zZzIuZXZlbnQgPSBtc2cuZXZlbnQgXiAoUE1fRVZFTlRfU1VTUEVORCB8IFBNX0VWRU5UX1JFU1VNRSk7CisJCW1zZy5ldmVudCBePSAoUE1fRVZFTlRfU1VTUEVORCB8IFBNX0VWRU5UX1JFU1VNRSk7CiAJCXdoaWxlICgtLWkgPj0gMCkgewogCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwotCQkJdXNiX3Jlc3VtZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgbXNnMiwgMCk7CisJCQl1c2JfcmVzdW1lX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCBtc2csIDApOwogCQl9CiAKLQkJLyogVHJ5IGFub3RoZXIgYXV0b3N1c3BlbmQgd2hlbiB0aGUgaW50ZXJmYWNlcyBhcmVuJ3QgYnVzeSAqLwotCQlpZiAobXNnLmV2ZW50ICYgUE1fRVZFTlRfQVVUTykKLQkJCWF1dG9zdXNwZW5kX2NoZWNrKHVkZXYsIHN0YXR1cyA9PSAtRUJVU1kpOwotCi0JLyogSWYgdGhlIHN1c3BlbmQgc3VjY2VlZGVkIHRoZW4gcHJldmVudCBhbnkgbW9yZSBVUkIgc3VibWlzc2lvbnMsCi0JICogZmx1c2ggYW55IG91dHN0YW5kaW5nIFVSQnMsIGFuZCBwcm9wYWdhdGUgdGhlIHN1c3BlbmQgdXAgdGhlIHRyZWUuCisJLyogSWYgdGhlIHN1c3BlbmQgc3VjY2VlZGVkIHRoZW4gcHJldmVudCBhbnkgbW9yZSBVUkIgc3VibWlzc2lvbnMKKwkgKiBhbmQgZmx1c2ggYW55IG91dHN0YW5kaW5nIFVSQnMuCiAJICovCiAJfSBlbHNlIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmdWRldi0+YXV0b3N1c3BlbmQpOwogCQl1ZGV2LT5jYW5fc3VibWl0ID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKIAkJCXVzYl9oY2RfZmx1c2hfZW5kcG9pbnQodWRldiwgdWRldi0+ZXBfb3V0W2ldKTsKIAkJCXVzYl9oY2RfZmx1c2hfZW5kcG9pbnQodWRldiwgdWRldi0+ZXBfaW5baV0pOwogCQl9Ci0KLQkJLyogSWYgdGhpcyBpcyBqdXN0IGEgRlJFRVpFIG9yIGEgUFJFVEhBVywgdWRldiBtaWdodAotCQkgKiBub3QgcmVhbGx5IGJlIHN1c3BlbmRlZC4gIE9ubHkgdHJ1ZSBzdXNwZW5kcyBnZXQKLQkJICogcHJvcGFnYXRlZCB1cCB0aGUgZGV2aWNlIHRyZWUuCi0JCSAqLwotCQlpZiAocGFyZW50ICYmIHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCi0JCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHBhcmVudCk7CiAJfQogCiAgZG9uZToKQEAgLTEzMjQsMjMgKzEyMjEsMTIgQEAKICAqIHRoZSByZXN1bWUgbWV0aG9kIGZvciBAdWRldiBhbmQgdGhlbiBjYWxscyB0aGUgcmVzdW1lIG1ldGhvZHMgZm9yIGFsbAogICogdGhlIGludGVyZmFjZSBkcml2ZXJzIGluIEB1ZGV2LgogICoKLSAqIEJlZm9yZSBzdGFydGluZyB0aGUgcmVzdW1lLCB0aGUgcm91dGluZSBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgZm9yCi0gKiB0aGUgcGFyZW50IGRldmljZSBvZiBAdWRldiwgdGhlcmVieSBwcm9wYWdhdGluZyB0aGUgY2hhbmdlIHVwIHRoZSBkZXZpY2UKLSAqIHRyZWUgYW5kIGFzc3VyaW5nIHRoYXQgQHVkZXYgd2lsbCBiZSBhYmxlIHRvIHJlc3VtZS4gIElmIHRoZSBwYXJlbnQgaXMKLSAqIHVuYWJsZSB0byByZXN1bWUgc3VjY2Vzc2Z1bGx5LCB0aGUgcm91dGluZSBmYWlscy4KLSAqCi0gKiBUaGUgcmVzdW1lIG1ldGhvZCBjYWxscyBhcmUgc3ViamVjdCB0byBtdXR1YWwgZXhjbHVzaW9uIHVuZGVyIGNvbnRyb2wKLSAqIG9mIEB1ZGV2J3MgcG1fbXV0ZXguICBNYW55IG9mIHRoZXNlIGNhbGxzIGFyZSBhbHNvIHVuZGVyIHRoZSBwcm90ZWN0aW9uCi0gKiBvZiBAdWRldidzIGRldmljZSBsb2NrIChpbmNsdWRpbmcgYWxsIHJlcXVlc3RzIG9yaWdpbmF0aW5nIG91dHNpZGUgdGhlCi0gKiBVU0Igc3Vic3lzdGVtKSwgYnV0IGF1dG9yZXN1bWUgcmVxdWVzdHMgZ2VuZXJhdGVkIGJ5IGEgY2hpbGQgZGV2aWNlIG9yCi0gKiBpbnRlcmZhY2UgZHJpdmVyIG1heSBub3QgYmUuICBVc2Jjb3JlIHdpbGwgaW5zdXJlIHRoYXQgdGhlIG1ldGhvZCBjYWxscwotICogZG8gbm90IGFycml2ZSBkdXJpbmcgYmluZCwgdW5iaW5kLCBvciByZXNldCBvcGVyYXRpb25zLiAgSG93ZXZlciwgZHJpdmVycwotICogbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgcmVzdW1lIGNhbGxzIGFycml2aW5nIGF0IHVucHJlZGljdGFibGUgdGltZXMuCi0gKiBUaGUgb25seSB3YXkgdG8gYmxvY2sgc3VjaCBjYWxscyBpcyB0byBkbyBhbiBhdXRvcmVzdW1lIChwcmV2ZW50aW5nCi0gKiBvdGhlciBhdXRvcmVzdW1lcykgd2hpbGUgaG9sZGluZyBAdWRldidzIGRldmljZSBsb2NrIChwcmV2ZW50aW5nIG91dHNpZGUKLSAqIHJlc3VtZXMpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2LT5wbV9tdXRleC4KKyAqIEF1dG9yZXN1bWUgcmVxdWVzdHMgb3JpZ2luYXRpbmcgZnJvbSBhIGNoaWxkIGRldmljZSBvciBhbiBpbnRlcmZhY2UKKyAqIGRyaXZlciBtYXkgYmUgbWFkZSB3aXRob3V0IHRoZSBwcm90ZWN0aW9uIG9mIEB1ZGV2J3MgZGV2aWNlIGxvY2ssIGJ1dAorICogYWxsIG90aGVyIHJlc3VtZSBjYWxscyB3aWxsIGhvbGQgdGhlIGxvY2suICBVc2Jjb3JlIHdpbGwgaW5zdXJlIHRoYXQKKyAqIG1ldGhvZCBjYWxscyBkbyBub3QgYXJyaXZlIGR1cmluZyBiaW5kLCB1bmJpbmQsIG9yIHJlc2V0IG9wZXJhdGlvbnMuCisgKiBIb3dldmVyIGRyaXZlcnMgbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgcmVzdW1lIGNhbGxzIGFycml2aW5nIGF0CisgKiB1bnByZWRpY3RhYmxlIHRpbWVzLgogICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCkBAIC0xMzQ5LDQ4ICsxMjM1LDE4IEBACiAJaW50CQkJc3RhdHVzID0gMDsKIAlpbnQJCQlpOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOwotCXN0cnVjdCB1c2JfZGV2aWNlCSpwYXJlbnQgPSB1ZGV2LT5wYXJlbnQ7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrKCZ1ZGV2LT5hdXRvc3VzcGVuZCk7CiAJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgewogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQogCXVkZXYtPmNhbl9zdWJtaXQgPSAxOwogCi0JLyogUHJvcGFnYXRlIHRoZSByZXN1bWUgdXAgdGhlIHRyZWUsIGlmIG5lY2Vzc2FyeSAqLwotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7Ci0JCWlmIChwYXJlbnQpIHsKLQkJCXN0YXR1cyA9IHVzYl9hdXRvcmVzdW1lX2RldmljZShwYXJlbnQpOwotCQkJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCQkJc3RhdHVzID0gdXNiX3Jlc3VtZV9kZXZpY2UodWRldiwgbXNnKTsKLQkJCQlpZiAoc3RhdHVzIHx8IHVkZXYtPnN0YXRlID09Ci0JCQkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKLQkJCQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZShwYXJlbnQpOwotCi0JCQkJCS8qIEl0J3MgcG9zc2libGUgdXNiX3Jlc3VtZV9kZXZpY2UoKQotCQkJCQkgKiBmYWlsZWQgYWZ0ZXIgdGhlIHBvcnQgd2FzCi0JCQkJCSAqIHVuc3VzcGVuZGVkLCBjYXVzaW5nIHVkZXYgdG8gYmUKLQkJCQkJICogbG9naWNhbGx5IGRpc2Nvbm5lY3RlZC4gIFdlIGRvbid0Ci0JCQkJCSAqIHdhbnQgdXNiX2Rpc2Nvbm5lY3QoKSB0byBhdXRvc3VzcGVuZAotCQkJCQkgKiB0aGUgcGFyZW50IGFnYWluLCBzbyB0ZWxsIGl0IHRoYXQKLQkJCQkJICogdWRldiBkaXNjb25uZWN0ZWQgd2hpbGUgc3RpbGwKLQkJCQkJICogc3VzcGVuZGVkLiAqLwotCQkJCQlpZiAodWRldi0+c3RhdGUgPT0KLQkJCQkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCi0JCQkJCQl1ZGV2LT5kaXNjb25fc3VzcGVuZGVkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0KLQkJCS8qIFdlIGNhbid0IHByb2dhZ2F0ZSBiZXlvbmQgdGhlIFVTQiBzdWJzeXN0ZW0sCi0JCQkgKiBzbyBpZiBhIHJvb3QgaHViJ3MgY29udHJvbGxlciBpcyBzdXNwZW5kZWQKLQkJCSAqIHRoZW4gd2UncmUgc3R1Y2suICovCi0JCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2RldmljZSh1ZGV2LCBtc2cpOwotCQl9Ci0JfSBlbHNlIGlmICh1ZGV2LT5yZXNldF9yZXN1bWUpCisJLyogUmVzdW1lIHRoZSBkZXZpY2UgKi8KKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCB8fCB1ZGV2LT5yZXNldF9yZXN1bWUpCiAJCXN0YXR1cyA9IHVzYl9yZXN1bWVfZGV2aWNlKHVkZXYsIG1zZyk7CiAKKwkvKiBSZXN1bWUgdGhlIGludGVyZmFjZXMgKi8KIAlpZiAoc3RhdHVzID09IDAgJiYgdWRldi0+YWN0Y29uZmlnKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewogCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwpAQCAtMTQwNiw1NSArMTI2Miw5NCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKLQotLyogSW50ZXJuYWwgcm91dGluZSB0byBhZGp1c3QgYSBkZXZpY2UncyB1c2FnZSBjb3VudGVyIGFuZCBjaGFuZ2UKLSAqIGl0cyBhdXRvc3VzcGVuZCBzdGF0ZS4KLSAqLwotc3RhdGljIGludCB1c2JfYXV0b3BtX2RvX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGluY191c2FnZV9jbnQpCisvKiBUaGUgZGV2aWNlIGxvY2sgaXMgaGVsZCBieSB0aGUgUE0gY29yZSAqLworaW50IHVzYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKIHsKLQlpbnQJc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAotCXVzYl9wbV9sb2NrKHVkZXYpOwotCXVkZXYtPnBtX3VzYWdlX2NudCArPSBpbmNfdXNhZ2VfY250OwotCVdBUk5fT04odWRldi0+cG1fdXNhZ2VfY250IDwgMCk7Ci0JaWYgKGluY191c2FnZV9jbnQpCi0JCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JaWYgKGluY191c2FnZV9jbnQgPj0gMCAmJiB1ZGV2LT5wbV91c2FnZV9jbnQgPiAwKSB7Ci0JCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQotCQkJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYsIFBNU0dfQVVUT19SRVNVTUUpOwotCQlpZiAoc3RhdHVzICE9IDApCi0JCQl1ZGV2LT5wbV91c2FnZV9jbnQgLT0gaW5jX3VzYWdlX2NudDsKLQkJZWxzZSBpZiAoaW5jX3VzYWdlX2NudCkKKwlkb191bmJpbmRfcmViaW5kKHVkZXYsIERPX1VOQklORCk7CisJdWRldi0+ZG9fcmVtb3RlX3dha2V1cCA9IGRldmljZV9tYXlfd2FrZXVwKCZ1ZGV2LT5kZXYpOworCXJldHVybiB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIG1zZyk7Cit9CisKKy8qIFRoZSBkZXZpY2UgbG9jayBpcyBoZWxkIGJ5IHRoZSBQTSBjb3JlICovCitpbnQgdXNiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJaW50CQkJc3RhdHVzOworCisJLyogRm9yIFBNIGNvbXBsZXRlIGNhbGxzLCBhbGwgd2UgZG8gaXMgcmViaW5kIGludGVyZmFjZXMgKi8KKwlpZiAobXNnLmV2ZW50ID09IFBNX0VWRU5UX09OKSB7CisJCWlmICh1ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCQlkb191bmJpbmRfcmViaW5kKHVkZXYsIERPX1JFQklORCk7CisJCXN0YXR1cyA9IDA7CisKKwkvKiBGb3IgYWxsIG90aGVyIGNhbGxzLCB0YWtlIHRoZSBkZXZpY2UgYmFjayB0byBmdWxsIHBvd2VyIGFuZAorCSAqIHRlbGwgdGhlIFBNIGNvcmUgaW4gY2FzZSBpdCB3YXMgYXV0b3N1c3BlbmRlZCBwcmV2aW91c2x5LgorCSAqLworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aCh1ZGV2LCBtc2cpOworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCQkJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJCQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwogCQkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKLQl9IGVsc2UgaWYgKGluY191c2FnZV9jbnQgPD0gMCAmJiB1ZGV2LT5wbV91c2FnZV9jbnQgPD0gMCkgewotCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKKwkJfQogCX0KLQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCisJLyogQXZvaWQgUE0gZXJyb3IgbWVzc2FnZXMgZm9yIGRldmljZXMgZGlzY29ubmVjdGVkIHdoaWxlIHN1c3BlbmRlZAorCSAqIGFzIHdlJ2xsIGRpc3BsYXkgcmVndWxhciBkaXNjb25uZWN0IG1lc3NhZ2VzIGp1c3QgYSBiaXQgbGF0ZXIuCisJICovCisJaWYgKHN0YXR1cyA9PSAtRU5PREVWKQorCQlzdGF0dXMgPSAwOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIHVzYl9hdXRvc3VzcGVuZF93b3JrIC0gY2FsbGJhY2sgcm91dGluZSB0byBhdXRvc3VzcGVuZCBhIFVTQiBkZXZpY2UgKi8KLXZvaWQgdXNiX2F1dG9zdXNwZW5kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECisKKy8qKgorICogdXNiX2VuYWJsZV9hdXRvc3VzcGVuZCAtIGFsbG93IGEgVVNCIGRldmljZSB0byBiZSBhdXRvc3VzcGVuZGVkCisgKiBAdWRldjogdGhlIFVTQiBkZXZpY2Ugd2hpY2ggbWF5IGJlIGF1dG9zdXNwZW5kZWQKKyAqCisgKiBUaGlzIHJvdXRpbmUgYWxsb3dzIEB1ZGV2IHRvIGJlIGF1dG9zdXNwZW5kZWQuICBBbiBhdXRvc3VzcGVuZCB3b24ndAorICogdGFrZSBwbGFjZSB1bnRpbCB0aGUgYXV0b3N1c3BlbmRfZGVsYXkgaGFzIGVsYXBzZWQgYW5kIGFsbCB0aGUgb3RoZXIKKyAqIG5lY2Vzc2FyeSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KKyAqLworaW50IHVzYl9lbmFibGVfYXV0b3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9kZXZpY2UsIGF1dG9zdXNwZW5kLndvcmspOwotCi0JdXNiX2F1dG9wbV9kb19kZXZpY2UodWRldiwgMCk7CisJaWYgKHVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkKSB7CisJCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMDsKKwkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKKwl9CisJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKTsKIAotLyogdXNiX2F1dG9yZXN1bWVfd29yayAtIGNhbGxiYWNrIHJvdXRpbmUgdG8gYXV0b3Jlc3VtZSBhIFVTQiBkZXZpY2UgKi8KLXZvaWQgdXNiX2F1dG9yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisvKioKKyAqIHVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kIC0gcHJldmVudCBhIFVTQiBkZXZpY2UgZnJvbSBiZWluZyBhdXRvc3VzcGVuZGVkCisgKiBAdWRldjogdGhlIFVTQiBkZXZpY2Ugd2hpY2ggbWF5IG5vdCBiZSBhdXRvc3VzcGVuZGVkCisgKgorICogVGhpcyByb3V0aW5lIHByZXZlbnRzIEB1ZGV2IGZyb20gYmVpbmcgYXV0b3N1c3BlbmRlZCBhbmQgd2FrZXMgaXQgdXAKKyAqIGlmIGl0IGlzIGFscmVhZHkgYXV0b3N1c3BlbmRlZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgorICovCitpbnQgdXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9kZXZpY2UsIGF1dG9yZXN1bWUpOworCWludCByYyA9IDA7CiAKLQkvKiBXYWtlIGl0IHVwLCBsZXQgdGhlIGRyaXZlcnMgZG8gdGhlaXIgdGhpbmcsIGFuZCB0aGVuIHB1dCBpdAotCSAqIGJhY2sgdG8gc2xlZXAuCi0JICovCi0JaWYgKHVzYl9hdXRvcG1fZG9fZGV2aWNlKHVkZXYsIDEpID09IDApCi0JCXVzYl9hdXRvcG1fZG9fZGV2aWNlKHVkZXYsIC0xKTsKKwlpZiAoIXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkKSB7CisJCXJjID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOworCQlpZiAocmMgPT0gMCkKKwkJCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMTsKKwl9CisJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQpOwogCiAvKioKICAqIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2UgLSBkZWxheWVkIGF1dG9zdXNwZW5kIG9mIGEgVVNCIGRldmljZSBhbmQgaXRzIGludGVyZmFjZXMKQEAgLTE0NjQsMTUgKzEzNTksMTEgQEAKICAqIEB1ZGV2IGFuZCB3YW50cyB0byBhbGxvdyBpdCB0byBhdXRvc3VzcGVuZC4gIEV4YW1wbGVzIHdvdWxkIGJlIHdoZW4KICAqIEB1ZGV2J3MgZGV2aWNlIGZpbGUgaW4gdXNiZnMgaXMgY2xvc2VkIG9yIGFmdGVyIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UuCiAgKgotICogQHVkZXYncyB1c2FnZSBjb3VudGVyIGlzIGRlY3JlbWVudGVkLiAgSWYgaXQgb3IgYW55IG9mIHRoZSB1c2FnZSBjb3VudGVycwotICogZm9yIGFuIGFjdGl2ZSBpbnRlcmZhY2UgaXMgZ3JlYXRlciB0aGFuIDAsIG5vIGF1dG9zdXNwZW5kIHJlcXVlc3Qgd2lsbCBiZQotICogcXVldWVkLiAgKElmIGFuIGludGVyZmFjZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhdXRvc3VzcGVuZCB0aGVuIGl0cwotICogdXNhZ2UgY291bnRlciBpcyBwZXJtYW5lbnRseSBwb3NpdGl2ZS4pICBGdXJ0aGVybW9yZSwgaWYgYW4gaW50ZXJmYWNlCi0gKiBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlLXdha2V1cCBjYXBhYmlsaXR5IGR1cmluZyBhdXRvc3VzcGVuZCBidXQgcmVtb3RlCi0gKiB3YWtldXAgaXMgZGlzYWJsZWQsIHRoZSBhdXRvc3VzcGVuZCB3aWxsIGZhaWwuCisgKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQ7IGlmIGl0IGRyb3BzIHRvIDAgYW5kIGFsbCB0aGUKKyAqIGludGVyZmFjZXMgYXJlIGluYWN0aXZlIHRoZW4gYSBkZWxheWVkIGF1dG9zdXNwZW5kIHdpbGwgYmUgYXR0ZW1wdGVkLgorICogVGhlIGF0dGVtcHQgbWF5IGZhaWwgKHNlZSBhdXRvc3VzcGVuZF9jaGVjaygpKS4KICAqCi0gKiBPZnRlbiB0aGUgY2FsbGVyIHdpbGwgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLCBidXQgdGhpcyBpcyBub3QKLSAqIG5lY2Vzc2FyeS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2suCiAgKgogICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCiAgKi8KQEAgLTE0ODAsOSArMTM3MSwxMSBAQAogewogCWludAlzdGF0dXM7CiAKLQlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2RldmljZSh1ZGV2LCAtMSk7Ci0JZGV2X3ZkYmcoJnVkZXYtPmRldiwgIiVzOiBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgdWRldi0+cG1fdXNhZ2VfY250KTsKKwl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCXN0YXR1cyA9IHBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkZXYtPmRldik7CisJZGV2X3ZkYmcoJnVkZXYtPmRldiwgIiVzOiBjbnQgJWQgLT4gJWRcbiIsCisJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJnVkZXYtPmRldi5wb3dlci51c2FnZV9jb3VudCksCisJCQlzdGF0dXMpOwogfQogCiAvKioKQEAgLTE0OTIsMTcgKzEzODUsMjIgQEAKICAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBjb3JlIHN1YnN5c3RlbSB0aGlua3MgQHVkZXYgbWF5CiAgKiBiZSByZWFkeSB0byBhdXRvc3VzcGVuZC4KICAqCi0gKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgbGVmdCB1bmNoYW5nZWQuICBJZiBpdCBvciBhbnkgb2YgdGhlIHVzYWdlIGNvdW50ZXJzCi0gKiBmb3IgYW4gYWN0aXZlIGludGVyZmFjZSBpcyBncmVhdGVyIHRoYW4gMCwgb3IgYXV0b3N1c3BlbmQgaXMgbm90IGFsbG93ZWQKLSAqIGZvciBhbnkgb3RoZXIgcmVhc29uLCBubyBhdXRvc3VzcGVuZCByZXF1ZXN0IHdpbGwgYmUgcXVldWVkLgorICogQHVkZXYncyB1c2FnZSBjb3VudGVyIGxlZnQgdW5jaGFuZ2VkLiAgSWYgaXQgaXMgMCBhbmQgYWxsIHRoZSBpbnRlcmZhY2VzCisgKiBhcmUgaW5hY3RpdmUgdGhlbiBhbiBhdXRvc3VzcGVuZCB3aWxsIGJlIGF0dGVtcHRlZC4gIFRoZSBhdHRlbXB0IG1heQorICogZmFpbCBvciBiZSBkZWxheWVkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2suCiAgKgogICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCiAgKi8KIHZvaWQgdXNiX3RyeV9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JdXNiX2F1dG9wbV9kb19kZXZpY2UodWRldiwgMCk7Ci0JZGV2X3ZkYmcoJnVkZXYtPmRldiwgIiVzOiBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgdWRldi0+cG1fdXNhZ2VfY250KTsKKwlpbnQJc3RhdHVzOworCisJc3RhdHVzID0gcG1fcnVudGltZV9pZGxlKCZ1ZGV2LT5kZXYpOworCWRldl92ZGJnKCZ1ZGV2LT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZ1ZGV2LT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkJc3RhdHVzKTsKIH0KIAogLyoqCkBAIC0xNTExLDE2ICsxNDA5LDE1IEBACiAgKgogICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGNvcmUgc3Vic3lzdGVtIHdhbnRzIHRvIHVzZSBAdWRldgogICogYW5kIG5lZWRzIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGlzIG5vdCBzdXNwZW5kZWQuICBObyBhdXRvc3VzcGVuZCB3aWxsCi0gKiBvY2N1ciB1bnRpbCB1c2JfYXV0b3N1c3BlbmRfZGV2aWNlIGlzIGNhbGxlZC4gIChOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdAotICogcHJldmVudCBzdXNwZW5kIGV2ZW50cyBvcmlnaW5hdGluZyBpbiB0aGUgUE0gY29yZS4pICBFeGFtcGxlcyB3b3VsZCBiZQotICogd2hlbiBAdWRldidzIGRldmljZSBmaWxlIGluIHVzYmZzIGlzIG9wZW5lZCBvciB3aGVuIGEgcmVtb3RlLXdha2V1cAorICogb2NjdXIgdW50aWwgdXNiX2F1dG9zdXNwZW5kX2RldmljZSgpIGlzIGNhbGxlZC4gIChOb3RlIHRoYXQgdGhpcyB3aWxsCisgKiBub3QgcHJldmVudCBzdXNwZW5kIGV2ZW50cyBvcmlnaW5hdGluZyBpbiB0aGUgUE0gY29yZS4pICBFeGFtcGxlcyB3b3VsZAorICogYmUgd2hlbiBAdWRldidzIGRldmljZSBmaWxlIGluIHVzYmZzIGlzIG9wZW5lZCBvciB3aGVuIGEgcmVtb3RlLXdha2V1cAogICogcmVxdWVzdCBpcyByZWNlaXZlZC4KICAqCiAgKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgdG8gcHJldmVudCBzdWJzZXF1ZW50IGF1dG9zdXNwZW5kcy4KICAqIEhvd2V2ZXIgaWYgdGhlIGF1dG9yZXN1bWUgZmFpbHMgdGhlbiB0aGUgdXNhZ2UgY291bnRlciBpcyByZS1kZWNyZW1lbnRlZC4KICAqCi0gKiBPZnRlbiB0aGUgY2FsbGVyIHdpbGwgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLCBidXQgdGhpcyBpcyBub3QKLSAqIG5lY2Vzc2FyeSAoYW5kIGF0dGVtcHRpbmcgaXQgbWlnaHQgY2F1c2UgZGVhZGxvY2spLgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KICAqLwpAQCAtMTUyOCw0MiArMTQyNSwxNCBAQAogewogCWludAlzdGF0dXM7CiAKLQlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2RldmljZSh1ZGV2LCAxKTsKLQlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IHN0YXR1cyAlZCBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzLCB1ZGV2LT5wbV91c2FnZV9jbnQpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIEludGVybmFsIHJvdXRpbmUgdG8gYWRqdXN0IGFuIGludGVyZmFjZSdzIHVzYWdlIGNvdW50ZXIgYW5kIGNoYW5nZQotICogaXRzIGRldmljZSdzIGF1dG9zdXNwZW5kIHN0YXRlLgotICovCi1zdGF0aWMgaW50IHVzYl9hdXRvcG1fZG9faW50ZXJmYWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQlpbnQgaW5jX3VzYWdlX2NudCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaW50CQkJc3RhdHVzID0gMDsKLQotCXVzYl9wbV9sb2NrKHVkZXYpOwotCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKQotCQlzdGF0dXMgPSAtRU5PREVWOwotCWVsc2UgewotCQlhdG9taWNfYWRkKGluY191c2FnZV9jbnQsICZpbnRmLT5wbV91c2FnZV9jbnQpOwotCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQlpZiAoaW5jX3VzYWdlX2NudCA+PSAwICYmCi0JCQkJYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPiAwKSB7Ci0JCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldiwKLQkJCQkJCVBNU0dfQVVUT19SRVNVTUUpOwotCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCWF0b21pY19zdWIoaW5jX3VzYWdlX2NudCwgJmludGYtPnBtX3VzYWdlX2NudCk7Ci0JCQllbHNlCi0JCQkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKLQkJfSBlbHNlIGlmIChpbmNfdXNhZ2VfY250IDw9IDAgJiYKLQkJCQlhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA8PSAwKSB7Ci0JCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKLQkJfQotCX0KLQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCXN0YXR1cyA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnVkZXYtPmRldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkZXYtPmRldik7CisJZGV2X3ZkYmcoJnVkZXYtPmRldiwgIiVzOiBjbnQgJWQgLT4gJWRcbiIsCisJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJnVkZXYtPmRldi5wb3dlci51c2FnZV9jb3VudCksCisJCQlzdGF0dXMpOworCWlmIChzdGF0dXMgPiAwKQorCQlzdGF0dXMgPSAwOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE1NzcsMzQgKzE0NDYsMjUgQEAKICAqIGNsb3NlZC4KICAqCiAgKiBUaGUgcm91dGluZSBkZWNyZW1lbnRzIEBpbnRmJ3MgdXNhZ2UgY291bnRlci4gIFdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcwotICogMCwgYSBkZWxheWVkIGF1dG9zdXNwZW5kIHJlcXVlc3QgZm9yIEBpbnRmJ3MgZGV2aWNlIGlzIHF1ZXVlZC4gIFdoZW4KLSAqIHRoZSBkZWxheSBleHBpcmVzLCBpZiBAaW50Zi0+cG1fdXNhZ2VfY250IGlzIHN0aWxsIDw9IDAgYWxvbmcgd2l0aCBhbGwKLSAqIHRoZSBvdGhlciB1c2FnZSBjb3VudGVycyBmb3IgdGhlIHNpYmxpbmcgaW50ZXJmYWNlcyBhbmQgQGludGYncwotICogdXNiX2RldmljZSwgdGhlIGRldmljZSBhbmQgYWxsIGl0cyBpbnRlcmZhY2VzIHdpbGwgYmUgYXV0b3N1c3BlbmRlZC4KLSAqCi0gKiBOb3RlIHRoYXQgQGludGYtPnBtX3VzYWdlX2NudCBpcyBvd25lZCBieSB0aGUgaW50ZXJmYWNlIGRyaXZlci4gIFRoZQotICogY29yZSB3aWxsIG5vdCBjaGFuZ2UgaXRzIHZhbHVlIG90aGVyIHRoYW4gdGhlIGluY3JlbWVudCBhbmQgZGVjcmVtZW50Ci0gKiBpbiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UgYW5kIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZS4gIFRoZSBkcml2ZXIKLSAqIG1heSB1c2UgdGhpcyBzaW1wbGUgY291bnRlci1vcmllbnRlZCBkaXNjaXBsaW5lIG9yIG1heSBzZXQgdGhlIHZhbHVlCi0gKiBhbnkgd2F5IGl0IGxpa2VzLgorICogMCwgYSBkZWxheWVkIGF1dG9zdXNwZW5kIHJlcXVlc3QgZm9yIEBpbnRmJ3MgZGV2aWNlIGlzIGF0dGVtcHRlZC4gIFRoZQorICogYXR0ZW1wdCBtYXkgZmFpbCAoc2VlIGF1dG9zdXNwZW5kX2NoZWNrKCkpLgogICoKICAqIElmIHRoZSBkcml2ZXIgaGFzIHNldCBAaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCB0aGVuIGF1dG9zdXNwZW5kIHdpbGwKICAqIHRha2UgcGxhY2Ugb25seSBpZiB0aGUgZGV2aWNlJ3MgcmVtb3RlLXdha2V1cCBmYWNpbGl0eSBpcyBlbmFibGVkLgogICoKLSAqIFN1c3BlbmQgbWV0aG9kIGNhbGxzIHF1ZXVlZCBieSB0aGlzIHJvdXRpbmUgY2FuIGFycml2ZSBhdCBhbnkgdGltZQotICogd2hpbGUgQGludGYgaXMgcmVzdW1lZCBhbmQgaXRzIHVzYWdlIGNvdW50ZXIgaXMgZXF1YWwgdG8gMC4gIFRoZXkgYXJlCi0gKiBub3QgcHJvdGVjdGVkIGJ5IHRoZSB1c2JfZGV2aWNlJ3MgbG9jayBidXQgb25seSBieSBpdHMgcG1fbXV0ZXguCi0gKiBEcml2ZXJzIG11c3QgcHJvdmlkZSB0aGVpciBvd24gc3luY2hyb25pemF0aW9uLgotICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCiB2b2lkIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlpbnQJc3RhdHVzOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQJCQlzdGF0dXM7CiAKLQlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2ludGVyZmFjZShpbnRmLCAtMSk7Ci0JZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOworCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlzdGF0dXMgPSBwbV9ydW50aW1lX3B1dF9zeW5jKCZpbnRmLT5kZXYpOworCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZpbnRmLT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkJc3RhdHVzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSk7CiAKQEAgLTE2MTIsMTEgKzE0NzIsMTEgQEAKICAqIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyAtIGRlY3JlbWVudCBhIFVTQiBpbnRlcmZhY2UncyBQTS11c2FnZSBjb3VudGVyCiAgKiBAaW50ZjogdGhlIHVzYl9pbnRlcmZhY2Ugd2hvc2UgY291bnRlciBzaG91bGQgYmUgZGVjcmVtZW50ZWQKICAqCi0gKiBUaGlzIHJvdXRpbmUgZG9lcyBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyBhcwotICogdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCk6IGl0IGRlY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGFuZAotICogcXVldWVzIGEgZGVsYXllZCBhdXRvc3VzcGVuZCByZXF1ZXN0IGlmIHRoZSBjb3VudGVyIGlzIDw9IDAuICBUaGUKLSAqIGRpZmZlcmVuY2UgaXMgdGhhdCBpdCBkb2VzIG5vdCBhY3F1aXJlIHRoZSBkZXZpY2UncyBwbV9tdXRleDsKLSAqIGNhbGxlcnMgbXVzdCBoYW5kbGUgYWxsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhlbXNlbHZlcy4KKyAqIFRoaXMgcm91dGluZSBkb2VzIG11Y2ggdGhlIHNhbWUgdGhpbmcgYXMgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCk6CisgKiBJdCBkZWNyZW1lbnRzIEBpbnRmJ3MgdXNhZ2UgY291bnRlciBhbmQgc2NoZWR1bGVzIGEgZGVsYXllZAorICogYXV0b3N1c3BlbmQgcmVxdWVzdCBpZiB0aGUgY291bnRlciBpcyA8PSAwLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpdAorICogZG9lcyBub3QgcGVyZm9ybSBhbnkgc3luY2hyb25pemF0aW9uOyBjYWxsZXJzIHNob3VsZCBob2xkIGEgcHJpdmF0ZQorICogbG9jayBhbmQgaGFuZGxlIGFsbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoZW1zZWx2ZXMuCiAgKgogICogVHlwaWNhbGx5IGEgZHJpdmVyIHdvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGR1cmluZyBhbiBVUkIncyBjb21wbGV0aW9uCiAgKiBoYW5kbGVyLCBpZiBubyBtb3JlIFVSQnMgd2VyZSBwZW5kaW5nLgpAQCAtMTYyNiwyOCArMTQ4Niw1OCBAQAogdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfYnVzeTsKIAlpbnQJCQlzdGF0dXMgPSAwOwogCi0JaWYgKGludGYtPmNvbmRpdGlvbiA9PSBVU0JfSU5URVJGQUNFX1VOQk9VTkQpIHsKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQl9IGVsc2UgewotCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQlhdG9taWNfZGVjKCZpbnRmLT5wbV91c2FnZV9jbnQpOwotCQlpZiAodWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgfHwgdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPCAwKQotCQkJc3RhdHVzID0gLUVQRVJNOwotCQllbHNlIGlmIChhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA8PSAwICYmCi0JCQkJIXRpbWVyX3BlbmRpbmcoJnVkZXYtPmF1dG9zdXNwZW5kLnRpbWVyKSkgewotCQkJcXVldWVfZGVsYXllZF93b3JrKGtzdXNwZW5kX3VzYl93cSwgJnVkZXYtPmF1dG9zdXNwZW5kLAorCWxhc3RfYnVzeSA9IHVkZXYtPmxhc3RfYnVzeTsKKwl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZpbnRmLT5kZXYpOworCisJaWYgKCF1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCkgeworCQkvKiBPcHRpbWl6YXRpb246IERvbid0IHNjaGVkdWxlIGEgZGVsYXllZCBhdXRvc3VzcGVuZCBpZgorCQkgKiB0aGUgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGFuZCB0aGUgZXhwaXJhdGlvbiB0aW1lCisJCSAqIHdvdWxkbid0IGNoYW5nZS4KKwkJICoKKwkJICogV2UgaGF2ZSB0byB1c2UgdGhlIGludGVyZmFjZSdzIHRpbWVyLiAgQXR0ZW1wdHMgdG8KKwkJICogc2NoZWR1bGUgYSBzdXNwZW5kIGZvciB0aGUgZGV2aWNlIHdvdWxkIGZhaWwgYmVjYXVzZQorCQkgKiB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIGFjdGl2ZS4KKwkJICovCisJCWlmIChpbnRmLT5kZXYucG93ZXIudGltZXJfZXhwaXJlcyA9PSAwIHx8CisJCQkJcm91bmRfamlmZmllc191cChsYXN0X2J1c3kpICE9CisJCQkJcm91bmRfamlmZmllc191cChqaWZmaWVzKSkgeworCQkJc3RhdHVzID0gcG1fc2NoZWR1bGVfc3VzcGVuZCgmaW50Zi0+ZGV2LAorCQkJCQlqaWZmaWVzX3RvX21zZWNzKAogCQkJCQlyb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKAotCQkJCQkJdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkpKTsKKwkJCQkJCXVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5KSkpOwogCQl9CiAJfQotCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKKwlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmaW50Zi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJCXN0YXR1cyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMpOwogCiAvKioKKyAqIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kIC0gZGVjcmVtZW50IGEgVVNCIGludGVyZmFjZSdzIFBNLXVzYWdlIGNvdW50ZXIKKyAqIEBpbnRmOiB0aGUgdXNiX2ludGVyZmFjZSB3aG9zZSBjb3VudGVyIHNob3VsZCBiZSBkZWNyZW1lbnRlZAorICoKKyAqIFRoaXMgcm91dGluZSBkZWNyZW1lbnRzIEBpbnRmJ3MgdXNhZ2UgY291bnRlciBidXQgZG9lcyBub3QgY2Fycnkgb3V0IGFuCisgKiBhdXRvc3VzcGVuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBpbiBhdG9taWMgY29udGV4dC4KKyAqLwordm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZpbnRmLT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQpOworCisvKioKICAqIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSAtIGluY3JlbWVudCBhIFVTQiBpbnRlcmZhY2UncyBQTS11c2FnZSBjb3VudGVyCiAgKiBAaW50ZjogdGhlIHVzYl9pbnRlcmZhY2Ugd2hvc2UgY291bnRlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQKICAqCkBAIC0xNjU5LDI1ICsxNTQ5LDggQEAKICAqIG9yIEBpbnRmIGlzIHVuYm91bmQuICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBhIGNoYXJhY3Rlci1kZXZpY2UKICAqIGRyaXZlciB3aGVuIGl0cyBkZXZpY2UgZmlsZSBpcyBvcGVuZWQuCiAgKgotICoKLSAqIFRoZSByb3V0aW5lIGluY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyLiAgKEhvd2V2ZXIgaWYgdGhlCi0gKiBhdXRvcmVzdW1lIGZhaWxzIHRoZW4gdGhlIGNvdW50ZXIgaXMgcmUtZGVjcmVtZW50ZWQuKSAgU28gbG9uZyBhcyB0aGUKLSAqIGNvdW50ZXIgaXMgZ3JlYXRlciB0aGFuIDAsIGF1dG9zdXNwZW5kIHdpbGwgbm90IGJlIGFsbG93ZWQgZm9yIEBpbnRmCi0gKiBvciBpdHMgdXNiX2RldmljZS4gIFdoZW4gdGhlIGRyaXZlciBpcyBmaW5pc2hlZCB1c2luZyBAaW50ZiBpdCBzaG91bGQKLSAqIGNhbGwgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgdG8gZGVjcmVtZW50IHRoZSB1c2FnZSBjb3VudGVyIGFuZAotICogcXVldWUgYSBkZWxheWVkIGF1dG9zdXNwZW5kIHJlcXVlc3QgKGlmIHRoZSBjb3VudGVyIGlzIDw9IDApLgotICoKLSAqCi0gKiBOb3RlIHRoYXQgQGludGYtPnBtX3VzYWdlX2NudCBpcyBvd25lZCBieSB0aGUgaW50ZXJmYWNlIGRyaXZlci4gIFRoZQotICogY29yZSB3aWxsIG5vdCBjaGFuZ2UgaXRzIHZhbHVlIG90aGVyIHRoYW4gdGhlIGluY3JlbWVudCBhbmQgZGVjcmVtZW50Ci0gKiBpbiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UgYW5kIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZS4gIFRoZSBkcml2ZXIKLSAqIG1heSB1c2UgdGhpcyBzaW1wbGUgY291bnRlci1vcmllbnRlZCBkaXNjaXBsaW5lIG9yIG1heSBzZXQgdGhlIHZhbHVlCi0gKiBhbnkgd2F5IGl0IGxpa2VzLgotICoKLSAqIFJlc3VtZSBtZXRob2QgY2FsbHMgZ2VuZXJhdGVkIGJ5IHRoaXMgcm91dGluZSBjYW4gYXJyaXZlIGF0IGFueSB0aW1lCi0gKiB3aGlsZSBAaW50ZiBpcyBzdXNwZW5kZWQuICBUaGV5IGFyZSBub3QgcHJvdGVjdGVkIGJ5IHRoZSB1c2JfZGV2aWNlJ3MKLSAqIGxvY2sgYnV0IG9ubHkgYnkgaXRzIHBtX211dGV4LiAgRHJpdmVycyBtdXN0IHByb3ZpZGUgdGhlaXIgb3duCi0gKiBzeW5jaHJvbml6YXRpb24uCisgKiBAaW50ZidzIHVzYWdlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgdG8gcHJldmVudCBzdWJzZXF1ZW50IGF1dG9zdXNwZW5kcy4KKyAqIEhvd2V2ZXIgaWYgdGhlIGF1dG9yZXN1bWUgZmFpbHMgdGhlbiB0aGUgY291bnRlciBpcyByZS1kZWNyZW1lbnRlZC4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KICAqLwpAQCAtMTY4NSw5ICsxNTU4LDE2IEBACiB7CiAJaW50CXN0YXR1czsKIAotCXN0YXR1cyA9IHVzYl9hdXRvcG1fZG9faW50ZXJmYWNlKGludGYsIDEpOwotCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKKwlzdGF0dXMgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZpbnRmLT5kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZpbnRmLT5kZXYpOworCWVsc2UKKwkJYXRvbWljX2luYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmaW50Zi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJCXN0YXR1cyk7CisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IDA7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSk7CkBAIC0xNjk3LDE0OSArMTU3NywyMDcgQEAKICAqIEBpbnRmOiB0aGUgdXNiX2ludGVyZmFjZSB3aG9zZSBjb3VudGVyIHNob3VsZCBiZSBpbmNyZW1lbnRlZAogICoKICAqIFRoaXMgcm91dGluZSBkb2VzIG11Y2ggdGhlIHNhbWUgdGhpbmcgYXMKLSAqIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpOiBpdCBpbmNyZW1lbnRzIEBpbnRmJ3MgdXNhZ2UgY291bnRlciBhbmQKLSAqIHF1ZXVlcyBhbiBhdXRvcmVzdW1lIHJlcXVlc3QgaWYgdGhlIHJlc3VsdCBpcyA+IDAuICBUaGUgZGlmZmVyZW5jZXMKLSAqIGFyZSB0aGF0IGl0IGRvZXMgbm90IGFjcXVpcmUgdGhlIGRldmljZSdzIHBtX211dGV4IChjYWxsZXJzIG11c3QKLSAqIGhhbmRsZSBhbGwgc3luY2hyb25pemF0aW9uIGlzc3VlcyB0aGVtc2VsdmVzKSwgYW5kIGl0IGRvZXMgbm90Ci0gKiBhdXRvcmVzdW1lIHRoZSBkZXZpY2UgZGlyZWN0bHkgKGl0IG9ubHkgcXVldWVzIGEgcmVxdWVzdCkuICBBZnRlciBhCi0gKiBzdWNjZXNzZnVsIGNhbGwsIHRoZSBkZXZpY2Ugd2lsbCBnZW5lcmFsbHkgbm90IHlldCBiZSByZXN1bWVkLgorICogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCk6IEl0IGluY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGFuZAorICogcXVldWVzIGFuIGF1dG9yZXN1bWUgcmVxdWVzdCBpZiB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZC4gIFRoZQorICogZGlmZmVyZW5jZXMgYXJlIHRoYXQgaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgc3luY2hyb25pemF0aW9uIChjYWxsZXJzCisgKiBzaG91bGQgaG9sZCBhIHByaXZhdGUgbG9jayBhbmQgaGFuZGxlIGFsbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCisgKiB0aGVtc2VsdmVzKSwgYW5kIGl0IGRvZXMgbm90IGF1dG9yZXN1bWUgdGhlIGRldmljZSBkaXJlY3RseSAoaXQgb25seQorICogcXVldWVzIGEgcmVxdWVzdCkuICBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCwgdGhlIGRldmljZSBtYXkgbm90IHlldCBiZQorICogcmVzdW1lZC4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBpbiBhdG9taWMgY29udGV4dC4KICAqLwogaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaW50CQkJc3RhdHVzID0gMDsKKwlpbnQJCXN0YXR1cyA9IDA7CisJZW51bSBycG1fc3RhdHVzCXM7CiAKLQlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQllbHNlIHsKKwkvKiBEb24ndCByZXF1ZXN0IGEgcmVzdW1lIHVubGVzcyB0aGUgaW50ZXJmYWNlIGlzIGFscmVhZHkgc3VzcGVuZGluZworCSAqIG9yIHN1c3BlbmRlZC4gIERvaW5nIHNvIHdvdWxkIGZvcmNlIGEgcnVubmluZyBzdXNwZW5kIHRpbWVyIHRvIGJlCisJICogY2FuY2VsbGVkLgorCSAqLworCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZpbnRmLT5kZXYpOworCXMgPSBBQ0NFU1NfT05DRShpbnRmLT5kZXYucG93ZXIucnVudGltZV9zdGF0dXMpOworCWlmIChzID09IFJQTV9TVVNQRU5ESU5HIHx8IHMgPT0gUlBNX1NVU1BFTkRFRCkKKwkJc3RhdHVzID0gcG1fcmVxdWVzdF9yZXN1bWUoJmludGYtPmRldik7CisKKwlpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmludGYtPmRldik7CisJZWxzZQogCQlhdG9taWNfaW5jKCZpbnRmLT5wbV91c2FnZV9jbnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPiAwICYmCi0JCQkJdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJCXF1ZXVlX3dvcmsoa3N1c3BlbmRfdXNiX3dxLCAmdWRldi0+YXV0b3Jlc3VtZSk7Ci0JfQotCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKKwlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmaW50Zi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJCXN0YXR1cyk7CisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IDA7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyk7CiAKLSNlbHNlCi0KLXZvaWQgdXNiX2F1dG9zdXNwZW5kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQote30KLQotdm9pZCB1c2JfYXV0b3Jlc3VtZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXt9Ci0KLSNlbmRpZiAvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KLQogLyoqCi0gKiB1c2JfZXh0ZXJuYWxfc3VzcGVuZF9kZXZpY2UgLSBleHRlcm5hbCBzdXNwZW5kIG9mIGEgVVNCIGRldmljZSBhbmQgaXRzIGludGVyZmFjZXMKLSAqIEB1ZGV2OiB0aGUgdXNiX2RldmljZSB0byBzdXNwZW5kCi0gKiBAbXNnOiBQb3dlciBNYW5hZ2VtZW50IG1lc3NhZ2UgZGVzY3JpYmluZyB0aGlzIHN0YXRlIHRyYW5zaXRpb24KKyAqIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9ub19yZXN1bWUgLSBpbmNyZW1lbnQgYSBVU0IgaW50ZXJmYWNlJ3MgUE0tdXNhZ2UgY291bnRlcgorICogQGludGY6IHRoZSB1c2JfaW50ZXJmYWNlIHdob3NlIGNvdW50ZXIgc2hvdWxkIGJlIGluY3JlbWVudGVkCiAgKgotICogVGhpcyByb3V0aW5lIGhhbmRsZXMgZXh0ZXJuYWwgc3VzcGVuZCByZXF1ZXN0czogb25lcyBub3QgZ2VuZXJhdGVkCi0gKiBpbnRlcm5hbGx5IGJ5IGEgVVNCIGRyaXZlciAoYXV0b3N1c3BlbmQpIGJ1dCByYXRoZXIgY29taW5nIGZyb20gdGhlIHVzZXIKLSAqICh2aWEgc3lzZnMpIG9yIHRoZSBQTSBjb3JlIChzeXN0ZW0gc2xlZXApLiAgVGhlIHN1c3BlbmQgd2lsbCBiZSBjYXJyaWVkCi0gKiBvdXQgcmVnYXJkbGVzcyBvZiBAdWRldidzIHVzYWdlIGNvdW50ZXIgb3IgdGhvc2Ugb2YgaXRzIGludGVyZmFjZXMsCi0gKiBhbmQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCByZW1vdGUgd2FrZXVwIGlzIGVuYWJsZWQuICBPZiBjb3Vyc2UsCi0gKiBpbnRlcmZhY2UgZHJpdmVycyBzdGlsbCBoYXZlIHRoZSBvcHRpb24gb2YgZmFpbGluZyB0aGUgc3VzcGVuZCAoaWYKLSAqIHRoZXJlIGFyZSB1bnN1c3BlbmRlZCBjaGlsZHJlbiwgZm9yIGV4YW1wbGUpLgorICogVGhpcyByb3V0aW5lIGluY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGJ1dCBkb2VzIG5vdCBjYXJyeSBvdXQgYW4KKyAqIGF1dG9yZXN1bWUuCiAgKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KKyAqIFRoaXMgcm91dGluZSBjYW4gcnVuIGluIGF0b21pYyBjb250ZXh0LgogICovCi1pbnQgdXNiX2V4dGVybmFsX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQordm9pZCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCWludAlzdGF0dXM7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCi0JZG9fdW5iaW5kX3JlYmluZCh1ZGV2LCBET19VTkJJTkQpOwotCXVzYl9wbV9sb2NrKHVkZXYpOwotCXN0YXR1cyA9IHVzYl9zdXNwZW5kX2JvdGgodWRldiwgbXNnKTsKLQl1c2JfcG1fdW5sb2NrKHVkZXYpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qKgotICogdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2UgLSBleHRlcm5hbCByZXN1bWUgb2YgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcwotICogQHVkZXY6IHRoZSB1c2JfZGV2aWNlIHRvIHJlc3VtZQotICogQG1zZzogUG93ZXIgTWFuYWdlbWVudCBtZXNzYWdlIGRlc2NyaWJpbmcgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uCi0gKgotICogVGhpcyByb3V0aW5lIGhhbmRsZXMgZXh0ZXJuYWwgcmVzdW1lIHJlcXVlc3RzOiBvbmVzIG5vdCBnZW5lcmF0ZWQKLSAqIGludGVybmFsbHkgYnkgYSBVU0IgZHJpdmVyIChhdXRvcmVzdW1lKSBidXQgcmF0aGVyIGNvbWluZyBmcm9tIHRoZSB1c2VyCi0gKiAodmlhIHN5c2ZzKSwgdGhlIFBNIGNvcmUgKHN5c3RlbSByZXN1bWUpLCBvciB0aGUgZGV2aWNlIGl0c2VsZiAocmVtb3RlCi0gKiB3YWtldXApLiAgQHVkZXYncyB1c2FnZSBjb3VudGVyIGlzIHVuYWZmZWN0ZWQuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KLSAqLwotaW50IHVzYl9leHRlcm5hbF9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQotewotCWludAlzdGF0dXM7Ci0KLQl1c2JfcG1fbG9jayh1ZGV2KTsKLQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldiwgbXNnKTsKIAl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCXVzYl9wbV91bmxvY2sodWRldik7Ci0JaWYgKHN0YXR1cyA9PSAwKQotCQlkb191bmJpbmRfcmViaW5kKHVkZXYsIERPX1JFQklORCk7Ci0KLQkvKiBOb3cgdGhhdCB0aGUgZGV2aWNlIGlzIGF3YWtlLCB3ZSBjYW4gc3RhcnQgdHJ5aW5nIHRvIGF1dG9zdXNwZW5kCi0JICogaXQgYWdhaW4uICovCi0JaWYgKHN0YXR1cyA9PSAwKQotCQl1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKLQlyZXR1cm4gc3RhdHVzOworCWF0b21pY19pbmMoJmludGYtPnBtX3VzYWdlX2NudCk7CisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJmludGYtPmRldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKTsKIAotaW50IHVzYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKKy8qIEludGVybmFsIHJvdXRpbmUgdG8gY2hlY2sgd2hldGhlciB3ZSBtYXkgYXV0b3N1c3BlbmQgYSBkZXZpY2UuICovCitzdGF0aWMgaW50IGF1dG9zdXNwZW5kX2NoZWNrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCWludAkJCWk7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJdW5zaWduZWQgbG9uZwkJc3VzcGVuZF90aW1lLCBqOwogCi0JdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQotCS8qIElmIHVkZXYgaXMgYWxyZWFkeSBzdXNwZW5kZWQsIHdlIGNhbiBza2lwIHRoaXMgc3VzcGVuZCBhbmQKLQkgKiB3ZSBzaG91bGQgYWxzbyBza2lwIHRoZSB1cGNvbWluZyBzeXN0ZW0gcmVzdW1lLiAgSGlnaC1zcGVlZAotCSAqIHJvb3QgaHVicyBhcmUgYW4gZXhjZXB0aW9uOyB0aGV5IG5lZWQgdG8gcmVzdW1lIHdoZW5ldmVyIHRoZQotCSAqIHN5c3RlbSB3YWtlcyB1cCBpbiBvcmRlciBmb3IgVVNCLVBFUlNJU1QgcG9ydCBoYW5kb3ZlciB0byB3b3JrCi0JICogcHJvcGVybHkuCisJLyogRmFpbCBpZiBhdXRvc3VzcGVuZCBpcyBkaXNhYmxlZCwgb3IgYW55IGludGVyZmFjZXMgYXJlIGluIHVzZSwgb3IKKwkgKiBhbnkgaW50ZXJmYWNlIGRyaXZlcnMgcmVxdWlyZSByZW1vdGUgd2FrZXVwIGJ1dCBpdCBpc24ndCBhdmFpbGFibGUuCiAJICovCi0JaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKLQkJaWYgKHVkZXYtPnBhcmVudCB8fCB1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKLQkJCXVkZXYtPnNraXBfc3lzX3Jlc3VtZSA9IDE7Ci0JCXJldHVybiAwOworCXVkZXYtPmRvX3JlbW90ZV93YWtldXAgPSBkZXZpY2VfbWF5X3dha2V1cCgmdWRldi0+ZGV2KTsKKwlpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCisJCQkvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGludGVyZmFjZXMgdGhhdCBhcmUKKwkJCSAqIGRpc2FibGVkIGZvciBydW50aW1lIFBNLiAgRWl0aGVyIHRoZXkgYXJlIHVuYm91bmQKKwkJCSAqIG9yIGVsc2UgdGhlaXIgZHJpdmVycyBkb24ndCBzdXBwb3J0IGF1dG9zdXNwZW5kCisJCQkgKiBhbmQgc28gdGhleSBhcmUgcGVybWFuZW50bHkgYWN0aXZlLgorCQkJICovCisJCQlpZiAoaW50Zi0+ZGV2LnBvd2VyLmRpc2FibGVfZGVwdGgpCisJCQkJY29udGludWU7CisJCQlpZiAoYXRvbWljX3JlYWQoJmludGYtPmRldi5wb3dlci51c2FnZV9jb3VudCkgPiAwKQorCQkJCXJldHVybiAtRUJVU1k7CisJCQlpZiAoaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCAmJgorCQkJCQkhdWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgeworCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgInJlbW90ZSB3YWtldXAgbmVlZGVkICIKKwkJCQkJCSJmb3IgYXV0b3N1c3BlbmRcbiIpOworCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCX0KKworCQkJLyogRG9uJ3QgYWxsb3cgYXV0b3N1c3BlbmQgaWYgdGhlIGRldmljZSB3aWxsIG5lZWQKKwkJCSAqIGEgcmVzZXQtcmVzdW1lIGFuZCBhbnkgb2YgaXRzIGludGVyZmFjZSBkcml2ZXJzCisJCQkgKiBkb2Vzbid0IGluY2x1ZGUgc3VwcG9ydCBvciBuZWVkcyByZW1vdGUgd2FrZXVwLgorCQkJICovCisJCQlpZiAodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSkgeworCQkJCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXI7CisKKwkJCQlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCQkJCWlmICghZHJpdmVyLT5yZXNldF9yZXN1bWUgfHwKKwkJCQkJCWludGYtPm5lZWRzX3JlbW90ZV93YWtldXApCisJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCX0KKwkJfQogCX0KIAotCXVkZXYtPnNraXBfc3lzX3Jlc3VtZSA9IDA7Ci0JcmV0dXJuIHVzYl9leHRlcm5hbF9zdXNwZW5kX2RldmljZSh1ZGV2LCBtc2cpOworCS8qIElmIGV2ZXJ5dGhpbmcgaXMgb2theSBidXQgdGhlIGRldmljZSBoYXNuJ3QgYmVlbiBpZGxlIGZvciBsb25nCisJICogZW5vdWdoLCBxdWV1ZSBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdC4KKwkgKi8KKwlqID0gQUNDRVNTX09OQ0UoamlmZmllcyk7CisJc3VzcGVuZF90aW1lID0gdWRldi0+bGFzdF9idXN5ICsgdWRldi0+YXV0b3N1c3BlbmRfZGVsYXk7CisJaWYgKHRpbWVfYmVmb3JlKGosIHN1c3BlbmRfdGltZSkpIHsKKwkJcG1fc2NoZWR1bGVfc3VzcGVuZCgmdWRldi0+ZGV2LCBqaWZmaWVzX3RvX21zZWNzKAorCQkJCXJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoc3VzcGVuZF90aW1lIC0gaikpKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXJldHVybiAwOwogfQogCi1pbnQgdXNiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCitzdGF0aWMgaW50IHVzYl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwotCWludAkJCXN0YXR1czsKKwlpbnQJc3RhdHVzID0gMDsKIAotCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0KLQkvKiBJZiB1ZGV2LT5za2lwX3N5c19yZXN1bWUgaXMgc2V0IHRoZW4gdWRldiB3YXMgYWxyZWFkeSBzdXNwZW5kZWQKLQkgKiB3aGVuIHRoZSBzeXN0ZW0gc2xlZXAgc3RhcnRlZCwgc28gd2UgZG9uJ3Qgd2FudCB0byByZXN1bWUgaXQKLQkgKiBkdXJpbmcgdGhpcyBzeXN0ZW0gd2FrZXVwLgorCS8qIEEgVVNCIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIGlmIGl0IHBhc3NlcyB0aGUgdmFyaW91cyBhdXRvc3VzcGVuZAorCSAqIGNoZWNrcy4gIFJ1bnRpbWUgc3VzcGVuZCBmb3IgYSBVU0IgZGV2aWNlIG1lYW5zIHN1c3BlbmRpbmcgYWxsIHRoZQorCSAqIGludGVyZmFjZXMgYW5kIHRoZW4gdGhlIGRldmljZSBpdHNlbGYuCiAJICovCi0JaWYgKHVkZXYtPnNraXBfc3lzX3Jlc3VtZSkKLQkJcmV0dXJuIDA7Ci0Jc3RhdHVzID0gdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2UodWRldiwgbXNnKTsKKwlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwogCi0JLyogQXZvaWQgUE0gZXJyb3IgbWVzc2FnZXMgZm9yIGRldmljZXMgZGlzY29ubmVjdGVkIHdoaWxlIHN1c3BlbmRlZAotCSAqIGFzIHdlJ2xsIGRpc3BsYXkgcmVndWxhciBkaXNjb25uZWN0IG1lc3NhZ2VzIGp1c3QgYSBiaXQgbGF0ZXIuCi0JICovCi0JaWYgKHN0YXR1cyA9PSAtRU5PREVWKQotCQlyZXR1cm4gMDsKKwkJaWYgKGF1dG9zdXNwZW5kX2NoZWNrKHVkZXYpICE9IDApCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKKworCQkvKiBJZiBhbiBpbnRlcmZhY2UgZmFpbHMgdGhlIHN1c3BlbmQsIGFkanVzdCB0aGUgbGFzdF9idXN5CisJCSAqIHRpbWUgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW5vdGhlciBzdXNwZW5kIGF0dGVtcHQgcmlnaHQKKwkJICogYXdheS4KKwkJICovCisJCWlmIChzdGF0dXMpIHsKKwkJCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXMgKworCQkJCQkodWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPT0gMCA/CisJCQkJCQlIWi8yIDogMCk7CisJCX0KKworCQkvKiBQcmV2ZW50IHRoZSBwYXJlbnQgZnJvbSBzdXNwZW5kaW5nIGltbWVkaWF0ZWx5IGFmdGVyICovCisJCWVsc2UgaWYgKHVkZXYtPnBhcmVudCkgeworCQkJdWRldi0+cGFyZW50LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCQl9CisJfQorCisJLyogUnVudGltZSBzdXNwZW5kIGZvciBhIFVTQiBpbnRlcmZhY2UgZG9lc24ndCBtZWFuIGFueXRoaW5nLiAqLwogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KK3N0YXRpYyBpbnQgdXNiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBSdW50aW1lIHJlc3VtZSBmb3IgYSBVU0IgZGV2aWNlIG1lYW5zIHJlc3VtaW5nIGJvdGggdGhlIGRldmljZQorCSAqIGFuZCBhbGwgaXRzIGludGVyZmFjZXMuCisJICovCisJaWYgKGlzX3VzYl9kZXZpY2UoZGV2KSkgeworCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwkJaW50CQkJc3RhdHVzOworCisJCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aCh1ZGV2LCBQTVNHX0FVVE9fUkVTVU1FKTsKKwkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBSdW50aW1lIHJlc3VtZSBmb3IgYSBVU0IgaW50ZXJmYWNlIGRvZXNuJ3QgbWVhbiBhbnl0aGluZy4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBBbiBpZGxlIFVTQiBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCBpZiBpdCBwYXNzZXMgdGhlIHZhcmlvdXMKKwkgKiBhdXRvc3VzcGVuZCBjaGVja3MuICBBbiBpZGxlIGludGVyZmFjZSBjYW4gYmUgc3VzcGVuZGVkIGF0CisJICogYW55IHRpbWUuCisJICovCisJaWYgKGlzX3VzYl9kZXZpY2UoZGV2KSkgeworCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKworCQlpZiAoYXV0b3N1c3BlbmRfY2hlY2sodWRldikgIT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCXBtX3J1bnRpbWVfc3VzcGVuZChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdXNiX2J1c19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9CXVzYl9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0JdXNiX3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUgPQkJdXNiX3J1bnRpbWVfaWRsZSwKK307CisKKyNlbHNlCisKKyNkZWZpbmUgdXNiX2J1c19wbV9vcHMJKCooc3RydWN0IGRldl9wbV9vcHMgKikgTlVMTCkKKworI2VuZGlmIC8qIENPTkZJR19VU0JfU1VTUEVORCAqLwogCiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0gewogCS5uYW1lID0JCSJ1c2IiLAogCS5tYXRjaCA9CXVzYl9kZXZpY2VfbWF0Y2gsCiAJLnVldmVudCA9CXVzYl91ZXZlbnQsCisJLnBtID0JCSZ1c2JfYnVzX3BtX29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggZmRmYWE3OC4uZDI2YjllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggYmZjNmMyZS4uYzM1MzZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTM0LDcgKzM0LDYgQEAKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wcywgKm5ld19mb3BzID0gTlVMTDsKIAotCWxvY2tfa2VybmVsKCk7CiAJZG93bl9yZWFkKCZtaW5vcl9yd3NlbSk7CiAJYyA9IHVzYl9taW5vcnNbbWlub3JdOwogCkBAIC01Myw3ICs1Miw2IEBACiAJZm9wc19wdXQob2xkX2ZvcHMpOwogIGRvbmU6CiAJdXBfcmVhZCgmbWlub3JfcndzZW0pOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDJkY2Y5MDYuLjE1Mjg2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zNyw2ICszOCwxMjIgQEAKIAogLyogUENJLWJhc2VkIEhDcyBhcmUgY29tbW9uLCBidXQgcGxlbnR5IG9mIG5vbi1QQ0kgSENzIGFyZSB1c2VkIHRvbyAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisKKy8qIENvb3JkaW5hdGUgaGFuZG9mZnMgYmV0d2VlbiBFSENJIGFuZCBjb21wYW5pb24gY29udHJvbGxlcnMKKyAqIGR1cmluZyBzeXN0ZW0gcmVzdW1lCisgKi8KKworc3RhdGljIERFRklORV9NVVRFWChjb21wYW5pb25zX211dGV4KTsKKworI2RlZmluZSBDTF9VSENJCQlQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJCisjZGVmaW5lIENMX09IQ0kJCVBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kKKyNkZWZpbmUgQ0xfRUhDSQkJUENJX0NMQVNTX1NFUklBTF9VU0JfRUhDSQorCitlbnVtIGNvbXBhbmlvbl9hY3Rpb24geworCVNFVF9IU19DT01QQU5JT04sIENMRUFSX0hTX0NPTVBBTklPTiwgV0FJVF9GT1JfQ09NUEFOSU9OUworfTsKKworc3RhdGljIHZvaWQgY29tcGFuaW9uX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJZW51bSBjb21wYW5pb25fYWN0aW9uIGFjdGlvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldgkJKmNvbXBhbmlvbjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmNvbXBhbmlvbl9oY2Q7CisJdW5zaWduZWQgaW50CQlzbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIG90aGVyIFBDSSBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgc2xvdC4KKwkgKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSB0aGVuIHdlIGFyZSBsb29raW5nIGZvciBFSENJLCBhbmQKKwkgKiB2aWNlIHZlcnNhLgorCSAqLworCWNvbXBhbmlvbiA9IE5VTEw7CisJZm9yICg7OykgeworCQljb21wYW5pb24gPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBjb21wYW5pb24pOworCQlpZiAoIWNvbXBhbmlvbikKKwkJCWJyZWFrOworCQlpZiAoY29tcGFuaW9uLT5idXMgIT0gcGRldi0+YnVzIHx8CisJCQkJUENJX1NMT1QoY29tcGFuaW9uLT5kZXZmbikgIT0gc2xvdCkKKwkJCWNvbnRpbnVlOworCisJCWNvbXBhbmlvbl9oY2QgPSBwY2lfZ2V0X2RydmRhdGEoY29tcGFuaW9uKTsKKwkJaWYgKCFjb21wYW5pb25faGNkKQorCQkJY29udGludWU7CisKKwkJLyogRm9yIFNFVF9IU19DT01QQU5JT04sIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgRUhDSSBidXMgaW4KKwkJICogdGhlIE9IQ0kvVUhDSSBjb21wYW5pb24gYnVzIHN0cnVjdHVyZS4KKwkJICogRm9yIENMRUFSX0hTX0NPTVBBTklPTiwgY2xlYXIgdGhlIHBvaW50ZXIgdG8gdGhlIEVIQ0kgYnVzCisJCSAqIGluIHRoZSBPSENJL1VIQ0kgY29tcGFuaW9uIGJ1cyBzdHJ1Y3R1cmUuCisJCSAqIEZvciBXQUlUX0ZPUl9DT01QQU5JT05TLCB3YWl0IHVudGlsIHRoZSBPSENJL1VIQ0kKKwkJICogY29tcGFuaW9uIGNvbnRyb2xsZXJzIGhhdmUgZnVsbHkgcmVzdW1lZC4KKwkJICovCisKKwkJaWYgKChwZGV2LT5jbGFzcyA9PSBDTF9PSENJIHx8IHBkZXYtPmNsYXNzID09IENMX1VIQ0kpICYmCisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9FSENJKSB7CisJCQkvKiBhY3Rpb24gbXVzdCBiZSBTRVRfSFNfQ09NUEFOSU9OICovCisJCQlkZXZfZGJnKCZjb21wYW5pb24tPmRldiwgIkhTIGNvbXBhbmlvbiBmb3IgJXNcbiIsCisJCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJCWhjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmY29tcGFuaW9uX2hjZC0+c2VsZjsKKworCQl9IGVsc2UgaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kgJiYKKwkJCQkoY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9PSENJIHx8CisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9VSENJKSkgeworCQkJc3dpdGNoIChhY3Rpb24pIHsKKwkJCWNhc2UgU0VUX0hTX0NPTVBBTklPTjoKKwkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJIUyBjb21wYW5pb24gZm9yICVzXG4iLAorCQkJCQkJZGV2X25hbWUoJmNvbXBhbmlvbi0+ZGV2KSk7CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmaGNkLT5zZWxmOworCQkJCWJyZWFrOworCQkJY2FzZSBDTEVBUl9IU19DT01QQU5JT046CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSBOVUxMOworCQkJCWJyZWFrOworCQkJY2FzZSBXQUlUX0ZPUl9DT01QQU5JT05TOgorCQkJCWRldmljZV9wbV93YWl0X2Zvcl9kZXYoJnBkZXYtPmRldiwKKwkJCQkJCSZjb21wYW5pb24tPmRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9oc19jb21wYW5pb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJbXV0ZXhfbG9jaygmY29tcGFuaW9uc19tdXRleCk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGhjZCk7CisJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIFNFVF9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwltdXRleF9sb2NrKCZjb21wYW5pb25zX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisKKwkvKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSwganVzdCBjbGVhciBpdHMgaHNfY29tcGFuaW9uIHBvaW50ZXIgKi8KKwlpZiAocGRldi0+Y2xhc3MgPT0gQ0xfT0hDSSB8fCBwZGV2LT5jbGFzcyA9PSBDTF9VSENJKQorCQloY2QtPnNlbGYuaHNfY29tcGFuaW9uID0gTlVMTDsKKworCS8qIE90aGVyd2lzZSBzZWFyY2ggZm9yIGNvbXBhbmlvbiBidXNlcyBhbmQgY2xlYXIgdGhlaXIgcG9pbnRlcnMgKi8KKwllbHNlCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBDTEVBUl9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NvbXBhbmlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLyogT25seSBFSENJIGNvbnRyb2xsZXJzIG5lZWQgdG8gd2FpdC4KKwkgKiBObyBsb2NraW5nIGlzIG5lZWRlZCBiZWNhdXNlIGEgY29udHJvbGxlciBjYW5ub3QgYmUgcmVzdW1lZAorCSAqIHdoaWxlIG9uZSBvZiBpdHMgY29tcGFuaW9ucyBpcyBnZXR0aW5nIHVuYm91bmQuCisJICovCisJaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kpCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBXQUlUX0ZPUl9DT01QQU5JT05TKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqZCwgc3RydWN0IHVzYl9oY2QgKmgpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9jb21wYW5pb25zKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTIzLDcgKzI0MCw3IEBACiAJCWlmIChyZWdpb24gPT0gUENJX1JPTV9SRVNPVVJDRSkgewogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJubyBpL28gcmVnaW9ucyBhdmFpbGFibGVcbiIpOwogCQkJcmV0dmFsID0gLUVCVVNZOwotCQkJZ290byBlcnIxOworCQkJZ290byBlcnIyOwogCQl9CiAJfQogCkBAIC0xMzIsNiArMjQ5LDcgQEAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+aXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OworCXNldF9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXJldHVybiByZXR2YWw7CiAKICBlcnI0OgpAQCAtMTQyLDYgKzI2MCw3IEBACiAJfSBlbHNlCiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAgZXJyMjoKKwljbGVhcl9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAgZXJyMToKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTE4MCw2ICsyOTksNyBAQAogCX0gZWxzZSB7CiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJfQorCWNsZWFyX2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KQEAgLTM0NCw2ICs0NjQsMTEgQEAKIAljbGVhcl9iaXQoSENEX0ZMQUdfU0FXX0lSUSwgJmhjZC0+ZmxhZ3MpOwogCiAJaWYgKGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKSB7CisJCS8qIFRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBvbmx5IGR1cmluZyBzeXN0ZW0gcmVzdW1lLAorCQkgKiBub3QgZHVyaW5nIHJ1bnRpbWUgcmVzdW1lLgorCQkgKi8KKwkJd2FpdF9mb3JfY29tcGFuaW9ucyhwY2lfZGV2LCBoY2QpOworCiAJCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKGhjZCwgaGliZXJuYXRlZCk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWRldl9lcnIoZGV2LCAiUENJIHBvc3QtcmVzdW1lIGVycm9yICVkIVxuIiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDgwOTk1ZWYuLjJmOGNlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKQEAgLTE0MSw3ICsxNDIsNyBAQAogCTB4MDksICAgICAgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDJeOSA9IDUxMiBCeXRlcyAqLwogCiAJMHg2YiwgMHgxZCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgTGludXggRm91bmRhdGlvbiAqLwotCTB4MDIsIDB4MDAsIC8qICBfX2xlMTYgaWRQcm9kdWN0OyBkZXZpY2UgMHgwMDAyICovCisJMHgwMywgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7IGRldmljZSAweDAwMDMgKi8KIAlLRVJORUxfVkVSLCBLRVJORUxfUkVMLCAvKiAgX19sZTE2IGJjZERldmljZSAqLwogCiAJMHgwMywgICAgICAgLyogIF9fdTggIGlNYW51ZmFjdHVyZXI7ICovCkBAIC0xNjcwLDExICsxNjcxLDE2IEBACiAJCQl9CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IG51bV9pbnRmczsgKytpKSB7CisJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpmaXJzdF9hbHQ7CisJCQlpbnQgaWZhY2VfbnVtOworCisJCQlmaXJzdF9hbHQgPSAmbmV3X2NvbmZpZy0+aW50Zl9jYWNoZVtpXS0+YWx0c2V0dGluZ1swXTsKKwkJCWlmYWNlX251bSA9IGZpcnN0X2FsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCQkJLyogU2V0IHVwIGVuZHBvaW50cyBmb3IgYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIDAgKi8KLQkJCWFsdCA9IHVzYl9maW5kX2FsdF9zZXR0aW5nKG5ld19jb25maWcsIGksIDApOworCQkJYWx0ID0gdXNiX2ZpbmRfYWx0X3NldHRpbmcobmV3X2NvbmZpZywgaWZhY2VfbnVtLCAwKTsKIAkJCWlmICghYWx0KQogCQkJCS8qIE5vIGFsdCBzZXR0aW5nIDA/IFBpY2sgdGhlIGZpcnN0IHNldHRpbmcuICovCi0JCQkJYWx0ID0gJm5ld19jb25maWctPmludGZfY2FjaGVbaV0tPmFsdHNldHRpbmdbMF07CisJCQkJYWx0ID0gZmlyc3RfYWx0OwogCiAJCQlmb3IgKGogPSAwOyBqIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGorKykgewogCQkJCXJldCA9IGhjZC0+ZHJpdmVyLT5hZGRfZW5kcG9pbnQoaGNkLCB1ZGV2LCAmYWx0LT5lbmRwb2ludFtqXSk7CkBAIC0xODUzLDYgKzE4NTksMTAgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwogLyogV29ya3F1ZXVlIHJvdXRpbmUgZm9yIHJvb3QtaHViIHJlbW90ZSB3YWtldXAgKi8KIHN0YXRpYyB2b2lkIGhjZF9yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC0xODYwLDggKzE4NzAsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaGNkLT5zZWxmLnJvb3RfaHViOwogCiAJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCXVzYl9tYXJrX2xhc3RfYnVzeSh1ZGV2KTsKLQl1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2LCBQTVNHX1JFTU9URV9SRVNVTUUpOworCXVzYl9yZW1vdGVfd2FrZXVwKHVkZXYpOwogCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogfQogCkBAIC0xODgwLDEyICsxODg5LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7CiAJaWYgKGhjZC0+cmhfcmVnaXN0ZXJlZCkKLQkJcXVldWVfd29yayhrc3VzcGVuZF91c2Jfd3EsICZoY2QtPndha2V1cF93b3JrKTsKKwkJcXVldWVfd29yayhwbV93cSwgJmhjZC0+d2FrZXVwX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9yZXN1bWVfcm9vdF9odWIpOwogCi0jZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjAzMCw3ICsyMDM5LDcgQEAKIAlpbml0X3RpbWVyKCZoY2QtPnJoX3RpbWVyKTsKIAloY2QtPnJoX3RpbWVyLmZ1bmN0aW9uID0gcmhfdGltZXJfZnVuYzsKIAloY2QtPnJoX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaGNkOwotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAogCUlOSVRfV09SSygmaGNkLT53YWtldXBfd29yaywgaGNkX3Jlc3VtZV93b3JrKTsKICNlbmRpZgogCW11dGV4X2luaXQoJmhjZC0+YmFuZHdpZHRoX211dGV4KTsKQEAgLTIyMzAsNyArMjIzOSw3IEBACiAJaGNkLT5yaF9yZWdpc3RlcmVkID0gMDsKIAlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKIAljYW5jZWxfd29ya19zeW5jKCZoY2QtPndha2V1cF93b3JrKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaAppbmRleCBiYmUyYjkyLi5hM2NkYjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0CXJoX3RpbWVyOwkvKiBkcml2ZXMgcm9vdC1odWIgcG9sbGluZyAqLwogCXN0cnVjdCB1cmIJCSpzdGF0dXNfdXJiOwkvKiB0aGUgY3VycmVudCBzdGF0dXMgdXJiICovCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECiAJc3RydWN0IHdvcmtfc3RydWN0CXdha2V1cF93b3JrOwkvKiBmb3IgcmVtb3RlIHdha2V1cCAqLwogI2VuZGlmCiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCS8qIHhIQ0kgc3BlY2lmaWMgZnVuY3Rpb25zICovCiAJCS8qIENhbGxlZCBieSB1c2JfYWxsb2NfZGV2IHRvIGFsbG9jIEhDIGRldmljZSBzdHJ1Y3R1cmVzICovCiAJaW50CSgqYWxsb2NfZGV2KShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqKTsKLQkJLyogQ2FsbGVkIGJ5IHVzYl9yZWxlYXNlX2RldiB0byBmcmVlIEhDIGRldmljZSBzdHJ1Y3R1cmVzICovCisJCS8qIENhbGxlZCBieSB1c2JfZGlzY29ubmVjdCB0byBmcmVlIEhDIGRldmljZSBzdHJ1Y3R1cmVzICovCiAJdm9pZAkoKmZyZWVfZGV2KShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqKTsKIAogCS8qIEJhbmR3aWR0aCBjb21wdXRhdGlvbiBmdW5jdGlvbnMgKi8KQEAgLTI4Niw2ICsyODYsNyBAQAogCQkgKi8KIAlpbnQJKCp1cGRhdGVfaHViX2RldmljZSkoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCiAJCQlzdHJ1Y3QgdXNiX3R0ICp0dCwgZ2ZwX3QgbWVtX2ZsYWdzKTsKKwlpbnQJKCpyZXNldF9kZXZpY2UpKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCB1c2JfZGV2aWNlICopOwogfTsKIAogZXh0ZXJuIGludCB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYik7CkBAIC00NjMsMTYgKzQ2NCwyMCBAQAogI2RlZmluZSB1c2JfZW5kcG9pbnRfb3V0KGVwX2RpcikJKCEoKGVwX2RpcikgJiBVU0JfRElSX0lOKSkKIAogI2lmZGVmIENPTkZJR19QTQotZXh0ZXJuIHZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gdm9pZCB1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYpOwogZXh0ZXJuIGludCBoY2RfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNzYWdlX3QgbXNnKTsKIGV4dGVybiBpbnQgaGNkX2J1c19yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNzYWdlX3QgbXNnKTsKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAorZXh0ZXJuIHZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJcmV0dXJuOwogfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLworI2VuZGlmIC8qIENPTkZJR19VU0JfU1VTUEVORCAqLworCiAKIC8qCiAgKiBVU0IgZGV2aWNlIGZzIHN0dWZmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAzNWNjOGI5Li4wOTQwY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC03MSw3ICs3Miw2IEBACiAKIAl1bnNpZ25lZAkJbUFfcGVyX3BvcnQ7CS8qIGN1cnJlbnQgZm9yIGVhY2ggY2hpbGQgKi8KIAotCXVuc2lnbmVkCQlpbml0X2RvbmU6MTsKIAl1bnNpZ25lZAkJbGltaXRlZF9wb3dlcjoxOwogCXVuc2lnbmVkCQlxdWllc2Npbmc6MTsKIAl1bnNpZ25lZAkJZGlzY29ubmVjdGVkOjE7CkBAIC04MjAsNyArODIwLDYgQEAKIAl9CiAgaW5pdDM6CiAJaHViLT5xdWllc2NpbmcgPSAwOwotCWh1Yi0+aW5pdF9kb25lID0gMTsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfTk9JTyk7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC04NjEsMTEgKzg2MCw2IEBACiAJaW50IGk7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmh1Yi0+aW5pdF93b3JrKTsKLQlpZiAoIWh1Yi0+aW5pdF9kb25lKSB7Ci0JCWh1Yi0+aW5pdF9kb25lID0gMTsKLQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQoCi0JCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKLQl9CiAKIAkvKiBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSB3b24ndCByZS10cmlnZ2VyICovCiAJaHViLT5xdWllc2NpbmcgPSAxOwpAQCAtMTIyNCw2ICsxMjE4LDkgQEAKIAlkZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJaGRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKKwkvKiBIdWJzIGhhdmUgcHJvcGVyIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgKi8KKwl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKGhkZXYpOworCiAJaWYgKGhkZXYtPmxldmVsID09IE1BWF9UT1BPX0xFVkVMKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwKIAkJCSJVbnN1cHBvcnRlZCBidXMgdG9wb2xvZ3k6IGh1YiBuZXN0ZWQgdG9vIGRlZXBcbiIpOwpAQCAtMTQwMiwxMCArMTM5OSw4IEBACiAJCWlmICh1ZGV2LT5jaGlsZHJlbltpXSkKIAkJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldi0+Y2hpbGRyZW5baV0pOwogCX0KLQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgewotCQl1ZGV2LT5kaXNjb25fc3VzcGVuZGVkID0gMTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKIAkJdWRldi0+YWN0aXZlX2R1cmF0aW9uIC09IGppZmZpZXM7Ci0JfQogCXVkZXYtPnN0YXRlID0gVVNCX1NUQVRFX05PVEFUVEFDSEVEOwogfQogCkBAIC0xNDQ4LDExICsxNDQzLDExIEBACiAJCQkJCXx8IG5ld19zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQogCQkJCTsJLyogTm8gY2hhbmdlIHRvIHdha2V1cCBzZXR0aW5ncyAqLwogCQkJZWxzZSBpZiAobmV3X3N0YXRlID09IFVTQl9TVEFURV9DT05GSUdVUkVEKQotCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LAorCQkJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnVkZXYtPmRldiwKIAkJCQkJKHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5ibUF0dHJpYnV0ZXMKIAkJCQkJICYgVVNCX0NPTkZJR19BVFRfV0FLRVVQKSk7CiAJCQllbHNlCi0JCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZ1ZGV2LT5kZXYsIDApOworCQkJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnVkZXYtPmRldiwgMCk7CiAJCX0KIAkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQgJiYKIAkJCW5ld19zdGF0ZSAhPSBVU0JfU1RBVEVfU1VTUEVOREVEKQpAQCAtMTUyOSwzMSArMTUyNCwxNSBAQAogCQl1ZGV2LT5kZXZudW0gPSBkZXZudW07CiB9CiAKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQotc3RhdGljIHZvaWQgdXNiX3N0b3BfcG0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCitzdGF0aWMgdm9pZCBodWJfZnJlZV9kZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JLyogU3luY2hyb25pemUgd2l0aCB0aGUga3N1c3BlbmQgdGhyZWFkIHRvIHByZXZlbnQgYW55IG1vcmUKLQkgKiBhdXRvc3VzcGVuZCByZXF1ZXN0cyBmcm9tIGJlaW5nIHN1Ym1pdHRlZCwgYW5kIGRlY3JlbWVudAotCSAqIHRoZSBwYXJlbnQncyBjb3VudCBvZiB1bnN1c3BlbmRlZCBjaGlsZHJlbi4KLQkgKi8KLQl1c2JfcG1fbG9jayh1ZGV2KTsKLQlpZiAodWRldi0+cGFyZW50ICYmICF1ZGV2LT5kaXNjb25fc3VzcGVuZGVkKQotCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYtPnBhcmVudCk7Ci0JdXNiX3BtX3VubG9jayh1ZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gYnVzX3RvX2hjZCh1ZGV2LT5idXMpOwogCi0JLyogU3RvcCBhbnkgYXV0b3N1c3BlbmQgb3IgYXV0b3Jlc3VtZSByZXF1ZXN0cyBhbHJlYWR5IHN1Ym1pdHRlZCAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdWRldi0+YXV0b3N1c3BlbmQpOwotCWNhbmNlbF93b3JrX3N5bmMoJnVkZXYtPmF1dG9yZXN1bWUpOworCS8qIFJvb3QgaHVicyBhcmVuJ3QgcmVhbCBkZXZpY2VzLCBzbyBkb24ndCBmcmVlIEhDRCByZXNvdXJjZXMgKi8KKwlpZiAoaGNkLT5kcml2ZXItPmZyZWVfZGV2ICYmIHVkZXYtPnBhcmVudCkKKwkJaGNkLT5kcml2ZXItPmZyZWVfZGV2KGhjZCwgdWRldik7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc3RvcF9wbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsgfQotCi0jZW5kaWYKLQogLyoqCiAgKiB1c2JfZGlzY29ubmVjdCAtIGRpc2Nvbm5lY3QgYSBkZXZpY2UgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAcGRldjogcG9pbnRlciB0byBkZXZpY2UgYmVpbmcgZGlzY29ubmVjdGVkCkBAIC0xNjIyLDcgKzE2MDEsNyBAQAogCSpwZGV2ID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKIAotCXVzYl9zdG9wX3BtKHVkZXYpOworCWh1Yl9mcmVlX2Rldih1ZGV2KTsKIAogCXB1dF9kZXZpY2UoJnVkZXYtPmRldik7CiB9CkBAIC0xNzk5LDkgKzE3NzgsMTggQEAKIHsKIAlpbnQgZXJyOwogCi0JLyogSW5jcmVtZW50IHRoZSBwYXJlbnQncyBjb3VudCBvZiB1bnN1c3BlbmRlZCBjaGlsZHJlbiAqLwotCWlmICh1ZGV2LT5wYXJlbnQpCi0JCXVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2LT5wYXJlbnQpOworCWlmICh1ZGV2LT5wYXJlbnQpIHsKKwkJLyogSW5pdGlhbGl6ZSBub24tcm9vdC1odWIgZGV2aWNlIHdha2V1cCB0byBkaXNhYmxlZDsKKwkJICogZGV2aWNlICh1biljb25maWd1cmF0aW9uIGNvbnRyb2xzIHdha2V1cCBjYXBhYmxlCisJCSAqIHN5c2ZzIHBvd2VyL3dha2V1cCBjb250cm9scyB3YWtldXAgZW5hYmxlZC9kaXNhYmxlZAorCQkgKi8KKwkJZGV2aWNlX2luaXRfd2FrZXVwKCZ1ZGV2LT5kZXYsIDApOworCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJnVkZXYtPmRldiwgMSk7CisJfQorCisJLyogVGVsbCB0aGUgcnVudGltZS1QTSBmcmFtZXdvcmsgdGhlIGRldmljZSBpcyBhY3RpdmUgKi8KKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnVkZXYtPmRldik7CisJcG1fcnVudGltZV9lbmFibGUoJnVkZXYtPmRldik7CiAKIAl1c2JfZGV0ZWN0X3F1aXJrcyh1ZGV2KTsKIAllcnIgPSB1c2JfZW51bWVyYXRlX2RldmljZSh1ZGV2KTsJLyogUmVhZCBkZXNjcmlwdG9ycyAqLwpAQCAtMTgxNyw2ICsxODA1LDcgQEAKIAkvKiBUZWxsIHRoZSB3b3JsZCEgKi8KIAlhbm5vdW5jZV9kZXZpY2UodWRldik7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnVkZXYtPmRldik7CiAJLyogUmVnaXN0ZXIgdGhlIGRldmljZS4gIFRoZSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCiAJICogZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgYW5kIGludm9raW5nIHRoZSBhZGQtZGV2aWNlCiAJICogbm90aWZpZXIgY2hhaW4gKHVzZWQgYnkgdXNiZnMgYW5kIHBvc3NpYmx5IG90aGVycykuCkBAIC0xODMyLDcgKzE4MjEsOCBAQAogCiBmYWlsOgogCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7Ci0JdXNiX3N0b3BfcG0odWRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZ1ZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgmdWRldi0+ZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTgxLDcgKzE5NzEsNyBAQAogCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9SRVNFVCkgJiYKIAkJICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKSB7CiAJCQlpZiAoaHViX2lzX3d1c2IoaHViKSkKLQkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9WQVJJQUJMRTsKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9XSVJFTEVTUzsKIAkJCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpCiAJCQkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfSElHSDsKIAkJCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCkKQEAgLTIwMDcsNyArMTk5Nyw5IEBACiAJCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBkZWxheSkKIHsKIAlpbnQgaSwgc3RhdHVzOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAKKwloY2QgPSBidXNfdG9faGNkKHVkZXYtPmJ1cyk7CiAJLyogQmxvY2sgRUhDSSBDRiBpbml0aWFsaXphdGlvbiBkdXJpbmcgdGhlIHBvcnQgcmVzZXQuCiAJICogU29tZSBjb21wYW5pb24gY29udHJvbGxlcnMgZG9uJ3QgbGlrZSBpdCB3aGVuIHRoZXkgbWl4LgogCSAqLwpAQCAtMjAzNSw2ICsyMDI3LDE0IEBACiAJCQkvKiBUUlNUUkNZID0gMTAgbXM7IHBsdXMgc29tZSBleHRyYSAqLwogCQkJbXNsZWVwKDEwICsgNDApOwogCQkJdXBkYXRlX2FkZHJlc3ModWRldiwgMCk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnJlc2V0X2RldmljZSkgeworCQkJCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT5yZXNldF9kZXZpY2UoaGNkLCB1ZGV2KTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJDYW5ub3QgcmVzZXQgIgorCQkJCQkJCSJIQ0QgZGV2aWNlIHN0YXRlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQkJLyogRkFMTCBUSFJPVUdIICovCiAJCWNhc2UgLUVOT1RDT05OOgogCQljYXNlIC1FTk9ERVY6CkBAIC0yMzgwLDE0ICsyMzgwLDE3IEBACiB9CiAKIC8qIGNhbGxlciBoYXMgbG9ja2VkIHVkZXYgKi8KLXN0YXRpYyBpbnQgcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK2ludCB1c2JfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQJc3RhdHVzID0gMDsKIAogCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CiAJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiAlc3Jlc3VtZVxuIiwgIndha2V1cC0iKTsKLQkJdXNiX21hcmtfbGFzdF9idXN5KHVkZXYpOwotCQlzdGF0dXMgPSB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2LCBQTVNHX1JFTU9URV9SRVNVTUUpOworCQlzdGF0dXMgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldik7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJLyogTGV0IHRoZSBkcml2ZXJzIGRvIHRoZWlyIHRoaW5nLCB0aGVuLi4uICovCisJCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOworCQl9CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yNDI0LDExICsyNDI3LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCXJldHVybiAwOwotfQotCiAjZW5kaWYKIAogc3RhdGljIGludCBodWJfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1zZykKQEAgLTI0OTUsMTEgKzI0OTMsNiBAQAogCiAjZWxzZQkvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2RlZmluZSBodWJfc3VzcGVuZAkJTlVMTAogI2RlZmluZSBodWJfcmVzdW1lCQlOVUxMCiAjZGVmaW5lIGh1Yl9yZXNldF9yZXN1bWUJTlVMTApAQCAtMjY0NCwxNCArMjYzNyw3IEBACiAKIAltdXRleF9sb2NrKCZ1c2JfYWRkcmVzczBfbXV0ZXgpOwogCi0JaWYgKChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMykgJiYgdWRldi0+Y29uZmlnKSB7Ci0JCS8qIEZJWE1FIHRoaXMgd2lsbCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgYnkgdGhlIHhIQ0kgZHJpdmVyLiAqLwotCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsCi0JCQkJInhIQ0kgcmVzZXQgb2YgY29uZmlndXJlZCBkZXZpY2UgIgotCQkJCSJub3Qgc3VwcG9ydGVkIHlldC5cbiIpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWw7Ci0JfSBlbHNlIGlmICghdWRldi0+Y29uZmlnICYmIG9sZHNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikgeworCWlmICghdWRldi0+Y29uZmlnICYmIG9sZHNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikgewogCQkvKiBEb24ndCByZXNldCBVU0IgMy4wIGRldmljZXMgZHVyaW5nIGFuIGluaXRpYWwgc2V0dXAgKi8KIAkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCX0gZWxzZSB7CkBAIC0yNjc3LDcgKzI2NjMsNyBAQAogCSAqLwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKIAljYXNlIFVTQl9TUEVFRF9TVVBFUjoKLQljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToJLyogZml4ZWQgYXQgNTEyICovCisJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CS8qIGZpeGVkIGF0IDUxMiAqLwogCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDUxMik7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBmaXhlZCBhdCA2NCAqLwpAQCAtMjcwNSw3ICsyNjkxLDcgQEAKIAljYXNlIFVTQl9TUEVFRF9TVVBFUjoKIAkJCQlzcGVlZCA9ICJzdXBlciI7CiAJCQkJYnJlYWs7Ci0JY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CiAJCQkJc3BlZWQgPSAidmFyaWFibGUiOwogCQkJCXR5cGUgPSAiV2lyZWxlc3MgIjsKIAkJCQlicmVhazsKQEAgLTMwMDUsNyArMjk5MSw3IEBACiAJCQkvKiBGb3IgYSBzdXNwZW5kZWQgZGV2aWNlLCB0cmVhdCB0aGlzIGFzIGEKIAkJCSAqIHJlbW90ZSB3YWtldXAgZXZlbnQuCiAJCQkgKi8KLQkJCXN0YXR1cyA9IHJlbW90ZV93YWtldXAodWRldik7CisJCQlzdGF0dXMgPSB1c2JfcmVtb3RlX3dha2V1cCh1ZGV2KTsKICNlbmRpZgogCiAJCX0gZWxzZSB7CkBAIC0zMTkxLDYgKzMxNzcsNyBAQAogbG9vcDoKIAkJdXNiX2VwMF9yZWluaXQodWRldik7CiAJCXJlbGVhc2VfYWRkcmVzcyh1ZGV2KTsKKwkJaHViX2ZyZWVfZGV2KHVkZXYpOwogCQl1c2JfcHV0X2Rldih1ZGV2KTsKIAkJaWYgKChzdGF0dXMgPT0gLUVOT1RDT05OKSB8fCAoc3RhdHVzID09IC1FTk9UU1VQUCkpCiAJCQlicmVhazsKQEAgLTMyNTgsNyArMzI0NSw3IEBACiAJCSAqIGRpc2Nvbm5lY3RlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBzdWNjZWVkLiAqLwogCQl1c2JfbG9ja19kZXZpY2UoaGRldik7CiAJCWlmICh1bmxpa2VseShodWItPmRpc2Nvbm5lY3RlZCkpCi0JCQlnb3RvIGxvb3AyOworCQkJZ290byBsb29wX2Rpc2Nvbm5lY3RlZDsKIAogCQkvKiBJZiB0aGUgaHViIGhhcyBkaWVkLCBjbGVhbiB1cCBhZnRlciBpdCAqLwogCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CkBAIC0zMzUxLDcgKzMzMzgsNyBAQAogCQkJCQltc2xlZXAoMTApOwogCiAJCQkJCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKLQkJCQkJcmV0ID0gcmVtb3RlX3dha2V1cChoZGV2LT4KKwkJCQkJcmV0ID0gdXNiX3JlbW90ZV93YWtldXAoaGRldi0+CiAJCQkJCQkJY2hpbGRyZW5baS0xXSk7CiAJCQkJCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCQkJCQlpZiAocmV0IDwgMCkKQEAgLTM0MTgsNyArMzQwNSw3IEBACiAJCSAqIGtpY2tfa2h1YmQoKSBhbmQgYWxsb3cgYXV0b3N1c3BlbmQuCiAJCSAqLwogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7Ci0gbG9vcDI6CisgbG9vcF9kaXNjb25uZWN0ZWQ6CiAJCXVzYl91bmxvY2tfZGV2aWNlKGhkZXYpOwogCQlrcmVmX3B1dCgmaHViLT5rcmVmLCBodWJfcmVsZWFzZSk7CiAKQEAgLTM0NDUsNyArMzQzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBodWJfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaHViX2lkX3RhYmxlW10gPSB7CiAgICAgeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUywKICAgICAgIC5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfSFVCfSwKICAgICB7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCA5YmM5NWZlLi5jZDIyMDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAogCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgYWx0ZXJuYXRlKTsKIAlpZiAoIWFsdCkgewotCQlkZXZfd2FybigmZGV2LT5kZXYsICJzZWxlY3RpbmcgaW52YWxpZCBhbHRzZXR0aW5nICVkIiwKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZFxuIiwKIAkJCSBhbHRlcm5hdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNDcxLDcgKzE0NzEsNyBAQAogCS8qIElmIG5vdCwgcmVpbnN0YXRlIHRoZSBvbGQgYWx0ZXJuYXRlIHNldHRpbmdzICovCiAJaWYgKHJldHZhbCA8IDApIHsKIHJlc2V0X29sZF9hbHRzOgotCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7CiAJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IGNvbmZpZy0+aW50ZXJmYWNlW2ldOwogCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwogCkBAIC0xODQzLDcgKzE4NDMsNiBAQAogCQlpbnRmLT5kZXYuZG1hX21hc2sgPSBkZXYtPmRldi5kbWFfbWFzazsKIAkJSU5JVF9XT1JLKCZpbnRmLT5yZXNldF93cywgX191c2JfcXVldWVfcmVzZXRfZGV2aWNlKTsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmludGYtPmRldik7Ci0JCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAJCWRldl9zZXRfbmFtZSgmaW50Zi0+ZGV2LCAiJWQtJXM6JWQuJWQiLAogCQkJZGV2LT5idXMtPmJ1c251bSwgZGV2LT5kZXZwYXRoLAogCQkJY29uZmlndXJhdGlvbiwgYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwpAQCAtMTg2Nyw2ICsxODY2LDcgQEAKIAkJCSJhZGRpbmcgJXMgKGNvbmZpZyAjJWQsIGludGVyZmFjZSAlZClcbiIsCiAJCQlkZXZfbmFtZSgmaW50Zi0+ZGV2KSwgY29uZmlndXJhdGlvbiwKIAkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmludGYtPmRldik7CiAJCXJldCA9IGRldmljZV9hZGQoJmludGYtPmRldik7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2VfYWRkKCVzKSAtLT4gJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCBhYjkzOTE4ZC4uZjA3M2M1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC0xMDMsMTAgKzEwMywxOSBAQAogCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJVU0IgcXVpcmtzIGZvciB0aGlzIGRldmljZTogJXhcbiIsCiAJCQkJdWRldi0+cXVpcmtzKTsKIAotCS8qIEJ5IGRlZmF1bHQsIGRpc2FibGUgYXV0b3N1c3BlbmQgZm9yIGFsbCBub24taHVicyAqLwogI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyAhPSBVU0JfQ0xBU1NfSFVCKQotCQl1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IDE7CisKKwkvKiBCeSBkZWZhdWx0LCBkaXNhYmxlIGF1dG9zdXNwZW5kIGZvciBhbGwgZGV2aWNlcy4gIFRoZSBodWIgZHJpdmVyCisJICogd2lsbCBlbmFibGUgaXQgZm9yIGh1YnMuCisJICovCisJdXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQodWRldik7CisKKwkvKiBBdXRvc3VzcGVuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBpZiB0aGUgaW5pdGlhbCBhdXRvc3VzcGVuZF9kZWxheQorCSAqIGlzIG5lZ2F0aXZlLgorCSAqLworCWlmICh1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA8IDApCisJCXVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKKwogI2VuZGlmCiAKIAkvKiBGb3IgdGhlIHByZXNlbnQsIGFsbCBkZXZpY2VzIGRlZmF1bHQgdG8gVVNCLVBFUlNJU1QgZW5hYmxlZCAqLwpAQCAtMTIwLDYgKzEyOSw3IEBACiAJICogZm9yIGFsbCBkZXZpY2VzLiAgSXQgd2lsbCBhZmZlY3QgdGhpbmdzIGxpa2UgaHViIHJlc2V0cwogCSAqIGFuZCBFTUYtcmVsYXRlZCBwb3J0IGRpc2FibGVzLgogCSAqLwotCXVkZXYtPnBlcnNpc3RfZW5hYmxlZCA9IDE7CisJaWYgKCEodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX1JFU0VUX01PUlBIUykpCisJCXVkZXYtPnBlcnNpc3RfZW5hYmxlZCA9IDE7CiAjZW5kaWYJLyogQ09ORklHX1BNICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNWYzOTA4Zi4uNDNjMDAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJY2FzZSBVU0JfU1BFRURfSElHSDoKIAkJc3BlZWQgPSAiNDgwIjsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CiAJCXNwZWVkID0gIjQ4MCI7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgpAQCAtMTkxLDYgKzE5MSwzNiBAQAogc3RhdGljIERFVklDRV9BVFRSKHF1aXJrcywgU19JUlVHTywgc2hvd19xdWlya3MsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAorc2hvd19hdm9pZF9yZXNldF9xdWlyayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhISh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfTU9SUEhTKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzZXRfYXZvaWRfcmVzZXRfcXVpcmsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJaW50CQkJY29uZmlnOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZjb25maWcpICE9IDEgfHwgY29uZmlnIDwgMCB8fCBjb25maWcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl1c2JfbG9ja19kZXZpY2UodWRldik7CisJaWYgKGNvbmZpZykKKwkJdWRldi0+cXVpcmtzIHw9IFVTQl9RVUlSS19SRVNFVF9NT1JQSFM7CisJZWxzZQorCQl1ZGV2LT5xdWlya3MgJj0gflVTQl9RVUlSS19SRVNFVF9NT1JQSFM7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYXZvaWRfcmVzZXRfcXVpcmssIFNfSVJVR08gfCBTX0lXVVNSLAorCQlzaG93X2F2b2lkX3Jlc2V0X3F1aXJrLCBzZXRfYXZvaWRfcmVzZXRfcXVpcmspOworCitzdGF0aWMgc3NpemVfdAogc2hvd191cmJudW0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwpAQCAtMjI2LDkgKzI1NiwxMCBAQAogCiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdXNiX3BtX2xvY2sodWRldik7CisKKwl1c2JfbG9ja19kZXZpY2UodWRldik7CiAJdWRldi0+cGVyc2lzdF9lbmFibGVkID0gISF2YWx1ZTsKLQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzE1LDIwICszNDYsMzQgQEAKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0JaW50IHZhbHVlOworCWludCB2YWx1ZSwgb2xkX2RlbGF5OworCWludCByYzsKIAogCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdmFsdWUpICE9IDEgfHwgdmFsdWUgPj0gSU5UX01BWC9IWiB8fAogCQkJdmFsdWUgPD0gLSBJTlRfTUFYL0haKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl2YWx1ZSAqPSBIWjsKIAorCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwlvbGRfZGVsYXkgPSB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheTsKIAl1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IHZhbHVlOwotCWlmICh2YWx1ZSA+PSAwKQotCQl1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKLQllbHNlIHsKLQkJaWYgKHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KSA9PSAwKQorCisJaWYgKG9sZF9kZWxheSA8IDApIHsJLyogQXV0b3N1c3BlbmQgd2Fzbid0IGFsbG93ZWQgKi8KKwkJaWYgKHZhbHVlID49IDApCiAJCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOworCX0gZWxzZSB7CQkvKiBBdXRvc3VzcGVuZCB3YXMgYWxsb3dlZCAqLworCQlpZiAodmFsdWUgPCAwKSB7CisJCQlyYyA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQljb3VudCA9IHJjOworCQkJCXVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gb2xkX2RlbGF5OworCQkJfQorCQl9IGVsc2UgeworCQkJdXNiX3RyeV9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CisJCX0KIAl9CisKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM1NiwzNCArNDAxLDI1IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CiAJaW50IGxlbiA9IGNvdW50OwogCWNoYXIgKmNwOwotCWludCByYyA9IDA7Ci0JaW50IG9sZF9hdXRvc3VzcGVuZF9kaXNhYmxlZDsKKwlpbnQgcmM7CiAKIAljcCA9IG1lbWNocihidWYsICdcbicsIGNvdW50KTsKIAlpZiAoY3ApCiAJCWxlbiA9IGNwIC0gYnVmOwogCiAJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCW9sZF9hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IHVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkOwogCi0JLyogU2V0dGluZyB0aGUgZmxhZ3Mgd2l0aG91dCBjYWxsaW5nIHVzYl9wbV9sb2NrIGlzIGEgc3ViamVjdCB0bwotCSAqIHJhY2VzLCBidXQgd2hvIGNhcmVzLi4uCi0JICovCiAJaWYgKGxlbiA9PSBzaXplb2Ygb25fc3RyaW5nIC0gMSAmJgotCQkJc3RybmNtcChidWYsIG9uX3N0cmluZywgbGVuKSA9PSAwKSB7Ci0JCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMTsKLQkJcmMgPSB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2LCBQTVNHX1VTRVJfUkVTVU1FKTsKKwkJCXN0cm5jbXAoYnVmLCBvbl9zdHJpbmcsIGxlbikgPT0gMCkKKwkJcmMgPSB1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZCh1ZGV2KTsKIAotCX0gZWxzZSBpZiAobGVuID09IHNpemVvZiBhdXRvX3N0cmluZyAtIDEgJiYKLQkJCXN0cm5jbXAoYnVmLCBhdXRvX3N0cmluZywgbGVuKSA9PSAwKSB7Ci0JCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMDsKLQkJcmMgPSB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2LCBQTVNHX1VTRVJfUkVTVU1FKTsKKwllbHNlIGlmIChsZW4gPT0gc2l6ZW9mIGF1dG9fc3RyaW5nIC0gMSAmJgorCQkJc3RybmNtcChidWYsIGF1dG9fc3RyaW5nLCBsZW4pID09IDApCisJCXJjID0gdXNiX2VuYWJsZV9hdXRvc3VzcGVuZCh1ZGV2KTsKIAotCX0gZWxzZQorCWVsc2UKIAkJcmMgPSAtRUlOVkFMOwogCi0JaWYgKHJjKQotCQl1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IG9sZF9hdXRvc3VzcGVuZF9kaXNhYmxlZDsKIAl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKIAlyZXR1cm4gKHJjIDwgMCA/IHJjIDogY291bnQpOwogfQpAQCAtNTU4LDYgKzU5NCw3IEBACiAJJmRldl9hdHRyX3ZlcnNpb24uYXR0ciwKIAkmZGV2X2F0dHJfbWF4Y2hpbGQuYXR0ciwKIAkmZGV2X2F0dHJfcXVpcmtzLmF0dHIsCisJJmRldl9hdHRyX2F2b2lkX3Jlc2V0X3F1aXJrLmF0dHIsCiAJJmRldl9hdHRyX2F1dGhvcml6ZWQuYXR0ciwKIAkmZGV2X2F0dHJfcmVtb3ZlLmF0dHIsCiAJTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IGU3Y2FlMTMuLjI3MDgwNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMzg3LDYgKzM4NywxMyBAQAogCXsKIAl1bnNpZ25lZCBpbnQJb3JpZ19mbGFncyA9IHVyYi0+dHJhbnNmZXJfZmxhZ3M7CiAJdW5zaWduZWQgaW50CWFsbG93ZWQ7CisJc3RhdGljIGludCBwaXBldHlwZXNbNF0gPSB7CisJCVBJUEVfQ09OVFJPTCwgUElQRV9JU09DSFJPTk9VUywgUElQRV9CVUxLLCBQSVBFX0lOVEVSUlVQVAorCX07CisKKwkvKiBDaGVjayB0aGF0IHRoZSBwaXBlJ3MgdHlwZSBtYXRjaGVzIHRoZSBlbmRwb2ludCdzIHR5cGUgKi8KKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gcGlwZXR5cGVzW3hmZXJ0eXBlXSkKKwkJcmV0dXJuIC1FUElQRTsJCS8qIFRoZSBtb3N0IHN1aXRhYmxlIGVycm9yIGNvZGUgOi0pICovCiAKIAkvKiBlbmZvcmNlIHNpbXBsZS9zdGFuZGFyZCBwb2xpY3kgKi8KIAlhbGxvd2VkID0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVAgfApAQCAtNDMwLDcgKzQzNyw3IEBACiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CiAJCS8qIHRvbyBzbWFsbD8gKi8KIAkJc3dpdGNoIChkZXYtPnNwZWVkKSB7Ci0JCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCQljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJCWlmICh1cmItPmludGVydmFsIDwgNikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwpAQCAtNDQ2LDcgKzQ1Myw3IEBACiAJCQlpZiAodXJiLT5pbnRlcnZhbCA+ICgxIDw8IDE1KSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCW1heCA9IDEgPDwgMTU7Ci0JCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCQljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJCWlmICh1cmItPmludGVydmFsID4gMTYpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlicmVhazsKQEAgLTQ3Myw3ICs0ODAsNyBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX1ZBUklBQkxFKSB7CisJCWlmIChkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9XSVJFTEVTUykgewogCQkJLyogUm91bmQgZG93biB0byBhIHBvd2VyIG9mIDIsIG5vIG1vcmUgdGhhbiBtYXggKi8KIAkJCXVyYi0+aW50ZXJ2YWwgPSBtaW4obWF4LCAxIDw8IGlsb2cyKHVyYi0+aW50ZXJ2YWwpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKaW5kZXggMGRhZmYwZC4uMTI5N2U5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCkBAIC00OSw5ICs0OSw2IEBACiAKIHN0YXRpYyBpbnQgbm91c2I7CS8qIERpc2FibGUgVVNCIHdoZW4gYnVpbHQgaW50byBrZXJuZWwgaW1hZ2UgKi8KIAotLyogV29ya3F1ZXVlIGZvciBhdXRvc3VzcGVuZCBhbmQgZm9yIHJlbW90ZSB3YWtldXAgb2Ygcm9vdCBodWJzICovCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3N1c3BlbmRfdXNiX3dxOwotCiAjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECiBzdGF0aWMgaW50IHVzYl9hdXRvc3VzcGVuZF9kZWxheSA9IDI7CQkvKiBEZWZhdWx0IGRlbGF5IHZhbHVlLAogCQkJCQkJICogaW4gc2Vjb25kcyAqLwpAQCAtMjI4LDkgKzIyNSw2IEBACiAJaGNkID0gYnVzX3RvX2hjZCh1ZGV2LT5idXMpOwogCiAJdXNiX2Rlc3Ryb3lfY29uZmlndXJhdGlvbih1ZGV2KTsKLQkvKiBSb290IGh1YnMgYXJlbid0IHJlYWwgZGV2aWNlcywgc28gZG9uJ3QgZnJlZSBIQ0QgcmVzb3VyY2VzICovCi0JaWYgKGhjZC0+ZHJpdmVyLT5mcmVlX2RldiAmJiB1ZGV2LT5wYXJlbnQpCi0JCWhjZC0+ZHJpdmVyLT5mcmVlX2RldihoY2QsIHVkZXYpOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAJa2ZyZWUodWRldi0+cHJvZHVjdCk7CiAJa2ZyZWUodWRldi0+bWFudWZhY3R1cmVyKTsKQEAgLTI2NCwyMyArMjU4LDYgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IGtzdXNwZW5kX3VzYl9pbml0KHZvaWQpCi17Ci0JLyogVGhpcyB3b3JrcXVldWUgaXMgc3VwcG9zZWQgdG8gYmUgYm90aCBmcmVlemFibGUgYW5kCi0JICogc2luZ2xldGhyZWFkZWQuICBJdHMgam9iIGRvZXNuJ3QganVzdGlmeSBydW5uaW5nIG9uIG1vcmUKLQkgKiB0aGFuIG9uZSBDUFUuCi0JICovCi0Ja3N1c3BlbmRfdXNiX3dxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJrc3VzcGVuZF91c2JkIik7Ci0JaWYgKCFrc3VzcGVuZF91c2Jfd3EpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBrc3VzcGVuZF91c2JfY2xlYW51cCh2b2lkKQotewotCWRlc3Ryb3lfd29ya3F1ZXVlKGtzdXNwZW5kX3VzYl93cSk7Ci19Ci0KIC8qIFVTQiBkZXZpY2UgUG93ZXItTWFuYWdlbWVudCB0aHVua3MuCiAgKiBUaGVyZSdzIG5vIG5lZWQgdG8gZGlzdGluZ3Vpc2ggaGVyZSBiZXR3ZWVuIHF1aWVzY2luZyBhIFVTQiBkZXZpY2UKICAqIGFuZCBwb3dlcmluZyBpdCBkb3duOyB0aGUgZ2VuZXJpY19zdXNwZW5kKCkgcm91dGluZSB0YWtlcyBjYXJlIG9mCkBAIC0yOTYsNyArMjczLDcgQEAKIHN0YXRpYyB2b2lkIHVzYl9kZXZfY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgZm9yIHJlYmluZGluZyBpbnRlcmZhY2VzICovCi0JdXNiX3Jlc3VtZShkZXYsIFBNU0dfUkVTVU1FKTsJLyogTWVzc2FnZSBldmVudCBpcyBtZWFuaW5nbGVzcyAqLworCXVzYl9yZXN1bWUoZGV2LCBQTVNHX09OKTsJLyogRklYTUU6IGNoYW5nZSB0byBQTVNHX0NPTVBMRVRFICovCiB9CiAKIHN0YXRpYyBpbnQgdXNiX2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTM0Miw5ICszMTksNyBAQAogCiAjZWxzZQogCi0jZGVmaW5lIGtzdXNwZW5kX3VzYl9pbml0KCkJMAotI2RlZmluZSBrc3VzcGVuZF91c2JfY2xlYW51cCgpCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSB1c2JfZGV2aWNlX3BtX29wcwkoKihzdHJ1Y3QgZGV2X3BtX29wcyAqKTApCisjZGVmaW5lIHVzYl9kZXZpY2VfcG1fb3BzCSgqKHN0cnVjdCBkZXZfcG1fb3BzICopIE5VTEwpCiAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIApAQCAtNDcyLDkgKzQ0Nyw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZmlsZWxpc3QpOwogCiAjaWZkZWYJQ09ORklHX1BNCi0JbXV0ZXhfaW5pdCgmZGV2LT5wbV9tdXRleCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+YXV0b3N1c3BlbmQsIHVzYl9hdXRvc3VzcGVuZF93b3JrKTsKLQlJTklUX1dPUksoJmRldi0+YXV0b3Jlc3VtZSwgdXNiX2F1dG9yZXN1bWVfd29yayk7CiAJZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IHVzYl9hdXRvc3VzcGVuZF9kZWxheSAqIEhaOwogCWRldi0+Y29ubmVjdF90aW1lID0gamlmZmllczsKIAlkZXYtPmFjdGl2ZV9kdXJhdGlvbiA9IC1qaWZmaWVzOwpAQCAtMTExNyw5ICsxMDg5LDYgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAotCXJldHZhbCA9IGtzdXNwZW5kX3VzYl9pbml0KCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7CiAJcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZ1c2JfYnVzX3R5cGUpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWxlZDsKQEAgLTExNTksNyArMTEyOCw3IEBACiBidXNfbm90aWZpZXJfZmFpbGVkOgogCWJ1c191bnJlZ2lzdGVyKCZ1c2JfYnVzX3R5cGUpOwogYnVzX3JlZ2lzdGVyX2ZhaWxlZDoKLQlrc3VzcGVuZF91c2JfY2xlYW51cCgpOworCXVzYl9kZWJ1Z2ZzX2NsZWFudXAoKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTE4MSw3ICsxMTUwLDYgQEAKIAl1c2JfaHViX2NsZWFudXAoKTsKIAlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmdXNiX2J1c190eXBlLCAmdXNiX2J1c19uYik7CiAJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7Ci0Ja3N1c3BlbmRfdXNiX2NsZWFudXAoKTsKIAl1c2JfZGVidWdmc19jbGVhbnVwKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IDRjMzZjN2YuLmNkODgyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtNTUsMjQgKzU1LDggQEAKIGV4dGVybiBpbnQgdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKTsKIGV4dGVybiBpbnQgdXNiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwogCi1leHRlcm4gdm9pZCB1c2JfYXV0b3N1c3BlbmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotZXh0ZXJuIHZvaWQgdXNiX2F1dG9yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCB1c2JfcG9ydF9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwogZXh0ZXJuIGludCB1c2JfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZyk7Ci1leHRlcm4gaW50IHVzYl9leHRlcm5hbF9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQkJcG1fbWVzc2FnZV90IG1zZyk7Ci1leHRlcm4gaW50IHVzYl9leHRlcm5hbF9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAotCQlwbV9tZXNzYWdlX3QgbXNnKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHVzYl9wbV9sb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCW11dGV4X2xvY2tfbmVzdGVkKCZ1ZGV2LT5wbV9tdXRleCwgdWRldi0+bGV2ZWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX3BtX3VubG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQltdXRleF91bmxvY2soJnVkZXYtPnBtX211dGV4KTsKLX0KIAogI2Vsc2UKIApAQCAtODYsOSArNzAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX3BtX2xvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX3BtX3VubG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikge30KLQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKQEAgLTk2LDYgKzc3LDcgQEAKIGV4dGVybiB2b2lkIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX3RyeV9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIGludCB1c2JfYXV0b3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworZXh0ZXJuIGludCB1c2JfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIAogI2Vsc2UKIApAQCAtMTA2LDkgKzg4LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc3VzcGVuZF91c2Jfd3E7CiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHVzYl9idXNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX3R5cGUgdXNiX2RldmljZV90eXBlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfaWZfZGV2aWNlX3R5cGU7CkBAIC0xMzgsMjMgKzEyNCw2IEBACiAJCQlmb3JfZGV2aWNlczsKIH0KIAotLyogSW50ZXJmYWNlcyBhbmQgdGhlaXIgInBvd2VyIHN0YXRlIiBhcmUgb3duZWQgYnkgdXNiY29yZSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya19hY3RpdmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCi17Ci0JZi0+aXNfYWN0aXZlID0gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1hcmtfcXVpZXNjZWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCi17Ci0JZi0+aXNfYWN0aXZlID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfYWN0aXZlKGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlICpmKQotewotCXJldHVybiBmLT5pc19hY3RpdmU7Ci19Ci0KIAogLyogZm9yIGxhYmVsaW5nIGRpYWdub3N0aWNzICovCiBleHRlcm4gY29uc3QgY2hhciAqdXNiY29yZV9uYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwppbmRleCAyOTU4YTEyLi42ZTk4YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYworKysgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwpAQCAtNjYsOCArNjYsNiBAQAogCiAjZGVmaW5lIFVTQl9ERUJVR19ERVZOVU0gMTI3CiAKLSNkZWZpbmUgREJHUF9EQVRBX1RPR0dMRQkweDg4MDAKLQogI2lmZGVmIERCR1BfREVCVUcKICNkZWZpbmUgZGJncF9wcmludGsgcHJpbnRrCiBzdGF0aWMgdm9pZCBkYmdwX2VoY2lfc3RhdHVzKGNoYXIgKnN0cikKQEAgLTg4LDExICs4Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGJncF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfcGlkX3VwZGF0ZSh1MzIgeCwgdTMyIHRvaykKLXsKLQlyZXR1cm4gKCh4IF4gREJHUF9EQVRBX1RPR0dMRSkgJiAweGZmZmYwMCkgfCAodG9rICYgMHhmZik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfbGVuX3VwZGF0ZSh1MzIgeCwgdTMyIGxlbikKIHsKIAlyZXR1cm4gKHggJiB+MHgwZikgfCAobGVuICYgMHgwZik7CkBAIC0xMzYsNiArMTI5LDE5IEBACiAKICNkZWZpbmUgREJHUF9NQVhfUEFDS0VUCQk4CiAjZGVmaW5lIERCR1BfVElNRU9VVAkJKDI1MCAqIDEwMDApCisjZGVmaW5lIERCR1BfTE9PUFMJCTEwMDAKKworc3RhdGljIGlubGluZSB1MzIgZGJncF9waWRfd3JpdGVfdXBkYXRlKHUzMiB4LCB1MzIgdG9rKQoreworCXN0YXRpYyBpbnQgZGF0YTAgPSBVU0JfUElEX0RBVEExOworCWRhdGEwIF49IFVTQl9QSURfREFUQV9UT0dHTEU7CisJcmV0dXJuICh4ICYgMHhmZmZmMDAwMCkgfCAoZGF0YTAgPDwgOCkgfCAodG9rICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfcGlkX3JlYWRfdXBkYXRlKHUzMiB4LCB1MzIgdG9rKQoreworCXJldHVybiAoeCAmIDB4ZmZmZjAwMDApIHwgKFVTQl9QSURfREFUQTAgPDwgOCkgfCAodG9rICYgMHhmZik7Cit9CiAKIHN0YXRpYyBpbnQgZGJncF93YWl0X3VudGlsX2NvbXBsZXRlKHZvaWQpCiB7CkBAIC0xODAsNyArMTg2LDcgQEAKIHsKIAl1MzIgcGlkcywgbHBpZDsKIAlpbnQgcmV0OwotCWludCBsb29wID0gMzsKKwlpbnQgbG9vcCA9IERCR1BfTE9PUFM7CiAKIHJldHJ5OgogCXdyaXRlbChjdHJsIHwgREJHUF9HTywgJmVoY2lfZGVidWctPmNvbnRyb2wpOwpAQCAtMTk3LDYgKzIwMyw4IEBACiAJCSAqLwogCQlpZiAocmV0ID09IC1EQkdQX1RJTUVPVVQgJiYgIWRiZ3Bfbm90X3NhZmUpCiAJCQlkYmdwX25vdF9zYWZlID0gMTsKKwkJaWYgKHJldCA9PSAtREJHUF9FUlJfQkFEICYmIC0tbG9vcCA+IDApCisJCQlnb3RvIHJldHJ5OwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjQ1LDEyICsyNTMsMjAgQEAKIAkJYnl0ZXNbaV0gPSAoaGkgPj4gKDgqKGkgLSA0KSkpICYgMHhmZjsKIH0KIAotc3RhdGljIGludCBkYmdwX291dCh1MzIgYWRkciwgY29uc3QgY2hhciAqYnl0ZXMsIGludCBzaXplKQorc3RhdGljIGludCBkYmdwX2J1bGtfd3JpdGUodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwKKwkJCSBjb25zdCBjaGFyICpieXRlcywgaW50IHNpemUpCiB7CisJaW50IHJldDsKKwl1MzIgYWRkcjsKIAl1MzIgcGlkcywgY3RybDsKIAorCWlmIChzaXplID4gREJHUF9NQVhfUEFDS0VUKQorCQlyZXR1cm4gLTE7CisKKwlhZGRyID0gREJHUF9FUEFERFIoZGV2bnVtLCBlbmRwb2ludCk7CisKIAlwaWRzID0gcmVhZGwoJmVoY2lfZGVidWctPnBpZHMpOwotCXBpZHMgPSBkYmdwX3BpZF91cGRhdGUocGlkcywgVVNCX1BJRF9PVVQpOworCXBpZHMgPSBkYmdwX3BpZF93cml0ZV91cGRhdGUocGlkcywgVVNCX1BJRF9PVVQpOwogCiAJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKIAljdHJsID0gZGJncF9sZW5fdXBkYXRlKGN0cmwsIHNpemUpOwpAQCAtMjYwLDM0ICsyNzYsNyBAQAogCWRiZ3Bfc2V0X2RhdGEoYnl0ZXMsIHNpemUpOwogCXdyaXRlbChhZGRyLCAmZWhjaV9kZWJ1Zy0+YWRkcmVzcyk7CiAJd3JpdGVsKHBpZHMsICZlaGNpX2RlYnVnLT5waWRzKTsKLQlyZXR1cm4gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7Ci19Ci0KLXN0YXRpYyBpbnQgZGJncF9idWxrX3dyaXRlKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsCi0JCQkgY29uc3QgY2hhciAqYnl0ZXMsIGludCBzaXplKQotewotCWludCByZXQ7Ci0JaW50IGxvb3BzID0gNTsKLQl1MzIgYWRkcjsKLQlpZiAoc2l6ZSA+IERCR1BfTUFYX1BBQ0tFVCkKLQkJcmV0dXJuIC0xOwotCi0JYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgZW5kcG9pbnQpOwotdHJ5X2FnYWluOgotCWlmIChsb29wcy0tKSB7Ci0JCXJldCA9IGRiZ3Bfb3V0KGFkZHIsIGJ5dGVzLCBzaXplKTsKLQkJaWYgKHJldCA9PSAtREJHUF9FUlJfQkFEKSB7Ci0JCQlpbnQgdHJ5X2xvb3BzID0gMzsKLQkJCWRvIHsKLQkJCQkvKiBFbWl0IGEgZHVtbXkgcGFja2V0IHRvIHJlLXN5bmMgY29tbXVuaWNhdGlvbgotCQkJCSAqIHdpdGggdGhlIGRlYnVnIGRldmljZSAqLwotCQkJCWlmIChkYmdwX291dChhZGRyLCAiMTIzNDU2NzgiLCA4KSA+PSAwKSB7Ci0JCQkJCXVkZWxheSgyKTsKLQkJCQkJZ290byB0cnlfYWdhaW47Ci0JCQkJfQotCQkJfSB3aGlsZSAodHJ5X2xvb3BzLS0pOwotCQl9Ci0JfQorCXJldCA9IGRiZ3Bfd2FpdF91bnRpbF9kb25lKGN0cmwpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMwNCw3ICsyOTMsNyBAQAogCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKIAogCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX0lOKTsKKwlwaWRzID0gZGJncF9waWRfcmVhZF91cGRhdGUocGlkcywgVVNCX1BJRF9JTik7CiAKIAljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOwogCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZSk7CkBAIC0zNjIsNyArMzUxLDYgQEAKIAlyZXR1cm4gZGJncF9idWxrX3JlYWQoZGV2bnVtLCAwLCBkYXRhLCBzaXplKTsKIH0KIAotCiAvKiBGaW5kIGEgUENJIGNhcGFiaWxpdHkgKi8KIHN0YXRpYyB1MzIgX19pbml0IGZpbmRfY2FwKHUzMiBudW0sIHUzMiBzbG90LCB1MzIgZnVuYywgaW50IGNhcCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggZWU0MTEyMC4uNzQ2MGNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTgxMiw2ICs4MTIsMTYgQEAKIAkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCiAJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlLgogCitjb25maWcgVVNCX0dfTk9LSUEKKwl0cmlzdGF0ZSAiTm9raWEgY29tcG9zaXRlIGdhZGdldCIKKwlkZXBlbmRzIG9uIFBIT05FVAorCWhlbHAKKwkgIFRoZSBOb2tpYSBjb21wb3NpdGUgZ2FkZ2V0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGFjbSwgb2JleAorCSAgYW5kIHBob25ldCBpbiBvbmx5IG9uZSBjb21wb3NpdGUgZ2FkZ2V0IGRyaXZlci4KKworCSAgSXQncyBvbmx5IHJlYWxseSB1c2VmdWwgZm9yIE45MDAgaGFyZHdhcmUuIElmIHlvdSdyZSBidWlsZGluZworCSAgYSBrZXJuZWwgZm9yIE45MDAsIHNheSBZIG9yIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFVTQl9HX01VTFRJCiAJdHJpc3RhdGUgIk11bHRpZnVuY3Rpb24gQ29tcG9zaXRlIEdhZGdldCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEJMT0NLICYmIE5FVApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCmluZGV4IDJlMmMwNDcuLjQzYjUxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKQEAgLTQzLDYgKzQzLDcgQEAKIGdfcHJpbnRlci1vYmpzCQkJOj0gcHJpbnRlci5vCiBnX2NkYy1vYmpzCQkJOj0gY2RjMi5vCiBnX211bHRpLW9ianMJCQk6PSBtdWx0aS5vCitnX25va2lhLW9ianMJCQk6PSBub2tpYS5vCiAKIG9iai0kKENPTkZJR19VU0JfWkVSTykJCSs9IGdfemVyby5vCiBvYmotJChDT05GSUdfVVNCX0FVRElPKQkJKz0gZ19hdWRpby5vCkBAIC01NSw0ICs1Niw1IEBACiBvYmotJChDT05GSUdfVVNCX01JRElfR0FER0VUKQkrPSBnX21pZGkubwogb2JqLSQoQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFKSArPSBnX2NkYy5vCiBvYmotJChDT05GSUdfVVNCX0dfTVVMVEkpCSs9IGdfbXVsdGkubworb2JqLSQoQ09ORklHX1VTQl9HX05PS0lBKQkrPSBnX25va2lhLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCAwNDNlMDRkLi4xMmFjOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtMTY1Niw5ICsxNjU2LDcgQEAKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJZHJpdmVyX25hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBkcml2ZXJfbmFtZSkpIHsKIAkJREJHKCJzb21lb25lJ3MgdXNpbmcgVURDIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMTY5OSw3ICsxNjk3LDcgQEAKIAkJdWRjLT5lcFszXS5tYXhwYWNrZXQgPSA2NDsKIAl9CiAKLQl1ZGMtPnVkcF9iYXNlYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJdWRjLT51ZHBfYmFzZWFkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF1ZGMtPnVkcF9iYXNlYWRkcikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwwYTsKQEAgLTE3ODEsNyArMTc3OSw3IEBACiAJaWYgKGNwdV9pc19hdDkxcm05MjAwKCkpCiAJCWdwaW9fZnJlZSh1ZGMtPmJvYXJkLnB1bGx1cF9waW4pOwogZmFpbDA6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCURCRygiJXMgcHJvYmUgZmFpbGVkLCAlZFxuIiwgZHJpdmVyX25hbWUsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE4MTMsNyArMTgxMSw3IEBACiAJCWdwaW9fZnJlZSh1ZGMtPmJvYXJkLnB1bGx1cF9waW4pOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAljbGtfcHV0KHVkYy0+aWNsayk7CiAJY2xrX3B1dCh1ZGMtPmZjbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwppbmRleCA0ZTk3MGNmLi5mNzliZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiBzdGF0aWMgaW50IHZidXNfaXNfcHJlc2VudChzdHJ1Y3QgdXNiYV91ZGMgKnVkYykKIHsKIAlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKLQkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHVkYy0+dmJ1c19waW4pOworCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUodWRjLT52YnVzX3BpbikgXiB1ZGMtPnZidXNfcGluX2ludmVydGVkOwogCiAJLyogTm8gVmJ1cyBkZXRlY3Rpb246IEFzc3VtZSBhbHdheXMgcHJlc2VudCAqLwogCXJldHVybiAxOwpAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAlpZiAoIXVkYy0+ZHJpdmVyKQogCQlnb3RvIG91dDsKIAotCXZidXMgPSBncGlvX2dldF92YWx1ZSh1ZGMtPnZidXNfcGluKTsKKwl2YnVzID0gdmJ1c19pc19wcmVzZW50KHVkYyk7CiAJaWYgKHZidXMgIT0gdWRjLT52YnVzX3ByZXYpIHsKIAkJaWYgKHZidXMpIHsKIAkJCXRvZ2dsZV9iaWFzKDEpOwpAQCAtMTkxNCwxNCArMTkxNCwxNCBAQAogCXVkYy0+dmJ1c19waW4gPSAtRU5PREVWOwogCiAJcmV0ID0gLUVOT01FTTsKLQl1ZGMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVncykpOwogCWlmICghdWRjLT5yZWdzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBtYXAgSS9PIG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfbWFwX3JlZ3M7CiAJfQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNTUlPIHJlZ2lzdGVycyBhdCAweCUwOGx4IG1hcHBlZCBhdCAlcFxuIiwKIAkJICh1bnNpZ25lZCBsb25nKXJlZ3MtPnN0YXJ0LCB1ZGMtPnJlZ3MpOwotCXVkYy0+ZmlmbyA9IGlvcmVtYXAoZmlmby0+c3RhcnQsIGZpZm8tPmVuZCAtIGZpZm8tPnN0YXJ0ICsgMSk7CisJdWRjLT5maWZvID0gaW9yZW1hcChmaWZvLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShmaWZvKSk7CiAJaWYgKCF1ZGMtPmZpZm8pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBGSUZPLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9tYXBfZmlmbzsKQEAgLTIwMDAsNiArMjAwMCw3IEBACiAJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnZidXNfcGluKSkgewogCQlpZiAoIWdwaW9fcmVxdWVzdChwZGF0YS0+dmJ1c19waW4sICJhdG1lbF91c2JhX3VkYyIpKSB7CiAJCQl1ZGMtPnZidXNfcGluID0gcGRhdGEtPnZidXNfcGluOworCQkJdWRjLT52YnVzX3Bpbl9pbnZlcnRlZCA9IHBkYXRhLT52YnVzX3Bpbl9pbnZlcnRlZDsKIAogCQkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEodWRjLT52YnVzX3BpbiksCiAJCQkJCXVzYmFfdmJ1c19pcnEsIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5oCmluZGV4IGY3YmFlYTMuLjg4YTJlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5oCkBAIC0zMjMsNiArMzIzLDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCBpcnE7CiAJaW50IHZidXNfcGluOworCWludCB2YnVzX3Bpbl9pbnZlcnRlZDsKIAlzdHJ1Y3QgY2xrICpwY2xrOwogCXN0cnVjdCBjbGsgKmhjbGs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCmluZGV4IGNkMDkxNGUuLjY1YTVmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpAQCAtMjY1LDE2ICsyNjUsMjQgQEAKIAkJCQlyZXR1cm4gZXA7CiAJCX0KIAotCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoIChnYWRnZXQpICYmIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCA9PSB0eXBlKSB7Ci0JCS8qIHNpbmdsZSBidWZmZXJpbmcgaXMgZW5vdWdoOyBtYXliZSA4IGJ5dGUgZmlmbyBpcyB0b28gKi8KLQkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDNpbi1idWxrIik7CisjaWZkZWYgQ09ORklHX0JMQUNLRklOCisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXVzYmhzZmMoZ2FkZ2V0KSB8fCBnYWRnZXRfaXNfbXVzYmhkcmMoZ2FkZ2V0KSkgeworCQlpZiAoKFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgPT0gdHlwZSkgfHwKKwkJICAgIChVU0JfRU5EUE9JTlRfWEZFUl9JU09DID09IHR5cGUpKSB7CisJCQlpZiAoVVNCX0RJUl9JTiAmIGRlc2MtPmJFbmRwb2ludEFkZHJlc3MpCisJCQkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDVpbiIpOworCQkJZWxzZQorCQkJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXA2b3V0Iik7CisJCX0gZWxzZSBpZiAoVVNCX0VORFBPSU5UX1hGRVJfSU5UID09IHR5cGUpIHsKKwkJCWlmIChVU0JfRElSX0lOICYgZGVzYy0+YkVuZHBvaW50QWRkcmVzcykKKwkJCQllcCA9IGZpbmRfZXAoZ2FkZ2V0LCAiZXAxaW4iKTsKKwkJCWVsc2UKKwkJCQllcCA9IGZpbmRfZXAoZ2FkZ2V0LCAiZXAyb3V0Iik7CisJCX0gZWxzZQorCQkJZXAgPSBOVUxMOwogCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCiAJCQlyZXR1cm4gZXA7Ci0KLQl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHggKGdhZGdldCkgJiYgVVNCX0VORFBPSU5UX1hGRVJfSU5UID09IHR5cGUpIHsKLQkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDEtYnVsayIpOwotCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCi0JCQlyZXR1cm4gZXA7CisjZW5kaWYKIAl9CiAKIAkvKiBTZWNvbmQsIGxvb2sgYXQgZW5kcG9pbnRzIHVudGlsIGFuIHVuY2xhaW1lZCBvbmUgbG9va3MgdXNhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDE0MTM3MmIuLjQwMGY4MDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZiBVU0JfRVRIX0VFTQorI2lmZGVmIENPTkZJR19VU0JfRVRIX0VFTQogc3RhdGljIGludCB1c2VfZWVtID0gMTsKICNlbHNlCiBzdGF0aWMgaW50IHVzZV9lZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCmluZGV4IGQxMDM1M2QuLmU0OWM3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCkBAIC03MDIsMTQgKzcwMiw2IEBACiAvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIEFDTSAuLi4gKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3VwcG9ydF9jZGMoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQogewotCS8qIFNIMyBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLwotCWlmIChnYWRnZXRfaXNfc2goYy0+Y2Rldi0+Z2FkZ2V0KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogc2ExMTAwIGRvZXNuJ3QgaGF2ZSBhIHRoaXJkIGludGVycnVwdCBlbmRwb2ludCAqLwotCWlmIChnYWRnZXRfaXNfc2ExMTAwKGMtPmNkZXYtPmdhZGdldCkpCi0JCXJldHVybiBmYWxzZTsKLQogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJvYmFibHkqIGZpbmUgLi4uICovCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCBkZjc3ZjYxLi5mMWUzYWFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lIFVBQ19EVF9UT1RBTF9MRU5HVEggKFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIICsgVUFDX0RUX0lOUFVUX1RFUk1JTkFMX1NJWkUgXAogCSsgVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFICsgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKDApKQogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjFfMiBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0hFQURFUiwKQEAgLTEyNCw3ICsxMjQsNyBAQAogfTsKIAogI2RlZmluZSBPVVRQVVRfVEVSTUlOQUxfSUQJMwotc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSBvdXRwdXRfdGVybWluYWxfZGVzYyA9IHsKIAkuYkxlbmd0aAkJPSBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZQk9IFVBQ19PVVRQVVRfVEVSTUlOQUwsCkBAIC0xNTQsNyArMTU0LDcgQEAKIH07CiAKIC8qIEIuNC4yICBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgYXNfaGVhZGVyX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MSBhc19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQVNfSEVBREVSX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19BU19HRU5FUkFMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwppbmRleCBlY2Y1YmRkLi4yZmZmNTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwpAQCAtNDk3LDEyICs0OTcsOSBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKIAogCQkJLyogRW5hYmxlIHpscHMgYnkgZGVmYXVsdCBmb3IgRUNNIGNvbmZvcm1hbmNlOwotCQkJICogb3ZlcnJpZGUgZm9yIG11c2JfaGRyYyAoYXZvaWRzIHR4ZG1hIG92aGVhZCkKLQkJCSAqIGFuZCBzYTExMDAgKGNhbid0KS4KKwkJCSAqIG92ZXJyaWRlIGZvciBtdXNiX2hkcmMgKGF2b2lkcyB0eGRtYSBvdmhlYWQpLgogCQkJICovCi0JCQllY20tPnBvcnQuaXNfemxwX29rID0gISgKLQkJCQkgICBnYWRnZXRfaXNfc2ExMTAwKGNkZXYtPmdhZGdldCkKLQkJCQl8fCBnYWRnZXRfaXNfbXVzYmhkcmMoY2Rldi0+Z2FkZ2V0KQorCQkJZWNtLT5wb3J0LmlzX3pscF9vayA9ICEoZ2FkZ2V0X2lzX211c2JoZHJjKGNkZXYtPmdhZGdldCkKIAkJCQkpOwogCQkJZWNtLT5wb3J0LmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKIAkJCURCRyhjZGV2LCAiYWN0aXZhdGUgZWNtXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKaW5kZXggNzdmY2QxYi4uNWEzY2RkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkX3Rhc2s7CiAKIAkvKiBDYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhyZWFkIGV4aXRzLiAqLwotCXZvaWQJCQkoKnRocmVhZF9leGl0cykoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbik7CisJaW50CQkJKCp0aHJlYWRfZXhpdHMpKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pOwogCS8qIEdhZGdldCdzIHByaXZhdGUgZGF0YS4gKi8KIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsKIApAQCAtMzkyLDggKzM5MiwxMiBAQAogCWNvbnN0IGNoYXIJCSpsdW5fbmFtZV9mb3JtYXQ7CiAJY29uc3QgY2hhcgkJKnRocmVhZF9uYW1lOwogCi0JLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRocmVhZCBleGl0cy4gKi8KLQl2b2lkCQkJKCp0aHJlYWRfZXhpdHMpKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pOworCS8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aHJlYWQgZXhpdHMuICBJZiBubworCSAqIGNhbGxiYWNrIGlzIHNldCBvciBpdCByZXR1cm5zIHZhbHVlIGxvd2VyIHRoZW4gemVybyBNU0YKKwkgKiB3aWxsIGZvcmNlIGVqZWN0IGFsbCBMVU5zIGl0IG9wZXJhdGVzIG9uIChpbmNsdWRpbmcgdGhvc2UKKwkgKiBtYXJrZWQgYXMgbm9uLXJlbW92YWJsZSBvciB3aXRoIHByZXZlbnRfbWVkaXVtX3JlbW92YWwgZmxhZworCSAqIHNldCkuICovCisJaW50CQkJKCp0aHJlYWRfZXhpdHMpKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pOwogCS8qIEdhZGdldCdzIHByaXZhdGUgZGF0YS4gKi8KIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsKIApAQCAtNjE0LDcgKzYxOCwxMiBAQAogCQkJcmV0dXJuIC1FRE9NOwogCQlWREJHKGZzZywgImdldCBtYXggTFVOXG4iKTsKIAkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+Y29tbW9uLT5ubHVucyAtIDE7Ci0JCXJldHVybiAxOworCisJCS8qIFJlc3BvbmQgd2l0aCBkYXRhL3N0YXR1cyAqLworCQlyZXEtPmxlbmd0aCA9IG1pbigodTE2KTEsIHdfbGVuZ3RoKTsKKwkJZnNnLT5jb21tb24tPmVwMHJlcV9uYW1lID0KKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4gPyAiZXAwLWluIiA6ICJlcDAtb3V0IjsKKwkJcmV0dXJuIGVwMF9xdWV1ZShmc2ctPmNvbW1vbik7CiAJfQogCiAJVkRCRyhmc2csCkBAIC0yNTI0LDE0ICsyNTMzLDYgQEAKIAogCWNhc2UgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0U6CiAJCXJjID0gZG9fc2V0X2NvbmZpZyhjb21tb24sIG5ld19jb25maWcpOwotCQlpZiAoY29tbW9uLT5lcDBfcmVxX3RhZyAhPSBleGNlcHRpb25fcmVxX3RhZykKLQkJCWJyZWFrOwotCQlpZiAocmMgIT0gMCkgewkJCS8qIFNUQUxMIG9uIGVycm9ycyAqLwotCQkJREJHKGNvbW1vbiwgImVwMCBzZXQgaGFsdFxuIik7Ci0JCQl1c2JfZXBfc2V0X2hhbHQoY29tbW9uLT5lcDApOwotCQl9IGVsc2UgewkJCS8qIENvbXBsZXRlIHRoZSBzdGF0dXMgc3RhZ2UgKi8KLQkJCWVwMF9xdWV1ZShjb21tb24pOwotCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBGU0dfU1RBVEVfRVhJVDoKQEAgLTI2MTUsOCArMjYxNiwyMCBAQAogCWNvbW1vbi0+dGhyZWFkX3Rhc2sgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmY29tbW9uLT5sb2NrKTsKIAotCWlmIChjb21tb24tPnRocmVhZF9leGl0cykKLQkJY29tbW9uLT50aHJlYWRfZXhpdHMoY29tbW9uKTsKKwlpZiAoIWNvbW1vbi0+dGhyZWFkX2V4aXRzIHx8IGNvbW1vbi0+dGhyZWFkX2V4aXRzKGNvbW1vbikgPCAwKSB7CisJCXN0cnVjdCBmc2dfbHVuICpjdXJsdW4gPSBjb21tb24tPmx1bnM7CisJCXVuc2lnbmVkIGkgPSBjb21tb24tPm5sdW5zOworCisJCWRvd25fd3JpdGUoJmNvbW1vbi0+ZmlsZXNlbSk7CisJCWZvciAoOyBpLS07ICsrY3VybHVuKSB7CisJCQlpZiAoIWZzZ19sdW5faXNfb3BlbihjdXJsdW4pKQorCQkJCWNvbnRpbnVlOworCisJCQlmc2dfbHVuX2Nsb3NlKGN1cmx1bik7CisJCQljdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CisJCX0KKwkJdXBfd3JpdGUoJmNvbW1vbi0+ZmlsZXNlbSk7CisJfQogCiAJLyogTGV0IHRoZSB1bmJpbmQgYW5kIGNsZWFudXAgcm91dGluZXMga25vdyB0aGUgdGhyZWFkIGhhcyBleGl0ZWQgKi8KIAljb21wbGV0ZV9hbmRfZXhpdCgmY29tbW9uLT50aHJlYWRfbm90aWZpZXIsIDApOwpAQCAtMjc2MywxMCArMjc3Niw3IEBACiAJaWYgKGNmZy0+cmVsZWFzZSAhPSAweGZmZmYpIHsKIAkJaSA9IGNmZy0+cmVsZWFzZTsKIAl9IGVsc2UgewotCQkvKiBUaGUgc2ExMTAwIGNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCAqLwotCQlpID0gZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpCi0JCQk/IC0xCi0JCQk6IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKKwkJaSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKIAkJaWYgKGkgPj0gMCkgewogCQkJaSA9IDB4MDMwMCArIGk7CiAJCX0gZWxzZSB7CkBAIC0yNzkxLDggKzI4MDEsNyBAQAogCSAqIGRpc2FibGUgc3RhbGxzLgogCSAqLwogCWNvbW1vbi0+Y2FuX3N0YWxsID0gY2ZnLT5jYW5fc3RhbGwgJiYKLQkJIShnYWRnZXRfaXNfc2goY29tbW9uLT5nYWRnZXQpIHx8Ci0JCSAgZ2FkZ2V0X2lzX2F0OTEoY29tbW9uLT5nYWRnZXQpKTsKKwkJIShnYWRnZXRfaXNfYXQ5MShjb21tb24tPmdhZGdldCkpOwogCiAKIAlzcGluX2xvY2tfaW5pdCgmY29tbW9uLT5sb2NrKTsKQEAgLTI4NTIsNyArMjg2MSw2IEBACiAJLyogQ2FsbCBmc2dfY29tbW9uX3JlbGVhc2UoKSBkaXJlY3RseSwgcmVmIG1pZ2h0IGJlIG5vdAogCSAqIGluaXRpYWxpc2VkICovCiAJZnNnX2NvbW1vbl9yZWxlYXNlKCZjb21tb24tPnJlZik7Ci0JY29tcGxldGUoJmNvbW1vbi0+dGhyZWFkX25vdGlmaWVyKTsKIAlyZXR1cm4gRVJSX1BUUihyYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCmluZGV4IDk1ZGFlNGMuLmEzMGU2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwpAQCAtNzY5LDEwICs3NjksNiBAQAogLyogU29tZSBjb250cm9sbGVycyBjYW4ndCBzdXBwb3J0IFJORElTIC4uLiAqLwogc3RhdGljIGlubGluZSBib29sIGNhbl9zdXBwb3J0X3JuZGlzKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKLQkvKiBvbmx5IHR3byBlbmRwb2ludHMgb24gc2ExMTAwICovCi0JaWYgKGdhZGdldF9pc19zYTExMDAoYy0+Y2Rldi0+Z2FkZ2V0KSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJLyogZXZlcnl0aGluZyBlbHNlIGlzICpwcmVzdW1hYmx5KiBmaW5lICovCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggN2RjZGJkYS4uYjQ5ZDg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMzIwOCwxNSArMzIwOCwxMSBAQAogCSAqIGhhbHQgYnVsayBlbmRwb2ludHMgY29ycmVjdGx5LiAgSWYgb25lIG9mIHRoZW0gaXMgcHJlc2VudCwKIAkgKiBkaXNhYmxlIHN0YWxscy4KIAkgKi8KLQlpZiAoZ2FkZ2V0X2lzX3NoKGZzZy0+Z2FkZ2V0KSB8fCBnYWRnZXRfaXNfYXQ5MShmc2ctPmdhZGdldCkpCisJaWYgKGdhZGdldF9pc19hdDkxKGZzZy0+Z2FkZ2V0KSkKIAkJbW9kX2RhdGEuY2FuX3N0YWxsID0gMDsKIAogCWlmIChtb2RfZGF0YS5yZWxlYXNlID09IDB4ZmZmZikgewkvLyBQYXJhbWV0ZXIgd2Fzbid0IHNldAotCQkvKiBUaGUgc2ExMTAwIGNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCAqLwotCQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChmc2ctPmdhZGdldCkpCi0JCQlnY251bSA9IC0xOwotCQllbHNlCi0JCQlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZnNnLT5nYWRnZXQpOworCQlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZnNnLT5nYWRnZXQpOwogCQlpZiAoZ2NudW0gPj0gMCkKIAkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDAgKyBnY251bTsKIAkJZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwppbmRleCA3ODgxZjEyLi4zNTM3ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTI3NDksNyArMjc0OSw3IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHFlX3VkY19tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcWVfdWRjX21hdGNoW10gX19kZXZpbml0Y29uc3QgPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1xZS11c2IiLAogCQkuZGF0YSA9ICh2b2lkICopUE9SVF9RRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCBmMmQyNzBiLi4xZWRiYzEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtNDUsNDYgKzQ1LDE4IEBACiAjZGVmaW5lCWdhZGdldF9pc19nb2t1KGcpCTAKICNlbmRpZgogCi0vKiBTSDMgVURDIC0tIG5vdCB5ZXQgcG9ydGVkIDIuNCAtLT4gMi42ICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfU1VQRVJICi0jZGVmaW5lCWdhZGdldF9pc19zaChnKQkJIXN0cmNtcCgic2hfdWRjIiwgKGcpLT5uYW1lKQotI2Vsc2UKLSNkZWZpbmUJZ2FkZ2V0X2lzX3NoKGcpCQkwCi0jZW5kaWYKLQotLyogbm90IHlldCBzdGFibGUgb24gMi42ICh3b3VsZCBoZWxwICJvcmlnaW5hbCBaYXVydXMiKSAqLwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMAotI2RlZmluZQlnYWRnZXRfaXNfc2ExMTAwKGcpCSFzdHJjbXAoInNhMTEwMF91ZGMiLCAoZyktPm5hbWUpCi0jZWxzZQotI2RlZmluZQlnYWRnZXRfaXNfc2ExMTAwKGcpCTAKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWAogI2RlZmluZQlnYWRnZXRfaXNfbGg3YTQweChnKQkhc3RyY21wKCJsaDdhNDB4X3VkYyIsIChnKS0+bmFtZSkKICNlbHNlCiAjZGVmaW5lCWdhZGdldF9pc19saDdhNDB4KGcpCTAKICNlbmRpZgogCi0vKiBoYW5kaGVsZHMub3JnIHRyZWUgKD8pICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVExMVhYCi0jZGVmaW5lCWdhZGdldF9pc19tcTExeHgoZykJIXN0cmNtcCgibXExMXh4X3VkYyIsIChnKS0+bmFtZSkKLSNlbHNlCi0jZGVmaW5lCWdhZGdldF9pc19tcTExeHgoZykJMAotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCiAjZGVmaW5lCWdhZGdldF9pc19vbWFwKGcpCSFzdHJjbXAoIm9tYXBfdWRjIiwgKGcpLT5uYW1lKQogI2Vsc2UKICNkZWZpbmUJZ2FkZ2V0X2lzX29tYXAoZykJMAogI2VuZGlmCiAKLS8qIG5vdCB5ZXQgcG9ydGVkIDIuNCAtLT4gMi42ICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTjk2MDQKLSNkZWZpbmUJZ2FkZ2V0X2lzX245NjA0KGcpCSFzdHJjbXAoIm45NjA0X3VkYyIsIChnKS0+bmFtZSkKLSNlbHNlCi0jZGVmaW5lCWdhZGdldF9pc19uOTYwNChnKQkwCi0jZW5kaWYKLQogLyogdmFyaW91cyB1bnN0YWJsZSB2ZXJzaW9ucyBhdmFpbGFibGUgKi8KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1gKICNkZWZpbmUJZ2FkZ2V0X2lzX3B4YTI3eChnKQkhc3RyY21wKCJweGEyN3hfdWRjIiwgKGcpLT5uYW1lKQpAQCAtMTIyLDE0ICs5NCw2IEBACiAjZGVmaW5lIGdhZGdldF9pc19mc2xfdXNiMihnKQkwCiAjZW5kaWYKIAotLyogTWVudG9yIGhpZ2ggc3BlZWQgZnVuY3Rpb24gY29udHJvbGxlciAqLwotLyogZnJvbSBNb250YXZpc3RhIGtlcm5lbCAoPykgKi8KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSFNGQwotI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhzZmMoZykJIXN0cmNtcCgibXVzYmhzZmNfdWRjIiwgKGcpLT5uYW1lKQotI2Vsc2UKLSNkZWZpbmUgZ2FkZ2V0X2lzX211c2Joc2ZjKGcpCTAKLSNlbmRpZgotCiAvKiBNZW50b3IgaGlnaCBzcGVlZCAiZHVhbCByb2xlIiBjb250cm9sbGVyLCBpbiBwZXJpcGhlcmFsIHJvbGUgKi8KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKICNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCSFzdHJjbXAoIm11c2JfaGRyYyIsIChnKS0+bmFtZSkKQEAgLTE0MywxMyArMTA3LDYgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX2xhbmd3ZWxsKGcpCTAKICNlbmRpZgogCi0vKiBmcm9tIE1vbnRhdmlzdGEga2VybmVsICg/KSAqLwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01QQzgyNzIKLSNkZWZpbmUgZ2FkZ2V0X2lzX21wYzgyNzIoZykJIXN0cmNtcCgibXBjODI3Ml91ZGMiLCAoZyktPm5hbWUpCi0jZWxzZQotI2RlZmluZSBnYWRnZXRfaXNfbXBjODI3MihnKQkwCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX002NjU5MgogI2RlZmluZQlnYWRnZXRfaXNfbTY2NTkyKGcpCSFzdHJjbXAoIm02NjU5Ml91ZGMiLCAoZyktPm5hbWUpCiAjZWxzZQpAQCAtMjAzLDIwICsxNjAsMTIgQEAKIAkJcmV0dXJuIDB4MDI7CiAJZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YShnYWRnZXQpKQogCQlyZXR1cm4gMHgwMzsKLQllbHNlIGlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKLQkJcmV0dXJuIDB4MDQ7Ci0JZWxzZSBpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpKQotCQlyZXR1cm4gMHgwNTsKIAllbHNlIGlmIChnYWRnZXRfaXNfZ29rdShnYWRnZXQpKQogCQlyZXR1cm4gMHgwNjsKLQllbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4KGdhZGdldCkpCi0JCXJldHVybiAweDA3OwogCWVsc2UgaWYgKGdhZGdldF9pc19vbWFwKGdhZGdldCkpCiAJCXJldHVybiAweDA4OwogCWVsc2UgaWYgKGdhZGdldF9pc19saDdhNDB4KGdhZGdldCkpCiAJCXJldHVybiAweDA5OwotCWVsc2UgaWYgKGdhZGdldF9pc19uOTYwNChnYWRnZXQpKQotCQlyZXR1cm4gMHgxMDsKIAllbHNlIGlmIChnYWRnZXRfaXNfcHhhMjd4KGdhZGdldCkpCiAJCXJldHVybiAweDExOwogCWVsc2UgaWYgKGdhZGdldF9pc19zM2MyNDEwKGdhZGdldCkpCkBAIC0yMjUsMTIgKzE3NCw4IEBACiAJCXJldHVybiAweDEzOwogCWVsc2UgaWYgKGdhZGdldF9pc19pbXgoZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4MTQ7Ci0JZWxzZSBpZiAoZ2FkZ2V0X2lzX211c2Joc2ZjKGdhZGdldCkpCi0JCXJldHVybiAweDE1OwogCWVsc2UgaWYgKGdhZGdldF9pc19tdXNiaGRyYyhnYWRnZXQpKQogCQlyZXR1cm4gMHgxNjsKLQllbHNlIGlmIChnYWRnZXRfaXNfbXBjODI3MihnYWRnZXQpKQotCQlyZXR1cm4gMHgxNzsKIAllbHNlIGlmIChnYWRnZXRfaXNfYXRtZWxfdXNiYShnYWRnZXQpKQogCQlyZXR1cm4gMHgxODsKIAllbHNlIGlmIChnYWRnZXRfaXNfZnNsX3VzYjIoZ2FkZ2V0KSkKQEAgLTI2NSwxMCArMjEwLDYgQEAKIAlpZiAoZ2FkZ2V0X2lzX3B4YTI3eChnYWRnZXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBTSDMgaGFyZHdhcmUganVzdCBkb2Vzbid0IGRvIGFsdHNldHRpbmdzICovCi0JaWYgKGdhZGdldF9pc19zaChnYWRnZXQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgKnByZXN1bWFibHkqIGZpbmUgLi4uICovCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IGQwYjFlODMuLjA0ZjYyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIH07CiAKIC8qIEIuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMSBhY19oZWFkZXJfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXzEgYWNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLApAQCAtNjE4LDExICs2MTgsNiBAQAogCX0KICNlbmRpZgogCi0JaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSAmJiBkZXYtPmNvbmZpZykgewotCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCi0JCUVSUk9SKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7Ci0JCXJldHVybiAtRVNQSVBFOwotCX0KIAlnbWlkaV9yZXNldF9jb25maWcoZGV2KTsKIAogCXN3aXRjaCAobnVtYmVyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDExMmJiNDAuLmU4ZWRjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xODU5LDcgKzE4NTksNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsgewogCS5jbGFzcyA9CSgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlKSwKIAkuY2xhc3NfbWFzayA9CX4wLAogCS52ZW5kb3IgPQkweDEwMmYsCQkvKiBUb3NoaWJhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IGJmMGY2NTIuLmRlOGE4MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIH07CiAKIHN0cnVjdCBlcF9kYXRhIHsKLQlzdHJ1Y3Qgc2VtYXBob3JlCQlsb2NrOworCXN0cnVjdCBtdXRleAkJCWxvY2s7CiAJZW51bSBlcF9zdGF0ZQkJCXN0YXRlOwogCWF0b21pY190CQkJY291bnQ7CiAJc3RydWN0IGRldl9kYXRhCQkJKmRldjsKQEAgLTI5OCwxMCArMjk4LDEwIEBACiAJaW50CXZhbDsKIAogCWlmIChmX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlpZiAoZG93bl90cnlsb2NrICgmZXBkYXRhLT5sb2NrKSAhPSAwKQorCQlpZiAoIW11dGV4X3RyeWxvY2soJmVwZGF0YS0+bG9jaykpCiAJCQlnb3RvIG5vbmJsb2NrOwogCQlpZiAoZXBkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9FTkFCTEVEKSB7Ci0JCQl1cCAoJmVwZGF0YS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmVwZGF0YS0+bG9jayk7CiBub25ibG9jazoKIAkJCXZhbCA9IC1FQUdBSU47CiAJCX0gZWxzZQpAQCAtMzA5LDcgKzMwOSw4IEBACiAJCXJldHVybiB2YWw7CiAJfQogCi0JaWYgKCh2YWwgPSBkb3duX2ludGVycnVwdGlibGUgKCZlcGRhdGEtPmxvY2spKSA8IDApCisJdmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZlcGRhdGEtPmxvY2spOworCWlmICh2YWwgPCAwKQogCQlyZXR1cm4gdmFsOwogCiAJc3dpdGNoIChlcGRhdGEtPnN0YXRlKSB7CkBAIC0zMjMsNyArMzI0LDcgQEAKIAkJLy8gRkFMTFRIUk9VR0gKIAljYXNlIFNUQVRFX0VQX1VOQk9VTkQ6CQkJLyogY2xlYW4gZGlzY29ubmVjdCAqLwogCQl2YWwgPSAtRU5PREVWOwotCQl1cCAoJmVwZGF0YS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZXBkYXRhLT5sb2NrKTsKIAl9CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTM5Myw3ICszOTQsNyBAQAogCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKIAkJCXVzYl9lcF9zZXRfaGFsdCAoZGF0YS0+ZXApOwogCQlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwotCQl1cCAoJmRhdGEtPmxvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCQlyZXR1cm4gLUVCQURNU0c7CiAJfQogCkBAIC00MTEsNyArNDEyLDcgQEAKIAkJdmFsdWUgPSAtRUZBVUxUOwogCiBmcmVlMToKLQl1cCAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJa2ZyZWUgKGtidWYpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTQzNiw3ICs0MzcsNyBAQAogCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKIAkJCXVzYl9lcF9zZXRfaGFsdCAoZGF0YS0+ZXApOwogCQlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwotCQl1cCAoJmRhdGEtPmxvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCQlyZXR1cm4gLUVCQURNU0c7CiAJfQogCkBAIC00NTUsNyArNDU2LDcgQEAKIAlWREVCVUcgKGRhdGEtPmRldiwgIiVzIHdyaXRlICV6dSBJTiwgc3RhdHVzICVkXG4iLAogCQlkYXRhLT5uYW1lLCBsZW4sIChpbnQpIHZhbHVlKTsKIGZyZWUxOgotCXVwICgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlrZnJlZSAoa2J1Zik7CiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtNDY2LDcgKzQ2Nyw4IEBACiAJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gZmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgdmFsdWU7CiAKLQlpZiAoKHZhbHVlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZkYXRhLT5sb2NrKSkgPCAwKQorCXZhbHVlID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkYXRhLT5sb2NrKTsKKwlpZiAodmFsdWUgPCAwKQogCQlyZXR1cm4gdmFsdWU7CiAKIAkvKiBjbGVhbiB1cCBpZiB0aGlzIGNhbiBiZSByZW9wZW5lZCAqLwpAQCAtNDc2LDcgKzQ3OCw3IEBACiAJCWRhdGEtPmhzX2Rlc2MuYkRlc2NyaXB0b3JUeXBlID0gMDsKIAkJdXNiX2VwX2Rpc2FibGUoZGF0YS0+ZXApOwogCX0KLQl1cCAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcHV0X2VwIChkYXRhKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNyw3ICs1MDksNyBAQAogCX0gZWxzZQogCQlzdGF0dXMgPSAtRU5PREVWOwogCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7Ci0JdXAgKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTY3Myw3ICs2NzUsNyBAQAogCQl2YWx1ZSA9IC1FTk9ERVY7CiAJc3Bpbl91bmxvY2tfaXJxKCZlcGRhdGEtPmRldi0+bG9jayk7CiAKLQl1cCgmZXBkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmVwZGF0YS0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkodmFsdWUpKSB7CiAJCWtmcmVlKHByaXYpOwpAQCAtNzY1LDcgKzc2Nyw4IEBACiAJdTMyCQkJdGFnOwogCWludAkJCXZhbHVlLCBsZW5ndGggPSBsZW47CiAKLQlpZiAoKHZhbHVlID0gZG93bl9pbnRlcnJ1cHRpYmxlICgmZGF0YS0+bG9jaykpIDwgMCkKKwl2YWx1ZSA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGF0YS0+bG9jayk7CisJaWYgKHZhbHVlIDwgMCkKIAkJcmV0dXJuIHZhbHVlOwogCiAJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX1JFQURZKSB7CkBAIC04NTQsNyArODU3LDcgQEAKIAkJZGF0YS0+ZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOwogCQlkYXRhLT5oc19kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CiAJfQotCXVwICgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlyZXR1cm4gdmFsdWU7CiBmYWlsMDoKIAl2YWx1ZSA9IC1FSU5WQUw7CkBAIC04NzAsNyArODczLDcgQEAKIAlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwogCWludAkJCXZhbHVlID0gLUVCVVNZOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRhdGEtPmxvY2spICE9IDApCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGF0YS0+bG9jaykgIT0gMCkKIAkJcmV0dXJuIC1FSU5UUjsKIAlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKIAlpZiAoZGF0YS0+ZGV2LT5zdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkKQEAgLTg4NSw3ICs4ODgsNyBAQAogCQlEQkcgKGRhdGEtPmRldiwgIiVzIHN0YXRlICVkXG4iLAogCQkJZGF0YS0+bmFtZSwgZGF0YS0+c3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7Ci0JdXAgKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTYzMSw3ICsxNjM0LDcgQEAKIAkJaWYgKCFkYXRhKQogCQkJZ290byBlbm9tZW0wOwogCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwotCQlpbml0X01VVEVYICgmZGF0YS0+bG9jayk7CisJCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGF0YS0+d2FpdCk7CiAKIAkJc3RybmNweSAoZGF0YS0+bmFtZSwgZXAtPm5hbWUsIHNpemVvZiAoZGF0YS0+bmFtZSkgLSAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tYXNzX3N0b3JhZ2UuYwppbmRleCAxOTYxOWZiLi43MDVjYzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbWFzc19zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jCkBAIC0xMzUsNiArMTM1LDEyIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtc2dfcmVnaXN0ZXJlZCA9IDA7CiBzdGF0aWMgdm9pZCBtc2dfY2xlYW51cCh2b2lkKTsKIAorc3RhdGljIGludCBtc2dfdGhyZWFkX2V4aXRzKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCit7CisJbXNnX2NsZWFudXAoKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgbXNnX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CiAJc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbjsKQEAgLTE0Nyw3ICsxNTMsNyBAQAogCX0KIAogCWZzZ19jb25maWdfZnJvbV9wYXJhbXMoJmNvbmZpZywgJm1vZF9kYXRhKTsKLQljb25maWcudGhyZWFkX2V4aXRzID0gKHZvaWQoKikoc3RydWN0IGZzZ19jb21tb24qKSkmbXNnX2NsZWFudXA7CisJY29uZmlnLnRocmVhZF9leGl0cyA9IG1zZ190aHJlYWRfZXhpdHM7CiAJY29tbW9uID0gZnNnX2NvbW1vbl9pbml0KDAsIGMtPmNkZXYsICZjb25maWcpOwogCWlmIChJU19FUlIoY29tbW9uKSkKIAkJcmV0dXJuIFBUUl9FUlIoY29tbW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ub2tpYS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YjY2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ub2tpYS5jCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogbm9raWEuYyAtLSBOb2tpYSBDb21wb3NpdGUgR2FkZ2V0IERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb250YWN0OiBGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBub2tpYS5jb20+CisgKgorICogVGhpcyBnYWRnZXQgZHJpdmVyIGJvcnJvd3MgZnJvbSBzZXJpYWwuYyB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAidV9zZXJpYWwuaCIKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisjaW5jbHVkZSAidV9waG9uZXQuaCIKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworLyogRGVmaW5lcyAqLworCisjZGVmaW5lIE5PS0lBX1ZFUlNJT05fTlVNCQkweDAyMTEKKyNkZWZpbmUgTk9LSUFfTE9OR19OQU1FCQkJIk45MDAgKFBDLVN1aXRlIE1vZGUpIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJjb21wb3NpdGUuYyIKKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKyNpbmNsdWRlICJ1X3NlcmlhbC5jIgorI2luY2x1ZGUgImZfYWNtLmMiCisjaW5jbHVkZSAiZl9lY20uYyIKKyNpbmNsdWRlICJmX29iZXguYyIKKyNpbmNsdWRlICJmX3NlcmlhbC5jIgorI2luY2x1ZGUgImZfcGhvbmV0LmMiCisjaW5jbHVkZSAidV9ldGhlci5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE5PS0lBX1ZFTkRPUl9JRAkJCTB4MDQyMQkvKiBOb2tpYSAqLworI2RlZmluZSBOT0tJQV9QUk9EVUNUX0lECQkweDAxYzgJLyogTm9raWEgR2FkZ2V0ICovCisKKy8qIHN0cmluZyBJRHMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5ICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUl9JRFgJCTAKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1RfSURYCQkxCisjZGVmaW5lIFNUUklOR19ERVNDUklQVElPTl9JRFgJCTIKKworc3RhdGljIGNoYXIgbWFudWZhY3R1cmVyX25va2lhW10gPSAiTm9raWEiOworc3RhdGljIGNvbnN0IGNoYXIgcHJvZHVjdF9ub2tpYVtdID0gTk9LSUFfTE9OR19OQU1FOworc3RhdGljIGNvbnN0IGNoYXIgZGVzY3JpcHRpb25fbm9raWFbXSA9ICJQQy1TdWl0ZSBDb25maWd1cmF0aW9uIjsKKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIHN0cmluZ3NfZGV2W10gPSB7CisJW1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5zID0gbWFudWZhY3R1cmVyX25va2lhLAorCVtTVFJJTkdfUFJPRFVDVF9JRFhdLnMgPSBOT0tJQV9MT05HX05BTUUsCisJW1NUUklOR19ERVNDUklQVElPTl9JRFhdLnMgPSBkZXNjcmlwdGlvbl9ub2tpYSwKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfZGV2ID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncwk9IHN0cmluZ3NfZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmRldl9zdHJpbmdzW10gPSB7CisJJnN0cmluZ3RhYl9kZXYsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9ERVZJQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0RFVklDRSwKKwkuYmNkVVNCCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcwkJPSBVU0JfQ0xBU1NfQ09NTSwKKwkuaWRWZW5kb3IJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihOT0tJQV9WRU5ET1JfSUQpLAorCS5pZFByb2R1Y3QJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihOT0tJQV9QUk9EVUNUX0lEKSwKKwkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KKwkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBNb2R1bGUgKi8KK01PRFVMRV9ERVNDUklQVElPTigiTm9raWEgY29tcG9zaXRlIGdhZGdldCBkcml2ZXIgZm9yIE45MDAiKTsKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdTggaG9zdGFkZHJbRVRIX0FMRU5dOworCitzdGF0aWMgaW50IF9faW5pdCBub2tpYV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0dXMgPSBwaG9uZXRfYmluZF9jb25maWcoYyk7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNvdWxkIG5vdCBiaW5kIHBob25ldCBjb25maWdcbiIpOworCisJc3RhdHVzID0gb2JleF9iaW5kX2NvbmZpZyhjLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiY291bGQgbm90IGJpbmQgb2JleCBjb25maWcgJWRcbiIsIDApOworCisJc3RhdHVzID0gb2JleF9iaW5kX2NvbmZpZyhjLCAxKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiY291bGQgbm90IGJpbmQgb2JleCBjb25maWcgJWRcbiIsIDApOworCisJc3RhdHVzID0gYWNtX2JpbmRfY29uZmlnKGMsIDIpOworCWlmIChzdGF0dXMpCisJCXByaW50ayhLRVJOX0RFQlVHICJjb3VsZCBub3QgYmluZCBhY20gY29uZmlnXG4iKTsKKworCXN0YXR1cyA9IGVjbV9iaW5kX2NvbmZpZyhjLCBob3N0YWRkcik7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNvdWxkIG5vdCBiaW5kIGVjbSBjb25maWdcbiIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBub2tpYV9jb25maWdfNTAwbWFfZHJpdmVyID0geworCS5sYWJlbAkJPSAiQnVzIFBvd2VyZWQiLAorCS5iaW5kCQk9IG5va2lhX2JpbmRfY29uZmlnLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMSwKKwkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCisJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX09ORSwKKwkuYk1heFBvd2VyCT0gMjUwLCAvKiA1MDBtQSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBub2tpYV9jb25maWdfMTAwbWFfZHJpdmVyID0geworCS5sYWJlbAkJPSAiU2VsZiBQb3dlcmVkIiwKKwkuYmluZAkJPSBub2tpYV9iaW5kX2NvbmZpZywKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCisJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLworCS5ibUF0dHJpYnV0ZXMJPSBVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlcgk9IDUwLCAvKiAxMDAgbUEgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5va2lhX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWludAkJCWdjbnVtOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CisJaW50CQkJc3RhdHVzOworCisJc3RhdHVzID0gZ3Bob25ldF9zZXR1cChjZGV2LT5nYWRnZXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycl9waG9uZXQ7CisKKwlzdGF0dXMgPSBnc2VyaWFsX3NldHVwKGNkZXYtPmdhZGdldCwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3NlcmlhbDsKKworCXN0YXR1cyA9IGdldGhlcl9zZXR1cChjZGV2LT5nYWRnZXQsIGhvc3RhZGRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJfZXRoZXI7CisKKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycl91c2I7CisJc3RyaW5nc19kZXZbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLmlkID0gc3RhdHVzOworCisJZGV2aWNlX2Rlc2MuaU1hbnVmYWN0dXJlciA9IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3VzYjsKKwlzdHJpbmdzX2RldltTVFJJTkdfUFJPRFVDVF9JRFhdLmlkID0gc3RhdHVzOworCisJZGV2aWNlX2Rlc2MuaVByb2R1Y3QgPSBzdGF0dXM7CisKKwkvKiBjb25maWcgZGVzY3JpcHRpb24gKi8KKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycl91c2I7CisJc3RyaW5nc19kZXZbU1RSSU5HX0RFU0NSSVBUSU9OX0lEWF0uaWQgPSBzdGF0dXM7CisKKwlub2tpYV9jb25maWdfNTAwbWFfZHJpdmVyLmlDb25maWd1cmF0aW9uID0gc3RhdHVzOworCW5va2lhX2NvbmZpZ18xMDBtYV9kcml2ZXIuaUNvbmZpZ3VyYXRpb24gPSBzdGF0dXM7CisKKwkvKiBzZXQgdXAgb3RoZXIgZGVzY3JpcHRvcnMgKi8KKwlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKKwlpZiAoZ2NudW0gPj0gMCkKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoTk9LSUFfVkVSU0lPTl9OVU0pOworCWVsc2UgeworCQkvKiB0aGlzIHNob3VsZCBvbmx5IHdvcmsgd2l0aCBodyB0aGF0IHN1cHBvcnRzIGFsdHNldHRpbmdzCisJCSAqIGFuZCBzZXZlcmFsIGVuZHBvaW50cywgYW55dGhpbmcgZWxzZSwgcGFuaWMuCisJCSAqLworCQlwcl9lcnIoIm5va2lhX2JpbmQ6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKKwkJCWdhZGdldC0+bmFtZSk7CisJCWdvdG8gZXJyX3VzYjsKKwl9CisKKwkvKiBmaW5hbHkgcmVnaXN0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwlzdGF0dXMgPSB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmbm9raWFfY29uZmlnXzUwMG1hX2RyaXZlcik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3VzYjsKKworCXN0YXR1cyA9IHVzYl9hZGRfY29uZmlnKGNkZXYsICZub2tpYV9jb25maWdfMTAwbWFfZHJpdmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJfdXNiOworCisJZGV2X2luZm8oJmdhZGdldC0+ZGV2LCAiJXNcbiIsIE5PS0lBX0xPTkdfTkFNRSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3VzYjoKKwlnZXRoZXJfY2xlYW51cCgpOworZXJyX2V0aGVyOgorCWdzZXJpYWxfY2xlYW51cCgpOworZXJyX3NlcmlhbDoKKwlncGhvbmV0X2NsZWFudXAoKTsKK2Vycl9waG9uZXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2V4aXQgbm9raWFfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlncGhvbmV0X2NsZWFudXAoKTsKKwlnc2VyaWFsX2NsZWFudXAoKTsKKwlnZXRoZXJfY2xlYW51cCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgbm9raWFfZHJpdmVyID0geworCS5uYW1lCQk9ICJnX25va2lhIiwKKwkuZGV2CQk9ICZkZXZpY2VfZGVzYywKKwkuc3RyaW5ncwk9IGRldl9zdHJpbmdzLAorCS5iaW5kCQk9IG5va2lhX2JpbmQsCisJLnVuYmluZAkJPSBfX2V4aXRfcChub2tpYV91bmJpbmQpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm9raWFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfY29tcG9zaXRlX3JlZ2lzdGVyKCZub2tpYV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQobm9raWFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBub2tpYV9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCZub2tpYV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobm9raWFfY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJkODY3ZmQuLjZiOGJmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtOTQ5LDEyICs5NDksNiBAQAogCWludAkJCXJlc3VsdCA9IDA7CiAJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OwogCi0JaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSAmJiBkZXYtPmNvbmZpZykgewotCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCi0JCUlORk8oZGV2LCAiY2FuJ3QgY2hhbmdlIGNvbmZpZ3VyYXRpb25zXG4iKTsKLQkJcmV0dXJuIC1FU1BJUEU7Ci0JfQotCiAJc3dpdGNoIChudW1iZXIpIHsKIAljYXNlIERFVl9DT05GSUdfVkFMVUU6CiAJCXJlc3VsdCA9IDA7CkBAIC0xMDMzLDEyICsxMDI3LDYgQEAKIHsKIAlpbnQJCQlyZXN1bHQgPSAwOwogCi0JaWYgKGdhZGdldF9pc19zYTExMDAoZGV2LT5nYWRnZXQpICYmIGRldi0+aW50ZXJmYWNlIDwgMCkgewotCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCi0JCUlORk8oZGV2LCAiY2FuJ3QgY2hhbmdlIGludGVyZmFjZXNcbiIpOwotCQlyZXR1cm4gLUVTUElQRTsKLQl9Ci0KIAkvKiBGcmVlIHRoZSBjdXJyZW50IGludGVyZmFjZSAqLwogCXN3aXRjaCAoZGV2LT5pbnRlcmZhY2UpIHsKIAljYXNlIFBSSU5URVJfSU5URVJGQUNFOgpAQCAtMTM5MiwxMiArMTM4MCw2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpKSB7Ci0JCS8qIGhhcmR3YXJlIGNhbid0IHdyaXRlIHplcm8gbGVuZ3RoIHBhY2tldHMuICovCi0JCUVSUk9SKGRldiwgIlNBMTEwMCBjb250cm9sbGVyIGlzIHVuc3VwcG9ydCBieSB0aGlzIGRyaXZlclxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KIAlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKIAlpZiAoZ2NudW0gPj0gMCkgewogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDAyMDAgKyBnY251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCBhZGRhMTIwLi4wNWI4OTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTc0MiwxMyArNzQyLDE3IEBACiAgKiBAZXA6IHB4YSBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqIEBzdGF0dXM6IHVzYiByZXF1ZXN0IHN0YXR1cyBzZW50IHRvIGdhZGdldCBBUEkKKyAqIEBwZmxhZ3M6IGZsYWdzIG9mIHByZXZpb3VzIHNwaW5sb2NrX2lycV9zYXZlKCkgb3IgTlVMTCBpZiBubyBsb2NrIGhlbGQKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkIGlmIGZsYWdzIG5vdCBOVUxMLCBlbHNlIGVwLT5sb2NrIHJlbGVhc2VkCiAgKgogICogUmV0aXJlIGEgcHhhMjd4IHVzYiByZXF1ZXN0LiBFbmRwb2ludCBtdXN0IGJlIGxvY2tlZC4KICAqLwotc3RhdGljIHZvaWQgcmVxX2RvbmUoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQorc3RhdGljIHZvaWQgcmVxX2RvbmUoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzLAorCXVuc2lnbmVkIGxvbmcgKnBmbGFncykKIHsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCiAJZXBfZGVsX3JlcXVlc3QoZXAsIHJlcSk7CiAJaWYgKGxpa2VseShyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKIAkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOwpAQCAtNzYwLDM4ICs3NjQsNDggQEAKIAkJCSZyZXEtPnJlcSwgc3RhdHVzLAogCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOwogCisJaWYgKHBmbGFncykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssICpwZmxhZ3MpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZXEtPnJlcS5jb21wbGV0ZSgmcmVxLT51ZGNfdXNiX2VwLT51c2JfZXAsICZyZXEtPnJlcSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmIChwZmxhZ3MpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgKnBmbGFncyk7CiB9CiAKIC8qKgogICogZXBfZW5kX291dF9yZXEgLSBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAorICogQHBmbGFnczogZmxhZ3Mgb2YgcHJldmlvdXMgc3BpbmxvY2tfaXJxX3NhdmUoKSBvciBOVUxMIGlmIG5vIGxvY2sgaGVsZAogICoKLSAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKKyAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQgb3IgcmVsZWFzZWQgKHNlZSByZXFfZG9uZSgpKQogICoKICAqIEVuZHMgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KLXN0YXRpYyB2b2lkIGVwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwKKwl1bnNpZ25lZCBsb25nICpwZmxhZ3MpCiB7CiAJaW5jX2VwX3N0YXRzX3JlcXMoZXAsICFVU0JfRElSX0lOKTsKLQlyZXFfZG9uZShlcCwgcmVxLCAwKTsKKwlyZXFfZG9uZShlcCwgcmVxLCAwLCBwZmxhZ3MpOwogfQogCiAvKioKICAqIGVwMF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBPVVQgcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKKyAqIEBwZmxhZ3M6IGZsYWdzIG9mIHByZXZpb3VzIHNwaW5sb2NrX2lycV9zYXZlKCkgb3IgTlVMTCBpZiBubyBsb2NrIGhlbGQKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkIG9yIHJlbGVhc2VkIChzZWUgcmVxX2RvbmUoKSkKICAqCiAgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gaWRsZSBzdGF0ZQogICovCi1zdGF0aWMgdm9pZCBlcDBfZW5kX291dF9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXAwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwKKwl1bnNpZ25lZCBsb25nICpwZmxhZ3MpCiB7CiAJc2V0X2VwMHN0YXRlKGVwLT5kZXYsIE9VVF9TVEFUVVNfU1RBR0UpOwotCWVwX2VuZF9vdXRfcmVxKGVwLCByZXEpOworCWVwX2VuZF9vdXRfcmVxKGVwLCByZXEsIHBmbGFncyk7CiAJZXAwX2lkbGUoZXAtPmRldik7CiB9CiAKQEAgLTc5OSwzMSArODEzLDM1IEBACiAgKiBlcF9lbmRfaW5fcmVxIC0gRW5kcyBlbmRwb2ludCBJTiByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAorICogQHBmbGFnczogZmxhZ3Mgb2YgcHJldmlvdXMgc3BpbmxvY2tfaXJxX3NhdmUoKSBvciBOVUxMIGlmIG5vIGxvY2sgaGVsZAogICoKLSAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKKyAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQgb3IgcmVsZWFzZWQgKHNlZSByZXFfZG9uZSgpKQogICoKICAqIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KICAqLwotc3RhdGljIHZvaWQgZXBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwKKwl1bnNpZ25lZCBsb25nICpwZmxhZ3MpCiB7CiAJaW5jX2VwX3N0YXRzX3JlcXMoZXAsIFVTQl9ESVJfSU4pOwotCXJlcV9kb25lKGVwLCByZXEsIDApOworCXJlcV9kb25lKGVwLCByZXEsIDAsIHBmbGFncyk7CiB9CiAKIC8qKgogICogZXAwX2VuZF9pbl9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKKyAqIEBwZmxhZ3M6IGZsYWdzIG9mIHByZXZpb3VzIHNwaW5sb2NrX2lycV9zYXZlKCkgb3IgTlVMTCBpZiBubyBsb2NrIGhlbGQKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkIG9yIHJlbGVhc2VkIChzZWUgcmVxX2RvbmUoKSkKICAqCiAgKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKICAqIGNvbnRyb2wgZW5kcG9pbnQgaW50byBzdGF0dXMgc3RhdGUKICAqLwotc3RhdGljIHZvaWQgZXAwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXAwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxLAorCXVuc2lnbmVkIGxvbmcgKnBmbGFncykKIHsKIAlzZXRfZXAwc3RhdGUoZXAtPmRldiwgSU5fU1RBVFVTX1NUQUdFKTsKLQllcF9lbmRfaW5fcmVxKGVwLCByZXEpOworCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSwgcGZsYWdzKTsKIH0KIAogLyoqCkBAIC04MzEsMTkgKzg0OSwyMiBAQAogICogQGVwOiBweGEgZW5kcG9pbnQKICAqIEBzdGF0dXM6IHVzYiByZXF1ZXN0IHN0YXR1cwogICoKLSAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKKyAqIENvbnRleHQ6IGVwLT5sb2NrIHJlbGVhc2VkCiAgKgogICogRGVxdWV1ZXMgYWxsIHJlcXVlc3RzIG9uIGFuIGVuZHBvaW50LiBBcyBhIHNpZGUgZWZmZWN0LCBpbnRlcnJ1cHRzIHdpbGwgYmUKICAqIGRpc2FibGVkIG9uIHRoYXQgZW5kcG9pbnQgKGJlY2F1c2Ugbm8gbW9yZSByZXF1ZXN0cykuCiAgKi8KIHN0YXRpYyB2b2lkIG51a2Uoc3RydWN0IHB4YV9lcCAqZXAsIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHB4YTI3eF9yZXF1ZXN0CSpyZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7Ci0JCXJlcV9kb25lKGVwLCByZXEsIHN0YXR1cyk7CisJCXJlcV9kb25lKGVwLCByZXEsIHN0YXR1cywgJmZsYWdzKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0xMTIzLDYgKzExNDQsNyBAQAogCWludAkJCXJjID0gMDsKIAlpbnQJCQlpc19maXJzdF9yZXE7CiAJdW5zaWduZWQJCWxlbmd0aDsKKwlpbnQJCQlyZWN1cnNpb25fZGV0ZWN0ZWQ7CiAKIAlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCByZXEpOwogCXVkY191c2JfZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgdWRjX3VzYl9lcCwgdXNiX2VwKTsKQEAgLTExNTIsNiArMTE3NCw3IEBACiAJCXJldHVybiAtRU1TR1NJWkU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlyZWN1cnNpb25fZGV0ZWN0ZWQgPSBlcC0+aW5faGFuZGxlX2VwOwogCiAJaXNfZmlyc3RfcmVxID0gbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKTsKIAllcF9kYmcoZXAsICJxdWV1ZSByZXEgJXAoZmlyc3Q9JXMpLCBsZW4gJWQgYnVmICVwXG4iLApAQCAtMTE2MSwxMiArMTE4NCwxMiBAQAogCWlmICghZXAtPmVuYWJsZWQpIHsKIAkJX3JlcS0+c3RhdHVzID0gLUVTSFVURE9XTjsKIAkJcmMgPSAtRVNIVVRET1dOOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbG9ja2VkOwogCX0KIAogCWlmIChyZXEtPmluX3VzZSkgewogCQllcF9lcnIoZXAsICJyZWZ1c2luZyB0byBxdWV1ZSByZXEgJXAgKGFscmVhZHkgcXVldWVkKVxuIiwgcmVxKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2xvY2tlZDsKIAl9CiAKIAlsZW5ndGggPSBfcmVxLT5sZW5ndGg7CkBAIC0xMTc0LDEyICsxMTk3LDEzIEBACiAJX3JlcS0+YWN0dWFsID0gMDsKIAogCWVwX2FkZF9yZXF1ZXN0KGVwLCByZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoaXNfZXAwKGVwKSkgewogCQlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKIAkJY2FzZSBXQUlUX0FDS19TRVRfQ09ORl9JTlRFUkY6CiAJCQlpZiAobGVuZ3RoID09IDApIHsKLQkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEpOworCQkJCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSwgTlVMTCk7CiAJCQl9IGVsc2UgewogCQkJCWVwX2VycihlcCwgImdvdCBhIHJlcXVlc3Qgb2YgJWQgYnl0ZXMgd2hpbGUiCiAJCQkJCSJpbiBzdGF0ZSBXQUlUX0FDS19TRVRfQ09ORl9JTlRFUkZcbiIsCkBAIC0xMTkyLDEyICsxMjE2LDEyIEBACiAJCWNhc2UgSU5fREFUQV9TVEFHRToKIAkJCWlmICghZXBfaXNfZnVsbChlcCkpCiAJCQkJaWYgKHdyaXRlX2VwMF9maWZvKGVwLCByZXEpKQotCQkJCQllcDBfZW5kX2luX3JlcShlcCwgcmVxKTsKKwkJCQkJZXAwX2VuZF9pbl9yZXEoZXAsIHJlcSwgTlVMTCk7CiAJCQlicmVhazsKIAkJY2FzZSBPVVRfREFUQV9TVEFHRToKIAkJCWlmICgobGVuZ3RoID09IDApIHx8ICFlcG91dF9oYXNfcGt0KGVwKSkKIAkJCQlpZiAocmVhZF9lcDBfZmlmbyhlcCwgcmVxKSkKLQkJCQkJZXAwX2VuZF9vdXRfcmVxKGVwLCByZXEpOworCQkJCQllcDBfZW5kX291dF9yZXEoZXAsIHJlcSwgTlVMTCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVwX2VycihlcCwgIm9kZCBzdGF0ZSAlcyB0byBzZW5kIG1lIGEgcmVxdWVzdFxuIiwKQEAgLTEyMDcsMTIgKzEyMzEsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLQkJaGFuZGxlX2VwKGVwKTsKKwkJaWYgKCFyZWN1cnNpb25fZGV0ZWN0ZWQpCisJCQloYW5kbGVfZXAoZXApOwogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOworb3V0X2xvY2tlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCWdvdG8gb3V0OwogfQogCiAvKioKQEAgLTEyNDIsMTMgKzEyNjksMTQgQEAKIAkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpIHsKLQkJCXJlcV9kb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKIAkJCXJjID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXJjKQorCQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCwgTlVMTCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNDQ1LDcgKzE0NzMsNiBAQAogewogCXN0cnVjdCBweGFfZXAJCSplcDsKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkqdWRjX3VzYl9lcDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCWlmICghX2VwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0NTUsMTAgKzE0ODIsOCBAQAogCWlmICghZXAgfHwgaXNfZXAwKGVwKSB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAllcC0+ZW5hYmxlZCA9IDA7CiAJbnVrZShlcCwgLUVTSFVURE9XTik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAogCXB4YV9lcF9maWZvX2ZsdXNoKF9lcCk7CiAJdWRjX3VzYl9lcC0+cHhhX2VwID0gTlVMTDsKQEAgLTE5MDcsOCArMTkzMiwxMCBAQAogCX0gdTsKIAlpbnQgaTsKIAlpbnQgaGF2ZV9leHRyYWJ5dGVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbnVrZShlcCwgLUVQUk9UTyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIEluIHRoZSBQWEEzMjAgbWFudWFsLCBpbiB0aGUgc2VjdGlvbiBhYm91dCBCYWNrLXRvLUJhY2sgc2V0dXAKQEAgLTE5NDcsMTAgKzE5NzQsMTMgQEAKIAkvKiBUZWxsIFVEQyB0byBlbnRlciBEYXRhIFN0YWdlICovCiAJZXBfd3JpdGVfVURDQ1NSKGVwLCBVRENDU1IwX1NBIHwgVURDQ1NSMF9PUEMpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAlpID0gdWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwgJnUucik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJaWYgKGkgPCAwKQogCQlnb3RvIHN0YWxsOwogb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogc3RhbGw6CiAJZXBfZGJnKGVwLCAicHJvdG9jb2wgU1RBTEwsIHVkY2NzcjA9JTAzeCBlcnIgJWRcbiIsCkBAIC0yMDU1LDEzICsyMDg1LDEzIEBACiAJCWlmIChyZXEgJiYgIWVwX2lzX2Z1bGwoZXApKQogCQkJY29tcGxldGVkID0gd3JpdGVfZXAwX2ZpZm8oZXAsIHJlcSk7CiAJCWlmIChjb21wbGV0ZWQpCi0JCQllcDBfZW5kX2luX3JlcShlcCwgcmVxKTsKKwkJCWVwMF9lbmRfaW5fcmVxKGVwLCByZXEsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE9VVF9EQVRBX1NUQUdFOgkJCS8qIFNFVF9ERVNDUklQVE9SICovCiAJCWlmIChlcG91dF9oYXNfcGt0KGVwKSAmJiByZXEpCiAJCQljb21wbGV0ZWQgPSByZWFkX2VwMF9maWZvKGVwLCByZXEpOwogCQlpZiAoY29tcGxldGVkKQotCQkJZXAwX2VuZF9vdXRfcmVxKGVwLCByZXEpOworCQkJZXAwX2VuZF9vdXRfcmVxKGVwLCByZXEsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFNUQUxMOgogCQllcF93cml0ZV9VRENDU1IoZXAsIFVEQ0NTUjBfRlNUKTsKQEAgLTIwOTEsNyArMjEyMSw3IEBACiAgKiBUcmllcyB0byB0cmFuc2ZlciBhbGwgcGVuZGluZyByZXF1ZXN0IGRhdGEgaW50byB0aGUgZW5kcG9pbnQgYW5kL29yCiAgKiB0cmFuc2ZlciBhbGwgcGVuZGluZyBkYXRhIGluIHRoZSBlbmRwb2ludCBpbnRvIHVzYiByZXF1ZXN0cy4KICAqCi0gKiBJcyBhbHdheXMgY2FsbGVkIHdoZW4gaW5faW50ZXJydXB0KCkgb3Igd2l0aCBlcC0+bG9jayBoZWxkLgorICogSXMgYWx3YXlzIGNhbGxlZCB3aGVuIGluX2ludGVycnVwdCgpIGFuZCB3aXRoIGVwLT5sb2NrIHJlbGVhc2VkLgogICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfZXAoc3RydWN0IHB4YV9lcCAqZXApCiB7CkBAIC0yMTAwLDEwICsyMTMwLDE3IEBACiAJdTMyIHVkY2NzcjsKIAlpbnQgaXNfaW4gPSBlcC0+ZGlyX2luOwogCWludCBsb29wID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOworCWlmIChlcC0+aW5faGFuZGxlX2VwKQorCQlnb3RvIHJlY3Vyc2lvbl9kZXRlY3RlZDsKKwllcC0+aW5faGFuZGxlX2VwID0gMTsKIAogCWRvIHsKIAkJY29tcGxldGVkID0gMDsKIAkJdWRjY3NyID0gdWRjX2VwX3JlYWRsKGVwLCBVRENDU1IpOworCiAJCWlmIChsaWtlbHkoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKQogCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKIAkJCQkJc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7CkBAIC0yMTIyLDE1ICsyMTU5LDIyIEBACiAJCWlmICh1bmxpa2VseShpc19pbikpIHsKIAkJCWlmIChsaWtlbHkoIWVwX2lzX2Z1bGwoZXApKSkKIAkJCQljb21wbGV0ZWQgPSB3cml0ZV9maWZvKGVwLCByZXEpOwotCQkJaWYgKGNvbXBsZXRlZCkKLQkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEpOwogCQl9IGVsc2UgewogCQkJaWYgKGxpa2VseShlcG91dF9oYXNfcGt0KGVwKSkpCiAJCQkJY29tcGxldGVkID0gcmVhZF9maWZvKGVwLCByZXEpOwotCQkJaWYgKGNvbXBsZXRlZCkKLQkJCQllcF9lbmRfb3V0X3JlcShlcCwgcmVxKTsKKwkJfQorCisJCWlmIChjb21wbGV0ZWQpIHsKKwkJCWlmIChpc19pbikKKwkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEsICZmbGFncyk7CisJCQllbHNlCisJCQkJZXBfZW5kX291dF9yZXEoZXAsIHJlcSwgJmZsYWdzKTsKIAkJfQogCX0gd2hpbGUgKGNvbXBsZXRlZCk7CisKKwllcC0+aW5faGFuZGxlX2VwID0gMDsKK3JlY3Vyc2lvbl9kZXRlY3RlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTIyMTgsOSArMjI2MiwxMyBAQAogCQkJY29udGludWU7CiAKIAkJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lTUjAsIFVEQ0lTUl9JTlQoaSwgVURDSVNSX0lOVF9NQVNLKSk7Ci0JCWVwID0gJnVkYy0+cHhhX2VwW2ldOwotCQllcC0+c3RhdHMuaXJxcysrOwotCQloYW5kbGVfZXAoZXApOworCisJCVdBUk5fT04oaSA+PSBBUlJBWV9TSVpFKHVkYy0+cHhhX2VwKSk7CisJCWlmIChpIDwgQVJSQVlfU0laRSh1ZGMtPnB4YV9lcCkpIHsKKwkJCWVwID0gJnVkYy0+cHhhX2VwW2ldOworCQkJZXAtPnN0YXRzLmlycXMrKzsKKwkJCWhhbmRsZV9lcChlcCk7CisJCX0KIAl9CiAKIAlmb3IgKGkgPSAxNjsgdWRjaXNyMSAhPSAwICYmIGkgPCAyNDsgdWRjaXNyMSA+Pj0gMiwgaSsrKSB7CkBAIC0yMjI4LDkgKzIyNzYsMTIgQEAKIAkJaWYgKCEodWRjaXNyMSAmIFVEQ0lTUl9JTlRfTUFTSykpCiAJCQljb250aW51ZTsKIAotCQllcCA9ICZ1ZGMtPnB4YV9lcFtpXTsKLQkJZXAtPnN0YXRzLmlycXMrKzsKLQkJaGFuZGxlX2VwKGVwKTsKKwkJV0FSTl9PTihpID49IEFSUkFZX1NJWkUodWRjLT5weGFfZXApKTsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKHVkYy0+cHhhX2VwKSkgeworCQkJZXAgPSAmdWRjLT5weGFfZXBbaV07CisJCQllcC0+c3RhdHMuaXJxcysrOworCQkJaGFuZGxlX2VwKGVwKTsKKwkJfQogCX0KIAogfQpAQCAtMjQzOSw3ICsyNDkwLDcgQEAKIAl9CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwotCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJdWRjLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CiAJaWYgKCF1ZGMtPnJlZ3MpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBVREMgSS9PIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyX21hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCmluZGV4IGUyNTIyNWUuLmZmNjFlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaApAQCAtMzE4LDYgKzMxOCwxMSBAQAogICogQHF1ZXVlOiByZXF1ZXN0cyBxdWV1ZQogICogQGxvY2s6IGxvY2sgdG8gcHhhX2VwIGRhdGEgKHF1ZXVlcyBhbmQgc3RhdHMpCiAgKiBAZW5hYmxlZDogdHJ1ZSB3aGVuIGVuZHBvaW50IGVuYWJsZWQgKG5vdCBzdG9wcGVkIGJ5IGdhZGdldCBsYXllcikKKyAqIEBpbl9oYW5kbGVfZXA6IG51bWJlciBvZiByZWN1cnNpb25zIG9mIGhhbmRsZV9lcCgpIGZ1bmN0aW9uCisgKiAJUHJldmVudHMgZGVhZGxvY2tzIG9yIGluZmluaXRlIHJlY3Vyc2lvbnMgb2YgdHlwZXMgOgorICoJICBpcnEtPmhhbmRsZV9lcCgpLT5yZXFfZG9uZSgpLT5yZXEuY29tcGxldGUoKS0+cHhhX2VwX3F1ZXVlKCktPmhhbmRsZV9lcCgpCisgKiAgICAgIG9yCisgKiAgICAgICAgcHhhX2VwX3F1ZXVlKCktPmhhbmRsZV9lcCgpLT5yZXFfZG9uZSgpLT5yZXEuY29tcGxldGUoKS0+cHhhX2VwX3F1ZXVlKCkKICAqIEBpZHg6IGVuZHBvaW50IGluZGV4ICgxID0+IGVwQSwgMiA9PiBlcEIsIC4uLiwgMjQgPT4gZXBYKQogICogQG5hbWU6IGVuZHBvaW50IG5hbWUgKGZvciB0cmFjZS9kZWJ1ZyBwdXJwb3NlKQogICogQGRpcl9pbjogMSBpZiBJTiBlbmRwb2ludCwgMCBpZiBPVVQgZW5kcG9pbnQKQEAgLTM0Niw2ICszNTEsNyBAQAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBQcm90ZWN0cyB0aGlzIHN0cnVjdHVyZSAqLwogCQkJCQkJLyogKHF1ZXVlcywgc3RhdHMpICovCiAJdW5zaWduZWQJCWVuYWJsZWQ6MTsKKwl1bnNpZ25lZAkJaW5faGFuZGxlX2VwOjE7CiAKIAl1bnNpZ25lZAkJaWR4OjU7CiAJY2hhcgkJCSpuYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IDVmYzgwYTEuLjdlNWJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTMxNyw3ICszMTcsOCBAQAogICoKICAqIEFsbG9jYXRlIGEgbmV3IFVTQiByZXF1ZXN0IHN0cnVjdHVyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludAogICovCi1zdHJ1Y3QgdXNiX3JlcXVlc3QgKnMzY19oc290Z19lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLCBnZnBfdCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnMzY19oc290Z19lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHMzY19oc290Z19yZXEgKnJlcTsKIApAQCAtMzczLDcgKzM3NCw3IEBACiAJCXJlcS0+ZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKIAkJaHNfcmVxLT5tYXBwZWQgPSAwOwogCX0gZWxzZSB7Ci0JCWRtYV9zeW5jX3NpbmdsZShoc290Zy0+ZGV2LCByZXEtPmRtYSwgcmVxLT5sZW5ndGgsIGRpcik7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhzb3RnLT5kZXYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCwgZGlyKTsKIAl9CiB9CiAKQEAgLTc1NSw3ICs3NTYsNyBAQAogCQloc19yZXEtPm1hcHBlZCA9IDE7CiAJCXJlcS0+ZG1hID0gZG1hOwogCX0gZWxzZSB7Ci0JCWRtYV9zeW5jX3NpbmdsZShoc290Zy0+ZGV2LCByZXEtPmRtYSwgcmVxLT5sZW5ndGgsIGRpcik7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhzb3RnLT5kZXYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCwgZGlyKTsKIAkJaHNfcmVxLT5tYXBwZWQgPSAwOwogCX0KIApAQCAtMTQ2MCw3ICsxNDYxLDcgQEAKICAqIGFzIHRoZSBhY3R1YWwgZGF0YSBzaG91bGQgYmUgc2VudCB0byB0aGUgbWVtb3J5IGRpcmVjdGx5IGFuZCB3ZSB0dXJuCiAgKiBvbiB0aGUgY29tcGxldGlvbiBpbnRlcnJ1cHRzIHRvIGdldCBub3RpZmljYXRpb25zIG9mIHRyYW5zZmVyIGNvbXBsZXRpb24uCiAgKi8KLXZvaWQgczNjX2hzb3RnX2hhbmRsZV9yeChzdHJ1Y3QgczNjX2hzb3RnICpoc290ZykKK3N0YXRpYyB2b2lkIHMzY19oc290Z19oYW5kbGVfcngoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7CiAJdTMyIGdyeHN0c3IgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhTVFNQKTsKIAl1MzIgZXBudW0sIHN0YXR1cywgc2l6ZTsKQEAgLTMwOTQsNyArMzA5NSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdHJ1Y3QgczNjX2hzb3RnX3BsYXQgczNjX2hzb3RnX2RlZmF1bHRfcGRhdGE7CitzdGF0aWMgc3RydWN0IHMzY19oc290Z19wbGF0IHMzY19oc290Z19kZWZhdWx0X3BkYXRhOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfaHNvdGdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCmluZGV4IDJmYzAyYmQuLjg0Y2ExOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtNzQ2LDYgKzc0NiwxMCBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogfTsKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBnYWRnZXRfdHlwZSA9IHsKKwkubmFtZQk9ICJnYWRnZXQiLAorfTsKKwogLyoqCiAgKiBnZXRoZXJfc2V0dXAgLSBpbml0aWFsaXplIG9uZSBldGhlcm5ldC1vdmVyLXVzYiBsaW5rCiAgKiBAZzogZ2FkZ2V0IHRvIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBsaW5rcwpAQCAtODA4LDYgKzgxMiw3IEBACiAKIAlkZXYtPmdhZGdldCA9IGc7CiAJU0VUX05FVERFVl9ERVYobmV0LCAmZy0+ZGV2KTsKKwlTRVRfTkVUREVWX0RFVlRZUEUobmV0LCAmZ2FkZ2V0X3R5cGUpOwogCiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5oCmluZGV4IGZkNTVmNDUuLjNjOGMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaApAQCAtOTMsMTMgKzkzLDYgQEAKIAlpZiAoIWdhZGdldF9zdXBwb3J0c19hbHRzZXR0aW5ncyhnYWRnZXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBTQTExMDAgY2FuIGRvIEVDTSwgKndpdGhvdXQqIHN0YXR1cyBlbmRwb2ludCAuLi4gYnV0IHdlJ2xsCi0JICogb25seSB1c2UgaXQgaW4gbm9uLUVDTSBtb2RlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCSAqIChhbmQgc2luY2Ugd2UgY3VycmVudGx5IHJlcXVpcmUgYSBzdGF0dXMgZW5kcG9pbnQpCi0JICovCi0JaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJLyogRXZlcnl0aGluZyBlbHNlIGlzICpwcmVzdW1hYmx5KiBmaW5lIC4uLiBidXQgdGhpcyBpcyBhIGJpdAogCSAqIGNoYW5jeSwgc28gYmUgKipDRVJUQUlOKiogdGhlcmUgYXJlIG5vIGhhcmR3YXJlIGlzc3VlcyB3aXRoCiAJICogeW91ciBjb250cm9sbGVyLiAgQWRkIGl0IGFib3ZlIGlmIGl0IGNhbid0IGhhbmRsZSBDREMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCAyZDc3MjQwLi5mYWM4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTI5NywxMiArMjk3LDEwIEBACiAJICovCiAJaWYgKGxvb3BkZWZhdWx0KSB7CiAJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwotCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKKwkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9IGVsc2UgewogCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwotCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CisJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCX0KIAogCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IDI2NzhhMTYuLjhkM2RmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTM5OSwzICszOTksMTQgQEAKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgImh3YS1oYyIuCisKK2NvbmZpZyBVU0JfSU1YMjFfSENECisgICAgICAgdHJpc3RhdGUgImlNWDIxIEhDRCBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gVVNCICYmIEFSTSAmJiBNQUNIX01YMjEKKyAgICAgICBoZWxwCisgICAgICAgICBUaGlzIGRyaXZlciBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIFVTQiBob3N0IGluIHRoZQorICAgICAgICAgaU1YMjEgcHJvY2Vzc29yLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAiaW14MjEtaGNkIi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggZjU4YjI0OS4uNGUwYzY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0zMiwzICszMiw1IEBACiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCkJKz0gcjhhNjY1OTctaGNkLm8KIG9iai0kKENPTkZJR19VU0JfSVNQMTc2MF9IQ0QpCSs9IGlzcDE3NjAubwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBod2EtaGMubworb2JqLSQoQ09ORklHX1VTQl9JTVgyMV9IQ0QpCSs9IGlteDIxLWhjZC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKaW5kZXggODdjMWI3Yy4uNTFiZDBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQlnb3RvIGZhaWxfcmVxdWVzdF9yZXNvdXJjZTsKIAl9CiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKLQloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAogCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggZGJmYjQ4Mi4uZTNhNzRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMTIxLDYgKzEyMSw3IEBACiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKQEAgLTE0NCw4ICsxNDUsOSBAQAogCWlmICghaGNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWhjZC0+cnNyY19zdGFydCA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewogCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCmluZGV4IDk5MTE3NDkuLjBlMjZhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDggICAgICBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE3LDE3ICsxOCwyMCBAQAogICoKICAqIFBvcnRlZCB0byA4MzR4IGJ5IFJhbmR5IFZpbnNvbiA8cnZpbnNvbkBtdmlzdGEuY29tPiB1c2luZyBjb2RlIHByb3ZpZGVkCiAgKiBieSBIdW50ZXIgV3UuCisgKiBQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQgYnkgRGF2ZSBMaXUgPGRhdmVsaXVAZnJlZXNjYWxlLmNvbT4sCisgKiBKZXJyeSBIdWFuZyA8Q2hhbmctTWluZy5IdWFuZ0BmcmVlc2NhbGUuY29tPiBhbmQKKyAqIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPi4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgImVoY2ktZnNsLmgiCiAKLS8qIEZJWE1FOiBQb3dlciBNYW5hZ2VtZW50IGlzIHVuLXBvcnRlZCBzbyB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0ICovCi0jdW5kZWYgQ09ORklHX1BNCi0KLQogLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLwogLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KIApAQCAtNDAsOCArNDQsOCBAQAogICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLgogICoKICAqLwotaW50IHVzYl9oY2RfZnNsX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiX2hjZF9mc2xfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwpAQCAtMTQ3LDcgKzE1MSw4IEBACiAgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfZnNsX3Byb2JlKCkuCiAgKgogICovCi12b2lkIHVzYl9oY2RfZnNsX3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIHZvaWQgdXNiX2hjZF9mc2xfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKQEAgLTI4NCwxMCArMjg5LDgxIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RydWN0IGVoY2lfZnNsIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJZWhjaTsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIFNhdmVkIFVTQiBQSFkgc2V0dGluZ3MsIG5lZWQgdG8gcmVzdG9yZSBhZnRlciBkZWVwIHNsZWVwLiAqLworCXUzMiB1c2JfY3RybDsKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgc3RydWN0IGVoY2lfZnNsICpoY2RfdG9fZWhjaV9mc2woc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihlaGNpLCBzdHJ1Y3QgZWhjaV9mc2wsIGVoY2kpOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGVoY2lfZnNsICplaGNpX2ZzbCA9IGhjZF90b19laGNpX2ZzbChoY2QpOworCXZvaWQgX19pb21lbSAqbm9uX2VoY2kgPSBoY2QtPnJlZ3M7CisKKwlpZiAoIWZzbF9kZWVwX3NsZWVwKCkpCisJCXJldHVybiAwOworCisJZWhjaV9mc2wtPnVzYl9jdHJsID0gaW5fYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0NUUkwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZWhjaV9mc2wgKmVoY2lfZnNsID0gaGNkX3RvX2VoY2lfZnNsKGhjZCk7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwl2b2lkIF9faW9tZW0gKm5vbl9laGNpID0gaGNkLT5yZWdzOworCisJaWYgKCFmc2xfZGVlcF9zbGVlcCgpKQorCQlyZXR1cm4gMDsKKworCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisKKwkvKiBSZXN0b3JlIFVTQiBQSFkgc2V0dGluZ3MgYW5kIGVuYWJsZSB0aGUgY29udHJvbGxlci4gKi8KKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0NUUkwsIGVoY2lfZnNsLT51c2JfY3RybCk7CisKKwllaGNpX3Jlc2V0KGVoY2kpOworCWVoY2lfZnNsX3JlaW5pdChlaGNpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihoY2QtPnNlbGYucm9vdF9odWIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZWhjaV9mc2xfcG1fb3BzID0geworCS5zdXNwZW5kID0gZWhjaV9mc2xfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGVoY2lfZnNsX2Rydl9yZXN1bWUsCisJLnJlc3RvcmUgPSBlaGNpX2ZzbF9kcnZfcmVzdG9yZSwKK307CisKKyNkZWZpbmUgRUhDSV9GU0xfUE1fT1BTCQkoJmVoY2lfZnNsX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIEVIQ0lfRlNMX1BNX09QUwkJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX2ZzbF9oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0gaGNkX25hbWUsCiAJLnByb2R1Y3RfZGVzYyA9ICJGcmVlc2NhbGUgT24tQ2hpcCBFSENJIEhvc3QgQ29udHJvbGxlciIsCi0JLmhjZF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKwkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9mc2wpLAogCiAJLyoKIAkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKQEAgLTM1NCw2ICs0MzAsNyBAQAogCS5yZW1vdmUgPSBlaGNpX2ZzbF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCiAJLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSAiZnNsLWVoY2kiLAorCQkubmFtZSA9ICJmc2wtZWhjaSIsCisJCS5wbSA9IEVIQ0lfRlNMX1BNX09QUywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCAxZWMzODU3Zi4uZDhkNmQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMTExOCw3ICsxMTE4LDcgQEAKICNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQllaGNpX2hjZF9hdTF4eHhfZHJpdmVyCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKICNpbmNsdWRlICJlaGNpLW9tYXAuYyIKICNkZWZpbmUgICAgICAgIFBMQVRGT1JNX0RSSVZFUiAgICAgICAgIGVoY2lfaGNkX29tYXBfZHJpdmVyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwppbmRleCAzNWM1NmY0Li4yM2NkOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCkBAIC0xNjIsNiArMTYyLDE3IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCisJLyogY2FsbCBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0IGZ1bmN0aW9uICovCisJaWYgKHBkYXRhLT5pbml0KSB7CisJCXJldCA9IHBkYXRhLT5pbml0KHBkZXYpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgInBsYXRmb3JtIGluaXQgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZXJyX2luaXQ7CisJCX0KKwkJLyogcGxhdGZvcm1zIG5lZWQgc29tZSB0aW1lIHRvIHNldHRsZSBjaGFuZ2VkIElPIHNldHRpbmdzICovCisJCW1kZWxheSgxMCk7CisJfQorCiAJLyogZW5hYmxlIGNsb2NrcyAqLwogCXByaXYtPnVzYmNsayA9IGNsa19nZXQoZGV2LCAidXNiIik7CiAJaWYgKElTX0VSUihwcml2LT51c2JjbGspKSB7CkBAIC0xOTIsMTggKzIwMyw2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2luaXQ7CiAKLQkvKiBjYWxsIHBsYXRmb3JtIHNwZWNpZmljIGluaXQgZnVuY3Rpb24gKi8KLQlpZiAocGRhdGEtPmluaXQpIHsKLQkJcmV0ID0gcGRhdGEtPmluaXQocGRldik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAicGxhdGZvcm0gaW5pdCBmYWlsZWRcbiIpOwotCQkJZ290byBlcnJfaW5pdDsKLQkJfQotCX0KLQotCS8qIG1vc3QgcGxhdGZvcm1zIG5lZWQgc29tZSB0aW1lIHRvIHNldHRsZSBjaGFuZ2VkIElPIHNldHRpbmdzICovCi0JbWRlbGF5KDEwKTsKLQogCS8qIEluaXRpYWxpemUgdGhlIHRyYW5zY2VpdmVyICovCiAJaWYgKHBkYXRhLT5vdGcpIHsKIAkJcGRhdGEtPm90Zy0+aW9fcHJpdiA9IGhjZC0+cmVncyArIFVMUElfVklFV1BPUlRfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKaW5kZXggNzRkMDdmNC4uZjAyODJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCkBAIC0yNiwxMCArMjYsOSBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICoKLSAqIFRPRE8gKGxhc3QgdXBkYXRlZCBGZWIgMjNyZCwgMjAwOSk6CisgKiBUT0RPIChsYXN0IHVwZGF0ZWQgRmViIDEyLCAyMDEwKToKICAqCS0gYWRkIGtlcm5lbC1kb2MKICAqCS0gZW5hYmxlIEFVVE9JRExFCi0gKgktIG1vdmUgRFBMTDUgcHJvZ3JhbW1pbmcgdG8gY2xvY2sgZncKICAqCS0gYWRkIHN1c3BlbmQvcmVzdW1lCiAgKgktIG1vdmUgd29ya2Fyb3VuZHMgdG8gYm9hcmQtZmlsZXMKICAqLwpAQCAtMzcsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogCiAvKgpAQCAtMTc4LDYgKzE3OCwxMSBAQAogCXZvaWQgX19pb21lbQkJKnVoaF9iYXNlOwogCXZvaWQgX19pb21lbQkJKnRsbF9iYXNlOwogCXZvaWQgX19pb21lbQkJKmVoY2lfYmFzZTsKKworCS8qIFJlZ3VsYXRvcnMgZm9yIFVTQiBQSFlzLgorCSAqIEVhY2ggUEhZIGNhbiBoYXZlIGEgc2VwZXJhdGUgcmVndWxhdG9yLgorCSAqLworCXN0cnVjdCByZWd1bGF0b3IgICAgICAgICpyZWd1bGF0b3JbT01BUDNfSFNfVVNCX1BPUlRTXTsKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01NDYsNiArNTUxLDggQEAKIAogCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWludCByZXQgPSAtRU5PREVWOworCWludCBpOworCWNoYXIgc3VwcGx5WzddOwogCiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtX2RhdGFcbiIpOwpAQCAtNjEzLDYgKzYyMCwyMSBAQAogCQlnb3RvIGVycl90bGxfaW9yZW1hcDsKIAl9CiAKKwkvKiBnZXQgZWhjaSByZWd1bGF0b3IgYW5kIGVuYWJsZSAqLworCWZvciAoaSA9IDAgOyBpIDwgT01BUDNfSFNfVVNCX1BPUlRTIDsgaSsrKSB7CisJCWlmIChvbWFwLT5wb3J0X21vZGVbaV0gIT0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSkgeworCQkJb21hcC0+cmVndWxhdG9yW2ldID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNucHJpbnRmKHN1cHBseSwgc2l6ZW9mKHN1cHBseSksICJoc3VzYiVkIiwgaSk7CisJCW9tYXAtPnJlZ3VsYXRvcltpXSA9IHJlZ3VsYXRvcl9nZXQob21hcC0+ZGV2LCBzdXBwbHkpOworCQlpZiAoSVNfRVJSKG9tYXAtPnJlZ3VsYXRvcltpXSkpCisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkiZmFpbGVkIHRvIGdldCBlaGNpIHBvcnQlZCByZWd1bGF0b3JcbiIsIGkpOworCQllbHNlCisJCQlyZWd1bGF0b3JfZW5hYmxlKG9tYXAtPnJlZ3VsYXRvcltpXSk7CisJfQorCiAJcmV0ID0gb21hcF9zdGFydF9laGMob21hcCwgaGNkKTsKIAlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBlaGNpXG4iKTsKQEAgLTYyMiwxMyArNjQ0LDEyIEBACiAJb21hcC0+ZWhjaS0+cmVncyA9IGhjZC0+cmVncwogCQkrIEhDX0xFTkdUSChyZWFkbCgmb21hcC0+ZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCisJZGJnX2hjc19wYXJhbXMob21hcC0+ZWhjaSwgInJlc2V0Iik7CisJZGJnX2hjY19wYXJhbXMob21hcC0+ZWhjaSwgInJlc2V0Iik7CisKIAkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KIAlvbWFwLT5laGNpLT5oY3NfcGFyYW1zID0gcmVhZGwoJm9tYXAtPmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCi0JLyogU0VUIDEgbWljcm8tZnJhbWUgSW50ZXJydXB0IGludGVydmFsICovCi0Jd3JpdGVsKHJlYWRsKCZvbWFwLT5laGNpLT5yZWdzLT5jb21tYW5kKSB8ICgxIDw8IDE2KSwKLQkJCSZvbWFwLT5laGNpLT5yZWdzLT5jb21tYW5kKTsKLQogCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CkBAIC02NDEsNiArNjYyLDEyIEBACiAJb21hcF9zdG9wX2VoYyhvbWFwLCBoY2QpOwogCiBlcnJfc3RhcnQ6CisJZm9yIChpID0gMCA7IGkgPCBPTUFQM19IU19VU0JfUE9SVFMgOyBpKyspIHsKKwkJaWYgKG9tYXAtPnJlZ3VsYXRvcltpXSkgeworCQkJcmVndWxhdG9yX2Rpc2FibGUob21hcC0+cmVndWxhdG9yW2ldKTsKKwkJCXJlZ3VsYXRvcl9wdXQob21hcC0+cmVndWxhdG9yW2ldKTsKKwkJfQorCX0KIAlpb3VubWFwKG9tYXAtPnRsbF9iYXNlKTsKIAogZXJyX3RsbF9pb3JlbWFwOgpAQCAtNjc0LDEzICs3MDEsMjEgQEAKIHsKIAlzdHJ1Y3QgZWhjaV9oY2Rfb21hcCAqb21hcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBlaGNpX3RvX2hjZChvbWFwLT5laGNpKTsKKwlpbnQgaTsKIAogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJb21hcF9zdG9wX2VoYyhvbWFwLCBoY2QpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlmb3IgKGkgPSAwIDsgaSA8IE9NQVAzX0hTX1VTQl9QT1JUUyA7IGkrKykgeworCQlpZiAob21hcC0+cmVndWxhdG9yW2ldKSB7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShvbWFwLT5yZWd1bGF0b3JbaV0pOworCQkJcmVndWxhdG9yX3B1dChvbWFwLT5yZWd1bGF0b3JbaV0pOworCQl9CisJfQogCWlvdW5tYXAob21hcC0+dGxsX2Jhc2UpOwogCWlvdW5tYXAob21hcC0+dWhoX2Jhc2UpOwogCXVzYl9wdXRfaGNkKGhjZCk7CisJa2ZyZWUob21hcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKaW5kZXggMWQyODNlMS4uMGY4N2RjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKQEAgLTIyMiwxNCArMjIyLDE0IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQllaGNpX29yaW9uX2hjX2RyaXZlci5kZXNjcmlwdGlvbikpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnIxOwogCX0KIAotCXJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKHJlZ3MgPT0gTlVMTCkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBtYXBwaW5nIG1lbW9yeVxuIik7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAl9CiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaGNkLT5yZWdzID0gcmVnczsKIAogCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiBlcnIzOgogCWlvdW5tYXAocmVncyk7CiBlcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGVycjE6CiAJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCAlcyBmYWlsLCAlZFxuIiwKIAkJZGV2X25hbWUoJnBkZXYtPmRldiksIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLW9mLmMKaW5kZXggMzZmOTZkYS4uOGRmMzNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBwYy1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtb2YuYwpAQCAtMTM0LDIxICsxMzQsMjEgQEAKIAloY2QtPnJzcmNfbGVuID0gcmVzLmVuZCAtIHJlcy5zdGFydCArIDE7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcnYgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX3JtcjsKIAl9CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgMCk7CiAJaWYgKGlycSA9PSBOT19JUlEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAogCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQpAQCAtMTYxLDkgKzE2MSw5IEBACiAJCQllaGNpLT5vaGNpX2hjY3RybF9yZWcgPSBpb3JlbWFwKHJlcy5zdGFydCArCiAJCQkJCU9IQ0lfSENDVFJMX09GRlNFVCwgT0hDSV9IQ0NUUkxfTEVOKTsKIAkJZWxzZQotCQkJcHJfZGVidWcoX19GSUxFX18gIjogbm8gb2hjaSBvZmZzZXQgaW4gZmR0XG4iKTsKKwkJCXByX2RlYnVnKCIlczogbm8gb2hjaSBvZmZzZXQgaW4gZmR0XG4iLCBfX0ZJTEVfXyk7CiAJCWlmICghZWhjaS0+b2hjaV9oY2N0cmxfcmVnKSB7Ci0JCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBpb3JlbWFwIGZvciBvaGNpIGhjY3RybCBmYWlsZWRcbiIpOworCQkJcHJfZGVidWcoIiVzOiBpb3JlbWFwIGZvciBvaGNpIGhjY3RybCBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJfSBlbHNlIHsKIAkJCWVoY2ktPmhhc19hbWNjX3VzYjIzID0gMTsKIAkJfQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCQkJZWxzZQogCQkJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLnN0YXJ0LCAweDQpOwogCQkJZWxzZQotCQkJCXByX2RlYnVnKF9fRklMRV9fICI6IG5vIG9oY2kgb2Zmc2V0IGluIGZkdFxuIik7CisJCQkJcHJfZGVidWcoIiVzOiBubyBvaGNpIG9mZnNldCBpbiBmZHRcbiIsIF9fRklMRV9fKTsKIAkJCW9mX25vZGVfcHV0KG5wKTsKIAkJfQogCkBAIC0yNjQsNyArMjY0LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBlaGNpX2hjZF9wcGNfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVoY2lfaGNkX3BwY19vZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAidXNiLWVoY2kiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDFlMzkxZTYuLjM5MzQwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC01MTAsNiArNTEwLDggQEAKIAllaGNpX3dyaXRlbChlaGNpLCBjbWQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKIAkvKiBwb3N0ZWQgd3JpdGUgLi4uICovCiAKKwlmcmVlX2NhY2hlZF9pdGRfbGlzdChlaGNpKTsKKwogCWVoY2ktPm5leHRfdWZyYW1lID0gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzIyLDkgKzIzMjQsMTMgQEAKIAkJCQkgKiBObyBuZWVkIHRvIGNoZWNrIGZvciBhY3Rpdml0eSB1bmxlc3MgdGhlCiAJCQkJICogZnJhbWUgaXMgY3VycmVudC4KIAkJCQkgKi8KLQkJCQlpZiAoZnJhbWUgPT0gY2xvY2tfZnJhbWUgJiYgbGl2ZSAmJgotCQkJCQkJKHEuc2l0ZC0+aHdfcmVzdWx0cyAmCi0JCQkJCQkJU0lURF9BQ1RJVkUoZWhjaSkpKSB7CisJCQkJaWYgKCgoZnJhbWUgPT0gY2xvY2tfZnJhbWUpIHx8CisJCQkJICAgICAoKChmcmFtZSArIDEpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSkKKwkJCQkgICAgICA9PSBjbG9ja19mcmFtZSkpCisJCQkJICAgICYmIGxpdmUKKwkJCQkgICAgJiYgKHEuc2l0ZC0+aHdfcmVzdWx0cyAmCisJCQkJCVNJVERfQUNUSVZFKGVoY2kpKSkgeworCiAJCQkJCWluY29tcGxldGUgPSB0cnVlOwogCQkJCQlxX3AgPSAmcS5zaXRkLT5zaXRkX25leHQ7CiAJCQkJCWh3X3AgPSAmcS5zaXRkLT5od19uZXh0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCmluZGV4IGE1ODYxNTMxLi5mNjAzYmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCkBAIC0xNzcsMjEgKzE3NywyMSBAQAogCWhjZC0+cnNyY19sZW4gPSByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBlcnJfcm1yOwogCX0KIAogCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCAwKTsKIAlpZiAoaXJxID09IE5PX0lSUSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogaXJxX29mX3BhcnNlX2FuZF9tYXAgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXJxX29mX3BhcnNlX2FuZF9tYXAgZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CiAJCXJ2ID0gLUVCVVNZOwogCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CiAJCXJ2ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CkBAIC0yODEsNyArMjgxLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBlaGNpX2hjZF94aWxpbnhfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVoY2lfaGNkX3hpbGlueF9vZl9tYXRjaFtdID0gewogCQl7LmNvbXBhdGlibGUgPSAieGxueCx4cHMtdXNiLWhvc3QtMS4wMC5hIix9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwppbmRleCA3OGU3YzNjLi41ZGNmYjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBVUkIgKi8KLQl1cmJfcHJpdi0+dGRzID0ga3phbGxvYyhzaXplICogc2l6ZW9mKHN0cnVjdCB0ZCksIG1lbV9mbGFncyk7CisJdXJiX3ByaXYtPnRkcyA9IGtjYWxsb2Moc2l6ZSwgc2l6ZW9mKCp1cmJfcHJpdi0+dGRzKSwgbWVtX2ZsYWdzKTsKIAlpZiAoIXVyYl9wcml2LT50ZHMpIHsKIAkJa2ZyZWUodXJiX3ByaXYpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTgwNSw3ICs4MDUsNyBAQAogCXJldHVybiBmaGNpX3JlbW92ZSgmb2ZkZXYtPmRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZoY2lfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZoY2lfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLXFlLXVzYiIsIH0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyZjY0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWRiZy5jCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IGJ5IE1hcnRpbiBGdXp6ZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBpbXgyMS1oY2QuYyAqLworCisjaWZuZGVmIERFQlVHCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMoc3RydWN0IGlteDIxICppbXgyMSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzKHN0cnVjdCBpbXgyMSAqaW14MjEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3VyYl9zdWJtaXR0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3VyYl9jb21wbGV0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiLAorCWludCBzdGF0dXMpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdXJiX3VubGlua2VkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z191cmJfcXVldWVkX2Zvcl9ldGQoc3RydWN0IGlteDIxICppbXgyMSwKKwlzdHJ1Y3QgdXJiICp1cmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdXJiX3F1ZXVlZF9mb3JfZG1lbShzdHJ1Y3QgaW14MjEgKmlteDIxLAorCXN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19ldGRfYWxsb2NhdGVkKHN0cnVjdCBpbXgyMSAqaW14MjEpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZXRkX2ZyZWVkKHN0cnVjdCBpbXgyMSAqaW14MjEpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1lbV9hbGxvY2F0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgaW50IHNpemUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1lbV9mcmVlZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgc2l6ZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19pc29jX3N1Ym1pdHRlZChzdHJ1Y3QgaW14MjEgKmlteDIxLAorCWludCBmcmFtZSwgc3RydWN0IHRkICp0ZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19pc29jX2NvbXBsZXRlZChzdHJ1Y3QgaW14MjEgKmlteDIxLAorCWludCBmcmFtZSwgc3RydWN0IHRkICp0ZCwgaW50IGNjLCBpbnQgbGVuKSB7fQorCisjZWxzZQorCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpkaXJfbGFiZWxzW10gPSB7CisJIlREIDAiLAorCSJPVVQiLAorCSJJTiIsCisJIlREIDEiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3BlZWRfbGFiZWxzW10gPSB7CisJIkZ1bGwiLAorCSJMb3ciCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X2xhYmVsc1tdID0geworCSJDb250cm9sIiwKKwkiSVNPIiwKKwkiQnVsayIsCisJIkludGVycnVwdCIKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlYnVnX3N0YXRzICpzdGF0c19mb3JfdXJiKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJc3RydWN0IHVyYiAqdXJiKQoreworCXJldHVybiB1c2JfcGlwZWlzb2ModXJiLT5waXBlKSA/CisJCSZpbXgyMS0+aXNvY19zdGF0cyA6ICZpbXgyMS0+bm9uaXNvY19zdGF0czsKK30KKworc3RhdGljIHZvaWQgZGVidWdfdXJiX3N1Ym1pdHRlZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RhdHNfZm9yX3VyYihpbXgyMSwgdXJiKS0+c3VibWl0dGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3VyYl9jb21wbGV0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3QpCit7CisJaWYgKHN0KQorCQlzdGF0c19mb3JfdXJiKGlteDIxLCB1cmIpLT5jb21wbGV0ZWRfZmFpbGVkKys7CisJZWxzZQorCQlzdGF0c19mb3JfdXJiKGlteDIxLCB1cmIpLT5jb21wbGV0ZWRfb2srKzsKK30KKworc3RhdGljIHZvaWQgZGVidWdfdXJiX3VubGlua2VkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdGF0c19mb3JfdXJiKGlteDIxLCB1cmIpLT51bmxpbmtlZCsrOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191cmJfcXVldWVkX2Zvcl9ldGQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0YXRzX2Zvcl91cmIoaW14MjEsIHVyYiktPnF1ZXVlX2V0ZCsrOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191cmJfcXVldWVkX2Zvcl9kbWVtKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdGF0c19mb3JfdXJiKGlteDIxLCB1cmIpLT5xdWV1ZV9kbWVtKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19ldGRfYWxsb2NhdGVkKHN0cnVjdCBpbXgyMSAqaW14MjEpCit7CisJaW14MjEtPmV0ZF91c2FnZS5tYXhpbXVtID0gbWF4KAorCQkJKysoaW14MjEtPmV0ZF91c2FnZS52YWx1ZSksCisJCQlpbXgyMS0+ZXRkX3VzYWdlLm1heGltdW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZXRkX2ZyZWVkKHN0cnVjdCBpbXgyMSAqaW14MjEpCit7CisJaW14MjEtPmV0ZF91c2FnZS52YWx1ZS0tOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1lbV9hbGxvY2F0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgaW50IHNpemUpCit7CisJaW14MjEtPmRtZW1fdXNhZ2UudmFsdWUgKz0gc2l6ZTsKKwlpbXgyMS0+ZG1lbV91c2FnZS5tYXhpbXVtID0gbWF4KAorCQkJaW14MjEtPmRtZW1fdXNhZ2UudmFsdWUsCisJCQlpbXgyMS0+ZG1lbV91c2FnZS5tYXhpbXVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtZW1fZnJlZWQoc3RydWN0IGlteDIxICppbXgyMSwgaW50IHNpemUpCit7CisJaW14MjEtPmRtZW1fdXNhZ2UudmFsdWUgLT0gc2l6ZTsKK30KKworCitzdGF0aWMgdm9pZCBkZWJ1Z19pc29jX3N1Ym1pdHRlZChzdHJ1Y3QgaW14MjEgKmlteDIxLAorCWludCBmcmFtZSwgc3RydWN0IHRkICp0ZCkKK3sKKwlzdHJ1Y3QgZGVidWdfaXNvY190cmFjZSAqdHJhY2UgPSAmaW14MjEtPmlzb2NfdHJhY2VbCisJCWlteDIxLT5pc29jX3RyYWNlX2luZGV4KytdOworCisJaW14MjEtPmlzb2NfdHJhY2VfaW5kZXggJT0gQVJSQVlfU0laRShpbXgyMS0+aXNvY190cmFjZSk7CisJdHJhY2UtPnNjaGVkdWxlX2ZyYW1lID0gdGQtPmZyYW1lOworCXRyYWNlLT5zdWJtaXRfZnJhbWUgPSBmcmFtZTsKKwl0cmFjZS0+cmVxdWVzdF9sZW4gPSB0ZC0+bGVuOworCXRyYWNlLT50ZCA9IHRkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaXNvY19jb21wbGV0ZWQoc3RydWN0IGlteDIxICppbXgyMSwKKwlpbnQgZnJhbWUsIHN0cnVjdCB0ZCAqdGQsIGludCBjYywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGVidWdfaXNvY190cmFjZSAqdHJhY2UsICp0cmFjZV9mYWlsZWQ7CisJaW50IGk7CisJaW50IGZvdW5kID0gMDsKKworCXRyYWNlID0gaW14MjEtPmlzb2NfdHJhY2U7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW14MjEtPmlzb2NfdHJhY2UpOyBpKyssIHRyYWNlKyspIHsKKwkJaWYgKHRyYWNlLT50ZCA9PSB0ZCkgeworCQkJdHJhY2UtPmRvbmVfZnJhbWUgPSBmcmFtZTsKKwkJCXRyYWNlLT5kb25lX2xlbiA9IGxlbjsKKwkJCXRyYWNlLT5jYyA9IGNjOworCQkJdHJhY2UtPnRkID0gTlVMTDsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kICYmIGNjKSB7CisJCXRyYWNlX2ZhaWxlZCA9ICZpbXgyMS0+aXNvY190cmFjZV9mYWlsZWRbCisJCQkJCWlteDIxLT5pc29jX3RyYWNlX2luZGV4X2ZhaWxlZCsrXTsKKworCQlpbXgyMS0+aXNvY190cmFjZV9pbmRleF9mYWlsZWQgJT0gQVJSQVlfU0laRSgKKwkJCQkJCWlteDIxLT5pc29jX3RyYWNlX2ZhaWxlZCk7CisJCSp0cmFjZV9mYWlsZWQgPSAqdHJhY2U7CisJfQorfQorCisKK3N0YXRpYyBjaGFyICpmb3JtYXRfZXAoc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKwlpZiAoZXApCisJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgImVwXyUwMnggKHR5cGU6JTAyWCBrYWRkcjolcCkiLAorCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKKwkJCXVzYl9lbmRwb2ludF90eXBlKCZlcC0+ZGVzYyksCisJCQllcCk7CisJZWxzZQorCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICJub25lIik7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGNoYXIgKmZvcm1hdF9ldGRfZHdvcmQwKHUzMiB2YWx1ZSwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKwlzbnByaW50ZihidWYsIGJ1ZnNpemUsCisJCSJhZGRyPSVkIGVwPSVkIGRpcj0lcyBzcGVlZD0lcyBmb3JtYXQ9JXMgaGFsdGVkPSVkIiwKKwkJdmFsdWUgJiAweDdGLAorCQkodmFsdWUgPj4gRFcwX0VORFBOVCkgJiAweDBGLAorCQlkaXJfbGFiZWxzWyh2YWx1ZSA+PiBEVzBfRElSRUNUKSAmIDB4MDNdLAorCQlzcGVlZF9sYWJlbHNbKHZhbHVlID4+IERXMF9TUEVFRCkgJiAweDAxXSwKKwkJZm9ybWF0X2xhYmVsc1sodmFsdWUgPj4gRFcwX0ZPUk1BVCkgJiAweDAzXSwKKwkJKHZhbHVlID4+IERXMF9IQUxURUQpICYgMHgwMSk7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGludCBkZWJ1Z19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IHMtPnByaXZhdGU7CisJaW50IGV0ZHNfYWxsb2NhdGVkID0gMDsKKwlpbnQgZXRkc19zd19idXN5ID0gMDsKKwlpbnQgZXRkc19od19idXN5ID0gMDsKKwlpbnQgZG1lbV9ibG9ja3MgPSAwOworCWludCBxdWV1ZWRfZm9yX2V0ZCA9IDA7CisJaW50IHF1ZXVlZF9mb3JfZG1lbSA9IDA7CisJdW5zaWduZWQgaW50IGRtZW1fYnl0ZXMgPSAwOworCWludCBpOworCXN0cnVjdCBldGRfcHJpdiAqZXRkOworCXUzMiBldGRfZW5hYmxlX21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhICpkbWVtOworCXN0cnVjdCBlcF9wcml2ICplcF9wcml2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlldGRfZW5hYmxlX21hc2sgPSByZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRVRERU5TRVQpOworCWZvciAoaSA9IDAsIGV0ZCA9IGlteDIxLT5ldGQ7IGkgPCBVU0JfTlVNX0VURDsgaSsrLCBldGQrKykgeworCQlpZiAoZXRkLT5hbGxvYykKKwkJCWV0ZHNfYWxsb2NhdGVkKys7CisJCWlmIChldGQtPnVyYikKKwkJCWV0ZHNfc3dfYnVzeSsrOworCQlpZiAoZXRkX2VuYWJsZV9tYXNrICYgKDE8PGkpKQorCQkJZXRkc19od19idXN5Kys7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkbWVtLCAmaW14MjEtPmRtZW1fbGlzdCwgbGlzdCkgeworCQlkbWVtX2J5dGVzICs9IGRtZW0tPnNpemU7CisJCWRtZW1fYmxvY2tzKys7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcF9wcml2LCAmaW14MjEtPnF1ZXVlX2Zvcl9ldGQsIHF1ZXVlKQorCQlxdWV1ZWRfZm9yX2V0ZCsrOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldGQsICZpbXgyMS0+cXVldWVfZm9yX2RtZW0sIHF1ZXVlKQorCQlxdWV1ZWRfZm9yX2RtZW0rKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlzZXFfcHJpbnRmKHMsCisJCSJGcmFtZTogJWRcbiIKKwkJIkVURHMgYWxsb2NhdGVkOiAlZC8lZCAobWF4PSVkKVxuIgorCQkiRVREcyBpbiB1c2Ugc3c6ICVkXG4iCisJCSJFVERzIGluIHVzZSBodzogJWRcbiIKKwkJIkRNRU0gYWxvY2F0ZWQ6ICVkLyVkIChtYXg9JWQpXG4iCisJCSJETUVNIGJsb2NrczogJWRcbiIKKwkJIlF1ZXVlZCB3YWl0aW5nIGZvciBFVEQ6ICVkXG4iCisJCSJRdWV1ZWQgd2FpdGluZyBmb3IgRE1FTTogJWRcbiIsCisJCXJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9GUk1OVUIpICYgMHhGRkZGLAorCQlldGRzX2FsbG9jYXRlZCwgVVNCX05VTV9FVEQsIGlteDIxLT5ldGRfdXNhZ2UubWF4aW11bSwKKwkJZXRkc19zd19idXN5LAorCQlldGRzX2h3X2J1c3ksCisJCWRtZW1fYnl0ZXMsIERNRU1fU0laRSwgaW14MjEtPmRtZW1fdXNhZ2UubWF4aW11bSwKKwkJZG1lbV9ibG9ja3MsCisJCXF1ZXVlZF9mb3JfZXRkLAorCQlxdWV1ZWRfZm9yX2RtZW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfZG1lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhICpkbWVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciBlcF90ZXh0WzQwXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkbWVtLCAmaW14MjEtPmRtZW1fbGlzdCwgbGlzdCkKKwkJc2VxX3ByaW50ZihzLAorCQkJIiUwNFg6IHNpemU9MHglWCAiCisJCQkiZXA9JXNcbiIsCisJCQlkbWVtLT5vZmZzZXQsIGRtZW0tPnNpemUsCisJCQlmb3JtYXRfZXAoZG1lbS0+ZXAsIGVwX3RleHQsIHNpemVvZihlcF90ZXh0KSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlYnVnX2V0ZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZDsKKwljaGFyIGJ1Zls2MF07CisJdTMyIGR3b3JkOworCWludCBpLCBqOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDAsIGV0ZCA9IGlteDIxLT5ldGQ7IGkgPCBVU0JfTlVNX0VURDsgaSsrLCBldGQrKykgeworCQlpbnQgc3RhdGUgPSAtMTsKKwkJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwkJaWYgKGV0ZC0+dXJiKSB7CisJCQl1cmJfcHJpdiA9IGV0ZC0+dXJiLT5oY3ByaXY7CisJCQlpZiAodXJiX3ByaXYpCisJCQkJc3RhdGUgPSB1cmJfcHJpdi0+c3RhdGU7CisJCX0KKworCQlzZXFfcHJpbnRmKHMsCisJCQkiZXRkX251bTogJWRcbiIKKwkJCSJlcDogJXNcbiIKKwkJCSJhbGxvYzogJWRcbiIKKwkJCSJsZW46ICVkXG4iCisJCQkiYnVzeSBzdzogJWRcbiIKKwkJCSJidXN5IGh3OiAlZFxuIgorCQkJInVyYiBzdGF0ZTogJWRcbiIKKwkJCSJjdXJyZW50IHVyYjogJXBcbiIsCisKKwkJCWksCisJCQlmb3JtYXRfZXAoZXRkLT5lcCwgYnVmLCBzaXplb2YoYnVmKSksCisJCQlldGQtPmFsbG9jLAorCQkJZXRkLT5sZW4sCisJCQlldGQtPnVyYiAhPSBOVUxMLAorCQkJKHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9FVERFTlNFVCkgJiAoMSA8PCBpKSkgPiAwLAorCQkJc3RhdGUsCisJCQlldGQtPnVyYik7CisKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJZHdvcmQgPSBldGRfcmVhZGwoaW14MjEsIGksIGopOworCQkJc3dpdGNoIChqKSB7CisJCQljYXNlIDA6CisJCQkJZm9ybWF0X2V0ZF9kd29yZDAoZHdvcmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkJCSJjYz0wWCUwMlgiLCBkd29yZCA+PiBEVzJfQ09NUENPREUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqYnVmID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNlcV9wcmludGYocywKKwkJCQkiZHdvcmQgJWQ6IHN1Ym1pdHRlZD0lMDhYIGN1cj0lMDhYIFslc11cbiIsCisJCQkJaiwKKwkJCQlldGQtPnN1Ym1pdHRlZF9kd29yZHNbal0sCisJCQkJZHdvcmQsCisJCQkJYnVmKTsKKwkJfQorCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfc3RhdGlzdGljc19zaG93X29uZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlYnVnX3N0YXRzICpzdGF0cykKK3sKKwlzZXFfcHJpbnRmKHMsICIlczpcbiIKKwkJInN1Ym1pdHRlZCBVUkJzOiAlbHVcbiIKKwkJImNvbXBsZXRlZCBPSzogJWx1XG4iCisJCSJjb21wbGV0ZWQgZmFpbGVkOiAlbHVcbiIKKwkJInVubGlua2VkOiAlbHVcbiIKKwkJInF1ZXVlZCBmb3IgRVREOiAlbHVcbiIKKwkJInF1ZXVlZCBmb3IgRE1FTTogJWx1XG5cbiIsCisJCW5hbWUsCisJCXN0YXRzLT5zdWJtaXR0ZWQsCisJCXN0YXRzLT5jb21wbGV0ZWRfb2ssCisJCXN0YXRzLT5jb21wbGV0ZWRfZmFpbGVkLAorCQlzdGF0cy0+dW5saW5rZWQsCisJCXN0YXRzLT5xdWV1ZV9ldGQsCisJCXN0YXRzLT5xdWV1ZV9kbWVtKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19zdGF0aXN0aWNzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCWRlYnVnX3N0YXRpc3RpY3Nfc2hvd19vbmUocywgIm5vbmlzb2MiLCAmaW14MjEtPm5vbmlzb2Nfc3RhdHMpOworCWRlYnVnX3N0YXRpc3RpY3Nfc2hvd19vbmUocywgImlzb2MiLCAmaW14MjEtPmlzb2Nfc3RhdHMpOworCXNlcV9wcmludGYocywgInVuYmxvY2sga2x1ZGdlIHRyaWdnZXJzOiAlbHVcbiIsIGlteDIxLT5kZWJ1Z191bmJsb2Nrcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19pc29jX3Nob3dfb25lKHN0cnVjdCBzZXFfZmlsZSAqcywKKwljb25zdCBjaGFyICpuYW1lLCBpbnQgaW5kZXgsIAlzdHJ1Y3QgZGVidWdfaXNvY190cmFjZSAqdHJhY2UpCit7CisJc2VxX3ByaW50ZihzLCAiJXMgJWQ6XG4iCisJCSJjYz0wWCUwMlhcbiIKKwkJInNjaGVkdWxlZCBmcmFtZSAlZCAoJWQpXG4iCisJCSJzdWJtaXR0dGVkIGZyYW1lICVkICglZClcbiIKKwkJImNvbXBsZXRlZCBmcmFtZSAlZCAoJWQpXG4iCisJCSJyZXF1ZXN0ZWQgbGVuZ3RoPSVkXG4iCisJCSJjb21wbGV0ZWQgbGVuZ3RoPSVkXG5cbiIsCisJCW5hbWUsIGluZGV4LAorCQl0cmFjZS0+Y2MsCisJCXRyYWNlLT5zY2hlZHVsZV9mcmFtZSwgdHJhY2UtPnNjaGVkdWxlX2ZyYW1lICYgMHhGRkZGLAorCQl0cmFjZS0+c3VibWl0X2ZyYW1lLCB0cmFjZS0+c3VibWl0X2ZyYW1lICYgMHhGRkZGLAorCQl0cmFjZS0+ZG9uZV9mcmFtZSwgdHJhY2UtPmRvbmVfZnJhbWUgJiAweEZGRkYsCisJCXRyYWNlLT5yZXF1ZXN0X2xlbiwKKwkJdHJhY2UtPmRvbmVfbGVuKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19pc29jX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBzLT5wcml2YXRlOworCXN0cnVjdCBkZWJ1Z19pc29jX3RyYWNlICp0cmFjZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwl0cmFjZSA9IGlteDIxLT5pc29jX3RyYWNlX2ZhaWxlZDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyMS0+aXNvY190cmFjZV9mYWlsZWQpOyBpKyssIHRyYWNlKyspCisJCWRlYnVnX2lzb2Nfc2hvd19vbmUocywgImlzb2MgZmFpbGVkIiwgaSwgdHJhY2UpOworCisJdHJhY2UgPSBpbXgyMS0+aXNvY190cmFjZTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyMS0+aXNvY190cmFjZSk7IGkrKywgdHJhY2UrKykKKwkJZGVidWdfaXNvY19zaG93X29uZShzLCAiaXNvYyIsIGksIHRyYWNlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWJ1Z19zdGF0dXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVidWdfc3RhdHVzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGRlYnVnX2RtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVidWdfZG1lbV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19ldGRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVidWdfZXRkX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGRlYnVnX3N0YXRpc3RpY3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVidWdfc3RhdGlzdGljc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19pc29jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRlYnVnX2lzb2Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXR1c19mb3BzID0geworCS5vcGVuID0gZGVidWdfc3RhdHVzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19kbWVtX2ZvcHMgPSB7CisJLm9wZW4gPSBkZWJ1Z19kbWVtX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19ldGRfZm9wcyA9IHsKKwkub3BlbiA9IGRlYnVnX2V0ZF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfc3RhdGlzdGljc19mb3BzID0geworCS5vcGVuID0gZGVidWdfc3RhdGlzdGljc19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfaXNvY19mb3BzID0geworCS5vcGVuID0gZGVidWdfaXNvY19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBpbXgyMSAqaW14MjEpCit7CisJaW14MjEtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoaW14MjEtPmRldiksIE5VTEwpOworCWlmICghaW14MjEtPmRlYnVnX3Jvb3QpCisJCWdvdG8gZmFpbGVkX2NyZWF0ZV9yb290ZGlyOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0dXMiLCBTX0lSVUdPLAorCQkJaW14MjEtPmRlYnVnX3Jvb3QsIGlteDIxLCAmZGVidWdfc3RhdHVzX2ZvcHMpKQorCQlnb3RvIGZhaWxlZF9jcmVhdGU7CisKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtZW0iLCBTX0lSVUdPLAorCQkJaW14MjEtPmRlYnVnX3Jvb3QsIGlteDIxLCAmZGVidWdfZG1lbV9mb3BzKSkKKwkJZ290byBmYWlsZWRfY3JlYXRlOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJldGQiLCBTX0lSVUdPLAorCQkJaW14MjEtPmRlYnVnX3Jvb3QsIGlteDIxLCAmZGVidWdfZXRkX2ZvcHMpKQorCQlnb3RvIGZhaWxlZF9jcmVhdGU7CisKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRpc3RpY3MiLCBTX0lSVUdPLAorCQkJaW14MjEtPmRlYnVnX3Jvb3QsIGlteDIxLCAmZGVidWdfc3RhdGlzdGljc19mb3BzKSkKKwkJZ290byBmYWlsZWRfY3JlYXRlOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpc29jIiwgU19JUlVHTywKKwkJCWlteDIxLT5kZWJ1Z19yb290LCBpbXgyMSwgJmRlYnVnX2lzb2NfZm9wcykpCisJCWdvdG8gZmFpbGVkX2NyZWF0ZTsKKworCXJldHVybjsKKworZmFpbGVkX2NyZWF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaW14MjEtPmRlYnVnX3Jvb3QpOworCitmYWlsZWRfY3JlYXRlX3Jvb3RkaXI6CisJaW14MjEtPmRlYnVnX3Jvb3QgPSBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgaW14MjEgKmlteDIxKQoreworCWlmIChpbXgyMS0+ZGVidWdfcm9vdCkgeworCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaW14MjEtPmRlYnVnX3Jvb3QpOworCQlpbXgyMS0+ZGVidWdfcm9vdCA9IE5VTEw7CisJfQorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzZTI3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKQEAgLTAsMCArMSwxNzg5IEBACisvKgorICogVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgZm9yIElNWDIxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExvcGluZyBEb2cgRW1iZWRkZWQgU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBGdXp6ZXkKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBKYXkgTW9ua21hbiA8anRtQGxvcGluZ2RvZy5jb20+CisgKiBQb3J0ZWQgdG8gMi42LjMwLCBkZWJ1Z2dlZCBhbmQgZW5oYW5jZWQgYnkgTWFydGluIEZ1enpleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworIC8qCisgICogVGhlIGkuTVgyMSBVU0IgaGFyZHdhcmUgY29udGFpbnMKKyAgKiAgICAqIDMyIHRyYW5zZmVyIGRlc2NyaXB0b3JzIChjYWxsZWQgRVREcykKKyAgKiAgICAqIDRLYiBvZiBEYXRhIG1lbW9yeQorICAqCisgICogVGhlIGRhdGEgbWVtb3J5IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCBmdWN0aW9uIGNvbnRyb2xlcnMKKyAgKiAoYnV0IHRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgdGhlIGhvc3QgY29udHJvbGVyKQorICAqCisgICogU28gc2V0dGluZyB1cCBhIHRyYW5zZmVyIGludm9sdmVzOgorICAqICAgICogQWxsb2NhdGluZyBhIEVURAorICAqICAgICogRmlsbCBpbiBFVEQgd2l0aCBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbgorICAqICAgICogQWxsb2NhdGluZyBkYXRhIG1lbW9yeSAoYW5kIHB1dHRpbmcgdGhlIG9mZnNldCBpbiB0aGUgRVREKQorICAqICAgICogQWN0aXZhdGUgdGhlIEVURAorICAqICAgICogR2V0IGludGVycnVwdCB3aGVuIGRvbmUuCisgICoKKyAgKiBBbiBFVEQgaXMgYXNzaWduZWQgdG8gZWFjaCBhY3RpdmUgZW5kcG9pbnQuCisgICoKKyAgKiBMb3cgcmVzb3VyY2UgKEVURCBhbmQgRGF0YSBtZW1vcnkpIHNpdHVhdGlvbnMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yCisgICogaXNvY2hyb25vdXMgYW5kIG5vbiBpbnNvc3luY2hyb25vdXMgdHJhbnNhY3Rpb25zIDoKKyAgKgorICAqIE5vbiBJU09DIHRyYW5zZmVycyBhcmUgcXVldWVkIGlmIGVpdGhlciBFVERzIG9yIERhdGEgbWVtb3J5IGFyZSB1bmF2YWlsYWJsZQorICAqCisgICogSVNPQyB0cmFuc2ZlcnMgdXNlIDIgRVREcyBwZXIgZW5kcG9pbnQgdG8gYWNoaWV2ZSBkb3VibGUgYnVmZmVyaW5nLgorICAqIFRoZXkgYWxsb2NhdGUgYm90aCBFVERzIGFuZCBEYXRhIG1lbW9yeSBkdXJpbmcgVVJCIHN1Ym1pc3Npb24KKyAgKiAoYW5kIGZhaWwgaWYgdW5hdmFpbGFibGUpLgorICAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgImlteDIxLWhjZC5oIgorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGV2ZW50KSBcCisJKGV0ZCktPmV2ZW50IyNfZnJhbWUgPSByZWFkbCgoaW14MjEpLT5yZWdzICsgVVNCSF9GUk1OVUIpCisjZWxzZQorI2RlZmluZSBERUJVR19MT0dfRlJBTUUoaW14MjEsIGV0ZCwgZXZlbnQpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gImlteDIxLWhjZCI7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlteDIxICpoY2RfdG9faW14MjEoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBpbXgyMSAqKWhjZC0+aGNkX3ByaXY7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogSGFyZHdhcmUgYWNjZXNzIGhlbHBlcnMJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3JlZ2lzdGVyX2JpdHMoc3RydWN0IGlteDIxICppbXgyMSwgdTMyIG9mZnNldCwgdTMyIG1hc2spCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBpbXgyMS0+cmVncyArIG9mZnNldDsKKwl3cml0ZWwocmVhZGwocmVnKSB8IG1hc2ssIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9yZWdpc3Rlcl9iaXRzKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJdTMyIG9mZnNldCwgdTMyIG1hc2spCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBpbXgyMS0+cmVncyArIG9mZnNldDsKKwl3cml0ZWwocmVhZGwocmVnKSAmIH5tYXNrLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdG9nZ2xlX2JpdChzdHJ1Y3QgaW14MjEgKmlteDIxLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGlteDIxLT5yZWdzICsgb2Zmc2V0OworCisJaWYgKHJlYWRsKHJlZykgJiBtYXNrKQorCQl3cml0ZWwobWFzaywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF90b2dnbGVfYml0KHN0cnVjdCBpbXgyMSAqaW14MjEsIHUzMiBvZmZzZXQsIHUzMiBtYXNrKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaW14MjEtPnJlZ3MgKyBvZmZzZXQ7CisKKwlpZiAoIShyZWFkbChyZWcpICYgbWFzaykpCisJCXdyaXRlbChtYXNrLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBldGRfd3JpdGVsKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBldGRfbnVtLCBpbnQgZHdvcmQsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIGlteDIxLT5yZWdzICsgVVNCX0VURF9EV09SRChldGRfbnVtLCBkd29yZCkpOworfQorCitzdGF0aWMgdTMyIGV0ZF9yZWFkbChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgZXRkX251bSwgaW50IGR3b3JkKQoreworCXJldHVybiByZWFkbChpbXgyMS0+cmVncyArIFVTQl9FVERfRFdPUkQoZXRkX251bSwgZHdvcmQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3JhcF9mcmFtZShpbnQgY291bnRlcikKK3sKKwlyZXR1cm4gY291bnRlciAmIDB4RkZGRjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnJhbWVfYWZ0ZXIoaW50IGZyYW1lLCBpbnQgYWZ0ZXIpCit7CisJLyogaGFuZGxlIHdyYXBwaW5nIGxpa2UgamlmZmllcyB0aW1lX2FmZXIgKi8KKwlyZXR1cm4gKHMxNikoKHMxNilhZnRlciAtIChzMTYpZnJhbWUpIDwgMDsKK30KKworc3RhdGljIGludCBpbXgyMV9oY19nZXRfZnJhbWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisKKwlyZXR1cm4gd3JhcF9mcmFtZShyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRlJNTlVCKSk7Cit9CisKKworI2luY2x1ZGUgImlteDIxLWRiZy5jIgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBFVEQgbWFuYWdlbWVudAkJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworCitzdGF0aWMgaW50IGFsbG9jX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxKQoreworCWludCBpOworCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gaW14MjEtPmV0ZDsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTlVNX0VURDsgaSsrLCBldGQrKykgeworCQlpZiAoZXRkLT5hbGxvYyA9PSAwKSB7CisJCQltZW1zZXQoZXRkLCAwLCBzaXplb2YoaW14MjEtPmV0ZFswXSkpOworCQkJZXRkLT5hbGxvYyA9IDE7CisJCQlkZWJ1Z19ldGRfYWxsb2NhdGVkKGlteDIxKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZGlzYWN0aXZhdGVfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBudW0pCit7CisJaW50IGV0ZF9tYXNrID0gKDEgPDwgbnVtKTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9ICZpbXgyMS0+ZXRkW251bV07CisKKwl3cml0ZWwoZXRkX21hc2ssIGlteDIxLT5yZWdzICsgVVNCSF9FVERFTkNMUik7CisJY2xlYXJfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCSF9FVERET05FRU4sIGV0ZF9tYXNrKTsKKwl3cml0ZWwoZXRkX21hc2ssIGlteDIxLT5yZWdzICsgVVNCX0VURERNQUNIQU5MQ0xSKTsKKwljbGVhcl90b2dnbGVfYml0KGlteDIxLCBVU0JIX0VURERPTkVTVEFULCBldGRfbWFzayk7CisKKwlldGQtPmFjdGl2ZV9jb3VudCA9IDA7CisKKwlERUJVR19MT0dfRlJBTUUoaW14MjEsIGV0ZCwgZGlzYWN0aXZhdGVkKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBudW0pCit7CisJc3RydWN0IGV0ZF9wcml2ICpldGQgPSBpbXgyMS0+ZXRkICsgbnVtOworCWludCBpOworCisJZGlzYWN0aXZhdGVfZXRkKGlteDIxLCBudW0pOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZXRkX3dyaXRlbChpbXgyMSwgbnVtLCBpLCAwKTsKKwlldGQtPnVyYiA9IE5VTEw7CisJZXRkLT5lcCA9IE5VTEw7CisJZXRkLT50ZCA9IE5VTEw7OworfQorCitzdGF0aWMgdm9pZCBmcmVlX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgbnVtKQoreworCWlmIChudW0gPCAwKQorCQlyZXR1cm47CisKKwlpZiAobnVtID49IFVTQl9OVU1fRVREKSB7CisJCWRldl9lcnIoaW14MjEtPmRldiwgIkJBRCBldGQ9JWQhXG4iLCBudW0pOworCQlyZXR1cm47CisJfQorCWlmIChpbXgyMS0+ZXRkW251bV0uYWxsb2MgPT0gMCkgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJFVEQgJWQgYWxyZWFkeSBmcmVlIVxuIiwgbnVtKTsKKwkJcmV0dXJuOworCX0KKworCWRlYnVnX2V0ZF9mcmVlZChpbXgyMSk7CisJcmVzZXRfZXRkKGlteDIxLCBudW0pOworCW1lbXNldCgmaW14MjEtPmV0ZFtudW1dLCAwLCBzaXplb2YoaW14MjEtPmV0ZFswXSkpOworfQorCisKK3N0YXRpYyB2b2lkIHNldHVwX2V0ZF9kd29yZDAoc3RydWN0IGlteDIxICppbXgyMSwKKwlpbnQgZXRkX251bSwgc3RydWN0IHVyYiAqdXJiLCAgdTggZGlyLCB1MTYgbWF4cGFja2V0KQoreworCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDAsCisJCSgodTMyKSB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpKSA8PCAgRFcwX0FERFJFU1MgfAorCQkoKHUzMikgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpIDw8IERXMF9FTkRQTlQpIHwKKwkJKCh1MzIpIGRpciA8PCBEVzBfRElSRUNUKSB8CisJCSgodTMyKSAoKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKSA/CisJCQkxIDogMCkgPDwgRFcwX1NQRUVEKSB8CisJCSgodTMyKSBmbXRfdXJiX3RvX2V0ZFt1c2JfcGlwZXR5cGUodXJiLT5waXBlKV0gPDwgRFcwX0ZPUk1BVCkgfAorCQkoKHUzMikgbWF4cGFja2V0IDw8IERXMF9NQVhQS1RTSVopKTsKK30KKworc3RhdGljIHZvaWQgYWN0aXZhdGVfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJaW50IGV0ZF9udW0sIGRtYV9hZGRyX3QgZG1hLCB1OCBkaXIpCit7CisJdTMyIGV0ZF9tYXNrID0gMSA8PCBldGRfbnVtOworCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gJmlteDIxLT5ldGRbZXRkX251bV07CisKKwljbGVhcl90b2dnbGVfYml0KGlteDIxLCBVU0JIX0VURERPTkVTVEFULCBldGRfbWFzayk7CisJc2V0X3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQkhfRVRERE9ORUVOLCBldGRfbWFzayk7CisJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9YRklMTFNUQVQsIGV0ZF9tYXNrKTsKKwljbGVhcl90b2dnbGVfYml0KGlteDIxLCBVU0JIX1lGSUxMU1RBVCwgZXRkX21hc2spOworCisJaWYgKGRtYSkgeworCQlzZXRfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCX0VURERNQUNIQU5MQ0xSLCBldGRfbWFzayk7CisJCWNsZWFyX3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWEJVRlNUQVQsIGV0ZF9tYXNrKTsKKwkJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9ZQlVGU1RBVCwgZXRkX21hc2spOworCQl3cml0ZWwoZG1hLCBpbXgyMS0+cmVncyArIFVTQl9FVERTTVNBKGV0ZF9udW0pKTsKKwkJc2V0X3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQl9FVERETUFFTiwgZXRkX21hc2spOworCX0gZWxzZSB7CisJCWlmIChkaXIgIT0gVERfRElSX0lOKSB7CisJCQkvKiBuZWVkIHRvIHNldCBmb3IgWkxQICovCisJCQlzZXRfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9YRklMTFNUQVQsIGV0ZF9tYXNrKTsKKwkJCXNldF90b2dnbGVfYml0KGlteDIxLCBVU0JIX1lGSUxMU1RBVCwgZXRkX21hc2spOworCQl9CisJfQorCisJREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGFjdGl2YXRlZCk7CisKKyNpZmRlZiBERUJVRworCWlmICghZXRkLT5hY3RpdmVfY291bnQpIHsKKwkJaW50IGk7CisJCWV0ZC0+YWN0aXZhdGVkX2ZyYW1lID0gcmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX0ZSTU5VQik7CisJCWV0ZC0+ZGlzYWN0aXZhdGVkX2ZyYW1lID0gLTE7CisJCWV0ZC0+bGFzdF9pbnRfZnJhbWUgPSAtMTsKKwkJZXRkLT5sYXN0X3JlcV9mcmFtZSA9IC0xOworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlldGQtPnN1Ym1pdHRlZF9kd29yZHNbaV0gPSBldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIGkpOworCX0KKyNlbmRpZgorCisJZXRkLT5hY3RpdmVfY291bnQgPSAxOworCXdyaXRlbChldGRfbWFzaywgaW14MjEtPnJlZ3MgKyBVU0JIX0VUREVOU0VUKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworLyogRGF0YSBtZW1vcnkgbWFuYWdlbWVudAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSovCisKK3N0YXRpYyBpbnQgYWxsb2NfZG1lbShzdHJ1Y3QgaW14MjEgKmlteDIxLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJICAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhICphcmVhOworCXN0cnVjdCBpbXgyMV9kbWVtX2FyZWEgKnRtcDsKKworCXNpemUgKz0gKH5zaXplICsgMSkgJiAweDM7IC8qIFJvdW5kIHRvIDQgYnl0ZSBtdWx0aXBsZSAqLworCisJaWYgKHNpemUgPiBETUVNX1NJWkUpIHsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAic2l6ZT0lZCA+IERNRU1fU0laRSglZClcbiIsCisJCQlzaXplLCBETUVNX1NJWkUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmlteDIxLT5kbWVtX2xpc3QsIGxpc3QpIHsKKwkJaWYgKChzaXplICsgb2Zmc2V0KSA8IG9mZnNldCkKKwkJCWdvdG8gZmFpbDsKKwkJaWYgKChzaXplICsgb2Zmc2V0KSA8PSB0bXAtPm9mZnNldCkKKwkJCWJyZWFrOworCQlvZmZzZXQgPSB0bXAtPnNpemUgKyB0bXAtPm9mZnNldDsKKwkJaWYgKChvZmZzZXQgKyBzaXplKSA+IERNRU1fU0laRSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlhcmVhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlteDIxX2RtZW1fYXJlYSksIEdGUF9BVE9NSUMpOworCWlmIChhcmVhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYXJlYS0+ZXAgPSBlcDsKKwlhcmVhLT5vZmZzZXQgPSBvZmZzZXQ7CisJYXJlYS0+c2l6ZSA9IHNpemU7CisJbGlzdF9hZGRfdGFpbCgmYXJlYS0+bGlzdCwgJnRtcC0+bGlzdCk7CisJZGVidWdfZG1lbV9hbGxvY2F0ZWQoaW14MjEsIHNpemUpOworCXJldHVybiBvZmZzZXQ7CisKK2ZhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIE1lbW9yeSBub3cgYXZhaWxhYmxlIGZvciBhIHF1ZXVlZCBFVEQgLSBhY3RpdmF0ZSBpdCAqLworc3RhdGljIHZvaWQgYWN0aXZhdGVfcXVldWVkX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLAorCXN0cnVjdCBldGRfcHJpdiAqZXRkLCB1MzIgZG1lbV9vZmZzZXQpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdiA9IGV0ZC0+dXJiLT5oY3ByaXY7CisJaW50IGV0ZF9udW0gPSBldGQgLSAmaW14MjEtPmV0ZFswXTsKKwl1MzIgbWF4cGFja2V0ID0gZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAxKSA+PiBEVzFfWUJVRlNSVEFEOworCXU4IGRpciA9IChldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDIpID4+IERXMl9ESVJQSUQpICYgMHgwMzsKKworCWRldl9kYmcoaW14MjEtPmRldiwgImFjdGl2YXRpbmcgcXVldWVkIEVURCAlZCBub3cgRE1FTSBhdmFpbGFibGVcbiIsCisJCWV0ZF9udW0pOworCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDEsCisJICAgICgoZG1lbV9vZmZzZXQgKyBtYXhwYWNrZXQpIDw8IERXMV9ZQlVGU1JUQUQpIHwgZG1lbV9vZmZzZXQpOworCisJdXJiX3ByaXYtPmFjdGl2ZSA9IDE7CisJYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtLCBldGQtPmRtYV9oYW5kbGUsIGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZG1lbShzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBpbXgyMV9kbWVtX2FyZWEgKmFyZWE7CisJc3RydWN0IGV0ZF9wcml2ICpldGQsICp0bXA7CisJaW50IGZvdW5kID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXJlYSwgJmlteDIxLT5kbWVtX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGFyZWEtPm9mZnNldCA9PSBvZmZzZXQpIHsKKwkJCWRlYnVnX2RtZW1fZnJlZWQoaW14MjEsIGFyZWEtPnNpemUpOworCQkJbGlzdF9kZWwoJmFyZWEtPmxpc3QpOworCQkJa2ZyZWUoYXJlYSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpICB7CisJCWRldl9lcnIoaW14MjEtPmRldiwKKwkJCSJUcnlpbmcgdG8gZnJlZSB1bmFsbG9jYXRlZCBETUVNICVkXG4iLCBvZmZzZXQpOworCQlyZXR1cm47CisJfQorCisJLyogVHJ5IGFnYWluIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYW55dGhpbmcgd2UndmUgcXVldWVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV0ZCwgdG1wLCAmaW14MjEtPnF1ZXVlX2Zvcl9kbWVtLCBxdWV1ZSkgeworCQlvZmZzZXQgPSBhbGxvY19kbWVtKGlteDIxLCBldGQtPmRtZW1fc2l6ZSwgZXRkLT5lcCk7CisJCWlmIChvZmZzZXQgPj0gMCkgeworCQkJbGlzdF9kZWwoJmV0ZC0+cXVldWUpOworCQkJYWN0aXZhdGVfcXVldWVkX2V0ZChpbXgyMSwgZXRkLCAodTMyKW9mZnNldCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZXBkbWVtKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IGlteDIxX2RtZW1fYXJlYSAqYXJlYSwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhcmVhLCB0bXAsICZpbXgyMS0+ZG1lbV9saXN0LCBsaXN0KSB7CisJCWlmIChhcmVhLT5lcCA9PSBlcCkgeworCQkJZGV2X2VycihpbXgyMS0+ZGV2LAorCQkJCSJBY3RpdmUgRE1FTSAlZCBmb3IgZGlzYWJsZWQgZXA9JXBcbiIsCisJCQkJYXJlYS0+b2Zmc2V0LCBlcCk7CisJCQlsaXN0X2RlbCgmYXJlYS0+bGlzdCk7CisJCQlrZnJlZShhcmVhKTsKKwkJfQorCX0KK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSovCisvKiBFbmQgaGFuZGxpbmcgCQkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSovCitzdGF0aWMgdm9pZCBzY2hlZHVsZV9ub25pc29jX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXJiICp1cmIpOworCisvKiBFbmRwb2ludCBub3cgaWRsZSAtIHJlbGVhc2UgaXQncyBFVEQocykgb3IgYXNzc2lnbiB0byBxdWV1ZWQgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgZXBfaWRsZShzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdikKK3sKKwlpbnQgZXRkX251bTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fSVNPX0VURFM7IGkrKykgeworCQlldGRfbnVtID0gZXBfcHJpdi0+ZXRkW2ldOworCQlpZiAoZXRkX251bSA8IDApCisJCQljb250aW51ZTsKKworCQllcF9wcml2LT5ldGRbaV0gPSAtMTsKKwkJaWYgKGxpc3RfZW1wdHkoJmlteDIxLT5xdWV1ZV9mb3JfZXRkKSkgeworCQkJZnJlZV9ldGQoaW14MjEsIGV0ZF9udW0pOworCQkJY29udGludWU7CisJCX0KKworCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkiYXNzaWduaW5nIGlkbGUgZXRkICVkIGZvciBxdWV1ZWQgcmVxdWVzdFxuIiwgZXRkX251bSk7CisJCWVwX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpbXgyMS0+cXVldWVfZm9yX2V0ZCwKKwkJCXN0cnVjdCBlcF9wcml2LCBxdWV1ZSk7CisJCWxpc3RfZGVsKCZlcF9wcml2LT5xdWV1ZSk7CisJCXJlc2V0X2V0ZChpbXgyMSwgZXRkX251bSk7CisJCWVwX3ByaXYtPndhaXRpbmdfZXRkID0gMDsKKwkJZXBfcHJpdi0+ZXRkW2ldID0gZXRkX251bTsKKworCQlpZiAobGlzdF9lbXB0eSgmZXBfcHJpdi0+ZXAtPnVyYl9saXN0KSkgeworCQkJZGV2X2VycihpbXgyMS0+ZGV2LCAiTm8gdXJiIGZvciBxdWV1ZWQgZXAhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNjaGVkdWxlX25vbmlzb2NfZXRkKGlteDIxLCBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJJmVwX3ByaXYtPmVwLT51cmJfbGlzdCwgc3RydWN0IHVyYiwgdXJiX2xpc3QpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVyYl9kb25lKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK19fcmVsZWFzZXMoaW14MjEtPmxvY2spCitfX2FjcXVpcmVzKGlteDIxLT5sb2NrKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdiA9IHVyYi0+ZXAtPmhjcHJpdjsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisKKwlkZWJ1Z191cmJfY29tcGxldGVkKGlteDIxLCB1cmIsIHN0YXR1cyk7CisJZGV2X3ZkYmcoaW14MjEtPmRldiwgInVyYiAlcCBkb25lICVkXG4iLCB1cmIsIHN0YXR1cyk7CisKKwlrZnJlZSh1cmJfcHJpdi0+aXNvY190ZCk7CisJa2ZyZWUodXJiLT5oY3ByaXYpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJc3Bpbl91bmxvY2soJmlteDIxLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKKwlzcGluX2xvY2soJmlteDIxLT5sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmZXBfcHJpdi0+ZXAtPnVyYl9saXN0KSkKKwkJZXBfaWRsZShpbXgyMSwgZXBfcHJpdik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JKi8KKy8qIElTT0MgSGFuZGxpbmcgLi4uIAkJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworCitzdGF0aWMgdm9pZCBzY2hlZHVsZV9pc29jX2V0ZHMoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdiA9IGVwLT5oY3ByaXY7CisJc3RydWN0IGV0ZF9wcml2ICpldGQ7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwlzdHJ1Y3QgdGQgKnRkOworCWludCBldGRfbnVtOworCWludCBpOworCWludCBjdXJfZnJhbWU7CisJdTggZGlyOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9JU09fRVREUzsgaSsrKSB7Cit0b29fbGF0ZToKKwkJaWYgKGxpc3RfZW1wdHkoJmVwX3ByaXYtPnRkX2xpc3QpKQorCQkJYnJlYWs7CisKKwkJZXRkX251bSA9IGVwX3ByaXYtPmV0ZFtpXTsKKwkJaWYgKGV0ZF9udW0gPCAwKQorCQkJYnJlYWs7CisKKwkJZXRkID0gJmlteDIxLT5ldGRbZXRkX251bV07CisJCWlmIChldGQtPnVyYikKKwkJCWNvbnRpbnVlOworCisJCXRkID0gbGlzdF9lbnRyeShlcF9wcml2LT50ZF9saXN0Lm5leHQsIHN0cnVjdCB0ZCwgbGlzdCk7CisJCWxpc3RfZGVsKCZ0ZC0+bGlzdCk7CisJCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OworCisJCWN1cl9mcmFtZSA9IGlteDIxX2hjX2dldF9mcmFtZShoY2QpOworCQlpZiAoZnJhbWVfYWZ0ZXIoY3VyX2ZyYW1lLCB0ZC0+ZnJhbWUpKSB7CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICJpc29jIHRvbyBsYXRlIGZyYW1lICVkID4gJWRcbiIsCisJCQkJY3VyX2ZyYW1lLCB0ZC0+ZnJhbWUpOworCQkJdXJiX3ByaXYtPmlzb2Nfc3RhdHVzID0gLUVYREVWOworCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbCisJCQkJdGQtPmlzb2NfaW5kZXhdLmFjdHVhbF9sZW5ndGggPSAwOworCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbdGQtPmlzb2NfaW5kZXhdLnN0YXR1cyA9IC1FWERFVjsKKwkJCWlmICgtLXVyYl9wcml2LT5pc29jX3JlbWFpbmluZyA9PSAwKQorCQkJCXVyYl9kb25lKGhjZCwgdGQtPnVyYiwgdXJiX3ByaXYtPmlzb2Nfc3RhdHVzKTsKKwkJCWdvdG8gdG9vX2xhdGU7CisJCX0KKworCQl1cmJfcHJpdi0+YWN0aXZlID0gMTsKKwkJZXRkLT50ZCA9IHRkOworCQlldGQtPmVwID0gdGQtPmVwOworCQlldGQtPnVyYiA9IHRkLT51cmI7CisJCWV0ZC0+bGVuID0gdGQtPmxlbjsKKworCQlkZWJ1Z19pc29jX3N1Ym1pdHRlZChpbXgyMSwgY3VyX2ZyYW1lLCB0ZCk7CisKKwkJZGlyID0gdXNiX3BpcGVvdXQodGQtPnVyYi0+cGlwZSkgPyBURF9ESVJfT1VUIDogVERfRElSX0lOOworCQlzZXR1cF9ldGRfZHdvcmQwKGlteDIxLCBldGRfbnVtLCB0ZC0+dXJiLCBkaXIsIGV0ZC0+ZG1lbV9zaXplKTsKKwkJZXRkX3dyaXRlbChpbXgyMSwgZXRkX251bSwgMSwgZXRkLT5kbWVtX29mZnNldCk7CisJCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDIsCisJCQkoVERfTk9UQUNDRVNTRUQgPDwgRFcyX0NPTVBDT0RFKSB8CisJCQkoKHRkLT5mcmFtZSAmIDB4RkZGRikgPDwgRFcyX1NUQVJURlJNKSk7CisJCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDMsCisJCQkoVERfTk9UQUNDRVNTRUQgPDwgRFczX0NPTVBDT0RFMCkgfAorCQkJKHRkLT5sZW4gPDwgRFczX1BLVExFTjApKTsKKworCQlhY3RpdmF0ZV9ldGQoaW14MjEsIGV0ZF9udW0sIHRkLT5kYXRhLCBkaXIpOworCX0KK30KKworc3RhdGljIHZvaWQgaXNvY19ldGRfZG9uZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBldGRfbnVtKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlpbnQgZXRkX21hc2sgPSAxIDw8IGV0ZF9udW07CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gaW14MjEtPmV0ZCArIGV0ZF9udW07CisJc3RydWN0IHRkICp0ZCA9IGV0ZC0+dGQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9IGV0ZC0+ZXA7CisJaW50IGlzb2NfaW5kZXggPSB0ZC0+aXNvY19pbmRleDsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwlpbnQgZGlyX2luID0gdXNiX3BpcGVpbihwaXBlKTsKKwlpbnQgY2M7CisJaW50IGJ5dGVzX3hmcmQ7CisKKwlkaXNhY3RpdmF0ZV9ldGQoaW14MjEsIGV0ZF9udW0pOworCisJY2MgPSAoZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAzKSA+PiBEVzNfQ09NUENPREUwKSAmIDB4ZjsKKwlieXRlc194ZnJkID0gZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAzKSAmIDB4M2ZmOworCisJLyogSW5wdXQgZG9lc24ndCBhbHdheXMgZmlsbCB0aGUgYnVmZmVyLCBkb24ndCBnZW5lcmF0ZSBhbiBlcnJvcgorCSAqIHdoZW4gdGhpcyBoYXBwZW5zLgorCSAqLworCWlmIChkaXJfaW4gJiYgKGNjID09IFREX0RBVEFVTkRFUlJVTikpCisJCWNjID0gVERfQ0NfTk9FUlJPUjsKKworCWlmIChjYyA9PSBURF9OT1RBQ0NFU1NFRCkKKwkJYnl0ZXNfeGZyZCA9IDA7CisKKwlkZWJ1Z19pc29jX2NvbXBsZXRlZChpbXgyMSwKKwkJaW14MjFfaGNfZ2V0X2ZyYW1lKGhjZCksIHRkLCBjYywgYnl0ZXNfeGZyZCk7CisJaWYgKGNjKSB7CisJCXVyYl9wcml2LT5pc29jX3N0YXR1cyA9IC1FWERFVjsKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJImJhZCBpc28gY2M9MHglWCBmcmFtZT0lZCBzY2hlZCBmcmFtZT0lZCAiCisJCQkiY250PSVkIGxlbj0lZCB1cmI9JXAgZXRkPSVkIGluZGV4PSVkXG4iLAorCQkJY2MsICBpbXgyMV9oY19nZXRfZnJhbWUoaGNkKSwgdGQtPmZyYW1lLAorCQkJYnl0ZXNfeGZyZCwgdGQtPmxlbiwgdXJiLCBldGRfbnVtLCBpc29jX2luZGV4KTsKKwl9CisKKwlpZiAoZGlyX2luKQorCQljbGVhcl90b2dnbGVfYml0KGlteDIxLCBVU0JIX1hGSUxMU1RBVCwgZXRkX21hc2spOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGJ5dGVzX3hmcmQ7CisJdXJiLT5pc29fZnJhbWVfZGVzY1tpc29jX2luZGV4XS5hY3R1YWxfbGVuZ3RoID0gYnl0ZXNfeGZyZDsKKwl1cmItPmlzb19mcmFtZV9kZXNjW2lzb2NfaW5kZXhdLnN0YXR1cyA9IGNjX3RvX2Vycm9yW2NjXTsKKworCWV0ZC0+dGQgPSBOVUxMOworCWV0ZC0+dXJiID0gTlVMTDsKKwlldGQtPmVwID0gTlVMTDsKKworCWlmICgtLXVyYl9wcml2LT5pc29jX3JlbWFpbmluZyA9PSAwKQorCQl1cmJfZG9uZShoY2QsIHVyYiwgdXJiX3ByaXYtPmlzb2Nfc3RhdHVzKTsKKworCXNjaGVkdWxlX2lzb2NfZXRkcyhoY2QsIGVwKTsKK30KKworc3RhdGljIHN0cnVjdCBlcF9wcml2ICphbGxvY19pc29jX2VwKAorCXN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXY7CisJaW50IGk7CisKKwllcF9wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXBfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHRoZSBFVERzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9JU09fRVREUzsgaSsrKSB7CisJCWVwX3ByaXYtPmV0ZFtpXSA9IGFsbG9jX2V0ZChpbXgyMSk7CisJCWlmIChlcF9wcml2LT5ldGRbaV0gPCAwKSB7CisJCQlpbnQgajsKKwkJCWRldl9lcnIoaW14MjEtPmRldiwgImlzb2M6IENvdWxkbid0IGFsbG9jYXRlIGV0ZFxuIik7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCWZyZWVfZXRkKGlteDIxLCBlcF9wcml2LT5ldGRbal0pOworCQkJZ290byBhbGxvY19ldGRfZmFpbGVkOworCQl9CisJCWlteDIxLT5ldGRbZXBfcHJpdi0+ZXRkW2ldXS5lcCA9IGVwOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZlcF9wcml2LT50ZF9saXN0KTsKKwllcF9wcml2LT5lcCA9IGVwOworCWVwLT5oY3ByaXYgPSBlcF9wcml2OworCXJldHVybiBlcF9wcml2OworCithbGxvY19ldGRfZmFpbGVkOgorCWtmcmVlKGVwX3ByaXYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGlteDIxX2hjX3VyYl9lbnF1ZXVlX2lzb2Moc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQkgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJCQkJICAgICBzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlcF9wcml2ICplcF9wcml2OworCXN0cnVjdCB0ZCAqdGQgPSBOVUxMOworCWludCBpOworCWludCByZXQ7CisJaW50IGN1cl9mcmFtZTsKKwl1MTYgbWF4cGFja2V0OworCisJdXJiX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiX3ByaXYpLCBtZW1fZmxhZ3MpOworCWlmICh1cmJfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVyYl9wcml2LT5pc29jX3RkID0ga3phbGxvYygKKwkJc2l6ZW9mKHN0cnVjdCB0ZCkgKiB1cmItPm51bWJlcl9vZl9wYWNrZXRzLCBtZW1fZmxhZ3MpOworCWlmICh1cmJfcHJpdi0+aXNvY190ZCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYWxsb2NfdGRfZmFpbGVkOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVwLT5oY3ByaXYgPT0gTlVMTCkgeworCQllcF9wcml2ID0gYWxsb2NfaXNvY19lcChpbXgyMSwgZXApOworCQlpZiAoZXBfcHJpdiA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBhbGxvY19lcF9mYWlsZWQ7CisJCX0KKwl9IGVsc2UgeworCQllcF9wcml2ID0gZXAtPmhjcHJpdjsKKwl9CisKKwlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKKwlpZiAocmV0KQorCQlnb3RvIGxpbmtfZmFpbGVkOworCisJdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwl1cmItPmVycm9yX2NvdW50ID0gMDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXVyYl9wcml2LT5lcCA9IGVwOworCisJLyogYWxsb2NhdGUgZGF0YSBtZW1vcnkgZm9yIGxhcmdlc3QgcGFja2V0cyBpZiBub3QgYWxyZWFkeSBkb25lICovCisJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lTT19FVERTOyBpKyspIHsKKwkJc3RydWN0IGV0ZF9wcml2ICpldGQgPSAmaW14MjEtPmV0ZFtlcF9wcml2LT5ldGRbaV1dOworCisJCWlmIChldGQtPmRtZW1fc2l6ZSA+IDAgJiYgZXRkLT5kbWVtX3NpemUgPCBtYXhwYWNrZXQpIHsKKwkJCS8qIG5vdCBzdXJlIGlmIHRoaXMgY2FuIHJlYWxseSBvY2N1ci4uLi4gKi8KKwkJCWRldl9lcnIoaW14MjEtPmRldiwgImluY3JlYXNpbmcgaXNvYyBidWZmZXIgJWQtPiVkXG4iLAorCQkJCWV0ZC0+ZG1lbV9zaXplLCBtYXhwYWNrZXQpOworCQkJcmV0ID0gLUVNU0dTSVpFOworCQkJZ290byBhbGxvY19kbWVtX2ZhaWxlZDsKKwkJfQorCisJCWlmIChldGQtPmRtZW1fc2l6ZSA9PSAwKSB7CisJCQlldGQtPmRtZW1fb2Zmc2V0ID0gYWxsb2NfZG1lbShpbXgyMSwgbWF4cGFja2V0LCBlcCk7CisJCQlpZiAoZXRkLT5kbWVtX29mZnNldCA8IDApIHsKKwkJCQlkZXZfZGJnKGlteDIxLT5kZXYsICJmYWlsZWQgYWxsb2MgaXNvYyBkbWVtXG4iKTsKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWdvdG8gYWxsb2NfZG1lbV9mYWlsZWQ7CisJCQl9CisJCQlldGQtPmRtZW1fc2l6ZSA9IG1heHBhY2tldDsKKwkJfQorCX0KKworCS8qIGNhbGN1bGF0ZSBmcmFtZSAqLworCWN1cl9mcmFtZSA9IGlteDIxX2hjX2dldF9mcmFtZShoY2QpOworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSB7CisJCWlmIChsaXN0X2VtcHR5KCZlcF9wcml2LT50ZF9saXN0KSkKKwkJCXVyYi0+c3RhcnRfZnJhbWUgPSBjdXJfZnJhbWUgKyA1OworCQllbHNlCisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gbGlzdF9lbnRyeSgKKwkJCQllcF9wcml2LT50ZF9saXN0LnByZXYsCisJCQkJc3RydWN0IHRkLCBsaXN0KS0+ZnJhbWUgKyB1cmItPmludGVydmFsOworCX0KKwl1cmItPnN0YXJ0X2ZyYW1lID0gd3JhcF9mcmFtZSh1cmItPnN0YXJ0X2ZyYW1lKTsKKwlpZiAoZnJhbWVfYWZ0ZXIoY3VyX2ZyYW1lLCB1cmItPnN0YXJ0X2ZyYW1lKSkgeworCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkiZW5xdWV1ZTogYWRqdXN0aW5nIGlzbyBzdGFydCAlZCAoY3VyPSVkKSBhc2FwPSVkXG4iLAorCQkJdXJiLT5zdGFydF9mcmFtZSwgY3VyX2ZyYW1lLAorCQkJKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfSVNPX0FTQVApICE9IDApOworCQl1cmItPnN0YXJ0X2ZyYW1lID0gd3JhcF9mcmFtZShjdXJfZnJhbWUgKyAxKTsKKwl9CisKKwkvKiBzZXQgdXAgdHJhbnNmZXJzICovCisJdGQgPSB1cmJfcHJpdi0+aXNvY190ZDsKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrLCB0ZCsrKSB7CisJCXRkLT5lcCA9IGVwOworCQl0ZC0+dXJiID0gdXJiOworCQl0ZC0+bGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CisJCXRkLT5pc29jX2luZGV4ID0gaTsKKwkJdGQtPmZyYW1lID0gd3JhcF9mcmFtZSh1cmItPnN0YXJ0X2ZyYW1lICsgdXJiLT5pbnRlcnZhbCAqIGkpOworCQl0ZC0+ZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWxpc3RfYWRkX3RhaWwoJnRkLT5saXN0LCAmZXBfcHJpdi0+dGRfbGlzdCk7CisJfQorCisJdXJiX3ByaXYtPmlzb2NfcmVtYWluaW5nID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwlkZXZfdmRiZyhpbXgyMS0+ZGV2LCAic2V0dXAgJWQgcGFja2V0cyBmb3IgaXNvIGZyYW1lICVkLT4lZFxuIiwKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgdXJiLT5zdGFydF9mcmFtZSwgdGQtPmZyYW1lKTsKKworCWRlYnVnX3VyYl9zdWJtaXR0ZWQoaW14MjEsIHVyYik7CisJc2NoZWR1bGVfaXNvY19ldGRzKGhjZCwgZXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKKworYWxsb2NfZG1lbV9mYWlsZWQ6CisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCitsaW5rX2ZhaWxlZDoKK2FsbG9jX2VwX2ZhaWxlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCWtmcmVlKHVyYl9wcml2LT5pc29jX3RkKTsKKworYWxsb2NfdGRfZmFpbGVkOgorCWtmcmVlKHVyYl9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkZXF1ZXVlX2lzb2NfdXJiKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IHRkICp0ZCwgKnRtcDsKKwlpbnQgaTsKKworCWlmICh1cmJfcHJpdi0+YWN0aXZlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fSVNPX0VURFM7IGkrKykgeworCQkJaW50IGV0ZF9udW0gPSBlcF9wcml2LT5ldGRbaV07CisJCQlpZiAoZXRkX251bSAhPSAtMSAmJiBpbXgyMS0+ZXRkW2V0ZF9udW1dLnVyYiA9PSB1cmIpIHsKKwkJCQlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9IGlteDIxLT5ldGQgKyBldGRfbnVtOworCisJCQkJcmVzZXRfZXRkKGlteDIxLCBldGRfbnVtKTsKKwkJCQlpZiAoZXRkLT5kbWVtX3NpemUpCisJCQkJCWZyZWVfZG1lbShpbXgyMSwgZXRkLT5kbWVtX29mZnNldCk7CisJCQkJZXRkLT5kbWVtX3NpemUgPSAwOworCQkJfQorCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZlcF9wcml2LT50ZF9saXN0LCBsaXN0KSB7CisJCWlmICh0ZC0+dXJiID09IHVyYikgeworCQkJZGV2X3ZkYmcoaW14MjEtPmRldiwgInJlbW92aW5nIHRkICVwXG4iLCB0ZCk7CisJCQlsaXN0X2RlbCgmdGQtPmxpc3QpOworCQl9CisJfQorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBOT04gSVNPQyBIYW5kbGluZyAuLi4gCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIHZvaWQgc2NoZWR1bGVfbm9uaXNvY19ldGQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBwaXBlID0gdXJiLT5waXBlOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdiA9IHVyYl9wcml2LT5lcC0+aGNwcml2OworCWludCBzdGF0ZSA9IHVyYl9wcml2LT5zdGF0ZTsKKwlpbnQgZXRkX251bSA9IGVwX3ByaXYtPmV0ZFswXTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZDsKKwlpbnQgZG1lbV9vZmZzZXQ7CisJdTMyIGNvdW50OworCXUxNiBldGRfYnVmX3NpemU7CisJdTE2IG1heHBhY2tldDsKKwl1OCBkaXI7CisJdTggYnVmcm91bmQ7CisJdTggZGF0YXRvZ2dsZTsKKwl1OCBpbnRlcnZhbCA9IDA7CisJdTggcmVscG9scG9zID0gMDsKKworCWlmIChldGRfbnVtIDwgMCkgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJObyB2YWxpZCBFVERcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRVRERU5TRVQpICYgKDEgPDwgZXRkX251bSkpCisJCWRldl9lcnIoaW14MjEtPmRldiwgInN1Ym1pdHRpbmcgdG8gYWN0aXZlIEVURCAlZFxuIiwgZXRkX251bSk7CisKKwlldGQgPSAmaW14MjEtPmV0ZFtldGRfbnVtXTsKKwltYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJaWYgKCFtYXhwYWNrZXQpCisJCW1heHBhY2tldCA9IDg7CisKKwlpZiAodXNiX3BpcGVjb250cm9sKHBpcGUpICYmIChzdGF0ZSAhPSBVU19DVFJMX0RBVEEpKSB7CisJCWlmIChzdGF0ZSA9PSBVU19DVFJMX1NFVFVQKSB7CisJCQlkaXIgPSBURF9ESVJfU0VUVVA7CisJCQlldGQtPmRtYV9oYW5kbGUgPSB1cmItPnNldHVwX2RtYTsKKwkJCWJ1ZnJvdW5kID0gMDsKKwkJCWNvdW50ID0gODsKKwkJCWRhdGF0b2dnbGUgPSBURF9UT0dHTEVfREFUQTA7CisJCX0gZWxzZSB7CS8qIFVTX0NUUkxfQUNLICovCisJCQlkaXIgPSB1c2JfcGlwZW91dChwaXBlKSA/IFREX0RJUl9JTiA6IFREX0RJUl9PVVQ7CisJCQlldGQtPmRtYV9oYW5kbGUgPSB1cmItPnRyYW5zZmVyX2RtYTsKKwkJCWJ1ZnJvdW5kID0gMDsKKwkJCWNvdW50ID0gMDsKKwkJCWRhdGF0b2dnbGUgPSBURF9UT0dHTEVfREFUQTE7CisJCX0KKwl9IGVsc2UgeworCQlkaXIgPSB1c2JfcGlwZW91dChwaXBlKSA/IFREX0RJUl9PVVQgOiBURF9ESVJfSU47CisJCWJ1ZnJvdW5kID0gKGRpciA9PSBURF9ESVJfSU4pID8gMSA6IDA7CisJCWV0ZC0+ZG1hX2hhbmRsZSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCQlpZiAodXNiX3BpcGVidWxrKHBpcGUpICYmIChzdGF0ZSA9PSBVU19CVUxLMCkpCisJCQljb3VudCA9IDA7CisJCWVsc2UKKwkJCWNvdW50ID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJCWlmICh1c2JfcGlwZWNvbnRyb2wocGlwZSkpIHsKKwkJCWRhdGF0b2dnbGUgPSBURF9UT0dHTEVfREFUQTE7CisJCX0gZWxzZSB7CisJCQlpZiAodXNiX2dldHRvZ2dsZSgKKwkJCQkJdXJiLT5kZXYsCisJCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpCisJCQkJZGF0YXRvZ2dsZSA9IFREX1RPR0dMRV9EQVRBMTsKKwkJCWVsc2UKKwkJCQlkYXRhdG9nZ2xlID0gVERfVE9HR0xFX0RBVEEwOworCQl9CisJfQorCisJZXRkLT51cmIgPSB1cmI7CisJZXRkLT5lcCA9IHVyYl9wcml2LT5lcDsKKwlldGQtPmxlbiA9IGNvdW50OworCisJaWYgKHVzYl9waXBlaW50KHBpcGUpKSB7CisJCWludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwkJcmVscG9scG9zID0gKHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9GUk1OVUIpICsgMSkgJiAweGZmOworCX0KKworCS8qIFdyaXRlIEVURCB0byBkZXZpY2UgbWVtb3J5ICovCisJc2V0dXBfZXRkX2R3b3JkMChpbXgyMSwgZXRkX251bSwgdXJiLCBkaXIsIG1heHBhY2tldCk7CisKKwlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAyLAorCQkodTMyKSBpbnRlcnZhbCA8PCBEVzJfUE9MSU5URVJWIHwKKwkJKCh1MzIpIHJlbHBvbHBvcyA8PCBEVzJfUkVMUE9MUE9TKSB8CisJCSgodTMyKSBkaXIgPDwgRFcyX0RJUlBJRCkgfAorCQkoKHUzMikgYnVmcm91bmQgPDwgRFcyX0JVRlJPVU5EKSB8CisJCSgodTMyKSBkYXRhdG9nZ2xlIDw8IERXMl9EQVRBVE9HKSB8CisJCSgodTMyKSBURF9OT1RBQ0NFU1NFRCA8PCBEVzJfQ09NUENPREUpKTsKKworCS8qIERNQSB3aWxsIGFsd2F5cyB0cmFuc2ZlciBidWZmZXIgc2l6ZSBldmVuIGlmIFRPQllDTlQgaW4gRFdPUkQzCisJICAgaXMgc21hbGxlci4gTWFrZSBzdXJlIHdlIGRvbid0IG92ZXJydW4gdGhlIGJ1ZmZlciEKKwkgKi8KKwlpZiAoY291bnQgJiYgY291bnQgPCBtYXhwYWNrZXQpCisJCWV0ZF9idWZfc2l6ZSA9IGNvdW50OworCWVsc2UKKwkJZXRkX2J1Zl9zaXplID0gbWF4cGFja2V0OworCisJZXRkX3dyaXRlbChpbXgyMSwgZXRkX251bSwgMywKKwkJKCh1MzIpIChldGRfYnVmX3NpemUgLSAxKSA8PCBEVzNfQlVGU0laRSkgfCAodTMyKSBjb3VudCk7CisKKwlpZiAoIWNvdW50KQorCQlldGQtPmRtYV9oYW5kbGUgPSAwOworCisJLyogYWxsb2NhdGUgeCBhbmQgeSBidWZmZXIgc3BhY2UgYXQgb25jZSAqLworCWV0ZC0+ZG1lbV9zaXplID0gKGNvdW50ID4gbWF4cGFja2V0KSA/IG1heHBhY2tldCAqIDIgOiBtYXhwYWNrZXQ7CisJZG1lbV9vZmZzZXQgPSBhbGxvY19kbWVtKGlteDIxLCBldGQtPmRtZW1fc2l6ZSwgdXJiX3ByaXYtPmVwKTsKKwlpZiAoZG1lbV9vZmZzZXQgPCAwKSB7CisJCS8qIFNldHVwIGV2ZXJ5dGhpbmcgd2UgY2FuIGluIEhXIGFuZCB1cGRhdGUgd2hlbiB3ZSBnZXQgRE1FTSAqLworCQlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAxLCAodTMyKW1heHBhY2tldCA8PCAxNik7CisKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiUXVldWluZyBldGQgJWQgZm9yIERNRU1cbiIsIGV0ZF9udW0pOworCQlkZWJ1Z191cmJfcXVldWVkX2Zvcl9kbWVtKGlteDIxLCB1cmIpOworCQlsaXN0X2FkZF90YWlsKCZldGQtPnF1ZXVlLCAmaW14MjEtPnF1ZXVlX2Zvcl9kbWVtKTsKKwkJcmV0dXJuOworCX0KKworCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDEsCisJCSgoKHUzMikgZG1lbV9vZmZzZXQgKyAodTMyKSBtYXhwYWNrZXQpIDw8IERXMV9ZQlVGU1JUQUQpIHwKKwkJKHUzMikgZG1lbV9vZmZzZXQpOworCisJdXJiX3ByaXYtPmFjdGl2ZSA9IDE7CisKKwkvKiBlbmFibGUgdGhlIEVURCB0byBraWNrIG9mZiB0cmFuc2ZlciAqLworCWRldl92ZGJnKGlteDIxLT5kZXYsICJBY3RpdmF0aW5nIGV0ZCAlZCBmb3IgJWQgYnl0ZXMgJXNcbiIsCisJCWV0ZF9udW0sIGNvdW50LCBkaXIgIT0gVERfRElSX0lOID8gIm91dCIgOiAiaW4iKTsKKwlhY3RpdmF0ZV9ldGQoaW14MjEsIGV0ZF9udW0sIGV0ZC0+ZG1hX2hhbmRsZSwgZGlyKTsKKworfQorCitzdGF0aWMgdm9pZCBub25pc29jX2V0ZF9kb25lKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGV0ZF9udW0pCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gJmlteDIxLT5ldGRbZXRkX251bV07CisJdTMyIGV0ZF9tYXNrID0gMSA8PCBldGRfbnVtOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlpbnQgZGlyOworCXUxNiB4YnVmYWRkcjsKKwlpbnQgY2M7CisJdTMyIGJ5dGVzX3hmcmQ7CisJaW50IGV0ZF9kb25lOworCisJZGlzYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtKTsKKworCWRpciA9IChldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDApID4+IERXMF9ESVJFQ1QpICYgMHgzOworCXhidWZhZGRyID0gZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAxKSAmIDB4ZmZmZjsKKwljYyA9IChldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDIpID4+IERXMl9DT01QQ09ERSkgJiAweGY7CisJYnl0ZXNfeGZyZCA9IGV0ZC0+bGVuIC0gKGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMykgJiAweDFmZmZmZik7CisKKwkvKiBzYXZlIHRvZ2dsZSBjYXJyeSAqLworCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSwKKwkJICAgICAgKGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMCkgPj4gRFcwX1RPR0NSWSkgJiAweDEpOworCisJaWYgKGRpciA9PSBURF9ESVJfSU4pIHsKKwkJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9YRklMTFNUQVQsIGV0ZF9tYXNrKTsKKwkJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9ZRklMTFNUQVQsIGV0ZF9tYXNrKTsKKwl9CisJZnJlZV9kbWVtKGlteDIxLCB4YnVmYWRkcik7CisKKwl1cmItPmVycm9yX2NvdW50ID0gMDsKKwlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKKwkJCSYmIChjYyA9PSBURF9EQVRBVU5ERVJSVU4pKQorCQljYyA9IFREX0NDX05PRVJST1I7CisKKwlpZiAoY2MgIT0gMCkKKwkJZGV2X3ZkYmcoaW14MjEtPmRldiwgImNjIGlzIDB4JXhcbiIsIGNjKTsKKworCWV0ZF9kb25lID0gKGNjX3RvX2Vycm9yW2NjXSAhPSAwKTsJLyogc3RvcCBpZiBlcnJvciAqLworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQlzd2l0Y2ggKHVyYl9wcml2LT5zdGF0ZSkgeworCQljYXNlIFVTX0NUUkxfU0VUVVA6CisJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMCkKKwkJCQl1cmJfcHJpdi0+c3RhdGUgPSBVU19DVFJMX0RBVEE7CisJCQllbHNlCisJCQkJdXJiX3ByaXYtPnN0YXRlID0gVVNfQ1RSTF9BQ0s7CisJCQlicmVhazsKKwkJY2FzZSBVU19DVFJMX0RBVEE6CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gYnl0ZXNfeGZyZDsKKwkJCXVyYl9wcml2LT5zdGF0ZSA9IFVTX0NUUkxfQUNLOworCQkJYnJlYWs7CisJCWNhc2UgVVNfQ1RSTF9BQ0s6CisJCQlldGRfZG9uZSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaW14MjEtPmRldiwKKwkJCQkiSW52YWxpZCBwaXBlIHN0YXRlICVkXG4iLCB1cmJfcHJpdi0+c3RhdGUpOworCQkJZXRkX2RvbmUgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBJUEVfQlVMSzoKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGJ5dGVzX3hmcmQ7CisJCWlmICgodXJiX3ByaXYtPnN0YXRlID09IFVTX0JVTEspCisJCSAgICAmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkKKwkJICAgICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDAKKwkJICAgICYmICgodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUKKwkJCSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsCisJCQkJICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSA9PSAwKSkgeworCQkJLyogbmVlZCBhIDAtcGFja2V0ICovCisJCQl1cmJfcHJpdi0+c3RhdGUgPSBVU19CVUxLMDsKKwkJfSBlbHNlIHsKKwkJCWV0ZF9kb25lID0gMTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBieXRlc194ZnJkOworCQlldGRfZG9uZSA9IDE7CisJCWJyZWFrOworCX0KKworCWlmICghZXRkX2RvbmUpIHsKKwkJZGV2X3ZkYmcoaW14MjEtPmRldiwgIm5leHQgc3RhdGU9JWRcbiIsIHVyYl9wcml2LT5zdGF0ZSk7CisJCXNjaGVkdWxlX25vbmlzb2NfZXRkKGlteDIxLCB1cmIpOworCX0gZWxzZSB7CisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSB1cmItPmVwOworCisJCXVyYl9kb25lKGhjZCwgdXJiLCBjY190b19lcnJvcltjY10pOworCQlldGQtPnVyYiA9IE5VTEw7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+dXJiX2xpc3QpKSB7CisJCQl1cmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlcC0+dXJiX2xpc3QsCisJCQkJc3RydWN0IHVyYiwgdXJiX2xpc3QpOworCQkJZGV2X3ZkYmcoaW14MjEtPmRldiwgIm5leHQgVVJCICVwXG4iLCB1cmIpOworCQkJc2NoZWR1bGVfbm9uaXNvY19ldGQoaW14MjEsIHVyYik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXBfcHJpdiAqYWxsb2NfZXAodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKworCWVwX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXBfcHJpdiksIEdGUF9BVE9NSUMpOworCWlmICghZXBfcHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lTT19FVERTOyArK2kpCisJCWVwX3ByaXYtPmV0ZFtpXSA9IC0xOworCisJcmV0dXJuIGVwX3ByaXY7Cit9CisKK3N0YXRpYyBpbnQgaW14MjFfaGNfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQlzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9IHVyYi0+ZXA7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5ld19lcCA9IDA7CisKKwlkZXZfdmRiZyhpbXgyMS0+ZGV2LAorCQkiZW5xdWV1ZSB1cmI9JXAgZXA9JXAgbGVuPSVkICIKKwkJImJ1ZmZlcj0lcCBkbWE9JTA4WCBzZXR1cEJ1Zj0lcCBzZXR1cERtYT0lMDhYXG4iLAorCQl1cmIsIGVwLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSwKKwkJdXJiLT5zZXR1cF9wYWNrZXQsIHVyYi0+c2V0dXBfZG1hKTsKKworCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKKwkJcmV0dXJuIGlteDIxX2hjX3VyYl9lbnF1ZXVlX2lzb2MoaGNkLCBlcCwgdXJiLCBtZW1fZmxhZ3MpOworCisJdXJiX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiX3ByaXYpLCBtZW1fZmxhZ3MpOworCWlmICghdXJiX3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwllcF9wcml2ID0gZXAtPmhjcHJpdjsKKwlpZiAoZXBfcHJpdiA9PSBOVUxMKSB7CisJCWVwX3ByaXYgPSBhbGxvY19lcCgpOworCQlpZiAoIWVwX3ByaXYpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxlZF9hbGxvY19lcDsKKwkJfQorCQllcC0+aGNwcml2ID0gZXBfcHJpdjsKKwkJZXBfcHJpdi0+ZXAgPSBlcDsKKwkJbmV3X2VwID0gMTsKKwl9CisKKwlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF9saW5rOworCisJdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwl1cmItPmVycm9yX2NvdW50ID0gMDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXVyYl9wcml2LT5lcCA9IGVwOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQl1cmJfcHJpdi0+c3RhdGUgPSBVU19DVFJMX1NFVFVQOworCQlicmVhazsKKwljYXNlIFBJUEVfQlVMSzoKKwkJdXJiX3ByaXYtPnN0YXRlID0gVVNfQlVMSzsKKwkJYnJlYWs7CisJfQorCisJZGVidWdfdXJiX3N1Ym1pdHRlZChpbXgyMSwgdXJiKTsKKwlpZiAoZXBfcHJpdi0+ZXRkWzBdIDwgMCkgeworCQlpZiAoZXBfcHJpdi0+d2FpdGluZ19ldGQpIHsKKwkJCWRldl9kYmcoaW14MjEtPmRldiwKKwkJCQkibm8gRVREIGF2YWlsYWJsZSBhbHJlYWR5IHF1ZXVlZCAlcFxuIiwKKwkJCQllcF9wcml2KTsKKwkJCWRlYnVnX3VyYl9xdWV1ZWRfZm9yX2V0ZChpbXgyMSwgdXJiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVwX3ByaXYtPmV0ZFswXSA9IGFsbG9jX2V0ZChpbXgyMSk7CisJCWlmIChlcF9wcml2LT5ldGRbMF0gPCAwKSB7CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkJIm5vIEVURCBhdmFpbGFibGUgcXVldWVpbmcgJXBcbiIsIGVwX3ByaXYpOworCQkJZGVidWdfdXJiX3F1ZXVlZF9mb3JfZXRkKGlteDIxLCB1cmIpOworCQkJbGlzdF9hZGRfdGFpbCgmZXBfcHJpdi0+cXVldWUsICZpbXgyMS0+cXVldWVfZm9yX2V0ZCk7CisJCQllcF9wcml2LT53YWl0aW5nX2V0ZCA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIFNjaGVkdWxlIGlmIG5vIFVSQiBhbHJlYWR5IGFjdGl2ZSBmb3IgdGhpcyBlbmRwb2ludCAqLworCWV0ZCA9ICZpbXgyMS0+ZXRkW2VwX3ByaXYtPmV0ZFswXV07CisJaWYgKGV0ZC0+dXJiID09IE5VTEwpIHsKKwkJREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGxhc3RfcmVxKTsKKwkJc2NoZWR1bGVfbm9uaXNvY19ldGQoaW14MjEsIHVyYik7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKKworZmFpbGVkX2xpbms6CitmYWlsZWRfYWxsb2NfZXA6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlrZnJlZSh1cmJfcHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXgyMV9oY191cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCBlcF9wcml2ICplcF9wcml2OworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWRldl92ZGJnKGlteDIxLT5kZXYsICJkZXF1ZXVlIHVyYj0lcCBpc289JWQgc3RhdHVzPSVkXG4iLAorCQl1cmIsIHVzYl9waXBlaXNvYyh1cmItPnBpcGUpLCBzdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSB1c2JfaGNkX2NoZWNrX3VubGlua191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCWVwID0gdXJiX3ByaXYtPmVwOworCWVwX3ByaXYgPSBlcC0+aGNwcml2OworCisJZGVidWdfdXJiX3VubGlua2VkKGlteDIxLCB1cmIpOworCisJaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKSB7CisJCWRlcXVldWVfaXNvY191cmIoaW14MjEsIHVyYiwgZXBfcHJpdik7CisJCXNjaGVkdWxlX2lzb2NfZXRkcyhoY2QsIGVwKTsKKwl9IGVsc2UgaWYgKHVyYl9wcml2LT5hY3RpdmUpIHsKKwkJaW50IGV0ZF9udW0gPSBlcF9wcml2LT5ldGRbMF07CisJCWlmIChldGRfbnVtICE9IC0xKSB7CisJCQlkaXNhY3RpdmF0ZV9ldGQoaW14MjEsIGV0ZF9udW0pOworCQkJZnJlZV9kbWVtKGlteDIxLCBldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDEpICYgMHhmZmZmKTsKKwkJCWlteDIxLT5ldGRbZXRkX251bV0udXJiID0gTlVMTDsKKwkJfQorCX0KKworCXVyYl9kb25lKGhjZCwgdXJiLCBzdGF0dXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEludGVycnVwdCBkaXNwYXRjaAkgCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIHZvaWQgcHJvY2Vzc19ldGRzKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBzb2YpCit7CisJaW50IGV0ZF9udW07CisJaW50IGVuYWJsZV9zb2ZfaW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGV0ZF9udW0gPSAwOyBldGRfbnVtIDwgVVNCX05VTV9FVEQ7IGV0ZF9udW0rKykgeworCQl1MzIgZXRkX21hc2sgPSAxIDw8IGV0ZF9udW07CisJCXUzMiBlbmFibGVkID0gcmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX0VUREVOU0VUKSAmIGV0ZF9tYXNrOworCQl1MzIgZG9uZSA9IHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9FVERET05FU1RBVCkgJiBldGRfbWFzazsKKwkJc3RydWN0IGV0ZF9wcml2ICpldGQgPSAmaW14MjEtPmV0ZFtldGRfbnVtXTsKKworCisJCWlmIChkb25lKSB7CisJCQlERUJVR19MT0dfRlJBTUUoaW14MjEsIGV0ZCwgbGFzdF9pbnQpOworCQl9IGVsc2UgeworLyoKKyAqIEtsdWRnZSB3YXJuaW5nIQorICoKKyAqIFdoZW4gbXVsdGlwbGUgdHJhbnNmZXJzIGFyZSB1c2luZyB0aGUgYnVzIHdlIHNvbWV0aW1lcyBnZXQgaW50byBhIHN0YXRlCisgKiB3aGVyZSB0aGUgdHJhbnNmZXIgaGFzIGNvbXBsZXRlZCAodGhlIENDIGZpZWxkIG9mIHRoZSBFVEQgaXMgIT0gMHgwRiksCisgKiB0aGUgRVREIGhhcyBzZWxmIGRpc2FibGVkIGJ1dCB0aGUgRVRERE9ORVNUQVQgZmxhZyBpcyBub3Qgc2V0CisgKiAoYW5kIGhlbmNlIG5vIGludGVycnVwdCBvY2N1cnMpLgorICogVGhpcyBjYXVzZXMgdGhlIHRyYW5zZmVyIGluIHF1ZXN0aW9uIHRvIGhhbmcuCisgKiBUaGUga2x1ZGdlIGJlbG93IGNoZWNrcyBmb3IgdGhpcyBjb25kaXRpb24gYXQgZWFjaCBTT0YgYW5kIHByb2Nlc3NlcyBhbnkKKyAqIGJsb2NrZWQgRVREcyAoYWZ0ZXIgYW4gYXJiaXRhcnkgMTAgZnJhbWUgd2FpdCkKKyAqCisgKiBXaXRoIGEgc2luZ2xlIGFjdGl2ZSB0cmFuc2ZlciB0aGUgdXNidGVzdCB0ZXN0IHN1aXRlIHdpbGwgcnVuIGZvciBkYXlzCisgKiB3aXRob3V0IHRoZSBrbHVkZ2UuCisgKiBXaXRoIG90aGVyIGJ1cyBhY3Rpdml0eSAoZWcgbWFzcyBzdG9yYWdlKSBldmVuIGp1c3QgdGVzdDEgd2lsbCBoYW5nIHdpdGhvdXQKKyAqIHRoZSBrbHVkZ2UuCisgKi8KKwkJCXUzMiBkd29yZDA7CisJCQlpbnQgY2M7CisKKwkJCWlmIChldGQtPmFjdGl2ZV9jb3VudCAmJiAhZW5hYmxlZCkgLyogc3VzcGljaW91cy4uLiAqLworCQkJCWVuYWJsZV9zb2ZfaW50ID0gMTsKKworCQkJaWYgKCFzb2YgfHwgZW5hYmxlZCB8fCAhZXRkLT5hY3RpdmVfY291bnQpCisJCQkJY29udGludWU7CisKKwkJCWNjID0gZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAyKSA+PiBEVzJfQ09NUENPREU7CisJCQlpZiAoY2MgPT0gVERfTk9UQUNDRVNTRUQpCisJCQkJY29udGludWU7CisKKwkJCWlmICgrK2V0ZC0+YWN0aXZlX2NvdW50IDwgMTApCisJCQkJY29udGludWU7CisKKwkJCWR3b3JkMCA9IGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMCk7CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkJInVuYmxvY2sgRVREICVkIGRldj0weCVYIGVwPTB4JVggY2M9MHglMDJYIVxuIiwKKwkJCQlldGRfbnVtLCBkd29yZDAgJiAweDdGLAorCQkJCShkd29yZDAgPj4gRFcwX0VORFBOVCkgJiAweDBGLAorCQkJCWNjKTsKKworI2lmZGVmIERFQlVHCisJCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkJImZyYW1lOiBhY3Q9JWQgZGlzYWN0PSVkIgorCQkJCSIgaW50PSVkIHJlcT0lZCBjdXI9JWRcbiIsCisJCQkJZXRkLT5hY3RpdmF0ZWRfZnJhbWUsCisJCQkJZXRkLT5kaXNhY3RpdmF0ZWRfZnJhbWUsCisJCQkJZXRkLT5sYXN0X2ludF9mcmFtZSwKKwkJCQlldGQtPmxhc3RfcmVxX2ZyYW1lLAorCQkJCXJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9GUk1OVUIpKTsKKwkJCWlteDIxLT5kZWJ1Z191bmJsb2NrcysrOworI2VuZGlmCisJCQlldGQtPmFjdGl2ZV9jb3VudCA9IDA7CisvKiBFbmQgb2Yga2x1ZGdlICovCisJCX0KKworCQlpZiAoZXRkLT5lcCA9PSBOVUxMIHx8IGV0ZC0+dXJiID09IE5VTEwpIHsKKwkJCWRldl9kYmcoaW14MjEtPmRldiwKKwkJCQkiSW50ZXJydXB0IGZvciB1bmV4cGVjdGVkIGV0ZCAlZCIKKwkJCQkiIGVwPSVwIHVyYj0lcFxuIiwKKwkJCQlldGRfbnVtLCBldGQtPmVwLCBldGQtPnVyYik7CisJCQlkaXNhY3RpdmF0ZV9ldGQoaW14MjEsIGV0ZF9udW0pOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodXNiX3BpcGVpc29jKGV0ZC0+dXJiLT5waXBlKSkKKwkJCWlzb2NfZXRkX2RvbmUoaGNkLCBldGQtPnVyYiwgZXRkX251bSk7CisJCWVsc2UKKwkJCW5vbmlzb2NfZXRkX2RvbmUoaGNkLCBldGQtPnVyYiwgZXRkX251bSk7CisJfQorCisJLyogb25seSBlbmFibGUgU09GIGludGVycnVwdCBpZiBpdCBtYXkgYmUgbmVlZGVkIGZvciB0aGUga2x1ZGdlICovCisJaWYgKGVuYWJsZV9zb2ZfaW50KQorCQlzZXRfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCSF9TWVNJRU4sIFVTQkhfU1lTSUVOX1NPRklOVCk7CisJZWxzZQorCQljbGVhcl9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JIX1NZU0lFTiwgVVNCSF9TWVNJRU5fU09GSU5UKTsKKworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlteDIxX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwl1MzIgaW50cyA9IHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9TWVNJU1IpOworCisJaWYgKGludHMgJiBVU0JIX1NZU0lFTl9IRVJSSU5UKQorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJTY2hlZHVsaW5nIGVycm9yXG4iKTsKKworCWlmIChpbnRzICYgVVNCSF9TWVNJRU5fU09SSU5UKQorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJTY2hlZHVsaW5nIG92ZXJydW5cbiIpOworCisJaWYgKGludHMgJiAoVVNCSF9TWVNJU1JfRE9ORUlOVCB8IFVTQkhfU1lTSVNSX1NPRklOVCkpCisJCXByb2Nlc3NfZXRkcyhoY2QsIGlteDIxLCBpbnRzICYgVVNCSF9TWVNJU1JfU09GSU5UKTsKKworCXdyaXRlbChpbnRzLCBpbXgyMS0+cmVncyArIFVTQkhfU1lTSVNSKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlteDIxX2hjX2VuZHBvaW50X2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlcF9wcml2ICplcF9wcml2OworCWludCBpOworCisJaWYgKGVwID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCWVwX3ByaXYgPSBlcC0+aGNwcml2OworCWRldl92ZGJnKGlteDIxLT5kZXYsICJkaXNhYmxlIGVwPSVwLCBlcC0+aGNwcml2PSVwXG4iLCBlcCwgZXBfcHJpdik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT51cmJfbGlzdCkpCisJCWRldl9kYmcoaW14MjEtPmRldiwgImVwJ3MgVVJCIGxpc3QgaXMgbm90IGVtcHR5XG4iKTsKKworCWlmIChlcF9wcml2ICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9JU09fRVREUzsgaSsrKSB7CisJCQlpZiAoZXBfcHJpdi0+ZXRkW2ldID4gLTEpCisJCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiZnJlZSBldGQgJWQgZm9yIGRpc2FibGVcbiIsCisJCQkJCWVwX3ByaXYtPmV0ZFtpXSk7CisKKwkJCWZyZWVfZXRkKGlteDIxLCBlcF9wcml2LT5ldGRbaV0pOworCQl9CisJCWtmcmVlKGVwX3ByaXYpOworCQllcC0+aGNwcml2ID0gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX05VTV9FVEQ7IGkrKykgeworCQlpZiAoaW14MjEtPmV0ZFtpXS5hbGxvYyAmJiBpbXgyMS0+ZXRkW2ldLmVwID09IGVwKSB7CisJCQlkZXZfZXJyKGlteDIxLT5kZXYsCisJCQkJIkFjdGl2ZSBldGQgJWQgZm9yIGRpc2FibGVkIGVwPSVwIVxuIiwgaSwgZXApOworCQkJZnJlZV9ldGQoaW14MjEsIGkpOworCQl9CisJfQorCWZyZWVfZXBkbWVtKGlteDIxLCBlcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogSHViIGhhbmRsaW5nCQkgCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIGludCBnZXRfaHViX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCSAgICAgIHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CS8qIEhVQiBkZXNjcmlwdG9yICovCisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisKKwlkZXNjLT5iTmJyUG9ydHMgPSByZWFkbChpbXgyMS0+cmVncyArIFVTQkhfUk9PVEhVQkEpCisJCSYgVVNCSF9ST09USFVCQV9ORE5TVE1QUlRfTUFTSzsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAwOworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNikgY3B1X3RvX2xlMTYoCisJCTB4MDAwMiB8CS8qIE5vIHBvd2VyIHN3aXRjaGluZyAqLworCQkweDAwMTAgfAkvKiBObyBvdmVyIGN1cnJlbnQgcHJvdGVjdGlvbiAqLworCQkwKTsKKworCWRlc2MtPmJpdG1hcFswXSA9IDEgPDwgMTsKKwlkZXNjLT5iaXRtYXBbMV0gPSB+MDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXgyMV9oY19odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlpbnQgcG9ydHM7CisJaW50IGNoYW5nZWQgPSAwOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlwb3J0cyA9IHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9ST09USFVCQSkKKwkJJiBVU0JIX1JPT1RIVUJBX05ETlNUTVBSVF9NQVNLOworCWlmIChwb3J0cyA+IDcpIHsKKwkJcG9ydHMgPSA3OworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJwb3J0cyAlZCA+IDdcbiIsIHBvcnRzKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsKKwkJaWYgKHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9QT1JUU1RBVChpKSkgJgorCQkJKFVTQkhfUE9SVFNUQVRfQ09OTkVDVFNDIHwKKwkJCVVTQkhfUE9SVFNUQVRfUFJURU5CTFNDIHwKKwkJCVVTQkhfUE9SVFNUQVRfUFJUU1RBVFNDIHwKKwkJCVVTQkhfUE9SVFNUQVRfT1ZSQ1VSSUMgfAorCQkJVVNCSF9QT1JUU1RBVF9QUlRSU1RTQykpIHsKKworCQkJY2hhbmdlZCA9IDE7CisJCQlidWZbMF0gfD0gMSA8PCAoaSArIDEpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY2hhbmdlZCkKKwkJZGV2X2luZm8oaW14MjEtPmRldiwgIkh1YiBzdGF0dXMgY2hhbmdlZFxuIik7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgaW14MjFfaGNfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQl1MTYgdHlwZVJlcSwKKwkJCQl1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlpbnQgcmMgPSAwOworCXUzMiBzdGF0dXNfd3JpdGUgPSAwOworCisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCWRldl9kYmcoaW14MjEtPmRldiwgIkNsZWFySHViRmVhdHVyZVxuIik7CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIE9WRVJfQ1VSUkVOVFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBMT0NBTF9QT1dFUlxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICB1bmtub3duXG4iKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJDbGVhclBvcnRGZWF0dXJlXG4iKTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBFTkFCTEVcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9DVVJDT05TVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBTVVNQRU5EXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfUFJUT1ZSQ1VSSTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgUE9XRVJcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9MU0RFVkNPTjsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgQ19FTkFCTEVcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9QUlRFTkJMU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBDX1NVU1BFTkRcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9QUlRTVEFUU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBDX0NPTk5FQ1RJT05cbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9DT05ORUNUU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIENfT1ZFUl9DVVJSRU5UXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfT1ZSQ1VSSUM7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgQ19SRVNFVFxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX1BSVFJTVFNDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgdW5rbm93blxuIik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJHZXRIdWJEZXNjcmlwdG9yXG4iKTsKKwkJcmMgPSBnZXRfaHViX2Rlc2NyaXB0b3IoaGNkLCAodm9pZCAqKWJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgR2V0SHViU3RhdHVzXG4iKTsKKwkJKihfX2xlMzIgKikgYnVmID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWRldl9kYmcoaW14MjEtPmRldiwgIkdldFBvcnRTdGF0dXM6IHBvcnQ6ICVkLCAweCV4XG4iLAorCQkgICAgd0luZGV4LCBVU0JIX1BPUlRTVEFUKHdJbmRleCAtIDEpKTsKKwkJKihfX2xlMzIgKikgYnVmID0gcmVhZGwoaW14MjEtPnJlZ3MgKworCQkJVVNCSF9QT1JUU1RBVCh3SW5kZXggLSAxKSk7CisJCWJyZWFrOworCisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJTZXRIdWJGZWF0dXJlXG4iKTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgT1ZFUl9DVVJSRU5UXG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgTE9DQUxfUE9XRVJcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgdW5rbm93blxuIik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiU2V0UG9ydEZlYXR1cmVcbiIpOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBTVVNQRU5EXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfUFJUU1VTUFNUOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBQT1dFUlxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX1BSVFBXUlNUOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBSRVNFVFxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX1BSVFJTVFNUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgdW5rbm93blxuIik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgdW5rbm93blxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0YXR1c193cml0ZSkKKwkJd3JpdGVsKHN0YXR1c193cml0ZSwgaW14MjEtPnJlZ3MgKyBVU0JIX1BPUlRTVEFUKHdJbmRleCAtIDEpKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEhvc3QgY29udHJvbGxlciBtYW5hZ2VtZW50IAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQgaW14MjFfaGNfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCS8qIFJlc2V0IHRoZSBIb3N0IGNvbnRyb2xlciBtb2R1bGVzICovCisJd3JpdGVsKFVTQk9UR19SU1RfUlNUQ1RSTCB8IFVTQk9UR19SU1RfUlNUUkggfAorCQlVU0JPVEdfUlNUX1JTVEhTSUUgfCBVU0JPVEdfUlNUX1JTVEhDLAorCQlpbXgyMS0+cmVncyArIFVTQk9UR19SU1RfQ1RSTCk7CisKKwkvKiBXYWl0IGZvciByZXNldCB0byBmaW5pc2ggKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIEhaOworCXdoaWxlIChyZWFkbChpbXgyMS0+cmVncyArIFVTQk9UR19SU1RfQ1RSTCkgIT0gMCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwkJCWRldl9lcnIoaW14MjEtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgcmVzZXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZpbXgyMS0+bG9jayk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCXNwaW5fbG9ja19pcnEoJmlteDIxLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaW14MjFfaGNfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKKwl1MzIgaHdfbW9kZSA9IFVTQk9UR19IV01PREVfQ1JFQ0ZHX0hPU1Q7CisJdTMyIHVzYl9jb250cm9sID0gMDsKKworCWh3X21vZGUgfD0gKChpbXgyMS0+cGRhdGEtPmhvc3RfeGN2ciA8PCBVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX1NISUZUKSAmCisJCQlVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX01BU0spOworCWh3X21vZGUgfD0gKChpbXgyMS0+cGRhdGEtPm90Z194Y3ZyIDw8IFVTQk9UR19IV01PREVfT1RHWENWUl9TSElGVCkgJgorCQkJVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX01BU0spOworCisJaWYgKGlteDIxLT5wZGF0YS0+aG9zdDFfdHhlbm9lKQorCQl1c2JfY29udHJvbCB8PSBVU0JDVFJMX0hPU1QxX1RYRU5fT0U7CisKKwlpZiAoIWlteDIxLT5wZGF0YS0+aG9zdDFfeGN2ZXJsZXNzKQorCQl1c2JfY29udHJvbCB8PSBVU0JDVFJMX0hPU1QxX0JZUF9UTEw7CisKKwlpZiAoaW14MjEtPnBkYXRhLT5vdGdfZXh0X3hjdnIpCisJCXVzYl9jb250cm9sIHw9IFVTQkNUUkxfT1RDX1JDVl9SWERQOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCXdyaXRlbCgoVVNCT1RHX0NMS19DVFJMX0hTVCB8IFVTQk9UR19DTEtfQ1RSTF9NQUlOKSwKKwkJaW14MjEtPnJlZ3MgKyBVU0JPVEdfQ0xLX0NUUkwpOworCXdyaXRlbChod19tb2RlLCBpbXgyMS0+cmVncyArIFVTQk9UR19IV01PREUpOworCXdyaXRlbCh1c2JfY29udHJvbCwgaW14MjEtPnJlZ3MgKyBVU0JDVFJMKTsKKwl3cml0ZWwoVVNCX01JU0NDT05UUk9MX1NLUFJUUlkgIHwgVVNCX01JU0NDT05UUk9MX0FSQk1PREUsCisJCWlteDIxLT5yZWdzICsgVVNCX01JU0NDT05UUk9MKTsKKworCS8qIENsZWFyIHRoZSBFVERzICovCisJZm9yIChpID0gMDsgaSA8IFVTQl9OVU1fRVREOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCisJCQlldGRfd3JpdGVsKGlteDIxLCBpLCBqLCAwKTsKKworCS8qIFRha2UgdGhlIEhDIG91dCBvZiByZXNldCAqLworCXdyaXRlbChVU0JIX0hPU1RfQ1RSTF9IQ1VTQlNURV9PUEVSQVRJT05BTCB8IFVTQkhfSE9TVF9DVFJMX0NUTEJMS1NSXzEsCisJCWlteDIxLT5yZWdzICsgVVNCSF9IT1NUX0NUUkwpOworCisJLyogRW5hYmxlIHBvcnRzICovCisJaWYgKGlteDIxLT5wZGF0YS0+ZW5hYmxlX290Z19ob3N0KQorCQl3cml0ZWwoVVNCSF9QT1JUU1RBVF9QUlRQV1JTVCB8IFVTQkhfUE9SVFNUQVRfUFJURU5BQlNULAorCQkJaW14MjEtPnJlZ3MgKyBVU0JIX1BPUlRTVEFUKDApKTsKKworCWlmIChpbXgyMS0+cGRhdGEtPmVuYWJsZV9ob3N0MSkKKwkJd3JpdGVsKFVTQkhfUE9SVFNUQVRfUFJUUFdSU1QgfCBVU0JIX1BPUlRTVEFUX1BSVEVOQUJTVCwKKwkJCWlteDIxLT5yZWdzICsgVVNCSF9QT1JUU1RBVCgxKSk7CisKKwlpZiAoaW14MjEtPnBkYXRhLT5lbmFibGVfaG9zdDIpCisJCXdyaXRlbChVU0JIX1BPUlRTVEFUX1BSVFBXUlNUIHwgVVNCSF9QT1JUU1RBVF9QUlRFTkFCU1QsCisJCQlpbXgyMS0+cmVncyArIFVTQkhfUE9SVFNUQVQoMikpOworCisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworCS8qIEVuYWJsZSBob3N0IGNvbnRyb2xsZXIgaW50ZXJydXB0cyAqLworCXNldF9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JIX1NZU0lFTiwKKwkJVVNCSF9TWVNJRU5fSEVSUklOVCB8CisJCVVTQkhfU1lTSUVOX0RPTkVJTlQgfCBVU0JIX1NZU0lFTl9TT1JJTlQpOworCXNldF9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JPVEdfQ0lOVF9TVEVOLCBVU0JPVEdfSENJTlQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbXgyMV9oY19zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCXdyaXRlbCgwLCBpbXgyMS0+cmVncyArIFVTQkhfU1lTSUVOKTsKKwljbGVhcl9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JPVEdfQ0lOVF9TVEVOLCBVU0JPVEdfSENJTlQpOworCWNsZWFyX3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQk9UR19DTEtfQ1RSTF9IU1QgfCBVU0JPVEdfQ0xLX0NUUkxfTUFJTiwKKwkJCQkJVVNCT1RHX0NMS19DVFJMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBEcml2ZXIgZ2x1ZQkJIAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIGlteDIxX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0gIklNWDIxIFVTQiBIb3N0IENvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbXgyMSksCisKKwkuZmxhZ3MgPSBIQ0RfVVNCMTEsCisJLmlycSA9IGlteDIxX2lycSwKKworCS5yZXNldCA9IGlteDIxX2hjX3Jlc2V0LAorCS5zdGFydCA9IGlteDIxX2hjX3N0YXJ0LAorCS5zdG9wID0gaW14MjFfaGNfc3RvcCwKKworCS8qIEkvTyByZXF1ZXN0cyAqLworCS51cmJfZW5xdWV1ZSA9IGlteDIxX2hjX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IGlteDIxX2hjX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0gaW14MjFfaGNfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qIHNjaGVkdWxpbmcgc3VwcG9ydCAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0gaW14MjFfaGNfZ2V0X2ZyYW1lLAorCisJLyogUm9vdCBodWIgc3VwcG9ydCAqLworCS5odWJfc3RhdHVzX2RhdGEgPSBpbXgyMV9oY19odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0gaW14MjFfaGNfaHViX2NvbnRyb2wsCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXgyMV91c2JoX3BsYXRmb3JtX2RhdGEgZGVmYXVsdF9wZGF0YSA9IHsKKwkuaG9zdF94Y3ZyID0gTVgyMV9VU0JYQ1ZSX1RYRElGX1JYRElGLAorCS5vdGdfeGN2ciA9IE1YMjFfVVNCWENWUl9UWERJRl9SWERJRiwKKwkuZW5hYmxlX2hvc3QxID0gMSwKKwkuZW5hYmxlX2hvc3QyID0gMSwKKwkuZW5hYmxlX290Z19ob3N0ID0gMSwKKworfTsKKworc3RhdGljIGludCBpbXgyMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCXJlbW92ZV9kZWJ1Z19maWxlcyhpbXgyMSk7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKworCWlmIChyZXMgIT0gTlVMTCkgeworCQljbGtfZGlzYWJsZShpbXgyMS0+Y2xrKTsKKwkJY2xrX3B1dChpbXgyMS0+Y2xrKTsKKwkJaW91bm1hcChpbXgyMS0+cmVncyk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCX0KKworCWtmcmVlKGhjZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpbXgyMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGlteDIxICppbXgyMTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCWludCBpcnE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgaW14MjFfaGNfZHJpdmVyLnByb2R1Y3RfZGVzYyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVOWElPOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmlteDIxX2hjX2RyaXZlciwKKwkJJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmIChoY2QgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY3JlYXRlIGhjZCAoJXMpXG4iLAorCQkgICAgZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCWlteDIxLT5kZXYgPSAmcGRldi0+ZGV2OworCWlteDIxLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghaW14MjEtPnBkYXRhKQorCQlpbXgyMS0+cGRhdGEgPSAmZGVmYXVsdF9wZGF0YTsKKworCXNwaW5fbG9ja19pbml0KCZpbXgyMS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmlteDIxLT5kbWVtX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpbXgyMS0+cXVldWVfZm9yX2V0ZCk7CisJSU5JVF9MSVNUX0hFQUQoJmlteDIxLT5xdWV1ZV9mb3JfZG1lbSk7CisJY3JlYXRlX2RlYnVnX2ZpbGVzKGlteDIxKTsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIGhjZF9uYW1lKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbGVkX3JlcXVlc3RfbWVtOworCX0KKworCWlteDIxLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChpbXgyMS0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoaW14MjEtPmRldiwgIkNhbm5vdCBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfaW9yZW1hcDsKKwl9CisKKwkvKiBFbmFibGUgY2xvY2tzIHNvdXJjZSAqLworCWlteDIxLT5jbGsgPSBjbGtfZ2V0KGlteDIxLT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoaW14MjEtPmNsaykpIHsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAibm8gY2xvY2sgZm91bmRcbiIpOworCQlyZXQgPSBQVFJfRVJSKGlteDIxLT5jbGspOworCQlnb3RvIGZhaWxlZF9jbG9ja19nZXQ7CisJfQorCisJcmV0ID0gY2xrX3NldF9yYXRlKGlteDIxLT5jbGssIGNsa19yb3VuZF9yYXRlKGlteDIxLT5jbGssIDQ4MDAwMDAwKSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfY2xvY2tfc2V0OworCXJldCA9IGNsa19lbmFibGUoaW14MjEtPmNsayk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfY2xvY2tfZW5hYmxlOworCisJZGV2X2luZm8oaW14MjEtPmRldiwgIkhhcmR3YXJlIEhDIHJldmlzaW9uOiAweCUwMlhcbiIsCisJCShyZWFkbChpbXgyMS0+cmVncyArIFVTQk9UR19IV01PREUpID4+IDE2KSAmIDB4RkYpOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJ1c2JfYWRkX2hjZCgpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWxlZF9hZGRfaGNkOworCX0KKworCXJldHVybiAwOworCitmYWlsZWRfYWRkX2hjZDoKKwljbGtfZGlzYWJsZShpbXgyMS0+Y2xrKTsKK2ZhaWxlZF9jbG9ja19lbmFibGU6CitmYWlsZWRfY2xvY2tfc2V0OgorCWNsa19wdXQoaW14MjEtPmNsayk7CitmYWlsZWRfY2xvY2tfZ2V0OgorCWlvdW5tYXAoaW14MjEtPnJlZ3MpOworZmFpbGVkX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CitmYWlsZWRfcmVxdWVzdF9tZW06CisJcmVtb3ZlX2RlYnVnX2ZpbGVzKGlteDIxKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteDIxX2hjZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAoY2hhciAqKWhjZF9uYW1lLAorCQkgICB9LAorCS5wcm9iZSA9IGlteDIxX3Byb2JlLAorCS5yZW1vdmUgPSBpbXgyMV9yZW1vdmUsCisJLnN1c3BlbmQgPSBOVUxMLAorCS5yZXN1bWUgPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14MjFfaGNkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbXgyMV9oY2RfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteDIxX2hjZF9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlteDIxX2hjZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpbXgyMV9oY2RfaW5pdCk7Cittb2R1bGVfZXhpdChpbXgyMV9oY2RfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWDIxIFVTQiBIb3N0IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcnRpbiBGdXp6ZXkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aW14MjEtaGNkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBkOTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuaApAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIE1hY3JvcyBhbmQgcHJvdG90eXBlcyBmb3IgaS5NWDIxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExvcGluZyBEb2cgRW1iZWRkZWQgU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBGdXp6ZXkKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBKYXkgTW9ua21hbiA8anRtQGxvcGluZ2RvZy5jb20+CisgKiBQb3J0ZWQgdG8gMi42LjMwLCBkZWJ1Z2dlZCBhbmQgZW5oYW5jZWQgYnkgTWFydGluIEZ1enpleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9JTVgyMV9IQ0RfSF9fCisjZGVmaW5lIF9fTElOVVhfSU1YMjFfSENEX0hfXworCisjaW5jbHVkZSA8bWFjaC9teDIxLXVzYmhvc3QuaD4KKworI2RlZmluZSBOVU1fSVNPX0VURFMgCTIKKyNkZWZpbmUgVVNCX05VTV9FVEQJMzIKKyNkZWZpbmUgRE1FTV9TSVpFICAgCTQwOTYKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVVNCT1RHX0hXTU9ERQkJMHgwMAorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0FOQVNEQkVOCQkoMSA8PCAxNCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX1NISUZUCTYKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX01BU0sJKDMgPDwgNikKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX1REX1JECSgwIDw8IDYpCisjZGVmaW5lIFVTQk9UR19IV01PREVfT1RHWENWUl9UU19SRAkoMiA8PCA2KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX09UR1hDVlJfVERfUlMJKDEgPDwgNikKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX1RTX1JTCSgzIDw8IDYpCisjZGVmaW5lIFVTQk9UR19IV01PREVfSE9TVFhDVlJfU0hJRlQJNAorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX01BU0sJKDMgPDwgNCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9URF9SRAkoMCA8PCA0KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX1RTX1JECSgyIDw8IDQpCisjZGVmaW5lIFVTQk9UR19IV01PREVfSE9TVFhDVlJfVERfUlMJKDEgPDwgNCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9UU19SUwkoMyA8PCA0KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0NSRUNGR19NQVNLCSgzIDw8IDApCisjZGVmaW5lIFVTQk9UR19IV01PREVfQ1JFQ0ZHX0hPU1QJKDEgPDwgMCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9DUkVDRkdfRlVOQwkoMiA8PCAwKQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0NSRUNGR19ITlAJKDMgPDwgMCkKKworI2RlZmluZSBVU0JPVEdfQ0lOVF9TVEFUCTB4MDQKKyNkZWZpbmUgVVNCT1RHX0NJTlRfU1RFTgkweDA4CisjZGVmaW5lIFVTQk9UR19BU0hOUElOVAkJCSgxIDw8IDUpCisjZGVmaW5lIFVTQk9UR19BU0ZDSU5UCQkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCT1RHX0FTSENJTlQJCQkoMSA8PCAzKQorI2RlZmluZSBVU0JPVEdfU0hOUElOVAkJCSgxIDw8IDIpCisjZGVmaW5lIFVTQk9UR19GQ0lOVAkJCSgxIDw8IDEpCisjZGVmaW5lIFVTQk9UR19IQ0lOVAkJCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCT1RHX0NMS19DVFJMCQkweDBjCisjZGVmaW5lIFVTQk9UR19DTEtfQ1RSTF9GVU5DCQkoMSA8PCAyKQorI2RlZmluZSBVU0JPVEdfQ0xLX0NUUkxfSFNUCQkoMSA8PCAxKQorI2RlZmluZSBVU0JPVEdfQ0xLX0NUUkxfTUFJTgkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JPVEdfUlNUX0NUUkwJCTB4MTAKKyNkZWZpbmUgVVNCT1RHX1JTVF9SU1RJMkMJCSgxIDw8IDE1KQorI2RlZmluZSBVU0JPVEdfUlNUX1JTVENUUkwJCSgxIDw8IDUpCisjZGVmaW5lIFVTQk9UR19SU1RfUlNURkMJCSgxIDw8IDQpCisjZGVmaW5lIFVTQk9UR19SU1RfUlNURlNLRQkJKDEgPDwgMykKKyNkZWZpbmUgVVNCT1RHX1JTVF9SU1RSSAkJKDEgPDwgMikKKyNkZWZpbmUgVVNCT1RHX1JTVF9SU1RIU0lFCQkoMSA8PCAxKQorI2RlZmluZSBVU0JPVEdfUlNUX1JTVEhDCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQk9UR19GUk1fSU5UVkwgICAgCTB4MTQKKyNkZWZpbmUgVVNCT1RHX0ZSTV9SRU1BSU4gICAJMHgxOAorI2RlZmluZSBVU0JPVEdfSE5QX0NTUgkgICAgCTB4MWMKKyNkZWZpbmUgVVNCT1RHX0hOUF9JU1IJICAgIAkweDJjCisjZGVmaW5lIFVTQk9UR19ITlBfSUVOCSAgICAJMHgzMAorCisjZGVmaW5lIFVTQk9UR19JMkNfVFhDVlJfUkVHKHgpCSgweDEwMCArICh4KSkKKyNkZWZpbmUgVVNCT1RHX0kyQ19YQ1ZSX0RFVkFECQkweDExOAorI2RlZmluZSBVU0JPVEdfSTJDX1NFUV9PUF9SRUcJCTB4MTE5CisjZGVmaW5lIFVTQk9UR19JMkNfU0VRX1JEX1NUQVJUQUQJMHgxMWEKKyNkZWZpbmUgVVNCT1RHX0kyQ19PUF9DVFJMX1JFRwkgICAgIAkweDExYgorI2RlZmluZSBVU0JPVEdfSTJDX1NDTEtfVE9fU0NLX0hQRVIgIAkweDExZQorI2RlZmluZSBVU0JPVEdfSTJDX01BU1RFUl9JTlRfUkVHICAgIAkweDExZgorCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMCQkweDgwCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0hDUkVTRVQJCQkoMSA8PCAzMSkKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfU0NIRE9WUih4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfUk1UV1VFTgkJCSgxIDw8IDQpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0hDVVNCU1RFX1JFU0VUCQkoMCA8PCAyKQorI2RlZmluZSBVU0JIX0hPU1RfQ1RSTF9IQ1VTQlNURV9SRVNVTUUJCSgxIDw8IDIpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0hDVVNCU1RFX09QRVJBVElPTkFMCSgyIDw8IDIpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0hDVVNCU1RFX1NVU1BFTkQJKDMgPDwgMikKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfQ1RMQkxLU1JfMQkJKDAgPDwgMCkKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfQ1RMQkxLU1JfMgkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfQ1RMQkxLU1JfMwkJKDIgPDwgMCkKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfQ1RMQkxLU1JfNAkJKDMgPDwgMCkKKworI2RlZmluZSBVU0JIX1NZU0lTUgkJMHg4OAorI2RlZmluZSBVU0JIX1NZU0lTUl9QU0NJTlQJCSgxIDw8IDYpCisjZGVmaW5lIFVTQkhfU1lTSVNSX0ZNT0ZJTlQJCSgxIDw8IDUpCisjZGVmaW5lIFVTQkhfU1lTSVNSX0hFUlJJTlQJCSgxIDw8IDQpCisjZGVmaW5lIFVTQkhfU1lTSVNSX1JFU0RFVElOVAkJKDEgPDwgMykKKyNkZWZpbmUgVVNCSF9TWVNJU1JfU09GSU5UCQkoMSA8PCAyKQorI2RlZmluZSBVU0JIX1NZU0lTUl9ET05FSU5UCQkoMSA8PCAxKQorI2RlZmluZSBVU0JIX1NZU0lTUl9TT1JJTlQJCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCSF9TWVNJRU4JICAgIAkweDhjCisjZGVmaW5lIFVTQkhfU1lTSUVOX1BTQ0lOVAkJKDEgPDwgNikKKyNkZWZpbmUgVVNCSF9TWVNJRU5fRk1PRklOVAkJKDEgPDwgNSkKKyNkZWZpbmUgVVNCSF9TWVNJRU5fSEVSUklOVAkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCSF9TWVNJRU5fUkVTREVUSU5UCQkoMSA8PCAzKQorI2RlZmluZSBVU0JIX1NZU0lFTl9TT0ZJTlQJCSgxIDw8IDIpCisjZGVmaW5lIFVTQkhfU1lTSUVOX0RPTkVJTlQJCSgxIDw8IDEpCisjZGVmaW5lIFVTQkhfU1lTSUVOX1NPUklOVAkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JIX1hCVUZTVEFUCSAgICAJMHg5OAorI2RlZmluZSBVU0JIX1lCVUZTVEFUCSAgICAJMHg5YworI2RlZmluZSBVU0JIX1hZSU5URU4JICAgIAkweGEwCisjZGVmaW5lIFVTQkhfWEZJTExTVEFUCSAgICAJMHhhOAorI2RlZmluZSBVU0JIX1lGSUxMU1RBVAkgICAgCTB4YWMKKyNkZWZpbmUgVVNCSF9FVERFTlNFVAkgICAgCTB4YzAKKyNkZWZpbmUgVVNCSF9FVERFTkNMUgkgICAgCTB4YzQKKyNkZWZpbmUgVVNCSF9JTU1FRElOVAkgICAgCTB4Y2MKKyNkZWZpbmUgVVNCSF9FVERET05FU1RBVCAgICAJMHhkMAorI2RlZmluZSBVU0JIX0VURERPTkVFTgkgICAgCTB4ZDQKKyNkZWZpbmUgVVNCSF9GUk1OVUIJICAgIAkweGUwCisjZGVmaW5lIFVTQkhfTFNUSFJFU0gJICAgIAkweGU0CisKKyNkZWZpbmUgVVNCSF9ST09USFVCQQkgICAgCTB4ZTgKKyNkZWZpbmUgVVNCSF9ST09USFVCQV9QV1JUT0dPT0RfTUFTSwkoMHhmZikKKyNkZWZpbmUgVVNCSF9ST09USFVCQV9QV1JUT0dPT0RfU0hJRlQJKDI0KQorI2RlZmluZSBVU0JIX1JPT1RIVUJBX05PT1ZSQ1VSUAkoMSA8PCAxMikKKyNkZWZpbmUgVVNCSF9ST09USFVCQV9PVlJDVVJQTQkJKDEgPDwgMTEpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfREVWVFlQRQkJKDEgPDwgMTApCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfUFdSU1dUTUQJCSgxIDw8IDkpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfTk9QV1JTV1QJCSgxIDw8IDgpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfTkROU1RNUFJUX01BU0sJKDB4ZmYpCisKKyNkZWZpbmUgVVNCSF9ST09USFVCQgkJMHhlYworI2RlZmluZSBVU0JIX1JPT1RIVUJCX1BSVFBXUkNNKHgpCSgxIDw8ICgoeCkgKyAxNikpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkJfREVWUkVNT1ZFKHgpCSgxIDw8ICh4KSkKKworI2RlZmluZSBVU0JIX1JPT1RTVEFUCQkweGYwCisjZGVmaW5lIFVTQkhfUk9PVFNUQVRfQ0xSUk1UV1VFCSgxIDw8IDMxKQorI2RlZmluZSBVU0JIX1JPT1RTVEFUX09WUkNVUkNIRwkoMSA8PCAxNykKKyNkZWZpbmUgVVNCSF9ST09UU1RBVF9ERVZDT05XVUUJKDEgPDwgMTUpCisjZGVmaW5lIFVTQkhfUk9PVFNUQVRfT1ZSQ1VSSQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCSF9ST09UU1RBVF9MT0NQV1JTCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQkhfUE9SVFNUQVQoeCkJKDB4ZjQgKyAoKHgpICogNCkpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUUlNUU0MJCSgxIDw8IDIwKQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX09WUkNVUklDCQkoMSA8PCAxOSkKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9QUlRTVEFUU0MJKDEgPDwgMTgpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJURU5CTFNDCSgxIDw8IDE3KQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX0NPTk5FQ1RTQwkoMSA8PCAxNikKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9MU0RFVkNPTgkJKDEgPDwgOSkKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9QUlRQV1JTVAkJKDEgPDwgOCkKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9QUlRSU1RTVAkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9QUlRPVlJDVVJJCSgxIDw8IDMpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUU1VTUFNUCSgxIDw8IDIpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJURU5BQlNUCSgxIDw8IDEpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfQ1VSQ09OU1QJCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCX0RNQVJFVgkJMHg4MDAKKyNkZWZpbmUgVVNCX0RNQUlOVFNUQVQJICAgIAkweDgwNAorI2RlZmluZSBVU0JfRE1BSU5UU1RBVF9FUEVSUgkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCX0RNQUlOVFNUQVRfRVRERVJSCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9ETUFJTlRFTgkgICAgCTB4ODA4CisjZGVmaW5lIFVTQl9ETUFJTlRFTl9FUEVSUklOVEVOCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9ETUFJTlRFTl9FVERFUlJJTlRFTgkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9FVERETUFFUlNUQVQgICAgCTB4ODBjCisjZGVmaW5lIFVTQl9FUERNQUVSU1RBVAkgICAgCTB4ODEwCisjZGVmaW5lIFVTQl9FVERETUFFTgkgICAgCTB4ODIwCisjZGVmaW5lIFVTQl9FUERNQUVOCSAgICAJMHg4MjQKKyNkZWZpbmUgVVNCX0VURERNQVhURU4JICAgIAkweDgyOAorI2RlZmluZSBVU0JfRVBETUFYVEVOCSAgICAJMHg4MmMKKyNkZWZpbmUgVVNCX0VURERNQUVOWFlUCSAgICAJMHg4MzAKKyNkZWZpbmUgVVNCX0VQRE1BRU5YWVQJICAgIAkweDgzNAorI2RlZmluZSBVU0JfRVRERE1BQlNUNEVOICAgIAkweDgzOAorI2RlZmluZSBVU0JfRVBETUFCU1Q0RU4JICAgIAkweDgzYworCisjZGVmaW5lIFVTQl9NSVNDQ09OVFJPTAkgICAgCTB4ODQwCisjZGVmaW5lIFVTQl9NSVNDQ09OVFJPTF9JU09QUkVWRlJNCSgxIDw8IDMpCisjZGVmaW5lIFVTQl9NSVNDQ09OVFJPTF9TS1BSVFJZCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9NSVNDQ09OVFJPTF9BUkJNT0RFCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9NSVNDQ09OVFJPTF9GSUxUQ0MJCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCX0VURERNQUNIQU5MQ0xSICAJMHg4NDgKKyNkZWZpbmUgVVNCX0VQRE1BQ0hBTkxDTFIgICAJMHg4NGMKKyNkZWZpbmUgVVNCX0VURFNNU0EoeCkJICAgIAkoMHg5MDAgKyAoKHgpICogNCkpCisjZGVmaW5lIFVTQl9FUFNNU0EoeCkJICAgIAkoMHg5ODAgKyAoKHgpICogNCkpCisjZGVmaW5lIFVTQl9FVERETUFCVUZQVFIoeCkgCSgweGEwMCArICgoeCkgKiA0KSkKKyNkZWZpbmUgVVNCX0VQRE1BQlVGUFRSKHgpICAJKDB4YTgwICsgKCh4KSAqIDQpKQorCisjZGVmaW5lIFVTQl9FVERfRFdPUkQoeCwgdykJKDB4MjAwICsgKCh4KSAqIDE2KSArICgodykgKiA0KSkKKyNkZWZpbmUgRFcwX0FERFJFU1MJMAorI2RlZmluZQlEVzBfRU5EUE5UCTcKKyNkZWZpbmUJRFcwX0RJUkVDVAkxMQorI2RlZmluZQlEVzBfU1BFRUQJMTMKKyNkZWZpbmUgRFcwX0ZPUk1BVAkxNAorI2RlZmluZSBEVzBfTUFYUEtUU0laCTE2CisjZGVmaW5lIERXMF9IQUxURUQJMjcKKyNkZWZpbmUJRFcwX1RPR0NSWQkyOAorI2RlZmluZQlEVzBfU05ETkFLCTMwCisKKyNkZWZpbmUgRFcxX1hCVUZTUlRBRAkwCisjZGVmaW5lIERXMV9ZQlVGU1JUQUQJMTYKKworI2RlZmluZSBEVzJfUlRSWURFTEFZCTAKKyNkZWZpbmUgRFcyX1BPTElOVEVSVgkwCisjZGVmaW5lIERXMl9TVEFSVEZSTQkwCisjZGVmaW5lIERXMl9SRUxQT0xQT1MJOAorI2RlZmluZSBEVzJfRElSUElECTE2CisjZGVmaW5lCURXMl9CVUZST1VORAkxOAorI2RlZmluZSBEVzJfREVMQVlJTlQJMTkKKyNkZWZpbmUgRFcyX0RBVEFUT0cJMjIKKyNkZWZpbmUgRFcyX0VSUk9SQ05UCTI0CisjZGVmaW5lCURXMl9DT01QQ09ERQkyOAorCisjZGVmaW5lIERXM19UT1RCWUVDTlQJMAorI2RlZmluZSBEVzNfUEtUTEVOMAkwCisjZGVmaW5lIERXM19DT01QQ09ERTAJMTIKKyNkZWZpbmUgRFczX1BLVExFTjEJMTYKKyNkZWZpbmUgRFczX0JVRlNJWkUJMjEKKyNkZWZpbmUgRFczX0NPTVBDT0RFMQkyOAorCisjZGVmaW5lIFVTQkNUUkwJCSAgICAJMHg2MDAKKyNkZWZpbmUgVVNCQ1RSTF9JMkNfV1VfSU5UX1NUQVQJKDEgPDwgMjcpCisjZGVmaW5lIFVTQkNUUkxfT1RHX1dVX0lOVF9TVEFUCSgxIDw8IDI2KQorI2RlZmluZSBVU0JDVFJMX0hPU1RfV1VfSU5UX1NUQVQJKDEgPDwgMjUpCisjZGVmaW5lIFVTQkNUUkxfRk5UX1dVX0lOVF9TVEFUCSgxIDw8IDI0KQorI2RlZmluZSBVU0JDVFJMX0kyQ19XVV9JTlRfRU4JCSgxIDw8IDE5KQorI2RlZmluZSBVU0JDVFJMX09UR19XVV9JTlRfRU4JCSgxIDw8IDE4KQorI2RlZmluZSBVU0JDVFJMX0hPU1RfV1VfSU5UX0VOCQkoMSA8PCAxNykKKyNkZWZpbmUgVVNCQ1RSTF9GTlRfV1VfSU5UX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUgVVNCQ1RSTF9PVENfUkNWX1JYRFAJCSgxIDw8IDEzKQorI2RlZmluZSBVU0JDVFJMX0hPU1QxX0JZUF9UTEwJCSgxIDw8IDEyKQorI2RlZmluZSBVU0JDVFJMX09UR19CWVBfVkFMKHgpCQkoKHgpIDw8IDEwKQorI2RlZmluZSBVU0JDVFJMX0hPU1QxX0JZUF9WQUwoeCkJKCh4KSA8PCA4KQorI2RlZmluZSBVU0JDVFJMX09UR19QV1JfTUFTSwkJKDEgPDwgNikKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUMV9QV1JfTUFTSwkJKDEgPDwgNSkKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUMl9QV1JfTUFTSwkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCQ1RSTF9VU0JfQllQCQkJKDEgPDwgMikKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUMV9UWEVOX09FCQkoMSA8PCAxKQorCisKKy8qIFZhbHVlcyBpbiBURCBibG9ja3MgKi8KKyNkZWZpbmUgVERfRElSX1NFVFVQCSAgICAwCisjZGVmaW5lIFREX0RJUl9PVVQJICAgIDEKKyNkZWZpbmUgVERfRElSX0lOCSAgICAyCisjZGVmaW5lIFREX0ZPUk1BVF9DT05UUk9MICAgMAorI2RlZmluZSBURF9GT1JNQVRfSVNPCSAgICAxCisjZGVmaW5lIFREX0ZPUk1BVF9CVUxLCSAgICAyCisjZGVmaW5lIFREX0ZPUk1BVF9JTlQJICAgIDMKKyNkZWZpbmUgVERfVE9HR0xFX0NBUlJZCSAgICAwCisjZGVmaW5lIFREX1RPR0dMRV9EQVRBMAkgICAgMgorI2RlZmluZSBURF9UT0dHTEVfREFUQTEJICAgIDMKKworLyogY29udHJvbCB0cmFuc2ZlciBzdGF0ZXMgKi8KKyNkZWZpbmUgVVNfQ1RSTF9TRVRVUAkyCisjZGVmaW5lIFVTX0NUUkxfREFUQQkxCisjZGVmaW5lIFVTX0NUUkxfQUNLCTAKKworLyogYnVsayB0cmFuc2ZlciBtYWluIHN0YXRlIGFuZCAwLWxlbmd0aCBwYWNrZXQgKi8KKyNkZWZpbmUgVVNfQlVMSwkJMQorI2RlZmluZSBVU19CVUxLMAkwCisKKy8qRVREIGZvcm1hdCBkZXNjcmlwdGlvbiovCisjZGVmaW5lIElNWF9GTVRfQ1RSTCAgIDB4MAorI2RlZmluZSBJTVhfRk1UX0lTTyAgICAweDEKKyNkZWZpbmUgSU1YX0ZNVF9CVUxLICAgMHgyCisjZGVmaW5lIElNWF9GTVRfSU5UICAgIDB4MworCitzdGF0aWMgY2hhciBmbXRfdXJiX3RvX2V0ZFs0XSA9IHsKKy8qUElQRV9JU09DSFJPTk9VUyovIElNWF9GTVRfSVNPLAorLypQSVBFX0lOVEVSUlVQVCovIElNWF9GTVRfSU5ULAorLypQSVBFX0NPTlRST0wqLyBJTVhfRk1UX0NUUkwsCisvKlBJUEVfQlVMSyovIElNWF9GTVRfQlVMSworfTsKKworLyogY29uZGl0aW9uIChlcnJvcikgQ0MgY29kZXMgYW5kIG1hcHBpbmcgKE9IQ0kgbGlrZSkgKi8KKworI2RlZmluZSBURF9DQ19OT0VSUk9SCQkweDAwCisjZGVmaW5lIFREX0NDX0NSQwkJMHgwMQorI2RlZmluZSBURF9DQ19CSVRTVFVGRklORwkweDAyCisjZGVmaW5lIFREX0NDX0RBVEFUT0dHTEVNCTB4MDMKKyNkZWZpbmUgVERfQ0NfU1RBTEwJCTB4MDQKKyNkZWZpbmUgVERfREVWTk9UUkVTUAkJMHgwNQorI2RlZmluZSBURF9QSURDSEVDS0ZBSUwJCTB4MDYKKy8qI2RlZmluZSBURF9VTkVYUEVDVEVEUElECTB4MDcgLSByZXNlcnZlZCwgbm90IGFjdGl2ZSBvbiBNWDIqLworI2RlZmluZSBURF9EQVRBT1ZFUlJVTgkJMHgwOAorI2RlZmluZSBURF9EQVRBVU5ERVJSVU4JCTB4MDkKKyNkZWZpbmUgVERfQlVGRkVST1ZFUlJVTgkweDBDCisjZGVmaW5lIFREX0JVRkZFUlVOREVSUlVOCTB4MEQKKyNkZWZpbmUJVERfU0NIRURVTEVPVkVSUlVOCTB4MEUKKyNkZWZpbmUgVERfTk9UQUNDRVNTRUQJCTB4MEYKKworc3RhdGljIGNvbnN0IGludCBjY190b19lcnJvclsxNl0gPSB7CisJLyogTm8gIEVycm9yICAqLyAwLAorCS8qIENSQyBFcnJvciAgKi8gLUVJTFNFUSwKKwkvKiBCaXQgU3R1ZmYgICovIC1FUFJPVE8sCisJLyogRGF0YSBUb2dnICAqLyAtRUlMU0VRLAorCS8qIFN0YWxsICAgICAgKi8gLUVQSVBFLAorCS8qIERldk5vdFJlc3AgKi8gLUVUSU1FRE9VVCwKKwkvKiBQSURDaGVjayAgICovIC1FUFJPVE8sCisJLyogVW5FeHBQSUQgICAqLyAtRVBST1RPLAorCS8qIERhdGFPdmVyICAgKi8gLUVPVkVSRkxPVywKKwkvKiBEYXRhVW5kZXIgICovIC1FUkVNT1RFSU8sCisJLyogKGZvciBodykgICAqLyAtRUlPLAorCS8qIChmb3IgaHcpICAgKi8gLUVJTywKKwkvKiBCdWZmZXJPdmVyICovIC1FQ09NTSwKKwkvKiBCdWZmVW5kZXIgICovIC1FTk9TUiwKKwkvKiAoZm9yIEhDRCkgICovIC1FTk9TUEMsCisJLyogKGZvciBIQ0QpICAqLyAtRUFMUkVBRFkKK307CisKKy8qIEhDRCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHVzYiBjb3JlIFVSQiAqLworc3RydWN0IHVyYl9wcml2IHsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlpbnQgYWN0aXZlOworCWludCBzdGF0ZTsKKwlzdHJ1Y3QgdGQgKmlzb2NfdGQ7CisJaW50IGlzb2NfcmVtYWluaW5nOworCWludCBpc29jX3N0YXR1czsKK307CisKKy8qIEhDRCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHVzYiBjb3JlIGVuZHBvaW50ICovCitzdHJ1Y3QgZXBfcHJpdiB7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlpbnQgZXRkW05VTV9JU09fRVREU107CisJaW50IHdhaXRpbmdfZXRkOworfTsKKworLyogaXNvYyBwYWNrZXQgKi8KK3N0cnVjdCB0ZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCWRtYV9hZGRyX3QgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGJ1Zl9hZGRyOworCWludCBsZW47CisJaW50IGZyYW1lOworCWludCBpc29jX2luZGV4OworfTsKKworLyogSENEIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgRVREICovCitzdHJ1Y3QgZXRkX3ByaXYgeworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB0ZCAqdGQ7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGFsbG9jOworCWludCBsZW47CisJaW50IGRtZW1fc2l6ZTsKKwlpbnQgZG1lbV9vZmZzZXQ7CisJaW50IGFjdGl2ZV9jb3VudDsKKyNpZmRlZiBERUJVRworCWludCBhY3RpdmF0ZWRfZnJhbWU7CisJaW50IGRpc2FjdGl2YXRlZF9mcmFtZTsKKwlpbnQgbGFzdF9pbnRfZnJhbWU7CisJaW50IGxhc3RfcmVxX2ZyYW1lOworCXUzMiBzdWJtaXR0ZWRfZHdvcmRzWzRdOworI2VuZGlmCit9OworCisvKiBIYXJkd2FyZSBkYXRhIG1lbW9yeSBpbmZvICovCitzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhIHsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworI2lmZGVmIERFQlVHCitzdHJ1Y3QgZGVidWdfdXNhZ2Vfc3RhdHMgeworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbWF4aW11bTsKK307CisKK3N0cnVjdCBkZWJ1Z19zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBzdWJtaXR0ZWQ7CisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWRfb2s7CisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWRfZmFpbGVkOworCXVuc2lnbmVkIGxvbmcgdW5saW5rZWQ7CisJdW5zaWduZWQgbG9uZyBxdWV1ZV9ldGQ7CisJdW5zaWduZWQgbG9uZyBxdWV1ZV9kbWVtOworfTsKKworc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgeworCWludCBzY2hlZHVsZV9mcmFtZTsKKwlpbnQgc3VibWl0X2ZyYW1lOworCWludCByZXF1ZXN0X2xlbjsKKwlpbnQgZG9uZV9mcmFtZTsKKwlpbnQgZG9uZV9sZW47CisJaW50IGNjOworCXN0cnVjdCB0ZCAqdGQ7Cit9OworI2VuZGlmCisKKy8qIEhDRCBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IGlteDIxIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBteDIxX3VzYmhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBkbWVtX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9mb3JfZXRkOyAvKiBlcHMgcXVldWVkIGR1ZSB0byBldGQgc2hvcnRhZ2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2Zvcl9kbWVtOyAvKiBldGRzIHF1ZXVlZCBkdWUgdG8gZG1lbSBzaG9ydGFnZSAqLworCXN0cnVjdCBldGRfcHJpdiBldGRbVVNCX05VTV9FVERdOworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisjaWZkZWYgREVCVUcKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19yb290OworCXN0cnVjdCBkZWJ1Z19zdGF0cyBub25pc29jX3N0YXRzOworCXN0cnVjdCBkZWJ1Z19zdGF0cyBpc29jX3N0YXRzOworCXN0cnVjdCBkZWJ1Z191c2FnZV9zdGF0cyBldGRfdXNhZ2U7CisJc3RydWN0IGRlYnVnX3VzYWdlX3N0YXRzIGRtZW1fdXNhZ2U7CisJc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgaXNvY190cmFjZVsyMF07CisJc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgaXNvY190cmFjZV9mYWlsZWRbMjBdOworCXVuc2lnbmVkIGxvbmcgZGVidWdfdW5ibG9ja3M7CisJaW50IGlzb2NfdHJhY2VfaW5kZXg7CisJaW50IGlzb2NfdHJhY2VfaW5kZXhfZmFpbGVkOworI2VuZGlmCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwppbmRleCA0Mjk3MTY1Li4yMTdmYjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCkBAIC0xMjU3LDcgKzEyNTcsNyBAQAogCiAJLyogYXZvaWQgYWxsIGFsbG9jYXRpb25zIHdpdGhpbiBzcGlubG9ja3M6IHJlcXVlc3Qgb3IgZW5kcG9pbnQgKi8KIAlpZiAoIWhlcC0+aGNwcml2KSB7Ci0JCWVwID0ga2NhbGxvYygxLCBzaXplb2YgKmVwLCBtZW1fZmxhZ3MpOworCQllcCA9IGt6YWxsb2Moc2l6ZW9mICplcCwgbWVtX2ZsYWdzKTsKIAkJaWYgKCFlcCkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTI3MTksMjQgKzI3MTksMTEgQEAKIAl9CiAJaXJxID0gaXJxX3Jlcy0+c3RhcnQ7CiAKLSNpZmRlZiBDT05GSUdfVVNCX0hDRF9ETUEKLQlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqZG1hX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMik7Ci0KLQkJaWYgKCFkbWFfcmVzKSB7Ci0JCQlyZXR2YWwgPSAtRU5PREVWOwotCQkJZ290byBlcnIxOwotCQl9Ci0JCWlzcDEzNjJfaGNkLT5kYXRhX2RtYSA9IGRtYV9yZXMtPnN0YXJ0OwotCQlpc3AxMzYyX2hjZC0+bWF4X2RtYV9zaXplID0gcmVzb3VyY2VfbGVuKGRtYV9yZXMpOwotCX0KLSNlbHNlCiAJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoMSwgIndvbid0IGRvIERNQSIpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycjE7CiAJfQotI2VuZGlmCiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihhZGRyLT5zdGFydCwgcmVzb3VyY2VfbGVuKGFkZHIpLCBoY2RfbmFtZSkpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCmluZGV4IDI3YjhmN2MuLjlmMDEyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKQEAgLTE3LDcgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAiaXNwMTc2MC1oY2QuaCIKQEAgLTkwNCw2ICs5MDYsMTQgQEAKIAkJCXN0YXR1cyA9IDA7CiAJfQogCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0NPTlRST0wpIHsKKwkJdm9pZCAqcHRyOworCQlmb3IgKHB0ciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkgICAgIHB0ciA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkgICAgIHB0ciArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRyKSk7CisJfQorCiAJLyogY29tcGxldGUoKSBjYW4gcmVlbnRlciB0aGlzIEhDRCAqLwogCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHByaXZfdG9faGNkKHByaXYpLCB1cmIpOwogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggMWM5Zjk3Ny4uNDI5M2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9pc3AxNzYwX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9pc3AxNzYwX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJueHAsdXNiLWlzcDE3NjAiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGE4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYTh4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTA4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGE4eHguYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIFRJIERBOHh4IChPTUFQLUwxeCkgQnVzIEdsdWUKKyAqCisgKiBEZXJpdmVkIGZyb206IG9oY2ktb21hcC5jIGFuZCBvaGNpLXMzYzI0MTAuYworICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bWFjaC9kYTh4eC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfREFWSU5DSV9EQThYWAorI2Vycm9yICJUaGlzIGZpbGUgaXMgREE4eHggYnVzIGdsdWUuICBEZWZpbmUgQ09ORklHX0FSQ0hfREFWSU5DSV9EQThYWC4iCisjZW5kaWYKKworI2RlZmluZSBDRkdDSElQMglEQThYWF9TWVNDRkdfVklSVChEQThYWF9DRkdDSElQMl9SRUcpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp1c2IxMV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayAqdXNiMjBfY2xrOworCisvKiBPdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSBiaXRtYXNrICovCitzdGF0aWMgdm9sYXRpbGUgdTE2IG9jaWNfbWFzazsKKworc3RhdGljIHZvaWQgb2hjaV9kYTh4eF9jbG9jayhpbnQgb24pCit7CisJdTMyIGNmZ2NoaXAyOworCisJY2ZnY2hpcDIgPSBfX3Jhd19yZWFkbChDRkdDSElQMik7CisJaWYgKG9uKSB7CisJCWNsa19lbmFibGUodXNiMTFfY2xrKTsKKworCQkvKgorCQkgKiBJZiBVU0IgMS4xIHJlZmVyZW5jZSBjbG9jayBpcyBzb3VyY2VkIGZyb20gVVNCIDIuMCBQSFksIHdlCisJCSAqIG5lZWQgdG8gZW5hYmxlIHRoZSBVU0IgMi4wIG1vZHVsZSBjbG9ja2luZywgc3RhcnQgaXRzIFBIWSwKKwkJICogYW5kIG5vdCBhbGxvdyBpdCB0byBzdG9wIHRoZSBjbG9jayBkdXJpbmcgVVNCIDIuMCBzdXNwZW5kLgorCQkgKi8KKwkJaWYgKCEoY2ZnY2hpcDIgJiBDRkdDSElQMl9VU0IxUEhZQ0xLTVVYKSkgeworCQkJY2xrX2VuYWJsZSh1c2IyMF9jbGspOworCisJCQljZmdjaGlwMiAmPSB+KENGR0NISVAyX1JFU0VUIHwgQ0ZHQ0hJUDJfUEhZUFdSRE4pOworCQkJY2ZnY2hpcDIgfD0gQ0ZHQ0hJUDJfUEhZX1BMTE9OOworCQkJX19yYXdfd3JpdGVsKGNmZ2NoaXAyLCBDRkdDSElQMik7CisKKwkJCXByX2luZm8oIldhaXRpbmcgZm9yIFVTQiBQSFkgY2xvY2sgZ29vZC4uLlxuIik7CisJCQl3aGlsZSAoIShfX3Jhd19yZWFkbChDRkdDSElQMikgJiBDRkdDSElQMl9QSFlDTEtHRCkpCisJCQkJY3B1X3JlbGF4KCk7CisJCX0KKworCQkvKiBFbmFibGUgVVNCIDEuMSBQSFkgKi8KKwkJY2ZnY2hpcDIgfD0gQ0ZHQ0hJUDJfVVNCMVNVU1BFTkRNOworCX0gZWxzZSB7CisJCWNsa19kaXNhYmxlKHVzYjExX2Nsayk7CisJCWlmICghKGNmZ2NoaXAyICYgQ0ZHQ0hJUDJfVVNCMVBIWUNMS01VWCkpCisJCQljbGtfZGlzYWJsZSh1c2IyMF9jbGspOworCisJCS8qIERpc2FibGUgVVNCIDEuMSBQSFkgKi8KKwkJY2ZnY2hpcDIgJj0gfkNGR0NISVAyX1VTQjFTVVNQRU5ETTsKKwl9CisJX19yYXdfd3JpdGVsKGNmZ2NoaXAyLCBDRkdDSElQMik7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhlIHBvcnQgb3Zlci1jdXJyZW50IGluZGljYXRvciBjaGFuZ2UuCisgKi8KK3N0YXRpYyB2b2lkIG9oY2lfZGE4eHhfb2NpY19oYW5kbGVyKHN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViICpodWIsCisJCQkJICAgIHVuc2lnbmVkIHBvcnQpCit7CisJb2NpY19tYXNrIHw9IDEgPDwgcG9ydDsKKworCS8qIE9uY2Ugb3Zlci1jdXJyZW50IGlzIGRldGVjdGVkLCB0aGUgcG9ydCBuZWVkcyB0byBiZSBwb3dlcmVkIGRvd24gKi8KKwlpZiAoaHViLT5nZXRfb2NpKHBvcnQpID4gMCkKKwkJaHViLT5zZXRfcG93ZXIocG9ydCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGRldmljZSAqZGV2CQk9IGhjZC0+c2VsZi5jb250cm9sbGVyOworCXN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViICpodWIJPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpCQk9IGhjZF90b19vaGNpKGhjZCk7CisJaW50IHJlc3VsdDsKKwl1MzIgcmhfYTsKKworCWRldl9kYmcoZGV2LCAic3RhcnRpbmcgVVNCIGNvbnRyb2xsZXJcbiIpOworCisJb2hjaV9kYTh4eF9jbG9jaygxKTsKKworCS8qCisJICogREE4eHggb25seSBoYXZlIDEgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIHBpbnMgYnV0IHRoZSBIQyByb290IGh1YgorCSAqIHJlZ2lzdGVyIEEgcmVwb3J0cyAyIHBvcnRzLCB0aHVzIHdlJ2xsIGhhdmUgdG8gb3ZlcnJpZGUgaXQuLi4KKwkgKi8KKwlvaGNpLT5udW1fcG9ydHMgPSAxOworCisJcmVzdWx0ID0gb2hjaV9pbml0KG9oY2kpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSBwcm92aWRpbmcgYSBib2FyZC1zcGVjaWZpYyByb290IGh1YiBwb3J0IHBvd2VyIGNvbnRyb2wKKwkgKiBhbmQgb3Zlci1jdXJyZW50IHJlcG9ydGluZywgd2UgaGF2ZSB0byBvdmVycmlkZSB0aGUgSEMgcm9vdCBodWIgQQorCSAqIHJlZ2lzdGVyJ3MgZGVmYXVsdCB2YWx1ZSwgc28gdGhhdCBvaGNpX2h1Yl9jb250cm9sKCkgY291bGQgcmV0dXJuCisJICogdGhlIGNvcnJlY3QgaHViIGRlc2NyaXB0b3IuLi4KKwkgKi8KKwlyaF9hID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKTsKKwlpZiAoaHViLT5zZXRfcG93ZXIpIHsKKwkJcmhfYSAmPSB+UkhfQV9OUFM7CisJCXJoX2EgfD0gIFJIX0FfUFNNOworCX0KKwlpZiAoaHViLT5nZXRfb2NpKSB7CisJCXJoX2EgJj0gflJIX0FfTk9DUDsKKwkJcmhfYSB8PSAgUkhfQV9PQ1BNOworCX0KKwlyaF9hICY9IH5SSF9BX1BPVFBHVDsKKwlyaF9hIHw9IGh1Yi0+cG90cGd0IDw8IDI0OworCW9oY2lfd3JpdGVsKG9oY2ksIHJoX2EsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgb2hjaV9kYTh4eF9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJb2hjaV9zdG9wKGhjZCk7CisJb2hjaV9kYTh4eF9jbG9jaygwKTsKK30KKworc3RhdGljIGludCBvaGNpX2RhOHh4X3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpCQk9IGhjZF90b19vaGNpKGhjZCk7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IG9oY2lfcnVuKG9oY2kpOworCWlmIChyZXN1bHQgPCAwKQorCQlvaGNpX2RhOHh4X3N0b3AoaGNkKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHN0YXR1cyBkYXRhIGZyb20gdGhlIGh1YiB3aXRoIHRoZSBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZS4KKyAqLworc3RhdGljIGludCBvaGNpX2RhOHh4X2h1Yl9zdGF0dXNfZGF0YShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJaW50IGxlbmd0aAkJPSBvaGNpX2h1Yl9zdGF0dXNfZGF0YShoY2QsIGJ1Zik7CisKKwkvKiBTZWUgaWYgd2UgaGF2ZSBPQ0lDIGJpdCBzZXQgb24gcG9ydCAxICovCisJaWYgKG9jaWNfbWFzayAmICgxIDw8IDEpKSB7CisJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAiCisJCQkib24gcG9ydCAxXG4iKTsKKworCQlpZiAoIWxlbmd0aCkKKwkJCWxlbmd0aCA9IDE7CisKKwkJYnVmWzBdIHw9IDEgPDwgMTsKKwl9CisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIExvb2sgYXQgdGhlIGNvbnRyb2wgcmVxdWVzdHMgdG8gdGhlIHJvb3QgaHViIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBvdmVycmlkZS4KKyAqLworc3RhdGljIGludCBvaGNpX2RhOHh4X2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorCQkJCSAgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYJCT0gaGNkLT5zZWxmLmNvbnRyb2xsZXI7CisJc3RydWN0IGRhOHh4X29oY2lfcm9vdF9odWIgKmh1Ygk9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgdGVtcDsKKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJLyogQ2hlY2sgdGhlIHBvcnQgbnVtYmVyICovCisJCWlmICh3SW5kZXggIT0gMSkKKwkJCWJyZWFrOworCisJCWRldl9kYmcoZGV2LCAiR2V0UG9ydFN0YXR1cygldSlcbiIsIHdJbmRleCk7CisKKwkJdGVtcCA9IHJvb3RodWJfcG9ydHN0YXR1cyhoY2RfdG9fb2hjaShoY2QpLCB3SW5kZXggLSAxKTsKKworCQkvKiBUaGUgcG9ydCBwb3dlciBzdGF0dXMgKFBQUykgYml0IGRlZmF1bHRzIHRvIDEgKi8KKwkJaWYgKGh1Yi0+Z2V0X3Bvd2VyICYmIGh1Yi0+Z2V0X3Bvd2VyKHdJbmRleCkgPT0gMCkKKwkJCXRlbXAgJj0gflJIX1BTX1BQUzsKKworCQkvKiBUaGUgcG9ydCBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIChQT0NJKSBiaXQgaXMgYWx3YXlzIDAgKi8KKwkJaWYgKGh1Yi0+Z2V0X29jaSAmJiBodWItPmdldF9vY2kod0luZGV4KSA+IDApCisJCQl0ZW1wIHw9ICBSSF9QU19QT0NJOworCisJCS8qIFRoZSBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAoT0NJQykgYml0IGlzIDAgdG9vICovCisJCWlmIChvY2ljX21hc2sgJiAoMSA8PCB3SW5kZXgpKQorCQkJdGVtcCB8PSAgUkhfUFNfT0NJQzsKKworCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKHRlbXApLCAoX19sZTMyICopYnVmKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJdGVtcCA9IDE7CisJCWdvdG8gY2hlY2tfcG9ydDsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCXRlbXAgPSAwOworCitjaGVja19wb3J0OgorCQkvKiBDaGVjayB0aGUgcG9ydCBudW1iZXIgKi8KKwkJaWYgKHdJbmRleCAhPSAxKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJZGV2X2RiZyhkZXYsICIlc1BvcnRGZWF0dXJlKCV1KTogJXNcbiIsCisJCQkJdGVtcCA/ICJTZXQiIDogIkNsZWFyIiwgd0luZGV4LCAiUE9XRVIiKTsKKworCQkJaWYgKCFodWItPnNldF9wb3dlcikKKwkJCQlyZXR1cm4gLUVQSVBFOworCisJCQlyZXR1cm4gaHViLT5zZXRfcG93ZXIod0luZGV4LCB0ZW1wKSA/IC1FUElQRSA6IDA7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJCWRldl9kYmcoZGV2LCAiJXNQb3J0RmVhdHVyZSgldSk6ICVzXG4iLAorCQkJCXRlbXAgPyAiU2V0IiA6ICJDbGVhciIsIHdJbmRleCwKKwkJCQkiQ19PVkVSX0NVUlJFTlQiKTsKKworCQkJaWYgKHRlbXApCisJCQkJb2NpY19tYXNrIHw9IDEgPDwgd0luZGV4OworCQkJZWxzZQorCQkJCW9jaWNfbWFzayAmPSB+KDEgPDwgd0luZGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIG9oY2lfaHViX2NvbnRyb2woaGNkLCB0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwgYnVmLCB3TGVuZ3RoKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9kYTh4eF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQk9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MJCT0gIkRBOHh4IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxCQkJPSBvaGNpX2lycSwKKwkuZmxhZ3MJCQk9IEhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0CQkJPSBvaGNpX2RhOHh4X2luaXQsCisJLnN0YXJ0CQkJPSBvaGNpX2RhOHh4X3N0YXJ0LAorCS5zdG9wCQkJPSBvaGNpX2RhOHh4X3N0b3AsCisJLnNodXRkb3duCQk9IG9oY2lfc2h1dGRvd24sCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlCQk9IG9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IG9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyCT0gb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhCT0gb2hjaV9kYTh4eF9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sCQk9IG9oY2lfZGE4eHhfaHViX2NvbnRyb2wsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQJCT0gb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZQkJPSBvaGNpX2J1c19yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldAk9IG9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqCisgKiB1c2JfaGNkX2RhOHh4X3Byb2JlIC0gaW5pdGlhbGl6ZSBEQTh4eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqLworc3RhdGljIGludCB1c2JfaGNkX2RhOHh4X3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViICpodWIJPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCBlcnJvciwgaXJxOworCisJaWYgKGh1YiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVzYjExX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYjExIik7CisJaWYgKElTX0VSUih1c2IxMV9jbGspKQorCQlyZXR1cm4gUFRSX0VSUih1c2IxMV9jbGspOworCisJdXNiMjBfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiMjAiKTsKKwlpZiAoSVNfRVJSKHVzYjIwX2NsaykpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHVzYjIwX2Nsayk7CisJCWdvdG8gZXJyMDsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnIyOworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSBtZW0tPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBtZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVCVVNZOworCQlnb3RvIGVycjI7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjM7CisJfQorCisJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycjQ7CisJfQorCWVycm9yID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCWlmIChlcnJvcikKKwkJZ290byBlcnI0OworCisJaWYgKGh1Yi0+b2NpY19ub3RpZnkpIHsKKwkJZXJyb3IgPSBodWItPm9jaWNfbm90aWZ5KG9oY2lfZGE4eHhfb2NpY19oYW5kbGVyKTsKKwkJaWYgKCFlcnJvcikKKwkJCXJldHVybiAwOworCX0KKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CitlcnI0OgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2VycjM6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnIyOgorCXVzYl9wdXRfaGNkKGhjZCk7CitlcnIxOgorCWNsa19wdXQodXNiMjBfY2xrKTsKK2VycjA6CisJY2xrX3B1dCh1c2IxMV9jbGspOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB1c2JfaGNkX2RhOHh4X3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIERBOHh4LWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX2RhOHh4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit1c2JfaGNkX2RhOHh4X3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViICpodWIJPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWh1Yi0+b2NpY19ub3RpZnkoTlVMTCk7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwljbGtfcHV0KHVzYjIwX2Nsayk7CisJY2xrX3B1dCh1c2IxMV9jbGspOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX2RhOHh4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHVzYl9oY2RfZGE4eHhfcHJvYmUoJm9oY2lfZGE4eHhfaGNfZHJpdmVyLCBkZXYpOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX2RhOHh4X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9kYTh4eF9yZW1vdmUoaGNkLCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBvaGNpX2RhOHh4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkCT0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kJPSBoY2RfdG9fb2hjaShoY2QpOworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisKKwlvaGNpX2RhOHh4X2Nsb2NrKDApOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2QJPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaQk9IGhjZF90b19vaGNpKGhjZCk7CisKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKwlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKworCW9oY2lfZGE4eHhfY2xvY2soMSk7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIERyaXZlciBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyIHdpdGggcGxhdGZvcm0gc3RydWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9kYTh4eF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9oY2lfaGNkX2RhOHh4X2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX2RhOHh4X2Rydl9yZW1vdmUsCisJLnNodXRkb3duIAk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQJPSBvaGNpX2RhOHh4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2RhOHh4X3Jlc3VtZSwKKyNlbmRpZgorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib2hjaSIsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKaW5kZXggODExZjVkZmQuLjhhZDI0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKQEAgLTUzLDEzICs1MywxMyBAQAogCQlpbnQgaSwgbGVuOwogCiAJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHBpcGUpKSB7Ci0JCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogc2V0dXAoOCk6Iik7CisJCQlwcmludGsgKEtFUk5fREVCVUcgIiVzOiBzZXR1cCg4KToiLCBfX0ZJTEVfXyk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgOCA7IGkrKykKIAkJCQlwcmludGsgKCIgJTAyeCIsICgoX191OCAqKSB1cmItPnNldHVwX3BhY2tldCkgW2ldKTsKIAkJCXByaW50ayAoIlxuIik7CiAJCX0KIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDAgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiBkYXRhKCVkLyVkKToiLAorCQkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogZGF0YSglZC8lZCk6IiwgX19GSUxFX18sCiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJCQlsZW4gPSB1c2JfcGlwZW91dCAocGlwZSk/CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggMjRlYjc0NzguLmFmZTU5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTEwNTEsNiArMTA1MSwxMSBAQAogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXVzYl9oY2RfcG54NDAwOF9kcml2ZXIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfREFWSU5DSV9EQThYWAorI2luY2x1ZGUgIm9oY2ktZGE4eHguYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9kYTh4eF9kcml2ZXIKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCBkZTQyMjgzLi4xOGQzOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTI4LDggKzI4LDggQEAKIAogc3RhdGljIHZvaWQgbGg3YTQwNF9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KLQkgICAgICAgIjogc3RhcnRpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YXJ0aW5nIExIN0E0MDQgT0hDSSBVU0IgQ29udHJvbGxlclxuIiwKKwkgICAgICAgX19GSUxFX18pOwogCiAJLyoKIAkgKiBOb3csIGNhcmVmdWxseSBlbmFibGUgdGhlIFVTQiBjbG9jaywgYW5kIHRha2UKQEAgLTM5LDE0ICszOSwxMyBAQAogCXVkZWxheSgxMDAwKTsKIAlVU0JIX0NNRFNUQVRVUyA9IE9IQ0lfSENSOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KLQkJICAgIjogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZCBcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZCBcbiIsIF9fRklMRV9fKTsKIH0KIAogc3RhdGljIHZvaWQgbGg3YTQwNF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwotCSAgICAgICAiOiBzdG9wcGluZyBMSDdBNDA0IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RvcHBpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iLAorCSAgICAgICBfX0ZJTEVfXyk7CiAKIAlDU0NfUFdSQ05UICY9IH5DU0NfUFdSQ05UX1VTQkhfRU47IC8qIERpc2FibGUgY2xvY2sgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCmluZGV4IDI3NjkzMjYuLmNkNzRiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJfQogCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDIpOwogCW1lbXNldCgmaTJjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlzdHJsY3B5KGkyY19pbmZvLm5hbWUsICJpc3AxMzAxX3BueCIsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaTJjX2luZm8udHlwZSwgImlzcDEzMDFfcG54IiwgSTJDX05BTUVfU0laRSk7CiAJaXNwMTMwMV9pMmNfY2xpZW50ID0gaTJjX25ld19wcm9iZWRfZGV2aWNlKGkyY19hZGFwLCAmaTJjX2luZm8sCiAJCQkJCQkgICBub3JtYWxfaTJjKTsKIAlpMmNfcHV0X2FkYXB0ZXIoaTJjX2FkYXApOwpAQCAtNDExLDcgKzQxMSw3IEBACiBvdXQyOgogCWNsa19wdXQodXNiX2Nsayk7CiBvdXQxOgotCWkyY191bnJlZ2lzdGVyX2NsaWVudChpc3AxMzAxX2kyY19jbGllbnQpOworCWkyY191bnJlZ2lzdGVyX2RldmljZShpc3AxMzAxX2kyY19jbGllbnQpOwogCWlzcDEzMDFfaTJjX2NsaWVudCA9IE5VTEw7CiBvdXRfaTJjX2RyaXZlcjoKIAlpMmNfZGVsX2RyaXZlcigmaXNwMTMwMV9kcml2ZXIpOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAJcG54NDAwOF91bnNldF91c2JfYml0cygpOwogCWNsa19kaXNhYmxlKHVzYl9jbGspOwogCWNsa19wdXQodXNiX2Nsayk7Ci0JaTJjX3VucmVnaXN0ZXJfY2xpZW50KGlzcDEzMDFfaTJjX2NsaWVudCk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGlzcDEzMDFfaTJjX2NsaWVudCk7CiAJaXNwMTMwMV9pMmNfY2xpZW50ID0gTlVMTDsKIAlpMmNfZGVsX2RyaXZlcigmaXNwMTMwMV9kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMKaW5kZXggNjhhMzAxNy4uMTAzMjYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtb2YuYwpAQCAtMTE0LDIxICsxMTQsMjEgQEAKIAloY2QtPnJzcmNfbGVuID0gcmVzLmVuZCAtIHJlcy5zdGFydCArIDE7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcnYgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX3JtcjsKIAl9CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgMCk7CiAJaWYgKGlycSA9PSBOT19JUlEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAogCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCQl9IGVsc2UKIAkJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLnN0YXJ0LCAweDQpOwogCQl9IGVsc2UKLQkJICAgIHByX2RlYnVnKF9fRklMRV9fICI6IGNhbm5vdCBnZXQgZWhjaSBvZmZzZXQgZnJvbSBmZHRcbiIpOworCQkJcHJfZGVidWcoIiVzOiBjYW5ub3QgZ2V0IGVoY2kgb2Zmc2V0IGZyb20gZmR0XG4iLCBfX0ZJTEVfXyk7CiAJfQogCiAJaW91bm1hcChoY2QtPnJlZ3MpOwpAQCAtMjEyLDcgKzIxMiw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2hjaV9oY2RfcHBjX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvaGNpX2hjZF9wcGNfb2ZfbWF0Y2hbXSA9IHsKICNpZmRlZiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRQogCXsKIAkJLm5hbWUgPSAidXNiIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IGNkMzM5OGIuLjg5ZTY3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtNDEsMTQgKzQxLDE0IEBACiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghcmVzKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IG5vIGlycVxuIik7CisJCXByX2RlYnVnKCIlczogbm8gaXJxXG4iLCBfX0ZJTEVfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpcnEgPSByZXMtPnN0YXJ0OwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBubyByZWcgYWRkclxuIik7CisJCXByX2RlYnVnKCIlczogbm8gcmVnIGFkZHJcbiIsIF9fRklMRV9fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01OSwxNCArNTksMTQgQEAKIAloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlwcl9kZWJ1ZygiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQogCiAJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcHJfZGVidWcoIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCmluZGV4IGU0YmJlOGUuLmQ4ZWIzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTMxLDggKzMxLDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgdXNiX3JzdCA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwotCSAgICAgICAiOiBzdGFydGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhcnRpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iLAorCSAgICAgICBfX0ZJTEVfXyk7CiAKICNpZmRlZiBDT05GSUdfU0ExMTAwX0JBREdFNAogCWlmIChtYWNoaW5lX2lzX2JhZGdlNCgpKSB7CkBAIC02NSw4ICs2NSw4IEBACiBzdGF0aWMgdm9pZCBzYTExMTFfc3RvcF9oYyhzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGludCB1c2JfcnN0OwotCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JICAgICAgICI6IHN0b3BwaW5nIFNBLTExMTEgT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdG9wcGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIsCisJICAgICAgIF9fRklMRV9fKTsKIAogCS8qCiAJICogUHV0IHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGludG8gcmVzZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCA1YjIyYTRkLi5lMTFjYzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgInNsODExLmgiCkBAIC0xMjcyLDEyICsxMjczLDEyIEBACiAJCXNsODExaF9odWJfZGVzY3JpcHRvcihzbDgxMSwgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRIdWJTdGF0dXM6Ci0JCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyKDApOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoMCwgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRQb3J0U3RhdHVzOgogCQlpZiAod0luZGV4ICE9IDEpCiAJCQlnb3RvIGVycm9yOwotCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMihzbDgxMS0+cG9ydDEpOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoc2w4MTEtPnBvcnQxLCBidWYpOwogCiAjaWZuZGVmCVZFUkJPU0UKIAlpZiAoKih1MTYqKShidWYrMikpCS8qIG9ubHkgaWYgd1BvcnRDaGFuZ2UgaXMgaW50ZXJlc3RpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCA5OWNkMDBmLi4wOTE5NzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC03MzUsNiArNzM1LDcgQEAKIAkJdWhjaV9oY19kaWVkKHVoY2kpOwogCXVoY2lfc2Nhbl9zY2hlZHVsZSh1aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCXN5bmNocm9uaXplX2lycShoY2QtPmlycSk7CiAKIAlkZWxfdGltZXJfc3luYygmdWhjaS0+ZnNicl90aW1lcik7CiAJcmVsZWFzZV91aGNpKHVoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCmluZGV4IDMzMTI4ZDUyLi4xMDVmYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCkBAIC00MDYsNiArNDA2LDI1IEBACiAJfQogfQogCitjaGFyICp4aGNpX2dldF9zbG90X3N0YXRlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqY3R4KQoreworCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGN0eCk7CisKKwlzd2l0Y2ggKEdFVF9TTE9UX1NUQVRFKHNsb3RfY3R4LT5kZXZfc3RhdGUpKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gImVuYWJsZWQvZGlzYWJsZWQiOworCWNhc2UgMToKKwkJcmV0dXJuICJkZWZhdWx0IjsKKwljYXNlIDI6CisJCXJldHVybiAiYWRkcmVzc2VkIjsKKwljYXNlIDM6CisJCXJldHVybiAiY29uZmlndXJlZCI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJyZXNlcnZlZCI7CisJfQorfQorCiB2b2lkIHhoY2lfZGJnX3Nsb3RfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqY3R4KQogewogCS8qIEZpZWxkcyBhcmUgMzIgYml0cyB3aWRlLCBETUEgYWRkcmVzc2VzIGFyZSBpbiBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWV4dC1jYXBzLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZXh0LWNhcHMuaAppbmRleCBlY2MxMzFjLi43OGM0ZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZXh0LWNhcHMuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZXh0LWNhcHMuaApAQCAtMTAxLDEyICsxMDEsMTUgQEAKIAogCW5leHQgPSByZWFkbChiYXNlICsgZXh0X29mZnNldCk7CiAKLQlpZiAoZXh0X29mZnNldCA9PSBYSENJX0hDQ19QQVJBTVNfT0ZGU0VUKQorCWlmIChleHRfb2Zmc2V0ID09IFhIQ0lfSENDX1BBUkFNU19PRkZTRVQpIHsKIAkJLyogRmluZCB0aGUgZmlyc3QgZXh0ZW5kZWQgY2FwYWJpbGl0eSAqLwogCQluZXh0ID0gWEhDSV9IQ0NfRVhUX0NBUFMobmV4dCk7Ci0JZWxzZQorCQlleHRfb2Zmc2V0ID0gMDsKKwl9IGVsc2UgewogCQkvKiBGaW5kIHRoZSBuZXh0IGV4dGVuZGVkIGNhcGFiaWxpdHkgKi8KIAkJbmV4dCA9IFhIQ0lfRVhUX0NBUFNfTkVYVChuZXh0KTsKKwl9CisKIAlpZiAoIW5leHQpCiAJCXJldHVybiAwOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKaW5kZXggNWU5MmM3Mi4uNGNiNjllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkgKiBmb3IgdXNiX3NldF9pbnRlcmZhY2UoKSBhbmQgdXNiX3NldF9jb25maWd1cmF0aW9uKCkgY2xhaW0pLgogCSAqLwogCWlmICh4aGNpX2VuZHBvaW50X2luaXQoeGhjaSwgeGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXSwKLQkJCQl1ZGV2LCBlcCwgR0ZQX0tFUk5FTCkgPCAwKSB7CisJCQkJdWRldiwgZXAsIEdGUF9OT0lPKSA8IDApIHsKIAkJZGV2X2RiZygmdWRldi0+ZGV2LCAiJXMgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBlcCAlI3hcbiIsCiAJCQkJX19mdW5jX18sIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExODEsNiArMTE4MSw4IEBACiAJCXJldCA9IHhoY2lfcXVldWVfZXZhbHVhdGVfY29udGV4dCh4aGNpLCBpbl9jdHgtPmRtYSwKIAkJCQl1ZGV2LT5zbG90X2lkKTsKIAlpZiAocmV0IDwgMCkgeworCQlpZiAoY29tbWFuZCkKKwkJCWxpc3RfZGVsKCZjb21tYW5kLT5jbWRfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FIGFsbG9jYXRlIGEgbmV3IHJpbmcgc2VnbWVudFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTI2NCwzMCArMTI2NiwxMyBAQAogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwogCS8qIEluc3RhbGwgbmV3IHJpbmdzIGFuZCBmcmVlIG9yIGNhY2hlIGFueSBvbGQgcmluZ3MgKi8KIAlmb3IgKGkgPSAxOyBpIDwgMzE7ICsraSkgewotCQlpbnQgcmluZ3NfY2FjaGVkOwotCiAJCWlmICghdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZykKIAkJCWNvbnRpbnVlOwogCQkvKiBPbmx5IGNhY2hlIG9yIGZyZWUgdGhlIG9sZCByaW5nIGlmIGl0IGV4aXN0cy4KIAkJICogSXQgbWF5IG5vdCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBhZGQgb2YgYW4gZW5kcG9pbnQuCiAJCSAqLwogCQlpZiAodmlydF9kZXYtPmVwc1tpXS5yaW5nKSB7Ci0JCQlyaW5nc19jYWNoZWQgPSB2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZDsKLQkJCWlmIChyaW5nc19jYWNoZWQgPCBYSENJX01BWF9SSU5HU19DQUNIRUQpIHsKLQkJCQl2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZCsrOwotCQkJCXJpbmdzX2NhY2hlZCA9IHZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkOwotCQkJCXZpcnRfZGV2LT5yaW5nX2NhY2hlW3JpbmdzX2NhY2hlZF0gPQotCQkJCQl2aXJ0X2Rldi0+ZXBzW2ldLnJpbmc7Ci0JCQkJeGhjaV9kYmcoeGhjaSwgIkNhY2hlZCBvbGQgcmluZywgIgotCQkJCQkJIiVkIHJpbmclcyBjYWNoZWRcbiIsCi0JCQkJCQlyaW5nc19jYWNoZWQsCi0JCQkJCQkocmluZ3NfY2FjaGVkID4gMSkgPyAicyIgOiAiIik7Ci0JCQl9IGVsc2UgewotCQkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIHZpcnRfZGV2LT5lcHNbaV0ucmluZyk7Ci0JCQkJeGhjaV9kYmcoeGhjaSwgIlJpbmcgY2FjaGUgZnVsbCAoJWQgcmluZ3MpLCAiCi0JCQkJCQkiZnJlZWluZyByaW5nXG4iLAotCQkJCQkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQpOwotCQkJfQorCQkJeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3JpbmcoeGhjaSwgdmlydF9kZXYsIGkpOwogCQl9CiAJCXZpcnRfZGV2LT5lcHNbaV0ucmluZyA9IHZpcnRfZGV2LT5lcHNbaV0ubmV3X3Jpbmc7CiAJCXZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcgPSBOVUxMOwpAQCAtMTQ1OCw2ICsxNDQzLDEzMSBAQAogfQogCiAvKgorICogVGhpcyBzdWJtaXRzIGEgUmVzZXQgRGV2aWNlIENvbW1hbmQsIHdoaWNoIHdpbGwgc2V0IHRoZSBkZXZpY2Ugc3RhdGUgdG8gMCwKKyAqIHNldCB0aGUgZGV2aWNlIGFkZHJlc3MgdG8gMCwgYW5kIGRpc2FibGUgYWxsIHRoZSBlbmRwb2ludHMgZXhjZXB0IHRoZSBkZWZhdWx0CisgKiBjb250cm9sIGVuZHBvaW50LiAgVGhlIFVTQiBjb3JlIHNob3VsZCBjb21lIGJhY2sgYW5kIGNhbGwKKyAqIHhoY2lfYWRkcmVzc19kZXZpY2UoKSwgYW5kIHRoZW4gcmUtc2V0IHVwIHRoZSBjb25maWd1cmF0aW9uLiAgSWYgdGhpcyBpcworICogY2FsbGVkIGJlY2F1c2Ugb2YgYSB1c2JfcmVzZXRfYW5kX3ZlcmlmeV9kZXZpY2UoKSwgdGhlbiB0aGUgb2xkIGFsdGVybmF0ZQorICogc2V0dGluZ3Mgd2lsbCBiZSByZS1pbnN0YWxsZWQgdGhyb3VnaCB0aGUgbm9ybWFsIGJhbmR3aWR0aCBhbGxvY2F0aW9uCisgKiBmdW5jdGlvbnMuCisgKgorICogV2FpdCBmb3IgdGhlIFJlc2V0IERldmljZSBjb21tYW5kIHRvIGZpbmlzaC4gIFJlbW92ZSBhbGwgc3RydWN0dXJlcworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBlbmRwb2ludHMgdGhhdCB3ZXJlIGRpc2FibGVkLiAgQ2xlYXIgdGhlIGlucHV0IGRldmljZQorICogc3RydWN0dXJlPyAgQ2FjaGUgdGhlIHJpbmdzPyAgUmVzZXQgdGhlIGNvbnRyb2wgZW5kcG9pbnQgMCBtYXggcGFja2V0IHNpemU/CisgKi8KK2ludCB4aGNpX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0LCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpOworCXVuc2lnbmVkIGludCBzbG90X2lkOworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKKwlzdHJ1Y3QgeGhjaV9jb21tYW5kICpyZXNldF9kZXZpY2VfY21kOworCWludCB0aW1lbGVmdDsKKwlpbnQgbGFzdF9mcmVlZF9lbmRwb2ludDsKKworCXJldCA9IHhoY2lfY2hlY2tfYXJncyhoY2QsIHVkZXYsIE5VTEwsIDAsIF9fZnVuY19fKTsKKwlpZiAocmV0IDw9IDApCisJCXJldHVybiByZXQ7CisJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJc2xvdF9pZCA9IHVkZXYtPnNsb3RfaWQ7CisJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOworCWlmICghdmlydF9kZXYpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgc2xvdCBJRCAldVxuIiwKKwkJCQlfX2Z1bmNfXywgc2xvdF9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXhoY2lfZGJnKHhoY2ksICJSZXNldHRpbmcgZGV2aWNlIHdpdGggc2xvdCBJRCAldVxuIiwgc2xvdF9pZCk7CisJLyogQWxsb2NhdGUgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIHN0cnVjdCBjb21wbGV0aW9uLgorCSAqIEFzc3VtZSB3ZSdyZSBpbiBwcm9jZXNzIGNvbnRleHQsIHNpbmNlIHRoZSBub3JtYWwgZGV2aWNlIHJlc2V0CisJICogcHJvY2VzcyBoYXMgdG8gd2FpdCBmb3IgdGhlIGRldmljZSBhbnl3YXkuICBTdG9yYWdlIGRldmljZXMgYXJlCisJICogcmVzZXQgYXMgcGFydCBvZiBlcnJvciBoYW5kbGluZywgc28gdXNlIEdGUF9OT0lPIGluc3RlYWQgb2YKKwkgKiBHRlBfS0VSTkVMLgorCSAqLworCXJlc2V0X2RldmljZV9jbWQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIHRydWUsIEdGUF9OT0lPKTsKKwlpZiAoIXJlc2V0X2RldmljZV9jbWQpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkNvdWxkbid0IGFsbG9jYXRlIGNvbW1hbmQgc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEF0dGVtcHQgdG8gc3VibWl0IHRoZSBSZXNldCBEZXZpY2UgY29tbWFuZCB0byB0aGUgY29tbWFuZCByaW5nICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXNldF9kZXZpY2VfY21kLT5jb21tYW5kX3RyYiA9IHhoY2ktPmNtZF9yaW5nLT5lbnF1ZXVlOworCWxpc3RfYWRkX3RhaWwoJnJlc2V0X2RldmljZV9jbWQtPmNtZF9saXN0LCAmdmlydF9kZXYtPmNtZF9saXN0KTsKKwlyZXQgPSB4aGNpX3F1ZXVlX3Jlc2V0X2RldmljZSh4aGNpLCBzbG90X2lkKTsKKwlpZiAocmV0KSB7CisJCXhoY2lfZGJnKHhoY2ksICJGSVhNRTogYWxsb2NhdGUgYSBjb21tYW5kIHJpbmcgc2VnbWVudFxuIik7CisJCWxpc3RfZGVsKCZyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJZ290byBjb21tYW5kX2NsZWFudXA7CisJfQorCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogV2FpdCBmb3IgdGhlIFJlc2V0IERldmljZSBjb21tYW5kIHRvIGZpbmlzaCAqLworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQlyZXNldF9kZXZpY2VfY21kLT5jb21wbGV0aW9uLAorCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWlmICh0aW1lbGVmdCA8PSAwKSB7CisJCXhoY2lfd2Fybih4aGNpLCAiJXMgd2hpbGUgd2FpdGluZyBmb3IgcmVzZXQgZGV2aWNlIGNvbW1hbmRcbiIsCisJCQkJdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJLyogVGhlIHRpbWVvdXQgbWlnaHQgaGF2ZSByYWNlZCB3aXRoIHRoZSBldmVudCByaW5nIGhhbmRsZXIsIHNvCisJCSAqIG9ubHkgZGVsZXRlIGZyb20gdGhlIGxpc3QgaWYgdGhlIGl0ZW0gaXNuJ3QgcG9pc29uZWQuCisJCSAqLworCQlpZiAocmVzZXRfZGV2aWNlX2NtZC0+Y21kX2xpc3QubmV4dCAhPSBMSVNUX1BPSVNPTjEpCisJCQlsaXN0X2RlbCgmcmVzZXRfZGV2aWNlX2NtZC0+Y21kX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IC1FVElNRTsKKwkJZ290byBjb21tYW5kX2NsZWFudXA7CisJfQorCisJLyogVGhlIFJlc2V0IERldmljZSBjb21tYW5kIGNhbid0IGZhaWwsIGFjY29yZGluZyB0byB0aGUgMC45NS8wLjk2IHNwZWMsCisJICogdW5sZXNzIHdlIHRyaWVkIHRvIHJlc2V0IGEgc2xvdCBJRCB0aGF0IHdhc24ndCBlbmFibGVkLAorCSAqIG9yIHRoZSBkZXZpY2Ugd2Fzbid0IGluIHRoZSBhZGRyZXNzZWQgb3IgY29uZmlndXJlZCBzdGF0ZS4KKwkgKi8KKwlyZXQgPSByZXNldF9kZXZpY2VfY21kLT5zdGF0dXM7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIENPTVBfRUJBRFNMVDogLyogMC45NSBjb21wbGV0aW9uIGNvZGUgZm9yIGJhZCBzbG90IElEICovCisJY2FzZSBDT01QX0NUWF9TVEFURTogLyogMC45NiBjb21wbGV0aW9uIGNvZGUgZm9yIHNhbWUgdGhpbmcgKi8KKwkJeGhjaV9pbmZvKHhoY2ksICJDYW4ndCByZXNldCBkZXZpY2UgKHNsb3QgSUQgJXUpIGluICVzIHN0YXRlXG4iLAorCQkJCXNsb3RfaWQsCisJCQkJeGhjaV9nZXRfc2xvdF9zdGF0ZSh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCkpOworCQl4aGNpX2luZm8oeGhjaSwgIk5vdCBmcmVlaW5nIGRldmljZSByaW5ncy5cbiIpOworCQkvKiBEb24ndCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yLiAgTWF5IGNoYW5nZSBteSBtaW5kIGxhdGVyLiAqLworCQlyZXQgPSAwOworCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKKwljYXNlIENPTVBfU1VDQ0VTUzoKKwkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgcmVzZXQgZGV2aWNlIGNvbW1hbmQuXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHhoY2lfaXNfdmVuZG9yX2luZm9fY29kZSh4aGNpLCByZXQpKQorCQkJYnJlYWs7CisJCXhoY2lfd2Fybih4aGNpLCAiVW5rbm93biBjb21wbGV0aW9uIGNvZGUgJXUgZm9yICIKKwkJCQkicmVzZXQgZGV2aWNlIGNvbW1hbmQuXG4iLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKKwl9CisKKwkvKiBFdmVyeXRoaW5nIGJ1dCBlbmRwb2ludCAwIGlzIGRpc2FibGVkLCBzbyBmcmVlIG9yIGNhY2hlIHRoZSByaW5ncy4gKi8KKwlsYXN0X2ZyZWVkX2VuZHBvaW50ID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgMzE7ICsraSkgeworCQlpZiAoIXZpcnRfZGV2LT5lcHNbaV0ucmluZykKKwkJCWNvbnRpbnVlOworCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CisJCWxhc3RfZnJlZWRfZW5kcG9pbnQgPSBpOworCX0KKwl4aGNpX2RiZyh4aGNpLCAiT3V0cHV0IGNvbnRleHQgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXNldCBkZXZpY2UgY21kOlxuIik7CisJeGhjaV9kYmdfY3R4KHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4LCBsYXN0X2ZyZWVkX2VuZHBvaW50KTsKKwlyZXQgPSAwOworCitjb21tYW5kX2NsZWFudXA6CisJeGhjaV9mcmVlX2NvbW1hbmQoeGhjaSwgcmVzZXRfZGV2aWNlX2NtZCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIEF0IHRoaXMgcG9pbnQsIHRoZSBzdHJ1Y3QgdXNiX2RldmljZSBpcyBhYm91dCB0byBnbyBhd2F5LCB0aGUgZGV2aWNlIGhhcwogICogZGlzY29ubmVjdGVkLCBhbmQgYWxsIHRyYWZmaWMgaGFzIGJlZW4gc3RvcHBlZCBhbmQgdGhlIGVuZHBvaW50cyBoYXZlIGJlZW4KICAqIGRpc2FibGVkLiAgRnJlZSBhbnkgSEMgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGRldmljZS4KQEAgLTE2OTQsNyArMTgwNCw3IEBACiAJCXhoY2lfd2Fybih4aGNpLCAiQ2Fubm90IHVwZGF0ZSBodWIgZGVzYyBmb3IgdW5rbm93biBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNvbmZpZ19jbWQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgdHJ1ZSwgbWVtX2ZsYWdzKTsKKwljb25maWdfY21kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIHRydWUsIHRydWUsIG1lbV9mbGFncyk7CiAJaWYgKCFjb25maWdfY21kKSB7CiAJCXhoY2lfZGJnKHhoY2ksICJDb3VsZCBub3QgYWxsb2NhdGUgeEhDSSBjb21tYW5kIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCBlYWM1YjUzLi4yMDhiODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC0xMjksNiArMTI5LDUwIEBACiAJcmV0dXJuIChzdGF0ZSAmIFhIQ0lfUE9SVF9STykgfCAoc3RhdGUgJiBYSENJX1BPUlRfUldTKTsKIH0KIAorc3RhdGljIHZvaWQgeGhjaV9kaXNhYmxlX3BvcnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MTYgd0luZGV4LAorCQl1MzIgX19pb21lbSAqYWRkciwgdTMyIHBvcnRfc3RhdHVzKQoreworCS8qIFdyaXRlIDEgdG8gZGlzYWJsZSB0aGUgcG9ydCAqLworCXhoY2lfd3JpdGVsKHhoY2ksIHBvcnRfc3RhdHVzIHwgUE9SVF9QRSwgYWRkcik7CisJcG9ydF9zdGF0dXMgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOworCXhoY2lfZGJnKHhoY2ksICJkaXNhYmxlIHBvcnQsIGFjdHVhbCBwb3J0ICVkIHN0YXR1cyAgPSAweCV4XG4iLAorCQkJd0luZGV4LCBwb3J0X3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHhoY2lfY2xlYXJfcG9ydF9jaGFuZ2VfYml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTE2IHdWYWx1ZSwKKwkJdTE2IHdJbmRleCwgdTMyIF9faW9tZW0gKmFkZHIsIHUzMiBwb3J0X3N0YXR1cykKK3sKKwljaGFyICpwb3J0X2NoYW5nZV9iaXQ7CisJdTMyIHN0YXR1czsKKworCXN3aXRjaCAod1ZhbHVlKSB7CisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6CisJCXN0YXR1cyA9IFBPUlRfUkM7CisJCXBvcnRfY2hhbmdlX2JpdCA9ICJyZXNldCI7CisJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCXN0YXR1cyA9IFBPUlRfQ1NDOworCQlwb3J0X2NoYW5nZV9iaXQgPSAiY29ubmVjdCI7CisJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJc3RhdHVzID0gUE9SVF9PQ0M7CisJCXBvcnRfY2hhbmdlX2JpdCA9ICJvdmVyLWN1cnJlbnQiOworCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCXN0YXR1cyA9IFBPUlRfUEVDOworCQlwb3J0X2NoYW5nZV9iaXQgPSAiZW5hYmxlL2Rpc2FibGUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKwl9CisJLyogQ2hhbmdlIGJpdHMgYXJlIGFsbCB3cml0ZSAxIHRvIGNsZWFyICovCisJeGhjaV93cml0ZWwoeGhjaSwgcG9ydF9zdGF0dXMgfCBzdGF0dXMsIGFkZHIpOworCXBvcnRfc3RhdHVzID0geGhjaV9yZWFkbCh4aGNpLCBhZGRyKTsKKwl4aGNpX2RiZyh4aGNpLCAiY2xlYXIgcG9ydCAlcyBjaGFuZ2UsIGFjdHVhbCBwb3J0ICVkIHN0YXR1cyAgPSAweCV4XG4iLAorCQkJcG9ydF9jaGFuZ2VfYml0LCB3SW5kZXgsIHBvcnRfc3RhdHVzKTsKK30KKwogaW50IHhoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCiAJCXUxNiB3SW5kZXgsIGNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpCiB7CkBAIC0xMzgsNyArMTgyLDYgQEAKIAl1MzIgdGVtcCwgc3RhdHVzOwogCWludCByZXR2YWwgPSAwOwogCXUzMiBfX2lvbWVtICphZGRyOwotCWNoYXIgKnBvcnRfY2hhbmdlX2JpdDsKIAogCXBvcnRzID0gSENTX01BWF9QT1JUUyh4aGNpLT5oY3NfcGFyYW1zMSk7CiAKQEAgLTIyOSwyNiArMjcyLDE4IEBACiAJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6Ci0JCQlzdGF0dXMgPSBQT1JUX1JDOwotCQkJcG9ydF9jaGFuZ2VfYml0ID0gInJlc2V0IjsKLQkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgotCQkJc3RhdHVzID0gUE9SVF9DU0M7Ci0JCQlwb3J0X2NoYW5nZV9iaXQgPSAiY29ubmVjdCI7Ci0JCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgotCQkJc3RhdHVzID0gUE9SVF9PQ0M7Ci0JCQlwb3J0X2NoYW5nZV9iaXQgPSAib3Zlci1jdXJyZW50IjsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJeGhjaV9jbGVhcl9wb3J0X2NoYW5nZV9iaXQoeGhjaSwgd1ZhbHVlLCB3SW5kZXgsCisJCQkJCWFkZHIsIHRlbXApOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6CisJCQl4aGNpX2Rpc2FibGVfcG9ydCh4aGNpLCB3SW5kZXgsIGFkZHIsIHRlbXApOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCS8qIENoYW5nZSBiaXRzIGFyZSBhbGwgd3JpdGUgMSB0byBjbGVhciAqLwotCQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wIHwgc3RhdHVzLCBhZGRyKTsKLQkJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgYWRkcik7Ci0JCXhoY2lfZGJnKHhoY2ksICJjbGVhciBwb3J0ICVzIGNoYW5nZSwgYWN0dWFsIHBvcnQgJWQgc3RhdHVzICA9IDB4JXhcbiIsCi0JCQkJcG9ydF9jaGFuZ2VfYml0LCB3SW5kZXgsIHRlbXApOwotCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBhZGRyKTsgLyogdW5ibG9jayBhbnkgcG9zdGVkIHdyaXRlcyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogZXJyb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggYmZmY2VmNy4uNDlmN2Q3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtMTk4LDYgKzE5OCwzMSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHhoY2lfZnJlZV9vcl9jYWNoZV9lbmRwb2ludF9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2LAorCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCit7CisJaW50IHJpbmdzX2NhY2hlZDsKKworCXJpbmdzX2NhY2hlZCA9IHZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkOworCWlmIChyaW5nc19jYWNoZWQgPCBYSENJX01BWF9SSU5HU19DQUNIRUQpIHsKKwkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQrKzsKKwkJcmluZ3NfY2FjaGVkID0gdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQ7CisJCXZpcnRfZGV2LT5yaW5nX2NhY2hlW3JpbmdzX2NhY2hlZF0gPQorCQkJdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ucmluZzsKKwkJeGhjaV9kYmcoeGhjaSwgIkNhY2hlZCBvbGQgcmluZywgIgorCQkJCSIlZCByaW5nJXMgY2FjaGVkXG4iLAorCQkJCXJpbmdzX2NhY2hlZCwKKwkJCQkocmluZ3NfY2FjaGVkID4gMSkgPyAicyIgOiAiIik7CisJfSBlbHNlIHsKKwkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ucmluZyk7CisJCXhoY2lfZGJnKHhoY2ksICJSaW5nIGNhY2hlIGZ1bGwgKCVkIHJpbmdzKSwgIgorCQkJCSJmcmVlaW5nIHJpbmdcbiIsCisJCQkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQpOworCX0KKwl2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5yaW5nID0gTlVMTDsKK30KKwogLyogWmVybyBhbiBlbmRwb2ludCByaW5nIChleGNlcHQgZm9yIGxpbmsgVFJCcykgYW5kIG1vdmUgdGhlIGVucXVldWUgYW5kIGRlcXVldWUKICAqIHBvaW50ZXJzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJpbmcuCiAgKi8KQEAgLTI0Miw2ICsyNjcsOCBAQAogdm9pZCB4aGNpX2ZyZWVfY29udGFpbmVyX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCQkgICAgIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCkKIHsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuOwogCWRtYV9wb29sX2ZyZWUoeGhjaS0+ZGV2aWNlX3Bvb2wsIGN0eC0+Ynl0ZXMsIGN0eC0+ZG1hKTsKIAlrZnJlZShjdHgpOwogfQpAQCAtNDI3LDcgKzQ1NCw3IEBACiAJY2FzZSBVU0JfU1BFRURfTE9XOgogCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgU0xPVF9TUEVFRF9MUzsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CiAJCXhoY2lfZGJnKHhoY2ksICJGSVhNRSB4SENJIGRvZXNuJ3Qgc3VwcG9ydCB3aXJlbGVzcyBzcGVlZHNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC00NzEsNyArNDk4LDcgQEAKIAljYXNlIFVTQl9TUEVFRF9MT1c6CiAJCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQoOCk7CiAJCWJyZWFrOwotCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCWNhc2UgVVNCX1NQRUVEX1dJUkVMRVNTOgogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgeEhDSSBkb2Vzbid0IHN1cHBvcnQgd2lyZWxlc3Mgc3BlZWRzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtODE5LDcgKzg0Niw4IEBACiB9CiAKIHN0cnVjdCB4aGNpX2NvbW1hbmQgKnhoY2lfYWxsb2NfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCWJvb2wgYWxsb2NhdGVfY29tcGxldGlvbiwgZ2ZwX3QgbWVtX2ZsYWdzKQorCQlib29sIGFsbG9jYXRlX2luX2N0eCwgYm9vbCBhbGxvY2F0ZV9jb21wbGV0aW9uLAorCQlnZnBfdCBtZW1fZmxhZ3MpCiB7CiAJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKIApAQCAtODI3LDExICs4NTUsMTQgQEAKIAlpZiAoIWNvbW1hbmQpCiAJCXJldHVybiBOVUxMOwogCi0JY29tbWFuZC0+aW5fY3R4ID0KLQkJeGhjaV9hbGxvY19jb250YWluZXJfY3R4KHhoY2ksIFhIQ0lfQ1RYX1RZUEVfSU5QVVQsIG1lbV9mbGFncyk7Ci0JaWYgKCFjb21tYW5kLT5pbl9jdHgpIHsKLQkJa2ZyZWUoY29tbWFuZCk7Ci0JCXJldHVybiBOVUxMOworCWlmIChhbGxvY2F0ZV9pbl9jdHgpIHsKKwkJY29tbWFuZC0+aW5fY3R4ID0KKwkJCXhoY2lfYWxsb2NfY29udGFpbmVyX2N0eCh4aGNpLCBYSENJX0NUWF9UWVBFX0lOUFVULAorCQkJCQltZW1fZmxhZ3MpOworCQlpZiAoIWNvbW1hbmQtPmluX2N0eCkgeworCQkJa2ZyZWUoY29tbWFuZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAogCWlmIChhbGxvY2F0ZV9jb21wbGV0aW9uKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggZTA5NzAwOC4uNDE3ZDM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJLnJlc2V0X2JhbmR3aWR0aCA9CXhoY2lfcmVzZXRfYmFuZHdpZHRoLAogCS5hZGRyZXNzX2RldmljZSA9CXhoY2lfYWRkcmVzc19kZXZpY2UsCiAJLnVwZGF0ZV9odWJfZGV2aWNlID0JeGhjaV91cGRhdGVfaHViX2RldmljZSwKKwkucmVzZXRfZGV2aWNlID0JCXhoY2lfcmVzZXRfZGV2aWNlLAogCiAJLyoKIAkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGVlN2JjN2UuLjZiYTg0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtOTUzLDYgKzk1MywxNyBAQAogCWNhc2UgVFJCX1RZUEUoVFJCX1JFU0VUX0VQKToKIAkJaGFuZGxlX3Jlc2V0X2VwX2NvbXBsZXRpb24oeGhjaSwgZXZlbnQsIHhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlKTsKIAkJYnJlYWs7CisJY2FzZSBUUkJfVFlQRShUUkJfUkVTRVRfREVWKToKKwkJeGhjaV9kYmcoeGhjaSwgIkNvbXBsZXRlZCByZXNldCBkZXZpY2UgY29tbWFuZC5cbiIpOworCQlzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQoCisJCQkJeGhjaS0+Y21kX3JpbmctPmRlcXVldWUtPmdlbmVyaWMuZmllbGRbM10pOworCQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CisJCWlmICh2aXJ0X2RldikKKwkJCWhhbmRsZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLCB2aXJ0X2RldiwgZXZlbnQpOworCQllbHNlCisJCQl4aGNpX3dhcm4oeGhjaSwgIlJlc2V0IGRldmljZSBjb21tYW5kIGNvbXBsZXRpb24gIgorCQkJCQkiZm9yIGRpc2FibGVkIHNsb3QgJXVcbiIsIHNsb3RfaWQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBTa2lwIG92ZXIgdW5rbm93biBjb21tYW5kcyBvbiB0aGUgZXZlbnQgcmluZyAqLwogCQl4aGNpLT5lcnJvcl9iaXRtYXNrIHw9IDEgPDwgNjsKQEAgLTEwODAsNiArMTA5MSwyMCBAQAogCXJldHVybiAwOwogfQogCitpbnQgeGhjaV9pc192ZW5kb3JfaW5mb19jb2RlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5zaWduZWQgaW50IHRyYl9jb21wX2NvZGUpCit7CisJaWYgKHRyYl9jb21wX2NvZGUgPj0gMjI0ICYmIHRyYl9jb21wX2NvZGUgPD0gMjU1KSB7CisJCS8qIFZlbmRvciBkZWZpbmVkICJpbmZvcm1hdGlvbmFsIiBjb21wbGV0aW9uIGNvZGUsCisJCSAqIHRyZWF0IGFzIG5vdC1hbi1lcnJvci4KKwkJICovCisJCXhoY2lfZGJnKHhoY2ksICJWZW5kb3IgZGVmaW5lZCBpbmZvIGNvbXBsZXRpb24gY29kZSAldVxuIiwKKwkJCQl0cmJfY29tcF9jb2RlKTsKKwkJeGhjaV9kYmcoeGhjaSwgIlRyZWF0aW5nIGNvZGUgYXMgc3VjY2Vzcy5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgY29uZGl0aW9uLCBpdCBtZWFucyBpdCBnb3QgYSBUcmFuc2ZlcgogICogZXZlbnQgd2l0aCBhIGNvcnJ1cHRlZCBTbG90IElELCBFbmRwb2ludCBJRCwgb3IgVFJCIERNQSBhZGRyZXNzLgpAQCAtMTE5NiwxMyArMTIyMSw3IEBACiAJCXN0YXR1cyA9IC1FTk9TUjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKHRyYl9jb21wX2NvZGUgPj0gMjI0ICYmIHRyYl9jb21wX2NvZGUgPD0gMjU1KSB7Ci0JCQkvKiBWZW5kb3IgZGVmaW5lZCAiaW5mb3JtYXRpb25hbCIgY29tcGxldGlvbiBjb2RlLAotCQkJICogdHJlYXQgYXMgbm90LWFuLWVycm9yLgotCQkJICovCi0JCQl4aGNpX2RiZyh4aGNpLCAiVmVuZG9yIGRlZmluZWQgaW5mbyBjb21wbGV0aW9uIGNvZGUgJXVcbiIsCi0JCQkJCXRyYl9jb21wX2NvZGUpOwotCQkJeGhjaV9kYmcoeGhjaSwgIlRyZWF0aW5nIGNvZGUgYXMgc3VjY2Vzcy5cbiIpOworCQlpZiAoeGhjaV9pc192ZW5kb3JfaW5mb19jb2RlKHhoY2ksIHRyYl9jb21wX2NvZGUpKSB7CiAJCQlzdGF0dXMgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIxODEsNiArMjIwMCwxNCBAQAogCQkJZmFsc2UpOwogfQogCisvKiBRdWV1ZSBhIHJlc2V0IGRldmljZSBjb21tYW5kIFRSQiAqLworaW50IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTMyIHNsb3RfaWQpCit7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwKKwkJCVRSQl9UWVBFKFRSQl9SRVNFVF9ERVYpIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpLAorCQkJZmFsc2UpOworfQorCiAvKiBRdWV1ZSBhIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIFRSQiAqLwogaW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAogCQl1MzIgc2xvdF9pZCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggODc3ODEzNS4uZTVlYjA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTEyMTAsNiArMTIxMCw4IEBACiB2b2lkIHhoY2lfZGJnX2NtZF9wdHJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkIHhoY2lfZGJnX3JpbmdfcHRycyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpOwogdm9pZCB4aGNpX2RiZ19jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgsIHVuc2lnbmVkIGludCBsYXN0X2VwKTsKK2NoYXIgKnhoY2lfZ2V0X3Nsb3Rfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpOwogCiAvKiB4SENJIG1lbW9yeSBtYW5hZ2VtZW50ICovCiB2b2lkIHhoY2lfbWVtX2NsZWFudXAoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKQEAgLTEyMzMsOCArMTIzNSwxMiBAQAogCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKIAkJZ2ZwX3QgbWVtX2ZsYWdzKTsKIHZvaWQgeGhjaV9yaW5nX2ZyZWUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKTsKK3ZvaWQgeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYsCisJCXVuc2lnbmVkIGludCBlcF9pbmRleCk7CiBzdHJ1Y3QgeGhjaV9jb21tYW5kICp4aGNpX2FsbG9jX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlib29sIGFsbG9jYXRlX2NvbXBsZXRpb24sIGdmcF90IG1lbV9mbGFncyk7CisJCWJvb2wgYWxsb2NhdGVfaW5fY3R4LCBib29sIGFsbG9jYXRlX2NvbXBsZXRpb24sCisJCWdmcF90IG1lbV9mbGFncyk7CiB2b2lkIHhoY2lfZnJlZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCk7CiAKQEAgLTEyNjQsNiArMTI3MCw3IEBACiBpbnQgeGhjaV9hZGRfZW5kcG9pbnQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApOwogaW50IHhoY2lfZHJvcF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CiB2b2lkIHhoY2lfZW5kcG9pbnRfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CitpbnQgeGhjaV9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogaW50IHhoY2lfY2hlY2tfYmFuZHdpZHRoKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIHZvaWQgeGhjaV9yZXNldF9iYW5kd2lkdGgoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogCkBAIC0xMjcyLDYgKzEyNzksNyBAQAogc3RydWN0IHhoY2lfc2VnbWVudCAqdHJiX2luX3RkKHN0cnVjdCB4aGNpX3NlZ21lbnQgKnN0YXJ0X3NlZywKIAkJdW5pb24geGhjaV90cmIgKnN0YXJ0X3RyYiwgdW5pb24geGhjaV90cmIgKmVuZF90cmIsCiAJCWRtYV9hZGRyX3Qgc3VzcGVjdF9kbWEpOworaW50IHhoY2lfaXNfdmVuZG9yX2luZm9fY29kZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuc2lnbmVkIGludCB0cmJfY29tcF9jb2RlKTsKIHZvaWQgeGhjaV9yaW5nX2NtZF9kYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwogdm9pZCAqeGhjaV9zZXR1cF9vbmVfbm9vcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwogdm9pZCB4aGNpX2hhbmRsZV9ldmVudChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpAQCAtMTI5Myw2ICsxMzAxLDcgQEAKIAkJdTMyIHNsb3RfaWQpOwogaW50IHhoY2lfcXVldWVfcmVzZXRfZXAoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4KTsKK2ludCB4aGNpX3F1ZXVlX3Jlc2V0X2RldmljZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUzMiBzbG90X2lkKTsKIHZvaWQgeGhjaV9maW5kX25ld19kZXF1ZXVlX3N0YXRlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJc3RydWN0IHhoY2lfdGQgKmN1cl90ZCwgc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwppbmRleCBlY2EzNTVkLi5lMTkyZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwpAQCAtOTY3LDcgKzk2Nyw3IEBACiAKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWRjODAwX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1kYzgwMF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShNREM4MDBfVkVORE9SX0lELCBNREM4MDBfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCmluZGV4IDQ1OWE3MjguLjNhNmJjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIG10c191c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkc1tdOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXRzX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIm1pY3JvdGVrWDYiLApAQCAtNjU2LDcgKzY1Niw3IEBACiAvKiBUaGUgZW50cmllcyBvZiBtaWNyb3Rla190YWJsZSBtdXN0IGNvcnJlc3BvbmQsIGxpbmUtYnktbGluZSB0bwogICAgdGhlIGVudHJpZXMgb2YgbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tdLiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXRzX3VzYl9pZHMgW10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzW10gPQogewogCXsgVVNCX0RFVklDRSgweDRjZSwgMHgwMzAwKSB9LAogCXsgVVNCX0RFVklDRSgweDVkYSwgMHgwMDk0KSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCmluZGV4IGFiZTNhYTYuLjU1NjYwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTg3LDE3ICs4Nyw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JsY2QuCiAKLWNvbmZpZyBVU0JfQkVSUllfQ0hBUkdFCi0JdHJpc3RhdGUgIlVTQiBCbGFja0JlcnJ5IHJlY2hhcmdlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBCbGFja0JlcnJ5IGRldmljZSB0byB5b3VyCi0JICBjb21wdXRlcidzIFVTQiBwb3J0IGFuZCBoYXZlIGl0IGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvICJyZWNoYXJnZSIKLQkgIG1vZGUuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJlcnJ5X2NoYXJnZS4KLQogY29uZmlnIFVTQl9MRUQKIAl0cmlzdGF0ZSAiVVNCIExFRCBkcml2ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpAQCAtMjQyLDE3ICsyMzEsMyBAQAogCSAgZHJpdmVyIGJlZm9yZWhhbmQuIFRvb2xzIGZvciBkb2luZyBzbyBhcmUgYXZhaWxhYmxlIGF0CiAJICBodHRwOi8vYmVyc2FjZTAzLmZyZWUuZnIKIAotY29uZmlnIFVTQl9WU1QKLQl0cmlzdGF0ZSAiVVNCIFZTVCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBVU0IKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCBmb3IgVmVybmllciBTb2Z0d2FyZSBUZWNobm9sb2dpZXMKLQkgIGJ1bGsgdXNiIGRldmljZXMgc3VjaCBhcyB0aGVpciBPY2Vhbi1PcHRpY3Mgc3BlY3Ryb21ldGVycyBvcgotCSAgTGFicXVlc3QuCi0JICBJdCBpcyBhIGJ1bGsgY2hhbm5lbCBkcml2ZXIgd2l0aCBjb25maWd1cmFibGUgcmVhZCBhbmQgd3JpdGUKLQkgIHRpbWVvdXRzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2c3R1c2IuCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKaW5kZXggMDgyNmFhYi4uNzE3NzAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC01LDcgKzUsNiBAQAogCiBvYmotJChDT05GSUdfVVNCX0FEVVRVWCkJKz0gYWR1dHV4Lm8KIG9iai0kKENPTkZJR19VU0JfQVBQTEVESVNQTEFZKQkrPSBhcHBsZWRpc3BsYXkubwotb2JqLSQoQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UpCSs9IGJlcnJ5X2NoYXJnZS5vCiBvYmotJChDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzKSs9IGN5cHJlc3NfY3k3YzYzLm8KIG9iai0kKENPTkZJR19VU0JfQ1lUSEVSTSkJKz0gY3l0aGVybS5vCiBvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gZW1pMjYubwpAQCAtMjMsNyArMjIsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUikJKz0gdHJhbmNldmlicmF0b3Iubwogb2JqLSQoQ09ORklHX1VTQl9VU1M3MjApCSs9IHVzczcyMC5vCiBvYmotJChDT05GSUdfVVNCX1NFVlNFRykJKz0gdXNic2V2c2VnLm8KLW9iai0kKENPTkZJR19VU0JfVlNUKQkJKz0gdnN0dXNiLm8KIAogb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpCSs9IHNpc3VzYnZnYS8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKaW5kZXggMjAzNTI2NS4uZDI0MGRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIGRiZyhsdmwsIGZvcm1hdCwgYXJnLi4uKSAJCQkJCVwKIGRvIHsgCQkJCQkJCQkJXAogCWlmIChkZWJ1ZyA+PSBsdmwpCQkJCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiIDogIiBmb3JtYXQgIiBcbiIsICMjIGFyZyk7CVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX0ZJTEVfXywgIyNhcmcpOwlcCiB9IHdoaWxlICgwKQogCiAKQEAgLTU2LDcgKzU2LDcgQEAKICNkZWZpbmUgQURVX1BST0RVQ1RfSUQgMHgwMDY0CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKEFEVV9WRU5ET1JfSUQsIEFEVV9QUk9EVUNUX0lEKSB9LAkJLyogQURVMTAwICovCiAJeyBVU0JfREVWSUNFKEFEVV9WRU5ET1JfSUQsIEFEVV9QUk9EVUNUX0lEKzIwKSB9LCAJLyogQURVMTIwICovCiAJeyBVU0JfREVWSUNFKEFEVV9WRU5ET1JfSUQsIEFEVV9QUk9EVUNUX0lEKzMwKSB9LCAJLyogQURVMTMwICovCkBAIC0xMzIsOCArMTMyLDggQEAKIAlpZiAoZGVidWcgPCBsZXZlbCkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18iOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwKLQkgICAgICAgZnVuY3Rpb24sIHNpemUpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsCisJICAgICAgIF9fRklMRV9fLCBmdW5jdGlvbiwgc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKIAkJcHJpbnRrKCIlLjJ4ICIsIGRhdGFbaV0pOwogCXByaW50aygiXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IDFlYjllNDEuLjRkMjk1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtNTcsNyArNTcsNyBAQAogCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAweDAwCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhcHBsZWRpc3BsYXlfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXBwbGVkaXNwbGF5X3RhYmxlW10gPSB7CiAJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxOCkgfSwKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE5KSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMWMpIH0sCkBAIC0xNzksNyArMTc5LDcgQEAKIAkJcmV0dXJuIHBkYXRhLT5tc2dkYXRhWzFdOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXBwbGVkaXNwbGF5X2JsX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYXBwbGVkaXNwbGF5X2JsX2RhdGEgPSB7CiAJLmdldF9icmlnaHRuZXNzCT0gYXBwbGVkaXNwbGF5X2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzCT0gYXBwbGVkaXNwbGF5X2JsX3VwZGF0ZV9zdGF0dXMsCiB9OwpAQCAtMjgzLDYgKzI4Myw3IEBACiAJCQkJCQkmYXBwbGVkaXNwbGF5X2JsX2RhdGEpOwogCWlmIChJU19FUlIocGRhdGEtPmJkKSkgewogCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSBQVFJfRVJSKHBkYXRhLT5iZCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2JlcnJ5X2NoYXJnZS5jIGIvZHJpdmVycy91c2IvbWlzYy9iZXJyeV9jaGFyZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1YTg1Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2JlcnJ5X2NoYXJnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBVU0IgQmxhY2tCZXJyeSBjaGFyZ2luZyBtb2R1bGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSAqCi0gKiBJbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIGNvbmZpZ3Mgd2FzIHRha2VuIGJ5IHRoZSBiY2hhcmdlLmNjIGZpbGUKLSAqIGNyZWF0ZWQgYnkgdGhlIGJhcnJ5LnNmLm5ldCBwcm9qZWN0LgotICoKLSAqIGJjaGFyZ2UuY2MgaGFzIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0OgotICogCUNvcHlyaWdodCAoQykgMjAwNiwgTmV0IERpcmVjdCBJbmMuIChodHRwOi8vd3d3Lm5ldGRpcmVjdC5jYS8pCi0gKiBhbmQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICoKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2RlZmluZSBSSU1fVkVORE9SCQkweDBmY2EKLSNkZWZpbmUgQkxBQ0tCRVJSWQkJMHgwMDAxCi0jZGVmaW5lIEJMQUNLQkVSUllfUEVBUkxfRFVBTCAgIDB4MDAwNAotI2RlZmluZSBCTEFDS0JFUlJZX1BFQVJMICAgICAgICAweDAwMDYKLQotc3RhdGljIGludCBkZWJ1ZzsKLXN0YXRpYyBpbnQgcGVhcmxfZHVhbF9tb2RlID0gMTsKLQotI2lmZGVmIGRiZwotI3VuZGVmIGRiZwotI2VuZGlmCi0jZGVmaW5lIGRiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJCQlcCi0JaWYgKGRlYnVnKQkJCQkJCVwKLQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKFJJTV9WRU5ET1IsIEJMQUNLQkVSUlkpIH0sCi0JeyBVU0JfREVWSUNFKFJJTV9WRU5ET1IsIEJMQUNLQkVSUllfUEVBUkwpIH0sCi0JeyBVU0JfREVWSUNFKFJJTV9WRU5ET1IsIEJMQUNLQkVSUllfUEVBUkxfRFVBTCkgfSwKLQl7IH0sCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgbWFnaWNfY2hhcmdlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCWNoYXIgKmR1bW15X2J1ZmZlciA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7Ci0JaW50IHJldHZhbDsKLQotCWlmICghZHVtbXlfYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIHNlbmQgdHdvIG1hZ2ljIGNvbW1hbmRzIGFuZCB0aGVuIHNldCB0aGUgY29uZmlndXJhdGlvbi4gIFRoZSBkZXZpY2UKLQkgKiB3aWxsIHRoZW4gcmVzZXQgaXRzZWxmIHdpdGggdGhlIG5ldyBwb3dlciB1c2FnZSBhbmQgc2hvdWxkIHN0YXJ0Ci0JICogY2hhcmdpbmcuICovCi0KLQkvKiBOb3RlLCB3aXRoIHRlc3RpbmcsIGl0IG9ubHkgc2VlbXMgdGhhdCB0aGUgZmlyc3QgbWVzc2FnZSBpcyByZWFsbHkKLQkgKiBuZWVkZWQgKGF0IGxlYXN0IGZvciB0aGUgODcwMGMpLCBidXQgdG8gYmUgc2FmZSwgd2UgZW11bGF0ZSB3aGF0Ci0JICogb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgc2VlbSB0byBiZSBzZW5kaW5nIHRvIHRoZWlyIGRldmljZS4gIFdlCi0JICogcmVhbGx5IG5lZWQgdG8gZ2V0IHNvbWUgc3BlY3MgZm9yIHRoaXMgZGV2aWNlIHRvIGJlIHN1cmUgYWJvdXQgd2hhdAotCSAqIGlzIGdvaW5nIG9uIGhlcmUuCi0JICovCi0JZGJnKCZ1ZGV2LT5kZXYsICJTZW5kaW5nIGZpcnN0IG1hZ2ljIGNvbW1hbmRcbiIpOwotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkJIDB4YTUsIDB4YzAsIDAsIDEsIGR1bW15X2J1ZmZlciwgMiwgMTAwKTsKLQlpZiAocmV0dmFsICE9IDIpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiRmlyc3QgbWFnaWMgY29tbWFuZCBmYWlsZWQ6ICVkLlxuIiwKLQkJCXJldHZhbCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlkYmcoJnVkZXYtPmRldiwgIlNlbmRpbmcgc2Vjb25kIG1hZ2ljIGNvbW1hbmRcbiIpOwotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkJIDB4YTIsIDB4NDAsIDAsIDEsIGR1bW15X2J1ZmZlciwgMCwgMTAwKTsKLQlpZiAocmV0dmFsICE9IDApIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiU2Vjb25kIG1hZ2ljIGNvbW1hbmQgZmFpbGVkOiAlZC5cbiIsCi0JCQlyZXR2YWwpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZGJnKCZ1ZGV2LT5kZXYsICJDYWxsaW5nIHNldF9jb25maWd1cmF0aW9uXG4iKTsKLQlyZXR2YWwgPSB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIDEpOwotCWlmIChyZXR2YWwpCi0JCWRldl9lcnIoJnVkZXYtPmRldiwgIlNldCBDb25maWd1cmF0aW9uIGZhaWxlZCA6JWQuXG4iLCByZXR2YWwpOwotCi1leGl0OgotCWtmcmVlKGR1bW15X2J1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBtYWdpY19kdWFsX21vZGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JY2hhciAqZHVtbXlfYnVmZmVyID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFkdW1teV9idWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogc2VuZCBtYWdpYyBjb21tYW5kIHNvIHRoYXQgdGhlIEJsYWNrYmVycnkgUGVhcmwgZGV2aWNlIGV4cG9zZXMKLQkgKiB0d28gaW50ZXJmYWNlczogYm90aCB0aGUgVVNCIG1hc3Mtc3RvcmFnZSBvbmUgYW5kIG9uZSB3aGljaCBjYW4KLQkgKiBiZSB1c2VkIGZvciBkYXRhYmFzZSBhY2Nlc3MuICovCi0JZGJnKCZ1ZGV2LT5kZXYsICJTZW5kaW5nIG1hZ2ljIHBlYXJsIGNvbW1hbmRcbiIpOwotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkJIDB4YTksIDB4YzAsIDEsIDEsIGR1bW15X2J1ZmZlciwgMiwgMTAwKTsKLQlkYmcoJnVkZXYtPmRldiwgIk1hZ2ljIHBlYXJsIGNvbW1hbmQgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7Ci0KLQlkYmcoJnVkZXYtPmRldiwgIkNhbGxpbmcgc2V0X2NvbmZpZ3VyYXRpb25cbiIpOwotCXJldHZhbCA9IHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMSk7Ci0JaWYgKHJldHZhbCkKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiU2V0IENvbmZpZ3VyYXRpb24gZmFpbGVkIDolZC5cbiIsIHJldHZhbCk7Ci0KLQlrZnJlZShkdW1teV9idWZmZXIpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgYmVycnlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCi0JaWYgKHVkZXYtPmJ1c19tQSA8IDUwMCkgewotCQlkYmcoJnVkZXYtPmRldiwgIk5vdCBlbm91Z2ggcG93ZXIgdG8gY2hhcmdlIGF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWRiZygmdWRldi0+ZGV2LCAiUG93ZXIgaXMgc2V0IHRvICVkbUFcbiIsCi0JICAgIHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTWF4UG93ZXIgKiAyKTsKLQotCS8qIGNoZWNrIHRoZSBwb3dlciB1c2FnZSBzbyB3ZSBkb24ndCB0cnkgdG8gZW5hYmxlIHNvbWV0aGluZyB0aGF0IGlzCi0JICogYWxyZWFkeSBlbmFibGVkICovCi0JaWYgKCh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyICogMikgPT0gNTAwKSB7Ci0JCWRiZygmdWRldi0+ZGV2LCAiZGV2aWNlIGlzIGFscmVhZHkgY2hhcmdpbmcsIHBvd2VyIGlzICIKLQkJICAgICJzZXQgdG8gJWRtQVxuIiwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJNYXhQb3dlciAqIDIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiB0dXJuIHRoZSBwb3dlciBvbiAqLwotCW1hZ2ljX2NoYXJnZSh1ZGV2KTsKLQotCWlmICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IEJMQUNLQkVSUllfUEVBUkwpICYmCi0JICAgIChwZWFybF9kdWFsX21vZGUpKQotCQltYWdpY19kdWFsX21vZGUodWRldik7Ci0KLQkvKiB3ZSBkb24ndCByZWFsbHkgd2FudCB0byBiaW5kIHRvIHRoZSBkZXZpY2UsIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4KLQkgKiBoYW5kbGUgdGhlIHN5bmNpbmcganVzdCBmaW5lLCBzbyBnZXQgb3V0dGEgaGVyZS4gKi8KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgYmVycnlfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJlcnJ5X2RyaXZlciA9IHsKLQkubmFtZSA9CQkiYmVycnlfY2hhcmdlIiwKLQkucHJvYmUgPQliZXJyeV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CWJlcnJ5X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0JaWRfdGFibGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBiZXJyeV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHVzYl9yZWdpc3RlcigmYmVycnlfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGJlcnJ5X2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmYmVycnlfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoYmVycnlfaW5pdCk7Ci1tb2R1bGVfZXhpdChiZXJyeV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4iKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Ci1tb2R1bGVfcGFyYW0ocGVhcmxfZHVhbF9tb2RlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHBlYXJsX2R1YWxfbW9kZSwgIkNoYW5nZSBCbGFja2JlcnJ5IFBlYXJsIHRvIHJ1biBpbiBkdWFsIG1vZGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYyBiL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYwppbmRleCA1NzIwYmZlLi4xNTQ3ZDhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYwpAQCAtNTYsNyArNTYsNyBAQAogCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeXByZXNzX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGN5cHJlc3NfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoQ1lQUkVTU19WRU5ET1JfSUQsIENZUFJFU1NfUFJPRFVDVF9JRCkgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCmluZGV4IDRmYjNjMzguLmI5Y2JiYmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBVU0JfU0tFTF9WRU5ET1JfSUQJMHgwNGI0CiAjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHgwMDAyCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCmluZGV4IDg3OWE5ODAuLmE2NTIxYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRU1JMjZfVkVORE9SX0lELCBFTUkyNl9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShFTUkyNl9WRU5ET1JfSUQsIEVNSTI2Ql9QUk9EVUNUX0lEKSB9LAogCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggNTk4NjBiMy4uZmMxNWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IFVTQl9ERVZJQ0UoRU1JNjJfVkVORE9SX0lELCBFTUk2Ml9QUk9EVUNUX0lEKSB9LAogCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggOWQwNjc1ZS4uMWVkYjZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC04Niw3ICs4Niw3IEBACiAjZGVmaW5lIFVTQl9GVERJX0VMQU5fVkVORE9SX0lEIDB4MDQwMwogI2RlZmluZSBVU0JfRlRESV9FTEFOX1BST0RVQ1RfSUQgMHhkNmVhCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBmdGRpX2VsYW5fdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBmdGRpX2VsYW5fdGFibGVbXSA9IHsKICAgICAgICAge1VTQl9ERVZJQ0UoVVNCX0ZURElfRUxBTl9WRU5ET1JfSUQsIFVTQl9GVERJX0VMQU5fUFJPRFVDVF9JRCl9LAogICAgICAgICB7IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovIH0KIH07CkBAIC02MjMsOSArNjIzLDEyIEBACiAqLwogc3RhdGljIGludCBmdGRpX2VsYW5fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLSAgICAgICAgaW50IHN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKLSAgICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmZnRkaV9lbGFuX2RyaXZlciwKLSAgICAgICAgICAgICAgICBzdWJtaW5vcik7CisJaW50IHN1Ym1pbm9yOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisKKyAgICAgICAgc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworICAgICAgICBpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmZ0ZGlfZWxhbl9kcml2ZXIsIHN1Ym1pbm9yKTsKKwogICAgICAgICBpZiAoIWludGVyZmFjZSkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLCBzdWJtaW5vcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCmluZGV4IDEzMzdhOWMuLmE1NGMzY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIElEX0NIRVJSWSAgMHgwMDEwCiAKIC8qIGRldmljZSBJRCB0YWJsZSAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkbW91c2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZG1vdXNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoSURfU0lFTUVOUywgSURfSURNT1VTRSl9LCAvKiBTaWVtZW5zIElEIE1vdXNlIChQcm9mZXNzaW9uYWwpICovCiAJe1VTQl9ERVZJQ0UoSURfU0lFTUVOUywgSURfQ0hFUlJZICl9LCAvKiBDaGVycnkgRmluZ2VyVElQIElEIEJvYXJkICAgICAgICovCiAJe30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGluZyBudWxsIGVudHJ5ICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jIGIvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYwppbmRleCBlNzViYjg3Li5kM2M4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogLyogZHJpdmVyIHJlZ2lzdHJhdGlvbiAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlvd2Fycmlvcl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpb3dhcnJpb3JfaWRzW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI0KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPV1BWMSl9LApAQCAtNjAyLDEwICs2MDIsMTIgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmaW93YXJyaW9yX2RyaXZlciwgc3VibWlub3IpOwogCWlmICghaW50ZXJmYWNlKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLCBfX2Z1bmNfXywKIAkJICAgIHN1Ym1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MTUsNiArNjE3LDcgQEAKIAlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJaWYgKCFkZXYpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpb3dhcnJpb3Jfb3Blbl9kaXNjX2xvY2spOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNjQxLDYgKzY0NCw3IEBACiAKIG91dDoKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lzaWdodF9maXJtd2FyZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pc2lnaHRfZmlybXdhcmUuYwppbmRleCBiODk3ZjY1Li4wNmU5OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lzaWdodF9maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaXNpZ2h0X2Zpcm13YXJlLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDVhYywgMHg4MzAwKX0sCiAJe30sCiB9OwpAQCAtMTEyLDYgKzExMiw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorTU9EVUxFX0ZJUk1XQVJFKCJpc2lnaHQuZnciKTsKKwogc3RhdGljIHZvaWQgaXNpZ2h0X2Zpcm13YXJlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKaW5kZXggOTBmMTMwMS4uZGQ0MWQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwpAQCAtNjksNyArNjksNyBAQAogI2VuZGlmCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBsZF91c2JfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbGRfdXNiX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1kpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kpIH0sCkBAIC03OTgsNyArNzk4LDcgQEAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZsZF91c2JfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAlcyBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgX19GSUxFX18sIHJldHZhbCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggZmFhNmQ2Mi4uODU0N2JmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC05NSw4ICs5NSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnID49IGx2bCkgcHJpbnRrKEtFUk5fREVCVUcgIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KKyNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChkZWJ1ZyA+PSBsdmwpCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fRklMRV9fLCAjI2FyZyk7CVwKK30gd2hpbGUgKDApCiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjk2IgpAQCAtMTkyLDcgKzE5NSw3IEBACiAKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRvd2VyX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRvd2VyX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKExFR09fVVNCX1RPV0VSX1ZFTkRPUl9JRCwgTEVHT19VU0JfVE9XRVJfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMzAyLDcgKzMwNSw3IEBACiAJaWYgKGRlYnVnIDwgbGV2ZWwpCiAJCXJldHVybjsKIAotCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyI6ICVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBmdW5jdGlvbiwgc2l6ZSk7CisJcHJpbnRrIChLRVJOX0RFQlVHICIlczogJXMgLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIF9fRklMRV9fLCBmdW5jdGlvbiwgc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewogCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOwogCX0KQEAgLTEwNTUsNyArMTA1OCw3IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdG93ZXJfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgJXMgZHJpdmVyLiBFcnJvciBudW1iZXIgJWQiLCBfX0ZJTEVfXywgcmVzdWx0KTsKIAkJcmV0dmFsID0gLTE7CiAJCWdvdG8gZXhpdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwppbmRleCAzMmQwMTk5Li5hODU3NzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTc4LDEwICs3OCwxMyBAQAogewogCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CiAKKwkvKiBhZ2FpbnN0IGRpc2Nvbm5lY3QoKSAqLworCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmKHJpby0+bG9jaykpOwogCiAJaWYgKHJpby0+aXNvcGVuIHx8ICFyaW8tPnByZXNlbnQpIHsKIAkJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcmlvLT5pc29wZW4gPSAxOwpAQCAtOTEsNiArOTQsNyBAQAogCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwogCiAJZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIG9wZW5lZC5cbiIpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE1LDcgKzExOSw2IEBACiAJaW50IHJldHJpZXM7CiAJaW50IHJldHZhbD0wOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCYocmlvLT5sb2NrKSk7CiAgICAgICAgIC8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgcmlvIGlzIGNvbm5lY3RlZCwgcG93ZXJlZCwgZXRjICovCiAgICAgICAgIGlmIChyaW8tPnByZXNlbnQgPT0gMCB8fCByaW8tPnJpb19kZXYgPT0gTlVMTCkgewpAQCAtMjU0LDcgKzI1Nyw2IEBACiAKIGVycl9vdXQ6CiAJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ4OSw2ICs0OTEsNyBAQAogCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJbG9ja19rZXJuZWwoKTsKIAlpZiAocmlvKSB7CiAJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CiAKQEAgLTQ5OCw2ICs1MDEsNyBAQAogCQkJLyogYmV0dGVyIGxldCBpdCBmaW5pc2ggLSB0aGUgcmVsZWFzZSB3aWxsIGRvIHdoYXRzIG5lZWRlZCAqLwogCQkJcmlvLT5yaW9fZGV2ID0gTlVMTDsKIAkJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuOwogCQl9CiAJCWtmcmVlKHJpby0+aWJ1Zik7CkBAIC01MDgsOSArNTEyLDEwIEBACiAJCXJpby0+cHJlc2VudCA9IDA7CiAJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCByaW9fdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcmlvX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDg0MSwgMSkgfSwgCQkvKiBSaW8gNTAwICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggOGIzN2E0Yi4uYWFlOTVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXNpc3VzYi0+dXJic3RhdHVzW2luZGV4XSB8PSBTVV9VUkJfQlVTWTsKIAogCS8qIFN1Ym1pdCBVUkIgKi8KLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAKIAkvKiBJZiBPSywgYW5kIGlmIHRpbWVvdXQgPiAwLCB3YWl0IGZvciBjb21wbGV0aW9uICovCiAJaWYgKChyZXR2YWwgPT0gMCkgJiYgdGltZW91dCkgewpAQCAtMzA2LDcgKzMwNiw3IEBACiAJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAogCXNpc3VzYi0+Y29tcGxldGVpbiA9IDA7Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwgPT0gMCkgewogCQl3YWl0X2V2ZW50X3RpbWVvdXQoc2lzdXNiLT53YWl0X3EsIHNpc3VzYi0+Y29tcGxldGVpbiwgdGltZW91dCk7CiAJCWlmICghc2lzdXNiLT5jb21wbGV0ZWluKSB7CkBAIC0yNDE2LDIxICsyNDE2LDI4IEBACiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlpbnQgc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwogCi0JaWYgKCEoaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZzaXN1c2JfZHJpdmVyLCBzdWJtaW5vcikpKQorCWxvY2tfa2VybmVsKCk7CisJaWYgKCEoaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZzaXN1c2JfZHJpdmVyLCBzdWJtaW5vcikpKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0JaWYgKCEoc2lzdXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpKSkKKwlpZiAoIShzaXN1c2IgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSkpKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJbXV0ZXhfbG9jaygmc2lzdXNiLT5sb2NrKTsKIAogCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5KSB7CiAJCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoc2lzdXNiLT5pc29wZW4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0yNDM5LDExICsyNDQ2LDEzIEBACiAJCQlpZiAoc2lzdXNiX2luaXRfZ2Z4ZGV2aWNlKHNpc3VzYiwgMCkpIHsKIAkJCQltdXRleF91bmxvY2soJnNpc3VzYi0+bG9jayk7CiAJCQkJZGV2X2Vycigmc2lzdXNiLT5zaXN1c2JfZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2VcbiIpOworCQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKIAkJCWRldl9lcnIoJnNpc3VzYi0+c2lzdXNiX2Rldi0+ZGV2LCAiRGV2aWNlIG5vdCBhdHRhY2hlZCB0byBVU0IgMi4wIGh1YlxuIik7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KQEAgLTI0NTYsNiArMjQ2NSw3IEBACiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2lzdXNiOwogCiAJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzIzOCw3ICszMjQ4LDcgQEAKIAlrcmVmX3B1dCgmc2lzdXNiLT5rcmVmLCBzaXN1c2JfZGVsZXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNpc3VzYl90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaXN1c2JfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA1NTApIH0sCiAJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTAwKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwppbmRleCAyZTE0MTAyLi41ZGEyOGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIFRSQU5DRVZJQlJBVE9SX1ZFTkRPUl9JRAkweDBiNDkJLyogQVNDSUkgQ29ycG9yYXRpb24gKi8KICNkZWZpbmUgVFJBTkNFVklCUkFUT1JfUFJPRFVDVF9JRAkweDA2NGYJLyogVHJhbmNlIFZpYnJhdG9yICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShUUkFOQ0VWSUJSQVRPUl9WRU5ET1JfSUQsIFRSQU5DRVZJQlJBVE9SX1BST0RVQ1RfSUQpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCmluZGV4IDRmYjEyMDMuLjkwYWVkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBJT0NUTF9HRVRfRFJWX1ZFUlNJT04JMgogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgLmlkVmVuZG9yID0gMHgxMEQyLCAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiwgfSwKIAl7IH0sCiB9OwpAQCAtNzQsMTAgKzc0LDEyIEBACiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlpbnQgc3VibWlub3IsIHI7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmbGNkX2RyaXZlciwgc3VibWlub3IpOwogCWlmICghaW50ZXJmYWNlKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJZXJyICgiVVNCTENEOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAogCQkgICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtODcsNiArODksNyBAQAogCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAlpZiAoIWRldikgewogCQltdXRleF91bmxvY2soJm9wZW5fZGlzY19tdXRleCk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC05OCwxMSArMTAxLDEzIEBACiAJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRlcmZhY2UpOwogCWlmIChyIDwgMCkgewogCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBzYXZlIG91ciBvYmplY3QgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCmluZGV4IDA2Y2I3MTkuLjYzZGEyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBQUk9EVUNUX0lECTB4MTIyMwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwppbmRleCAzZGIyNTU1Li5hOTU1NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTUFYTEVOCQk2CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCAzZGFiMGMwLi5hMjFjY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMTU4MCwxMCArMTU4MCw2IEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAkvKiBGSVhNRTogV2hhdCBpZiBhIHN5c3RlbSBzbGVlcCBzdGFydHMgd2hpbGUgYSB0ZXN0IGlzIHJ1bm5pbmc/ICovCi0JaWYgKCFpbnRmLT5pc19hY3RpdmUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKLQl9CiAKIAkvKiBzb21lIGRldmljZXMsIGxpa2UgZXotdXNiIGRlZmF1bHQgZGV2aWNlcywgbmVlZCBhIG5vbi1kZWZhdWx0CiAJICogYWx0c2V0dGluZyB0byBoYXZlIGFueSBhY3RpdmUgZW5kcG9pbnRzLiAgc29tZSB0ZXN0cyBjaGFuZ2UKQEAgLTIxMDEsNyArMjA5Nyw3IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IDlhNmMyN2EwLi5mNTZmZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogfQogCiAvKiB0YWJsZSBvZiBjYWJsZXMgdGhhdCB3b3JrIHRocm91Z2ggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c3M3MjBfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNzNzIwX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDQ3ZSwgMHgxMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4MjAwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzI5LCAweDEyODQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2ZWE4ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKLSAqCi0gKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCi0gKgotICogIEF1dGhvcjogICAgIEpvaG5uaWUgUGV0ZXJzCi0gKiAgICAgICAgICAgICAgQXhpYW4gQ29uc3VsdGluZwotICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQotICoKLSAqICBNb2RpZmllZCBieTogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgotICogICAgICAgICAgICAgICAgICAgT3JlZ29uIENpdHksIE9SLCBVU0EgOTcwNDUKLSAqCi0gKiAgQ29weXJpZ2h0OiAgMjAwNywgMjAwOAotICogICAgICAgICAgICAgIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5Ci0gKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1Ci0gKgotICogIFdlYjogICAgICAgIHd3dy52ZXJuaWVyLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3VzYi92c3R1c2IuaD4KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVlNUIFVTQiBEcml2ZXIgVmVyc2lvbiAxLjUiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ3kgQnVsayBVU0IgRHJpdmVyIgotCi0jaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwotCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMAotI2Vsc2UKLQkjZGVmaW5lIFZTVFVTQl9NSU5PUl9CQVNFCTE5OQotI2VuZGlmCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUwkweDI0NTcKLSNkZWZpbmUgVVNCX1ZFTkRPUl9WRVJOSUVSCTB4MDhGNwkvKiBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neSAqLwotCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjIwMDAJMHgxMDAyCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0FEQzEwMDBfRlcJMHgxMDAzCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KLSNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMAkweDEwMDQKLSNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwX0ZXCTB4MTAwOQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0hSMjAwMAkweDEwMEEKLSNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwX0ZXCTB4MTAxMQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0hSNDAwMAkweDEwMTIKLSNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNjUwCTB4MTAxNAkvKiAiUmVkIFRpZGUiICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1FFNjUwMDAJMHgxMDE4Ci0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjQwMDAJMHgxMDIyCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjMyNQkweDEwMjQJLyogIlZlcm5pZXIgU3BlY3Ryb21ldGVyIiAqLwotCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0xBQlBSTwkweDAwMDEKLSNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUVVFU1QJMHgwMDA1Ci0KLSNkZWZpbmUgVlNUX01BWEJVRkZFUgkJKDY0KjEwMjQpCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IyMDAwKX0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX0hSNDAwMCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I2NTApfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCNDAwMCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IzMjUpfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9WRVJOSUVSLCBVU0JfUFJPRFVDVF9MQUJRVUVTVCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlBSTyl9LAotCXt9LAotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RydWN0IHZzdHVzYl9kZXZpY2UgewotCXN0cnVjdCBrcmVmCQkJCWtyZWY7Ci0Jc3RydWN0IG11dGV4ICAgICAgICAgICAgbG9jazsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdXNiX2RldjsKLQljaGFyICAgICAgICAgICAgICAgICAgICBwcmVzZW50OwotCWNoYXIgICAgICAgICAgICAgICAgICAgIGlzb3BlbjsKLQlzdHJ1Y3QgdXNiX2FuY2hvciAgICAgICBzdWJtaXR0ZWQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgcmRfcGlwZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICByZF90aW1lb3V0X21zOwotCWludCAgICAgICAgICAgICAgICAgICAgIHdyX3BpcGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgd3JfdGltZW91dF9tczsKLX07Ci0jZGVmaW5lIHRvX3ZzdF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB2c3R1c2JfZGV2aWNlLCBrcmVmKQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlcjsKLQotc3RhdGljIHZvaWQgdnN0dXNiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdG9fdnN0X2RldihrcmVmKTsKLQotCXVzYl9wdXRfZGV2KHZzdGRldi0+dXNiX2Rldik7Ci0Ja2ZyZWUodnN0ZGV2KTsKLX0KLQotc3RhdGljIGludCB2c3R1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0KLQlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnZzdHVzYl9kcml2ZXIsIGltaW5vcihpbm9kZSkpOwotCi0JaWYgKCFpbnRlcmZhY2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaW1pbm9yKGlub2RlKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCWlmICghdnN0ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KLQltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JLyogY2FuIG9ubHkgb3BlbiBvbmUgdGltZSAqLwotCWlmICgoIXZzdGRldi0+cHJlc2VudCkgfHwgKHZzdGRldi0+aXNvcGVuKSkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLwotCWtyZWZfZ2V0KCZ2c3RkZXYtPmtyZWYpOwotCi0JdnN0ZGV2LT5pc29wZW4gPSAxOwotCi0JLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZzdGRldjsKLQotCWRldl9kYmcoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IG9wZW5lZFxuIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnN0dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKLQotCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmICh2c3RkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JdnN0ZGV2LT5pc29wZW4gPSAwOwotCi0JZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogcmVsZWFzZWRcbiIsIF9fZnVuY19fKTsKLQotCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQotCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlaXQgPSB1cmItPmNvbnRleHQ7Ci0KLQljb21wbGV0ZShjb21wbGV0ZWl0KTsKLX0KLQotc3RhdGljIGludCB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIoc3RydWN0IHVyYiAqdXJiLAotCQkJCSAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKLQkJCQkgICAgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCi0JCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQotewotCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7Ci0Jc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICoqaG9zdGVwOwotCXVuc2lnbmVkIGludCBwaXBlbmQ7Ci0KLQlpbnQgc3RhdHVzOwotCi0JaG9zdGVwID0gdXNiX3BpcGVpbihwaXBlKSA/IHVzYl9kZXYtPmVwX2luIDogdXNiX2Rldi0+ZXBfb3V0OwotCXBpcGVuZCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7Ci0JZXAgPSBob3N0ZXBbcGlwZW5kXTsKLQotCWlmICghZXAgfHwgKGxlbiA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKLQkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOwotCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAotCQkJCSAodXNiX2NvbXBsZXRlX3QpdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLAotCQkJCSBOVUxMLCBlcC0+ZGVzYy5iSW50ZXJ2YWwpOwotCX0gZWxzZQotCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKLQkJCQkgICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCi0JCQkJICBOVUxMKTsKLQotCWluaXRfY29tcGxldGlvbihkb25lKTsKLQl1cmItPmNvbnRleHQgPSBkb25lOwotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgdnN0dXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLAotCQkJICAgICAgIGludCB0aW1lb3V0LCBpbnQgKmFjdHVhbF9sZW5ndGgpCi17Ci0JdW5zaWduZWQgbG9uZyBleHBpcmU7Ci0JaW50IHN0YXR1czsKLQotCWV4cGlyZSA9IHRpbWVvdXQgPyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChkb25lLCBleHBpcmUpKSB7Ci0JCXVzYl9raWxsX3VyYih1cmIpOwotCQlzdGF0dXMgPSB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IHVyYi0+c3RhdHVzOwotCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCi0JCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWQsIHVyYiBzdGF0dXMgPSAlZFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sCi0JCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCi0JCQl1cmItPmFjdHVhbF9sZW5ndGgsCi0JCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQl1cmItPnN0YXR1cyk7Ci0KLQl9IGVsc2UgewotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCS8qIGlmIHJlYWxseSBhbiBlcnJvciAqLwotCQkJaWYgKHVyYi0+c3RhdHVzICYmICEoKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpICAgICB8fAotCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgfHwKLQkJCQkJICAgICAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpKSB7Ci0JCQkJc3RhdHVzID0gLUVJTlRSOwotCQkJCXVzYl9raWxsX3VyYih1cmIpOwotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSAwOwotCQkJfQotCi0JCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAotCQkJCSIlczogc2lnbmFsIHBlbmRpbmcgb24gZXAlZCVzIGxlbj0lZC8lZCwiCi0JCQkJInVyYiBzdGF0dXMgPSAlZFxuIiwKLQkJCQljdXJyZW50LT5jb21tLAotCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKLQkJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQl1cmItPnN0YXR1cyk7Ci0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCQl9Ci0JfQotCi0JaWYgKGFjdHVhbF9sZW5ndGgpCi0JCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHNzaXplX3QgdnN0dXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCWludCBjbnQgPSAtMTsKLQl2b2lkICpidWY7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOwotCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OwotCi0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7Ci0KLQl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAodnN0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byByZWFkIHNvbWUgZGF0YSAqLwotCWlmICgoY291bnQgPT0gMCkgfHwgKGNvdW50ID4gVlNUX01BWEJVRkZFUikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogbG9jayB0aGlzIG9iamVjdCAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQkvKiBhbnlvbmUgaG9tZSAqLwotCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLwotCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7Ci0JcGlwZSA9ICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHZzdGRldi0+cmRfcGlwZSk7Ci0JdGltZW91dCA9IHZzdGRldi0+cmRfdGltZW91dF9tczsKLQotCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChidWYgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1cmIpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0JcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWYsIGNvdW50LCAmZG9uZSk7Ci0JbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCWlmIChyZXR2YWwpIHsKLQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAotCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBjbnQpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwgX19mdW5jX18pOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCXJldHZhbCA9IGNudDsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKLQl9Ci0KLWV4aXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3NpemVfdCB2c3R1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKLQlpbnQgY250ID0gLTE7Ci0Jdm9pZCAqYnVmOwotCWludCByZXR2YWwgPSAwOwotCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKLQotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwotCi0JdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHZzdGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCi0JaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKLQkJcmV0dXJuIHJldHZhbDsKLQotCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JLyogYW55b25lIGhvbWUgKi8KLQlpZiAoIXZzdGRldi0+cHJlc2VudCkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkgICAgICAgIjogJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KLQlkZXYgPSAgICAgdnN0ZGV2LT51c2JfZGV2OwotCXBpcGUgPSAgICB1c2Jfc25kYnVsa3BpcGUoZGV2LCB2c3RkZXYtPndyX3BpcGUpOwotCXRpbWVvdXQgPSB2c3RkZXYtPndyX3RpbWVvdXRfbXM7Ci0KLQlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghdXJiKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwgX19mdW5jX18pOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOwotCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmLCBjb3VudCwgJmRvbmUpOwotCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQlnb3RvIGV4aXQ7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gY250OwotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZW50ICVkIGJ5dGVzIHRvIHBpcGUgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKLQl9Ci0KLWV4aXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgbG9uZyB2c3R1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXR2YWwgPSAwOwotCWludCBjbnQgPSAtMTsKLQl2b2lkIF9fdXNlciAqZGF0YSA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlzdHJ1Y3QgdnN0dXNiX2FyZ3MgdXNiX2RhdGE7Ci0KLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCXZvaWQgKmJ1ZmZlciA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIGJ1ZmZlciBpcwotCQkJICAgICAgKglyZWZlcmVuY2VkIG9uIGV4aXQgYnV0IG5vdCBhbGwKLQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCi0KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiID0gTlVMTDsgLyogbXVzdCBiZSBpbml0aWFsaXplZC4gdXJiIGlzCi0JCQkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCi0JCQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCi0Jc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOwotCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7Ci0KLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQotCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmIChfSU9DX1RZUEUoY21kKSAhPSBWU1RfSU9DX01BR0lDKSB7Ci0JCWRldl93YXJuKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwKLQkJCSAiJXM6IGlvY3RsIGNvbW1hbmQgJXgsIGJhZCBpb2N0bCBtYWdpYyAleCwgIgotCQkJICJleHBlY3RlZCAleFxuIiwgX19mdW5jX18sIGNtZCwKLQkJCSBfSU9DX1RZUEUoY21kKSwgVlNUX0lPQ19NQUdJQyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh2c3RkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnVzYl9kYXRhLCBkYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKLQkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKSB7Ci0JCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIGFueW9uZSBob21lICovCi0JaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfZXJyKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KLQlkZXYgPSB2c3RkZXYtPnVzYl9kZXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXOgotCi0JCXZzdGRldi0+cmRfcGlwZSA9IHVzYl9kYXRhLnJkX3BpcGU7Ci0JCXZzdGRldi0+cmRfdGltZW91dF9tcyA9IHVzYl9kYXRhLnJkX3RpbWVvdXRfbXM7Ci0JCXZzdGRldi0+d3JfcGlwZSA9IHVzYl9kYXRhLndyX3BpcGU7Ci0JCXZzdGRldi0+d3JfdGltZW91dF9tcyA9IHVzYl9kYXRhLndyX3RpbWVvdXRfbXM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHNldHRpbmcgcGlwZXMvdGltZW91dHMsICIKLQkJCSJyZHBpcGUgPSAlZCwgcmR0aW1lb3V0ID0gJWQsICIKLQkJCSJ3cnBpcGUgPSAlZCwgd3J0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLAotCQkJdnN0ZGV2LT5yZF9waXBlLCB2c3RkZXYtPnJkX3RpbWVvdXRfbXMsCi0JCQl2c3RkZXYtPndyX3BpcGUsIHZzdGRldi0+d3JfdGltZW91dF9tcyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFOgotCi0JCWlmICgodXNiX2RhdGEuY291bnQgPT0gMCkgfHwgKHVzYl9kYXRhLmNvdW50ID4gVlNUX01BWEJVRkZFUikpIHsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlidWZmZXIgPSBrbWFsbG9jKHVzYl9kYXRhLmNvdW50LCBHRlBfS0VSTkVMKTsKLQkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF1cmIpIHsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl0aW1lb3V0ID0gdXNiX2RhdGEudGltZW91dF9tczsKLQotCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgdXNiX2RhdGEucGlwZSk7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNiX2RhdGEuYnVmZmVyLCB1c2JfZGF0YS5jb3VudCkpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0JCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAotCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOwotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJfQotCi0JCWJyZWFrOwotCWNhc2UgSU9DVExfVlNUVVNCX1JFQ1ZfUElQRToKLQotCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdXJiKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7Ci0KLQkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOwotCi0JCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKLQkJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWZmZXIsCi0JCQkJCQkgIHVzYl9kYXRhLmNvdW50LCAmZG9uZSk7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJaWYgKHJldHZhbCkgewotCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwotCQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkJIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAotCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih1c2JfZGF0YS5idWZmZXIsIGJ1ZmZlciwgY250KSkgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl1c2JfZGF0YS5jb3VudCA9IGNudDsKLQkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCAmdXNiX2RhdGEsIHNpemVvZihzdHJ1Y3QgdnN0dXNiX2FyZ3MpKSkgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWN2ICV6ZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCi0JCQkJX19mdW5jX18sIHVzYl9kYXRhLmNvdW50LCB1c2JfZGF0YS5waXBlKTsKLQkJfQotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfd2FybigmZGV2LT5kZXYsICJpb2N0bF92c3R1c2I6IGludmFsaWQgaW9jdGwgY21kICV4XG4iLAotCQkJIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci1leGl0OgotCXVzYl9mcmVlX3VyYih1cmIpOwotCWtmcmVlKGJ1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnN0dXNiX2ZvcHMgPSB7Ci0JLm93bmVyID0gICAgICAgICAgICAgICAgVEhJU19NT0RVTEUsCi0JLnJlYWQgPSAgICAgICAgICAgICAgICAgdnN0dXNiX3JlYWQsCi0JLndyaXRlID0gICAgICAgICAgICAgICAgdnN0dXNiX3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bCA9ICAgICAgIHZzdHVzYl9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gICAgICAgICB2c3R1c2JfaW9jdGwsCi0JLm9wZW4gPSAgICAgICAgICAgICAgICAgdnN0dXNiX29wZW4sCi0JLnJlbGVhc2UgPSAgICAgICAgICAgICAgdnN0dXNiX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3ZzdHVzYl9jbGFzcyA9IHsKLQkubmFtZSA9ICAgICAgICAgInVzYi92c3R1c2IlZCIsCi0JLmZvcHMgPSAgICAgICAgICZ2c3R1c2JfZm9wcywKLQkubWlub3JfYmFzZSA9ICAgVlNUVVNCX01JTk9SX0JBU0UsCi19OwotCi1zdGF0aWMgaW50IHZzdHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCWludCBpOwotCWludCByZXR2YWwgPSAwOwotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KLQotCXZzdGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2c3RkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAodnN0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogbXVzdCBkbyB1c2JfZ2V0X2RldigpIHByaW9yIHRvIGtyZWZfaW5pdCgpIHNpbmNlIHRoZSBrcmVmX3B1dCgpCi0JICogcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGRvIGEgdXNiX3B1dF9kZXYoKSAqLwotCXVzYl9nZXRfZGV2KGRldik7Ci0Ja3JlZl9pbml0KCZ2c3RkZXYtPmtyZWYpOwotCW11dGV4X2luaXQoJnZzdGRldi0+bG9jayk7Ci0KLQlpID0gZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKLQotCWRldl9kYmcoJmludGYtPmRldiwgIlZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLAotCQkoaSAmIDB4RjAwMCkgPj4gMTIsIChpICYgMHhGMDApID4+IDgsCi0JCShpICYgMHhGMCkgPj4gNCwgKGkgJiAweEYpLCBkZXYtPmRldm51bSk7Ci0KLQl2c3RkZXYtPnByZXNlbnQgPSAxOwotCXZzdGRldi0+aXNvcGVuID0gMDsKLQl2c3RkZXYtPnVzYl9kZXYgPSBkZXY7Ci0JaW5pdF91c2JfYW5jaG9yKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHZzdGRldik7Ci0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3ZzdHVzYl9jbGFzcyk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZpbnRmLT5kZXYsCi0JCQkiJXM6IE5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LAotCQkgIlZTVCBVU0IgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCi0JCSAoaW50Zi0+bWlub3IgLSBWU1RVU0JfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpOwotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIiVzLCAlc1xuIiwgRFJJVkVSX0RFU0MsIERSSVZFUl9WRVJTSU9OKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHZzdHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCi0JaWYgKHZzdGRldikgewotCi0JCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7Ci0JCXZzdGRldi0+cHJlc2VudCA9IDA7Ci0KLQkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOwotCi0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQotCQlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKLQl9Ci0KLX0KLQotc3RhdGljIGludCB2c3R1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IHRpbWU7Ci0JaWYgKCF2c3RkZXYpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKLQl0aW1lID0gdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJnZzdGRldi0+c3VibWl0dGVkLCAxMDAwKTsKLQlpZiAoIXRpbWUpCi0JCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnZzdGRldi0+c3VibWl0dGVkKTsKLQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2c3R1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlciA9IHsKLQkubmFtZSA9ICAgICAgICAgInZzdHVzYiIsCi0JLnByb2JlID0gICAgICAgIHZzdHVzYl9wcm9iZSwKLQkuZGlzY29ubmVjdCA9ICAgdnN0dXNiX2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQgPSAgICAgIHZzdHVzYl9zdXNwZW5kLAotCS5yZXN1bWUgPSAgICAgICB2c3R1c2JfcmVzdW1lLAotCS5pZF90YWJsZSA9IGlkX3RhYmxlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdnN0dXNiX2luaXQodm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IHVzYl9yZWdpc3RlcigmdnN0dXNiX2RyaXZlcik7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgKCVkKSIsIF9fZnVuY19fLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2c3R1c2JfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodnN0dXNiX2luaXQpOwotbW9kdWxlX2V4aXQodnN0dXNiX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJEZW5uaXMgTydCcmllbi9TdGVwaGVuIFdhcmUiKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCAzODVlYzA1Li42ZGQ0NGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTQ2MCw4ICs0NjAsOCBAQAogICAgIGNoYXIgZXZfdHlwZSwgaW50IHN0YXR1cykKIHsKIAljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9ICZ1cmItPmVwLT5kZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHRpbWV2YWwgdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CkBAIC02MDAsMTAgKzYwMCwxMyBAQAogc3RhdGljIHZvaWQgbW9uX2Jpbl9lcnJvcih2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwID0gZGF0YTsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAorCWRvX2dldHRpbWVvZmRheSgmdHMpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKIAogCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIFBLVF9TSVpFKTsKQEAgLTYyMyw2ICs2MjYsOCBAQAogCWVwLT5kZXZudW0gPSB1cmItPmRldi0+ZGV2bnVtOwogCWVwLT5idXNudW0gPSB1cmItPmRldi0+YnVzLT5idXNudW07CiAJZXAtPmlkID0gKHVuc2lnbmVkIGxvbmcpIHVyYjsKKwllcC0+dHNfc2VjID0gdHMudHZfc2VjOworCWVwLT50c191c2VjID0gdHMudHZfdXNlYzsKIAllcC0+c3RhdHVzID0gZXJyb3I7CiAKIAllcC0+ZmxhZ19zZXR1cCA9ICctJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKaW5kZXggMDQ3NTY4Zi4uMzFjMTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCXVuc2lnbmVkIGludCBzdGFtcDsKIAogCWRvX2dldHRpbWVvZmRheSgmdHZhbCk7Ci0Jc3RhbXAgPSB0dmFsLnR2X3NlYyAmIDB4RkZGRjsJLyogMl4zMiA9IDQyOTQ5NjcyOTYuIExpbWl0IHRvIDQwOTZzLiAqLworCXN0YW1wID0gdHZhbC50dl9zZWMgJiAweEZGRjsJLyogMl4zMiA9IDQyOTQ5NjcyOTYuIExpbWl0IHRvIDQwOTZzLiAqLwogCXN0YW1wID0gc3RhbXAgKiAxMDAwMDAwICsgdHZhbC50dl91c2VjOwogCXJldHVybiBzdGFtcDsKIH0KQEAgLTI3MywxMiArMjczLDEyIEBACiAKIAllcC0+dHlwZSA9ICdFJzsKIAllcC0+aWQgPSAodW5zaWduZWQgbG9uZykgdXJiOwotCWVwLT5idXNudW0gPSAwOworCWVwLT5idXNudW0gPSB1cmItPmRldi0+YnVzLT5idXNudW07CiAJZXAtPmRldm51bSA9IHVyYi0+ZGV2LT5kZXZudW07CiAJZXAtPmVwbnVtID0gdXNiX2VuZHBvaW50X251bSgmdXJiLT5lcC0+ZGVzYyk7CiAJZXAtPnhmZXJ0eXBlID0gdXNiX2VuZHBvaW50X3R5cGUoJnVyYi0+ZXAtPmRlc2MpOwogCWVwLT5pc19pbiA9IHVzYl91cmJfZGlyX2luKHVyYik7Ci0JZXAtPnRzdGFtcCA9IDA7CisJZXAtPnRzdGFtcCA9IG1vbl9nZXRfdGltZXN0YW1wKCk7CiAJZXAtPmxlbmd0aCA9IDA7CiAJZXAtPnN0YXR1cyA9IGVycm9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggZDlkYjg2NC4uYjRjNzgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMzcsNyArMzcsNyBAQAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQwogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAotCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDMKIAlkZWZhdWx0IHkgaWYgKEJGNTR4ICYmICFCRjU0NCkKIAlkZWZhdWx0IHkgaWYgKEJGNTJ4ICYmICFCRjUyMiAmJiAhQkY1MjMpCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQMjQzMAogCiBjb21tZW50ICJPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX09NQVAzCiAKIGNvbW1lbnQgIkJsYWNrZmluIGhpZ2ggc3BlZWQgVVNCIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmICgoQkY1NHggJiYgIUJGNTQ0KSB8fCAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykpCkBAIC0xNTMsNyArMTUzLDcgQEAKIGNvbmZpZyBVU0JfSU5WRU5UUkFfRE1BCiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhTVVTQl9QSU9fT05MWQotCWRlZmF1bHQgQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzNFhYIHx8IEJMQUNLRklOCisJZGVmYXVsdCBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMgfHwgQkxBQ0tGSU4KIAloZWxwCiAJICBFbmFibGUgRE1BIHRyYW5zZmVycyB1c2luZyBNZW50b3IncyBlbmdpbmUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBhZDI2ZTY1Li5iY2VlMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0zMCw3ICszMCw2IEBACiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87CiAJdm9pZCBfX2lvbWVtICplcGlvID0gaHdfZXAtPnJlZ3M7CiAJdTggZXBudW0gPSBod19lcC0+ZXBudW07Ci0JdTE2IGRtYV9yZWcgPSAwOwogCiAJcHJlZmV0Y2goKHU4ICopc3JjKTsKIApAQCAtNDIsMTUgKzQxLDE3IEBACiAJZHVtcF9maWZvX2RhdGEoc3JjLCBsZW4pOwogCiAJaWYgKCFBTk9NQUxZXzA1MDAwMzgwICYmIGVwbnVtICE9IDApIHsKLQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpc3JjLAotCQkJKHVuc2lnbmVkIGludCkoc3JjICsgbGVuKSk7CisJCXUxNiBkbWFfcmVnOworCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzcmMsCisJCQkodW5zaWduZWQgbG9uZykoc3JjICsgbGVuKSk7CiAKIAkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLQkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBzcmMgJiAweEZGRkYpOworCQlkbWFfcmVnID0gKHUzMilzcmM7CiAJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9MT1cpLCBkbWFfcmVnKTsKIAkJU1NZTkMoKTsKIAotCQlkbWFfcmVnID0gKHUxNikgKCgodTMyKSBzcmMgPj4gMTYpICYgMHhGRkZGKTsKKwkJZG1hX3JlZyA9ICh1MzIpc3JjID4+IDE2OwogCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOwogCQlTU1lOQygpOwogCkBAIC03OSwxMiArODAsOSBAQAogCQlTU1lOQygpOwogCiAJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylzcmMgJiAweDAxKSkKLQkJCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKKwkJCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLCAobGVuICsgMSkgPj4gMSk7CiAJCWVsc2UKLQkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKLQkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0KKwkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywgKGxlbiArIDEpID4+IDEpOwogCX0KIH0KIC8qCkBAIC05NCwxOSArOTIsMTkgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKLQl1MTYgZG1hX3JlZyA9IDA7CiAKIAlpZiAoQU5PTUFMWV8wNTAwMDQ2NyAmJiBlcG51bSAhPSAwKSB7CisJCXUxNiBkbWFfcmVnOwogCi0JCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAotCQkJKHVuc2lnbmVkIGludCkoZHN0ICsgbGVuKSk7CisJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWRzdCwKKwkJCSh1bnNpZ25lZCBsb25nKShkc3QgKyBsZW4pKTsKIAogCQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLwotCQlkbWFfcmVnID0gKHUxNikgKCh1MzIpIGRzdCAmIDB4RkZGRik7CisJCWRtYV9yZWcgPSAodTMyKWRzdDsKIAkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOwogCQlTU1lOQygpOwogCi0JCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOworCQlkbWFfcmVnID0gKHUzMilkc3QgPj4gMTY7CiAJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CiAJCVNTWU5DKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwppbmRleCBhNDRhNDUwLi4zYzY5YTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCkBAIC0xMTkxLDggKzExOTEsMTMgQEAKIAogCQliZCA9IHR4X2NoLT5oZWFkOwogCisJCS8qCisJCSAqIElmIEhlYWQgaXMgbnVsbCB0aGVuIHRoaXMgY291bGQgbWVhbiB0aGF0IGEgYWJvcnQgaW50ZXJydXB0CisJCSAqIHRoYXQgbmVlZHMgdG8gYmUgYWNrbm93bGVkZ2VkLgorCQkgKi8KIAkJaWYgKE5VTEwgPT0gYmQpIHsKIAkJCURCRygxLCAibnVsbCBCRFxuIik7CisJCQl0eF9yYW0tPnR4X2NvbXBsZXRlID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE0MTIsMTUgKzE0MTcsNiBAQAogCiAJaWYgKGNwcGlfY2gtPnRyYW5zbWl0KSB7CiAJCXN0cnVjdCBjcHBpX3R4X3N0YXRlcmFtIF9faW9tZW0gKnR4X3JhbTsKLQkJaW50CQkJZW5hYmxlZDsKLQotCQkvKiBtYXNrIGludGVycnVwdHMgcmFpc2VkIHRvIHNpZ25hbCB0ZWFyZG93biBjb21wbGV0ZS4gICovCi0JCWVuYWJsZWQgPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9UWENQUElfSU5URU5BQl9SRUcpCi0JCQkJJiAoMSA8PCBjcHBpX2NoLT5pbmRleCk7Ci0JCWlmIChlbmFibGVkKQotCQkJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1RYQ1BQSV9JTlRDTFJfUkVHLAotCQkJCQkoMSA8PCBjcHBpX2NoLT5pbmRleCkpOwotCiAJCS8qIFJFVklTSVQgcHV0IHRpbWVvdXRzIG9uIHRoZXNlIGNvbnRyb2xsZXIgaGFuZHNoYWtlcyAqLwogCiAJCWNwcGlfZHVtcF90eCg2LCBjcHBpX2NoLCAiICh0ZWFyZG93bikiKTsKQEAgLTE0MzUsNyArMTQzMSw2IEBACiAJCWRvIHsKIAkJCXZhbHVlID0gbXVzYl9yZWFkbCgmdHhfcmFtLT50eF9jb21wbGV0ZSwgMCk7CiAJCX0gd2hpbGUgKDB4RkZGRkZGRkMgIT0gdmFsdWUpOwotCQltdXNiX3dyaXRlbCgmdHhfcmFtLT50eF9jb21wbGV0ZSwgMCwgMHhGRkZGRkZGQyk7CiAKIAkJLyogRklYTUUgY2xlYW4gdXAgdGhlIHRyYW5zZmVyIHN0YXRlIC4uLiBoZXJlPwogCQkgKiB0aGUgY29tcGxldGlvbiByb3V0aW5lIHNob3VsZCBnZXQgY2FsbGVkIHdpdGgKQEAgLTE0NDgsMjMgKzE0NDMsMTUgQEAKIAkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWENTUiwgdmFsdWUpOwogCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYQ1NSLCB2YWx1ZSk7CiAKLQkJLyogV2hpbGUgd2Ugc2NydWIgdGhlIFRYIHN0YXRlIFJBTSwgZW5zdXJlIHRoYXQgd2UgY2xlYW4KLQkJICogdXAgYW55IGludGVycnVwdCB0aGF0J3MgY3VycmVudGx5IGFzc2VydGVkOgorCQkvKgogCQkgKiAxLiBXcml0ZSB0byBjb21wbGV0aW9uIFB0ciB2YWx1ZSAweDEoYml0IDAgc2V0KQogCQkgKiAgICAod3JpdGUgYmFjayBtb2RlKQotCQkgKiAyLiBXcml0ZSB0byBjb21wbGV0aW9uIFB0ciB2YWx1ZSAweDAoYml0IDAgY2xlYXJlZCkKLQkJICogICAgKGNvbXBhcmUgbW9kZSkKLQkJICogVmFsdWUgd3JpdHRlbiBpcyBjb21wYXJlZChmb3IgYml0cyAzMToyKSBhbmQgd2hlbgotCQkgKiBlcXVhbCwgaW50ZXJydXB0IGlzIGRlYXNzZXJ0ZWQuCisJCSAqIDIuIFdhaXQgZm9yIGFib3J0IGludGVycnVwdCBhbmQgdGhlbiBwdXQgdGhlIGNoYW5uZWwgaW4KKwkJICogICAgY29tcGFyZSBtb2RlIGJ5IHdyaXRpbmcgMSB0byB0aGUgdHhfY29tcGxldGUgcmVnaXN0ZXIuCiAJCSAqLwogCQljcHBpX3Jlc2V0X3R4KHR4X3JhbSwgMSk7Ci0JCW11c2Jfd3JpdGVsKCZ0eF9yYW0tPnR4X2NvbXBsZXRlLCAwLCAwKTsKLQotCQkvKiByZS1lbmFibGUgaW50ZXJydXB0ICovCi0JCWlmIChlbmFibGVkKQotCQkJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1RYQ1BQSV9JTlRFTkFCX1JFRywKLQkJCQkJKDEgPDwgY3BwaV9jaC0+aW5kZXgpKTsKLQorCQljcHBpX2NoLT5oZWFkID0gMDsKKwkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDEpOwogCQljcHBpX2R1bXBfdHgoNSwgY3BwaV9jaCwgIiAoZG9uZSB0ZWFyZG93bikiKTsKIAogCQkvKiBSRVZJU0lUIHR4IHNpZGUgX3Nob3VsZF8gY2xlYW4gdXAgdGhlIHNhbWUgd2F5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCA1ZWI5MzE4Li5iNGJiZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTU1Nyw2ICs1NTcsNjkgQEAKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCX0KIAorCisJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfU1VTUEVORCkgeworCQlEQkcoMSwgIlNVU1BFTkQgKCVzKSBkZXZjdGwgJTAyeCBwb3dlciAlMDJ4XG4iLAorCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksIGRldmN0bCwgcG93ZXIpOworCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CisKKwkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKKyNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCisJCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKKwkJCS8qIFdlIGFsc28gY29tZSBoZXJlIGlmIHRoZSBjYWJsZSBpcyByZW1vdmVkLCBzaW5jZQorCQkJICogdGhpcyBzaWxpY29uIGRvZXNuJ3QgcmVwb3J0IElELW5vLWxvbmdlci1ncm91bmRlZC4KKwkJCSAqCisJCQkgKiBXZSBkZXBlbmQgb24gVChhX3dhaXRfYmNvbikgdG8gc2h1dCB1cyBkb3duLCBhbmQKKwkJCSAqIGhvcGUgdXNlcnMgZG9uJ3QgZG8gYW55dGhpbmcgZGljZXkgZHVyaW5nIHRoaXMKKwkJCSAqIHVuZGVzaXJlZCBkZXRvdXIgdGhyb3VnaCBBX1dBSVRfQkNPTi4KKwkJCSAqLworCQkJbXVzYl9obnBfc3RvcChtdXNiKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKG11c2JfdG9faGNkKG11c2IpKTsKKwkJCW11c2Jfcm9vdF9kaXNjb25uZWN0KG11c2IpOworCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCisJCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbgorCQkJCQkJPyA6IE9UR19USU1FX0FfV0FJVF9CQ09OKSk7CisKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKKwkJCWlmICghbXVzYi0+aXNfYWN0aXZlKQorCQkJCWJyZWFrOworCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCQltdXNiX2dfc3VzcGVuZChtdXNiKTsKKwkJCW11c2ItPmlzX2FjdGl2ZSA9IGlzX290Z19lbmFibGVkKG11c2IpCisJCQkJCSYmIG11c2ItPnhjZWl2LT5nYWRnZXQtPmJfaG5wX2VuYWJsZTsKKwkJCWlmIChtdXNiLT5pc19hY3RpdmUpIHsKKyNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCisJCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfV0FJVF9BQ09OOworCQkJCURCRygxLCAiSE5QOiBTZXR0aW5nIHRpbWVyIGZvciBiX2FzZTBfYnJzdFxuIik7CisJCQkJbW9kX3RpbWVyKCZtdXNiLT5vdGdfdGltZXIsIGppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKAorCQkJCQkJCU9UR19USU1FX0JfQVNFMF9CUlNUKSk7CisjZW5kaWYKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoKKwkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwKQorCQkJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwgamlmZmllcworCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMobXVzYi0+YV93YWl0X2Jjb24pKTsKKwkJCWJyZWFrOworCQljYXNlIE9UR19TVEFURV9BX0hPU1Q6CisJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQV9TVVNQRU5EOworCQkJbXVzYi0+aXNfYWN0aXZlID0gaXNfb3RnX2VuYWJsZWQobXVzYikKKwkJCQkJJiYgbXVzYi0+eGNlaXYtPmhvc3QtPmJfaG5wX2VuYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIE9UR19TVEFURV9CX0hPU1Q6CisJCQkvKiBUcmFuc2l0aW9uIHRvIEJfUEVSSVBIRVJBTCwgc2VlIDYuOC4yLjYgcCA0NCAqLworCQkJREJHKDEsICJSRVZJU0lUOiBTVVNQRU5EIGFzIEJfSE9TVFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKwkJCW11c2ItPmlzX2FjdGl2ZSA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX0NPTk5FQ1QpIHsKIAkJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG11c2JfdG9faGNkKG11c2IpOwogCkBAIC02MjUsMTM2ICs2ODgsNiBAQAogCX0KICNlbmRpZgkvKiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QgKi8KIAotCS8qIG1lbnRvciBzYXZlcyBhIGJpdDogYnVzIHJlc2V0IGFuZCBiYWJibGUgc2hhcmUgdGhlIHNhbWUgaXJxLgotCSAqIG9ubHkgaG9zdCBzZWVzIGJhYmJsZTsgb25seSBwZXJpcGhlcmFsIHNlZXMgYnVzIHJlc2V0LgotCSAqLwotCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX1JFU0VUKSB7Ci0JCWlmIChpc19ob3N0X2NhcGFibGUoKSAmJiAoZGV2Y3RsICYgTVVTQl9ERVZDVExfSE0pICE9IDApIHsKLQkJCS8qCi0JCQkgKiBMb29rcyBsaWtlIG5vbi1IUyBCQUJCTEUgY2FuIGJlIGlnbm9yZWQsIGJ1dAotCQkJICogSFMgQkFCQkxFIGlzIGFuIGVycm9yIGNvbmRpdGlvbi4gRm9yIEhTIHRoZSBzb2x1dGlvbgotCQkJICogaXMgdG8gYXZvaWQgYmFiYmxlIGluIHRoZSBmaXJzdCBwbGFjZSBhbmQgZml4IHdoYXQKLQkJCSAqIGNhdXNlZCBCQUJCTEUuIFdoZW4gSFMgQkFCQkxFIGhhcHBlbnMgd2UgY2FuIG9ubHkKLQkJCSAqIHN0b3AgdGhlIHNlc3Npb24uCi0JCQkgKi8KLQkJCWlmIChkZXZjdGwgJiAoTVVTQl9ERVZDVExfRlNERVYgfCBNVVNCX0RFVkNUTF9MU0RFVikpCi0JCQkJREJHKDEsICJCQUJCTEUgZGV2Y3RsOiAlMDJ4XG4iLCBkZXZjdGwpOwotCQkJZWxzZSB7Ci0JCQkJRVJSKCJTdG9wcGluZyBob3N0IHNlc3Npb24gLS0gYmFiYmxlXG4iKTsKLQkJCQltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9ERVZDVEwsIDApOwotCQkJfQotCQl9IGVsc2UgaWYgKGlzX3BlcmlwaGVyYWxfY2FwYWJsZSgpKSB7Ci0JCQlEQkcoMSwgIkJVUyBSRVNFVCBhcyAlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7Ci0JCQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewotI2lmZGVmIENPTkZJR19VU0JfT1RHCi0JCQljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6Ci0JCQkJLyogV2UgbmVlZCB0byBpZ25vcmUgZGlzY29ubmVjdCBvbiBzdXNwZW5kCi0JCQkJICogb3RoZXJ3aXNlIHR1c2IgMi4wIHdvbid0IHJlY29ubmVjdCBhZnRlciBhCi0JCQkJICogcG93ZXIgY3ljbGUsIHdoaWNoIGJyZWFrcyBvdGcgY29tcGxpYW5jZS4KLQkJCQkgKi8KLQkJCQltdXNiLT5pZ25vcmVfZGlzY29ubmVjdCA9IDE7Ci0JCQkJbXVzYl9nX3Jlc2V0KG11c2IpOwotCQkJCS8qIEZBTExUSFJPVUdIICovCi0JCQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoJLyogT1BUIFRELjQuNy05MDBtcyAqLwotCQkJCS8qIG5ldmVyIHVzZSBpbnZhbGlkIFQoYV93YWl0X2Jjb24pICovCi0JCQkJREJHKDEsICJITlA6IGluICVzLCAlZCBtc2VjIHRpbWVvdXRcbiIsCi0JCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLAotCQkJCQkJVEFfV0FJVF9CQ09OKG11c2IpKTsKLQkJCQltb2RfdGltZXIoJm11c2ItPm90Z190aW1lciwgamlmZmllcwotCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoVEFfV0FJVF9CQ09OKG11c2IpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9UR19TVEFURV9BX1BFUklQSEVSQUw6Ci0JCQkJbXVzYi0+aWdub3JlX2Rpc2Nvbm5lY3QgPSAwOwotCQkJCWRlbF90aW1lcigmbXVzYi0+b3RnX3RpbWVyKTsKLQkJCQltdXNiX2dfcmVzZXQobXVzYik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKLQkJCQlEQkcoMSwgIkhOUDogUkVTRVQgKCVzKSwgdG8gYl9wZXJpcGhlcmFsXG4iLAotCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKLQkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwotCQkJCW11c2JfZ19yZXNldChtdXNiKTsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgotCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKLQkJCQltdXNiX2dfcmVzZXQobXVzYik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCURCRygxLCAiVW5oYW5kbGVkIEJVUyBSRVNFVCBhcyAlc1xuIiwKLQkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7Ci0JCQl9Ci0JCX0KLQotCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7Ci0JfQotCXNjaGVkdWxlX3dvcmsoJm11c2ItPmlycV93b3JrKTsKLQotCXJldHVybiBoYW5kbGVkOwotfQotCi0vKgotICogSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSB0byByZWNvcmQgVVNCICJnbG9iYWwiIGludGVycnVwdHMuCi0gKiBTaW5jZSB0aGVzZSBkbyBub3QgaGFwcGVuIG9mdGVuIGFuZCBzaWduaWZ5IHRoaW5ncyBvZgotICogcGFyYW1vdW50IGltcG9ydGFuY2UsIGl0IHNlZW1zIE9LIHRvIGNoZWNrIHRoZW0gaW5kaXZpZHVhbGx5OwotICogdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbnVhbAotICoKLSAqIEBwYXJhbSBtdXNiIGluc3RhbmNlIHBvaW50ZXIKLSAqIEBwYXJhbSBpbnRfdXNiIHJlZ2lzdGVyIGNvbnRlbnRzCi0gKiBAcGFyYW0gZGV2Y3RsCi0gKiBAcGFyYW0gcG93ZXIKLSAqLwotc3RhdGljIGlycXJldHVybl90IG11c2Jfc3RhZ2UyX2lycShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggaW50X3VzYiwKLQkJCQl1OCBkZXZjdGwsIHU4IHBvd2VyKQotewotCWlycXJldHVybl90IGhhbmRsZWQgPSBJUlFfTk9ORTsKLQotI2lmIDAKLS8qIFJFVklTSVQgLi4uIHRoaXMgd291bGQgYmUgZm9yIG11bHRpcGxleGluZyBwZXJpb2RpYyBlbmRwb2ludHMsIG9yCi0gKiBzdXBwb3J0aW5nIHRyYW5zZmVyIHBoYXNpbmcgdG8gcHJldmVudCBleGNlZWRpbmcgSVNPIGJhbmR3aWR0aAotICogbGltaXRzIG9mIGEgZ2l2ZW4gZnJhbWUgb3IgbWljcm9mcmFtZS4KLSAqCi0gKiBJdCdzIG5vdCBuZWVkZWQgZm9yIHBlcmlwaGVyYWwgc2lkZSwgd2hpY2ggZGVkaWNhdGVzIGVuZHBvaW50czsKLSAqIHRob3VnaCBpdCBfbWlnaHRfIHVzZSBTT0YgaXJxcyBmb3Igb3RoZXIgcHVycG9zZXMuCi0gKgotICogQW5kIGl0J3Mgbm90IGN1cnJlbnRseSBuZWVkZWQgZm9yIGhvc3Qgc2lkZSwgd2hpY2ggYWxzbyBkZWRpY2F0ZXMKLSAqIGVuZHBvaW50cywgcmVsaWVzIG9uIFRYL1JYIGludGVydmFsIHJlZ2lzdGVycywgYW5kIGlzbid0IGNsYWltZWQKLSAqIHRvIHN1cHBvcnQgSVNPIHRyYW5zZmVycyB5ZXQuCi0gKi8KLQlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9TT0YpIHsKLQkJdm9pZCBfX2lvbWVtICptYmFzZSA9IG11c2ItPm1yZWdzOwotCQlzdHJ1Y3QgbXVzYl9od19lcAkqZXA7Ci0JCXU4IGVwbnVtOwotCQl1MTYgZnJhbWU7Ci0KLQkJREJHKDYsICJTVEFSVF9PRl9GUkFNRVxuIik7Ci0JCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKLQotCQkvKiBzdGFydCBhbnkgcGVyaW9kaWMgVHggdHJhbnNmZXJzIHdhaXRpbmcgZm9yIGN1cnJlbnQgZnJhbWUgKi8KLQkJZnJhbWUgPSBtdXNiX3JlYWR3KG1iYXNlLCBNVVNCX0ZSQU1FKTsKLQkJZXAgPSBtdXNiLT5lbmRwb2ludHM7Ci0JCWZvciAoZXBudW0gPSAxOyAoZXBudW0gPCBtdXNiLT5ucl9lbmRwb2ludHMpCi0JCQkJCSYmIChtdXNiLT5lcG1hc2sgPj0gKDEgPDwgZXBudW0pKTsKLQkJCQllcG51bSsrLCBlcCsrKSB7Ci0JCQkvKgotCQkJICogRklYTUUgaGFuZGxlIGZyYW1lY291bnRlciB3cmFwcyAoMTIgYml0cykKLQkJCSAqIGVsaW1pbmF0ZSBkdXBsaWNhdGVkIFN0YXJ0VXJiIGxvZ2ljCi0JCQkgKi8KLQkJCWlmIChlcC0+ZHdXYWl0RnJhbWUgPj0gZnJhbWUpIHsKLQkJCQllcC0+ZHdXYWl0RnJhbWUgPSAwOwotCQkJCXByX2RlYnVnKCJTT0YgLS0+IHBlcmlvZGljIFRYJXMgb24gJWRcbiIsCi0JCQkJCWVwLT50eF9jaGFubmVsID8gIiBETUEiIDogIiIsCi0JCQkJCWVwbnVtKTsKLQkJCQlpZiAoIWVwLT50eF9jaGFubmVsKQotCQkJCQltdXNiX2hfdHhfc3RhcnQobXVzYiwgZXBudW0pOwotCQkJCWVsc2UKLQkJCQkJY3BwaV9ob3N0ZG1hX3N0YXJ0KG11c2IsIGVwbnVtKTsKLQkJCX0KLQkJfQkJLyogZW5kIG9mIGZvciBsb29wICovCi0JfQotI2VuZGlmCi0KIAlpZiAoKGludF91c2IgJiBNVVNCX0lOVFJfRElTQ09OTkVDVCkgJiYgIW11c2ItPmlnbm9yZV9kaXNjb25uZWN0KSB7CiAJCURCRygxLCAiRElTQ09OTkVDVCAoJXMpIGFzICVzLCBkZXZjdGwgJTAyeFxuIiwKIAkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLApAQCAtODAzLDY5ICs3MzYsMTE4IEBACiAJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CiAJCQlicmVhazsKIAkJfQotCi0JCXNjaGVkdWxlX3dvcmsoJm11c2ItPmlycV93b3JrKTsKIAl9CiAKLQlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9TVVNQRU5EKSB7Ci0JCURCRygxLCAiU1VTUEVORCAoJXMpIGRldmN0bCAlMDJ4IHBvd2VyICUwMnhcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwgZGV2Y3RsLCBwb3dlcik7CisJLyogbWVudG9yIHNhdmVzIGEgYml0OiBidXMgcmVzZXQgYW5kIGJhYmJsZSBzaGFyZSB0aGUgc2FtZSBpcnEuCisJICogb25seSBob3N0IHNlZXMgYmFiYmxlOyBvbmx5IHBlcmlwaGVyYWwgc2VlcyBidXMgcmVzZXQuCisJICovCisJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfUkVTRVQpIHsKKwkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOworCQlpZiAoaXNfaG9zdF9jYXBhYmxlKCkgJiYgKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKSAhPSAwKSB7CisJCQkvKgorCQkJICogTG9va3MgbGlrZSBub24tSFMgQkFCQkxFIGNhbiBiZSBpZ25vcmVkLCBidXQKKwkJCSAqIEhTIEJBQkJMRSBpcyBhbiBlcnJvciBjb25kaXRpb24uIEZvciBIUyB0aGUgc29sdXRpb24KKwkJCSAqIGlzIHRvIGF2b2lkIGJhYmJsZSBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGZpeCB3aGF0CisJCQkgKiBjYXVzZWQgQkFCQkxFLiBXaGVuIEhTIEJBQkJMRSBoYXBwZW5zIHdlIGNhbiBvbmx5CisJCQkgKiBzdG9wIHRoZSBzZXNzaW9uLgorCQkJICovCisJCQlpZiAoZGV2Y3RsICYgKE1VU0JfREVWQ1RMX0ZTREVWIHwgTVVTQl9ERVZDVExfTFNERVYpKQorCQkJCURCRygxLCAiQkFCQkxFIGRldmN0bDogJTAyeFxuIiwgZGV2Y3RsKTsKKwkJCWVsc2UgeworCQkJCUVSUigiU3RvcHBpbmcgaG9zdCBzZXNzaW9uIC0tIGJhYmJsZVxuIik7CisJCQkJbXVzYl93cml0ZWIobXVzYi0+bXJlZ3MsIE1VU0JfREVWQ1RMLCAwKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpc19wZXJpcGhlcmFsX2NhcGFibGUoKSkgeworCQkJREJHKDEsICJCVVMgUkVTRVQgYXMgJXNcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKKyNpZmRlZiBDT05GSUdfVVNCX09URworCQkJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgorCQkJCS8qIFdlIG5lZWQgdG8gaWdub3JlIGRpc2Nvbm5lY3Qgb24gc3VzcGVuZAorCQkJCSAqIG90aGVyd2lzZSB0dXNiIDIuMCB3b24ndCByZWNvbm5lY3QgYWZ0ZXIgYQorCQkJCSAqIHBvd2VyIGN5Y2xlLCB3aGljaCBicmVha3Mgb3RnIGNvbXBsaWFuY2UuCisJCQkJICovCisJCQkJbXVzYi0+aWdub3JlX2Rpc2Nvbm5lY3QgPSAxOworCQkJCW11c2JfZ19yZXNldChtdXNiKTsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX0JDT046CS8qIE9QVCBURC40LjctOTAwbXMgKi8KKwkJCQkvKiBuZXZlciB1c2UgaW52YWxpZCBUKGFfd2FpdF9iY29uKSAqLworCQkJCURCRygxLCAiSE5QOiBpbiAlcywgJWQgbXNlYyB0aW1lb3V0XG4iLAorCQkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwKKwkJCQkJCVRBX1dBSVRfQkNPTihtdXNiKSk7CisJCQkJbW9kX3RpbWVyKCZtdXNiLT5vdGdfdGltZXIsIGppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKFRBX1dBSVRfQkNPTihtdXNiKSkpOworCQkJCWJyZWFrOworCQkJY2FzZSBPVEdfU1RBVEVfQV9QRVJJUEhFUkFMOgorCQkJCW11c2ItPmlnbm9yZV9kaXNjb25uZWN0ID0gMDsKKwkJCQlkZWxfdGltZXIoJm11c2ItPm90Z190aW1lcik7CisJCQkJbXVzYl9nX3Jlc2V0KG11c2IpOworCQkJCWJyZWFrOworCQkJY2FzZSBPVEdfU1RBVEVfQl9XQUlUX0FDT046CisJCQkJREJHKDEsICJITlA6IFJFU0VUICglcyksIHRvIGJfcGVyaXBoZXJhbFxuIiwKKwkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDsKKwkJCQltdXNiX2dfcmVzZXQobXVzYik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKKwkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCQkJbXVzYl9nX3Jlc2V0KG11c2IpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEQkcoMSwgIlVuaGFuZGxlZCBCVVMgUkVTRVQgYXMgJXNcbiIsCisJCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJfQorCQl9CisJfQorCisjaWYgMAorLyogUkVWSVNJVCAuLi4gdGhpcyB3b3VsZCBiZSBmb3IgbXVsdGlwbGV4aW5nIHBlcmlvZGljIGVuZHBvaW50cywgb3IKKyAqIHN1cHBvcnRpbmcgdHJhbnNmZXIgcGhhc2luZyB0byBwcmV2ZW50IGV4Y2VlZGluZyBJU08gYmFuZHdpZHRoCisgKiBsaW1pdHMgb2YgYSBnaXZlbiBmcmFtZSBvciBtaWNyb2ZyYW1lLgorICoKKyAqIEl0J3Mgbm90IG5lZWRlZCBmb3IgcGVyaXBoZXJhbCBzaWRlLCB3aGljaCBkZWRpY2F0ZXMgZW5kcG9pbnRzOworICogdGhvdWdoIGl0IF9taWdodF8gdXNlIFNPRiBpcnFzIGZvciBvdGhlciBwdXJwb3Nlcy4KKyAqCisgKiBBbmQgaXQncyBub3QgY3VycmVudGx5IG5lZWRlZCBmb3IgaG9zdCBzaWRlLCB3aGljaCBhbHNvIGRlZGljYXRlcworICogZW5kcG9pbnRzLCByZWxpZXMgb24gVFgvUlggaW50ZXJ2YWwgcmVnaXN0ZXJzLCBhbmQgaXNuJ3QgY2xhaW1lZAorICogdG8gc3VwcG9ydCBJU08gdHJhbnNmZXJzIHlldC4KKyAqLworCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX1NPRikgeworCQl2b2lkIF9faW9tZW0gKm1iYXNlID0gbXVzYi0+bXJlZ3M7CisJCXN0cnVjdCBtdXNiX2h3X2VwCSplcDsKKwkJdTggZXBudW07CisJCXUxNiBmcmFtZTsKKworCQlEQkcoNiwgIlNUQVJUX09GX0ZSQU1FXG4iKTsKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCi0JCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7Ci0jaWZkZWYJQ09ORklHX1VTQl9NVVNCX09URwotCQljYXNlIE9UR19TVEFURV9BX1BFUklQSEVSQUw6Ci0JCQkvKiBXZSBhbHNvIGNvbWUgaGVyZSBpZiB0aGUgY2FibGUgaXMgcmVtb3ZlZCwgc2luY2UKLQkJCSAqIHRoaXMgc2lsaWNvbiBkb2Vzbid0IHJlcG9ydCBJRC1uby1sb25nZXItZ3JvdW5kZWQuCi0JCQkgKgotCQkJICogV2UgZGVwZW5kIG9uIFQoYV93YWl0X2Jjb24pIHRvIHNodXQgdXMgZG93biwgYW5kCi0JCQkgKiBob3BlIHVzZXJzIGRvbid0IGRvIGFueXRoaW5nIGRpY2V5IGR1cmluZyB0aGlzCi0JCQkgKiB1bmRlc2lyZWQgZGV0b3VyIHRocm91Z2ggQV9XQUlUX0JDT04uCisJCS8qIHN0YXJ0IGFueSBwZXJpb2RpYyBUeCB0cmFuc2ZlcnMgd2FpdGluZyBmb3IgY3VycmVudCBmcmFtZSAqLworCQlmcmFtZSA9IG11c2JfcmVhZHcobWJhc2UsIE1VU0JfRlJBTUUpOworCQllcCA9IG11c2ItPmVuZHBvaW50czsKKwkJZm9yIChlcG51bSA9IDE7IChlcG51bSA8IG11c2ItPm5yX2VuZHBvaW50cykKKwkJCQkJJiYgKG11c2ItPmVwbWFzayA+PSAoMSA8PCBlcG51bSkpOworCQkJCWVwbnVtKyssIGVwKyspIHsKKwkJCS8qCisJCQkgKiBGSVhNRSBoYW5kbGUgZnJhbWVjb3VudGVyIHdyYXBzICgxMiBiaXRzKQorCQkJICogZWxpbWluYXRlIGR1cGxpY2F0ZWQgU3RhcnRVcmIgbG9naWMKIAkJCSAqLwotCQkJbXVzYl9obnBfc3RvcChtdXNiKTsKLQkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKG11c2JfdG9faGNkKG11c2IpKTsKLQkJCW11c2Jfcm9vdF9kaXNjb25uZWN0KG11c2IpOwotCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCi0JCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbgotCQkJCQkJPyA6IE9UR19USU1FX0FfV0FJVF9CQ09OKSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6Ci0JCQltdXNiX2dfc3VzcGVuZChtdXNiKTsKLQkJCW11c2ItPmlzX2FjdGl2ZSA9IGlzX290Z19lbmFibGVkKG11c2IpCi0JCQkJCSYmIG11c2ItPnhjZWl2LT5nYWRnZXQtPmJfaG5wX2VuYWJsZTsKLQkJCWlmIChtdXNiLT5pc19hY3RpdmUpIHsKLSNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCi0JCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfV0FJVF9BQ09OOwotCQkJCURCRygxLCAiSE5QOiBTZXR0aW5nIHRpbWVyIGZvciBiX2FzZTBfYnJzdFxuIik7Ci0JCQkJbW9kX3RpbWVyKCZtdXNiLT5vdGdfdGltZXIsIGppZmZpZXMKLQkJCQkJKyBtc2Vjc190b19qaWZmaWVzKAotCQkJCQkJCU9UR19USU1FX0JfQVNFMF9CUlNUKSk7Ci0jZW5kaWYKKwkJCWlmIChlcC0+ZHdXYWl0RnJhbWUgPj0gZnJhbWUpIHsKKwkJCQllcC0+ZHdXYWl0RnJhbWUgPSAwOworCQkJCXByX2RlYnVnKCJTT0YgLS0+IHBlcmlvZGljIFRYJXMgb24gJWRcbiIsCisJCQkJCWVwLT50eF9jaGFubmVsID8gIiBETUEiIDogIiIsCisJCQkJCWVwbnVtKTsKKwkJCQlpZiAoIWVwLT50eF9jaGFubmVsKQorCQkJCQltdXNiX2hfdHhfc3RhcnQobXVzYiwgZXBudW0pOworCQkJCWVsc2UKKwkJCQkJY3BwaV9ob3N0ZG1hX3N0YXJ0KG11c2IsIGVwbnVtKTsKIAkJCX0KLQkJCWJyZWFrOwotCQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoKLQkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwKQotCQkJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwgamlmZmllcwotCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMobXVzYi0+YV93YWl0X2Jjb24pKTsKLQkJCWJyZWFrOwotCQljYXNlIE9UR19TVEFURV9BX0hPU1Q6Ci0JCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQV9TVVNQRU5EOwotCQkJbXVzYi0+aXNfYWN0aXZlID0gaXNfb3RnX2VuYWJsZWQobXVzYikKLQkJCQkJJiYgbXVzYi0+eGNlaXYtPmhvc3QtPmJfaG5wX2VuYWJsZTsKLQkJCWJyZWFrOwotCQljYXNlIE9UR19TVEFURV9CX0hPU1Q6Ci0JCQkvKiBUcmFuc2l0aW9uIHRvIEJfUEVSSVBIRVJBTCwgc2VlIDYuOC4yLjYgcCA0NCAqLwotCQkJREJHKDEsICJSRVZJU0lUOiBTVVNQRU5EIGFzIEJfSE9TVFxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qICJzaG91bGQgbm90IGhhcHBlbiIgKi8KLQkJCW11c2ItPmlzX2FjdGl2ZSA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlzY2hlZHVsZV93b3JrKCZtdXNiLT5pcnFfd29yayk7CisJCX0JCS8qIGVuZCBvZiBmb3IgbG9vcCAqLwogCX0KKyNlbmRpZgogCisJc2NoZWR1bGVfd29yaygmbXVzYi0+aXJxX3dvcmspOwogCiAJcmV0dXJuIGhhbmRsZWQ7CiB9CkBAIC0xMDAwLDcgKzk4Miw3IEBACiAgKiBtb3JlIHRoYW4gc2VsZWN0aW5nIG9uZSBvZiBhIGJ1bmNoIG9mIHByZWRlZmluZWQgY29uZmlndXJhdGlvbnMuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiBzdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgZmlmb19tb2RlID0gNDsKICNlbHNlCiBzdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgZmlmb19tb2RlID0gMjsKQEAgLTEwOTUsNiArMTA3NywzNiBAQAogeyAuaHdfZXBfbnVtID0gMTUsIC5zdHlsZSA9IEZJRk9fUlhUWCwgLm1heHBhY2tldCA9IDEwMjQsIH0sCiB9OwogCisvKiBtb2RlIDUgLSBmaXRzIGluIDhLQiAqLworc3RhdGljIHN0cnVjdCBmaWZvX2NmZyBfX2luaXRkYXRhIG1vZGVfNV9jZmdbXSA9IHsKK3sgLmh3X2VwX251bSA9ICAxLCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgMSwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDIsIC5zdHlsZSA9IEZJRk9fVFgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICAyLCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgMywgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDMsIC5zdHlsZSA9IEZJRk9fUlgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICA0LCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgNCwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDUsIC5zdHlsZSA9IEZJRk9fVFgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICA1LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgNiwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgNiwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgNywgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgNywgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgOCwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgOCwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgOSwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAgOSwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMCwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMCwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMSwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMSwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMiwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMiwgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gMzIsIH0sCit7IC5od19lcF9udW0gPSAxMywgLnN0eWxlID0gRklGT19SWFRYLCAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gMTQsIC5zdHlsZSA9IEZJRk9fUlhUWCwgLm1heHBhY2tldCA9IDEwMjQsIH0sCit7IC5od19lcF9udW0gPSAxNSwgLnN0eWxlID0gRklGT19SWFRYLCAubWF4cGFja2V0ID0gMTAyNCwgfSwKK307CiAKIC8qCiAgKiBjb25maWd1cmUgYSBmaWZvOyBmb3Igbm9uLXNoYXJlZCBlbmRwb2ludHMsIHRoaXMgbWF5IGJlIGNhbGxlZApAQCAtMTIxMCw2ICsxMjIyLDEwIEBACiAJCWNmZyA9IG1vZGVfNF9jZmc7CiAJCW4gPSBBUlJBWV9TSVpFKG1vZGVfNF9jZmcpOwogCQlicmVhazsKKwljYXNlIDU6CisJCWNmZyA9IG1vZGVfNV9jZmc7CisJCW4gPSBBUlJBWV9TSVpFKG1vZGVfNV9jZmcpOworCQlicmVhazsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldHVwIGZpZm9fbW9kZSAlZFxuIiwKQEAgLTEzMTQsOSArMTMzMCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG11c2JfY29yZV9pbml0KHUxNiBtdXNiX3R5cGUsIHN0cnVjdCBtdXNiICptdXNiKQogewotI2lmZGVmIE1VU0JfQUhCX0lECi0JdTMyIGRhdGE7Ci0jZW5kaWYKIAl1OCByZWc7CiAJY2hhciAqdHlwZTsKIAljaGFyIGFJbmZvWzkwXSwgYVJldmlzaW9uWzMyXSwgYURhdGVbMTJdOwpAQCAtMTMyOCwyMyArMTM0MSwxNyBAQAogCXJlZyA9IG11c2JfcmVhZF9jb25maWdkYXRhKG1iYXNlKTsKIAogCXN0cmNweShhSW5mbywgKHJlZyAmIE1VU0JfQ09ORklHREFUQV9VVE1JRFcpID8gIlVUTUktMTYiIDogIlVUTUktOCIpOwotCWlmIChyZWcgJiBNVVNCX0NPTkZJR0RBVEFfRFlORklGTykKKwlpZiAocmVnICYgTVVTQl9DT05GSUdEQVRBX0RZTkZJRk8pIHsKIAkJc3RyY2F0KGFJbmZvLCAiLCBkeW4gRklGT3MiKTsKKwkJbXVzYi0+ZHluX2ZpZm8gPSB0cnVlOworCX0KIAlpZiAocmVnICYgTVVTQl9DT05GSUdEQVRBX01QUlhFKSB7CiAJCXN0cmNhdChhSW5mbywgIiwgYnVsayBjb21iaW5lIik7Ci0jaWZkZWYgQ19NUF9SWAogCQltdXNiLT5idWxrX2NvbWJpbmUgPSB0cnVlOwotI2Vsc2UKLQkJc3RyY2F0KGFJbmZvLCAiIChYKSIpOwkJLyogbm8gZHJpdmVyIHN1cHBvcnQgKi8KLSNlbmRpZgogCX0KIAlpZiAocmVnICYgTVVTQl9DT05GSUdEQVRBX01QVFhFKSB7CiAJCXN0cmNhdChhSW5mbywgIiwgYnVsayBzcGxpdCIpOwotI2lmZGVmIENfTVBfVFgKIAkJbXVzYi0+YnVsa19zcGxpdCA9IHRydWU7Ci0jZWxzZQotCQlzdHJjYXQoYUluZm8sICIgKFgpIik7CQkvKiBubyBkcml2ZXIgc3VwcG9ydCAqLwotI2VuZGlmCiAJfQogCWlmIChyZWcgJiBNVVNCX0NPTkZJR0RBVEFfSEJSWEUpIHsKIAkJc3RyY2F0KGFJbmZvLCAiLCBIQi1JU08gUngiKTsKQEAgLTEzNjAsMjAgKzEzNjcsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICIlczogQ29uZmlnRGF0YT0weCUwMnggKCVzKVxuIiwKIAkJCW11c2JfZHJpdmVyX25hbWUsIHJlZywgYUluZm8pOwogCi0jaWZkZWYgTVVTQl9BSEJfSUQKLQlkYXRhID0gbXVzYl9yZWFkbChtYmFzZSwgMHg0MDQpOwotCXNwcmludGYoYURhdGUsICIlMDRkLSUwMngtJTAyeCIsIChkYXRhICYgMHhmZmZmKSwKLQkJKGRhdGEgPj4gMTYpICYgMHhmZiwgKGRhdGEgPj4gMjQpICYgMHhmZik7Ci0JLyogRklYTUUgSUQyIGFuZCBJRDMgYXJlIHVudXNlZCAqLwotCWRhdGEgPSBtdXNiX3JlYWRsKG1iYXNlLCAweDQwOCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklEMj0lbHhcbiIsIChsb25nIHVuc2lnbmVkKWRhdGEpOwotCWRhdGEgPSBtdXNiX3JlYWRsKG1iYXNlLCAweDQwYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklEMz0lbHhcbiIsIChsb25nIHVuc2lnbmVkKWRhdGEpOwotCXJlZyA9IG11c2JfcmVhZGIobWJhc2UsIDB4NDAwKTsKLQltdXNiX3R5cGUgPSAoJ00nID09IHJlZykgPyBNVVNCX0NPTlRST0xMRVJfTUhEUkMgOiBNVVNCX0NPTlRST0xMRVJfSERSQzsKLSNlbHNlCiAJYURhdGVbMF0gPSAwOwotI2VuZGlmCiAJaWYgKE1VU0JfQ09OVFJPTExFUl9NSERSQyA9PSBtdXNiX3R5cGUpIHsKIAkJbXVzYi0+aXNfbXVsdGlwb2ludCA9IDE7CiAJCXR5cGUgPSAiTSI7CkBAIC0xNDA0LDIxICsxMzk4LDEwIEBACiAJbXVzYi0+bnJfZW5kcG9pbnRzID0gMTsKIAltdXNiLT5lcG1hc2sgPSAxOwogCi0JaWYgKHJlZyAmIE1VU0JfQ09ORklHREFUQV9EWU5GSUZPKSB7Ci0JCWlmIChtdXNiLT5jb25maWctPmR5bl9maWZvKQotCQkJc3RhdHVzID0gZXBfY29uZmlnX2Zyb21fdGFibGUobXVzYik7Ci0JCWVsc2UgewotCQkJRVJSKCJyZWNvbmZpZ3VyZSBzb2Z0d2FyZSBmb3IgRHluYW1pYyBGSUZPc1xuIik7Ci0JCQlzdGF0dXMgPSAtRU5PREVWOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCFtdXNiLT5jb25maWctPmR5bl9maWZvKQotCQkJc3RhdHVzID0gZXBfY29uZmlnX2Zyb21faHcobXVzYik7Ci0JCWVsc2UgewotCQkJRVJSKCJyZWNvbmZpZ3VyZSBzb2Z0d2FyZSBmb3Igc3RhdGljIEZJRk9zXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQorCWlmIChtdXNiLT5keW5fZmlmbykKKwkJc3RhdHVzID0gZXBfY29uZmlnX2Zyb21fdGFibGUobXVzYik7CisJZWxzZQorCQlzdGF0dXMgPSBlcF9jb25maWdfZnJvbV9odyhtdXNiKTsKIAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMTU4NywxMSArMTU3MCw2IEBACiAJCWVwX251bSsrOwogCX0KIAotCS8qIGZpbmlzaCBoYW5kbGluZyAiZ2xvYmFsIiBpbnRlcnJ1cHRzIGFmdGVyIGhhbmRsaW5nIGZpZm9zICovCi0JaWYgKG11c2ItPmludF91c2IpCi0JCXJldHZhbCB8PSBtdXNiX3N0YWdlMl9pcnEobXVzYiwKLQkJCQltdXNiLT5pbnRfdXNiLCBkZXZjdGwsIHBvd2VyKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE2OTYsNyArMTY3NCw3IEBACiAJdW5zaWduZWQgbG9uZwl2YWw7CiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVsdSIsICZ2YWwpIDwgMSkgewotCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVkJVUyB0aW1lb3V0IG1zIHZhbHVlXG4iKTsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIFZCVVMgdGltZW91dCBtcyB2YWx1ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTc0Niw3ICsxNzI0LDcgQEAKIAogCWlmIChzc2NhbmYoYnVmLCAiJWh1IiwgJnNycCkgIT0gMQogCQkJfHwgKHNycCAhPSAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNSUDogVmFsdWUgbXVzdCBiZSAxXG4iKTsKKwkJZGV2X2VycihkZXYsICJTUlA6IFZhbHVlIG11c3QgYmUgMVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTc1OSw2ICsxNzM3LDE5IEBACiAKICNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgKi8KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm11c2JfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9tb2RlLmF0dHIsCisJJmRldl9hdHRyX3ZidXMuYXR0ciwKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwkmZGV2X2F0dHJfc3JwLmF0dHIsCisjZW5kaWYKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtdXNiX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gbXVzYl9hdHRyaWJ1dGVzLAorfTsKKwogI2VuZGlmCS8qIHN5c2ZzICovCiAKIC8qIE9ubHkgdXNlZCB0byBwcm92aWRlIGRyaXZlciBtb2RlIGNoYW5nZSBldmVudHMgKi8KQEAgLTE4MzMsMTEgKzE4MjQsNyBAQAogCSAqLwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCi0JZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl9tb2RlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3ZidXMpOwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwotCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfc3JwKTsKLSNlbmRpZgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbXVzYi0+Y29udHJvbGxlci0+a29iaiwgJm11c2JfYXR0cl9ncm91cCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwpAQCAtMjAxNywyMiArMjAwNCwxMCBAQAogCQltdXNiLT5pcnFfd2FrZSA9IDA7CiAJfQogCi0JcHJfaW5mbygiJXM6IFVTQiAlcyBtb2RlIGNvbnRyb2xsZXIgYXQgJXAgdXNpbmcgJXMsIElSUSAlZFxuIiwKLQkJCW11c2JfZHJpdmVyX25hbWUsCi0JCQkoe2NoYXIgKnM7Ci0JCQlzd2l0Y2ggKG11c2ItPmJvYXJkX21vZGUpIHsKLQkJCWNhc2UgTVVTQl9IT1NUOgkJcyA9ICJIb3N0IjsgYnJlYWs7Ci0JCQljYXNlIE1VU0JfUEVSSVBIRVJBTDoJcyA9ICJQZXJpcGhlcmFsIjsgYnJlYWs7Ci0JCQlkZWZhdWx0OgkJcyA9ICJPVEciOyBicmVhazsKLQkJCX07IHM7IH0pLAotCQkJY3RybCwKLQkJCShpc19kbWFfY2FwYWJsZSgpICYmIG11c2ItPmRtYV9jb250cm9sbGVyKQotCQkJCT8gIkRNQSIgOiAiUElPIiwKLQkJCW11c2ItPm5JcnEpOwotCiAJLyogaG9zdCBzaWRlIG5lZWRzIG1vcmUgc2V0dXAgKi8KIAlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7CiAJCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBtdXNiX3RvX2hjZChtdXNiKTsKKwkJdTggYnVzY3RsOwogCiAJCW90Z19zZXRfaG9zdChtdXNiLT54Y2VpdiwgJmhjZC0+c2VsZik7CiAKQEAgLTIwNDAsNiArMjAxNSwxMyBAQAogCQkJaGNkLT5zZWxmLm90Z19wb3J0ID0gMTsKIAkJbXVzYi0+eGNlaXYtPmhvc3QgPSAmaGNkLT5zZWxmOwogCQloY2QtPnBvd2VyX2J1ZGdldCA9IDIgKiAocGxhdC0+cG93ZXIgPyA6IDI1MCk7CisKKwkJLyogcHJvZ3JhbSBQSFkgdG8gdXNlIGV4dGVybmFsIHZCdXMgaWYgcmVxdWlyZWQgKi8KKwkJaWYgKHBsYXQtPmV4dHZidXMpIHsKKwkJCWJ1c2N0bCA9IG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfVUxQSV9CVVNDT05UUk9MKTsKKwkJCWJ1c2N0bCB8PSBNVVNCX1VMUElfVVNFX0VYVFZCVVM7CisJCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9VTFBJX0JVU0NPTlRST0wsIGJ1c2N0bCk7CisJCX0KIAl9CiAKIAkvKiBGb3IgdGhlIGhvc3Qtb25seSByb2xlLCB3ZSBjYW4gYWN0aXZhdGUgcmlnaHQgYXdheS4KQEAgLTIwNzksMjYgKzIwNjEsMjYgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKLQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kZSk7Ci0Jc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZidXMpOwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zcnApOwotI2VuZGlmIC8qIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyAqLwotCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZtdXNiLT5jb250cm9sbGVyLT5rb2JqLCAmbXVzYl9hdHRyX2dyb3VwKTsKICNlbmRpZgogCWlmIChzdGF0dXMpCiAJCWdvdG8gZmFpbDI7CiAKKwlkZXZfaW5mbyhkZXYsICJVU0IgJXMgbW9kZSBjb250cm9sbGVyIGF0ICVwIHVzaW5nICVzLCBJUlEgJWRcbiIsCisJCQkoe2NoYXIgKnM7CisJCQkgc3dpdGNoIChtdXNiLT5ib2FyZF9tb2RlKSB7CisJCQkgY2FzZSBNVVNCX0hPU1Q6CQlzID0gIkhvc3QiOyBicmVhazsKKwkJCSBjYXNlIE1VU0JfUEVSSVBIRVJBTDoJcyA9ICJQZXJpcGhlcmFsIjsgYnJlYWs7CisJCQkgZGVmYXVsdDoJCXMgPSAiT1RHIjsgYnJlYWs7CisJCQkgfTsgczsgfSksCisJCQljdHJsLAorCQkJKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYi0+ZG1hX2NvbnRyb2xsZXIpCisJCQk/ICJETUEiIDogIlBJTyIsCisJCQltdXNiLT5uSXJxKTsKKwogCXJldHVybiAwOwogCiBmYWlsMjoKLSNpZmRlZiBDT05GSUdfU1lTRlMKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7Ci0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCi0JZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl9zcnApOwotI2VuZGlmCi0jZW5kaWYKIAltdXNiX3BsYXRmb3JtX2V4aXQobXVzYik7CiBmYWlsOgogCWRldl9lcnIobXVzYi0+Y29udHJvbGxlciwKQEAgLTIxMjcsNiArMjEwOSw3IEBACiB7CiAJc3RydWN0IGRldmljZQkqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaW50CQlzdGF0dXM7CiAJc3RydWN0IHJlc291cmNlCSppb21lbTsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAKQEAgLTIxMzQsNyArMjExNyw3IEBACiAJaWYgKCFpb21lbSB8fCBpcnEgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQliYXNlID0gaW9yZW1hcChpb21lbS0+c3RhcnQsIGlvbWVtLT5lbmQgLSBpb21lbS0+c3RhcnQgKyAxKTsKKwliYXNlID0gaW9yZW1hcChpb21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9tZW0pKTsKIAlpZiAoIWJhc2UpIHsKIAkJZGV2X2VycihkZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjE0NCw3ICsyMTI3LDEyIEBACiAJLyogY2xvYmJlcmVkIGJ5IHVzZV9kbWE9biAqLwogCW9yaWdfZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwogI2VuZGlmCi0JcmV0dXJuIG11c2JfaW5pdF9jb250cm9sbGVyKGRldiwgaXJxLCBiYXNlKTsKKworCXN0YXR1cyA9IG11c2JfaW5pdF9jb250cm9sbGVyKGRldiwgaXJxLCBiYXNlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJaW91bm1hcChiYXNlKTsKKworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgX19leGl0IG11c2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yMTczLDYgKzIxNjEsMTQ4IEBACiAKICNpZmRlZglDT05GSUdfUE0KIAorc3RhdGljIHN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzIG11c2JfY29udGV4dDsKKwordm9pZCBtdXNiX3NhdmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwlpbnQgaTsKKwl2b2lkIF9faW9tZW0gKm11c2JfYmFzZSA9IG11c2ItPm1yZWdzOworCisJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkgeworCQltdXNiX2NvbnRleHQuZnJhbWUgPSBtdXNiX3JlYWR3KG11c2JfYmFzZSwgTVVTQl9GUkFNRSk7CisJCW11c2JfY29udGV4dC50ZXN0bW9kZSA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX1RFU1RNT0RFKTsKKwl9CisJbXVzYl9jb250ZXh0LnBvd2VyID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfUE9XRVIpOworCW11c2JfY29udGV4dC5pbnRydHhlID0gbXVzYl9yZWFkdyhtdXNiX2Jhc2UsIE1VU0JfSU5UUlRYRSk7CisJbXVzYl9jb250ZXh0LmludHJyeGUgPSBtdXNiX3JlYWR3KG11c2JfYmFzZSwgTVVTQl9JTlRSUlhFKTsKKwltdXNiX2NvbnRleHQuaW50cnVzYmUgPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9JTlRSVVNCRSk7CisJbXVzYl9jb250ZXh0LmluZGV4ID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfSU5ERVgpOworCW11c2JfY29udGV4dC5kZXZjdGwgPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9ERVZDVEwpOworCisJZm9yIChpID0gMDsgaSA8IE1VU0JfQ19OVU1fRVBTOyArK2kpIHsKKwkJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX0lOREVYLCBpKTsKKwkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhtYXhwID0KKwkJCW11c2JfcmVhZHcobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWE1BWFApOworCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGNzciA9CisJCQltdXNiX3JlYWR3KG11c2JfYmFzZSwgMHgxMCArIE1VU0JfVFhDU1IpOworCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeG1heHAgPQorCQkJbXVzYl9yZWFkdyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1JYTUFYUCk7CisJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Y3NyID0KKwkJCW11c2JfcmVhZHcobXVzYl9iYXNlLCAweDEwICsgTVVTQl9SWENTUik7CisKKwkJaWYgKG11c2ItPmR5bl9maWZvKSB7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9hZGQgPQorCQkJCQltdXNiX3JlYWRfdHhmaWZvYWRkKG11c2JfYmFzZSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZpZm9hZGQgPQorCQkJCQltdXNiX3JlYWRfcnhmaWZvYWRkKG11c2JfYmFzZSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9zeiA9CisJCQkJCW11c2JfcmVhZF90eGZpZm9zeihtdXNiX2Jhc2UpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmaWZvc3ogPQorCQkJCQltdXNiX3JlYWRfcnhmaWZvc3oobXVzYl9iYXNlKTsKKwkJfQorCQlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eHR5cGUgPQorCQkJCW11c2JfcmVhZGIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWFRZUEUpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhpbnRlcnZhbCA9CisJCQkJbXVzYl9yZWFkYihtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYSU5URVJWQUwpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnh0eXBlID0KKwkJCQltdXNiX3JlYWRiKG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhUWVBFKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4aW50ZXJ2YWwgPQorCQkJCW11c2JfcmVhZGIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9SWElOVEVSVkFMKTsKKworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmdW5hZGRyID0KKwkJCQltdXNiX3JlYWRfdHhmdW5hZGRyKG11c2JfYmFzZSwgaSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YmFkZHIgPQorCQkJCW11c2JfcmVhZF90eGh1YmFkZHIobXVzYl9iYXNlLCBpKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHVicG9ydCA9CisJCQkJbXVzYl9yZWFkX3R4aHVicG9ydChtdXNiX2Jhc2UsIGkpOworCisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZ1bmFkZHIgPQorCQkJCW11c2JfcmVhZF9yeGZ1bmFkZHIobXVzYl9iYXNlLCBpKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4aHViYWRkciA9CisJCQkJbXVzYl9yZWFkX3J4aHViYWRkcihtdXNiX2Jhc2UsIGkpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJwb3J0ID0KKwkJCQltdXNiX3JlYWRfcnhodWJwb3J0KG11c2JfYmFzZSwgaSk7CisJCX0KKwl9CisKKwltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfSU5ERVgsIG11c2JfY29udGV4dC5pbmRleCk7CisKKwltdXNiX3BsYXRmb3JtX3NhdmVfY29udGV4dChtdXNiLCAmbXVzYl9jb250ZXh0KTsKK30KKwordm9pZCBtdXNiX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwlpbnQgaTsKKwl2b2lkIF9faW9tZW0gKm11c2JfYmFzZSA9IG11c2ItPm1yZWdzOworCXZvaWQgX19pb21lbSAqZXBfdGFyZ2V0X3JlZ3M7CisKKwltdXNiX3BsYXRmb3JtX3Jlc3RvcmVfY29udGV4dChtdXNiLCAmbXVzYl9jb250ZXh0KTsKKworCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpIHsKKwkJbXVzYl93cml0ZXcobXVzYl9iYXNlLCBNVVNCX0ZSQU1FLCBtdXNiX2NvbnRleHQuZnJhbWUpOworCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfVEVTVE1PREUsIG11c2JfY29udGV4dC50ZXN0bW9kZSk7CisJfQorCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9QT1dFUiwgbXVzYl9jb250ZXh0LnBvd2VyKTsKKwltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIE1VU0JfSU5UUlRYRSwgbXVzYl9jb250ZXh0LmludHJ0eGUpOworCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgTVVTQl9JTlRSUlhFLCBtdXNiX2NvbnRleHQuaW50cnJ4ZSk7CisJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX0lOVFJVU0JFLCBtdXNiX2NvbnRleHQuaW50cnVzYmUpOworCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9ERVZDVEwsIG11c2JfY29udGV4dC5kZXZjdGwpOworCisJZm9yIChpID0gMDsgaSA8IE1VU0JfQ19OVU1fRVBTOyArK2kpIHsKKwkJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX0lOREVYLCBpKTsKKwkJbXVzYl93cml0ZXcobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWE1BWFAsCisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eG1heHApOworCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYQ1NSLAorCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhjc3IpOworCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1JYTUFYUCwKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4bWF4cCk7CisJCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhDU1IsCisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGNzcik7CisKKwkJaWYgKG11c2ItPmR5bl9maWZvKSB7CisJCQltdXNiX3dyaXRlX3R4Zmlmb3N6KG11c2JfYmFzZSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9zeik7CisJCQltdXNiX3dyaXRlX3J4Zmlmb3N6KG11c2JfYmFzZSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZpZm9zeik7CisJCQltdXNiX3dyaXRlX3R4Zmlmb2FkZChtdXNiX2Jhc2UsCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmaWZvYWRkKTsKKwkJCW11c2Jfd3JpdGVfcnhmaWZvYWRkKG11c2JfYmFzZSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZpZm9hZGQpOworCQl9CisKKwkJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkgeworCQkJbXVzYl93cml0ZWIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWFRZUEUsCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHh0eXBlKTsKKwkJCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgMHgxMCArIE1VU0JfVFhJTlRFUlZBTCwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGludGVydmFsKTsKKwkJCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhUWVBFLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4dHlwZSk7CisJCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1JYSU5URVJWQUwsCisKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4aW50ZXJ2YWwpOworCQkJbXVzYl93cml0ZV90eGZ1bmFkZHIobXVzYl9iYXNlLCBpLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4ZnVuYWRkcik7CisJCQltdXNiX3dyaXRlX3R4aHViYWRkcihtdXNiX2Jhc2UsIGksCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhodWJhZGRyKTsKKwkJCW11c2Jfd3JpdGVfdHhodWJwb3J0KG11c2JfYmFzZSwgaSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YnBvcnQpOworCisJCQllcF90YXJnZXRfcmVncyA9CisJCQkJbXVzYl9yZWFkX3RhcmdldF9yZWdfYmFzZShpLCBtdXNiX2Jhc2UpOworCisJCQltdXNiX3dyaXRlX3J4ZnVuYWRkcihlcF90YXJnZXRfcmVncywKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZ1bmFkZHIpOworCQkJbXVzYl93cml0ZV9yeGh1YmFkZHIoZXBfdGFyZ2V0X3JlZ3MsCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJhZGRyKTsKKwkJCW11c2Jfd3JpdGVfcnhodWJwb3J0KGVwX3RhcmdldF9yZWdzLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4aHVicG9ydCk7CisJCX0KKwl9CisKKwltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfSU5ERVgsIG11c2JfY29udGV4dC5pbmRleCk7Cit9CisKIHN0YXRpYyBpbnQgbXVzYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CkBAIC0yMTk0LDYgKzIzMjQsOCBAQAogCQkgKi8KIAl9CiAKKwltdXNiX3NhdmVfY29udGV4dChtdXNiKTsKKwogCWlmIChtdXNiLT5zZXRfY2xvY2spCiAJCW11c2ItPnNldF9jbG9jayhtdXNiLT5jbG9jaywgMCk7CiAJZWxzZQpAQCAtMjIxNSw2ICsyMzQ3LDggQEAKIAllbHNlCiAJCWNsa19lbmFibGUobXVzYi0+Y2xvY2spOwogCisJbXVzYl9yZXN0b3JlX2NvbnRleHQobXVzYik7CisKIAkvKiBmb3Igc3RhdGljIGNtb3MgbGlrZSBEYVZpbmNpLCByZWdpc3RlciB2YWx1ZXMgd2VyZSBwcmVzZXJ2ZWQKIAkgKiB1bmxlc3MgZm9yIHNvbWUgcmVhc29uIHRoZSB3aG9sZSBzb2MgcG93ZXJlZCBkb3duIG9yIHRoZSBVU0IKIAkgKiBtb2R1bGUgZ290IHJlc2V0IHRocm91Z2ggdGhlIFBTQyAodnMganVzdCBiZWluZyBkaXNhYmxlZCkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCAwM2Q1MDkwLi5kODQ5ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTUyLDYgKzUyLDE1IEBACiBzdHJ1Y3QgbXVzYl9od19lcDsKIHN0cnVjdCBtdXNiX2VwOwogCisvKiBIZWxwZXIgZGVmaW5lcyBmb3Igc3RydWN0IG11c2ItPmh3dmVycyAqLworI2RlZmluZSBNVVNCX0hXVkVSU19NQUpPUih4KQkoKHggPj4gMTApICYgMHgxZikKKyNkZWZpbmUgTVVTQl9IV1ZFUlNfTUlOT1IoeCkJKHggJiAweDNmZikKKyNkZWZpbmUgTVVTQl9IV1ZFUlNfUkMJCTB4ODAwMAorI2RlZmluZSBNVVNCX0hXVkVSU18xMzAwCTB4NTJDCisjZGVmaW5lIE1VU0JfSFdWRVJTXzE0MDAJMHg1OTAKKyNkZWZpbmUgTVVTQl9IV1ZFUlNfMTgwMAkweDcyMAorI2RlZmluZSBNVVNCX0hXVkVSU18xOTAwCTB4Nzg0CisjZGVmaW5lIE1VU0JfSFdWRVJTXzIwMDAJMHg4MDAKIAogI2luY2x1ZGUgIm11c2JfZGVidWcuaCIKICNpbmNsdWRlICJtdXNiX2RtYS5oIgpAQCAtMzIyLDEzICszMzEsNiBAQAogCXN0cnVjdCBjbGsJCSpjbG9jazsKIAlpcnFyZXR1cm5fdAkJKCppc3IpKGludCwgdm9pZCAqKTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJaXJxX3dvcms7Ci0jZGVmaW5lIE1VU0JfSFdWRVJTX01BSk9SKHgpCSgoeCA+PiAxMCkgJiAweDFmKQotI2RlZmluZSBNVVNCX0hXVkVSU19NSU5PUih4KQkoeCAmIDB4M2ZmKQotI2RlZmluZSBNVVNCX0hXVkVSU19SQwkJMHg4MDAwCi0jZGVmaW5lIE1VU0JfSFdWRVJTXzEzMDAJMHg1MkMKLSNkZWZpbmUgTVVTQl9IV1ZFUlNfMTQwMAkweDU5MAotI2RlZmluZSBNVVNCX0hXVkVSU18xODAwCTB4NzIwCi0jZGVmaW5lIE1VU0JfSFdWRVJTXzIwMDAJMHg4MDAKIAl1MTYJCQlod3ZlcnM7CiAKIC8qIHRoaXMgaHViIHN0YXR1cyBiaXQgaXMgcmVzZXJ2ZWQgYnkgVVNCIDIuMCBhbmQgbm90IHNlZW4gYnkgdXNiY29yZSAqLwpAQCAtNDExLDIyICs0MTMsMTUgQEAKIAogCXVuc2lnbmVkCQloYl9pc29fcng6MTsJLyogaGlnaCBiYW5kd2lkdGggaXNvIHJ4PyAqLwogCXVuc2lnbmVkCQloYl9pc29fdHg6MTsJLyogaGlnaCBiYW5kd2lkdGggaXNvIHR4PyAqLworCXVuc2lnbmVkCQlkeW5fZmlmbzoxOwkvKiBkeW5hbWljIEZJRk8gc3VwcG9ydGVkPyAqLwogCi0jaWZkZWYgQ19NUF9UWAotCXVuc2lnbmVkIGJ1bGtfc3BsaXQ6MTsKKwl1bnNpZ25lZAkJYnVsa19zcGxpdDoxOwogI2RlZmluZQljYW5fYnVsa19zcGxpdChtdXNiLHR5cGUpIFwKLQkJKCgodHlwZSkgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYgKG11c2IpLT5idWxrX3NwbGl0KQotI2Vsc2UKLSNkZWZpbmUJY2FuX2J1bGtfc3BsaXQobXVzYiwgdHlwZSkJMAotI2VuZGlmCisJKCgodHlwZSkgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYgKG11c2IpLT5idWxrX3NwbGl0KQogCi0jaWZkZWYgQ19NUF9SWAotCXVuc2lnbmVkIGJ1bGtfY29tYmluZToxOworCXVuc2lnbmVkCQlidWxrX2NvbWJpbmU6MTsKICNkZWZpbmUJY2FuX2J1bGtfY29tYmluZShtdXNiLHR5cGUpIFwKLQkJKCgodHlwZSkgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYgKG11c2IpLT5idWxrX2NvbWJpbmUpCi0jZWxzZQotI2RlZmluZQljYW5fYnVsa19jb21iaW5lKG11c2IsIHR5cGUpCTAKLSNlbmRpZgorCSgoKHR5cGUpID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmIChtdXNiKS0+YnVsa19jb21iaW5lKQogCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCiAJLyogaXNfc3VzcGVuZGVkIG1lYW5zIFVTQiBCX1BFUklQSEVSQUwgc3VzcGVuZCAqLwpAQCAtNDYxLDYgKzQ1Niw0NSBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1BNCitzdHJ1Y3QgbXVzYl9jc3JfcmVncyB7CisJLyogRklGTyByZWdpc3RlcnMgKi8KKwl1MTYgdHhtYXhwLCB0eGNzciwgcnhtYXhwLCByeGNzcjsKKwl1MTYgcnhmaWZvYWRkLCB0eGZpZm9hZGQ7CisJdTggdHh0eXBlLCB0eGludGVydmFsLCByeHR5cGUsIHJ4aW50ZXJ2YWw7CisJdTggcnhmaWZvc3osIHR4Zmlmb3N6OworCXU4IHR4ZnVuYWRkciwgdHhodWJhZGRyLCB0eGh1YnBvcnQ7CisJdTggcnhmdW5hZGRyLCByeGh1YmFkZHIsIHJ4aHVicG9ydDsKK307CisKK3N0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzIHsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisJdTMyIG90Z19zeXNjb25maWcsIG90Z19mb3JjZXN0YW5kYnk7CisjZW5kaWYKKwl1OCBwb3dlcjsKKwl1MTYgaW50cnR4ZSwgaW50cnJ4ZTsKKwl1OCBpbnRydXNiZTsKKwl1MTYgZnJhbWU7CisJdTggaW5kZXgsIHRlc3Rtb2RlOworCisJdTggZGV2Y3RsLCBtaXNjOworCisJc3RydWN0IG11c2JfY3NyX3JlZ3MgaW5kZXhfcmVnc1tNVVNCX0NfTlVNX0VQU107Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKK2V4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fc2F2ZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiLAorCQlzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyAqbXVzYl9jb250ZXh0KTsKK2V4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiLAorCQlzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyAqbXVzYl9jb250ZXh0KTsKKyNlbHNlCisjZGVmaW5lIG11c2JfcGxhdGZvcm1fc2F2ZV9jb250ZXh0KG0sIHgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBtdXNiX3BsYXRmb3JtX3Jlc3RvcmVfY29udGV4dChtLCB4KQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIG11c2Jfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKIHsKIAltdXNiLT5ib2FyZF9zZXRfdmJ1cyhtdXNiLCBpc19vbik7CkBAIC01NjIsNyArNTk2LDcgQEAKIGV4dGVybiBpbnQgbXVzYl9wbGF0Zm9ybV9zZXRfbW9kZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbXVzYl9tb2RlKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9UVVNCNjAxMCkgfHwgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiBleHRlcm4gdm9pZCBtdXNiX3BsYXRmb3JtX3RyeV9pZGxlKHN0cnVjdCBtdXNiICptdXNiLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogI2Vsc2UKICNkZWZpbmUgbXVzYl9wbGF0Zm9ybV90cnlfaWRsZSh4LCB5KQkJZG8ge30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggY2JjZjE0YTIuLmE5ZjI4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTg5NSw3ICs4OTUsMTQgQEAKIAkJLyogUkVWSVNJVCBpZiBjYW5fYnVsa19zcGxpdCgpLCB1c2UgYnkgdXBkYXRpbmcgInRtcCI7CiAJCSAqIGxpa2V3aXNlIGhpZ2ggYmFuZHdpZHRoIHBlcmlvZGljIHR4CiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgdG1wKTsKKwkJLyogU2V0IFRYTUFYUCB3aXRoIHRoZSBGSUZPIHNpemUgb2YgdGhlIGVuZHBvaW50CisJCSAqIHRvIGRpc2FibGUgZG91YmxlIGJ1ZmZlcmluZyBtb2RlLiBDdXJyZW50bHksIEl0IHNlZW1zIHRoYXQgZG91YmxlCisJCSAqIGJ1ZmZlcmluZyBoYXMgcHJvYmxlbSBpZiBtdXNiIFJUTCByZXZpc2lvbiBudW1iZXIgPCAyLjAuCisJCSAqLworCQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfVFhNQVhQLCBod19lcC0+bWF4X3BhY2tldF9zel90eCk7CisJCWVsc2UKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfVFhNQVhQLCB0bXApOwogCiAJCWNzciA9IE1VU0JfVFhDU1JfTU9ERSB8IE1VU0JfVFhDU1JfQ0xSREFUQVRPRzsKIAkJaWYgKG11c2JfcmVhZHcocmVncywgTVVTQl9UWENTUikKQEAgLTkyNSw3ICs5MzIsMTMgQEAKIAkJLyogUkVWSVNJVCBpZiBjYW5fYnVsa19jb21iaW5lKCkgdXNlIGJ5IHVwZGF0aW5nICJ0bXAiCiAJCSAqIGxpa2V3aXNlIGhpZ2ggYmFuZHdpZHRoIHBlcmlvZGljIHJ4CiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgdG1wKTsKKwkJLyogU2V0IFJYTUFYUCB3aXRoIHRoZSBGSUZPIHNpemUgb2YgdGhlIGVuZHBvaW50CisJCSAqIHRvIGRpc2FibGUgZG91YmxlIGJ1ZmZlcmluZyBtb2RlLgorCQkgKi8KKwkJaWYgKG11c2ItPmh3dmVycyA8IE1VU0JfSFdWRVJTXzIwMDApCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfcngpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgdG1wKTsKIAogCQkvKiBmb3JjZSBzaGFyZWQgZmlmbyB0byBPVVQtb25seSBtb2RlICovCiAJCWlmIChod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKQEAgLTE2OTcsOCArMTcxMCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogZHJpdmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gc3VwcG9ydCBwZXJpcGhlcmFsIG1vZGUgKi8KLQlpZiAoIW11c2IgfHwgIShtdXNiLT5ib2FyZF9tb2RlID09IE1VU0JfT1RHCi0JCQkJfHwgbXVzYi0+Ym9hcmRfbW9kZSAhPSBNVVNCX09URykpIHsKKwlpZiAoIW11c2IpIHsKIAkJREJHKDEsICIlcywgbm8gZGV2Pz9cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNzRjNGMzNi4uMzQyMWNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02MDUsOCArNjA1LDE0IEBACiAJbXVzYl93cml0ZWIoZXAtPnJlZ3MsIE1VU0JfUlhUWVBFLCBxaC0+dHlwZV9yZWcpOwogCW11c2Jfd3JpdGViKGVwLT5yZWdzLCBNVVNCX1JYSU5URVJWQUwsIHFoLT5pbnR2X3JlZyk7CiAJLyogTk9URTogYnVsayBjb21iaW5pbmcgcmV3cml0ZXMgaGlnaCBiaXRzIG9mIG1heHBhY2tldCAqLwotCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwKLQkJCXFoLT5tYXhwYWNrZXQgfCAoKHFoLT5oYl9tdWx0IC0gMSkgPDwgMTEpKTsKKwkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKKwkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KKwkgKi8KKwlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLCBlcC0+bWF4X3BhY2tldF9zel9yeCk7CisJZWxzZQorCQltdXNiX3dyaXRldyhlcC0+cmVncywgTVVTQl9SWE1BWFAsCisJCQkJcWgtPm1heHBhY2tldCB8ICgocWgtPmhiX211bHQgLSAxKSA8PCAxMSkpOwogCiAJZXAtPnJ4X3JlaW5pdCA9IDA7CiB9CkBAIC0xNzcxLDYgKzE3NzcsOSBAQAogCWludAkJCWJlc3RfZW5kLCBlcG51bTsKIAlzdHJ1Y3QgbXVzYl9od19lcAkqaHdfZXAgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQgPSBOVUxMOworCXU4CQkJdG9nZ2xlOworCXU4CQkJdHh0eXBlOworCXN0cnVjdCB1cmIJCSp1cmIgPSBuZXh0X3VyYihxaCk7CiAKIAkvKiB1c2UgZml4ZWQgaGFyZHdhcmUgZm9yIGNvbnRyb2wgYW5kIGJ1bGsgKi8KIAlpZiAocWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgewpAQCAtMTgwOSw2ICsxODE4LDI3IEBACiAJCWRpZmYgLT0gKHFoLT5tYXhwYWNrZXQgKiBxaC0+aGJfbXVsdCk7CiAKIAkJaWYgKGRpZmYgPj0gMCAmJiBiZXN0X2RpZmYgPiBkaWZmKSB7CisKKwkJCS8qCisJCQkgKiBNZW50b3IgY29udHJvbGxlciBoYXMgYSBidWcgaW4gdGhhdCBpZiB3ZSBzY2hlZHVsZQorCQkJICogYSBCVUxLIFR4IHRyYW5zZmVyIG9uIGFuIGVuZHBvaW50IHRoYXQgaGFkIGVhcmxpZXIKKwkJCSAqIGhhbmRsZWQgSVNPQyB0aGVuIHRoZSBCVUxLIHRyYW5zZmVyIGhhcyB0byBzdGFydCBvbgorCQkJICogYSB6ZXJvIHRvZ2dsZS4gIElmIHRoZSBCVUxLIHRyYW5zZmVyIHN0YXJ0cyBvbiBhIDEKKwkJCSAqIHRvZ2dsZSB0aGVuIHRoaXMgdHJhbnNmZXIgd2lsbCBmYWlsIGFzIHRoZSBtZW50b3IKKwkJCSAqIGNvbnRyb2xsZXIgc3RhcnRzIHRoZSBCdWxrIHRyYW5zZmVyIG9uIGEgMCB0b2dnbGUKKwkJCSAqIGlycmVzcGVjdGl2ZSBvZiB0aGUgcHJvZ3JhbW1pbmcgb2YgdGhlIHRvZ2dsZSBiaXRzCisJCQkgKiBpbiB0aGUgVFhDU1IgcmVnaXN0ZXIuICBDaGVjayBmb3IgdGhpcyBjb25kaXRpb24KKwkJCSAqIHdoaWxlIGFsbG9jYXRpbmcgdGhlIEVQIGZvciBhIFR4IEJ1bGsgdHJhbnNmZXIuICBJZgorCQkJICogc28gc2tpcCB0aGlzIEVQLgorCQkJICovCisJCQlod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGVwbnVtOworCQkJdG9nZ2xlID0gdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAhaXNfaW4pOworCQkJdHh0eXBlID0gKG11c2JfcmVhZGIoaHdfZXAtPnJlZ3MsIE1VU0JfVFhUWVBFKQorCQkJCQk+PiA0KSAmIDB4MzsKKwkJCWlmICghaXNfaW4gJiYgKHFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJCQkJdG9nZ2xlICYmICh0eHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykpCisJCQkJY29udGludWU7CisKIAkJCWJlc3RfZGlmZiA9IGRpZmY7CiAJCQliZXN0X2VuZCA9IGVwbnVtOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAppbmRleCA0NzNhOTRlLi4yOTI4OTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKQEAgLTcyLDYgKzcyLDEwIEBACiAjZGVmaW5lIE1VU0JfREVWQ1RMX0hSCQkweDAyCiAjZGVmaW5lIE1VU0JfREVWQ1RMX1NFU1NJT04JMHgwMQogCisvKiBNVVNCIFVMUEkgVkJVU0NPTlRST0wgKi8KKyNkZWZpbmUgTVVTQl9VTFBJX1VTRV9FWFRWQlVTCTB4MDEKKyNkZWZpbmUgTVVTQl9VTFBJX1VTRV9FWFRWQlVTSU5EIDB4MDIKKwogLyogVEVTVE1PREUgKi8KICNkZWZpbmUgTVVTQl9URVNUX0ZPUkNFX0hPU1QJMHg4MAogI2RlZmluZSBNVVNCX1RFU1RfRklGT19BQ0NFU1MJMHg0MApAQCAtMjQ2LDYgKzI1MCw3IEBACiAKIC8qIFJFVklTSVQ6IHZjdHJsL3ZzdGF0dXM6IG9wdGlvbmFsIHZlbmRvciB1dG1pK3BoeSByZWdpc3RlciBhdCAweDY4ICovCiAjZGVmaW5lIE1VU0JfSFdWRVJTCQkweDZDCS8qIDggYml0ICovCisjZGVmaW5lIE1VU0JfVUxQSV9CVVNDT05UUk9MCTB4NzAJLyogOCBiaXQgKi8KIAogI2RlZmluZSBNVVNCX0VQSU5GTwkJMHg3OAkvKiA4IGJpdCAqLwogI2RlZmluZSBNVVNCX1JBTUlORk8JCTB4NzkJLyogOCBiaXQgKi8KQEAgLTMyMSw2ICszMjYsMjYgQEAKIAltdXNiX3dyaXRldyhtYmFzZSwgTVVTQl9SWEZJRk9BREQsIGNfb2ZmKTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfdHhmaWZvc3oodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9UWEZJRk9TWik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG11c2JfcmVhZF90eGZpZm9hZGQodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9UWEZJRk9BREQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF9yeGZpZm9zeih2b2lkIF9faW9tZW0gKm1iYXNlKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX1JYRklGT1NaKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgIG11c2JfcmVhZF9yeGZpZm9hZGQodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9SWEZJRk9BREQpOworfQorCiBzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF9jb25maWdkYXRhKHZvaWQgX19pb21lbSAqbWJhc2UpCiB7CiAJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5ERVgsIDApOwpAQCAtMzc2LDYgKzQwMSwzNiBAQAogCQkJcWhfaF9wb3J0X3JlZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4ZnVuYWRkcih2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9CVVNDVExfT0ZGU0VUKGVwbnVtLCBNVVNCX1JYRlVOQ0FERFIpKTsKK30KKworc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhodWJhZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0JVU0NUTF9PRkZTRVQoZXBudW0sIE1VU0JfUlhIVUJBRERSKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4aHVicG9ydCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9CVVNDVExfT0ZGU0VUKGVwbnVtLCBNVVNCX1JYSFVCUE9SVCkpOworfQorCitzdGF0aWMgaW5saW5lIHU4ICBtdXNiX3JlYWRfdHhmdW5hZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0JVU0NUTF9PRkZTRVQoZXBudW0sIE1VU0JfVFhGVU5DQUREUikpOworfQorCitzdGF0aWMgaW5saW5lIHU4ICBtdXNiX3JlYWRfdHhodWJhZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0JVU0NUTF9PRkZTRVQoZXBudW0sIE1VU0JfVFhIVUJBRERSKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggIG11c2JfcmVhZF90eGh1YnBvcnQodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7CisJcmV0dXJuIG11c2JfcmVhZGIobWJhc2UsIE1VU0JfQlVTQ1RMX09GRlNFVChlcG51bSwgTVVTQl9UWEhVQlBPUlQpKTsKK30KKwogI2Vsc2UgLyogQ09ORklHX0JMQUNLRklOICovCiAKICNkZWZpbmUgVVNCX0JBU0UJCVVTQl9GQUREUgpAQCAtNDU1LDYgKzUxMCwyMiBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF90eGZpZm9zeih2b2lkIF9faW9tZW0gKm1iYXNlKQoreworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtdXNiX3JlYWRfdHhmaWZvYWRkKHZvaWQgX19pb21lbSAqbWJhc2UpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4Zmlmb3N6KHZvaWQgX19pb21lbSAqbWJhc2UpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2ICBtdXNiX3JlYWRfcnhmaWZvYWRkKHZvaWQgX19pb21lbSAqbWJhc2UpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX2NvbmZpZ2RhdGEodm9pZCBfX2lvbWVtICptYmFzZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQ2Miw3ICs1MzMsMTEgQEAKIAogc3RhdGljIGlubGluZSB1MTYgbXVzYl9yZWFkX2h3dmVycyh2b2lkIF9faW9tZW0gKm1iYXNlKQogewotCXJldHVybiAwOworCS8qCisJICogVGhpcyByZWdpc3RlciBpcyBpbnZpc2libGUgb24gQmxhY2tmaW4sIGFjdHVhbGx5IHRoZSBNVVNCCisJICogUlRMIHZlcnNpb24gb2YgQmxhY2tmaW4gaXMgMS45LCBzbyBqdXN0IGhhcmNvZGUgaXRzIHZhbHVlLgorCSAqLworCXJldHVybiBNVVNCX0hXVkVSU18xOTAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqbXVzYl9yZWFkX3RhcmdldF9yZWdfYmFzZSh1OCBpLCB2b2lkIF9faW9tZW0gKm1iYXNlKQpAQCAtNTAwLDYgKzU3NSwzMCBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF9yeGZ1bmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4aHViYWRkcih2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKK30KKworc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhodWJwb3J0KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworfQorCitzdGF0aWMgaW5saW5lIHU4ICBtdXNiX3JlYWRfdHhmdW5hZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworfQorCitzdGF0aWMgaW5saW5lIHU4ICBtdXNiX3JlYWRfdHhodWJhZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgIG11c2JfcmVhZF90eGh1YnBvcnQodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQkxBQ0tGSU4gKi8KIAogI2VuZGlmCS8qIF9fTVVTQl9SRUdTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5kZXggYTIzNzU1MC4uMmZhN2Q1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC0yNTAsMjAgKzI1MCwzOSBAQAogCXU4IGJjaGFubmVsOwogCXU4IGludF9oc2RtYTsKIAotCXUzMiBhZGRyOworCXUzMiBhZGRyLCBjb3VudDsKIAl1MTYgY3NyOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAogCWludF9oc2RtYSA9IG11c2JfcmVhZGIobWJhc2UsIE1VU0JfSFNETUFfSU5UUik7Ci0JaWYgKCFpbnRfaHNkbWEpCi0JCWdvdG8gZG9uZTsKIAogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogCS8qIENsZWFyIERNQSBpbnRlcnJ1cHQgZmxhZ3MgKi8KIAltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9IU0RNQV9JTlRSLCBpbnRfaHNkbWEpOwogI2VuZGlmCiAKKwlpZiAoIWludF9oc2RtYSkgeworCQlEQkcoMiwgInNwdXJpb3VzIERNQSBpcnFcbiIpOworCisJCWZvciAoYmNoYW5uZWwgPSAwOyBiY2hhbm5lbCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJjaGFubmVsKyspIHsKKwkJCW11c2JfY2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQorCQkJCQkmKGNvbnRyb2xsZXItPmNoYW5uZWxbYmNoYW5uZWxdKTsKKwkJCWNoYW5uZWwgPSAmbXVzYl9jaGFubmVsLT5jaGFubmVsOworCQkJaWYgKGNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgeworCQkJCWNvdW50ID0gbXVzYl9yZWFkX2hzZG1hX2NvdW50KG1iYXNlLCBiY2hhbm5lbCk7CisKKwkJCQlpZiAoY291bnQgPT0gMCkKKwkJCQkJaW50X2hzZG1hIHw9ICgxIDw8IGJjaGFubmVsKTsKKwkJCX0KKwkJfQorCisJCURCRygyLCAiaW50X2hzZG1hID0gMHgleFxuIiwgaW50X2hzZG1hKTsKKworCQlpZiAoIWludF9oc2RtYSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKIAlmb3IgKGJjaGFubmVsID0gMDsgYmNoYW5uZWwgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiY2hhbm5lbCsrKSB7CiAJCWlmIChpbnRfaHNkbWEgJiAoMSA8PCBiY2hhbm5lbCkpIHsKIAkJCW11c2JfY2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKaW5kZXggMTI5OWQ5Mi4uNjEzZjk1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCkBAIC01NSw2ICs1NSwxMCBAQAogCQkgICAgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwgXAogCQkgICAgYWRkcikKIAorI2RlZmluZSBtdXNiX3JlYWRfaHNkbWFfY291bnQobWJhc2UsIGJjaGFubmVsKQlcCisJbXVzYl9yZWFkbChtYmFzZSwJXAorCQkgICBNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSkKKwogI2RlZmluZSBtdXNiX3dyaXRlX2hzZG1hX2NvdW50KG1iYXNlLCBiY2hhbm5lbCwgbGVuKSBcCiAJbXVzYl93cml0ZWwobWJhc2UsIFwKIAkJICAgIE1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlQpLCBcCkBAIC05Niw2ICsxMDAsMTkgQEAKIAkJKCh1MTYpKCgodTMyKSBkbWFfYWRkciA+PiAxNikgJiAweEZGRkYpKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG11c2JfcmVhZF9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBiY2hhbm5lbCkKK3sKKwl1MzIgY291bnQgPSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpKTsKKworCWNvdW50ID0gY291bnQgPDwgMTY7CisKKwljb3VudCB8PSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVykpOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLAogCQkJCXU4IGJjaGFubmVsLCB1MzIgbGVuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCmluZGV4IDgzYmVlYWMuLjNmZTE2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCiAJbXVzYl9wbGF0Zm9ybV9yZXN1bWUobXVzYik7CiAKLQlsID0gb21hcF9yZWFkbChPVEdfU1lTQ09ORklHKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRyk7CiAJbCAmPSB+RU5BQkxFV0FLRVVQOwkvKiBkaXNhYmxlIHdha2V1cCAqLwogCWwgJj0gfk5PU1REQlk7CQkvKiByZW1vdmUgcG9zc2libGUgbm9zdGRieSAqLwogCWwgfD0gU01BUlRTVERCWTsJLyogZW5hYmxlIHNtYXJ0IHN0YW5kYnkgKi8KQEAgLTIzMywxNyArMjMzLDE5IEBACiAJICovCiAJaWYgKCFjcHVfaXNfb21hcDM0MzAoKSkKIAkJbCB8PSBBVVRPSURMRTsJCS8qIGVuYWJsZSBhdXRvIGlkbGUgKi8KLQlvbWFwX3dyaXRlbChsLCBPVEdfU1lTQ09ORklHKTsKKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRywgbCk7CiAKLQlsID0gb21hcF9yZWFkbChPVEdfSU5URVJGU0VMKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0lOVEVSRlNFTCk7CiAJbCB8PSBVTFBJXzEyUElOOwotCW9tYXBfd3JpdGVsKGwsIE9UR19JTlRFUkZTRUwpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfSU5URVJGU0VMLCBsKTsKIAogCXByX2RlYnVnKCJIUyBVU0IgT1RHOiByZXZpc2lvbiAweCV4LCBzeXNjb25maWcgMHglMDJ4LCAiCiAJCQkic3lzc3RhdHVzIDB4JXgsIGludHJmc2VsIDB4JXgsIHNpbWVuYWJsZSAgMHgleFxuIiwKLQkJCW9tYXBfcmVhZGwoT1RHX1JFVklTSU9OKSwgb21hcF9yZWFkbChPVEdfU1lTQ09ORklHKSwKLQkJCW9tYXBfcmVhZGwoT1RHX1NZU1NUQVRVUyksIG9tYXBfcmVhZGwoT1RHX0lOVEVSRlNFTCksCi0JCQlvbWFwX3JlYWRsKE9UR19TSU1FTkFCTEUpKTsKKwkJCW11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19SRVZJU0lPTiksCisJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHKSwKKwkJCW11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNTVEFUVVMpLAorCQkJbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0lOVEVSRlNFTCksCisJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfU0lNRU5BQkxFKSk7CiAKIAlvbWFwX3ZidXNfcG93ZXIobXVzYiwgbXVzYi0+Ym9hcmRfbW9kZSA9PSBNVVNCX0hPU1QsIDEpOwogCkBAIC0yNTUsNiArMjU3LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCisJCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpCit7CisJbXVzYl9jb250ZXh0LT5vdGdfc3lzY29uZmlnID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRyk7CisJbXVzYl9jb250ZXh0LT5vdGdfZm9yY2VzdGFuZGJ5ID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlkpOworfQorCit2b2lkIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiLAorCQlzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyAqbXVzYl9jb250ZXh0KQoreworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHLCBtdXNiX2NvbnRleHQtPm90Z19zeXNjb25maWcpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSwgbXVzYl9jb250ZXh0LT5vdGdfZm9yY2VzdGFuZGJ5KTsKK30KKyNlbmRpZgorCiBpbnQgbXVzYl9wbGF0Zm9ybV9zdXNwZW5kKHN0cnVjdCBtdXNiICptdXNiKQogewogCXUzMiBsOwpAQCAtMjYzLDEzICsyODEsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBpbiBhbnkgcm9sZSAqLwotCWwgPSBvbWFwX3JlYWRsKE9UR19GT1JDRVNUREJZKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlkpOwogCWwgfD0gRU5BQkxFRk9SQ0U7CS8qIGVuYWJsZSBNU1RBTkRCWSAqLwotCW9tYXBfd3JpdGVsKGwsIE9UR19GT1JDRVNUREJZKTsKKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIGwpOwogCi0JbCA9IG9tYXBfcmVhZGwoT1RHX1NZU0NPTkZJRyk7CisJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwogCWwgfD0gRU5BQkxFV0FLRVVQOwkvKiBlbmFibGUgd2FrZXVwICovCi0Jb21hcF93cml0ZWwobCwgT1RHX1NZU0NPTkZJRyk7CisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcsIGwpOwogCiAJb3RnX3NldF9zdXNwZW5kKG11c2ItPnhjZWl2LCAxKTsKIApAQCAtMjk1LDEzICszMTMsMTMgQEAKIAllbHNlCiAJCWNsa19lbmFibGUobXVzYi0+Y2xvY2spOwogCi0JbCA9IG9tYXBfcmVhZGwoT1RHX1NZU0NPTkZJRyk7CisJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwogCWwgJj0gfkVOQUJMRVdBS0VVUDsJLyogZGlzYWJsZSB3YWtldXAgKi8KLQlvbWFwX3dyaXRlbChsLCBPVEdfU1lTQ09ORklHKTsKKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRywgbCk7CiAKLQlsID0gb21hcF9yZWFkbChPVEdfRk9SQ0VTVERCWSk7CisJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZKTsKIAlsICY9IH5FTkFCTEVGT1JDRTsJLyogZGlzYWJsZSBNU1RBTkRCWSAqLwotCW9tYXBfd3JpdGVsKGwsIE9UR19GT1JDRVNUREJZKTsKKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIGwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmggYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmgKaW5kZXggZmJlZGU3Ny4uNDBiM2MwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5oCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuaApAQCAtMTAsNDcgKzEwLDQzIEBACiAjaWZuZGVmIF9fTVVTQl9PTUFQMjQzWF9IX18KICNkZWZpbmUgX19NVVNCX09NQVAyNDNYX0hfXwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogLyoKICAqIE9NQVAyNDMwLXNwZWNpZmljIGRlZmluaXRpb25zCiAgKi8KIAotI2RlZmluZSBNRU5UT1JfQkFTRV9PRkZTRVQJMAotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCi0jZGVmaW5lCU9NQVBfSFNPVEdfQkFTRQkJKE9NQVAyNDNYX0hTX0JBU0UpCi0jZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQotI2RlZmluZQlPTUFQX0hTT1RHX0JBU0UJCShPTUFQMzRYWF9IU1VTQl9PVEdfQkFTRSkKLSNlbmRpZgotI2RlZmluZSBPTUFQX0hTT1RHKG9mZnNldCkJKE9NQVBfSFNPVEdfQkFTRSArIDB4NDAwICsgKG9mZnNldCkpCi0jZGVmaW5lIE9UR19SRVZJU0lPTgkJT01BUF9IU09URygweDApCi0jZGVmaW5lIE9UR19TWVNDT05GSUcJCU9NQVBfSFNPVEcoMHg0KQorI2RlZmluZSBPVEdfUkVWSVNJT04JCTB4NDAwCisKKyNkZWZpbmUgT1RHX1NZU0NPTkZJRwkJMHg0MDQKICMJZGVmaW5lCU1JRExFTU9ERQkxMgkvKiBiaXQgcG9zaXRpb24gKi8KICMJZGVmaW5lCUZPUkNFU1REQlkJCSgwIDw8IE1JRExFTU9ERSkKICMJZGVmaW5lCU5PU1REQlkJCQkoMSA8PCBNSURMRU1PREUpCiAjCWRlZmluZQlTTUFSVFNUREJZCQkoMiA8PCBNSURMRU1PREUpCisKICMJZGVmaW5lCVNJRExFTU9ERQkJMwkvKiBiaXQgcG9zaXRpb24gKi8KICMJZGVmaW5lCUZPUkNFSURMRQkJKDAgPDwgU0lETEVNT0RFKQogIwlkZWZpbmUJTk9JRExFCQkJKDEgPDwgU0lETEVNT0RFKQogIwlkZWZpbmUJU01BUlRJRExFCQkoMiA8PCBTSURMRU1PREUpCisKICMJZGVmaW5lCUVOQUJMRVdBS0VVUAkJKDEgPDwgMikKICMJZGVmaW5lCVNPRlRSU1QJCQkoMSA8PCAxKQogIwlkZWZpbmUJQVVUT0lETEUJCSgxIDw8IDApCi0jZGVmaW5lIE9UR19TWVNTVEFUVVMJCU9NQVBfSFNPVEcoMHg4KQorCisjZGVmaW5lIE9UR19TWVNTVEFUVVMJCTB4NDA4CiAjCWRlZmluZQlSRVNFVERPTkUJCSgxIDw8IDApCi0jZGVmaW5lIE9UR19JTlRFUkZTRUwJCU9NQVBfSFNPVEcoMHhjKQorCisjZGVmaW5lIE9UR19JTlRFUkZTRUwJCTB4NDBjCiAjCWRlZmluZQlFWFRDUAkJCSgxIDw8IDIpCi0jCWRlZmluZQlQSFlTRUwJCTAJLyogYml0IHBvc2l0aW9uICovCisjCWRlZmluZQlQSFlTRUwJCQkwCS8qIGJpdCBwb3NpdGlvbiAqLwogIwlkZWZpbmUJVVRNSV84QklUCQkoMCA8PCBQSFlTRUwpCiAjCWRlZmluZQlVTFBJXzEyUElOCQkoMSA8PCBQSFlTRUwpCiAjCWRlZmluZQlVTFBJXzhQSU4JCSgyIDw8IFBIWVNFTCkKLSNkZWZpbmUgT1RHX1NJTUVOQUJMRQkJT01BUF9IU09URygweDEwKQotIwlkZWZpbmUJVE0xCQkJKDEgPDwgMCkKLSNkZWZpbmUgT1RHX0ZPUkNFU1REQlkJCU9NQVBfSFNPVEcoMHgxNCkKLSMJZGVmaW5lCUVOQUJMRUZPUkNFCQkoMSA8PCAwKQogCi0jZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKyNkZWZpbmUgT1RHX1NJTUVOQUJMRQkJMHg0MTAKKyMJZGVmaW5lCVRNMQkJCSgxIDw8IDApCisKKyNkZWZpbmUgT1RHX0ZPUkNFU1REQlkJCTB4NDE0CisjCWRlZmluZQlFTkFCTEVGT1JDRQkJKDEgPDwgMCkKIAogI2VuZGlmCS8qIF9fTVVTQl9PTUFQMjQzWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYwppbmRleCA4OGI1ODdjLi5hYjc3NmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCkBAIC0xMTE4LDcgKzExMTgsNyBAQAogCX0KIAltdXNiLT5zeW5jID0gbWVtLT5zdGFydDsKIAotCXN5bmMgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOworCXN5bmMgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKCFzeW5jKSB7CiAJCXByX2RlYnVnKCJpb3JlbWFwIGZvciBzeW5jIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTBfb21hcC5jCmluZGV4IGUxM2M3NzAuLjFjODY4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTBfb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTBfb21hcC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAkJfQogCX0KIAotCWlmICghdHVzYl9kbWEtPm11bHRpY2hhbm5lbCAmJiB0dXNiX2RtYSAmJiB0dXNiX2RtYS0+Y2ggPj0gMCkKKwlpZiAodHVzYl9kbWEgJiYgIXR1c2JfZG1hLT5tdWx0aWNoYW5uZWwgJiYgdHVzYl9kbWEtPmNoID49IDApCiAJCW9tYXBfZnJlZV9kbWEodHVzYl9kbWEtPmNoKTsKIAogCWtmcmVlKHR1c2JfZG1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKaW5kZXggMmJlOWYyZi4uM2U0ZTlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiAvKiBSZWdpc3RlciBkZWZpbmVzICovCiAKQEAgLTIzNiwxNSArMjM2LDYgQEAKICNkZWZpbmUgUE1CUjEJCQkJMHgwRAogI2RlZmluZSBHUElPX1VTQl80UElOX1VMUElfMjQzMEMJKDMgPDwgMCkKIAotCi0KLWVudW0gbGlua3N0YXQgewotCVVTQl9MSU5LX1VOS05PV04gPSAwLAotCVVTQl9MSU5LX05PTkUsCi0JVVNCX0xJTktfVkJVUywKLQlVU0JfTElOS19JRCwKLX07Ci0KIHN0cnVjdCB0d2w0MDMwX3VzYiB7CiAJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CiAJc3RydWN0IGRldmljZQkJKmRldjsKQEAgLTM0NywxMCArMzM4LDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBlbnVtIGxpbmtzdGF0IHR3bDQwMzBfdXNiX2xpbmtzdGF0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQorc3RhdGljIGVudW0gdXNiX3hjZWl2X2V2ZW50cyB0d2w0MDMwX3VzYl9saW5rc3RhdChzdHJ1Y3QgdHdsNDAzMF91c2IgKnR3bCkKIHsKIAlpbnQJc3RhdHVzOwotCWludAlsaW5rc3RhdCA9IFVTQl9MSU5LX1VOS05PV047CisJaW50CWxpbmtzdGF0ID0gVVNCX0VWRU5UX05PTkU7CiAKIAkvKgogCSAqIEZvciBJRC9WQlVTIHNlbnNpbmcsIHNlZSBtYW51YWwgc2VjdGlvbiAxNS40LjggLi4uCkBAIC0zNjgsMTEgKzM1OSwxMSBAQAogCQlkZXZfZXJyKHR3bC0+ZGV2LCAiVVNCIGxpbmsgc3RhdHVzIGVyciAlZFxuIiwgc3RhdHVzKTsKIAllbHNlIGlmIChzdGF0dXMgJiAoQklUKDcpIHwgQklUKDIpKSkgewogCQlpZiAoc3RhdHVzICYgQklUKDIpKQotCQkJbGlua3N0YXQgPSBVU0JfTElOS19JRDsKKwkJCWxpbmtzdGF0ID0gVVNCX0VWRU5UX0lEOwogCQllbHNlCi0JCQlsaW5rc3RhdCA9IFVTQl9MSU5LX1ZCVVM7CisJCQlsaW5rc3RhdCA9IFVTQl9FVkVOVF9WQlVTOwogCX0gZWxzZQotCQlsaW5rc3RhdCA9IFVTQl9MSU5LX05PTkU7CisJCWxpbmtzdGF0ID0gVVNCX0VWRU5UX05PTkU7CiAKIAlkZXZfZGJnKHR3bC0+ZGV2LCAiSFdfQ09ORElUSU9OUyAweCUwMngvJWQ7IGxpbmsgJWRcbiIsCiAJCQlzdGF0dXMsIHN0YXR1cywgbGlua3N0YXQpOwpAQCAtMzgzLDcgKzM3NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZ0d2wtPmxvY2spOwogCXR3bC0+bGlua3N0YXQgPSBsaW5rc3RhdDsKLQlpZiAobGlua3N0YXQgPT0gVVNCX0xJTktfSUQpIHsKKwlpZiAobGlua3N0YXQgPT0gVVNCX0VWRU5UX0lEKSB7CiAJCXR3bC0+b3RnLmRlZmF1bHRfYSA9IHRydWU7CiAJCXR3bC0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0FfSURMRTsKIAl9IGVsc2UgewpAQCAtNTY0LDcgKzU1NSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHdsLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwKLQkJCSh0d2wtPmxpbmtzdGF0ID09IFVTQl9MSU5LX1ZCVVMpID8gIm9uIiA6ICJvZmYiKTsKKwkJCSh0d2wtPmxpbmtzdGF0ID09IFVTQl9FVkVOVF9WQlVTKSA/ICJvbiIgOiAib2ZmIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHdsLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTc2LDE3ICs1NjcsOCBAQAogCXN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsID0gX3R3bDsKIAlpbnQgc3RhdHVzOwogCi0jaWZkZWYgQ09ORklHX0xPQ0tERVAKLQkvKiBXT1JLQVJPVU5EIGZvciBsb2NrZGVwIGZvcmNpbmcgSVJRRl9ESVNBQkxFRCBvbiB1cywgd2hpY2gKLQkgKiB3ZSBkb24ndCB3YW50IGFuZCBjYW4ndCB0b2xlcmF0ZS4gIEFsdGhvdWdoIGl0IG1pZ2h0IGJlCi0JICogZnJpZW5kbGllciBub3QgdG8gYm9ycm93IHRoaXMgdGhyZWFkIGNvbnRleHQuLi4KLQkgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0jZW5kaWYKLQogCXN0YXR1cyA9IHR3bDQwMzBfdXNiX2xpbmtzdGF0KHR3bCk7Ci0JaWYgKHN0YXR1cyAhPSBVU0JfTElOS19VTktOT1dOKSB7Ci0KKwlpZiAoc3RhdHVzID49IDApIHsKIAkJLyogRklYTUUgYWRkIGEgc2V0X3Bvd2VyKCkgbWV0aG9kIHNvIHRoYXQgQi1kZXZpY2VzIGNhbgogCQkgKiBjb25maWd1cmUgdGhlIGNoYXJnZXIgYXBwcm9wcmlhdGVseS4gIEl0J3Mgbm90IGFsd2F5cwogCQkgKiBjb3JyZWN0IHRvIGNvbnN1bWUgVkJVUyBwb3dlciwgYW5kIGhvdyBtdWNoIGN1cnJlbnQgdG8KQEAgLTU5OCwxMiArNTgwLDEzIEBACiAJCSAqIFVTQl9MSU5LX1ZCVVMgc3RhdGUuICBtdXNiX2hkcmMgd29uJ3QgY2FyZSB1bnRpbCBpdAogCQkgKiBzdGFydHMgdG8gaGFuZGxlIHNvZnRjb25uZWN0IHJpZ2h0LgogCQkgKi8KLQkJaWYgKHN0YXR1cyA9PSBVU0JfTElOS19OT05FKQorCQlpZiAoc3RhdHVzID09IFVTQl9FVkVOVF9OT05FKQogCQkJdHdsNDAzMF9waHlfc3VzcGVuZCh0d2wsIDApOwogCQllbHNlCiAJCQl0d2w0MDMwX3BoeV9yZXN1bWUodHdsKTsKIAotCQl0d2w0MDMwY2hhcmdlcl91c2JfZW4oc3RhdHVzID09IFVTQl9MSU5LX1ZCVVMpOworCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZ0d2wtPm90Zy5ub3RpZmllciwgc3RhdHVzLAorCQkJCXR3bC0+b3RnLmdhZGdldCk7CiAJfQogCXN5c2ZzX25vdGlmeSgmdHdsLT5kZXYtPmtvYmosIE5VTEwsICJ2YnVzIik7CiAKQEAgLTY5Myw2ICs2NzYsOCBAQAogCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3ZidXMpKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBzeXNmcyBmaWxlXG4iKTsKIAorCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmdHdsLT5vdGcubm90aWZpZXIpOworCiAJLyogT3VyIGpvYiBpcyB0byB1c2UgaXJxcyBhbmQgc3RhdHVzIGZyb20gdGhlIHBvd2VyIG1vZHVsZQogCSAqIHRvIGtlZXAgdGhlIHRyYW5zY2VpdmVyIGRpc2FibGVkIHdoZW4gbm90aGluZydzIGNvbm5lY3RlZC4KIAkgKgpAQCAtNzAyLDcgKzY4Nyw3IEBACiAJICogbmVlZCBib3RoIGhhbmRsZXMsIG90aGVyd2lzZSBqdXN0IG9uZSBzdWZmaWNlcy4KIAkgKi8KIAl0d2wtPmlycV9lbmFibGVkID0gdHJ1ZTsKLQlzdGF0dXMgPSByZXF1ZXN0X2lycSh0d2wtPmlycSwgdHdsNDAzMF91c2JfaXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHR3bC0+aXJxLCBOVUxMLCB0d2w0MDMwX3VzYl9pcnEsCiAJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCiAJCQkidHdsNDAzMF91c2IiLCB0d2wpOwogCWlmIChzdGF0dXMgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGM0ODBlYTRjLi5jNzhiMjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNDcyLDYgKzQ3MiwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3RpNjg1OC4KIAorY29uZmlnIFVTQl9TRVJJQUxfUUNBVVgKKwl0cmlzdGF0ZSAiVVNCIFF1YWxjb21tIEF1eGlsaWFyeSBTZXJpYWwgUG9ydCBEcml2ZXIiCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGF1eGlsaWFyeSBzZXJpYWwgcG9ydHMgcHJvdmlkZWQKKwkgIGJ5IG1hbnkgbW9kZW1zIGJhc2VkIG9uIFF1YWxjb21tIGNoaXBzZXRzLiAgVGhlc2UgcG9ydHMgb2Z0ZW4gdXNlCisJICBhIHByb3ByaWV0YXJ5IHByb3RvY29sIGNhbGxlZCBETSBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIEFULSBvcgorCSAgUFBQLWJhc2VkIGNvbW11bmljYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1vdG9fbW9kZW0uICBJZiB1bnN1cmUsIGNob29zZSBOLgorCiBjb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTQogCXRyaXN0YXRlICJVU0IgUXVhbGNvbW0gU2VyaWFsIG1vZGVtIgogCWhlbHAKQEAgLTYwMCw2ICs2MTEsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9wdGljb24uCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1ZJVk9QQVlfU0VSSUFMCisgICAgICAgIHRyaXN0YXRlICJVU0IgVmlWT3BheSBzZXJpYWwgaW50ZXJmYWNlIGRyaXZlciIKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgVmlWT3RlY2ggVmlWT3BheSBVU0IgZGV2aWNlLgorCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisgICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpdm9wYXktc2VyaWFsLgorCiBjb25maWcgVVNCX1NFUklBTF9ERUJVRwogCXRyaXN0YXRlICJVU0IgRGVidWdnaW5nIERldmljZSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKaW5kZXggNjY2MTliZS4uODNjOWU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtNDUsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OKQkJCSs9IG9wdGlvbi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4KQkJKz0gb3RpNjg1OC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMpCQkJKz0gcGwyMzAzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FDQVVYKQkJCSs9IHFjYXV4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NKQkJKz0gcWNzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FGRSkJCQkrPSBzYWZlX3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSkJCSs9IHNpZW1lbnNfbXBpLm8KQEAgLTU1LDQgKzU2LDUgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1ZJU09SKQkJCSs9IHZpc29yLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCkJCSs9IHdoaXRlaGVhdC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9YSVJDT00pCQkJKz0ga2V5c3Bhbl9wZGEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVklWT1BBWV9TRVJJQUwpCSs9IHZpdm9wYXktc2VyaWFsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwppbmRleCBiMTBhYzg0Li4zNjVkYjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwpAQCAtNzgsNyArNzgsNyBAQAogI2RlZmluZSBEUklWRVJfREVTQyAiQUlSY2FibGUgVVNCIERyaXZlciIKIAogLyogSUQgdGFibGUgdGhhdCB3aWxsIGJlIHJlZ2lzdGVyZWQgd2l0aCBVU0IgY29yZSAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKEFJUkNBQkxFX1ZJRCwgQUlSQ0FCTEVfVVNCX1BJRCkgfSwKIAl7IH0sCiB9OwpAQCAtNDY4LDEwICs0NjgsNiBAQAogCiAJaWYgKHN0YXR1cykgewogCQlkYmcoIiVzIC0gdXJiIHN0YXR1cyA9ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JCWlmICghcG9ydC0+cG9ydC5jb3VudCkgewotCQkJZGJnKCIlcyAtIHBvcnQgaXMgY2xvc2VkLCBleGl0aW5nLiIsIF9fZnVuY19fKTsKLQkJCXJldHVybjsKLQkJfQogCQlpZiAoc3RhdHVzID09IC1FUFJPVE8pIHsKIAkJCWRiZygiJXMgLSBjYXVnaHQgLUVQUk9UTywgcmVzdWJtaXR0aW5nIHRoZSB1cmIiLAogCQkJICAgIF9fZnVuY19fKTsKQEAgLTUzMCwyMyArNTI2LDE5IEBACiAJfQogCXR0eV9rcmVmX3B1dCh0dHkpOwogCi0JLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKLQkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQkgIGFpcmNhYmxlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgYWlyY2FibGVfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAocmVzdWx0KQotCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKLQkJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQl9Ci0KLQlyZXR1cm47CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRVBFUk0pCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCiAvKiBCYXNlZCBvbiBmdGRpX3Npby5jIHRocm90dGxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwppbmRleCBhOWMyZGVjLi41NDdjOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKQEAgLTUwLDcgKzUwLDcgQEAKIC8qIHVzYiB0aW1lb3V0IG9mIDEgc2Vjb25kICovCiAjZGVmaW5lIEFSS19USU1FT1VUICgxKkhaKQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHg2NTQ3LCAweDAyMzIpIH0sCiAJeyBVU0JfREVWSUNFKDB4MThlYywgMHgzMTE4KSB9LAkJLyogVVNCIHRvIElyREEgYWRhcHRlciAqLwogCXsgfSwKQEAgLTczMyw3ICs3MzMsNiBAQAogCiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodHR5KSB7Ci0JCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCArIDEpOwogCQkJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLwogCQkJaWYgKHVubGlrZWx5KGxzciAmIFVBUlRfTFNSX09FKSkKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwppbmRleCBhMDQ2N2JjLi4xMjk1ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoQkVMS0lOX1NBX1ZJRCwgQkVMS0lOX1NBX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkVMS0lOX09MRF9WSUQsIEJFTEtJTl9PTERfUElEKSB9LAogCXsgVVNCX0RFVklDRShQRVJBQ09NX1ZJRCwgUEVSQUNPTV9QSUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IDU5ZWZmNzIuLjlmNGZlZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSA5NjAwCiAjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgIDEwMDAKQEAgLTcwLDcgKzcxLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4NDM0OCwgMHg1NTIzKSB9LAogCXsgVVNCX0RFVklDRSgweDFhODYsIDB4NzUyMykgfSwKIAl7IH0sCkBAIC0zOTIsMTcgKzM5MywyMyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByOwogCXVpbnQxNl90IHJlZ19jb250ZW50czsKLQl1aW50OF90IGJyZWFrX3JlZ1syXTsKKwl1aW50OF90ICpicmVha19yZWc7CiAKIAlkYmcoIiVzKCkiLCBfX2Z1bmNfXyk7CiAKLQlyID0gY2gzNDFfY29udHJvbF9pbihwb3J0LT5zZXJpYWwtPmRldiwgQ0gzNDFfUkVRX1JFQURfUkVHLAotCQkJY2gzNDFfYnJlYWtfcmVnLCAwLCBicmVha19yZWcsIHNpemVvZihicmVha19yZWcpKTsKLQlpZiAociA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVTQiBjb250cm9sIHJlYWQgZXJyb3Igd2hpbHN0IGdldHRpbmciCi0JCQkJIiBicmVhayByZWdpc3RlciBjb250ZW50cy5cbiIsIF9fRklMRV9fKTsKKwlicmVha19yZWcgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnJlYWtfcmVnKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0ga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KKworCXIgPSBjaDM0MV9jb250cm9sX2luKHBvcnQtPnNlcmlhbC0+ZGV2LCBDSDM0MV9SRVFfUkVBRF9SRUcsCisJCQljaDM0MV9icmVha19yZWcsIDAsIGJyZWFrX3JlZywgMik7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVVNCIGNvbnRyb2wgcmVhZCBlcnJvciAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCByKTsKKwkJZ290byBvdXQ7CisJfQogCWRiZygiJXMgLSBpbml0aWFsIGNoMzQxIGJyZWFrIHJlZ2lzdGVyIGNvbnRlbnRzIC0gcmVnMTogJXgsIHJlZzI6ICV4IiwKIAkJCV9fZnVuY19fLCBicmVha19yZWdbMF0sIGJyZWFrX3JlZ1sxXSk7CiAJaWYgKGJyZWFrX3N0YXRlICE9IDApIHsKQEAgLTQxNiwxMiArNDIzLDE0IEBACiAJfQogCWRiZygiJXMgLSBOZXcgY2gzNDEgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMgLSByZWcxOiAleCwgcmVnMjogJXgiLAogCQkJX19mdW5jX18sIGJyZWFrX3JlZ1swXSwgYnJlYWtfcmVnWzFdKTsKLQlyZWdfY29udGVudHMgPSAodWludDE2X3QpYnJlYWtfcmVnWzBdIHwgKCh1aW50MTZfdClicmVha19yZWdbMV0gPDwgOCk7CisJcmVnX2NvbnRlbnRzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGJyZWFrX3JlZyk7CiAJciA9IGNoMzQxX2NvbnRyb2xfb3V0KHBvcnQtPnNlcmlhbC0+ZGV2LCBDSDM0MV9SRVFfV1JJVEVfUkVHLAogCQkJY2gzNDFfYnJlYWtfcmVnLCByZWdfY29udGVudHMpOwogCWlmIChyIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVTQiBjb250cm9sIHdyaXRlIGVycm9yIHdoaWxzdCBzZXR0aW5nIgotCQkJCSIgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMuXG4iLCBfX0ZJTEVfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVVNCIGNvbnRyb2wgd3JpdGUgZXJyb3IgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgcik7CitvdXQ6CisJa2ZyZWUoYnJlYWtfcmVnKTsKIH0KIAogc3RhdGljIGludCBjaDM0MV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCBiZDI1NGVjLi41MDczODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDY2QSkgfSwgLyogQUtUQUtPTSBBQ0UtMTAwMSBjYWJsZSAqLwogCXsgVVNCX0RFVklDRSgweDA0ODksIDB4RTAwMCkgfSwgLyogUGlyZWxsaSBCcm9hZGJhbmQgUy5wLkEsIERQLUwxMCBTSVAvR1NNIE1vYmlsZSAqLwogCXsgVVNCX0RFVklDRSgweDA3NDUsIDB4MTAwMCkgfSwgLyogQ2lwaGVyTGFiIFVTQiBDQ0QgQmFyY29kZSBTY2FubmVyIDEwMDAgKi8KQEAgLTkxLDExICs5MSwxMiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFDOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1KVEFHICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUUyKSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUxJTiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFFNykgfSwgLyogQWVyb2NvbW0gUmFkaW8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxRTgpIH0sIC8qIFplcGh5ciBCaW9oYXJuZXNzICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUYyKSB9LCAvKiBDMTAwNyBIRiBiYW5kIFJGSUQgY29udHJvbGxlciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vc3RyYXRpb24gbW9kdWxlICovCi0JeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyOTMpIH0sIC8qIFRlbGVnZXN5cyBFVFJYMlVTQiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODJGOSkgfSwgLyogUHJvY3lvbiBBVlMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzODIpIH0sIC8qIEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuICovCkBAIC02MTIsNyArNjEzLDcgQEAKIAkJCQliYXVkKTsKIAkJaWYgKGNwMjEweF9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMFhfU0VUX0JBVURESVYsCiAJCQkJCSgoQkFVRF9SQVRFX0dFTl9GUkVRICsgYmF1ZC8yKSAvIGJhdWQpKSkgewotCQkJZGJnKCJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwkJCWRiZygiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSIpOwogCQkJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcyk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggYjBmNjQwMi4uZjc0NGFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKENZQkVSSkFDS19WRU5ET1JfSUQsIENZQkVSSkFDS19QUk9EVUNUX0lEKSB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMzkxLDExICszOTEsMTAgQEAKIAogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBpZ25vcmluZyBzaW5jZSBkZXZpY2Ugbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIGlnbm9yaW5nIHNpbmNlIGRldmljZSBub3Qgb3BlbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggYTU5MWViZS4uYmFmNzRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC02NiwxNyArNjYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJjeXByZXNzX204LmgiCiAKIAotI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHCi0Jc3RhdGljIGludCBkZWJ1ZyA9IDE7Ci0jZWxzZQotCXN0YXRpYyBpbnQgZGVidWc7Ci0jZW5kaWYKK3N0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgaW50IHN0YXRzOwogc3RhdGljIGludCBpbnRlcnZhbDsKK3N0YXRpYyBpbnQgdW5zdGFibGVfYmF1ZHM7CiAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCkBAIC04OSwyNCArODcsMjQgQEAKICNkZWZpbmUgQ1lQUkVTU19CVUZfU0laRQkxMDI0CiAjZGVmaW5lIENZUFJFU1NfQ0xPU0lOR19XQUlUCSgzMCpIWikKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2VhcnRobWF0ZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9lYXJ0aG1hdGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0JfTFQyMCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9DWVBSRVNTLCBQUk9EVUNUX0lEX0NZUEhJRENPTSkgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX1BPV0VSQ09NLCBQUk9EVUNUX0lEX1VQUykgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX25va2lhY2E0MnYyIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX25va2lhY2E0MnYyW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9EQVpaTEUsIFBST0RVQ1RfSURfQ0E0MikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQikgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCX0xUMjApIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9DWVBSRVNTLCBQUk9EVUNUX0lEX0NZUEhJRENPTSkgfSwKQEAgLTI5NSw2ICsyOTMsOSBAQAogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAorCWlmICh1bnN0YWJsZV9iYXVkcykKKwkJcmV0dXJuIG5ld19yYXRlOworCiAJLyoKIAkgKiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGZpcm13YXJlIGZvciB0aGUgQ3lwcmVzcyBNOCBhbGxvd3MgZm9yCiAJICogYSBtYXhpbXVtIHNwZWVkIG9mIDU3NjAwYnBzIChJIGhhdmUgbm8gaWRlYSB3aGV0aGVyIERlTG9ybWUKQEAgLTM0NCw3ICszNDUsOCBAQAogewogCWludCBuZXdfYmF1ZHJhdGUgPSAwLCByZXR2YWwgPSAwLCB0cmllcyA9IDA7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKLQlfX3U4IGZlYXR1cmVfYnVmZmVyWzVdOworCXU4ICpmZWF0dXJlX2J1ZmZlcjsKKwljb25zdCB1bnNpZ25lZCBpbnQgZmVhdHVyZV9sZW4gPSA1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwpAQCAtMzU0LDE3ICszNTYsMTggQEAKIAlpZiAoIXByaXYtPmNvbW1faXNfb2spCiAJCXJldHVybiAtRU5PREVWOwogCisJZmVhdHVyZV9idWZmZXIgPSBrY2FsbG9jKGZlYXR1cmVfbGVuLCBzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlYXR1cmVfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXN3aXRjaCAoY3lwcmVzc19yZXF1ZXN0X3R5cGUpIHsKIAljYXNlIENZUFJFU1NfU0VUX0NPTkZJRzoKLQkJbmV3X2JhdWRyYXRlID0gcHJpdi0+YmF1ZF9yYXRlOwogCQkvKiAwIG1lYW5zICdIYW5nIHVwJyBzbyBkb2Vzbid0IGNoYW5nZSB0aGUgdHJ1ZSBiaXQgcmF0ZSAqLwotCQlpZiAoYmF1ZF9yYXRlID09IDApCi0JCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7Ci0JCS8qIENoYW5nZSBvZiBzcGVlZCA/ICovCi0JCWVsc2UgaWYgKGJhdWRfcmF0ZSAhPSBwcml2LT5iYXVkX3JhdGUpIHsKKwkJbmV3X2JhdWRyYXRlID0gcHJpdi0+YmF1ZF9yYXRlOworCQlpZiAoYmF1ZF9yYXRlICYmIGJhdWRfcmF0ZSAhPSBwcml2LT5iYXVkX3JhdGUpIHsKIAkJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgY2hhbmdpbmciLCBfX2Z1bmNfXyk7CiAJCQlyZXR2YWwgPSBhbmFseXplX2JhdWRfcmF0ZShwb3J0LCBiYXVkX3JhdGUpOwotCQkJaWYgKHJldHZhbCA+PSAgMCkgeworCQkJaWYgKHJldHZhbCA+PSAwKSB7CiAJCQkJbmV3X2JhdWRyYXRlID0gcmV0dmFsOwogCQkJCWRiZygiJXMgLSBOZXcgYmF1ZCByYXRlIHNldCB0byAlZCIsCiAJCQkJICAgIF9fZnVuY19fLCBuZXdfYmF1ZHJhdGUpOwpAQCAtMzczLDkgKzM3Niw4IEBACiAJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgYmVpbmcgc2VudCBhcyAlZCIsCiAJCQkJCV9fZnVuY19fLCBuZXdfYmF1ZHJhdGUpOwogCi0JCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSk7CiAJCS8qIGZpbGwgdGhlIGZlYXR1cmVfYnVmZmVyIHdpdGggbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQkJKigodV9pbnQzMl90ICopZmVhdHVyZV9idWZmZXIpID0gbmV3X2JhdWRyYXRlOworCQlwdXRfdW5hbGlnbmVkX2xlMzIobmV3X2JhdWRyYXRlLCBmZWF0dXJlX2J1ZmZlcik7CiAJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IGRhdGFfYml0czsgICAvKiBhc3NpZ24gZGF0YSBiaXRzIGluIDIgYml0IHNwYWNlICggbWF4IDMgKSAqLwogCQkvKiAxIGJpdCBnYXAgKi8KIAkJZmVhdHVyZV9idWZmZXJbNF0gfD0gKHN0b3BfYml0cyA8PCAzKTsgICAvKiBhc3NpZ24gc3RvcCBiaXRzIGluIDEgYml0IHNwYWNlICovCkBAIC0zOTcsMTUgKzM5OSwxNSBAQAogCQkJCQlISURfUkVRX1NFVF9SRVBPUlQsCiAJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTLAogCQkJCQkweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLAotCQkJCQlzaXplb2YoZmVhdHVyZV9idWZmZXIpLCA1MDApOworCQkJCQlmZWF0dXJlX2xlbiwgNTAwKTsKIAogCQkJaWYgKHRyaWVzKysgPj0gMykKIAkJCQlicmVhazsKIAotCQl9IHdoaWxlIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSAmJgorCQl9IHdoaWxlIChyZXR2YWwgIT0gZmVhdHVyZV9sZW4gJiYKIAkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKLQkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7CisJCWlmIChyZXR2YWwgIT0gZmVhdHVyZV9sZW4pIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsICIKIAkJCQkibGluZSBzZXR0aW5ncyAtICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7CkBAIC00MjUsNDMgKzQyNyw0MiBAQAogCQkJLyogTm90IGltcGxlbWVudGVkIGZvciB0aGlzIGRldmljZSwKIAkJCSAgIGFuZCBpZiB3ZSB0cnkgdG8gZG8gaXQgd2UncmUgbGlrZWx5CiAJCQkgICB0byBjcmFzaCB0aGUgaGFyZHdhcmUuICovCi0JCQlyZXR1cm4gLUVOT1RUWTsKKwkJCXJldHZhbCA9IC1FTk9UVFk7CisJCQlnb3RvIG91dDsKIAkJfQogCQlkYmcoIiVzIC0gcmV0cmVpdmluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyIsIF9fZnVuY19fKTsKLQkJLyogc2V0IGluaXRpYWwgdmFsdWVzIGluIGZlYXR1cmUgYnVmZmVyICovCi0JCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSk7Ci0KIAkJZG8gewogCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCQl1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJCQlISURfUkVRX0dFVF9SRVBPUlQsCiAJCQkJCVVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCiAJCQkJCTB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsCi0JCQkJCXNpemVvZihmZWF0dXJlX2J1ZmZlciksIDUwMCk7CisJCQkJCWZlYXR1cmVfbGVuLCA1MDApOwogCiAJCQlpZiAodHJpZXMrKyA+PSAzKQogCQkJCWJyZWFrOwotCQl9IHdoaWxlIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKQorCQl9IHdoaWxlIChyZXR2YWwgIT0gZmVhdHVyZV9sZW4KIAkJCQkJCSYmIHJldHZhbCAhPSAtRU5PREVWKTsKIAotCQlpZiAocmV0dmFsICE9IHNpemVvZihmZWF0dXJlX2J1ZmZlcikpIHsKKwkJaWYgKHJldHZhbCAhPSBmZWF0dXJlX2xlbikgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gcmV0cmlldmUgc2VyaWFsICIKIAkJCQkibGluZSBzZXR0aW5ncyAtICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7Ci0JCQlyZXR1cm4gcmV0dmFsOworCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJLyogc3RvcmUgdGhlIGNvbmZpZyBpbiBvbmUgYnl0ZSwgYW5kIGxhdGVyCiAJCQkgICB1c2UgYml0IG1hc2tzIHRvIGNoZWNrIHZhbHVlcyAqLwogCQkJcHJpdi0+Y3VycmVudF9jb25maWcgPSBmZWF0dXJlX2J1ZmZlcls0XTsKLQkJCXByaXYtPmJhdWRfcmF0ZSA9ICooKHVfaW50MzJfdCAqKWZlYXR1cmVfYnVmZmVyKTsKKwkJCXByaXYtPmJhdWRfcmF0ZSA9IGdldF91bmFsaWduZWRfbGUzMihmZWF0dXJlX2J1ZmZlcik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkrK3ByaXYtPmNtZF9jb3VudDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KK291dDoKKwlrZnJlZShmZWF0dXJlX2J1ZmZlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0gLyogY3lwcmVzc19zZXJpYWxfY29udHJvbCAqLwogCkBAIC02OTAsNyArNjkxLDYgQEAKIHsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCS8qIGRyb3AgZHRyIGFuZCBydHMgKi8KLQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWlmIChvbiA9PSAwKQogCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOwpAQCAtMTMwNywxMyArMTMwNyw5IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHByb2Nlc3MgcmVhZCBpZiB0aGVyZSBpcyBkYXRhIG90aGVyIHRoYW4gbGluZSBzdGF0dXMgKi8KLQlpZiAodHR5ICYmIChieXRlcyA+IGkpKSB7Ci0JCWJ5dGVzID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBieXRlcyk7Ci0JCWZvciAoOyBpIDwgYnl0ZXMgOyArK2kpIHsKLQkJCWRiZygicHVzaGluZyBieXRlIG51bWJlciAlZCAtICVkIC0gJWMiLCBpLCBkYXRhW2ldLAotCQkJCQlkYXRhW2ldKTsKLQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOwotCQl9CisJaWYgKHR0eSAmJiBieXRlcyA+IGkpIHsKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSArIGksCisJCQkJYnl0ZXMgLSBpLCB0dHlfZmxhZyk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQogCkBAIC0xMzI1LDkgKzEzMjEsOSBAQAogY29udGludWVfcmVhZDoKIAl0dHlfa3JlZl9wdXQodHR5KTsKIAotCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZC4uLiB1bmxlc3MgdGhlIHBvcnQgaGFzIGNsb3NlZC4gKi8KKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgKi8KIAotCWlmIChwb3J0LT5wb3J0LmNvdW50ID4gMCAmJiBwcml2LT5jb21tX2lzX29rKSB7CisJaWYgKHByaXYtPmNvbW1faXNfb2spIHsKIAkJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQl1c2JfcmN2aW50cGlwZShwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQkJcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCkBAIC0xMzM2LDcgKzEzMzIsNyBAQAogCQkJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsCiAJCQkJcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkgeworCQlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRVBFUk0pIHsKIAkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgIgogCQkJCQkicmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywKIAkJCQkJcmVzdWx0KTsKQEAgLTE2NTAsMyArMTY0Niw1IEBACiBNT0RVTEVfUEFSTV9ERVNDKHN0YXRzLCAiRW5hYmxlIHN0YXRpc3RpY3Mgb3Igbm90Iik7CiBtb2R1bGVfcGFyYW0oaW50ZXJ2YWwsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhpbnRlcnZhbCwgIk92ZXJyaWRlcyBpbnRlcnJ1cHQgaW50ZXJ2YWwiKTsKK21vZHVsZV9wYXJhbSh1bnN0YWJsZV9iYXVkcywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh1bnN0YWJsZV9iYXVkcywgIkFsbG93IHVuc3RhYmxlIGJhdWQgcmF0ZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCA2OGU4MGJlLi42OGIwYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC00NzAsMTggKzQ3MCwxOCBAQAogCiBzdGF0aWMgaW50IGRlYnVnOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfMl9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfNF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlXzIgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfMltdID0gewogCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV8yX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfNCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV80W10gPSB7CiAJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzRfSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0xMjYyLDEwICsxMjYyLDEwIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiB0cnkgdG8gc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSBvbiB0aGlzIHBvcnQsIGlmIGl0IGlzIG9wZW4gKi8KKwkvKiB0cnkgdG8gc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSBvbiB0aGlzIHBvcnQgKi8KIAlzcGluX2xvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7CiAJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7Ci0JaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPiAwKSB7CisJaWYgKHByaXYtPmRwX291dF9idWZfbGVuID4gMCkgewogCQkqKCh1bnNpZ25lZCBjaGFyICopKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSkKIAkJCT0gKHVuc2lnbmVkIGNoYXIpRElHSV9DTURfU0VORF9EQVRBOwogCQkqKCh1bnNpZ25lZCBjaGFyICopKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSArIDEpCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCXNjaGVkdWxlX3dvcmsoJnByaXYtPmRwX3dha2V1cF93b3JrKTsKIAogCXNwaW5fdW5sb2NrKCZwcml2LT5kcF9wb3J0X2xvY2spOwotCWlmIChyZXQpCisJaWYgKHJldCAmJiByZXQgIT0gLUVQRVJNKQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwpAQCAtMTM1Myw4ICsxMzUzLDcgQEAKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBrdGVybWlvcyBub3RfdGVybWlvczsKIAotCWRiZygiZGlnaV9vcGVuOiBUT1A6IHBvcnQ9JWQsIG9wZW5fY291bnQ9JWQiLAotCQlwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+cG9ydC5jb3VudCk7CisJZGJnKCJkaWdpX29wZW46IFRPUDogcG9ydD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAogCS8qIGJlIHN1cmUgdGhlIGRldmljZSBpcyBzdGFydGVkIHVwICovCiAJaWYgKGRpZ2lfc3RhcnR1cF9kZXZpY2UocG9ydC0+c2VyaWFsKSAhPSAwKQpAQCAtMTM5Myw4ICsxMzkyLDcgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CiAJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiZGlnaV9jbG9zZTogVE9QOiBwb3J0PSVkLCBvcGVuX2NvdW50PSVkIiwKLQkJcHJpdi0+ZHBfcG9ydF9udW0sIHBvcnQtPnBvcnQuY291bnQpOworCWRiZygiZGlnaV9jbG9zZTogVE9QOiBwb3J0PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIAkvKiBpZiBkaXNjb25uZWN0ZWQsIGp1c3QgY2xlYXIgZmxhZ3MgKi8KQEAgLTE2MjksNyArMTYyNyw3IEBACiAJLyogY29udGludWUgcmVhZCAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0ICE9IDApIHsKKwlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FUEVSTSkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXM6IGZhaWxlZCByZXN1Ym1pdHRpbmcgdXJiLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CkBAIC0xNjU4LDEyICsxNjU2LDExIEBACiAJaW50IHBvcnRfc3RhdHVzID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzJdOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcikgKyAzOwogCWludCBmbGFnLCB0aHJvdHRsZWQ7Ci0JaW50IGk7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJLyogZG8gbm90IHByb2Nlc3MgY2FsbGJhY2tzIG9uIGNsb3NlZCBwb3J0cyAqLwogCS8qIGJ1dCBkbyBjb250aW51ZSB0aGUgcmVhZCBjaGFpbiAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDApCisJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCiAJCXJldHVybiAwOwogCiAJLyogc2hvcnQvbXVsdGlwbGUgcGFja2V0IGNoZWNrICovCkBAIC0xNzA1LDE3ICsxNzAyLDkgQEAKIAogCQkvKiBkYXRhIGxlbmd0aCBpcyBsZW4tMSAob25lIGJ5dGUgb2YgbGVuIGlzIHBvcnRfc3RhdHVzKSAqLwogCQktLWxlbjsKLQotCQlsZW4gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbik7CiAJCWlmIChsZW4gPiAwKSB7Ci0JCQkvKiBIb3QgcGF0aCAqLwotCQkJaWYgKGZsYWcgPT0gVFRZX05PUk1BTCkKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuKTsKLQkJCWVsc2UgewotCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJCQlkYXRhW2ldLCBmbGFnKTsKLQkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZml4ZWRfZmxhZyh0dHksIGRhdGEsIGxlbiwKKwkJCQkJCQkJCWZsYWcpOwogCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJfQogCX0KQEAgLTE3NzYsOCArMTc2NSw3IEBACiAKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCXJ0cyA9IDA7Ci0JCWlmIChwb3J0LT5wb3J0LmNvdW50KQotCQkJcnRzID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUzsKKwkJcnRzID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUzsKIAkJCiAJCWlmIChvcGNvZGUgPT0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTKSB7CiAJCQlzcGluX2xvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCmluZGV4IDdkZDBlM2UuLjVmNzQwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC05Myw3ICs5Myw3IEBACiBzdGF0aWMgdm9pZCBlbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKEVNUEVHX1ZFTkRPUl9JRCwgRU1QRUdfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMzQ2LDcgKzM0Niw2IEBACiAJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggNzYzODgyOC4uNmFmMGRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTMzLDEyICszMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CkBAIC04OCwxMCArODgsMTAgQEAKIAogCXVuc2lnbmVkIGludCBsYXRlbmN5OwkJLyogbGF0ZW5jeSBzZXR0aW5nIGluIHVzZSAqLwogCXNwaW5sb2NrX3QgdHhfbG9jazsJLyogc3BpbmxvY2sgZm9yIHRyYW5zbWl0IHN0YXRlICovCi0JdW5zaWduZWQgbG9uZyB0eF9ieXRlczsKIAl1bnNpZ25lZCBsb25nIHR4X291dHN0YW5kaW5nX2J5dGVzOwogCXVuc2lnbmVkIGxvbmcgdHhfb3V0c3RhbmRpbmdfdXJiczsKIAl1bnNpZ25lZCBzaG9ydCBtYXhfcGFja2V0X3NpemU7CisJc3RydWN0IG11dGV4IGNmZ19sb2NrOyAvKiBBdm9pZCBtZXNzIGJ5IHBhcmFsbGVsIGNhbGxzIG9mIGNvbmZpZyBpb2N0bCgpICovCiB9OwogCiAvKiBzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgaXMgdXNlZCBieSBkZXZpY2VzIHJlcXVpcmluZyBzcGVjaWFsIGF0dGVudGlvbi4gKi8KQEAgLTYxNCw2ICs2MTQsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PQ0VBTklDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFRJX1ZJRCwgVFRJX1FMMzU1UF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JNX0NBTlZJRVdfUElEKSB9LAorCXsgVVNCX0RFVklDRShDT05URUNfVklELCBDT05URUNfQ09NMVVTQkhfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTTzlNTDJfUElEKSB9LApAQCAtNzM3LDYgKzczOCwxMCBAQAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgSEFNRUdfSE84MjBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgSEFNRUdfSE84NzBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19HRU5FUklDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIE1KU0dfU1JfUkFESU9fUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19IRF9SQURJT19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX1hNX1JBRElPX1BJRCkgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtODEyLDcgKzgxNyw3IEBACiAJCS5uYW1lID0JCSJmdGRpX3NpbyIsCiAJfSwKIAkuZGVzY3JpcHRpb24gPQkJIkZUREkgVVNCIFNlcmlhbCBEZXZpY2UiLAotCS51c2JfZHJpdmVyID0gCQkmZnRkaV9kcml2ZXIgLAorCS51c2JfZHJpdmVyID0gCQkmZnRkaV9kcml2ZXIsCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2NvbWJpbmVkLAogCS5udW1fcG9ydHMgPQkJMSwKIAkucHJvYmUgPQkJZnRkaV9zaW9fcHJvYmUsCkBAIC04MjgsOCArODMzLDggQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCiAJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAotCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCi0JLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkudGlvY21nZXQgPQkJZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJZnRkaV90aW9jbXNldCwKIAkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKIAkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKIAkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLApAQCAtOTM1LDcgKzk0MCw2IEBACiAJCQkJCQkJdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JY2hhciAqYnVmOwogCXVuc2lnbmVkIHVyYl92YWx1ZTsKIAlpbnQgcnY7CiAKQEAgLTk0NCwxMCArOTQ4LDYgQEAKIAkJcmV0dXJuIDA7CS8qIG5vIGNoYW5nZSAqLwogCX0KIAotCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWNsZWFyICY9IH5zZXQ7CS8qICdzZXQnIHRha2VzIHByZWNlZGVuY2Ugb3ZlciAnY2xlYXInICovCiAJdXJiX3ZhbHVlID0gMDsKIAlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCkBAIC05NjMsOSArOTYzLDcgQEAKIAkJCSAgICAgICBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNULAogCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCSAgICAgICB1cmJfdmFsdWUsIHByaXYtPmludGVyZmFjZSwKLQkJCSAgICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKLQotCWtmcmVlKGJ1Zik7CisJCQkgICAgICAgTlVMTCwgMCwgV0RSX1RJTUVPVVQpOwogCWlmIChydiA8IDApIHsKIAkJZGJnKCIlcyBFcnJvciBmcm9tIE1PREVNX0NUUkwgdXJiOiBEVFIgJXMsIFJUUyAlcyIsCiAJCQkJX19mdW5jX18sCkBAIC0xMTI0LDE2ICsxMTIyLDExIEBACiBzdGF0aWMgaW50IGNoYW5nZV9zcGVlZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JY2hhciAqYnVmOwogCV9fdTE2IHVyYl92YWx1ZTsKIAlfX3UxNiB1cmJfaW5kZXg7CiAJX191MzIgdXJiX2luZGV4X3ZhbHVlOwogCWludCBydjsKIAotCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXVyYl9pbmRleF92YWx1ZSA9IGdldF9mdGRpX2Rpdmlzb3IodHR5LCBwb3J0KTsKIAl1cmJfdmFsdWUgPSAoX191MTYpdXJiX2luZGV4X3ZhbHVlOwogCXVyYl9pbmRleCA9IChfX3UxNikodXJiX2luZGV4X3ZhbHVlID4+IDE2KTsKQEAgLTExNDYsOSArMTEzOSw3IEBACiAJCQkgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1QsCiAJCQkgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1RfVFlQRSwKIAkJCSAgICB1cmJfdmFsdWUsIHVyYl9pbmRleCwKLQkJCSAgICBidWYsIDAsIFdEUl9TSE9SVF9USU1FT1VUKTsKLQotCWtmcmVlKGJ1Zik7CisJCQkgICAgTlVMTCwgMCwgV0RSX1NIT1JUX1RJTUVPVVQpOwogCXJldHVybiBydjsKIH0KIApAQCAtMTE1Niw4ICsxMTQ3LDcgQEAKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JY2hhciBidWZbMV07Ci0JaW50IHJ2ID0gMDsKKwlpbnQgcnY7CiAJaW50IGwgPSBwcml2LT5sYXRlbmN5OwogCiAJaWYgKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpCkBAIC0xMTcwLDggKzExNjAsNyBAQAogCQkJICAgICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNULAogCQkJICAgICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUsCiAJCQkgICAgIGwsIHByaXYtPmludGVyZmFjZSwKLQkJCSAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7Ci0KKwkJCSAgICAgTlVMTCwgMCwgV0RSX1RJTUVPVVQpOwogCWlmIChydiA8IDApCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlVuYWJsZSB0byB3cml0ZSBsYXRlbmN5IHRpbWVyOiAlaVxuIiwgcnYpOwogCXJldHVybiBydjsKQEAgLTExODEsMjQgKzExNzAsMjkgQEAKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JdW5zaWduZWQgc2hvcnQgbGF0ZW5jeSA9IDA7Ci0JaW50IHJ2ID0gMDsKLQorCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgcnY7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCisJYnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAogCQkJICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCiAJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKIAkJCSAgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgICAoY2hhciAqKSAmbGF0ZW5jeSwgMSwgV0RSX1RJTUVPVVQpOwotCi0JaWYgKHJ2IDwgMCkgeworCQkJICAgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKKwlpZiAocnYgPCAwKQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJVbmFibGUgdG8gcmVhZCBsYXRlbmN5IHRpbWVyOiAlaVxuIiwgcnYpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIGxhdGVuY3k7CisJZWxzZQorCQlwcml2LT5sYXRlbmN5ID0gYnVmWzBdOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBydjsKIH0KIAogc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKQEAgLTEyMjksNyArMTIyMyw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdpbmZvLCBzaXplb2YobmV3X3NlcmlhbCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcHJpdi0+Y2ZnX2xvY2spOwogCW9sZF9wcml2ID0gKnByaXY7CiAKIAkvKiBEbyBlcnJvciBjaGVja2luZyBhbmQgcGVybWlzc2lvbiBjaGVja2luZyAqLwpAQCAtMTIzNyw3ICsxMjMxLDcgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJaWYgKCgobmV3X3NlcmlhbC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KIAkJICAgICAocHJpdi0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jZmdfbG9jayk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAJCXByaXYtPmZsYWdzID0gKChwcml2LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfApAQCAtMTI0OCw3ICsxMjQyLDcgQEAKIAogCWlmICgobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gcHJpdi0+YmF1ZF9iYXNlKSAmJgogCSAgICAobmV3X3NlcmlhbC5iYXVkX2Jhc2UgPCA5NjAwKSkgewotCSAgICAJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJnByaXYtPmNmZ19sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjc4LDExICsxMjcyLDExIEBACiAJICAgICAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHx8CiAJICAgICgoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKSAmJgogCSAgICAgKG9sZF9wcml2LmN1c3RvbV9kaXZpc29yICE9IHByaXYtPmN1c3RvbV9kaXZpc29yKSkpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJnByaXYtPmNmZ19sb2NrKTsKIAkJY2hhbmdlX3NwZWVkKHR0eSwgcG9ydCk7CiAJfQogCWVsc2UKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJnByaXYtPmNmZ19sb2NrKTsKIAlyZXR1cm4gMDsKIAogfSAvKiBzZXRfc2VyaWFsX2luZm8gKi8KQEAgLTEzMzgsMjAgKzEzMzIsMjAgQEAKIAkJCQkJX19mdW5jX18pOwogCQl9CiAJfSBlbHNlIGlmICh2ZXJzaW9uIDwgMHgyMDApIHsKLQkJLyogT2xkIGRldmljZS4gIEFzc3VtZSBpdHMgdGhlIG9yaWdpbmFsIFNJTy4gKi8KKwkJLyogT2xkIGRldmljZS4gIEFzc3VtZSBpdCdzIHRoZSBvcmlnaW5hbCBTSU8uICovCiAJCXByaXYtPmNoaXBfdHlwZSA9IFNJTzsKIAkJcHJpdi0+YmF1ZF9iYXNlID0gMTIwMDAwMDAgLyAxNjsKIAkJcHJpdi0+d3JpdGVfb2Zmc2V0ID0gMTsKIAl9IGVsc2UgaWYgKHZlcnNpb24gPCAweDQwMCkgewotCQkvKiBBc3N1bWUgaXRzIGFuIEZUOFUyMzJBTSAob3IgRlQ4VTI0NUFNKSAqLworCQkvKiBBc3N1bWUgaXQncyBhbiBGVDhVMjMyQU0gKG9yIEZUOFUyNDVBTSkgKi8KIAkJLyogKEl0IG1pZ2h0IGJlIGEgQk0gYmVjYXVzZSBvZiB0aGUgaVNlcmlhbE51bWJlciBidWcsCiAJCSAqIGJ1dCBpdCB3aWxsIHN0aWxsIHdvcmsgYXMgYW4gQU0gZGV2aWNlLikgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQ4VTIzMkFNOwogCX0gZWxzZSBpZiAodmVyc2lvbiA8IDB4NjAwKSB7Ci0JCS8qIEFzc3VtZSBpdHMgYW4gRlQyMzJCTSAob3IgRlQyNDVCTSkgKi8KKwkJLyogQXNzdW1lIGl0J3MgYW4gRlQyMzJCTSAob3IgRlQyNDVCTSkgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJCTTsKIAl9IGVsc2UgewotCQkvKiBBc3N1bWUgaXRzIGFuIEZUMjMyUiAgKi8KKwkJLyogQXNzdW1lIGl0J3MgYW4gRlQyMzJSICovCiAJCXByaXYtPmNoaXBfdHlwZSA9IEZUMjMyUkw7CiAJfQogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJEZXRlY3RlZCAlc1xuIiwgZnRkaV9jaGlwX25hbWVbcHJpdi0+Y2hpcF90eXBlXSk7CkBAIC0xMzcxLDcgKzEzNjUsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfZGVzYyA9ICZpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOwogCiAJdW5zaWduZWQgbnVtX2VuZHBvaW50czsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAludW1fZW5kcG9pbnRzID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOwogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJOdW1iZXIgb2YgZW5kcG9pbnRzICVkXG4iLCBudW1fZW5kcG9pbnRzKTsKQEAgLTE0MjMsNyArMTQxNyw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHYgPSBzaW1wbGVfc3RydG91bCh2YWxidWYsIE5VTEwsIDEwKTsKLQlpbnQgcnYgPSAwOworCWludCBydjsKIAogCXByaXYtPmxhdGVuY3kgPSB2OwogCXJ2ID0gd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKQEAgLTE0NDAsOSArMTQzNCw4IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQljaGFyIGJ1ZlsxXTsKIAlpbnQgdiA9IHNpbXBsZV9zdHJ0b3VsKHZhbGJ1ZiwgTlVMTCwgMTApOwotCWludCBydiA9IDA7CisJaW50IHJ2OwogCiAJZGJnKCIlczogc2V0dGluZyBldmVudCBjaGFyID0gJWkiLCBfX2Z1bmNfXywgdik7CiAKQEAgLTE0NTEsOCArMTQ0NCw3IEBACiAJCQkgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1QsCiAJCQkgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1RfVFlQRSwKIAkJCSAgICAgdiwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKLQorCQkJICAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCk7CiAJaWYgKHJ2IDwgMCkgewogCQlkYmcoIlVuYWJsZSB0byB3cml0ZSBldmVudCBjaGFyYWN0ZXI6ICVpIiwgcnYpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE1NTEsOSArMTU0Myw5IEBACiAKIAlrcmVmX2luaXQoJnByaXYtPmtyZWYpOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKKwltdXRleF9pbml0KCZwcml2LT5jZmdfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwotCS8qIFRoaXMgd2lsbCBwdXNoIHRoZSBjaGFyYWN0ZXJzIHRocm91Z2ggaW1tZWRpYXRlbHkgcmF0aGVyCi0JICAgdGhhbiBxdWV1ZSBhIHRhc2sgdG8gZGVsaXZlciB0aGVtICovCisKIAlwcml2LT5mbGFncyA9IEFTWU5DX0xPV19MQVRFTkNZOwogCiAJaWYgKHF1aXJrICYmIHF1aXJrLT5wb3J0X3Byb2JlKQpAQCAtMTU4NSw3ICsxNTc3LDggQEAKIAogCWZ0ZGlfZGV0ZXJtaW5lX3R5cGUocG9ydCk7CiAJZnRkaV9zZXRfbWF4X3BhY2tldF9zaXplKHBvcnQpOwotCXJlYWRfbGF0ZW5jeV90aW1lcihwb3J0KTsKKwlpZiAocmVhZF9sYXRlbmN5X3RpbWVyKHBvcnQpIDwgMCkKKwkJcHJpdi0+bGF0ZW5jeSA9IDE2OwogCWNyZWF0ZV9zeXNmc19hdHRycyhwb3J0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzAsOCArMTYyMyw2IEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZXJpYWwtPmRldjsKIAlpbnQgbGF0ZW5jeSA9IG5kaV9sYXRlbmN5X3RpbWVyOwotCWludCBydiA9IDA7Ci0JY2hhciBidWZbMV07CiAKIAlpZiAobGF0ZW5jeSA9PSAwKQogCQlsYXRlbmN5ID0gMTsKQEAgLTE2NDEsMTAgKzE2MzIsMTEgQEAKIAlkYmcoIiVzIHNldHRpbmcgTkRJIGRldmljZSBsYXRlbmN5IHRvICVkIiwgX19mdW5jX18sIGxhdGVuY3kpOwogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJOREkgZGV2aWNlIHdpdGggYSBsYXRlbmN5IHZhbHVlIG9mICVkIiwgbGF0ZW5jeSk7CiAKLQlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJLyogRklYTUU6IGVycm9ycyBhcmUgbm90IHJldHVybmVkICovCisJdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCQlGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNULAogCQkJCUZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKLQkJCQlsYXRlbmN5LCAwLCBidWYsIDAsIFdEUl9USU1FT1VUKTsKKwkJCQlsYXRlbmN5LCAwLCBOVUxMLCAwLCBXRFJfVElNRU9VVCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MjAsNyArMTcxMiw3IEBACiAJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkgICBmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBtZW1fZmxhZ3MpOwotCWlmIChyZXN1bHQpCisJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVQRVJNKQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CkBAIC0xNzMyLDE2ICsxNzI0LDEwIEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWludCByZXN1bHQgPSAwOwotCWNoYXIgYnVmWzFdOyAvKiBOZWVkZWQgZm9yIHRoZSB1c2JfY29udHJvbF9tc2cgSSB0aGluayAqLworCWludCByZXN1bHQ7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT50eF9ieXRlcyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCiAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKIAogCS8qIE5vIGVycm9yIGNoZWNraW5nIGZvciB0aGlzICh3aWxsIGdldCBlcnJvcnMgbGF0ZXIgYW55d2F5KSAqLwpAQCAtMTc0OSw3ICsxNzM1LDcgQEAKIAl1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJCUZURElfU0lPX1JFU0VUX1JFUVVFU1QsIEZURElfU0lPX1JFU0VUX1JFUVVFU1RfVFlQRSwKIAkJCUZURElfU0lPX1JFU0VUX1NJTywKLQkJCXByaXYtPmludGVyZmFjZSwgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisJCQlwcml2LT5pbnRlcmZhY2UsIE5VTEwsIDAsIFdEUl9USU1FT1VUKTsKIAogCS8qIFRlcm1pb3MgZGVmYXVsdHMgYXJlIHNldCBieSB1c2Jfc2VyaWFsX2luaXQuIFdlIGRvbid0IGNoYW5nZQogCSAgIHBvcnQtPnR0eS0+dGVybWlvcyAtIHRoaXMgd291bGQgbG9zZSBzcGVlZCBzZXR0aW5ncywgZXRjLgpAQCAtMTc3Nyw3ICsxNzYzLDYgQEAKIHN0YXRpYyB2b2lkIGZ0ZGlfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pCiB7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQljaGFyIGJ1ZlsxXTsKIAogCW11dGV4X2xvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJaWYgKCFwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkgewpAQCAtMTc4Niw3ICsxNzcxLDcgQEAKIAkJCSAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwKIAkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKLQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIGJ1ZiwgMCwKKwkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIE5VTEwsIDAsCiAJCQkgICAgV0RSX1RJTUVPVVQpIDwgMCkgewogCQkJICAgIGRldl9lcnIoJnBvcnQtPmRldiwgImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiXG4iKTsKIAkJfQpAQCAtMTg0Nyw3ICsxODMyLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT50eF9vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKLQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0IiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcHJpdi0+dHhfb3V0c3RhbmRpbmdfdXJicysrOwpAQCAtMTkyNyw3ICsxOTEyLDYgQEAKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCQlwcml2LT50eF9vdXRzdGFuZGluZ19ieXRlcyArPSBjb3VudDsKLQkJcHJpdi0+dHhfYnl0ZXMgKz0gY291bnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTIxNTQsOCArMjEzOCw3IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlfX3UxNiB1cmJfdmFsdWUgPSAwOwotCWNoYXIgYnVmWzFdOworCV9fdTE2IHVyYl92YWx1ZTsKIAogCS8qIGJyZWFrX3N0YXRlID0gLTEgdG8gdHVybiBvbiBicmVhaywgYW5kIDAgdG8gdHVybiBvZmYgYnJlYWsgKi8KIAkvKiBzZWUgZHJpdmVycy9jaGFyL3R0eV9pby5jIHRvIHNlZSBpdCB1c2VkICovCkBAIC0yMTcxLDcgKzIxNTQsNyBAQAogCQkJRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCwKIAkJCUZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSwKIAkJCXVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKLQkJCWJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJTlVMTCwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgIgogCQkJIihzdGF0ZSB3YXMgJWQpXG4iLCBfX2Z1bmNfXywgYnJlYWtfc3RhdGUpOwogCX0KQEAgLTIxOTUsNyArMjE3OCw2IEBACiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHRlcm1pb3MtPmNfY2ZsYWc7CiAJX191MTYgdXJiX3ZhbHVlOyAvKiB3aWxsIGhvbGQgdGhlIG5ldyBmbGFncyAqLwotCWNoYXIgYnVmWzFdOyAvKiBQZXJoYXBzIEkgc2hvdWxkIGR5bmFtaWNhbGx5IGFsbG9jIHRoaXM/ICovCiAKIAkvKiBBZGRlZCBmb3IgeG9uL3hvZmYgc3VwcG9ydCAqLwogCXVuc2lnbmVkIGludCBpZmxhZyA9IHRlcm1pb3MtPmNfaWZsYWc7CkBAIC0yMjQ2LDEyICsyMjI4LDEwIEBACiAJfQogCWlmIChjZmxhZyAmIENTSVpFKSB7CiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQljYXNlIENTNTogdXJiX3ZhbHVlIHw9IDU7IGRiZygiU2V0dGluZyBDUzUiKTsgYnJlYWs7Ci0JCWNhc2UgQ1M2OiB1cmJfdmFsdWUgfD0gNjsgZGJnKCJTZXR0aW5nIENTNiIpOyBicmVhazsKIAkJY2FzZSBDUzc6IHVyYl92YWx1ZSB8PSA3OyBkYmcoIlNldHRpbmcgQ1M3Iik7IGJyZWFrOwogCQljYXNlIENTODogdXJiX3ZhbHVlIHw9IDg7IGRiZygiU2V0dGluZyBDUzgiKTsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOFxuIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M3LUNTOFxuIik7CiAJCX0KIAl9CiAKQEAgLTIyNjMsNyArMjI0Myw3IEBACiAJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCwKIAkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCiAJCQkgICAgdXJiX3ZhbHVlICwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgIGJ1ZiwgMCwgV0RSX1NIT1JUX1RJTUVPVVQpIDwgMCkgeworCQkJICAgIE5VTEwsIDAsIFdEUl9TSE9SVF9USU1FT1VUKSA8IDApIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgRkFJTEVEIHRvIHNldCAiCiAJCQkiZGF0YWJpdHMvc3RvcGJpdHMvcGFyaXR5XG4iLCBfX2Z1bmNfXyk7CiAJfQpAQCAtMjI3NSw3ICsyMjU1LDcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCQkgICAgTlVMTCwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJCSIlcyBlcnJvciBmcm9tIGRpc2FibGUgZmxvd2NvbnRyb2wgdXJiXG4iLAogCQkJCV9fZnVuY19fKTsKQEAgLTIzMDEsNyArMjI4MSw3IEBACiAJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAgLCAoRlRESV9TSU9fUlRTX0NUU19IUyB8IHByaXYtPmludGVyZmFjZSksCi0JCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCSAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkJInVyYiBmYWlsZWQgdG8gc2V0IHRvIHJ0cy9jdHMgZmxvdyBjb250cm9sXG4iKTsKIAkJfQpAQCAtMjMzMyw3ICsyMzEzLDcgQEAKIAkJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAogCQkJCQkgICAgdXJiX3ZhbHVlICwgKEZURElfU0lPX1hPTl9YT0ZGX0hTCiAJCQkJCQkJIHwgcHJpdi0+aW50ZXJmYWNlKSwKLQkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCQkgICAgTlVMTCwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewogCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgInVyYiBmYWlsZWQgdG8gc2V0IHRvICIKIAkJCQkJInhvbi94b2ZmIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CkBAIC0yMzQ3LDcgKzIzMjcsNyBAQAogCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsCi0JCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCQkJICAgIE5VTEwsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKIAkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkJCSJ1cmIgZmFpbGVkIHRvIGNsZWFyIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CkBAIC0yMzYxLDIxICsyMzQxLDIyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IGxlbjsKIAlpbnQgcmV0OwogCiAJZGJnKCIlcyBUSU9DTUdFVCIsIF9fZnVuY19fKTsKKworCWJ1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCS8qCisJICogVGhlIDhVMjMyQU0gcmV0dXJucyBhIHR3byBieXRlIHZhbHVlICh0aGUgU0lPIGEgMSBieXRlIHZhbHVlKSBpbgorCSAqIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBpbiBwb2ludC4KKwkgKi8KIAlzd2l0Y2ggKHByaXYtPmNoaXBfdHlwZSkgewogCWNhc2UgU0lPOgotCQkvKiBSZXF1ZXN0IHRoZSBzdGF0dXMgZnJvbSB0aGUgZGV2aWNlICovCi0JCXJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCi0JCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QsCi0JCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKLQkJCSAgIDAsIDAsCi0JCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlsZW4gPSAxOwogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CkBAIC0yMzgzLDI3ICsyMzY0LDMwIEBACiAJY2FzZSBGVDIzMlJMOgogCWNhc2UgRlQyMjMySDoKIAljYXNlIEZUNDIzMkg6Ci0JCS8qIHRoZSA4VTIzMkFNIHJldHVybnMgYSB0d28gYnl0ZSB2YWx1ZSAodGhlIHNpbyBpcyBhIDEgYnl0ZQotCQkgICB2YWx1ZSkgLSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgaW4KLQkJICAgcG9pbnQgKi8KLQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCSAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCi0JCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULAotCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAotCQkJCSAgIDAsIHByaXYtPmludGVyZmFjZSwKLQkJCQkgICBidWYsIDIsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlsZW4gPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CiAJfQogCi0JcmV0dXJuICAoYnVmWzBdICYgRlRESV9TSU9fRFNSX01BU0sgPyBUSU9DTV9EU1IgOiAwKSB8CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCUZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwKKwkJCUZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAorCQkJMCwgcHJpdi0+aW50ZXJmYWNlLAorCQkJYnVmLCBsZW4sIFdEUl9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAoYnVmWzBdICYgRlRESV9TSU9fRFNSX01BU0sgPyBUSU9DTV9EU1IgOiAwKSB8CiAJCShidWZbMF0gJiBGVERJX1NJT19DVFNfTUFTSyA/IFRJT0NNX0NUUyA6IDApIHwKIAkJKGJ1ZlswXSAgJiBGVERJX1NJT19SSV9NQVNLICA/IFRJT0NNX1JJICA6IDApIHwKIAkJKGJ1ZlswXSAgJiBGVERJX1NJT19STFNEX01BU0sgPyBUSU9DTV9DRCAgOiAwKSB8CiAJCXByaXYtPmxhc3RfZHRyX3J0czsKK291dDoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTI1MDgsOCArMjQ5Miw3IEBACiAJcG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBSZXN1Ym1pdCB1cmIgaWYgdGhyb3R0bGVkIGFuZCBvcGVuLiAqLwotCWlmICh3YXNfdGhyb3R0bGVkICYmIHRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQorCWlmICh3YXNfdGhyb3R0bGVkKQogCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCBiMGUwZDY0Li5mZjliZjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMjgsMTMgKzI4LDEzIEBACiAjZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkwJMiAvKiBTZXQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEZURElfU0lPX1NFVF9CQVVEX1JBVEUJMyAvKiBTZXQgYmF1ZCByYXRlICovCiAjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBCTQgLyogU2V0IHRoZSBkYXRhIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcG9ydCAqLwotI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCTUgLyogUmV0cmlldmUgY3VycmVudCB2YWx1ZSBvZiBtb2Rlcm4gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMJNSAvKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlIG9mIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgk2IC8qIFNldCB0aGUgZXZlbnQgY2hhcmFjdGVyICovCiAjZGVmaW5lIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSCTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIJOSAvKiBTZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIJMTAgLyogR2V0IHRoZSBsYXRlbmN5IHRpbWVyICovCiAKLS8qIEludGVyZmFjZSBpbmRpY2llcyBmb3IgRlQyMjMyLCBGVDIyMzJIIGFuZCBGVDQyMzJIIGRldmljZXMqLworLyogSW50ZXJmYWNlIGluZGljZXMgZm9yIEZUMjIzMiwgRlQyMjMySCBhbmQgRlQ0MjMySCBkZXZpY2VzICovCiAjZGVmaW5lIElOVEVSRkFDRV9BCQkxCiAjZGVmaW5lIElOVEVSRkFDRV9CCQkyCiAjZGVmaW5lIElOVEVSRkFDRV9DCQkzCkBAIC0yNzAsNyArMjcwLDcgQEAKICAqICAgQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMGIKICAqICAgYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkwKICAqICAgd1ZhbHVlOiAgICAgICAgIFhvZmYvWG9uCi0gKiAgIHdJbmRleDogICAgICAgICBQcm90b2NvbC9Qb3J0IC0gaEluZGV4IGlzIHByb3RvY2wgLyBsSW5kZXggaXMgcG9ydAorICogICB3SW5kZXg6ICAgICAgICAgUHJvdG9jb2wvUG9ydCAtIGhJbmRleCBpcyBwcm90b2NvbCAvIGxJbmRleCBpcyBwb3J0CiAgKiAgIHdMZW5ndGg6ICAgICAgICAwCiAgKiAgIERhdGE6ICAgICAgICAgICBOb25lCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IGM4OTUxYWUuLjA3MjdlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLwogI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCiAjZGVmaW5lIEZURElfNDIzMkhfUElEIDB4NjAxMSAvKiBRdWFkIGNoYW5uZWwgaGktc3BlZWQgZGV2aWNlICovCi0jZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KKyNkZWZpbmUgRlRESV9TSU9fUElECTB4ODM3MgkvKiBQcm9kdWN0IElkIFNJTyBhcHBsaWNhdGlvbiBvZiA4VTEwMEFYICovCiAjZGVmaW5lIEZURElfMjMyUkxfUElEICAweEZCRkEgIC8qIFByb2R1Y3QgSUQgZm9yIEZUMjMyUkwgKi8KIAogCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lIExNSV9MTTNTX0RFVkVMX0JPQVJEX1BJRAkweGJjZDgKICNkZWZpbmUgTE1JX0xNM1NfRVZBTF9CT0FSRF9QSUQJCTB4YmNkOQogCi0jZGVmaW5lIEZURElfVFVSVEVMSVpFUl9QSUQJMHhCREM4IC8qIEpUQUcvUlMtMjMyIGFkYXB0ZXIgYnkgZWduaXRlIEdtQkggKi8KKyNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21iSCAqLwogCiAvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLwogI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOApAQCAtMTg1LDcgKzE4NSw3IEBACiAjZGVmaW5lIEZURElfRUxWX1RGRDEyOF9QSUQJMHhFMEVDCS8qIEVMViBUZW1wZXJhdHVyLUZldWNodGUtRGF0ZW5sb2dnZXIgVEZEIDEyOCAqLwogI2RlZmluZSBGVERJX0VMVl9GTTNSWF9QSUQJMHhFMEVECS8qIEVMViBNZXNzd2VydHVlYmVydHJhZ3VuZyBGTTMgUlggKi8KICNkZWZpbmUgRlRESV9FTFZfV1M3NzdfUElECTB4RTBFRQkvKiBDb25yYWQgV1MgNzc3ICovCi0jZGVmaW5lIEZURElfRUxWX0VNMTAxMFBDX1BJRAkweEUwRUYJLyogRW5nZXJ5IG1vbml0b3IgRU0gMTAxMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9FTTEwMTBQQ19QSUQJMHhFMEVGCS8qIEVuZXJneSBtb25pdG9yIEVNIDEwMTAgUEMgKi8KICNkZWZpbmUgRlRESV9FTFZfQ1NJOF9QSUQJMHhFMEYwCS8qIENvbXB1dGVyLVNjaGFsdC1JbnRlcmZhY2UgKENTSSA4KSAqLwogI2RlZmluZSBGVERJX0VMVl9FTTEwMDBETF9QSUQJMHhFMEYxCS8qIFBDLURhdGVubG9nZ2VyIGZ1ZXIgRW5lcmdpZW1vbml0b3IgKEVNIDEwMDAgREwpICovCiAjZGVmaW5lIEZURElfRUxWX1BDSzEwMF9QSUQJMHhFMEYyCS8qIFBDLUthYmVsdGVzdGVyIChQQ0sgMTAwKSAqLwpAQCAtMjEyLDggKzIxMiw4IEBACiAgKiBkcml2ZXJzLCBvciBwb3NzaWJseSB0aGUgQ29tZWRpIGRyaXZlcnMgaW4gc29tZSBjYXNlcy4gKi8KICNkZWZpbmUgRlRESV9FTFZfQ0xJNzAwMF9QSUQJMHhGQjU5CS8qIENvbXB1dGVyLUxpZ2h0LUludGVyZmFjZSAoQ0xJIDcwMDApICovCiAjZGVmaW5lIEZURElfRUxWX1BQUzczMzBfUElECTB4RkI1QwkvKiBQcm9jZXNzb3ItUG93ZXItU3VwcGx5IChQUFMgNzMzMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVEZNMTAwX1BJRAkweEZCNUQJLyogVGVtcGVyYXJ0dXItRmV1Y2h0ZSBNZXNzZ2VyYWV0IChURk0gMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VyaCAoVURGIDc3KSAqLworI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhdHVyLUZldWNodGUtTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVURGNzdfUElECTB4RkI1RQkvKiBVU0IgRENGIEZ1bmt1aHIgKFVERiA3NykgKi8KICNkZWZpbmUgRlRESV9FTFZfVUlPODhfUElECTB4RkI1RgkvKiBVU0ItSS9PIEludGVyZmFjZSAoVUlPIDg4KSAqLwogCiAvKgpAQCAtMzIwLDcgKzMyMCw3IEBACiAKIC8qCiAgKiA0Ti1HQUxBWFkuREUgUElEcyBmb3IgQ0FOLVVTQiwgVVNCLVJTMjMyLCBVU0ItUlM0MjIsIFVTQi1SUzQ4NSwKLSAqIFVTQi1UVFkgYWN0aXYsIFVTQi1UVFkgcGFzc2l2LiAgU29tZSBQSURzIGFyZSB1c2VkIGJ5IHNldmVyYWwgZGV2aWNlcworICogVVNCLVRUWSBha3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCiAgKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgogICovCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMApAQCAtMzMwLDEwICszMzAsMTAgQEAKICAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCiAgKi8KICNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLwotI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5CS8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QQkvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIJLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDCS8qIExpbnggZnV0dXJlIGRldmljZSAqLwogCiAvKgogICogT2NlYW5pYyBwcm9kdWN0IGlkcwpAQCAtNDk0LDYgKzQ5NCwxMyBAQAogI2RlZmluZSBSQVRPQ19QUk9EVUNUX0lEX1VTQjYwRgkweGIwMjAKIAogLyoKKyAqIENvbnRlYyBwcm9kdWN0cyAoaHR0cDovL3d3dy5jb250ZWMuY29tKQorICogU3VibWl0dGVkIGJ5IERhbmllbCBTYW5nb3JyaW4KKyAqLworI2RlZmluZSBDT05URUNfVklECQkweDA2Q0UJLyogVmVuZG9yIElEICovCisjZGVmaW5lIENPTlRFQ19DT00xVVNCSF9QSUQJMHg4MzExCS8qIENPTS0xKFVTQilIICovCisKKy8qCiAgKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgogICovCiAjZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KQEAgLTY0Miw3ICs2NDksNyBAQAogI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KICNkZWZpbmUgRkFMQ09NX1NBTUJBX1BJRAkweDAwMDUJLyogRmFsY29tIFNhbWJhIFVTQiBHUFJTIG1vZGVtICovCiAKLS8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAgKi8KKy8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAqLwogI2RlZmluZSBMQVJTRU5CUlVTR0FBUkRfVklECQkweDBGRDgKICNkZWZpbmUgTEJfQUxUSVRSQUNLX1BJRAkJMHgwMDAxCiAKQEAgLTk3MSw3ICs5NzgsNyBAQAogI2RlZmluZSBBTFRJMl9OM19QSUQJMHg2MDAxCS8qIE5lcHR1bmUgMyAqLwogCiAvKgotICogRHJlc2RlbiBFbGVrdHJvbmljIFNlbnNvciBUZXJtaW5hbCBCb2FyZAorICogRHJlc2RlbiBFbGVrdHJvbmlrIFNlbnNvciBUZXJtaW5hbCBCb2FyZAogICovCiAjZGVmaW5lIERFX1ZJRAkJCTB4MWNmMSAvKiBWZW5kb3IgSUQgKi8KICNkZWZpbmUgU1RCX1BJRAkJCTB4MDAwMSAvKiBTZW5zb3IgVGVybWluYWwgQm9hcmQgKi8KQEAgLTEwMDIsMyArMTAwOSwxMSBAQAogI2RlZmluZSBFVk9fOFUyMzJBTV9QSUQJMHgwMkZGCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ00yIChGVDIzMkFNKSovCiAjZGVmaW5lIEVWT19IWUJSSURfUElECQkweDAzMDIJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEIChGVDIzMkJNKSovCiAjZGVmaW5lIEVWT19SQ000X1BJRAkJMHgwMzAzCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAqLworCisvKgorICogTUpTIEdhZGdldHMgSEQgUmFkaW8gLyBYTSBSYWRpbyAvIFNpcml1cyBSYWRpbyBpbnRlcmZhY2VzICh1c2luZyBWSUQgMHgwNDAzKQorICovCisjZGVmaW5lIE1KU0dfR0VORVJJQ19QSUQJMHg5Mzc4CisjZGVmaW5lIE1KU0dfU1JfUkFESU9fUElECTB4OTM3OQorI2RlZmluZSBNSlNHX1hNX1JBRElPX1BJRAkweDkzN0EKKyNkZWZpbmUgTUpTR19IRF9SQURJT19QSUQJMHg5MzdDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z1bnNvZnQuYwppbmRleCBkMzBmNzM2Li5lMjFjZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MTQwNCwgMHhjZGRjKSB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwppbmRleCA1YWM5MDBlLi5hNDJiMjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJLyogdGhlIHNhbWUgZGV2aWNlIGlkIHNlZW1zIHRvIGJlIHVzZWQgYnkgYWxsCiAJICAgdXNiIGVuYWJsZWQgR1BTIGRldmljZXMgKi8KIAl7IFVTQl9ERVZJQ0UoR0FSTUlOX1ZFTkRPUl9JRCwgMykgfSwKQEAgLTI3MSw3ICsyNzEsNiBAQAogCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsCiAJCQkJCV9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgYWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggODM0NDNkNi4uODlmYWMzNjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKQEAgLTQxLDcgKzQyLDcgQEAKIAogLyogd2Ugd2FudCB0byBsb29rIGF0IGFsbCBkZXZpY2VzLCBhcyB0aGUgdmVuZG9yL3Byb2R1Y3QgaWQgY2FuIGNoYW5nZQogICogZGVwZW5kaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX3NlcmlhbF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX3NlcmlhbF9pZHNbXSA9IHsKIAl7LmRyaXZlcl9pbmZvID0gNDJ9LAogCXt9CiB9OwpAQCAtMTk0LDcgKzE5NSw3IEBACiAJCWlmIChwb3J0LT51cmJzX2luX2ZsaWdodCA+CiAJCSAgICBwb3J0LT5zZXJpYWwtPnR5cGUtPm1heF9pbl9mbGlnaHRfdXJicykgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBid3JpdGU7CiAJCX0KIAkJcG9ydC0+dHhfYnl0ZXNfZmxpZ2h0ICs9IHRvd3JpdGU7CkBAIC01ODUsNyArNTg2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydC0+cG9ydC5jb3VudCkKKwkJaWYgKCF0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwb3J0LT5yZWFkX3VyYikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKaW5kZXggNDMxMzI5Mi4uODA5Mzc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIEhQX1ZFTkRPUl9JRCAweDAzZjAKICNkZWZpbmUgSFA0OUdQX1BST0RVQ1RfSUQgMHgwMTIxCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShIUF9WRU5ET1JfSUQsIEhQNDlHUF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCmluZGV4IGI5Nzk2MGEuLjNlZjhkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCkBAIC0zNjQsNDIgKzM2NCw2IEBACiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKiAgR2V0IHN0cmluZyBkZXNjcmlwdG9yIGZyb20gZGV2aWNlCQkJCQkqCi0gKgkJCQkJCQkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGdldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBjaGFyICpzdHJpbmcsIGludCBidWZsZW4pCi17Ci0Jc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOwotCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOwotCi0JZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fZnVuY19fLCBJZCk7Ci0KLQlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLAotCQkJCQkmU3RyaW5nRGVzYywgc2l6ZW9mKFN0cmluZ0Rlc2MpKSkKLQkJcmV0dXJuIDA7Ci0KLQlwU3RyaW5nRGVzYyA9IGttYWxsb2MoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBTdHJpbmdEZXNjKQotCQlyZXR1cm4gMDsKLQotCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsCi0JCQkJCXBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGgpKSB7Ci0JCWtmcmVlKHBTdHJpbmdEZXNjKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdW5pY29kZV90b19hc2NpaShzdHJpbmcsIGJ1ZmxlbiwKLQkJCQlwU3RyaW5nRGVzYy0+d0RhdGEsIHBTdHJpbmdEZXNjLT5iTGVuZ3RoLzIpOwotCi0Ja2ZyZWUocFN0cmluZ0Rlc2MpOwotCWRiZygiJXMgLSBVU0IgU3RyaW5nICVzIiwgX19mdW5jX18sIHN0cmluZyk7Ci0JcmV0dXJuIHN0cmxlbihzdHJpbmcpOwotfQotCi0KICNpZiAwCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjAwNyw3ICsxOTcxLDcgQEAKIAkJCXJldHVybjsKIAogCQljYXNlIElPU1BfRVhUX1NUQVRVU19SWF9DSEVDS19SU1A6Ci0JCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT1cbiIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyk7CisJCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT0iLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMpOwogCQkJLyogUG9ydC0+UnhDaGVja1JzcCA9IHRydWU7ICovCiAJCQlyZXR1cm47CiAJCX0KQEAgLTIwNzUsNyArMjAzOSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIFVucmVjb2duaXplZCBJT1NQIHN0YXR1cyBjb2RlICV1XG4iLCBfX2Z1bmNfXywgY29kZSk7CisJCWRiZygiJXMgLSBVbnJlY29nbml6ZWQgSU9TUCBzdGF0dXMgY29kZSAldSIsIF9fZnVuY19fLCBjb2RlKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybjsKQEAgLTIwOTEsMTggKzIwNTUsMTMgQEAKIHsKIAlpbnQgY250OwogCi0JZG8gewotCQljbnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbmd0aCk7Ci0JCWlmIChjbnQgPCBsZW5ndGgpIHsKLQkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAotCQkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKLQkJCWlmIChjbnQgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgY250KTsKLQkJZGF0YSArPSBjbnQ7Ci0JCWxlbmd0aCAtPSBjbnQ7Ci0JfSB3aGlsZSAobGVuZ3RoID4gMCk7CisJY250ID0gdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGxlbmd0aCk7CisJaWYgKGNudCA8IGxlbmd0aCkgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKKwkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKKwl9CisJZGF0YSArPSBjbnQ7CisJbGVuZ3RoIC09IGNudDsKIAogCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiB9CkBAIC0yNTMwLDcgKzI0ODksNyBAQAogCiAJCSpkaXZpc29yID0gY3VzdG9tOwogCi0JCWRiZygiJXMgLSBCYXVkICVkID0gJWRcbiIsIF9fZnVuY19fLCBiYXVkcmF0ZSwgY3VzdG9tKTsKKwkJZGJnKCIlcyAtIEJhdWQgJWQgPSAlZCIsIF9fZnVuY19fLCBiYXVkcmF0ZSwgY3VzdG9tKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTE1LDcgKzI4NzQsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfTk9ORToKLQkJCWRiZyAgICAgKCJObyBkb3dubG9hZCBmaWxlIHNwZWNpZmllZCwgc2tpcHBpbmcgZG93bmxvYWRcbiIpOworCQkJZGJnKCJObyBkb3dubG9hZCBmaWxlIHNwZWNpZmllZCwgc2tpcHBpbmcgZG93bmxvYWQiKTsKIAkJCXJldHVybjsKIAogCQlkZWZhdWx0OgpAQCAtMjk5NywxMCArMjk1NiwxMiBAQAogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBlZGdlX3NlcmlhbCk7CiAKIAkvKiBnZXQgdGhlIG5hbWUgZm9yIHRoZSBkZXZpY2UgZnJvbSB0aGUgZGV2aWNlICovCi0JaSA9IGdldF9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwlpID0gdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAogCSAgICAmZWRnZV9zZXJpYWwtPm5hbWVbMF0sIE1BWF9OQU1FX0xFTisxKTsKKwlpZiAoaSA8IDApCisJCWkgPSAwOwogCWVkZ2Vfc2VyaWFsLT5uYW1lW2krK10gPSAnICc7Ci0JZ2V0X3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKKwl1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LAogCSAgICAmZWRnZV9zZXJpYWwtPm5hbWVbaV0sIE1BWF9OQU1FX0xFTisyIC0gaSk7CiAKIAlkZXZfaW5mbygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIGRldGVjdGVkXG4iLCBlZGdlX3NlcmlhbC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggOTI0MWQzMS4uZmViNTZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBJT19UQUJMRVNfSAogI2RlZmluZSBJT19UQUJMRVNfSAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMnBvcnRfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMnBvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkkpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMSkgfSwKQEAgLTIzLDcgKzIzLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF80cG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF80cG9ydF9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9SQVBJRFBPUlRfNCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQpIH0sCkBAIC0zNyw3ICszNyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfOHBvcnRfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfOHBvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFUpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJKSB9LApAQCAtNDcsNyArNDcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIEVwaWNfcG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBFcGljX3BvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OQ1IsIE5DUl9ERVZJQ0VfSURfRVBJQ18wMjAyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05DUiwgTkNSX0RFVklDRV9JRF9FUElDXzAyMDMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTkNSLCBOQ1JfREVWSUNFX0lEX0VQSUNfMDMxMCkgfSwKQEAgLTYwLDcgKzYwLDcgQEAKIH07CiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX1JBUElEUE9SVF80KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggZDRjYzBmNy4uYWE4NzZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yQykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkkpIH0sCkBAIC0xNzcsNyArMTc3LDcgQEAKIH07CiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCkBAIC00MTMsMTEgKzQxMywxOCBAQAogewogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwotCV9fdTggdGVtcDsKKwl1OCAqdGVtcDsKIAogCS8qIE11c3QgZG8gYSByZWFkIGJlZm9yZSB3cml0ZSAqLwogCWlmICghc2VyaWFsLT5UaVJlYWRJMkMpIHsKLQkJc3RhdHVzID0gcmVhZF9ib290X21lbShzZXJpYWwsIDAsIDEsICZ0ZW1wKTsKKwkJdGVtcCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGVtcCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzdGF0dXMgPSByZWFkX2Jvb3RfbWVtKHNlcmlhbCwgMCwgMSwgdGVtcCk7CisJCWtmcmVlKHRlbXApOwogCQlpZiAoc3RhdHVzKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC05MzUsMzcgKzk0Miw0NyBAQAogc3RhdGljIGludCBpMmNfdHlwZV9ib290bW9kZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHN0YXR1czsKLQlfX3U4IGRhdGE7CisJdTggKmRhdGE7CisKKwlkYXRhID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCSIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogVHJ5IHRvIHJlYWQgdHlwZSAyICovCiAJc3RhdHVzID0gdGlfdnJlYWRfc3luYyhzZXJpYWwtPnNlcmlhbC0+ZGV2LCBVTVBDX01FTU9SWV9SRUFELAotCQkJCURUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJLCAwLCAmZGF0YSwgMHgwMSk7CisJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUksIDAsIGRhdGEsIDB4MDEpOwogCWlmIChzdGF0dXMpCiAJCWRiZygiJXMgLSByZWFkIDIgc3RhdHVzIGVycm9yID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAllbHNlCi0JCWRiZygiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7Ci0JaWYgKCghc3RhdHVzKSAmJiAoZGF0YSA9PSBVTVA1MTUyIHx8IGRhdGEgPT0gVU1QMzQxMCkpIHsKKwkJZGJnKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCAqZGF0YSk7CisJaWYgKCghc3RhdHVzKSAmJiAoKmRhdGEgPT0gVU1QNTE1MiB8fCAqZGF0YSA9PSBVTVAzNDEwKSkgewogCQlkYmcoIiVzIC0gUk9NX1RZUEVfSUkiLCBfX2Z1bmNfXyk7CiAJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRyeSB0byByZWFkIHR5cGUgMyAqLwogCXN0YXR1cyA9IHRpX3ZyZWFkX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwgVU1QQ19NRU1PUllfUkVBRCwKLQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksIDAsCSZkYXRhLCAweDAxKTsKKwkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksIDAsCWRhdGEsIDB4MDEpOwogCWlmIChzdGF0dXMpCiAJCWRiZygiJXMgLSByZWFkIDMgc3RhdHVzIGVycm9yID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAllbHNlCi0JCWRiZygiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7Ci0JaWYgKCghc3RhdHVzKSAmJiAoZGF0YSA9PSBVTVA1MTUyIHx8IGRhdGEgPT0gVU1QMzQxMCkpIHsKKwkJZGJnKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCAqZGF0YSk7CisJaWYgKCghc3RhdHVzKSAmJiAoKmRhdGEgPT0gVU1QNTE1MiB8fCAqZGF0YSA9PSBVTVAzNDEwKSkgewogCQlkYmcoIiVzIC0gUk9NX1RZUEVfSUlJIiwgX19mdW5jX18pOwogCQlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUlJOwotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJfQogCiAJZGJnKCIlcyAtIFVua25vd24iLCBfX2Z1bmNfXyk7CiAJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOwotCXJldHVybiAtRU5PREVWOworCXN0YXR1cyA9IC1FTk9ERVY7CitvdXQ6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBidWxrX3hmZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdm9pZCAqYnVmZmVyLApAQCAtMTExMyw3ICsxMTMwLDcgQEAKIAkJCQlJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDLCByb21fZGVzYyk7CiAJCWlmIChzdGFydF9hZGRyZXNzICE9IDApIHsKIAkJCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV92ZXJzaW9uOwotCQkJX191OCByZWNvcmQ7CisJCQl1OCAqcmVjb3JkOwogCiAJCQlkYmcoIiVzIC0gRm91bmQgVHlwZSBGSVJNV0FSRSAoVHlwZSAyKSByZWNvcmQiLAogCQkJCQkJCQlfX2Z1bmNfXyk7CkBAIC0xMTY1LDYgKzExODIsMTUgQEAKIAkJCQkgICAgT3BlcmF0aW9uYWxNYWpvclZlcnNpb24sCiAJCQkJICAgIE9wZXJhdGlvbmFsTWlub3JWZXJzaW9uKTsKIAorCQkJCXJlY29yZCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFyZWNvcmQpIHsKKwkJCQkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJCQkJa2ZyZWUoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0KIAkJCQkvKiBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0CiAJCQkJICogY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4gVGhpcwogCQkJCSAqIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4KQEAgLTExNzcsMTMgKzEyMDMsMTQgQEAKIAkJCQkgKiBmaXJtd2FyZSB3aWxsIHVwZGF0ZSB0aGUgcmVjb3JkIHR5cGUgZnJvbQogCQkJCSAqIDB4ZjIgdG8gMHgwMi4KIAkJCQkgKi8KLQkJCQlyZWNvcmQgPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LOworCQkJCSpyZWNvcmQgPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LOwogCiAJCQkJLyogQ2hhbmdlIHRoZSBJMkMgRmlybXdhcmUgcmVjb3JkIHR5cGUgdG8KIAkJCQkgICAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlICovCiAJCQkJc3RhdHVzID0gd3JpdGVfcm9tKHNlcmlhbCwgc3RhcnRfYWRkcmVzcywKLQkJCQkJCXNpemVvZihyZWNvcmQpLAkmcmVjb3JkKTsKKwkJCQkJCXNpemVvZigqcmVjb3JkKSwgcmVjb3JkKTsKIAkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlKHJlY29yZCk7CiAJCQkJCWtmcmVlKGZpcm13YXJlX3ZlcnNpb24pOwogCQkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwpAQCAtMTE5NiwxOSArMTIyMywyMSBAQAogCQkJCSAqLwogCQkJCXN0YXR1cyA9IHJlYWRfcm9tKHNlcmlhbCwKIAkJCQkJCQlzdGFydF9hZGRyZXNzLAotCQkJCQkJCXNpemVvZihyZWNvcmQpLAotCQkJCQkJCSZyZWNvcmQpOworCQkJCQkJCXNpemVvZigqcmVjb3JkKSwKKwkJCQkJCQlyZWNvcmQpOwogCQkJCWlmIChzdGF0dXMpIHsKKwkJCQkJa2ZyZWUocmVjb3JkKTsKIAkJCQkJa2ZyZWUoZmlybXdhcmVfdmVyc2lvbik7CiAJCQkJCWtmcmVlKHJvbV9kZXNjKTsKIAkJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJCXJldHVybiBzdGF0dXM7CiAJCQkJfQogCi0JCQkJaWYgKHJlY29yZCAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LKSB7CisJCQkJaWYgKCpyZWNvcmQgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSykgewogCQkJCQlkZXZfZXJyKGRldiwKIAkJCQkJCSIlcyAtIGVycm9yIHJlc2V0dGluZyBkZXZpY2VcbiIsCiAJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWtmcmVlKHJlY29yZCk7CiAJCQkJCWtmcmVlKGZpcm13YXJlX3ZlcnNpb24pOwogCQkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwpAQCAtMTIyNiw2ICsxMjU1LDcgQEAKIAkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCiAJCQkJLyogcmV0dXJuIGFuIGVycm9yIG9uIHB1cnBvc2UuICovCisJCQkJa2ZyZWUocmVjb3JkKTsKIAkJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKIAkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CkBAIC0xNjg2LDcgKzE3MTYsNyBAQAogCWNhc2UgVElVTVBfSU5URVJSVVBUX0NPREVfTVNSOgkvKiBNU1IgKi8KIAkJLyogQ29weSBNU1IgZnJvbSBVTVAgKi8KIAkJbXNyID0gZGF0YVsxXTsKLQkJZGJnKCIlcyAtID09PT09IFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMnggPT09PT09XG4iLAorCQlkYmcoIiVzIC0gPT09PT0gUG9ydCAldSBNU1IgU3RhdHVzID0gJTAyeCA9PT09PT0iLAogCQkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgbXNyKTsKIAkJaGFuZGxlX25ld19tc3IoZWRnZV9wb3J0LCBtc3IpOwogCQlicmVhazsKQEAgLTE3OTAsNyArMTgyMCw2IEBACiB7CiAJaW50IHF1ZXVlZDsKIAotCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuZ3RoKTsKIAlxdWV1ZWQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKIAlpZiAocXVldWVkIDwgbGVuZ3RoKQogCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGQ2MjMxYzM4Li4zZmVhOTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTc0Nyw3ICs3NDcsNiBAQAogCiAJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJYnl0ZXNfaW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDcyN2QzMjMuLmUxZDA3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAjZGVmaW5lIElQV19XQU5UU19UT19TRU5ECTB4MzAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9pcHdfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lwd19pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoSVBXX1ZJRCwgSVBXX1BJRCkgfSwKIAl7IH0sCiB9OwpAQCAtMTcyLDcgKzE3Miw2IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwppbmRleCA5NWQ4ZDI2Yi4uNGEwZjUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiBzdGF0aWMgdTggaXJfeGJvZjsKIHN0YXRpYyB1OCBpcl9hZGRfYm9mOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXJfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcl9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDA1MGYsIDB4MDE4MCkgfSwJCS8qIEtDIFRlY2hub2xvZ3ksIEtDLTE4MCAqLwogCXsgVVNCX0RFVklDRSgweDA4ZTksIDB4MDEwMCkgfSwJCS8qIFhUTkRBY2Nlc3MgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOWM0LCAweDAwMTEpIH0sCQkvKiBBQ1RpU3lzIEFDVC1JUjIwMDBVICovCkBAIC00NDUsMTEgKzQ0NSw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCWRiZygiJXMgLSBwb3J0IGNsb3NlZC4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDogLyogU3VjY2Vzc2Z1bCAqLwogCQkvKgpAQCAtNDYyLDEwICs0NTcsOCBAQAogCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAogCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JCWlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpKSB7Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSsxLCB1cmItPmFjdHVhbF9sZW5ndGggLSAxKTsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCX0KKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGErMSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCmluZGV4IGU2ZTAyYjEuLjQzZjEzY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkluZmluaXR5IFVTQiBVbmxpbWl0ZWQgUGhvZW5peCBkcml2ZXIiCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoSVVVX1VTQl9WRU5ET1JfSUQsIElVVV9VU0JfUFJPRFVDVF9JRCl9LAogCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCBmOGM0YjA3Li4yOTcxNjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTQ2NCwxMyArNDY0LDkgQEAKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIgIT0gMCkKLQkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLAotCQkJCQlfX2Z1bmNfXywgZXJyKTsKLQl9Ci0JcmV0dXJuOworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciAhPSAwKQorCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19mdW5jX18sIGVycik7CiB9CiAKIC8qIE91dGRhdCBoYW5kbGluZyBpcyBjb21tb24gZm9yIGFsbCBkZXZpY2VzICovCkBAIC00ODMsOCArNDc5LDcgQEAKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJZGJnKCIlcyAtIHVyYiAlZCIsIF9fZnVuY19fLCB1cmIgPT0gcF9wcml2LT5vdXRfdXJic1sxXSk7CiAKLQlpZiAocG9ydC0+cG9ydC5jb3VudCkKLQkJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7CisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkCXVzYTI2X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTYxNSwxMiArNjEwLDEwIEBACiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlpZiAocG9ydC0+cG9ydC5jb3VudCkgewotCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJCWlmIChlcnIgIT0gMCkKLQkJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwKLQkJCQkJCQkJX19mdW5jX18sIGVycik7Ci0JCX0KKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVyciAhPSAwKQorCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCisJCQkJCQkJX19mdW5jX18sIGVycik7CiAJCXBfcHJpdi0+aW5fZmxpcCBePSAxOwogCiAJCXVyYiA9IHBfcHJpdi0+aW5fdXJic1twX3ByaXYtPmluX2ZsaXBdOwpAQCAtODU2LDEyICs4NDksOSBAQAogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciAhPSAwKQotCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJCQkJX19mdW5jX18sIGVycik7Ci0JfQorCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciAhPSAwKQorCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19mdW5jX18sIGVycik7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYTQ5d2dfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtOTA0LDExICs4OTQsNyBAQAogCQkJCS8qIG5vIGVycm9yIG9uIGFueSBieXRlICovCiAJCQkJaSsrOwogCQkJCWZvciAoeCA9IDE7IHggPCBsZW4gOyArK3gpCi0JCQkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQotCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJCQlkYXRhW2krK10sIDApOwotCQkJCQllbHNlCi0JCQkJCQlpKys7CisJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpKytdLCAwKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBzb21lIGJ5dGVzIGhhZCBlcnJvcnMsIGV2ZXJ5IGJ5dGUgaGFzIHN0YXR1cwpAQCAtOTIyLDE0ICs5MDgsMTIgQEAKIAkJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKIAkJCQkJCWZsYWcgfD0gVFRZX1BBUklUWTsKIAkJCQkJLyogWFhYIHNob3VsZCBoYW5kbGUgYnJlYWsgKDB4MTApICovCi0JCQkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQotCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAorCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCiAJCQkJCQkJZGF0YVtpKzFdLCBmbGFnKTsKIAkJCQkJaSArPSAyOwogCQkJCX0KIAkJCX0KLQkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAl9CkBAIC0xMDEzLDEzICs5OTcsOSBAQAogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciAhPSAwKQotCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJCQkJX19mdW5jX18sIGVycik7Ci0JfQotCXJldHVybjsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwogfQogCiAKQEAgLTI0MTgsOCArMjM5OCw3IEBACiAJCW1zZy5wb3J0RW5hYmxlZCA9IDA7CiAJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLwogCWVsc2UgewotCQlpZiAocG9ydC0+cG9ydC5jb3VudCkKLQkJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CisJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CiAJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKaW5kZXggMzA3NzFlNS4uYmYzMjk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCkBAIC00NTYsNyArNDU2LDcgQEAKIAlOVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5faWRzX2NvbWJpbmVkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl9pZHNfY29tYmluZWRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOV9wcmVfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkKSB9LApAQCAtNDk3LDcgKzQ5Nyw3IEBACiB9OwogCiAvKiB1c2JfZGV2aWNlX2lkIHRhYmxlIGZvciB0aGUgcHJlLWZpcm13YXJlIGRvd25sb2FkIGtleXNwYW4gZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fcHJlX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fcHJlX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXFpX3ByZV9wcm9kdWN0X2lkKSB9LApAQCAtNTEzLDcgKzUxMyw3IEBACiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8xcG9ydF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzFwb3J0X2lkc1tdID0gewogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcm9kdWN0X2lkKSB9LApAQCAtNTI0LDcgKzUyNCw3IEBACiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8ycG9ydF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzJwb3J0X2lkc1tdID0gewogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkKSB9LApAQCAtNTMyLDcgKzUzMiw3IEBACiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl80cG9ydF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzRwb3J0X2lkc1tdID0gewogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3bGNfcHJvZHVjdF9pZCl9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdnX3Byb2R1Y3RfaWQpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggMTI5NmEwOS4uMTg1ZmU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogI2RlZmluZSBFTlRSRUdSQV9WRU5ET1JfSUQJCTB4MTY0NQogI2RlZmluZSBFTlRSRUdSQV9GQUtFX0lECQkweDgwOTMKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAjaWZkZWYgS0VZU1BBTgogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwgS0VZU1BBTl9QREFfRkFLRV9JRCkgfSwKICNlbmRpZgpAQCAtMTQ3LDIwICsxNDcsMjAgQEAKIAkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9zdGRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCiAjaWZkZWYgS0VZU1BBTgotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2UgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZmFrZVtdID0gewogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwgS0VZU1BBTl9QREFfRkFLRV9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKICNlbmRpZgogCiAjaWZkZWYgWElSQ09NCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZmFrZV94aXJjb20gW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZmFrZV94aXJjb21bXSA9IHsKIAl7IFVTQl9ERVZJQ0UoWElSQ09NX1ZFTkRPUl9JRCwgWElSQ09NX0ZBS0VfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEVOVFJFR1JBX1ZFTkRPUl9JRCwgRU5UUkVHUkFfRkFLRV9JRCkgfSwKIAl7IH0KQEAgLTQyOSwxMyArNDI5LDIwIEBACiAJCQkJICAgICAgdW5zaWduZWQgY2hhciAqdmFsdWUpCiB7CiAJaW50IHJjOwotCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwl1OCAqZGF0YTsKKworCWRhdGEgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgMywgLyogZ2V0IHBpbnMgKi8KIAkJCSAgICAgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9JTlRFUkZBQ0V8VVNCX0RJUl9JTiwKLQkJCSAgICAgMCwgMCwgJmRhdGEsIDEsIDIwMDApOworCQkJICAgICAwLCAwLCBkYXRhLCAxLCAyMDAwKTsKIAlpZiAocmMgPj0gMCkKLQkJKnZhbHVlID0gZGF0YTsKKwkJKnZhbHVlID0gKmRhdGE7CisKKwlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU0Myw3ICs1NTAsMTQgQEAKIAkgICBkZXZpY2UgaG93IG11Y2ggcm9vbSBpdCByZWFsbHkgaGFzLiAgVGhpcyBpcyBkb25lIG9ubHkgb24KIAkgICBzY2hlZHVsZXIgdGltZSwgc2luY2UgdXNiX2NvbnRyb2xfbXNnKCkgc2xlZXBzLiAqLwogCWlmIChjb3VudCA+IHByaXYtPnR4X3Jvb20gJiYgIWluX2ludGVycnVwdCgpKSB7Ci0JCXVuc2lnbmVkIGNoYXIgcm9vbTsKKwkJdTggKnJvb207CisKKwkJcm9vbSA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcm9vbSkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKIAkJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCiAJCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSAgICAgNiwgLyogd3JpdGVfcm9vbSAqLwpAQCAtNTUxLDkgKzU2NSwxNCBAQAogCQkJCSAgICAgfCBVU0JfRElSX0lOLAogCQkJCSAgICAgMCwgLyogdmFsdWU6IDAgbWVhbnMgInJlbWFpbmluZyByb29tIiAqLwogCQkJCSAgICAgMCwgLyogaW5kZXggKi8KLQkJCQkgICAgICZyb29tLAorCQkJCSAgICAgcm9vbSwKIAkJCQkgICAgIDEsCiAJCQkJICAgICAyMDAwKTsKKwkJaWYgKHJjID4gMCkgeworCQkJZGJnKCIgcm9vbXF1ZXJ5IHNheXMgJWQiLCAqcm9vbSk7CisJCQlwcml2LT50eF9yb29tID0gKnJvb207CisJCX0KKwkJa2ZyZWUocm9vbSk7CiAJCWlmIChyYyA8IDApIHsKIAkJCWRiZygiIHJvb21xdWVyeSBmYWlsZWQiKTsKIAkJCWdvdG8gZXhpdDsKQEAgLTU2Myw4ICs1ODIsNiBAQAogCQkJcmMgPSAtRUlPOyAvKiBkZXZpY2UgZGlkbid0IHJldHVybiBhbnkgZGF0YSAqLwogCQkJZ290byBleGl0OwogCQl9Ci0JCWRiZygiIHJvb21xdWVyeSBzYXlzICVkIiwgcm9vbSk7Ci0JCXByaXYtPnR4X3Jvb20gPSByb29tOwogCX0KIAlpZiAoY291bnQgPiBwcml2LT50eF9yb29tKSB7CiAJCS8qIHdlJ3JlIGFib3V0IHRvIGNvbXBsZXRlbHkgZmlsbCB0aGUgVHggYnVmZmVyLCBzbwpAQCAtNjg0LDE4ICs3MDEsMjIgQEAKIAkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXVuc2lnbmVkIGNoYXIgcm9vbTsKKwl1OCAqcm9vbTsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OwogCiAJLyogZmluZCBvdXQgaG93IG11Y2ggcm9vbSBpcyBpbiB0aGUgVHggcmluZyAqLworCXJvb20gPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghcm9vbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgNiwgLyogd3JpdGVfcm9vbSAqLwogCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFCiAJCQkgICAgIHwgVVNCX0RJUl9JTiwKIAkJCSAgICAgMCwgLyogdmFsdWUgKi8KIAkJCSAgICAgMCwgLyogaW5kZXggKi8KLQkJCSAgICAgJnJvb20sCisJCQkgICAgIHJvb20sCiAJCQkgICAgIDEsCiAJCQkgICAgIDIwMDApOwogCWlmIChyYyA8IDApIHsKQEAgLTcwOCw4ICs3MjksOCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXByaXYtPnR4X3Jvb20gPSByb29tOwotCXByaXYtPnR4X3Rocm90dGxlZCA9IHJvb20gPyAwIDogMTsKKwlwcml2LT50eF9yb29tID0gKnJvb207CisJcHJpdi0+dHhfdGhyb3R0bGVkID0gKnJvb20gPyAwIDogMTsKIAogCS8qU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UqLwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwpAQCAtNzE4LDggKzczOSw4IEBACiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yOwogCX0KLQogZXJyb3I6CisJa2ZyZWUocm9vbSk7CiAJcmV0dXJuIHJjOwogfQogc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTc4OSw2ICs4MTAsMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAorI2lmZGVmIEtFWVNQQU4KK01PRFVMRV9GSVJNV0FSRSgia2V5c3Bhbl9wZGEva2V5c3Bhbl9wZGEuZnciKTsKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorTU9EVUxFX0ZJUk1XQVJFKCJrZXlzcGFuX3BkYS94aXJjb21fcGdzLmZ3Iik7CisjZW5kaWYKKwogc3RhdGljIGludCBrZXlzcGFuX3BkYV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IDNhNzg3MzguLjhlZWY5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtOTQsNyArOTQsNyBAQAogLyoKICAqIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgS0xTSSBjb252ZXJ0ZXJzLgogICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoUEFMTUNPTk5FQ1RfVklELCBQQUxNQ09OTkVDVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEtMU0lfVklELCBLTFNJX0tMNUtVU0IxMDVEX1BJRCkgfSwKIAl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0yMTIsMTAgKzIxMiwxOSBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmxpbmVfc3RhdGVfcCkKIHsKIAlpbnQgcmM7Ci0JX191OCBzdGF0dXNfYnVmW0tMU0lfU1RBVFVTQlVGX0xFTl0gPSB7IC0xLCAtMX07CisJdTggKnN0YXR1c19idWY7CiAJX191MTYgc3RhdHVzOwogCiAJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsICJzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3RcbiIpOworCisJc3RhdHVzX2J1ZiA9IGttYWxsb2MoS0xTSV9TVEFUVVNCVUZfTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXR1c19idWYpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciBzdGF0dXMgYnVmZmVyLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdGF0dXNfYnVmWzBdID0gMHhmZjsKKwlzdGF0dXNfYnVmWzFdID0gMHhmZjsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKIAkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCkBAIC0yMzYsNiArMjQ1LDggQEAKIAogCQkqbGluZV9zdGF0ZV9wID0ga2xzaV8xMDVfc3RhdHVzMmxpbmVzdGF0ZShzdGF0dXMpOwogCX0KKworCWtmcmVlKHN0YXR1c19idWYpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzY0LDcgKzM3NSw3IEBACiAJaW50IHJjOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgbGluZV9zdGF0ZTsKLQlzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyBjZmc7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgKmNmZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC0zNzYsMTIgKzM4NywxOCBAQAogCSAqIFRoZW4gcmVhZCB0aGUgbW9kZW0gbGluZSBjb250cm9sIGFuZCBzdG9yZSB2YWx1ZXMgaW4KIAkgKiBwcml2LT5saW5lX3N0YXRlLgogCSAqLwotCWNmZy5wa3RsZW4gICA9IDU7Ci0JY2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOwotCWNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwotCWNmZy51bmtub3duMSA9IDA7Ci0JY2ZnLnVua25vd24yID0gMTsKLQlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCAmY2ZnKTsKKwljZmcgPSBrbWFsbG9jKHNpemVvZigqY2ZnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmcpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciBjb25maWcgYnVmZmVyLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljZmctPnBrdGxlbiAgID0gNTsKKwljZmctPmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCWNmZy0+ZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKKwljZmctPnVua25vd24xID0gMDsKKwljZmctPnVua25vd24yID0gMTsKKwlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCBjZmcpOwogCiAJLyogc2V0IHVwIHRlcm1pb3Mgc3RydWN0dXJlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTM5MSwxMSArNDA4LDExIEBACiAJcHJpdi0+dGVybWlvcy5jX2xmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2xmbGFnOwogCWZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspCiAJCXByaXYtPnRlcm1pb3MuY19jY1tpXSA9IHR0eS0+dGVybWlvcy0+Y19jY1tpXTsKLQlwcml2LT5jZmcucGt0bGVuICAgPSBjZmcucGt0bGVuOwotCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGNmZy5iYXVkcmF0ZTsKLQlwcml2LT5jZmcuZGF0YWJpdHMgPSBjZmcuZGF0YWJpdHM7Ci0JcHJpdi0+Y2ZnLnVua25vd24xID0gY2ZnLnVua25vd24xOwotCXByaXYtPmNmZy51bmtub3duMiA9IGNmZy51bmtub3duMjsKKwlwcml2LT5jZmcucGt0bGVuICAgPSBjZmctPnBrdGxlbjsKKwlwcml2LT5jZmcuYmF1ZHJhdGUgPSBjZmctPmJhdWRyYXRlOworCXByaXYtPmNmZy5kYXRhYml0cyA9IGNmZy0+ZGF0YWJpdHM7CisJcHJpdi0+Y2ZnLnVua25vd24xID0gY2ZnLT51bmtub3duMTsKKwlwcml2LT5jZmcudW5rbm93bjIgPSBjZmctPnVua25vd24yOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFJFQURfT04gYW5kIHVyYiBzdWJtaXNzaW9uICovCkBAIC00NDEsNiArNDU4LDcgQEAKIAkJcmV0dmFsID0gcmM7CiAKIGV4aXQ6CisJa2ZyZWUoY2ZnKTsKIAlyZXR1cm4gcmV0dmFsOwogfSAvKiBrbHNpXzEwNV9vcGVuICovCiAKQEAgLTY4MSw3ICs2OTksNiBAQAogCQkJYnl0ZXNfc2VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIDI7CiAJCX0KIAotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGJ5dGVzX3NlbnQpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSArIDIsIGJ5dGVzX3NlbnQpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl0dHlfa3JlZl9wdXQodHR5KTsKQEAgLTcxNCwxMCArNzMxLDE3IEBACiAJdW5zaWduZWQgaW50IG9sZF9pZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2lmbGFnOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7Ci0Jc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzICpjZmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGVlZF90IGJhdWQ7CiAKKwljZmcgPSBrbWFsbG9jKHNpemVvZigqY2ZnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmcpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciBjb25maWcgYnVmZmVyLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKIAkvKiBsb2NrIHdoaWxlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIHNldHRpbmdzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtNzkzLDExICs4MTcsMTEgQEAKIAkJY2FzZSBDUzU6CiAJCQlkYmcoIiVzIC0gNSBiaXRzL2J5dGUgbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiA7CisJCQlnb3RvIGVycjsKIAkJY2FzZSBDUzY6CiAJCQlkYmcoIiVzIC0gNiBiaXRzL2J5dGUgbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiA7CisJCQlnb3RvIGVycjsKIAkJY2FzZSBDUzc6CiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfNzsKIAkJCWJyZWFrOwpAQCAtODU2LDExICs4ODAsMTMgQEAKICNlbmRpZgogCQk7CiAJfQotCW1lbWNweSgmY2ZnLCAmcHJpdi0+Y2ZnLCBzaXplb2YoY2ZnKSk7CisJbWVtY3B5KGNmZywgJnByaXYtPmNmZywgc2l6ZW9mKCpjZmcpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBub3cgY29tbWl0IGNoYW5nZXMgdG8gZGV2aWNlICovCi0Ja2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgJmNmZyk7CisJa2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgY2ZnKTsKK2VycjoKKwlrZnJlZShjZmcpOwogfSAvKiBrbHNpXzEwNV9zZXRfdGVybWlvcyAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCA0NWVhNjk0Li5jMTEzYTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC04Niw3ICs4Niw3IEBACiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgdm9pZCBrb2JpbF9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfSwKQEAgLTM4OCw3ICszODgsNiBAQAogCQkqLwogCQkvKiBFTkQgREVCVUcgKi8KIAotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KQEAgLTYyNCw3ICs2MjMsNiBAQAogCXVuc2lnbmVkIHNob3J0IHVyYl92YWwgPSAwOwogCWludCBjX2NmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCXNwZWVkX3Qgc3BlZWQ7Ci0Jdm9pZCAqc2V0dGluZ3M7CiAKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWlmIChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQgfHwKQEAgLTY0NywyNSArNjQ1LDEzIEBACiAJfQogCXVyYl92YWwgfD0gKGNfY2ZsYWcgJiBDU1RPUEIpID8gU1VTQkNSX1NQQVNCXzJTdG9wQml0cyA6CiAJCQkJCQkJU1VTQkNSX1NQQVNCXzFTdG9wQml0OwotCi0Jc2V0dGluZ3MgPSBremFsbG9jKDUwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNldHRpbmdzKQotCQlyZXR1cm47Ci0KLQlzcHJpbnRmKHNldHRpbmdzLCAiJWQgIiwgc3BlZWQpOwotCiAJaWYgKGNfY2ZsYWcgJiBQQVJFTkIpIHsKLQkJaWYgIChjX2NmbGFnICYgUEFST0REKSB7CisJCWlmICAoY19jZmxhZyAmIFBBUk9ERCkKIAkJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX09kZFBhcml0eTsKLQkJCXN0cmNhdChzZXR0aW5ncywgIk9kZCBQYXJpdHkiKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfRXZlblBhcml0eTsKLQkJCXN0cmNhdChzZXR0aW5ncywgIkV2ZW4gUGFyaXR5Iik7Ci0JCX0KLQl9IGVsc2UgeworCX0gZWxzZQogCQl1cmJfdmFsIHw9IFNVU0JDUl9TUEFTQl9Ob1Bhcml0eTsKLQkJc3RyY2F0KHNldHRpbmdzLCAiTm8gUGFyaXR5Iik7Ci0JfQogCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOwogCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIApAQCAtNjc1LDExICs2NjEsMTAgQEAKIAkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKIAkJICB1cmJfdmFsLAogCQkgIDAsCi0JCSAgc2V0dGluZ3MsCisJCSAgTlVMTCwKIAkJICAwLAogCQkgIEtPQklMX1RJTUVPVVQKIAkJKTsKLQlrZnJlZShzZXR0aW5ncyk7CiB9CiAKIHN0YXRpYyBpbnQga29iaWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCmluZGV4IGNkMDA5Y2IuLjI4NDlmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJtY3RfdTIzMi5oIgpAQCAtMTEwLDcgKzExMSw3IEBACiAvKgogICogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBNQ1QgVVNCLVJTMjMyIGNvbnZlcnRlci4KICAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKE1DVF9VMjMyX1ZJRCwgTUNUX1UyMzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX1NJVEVDT01fUElEKSB9LAogCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX0RVX0gzU1BfUElEKSB9LApAQCAtMjMxLDE5ICsyMzIsMjIgQEAKIHN0YXRpYyBpbnQgbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHNwZWVkX3QgdmFsdWUpCiB7Ci0JX19sZTMyIGRpdmlzb3I7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CiAJaW50IHJjOwotCXVuc2lnbmVkIGNoYXIgemVyb19ieXRlID0gMDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAJdW5zaWduZWQgY2hhciBjdHNfZW5hYmxlX2J5dGUgPSAwOwogCXNwZWVkX3Qgc3BlZWQ7CiAKLQlkaXZpc29yID0gY3B1X3RvX2xlMzIobWN0X3UyMzJfY2FsY3VsYXRlX2JhdWRfcmF0ZShzZXJpYWwsIHZhbHVlLAotCQkJCQkJCQkmc3BlZWQpKTsKKwlidWYgPSBrbWFsbG9jKE1DVF9VMjMyX01BWF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCisJZGl2aXNvciA9IG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc2VyaWFsLCB2YWx1ZSwgJnNwZWVkKTsKKwlwdXRfdW5hbGlnbmVkX2xlMzIoY3B1X3RvX2xlMzIoZGl2aXNvciksIGJ1Zik7CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJTUNUX1UyMzJfU0VUX0JBVURfUkFURV9SRVFVRVNULAogCQkJCU1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCi0JCQkJMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKKwkJCQkwLCAwLCBidWYsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKIAkJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkJLypGSVhNRTogV2hhdCB2YWx1ZSBzcGVlZCByZXN1bHRzICovCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKQEAgLTI2OSwxMCArMjczLDExIEBACiAJICAgYSBkZXZpY2Ugd2hpY2ggaXMgbm90IGFzc2VydGluZyAnQ1RTJy4KIAkqLwogCisJYnVmWzBdID0gMDsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQlNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwKIAkJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAotCQkJCTAsIDAsICZ6ZXJvX2J5dGUsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFLAorCQkJCTAsIDAsIGJ1ZiwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgpAQCAtMjg0LDMwICsyODksNDAgQEAKIAogCWRiZygic2V0X2JhdWRfcmF0ZTogc2VuZCBzZWNvbmQgY29udHJvbCBtZXNzYWdlLCBkYXRhID0gJTAyWCIsCiAJCQkJCQkJY3RzX2VuYWJsZV9ieXRlKTsKKwlidWZbMF0gPSBjdHNfZW5hYmxlX2J5dGU7CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQlNQ1RfVTIzMl9TRVRfQ1RTX1JFUVVFU1QsCiAJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAotCQkJMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAorCQkJMCwgMCwgYnVmLCBNQ1RfVTIzMl9TRVRfQ1RTX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCAiCiAJCQkiZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CiAKKwlrZnJlZShidWYpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZSAqLwogCiBzdGF0aWMgaW50IG1jdF91MjMyX3NldF9saW5lX2N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciBsY3IpCiB7CiAJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MoTUNUX1UyMzJfTUFYX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWZbMF0gPSBsY3I7CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQlNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1JFUVVFU1QsCiAJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAotCQkJMCwgMCwgJmxjciwgTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9TSVpFLAorCQkJMCwgMCwgYnVmLCBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKIAkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKIAkJCSJTZXQgTElORSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgbGNyLCByYyk7CiAJZGJnKCJzZXRfbGluZV9jdHJsOiAweCV4IiwgbGNyKTsKKwlrZnJlZShidWYpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2xpbmVfY3RybCAqLwogCkBAIC0zMTUsMjMgKzMzMCwzMSBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlKQogewogCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIG1jciA9IE1DVF9VMjMyX01DUl9OT05FOworCXVuc2lnbmVkIGNoYXIgbWNyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAorCWJ1ZiA9IGttYWxsb2MoTUNUX1UyMzJfTUFYX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltY3IgPSBNQ1RfVTIzMl9NQ1JfTk9ORTsKIAlpZiAoY29udHJvbF9zdGF0ZSAmIFRJT0NNX0RUUikKIAkJbWNyIHw9IE1DVF9VMjMyX01DUl9EVFI7CiAJaWYgKGNvbnRyb2xfc3RhdGUgJiBUSU9DTV9SVFMpCiAJCW1jciB8PSBNQ1RfVTIzMl9NQ1JfUlRTOwogCisJYnVmWzBdID0gbWNyOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfUkVRVUVTVCwKIAkJCU1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCi0JCQkwLCAwLCAmbWNyLCBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9TSVpFLAorCQkJMCwgMCwgYnVmLCBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCiAJCQkiU2V0IE1PREVNIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBtY3IsIHJjKTsKIAlkYmcoInNldF9tb2RlbV9jdHJsOiBzdGF0ZT0weCV4ID09PiBtY3I9MHgleCIsIGNvbnRyb2xfc3RhdGUsIG1jcik7CiAKKwlrZnJlZShidWYpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwgKi8KIApAQCAtMzM5LDE3ICszNjIsMjcgQEAKIAkJCQkJCXVuc2lnbmVkIGNoYXIgKm1zcikKIHsKIAlpbnQgcmM7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJYnVmID0ga21hbGxvYyhNQ1RfVTIzMl9NQVhfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCSptc3IgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQlNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9SRVFVRVNULAogCQkJTUNUX1UyMzJfR0VUX1JFUVVFU1RfVFlQRSwKLQkJCTAsIDAsIG1zciwgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfU0laRSwKKwkJCTAsIDAsIGJ1ZiwgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKSB7CiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCiAJCQkiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCSptc3IgPSAwOworCX0gZWxzZSB7CisJCSptc3IgPSBidWZbMF07CiAJfQogCWRiZygiZ2V0X21vZGVtX3N0YXQ6IDB4JXgiLCAqbXNyKTsKKwlrZnJlZShidWYpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfZ2V0X21vZGVtX3N0YXQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaAppbmRleCAwN2I2YmVjLi43NDE3ZDVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKQEAgLTczLDYgKzczLDggQEAKICNkZWZpbmUgTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNUICAgMTIKICNkZWZpbmUgTUNUX1UyMzJfU0VUX0NUU19TSVpFICAgICAgIDEKIAorI2RlZmluZSBNQ1RfVTIzMl9NQVhfU0laRQkJNAkvKiBvZiBNQ1RfWFhYX1NJWkUgKi8KKwogLyoKICAqIEJhdWQgcmF0ZSAoZGl2aXNvcikKICAqIEFjdHVhbGx5LCB0aGVyZSBhcmUgdHdvIG9mIHRoZW0sIE1DVCB3ZWJzaXRlIGNhbGxzIHRoZW0gIlBoaWxpcHMgc29sdXRpb24iCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwppbmRleCA3NjNlMzJhLi4wZDQ3ZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKQEAgLTgxLDEyICs4MSwxNSBAQAogCiBzdGF0aWMgaW50IGRlYnVnOwogCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIG1vc2NoaXA3NzIwXzJwb3J0X2RyaXZlcjsKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX01PU0NISVAJCTB4OTcxMAogI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83NzIwCQkweDc3MjAKICNkZWZpbmUgTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNQkJMHg3NzE1CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83NzIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc3MTUpIH0sCiAJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG1vc2NoaXBfcG9ydF9pZF90YWJsZSk7CkBAIC0xMDYsNyArMTA5LDcgQEAKIAlfX3U4IHNwMTsKIAlfX3U4IHNwMjsKIAotCWRiZygiJXMiLCAiIDogRW50ZXJpbmdcbiIpOworCWRiZygiIDogRW50ZXJpbmciKTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAwOgpAQCAtMTg2LDYgKzE4OSw3NSBAQAogfQogCiAvKgorICogbW9zNzcxNV9pbnRlcnJ1cHRfY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIDc3MTUncyBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24KKyAqCXRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQuCisgKi8KK3N0YXRpYyB2b2lkIG1vczc3MTVfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmVzdWx0OworCWludCBsZW5ndGg7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCV9fdTggKmRhdGE7CisJX191OCBpaXI7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkgICAgc3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKiBTdHJ1Y3R1cmUgb2YgZGF0YSBmcm9tIDc3MTUgZGV2aWNlOgorCSAqIEJ5dGUgMTogSUlSIHNlcmlhbCBQb3J0CisJICogQnl0ZSAyOiB1bnVzZWQKKwkgKiBCeXRlIDI6IERTUiBwYXJhbGxlbCBwb3J0CisJICogQnl0ZSA0OiBGSUZPIHN0YXR1cyBmb3IgYm90aCAqLworCisJaWYgKHVubGlrZWx5KGxlbmd0aCAhPSA0KSkgeworCQlkYmcoIldyb25nIGRhdGEgISEhIik7CisJCXJldHVybjsKKwl9CisKKwlpaXIgPSBkYXRhWzBdOworCWlmICghKGlpciAmIDB4MDEpKSB7CS8qIHNlcmlhbCBwb3J0IGludGVycnVwdCBwZW5kaW5nICovCisJCXN3aXRjaCAoaWlyICYgMHgwZikgeworCQljYXNlIFNFUklBTF9JSVJfUkxTOgorCQkJZGJnKCJTZXJpYWwgUG9ydDogUmVjZWl2ZXIgc3RhdHVzIGVycm9yIG9yIGFkZHJlc3MgIgorCQkJICAgICJiaXQgZGV0ZWN0ZWQgaW4gOS1iaXQgbW9kZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBTRVJJQUxfSUlSX0NUSToKKwkJCWRiZygiU2VyaWFsIFBvcnQ6IFJlY2VpdmVyIHRpbWUgb3V0Iik7CisJCQlicmVhazsKKwkJY2FzZSBTRVJJQUxfSUlSX01TOgorCQkJZGJnKCJTZXJpYWwgUG9ydDogTW9kZW0gc3RhdHVzIGNoYW5nZSIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2V4aXQ6CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYlxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCXJldHVybjsKK30KKworLyoKICAqIG1vczc3MjBfYnVsa19pbl9jYWxsYmFjawogICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBkYXRhIG9uIHRoZQogICoJYnVsayBpbiBlbmRwb2ludC4KQEAgLTIwNiw3ICsyNzgsNyBAQAogCiAJbW9zNzcyMF9wb3J0ID0gdXJiLT5jb250ZXh0OwogCWlmICghbW9zNzcyMF9wb3J0KSB7Ci0JCWRiZygiJXMiLCAiTlVMTCBtb3M3NzIwX3BvcnQgcG9pbnRlciBcbiIpOworCQlkYmcoIk5VTEwgbW9zNzcyMF9wb3J0IHBvaW50ZXIiKTsKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTIxOCw3ICsyOTAsNiBAQAogCiAJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CkBAIC0yNzUsMTcgKzM0NiwxNSBAQAogICoJdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHNlbmRpbmcgY29tbWFuZCB0byBkZXZpY2UKICAqLwogc3RhdGljIGludCBzZW5kX21vc19jbWQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191OCByZXF1ZXN0LCBfX3UxNiB2YWx1ZSwKLQkJCV9fdTE2IGluZGV4LCB2b2lkICpkYXRhKQorCQkJX191MTYgaW5kZXgsIHU4ICpkYXRhKQogewogCWludCBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IHBpcGU7CisJdTggKmJ1ZjsKIAl1MTYgcHJvZHVjdCA9IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JX191OCByZXF1ZXN0dHlwZTsKLQlfX3UxNiBzaXplID0gMHgwMDAwOwogCiAJaWYgKHZhbHVlIDwgTU9TX01BWF9QT1JUKSB7CiAJCWlmIChwcm9kdWN0ID09IE1PU0NISVBfREVWSUNFX0lEXzc3MTUpCi0JCQl2YWx1ZSA9IHZhbHVlKjB4MTAwKzB4MTAwOworCQkJdmFsdWUgPSAweDAyMDA7IC8qIGlkZW50aWZpZXMgdGhlIDc3MTUncyBzZXJpYWwgcG9ydCAqLwogCQllbHNlCiAJCQl2YWx1ZSA9IHZhbHVlKjB4MTAwKzB4MjAwOwogCX0gZWxzZSB7CkBAIC0yOTgsMjcgKzM2Nyw1OCBAQAogCX0KIAogCWlmIChyZXF1ZXN0ID09IE1PU19XUklURSkgewotCQlyZXF1ZXN0ID0gKF9fdTgpTU9TX1dSSVRFOwotCQlyZXF1ZXN0dHlwZSA9IChfX3U4KTB4NDA7Ci0JCXZhbHVlICA9IHZhbHVlICsgKF9fdTE2KSooKHVuc2lnbmVkIGNoYXIgKilkYXRhKTsKLQkJZGF0YSA9IE5VTEw7Ci0JCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApOworCQl2YWx1ZSA9IHZhbHVlICsgKmRhdGE7CisJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBNT1NfV1JJVEUsCisJCQkJMHg0MCwgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBNT1NfV0RSX1RJTUVPVVQpOwogCX0gZWxzZSB7Ci0JCXJlcXVlc3QgPSAoX191OClNT1NfUkVBRDsKLQkJcmVxdWVzdHR5cGUgPSAoX191OCkweEMwOwotCQlzaXplID0gMHgwMTsKLQkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIE1PU19SRUFELAorCQkJCTB4YzAsIHZhbHVlLCBpbmRleCwgYnVmLCAxLCBNT1NfV0RSX1RJTUVPVVQpOworCQkqZGF0YSA9ICpidWY7CisJCWtmcmVlKGJ1Zik7CiAJfQotCi0Jc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKLQkJCQkgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLCBNT1NfV0RSX1RJTUVPVVQpOwotCitvdXQ6CiAJaWYgKHN0YXR1cyA8IDApCi0JCWRiZygiQ29tbWFuZCBXcml0ZSBmYWlsZWQgVmFsdWUgJXggaW5kZXggJXhcbiIsIHZhbHVlLCBpbmRleCk7CisJCWRiZygiQ29tbWFuZCBXcml0ZSBmYWlsZWQgVmFsdWUgJXggaW5kZXggJXgiLCB2YWx1ZSwgaW5kZXgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAorCisvKgorICogbW9zNzd4eF9wcm9iZQorICoJdGhpcyBmdW5jdGlvbiBpbnN0YWxscyB0aGUgYXBwcm9wcmlhdGUgcmVhZCBpbnRlcnJ1cHQgZW5kcG9pbnQgY2FsbGJhY2sKKyAqCWRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYSA3NzIwIG9yIDc3MTUsIHRodXMgYXZvaWRpbmcgY29zdGx5CisgKglydW4tdGltZSBjaGVja3MgaW4gdGhlIGhpZ2gtZnJlcXVlbmN5IGNhbGxiYWNrIHJvdXRpbmUgaXRzZWxmLgorICovCitzdGF0aWMgaW50IG1vczc3eHhfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaWYgKGlkLT5pZFByb2R1Y3QgPT0gTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNSkKKwkJbW9zY2hpcDc3MjBfMnBvcnRfZHJpdmVyLnJlYWRfaW50X2NhbGxiYWNrID0KKwkJCW1vczc3MTVfaW50ZXJydXB0X2NhbGxiYWNrOworCWVsc2UKKwkJbW9zY2hpcDc3MjBfMnBvcnRfZHJpdmVyLnJlYWRfaW50X2NhbGxiYWNrID0KKwkJCW1vczc3MjBfaW50ZXJydXB0X2NhbGxiYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9zNzd4eF9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXUxNiBwcm9kdWN0ID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlpZiAocHJvZHVjdCA9PSBNT1NDSElQX0RFVklDRV9JRF83NzE1KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAyOworfQorCiBzdGF0aWMgaW50IG1vczc3MjBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0zOTAsNyArNDkwLDcgQEAKIAkgICovCiAJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCXNlbmRfbW9zX2NtZChwb3J0LT5zZXJpYWwsIE1PU19SRUFELCBwb3J0X251bWJlciwgVUFSVF9MU1IsICZkYXRhKTsKLQlkYmcoIlNTOjolcCBMU1I6JXhcbiIsIG1vczc3MjBfcG9ydCwgZGF0YSk7CisJZGJnKCJTUzo6JXAgTFNSOiV4IiwgbW9zNzcyMF9wb3J0LCBkYXRhKTsKIAogCWRiZygiQ2hlY2s6U2VuZGluZyBDb21tYW5kIC4uLi4uLi4uLi4iKTsKIApAQCAtNzI5LDcgKzgyOSw3IEBACiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0OwogCWludCBzdGF0dXM7CiAKLQlkYmcoIiVzLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoIiVzLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAltb3M3NzIwX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTEyMDgsNyArMTMwOCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlkYmcoIiVzXG4iLCAic2V0dGluZyB0ZXJtaW9zIC0gQVNQSVJFIik7CisJZGJnKCJzZXR0aW5nIHRlcm1pb3MgLSBBU1BJUkUiKTsKIAogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCkBAIC0xMjI2LDcgKzEzMjYsNyBAQAogCWNoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwgbW9zNzcyMF9wb3J0LCBvbGRfdGVybWlvcyk7CiAKIAlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7Ci0JCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhIVxuIik7CisJCWRiZygiVVJCIEtJTExFRCAhISEhISIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDk1LDYgKzE1OTUsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAJaW50IGk7CiAJY2hhciBkYXRhOworCXUxNiBwcm9kdWN0ID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAogCWRiZygiJXM6IEVudGVyaW5nIC4uLi4uLi4uLi4iLCBfX2Z1bmNfXyk7CiAKQEAgLTE1MTQsNiArMTYxNSwyOSBAQAogCiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIG1vczc3MjBfc2VyaWFsKTsKIAorCS8qCisJICogVGhlIDc3MTUgdXNlcyB0aGUgZmlyc3QgYnVsayBpbi9vdXQgZW5kcG9pbnQgcGFpciBmb3IgdGhlIHBhcmFsbGVsCisJICogcG9ydCwgYW5kIHRoZSBzZWNvbmQgZm9yIHRoZSBzZXJpYWwgcG9ydC4gIEJlY2F1c2UgdGhlIHVzYnNlcmlhbCBjb3JlCisJICogYXNzdW1lcyBib3RoIHBhaXJzIGFyZSBzZXJpYWwgcG9ydHMsIHdlIG11c3QgZW5nYWdlIGluIGEgYml0IG9mCisJICogc3VidGVyZnVnZSBhbmQgc3dhcCB0aGUgcG9pbnRlcnMgZm9yIHBvcnRzIDAgYW5kIDEgaW4gb3JkZXIgdG8gbWFrZQorCSAqIHBvcnQgMCBwb2ludCB0byB0aGUgc2VyaWFsIHBvcnQuICBIb3dldmVyLCBib3RoIG1vc2NoaXAgZGV2aWNlcyB1c2UgYQorCSAqIHNpbmdsZSBpbnRlcnJ1cHQtaW4gZW5kcG9pbnQgZm9yIGJvdGggcG9ydHMgKGFzIG1lbnRpb25lZCBhIGxpdHRsZQorCSAqIGZ1cnRoZXIgZG93biksIGFuZCB0aGlzIGVuZHBvaW50IHdhcyBhc3NpZ25lZCB0byBwb3J0IDAuICBTbyBhZnRlcgorCSAqIHRoZSBzd2FwLCB3ZSBtdXN0IGNvcHkgdGhlIGludGVycnVwdCBlbmRwb2ludCBlbGVtZW50cyBmcm9tIHBvcnQgMQorCSAqIChhcyBuZXdseSBhc3NpZ25lZCkgdG8gcG9ydCAwLCBhbmQgbnVsbCBvdXQgcG9ydCAxIHBvaW50ZXJzLgorCSAqLworCWlmIChwcm9kdWN0ID09IE1PU0NISVBfREVWSUNFX0lEXzc3MTUpIHsKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqdG1wID0gc2VyaWFsLT5wb3J0WzBdOworCQlzZXJpYWwtPnBvcnRbMF0gPSBzZXJpYWwtPnBvcnRbMV07CisJCXNlcmlhbC0+cG9ydFsxXSA9IHRtcDsKKwkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiID0gdG1wLT5pbnRlcnJ1cHRfaW5fdXJiOworCQlzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9idWZmZXIgPSB0bXAtPmludGVycnVwdF9pbl9idWZmZXI7CisJCXNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyA9CisJCQl0bXAtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJCXNlcmlhbC0+cG9ydFsxXS0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CisJCXNlcmlhbC0+cG9ydFsxXS0+aW50ZXJydXB0X2luX2J1ZmZlciA9IE5VTEw7CisJfQorCiAJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBtb3M3NzIwX29wZW4gKgogCSAqIGZ1bmN0aW9uLCBhcyB0aGUgc3RydWN0dXJlcyBhcmVuJ3QgY3JlYXRlZCB5ZXQuICAgICAgICAgICAgICovCiAKQEAgLTE1MjksNyArMTY1Myw3IEBACiAKIAkJLyogSW5pdGlhbGl6ZSBhbGwgcG9ydCBpbnRlcnJ1cHQgZW5kIHBvaW50IHRvIHBvcnQgMCBpbnQKIAkJICogZW5kcG9pbnQuICBPdXIgZGV2aWNlIGhhcyBvbmx5IG9uZSBpbnRlcnJ1cHQgZW5kcG9pbnQKLQkJICogY29tbWFuIHRvIGFsbCBwb3J0cyAqLworCQkgKiBjb21tb24gdG8gYWxsIHBvcnRzICovCiAJCXNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyA9CiAJCQkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOwogCkBAIC0xNTg0LDExICsxNzA4LDEyIEBACiAJLmRlc2NyaXB0aW9uCQk9ICJNb3NjaGlwIDIgcG9ydCBhZGFwdGVyIiwKIAkudXNiX2RyaXZlcgkJPSAmdXNiX2RyaXZlciwKIAkuaWRfdGFibGUJCT0gbW9zY2hpcF9wb3J0X2lkX3RhYmxlLAotCS5udW1fcG9ydHMJCT0gMiwKKwkuY2FsY19udW1fcG9ydHMJCT0gbW9zNzd4eF9jYWxjX251bV9wb3J0cywKIAkub3BlbgkJCT0gbW9zNzcyMF9vcGVuLAogCS5jbG9zZQkJCT0gbW9zNzcyMF9jbG9zZSwKIAkudGhyb3R0bGUJCT0gbW9zNzcyMF90aHJvdHRsZSwKIAkudW50aHJvdHRsZQkJPSBtb3M3NzIwX3VudGhyb3R0bGUsCisJLnByb2JlCQkJPSBtb3M3N3h4X3Byb2JlLAogCS5hdHRhY2gJCQk9IG1vczc3MjBfc3RhcnR1cCwKIAkucmVsZWFzZQkJPSBtb3M3NzIwX3JlbGVhc2UsCiAJLmlvY3RsCQkJPSBtb3M3NzIwX2lvY3RsLApAQCAtMTYwMCw3ICsxNzI1LDcgQEAKIAkuY2hhcnNfaW5fYnVmZmVyCT0gbW9zNzcyMF9jaGFyc19pbl9idWZmZXIsCiAJLmJyZWFrX2N0bAkJPSBtb3M3NzIwX2JyZWFrLAogCS5yZWFkX2J1bGtfY2FsbGJhY2sJPSBtb3M3NzIwX2J1bGtfaW5fY2FsbGJhY2ssCi0JLnJlYWRfaW50X2NhbGxiYWNrCT0gbW9zNzcyMF9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gTlVMTCAgLyogZHluYW1pY2FsbHkgYXNzaWduZWQgaW4gcHJvYmUoKSAqLwogfTsKIAogc3RhdGljIGludCBfX2luaXQgbW9zY2hpcDc3MjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggMmNmZTI0NS4uMmZkYTFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC0xODEsNyArMTgxLDcgQEAKICNkZWZpbmUgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFICAgICAgICAzMgkvKiBVUkIgU2l6ZSAgKi8KIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9wb3J0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9wb3J0X2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83ODQwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83ODIwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTTzlNTDJfMil9LApAQCAtMTk4LDcgKzE5OCw3IEBACiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfaWRfdGFibGVfY29tYmluZWRbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4NDApfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4MjApfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPOU1MMl8yKX0sCkBAIC0yODMsMTIgKzI4MywxOSBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlpbnQgcmV0ID0gMDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhWRU5ET1JfUkVBRF9MRU5HVEgsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBNQ1NfUkRSRVEsCi0JCQkgICAgICBNQ1NfUkRfUlRZUEUsIDAsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBNQ1NfUkRfUlRZUEUsIDAsIHJlZywgYnVmLCBWRU5ET1JfUkVBRF9MRU5HVEgsCiAJCQkgICAgICBNT1NfV0RSX1RJTUVPVVQpOworCSp2YWwgPSBidWZbMF07CiAJZGJnKCJtb3M3ODQwX2dldF9yZWdfc3luYyBvZmZzZXQgaXMgJXgsIHJldHVybiB2YWwgJXgiLCByZWcsICp2YWwpOwotCSp2YWwgPSAoKnZhbCkgJiAweDAwZmY7CisKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MSw2ICszNDgsMTEgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJaW50IHJldCA9IDA7CiAJX191MTYgV3ZhbDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhWRU5ET1JfUkVBRF9MRU5HVEgsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGRiZygiYXBwbGljYXRpb24gbnVtYmVyIGlzICU0eCIsCiAJICAgICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIChfX3UxNikocG9ydC0+c2VyaWFsLT5taW5vcikpKzEpPDw4KTsgKi8KQEAgLTM2NCw5ICszNzYsMTEgQEAKIAkJfQogCX0KIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgTUNTX1JEUkVRLAotCQkJICAgICAgTUNTX1JEX1JUWVBFLCBXdmFsLCByZWcsIHZhbCwgVkVORE9SX1JFQURfTEVOR1RILAorCQkJICAgICAgTUNTX1JEX1JUWVBFLCBXdmFsLCByZWcsIGJ1ZiwgVkVORE9SX1JFQURfTEVOR1RILAogCQkJICAgICAgTU9TX1dEUl9USU1FT1VUKTsKLQkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCSp2YWwgPSBidWZbMF07CisKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MCw3ICs3NjQsNiBAQAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewotCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkYmcoIiAlcyAiLCBkYXRhKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwppbmRleCA5OWJkMDBmNS4uY2YxNzE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNWM2LCAweDMxOTcpIH0sCS8qIHVua25vd24gTW90b3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYzQ0LCAweDAwMjIpIH0sCS8qIHVua25vd24gTW9yb3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMmI4LCAweDJhNjQpIH0sCS8qIE1vdG9yb2xhIEtSWlIgSzFtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKaW5kZXggNWNlYWE0YzYuLjA0YTZjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGE5OSwgMHgwMDAxKSB9LAkvKiBUYWxvbiBUZWNobm9sb2d5IGRldmljZSAqLwogCXsgfSwKIH07CkBAIC02Niw3ICs2Niw2IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDA2MjI2NTAuLjg5YzcyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHZvaWQgb21uaW5ldF9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBvbW5pbmV0X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoWllYRUxfVkVORE9SX0lELCBaWVhFTF9PTU5JTkVUX0lEKSB9LAogCXsgVVNCX0RFVklDRShaWVhFTF9WRU5ET1JfSUQsIEJUX0lHTklUSU9OUFJPX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0yMTgsOCArMjE4LDggQEAKIAogCWlmIChkZWJ1ZyAmJiBoZWFkZXItPm9oX3h4eCAhPSAweDMwKSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JCQkJCSI6IG9tbmluZXRfcmVhZCAlZDogIiwgaGVhZGVyLT5vaF9sZW4pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvbW5pbmV0X3JlYWQgJWQ6ICIsCisJCQkgICAgICAgX19GSUxFX18sIGhlYWRlci0+b2hfbGVuKTsKIAkJCWZvciAoaSA9IDA7IGkgPCAoaGVhZGVyLT5vaF9sZW4gKwogCQkJCQkJT01OSU5FVF9IRUFERVJMRU4pOyBpKyspCiAJCQkJcHJpbnRrKCIlLjJ4ICIsIGRhdGFbaV0pOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgICA9ICB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnKCIlcyAtIHBvcnQgJTB4XG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoIiVzIC0gcG9ydCAlMHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCA0Y2RiOTc1Li5mMzc0NzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNjVhLCAweDAwMDkpIH0sCiAJeyB9LAogfTsKQEAgLTU1LDcgKzU1LDYgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmVzdWx0OwotCWludCBhdmFpbGFibGVfcm9vbSA9IDA7CiAJaW50IGRhdGFfbGVuZ3RoOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTk2LDEzICs5NSw5IEBACiAJCQkvKiByZWFsIGRhdGEsIHNlbmQgaXQgdG8gdGhlIHR0eSBsYXllciAqLwogCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCQlpZiAodHR5KSB7Ci0JCQkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCi0JCQkJCQkJCWRhdGFfbGVuZ3RoKTsKLQkJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKLQkJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCi0JCQkJCQkJICAgICAgIGF2YWlsYWJsZV9yb29tKTsKLQkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQl9CisJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCisJCQkJCQkJICAgICAgIGRhdGFfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjE3LDcgKzIxMiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXByaXYtPm91dHN0YW5kaW5nX3VyYnMrKzsKQEAgLTI4OCw3ICsyODMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQgKiAyIC8gMykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA2ZTk0YTY3Li44NDdiODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zMzYsMTUgKzMzNiw0MiBAQAogI2RlZmluZSBBSVJQTFVTX1ZFTkRPUl9JRAkJCTB4MTAxMQogI2RlZmluZSBBSVJQTFVTX1BST0RVQ1RfTUNENjUwCQkJMHgzMTk4CiAKKy8qIExvbmdjaGVlci9Mb25nc3VuZyB2ZW5kb3IgSUQ7IG1ha2VzIHdoaXRlbGFiZWwgZGV2aWNlcyB0aGF0CisgKiBtYW55IG90aGVyIHZlbmRvcnMgbGlrZSA0RyBTeXN0ZW1zLCBBbGNhdGVsLCBDaGluYUJpcmQsCisgKiBNb2JpZGF0YSwgZXRjIHNlbGwgdW5kZXIgdGhlaXIgb3duIGJyYW5kIG5hbWVzLgorICovCisjZGVmaW5lIExPTkdDSEVFUl9WRU5ET1JfSUQJCQkweDFjOWUKKwogLyogNEcgU3lzdGVtcyBwcm9kdWN0cyAqLwotI2RlZmluZSBGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQJCTB4MWM5ZQorLyogVGhpcyBpcyB0aGUgNEcgWFMgU3RpY2sgVzE0IGEuay5hLiBNb2JpbGNvbSBEZWJpdGVsIFN1cmYtU3RpY2sgKgorICogSXQgc2VlbXMgdG8gY29udGFpbiBhIFF1YWxjb21tIFFTQzYyNDAvNjI5MCBjaGlwc2V0ICAgICAgICAgICAgKi8KICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQJCTB4OTYwMwogCiAvKiBIYWllciBwcm9kdWN0cyAqLwogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKKy8qIHNvbWUgZGV2aWNlcyBpbnRlcmZhY2VzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdWUgdG8gYSBudW1iZXIgb2YgcmVhc29ucyAqLworZW51bSBvcHRpb25fYmxhY2tsaXN0X3JlYXNvbiB7CisJCU9QVElPTl9CTEFDS0xJU1RfTk9ORSA9IDAsCisJCU9QVElPTl9CTEFDS0xJU1RfU0VORFNFVFVQID0gMSwKKwkJT1BUSU9OX0JMQUNLTElTVF9SRVNFUlZFRF9JRiA9IDIKK307CisKK3N0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8geworCWNvbnN0IHUzMiBpbmZvbGVuOwkvKiBudW1iZXIgb2YgaW50ZXJmYWNlIG51bWJlcnMgb24gYmxhY2tsaXN0ICovCisJY29uc3QgdTggICppZmFjZWluZm87CS8qIHBvaW50ZXIgdG8gdGhlIGFycmF5IGhvbGRpbmcgdGhlIG51bWJlcnMgKi8KKwllbnVtIG9wdGlvbl9ibGFja2xpc3RfcmVhc29uIHJlYXNvbjsKK307CisKK3N0YXRpYyBjb25zdCB1OCBmb3VyX2dfdzE0X25vX3NlbmRzZXR1cFtdID0geyAwLCAxIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyBmb3VyX2dfdzE0X2JsYWNrbGlzdCA9IHsKKwkuaW5mb2xlbiA9IEFSUkFZX1NJWkUoZm91cl9nX3cxNF9ub19zZW5kc2V0dXApLAorCS5pZmFjZWluZm8gPSBmb3VyX2dfdzE0X25vX3NlbmRzZXR1cCwKKwkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBX0xJR0hUKSB9LApAQCAtNjQ0LDcgKzY3MSw5IEBACiAJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFMpIH0sCiAJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAogCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAotCXsgVVNCX0RFVklDRShGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSB9LAorCXsgVVNCX0RFVklDRShMT05HQ0hFRVJfVkVORE9SX0lELCBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxNCksCisgIAkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZm91cl9nX3cxNF9ibGFja2xpc3QKKyAgCX0sCiAJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC03MDksNiArNzM4LDcgQEAKIAlzcGlubG9ja190IHN1c3BfbG9jazsKIAl1bnNpZ25lZCBpbnQgc3VzcGVuZGVkOjE7CiAJaW50IGluX2ZsaWdodDsKKwlzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvICpibGFja2xpc3RfaW5mbzsKIH07CiAKIHN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlIHsKQEAgLTc3OCw5ICs4MDgsMjcgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pbml0KCZkYXRhLT5zdXNwX2xvY2spOworCWRhdGEtPmJsYWNrbGlzdF9pbmZvID0gKHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8qKSBpZC0+ZHJpdmVyX2luZm87CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBlbnVtIG9wdGlvbl9ibGFja2xpc3RfcmVhc29uIGlzX2JsYWNrbGlzdGVkKGNvbnN0IHU4IGlmbnVtLAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8gKmJsYWNrbGlzdCkKK3sKKwljb25zdCB1OCAgKmluZm87CisJaW50IGk7CisKKwlpZiAoYmxhY2tsaXN0KSB7CisJCWluZm8gPSBibGFja2xpc3QtPmlmYWNlaW5mbzsKKworCQlmb3IgKGkgPSAwOyBpIDwgYmxhY2tsaXN0LT5pbmZvbGVuOyBpKyspIHsKKwkJCWlmIChpbmZvW2ldID09IGlmbnVtKQorCQkJCXJldHVybiBibGFja2xpc3QtPnJlYXNvbjsKKwkJfQorCX0KKwlyZXR1cm4gT1BUSU9OX0JMQUNLTElTVF9OT05FOworfQorCiBzdGF0aWMgdm9pZCBvcHRpb25fc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKQEAgLTkyMSw3ICs5NjksNiBAQAogCX0gZWxzZSB7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0gZWxzZSAKQEAgLTkyOSw5ICs5NzYsOSBAQAogCQl0dHlfa3JlZl9wdXQodHR5KTsKIAogCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCi0JCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CisJCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTikgewogCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJCWlmIChlcnIpCisJCQlpZiAoZXJyICYmIGVyciAhPSAtRVBFUk0pCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAiCiAJCQkJCSIoJWQpIiwgX19mdW5jX18sIGVycik7CiAJCQllbHNlCkBAIC05ODUsNyArMTAzMiw3IEBACiAJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCQlpZiAoIXJlcV9wa3QpIHsKLQkJCWRiZygiJXM6IE5VTEwgcmVxX3BrdFxuIiwgX19mdW5jX18pOworCQkJZGJnKCIlczogTlVMTCByZXFfcGt0IiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICgocmVxX3BrdC0+YlJlcXVlc3RUeXBlID09IDB4QTEpICYmCkBAIC0xMjExLDExICsxMjU4LDE5IEBACiBzdGF0aWMgaW50IG9wdGlvbl9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPQorCQkoc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKikgc2VyaWFsLT5wcml2YXRlOwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlpbnQgaWZOdW0gPSBzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAlpbnQgdmFsID0gMDsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCisJaWYgKGlzX2JsYWNrbGlzdGVkKGlmTnVtLCBpbnRmZGF0YS0+YmxhY2tsaXN0X2luZm8pID09CisJCQkJCQlPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUCkgeworCQlkYmcoIk5vIHNlbmRfc2V0dXAgb24gYmxhY2tsaXN0ZWQgaW50ZXJmYWNlICMlZFxuIiwgaWZOdW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWlmIChwb3J0ZGF0YS0+ZHRyX3N0YXRlKQpAQCAtMTQwMSw3ICsxNDU2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJCWRiZygiJXM6IE5vIGludGVycnVwdCBVUkIgZm9yIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBpKTsKKwkJCWRiZygiJXM6IE5vIGludGVycnVwdCBVUkIgZm9yIHBvcnQgJWQiLCBfX2Z1bmNfXywgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCQllcnIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfTk9JTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCBjNjQ0ZTI2Li5kZWVhY2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgT1RJNjg1OF9BVVRIT1IgIlRvbWFzeiBNaWNoYWwgTHVrYXN6ZXdza2kgPEZJWE1FQEZJWE1FPiIKICNkZWZpbmUgT1RJNjg1OF9WRVJTSU9OICIwLjEiCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShPVEk2ODU4X1ZFTkRPUl9JRCwgT1RJNjg1OF9QUk9EVUNUX0lEKSB9LAogCXsgfQogfTsKQEAgLTMwMiw3ICszMDIsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBwcml2LT5wb3J0OwogCWludCBjb3VudCA9IDAsIHJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgYWxsb3c7CisJdTggKmFsbG93OwogCiAJZGJnKCIlcyhwb3J0ID0gJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTMyMSwxMyArMzIxLDIwIEBACiAJCWNvdW50ID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKIAogCWlmIChjb3VudCAhPSAwKSB7CisJCWFsbG93ID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhbGxvdykgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKToga21hbGxvYyBmYWlsZWRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQogCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCQlPVEk2ODU4X1JFUV9UX0NIRUNLX1RYQlVGRiwKIAkJCQlPVEk2ODU4X1JFUV9DSEVDS19UWEJVRkYsCi0JCQkJY291bnQsIDAsICZhbGxvdywgMSwgMTAwKTsKLQkJaWYgKHJlc3VsdCAhPSAxIHx8IGFsbG93ICE9IDApCisJCQkJY291bnQsIDAsIGFsbG93LCAxLCAxMDApOworCQlpZiAocmVzdWx0ICE9IDEgfHwgKmFsbG93ICE9IDApCiAJCQljb3VudCA9IDA7CisJCWtmcmVlKGFsbG93KTsKIAl9CiAKIAlpZiAoY291bnQgPT0gMCkgewpAQCAtNTc4LDkgKzU4NSw2IEBACiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKIAotCWlmIChwb3J0LT5wb3J0LmNvdW50ICE9IDEpCi0JCXJldHVybiAwOwotCiAJYnVmID0ga21hbGxvYyhPVEk2ODU4X0NUUkxfUEtUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChidWYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiBvdXQgb2YgbWVtb3J5IVxuIiwgX19mdW5jX18pOwpAQCAtOTI3LDEwICs5MzEsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChzdGF0dXMgIT0gMCkgewotCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKLQkJCWRiZygiJXMoKTogcG9ydCBpcyBjbG9zZWQsIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJLyoKIAkJaWYgKHN0YXR1cyA9PSAtRVBST1RPKSB7CiAJCQkqIFBMMjMwMyBteXN0ZXJpb3VzbHkgZmFpbHMgd2l0aCAtRVBST1RPIHJlc2NoZWR1bGUKQEAgLTk1NCwxNCArOTU0LDEyIEBACiAJfQogCXR0eV9rcmVmX3B1dCh0dHkpOwogCi0JLyogc2NoZWR1bGUgdGhlIGludGVycnVwdCB1cmIgaWYgd2UgYXJlIHN0aWxsIG9wZW4gKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCAhPSAwKSB7Ci0JCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCwiCi0JCQkJCSIgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCQl9CisJLyogc2NoZWR1bGUgdGhlIGludGVycnVwdCB1cmIgKi8KKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0ICE9IDAgJiYgcmVzdWx0ICE9IC1FUEVSTSkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCwiCisJCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggOWVjMWE0OS4uNzNkNWYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtNTAsNyArNTAsNyBAQAogCWNoYXIJCSpidWZfcHV0OwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9SU0FRMikgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfRENVMTEpIH0sCkBAIC00NTEsNyArNDUxLDYgQEAKIAkJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAogCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OwotCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCIKQEAgLTc2OSw3ICs3NjgsNiBAQAogCQlwbDIzMDNfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmdG1wX3Rlcm1pb3MpOwogCiAJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX2Z1bmNfXyk7Ci0JcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIgpAQCAtNzc5LDcgKzc3Nyw2IEBACiAJfQogCiAJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKLQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCkBAIC04OTUsMTAgKzg5MiwyMyBAQAogc3RhdGljIGludCBwbDIzMDNfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXI7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCIlcyAoJWQpIGNtZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ0dTRVJJQUw6CisJCW1lbXNldCgmc2VyLCAwLCBzaXplb2Ygc2VyKTsKKwkJc2VyLnR5cGUgPSBQT1JUXzE2NjU0OworCQlzZXIubGluZSA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJCXNlci5wb3J0ID0gcG9ydC0+bnVtYmVyOworCQlzZXIuYmF1ZF9iYXNlID0gNDYwODAwOworCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmc2VyLCBzaXplb2Ygc2VyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCiAJY2FzZSBUSU9DTUlXQUlUOgogCQlkYmcoIiVzICglZCkgVElPQ01JV0FJVCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKIAkJcmV0dXJuIHdhaXRfbW9kZW1faW5mbyhwb3J0LCBhcmcpOwpAQCAtMTA0Miw3ICsxMDUyLDYgQEAKIAkJdHR5X2ZsYWcgPSBUVFlfRlJBTUU7CiAJZGJnKCIlcyAtIHR0eV9mbGFnID0gJWQiLCBfX2Z1bmNfXywgdHR5X2ZsYWcpOwogCi0JdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGggKyAxKTsKIAkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCiAJaWYgKGxpbmVfc3RhdHVzICYgVUFSVF9PVkVSUlVOX0VSUk9SKQogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKQEAgLTEwNzIsMTYgKzEwODEsMTEgQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJZGJnKCIlcyAtIHVyYiBzdGF0dXMgPSAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwotCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKLQkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJaWYgKHN0YXR1cyA9PSAtRVBST1RPKSB7CiAJCQkvKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlCiAJCQkgKiB0aGUgcmVhZCAqLwogCQkJZGJnKCIlcyAtIGNhdWdodCAtRVBST1RPLCByZXN1Ym1pdHRpbmcgdGhlIHVyYiIsCiAJCQkgICAgX19mdW5jX18pOwotCQkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAocmVzdWx0KQogCQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCIKQEAgLTExMDgsMTUgKzExMTIsMTAgQEAKIAl9CiAJdHR5X2tyZWZfcHV0KHR0eSk7CiAJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKLQkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmciCi0JCQkJIiByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCX0KLQotCXJldHVybjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FUEVSTSkKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyIKKwkJCSIgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQgcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtMTE0Niw3ICsxMTQ1LDYgQEAKIAkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCiAJCSAgICBzdGF0dXMpOwogCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxOwotCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQogCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyB3cml0ZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MzYyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBRdWFsY29tbSBVU0IgQXV4aWxpYXJ5IFNlcmlhbCBQb3J0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRGV2aWNlcyBsaXN0ZWQgaGVyZSB1c3VhbGx5IHByb3ZpZGUgYSBDREMgQUNNIHBvcnQgb24gd2hpY2ggbm9ybWFsIG1vZGVtCisgKiBBVCBjb21tYW5kcyBhbmQgUFBQIGNhbiBiZSB1c2VkLiAgQnV0IHdoZW4gdGhhdCBwb3J0IGlzIGluLXVzZSBieSBQUFAgaXQKKyAqIGNhbm5vdCBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IGZvciBzdGF0dXMgb3Igc2lnbmFsIHN0cmVuZ3RoLiAgSW5zdGVhZCwgdGhlCisgKiBwb3J0cyBoZXJlIGNhbiBiZSBxdWVyaWVkIGZvciB0aGF0IGluZm9ybWF0aW9uIHVzaW5nIHRoZSBRdWFsY29tbSBETQorICogcHJvdG9jb2wuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKy8qIE5PVEU6IGZvciBub3csIG9ubHkgdXNlIHRoaXMgZHJpdmVyIGZvciBkZXZpY2VzIHRoYXQgcHJvdmlkZSBhIENEQy1BQ00gcG9ydAorICogZm9yIG5vcm1hbCBBVCBjb21tYW5kcywgYnV0IGFsc28gcHJvdmlkZSBzZWNvbmRhcnkgVVNCIGludGVyZmFjZXMgZm9yIHRoZQorICogUUNETS1jYXBhYmxlIHBvcnRzLiAgRGV2aWNlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgQ0RDLUFDTSBwb3J0IHNob3VsZAorICogcHJvYmFibHkgYmUgZHJpdmVuIGJ5IG9wdGlvbi5rby4KKyAqLworCisvKiBVVFN0YXJjb20vUGFudGVjaC9DdXJpdGVsIGRldmljZXMgKi8KKyNkZWZpbmUgVVRTVEFSQ09NX1ZFTkRPUl9JRAkJCTB4MTA2YworI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9QQzU3NDAJCTB4MzcwMQorI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9QQzU3NTAJCTB4MzcwMiAvKiBha2EgUGFudGVjaCBQWC01MDAgKi8KKyNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNTAJCQkweDM3MTEKKyNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfVjEJCTB4MzcxMgorI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMgkJMHgzNzE0CisjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X0FMTFRFTAkJMHgzNzE1CisKKy8qIENNT1RFQ0ggZGV2aWNlcyAqLworI2RlZmluZSBDTU9URUNIX1ZFTkRPUl9JRAkJCTB4MTZkOAorI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfQ0RVNTUwCQkJMHg1NTUzCisjZGVmaW5lIENNT1RFQ0hfUFJPRFVDVF9DRFg2NTAJCQkweDY1MTIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBVVFNUQVJDT01fUFJPRFVDVF9QQzU3NDAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBVVFNUQVJDT01fUFJPRFVDVF9QQzU3NTAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBVVFNUQVJDT01fUFJPRFVDVF9VTTE1MCwgMHhmZiwgMHgwMCwgMHgwMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFVUU1RBUkNPTV9WRU5ET1JfSUQsIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YxLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfVjIsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9BTExURUwsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhDTU9URUNIX1ZFTkRPUl9JRCwgQ01PVEVDSF9QUk9EVUNUX0NEVTU1MCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKENNT1RFQ0hfVkVORE9SX0lELCBDTU9URUNIX1BST0RVQ1RfQ0RYNjUwLCAweGZmLCAweGZmLCAweDAwKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcWNhdXhfZHJpdmVyID0geworCS5uYW1lID0JCSJxY2F1eCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBxY2F1eF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJxY2F1eCIsCisJfSwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9wb3J0cyA9CQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcWNhdXhfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZxY2F1eF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZxY2F1eF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNhdXhfZGV2aWNlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWNhdXhfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZxY2F1eF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNhdXhfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQocWNhdXhfaW5pdCk7Cittb2R1bGVfZXhpdChxY2F1eF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKaW5kZXggNzUyOGI4ZC4uMzEwZmY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMSl9LAkvKiBBY2VyIEdvYmkgUURMIGRldmljZSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjEyKX0sCS8qIEFjZXIgR29iaSBNb2RlbSBEZXZpY2UgKi8KIAl7VVNCX0RFVklDRSgweDAzZjAsIDB4MWYxZCl9LAkvKiBIUCB1bjI0MDAgR29iaSBNb2RlbSBEZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKaW5kZXggOTUxZWEwYy4uY2I4MTk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkRyaXZlciBmb3IgU2llbWVucyBVU0IvTVBJIGFkYXB0ZXIiCiAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAkvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWQgZm9yIDZFUzctOTcyLTBDQjIwLTBYQTAgKi8KIAl7IFVTQl9ERVZJQ0UoMHg5MDgsIDB4MDAwNCkgfSwKIAl7IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggM2ViNjE0My4uMzRlNmY4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCS5pZmFjZWluZm8gPSBkaXJlY3RfaXBfbm9uX3NlcmlhbF9pZmFjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwRjNELCAweDAxMTIpIH0sIC8qIEFpcnByaW1lL1NpZXJyYSBQQyA1MjIwICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxQjFEKSB9LAkvKiBIUCBldjIyMDAgYS5rLmEgTUM1NzIwICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxRTFEKSB9LAkvKiBIUCBoczIzMDAgYS5rLmEgTUM4Nzc1ICovCkBAIC0zMDQsMTYgKzMwNCw2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpZXJyYV9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgICAgPSAic2llcnJhIiwKLQkucHJvYmUgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKLQkuaWRfdGFibGUgICA9IGlkX3RhYmxlLAotCS5ub19keW5hbWljX2lkID0gCTEsCi0JLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKLX07CiAKIHN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlIHsKIAlzcGlubG9ja190IGxvY2s7CS8qIGxvY2sgdGhlIHN0cnVjdHVyZSAqLwpAQCAtNDc3LDcgKzQ2Nyw3IEBACiBzdGF0aWMgaW50IHNpZXJyYV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02MDQsMTQgKzU5NCwxNSBAQAogCX0gZWxzZSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQkJaWYgKHR0eSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKLQkJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQotCQkJdHR5X2tyZWZfcHV0KHR0eSk7Ci0JCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LAorCQkJCQlfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBlbXB0eSByZWFkIHVyYiIKIAkJCQkiIHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7CkBAIC02MTksMTAgKzYxMCwxMCBAQAogCX0KIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVQRVJNKSB7CisJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRVBFUk0pIHsKIAkJdXNiX21hcmtfbGFzdF9idXN5KHBvcnQtPnNlcmlhbC0+ZGV2KTsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVycikKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVQRVJNKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAicmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiIKIAkJCQkiKCVkKVxuIiwgZXJyKTsKIAl9CkBAIC02ODEsMTEgKzY3MiwxMSBAQAogCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyBJUlEgZGF0YSAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CisJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CiAJCXVzYl9tYXJrX2xhc3RfYnVzeShzZXJpYWwtPmRldik7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIgJiYgZXJyICE9IC1FUEVSTSkKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiByZXN1Ym1pdCBpbnRyIHVyYiAiCiAJCQkJImZhaWxlZC4gKCVkKVxuIiwgX19mdW5jX18sIGVycik7CiAJfQpAQCAtMTA2MSwxMSArMTA1MiwzMSBAQAogCiAJcmV0dXJuIGVjID8gLUVJTyA6IDA7CiB9CisKK3N0YXRpYyBpbnQgc2llcnJhX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gdXNiX3NlcmlhbF9yZXN1bWUoaW50Zik7Cit9CiAjZWxzZQogI2RlZmluZSBzaWVycmFfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIHNpZXJyYV9yZXN1bWUgTlVMTAorI2RlZmluZSBzaWVycmFfcmVzZXRfcmVzdW1lIE5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2llcnJhX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9ICJzaWVycmEiLAorCS5wcm9iZSAgICAgID0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCAgICA9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IHVzYl9zZXJpYWxfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPSBzaWVycmFfcmVzZXRfcmVzdW1lLAorCS5pZF90YWJsZSAgID0gaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAorfTsKKwogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzaWVycmFfZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciA9CVRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggMWU1ODIyMC4uNWQzOTE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIFNQQ1A4eDVfODM1X1ZJRAkJMHgwNGZjCiAjZGVmaW5lIFNQQ1A4eDVfODM1X1BJRAkJMHgwMjMxCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShTUENQOHg1X1BISUxJUFNfVklEICwgU1BDUDh4NV9QSElMSVBTX1BJRCl9LAogCXsgVVNCX0RFVklDRShTUENQOHg1X0lOVEVSTUFUSUNfVklELCBTUENQOHg1X0lOVEVSTUFUSUNfUElEKX0sCiAJeyBVU0JfREVWSUNFKFNQQ1A4eDVfODM1X1ZJRCwgU1BDUDh4NV84MzVfUElEKX0sCkBAIC02MDksNyArNjA5LDcgQEAKIAlpZiAoaSA8IDApCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBVQVJUIGZvcm1hdCAlI3ggZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKIAkJCXVhcnRkYXRhLCBpKTsKLQlkYmcoIjB4MjE6MHg0MDowOjAgICVkXG4iLCBpKTsKKwlkYmcoIjB4MjE6MHg0MDowOjAgICVkIiwgaSk7CiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCS8qIGVuYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KQEAgLTY3Nyw3ICs2NzcsNiBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAJaW50IHJlc3VsdCA9IHVyYi0+c3RhdHVzOwogCXU4IHN0YXR1czsKIAljaGFyIHR0eV9mbGFnOwpAQCAtNjg3LDggKzY4Niw2IEBACiAKIAkvKiBjaGVjayB0aGUgdXJiIHN0YXR1cyAqLwogCWlmIChyZXN1bHQpIHsKLQkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQotCQkJcmV0dXJuOwogCQlpZiAocmVzdWx0ID09IC1FUFJPVE8pIHsKIAkJCS8qIHNwY3A4eDUgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyAqLwogCQkJLyogcmVzY2hlZHVsZSB0aGUgcmVhZCAqLwpAQCAtNzI2LDI2ICs3MjMsMjAgQEAKIAogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoICsgMSk7CiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwotCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyArK2kpCi0JCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdHR5X2ZsYWcpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KIAl0dHlfa3JlZl9wdXQodHR5KTsKIAotCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiAsIEdGUF9BVE9NSUMpOwotCQlpZiAocmVzdWx0KQotCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIgJWRcbiIsCi0JCQkJcmVzdWx0KTsKLQl9Ci0KLQlyZXR1cm47CisJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCAqLworCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiICwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIgJWRcbiIsIHJlc3VsdCk7CiB9CiAKIC8qIGdldCBkYXRhIGZyb20gcmluZyBidWZmZXIgYW5kIHRoZW4gd3JpdGUgdG8gdXNiIGJ1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCmluZGV4IGIyODJjMGYuLjcyMzk4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNWUwLCAweDA2MDApIH0sCiAJeyB9LAogfTsKQEAgLTUxLDcgKzUxLDYgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmVzdWx0OwotCWludCBhdmFpbGFibGVfcm9vbSA9IDA7CiAJaW50IGRhdGFfbGVuZ3RoOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTg5LDEzICs4OCw4IEBACiAJCSAqLwogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewotCQkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCi0JCQkJCQkJZGF0YV9sZW5ndGgpOwotCQkJaWYgKGF2YWlsYWJsZV9yb29tKSB7Ci0JCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksICZkYXRhWzFdLAotCQkJCQkJICAgICAgIGF2YWlsYWJsZV9yb29tKTsKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksICZkYXRhWzFdLCBkYXRhX2xlbmd0aCk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggMWU5ZGM4OC4uMGFmZTVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0xMjcxLDE0ICsxMjcxLDEzIEBACiAJaW50IGNudDsKIAogCWRvIHsKLQkJY250ID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpOworCQljbnQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKIAkJaWYgKGNudCA8IGxlbmd0aCkgewogCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsCiAJCQkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKIAkJCWlmIChjbnQgPT0gMCkKIAkJCQlicmVhazsKIAkJfQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgY250KTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJZGF0YSArPSBjbnQ7CiAJCWxlbmd0aCAtPSBjbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCAzM2M4NWY3Li4zODczNjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTM1OCwxMCArMzU4LDYgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY291bnQpOwogCi0JLyogY291bnQgaXMgbWFuYWdlZCB1bmRlciB0aGUgbXV0ZXggbG9jayBmb3IgdGhlIHR0eSBzbyBjYW5ub3QKLQkgICBkcm9wIHRvIHplcm8gdW50aWwgYWZ0ZXIgdGhlIGxhc3QgY2xvc2UgY29tcGxldGVzICovCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7Ci0KIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZSh0dHksIHBvcnQsIGJ1ZiwgY291bnQpOwogCkBAIC0zNzMsNyArMzY5LDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KIAlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9yb29tKHR0eSk7CiB9CkBAIC0zODEsNyArMzc2LDcgQEAKIHN0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCWRiZygiJXMgPSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIGlmIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCB0aGVuIGFueSByZW1haW5pbmcgY2hhcmFjdGVycwogCSAgIGZlbGwgb3V0IG9mIHRoZSBjb25uZWN0b3IgOykgKi8KQEAgLTM5Niw3ICszOTEsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlXQVJOX09OKCFwb3J0LT5wb3J0LmNvdW50KTsKIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUpCiAJCXBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUodHR5KTsKQEAgLTQwNyw3ICs0MDEsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlXQVJOX09OKCFwb3J0LT5wb3J0LmNvdW50KTsKIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dW50aHJvdHRsZSkKIAkJcG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKHR0eSk7CkBAIC00MjEsOCArNDE0LDYgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKIAotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwotCiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmlvY3RsKSB7CkBAIC00MzcsNyArNDI4LDYgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKQpAQCAtNDUyLDcgKzQ0Miw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bCkKQEAgLTUxMyw3ICs1MDIsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KQogCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbWdldCh0dHksIGZpbGUpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtNTI2LDcgKzUxNCw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21zZXQpCiAJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KHR0eSwgZmlsZSwgc2V0LCBjbGVhcik7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKaW5kZXggN2I1YmZjNC4uMjUyY2MyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwpAQCAtMjksNyArMjksNyBAQAogCTB4ZmYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNTI1LCAweDEyN2EpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggYWQxZjkyMy4uMDk0OTQyNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXByaXYtPm91dHN0YW5kaW5nX3VyYnMrKzsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQgKiAyIC8gMykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTUwMywxMyArNTAzLDkgQEAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodHR5KSB7Ci0JCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKLQkJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJaWYgKGF2YWlsYWJsZV9yb29tKSB7Ci0JCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCi0JCQkJCQkJYXZhaWxhYmxlX3Jvb20pOwotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKQEAgLTgwNywxMCArODAzLDE0IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+ZGV2LT5kZXY7CiAJaW50IHJlc3VsdDsKLQl1OCBkYXRhOworCXU4ICpkYXRhOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAorCWRhdGEgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKgogCSAqIE5vdGUgdGhhdCBQRUctMzAwIHNlcmllcyBkZXZpY2VzIGV4cGVjdCB0aGUgZm9sbG93aW5nIHR3byBjYWxscy4KIAkgKi8KQEAgLTgxOCwzNiArODE4LDQyIEBACiAJLyogZ2V0IHRoZSBjb25maWcgbnVtYmVyICovCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSAgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTiwgVVNCX0RJUl9JTiwKLQkJCQkgIDAsIDAsICZkYXRhLCAxLCAzMDAwKTsKKwkJCQkgIDAsIDAsIGRhdGEsIDEsIDMwMDApOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGZhaWxlZDogJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JCXJldHVybiByZXN1bHQ7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAocmVzdWx0ICE9IDEpIHsKIAkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogZ2V0IHRoZSBpbnRlcmZhY2UgbnVtYmVyICovCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSAgVVNCX1JFUV9HRVRfSU5URVJGQUNFLAogCQkJCSAgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJCQkJICAwLCAwLCBkYXRhLCAxLCAzMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBnZXQgaW50ZXJmYWNlIG51bWJlciBmYWlsZWQ6ICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHJlc3VsdCAhPSAxKSB7CiAJCWRldl9lcnIoZGV2LAogCQkJIiVzOiBnZXQgaW50ZXJmYWNlIG51bWJlciBiYWQgcmV0dXJuIGxlbmd0aDogJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JCXJldHVybiAtRUlPOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXR1cm4gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7CisJcmVzdWx0ID0gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7CitvdXQ6CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IHRyZW9fYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdml2b3BheS1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXZvcGF5LXNlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTlkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdml2b3BheS1zZXJpYWwuYwpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwOSBPdXRwb3N0IEVtYmVkZGVkLCBMTEMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wIgorI2RlZmluZSBEUklWRVJfREVTQyAiVmlWT3BheSBVU0IgU2VyaWFsIERyaXZlciIKKworI2RlZmluZSBWSVZPUEFZX1ZFTkRPUl9JRCAweDFkNWYKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJLyogVmlWT3BheSA4ODAwICovCisJeyBVU0JfREVWSUNFKFZJVk9QQVlfVkVORE9SX0lELCAweDEwMDQpIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpdm9wYXlfc2VyaWFsX2RyaXZlciA9IHsKKwkubmFtZSA9CQkJInZpdm9wYXktc2VyaWFsIiwKKwkucHJvYmUgPQkJdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgdml2b3BheV9zZXJpYWxfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkidml2b3BheS1zZXJpYWwiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZ2aXZvcGF5X3NlcmlhbF9kcml2ZXIsCisJLm51bV9wb3J0cyA9CQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdml2b3BheV9zZXJpYWxfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmdml2b3BheV9zZXJpYWxfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmdml2b3BheV9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICBEUklWRVJfREVTQyAiXG4iKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ2aXZvcGF5X3NlcmlhbF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZpdm9wYXlfc2VyaWFsX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmdml2b3BheV9zZXJpYWxfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnZpdm9wYXlfc2VyaWFsX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHZpdm9wYXlfc2VyaWFsX2luaXQpOworbW9kdWxlX2V4aXQodml2b3BheV9zZXJpYWxfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkZvcmVzdCBCb25kIDxmb3Jlc3QuYm9uZEBvdXRwb3N0ZW1iZWRkZWQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCAxMDkzZDJlLi4xMmVkODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0xMTEsMTcgKzExMSwxNyBAQAogICAgc2VwYXJhdGUgSUQgdGFibGVzLCBhbmQgdGhlbiBhIHRoaXJkIHRhYmxlIHRoYXQgY29tYmluZXMgdGhlbQogICAganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2YgZXhwb3J0aW5nIHRoZSBhdXRvbG9hZGluZyBpbmZvcm1hdGlvbi4KICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfc3RkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZFtdID0gewogCXsgVVNCX0RFVklDRShDT05ORUNUX1RFQ0hfVkVORE9SX0lELCBDT05ORUNUX1RFQ0hfV0hJVEVfSEVBVF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3ByZXJlbnVtZXJhdGlvbiBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9wcmVyZW51bWVyYXRpb25bXSA9IHsKIAl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX0ZBS0VfV0hJVEVfSEVBVF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9XSElURV9IRUFUX0lEKSB9LAogCXsgVVNCX0RFVklDRShDT05ORUNUX1RFQ0hfVkVORE9SX0lELCBDT05ORUNUX1RFQ0hfRkFLRV9XSElURV9IRUFUX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0xNDkyLDIxICsxNDkyLDkgQEAKIAkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKIAkJdXJiID0gd3JhcC0+dXJiOwogCi0JCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQlpbnQgbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LAotCQkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQkvKiBUaGlzIHN0dWZmIGNhbiBnbyBhd2F5IG5vdyBJIHN1c3BlY3QgKi8KLQkJCWlmICh1bmxpa2VseShsZW4gPCB1cmItPmFjdHVhbF9sZW5ndGgpKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQkJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJfcSk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCQkJc2NoZWR1bGVfd29yaygmaW5mby0+cnhfd29yayk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbik7Ci0JCQlzZW50ICs9IGxlbjsKLQkJfQorCQlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkKKwkJCXNlbnQgKz0gdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCA4MGU2NWYyLi4xOThiYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJZ290byBmYWlsMTsKIAogCW9uZXRvdWNoLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBPTkVUT1VDSF9QS1RfTEVOLAotCQkJCQkgIEdGUF9BVE9NSUMsICZvbmV0b3VjaC0+ZGF0YV9kbWEpOworCQkJCQkgIEdGUF9LRVJORUwsICZvbmV0b3VjaC0+ZGF0YV9kbWEpOwogCWlmICghb25ldG91Y2gtPmRhdGEpCiAJCWdvdG8gZmFpbDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwppbmRleCBlNWU2ZGYzLi40Y2MwMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCkBAIC0xMzMsMTUgKzEzMywxNSBAQAogCiAJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfTUFYX1NFQ1RPUlNfTUlOKQogCQkJbWF4X3NlY3RvcnMgPSBQQUdFX0NBQ0hFX1NJWkUgPj4gOTsKLQkJaWYgKHF1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUpID4gbWF4X3NlY3RvcnMpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJaWYgKHF1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUpID4gbWF4X3NlY3RvcnMpCisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgbWF4X3NlY3RvcnMpOwogCX0gZWxzZSBpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKIAkJLyogVGFwZXMgbmVlZCBtdWNoIGhpZ2hlciBtYXhfc2VjdG9yIGxpbWl0cywgc28ganVzdAogCQkgKiByYWlzZSBpdCB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSAoNCBHQiAvIDUxMikgYW5kCiAJCSAqIGxldCB0aGUgcXVldWUgc2VnbWVudCBzaXplIHNvcnQgb3V0IHRoZSByZWFsIGxpbWl0LgogCQkgKi8KLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDB4N0ZGRkZGKTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDB4N0ZGRkZGKTsKIAl9CiAKIAkvKiBTb21lIFVTQiBob3N0IGNvbnRyb2xsZXJzIGNhbid0IGRvIERNQTsgdGhleSBoYXZlIHRvIHVzZSBQSU8uCkBAIC00ODQsNyArNDg0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHF1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpOwogfQogCiAvKiBJbnB1dCByb3V0aW5lIGZvciB0aGUgc3lzZnMgbWF4X3NlY3RvcnMgZmlsZSAqLwpAQCAtNDk0LDkgKzQ5NCw5IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAl1bnNpZ25lZCBzaG9ydCBtczsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWh1IiwgJm1zKSA+IDAgJiYgbXMgPD0gU0NTSV9ERUZBVUxUX01BWF9TRUNUT1JTKSB7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBtcyk7Ci0JCXJldHVybiBzdHJsZW4oYnVmKTsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwKSB7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBtcyk7CisJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CQogfQpAQCAtNTM5LDcgKzUzOSw3IEBACiAJLnNsYXZlX2NvbmZpZ3VyZSA9CQlzbGF2ZV9jb25maWd1cmUsCiAKIAkvKiBsb3RzIG9mIHNnIHNlZ21lbnRzIGNhbiBiZSBoYW5kbGVkICovCi0JLnNnX3RhYmxlc2l6ZSA9CQkJU0dfQUxMLAorCS5zZ190YWJsZXNpemUgPQkJCVNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTLAogCiAJLyogbGltaXQgdGhlIHRvdGFsIHNpemUgb2YgYSB0cmFuc2ZlciB0byAxMjAgS0IgKi8KIAkubWF4X3NlY3RvcnMgPSAgICAgICAgICAgICAgICAgIDI0MCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggYjYyYTI4OC4uYmQzZjQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKQEAgLTE2MjgsMTAgKzE2MjgsMTAgQEAKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKLQlpZiAoIChyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgCi0JCQlyZWdpc3RlcnMsIGRhdGEsIDcpKSAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCXJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCByZWdpc3RlcnMsIGRhdGEsIDcpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAkvKgogCSAqIFdyaXRlIHRoZSAxMi1ieXRlIGNvbW1hbmQgaGVhZGVyLgpAQCAtMTY0MywxMiArMTY0MywxMSBAQAogCSAqIEFUIFNQRUVEIDQgSVMgVU5SRUxJQUJMRSEhIQogCSAqLwogCi0JaWYgKChyZXN1bHQgPSB1c2JhdF93cml0ZV9ibG9jayh1cywKLQkJCVVTQkFUX0FUQSwgc3JiLT5jbW5kLCAxMiwKLQkJCQkoc3JiLT5jbW5kWzBdPT1HUENNRF9CTEFOSyA/IDc1IDogMTApLCAwKSAhPQotCQkJICAgICBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkpIHsKKwlyZXN1bHQgPSB1c2JhdF93cml0ZV9ibG9jayh1cywgVVNCQVRfQVRBLCBzcmItPmNtbmQsIDEyLAorCQkJCSAgIHNyYi0+Y21uZFswXSA9PSBHUENNRF9CTEFOSyA/IDc1IDogMTAsIDApOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAkvKiBJZiB0aGVyZSBpcyByZXNwb25zZSBkYXRhIHRvIGJlIHJlYWQgaW4gdGhlbiBkbyBpdCBoZXJlLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBjYzMxM2QxLi40NjgwMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTEyOTcsNiArMTI5OSwxMCBAQAogewogCWludCByZXN1bHQ7CiAKKwkvKmZvciB0aGVzZSBkZXZpY2VzIHdlIG11c3QgdXNlIHRoZSBjbGFzcyBzcGVjaWZpYyBtZXRob2QgKi8KKwlpZiAodXMtPnB1c2JfZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfTU9SUEhTKQorCQlyZXR1cm4gLUVQRVJNOworCiAJcmVzdWx0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1cy0+cHVzYl9kZXYsIHVzLT5wdXNiX2ludGYpOwogCWlmIChyZXN1bHQgPCAwKQogCQlVU19ERUJVR1AoInVuYWJsZSB0byBsb2NrIGRldmljZSBmb3IgcmVzZXQ6ICVkXG4iLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggNDk1NzVmYmEuLjk4YjU0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTE0Nyw4ICsxMTQ3LDggQEAKIAkJMCApLAogCiAvKiBSZXBvcnRlZCBieSBKYW4gRHVtb24gPGouZHVtb25Ab3B0aW9uLmNvbT4KLSAqIFRoaXMgZGV2aWNlICh3cm9uZ2x5KSBoYXMgYSB2ZW5kb3Itc3BlY2lmaWMgZGV2aWNlIGRlc2NyaXB0b3IuCi0gKiBUaGUgZW50cnkgaXMgbmVlZGVkIHNvIHVzYi1zdG9yYWdlIGNhbiBiaW5kIHRvIGl0J3MgbWFzcy1zdG9yYWdlCisgKiBUaGVzZSBkZXZpY2VzICh3cm9uZ2x5KSBoYXZlIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZSBkZXNjcmlwdG9yLgorICogVGhlc2UgZW50cmllcyBhcmUgbmVlZGVkIHNvIHVzYi1zdG9yYWdlIGNhbiBiaW5kIHRvIHRoZWlyIG1hc3Mtc3RvcmFnZQogICogaW50ZXJmYWNlIGFzIGFuIGludGVyZmFjZSBkcml2ZXIgKi8KIFVOVVNVQUxfREVWKCAweDBhZjAsIDB4NzUwMSwgMHgwMDAwLCAweDAwMDAsCiAJCSJPcHRpb24iLApAQCAtMTE1Niw2ICsxMTU2LDkwIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQkwICksCiAKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4NzcwMSwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDQ1MSBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg3NzA2LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwNDUxIFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDc5MDEsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA0NTIgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4N0EwMSwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDQ2MSBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg3QTA1LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwNDYxIFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDgzMDAsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDAzM3ggU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4ODMwMiwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDMzeCBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg4MzA0LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwMzN4IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweGMxMDAsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA3MHggU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4ZDA1NywgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMTUwNSBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHhkMDU4LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAxNTA5IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweGQxNTcsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDE1MTUgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4ZDI1NywgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMTIxNSBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHhkMzU3LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAxNTA1IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCiAvKiBSZXBvcnRlZCBieSBCZW4gRWZyb3MgPGJlbkBwYy1kb2N0b3IuY29tPiAqLwogVU5VU1VBTF9ERVYoIDB4MGJjMiwgMHgzMDEwLCAweDAwMDAsIDB4MDAwMCwKIAkJIlNlYWdhdGUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggZTlmOTk1NC4uYmJlZWI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC03OCw3ICs3OCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyIGZvciBMaW51eCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGF5X3VzZSA9IDU7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGF5X3VzZSA9IDE7CiBtb2R1bGVfcGFyYW0oZGVsYXlfdXNlLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlbGF5X3VzZSwgInNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHVzaW5nIGEgbmV3IGRldmljZSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IGIxZTU3OWM1Li42MTUyMjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBVU0JfU0tFTF9QUk9EVUNUX0lECTB4ZmZmMAogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2tlbF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNrZWxfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMjVlYWU0MC4uNTFhOGUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJa3pmcmVlKGNiYWYpOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2JhZl9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNiYWZfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9JTlRFUkZBQ0VfSU5GTygweGVmLCAweDAzLCAweDAxKSwgfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCmluZGV4IGRjZWQ0MTkuLjFjOTE4MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKQEAgLTg2OCw3ICs4NjgsNyBAQAogICogcmVmZXJlbmNlIHRoYXQgd2UnbGwgZHJvcC4KICAqCiAgKiBGaXJzdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgZGV2aWNlIGlzIGEgV1VTQiBkZXZpY2UgKGVsc2Ugd2UKLSAqIGlnbm9yZSBpdCkuIEZvciB0aGF0IHdlIHVzZSB0aGUgc3BlZWQgc2V0dGluZyAoVVNCX1NQRUVEX1ZBUklBQkxFKQorICogaWdub3JlIGl0KS4gRm9yIHRoYXQgd2UgdXNlIHRoZSBzcGVlZCBzZXR0aW5nIChVU0JfU1BFRURfV0lSRUxFU1MpCiAgKiBbRklYTUU6IG1heWJlIHdlJ2QgbmVlZCBzb21ldGhpbmcgbW9yZSBkZWZpbml0aXZlXS4gSWYgc28sIHdlIHRyYWNrCiAgKiBpdCdzIHVzYl9idXNkIGFuZCBmcm9tIHRoZXJlLCB0aGUgV1VTQiBIQy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9tbWMuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL21tYy5jCmluZGV4IDNiNTIxNjEuLjJkODI3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL21tYy5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL21tYy5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCWlmIChtZW1jbXAoY2hpZCwgJnd1c2JfY2toZGlkX3plcm8sIHNpemVvZihjaGlkKSkgPT0gMCkKKwlpZiAobWVtY21wKGNoaWQsICZ3dXNiX2NraGRpZF96ZXJvLCBzaXplb2YoKmNoaWQpKSA9PSAwKQogCQljaGlkID0gTlVMTDsKIAogCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9LY29uZmlnIGIvZHJpdmVycy92aG9zdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTJmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Zob3N0L0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorY29uZmlnIFZIT1NUX05FVAorCXRyaXN0YXRlICJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIE5FVCAmJiBFVkVOVEZEICYmIChUVU4gfHwgIVRVTikgJiYgKE1BQ1ZUQVAgfHwgIU1BQ1ZUQVApICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGUKKwkgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0CisJICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHZob3N0X25ldC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkZDAyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfVkhPU1RfTkVUKSArPSB2aG9zdF9uZXQubwordmhvc3RfbmV0LXkgOj0gdmhvc3QubyBuZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzN2RhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKQEAgLTAsMCArMSw2NjkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLgorICoKKyAqIHZpcnRpby1uZXQgc2VydmVyIGluIGhvc3Qga2VybmVsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ldmVudGZkLmg+CisjaW5jbHVkZSA8bGludXgvdmhvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX21hY3ZsYW4uaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJ2aG9zdC5oIgorCisvKiBNYXggbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGJlZm9yZSByZXF1ZXVlaW5nIHRoZSBqb2IuCisgKiBVc2luZyB0aGlzIGxpbWl0IHByZXZlbnRzIG9uZSB2aXJ0cXVldWUgZnJvbSBzdGFydmluZyBvdGhlcnMuICovCisjZGVmaW5lIFZIT1NUX05FVF9XRUlHSFQgMHg4MDAwMAorCitlbnVtIHsKKwlWSE9TVF9ORVRfVlFfUlggPSAwLAorCVZIT1NUX05FVF9WUV9UWCA9IDEsCisJVkhPU1RfTkVUX1ZRX01BWCA9IDIsCit9OworCitlbnVtIHZob3N0X25ldF9wb2xsX3N0YXRlIHsKKwlWSE9TVF9ORVRfUE9MTF9ESVNBQkxFRCA9IDAsCisJVkhPU1RfTkVUX1BPTExfU1RBUlRFRCA9IDEsCisJVkhPU1RfTkVUX1BPTExfU1RPUFBFRCA9IDIsCit9OworCitzdHJ1Y3Qgdmhvc3RfbmV0IHsKKwlzdHJ1Y3Qgdmhvc3RfZGV2IGRldjsKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHZxc1tWSE9TVF9ORVRfVlFfTUFYXTsKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCBwb2xsW1ZIT1NUX05FVF9WUV9NQVhdOworCS8qIFRlbGxzIHVzIHdoZXRoZXIgd2UgYXJlIHBvbGxpbmcgYSBzb2NrZXQgZm9yIFRYLgorCSAqIFdlIG9ubHkgZG8gdGhpcyB3aGVuIHNvY2tldCBidWZmZXIgZmlsbHMgdXAuCisJICogUHJvdGVjdGVkIGJ5IHR4IHZxIGxvY2suICovCisJZW51bSB2aG9zdF9uZXRfcG9sbF9zdGF0ZSB0eF9wb2xsX3N0YXRlOworfTsKKworLyogUG9wIGZpcnN0IGxlbiBieXRlcyBmcm9tIGlvdmVjLiBSZXR1cm4gbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQuICovCitzdGF0aWMgaW50IG1vdmVfaW92ZWNfaGRyKHN0cnVjdCBpb3ZlYyAqZnJvbSwgc3RydWN0IGlvdmVjICp0bywKKwkJCSAgc2l6ZV90IGxlbiwgaW50IGlvdl9jb3VudCkKK3sKKwlpbnQgc2VnID0gMDsKKwlzaXplX3Qgc2l6ZTsKKwl3aGlsZSAobGVuICYmIHNlZyA8IGlvdl9jb3VudCkgeworCQlzaXplID0gbWluKGZyb20tPmlvdl9sZW4sIGxlbik7CisJCXRvLT5pb3ZfYmFzZSA9IGZyb20tPmlvdl9iYXNlOworCQl0by0+aW92X2xlbiA9IHNpemU7CisJCWZyb20tPmlvdl9sZW4gLT0gc2l6ZTsKKwkJZnJvbS0+aW92X2Jhc2UgKz0gc2l6ZTsKKwkJbGVuIC09IHNpemU7CisJCSsrZnJvbTsKKwkJKyt0bzsKKwkJKytzZWc7CisJfQorCXJldHVybiBzZWc7Cit9CisKKy8qIENhbGxlciBtdXN0IGhhdmUgVFggVlEgbG9jayAqLworc3RhdGljIHZvaWQgdHhfcG9sbF9zdG9wKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlpZiAobGlrZWx5KG5ldC0+dHhfcG9sbF9zdGF0ZSAhPSBWSE9TVF9ORVRfUE9MTF9TVEFSVEVEKSkKKwkJcmV0dXJuOworCXZob3N0X3BvbGxfc3RvcChuZXQtPnBvbGwgKyBWSE9TVF9ORVRfVlFfVFgpOworCW5ldC0+dHhfcG9sbF9zdGF0ZSA9IFZIT1NUX05FVF9QT0xMX1NUT1BQRUQ7Cit9CisKKy8qIENhbGxlciBtdXN0IGhhdmUgVFggVlEgbG9jayAqLworc3RhdGljIHZvaWQgdHhfcG9sbF9zdGFydChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJaWYgKHVubGlrZWx5KG5ldC0+dHhfcG9sbF9zdGF0ZSAhPSBWSE9TVF9ORVRfUE9MTF9TVE9QUEVEKSkKKwkJcmV0dXJuOworCXZob3N0X3BvbGxfc3RhcnQobmV0LT5wb2xsICsgVkhPU1RfTkVUX1ZRX1RYLCBzb2NrLT5maWxlKTsKKwluZXQtPnR4X3BvbGxfc3RhdGUgPSBWSE9TVF9ORVRfUE9MTF9TVEFSVEVEOworfQorCisvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCisgKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLworc3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZuZXQtPmRldi52cXNbVkhPU1RfTkVUX1ZRX1RYXTsKKwl1bnNpZ25lZCBoZWFkLCBvdXQsIGluLCBzOworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX25hbWUgPSBOVUxMLAorCQkubXNnX25hbWVsZW4gPSAwLAorCQkubXNnX2NvbnRyb2wgPSBOVUxMLAorCQkubXNnX2NvbnRyb2xsZW4gPSAwLAorCQkubXNnX2lvdiA9IHZxLT5pb3YsCisJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCisJfTsKKwlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOworCWludCBlcnIsIHdtZW07CisJc2l6ZV90IGhkcl9zaXplOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm47CisKKwl3bWVtID0gYXRvbWljX3JlYWQoJnNvY2stPnNrLT5za193bWVtX2FsbG9jKTsKKwlpZiAod21lbSA+PSBzb2NrLT5zay0+c2tfc25kYnVmKSB7CisJCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CisJCXR4X3BvbGxfc3RhcnQobmV0LCBzb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJdXNlX21tKG5ldC0+ZGV2Lm1tKTsKKwltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKworCWlmICh3bWVtIDwgc29jay0+c2stPnNrX3NuZGJ1ZiAqIDIpCisJCXR4X3BvbGxfc3RvcChuZXQpOworCWhkcl9zaXplID0gdnEtPmhkcl9zaXplOworCisJZm9yICg7OykgeworCQloZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2MoJm5ldC0+ZGV2LCB2cSwgdnEtPmlvdiwKKwkJCQkJIEFSUkFZX1NJWkUodnEtPmlvdiksCisJCQkJCSAmb3V0LCAmaW4sCisJCQkJCSBOVUxMLCBOVUxMKTsKKwkJLyogTm90aGluZyBuZXc/ICBXYWl0IGZvciBldmVudGZkIHRvIHRlbGwgdXMgdGhleSByZWZpbGxlZC4gKi8KKwkJaWYgKGhlYWQgPT0gdnEtPm51bSkgeworCQkJd21lbSA9IGF0b21pY19yZWFkKCZzb2NrLT5zay0+c2tfd21lbV9hbGxvYyk7CisJCQlpZiAod21lbSA+PSBzb2NrLT5zay0+c2tfc25kYnVmICogMyAvIDQpIHsKKwkJCQl0eF9wb2xsX3N0YXJ0KG5ldCwgc29jayk7CisJCQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSh2cSkpKSB7CisJCQkJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBUWDogIgorCQkJICAgICAgICJvdXQgJWQsIGludCAlZFxuIiwgb3V0LCBpbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08uICovCisJCXMgPSBtb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCBoZHJfc2l6ZSwgb3V0KTsKKwkJbXNnLm1zZ19pb3ZsZW4gPSBvdXQ7CisJCWxlbiA9IGlvdl9sZW5ndGgodnEtPmlvdiwgb3V0KTsKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICghbGVuKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGhlYWRlciBsZW4gZm9yIFRYOiAiCisJCQkgICAgICAgIiV6ZCBleHBlY3RlZCAlemRcbiIsCisJCQkgICAgICAgaW92X2xlbmd0aCh2cS0+aGRyLCBzKSwgaGRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJLyogVE9ETzogQ2hlY2sgc3BlY2lmaWMgZXJyb3IgYW5kIGJvbWIgb3V0IHVubGVzcyBFTk9CVUZTPyAqLworCQllcnIgPSBzb2NrLT5vcHMtPnNlbmRtc2coTlVMTCwgc29jaywgJm1zZywgbGVuKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEpOworCQkJdHhfcG9sbF9zdGFydChuZXQsIHNvY2spOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVyciAhPSBsZW4pCisJCQlwcl9lcnIoIlRydW5jYXRlZCBUWCBwYWNrZXQ6ICIKKwkJCSAgICAgICAiIGxlbiAlZCAhPSAlemRcbiIsIGVyciwgbGVuKTsKKwkJdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCgmbmV0LT5kZXYsIHZxLCBoZWFkLCAwKTsKKwkJdG90YWxfbGVuICs9IGxlbjsKKwkJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+PSBWSE9TVF9ORVRfV0VJR0hUKSkgeworCQkJdmhvc3RfcG9sbF9xdWV1ZSgmdnEtPnBvbGwpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnZxLT5tdXRleCk7CisJdW51c2VfbW0obmV0LT5kZXYubW0pOworfQorCisvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCisgKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZuZXQtPmRldi52cXNbVkhPU1RfTkVUX1ZRX1JYXTsKKwl1bnNpZ25lZCBoZWFkLCBvdXQsIGluLCBsb2csIHM7CisJc3RydWN0IHZob3N0X2xvZyAqdnFfbG9nOworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX25hbWUgPSBOVUxMLAorCQkubXNnX25hbWVsZW4gPSAwLAorCQkubXNnX2NvbnRyb2wgPSBOVUxMLCAvKiBGSVhNRTogZ2V0IGFuZCBoYW5kbGUgUlggYXV4IGRhdGEuICovCisJCS5tc2dfY29udHJvbGxlbiA9IDAsCisJCS5tc2dfaW92ID0gdnEtPmlvdiwKKwkJLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCwKKwl9OworCisJc3RydWN0IHZpcnRpb19uZXRfaGRyIGhkciA9IHsKKwkJLmZsYWdzID0gMCwKKwkJLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX05PTkUKKwl9OworCisJc2l6ZV90IGxlbiwgdG90YWxfbGVuID0gMDsKKwlpbnQgZXJyOworCXNpemVfdCBoZHJfc2l6ZTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKKwkJcmV0dXJuOworCisJdXNlX21tKG5ldC0+ZGV2Lm1tKTsKKwltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwloZHJfc2l6ZSA9IHZxLT5oZHJfc2l6ZTsKKworCXZxX2xvZyA9IHVubGlrZWx5KHZob3N0X2hhc19mZWF0dXJlKCZuZXQtPmRldiwgVkhPU1RfRl9MT0dfQUxMKSkgPworCQl2cS0+bG9nIDogTlVMTDsKKworCWZvciAoOzspIHsKKwkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuZXQtPmRldiwgdnEsIHZxLT5pb3YsCisJCQkJCSBBUlJBWV9TSVpFKHZxLT5pb3YpLAorCQkJCQkgJm91dCwgJmluLAorCQkJCQkgdnFfbG9nLCAmbG9nKTsKKwkJLyogT0ssIG5vdyB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgYWRkZWQgZGVzY3JpcHRvcnMuICovCisJCWlmIChoZWFkID09IHZxLT5udW0pIHsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKKwkJCQkvKiBUaGV5IGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZQorCQkJCSAqIGRvaW5nIHRoYXQ6IGNoZWNrIGFnYWluLiAqLworCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzCisJCQkgKiB0aGV5IHJlZmlsbGVkLiAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KKwkJaWYgKG91dCkgeworCQkJdnFfZXJyKHZxLCAiVW5leHBlY3RlZCBkZXNjcmlwdG9yIGZvcm1hdCBmb3IgUlg6ICIKKwkJCSAgICAgICAib3V0ICVkLCBpbnQgJWRcbiIsCisJCQkgICAgICAgb3V0LCBpbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08vbWVyZ2VhYmxlIHJ4IGJ1ZmZlcnMuICovCisJCXMgPSBtb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCBoZHJfc2l6ZSwgaW4pOworCQltc2cubXNnX2lvdmxlbiA9IGluOworCQlsZW4gPSBpb3ZfbGVuZ3RoKHZxLT5pb3YsIGluKTsKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICghbGVuKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGhlYWRlciBsZW4gZm9yIFJYOiAiCisJCQkgICAgICAgIiV6ZCBleHBlY3RlZCAlemRcbiIsCisJCQkgICAgICAgaW92X2xlbmd0aCh2cS0+aGRyLCBzKSwgaGRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJZXJyID0gc29jay0+b3BzLT5yZWN2bXNnKE5VTEwsIHNvY2ssICZtc2csCisJCQkJCSBsZW4sIE1TR19ET05UV0FJVCB8IE1TR19UUlVOQyk7CisJCS8qIFRPRE86IENoZWNrIHNwZWNpZmljIGVycm9yIGFuZCBib21iIG91dCB1bmxlc3MgRUFHQUlOPyAqLworCQlpZiAoZXJyIDwgMCkgeworCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRPRE86IFNob3VsZCBjaGVjayBhbmQgaGFuZGxlIGNoZWNrc3VtLiAqLworCQlpZiAoZXJyID4gbGVuKSB7CisJCQlwcl9lcnIoIkRpc2NhcmRlZCB0cnVuY2F0ZWQgcnggcGFja2V0OiAiCisJCQkgICAgICAgIiBsZW4gJWQgPiAlemRcbiIsIGVyciwgbGVuKTsKKwkJCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSk7CisJCQljb250aW51ZTsKKwkJfQorCQlsZW4gPSBlcnI7CisJCWVyciA9IG1lbWNweV90b2lvdmVjKHZxLT5oZHIsICh1bnNpZ25lZCBjaGFyICopJmhkciwgaGRyX3NpemUpOworCQlpZiAoZXJyKSB7CisJCQl2cV9lcnIodnEsICJVbmFibGUgdG8gd3JpdGUgdm5ldF9oZHIgYXQgYWRkciAlcDogJWRcbiIsCisJCQkgICAgICAgdnEtPmlvdi0+aW92X2Jhc2UsIGVycik7CisJCQlicmVhazsKKwkJfQorCQlsZW4gKz0gaGRyX3NpemU7CisJCXZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoJm5ldC0+ZGV2LCB2cSwgaGVhZCwgbGVuKTsKKwkJaWYgKHVubGlrZWx5KHZxX2xvZykpCisJCQl2aG9zdF9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nLCBsZW4pOworCQl0b3RhbF9sZW4gKz0gbGVuOworCQlpZiAodW5saWtlbHkodG90YWxfbGVuID49IFZIT1NUX05FVF9XRUlHSFQpKSB7CisJCQl2aG9zdF9wb2xsX3F1ZXVlKCZ2cS0+cG9sbCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwl1bnVzZV9tbShuZXQtPmRldi5tbSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90eF9raWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7CisJdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwgcG9sbC53b3JrKTsKKwluZXQgPSBjb250YWluZXJfb2YodnEtPmRldiwgc3RydWN0IHZob3N0X25ldCwgZGV2KTsKKwloYW5kbGVfdHgobmV0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3J4X2tpY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCXN0cnVjdCB2aG9zdF9uZXQgKm5ldDsKKwl2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLCBwb2xsLndvcmspOworCW5ldCA9IGNvbnRhaW5lcl9vZih2cS0+ZGV2LCBzdHJ1Y3Qgdmhvc3RfbmV0LCBkZXYpOworCWhhbmRsZV9yeChuZXQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdHhfbmV0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7CisJbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9uZXQsIHBvbGxbVkhPU1RfTkVUX1ZRX1RYXS53b3JrKTsKKwloYW5kbGVfdHgobmV0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZob3N0X25ldCAqbmV0OworCW5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfbmV0LCBwb2xsW1ZIT1NUX05FVF9WUV9SWF0ud29yayk7CisJaGFuZGxlX3J4KG5ldCk7Cit9CisKK3N0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IHZob3N0X25ldCAqbiA9IGttYWxsb2Moc2l6ZW9mICpuLCBHRlBfS0VSTkVMKTsKKwlpbnQgcjsKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PTUVNOworCW4tPnZxc1tWSE9TVF9ORVRfVlFfVFhdLmhhbmRsZV9raWNrID0gaGFuZGxlX3R4X2tpY2s7CisJbi0+dnFzW1ZIT1NUX05FVF9WUV9SWF0uaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljazsKKwlyID0gdmhvc3RfZGV2X2luaXQoJm4tPmRldiwgbi0+dnFzLCBWSE9TVF9ORVRfVlFfTUFYKTsKKwlpZiAociA8IDApIHsKKwkJa2ZyZWUobik7CisJCXJldHVybiByOworCX0KKworCXZob3N0X3BvbGxfaW5pdChuLT5wb2xsICsgVkhPU1RfTkVUX1ZRX1RYLCBoYW5kbGVfdHhfbmV0LCBQT0xMT1VUKTsKKwl2aG9zdF9wb2xsX2luaXQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgaGFuZGxlX3J4X25ldCwgUE9MTElOKTsKKwluLT50eF9wb2xsX3N0YXRlID0gVkhPU1RfTkVUX1BPTExfRElTQUJMRUQ7CisKKwlmLT5wcml2YXRlX2RhdGEgPSBuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZob3N0X25ldF9kaXNhYmxlX3ZxKHN0cnVjdCB2aG9zdF9uZXQgKm4sCisJCQkJIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCWlmICghdnEtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuOworCWlmICh2cSA9PSBuLT52cXMgKyBWSE9TVF9ORVRfVlFfVFgpIHsKKwkJdHhfcG9sbF9zdG9wKG4pOworCQluLT50eF9wb2xsX3N0YXRlID0gVkhPU1RfTkVUX1BPTExfRElTQUJMRUQ7CisJfSBlbHNlCisJCXZob3N0X3BvbGxfc3RvcChuLT5wb2xsICsgVkhPU1RfTkVUX1ZRX1JYKTsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X2VuYWJsZV92cShzdHJ1Y3Qgdmhvc3RfbmV0ICpuLAorCQkJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB2cS0+cHJpdmF0ZV9kYXRhOworCWlmICghc29jaykKKwkJcmV0dXJuOworCWlmICh2cSA9PSBuLT52cXMgKyBWSE9TVF9ORVRfVlFfVFgpIHsKKwkJbi0+dHhfcG9sbF9zdGF0ZSA9IFZIT1NUX05FVF9QT0xMX1NUT1BQRUQ7CisJCXR4X3BvbGxfc3RhcnQobiwgc29jayk7CisJfSBlbHNlCisJCXZob3N0X3BvbGxfc3RhcnQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgc29jay0+ZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp2aG9zdF9uZXRfc3RvcF92cShzdHJ1Y3Qgdmhvc3RfbmV0ICpuLAorCQkJCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKwlzb2NrID0gdnEtPnByaXZhdGVfZGF0YTsKKwl2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIE5VTEwpOworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwlyZXR1cm4gc29jazsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X3N0b3Aoc3RydWN0IHZob3N0X25ldCAqbiwgc3RydWN0IHNvY2tldCAqKnR4X3NvY2ssCisJCQkgICBzdHJ1Y3Qgc29ja2V0ICoqcnhfc29jaykKK3sKKwkqdHhfc29jayA9IHZob3N0X25ldF9zdG9wX3ZxKG4sIG4tPnZxcyArIFZIT1NUX05FVF9WUV9UWCk7CisJKnJ4X3NvY2sgPSB2aG9zdF9uZXRfc3RvcF92cShuLCBuLT52cXMgKyBWSE9TVF9ORVRfVlFfUlgpOworfQorCitzdGF0aWMgdm9pZCB2aG9zdF9uZXRfZmx1c2hfdnEoc3RydWN0IHZob3N0X25ldCAqbiwgaW50IGluZGV4KQoreworCXZob3N0X3BvbGxfZmx1c2gobi0+cG9sbCArIGluZGV4KTsKKwl2aG9zdF9wb2xsX2ZsdXNoKCZuLT5kZXYudnFzW2luZGV4XS5wb2xsKTsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X2ZsdXNoKHN0cnVjdCB2aG9zdF9uZXQgKm4pCit7CisJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIFZIT1NUX05FVF9WUV9UWCk7CisJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIFZIT1NUX05FVF9WUV9SWCk7Cit9CisKK3N0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IHZob3N0X25ldCAqbiA9IGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICp0eF9zb2NrOworCXN0cnVjdCBzb2NrZXQgKnJ4X3NvY2s7CisKKwl2aG9zdF9uZXRfc3RvcChuLCAmdHhfc29jaywgJnJ4X3NvY2spOworCXZob3N0X25ldF9mbHVzaChuKTsKKwl2aG9zdF9kZXZfY2xlYW51cCgmbi0+ZGV2KTsKKwlpZiAodHhfc29jaykKKwkJZnB1dCh0eF9zb2NrLT5maWxlKTsKKwlpZiAocnhfc29jaykKKwkJZnB1dChyeF9zb2NrLT5maWxlKTsKKwkvKiBXZSBkbyBhbiBleHRyYSBmbHVzaCBiZWZvcmUgZnJlZWluZyBtZW1vcnksCisJICogc2luY2Ugam9icyBjYW4gcmUtcXVldWUgdGhlbXNlbHZlcy4gKi8KKwl2aG9zdF9uZXRfZmx1c2gobik7CisJa2ZyZWUobik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpnZXRfcmF3X3NvY2tldChpbnQgZmQpCit7CisJc3RydWN0IHsKKwkJc3RydWN0IHNvY2thZGRyX2xsIHNhOworCQljaGFyICBidWZbTUFYX0FERFJfTEVOXTsKKwl9IHVhZGRyOworCWludCB1YWRkcl9sZW4gPSBzaXplb2YgdWFkZHIsIHI7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZyKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7CisKKwkvKiBQYXJhbWV0ZXIgY2hlY2tpbmcgKi8KKwlpZiAoc29jay0+c2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJciA9IC1FU09DS1ROT1NVUFBPUlQ7CisJCWdvdG8gZXJyOworCX0KKworCXIgPSBzb2NrLT5vcHMtPmdldG5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZ1YWRkci5zYSwKKwkJCSAgICAgICAmdWFkZHJfbGVuLCAwKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlpZiAodWFkZHIuc2Euc2xsX2ZhbWlseSAhPSBBRl9QQUNLRVQpIHsKKwkJciA9IC1FUEZOT1NVUFBPUlQ7CisJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gc29jazsKK2VycjoKKwlmcHV0KHNvY2stPmZpbGUpOworCXJldHVybiBFUlJfUFRSKHIpOworfQorCitzdGF0aWMgc3RydWN0IHNvY2tldCAqZ2V0X3RhcF9zb2NrZXQoaW50IGZkKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChmZCk7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlpZiAoIWZpbGUpCisJCXJldHVybiBFUlJfUFRSKC1FQkFERik7CisJc29jayA9IHR1bl9nZXRfc29ja2V0KGZpbGUpOworCWlmICghSVNfRVJSKHNvY2spKQorCQlyZXR1cm4gc29jazsKKwlzb2NrID0gbWFjdnRhcF9nZXRfc29ja2V0KGZpbGUpOworCWlmIChJU19FUlIoc29jaykpCisJCWZwdXQoZmlsZSk7CisJcmV0dXJuIHNvY2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpnZXRfc29ja2V0KGludCBmZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCS8qIHNwZWNpYWwgY2FzZSB0byBkaXNhYmxlIGJhY2tlbmQgKi8KKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiBOVUxMOworCXNvY2sgPSBnZXRfcmF3X3NvY2tldChmZCk7CisJaWYgKCFJU19FUlIoc29jaykpCisJCXJldHVybiBzb2NrOworCXNvY2sgPSBnZXRfdGFwX3NvY2tldChmZCk7CisJaWYgKCFJU19FUlIoc29jaykpCisJCXJldHVybiBzb2NrOworCXJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfbmV0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGRzb2NrOworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCWludCByOworCisJbXV0ZXhfbG9jaygmbi0+ZGV2Lm11dGV4KTsKKwlyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKCZuLT5kZXYpOworCWlmIChyKQorCQlnb3RvIGVycjsKKworCWlmIChpbmRleCA+PSBWSE9TVF9ORVRfVlFfTUFYKSB7CisJCXIgPSAtRU5PQlVGUzsKKwkJZ290byBlcnI7CisJfQorCXZxID0gbi0+dnFzICsgaW5kZXg7CisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKworCS8qIFZlcmlmeSB0aGF0IHJpbmcgaGFzIGJlZW4gc2V0dXAgY29ycmVjdGx5LiAqLworCWlmICghdmhvc3RfdnFfYWNjZXNzX29rKHZxKSkgeworCQlyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCXNvY2sgPSBnZXRfc29ja2V0KGZkKTsKKwlpZiAoSVNfRVJSKHNvY2spKSB7CisJCXIgPSBQVFJfRVJSKHNvY2spOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBzdGFydCBwb2xsaW5nIG5ldyBzb2NrZXQgKi8KKwlvbGRzb2NrID0gdnEtPnByaXZhdGVfZGF0YTsKKwlpZiAoc29jayA9PSBvbGRzb2NrKQorCQlnb3RvIGRvbmU7CisKKwl2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIHNvY2spOworCXZob3N0X25ldF9lbmFibGVfdnEobiwgdnEpOworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKK2RvbmU6CisJaWYgKG9sZHNvY2spIHsKKwkJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIGluZGV4KTsKKwkJZnB1dChvbGRzb2NrLT5maWxlKTsKKwl9CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiByOworfQorCitzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbikKK3sKKwlzdHJ1Y3Qgc29ja2V0ICp0eF9zb2NrID0gTlVMTDsKKwlzdHJ1Y3Qgc29ja2V0ICpyeF9zb2NrID0gTlVMTDsKKwlsb25nIGVycjsKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcigmbi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisJdmhvc3RfbmV0X3N0b3AobiwgJnR4X3NvY2ssICZyeF9zb2NrKTsKKwl2aG9zdF9uZXRfZmx1c2gobik7CisJZXJyID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyKCZuLT5kZXYpOworZG9uZToKKwltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJaWYgKHR4X3NvY2spCisJCWZwdXQodHhfc29jay0+ZmlsZSk7CisJaWYgKHJ4X3NvY2spCisJCWZwdXQocnhfc29jay0+ZmlsZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHU2NCBmZWF0dXJlcykKK3sKKwlzaXplX3QgaGRyX3NpemUgPSBmZWF0dXJlcyAmICgxIDw8IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKSA/CisJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpIDogMDsKKwlpbnQgaTsKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWlmICgoZmVhdHVyZXMgJiAoMSA8PCBWSE9TVF9GX0xPR19BTEwpKSAmJgorCSAgICAhdmhvc3RfbG9nX2FjY2Vzc19vaygmbi0+ZGV2KSkgeworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwluLT5kZXYuYWNrZWRfZmVhdHVyZXMgPSBmZWF0dXJlczsKKwlzbXBfd21iKCk7CisJZm9yIChpID0gMDsgaSA8IFZIT1NUX05FVF9WUV9NQVg7ICsraSkgeworCQltdXRleF9sb2NrKCZuLT52cXNbaV0ubXV0ZXgpOworCQluLT52cXNbaV0uaGRyX3NpemUgPSBoZHJfc2l6ZTsKKwkJbXV0ZXhfdW5sb2NrKCZuLT52cXNbaV0ubXV0ZXgpOworCX0KKwl2aG9zdF9uZXRfZmx1c2gobik7CisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuID0gZi0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXU2NCBfX3VzZXIgKmZlYXR1cmVwID0gYXJncDsKKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBiYWNrZW5kOworCXU2NCBmZWF0dXJlczsKKwlpbnQgcjsKKwlzd2l0Y2ggKGlvY3RsKSB7CisJY2FzZSBWSE9TVF9ORVRfU0VUX0JBQ0tFTkQ6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmYmFja2VuZCwgYXJncCwgc2l6ZW9mIGJhY2tlbmQpOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwkJcmV0dXJuIHZob3N0X25ldF9zZXRfYmFja2VuZChuLCBiYWNrZW5kLmluZGV4LCBiYWNrZW5kLmZkKTsKKwljYXNlIFZIT1NUX0dFVF9GRUFUVVJFUzoKKwkJZmVhdHVyZXMgPSBWSE9TVF9GRUFUVVJFUzsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihmZWF0dXJlcCwgJmZlYXR1cmVzLCBzaXplb2YgZmVhdHVyZXMpOworCWNhc2UgVkhPU1RfU0VUX0ZFQVRVUkVTOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmZlYXR1cmVzLCBmZWF0dXJlcCwgc2l6ZW9mIGZlYXR1cmVzKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCWlmIChmZWF0dXJlcyAmIH5WSE9TVF9GRUFUVVJFUykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIHZob3N0X25ldF9zZXRfZmVhdHVyZXMobiwgZmVhdHVyZXMpOworCWNhc2UgVkhPU1RfUkVTRVRfT1dORVI6CisJCXJldHVybiB2aG9zdF9uZXRfcmVzZXRfb3duZXIobik7CisJZGVmYXVsdDoKKwkJbXV0ZXhfbG9jaygmbi0+ZGV2Lm11dGV4KTsKKwkJciA9IHZob3N0X2Rldl9pb2N0bCgmbi0+ZGV2LCBpb2N0bCwgYXJnKTsKKwkJdmhvc3RfbmV0X2ZsdXNoKG4pOworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiByOworCX0KK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIHZob3N0X25ldF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmhvc3RfbmV0X2lvY3RsKGYsIGlvY3RsLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworfQorI2VuZGlmCisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlICAgICAgICA9IHZob3N0X25ldF9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IHZob3N0X25ldF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCAgID0gdmhvc3RfbmV0X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X25ldF9taXNjID0geworCVZIT1NUX05FVF9NSU5PUiwKKwkidmhvc3QtbmV0IiwKKwkmdmhvc3RfbmV0X2ZvcHMsCit9OworCitpbnQgdmhvc3RfbmV0X2luaXQodm9pZCkKK3sKKwlpbnQgciA9IHZob3N0X2luaXQoKTsKKwlpZiAocikKKwkJZ290byBlcnJfaW5pdDsKKwlyID0gbWlzY19yZWdpc3Rlcigmdmhvc3RfbmV0X21pc2MpOworCWlmIChyKQorCQlnb3RvIGVycl9yZWc7CisJcmV0dXJuIDA7CitlcnJfcmVnOgorCXZob3N0X2NsZWFudXAoKTsKK2Vycl9pbml0OgorCXJldHVybiByOworCit9Cittb2R1bGVfaW5pdCh2aG9zdF9uZXRfaW5pdCk7CisKK3ZvaWQgdmhvc3RfbmV0X2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJnZob3N0X25ldF9taXNjKTsKKwl2aG9zdF9jbGVhbnVwKCk7Cit9Cittb2R1bGVfZXhpdCh2aG9zdF9uZXRfZXhpdCk7CisKK01PRFVMRV9WRVJTSU9OKCIwLjAuMSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBTLiBUc2lya2luIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkNTVlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMCwwICsxLDExMDQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CisgKgorICogSW5zcGlyYXRpb24sIHNvbWUgY29kZSwgYW5kIG1vc3Qgd2l0dHkgY29tbWVudHMgY29tZSBmcm9tCisgKiBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KKyAqCisgKiBHZW5lcmljIGNvZGUgZm9yIHZpcnRpbyBzZXJ2ZXIgaW4gaG9zdCBrZXJuZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJ2aG9zdC5oIgorCitlbnVtIHsKKwlWSE9TVF9NRU1PUllfTUFYX05SRUdJT05TID0gNjQsCisJVkhPU1RfTUVNT1JZX0ZfTE9HID0gMHgxLAorfTsKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp2aG9zdF93b3JrcXVldWU7CisKK3N0YXRpYyB2b2lkIHZob3N0X3BvbGxfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndxaCwKKwkJCSAgICBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbDsKKwlwb2xsID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3Qgdmhvc3RfcG9sbCwgdGFibGUpOworCisJcG9sbC0+d3FoID0gd3FoOworCWFkZF93YWl0X3F1ZXVlKHdxaCwgJnBvbGwtPndhaXQpOworfQorCitzdGF0aWMgaW50IHZob3N0X3BvbGxfd2FrZXVwKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsCisJCQkgICAgIHZvaWQgKmtleSkKK3sKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbDsKKwlwb2xsID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCB2aG9zdF9wb2xsLCB3YWl0KTsKKwlpZiAoISgodW5zaWduZWQgbG9uZylrZXkgJiBwb2xsLT5tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlxdWV1ZV93b3JrKHZob3N0X3dvcmtxdWV1ZSwgJnBvbGwtPndvcmspOworCXJldHVybiAwOworfQorCisvKiBJbml0IHBvbGwgc3RydWN0dXJlICovCit2b2lkIHZob3N0X3BvbGxfaW5pdChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCwgd29ya19mdW5jX3QgZnVuYywKKwkJICAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJSU5JVF9XT1JLKCZwb2xsLT53b3JrLCBmdW5jKTsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZwb2xsLT53YWl0LCB2aG9zdF9wb2xsX3dha2V1cCk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJnBvbGwtPnRhYmxlLCB2aG9zdF9wb2xsX2Z1bmMpOworCXBvbGwtPm1hc2sgPSBtYXNrOworfQorCisvKiBTdGFydCBwb2xsaW5nIGEgZmlsZS4gV2UgYWRkIG91cnNlbHZlcyB0byBmaWxlJ3Mgd2FpdCBxdWV1ZS4gVGhlIGNhbGxlciBtdXN0CisgKiBrZWVwIGEgcmVmZXJlbmNlIHRvIGEgZmlsZSB1bnRpbCBhZnRlciB2aG9zdF9wb2xsX3N0b3AgaXMgY2FsbGVkLiAqLwordm9pZCB2aG9zdF9wb2xsX3N0YXJ0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJbWFzayA9IGZpbGUtPmZfb3AtPnBvbGwoZmlsZSwgJnBvbGwtPnRhYmxlKTsKKwlpZiAobWFzaykKKwkJdmhvc3RfcG9sbF93YWtldXAoJnBvbGwtPndhaXQsIDAsIDAsICh2b2lkICopbWFzayk7Cit9CisKKy8qIFN0b3AgcG9sbGluZyBhIGZpbGUuIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgaXQgYmVjb21lcyBzYWZlIHRvIGRyb3AgdGhlCisgKiBmaWxlIHJlZmVyZW5jZS4gWW91IG11c3QgYWxzbyBmbHVzaCBhZnRlcndhcmRzLiAqLwordm9pZCB2aG9zdF9wb2xsX3N0b3Aoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpCit7CisJcmVtb3ZlX3dhaXRfcXVldWUocG9sbC0+d3FoLCAmcG9sbC0+d2FpdCk7Cit9CisKKy8qIEZsdXNoIGFueSB3b3JrIHRoYXQgaGFzIGJlZW4gc2NoZWR1bGVkLiBXaGVuIGNhbGxpbmcgdGhpcywgZG9uJ3QgaG9sZCBhbnkKKyAqIGxvY2tzIHRoYXQgYXJlIGFsc28gdXNlZCBieSB0aGUgY2FsbGJhY2suICovCit2b2lkIHZob3N0X3BvbGxfZmx1c2goc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpCit7CisJZmx1c2hfd29yaygmcG9sbC0+d29yayk7Cit9CisKK3ZvaWQgdmhvc3RfcG9sbF9xdWV1ZShzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCkKK3sKKwlxdWV1ZV93b3JrKHZob3N0X3dvcmtxdWV1ZSwgJnBvbGwtPndvcmspOworfQorCitzdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCisJCQkgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwl2cS0+bnVtID0gMTsKKwl2cS0+ZGVzYyA9IE5VTEw7CisJdnEtPmF2YWlsID0gTlVMTDsKKwl2cS0+dXNlZCA9IE5VTEw7CisJdnEtPmxhc3RfYXZhaWxfaWR4ID0gMDsKKwl2cS0+YXZhaWxfaWR4ID0gMDsKKwl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CisJdnEtPnVzZWRfZmxhZ3MgPSAwOworCXZxLT51c2VkX2ZsYWdzID0gMDsKKwl2cS0+bG9nX3VzZWQgPSBmYWxzZTsKKwl2cS0+bG9nX2FkZHIgPSAtMXVsbDsKKwl2cS0+aGRyX3NpemUgPSAwOworCXZxLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXZxLT5sb2dfYmFzZSA9IE5VTEw7CisJdnEtPmVycm9yX2N0eCA9IE5VTEw7CisJdnEtPmVycm9yID0gTlVMTDsKKwl2cS0+a2ljayA9IE5VTEw7CisJdnEtPmNhbGxfY3R4ID0gTlVMTDsKKwl2cS0+Y2FsbCA9IE5VTEw7CisJdnEtPmxvZ19jdHggPSBOVUxMOworfQorCitsb25nIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKKwkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxcywgaW50IG52cXMpCit7CisJaW50IGk7CisJZGV2LT52cXMgPSB2cXM7CisJZGV2LT5udnFzID0gbnZxczsKKwltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKKwlkZXYtPmxvZ19jdHggPSBOVUxMOworCWRldi0+bG9nX2ZpbGUgPSBOVUxMOworCWRldi0+bWVtb3J5ID0gTlVMTDsKKwlkZXYtPm1tID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgeworCQlkZXYtPnZxc1tpXS5kZXYgPSBkZXY7CisJCW11dGV4X2luaXQoJmRldi0+dnFzW2ldLm11dGV4KTsKKwkJdmhvc3RfdnFfcmVzZXQoZGV2LCBkZXYtPnZxcyArIGkpOworCQlpZiAoZGV2LT52cXNbaV0uaGFuZGxlX2tpY2spCisJCQl2aG9zdF9wb2xsX2luaXQoJmRldi0+dnFzW2ldLnBvbGwsCisJCQkJCWRldi0+dnFzW2ldLmhhbmRsZV9raWNrLAorCQkJCQlQT0xMSU4pOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfY2hlY2tfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCS8qIEFyZSB5b3UgdGhlIG93bmVyPyBJZiBub3QsIEkgZG9uJ3QgdGhpbmsgeW91IG1lYW4gdG8gZG8gdGhhdCAqLworCXJldHVybiBkZXYtPm1tID09IGN1cnJlbnQtPm1tID8gMCA6IC1FUEVSTTsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworc3RhdGljIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCit7CisJLyogSXMgdGhlcmUgYW4gb3duZXIgYWxyZWFkeT8gKi8KKwlpZiAoZGV2LT5tbSkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBObyBvd25lciwgYmVjb21lIG9uZSAqLworCWRldi0+bW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbW9yeTsKKworCS8qIFJlc3RvcmUgbWVtb3J5IHRvIGRlZmF1bHQgZW1wdHkgbWFwcGluZy4gKi8KKwltZW1vcnkgPSBrbWFsbG9jKG9mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbW9yeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2aG9zdF9kZXZfY2xlYW51cChkZXYpOworCisJbWVtb3J5LT5ucmVnaW9ucyA9IDA7CisJZGV2LT5tZW1vcnkgPSBtZW1vcnk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggKi8KK3ZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgeworCQlpZiAoZGV2LT52cXNbaV0ua2ljayAmJiBkZXYtPnZxc1tpXS5oYW5kbGVfa2ljaykgeworCQkJdmhvc3RfcG9sbF9zdG9wKCZkZXYtPnZxc1tpXS5wb2xsKTsKKwkJCXZob3N0X3BvbGxfZmx1c2goJmRldi0+dnFzW2ldLnBvbGwpOworCQl9CisJCWlmIChkZXYtPnZxc1tpXS5lcnJvcl9jdHgpCisJCQlldmVudGZkX2N0eF9wdXQoZGV2LT52cXNbaV0uZXJyb3JfY3R4KTsKKwkJaWYgKGRldi0+dnFzW2ldLmVycm9yKQorCQkJZnB1dChkZXYtPnZxc1tpXS5lcnJvcik7CisJCWlmIChkZXYtPnZxc1tpXS5raWNrKQorCQkJZnB1dChkZXYtPnZxc1tpXS5raWNrKTsKKwkJaWYgKGRldi0+dnFzW2ldLmNhbGxfY3R4KQorCQkJZXZlbnRmZF9jdHhfcHV0KGRldi0+dnFzW2ldLmNhbGxfY3R4KTsKKwkJaWYgKGRldi0+dnFzW2ldLmNhbGwpCisJCQlmcHV0KGRldi0+dnFzW2ldLmNhbGwpOworCQl2aG9zdF92cV9yZXNldChkZXYsIGRldi0+dnFzICsgaSk7CisJfQorCWlmIChkZXYtPmxvZ19jdHgpCisJCWV2ZW50ZmRfY3R4X3B1dChkZXYtPmxvZ19jdHgpOworCWRldi0+bG9nX2N0eCA9IE5VTEw7CisJaWYgKGRldi0+bG9nX2ZpbGUpCisJCWZwdXQoZGV2LT5sb2dfZmlsZSk7CisJZGV2LT5sb2dfZmlsZSA9IE5VTEw7CisJLyogTm8gb25lIHdpbGwgYWNjZXNzIG1lbW9yeSBhdCB0aGlzIHBvaW50ICovCisJa2ZyZWUoZGV2LT5tZW1vcnkpOworCWRldi0+bWVtb3J5ID0gTlVMTDsKKwlpZiAoZGV2LT5tbSkKKwkJbW1wdXQoZGV2LT5tbSk7CisJZGV2LT5tbSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbG9nX2FjY2Vzc19vayh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsIHU2NCBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQoreworCXU2NCBhID0gYWRkciAvIFZIT1NUX1BBR0VfU0laRSAvIDg7CisJLyogTWFrZSBzdXJlIDY0IGJpdCBtYXRoIHdpbGwgbm90IG92ZXJmbG93LiAqLworCWlmIChhID4gVUxPTkdfTUFYIC0gKHVuc2lnbmVkIGxvbmcpbG9nX2Jhc2UgfHwKKwkgICAgYSArICh1bnNpZ25lZCBsb25nKWxvZ19iYXNlID4gVUxPTkdfTUFYKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBsb2dfYmFzZSArIGEsCisJCQkgKHN6ICsgVkhPU1RfUEFHRV9TSVpFICogOCAtIDEpIC8gVkhPU1RfUEFHRV9TSVpFIC8gOCk7Cit9CisKKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4LiAqLworc3RhdGljIGludCB2cV9tZW1vcnlfYWNjZXNzX29rKHZvaWQgX191c2VyICpsb2dfYmFzZSwgc3RydWN0IHZob3N0X21lbW9yeSAqbWVtLAorCQkJICAgICAgIGludCBsb2dfYWxsKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBtZW0tPm5yZWdpb25zOyArK2kpIHsKKwkJc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24gKm0gPSBtZW0tPnJlZ2lvbnMgKyBpOworCQl1bnNpZ25lZCBsb25nIGEgPSBtLT51c2Vyc3BhY2VfYWRkcjsKKwkJaWYgKG0tPm1lbW9yeV9zaXplID4gVUxPTkdfTUFYKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCBfX3VzZXIgKilhLAorCQkJCSAgICBtLT5tZW1vcnlfc2l6ZSkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAobG9nX2FsbCAmJiAhbG9nX2FjY2Vzc19vayhsb2dfYmFzZSwKKwkJCQkJCSAgIG0tPmd1ZXN0X3BoeXNfYWRkciwKKwkJCQkJCSAgIG0tPm1lbW9yeV9zaXplKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogQ2FuIHdlIHN3aXRjaCB0byB0aGlzIG1lbW9yeSB0YWJsZT8gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggYnV0IG5vdCB2cSBtdXRleCAqLworc3RhdGljIGludCBtZW1vcnlfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbSwKKwkJCSAgICBpbnQgbG9nX2FsbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCWludCBvazsKKwkJbXV0ZXhfbG9jaygmZC0+dnFzW2ldLm11dGV4KTsKKwkJLyogSWYgcmluZyBpcyBpbmFjdGl2ZSwgd2lsbCBjaGVjayB3aGVuIGl0J3MgZW5hYmxlZC4gKi8KKwkJaWYgKGQtPnZxc1tpXS5wcml2YXRlX2RhdGEpCisJCQlvayA9IHZxX21lbW9yeV9hY2Nlc3Nfb2soZC0+dnFzW2ldLmxvZ19iYXNlLCBtZW0sCisJCQkJCQkgbG9nX2FsbCk7CisJCWVsc2UKKwkJCW9rID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQlpZiAoIW9rKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZxX2FjY2Vzc19vayh1bnNpZ25lZCBpbnQgbnVtLAorCQkJc3RydWN0IHZyaW5nX2Rlc2MgX191c2VyICpkZXNjLAorCQkJc3RydWN0IHZyaW5nX2F2YWlsIF9fdXNlciAqYXZhaWwsCisJCQlzdHJ1Y3QgdnJpbmdfdXNlZCBfX3VzZXIgKnVzZWQpCit7CisJcmV0dXJuIGFjY2Vzc19vayhWRVJJRllfUkVBRCwgZGVzYywgbnVtICogc2l6ZW9mICpkZXNjKSAmJgorCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGF2YWlsLAorCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nKSAmJgorCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VkLAorCQkJc2l6ZW9mICp1c2VkICsgbnVtICogc2l6ZW9mICp1c2VkLT5yaW5nKTsKK30KKworLyogQ2FuIHdlIGxvZyB3cml0ZXM/ICovCisvKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4IGJ1dCBub3QgdnEgbXV0ZXggKi8KK2ludCB2aG9zdF9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKK3sKKwlyZXR1cm4gbWVtb3J5X2FjY2Vzc19vayhkZXYsIGRldi0+bWVtb3J5LCAxKTsKK30KKworLyogVmVyaWZ5IGFjY2VzcyBmb3Igd3JpdGUgbG9nZ2luZy4gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4ICovCitzdGF0aWMgaW50IHZxX2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHZvaWQgX191c2VyICpsb2dfYmFzZSkKK3sKKwlyZXR1cm4gdnFfbWVtb3J5X2FjY2Vzc19vayhsb2dfYmFzZSwgdnEtPmRldi0+bWVtb3J5LAorCQkJICAgIHZob3N0X2hhc19mZWF0dXJlKHZxLT5kZXYsIFZIT1NUX0ZfTE9HX0FMTCkpICYmCisJCSghdnEtPmxvZ191c2VkIHx8IGxvZ19hY2Nlc3Nfb2sobG9nX2Jhc2UsIHZxLT5sb2dfYWRkciwKKwkJCQkJc2l6ZW9mICp2cS0+dXNlZCArCisJCQkJCXZxLT5udW0gKiBzaXplb2YgKnZxLT51c2VkLT5yaW5nKSk7Cit9CisKKy8qIENhbiB3ZSBzdGFydCB2cT8gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4ICovCitpbnQgdmhvc3RfdnFfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXJldHVybiB2cV9hY2Nlc3Nfb2sodnEtPm51bSwgdnEtPmRlc2MsIHZxLT5hdmFpbCwgdnEtPnVzZWQpICYmCisJCXZxX2xvZ19hY2Nlc3Nfb2sodnEsIHZxLT5sb2dfYmFzZSk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X3NldF9tZW1vcnkoc3RydWN0IHZob3N0X2RldiAqZCwgc3RydWN0IHZob3N0X21lbW9yeSBfX3VzZXIgKm0pCit7CisJc3RydWN0IHZob3N0X21lbW9yeSBtZW0sICpuZXdtZW0sICpvbGRtZW07CisJdW5zaWduZWQgbG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHZob3N0X21lbW9yeSwgcmVnaW9ucyk7CisJbG9uZyByOworCXIgPSBjb3B5X2Zyb21fdXNlcigmbWVtLCBtLCBzaXplKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKG1lbS5wYWRkaW5nKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKG1lbS5ucmVnaW9ucyA+IFZIT1NUX01FTU9SWV9NQVhfTlJFR0lPTlMpCisJCXJldHVybiAtRTJCSUc7CisJbmV3bWVtID0ga21hbGxvYyhzaXplICsgbWVtLm5yZWdpb25zICogc2l6ZW9mICptLT5yZWdpb25zLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkobmV3bWVtLCAmbWVtLCBzaXplKTsKKwlyID0gY29weV9mcm9tX3VzZXIobmV3bWVtLT5yZWdpb25zLCBtLT5yZWdpb25zLAorCQkJICAgbWVtLm5yZWdpb25zICogc2l6ZW9mICptLT5yZWdpb25zKTsKKwlpZiAocikgeworCQlrZnJlZShuZXdtZW0pOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAoIW1lbW9yeV9hY2Nlc3Nfb2soZCwgbmV3bWVtLCB2aG9zdF9oYXNfZmVhdHVyZShkLCBWSE9TVF9GX0xPR19BTEwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJb2xkbWVtID0gZC0+bWVtb3J5OworCXJjdV9hc3NpZ25fcG9pbnRlcihkLT5tZW1vcnksIG5ld21lbSk7CisJc3luY2hyb25pemVfcmN1KCk7CisJa2ZyZWUob2xkbWVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCSAgICAgc3RydWN0IHZyaW5nX3VzZWQgX191c2VyICp1c2VkKQoreworCWludCByID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ1c2VkLT5mbGFncyk7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiBnZXRfdXNlcih2cS0+bGFzdF91c2VkX2lkeCwgJnVzZWQtPmlkeCk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X3NldF92cmluZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBmaWxlICpldmVudGZwLCAqZmlsZXAgPSBOVUxMLAorCQkgICAgKnBvbGxzdGFydCA9IE5VTEwsICpwb2xsc3RvcCA9IE5VTEw7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHggPSBOVUxMOworCXUzMiBfX3VzZXIgKmlkeHAgPSBhcmdwOworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCXN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzOworCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGY7CisJc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgYTsKKwl1MzIgaWR4OworCWxvbmcgcjsKKworCXIgPSBnZXRfdXNlcihpZHgsIGlkeHApOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJaWYgKGlkeCA+IGQtPm52cXMpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXZxID0gZC0+dnFzICsgaWR4OworCisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CisJCS8qIFJlc2l6aW5nIHJpbmcgd2l0aCBhbiBhY3RpdmUgYmFja2VuZD8KKwkJICogWW91IGRvbid0IHdhbnQgdG8gZG8gdGhhdC4gKi8KKwkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKKwkJCXIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCQlyID0gY29weV9mcm9tX3VzZXIoJnMsIGFyZ3AsIHNpemVvZiBzKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmICghcy5udW0gfHwgcy5udW0gPiAweGZmZmYgfHwgKHMubnVtICYgKHMubnVtIC0gMSkpKSB7CisJCQlyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXZxLT5udW0gPSBzLm51bTsKKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfVlJJTkdfQkFTRToKKwkJLyogTW92aW5nIGJhc2Ugd2l0aCBhbiBhY3RpdmUgYmFja2VuZD8KKwkJICogWW91IGRvbid0IHdhbnQgdG8gZG8gdGhhdC4gKi8KKwkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKKwkJCXIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCQlyID0gY29weV9mcm9tX3VzZXIoJnMsIGFyZ3AsIHNpemVvZiBzKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmIChzLm51bSA+IDB4ZmZmZikgeworCQkJciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQl2cS0+bGFzdF9hdmFpbF9pZHggPSBzLm51bTsKKwkJLyogRm9yZ2V0IHRoZSBjYWNoZWQgaW5kZXggdmFsdWUuICovCisJCXZxLT5hdmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9pZHg7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfR0VUX1ZSSU5HX0JBU0U6CisJCXMuaW5kZXggPSBpZHg7CisJCXMubnVtID0gdnEtPmxhc3RfYXZhaWxfaWR4OworCQlyID0gY29weV90b191c2VyKGFyZ3AsICZzLCBzaXplb2Ygcyk7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX0FERFI6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmYSwgYXJncCwgc2l6ZW9mIGEpOworCQlpZiAociA8IDApCisJCQlicmVhazsKKwkJaWYgKGEuZmxhZ3MgJiB+KDB4MSA8PCBWSE9TVF9WUklOR19GX0xPRykpIHsKKwkJCXIgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZvciAzMmJpdCwgdmVyaWZ5IHRoYXQgdGhlIHRvcCAzMmJpdHMgb2YgdGhlIHVzZXIKKwkJICAgZGF0YSBhcmUgc2V0IHRvIHplcm8uICovCisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHIgIT0gYS5kZXNjX3VzZXJfYWRkciB8fAorCQkgICAgKHU2NCkodW5zaWduZWQgbG9uZylhLnVzZWRfdXNlcl9hZGRyICE9IGEudXNlZF91c2VyX2FkZHIgfHwKKwkJICAgICh1NjQpKHVuc2lnbmVkIGxvbmcpYS5hdmFpbF91c2VyX2FkZHIgIT0gYS5hdmFpbF91c2VyX2FkZHIpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChhLmF2YWlsX3VzZXJfYWRkciAmIChzaXplb2YgKnZxLT5hdmFpbC0+cmluZyAtIDEpKSB8fAorCQkgICAgKGEudXNlZF91c2VyX2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSB8fAorCQkgICAgKGEubG9nX2d1ZXN0X2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSkgeworCQkJciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdlIG9ubHkgdmVyaWZ5IGFjY2VzcyBoZXJlIGlmIGJhY2tlbmQgaXMgY29uZmlndXJlZC4KKwkJICogSWYgaXQgaXMgbm90LCB3ZSBkb24ndCBhcyBzaXplIG1pZ2h0IG5vdCBoYXZlIGJlZW4gc2V0dXAuCisJCSAqIFdlIHdpbGwgdmVyaWZ5IHdoZW4gYmFja2VuZCBpcyBjb25maWd1cmVkLiAqLworCQlpZiAodnEtPnByaXZhdGVfZGF0YSkgeworCQkJaWYgKCF2cV9hY2Nlc3Nfb2sodnEtPm51bSwKKwkJCQkodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylhLmRlc2NfdXNlcl9hZGRyLAorCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuYXZhaWxfdXNlcl9hZGRyLAorCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEudXNlZF91c2VyX2FkZHIpKSB7CisJCQkJciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIEFsc28gdmFsaWRhdGUgbG9nIGFjY2VzcyBmb3IgdXNlZCByaW5nIGlmIGVuYWJsZWQuICovCisJCQlpZiAoKGEuZmxhZ3MgJiAoMHgxIDw8IFZIT1NUX1ZSSU5HX0ZfTE9HKSkgJiYKKwkJCSAgICAhbG9nX2FjY2Vzc19vayh2cS0+bG9nX2Jhc2UsIGEubG9nX2d1ZXN0X2FkZHIsCisJCQkJCSAgIHNpemVvZiAqdnEtPnVzZWQgKworCQkJCQkgICB2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZykpIHsKKwkJCQlyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXIgPSBpbml0X3VzZWQodnEsIChzdHJ1Y3QgdnJpbmdfdXNlZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykKKwkJCSAgICAgIGEudXNlZF91c2VyX2FkZHIpOworCQlpZiAocikKKwkJCWJyZWFrOworCQl2cS0+bG9nX3VzZWQgPSAhIShhLmZsYWdzICYgKDB4MSA8PCBWSE9TVF9WUklOR19GX0xPRykpOworCQl2cS0+ZGVzYyA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHI7CisJCXZxLT5hdmFpbCA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuYXZhaWxfdXNlcl9hZGRyOworCQl2cS0+bG9nX2FkZHIgPSBhLmxvZ19ndWVzdF9hZGRyOworCQl2cS0+dXNlZCA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEudXNlZF91c2VyX2FkZHI7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX0tJQ0s6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmZiwgYXJncCwgc2l6ZW9mIGYpOworCQlpZiAociA8IDApCisJCQlicmVhazsKKwkJZXZlbnRmcCA9IGYuZmQgPT0gLTEgPyBOVUxMIDogZXZlbnRmZF9mZ2V0KGYuZmQpOworCQlpZiAoSVNfRVJSKGV2ZW50ZnApKQorCQkJcmV0dXJuIFBUUl9FUlIoZXZlbnRmcCk7CisJCWlmIChldmVudGZwICE9IHZxLT5raWNrKSB7CisJCQlwb2xsc3RvcCA9IGZpbGVwID0gdnEtPmtpY2s7CisJCQlwb2xsc3RhcnQgPSB2cS0+a2ljayA9IGV2ZW50ZnA7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlicmVhazsKKwljYXNlIFZIT1NUX1NFVF9WUklOR19DQUxMOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmYsIGFyZ3AsIHNpemVvZiBmKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWV2ZW50ZnAgPSBmLmZkID09IC0xID8gTlVMTCA6IGV2ZW50ZmRfZmdldChmLmZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkKKwkJCXJldHVybiBQVFJfRVJSKGV2ZW50ZnApOworCQlpZiAoZXZlbnRmcCAhPSB2cS0+Y2FsbCkgeworCQkJZmlsZXAgPSB2cS0+Y2FsbDsKKwkJCWN0eCA9IHZxLT5jYWxsX2N0eDsKKwkJCXZxLT5jYWxsID0gZXZlbnRmcDsKKwkJCXZxLT5jYWxsX2N0eCA9IGV2ZW50ZnAgPworCQkJCWV2ZW50ZmRfY3R4X2ZpbGVnZXQoZXZlbnRmcCkgOiBOVUxMOworCQl9IGVsc2UKKwkJCWZpbGVwID0gZXZlbnRmcDsKKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfVlJJTkdfRVJSOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmYsIGFyZ3AsIHNpemVvZiBmKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWV2ZW50ZnAgPSBmLmZkID09IC0xID8gTlVMTCA6IGV2ZW50ZmRfZmdldChmLmZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkKKwkJCXJldHVybiBQVFJfRVJSKGV2ZW50ZnApOworCQlpZiAoZXZlbnRmcCAhPSB2cS0+ZXJyb3IpIHsKKwkJCWZpbGVwID0gdnEtPmVycm9yOworCQkJdnEtPmVycm9yID0gZXZlbnRmcDsKKwkJCWN0eCA9IHZxLT5lcnJvcl9jdHg7CisJCQl2cS0+ZXJyb3JfY3R4ID0gZXZlbnRmcCA/CisJCQkJZXZlbnRmZF9jdHhfZmlsZWdldChldmVudGZwKSA6IE5VTEw7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyID0gLUVOT0lPQ1RMQ01EOworCX0KKworCWlmIChwb2xsc3RvcCAmJiB2cS0+aGFuZGxlX2tpY2spCisJCXZob3N0X3BvbGxfc3RvcCgmdnEtPnBvbGwpOworCisJaWYgKGN0eCkKKwkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CisJaWYgKGZpbGVwKQorCQlmcHV0KGZpbGVwKTsKKworCWlmIChwb2xsc3RhcnQgJiYgdnEtPmhhbmRsZV9raWNrKQorCQl2aG9zdF9wb2xsX3N0YXJ0KCZ2cS0+cG9sbCwgdnEtPmtpY2spOworCisJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCisJaWYgKHBvbGxzdG9wICYmIHZxLT5oYW5kbGVfa2ljaykKKwkJdmhvc3RfcG9sbF9mbHVzaCgmdnEtPnBvbGwpOworCXJldHVybiByOworfQorCisvKiBDYWxsZXIgbXVzdCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgZmlsZSAqZXZlbnRmcCwgKmZpbGVwID0gTlVMTDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IE5VTEw7CisJdTY0IHA7CisJbG9uZyByOworCWludCBpLCBmZDsKKworCS8qIElmIHlvdSBhcmUgbm90IHRoZSBvd25lciwgeW91IGNhbiBiZWNvbWUgb25lICovCisJaWYgKGlvY3RsID09IFZIT1NUX1NFVF9PV05FUikgeworCQlyID0gdmhvc3RfZGV2X3NldF9vd25lcihkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIFlvdSBtdXN0IGJlIHRoZSBvd25lciB0byBkbyBhbnl0aGluZyBlbHNlICovCisJciA9IHZob3N0X2Rldl9jaGVja19vd25lcihkKTsKKwlpZiAocikKKwkJZ290byBkb25lOworCisJc3dpdGNoIChpb2N0bCkgeworCWNhc2UgVkhPU1RfU0VUX01FTV9UQUJMRToKKwkJciA9IHZob3N0X3NldF9tZW1vcnkoZCwgYXJncCk7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX0xPR19CQVNFOgorCQlyID0gY29weV9mcm9tX3VzZXIoJnAsIGFyZ3AsIHNpemVvZiBwKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKXAgIT0gcCkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKKwkJCXZvaWQgX191c2VyICpiYXNlID0gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpcDsKKwkJCXZxID0gZC0+dnFzICsgaTsKKwkJCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CisJCQkvKiBJZiByaW5nIGlzIGluYWN0aXZlLCB3aWxsIGNoZWNrIHdoZW4gaXQncyBlbmFibGVkLiAqLworCQkJaWYgKHZxLT5wcml2YXRlX2RhdGEgJiYgIXZxX2xvZ19hY2Nlc3Nfb2sodnEsIGJhc2UpKQorCQkJCXIgPSAtRUZBVUxUOworCQkJZWxzZQorCQkJCXZxLT5sb2dfYmFzZSA9IGJhc2U7CisJCQltdXRleF91bmxvY2soJnZxLT5tdXRleCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfTE9HX0ZEOgorCQlyID0gZ2V0X3VzZXIoZmQsIChpbnQgX191c2VyICopYXJncCk7CisJCWlmIChyIDwgMCkKKwkJCWJyZWFrOworCQlldmVudGZwID0gZmQgPT0gLTEgPyBOVUxMIDogZXZlbnRmZF9mZ2V0KGZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkgeworCQkJciA9IFBUUl9FUlIoZXZlbnRmcCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXZlbnRmcCAhPSBkLT5sb2dfZmlsZSkgeworCQkJZmlsZXAgPSBkLT5sb2dfZmlsZTsKKwkJCWN0eCA9IGQtPmxvZ19jdHg7CisJCQlkLT5sb2dfY3R4ID0gZXZlbnRmcCA/CisJCQkJZXZlbnRmZF9jdHhfZmlsZWdldChldmVudGZwKSA6IE5VTEw7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCQltdXRleF9sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQkJZC0+dnFzW2ldLmxvZ19jdHggPSBkLT5sb2dfY3R4OworCQkJbXV0ZXhfdW5sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQl9CisJCWlmIChjdHgpCisJCQlldmVudGZkX2N0eF9wdXQoY3R4KTsKKwkJaWYgKGZpbGVwKQorCQkJZnB1dChmaWxlcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXIgPSB2aG9zdF9zZXRfdnJpbmcoZCwgaW9jdGwsIGFyZ3ApOworCQlicmVhazsKKwl9Citkb25lOgorCXJldHVybiByOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24gKmZpbmRfcmVnaW9uKHN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbSwKKwkJCQkJCSAgICAgX191NjQgYWRkciwgX191MzIgbGVuKQoreworCXN0cnVjdCB2aG9zdF9tZW1vcnlfcmVnaW9uICpyZWc7CisJaW50IGk7CisJLyogbGluZWFyIHNlYXJjaCBpcyBub3QgYnJpbGxpYW50LCBidXQgd2UgcmVhbGx5IGhhdmUgb24gdGhlIG9yZGVyIG9mIDYKKwkgKiByZWdpb25zIGluIHByYWN0aWNlICovCisJZm9yIChpID0gMDsgaSA8IG1lbS0+bnJlZ2lvbnM7ICsraSkgeworCQlyZWcgPSBtZW0tPnJlZ2lvbnMgKyBpOworCQlpZiAocmVnLT5ndWVzdF9waHlzX2FkZHIgPD0gYWRkciAmJgorCQkgICAgcmVnLT5ndWVzdF9waHlzX2FkZHIgKyByZWctPm1lbW9yeV9zaXplIC0gMSA+PSBhZGRyKQorCQkJcmV0dXJuIHJlZzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRPRE86IFRoaXMgaXMgcmVhbGx5IGluZWZmaWNpZW50LiAgV2UgbmVlZCBzb21ldGhpbmcgbGlrZSBnZXRfdXNlcigpCisgKiAoaW5zdHJ1Y3Rpb24gZGlyZWN0bHkgYWNjZXNzZXMgdGhlIGRhdGEsIHdpdGggYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5CisgKiByZXR1cm5pbmcgLUVGQVVMVCkuIFNlZSBEb2N1bWVudGF0aW9uL3g4Ni9leGNlcHRpb24tdGFibGVzLnR4dC4KKyAqLworc3RhdGljIGludCBzZXRfYml0X3RvX3VzZXIoaW50IG5yLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvZyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqYmFzZTsKKwlpbnQgYml0ID0gbnIgKyAobG9nICUgUEFHRV9TSVpFKSAqIDg7CisJaW50IHI7CisJciA9IGdldF91c2VyX3BhZ2VzX2Zhc3QobG9nLCAxLCAxLCAmcGFnZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlCVUdfT04ociAhPSAxKTsKKwliYXNlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCXNldF9iaXQoYml0LCBiYXNlKTsKKwlrdW5tYXBfYXRvbWljKGJhc2UsIEtNX1VTRVIwKTsKKwlzZXRfcGFnZV9kaXJ0eV9sb2NrKHBhZ2UpOworCXB1dF9wYWdlKHBhZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ193cml0ZSh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsCisJCSAgICAgdTY0IHdyaXRlX2FkZHJlc3MsIHU2NCB3cml0ZV9sZW5ndGgpCit7CisJaW50IHI7CisJaWYgKCF3cml0ZV9sZW5ndGgpCisJCXJldHVybiAwOworCXdyaXRlX2FkZHJlc3MgLz0gVkhPU1RfUEFHRV9TSVpFOworCWZvciAoOzspIHsKKwkJdTY0IGJhc2UgPSAodTY0KSh1bnNpZ25lZCBsb25nKWxvZ19iYXNlOworCQl1NjQgbG9nID0gYmFzZSArIHdyaXRlX2FkZHJlc3MgLyA4OworCQlpbnQgYml0ID0gd3JpdGVfYWRkcmVzcyAlIDg7CisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKWxvZyAhPSBsb2cpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJciA9IHNldF9iaXRfdG9fdXNlcihiaXQsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWxvZyk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCQlpZiAod3JpdGVfbGVuZ3RoIDw9IFZIT1NUX1BBR0VfU0laRSkKKwkJCWJyZWFrOworCQl3cml0ZV9sZW5ndGggLT0gVkhPU1RfUEFHRV9TSVpFOworCQl3cml0ZV9hZGRyZXNzICs9IFZIT1NUX1BBR0VfU0laRTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCB2aG9zdF9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywKKwkJICAgIHVuc2lnbmVkIGludCBsb2dfbnVtLCB1NjQgbGVuKQoreworCWludCBpLCByOworCisJLyogTWFrZSBzdXJlIGRhdGEgd3JpdHRlbiBpcyBzZWVuIGJlZm9yZSBsb2cuICovCisJc21wX3dtYigpOworCWZvciAoaSA9IDA7IGkgPCBsb2dfbnVtOyArK2kpIHsKKwkJdTY0IGwgPSBtaW4obG9nW2ldLmxlbiwgbGVuKTsKKwkJciA9IGxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsIGxvZ1tpXS5hZGRyLCBsKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCWxlbiAtPSBsOworCQlpZiAoIWxlbikKKwkJCXJldHVybiAwOworCX0KKwlpZiAodnEtPmxvZ19jdHgpCisJCWV2ZW50ZmRfc2lnbmFsKHZxLT5sb2dfY3R4LCAxKTsKKwkvKiBMZW5ndGggd3JpdHRlbiBleGNlZWRzIHdoYXQgd2UgaGF2ZSBzdG9yZWQuIFRoaXMgaXMgYSBidWcuICovCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0cmFuc2xhdGVfZGVzYyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHU2NCBhZGRyLCB1MzIgbGVuLAorCQkgICBzdHJ1Y3QgaW92ZWMgaW92W10sIGludCBpb3Zfc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiAqcmVnOworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbTsKKwlzdHJ1Y3QgaW92ZWMgKl9pb3Y7CisJdTY0IHMgPSAwOworCWludCByZXQgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbWVtID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+bWVtb3J5KTsKKwl3aGlsZSAoKHU2NClsZW4gPiBzKSB7CisJCXU2NCBzaXplOworCQlpZiAocmV0ID49IGlvdl9zaXplKSB7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWJyZWFrOworCQl9CisJCXJlZyA9IGZpbmRfcmVnaW9uKG1lbSwgYWRkciwgbGVuKTsKKwkJaWYgKCFyZWcpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlfaW92ID0gaW92ICsgcmV0OworCQlzaXplID0gcmVnLT5tZW1vcnlfc2l6ZSAtIGFkZHIgKyByZWctPmd1ZXN0X3BoeXNfYWRkcjsKKwkJX2lvdi0+aW92X2xlbiA9IG1pbigodTY0KWxlbiwgc2l6ZSk7CisJCV9pb3YtPmlvdl9iYXNlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykKKwkJCShyZWctPnVzZXJzcGFjZV9hZGRyICsgYWRkciAtIHJlZy0+Z3Vlc3RfcGh5c19hZGRyKTsKKwkJcyArPSBzaXplOworCQlhZGRyICs9IHNpemU7CisJCSsrcmV0OworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEVhY2ggYnVmZmVyIGluIHRoZSB2aXJ0cXVldWVzIGlzIGFjdHVhbGx5IGEgY2hhaW4gb2YgZGVzY3JpcHRvcnMuICBUaGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IGRlc2NyaXB0b3IgaW4gdGhlIGNoYWluLAorICogb3IgLTFVIGlmIHdlJ3JlIGF0IHRoZSBlbmQuICovCitzdGF0aWMgdW5zaWduZWQgbmV4dF9kZXNjKHN0cnVjdCB2cmluZ19kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBuZXh0OworCisJLyogSWYgdGhpcyBkZXNjcmlwdG9yIHNheXMgaXQgZG9lc24ndCBjaGFpbiwgd2UncmUgZG9uZS4gKi8KKwlpZiAoIShkZXNjLT5mbGFncyAmIFZSSU5HX0RFU0NfRl9ORVhUKSkKKwkJcmV0dXJuIC0xVTsKKworCS8qIENoZWNrIHRoZXkncmUgbm90IGxlYWRpbmcgdXMgb2ZmIGVuZCBvZiBkZXNjcmlwdG9ycy4gKi8KKwluZXh0ID0gZGVzYy0+bmV4dDsKKwkvKiBNYWtlIHN1cmUgY29tcGlsZXIga25vd3MgdG8gZ3JhYiB0aGF0OiB3ZSBkb24ndCB3YW50IGl0IGNoYW5naW5nISAqLworCS8qIFdlIHdpbGwgdXNlIHRoZSByZXN1bHQgYXMgYW4gaW5kZXggaW4gYW4gYXJyYXksIHNvIG1vc3QKKwkgKiBhcmNoaXRlY3R1cmVzIG9ubHkgbmVlZCBhIGNvbXBpbGVyIGJhcnJpZXIgaGVyZS4gKi8KKwlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCisJcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfaW5kaXJlY3Qoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKKwkJCSAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUsCisJCQkgICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCisJCQkgICAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtLAorCQkJICAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqaW5kaXJlY3QpCit7CisJc3RydWN0IHZyaW5nX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGNvdW50LCBmb3VuZCA9IDA7CisJaW50IHJldDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChpbmRpcmVjdC0+bGVuICUgc2l6ZW9mIGRlc2MpIHsKKwkJdnFfZXJyKHZxLCAiSW52YWxpZCBsZW5ndGggaW4gaW5kaXJlY3QgZGVzY3JpcHRvcjogIgorCQkgICAgICAgImxlbiAweCVsbHggbm90IG11bHRpcGxlIG9mIDB4JXp4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmRpcmVjdC0+bGVuLAorCQkgICAgICAgc2l6ZW9mIGRlc2MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSB0cmFuc2xhdGVfZGVzYyhkZXYsIGluZGlyZWN0LT5hZGRyLCBpbmRpcmVjdC0+bGVuLCB2cS0+aW5kaXJlY3QsCisJCQkgICAgIEFSUkFZX1NJWkUodnEtPmluZGlyZWN0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJdnFfZXJyKHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAlZCBpbiBpbmRpcmVjdC5cbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogV2Ugd2lsbCB1c2UgdGhlIHJlc3VsdCBhcyBhbiBhZGRyZXNzIHRvIHJlYWQgZnJvbSwgc28gbW9zdAorCSAqIGFyY2hpdGVjdHVyZXMgb25seSBuZWVkIGEgY29tcGlsZXIgYmFycmllciBoZXJlLiAqLworCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisKKwljb3VudCA9IGluZGlyZWN0LT5sZW4gLyBzaXplb2YgZGVzYzsKKwkvKiBCdWZmZXJzIGFyZSBjaGFpbmVkIHZpYSBhIDE2IGJpdCBuZXh0IGZpZWxkLCBzbworCSAqIHdlIGNhbiBoYXZlIGF0IG1vc3QgMl4xNiBvZiB0aGVzZS4gKi8KKwlpZiAoY291bnQgPiBVU0hPUlRfTUFYICsgMSkgeworCQl2cV9lcnIodnEsICJJbmRpcmVjdCBidWZmZXIgbGVuZ3RoIHRvbyBiaWc6ICVkXG4iLAorCQkgICAgICAgaW5kaXJlY3QtPmxlbik7CisJCXJldHVybiAtRTJCSUc7CisJfQorCisJZG8geworCQl1bnNpZ25lZCBpb3ZfY291bnQgPSAqaW5fbnVtICsgKm91dF9udW07CisJCWlmICgrK2ZvdW5kID4gY291bnQpIHsKKwkJCXZxX2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKKwkJCSAgICAgICAiaW5kaXJlY3Qgc2l6ZSAldVxuIiwKKwkJCSAgICAgICBpLCBjb3VudCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAobWVtY3B5X2Zyb21pb3ZlYygodW5zaWduZWQgY2hhciAqKSZkZXNjLCB2cS0+aW5kaXJlY3QsCisJCQkJICAgICBzaXplb2YgZGVzYykpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCBpbmRpcmVjdCBkZXNjcmlwdG9yOiBpZHggJWQsICV6eFxuIiwKKwkJCSAgICAgICBpLCAoc2l6ZV90KWluZGlyZWN0LT5hZGRyICsgaSAqIHNpemVvZiBkZXNjKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChkZXNjLmZsYWdzICYgVlJJTkdfREVTQ19GX0lORElSRUNUKSB7CisJCQl2cV9lcnIodnEsICJOZXN0ZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCisJCQkgICAgICAgaSwgKHNpemVfdClpbmRpcmVjdC0+YWRkciArIGkgKiBzaXplb2YgZGVzYyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IHRyYW5zbGF0ZV9kZXNjKGRldiwgZGVzYy5hZGRyLCBkZXNjLmxlbiwgaW92ICsgaW92X2NvdW50LAorCQkJCSAgICAgaW92X3NpemUgLSBpb3ZfY291bnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJdnFfZXJyKHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAlZCBpbmRpcmVjdCBpZHggJWRcbiIsCisJCQkgICAgICAgcmV0LCBpKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJLyogSWYgdGhpcyBpcyBhbiBpbnB1dCBkZXNjcmlwdG9yLCBpbmNyZW1lbnQgdGhhdCBjb3VudC4gKi8KKwkJaWYgKGRlc2MuZmxhZ3MgJiBWUklOR19ERVNDX0ZfV1JJVEUpIHsKKwkJCSppbl9udW0gKz0gcmV0OworCQkJaWYgKHVubGlrZWx5KGxvZykpIHsKKwkJCQlsb2dbKmxvZ19udW1dLmFkZHIgPSBkZXNjLmFkZHI7CisJCQkJbG9nWypsb2dfbnVtXS5sZW4gPSBkZXNjLmxlbjsKKwkJCQkrKypsb2dfbnVtOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgaXQncyBhbiBvdXRwdXQgZGVzY3JpcHRvciwgdGhleSdyZSBhbGwgc3VwcG9zZWQKKwkJCSAqIHRvIGNvbWUgYmVmb3JlIGFueSBpbnB1dCBkZXNjcmlwdG9ycy4gKi8KKwkJCWlmICgqaW5fbnVtKSB7CisJCQkJdnFfZXJyKHZxLCAiSW5kaXJlY3QgZGVzY3JpcHRvciAiCisJCQkJICAgICAgICJoYXMgb3V0IGFmdGVyIGluOiBpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJKm91dF9udW0gKz0gcmV0OworCQl9CisJfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2MoJmRlc2MpKSAhPSAtMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgbG9va3MgaW4gdGhlIHZpcnRxdWV1ZSBhbmQgZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVmZmVyLCBhbmQgY29udmVydHMKKyAqIGl0IHRvIGFuIGlvdmVjIGZvciBjb252ZW5pZW50IGFjY2Vzcy4gIFNpbmNlIGRlc2NyaXB0b3JzIGNvbnNpc3Qgb2Ygc29tZQorICogbnVtYmVyIG9mIG91dHB1dCB0aGVuIHNvbWUgbnVtYmVyIG9mIGlucHV0IGRlc2NyaXB0b3JzLCBpdCdzIGFjdHVhbGx5IHR3bworICogaW92ZWNzLCBidXQgd2UgcGFjayB0aGVtIGludG8gb25lIGFuZCBub3RlIGhvdyBtYW55IG9mIGVhY2ggdGhlcmUgd2VyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRlc2NyaXB0b3IgbnVtYmVyIGZvdW5kLCBvciB2cS0+bnVtICh3aGljaAorICogaXMgbmV2ZXIgYSB2YWxpZCBkZXNjcmlwdG9yIG51bWJlcikgaWYgbm9uZSB3YXMgZm91bmQuICovCit1bnNpZ25lZCB2aG9zdF9nZXRfdnFfZGVzYyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAorCQkJICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUsCisJCQkgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAorCQkJICAgc3RydWN0IHZob3N0X2xvZyAqbG9nLCB1bnNpZ25lZCBpbnQgKmxvZ19udW0pCit7CisJc3RydWN0IHZyaW5nX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBpbnQgaSwgaGVhZCwgZm91bmQgPSAwOworCXUxNiBsYXN0X2F2YWlsX2lkeDsKKwlpbnQgcmV0OworCisJLyogQ2hlY2sgaXQgaXNuJ3QgZG9pbmcgdmVyeSBzdHJhbmdlIHRoaW5ncyB3aXRoIGRlc2NyaXB0b3IgbnVtYmVycy4gKi8KKwlsYXN0X2F2YWlsX2lkeCA9IHZxLT5sYXN0X2F2YWlsX2lkeDsKKwlpZiAoZ2V0X3VzZXIodnEtPmF2YWlsX2lkeCwgJnZxLT5hdmFpbC0+aWR4KSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gYWNjZXNzIGF2YWlsIGlkeCBhdCAlcFxuIiwKKwkJICAgICAgICZ2cS0+YXZhaWwtPmlkeCk7CisJCXJldHVybiB2cS0+bnVtOworCX0KKworCWlmICgodTE2KSh2cS0+YXZhaWxfaWR4IC0gbGFzdF9hdmFpbF9pZHgpID4gdnEtPm51bSkgeworCQl2cV9lcnIodnEsICJHdWVzdCBtb3ZlZCB1c2VkIGluZGV4IGZyb20gJXUgdG8gJXUiLAorCQkgICAgICAgbGFzdF9hdmFpbF9pZHgsIHZxLT5hdmFpbF9pZHgpOworCQlyZXR1cm4gdnEtPm51bTsKKwl9CisKKwkvKiBJZiB0aGVyZSdzIG5vdGhpbmcgbmV3IHNpbmNlIGxhc3Qgd2UgbG9va2VkLCByZXR1cm4gaW52YWxpZC4gKi8KKwlpZiAodnEtPmF2YWlsX2lkeCA9PSBsYXN0X2F2YWlsX2lkeCkKKwkJcmV0dXJuIHZxLT5udW07CisKKwkvKiBPbmx5IGdldCBhdmFpbCByaW5nIGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBndWVzdC4gKi8KKwlzbXBfcm1iKCk7CisKKwkvKiBHcmFiIHRoZSBuZXh0IGRlc2NyaXB0b3IgbnVtYmVyIHRoZXkncmUgYWR2ZXJ0aXNpbmcsIGFuZCBpbmNyZW1lbnQKKwkgKiB0aGUgaW5kZXggd2UndmUgc2Vlbi4gKi8KKwlpZiAoZ2V0X3VzZXIoaGVhZCwgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gcmVhZCBoZWFkOiBpZHggJWQgYWRkcmVzcyAlcFxuIiwKKwkJICAgICAgIGxhc3RfYXZhaWxfaWR4LAorCQkgICAgICAgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKTsKKwkJcmV0dXJuIHZxLT5udW07CisJfQorCisJLyogSWYgdGhlaXIgbnVtYmVyIGlzIHNpbGx5LCB0aGF0J3MgYW4gZXJyb3IuICovCisJaWYgKGhlYWQgPj0gdnEtPm51bSkgeworCQl2cV9lcnIodnEsICJHdWVzdCBzYXlzIGluZGV4ICV1ID4gJXUgaXMgYXZhaWxhYmxlIiwKKwkJICAgICAgIGhlYWQsIHZxLT5udW0pOworCQlyZXR1cm4gdnEtPm51bTsKKwl9CisKKwkvKiBXaGVuIHdlIHN0YXJ0IHRoZXJlIGFyZSBub25lIG9mIGVpdGhlciBpbnB1dCBub3Igb3V0cHV0LiAqLworCSpvdXRfbnVtID0gKmluX251bSA9IDA7CisJaWYgKHVubGlrZWx5KGxvZykpCisJCSpsb2dfbnVtID0gMDsKKworCWkgPSBoZWFkOworCWRvIHsKKwkJdW5zaWduZWQgaW92X2NvdW50ID0gKmluX251bSArICpvdXRfbnVtOworCQlpZiAoaSA+PSB2cS0+bnVtKSB7CisJCQl2cV9lcnIodnEsICJEZXNjIGluZGV4IGlzICV1ID4gJXUsIGhlYWQgPSAldSIsCisJCQkgICAgICAgaSwgdnEtPm51bSwgaGVhZCk7CisJCQlyZXR1cm4gdnEtPm51bTsKKwkJfQorCQlpZiAoKytmb3VuZCA+IHZxLT5udW0pIHsKKwkJCXZxX2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKKwkJCSAgICAgICAidnEgc2l6ZSAldSBoZWFkICV1XG4iLAorCQkJICAgICAgIGksIHZxLT5udW0sIGhlYWQpOworCQkJcmV0dXJuIHZxLT5udW07CisJCX0KKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJmRlc2MsIHZxLT5kZXNjICsgaSwgc2l6ZW9mIGRlc2MpOworCQlpZiAocmV0KSB7CisJCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IGRlc2NyaXB0b3I6IGlkeCAlZCBhZGRyICVwXG4iLAorCQkJICAgICAgIGksIHZxLT5kZXNjICsgaSk7CisJCQlyZXR1cm4gdnEtPm51bTsKKwkJfQorCQlpZiAoZGVzYy5mbGFncyAmIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkgeworCQkJcmV0ID0gZ2V0X2luZGlyZWN0KGRldiwgdnEsIGlvdiwgaW92X3NpemUsCisJCQkJCSAgIG91dF9udW0sIGluX251bSwKKwkJCQkJICAgbG9nLCBsb2dfbnVtLCAmZGVzYyk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXZxX2Vycih2cSwgIkZhaWx1cmUgZGV0ZWN0ZWQgIgorCQkJCSAgICAgICAiaW4gaW5kaXJlY3QgZGVzY3JpcHRvciBhdCBpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiB2cS0+bnVtOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSB0cmFuc2xhdGVfZGVzYyhkZXYsIGRlc2MuYWRkciwgZGVzYy5sZW4sIGlvdiArIGlvdl9jb3VudCwKKwkJCQkgICAgIGlvdl9zaXplIC0gaW92X2NvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXZxX2Vycih2cSwgIlRyYW5zbGF0aW9uIGZhaWx1cmUgJWQgZGVzY3JpcHRvciBpZHggJWRcbiIsCisJCQkgICAgICAgcmV0LCBpKTsKKwkJCXJldHVybiB2cS0+bnVtOworCQl9CisJCWlmIChkZXNjLmZsYWdzICYgVlJJTkdfREVTQ19GX1dSSVRFKSB7CisJCQkvKiBJZiB0aGlzIGlzIGFuIGlucHV0IGRlc2NyaXB0b3IsCisJCQkgKiBpbmNyZW1lbnQgdGhhdCBjb3VudC4gKi8KKwkJCSppbl9udW0gKz0gcmV0OworCQkJaWYgKHVubGlrZWx5KGxvZykpIHsKKwkJCQlsb2dbKmxvZ19udW1dLmFkZHIgPSBkZXNjLmFkZHI7CisJCQkJbG9nWypsb2dfbnVtXS5sZW4gPSBkZXNjLmxlbjsKKwkJCQkrKypsb2dfbnVtOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgaXQncyBhbiBvdXRwdXQgZGVzY3JpcHRvciwgdGhleSdyZSBhbGwgc3VwcG9zZWQKKwkJCSAqIHRvIGNvbWUgYmVmb3JlIGFueSBpbnB1dCBkZXNjcmlwdG9ycy4gKi8KKwkJCWlmICgqaW5fbnVtKSB7CisJCQkJdnFfZXJyKHZxLCAiRGVzY3JpcHRvciBoYXMgb3V0IGFmdGVyIGluOiAiCisJCQkJICAgICAgICJpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiB2cS0+bnVtOworCQkJfQorCQkJKm91dF9udW0gKz0gcmV0OworCQl9CisJfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2MoJmRlc2MpKSAhPSAtMSk7CisKKwkvKiBPbiBzdWNjZXNzLCBpbmNyZW1lbnQgYXZhaWwgaW5kZXguICovCisJdnEtPmxhc3RfYXZhaWxfaWR4Kys7CisJcmV0dXJuIGhlYWQ7Cit9CisKKy8qIFJldmVyc2UgdGhlIGVmZmVjdCBvZiB2aG9zdF9nZXRfdnFfZGVzYy4gVXNlZnVsIGZvciBlcnJvciBoYW5kbGluZy4gKi8KK3ZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXZxLT5sYXN0X2F2YWlsX2lkeC0tOworfQorCisvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuCisgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovCitpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKQoreworCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQ7CisKKwkvKiBUaGUgdmlydHF1ZXVlIGNvbnRhaW5zIGEgcmluZyBvZiB1c2VkIGJ1ZmZlcnMuICBHZXQgYSBwb2ludGVyIHRvIHRoZQorCSAqIG5leHQgZW50cnkgaW4gdGhhdCB1c2VkIHJpbmcuICovCisJdXNlZCA9ICZ2cS0+dXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCAlIHZxLT5udW1dOworCWlmIChwdXRfdXNlcihoZWFkLCAmdXNlZC0+aWQpKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB3cml0ZSB1c2VkIGlkIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAocHV0X3VzZXIobGVuLCAmdXNlZC0+bGVuKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gd3JpdGUgdXNlZCBsZW4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUgd2UgdXBkYXRlIGluZGV4LiAqLworCXNtcF93bWIoKTsKKwlpZiAocHV0X3VzZXIodnEtPmxhc3RfdXNlZF9pZHggKyAxLCAmdnEtPnVzZWQtPmlkeCkpIHsKKwkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGluY3JlbWVudCB1c2VkIGlkeCIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKHVubGlrZWx5KHZxLT5sb2dfdXNlZCkpIHsKKwkJLyogTWFrZSBzdXJlIGRhdGEgaXMgc2VlbiBiZWZvcmUgbG9nLiAqLworCQlzbXBfd21iKCk7CisJCS8qIExvZyB1c2VkIHJpbmcgZW50cnkgd3JpdGUuICovCisJCWxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsCisJCQkgIHZxLT5sb2dfYWRkciArICgodm9pZCAqKXVzZWQgLSAodm9pZCAqKXZxLT51c2VkKSwKKwkJCSAgc2l6ZW9mICp1c2VkKTsKKwkJLyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqLworCQlsb2dfd3JpdGUodnEtPmxvZ19iYXNlLAorCQkJICB2cS0+bG9nX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSwKKwkJCSAgc2l6ZW9mIHZxLT51c2VkLT5pZHgpOworCQlpZiAodnEtPmxvZ19jdHgpCisJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CisJfQorCXZxLT5sYXN0X3VzZWRfaWR4Kys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgYWN0dWFsbHkgc2lnbmFscyB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovCit2b2lkIHZob3N0X3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCV9fdTE2IGZsYWdzID0gMDsKKwlpZiAoZ2V0X3VzZXIoZmxhZ3MsICZ2cS0+YXZhaWwtPmZsYWdzKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IGZsYWdzIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGV5IGRvbid0IHdhbnQgYW4gaW50ZXJydXB0LCBkb24ndCBzaWduYWwsIHVubGVzcyBlbXB0eS4gKi8KKwlpZiAoKGZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpICYmCisJICAgICh2cS0+YXZhaWxfaWR4ICE9IHZxLT5sYXN0X2F2YWlsX2lkeCB8fAorCSAgICAgIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSkpCisJCXJldHVybjsKKworCS8qIFNpZ25hbCB0aGUgR3Vlc3QgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqLworCWlmICh2cS0+Y2FsbF9jdHgpCisJCWV2ZW50ZmRfc2lnbmFsKHZxLT5jYWxsX2N0eCwgMSk7Cit9CisKKy8qIEFuZCBoZXJlJ3MgdGhlIGNvbWJvIG1lYWwgZGVhbC4gIFN1cGVyc2l6ZSBtZSEgKi8KK3ZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCisJCQkgICAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pCit7CisJdmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7CisJdmhvc3Rfc2lnbmFsKGRldiwgdnEpOworfQorCisvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwl1MTYgYXZhaWxfaWR4OworCWludCByOworCWlmICghKHZxLT51c2VkX2ZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCisJCXJldHVybiBmYWxzZTsKKwl2cS0+dXNlZF9mbGFncyAmPSB+VlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOworCWlmIChyKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBlbmFibGUgbm90aWZpY2F0aW9uIGF0ICVwOiAlZFxuIiwKKwkJICAgICAgICZ2cS0+dXNlZC0+ZmxhZ3MsIHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIFRoZXkgY291bGQgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlIGRvaW5nIHRoYXQ6IG1ha2UKKwkgKiBzdXJlIGl0J3Mgd3JpdHRlbiwgdGhlbiBjaGVjayBhZ2Fpbi4gKi8KKwlzbXBfbWIoKTsKKwlyID0gZ2V0X3VzZXIoYXZhaWxfaWR4LCAmdnEtPmF2YWlsLT5pZHgpOworCWlmIChyKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBjaGVjayBhdmFpbCBpZHggYXQgJXA6ICVkXG4iLAorCQkgICAgICAgJnZxLT5hdmFpbC0+aWR4LCByKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBhdmFpbF9pZHggIT0gdnEtPmxhc3RfYXZhaWxfaWR4OworfQorCisvKiBXZSBkb24ndCBuZWVkIHRvIGJlIG5vdGlmaWVkIGFnYWluLiAqLwordm9pZCB2aG9zdF9kaXNhYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwlpbnQgcjsKKwlpZiAodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKQorCQlyZXR1cm47CisJdnEtPnVzZWRfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOworCWlmIChyKQorCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCisJCSAgICAgICAmdnEtPnVzZWQtPmZsYWdzLCByKTsKK30KKworaW50IHZob3N0X2luaXQodm9pZCkKK3sKKwl2aG9zdF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidmhvc3QiKTsKKwlpZiAoIXZob3N0X3dvcmtxdWV1ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmhvc3RfY2xlYW51cCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHZob3N0X3dvcmtxdWV1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1OTFiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMCwwICsxLDE2MSBAQAorI2lmbmRlZiBfVkhPU1RfSAorI2RlZmluZSBfVkhPU1RfSAorCisjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Zob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisKK3N0cnVjdCB2aG9zdF9kZXZpY2U7CisKK2VudW0geworCS8qIEVub3VnaCBwbGFjZSBmb3IgYWxsIGZyYWdtZW50cywgaGVhZCwgYW5kIHZpcnRpbyBuZXQgaGVhZGVyLiAqLworCVZIT1NUX05FVF9NQVhfU0cgPSBNQVhfU0tCX0ZSQUdTICsgMiwKK307CisKKy8qIFBvbGwgYSBmaWxlIChldmVudGZkIG9yIHNvY2tldCkgKi8KKy8qIE5vdGU6IHRoZXJlJ3Mgbm90aGluZyB2aG9zdCBzcGVjaWZpYyBhYm91dCB0aGlzIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCB2aG9zdF9wb2xsIHsKKwlwb2xsX3RhYmxlICAgICAgICAgICAgICAgIHRhYmxlOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAqd3FoOworCXdhaXRfcXVldWVfdCAgICAgICAgICAgICAgd2FpdDsKKwkvKiBzdHJ1Y3Qgd2hpY2ggd2lsbCBoYW5kbGUgYWxsIGFjdHVhbCB3b3JrLiAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgd29yazsKKwl1bnNpZ25lZCBsb25nCQkgIG1hc2s7Cit9OworCit2b2lkIHZob3N0X3BvbGxfaW5pdChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCwgd29ya19mdW5jX3QgZnVuYywKKwkJICAgICB1bnNpZ25lZCBsb25nIG1hc2spOwordm9pZCB2aG9zdF9wb2xsX3N0YXJ0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIHZob3N0X3BvbGxfc3RvcChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCk7Cit2b2lkIHZob3N0X3BvbGxfZmx1c2goc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpOwordm9pZCB2aG9zdF9wb2xsX3F1ZXVlKHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsKTsKKworc3RydWN0IHZob3N0X2xvZyB7CisJdTY0IGFkZHI7CisJdTY0IGxlbjsKK307CisKKy8qIFRoZSB2aXJ0cXVldWUgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHF1ZXVlIGF0dGFjaGVkIHRvIGEgZGV2aWNlLiAqLworc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CisJc3RydWN0IHZob3N0X2RldiAqZGV2OworCisJLyogVGhlIGFjdHVhbCByaW5nIG9mIGJ1ZmZlcnMuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCXVuc2lnbmVkIGludCBudW07CisJc3RydWN0IHZyaW5nX2Rlc2MgX191c2VyICpkZXNjOworCXN0cnVjdCB2cmluZ19hdmFpbCBfX3VzZXIgKmF2YWlsOworCXN0cnVjdCB2cmluZ191c2VkIF9fdXNlciAqdXNlZDsKKwlzdHJ1Y3QgZmlsZSAqa2ljazsKKwlzdHJ1Y3QgZmlsZSAqY2FsbDsKKwlzdHJ1Y3QgZmlsZSAqZXJyb3I7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICpjYWxsX2N0eDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmVycm9yX2N0eDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7CisKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCBwb2xsOworCisJLyogVGhlIHJvdXRpbmUgdG8gY2FsbCB3aGVuIHRoZSBHdWVzdCBwaW5ncyB1cywgb3IgdGltZW91dC4gKi8KKwl3b3JrX2Z1bmNfdCBoYW5kbGVfa2ljazsKKworCS8qIExhc3QgYXZhaWxhYmxlIGluZGV4IHdlIHNhdy4gKi8KKwl1MTYgbGFzdF9hdmFpbF9pZHg7CisKKwkvKiBDYWNoZXMgYXZhaWxhYmxlIGluZGV4IHZhbHVlIGZyb20gdXNlci4gKi8KKwl1MTYgYXZhaWxfaWR4OworCisJLyogTGFzdCBpbmRleCB3ZSB1c2VkLiAqLworCXUxNiBsYXN0X3VzZWRfaWR4OworCisJLyogVXNlZCBmbGFncyAqLworCXUxNiB1c2VkX2ZsYWdzOworCisJLyogTG9nIHdyaXRlcyB0byB1c2VkIHN0cnVjdHVyZS4gKi8KKwlib29sIGxvZ191c2VkOworCXU2NCBsb2dfYWRkcjsKKworCXN0cnVjdCBpb3ZlYyBpbmRpcmVjdFtWSE9TVF9ORVRfTUFYX1NHXTsKKwlzdHJ1Y3QgaW92ZWMgaW92W1ZIT1NUX05FVF9NQVhfU0ddOworCXN0cnVjdCBpb3ZlYyBoZHJbVkhPU1RfTkVUX01BWF9TR107CisJc2l6ZV90IGhkcl9zaXplOworCS8qIFdlIHVzZSBhIGtpbmQgb2YgUkNVIHRvIGFjY2VzcyBwcml2YXRlIHBvaW50ZXIuCisJICogQWxsIHJlYWRlcnMgYWNjZXNzIGl0IGZyb20gd29ya3F1ZXVlLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0bworCSAqIGZsdXNoIHRoZSB3b3JrcXVldWUgaW5zdGVhZCBvZiBzeW5jaHJvbml6ZV9yY3UuIFRoZXJlZm9yZSByZWFkZXJzIGRvCisJICogbm90IG5lZWQgdG8gY2FsbCByY3VfcmVhZF9sb2NrL3JjdV9yZWFkX3VubG9jazogdGhlIGJlZ2lubmluZyBvZgorCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKSBhbmQgdGhlIGVuZCBvZgorCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKS4KKwkgKiBXcml0ZXJzIHVzZSB2aXJ0cXVldWUgbXV0ZXguICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCS8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqLworCXZvaWQgX191c2VyICpsb2dfYmFzZTsKKwlzdHJ1Y3Qgdmhvc3RfbG9nIGxvZ1tWSE9TVF9ORVRfTUFYX1NHXTsKK307CisKK3N0cnVjdCB2aG9zdF9kZXYgeworCS8qIFJlYWRlcnMgdXNlIFJDVSB0byBhY2Nlc3MgbWVtb3J5IHRhYmxlIHBvaW50ZXIKKwkgKiBsb2cgYmFzZSBwb2ludGVyIGFuZCBmZWF0dXJlcy4KKwkgKiBXcml0ZXJzIHVzZSBtdXRleCBiZWxvdy4qLworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbW9yeTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgYWNrZWRfZmVhdHVyZXM7CisJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzOworCWludCBudnFzOworCXN0cnVjdCBmaWxlICpsb2dfZmlsZTsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7Cit9OworCitsb25nIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzLCBpbnQgbnZxcyk7Citsb25nIHZob3N0X2Rldl9jaGVja19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICopOworbG9uZyB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqKTsKK3ZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTsKK2xvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7CitpbnQgdmhvc3RfdnFfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKTsKK2ludCB2aG9zdF9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKik7CisKK3Vuc2lnbmVkIHZob3N0X2dldF92cV9kZXNjKHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLAorCQkJICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X2NvdW50LAorCQkJICAgdW5zaWduZWQgaW50ICpvdXRfbnVtLCB1bnNpZ25lZCBpbnQgKmluX251bSwKKwkJCSAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtKTsKK3ZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CisKK2ludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTsKK3ZvaWQgdmhvc3Rfc2lnbmFsKHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKK3ZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7Cit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7Citib29sIHZob3N0X2VuYWJsZV9ub3RpZnkoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKKworaW50IHZob3N0X2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X2xvZyAqbG9nLAorCQkgICAgdW5zaWduZWQgaW50IGxvZ19udW0sIHU2NCBsZW4pOworCitpbnQgdmhvc3RfaW5pdCh2b2lkKTsKK3ZvaWQgdmhvc3RfY2xlYW51cCh2b2lkKTsKKworI2RlZmluZSB2cV9lcnIodnEsIGZtdCwgLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyAgICAgICBcCisJCWlmICgodnEpLT5lcnJvcl9jdHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQlldmVudGZkX3NpZ25hbCgodnEpLT5lcnJvcl9jdHgsIDEpO1wKKwl9IHdoaWxlICgwKQorCitlbnVtIHsKKwlWSE9TVF9GRUFUVVJFUyA9ICgxIDw8IFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgfAorCQkJICgxIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQykgfAorCQkJICgxIDw8IFZIT1NUX0ZfTE9HX0FMTCkgfAorCQkJICgxIDw8IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKSwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHZob3N0X2hhc19mZWF0dXJlKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgaW50IGJpdCkKK3sKKwl1bnNpZ25lZCBhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmFja2VkX2ZlYXR1cmVzKTsKKwlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGU0ZTRkNDMzLi45ZWU2N2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTE5MzEsMjIgKzE5MzEsMjIgQEAKIAkJCSAqIFBvd2VyTWFjMiwyIHN1bW1lciAyMDAwIGlNYWNzCiAJCQkgKiBQb3dlck1hYzQsMSBqYW51YXJ5IDIwMDEgaU1hY3MgImZsb3dlciBwb3dlciIKIAkJCSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikgfHwKKwkJCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgfHwKKwkJCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4Xzc1OwogCiAJCQkvKiBpQm9vayBTRSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwyIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDIiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfODAwXzYwMF82MDsKIAogCQkJLyogUG93ZXJCb29rIEZpcmV3aXJlIChQaXNtbyksIGlCb29rIER1YWwgVVNCICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4XzYwOwogCiAJCQkvKiBQb3dlckJvb2sgVGl0YW5pdW0gKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzExNTJfNzY4XzYwOwogCQogCQkJaWYgKGRlZmF1bHRfY21vZGUgPiAxNikgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggMWRkZWI0Yy4uZTQ1YWI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjQzOSw3ICsyNDM5LDcgQEAKIAkgKiBUaGUgQXBwbGUgaUJvb2sxIHVzZXMgbm9uLXN0YW5kYXJkIG1lbW9yeSBmcmVxdWVuY2llcy4KIAkgKiBXZSBkZXRlY3QgaXQgYW5kIHNldCB0aGUgZnJlcXVlbmN5IG1hbnVhbGx5LgogCSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpIHsKIAkJcGFyLT5wbGxfbGltaXRzLm1jbGsgPSA3MDsKIAkJcGFyLT5wbGxfbGltaXRzLnhjbGsgPSA1MzsKIAl9CkBAIC0yNjU5LDcgKzI2NTksNyBAQAogCQkgICAgICBGQklORk9fSFdBQ0NFTF9ZUEFOOwogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JaWYgKE02NF9IQVMoRzNfUEJfMV8xKSAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CisJaWYgKE02NF9IQVMoRzNfUEJfMV8xKSAmJiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CiAJCS8qCiAJCSAqIHRoZXNlIGJpdHMgbGV0IHRoZSAxMDEgcG93ZXJib29rCiAJCSAqIHdha2UgdXAgZnJvbSBzbGVlcCAtLSBwYXVsdXMKQEAgLTI2OTAsOSArMjY5MCw5IEBACiAJCQkJaWYgKE02NF9IQVMoRzNfUEJfMTAyNHg3NjgpKQogCQkJCQkvKiBHMyBQb3dlckJvb2sgd2l0aCAxMDI0eDc2OCBMQ0QgKi8KIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4XzYwOwotCQkJCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpKQorCQkJCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpKQogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNzU7Ci0JCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKKwkJCQllbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQkJCQkvKiBpQm9vayB3aXRoIDgwMHg2MDAgTENEICovCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV84MDBfNjAwXzYwOwogCQkJCWVsc2UKQEAgLTMxMDQsNyArMzEwNCw3IEBACiAJfQogCiAJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0JaWYgKG5vZGUgPT0gZHAtPm5vZGUpIHsKKwlpZiAobm9kZSA9PSBkcC0+cGhhbmRsZSkgewogCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZkZWZhdWx0X3ZhcjsKIAkJdW5zaWduZWQgaW50IE4sIFAsIFEsIE0sIFQsIFI7CiAJCXUzMiB2X3RvdGFsLCBoX3RvdGFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCmluZGV4IDFhMDU2YWQuLmZhMTE5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKQEAgLTE3NSw5ICsxNzUsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCiAJcGRhdGEtPm5lZ2F0aXZlID0gcGRhdGEtPm5lZ2F0aXZlIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpOworCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKTsKICNlbmRpZgogCiAJcmluZm8tPmluZm8tPmJsX2RldiA9IGJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCAzNjgxYzZhLi5iMGEzZmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMzAyNSw2ICszMDI1LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZiY29uX3JlbWFwX2FsbChpbnQgaWR4KQoreworCWludCBpOworCWZvciAoaSA9IGZpcnN0X2ZiX3ZjOyBpIDw9IGxhc3RfZmJfdmM7IGkrKykKKwkJc2V0X2NvbjJmYl9tYXAoaSwgaWR4LCAwKTsKKworCWlmIChjb25faXNfYm91bmQoJmZiX2NvbikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZmJjb246IFJlbWFwcGluZyBwcmltYXJ5IGRldmljZSwgIgorCQkgICAgICAgImZiJWksIHRvIHR0eSAlaS0laVxuIiwgaWR4LAorCQkgICAgICAgZmlyc3RfZmJfdmMgKyAxLCBsYXN0X2ZiX3ZjICsgMSk7CisJCWluZm9faWR4ID0gaWR4OworCX0KK30KKwogI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZCiBzdGF0aWMgdm9pZCBmYmNvbl9zZWxlY3RfcHJpbWFyeShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTMyMjUsNiArMzIzOSwxMCBAQAogCQljYXBzID0gZXZlbnQtPmRhdGE7CiAJCWZiY29uX2dldF9yZXF1aXJlbWVudChpbmZvLCBjYXBzKTsKIAkJYnJlYWs7CisJY2FzZSBGQl9FVkVOVF9SRU1BUF9BTExfQ09OU09MRToKKwkJaWR4ID0gaW5mby0+bm9kZTsKKwkJZmJjb25fcmVtYXBfYWxsKGlkeCk7CisJCWJyZWFrOwogCX0KIGRvbmU6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA5OWJiZDI4Mi4uYTE1YjQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTUxMyw3ICsxNTEzLDYgQEAKIAkJCQkgICAgICAgZmJfaW5mby0+Zml4LmlkLAogCQkJCSAgICAgICByZWdpc3RlcmVkX2ZiW2ldLT5maXguaWQpOwogCQkJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIocmVnaXN0ZXJlZF9mYltpXSk7Ci0JCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCmluZGV4IDcyZDY4YjMuLjQ2MzdiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCkBAIC0xNjMzLDYgKzE2MzMsMTEgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfZGl1X21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiLAorCX0sCisjZW5kaWYKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxkaXUiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKaW5kZXggZDY2ODg3ZS4uNDMyMDdjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYWNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWFjZmIuYwpAQCAtMSwyOSArMSwzMyBAQAotLyogbWFjZmIuYzogR2VuZXJpYyBmcmFtZWJ1ZmZlciBmb3IgTWFjcyB3aG9zZSBjb2xvdXJtYXBzL21vZGVzIHdlCi0gICBkb24ndCBrbm93IGhvdyB0byBzZXQgKi8KLQotLyogKGMpIDE5OTkgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgotCi0gICBQcmltYXJpbHkgYmFzZWQgb24gdmVzYWZiLmMsIGJ5IEdlcmQgS25vcnIKLSAgIChjKSAxOTk4IEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+Ci0KLSAgIEFsc28gdXNlcyBpbmZvcm1hdGlvbiBhbmQgY29kZSBmcm9tOgotICAgCi0gICBUaGUgb3JpZ2luYWwgbWFjZmIuYyBmcm9tIExpbnV4L21hYzY4ayAyLjAsIGJ5IEFsYW4gQ294LCBKdWVyZ2VuCi0gICBNZWxsaW5nZXIsIE1pa2FlbCBGb3JzZWxpdXMsIE1pY2hhZWwgU2NobWl0eiwgYW5kIG90aGVycy4KLQotICAgdmFsa3lyaWVmYi5jLCBieSBNYXJ0aW4gQ29zdGFiZWwsIEtldmluIFNjaG9lZGVsLCBCYXJyeSBOYXRoYW4sIERhbgotICAgSmFjb2Jvd2l0eiwgUGF1bCBNYWNrZXJyYXMsIEZhYmlvIFJpY2NhcmRpLCBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgotICAgCi0gICBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQotICAgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQgeW91ciBjb252ZW5pZW5jZS4gKi8KKy8qCisgKiBtYWNmYi5jOiBHZW5lcmljIGZyYW1lYnVmZmVyIGZvciBNYWNzIHdob3NlIGNvbG91cm1hcHMvbW9kZXMgd2UKKyAqIGRvbid0IGtub3cgaG93IHRvIHNldC4KKyAqCisgKiAoYykgMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+CisgKgorICogUHJpbWFyaWx5IGJhc2VkIG9uIHZlc2FmYi5jLCBieSBHZXJkIEtub3JyCisgKiAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgorICoKKyAqIEFsc28gdXNlcyBpbmZvcm1hdGlvbiBhbmQgY29kZSBmcm9tOgorICoKKyAqIFRoZSBvcmlnaW5hbCBtYWNmYi5jIGZyb20gTGludXgvbWFjNjhrIDIuMCwgYnkgQWxhbiBDb3gsIEp1ZXJnZW4KKyAqIE1lbGxpbmdlciwgTWlrYWVsIEZvcnNlbGl1cywgTWljaGFlbCBTY2htaXR6LCBhbmQgb3RoZXJzLgorICoKKyAqIHZhbGt5cmllZmIuYywgYnkgTWFydGluIENvc3RhYmVsLCBLZXZpbiBTY2hvZWRlbCwgQmFycnkgTmF0aGFuLCBEYW4KKyAqIEphY29ib3dpdHosIFBhdWwgTWFja2VycmFzLCBGYWJpbyBSaWNjYXJkaSwgYW5kIEdlZXJ0IFV5dHRlcmhvZXZlbi4KKyAqCisgKiBUaGUgVmlkZW9Ub29sYm94ICJCdWdzIiB3ZWIgcGFnZSBhdAorICogaHR0cDovL3JhanNreS5wc3ljaC5ueXUuZWR1L1RpcHMvVmlkZW9CdWdzLmh0bWwKKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQorICogaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQgeW91ciBjb252ZW5pZW5jZS4KKyAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L251YnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzEsOSArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTQ0LDcgKzQ1LDcgQEAKICNkZWZpbmUgREFGQl9CQVNFIDB4Zjk4MDAyMDAKIAogLyogQWRkcmVzcyBmb3IgdGhlIGJ1aWx0LWluIENpdmljIGZyYW1lYnVmZmVyIGluIFF1YWRyYSBBVnMgKi8KLSNkZWZpbmUgQ0lWSUNfQkFTRSAweDUwZjMwODAwCS8qIE9ubHkgdGVzdGVkIG9uIDY2MEFWISAqLworI2RlZmluZSBDSVZJQ19CQVNFIDB4NTBmMzA4MDAKIAogLyogR1NDIChHcmF5IFNjYWxlIENvbnRyb2xsZXIpIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBHU0NfQkFTRSAweDUwRjIwMDAwCkBAIC01MiwzNyArNTMsOSBAQAogLyogQ1NDIChDb2xvciBTY3JlZW4gQ29udHJvbGxlcikgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIENTQ19CQVNFIDB4NTBGMjAwMDAKIAotc3RhdGljIGludCAoKm1hY2ZiX3NldHBhbGV0dGUpICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgPSBOVUxMOwotc3RhdGljIGludCB2YWxreXJpZV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCByYnZfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgbWRjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IHRvYnlfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBjaXZpY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgYWRkcjsKLQkvKiBOb3RlOiB3b3JkLWFsaWduZWQgKi8KLQljaGFyIHBhZFszXTsKLQl1bnNpZ25lZCBjaGFyIGx1dDsKLX0gX19pb21lbSAqdmFsa3lyaWVfY21hcF9yZWdzOworc3RhdGljIGludCAoKm1hY2ZiX3NldHBhbGV0dGUpKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhciBhZGRyOwpAQCAtMTE2LDE1ICs4OSwxNSBAQAogfSBfX2lvbWVtICpjaXZpY19jbWFwX3JlZ3M7CiAKIHN0YXRpYyBzdHJ1Y3QgewotCWNoYXIgICAgcGFkMVsweDQwXTsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X3dhZGRyOwkvKiAweDQwICovCi0gICAgICAgIGNoYXIgICAgcGFkMjsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X2RhdGE7CS8qIDB4NDIgKi8KLSAgICAgICAgY2hhcglwYWQzWzB4M107Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIJY2x1dF9yYWRkcjsJLyogMHg0NiAqLworCWNoYXIgcGFkMVsweDQwXTsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfd2FkZHI7CS8qIDB4NDAgKi8KKwljaGFyIHBhZDI7CisJdW5zaWduZWQgY2hhciBjbHV0X2RhdGE7CS8qIDB4NDIgKi8KKwljaGFyIHBhZDNbMHgzXTsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfcmFkZHI7CS8qIDB4NDYgKi8KIH0gX19pb21lbSAqY3NjX2NtYXBfcmVnczsKIAotLyogV2Ugd2lsbCBsZWF2ZSB0aGVzZSB0aGUgd2F5IHRoZXkgYXJlIGZvciB0aGUgdGltZSBiZWluZyAqLworLyogVGhlIHJlZ2lzdGVycyBpbiB0aGVzZSBzdHJ1Y3RzIGFyZSBpbiBOdUJ1cyBzbG90IHNwYWNlICovCiBzdHJ1Y3QgbWRjX2NtYXBfcmVncyB7CiAJY2hhciBwYWQxWzB4MjAwMjAwXTsKIAl1bnNpZ25lZCBjaGFyIGFkZHI7CkBAIC0xNDUsMTMgKzExOCwxMCBAQAogCXVuc2lnbmVkIGNoYXIgbHV0OwogfTsKIAotI2RlZmluZSBQSVhFTF9UT19NTShhKQkoKChhKSoxMCkvMjgpCS8qIHdpZHRoIGluIG1tIGF0IDcyIGRwaSAqLwkKLQotLyogbW9kZSAqLwotc3RhdGljIGludCAgdmlkZW9fc2xvdCA9IDA7CisjZGVmaW5lIFBJWEVMX1RPX01NKGEpCSgoKGEpKjEwKS8yOCkJLyogd2lkdGggaW4gbW0gYXQgNzIgZHBpICovCiAKIHN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gbWFjZmJfZGVmaW5lZCA9IHsKLQkuYml0c19wZXJfcGl4ZWwJPSA4LAkKKwkuYml0c19wZXJfcGl4ZWwJPSA4LAogCS5hY3RpdmF0ZQk9IEZCX0FDVElWQVRFX05PVywKIAkud2lkdGgJCT0gLTEsCiAJLmhlaWdodAkJPSAtMSwKQEAgLTE2NywxODEgKzEzNywxNTIgQEAKIAkuYWNjZWwJPSBGQl9BQ0NFTF9OT05FLAogfTsKIAorc3RhdGljIHZvaWQgKnNsb3RfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyBmYl9pbmZvOwogc3RhdGljIHUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07Ci1zdGF0aWMgaW50IGludmVyc2UgICA9IDA7Ci1zdGF0aWMgaW50IHZpZHRlc3QgICA9IDA7CitzdGF0aWMgaW50IGludmVyc2U7CitzdGF0aWMgaW50IHZpZHRlc3Q7CiAKLXN0YXRpYyBpbnQgdmFsa3lyaWVfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCisvKgorICogVW5saWtlIHRoZSBWYWxreXJpZSwgdGhlIERBRkIgY2Fubm90IHNldCBpbmRpdmlkdWFsIGNvbG9ybWFwCisgKiByZWdpc3RlcnMuICBUaGVyZWZvcmUsIHdlIGRvIHdoYXQgdGhlIE1hY09TIGRyaXZlciBkb2VzIChubworICoga2lkZGluZyEpIGFuZCBzaW1wbHkgc2V0IHRoZW0gb25lIGJ5IG9uZSB1bnRpbCB3ZSBoaXQgdGhlIG9uZSB3ZQorICogd2FudC4KKyAqLworc3RhdGljIGludCBkYWZiX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JcmVkID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgPj49IDg7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyogdGVsbCBjbHV0IHdoaWNoIGFkZHJlc3MgdG8gZmlsbCAqLwotCW51YnVzX3dyaXRlYihyZWdubywgJnZhbGt5cmllX2NtYXBfcmVncy0+YWRkcik7Ci0Jbm9wKCk7Ci0KLQkvKiBzZW5kIG9uZSBjb2xvciBjaGFubmVsIGF0IGEgdGltZSAqLwotCW51YnVzX3dyaXRlYihyZWQsICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0Jbm9wKCk7Ci0JbnVidXNfd3JpdGViKGdyZWVuLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5sdXQpOwotCW5vcCgpOwotCW51YnVzX3dyaXRlYihibHVlLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5sdXQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKiBVbmxpa2UgdGhlIFZhbGt5cmllLCB0aGUgREFGQiBjYW5ub3Qgc2V0IGluZGl2aWR1YWwgY29sb3JtYXAKLSAgIHJlZ2lzdGVycy4gIFRoZXJlZm9yZSwgd2UgZG8gd2hhdCB0aGUgTWFjT1MgZHJpdmVyIGRvZXMgKG5vCi0gICBraWRkaW5nISkgYW5kIHNpbXBseSBzZXQgdGhlbSBvbmUgYnkgb25lIHVudGlsIHdlIGhpdCB0aGUgb25lIHdlCi0gICB3YW50LiAqLwotc3RhdGljIGludCBkYWZiX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCS8qIEZJWE1FOiByZWFsbHksIHJlYWxseSBuZWVkIHRvIHVzZSBpb3JlbWFwKCkgaGVyZSwKLSAgICAgICAgICAgcGh5c190b192aXJ0KCkgZG9lc24ndCB3b3JrIGFueW1vcmUgKi8KIAlzdGF0aWMgaW50IGxhc3RyZWcgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCXJlZCA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlID4+PSA4OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCS8qIGZiZGV2IHdpbGwgc2V0IGFuIGVudGlyZSBjb2xvdXJtYXAsIGJ1dCBYIHdvbid0LiAgSG9wZWZ1bGx5Ci0JICAgdGhpcyBzaG91bGQgYWNjb21tb2RhdGUgYm90aCBvZiB0aGVtICovCi0JaWYgKHJlZ25vICE9IGxhc3RyZWcrMSkgeworCisJLyoKKwkgKiBmYmRldiB3aWxsIHNldCBhbiBlbnRpcmUgY29sb3VybWFwLCBidXQgWCB3b24ndC4gIEhvcGVmdWxseQorCSAqIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGJvdGggb2YgdGhlbQorCSAqLworCWlmIChyZWdubyAhPSBsYXN0cmVnICsgMSkgewogCQlpbnQgaTsKLQkJCisKIAkJLyogU3RhYiBpbiB0aGUgZGFyayB0cnlpbmcgdG8gcmVzZXQgdGhlIENMVVQgcG9pbnRlciAqLwogCQludWJ1c193cml0ZWwoMCwgJmRhZmJfY21hcF9yZWdzLT5yZXNldCk7CiAJCW5vcCgpOwotCQkKKwogCQkvKiBMb29wIHVudGlsIHdlIGdldCB0byB0aGUgcmVnaXN0ZXIgd2Ugd2FudCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcmVnbm87IGkrKykgewotCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAucmVkW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLnJlZFtpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ncmVlbltpXSA+PiA4LCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CisJCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ncmVlbltpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ibHVlW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmJsdWVbaV0gPj4gOCwKKwkJCQkgICAgICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAkJCW5vcCgpOwogCQl9CiAJfQotCQkKKwogCW51YnVzX3dyaXRlYihyZWQsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAlub3AoKTsKIAludWJ1c193cml0ZWIoZ3JlZW4sICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAlub3AoKTsKIAludWJ1c193cml0ZWIoYmx1ZSwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwotCQorCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWxhc3RyZWcgPSByZWdubzsKIAlyZXR1cm4gMDsKIH0KIAogLyogVjggYW5kIEJyYXppbCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMuICBTb25vcmEgZG9lcyBhcyB3ZWxsLiAqLwotc3RhdGljIGludCB2OF9icmF6aWxfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCSB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykJCitzdGF0aWMgaW50IHY4X2JyYXppbF9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChicHAgPiA4KSByZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KKwlpZiAoYnBwID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBPbiB0aGVzZSBjaGlwcywgdGhlIENMVVQgcmVnaXN0ZXIgbnVtYmVycyBhcmUgc3ByZWFkIG91dAotCSAgIGFjcm9zcyB0aGUgcmVnaXN0ZXIgc3BhY2UuICBUaHVzOgotCi0JICAgSW4gOGJwcCwgYWxsIHJlZ25vcyBhcmUgdmFsaWQuCi0JICAgCi0JICAgSW4gNGJwcCwgdGhlIHJlZ25vcyBhcmUgMHgwZiwgMHgxZiwgMHgyZiwgZXRjLCBldGMKLQkgICAKLQkgICBJbiAyYnBwLCB0aGUgcmVnbm9zIGFyZSAweDNmLCAweDdmLCAweGJmLCAweGZmICovCi0gIAlfcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7Ci0JbnVidXNfd3JpdGViKF9yZWdubywgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKKwkgKiBhY3Jvc3MgdGhlIHJlZ2lzdGVyIHNwYWNlLiAgVGh1czoKKwkgKiBJbiA4YnBwLCBhbGwgcmVnbm9zIGFyZSB2YWxpZC4KKwkgKiBJbiA0YnBwLCB0aGUgcmVnbm9zIGFyZSAweDBmLCAweDFmLCAweDJmLCBldGMsIGV0YworCSAqIEluIDJicHAsIHRoZSByZWdub3MgYXJlIDB4M2YsIDB4N2YsIDB4YmYsIDB4ZmYKKwkgKi8KKwlyZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKKwludWJ1c193cml0ZWIocmVnbm8sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKIAogCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lICovCi0JbnVidXNfd3JpdGViKF9yZWQsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKKwludWJ1c193cml0ZWIocmVkLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJidl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCisvKiBSQU0tQmFzZWQgVmlkZW8gKi8KK3N0YXRpYyBpbnQgcmJ2X3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgPXJlZD4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbj1ncmVlbj4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlID1ibHVlPj44OwotCXVuc2lnbmVkIGNoYXIgX3JlZ25vOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkgcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpCisJCXJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQorCiAJLyogRnJvbSB0aGUgVmlkZW9Ub29sYm94IGRyaXZlci4gIFNlZW1zIHRvIGJlIHNheWluZyB0aGF0CiAJICogcmVnbm8gIzI1NCBhbmQgIzI1NSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGZvciAxLWJpdCBjb2xvciwKIAkgKiByZWdubyAjMjUyLTI1NSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGZvciAyLWJpdCBjb2xvciwgZXRjLgogCSAqLwotCV9yZWdubyA9IHJlZ25vICsgKDI1Ni0oMSA8PCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpKTsKKwlyZWdubyArPSAyNTYgLSAoMSA8PCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwogCiAJLyogcmVzZXQgY2x1dD8gKFZpZGVvVG9vbGJveCBzZXogIm5vdCBuZWNlc3NhcnkiKSAqLwotCW51YnVzX3dyaXRlYigweEZGLCAmcmJ2X2NtYXBfcmVncy0+Y250bCk7IG5vcCgpOwotCQorCW51YnVzX3dyaXRlYigweEZGLCAmcmJ2X2NtYXBfcmVncy0+Y250bCk7CisJbm9wKCk7CisKIAkvKiB0ZWxsIGNsdXQgd2hpY2ggYWRkcmVzcyB0byB1c2UuICovCi0JbnVidXNfd3JpdGViKF9yZWdubywgJnJidl9jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQkKKwludWJ1c193cml0ZWIocmVnbm8sICZyYnZfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwogCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lLiAqLwotCW51YnVzX3dyaXRlYihfcmVkLCAgICZyYnZfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAgJnJidl9jbWFwX3JlZ3MtPmx1dCk7Ci0JCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvKiBkb25lLiAqLworCW51YnVzX3dyaXRlYihyZWQsICZyYnZfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZyYnZfY21hcF9yZWdzLT5sdXQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0vKiBNYWNpbnRvc2ggRGlzcGxheSBDYXJkICg4eDI0KSAqLworLyogTWFjaW50b3NoIERpc3BsYXkgQ2FyZCAoOCoyNCkgKi8KIHN0YXRpYyBpbnQgbWRjX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAogCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAogCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgbWRjX2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm89cmVnbm87CisJc3RydWN0IG1kY19jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQorCiAJLyogdGhlIG5vcCdzIGFyZSB0aGVyZSB0byBvcmRlciB3cml0ZXMuICovCi0JbnVidXNfd3JpdGViKF9yZWdubywgJmNtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfcmVkLCAmY21hcF9yZWdzLT5sdXQpOyAgICBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmY21hcF9yZWdzLT5sdXQpOyAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmY21hcF9yZWdzLT5sdXQpOworCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0zNTAsMjQgKzI5MSwyNiBAQAogLyogVG9ieSBmcmFtZSBidWZmZXIgKi8KIHN0YXRpYyBpbnQgdG9ieV9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKIAkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgdG9ieV9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9Ci0JCW51YnVzX3Nsb3RfYWRkcih2aWRlb19zbG90KTsKKwlzdHJ1Y3QgdG9ieV9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9fihyZWQ+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPX4oZ3JlZW4+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPX4oYmx1ZT4+OCk7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXJlZCA9IH5yZWQ7CisJZ3JlZW4gPSB+Z3JlZW47CisJYmx1ZSA9IH5ibHVlOworCXJlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkKLQludWJ1c193cml0ZWIoX3JlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9yZWQsICZjbWFwX3JlZ3MtPmx1dCk7ICAgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7ICBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisKKwludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihyZWQsICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmY21hcF9yZWdzLT5sdXQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMzc4LDIwICszMjEsMTggQEAKIAkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKIAkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IGpldF9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9Ci0JCW51YnVzX3Nsb3RfYWRkcih2aWRlb19zbG90KTsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgID0gKHJlZD4+OCk7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW4gPSAoZ3JlZW4+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgID0gKGJsdWU+PjgpOworCXN0cnVjdCBqZXRfY21hcF9yZWdzICpjbWFwX3JlZ3MgPSBzbG90X2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX3JlZCwgJmNtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmY21hcF9yZWdzLT5sdXQpOworCisJbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIocmVkLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTQwMCw1MyArMzQxLDI3IEBACiAvKgogICogQ2l2aWMgZnJhbWVidWZmZXIgLS0gUXVhZHJhIEFWIGJ1aWx0LWluIHZpZGVvLiAgQSBjaGlwCiAgKiBjYWxsZWQgU2ViYXN0aWFuIGhvbGRzIHRoZSBhY3R1YWwgY29sb3IgcGFsZXR0ZXMsIGFuZAotICogYXBwYXJlbnRseSwgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgYmFua3Mgb2YgNTEySyBSQU0gCisgKiBhcHBhcmVudGx5LCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBiYW5rcyBvZiA1MTJLIFJBTQogICogd2hpY2ggY2FuIGFjdCBhcyBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGRvaW5nIHZpZGVvCiAgKiBpbnB1dCBhbmQgdmlld2luZyB0aGUgc2NyZWVuIGF0IHRoZSBzYW1lIHRpbWUhICBUaGUgODQwQVYKLSAqIENhbiBhZGQgYW5vdGhlciAxTUIgUkFNIHRvIGdpdmUgdGhlIHR3byBmcmFtZWJ1ZmZlcnMgCisgKiBDYW4gYWRkIGFub3RoZXIgMU1CIFJBTSB0byBnaXZlIHRoZSB0d28gZnJhbWVidWZmZXJzCiAgKiAxTUIgUkFNIGFwaWVjZS4KLSAqCi0gKiBGSVhNRTogdGhpcyBkb2Vzbid0IHNlZW0gdG8gd29yayBhbnltb3JlLgogICovCi1zdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RhdGljIGludCBsYXN0cmVnID0gLTE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2x1dF9zdGF0dXM7CiAJCi0JaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpIHJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwotCi0JcmVkICAgPj49IDg7Ci0JZ3JlZW4gPj49IDg7Ci0JYmx1ZSAgPj49IDg7CisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpCisJCXJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCS8qCi0JICogU2V0IHRoZSByZWdpc3RlciBhZGRyZXNzCi0JICovCi0JbnVidXNfd3JpdGViKHJlZ25vLCAmY2l2aWNfY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIFZCTCBpbnRlcnJ1cHQgaGVyZTsKLQkgKiBUaGV5J3JlIHVzdWFsbHkgbm90IGVuYWJsZWQgZnJvbSBQZW5ndWluLCBzbyB3ZSB3b24ndCBjaGVjawotCSAqLwotI2lmIDAKLQl7Ci0jZGVmaW5lIENJVklDX1ZCTF9PRkZTRVQJMHgxMjAKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdmJsID0gbnVidXNfcmVhZGwoY2l2aWNfY21hcF9yZWdzLT52YmxfYWRkciArIENJVklDX1ZCTF9PRkZTRVQpOwotCQkvKiBkbyBpbnRlcnJ1cHQgc2V0dXAgc3R1ZmYgaGVyZT8gKi8KLQkJKnZibCA9IDBMOyBub3AoKTsJLyogY2xlYXIgKi8KLQkJKnZibCA9IDFMOyBub3AoKTsJLyogc2V0ICovCi0JCXdoaWxlICgqdmJsICE9IDBMKQkvKiB3YWl0IGZvciBuZXh0IHZibCAqLwotCQl7Ci0JCQl1c2xlZXAoMTApOwkvKiBuZWVkZWQ/ICovCi0JCX0KLQkJLyogZG8gaW50ZXJydXB0IHNodXRkb3duIHN0dWZmIGhlcmU/ICovCi0JfQotI2VuZGlmCisJLyogU2V0IHRoZSByZWdpc3RlciBhZGRyZXNzICovCisJbnVidXNfd3JpdGViKHJlZ25vLCAmY2l2aWNfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKIAogCS8qCiAJICogR3JhYiBhIHN0YXR1cyB3b3JkIGFuZCBkbyBzb21lIGNoZWNraW5nOwpAQCAtNDU5LDM5ICszNzQsNTIgQEAKICNpZiAwCiAJCWlmICgoY2x1dF9zdGF0dXMgJiAweDAwMEQpICE9IDApCiAJCXsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOwogCQl9CiAjZW5kaWYKIAotCQludWJ1c193cml0ZWIoICByZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQludWJ1c193cml0ZWIocmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKIAl9CiAJZWxzZQogCXsKIAkJdW5zaWduZWQgY2hhciBqdW5rOwogCi0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOwogCiAJCWlmICgoY2x1dF9zdGF0dXMgJiAweDAwMEQpICE9IDApCiAJCXsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOwogCQl9CiAKLQkJbnVidXNfd3JpdGViKCAgcmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCBibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCBqdW5rLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJbnVidXNfd3JpdGViKHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGp1bmssICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWxhc3RyZWcgPSByZWdubzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAwLDE2ICs0MjgsMjEgQEAKICAqIChhbmQgdGhlIDUzMDAgdG9vLCBidXQgdGhhdCdzIGEgUG93ZXJNYWMpLiBUaGlzIGZ1bmN0aW9uCiAgKiBicm91Z2h0IHRvIHlvdSBpbiBwYXJ0IGJ5IHRoZSBFQ1NDIGRyaXZlciBmb3IgTWtMaW51eC4KICAqLwotCi1zdGF0aWMgaW50IGNzY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGNzY19zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JbWRlbGF5KDEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl1ZGVsYXkoMSk7IC8qIG1rbGludXggb24gUEIgNTMwMCB3YWl0cyBmb3IgMjYwIG5zICovCiAJbnVidXNfd3JpdGViKHJlZ25vLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF93YWRkcik7Ci0JbnVidXNfd3JpdGViKHJlZCwgICAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKKwludWJ1c193cml0ZWIocmVkLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKIAludWJ1c193cml0ZWIoZ3JlZW4sICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOwotCW51YnVzX3dyaXRlYihibHVlLCAgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC01MTgsMTAgKzQ1MSwxMCBAQAogCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7CiAJLyoKLQkgKiAgU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZQotCSAqICBhbHJlYWR5IHJvdW5kZWQgZG93biB0byB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMKLQkgKiAgKGFjY29yZGluZyB0byB0aGUgZW50cmllcyBpbiB0aGUgYHZhcicgc3RydWN0dXJlKS4gUmV0dXJuCi0JICogICE9IDAgZm9yIGludmFsaWQgcmVnbm8uCisJICogU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZQorCSAqIGFscmVhZHkgcm91bmRlZCBkb3duIHRvIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcworCSAqIChhY2NvcmRpbmcgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGB2YXInIHN0cnVjdHVyZSkuCisJICogUmV0dXJuIG5vbi16ZXJvIGZvciBpbnZhbGlkIHJlZ25vLgogCSAqLwogCQogCWlmIChyZWdubyA+PSBmYl9pbmZvLT5jbWFwLmxlbikKQEAgLTUzNiw4ICs0NjksOCBAQAogCQljYXNlIDQ6CiAJCWNhc2UgODoKIAkJCWlmIChtYWNmYl9zZXRwYWxldHRlKQotCQkJCW1hY2ZiX3NldHBhbGV0dGUocmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsCi0JCQkJCQkgZmJfaW5mbyk7CisJCQkJbWFjZmJfc2V0cGFsZXR0ZShyZWdubywgcmVkID4+IDgsIGdyZWVuID4+IDgsCisJCQkJCQkgYmx1ZSA+PiA4LCBmYl9pbmZvKTsKIAkJCWVsc2UKIAkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwpAQCAtNTU1LDI4ICs0ODgsMjIgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogMDo1OjY6NSAqLwogCQkJCSgodTMyKikgKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkJKChyZWQgICAmIDB4ZjgwMCkgICAgICApIHwKKwkJCQkJKChyZWQgICAmIDB4ZjgwMCkgPj4gIDApIHwKIAkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKIAkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkvKiBJJ20gcHJldHR5IHN1cmUgdGhhdCBvbmUgb3IgdGhlIG90aGVyIG9mIHRoZXNlCi0JCQkgICBkb2Vzbid0IGV4aXN0IG9uIDY4ayBNYWNzICovCisJCS8qCisJCSAqIDI0LWJpdCBjb2xvdXIgYWxtb3N0IGRvZXNuJ3QgZXhpc3Qgb24gNjhrIE1hY3MgLS0KKwkJICogaHR0cDovL3N1cHBvcnQuYXBwbGUuY29tL2tiL1RBMjg2MzQgKE9sZCBBcnRpY2xlOiAxMDk5MikKKwkJICovCiAJCWNhc2UgMjQ6Ci0JCQlyZWQgICA+Pj0gODsKLQkJCWdyZWVuID4+PSA4OwotCQkJYmx1ZSAgPj49IDg7Ci0JCQkoKHUzMiAqKShmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJKHJlZCAgIDw8IGZiX2luZm8tPnZhci5yZWQub2Zmc2V0KSAgIHwKLQkJCQkoZ3JlZW4gPDwgZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCShibHVlICA8PCBmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwotCQkJYnJlYWs7CiAJCWNhc2UgMzI6CiAJCQlyZWQgICA+Pj0gODsKIAkJCWdyZWVuID4+PSA4OwogCQkJYmx1ZSAgPj49IDg7CiAJCQkoKHUzMiAqKShmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJKHJlZCAgIDw8IGZiX2luZm8tPnZhci5yZWQub2Zmc2V0KSAgIHwKKwkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKIAkJCQkoZ3JlZW4gPDwgZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAogCQkJCShibHVlICA8PCBmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwogCQkJYnJlYWs7CkBAIC01OTcsMjUgKzUyNCwyNCBAQAogc3RhdGljIHZvaWQgX19pbml0IG1hY2ZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJY2hhciAqdGhpc19vcHQ7Ci0JCisKIAlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQogCQlyZXR1cm47Ci0JCisKIAl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWlmICghKnRoaXNfb3B0KSBjb250aW51ZTsKLQkJCi0JCWlmICghIHN0cmNtcCh0aGlzX29wdCwgImludmVyc2UiKSkKLQkJCWludmVyc2U9MTsKLQkJLyogVGhpcyBtZWFucyAidHVybiBvbiBleHBlcmltZW50YWwgQ0xVVCBjb2RlIiAqLwotCQllbHNlIGlmICghc3RyY21wKHRoaXNfb3B0LCAidmlkdGVzdCIpKQotCQkJdmlkdGVzdD0xOworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQorCQkJaW52ZXJzZSA9IDE7CisJCWVsc2UKKwkJCWlmICghc3RyY21wKHRoaXNfb3B0LCAidmlkdGVzdCIpKQorCQkJCXZpZHRlc3QgPSAxOyAvKiBlbmFibGUgZXhwZXJpbWVudGFsIENMVVQgY29kZSAqLwogCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGlvdW5tYXBfbWFjZmIodm9pZCkKIHsKLQlpZiAodmFsa3lyaWVfY21hcF9yZWdzKQotCQlpb3VubWFwKHZhbGt5cmllX2NtYXBfcmVncyk7CiAJaWYgKGRhZmJfY21hcF9yZWdzKQogCQlpb3VubWFwKGRhZmJfY21hcF9yZWdzKTsKIAlpZiAodjhfYnJhemlsX2NtYXBfcmVncykKQEAgLTY0Miw0OCArNTY4LDU1IEBACiAJaWYgKCFNQUNIX0lTX01BQykgCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGludGVybmFsIHZpZGVvIGNvbnRyb2xsZXIgYW55d2F5IHNvCi0JICAgd2UncmUgbm90IHRvbyB3b3JyaWVkIGFib3V0IHRoaXMgKi8KKwlpZiAobWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1E2MzAgfHwKKwkgICAgbWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1A1ODgpCisJCXJldHVybiAtRU5PREVWOyAvKiBTZWUgdmFsa3lyaWVmYi5jICovCisKIAltYWNmYl9kZWZpbmVkLnhyZXMgPSBtYWNfYmlfZGF0YS5kaW1lbnNpb25zICYgMHhGRkZGOwogCW1hY2ZiX2RlZmluZWQueXJlcyA9IG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgPj4gMTY7CiAJbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IG1hY19iaV9kYXRhLnZpZGVvZGVwdGg7CisKIAltYWNmYl9maXgubGluZV9sZW5ndGggPSBtYWNfYmlfZGF0YS52aWRlb3JvdzsKLQltYWNmYl9maXguc21lbV9sZW4gPSBtYWNmYl9maXgubGluZV9sZW5ndGggKiBtYWNmYl9kZWZpbmVkLnlyZXM7CisJbWFjZmJfZml4LnNtZW1fbGVuICAgID0gbWFjZmJfZml4LmxpbmVfbGVuZ3RoICogbWFjZmJfZGVmaW5lZC55cmVzOwogCS8qIE5vdGU6IHBoeXNpY2FsIGFkZHJlc3MgKHNpbmNlIDIuMS4xMjcpICovCi0JbWFjZmJfZml4LnNtZW1fc3RhcnQgPSBtYWNfYmlfZGF0YS52aWRlb2FkZHI7Ci0JLyogVGhpcyBpcyBhY3R1YWxseSByZWR1bmRhbnQgd2l0aCB0aGUgaW5pdGlhbCBtYXBwaW5ncy4KLQkgICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBub24tb2J2aW91cyBhc3BlY3RzIHRvIHRoZSB3YXkKLQkgICB0aG9zZSBtYXBwaW5ncyBhcmUgc2V0IHVwLCBzbyB0aGlzIGlzIGluIGZhY3QgdGhlIHNhZmVzdAotCSAgIHdheSB0byBlbnN1cmUgdGhhdCB0aGlzIGRyaXZlciB3aWxsIHdvcmsgb24gZXZlcnkgcG9zc2libGUKLQkgICBNYWMgKi8KLQlmYl9pbmZvLnNjcmVlbl9iYXNlID0gaW9yZW1hcChtYWNfYmlfZGF0YS52aWRlb2FkZHIsIG1hY2ZiX2ZpeC5zbWVtX2xlbik7Ci0JCi0JcHJpbnRrKCJtYWNmYjogZnJhbWVidWZmZXIgYXQgMHglMDhseCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWRrXG4iLAotCSAgICAgICBtYWNmYl9maXguc21lbV9zdGFydCwgZmJfaW5mby5zY3JlZW5fYmFzZSwgbWFjZmJfZml4LnNtZW1fbGVuLzEwMjQpOwotCXByaW50aygibWFjZmI6IG1vZGUgaXMgJWR4JWR4JWQsIGxpbmVsZW5ndGg9JWRcbiIsCi0JICAgICAgIG1hY2ZiX2RlZmluZWQueHJlcywgbWFjZmJfZGVmaW5lZC55cmVzLCBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsLCBtYWNmYl9maXgubGluZV9sZW5ndGgpOwotCQorCW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0ICA9IG1hY19iaV9kYXRhLnZpZGVvYWRkcjsKKwogCS8qCi0JICoJRmlsbCBpbiB0aGUgYXZhaWxhYmxlIHZpZGVvIHJlc29sdXRpb24KKwkgKiBUaGlzIGlzIGFjdHVhbGx5IHJlZHVuZGFudCB3aXRoIHRoZSBpbml0aWFsIG1hcHBpbmdzLgorCSAqIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIG5vbi1vYnZpb3VzIGFzcGVjdHMgdG8gdGhlIHdheQorCSAqIHRob3NlIG1hcHBpbmdzIGFyZSBzZXQgdXAsIHNvIHRoaXMgaXMgaW4gZmFjdCB0aGUgc2FmZXN0CisJICogd2F5IHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgd29yayBvbiBldmVyeSBwb3NzaWJsZSBNYWMKIAkgKi8KLQkgCi0JbWFjZmJfZGVmaW5lZC54cmVzX3ZpcnR1YWwgICA9IG1hY2ZiX2RlZmluZWQueHJlczsKLQltYWNmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCAgID0gbWFjZmJfZGVmaW5lZC55cmVzOwotCW1hY2ZiX2RlZmluZWQuaGVpZ2h0ID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC55cmVzKTsKLQltYWNmYl9kZWZpbmVkLndpZHRoICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueHJlcyk7CSAKKwlmYl9pbmZvLnNjcmVlbl9iYXNlID0gaW9yZW1hcChtYWNfYmlfZGF0YS52aWRlb2FkZHIsCisJCQkJICAgICAgbWFjZmJfZml4LnNtZW1fbGVuKTsKKwlpZiAoIWZiX2luZm8uc2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOwogCi0JcHJpbnRrKCJtYWNmYjogc2Nyb2xsaW5nOiByZWRyYXdcbiIpOworCXByaW50aygibWFjZmI6IGZyYW1lYnVmZmVyIGF0IDB4JTA4bHgsIG1hcHBlZCB0byAweCVwLCBzaXplICVka1xuIiwKKwkgICAgICAgbWFjZmJfZml4LnNtZW1fc3RhcnQsIGZiX2luZm8uc2NyZWVuX2Jhc2UsCisJICAgICAgIG1hY2ZiX2ZpeC5zbWVtX2xlbiAvIDEwMjQpOworCXByaW50aygibWFjZmI6IG1vZGUgaXMgJWR4JWR4JWQsIGxpbmVsZW5ndGg9JWRcbiIsCisJICAgICAgIG1hY2ZiX2RlZmluZWQueHJlcywgbWFjZmJfZGVmaW5lZC55cmVzLAorCSAgICAgICBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsLCBtYWNmYl9maXgubGluZV9sZW5ndGgpOworCisJLyogRmlsbCBpbiB0aGUgYXZhaWxhYmxlIHZpZGVvIHJlc29sdXRpb24gKi8KKwltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IG1hY2ZiX2RlZmluZWQueHJlczsKIAltYWNmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCA9IG1hY2ZiX2RlZmluZWQueXJlczsKKwltYWNmYl9kZWZpbmVkLmhlaWdodCAgICAgICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueXJlcyk7CisJbWFjZmJfZGVmaW5lZC53aWR0aCAgICAgICAgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnhyZXMpOwogCi0JLyogc29tZSBkdW1teSB2YWx1ZXMgZm9yIHRpbWluZyB0byBtYWtlIGZic2V0IGhhcHB5ICovCi0JbWFjZmJfZGVmaW5lZC5waXhjbG9jayAgICAgPSAxMDAwMDAwMCAvIG1hY2ZiX2RlZmluZWQueHJlcyAqIDEwMDAgLyBtYWNmYl9kZWZpbmVkLnlyZXM7CisJLyogU29tZSBkdW1teSB2YWx1ZXMgZm9yIHRpbWluZyB0byBtYWtlIGZic2V0IGhhcHB5ICovCisJbWFjZmJfZGVmaW5lZC5waXhjbG9jayAgICAgPSAxMDAwMDAwMCAvIG1hY2ZiX2RlZmluZWQueHJlcyAqCisJCQkJICAgICAxMDAwIC8gbWFjZmJfZGVmaW5lZC55cmVzOwogCW1hY2ZiX2RlZmluZWQubGVmdF9tYXJnaW4gID0gKG1hY2ZiX2RlZmluZWQueHJlcyAvIDgpICYgMHhmODsKIAltYWNmYl9kZWZpbmVkLmhzeW5jX2xlbiAgICA9IChtYWNmYl9kZWZpbmVkLnhyZXMgLyA4KSAmIDB4Zjg7CiAKIAlzd2l0Y2ggKG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE6Ci0JCS8qIFhYWDogSSB0aGluayB0aGlzIHdpbGwgY2F0Y2ggYW55IHByb2dyYW0gdGhhdCB0cmllcwotCQkgICB0byBkbyBGQklPX1BVVENNQVAgd2hlbiB0aGUgdmlzdWFsIGlzIG1vbm9jaHJvbWUgKi8KKwkJLyoKKwkJICogWFhYOiBJIHRoaW5rIHRoaXMgd2lsbCBjYXRjaCBhbnkgcHJvZ3JhbSB0aGF0IHRyaWVzCisJCSAqIHRvIGRvIEZCSU9fUFVUQ01BUCB3aGVuIHRoZSB2aXN1YWwgaXMgbW9ub2Nocm9tZS4KKwkJICovCiAJCW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCA9IG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWw7CiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCA9IG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWw7CkBAIC03MDgsNTMgKzY0MSw1MiBAQAogCQltYWNmYl9kZWZpbmVkLmdyZWVuLmxlbmd0aCA9IDU7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgPSAwOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gNTsKLQkJcHJpbnRrKCJtYWNmYjogZGlyZWN0Y29sb3I6ICIKLQkJICAgICAgICJzaXplPTE6NTo1OjUsIHNoaWZ0PTE1OjEwOjU6MFxuIik7CiAJCXZpZGVvX2NtYXBfbGVuID0gMTY7Ci0JCS8qIFNob3VsZCBhY3R1YWxseSBiZSBGQl9WSVNVQUxfRElSRUNUQ09MT1IsIGJ1dCB0aGlzCi0JCSAgIHdvcmtzIHRvbyAqLworCQkvKgorCQkgKiBTaG91bGQgYWN0dWFsbHkgYmUgRkJfVklTVUFMX0RJUkVDVENPTE9SLCBidXQgdGhpcworCQkgKiB3b3JrcyB0b28KKwkJICovCiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCQlicmVhazsKIAljYXNlIDI0OgogCWNhc2UgMzI6Ci0JCS8qIFhYWDogaGF2ZSB0byB0ZXN0IHRoZXNlLi4uIGNhbiBhbnkgNjhrIE1hY3MKLQkJICAgYWN0dWFsbHkgZG8gdGhpcyBvbiBpbnRlcm5hbCB2aWRlbz8gKi8KIAkJbWFjZmJfZGVmaW5lZC5yZWQub2Zmc2V0ID0gMTY7CiAJCW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCA9IDg7CiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ub2Zmc2V0ID0gODsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSA4OwogCQltYWNmYl9kZWZpbmVkLmJsdWUub2Zmc2V0ID0gMDsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCA9IDg7Ci0JCXByaW50aygibWFjZmI6IHRydWVjb2xvcjogIgotCQkgICAgICAgInNpemU9MDo4Ojg6OCwgc2hpZnQ9MDoxNjo4OjBcbiIpOwogCQl2aWRlb19jbWFwX2xlbiA9IDE2OwogCQltYWNmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmlkZW9fY21hcF9sZW4gPSAwOwogCQltYWNmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8wMTsKLQkJcHJpbnRrKCJtYWNmYjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBiaXQgZGVwdGg6ICVkXG4iLCBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKTsKKwkJcHJpbnRrKCJtYWNmYjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBiaXQgZGVwdGg6ICVkXG4iLAorCQkgICAgICAgbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCk7CiAJCWJyZWFrOwogCX0KIAkKLQkvKiBIYXJkd2FyZSBkZXBlbmRlbnQgc3R1ZmYgKi8KLQkvKiAgV2UgdGFrZSBhIHdpbGQgZ3Vlc3MgdGhhdCBpZiB0aGUgdmlkZW8gcGh5c2ljYWwgYWRkcmVzcyBpcwotCSAqICBpbiBudWJ1cyBzbG90IHNwYWNlLCB0aGF0IHRoZSBudWJ1cyBjYXJkIGlzIGRyaXZpbmcgdmlkZW8uCi0JICogIFBlbmd1aW4gcmVhbGx5IG91Z2h0IHRvIHRlbGwgdXMgd2hldGhlciB3ZSBhcmUgdXNpbmcgaW50ZXJuYWwKLQkgKiAgdmlkZW8gb3Igbm90LgorCS8qCisJICogV2UgdGFrZSBhIHdpbGQgZ3Vlc3MgdGhhdCBpZiB0aGUgdmlkZW8gcGh5c2ljYWwgYWRkcmVzcyBpcworCSAqIGluIG51YnVzIHNsb3Qgc3BhY2UsIHRoYXQgdGhlIG51YnVzIGNhcmQgaXMgZHJpdmluZyB2aWRlby4KKwkgKiBQZW5ndWluIHJlYWxseSBvdWdodCB0byB0ZWxsIHVzIHdoZXRoZXIgd2UgYXJlIHVzaW5nIGludGVybmFsCisJICogdmlkZW8gb3Igbm90LgorCSAqIEhvcGVmdWxseSB3ZSBvbmx5IGZpbmQgb25lIG9mIHRoZW0uICBPdGhlcndpc2Ugb3VyIE51QnVzCisJICogY29kZSBpcyByZWFsbHkgYnJva2VuIDotKQogCSAqLwotCS8qIEhvcGVmdWxseSB3ZSBvbmx5IGZpbmQgb25lIG9mIHRoZW0uICBPdGhlcndpc2Ugb3VyIE51QnVzCi0gICAgICAgICAgIGNvZGUgaXMgcmVhbGx5IGJyb2tlbiA6LSkgKi8KIAotCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfRElTUExBWSwgTlVCVVNfVFlQRV9WSURFTywgbmRldikpCi0JCSE9IE5VTEwpCisJd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ESVNQTEFZLAorCQkJCSAgICAgICBOVUJVU19UWVBFX1ZJREVPLCBuZGV2KSkpCiAJewotCQlpZiAoIShtYWNfYmlfZGF0YS52aWRlb2FkZHIgPj0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkcgotCQkgICAgICAmJiAobWFjX2JpX2RhdGEudmlkZW9hZGRyIDwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpbnVidXNfc2xvdF9hZGRyKG5kZXYtPmJvYXJkLT5zbG90KzEpKSkpCisJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG5kZXYtPmJvYXJkLT5zbG90X2FkZHI7CisKKwkJaWYgKG1hY19iaV9kYXRhLnZpZGVvYWRkciA8IGJhc2UgfHwKKwkJICAgIG1hY19iaV9kYXRhLnZpZGVvYWRkciAtIGJhc2UgPiAweEZGRkZGRikKIAkJCWNvbnRpbnVlOworCiAJCXZpZGVvX2lzX251YnVzID0gMTsKLQkJLyogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgdXNlIHRoZSBzbG90IGFkZHJlc3MuLi4gKi8KLQkJdmlkZW9fc2xvdCA9IG5kZXYtPmJvYXJkLT5zbG90OworCQlzbG90X2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWJhc2U7CiAKIAkJc3dpdGNoKG5kZXYtPmRyX2h3KSB7CiAJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9NREM6CkBAIC03NzEsNyArNzAzLDcgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJKZXQiKTsKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSBqZXRfc2V0cGFsZXR0ZTsKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7Ci0JCQlicmVhazsJCQkKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkdlbmVyaWMgTnVCdXMiKTsKIAkJCWJyZWFrOwpAQCAtNzc5LDMwICs3MTEsMTkgQEAKIAl9CiAKIAkvKiBJZiBpdCdzIG5vdCBhIE51QnVzIGNhcmQsIGl0IG11c3QgYmUgaW50ZXJuYWwgdmlkZW8gKi8KLQkvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBnZXR0aW5nIHdheSB0b28gYmlnLiAgKHRoaXMgZHJpdmVyCi0gICAgICAgICAgIGlzIHRvby4uLikgKi8KIAlpZiAoIXZpZGVvX2lzX251YnVzKQotCQlzd2l0Y2goIG1hY19iaV9kYXRhLmlkICkKLQkJewotCQkJLyogVmFsa3lyaWUgUXVhZHJhcyAqLwotCQljYXNlIE1BQ19NT0RFTF9RNjMwOgotCQkJLyogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgb25lICovCi0JCWNhc2UgTUFDX01PREVMX1A1ODg6Ci0JCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVmFsa3lyaWUiKTsKLQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2YWxreXJpZV9zZXRwYWxldHRlOwotCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQkJCXZhbGt5cmllX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7Ci0JCQlicmVhazsKLQotCQkJLyogREFGQiBRdWFkcmFzICovCi0JCQkvKiBOb3RlOiB0aGVzZSBmaXJzdCBmb3VyIGhhdmUgdGhlIHY3IERBRkIsIHdoaWNoIGlzCi0JCQkgICBrbm93biB0byBiZSByYXRoZXIgdW5saWtlIHRoZSBvbmVzIHVzZWQgaW4gdGhlCi0JCQkgICBvdGhlciBtb2RlbHMgKi8KKwkJc3dpdGNoIChtYWNfYmlfZGF0YS5pZCkgeworCQkvKgorCQkgKiBEQUZCIFF1YWRyYXMKKwkJICogTm90ZTogdGhlc2UgZmlyc3QgZm91ciBoYXZlIHRoZSB2NyBEQUZCLCB3aGljaCBpcworCQkgKiBrbm93biB0byBiZSByYXRoZXIgdW5saWtlIHRoZSBvbmVzIHVzZWQgaW4gdGhlCisJCSAqIG90aGVyIG1vZGVscworCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUDQ3NToKIAkJY2FzZSBNQUNfTU9ERUxfUDQ3NUY6CiAJCWNhc2UgTUFDX01PREVMX1A1NzU6CiAJCWNhc2UgTUFDX01PREVMX1E2MDU6Ci0JCisKIAkJY2FzZSBNQUNfTU9ERUxfUTgwMDoKIAkJY2FzZSBNQUNfTU9ERUxfUTY1MDoKIAkJY2FzZSBNQUNfTU9ERUxfUTYxMDoKQEAgLTgxNywxNyArNzM4LDIxIEBACiAJCQlkYWZiX2NtYXBfcmVncyA9IGlvcmVtYXAoREFGQl9CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7CiAKLQkJCS8qIExDIElJIHVzZXMgdGhlIFY4IGZyYW1lYnVmZmVyICovCisJCS8qCisJCSAqIExDIElJIHVzZXMgdGhlIFY4IGZyYW1lYnVmZmVyCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9MQ0lJOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlY4Iik7CiAJCQltYWNmYl9zZXRwYWxldHRlID0gdjhfYnJhemlsX3NldHBhbGV0dGU7CiAJCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCi0JCQkvKiBJSXZpLCBJSXZ4IHVzZSB0aGUgIkJyYXppbCIgZnJhbWVidWZmZXIgKHdoaWNoIGlzCi0JCQkgICB2ZXJ5IG11Y2ggbGlrZSB0aGUgVjgsIGl0IHNlZW1zLCBhbmQgcHJvYmFibHkgdXNlcwotCQkJICAgdGhlIHNhbWUgREFDKSAqLworCisJCS8qCisJCSAqIElJdmksIElJdnggdXNlIHRoZSAiQnJhemlsIiBmcmFtZWJ1ZmZlciAod2hpY2ggaXMKKwkJICogdmVyeSBtdWNoIGxpa2UgdGhlIFY4LCBpdCBzZWVtcywgYW5kIHByb2JhYmx5IHVzZXMKKwkJICogdGhlIHNhbWUgREFDKQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfSUlWSToKIAkJY2FzZSBNQUNfTU9ERUxfSUlWWDoKIAkJY2FzZSBNQUNfTU9ERUxfUDYwMDoKQEAgLTgzNiwxMiArNzYxLDE0IEBACiAJCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCi0JCQkvKiBMQyBJSUkgKGFuZCBmcmllbmRzKSB1c2UgdGhlIFNvbm9yYSBmcmFtZWJ1ZmZlciAqLwotCQkJLyogSW5jaWRlbnRhbGx5IHRoaXMgaXMgYWxzbyB1c2VkIGluIHRoZSBub24tQVYgbW9kZWxzCi0JCQkgICBvZiB0aGUgeDEwMCBQb3dlck1hY3MgKi8KLQkJCS8qIFRoZXNlIGRvIGluIGZhY3Qgc2VlbSB0byB1c2UgdGhlIHNhbWUgREFDIGludGVyZmFjZQotCQkJICAgYXMgdGhlIExDIElJLiAqLworCisJCS8qCisJCSAqIExDIElJSSAoYW5kIGZyaWVuZHMpIHVzZSB0aGUgU29ub3JhIGZyYW1lYnVmZmVyCisJCSAqIEluY2lkZW50YWxseSB0aGlzIGlzIGFsc28gdXNlZCBpbiB0aGUgbm9uLUFWIG1vZGVscworCQkgKiBvZiB0aGUgeDEwMCBQb3dlck1hY3MKKwkJICogVGhlc2UgZG8gaW4gZmFjdCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMgaW50ZXJmYWNlCisJCSAqIGFzIHRoZSBMQyBJSS4KKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0xDSUlJOgogCQljYXNlIE1BQ19NT0RFTF9QNTIwOgogCQljYXNlIE1BQ19NT0RFTF9QNTUwOgpAQCAtODUyLDkgKzc3OSwxMSBAQAogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogSUljaSBhbmQgSUlzaSB1c2UgdGhlIGluZmFtb3VzIFJCViBjaGlwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIElJc2kgaXMganVzdCBhIHJlYmFkZ2VkIGFuZCBjcmlwcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSUljaSBpbiBhIGRpZmZlcmVudCBjYXNlLCBCVFcpICovCisJCS8qCisJCSAqIElJY2kgYW5kIElJc2kgdXNlIHRoZSBpbmZhbW91cyBSQlYgY2hpcAorCQkgKiAodGhlIElJc2kgaXMganVzdCBhIHJlYmFkZ2VkIGFuZCBjcmlwcGxlZAorCQkgKiBJSWNpIGluIGEgZGlmZmVyZW50IGNhc2UsIEJUVykKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0lJQ0k6CiAJCWNhc2UgTUFDX01PREVMX0lJU0k6CiAJCQltYWNmYl9zZXRwYWxldHRlID0gcmJ2X3NldHBhbGV0dGU7CkBAIC04NjMsNyArNzkyLDkgQEAKIAkJCXJidl9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7CiAKLQkJCS8qIEFWcyB1c2UgdGhlIENpdmljIGZyYW1lYnVmZmVyICovCisJCS8qCisJCSAqIEFWcyB1c2UgdGhlIENpdmljIGZyYW1lYnVmZmVyCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9RODQwOgogCQljYXNlIE1BQ19NT0RFTF9DNjYwOgogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IGNpdmljX3NldHBhbGV0dGU7CkBAIC04NzMsMTUgKzgwNCwxMCBAQAogCQkJYnJlYWs7CiAKIAkJCi0JCQkvKiBXcml0ZSBhIHNldHBhbGV0dGUgZnVuY3Rpb24gZm9yIHlvdXIgbWFjaGluZSwgdGhlbgotCQkJICAgeW91IGNhbiBhZGQgc29tZXRoaW5nIHNpbWlsYXIgaGVyZS4gIFRoZXNlIGFyZQotCQkJICAgZ3JvdXBlZCBieSBjbGFzc2VzIG9mIHZpZGVvIGNoaXBzZXRzLiAgU29tZSBvZiB0aGlzCi0JCQkgICBpbmZvcm1hdGlvbiBpcyBmcm9tIHRoZSBWaWRlb1Rvb2xib3ggIkJ1Z3MiIHdlYgotCQkJICAgcGFnZSBhdAotCQkJICAgaHR0cDovL3JhanNreS5wc3ljaC5ueXUuZWR1L1RpcHMvVmlkZW9CdWdzLmh0bWwgKi8KLQotCQkJLyogQXNzb3J0ZWQgd2VpcmRvcyAqLwotCQkJLyogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkgKi8KKwkJLyoKKwkJICogQXNzb3J0ZWQgd2VpcmRvcworCQkgKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfTEM6CiAJCQlpZiAodmlkdGVzdCkgewogCQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKQEAgLTg5MSw3ICs4MTcsMTAgQEAKIAkJCX0KIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJMQyIpOwogCQkJYnJlYWs7Ci0JCQkvKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSSAqLworCisJCS8qCisJCSAqIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9DQ0w6CiAJCQlpZiAodmlkdGVzdCkgewogCQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKQEAgLTkwMiwzMSArODMxLDQyIEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiQ29sb3IgQ2xhc3NpYyIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEFuZCB3ZSAqZG8qIG1lYW4gIndlaXJkb3MiICovCisJCS8qCisJCSAqIEFuZCB3ZSAqZG8qIG1lYW4gIndlaXJkb3MiCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9UVjoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJNYWMgVFYiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBUaGVzZSBkb24ndCBoYXZlIGNvbG91ciwgc28gbm8gbmVlZCB0byB3b3JyeSAqLworCQkvKgorCQkgKiBUaGVzZSBkb24ndCBoYXZlIGNvbG91ciwgc28gbm8gbmVlZCB0byB3b3JyeQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfU0UzMDoKIAkJY2FzZSBNQUNfTU9ERUxfQ0xJSToKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJNb25vY2hyb21lIik7CiAJCQlicmVhazsKIAotCQkJLyogUG93ZXJib29rcyBhcmUgcGFydGljdWxhcmx5IGRpZmZpY3VsdC4gIE1hbnkgb2YKLQkJCSAgIHRoZW0gaGF2ZSBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGV4dGVybmFsIGFuZAotCQkJICAgaW50ZXJuYWwgdmlkZW8sIHdoaWNoIGlzIGFkbWl0dGVkbHkgcHJldHR5IGNvb2wsCi0JCQkgICBidXQgd2lsbCBiZSBhIGJpdCBvZiBhIGhlYWRhY2hlIHRvIHN1cHBvcnQgaGVyZS4KLQkJCSAgIEFsc28sIG1hbnkgb2YgdGhlbSBhcmUgZ3JheXNjYWxlLCBhbmQgd2UgZG9uJ3QKLQkJCSAgIHJlYWxseSBzdXBwb3J0IHRoYXQuICovCisJCS8qCisJCSAqIFBvd2VyYm9va3MgYXJlIHBhcnRpY3VsYXJseSBkaWZmaWN1bHQuICBNYW55IG9mCisJCSAqIHRoZW0gaGF2ZSBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGV4dGVybmFsIGFuZAorCQkgKiBpbnRlcm5hbCB2aWRlbywgd2hpY2ggaXMgYWRtaXR0ZWRseSBwcmV0dHkgY29vbCwKKwkJICogYnV0IHdpbGwgYmUgYSBiaXQgb2YgYSBoZWFkYWNoZSB0byBzdXBwb3J0IGhlcmUuCisJCSAqIEFsc28sIG1hbnkgb2YgdGhlbSBhcmUgZ3JheXNjYWxlLCBhbmQgd2UgZG9uJ3QKKwkJICogcmVhbGx5IHN1cHBvcnQgdGhhdC4KKwkJICovCiAKKwkJLyoKKwkJICogU2xvdCAwIFJPTSBzYXlzIFRJTS4gTm8gZXh0ZXJuYWwgdmlkZW8uIEImVy4KKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTQwOgogCQljYXNlIE1BQ19NT0RFTF9QQjE0NToKIAkJY2FzZSBNQUNfTU9ERUxfUEIxNzA6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiRERDIik7CiAJCQlicmVhazsKIAotCQkJLyogSW50ZXJuYWwgaXMgR1NDLCBFeHRlcm5hbCAoaWYgcHJlc2VudCkgaXMgVmlTQyAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBHU0MsIEV4dGVybmFsIChpZiBwcmVzZW50KSBpcyBWaVNDCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE1MDoJLyogbm8gZXh0ZXJuYWwgdmlkZW8gKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNjA6CiAJCWNhc2UgTUFDX01PREVMX1BCMTY1OgpAQCAtOTM2LDEzICs4NzYsMTcgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJHU0MiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBUSU0sIEV4dGVybmFsIGlzIFZpU0MgKi8KKwkJLyoKKwkJICogSW50ZXJuYWwgaXMgVElNLCBFeHRlcm5hbCBpcyBWaVNDCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE2NUM6CiAJCWNhc2UgTUFDX01PREVMX1BCMTgwQzoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJUSU0iKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBDU0MsIEV4dGVybmFsIGlzIEtleXN0b25lK0FyaWVsLiAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBDU0MsIEV4dGVybmFsIGlzIEtleXN0b25lK0FyaWVsLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxOTA6CS8qIGV4dGVybmFsIHZpZGVvIGlzIG9wdGlvbmFsICovCiAJCWNhc2UgTUFDX01PREVMX1BCNTIwOgogCQljYXNlIE1BQ19NT0RFTF9QQjI1MDoKQEAgLTk1NCw3ICs4OTgsNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkNTQyIpOwogCQkJY3NjX2NtYXBfcmVncyA9IGlvcmVtYXAoQ1NDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCisKIAkJZGVmYXVsdDoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJVbmtub3duIik7CiAJCQlicmVhazsKQEAgLTk2OSw3ICs5MTMsNyBAQAogCWVyciA9IGZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwgdmlkZW9fY21hcF9sZW4sIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF91bm1hcDsKLQkKKwogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxfZGVhbGxvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYyBiL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYwppbmRleCAwODNmNjAzLi5hZjg2YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKKysrIGIvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCkBAIC0zMyw2ICszMywxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBtYWNfbW9kZWRiW10gPSB7CiAgICAgeworCS8qIDUxMngzODQsIDYwSHosIE5vbi1JbnRlcmxhY2VkICgxNS42NyBNSHogZG90IGNsb2NrKSAqLworCSJtYWMyIiwgNjAsIDUxMiwgMzg0LCA2MzgyOCwgODAsIDE2LCAxOSwgMSwgMzIsIDMsCisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAorICAgIH0sIHsKIAkvKiA2NDB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI1LjE3NSBNSHogZG90Y2xvY2spICovCiAJIm1hYzUiLCA2MCwgNjQwLCA0ODAsIDM5NzIyLCAzMiwgMzIsIDMzLCAxMCwgOTYsIDIsCiAJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRApAQCAtNDEsNiArNDUsMTAgQEAKIAkibWFjNiIsIDY3LCA2NDAsIDQ4MCwgMzMzMzQsIDgwLCA4MCwgMzksIDMsIDY0LCAzLAogCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKICAgICB9LCB7CisJLyogNjQweDg3MCwgNzVIeiAocG9ydHJhaXQpLCBOb24tSW50ZXJsYWNlZCAoNTcuMjggTUh6IGRvdCBjbG9jaykgKi8KKwkibWFjNyIsIDc1LCA2NDAsIDg3MCwgMTc0NTcsIDgwLCAzMiwgNDIsIDMsIDgwLCAzLAorCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKKyAgICB9LCB7CiAJLyogODAweDYwMCwgNTYgSHosIE5vbi1JbnRlcmxhY2VkICgzNi4wMCBNSHogZG90Y2xvY2spICovCiAJIm1hYzkiLCA1NiwgODAwLCA2MDAsIDI3Nzc4LCAxMTIsIDQwLCAyMiwgMSwgNzIsIDIsCiAJRkJfU1lOQ19IT1JfSElHSF9BQ1R8RkJfU1lOQ19WRVJUX0hJR0hfQUNULCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECkBAIC0xMDUsMTAgKzExMyw2IEBACiAJIm1hYzEiLCA2MCwgNTEyLCAzODQsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRAogICAgIH0sIHsKLQkvKiBWTU9ERV81MTJfMzg0XzYwOiA1MTJ4Mzg0LCA2MEh6LCBOb24tSW50ZXJsYWNlZCAqLwotICAgIAkibWFjMiIsIDYwLCA1MTIsIDM4NCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKLQlzeW5jLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0gICAgfSwgewogCS8qIFZNT0RFXzY0MF80ODBfNTBJOiA2NDB4NDgwLCA1MEh6LCBJbnRlcmxhY2VkIChQQUwpICovCiAJIm1hYzMiLCA1MCwgNjQwLCA0ODAsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRApAQCAtMTE3LDEwICsxMjEsNiBAQAogCSJtYWM0IiwgNjAsIDY0MCwgNDgwLCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKICAgICB9LCB7Ci0JLyogVk1PREVfNjQwXzg3MF83NVA6IDY0MHg4NzAsIDc1SHogKHBvcnRyYWl0KSwgTm9uLUludGVybGFjZWQgKi8KLQkibWFjNyIsIDc1LCA2NDAsIDg3MCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKLQlzeW5jLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0gICAgfSwgewogCS8qIFZNT0RFXzc2OF81NzZfNTBJOiA3Njh4NTc2LCA1MEh6IChQQUwgZnVsbCBmcmFtZSksIEludGVybGFjZWQgKi8KIAkibWFjOCIsIDUwLCA3NjgsIDU3NiwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECkBAIC0xMzQsMzggKzEzNCw0MiBAQAogICAgICAqCiAgICAgICogIFRoZXNlIE1VU1QgYmUgb3JkZXJlZCBpbgogICAgICAqICAgIC0gaW5jcmVhc2luZyByZXNvbHV0aW9uCi0gICAgICogICAgLSBkZWNyZWFzaW5nIHJlZnJlc2ggcmF0ZQorICAgICAqICAgIC0gZGVjcmVhc2luZyBwaXhlbCBjbG9jayBwZXJpb2QKICAgICAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtb2RlX21hcCB7CiAgICAgaW50IHZtb2RlOwogICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CiB9IG1hY19tb2Rlc1tdID0geworICAgIC8qIDUxMngzODQgKi8KKyAgICB7IFZNT0RFXzUxMl8zODRfNjAsICZtYWNfbW9kZWRiWzBdIH0sCiAgICAgLyogNjQweDQ4MCAqLwotICAgIHsgVk1PREVfNjQwXzQ4MF82NywgJm1hY19tb2RlZGJbMV0gfSwKLSAgICB7IFZNT0RFXzY0MF80ODBfNjAsICZtYWNfbW9kZWRiWzBdIH0sCisgICAgeyBWTU9ERV82NDBfNDgwXzYwLCAmbWFjX21vZGVkYlsxXSB9LAorICAgIHsgVk1PREVfNjQwXzQ4MF82NywgJm1hY19tb2RlZGJbMl0gfSwKKyAgICAvKiA2NDB4ODcwICovCisgICAgeyBWTU9ERV82NDBfODcwXzc1UCwgJm1hY19tb2RlZGJbM10gfSwKICAgICAvKiA4MDB4NjAwICovCi0gICAgeyBWTU9ERV84MDBfNjAwXzc1LCAmbWFjX21vZGVkYls1XSB9LAotICAgIHsgVk1PREVfODAwXzYwMF83MiwgJm1hY19tb2RlZGJbNF0gfSwKLSAgICB7IFZNT0RFXzgwMF82MDBfNjAsICZtYWNfbW9kZWRiWzNdIH0sCi0gICAgeyBWTU9ERV84MDBfNjAwXzU2LCAmbWFjX21vZGVkYlsyXSB9LAorICAgIHsgVk1PREVfODAwXzYwMF81NiwgJm1hY19tb2RlZGJbNF0gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNjAsICZtYWNfbW9kZWRiWzVdIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzc1LCAmbWFjX21vZGVkYls3XSB9LAorICAgIHsgVk1PREVfODAwXzYwMF83MiwgJm1hY19tb2RlZGJbNl0gfSwKICAgICAvKiA4MzJ4NjI0ICovCi0gICAgeyBWTU9ERV84MzJfNjI0Xzc1LCAmbWFjX21vZGVkYls2XSB9LAorICAgIHsgVk1PREVfODMyXzYyNF83NSwgJm1hY19tb2RlZGJbOF0gfSwKICAgICAvKiAxMDI0eDc2OCAqLwotICAgIHsgVk1PREVfMTAyNF83NjhfNzUsICZtYWNfbW9kZWRiWzEwXSB9LAotICAgIHsgVk1PREVfMTAyNF83NjhfNzVWLCAmbWFjX21vZGVkYls5XSB9LAotICAgIHsgVk1PREVfMTAyNF83NjhfNzAsICZtYWNfbW9kZWRiWzhdIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF82MCwgJm1hY19tb2RlZGJbN10gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4XzYwLCAmbWFjX21vZGVkYls5XSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzAsICZtYWNfbW9kZWRiWzEwXSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzVWLCAmbWFjX21vZGVkYlsxMV0gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4Xzc1LCAmbWFjX21vZGVkYlsxMl0gfSwKICAgICAvKiAxMTUyeDc2OCAqLwotICAgIHsgVk1PREVfMTE1Ml83NjhfNjAsICZtYWNfbW9kZWRiWzE0XSB9LAorICAgIHsgVk1PREVfMTE1Ml83NjhfNjAsICZtYWNfbW9kZWRiWzE2XSB9LAogICAgIC8qIDExNTJ4ODcwICovCi0gICAgeyBWTU9ERV8xMTUyXzg3MF83NSwgJm1hY19tb2RlZGJbMTFdIH0sCisgICAgeyBWTU9ERV8xMTUyXzg3MF83NSwgJm1hY19tb2RlZGJbMTNdIH0sCiAgICAgLyogMTI4MHg5NjAgKi8KLSAgICB7IFZNT0RFXzEyODBfOTYwXzc1LCAmbWFjX21vZGVkYlsxMl0gfSwKKyAgICB7IFZNT0RFXzEyODBfOTYwXzc1LCAmbWFjX21vZGVkYlsxNF0gfSwKICAgICAvKiAxMjgweDEwMjQgKi8KLSAgICB7IFZNT0RFXzEyODBfMTAyNF83NSwgJm1hY19tb2RlZGJbMTNdIH0sCisgICAgeyBWTU9ERV8xMjgwXzEwMjRfNzUsICZtYWNfbW9kZWRiWzE1XSB9LAogICAgIC8qIDE2MDB4MTAyNCAqLwotICAgIHsgVk1PREVfMTYwMF8xMDI0XzYwLCAmbWFjX21vZGVkYlsxNV0gfSwKKyAgICB7IFZNT0RFXzE2MDBfMTAyNF82MCwgJm1hY19tb2RlZGJbMTddIH0sCiAgICAgeyAtMSwgTlVMTCB9CiB9OwogCkBAIC0yOTksNyArMzAzLDYgQEAKIGludCBtYWNfdmFyX3RvX3Ztb2RlKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgKnZtb2RlLAogCQkgICAgIGludCAqY21vZGUpCiB7Ci0gICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IE5VTEw7CiAgICAgY29uc3Qgc3RydWN0IG1vZGVfbWFwICptYXA7CiAKICAgICBpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA8PSA4KQpAQCAtMzExLDggKzMxNCwxMyBAQAogICAgIGVsc2UKIAlyZXR1cm4gLUVJTlZBTDsKIAorICAgIC8qCisgICAgICogRmluZCB0aGUgbWFjX21vZGUgd2l0aCBhIG1hdGNoaW5nIHJlc29sdXRpb24gb3IgZmFpbGluZyB0aGF0LCB0aGUKKyAgICAgKiBjbG9zZXN0IGxhcmdlciByZXNvbHV0aW9uLiBTa2lwIG1vZGVzIHdpdGggYSBzaG9ydGVyIHBpeGVsIGNsb2NrIHBlcmlvZC4KKyAgICAgKi8KICAgICBmb3IgKG1hcCA9IG1hY19tb2RlczsgbWFwLT52bW9kZSAhPSAtMTsgbWFwKyspIHsKLQltb2RlID0gbWFwLT5tb2RlOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBtYXAtPm1vZGU7CisKIAlpZiAodmFyLT54cmVzID4gbW9kZS0+eHJlcyB8fCB2YXItPnlyZXMgPiBtb2RlLT55cmVzKQogCSAgICBjb250aW51ZTsKIAlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiBtb2RlLT54cmVzIHx8IHZhci0+eXJlc192aXJ0dWFsID4gbW9kZS0+eXJlcykKQEAgLTMyMiw2ICszMzAsMjQgQEAKIAlpZiAoKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSAhPSBtb2RlLT52bW9kZSkKIAkgICAgY29udGludWU7CiAJKnZtb2RlID0gbWFwLT52bW9kZTsKKworCS8qCisJICogSGF2aW5nIGZvdW5kIGEgZ29vZCByZXNvbHV0aW9uLCBmaW5kIHRoZSBtYXRjaGluZyBwaXhlbCBjbG9jaworCSAqIG9yIGZhaWxpbmcgdGhhdCwgdGhlIGNsb3Nlc3QgbG9uZ2VyIHBpeGVsIGNsb2NrIHBlcmlvZC4KKwkgKi8KKwltYXArKzsKKwl3aGlsZSAobWFwLT52bW9kZSAhPSAtMSkgeworCSAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpjbGtfbW9kZSA9IG1hcC0+bW9kZTsKKworCSAgICBpZiAobW9kZS0+eHJlcyAhPSBjbGtfbW9kZS0+eHJlcyB8fCBtb2RlLT55cmVzICE9IGNsa19tb2RlLT55cmVzKQorCQlicmVhazsKKwkgICAgaWYgKHZhci0+cGl4Y2xvY2sgPiBtb2RlLT5waXhjbG9jaykKKwkgICAgICAgIGJyZWFrOworCSAgICBpZiAobW9kZS0+dm1vZGUgIT0gY2xrX21vZGUtPnZtb2RlKQorCQljb250aW51ZTsKKwkgICAgKnZtb2RlID0gbWFwLT52bW9kZTsKKwkgICAgbWFwKys7CisJfQogCXJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYW1zX2RlbHRhLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Ftc19kZWx0YS5jCmluZGV4IDU2N2RiNmEuLjY5NzhhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYW1zX2RlbHRhLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hbXNfZGVsdGEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KIAogI2luY2x1ZGUgPHBsYXQvYm9hcmQtYW1zLWRlbHRhLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzIsNiArMzMsNzEgQEAKIAogI2RlZmluZSBBTVNfREVMVEFfREVGQVVMVF9DT05UUkFTVAkxMTIKIAorI2RlZmluZSBBTVNfREVMVEFfTUFYX0NPTlRSQVNUCQkweDAwRkYKKyNkZWZpbmUgQU1TX0RFTFRBX0xDRF9QT1dFUgkJMHgwMTAwCisKKworLyogTENEIGNsYXNzIGRldmljZSBzZWN0aW9uICovCisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX2xjZDsKKworc3RhdGljIGludCBhbXNfZGVsdGFfbGNkX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2LCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspIHsKKwkJaWYgKCEoYW1zX2RlbHRhX2xjZCAmIEFNU19ERUxUQV9MQ0RfUE9XRVIpKSB7CisJCQlvbWFwX3dyaXRlYihhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX01BWF9DT05UUkFTVCwKKwkJCQkJT01BUF9QV0xfRU5BQkxFKTsKKwkJCW9tYXBfd3JpdGViKDEsIE9NQVBfUFdMX0NMS19FTkFCTEUpOworCQkJYW1zX2RlbHRhX2xjZCB8PSBBTVNfREVMVEFfTENEX1BPV0VSOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFtc19kZWx0YV9sY2QgJiBBTVNfREVMVEFfTENEX1BPV0VSKSB7CisJCQlvbWFwX3dyaXRlYigwLCBPTUFQX1BXTF9FTkFCTEUpOworCQkJb21hcF93cml0ZWIoMCwgT01BUF9QV0xfQ0xLX0VOQUJMRSk7CisJCQlhbXNfZGVsdGFfbGNkICY9IH5BTVNfREVMVEFfTENEX1BPV0VSOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9sY2Rfc2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYsIGludCB2YWx1ZSkKK3sKKwlpZiAoKHZhbHVlID49IDApICYmICh2YWx1ZSA8PSBBTVNfREVMVEFfTUFYX0NPTlRSQVNUKSkgeworCQlvbWFwX3dyaXRlYih2YWx1ZSwgT01BUF9QV0xfRU5BQkxFKTsKKwkJYW1zX2RlbHRhX2xjZCAmPSB+QU1TX0RFTFRBX01BWF9DT05UUkFTVDsKKwkJYW1zX2RlbHRhX2xjZCB8PSB2YWx1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfTENEX0NMQVNTX0RFVklDRQorc3RhdGljIGludCBhbXNfZGVsdGFfbGNkX2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2KQoreworCWlmIChhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX0xDRF9QT1dFUikKKwkJcmV0dXJuIEZCX0JMQU5LX1VOQkxBTks7CisJZWxzZQorCQlyZXR1cm4gRkJfQkxBTktfUE9XRVJET1dOOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9sY2RfZ2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYpCit7CisJaWYgKCEoYW1zX2RlbHRhX2xjZCAmIEFNU19ERUxUQV9MQ0RfUE9XRVIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX01BWF9DT05UUkFTVDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGFtc19kZWx0YV9sY2Rfb3BzID0geworCS5nZXRfcG93ZXIgPSBhbXNfZGVsdGFfbGNkX2dldF9wb3dlciwKKwkuc2V0X3Bvd2VyID0gYW1zX2RlbHRhX2xjZF9zZXRfcG93ZXIsCisJLmdldF9jb250cmFzdCA9IGFtc19kZWx0YV9sY2RfZ2V0X2NvbnRyYXN0LAorCS5zZXRfY29udHJhc3QgPSBhbXNfZGVsdGFfbGNkX3NldF9jb250cmFzdCwKK307CisjZW5kaWYKKworCisvKiBvbWFwZmIgcGFuZWwgc2VjdGlvbiAqLworCiBzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAogCQlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCiB7CkBAIC00OCwxMCArMTE0LDYgQEAKIAkJCUFNU19ERUxUQV9MQVRDSDJfTENEX05ESVNQKTsKIAlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTENEX1ZCTEVOLAogCQkJQU1TX0RFTFRBX0xBVENIMl9MQ0RfVkJMRU4pOwotCi0Jb21hcF93cml0ZWIoMSwgT01BUF9QV0xfQ0xLX0VOQUJMRSk7Ci0Jb21hcF93cml0ZWIoQU1TX0RFTFRBX0RFRkFVTFRfQ09OVFJBU1QsIE9NQVBfUFdMX0VOQUJMRSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTEsOCArMTUzLDMxIEBACiAJLmdldF9jYXBzCT0gYW1zX2RlbHRhX3BhbmVsX2dldF9jYXBzLAogfTsKIAorCisvKiBwbGF0Zm9ybSBkcml2ZXIgc2VjdGlvbiAqLworCiBzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBsY2RfZGV2aWNlICpsY2RfZGV2aWNlID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfTENEX0NMQVNTX0RFVklDRQorCWludCByZXQ7CisKKwlsY2RfZGV2aWNlID0gbGNkX2RldmljZV9yZWdpc3Rlcigib21hcGZiIiwgJnBkZXYtPmRldiwgTlVMTCwKKwkJCQkJCSZhbXNfZGVsdGFfbGNkX29wcyk7CisKKwlpZiAoSVNfRVJSKGxjZF9kZXZpY2UpKSB7CisJCXJldCA9IFBUUl9FUlIobGNkX2RldmljZSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxjZF9kZXZpY2UpOworCWxjZF9kZXZpY2UtPnByb3BzLm1heF9jb250cmFzdCA9IEFNU19ERUxUQV9NQVhfQ09OVFJBU1Q7CisjZW5kaWYKKworCWFtc19kZWx0YV9sY2Rfc2V0X2NvbnRyYXN0KGxjZF9kZXZpY2UsIEFNU19ERUxUQV9ERUZBVUxUX0NPTlRSQVNUKTsKKwlhbXNfZGVsdGFfbGNkX3NldF9wb3dlcihsY2RfZGV2aWNlLCBGQl9CTEFOS19VTkJMQU5LKTsKKwogCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmYW1zX2RlbHRhX3BhbmVsKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKaW5kZXggMmM0ZjQ3MC4uOGNlNjBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKQEAgLTQ4NiwxMCArNDg2LDExIEBACiAJCXJldHVybiAwOwogCWNhc2UgMTI6CiAJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKLQkJcGxhbmUtPmNvbG9yX21vZGUgPSBPTUFQRkJfQ09MT1JfUkdCNDQ0OwotCQlyZXR1cm4gMDsKIAljYXNlIDE2OgotCQlwbGFuZS0+Y29sb3JfbW9kZSA9IE9NQVBGQl9DT0xPUl9SR0I1NjU7CisJCWlmIChwbGFuZS0+ZmJkZXYtPnBhbmVsLT5icHAgPT0gMTIpCisJCQlwbGFuZS0+Y29sb3JfbW9kZSA9IE9NQVBGQl9DT0xPUl9SR0I0NDQ7CisJCWVsc2UKKwkJCXBsYW5lLT5jb2xvcl9tb2RlID0gT01BUEZCX0NPTE9SX1JHQjU2NTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL0tjb25maWcKaW5kZXggYjEyYTU5Yy4uZGZiNTdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvS2NvbmZpZwpAQCAtMTMsMTAgKzEzLDI4IEBACiAgICAgICAgIGhlbHAKICAgICAgICAgICBMQ0QgUGFuZWwgdXNlZCBpbiBUSSdzIFNEUDM0MzAgYW5kIEVWTSBib2FyZHMKIAorY29uZmlnIFBBTkVMX1NIQVJQX0xRMDQzVDFERzAxCisgICAgICAgIHRyaXN0YXRlICJTaGFycCBMUTA0M1QxREcwMSBMQ0QgUGFuZWwiCisgICAgICAgIGRlcGVuZHMgb24gT01BUDJfRFNTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBMQ0QgUGFuZWwgdXNlZCBpbiBUSSdzIE9NQVAzNTE3IEVWTSBib2FyZHMKKwogY29uZmlnIFBBTkVMX1RBQUwKICAgICAgICAgdHJpc3RhdGUgIlRhYWwgRFNJIFBhbmVsIgogICAgICAgICBkZXBlbmRzIG9uIE9NQVAyX0RTU19EU0kKICAgICAgICAgaGVscAogICAgICAgICAgIFRhYWwgRFNJIGNvbW1hbmQgbW9kZSBwYW5lbCBmcm9tIFRQTy4KIAorY29uZmlnIFBBTkVMX1RPUFBPTFlfVERPMzVTCisgICAgICAgIHRyaXN0YXRlICJUb3Bwb2x5IFRETzM1UyBMQ0QgUGFuZWwgc3VwcG9ydCIKKyAgICAgICAgZGVwZW5kcyBvbiBPTUFQMl9EU1MKKyAgICAgICAgaGVscAorICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIENNLVQzNQorCitjb25maWcgUEFORUxfVFBPX1REMDQzTVRFQTEKKyAgICAgICAgdHJpc3RhdGUgIlRQTyBURDA0M01URUExIExDRCBQYW5lbCIKKyAgICAgICAgZGVwZW5kcyBvbiBPTUFQMl9EU1MgJiYgSTJDCisgICAgICAgIGhlbHAKKyAgICAgICAgICBMQ0QgUGFuZWwgdXNlZCBpbiBPTUFQMyBQYW5kb3JhCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL01ha2VmaWxlCmluZGV4IDk1NTY0NjQuLmUyYmIzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKIG9iai0kKENPTkZJR19QQU5FTF9HRU5FUklDKSArPSBwYW5lbC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSkgKz0gcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEubworb2JqLSQoQ09ORklHX1BBTkVMX1NIQVJQX0xRMDQzVDFERzAxKSArPSBwYW5lbC1zaGFycC1scTA0M3QxZGcwMS5vCiAKIG9iai0kKENPTkZJR19QQU5FTF9UQUFMKSArPSBwYW5lbC10YWFsLm8KK29iai0kKENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UykgKz0gcGFuZWwtdG9wcG9seS10ZG8zNXMubworb2JqLSQoQ09ORklHX1BBTkVMX1RQT19URDA0M01URUExKSArPSBwYW5lbC10cG8tdGQwNDNtdGVhMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLWdlbmVyaWMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtZ2VuZXJpYy5jCmluZGV4IGViNDhkMWEuLmM1OWU0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtZ2VuZXJpYy5jCkBAIC0zNSw2ICszNSwzNSBAQAogCS52YnAJCT0gNywKIH07CiAKK3N0YXRpYyBpbnQgZ2VuZXJpY19wYW5lbF9wb3dlcl9vbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IHI7CisKKwlyID0gb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoZHNzZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnIwOworCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CisJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjE6CisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CitlcnIwOgorCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX3BhbmVsX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKKwkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CisKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK30KKwogc3RhdGljIGludCBnZW5lcmljX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlkc3NkZXYtPnBhbmVsLmNvbmZpZyA9IE9NQVBfRFNTX0xDRF9URlQ7CkBAIC01MSwyNyArODAsNDAgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpCi0JCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCXIgPSBnZW5lcmljX3BhbmVsX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOwogCi0JcmV0dXJuIHI7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVyaWNfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKLQkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CisJZ2VuZXJpY19wYW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOwogfQogCiBzdGF0aWMgaW50IGdlbmVyaWNfcGFuZWxfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JZ2VuZXJpY19wYW5lbF9kaXNhYmxlKGRzc2Rldik7CisJZ2VuZXJpY19wYW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXJpY19wYW5lbF9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXJldHVybiBnZW5lcmljX3BhbmVsX2VuYWJsZShkc3NkZXYpOworCWludCByID0gMDsKKworCXIgPSBnZW5lcmljX3BhbmVsX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyIGdlbmVyaWNfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1scTA0M3QxZGcwMS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1scTA0M3QxZGcwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjY3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxxMDQzdDFkZzAxLmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBMQ0QgcGFuZWwgZHJpdmVyIGZvciBTaGFycCBMUTA0M1QxREcwMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KKworc3RhdGljIHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3Mgc2hhcnBfbHFfdGltaW5ncyA9IHsKKwkueF9yZXMgPSA0ODAsCisJLnlfcmVzID0gMjcyLAorCisJLnBpeGVsX2Nsb2NrCT0gOTAwMCwKKworCS5oc3cJCT0gNDIsCisJLmhmcAkJPSAzLAorCS5oYnAJCT0gMiwKKworCS52c3cJCT0gMTEsCisJLnZmcAkJPSAzLAorCS52YnAJCT0gMiwKK307CisKK3N0YXRpYyBpbnQgc2hhcnBfbHFfcGFuZWxfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByOworCisJciA9IG9tYXBkc3NfZHBpX2Rpc3BsYXlfZW5hYmxlKGRzc2Rldik7CisJaWYgKHIpCisJCWdvdG8gZXJyMDsKKworCS8qIHdhaXQgY291cGxlIG9mIHZzeW5jcyB1bnRpbCBlbmFibGluZyB0aGUgTENEICovCisJbXNsZWVwKDUwKTsKKworCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkgeworCQlyID0gZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUoZHNzZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjE7CisJfQorCisJcmV0dXJuIDA7CitlcnIxOgorCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworZXJyMDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgc2hhcnBfbHFfcGFuZWxfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQorCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKworCS8qIHdhaXQgYXQgbGVhc3QgNSB2c3luY3MgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBMQ0QgKi8KKwltc2xlZXAoMTAwKTsKKworCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworfQorCitzdGF0aWMgaW50IHNoYXJwX2xxX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKworCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVCB8IE9NQVBfRFNTX0xDRF9JVlMgfAorCQlPTUFQX0RTU19MQ0RfSUhTIHwgT01BUF9EU1NfTENEX0lFTzsKKwlkc3NkZXYtPnBhbmVsLmFjYiA9IDB4MDsKKwlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSBzaGFycF9scV90aW1pbmdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwX2xxX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBfbHFfcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgciA9IDA7CisKKwlyID0gc2hhcnBfbHFfcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hhcnBfbHFfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJc2hhcnBfbHFfcGFuZWxfcG93ZXJfb2ZmKGRzc2Rldik7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKK30KKworc3RhdGljIGludCBzaGFycF9scV9wYW5lbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzaGFycF9scV9wYW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBfbHFfcGFuZWxfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgciA9IDA7CisKKwlyID0gc2hhcnBfbHFfcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgc2hhcnBfbHFfZHJpdmVyID0geworCS5wcm9iZQkJPSBzaGFycF9scV9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNoYXJwX2xxX3BhbmVsX3JlbW92ZSwKKworCS5lbmFibGUJCT0gc2hhcnBfbHFfcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hhcnBfbHFfcGFuZWxfZGlzYWJsZSwKKwkuc3VzcGVuZAk9IHNoYXJwX2xxX3BhbmVsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzaGFycF9scV9wYW5lbF9yZXN1bWUsCisKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5uYW1lICAgPSAic2hhcnBfbHFfcGFuZWwiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoYXJwX2xxX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmc2hhcnBfbHFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoYXJwX2xxX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJb21hcF9kc3NfdW5yZWdpc3Rlcl9kcml2ZXIoJnNoYXJwX2xxX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNoYXJwX2xxX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KHNoYXJwX2xxX3BhbmVsX2Rydl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYwppbmRleCBiYmU4ODBiYi4uOGQ1MWE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYwpAQCAtMjAsMTkgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogCi1zdHJ1Y3Qgc2hhcnBfZGF0YSB7Ci0JLyogWFhYIFRoaXMgcmVndWxhdG9yIHNob3VsZCBhY3R1YWxseSBiZSBpbiBTRFAgYm9hcmQgZmlsZSwgbm90IGhlcmUsCi0JICogYXMgaXQgZG9lc24ndCBhY3R1YWxseSBwb3dlciB0aGUgTENELCBidXQgc29tZXRoaW5nIGVsc2UgdGhhdAotCSAqIGFmZmVjdHMgdGhlIG91dHB1dCB0byBMQ0QgKEkgdGhpbmsuIFNvbWVib2R5IGNsYXJpZnkpLiBJdCBkb2Vzbid0IGRvCi0JICogaGFybSBoZXJlLCBhcyBTRFAgaXMgdGhlIG9ubHkgYm9hcmQgdXNpbmcgdGhpcyBjdXJyZW50bHkgKi8KLQlzdHJ1Y3QgcmVndWxhdG9yICp2ZHZpX3JlZzsKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHNoYXJwX2xzX3RpbWluZ3MgPSB7CiAJLnhfcmVzID0gNDgwLAogCS55X3JlcyA9IDY0MCwKQEAgLTUwLDc3ICs0MSw4MSBAQAogCiBzdGF0aWMgaW50IHNoYXJwX2xzX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlzdHJ1Y3Qgc2hhcnBfZGF0YSAqc2Q7Ci0KIAlkc3NkZXYtPnBhbmVsLmNvbmZpZyA9IE9NQVBfRFNTX0xDRF9URlQgfCBPTUFQX0RTU19MQ0RfSVZTIHwKIAkJT01BUF9EU1NfTENEX0lIUzsKIAlkc3NkZXYtPnBhbmVsLmFjYiA9IDB4Mjg7CiAJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gc2hhcnBfbHNfdGltaW5nczsKIAotCXNkID0ga3phbGxvYyhzaXplb2YoKnNkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZfc2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2LCBzZCk7Ci0KLQlzZC0+dmR2aV9yZWcgPSByZWd1bGF0b3JfZ2V0KCZkc3NkZXYtPmRldiwgInZkdmkiKTsKLQlpZiAoSVNfRVJSKHNkLT52ZHZpX3JlZykpIHsKLQkJa2ZyZWUoc2QpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgVkRWSSByZWd1bGF0b3JcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihzZC0+dmR2aV9yZWcpOwotCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzaGFycF9sc19wYW5lbF9yZW1vdmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXN0cnVjdCBzaGFycF9kYXRhICpzZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwotCi0JcmVndWxhdG9yX3B1dChzZC0+dmR2aV9yZWcpOwotCi0Ja2ZyZWUoc2QpOwogfQogCi1zdGF0aWMgaW50IHNoYXJwX2xzX3BhbmVsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgaW50IHNoYXJwX2xzX3Bvd2VyX29uKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlzdHJ1Y3Qgc2hhcnBfZGF0YSAqc2QgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKIAlpbnQgciA9IDA7CiAKKwlyID0gb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoZHNzZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnIwOworCiAJLyogd2FpdCBjb3VwbGUgb2YgdnN5bmNzIHVudGlsIGVuYWJsaW5nIHRoZSBMQ0QgKi8KIAltc2xlZXAoNTApOwogCi0JcmVndWxhdG9yX2VuYWJsZShzZC0+dmR2aV9yZWcpOwotCi0JaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKQorCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkgewogCQlyID0gZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUoZHNzZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjE7CisJfQogCisJcmV0dXJuIDA7CitlcnIxOgorCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworZXJyMDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgc2hhcnBfbHNfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQorCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKworCS8qIHdhaXQgYXQgbGVhc3QgNSB2c3luY3MgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBMQ0QgKi8KKworCW1zbGVlcCgxMDApOworCisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBfbHNfcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgcjsKKwlyID0gc2hhcnBfbHNfcG93ZXJfb24oZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CiAJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIHNoYXJwX2xzX3BhbmVsX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXN0cnVjdCBzaGFycF9kYXRhICpzZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwotCi0JaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKLQkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7Ci0KLQlyZWd1bGF0b3JfZGlzYWJsZShzZC0+dmR2aV9yZWcpOwotCi0JLyogd2FpdCBhdCBsZWFzdCA1IHZzeW5jcyBhZnRlciBkaXNhYmxpbmcgdGhlIExDRCAqLwotCi0JbXNsZWVwKDEwMCk7CisJc2hhcnBfbHNfcG93ZXJfb2ZmKGRzc2Rldik7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgc2hhcnBfbHNfcGFuZWxfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0Jc2hhcnBfbHNfcGFuZWxfZGlzYWJsZShkc3NkZXYpOworCXNoYXJwX2xzX3Bvd2VyX29mZihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaGFycF9sc19wYW5lbF9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXJldHVybiBzaGFycF9sc19wYW5lbF9lbmFibGUoZHNzZGV2KTsKKwlpbnQgcjsKKwlyID0gc2hhcnBfbHNfcG93ZXJfb24oZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyIHNoYXJwX2xzX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMKaW5kZXggMWYwMWRmYy4uZmNkNmE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMKQEAgLTYzLDYgKzYzLDggQEAKIC8qICNkZWZpbmUgVEFBTF9VU0VfRVNEX0NIRUNLICovCiAjZGVmaW5lIFRBQUxfRVNEX0NIRUNLX1BFUklPRAltc2Vjc190b19qaWZmaWVzKDUwMDApCiAKK3N0YXRpYyBpbnQgX3RhYWxfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOworCiBzdHJ1Y3QgdGFhbF9kYXRhIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxkZXY7CiAKQEAgLTUxMCwxNSArNTEyLDEyIEBACiAJaWYgKHRkLT5lc2Rfd3EgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgImNhbid0IGNyZWF0ZSBFU0Qgd29ya3F1ZXVlXG4iKTsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIxOwogCX0KIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZ0ZC0+ZXNkX3dvcmssIHRhYWxfZXNkX3dvcmspOwogCiAJZGV2X3NldF9kcnZkYXRhKCZkc3NkZXYtPmRldiwgdGQpOwogCi0JZHNzZGV2LT5nZXRfdGltaW5ncyA9IHRhYWxfZ2V0X3RpbWluZ3M7Ci0JZHNzZGV2LT5nZXRfcmVzb2x1dGlvbiA9IHRhYWxfZ2V0X3Jlc29sdXRpb247Ci0KIAkvKiBpZiBubyBwbGF0Zm9ybSBzZXRfYmFja2xpZ2h0KCkgZGVmaW5lZCwgcHJlc3VtZSBEU0kgYmFja2xpZ2h0CiAJICogY29udHJvbCAqLwogCWlmICghZHNzZGV2LT5zZXRfYmFja2xpZ2h0KQpAQCAtNTI4LDcgKzUyNyw3IEBACiAJCQkmdGFhbF9ibF9vcHMpOwogCWlmIChJU19FUlIoYmxkZXYpKSB7CiAJCXIgPSBQVFJfRVJSKGJsZGV2KTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycjI7CiAJfQogCiAJdGQtPmJsZGV2ID0gYmxkZXY7CkBAIC02MjEsMTQgKzYyMCwxMiBAQAogCWtmcmVlKHRkKTsKIH0KIAotc3RhdGljIGludCB0YWFsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgaW50IHRhYWxfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CiAJdTggaWQxLCBpZDIsIGlkMzsKIAlpbnQgcjsKIAotCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAiZW5hYmxlXG4iKTsKLQogCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkgewogCQlyID0gZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUoZHNzZGV2KTsKIAkJaWYgKHIpCkBAIC02MzgsNiArNjM1LDE2IEBACiAJLyogaXQgc2VlbXMgd2UgaGF2ZSB0byB3YWl0IGEgYml0IHVudGlsIHRhYWwgaXMgcmVhZHkgKi8KIAltc2xlZXAoNSk7CiAKKwlkc2lfYnVzX2xvY2soKTsKKworCXIgPSBvbWFwZHNzX2RzaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBEU0lcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJb21hcGRzc19kc2lfdmNfZW5hYmxlX2hzKFRDSCwgZmFsc2UpOworCiAJciA9IHRhYWxfc2xlZXBfb3V0KHRkKTsKIAlpZiAocikKIAkJZ290byBlcnI7CkBAIC02NjEsNiArNjY4LDEwIEBACiAKIAl0YWFsX2Rjc193cml0ZV8wKERDU19ESVNQTEFZX09OKTsKIAorCXIgPSBfdGFhbF9lbmFibGVfdGUoZHNzZGV2LCB0ZC0+dGVfZW5hYmxlZCk7CisJaWYgKHIpCisJCWdvdG8gZXJyOworCiAjaWZkZWYgVEFBTF9VU0VfRVNEX0NIRUNLCiAJcXVldWVfZGVsYXllZF93b3JrKHRkLT5lc2Rfd3EsICZ0ZC0+ZXNkX3dvcmssIFRBQUxfRVNEX0NIRUNLX1BFUklPRCk7CiAjZW5kaWYKQEAgLTY3NiwxOSArNjg3LDI3IEBACiAJCXRkLT5pbnRyb19wcmludGVkID0gdHJ1ZTsKIAl9CiAKKwlvbWFwZHNzX2RzaV92Y19lbmFibGVfaHMoVENILCB0cnVlKTsKKworCWRzaV9idXNfdW5sb2NrKCk7CisKIAlyZXR1cm4gMDsKIGVycjoKKwlkc2lfYnVzX3VubG9jaygpOworCisJb21hcGRzc19kc2lfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CitlcnIwOgogCWlmIChkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUpCiAJCWRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZShkc3NkZXYpOwogCiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIHRhYWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgdm9pZCB0YWFsX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKIAotCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAiZGlzYWJsZVxuIik7CisJZHNpX2J1c19sb2NrKCk7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZ0ZC0+ZXNkX3dvcmspOwogCkBAIC02OTgsNDEgKzcxNywxMjQgQEAKIAkvKiB3YWl0IGEgYml0IHNvIHRoYXQgdGhlIG1lc3NhZ2UgZ29lcyB0aHJvdWdoICovCiAJbXNsZWVwKDEwKTsKIAorCW9tYXBkc3NfZHNpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworCiAJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKIAkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CiAKIAl0ZC0+ZW5hYmxlZCA9IDA7CisKKwlkc2lfYnVzX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IHRhYWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgcjsKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgImVuYWJsZVxuIik7CisKKwlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSB0YWFsX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHRhYWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJkaXNhYmxlXG4iKTsKKworCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKQorCQl0YWFsX3Bvd2VyX29mZihkc3NkZXYpOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgdGFhbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldiA9IHRkLT5ibGRldjsKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInN1c3BlbmRcbiIpOwogCi0JYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOwotCXRhYWxfYmxfdXBkYXRlX3N0YXR1cyhibGRldik7CisJaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdGFhbF9wb3dlcl9vZmYoZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0YWFsX3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0Jc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKLQlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxkZXYgPSB0ZC0+YmxkZXY7CisJaW50IHI7CisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJyZXN1bWVcbiIpOwogCi0JYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQl0YWFsX2JsX3VwZGF0ZV9zdGF0dXMoYmxkZXYpOworCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSB0YWFsX3Bvd2VyX29uKGRzc2Rldik7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCB0YWFsX2ZyYW1lZG9uZV9jYihpbnQgZXJyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IGRhdGE7CisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJmcmFtZWRvbmUsIGVyciAlZFxuIiwgZXJyKTsKKwlkc2lfYnVzX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IHRhYWxfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCQkgICAgdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCit7CisJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKwlpbnQgcjsKKworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAidXBkYXRlICVkLCAlZCwgJWQgeCAlZFxuIiwgeCwgeSwgdywgaCk7CisKKwlkc2lfYnVzX2xvY2soKTsKKworCWlmICghdGQtPmVuYWJsZWQpIHsKKwkJciA9IDA7CisJCWdvdG8gZXJyOworCX0KKworCXIgPSBvbWFwX2RzaV9wcmVwYXJlX3VwZGF0ZShkc3NkZXYsICZ4LCAmeSwgJncsICZoKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlyID0gdGFhbF9zZXRfdXBkYXRlX3dpbmRvdyh4LCB5LCB3LCBoKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlyID0gb21hcF9kc2lfdXBkYXRlKGRzc2RldiwgVENILCB4LCB5LCB3LCBoLAorCQkJdGFhbF9mcmFtZWRvbmVfY2IsIGRzc2Rldik7CisJaWYgKHIpCisJCWdvdG8gZXJyOworCisJLyogbm90ZTogbm8gYnVzX3VubG9jayBoZXJlLiB1bmxvY2sgaXMgaW4gZnJhbWVkb25lX2NiICovCisJcmV0dXJuIDA7CitlcnI6CisJZHNpX2J1c191bmxvY2soKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCB0YWFsX3N5bmMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAic3luY1xuIik7CisKKwlkc2lfYnVzX2xvY2soKTsKKwlkc2lfYnVzX3VubG9jaygpOworCisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJzeW5jIGRvbmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRhYWxfc2V0dXBfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCQkgICAgdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCi17Ci0JdGFhbF9zZXRfdXBkYXRlX3dpbmRvdyh4LCB5LCB3LCBoKTsKLX0KLQotc3RhdGljIGludCB0YWFsX2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQorc3RhdGljIGludCBfdGFhbF9lbmFibGVfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwogCWludCByOwpAQCAtNzQ0LDI1ICs4NDYsMzIgQEAKIAllbHNlCiAJCXIgPSB0YWFsX2Rjc193cml0ZV8wKERDU19URUFSX09GRik7CiAKKwlvbWFwZHNzX2RzaV9lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOworCisJLyogWFhYIGZvciBzb21lIHJlYXNvbiwgRFNJIFRFIGJyZWFrcyBpZiB3ZSBkb24ndCB3YWl0IGhlcmUuCisJICogUGFuZWwgYnVnPyBOZWVkcyBtb3JlIHN0dWR5aW5nICovCisJbXNsZWVwKDEwMCk7CisKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCB0YWFsX3dhaXRfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQorc3RhdGljIGludCB0YWFsX2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQoreworCWludCByOworCisJZHNpX2J1c19sb2NrKCk7CisKKwlyID0gX3RhYWxfZW5hYmxlX3RlKGRzc2RldiwgZW5hYmxlKTsKKworCWRzaV9idXNfdW5sb2NrKCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCB0YWFsX2dldF90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKLQlsb25nIHdhaXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMCk7Ci0KLQlpZiAoIXRkLT51c2VfZXh0X3RlIHx8ICF0ZC0+dGVfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQlJTklUX0NPTVBMRVRJT04odGQtPnRlX2NvbXBsZXRpb24pOwotCXdhaXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRkLT50ZV9jb21wbGV0aW9uLCB3YWl0KTsKLQlpZiAod2FpdCA9PSAwKSB7Ci0JCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIFRFXG4iKTsKLQkJcmV0dXJuIC1FVElNRTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdGQtPnRlX2VuYWJsZWQ7CiB9CiAKIHN0YXRpYyBpbnQgdGFhbF9yb3RhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB1OCByb3RhdGUpCkBAIC03NzIsMTYgKzg4MSwyMSBAQAogCiAJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJyb3RhdGUgJWRcbiIsIHJvdGF0ZSk7CiAKKwlkc2lfYnVzX2xvY2soKTsKKwogCWlmICh0ZC0+ZW5hYmxlZCkgewogCQlyID0gdGFhbF9zZXRfYWRkcl9tb2RlKHJvdGF0ZSwgdGQtPm1pcnJvcik7Ci0KIAkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKKwkJCWdvdG8gZXJyOwogCX0KIAogCXRkLT5yb3RhdGUgPSByb3RhdGU7CiAKKwlkc2lfYnVzX3VubG9jaygpOwogCXJldHVybiAwOworZXJyOgorCWRzaV9idXNfdW5sb2NrKCk7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB1OCB0YWFsX2dldF9yb3RhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQpAQCAtNzk3LDE2ICs5MTEsMjAgQEAKIAogCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAibWlycm9yICVkXG4iLCBlbmFibGUpOwogCisJZHNpX2J1c19sb2NrKCk7CiAJaWYgKHRkLT5lbmFibGVkKSB7CiAJCXIgPSB0YWFsX3NldF9hZGRyX21vZGUodGQtPnJvdGF0ZSwgZW5hYmxlKTsKLQogCQlpZiAocikKLQkJCXJldHVybiByOworCQkJZ290byBlcnI7CiAJfQogCiAJdGQtPm1pcnJvciA9IGVuYWJsZTsKIAorCWRzaV9idXNfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CitlcnI6CisJZHNpX2J1c191bmxvY2soKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGJvb2wgdGFhbF9nZXRfbWlycm9yKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKQEAgLTgyMCwxNyArOTM4LDIzIEBACiAJdTggaWQxLCBpZDIsIGlkMzsKIAlpbnQgcjsKIAorCWRzaV9idXNfbG9jaygpOworCiAJciA9IHRhYWxfZGNzX3JlYWRfMShEQ1NfR0VUX0lEMSwgJmlkMSk7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGVycjsKIAlyID0gdGFhbF9kY3NfcmVhZF8xKERDU19HRVRfSUQyLCAmaWQyKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZXJyOwogCXIgPSB0YWFsX2Rjc19yZWFkXzEoRENTX0dFVF9JRDMsICZpZDMpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBlcnI7CiAKKwlkc2lfYnVzX3VubG9jaygpOwogCXJldHVybiAwOworZXJyOgorCWRzaV9idXNfdW5sb2NrKCk7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgdGFhbF9tZW1vcnlfcmVhZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCkBAIC04NDEsNiArOTY1LDEwIEBACiAJaW50IGZpcnN0ID0gMTsKIAlpbnQgcGxlbjsKIAl1bnNpZ25lZCBidWZfdXNlZCA9IDA7CisJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKworCWlmICghdGQtPmVuYWJsZWQpCisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKHNpemUgPCB3ICogaCAqIDMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODQ5LDYgKzk3Nyw4IEBACiAJCQlkc3NkZXYtPnBhbmVsLnRpbWluZ3MueF9yZXMgKgogCQkJZHNzZGV2LT5wYW5lbC50aW1pbmdzLnlfcmVzICogMyk7CiAKKwlkc2lfYnVzX2xvY2soKTsKKwogCS8qIHBsZW4gMSBvciAyIGdvZXMgaW50byBzaG9ydCBwYWNrZXQuIHVudGlsIGNoZWNrc3VtIGVycm9yIGlzIGZpeGVkLAogCSAqIHVzZSBzaG9ydCBwYWNrZXRzLiBwbGVuIDMyIHdvcmtzLCBidXQgYmlnZ2VyIHBhY2tldHMgc2VlbSB0byBjYXVzZQogCSAqIGFuIGVycm9yLiAqLwpAQCAtODU3LDExICs5ODcsMTEgQEAKIAllbHNlCiAJCXBsZW4gPSAyOwogCi0JdGFhbF9zZXR1cF91cGRhdGUoZHNzZGV2LCB4LCB5LCB3LCBoKTsKKwl0YWFsX3NldF91cGRhdGVfd2luZG93KHgsIHksIHcsIGgpOwogCiAJciA9IGRzaV92Y19zZXRfbWF4X3J4X3BhY2tldF9zaXplKFRDSCwgcGxlbik7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGVycjA7CiAKIAl3aGlsZSAoYnVmX3VzZWQgPCBzaXplKSB7CiAJCXU4IGRjc19jbWQgPSBmaXJzdCA/IDB4MmUgOiAweDNlOwpAQCAtODk0LDcgKzEwMjQsOCBAQAogCiBlcnI6CiAJZHNpX3ZjX3NldF9tYXhfcnhfcGFja2V0X3NpemUoVENILCAxKTsKLQorZXJyMDoKKwlkc2lfYnVzX3VubG9jaygpOwogCXJldHVybiByOwogfQogCkBAIC05MzksOCArMTA3MCwxMSBAQAogCX0KIAkvKiBTZWxmLWRpYWdub3N0aWNzIHJlc3VsdCBpcyBhbHNvIHNob3duIG9uIFRFIEdQSU8gbGluZS4gV2UgbmVlZAogCSAqIHRvIHJlLWVuYWJsZSBURSBhZnRlciBzZWxmIGRpYWdub3N0aWNzICovCi0JaWYgKHRkLT51c2VfZXh0X3RlICYmIHRkLT50ZV9lbmFibGVkKQotCQl0YWFsX2VuYWJsZV90ZShkc3NkZXYsIHRydWUpOworCWlmICh0ZC0+dXNlX2V4dF90ZSAmJiB0ZC0+dGVfZW5hYmxlZCkgeworCQlyID0gdGFhbF9kY3Nfd3JpdGVfMShEQ1NfVEVBUl9PTiwgMCk7CisJCWlmIChyKQorCQkJZ290byBlcnI7CisJfQogCiAJZHNpX2J1c191bmxvY2soKTsKIApAQCAtOTU4LDYgKzEwOTIsMjAgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsodGQtPmVzZF93cSwgJnRkLT5lc2Rfd29yaywgVEFBTF9FU0RfQ0hFQ0tfUEVSSU9EKTsKIH0KIAorc3RhdGljIGludCB0YWFsX3NldF91cGRhdGVfbW9kZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSAhPSBPTUFQX0RTU19VUERBVEVfTUFOVUFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdGFhbF9nZXRfdXBkYXRlX21vZGUoCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX01BTlVBTDsKK30KKwogc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgdGFhbF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHRhYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSB0YWFsX3JlbW92ZSwKQEAgLTk2Nyw5ICsxMTE1LDE4IEBACiAJLnN1c3BlbmQJPSB0YWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB0YWFsX3Jlc3VtZSwKIAotCS5zZXR1cF91cGRhdGUJPSB0YWFsX3NldHVwX3VwZGF0ZSwKKwkuc2V0X3VwZGF0ZV9tb2RlID0gdGFhbF9zZXRfdXBkYXRlX21vZGUsCisJLmdldF91cGRhdGVfbW9kZSA9IHRhYWxfZ2V0X3VwZGF0ZV9tb2RlLAorCisJLnVwZGF0ZQkJPSB0YWFsX3VwZGF0ZSwKKwkuc3luYwkJPSB0YWFsX3N5bmMsCisKKwkuZ2V0X3Jlc29sdXRpb24JPSB0YWFsX2dldF9yZXNvbHV0aW9uLAorCS5nZXRfcmVjb21tZW5kZWRfYnBwID0gb21hcGRzc19kZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHAsCisKIAkuZW5hYmxlX3RlCT0gdGFhbF9lbmFibGVfdGUsCi0JLndhaXRfZm9yX3RlCT0gdGFhbF93YWl0X3RlLAorCS5nZXRfdGUJCT0gdGFhbF9nZXRfdGUsCisKIAkuc2V0X3JvdGF0ZQk9IHRhYWxfcm90YXRlLAogCS5nZXRfcm90YXRlCT0gdGFhbF9nZXRfcm90YXRlLAogCS5zZXRfbWlycm9yCT0gdGFhbF9taXJyb3IsCkBAIC05NzcsNiArMTEzNCw4IEBACiAJLnJ1bl90ZXN0CT0gdGFhbF9ydW5fdGVzdCwKIAkubWVtb3J5X3JlYWQJPSB0YWFsX21lbW9yeV9yZWFkLAogCisJLmdldF90aW1pbmdzCT0gdGFhbF9nZXRfdGltaW5ncywKKwogCS5kcml2ZXIgICAgICAgICA9IHsKIAkJLm5hbWUgICA9ICJ0YWFsIiwKIAkJLm93bmVyICA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10b3Bwb2x5LXRkbzM1cy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10b3Bwb2x5LXRkbzM1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDM0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRvcHBvbHktdGRvMzVzLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBMQ0QgcGFuZWwgZHJpdmVyIGZvciBUb3Bwb2x5IFRETzM1UworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb21wdUxhYiwgTHRkLgorICogQXV0aG9yOiBNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIEJhc2VkIG9uIGdlbmVyaWMgcGFuZWwgc3VwcG9ydAorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgorCitzdGF0aWMgc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0b3Bwb2x5X3Rkb19wYW5lbF90aW1pbmdzID0geworCS8qIDY0MCB4IDQ4MCBAIDYwIEh6ICBSZWR1Y2VkIGJsYW5raW5nIFZFU0EgQ1ZUIDAuMzFNMy1SICovCisJLnhfcmVzCQk9IDQ4MCwKKwkueV9yZXMJCT0gNjQwLAorCisJLnBpeGVsX2Nsb2NrCT0gMjYwMDAsCisKKwkuaGZwCQk9IDEwNCwKKwkuaHN3CQk9IDgsCisJLmhicAkJPSA4LAorCisJLnZmcAkJPSA0LAorCS52c3cJCT0gMiwKKwkudmJwCQk9IDIsCit9OworCitzdGF0aWMgaW50IHRvcHBvbHlfdGRvX3BhbmVsX3Bvd2VyX29uKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgcjsKKworCXIgPSBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOworCWlmIChyKQorCQlnb3RvIGVycjA7CisKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpIHsKKwkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CisJCWlmIChyKQorCQkJZ290byBlcnIxOworCX0KKworCXJldHVybiAwOworZXJyMToKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK2VycjA6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHRvcHBvbHlfdGRvX3BhbmVsX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKKwkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CisKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK30KKworc3RhdGljIGludCB0b3Bwb2x5X3Rkb19wYW5lbF9wcm9iZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZHNzZGV2LT5wYW5lbC5jb25maWcgPSBPTUFQX0RTU19MQ0RfVEZUIHwgT01BUF9EU1NfTENEX0lWUyB8CisJCU9NQVBfRFNTX0xDRF9JSFM7CisJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gdG9wcG9seV90ZG9fcGFuZWxfdGltaW5nczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b3Bwb2x5X3Rkb19wYW5lbF9yZW1vdmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgaW50IHRvcHBvbHlfdGRvX3BhbmVsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IHIgPSAwOworCisJciA9IHRvcHBvbHlfdGRvX3BhbmVsX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRvcHBvbHlfdGRvX3BhbmVsX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXRvcHBvbHlfdGRvX3BhbmVsX3Bvd2VyX29mZihkc3NkZXYpOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdG9wcG9seV90ZG9fcGFuZWxfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb2ZmKGRzc2Rldik7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvcHBvbHlfdGRvX3BhbmVsX3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IHIgPSAwOworCisJciA9IHRvcHBvbHlfdGRvX3BhbmVsX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyIGdlbmVyaWNfZHJpdmVyID0geworCS5wcm9iZQkJPSB0b3Bwb2x5X3Rkb19wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IHRvcHBvbHlfdGRvX3BhbmVsX3JlbW92ZSwKKworCS5lbmFibGUJCT0gdG9wcG9seV90ZG9fcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gdG9wcG9seV90ZG9fcGFuZWxfZGlzYWJsZSwKKwkuc3VzcGVuZAk9IHRvcHBvbHlfdGRvX3BhbmVsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0b3Bwb2x5X3Rkb19wYW5lbF9yZXN1bWUsCisKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5uYW1lICAgPSAidG9wcG9seV90ZG8zNXNfcGFuZWwiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvcHBvbHlfdGRvX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmZ2VuZXJpY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG9wcG9seV90ZG9fcGFuZWxfZHJ2X2V4aXQodm9pZCkKK3sKKwlvbWFwX2Rzc191bnJlZ2lzdGVyX2RyaXZlcigmZ2VuZXJpY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3Bwb2x5X3Rkb19wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdCh0b3Bwb2x5X3Rkb19wYW5lbF9kcnZfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRwby10ZDA0M210ZWExLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRwby10ZDA0M210ZWExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3OGZlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYwpAQCAtMCwwICsxLDUyOCBAQAorLyoKKyAqIExDRCBwYW5lbCBkcml2ZXIgZm9yIFRQTyBURDA0M01URUExCisgKgorICogQXV0aG9yOiBHcmHFvnZ5ZGFzIElnbm90YXMgPG5vdGFzYXNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgorCisjZGVmaW5lIFRQT19SMDJfTU9ERSh4KQkJKCh4KSAmIDcpCisjZGVmaW5lIFRQT19SMDJfTU9ERV84MDB4NDgwCTcKKyNkZWZpbmUgVFBPX1IwMl9OQ0xLX1JJU0lORwlCSVQoMykKKyNkZWZpbmUgVFBPX1IwMl9IU1lOQ19ISUdICUJJVCg0KQorI2RlZmluZSBUUE9fUjAyX1ZTWU5DX0hJR0gJQklUKDUpCisKKyNkZWZpbmUgVFBPX1IwM19OU1RBTkRCWQlCSVQoMCkKKyNkZWZpbmUgVFBPX1IwM19FTl9DUF9DTEsJQklUKDEpCisjZGVmaW5lIFRQT19SMDNfRU5fVkdMX1BVTVAJQklUKDIpCisjZGVmaW5lIFRQT19SMDNfRU5fUFdNCQlCSVQoMykKKyNkZWZpbmUgVFBPX1IwM19EUklWSU5HX0NBUF8xMDAJQklUKDQpCisjZGVmaW5lIFRQT19SMDNfRU5fUFJFX0NIQVJHRQlCSVQoNikKKyNkZWZpbmUgVFBPX1IwM19TT0ZUV0FSRV9DVEwJQklUKDcpCisKKyNkZWZpbmUgVFBPX1IwNF9ORkxJUF9ICQlCSVQoMCkKKyNkZWZpbmUgVFBPX1IwNF9ORkxJUF9WCQlCSVQoMSkKKyNkZWZpbmUgVFBPX1IwNF9DUF9DTEtfRlJFUV8xSAlCSVQoMikKKyNkZWZpbmUgVFBPX1IwNF9WR0xfRlJFUV8xSAlCSVQoNCkKKworI2RlZmluZSBUUE9fUjAzX1ZBTF9OT1JNQUwgKFRQT19SMDNfTlNUQU5EQlkgfCBUUE9fUjAzX0VOX0NQX0NMSyB8IFwKKwkJCVRQT19SMDNfRU5fVkdMX1BVTVAgfCAgVFBPX1IwM19FTl9QV00gfCBcCisJCQlUUE9fUjAzX0RSSVZJTkdfQ0FQXzEwMCB8IFRQT19SMDNfRU5fUFJFX0NIQVJHRSB8IFwKKwkJCVRQT19SMDNfU09GVFdBUkVfQ1RMKQorCisjZGVmaW5lIFRQT19SMDNfVkFMX1NUQU5EQlkgKFRQT19SMDNfRFJJVklOR19DQVBfMTAwIHwgXAorCQkJVFBPX1IwM19FTl9QUkVfQ0hBUkdFIHwgVFBPX1IwM19TT0ZUV0FSRV9DVEwpCisKK3N0YXRpYyBjb25zdCB1MTYgdHBvX3RkMDQzX2RlZl9nYW1tYVsxMl0gPSB7CisJMTA2LCAyMDAsIDI4OSwgMzc1LCA0NjAsIDU0MywgNjI1LCA3MDUsIDc4NSwgODY0LCA5NDIsIDEwMjAKK307CisKK3N0cnVjdCB0cG9fdGQwNDNfZGV2aWNlIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCXN0cnVjdCByZWd1bGF0b3IgKnZjY19yZWc7CisJdTE2IGdhbW1hWzEyXTsKKwl1MzIgbW9kZTsKKwl1MzIgaG1pcnJvcjoxOworCXUzMiB2bWlycm9yOjE7Cit9OworCitzdGF0aWMgaW50IHRwb190ZDA0M193cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1OCBhZGRyLCB1OCBkYXRhKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZQltOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcjsKKwl1MTYJCQl3OworCWludAkJCXI7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCW1lbXNldCgmeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKKworCXcgPSAoKHUxNilhZGRyIDw8IDEwKSB8ICgxIDw8IDgpIHwgZGF0YTsKKwl4ZmVyLnR4X2J1ZiA9ICZ3OworCXhmZXIuYml0c19wZXJfd29yZCA9IDE2OworCXhmZXIubGVuID0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm0pOworCisJciA9IHNwaV9zeW5jKHNwaSwgJm0pOworCWlmIChyIDwgMCkKKwkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIHRvIExDRCByZWcgKCVkKVxuIiwgcik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHRwb190ZDA0M193cml0ZV9nYW1tYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1MTYgZ2FtbWFbMTJdKQoreworCXU4IGksIHZhbDsKKworCS8qIGdhbW1hIGJpdHMgWzk6OF0gKi8KKwlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQorCQl2YWwgfD0gKGdhbW1hW2ldICYgMHgzMDApID4+ICgoaSArIDEpICogMik7CisJdHBvX3RkMDQzX3dyaXRlKHNwaSwgMHgxMSwgdmFsKTsKKworCWZvciAodmFsID0gaSA9IDA7IGkgPCA0OyBpKyspCisJCXZhbCB8PSAoZ2FtbWFbaSs0XSAmIDB4MzAwKSA+PiAoKGkgKyAxKSAqIDIpOworCXRwb190ZDA0M193cml0ZShzcGksIDB4MTIsIHZhbCk7CisKKwlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQorCQl2YWwgfD0gKGdhbW1hW2krOF0gJiAweDMwMCkgPj4gKChpICsgMSkgKiAyKTsKKwl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDEzLCB2YWwpOworCisJLyogZ2FtbWEgYml0cyBbNzowXSAqLworCWZvciAodmFsID0gaSA9IDA7IGkgPCAxMjsgaSsrKQorCQl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDE0ICsgaSwgZ2FtbWFbaV0gJiAweGZmKTsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfd3JpdGVfbWlycm9yKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgaCwgYm9vbCB2KQoreworCXU4IHJlZzQgPSBUUE9fUjA0X05GTElQX0ggfCBUUE9fUjA0X05GTElQX1YgfCBcCisJCVRQT19SMDRfQ1BfQ0xLX0ZSRVFfMUggfCBUUE9fUjA0X1ZHTF9GUkVRXzFIOworCWlmIChoKQorCQlyZWc0ICY9IH5UUE9fUjA0X05GTElQX0g7CisJaWYgKHYpCisJCXJlZzQgJj0gflRQT19SMDRfTkZMSVBfVjsKKworCXJldHVybiB0cG9fdGQwNDNfd3JpdGUoc3BpLCA0LCByZWc0KTsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfc2V0X2htaXJyb3Ioc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisKKwl0cG9fdGQwNDMtPmhtaXJyb3IgPSBlbmFibGU7CisJcmV0dXJuIHRwb190ZDA0M193cml0ZV9taXJyb3IodHBvX3RkMDQzLT5zcGksIHRwb190ZDA0My0+aG1pcnJvciwKKwkJCXRwb190ZDA0My0+dm1pcnJvcik7Cit9CisKK3N0YXRpYyBib29sIHRwb190ZDA0M19nZXRfaG1pcnJvcihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCisJcmV0dXJuIHRwb190ZDA0My0+aG1pcnJvcjsKK30KKworc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX3ZtaXJyb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdHBvX3RkMDQzLT52bWlycm9yKTsKK30KKworc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX3ZtaXJyb3Jfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRwb190ZDA0M193cml0ZV9taXJyb3IodHBvX3RkMDQzLT5zcGksIHRwb190ZDA0My0+aG1pcnJvciwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXRwb190ZDA0My0+dm1pcnJvciA9IHZhbDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdHBvX3RkMDQzLT5tb2RlKTsKK30KKworc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0ICE9IDAgfHwgdmFsICYgfjcpCisJCXJldHVybiAtRUlOVkFMOworCisJdHBvX3RkMDQzLT5tb2RlID0gdmFsOworCisJdmFsIHw9IFRQT19SMDJfTkNMS19SSVNJTkc7CisJdHBvX3RkMDQzX3dyaXRlKHRwb190ZDA0My0+c3BpLCAyLCB2YWwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfZ2FtbWFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCBsZW4gPSAwOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cG9fdGQwNDMtPmdhbW1hKTsgaSsrKSB7CisJCXJldCA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJXUgIiwKKwkJCQl0cG9fdGQwNDMtPmdhbW1hW2ldKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlsZW4gKz0gcmV0OworCX0KKwlidWZbbGVuIC0gMV0gPSAnXG4nOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX2dhbW1hX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBnWzEyXTsKKwlpbnQgcmV0OworCWludCBpOworCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1IiwKKwkJCSZnWzBdLCAmZ1sxXSwgJmdbMl0sICZnWzNdLCAmZ1s0XSwgJmdbNV0sCisJCQkmZ1s2XSwgJmdbN10sICZnWzhdLCAmZ1s5XSwgJmdbMTBdLCAmZ1sxMV0pOworCisJaWYgKHJldCAhPSAxMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKKwkJdHBvX3RkMDQzLT5nYW1tYVtpXSA9IGdbaV07CisKKwl0cG9fdGQwNDNfd3JpdGVfZ2FtbWEodHBvX3RkMDQzLT5zcGksIHRwb190ZDA0My0+Z2FtbWEpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodm1pcnJvciwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRwb190ZDA0M192bWlycm9yX3Nob3csIHRwb190ZDA0M192bWlycm9yX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJdHBvX3RkMDQzX21vZGVfc2hvdywgdHBvX3RkMDQzX21vZGVfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGdhbW1hLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJdHBvX3RkMDQzX2dhbW1hX3Nob3csIHRwb190ZDA0M19nYW1tYV9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0cG9fdGQwNDNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdm1pcnJvci5hdHRyLAorCSZkZXZfYXR0cl9tb2RlLmF0dHIsCisJJmRldl9hdHRyX2dhbW1hLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHRwb190ZDA0M19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHRwb190ZDA0M19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHRwb190ZDA0M190aW1pbmdzID0geworCS54X3JlcwkJPSA4MDAsCisJLnlfcmVzCQk9IDQ4MCwKKworCS5waXhlbF9jbG9jawk9IDM2MDAwLAorCisJLmhzdwkJPSAxLAorCS5oZnAJCT0gNjgsCisJLmhicAkJPSAyMTQsCisKKwkudnN3CQk9IDEsCisJLnZmcAkJPSAzOSwKKwkudmJwCQk9IDM0LAorfTsKKworc3RhdGljIGludCB0cG9fdGQwNDNfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKwlpbnQgbnJlc2V0X2dwaW8gPSBkc3NkZXYtPnJlc2V0X2dwaW87CisJaW50IHI7CisKKwlyID0gb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoZHNzZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnIwOworCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CisJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyMTsKKwl9CisKKwlyZWd1bGF0b3JfZW5hYmxlKHRwb190ZDA0My0+dmNjX3JlZyk7CisKKwkvKiB3YWl0IGZvciBwb3dlciB1cCAqLworCW1zbGVlcCgxNjApOworCisJaWYgKGdwaW9faXNfdmFsaWQobnJlc2V0X2dwaW8pKQorCQlncGlvX3NldF92YWx1ZShucmVzZXRfZ3BpbywgMSk7CisKKwl0cG9fdGQwNDNfd3JpdGUodHBvX3RkMDQzLT5zcGksIDIsCisJCQlUUE9fUjAyX01PREUodHBvX3RkMDQzLT5tb2RlKSB8IFRQT19SMDJfTkNMS19SSVNJTkcpOworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMywgVFBPX1IwM19WQUxfTk9STUFMKTsKKwl0cG9fdGQwNDNfd3JpdGUodHBvX3RkMDQzLT5zcGksIDB4MjAsIDB4ZjApOworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMHgyMSwgMHhmMCk7CisJdHBvX3RkMDQzX3dyaXRlX21pcnJvcih0cG9fdGQwNDMtPnNwaSwgdHBvX3RkMDQzLT5obWlycm9yLAorCQkJdHBvX3RkMDQzLT52bWlycm9yKTsKKwl0cG9fdGQwNDNfd3JpdGVfZ2FtbWEodHBvX3RkMDQzLT5zcGksIHRwb190ZDA0My0+Z2FtbWEpOworCisJcmV0dXJuIDA7CitlcnIxOgorCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworZXJyMDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgdHBvX3RkMDQzX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCWludCBucmVzZXRfZ3BpbyA9IGRzc2Rldi0+cmVzZXRfZ3BpbzsKKworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMywKKwkJCVRQT19SMDNfVkFMX1NUQU5EQlkgfCBUUE9fUjAzX0VOX1BXTSk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChucmVzZXRfZ3BpbykpCisJCWdwaW9fc2V0X3ZhbHVlKG5yZXNldF9ncGlvLCAwKTsKKworCS8qIHdhaXQgZm9yIGF0IGxlYXN0IDIgdnN5bmNzIGJlZm9yZSBjdXR0aW5nIG9mZiBwb3dlciAqLworCW1zbGVlcCg1MCk7CisKKwl0cG9fdGQwNDNfd3JpdGUodHBvX3RkMDQzLT5zcGksIDMsIFRQT19SMDNfVkFMX1NUQU5EQlkpOworCisJcmVndWxhdG9yX2Rpc2FibGUodHBvX3RkMDQzLT52Y2NfcmVnKTsKKworCWlmIChkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUpCisJCWRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZShkc3NkZXYpOworCisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdHBvX3RkMDQzX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IHJldDsKKworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAiZW5hYmxlXG4iKTsKKworCXJldCA9IHRwb190ZDA0M19wb3dlcl9vbihkc3NkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHBvX3RkMDQzX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAiZGlzYWJsZVxuIik7CisKKwl0cG9fdGQwNDNfcG93ZXJfb2ZmKGRzc2Rldik7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJdHBvX3RkMDQzX3Bvd2VyX29mZihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgciA9IDA7CisKKwlyID0gdHBvX3RkMDQzX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBvX3RkMDQzX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJaW50IG5yZXNldF9ncGlvID0gZHNzZGV2LT5yZXNldF9ncGlvOworCWludCByZXQgPSAwOworCisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJwcm9iZVxuIik7CisKKwlpZiAodHBvX3RkMDQzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJtaXNzaW5nIHRwb190ZDA0M19kZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkc3NkZXYtPnBhbmVsLmNvbmZpZyA9IE9NQVBfRFNTX0xDRF9URlQgfCBPTUFQX0RTU19MQ0RfSUhTIHwKKwkJCQlPTUFQX0RTU19MQ0RfSVZTIHwgT01BUF9EU1NfTENEX0lQQzsKKwlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSB0cG9fdGQwNDNfdGltaW5nczsKKwlkc3NkZXYtPmN0cmwucGl4ZWxfc2l6ZSA9IDI0OworCisJdHBvX3RkMDQzLT5tb2RlID0gVFBPX1IwMl9NT0RFXzgwMHg0ODA7CisJbWVtY3B5KHRwb190ZDA0My0+Z2FtbWEsIHRwb190ZDA0M19kZWZfZ2FtbWEsIHNpemVvZih0cG9fdGQwNDMtPmdhbW1hKSk7CisKKwl0cG9fdGQwNDMtPnZjY19yZWcgPSByZWd1bGF0b3JfZ2V0KCZkc3NkZXYtPmRldiwgInZjYyIpOworCWlmIChJU19FUlIodHBvX3RkMDQzLT52Y2NfcmVnKSkgeworCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgTENEIFZDQyByZWd1bGF0b3JcbiIpOworCQlyZXQgPSBQVFJfRVJSKHRwb190ZDA0My0+dmNjX3JlZyk7CisJCWdvdG8gZmFpbF9yZWd1bGF0b3I7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQobnJlc2V0X2dwaW8pKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChucmVzZXRfZ3BpbywgImxjZCByZXNldCIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJjb3VsZG4ndCByZXF1ZXN0IHJlc2V0IEdQSU9cbiIpOworCQkJZ290byBmYWlsX2dwaW9fcmVxOworCQl9CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG5yZXNldF9ncGlvLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiY291bGRuJ3Qgc2V0IEdQSU8gZGlyZWN0aW9uXG4iKTsKKwkJCWdvdG8gZmFpbF9ncGlvX2RpcmVjdGlvbjsKKwkJfQorCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZHNzZGV2LT5kZXYua29iaiwgJnRwb190ZDA0M19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlkZXZfd2FybigmZHNzZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKKworCXJldHVybiAwOworCitmYWlsX2dwaW9fZGlyZWN0aW9uOgorCWdwaW9fZnJlZShucmVzZXRfZ3Bpbyk7CitmYWlsX2dwaW9fcmVxOgorCXJlZ3VsYXRvcl9wdXQodHBvX3RkMDQzLT52Y2NfcmVnKTsKK2ZhaWxfcmVndWxhdG9yOgorCWtmcmVlKHRwb190ZDA0Myk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdHBvX3RkMDQzX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCWludCBucmVzZXRfZ3BpbyA9IGRzc2Rldi0+cmVzZXRfZ3BpbzsKKworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAicmVtb3ZlXG4iKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZHNzZGV2LT5kZXYua29iaiwgJnRwb190ZDA0M19hdHRyX2dyb3VwKTsKKwlyZWd1bGF0b3JfcHV0KHRwb190ZDA0My0+dmNjX3JlZyk7CisJaWYgKGdwaW9faXNfdmFsaWQobnJlc2V0X2dwaW8pKQorCQlncGlvX2ZyZWUobnJlc2V0X2dwaW8pOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RyaXZlciB0cG9fdGQwNDNfZHJpdmVyID0geworCS5wcm9iZQkJPSB0cG9fdGQwNDNfcHJvYmUsCisJLnJlbW92ZQkJPSB0cG9fdGQwNDNfcmVtb3ZlLAorCisJLmVuYWJsZQkJPSB0cG9fdGQwNDNfZW5hYmxlLAorCS5kaXNhYmxlCT0gdHBvX3RkMDQzX2Rpc2FibGUsCisJLnN1c3BlbmQJPSB0cG9fdGQwNDNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRwb190ZDA0M19yZXN1bWUsCisJLnNldF9taXJyb3IJPSB0cG9fdGQwNDNfc2V0X2htaXJyb3IsCisJLmdldF9taXJyb3IJPSB0cG9fdGQwNDNfZ2V0X2htaXJyb3IsCisKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5uYW1lCT0gInRwb190ZDA0M210ZWExX3BhbmVsIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IHRwb190ZDA0M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDM7CisJaW50IHJldDsKKworCWlmIChkc3NkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIm1pc3NpbmcgZHNzZGV2XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAic3BpX3NldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJdHBvX3RkMDQzID0ga3phbGxvYyhzaXplb2YoKnRwb190ZDA0MyksIEdGUF9LRVJORUwpOworCWlmICh0cG9fdGQwNDMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cG9fdGQwNDMtPnNwaSA9IHNwaTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB0cG9fdGQwNDMpOworCWRldl9zZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYsIHRwb190ZDA0Myk7CisKKwlvbWFwX2Rzc19yZWdpc3Rlcl9kcml2ZXIoJnRwb190ZDA0M19kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRwb190ZDA0M19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJb21hcF9kc3NfdW5yZWdpc3Rlcl9kcml2ZXIoJnRwb190ZDA0M19kcml2ZXIpOworCWtmcmVlKHRwb190ZDA0Myk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHRwb190ZDA0M19zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInRwb190ZDA0M210ZWExX3BhbmVsX3NwaSIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IHRwb190ZDA0M19zcGlfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHRwb190ZDA0M19zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRwb190ZDA0M19pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnRwb190ZDA0M19zcGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRwb190ZDA0M19leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0cG9fdGQwNDNfc3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRwb190ZDA0M19pbml0KTsKK21vZHVsZV9leGl0KHRwb190ZDA0M19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiR3Jhxb52eWRhcyBJZ25vdGFzIDxub3Rhc2FzQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBPIFREMDQzTVRFQTEgTENEIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcKaW5kZXggYzYzY2U3Ni4uODdhZmI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9LY29uZmlnCkBAIC0zMCwxOSArMzAsMjkgQEAKIAlkZXBlbmRzIG9uIE9NQVAyX0RTU19ERUJVR19TVVBQT1JUCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgQ29sbGVjdCBEU1MgSVJRIHN0YXRpc3RpY3MsIHByaW50YWJsZSB2aWEgZGVidWdmcworCSAgQ29sbGVjdCBEU1MgSVJRIHN0YXRpc3RpY3MsIHByaW50YWJsZSB2aWEgZGVidWdmcy4KKworCSAgVGhlIHN0YXRpc3RpY3MgY2FuIGJlIGZvdW5kIGZyb20KKwkgIDxkZWJ1Z2ZzPi9vbWFwZHNzL2Rpc3BjX2lycSBmb3IgRElTUEMgaW50ZXJydXB0cywgYW5kCisJICA8ZGVidWdmcz4vb21hcGRzcy9kc2lfaXJxIGZvciBEU0kgaW50ZXJydXB0cy4KIAogY29uZmlnIE9NQVAyX0RTU19SRkJJCiAJYm9vbCAiUkZCSSBzdXBwb3J0IgogICAgICAgICBkZWZhdWx0IG4KIAloZWxwCi0JICBNSVBJIERCSSwgb3IgUkZCSSAoUmVtb3RlIEZyYW1lYnVmZmVyIEludGVyZmFjZSksIHN1cHBvcnQuCisJICBNSVBJIERCSSBzdXBwb3J0IChSRkJJLCBSZW1vdGUgRnJhbWVidWZmZXIgSW50ZXJmYWNlLCBpbiBUZXhhcworCSAgSW5zdHJ1bWVudCdzIHRlcm1pbm9sb2d5KS4KKworCSAgREJJIGlzIGEgYnVzIGJldHdlZW4gdGhlIGhvc3QgcHJvY2Vzc29yIGFuZCBhIHBlcmlwaGVyYWwsCisJICBzdWNoIGFzIGEgZGlzcGxheSBvciBhIGZyYW1lYnVmZmVyIGNoaXAuCisKKwkgIFNlZSBodHRwOi8vd3d3Lm1pcGkub3JnLyBmb3IgREJJIHNwZXNpZmljYXRpb25zLgogCiBjb25maWcgT01BUDJfRFNTX1ZFTkMKIAlib29sICJWRU5DIHN1cHBvcnQiCiAgICAgICAgIGRlZmF1bHQgeQogCWhlbHAKLQkgIE9NQVAgVmlkZW8gRW5jb2RlciBzdXBwb3J0LgorCSAgT01BUCBWaWRlbyBFbmNvZGVyIHN1cHBvcnQgZm9yIFMtVmlkZW8gYW5kIGNvbXBvc2l0ZSBUVi1vdXQuCiAKIGNvbmZpZyBPTUFQMl9EU1NfU0RJCiAJYm9vbCAiU0RJIHN1cHBvcnQiCkBAIC01MSwxMiArNjEsMjAgQEAKIAloZWxwCiAJICBTREkgKFNlcmlhbCBEaXNwbGF5IEludGVyZmFjZSkgc3VwcG9ydC4KIAorCSAgU0RJIGlzIGEgaGlnaCBzcGVlZCBvbmUtd2F5IGRpc3BsYXkgc2VyaWFsIGJ1cyBiZXR3ZWVuIHRoZSBob3N0CisJICBwcm9jZXNzb3IgYW5kIGEgZGlzcGxheS4KKwogY29uZmlnIE9NQVAyX0RTU19EU0kKIAlib29sICJEU0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKICAgICAgICAgZGVmYXVsdCBuCiAJaGVscAotCSAgTUlQSSBEU0kgc3VwcG9ydC4KKwkgIE1JUEkgRFNJIChEaXNwbGF5IFNlcmlhbCBJbnRlcmZhY2UpIHN1cHBvcnQuCisKKwkgIERTSSBpcyBhIGhpZ2ggc3BlZWQgaGFsZi1kdXBsZXggc2VyaWFsIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBob3N0CisJICBwcm9jZXNzb3IgYW5kIGEgcGVyaXBoZXJhbCwgc3VjaCBhcyBhIGRpc3BsYXkgb3IgYSBmcmFtZWJ1ZmZlciBjaGlwLgorCisJICBTZWUgaHR0cDovL3d3dy5taXBpLm9yZy8gZm9yIERTSSBzcGVzaWZpY2F0aW9ucy4KIAogY29uZmlnIE9NQVAyX0RTU19VU0VfRFNJX1BMTAogCWJvb2wgIlVzZSBEU0kgUExMIGZvciBQQ0xLIChFWFBFUklNRU5UQUwpIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvY29yZS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvY29yZS5jCmluZGV4IDgyOTE4ZWUuLjdlYmU1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KQEAgLTQ3LDYgKzQ4LDEwIEBACiAJc3RydWN0IGNsayAgICAgICpkc3NfNTRtX2ZjazsKIAlzdHJ1Y3QgY2xrCSpkc3NfOTZtX2ZjazsKIAl1bnNpZ25lZAludW1fY2xrc19lbmFibGVkOworCisJc3RydWN0IHJlZ3VsYXRvciAqdmRkc19kc2lfcmVnOworCXN0cnVjdCByZWd1bGF0b3IgKnZkZHNfc2RpX3JlZzsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGRhX2RhY19yZWc7CiB9IGNvcmU7CiAKIHN0YXRpYyB2b2lkIGRzc19jbGtfZW5hYmxlX2FsbF9ub19jdHgodm9pZCk7CkBAIC0yODQsOSArMjg5LDExIEBACiAKIHZvaWQgZHNzX2Nsa19lbmFibGUoZW51bSBkc3NfY2xvY2sgY2xrcykKIHsKKwlib29sIGNoZWNrX2N0eCA9IGNvcmUubnVtX2Nsa3NfZW5hYmxlZCA9PSAwOworCiAJZHNzX2Nsa19lbmFibGVfbm9fY3R4KGNsa3MpOwogCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpICYmIGRzc19uZWVkX2N0eF9yZXN0b3JlKCkpCisJaWYgKGNoZWNrX2N0eCAmJiBjcHVfaXNfb21hcDM0eHgoKSAmJiBkc3NfbmVlZF9jdHhfcmVzdG9yZSgpKQogCQlyZXN0b3JlX2FsbF9jdHgoKTsKIH0KIApAQCAtMzUyLDYgKzM1OSw1MCBAQAogCWRzc19jbGtfZGlzYWJsZShjbGtzKTsKIH0KIAorLyogUkVHVUxBVE9SUyAqLworCitzdHJ1Y3QgcmVndWxhdG9yICpkc3NfZ2V0X3ZkZHNfZHNpKHZvaWQpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVnOworCisJaWYgKGNvcmUudmRkc19kc2lfcmVnICE9IE5VTEwpCisJCXJldHVybiBjb3JlLnZkZHNfZHNpX3JlZzsKKworCXJlZyA9IHJlZ3VsYXRvcl9nZXQoJmNvcmUucGRldi0+ZGV2LCAidmRkc19kc2kiKTsKKwlpZiAoIUlTX0VSUihyZWcpKQorCQljb3JlLnZkZHNfZHNpX3JlZyA9IHJlZzsKKworCXJldHVybiByZWc7Cit9CisKK3N0cnVjdCByZWd1bGF0b3IgKmRzc19nZXRfdmRkc19zZGkodm9pZCkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWc7CisKKwlpZiAoY29yZS52ZGRzX3NkaV9yZWcgIT0gTlVMTCkKKwkJcmV0dXJuIGNvcmUudmRkc19zZGlfcmVnOworCisJcmVnID0gcmVndWxhdG9yX2dldCgmY29yZS5wZGV2LT5kZXYsICJ2ZGRzX3NkaSIpOworCWlmICghSVNfRVJSKHJlZykpCisJCWNvcmUudmRkc19zZGlfcmVnID0gcmVnOworCisJcmV0dXJuIHJlZzsKK30KKworc3RydWN0IHJlZ3VsYXRvciAqZHNzX2dldF92ZGRhX2RhYyh2b2lkKQoreworCXN0cnVjdCByZWd1bGF0b3IgKnJlZzsKKworCWlmIChjb3JlLnZkZGFfZGFjX3JlZyAhPSBOVUxMKQorCQlyZXR1cm4gY29yZS52ZGRhX2RhY19yZWc7CisKKwlyZWcgPSByZWd1bGF0b3JfZ2V0KCZjb3JlLnBkZXYtPmRldiwgInZkZGFfZGFjIik7CisJaWYgKCFJU19FUlIocmVnKSkKKwkJY29yZS52ZGRhX2RhY19yZWcgPSByZWc7CisKKwlyZXR1cm4gcmVnOworfQorCiAvKiBERUJVR0ZTICovCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUKQogc3RhdGljIHZvaWQgZHNzX2RlYnVnX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcykKQEAgLTM5NywxMCArNDQ4LDEyIEBACiAJZGVidWdmc19jcmVhdGVfZmlsZSgiY2xrIiwgU19JUlVHTywgZHNzX2RlYnVnZnNfZGlyLAogCQkJJmRzc19kZWJ1Z19kdW1wX2Nsb2NrcywgJmRzc19kZWJ1Z19mb3BzKTsKIAorI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNwY19pcnEiLCBTX0lSVUdPLCBkc3NfZGVidWdmc19kaXIsCiAJCQkmZGlzcGNfZHVtcF9pcnFzLCAmZHNzX2RlYnVnX2ZvcHMpOworI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0RTSQorI2lmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19EU0kpICYmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUykKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkc2lfaXJxIiwgU19JUlVHTywgZHNzX2RlYnVnZnNfZGlyLAogCQkJJmRzaV9kdW1wX2lycXMsICZkc3NfZGVidWdfZm9wcyk7CiAjZW5kaWYKQEAgLTQ3Myw3ICs1MjYsNyBAQAogCX0KICNlbmRpZgogCi0JciA9IGRwaV9pbml0KCk7CisJciA9IGRwaV9pbml0KHBkZXYpOwogCWlmIChyKSB7CiAJCURTU0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgZHBpXG4iKTsKIAkJZ290byBmYWlsMDsKQEAgLTcxOCwxNiArNzcxLDE0IEBACiAKIAlkc3NfaW5pdF9kZXZpY2UoY29yZS5wZGV2LCBkc3NkZXYpOwogCi0JLyogc2tpcCB0aGlzIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgY3RybCAqLwotCWlmICghZHNzZGV2LT5wYW5lbC5jdHJsKSB7Ci0JCWZvcmNlID0gcGRhdGEtPmRlZmF1bHRfZGV2aWNlID09IGRzc2RldjsKLQkJZHNzX3JlY2hlY2tfY29ubmVjdGlvbnMoZHNzZGV2LCBmb3JjZSk7Ci0JfQorCWZvcmNlID0gcGRhdGEtPmRlZmF1bHRfZGV2aWNlID09IGRzc2RldjsKKwlkc3NfcmVjaGVja19jb25uZWN0aW9ucyhkc3NkZXYsIGZvcmNlKTsKIAogCXIgPSBkc3NkcnYtPnByb2JlKGRzc2Rldik7CiAKIAlpZiAocikgewogCQlEU1NFUlIoImRyaXZlciBwcm9iZSBmYWlsZWQ6ICVkXG4iLCByKTsKKwkJZHNzX3VuaW5pdF9kZXZpY2UoY29yZS5wZGV2LCBkc3NkZXYpOwogCQlyZXR1cm4gcjsKIAl9CiAKQEAgLTc2MCw2ICs4MTEsMTMgQEAKIAlkc3Nkcml2ZXItPmRyaXZlci5idXMgPSAmZHNzX2J1c190eXBlOwogCWRzc2RyaXZlci0+ZHJpdmVyLnByb2JlID0gZHNzX2RyaXZlcl9wcm9iZTsKIAlkc3Nkcml2ZXItPmRyaXZlci5yZW1vdmUgPSBkc3NfZHJpdmVyX3JlbW92ZTsKKworCWlmIChkc3Nkcml2ZXItPmdldF9yZXNvbHV0aW9uID09IE5VTEwpCisJCWRzc2RyaXZlci0+Z2V0X3Jlc29sdXRpb24gPSBvbWFwZHNzX2RlZmF1bHRfZ2V0X3Jlc29sdXRpb247CisJaWYgKGRzc2RyaXZlci0+Z2V0X3JlY29tbWVuZGVkX2JwcCA9PSBOVUxMKQorCQlkc3Nkcml2ZXItPmdldF9yZWNvbW1lbmRlZF9icHAgPQorCQkJb21hcGRzc19kZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHA7CisKIAlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkc3Nkcml2ZXItPmRyaXZlcik7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcik7CkBAIC04MDgsOCArODY2LDYgQEAKIGludCBvbWFwX2Rzc19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0YXRpYyBpbnQgZGV2X251bTsKLQlzdGF0aWMgaW50IHBhbmVsX251bTsKLQlpbnQgcjsKIAogCVdBUk5fT04oIWRzc2Rldi0+ZHJpdmVyX25hbWUpOwogCkBAIC04MTgsMzYgKzg3NCwxMiBAQAogCWRzc2Rldi0+ZGV2LnBhcmVudCA9ICZkc3NfYnVzOwogCWRzc2Rldi0+ZGV2LnJlbGVhc2UgPSBvbWFwX2Rzc19kZXZfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmRzc2Rldi0+ZGV2LCAiZGlzcGxheSVkIiwgZGV2X251bSsrKTsKLQlyID0gZGV2aWNlX3JlZ2lzdGVyKCZkc3NkZXYtPmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JaWYgKGRzc2Rldi0+Y3RybC5wYW5lbCkgewotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpwYW5lbCA9IGRzc2Rldi0+Y3RybC5wYW5lbDsKLQotCQlwYW5lbC0+cGFuZWwuY3RybCA9IGRzc2RldjsKLQotCQlyZXNldF9kZXZpY2UoJnBhbmVsLT5kZXYsIDEpOwotCQlwYW5lbC0+ZGV2LmJ1cyA9ICZkc3NfYnVzX3R5cGU7Ci0JCXBhbmVsLT5kZXYucGFyZW50ID0gJmRzc2Rldi0+ZGV2OwotCQlwYW5lbC0+ZGV2LnJlbGVhc2UgPSBvbWFwX2Rzc19kZXZfcmVsZWFzZTsKLQkJZGV2X3NldF9uYW1lKCZwYW5lbC0+ZGV2LCAicGFuZWwlZCIsIHBhbmVsX251bSsrKTsKLQkJciA9IGRldmljZV9yZWdpc3RlcigmcGFuZWwtPmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRldmljZV9yZWdpc3RlcigmZHNzZGV2LT5kZXYpOwogfQogCiB2b2lkIG9tYXBfZHNzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlkZXZpY2VfdW5yZWdpc3RlcigmZHNzZGV2LT5kZXYpOwotCi0JaWYgKGRzc2Rldi0+Y3RybC5wYW5lbCkgewotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpwYW5lbCA9IGRzc2Rldi0+Y3RybC5wYW5lbDsKLQkJZGV2aWNlX3VucmVnaXN0ZXIoJnBhbmVsLT5kZXYpOwotCX0KIH0KIAogLyogQlVTICovCkBAIC05MDEsNiArOTMzLDIxIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2Rzc19leGl0KHZvaWQpCiB7CisJaWYgKGNvcmUudmRkc19kc2lfcmVnICE9IE5VTEwpIHsKKwkJcmVndWxhdG9yX3B1dChjb3JlLnZkZHNfZHNpX3JlZyk7CisJCWNvcmUudmRkc19kc2lfcmVnID0gTlVMTDsKKwl9CisKKwlpZiAoY29yZS52ZGRzX3NkaV9yZWcgIT0gTlVMTCkgeworCQlyZWd1bGF0b3JfcHV0KGNvcmUudmRkc19zZGlfcmVnKTsKKwkJY29yZS52ZGRzX3NkaV9yZWcgPSBOVUxMOworCX0KKworCWlmIChjb3JlLnZkZGFfZGFjX3JlZyAhPSBOVUxMKSB7CisJCXJlZ3VsYXRvcl9wdXQoY29yZS52ZGRhX2RhY19yZWcpOworCQljb3JlLnZkZGFfZGFjX3JlZyA9IE5VTEw7CisJfQorCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBfZHNzX2RyaXZlcik7CiAKIAlvbWFwX2Rzc19idXNfdW5yZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMKaW5kZXggZGU4YmZiYS4uZTc3N2UzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jCkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogCVJFR19GTERfTU9EKERJU1BDX0NPTlRST0wsIGVuYWJsZSA/IDEgOiAwLCAwLCAwKTsKIH0KIAotdm9pZCBkaXNwY19lbmFibGVfbGNkX291dChib29sIGVuYWJsZSkKK3N0YXRpYyB2b2lkIGRpc3BjX2VuYWJsZV9sY2Rfb3V0KGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBjb21wbGV0aW9uIGZyYW1lX2RvbmVfY29tcGxldGlvbjsKIAlib29sIGlzX29uOwpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKIAlSRUdfRkxEX01PRChESVNQQ19DT05UUk9MLCBlbmFibGUgPyAxIDogMCwgMSwgMSk7CiB9CiAKLXZvaWQgZGlzcGNfZW5hYmxlX2RpZ2l0X291dChib29sIGVuYWJsZSkKK3N0YXRpYyB2b2lkIGRpc3BjX2VuYWJsZV9kaWdpdF9vdXQoYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IGNvbXBsZXRpb24gZnJhbWVfZG9uZV9jb21wbGV0aW9uOwogCWludCByOwpAQCAtMTgzNiw2ICsxODM2LDI2IEBACiAJZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAorYm9vbCBkaXNwY19pc19jaGFubmVsX2VuYWJsZWQoZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlpZiAoY2hhbm5lbCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkKKwkJcmV0dXJuICEhUkVHX0dFVChESVNQQ19DT05UUk9MLCAwLCAwKTsKKwllbHNlIGlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfRElHSVQpCisJCXJldHVybiAhIVJFR19HRVQoRElTUENfQ09OVFJPTCwgMSwgMSk7CisJZWxzZQorCQlCVUcoKTsKK30KKwordm9pZCBkaXNwY19lbmFibGVfY2hhbm5lbChlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKwlpZiAoY2hhbm5lbCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkKKwkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoZW5hYmxlKTsKKwllbHNlIGlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfRElHSVQpCisJCWRpc3BjX2VuYWJsZV9kaWdpdF9vdXQoZW5hYmxlKTsKKwllbHNlCisJCUJVRygpOworfQorCiB2b2lkIGRpc3BjX2xjZF9lbmFibGVfc2lnbmFsX3BvbGFyaXR5KGJvb2wgYWN0X2hpZ2gpCiB7CiAJZW5hYmxlX2Nsb2NrcygxKTsKQEAgLTIxOTgsNyArMjIxOCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyByID0gMDsKIAotCWlmIChkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKSA9PSAwKQorCWlmIChkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKSA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSykKIAkJciA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0sxKTsKIAllbHNlCiAjaWZkZWYgQ09ORklHX09NQVAyX0RTU19EU0kKQEAgLTIyNTEsNyArMjI3MSw3IEBACiAJc2VxX3ByaW50ZihzLCAiLSBESVNQQyAtXG4iKTsKIAogCXNlcV9wcmludGYocywgImRpc3BjIGZjbGsgc291cmNlID0gJXNcbiIsCi0JCQlkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKSA9PSAwID8KKwkJCWRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLID8KIAkJCSJkc3MxX2Fsd29uX2ZjbGsiIDogImRzaTFfcGxsX2ZjbGsiKTsKIAogCXNlcV9wcmludGYocywgImZja1x0XHQlLTE2bHVcbiIsIGRpc3BjX2ZjbGtfcmF0ZSgpKTsKQEAgLTIzMDEsOCArMjMyMSw2IEBACiAJUElTKFdBS0VVUCk7CiAjdW5kZWYgUElTCiB9Ci0jZWxzZQotdm9pZCBkaXNwY19kdW1wX2lycXMoc3RydWN0IHNlcV9maWxlICpzKSB7IH0KICNlbmRpZgogCiB2b2lkIGRpc3BjX2R1bXBfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCkBAIC0yODU0LDEyICsyODcyLDEzIEBACiAJCQkJbWFuYWdlciA9IG1ncjsKIAkJCQllbmFibGUgPSBtZ3ItPmRldmljZS0+c3RhdGUgPT0KIAkJCQkJCU9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotCQkJCW1nci0+ZGV2aWNlLT5kaXNhYmxlKG1nci0+ZGV2aWNlKTsKKwkJCQltZ3ItPmRldmljZS0+ZHJpdmVyLT5kaXNhYmxlKG1nci0+ZGV2aWNlKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCiAJCWlmIChtYW5hZ2VyKSB7CisJCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSBtYW5hZ2VyLT5kZXZpY2U7CiAJCQlmb3IgKGkgPSAwOyBpIDwgb21hcF9kc3NfZ2V0X251bV9vdmVybGF5cygpOyArK2kpIHsKIAkJCQlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmw7CiAJCQkJb3ZsID0gb21hcF9kc3NfZ2V0X292ZXJsYXkoaSk7CkBAIC0yODc0LDcgKzI4OTMsNyBAQAogCQkJZGlzcGNfZ28obWFuYWdlci0+aWQpOwogCQkJbWRlbGF5KDUwKTsKIAkJCWlmIChlbmFibGUpCi0JCQkJbWFuYWdlci0+ZGV2aWNlLT5lbmFibGUobWFuYWdlci0+ZGV2aWNlKTsKKwkJCQlkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKGRzc2Rldik7CiAJCX0KIAl9CiAKQEAgLTI4OTIsMTIgKzI5MTEsMTMgQEAKIAkJCQltYW5hZ2VyID0gbWdyOwogCQkJCWVuYWJsZSA9IG1nci0+ZGV2aWNlLT5zdGF0ZSA9PQogCQkJCQkJT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci0JCQkJbWdyLT5kZXZpY2UtPmRpc2FibGUobWdyLT5kZXZpY2UpOworCQkJCW1nci0+ZGV2aWNlLT5kcml2ZXItPmRpc2FibGUobWdyLT5kZXZpY2UpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKIAkJaWYgKG1hbmFnZXIpIHsKKwkJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IG1hbmFnZXItPmRldmljZTsKIAkJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2Rzc19nZXRfbnVtX292ZXJsYXlzKCk7ICsraSkgewogCQkJCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92bDsKIAkJCQlvdmwgPSBvbWFwX2Rzc19nZXRfb3ZlcmxheShpKTsKQEAgLTI5MTIsNyArMjkzMiw3IEBACiAJCQlkaXNwY19nbyhtYW5hZ2VyLT5pZCk7CiAJCQltZGVsYXkoNTApOwogCQkJaWYgKGVuYWJsZSkKLQkJCQltYW5hZ2VyLT5kZXZpY2UtPmVuYWJsZShtYW5hZ2VyLT5kZXZpY2UpOworCQkJCWRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKIAkJfQogCX0KIApAQCAtMjkyMyw3ICsyOTQzLDcgQEAKIAkJCW1nciA9IG9tYXBfZHNzX2dldF9vdmVybGF5X21hbmFnZXIoaSk7CiAKIAkJCWlmIChtZ3ItPmNhcHMgJiBPTUFQX0RTU19PVkxfQ0FQX0RJU1BDKQotCQkJCW1nci0+ZGV2aWNlLT5kaXNhYmxlKG1nci0+ZGV2aWNlKTsKKwkJCQltZ3ItPmRldmljZS0+ZHJpdmVyLT5kaXNhYmxlKG1nci0+ZGV2aWNlKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGxheS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGxheS5jCmluZGV4IDNiOTJiODQuLjZhNzRlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMKQEAgLTUzLDExICs1MywxMSBAQAogCiAJaWYgKGVuYWJsZWQgIT0gKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkpIHsKIAkJaWYgKGVuYWJsZWQpIHsKLQkJCXIgPSBkc3NkZXYtPmVuYWJsZShkc3NkZXYpOworCQkJciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKIAkJCWlmIChyKQogCQkJCXJldHVybiByOwogCQl9IGVsc2UgewotCQkJZHNzZGV2LT5kaXNhYmxlKGRzc2Rldik7CisJCQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwogCQl9CiAJfQogCkBAIC02OSw4ICs2OSw4IEBACiB7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gdG9fZHNzX2RldmljZShkZXYpOwogCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSA9IE9NQVBfRFNTX1VQREFURV9BVVRPOwotCWlmIChkc3NkZXYtPmdldF91cGRhdGVfbW9kZSkKLQkJbW9kZSA9IGRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2Rldik7CisJaWYgKGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUpCisJCW1vZGUgPSBkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2Rldik7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIG1vZGUpOwogfQogCkBAIC05NCw3ICs5NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXIgPSBkc3NkZXYtPnNldF91cGRhdGVfbW9kZShkc3NkZXYsIG1vZGUpOworCXIgPSBkc3NkZXYtPmRyaXZlci0+c2V0X3VwZGF0ZV9tb2RlKGRzc2RldiwgbW9kZSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0xMDYsNyArMTA2LDggQEAKIHsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlkc3NkZXYtPmdldF90ZSA/IGRzc2Rldi0+Z2V0X3RlKGRzc2RldikgOiAwKTsKKwkJCWRzc2Rldi0+ZHJpdmVyLT5nZXRfdGUgPworCQkJZHNzZGV2LT5kcml2ZXItPmdldF90ZShkc3NkZXYpIDogMCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRpc3BsYXlfdGVhcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTYsMTIgKzExNywxMiBAQAogCXVuc2lnbmVkIGxvbmcgdGU7CiAJaW50IHI7CiAKLQlpZiAoIWRzc2Rldi0+ZW5hYmxlX3RlIHx8ICFkc3NkZXYtPmdldF90ZSkKKwlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUgfHwgIWRzc2Rldi0+ZHJpdmVyLT5nZXRfdGUpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJdGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCi0JciA9IGRzc2Rldi0+ZW5hYmxlX3RlKGRzc2RldiwgdGUpOworCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKGRzc2RldiwgdGUpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMTM0LDEwICsxMzUsMTAgQEAKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0OwogCi0JaWYgKCFkc3NkZXYtPmdldF90aW1pbmdzKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmdldF90aW1pbmdzKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWRzc2Rldi0+Z2V0X3RpbWluZ3MoZHNzZGV2LCAmdCk7CisJZHNzZGV2LT5kcml2ZXItPmdldF90aW1pbmdzKGRzc2RldiwgJnQpOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXUsJXUvJXUvJXUvJXUsJXUvJXUvJXUvJXVcbiIsCiAJCQl0LnBpeGVsX2Nsb2NrLApAQCAtMTUyLDcgKzE1Myw3IEBACiAJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0OwogCWludCByLCBmb3VuZDsKIAotCWlmICghZHNzZGV2LT5zZXRfdGltaW5ncyB8fCAhZHNzZGV2LT5jaGVja190aW1pbmdzKQorCWlmICghZHNzZGV2LT5kcml2ZXItPnNldF90aW1pbmdzIHx8ICFkc3NkZXYtPmRyaXZlci0+Y2hlY2tfdGltaW5ncykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlmb3VuZCA9IDA7CkBAIC0xNzEsMTEgKzE3MiwxMSBAQAogCQkJCSZ0LnlfcmVzLCAmdC52ZnAsICZ0LnZicCwgJnQudnN3KSAhPSA5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXIgPSBkc3NkZXYtPmNoZWNrX3RpbWluZ3MoZHNzZGV2LCAmdCk7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5jaGVja190aW1pbmdzKGRzc2RldiwgJnQpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCWRzc2Rldi0+c2V0X3RpbWluZ3MoZHNzZGV2LCAmdCk7CisJZHNzZGV2LT5kcml2ZXItPnNldF90aW1pbmdzKGRzc2RldiwgJnQpOwogCiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xODUsOSArMTg2LDkgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAJaW50IHJvdGF0ZTsKLQlpZiAoIWRzc2Rldi0+Z2V0X3JvdGF0ZSkKKwlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5nZXRfcm90YXRlKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlyb3RhdGUgPSBkc3NkZXYtPmdldF9yb3RhdGUoZHNzZGV2KTsKKwlyb3RhdGUgPSBkc3NkZXYtPmRyaXZlci0+Z2V0X3JvdGF0ZShkc3NkZXYpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCByb3RhdGUpOwogfQogCkBAIC0xOTgsMTIgKzE5OSwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcm90OwogCWludCByOwogCi0JaWYgKCFkc3NkZXYtPnNldF9yb3RhdGUgfHwgIWRzc2Rldi0+Z2V0X3JvdGF0ZSkKKwlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5zZXRfcm90YXRlIHx8ICFkc3NkZXYtPmRyaXZlci0+Z2V0X3JvdGF0ZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlyb3QgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCi0JciA9IGRzc2Rldi0+c2V0X3JvdGF0ZShkc3NkZXYsIHJvdCk7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5zZXRfcm90YXRlKGRzc2Rldiwgcm90KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTIxNSw5ICsyMTYsOSBAQAogewogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAlpbnQgbWlycm9yOwotCWlmICghZHNzZGV2LT5nZXRfbWlycm9yKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IpCiAJCXJldHVybiAtRU5PRU5UOwotCW1pcnJvciA9IGRzc2Rldi0+Z2V0X21pcnJvcihkc3NkZXYpOworCW1pcnJvciA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfbWlycm9yKGRzc2Rldik7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIG1pcnJvcik7CiB9CiAKQEAgLTIyOCwxMiArMjI5LDEyIEBACiAJdW5zaWduZWQgbG9uZyBtaXJyb3I7CiAJaW50IHI7CiAKLQlpZiAoIWRzc2Rldi0+c2V0X21pcnJvciB8fCAhZHNzZGV2LT5nZXRfbWlycm9yKQorCWlmICghZHNzZGV2LT5kcml2ZXItPnNldF9taXJyb3IgfHwgIWRzc2Rldi0+ZHJpdmVyLT5nZXRfbWlycm9yKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCW1pcnJvciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKLQlyID0gZHNzZGV2LT5zZXRfbWlycm9yKGRzc2RldiwgbWlycm9yKTsKKwlyID0gZHNzZGV2LT5kcml2ZXItPnNldF9taXJyb3IoZHNzZGV2LCBtaXJyb3IpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMjQ2LDEwICsyNDcsMTAgQEAKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAJdW5zaWduZWQgaW50IHdzczsKIAotCWlmICghZHNzZGV2LT5nZXRfd3NzKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmdldF93c3MpCiAJCXJldHVybiAtRU5PRU5UOwogCi0Jd3NzID0gZHNzZGV2LT5nZXRfd3NzKGRzc2Rldik7CisJd3NzID0gZHNzZGV2LT5kcml2ZXItPmdldF93c3MoZHNzZGV2KTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA1eFxuIiwgd3NzKTsKIH0KQEAgLTI2MSw3ICsyNjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgd3NzOwogCWludCByOwogCi0JaWYgKCFkc3NkZXYtPmdldF93c3MgfHwgIWRzc2Rldi0+c2V0X3dzcykKKwlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5nZXRfd3NzIHx8ICFkc3NkZXYtPmRyaXZlci0+c2V0X3dzcykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmd3NzKSkKQEAgLTI3MCw3ICsyNzEsNyBAQAogCWlmICh3c3MgPiAweGZmZmZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXIgPSBkc3NkZXYtPnNldF93c3MoZHNzZGV2LCB3c3MpOworCXIgPSBkc3NkZXYtPmRyaXZlci0+c2V0X3dzcyhkc3NkZXYsIHdzcyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0zMDMsMTIgKzMwNCwxMyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfZ2V0X3Jlc29sdXRpb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAordm9pZCBvbWFwZHNzX2RlZmF1bHRfZ2V0X3Jlc29sdXRpb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAogCQkJdTE2ICp4cmVzLCB1MTYgKnlyZXMpCiB7CiAJKnhyZXMgPSBkc3NkZXYtPnBhbmVsLnRpbWluZ3MueF9yZXM7CiAJKnlyZXMgPSBkc3NkZXYtPnBhbmVsLnRpbWluZ3MueV9yZXM7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbik7CiAKIHZvaWQgZGVmYXVsdF9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAogCQl1MzIgZmlmb19zaXplLCBlbnVtIG9tYXBfYnVyc3Rfc2l6ZSAqYnVyc3Rfc2l6ZSwKQEAgLTMyMywyNCArMzI1LDggQEAKIAkqZmlmb19sb3cgPSBmaWZvX3NpemUgLSBidXJzdF9zaXplX2J5dGVzOwogfQogCi1zdGF0aWMgaW50IGRlZmF1bHRfd2FpdF92c3luYyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitpbnQgb21hcGRzc19kZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHAoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQl1MzIgaXJxOwotCi0JaWYgKGRzc2Rldi0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DKQotCQlpcnEgPSBESVNQQ19JUlFfRVZTWU5DX09ERDsKLQllbHNlCi0JCWlycSA9IERJU1BDX0lSUV9WU1lOQzsKLQotCXJldHVybiBvbWFwX2Rpc3BjX3dhaXRfZm9yX2lycV9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaXJxLCB0aW1lb3V0KTsKLX0KLQotc3RhdGljIGludCBkZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHAoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCWlmIChkc3NkZXYtPnBhbmVsLnJlY29tbWVuZGVkX2JwcCkKLQkJcmV0dXJuIGRzc2Rldi0+cGFuZWwucmVjb21tZW5kZWRfYnBwOwotCiAJc3dpdGNoIChkc3NkZXYtPnR5cGUpIHsKIAljYXNlIE9NQVBfRElTUExBWV9UWVBFX0RQSToKIAkJaWYgKGRzc2Rldi0+cGh5LmRwaS5kYXRhX2xpbmVzID09IDI0KQpAQCAtMzYyLDYgKzM0OCw3IEBACiAJCUJVRygpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19kZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHApOwogCiAvKiBDaGVja3MgaWYgcmVwbGljYXRpb24gbG9naWMgc2hvdWxkIGJlIHVzZWQuIE9ubHkgdXNlIGZvciBhY3RpdmUgbWF0cml4LAogICogd2hlbiBvdmVybGF5IGlzIGluIFJHQjEyVSBvciBSR0IxNiBtb2RlLCBhbmQgTENEIGludGVyZmFjZSBpcwpAQCAtNDI1LDEwICs0MTIsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JZHNzZGV2LT5nZXRfcmVzb2x1dGlvbiA9IGRlZmF1bHRfZ2V0X3Jlc29sdXRpb247Ci0JZHNzZGV2LT5nZXRfcmVjb21tZW5kZWRfYnBwID0gZGVmYXVsdF9nZXRfcmVjb21tZW5kZWRfYnBwOwotCWRzc2Rldi0+d2FpdF92c3luYyA9IGRlZmF1bHRfd2FpdF92c3luYzsKLQogCXN3aXRjaCAoZHNzZGV2LT50eXBlKSB7CiAJY2FzZSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk6CiAJCXIgPSBkcGlfaW5pdF9kaXNwbGF5KGRzc2Rldik7CkBAIC01MDIsMTMgKzQ4NSwxMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIWRzc2Rldi0+c3VzcGVuZCkgeworCWlmICghZHNzZGV2LT5kcml2ZXItPnN1c3BlbmQpIHsKIAkJRFNTRVJSKCJkaXNwbGF5ICclcycgZG9lc24ndCBpbXBsZW1lbnQgc3VzcGVuZFxuIiwKIAkJCQlkc3NkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKLQlyID0gZHNzZGV2LT5zdXNwZW5kKGRzc2Rldik7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5zdXNwZW5kKGRzc2Rldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC01MzcsOCArNTIwLDggQEAKIAlpbnQgcjsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAKLQlpZiAoZHNzZGV2LT5hY3RpdmF0ZV9hZnRlcl9yZXN1bWUgJiYgZHNzZGV2LT5yZXN1bWUpIHsKLQkJciA9IGRzc2Rldi0+cmVzdW1lKGRzc2Rldik7CisJaWYgKGRzc2Rldi0+YWN0aXZhdGVfYWZ0ZXJfcmVzdW1lICYmIGRzc2Rldi0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJciA9IGRzc2Rldi0+ZHJpdmVyLT5yZXN1bWUoZHNzZGV2KTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CkBAIC01NTgsNyArNTQxLDcgQEAKIHN0YXRpYyBpbnQgZHNzX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7Ci0JZHNzZGV2LT5kaXNhYmxlKGRzc2Rldik7CisJZHNzZGV2LT5kcml2ZXItPmRpc2FibGUoZHNzZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTkxLDEwICs1NzQsNiBAQAogCiAJaW50IG1hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIAl7Ci0JCS8qIHNraXAgcGFuZWxzIGNvbm5lY3RlZCB0byBjb250cm9sbGVycyAqLwotCQlpZiAodG9fZHNzX2RldmljZShkZXYpLT5wYW5lbC5jdHJsKQotCQkJcmV0dXJuIDA7Ci0KIAkJcmV0dXJuIDE7CiAJfQogCkBAIC02MjYsNDUgKzYwNSwyMSBAQAogCiBpbnQgb21hcF9kc3Nfc3RhcnRfZGV2aWNlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpbnQgcjsKLQogCWlmICghZHNzZGV2LT5kcml2ZXIpIHsKIAkJRFNTREJHKCJubyBkcml2ZXJcbiIpOwotCQlyID0gLUVOT0RFVjsKLQkJZ290byBlcnIwOwotCX0KLQotCWlmIChkc3NkZXYtPmN0cmwucGFuZWwgJiYgIWRzc2Rldi0+Y3RybC5wYW5lbC0+ZHJpdmVyKSB7Ci0JCURTU0RCRygibm8gcGFuZWwgZHJpdmVyXG4iKTsKLQkJciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChkc3NkZXYtPmRldi5kcml2ZXItPm93bmVyKSkgewotCQlyID0gLUVOT0RFVjsKLQkJZ290byBlcnIwOwotCX0KLQotCWlmIChkc3NkZXYtPmN0cmwucGFuZWwpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChkc3NkZXYtPmN0cmwucGFuZWwtPmRldi5kcml2ZXItPm93bmVyKSkgewotCQkJciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycjE7Ci0JCX0KKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmV0dXJuIDA7Ci1lcnIxOgotCW1vZHVsZV9wdXQoZHNzZGV2LT5kZXYuZHJpdmVyLT5vd25lcik7Ci1lcnIwOgotCXJldHVybiByOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX2Rzc19zdGFydF9kZXZpY2UpOwogCiB2b2lkIG9tYXBfZHNzX3N0b3BfZGV2aWNlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpZiAoZHNzZGV2LT5jdHJsLnBhbmVsKQotCQltb2R1bGVfcHV0KGRzc2Rldi0+Y3RybC5wYW5lbC0+ZGV2LmRyaXZlci0+b3duZXIpOwotCiAJbW9kdWxlX3B1dChkc3NkZXYtPmRldi5kcml2ZXItPm93bmVyKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9kc3Nfc3RvcF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHBpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kcGkuYwppbmRleCAyZDcxMDMxLi45NjBlOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kcGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kcGkuYwpAQCAtMjUsNyArMjUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtMzMsNyArMzYsNyBAQAogI2luY2x1ZGUgImRzcy5oIgogCiBzdGF0aWMgc3RydWN0IHsKLQlpbnQgdXBkYXRlX2VuYWJsZWQ7CisJc3RydWN0IHJlZ3VsYXRvciAqdmRkc19kc2lfcmVnOwogfSBkcGk7CiAKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX1VTRV9EU0lfUExMCkBAIC01Myw3ICs1Niw3IEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZHNzX3NlbGVjdF9jbGtfc291cmNlKDAsIDEpOworCWRzc19zZWxlY3RfZGlzcGNfY2xrX3NvdXJjZShEU1NfU1JDX0RTSTFfUExMX0ZDTEspOwogCiAJciA9IGRpc3BjX3NldF9jbG9ja19kaXYoJmRpc3BjX2NpbmZvKTsKIAlpZiAocikKQEAgLTE1MCw3ICsxNTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRwaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitpbnQgb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWludCByOwogCkBAIC0xNjAsMTAgKzE2MywxMCBAQAogCQlnb3RvIGVycjA7CiAJfQogCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkgewotCQlEU1NFUlIoImRpc3BsYXkgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJciA9IHJlZ3VsYXRvcl9lbmFibGUoZHBpLnZkZHNfZHNpX3JlZyk7CisJCWlmIChyKQorCQkJZ290byBlcnIxOwogCX0KIAogCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKQEAgLTE4NCwxOCArMTg3LDEwIEBACiAKIAltZGVsYXkoMik7CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKLQotCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKGRzc2Rldik7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyNTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKKwlkc3NkZXYtPm1hbmFnZXItPmVuYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogCiAJcmV0dXJuIDA7CiAKLWVycjU6Ci0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7CiBlcnI0OgogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfVVNFX0RTSV9QTEwKIAlkc2lfcGxsX3VuaW5pdCgpOwpAQCAtMjA0LDc4ICsxOTksMzUgQEAKICNlbmRpZgogZXJyMjoKIAlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmVndWxhdG9yX2Rpc2FibGUoZHBpLnZkZHNfZHNpX3JlZyk7CiBlcnIxOgogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7CiBlcnIwOgogCXJldHVybiByOwogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZSk7CiAKLXN0YXRpYyBpbnQgZHBpX2Rpc3BsYXlfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KLXN0YXRpYyB2b2lkIGRwaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQordm9pZCBvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpCi0JCXJldHVybjsKLQotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEKQotCQlkcGlfZGlzcGxheV9yZXN1bWUoZHNzZGV2KTsKLQotCWRzc2Rldi0+ZHJpdmVyLT5kaXNhYmxlKGRzc2Rldik7Ci0KLQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKKwlkc3NkZXYtPm1hbmFnZXItPmRpc2FibGUoZHNzZGV2LT5tYW5hZ2VyKTsKIAogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfVVNFX0RTSV9QTEwKLQlkc3Nfc2VsZWN0X2Nsa19zb3VyY2UoMCwgMCk7CisJZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKIAlkc2lfcGxsX3VuaW5pdCgpOwogCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0ZDSzIpOwogI2VuZGlmCiAKIAlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwogCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShkcGkudmRkc19kc2lfcmVnKTsKIAogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZSk7CiAKLXN0YXRpYyBpbnQgZHBpX2Rpc3BsYXlfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JRFNTREJHKCJkcGlfZGlzcGxheV9zdXNwZW5kXG4iKTsKLQotCWlmIChkc3NkZXYtPmRyaXZlci0+c3VzcGVuZCkKLQkJZHNzZGV2LT5kcml2ZXItPnN1c3BlbmQoZHNzZGV2KTsKLQotCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDApOwotCi0JZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwaV9kaXNwbGF5X3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JRFNTREJHKCJkcGlfZGlzcGxheV9yZXN1bWVcbiIpOwotCi0JZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwotCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7Ci0KLQlpZiAoZHNzZGV2LT5kcml2ZXItPnJlc3VtZSkKLQkJZHNzZGV2LT5kcml2ZXItPnJlc3VtZShkc3NkZXYpOwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwaV9zZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCit2b2lkIGRwaV9zZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCiAJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQogewogCURTU0RCRygiZHBpX3NldF90aW1pbmdzXG4iKTsKQEAgLTI4NSw4ICsyMzcsOSBAQAogCQlkaXNwY19nbyhPTUFQX0RTU19DSEFOTkVMX0xDRCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChkcGlfc2V0X3RpbWluZ3MpOwogCi1zdGF0aWMgaW50IGRwaV9jaGVja190aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKK2ludCBkcGlfY2hlY2tfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCiAJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQogewogCWJvb2wgaXNfdGZ0OwpAQCAtMzQwLDU2ICsyOTMsMjUgQEAKIAogCXJldHVybiAwOwogfQotCi1zdGF0aWMgdm9pZCBkcGlfZ2V0X3RpbWluZ3Moc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncykKLXsKLQkqdGltaW5ncyA9IGRzc2Rldi0+cGFuZWwudGltaW5nczsKLX0KLQotc3RhdGljIGludCBkcGlfZGlzcGxheV9zZXRfdXBkYXRlX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG1vZGUpCi17Ci0JaWYgKG1vZGUgPT0gT01BUF9EU1NfVVBEQVRFX01BTlVBTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobW9kZSA9PSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQpIHsKLQkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7Ci0JCWRwaS51cGRhdGVfZW5hYmxlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7Ci0JCWRwaS51cGRhdGVfZW5hYmxlZCA9IDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBlbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIGRwaV9kaXNwbGF5X2dldF91cGRhdGVfbW9kZSgKLQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJldHVybiBkcGkudXBkYXRlX2VuYWJsZWQgPyBPTUFQX0RTU19VUERBVEVfQVVUTyA6Ci0JCU9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDsKLX0KK0VYUE9SVF9TWU1CT0woZHBpX2NoZWNrX3RpbWluZ3MpOwogCiBpbnQgZHBpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJpbml0X2Rpc3BsYXlcbiIpOwogCi0JZHNzZGV2LT5lbmFibGUgPSBkcGlfZGlzcGxheV9lbmFibGU7Ci0JZHNzZGV2LT5kaXNhYmxlID0gZHBpX2Rpc3BsYXlfZGlzYWJsZTsKLQlkc3NkZXYtPnN1c3BlbmQgPSBkcGlfZGlzcGxheV9zdXNwZW5kOwotCWRzc2Rldi0+cmVzdW1lID0gZHBpX2Rpc3BsYXlfcmVzdW1lOwotCWRzc2Rldi0+c2V0X3RpbWluZ3MgPSBkcGlfc2V0X3RpbWluZ3M7Ci0JZHNzZGV2LT5jaGVja190aW1pbmdzID0gZHBpX2NoZWNrX3RpbWluZ3M7Ci0JZHNzZGV2LT5nZXRfdGltaW5ncyA9IGRwaV9nZXRfdGltaW5nczsKLQlkc3NkZXYtPnNldF91cGRhdGVfbW9kZSA9IGRwaV9kaXNwbGF5X3NldF91cGRhdGVfbW9kZTsKLQlkc3NkZXYtPmdldF91cGRhdGVfbW9kZSA9IGRwaV9kaXNwbGF5X2dldF91cGRhdGVfbW9kZTsKLQogCXJldHVybiAwOwogfQogCi1pbnQgZHBpX2luaXQodm9pZCkKK2ludCBkcGlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlkcGkudmRkc19kc2lfcmVnID0gZHNzX2dldF92ZGRzX2RzaSgpOworCQlpZiAoSVNfRVJSKGRwaS52ZGRzX2RzaV9yZWcpKSB7CisJCQlEU1NFUlIoImNhbid0IGdldCBWRERTX0RTSSByZWd1bGF0b3JcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIoZHBpLnZkZHNfZHNpX3JlZyk7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYwppbmRleCA2MTIyMTc4Li4zYWYyMDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYwpAQCAtMjcsMTEgKzI3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KQEAgLTE5OSw3ICsyMDAsNiBAQAogfTsKIAogc3RydWN0IGRzaV91cGRhdGVfcmVnaW9uIHsKLQlib29sIGRpcnR5OwogCXUxNiB4LCB5LCB3LCBoOwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRldmljZTsKIH07CkBAIC0yMjQsMjkgKzIyNCwyNSBAQAogCQllbnVtIGRzaV92Y19tb2RlIG1vZGU7CiAJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKIAkJZW51bSBmaWZvX3NpemUgZmlmb19zaXplOwotCQlpbnQgZGVzdF9wZXI7CS8qIGRlc3RpbmF0aW9uIHBlcmlwaGVyYWwgMC0zICovCiAJfSB2Y1s0XTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCBtdXRleCBidXNfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGJ1c19sb2NrOwogCiAJdW5zaWduZWQgcGxsX2xvY2tlZDsKIAogCXN0cnVjdCBjb21wbGV0aW9uIGJ0YV9jb21wbGV0aW9uOwogCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOwotCi0Jc3BpbmxvY2tfdCB1cGRhdGVfbG9jazsKLQlib29sIGZyYW1lZG9uZV9yZWNlaXZlZDsKKwlpbnQgdXBkYXRlX2NoYW5uZWw7CiAJc3RydWN0IGRzaV91cGRhdGVfcmVnaW9uIHVwZGF0ZV9yZWdpb247Ci0Jc3RydWN0IGRzaV91cGRhdGVfcmVnaW9uIGFjdGl2ZV91cGRhdGVfcmVnaW9uOwotCXN0cnVjdCBjb21wbGV0aW9uIHVwZGF0ZV9jb21wbGV0aW9uOwogCi0JZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSB1c2VyX3VwZGF0ZV9tb2RlOwotCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdXBkYXRlX21vZGU7CiAJYm9vbCB0ZV9lbmFibGVkOwotCWJvb2wgdXNlX2V4dF90ZTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBmcmFtZWRvbmVfd29yazsKKwl2b2lkICgqZnJhbWVkb25lX2NhbGxiYWNrKShpbnQsIHZvaWQgKik7CisJdm9pZCAqZnJhbWVkb25lX2RhdGE7CisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGZyYW1lZG9uZV90aW1lb3V0X3dvcms7CiAKICNpZmRlZiBEU0lfQ0FUQ0hfTUlTU0lOR19URQogCXN0cnVjdCB0aW1lcl9saXN0IHRlX3RpbWVyOwpAQCAtMjYxLDggKzI1Nyw2IEBACiAjaWZkZWYgREVCVUcKIAlrdGltZV90IHBlcmZfc2V0dXBfdGltZTsKIAlrdGltZV90IHBlcmZfc3RhcnRfdGltZTsKLQlrdGltZV90IHBlcmZfc3RhcnRfdGltZV9hdXRvOwotCWludCBwZXJmX21lYXN1cmVfZnJhbWVzOwogI2VuZGlmCiAJaW50IGRlYnVnX3JlYWQ7CiAJaW50IGRlYnVnX3dyaXRlOwpAQCAtMjk5LDE2ICsyOTMsMjEgQEAKIAogdm9pZCBkc2lfYnVzX2xvY2sodm9pZCkKIHsKLQltdXRleF9sb2NrKCZkc2kuYnVzX2xvY2spOworCWRvd24oJmRzaS5idXNfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKGRzaV9idXNfbG9jayk7CiAKIHZvaWQgZHNpX2J1c191bmxvY2sodm9pZCkKIHsKLQltdXRleF91bmxvY2soJmRzaS5idXNfbG9jayk7CisJdXAoJmRzaS5idXNfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKGRzaV9idXNfdW5sb2NrKTsKIAorc3RhdGljIGJvb2wgZHNpX2J1c19pc19sb2NrZWQodm9pZCkKK3sKKwlyZXR1cm4gZHNpLmJ1c19sb2NrLmNvdW50ID09IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHdhaXRfZm9yX2JpdF9jaGFuZ2UoY29uc3Qgc3RydWN0IGRzaV9yZWcgaWR4LCBpbnQgYml0bnVtLAogCQlpbnQgdmFsdWUpCiB7CkBAIC0zMzMsMTIgKzMzMiw2IEBACiAJZHNpLnBlcmZfc3RhcnRfdGltZSA9IGt0aW1lX2dldCgpOwogfQogCi1zdGF0aWMgdm9pZCBkc2lfcGVyZl9tYXJrX3N0YXJ0X2F1dG8odm9pZCkKLXsKLQlkc2kucGVyZl9tZWFzdXJlX2ZyYW1lcyA9IDA7Ci0JZHNpLnBlcmZfc3RhcnRfdGltZV9hdXRvID0ga3RpbWVfZ2V0KCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRzaV9wZXJmX3Nob3coY29uc3QgY2hhciAqbmFtZSkKIHsKIAlrdGltZV90IHQsIHNldHVwX3RpbWUsIHRyYW5zX3RpbWU7CkBAIC0zNDgsOSArMzQxLDYgQEAKIAlpZiAoIWRzaV9wZXJmKQogCQlyZXR1cm47CiAKLQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRCkKLQkJcmV0dXJuOwotCiAJdCA9IGt0aW1lX2dldCgpOwogCiAJc2V0dXBfdGltZSA9IGt0aW1lX3N1Yihkc2kucGVyZl9zdGFydF90aW1lLCBkc2kucGVyZl9zZXR1cF90aW1lKTsKQEAgLTM2NSw3NiArMzU1LDIzIEBACiAKIAl0b3RhbF91cyA9IHNldHVwX3VzICsgdHJhbnNfdXM7CiAKLQl0b3RhbF9ieXRlcyA9IGRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi53ICoKLQkJZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLmggKgotCQlkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24uZGV2aWNlLT5jdHJsLnBpeGVsX3NpemUgLyA4OworCXRvdGFsX2J5dGVzID0gZHNpLnVwZGF0ZV9yZWdpb24udyAqCisJCWRzaS51cGRhdGVfcmVnaW9uLmggKgorCQlkc2kudXBkYXRlX3JlZ2lvbi5kZXZpY2UtPmN0cmwucGl4ZWxfc2l6ZSAvIDg7CiAKLQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9BVVRPKSB7Ci0JCXN0YXRpYyB1MzIgc190b3RhbF90cmFuc191cywgc190b3RhbF9zZXR1cF91czsKLQkJc3RhdGljIHUzMiBzX21pbl90cmFuc191cyA9IDB4ZmZmZmZmZmYsIHNfbWluX3NldHVwX3VzOwotCQlzdGF0aWMgdTMyIHNfbWF4X3RyYW5zX3VzLCBzX21heF9zZXR1cF91czsKLQkJY29uc3QgaW50IG51bWZyYW1lcyA9IDEwMDsKLQkJa3RpbWVfdCB0b3RhbF90aW1lX2F1dG87Ci0JCXUzMiB0b3RhbF90aW1lX2F1dG9fdXM7Ci0KLQkJZHNpLnBlcmZfbWVhc3VyZV9mcmFtZXMrKzsKLQotCQlpZiAoc2V0dXBfdXMgPCBzX21pbl9zZXR1cF91cykKLQkJCXNfbWluX3NldHVwX3VzID0gc2V0dXBfdXM7Ci0KLQkJaWYgKHNldHVwX3VzID4gc19tYXhfc2V0dXBfdXMpCi0JCQlzX21heF9zZXR1cF91cyA9IHNldHVwX3VzOwotCi0JCXNfdG90YWxfc2V0dXBfdXMgKz0gc2V0dXBfdXM7Ci0KLQkJaWYgKHRyYW5zX3VzIDwgc19taW5fdHJhbnNfdXMpCi0JCQlzX21pbl90cmFuc191cyA9IHRyYW5zX3VzOwotCi0JCWlmICh0cmFuc191cyA+IHNfbWF4X3RyYW5zX3VzKQotCQkJc19tYXhfdHJhbnNfdXMgPSB0cmFuc191czsKLQotCQlzX3RvdGFsX3RyYW5zX3VzICs9IHRyYW5zX3VzOwotCi0JCWlmIChkc2kucGVyZl9tZWFzdXJlX2ZyYW1lcyA8IG51bWZyYW1lcykKLQkJCXJldHVybjsKLQotCQl0b3RhbF90aW1lX2F1dG8gPSBrdGltZV9zdWIodCwgZHNpLnBlcmZfc3RhcnRfdGltZV9hdXRvKTsKLQkJdG90YWxfdGltZV9hdXRvX3VzID0gKHUzMilrdGltZV90b191cyh0b3RhbF90aW1lX2F1dG8pOwotCi0JCXByaW50ayhLRVJOX0lORk8gIkRTSSglcyk6ICV1IGZwcywgc2V0dXAgJXUvJXUvJXUsICIKLQkJCQkidHJhbnMgJXUvJXUvJXVcbiIsCi0JCQkJbmFtZSwKLQkJCQkxMDAwICogMTAwMCAqIG51bWZyYW1lcyAvIHRvdGFsX3RpbWVfYXV0b191cywKLQkJCQlzX21pbl9zZXR1cF91cywKLQkJCQlzX21heF9zZXR1cF91cywKLQkJCQlzX3RvdGFsX3NldHVwX3VzIC8gbnVtZnJhbWVzLAotCQkJCXNfbWluX3RyYW5zX3VzLAotCQkJCXNfbWF4X3RyYW5zX3VzLAotCQkJCXNfdG90YWxfdHJhbnNfdXMgLyBudW1mcmFtZXMpOwotCi0JCXNfdG90YWxfc2V0dXBfdXMgPSAwOwotCQlzX21pbl9zZXR1cF91cyA9IDB4ZmZmZmZmZmY7Ci0JCXNfbWF4X3NldHVwX3VzID0gMDsKLQkJc190b3RhbF90cmFuc191cyA9IDA7Ci0JCXNfbWluX3RyYW5zX3VzID0gMHhmZmZmZmZmZjsKLQkJc19tYXhfdHJhbnNfdXMgPSAwOwotCQlkc2lfcGVyZl9tYXJrX3N0YXJ0X2F1dG8oKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJEU0koJXMpOiAldSB1cyArICV1IHVzID0gJXUgdXMgKCV1SHopLCAiCi0JCQkJIiV1IGJ5dGVzLCAldSBrYnl0ZXMvc2VjXG4iLAotCQkJCW5hbWUsCi0JCQkJc2V0dXBfdXMsCi0JCQkJdHJhbnNfdXMsCi0JCQkJdG90YWxfdXMsCi0JCQkJMTAwMCoxMDAwIC8gdG90YWxfdXMsCi0JCQkJdG90YWxfYnl0ZXMsCi0JCQkJdG90YWxfYnl0ZXMgKiAxMDAwIC8gdG90YWxfdXMpOwotCX0KKwlwcmludGsoS0VSTl9JTkZPICJEU0koJXMpOiAldSB1cyArICV1IHVzID0gJXUgdXMgKCV1SHopLCAiCisJCQkiJXUgYnl0ZXMsICV1IGtieXRlcy9zZWNcbiIsCisJCQluYW1lLAorCQkJc2V0dXBfdXMsCisJCQl0cmFuc191cywKKwkJCXRvdGFsX3VzLAorCQkJMTAwMCoxMDAwIC8gdG90YWxfdXMsCisJCQl0b3RhbF9ieXRlcywKKwkJCXRvdGFsX2J5dGVzICogMTAwMCAvIHRvdGFsX3VzKTsKIH0KICNlbHNlCiAjZGVmaW5lIGRzaV9wZXJmX21hcmtfc2V0dXAoKQogI2RlZmluZSBkc2lfcGVyZl9tYXJrX3N0YXJ0KCkKLSNkZWZpbmUgZHNpX3BlcmZfbWFya19zdGFydF9hdXRvKCkKICNkZWZpbmUgZHNpX3BlcmZfc2hvdyh4KQogI2VuZGlmCiAKQEAgLTc3NCw3ICs3MTEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgcjsKIAotCWlmIChkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gMCkgeworCWlmIChkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEspIHsKIAkJLyogRFNJIEZDTEsgc291cmNlIGlzIERTUzFfQUxXT05fRkNLLCB3aGljaCBpcyBkc3MxX2ZjayAqLwogCQlyID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX0ZDSzEpOwogCX0gZWxzZSB7CkBAIC0xMjI3LDE3ICsxMTY0LDE5IEBACiAJc2VxX3ByaW50ZihzLAkiZHNpMV9wbGxfZmNrXHQlLTE2bHVyZWdtMyAldVx0KCVzKVxuIiwKIAkJCWNpbmZvLT5kc2kxX3BsbF9mY2xrLAogCQkJY2luZm8tPnJlZ20zLAotCQkJZHNzX2dldF9kaXNwY19jbGtfc291cmNlKCkgPT0gMCA/ICJvZmYiIDogIm9uIik7CisJCQlkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKSA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyA/CisJCQkib2ZmIiA6ICJvbiIpOwogCiAJc2VxX3ByaW50ZihzLAkiZHNpMl9wbGxfZmNrXHQlLTE2bHVyZWdtNCAldVx0KCVzKVxuIiwKIAkJCWNpbmZvLT5kc2kyX3BsbF9mY2xrLAogCQkJY2luZm8tPnJlZ200LAotCQkJZHNzX2dldF9kc2lfY2xrX3NvdXJjZSgpID09IDAgPyAib2ZmIiA6ICJvbiIpOworCQkJZHNzX2dldF9kc2lfY2xrX3NvdXJjZSgpID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLID8KKwkJCSJvZmYiIDogIm9uIik7CiAKIAlzZXFfcHJpbnRmKHMsCSItIERTSSAtXG4iKTsKIAogCXNlcV9wcmludGYocywJImRzaSBmY2xrIHNvdXJjZSA9ICVzXG4iLAotCQkJZHNzX2dldF9kc2lfY2xrX3NvdXJjZSgpID09IDAgPworCQkJZHNzX2dldF9kc2lfY2xrX3NvdXJjZSgpID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLID8KIAkJCSJkc3MxX2Fsd29uX2ZjbGsiIDogImRzaTJfcGxsX2ZjbGsiKTsKIAogCXNlcV9wcmludGYocywJIkRTSV9GQ0xLXHQlbHVcbiIsIGRzaV9mY2xrX3JhdGUoKSk7CkBAIC0xNzU2LDI5ICsxNjk1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV92Y19wcmludF9zdGF0dXMoaW50IGNoYW5uZWwpCi17Ci0JdTMyIHI7Ci0KLQlyID0gZHNpX3JlYWRfcmVnKERTSV9WQ19DVFJMKGNoYW5uZWwpKTsKLQlEU1NEQkcoInZjICVkOiBUWF9GSUZPX05PVF9FTVBUWSAlZCwgQlRBX0VOICVkLCBWQ19CVVNZICVkLCAiCi0JCQkiVFhfRklGT19GVUxMICVkLCBSWF9GSUZPX05PVF9FTVBUWSAlZCwgIiwKLQkJCWNoYW5uZWwsCi0JCQlGTERfR0VUKHIsIDUsIDUpLAotCQkJRkxEX0dFVChyLCA2LCA2KSwKLQkJCUZMRF9HRVQociwgMTUsIDE1KSwKLQkJCUZMRF9HRVQociwgMTYsIDE2KSwKLQkJCUZMRF9HRVQociwgMjAsIDIwKSk7Ci0KLQlyID0gZHNpX3JlYWRfcmVnKERTSV9UWF9GSUZPX1ZDX0VNUFRJTkVTUyk7Ci0JRFNTREJHKCJFTVBUSU5FU1MgJWRcbiIsIChyID4+ICg4ICogY2hhbm5lbCkpICYgMHhmZik7Ci19Ci0KIHN0YXRpYyBpbnQgZHNpX3ZjX2VuYWJsZShpbnQgY2hhbm5lbCwgYm9vbCBlbmFibGUpCiB7Ci0JaWYgKGRzaS51cGRhdGVfbW9kZSAhPSBPTUFQX0RTU19VUERBVEVfQVVUTykKLQkJRFNTREJHKCJkc2lfdmNfZW5hYmxlIGNoYW5uZWwgJWQsIGVuYWJsZSAlZFxuIiwKLQkJCQljaGFubmVsLCBlbmFibGUpOworCURTU0RCRygiZHNpX3ZjX2VuYWJsZSBjaGFubmVsICVkLCBlbmFibGUgJWRcbiIsCisJCQljaGFubmVsLCBlbmFibGUpOwogCiAJZW5hYmxlID0gZW5hYmxlID8gMSA6IDA7CiAKQEAgLTE4NTksMTAgKzE3NzksMTIgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBkc2lfdmNfZW5hYmxlX2hzKGludCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3ZvaWQgb21hcGRzc19kc2lfdmNfZW5hYmxlX2hzKGludCBjaGFubmVsLCBib29sIGVuYWJsZSkKIHsKIAlEU1NEQkcoImRzaV92Y19lbmFibGVfaHMoJWQsICVkKVxuIiwgY2hhbm5lbCwgZW5hYmxlKTsKIAorCVdBUk5fT04oIWRzaV9idXNfaXNfbG9ja2VkKCkpOworCiAJZHNpX3ZjX2VuYWJsZShjaGFubmVsLCAwKTsKIAlkc2lfaWZfZW5hYmxlKDApOwogCkBAIC0xODczLDYgKzE3OTUsNyBAQAogCiAJZHNpX2ZvcmNlX3R4X3N0b3BfbW9kZV9pbygpOwogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RzaV92Y19lbmFibGVfaHMpOwogCiBzdGF0aWMgdm9pZCBkc2lfdmNfZmx1c2hfbG9uZ19kYXRhKGludCBjaGFubmVsKQogewpAQCAtMTk1NSwxMSArMTg3OCwxMCBAQAogCiBzdGF0aWMgaW50IGRzaV92Y19zZW5kX2J0YShpbnQgY2hhbm5lbCkKIHsKLQlpZiAoZHNpLnVwZGF0ZV9tb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPICYmCi0JCQkoZHNpLmRlYnVnX3dyaXRlIHx8IGRzaS5kZWJ1Z19yZWFkKSkKKwlpZiAoZHNpLmRlYnVnX3dyaXRlIHx8IGRzaS5kZWJ1Z19yZWFkKQogCQlEU1NEQkcoImRzaV92Y19zZW5kX2J0YSAlZFxuIiwgY2hhbm5lbCk7CiAKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRzaS5idXNfbG9jaykpOworCVdBUk5fT04oIWRzaV9idXNfaXNfbG9ja2VkKCkpOwogCiAJaWYgKFJFR19HRVQoRFNJX1ZDX0NUUkwoY2hhbm5lbCksIDIwLCAyMCkpIHsJLyogUlhfRklGT19OT1RfRU1QVFkgKi8KIAkJRFNTRVJSKCJyeCBmaWZvIG5vdCBlbXB0eSB3aGVuIHNlbmRpbmcgQlRBLCBkdW1waW5nIGRhdGE6XG4iKTsKQEAgLTIwMTAsMTAgKzE5MzIsOSBAQAogCXUzMiB2YWw7CiAJdTggZGF0YV9pZDsKIAotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZHNpLmJ1c19sb2NrKSk7CisJV0FSTl9PTighZHNpX2J1c19pc19sb2NrZWQoKSk7CiAKLQkvKmRhdGFfaWQgPSBkYXRhX3R5cGUgfCBjaGFubmVsIDw8IDY7ICovCi0JZGF0YV9pZCA9IGRhdGFfdHlwZSB8IGRzaS52Y1tjaGFubmVsXS5kZXN0X3BlciA8PCA2OworCWRhdGFfaWQgPSBkYXRhX3R5cGUgfCBjaGFubmVsIDw8IDY7CiAKIAl2YWwgPSBGTERfVkFMKGRhdGFfaWQsIDcsIDApIHwgRkxEX1ZBTChsZW4sIDIzLCA4KSB8CiAJCUZMRF9WQUwoZWNjLCAzMSwgMjQpOwpAQCAtMjA1NiwxMyArMTk3NywxMCBAQAogCiAJZHNpX3ZjX3dyaXRlX2xvbmdfaGVhZGVyKGNoYW5uZWwsIGRhdGFfdHlwZSwgbGVuLCBlY2MpOwogCi0JLypkc2lfdmNfcHJpbnRfc3RhdHVzKDApOyAqLwotCiAJcCA9IGRhdGE7CiAJZm9yIChpID0gMDsgaSA8IGxlbiA+PiAyOyBpKyspIHsKIAkJaWYgKGRzaS5kZWJ1Z193cml0ZSkKIAkJCURTU0RCRygiXHRzZW5kaW5nIGZ1bGwgcGFja2V0ICVkXG4iLCBpKTsKLQkJLypkc2lfdmNfcHJpbnRfc3RhdHVzKDApOyAqLwogCiAJCWIxID0gKnArKzsKIAkJYjIgPSAqcCsrOwpAQCAtMjEwNSw3ICsyMDIzLDcgQEAKIAl1MzIgcjsKIAl1OCBkYXRhX2lkOwogCi0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkc2kuYnVzX2xvY2spKTsKKwlXQVJOX09OKCFkc2lfYnVzX2lzX2xvY2tlZCgpKTsKIAogCWlmIChkc2kuZGVidWdfd3JpdGUpCiAJCURTU0RCRygiZHNpX3ZjX3NlbmRfc2hvcnQoY2glZCwgZHQgJSN4LCBiMSAlI3gsIGIyICUjeClcbiIsCkBAIC0yMTE5LDcgKzIwMzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhX2lkID0gZGF0YV90eXBlIHwgZHNpLnZjW2NoYW5uZWxdLmRlc3RfcGVyIDw8IDY7CisJZGF0YV9pZCA9IGRhdGFfdHlwZSB8IGNoYW5uZWwgPDwgNjsKIAogCXIgPSAoZGF0YV9pZCA8PCAwKSB8IChkYXRhIDw8IDgpIHwgKGVjYyA8PCAyNCk7CiAKQEAgLTIxNjMsMTQgKzIwODEsMzUgQEAKIAogCXIgPSBkc2lfdmNfZGNzX3dyaXRlX25vc3luYyhjaGFubmVsLCBkYXRhLCBsZW4pOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBlcnI7CiAKIAlyID0gZHNpX3ZjX3NlbmRfYnRhX3N5bmMoY2hhbm5lbCk7CisJaWYgKHIpCisJCWdvdG8gZXJyOwogCisJcmV0dXJuIDA7CitlcnI6CisJRFNTRVJSKCJkc2lfdmNfZGNzX3dyaXRlKGNoICVkLCBjbWQgMHglMDJ4LCBsZW4gJWQpIGZhaWxlZFxuIiwKKwkJCWNoYW5uZWwsIGRhdGFbMF0sIGxlbik7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MKGRzaV92Y19kY3Nfd3JpdGUpOwogCitpbnQgZHNpX3ZjX2Rjc193cml0ZV8wKGludCBjaGFubmVsLCB1OCBkY3NfY21kKQoreworCXJldHVybiBkc2lfdmNfZGNzX3dyaXRlKGNoYW5uZWwsICZkY3NfY21kLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woZHNpX3ZjX2Rjc193cml0ZV8wKTsKKworaW50IGRzaV92Y19kY3Nfd3JpdGVfMShpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggcGFyYW0pCit7CisJdTggYnVmWzJdOworCWJ1ZlswXSA9IGRjc19jbWQ7CisJYnVmWzFdID0gcGFyYW07CisJcmV0dXJuIGRzaV92Y19kY3Nfd3JpdGUoY2hhbm5lbCwgYnVmLCAyKTsKK30KK0VYUE9SVF9TWU1CT0woZHNpX3ZjX2Rjc193cml0ZV8xKTsKKwogaW50IGRzaV92Y19kY3NfcmVhZChpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAl1MzIgdmFsOwpAQCAtMjE4MiwxNiArMjEyMSwxNyBAQAogCiAJciA9IGRzaV92Y19zZW5kX3Nob3J0KGNoYW5uZWwsIERTSV9EVF9EQ1NfUkVBRCwgZGNzX2NtZCwgMCk7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGVycjsKIAogCXIgPSBkc2lfdmNfc2VuZF9idGFfc3luYyhjaGFubmVsKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZXJyOwogCiAJLyogUlhfRklGT19OT1RfRU1QVFkgKi8KIAlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMjAsIDIwKSA9PSAwKSB7CiAJCURTU0VSUigiUlggZmlmbyBlbXB0eSB3aGVuIHRyeWluZyB0byByZWFkLlxuIik7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byBlcnI7CiAJfQogCiAJdmFsID0gZHNpX3JlYWRfcmVnKERTSV9WQ19TSE9SVF9QQUNLRVRfSEVBREVSKGNoYW5uZWwpKTsKQEAgLTIyMDEsMTUgKzIxNDEsMTggQEAKIAlpZiAoZHQgPT0gRFNJX0RUX1JYX0FDS19XSVRIX0VSUikgewogCQl1MTYgZXJyID0gRkxEX0dFVCh2YWwsIDIzLCA4KTsKIAkJZHNpX3Nob3dfcnhfYWNrX3dpdGhfZXJyKGVycik7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byBlcnI7CiAKIAl9IGVsc2UgaWYgKGR0ID09IERTSV9EVF9SWF9TSE9SVF9SRUFEXzEpIHsKIAkJdTggZGF0YSA9IEZMRF9HRVQodmFsLCAxNSwgOCk7CiAJCWlmIChkc2kuZGVidWdfcmVhZCkKIAkJCURTU0RCRygiXHREQ1Mgc2hvcnQgcmVzcG9uc2UsIDEgYnl0ZTogJTAyeFxuIiwgZGF0YSk7CiAKLQkJaWYgKGJ1ZmxlbiA8IDEpCi0JCQlyZXR1cm4gLUVJTzsKKwkJaWYgKGJ1ZmxlbiA8IDEpIHsKKwkJCXIgPSAtRUlPOworCQkJZ290byBlcnI7CisJCX0KIAogCQlidWZbMF0gPSBkYXRhOwogCkBAIC0yMjE5LDggKzIxNjIsMTAgQEAKIAkJaWYgKGRzaS5kZWJ1Z19yZWFkKQogCQkJRFNTREJHKCJcdERDUyBzaG9ydCByZXNwb25zZSwgMiBieXRlOiAlMDR4XG4iLCBkYXRhKTsKIAotCQlpZiAoYnVmbGVuIDwgMikKLQkJCXJldHVybiAtRUlPOworCQlpZiAoYnVmbGVuIDwgMikgeworCQkJciA9IC1FSU87CisJCQlnb3RvIGVycjsKKwkJfQogCiAJCWJ1ZlswXSA9IGRhdGEgJiAweGZmOwogCQlidWZbMV0gPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CkBAIC0yMjMyLDggKzIxNzcsMTAgQEAKIAkJaWYgKGRzaS5kZWJ1Z19yZWFkKQogCQkJRFNTREJHKCJcdERDUyBsb25nIHJlc3BvbnNlLCBsZW4gJWRcbiIsIGxlbik7CiAKLQkJaWYgKGxlbiA+IGJ1ZmxlbikKLQkJCXJldHVybiAtRUlPOworCQlpZiAobGVuID4gYnVmbGVuKSB7CisJCQlyID0gLUVJTzsKKwkJCWdvdG8gZXJyOworCQl9CiAKIAkJLyogdHdvIGJ5dGUgY2hlY2tzdW0gZW5kcyB0aGUgcGFja2V0LCBub3QgaW5jbHVkZWQgaW4gbGVuICovCiAJCWZvciAodyA9IDA7IHcgPCBsZW4gKyAyOykgewpAQCAtMjI1NSwxNCArMjIwMiw1MiBAQAogCQl9CiAKIAkJcmV0dXJuIGxlbjsKLQogCX0gZWxzZSB7CiAJCURTU0VSUigiXHR1bmtub3duIGRhdGF0eXBlIDB4JTAyeFxuIiwgZHQpOwotCQlyZXR1cm4gLUVJTzsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyOwogCX0KKworCUJVRygpOworZXJyOgorCURTU0VSUigiZHNpX3ZjX2Rjc19yZWFkKGNoICVkLCBjbWQgMHglMDJ4KSBmYWlsZWRcbiIsCisJCQljaGFubmVsLCBkY3NfY21kKTsKKwlyZXR1cm4gcjsKKwogfQogRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3JlYWQpOwogCitpbnQgZHNpX3ZjX2Rjc19yZWFkXzEoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQsIHU4ICpkYXRhKQoreworCWludCByOworCisJciA9IGRzaV92Y19kY3NfcmVhZChjaGFubmVsLCBkY3NfY21kLCBkYXRhLCAxKTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAociAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3JlYWRfMSk7CisKK2ludCBkc2lfdmNfZGNzX3JlYWRfMihpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTE2ICpkYXRhKQoreworCWludCByOworCisJciA9IGRzaV92Y19kY3NfcmVhZChjaGFubmVsLCBkY3NfY21kLCAodTggKilkYXRhLCAyKTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAociAhPSAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3JlYWRfMik7CiAKIGludCBkc2lfdmNfc2V0X21heF9yeF9wYWNrZXRfc2l6ZShpbnQgY2hhbm5lbCwgdTE2IGxlbikKIHsKQEAgLTI0OTEsMTUgKzI0NzYsMTUgQEAKIAl1MzIgcjsKIAlpbnQgYnVzd2lkdGggPSAwOwogCi0JZHNpX2NvbmZpZ190eF9maWZvKERTSV9GSUZPX1NJWkVfMTI4LAotCQkJRFNJX0ZJRk9fU0laRV8wLAotCQkJRFNJX0ZJRk9fU0laRV8wLAotCQkJRFNJX0ZJRk9fU0laRV8wKTsKKwlkc2lfY29uZmlnX3R4X2ZpZm8oRFNJX0ZJRk9fU0laRV8zMiwKKwkJCURTSV9GSUZPX1NJWkVfMzIsCisJCQlEU0lfRklGT19TSVpFXzMyLAorCQkJRFNJX0ZJRk9fU0laRV8zMik7CiAKLQlkc2lfY29uZmlnX3J4X2ZpZm8oRFNJX0ZJRk9fU0laRV8xMjgsCi0JCQlEU0lfRklGT19TSVpFXzAsCi0JCQlEU0lfRklGT19TSVpFXzAsCi0JCQlEU0lfRklGT19TSVpFXzApOworCWRzaV9jb25maWdfcnhfZmlmbyhEU0lfRklGT19TSVpFXzMyLAorCQkJRFNJX0ZJRk9fU0laRV8zMiwKKwkJCURTSV9GSUZPX1NJWkVfMzIsCisJCQlEU0lfRklGT19TSVpFXzMyKTsKIAogCS8qIFhYWCB3aGF0IHZhbHVlcyBmb3IgdGhlIHRpbWVvdXRzPyAqLwogCWRzaV9zZXRfc3RvcF9zdGF0ZV9jb3VudGVyKDEwMDApOwpAQCAtMjUzNywxMiArMjUyMiw5IEBACiAJZHNpX3dyaXRlX3JlZyhEU0lfQ1RSTCwgcik7CiAKIAlkc2lfdmNfaW5pdGlhbF9jb25maWcoMCk7Ci0KLQkvKiBzZXQgYWxsIHZjIHRhcmdldHMgdG8gcGVyaXBoZXJhbCAwICovCi0JZHNpLnZjWzBdLmRlc3RfcGVyID0gMDsKLQlkc2kudmNbMV0uZGVzdF9wZXIgPSAwOwotCWRzaS52Y1syXS5kZXN0X3BlciA9IDA7Ci0JZHNpLnZjWzNdLmRlc3RfcGVyID0gMDsKKwlkc2lfdmNfaW5pdGlhbF9jb25maWcoMSk7CisJZHNpX3ZjX2luaXRpYWxfY29uZmlnKDIpOworCWRzaV92Y19pbml0aWFsX2NvbmZpZygzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc3NywxOCArMjc1OSwxNiBAQAogCXVuc2lnbmVkIHBhY2tldF9wYXlsb2FkOwogCXVuc2lnbmVkIHBhY2tldF9sZW47CiAJdTMyIGw7Ci0JYm9vbCB1c2VfdGVfdHJpZ2dlcjsKLQljb25zdCB1bnNpZ25lZCBjaGFubmVsID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFubmVsID0gZHNpLnVwZGF0ZV9jaGFubmVsOwogCS8qIGxpbmUgYnVmZmVyIGlzIDEwMjQgeCAyNGJpdHMgKi8KIAkvKiBYWFg6IGZvciBzb21lIHJlYXNvbiB1c2luZyBmdWxsIGJ1ZmZlciBzaXplIGNhdXNlcyBjb25zaWRlcmFibGUgVFgKIAkgKiBzbG93ZG93biB3aXRoIHVwZGF0ZSBzaXplcyB0aGF0IGZpbGwgdGhlIHdob2xlIGJ1ZmZlciAqLwogCWNvbnN0IHVuc2lnbmVkIGxpbmVfYnVmX3NpemUgPSAxMDIzICogMzsKIAotCXVzZV90ZV90cmlnZ2VyID0gZHNpLnRlX2VuYWJsZWQgJiYgIWRzaS51c2VfZXh0X3RlOworCURTU0RCRygiZHNpX3VwZGF0ZV9zY3JlZW5fZGlzcGMoJWQsJWQgJWR4JWQpXG4iLAorCQkJeCwgeSwgdywgaCk7CiAKLQlpZiAoZHNpLnVwZGF0ZV9tb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQotCQlEU1NEQkcoImRzaV91cGRhdGVfc2NyZWVuX2Rpc3BjKCVkLCVkICVkeCVkKVxuIiwKLQkJCQl4LCB5LCB3LCBoKTsKKwlkc2lfdmNfY29uZmlnX3ZwKGNoYW5uZWwpOwogCiAJYnl0ZXNwcAk9IGRzc2Rldi0+Y3RybC5waXhlbF9zaXplIC8gODsKIAlieXRlc3BsID0gdyAqIGJ5dGVzcHA7CkBAIC0yODA4LDE1ICsyNzg4LDEyIEBACiAJaWYgKGJ5dGVzcGYgJSBwYWNrZXRfcGF5bG9hZCkKIAkJdG90YWxfbGVuICs9IChieXRlc3BmICUgcGFja2V0X3BheWxvYWQpICsgMTsKIAotCWlmICgwKQotCQlkc2lfdmNfcHJpbnRfc3RhdHVzKDEpOwotCiAJbCA9IEZMRF9WQUwodG90YWxfbGVuLCAyMywgMCk7IC8qIFRFX1NJWkUgKi8KIAlkc2lfd3JpdGVfcmVnKERTSV9WQ19URShjaGFubmVsKSwgbCk7CiAKIAlkc2lfdmNfd3JpdGVfbG9uZ19oZWFkZXIoY2hhbm5lbCwgRFNJX0RUX0RDU19MT05HX1dSSVRFLCBwYWNrZXRfbGVuLCAwKTsKIAotCWlmICh1c2VfdGVfdHJpZ2dlcikKKwlpZiAoZHNpLnRlX2VuYWJsZWQpCiAJCWwgPSBGTERfTU9EKGwsIDEsIDMwLCAzMCk7IC8qIFRFX0VOICovCiAJZWxzZQogCQlsID0gRkxEX01PRChsLCAxLCAzMSwgMzEpOyAvKiBURV9TVEFSVCAqLwpAQCAtMjgzMCw5ICsyODA3LDE0IEBACiAJICovCiAJZGlzcGNfZGlzYWJsZV9zaWRsZSgpOwogCisJZHNpX3BlcmZfbWFya19zdGFydCgpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkc2kuZnJhbWVkb25lX3RpbWVvdXRfd29yaywKKwkJCW1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CisKIAlkc3Nfc3RhcnRfdXBkYXRlKGRzc2Rldik7CiAKLQlpZiAodXNlX3RlX3RyaWdnZXIpIHsKKwlpZiAoZHNpLnRlX2VuYWJsZWQpIHsKIAkJLyogZGlzYWJsZSBMUF9SWF9UTywgc28gdGhhdCB3ZSBjYW4gcmVjZWl2ZSBURS4gIFRpbWUgdG8gd2FpdAogCQkgKiBmb3IgVEUgaXMgbG9uZ2VyIHRoYW4gdGhlIHRpbWVyIGFsbG93cyAqLwogCQlSRUdfRkxEX01PRChEU0lfVElNSU5HMiwgMCwgMTUsIDE1KTsgLyogTFBfUlhfVE8gKi8KQEAgLTI4NTIsMTEwICsyODM0LDE3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZHNpX2ZyYW1lZG9uZV9pcnFfY2FsbGJhY2sodm9pZCAqZGF0YSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX3RpbWVvdXRfd29ya19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JLyogTm90ZTogV2UgZ2V0IEZSQU1FRE9ORSB3aGVuIERJU1BDIGhhcyBmaW5pc2hlZCBzZW5kaW5nIHBpeGVscyBhbmQKLQkgKiB0dXJucyBpdHNlbGYgb2ZmLiBIb3dldmVyLCBEU0kgc3RpbGwgaGFzIHRoZSBwaXhlbHMgaW4gaXRzIGJ1ZmZlcnMsCi0JICogYW5kIGlzIHNlbmRpbmcgdGhlIGRhdGEuCi0JICovCisJaW50IHI7CisJY29uc3QgaW50IGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CisKKwlEU1NFUlIoIkZyYW1lZG9uZSBub3QgcmVjZWl2ZWQgZm9yIDI1MG1zIVxuIik7CiAKIAkvKiBTSURMRU1PREUgYmFjayB0byBzbWFydC1pZGxlICovCiAJZGlzcGNfZW5hYmxlX3NpZGxlKCk7CiAKLQlkc2kuZnJhbWVkb25lX3JlY2VpdmVkID0gdHJ1ZTsKLQl3YWtlX3VwKCZkc2kud2FpdHF1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3NldF91cGRhdGVfcmVnaW9uKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCi17Ci0Jc3Bpbl9sb2NrKCZkc2kudXBkYXRlX2xvY2spOwotCWlmIChkc2kudXBkYXRlX3JlZ2lvbi5kaXJ0eSkgewotCQlkc2kudXBkYXRlX3JlZ2lvbi54ID0gbWluKHgsIGRzaS51cGRhdGVfcmVnaW9uLngpOwotCQlkc2kudXBkYXRlX3JlZ2lvbi55ID0gbWluKHksIGRzaS51cGRhdGVfcmVnaW9uLnkpOwotCQlkc2kudXBkYXRlX3JlZ2lvbi53ID0gbWF4KHcsIGRzaS51cGRhdGVfcmVnaW9uLncpOwotCQlkc2kudXBkYXRlX3JlZ2lvbi5oID0gbWF4KGgsIGRzaS51cGRhdGVfcmVnaW9uLmgpOwotCX0gZWxzZSB7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLnggPSB4OwotCQlkc2kudXBkYXRlX3JlZ2lvbi55ID0geTsKLQkJZHNpLnVwZGF0ZV9yZWdpb24udyA9IHc7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLmggPSBoOwotCX0KLQotCWRzaS51cGRhdGVfcmVnaW9uLmRldmljZSA9IGRzc2RldjsKLQlkc2kudXBkYXRlX3JlZ2lvbi5kaXJ0eSA9IHRydWU7Ci0KLQlzcGluX3VubG9jaygmZHNpLnVwZGF0ZV9sb2NrKTsKLQotfQotCi1zdGF0aWMgaW50IGRzaV9zZXRfdXBkYXRlX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG1vZGUpCi17Ci0JaW50IHIgPSAwOwotCWludCBpOwotCi0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkc2kuYnVzX2xvY2spKTsKLQotCWlmIChkc2kudXBkYXRlX21vZGUgIT0gbW9kZSkgewotCQlkc2kudXBkYXRlX21vZGUgPSBtb2RlOwotCi0JCS8qIE1hcmsgdGhlIG92ZXJsYXlzIGRpcnR5LCBhbmQgZG8gYXBwbHkoKSwgc28gdGhhdCB3ZSBnZXQgdGhlCi0JCSAqIG92ZXJsYXlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgYWZ0ZXIgdXBkYXRlIG1vZGUgY2hhbmdlLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgb21hcF9kc3NfZ2V0X251bV9vdmVybGF5cygpOyArK2kpIHsKLQkJCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92bDsKLQkJCW92bCA9IG9tYXBfZHNzX2dldF9vdmVybGF5KGkpOwotCQkJaWYgKG92bC0+bWFuYWdlciA9PSBkc3NkZXYtPm1hbmFnZXIpCi0JCQkJb3ZsLT5pbmZvX2RpcnR5ID0gdHJ1ZTsKLQkJfQotCi0JCXIgPSBkc3NkZXYtPm1hbmFnZXItPmFwcGx5KGRzc2Rldi0+bWFuYWdlcik7Ci0KLQkJaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUgJiYKLQkJCQltb2RlID09IE9NQVBfRFNTX1VQREFURV9BVVRPKSB7Ci0JCQl1MTYgdywgaDsKLQotCQkJRFNTREJHKCJzdGFydGluZyBhdXRvIHVwZGF0ZVxuIik7Ci0KLQkJCWRzc2Rldi0+Z2V0X3Jlc29sdXRpb24oZHNzZGV2LCAmdywgJmgpOwotCi0JCQlkc2lfc2V0X3VwZGF0ZV9yZWdpb24oZHNzZGV2LCAwLCAwLCB3LCBoKTsKLQotCQkJZHNpX3BlcmZfbWFya19zdGFydF9hdXRvKCk7Ci0KLQkJCXdha2VfdXAoJmRzaS53YWl0cXVldWUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3NldF90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQotewotCWludCByID0gMDsKLQotCWlmIChkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKSB7Ci0JCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKGRzc2RldiwgZW5hYmxlKTsKLQkJLyogWFhYIGZvciBzb21lIHJlYXNvbiwgRFNJIFRFIGJyZWFrcyBpZiB3ZSBkb24ndCB3YWl0IGhlcmUuCi0JCSAqIFBhbmVsIGJ1Zz8gTmVlZHMgbW9yZSBzdHVkeWluZyAqLwotCQltc2xlZXAoMTAwKTsKLQl9Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2hhbmRsZV9mcmFtZWRvbmUodm9pZCkKLXsKLQlpbnQgcjsKLQljb25zdCBpbnQgY2hhbm5lbCA9IDA7Ci0JYm9vbCB1c2VfdGVfdHJpZ2dlcjsKLQotCXVzZV90ZV90cmlnZ2VyID0gZHNpLnRlX2VuYWJsZWQgJiYgIWRzaS51c2VfZXh0X3RlOwotCi0JaWYgKGRzaS51cGRhdGVfbW9kZSAhPSBPTUFQX0RTU19VUERBVEVfQVVUTykKLQkJRFNTREJHKCJGUkFNRURPTkVcbiIpOwotCi0JaWYgKHVzZV90ZV90cmlnZ2VyKSB7CisJaWYgKGRzaS50ZV9lbmFibGVkKSB7CiAJCS8qIGVuYWJsZSBMUF9SWF9UTyBhZ2FpbiBhZnRlciB0aGUgVEUgKi8KIAkJUkVHX0ZMRF9NT0QoRFNJX1RJTUlORzIsIDEsIDE1LCAxNSk7IC8qIExQX1JYX1RPICovCiAJfQpAQCAtMjk3Niw3ICsyODY1LDU0IEBACiAJLyogUlhfRklGT19OT1RfRU1QVFkgKi8KIAlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMjAsIDIwKSkgewogCQlEU1NFUlIoIlJlY2VpdmVkIGVycm9yIGR1cmluZyBmcmFtZSB0cmFuc2ZlcjpcbiIpOwotCQlkc2lfdmNfZmx1c2hfcmVjZWl2ZV9kYXRhKDApOworCQlkc2lfdmNfZmx1c2hfcmVjZWl2ZV9kYXRhKGNoYW5uZWwpOworCX0KKworCWRzaS5mcmFtZWRvbmVfY2FsbGJhY2soLUVUSU1FRE9VVCwgZHNpLmZyYW1lZG9uZV9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2ZyYW1lZG9uZV9pcnFfY2FsbGJhY2sodm9pZCAqZGF0YSwgdTMyIG1hc2spCit7CisJLyogTm90ZTogV2UgZ2V0IEZSQU1FRE9ORSB3aGVuIERJU1BDIGhhcyBmaW5pc2hlZCBzZW5kaW5nIHBpeGVscyBhbmQKKwkgKiB0dXJucyBpdHNlbGYgb2ZmLiBIb3dldmVyLCBEU0kgc3RpbGwgaGFzIHRoZSBwaXhlbHMgaW4gaXRzIGJ1ZmZlcnMsCisJICogYW5kIGlzIHNlbmRpbmcgdGhlIGRhdGEuCisJICovCisKKwkvKiBTSURMRU1PREUgYmFjayB0byBzbWFydC1pZGxlICovCisJZGlzcGNfZW5hYmxlX3NpZGxlKCk7CisKKwlzY2hlZHVsZV93b3JrKCZkc2kuZnJhbWVkb25lX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBkc2lfaGFuZGxlX2ZyYW1lZG9uZSh2b2lkKQoreworCWludCByOworCWNvbnN0IGludCBjaGFubmVsID0gZHNpLnVwZGF0ZV9jaGFubmVsOworCisJRFNTREJHKCJGUkFNRURPTkVcbiIpOworCisJaWYgKGRzaS50ZV9lbmFibGVkKSB7CisJCS8qIGVuYWJsZSBMUF9SWF9UTyBhZ2FpbiBhZnRlciB0aGUgVEUgKi8KKwkJUkVHX0ZMRF9NT0QoRFNJX1RJTUlORzIsIDEsIDE1LCAxNSk7IC8qIExQX1JYX1RPICovCisJfQorCisJLyogU2VuZCBCVEEgYWZ0ZXIgdGhlIGZyYW1lLiBXZSBuZWVkIHRoaXMgZm9yIHRoZSBURSB0byB3b3JrLCBhcyBURQorCSAqIHRyaWdnZXIgaXMgb25seSBzZW50IGZvciBCVEFzIHdpdGhvdXQgcHJlY2VkaW5nIHBhY2tldC4gVGh1cyB3ZSBuZWVkCisJICogdG8gQlRBIGFmdGVyIHRoZSBwaXhlbCBwYWNrZXRzIHNvIHRoYXQgbmV4dCBCVEEgd2lsbCBjYXVzZSBURQorCSAqIHRyaWdnZXIuCisJICoKKwkgKiBUaGlzIGlzIG5vdCBuZWVkZWQgd2hlbiBURSBpcyBub3QgaW4gdXNlLCBidXQgd2UgZG8gaXQgYW55d2F5IHRvCisJICogbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgd291bGQgYmUgbW9yZQorCSAqIG9wdGltYWwsIGJ1dCBtb3JlIGNvbXBsZXgsIHRvIHdhaXQgb25seSBqdXN0IGJlZm9yZSBzdGFydGluZyBuZXh0CisJICogdHJhbnNmZXIuICovCisJciA9IGRzaV92Y19zZW5kX2J0YV9zeW5jKGNoYW5uZWwpOworCWlmIChyKQorCQlEU1NFUlIoIkJUQSBhZnRlciBmcmFtZWRvbmUgZmFpbGVkXG4iKTsKKworCS8qIFJYX0ZJRk9fTk9UX0VNUFRZICovCisJaWYgKFJFR19HRVQoRFNJX1ZDX0NUUkwoY2hhbm5lbCksIDIwLCAyMCkpIHsKKwkJRFNTRVJSKCJSZWNlaXZlZCBlcnJvciBkdXJpbmcgZnJhbWUgdHJhbnNmZXI6XG4iKTsKKwkJZHNpX3ZjX2ZsdXNoX3JlY2VpdmVfZGF0YShjaGFubmVsKTsKIAl9CiAKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0ZBS0VfVlNZTkMKQEAgLTI5ODQsMTE4ICsyOTIwLDc5IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBkc2lfdXBkYXRlX3RocmVhZCh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgZHNpX2ZyYW1lZG9uZV93b3JrX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGV2aWNlOwotCXUxNiB4LCB5LCB3LCBoOworCURTU0RCR0YoKTsKIAotCXdoaWxlICgxKSB7Ci0JCWJvb2wgc2NoZWQ7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkc2kuZnJhbWVkb25lX3RpbWVvdXRfd29yayk7CiAKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRzaS53YWl0cXVldWUsCi0JCQkJZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9BVVRPIHx8Ci0JCQkJKGRzaS51cGRhdGVfbW9kZSA9PSBPTUFQX0RTU19VUERBVEVfTUFOVUFMICYmCi0JCQkJIGRzaS51cGRhdGVfcmVnaW9uLmRpcnR5ID09IHRydWUpIHx8Ci0JCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwlkc2lfaGFuZGxlX2ZyYW1lZG9uZSgpOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKKwlkc2lfcGVyZl9zaG93KCJESVNQQyIpOwogCi0JCWRzaV9idXNfbG9jaygpOworCWRzaS5mcmFtZWRvbmVfY2FsbGJhY2soMCwgZHNpLmZyYW1lZG9uZV9kYXRhKTsKK30KIAotCQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRCB8fAotCQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQkJZHNpX2J1c191bmxvY2soKTsKLQkJCWJyZWFrOwotCQl9CitpbnQgb21hcF9kc2lfcHJlcGFyZV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJCSAgICB1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgpCit7CisJdTE2IGR3LCBkaDsKIAotCQlkc2lfcGVyZl9tYXJrX3NldHVwKCk7CisJZHNzZGV2LT5kcml2ZXItPmdldF9yZXNvbHV0aW9uKGRzc2RldiwgJmR3LCAmZGgpOwogCi0JCWlmIChkc2kudXBkYXRlX3JlZ2lvbi5kaXJ0eSkgewotCQkJc3Bpbl9sb2NrKCZkc2kudXBkYXRlX2xvY2spOwotCQkJZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uID0gZHNpLnVwZGF0ZV9yZWdpb247Ci0JCQlkc2kudXBkYXRlX3JlZ2lvbi5kaXJ0eSA9IGZhbHNlOwotCQkJc3Bpbl91bmxvY2soJmRzaS51cGRhdGVfbG9jayk7Ci0JCX0KKwlpZiAgKCp4ID4gZHcgfHwgKnkgPiBkaCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZGV2aWNlID0gZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLmRldmljZTsKLQkJeCA9IGRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi54OwotCQl5ID0gZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLnk7Ci0JCXcgPSBkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24udzsKLQkJaCA9IGRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi5oOworCWlmICgqeCArICp3ID4gZHcpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChkZXZpY2UtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgeworCWlmICgqeSArICpoID4gZGgpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9NQU5VQUwpCi0JCQkJZHNzX3NldHVwX3BhcnRpYWxfcGxhbmVzKGRldmljZSwKLQkJCQkJCSZ4LCAmeSwgJncsICZoKTsKKwlpZiAoKncgPT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWRpc3BjX3NldF9sY2Rfc2l6ZSh3LCBoKTsKLQkJfQorCWlmICgqdyA9PSAwIHx8ICpoID09IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24uZGlydHkpIHsKLQkJCWRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi5kaXJ0eSA9IGZhbHNlOwotCQkJLyogWFhYIFRPRE8gd2UgZG9uJ3QgbmVlZCB0byBzZW5kIHRoZSBjb29yZHMsIGlmIHRoZXkKLQkJCSAqIGFyZSB0aGUgc2FtZSB0aGF0IGFyZSBhbHJlYWR5IHByb2dyYW1tZWQgdG8gdGhlCi0JCQkgKiBwYW5lbC4gVGhhdCBzaG91bGQgc3BlZWQgdXAgbWFudWFsIHVwZGF0ZSBhIGJpdCAqLwotCQkJZGV2aWNlLT5kcml2ZXItPnNldHVwX3VwZGF0ZShkZXZpY2UsIHgsIHksIHcsIGgpOwotCQl9CisJZHNpX3BlcmZfbWFya19zZXR1cCgpOwogCi0JCWRzaV9wZXJmX21hcmtfc3RhcnQoKTsKLQotCQlpZiAoZGV2aWNlLT5tYW5hZ2VyLT5jYXBzICYgT01BUF9EU1NfT1ZMX01HUl9DQVBfRElTUEMpIHsKLQkJCWRzaV92Y19jb25maWdfdnAoMCk7Ci0KLQkJCWlmIChkc2kudGVfZW5hYmxlZCAmJiBkc2kudXNlX2V4dF90ZSkKLQkJCQlkZXZpY2UtPmRyaXZlci0+d2FpdF9mb3JfdGUoZGV2aWNlKTsKLQotCQkJZHNpLmZyYW1lZG9uZV9yZWNlaXZlZCA9IGZhbHNlOwotCi0JCQlkc2lfdXBkYXRlX3NjcmVlbl9kaXNwYyhkZXZpY2UsIHgsIHksIHcsIGgpOwotCi0JCQkvKiB3YWl0IGZvciBmcmFtZWRvbmUgKi8KLQkJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwMDApOwotCQkJd2FpdF9ldmVudF90aW1lb3V0KGRzaS53YWl0cXVldWUsCi0JCQkJCWRzaS5mcmFtZWRvbmVfcmVjZWl2ZWQgPT0gdHJ1ZSwKLQkJCQkJdGltZW91dCk7Ci0KLQkJCWlmICghZHNpLmZyYW1lZG9uZV9yZWNlaXZlZCkgewotCQkJCURTU0VSUigiZnJhbWVkb25lIHRpbWVvdXRcbiIpOwotCQkJCURTU0VSUigiZmFpbGVkIHVwZGF0ZSAlZCwlZCAlZHglZFxuIiwKLQkJCQkJCXgsIHksIHcsIGgpOwotCi0JCQkJZGlzcGNfZW5hYmxlX3NpZGxlKCk7Ci0JCQkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7Ci0KLQkJCQlkc2lfcmVzZXRfdHhfZmlmbygwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHNpX2hhbmRsZV9mcmFtZWRvbmUoKTsKLQkJCQlkc2lfcGVyZl9zaG93KCJESVNQQyIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJZHNpX3VwZGF0ZV9zY3JlZW5fbDQoZGV2aWNlLCB4LCB5LCB3LCBoKTsKLQkJCWRzaV9wZXJmX3Nob3coIkw0Iik7Ci0JCX0KLQotCQlzY2hlZCA9IGF0b21pY19yZWFkKCZkc2kuYnVzX2xvY2suY291bnQpIDwgMDsKLQotCQljb21wbGV0ZV9hbGwoJmRzaS51cGRhdGVfY29tcGxldGlvbik7Ci0KLQkJZHNpX2J1c191bmxvY2soKTsKLQotCQkvKiBYWFggV2UgbmVlZCB0byBnaXZlIG90aGVycyBjaGFuY2UgdG8gZ2V0IHRoZSBidXMgbG9jay4gSXMKLQkJICogdGhlcmUgYSBiZXR0ZXIgd2F5IGZvciB0aGlzPyAqLwotCQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9BVVRPICYmIHNjaGVkKQotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOworCWlmIChkc3NkZXYtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgeworCQlkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoZHNzZGV2LCB4LCB5LCB3LCBoKTsKKwkJZGlzcGNfc2V0X2xjZF9zaXplKCp3LCAqaCk7CiAJfQogCi0JRFNTREJHKCJ1cGRhdGUgdGhyZWFkIGV4aXRpbmdcbiIpOwotCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKTsKIAoraW50IG9tYXBfZHNpX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCWludCBjaGFubmVsLAorCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCwKKwkJdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiksIHZvaWQgKmRhdGEpCit7CisJZHNpLnVwZGF0ZV9jaGFubmVsID0gY2hhbm5lbDsKIAorCWlmIChkc3NkZXYtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgeworCQlkc2kuZnJhbWVkb25lX2NhbGxiYWNrID0gY2FsbGJhY2s7CisJCWRzaS5mcmFtZWRvbmVfZGF0YSA9IGRhdGE7CisKKwkJZHNpLnVwZGF0ZV9yZWdpb24ueCA9IHg7CisJCWRzaS51cGRhdGVfcmVnaW9uLnkgPSB5OworCQlkc2kudXBkYXRlX3JlZ2lvbi53ID0gdzsKKwkJZHNpLnVwZGF0ZV9yZWdpb24uaCA9IGg7CisJCWRzaS51cGRhdGVfcmVnaW9uLmRldmljZSA9IGRzc2RldjsKKworCQlkc2lfdXBkYXRlX3NjcmVlbl9kaXNwYyhkc3NkZXYsIHgsIHksIHcsIGgpOworCX0gZWxzZSB7CisJCWRzaV91cGRhdGVfc2NyZWVuX2w0KGRzc2RldiwgeCwgeSwgdywgaCk7CisJCWRzaV9wZXJmX3Nob3coIkw0Iik7CisJCWNhbGxiYWNrKDAsIGRhdGEpOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2RzaV91cGRhdGUpOwogCiAvKiBEaXNwbGF5IGZ1bmNzICovCiAKQEAgLTMyMDMsNyArMzEwMCw4IEBACiAJaWYgKHIpCiAJCWdvdG8gZXJyMTsKIAotCWRzc19zZWxlY3RfY2xrX3NvdXJjZSh0cnVlLCB0cnVlKTsKKwlkc3Nfc2VsZWN0X2Rpc3BjX2Nsa19zb3VyY2UoRFNTX1NSQ19EU0kxX1BMTF9GQ0xLKTsKKwlkc3Nfc2VsZWN0X2RzaV9jbGtfc291cmNlKERTU19TUkNfRFNJMl9QTExfRkNMSyk7CiAKIAlEU1NEQkcoIlBMTCBPS1xuIik7CiAKQEAgLTMyMjksMjUgKzMxMjcsMTggQEAKIAogCS8qIGVuYWJsZSBpbnRlcmZhY2UgKi8KIAlkc2lfdmNfZW5hYmxlKDAsIDEpOworCWRzaV92Y19lbmFibGUoMSwgMSk7CisJZHNpX3ZjX2VuYWJsZSgyLCAxKTsKKwlkc2lfdmNfZW5hYmxlKDMsIDEpOwogCWRzaV9pZl9lbmFibGUoMSk7CiAJZHNpX2ZvcmNlX3R4X3N0b3BfbW9kZV9pbygpOwogCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUpIHsKLQkJciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKLQkJaWYgKHIpCi0JCQlnb3RvIGVycjQ7Ci0JfQotCi0JLyogZW5hYmxlIGhpZ2gtc3BlZWQgYWZ0ZXIgaW5pdGlhbCBjb25maWcgKi8KLQlkc2lfdmNfZW5hYmxlX2hzKDAsIDEpOwotCiAJcmV0dXJuIDA7Ci1lcnI0OgotCWRzaV9pZl9lbmFibGUoMCk7CiBlcnIzOgogCWRzaV9jb21wbGV4aW9fdW5pbml0KCk7CiBlcnIyOgotCWRzc19zZWxlY3RfY2xrX3NvdXJjZShmYWxzZSwgZmFsc2UpOworCWRzc19zZWxlY3RfZGlzcGNfY2xrX3NvdXJjZShEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CisJZHNzX3NlbGVjdF9kc2lfY2xrX3NvdXJjZShEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CiBlcnIxOgogCWRzaV9wbGxfdW5pbml0KCk7CiBlcnIwOgpAQCAtMzI1NiwxMCArMzE0Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3VuaW5pdF9kc2koc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWlmIChkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZSkKLQkJZHNzZGV2LT5kcml2ZXItPmRpc2FibGUoZHNzZGV2KTsKLQotCWRzc19zZWxlY3RfY2xrX3NvdXJjZShmYWxzZSwgZmFsc2UpOworCWRzc19zZWxlY3RfZGlzcGNfY2xrX3NvdXJjZShEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CisJZHNzX3NlbGVjdF9kc2lfY2xrX3NvdXJjZShEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CiAJZHNpX2NvbXBsZXhpb191bmluaXQoKTsKIAlkc2lfcGxsX3VuaW5pdCgpOwogfQpAQCAtMzI4MCwxNCArMzE2OSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitpbnQgb21hcGRzc19kc2lfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWludCByID0gMDsKIAogCURTU0RCRygiZHNpX2Rpc3BsYXlfZW5hYmxlXG4iKTsKIAorCVdBUk5fT04oIWRzaV9idXNfaXNfbG9ja2VkKCkpOworCiAJbXV0ZXhfbG9jaygmZHNpLmxvY2spOwotCWRzaV9idXNfbG9jaygpOwogCiAJciA9IG9tYXBfZHNzX3N0YXJ0X2RldmljZShkc3NkZXYpOwogCWlmIChyKSB7CkBAIC0zMjk1LDczICszMTg1LDQ3IEBACiAJCWdvdG8gZXJyMDsKIAl9CiAKLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKSB7Ci0JCURTU0VSUigiZHNzZGV2IGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjE7Ci0JfQotCiAJZW5hYmxlX2Nsb2NrcygxKTsKIAlkc2lfZW5hYmxlX3BsbF9jbG9jaygxKTsKIAogCXIgPSBfZHNpX3Jlc2V0KCk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIxOwogCiAJZHNpX2NvcmVfaW5pdCgpOwogCiAJciA9IGRzaV9kaXNwbGF5X2luaXRfZGlzcGMoZHNzZGV2KTsKIAlpZiAocikKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAKIAlyID0gZHNpX2Rpc3BsYXlfaW5pdF9kc2koZHNzZGV2KTsKIAlpZiAocikKLQkJZ290byBlcnIzOworCQlnb3RvIGVycjI7CiAKLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci0KLQlkc2kudXNlX2V4dF90ZSA9IGRzc2Rldi0+cGh5LmRzaS5leHRfdGU7Ci0JciA9IGRzaV9zZXRfdGUoZHNzZGV2LCBkc2kudGVfZW5hYmxlZCk7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyNDsKLQotCWRzaV9zZXRfdXBkYXRlX21vZGUoZHNzZGV2LCBkc2kudXNlcl91cGRhdGVfbW9kZSk7Ci0KLQlkc2lfYnVzX3VubG9jaygpOwogCW11dGV4X3VubG9jaygmZHNpLmxvY2spOwogCiAJcmV0dXJuIDA7CiAKLWVycjQ6Ci0KLQlkc2lfZGlzcGxheV91bmluaXRfZHNpKGRzc2Rldik7Ci1lcnIzOgotCWRzaV9kaXNwbGF5X3VuaW5pdF9kaXNwYyhkc3NkZXYpOwogZXJyMjoKKwlkc2lfZGlzcGxheV91bmluaXRfZGlzcGMoZHNzZGV2KTsKK2VycjE6CiAJZW5hYmxlX2Nsb2NrcygwKTsKIAlkc2lfZW5hYmxlX3BsbF9jbG9jaygwKTsKLWVycjE6CiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIGVycjA6Ci0JZHNpX2J1c191bmxvY2soKTsKIAltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKIAlEU1NEQkcoImRzaV9kaXNwbGF5X2VuYWJsZSBGQUlMRURcbiIpOwogCXJldHVybiByOwogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RzaV9kaXNwbGF5X2VuYWJsZSk7CiAKLXN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQordm9pZCBvbWFwZHNzX2RzaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCURTU0RCRygiZHNpX2Rpc3BsYXlfZGlzYWJsZVxuIik7CiAKKwlXQVJOX09OKCFkc2lfYnVzX2lzX2xvY2tlZCgpKTsKKwogCW11dGV4X2xvY2soJmRzaS5sb2NrKTsKLQlkc2lfYnVzX2xvY2soKTsKLQotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQgfHwKLQkJCWRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCi0JCWdvdG8gZW5kOwotCi0JZHNpLnVwZGF0ZV9tb2RlID0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOwotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOwogCiAJZHNpX2Rpc3BsYXlfdW5pbml0X2Rpc3BjKGRzc2Rldik7CiAKQEAgLTMzNzEsMzM3ICszMjM1LDE3IEBACiAJZHNpX2VuYWJsZV9wbGxfY2xvY2soMCk7CiAKIAlvbWFwX2Rzc19zdG9wX2RldmljZShkc3NkZXYpOwotZW5kOgotCWRzaV9idXNfdW5sb2NrKCk7CisKIAltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19kc2lfZGlzcGxheV9kaXNhYmxlKTsKIAotc3RhdGljIGludCBkc2lfZGlzcGxheV9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwZHNzX2RzaV9lbmFibGVfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSkKIHsKLQlEU1NEQkcoImRzaV9kaXNwbGF5X3N1c3BlbmRcbiIpOwotCi0JbXV0ZXhfbG9jaygmZHNpLmxvY2spOwotCWRzaV9idXNfbG9jaygpOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCB8fAotCQkJZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKLQkJZ290byBlbmQ7Ci0KLQlkc2kudXBkYXRlX21vZGUgPSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ7Ci0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOwotCi0JZHNpX2Rpc3BsYXlfdW5pbml0X2Rpc3BjKGRzc2Rldik7Ci0KLQlkc2lfZGlzcGxheV91bmluaXRfZHNpKGRzc2Rldik7Ci0KLQllbmFibGVfY2xvY2tzKDApOwotCWRzaV9lbmFibGVfcGxsX2Nsb2NrKDApOwotZW5kOgotCWRzaV9idXNfdW5sb2NrKCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCWludCByOwotCi0JRFNTREJHKCJkc2lfZGlzcGxheV9yZXN1bWVcbiIpOwotCi0JbXV0ZXhfbG9jaygmZHNpLmxvY2spOwotCWRzaV9idXNfbG9jaygpOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpIHsKLQkJRFNTRVJSKCJkc3NkZXYgbm90IHN1c3BlbmRlZFxuIik7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JZW5hYmxlX2Nsb2NrcygxKTsKLQlkc2lfZW5hYmxlX3BsbF9jbG9jaygxKTsKLQotCXIgPSBfZHNpX3Jlc2V0KCk7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyMTsKLQotCWRzaV9jb3JlX2luaXQoKTsKLQotCXIgPSBkc2lfZGlzcGxheV9pbml0X2Rpc3BjKGRzc2Rldik7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyMTsKLQotCXIgPSBkc2lfZGlzcGxheV9pbml0X2RzaShkc3NkZXYpOwotCWlmIChyKQotCQlnb3RvIGVycjI7Ci0KLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci0KLQlyID0gZHNpX3NldF90ZShkc3NkZXYsIGRzaS50ZV9lbmFibGVkKTsKLQlpZiAocikKLQkJZ290byBlcnIyOwotCi0JZHNpX3NldF91cGRhdGVfbW9kZShkc3NkZXYsIGRzaS51c2VyX3VwZGF0ZV9tb2RlKTsKLQotCWRzaV9idXNfdW5sb2NrKCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyMjoKLQlkc2lfZGlzcGxheV91bmluaXRfZGlzcGMoZHNzZGV2KTsKLWVycjE6Ci0JZW5hYmxlX2Nsb2NrcygwKTsKLQlkc2lfZW5hYmxlX3BsbF9jbG9jaygwKTsKLWVycjA6Ci0JZHNpX2J1c191bmxvY2soKTsKLQltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKLQlEU1NEQkcoImRzaV9kaXNwbGF5X3Jlc3VtZSBGQUlMRURcbiIpOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCkKLXsKLQlpbnQgciA9IDA7Ci0JdTE2IGR3LCBkaDsKLQotCURTU0RCRygiZHNpX2Rpc3BsYXlfdXBkYXRlKCVkLCVkICVkeCVkKVxuIiwgeCwgeSwgdywgaCk7Ci0KLQltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0KLQlpZiAoZHNpLnVwZGF0ZV9tb2RlICE9IE9NQVBfRFNTX1VQREFURV9NQU5VQUwpCi0JCWdvdG8gZW5kOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCi0JCWdvdG8gZW5kOwotCi0JZHNzZGV2LT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZkdywgJmRoKTsKLQotCWlmICAoeCA+IGR3IHx8IHkgPiBkaCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAoeCArIHcgPiBkdykKLQkJdyA9IGR3IC0geDsKLQotCWlmICh5ICsgaCA+IGRoKQotCQloID0gZGggLSB5OwotCi0JaWYgKHcgPT0gMCB8fCBoID09IDApCi0JCWdvdG8gZW5kOwotCi0JaWYgKHcgPT0gMSkgewotCQlyID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZHNpX3NldF91cGRhdGVfcmVnaW9uKGRzc2RldiwgeCwgeSwgdywgaCk7Ci0KLQl3YWtlX3VwKCZkc2kud2FpdHF1ZXVlKTsKLQotZW5kOgotCW11dGV4X3VubG9jaygmZHNpLmxvY2spOwotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfc3luYyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JYm9vbCB3YWl0OwotCi0JRFNTREJHKCJkc2lfZGlzcGxheV9zeW5jKClcbiIpOwotCi0JbXV0ZXhfbG9jaygmZHNpLmxvY2spOwotCWRzaV9idXNfbG9jaygpOwotCi0JaWYgKGRzaS51cGRhdGVfbW9kZSA9PSBPTUFQX0RTU19VUERBVEVfTUFOVUFMICYmCi0JCQlkc2kudXBkYXRlX3JlZ2lvbi5kaXJ0eSkgewotCQlJTklUX0NPTVBMRVRJT04oZHNpLnVwZGF0ZV9jb21wbGV0aW9uKTsKLQkJd2FpdCA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJd2FpdCA9IGZhbHNlOwotCX0KLQotCWRzaV9idXNfdW5sb2NrKCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7Ci0KLQlpZiAod2FpdCkKLQkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZkc2kudXBkYXRlX2NvbXBsZXRpb24pOwotCi0JRFNTREJHKCJkc2lfZGlzcGxheV9zeW5jKCkgZG9uZVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfc2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlKQotewotCWludCByID0gMDsKLQotCURTU0RCR0YoIiVkIiwgbW9kZSk7Ci0KLQltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0JZHNpX2J1c19sb2NrKCk7Ci0KLQlkc2kudXNlcl91cGRhdGVfbW9kZSA9IG1vZGU7Ci0JciA9IGRzaV9zZXRfdXBkYXRlX21vZGUoZHNzZGV2LCBtb2RlKTsKLQotCWRzaV9idXNfdW5sb2NrKCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgZHNpX2Rpc3BsYXlfZ2V0X3VwZGF0ZV9tb2RlKAotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JcmV0dXJuIGRzaS51cGRhdGVfbW9kZTsKLX0KLQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQotewotCWludCByID0gMDsKLQotCURTU0RCR0YoIiVkIiwgZW5hYmxlKTsKLQotCWlmICghZHNzZGV2LT5kcml2ZXItPmVuYWJsZV90ZSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlkc2lfYnVzX2xvY2soKTsKLQogCWRzaS50ZV9lbmFibGVkID0gZW5hYmxlOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCi0JCWdvdG8gZW5kOwotCi0JciA9IGRzaV9zZXRfdGUoZHNzZGV2LCBlbmFibGUpOwotZW5kOgotCWRzaV9idXNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9nZXRfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJldHVybiBkc2kudGVfZW5hYmxlZDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9zZXRfcm90YXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgdTggcm90YXRlKQotewotCi0JRFNTREJHRigiJWQiLCByb3RhdGUpOwotCi0JaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X3JvdGF0ZSB8fCAhZHNzZGV2LT5kcml2ZXItPmdldF9yb3RhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHNpX2J1c19sb2NrKCk7Ci0JZHNzZGV2LT5kcml2ZXItPnNldF9yb3RhdGUoZHNzZGV2LCByb3RhdGUpOwotCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pIHsKLQkJdTE2IHcsIGg7Ci0JCS8qIHRoZSBkaXNwbGF5IGRpbWVuc2lvbnMgbWF5IGhhdmUgY2hhbmdlZCwgc28gc2V0IGEgbmV3Ci0JCSAqIHVwZGF0ZSByZWdpb24gKi8KLQkJZHNzZGV2LT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZ3LCAmaCk7Ci0JCWRzaV9zZXRfdXBkYXRlX3JlZ2lvbihkc3NkZXYsIDAsIDAsIHcsIGgpOwotCX0KLQlkc2lfYnVzX3VubG9jaygpOwotCiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyB1OCBkc2lfZGlzcGxheV9nZXRfcm90YXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5zZXRfcm90YXRlIHx8ICFkc3NkZXYtPmRyaXZlci0+Z2V0X3JvdGF0ZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZHNzZGV2LT5kcml2ZXItPmdldF9yb3RhdGUoZHNzZGV2KTsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9zZXRfbWlycm9yKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBtaXJyb3IpCi17Ci0JRFNTREJHRigiJWQiLCBtaXJyb3IpOwotCi0JaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X21pcnJvciB8fCAhZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHNpX2J1c19sb2NrKCk7Ci0JZHNzZGV2LT5kcml2ZXItPnNldF9taXJyb3IoZHNzZGV2LCBtaXJyb3IpOwotCWRzaV9idXNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgZHNpX2Rpc3BsYXlfZ2V0X21pcnJvcihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X21pcnJvciB8fCAhZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGRzc2Rldi0+ZHJpdmVyLT5nZXRfbWlycm9yKGRzc2Rldik7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcnVuX3Rlc3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBpbnQgdGVzdF9udW0pCi17Ci0JaW50IHI7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlEU1NEQkdGKCIlZCIsIHRlc3RfbnVtKTsKLQotCWRzaV9idXNfbG9jaygpOwotCi0JLyogcnVuIHRlc3QgZmlyc3QgaW4gbG93IHNwZWVkIG1vZGUgKi8KLQlkc2lfdmNfZW5hYmxlX2hzKDAsIDApOwotCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5ydW5fdGVzdCkgewotCQlyID0gZHNzZGV2LT5kcml2ZXItPnJ1bl90ZXN0KGRzc2RldiwgdGVzdF9udW0pOwotCQlpZiAocikKLQkJCWdvdG8gZW5kOwotCX0KLQotCS8qIHRoZW4gaW4gaGlnaCBzcGVlZCAqLwotCWRzaV92Y19lbmFibGVfaHMoMCwgMSk7Ci0KLQlpZiAoZHNzZGV2LT5kcml2ZXItPnJ1bl90ZXN0KSB7Ci0JCXIgPSBkc3NkZXYtPmRyaXZlci0+cnVuX3Rlc3QoZHNzZGV2LCB0ZXN0X251bSk7Ci0JCWlmIChyKQotCQkJZ290byBlbmQ7Ci0JfQotCi1lbmQ6Ci0JZHNpX3ZjX2VuYWJsZV9ocygwLCAxKTsKLQotCWRzaV9idXNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9tZW1vcnlfcmVhZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCXZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsCi0JCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoKQotewotCWludCByOwotCi0JRFNTREJHRigiIik7Ci0KLQlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5tZW1vcnlfcmVhZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlkc2lfYnVzX2xvY2soKTsKLQotCXIgPSBkc3NkZXYtPmRyaXZlci0+bWVtb3J5X3JlYWQoZHNzZGV2LCBidWYsIHNpemUsCi0JCQl4LCB5LCB3LCBoKTsKLQotCS8qIE1lbW9yeSByZWFkIHVzdWFsbHkgY2hhbmdlcyB0aGUgdXBkYXRlIGFyZWEuIFRoaXMgd2lsbAotCSAqIGZvcmNlIHRoZSBuZXh0IHVwZGF0ZSB0byByZS1zZXQgdGhlIHVwZGF0ZSBhcmVhICovCi0JZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLmRpcnR5ID0gdHJ1ZTsKLQotCWRzaV9idXNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcjsKLX0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19kc2lfZW5hYmxlX3RlKTsKIAogdm9pZCBkc2lfZ2V0X292ZXJsYXlfZmlmb190aHJlc2hvbGRzKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKIAkJdTMyIGZpZm9fc2l6ZSwgZW51bSBvbWFwX2J1cnN0X3NpemUgKmJ1cnN0X3NpemUsCkBAIC0zNzIwLDI2ICszMjY0LDYgQEAKIHsKIAlEU1NEQkcoIkRTSSBpbml0XG4iKTsKIAotCWRzc2Rldi0+ZW5hYmxlID0gZHNpX2Rpc3BsYXlfZW5hYmxlOwotCWRzc2Rldi0+ZGlzYWJsZSA9IGRzaV9kaXNwbGF5X2Rpc2FibGU7Ci0JZHNzZGV2LT5zdXNwZW5kID0gZHNpX2Rpc3BsYXlfc3VzcGVuZDsKLQlkc3NkZXYtPnJlc3VtZSA9IGRzaV9kaXNwbGF5X3Jlc3VtZTsKLQlkc3NkZXYtPnVwZGF0ZSA9IGRzaV9kaXNwbGF5X3VwZGF0ZTsKLQlkc3NkZXYtPnN5bmMgPSBkc2lfZGlzcGxheV9zeW5jOwotCWRzc2Rldi0+c2V0X3VwZGF0ZV9tb2RlID0gZHNpX2Rpc3BsYXlfc2V0X3VwZGF0ZV9tb2RlOwotCWRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlID0gZHNpX2Rpc3BsYXlfZ2V0X3VwZGF0ZV9tb2RlOwotCWRzc2Rldi0+ZW5hYmxlX3RlID0gZHNpX2Rpc3BsYXlfZW5hYmxlX3RlOwotCWRzc2Rldi0+Z2V0X3RlID0gZHNpX2Rpc3BsYXlfZ2V0X3RlOwotCi0JZHNzZGV2LT5nZXRfcm90YXRlID0gZHNpX2Rpc3BsYXlfZ2V0X3JvdGF0ZTsKLQlkc3NkZXYtPnNldF9yb3RhdGUgPSBkc2lfZGlzcGxheV9zZXRfcm90YXRlOwotCi0JZHNzZGV2LT5nZXRfbWlycm9yID0gZHNpX2Rpc3BsYXlfZ2V0X21pcnJvcjsKLQlkc3NkZXYtPnNldF9taXJyb3IgPSBkc2lfZGlzcGxheV9zZXRfbWlycm9yOwotCi0JZHNzZGV2LT5ydW5fdGVzdCA9IGRzaV9kaXNwbGF5X3J1bl90ZXN0OwotCWRzc2Rldi0+bWVtb3J5X3JlYWQgPSBkc2lfZGlzcGxheV9tZW1vcnlfcmVhZDsKLQogCS8qIFhYWCB0aGVzZSBzaG91bGQgYmUgZmlndXJlZCBvdXQgZHluYW1pY2FsbHkgKi8KIAlkc3NkZXYtPmNhcHMgPSBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFIHwKIAkJT01BUF9EU1NfRElTUExBWV9DQVBfVEVBUl9FTElNOwpAQCAtMzc1NCw5ICszMjc4LDYgQEAKIHsKIAl1MzIgcmV2OwogCWludCByOwotCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsKLQkJLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1VTRVJfUlRfUFJJTy0xCi0JfTsKIAogCXNwaW5fbG9ja19pbml0KCZkc2kuZXJyb3JzX2xvY2spOwogCWRzaS5lcnJvcnMgPSAwOwpAQCAtMzc2NywzMSArMzI4OCwxOSBAQAogI2VuZGlmCiAKIAlpbml0X2NvbXBsZXRpb24oJmRzaS5idGFfY29tcGxldGlvbik7Ci0JaW5pdF9jb21wbGV0aW9uKCZkc2kudXBkYXRlX2NvbXBsZXRpb24pOwotCi0JZHNpLnRocmVhZCA9IGt0aHJlYWRfY3JlYXRlKGRzaV91cGRhdGVfdGhyZWFkLCBOVUxMLCAiZHNpIik7Ci0JaWYgKElTX0VSUihkc2kudGhyZWFkKSkgewotCQlEU1NFUlIoImNhbm5vdCBjcmVhdGUga3RocmVhZFxuIik7Ci0JCXIgPSBQVFJfRVJSKGRzaS50aHJlYWQpOwotCQlnb3RvIGVycjA7Ci0JfQotCXNjaGVkX3NldHNjaGVkdWxlcihkc2kudGhyZWFkLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmZHNpLndhaXRxdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRzaS51cGRhdGVfbG9jayk7CiAKIAltdXRleF9pbml0KCZkc2kubG9jayk7Ci0JbXV0ZXhfaW5pdCgmZHNpLmJ1c19sb2NrKTsKKwlzZW1hX2luaXQoJmRzaS5idXNfbG9jaywgMSk7CisKKwlJTklUX1dPUksoJmRzaS5mcmFtZWRvbmVfd29yaywgZHNpX2ZyYW1lZG9uZV93b3JrX2NhbGxiYWNrKTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkc2kuZnJhbWVkb25lX3RpbWVvdXRfd29yaywKKwkJCWRzaV9mcmFtZWRvbmVfdGltZW91dF93b3JrX2NhbGxiYWNrKTsKIAogI2lmZGVmIERTSV9DQVRDSF9NSVNTSU5HX1RFCiAJaW5pdF90aW1lcigmZHNpLnRlX3RpbWVyKTsKIAlkc2kudGVfdGltZXIuZnVuY3Rpb24gPSBkc2lfdGVfdGltZW91dDsKIAlkc2kudGVfdGltZXIuZGF0YSA9IDA7CiAjZW5kaWYKLQotCWRzaS51cGRhdGVfbW9kZSA9IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDsKLQlkc2kudXNlcl91cGRhdGVfbW9kZSA9IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDsKLQogCWRzaS5iYXNlID0gaW9yZW1hcChEU0lfQkFTRSwgRFNJX1NaX1JFR1MpOwogCWlmICghZHNpLmJhc2UpIHsKIAkJRFNTRVJSKCJjYW4ndCBpb3JlbWFwIERTSVxuIik7CkBAIC0zNzk5LDcgKzMzMDgsNyBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JZHNpLnZkZHNfZHNpX3JlZyA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZkZHNfZHNpIik7CisJZHNpLnZkZHNfZHNpX3JlZyA9IGRzc19nZXRfdmRkc19kc2koKTsKIAlpZiAoSVNfRVJSKGRzaS52ZGRzX2RzaV9yZWcpKSB7CiAJCWlvdW5tYXAoZHNpLmJhc2UpOwogCQlEU1NFUlIoImNhbid0IGdldCBWRERTX0RTSSByZWd1bGF0b3JcbiIpOwpAQCAtMzgxNSwyMyArMzMyNCwxNSBAQAogCiAJZW5hYmxlX2Nsb2NrcygwKTsKIAotCXdha2VfdXBfcHJvY2Vzcyhkc2kudGhyZWFkKTsKLQogCXJldHVybiAwOwogZXJyMjoKIAlpb3VubWFwKGRzaS5iYXNlKTsKIGVycjE6Ci0Ja3RocmVhZF9zdG9wKGRzaS50aHJlYWQpOwotZXJyMDoKIAlyZXR1cm4gcjsKIH0KIAogdm9pZCBkc2lfZXhpdCh2b2lkKQogewotCWt0aHJlYWRfc3RvcChkc2kudGhyZWFkKTsKLQotCXJlZ3VsYXRvcl9wdXQoZHNpLnZkZHNfZHNpX3JlZyk7Ci0KIAlpb3VubWFwKGRzaS5iYXNlKTsKIAogCURTU0RCRygib21hcF9kc2lfZXhpdFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5jCmluZGV4IDBhMjZiN2QuLjgyNTRhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5jCkBAIC02OCw2ICs2OCw5IEBACiAJc3RydWN0IGRzc19jbG9ja19pbmZvIGNhY2hlX2Rzc19jaW5mbzsKIAlzdHJ1Y3QgZGlzcGNfY2xvY2tfaW5mbyBjYWNoZV9kaXNwY19jaW5mbzsKIAorCWVudW0gZHNzX2Nsa19zb3VyY2UgZHNpX2Nsa19zb3VyY2U7CisJZW51bSBkc3NfY2xrX3NvdXJjZSBkaXNwY19jbGtfc291cmNlOworCiAJdTMyCQljdHhbRFNTX1NaX1JFR1MgLyBzaXplb2YodTMyKV07CiB9IGRzczsKIApAQCAtMjQ3LDIzICsyNTAsNDIgQEAKICN1bmRlZiBEVU1QUkVHCiB9CiAKLXZvaWQgZHNzX3NlbGVjdF9jbGtfc291cmNlKGJvb2wgZHNpLCBib29sIGRpc3BjKQordm9pZCBkc3Nfc2VsZWN0X2Rpc3BjX2Nsa19zb3VyY2UoZW51bSBkc3NfY2xrX3NvdXJjZSBjbGtfc3JjKQogewotCXUzMiByOwotCXIgPSBkc3NfcmVhZF9yZWcoRFNTX0NPTlRST0wpOwotCXIgPSBGTERfTU9EKHIsIGRzaSwgMSwgMSk7CS8qIERTSV9DTEtfU1dJVENIICovCi0JciA9IEZMRF9NT0QociwgZGlzcGMsIDAsIDApOwkvKiBESVNQQ19DTEtfU1dJVENIICovCi0JZHNzX3dyaXRlX3JlZyhEU1NfQ09OVFJPTCwgcik7CisJaW50IGI7CisKKwlCVUdfT04oY2xrX3NyYyAhPSBEU1NfU1JDX0RTSTFfUExMX0ZDTEsgJiYKKwkJCWNsa19zcmMgIT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEspOworCisJYiA9IGNsa19zcmMgPT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEsgPyAwIDogMTsKKworCVJFR19GTERfTU9EKERTU19DT05UUk9MLCBiLCAwLCAwKTsJLyogRElTUENfQ0xLX1NXSVRDSCAqLworCisJZHNzLmRpc3BjX2Nsa19zb3VyY2UgPSBjbGtfc3JjOwogfQogCi1pbnQgZHNzX2dldF9kc2lfY2xrX3NvdXJjZSh2b2lkKQordm9pZCBkc3Nfc2VsZWN0X2RzaV9jbGtfc291cmNlKGVudW0gZHNzX2Nsa19zb3VyY2UgY2xrX3NyYykKIHsKLQlyZXR1cm4gRkxEX0dFVChkc3NfcmVhZF9yZWcoRFNTX0NPTlRST0wpLCAxLCAxKTsKKwlpbnQgYjsKKworCUJVR19PTihjbGtfc3JjICE9IERTU19TUkNfRFNJMl9QTExfRkNMSyAmJgorCQkJY2xrX3NyYyAhPSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CisKKwliID0gY2xrX3NyYyA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyA/IDAgOiAxOworCisJUkVHX0ZMRF9NT0QoRFNTX0NPTlRST0wsIGIsIDEsIDEpOwkvKiBEU0lfQ0xLX1NXSVRDSCAqLworCisJZHNzLmRzaV9jbGtfc291cmNlID0gY2xrX3NyYzsKIH0KIAotaW50IGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSh2b2lkKQorZW51bSBkc3NfY2xrX3NvdXJjZSBkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2Uodm9pZCkKIHsKLQlyZXR1cm4gRkxEX0dFVChkc3NfcmVhZF9yZWcoRFNTX0NPTlRST0wpLCAwLCAwKTsKKwlyZXR1cm4gZHNzLmRpc3BjX2Nsa19zb3VyY2U7Cit9CisKK2VudW0gZHNzX2Nsa19zb3VyY2UgZHNzX2dldF9kc2lfY2xrX3NvdXJjZSh2b2lkKQoreworCXJldHVybiBkc3MuZHNpX2Nsa19zb3VyY2U7CiB9CiAKIC8qIGNhbGN1bGF0ZSBjbG9jayByYXRlcyB1c2luZyBkaXZpZGVycyBpbiBjaW5mbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaAppbmRleCAyYmNiMTI0Li4yNDMyNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaApAQCAtMTE5LDYgKzExOSwxMiBAQAogCURTU19DTEtfOTZNCT0gMSA8PCA0LAogfTsKIAorZW51bSBkc3NfY2xrX3NvdXJjZSB7CisJRFNTX1NSQ19EU0kxX1BMTF9GQ0xLLAorCURTU19TUkNfRFNJMl9QTExfRkNMSywKKwlEU1NfU1JDX0RTUzFfQUxXT05fRkNMSywKK307CisKIHN0cnVjdCBkc3NfY2xvY2tfaW5mbyB7CiAJLyogcmF0ZXMgdGhhdCB3ZSBnZXQgd2l0aCBkaXZpZGVycyBiZWxvdyAqLwogCXVuc2lnbmVkIGxvbmcgZmNrOwpAQCAtMTY5LDYgKzE3NSw5IEBACiBpbnQgZHNzX25lZWRfY3R4X3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRzc19kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpOwogc3RydWN0IGJ1c190eXBlICpkc3NfZ2V0X2J1cyh2b2lkKTsKK3N0cnVjdCByZWd1bGF0b3IgKmRzc19nZXRfdmRkc19kc2kodm9pZCk7CitzdHJ1Y3QgcmVndWxhdG9yICpkc3NfZ2V0X3ZkZHNfc2RpKHZvaWQpOworc3RydWN0IHJlZ3VsYXRvciAqZHNzX2dldF92ZGRhX2RhYyh2b2lkKTsKIAogLyogZGlzcGxheSAqLwogaW50IGRzc19zdXNwZW5kX2FsbF9kZXZpY2VzKHZvaWQpOwpAQCAtMjE2LDkgKzIyNSwxMSBAQAogaW50IGRzc19zZGlfZW5hYmxlKHZvaWQpOwogdm9pZCBkc3Nfc2RpX2Rpc2FibGUodm9pZCk7CiAKLXZvaWQgZHNzX3NlbGVjdF9jbGtfc291cmNlKGJvb2wgZHNpLCBib29sIGRpc3BjKTsKLWludCBkc3NfZ2V0X2RzaV9jbGtfc291cmNlKHZvaWQpOwotaW50IGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSh2b2lkKTsKK3ZvaWQgZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKGVudW0gZHNzX2Nsa19zb3VyY2UgY2xrX3NyYyk7Cit2b2lkIGRzc19zZWxlY3RfZHNpX2Nsa19zb3VyY2UoZW51bSBkc3NfY2xrX3NvdXJjZSBjbGtfc3JjKTsKK2VudW0gZHNzX2Nsa19zb3VyY2UgZHNzX2dldF9kaXNwY19jbGtfc291cmNlKHZvaWQpOworZW51bSBkc3NfY2xrX3NvdXJjZSBkc3NfZ2V0X2RzaV9jbGtfc291cmNlKHZvaWQpOworCiB2b2lkIGRzc19zZXRfdmVuY19vdXRwdXQoZW51bSBvbWFwX2Rzc192ZW5jX3R5cGUgdHlwZSk7CiB2b2lkIGRzc19zZXRfZGFjX3B3cmRuX2Jneihib29sIGVuYWJsZSk7CiAKQEAgLTI2MSw3ICsyNzIsNyBAQAogCQl1MzIgKmZpZm9fbG93LCB1MzIgKmZpZm9faGlnaCk7CiAKIC8qIERQSSAqLwotaW50IGRwaV9pbml0KHZvaWQpOworaW50IGRwaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogdm9pZCBkcGlfZXhpdCh2b2lkKTsKIGludCBkcGlfaW5pdF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CiAKQEAgLTMxMyw4ICszMjQsOCBAQAogCiBib29sIGRpc3BjX2dvX2J1c3koZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCk7CiB2b2lkIGRpc3BjX2dvKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOwotdm9pZCBkaXNwY19lbmFibGVfbGNkX291dChib29sIGVuYWJsZSk7Ci12b2lkIGRpc3BjX2VuYWJsZV9kaWdpdF9vdXQoYm9vbCBlbmFibGUpOwordm9pZCBkaXNwY19lbmFibGVfY2hhbm5lbChlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCBib29sIGVuYWJsZSk7Citib29sIGRpc3BjX2lzX2NoYW5uZWxfZW5hYmxlZChlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKTsKIGludCBkaXNwY19lbmFibGVfcGxhbmUoZW51bSBvbWFwX3BsYW5lIHBsYW5lLCBib29sIGVuYWJsZSk7CiB2b2lkIGRpc3BjX2VuYWJsZV9yZXBsaWNhdGlvbihlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIGJvb2wgZW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvbWFuYWdlci5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvbWFuYWdlci5jCmluZGV4IDI3ZDljNDYuLjkxMzE0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9tYW5hZ2VyLmMKQEAgLTUwMSw2ICs1MDEsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkc3NfbWdyX3dhaXRfZm9yX3ZzeW5jKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwl1MzIgaXJxOworCisJaWYgKG1nci0+ZGV2aWNlLT50eXBlID09IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpCisJCWlycSA9IERJU1BDX0lSUV9FVlNZTkNfT0REOworCWVsc2UKKwkJaXJxID0gRElTUENfSVJRX1ZTWU5DOworCisJcmV0dXJuIG9tYXBfZGlzcGNfd2FpdF9mb3JfaXJxX2ludGVycnVwdGlibGVfdGltZW91dChpcnEsIHRpbWVvdXQpOworfQorCiBzdGF0aWMgaW50IGRzc19tZ3Jfd2FpdF9mb3JfZ28oc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwpAQCAtNTA5LDE3ICs1MjIsMTggQEAKIAl1MzIgaXJxOwogCWludCByOwogCWludCBpOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IG1nci0+ZGV2aWNlOwogCi0JaWYgKCFtZ3ItPmRldmljZSkKKwlpZiAoIWRzc2RldikKIAkJcmV0dXJuIDA7CiAKLQlpZiAobWdyLT5kZXZpY2UtPnR5cGUgPT0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQykgeworCWlmIChkc3NkZXYtPnR5cGUgPT0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQykgewogCQlpcnEgPSBESVNQQ19JUlFfRVZTWU5DX09ERCB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTjsKIAkJY2hhbm5lbCA9IE9NQVBfRFNTX0NIQU5ORUxfRElHSVQ7CiAJfSBlbHNlIHsKLQkJaWYgKG1nci0+ZGV2aWNlLT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgeworCQlpZiAoZHNzZGV2LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgewogCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlOwotCQkJbW9kZSA9IG1nci0+ZGV2aWNlLT5nZXRfdXBkYXRlX21vZGUobWdyLT5kZXZpY2UpOworCQkJbW9kZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKIAkJCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQogCQkJCXJldHVybiAwOwogCkBAIC01OTIsNyArNjA2LDcgQEAKIAl9IGVsc2UgewogCQlpZiAoZHNzZGV2LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgewogCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlOwotCQkJbW9kZSA9IGRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2Rldik7CisJCQltb2RlID0gZHNzZGV2LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkc3NkZXYpOwogCQkJaWYgKG1vZGUgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pCiAJCQkJcmV0dXJuIDA7CiAKQEAgLTEwNjQsNyArMTA3OCw3IEBACiAJCW1jLT5zaGFkb3dfZGlydHkgPSBmYWxzZTsKIAl9CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKKwlkc3NkZXYtPm1hbmFnZXItPmVuYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogfQogCiBzdGF0aWMgdm9pZCBkc3NfYXBwbHlfaXJxX2hhbmRsZXIodm9pZCAqZGF0YSwgdTMyIG1hc2spCkBAIC0xMTk2LDcgKzEyMTAsOCBAQAogCiAJCW9jLT5tYW51YWxfdXBkYXRlID0KIAkJCWRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUgJiYKLQkJCWRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2RldikgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE87CisJCQlkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2RldikgIT0KKwkJCQlPTUFQX0RTU19VUERBVEVfQVVUTzsKIAogCQkrK251bV9wbGFuZXNfZW5hYmxlZDsKIAl9CkBAIC0xMjM3LDcgKzEyNTIsOCBAQAogCiAJCW1jLT5tYW51YWxfdXBkYXRlID0KIAkJCWRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUgJiYKLQkJCWRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2RldikgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE87CisJCQlkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2RldikgIT0KKwkJCQlPTUFQX0RTU19VUERBVEVfQVVUTzsKIAl9CiAKIAkvKiBYWFggVE9ETzogVHJ5IHRvIGdldCBmaWZvbWVyZ2Ugd29ya2luZy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdApAQCAtMTM1MSw2ICsxMzY3LDE4IEBACiAJKmluZm8gPSBtZ3ItPmluZm87CiB9CiAKK3N0YXRpYyBpbnQgZHNzX21ncl9lbmFibGUoc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IpCit7CisJZGlzcGNfZW5hYmxlX2NoYW5uZWwobWdyLT5pZCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNzX21ncl9kaXNhYmxlKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKQoreworCWRpc3BjX2VuYWJsZV9jaGFubmVsKG1nci0+aWQsIDApOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBvbWFwX2Rzc19hZGRfb3ZlcmxheV9tYW5hZ2VyKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWFuYWdlcikKIHsKIAkrK251bV9tYW5hZ2VyczsKQEAgLTEzOTQsNiArMTQyMiwxMCBAQAogCQltZ3ItPnNldF9tYW5hZ2VyX2luZm8gPSAmb21hcF9kc3NfbWdyX3NldF9pbmZvOwogCQltZ3ItPmdldF9tYW5hZ2VyX2luZm8gPSAmb21hcF9kc3NfbWdyX2dldF9pbmZvOwogCQltZ3ItPndhaXRfZm9yX2dvID0gJmRzc19tZ3Jfd2FpdF9mb3JfZ287CisJCW1nci0+d2FpdF9mb3JfdnN5bmMgPSAmZHNzX21ncl93YWl0X2Zvcl92c3luYzsKKworCQltZ3ItPmVuYWJsZSA9ICZkc3NfbWdyX2VuYWJsZTsKKwkJbWdyLT5kaXNhYmxlID0gJmRzc19tZ3JfZGlzYWJsZTsKIAogCQltZ3ItPmNhcHMgPSBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvb3ZlcmxheS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvb3ZlcmxheS5jCmluZGV4IGI3ZjlhNzMuLjBjNWJlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9vdmVybGF5LmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uKGRzc2RldiwgJmR3LCAmZGgpOworCWRzc2Rldi0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZkdywgJmRoKTsKIAogCURTU0RCRygiY2hlY2tfb3ZlcmxheSAlZDogKCVkLCVkICVkeCVkIC0+ICVkeCVkKSBkaXNwICglZHglZClcbiIsCiAJCQlvdmwtPmlkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCmluZGV4IGI5MzY0OTUuLmNjMjNmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KICNpbmNsdWRlICJkc3MuaCIKIAotLyojZGVmaW5lIE1FQVNVUkVfUEVSRiovCi0KICNkZWZpbmUgUkZCSV9CQVNFICAgICAgICAgICAgICAgMHg0ODA1MDgwMAogCiBzdHJ1Y3QgcmZiaV9yZWcgeyB1MTYgaWR4OyB9OwpAQCAtNjYsOCArNjQsNiBAQAogI2RlZmluZSBSRkJJX1ZTWU5DX1dJRFRICVJGQklfUkVHKDB4MDA5MCkKICNkZWZpbmUgUkZCSV9IU1lOQ19XSURUSAlSRkJJX1JFRygweDAwOTQpCiAKLSNkZWZpbmUgUkZCSV9DTURfRklGT19MRU5fQllURVMgKDE2ICogc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKQotCiAjZGVmaW5lIFJFR19GTERfTU9EKGlkeCwgdmFsLCBzdGFydCwgZW5kKSBcCiAJcmZiaV93cml0ZV9yZWcoaWR4LCBGTERfTU9EKHJmYmlfcmVhZF9yZWcoaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKIApAQCAtMTAyLDcgKzk4LDYgQEAKIAogc3RhdGljIGludCByZmJpX2NvbnZlcnRfdGltaW5ncyhzdHJ1Y3QgcmZiaV90aW1pbmdzICp0KTsKIHN0YXRpYyB2b2lkIHJmYmlfZ2V0X2Nsa19pbmZvKHUzMiAqY2xrX3BlcmlvZCwgdTMyICptYXhfY2xrX2Rpdik7Ci1zdGF0aWMgdm9pZCBwcm9jZXNzX2NtZF9maWZvKHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IHsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CkBAIC0xMjUsMTEgKzEyMCw2IEBACiAJc3RydWN0IGNvbXBsZXRpb24gY21kX2RvbmU7CiAJYXRvbWljX3QgICAgICAgICAgY21kX2ZpZm9fZnVsbDsKIAlhdG9taWNfdCAgICAgICAgICBjbWRfcGVuZGluZzsKLSNpZmRlZiBNRUFTVVJFX1BFUkYKLQl1bnNpZ25lZCBwZXJmX2J5dGVzOwotCWt0aW1lX3QgcGVyZl9zZXR1cF90aW1lOwotCWt0aW1lX3QgcGVyZl9zdGFydF90aW1lOwotI2VuZGlmCiB9IHJmYmk7CiAKIHN0cnVjdCB1cGRhdGVfcmVnaW9uIHsKQEAgLTEzOSwxNiArMTI5LDYgQEAKIAl1MTYgICAgIGg7CiB9OwogCi1zdHJ1Y3QgdXBkYXRlX3BhcmFtIHsKLQl1OCByZmJpX21vZHVsZTsKLQl1OCBjbWQ7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCB1cGRhdGVfcmVnaW9uIHI7Ci0JCXN0cnVjdCBjb21wbGV0aW9uICpzeW5jOwotCX0gcGFyOwotfTsKLQogc3RhdGljIGlubGluZSB2b2lkIHJmYmlfd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCByZmJpX3JlZyBpZHgsIHUzMiB2YWwpCiB7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmZiaS5iYXNlICsgaWR4LmlkeCk7CkBAIC0zMjEsNTUgKzMwMSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfcmZiaV93cml0ZV9waXhlbHMpOwogCi0jaWZkZWYgTUVBU1VSRV9QRVJGCi1zdGF0aWMgdm9pZCBwZXJmX21hcmtfc2V0dXAodm9pZCkKLXsKLQlyZmJpLnBlcmZfc2V0dXBfdGltZSA9IGt0aW1lX2dldCgpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21hcmtfc3RhcnQodm9pZCkKLXsKLQlyZmJpLnBlcmZfc3RhcnRfdGltZSA9IGt0aW1lX2dldCgpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3Nob3coY29uc3QgY2hhciAqbmFtZSkKLXsKLQlrdGltZV90IHQsIHNldHVwX3RpbWUsIHRyYW5zX3RpbWU7Ci0JdTMyIHRvdGFsX2J5dGVzOwotCXUzMiBzZXR1cF91cywgdHJhbnNfdXMsIHRvdGFsX3VzOwotCi0JdCA9IGt0aW1lX2dldCgpOwotCi0Jc2V0dXBfdGltZSA9IGt0aW1lX3N1YihyZmJpLnBlcmZfc3RhcnRfdGltZSwgcmZiaS5wZXJmX3NldHVwX3RpbWUpOwotCXNldHVwX3VzID0gKHUzMilrdGltZV90b191cyhzZXR1cF90aW1lKTsKLQlpZiAoc2V0dXBfdXMgPT0gMCkKLQkJc2V0dXBfdXMgPSAxOwotCi0JdHJhbnNfdGltZSA9IGt0aW1lX3N1Yih0LCByZmJpLnBlcmZfc3RhcnRfdGltZSk7Ci0JdHJhbnNfdXMgPSAodTMyKWt0aW1lX3RvX3VzKHRyYW5zX3RpbWUpOwotCWlmICh0cmFuc191cyA9PSAwKQotCQl0cmFuc191cyA9IDE7Ci0KLQl0b3RhbF91cyA9IHNldHVwX3VzICsgdHJhbnNfdXM7Ci0KLQl0b3RhbF9ieXRlcyA9IHJmYmkucGVyZl9ieXRlczsKLQotCURTU0lORk8oIiVzIHVwZGF0ZSAldSB1cyArICV1IHVzID0gJXUgdXMgKCV1SHopLCAldSBieXRlcywgIgotCQkJIiV1IGtieXRlcy9zZWNcbiIsCi0JCQluYW1lLAotCQkJc2V0dXBfdXMsCi0JCQl0cmFuc191cywKLQkJCXRvdGFsX3VzLAotCQkJMTAwMCoxMDAwIC8gdG90YWxfdXMsCi0JCQl0b3RhbF9ieXRlcywKLQkJCXRvdGFsX2J5dGVzICogMTAwMCAvIHRvdGFsX3VzKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHBlcmZfbWFya19zZXR1cCgpCi0jZGVmaW5lIHBlcmZfbWFya19zdGFydCgpCi0jZGVmaW5lIHBlcmZfc2hvdyh4KQotI2VuZGlmCi0KIHZvaWQgcmZiaV90cmFuc2Zlcl9hcmVhKHUxNiB3aWR0aCwgdTE2IGhlaWdodCwKIAkJCSAgICAgdm9pZCAoY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQogewpAQCAtMzgyLDcgKzMxMyw3IEBACiAKIAlkaXNwY19zZXRfbGNkX3NpemUod2lkdGgsIGhlaWdodCk7CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKKwlkaXNwY19lbmFibGVfY2hhbm5lbChPTUFQX0RTU19DSEFOTkVMX0xDRCwgdHJ1ZSk7CiAKIAlyZmJpLmZyYW1lZG9uZV9jYWxsYmFjayA9IGNhbGxiYWNrOwogCXJmYmkuZnJhbWVkb25lX2NhbGxiYWNrX2RhdGEgPSBkYXRhOwpAQCAtMzk2LDggKzMyNyw2IEBACiAJaWYgKCFyZmJpLnRlX2VuYWJsZWQpCiAJCWwgPSBGTERfTU9EKGwsIDEsIDQsIDQpOyAvKiBJVEUgKi8KIAotCXBlcmZfbWFya19zdGFydCgpOwotCiAJcmZiaV93cml0ZV9yZWcoUkZCSV9DT05UUk9MLCBsKTsKIH0KIApAQCAtNDA3LDggKzMzNiw2IEBACiAKIAlEU1NEQkcoIkZSQU1FRE9ORVxuIik7CiAKLQlwZXJmX3Nob3coIkRJU1BDIik7Ci0KIAlSRUdfRkxEX01PRChSRkJJX0NPTlRST0wsIDAsIDAsIDApOwogCiAJcmZiaV9lbmFibGVfY2xvY2tzKDApOwpAQCAtNDE2LDExICszNDMsMTAgQEAKIAljYWxsYmFjayA9IHJmYmkuZnJhbWVkb25lX2NhbGxiYWNrOwogCXJmYmkuZnJhbWVkb25lX2NhbGxiYWNrID0gTlVMTDsKIAotCS8qY2FsbGJhY2socmZiaS5mcmFtZWRvbmVfY2FsbGJhY2tfZGF0YSk7Ki8KKwlpZiAoY2FsbGJhY2sgIT0gTlVMTCkKKwkJY2FsbGJhY2socmZiaS5mcmFtZWRvbmVfY2FsbGJhY2tfZGF0YSk7CiAKIAlhdG9taWNfc2V0KCZyZmJpLmNtZF9wZW5kaW5nLCAwKTsKLQotCXByb2Nlc3NfY21kX2ZpZm8oKTsKIH0KIAogI2lmIDEgLyogVkVSQk9TRSAqLwpAQCAtOTM3LDUyICs4NjMsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmZiaV9jb25maWd1cmUpOwogCi1zdGF0aWMgaW50IHJmYmlfZmluZF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwX3JmYmlfcHJlcGFyZV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQl1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgpCiB7Ci0JaWYgKGRzc2RldiA9PSByZmJpLmRzc2RldlswXSkKLQkJcmV0dXJuIDA7CisJdTE2IGR3LCBkaDsKIAotCWlmIChkc3NkZXYgPT0gcmZiaS5kc3NkZXZbMV0pCi0JCXJldHVybiAxOworCWRzc2Rldi0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZkdywgJmRoKTsKIAotCUJVRygpOwotCXJldHVybiAtMTsKLX0KKwlpZiAgKCp4ID4gZHcgfHwgKnkgPiBkaCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoKnggKyAqdyA+IGR3KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotc3RhdGljIHZvaWQgc2lnbmFsX2ZpZm9fd2FpdGVycyh2b2lkKQotewotCWlmIChhdG9taWNfcmVhZCgmcmZiaS5jbWRfZmlmb19mdWxsKSA+IDApIHsKLQkJLyogRFNTREJHKCJTSUdOQUxJTkc6IEZpZm8gbm90IGZ1bGwgZm9yIHdhaXRlciFcbiIpOyAqLwotCQljb21wbGV0ZSgmcmZiaS5jbWRfZG9uZSk7Ci0JCWF0b21pY19kZWMoJnJmYmkuY21kX2ZpZm9fZnVsbCk7Ci0JfQotfQorCWlmICgqeSArICpoID4gZGgpCisJCXJldHVybiAtRUlOVkFMOwogCi0vKiByZXR1cm5zIDEgZm9yIGFzeW5jIG9wLCBhbmQgMCBmb3Igc3luYyBvcCAqLwotc3RhdGljIGludCBkb191cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBzdHJ1Y3QgdXBkYXRlX3JlZ2lvbiAqdXBkKQotewotCXUxNiB4ID0gdXBkLT54OwotCXUxNiB5ID0gdXBkLT55OwotCXUxNiB3ID0gdXBkLT53OwotCXUxNiBoID0gdXBkLT5oOworCWlmICgqdyA9PSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBlcmZfbWFya19zZXR1cCgpOworCWlmICgqdyA9PSAwIHx8ICpoID09IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7Ci0JCS8qZHNzZGV2LT5kcml2ZXItPmVuYWJsZV90ZShkc3NkZXYsIDEpOyAqLwotCQlkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoZHNzZGV2LCAmeCwgJnksICZ3LCAmaCk7CisJCWRzc19zZXR1cF9wYXJ0aWFsX3BsYW5lcyhkc3NkZXYsIHgsIHksIHcsIGgpOworCQlkaXNwY19zZXRfbGNkX3NpemUoKncsICpoKTsKIAl9CiAKLSNpZmRlZiBNRUFTVVJFX1BFUkYKLQlyZmJpLnBlcmZfYnl0ZXMgPSB3ICogaCAqIDI7IC8qIFhYWCBhbHdheXMgMTZiaXQgKi8KLSNlbmRpZgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3JmYmlfcHJlcGFyZV91cGRhdGUpOwogCi0JZHNzZGV2LT5kcml2ZXItPnNldHVwX3VwZGF0ZShkc3NkZXYsIHgsIHksIHcsIGgpOwotCitpbnQgb21hcF9yZmJpX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoLAorCQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKiksIHZvaWQgKmRhdGEpCit7CiAJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7Ci0JCXJmYmlfdHJhbnNmZXJfYXJlYSh3LCBoLCBOVUxMLCBOVUxMKTsKLQkJcmV0dXJuIDE7CisJCXJmYmlfdHJhbnNmZXJfYXJlYSh3LCBoLCBjYWxsYmFjaywgZGF0YSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwogCQl2b2lkIF9faW9tZW0gKmFkZHI7CkBAIC05OTQsMTIzICs5MTEsMTIgQEAKIAogCQlvbWFwX3JmYmlfd3JpdGVfcGl4ZWxzKGFkZHIsIHNjcl93aWR0aCwgeCwgeSwgdywgaCk7CiAKLQkJcGVyZl9zaG93KCJMNCIpOwotCi0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19jbWRfZmlmbyh2b2lkKQotewotCWludCBsZW47Ci0Jc3RydWN0IHVwZGF0ZV9wYXJhbSBwOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZmJpLmNtZF9wZW5kaW5nKSAhPSAxKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAodHJ1ZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmZiaS5jbWRfbG9jaywgZmxhZ3MpOwotCi0JCWxlbiA9IGtmaWZvX291dCgmcmZiaS5jbWRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmcCwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0JCWlmIChsZW4gPT0gMCkgewotCQkJRFNTREJHKCJub3RoaW5nIG1vcmUgaW4gZmlmb1xuIik7Ci0JCQlhdG9taWNfc2V0KCZyZmJpLmNtZF9wZW5kaW5nLCAwKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogRFNTREJHKCJmaWZvIGZ1bGwgJWRcbiIsIHJmYmkuY21kX2ZpZm9fZnVsbC5jb3VudGVyKTsqLwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQotCQlCVUdfT04obGVuICE9IHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0JCUJVR19PTihwLnJmYmlfbW9kdWxlID4gMSk7Ci0KLQkJZHNzZGV2ID0gcmZiaS5kc3NkZXZbcC5yZmJpX21vZHVsZV07Ci0KLQkJaWYgKHAuY21kID09IFJGQklfQ01EX1VQREFURSkgewotCQkJaWYgKGRvX3VwZGF0ZShkc3NkZXYsICZwLnBhci5yKSkKLQkJCQlicmVhazsgLyogYXN5bmMgb3AgKi8KLQkJfSBlbHNlIGlmIChwLmNtZCA9PSBSRkJJX0NNRF9TWU5DKSB7Ci0JCQlEU1NEQkcoIlNpZ25hbGluZyBTWU5DIGRvbmUhXG4iKTsKLQkJCWNvbXBsZXRlKHAucGFyLnN5bmMpOwotCQl9IGVsc2UKLQkJCUJVRygpOworCQljYWxsYmFjayhkYXRhKTsKIAl9CiAKLQlzaWduYWxfZmlmb193YWl0ZXJzKCk7CisJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyB2b2lkIHJmYmlfcHVzaF9jbWQoc3RydWN0IHVwZGF0ZV9wYXJhbSAqcCkKLXsKLQlpbnQgcmV0OwotCi0Jd2hpbGUgKDEpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGF2YWlsYWJsZTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmZiaS5jbWRfbG9jaywgZmxhZ3MpOwotCQlhdmFpbGFibGUgPSBSRkJJX0NNRF9GSUZPX0xFTl9CWVRFUyAtCi0JCQlrZmlmb19sZW4oJnJmYmkuY21kX2ZpZm8pOwotCi0vKgkJRFNTREJHKCIlZCBieXRlcyBsZWZ0IGluIGZpZm9cbiIsIGF2YWlsYWJsZSk7ICovCi0JCWlmIChhdmFpbGFibGUgPCBzaXplb2Yoc3RydWN0IHVwZGF0ZV9wYXJhbSkpIHsKLQkJCURTU0RCRygiR29pbmcgdG8gd2FpdCBiZWNhdXNlIEZJRk8gRlVMTC4uXG4iKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQkJCWF0b21pY19pbmMoJnJmYmkuY21kX2ZpZm9fZnVsbCk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZmJpLmNtZF9kb25lKTsKLQkJCS8qRFNTREJHKCJXb2tlIHVwIGJlY2F1c2UgZmlmbyBub3QgZnVsbCBhbnltb3JlXG4iKTsqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyZXQgPSBrZmlmb19pbigmcmZiaS5jbWRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKilwLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKTsKLS8qCQlEU1NEQkcoInB1c2hlZCAlZCBieXRlc1xuIiwgcmV0KTsqLwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQotCQlCVUdfT04ocmV0ICE9IHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0KLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZmJpX3B1c2hfdXBkYXRlKGludCByZmJpX21vZHVsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi17Ci0Jc3RydWN0IHVwZGF0ZV9wYXJhbSBwOwotCi0JcC5yZmJpX21vZHVsZSA9IHJmYmlfbW9kdWxlOwotCXAuY21kID0gUkZCSV9DTURfVVBEQVRFOwotCi0JcC5wYXIuci54ID0geDsKLQlwLnBhci5yLnkgPSB5OwotCXAucGFyLnIudyA9IHc7Ci0JcC5wYXIuci5oID0gaDsKLQotCURTU0RCRygiUkZCSSBwdXNoZWQgJWQsJWQgJWR4JWRcbiIsIHgsIHksIHcsIGgpOwotCi0JcmZiaV9wdXNoX2NtZCgmcCk7Ci0KLQlwcm9jZXNzX2NtZF9maWZvKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfcHVzaF9zeW5jKGludCByZmJpX21vZHVsZSwgc3RydWN0IGNvbXBsZXRpb24gKnN5bmNfY29tcCkKLXsKLQlzdHJ1Y3QgdXBkYXRlX3BhcmFtIHA7Ci0KLQlwLnJmYmlfbW9kdWxlID0gcmZiaV9tb2R1bGU7Ci0JcC5jbWQgPSBSRkJJX0NNRF9TWU5DOwotCXAucGFyLnN5bmMgPSBzeW5jX2NvbXA7Ci0KLQlyZmJpX3B1c2hfY21kKCZwKTsKLQotCURTU0RCRygiUkZCSSBzeW5jIHB1c2hlZCB0byBjbWQgZmlmb1xuIik7Ci0KLQlwcm9jZXNzX2NtZF9maWZvKCk7Ci19CitFWFBPUlRfU1lNQk9MKG9tYXBfcmZiaV91cGRhdGUpOwogCiB2b2lkIHJmYmlfZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKQEAgLTExNTUsMTIgKzk2MSw4IEBACiB7CiAJdTMyIHJldjsKIAl1MzIgbDsKLQlpbnQgcjsKIAogCXNwaW5fbG9ja19pbml0KCZyZmJpLmNtZF9sb2NrKTsKLQlyID0ga2ZpZm9fYWxsb2MoJnJmYmkuY21kX2ZpZm8sIFJGQklfQ01EX0ZJRk9fTEVOX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CiAKIAlpbml0X2NvbXBsZXRpb24oJnJmYmkuY21kX2RvbmUpOwogCWF0b21pY19zZXQoJnJmYmkuY21kX2ZpZm9fZnVsbCwgMCk7CkBAIC0xMTk2LDQ5ICs5OTgsMTAgQEAKIHsKIAlEU1NEQkcoInJmYmlfZXhpdFxuIik7CiAKLQlrZmlmb19mcmVlKCZyZmJpLmNtZF9maWZvKTsKLQogCWlvdW5tYXAocmZiaS5iYXNlKTsKIH0KIAotLyogc3RydWN0IG9tYXBfZGlzcGxheSBzdXBwb3J0ICovCi1zdGF0aWMgaW50IHJmYmlfZGlzcGxheV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCi17Ci0JaW50IHJmYmlfbW9kdWxlOwotCi0JaWYgKHcgPT0gMCB8fCBoID09IDApCi0JCXJldHVybiAwOwotCi0JcmZiaV9tb2R1bGUgPSByZmJpX2ZpbmRfZGlzcGxheShkc3NkZXYpOwotCi0JcmZiaV9wdXNoX3VwZGF0ZShyZmJpX21vZHVsZSwgeCwgeSwgdywgaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZmJpX2Rpc3BsYXlfc3luYyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gc3luY19jb21wOwotCWludCByZmJpX21vZHVsZTsKLQotCXJmYmlfbW9kdWxlID0gcmZiaV9maW5kX2Rpc3BsYXkoZHNzZGV2KTsKLQotCWluaXRfY29tcGxldGlvbigmc3luY19jb21wKTsKLQlyZmJpX3B1c2hfc3luYyhyZmJpX21vZHVsZSwgJnN5bmNfY29tcCk7Ci0JRFNTREJHKCJXYWl0aW5nIGZvciBTWU5DIHRvIGhhcHBlbi4uLlxuIik7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmc3luY19jb21wKTsKLQlEU1NEQkcoIlJlbGVhc2VkIGZyb20gU1lOQ1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmZiaV9kaXNwbGF5X2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQotewotCWRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJmYmlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoraW50IG9tYXBkc3NfcmZiaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJaW50IHI7CiAKQEAgLTEyNjksNDEgKzEwMzIsMjUgQEAKIAkJCSAmZHNzZGV2LT5jdHJsLnJmYmlfdGltaW5ncyk7CiAKIAotCWlmIChkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKSB7Ci0JCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKGRzc2Rldik7Ci0JCWlmIChyKQotCQkJZ290byBlcnIyOwotCX0KLQogCXJldHVybiAwOwotZXJyMjoKLQlvbWFwX2Rpc3BjX3VucmVnaXN0ZXJfaXNyKGZyYW1lZG9uZV9jYWxsYmFjaywgTlVMTCwKLQkJCURJU1BDX0lSUV9GUkFNRURPTkUpOwogZXJyMToKIAlvbWFwX2Rzc19zdG9wX2RldmljZShkc3NkZXYpOwogZXJyMDoKIAlyZXR1cm4gcjsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19yZmJpX2Rpc3BsYXlfZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgcmZiaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQordm9pZCBvbWFwZHNzX3JmYmlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwogCW9tYXBfZGlzcGNfdW5yZWdpc3Rlcl9pc3IoZnJhbWVkb25lX2NhbGxiYWNrLCBOVUxMLAogCQkJRElTUENfSVJRX0ZSQU1FRE9ORSk7CiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19yZmJpX2Rpc3BsYXlfZGlzYWJsZSk7CiAKIGludCByZmJpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JZHNzZGV2LT5lbmFibGUgPSByZmJpX2Rpc3BsYXlfZW5hYmxlOwotCWRzc2Rldi0+ZGlzYWJsZSA9IHJmYmlfZGlzcGxheV9kaXNhYmxlOwotCWRzc2Rldi0+dXBkYXRlID0gcmZiaV9kaXNwbGF5X3VwZGF0ZTsKLQlkc3NkZXYtPnN5bmMgPSByZmJpX2Rpc3BsYXlfc3luYzsKLQlkc3NkZXYtPmVuYWJsZV90ZSA9IHJmYmlfZGlzcGxheV9lbmFibGVfdGU7Ci0KIAlyZmJpLmRzc2Rldltkc3NkZXYtPnBoeS5yZmJpLmNoYW5uZWxdID0gZHNzZGV2OwotCiAJZHNzZGV2LT5jYXBzID0gT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9zZGkuYwppbmRleCBjMjRmMzA3Li4xMmViNDA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlkaXNwY19sY2RfZW5hYmxlX3NpZ25hbF9wb2xhcml0eSgxKTsKIH0KIAotc3RhdGljIGludCBzZGlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoraW50IG9tYXBkc3Nfc2RpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0ID0gJmRzc2Rldi0+cGFuZWwudGltaW5nczsKIAlzdHJ1Y3QgZHNzX2Nsb2NrX2luZm8gZHNzX2NpbmZvOwpAQCAtNTcsMTIgKzU3LDYgQEAKIAkJZ290byBlcnIwOwogCX0KIAotCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpIHsKLQkJRFNTRVJSKCJkc3NkZXYgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KIAkvKiBJbiBjYXNlIG9mIHNraXBfaW5pdCBzZGlfaW5pdCBoYXMgYWxyZWFkeSBlbmFibGVkIHRoZSBjbG9ja3MgKi8KIAlpZiAoIXNkaS5za2lwX2luaXQpCiAJCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKQEAgLTExOSw3ICsxMTMsNyBAQAogCQltZGVsYXkoMik7CiAJfQogCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7CisJZHNzZGV2LT5tYW5hZ2VyLT5lbmFibGUoZHNzZGV2LT5tYW5hZ2VyKTsKIAogCWlmIChkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKSB7CiAJCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKGRzc2Rldik7CkBAIC0xMjcsMTMgKzEyMSwxMSBAQAogCQkJZ290byBlcnIzOwogCX0KIAotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLQogCXNkaS5za2lwX2luaXQgPSAwOwogCiAJcmV0dXJuIDA7CiBlcnIzOgotCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDApOworCWRzc2Rldi0+bWFuYWdlci0+ZGlzYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogZXJyMjoKIAlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwogZXJyMToKQEAgLTE0MSwxMjAgKzEzMywyNyBAQAogZXJyMDoKIAlyZXR1cm4gcjsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19zZGlfZGlzcGxheV9lbmFibGUpOwogCi1zdGF0aWMgaW50IHNkaV9kaXNwbGF5X3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCi1zdGF0aWMgdm9pZCBzZGlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3ZvaWQgb21hcGRzc19zZGlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKQotCQlyZXR1cm47Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKLQkJaWYgKHNkaV9kaXNwbGF5X3Jlc3VtZShkc3NkZXYpKQotCQkJcmV0dXJuOwotCiAJaWYgKGRzc2Rldi0+ZHJpdmVyLT5kaXNhYmxlKQogCQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwogCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7CisJZHNzZGV2LT5tYW5hZ2VyLT5kaXNhYmxlKGRzc2Rldi0+bWFuYWdlcik7CiAKIAlkc3Nfc2RpX2Rpc2FibGUoKTsKIAogCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7CiAKLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKLQogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7CiB9Ci0KLXN0YXRpYyBpbnQgc2RpX2Rpc3BsYXlfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQotCQlkc3NkZXYtPmRyaXZlci0+c3VzcGVuZChkc3NkZXYpOwotCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7Ci0KLQlkc3Nfc2RpX2Rpc2FibGUoKTsKLQotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7Ci0KLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZGlfZGlzcGxheV9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCWludCByOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwotCi0JciA9IGRzc19zZGlfZW5hYmxlKCk7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyOwotCW1kZWxheSgyKTsKLQotCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDEpOwotCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5yZXN1bWUpCi0JCWRzc2Rldi0+ZHJpdmVyLT5yZXN1bWUoZHNzZGV2KTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLQotCXJldHVybiAwOwotZXJyOgotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgc2RpX2Rpc3BsYXlfc2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlKQotewotCWlmIChtb2RlID09IE9NQVBfRFNTX1VQREFURV9NQU5VQUwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG1vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEKSB7Ci0JCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDApOwotCQlzZGkudXBkYXRlX2VuYWJsZWQgPSAwOwotCX0gZWxzZSB7Ci0JCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDEpOwotCQlzZGkudXBkYXRlX2VuYWJsZWQgPSAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBzZGlfZGlzcGxheV9nZXRfdXBkYXRlX21vZGUoCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlyZXR1cm4gc2RpLnVwZGF0ZV9lbmFibGVkID8gT01BUF9EU1NfVVBEQVRFX0FVVE8gOgotCQlPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNkaV9nZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQotewotCSp0aW1pbmdzID0gZHNzZGV2LT5wYW5lbC50aW1pbmdzOwotfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX3NkaV9kaXNwbGF5X2Rpc2FibGUpOwogCiBpbnQgc2RpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJTREkgaW5pdFxuIik7CiAKLQlkc3NkZXYtPmVuYWJsZSA9IHNkaV9kaXNwbGF5X2VuYWJsZTsKLQlkc3NkZXYtPmRpc2FibGUgPSBzZGlfZGlzcGxheV9kaXNhYmxlOwotCWRzc2Rldi0+c3VzcGVuZCA9IHNkaV9kaXNwbGF5X3N1c3BlbmQ7Ci0JZHNzZGV2LT5yZXN1bWUgPSBzZGlfZGlzcGxheV9yZXN1bWU7Ci0JZHNzZGV2LT5zZXRfdXBkYXRlX21vZGUgPSBzZGlfZGlzcGxheV9zZXRfdXBkYXRlX21vZGU7Ci0JZHNzZGV2LT5nZXRfdXBkYXRlX21vZGUgPSBzZGlfZGlzcGxheV9nZXRfdXBkYXRlX21vZGU7Ci0JZHNzZGV2LT5nZXRfdGltaW5ncyA9IHNkaV9nZXRfdGltaW5nczsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy92ZW5jLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy92ZW5jLmMKaW5kZXggNzQ5YTVhMC4uZjBiYTU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvdmVuYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3ZlbmMuYwpAQCAtNDAwLDExNCArNDAwLDYgQEAKIAlCVUcoKTsKIH0KIAotCi0KLQotCi0vKiBkcml2ZXIgKi8KLXN0YXRpYyBpbnQgdmVuY19wYW5lbF9wcm9iZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gb21hcF9kc3NfcGFsX3RpbWluZ3M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdmVuY19wYW5lbF9yZW1vdmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotfQotCi1zdGF0aWMgaW50IHZlbmNfcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpbnQgciA9IDA7Ci0KLQkvKiB3YWl0IGNvdXBsZSBvZiB2c3luY3MgdW50aWwgZW5hYmxpbmcgdGhlIExDRCAqLwotCW1zbGVlcCg1MCk7Ci0KLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpCi0JCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOwotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIHZlbmNfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKLQkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7Ci0KLQkvKiB3YWl0IGF0IGxlYXN0IDUgdnN5bmNzIGFmdGVyIGRpc2FibGluZyB0aGUgTENEICovCi0KLQltc2xlZXAoMTAwKTsKLX0KLQotc3RhdGljIGludCB2ZW5jX3BhbmVsX3N1c3BlbmQoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXZlbmNfcGFuZWxfZGlzYWJsZShkc3NkZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZlbmNfcGFuZWxfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlyZXR1cm4gdmVuY19wYW5lbF9lbmFibGUoZHNzZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgdmVuY19kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHZlbmNfcGFuZWxfcHJvYmUsCi0JLnJlbW92ZQkJPSB2ZW5jX3BhbmVsX3JlbW92ZSwKLQotCS5lbmFibGUJCT0gdmVuY19wYW5lbF9lbmFibGUsCi0JLmRpc2FibGUJPSB2ZW5jX3BhbmVsX2Rpc2FibGUsCi0JLnN1c3BlbmQJPSB2ZW5jX3BhbmVsX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSB2ZW5jX3BhbmVsX3Jlc3VtZSwKLQotCS5kcml2ZXIgICAgICAgICA9IHsKLQkJLm5hbWUgICA9ICJ2ZW5jIiwKLQkJLm93bmVyICA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotLyogZHJpdmVyIGVuZCAqLwotCi0KLQotaW50IHZlbmNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXU4IHJldl9pZDsKLQotCW11dGV4X2luaXQoJnZlbmMudmVuY19sb2NrKTsKLQotCXZlbmMud3NzX2RhdGEgPSAwOwotCi0JdmVuYy5iYXNlID0gaW9yZW1hcChWRU5DX0JBU0UsIFNaXzFLKTsKLQlpZiAoIXZlbmMuYmFzZSkgewotCQlEU1NFUlIoImNhbid0IGlvcmVtYXAgVkVOQ1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXZlbmMudmRkYV9kYWNfcmVnID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAidmRkYV9kYWMiKTsKLQlpZiAoSVNfRVJSKHZlbmMudmRkYV9kYWNfcmVnKSkgewotCQlpb3VubWFwKHZlbmMuYmFzZSk7Ci0JCURTU0VSUigiY2FuJ3QgZ2V0IFZEREFfREFDIHJlZ3VsYXRvclxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHZlbmMudmRkYV9kYWNfcmVnKTsKLQl9Ci0KLQl2ZW5jX2VuYWJsZV9jbG9ja3MoMSk7Ci0KLQlyZXZfaWQgPSAodTgpKHZlbmNfcmVhZF9yZWcoVkVOQ19SRVZfSUQpICYgMHhmZik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBWRU5DIHJldiAlZFxuIiwgcmV2X2lkKTsKLQotCXZlbmNfZW5hYmxlX2Nsb2NrcygwKTsKLQotCXJldHVybiBvbWFwX2Rzc19yZWdpc3Rlcl9kcml2ZXIoJnZlbmNfZHJpdmVyKTsKLX0KLQotdm9pZCB2ZW5jX2V4aXQodm9pZCkKLXsKLQlvbWFwX2Rzc191bnJlZ2lzdGVyX2RyaXZlcigmdmVuY19kcml2ZXIpOwotCi0JcmVndWxhdG9yX3B1dCh2ZW5jLnZkZGFfZGFjX3JlZyk7Ci0KLQlpb3VubWFwKHZlbmMuYmFzZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZlbmNfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXUzMiBsOwpAQCAtNTQwLDcgKzQzMiw3IEBACiAJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKQogCQlkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOwogCi0JZGlzcGNfZW5hYmxlX2RpZ2l0X291dCgxKTsKKwlkc3NkZXYtPm1hbmFnZXItPmVuYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogfQogCiBzdGF0aWMgdm9pZCB2ZW5jX3Bvd2VyX29mZihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCkBAIC01NDgsNyArNDQwLDcgQEAKIAl2ZW5jX3dyaXRlX3JlZyhWRU5DX09VVFBVVF9DT05UUk9MLCAwKTsKIAlkc3Nfc2V0X2RhY19wd3Jkbl9iZ3ooMCk7CiAKLQlkaXNwY19lbmFibGVfZGlnaXRfb3V0KDApOworCWRzc2Rldi0+bWFuYWdlci0+ZGlzYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogCiAJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKIAkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CkBAIC01NTgsNyArNDUwLDIzIEBACiAJdmVuY19lbmFibGVfY2xvY2tzKDApOwogfQogCi1zdGF0aWMgaW50IHZlbmNfZW5hYmxlX2Rpc3BsYXkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQorCisKKworCisvKiBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgdmVuY19wYW5lbF9wcm9iZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gb21hcF9kc3NfcGFsX3RpbWluZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmVuY19wYW5lbF9yZW1vdmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgaW50IHZlbmNfcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlpbnQgciA9IDA7CiAKQEAgLTU2OCw3ICs0NzYsMTMgQEAKIAogCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpIHsKIAkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycjE7CisJfQorCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CisJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAl2ZW5jX3Bvd2VyX29uKGRzc2Rldik7CkBAIC01NzYsMTMgKzQ5MCwyMSBAQAogCXZlbmMud3NzX2RhdGEgPSAwOwogCiAJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotZXJyOgorCisJLyogd2FpdCBjb3VwbGUgb2YgdnN5bmNzIHVudGlsIGVuYWJsaW5nIHRoZSBMQ0QgKi8KKwltc2xlZXAoNTApOworCiAJbXV0ZXhfdW5sb2NrKCZ2ZW5jLnZlbmNfbG9jayk7CiAKIAlyZXR1cm4gcjsKK2VycjI6CisJdmVuY19wb3dlcl9vZmYoZHNzZGV2KTsKK2VycjE6CisJbXV0ZXhfdW5sb2NrKCZ2ZW5jLnZlbmNfbG9jayk7CisJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIHZlbmNfZGlzYWJsZV9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyB2b2lkIHZlbmNfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJ2ZW5jX2Rpc2FibGVfZGlzcGxheVxuIik7CiAKQEAgLTU5OSw1MyArNTIxLDQwIEBACiAKIAl2ZW5jX3Bvd2VyX29mZihkc3NkZXYpOwogCisJLyogd2FpdCBhdCBsZWFzdCA1IHZzeW5jcyBhZnRlciBkaXNhYmxpbmcgdGhlIExDRCAqLworCW1zbGVlcCgxMDApOworCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKKwkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CisKIAlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKIGVuZDoKIAltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKIH0KIAotc3RhdGljIGludCB2ZW5jX2Rpc3BsYXlfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgaW50IHZlbmNfcGFuZWxfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaW50IHIgPSAwOwotCi0JRFNTREJHKCJ2ZW5jX2Rpc3BsYXlfc3VzcGVuZFxuIik7Ci0KLQltdXRleF9sb2NrKCZ2ZW5jLnZlbmNfbG9jayk7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkgewotCQlyID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCi0JdmVuY19wb3dlcl9vZmYoZHNzZGV2KTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKLWVycjoKLQltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKLQotCXJldHVybiByOworCXZlbmNfcGFuZWxfZGlzYWJsZShkc3NkZXYpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZlbmNfZGlzcGxheV9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQorc3RhdGljIGludCB2ZW5jX3BhbmVsX3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaW50IHIgPSAwOworCXJldHVybiB2ZW5jX3BhbmVsX2VuYWJsZShkc3NkZXYpOworfQogCi0JRFNTREJHKCJ2ZW5jX2Rpc3BsYXlfcmVzdW1lXG4iKTsKK3N0YXRpYyBlbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHZlbmNfZ2V0X3VwZGF0ZV9tb2RlKAorCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJcmV0dXJuIE9NQVBfRFNTX1VQREFURV9BVVRPOworfQogCi0JbXV0ZXhfbG9jaygmdmVuYy52ZW5jX2xvY2spOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpIHsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXZlbmNfcG93ZXJfb24oZHNzZGV2KTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLWVycjoKLQltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKLQotCXJldHVybiByOworc3RhdGljIGludCB2ZW5jX3NldF91cGRhdGVfbW9kZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSAhPSBPTUFQX0RTU19VUERBVEVfQVVUTykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHZlbmNfZ2V0X3RpbWluZ3Moc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LApAQCAtNjY2LDggKzU3NSw4IEBACiAJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gKnRpbWluZ3M7CiAJaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpIHsKIAkJLyogdHVybiB0aGUgdmVuYyBvZmYgYW5kIG9uIHRvIGdldCBuZXcgdGltaW5ncyB0byB1c2UgKi8KLQkJdmVuY19kaXNhYmxlX2Rpc3BsYXkoZHNzZGV2KTsKLQkJdmVuY19lbmFibGVfZGlzcGxheShkc3NkZXYpOworCQl2ZW5jX3BhbmVsX2Rpc2FibGUoZHNzZGV2KTsKKwkJdmVuY19wYW5lbF9lbmFibGUoZHNzZGV2KTsKIAl9CiB9CiAKQEAgLTcxNiwzMCArNjI1LDc5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBlbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHZlbmNfZGlzcGxheV9nZXRfdXBkYXRlX21vZGUoCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyIHZlbmNfZHJpdmVyID0geworCS5wcm9iZQkJPSB2ZW5jX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gdmVuY19wYW5lbF9yZW1vdmUsCisKKwkuZW5hYmxlCQk9IHZlbmNfcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gdmVuY19wYW5lbF9kaXNhYmxlLAorCS5zdXNwZW5kCT0gdmVuY19wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdmVuY19wYW5lbF9yZXN1bWUsCisKKwkuZ2V0X3Jlc29sdXRpb24JPSBvbWFwZHNzX2RlZmF1bHRfZ2V0X3Jlc29sdXRpb24sCisJLmdldF9yZWNvbW1lbmRlZF9icHAgPSBvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcCwKKworCS5zZXRfdXBkYXRlX21vZGUgPSB2ZW5jX3NldF91cGRhdGVfbW9kZSwKKwkuZ2V0X3VwZGF0ZV9tb2RlID0gdmVuY19nZXRfdXBkYXRlX21vZGUsCisKKwkuZ2V0X3RpbWluZ3MJPSB2ZW5jX2dldF90aW1pbmdzLAorCS5zZXRfdGltaW5ncwk9IHZlbmNfc2V0X3RpbWluZ3MsCisJLmNoZWNrX3RpbWluZ3MJPSB2ZW5jX2NoZWNrX3RpbWluZ3MsCisKKwkuZ2V0X3dzcwk9IHZlbmNfZ2V0X3dzcywKKwkuc2V0X3dzcwk9IHZlbmNfc2V0X3dzcywKKworCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm5hbWUgICA9ICJ2ZW5jIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworLyogZHJpdmVyIGVuZCAqLworCisKKworaW50IHZlbmNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKQotCQlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX0FVVE87Ci0JZWxzZQotCQlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOworCXU4IHJldl9pZDsKKworCW11dGV4X2luaXQoJnZlbmMudmVuY19sb2NrKTsKKworCXZlbmMud3NzX2RhdGEgPSAwOworCisJdmVuYy5iYXNlID0gaW9yZW1hcChWRU5DX0JBU0UsIFNaXzFLKTsKKwlpZiAoIXZlbmMuYmFzZSkgeworCQlEU1NFUlIoImNhbid0IGlvcmVtYXAgVkVOQ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXZlbmMudmRkYV9kYWNfcmVnID0gZHNzX2dldF92ZGRhX2RhYygpOworCWlmIChJU19FUlIodmVuYy52ZGRhX2RhY19yZWcpKSB7CisJCWlvdW5tYXAodmVuYy5iYXNlKTsKKwkJRFNTRVJSKCJjYW4ndCBnZXQgVkREQV9EQUMgcmVndWxhdG9yXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIodmVuYy52ZGRhX2RhY19yZWcpOworCX0KKworCXZlbmNfZW5hYmxlX2Nsb2NrcygxKTsKKworCXJldl9pZCA9ICh1OCkodmVuY19yZWFkX3JlZyhWRU5DX1JFVl9JRCkgJiAweGZmKTsKKwlwcmludGsoS0VSTl9JTkZPICJPTUFQIFZFTkMgcmV2ICVkXG4iLCByZXZfaWQpOworCisJdmVuY19lbmFibGVfY2xvY2tzKDApOworCisJcmV0dXJuIG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmdmVuY19kcml2ZXIpOworfQorCit2b2lkIHZlbmNfZXhpdCh2b2lkKQoreworCW9tYXBfZHNzX3VucmVnaXN0ZXJfZHJpdmVyKCZ2ZW5jX2RyaXZlcik7CisKKwlpb3VubWFwKHZlbmMuYmFzZSk7CiB9CiAKIGludCB2ZW5jX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJpbml0X2Rpc3BsYXlcbiIpOwogCi0JZHNzZGV2LT5lbmFibGUgPSB2ZW5jX2VuYWJsZV9kaXNwbGF5OwotCWRzc2Rldi0+ZGlzYWJsZSA9IHZlbmNfZGlzYWJsZV9kaXNwbGF5OwotCWRzc2Rldi0+c3VzcGVuZCA9IHZlbmNfZGlzcGxheV9zdXNwZW5kOwotCWRzc2Rldi0+cmVzdW1lID0gdmVuY19kaXNwbGF5X3Jlc3VtZTsKLQlkc3NkZXYtPmdldF90aW1pbmdzID0gdmVuY19nZXRfdGltaW5nczsKLQlkc3NkZXYtPnNldF90aW1pbmdzID0gdmVuY19zZXRfdGltaW5nczsKLQlkc3NkZXYtPmNoZWNrX3RpbWluZ3MgPSB2ZW5jX2NoZWNrX3RpbWluZ3M7Ci0JZHNzZGV2LT5nZXRfd3NzID0gdmVuY19nZXRfd3NzOwotCWRzc2Rldi0+c2V0X3dzcyA9IHZlbmNfc2V0X3dzczsKLQlkc3NkZXYtPmdldF91cGRhdGVfbW9kZSA9IHZlbmNfZGlzcGxheV9nZXRfdXBkYXRlX21vZGU7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL0tjb25maWcKaW5kZXggYmI2OTRjYy4uNDM0OTZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9LY29uZmlnCkBAIC0xNiwxNiArMTYsNyBAQAogCWRlcGVuZHMgb24gRkJfT01BUDIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBkZWJ1ZyBvdXRwdXQuIFlvdSBoYXZlIHRvIGVuYWJsZSB0aGUgYWN0dWFsIHByaW50aW5nCi0JICB3aXRoIGRlYnVnIG1vZHVsZSBwYXJhbWV0ZXIuCi0KLWNvbmZpZyBGQl9PTUFQMl9GT1JDRV9BVVRPX1VQREFURQotCWJvb2wgIkZvcmNlIG1haW4gZGlzcGxheSB0byBhdXRvbWF0aWMgdXBkYXRlIG1vZGUiCi0JZGVwZW5kcyBvbiBGQl9PTUFQMgotCWhlbHAKLQkgIEZvcmNlcyBtYWluIGRpc3BsYXkgdG8gYXV0b21hdGljIHVwZGF0ZSBtb2RlIChpZiBwb3NzaWJsZSksCi0JICBhbmQgYWxzbyBlbmFibGVzIHRlYXJzeW5jIChpZiBwb3NzaWJsZSkuIEJ5IGRlZmF1bHQKLQkgIGRpc3BsYXlzIHRoYXQgc3VwcG9ydCBtYW51YWwgdXBkYXRlIGFyZSBzdGFydGVkIGluIG1hbnVhbAotCSAgdXBkYXRlIG1vZGUuCisJICB3aXRoICdkZWJ1ZycgbW9kdWxlIHBhcmFtZXRlci4KIAogY29uZmlnIEZCX09NQVAyX05VTV9GQlMKIAlpbnQgIk51bWJlciBvZiBmcmFtZWJ1ZmZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItaW9jdGwuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCmluZGV4IDRjNGJhZmQuLjFmZmE3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCkBAIC0xNjcsMTIgKzE2NywxMiBAQAogCWlmICh3ID09IDAgfHwgaCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWRpc3BsYXktPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZkdywgJmRoKTsKKwlkaXNwbGF5LT5kcml2ZXItPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZkdywgJmRoKTsKIAogCWlmICh4ICsgdyA+IGR3IHx8IHkgKyBoID4gZGgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGRpc3BsYXktPnVwZGF0ZShkaXNwbGF5LCB4LCB5LCB3LCBoKTsKKwlyZXR1cm4gZGlzcGxheS0+ZHJpdmVyLT51cGRhdGUoZGlzcGxheSwgeCwgeSwgdywgaCk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgZm9yIFNHWCBkcml2ZXIgdXNlICovCkBAIC0yMDIsNyArMjAyLDcgQEAKIAllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHVtOwogCWludCByOwogCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUpCisJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPnNldF91cGRhdGVfbW9kZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyID0gZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKGRpc3BsYXksIHVtKTsKKwlyID0gZGlzcGxheS0+ZHJpdmVyLT5zZXRfdXBkYXRlX21vZGUoZGlzcGxheSwgdW0pOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0yMzMsMTAgKzIzMywxNSBAQAogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXkgPSBmYjJkaXNwbGF5KGZiaSk7CiAJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtOwogCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5nZXRfdXBkYXRlX21vZGUpCisJaWYgKCFkaXNwbGF5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW0gPSBkaXNwbGF5LT5nZXRfdXBkYXRlX21vZGUoZGlzcGxheSk7CisJaWYgKCFkaXNwbGF5LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZSkgeworCQkqbW9kZSA9IE9NQVBGQl9BVVRPX1VQREFURTsKKwkJcmV0dXJuIDA7CisJfQorCisJbSA9IGRpc3BsYXktPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRpc3BsYXkpOwogCiAJc3dpdGNoIChtKSB7CiAJY2FzZSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ6CkBAIC0zNzQsNyArMzc5LDcgQEAKIAl2b2lkICpidWY7CiAJaW50IHI7CiAKLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPm1lbW9yeV9yZWFkKQorCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+ZHJpdmVyLT5tZW1vcnlfcmVhZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG1yLT5idWZmZXIsIG1yLT5idWZmZXJfc2l6ZSkpCkBAIC0zODksNyArMzk0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JciA9IGRpc3BsYXktPm1lbW9yeV9yZWFkKGRpc3BsYXksIGJ1ZiwgbXItPmJ1ZmZlcl9zaXplLAorCXIgPSBkaXNwbGF5LT5kcml2ZXItPm1lbW9yeV9yZWFkKGRpc3BsYXksIGJ1ZiwgbXItPmJ1ZmZlcl9zaXplLAogCQkJbXItPngsIG1yLT55LCBtci0+dywgbXItPmgpOwogCiAJaWYgKHIgPiAwKSB7CkBAIC00ODMsNiArNDg4LDcgQEAKIAkJc3RydWN0IG9tYXBmYl9tZW1vcnlfcmVhZAltZW1vcnlfcmVhZDsKIAkJc3RydWN0IG9tYXBmYl92cmFtX2luZm8JCXZyYW1faW5mbzsKIAkJc3RydWN0IG9tYXBmYl90ZWFyc3luY19pbmZvCXRlYXJzeW5jX2luZm87CisJCXN0cnVjdCBvbWFwZmJfZGlzcGxheV9pbmZvCWRpc3BsYXlfaW5mbzsKIAl9IHA7CiAKIAlpbnQgciA9IDA7CkBAIC00OTAsMTggKzQ5NiwxOCBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBPTUFQRkJfU1lOQ19HRlg6CiAJCURCRygiaW9jdGwgU1lOQ19HRlhcbiIpOwotCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnN5bmMpIHsKKwkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPnN5bmMpIHsKIAkJCS8qIERTUzEgbmV2ZXIgcmV0dXJucyBhbiBlcnJvciBoZXJlLCBzbyB3ZSBuZWl0aGVyICovCiAJCQkvKnIgPSAtRUlOVkFMOyovCiAJCQlicmVhazsKIAkJfQogCi0JCXIgPSBkaXNwbGF5LT5zeW5jKGRpc3BsYXkpOworCQlyID0gZGlzcGxheS0+ZHJpdmVyLT5zeW5jKGRpc3BsYXkpOwogCQlicmVhazsKIAogCWNhc2UgT01BUEZCX1VQREFURV9XSU5ET1dfT0xEOgogCQlEQkcoImlvY3RsIFVQREFURV9XSU5ET1dfT0xEXG4iKTsKLQkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT51cGRhdGUpIHsKKwkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPnVwZGF0ZSkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtNTE5LDcgKzUyNSw3IEBACiAKIAljYXNlIE9NQVBGQl9VUERBVEVfV0lORE9XOgogCQlEQkcoImlvY3RsIFVQREFURV9XSU5ET1dcbiIpOwotCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnVwZGF0ZSkgeworCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+dXBkYXRlKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC02NDgsNyArNjU0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IGRpc3BsYXktPndhaXRfdnN5bmMoZGlzcGxheSk7CisJCXIgPSBkaXNwbGF5LT5tYW5hZ2VyLT53YWl0X2Zvcl92c3luYyhkaXNwbGF5LT5tYW5hZ2VyKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9NQVBGQl9XQUlURk9SR086CkBAIC02NjksMTIgKzY3NSwxMiBAQAogCQkJciA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnJ1bl90ZXN0KSB7CisJCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+ZHJpdmVyLT5ydW5fdGVzdCkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCi0JCXIgPSBkaXNwbGF5LT5ydW5fdGVzdChkaXNwbGF5LCBwLnRlc3RfbnVtKTsKKwkJciA9IGRpc3BsYXktPmRyaXZlci0+cnVuX3Rlc3QoZGlzcGxheSwgcC50ZXN0X251bSk7CiAKIAkJYnJlYWs7CiAKQEAgLTY4NCwxMiArNjkwLDEyIEBACiAJCQlyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+cnVuX3Rlc3QpIHsKKwkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPnJ1bl90ZXN0KSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IGRpc3BsYXktPnJ1bl90ZXN0KGRpc3BsYXksIHAudGVzdF9udW0pOworCQlyID0gZGlzcGxheS0+ZHJpdmVyLT5ydW5fdGVzdChkaXNwbGF5LCBwLnRlc3RfbnVtKTsKIAogCQlicmVhazsKIApAQCAtNzMxLDE2ICs3MzcsNDAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFkaXNwbGF5LT5lbmFibGVfdGUpIHsKKwkJaWYgKCFkaXNwbGF5LT5kcml2ZXItPmVuYWJsZV90ZSkgewogCQkJciA9IC1FTk9ERVY7CiAJCQlicmVhazsKIAkJfQogCi0JCXIgPSBkaXNwbGF5LT5lbmFibGVfdGUoZGlzcGxheSwgISFwLnRlYXJzeW5jX2luZm8uZW5hYmxlZCk7CisJCXIgPSBkaXNwbGF5LT5kcml2ZXItPmVuYWJsZV90ZShkaXNwbGF5LAorCQkJCSEhcC50ZWFyc3luY19pbmZvLmVuYWJsZWQpOwogCiAJCWJyZWFrOwogCX0KIAorCWNhc2UgT01BUEZCX0dFVF9ESVNQTEFZX0lORk86IHsKKwkJdTE2IHhyZXMsIHlyZXM7CisKKwkJREJHKCJpb2N0bCBHRVRfRElTUExBWV9JTkZPXG4iKTsKKworCQlpZiAoZGlzcGxheSA9PSBOVUxMKSB7CisJCQlyID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisKKwkJZGlzcGxheS0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkaXNwbGF5LCAmeHJlcywgJnlyZXMpOworCisJCXAuZGlzcGxheV9pbmZvLnhyZXMgPSB4cmVzOworCQlwLmRpc3BsYXlfaW5mby55cmVzID0geXJlczsKKwkJcC5kaXNwbGF5X2luZm8ud2lkdGggPSAwOworCQlwLmRpc3BsYXlfaW5mby5oZWlnaHQgPSAwOworCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmcC5kaXNwbGF5X2luZm8sCisJCQkJCXNpemVvZihwLmRpc3BsYXlfaW5mbykpKQorCQkJciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZmJkZXYtPmRldiwgIlVua25vd24gaW9jdGwgMHgleFxuIiwgY21kKTsKIAkJciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYwppbmRleCBkMTdjYWVmLi40YTc2OTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMKQEAgLTU0LDYgKzU0LDggQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IG9tYXBmYl9mYl9pbml0KHN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYsIHN0cnVjdCBmYl9pbmZvICpmYmkpOworc3RhdGljIGludCBvbWFwZmJfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LAorCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogCiAjaWZkZWYgREVCVUcKIHN0YXRpYyB2b2lkIGRyYXdfcGl4ZWwoc3RydWN0IGZiX2luZm8gKmZiaSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBjb2xvcikKQEAgLTE1Miw5ICsxNTQsOSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBvbWFwZmJfZ2V0X3ZyZmJfb2Zmc2V0KHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSwgaW50IHJvdCkKK3N0YXRpYyB1bnNpZ25lZCBvbWFwZmJfZ2V0X3ZyZmJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSwgaW50IHJvdCkKIHsKLQlzdHJ1Y3QgdnJmYiAqdnJmYiA9ICZvZmJpLT5yZWdpb24udnJmYjsKKwljb25zdCBzdHJ1Y3QgdnJmYiAqdnJmYiA9ICZvZmJpLT5yZWdpb24udnJmYjsKIAl1bnNpZ25lZCBvZmZzZXQ7CiAKIAlzd2l0Y2ggKHJvdCkgewpAQCAtMTc5LDcgKzE4MSw3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAotc3RhdGljIHUzMiBvbWFwZmJfZ2V0X3JlZ2lvbl9yb3RfcGFkZHIoc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLCBpbnQgcm90KQorc3RhdGljIHUzMiBvbWFwZmJfZ2V0X3JlZ2lvbl9yb3RfcGFkZHIoY29uc3Qgc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLCBpbnQgcm90KQogewogCWlmIChvZmJpLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9WUkZCKSB7CiAJCXJldHVybiBvZmJpLT5yZWdpb24udnJmYi5wYWRkcltyb3RdCkBAIC0xODksNyArMTkxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIgb21hcGZiX2dldF9yZWdpb25fcGFkZHIoc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpKQorc3RhdGljIHUzMiBvbWFwZmJfZ2V0X3JlZ2lvbl9wYWRkcihjb25zdCBzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkpCiB7CiAJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpCiAJCXJldHVybiBvZmJpLT5yZWdpb24udnJmYi5wYWRkclswXTsKQEAgLTE5Nyw3ICsxOTksNyBAQAogCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnBhZGRyOwogfQogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpvbWFwZmJfZ2V0X3JlZ2lvbl92YWRkcihzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpvbWFwZmJfZ2V0X3JlZ2lvbl92YWRkcihjb25zdCBzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkpCiB7CiAJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpCiAJCXJldHVybiBvZmJpLT5yZWdpb24udnJmYi52YWRkclswXTsKQEAgLTcwMyw5ICs3MDUsOSBAQAogCXZhci0+d2lkdGggICAgICAgICAgICAgID0gLTE7CiAJdmFyLT5ncmF5c2NhbGUgICAgICAgICAgPSAwOwogCi0JaWYgKGRpc3BsYXkgJiYgZGlzcGxheS0+Z2V0X3RpbWluZ3MpIHsKKwlpZiAoZGlzcGxheSAmJiBkaXNwbGF5LT5kcml2ZXItPmdldF90aW1pbmdzKSB7CiAJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgdGltaW5nczsKLQkJZGlzcGxheS0+Z2V0X3RpbWluZ3MoZGlzcGxheSwgJnRpbWluZ3MpOworCQlkaXNwbGF5LT5kcml2ZXItPmdldF90aW1pbmdzKGRpc3BsYXksICZ0aW1pbmdzKTsKIAogCQkvKiBwaXhjbG9jayBpbiBwcywgdGhlIHJlc3QgaW4gcGl4Y2xvY2sgKi8KIAkJdmFyLT5waXhjbG9jayA9IHRpbWluZ3MucGl4ZWxfY2xvY2sgIT0gMCA/CkBAIC03NzgsOCArNzgwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNhbGNfcm90YXRpb25fb2Zmc2V0X2RtYShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIGludCByb3RhdGlvbikKK3N0YXRpYyB1bnNpZ25lZCBjYWxjX3JvdGF0aW9uX29mZnNldF9kbWEoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCWNvbnN0IHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBpbnQgcm90YXRpb24pCiB7CiAJdW5zaWduZWQgb2Zmc2V0OwogCkBAIC03ODksOCArNzkxLDggQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2FsY19yb3RhdGlvbl9vZmZzZXRfdnJmYihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIGludCByb3RhdGlvbikKK3N0YXRpYyB1bnNpZ25lZCBjYWxjX3JvdGF0aW9uX29mZnNldF92cmZiKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQljb25zdCBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IHJvdGF0aW9uKQogewogCXVuc2lnbmVkIG9mZnNldDsKIApAQCAtMTIyMSwxMSArMTIyMywxMSBAQAogCQlpZiAoZGlzcGxheS0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCiAJCQlnb3RvIGV4aXQ7CiAKLQkJaWYgKGRpc3BsYXktPnJlc3VtZSkKLQkJCXIgPSBkaXNwbGF5LT5yZXN1bWUoZGlzcGxheSk7CisJCWlmIChkaXNwbGF5LT5kcml2ZXItPnJlc3VtZSkKKwkJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnJlc3VtZShkaXNwbGF5KTsKIAotCQlpZiAociA9PSAwICYmIGRpc3BsYXktPmdldF91cGRhdGVfbW9kZSAmJgotCQkJCWRpc3BsYXktPmdldF91cGRhdGVfbW9kZShkaXNwbGF5KSA9PQorCQlpZiAociA9PSAwICYmIGRpc3BsYXktPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlICYmCisJCQkJZGlzcGxheS0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZGlzcGxheSkgPT0KIAkJCQlPTUFQX0RTU19VUERBVEVfTUFOVUFMKQogCQkJZG9fdXBkYXRlID0gMTsKIApAQCAtMTI0MCw4ICsxMjQyLDggQEAKIAkJaWYgKGRpc3BsYXktPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKQogCQkJZ290byBleGl0OwogCi0JCWlmIChkaXNwbGF5LT5zdXNwZW5kKQotCQkJciA9IGRpc3BsYXktPnN1c3BlbmQoZGlzcGxheSk7CisJCWlmIChkaXNwbGF5LT5kcml2ZXItPnN1c3BlbmQpCisJCQlyID0gZGlzcGxheS0+ZHJpdmVyLT5zdXNwZW5kKGRpc3BsYXkpOwogCiAJCWJyZWFrOwogCkBAIC0xMjUyLDExICsxMjU0LDExIEBACiBleGl0OgogCW9tYXBmYl91bmxvY2soZmJkZXYpOwogCi0JaWYgKHIgPT0gMCAmJiBkb191cGRhdGUgJiYgZGlzcGxheS0+dXBkYXRlKSB7CisJaWYgKHIgPT0gMCAmJiBkb191cGRhdGUgJiYgZGlzcGxheS0+ZHJpdmVyLT51cGRhdGUpIHsKIAkJdTE2IHcsIGg7Ci0JCWRpc3BsYXktPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZ3LCAmaCk7CisJCWRpc3BsYXktPmRyaXZlci0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJncsICZoKTsKIAotCQlyID0gZGlzcGxheS0+dXBkYXRlKGRpc3BsYXksIDAsIDAsIHcsIGgpOworCQlyID0gZGlzcGxheS0+ZHJpdmVyLT51cGRhdGUoZGlzcGxheSwgMCwgMCwgdywgaCk7CiAJfQogCiAJcmV0dXJuIHI7CkBAIC0xNDA0LDYgKzE0MDYsNyBAQAogCQl1bnNpZ25lZCBsb25nIHBhZGRyKQogewogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYgPSBvZmJpLT5mYmRldjsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5OwogCWludCBieXRlc3BwOwogCkBAIC0xNDEyLDcgKzE0MTUsNyBAQAogCWlmICghZGlzcGxheSkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKGRpc3BsYXktPmdldF9yZWNvbW1lbmRlZF9icHAoZGlzcGxheSkpIHsKKwlzd2l0Y2ggKG9tYXBmYl9nZXRfcmVjb21tZW5kZWRfYnBwKGZiZGV2LCBkaXNwbGF5KSkgewogCWNhc2UgMTY6CiAJCWJ5dGVzcHAgPSAyOwogCQlicmVhazsKQEAgLTE0MjcsNyArMTQzMCw3IEBACiAJaWYgKCFzaXplKSB7CiAJCXUxNiB3LCBoOwogCi0JCWRpc3BsYXktPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZ3LCAmaCk7CisJCWRpc3BsYXktPmRyaXZlci0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJncsICZoKTsKIAogCQlpZiAob2ZiaS0+cm90YXRpb25fdHlwZSA9PSBPTUFQX0RTU19ST1RfVlJGQikgewogCQkJc2l6ZSA9IG1heChvbWFwX3ZyZmJfbWluX3BoeXNfc2l6ZSh3LCBoLCBieXRlc3BwKSwKQEAgLTE2MzYsOCArMTYzOSw4IEBACiAJaWYgKG9sZF9zaXplID09IHNpemUgJiYgb2xkX3R5cGUgPT0gdHlwZSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZGlzcGxheSAmJiBkaXNwbGF5LT5zeW5jKQotCQkJZGlzcGxheS0+c3luYyhkaXNwbGF5KTsKKwlpZiAoZGlzcGxheSAmJiBkaXNwbGF5LT5kcml2ZXItPnN5bmMpCisJCQlkaXNwbGF5LT5kcml2ZXItPnN5bmMoZGlzcGxheSk7CiAKIAlvbWFwZmJfZnJlZV9mYm1lbShmYmkpOwogCkBAIC0xNzQ1LDcgKzE3NDgsNyBAQAogCQl1MTYgdywgaDsKIAkJaW50IHJvdGF0aW9uID0gKHZhci0+cm90YXRlICsgb2ZiaS0+cm90YXRpb25bMF0pICUgNDsKIAotCQlkaXNwbGF5LT5nZXRfcmVzb2x1dGlvbihkaXNwbGF5LCAmdywgJmgpOworCQlkaXNwbGF5LT5kcml2ZXItPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZ3LCAmaCk7CiAKIAkJaWYgKHJvdGF0aW9uID09IEZCX1JPVEFURV9DVyB8fAogCQkJCXJvdGF0aW9uID09IEZCX1JPVEFURV9DQ1cpIHsKQEAgLTE3NjAsNyArMTc2Myw3IEBACiAJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCiAJCWlmICghdmFyLT5iaXRzX3Blcl9waXhlbCkgewotCQkJc3dpdGNoIChkaXNwbGF5LT5nZXRfcmVjb21tZW5kZWRfYnBwKGRpc3BsYXkpKSB7CisJCQlzd2l0Y2ggKG9tYXBmYl9nZXRfcmVjb21tZW5kZWRfYnBwKGZiZGV2LCBkaXNwbGF5KSkgewogCQkJY2FzZSAxNjoKIAkJCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gMTY7CiAJCQkJYnJlYWs7CkBAIC0xODI4LDcgKzE4MzEsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fZGlzcGxheXM7IGkrKykgewogCQlpZiAoZmJkZXYtPmRpc3BsYXlzW2ldLT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKQotCQkJZmJkZXYtPmRpc3BsYXlzW2ldLT5kaXNhYmxlKGZiZGV2LT5kaXNwbGF5c1tpXSk7CisJCQlmYmRldi0+ZGlzcGxheXNbaV0tPmRyaXZlci0+ZGlzYWJsZShmYmRldi0+ZGlzcGxheXNbaV0pOwogCiAJCW9tYXBfZHNzX3B1dF9kZXZpY2UoZmJkZXYtPmRpc3BsYXlzW2ldKTsKIAl9CkBAIC0yMDExLDcgKzIwMTQsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBvbWFwZmJfc2V0X2RlZl9tb2RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXksIGNoYXIgKm1vZGVfc3RyKQorc3RhdGljIGludCBvbWFwZmJfc2V0X2RlZl9tb2RlKHN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYsCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXksIGNoYXIgKm1vZGVfc3RyKQogewogCWludCByOwogCXU4IGJwcDsKQEAgLTIwMjEsMjAgKzIwMjUsMzcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlkaXNwbGF5LT5wYW5lbC5yZWNvbW1lbmRlZF9icHAgPSBicHA7CisJZmJkZXYtPmJwcF9vdmVycmlkZXNbZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzXS5kc3NkZXYgPSBkaXNwbGF5OworCWZiZGV2LT5icHBfb3ZlcnJpZGVzW2ZiZGV2LT5udW1fYnBwX292ZXJyaWRlc10uYnBwID0gYnBwOworCSsrZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzOwogCi0JaWYgKCFkaXNwbGF5LT5jaGVja190aW1pbmdzIHx8ICFkaXNwbGF5LT5zZXRfdGltaW5ncykKKwlpZiAoIWRpc3BsYXktPmRyaXZlci0+Y2hlY2tfdGltaW5ncyB8fCAhZGlzcGxheS0+ZHJpdmVyLT5zZXRfdGltaW5ncykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyID0gZGlzcGxheS0+Y2hlY2tfdGltaW5ncyhkaXNwbGF5LCAmdGltaW5ncyk7CisJciA9IGRpc3BsYXktPmRyaXZlci0+Y2hlY2tfdGltaW5ncyhkaXNwbGF5LCAmdGltaW5ncyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZGlzcGxheS0+c2V0X3RpbWluZ3MoZGlzcGxheSwgJnRpbWluZ3MpOworCWRpc3BsYXktPmRyaXZlci0+c2V0X3RpbWluZ3MoZGlzcGxheSwgJnRpbWluZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb21hcGZiX2dldF9yZWNvbW1lbmRlZF9icHAoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiwKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCBpOworCisJQlVHX09OKGRzc2Rldi0+ZHJpdmVyLT5nZXRfcmVjb21tZW5kZWRfYnBwID09IE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fYnBwX292ZXJyaWRlczsgKytpKSB7CisJCWlmIChkc3NkZXYgPT0gZmJkZXYtPmJwcF9vdmVycmlkZXNbaV0uZHNzZGV2KQorCQkJcmV0dXJuIGZiZGV2LT5icHBfb3ZlcnJpZGVzW2ldLmJwcDsKKwl9CisKKwlyZXR1cm4gZHNzZGV2LT5kcml2ZXItPmdldF9yZWNvbW1lbmRlZF9icHAoZHNzZGV2KTsKK30KKwogc3RhdGljIGludCBvbWFwZmJfcGFyc2VfZGVmX21vZGVzKHN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYpCiB7CiAJY2hhciAqc3RyLCAqb3B0aW9ucywgKnRoaXNfb3B0OwpAQCAtMjA3Myw3ICsyMDk0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IG9tYXBmYl9zZXRfZGVmX21vZGUoZGlzcGxheSwgbW9kZV9zdHIpOworCQlyID0gb21hcGZiX3NldF9kZWZfbW9kZShmYmRldiwgZGlzcGxheSwgbW9kZV9zdHIpOwogCQlpZiAocikKIAkJCWJyZWFrOwogCX0KQEAgLTIxMTEsMTggKzIxMzIsMjMgQEAKIAlmYmRldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmRldik7CiAKKwlyID0gMDsKIAlmYmRldi0+bnVtX2Rpc3BsYXlzID0gMDsKIAlkc3NkZXYgPSBOVUxMOwogCWZvcl9lYWNoX2Rzc19kZXYoZHNzZGV2KSB7CiAJCW9tYXBfZHNzX2dldF9kZXZpY2UoZHNzZGV2KTsKKwogCQlpZiAoIWRzc2Rldi0+ZHJpdmVyKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBkcml2ZXIgZm9yIGRpc3BsYXlcbiIpOwotCQkJciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGNsZWFudXA7CisJCQlyID0gLUVOT0RFVjsKIAkJfQorCiAJCWZiZGV2LT5kaXNwbGF5c1tmYmRldi0+bnVtX2Rpc3BsYXlzKytdID0gZHNzZGV2OwogCX0KIAorCWlmIChyKQorCQlnb3RvIGNsZWFudXA7CisKIAlpZiAoZmJkZXYtPm51bV9kaXNwbGF5cyA9PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGRpc3BsYXlzXG4iKTsKIAkJciA9IC1FSU5WQUw7CkBAIC0yMTY3LDM1ICsyMTkzLDI4IEBACiAJfQogCiAJaWYgKGRlZl9kaXNwbGF5KSB7Ci0jaWZuZGVmIENPTkZJR19GQl9PTUFQMl9GT1JDRV9BVVRPX1VQREFURQotCQl1MTYgdywgaDsKLSNlbmRpZgotCQlyID0gZGVmX2Rpc3BsYXktPmVuYWJsZShkZWZfZGlzcGxheSk7Ci0JCWlmIChyKQorCQlzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyICpkc3NkcnYgPSBkZWZfZGlzcGxheS0+ZHJpdmVyOworCisJCXIgPSBkZWZfZGlzcGxheS0+ZHJpdmVyLT5lbmFibGUoZGVmX2Rpc3BsYXkpOworCQlpZiAocikgewogCQkJZGV2X3dhcm4oZmJkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgZGlzcGxheSAnJXMnXG4iLAogCQkJCQlkZWZfZGlzcGxheS0+bmFtZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KIAotCQkvKiBzZXQgdGhlIHVwZGF0ZSBtb2RlICovCiAJCWlmIChkZWZfZGlzcGxheS0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpIHsKLSNpZmRlZiBDT05GSUdfRkJfT01BUDJfRk9SQ0VfQVVUT19VUERBVEUKLQkJCWlmIChkZWZfZGlzcGxheS0+ZW5hYmxlX3RlKQotCQkJCWRlZl9kaXNwbGF5LT5lbmFibGVfdGUoZGVmX2Rpc3BsYXksIDEpOwotCQkJaWYgKGRlZl9kaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUpCi0JCQkJZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZShkZWZfZGlzcGxheSwKLQkJCQkJCU9NQVBfRFNTX1VQREFURV9BVVRPKTsKLSNlbHNlIC8qIE1BTlVBTF9VUERBVEUgKi8KLQkJCWlmIChkZWZfZGlzcGxheS0+ZW5hYmxlX3RlKQotCQkJCWRlZl9kaXNwbGF5LT5lbmFibGVfdGUoZGVmX2Rpc3BsYXksIDApOwotCQkJaWYgKGRlZl9kaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUpCi0JCQkJZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZShkZWZfZGlzcGxheSwKKwkJCXUxNiB3LCBoOworCQkJaWYgKGRzc2Rydi0+ZW5hYmxlX3RlKQorCQkJCWRzc2Rydi0+ZW5hYmxlX3RlKGRlZl9kaXNwbGF5LCAxKTsKKwkJCWlmIChkc3NkcnYtPnNldF91cGRhdGVfbW9kZSkKKwkJCQlkc3NkcnYtPnNldF91cGRhdGVfbW9kZShkZWZfZGlzcGxheSwKIAkJCQkJCU9NQVBfRFNTX1VQREFURV9NQU5VQUwpOwogCi0JCQlkZWZfZGlzcGxheS0+Z2V0X3Jlc29sdXRpb24oZGVmX2Rpc3BsYXksICZ3LCAmaCk7Ci0JCQlkZWZfZGlzcGxheS0+dXBkYXRlKGRlZl9kaXNwbGF5LCAwLCAwLCB3LCBoKTsKLSNlbmRpZgorCQkJZHNzZHJ2LT5nZXRfcmVzb2x1dGlvbihkZWZfZGlzcGxheSwgJncsICZoKTsKKwkJCWRlZl9kaXNwbGF5LT5kcml2ZXItPnVwZGF0ZShkZWZfZGlzcGxheSwgMCwgMCwgdywgaCk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZSkKLQkJCQlkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAorCQkJaWYgKGRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKQorCQkJCWRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAogCQkJCQkJT01BUF9EU1NfVVBEQVRFX0FVVE8pOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaAppbmRleCBmN2M5YzczLi5jZDU0ZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaApAQCAtODMsNiArODMsMTIgQEAKIAlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmVybGF5c1sxMF07CiAJdW5zaWduZWQgbnVtX21hbmFnZXJzOwogCXN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWFuYWdlcnNbMTBdOworCisJdW5zaWduZWQgbnVtX2JwcF9vdmVycmlkZXM7CisJc3RydWN0IHsKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2OworCQl1OCBicHA7CisJfSBicHBfb3ZlcnJpZGVzWzEwXTsKIH07CiAKIHN0cnVjdCBvbWFwZmJfY29sb3Jtb2RlIHsKQEAgLTEwNSw2ICsxMTEsOSBAQAogCiBpbnQgb21hcGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICpmYmksIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAoraW50IG9tYXBmYl91cGRhdGVfd2luZG93KHN0cnVjdCBmYl9pbmZvICpmYmksCisJCXUzMiB4LCB1MzIgeSwgdTMyIHcsIHUzMiBoKTsKKwogaW50IGRzc19tb2RlX3RvX2ZiX21vZGUoZW51bSBvbWFwX2NvbG9yX21vZGUgZHNzbW9kZSwKIAkJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggNTNmOGYxMS4uZjk5NzUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZiJWQ6IHJlZ2lzdGVyaW5nIHdpdGggU1EgQVBJXG4iLCBmYl9pbmZvLT5ub2RlKTsKIAogCXB2cjJmYl9tYXAgPSBzcV9yZW1hcChmYl9pbmZvLT5maXguc21lbV9zdGFydCwgZmJfaW5mby0+Zml4LnNtZW1fbGVuLAotCQkJICAgICAgZmJfaW5mby0+Zml4LmlkLCBwZ3Byb3RfdmFsKFBBR0VfU0hBUkVEKSk7CisJCQkgICAgICBmYl9pbmZvLT5maXguaWQsIFBBR0VfU0hBUkVEKTsKIAogCXByaW50ayhLRVJOX05PVElDRSAiZmIlZDogTWFwcGVkIHZpZGVvIG1lbW9yeSB0byBTUSBhZGRyIDB4JWx4XG4iLAogCSAgICAgICBmYl9pbmZvLT5ub2RlLCBwdnIyZmJfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggYTY5ODMwZC4uOGQ3NjUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgTERSQ05UUl9TUkMJMHgwMDAxMDAwMAogI2RlZmluZSBMRFJDTlRSX01SUwkweDAwMDAwMDAyCiAjZGVmaW5lIExEUkNOVFJfTVJDCTB4MDAwMDAwMDEKKyNkZWZpbmUgTERTUl9NUlMJMHgwMDAwMDEwMAogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdjsKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuIHsKQEAgLTEyMiw4ICsxMjQsOCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OwogCXVuc2lnbmVkIGxvbmcgZnJhbWVfZW5kOwogCXVuc2lnbmVkIGxvbmcgcGFuX29mZnNldDsKLQl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX2VuZF93YWl0OworCXN0cnVjdCBjb21wbGV0aW9uIHZzeW5jX2NvbXBsZXRpb247CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0zNjYsMTkgKzM2OCw4IEBACiAJCX0KIAogCQkvKiBWU1lOQyBFbmQgKi8KLQkJaWYgKGxkaW50ciAmIExESU5UUl9WRVMpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7Ci0JCQkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCi0JCQlsY2RjX3dyaXRlX2NoYW5fbWlycm9yKGNoLCBMRFNBMVIsIGNoLT5kbWFfaGFuZGxlICsKLQkJCQkJICAgICAgIGNoLT5uZXdfcGFuX29mZnNldCk7Ci0JCQlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX1NSUyk7Ci0JCQllbHNlCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7Ci0JCQljaC0+cGFuX29mZnNldCA9IGNoLT5uZXdfcGFuX29mZnNldDsKLQkJfQorCQlpZiAobGRpbnRyICYgTERJTlRSX1ZFUykKKwkJCWNvbXBsZXRlKCZjaC0+dnN5bmNfY29tcGxldGlvbik7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzY3LDI1ICs3NTgsNjkgQEAKIAkJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcHJpdiA9IGNoLT5sY2RjOworCXVuc2lnbmVkIGxvbmcgbGRyY250cjsKKwl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCi0JaWYgKGluZm8tPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgotCSAgICBpbmZvLT52YXIueW9mZnNldCA9PSB2YXItPnlvZmZzZXQpCi0JCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KLQotCWNoLT5uZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKKwluZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKIAkJKHZhci0+eG9mZnNldCAqIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4KSk7CiAKLQlpZiAoY2gtPm5ld19wYW5fb2Zmc2V0ICE9IGNoLT5wYW5fb2Zmc2V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbGRpbnRyOwotCQlsZGludHIgPSBsY2RjX3JlYWQoY2gtPmxjZGMsIF9MRElOVFIpOwotCQlsZGludHIgfD0gTERJTlRSX1ZFRTsKLQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKLQkJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7Ci0JfQorCWlmIChuZXdfcGFuX29mZnNldCA9PSBjaC0+cGFuX29mZnNldCkKKwkJcmV0dXJuIDA7CS8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLworCisJbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7CisKKwkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCisJbGNkY193cml0ZV9jaGFuX21pcnJvcihjaCwgTERTQTFSLCBjaC0+ZG1hX2hhbmRsZSArIG5ld19wYW5fb2Zmc2V0KTsKKwlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCisJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLCBsZHJjbnRyIF4gTERSQ05UUl9TUlMpOworCWVsc2UKKwkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7CisKKwljaC0+cGFuX29mZnNldCA9IG5ld19wYW5fb2Zmc2V0OworCisJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgbGRpbnRyOworCWludCByZXQ7CisKKwkvKiBFbmFibGUgVlN5bmMgRW5kIGludGVycnVwdCAqLworCWxkaW50ciA9IGxjZGNfcmVhZChjaC0+bGNkYywgX0xESU5UUik7CisJbGRpbnRyIHw9IExESU5UUl9WRUU7CisJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjaC0+dnN5bmNfY29tcGxldGlvbiwKKwkJCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6CisJCXJldHZhbCA9IHNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhpbmZvKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNoX21vYmlsZV9sY2RjX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnCT0gc2hfbW9iaWxlX2xjZGNfc2V0Y29scmVnLApAQCAtNzk1LDYgKzgzMCw3IEBACiAJLmZiX2NvcHlhcmVhCT0gc2hfbW9iaWxlX2xjZGNfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdAk9IHNoX21vYmlsZV9sY2RjX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzaF9tb2JpbGVfZmJfcGFuX2Rpc3BsYXksCisJLmZiX2lvY3RsICAgICAgID0gc2hfbW9iaWxlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zZXRfYnBwKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgYnBwKQpAQCAtOTYyLDggKzk5OCw4IEBACiAJCQlnb3RvIGVycjE7CiAJCX0KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+Y2hbaV0uZnJhbWVfZW5kX3dhaXQpOworCQlpbml0X2NvbXBsZXRpb24oJnByaXYtPmNoW2ldLnZzeW5jX2NvbXBsZXRpb24pOwogCQlwcml2LT5jaFtqXS5wYW5fb2Zmc2V0ID0gMDsKLQkJcHJpdi0+Y2hbal0ubmV3X3Bhbl9vZmZzZXQgPSAwOwogCiAJCXN3aXRjaCAocGRhdGEtPmNoW2ldLmNoYW4pIHsKIAkJY2FzZSBMQ0RDX0NIQU5fTUFJTkxDRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMgYi9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jCmluZGV4IDE4Yjk1MDcuLjRjZDUwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMKKysrIGIvZHJpdmVycy92aWRlby9zdW54dnI1MDAuYwpAQCAtNDAwLDYgKzQwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlM2RfcGNpX3RhYmxlW10gPSB7CiAJewlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDdhMCksCX0sCisJewlQQ0lfREVWSUNFKDB4MTA5MSwgMHg3YTApLAkJCX0sCiAJewlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDdhMiksCX0sCiAJewkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF8zRExBQlMsCiAJCS5kZXZpY2UgPSBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYwppbmRleCA0YmI5YTBiMS4uNmI1MmJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDCiAvKiBXZSBkb24ndCB5ZXQgaGF2ZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgUFJBTS4uLiBwZXJoYXBzIHdlIGNhbgogICAgYWRhcHQgdGhlbSBmcm9tIHRoZSBQUEMgY29kZT8gKi8KLXN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFXzY0MF80ODBfNjc7CitzdGF0aWMgaW50IGRlZmF1bHRfdm1vZGUgPSBWTU9ERV9DSE9PU0U7CiBzdGF0aWMgaW50IGRlZmF1bHRfY21vZGUgPSBDTU9ERV84OwogI2Vsc2UKIHN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFX05WUkFNOwpAQCAtMzI2LDExICszMjYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKIAlpZiAoIU1BQ0hfSVNfTUFDKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCEobWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1E2MzAKIAkgICAgICAvKiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgKi8KIAkgICAgfHwgbWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1A1ODgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBIYXJkY29kZWQgYWRkcmVzc2VzLi4uIHdlbGNvbWUgdG8gNjhrIE1hY2ludG9zaCBjb3VudHJ5IDotKSAqLwogCWZyYW1lX2J1ZmZlcl9waHlzID0gMHhmOTAwMDAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKaW5kZXggOTdhYWY3Yi4uZDc4NzQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKQEAgLTEzNCwxNSArMTM0LDcgQEAKICAgICB7IDEwMjQsIDAgfSwKIAkxMDI0LCA3NjgKIH07Ci0KLS8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKLSAgICAxMywKLSAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCi0gICAgeyA4MDAsIDAgfSwKLQk4MDAsIDYwMAotfTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiAvKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgzMng2MjQsIDc1SHogbW9kZSAoMTMpICovCiBzdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTMgPSB7CkBAIC0xNTIsNiArMTQ0LDE0IEBACiAJODMyLCA2MjQKIH07CiAKKy8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KK3N0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKKyAgICAxMywKKyAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCisgICAgeyA4MDAsIDAgfSwKKwk4MDAsIDYwMAorfTsKKwogLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MDB4NjAwLCA2MEh6IG1vZGUgKDEwKSAqLwogc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzEwID0gewogICAgIDEyLApAQCAtMTg4LDI0ICsxODgsMTMgQEAKIAlOVUxMLAogCU5VTEwsCiAJJnZhbGt5cmllX3JlZ19pbml0XzEwLAotI2lmZGVmIENPTkZJR19NQUMKLQlOVUxMLAotCU5VTEwsCi0JJnZhbGt5cmllX3JlZ19pbml0XzEzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0jZWxzZQogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMSwKIAlOVUxMLAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMywKKyNpZm5kZWYgQ09ORklHX01BQwogCSZ2YWxreXJpZV9yZWdfaW5pdF8xNCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTUsCiAJTlVMTCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTcsCiAjZW5kaWYKLQlOVUxMLAotCU5VTEwsCi0JTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDUwNWJlODguLjM2OWYyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMjgsNyArMjgsNyBAQAogc3RydWN0IHZpcnRpb19iYWxsb29uCiB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnE7CisJc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnEsICpzdGF0c192cTsKIAogCS8qIFdoZXJlIHRoZSBiYWxsb29uaW5nIHRocmVhZCB3YWl0cyBmb3IgY29uZmlnIHRvIGNoYW5nZS4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBjb25maWdfY2hhbmdlOwpAQCAtNDksNiArNDksMTAgQEAKIAkvKiBUaGUgYXJyYXkgb2YgcGZucyB3ZSB0ZWxsIHRoZSBIb3N0IGFib3V0LiAqLwogCXVuc2lnbmVkIGludCBudW1fcGZuczsKIAl1MzIgcGZuc1syNTZdOworCisJLyogTWVtb3J5IHN0YXRpc3RpY3MgKi8KKwlpbnQgbmVlZF9zdGF0c191cGRhdGU7CisJc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgc3RhdHNbVklSVElPX0JBTExPT05fU19OUl07CiB9OwogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKQEAgLTE1NCw2ICsxNTgsNzIgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc3RhdChzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiLCBpbnQgaWR4LAorCQkJICAgICAgIHUxNiB0YWcsIHU2NCB2YWwpCit7CisJQlVHX09OKGlkeCA+PSBWSVJUSU9fQkFMTE9PTl9TX05SKTsKKwl2Yi0+c3RhdHNbaWR4XS50YWcgPSB0YWc7CisJdmItPnN0YXRzW2lkeF0udmFsID0gdmFsOworfQorCisjZGVmaW5lIHBhZ2VzX3RvX2J5dGVzKHgpICgodTY0KSh4KSA8PCBQQUdFX1NISUZUKQorCitzdGF0aWMgdm9pZCB1cGRhdGVfYmFsbG9vbl9zdGF0cyhzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiKQoreworCXVuc2lnbmVkIGxvbmcgZXZlbnRzW05SX1ZNX0VWRU5UX0lURU1TXTsKKwlzdHJ1Y3Qgc3lzaW5mbyBpOworCWludCBpZHggPSAwOworCisJYWxsX3ZtX2V2ZW50cyhldmVudHMpOworCXNpX21lbWluZm8oJmkpOworCisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfSU4sCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BJTl0pKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQsCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BPVVRdKSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01BSkZMVCwgZXZlbnRzW1BHTUFKRkFVTFRdKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUlORkxULCBldmVudHNbUEdGQVVMVF0pOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1GUkVFLAorCQkJCXBhZ2VzX3RvX2J5dGVzKGkuZnJlZXJhbSkpOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1UT1QsCisJCQkJcGFnZXNfdG9fYnl0ZXMoaS50b3RhbHJhbSkpOworfQorCisvKgorICogV2hpbGUgbW9zdCB2aXJ0cXVldWVzIGNvbW11bmljYXRlIGd1ZXN0LWluaXRpYXRlZCByZXF1ZXN0cyB0byB0aGUgaHlwZXJ2aXNvciwKKyAqIHRoZSBzdGF0cyBxdWV1ZSBvcGVyYXRlcyBpbiByZXZlcnNlLiAgVGhlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdmlydHF1ZXVlCisgKiB3aXRoIGEgc2luZ2xlIGJ1ZmZlci4gIEZyb20gdGhhdCBwb2ludCBmb3J3YXJkLCBhbGwgY29udmVyc2F0aW9ucyBjb25zaXN0IG9mCisgKiBhIGh5cGVydmlzb3IgcmVxdWVzdCAoYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pIHdoaWNoIGRpcmVjdHMgdXMgdG8gcmVmaWxsCisgKiB0aGUgdmlydHF1ZXVlIHdpdGggYSBmcmVzaCBzdGF0cyBidWZmZXIuICBTaW5jZSBzdGF0cyBjb2xsZWN0aW9uIGNhbiBzbGVlcCwKKyAqIHdlIG5vdGlmeSBvdXIga3RocmVhZCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgd29yayB2aWEgc3RhdHNfaGFuZGxlX3JlcXVlc3QoKS4KKyAqLworc3RhdGljIHZvaWQgc3RhdHNfcmVxdWVzdChzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiOworCXVuc2lnbmVkIGludCBsZW47CisKKwl2YiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmICghdmIpCisJCXJldHVybjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAxOworCXdha2VfdXAoJnZiLT5jb25maWdfY2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHNfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOworCXVwZGF0ZV9iYWxsb29uX3N0YXRzKHZiKTsKKworCXZxID0gdmItPnN0YXRzX3ZxOworCXNnX2luaXRfb25lKCZzZywgdmItPnN0YXRzLCBzaXplb2YodmItPnN0YXRzKSk7CisJaWYgKHZxLT52cV9vcHMtPmFkZF9idWYodnEsICZzZywgMSwgMCwgdmIpIDwgMCkKKwkJQlVHKCk7CisJdnEtPnZxX29wcy0+a2ljayh2cSk7Cit9CisKIHN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CkBAIC0xOTAsOCArMjYwLDExIEBACiAJCXRyeV90b19mcmVlemUoKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHZiLT5jb25maWdfY2hhbmdlLAogCQkJCQkgKGRpZmYgPSB0b3dhcmRzX3RhcmdldCh2YikpICE9IDAKKwkJCQkJIHx8IHZiLT5uZWVkX3N0YXRzX3VwZGF0ZQogCQkJCQkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpCiAJCQkJCSB8fCBmcmVlemluZyhjdXJyZW50KSk7CisJCWlmICh2Yi0+bmVlZF9zdGF0c191cGRhdGUpCisJCQlzdGF0c19oYW5kbGVfcmVxdWVzdCh2Yik7CiAJCWlmIChkaWZmID4gMCkKIAkJCWZpbGxfYmFsbG9vbih2YiwgZGlmZik7CiAJCWVsc2UgaWYgKGRpZmYgPCAwKQpAQCAtMjA0LDEwICsyNzcsMTAgQEAKIHN0YXRpYyBpbnQgdmlydGJhbGxvb25fcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YjsKLQlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbMl07Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2FjayB9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiIH07Ci0JaW50IGVycjsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbM107CisJdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2Fjaywgc3RhdHNfcmVxdWVzdCB9OworCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiLCAic3RhdHMiIH07CisJaW50IGVyciwgbnZxczsKIAogCXZkZXYtPnByaXYgPSB2YiA9IGttYWxsb2Moc2l6ZW9mKCp2YiksIEdGUF9LRVJORUwpOwogCWlmICghdmIpIHsKQEAgLTIxOSwxNCArMjkyLDMxIEBACiAJdmItPm51bV9wYWdlcyA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmItPmNvbmZpZ19jaGFuZ2UpOwogCXZiLT52ZGV2ID0gdmRldjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOwogCi0JLyogV2UgZXhwZWN0IHR3byB2aXJ0cXVldWVzLiAqLwotCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgMiwgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKKwkvKiBXZSBleHBlY3QgdHdvIHZpcnRxdWV1ZXM6IGluZmxhdGUgYW5kIGRlZmxhdGUsCisJICogYW5kIG9wdGlvbmFsbHkgc3RhdC4gKi8KKwludnFzID0gdmlydGlvX2hhc19mZWF0dXJlKHZiLT52ZGV2LCBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRKSA/IDMgOiAyOworCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX3ZiOwogCiAJdmItPmluZmxhdGVfdnEgPSB2cXNbMF07CiAJdmItPmRlZmxhdGVfdnEgPSB2cXNbMV07CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2Yi0+dmRldiwgVklSVElPX0JBTExPT05fRl9TVEFUU19WUSkpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCQl2Yi0+c3RhdHNfdnEgPSB2cXNbMl07CisKKwkJLyoKKwkJICogUHJpbWUgdGhpcyB2aXJ0cXVldWUgd2l0aCBvbmUgYnVmZmVyIHNvIHRoZSBoeXBlcnZpc29yIGNhbgorCQkgKiB1c2UgaXQgdG8gc2lnbmFsIHVzIGxhdGVyLgorCQkgKi8KKwkJc2dfaW5pdF9vbmUoJnNnLCB2Yi0+c3RhdHMsIHNpemVvZiB2Yi0+c3RhdHMpOworCQlpZiAodmItPnN0YXRzX3ZxLT52cV9vcHMtPmFkZF9idWYodmItPnN0YXRzX3ZxLAorCQkJCQkJICAmc2csIDEsIDAsIHZiKSA8IDApCisJCQlCVUcoKTsKKwkJdmItPnN0YXRzX3ZxLT52cV9vcHMtPmtpY2sodmItPnN0YXRzX3ZxKTsKKwl9CiAKIAl2Yi0+dGhyZWFkID0ga3RocmVhZF9ydW4oYmFsbG9vbiwgdmIsICJ2YmFsbG9vbiIpOwogCWlmIChJU19FUlIodmItPnRocmVhZCkpIHsKQEAgLTI2NCw3ICszNTQsMTAgQEAKIAlrZnJlZSh2Yik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0geworCVZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QsCisJVklSVElPX0JBTExPT05fRl9TVEFUU19WUSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmFsbG9vbl9kcml2ZXIgPSB7CiAJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCAyOGQ5Y2Y3Li4xYjY1NzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC00NzMsNyArNDczLDggQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cSwgbiwgJnZkZXYtPnZxcywgbGlzdCkgewogCQlpbmZvID0gdnEtPnByaXY7Ci0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKQorCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycyAmJgorCQkJaW5mby0+bXNpeF92ZWN0b3IgIT0gVklSVElPX01TSV9OT19WRUNUT1IpCiAJCQlmcmVlX2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1tpbmZvLT5tc2l4X3ZlY3Rvcl0udmVjdG9yLAogCQkJCSB2cSk7CiAJCXZwX2RlbF92cSh2cSk7CkBAIC03MDIsNyArNzAzLDcgQEAKIAkubmFtZQkJPSAidmlydGlvLXBjaSIsCiAJLmlkX3RhYmxlCT0gdmlydGlvX3BjaV9pZF90YWJsZSwKIAkucHJvYmUJCT0gdmlydGlvX3BjaV9wcm9iZSwKLQkucmVtb3ZlCQk9IHZpcnRpb19wY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodmlydGlvX3BjaV9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gdmlydGlvX3BjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmlydGlvX3BjaV9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmYmQyZWNkLi4wZGI5MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIxLDYgKzIxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCisvKiB2aXJ0aW8gZ3Vlc3QgaXMgY29tbXVuaWNhdGluZyB3aXRoIGEgdmlydHVhbCAiZGV2aWNlIiB0aGF0IGFjdHVhbGx5IHJ1bnMgb24KKyAqIGEgaG9zdCBwcm9jZXNzb3IuICBNZW1vcnkgYmFycmllcnMgYXJlIHVzZWQgdG8gY29udHJvbCBTTVAgZWZmZWN0cy4gKi8KKyNpZmRlZiBDT05GSUdfU01QCisvKiBXaGVyZSBwb3NzaWJsZSwgdXNlIFNNUCBiYXJyaWVycyB3aGljaCBhcmUgbW9yZSBsaWdodHdlaWdodCB0aGFuIG1hbmRhdG9yeQorICogYmFycmllcnMsIGJlY2F1c2UgbWFuZGF0b3J5IGJhcnJpZXJzIGNvbnRyb2wgTU1JTyBlZmZlY3RzIG9uIGFjY2Vzc2VzCisgKiB0aHJvdWdoIHJlbGF4ZWQgbWVtb3J5IEkvTyB3aW5kb3dzICh3aGljaCB2aXJ0aW8gZG9lcyBub3QgdXNlKS4gKi8KKyNkZWZpbmUgdmlydGlvX21iKCkgc21wX21iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHNtcF9ybWIoKQorI2RlZmluZSB2aXJ0aW9fd21iKCkgc21wX3dtYigpCisjZWxzZQorLyogV2UgbXVzdCBmb3JjZSBtZW1vcnkgb3JkZXJpbmcgZXZlbiBpZiBndWVzdCBpcyBVUCBzaW5jZSBob3N0IGNvdWxkIGJlCisgKiBydW5uaW5nIG9uIGFub3RoZXIgQ1BVLCBidXQgU01QIGJhcnJpZXJzIGFyZSBkZWZpbmVkIHRvIGJhcnJpZXIoKSBpbiB0aGF0CisgKiBjb25maWd1cmF0aW9uLiBTbyBmYWxsIGJhY2sgdG8gbWFuZGF0b3J5IGJhcnJpZXJzIGluc3RlYWQuICovCisjZGVmaW5lIHZpcnRpb19tYigpIG1iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHJtYigpCisjZGVmaW5lIHZpcnRpb193bWIoKSB3bWIoKQorI2VuZGlmCisKICNpZmRlZiBERUJVRwogLyogRm9yIGRldmVsb3BtZW50LCB3ZSB3YW50IHRvIGNyYXNoIHdoZW5ldmVyIHRoZSByaW5nIGlzIHNjcmV3ZWQuICovCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCkBAIC0zNiwxMCArNTQsOSBAQAogCQkJcGFuaWMoIiVzOmluX3VzZSA9ICVpXG4iLAkJXAogCQkJICAgICAgKF92cSktPnZxLm5hbWUsIChfdnEpLT5pbl91c2UpOwlcCiAJCShfdnEpLT5pbl91c2UgPSBfX0xJTkVfXzsJCQlcCi0JCW1iKCk7CQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIEVORF9VU0UoX3ZxKSBcCi0JZG8geyBCVUdfT04oIShfdnEpLT5pbl91c2UpOyAoX3ZxKS0+aW5fdXNlID0gMDsgbWIoKTsgfSB3aGlsZSgwKQorCWRvIHsgQlVHX09OKCEoX3ZxKS0+aW5fdXNlKTsgKF92cSktPmluX3VzZSA9IDA7IH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCiAJZG8gewkJCQkJCQlcCkBAIC0yMjEsMTMgKzIzOCwxMyBAQAogCVNUQVJUX1VTRSh2cSk7CiAJLyogRGVzY3JpcHRvcnMgYW5kIGF2YWlsYWJsZSBhcnJheSBuZWVkIHRvIGJlIHNldCBiZWZvcmUgd2UgZXhwb3NlIHRoZQogCSAqIG5ldyBhdmFpbGFibGUgYXJyYXkgZW50cmllcy4gKi8KLQl3bWIoKTsKKwl2aXJ0aW9fd21iKCk7CiAKIAl2cS0+dnJpbmcuYXZhaWwtPmlkeCArPSB2cS0+bnVtX2FkZGVkOwogCXZxLT5udW1fYWRkZWQgPSAwOwogCiAJLyogTmVlZCB0byB1cGRhdGUgYXZhaWwgaW5kZXggYmVmb3JlIGNoZWNraW5nIGlmIHdlIHNob3VsZCBub3RpZnkgKi8KLQltYigpOworCXZpcnRpb19tYigpOwogCiAJaWYgKCEodnEtPnZyaW5nLnVzZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCiAJCS8qIFByb2Qgb3RoZXIgc2lkZSB0byB0ZWxsIGl0IGFib3V0IGNoYW5nZXMuICovCkBAIC0yODYsNyArMzAzLDcgQEAKIAl9CiAKIAkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLwotCXJtYigpOworCXZpcnRpb19ybWIoKTsKIAogCWkgPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5pZDsKIAkqbGVuID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0ubGVuOwpAQCAtMzI0LDcgKzM0MSw3IEBACiAJLyogV2Ugb3B0aW1pc3RpY2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hlY2sgaWYgdGhlcmUgd2FzCiAJICogbW9yZSB0byBkby4gKi8KIAl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKLQltYigpOworCXZpcnRpb19tYigpOwogCWlmICh1bmxpa2VseShtb3JlX3VzZWQodnEpKSkgewogCQlFTkRfVVNFKHZxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzM0LDYgKzM1MSwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCAqdnJpbmdfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQoreworCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqYnVmOworCisJU1RBUlRfVVNFKHZxKTsKKworCWZvciAoaSA9IDA7IGkgPCB2cS0+dnJpbmcubnVtOyBpKyspIHsKKwkJaWYgKCF2cS0+ZGF0YVtpXSkKKwkJCWNvbnRpbnVlOworCQkvKiBkZXRhY2hfYnVmIGNsZWFycyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KKwkJYnVmID0gdnEtPmRhdGFbaV07CisJCWRldGFjaF9idWYodnEsIGkpOworCQlFTkRfVVNFKHZxKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJLyogVGhhdCBzaG91bGQgaGF2ZSBmcmVlZCBldmVyeXRoaW5nLiAqLworCUJVR19PTih2cS0+bnVtX2ZyZWUgIT0gdnEtPnZyaW5nLm51bSk7CisKKwlFTkRfVVNFKHZxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogaXJxcmV0dXJuX3QgdnJpbmdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl92cSkKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwpAQCAtMzYwLDYgKzQwMSw3IEBACiAJLmtpY2sgPSB2cmluZ19raWNrLAogCS5kaXNhYmxlX2NiID0gdnJpbmdfZGlzYWJsZV9jYiwKIAkuZW5hYmxlX2NiID0gdnJpbmdfZW5hYmxlX2NiLAorCS5kZXRhY2hfdW51c2VkX2J1ZiA9IHZyaW5nX2RldGFjaF91bnVzZWRfYnVmLAogfTsKIAogc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgbnVtLApAQCAtNDA2LDggKzQ0OCwxMSBAQAogCS8qIFB1dCBldmVyeXRoaW5nIGluIGZyZWUgbGlzdHMuICovCiAJdnEtPm51bV9mcmVlID0gbnVtOwogCXZxLT5mcmVlX2hlYWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKSB7CiAJCXZxLT52cmluZy5kZXNjW2ldLm5leHQgPSBpKzE7CisJCXZxLT5kYXRhW2ldID0gTlVMTDsKKwl9CisJdnEtPmRhdGFbaV0gPSBOVUxMOwogCiAJcmV0dXJuICZ2cS0+dnE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCmluZGV4IDMxOTVmYjguLjgwYjNiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCkBAIC02MCw3ICs2MCw3IEBACiAKIGNvbmZpZyBIRFFfTUFTVEVSX09NQVAKIAl0cmlzdGF0ZSAiT01BUCBIRFEgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSAxLXdpcmUgb3IgSERRIEludGVyZmFjZQogCSAgb24gYW4gT01BUCBwcm9jZXNzb3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggMDUwZWUxNC4uM2RhM2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtMTk0LDcgKzE5NCw3IEBACiAKIGNvbmZpZyBPTUFQX1dBVENIRE9HCiAJdHJpc3RhdGUgIk9NQVAgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSBPTUFQMTYxMC9PTUFQMTcxMC9PTUFQMjQyMC9PTUFQMzQzMCB3YXRjaGRvZy4gIFNheSAnWScKIAkgIGhlcmUgdG8gZW5hYmxlIHRoZSBPTUFQMTYxMC9PTUFQMTcxMC9PTUFQMjQyMC9PTUFQMzQzMCB3YXRjaGRvZyB0aW1lci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKaW5kZXggMmU5NGI3MS4uMmJiOTVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CkBAIC04MCw2ICs4MSw4IEBACiAvKiBQb2ludGVyIHRvIHRoZSByZW1hcHBlZCBXRFQgSU8gc3BhY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgYXI3X3dkdCAqYXI3X3dkdDsKIAorc3RhdGljIHN0cnVjdCBjbGsgKnZidXNfY2xrOworCiBzdGF0aWMgdm9pZCBhcjdfd2R0X2tpY2sodTMyIHZhbHVlKQogewogCVdSSVRFX1JFRyhhcjdfd2R0LT5raWNrX2xvY2ssIDB4NTU1NSk7CkBAIC0xMzgsMTcgKzE0MSwxOSBAQAogc3RhdGljIHZvaWQgYXI3X3dkdF91cGRhdGVfbWFyZ2luKGludCBuZXdfbWFyZ2luKQogewogCXUzMiBjaGFuZ2U7CisJdTMyIHZidXNfcmF0ZTsKIAotCWNoYW5nZSA9IG5ld19tYXJnaW4gKiAoYXI3X3ZidXNfZnJlcSgpIC8gcHJlc2NhbGVfdmFsdWUpOworCXZidXNfcmF0ZSA9IGNsa19nZXRfcmF0ZSh2YnVzX2Nsayk7CisJY2hhbmdlID0gbmV3X21hcmdpbiAqICh2YnVzX3JhdGUgLyBwcmVzY2FsZV92YWx1ZSk7CiAJaWYgKGNoYW5nZSA8IDEpCiAJCWNoYW5nZSA9IDE7CiAJaWYgKGNoYW5nZSA+IDB4ZmZmZikKIAkJY2hhbmdlID0gMHhmZmZmOwogCWFyN193ZHRfY2hhbmdlKGNoYW5nZSk7Ci0JbWFyZ2luID0gY2hhbmdlICogcHJlc2NhbGVfdmFsdWUgLyBhcjdfdmJ1c19mcmVxKCk7CisJbWFyZ2luID0gY2hhbmdlICogcHJlc2NhbGVfdmFsdWUgLyB2YnVzX3JhdGU7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FCiAJICAgICAgICI6IHRpbWVyIG1hcmdpbiAlZCBzZWNvbmRzIChwcmVzY2FsZSAlZCwgY2hhbmdlICVkLCBmcmVxICVkKVxuIiwKLQkgICAgICAgbWFyZ2luLCBwcmVzY2FsZV92YWx1ZSwgY2hhbmdlLCBhcjdfdmJ1c19mcmVxKCkpOworCSAgICAgICBtYXJnaW4sIHByZXNjYWxlX3ZhbHVlLCBjaGFuZ2UsIHZidXNfcmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFyN193ZHRfZW5hYmxlX3dkdCh2b2lkKQpAQCAtMjk4LDYgKzMwMywxMyBAQAogCQlnb3RvIG91dF9tZW1fcmVnaW9uOwogCX0KIAorCXZidXNfY2xrID0gY2xrX2dldChOVUxMLCAidmJ1cyIpOworCWlmIChJU19FUlIodmJ1c19jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IGNvdWxkIG5vdCBnZXQgdmJ1cyBjbG9ja1xuIik7CisJCXJjID0gUFRSX0VSUih2YnVzX2Nsayk7CisJCWdvdG8gb3V0X21lbV9yZWdpb247CisJfQorCiAJYXI3X3dkdF9kaXNhYmxlX3dkdCgpOwogCWFyN193ZHRfcHJlc2NhbGUocHJlc2NhbGVfdmFsdWUpOwogCWFyN193ZHRfdXBkYXRlX21hcmdpbihtYXJnaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDQzMGE1ODQuLmM3YTk0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTk2LDkgKzk2LDYgQEAKIHsKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCi0JaWYgKHdkdF9jbGspCi0JCWNsa19zZXRfcmF0ZSh3ZHRfY2xrLCAxKTsKLQogCS8qIHN0b3AgY291bnRlciwgaW5pdGlhdGUgY291bnRlciByZXNldCAqLwogCV9fcmF3X3dyaXRlbChSRVNFVF9DT1VOVCwgV0RUSU1fQ1RSTCh3ZHRfYmFzZSkpOwogCS8qd2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuIDEwMCUgZ3VhcmFudGVlIGV2ZW50ICovCkBAIC0xMjUsMTkgKzEyMiwyNSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAlfX3Jhd193cml0ZWwoMCwgV0RUSU1fQ1RSTCh3ZHRfYmFzZSkpOwkvKnN0b3AgY291bnRlciAqLwotCWlmICh3ZHRfY2xrKQotCQljbGtfc2V0X3JhdGUod2R0X2NsaywgMCk7CiAKIAlzcGluX3VubG9jaygmaW9fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcG54NDAwOF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlpbnQgcmV0OworCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJY2xlYXJfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpOwogCisJcmV0ID0gY2xrX2VuYWJsZSh3ZHRfY2xrKTsKKwlpZiAocmV0KSB7CisJCWNsZWFyX2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cyk7CisJCXJldHVybiByZXQ7CisJfQorCiAJd2R0X2VuYWJsZSgpOwogCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwpAQCAtMjI1LDYgKzIyOCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBVENIRE9HOiBEZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZGx5XG4iKTsKIAogCXdkdF9kaXNhYmxlKCk7CisJY2xrX2Rpc2FibGUod2R0X2Nsayk7CiAJY2xlYXJfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKTsKIAljbGVhcl9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CiAKQEAgLTI3MywyNSArMjc3LDMzIEBACiAJfQogCXdkdF9iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MocmVzLT5zdGFydCk7CiAKLQl3ZHRfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2R0X2NrIik7CisJd2R0X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUih3ZHRfY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKHdkdF9jbGspOwogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwogCQlrZnJlZSh3ZHRfbWVtKTsKIAkJZ290byBvdXQ7Ci0JfSBlbHNlCi0JCWNsa19zZXRfcmF0ZSh3ZHRfY2xrLCAxKTsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKHdkdF9jbGspOworCWlmIChyZXQpIHsKKwkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKKwkJa2ZyZWUod2R0X21lbSk7CisJCWdvdG8gb3V0OworCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBueDQwMDhfd2R0X21pc2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiY2Fubm90IHJlZ2lzdGVyIG1pc2MgZGV2aWNlXG4iKTsKIAkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKIAkJa2ZyZWUod2R0X21lbSk7Ci0JCWNsa19zZXRfcmF0ZSh3ZHRfY2xrLCAwKTsKKwkJY2xrX2Rpc2FibGUod2R0X2Nsayk7CisJCWNsa19wdXQod2R0X2Nsayk7CiAJfSBlbHNlIHsKIAkJYm9vdF9zdGF0dXMgPSAoX19yYXdfcmVhZGwoV0RUSU1fUkVTKHdkdF9iYXNlKSkgJiBXRE9HX1JFU0VUKSA/CiAJCSAgICBXRElPRl9DQVJEUkVTRVQgOiAwOwogCQl3ZHRfZGlzYWJsZSgpOwkJLypkaXNhYmxlIGZvciBub3cgKi8KKwkJY2xrX2Rpc2FibGUod2R0X2Nsayk7CiAJCXNldF9iaXQoV0RUX0RFVklDRV9JTklURUQsICZ3ZHRfc3RhdHVzKTsKIAl9CiAKQEAgLTMwMiwxMSArMzE0LDEwIEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbng0MDA4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnBueDQwMDhfd2R0X21pc2NkZXYpOwotCWlmICh3ZHRfY2xrKSB7Ci0JCWNsa19zZXRfcmF0ZSh3ZHRfY2xrLCAwKTsKLQkJY2xrX3B1dCh3ZHRfY2xrKTsKLQkJd2R0X2NsayA9IE5VTEw7Ci0JfQorCisJY2xrX2Rpc2FibGUod2R0X2Nsayk7CisJY2xrX3B1dCh3ZHRfY2xrKTsKKwogCWlmICh3ZHRfbWVtKSB7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCBjZTYwMmRkLi4yZjg0MTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtNjQ5LDkgKzY0OSwxMyBAQAogCQkJCWludCBiaXRfaWR4ID0gX19mZnMocGVuZGluZ19iaXRzKTsKIAkJCQlpbnQgcG9ydCA9ICh3b3JkX2lkeCAqIEJJVFNfUEVSX0xPTkcpICsgYml0X2lkeDsKIAkJCQlpbnQgaXJxID0gZXZ0Y2huX3RvX2lycVtwb3J0XTsKKwkJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQkJCQlpZiAoaXJxICE9IC0xKQotCQkJCQloYW5kbGVfaXJxKGlycSwgcmVncyk7CisJCQkJaWYgKGlycSAhPSAtMSkgeworCQkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCQkJaWYgKGRlc2MpCisJCQkJCQlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOworCQkJCX0KIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDFjMDBkMDUuLjhhZjBmYzcgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zMiwxMSArMzIsMTEgQEAKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUQVJJX0RTUDU2SykgKz0gZHNwNTZrL2Jvb3RzdHJhcC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQVRNX0FNQkFTU0FET1IpICs9IGF0bXNhcjExLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC1lMS01LjIuNy4wLmZ3IGJueDJ4LWUxaC01LjIuNy4wLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDIpICs9IGJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncgXAotCQkJICAgICBibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncgXAorZnctc2hpcHBlZC0kKENPTkZJR19CTlgyWCkgKz0gYm54MngtZTEtNS4yLjEzLjAuZncgYm54MngtZTFoLTUuMi4xMy4wLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX0JOWDIpICs9IGJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncgXAorCQkJICAgICBibngyL2JueDItbWlwcy0wNi01LjAuMC5qNi5mdyBcCiAJCQkgICAgIGJueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX0NBU1NJTkkpICs9IHN1bi9jYXNzaW5pLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCBhYzE3NGZlLi5lOGU1NTBmIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC02NzksMTEgKzY3OSwxMSBAQAogCiBEcml2ZXI6IGJueDJ4OiBCcm9hZGNvbSBFdmVyZXN0CiAKLUZpbGU6IGJueDJ4LWUxLTUuMi43LjAuZncuaWhleAotRmlsZTogYm54MngtZTFoLTUuMi43LjAuZncuaWhleAorRmlsZTogYm54MngtZTEtNS4yLjEzLjAuZncKK0ZpbGU6IGJueDJ4LWUxaC01LjIuMTMuMC5mdwogCiBMaWNlbnNlOgotICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogCiAgIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAogICBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyZTZjOC4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNTg0MSArMCwwIEBACi06MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDRDQzgwMDAwMDBDOEYzCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNENDOEM0Ci06MTAwMDIwMDAwMDAwMDAxNDAwMDA0RDkwMDgwMDAwODgwODAwMDAwMDQ3Ci06MTAwMDMwMDAwMDAwNThEMDAwMDA0REE0MDgwMDVBNDAwMDAwMDA4NDgxCi06MTAwMDQwMDAwMDAwQTY3NDA4MDA1OEQwMDAwMDAxNTQwMDAwQTZGODczCi06MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDcwRjAwMDAwQTg0QzMzCi06MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzBGMDI4Ci06MTAwMDcwMDAwMDAwMDAyNDAwMDExOTNDMDgwMDA0ODgwODAwMDQwMDY2Ci06MTAwMDgwMDAwMDAwMTc1QzAwMDExOTYwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNCMzgwMDAxMzBCQzM4Ci06MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MDgwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLTowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgotOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMwotOjEwMDBFMDAwNkEzMzAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2OQotOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNwotOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQotOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNwotOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgotOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQwotOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgotOjEwMDFGMDAwMjQ0MjREMDAzQzAzMDgwMDI0NjM0REZDQUM0MDAwMDA0OQotOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQotOjEwMDIxMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAyMAotOjEwMDIyMDAwM0MxQzA4MDAyNzlDNEQwMDBFMDAwMjE0MDAwMDAwMDAzQQotOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBGNQotOjEwMDI0MDAwOTc0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEIyNgotOjEwMDI1MDAwMjg2MjIwMDExNDQwMDAyRjAwMDAxMDIxMjQwMjQwMDBEOQotOjEwMDI2MDAwMTA2MjAwMjUwMDAwMDAwMDI0MDI2MDAwMTA2MjAwMjZEOQotOjEwMDI3MDAwMDAwMDEwMjEwQTAwMDA5NDhGQkYwMDE0Mjc1MDAxMDBENQotOjEwMDI4MDAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxM0MwMjA4MDBGOQotOjEwMDI5MDAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxMEUwMDA1MkI5MwotOjEwMDJBMDAwMDAwMDAwMDA5NjAzMDAwODNDMDYwODAwOTRDNjREQkVGRQotOjEwMDJCMDAwOEUwNDAwMTg4RjgyMDAyMDk2MDUwMDBDMDAwMzFDMDA5RAotOjEwMDJDMDAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0MjQwNDAwMDE3RAotOjEwMDJEMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQzNgotOjEwMDJFMDAwQUM0MDAwMTgwRTAwMDU1MEFDNDMwMDFDMDAwMDE4MjE2MwotOjEwMDJGMDAwMEEwMDAwOTMwMDYwMTAyMTBFMDAwM0JEMDAwMDAwMDAwMgotOjEwMDMwMDAwMEEwMDAwOTMwMDAwMTAyMTBFMDAwRjgxMDAwMDAwMDA4MQotOjEwMDMxMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgxMAotOjEwMDMyMDAwMjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwQUZCRjAwMTgxOQotOjEwMDMzMDAwQUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCMjQwMjAwMUFGMQotOjEwMDM0MDAwOTYxMTAwMDgxNDYyMDA1QjAwMDAyODIxMzIyMjAwMDE4RgotOjEwMDM1MDAwMTA0MDAwMDgwMDAwMDAwMDhFMDIwMDAwOTYwMzAwMTQwOAotOjEwMDM2MDAwMDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMEEwMDAwREJGNgotOjEwMDM3MDAwQTQ0MzAwODAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMjg2QQotOjEwMDM4MDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMDg0RAotOjEwMDM5MDAwOTc0MzAxMEM4Rjg1MDAyMDMwNDIwMDNFMzA2M0ZGRkYwMQotOjEwMDNBMDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEY0MjAxMDA5RgotOjEwMDNCMDAwM0MwNjA4MDA5NEM2NERCRUFDQTIwMDA0OTc0MzAxMTY0QgotOjEwMDNDMDAwOTc0NDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYxNAotOjEwMDNEMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTc0MjAxMTAyNAotOjEwMDNFMDAwOTc0MzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkY1MAotOjEwMDNGMDAwMDA0MzEwMjVBQ0EyMDAwQzk3NDIwMTE0MzA0MkZGRkZDRAotOjEwMDQwMDAwQUNBMjAwMTA4RjQyMDExOEFDQTIwMDE0OTM0MjAxMEI2MQotOjEwMDQxMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwNTUwQUNBNjAwMUMzNAotOjEwMDQyMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBDQwotOjEwMDQzMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJERQotOjEwMDQ0MDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ3MgotOjEwMDQ1MDAwMTA4MDAwMTgwMDAyMjgyQjhGNDIwMkI4MDQ0MzAwMDhDNQotOjEwMDQ2MDAwOEUwMjAwMjAzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDEwMQotOjEwMDQ3MDAwM0MwMTA4MDBBQzIyMDA2MDBBMDAwMEZCMjQwNTAwMDFEQQotOjEwMDQ4MDAwOTYwMzAwMTYwMDAwMjgyMUFGNDIwMjgwOEUwMjAwMDQ2RAotOjEwMDQ5MDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjg3OAotOjEwMDRBMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDAzMAotOjEwMDRCMDAwQUMyMjAwNUM4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwOQotOjEwMDRDMDAwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBOQotOjEwMDREMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0Mjc1MDAxMDAzQgotOjEwMDRFMDAwOTIwMzAwMEIyNDAyMDAwMzk2MTEwMDA4MTQ2MjAwNkRCMQotOjEwMDRGMDAwMDAwMDIwMjEzMjIyMDAwMTEwNDAwMDA4MDAwMDAwMDAwRQotOjEwMDUwMDAwOEUwMjAwMDA5NjAzMDAxNDAwMDIxMUMyMDAwMjEwNDA4NwotOjEwMDUxMDAwMDA1QTEwMjEwQTAwMDE0MkE0NDMwMDgwM0MwMjA4MDA1NgotOjEwMDUyMDAwOEM0MjAwMjAxMDQwMDAyNTAwMDAwMDAwMEUwMDA1MkIyQQotOjEwMDUzMDAwMDAwMDAwMDA5NzQyMDEwODk3NDMwMTBDOEY4NTAwMjBCRQotOjEwMDU0MDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVEQwotOjEwMDU1MDAwQUNBMjAwMDA4RjQyMDEwMDNDMDYwODAwOTRDNjREQkVDQwotOjEwMDU2MDAwQUNBMjAwMDQ5NzQzMDExNjk3NDQwMTBFM0MwMjIwMDAwMAotOjEwMDU3MDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDhCMgotOjEwMDU4MDAwMDBDMjMwMjU5NzQyMDExMDk3NDMwMTEyMjQwNDAwMDE1NAotOjEwMDU5MDAwMDAwMjE0MDAzMDYzRkZGRjAwNDMxMDI1QUNBMjAwMENFMgotOjEwMDVBMDAwOTc0MjAxMTQzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQyRgotOjEwMDVCMDAwQUNBMDAwMTgwRTAwMDU1MEFDQTYwMDFDM0MwMjA4MDBDMAotOjEwMDVDMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA2MwotOjEwMDVEMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDEwMwotOjEwMDVFMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBMzIyMjAwMDJENAotOjEwMDVGMDAwOEY0MjAyQjgwNDQzMDAwODhFMDIwMDIwM0MwMjA4MDAyQgotOjEwMDYwMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBFMgotOjEwMDYxMDAwMEEwMDAxNzcyNDA0MDAwMTk2MDMwMDE2MDAwMDIwMjEzRgotOjEwMDYyMDAwQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0QUY0MjAyODhEOAotOjEwMDYzMDAwM0MwMjEwMDBBRjQyMDJCODNDMDIwODAwOEM0MjAwNUM1MQotOjEwMDY0MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDMEEwMDAxNzg1MQotOjEwMDY1MDAwOEZCRjAwMTgxMDQwMDAxMzAwMDAyMDIxOEY0MzAxMDRCOQotOjEwMDY2MDAwM0MwMjYwMjBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkVEMQotOjEwMDY3MDAwMzA0MjAzRkYxNDQzMDAwQjAwMDAyMDIxOEY0MjAxMDA5MQotOjEwMDY4MDAwMDAwMjExQzAyNDQyRkZGQzJDNDIwMDA4MTA0MDAwMDI2RQotOjEwMDY5MDAwMjQwMzAwMDIwMDAzMUY0MDNDMDI2MDAwQUM0MzY5MTRDNQotOjEwMDZBMDAwMDAwMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMAotOjEwMDZCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY0MzAxMDBDNwotOjEwMDZDMDAwMjQwMjAxMDA1MDYyMDAwMzAwMDMxMUMyMDAwMDAwMEQ2QgotOjEwMDZEMDAwMDAwMzExQzIwMDAyMTA0MDAwNUExMDIxQTQ0MDAwODAwMwotOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTkzNjIwMDAwMDNFMDAwMDgwRQotOjEwMDZGMDAwQUY4MDAwMDAwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhDNAotOjEwMDcwMDAwMDAwMDEwMjEyNDAyMDEwMDE0ODIwMDA4MDAwMDAwMDBGMwotOjEwMDcxMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAxRAotOjEwMDcyMDAwQUMyMjAwRkMwQTAwMDE5RjMwQTIwMDIwM0MwMjA4MDAxRAotOjEwMDczMDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ2OQotOjEwMDc0MDAwMzBBMjAwMjAxMDQwMDAwODMwQTMwMDEwM0MwMjA4MDAzNgotOjEwMDc1MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgzRgotOjEwMDc2MDAwMDNFMDAwMDgwMDAwMDAwMDEwNjAwMDA4MDAwMDAwMDAyNgotOjEwMDc3MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBCNAotOjEwMDc4MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA2NQotOjEwMDc5MDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDAwRgotOjEwMDdBMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAxNQotOjEwMDdCMDAwMjc0NDAxMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMUJBRAotOjEwMDdDMDAwMzA2NjAwMDI4RjQyMDJCODA0NDEwMDA4MjQwNTAwMDE4RgotOjEwMDdEMDAwM0MwMjA4MDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBGOQotOjEwMDdFMDAwQUMyMjAwNjAwQTAwMDFFQjhGQkYwMDEwOEM4MjAwMjA1OQotOjEwMDdGMDAwOTQ4MzAwMTYwMDAwMjgyMUFGNDIwMjgwOEM4MjAwMDRGRQotOjEwMDgwMDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgwNAotOjEwMDgxMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBCQwotOjEwMDgyMDAwQUMyMjAwNUMwQTAwMDFFQjhGQkYwMDEwMTBDMDAwMDY3NAotOjEwMDgzMDAwMDA2MDI4MjE4RjQ0MDEwMDBFMDAwMThGMDAwMDAwMDA5RAotOjEwMDg0MDAwMEEwMDAxRUEyNDA1MDAwMThGODIwMDA4OEY0MzAxMDQ5OQotOjEwMDg1MDAwNTA0MzAwMDcwMDAwMjgyMThGNDQwMTAwMEUwMDAxOEY0MwotOjEwMDg2MDAwMDAwMDAwMDA4RjQyMDEwNEFGODIwMDA4MDAwMDI4MjEzMAotOjEwMDg3MDAwOEZCRjAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMTg2MgotOjEwMDg4MDAwM0MwMjA4MDA4QzQyMDA4ODI3NDMwMTAwOTQ2NTAwMEM1QwotOjEwMDg5MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg4OEM2NDAwMTg0RQotOjEwMDhBMDAwMDM0NTEwMjE5MDQ1NDAwMEFGNDQwMDM4OEM2MjAwMUM4NQotOjEwMDhCMDAwMjQwM0ZGRjgwMDA1MkUwMDAwNDMxMDI0MzQ0MjAwMDRGNgotOjEwMDhDMDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDA5NwotOjEwMDhEMDAwMDAwMDAwMDAwMDAwMDAwMEFGNDUwNDA0MDAwMDAwMDAxQwotOjEwMDhFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwMDE0RAotOjEwMDhGMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwMDkwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEMDAwMDEwMjExNwotOjEwMDkxMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMjAwMThCMAotOjEwMDkyMDAwM0MwMzYwMTBBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTBBQgotOjEwMDkzMDAwOEM2NDUwMDAyNDAyRkY3RjNDMUE4MDAwMDA4MjIwMjQzNwotOjEwMDk0MDAwMzQ4NDM4MEMyNDAyMDAzN0FDNjQ1MDAwM0MxMjA4MDA5OAotOjEwMDk1MDAwMjY1MjREMzhBRjQyMDAwODI0MDIwQzgwQUY0MjAwMjREQQotOjEwMDk2MDAwM0MxQjgwMDgzQzA2MDgwMDI0QzYwNjJDMDI0MDEwMjFDRgotOjEwMDk3MDAwMjQwNDAwMUMyNDg0RkZGRkFDNDYwMDAwMDQ4MUZGRkQxQQotOjEwMDk4MDAwMjQ0MjAwMDQzQzAyMDgwMDI0NDIwMTZDM0MwMTA4MDA5RgotOjEwMDk5MDAwQUMyMjRENDAzQzAyMDgwMDI0NDIwNDA0M0MwMTA4MDAwMwotOjEwMDlBMDAwQUMyMjRENDQzQzAyMDgwMDI0NDIwN0I4M0MwMTA4MDAzOAotOjEwMDlCMDAwQUMyMjREODgzQzAyMDgwMDI0NDIwMjVDM0MwMzA4MDA0MwotOjEwMDlDMDAwMjQ2MzA2MzQzQzA0MDgwMDI0ODQwNkUwM0MwNTA4MDA0NwotOjEwMDlEMDAwMjRBNTNCNTAzQzAxMDgwMEFDMjI0REEwM0MwMjA4MDA3RAotOjEwMDlFMDAwMjQ0MjA1RjQzQzAxMDgwMEFDMjY0RDg0M0MwMTA4MDA3QgotOjEwMDlGMDAwQUMyNTREOTQzQzAxMDgwMEFDMjM0RDlDM0MwMTA4MDAwMwotOjEwMEEwMDAwQUMyNDREQTQzQzAxMDgwMEFDMjI0REE4M0MwMTA4MDBEOAotOjEwMEExMDAwQUMyMzREM0MzQzAxMDgwMEFDMjA0RDQ4M0MwMTA4MDA5MwotOjEwMEEyMDAwQUMyMDRENEMzQzAxMDgwMEFDMjA0RDUwM0MwMTA4MDA2RQotOjEwMEEzMDAwQUMyMDRENTQzQzAxMDgwMEFDMjA0RDU4M0MwMTA4MDA0RQotOjEwMEE0MDAwQUMyMDRENUMzQzAxMDgwMEFDMjA0RDYwM0MwMTA4MDAyRQotOjEwMEE1MDAwQUMyNDRENjQzQzAxMDgwMEFDMjA0RDY4M0MwMTA4MDAwQQotOjEwMEE2MDAwQUMyMDRENkMzQzAxMDgwMEFDMjA0RDcwM0MwMTA4MDBFRQotOjEwMEE3MDAwQUMyMDRENzQzQzAxMDgwMEFDMjA0RDc4M0MwMTA4MDBDRQotOjEwMEE4MDAwQUMyNjREN0MzQzAxMDgwMEFDMjY0RDgwM0MwMTA4MDBBMgotOjEwMEE5MDAwQUMyMDREOEMzQzAxMDgwMEFDMjU0RDkwM0MwMTA4MDA3OQotOjEwMEFBMDAwQUMyMzREOTgwRTAwMDZCQjAwMDAwMDAwM0MwMjgwMDAwNQotOjEwMEFCMDAwMzQ0MjAwNzA4QzQyMDAwMEFGODIwMDE0M0MwMzA4MDBGNgotOjEwMEFDMDAwOEM2MzAwMjA4RjgyMDAwNDEwNDMwMDA0M0MwMjgwMDBFRAotOjEwMEFEMDAwMEUwMDA0RjNBRjgzMDAwNDNDMDI4MDAwMzQ0NjAwNzAzMwotOjEwMEFFMDAwM0MwMzA4MDA4QzYzMDBBMDNDMDIwODAwOEM0MjAwQTQ3OAotOjEwMEFGMDAwMTA0MzAwMDQ4Rjg0MDAxNDNDMDEwODAwQUMyMzAwQTRDMAotOjEwMEIwMDAwQTc0MzAwOUU4Q0NBMDAwMDNDMDMwODAwOEM2MzAwQkMxNQotOjEwMEIxMDAwM0MwMjA4MDA4QzQyMDBCODAxNDQyMDIzMDA2NDE4MjFFNAotOjEwMEIyMDAwMDAwMDQwMjEwMDY0MjAyQjAwNDgxMDIxMDA0NDEwMjFDNwotOjEwMEIzMDAwM0MwMTA4MDBBQzIzMDBCQzNDMDEwODAwQUMyMjAwQjgxQQotOjEwMEI0MDAwOEY1MTAwMDAzMjIyMDAwNzEwNDBGRkRDQUY4QTAwMTRGMgotOjEwMEI1MDAwOENDNjAwMDAzQzA1MDgwMDhDQTUwMEJDM0MwNDA4MDBDNQotOjEwMEI2MDAwOEM4NDAwQjgwMENBMzAyMzAwQTYyODIxMDAwMDEwMjE4MAotOjEwMEI3MDAwMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxMzIyNzAwMDE5MAotOjEwMEI4MDAwM0MwMTA4MDBBQzI1MDBCQzNDMDEwODAwQUMyNDAwQjhDNgotOjEwMEI5MDAwMTBFMDAwMUYzMjIyMDAwMjhGNDIwMTAwQUY0MjAwMjAwRAotOjEwMEJBMDAwOEY0MjAxMDRBRjQyMDBBODkzNDIwMTBCMEUwMDAxODg1RQotOjEwMEJCMDAwMzA1MDAwRkYyRTAyMDAxRDU0NDAwMDA0MDAxMDEwODAzMQotOjEwMEJDMDAwMEUwMDAxOEIwQTAwMDJDNTAwMDAwMDAwMDA1MjEwMjEzNwotOjEwMEJEMDAwOEM0MjAwMDAwMDQwRjgwOTAwMDAwMDAwMTA0MDAwMDVCMQotOjEwMEJFMDAwM0MwMjQwMDA4RjQzMDEwNDNDMDI2MDIwQUM0MzAwMTRFRgotOjEwMEJGMDAwM0MwMjQwMDBBRjQyMDEzODNDMDIwODAwOEM0MjAwMzQwNQotOjEwMEMwMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDJFMAotOjEwMEMxMDAwMTA0MDAwMEUzMjIyMDAwNDhGNDIwMTQwMEUwMDAxODg3NQotOjEwMEMyMDAwQUY0MjAwMjAwRTAwMDM0QjAwMDAwMDAwM0MwMjQwMDBEOQotOjEwMEMzMDAwQUY0MjAxNzgzQzAyMDgwMDhDNDIwMDM4MjQ0MjAwMDE5NwotOjEwMEM0MDAwM0MwMTA4MDBBQzIyMDAzODMyMjIwMDA0MTA0MEZGOTgxQQotOjEwMEM1MDAwM0MwMjgwMDA4RjQyMDE4MDBFMDAwMTg4QUY0MjAwMjBEQwotOjEwMEM2MDAwOEY0MzAxODAyNDAyMEYwMDE0NjIwMDA1MDAwMDAwMDA4MQotOjEwMEM3MDAwOEY0MjAxODhBNzQyMDA5QzBBMDAwMkZBM0MwMjQwMDAxMQotOjEwMEM4MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDgyOAotOjEwMEM5MDAwM0MwMjQwMDAwRTAwMDMyRDAwMDAwMDAwNTQ0MDAwMDQwMAotOjEwMENBMDAwM0MwMjQwMDAwRTAwMEUwRDAwMDAwMDAwM0MwMjQwMDAxRgotOjEwMENCMDAwQUY0MjAxQjgzQzAyMDgwMDhDNDIwMDNDMjQ0MjAwMDFEMwotOjEwMENDMDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMjdBM0MwMjgwMDA5MQotOjEwMENEMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QUY0NDAwMjBGNQotOjEwMENFMDAwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDhFNwotOjEwMENGMDAwMDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxMDA4MjIwMjVGOAotOjEwMEQwMDAwMDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwQUZCMTAwMTRBRQotOjEwMEQxMDAwQUZCMDAwMTAwMDgwODgyMUFGQkYwMDE4MEUwMDAzMDJBMgotOjEwMEQyMDAwMzBCMDAwRkY5MzYyMDA3RDAyMjAyMDIxMDIwMjgwMjU2NgotOjEwMEQzMDAwQTM3MDAwN0Q4RjcwMDA3NDNDMDI4MDAwMEUwMDAzMEJENgotOjEwMEQ0MDAwMDIwMjgwMjQxNjAwMDAwOThGQkYwMDE4OEY0MjAxRjhBQwotOjEwMEQ1MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwQTM0MjAxQzRCRgotOjEwMEQ2MDAwM0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4OEZCMTAwMTQ5MQotOjEwMEQ3MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTg2QQotOjEwMEQ4MDAwQUZCRjAwMTA5NzQyMDE4NDMwNDIwMjAwMTA0MDAwMDVCRQotOjEwMEQ5MDAwMDAwMDIwMjEwRTAwMTA0MjAwMDAwMDAwMEEwMDAzNDE2NAotOjEwMERBMDAwMjQwNDAwMDE4RjQyMDE4ODA0NDAwMDA5OEZCRjAwMTAxNQotOjEwMERCMDAwOEY0MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBFMQotOjEwMERDMDAwMTQ0MzAwMDMyNDA0MDAwMTkzNjIwMDNFOEZCRjAwMTAwRgotOjEwMEREMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4MjQwMjAwMDE1NAotOjEwMERFMDAwQTM2MDAwMjJBNzYyMDAxNjhGNDQwMTQwMEEwMDAzMTA4RQotOjEwMERGMDAwMjQwNTAwMDEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRAotOjEwMEUwMDAwOTM2MjAwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzBCNQotOjEwMEUxMDAwMDAwMzE4MkIwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDMzRQotOjEwMEUyMDAwMjQwMjAwNTAxNDgyMDA2MjhGQkYwMDE0OTM0MjAxNDhENAotOjEwMEUzMDAwMzA0MjAwRkYyNDQzRkZGRjJDNjIwMDA1MTA0MDAwNUM5RAotOjEwMEU0MDAwOEZCRjAwMTQwMDAzMTA4MDNDMDMwODAwMjQ2MzRDQzhDQgotOjEwMEU1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwOAotOjEwMEU2MDAwMEUwMDAzMDI4RjQ0MDE0MDhGNzAwMDBDOEY0MjAxNDQzQQotOjEwMEU3MDAwMTYwMjAwMDIyNDAyMDAwMUFGNjIwMDBDMEUwMDAzMEJGOAotOjEwMEU4MDAwOEY0NDAxNDA4RjQyMDE0NDE0NTAwMDA0OEZCRjAwMTQ2RQotOjEwMEU5MDAwOEZCMDAwMTAwQTAwMEZCODI3QkQwMDE4OEY2MjAwMEMzOQotOjEwMEVBMDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDEwOEY0MzAxNDQ2MgotOjEwMEVCMDAwMzA0MkZGRkYxNDYyMDAwOTAwMDAwMDAwMjQwMjAwMDExQwotOjEwMEVDMDAwQTc2MjAwMTA4RjQyMDE0MEFGNDIwMjAwM0MwMjEwMDBCNgotOjEwMEVEMDAwQUY0MjAyMzgwQTAwMDNCQThGQkYwMDE0OTc2MjAwMTBCNQotOjEwMEVFMDAwMEEwMDAzQjMwMDAwMDAwMDBFMDAwMzAyOEY0NDAxNDAxQgotOjEwMEVGMDAwOTc2MjAwMTI4RjQzMDE0NDMwNTBGRkZGMTYwMzAwMDIzNwotOjEwMEYwMDAwMjQwMjAwMDFBNzYyMDAxMjBFMDAwMzBCOEY0NDAxNDA2RgotOjEwMEYxMDAwOEY0MjAxNDQxNjAyMDAwNDhGQkYwMDE0OEZCMDAwMTBFRQotOjEwMEYyMDAwMEEwMDAzNDUyN0JEMDAxODk3NjIwMDEyMEEwMDAzQjNBOAotOjEwMEYzMDAwMDAwMDAwMDA5NzYyMDAxNDhGNDMwMTQ0MzA0MkZGRkYxRAotOjEwMEY0MDAwMTQ2MjAwMDY4RkJGMDAxNDI0MDIwMDAxOEZCMDAwMTA0RAotOjEwMEY1MDAwQTc2MjAwMTQwQTAwMTJFMjI3QkQwMDE4OTc2MjAwMTQ2RAotOjEwMEY2MDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDE2OEY0MzAxNDQ5QgotOjEwMEY3MDAwMzA0MkZGRkYxNDYyMDAwNjI0MDIwMDAxOEZCRjAwMTRGQwotOjEwMEY4MDAwOEZCMDAwMTBBNzYyMDAxNjBBMDAwQkFBMjdCRDAwMTgzOAotOjEwMEY5MDAwOTc2MjAwMTYxNDQwMDAwNjhGQkYwMDE0M0MwMjA4MDA0MAotOjEwMEZBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxOQotOjEwMEZCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMAotOjEwMEZDMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMTAwOTM2MjAwMDA1QgotOjEwMEZEMDAwOTM0MzAxMDkzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQTU2MgotOjEwMEZFMDAwMjg2MjAwMjAxMDQwMDAxODI0MDIwMDM4Mjg2MjAwMEFGRAotOjEwMEZGMDAwMTA0MDAwMEMyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkM1NgotOjEwMTAwMDAwMDAwMDAwMDAwNDYwMDBFNTI4NjIwMDAyMTQ0MDAwMjg4RgotOjEwMTAxMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDE0MEEwMDA0QjdFNQotOjEwMTAyMDAwOEZCMDAwMTAxMDYyMDA1RTI4NjIwMDBCMTQ0MDAwRENEQwotOjEwMTAzMDAwOEZCRjAwMTQyNDAyMDAwRTEwNjIwMDczOEZCMDAwMTBFNgotOjEwMTA0MDAwMEEwMDA0QjcwMDAwMDAwMDEwNjIwMEMwMjg2MjAwMzlFNgotOjEwMTA1MDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwQ0FGOAotOjEwMTA2MDAwMjg2MjAwMzcxMDQwMDBCNDI0MDIwMDM1MTA2MjAwQzEyRAotOjEwMTA3MDAwOEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwMTA2MjAwMkI1RAotOjEwMTA4MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlCMgotOjEwMTA5MDAwMTA2MjAwQjQ4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCNAotOjEwMTBBMDAwMTA2MjAwOTk4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCRgotOjEwMTBCMDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMEI5OEZCRjAwMTQ5MQotOjEwMTBDMDAwMEUwMDA1MkIwMDAwMDAwMDhGNDIwMTAwOEY4MzAwMjBERQotOjEwMTBEMDAwOTc0NTAxMEM5NzQ2MDEwOEFDNjIwMDAwOEY0MjAxMDQ1RAotOjEwMTBFMDAwM0MwNDA4MDA5NDg0NERCRTAwMDUyQzAwQUM2MjAwMDQ1MgotOjEwMTBGMDAwOEY0MjAxMTgwMDA2MzQwMDAwQzQzMDI1QUM2MjAwMDg5RAotOjEwMTEwMDAwOEY0MjAxMUMyNDA0MDAwMUFDNjIwMDBDOTM0MjAxMEFDRQotOjEwMTExMDAwMDBBMjI4MjVBQzY1MDAxMEFDNjAwMDE0QUM2MDAwMTg3QgotOjEwMTEyMDAwQUM2NjAwMUMwQTAwMDQ4RDhGQkYwMDE0M0MwMjA4MDA0RQotOjEwMTEzMDAwOEM0MjAwMjAxMDQwMDA5QThGQkYwMDE0MEUwMDA1MkIzNwotOjEwMTE0MDAwMDAwMDAwMDA5NzQ0MDEwODNDMDMwODAwOTQ2MzREQkU3MgotOjEwMTE1MDAwOTc0NTAxMEMwMDA0MjIwMjk3NDYwMTBFOEY4MjAwMjA2MQotOjEwMTE2MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA5RAotOjEwMTE3MDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDREOAotOjEwMTE4MDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ3MgotOjEwMTE5MDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNDhDMjQwNDAwMDE3QwotOjEwMTFBMDAwOTc0MjAxMEMxNDQwMDAxNTAwMDAwMDAwOTM2MjAwMDVGNgotOjEwMTFCMDAwMzA0MjAwMTAxNDQwMDAxMTAwMDAwMDAwMEUwMDAzMDIzNQotOjEwMTFDMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMTAxOQotOjEwMTFEMDAwMEUwMDAzMEJBMzYyMDAwNTkzNjIwMDAwMjQwMzAwMjBBRAotOjEwMTFFMDAwMzA0MjAwRkYxMDQzMDA2RDAyMDAyMDIxOEZCRjAwMTQyOQotOjEwMTFGMDAwOEZCMDAwMTAwQTAwMTA1ODI3QkQwMDE4MDAwMDAwMEQyNQotOjEwMTIwMDAwMEEwMDA0QjY4RkJGMDAxNDNDMDIwODAwOEM0MjAwMjA4NAotOjEwMTIxMDAwMTA0MDAwNjM4RkJGMDAxNDBFMDAwNTJCMDAwMDAwMDA3QgotOjEwMTIyMDAwOEY0MjAxMDQ4RjgzMDAyMDk3NDQwMTBDM0MwNTA4MDA4NQotOjEwMTIzMDAwOTRBNTREQkVBQzYyMDAwMDk3NjIwMDJDMDAwNDI0MDAwRgotOjEwMTI0MDAwMzA0MkZGRkYwMDgyMjAyNTNDMDI0MDBFMDBBMjI4MjVFQwotOjEwMTI1MDAwQUM2NDAwMDRBQzYwMDAwOEFDNjAwMDBDQUM2MDAwMTAzMgotOjEwMTI2MDAwQUM2MDAwMTRBQzYwMDAxOEFDNjUwMDFDMEEwMDA0OEM3MwotOjEwMTI3MDAwMjQwNDAwMDEwRTAwMDMwMjAyMDAyMDIxQTc2MDAwMDhFMAotOjEwMTI4MDAwMEUwMDAzMEIwMjAwMjAyMTAyMDAyMDIxMEUwMDAzMTA5QgotOjEwMTI5MDAwMjQwNTAwMDEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwNDA2MAotOjEwMTJBMDAwOEZCRjAwMTQwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMENCOAotOjEwMTJCMDAwOEY4MzAwMjAzQzA1MDgwMDk0QTU0REJFMDAwMjE0MDA1OQotOjEwMTJDMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEY2NDAwNEM5RAotOjEwMTJEMDAwM0MwMjQwMUYwMEEyMjgyNUFDNjQwMDBDOEY2MjAwNTAyNQotOjEwMTJFMDAwMjQwNDAwMDFBQzYyMDAxMDhGNjIwMDU0QUM2MjAwMTQ1MAotOjEwMTJGMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDE0OEZCMDAwMTBFQwotOjEwMTMwMDAwMEEwMDA1NTAyN0JEMDAxODI0MDIwMDIwNTA4MjAwMjU0NQotOjEwMTMxMDAwOEZCMDAwMTAwRTAwMEZBMjAyMDAyMDIxMTA0MDAwMjAwQwotOjEwMTMyMDAwOEZCRjAwMTQwMjAwMjAyMThGQjAwMDEwMDAwMDI4MjE4MAotOjEwMTMzMDAwMEEwMDAzMTAyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTRFRgotOjEwMTM0MDAwOEZCMDAwMTAwQTAwMDYxODI3QkQwMDE4OTc0NTAxMEM0MQotOjEwMTM1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDA2Mzg1MQotOjEwMTM2MDAwMjdCRDAwMTgwMjAwMjAyMThGQjAwMDEwMEEwMDA2NUQ4MgotOjEwMTM3MDAwMjdCRDAwMTg5MzQ1MDEwRDAyMDAyMDIxOEZCMDAwMTBGOQotOjEwMTM4MDAwMEEwMDA2QTcyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTQwNQotOjEwMTM5MDAwOEZCMDAwMTAwQTAwMDY4MzI3QkQwMDE4OEZCRjAwMTQwRAotOjEwMTNBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4OEY0MjAyNzhCQwotOjEwMTNCMDAwMDQ0MEZGRkUyNDAyMDAwMjM0ODQwMDgwQUY0NDAyNDA1NwotOjEwMTNDMDAwQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUY0MjAyNzg0RQotOjEwMTNEMDAwM0MwNDA4MDA5NDg0NERDQTNDMDIwODAwOEM0MjRERDQ2MQotOjEwMTNFMDAwMzA4M0ZGRkYwMDAzMThDMDAwNDMxMDIxQUY0MjAwM0NEMAotOjEwMTNGMDAwM0MwMjA4MDA4QzQyNEREMEFGNDIwMDM4M0MwMjAwNTAwNQotOjEwMTQwMDAwMzQ0MjAwMDhBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwMTQxMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQxRAotOjEwMTQyMDAwMDAwMDAwMDA4RjQyMDQwMDNDMDEwODAwQUMyMjREQzBDNwotOjEwMTQzMDAwOEY0MjA0MDQzQzAxMDgwMEFDMjI0REM0M0MwMjAwMjA1MQotOjEwMTQ0MDAwQUY0MjAwMzAwMDAwMDAwMDNDMDIwODAwOTQ0MjREQzg0QQotOjEwMTQ1MDAwM0MwMzA4MDA5NDYzNERDQzNDMDUwODAwOTRBNTREQ0U5OAotOjEwMTQ2MDAwMjQ4NDAwMDEwMDQzMTAyMTMwODNGRkZGM0MwMTA4MDA2OQotOjEwMTQ3MDAwQTQyMjREQzgzQzAxMDgwMEE0MjQ0RENBMTQ2NTAwMDNGMQotOjEwMTQ4MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0RENBMDNFMDAwMDg1MQotOjEwMTQ5MDAwMDAwMDAwMDAzQzA1MDAwQTI3QkRGRkU4MDM0NTI4MjFBNQotOjEwMTRBMDAwM0MwNDA4MDAyNDg0NERCMEFGQkYwMDEwMEUwMDA1QjUwOQotOjEwMTRCMDAwMjQwNjAwMEEzQzAyMDgwMDk0NDI0REIyM0MwMzA4MDA5NgotOjEwMTRDMDAwOTQ2MzREQ0UzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDRDMQotOjEwMTREMDAwMjQwMjdGRkYwMDQzMTAyQjEwNDAwMDAyQUY4MzAwMUM0QQotOjEwMTRFMDAwMDAwMDAwMEQwRTAwMDRDMjAwMDAwMDAwM0MwMjA4MDBENQotOjEwMTRGMDAwOTQ0MjREQkE4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDhDQQotOjEwMTUwMDAwQTc0MjAwQTIzQzAyMDAwQTAzNDIxMDIxOTQ0MzAwMDZCNQotOjEwMTUxMDAwM0MwMjA4MDA5NDQyNERCQTNDMDEwODAwQTQyMzREQjY5OQotOjEwMTUyMDAwMDA0MzEwMjM4RjgzMDAxQzAwMDIxNDAwMDAwMjE0MDNFOAotOjEwMTUzMDAwMDA0MzEwMkIwM0UwMDAwODM4NDIwMDAxMjdCREZGRThGQwotOjEwMTU0MDAwQUZCRjAwMTAzQzAyMDAwQTAzNDIxMDIxOTQ0MjAwMDY4MwotOjEwMTU1MDAwM0MwMTA4MDBBNDIyNERCNjBFMDAwNTBGMDAwMDAwMDA1QgotOjEwMTU2MDAwNTQ0MEZGRjkzQzAyMDAwQThGQkYwMDEwMDNFMDAwMDg1RQotOjEwMTU3MDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwMEUwMDA1MEYwNAotOjEwMTU4MDAwMDAwMDAwMDAxMDQwMDAwMzAwMDAwMDAwMEUwMDA1MUREOAotOjEwMTU5MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDI0REMwOEZCRjAwMTBDQwotOjEwMTVBMDAwMjc0MzA0MDBBRjQyMDAzODNDMDIwODAwOEM0MjREQzQ3RgotOjEwMTVCMDAwMjdCRDAwMThBRjgzMDAyMEFGNDIwMDNDM0MwMjAwMDU2RAotOjEwMTVDMDAwQUY0MjAwMzAwM0UwMDAwOEFGODAwMDE4OEY4MjAwMTg5RgotOjEwMTVEMDAwM0MwMzAwMDYwMDAyMTE0MDAwNDMxMDI1QUY0MjAwMzBEQQotOjEwMTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDAyQQotOjEwMTVGMDAwMzA0MjAwMTAxMDQwRkZGRDI3NDIwNDAwQUY4MjAwMjA1RgotOjEwMTYwMDAwMDNFMDAwMDhBRjgwMDAxODNDMDYwODAwOENDNjREQzRGQgotOjEwMTYxMDAwOEY4NTAwMTg4RjgzMDAyMDNDMDIwODAwOTQ0MjREQkE0OQotOjEwMTYyMDAwMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwMjQ0MjAwMDExRgotOjEwMTYzMDAwMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzNgotOjEwMTY0MDAwQUY4NTAwMThBRjgzMDAyMDNDMDEwODAwQTQyMjREQkFFQQotOjEwMTY1MDAwMzA5MDAwRkYzQzAxMDgwMEFDMjc0REM0MDRDMTAwMDhENQotOjEwMTY2MDAwMDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwM0MwMjA4MDBBMQotOjEwMTY3MDAwOEM0MjREQzAyNDQyMDAwMTNDMDEwODAwQUMyMjREQzAwOAotOjEwMTY4MDAwM0MwMjA4MDA5NDQyNERCQTNDMDMwODAwOTQ2MzREQzhFNAotOjEwMTY5MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjU4RQotOjEwMTZBMDAwMTQ0MDAwMDQ4RjgzMDAxODI0MDIwMDEwMTQ2MjAwMEZGRAotOjEwMTZCMDAwMDAwMDAwMDAwRTAwMDU0MTI0MTEwMDAxM0MwMzA4MDA1OQotOjEwMTZDMDAwOTQ2MzREQkEzQzAyMDgwMDk0NDI0REM4MTQ2MjAwMDM3MgotOjEwMTZEMDAwMDAwMDAwMDAwRTAwMDRDMjAwMDAwMDAwMTYwMDAwMDMxRAotOjEwMTZFMDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwM0MwMzA4MDA3NQotOjEwMTZGMDAwOTQ2MzREQkUzQzAyMDgwMDk0NDI0REJDMjQ2MzAwMDEzQgotOjEwMTcwMDAwMzA2NEZGRkYzQzAxMDgwMEE0MjM0REJFMTQ4MjAwMDM5NwotOjEwMTcxMDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0REJFMTIwMDAwMDY5RAotOjEwMTcyMDAwMDAwMDAwMDAzQzAyMDgwMDk0NDI0REJBQTc0MjAwQTIwQgotOjEwMTczMDAwMEEwMDA1QTMwMjIwMTAyMTBFMDAwNTBGMDAwMDAwMDA4MgotOjEwMTc0MDAwMTA0MDAwMDQwMjIwMTAyMTBFMDAwNTFEMDAwMDAwMDBDMgotOjEwMTc1MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyRAotOjEwMTc2MDAwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGMzBBNUZGRkYwNQotOjEwMTc3MDAwMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDFFNgotOjEwMTc4MDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMEEwMDA1QUI0OQotOjEwMTc5MDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDY4QQotOjEwMTdBMDAwMjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAyOAotOjEwMTdCMDAwMEEwMDA1QjUyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBDRQotOjEwMTdDMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDA2QQotOjEwMTdEMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkFGMQotOjEwMTdFMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjQwMjAwMDEzQgotOjEwMTdGMDAwQUY2MjAwMENBNzYyMDAxMEE3NjIwMDEyQTc2MjAwMTQ3QgotOjEwMTgwMDAwMDNFMDAwMDhBNzYyMDAxNjMwODIwMDdGMDM0MjEwMjEyNwotOjEwMTgxMDAwM0MwODAwMEUwMDQ4MTgyMTNDMDIwODAwOEM0MjAwMjBDMQotOjEwMTgyMDAwMjdCREZGRDgyNDA3RkY4MEFGQjMwMDFDQUZCMjAwMTg1QwotOjEwMTgzMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMDA4MDgwMjExNgotOjEwMTg0MDAwMzBCMTAwRkYwMDg3MjAyNDMwRDIwMEZGMTA0MDAwMkY2RAotOjEwMTg1MDAwMDAwMDk4MjFBRjQ0MDAyQzkwNjIwMDAwMjQwMzAwNTA0NwotOjEwMTg2MDAwMzA0MjAwRkYxNDQzMDAwRTAwMDAwMDAwM0MwMjA4MDA1QwotOjEwMTg3MDAwOEM0MjAwRTAwMjAyMTAyMTAwNDcxMDI0QUY0MjAwMkNFRAotOjEwMTg4MDAwM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMzA0MjAwN0YzRQotOjEwMTg5MDAwMDM0MjEwMjEwMDQ4MTAyMTk0NDIwMEQ0MzA1M0ZGRkYyRQotOjEwMThBMDAwMEUwMDA1MkIwMDAwMDAwMDNDMDIwODAwOTQ0MjREQkVEMwotOjEwMThCMDAwOEY4MzAwMjAwMDExMzQwMDAwQzIzMDI1MDAxMjJDMDA1QwotOjEwMThDMDAwM0MwMjQwMDAwMEMyMzAyNTM0QTUwMDAxQUM3MDAwMDA4RAotOjEwMThEMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDgwQQotOjEwMThFMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NTAwMTAwRAotOjEwMThGMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMTgyQwotOjEwMTkwMDAwMjdCRDAwMjgwQTAwMDU1MEFDNjYwMDFDOEZCRjAwMjBEMAotOjEwMTkxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2RAotOjEwMTkyMDAwMDNFMDAwMDgyN0JEMDAyODkzNDMwMTBGMjQwMjAwMTBBNAotOjEwMTkzMDAwMTA2MjAwMEUyODY1MDAxMTEwQTAwMDA3MjQwMjAwMTI5QQotOjEwMTk0MDAwMjQwMjAwMDgyNDA1MDAzQTEwNjIwMDA2MDAwMDMwMjEzRAotOjEwMTk1MDAwMDNFMDAwMDgwMDAwMDAwMDI0MDUwMDM1MTQ2MkZGRkNDRAotOjEwMTk2MDAwMDAwMDMwMjEwQTAwMDVEMDAwMDAwMDAwOEY0MjAwNzQwMgotOjEwMTk3MDAwMjQ0MjBGQTAwM0UwMDAwOEFGNjIwMDBDMjdCREZGRTg3RgotOjEwMTk4MDAwQUZCRjAwMTAwRTAwMDMxMDI0MDUwMDAxOEZCRjAwMTAzMAotOjEwMTk5MDAwMjQwMjAwMDFBNzYyMDAxMjI3QkQwMDE4MjQwMjAwMDFFMgotOjEwMTlBMDAwMDNFMDAwMDhBMzYwMDAyMjI3QkRGRkUwQUZCMTAwMTRGMAotOjEwMTlCMDAwQUZCMDAwMTBBRkJGMDAxODMwQjFGRkZGMEUwMDAzMDI0MAotOjEwMTlDMDAwMDA4MDgwMjE5MzYyMDAzRjI0MDMwMDA0MzA0MjAwRkYyNgotOjEwMTlEMDAwMTQ0MzAwMEMwMjAwMjAyMTEyMjAwMDA4MjQwMjAwMEFGNwotOjEwMTlFMDAwMEUwMDA1QzkwMDAwMDAwMDkzNjIwMDA1MjQwM0ZGRkVGRAotOjEwMTlGMDAwMDA0MzEwMjRBMzYyMDAwNTI0MDIwMDEyQTM2MjAwM0ZFQQotOjEwMUEwMDAwMDIwMDIwMjEwRTAwMDMwQkEzNjAwMDgxMTYyMDAwMDNCQQotOjEwMUExMDAwMDIwMDIwMjEwRTAwMDYyRDAwMDAwMDAwMDIwMDIwMjFGRgotOjEwMUEyMDAwMzIyNjAwRkY4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1NgotOjEwMUEzMDAwMjQwNTAwMzgwQTAwMDVEMDI3QkQwMDIwMjdCREZGRTA5RgotOjEwMUE0MDAwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCMAotOjEwMUE1MDAwMEUwMDAzMDIwMDgwODAyMTBFMDAwNUM5MDAwMDAwMDA3NgotOjEwMUE2MDAwOTM2MjAwM0YyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDMyRAotOjEwMUE3MDAwMDIwMDIwMjEyNDAyMDAxMkEzNjIwMDNGOTM2MjAwMDVBRAotOjEwMUE4MDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzBCQTM2MjAwMDU5NQotOjEwMUE5MDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjExQQotOjEwMUFBMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAotOjEwMUFCMDAwMEEwMDAzMTAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg0MgotOjEwMUFDMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDA1RDAzMgotOjEwMUFEMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ0NgotOjEwMUFFMDAwOTc0MjAxMEMyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTAyQwotOjEwMUFGMDAwMzA0NjAwRkYwRTAwMDMwMjAwMDAwMDAwMjQwMjAwMTIyNgotOjEwMUIwMDAwQTM2MjAwM0Y5MzYyMDAwNTM0NDIwMDEwMEUwMDA1QzkzNQotOjEwMUIxMDAwQTM2MjAwMDUwRTAwMDMwQjAyMDAyMDIxMDIwMDIwMjExOQotOjEwMUIyMDAwMEUwMDAzMTAyNDA1MDAyMDBBMDAwNjlDMDAwMDAwMDA5RgotOjEwMUIzMDAwMEUwMDA1RDAwMDAwMDAwMDBFMDAwMzAyMDIwMDIwMjE2QwotOjEwMUI0MDAwOTM2MjAwMjMyNDAzRkY5RjAyMDAyMDIxMDA0MzEwMjRGRQotOjEwMUI1MDAwOEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDIzMEEwMDAzMEI5NAotOjEwMUI2MDAwMjdCRDAwMTgyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRCQwotOjEwMUI3MDAwQUZCMDAwMTAzMEIxMDBGRjBFMDAwMzAyMDA4MDgwMjFFMgotOjEwMUI4MDAwMjQwMjAwMTIwRTAwMDVDOUEzNjIwMDNGMEUwMDAzMEJFMQotOjEwMUI5MDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMThFNgotOjEwMUJBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDA1RDA1NQotOjEwMUJCMDAwMjdCRDAwMjBBMzgwMDAyQzAzRTAwMDA4QTM4MDAwMkQ5NwotOjEwMUJDMDAwOEY0MjAyNzgwNDQwRkZGRThGODIwMDM0QUY0MjAyNDAxMQotOjEwMUJEMDAwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDg3OQotOjEwMUJFMDAwQUY0MjAyNzgzQzAzNjAwMDhDNjI1NDAwMzA0MjAwMDgyRgotOjEwMUJGMDAwMTQ0MEZGRkQwMDAwMDAwMDhDNjI1NDA4QUY4MjAwMEMwRQotOjEwMUMwMDAwMjQwMjAwNTJBQzYwNTQwOEFDNjQ1NDMwQUM2MjU0MzRDQQotOjEwMUMxMDAwMjQwMjAwMDgwM0UwMDAwOEFDNjI1NDAwM0MwMjYwMDBBQgotOjEwMUMyMDAwOEM0MjU0MDAzMDQyMDAwODEwNDAwMDA1M0MwMzYwMDAyNAotOjEwMUMzMDAwOEM2MjU0MDAzMDQyMDAwODE0NDBGRkZEMDAwMDAwMDA5OAotOjEwMUM0MDAwOEY4MzAwMEMzQzAyNjAwMDAzRTAwMDA4QUM0MzU0MDhBMgotOjEwMUM1MDAwOTBBMzAwMDAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y3MwotOjEwMUM2MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTBBMjAwMUNEMQotOjEwMUM3MDAwOTRBMzAwMUUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEM0NgotOjEwMUM4MDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM2RAotOjEwMUM5MDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA5QwotOjEwMUNBMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJGOQotOjEwMUNCMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThENgotOjEwMUNDMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhENAotOjEwMUNEMDAwQTUwQTAwMjI4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwMAotOjEwMUNFMDAwQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwMDNFMDAwMDg1RAotOjEwMUNGMDAwQUY0MjAxRjgzQzAyMDgwMDhDNDIwMEI0MjdCREZGRTg2NwotOjEwMUQwMDAwQUZCRjAwMTQyNDQyMDAwMUFGQjAwMDEwM0MwMTA4MDAzNgotOjEwMUQxMDAwQUMyMjAwQjQ4RjQzMDAyNDNDMDIwMDFGMzBBQTAwRkYxNQotOjEwMUQyMDAwMzQ0MkZGODAzMEQ4MDBGRjAwNjI4MDI0MDA4MEY4MjExOAotOjEwMUQzMDAwMzBFRjAwRkYxMTU4MDAzQjAxNDA1ODIxMjQwQ0ZGODA3OAotOjEwMUQ0MDAwM0MxOTAwMEEzMTYzMDA3RjAwMDMxMEMwMDAwMzE5NDBGMgotOjEwMUQ1MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMjU2ODAwMDE2QQotOjEwMUQ2MDAwMzEwRDAwN0YwM0UyMTAyMTAwNDMxMDIxMzA0MzAwN0YzQQotOjEwMUQ3MDAwMDM0MzE4MjEwMDRDMTAyNDAwNzk0ODIxQUY0MjAwMjQ2RAotOjEwMUQ4MDAwOEQyMjAwMjQwMTZDMTgyNDAwNkM3MDI2QUQyMjAwMENGQQotOjEwMUQ5MDAwOEQyMjAwMjQzMTA4MDBGRkFEMjIwMDEwOTUyMjAwMTQ4RQotOjEwMURBMDAwOTUyMzAwMjA4RDI3MDAxQzMwNDJGRkZGMzA2M0ZGRkY4QQotOjEwMURCMDAwOEQyNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDAwMjI3QzNFMwotOjEwMURDMDAwMDA0MDI4MjEwMEM0MzAyMzAwRTIxMDJCMDBDMjMwMjM0MQotOjEwMUREMDAwMDBFNTM4MjNBRDI3MDAxQ0FEMjYwMDE4OTUyMjAwMjAxMQotOjEwMURFMDAwQTUyMjAwMTQ5NTIyMDAyMjE1NEIwMDBBQTUyMjAwMTZGOAotOjEwMURGMDAwOEQyMzAwMjQ4RDIyMDAwODI1NDYwMDAxMzE0NTAwODBGNgotOjEwMUUwMDAwMTQ2MjAwMDQzMEM0MDA3RjEwOEYwMDAyMzhBQTAwODBFMgotOjEwMUUxMDAwMDBDMDUwMjE1MUFGMDAwMTMxQzgwMEZGMTUxOEZGQzlBMwotOjEwMUUyMDAwMDEwMDU4MjE4Rjg0MDAzNDMwODIwMDdGMDM0MjE4MjE0MgotOjEwMUUzMDAwM0MwMjAwMEEwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjQ1NAotOjEwMUU0MDAwQUY0NDAwMjRBMDZBMDA3OUEwNkEwMDgzOEM2MjAwNTAyRAotOjEwMUU1MDAwOEY4NDAwMzRBQzYyMDA3MDhDNjUwMDc0M0MwMjdGRkY5QwotOjEwMUU2MDAwMzQ0MkZGRkYwMEEyMjgyNDBFMDAwNzAzQUM2NTAwNzQ3MwotOjEwMUU3MDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhBMwotOjEwMUU4MDAwMjdCRDAwMTgyN0JERkZDMEFGQkUwMDM4QUZCNzAwMzQ3NAotOjEwMUU5MDAwQUZCNTAwMkNBRkIyMDAyMEFGQjEwMDFDQUZCMDAwMTgzRQotOjEwMUVBMDAwQUZCRjAwM0NBRkI2MDAzMEFGQjQwMDI4QUZCMzAwMjRFMgotOjEwMUVCMDAwOEY0NTAwMjQ4RjQ2MDAyODhGNDMwMDJDM0MwMjAwMUZEMgotOjEwMUVDMDAwMzQ0MkZGODAwMDYyMTgyNDAwQzIzMDI0MDA4MEE4MjEyMAotOjEwMUVEMDAwQUZBMzAwMTQwMEEyRjAyNDBFMDAwNkM3QUZBNjAwMTBBNgotOjEwMUVFMDAwM0MwMjA4MDA4QzQyMDBFMDI0MTBGRjgwMDM2MDg4MjEzRgotOjEwMUVGMDAwMDJBMjEwMjEwMDUwMTAyNEFGNDIwMDI0M0MwMjA4MDAyRQotOjEwMUYwMDAwOEM0MjAwRTAwMkEyMTAyMTMwNDIwMDdGMDM0MjE4MjFERgotOjEwMUYxMDAwM0MwMjAwMEEwMDYyOTAyMTkyNDIwMEQyOTM2MzAwODQ0NgotOjEwMUYyMDAwMzA1NzAwRkYzMDYzMDBGRjI0MDIwMDAxMTA2MjAwMzRDQwotOjEwMUYzMDAwMDM2MDIwMjEyNDAyMDAwMjE0NjIwMDM2MDAwMDAwMDAyOQotOjEwMUY0MDAwMEUwMDEyQUUwMjQwMjgyMTkyMjMwMDgzOTIyMjAwODNDOQotOjEwMUY1MDAwMzA2MzAwN0YzMDQyMDA3RjAwMDIxMEMwMDAwMzE5NDA1MAotOjEwMUY2MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDJBMjEwMjExMQotOjEwMUY3MDAwMDA0MzM4MjEwMEYwMTAyNEFGNDIwMDI4OTIyNTAwNzg1OQotOjEwMUY4MDAwOTIyNDAwODMzMEUyMDA3RjAzNDIxODIxM0MwMjAwMENCRgotOjEwMUY5MDAwMTQ4NTAwMDcwMDYyODAyMTI0MDJGRkZGQTI0MjAwRjFBNQotOjEwMUZBMDAwMjQwMkZGRkZBNjQyMDBGMjBBMDAwN0JGMjQwMkZGRkYzRgotOjEwMUZCMDAwOTYwMjAwMjBBMjQyMDBGMTk2MDIwMDIyQTY0MjAwRjIwMAotOjEwMUZDMDAwOEUwMjAwMjRBRTQyMDBGNDkyMjIwMDgzQTI0MjAwRjA2RQotOjEwMUZEMDAwOEU0MjAwQzhBRTQyMDBGQzhFNDIwMEM0QUU0MjAwRjgwMQotOjEwMUZFMDAwOEUyMjAwNTBBRTQyMDEwMDhFNDIwMENDQUU0MjAxMDQ2RgotOjEwMUZGMDAwOTIyMjAwODUzMDQyMDAzRjBBMDAwODFBMzQ0MjAwNDAxNQotOjEwMjAwMDAwMEUwMDEyRDEwMjQwMjgyMTkyMjIwMDg1MEEwMDA4MUFFRgotOjEwMjAxMDAwMzA0MjAwM0Y5MzYyMDA4NTI0MDNGRkRGMzA0MjAwM0ZERgotOjEwMjAyMDAwQTM2MjAwODU5MzYyMDA4NTAwNDMxMDI0QTM2MjAwODVBQgotOjEwMjAzMDAwOTM2MzAwODM5MzYyMDA3ODMwNzQwMEZGMzA0MjAwRkZBNgotOjEwMjA0MDAwMTA1NDAwMzYyNDBBRkY4MDNDMEMwMDBDMzI4MzAwN0ZDMQotOjEwMjA1MDAwMDAwMzEwQzAwMDAzMTk0MDAwNjIxODIxM0MwMjA4MDA3MAotOjEwMjA2MDAwOEM0MjAwREMyNjg4MDAwMTMxMDkwMDdGMDJBMjEwMjE4OQotOjEwMjA3MDAwMDA0MzM4MjEzMEUyMDA3RjAzNDIxODIxMDBFQTEwMjQ5NwotOjEwMjA4MDAwQUY0MjAwMjgwMDZDODAyMThFMDIwMDI0MDI4QTE4MjRBRQotOjEwMjA5MDAwMDA2QTU4MjZBRTAyMDAwQzhFMDIwMDI0MzEwODAwRkZCMAotOjEwMjBBMDAwQUUwMjAwMTA5NjAyMDAxNDk2MDMwMDIwOEUwNzAwMUM1QQotOjEwMjBCMDAwMzA0MkZGRkYzMDYzRkZGRjhFMDYwMDE4MDA0MzEwMjNGRAotOjEwMjBDMDAwMDAwMjExMDAwMDAyMjdDMzAwNDAyODIxMDBDNDMwMjM3MQotOjEwMjBEMDAwMDBFMjEwMkIwMEMyMzAyMzAwRTUzODIzQUUwNzAwMUNCRAotOjEwMjBFMDAwQUUwNjAwMTg5NjAyMDAyMEE2MDIwMDE0OTYwMjAwMjJGNgotOjEwMjBGMDAwQTYwMjAwMTY5MjIyMDA3OTMwNDIwMEZGMTA1NDAwMDcxOQotOjEwMjEwMDAwMDAwMDAwMDA1MTM3MDAwMTMxNjgwMEZGOTIyMjAwNzg4MgotOjEwMjExMDAwMzA0MjAwRkYxNDQ4RkZDRDAxMDBBMDIxOTIyMjAwODMyRAotOjEwMjEyMDAwQTIyMjAwNzk4RTIyMDA1MDBBMDAwODdBQUUyMjAwNzBBNgotOjEwMjEzMDAwQTIyMjAwODU4RTIyMDA0QzI0MDVGRjgwQUU0MjAxMENCNQotOjEwMjE0MDAwOTIyMjAwODUzNDQyMDAyMEEyMjIwMDg1OTI0MjAwRDFEMgotOjEwMjE1MDAwM0MwMzA4MDA4QzYzMDBEQzMwNTQwMEZGM0MwMjA4MDBBNAotOjEwMjE2MDAwOEM0MjAwRTQwMDE0MzE0MDAwMTQyMEMwMDJBMzE4MjE2NgotOjEwMjE3MDAwMDBDNDIwMjEwMkEyMTAyMTAwNjQzODIxMDA0NjEwMjE1MQotOjEwMjE4MDAwMDA0NTE4MjQwMEU1MjgyNEFGNDUwMDI4QUY0MzAwMkM2MwotOjEwMjE5MDAwMzA0MjAwN0Y5MjQ0MDBEMDMwRTMwMDdGMDM0MjI4MjE4OAotOjEwMjFBMDAwMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUxNwotOjEwMjFCMDAwMzA5NjAwRkYwMEEyOTgyMTEyOTYwMDJBMDAwMDAwMDAyRAotOjEwMjFDMDAwOEUwMjAwMEMwMjAwMjAyMTAyNjAyODIxMTA0MDAwMjUxMAotOjEwMjFEMDAwMjYxMDAwMjgwRTAwMDZFMjAwMDAwMDAwOTI2MjAwMERBQQotOjEwMjFFMDAwMjY4MzAwMDEzMDc0MDBGRjMwNDIwMDdGQTI2MjAwMERBMAotOjEwMjFGMDAwMjQwNEZGODAxNjk3RkZGMDI2NzMwMDIwM0MwMjA4MDA5RAotOjEwMjIwMDAwOEM0MjAwREMwMDAwQTAyMTAyQTIxMDIxMDA0NDEwMjQxNgotOjEwMjIxMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA2NgotOjEwMjIyMDAwOEM2MzAwREMwMkEyMTAyMTAwNDQxMDI0QUY0MjAwMkM3OQotOjEwMjIzMDAwM0MwMjA4MDA4QzQyMDBFNDAyQTMxODIxMzA2MzAwN0ZCNgotOjEwMjI0MDAwMDJBMjEwMjEzMDQyMDA3RjAzNDIyMDIxMDM0MzE4MjFDMwotOjEwMjI1MDAwM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFMEEwMDA4M0M5NwotOjEwMjI2MDAwMDA4Mjk4MjE4RTQyMDBEOEFFMjIwMDUwOEU0MjAwRDhDMwotOjEwMjI3MDAwQUUyMjAwNzA5MjI1MDA4MzkyNDYwMEQxOTIyMzAwODMwMwotOjEwMjI4MDAwOTI0NDAwRDEyNDAyRkY4MDAwQTIyODI0MzA2MzAwN0YwMgotOjEwMjI5MDAwMzA4NDAwRkYwMEE2MjgyNTAwNjQxODJBMTA2MDAwMDI4MAotOjEwMjJBMDAwMzBBNTAwRkYzOEE1MDA4MEEyMjUwMDgzQTIyNTAwNzk3MwotOjEwMjJCMDAwMEUwMDA2RDUwMDAwMDAwMDkyMjIwMDdFMDJBMDIwMjEyMAotOjEwMjJDMDAwQTIyMjAwN0E4RTIzMDA3NDNDMDI3RkZGMzQ0MkZGRkY3QgotOjEwMjJEMDAwMDA2MjE4MjQwRTAwMDcwM0FFMjMwMDc0OEZBMjAwMTBDMgotOjEwMjJFMDAwQUY1RTAwMjQ4RkJGMDAzQ0FGNDIwMDI4OEZCRTAwMzg5NQotOjEwMjJGMDAwOEZBMjAwMTQ4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkMzQQotOjEwMjMwMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUMzRgotOjEwMjMxMDAwOEZCMDAwMTgyN0JEMDA0MDAzRTAwMDA4QUY0MjAwMkMzQQotOjEwMjMyMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDA4QgotOjEwMjMzMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDBGMDA4MDMwMjExMgotOjEwMjM0MDAwQTBBMDAwMDAzQzAyMDgwMDhDNDIwMEU0OEY4NDAwMzQwRQotOjEwMjM1MDAwMDA4MjIwMjEzMDgyMDA3RjAzNDIxODIxM0MwMjAwMENDMQotOjEwMjM2MDAwMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0QUNDMzAwMDBGOAotOjEwMjM3MDAwMDNFMDAwMDhBRjQ0MDAyODhDODIwMDAwMjQ0MjAwMjBDMwotOjEwMjM4MDAwMDNFMDAwMDhBQzgyMDAwMDk0QzIwMDAwM0MwODA4MDA5MgotOjEwMjM5MDAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNAotOjEwMjNBMDAwQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkJFNAotOjEwMjNCMDAwNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDBBMAotOjEwMjNDMDAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDA2RgotOjEwMjNEMDAwMzA0MkZGRkY1NDQzMDAwNzhGODYwMDI4MDEwNzEwMkI2RgotOjEwMjNFMDAwQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDA0RgotOjEwMjNGMDAwOEY4NjAwMjg4Q0M0MDAxQ0FGNDQwMDNDOTRBMjAwMDBDRgotOjEwMjQwMDAwOEY0MzAwM0MzMDQyRkZGRjAwMDIxMEMwMDA2MjE4MjFFMQotOjEwMjQxMDAwQUY0MzAwM0M4RjQyMDAzQzAwODIyMDIzMTg4MDAwMDQyMAotOjEwMjQyMDAwMDAwMDAwMDA4Q0MyMDAxODBBMDAwOERCMjQ0MjAwMDFGMgotOjEwMjQzMDAwOENDMjAwMThBRjQyMDAzODNDMDIwMDUwMzQ0MjAwMTBGOQotOjEwMjQ0MDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwMjQ1MDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDBDRAotOjEwMjQ2MDAwOEY0MjA0MDRBRDIyMDAwNDhGNDIwNDAwQUQyMjAwMDAxQwotOjEwMjQ3MDAwM0MwMjAwMjBBRjQyMDAzMDAzRTAwMDA4MDAwMDAwMDBGMgotOjEwMjQ4MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAyRAotOjEwMjQ5MDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDBBNQotOjEwMjRBMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDBENgotOjEwMjRCMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzBBOQotOjEwMjRDMDAwMEUwMDA4QjAwMjQwMzgyMTBBMDAwOTBEMDAwMDAwMDA4QgotOjEwMjREMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDdDNQotOjEwMjRFMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDA2MAotOjEwMjRGMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDBBMQotOjEwMjUwMDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDA1QQotOjEwMjUxMDAwMjQ0MjAwMDFBNjIyMDAwMDhGODIwMDI4OTYyMzAwMDA5QQotOjEwMjUyMDAwOTQ0MjAwMTYxNDQzMDAwNDhGQkYwMDFDMjQwMjAwMDFEMwotOjEwMjUzMDAwQTYyMjAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQwotOjEwMjU0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4OTAwMjgwRAotOjEwMjU1MDAwMjdCREZGRTBBRkJGMDAxODhEMjIwMDI4Mjc0ODA0MDBFOAotOjEwMjU2MDAwMzBFNzAwRkZBRjQyMDAzODhEMjIwMDJDQUY4ODAwMzBFQQotOjEwMjU3MDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDBDQQotOjEwMjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwMjU5MDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDQUQwMjAwMDA1OAotOjEwMjVBMDAwOEM4MjAwMTBBRDAyMDAwNDhDODIwMDE4QUQwMjAwMDg3RAotOjEwMjVCMDAwOEM4MjAwMUNBRDAyMDAwQzhDQTIwMDE0QUQwMjAwMTAzNQotOjEwMjVDMDAwOEM4MjAwMjBBRDAyMDAxNDkwODIwMDA1MzA0MjAwRkY5MgotOjEwMjVEMDAwMDAwMjEyMDBBRDAyMDAxODhDQTIwMDE4QUQwMjAwMUMwRgotOjEwMjVFMDAwOENBMjAwMENBRDAyMDAyMDhDQTIwMDEwQUQwMjAwMjREMQotOjEwMjVGMDAwOENBMjAwMUNBRDAyMDAyODhDQTIwMDIwQUQwMjAwMkM5MQotOjEwMjYwMDAwQUQwNjAwMzBBRDAwMDAzNDk3ODMwMDI2MzQwMkZGRkY5MgotOjEwMjYxMDAwMTQ2MjAwMDIwMDYwMjAyMTM0MDRGRkZGMTBFMDAwMTE2QQotOjEwMjYyMDAwQUQwNDAwMzg5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDFCRAotOjEwMjYzMDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDA1NQotOjEwMjY0MDAwMzA4NDAwMDcwMDgyMTAwNDAwNDUxMDI1QTA2MjAwNDA3RAotOjEwMjY1MDAwOEY4MjAwMjg5NDQyMDA1NjMwNDJGRkZGMEEwMDA5NzQxRQotOjEwMjY2MDAwQUQwMjAwM0M5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDE3QgotOjEwMjY3MDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDAxNQotOjEwMjY4MDAwMzA4NDAwMDcwMDgyMTAwNDAwMDIxMDI3MDA0NTEwMjQ0NwotOjEwMjY5MDAwQTA2MjAwNDBBRDAwMDAzQzAwMDAwMDAwMDAwMDAwMDAwRgotOjEwMjZBMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDQwQUY0MjAwMzAwRgotOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDA0OQotOjEwMjZDMDAwMzA0MjAwMTAxMDQwRkZGRDhGODYwMDI4QUY4ODAwMzA5OAotOjEwMjZEMDAwMjRDMjAwNTYyNEM3MDAzQzI0QzQwMDI4MjRDNTAwMzI2QwotOjEwMjZFMDAwMjRDNjAwMzYwRTAwMDhFRUFGQTIwMDEwOEZCRjAwMThGRgotOjEwMjZGMDAwMDNFMDAwMDgyN0JEMDAyMDhGODMwMDI0M0MwNjA4MDA2QgotOjEwMjcwMDAwOENDNjAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBERAotOjEwMjcxMDAwMDA0NjEwMjEwMDQzMTAyMTI0MDNGRjgwMzA0NjAwN0YzMwotOjEwMjcyMDAwMDA0MzEwMjRBRjQyMDAyODAzNDYxODIxM0MwMjAwMEM0RAotOjEwMjczMDAwMDA2MjMwMjE5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjE1QQotOjEwMjc0MDAwMzQ0MjAwMTBBMEMyMDAwRDhGODkwMDI4OEY4QTAwMjQxNwotOjEwMjc1MDAwOTUyMzAwMzYwMDBBMTM4MjMwNDgwMDAzMjQwMjAwMDE0QQotOjEwMjc2MDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDU1NAotOjEwMjc3MDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA5QjgyMQotOjEwMjc4MDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA5QjgyQwotOjEwMjc5MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwOUI4MjQ0MzAwMDE1MwotOjEwMjdBMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkI3QgotOjEwMjdCMDAwNTA0MDAwMDkyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDM0RQotOjEwMjdDMDAwMDAwMDAwMDAwQTAwMDlDNDI0MDcwMDAxOTUyMjAwM0UxMQotOjEwMjdEMDAwMjQ0MjAwMDFBNTIyMDAzRTAwMEExMzgyMzA0MzAwMDM3OAotOjEwMjdFMDAwMkM2MjAwMDIxMDQwMDAwOTAwODAyODIxMTQ2MDAwMDRCRgotOjEwMjdGMDAwMDAwMDAwMDA5NEMyMDAzNjBBMDAwOUQ0MzA0NkZGRkZGMgotOjEwMjgwMDAwOENDNjAwMzgwQTAwMDlENDAwODAyODIxMDAwMDMwMjEzRAotOjEwMjgxMDAwM0MwNDA4MDAyNDg0NEREODBBMDAwOTIxMDAwMDAwMDA2RgotOjEwMjgyMDAwMjc0OTAxMDA4RDIyMDAwQzk1MjMwMDA2MDEyMDIwMjE1QwotOjEwMjgzMDAwMDAwMjE2MDIzMDQ2MDAzRjMwNjNGRkZGMjQwMjAwMjdFQgotOjEwMjg0MDAwMDBDMDI4MjEyOEM3MDAyODEwQzIwMDBFQUY4MzAwMjQzMgotOjEwMjg1MDAwMTBFMDAwMDgyNDAyMDAzMTI0MDIwMDIxMTBDMjAwMDkwNwotOjEwMjg2MDAwMjQwMjAwMjUxMEMyMDAwNzkzODIwMDJEMEEwMDA5RjNGQwotOjEwMjg3MDAwMDAwMDAwMDAxMEMyMDAwNTkzODIwMDJEMEEwMDA5RjMzOQotOjEwMjg4MDAwMDAwMDAwMDAwQTAwMDk4QzAwMDAwMDAwMEEwMDA2QkVEQgotOjEwMjg5MDAwMDAwMDAwMDA5NTIzMDAwNjkxMjQwMDA1OEQyNTAwMEMwMgotOjEwMjhBMDAwOEQyNjAwMTA4RDI3MDAxODhEMjgwMDFDOEQyOTAwMjBGMgotOjEwMjhCMDAwMjQ0MjAwMDEzQzAxMDgwMEE0MjM0RERFM0MwMTA4MDAzNQotOjEwMjhDMDAwQTAyNDREREQzQzAxMDgwMEFDMjU0REU0M0MwMTA4MDA4RQotOjEwMjhEMDAwQUMyNjRERTgzQzAxMDgwMEFDMjc0REYwM0MwMTA4MDA1NwotOjEwMjhFMDAwQUMyODRERjQzQzAxMDgwMEFDMjk0REY4MDNFMDAwMDg4OQotOjEwMjhGMDAwQTM4MjAwMkQ4Rjg3MDAyODI3QkRGRkMwQUZCMzAwMzQwRgotOjEwMjkwMDAwQUZCMjAwMzBBRkIxMDAyQ0FGQjAwMDI4QUZCRjAwMzg3RAotOjEwMjkxMDAwM0MwMjA4MDA4QzQyMDBEMDk0RTMwMDMwMzBCMEZGRkY0RQotOjEwMjkyMDAwMDA1MDEwMDczMDQ1RkZGRjMwNjNGRkZGMDBDMDk4MjFDMwotOjEwMjkzMDAwQTdBMjAwMTAzQzExMDgwMDk2MzEwMEM2MTRBMzAwMDY5RgotOjEwMjk0MDAwMzA5MkZGRkY4Q0UyMDAyNDI0NDIwMDMwQUY0MjAwM0M3MgotOjEwMjk1MDAwMEEwMDBBMkM4Q0UyMDAyMDk0RTIwMDMyMzA0MkZGRkY5MQotOjEwMjk2MDAwNTRBMjAwMDgyN0E0MDAxODhDRTIwMDJDMjQ0MjAwMzA1NgotOjEwMjk3MDAwQUY0MjAwM0M4Q0UyMDAyOEFGNDIwMDM4MEEwMDBBM0ExRAotOjEwMjk4MDAwOEY4NDAwMjgyN0E1MDAxMDI3QTYwMDIwMDIyMDM4MjFDOAotOjEwMjk5MDAwMEUwMDA4QjBBN0EwMDAyMDhGQTIwMDE4MjQ0MjAwMzAyQgotOjEwMjlBMDAwQUY0MjAwMzg4RkEyMDAxQ0FGNDIwMDNDOEY4NDAwMjg0OQotOjEwMjlCMDAwM0MwMjAwMDVBRjQyMDAzMDk0ODIwMDM0Mjc0MzA0MDBGQgotOjEwMjlDMDAwMzA0MkZGRkYwMjAyMTAyQjE0NDAwMDA3QUY4MzAwMzA5QgotOjEwMjlEMDAwOTQ4MjAwNTQ5NDgzMDAzNDAyMDIxMDIxMDA0MzEwMjM5NwotOjEwMjlFMDAwMEEwMDBBNEUzMDQzRkZGRjk0ODMwMDU0OTQ4MjAwMzQ1RgotOjEwMjlGMDAwMDIyMzE4MjEwMDUwMTAyMzAwNjIxODIzMzA2M0ZGRkZDOAotOjEwMkEwMDAwOTQ4MjAwMTYzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDBEMAotOjEwMkExMDAwMEEwMDBBNUMyNDAzMDAwMTk0ODIwMDE2MzA0MkZGRkY4MgotOjEwMkEyMDAwMDA0MzEwMkIxMDQwMDAwNThGODIwMDMwOTQ4MjAwMTY2NgotOjEwMkEzMDAwMDA2MjEwMjMzMDQzRkZGRjhGODIwMDMwQUM1MzAwMDA1MAotOjEwMkE0MDAwQUM0MDAwMDRBQzUyMDAwOEFDNDMwMDBDM0MwMjAwMDY1MQotOjEwMkE1MDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwMkE2MDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkRDNwotOjEwMkE3MDAwMDAxMDE4QzIwMDY0MTgyMTkwNjUwMDQwMzIwNDAwMDc1RAotOjEwMkE4MDAwMjQwMjAwMDE4RkJGMDAzODhGQjMwMDM0OEZCMjAwMzBCMgotOjEwMkE5MDAwOEZCMTAwMkM4RkIwMDAyODAwODIxMDA0MDA0NTEwMjU1MwotOjEwMkFBMDAwMjdCRDAwNDAwM0UwMDAwOEEwNjIwMDQwMjdCREZGQTg0QQotOjEwMkFCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ2MAotOjEwMkFDMDAwQUZCMTAwM0NBRkJGMDA1NEFGQjIwMDQwQUZCMDAwMzg3MAotOjEwMkFEMDAwOEM5MDAwMDAzQzAyMDgwMDhDNDIwMEU4OEY4NjAwMzQ5NQotOjEwMkFFMDAwOTYwMzAwMDIyNDEzRkY4MDAwQzIzMDIxMzA2MzNGRkZCMQotOjEwMkFGMDAwMDAwMzE5ODAwMEMzMzgyMTAwRjMxMDI0OTBCMjAwMDBCNQotOjEwMkIwMDAwQUY0MjAwMkM5MjAzMDAwMjMwRTIwMDdGMDM0MjMwMjFFQQotOjEwMkIxMDAwM0MwMjAwMEUwMEMyODgyMTMwNjMwMEMwMjQwMjAwNDA0NQotOjEwMkIyMDAwMDA4MEE4MjEwMEEwQjAyMTE0NjIwMDI2MDAwMEEwMjE4RQotOjEwMkIzMDAwOEUzNDAwMzg4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDE1NgotOjEwMkI0MDAwQUUyMjAwMTg5MjAyMDAwRDMwNDIwMDIwMTQ0MDAwMTUwMQotOjEwMkI1MDAwOEY4MjAwMzQzQzAzMDgwMDhDNjMwMERDMDAxMjM4QzAxNAotOjEwMkI2MDAwMDAxMjMxNDAwMDQzMTAyMTAwQzczMDIxMDA0NjM4MjFCNwotOjEwMkI3MDAwMzBFMzAwMDczQzAyMDA4MDMwRTYwMDc4MDBDMjMwMjVEOAotOjEwMkI4MDAwMDM0MzE4MjEwMEYzMTAyNEFGNDIwODAwMjQ2MzA5MDAxNgotOjEwMkI5MDAwQUY0NjA4MTA4RTIyMDAxODhDNjMwMDA4MDA0MzEwMjFGNQotOjEwMkJBMDAwQUUyMjAwMTg4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEzMQotOjEwMkJCMDAwMDA2MjE4MkIxMDYwMDAzRDAwMDAwMDAwMEEwMDBCMTA5RQotOjEwMkJDMDAwMDAwMDAwMDA5MjAzMDAwMjI0MDJGRkMwMDA0MzEwMjQxMgotOjEwMkJEMDAwMzA0MjAwRkYxNDQwMDAwNTI0MDIwMDAxQUUyMjAwMTgxQwotOjEwMkJFMDAwOTYyMjAwMzYwQTAwMEFGOTMwNTRGRkZGOEUyMjAwMTRBNAotOjEwMkJGMDAwMjQ0MjAwMDFBRTIyMDAxODkyMDIwMDAwMDAwMjE2MDBEQQotOjEwMkMwMDAwMDAwMjE2MDMwNDQxMDAyOTAwMDAwMDAwOTYwMjAwMDJBMQotOjEwMkMxMDAwMjdBNDAwMTAwMDgwMjgyMUE3QTIwMDE2OTYwMjAwMDIxNwotOjEwMkMyMDAwMjQwNzAwMDEwMDAwMzAyMTMwNDJGRkZGQUY4MjAwMjQ2MgotOjEwMkMzMDAwMEUwMDA5MjFBRkEwMDAxQzk2MDMwMDAyM0MwNDA4MDAwRQotOjEwMkM0MDAwOEM4NDAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBEQQotOjEwMkM1MDAwMDA0NDEwMjEwMDQzMTAyMTMwNDMwMDdGM0MwNTAwMEM0QwotOjEwMkM2MDAwMDA1MzEwMjQwMzQzMTgyMUFGNDIwMDI4MDA2NTE4MjFBNwotOjEwMkM3MDAwOTA2MjAwMEQwMDEyMjE0MDMwNDIwMDdGQTA2MjAwMERFMgotOjEwMkM4MDAwM0MwMzA4MDA4QzYzMDBFNDhGODIwMDM0MDA0MzEwMjE3MQotOjEwMkM5MDAwMDA0NDM4MjEzMEUyMDA3RjAzNDIxMDIxMDA0NTEwMjExQQotOjEwMkNBMDAwMDBGMzE4MjRBRjQzMDAyOEFFQTIwMDAwOTIyMjAwMERDQQotOjEwMkNCMDAwMzA0MjAwMTAxMDQwMDAxMzAyQTAyMDIxOEY4MzAwMjgxMgotOjEwMkNDMDAwOEVBNDAwMDAwMjgwMzAyMTk0NjIwMDNFMjQ0MkZGRkY2NwotOjEwMkNEMDAwQTQ2MjAwM0U5NDg0MDAwMjk2MjUwMDBFMzA4NEZGRkYxQgotOjEwMkNFMDAwMEUwMDBBMEIzMEE1RkZGRjhGODIwMDI4OTQ0MzAwMzRBQQotOjEwMkNGMDAwOTYyMjAwMEUxNDQzMDAwMzAyQTAyMDIxMjQwMjAwMDFBQQotOjEwMkQwMDAwQTM4MjAwMkMwMkMwMjgyMTBFMDAwODk2MDAwMDAwMDBCQgotOjEwMkQxMDAwOEZCRjAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg2MQotOjEwMkQyMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhBOQotOjEwMkQzMDAwMDNFMDAwMDgyN0JEMDA1ODhGODIwMDI4MjdCREZGRDA4MAotOjEwMkQ0MDAwQUZCNDAwMjhBRkIyMDAyMEFGQkYwMDJDQUZCMzAwMjQ1NwotOjEwMkQ1MDAwQUZCMTAwMUNBRkIwMDAxODkwNDQwMEQwOTA0MzAwRDEzOAotOjEwMkQ2MDAwMDAwMEEwMjEzMDkyMDBGRkEzQTMwMDEwMzA2MzAwRkZGOQotOjEwMkQ3MDAwOEM1MTAwRDg4QzUzMDBEQzEwNzIwMDJCMjQwMjAwMDEwRgotOjEwMkQ4MDAwM0MwMzA4MDA4QzYzMDBFNDkzQTQwMDEwOEY4MjAwMzQ5RAotOjEwMkQ5MDAwMjQwNkZGODAwMDA0MjE0MDAwNDMxMDIxMDA0NDEwMjEzQwotOjEwMkRBMDAwMzA0MzAwN0YwMDQ2MTAyNEFGNDIwMDI4MDM0MzE4MjExRgotOjEwMkRCMDAwM0MwMjAwMEMwMDYyMTgyMThDNjIwMDA0MjdBNDAwMTQ1RAotOjEwMkRDMDAwMjdBNTAwMTAwMjIyODAyMTAyNzAxMDIzMDQ0MDAwMTU2NAotOjEwMkREMDAwQUZBMzAwMTQ5MDYyMDAwRDAwQzIxMDI0MzA0MjAwRkYyNwotOjEwMkRFMDAwMTQ0MDAwMDcwMjAwODgyMTkwNjIwMDBEMzQ0MjAwNDAyOAotOjEwMkRGMDAwMEUwMDA4OTZBMDYyMDAwRDBBMDAwQjU1OTNBMjAwMTA2OQotOjEwMkUwMDAwMEUwMDBBNzkyNDE0MDAwMThGODMwMDI4QUM3MDAwRDhDQQotOjEwMkUxMDAwOTNBMjAwMTBBMDYyMDBEMTkzQTIwMDEwMTQ1MkZGRDgxOAotOjEwMkUyMDAwMDAwMDAwMDAyNDAyMDAwMTE2ODIwMDA0OEZCRjAwMkM2NQotOjEwMkUzMDAwMEUwMDA2QkUwMDAwMDAwMDhGQkYwMDJDOEZCNDAwMjhEQgotOjEwMkU0MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwOAotOjEwMkU1MDAwMDNFMDAwMDgyN0JEMDAzMDI3QkRGRkQ4QUZCMzAwMUMzQQotOjEwMkU2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA3OAotOjEwMkU3MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDA1MkI3QgotOjEwMkU4MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwMkU5MDAwOEY4MjAwMjBBQzUxMDAwMEFDNTIwMDA0QUM1MzAwMDhGQgotOjEwMkVBMDAwQUM0MDAwMENBQzQwMDAxMEFDNDAwMDE0QUM0MDAwMTgyQQotOjEwMkVCMDAwM0MwMzA4MDA5NDYzNERCRTAyMDM4MDI1QUM1MDAwMUMwNwotOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDFEOQotOjEwMkVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3OQotOjEwMkVFMDAwOEZCMDAwMTAwQTAwMDU1MDI3QkQwMDI4MjdCREZGRTg1RAotOjEwMkVGMDAwQUZCMDAwMTBBRkJGMDAxNDMwQTVGRkZGMzBDNjAwRkYxOQotOjEwMkYwMDAwMDA4MDgwMjEyNDAyMEM4MEFGNDIwMDI0MDAwMDAwMDBEOQotOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwMkYyMDAwMEUwMDBCNjQwMDAwMDAwMDNDMDQwODAwMjQ4NDAwRTA1NAotOjEwMkYzMDAwOEM4MjAwMDAyNDAzRkY4MDhGQkYwMDE0MDIwMjEwMjE0NgotOjEwMkY0MDAwMDA0MzEwMjRBRjQyMDAyNDhDODIwMDAwM0MwMzAwMEE5RQotOjEwMkY1MDAwMDIwMjgwMjEzMjEwMDA3RjAzNTAxMDIxOEZCMDAwMTAzOAotOjEwMkY2MDAwMDA0MzEwMjEyN0JEMDAxODAzRTAwMDA4QUY4MjAwMjhBRAotOjEwMkY3MDAwMjdCREZGRThBRkJGMDAxMDhGNDQwMTQwM0MwMzA4MDBBRAotOjEwMkY4MDAwOEM2MzAwRTAyNDAyRkY4MEFGODQwMDM0MDA4MzE4MjFBQQotOjEwMkY5MDAwMDA2MjEwMjRBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5QQotOjEwMkZBMDAwOTUwNTAwMDIzMDYzMDA3RjNDMDIwMDBBMDM0MzE4MjFBQwotOjEwMkZCMDAwMDA2MjE4MjEzMEE1RkZGRjM0MDJGRkZGMDAwMDMwMjExRQotOjEwMkZDMDAwM0MwNzYwMjAxMEEyMDAwNkFGODMwMDI4MjQwMkZGRkYwOAotOjEwMkZEMDAwQTUwMjAwMDI5NDY1MDBENDBFMDAwQjg5MzBBNUZGRkYwNgotOjEwMkZFMDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDhFQQotOjEwMkZGMDAwQUY0MjAwMjQzQzAyMDAwODAzNDI0MDIxOTUwMjAwMDIzNwotOjEwMzAwMDAwM0MwQTA4MDA5NTRBMDBDNjMwNDZGRkZGMTRDMDAwMDc3RQotOjEwMzAxMDAwMzQwMkZGRkY4RjgyMDAyODhGODQwMDM0M0MwNzYwMjAzOQotOjEwMzAyMDAwOTQ0NTAwRDQwQTAwMEJGMjMwQTVGRkZGMTBDMjAwMjQyMwotOjEwMzAzMDAwOEY4NzAwMjg5NEUyMDA1NDk0RTQwMDE2MzA0NUZGRkY4NwotOjEwMzA0MDAwMDBBNjEwMjMwMEE2MTgyQjMwODlGRkZGMTA2MDAwMDQ5MwotOjEwMzA1MDAwMzA0NEZGRkYwMEM1MTAyMzAxMjIxMDIzMzA0NEZGRkYzRQotOjEwMzA2MDAwMDA4QTEwMkIxMDQwMDAwQzAxMkExMDIzMjQwMjAwMDFCQQotOjEwMzA3MDAwQTUwMjAwMTYyNDAyRkZGRkE1MDIwMDAyOTRFNTAwRDQ3OQotOjEwMzA4MDAwOEY4NDAwMzQwMDAwMzAyMTMwQTVGRkZGM0MwNzYwMjAxMgotOjEwMzA5MDAwMEEwMDBCODkwMDAwMDAwMDAwNDQxMDJBMTA0MDAwMDhCQwotOjEwMzBBMDAwMDAwMDAwMDA5NTAyMDAxNjMwNDIwMDAxMTA0MDAwMDRBQwotOjEwMzBCMDAwMDAwMDAwMDA5NzQyMDA3RTI0NDIwMDE0QTUwMjAwMTY4MgotOjEwMzBDMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI4MjdCREZGRTAxNwotOjEwMzBEMDAwQUZCRjAwMTg5NDgyMDAzNDk0ODMwMDNFMTA2MDAwMUE0MQotOjEwMzBFMDAwMzA0OEZGRkY5MzgzMDAyQzI0MDIwMDAxMTQ2MjAwMjc2NAotOjEwMzBGMDAwOEZCRjAwMTg4RjgyMDAyODAwMDgxOEMyMzEwODAwMDcwRgotOjEwMzEwMDAwMDA2MjE4MjEyNDQ3MDAzQTI0NDkwMDU0MjQ0NDAwMjAzNgotOjEwMzExMDAwMjQ0NTAwMzAyNDQ2MDAzNDkwNjIwMDQwMzA0MjAwRkZENQotOjEwMzEyMDAwMDEwMjEwMDczMDQyMDAwMTEwNDAwMDE2OEZCRjAwMTg0NgotOjEwMzEzMDAwMEUwMDA4RUVBRkE5MDAxMDhGODIwMDI4OTQ0MjAwMzRFMAotOjEwMzE0MDAwMEEwMDBDMEIzMDQ4RkZGRjk0ODMwMDM2OTQ4MjAwMzQ1MQotOjEwMzE1MDAwMTA0MzAwMEU4RkJGMDAxODk0ODIwMDM2QTQ4MjAwMzQwMgotOjEwMzE2MDAwOTQ4MjAwNTZBNDgyMDA1NDhDODIwMDJDQUM4MjAwMjRFRAotOjEwMzE3MDAwOTQ4MjAwMzJBNDgyMDAzMDk0ODIwMDNDQTQ4MjAwM0FGRgotOjEwMzE4MDAwOEZCRjAwMTgwQTAwMEJDQjI3QkQwMDIwMDNFMDAwMDgwQQotOjEwMzE5MDAwMjdCRDAwMjAyN0JERkZFOEFGQkYwMDEwOEY0QTAxMDAwOAotOjEwMzFBMDAwM0MwNTA4MDA4Q0E1MDBFMDNDMDIwODAwOTA0MjRERTQ3QwotOjEwMzFCMDAwM0MwQzA4MDA5NThDNERERTAxNDUyODIxMzA0QjAwM0YyQQotOjEwMzFDMDAwMzBBMjAwN0YwMzQyNDAyMTM5NjkwMDMyM0MwMjAwMEFFQwotOjEwMzFEMDAwMzk2MzAwM0YyQzYzMDAwMTAxMDI0MDIxMkQyOTAwMDFDOQotOjEwMzFFMDAwMjQwMkZGODAwMEEyMjgyNDAxMjM0ODI1QUY4QTAwMzQ0RQotOjEwMzFGMDAwMDA4MDE4MjFBRjQ1MDAyNDAwMDAzMDIxMDA4MDI4MjFFNAotOjEwMzIwMDAwMjQwNzAwMDFBRjg4MDAyODNDMDQwODAwMjQ4NDRERDgxRQotOjEwMzIxMDAwQUY4QzAwMjQxNTIwMDAwN0EzODAwMDJEMjQwMjAwMjA3RAotOjEwMzIyMDAwNTU2MjAwMEYwMDYwMjAyMTM0MDJGRkZGNTU4MjAwMEMyMAotOjEwMzIzMDAwMDA2MDIwMjEyNDAyMDAyMDE1NjIwMDA1MDAwMDAwMDAyQgotOjEwMzI0MDAwOEM2MzAwMTQyNDAyRkZGRjEwNjIwMDA3MDAwMDAwMDBERQotOjEwMzI1MDAwMEUwMDA5MjEwMDAwMDAwMDBBMDAwQzY4MDAwMDAwMDBCOAotOjEwMzI2MDAwMEUwMDA5OEMwMTYwMjgyMTBFMDAwQzAwMDAwMDAwMDBGNwotOjEwMzI3MDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDg1NwotOjEwMzI4MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMjdCREZGQTBCMgotOjEwMzI5MDAwQUZCMTAwM0MwMDgyMTAyMTI0MTFGRjgwQUZCRTAwNTg2NgotOjEwMzJBMDAwQUZCNzAwNTRBRkIyMDA0MEFGQjAwMDM4QUZCRjAwNUM2MgotOjEwMzJCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ1OAotOjEwMzJDMDAwMDA1MTEwMjQ4RjQ4MDAyNDhGNDkwMDI4OEY0NzAwMjg4MAotOjEwMzJEMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMDA4MDkwMjFCNAotOjEwMzJFMDAwMjQwNjAwMDYwMDgyMTAyMTMwNDIwMDdGMDM0MjE4MjE4QwotOjEwMzJGMDAwM0MwMjAwMEEwMDYyODAyMTNDMDIwMDFGMzQ0MkZGODAzMQotOjEwMzMwMDAwMDBFMjM4MjQyN0E0MDAxMDI2MDUwMEYwMDEyMkYwMjQ1MgotOjEwMzMxMDAwMDEwMkI4MjQwRTAwMDVCNUFGQTcwMDMwOEZBMjAwMTgzNwotOjEwMzMyMDAwQUUwMjAwQzQ4RkEyMDAxQ0FFMDIwMEM4OEZBMjAwMjQwRgotOjEwMzMzMDAwQUUwMjAwQ0M5M0E0MDAxMDkyMDMwMEQxMjQwMkZGODBCRgotOjEwMzM0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4MzAwN0ZBNQotOjEwMzM1MDAwMzEyMjAwN0YwMDYyMTAyQTEwNDAwMDA0MDAwMzEwQzBEOAotOjEwMzM2MDAwMDEzMTEwMjYzMDQ5MDBGRjAwMDMxMEMwMDAwMzE5NDA0RQotOjEwMzM3MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDOTIwNDAwRDI1QQotOjEwMzM4MDAwMDI0MjEwMjEwMDQzMTAyMTAwNTExMDI0QUY0MjAwMjhCNgotOjEwMzM5MDAwOTNBMzAwMTAzMDYzMDA3RjAwMDMxMEMwMDAwMzE5NDBBNgotOjEwMzNBMDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjExRAotOjEwMzNCMDAwMDA0MzEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMENFMAotOjEwMzNDMDAwMDA2MjQwMjE4RkEzMDAxNDI0MDJGRkZGMTA2MjAwMzAyRQotOjEwMzNEMDAwMzA5NTAwRkY5M0EyMDAxMTk1MDMwMDE0MzA0NDAwRkZDNAotOjEwMzNFMDAwMzA2M0ZGRkYwMDY0MTgyQjEwNjAwMDBEMDAwMDAwMDAyOAotOjEwMzNGMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYxMwotOjEwMzQwMDAwMDA0NDIwMjMwMDA0MjEwMDAwMDAxMDIxMDBFNDM4MjFBMgotOjEwMzQxMDAwMDBFNDIwMkIwMEMyMzAyMTBBMDAwQ0UyMDBDNDMwMjE1RAotOjEwMzQyMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkZFMgotOjEwMzQzMDAwMDA4MjIwMjMwMDA0MjEwMDAwMDAxMDIxMDA4MDE4MjFCOAotOjEwMzQ0MDAwMDBDMjMwMjMwMEU0MjAyQjAwQzQzMDIzMDBFMzM4MjNFMwotOjEwMzQ1MDAwQUQwNzAwMUNBRDA2MDAxODkzQTIwMDExQTUwMjAwMTREMAotOjEwMzQ2MDAwOTdBMjAwMTJBNTAyMDAxNjhGQTIwMDE0QUQwMjAwMTA1MAotOjEwMzQ3MDAwOEZBMjAwMTRBRDAyMDAwQzkzQTIwMDExQTUwMjAwMjAzRgotOjEwMzQ4MDAwOTdBMjAwMTJBNTAyMDAyMjhGQTIwMDE0QUQwMjAwMjQxMAotOjEwMzQ5MDAwMjQwNkZGODAwMjQ2MTAyNDMyNTYwMDdGQUY0MjAwMjRFQgotOjEwMzRBMDAwMDM1NjE4MjEzQzAyMDAwQTAwNjI4MDIxOEUwMjAwNEM2MwotOjEwMzRCMDAwOEZBMjAwMjAzMTI0MDA3RjAwMDQyOEMwQUUwMjAwNTBGQgotOjEwMzRDMDAwOEZBMjAwMjAwMDA0MjE0MDAwODUyODIxQUUwMjAwNzA1OAotOjEwMzREMDAwOTNBMjAwMTAwMTIwODgyMUEyMDIwMDgzOTNBMjAwMTA3MQotOjEwMzRFMDAwQTIwMjAwNzk5MjAyMDA4NTMwNDIwMDNGQTIwMjAwODVDQwotOjEwMzRGMDAwM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxMDA0NTEwMjFGMQotOjEwMzUwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTQyQwotOjEwMzUxMDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjFBRgotOjEwMzUyMDAwMDA0NjEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQxMAotOjEwMzUzMDAwMDI0MzE4MjEwMDY1MTgyMTAyNDIxMDIxMDA0NDEwMjE4NQotOjEwMzU0MDAwMzA0MjAwN0YzMDYzMDA3RjkzQTUwMDEwMDM0MjIwMjFBQQotOjEwMzU1MDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEM5MwotOjEwMzU2MDAwMTBCMTAwOEMwMDgyNDgyMTMyMzMwMDdGMTY2MDAwMTlCMAotOjEwMzU3MDAwMjQwNEZGODAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEzRgotOjEwMzU4MDAwMDA0NDEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTRBRQotOjEwMzU5MDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjQyQwotOjEwMzVBMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjE4QwotOjEwMzVCMDAwMzA2MzAwN0YwMjQyMTAyMTMwNDIwMDdGMDM0MjIwMjEwRAotOjEwMzVDMDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEMyMwotOjEwMzVEMDAwMDA4MjQ4MjE5MTI0MDAwRDI0MTRGRjgwMDAwMDEwMjE1NgotOjEwMzVFMDAwMDA5NDIwMjVBMTI0MDAwRDk1MDQwMDAyOTUwNTAwMTRFNwotOjEwMzVGMDAwOEQwNzAwMUMzMDg0RkZGRjMwQTVGRkZGOEQwNjAwMThFQgotOjEwMzYwMDAwMDA4NTIwMjMwMDA0MjEwMDAwRTQzODIxMDBDMjMwMjE3RAotOjEwMzYxMDAwMDBFNDIwMkIwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThDQgotOjEwMzYyMDAwOTUwMjAwMDJBNTAyMDAxNEE1MDAwMDE2OEQwMjAwMDhGNAotOjEwMzYzMDAwQUQwMjAwMTA4RDAyMDAwOEFEMDIwMDBDOTUwMjAwMDJFMAotOjEwMzY0MDAwQTUwMjAwMjBBNTAwMDAyMjhEMDIwMDA4QUQwMjAwMjQ4MgotOjEwMzY1MDAwOTEyMjAwMEQzMDQyMDA0MDEwNDAwMDQyMjYyMjAwMDExRAotOjEwMzY2MDAwM0MwMjA4MDA4QzQyMDBFMEEzQjMwMDI4M0MxMDAwMEE5MgotOjEwMzY3MDAwMDI0MjEwMjEwMDU0MTAyNEFGNDIwMDI0M0MwMjA4MDBGMgotOjEwMzY4MDAwOEM0MjAwRTBBMzgwMDAyQzI3QTQwMDJDMDI0MjEwMjFEMQotOjEwMzY5MDAwMzA0MjAwN0YwMzQyMTgyMTAwNzAxODIxOEM2MjAwRDg0QwotOjEwMzZBMDAwOEQyNjAwMDQyN0E1MDAyOEFGQTkwMDJDMDA0NjEwMjE3NAotOjEwMzZCMDAwQUM2MjAwRDgwRTAwMEE3OUFGODMwMDI4OTNBMzAwMjhEQgotOjEwMzZDMDAwOEY4MjAwMjgwRTAwMDZCRUEwNDMwMEQxMEUwMDBDMDAyMQotOjEwMzZEMDAwMDAwMDAwMDAwMjU0MTAyNEFGNDIwMDI0M0MwMjA4MDAwNQotOjEwMzZFMDAwOEM0MjAwREMwMDEzMjk0MDAwMTMyMEMwMDBBNDIwMjFEQwotOjEwMzZGMDAwMDI0MjEwMjEwMDQ0MTAyMTAwNTQxMDI0QUY0MjAwMkMzQgotOjEwMzcwMDAwM0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwOEM2MzAwRENBRgotOjEwMzcxMDAwMDM1NjMwMjEwMjQyMTAyMTAwNDUxMDIxMDA1NDEwMjQ4QwotOjEwMzcyMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwQQotOjEwMzczMDAwMDA2NDE4MjEwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YxMAotOjEwMzc0MDAwMzA2MzAwN0YwMzQyMjAyMTAzNDMxODIxM0MwMjAwMEUxNgotOjEwMzc1MDAwMDA2MjQwMjEzQzAyMDAwQzAwRDA4MDIxMDA4MjQ4MjEwMAotOjEwMzc2MDAwMjYyMjAwMDEzMDQzMDA3RjE0NzUwMDA1MzA0NDAwRkYxRAotOjEwMzc3MDAwMjQwM0ZGODAwMjIzMTAyNDAwNDMxMDI2MzA0NDAwRkY1RQotOjEwMzc4MDAwOTNBMjAwMTAwMDgwODgyMTI1MDgwMDI4MTQ0NEZGNzZBOQotOjEwMzc5MDAwMjUyOTAwMjA5M0E0MDAxMDhGQTMwMDE0MjQwMkZGRkYwQQotOjEwMzdBMDAwMTA2MjAwMEEzMDg5MDBGRjI0ODIwMDAxMjQ4MzAwMDE5NgotOjEwMzdCMDAwMzA0MjAwN0YxNDU1MDAwNTMwNjkwMEZGMjQwM0ZGODA2QwotOjEwMzdDMDAwMDA4MzEwMjQwMDQzMTAyNjMwNDkwMEZGOTIwMjAwNzg0NQotOjEwMzdEMDAwMzA1MzAwRkYxMTMzMDAzMjAxMjA4ODIxM0MwMjA4MDBFMQotOjEwMzdFMDAwOEM0MjAwREMzMjI1MDA3RjAwMDUyMEMwMDAwNTI5NDAwNgotOjEwMzdGMDAwMDBBNDIwMjEwMjQyMTAyMTI0MDZGRjgwMDA0NDEwMjE1MQotOjEwMzgwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDMwODAwOEM2MzAwREMwRgotOjEwMzgxMDAwM0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxMDI0MjEwMjFCRAotOjEwMzgyMDAwMDA0NTEwMjEwMDY0MTgyMTAwNDYxMDI0MzA2MzAwN0ZGOQotOjEwMzgzMDAwQUY0MjAwMjgwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjFFMQotOjEwMzg0MDAwM0MwMjA4MDA4QzQyMDBFNDhEMDYwMDBDMDEwMDIwMjE5RgotOjEwMzg1MDAwMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGMDM0MjE4MjEwRQotOjEwMzg2MDAwM0MwMjAwMEMwMDYyNDgyMTEwQzAwMDBEMDEyMDI4MjFGQwotOjEwMzg3MDAwMEUwMDA2RTIwMDAwMDAwMDI0MDJGRjgwMDIyMjE4MjQ0RAotOjEwMzg4MDAwMjYyNDAwMDEwMDYyMjgyNjMwODIwMDdGMTQ1NTAwMDJBMQotOjEwMzg5MDAwMzA4MzAwRkYzMEEzMDBGRjE0NzNGRkQwMDA2MDg4MjE0NQotOjEwMzhBMDAwOEUwMzAwNzQzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjQ0NQotOjEwMzhCMDAwQUUwMzAwNzQwRTAwMDcwMzAyNDAyMDIxQUY1NzAwMjQxRQotOjEwMzhDMDAwOEZBMjAwMzBBRjVFMDAyODhGQkYwMDVDOEZCRTAwNTgxMwotOjEwMzhEMDAwOEZCNzAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg5RQotOjEwMzhFMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhERQotOjEwMzhGMDAwMjdCRDAwNjAwM0UwMDAwOEFGNDIwMDJDMjdCREZGRDhDMQotOjEwMzkwMDAwQUZCMTAwMUNBRkJGMDAyMEFGQjAwMDE4Mjc1MTAxODgzNQotOjEwMzkxMDAwOTIyMjAwMDMyNDA4RkY4MDNDMDMwMDBBMzA0NzAwN0YwNgotOjEwMzkyMDAwQTNBNzAwMTA4RjQ2MDE4MDNDMDIwODAwOEM0MjAwRTBGMwotOjEwMzkzMDAwQUY4NjAwMzQwMEMyMjgyMTAwQTgxMDI0QUY0MjAwMjQyMgotOjEwMzk0MDAwOTIyNDAwMDAzMEEyMDA3RjAzNDIxMDIxMDA0MzEwMjE4NgotOjEwMzk1MDAwQUY4MjAwMjgzMDg0MDA3RjI0MDIwMDAyMTQ4MjAwMjVGOAotOjEwMzk2MDAwMDAwNzE5NDAzQzAyMDgwMDhDNDIwMEU0MDBDMjEwMjEwQwotOjEwMzk3MDAwMDA0MzI4MjEzMEEyMDA3RjAzNDIxODIxMDBBODEwMjQxMAotOjEwMzk4MDAwQUY0MjAwMjgzQzAyMDAwQzAwNjIxODIxOTA2MjAwMEQzQQotOjEwMzk5MDAwQUZBMzAwMTQwMDQ4MTAyNUEwNjIwMDBEOEZBMzAwMTRFRgotOjEwMzlBMDAwOTA2MjAwMEQzMDQyMDA0MDUwNDAwMDZBOEZCRjAwMjBGRQotOjEwMzlCMDAwOEY4NjAwMjhBMzgwMDAyQzI3QTQwMDE0OENDMjAwRDg3NgotOjEwMzlDMDAwOEM2MzAwMDQyN0E1MDAxMDAwNDMxMDIxMEUwMDBBNzkyMwotOjEwMzlEMDAwQUNDMjAwRDg5M0EzMDAxMDhGODIwMDI4MEUwMDA2QkU1MAotOjEwMzlFMDAwQTA0MzAwRDEwRTAwMEMwMDAwMDAwMDAwMEEwMDBFQTM0RQotOjEwMzlGMDAwOEZCRjAwMjAwRTAwMDZDNzAwQzAyMDIxMEUwMDA2RDU5NAotOjEwM0EwMDAwMDAwMDAwMDAzQzAyMDAwODAzNDI4MDIxOTIyMzAwMDFENAotOjEwM0ExMDAwOTIwMjAwN0IxNDQzMDA0RjhGQkYwMDIwOTIyMjAwMDBDRgotOjEwM0EyMDAwMzA0NDAwN0YyNDAyMDAwNDEwODIwMDE3Mjg4MjAwMDUyMQotOjEwM0EzMDAwMTA0MDAwMDYyNDAyMDAwNTI0MDIwMDAzMTA4MjAwMDc0MwotOjEwM0E0MDAwOEZCMTAwMUMwQTAwMEVBNDAwMDAwMDAwMTA4MjAwMTJCQQotOjEwM0E1MDAwOEZCRjAwMjAwQTAwMEVBNDhGQjEwMDFDOTIwNTAwODNDNgotOjEwM0E2MDAwOTIwNjAwNzg4RTA3MDA3NDhGODQwMDM0MzBBNTAwRkYyMgotOjEwM0E3MDAwMDAwNzNFMDIzMEM2MDBGRjBFMDAwNzBCMzBFNzAwN0Y1NAotOjEwM0E4MDAwMEEwMDBFQTM4RkJGMDAyMDBFMDAwQzZGOEY4NDAwMzQzRAotOjEwM0E5MDAwMEEwMDBFQTM4RkJGMDAyMDI0MDIwQzgwQUY0MjAwMjQzNgotOjEwM0FBMDAwOTIwMjAwM0UzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDAyMgotOjEwM0FCMDAwOTIwMjAwM0UwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDZCNgotOjEwM0FDMDAwMDAwMDAwMDA4Rjg0MDAzNDBFMDAwNjM4MjQwNTAwOTNBNwotOjEwM0FEMDAwMEEwMDBFQTM4RkJGMDAyMDkyMDIwMDNGMjQwMzAwMThBQgotOjEwM0FFMDAwMzA0MjAwRkYxNDQzMDAwQzhGODQwMDM0MjQwNTAwMzk1OQotOjEwM0FGMDAwMEUwMDA1RDAwMDAwMzAyMTBFMDAwMzAyOEY4NDAwMzQzOAotOjEwM0IwMDAwMjQwMjAwMTJBMjAyMDAzRjBFMDAwMzBCOEY4NDAwMzQzNwotOjEwM0IxMDAwMEEwMDBFQTM4RkJGMDAyMDI0MDUwMDM2MEUwMDA1RDAzQQotOjEwM0IyMDAwMDAwMDMwMjEwQTAwMEVBMzhGQkYwMDIwMEUwMDAzMDIwOAotOjEwM0IzMDAwOEY4NDAwMzQ5MjAyMDAwNTM0NDIwMDIwQTIwMjAwMDU2NgotOjEwM0I0MDAwMEUwMDAzMEI4Rjg0MDAzNDBFMDAxMDU4OEY4NDAwMzQ1NQotOjEwM0I1MDAwOEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MjQwMjBDODA5MgotOjEwM0I2MDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMDI0MjdCREZGRTg3RQotOjEwM0I3MDAwQUZCMDAwMTBBRkJGMDAxNDI3NDMwMTAwOTQ2MjAwMDhFQgotOjEwM0I4MDAwMDAwMjE0MDAwMDAyMTQwMzA0NDEwMDAyMDAwMDgwMjExRQotOjEwM0I5MDAwMjQxMDAwMDE5NDYyMDAwODMwNDIwMDgwMTA0MDAwMUE5NgotOjEwM0JBMDAwMDIwMDEwMjE5NDYyMDAwODMwNDIyMDAwMTA0MDAwMTZFQwotOjEwM0JCMDAwMDIwMDEwMjE4QzYzMDAxODNDMDIxQzJEMzQ0MjE5RURDOAotOjEwM0JDMDAwMjQwNjAwMDYxMDYyMDAwRjNDMDc2MDIxM0MwMjA4MDAzQQotOjEwM0JEMDAwOEM0MjAwRDQxMDQwMDAwNzhGODIwMDI4OEY4MzAwMjg3OQotOjEwM0JFMDAwOTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwQTA2MjAwNjJFNgotOjEwM0JGMDAwOEY4MjAwMjg4Rjg0MDAzNDk0NDUwMEQ0MEUwMDBCODlGNgotOjEwM0MwMDAwMzBBNUZGRkYwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTBGRAotOjEwM0MxMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwQUZCMTAwMTQ4NgotOjEwM0MyMDAwQUZCMDAwMTBBMzgwMDAyQ0FGQkYwMDE4OEY0NTAxMDA3QgotOjEwM0MzMDAwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwQUY4NTAwMzQ2MQotOjEwM0M0MDAwMDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQ1RgotOjEwM0M1MDAwM0MwMjAwMEEwMDgyMjAyMUFGNDMwMDI0Mjc1MDAxMDBDQgotOjEwM0M2MDAwOEUwMjAwMTQ4QzgzMDBEQ0FGODQwMDI4MDA0MzEwMjNGNAotOjEwM0M3MDAwMTg0MDAwMDQwMDAwODgyMThFMDIwMDE0MEUwMDBCMUM2NgotOjEwM0M4MDAwQUM4MjAwREM5MjAyMDAwQjI0MDMwMDAyMzA0MjAwRkZGMQotOjEwM0M5MDAwMTQ0MzAwMkYwMDAwMDAwMDk2MDIwMDA4MzA0MzAwRkY4QwotOjEwM0NBMDAwMjQwMjAwODIxNDYyMDAwNTI0MDIwMDg0MEUwMDA5RDY1QQotOjEwM0NCMDAwMDAwMDAwMDAwQTAwMEYyRjAwMDAwMDAwMTQ2MjAwMDkzRAotOjEwM0NDMDAwMjQwMjAwODE4RjgyMDAyODhGODQwMDM0M0MwNzYwMjEwOQotOjEwM0NEMDAwOTQ0NTAwRDQ5MjA2MDAwNTMwQTVGRkZGMEEwMDBGMUU5MAotOjEwM0NFMDAwMzBDNjAwRkYxNDYyMDAyNzAwMDAwMDAwOTIwMjAwMEFBNAotOjEwM0NGMDAwMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA0MzA2MjAwNDA3QQotOjEwM0QwMDAwOEY4NDAwMzQwQTAwMEYxQTI0MDYwMDQwMTA0MDAwMDQ3QgotOjEwM0QxMDAwMDAwMzE2MDA4Rjg0MDAzNDBBMDAwRjFBMjQwNjAwNDFBNQotOjEwM0QyMDAwMDAwMjE2MDMwNDQxMDAxNzhGODQwMDM0MjQwNjAwNDI2OQotOjEwM0QzMDAwOEY4MjAwMjgzQzA3NjAxOTk0NDUwMEQ0MzBBNUZGRkYwRQotOjEwM0Q0MDAwMEUwMDBCODkwMDAwMDAwMDBBMDAwRjJGMDAwMDAwMDA4OQotOjEwM0Q1MDAwOTIwMjAwMEIyNDAzMDAxNjMwNDIwMEZGMTA0MzAwMDZCRAotOjEwM0Q2MDAwMDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE3MzA0MjAwRkYwNQotOjEwM0Q3MDAwMTQ0MzAwMDQwMDAwMDAwMDBFMDAwRUE5MDAwMDAwMDAyMwotOjEwM0Q4MDAwMDA0MDg4MjEwRTAwMEMwMDAwMDAwMDAwOTIwMjAwMEE5MgotOjEwM0Q5MDAwMzA0MjAwMDgxMDQwMDAwNjI0MDIwQzgwOEY4NTAwMjg2NQotOjEwM0RBMDAwM0MwNDAwMDgwRTAwMTI4NjAzNDQyMDIxMjQwMjBDODBFQgotOjEwM0RCMDAwQUY0MjAwMjQ4RkJGMDAxODAyMjAxMDIxOEZCMDAwMTBFNgotOjEwM0RDMDAwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwMjdCREZGRThFNQotOjEwM0REMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDI0M0MwMzA4MDBBOAotOjEwM0RFMDAwOEM2MzAwRTA4RjQ1MDEwMDI0MDJGRjgwMDBBMzE4MjFBRQotOjEwM0RGMDAwMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0M0MwMjAwMEE0MgotOjEwM0UwMDAwMDA4MjIwMjFBRjg1MDAzNEFGNDMwMDI0OTA4MjAwNjJGRAotOjEwM0UxMDAwQUY4NDAwMjgzMDQyMDAwRjM0NDIwMDUwQTA4MjAwNjI3QwotOjEwM0UyMDAwM0MwMjAwMUYzNDQyRkY4MDBFMDAwNkJFMDIwMjgwMjRDNgotOjEwM0UzMDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMwotOjEwM0U0MDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMURENQotOjEwM0U1MDAwMjc0NTAxMDA5MEEzMDAwOTNDMDIwMDA4MDM0MjIwMjFFRAotOjEwM0U2MDAwMjQwMjAwMTg1NDYyMDAwMzNDMDIwMDA4MEEwMDBGNzA4QwotOjEwM0U3MDAwMjQwMjAwMDgwMzQyMjAyMTI0MDIwMDE2MTQ2MjAwMDVENwotOjEwM0U4MDAwMjQwMjAwMTcyNDAyMDAxMkEwODIwMDNGMEEwMDBGN0FDOQotOjEwM0U5MDAwOTRBNzAwMDg1NDYyMDAwNjk0QTcwMDA4OTM2MjAwMDVFNgotOjEwM0VBMDAwMjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1OTRBNzAwMDgyQQotOjEwM0VCMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2MEEwMDBCNjRDOQotOjEwM0VDMDAwMDAwNzNDMDAwM0UwMDAwODAwMDAwMDAwMjc0NDAxMDA1OAotOjEwM0VEMDAwOTQ4MjAwMDgzMDQ1MDBGRjM4QTMwMDgyMzhBMjAwODQ5NQotOjEwM0VFMDAwMkM2MzAwMDEyQzQyMDAwMTAwNjIxODI1MTA2MDAwMDZCRQotOjEwM0VGMDAwMjQwMjAwODM5MzgyMDAyRDEwNDAwMDBEMDAwMDAwMDA3QQotOjEwM0YwMDAwMEEwMDBDMzMwMDAwMDAwMDE0QTIwMDA1MjRBMkZGODA2OAotOjEwM0YxMDAwOEY0MzAxMDQzQzAyNjAyMDAzRTAwMDA4QUM0MzAwMTQxRQotOjEwM0YyMDAwMzA0MjAwRkYyQzQyMDAwMjEwNDAwMDAzMjQwMjAwMjIxNQotOjEwM0YzMDAwMEEwMDBFRDQwMDAwMDAwMDE0QTIwMDAzMDAwMDAwMDBEQwotOjEwM0Y0MDAwMEEwMDBGNDEwMDAwMDAwMDBBMDAwRjVGMDAwMDAwMDA5RgotOjEwM0Y1MDAwOTM2MzAwN0U5MzYyMDA3QTE0NDMwMDA5MDAwMDIwMjFERAotOjEwM0Y2MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQxOQotOjEwM0Y3MDAwMjQwNDAwMDE5MzYyMDA3RTI0NDIwMDAxQTM2MjAwN0VCQgotOjEwM0Y4MDAwMDNFMDAwMDgwMDgwMTAyMThGNDIwMUY4MDQ0MEZGRkU4QQotOjEwM0Y5MDAwMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDA0RAotOjEwM0ZBMDAwMDNFMDAwMDhBRjQyMDFGODI3QkRGRkU4QUZCRjAwMTBGMwotOjEwM0ZCMDAwOTM2MjAwM0YyNDAzMDAwQTMwNDIwMEZGMTQ0MzAwNDY4RQotOjEwM0ZDMDAwMDAwMDAwMDA4RjYzMDA1NDhGNjIwMDRDMTA2MjAwN0Q3RgotOjEwM0ZEMDAwMDM2MDMwMjE5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkY1MAotOjEwM0ZFMDAwMTQ0MzAwMkYwMDAwMDAwMDhGNDQwMTQwM0MwMjA4MDBGMQotOjEwM0ZGMDAwOEM0MjAwRTAyNDAzRkY4MDAwODIxMDIxMDA0MzEwMjQ0MwotOjEwNDAwMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOEY2NTAwNTQ1RgotOjEwNDAxMDAwM0MwMzAwMEEwMDgyMjAyMTMwODQwMDdGMDM0NDEwMjFFOQotOjEwNDAyMDAwMDA0MzEwMjFBQzQ1MDEwODk3NjIwMDNDOEY2MzAwNENBRgotOjEwNDAzMDAwMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxQUY2MzAwNUNCNQotOjEwNDA0MDAwOEY2MzAwNTQ4RjY0MDA0Qzk3NjIwMDNDMDA2NDE4MjMxNwotOjEwNDA1MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFDMwotOjEwNDA2MDAwMTA0MDAwMDYwMDAwMDAwMDhGNjIwMDU0OEY2MzAwNEM3NwotOjEwNDA3MDAwMDA0MzEwMjMwQTAwMEZGMDAwMDIxMDQzOTc2MjAwM0MzNwotOjEwNDA4MDAwMzA0MkZGRkYwMDAyMTA0MEFDQzIwMDY0MjQwMjAwMDE3NQotOjEwNDA5MDAwQTBDMDAwN0NBMEMyMDA4NDI0MDIwQzgwQUY0MjAwMjQ5NwotOjEwNDBBMDAwMEUwMDBGQTI4RjQ0MDE0MDEwNDAwMDQ3OEZCRjAwMTA0OAotOjEwNDBCMDAwOEY0MzAxNDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJCQQotOjEwNDBDMDAwQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg1QgotOjEwNDBEMDAwMEEwMDEwNDA4RkJGMDAxMDkzNjIwMDNGMjQwMzAwMTBCRAotOjEwNDBFMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwOEY0NDAxNDBGMAotOjEwNDBGMDAwMEEwMDEwMkMwMDAwMjgyMTkzNjIwMDNGMjQwMzAwMTZDMAotOjEwNDEwMDAwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMDE0QTM2MjAwM0Y2NQotOjEwNDExMDAwMEEwMDEwM0EwMDAwMDAwMDhGNjIwMDRDOEY2MzAwNTBDQwotOjEwNDEyMDAwMDA0MzEwMjMwNDQxMDAyODhGQkYwMDEwOTM2MjAwODFEOAotOjEwNDEzMDAwMjQ0MjAwMDFBMzYyMDA4MTkzNjIwMDgxMkM0MjAwMDRBQQotOjEwNDE0MDAwMTQ0MDAwMTAwMDAwMDAwMDkzNjIwMDNGMjQwMzAwMDRBQwotOjEwNDE1MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwOEY0NDAxNDA3RAotOjEwNDE2MDAwOEZCRjAwMTAyNDA1MDA5MzBBMDAwNjM4MjdCRDAwMThGMQotOjEwNDE3MDAwOEY0NDAxNDAyNDA1MDA5MzhGQkYwMDEwMEEwMDA2QTc1QQotOjEwNDE4MDAwMjdCRDAwMTg4RjQ0MDE0MDBFMDAwMzAyMDAwMDAwMDAwQwotOjEwNDE5MDAwOEY2MjAwNTQyNDQyRkZGRkFGNjIwMDU0OEY2MjAwNTBEMAotOjEwNDFBMDAwMjQ0MkZGRkZBRjYyMDA1MDBFMDAwMzBCOEY0NDAxNDAxQQotOjEwNDFCMDAwOEY0NDAxNDA4RkJGMDAxMDI0MDUwMDA0MEEwMDAzMTA0MwotOjEwNDFDMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRQotOjEwNDFEMDAwOEY0MjAxODg5MzYzMDA3RTAwMDIxNDAyMzA0NDAwRkY4NgotOjEwNDFFMDAwMzA2MzAwRkYxNDY0MDAwRDAwMDAwMDAwOTM2MjAwODA0MwotOjEwNDFGMDAwMzA0MjAwRkYxMDQ0MDAwOTAwMDAwMDAwQTM2NDAwODA2QQotOjEwNDIwMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQ3NgotOjEwNDIxMDAwMDAwMDAwMDAwQTAwMDc2RjhGNDQwMTgwQTM2NDAwODA0MwotOjEwNDIyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCMDAwMTA2OQotOjEwNDIzMDAwQUZCRjAwMTQ5MzYyMDAwNTI0MDMwMDMwMzA0MjAwMzAwOQotOjEwNDI0MDAwMTQ0MzAwODkwMDgwODAyMTNDMDIwODAwOEM0MjAwMjAzOQotOjEwNDI1MDAwMTA0MDAwODAwMjAwMjAyMTBFMDAwNTJCMDAwMDAwMDAwRAotOjEwNDI2MDAwOEY4NTAwMjBBQ0IwMDAwMDkzNjIwMDNFOTM2MzAwM0Y1NgotOjEwNDI3MDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjVBRgotOjEwNDI4MDAwQUNBMjAwMDQ5MzYyMDA4MjAwMDIxNjAwMDAwMjE2MDMzMgotOjEwNDI5MDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDg1NgotOjEwNDJBMDAwMEEwMDEwN0UwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDA5MQotOjEwNDJCMDAwMTQ0MDAwMDMwMDAwMTgyMTkzNjIwMDgxMzA0MzAwRkY4NgotOjEwNDJDMDAwOTM2MjAwODIwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDBDRgotOjEwNDJEMDAwMDA2MjE4MjVBQ0EzMDAwODhGNjIwMDQwQUNBMjAwMEM1RAotOjEwNDJFMDAwOEY2MjAwNDhBQ0EyMDAxMDhGNjIwMDRDQUNBMjAwMTQ5OAotOjEwNDJGMDAwOEY2MjAwNTA4RjYzMDA0QzAwNDMxMDIzMDQ0MTAwMDM4MQotOjEwNDMwMDAwMDAwMDAwMDAwQTAwMTA5MjhGNjIwMDRDOEY2MjAwNTA4MwotOjEwNDMxMDAwQUNBMjAwMTgzQzAyMDgwMDk0NDI0REJFM0MwM0MwMEIwNgotOjEwNDMyMDAwMDAwMDIwMjEwMDQzMTAyNTBFMDAwNTUwQUNBMjAwMUMwNwotOjEwNDMzMDAwOEY2MjAwNTQ4Rjg0MDAyMEFDODIwMDAwOEY2MjAwNTg4RQotOjEwNDM0MDAwQUM4MjAwMDQ4RjYyMDA1Q0FDODIwMDA4OEY2MjAwNjA2NwotOjEwNDM1MDAwOEY0MzAwNzQwMDQzMTAyMUFDODIwMDBDOEY2MjAwNjQxNAotOjEwNDM2MDAwQUM4MjAwMTA5NzYzMDA2ODk3NjIwMDZBMDAwMzFDMDAyQgotOjEwNDM3MDAwMzA0MkZGRkYwMDYyMTgyNUFDODMwMDE0OTM2MjAwODI3NAotOjEwNDM4MDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDAzMDAwMDAwMDBCQgotOjEwNDM5MDAwMEEwMDEwQzZBQzgwMDAxODhGNjMwMDBDMjQwMjAwMDFENAotOjEwNDNBMDAwMTA2MjAwMEUyNDAyRkZGRjkzNjIwMDNFMzA0MjAwNDA4NAotOjEwNDNCMDAwMTQ0MDAwMEEyNDAyRkZGRjhGNjMwMDBDOEY0MjAwNzQzOAotOjEwNDNDMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDIxRQotOjEwNDNEMDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMTg0RAotOjEwNDNFMDAwM0MwMjA4MDA5NDQyNERCRTNDMDNDMDBDMDAwMDIwMjE1QQotOjEwNDNGMDAwMDA0MzEwMjU4RjgzMDAyMDBFMDAwNTUwQUM2MjAwMUM4NgotOjEwNDQwMDAwOEY2MjAwMTg4RjgzMDAyMDNDMDUwODAwOTRBNTREQkVFNAotOjEwNDQxMDAwMjQwNDAwMDFBQzYyMDAwMEFDNjAwMDA0OEY2NjAwNkNGNAotOjEwNDQyMDAwM0MwMjQwMEQwMEEyMjgyNUFDNjYwMDA4OEY2MjAwREMyQgotOjEwNDQzMDAwQUM2MjAwMENBQzYwMDAxMDkzNjIwMDA1MDAwMjE2MDAzNAotOjEwNDQ0MDAwQUM2MjAwMTRBQzYwMDAxODBFMDAwNTUwQUM2NTAwMUM5NgotOjEwNDQ1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQTM2MDAwMDU2MAotOjEwNDQ2MDAwMEEwMDA0QjkyN0JEMDAxODhGQkYwMDE0OEZCMDAwMTBEOAotOjEwNDQ3MDAwMDNFMDAwMDgyN0JEMDAxODk3NDIwMDdDMzBDNjAwRkYwQgotOjEwNDQ4MDAwQTA4NjAwODQzMDQ3RkZGRjI0MDIwMDA1MTRDMjAwMEIwMQotOjEwNDQ5MDAwMjRFMzQ2NTA5MEEyMDExMjJDNDIwMDA3MTA0MDAwMDc2RQotOjEwNDRBMDAwMjRFMzBBMDA5MEEzMDExMjI0MDIwMDE0MDA2MjEwMDQwNQotOjEwNDRCMDAwMDBFMjEwMjEwQTAwMTBGRTMwNDdGRkZGMzA2N0ZGRkZDNwotOjEwNDRDMDAwMDNFMDAwMDhBNDg3MDAxNEFDODcwMDRDOENBMjAxMDgwQwotOjEwNDREMDAwMDA4MDQwMjEwMEEwNDgyMTAwRTIxMDIzMzBDNjAwRkZFOAotOjEwNDRFMDAwMTg0MDAwMDM5M0FBMDAxMzI0RTJGRkZDQUNBMjAxMDhDOQotOjEwNDRGMDAwMzBDMjAwMDExMDQwMDAwODAwMDAwMDAwOEQwMjAwNTA5MgotOjEwNDUwMDAwMDBFMjEwMjMwNDQxMDAxMzI0MDYwMDA1OEQwMjAwNTQyQwotOjEwNDUxMDAwMTBFMjAwMTAwMDAwMDAwMDhEMDIwMDU0MTRFMjAwMUFBNgotOjEwNDUyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAwRAotOjEwNDUzMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODNEOAotOjEwNDU0MDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMDEyMDI4MjEzQgotOjEwNDU1MDAwMjQwNjAwMDQwQTAwMTBFQzAwMDAwMDAwQTEwMDAwODQwMgotOjEwNDU2MDAwMTE0MDAwMDlBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjg5OQotOjEwNDU3MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQ3NQotOjEwNDU4MDAwM0MwMjEwMDBBRjQyMDFGODAzRTAwMDA4MDAwMDAwMDAwOAotOjEwNDU5MDAwMjdCREZGRTg4RkE5MDAyOEFGQkYwMDEwMDA4MDQwMjE5MQotOjEwNDVBMDAwMDBFOTE4MjMxODYwMDA3MzMwQzYwMEZGQTA4MDAwN0M2QgotOjEwNDVCMDAwQTA4MDAwODE4Q0EyMDEwODAwRTIxMDIzMDQ0MDAwNEQ3RAotOjEwNDVDMDAwMDAwMDAwMDA4QzgyMDA1MDk0ODMwMDNDOEM4NDAwNjRDNgotOjEwNDVEMDAwMDA0NzQ4MjMzMDYzRkZGRjAxMjMxODIxMDA4MzIwMkI2RAotOjEwNDVFMDAwMTA4MDAwMDQwMDAwMDAwMDhEMDIwMDY0MEEwMDExNEZEQQotOjEwNDVGMDAwMDBFMjEwMjE5NTAyMDAzQzMwNDJGRkZGMDEyMjEwMjExMQotOjEwNDYwMDAwMDBFMjEwMjFBRDAyMDA1Qzk1MDIwMDNDOEQwMzAwNUNDRAotOjEwNDYxMDAwMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxMDA0MzEwMkI0NwotOjEwNDYyMDAwMTA0MDAwMDMwMDAwMDAwMDBBMDAxMTVFOEQwMjAwNUNEMwotOjEwNDYzMDAwOTUwMjAwM0MzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjFEMgotOjEwNDY0MDAwQUQwMjAwNUNBMTAwMDA4NEFEMDcwMDRDOENBMjAxMDgwMwotOjEwNDY1MDAwMDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUNBMjAxMDg5MwotOjEwNDY2MDAwMzBDMjAwMDExMDQwMDAwQTAwMDAwMDAwOEQwMjAwNTAxRQotOjEwNDY3MDAwMDBFMjEwMjMwNDQxMDAwNDAxMDAyMDIxOEQwMjAwNTRCNwotOjEwNDY4MDAwMTRFMjAwMDMwMDAwMDAwMDBBMDAxMTgwMjQwNjAwMDU2NwotOjEwNDY5MDAwOEQwMjAwNTQxNEUyMDA0NzhGQkYwMDEwM0MwMjA4MDA1NgotOjEwNDZBMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE1MQotOjEwNDZCMDAwOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDE1NAotOjEwNDZDMDAwMDEwMDIwMjEyNDA2MDAwNDhGQkYwMDEwMEEwMDEwRUMxNgotOjEwNDZEMDAwMjdCRDAwMThBMTAwMDA4NEE1MDIwMDE0OEY0MzAxMDAyQgotOjEwNDZFMDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDExQTVENwotOjEwNDZGMDAwMDAwMDAwMDA4QzgyMDA1QzAwNDkxMDIzMDA0MzEwMkI1NgotOjEwNDcwMDAwNTQ0MDAwMDFBQzg3MDA1Qzk1MDIwMDNDMzA0MkZGRkY0MgotOjEwNDcxMDAwMDA2MjEwMkIxNDQwMDAwNzI0MDIwMDAyOTUwMjAwM0NBNgotOjEwNDcyMDAwOEQwMzAwNUMzMDQyRkZGRjAwNjIxODIxQUQwMzAwNUM4NgotOjEwNDczMDAwMjQwMjAwMDJBRDA3MDA0Q0ExMDIwMDg0MEUwMDBGQTI2QgotOjEwNDc0MDAwOEY0NDAxMDAxMDQwMDAxQjhGQkYwMDEwOEY0MzAxMDBGOQotOjEwNDc1MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzA3MwotOjEwNDc2MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4MEEwMDExQkI5MQotOjEwNDc3MDAwOEZCRjAwMTAzMEMyMDAxMDEwNDAwMDBFOEZCRjAwMTAxRAotOjEwNDc4MDAwOEM4MzAwNUM5NDgyMDAzQzAwNjkxODIzMzA0MkZGRkY1OAotOjEwNDc5MDAwMDA2MjE4MjEzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkJDRQotOjEwNDdBMDAwNTQ0MDAwMDEwMDgwMTgyMTAxMjMxMDIxQUQwMjAwNUM1QgotOjEwNDdCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThFOQotOjEwNDdDMDAwOEZBQTAwMjhBRkJGMDAxMDAwODA0MDIxMDBFQTQ4MjNENAotOjEwNDdEMDAwMTkyMDAwMjEzMEM2MDBGRjhDODMwMDVDOEM4MjAwNjRBRAotOjEwNDdFMDAwMDA2QTE4MjMwMDQzMTAyQjUwNDAwMDEwMDA2OTE4MjE2NAotOjEwNDdGMDAwOTRBMjAxMTAwMTIyMTAyMUE0QTIwMTEwOTRBMjAxMTA4MAotOjEwNDgwMDAwMzA0MkZGRkYwMDQzMTAyQjE0NDAwMDBBM0MwMjNGRkZFMAotOjEwNDgxMDAwOTRBMjAxMTAwMDQzMTAyM0E0QTIwMTEwOTQ4MjAwM0MzMgotOjEwNDgyMDAwMzA0MkZGRkYwQTAwMTFEQTAwNjIxODIxQTRBMDAxMTAzMwotOjEwNDgzMDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEzMwotOjEwNDg0MDAwMDA4MDE4MjEwMDY3MTAyMUFEMDIwMDVDQTEwMDAwN0NFRgotOjEwNDg1MDAwMEEwMDEyMjJBMTAwMDA4MTMwQzIwMDEwMTA0MDAwM0M2QQotOjEwNDg2MDAwMDAwMDAwMDA4QzgyMDA1MDAwNEExMDIzMTg0MDAwMzhERAotOjEwNDg3MDAwMDAwMDAwMDA5MDgyMDA3QzI0NDIwMDAxQTA4MjAwN0NBNQotOjEwNDg4MDAwOTA4MjAwN0MzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkZDRgotOjEwNDg5MDAwMDA0MzEwMkIxNDQwMDA1QzhGQkYwMDEwOENBMjAxMDg1NQotOjEwNDhBMDAwMDBFMjEwMjMxODQwMDA1ODAwMDAwMDAwOEM4MzAwNTRFMAotOjEwNDhCMDAwOTQ4MjAwM0MwMDZBMTgyMzMwNDJGRkZGMDAwMzE4NDMzMwotOjEwNDhDMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBDNAotOjEwNDhEMDAwOEM4MjAwNTQwMDRBMTAyMzBBMDAxMjA5MDAwMjEwNDM3RgotOjEwNDhFMDAwOTQ4MjAwM0MzMDQyRkZGRjAwMDIxMDQwQUQwMjAwNjRBMQotOjEwNDhGMDAwOTUwMjAwM0M4RDA0MDA2NDk1MDMwMDNDMzA0MkZGRkZBQwotOjEwNDkwMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE0NQotOjEwNDkxMDAwMDE0MzEwMjFBRDAyMDA1QzhEMDIwMDU0QUNBMjAxMDhERAotOjEwNDkyMDAwMjQwMjAwMDJBMTAyMDA4NDBFMDAwRkEyOEY0NDAxMDBBNQotOjEwNDkzMDAwMTA0MDAwMzU4RkJGMDAxMDhGNDMwMTAwOEY0MjAxRjhGNwotOjEwNDk0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjRCMDAwMDAwMDA5NwotOjEwNDk1MDAwQUQwNzAwNEM4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDJCMQotOjEwNDk2MDAwMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMEFBMgotOjEwNDk3MDAwMDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzMDQ0MTAwMDRGQQotOjEwNDk4MDAwMDEwMDIwMjE4RDAyMDA1NDE0RTIwMDAzMDAwMDAwMDAwOQotOjEwNDk5MDAwMEEwMDEyNDIyNDA2MDAwNThEMDIwMDU0MTRFMjAwMUE5NwotOjEwNDlBMDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAyQgotOjEwNDlCMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODM1NAotOjEwNDlDMDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMjQwNjAwMDRGMwotOjEwNDlEMDAwOEZCRjAwMTAwQTAwMTBFQzI3QkQwMDE4QTEwMDAwODQ1MgotOjEwNDlFMDAwQTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkUyRQotOjEwNDlGMDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBFNAotOjEwNEEwMDAwQUY0MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3NwotOjEwNEExMDAwOEZBQTAwMTA4QzgyMDA1MDAwODA0MDIxMzBDNjAwRkYxOQotOjEwNEEyMDAwMDA0QTEwMjMwMEEwNDgyMTE4NDAwMDA3MDBFMDE4MjE4OAotOjEwNEEzMDAwMjQwMjAwMDFBMDgwMDA4NEEwQTAwMTEyQTQ4MjAwMTQxRQotOjEwNEE0MDAwMEEwMDExQkRBRkFBMDAxMEEwODAwMDgxQUQwNzAwNEM4NAotOjEwNEE1MDAwOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBRgotOjEwNEE2MDAwQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDBBNAotOjEwNEE3MDAwOEQwMjAwNTAwMDYyMTAyMzA0NDEwMDEzMjQwNjAwMDUzQgotOjEwNEE4MDAwOEQwMjAwNTQxMDYyMDAxMDAwMDAwMDAwOEQwMjAwNTRERQotOjEwNEE5MDAwMTQ2MjAwMTEwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDhBMwotOjEwNEFBMDAwMzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzhFNwotOjEwNEFCMDAwOTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjExQQotOjEwNEFDMDAwMDEyMDI4MjEyNDA2MDAwNDBBMDAxMEVDMDAwMDAwMDA0OAotOjEwNEFEMDAwQTEwMDAwODRBNTAyMDAxNDAzRTAwMDA4MDAwMDAwMDAwQgotOjEwNEFFMDAwMjdCREZGRTBBRkJGMDAxODI3NDIwMTAwOTA0NjAwMEEzMwotOjEwNEFGMDAwOEM0ODAwMTQ4QzhCMDA0QzkwODIwMDg0MzBDOTAwRkZERAotOjEwNEIwMDAwMDE2ODE4MjMzMDRBMDBGRjFDNjAwMDFBMkQ0NjAwMDY3OQotOjEwNEIxMDAwMjQwMjAwMDEwMTQyMTAwNDEwQzAwMDE2MzA0MzAwMDNCQgotOjEwNEIyMDAwMDEyMDMwMjEwMTAwMzgyMTE0NjAwMDA3MzA0QzAwMENCNgotOjEwNEIzMDAwMTU4MDAwMDkzMDQyMDAzMDE0NDAwMDBCOEZCRjAwMTg3MAotOjEwNEI0MDAwMEEwMDEyQUMwMDAwMDAwMDBFMDAxMUJEQUZBQjAwMTA1NwotOjEwNEI1MDAwMEEwMDEyQUM4RkJGMDAxODBFMDAxMTMyQUZBQjAwMTA2QwotOjEwNEI2MDAwMEEwMDEyQUM4RkJGMDAxOEFGQUIwMDEwMEUwMDEyNTIzQgotOjEwNEI3MDAwQUZBQTAwMTQ4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA3MwotOjEwNEI4MDAwMjQwMjAwMDNBMDgyMDA4NDhDODIwMDU0MDNFMDAwMDgwOQotOjEwNEI5MDAwQUNBMjAxMDgzQzAyMDAwODAzNDIxODIxOTA2MjAwODE4NwotOjEwNEJBMDAwMjQwNjAwNDMzQzA3NjAxOTI0NDIwMDAxQTA2MjAwODFGMgotOjEwNEJCMDAwOTA2MzAwODEzQzAyMDgwMDhDNDIwMEMwMzA2MzAwRkYxQgotOjEwNEJDMDAwMTQ2MjAwMTAyNDAzRkY4MDNDMDIwODAwOEM0MjAwRTBDNQotOjEwNEJEMDAwMDA4MjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA1MAotOjEwNEJFMDAwOEM0MjAwRTAzQzAzMDAwQTAwODIxMDIxMzA0MjAwN0YyQQotOjEwNEJGMDAwMDM0MjEwMjEwMDQzMTAyMTk0NDUwMEQ0MEEwMDBCODk4MAotOjEwNEMwMDAwMzBBNUZGRkYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAyMwotOjEwNEMxMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOEY0MjAxODBEOQotOjEwNEMyMDAwMDA4MDgwMjEwMEEwODgyMTBFMDAxMkIzMDA0MDIwMjFDNgotOjEwNEMzMDAwQTIwMDAwODQ4RTAyMDA1NDhGQkYwMDE4OEZCMDAwMTBCNQotOjEwNEM0MDAwQUUyMjAxMDg4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjA0OAotOjEwNEM1MDAwMjdCREZGRTAzQzAyMDAwOEFGQjAwMDEwQUZCRjAwMTg1NgotOjEwNEM2MDAwQUZCMTAwMTQwMzQyODAyMThGNTEwMTQwOTIwMzAwODRCMAotOjEwNEM3MDAwOEUwNDAwNTA4RTAyMDA0QzE0ODIwMDQwMzA2NjAwRkYwQgotOjEwNEM4MDAwM0MwMjA4MDA4QzQyMDBFMDI0MDNGRjgwMDIyMjEwMjEzNQotOjEwNEM5MDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA5NAotOjEwNENBMDAwOTc0NDAwN0M5MjA1MDA4MTAyMjIxMDIxMzA0MjAwN0Y0RgotOjEwNENCMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMTRBMDAwMEJENAotOjEwNENDMDAwMzA4NEZGRkYyNDAyMDAwNTU0QzIwMDE0MjQ4MjA1REM1NgotOjEwNENEMDAwOTA2MjAxMTIyNDQyMDAwMUEwNjIwMTEyMjQwMjBDODBBMQotOjEwNENFMDAwQUY0MjAwMjQwQTAwMTMwQjI0MDIwMDA1QTA2MDAxMTI0OQotOjEwNENGMDAwMjQwMjAwMDUxNEMyMDAwOTI0ODIwNURDOTIwMjAwODEwRQotOjEwNEQwMDAwMkM0MjAwMDc1MDQwMDAwNTI0ODIwQTAwOTIwMzAwODFEMwotOjEwNEQxMDAwMjQwMjAwMTQwMDYyMTAwNDAwODIxMDIxMzA0NEZGRkZCRQotOjEwNEQyMDAwQTYwNDAwMTQwRTAwMTJCMzAyMjAyMDIxOTYwMjAwM0NCQgotOjEwNEQzMDAwOEUwMzAwNEMwMjIwMjAyMTMwNDJGRkZGMDAwMjEwNDA3MQotOjEwNEQ0MDAwMDA2MjE4MjEwRTAwMDMwMkFFMDMwMDVDOTIwMjAwN0Q5NwotOjEwNEQ1MDAwMDIyMDIwMjEzNDQyMDA0MDBFMDAwMzBCQTIwMjAwN0RGRAotOjEwNEQ2MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY1MTAxQzA0RgotOjEwNEQ3MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4OEZCRjAwMThFQgotOjEwNEQ4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5MQotOjEwNEQ5MDAwMDgwMDBEOTgwODAwMERFMDA4MDAwRTIwMDgwMDBFNkNCOQotOjA0NERBMDAwMDgwMDBFQTA1OQotOjBDNERBNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwRDcKLToxMDREQjAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTMzMDAwMDAwODUKLToxMDREQzAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwQTMKLToxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTEKLToxMDRFMjAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMDRFMzAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENDUKLToxMDRFNDAwMDNDMDIwODAwMjQ0MjVBQzQzQzAzMDgwMDI0NjM2MTkwRDkKLToxMDRFNTAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0REUKLToxMDRFNjAwMDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwNkEKLToxMDRFNzAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNUFDNDBFMDAwMUE2N0UKLToxMDRFODAwMDAwMDAwMDAwMDAwMDAwMEQyN0JERkZFODNDMDk2MDE4OEQKLToxMDRFOTAwMEFGQkYwMDEwOEQyQzUwMDAyNDBERkY3RjI0MDgwMDMxN0YKLToxMDRFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA3MEMwMDNDMUE4MDAwMDgKLToxMDRFQjAwMEFEMkE1MDAwM0MwNDgwMEFBRjQ4MDAwODNDMUI4MDA4MjMKLToxMDRFQzAwMEFGNDcwMDI0MEUwMDA5MzhBRjg0MDAxMDBFMDAwOEZCMjUKLToxMDRFRDAwMDAwMDAwMDAwMEUwMDA4NDgwMDAwMDAwMDBFMDAxMkRGNzUKLToxMDRFRTAwMDAwMDAwMDAwM0MwNDYwMTY4Qzg1MDAwMDNDMDZGRkZGQkIKLToxMDRFRjAwMDNDMDI1MzUzMDBBNjE4MjQxMDYyMDA0NzM0ODY3QzAwRkQKLToxMDRGMDAwMDk0QzIwMUYyQTc4MDAwMkMxMDQwMDAwM0E3ODAwMENDQkYKLToxMDRGMTAwMDM4NTgxRTFFQTc5ODAwMkM5NEMyMDFGODEwNDAwMDA0QjcKLToxMDRGMjAwMDk3ODMwMENDMzg1OTFFMUVBNzk5MDBDQzk3ODMwMENDREMKLToxMDRGMzAwMDJDN0YwMDY3NTNFMDAwMDEyNDAzMDA2Njk3ODQwMDJDNTcKLToxMDRGNDAwMDJDODIwNDAxMTQ0MDAwMDIwMDYwMjgyMTI0MDQwNDAwODMKLToxMDRGNTAwMDNDMDc2MDAwOENFOTA0MzgyNDAzMTAzQzMxMjhGRkZGMzMKLToxMDRGNjAwMDExMDMwMDFGMzBCOUZGRkY1NzIwMDAxMEEzODAwMENFQUYKLToxMDRGNzAwMDI0MDIwMDUwQTM4MjAwQ0U5MzlGMDBDRTUzRTAwMDBGODYKLToxMDRGODAwMEE3ODUwMENDQTc4MDAwQ0M5Nzg1MDBDQzhGQkYwMDEwRjAKLToxMDRGOTAwMEE3ODAwMDJDQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwMTEKLToxMDRGQTAwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODkzOUYwMENFQzkKLToxMDRGQjAwMDU3RTBGRkY1QTc4MDAwQ0NBNzg1MDBDQzk3ODUwMENDRjMKLToxMDRGQzAwMDhGQkYwMDEwQTc4NDAwMkNBNzgwMDAzNEE3ODAwMEU2QzQKLToxMDRGRDAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4NTQKLToxMDRGRTAwMEEzODAwMENFOENDQjAwM0MzMTZBMDAwMTExNDAwMDBFNDIKLToxMDRGRjAwMDAwMDAwMDAwMzBBN0ZGRkYxMEUwRkZERTI0MDIwMDUwOTkKLToxMDUwMDAwMDhDQ0MwMEM4MzE4NjAwMDExNEMwRkZEQzkzOUYwMENFMTkKLToxMDUwMTAwMDBBMDAwMDc0MjQwMjAwNTE4QzhGMDAwNDNDMEU2MDAwRDIKLToxMDUwMjAwMDBBMDAwMDU3MDFFRTMwMjE4Q0VGMDgwODI0MEQ1NzA4QzQKLToxMDUwMzAwMDAwMEY3NDAyMTFDRDAwMDQzMEI4RkZGRjI0MDUwMDY2OTQKLToxMDUwNDAwMDBBMDAwMDc1MjQwNDA0MDAxNzAwRkZDQzkzOUYwMENFRDMKLToxMDUwNTAwMDBBMDAwMDc0MjQwMjAwNTA4Rjg2MDAxMDMwODlGRkZGODAKLToxMDUwNjAwMDAwMDkzOTQwOENDMzAwMTAzQzA4MDA1MDAwRTgyMDI1OUUKLToxMDUwNzAwMEFGNDMwMDM4OENDNTAwMTQyNzQyMDQwMEFGODIwMDFDRTcKLToxMDUwODAwMEFGNDUwMDNDQUY0NDAwMzAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDA4RjRCMDAwMDMxNkEwMDIwNkIKLToxMDUwQjAwMDExNDBGRkZEMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwQjgKLToxMDUwQzAwMDhGODQwMDEwOTQ4QTAwMUE4Qzg3MDAyNDMxNDlGRkZGRDYKLToxMDUwRDAwMDAwMDk0MEMwMDBFODMwMjFBRjQ2MDAzQzhDODUwMDI0MjgKLToxMDUwRTAwMDhGNDMwMDNDMDBBMzEwMjMxODQwMDAyOTAwMDAwMDAwNUIKLToxMDUwRjAwMDhDOEIwMDIwMjU2MjAwMDEzQzBEMDA1MDM1QUMwMDA4NkYKLToxMDUxMDAwMEFGNDIwMDM4QUY0QzAwMzAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRUUwMDIwNjIKLToxMDUxMzAwMDExQzBGRkZEMDAwMDAwMDA4RjRBMDQwMDNDMDgwMDIwNjEKLToxMDUxNDAwMEFDOEEwMDEwOEY0OTA0MDRBQzg5MDAxNEFGNDgwMDMwQzkKLToxMDUxNTAwMDAwMDAwMDAwOTQ4NjAwMTg5NDg3MDAxQzAwQzcxODIxRTYKLToxMDUxNjAwMEE0ODMwMDE4OTQ4NTAwMUEyNEEyMDAwMUE0ODIwMDFBQzYKLToxMDUxNzAwMDk0OTgwMDFBOTQ5OTAwMUUxMzM4MDAwMzAwMDAwMDAwNTAKLToxMDUxODAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0ODAwMDFBMEIKLToxMDUxOTAwMDhDODIwMDIwMEEwMDAwRDYzQzBEMDA1MDBBMDAwMEM3OTcKLToxMDUxQTAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDhGODIwMDE4ODAKLToxMDUxQjAwMDI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMDBFMDAwMEZFMjAKLToxMDUxQzAwMEFGODMwMDE4M0MwMzA4MDA4QzYzMDAyMDI0MDQwMDAxMTYKLToxMDUxRDAwMDEwNjQwMDA0OEY4OTAwMTA4RkJGMDAxMDAzRTAwMDA4RTYKLToxMDUxRTAwMDI3QkQwMDE4OEZCRjAwMTAzQzA3NjAxMkE1MjAwMDBBRTEKLToxMDUxRjAwMDk1MjgwMDBBMzRFNTAwMTAyN0JEMDAxODMxMDZGRkZGOEUKLToxMDUyMDAwMDAzRTAwMDA4QUNBNjAwOTAzQzAyMDgwMDhDNDIwMDIwOUQKLToxMDUyMTAwMDI3QkRGRkM4QUZCRjAwMzRBRkJFMDAzMEFGQjcwMDJDMTIKLToxMDUyMjAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDNjgKLToxMDUyMzAwMEFGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MEFGQjAwMDEwNzIKLToxMDUyNDAwMDhGODQwMDEwOTQ4NjAwMDY5NDgzMDAwQTAwQzMyODIzRUMKLToxMDUyNTAwMDMwQjZGRkZGMTJDMDAwNEE4RkJGMDAzNDk0ODkwMDE4OTcKLToxMDUyNjAwMDk0OEEwMDBBMDEyQTQwMjMzMTAyRkZGRjAyQzIzODJCMzAKLToxMDUyNzAwMDE0RTAwMDAyMDJDMDIwMjEwMDQwMjAyMTJDOEMwMDA1RjcKLToxMDUyODAwMDE1ODAwMDAyMDA4MEEwMjEyNDE0MDAwNDBFMDAwMEFENEYKLToxMDUyOTAwMDAyODAyMDIxOEY4NzAwMTAwMjgwOTgyMUFGODAwMDE0QTcKLToxMDUyQTAwMDk0RUQwMDBBMDI4MDg4MjExMjgwMDA0RTMxQjJGRkZGODcKLToxMDUyQjAwMDNDMTc3MDAwM0MxNTQwMDAzQzFFNjAwMDhGOEYwMDFDQTYKLToxMDUyQzAwMDhERUUwMDAwMDFENzE4MjQ1MDc1MDA1MDAyMjAyMDIxRDcKLToxMDUyRDAwMDAyQTM4MDJCMTYwMDAwMzUzQzE4MjAwMDUwNzgwMDQ3QjAKLToxMDUyRTAwMDAyMjAyMDIxMjQxMDAwMDE4RjgzMDAxNDE0NjAwMDM5NTMKLToxMDUyRjAwMDAyOTE1ODIzMDIzMEY4MjMwMjUwQzgyMTMzRjFGRkZGRjYKLToxMDUzMDAwMDE2MjBGRkVFMzMzMkZGRkY4Rjg3MDAxMDNDMTEwMDIwODQKLToxMDUzMTAwMEFGNTEwMDMwMDAwMDAwMDA5NEU2MDAwQTNDMUU2MDEyMEQKLToxMDUzMjAwMDM3RDUwMDEwMDI2NjI4MjFBNEU1MDAwQTk0RTIwMDBBOUQKLToxMDUzMzAwMDk0RjIwMDBBOTRGNDAwMTgzMDU3RkZGRjEyOTIwMDNCRDkKLToxMDUzNDAwMEFFQjcwMDkwOENFRDAwMTQ4Q0U0MDAxMDAwMTM3MTQwOTcKLToxMDUzNTAwMDAxQUU0MDIxMDAwRTVGQzMwMTBFNTAyQjAwOEI0ODIxOEYKLToxMDUzNjAwMDAxMkExODIxQUNFODAwMTRBQ0UzMDAxMDAyRDMzODIzNjIKLToxMDUzNzAwMDMwRjZGRkZGMTZDMEZGQjk4Rjg0MDAxMDhGQkYwMDM0RDYKLToxMDUzODAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0NTkKLToxMDUzOTAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUYKLToxMDUzQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODEwN0UwMDFCRkUKLToxMDUzQjAwMDAwMDAwMDAwMTQ3N0ZGQ0MyNDEwMDAwMTBFMDAxNjJBMTQKLToxMDUzQzAwMDAwMDAwMDAwOEY4MzAwMTQxMDYwRkZDQjAyMzBGODIzMzAKLToxMDUzRDAwMDAyOTE1ODIzOEY4NzAwMTAwMTcwMjAyMTBBMDAwMTkxNEIKLToxMDUzRTAwMDMwOTNGRkZGOEY4MzAwMTQxNDYwRkZDQjNDMTEwMDIwMkIKLToxMDUzRjAwMEFGNTEwMDMwMEEwMDAxNUQwMDAwMDAwMDBFMDAwN0ExNUYKLToxMDU0MDAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMzRCNzgKLToxMDU0MTAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAxNEYyQjAKLToxMDU0MjAwMDAyMjAyMDIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMEM3MDcKLToxMDU0MzAwMDAwMDAwMDAwMEEwMDAxNzMwMkQzMzgyMzI3QkRGRkU4RjMKLToxMDU0NDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMDAzOTAwMDAwMDAwMjQKLToxMDU0NTAwMDNDMDI4MDAwMzQ1MDAwNzAwQTAwMDFCNDhFMDYwMDAwNDcKLToxMDU0NjAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMTEwNDAwMDI0Q0UKLToxMDU0NzAwMDhGODYwMEE4OEUwNzAwMDAzQzBDMDgwMDhEOEMwMDNDMzUKLToxMDU0ODAwMDNDMDkwODAwOEQyOTAwMzgwMEU2NjgyMzAxOEQyODIxOTkKLToxMDU0OTAwMDAwMDA1MDIxMDBBRDMwMkIwMTJBNDAyMTAxMDYyMDIxQkYKLToxMDU0QTAwMDNDMDEwODAwQUMyNTAwM0NBRjg3MDBBODNDMDEwODAwODcKLToxMDU0QjAwMEFDMjQwMDM4MEUwMDAxMDAwMDAwMDAwMDNDMDMwODAwOEUKLToxMDU0QzAwMDhDNjMwMDcwMTA2MEZGRTYwMDYwMjAyMTNDMDUwODAwM0UKLToxMDU0RDAwMDhDQTUwMDY4M0MwNjA4MDA4Q0M2MDA2QzBFMDAxNUI5NEYKLToxMDU0RTAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwMDA3MDhGNEYwMDAwNUQKLToxMDU0RjAwMDM5RUUwMDAxMzFDMjAwMDExNDQwRkZERThGODYwMEE4QTIKLToxMDU1MDAwMDhFMEEwMDAwOEY4QjAwQTgzQzA1MDgwMDhDQTUwMDNDOEIKLToxMDU1MTAwMDNDMDQwODAwOEM4NDAwMzgwMTRCNDgyMzAwQTkzODIxNDIKLToxMDU1MjAwMDAwODIxODIxMDBFOTQwMkIwMDY4MTAyMTNDMDEwODAwOEUKLToxMDU1MzAwMEFDMjcwMDNDM0MwMTA4MDBBQzIyMDAzODhGNUYwMTAwMjIKLToxMDU1NDAwMDI0MTlGRjAwMjQxODBDMDAwM0Y5MjAyNDEwOTgwMDEyREQKLToxMDU1NTAwMEFGODQwMDAwQUY0NDAwMjA5MzZEMDAwMDI0MEMwMDIwQjUKLToxMDU1NjAwMDMxQTYwMEZGMTBDQzAwMTIyNDBFMDA1MDEwQ0UwMDA0MTMKLToxMDU1NzAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwOUQKLToxMDU1ODAwMDBFMDAxMjU1MDAwMDAwMDAzQzE5NDAwMEFGNTkwMTM4RDAKLToxMDU1OTAwMDBBMDAwMUFEMDAwMDAwMDAwRTAwMDExOTAwMDAwMDAwMkIKLToxMDU1QTAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwNkQKLToxMDU1QjAwMDhGNTgwMTAwMDA4MDI4MjEzMzBGMDBGRjAxRTAyMDIxRDcKLToxMDU1QzAwMDBFMDAwMkY4QUY4RjAwMDQzQzE5NDAwMEFGNTkwMTM4QkIKLToxMDU1RDAwMDBBMDAwMUFEMDAwMDAwMDAwMEE0MTAyQjI0MDMwMDAxMEMKLToxMDU1RTAwMDEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MDAwQTQxMDJCQzUKLToxMDU1RjAwMDA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwQUQKLToxMDU2MDAwMDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQjU0RTAwMDA0NzkKLToxMDU2MTAwMDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzAwMDMxODQyRjAKLToxMDU2MjAwMDE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjAzRTAwMDA4NkQKLToxMDU2MzAwMDAwQzMxMDIxMzA4NEZGRkYzMEE1RkZGRjhGNDIwMUI4NjcKLToxMDU2NDAwMDA0NDBGRkZFM0MwNzQwODAwMDg3MzAyNTNDMDMxMDAwRUIKLToxMDU2NTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ2MDE4ODAzRTAwMDA4RjgKLToxMDU2NjAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFMTIKLToxMDU2NzAwMDNDMDc0MDM4OENBNjAwMDAwMDg3MjgyNTNDMDMxMDAwMUEKLToxMDU2ODAwMEFGNDYwMTgwQUY0NTAxODgwM0UwMDAwOEFGNDMwMUI4OTEKLToxMDU2OTAwMDhGODMwMDM4OEY4NjAwMzAxMDY2MDAwQjAwODA0MDIxMTkKLToxMDU2QTAwMDNDMDcwODAwMjRFNzVDMzgwMDAzMjhDMDAwQTcxMDIxNEQKLToxMDU2QjAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNTMKLToxMDU2QzAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMjAKLToxMDU2RDAwMDNDMDcwODAwMjRFNzVDM0MwMEE3MzAyMTAzRTAwMDA4RjkKLToxMDU2RTAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1M0YKLToxMDU2RjAwMEFGNDQwMDIwOEY0NTAwMjAwNEEwRkZGRTAwMDAwMDAwMDIKLToxMDU3MDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDM0NjIwMDAxNTgKLToxMDU3MTAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDEKLToxMDU3MjAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4NTEKLToxMDU3MzAwMDEyMjAwMDE1MDBBMDgwMjE4Q0E1MDAwMDEwQTAwMDEzRUQKLToxMDU3NDAwMDI0MDQwMDAyMEUwMDBDN0YyNDA2MDE0MEFFMDAwMDAwN0QKLToxMDU3NTAwMDhGNDIwMUI4MDQ0MDAwMEQwMDAwMjgyMTNDMDY0MDAwQTMKLToxMDU3NjAwMDAyMjYyMDI1OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzMKLToxMDU3NzAwMDNDMDMxMDAwMjdCRDAwMjBBRjQ1MDE4MEFGNDQwMTg4RTUKLToxMDU3ODAwMDAzRTAwMDA4QUY0MzAxQjg4Q0E1MDAwMDhGNDIwMUI4QzgKLToxMDU3OTAwMDA0NDBGRkZFM0MwNjQwMDAwMjI2MjAyNThGQkYwMDE4NzMKLToxMDU3QTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwMDMKLToxMDU3QjAwMEFGNDUwMTgwQUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NjIKLToxMDU3QzAwMDMwODZGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDk0MDA2Q0YKLToxMDU3RDAwMDhDQTgwMDAwMDBDOTM4MjVBRjQ4MDE4MDhDQTQwMDA0QzMKLToxMDU3RTAwMDNDMDMxMDAwQUY0NDAxODRBRjQ3MDE4ODAzRTAwMDA4ODgKLToxMDU3RjAwMEFGNDMwMUI4MjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4NDYKLToxMDU4MDAwMEFGQjEwMDE0OTM2MzAwM0UwMDgwODAyMTAwODAyODIxMDYKLToxMDU4MTAwMDMwNjIwMDQwMDAwMDIwMjExMDQwMDAwRjhFMTEwMDAwNzcKLToxMDU4MjAwMDBFMDAwODc0MDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwMTkKLToxMDU4MzAwMDMwRTUwMEZGNTBBNDAwMTI4RTBGMDAwMDAyMjAyMDIxNEUKLToxMDU4NDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEE3NjIwMTNDMDkKLToxMDU4NTAwMDBBMDAwOTM0MjdCRDAwMjAwRTAwMDI4NzAwMDAwMDAwNjYKLToxMDU4NjAwMDBFMDAwODc0MDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwRDkKLToxMDU4NzAwMDMwRTUwMEZGMTRBNEZGRjIwMjIwMjAyMThFMEYwMDAwNkIKLToxMDU4ODAwMDNDMTAwODAwOEUxMDAwNTAzQzBEMDAwQzI0MEJGRjgwRDMKLToxMDU4OTAwMDAxRjA1MDIxMzE0RTAwN0YwMURBNjAyMTAxOEQ0MDIxNUQKLToxMDU4QTAwMDAxNEI0ODI0QUY0OTAwMjgwMjIwMjAyMThGQkYwMDE4NTcKLToxMDU4QjAwMDhGQjEwMDE0OEZCMDAwMTBBNTAyMDBENjI3QkQwMDIwQzQKLToxMDU4QzAwMDBBMDAwOTM0QUY4ODAwRDAyN0JERkZFMEFGQkYwMDE4NDEKLToxMDU4RDAwMEFGQjEwMDE0QUZCMDAwMTA5MzY2MDAwMTAwODA4MDIxQ0EKLToxMDU4RTAwMDBFMDAwMjUwMzBEMTAwMDQ5MzY0MDAwNTAwMTAyOUMyNUMKLToxMDU4RjAwMEE3NjUwMDAwMzQ4MzAwNDBBMzYzMDAwNTBFMDAwMjU5MzEKLToxMDU5MDAwMDAyMDAyMDIxMEUwMDA5MzYwMjAwMjAyMTI0MDIwMDAxOUQKLToxMDU5MTAwMEFGNjIwMDBDMDIwMDI4MjFBNzYyMDAxMDI0MDQwMDAyREMKLToxMDU5MjAwMEE3NjIwMDEyMjQwNjAxNDBBNzYyMDAxNDBFMDAwQzdGM0IKLToxMDU5MzAwMEE3NjIwMDE2MTYyMDAwMEY4RkJGMDAxODk3OEMwMDM0NDYKLToxMDU5NDAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGQjUKLToxMDU5NTAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDM0RDAKLToxMDU5NjAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwNjEKLToxMDU5NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MzMKLToxMDU5ODAwMDI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4NTYKLToxMDU5OTAwMEFGQjAwMDEwMDBBMDg4MjExMDgwMDAwQTNDMDM2MDAwMTYKLToxMDU5QTAwMDI0MDIwMDgwMTA4MjAwMTIwMDAwMDAwMDAwMDAwMDBEQTAKLToxMDU5QjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RjMKLToxMDU5QzAwMDI3QkQwMDIwOEM2ODJCRjgwNTAwRkZGRTAwMDAwMDAwQkEKLToxMDU5RDAwMEFDNzEyQkMwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQjYKLToxMDU5RTAwMDNDMDkxMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjkyQkY4M0IKLToxMDU5RjAwMDBFMDAwMjUwMDBBMDIwMjE5MzY1MDAwNTAyMjAyMDIxMDYKLToxMDVBMDAwMDBFMDAwMjU5MzBCMDAwRkYyNDAzMDAzRTE2MDNGRkU3RUEKLToxMDVBMTAwMDAwMDAwMDAwOEY0NDAxNzgwNDgwRkZGRTI0MDcwMDA3ODcKLToxMDVBMjAwMDNDMDYxMDAwQUY1MTAxNDAwMjIwMjAyMUEzNDcwMTQ0NTEKLToxMDVBMzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEFGNDYwMTc4RUYKLToxMDVBNDAwMDBBMDAwMkM5MjdCRDAwMjAyN0JERkZFOEFGQkYwMDE0MzAKLToxMDVBNTAwMEFGQjAwMDEwOEY1MDAwMjAwMDAwMDAwMDBFMDAwOTM2OEIKLToxMDVBNjAwMEFGNDQwMDIwQUY1MDAwMjA4RkJGMDAxNDhGQjAwMDEwNTMKLToxMDVBNzAwMDAzRTAwMDA4MjdCRDAwMTgzMDg0RkZGRjhGNDIwMUI4MDMKLToxMDVBODAwMDA0NDBGRkZFM0MwNzQwMzUwMDg3MzAyNTNDMDMxMDAwRjIKLToxMDVBOTAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4QjQKLToxMDVBQTAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFQ0UKLToxMDVBQjAwMDNDMDc0MDM2MDA4NzMwMjUzQzAzMTAwMEFGNDUwMTgwOEQKLToxMDVBQzAwMEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4NEUKLToxMDVBRDAwMDI3QkRGRkQwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0NEMKLToxMDVBRTAwMEFGQjIwMDE4QUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QjAKLToxMDVBRjAwMEFGQjAwMDEwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxMEEKLToxMDVCMDAwMDhGOTAwMDFDOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwQTEKLToxMDVCMTAwMDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0NkMKLToxMDVCMjAwMDE0ODIwMDFEMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBMTYKLToxMDVCMzAwMDUxMDAwMDEwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwQTUKLToxMDVCNDAwMDI1OEM1OEQwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4OUYKLToxMDVCNTAwMDAwMDAwMDAwMDJCMjE4MjEzMDY1RkZGRjBFMDAwMjI0OTEKLToxMDVCNjAwMDI0MDQwMDg0MTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4QkYKLToxMDVCNzAwMDhGOTEwMDE0MjYwQzAwMjAyNjRCMDAwMTAxODA4MDIxMEIKLToxMDVCODAwMDMxNzJGRkZGMTYyMDAwMDRBRjhDMDAxQzAyNTMyODJCM0IKLToxMDVCOTAwMDE0QTBGRkRDMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEQKLToxMDVCQTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4NzMKLToxMDVCQjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwNDMKLToxMDVCQzAwMDI0MEQwMDM0MTRBRDAwRjYwMDAwMDAwMDkyMEIwMDBFMEUKLToxMDVCRDAwMDI0MEExNjgwM0MwNzAwMENBMzZCMDAyMTkyMDMwMDBERTEKLToxMDVCRTAwMDAzNDdGODIxM0MwNjYwMDBBMzYzMDAyMDk2MTEwMDEyRDEKLToxMDVCRjAwMDNDMDU3RkZGMzRBQ0ZGRkZBNzcxMDAzQzk2MDIwMDEwMEMKLToxMDVDMDAwMDI0MEIwMDA1MzA1NEZGRkZBRjc0MDA4NDhFMTkwMDFDNzQKLToxMDVDMTAwMEFGNEEwMDI4OEZGODAwMDA4Q0NGNDQ0ODAzMTk3MDI2NDMKLToxMDVDMjAwMDAxRUUzMDIxQUY2NjAwNEM4RjY5MDA0QzI0Q0QwMDAxOUQKLToxMDVDMzAwMDNDMTk3RjAwQUY2OTAwNTA4RjY0MDA1MEFGNjQwMDU0N0UKLToxMDVDNDAwMEFGNjYwMDcwQUY2RDAwNTg4RjY4MDA1ODI0MDQwMDUwOTQKLToxMDVDNTAwMEFGNjgwMDVDQTM2MDAwMjNBRjZDMDA2NEEzNkIwMDM3RTcKLToxMDVDNjAwMDhFMDMwMDE0QUY2MzAwNDg4RjcxMDA0OEFGNzEwMDI0QTkKLToxMDVDNzAwMDhFMDIwMDE4QUY2MjAwNkM5MjE0MDAwQ0EzNzQwMDM2MDAKLToxMDVDODAwMDkzNkEwMDNFMzU1RjAwMjBBMzdGMDAzRThGNzgwMDc0NEEKLToxMDVDOTAwMDAzMTk3ODI0MzVFRTQwMDBBRjZFMDA3NDkzNjkwMDAwNUMKLToxMDVDQTAwMDMxMzAwMEZGMTIwNDAyMkIyNDE4RkY4MDNDMDQwODAwNEUKLToxMDVDQjAwMDI0ODQ1Q0I4MEUwMDAyOTQwMDAwMDAwMDI0MDYwMDA0NTYKLToxMDVDQzAwMDI0MDcwMDAxM0MwNDA4MDA4Qzg0NUNCOEEzNjYwMDdEQjYKLToxMDVDRDAwMEEzNjcwMDA1OEY0QTAxNzgwNTQwRkZGRTI0MDIwMDAyRjkKLToxMDVDRTAwMEFGNDQwMTQwQTM0MjAxNDQ4RjkwMDAxQzNDMTQxMDAwQkIKLToxMDVDRjAwMEFGNTQwMTc4MEEwMDAzNzNBRjgwMDAyODJDQUQwMDM3NDEKLToxMDVEMDAwMDUxQTBGRjlDOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwNTIKLToxMDVEMTAwMDI3MTg1OEY4MDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4N0QKLToxMDVEMjAwMDAwMDAwMDAwMjQwNjAwMDYxNEE2MDAxMTAwMDAwMDAwNzgKLToxMDVEMzAwMDNDMUYwODAwOEZGRjVDQjgyNDA0MDAwNUFGNUYwMDIwMDMKLToxMDVENDAwMDhFMTkwMDE4QUY3OTAwMTg4Rjc4MDA0Q0FGNzgwMDFDQkUKLToxMDVENTAwMDhGNkYwMDUwMTIyMDAwQzJBRjZGMDA3MDBBMDAwMzczRjMKLToxMDVENjAwMEFGODQwMDI4MjQwQTAwMDcxMEFBMDA4NDI0MDMwMDA2MzgKLToxMDVENzAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTI0MDQwMDgxRTYKLToxMDVEODAwMDhGOTAwMDFDMDAxMTEwMkIwQTAwMDM3M0FGODIwMDI4QjMKLToxMDVEOTAwMDI0MDIwMDA0MTRBMkZGRjYyNDBBMDA1MDNDMDkwODAwNjMKLToxMDVEQTAwMDhEMjk1Q0I4QUY0OTAwMjA4RTA0MDAwOEFGNjQwMDQwMjQKLToxMDVEQjAwMDhFMDYwMDA4QUY2NjAwNDQ4RTA3MDAwQ0FGNjcwMDQ4RUYKLToxMDVEQzAwMDhFMEQwMDEwQUY2RDAwNEM4RTA4MDAxMEFGNjgwMDg0N0YKLToxMDVERDAwMDhFMDUwMDE0QUY2NTAwNTA4RTBDMDAxOEFGNkMwMDU0OTcKLToxMDVERTAwMDhFMEIwMDFDQUY2QjAwNTg5Mzc0MDAwMDMyODMwMEZGRDEKLToxMDVERjAwMDEwNkEwMUVEMDAwMDAwMDA4RjY3MDA0ODhGNjYwMDQwQzgKLToxMDVFMDAwMDAwRTY2ODIzMDVBMDAwMDQyNDA0MDA4QzE2MjBGRkRFQjEKLToxMDVFMTAwMDI0MDIwMDAzMjQwNDAwODIzQzA1MDgwMDI0QTU1Q0I4ODkKLToxMDVFMjAwMDBFMDAwMjg3MDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxNkYKLToxMDVFMzAwMDBBMDAwMzczQUY4MjAwMjgyNDA0MDAwNTE0QTRGRkNDRDkKLToxMDVFNDAwMDI0MDUyMDAwM0MxRjA4MDA4RkZGNUNCOEFGNUYwMDIwRDYKLToxMDVFNTAwMDhFMTkwMDA0QUY3OTAwNUM5MjE4MDAwODI0MTAwMDA4MjUKLToxMDVFNjAwMEEzNzgwMDIxOEY4RjAwMUM5MUVFMDAwOUEzNkUwMDIwMDMKLToxMDVFNzAwMDhGODYwMDFDOTBDOTAwMEEzMTI0MDBGRjEwOTAwMDEwOEEKLToxMDVFODAwMDI4OEEwMDA5MTU0MDAwNkMyNDAyMDAwMjI0MEMwMDIwMUUKLToxMDVFOTAwMDEwOEMwMDBCMzQwNTgwMDAyODg1MDAyMTE0QTAwMDA4MTgKLToxMDVFQTAwMDI0MDU0MDAwMjQwODAwNDAxMDg4MDAwNTNDMDUwMDAxM0UKLToxMDVFQjAwMDI0MEQwMDgwMTA4RDAwMDIzQzA1MDAwMjI0MDU0MDAwRTYKLToxMDVFQzAwMDhGNkUwMDc0M0MwRkZGMDAwMUNGNDgyNDAxMjU4MDI1MTAKLToxMDVFRDAwMEFGNzAwMDc0OTBDNDAwMEJBMzY0MDA4MThGODQwMDFDMTkKLToxMDVFRTAwMDk0ODcwMDBDMTBFMDAxOTMwMDAwMDAwMDk0OEUwMDBDRDkKLToxMDVFRjAwMDI0MUZGRkJGMjQwNjAwMDRBNzZFMDAzQzkwODkwMDBFRkIKLToxMDVGMDAwMEEzNjkwMDNFOEY5MDAwMUM5MjA0MDAwRkEzNjQwMDNGMjEKLToxMDVGMTAwMDhGOTQwMDFDOEU4RDAwMTA4RjQ3MDA3NDAxQTc0MDIzQzIKLToxMDVGMjAwMEFGNjgwMDYwOEU4NTAwMTRBRjY1MDA2NDk2OEMwMDE4MjEKLToxMDVGMzAwMEE3NkMwMDY4OTY4QjAwMUFBNzZCMDA2QThFODMwMDFDMDIKLToxMDVGNDAwMEFGNjMwMDZDOTY4MjAwMDJBNzYyMDEzRTkyOEEwMDBFNDcKLToxMDVGNTAwMEEzNkEwMDNFOTM3OTAwM0UwMzNGQzAyNDEyMjAwMTY2RUQKLToxMDVGNjAwMEEzNzgwMDNFOEY5MDAwMUMwQTAwMDM3M0FGODYwMDI4QzAKLToxMDVGNzAwMDI0MTQwMDIyMTRCNEZGN0UyNDAzMDAwNzNDMDIwODAwMEUKLToxMDVGODAwMDhDNDI1Q0I4MTIyMDAwMENBRjQyMDAyMDBBMDAwMzczNjAKLToxMDVGOTAwMEFGODMwMDI4MjQwQzAwMzMxMEFDMDAxNDI0MDUwMDI4MjMKLToxMDVGQTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDI0MDQwMDgxRTIKLToxMDVGQjAwMDBBMDAwM0Y4OEY5MDAwMUMzQzA0MDgwMDI0ODQ1Q0I4OUQKLToxMDVGQzAwMDBFMDAwMjk0MDAwMDAwMDA5MzZCMDAwMDI0MTEwMDUwQUEKLToxMDVGRDAwMDMxNjMwMEZGMTA3MTAxNTAwMDAwMDAwMDhGOTAwMDFDMjEKLToxMDVGRTAwMDAwMDAxODIxMEEwMDAzNzNBRjgzMDAyODNDMDgwODAwNTIKLToxMDVGRjAwMDhEMDg1Q0I4MjQwNDAwODFBRjQ4MDAyMEEzNjUwMDM0RkMKLToxMDYwMDAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDAwMDAwMDAwMkEKLToxMDYwMTAwMDhGOTAwMDFDMjQwMjAwMDkwQTAwMDM3M0FGODIwMDI4M0QKLToxMDYwMjAwMDAyQjI4ODIxMzIyNUZGRkYwRTAwMDIyNDI0MDQwMDg0REUKLToxMDYwMzAwMDBBMDAwMzczOEY5MDAwMUMxMDgyRkZBMTI0MDUwNDAwNDYKLToxMDYwNDAwMDI4ODMwMDAzMTA2MDAxNkUyNDBCMDAwNDI0MTQwMDAxNTcKLToxMDYwNTAwMDU0OTRGRjlCMjQwNTQwMDAwQTAwMDQ0NzI0MDUwMTAwRDYKLToxMDYwNjAwMDNDMDQwODAwMjQ4NDVDQjg4RjYyMDA0QzBFMDAwMjk0NEIKLToxMDYwNzAwMDhGNjMwMDUwOEY5MDAwMUMwMDAwMjAyMTBBMDAwMzczRTIKLToxMDYwODAwMEFGODQwMDI4OEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwNDIKLToxMDYwOTAwMDkzNkUwMDA1MzFDOTAwMDIxNTIwMDE1RDAyMDAyODIxMjAKLToxMDYwQTAwMDkzNzgwMDIzMDIwMDI4MjEzMzBGMDAyMDE1RTAwMTU4QzcKLToxMDYwQjAwMDI0MDQwMDhEOTM2MjAwM0YyNDE5MDAxMjMwNUYwMEZGMUEKLToxMDYwQzAwMDEzRjkwMTUzMjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMjQKLToxMDYwRDAwMDkzNzQwMDIzMjQwQTAwMDQwMjAwMjAyMTM2ODMwMDQyMjYKLToxMDYwRTAwMEEzNjMwMDIzMEUwMDAyNTlBMzZBMDA3RDhGNEIwMTc4NDEKLToxMDYwRjAwMDA1NjBGRkZFMjQwNTAwMDJBRjUwMDE0MEEzNDUwMTQ0QTYKLToxMDYxMDAwMDhGOTAwMDFDM0MwQzEwMDBBRjRDMDE3ODBBMDAwM0Y5ODIKLToxMDYxMTAwMDAwMTExMDJCOEUxMDAwMDRBRjUwMDAyMDkzNkQwMDA1NkQKLToxMDYxMjAwMDMxQTgwMDAyNTUwMDAxNzgyNDA0MDA4QTkzNjQwMDNGREUKLToxMDYxMzAwMDI0MDcwMDA0MDIwMDI4MjEzMDg2MDBGRjEwQzcwMDEwNDkKLToxMDYxNDAwMDI0MDQwMDgxMEUwMDAyNTAwMjAwMjAyMTkzN0YwMDIzQ0UKLToxMDYxNTAwMDI0MTgwMDEyMjQwRkZGRkUzN0Y5MDAyMEEzNzkwMDIzMzIKLToxMDYxNjAwMEEzNzgwMDNGOTM2RTAwMDUwMjAwMjAyMTAxQ0Y0ODI0NTAKLToxMDYxNzAwMDBFMDAwMjU5QTM2OTAwMDUwMjAwMjgyMTAwMDAyMDIxMTkKLToxMDYxODAwMDBFMDAwMzQwMDAwMDAwMDAwQTAwMDNGODhGOTAwMDFDN0UKLToxMDYxOTAwMDhFMDUwMDA0M0MwRjAwMDgwMzRGNDAyMUFGNDUwMDIwNEUKLToxMDYxQTAwMDkxMEUwMDAwMjQwNjAwNTAzMUM5MDBGRjExMjYwMTdBMkIKLToxMDYxQjAwMDI0MDQwMDg4OEY1OTAxQjgwNzIwRkZGRTNDMEM0MDBFRDQKLToxMDYxQzAwMDAwOEM1ODI1M0MwMzEwMDBBRjQ1MDE4MEFGNDAwMTg0OEUKLToxMDYxRDAwMEFGNEIwMTg4QUY0MzAxQjg5MTAyMDAwMDI0MEFGRjgwNTEKLToxMDYxRTAwMDI0MDQwMDA0MDA0QUY4MjVBMTFGMDAwMDBFMDAwQzdGQzMKLToxMDYxRjAwMDI0MDYwMDMwMEEwMDAzRjg4RjkwMDAxQzhFMEYwMDA0NjQKLToxMDYyMDAwMDNDMTQwODAwMjY5NDVDQjgzQzAxMDgwMEFDMkY1Q0I4MzQKLToxMDYyMTAwMEFGNEYwMDIwOTIwRTAwMDMzMUM5MDAwNDExMjAwMDAyOEMKLToxMDYyMjAwMDI0MDIwMDEyMjQwMjAwMDZBMzYyMDAzRjkyMDMwMDFCMTYKLToxMDYyMzAwMDI0MEFGRkMwMzA2MjAwM0YwMDRBRjgyNUEzN0YwMDNFRDkKLToxMDYyNDAwMDkyMTkwMDAzMzMzODAwMDExNzAwMDEyMjAwMDAwMDAwRkEKLToxMDYyNTAwMDhFMDIwMDA4QUU4MjAwMDgzQzAyMDgwMDhDNDI1Q0MwM0UKLToxMDYyNjAwMDEwNDAwMTJEMDAwMDAwMDAwMDAyMjFDMkE3NjQwMDA4QjgKLToxMDYyNzAwMDhFMEQwMDBDMjQwQjAwMDEyNDE0MDAxNEFGNkQwMDJDQjMKLToxMDYyODAwMDhFMDgwMDEwQUY2ODAwMzA5NjA1MDAxNkE3NjUwMDM4MkMKLToxMDYyOTAwMDk2MEMwMDE0QTc2QzAwM0FBRjZCMDAwQ0E3NkIwMDEwQjMKLToxMDYyQTAwMEE3NkIwMDEyQTc2QjAwMTRBNzZCMDAxNjEyMjAwMTRBRkYKLToxMDYyQjAwMEEzNzQwMDM0OTIwNjAwMDMzMEM3MDAwMjJDRjAwMDAxRTIKLToxMDYyQzAwMDI2MDIwMDA4OEY5MDAwMUMwQTAwMDM3M0FGODIwMDI4OEEKLToxMDYyRDAwMDhFMTQwMDA0MjQwMzAwODFBRjU0MDAyMDkzNjgwMDIzMkYKLToxMDYyRTAwMDMxMDUwMDEwMTBBMDAxMTMwMDAwMDAwMDhGNDQwMUI4MTgKLToxMDYyRjAwMDA0ODBGRkZFM0MwNjQwMUYwMDExMzgyQjAwNjYxMDI1NkQKLToxMDYzMDAwMDNDMTExMDAwQUY1NDAxODBBRjg3MDAyOEFGNDAwMTg0REEKLToxMDYzMTAwMEFGNDIwMTg4QUY1MTAxQjgwQTAwMDM3NDhGOTEwMDE0OTUKLToxMDYzMjAwMDhFMDYwMDA0M0MxOTAwMDgwMzU5MjAyMUFGNDYwMDIwQzYKLToxMDYzMzAwMDhFMDcwMDA4OTA5ODAwMDAyNDBGMDA1MDMzMTQwMEZGQ0YKLToxMDYzNDAwMDEyOEYwMTA2MjQwNTAwODg4RjQ0MDFCODA0ODBGRkZFRTcKLToxMDYzNTAwMDNDMEQ0MDA5MDAxMTYwMkIwMEFEMTAyNTNDMTExMDAwRDAKLToxMDYzNjAwMEFGNDYwMTgwQUY4QzAwMjhBRjQ3MDE4NEFGNDIwMTg4NUYKLToxMDYzNzAwMEFGNTEwMUI4MEEwMDAzNzQ4RjkxMDAxNDhFMDQwMDFDMDEKLToxMDYzODAwMDBFMDAwMjNCMDAwMDAwMDAxMDQwMDBENzAwNDA0ODIxRjIKLToxMDYzOTAwMDhGOTAwMDFDMjQwNTAwODk4RjREMDFCODA1QTBGRkZFRDkKLToxMDYzQTAwMDAwMDAwMDAwQUY0OTAxODA4RTBGMDAxQzNDMTQ0MDAxMkEKLToxMDYzQjAwMDAwMTE3MDJCMDBCNDQ4MjUzQzExMTAwMEFGNEYwMTg0MzAKLToxMDYzQzAwMEFGOEUwMDI4QUY0OTAxODhBRjUxMDFCODBBMDAwMzc0QUQKLToxMDYzRDAwMDhGOTEwMDE0OTYxOTAwMDIzQzE0MDgwMDI2OTQ1Q0I4QjIKLToxMDYzRTAwMDMzMzgwMDA0MTMwMDAwOEUzQzAyNjAwMDhFMUYwMDFDMzYKLToxMDYzRjAwMDNDMDEwODAwQUMzRjVDQjhBRjVGMDAyMDkyMEMwMDEwN0QKLToxMDY0MDAwMDI0MEIwMDE0MzE4NDAwRkYxNDhCMDBBQzAwMDAwMDAwNEEKLToxMDY0MTAwMDk2MDkwMDAyMzEyRDAwMDExNUEwMDE1MjAwMDAwMDAwNzQKLToxMDY0MjAwMDhFMDIwMDA0QUU4MjAwMDgzQzBFMDgwMDhEQ0U1Q0MwRDcKLToxMDY0MzAwMDExQzAwMTQ4MDAwMDAwMDA4RjY5MDA3NDNDMEU4MDAwMEMKLToxMDY0NDAwMDI0MDQwMDAxMDEyRTY4MjVBRjZEMDA3NEEzNjAwMDA1Q0YKLToxMDY0NTAwMEFGNjQwMDBDM0MwQzA4MDA4RDhDNUNDMDhGODgwMDFDNjUKLToxMDY0NjAwMEE3NjQwMDEwMDAwQzU5QzJBNzY0MDAxMkE3NjQwMDE0QUUKLToxMDY0NzAwMEE3NjQwMDE2QTc2QjAwMDg4RDAzMDAwODI0MDQwMDAyMUYKLToxMDY0ODAwMEFGNjMwMDJDOEQwQTAwMENBRjZBMDAzMDkxMDcwMDEwM0EKLToxMDY0OTAwMEEzNjcwMDM0OEY4MjAwMUM5MDQ1MDAxMUEzNjUwMDM1NkUKLToxMDY0QTAwMDhGODYwMDFDOTBEMDAwMTJBMzcwMDAzNjhGOUYwMDFDQjYKLToxMDY0QjAwMDkzRjkwMDEzQTM3OTAwMzc4RjkwMDAxQzk2MTgwMDE0RUQKLToxMDY0QzAwMEE3NzgwMDM4OTYxNDAwMTZBNzc0MDAzQThFMEYwMDE4QUIKLToxMDY0RDAwMEFGNkYwMDI0NTYyMEZEQTZBRjg0MDAyODNDMDUwODAwQkQKLToxMDY0RTAwMDI0QTU1Q0I4MEUwMDAyNUUwMDAwMjAyMThGOTAwMDFDRTUKLToxMDY0RjAwMDBBMDAwNEI2MDAwMDIwMjEzQzA1MDgwMDI0QTU1Q0I4NzEKLToxMDY1MDAwMDBFMDAwMjg3MjQwNDAwODI4RjkwMDAxQzAwMDAzMDIxQkUKLToxMDY1MTAwMDBBMDAwMzczQUY4NjAwMjgzQzA0MDgwMDhDODQ1Q0I4MzIKLToxMDY1MjAwMDBFMDAxNTc3MDAwMDAwMDA4RjkwMDAxQzBBMDAwNDkwRjgKLToxMDY1MzAwMDAwMDAxODIxM0MwNTA4MDAyNEE1NUNCODBFMDAwMjg3NjUKLToxMDY1NDAwMDI0MDQwMDhCOEY5MDAwMUMwMDExMzAyQjBBMDAwMzczNzEKLToxMDY1NTAwMEFGODYwMDI4M0MxOTA4MDA4RjM5NUNCODNDMUYwODAwNDIKLToxMDY1NjAwMDhGRkYwMDUwMjRDQ0ZGRkUwMzNGNzgyMTAxRjg3MDI0RjgKLToxMDY1NzAwMEFGNEUwMDI4M0MwNDA4MDA4Qzg0NUNCODNDMDkwODAwM0QKLToxMDY1ODAwMDhEMjkwMDUwMDA4OTY4MjEzMUE4MDA3RjAxMUEyODIxMzcKLToxMDY1OTAwMDAwQTc4MDIxQUUwNjAwRDhBRjkwMDBEMEFFMDAwMERDOEUKLToxMDY1QTAwMDBBMDAwM0MyQUUwQzAxMDhBRjYwMDA4NDNDMDUwODAwN0QKLToxMDY1QjAwMDhDQTU1Q0I4M0MwODA4MDA4RDA4MDA1MDI0MENGRjgwQjYKLToxMDY1QzAwMDNDMDIwMDBDMDBBOEEwMjEwMjhDNTgyNEFGNEIwMDI4RUMKLToxMDY1RDAwMDhFMUYwMDE0MzI4MzAwN0YwMDdBNTAyMTAxNDI3MDIxMDcKLToxMDY1RTAwMEFEREYwMEQ4OEUxOTAwMTRBRjhFMDBEMEFERDkwMERDMUQKLToxMDY1RjAwMDhFMTgwMDEwMjcwRkZGRkUwQTAwMDQxNUFEQ0YwMTA4MEEKLToxMDY2MDAwMDU0OEJGRTJGMjQwNTQwMDAwQTAwMDQ0NzI0MDUxMDAwODcKLToxMDY2MTAwMDBFMDAwMzM1MDAwMDAwMDAwQTAwMDNGODhGOTAwMDFDRjQKLToxMDY2MjAwMDhDNDY0NDJDM0MwNTZDNjIzNEIwNzk3MDNDMDEwODAwMDcKLToxMDY2MzAwMEFDMjA1Q0I4MTREMDAwMDgyNDA0MDAwMjk3ODgwMDM0MTEKLToxMDY2NDAwMDk3OEEwMDJDMDI4MDI4MjEwMTBBMzgyQjEwRTAwMDExQzMKLToxMDY2NTAwMDI0MDQwMDkyMjQwNDAwMDIwRTAwMEM5RDI0MDUwMTQwMzUKLToxMDY2NjAwMDNDMDEwODAwQUMyMjVDQjhBRjQyMDAyMDNDMDMwODAwQUIKLToxMDY2NzAwMDhDNjM1Q0I4MTA2MDAwMDUyNDA0MDA4MzBFMDAwODY4NzkKLToxMDY2ODAwMDAwMDAwMDAwMTA0MDAwMDkyNDA0MDA4MzNDMDUwODAwQkQKLToxMDY2OTAwMDI0QTU1Q0I4MEUwMDAyNUUwMDAwMDAwMDhGOTAwMDFDNzQKLToxMDY2QTAwMDAwMTEyMDJCMEEwMDAzNzNBRjg0MDAyODBFMDAwODZDMzEKLToxMDY2QjAwMDAwMDAwMDAwMEEwMDA1OTY4RjkwMDAxQzBFMDAwODcwNzQKLToxMDY2QzAwMDAwMDAwMDAwM0MwNTA4MDAyNEE1NUNCODBBMDAwNjNDNTgKLToxMDY2RDAwMDI0MDQwMDhCOEUwNDAwMDgwRTAwMDIzQjAwMDAwMDAwMjIKLToxMDY2RTAwMDBBMDAwNTJEQUU4MjAwMDgyNDA0MDAwNDBFMDAwQzlENTMKLToxMDY2RjAwMDI0MDUwMDMwMTQ0MDAwM0YwMDQwNDgyMThGOTAwMDFDQ0EKLToxMDY3MDAwMDBBMDAwNTdEMjQwNTAwODMwRTAwMDM0MDAyMDAyODIxQjUKLToxMDY3MTAwMDBBMDAwNEUyMDAwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4NjMKLToxMDY3MjAwMDBFMDAwMjMwMjQwNDAwODc4RjkwMDAxQzBBMDAwNTQ5RTcKLToxMDY3MzAwMDAwMTExMDJCMEUwMDAyNTAwMjgwMjAyMTkzNzAwMDIzQzQKLToxMDY3NDAwMDAyODAyMDIxMzYwRDAwMTAwRTAwMDI1OUEzNkQwMDIzOTcKLToxMDY3NTAwMDhGOTAwMDFDMEEwMDA1NTIwMDAwMTgyMTkyMDUwMDBDQzEKLToxMDY3NjAwMDMwQkYwMDAxMTNFMDAwMDMwMDAwMDAwMDk2MDIwMDBFOUQKLToxMDY3NzAwMEE0ODIwMDJDOTIwQTAwMEMzMTQ4MDAwMjExMDBGRUYyQTMKLToxMDY3ODAwMDAwMDAyODIxOTYwQjAwMTI4RTAzMDAxNEE0OEIwMDFBMUYKLToxMDY3OTAwMDBBMDAwNTY5QUM4MzAwMUM4RjgzMDAzODhGODcwMDMwQTYKLToxMDY3QTAwMDEwNjdGRTg0MDAwMDIwMjEzQzA5MDgwMDI1Mjk1QzNDN0MKLToxMDY3QjAwMDAwMDMyMEMwMDA4OTMwMjE4Q0Q0MDAwMDEyODUwMDVFQzcKLToxMDY3QzAwMDI0NzgwMDAxMzMwMzAwMEY1NDY3RkZGQTAwMDMyMEMwNTAKLToxMDY3RDAwMDBBMDAwNTA0MDAwMDIwMjEzQzA1MDgwMDI0QTU1Q0I4M0YKLToxMDY3RTAwMDBFMDAwMjg3MjQwNDAwODI4RjkwMDAxQzBBMDAwNTQ5RDUKLToxMDY3RjAwMDAwMDAxMDIxM0MwQjAwMDgwMzRCMjAyMTI0MDMwMDUwMTMKLToxMDY4MDAwMDI0MEEwMDAxQUY0MjAwMjBBMDgzMDAwMEEwOEEwMDAxRkEKLToxMDY4MTAwMDhGODgwMDFDOTEwNzAwMDRBMDg3MDAxODhGODIwMDFDM0QKLToxMDY4MjAwMDkwNDUwMDA1QTA4NTAwMTk4Rjg2MDAxQzkwREYwMDA2QUEKLToxMDY4MzAwMEEwOUYwMDFBOEY5OTAwMUM5MzM4MDAwN0EwOTgwMDFCOTYKLToxMDY4NDAwMDhGOTQwMDFDOTI4RjAwMDhBMDhGMDAxQzhGOTAwMDFDNUEKLToxMDY4NTAwMDkyMEUwMDA5QTA4RTAwMUQ4RjhEMDAxQzkxQUMwMDBBQzUKLToxMDY4NjAwMEEwOEMwMDFFOEY4QjAwMUMzQzBDMDgwMDI1OEM1QzNDMEYKLToxMDY4NzAwMDkxNjMwMDBCM0MwQjA4MDAyNTZCNUMzOEEwODMwMDFGNjQKLToxMDY4ODAwMDhGOEEwMDFDOTE0ODAwMENBMDg4MDAyMDhGODcwMDFDNzQKLToxMDY4OTAwMDkwRTUwMDBEQTA4NTAwMjE4RjgyMDAxQzI0MDU0NjQ2NEUKLToxMDY4QTAwMDkwNDYwMDBFQTA4NjAwMjI4RjlGMDAxQzkzRjkwMDBGRDcKLToxMDY4QjAwMEEwOTkwMDIzOEY5ODAwMUM5MzE0MDAxMEEwOTQwMDI0MkEKLToxMDY4QzAwMDhGOEYwMDFDOTFGMDAwMTFBMDkwMDAyNThGOTAwMDFDNkMKLToxMDY4RDAwMDhGOEUwMDMwOEY5OTAwMzg5NjBEMDAxNDAwMEUxOEMwNkUKLToxMDY4RTAwMDI1QzgwMDAxQTQ4RDAwMjg5NjBBMDAxNjAwNkMzMDIxRUUKLToxMDY4RjAwMDAwNkJGODIxQTQ4QTAwMkE5NjA3MDAxODMxMDgwMDBGQkYKLToxMDY5MDAwMEE0ODcwMDJDQTQ4NTAwMkU4RTAyMDAxQ0FDQzkwMDAwQjgKLToxMDY5MTAwMEFGODgwMDMwMTExOTAwMDNBRkUyMDAwMDBBMDAwNTdEQzYKLToxMDY5MjAwMDAwMDAyODIxMjUwQzAwMDEzMTg0MDAwRjAwMDAyODIxREYKLToxMDY5MzAwMDBBMDAwNTdEQUY4NDAwMzgzQzA3MDgwMDI0RTc1QzM4NzYKLToxMDY5NDAwMDAwODc4MDIxMDAwMDIwMjFBQ0MwMDAwMDBBMDAwNTA0NUYKLToxMDY5NTAwMEFFMDAwMDAwM0MwNTA4MDAyNEE1NUNCODBBMDAwNjNDMTcKLToxMDY5NjAwMDI0MDQwMDg3OEUwNDAwMDQwRTAwMDIzQjAwMDAwMDAwOTcKLToxMDY5NzAwMDBBMDAwNUExQUU4MjAwMDgzMDg0RkZGRjMwQzYwMEZGODgKLToxMDY5ODAwMDhGNDIwMUI4MDQ0MEZGRkUwMDA2NDQwMDAxMDQzMDI1OTgKLToxMDY5OTAwMDNDMDcyMDAwMDBDNzIwMjUzQzAzMTAwMEFGNDAwMTgwQzkKLToxMDY5QTAwMEFGNDUwMTg0QUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NUMKLToxMDY5QjAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDNDMDc2MDAwNzgKLToxMDY5QzAwMDI0MDYwMDAyMTA4MDAwMDYwMEEwODAyMTAwMTAxMDJCNzkKLToxMDY5RDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MUYKLToxMDY5RTAwMDNDMDk2MDBFQUQyMDAwMzQ4Q0U1MjAxQzhGODIwMDFDMTkKLToxMDY5RjAwMDI0MDhGRkZDMDBBODE4MjRBQ0UzMjAxQzBFMDAwNkY1QjgKLToxMDZBMDAwMDhDNDUwMDBDMDAxMDEwMkI4RkJGMDAxNDhGQjAwMDEwQUQKLToxMDZBMTAwMDAzRTAwMDA4MjdCRDAwMTgzQzAyNjAwRTM0NDcwMTAwNjcKLToxMDZBMjAwMDI0MDkwMDE4Mjc0QTA0MDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMDZBMzAwMDAwMDAwMDAwM0MwNjAwNTAzNEMzMDIwMEFGNDQwMDM4QTAKLToxMDZBNDAwMEFGNDUwMDNDQUY0MzAwMzAwMTQwMTgyMThGNEIwMDAwQTAKLToxMDZBNTAwMDMxNjgwMDIwMTEwMEZGRkQyNDA2MDA3RjI0MDhGRkZGOUQKLToxMDZBNjAwMDhDNkMwMDAwMjRDNkZGRkYyNDYzMDAwNEFDRUMwMDAwMjMKLToxMDZBNzAwMDE0QzhGRkZCMjRFNzAwMDQwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDZBODAwMDAwMDAwMDAwM0MwRjAwMjBBRjRGMDAzMDAwMDAwMDAwNkQKLToxMDZBOTAwMDI0QUQwMjAwMDFBNTcwMkIyNTI5RkZGRjAwOEUyMDIxQzcKLToxMDZBQTAwMDE1MjBGRkUxMDFBMDI4MjEwM0UwMDAwODAwMDAwMDAwRkMKLToxMDZBQjAwMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxOEFGQjAwMDEwQUEKLToxMDZBQzAwMDNDMDU2MDBFOENBMjAwMzQwMDgwODgyMTE0NDAwMDA2MzIKLToxMDZBRDAwMDNDMDQ2MDAwOEM4NzIwMUMyNDA4RkZGQzAwRTgzMDI0NjQKLToxMDZBRTAwMDM0QzMwMDAxQUM4MzIwMUM4RjhCMDAxQzI0MDkwMDAxREYKLToxMDZBRjAwMEFDQTkwMDM0OTU2OTAwMDI4RDY1MDAxNDhENzAwMDBDRkUKLToxMDZCMDAwMDJEMjQwMDgxOEQ2NzAwMDQ4RDY2MDAwODEwODAwMDA3MjkKLToxMDZCMTAwMDhENkEwMDEwMkQyQzAwMDQxNTgwMDAwRTMwQ0UwMDA3NjkKLToxMDZCMjAwMDMxMkQwMDAzMTFBMDAwMEIwMDAwMDAwMDI0MDQwMDhCOTUKLToxMDZCMzAwMDAyMDAyODIxMEUwMDA2RjUyNDA2MDAwMzAwMTExMDJCODgKLToxMDZCNDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NTEKLToxMDZCNTAwMDI3QkQwMDIwMTVDMEZGRjYyNDA0MDA4QjNDMDMwMDIwNTUKLToxMDZCNjAwMEFGNDMwMDMwMDAwMDAwMDAyNDAyMDAwMUFGODIwMDE0OTcKLToxMDZCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMUYwMTUwNjkKLToxMDZCODAwMDAxM0ZDODI1MjUzODAwMDMzQzBGNjAwRUFGNDcwMDM4OTEKLToxMDZCOTAwMDAwMTgxODgyQUY0NjAwM0MzNUU4MDAzQ0FGNTkwMDMwODEKLToxMDZCQTAwMDI3NDcwNDAwOEY0NDAwMDAzMDg2MDAyMDEwQzBGRkZERkUKLToxMDZCQjAwMDAwMDAwMDAwMTA2MDAwMDgyNDY2RkZGRjI0MDNGRkZGQjAKLToxMDZCQzAwMDhDRUIwMDAwMjRDNkZGRkYyNEU3MDAwNEFEMEIwMDAwOUYKLToxMDZCRDAwMDE0QzNGRkZCMjUwODAwMDQzQzA4NjAwRUFEMDkwMDM4MTMKLToxMDZCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDcwMDIwNDIKLToxMDZCRjAwMEFGNDcwMDMwMDAwMDAwMDAwRTAwMDcxRDAxNDAyMDIxQkIKLToxMDZDMDAwMDAyMDAyODIxMDAwMDIwMjEwRTAwMDZGNTI0MDYwMDAzQzIKLToxMDZDMTAwMDAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMUYKLToxMDZDMjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEOEFGQjIwMDE4NDEKLToxMDZDMzAwMDMwOTJGRkZGQUZCMTAwMTRBRkJGMDAyMEFGQjMwMDFDMTQKLToxMDZDNDAwMEFGQjAwMDEwMTI0MDAwMkMwMDAwODgyMTBBMDAwN0I1RTgKLToxMDZDNTAwMDI0MTMwMDAxNTBCMzAwNDA4Q0U1MDAwQzAwMDAwMDBEMkYKLToxMDZDNjAwMDI2MzkwMDAxMzMzMUZGRkYyNEY4MDAyMDAyMzIzODJCOEYKLToxMDZDNzAwMDEwRTAwMDIxQUY5ODAwMUM4RjgyMDAxNDE0NDAwMDFFMDkKLToxMDZDODAwMDhGODcwMDFDM0MwNjcwMDAzQzAzMjAwMDhDRTQwMDAwNTEKLToxMDZDOTAwMDAwODYyODI0MTRBMzAwMTg4Rjg1MDAzQzAwMDQ0NDAyQjkKLToxMDZDQTAwMDNDMDk4MDAwMDA4OTgwMjQxNEEwRkZFQTMxMDYwMEZGMUYKLToxMDZDQjAwMDI0MEEwMDAyMTBDQTAwMkUyOENCMDAwMzExNjAwMDE2MUYKLToxMDZDQzAwMDI0MEMwMDAzMTREM0ZGRTcyNjM5MDAwMTAyMDAyODIxMTkKLToxMDZDRDAwMDBFMDAwNzAzMjQwNDAwMDE4Rjg3MDAxQ0FGODIwMDNDRDQKLToxMDZDRTAwMDI2MzkwMDAxMzMzMUZGRkYyNEY4MDAyMDAyMzIzODJCMEYKLToxMDZDRjAwMDE0RTBGRkUxQUY5ODAwMUMwMjIwMTAyMThGQkYwMDIwOUMKLToxMDZEMDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjkKLToxMDZEMTAwMDAzRTAwMDA4MjdCRDAwMjgxMENDMDAxQTI0MEQwMDA0NTEKLToxMDZEMjAwMDE0Q0RGRkQwMjYzOTAwMDEzMDhFRkZGRjAwMEUxOUMwQjAKLToxMDZEMzAwMDhGNDQwMUI4MDQ4MEZGRkUzQzBGMTAwMDNDMTAyMDA0N0IKLToxMDZENDAwMEFGNDMwMTgwQUY0MDAxODRBRjUwMDE4OEFGNEYwMUI4MUQKLToxMDZENTAwMDBBMDAwN0IwMjYzOTAwMDEwRTAwMDZGNTI0MDQwMDg0NUQKLToxMDZENjAwMDE2MDBGRkJGOEY4NzAwMUMwQTAwMDdBRkFGODAwMDNDRjIKLToxMDZENzAwMDAyMDAyODIxMEUwMDA3MDMwMDAwMjAyMTBBMDAwN0NFOTAKLToxMDZEODAwMDhGODcwMDFDMEUwMDA3NDMwMjAwMjAyMThGODcwMDFDMDQKLToxMDZEOTAwMDBBMDAwN0NGQUY4MjAwM0MzMDgyRkZGRjE0NDAwMDAzOUYKLToxMDZEQTAwMDAwMDAxODIxMDAwNDI0MDIyNDAzMDAxMDMwODUwMEZGOTUKLToxMDZEQjAwMDE0QTAwMDA1MzA4NzAwMEYyNDY2MDAwODAwMDQyMjAyOUEKLToxMDZEQzAwMDMwQzMwMEZGMzA4NzAwMEYxNEUwMDAwNTMwODkwMDAzNTYKLToxMDZERDAwMDI0NjgwMDA0MDAwNDIxMDIzMTAzMDBGRjMwODkwMDAzMEQKLToxMDZERTAwMDE1MjAwMDA1Mzg4QjAwMDEyNDZBMDAwMjAwMDQyMDgyNkYKLToxMDZERjAwMDMxNDMwMEZGMzg4QjAwMDEzMTY0MDAwMTEwODAwMDAyMzQKLToxMDZFMDAwMDI0NkMwMDAxMzE4MzAwRkYwM0UwMDAwODAwNjAxMDIxQzIKLToxMDZFMTAwMDMwOEJGRkZGMDAwQjM5NDIzMEU2MDBGRjNDMDkwODAwRDEKLToxMDZFMjAwMDI1Mjk1QkI4MDAwNjQwODAwMTA5NjAyMThEODcwMDAwOUMKLToxMDZFMzAwMDMxNjQwMDFGMjQwQTAwMDEwMDhBMTgwNDMwQTUwMEZGRjUKLToxMDZFNDAwMDAwRTMyMDI1MTRBMDAwMDIwMDAzMTAyNzAwRTIyMDI0MDQKLToxMDZFNTAwMDI0MEYwMDAxMDBDRjcwMDQwMTA5NjgyMTAwMEUyODI3Q0IKLToxMDZFNjAwMDE0ODAwMDA1QURBNDAwMDA4Rjg2MDAwQzAwQTYxMDI0M0QKLToxMDZFNzAwMDAzRTAwMDA4QUY4MjAwMEM4Rjg4MDAwQzAxQzgxMDI1QzkKLToxMDZFODAwMDAzRTAwMDA4QUY4MjAwMEMzQzA2MDAxRjNDMDM2MDAwREEKLToxMDZFOTAwMDMwODRGRkZGMzRDNUZGODAyNDAyMDAyMEFDNjAyMDA4NEUKLToxMDZFQTAwMEFDNjAyMDBDQUM2MDIwMTBBQzY1MjAxNEFDNjQyMDE4RTEKLToxMDZFQjAwMEFDNjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwMDA4QjkKLToxMDZFQzAwMDAwMDAwMDAwMjdCREZGRTgyNDAyRkZGRkFGQkYwMDEwNTUKLToxMDZFRDAwMEFGODIwMDBDMDAwMDIwMjEzQzA2MDgwMDI0QzY1QkI4RUQKLToxMDZFRTAwMDI0MDVGRkZGMjQ4OTAwMDEwMDA0NDA4MDMxMjRGRkZGQjYKLToxMDZFRjAwMDAxMDYxODIxMkM4NzAwMjAxNEUwRkZGQUFDNjUwMDAwODEKLToxMDZGMDAwMDBFMDAwODM5MDAwMDIwMjEyNDAyMDAwMTNDMDQ2MDAwMkEKLToxMDZGMTAwMDI0MDUwMDIwQUM4MjIwMThBQzg1MjAwMDAwMDAwMDAwNzEKLToxMDZGMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDRBMDAwMTMxNDJGRkZGODEKLToxMDZGMzAwMDJDNDYwNDAwMTRDMEZGRjc4RkJGMDAxMDAzRTAwMDA4QzgKLToxMDZGNDAwMDI3QkQwMDE4OEY4MzAwMDgyQzYyMDQwMDAzRTAwMDA4QUUKLToxMDZGNTAwMDM4NDIwMDAxOEY4MzAwMDgyNDYyMDAwMTAzRTAwMDA4MkEKLToxMDZGNjAwMEFGODIwMDA4OEY4MzAwMDgyNDYyRkZGRjAzRTAwMDA4NUYKLToxMDZGNzAwMEFGODIwMDA4MjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MUIKLToxMDZGODAwMEFGQjAwMDEwOEY2QjAwMzAzQzA2NjAwMDAwODA4ODIxOUQKLToxMDZGOTAwMEFDQ0IyMDA4OEY2QTAwMkMzQzAyODAwMDI0MDMwMDA4NDAKLToxMDZGQTAwMEFDQ0EyMDBDOTc2OTAwM0E5NzY4MDAzODAwMDkyQzAwOTkKLToxMDZGQjAwMDMxMDdGRkZGMDBBNzIwMjVBQ0M0MjAxMEFDQzIyMDE0NkQKLToxMDZGQzAwMEFDQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDZGRDAwMDNDMDM2MDAwOEM2RDIwMDAzMUFDMDAwODE1ODBGRkY5ODcKLToxMDZGRTAwMDAwMDAwMDAwOEM2RTIwMTQwNUMwMDAyMDAwMDAwMDAwOEUKLToxMDZGRjAwMDBFMDAwN0ZEOEY4NDAwMEMwMDAyNDA4MDNDMDkwODAwNTEKLToxMDcwMDAwMDI1Mjk1QkI4MDEwOTM4MjE4Q0U0MDAwMDBFMDAwN0ZEM0EKLToxMDcwMTAwMDAwMDI4MTQwMDIwMjIwMjEzMDkwRkZGRjAyMDAyMDIxNjcKLToxMDcwMjAwMDBFMDAwODFCMDAwMDI4MjEzQzBDODAwMDAyMkM1ODI1NzMKLToxMDcwMzAwMDMyMTBGRkZGM0MxMTYwMDAyNDBBMDAyMEFFMkIyMDE0MDgKLToxMDcwNDAwMEFFMzAyMDE4QUUyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDcwNTAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxODhGQjEwMDE0NDMKLToxMDcwNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDhDNjYyMDE0QkMKLToxMDcwNzAwMDNDMDIwMDFGMzQ0M0ZGODAzQzFGRkZFODAwQzNDMDI0RDQKLToxMDcwODAwMDM3RjkwODAwMDMxOTgwMjEwMDEwNzlDMjNDMEM4MDAwRjgKLToxMDcwOTAwMDAyMkM1ODI1MzFGMEZGRkYzQzExNjAwMDI0MEEwMDIwMkIKLToxMDcwQTAwMEFFMkIyMDE0QUUzMDIwMThBRTJBMjAwMDAwMDAwMDAwQzUKLToxMDcwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE4MzcKLToxMDcwQzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkUKLToxMDcwRDAwMDI3QkRGRkU4QUZCMDAwMTAzNDAyRkZGRjMwOTBGRkZGODQKLToxMDcwRTAwMEFGQkYwMDE0MTIwMjAwMDYwMjAwMjAyMTBFMDAwODM5NzIKLToxMDcwRjAwMDAwMDAwMDAwMDIwMDIwMjEwRTAwMDgxQjI0MDUwMDAxRjIKLToxMDcxMDAwMDhGODQwMDA4OEZCRjAwMTQ4RkIwMDAxMDI0ODNGRkZGMEUKLToxMDcxMTAwMDI3QkQwMDE4MDNFMDAwMDhBRjgzMDAwODAwMDQzOUMyNEYKLToxMDcxMjAwMDMwRTYwMDNGMDAwNDNCNDIwMDA3MTg0MDI0MDIxMDAwRjQKLToxMDcxMzAwMDJDQzQwMDIwMjRDOEZGRTBBRjQyMDAyQzI0NjMwMDAxQ0YKLToxMDcxNDAwMDE0ODAwMDAzMzBBOTAwRkYwMDA3MTg0MDMxMDYwMEZGM0IKLToxMDcxNTAwMDAwMDM2MDgwMjQwODAwMDEwMTlBNTgyMTNDMEEwMDBFQjcKLToxMDcxNjAwMDAwQzgyODA0MDE2QTM4MjExMTIwMDAwNTAwMDUzMDI3RDUKLToxMDcxNzAwMDhDRTkwMDAwMDEyNTMwMjUwM0UwMDAwOEFDRTYwMDAwQTIKLToxMDcxODAwMDhDRUUwMDAwMDFDNjY4MjQwM0UwMDAwOEFDRUQwMDAwQUUKLToxMDcxOTAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDNDMDQ2MDAwOTMKLToxMDcxQTAwMDhDODUwODA4MzQwM0YwMDAzMEEyRjAwMDUwNDMwMDA2M0MKLToxMDcxQjAwMDI0MDIwMDAxOEM4NzA4MDgzNDA0RTAwMDMwRTZGMDAwNjcKLToxMDcxQzAwMDEwQzQwMDFFMjQwMjAwMDJBRjgyMDA0MDNDMTA2MDAwODgKLToxMDcxRDAwMDNDMEEwMjAwQUUwQTA4MTQyNDA5MTAwMDNDMDgwMDBFMDQKLToxMDcxRTAwMDhFMDM0NDAwMDM0ODIwMjFBRjQ5MDAyQzI0MDUwMTIwRDAKLToxMDcxRjAwMDBFMDAwQ0UzMDAwMDMwMjE4RjgzMDA0MDEwNjAwMDA0N0IKLToxMDcyMDAwMDNDMDIxNjkxMjQwQjAwMDExMDZCMDAwRTNDMDIzRDZDRjkKLToxMDcyMTAwMDM0NEYwMDkwQUUwRjQ0MDg4RkJGMDAxNDhGQjAwMDEwQTEKLToxMDcyMjAwMDNDMEM2MDAwMjQwRTEwMDAzQzBEMDIwMDI3QkQwMDE4MkQKLToxMDcyMzAwMEFEOEU0NDIwMDNFMDAwMDhBRDhEMDgxMDBBMDAwOTBBNTUKLToxMDcyNDAwMEFGODAwMDQwM0MwMjE4REEzNDRGMDA5MEFFMEY0NDA4ODMKLToxMDcyNTAwMDhGQkYwMDE0OEZCMDAwMTAzQzBDNjAwMDI0MEUxMDAwOTMKLToxMDcyNjAwMDNDMEQwMjAwMjdCRDAwMThBRDhFNDQyMDAzRTAwMDA4NEQKLToxMDcyNzAwMEFEOEQwODEwMEEwMDA4REUyNDA1MDAwMTBBMDAwOERFQjIKLToxMDcyODAwMDAwMDAyODIxM0MwODA4MDAyNTA4NUZDNDI0MDRGRkZGRjMKLToxMDcyOTAwMDAxMDAxODIxMjQwMjAwMUUyNDQyRkZGRkFDNjQwMDAwRkMKLToxMDcyQTAwMDA0NDFGRkZEMjQ2MzAwMDQzQzA3MDgwMDI0RTc2MDQwMUMKLToxMDcyQjAwMDhDRTVGRkZDMjQwNDAwMUMyNDA2MDAwMTMwOEEwMDFGMUEKLToxMDcyQzAwMDAxNDY0ODA0MjQ4NDAwMDEwMDA5MTAyNzJDODMwMDIwNzMKLToxMDcyRDAwMDE0NjBGRkZBMDBBMjI4MjRBQ0U1RkZGQzNDMDU2NjY2QkEKLToxMDcyRTAwMDM0QTQ2MTZFM0MwNjA4MDAyNEM2NjEwMEFGODQwMDU4RDcKLToxMDcyRjAwMEFGODgwMDlDMjQwNEZGRkYwMEMwMTgyMTI0MDIwMDFGNTcKLToxMDczMDAwMDI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0QKLToxMDczMTAwMDNDMDc2NjY2M0MwNTA4MDAyNEE1NjBDMEFGODYwMDQ4QUYKLToxMDczMjAwMDM0RTY2MTZFQUY4NjAwOTgyNDA0RkZGRjAwQTAxODIxQTgKLToxMDczMzAwMDI0MDIwMDBGMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZENjMKLToxMDczNDAwMDI0NjMwMDA0M0MwQjY2NjYzQzA2MDgwMDI0QzY2MDQwQ0IKLToxMDczNTAwMDM1Njg2MTZFQUY4NTAwQTRBRjg4MDA3MDI0MDRGRkZGMUMKLToxMDczNjAwMDAwQzAxODIxMjQwMjAwMUYyNDQyRkZGRkFDNjQwMDAwNkIKLToxMDczNzAwMDA0NDFGRkZEMjQ2MzAwMDQzQzBENjY2NjNDMEEwODAwREUKLToxMDczODAwMDI1NEE2MTgwMzVBQzYxNkVBRjg2MDA5MEFGOEMwMDVDQTEKLToxMDczOTAwMDI0MDRGRkZGMDE0MDE4MjEyNDAyMDAwMzI0NDJGRkZGQzAKLToxMDczQTAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDkwODAwQjQKLToxMDczQjAwMDI1Mjk2MTkwOEQyN0ZGRkMyNDA0MDAwNjI0MDUwMDAxODcKLToxMDczQzAwMDMwOTkwMDFGMDMyNUMwMDQyNDg0MDAwMTAwMTg3ODI3ODkKLToxMDczRDAwMDJDOEUwMDIwMTVDMEZGRkEwMEVGMzgyNEFEMjdGRkZDRUIKLToxMDczRTAwMDNDMDk2NjY2MjQwMzA0MDAyNDA0MDNEQzI0MDUwMjAwMkYKLToxMDczRjAwMDI0MDYwMDY2MzUyMjYxNkUzQzA4MDgwMDI1MDg1Q0M0M0UKLToxMDc0MDAwMEFGODIwMDc0QUY4MzAwNDRBRjgzMDA2Q0FGODMwMDUwNDEKLToxMDc0MTAwMEFGODMwMDg0QUY4QTAwOENBRjg0MDA2NEFGODUwMDRDREEKLToxMDc0MjAwMEFGODYwMDU0QUY4NDAwNzhBRjg1MDA2MEFGODYwMDgwREYKLToxMDc0MzAwMDAxMDAxODIxMjQwMjAwMDIyNDQyRkZGRkFDNjAwMDAwN0EKLToxMDc0NDAwMDA0NDFGRkZEMjQ2MzAwMDQyNDA0MDAwMzI0MDMwMDBDMTIKLToxMDc0NTAwMDNDMEEwODAwMjU0QTVDRDBBRjhBMDA2ODBBMDAwOUIxREUKLToxMDc0NjAwMDI0MDVGRkZGMDAwNDE4ODAyNDg0MDAwMTAwNjg1ODIxQ0YKLToxMDc0NzAwMDJDODcwMEMwMTRFMEZGRkJBRDY1MDAwMDNDMEU2NjY2ODMKLToxMDc0ODAwMDM1Q0Q2MTZFMjQwQzE3QTAyNDA4MTgwMEFGOEQwMDg4M0MKLToxMDc0OTAwMEFGOEMwMDk0MDNFMDAwMDhBRjg4MDA3QzI0ODQwMDdGNTgKLToxMDc0QTAwMDAwMDQyMUMyMDAwMDQwMjEwMDAwMzAyMTAwMDAzODIxRUEKLToxMDc0QjAwMDAwMDAyODIxMEEwMDA5QzhBRjg0MDBBMDEwNjAwMDA2NUYKLToxMDc0QzAwMDI0RTcwMDAxMDBDNDMwMjEyNEE1MDAwMTJDQzIwQkY1RTMKLToxMDc0RDAwMDE0NDBGRkZBMkNBMzAwNjYzQzA5MDgwMDI1Mjk2MTgwQUUKLToxMDc0RTAwMDAxMjAxODIxMjQwMjAwMDMyNDQyRkZGRkFDNjAwMDAwQTkKLToxMDc0RjAwMDA0NDFGRkZEMjQ2MzAwMDQxMEUwMDAxQTI0RTNGRkZGQjEKLToxMDc1MDAwMDAwMDMyOTQyMTBBMDAwMEEwMDAwMjAyMTI0MDZGRkZGRUEKLToxMDc1MTAwMDNDMDMwODAwMjQ2MzYxODAyNDg0MDAwMTAwODU1MDJCMTMKLToxMDc1MjAwMEFDNjYwMDAwMjUwODAwMDExNTQwRkZGQjI0NjMwMDA0NDEKLToxMDc1MzAwMDMwRTIwMDFGMTA0MDAwMDgwMDA4Njg4MDI0MEMwMDAxQTEKLToxMDc1NDAwMDAwNEMzODA0MDAwODU4ODAwMTY5MjgyMTI0RTZGRkZGMTgKLToxMDc1NTAwMDAzRTAwMDA4QUNBNjAwMDAwMUE5NDAyMTI0MDlGRkZGQjgKLToxMDc1NjAwMEFEMDkwMDAwMDNFMDAwMDgwMDAwMDAwMEFGNDQwMDI4NUYKLToxMDc1NzAwMDNDMDQwMDBDMDM0NDIwMjEwMDA1Mjg4MjBBMDAwQ0UzOEYKLToxMDc1ODAwMDAwMDAzMDIxMDAwNDIxODAzQzAzNjAwMEFDNjQxMDA4M0UKLToxMDc1OTAwMDAwMDAwMDAwMDAwNTI5ODBBQzY1MTAwQzAwMDAwMDAwMTAKLToxMDc1QTAwMDAzRTAwMDA4OEM2MjEwMEMyN0JERkZFODAwODAyODIxNTIKLToxMDc1QjAwMDI0MDQwMDM4QUZCRjAwMTQwRTAwMDlGOEFGQjAwMDEwNkIKLToxMDc1QzAwMDI0MDQwRTAwQUY0NDAwMjgzQzEwMDAwQzAzNTAyMDIxN0UKLToxMDc1RDAwMDI0MDUwMDEwMEUwMDBDRTMwMDAwMzAyMTAzNTAxMDIxQTAKLToxMDc1RTAwMEFDNDAwMDAwQUM0MDAwMDQyNDA0MDAzODhGQkYwMDE0RkQKLToxMDc1RjAwMDhGQjAwMDEwMjQwNTNGRkYyN0JEMDAxODBBMDAwOUY4Q0UKLToxMDc2MDAwMDhDNDMwMDAwMDAwNDIxODAzQzAzNjAwMEFDNjQxMDA4M0YKLToxMDc2MTAwMDAwMDAwMDAwOEM2MjEwMEMwM0UwMDAwODAwMDIxMTgyRTAKLToxMDc2MjAwMDI3QkRGRkM4QUZCNDAwMjA4Rjk0MDA2OEFGQkUwMDMwMDQKLToxMDc2MzAwMEFGQjcwMDJDQUZCNjAwMjgwMDAwQjgyMTAwODBCMDIxMDEKLToxMDc2NDAwMDI0MUUwMEMwQUZCRjAwMzRBRkI1MDAyNEFGQjMwMDFDOTAKLToxMDc2NTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDBBMDAwQTM1ODUKLToxMDc2NjAwMEFGQTUwMDNDNTA0MDAwMDE4Rjk0MDA2ODI3REVGRkZGNkIKLToxMDc2NzAwMDEzQzAwMDI4MjY5NDAwMDQ4RTkyMDAwMDNDMDMwODAwRUEKLToxMDc2ODAwMDI0NjM1RkMwMTI0MEZGRjcwMjgzMTAyQjNDMDQwODAwMDQKLToxMDc2OTAwMDI0ODQ1Q0M0MDI4NDEwMjMwMDAyQThDMDAwMDA5ODIxNDYKLToxMDc2QTAwMDBBMDAwQTQ0MjQxMTAwMDEwMDExODg0MDEyMjAwMDI2MUIKLToxMDc2QjAwMDAwMDAwMDAwMDJCMzgwMjEwMjUxMjgyNDAyMDAyMDIxOTIKLToxMDc2QzAwMDEwQTBGRkY5MjY3MzAwMDEwRTAwMEEwMTAwMDAwMDAwNUYKLToxMDc2RDAwMDAwMTY2ODQwMzJFQzAwMDEwMUFDMjAyMTBFMDAwOUY4RDAKLToxMDc2RTAwMDAyMDAyODIxOEY4OTAwOTQyNkY3MDAwMThGQTYwMDNDMTQKLToxMDc2RjAwMDNBRUIwMDAxMzE2QTAwMDEyNTI4RkZGRjAwMTEzODI3MEQKLToxMDc3MDAwMDAyQ0FCMDIxQUY4ODAwOTQxNkU2RkZFNzAyNDc5MDI0MzIKLToxMDc3MTAwMEFFOTIwMDAwMDJFMDEwMjE4RkJGMDAzNDhGQkUwMDMwMTcKLToxMDc3MjAwMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwQUYKLToxMDc3MzAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwRUYKLToxMDc3NDAwMDAzRTAwMDA4MjdCRDAwMzgzQzBFMDgwMDI1Q0U1RkMwQ0UKLToxMDc3NTAwMDAyOEUxMDJCMEEwMDBBMzBBRTkyMDAwMDI3QkRGRkQ4MUYKLToxMDc3NjAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEFGQjMwMDFDMkEKLToxMDc3NzAwMEFGQjIwMDE4MDBBMDg4MjExMEEwMDAxRjAwMDQ4MDQwQjQKLToxMDc3ODAwMDNDMTMwODAwMjY3MzVDQzQwQTAwMEE3RDI0MTIwMDAxMjEKLToxMDc3OTAwMDEyMjAwMDE5MjYxMDAwMDEwRTAwMEExODAyMDAyMDIxRjQKLToxMDc3QTAwMDAwMDIzMTQyMjQ0NEZGQTAwMDA2MTg4MDMwNDUwMDFGMkIKLToxMDc3QjAwMDJDODIxN0ExMDA3MzE4MjEyNjMxRkZGRjEwNDBGRkY0MUYKLToxMDc3QzAwMDAwQjIzMDA0OEM2OTAwMDAwMjAwMjAyMTI0MDUzRkZGMzQKLToxMDc3RDAwMDAxMjY0MDI0MTUwMEZGRUUwMTI2MzgyNTBFMDAwOUY4ODkKLToxMDc3RTAwMEFDNjcwMDAwOEY4QTAwOTQyNjEwMDAwMTI1NDcwMDAxMzUKLToxMDc3RjAwMDE2MjBGRkU5QUY4NzAwOTQ4RkJGMDAyMDhGQjMwMDFDRDUKLToxMDc4MDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4OTEKLToxMDc4MTAwMDI3QkQwMDI4OEY4NTAwOUMwMDgwNTgyMTAwMDA0MDIxNTIKLToxMDc4MjAwMDAwMDA0ODIxMjQwQTAwMUYzQzBDMDgwMDI1OEM2MDNDMDUKLToxMDc4MzAwMDNDMEQwODAwMjVBRDVGQzQ4Q0E2MDAwMDUwQzAwMDE0QUMKLToxMDc4NDAwMDAwMDA0MDIxMDBBRDEwMjMwMDAyMzhDMDI0MDMwMDAxRDUKLToxMDc4NTAwMDBBMDAwQUI2MDAwMDIwMjExNTAwMDAwMzAwRTQxMDIxRjAKLToxMDc4NjAwMDI0NDgyMDI0MDAwMDQ4MjEyNTI5MDAwMTUxMkIwMDEzMjEKLToxMDc4NzAwMDI1MDZERkRDMTA2MDAwMDYyNDg0MDAwMTAwQzM3MDI0QUMKLToxMDc4ODAwMDE1QzBGRkY1MDAwMzE4NDAwQTAwMEFCNDAwMDA0MDIxQUIKLToxMDc4OTAwMDEwQUMwMDI2MjRBMzAwMDQwMDYwMjgyMTI1NEFGRkZGMjUKLToxMDc4QTAwMDE1NDBGRkU1QUY4NTAwOUM1MTJCMDAwNDI1MDZERkRDNjkKLToxMDc4QjAwMDAwMDA0MDIxMDNFMDAwMDgwMTAwMTAyMTAwMDY2MTQyQTEKLToxMDc4QzAwMDMwQzUwMDFGMDAwQzUwODAzQzA3MDgwMDI0RTc1RkM0NEYKLToxMDc4RDAwMDI0MDQwMDAxMDE0NzMwMjExMTIwMDAwRjAwQTQyMDA0REUKLToxMDc4RTAwMDNDMDUwODAwMjRBNTYwNDAxNDgwMDAwNTI1MjlGRkZGMDEKLToxMDc4RjAwMDI0QzYwMDA0MTBDNTAwMTEwMDAwMDAwMDI0MDQwMDAxOEIKLToxMDc5MDAwMDhDQ0YwMDAwMDAwNEMwMjcwMDA0MjA0MDAxRjg2ODI0NDgKLToxMDc5MTAwMDE1MjBGRkY1QUNDRDAwMDA4Rjk5MDA3ODAxMDAxMDIxRjMKLToxMDc5MjAwMDAzMkI0ODIzMDNFMDAwMDhBRjg5MDA3ODNDMDUwODAwREEKLToxMDc5MzAwMDI0QTU1RkM0MEEwMDBBQkUwMDAwNDAyMTNDMDYwODAwREUKLToxMDc5NDAwMDI0QzY1RkM0MEEwMDBBRDcyNDA0MDAwMTMwODgwMEZGNUYKLToxMDc5NTAwMDI0MDIwMDAyMTEwMjAwMEEyNDAzMDAwMzExMDMwMDVDNDgKLToxMDc5NjAwMDhGODkwMEE0MjQwNDAwMDQxMTA0MDA1RjI0MDUwMDA1OEQKLToxMDc5NzAwMDExMDUwMDY3MDAwMDE4MjEwM0UwMDAwODAwNjAxMDIxRDUKLToxMDc5ODAwMDhGODkwMDQ4M0MwQzA4MDAyNThDNjEwMDNDMDQwODAwRUQKLToxMDc5OTAwMDI0ODQ2MTgwMjQwMzAwMjAxMDYwMDAwRjAwMDA1ODIxMUYKLToxMDc5QTAwMDI0MEQwMDAyMjQwRTAwMDMzQzBGMDgwMDI1RUY2MTAwQTcKLToxMDc5QjAwMDhEMjcwMDAwMTRFMDAwMEIzMEY5RkZGRjI1MjkwMDA0OUIKLToxMDc5QzAwMDAxMjRDMDJCNTMwMDAwMDEwMTgwNDgyMTI0NjNGRkZGRTQKLToxMDc5RDAwMDU0NjBGRkY4OEQyNzAwMDAwMTYwMTgyMTAzRTAwMDA4QzMKLToxMDc5RTAwMDAwNjAxMDIxMTMyMDAwMzIzQzA1MDBGRjMwRTIwMEZGNTAKLToxMDc5RjAwMDAwNDAzMDIxMTA0MDAwNDIwMDAwNTAyMTI0MDUwMDAxQzkKLToxMDdBMDAwMDAwMDAyMDIxMDAwNUM4NDAwMEE2QzAyNDE3MDAwMDAzODQKLToxMDdBMTAwMDMzMjUwMEZGMTRBMEZGRkIyNDg0MDAwMTAxMkNDMDIzQTgKLToxMDdBMjAwMDAwMTgyOEMwMDBBQTYwMjEwMDhDNTAyMTMxNDQwMDFGOUEKLToxMDdBMzAwMDI0MEMwMDAxMDA4QzE4MDQwMDAzMTAyNzAwRTIzMDI0RkQKLToxMDdBNDAwMDExMEQwMDQxQUQyNjAwMDAxMTBFMDA0QzAwMEExODQwMzcKLToxMDdBNTAwMDExMEQwMDM2OEY4NzAwNkM1MTBFMDA1NjhGOEMwMDYwMjAKLToxMDdBNjAwMDI0MEQwMDA0MTEwRDAwNUE4RjhFMDA4NDI0MEUwMDA1OTEKLToxMDdBNzAwMDE1MEVGRkRBMDE2MDE4MjEyNDBCMTQzMDExNDAwMDA2QTYKLToxMDdBODAwMDAwMDAxODIxOEY4NDAwQTAyNDYzMDAwMTAwNkE0MDJCQUQKLToxMDdBOTAwMDE1MDBGRkZEMDE2NDU4MjE4RjhBMDA4MEFGODkwMDhDOUEKLToxMDdBQTAwMDAxNjAxODIxMjU0OUZGRkYwQTAwMEIwRUFGODkwMDgwRjUKLToxMDdBQjAwMDAwRTUyMDI0MDAwNzM2MDIxMDgwRkZEMDI0MEEwMDE4QjkKLToxMDdBQzAwMDAwMDc1NDAyMzE0NjAwRkYwQTAwMEIxNjI0MEEwMDEwN0EKLToxMDdBRDAwMDNDMEMwODAwMjU4QzYwQzAzQzA0MDgwMDI0ODQ2MTAwMzQKLToxMDdBRTAwMDBBMDAwQUZEMjQwMzAwMTAzQzBDMDgwMDI1OEM2MDQwQUQKLToxMDdBRjAwMDNDMDQwODAwMjQ4NDYwQzAwQTAwMEFGQzhGODkwMDkwQkUKLToxMDdCMDAwMDAwMDcxQTAyMzA2NjAwRkYwQTAwMEIxNjI0MEEwMDA4NUMKLToxMDdCMTAwMDhGODkwMDhDM0MwQzA4MDAyNThDNjE4MDNDMDQwODAwOTcKLToxMDdCMjAwMDI0ODQ2MTkwMEEwMDBBRkQyNDAzMDAwNDAwMEE0MDgwQjYKLToxMDdCMzAwMDI1MEIwMDMwMjRFNkZGRkYwMTYwMTgyMUFGODkwMDQ4QzMKLToxMDdCNDAwMDBBMDAwQjBFQUY4NjAwNkMwMDBBQzk4MjAwMTk3ODgwMEIKLToxMDdCNTAwMDNDMDcwODAwMjRFNzYwQzAwMUU3MjAyMTAwMEExODQyMjIKLToxMDdCNjAwMDhDOEYwMDAwMzA3OTAwMUYwMzJDMzgwNDAwMDdDMDI3RDkKLToxMDdCNzAwMDAxRjg2MDI0MEEwMDBCMkJBQzhDMDAwMDAwMDMzMTQyOUEKLToxMDdCODAwMDAwMDYyODgwMDBBRjI4MjEzMDYyMDAxRjhDQjgwMDAwNUEKLToxMDdCOTAwMDI0NjMwMDAxMDA0Q0M4MDQwMDAzMjE0MjAwMTkzODI3NjcKLToxMDdCQTAwMDAwMDQxMDgwMDMwNzMwMjQwMDRGMjAyMTBBMDAwQjZGQ0YKLToxMDdCQjAwMEFDQTYwMDAwMDAwQTY4QzAyNUFCMDAzMjI1OEFGRkZGOTIKLToxMDdCQzAwMDAxNjAxODIxQUY4OTAwQTQwQTAwMEIwRUFGOEEwMDYwODMKLToxMDdCRDAwMDI1NEIxMDMwQUY4OTAwOTAwMTYwMTgyMTI1QzlGRkZGQTcKLToxMDdCRTAwMDBBMDAwQjBFQUY4OTAwODQzMDg2MDAwNzJDQzIwMDA2MDUKLToxMDdCRjAwMDEwNDAwMDE0MDAwMDAwMDAwMDA2NDA4MDNDMDMwODAwMTQKLToxMDdDMDAwMDI0NjM1OUQ0MDEwMzM4MjE4Q0U0MDAwMDAwODAwMDA4NkIKLToxMDdDMTAwMDAwMDAwMDAwMjQwOTAwMDMxMEE5MDAwRTAwMDAwMDAwNkQKLToxMDdDMjAwMDI0MEEwMDA1MTBBQTAwMEIwMDAwMDAwMDI0MEIwMDAxMkMKLToxMDdDMzAwMDEwQUIwMDA4MDAwMDAwMDA4RjhDMDBBMDEwQUMwMDA1MDUKLToxMDdDNDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMTAyMTBBMDAwQTlDNjgKLToxMDdDNTAwMDAwQTAyMDIxMEEwMDBBRUEwMEMwMjAyMTI3QkRGRkU4NzkKLToxMDdDNjAwMDMwODQwMEZGMjQwMzAwMDIxMDgzMDAwQkFGQkYwMDEwMUMKLToxMDdDNzAwMDI0MDYwMDAzMTA4NjAwM0EyNDA4MDAwNDEwODgwMDY4RDcKLToxMDdDODAwMDI0MEUwMDA1MTA4RTAwN0YyQ0FGMTQzMDhGQkYwMDEwMjMKLToxMDdDOTAwMDAzRTAwMDA4MjdCRDAwMTgyQ0EyMDAzMDE0NDBGRkZDQjAKLToxMDdDQTAwMDhGQkYwMDEwMjRBNUZGRDAwMDA1MzFDMjAwMDY2ODgwRjgKLToxMDdDQjAwMDNDMDcwODAwMjRFNzYxMDAwMUE3MzAyMThDQzkwMDAwQkYKLToxMDdDQzAwMDAwMDUyODgyMzBBQzAwMUYyNDBCMDAwMTAxOEI1MDA0RkEKLToxMDdDRDAwMDhGODQwMDQ4MDEyQTQwMjVBQ0M4MDAwMDhDODMwMDAwMzYKLToxMDdDRTAwMDUwNjAwMDAxQUY4NjAwNDg4Rjk4MDA2QzMwQUUwMDAxRjQKLToxMDdDRjAwMDI0QTZGRkZGMjcwRjAwMDExNUMwMDAwMkFGOEYwMDZDMDQKLToxMDdEMDAwMDI0QTYwMDAxMDAwNjQxNDIwMDA4MjA4MDAwODcxODIxQjcKLToxMDdEMTAwMDhDNzkwMDAwMzBDMjAwMUYyNDA2MDAwMTAwNDZGODA0RTAKLToxMDdEMjAwMDAzM0YzODI0MTBFMEZGREE4RkJGMDAxMDAwMDVDMTgyNDYKLToxMDdEMzAwMDAwMTg3MDgwM0MwRjA4MDAyNUVGNjBDMDAxQ0Y0ODIxN0IKLToxMDdENDAwMDhEMkIwMDAwMDAwNTY4NDIzMUE1MDAxRjAwQTY2MDA0Q0QKLToxMDdENTAwMDAxNkM1MDI1MjdCRDAwMTgwM0UwMDAwOEFEMkEwMDAwODMKLToxMDdENjAwMDJDQTcwMDMwMTRFMEZGQ0E4RkJGMDAxMDMwQjkwMDA3MDUKLToxMDdENzAwMDE3MjNGRkM3MjRBOEZGQ0UwMDA4NkEwMjAwMEQ2MDgwMDkKLToxMDdEODAwMDNDMEIwODAwMjU2QjYwQzAwMThCMzAyMThDQzQwMDAwQzcKLToxMDdEOTAwMDAwMDgyOEMyMzBBQTAwMUYyNDA4MDAwMTAxNDg0ODA0MzYKLToxMDdEQTAwMDhGODIwMEE0MDA4OTE4MjVBQ0MzMDAwMDhDNUYwMDAwRkUKLToxMDdEQjAwMDUzRTAwMDAxQUY4NjAwQTQwMDA1NzA0MDAwMEU3OTQyMzgKLToxMDdEQzAwMDAwMEYyODgwM0MwNDA4MDAyNDg0NjEwMDAwQTQxODIxQ0UKLToxMDdERDAwMDhDNkIwMDAwMjVERjAwMDEzMUNEMDAxRjAwMUY1MTQyRDgKLToxMDdERTAwMDAxQTg2MDA0MDE2QzQ4MjUwMDBBMTA4MEFDNjkwMDAwRkQKLToxMDdERjAwMDAwNDQyODIxOENBNjAwMDA4Rjk4MDA2MDMzRjkwMDFGRjIKLToxMDdFMDAwMDhGQkYwMDEwMDMyODM4MDQwMEM3NzgyNTI3MEUwMDAxMTMKLToxMDdFMTAwMDI3QkQwMDE4QUNBRjAwMDAwM0UwMDAwOEFGOEUwMDYwODMKLToxMDdFMjAwMDI0QTVFRkQwMkNCODA0MDAxMzAwRkY5OThGQkYwMDEwRDkKLToxMDdFMzAwMDAwMDUzMTQyMDAwNjU4ODAzQzBBMDgwMDI1NEE2MDQwOEYKLToxMDdFNDAwMDAxNkEzMDIxOENDNDAwMDAzMEEzMDAxRjI0MDkwMDAxMDYKLToxMDdFNTAwMDAwNjkxMDA0OEY5OTAwOTAwMDgyRjgyNUFDREYwMDAwQzMKLToxMDdFNjAwMDhGMjcwMDAwNTBFMDAwMDFBRjg2MDA5MDhGOEQwMDg0QzYKLToxMDdFNzAwMDhGQkYwMDEwMjdCRDAwMTgyNUFDMDAwMTAzRTAwMDA4RUIKLToxMDdFODAwMEFGOEMwMDg0MTVFMEZGODI4RkJGMDAxMDhGODYwMEEwQUEKLToxMDdFOTAwMDAwMDYxMDQwMDA0NkY4MjEwMDFGMjEwMDAzRTRDODIxMUQKLToxMDdFQTAwMDAwMTkzODQwMjRGODE0MzAwMEI4NDAyQjExMDBGRjc4MzYKLToxMDdFQjAwMDhGQkYwMDEwMjRBNEVCRDAwRTAwMDIwRDAwQzAyODIxQkIKLToxMDdFQzAwMDAwMDI3OTQyMDAwRjcwODAzQzBEMDgwMDI1QUQ2MTgwRjIKLToxMDdFRDAwMDAxQ0QyMDIxOEM4QjAwMDAzMDRDMDAxRjI0MDYwMDAxQjYKLToxMDdFRTAwMDAxODYxODA0OEY4OTAwOEMwMTYzNTAyNUFDOEEwMDAwM0MKLToxMDdFRjAwMDhEMjUwMDAwNTBBMDAwMDFBRjg0MDA4QzhGOTgwMDgwNzkKLToxMDdGMDAwMDhGQkYwMDEwMjdCRDAwMTgyNzA4MDAwMTAzRTAwMDA4RkMKLToxMDdGMTAwMEFGODgwMDgwMzBBNTAwMDcyNDAzMDAwMzEwQTMwMDEwRTEKLToxMDdGMjAwMDI4QTIwMDA0MTQ0MDAwMDgyNDA3MDAwMjI0MDMwMDA0Q0YKLToxMDdGMzAwMDEwQTMwMDE1MjQwODAwMDUxMEE4MDAwRjhGODUwMEEwQ0QKLToxMDdGNDAwMDAzRTAwMDA4MDAwMDAwMDAxNEE3RkZGRDAwODAyODIxQzYKLToxMDdGNTAwMDE0QzNGRkZCMjQwNDAwMDIwQTAwMEJBRTAwMDAwMDAwNjMKLToxMDdGNjAwMDI0MDkwMDA1MDA4MDI4MjExMEM5RkZGQjI0MDQwMDAzMTgKLToxMDdGNzAwMDAzRTAwMDA4MDAwMDAwMDAxNEM1RkZGMTAwODAyODIxODQKLToxMDdGODAwMDBBMDAwQkFFMjQwNDAwMDUyNDBBMDAwMTAwODAyODIxMDkKLToxMDdGOTAwMDEwQ0FGRkYxMjQwNDAwMDQwM0UwMDAwODAwMDAwMDAwMDAKLToxMDdGQTAwMDI3QkRGRkUwQUZCMDAwMTAwMDA1ODFDMjI2MDNGRkQwNUYKLToxMDdGQjAwMDI0QzUwMDNGMkM2MjIzRDAyNEM2MDA3RkFGQjIwMDE4MzYKLToxMDdGQzAwMEFGQjEwMDE0QUZCRjAwMUMzMDkxMDBGRjAwMDY5MUMyOUEKLToxMDdGRDAwMDAwMDUyOTgyMDIwMDIwMjExMDQwMDAwODI0MDNGRkZGMzEKLToxMDdGRTAwMDBFMDAwQTZFMDAwMDAwMDAwMjAwMjAyMTAyMjAyODIxNUQKLToxMDdGRjAwMDBFMDAwQzVDMDI0MDMwMjEwMDAwMTgyMThGQkYwMDFDRDUKLToxMDgwMDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxRTMKLToxMDgwMTAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEODI0QTIwMDdGNzEKLToxMDgwMjAwMEFGQjMwMDFDQUZCMjAwMTgwMDAyOTlDMjMwOTIwMEZGM0IKLToxMDgwMzAwMDI0QTMwMDNGMDI0MDIwMjEwMjYwMjgyMUFGQjEwMDE0OTgKLToxMDgwNDAwMEFGQjAwMDEwQUZCRjAwMjAwRTAwMEI5MTAwMDM4OTgyN0IKLToxMDgwNTAwMDAwNDA4MDIxMDA0MDIwMjEwMjIwMjgyMTE0NDAwMDA5RjYKLToxMDgwNjAwMDAwMDAxODIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4QjIKLToxMDgwNzAwMDhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTAzRTAwMDA4RTEKLToxMDgwODAwMDI3QkQwMDI4MEUwMDBBMUYwMDAwMDAwMDAwNDAyODIxMjQKLToxMDgwOTAwMDAyMDAyMDIxMTA1MUZGRjMwMDEwMTlDMDBFMDAwQTZFREIKLToxMDgwQTAwMDAwMDAwMDAwMDIwMDIwMjEwMjQwMjgyMTBFMDAwQzVDOEMKLToxMDgwQjAwMDAyNjAzMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4RTgKLToxMDgwQzAwMDhGQjEwMDE0OEZCMDAwMTAwMDAwMTgyMTAwNjAxMDIxNDMKLToxMDgwRDAwMDAzRTAwMDA4MjdCRDAwMjgzMDg0RkZGRjMwQTVGRkZGMjQKLToxMDgwRTAwMDEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyQkIKLToxMDgwRjAwMDAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwODEKLToxMDgxMDAwMDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwMUMKLToxMDgxMTAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwNEUKLToxMDgxMjAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwRUEKLToxMDgxMzAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwOTAKLToxMDgxNDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMTcKLToxMDgxNTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDMwQTVGRkZGQjUKLToxMDgxNjAwMDhGNDIwMUI4MDQ0MEZGRkUzQzA3NjAxNTAwQTczMDI1OTAKLToxMDgxNzAwMDNDMDMxMDAwQUY0NDAxODBBRjQwMDE4NEFGNDYwMTg4NEEKLToxMDgxODAwMDAzRTAwMDA4QUY0MzAxQjg4Rjg1MDBEMDJDODY0MDAwODMKLToxMDgxOTAwMDAwODAxODIxOENBNzAwODQwMDg3MTAyQjE0NDAwMDEwNDkKLToxMDgxQTAwMDAwMDAwMDAwOENBODAwODQyRDA2NDAwMDUwQzAwMDBGODUKLToxMDgxQjAwMDI0MDM0MDAwOENBQTAwODQwMDhBNDgyQjUxMjAwMDAxMkYKLToxMDgxQzAwMDhDQTMwMDg0MDAwMzVBNDIwMDBCMjA4MDNDMDUwODAwNjkKLToxMDgxRDAwMDI0QTU1QTQwMDA4NTE4MjEwM0UwMDAwODhDNjIwMDAwQTUKLToxMDgxRTAwMDE0QzBGRkY0MDAwMDAwMDAyNDAzNDAwMDAwMDM1QTQyQzIKLToxMDgxRjAwMDAwMEIyMDgwM0MwNTA4MDAyNEE1NUE0MDAwODUxODIxNkEKLToxMDgyMDAwMDAzRTAwMDA4OEM2MjAwMDA4RjgzMDBEMDkwNjYwMEQwRUQKLToxMDgyMTAwMDI0QzUwMDAxQTA2NTAwRDA4Rjg1MDBEMDkwNjQwMEQwRjcKLToxMDgyMjAwMDkwQTIwMEQyMTA0NDAwMTcwMDAwMDAwMDkzNkMwMDc4NjgKLToxMDgyMzAwMDhGOEIwMEJDMzE4QTAwRkZBMTZBMDAwQzI1NDkwMDAxMjgKLToxMDgyNDAwMDkzODcwMEM0MzEyMjAwRkYzMDQ4MDA3RjExMDcwMDBCRTQKLToxMDgyNTAwMDAwMDI2ODI3QTM2MjAwNzg4RjRFMDE3ODA1QzBGRkZFRjgKLToxMDgyNjAwMDhGOTkwMEIwMjQxODAwMDIzQzBGMTAwMEFGNTkwMTQwNTQKLToxMDgyNzAwMEEzNTgwMTQ0MDNFMDAwMDhBRjRGMDE3ODBBMDAwRDJDMTkKLToxMDgyODAwMDMxQTIwMDgwQTBBMDAwRDAwQTAwMEQyMjAwMDAwMDAwNTIKLToxMDgyOTAwMDI3QkRGRkQ4QUZCMjAwMTg4RjkyMDBCOEFGQkYwMDIwNDMKLToxMDgyQTAwMEFGQjMwMDFDQUZCMDAwMTBBRkIxMDAxNDhGOTMwMEI0OTcKLToxMDgyQjAwMDhFNTkwMDI4M0MxMDAwODAzQzBFRkZFRkFFNzkwMDAwODQKLToxMDgyQzAwMDhFNTgwMDI0QTI2MDAwMEEzNUNERkZGRkFFNzgwMDA0NkUKLToxMDgyRDAwMDkyNTEwMDJDM0MwQkZGOUYzNTZBRkZGRkEyNzEwMDBDRUUKLToxMDgyRTAwMDhFNkYwMDBDM0MwODAwNDBBMjcxMDAwQjAxRjA2MDI1NkQKLToxMDgyRjAwMDAxOEQ0ODI0MDEyQTM4MjQwMEU4MzAyNUFFNjYwMDBDQTAKLToxMDgzMDAwMDhFNDUwMDA0QUU2MDAwMTgzQzA0MDBGRkFFNjUwMDE0MEEKLToxMDgzMTAwMDhFNDMwMDJDMzQ4MkZGRkZBNjYwMDAwODAwNjJGODI0MjAKLToxMDgzMjAwMEFFN0YwMDEwOEU1OTAwMDg4RjkwMDBCMDk2NEUwMDEyNUMKLToxMDgzMzAwMEFFNzkwMDIwOEU1MTAwMEMzMUQ4M0ZGRjAwMTg3OTgwQjMKLToxMDgzNDAwMEFFNzEwMDI0OEU0RDAwMTQwMUYwNjAyMTMxQ0IwMDAxOEMKLToxMDgzNTAwMEFFNkQwMDI4OEU0QTAwMTgwMDBDNDFDMjAwMEI0QjgwMDUKLToxMDgzNjAwMEFFNkEwMDJDOEU0NjAwMUMwMTA5MzgyMUE2NjcwMDFDNEQKLToxMDgzNzAwMEFFNjYwMDMwOTY0NTAwMDI4RTQ0MDAyMEE2NjUwMDFFQzEKLToxMDgzODAwMEFFNjQwMDM0OTI0MzAwMzMzMDYyMDAwNDU0NDAwMDA1NzAKLToxMDgzOTAwMDkyNDYwMDAwOEY4MzAwRDA4QzdGMDA3Q0FFN0YwMDMwM0YKLToxMDgzQTAwMDkyNDYwMDAwOEY4NTAwQkNBMEE2MDAwMDkyNDQwMDMzRDYKLToxMDgzQjAwMDMwODIwMDAyNTA0MDAwMDc5MjRFMDAwMThGODcwMEJDQkYKLToxMDgzQzAwMDI0MEFGRjgwOTBFOTAwMDAwMTJBNDAyNUEwRTgwMDAwNkYKLToxMDgzRDAwMDkyNEUwMDAxOEY4RDAwQkMyNDA5RkZCRjI0MDRGRkRGRjMKLToxMDgzRTAwMEExQUUwMDAxOEY4QTAwQkM5MTRDMDAwRDMxOEIwMDdGNDMKLToxMDgzRjAwMEExNEIwMDBEOEY4NjAwQkM5MEM4MDAwRDAxMDkzODI0RTgKLToxMDg0MDAwMEEwQzcwMDBEOEY5MTAwQkM4RTY1MDAxNDkyMjMwMDBENTMKLToxMDg0MTAwMDJDQTIwMDAxMDAwMkY5NDAwMDY0QzgyNDAzM0ZDMDI1REIKLToxMDg0MjAwMEEyMzgwMDBEOEY4ODAwQkM5NjUwMDAxMjhGODcwMEQwQjQKLToxMDg0MzAwMEE1MTAwMDAyOEU0NTAwMDQ5MEVEMDBCQzMwQUYwMDAzOTMKLToxMDg0NDAwMDAwMEY3MDIzMzFDQzAwMDMwMEFDMTAyMTMxQUIwMDAyQ0YKLToxMDg0NTAwMDE1NjAwMDAyMjQ0NDAwMzQyNDQ0MDAzMDkwRjEwMEJDMzQKLToxMDg0NjAwMDAwQjE4MDI0MzIwRjAwMDQxNUUwMDAwMjI0ODMwMDA0RDAKLToxMDg0NzAwMDAwODAxODIxOEY4OTAwQUMyNDBBMDAwMkFEMDMwMDA0OUIKLToxMDg0ODAwMEExMkEwMDAwOTI0ODAwM0Y4Rjg3MDBBQ0EwRTgwMDAxQkQKLToxMDg0OTAwMDhGOTEwMEFDOTI0NjAwM0Y4RTQ0MDAwNEE2MjYwMDAyNTUKLToxMDg0QTAwMDk3NjUwMDNDMEUwMDBDRjkzMEIwRkZGRjAwMDIxMzgwMEUKLToxMDg0QjAwMDAwNTAyMDI1M0MwMzQyMDAwMDgzRjgyNUFFM0YwMDA0MTUKLToxMDg0QzAwMDhGODUwMEFDOEU1OTAwMzhBQ0I5MDAxODhFNTgwMDM0MzYKLToxMDg0RDAwMEFDQjgwMDFDQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0MTAKLToxMDg0RTAwMEE0QTAwMDE2QTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0RjgKLToxMDg0RjAwMDhFNjIwMDE0NTA0MDAwMDEyNDAyMDAwMThGQkYwMDIwNTIKLToxMDg1MDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTEKLToxMDg1MTAwMEFDQTIwMDA4MEEwMDBEMTkyN0JEMDAyODhGODYwMEQwRTQKLToxMDg1MjAwMDI3QkRGRkQwQUZCRjAwMkNBRkI2MDAyOEFGQjUwMDI0RTkKLToxMDg1MzAwMEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0NEQKLToxMDg1NDAwMEFGQjAwMDEwOTRDMzAwRTA5NEMyMDBFMjEwNDMwMDQxQjkKLToxMDg1NTAwMDI0MDVGRkZGM0MxNjAwMEU5MEM0MDBEMDkwQzgwMEQxNDcKLToxMDg1NjAwMDMwOTIwMEZGMzEwNDAwRkYwMjQ0MzgyQjEwRTAwMDQ0MzkKLToxMDg1NzAwMDI2NDkwMDAxMTA4OTAwMzc4Rjk4MDBCMDNDMDUwODAwOUIKLToxMDg1ODAwMDhDQTUwMDVDMjQxNEZGODAwMEI4NjAyMTAxOTQ2ODI0NEQKLToxMDg1OTAwMEFGNEQwMDJDOTRDQTAwRTIzMThCMDA3RjAxN0E0ODIxNTQKLToxMDg1QTAwMDMxNDQ3RkZGMDEzNjQwMjEwMDA0MTA0MDAwNDhBODIxREIKLToxMDg1QjAwMDk2QTcwMDAwM0MxRjA4MDA4RkZGMDA1ODMwRjUzRkZGRDIKLToxMDg1QzAwMDAwMTUxOTgwMDNFM0M4MjEwMzE5ODgyMTMyMzMwMDdGODUKLToxMDg1RDAwMDAyN0E3ODIxMDIzNDgwMjRBRjUwMDAyQzAxRjY5ODIxRDEKLToxMDg1RTAwMDkyNkUwMDBEMzFDNTAwMDQxMEEwMDA0ODAwMDAwMDAwOEMKLToxMDg1RjAwMDk0QzMwMEUyOTRDMzAwRTI5NEQ4MDBFMjI0MDQ4MDAwMTMKLToxMDg2MDAwMDMwN0Y3RkZGMjdGOTAwMDEzMzMxN0ZGRjAzMDQ4MDI0OEYKLToxMDg2MTAwMDAyMTE3ODI1QTRDRjAwRTI5NENFMDBFMjNDMTIwODAwQkIKLToxMDg2MjAwMDhFNTIwMDYwMzFENDdGRkYxMjkyMDBERjAwMDAwMDAwMDQKLToxMDg2MzAwMDhFNzIwMDE4MDAwMDI4MjEyNjQ2RkZGRkFFNjYwMDJDMkYKLToxMDg2NDAwMDhGODYwMEQwOTRDODAwRTA5NEM5MDBFMjE1MjhGRkMyQ0MKLToxMDg2NTAwMDAwMDAwMDAwOEZCRjAwMkM4RkI2MDAyODhGQjUwMDI0Q0IKLToxMDg2NjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUMKLToxMDg2NzAwMDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDMwREIKLToxMDg2ODAwMDkwQ0QwMEQyMjY0QTAwMDEzMUFDMDBGRjAwOEM1ODIxNjkKLToxMDg2OTAwMDExNkFGRkYwOEY5ODAwQjAzQzA1MDgwMDhDQTUwMDVDQzMKLToxMDg2QTAwMDI0MTRGRjgwMDBCODYwMjEwMTk0NjgyNEFGNEQwMDJDOTEKLToxMDg2QjAwMDk0Q0EwMEUyMzE4QjAwN0YwMTdBNDgyMTMxNDQ3RkZGNjgKLToxMDg2QzAwMDAxMzY0MDIxMDAwNDEwNDAwMDQ4QTgyMTk2QTcwMDAwNzAKLToxMDg2RDAwMDNDMUYwODAwOEZGRjAwNTgzMEY1M0ZGRjAwMTUxOTgwNDAKLToxMDg2RTAwMDAzRTNDODIxMDMxOTg4MjEzMjMzMDA3RjAyN0E3ODIxRkQKLToxMDg2RjAwMDAyMzQ4MDI0QUY1MDAwMkMwMUY2OTgyMTkyNkUwMDBEQjgKLToxMDg3MDAwMDMxQzUwMDA0MTRBMEZGQkEwMDAwMDAwMDhFNjYwMDEwRkUKLToxMDg3MTAwMDAwMTJDMEMwOEU2RTAwMzAwMDEyOTE0MDAyNTg3ODIxQzUKLToxMDg3MjAwMDAzNkY1ODIxMDBDRTY4MjMyNTZDMDA4ODI0MDIwMDAyQzQKLToxMDg3MzAwMEFFNkQwMDEwQUY4QzAwQUNBMTYyMDA4ODk3NkEwMDNDNUYKLToxMDg3NDAwMDhFNjQwMDMwOEY5MTAwQUMwRTAwMENGOTMxNTBGRkZGQTkKLToxMDg3NTAwMDAwMDIyMzgwMDA5MDQ4MjUzQzAzNDIwMDAxMjM0MDI1NkQKLToxMDg3NjAwMEFFMjgwMDA0OEU2NzAwMDQ4RjhDMDBBQzhFN0YwMDAwNjIKLToxMDg3NzAwMDI0MEQwMDA4QUQ4NzAwMUNBRDlGMDAxOEFEODAwMDBDRDMKLToxMDg3ODAwMEFEODAwMDEwOTI2NTAwMEEzMEI5MDBGRkE1OTkwMDE0NzEKLToxMDg3OTAwMDk2NzgwMDA4M0MwNTAwMENBNTk4MDAxNjkyNzEwMDBBMTYKLToxMDg3QTAwMDMyMkYwMEZGQTU4RjAwMjA5NjcwMDAwODI0MTEwMDA1Q0QKLToxMDg3QjAwMEE1OTAwMDIyQUQ4MDAwMjQ5MjZFMDAwQjI0MTBDMDAwMTIKLToxMDg3QzAwMDMxQzYwMEZGQTU4NjAwMDJBMThEMDAwMThFNkIwMDMwMkUKLToxMDg3RDAwMDhGODIwMEFDOEY4ODAwQjBBQzRCMDAwODNDMEEwODAwQzgKLToxMDg3RTAwMDhENEEwMDU0MDE0ODIwMjEwMDk0NDgyNEFGNDkwMDI4QjQKLToxMDg3RjAwMDNDMDMwODAwOEM2MzAwNTQwMDY4MzgyMTMwRkYwMDdGODAKLToxMDg4MDAwMDAzRkFDODIxMDMyNUMwMjEwMjU4NzgyMUFGOEYwMEJDOEMKLToxMDg4MTAwMEFGOTgwMEMwQTFGMTAwMDA4RjhCMDBCQzI0MDNGRkJGMDQKLToxMDg4MjAwMDI0MDVGRkRGOTU2RTAwMDIwMUQwQTAyNDAyOTU5MDI1NUIKLToxMDg4MzAwMEE1NzIwMDAyOTE2NjAwMDIzMENEMDAzRjM1QUMwMDQwQzkKLToxMDg4NDAwMEExNkMwMDAyOEY4ODAwQkM4RjgyMDBEMDNDMEM3RkZGOUYKLToxMDg4NTAwMEFEMDAwMDA0OEM0QTAwN0MzNThCRkZGRjNDMDI4MDAwOTkKLToxMDg4NjAwMEFEMEEwMDA4OTEwNDAwMEQzMDg5MDA3RkExMDkwMDBEQjgKLToxMDg4NzAwMDhGOUYwMEJDOTNGNTAwMEQwMkEzMzgyNEEzRTcwMDBERTEKLToxMDg4ODAwMDhGOTEwMEJDOTIzOTAwMEQwMzI1QzAyNEEyMzgwMDBENDEKLToxMDg4OTAwMDhFNkYwMDM0OEY4RDAwQkNBREFGMDAxMDhFNkUwMDJDM0IKLToxMDg4QTAwMDhFNzAwMDMwMDFEMEEwMjNBREI0MDAxNDkxQjIwMDE4MzYKLToxMDg4QjAwMDMyNDYwMDdGQTFBNjAwMTg4Rjg3MDBCQzhFNkEwMDMwNjgKLToxMDg4QzAwMDhDRTQwMDE4MDE0QjQ4MjQwMDgyNDAyNDAxMDlBODI1QUIKLToxMDg4RDAwMEFDRjUwMDE4OTI2MzAwMEFBMEUzMDAxQzk2N0YwMDA4MjQKLToxMDg4RTAwMDhGODUwMEJDOEY5OTAwRDBBNEJGMDAxRThFNzAwMDMwMTEKLToxMDg4RjAwMDhFNjQwMDMwMEUwMDAyMEQ4RjI1MDA4NDhGODUwMEQwMUQKLToxMDg5MDAwMDAwMDI4OTQwMDAwMkMxMDA5MEFFMDBCQzAyMzg3ODIxMEMKLToxMDg5MTAwMDAwNDAzMDIxMzFENDAwMDIxMjgwMDAwMzAyMEY4MDIxNzgKLToxMDg5MjAwMDAwMDJBODgwMDIxNTgwMjE5MEIyMDBCQzMyNTQwMDA0REQKLToxMDg5MzAwMDEyODAwMDAyMDAwNkM4ODAwMjE5ODAyMThFNkYwMDMwNkMKLToxMDg5NDAwMDhGOEIwMEJDMjQwNjgwMDAzMUVFMDAwMzAwMEU2ODIzRUMKLToxMDg5NTAwMDMxQUMwMDAzMDIwQzEwMjFBRDYyMDAwNDk0QTQwMEUyQ0IKLToxMDg5NjAwMDk0QUEwMEUyOTRBMzAwRTIzMTUwN0ZGRjI2MDQwMDAxQTQKLToxMDg5NzAwMDMwODk3RkZGMDA2NjQwMjQwMTA5ODgyNUE0QjEwMEUyMDgKLToxMDg5ODAwMDk0QTcwMEUyM0MxMzA4MDA4RTczMDA2MDMwRkY3RkZGNjUKLToxMDg5OTAwMDEzRjMwMDEyMDAwMDAwMDAwRTAwMEQxOTAwMDAwMDAwOEIKLToxMDg5QTAwMDBBMDAwRTI3MDAwMDI4MjE5NENEMDBFMjAxQTQ2MDI0RDMKLToxMDg5QjAwMEE0Q0MwMEUyOTBDQjAwRTI5MEMyMDBFMjMxNkEwMEZGNUEKLToxMDg5QzAwMDAwMEE0OUMyMDAwOTIwMjcwMDA0NDFDMDMwNTUwMDdGMzkKLToxMDg5RDAwMDAyQTgzODI1MEEwMDBFMjNBMEM3MDBFMjk0QjEwMEUyRTUKLToxMDg5RTAwMDAyMjYzODI0QTRBNzAwRTI5MEJGMDBFMjkwQjQwMEUyN0YKLToxMDg5RjAwMDMzRjMwMEZGMDAxM0M5QzIwMDE5OTAyNzMyOTgwMDdGOUIKLToxMDhBMDAwMDAwMTJBOUMwMDMxNTMwMjUwRTAwMEQxOUEwQTYwMEUyMjIKLToxMDhBMTAwMDBBMDAwRTI3MDAwMDI4MjEzMDg0RkZGRjMwQTVGRkZGNDkKLToxMDhBMjAwMEFGNDQwMDE4QUY0NTAwMUMwM0UwMDAwODhGNDIwMDE0NUIKLToxMDhBMzAwMDI3QkRGRkIwQUZCMDAwMjg4RjkwMDBEMEFGQjQwMDM4OTIKLToxMDhBNDAwMEFGQkYwMDRDQUZCRTAwNDhBRkI3MDA0NEFGQjYwMDQwNjgKLToxMDhBNTAwMEFGQjUwMDNDQUZCMzAwMzRBRkIyMDAzMEFGQjEwMDJDQzMKLToxMDhBNjAwMEE3QTAwMDE0OTIwNjAwRDE5MjA1MDBEMDMwOTRGRkZGMTkKLToxMDhBNzAwMDMwQzQwMEZGMzBBMzAwRkYwMDY0MTAyQkE3QTAwMDFFMkQKLToxMDhBODAwMDEwNDAwMDcxQUZBMDAwMTA5MjA5MDBEMDAwMTQ5ODJCODQKLToxMDhBOTAwMDMxMjgwMEZGMDA4ODM4MjMyNEYyRkZGRjAwMTI4ODJCQzIKLToxMDhBQTAwMDAyMzM3ODI0NTFFMDAwNzU4RkIyMDAxMDk2MTgwMDEyM0UKLToxMDhBQjAwMDk2MTkwMDEwMDAxNEY0MDAwMzE5QjgyMzAwMTdCNDAwMkQKLToxMDhBQzAwMDAwMTYxNDAzMDI4MkE4MkExNkEwMDAwMjAwMUUyNDAzMjYKLToxMDhBRDAwMDAwNDAyMDIxMDI0NEY4MkIxM0UwMDAwMjAwODAxODIxRkUKLToxMDhBRTAwMDAyNDAxODIxMDAwMzM0MDAwMDA2MUMwMzMwNjVGRkZGMUMKLToxMDhBRjAwMDJDQTIwMDA5MTQ0MDAwMDIwMDYwOTgyMTI0MTMwMDA4RjEKLToxMDhCMDAwMDhFMDkwMDA4MDAxMzU5ODA4RTA4MDAwQzMxNjRGRkZGQTUKLToxMDhCMTAwMDNDMEEwMDEwMDA4QTM4MjUyNzRBMDQwMEFGNDkwMDM4NzMKLToxMDhCMjAwMEFGOEEwMEI4QUY0ODAwM0NBRjQ3MDAzMDAwMDAwMDAwRkIKLToxMDhCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMDhCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEQwMDAwNDkKLToxMDhCNTAwMDMxQUMwMDIwMTE4MEZGRkQwMDEzNzAyQTAxRDExMDI0RDgKLToxMDhCNjAwMDAwMDBBODIxMTA0MDAxQzAwMDAwMDAwMDhGOTgwMEIwNTQKLToxMDhCNzAwMDNDMEIwODAwOEQ2QjAwNTQyNDExRkY4MDkyMUUwMEQwMjYKLToxMDhCODAwMDAxNzgyMDIxMDA5MTEwMjQ5MjE5MDBEMEFGNDIwMDI4RDIKLToxMDhCOTAwMDhENDUwMDEwM0MwNjA4MDA4Q0M2MDA1ODNDMTcwODAwQTQKLToxMDhCQTAwMDhFRjcwMDU0MzBBNzNGRkYwMDA3MTk4MDAwQzM0MDIxMTMKLToxMDhCQjAwMDAzMDgyMDIxMDA5MUY4MjQ5MjBCMDBEMEFGNUYwMDJDMTUKLToxMDhCQzAwMDkxNDgwMDAwMzNENjAwRkYzMzJGMDBGRjAyRjg3MDIxRDgKLToxMDhCRDAwMDAwMTY2MTQwMDAwRjY4QzAzMUM5MDA3RjAxOEQzODIxNDcKLToxMDhCRTAwMDAxM0EyODIxMzE2MzAwRkYzMDg2MDA3RjNDMDIwMDBDRUYKLToxMDhCRjAwMDAwQTJCMDIxMDAwMzg5NDAwMzY3QzgyMTAwREFGODIxRjAKLToxMDhDMDAwMDMxMDgwMDNGM0MxRTAwMEUwMjM2QjgyMTI3MzgwMDg4OEMKLToxMDhDMTAwMDAzRkU4ODIxMkQwRjAwMDhBRjk4MDBBQ0FGOTcwMEJDNzEKLToxMDhDMjAwMEFGOTYwMEMwMTFFMDAxOEZBRjkxMDBCNDAwMDg2ODgwREEKLToxMDhDMzAwMDNDMEUwODAwMjVDRTU5RUMwMUFFNjAyMThEODkwMDAwNjQKLToxMDhDNDAwMDAxMjAwMDA4MDAwMDAwMDA5MjBFMDBEMjkyMEQwMEQwMUEKLToxMDhDNTAwMDAwMTQ5ODJCMzFDQTAwRkYzMUFDMDBGRjAwOEM1ODIzNjAKLToxMDhDNjAwMDAxNEIyMDIxMjQ5MkZGRkYwMDEyODgyQjAyMzM3ODI0MkQKLToxMDhDNzAwMDE1RTBGRjhFMDAwMDAwMDA4RkIyMDAxMDhGQkYwMDRDODcKLToxMDhDODAwMDhGQkUwMDQ4M0E0MjAwMDE4RkI3MDA0NDhGQjYwMDQwQzMKLToxMDhDOTAwMDhGQjUwMDNDOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwRjIKLToxMDhDQTAwMDhGQjEwMDJDOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwRDIKLToxMDhDQjAwMDkxNTgwMDAxMzMxNzAwMjAxMkUwMDIwNDI0MTYwMDAxMkQKLToxMDhDQzAwMDkyMUYwMEJDMDAwMEIwMjEzM0Y5MDAwMTEzMjAwMDBERjkKLToxMDhDRDAwMDI0MUUwMDAxOEQ0ODAwMTQ4RTAzMDA4NDAxMDNCMDJCNzQKLToxMDhDRTAwMDE2QzAwMDAyMDEwMDMwMjE4RTA2MDA4NDhFMDUwMDY0NEIKLToxMDhDRjAwMDAwQzUzODJCMTRFMDAwMDIwMEMwMjAyMThFMDQwMDY0NUYKLToxMDhEMDAwMDAwODBCMDIxOEQ0MjAwMTQ4RTBCMDA2NDAwNEIzMDJCOEMKLToxMDhEMTAwMDE0QzAwMDAyMDA0MDIwMjE4RTA0MDA2NDAwOTZCODIzOTUKLToxMDhEMjAwMDU2RTAwMDAxMjQxRTAwMDIwMjVFMjAyQjE0ODAwMTQ4NDAKLToxMDhEMzAwMDAwMDAxODIxOEQ1OTAwMzg4RTJGMDAwQzNDMTgwMDgwM0YKLToxMDhENDAwMEFFMzkwMDAwOEQ1MDAwMzQzQzBFRkY5RjAxRjg2MDI1QzUKLToxMDhENTAwMEFFMzAwMDA0OTE0OTAwM0YzNUNERkZGRjAxOEQyMDI0NDYKLToxMDhENjAwMDNDMEEwMDIwM0MwQkZGRUZBMjI5MDAwQjAwOEEzODI1QUIKLToxMDhENzAwMDM1NjJGRkZGMDBFMjI4MjQzQzA2MDAwODhGODcwMEI4MTgKLToxMDhEODAwMDAwQTZDODI1QUUzOTAwMEM4Q0UzMDAxNEFFMjAwMDE4RjQKLToxMDhEOTAwMDNDMDhGRkZCQUUyMzAwMTQ4Q0Y4MDAxODM1MUZGRkZGQzIKLToxMDhEQTAwMDAzM0Y3MDI0QUUzODAwMUM4Q0VGMDAwODAyRDc4MDIxRUUKLToxMDhEQjAwMEFFMkYwMDI0OENFRDAwMENBRTMwMDAyQ0FFMkUwMDBDM0IKLToxMDhEQzAwMEFFMkQwMDIwQUUyMDAwMjhBNjIwMDAzOEE2MjAwMDNBQjQKLToxMDhERDAwMDhDRUMwMDE0MDE5NjQ4MjMwMTM3NTAyMzExNDAwMDExRjgKLToxMDhERTAwMEFFMkEwMDEwOTBFRTAwM0Q4RTJDMDAwNDhFMjQwMDAwNzAKLToxMDhERjAwMDAwMEU2OTAwMDE4RDI4MjEwMDAwNTAyMTAwQUQzMDJCQUMKLToxMDhFMDAwMDAwOEE1ODIxMDE2NjEwMjFBRTI1MDAwNEFFMjIwMDAwMjAKLToxMDhFMTAwMDkwRTMwMDNEQTIyMzAwMEE4Rjg4MDBCODk1MUYwMDA2NEEKLToxMDhFMjAwMEE2M0YwMDA4OEY4QjAwQUMyNDA2MDAwMjAyQzAyMDIxNjAKLToxMDhFMzAwMEExNjYwMDAwOTc2NTAwM0M4RjkwMDBBQzMwQTJGRkZGNTgKLToxMDhFNDAwMDBFMDAwQ0Y5QUZBMjAwMjA4RkEzMDAyMDAwMDI0MzgwODcKLToxMDhFNTAwMDhGODUwMEI4MDEwM0M4MjUzQzFGNDIwMDAzM0ZDMDI1OTEKLToxMDhFNjAwMEFFMTgwMDA0OEY4NDAwQUM4Q0FGMDAzOEFDOEYwMDE4QjMKLToxMDhFNzAwMDhDQjAwMDM0QUM5MDAwMUNBQzgwMDAwQ0FDODAwMDEwQjYKLToxMDhFODAwMEE0ODAwMDE0QTQ4MDAwMTZBNDgwMDAyMEE0ODAwMDIyRTYKLToxMDhFOTAwMEFDODAwMDI0OTBBNzAwM0ZBNDg3MDAwMjEyQzAwMjEwRkIKLToxMDhFQTAwMDI0MEQwMDAxNTJFMDAwMDI5MEEyMDAzRDkwQTIwMDNFN0QKLToxMDhFQjAwMDI0NEEwMDAxQTA4QTAwMDE4Rjg0MDBBQ0FDOTYwMDA4MEYKLToxMDhFQzAwMDhGODMwMEQwMjQwNzAwMzQ5MDZGMDBCQzMxRUUwMDAyODUKLToxMDhFRDAwMDUxQzAwMDAxMjQwNzAwMzA4RjgyMDBCODhGOTkwMEJDNzgKLToxMDhFRTAwMDkwNjgwMEJDOTA1RjAwMDAyNDEwMDAwNDMyQ0YwMDAzQTMKLToxMDhFRjAwMEEzM0YwMDAwOEY5ODAwQjg4RjhDMDBCQzAyMEY3MDIzMzYKLToxMDhGMDAwMDkzMEQwMDAxMjQwNUMwMDAzMUNBMDAwM0ExOEQwMDAxQUEKLToxMDhGMTAwMDhGOTAwMEJDOEY4OTAwQjgwMEY2MzgyMTk2MDQwMDAyQkIKLToxMDhGMjAwMDk1MjYwMDEyMDBFQTM4MjEwMDg1NTgyNDMwQzMzRkZGRkYKLToxMDhGMzAwMDAxNjMxMDI1QTYwMjAwMDI5MjFGMDAwMjMxMDgwMDA0RkUKLToxMDhGNDAwMDMzRjkwMDNGMzczODAwNDBBMjE4MDAwMjEyQzAwMDAyNzcKLToxMDhGNTAwMDhGODUwMEJDMDBFODM4MjE4Rjg2MDBEMEFDQTcwMDA0QzQKLToxMDhGNjAwMDI0MUZGRkJGOENDMzAwN0MyRUNCMDAwMTI0MEZGRkRGMkEKLToxMDhGNzAwMEFDQTMwMDA4OTBBODAwMEQwMDBCNjk0MDMxMDIwMDdGRUYKLToxMDhGODAwMEEwQTIwMDBEOEY5MDAwQkM5MjE5MDAwRDAzM0ZDMDI0RDkKLToxMDhGOTAwMEEyMTgwMDBEOEY4QTAwQkM5MTRFMDAwRDAxQ0Y2MDI0RjUKLToxMDhGQTAwMDAxOEQ0ODI1QTE0OTAwMEQ4Rjg2MDBCODhGOEIwMEJDMkMKLToxMDhGQjAwMDhDQzcwMDIwQUQ2NzAwMTA4Q0M1MDAyNEFENjUwMDE0N0YKLToxMDhGQzAwMDhDQzQwMDI4QUQ2NDAwMTg4Q0MzMDAyQzBFMDAwRDE5NTEKLToxMDhGRDAwMEFENjMwMDFDMjQwODAwMDI1N0M4MDA5QzhGOTAwMEQwOEQKLToxMDhGRTAwMDhGOEYwMEQwOEY4QTAwQzAwMkUwMjAyMTkxRTgwMEQwNEUKLToxMDhGRjAwMDkxRUIwMEQwOTFFNzAwRDAzMTEwMDBGRjMxNkUwMEZGRkYKLToxMDkwMDAwMDAwMTA2OTQwMDAwRTI4QzAwMUE1MTgyMTMwRTkwMEZGQkEKLToxMDkwMTAwMDAzNjNDODIxMDAwOTMxNDAwMENBRjgyMTI3MjIwMDg4RDMKLToxMDkwMjAwMEFGODIwMEFDQUY5RjAwQkNBMzNFMDA4ODBFMDAwQ0Y5REQKLToxMDkwMzAwMDhGOTAwMEFDOEZCODAwMjAwMDAyNjM4MDNDMEY0MjAwOEMKLToxMDkwNDAwMDAxOTg0MDI1OEY4QzAwQjgwMTBGNTgyNUFFMEIwMDA0MDUKLToxMDkwNTAwMDhEODQwMDM4OEY4QjAwQUMwMDAwMjgyMTAwMDUzOTAwN0EKLToxMDkwNjAwMEFENjQwMDE4OEQ4RTAwMzQzQzBGN0ZGRjM1RThGRkZGQTQKLToxMDkwNzAwMEFENkUwMDFDOTE4MzAwM0U4RDY5MDAxQzhENjYwMDE4NEEKLToxMDkwODAwMDAwMDM1MTAwMDAwMzZGMDIwMTJBQzAyMTAwRUQxMDI1RUEKLToxMDkwOTAwMDAzMEFGODJCMDBDMkM4MjEwMzNGODAyMUFENzgwMDFDRDEKLToxMDkwQTAwMEFENzAwMDE4QUQ2MDAwMENBRDYwMDAxMDkxODQwMDNFMDIKLToxMDkwQjAwMDI0MUYwMDA1MjQxMEMwMDBBNTY0MDAxNDk1OEUwMDA0MzAKLToxMDkwQzAwMDAyRTg0MDI0MDJFMDIwMjFBNTZFMDAxNjkxODUwMDNFQjIKLToxMDkwRDAwMEE1NjUwMDIwOTU4RDAwMDRBNTZEMDAyMkFENjAwMDI0REIKLToxMDkwRTAwMDkxODcwMDNGQTU2NzAwMDI5MTgzMDAzRTkxODkwMDNENzIKLToxMDkwRjAwMDAxMjM1MDIzMjU0NjAwMDFBMTY2MDAwMThGODIwMEFDQTgKLToxMDkxMDAwMDhGOTkwMEJDQUM1NzAwMDhBMzNGMDAwMDhGOEEwMEJDQjkKLToxMDkxMTAwMDhGOTgwMEI4OTU0RjAwMDI5NzBFMDAxMjI0MThGRkJGRDkKLToxMDkxMjAwMDAyMEY2ODI0MzFDNTNGRkYwMUE1MzgyNUE1NDcwMDAyN0QKLToxMDkxMzAwMDkxNEMwMDAyMjQwNUZGREYzMTg5MDAzRjM1MjMwMDQwQjgKLToxMDkxNDAwMEExNDMwMDAyOEY5OTAwQkM4Rjg2MDBEMDI0MDlGRkZGNDUKLToxMDkxNTAwMEFGMjAwMDA0OENDQjAwN0MyNDAzRkY4MEFGMkIwMDA4RTEKLToxMDkxNjAwMDkzMjIwMDBEM0MwQjgwMDAzMDVGMDA3RkEzM0YwMDBENzkKLToxMDkxNzAwMDhGOEUwMEJDOTFEMDAwMEQwMjE4NzgyNEExQ0YwMDBENzUKLToxMDkxODAwMDhGOEMwMEJDOTE4RDAwMEQwMUE1MzgyNEExODcwMDBEQTYKLToxMDkxOTAwMDhGODYwMEJDQUNDOTAwMTBBQ0Q2MDAxNDkwQ0EwMDE4NzEKLToxMDkxQTAwMDAxNDNCMDI1QTBENjAwMTg4RjhGMDBCQzhGOTgwMEI4NUYKLToxMDkxQjAwMDhERTIwMDE4MDA0QkY4MjQwM0U4QzgyNUFERjkwMDE4MkIKLToxMDkxQzAwMDkzMTAwMDNFQTFGMDAwMUM4RjhFMDBCODhGOEQwMEJDNjQKLToxMDkxRDAwMDhGODcwMEQwOTVDNTAwMDRBNUE1MDAxRTBFMDAwMjBEQzYKLToxMDkxRTAwMDhDRTUwMDg0OEY4NzAwRDAwMDAyNjE0MDAwMDIyMTAwREUKLToxMDkxRjAwMDkwRUEwMEJDMDE4NDQ4MjEwMDQwMjgyMTMxNTYwMDAyMzkKLToxMDkyMDAwMDEyQzAwMDAzMDJFOTMwMjEwMDAyQjA4MDAwRDYzMDIxRjQKLToxMDkyMTAwMDkwRUMwMEJDMzE4NDAwMDQxMDgwMDAwMzMyRUEwMDAzQUIKLToxMDkyMjAwMDAwMDVDMDgwMDBEODMwMjEyNDA5MDAwNDhGOTcwMEJDQkQKLToxMDkyMzAwMDAxMkExMDIzMzA1RjAwMDMwMERGQzgyMUFFRjkwMDA0Q0IKLToxMDkyNDAwMDBFMDAwRDE5QTYyNTAwMzg4RjkwMDBEMDAzQzAxODIxRkMKLToxMDkyNTAwMDE0NjAwMDAyMDA2MEIwMjEwMDAwOTAyMTU2QzAwMDg2MUEKLToxMDkyNjAwMDhGOTcwMEI4MDAxMjg4MkI5NjA5MDAxMDAyOTU1MDIzQTIKLToxMDkyNzAwMDNDMTQwMDIwMDJBOTEwMjFBNjAyMDAxMEFGNTQwMDMwQjcKLToxMDkyODAwMDMxNTRGRkZGMDAwMDAwMDA5NjEzMDAxMDk2MUYwMDEyREIKLToxMDkyOTAwMDEzRjMwMDExMDAwMDAwMDA4RTE3MDAwQzhFMEMwMDA4NjQKLToxMDkyQTAwMDAwMTVDOTgwMDJGOTQwMjEwMDE5MjdDMzAxMTlCMDJCMEMKLToxMDkyQjAwMDAxODQ3ODIxMDFGNjU4MjFBRTA4MDAwQ0FFMEIwMDA4OUQKLToxMDkyQzAwMDAwMTRBODJCMDIzNTgwMjQxMjAwRkU2QjhGOTAwMEQwNzIKLToxMDkyRDAwMDBBMDAwRjQyMDAwMDAwMDA5NjBCMDAxNDhFMDUwMDA0RTcKLToxMDkyRTAwMDMxNjNGRkZGMDAwMzcwQzAwMEFFMzgyMUFGNDcwMDNDODAKLToxMDkyRjAwMDhFMDYwMDA0OEY0RDAwM0MwMENERjAyMzFCQzAwMDM2Q0QKLToxMDkzMDAwMDAwMDAwMDAwOEUwODAwMDAyNTAyMDAwMTNDMTYwMDEwM0QKLToxMDkzMTAwMDM2Q0YwMDA4QUY0MjAwMzhBRjRGMDAzMDAwMDAwMDAwRTkKLToxMDkzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMDkzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDQwMDAwNUEKLToxMDkzNDAwMDMwOEMwMDIwMTE4MEZGRkQwMDAwMDAwMDhGNTkwNDAwQzgKLToxMDkzNTAwMDNDMTcwMDIwQUUxOTAwMDg4RjU1MDQwNEFFMTUwMDBDMTAKLToxMDkzNjAwMEFGNTcwMDMwMDAwMDAwMDAzQzA2MDgwMDhDQzYwMDQ0RTcKLToxMDkzNzAwMDI0MTgwMDAxMTBEODAwRDMwMDAwMDAwMDk2MDcwMDEyNDYKLToxMDkzODAwMDNDMDUwODAwOENBNTAwNDAwMEE3NjgyMUE2MEQwMDEyMkUKLToxMDkzOTAwMDk2MUUwMDE0MjdDOTAwMDFBNjA5MDAxNDk2MDIwMDE0QTUKLToxMDkzQTAwMDMwNDRGRkZGNTQ4NkZGQzcwMDE0QTgyQjMwQTVGRkZGRjEKLToxMDkzQjAwMDBFMDAwRjFEQTYwMDAwMTQzQzAzMDgwMDhDNjMwMDI0NUYKLToxMDkzQzAwMDk2MDUwMDEyMDA0MzcwMjMwMEFFMzAyM0E2MDYwMDEyNUIKLToxMDkzRDAwMDBBMDAxMTQ4MDAxNEE4MkI4RTAyMDAwMDBBMDAxMTVCM0QKLToxMDkzRTAwMDNDMTYwMDEwOTE1NjAwMDEyNDEwMDAwMTAwMTY3ODQyMkUKLToxMDkzRjAwMDE1RjAwMDFDOTdBODAwMUU4RDVGMDAxNDI0MTFDMDAwRkEKLToxMDk0MDAwMDMzRkUzRkZGMDExMUM4MjQzQzE4MDgwMDhGMTgwMDYwOEMKLToxMDk0MTAwMDAzM0VCODI1MzJFNTNGRkYwMEI4NTAyQjExNDAwMDExNDQKLToxMDk0MjAwMEE3QjcwMDFFM0MxMDA4MDA4RTEwMDA1ODhGOEYwMEIwQTgKLToxMDk0MzAwMDAwMDU3MTgwMjQwQ0ZGODAwMjBGNjgyMTAxQUU0ODIxRDUKLToxMDk0NDAwMDMxMjQwMDdGMDEyQzU4MjQwMDlBMjgyMTNDMDIwMDBFNzAKLToxMDk0NTAwMEFGNEIwMDJDMDBBMjMwMjE5MEM3MDAwRDM0RTMwMDA0NzQKLToxMDk0NjAwMEEwQzMwMDBEMEUwMDBEM0IwMDAwMDAwMDhGOTAwMEQwNDcKLToxMDk0NzAwMDI0MDMwMDAxOEY5NzAwQjgyNkI5MDAwMTAwMTlBQzAwNDEKLToxMDk0ODAwMDAyNDM5MDIzMDAxNUFDMDMyNkY4MDA0MDAyQjMyMDJBQzMKLToxMDk0OTAwMDAwMTI4ODJCMjQwQzAwMDEwMzAwNTAyMTAwOTExMDI0OUQKLToxMDk0QTAwMEFGOTgwMEI4MEEwMDBGNzBBRkFDMDAxMDk1NTYwMDEyQ0MKLToxMDk0QjAwMDhGODQwMEIwMzJDNUZGRkYwRTAwMENFRUE3QjYwMDE0N0IKLToxMDk0QzAwMDhGOTAwMEQwMEEwMDExQjQwMDAwMTgyMThENTkwMDM4ODcKLToxMDk0RDAwMEE2MjAwMDA4MjQwNDAwMDNBRTM5MDAwMDhENTcwMDM0OTQKLToxMDk0RTAwMEEyMjAwMDBBOEY5ODAwQjhBRTM3MDAwNDNDMEYwMDgwMUQKLToxMDk0RjAwMDkzMEMwMDNGQTIyNDAwMEM4RTI4MDAwQzNDMEJGRjlGMTUKLToxMDk1MDAwMEEyMkMwMDBCMDEwRjE4MjUzNTZFRkZGRjNDMDVGRkVGNjUKLToxMDk1MTAwMDhGOTcwMEI4MDA2RTY4MjQzNEE3RkZGRjAxQTczMDI0OUUKLToxMDk1MjAwMEFFMjYwMDBDOEVGRTAwMTQ5NkZGMDAxMjhGODIwMEIwNTMKLToxMDk1MzAwMEFFM0UwMDEwOEVGMDAwMTRBRTIwMDAxOEFFMjAwMDIwQzkKLToxMDk1NDAwMEFFMzAwMDE0QUUyMDAwMjQ4RUU5MDAxODMzRjAzRkZGNDcKLToxMDk1NTAwMDAwMTA1MTgwQUUyOTAwMjg4RUY5MDAwODAxNDJDMDIxNzgKLToxMDk1NjAwMDMzRUMwMDAxQUUzOTAwMzA4RUVCMDAwQzhGODUwMEFDN0YKLToxMDk1NzAwMDAwMTg3OUMyMDAwQzIzODAwMUU0NDAyMTI0MEUwMDAyNkYKLToxMDk1ODAwMEE2MjgwMDFDQTYyMDAwMzZBRTJCMDAyQ0EwQUUwMDAwQTIKLToxMDk1OTAwMDk3NjcwMDNDOEY4QTAwQUMzQzAzNDIwMDMwRURGRkZGMzAKLToxMDk1QTAwMDAxQTMzMDI1QUQ0NjAwMDQ4RjlFMDBCODI0MDIwMDAxQkYKLToxMDk1QjAwMDI0MDhDMDAwOEZEMTAwMzgyNDA2MDAzNEFENTEwMDE4QjMKLToxMDk1QzAwMDhGQzkwMDM0QUQ0OTAwMUNBRDQwMDAwQ0FENDAwMDEwMDcKLToxMDk1RDAwMEE1NDAwMDE0QTU0MDAwMTZBNTQwMDAyMEE1NDAwMDIyOEIKLToxMDk1RTAwMEFENDAwMDI0QTU1NjAwMDJBMTQyMDAwMThGOUYwMEFDQUYKLToxMDk1RjAwMDhGOTkwMEI4OEY5ODAwQkNBRkY2MDAwODkzMzcwMDAwMzEKLToxMDk2MDAwMEEzMTcwMDAwOEY4QzAwQjg4RjhGMDBCQzkxODQwMDAxREQKLToxMDk2MTAwMEExRTQwMDAxOEY4RDAwQkM5NUFCMDAwMjAxNjg3MDI0QUQKLToxMDk2MjAwMDAxRDAyODI1QTVBNTAwMDI5MUE3MDAwMjMwRTMwMDNGNDQKLToxMDk2MzAwMEExQTMwMDAyOEY4MzAwRDA4Rjg0MDBCQzkwNzEwMEJDNzYKLToxMDk2NDAwMDMyM0UwMDAyNTNDMDAwMDEyNDA2MDAzMEFDODYwMDA0MDQKLToxMDk2NTAwMDhDNkYwMDdDMjQwM0ZGQkZBQzhGMDAwODkwODgwMDBENDYKLToxMDk2NjAwMDMxMEIwMDdGQTA4QjAwMEQ4Rjg3MDBCQzkwRUUwMDBEQUEKLToxMDk2NzAwMDAxQzMyODI0QTBFNTAwMEQ4RjlFMDBCQzkzQ0QwMDBERjIKLToxMDk2ODAwMDM1QTYwMDIwQTNDNjAwMEQ4RjhBMDBCODhGOTEwMEJDQkMKLToxMDk2OTAwMDhENTAwMDIwQUUzMDAwMTA4RDQ5MDAyNEFFMjkwMDE0RkEKLToxMDk2QTAwMDhENDIwMDI4QUUyMjAwMTg4RDVGMDAyQ0FFM0YwMDFDQkEKLToxMDk2QjAwMDBFMDAwRDE5MDAwMDAwMDA4RjkwMDBEMDBBMDAxMTJFM0UKLToxMDk2QzAwMDAyQzAxODIxOTYwQTAwMTIzQzFGMDgwMDhGRkYwMDI0RDgKLToxMDk2RDAwMDAzRUE5ODIxQTYxMzAwMTIwQTAwMTE0ODAwMTRBODJCQ0YKLToxMDk2RTAwMEEwOEQwMDAxOEY4OTAwQUMyNDBDMDAwMUFEMkMwMDA4NzYKLToxMDk2RjAwMDBBMDAxMDQ4OEY4MzAwRDAyN0JERkZFMDNDMTgwODAwMDcKLToxMDk3MDAwMDhGMTgwMDUwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0RjkKLToxMDk3MTAwMEFGODQwMEIwOTM3MTAwNzQwMzA0NzgyMTI0MTBGRjgwOUIKLToxMDk3MjAwMDMxRUUwMDdGMzIyNTAwN0YwMUYwNTgyNDAxREE2ODIxRjQKLToxMDk3MzAwMDNDMEMwMDBBQTM4NTAwQzQwMUFDMjgyMUFGNEIwMDI0RDcKLToxMDk3NDAwMDk0QTkwMDEwOTc2ODAwMDY5MEE2MDA2MjAwODAzODIxNTYKLToxMDk3NTAwMDI0MDIwMDMwMDEwOTIwMjMzMEMzMDBGMEFGODUwMEQwN0YKLToxMDk3NjAwMDEwNjIwMDE5MzA5MEZGRkY5MEFFMDA2MjI0MERGRkYwRjAKLToxMDk3NzAwMDI0MEEwMDUwMDFBRTYwMjQzMThCMDBGRjExNkEwMDJGRDMKLToxMDk3ODAwMDAwMDAwMDAwMTYwMDAwMDcyNDFGMEMwMEFGNUYwMDI0M0IKLToxMDk3OTAwMDhGQjEwMDE0OEZCRjAwMTg4RkIwMDAxMDAzRTAwMDA4RDUKLToxMDk3QTAwMDI3QkQwMDIwMEUwMDBGMjMwMjAwMjAyMTI0MUYwQzAwRTMKLToxMDk3QjAwMEFGNUYwMDI0OEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwNkUKLToxMDk3QzAwMDAzRTAwMDA4MjdCRDAwMjA5NEEyMDBFMDk0QTQwMEUyN0EKLToxMDk3RDAwMDkwQkYwMTEzMDA4MjE4MjYzMDc5RkZGRjMzRTcwMEMwRTUKLToxMDk3RTAwMDE0RTAwMDA5MkYzMTAwMDExNjAwMDAzODAwMDAwMDAwQ0QKLToxMDk3RjAwMDU2MjBGRkU2MjQxRjBDMDAwRTAwMERERTAwMDAwMDAwQzYKLToxMDk4MDAwMDBBMDAxMjdBMjQxRjBDMDAxNjIwRkZERTAwMDAwMDAwNjAKLToxMDk4MTAwMDBFMDAwRERFMDAwMDAwMDAxNDQwRkZEQzI0MUYwQzAwRDEKLToxMDk4MjAwMDE2MDAwMDIyOEY4MzAwRDA5MDY5MDExMzMxMjIwMDNGN0YKLToxMDk4MzAwMEEwNjIwMTEzMEEwMDEyN0EyNDFGMEMwMDk0QUYwMEQ0MTYKLToxMDk4NDAwMDhGODYwMEQ0MDBFMDI4MjEyNDA0MDAwNTBFMDAwQzdGNDAKLToxMDk4NTAwMDMxRjBGRkZGMTQ0MDAwMDUyNDAzMDAwMzk3OTEwMEU2NTgKLToxMDk4NjAwMDAwMDAxODIxMjYyNUZGRkZBNzg1MDBFNjhGNTgwMUI4QzQKLToxMDk4NzAwMDA3MDBGRkZFM0MxOTYwMTNBRjQwMDE4MDI0MUYwQzAwNUQKLToxMDk4ODAwMEFGNTAwMTg0MDA3OTM4MjUzQzEwMTAwMEFGNDcwMTg4QTMKLToxMDk4OTAwMDhGQjEwMDE0QUY1MDAxQjhBRjVGMDAyNDhGQjAwMDEwM0IKLToxMDk4QTAwMDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMDBFMDAwRjIzMjMKLToxMDk4QjAwMDAyMDAyMDIxNTA0MEZGQjUyNDFGMEMwMDhGODMwMEQwRjAKLToxMDk4QzAwMDkwNjkwMTEzMEEwMDEyQTMzMTIyMDAzRjBFMDAwRjIzRkEKLToxMDk4RDAwMDAyMDAyMDIxMTQ0MEZGQUQyNDFGMEMwMDEyMjAwMDA3QkQKLToxMDk4RTAwMDhGODMwMEQwOTA2ODAxMTMzMTA2MDAzRjM0QzIwMDQwREUKLToxMDk4RjAwMEEwNjIwMTEzMEEwMDEyN0EyNDFGMEMwMDBFMDAwRERFNzQKLToxMDk5MDAwMDAwMDAwMDAwNTA0MEZGQTEyNDFGMEMwMDhGODMwMEQwRjYKLToxMDk5MTAwMDkwNjgwMTEzMzEwNjAwM0YwQTAwMTJEMzM0QzIwMDQwQTAKLToxMDk5MjAwMEFGOUIwMEM4MDNFMDAwMDhBRjgwMDBFQzMwODlGRkZGNjgKLToxMDk5MzAwMDAwMDk0MDQyMkQwMjAwNDEwMDA5Mjk4MDE0NDAwMDAyMjQKLToxMDk5NDAwMDAwMDk1MDQwMjQwODAwNDAwMDA4Nzk0MDAwMDhDMEMwQzkKLToxMDk5NTAwMDAxRjg1ODIxMjU2NzAxQTgwMEVGNzAyMTI1Q0MwMDdGNzAKLToxMDk5NjAwMDI0MERGRjgwMDE4RDE4MjQwMDY1MzAyMTAwQ0EyODIxQjQKLToxMDk5NzAwMDI1NjQwMDg4MjQwQTAwODgzQzAxMDgwMEFDMkEwMDRDQjkKLToxMDk5ODAwMDNDMDEwODAwQUMyNDAwNTBBRjg1MDBENDNDMDEwODAwMjUKLToxMDk5OTAwMEFDMjkwMDYwM0MwMTA4MDBBQzI4MDA2NDNDMDEwODAwRDAKLToxMDk5QTAwMEFDMjcwMDU0M0MwMTA4MDBBQzIzMDA1ODNDMDEwODAwREYKLToxMDk5QjAwMEFDMjYwMDVDMDNFMDAwMDgwMDAwMDAwMDMwODMwMEZGREMKLToxMDk5QzAwMDMwQzZGRkZGMzBFNDAwRkY4RjQyMDFCODA0NDBGRkZFQzUKLToxMDk5RDAwMDAwMDM0QzAwMDEyNDM4MjUzQzA4NjAwMDAwRTgyMDI1RTUKLToxMDk5RTAwMDNDMDMxMDAwQUY0NTAxODBBRjQ2MDE4NEFGNDQwMTg4QkQKLToxMDk5RjAwMDAzRTAwMDA4QUY0MzAxQjg4Rjg2MDAxQzNDMDk2MDEyRTkKLToxMDlBMDAwMDM1MjcwMDEwOENDQjAwMDQzQzBDNjAwRTM1ODUwMDEwMEYKLToxMDlBMTAwMDMxNkEwMDA2MkQ0ODAwMDFBQ0U4MDBDNDhDQzQwMDA0ODMKLToxMDlBMjAwMEFDQTQzMTgwOENDMjAwMDg5NEMzMDAwMkFDQTIzMTg0ODMKLToxMDlBMzAwMDAzRTAwMDA4QTc4MzAwRTQzQzAzMDgwMDhDNjMwMDUwQTcKLToxMDlBNDAwMDhGODQwMEU4OEY4NjAwMUMyNDAyRkY4MDAwNjRDMDIxMDAKLToxMDlBNTAwMDAzMDJDODI0QUY1OTAwMjg4Q0NEMDAwNDMzMDUwMDdGRDEKLToxMDlBNjAwMDAwQkE3ODIxM0MwRTAwMEMwMUVFMjgyMUFDQUQwMDU4NjQKLToxMDlBNzAwMDhDQzgwMDA4QUY4NTAwRDAzQzA3NjAxMkFDQTgwMDVDMjEKLToxMDlBODAwMDhDQ0MwMDEwMzRFODAwMTBBQ0FDMDAwQzhDQ0IwMDBDN0IKLToxMDlBOTAwMEFDQUIwMDA4OTRBQTAwMTQzQzAyMDgwMDhDNDIwMDQ0QkQKLToxMDlBQTAwMDI1NDkwMDAxQTRBOTAwMTQ5NEE0MDAxNDMwODNGRkZGRTkKLToxMDlBQjAwMDEwNjIwMDE3OEY4NDAwRDAzQzBBMDgwMDhENEEwMDQwRDUKLToxMDlBQzAwMEE0QUEwMDEyOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0RjkKLToxMDlBRDAwMEFDOEQwMDIwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0RjcKLToxMDlBRTAwMDI0MDYwMDAxQUM4QzAwMjg4RDBCMDBCQzUxNjYwMDFBQzYKLToxMDlBRjAwMDhEMDIwMEI0OEQwMjAwQjhBNDgyMDAzQTk0OEYwMDNBMUYKLToxMDlCMDAwMEE0OEYwMDNDOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGREEKLToxMDlCMTAwMDNDMDkwODAwOEQyOTAwMjRBNEEwMDAxNDhGODQwMEQwRTMKLToxMDlCMjAwMEE0QTkwMDEyOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0OTkKLToxMDlCMzAwMEFDOEQwMDIwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0OTYKLToxMDlCNDAwMDI0MDYwMDAxQUM4QzAwMjg4RDBCMDBCQzU1NjZGRkVBOTIKLToxMDlCNTAwMDhEMDIwMEI4OEQwMjAwQjRBNDgyMDAzQTk0OEYwMDNBQkUKLToxMDlCNjAwMEE0OEYwMDNDOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGN0EKLToxMDlCNzAwMDhGODYwMDFDM0MwQzA4MDA4RDhDMDA1MDI0MEJGRjgwNEQKLToxMDlCODAwMDhDQ0QwMDA4M0MwMzAwMEMwMDBENTFDMDAxOEE0MDIxMUYKLToxMDlCOTAwMDAxMEI0ODI0QUY4QTAwRThBRjQ5MDAyODkwQzcwMDA3QUUKLToxMDlCQTAwMDMxMDUwMDdGMDBCQTEwMjEwMDQzMjgyMTMwRTQwMDA0NzEKLToxMDlCQjAwMDEwODAwMDJGQUY4NTAwRDA5MENGMDAwNzMxRUUwMDA4NTUKLToxMDlCQzAwMDExQzAwMDNDMDAwMDAwMDA4Q0Q5MDAwQzhDQzQwMDE0QjMKLToxMDlCRDAwMDAzMjRDMDJCMTMwMDAwMjYwMDAwMDAwMDhDQzIwMDBDRTAKLToxMDlCRTAwMEFDQTIwMDY0OENDRDAwMTgyNDAyRkZGOEFDQUQwMDY4NzQKLToxMDlCRjAwMDhDQ0MwMDEwQUNBQzAwODA4Q0NCMDAwQ0FDQUIwMDg0RTcKLToxMDlDMDAwMDhDQ0EwMDFDQUNBQTAwN0M5MEE5MDBCQzAxMjI0MDI0OTQKLToxMDlDMTAwMEEwQTgwMEJDOTBDMzAwMDczMDY3MDAwODEwRTAwMDA0NTMKLToxMDlDMjAwMDhGODUwMEQwOTBBRjAwQkMzNUVFMDAwMUEwQUUwMEJDMjcKLToxMDlDMzAwMDkwRDkwMDA3MzMzODAwMDExMzAwMDAwRjhGODQwMEQwNDMKLToxMDlDNDAwMDI0MDcwMDIwOTA4MjAwQkMzNDQ5MDAwMkEwODkwMEJDOTcKLToxMDlDNTAwMDhGODQwMEQwOTA4ODAwNjIzMTAzMDBGMDE0NjcwMDA2MDIKLToxMDlDNjAwMDI0MEEwMDM0QUM4QTAwQzAwQTAwMTNCNTAwMDAwMDAwQ0EKLToxMDlDNzAwMDBBMDAxMzhGOENDMjAwMTQ5MENCMDAwNzMxNjYwMDAyREIKLToxMDlDODAwMDEwQzAwMDA1MDAwMDAwMDA5MDhEMDBCQzM1QUMwMDA0NDEKLToxMDlDOTAwMEEwOEMwMEJDOEY4NDAwRDA5MDk4MDExMzMzMEYwMDNGM0MKLToxMDlDQTAwMEEwOEYwMTEzOEY4RTAwRDA5NUM1MDBENDAzRTAwMDA4NkIKLToxMDlDQjAwMDMwQTJGRkZGQUNBMDAwNjQwQTAwMTM5MDAwMDAwMDAwNzcKLToxMDlDQzAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAxQ0FGQkYwMDI0OUQKLToxMDlDRDAwMEFGQjQwMDIwQUZCMjAwMThBRkIxMDAxNEFGQjMwMDFDOTYKLToxMDlDRTAwMDk2MTMwMDBFM0MwNzYwMEEzQzE0NjAwNjMyNjRGRkZGQzYKLToxMDlDRjAwMDM2OTMwMDEwMEUwMDEyRTIzNEY0MDQxMDhGODQwMEQ0NjYKLToxMDlEMDAwMDNDMTE2MDBFMEUwMDA5QkUzNjMxMDAxMDkyMEUwMDE1OTcKLToxMDlEMTAwMDNDMDcwODAwOENFNzAwNjAzQzEyNjAxMjMxQ0QwMDBGNTgKLToxMDlEMjAwMEEzOEQwMEYwOEUwRTAwMDQ4RTBEMDAwODk2MDgwMDEyMjAKLToxMDlEMzAwMDk2MUYwMDEwOTYxOTAwMUE5NjE4MDAxRTk2MEYwMDFDMDgKLToxMDlENDAwMDMxMENGRkZGMzNFQkZGRkYzMzJBRkZGRjMzMDlGRkZGMjcKLToxMDlENTAwMDMxRTZGRkZGM0MwMTA4MDBBQzJCMDA0MDNDMDEwODAwNEQKLToxMDlENjAwMEFDMkMwMDI0M0MwMTA4MDBBQzJBMDA0NEFFMjkzMTc4MTgKLToxMDlENzAwMEFFMjYzMTdDOTIwMjAwMTU5NjAzMDAxNjM2NTIwMDEwNzIKLToxMDlEODAwMDMwNDQwMEZGMzA2NUZGRkYzQzA2MDgwMDhDQzYwMDY0Q0QKLToxMDlEOTAwMEFFMjQzMTg4QUU0NTAwQjQ5MjA4MDAxNDk2MTkwMDE4MUMKLToxMDlEQTAwMDI0MUYwMDAxMDExRkMwMDQzMzJGRkZGRjNDMDUwODAwRTIKLToxMDlEQjAwMDhDQTUwMDU4QUU1ODAwQjhBRTRGMDBCQzkyMEMwMDE0RjEKLToxMDlEQzAwMEFGOEUwMEQ4QUY4RDAwREMzMThCMDBGRkFFNEIwMEMwRjIKLToxMDlERDAwMDkyMEEwMDE1QUU2NzAwNDhBRTY2MDA0QzMxNDkwMEZGOUMKLToxMDlERTAwMEFFNDkwMEM4QUU2NTAwN0MzQzAzMDgwMDhDNjMwMDUwOUYKLToxMDlERjAwMDNDMDQwODAwOEM4NDAwNEMzQzA4MDgwMDhEMDgwMDU0OEEKLToxMDlFMDAwMDNDMDIwODAwOEM0MjAwNUM4RkJGMDAyNEFFNjMwMDgwREYKLToxMDlFMTAwMDhGQjAwMDEwQUU4MzAwNzQ4RkIzMDAxQ0FFMjIzMTlDNTMKLToxMDlFMjAwMEFFNDIwMERDQUUyNzMxQTBBRTI2MzFBNEFFMjQzMThDODgKLToxMDlFMzAwMEFFMjMzMTkwQUUyODMxOTRBRTI1MzE5OEFFODcwMDUwRDQKLToxMDlFNDAwMEFFODYwMDU0QUU4NTAwNzA4RkIxMDAxNEFFNDcwMEUwQkUKLToxMDlFNTAwMEFFNDYwMEU0QUU0NDAwQ0NBRTQzMDBEMEFFNDgwMEQ0RTEKLToxMDlFNjAwMEFFNDUwMEQ4OEZCNDAwMjA4RkIyMDAxODAzRTAwMDA4ODAKLToxMDlFNzAwMDI3QkQwMDI4MjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MTkKLToxMDlFODAwMDI0MTEwMDAxMEUwMDA4NjhBRkIwMDAxMDEwNTEwMDA1NDkKLToxMDlFOTAwMDk3ODQwMEU2OTc4MzAwQ0MwMDgzMTAyQjE0NDAwMDA4QzEKLToxMDlFQTAwMDhGODUwMEQ0MjQwNzAwMDI4RkJGMDAxODhGQjEwMDE0RTMKLToxMDlFQjAwMDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODI3QkQwMDIwNTMKLToxMDlFQzAwMDBFMDAwQzlEMjQwNDAwMDVBRjgyMDBFODEwNDBGRkY2NTAKLToxMDlFRDAwMDI0MDcwMDAyMEUwMDA4NkM4RjkwMDAxQzk3OUYwMEU2N0MKLToxMDlFRTAwMDhGOTkwMEU4OEY4RDAwQzgyN0VGMDAwMTI0MEUwMDUwRTUKLToxMDlFRjAwMEFGNTkwMDIwQTc4RjAwRTZBMUFFMDAwMDNDMEMwODAwN0YKLToxMDlGMDAwMDhEOEMwMDY0OEY4NjAwQzgyNDBBODAwMDAwMEM1RTAwREYKLToxMDlGMTAwMEFDQ0IwMDc0QTRDMDAwMDY5NEM5MDAwQTI0MUZGRjgwQzMKLToxMDlGMjAwMDNDMEQwMDBDMDEyQUMwMjRBNEQ4MDAwQTkwQzgwMDBBRTUKLToxMDlGMzAwMDI0MTgyMDAwMDExRjE4MjVBMEMzMDAwQThGODcwMEM4MUQKLToxMDlGNDAwMEEwRTAwMDc4OEY4NTAwQzgwMDAwMzgyMUEwQTAwMDgzMjEKLToxMDlGNTAwMDNDMDIwODAwOEM0MjAwNTA4Rjg0MDBFODAwNDQ3ODIxQzUKLToxMDlGNjAwMDAxRkZDODI0QUY1OTAwMjg5NjBCMDAwMjMxRUUwMDdGOTQKLToxMDlGNzAwMDAxREE2MDIxMDE4RDMwMjFBNENCMDBENDk2MEEwMDAyQzEKLToxMDlGODAwMEFGODYwMEQwM0MwRTAwMDQyNTQ5MjQwMUE0QzkwMEU2OTgKLToxMDlGOTAwMDhFMDgwMDA0QUNDODAwMDQ4RTAzMDAwOEFDQzMwMDAwQTcKLToxMDlGQTAwMEE0QzAwMDEwQTRDMDAwMTRBMEMwMDBEMDhGODUwMEQwQjEKLToxMDlGQjAwMDI0MDNGRkJGQTBBMDAwRDEzQzA0MDgwMDhDODQwMDY0RUYKLToxMDlGQzAwMDhGODIwMEQwQTA0NDAwRDI4RTFGMDAwQzhGOEEwMEQwNTgKLToxMDlGRDAwMDk3OEYwMEU0QUQ1RjAwMUM4RTE5MDAxMDI0MTAwMDMwMzQKLToxMDlGRTAwMEFENTkwMDE4QTU0MDAwMzBBNTUxMDA1NEE1NTEwMDU2QTgKLToxMDlGRjAwMEE1NEYwMDE2QUQ0RTAwNjhBRDU4MDA4MEFENTgwMDg0RTYKLToxMEEwMDAwMDkxNEQwMDYyMzFBQzAwMEYzNThCMDAxMEExNEIwMDYyMDYKLToxMEEwMTAwMDhGODYwMEQwOTBDOTAwNjMzMTI4MDA3RkEwQzgwMDYzRkMKLToxMEEwMjAwMDhGODQwMEQwMjQwNkZGRkY5MDg1MDA2MzAwQTMxMDI0RDYKLToxMEEwMzAwMEEwODIwMDYzOEY5MTAwRDAwMEUwMTAyMTkyM0YwMEJDMEQKLToxMEEwNDAwMDM3RjkwMDAxQTIzOTAwQkM4RjhBMDBEMDkzOEYwMEYwNEQKLToxMEEwNTAwMEFENTgwMDY0QUQ1MDAwQzA5MTRFMDBEMzAwMEY2OTAwQjAKLToxMEEwNjAwMDMxQ0MwMDBGMDE4RDU4MjVBMTRCMDBEMzhGODUwMEQwMzYKLToxMEEwNzAwMDhGODkwMERDQUNBOTAwRTg4Rjg4MDBEODhGQkYwMDE4NUEKLToxMEEwODAwMDhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyMEFDQTgwMEVDRTkKLToxMEEwOTAwMEE0QTYwMEQ2QTRBMDAwRTBBNEEwMDBFMjAzRTAwMDA4NkIKLToxMEEwQTAwMDAwMDAwMDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDFDNDMKLToxMEEwQjAwMEFGQjEwMDE0QUZCRjAwMTg4RTE5MDAwNDNDMTgwODAwOUYKLToxMEEwQzAwMDhGMTgwMDUwMjQwRkZGODAwMDE5ODlDMDAyMzg3MDIxQkEKLToxMEEwRDAwMDMxQ0QwMDdGMDFDRjYwMjQwMUJBNTAyMTNDMEIwMDBDMzAKLToxMEEwRTAwMEFGNEMwMDI4MDE0QjQwMjE5NTA5MDBENDk1MDQwMEQ2QkYKLToxMEEwRjAwMDhFMDcwMDA0MzEzMUZGRkZBRjg4MDBEMDBFMDAwOTM2MTMKLToxMEExMDAwMDAwMDcyMUMwOEUwNjAwMDQ4RjgzMDBDODAwMDYyOUMwMDYKLToxMEExMTAwMEFGNDUwMDIwOTA2NDAwM0UzMDgyMDA0MDE0NDAwMDA2QUQKLToxMEExMjAwMDhGODQwMEQwMzQxRkZGRkY5NDgzMDBENjMwNjJGRkZGN0UKLToxMEExMzAwMDE0NUYwMDA0MDAwMDAwMDA5NDg0MDBENjBFMDAwOENCRDkKLToxMEExNDAwMDMwODRGRkZGOEUwNTAwMDQwMjIwMzAyMThGQkYwMDE4RUQKLToxMEExNTAwMDhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjAwMDAzODIxQjkKLToxMEExNjAwMDAwMDUyOUMwMEEwMDEzMDYyN0JEMDAyMDI3QkRGRkUwMTcKLToxMEExNzAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4QjcKLToxMEExODAwMDEyMjAwMDFEMDAwMDgwMjE4Rjg2MDAxQzhDQzUwMDAwNUQKLToxMEExOTAwMDI0MDMwMDA2MDAwNTNGMDIwMDA1MTQwMjMwRTQwMDA3MTYKLToxMEExQTAwMDE0ODMwMDE1MzA0NTAwRkYyQ0E4MDAwNjExMDAwMDRENTcKLToxMEExQjAwMDAwMDU1ODgwM0MwQzA4MDAyNThDNUEwQzAxNkM1MDIxN0QKLToxMEExQzAwMDhENDkwMDAwMDEyMDAwMDgwMDAwMDAwMDhGOEUwMEVDODcKLToxMEExRDAwMDI0MEQwMDAxMTFDRDAwNTkwMDAwMDAwMDI2MEIwMDAxRTQKLToxMEExRTAwMDMxNzBGRkZGMjRDQTAwMjAwMjExMjAyQjAxNDAzMDIxRDIKLToxMEExRjAwMDE0ODBGRkU2QUY4QTAwMUMwMjAwMTAyMThGQkYwMDE4RjgKLToxMEEyMDAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwQkMKLToxMEEyMTAwMDkzODcwMENFMTRFMDAwMzgyNDA0MDAxNDBFMDAxM0M3MDYKLToxMEEyMjAwMDAwMDAwMDAwOEY4NjAwMUMyNDAyMDAwMTBBMDAxNTBFQTkKLToxMEEyMzAwMEFGODIwMEVDOEY4OTAwRUMyNDA4MDAwMjExMjgwMDNCNUIKLToxMEEyNDAwMDI0MDQwMDEzMDAwMDI4MjEwMDAwMzAyMTI0MDcwMDAxMEQKLToxMEEyNTAwMDBFMDAxMzA2MDAwMDAwMDAwQTAwMTUwRThGODYwMDFDNzkKLToxMEEyNjAwMDhGODcwMEVDMjQwNTAwMDIxNEU1RkZGNjI0MDQwMDEyOTkKLToxMEEyNzAwMDBFMDAxMzczMDAwMDAwMDA4Rjg1MDBFODAwNDAzMDIxQkQKLToxMEEyODAwMDI0MDQwMDEyMEUwMDEzMDYwMDAwMzgyMTBBMDAxNTBFRTcKLToxMEEyOTAwMDhGODYwMDFDOEY4MzAwRUMyNDFGMDAwMzE0N0ZGRkQwRTcKLToxMEEyQTAwMDI2MEIwMDAxMEUwMDEzMjUwMDAwMDAwMDhGODUwMEU4M0EKLToxMEEyQjAwMDAwNDAzMDIxMjQwMjAwMDIyNDA0MDAxMDAwMDAzODIxNTQKLToxMEEyQzAwMEFGODIwMEVDMEUwMDEzMDYwMDAwMDAwMDBBMDAxNTBFMUQKLToxMEEyRDAwMDhGODYwMDFDOEY4RjAwRUMyNDA2MDAwMjExRTYwMDBCMTUKLToxMEEyRTAwMDAwMDAwMDAwMjQwNDAwMTAwMDAwMjgyMTAwMDAzMDIxOUMKLToxMEEyRjAwMDBBMDAxNTJCMjQwNzAwMDEwMDAwMjgyMTBFMDAxMzA2NzgKLToxMEEzMDAwMDAwMDAzMDIxMEEwMDE1MEU4Rjg2MDAxQzBFMDAxNDM0NDgKLToxMEEzMTAwMDAwMDAwMDAwMTQ0MDAwMTI4Rjk5MDAxQzhGODYwMDFDNjIKLToxMEEzMjAwMDI0MDIwMDAzMEEwMDE1MEVBRjgyMDBFQzBFMDAxNEMwRDgKLToxMEEzMzAwMDAwMDAwMDAwMEEwMDE1MEU4Rjg2MDAxQzBFMDAxMzE1ODkKLToxMEEzNDAwMDAwMDAwMDAwMjQwMjAwMDIyNDA0MDAxNDAwMDAyODIxNjAKLToxMEEzNTAwMDAwMDAzMDIxMDAwMDM4MjEwQTAwMTU0OEFGODIwMEVDQ0YKLToxMEEzNjAwMDAwNDAzODIxMjQwNDAwMTA5NzM4MDAwMjAwMDAyODIxMDIKLToxMEEzNzAwMDBFMDAxMzA2MzMwNkZGRkYwQTAwMTUwRThGODYwMDFDMjEKLToxMEEzODAwMDhGODQwMEM4M0MwNzdGRkYzNEU2RkZGRjhDODUwMDc0OTQKLToxMEEzOTAwMDI0MDIwMDAxMDBBNjE4MjRBQzgzMDA3NDAzRTAwMDA4MjYKLToxMEEzQTAwMEEwODIwMDA1MTBBMDAwMzYyQ0EyMDA4MDI3NEEwNDAwREQKLToxMEEzQjAwMDNDMEIwMDA1MjQwOTAwODAxMDQwMDAwNzI0MDgwMDgwQTEKLToxMEEzQzAwMDMwQTYwMDBGMDBDNTQwMjEyRDAzMDA4MTE0NjAwMDAyNUIKLToxMEEzRDAwMDAwQTA0ODIxMjQwODAwODBBRjRCMDAzMDAwMDAwMDAwOUUKLToxMEEzRTAwMDAwMDAwMDAwMDAwMDAwMDAxMTAwMDAwOTAwMDAzODIxRkEKLToxMEEzRjAwMDAxNDAzMDIxOEM4RDAwMDAyNEU3MDAwNDAwRTg2MDJCMzAKLToxMEE0MDAwMEFDQ0QwMDAwMjQ4NDAwMDQxNTgwRkZGQTI0QzYwMDA0QUIKLToxMEE0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMEUwMDA2RUMKLToxMEE0MjAwMDAxMEUzODI1QUY0NzAwMzAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEE0MzAwMDAwMDAwMDAwOEY0RjAwMDAzMUU4MDAxMDExMDBGRkZEMDgKLToxMEE0NDAwMDAwMDAwMDAwOEY0MjAwM0M4RjQzMDAzQzAwNDlDODIxQkYKLToxMEE0NTAwMDAzMjNDMDJCMTMwMDAwMDQwMDAwMDAwMDhGNEMwMDM4QzEKLToxMEE0NjAwMDI1ODYwMDAxQUY0NjAwMzg4RjQ3MDAzQzAwQTkyODIzMEQKLToxMEE0NzAwMDAwRTk2ODIxQUY0RDAwM0MxNEEwRkZDRTJDQTIwMDgwNjMKLToxMEE0ODAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZEMDNDMDIwMDAyRUUKLToxMEE0OTAwMEFGQjEwMDE0M0MxMTAwMENBRjQ1MDAzOEFGQjMwMDFDNDUKLToxMEE0QTAwMEFGNDYwMDNDMDA4MDk4MjFBRjQyMDAzMDI0MDUwMDg4NzAKLToxMEE0QjAwMEFGNDQwMDI4MDM1MTIwMjFBRkJGMDAyOEFGQjUwMDI0Q0UKLToxMEE0QzAwMEFGQjQwMDIwQUZCMjAwMTgwRTAwMTU4MEFGQjAwMDEwN0UKLToxMEE0RDAwMDNDMUYwODAwOEZGRjAwNEMzQzE4MDgwMDhGMTgwMDY0RDgKLToxMEE0RTAwMDI0MTBGRjgwMDNGM0E4MjEzMkI5MDA3RjAyQjA3ODI0NDIKLToxMEE0RjAwMDAwMThBMEMwMDMzQTcwMjEwMDE4OTE0MDAxRDEyMDIxMUEKLToxMEE1MDAwMEFGNEYwMDI4MEUwMDE1ODAwMjU0MjgyMTNDMEQwODAwOTIKLToxMEE1MTAwMDhEQUQwMDUwMjQwNTAxMjAwMUIzNTgyMTMxNkMwMDdGMUUKLToxMEE1MjAwMDAxNzA1MDI0MDE5QTQ4MjEwMTMxMjAyMTBFMDAxNTgwMkMKLToxMEE1MzAwMEFGNEEwMDI4M0MwODA4MDA4RDA4MDA1NDNDMDUwODAwN0MKLToxMEE1NDAwMDhDQTUwMDY0MDExMzM4MjEzMEU2MDA3RjAwRjAxODI0NDgKLToxMEE1NTAwMDAwREEyMDIxMDA5MTIwMjFBRjQzMDAyODBFMDAxNTgwNTEKLToxMEE1NjAwMDAwMDUyOTQwM0MwMjA4MDA4QzQyMDA1ODNDMTAwODAwQkQKLToxMEE1NzAwMDhFMTAwMDYwMTIwMDAwMUMwMDUzODgyMTI0MTVGRjgwRkIKLToxMEE1ODAwMDBBMDAxNjAzM0MxNDAwMEMzMjI2MDA3RjAyMzUxODI0MDIKLToxMEE1OTAwMDAwREEyMDIxMDI0MDI4MjFBRjQzMDAyODAwOTQyMDIxMjYKLToxMEE1QTAwMDBFMDAxNTgwMjYxMEZGQzAxMjAwMDAwRjAyMzI4ODIxMTUKLToxMEE1QjAwMDJFMDUwMDQxMTBBMEZGRjQyNDEyMTAwMDMyMjYwMDdGNjcKLToxMEE1QzAwMDAwMTA5MTgwMDIzNTE4MjQwMERBMjAyMTAyNDAyODIxNTEKLToxMEE1RDAwMEFGNDMwMDI4MDA5NDIwMjEwRTAwMTU4MDAwMDA4MDIxNDgKLToxMEE1RTAwMDE2MDBGRkYzMDIzMjg4MjEzQzBCMDgwMDhENkIwMDVDRTMKLToxMEE1RjAwMDI0MEFGRjgwMjQwNTAwMDIwMTczNDAyMTAxMEE0ODI0MzcKLToxMEE2MDAwMEFGNDkwMDI4M0MwNDA4MDA5NDg0MDA2MjMxMTAwMDdGQTgKLToxMEE2MTAwMDAyMUE4ODIxM0MwNzAwMEMwRTAwMENDRDAyMjc5ODIxNUQKLToxMEE2MjAwMDAwNDAyODIxMDI2MDIwMjE4RkJGMDAyODhGQjUwMDI0MjAKLToxMEE2MzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0QUMKLToxMEE2NDAwMDhGQjAwMDEwMEEwMDE1ODAyN0JEMDAzMDhGODMwMDFDREEKLToxMEE2NTAwMDhDNjIwMDA0MTA0MDAwMDMwMDAwMDAwMDAzRTAwMDA4Q0EKLToxMEE2NjAwMDAwMDAwMDAwOEM2NDAwMTA4QzY1MDAwODBBMDAxNUI5MTkKLTowNEE2NzAwMDhDNjYwMDBDRTgKLTowQ0E2NzQwMDAwMDAwMDAwMDAwMDAwMUIwMDAwMDAwRkIwCi06MTBBNjgwMDAwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDYwMDAwMDAwNUFECi06MTBBNjkwMDAwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwM0FBCi06MTBBNkEwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMzlFCi06MTBBNkIwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkyCi06MTBBNkMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjgyCi06MTBBNkQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjcyCi06MTBBNkUwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMTYzCi06MDhBNkYwMDAwMDAwMDAwMTAwMDAwMDAxNjAKLTowOEE2RjgwMDA4MDAwRjU4MDgwMDBEQjAyNgotOjEwQTcwMDAwMDgwMDBGRUMwODAwMTA5NDA4MDAwRjgwMDgwMDBGQzAyQwotOjEwQTcxMDAwMDgwMDExQ0MwODAwMERDQzA4MDAxMUYwMDgwMDBFMUMzOAotOjEwQTcyMDAwMDgwMDE2MzAwODAwMTVEODA4MDAwRENDMDgwMDBEQ0MyNAotOjEwQTczMDAwMDgwMDBEQ0MwODAwMTI3QzA4MDAxMjdDMDgwMDBEQ0MyQgotOjEwQTc0MDAwMDgwMDBEQ0MwODAwMTU3QzA4MDAwRENDMDgwMDBEQ0NDRAotOjEwQTc1MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxM0VDMDgwMDBEQ0M0RgotOjEwQTc2MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M2NQotOjEwQTc3MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M1NQotOjEwQTc4MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M0NQotOjEwQTc5MDAwMDgwMDBEQ0MwODAwMEZFMDA4MDAwRENDMDgwMDBEQ0MxRgotOjEwQTdBMDAwMDgwMDE1MkMwODAwMERDQzA4MDAwRENDMDgwMDBEQ0NCRAotOjEwQTdCMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MxNQotOjEwQTdDMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwNQotOjEwQTdEMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0NGNQotOjEwQTdFMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxNDU4MDgwMDBEQ0M1MgotOjEwQTdGMDAwMDgwMDBEQ0MwODAwMTM3MDA4MDAxMkUwMDgwMDJFQTAxRAotOjEwQTgwMDAwMDgwMDJFQTgwODAwMkU3MDA4MDAyRTdDMDgwMDJFODg1NAotOjEwQTgxMDAwMDgwMDJFOTQwODAwNDZDMDA4MDAzRjBDMDgwMDQ2NDA3RgotOjEwQTgyMDAwMDgwMDQ2QzAwODAwNDZDMDA4MDA0NEMwMDgwMDQ2QzBGMgotOjEwQTgzMDAwMDgwMDQ3MDgwODAwNTUzMDA4MDA1NEYwMDgwMDU0QkNEMAotOjBDQTg0MDAwMDgwMDU0OTAwODAwNTQ2QzA4MDA1NDI4RDQKLTowNEE4NEMwMDBBMDAwQzc2N0MKLToxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM1NUMKLToxMEE4NjAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMzAwMDAwMDAwODcKLToxMEE4NzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEQ4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEQ4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEQ4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEQ4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEQ4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEQ5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEQ5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEQ5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEQ5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEQ5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEQ5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEQ5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEQ5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEQ5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEQ5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEQ5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEQ5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEQ5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMERBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMERBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMERBMjAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwRTMKLToxMERBMzAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMDI0NDI3MTQwNkYKLToxMERBNDAwMDNDMDMwODAwMjQ2Mzc1RTBBQzQwMDAwMDAwNDMyMDJCMzkKLToxMERBNTAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ3RkZDRkMKLToxMERBNjAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMzFEODNDMUMwODAwMEYKLToxMERBNzAwMDI3OUM3MTQwMEUwMDEwRUQwMDAwMDAwMDAwMDAwMDBEMUEKLToxMERBODAwMDMwQTVGRkZGMzBDNjAwRkYyNzQzMDE4MDhGNDIwMUI4NTkKLToxMERBOTAwMDA0NDBGRkZFMjQwMjAwMDJBQzY0MDAwMEE0NjUwMDA4RkMKLToxMERBQTAwMEEwNjYwMDBBQTA2MjAwMEIzQzAyMTAwMEFDNjcwMDE4RTAKLToxMERBQjAwMDAzRTAwMDA4QUY0MjAxQjgzQzAzNjAwMDhDNjI0RkY4RkQKLToxMERBQzAwMDA0NDBGRkZFM0MwMjAyMDBBQzY0NEZDMEFDNjI0RkM0OTUKLToxMERBRDAwMDNDMDIxMDAwMDNFMDAwMDhBQzYyNEZGODk0ODIwMDBDOTYKLToxMERBRTAwMDI0ODYwMDE0MDBBMDM4MjEwMDAyMTMwMjAwMDIxMDgwRDYKLToxMERBRjAwMDAwODI0MDIxMDBDODEwMkIxMDQwMDA1NzAwMDAwMDAwOTkKLToxMERCMDAwMDkwQzMwMDAwMkM2MjAwMDk1MDQwMDA1MTkwQzIwMDAxRjcKLToxMERCMTAwMDAwMDMxMDgwM0MwMzA4MDAyNDYzNzBGMDAwNDMxMDIxRDAKLToxMERCMjAwMDhDNDIwMDAwMDA0MDAwMDgwMDAwMDAwMDkwQzMwMDAxOEIKLToxMERCMzAwMDI0MDIwMDBBMTQ2MjAwM0EwMDAwMDAwMDAxMDYxMDIzQ0IKLToxMERCNDAwMDJDNDIwMDBBMTQ0MDAwMzYyNEM2MDAwMjhDRTIwMDAwNzkKLToxMERCNTAwMDM0NDIwMTAwQUNFMjAwMDA5MEMyMDAwMDkwQzMwMDAxMUEKLToxMERCNjAwMDkwQzQwMDAyOTBDNTAwMDMwMDAzMUMwMDAwMDIxNjAwRDAKLToxMERCNzAwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNTAwNDUxMDI1MTQKLToxMERCODAwMDI0QzYwMDA0QUNFMjAwMDQ5MEMyMDAwMDkwQzMwMDAxNkYKLToxMERCOTAwMDkwQzQwMDAyOTBDNTAwMDMwMDAyMTYwMDAwMDMxQzAwQTAKLToxMERCQTAwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNTAwNDUxMDI1RTQKLToxMERCQjAwMDI0QzYwMDA0MEEwMDBDQUFBQ0UyMDAwODkwQzMwMDAxQ0QKLToxMERCQzAwMDI0MDIwMDA0MTQ2MjAwMTYyNEM2MDAwMjkwQzIwMDAwNjEKLToxMERCRDAwMDkwQzQwMDAxOENFMzAwMDAwMDAyMTIwMDAwNDQxMDI1RjQKLToxMERCRTAwMDM0NjMwMDA0MjRDNjAwMDJBQ0UyMDAwQzBBMDAwQ0FBNTQKLToxMERCRjAwMEFDRTMwMDAwOTBDMzAwMDEyNDAyMDAwMzE0NjIwMDA4OUIKLToxMERDMDAwMDI0QzYwMDAyOENFMjAwMDA5MEMzMDAwMDI0QzYwMDAxN0MKLToxMERDMTAwMDM0NDIwMDA4QTBFMzAwMTAwQTAwMENBQUFDRTIwMDAwQTUKLToxMERDMjAwMDAzRTAwMDA4MjQwMjAwMDE5MEMzMDAwMTI0MDIwMDAyNjYKLToxMERDMzAwMDEwNjIwMDAyMjRDNDAwMDIwMTAwMjAyMTBBMDAwQ0FBODQKLToxMERDNDAwMDAwODAzMDIxMEEwMDBDQUEyNEM2MDAwMTkwQzIwMDAxMDUKLToxMERDNTAwMDBBMDAwQ0FBMDBDMjMwMjEwM0UwMDAwODAwMDAxMDIxRDUKLToxMERDNjAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBFMDAxMUZFREIKLToxMERDNzAwMDAwODA4MDIxOTM2MjAwMDUyNDAzRkZGRTAyMDAyMDIxMjIKLToxMERDODAwMDAwNDMxMDI0OEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDA1NjIKLToxMERDOTAwMDBBMDAxMjA3MjdCRDAwMTgyN0JERkZFOEFGQjAwMDEwMkIKLToxMERDQTAwMEFGQkYwMDE0MEUwMDBGMTgwMDgwODAyMTkzNjIwMDAwQTcKLToxMERDQjAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMTAwRkEKLToxMERDQzAwMEFGNDIwMTgwMEEwMDBEMjIwMjAwMjAyMUFGNDAwMTgwRjYKLToxMERDRDAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwRjc5QkUKLToxMERDRTAwMDI3QkQwMDE4MjdCREZGODBBRkJFMDA3OEFGQjcwMDc0MTYKLToxMERDRjAwMEFGQjMwMDY0QUZCRjAwN0NBRkI2MDA3MEFGQjUwMDZDQ0YKLToxMEREMDAwMEFGQjQwMDY4QUZCMjAwNjBBRkIxMDA1Q0FGQjAwMDU4MTQKLToxMEREMTAwMDhGNTAwMTI4OTM2MzAwM0Y5MzYyMDAwNTAwMDBGMDIxQkIKLToxMEREMjAwMDMwNzMwMEZGMDAwMjEwMjczMDQyMDAwMTAwMDBCODIxQ0MKLToxMEREMzAwMDE0NDAwMDY2QUZBMDAwNTA5MzQyMDExNjkzNDMwMTEyQjUKLToxMERENDAwMDMwNDIwMEZGMzA2MzAwRkYwMzQyMjAyMTAzNDMxMDIxRDMKLToxMERENTAwMDI0NDU0MDAwOEY4MjAwMTgxMDQwMDAxODI0OTE0MDAwOTQKLToxMERENjAwMDhGNDIwMTA0M0MwMzAwMDEwMDQzMTAyNDEwNDAwMDEzQzMKLToxMERENzAwMDAwMDAwMDAwOENBMzAwMEM4RjYyMDAzMDE0NjIwMUI1MUIKLToxMEREODAwMDI0MDIwMDAxOENBMzAwMTA4RjYyMDAyQzE0NjIwMUIxRTgKLToxMEREOTAwMDI0MDIwMDAxOTc2MjAwM0E5NDgzNDAwMDMwNDJGRkZGNjIKLToxMEREQTAwMDE0NjIwMUFDMjQwMjAwMDE5NzYyMDAzODk2MjMwMDAyM0QKLToxMEREQjAwMDMwNDJGRkZGMTQ2MjAxQTcyNDAyMDAwMTkzNjIwMDAwQjkKLToxMEREQzAwMDMwNDMwMEZGMjQwMjAwMjAxMDYyMDAwNTI0MDIwMDUwQUUKLToxMERERDAwMDEwNjIwMDA2MDAwMDAwMDAwQTAwMEQ2QzAwMDAwMDAwNDgKLToxMERERTAwMDAwMDAwMDBEMEEwMDBENzVBRkEwMDAzMDNDMUUwODAwQjkKLToxMERERjAwMDI3REU3MUEwMEEwMDBENzVBRkEwMDAzMDNDMDIwODAwQkMKLToxMERFMDAwMDhDNDIwMERDMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMERDMTIKLToxMERFMTAwMDBFMDAxMkM4MDAwMDAwMDAwQTAwMEYwMzhGQkYwMDdDMzQKLToxMERFMjAwMDhGNDIwMTA0M0MwMzAwMjA5MjM0MDAwRDAwNDMxMDI0NzMKLToxMERFMzAwMDAwMDIyMDJCMDAwNDIxNDBBRkE0MDAzMDhGNDMwMTA0RDYKLToxMERFNDAwMDNDMDIwMDQwMDA2MjE4MjQxNDYwMDAwMjM0ODcwMDQwNDUKLToxMERFNTAwMDAwODAzODIxMzI4MjAwMjBBRkE3MDAzMDE0NDAwMDAyMzkKLToxMERFNjAwMDM0RTYwMDgwMDBFMDMwMjExMEMwMDAwQkFGQTYwMDMwODcKLToxMERFNzAwMDkzQzUwMDA4OEY2NzAwNEMwMjAwMjAyMTAwMDUyQjAwOEQKLToxMERFODAwMDM0QTUwMDgxMzBBNUYwODEwRTAwMEM4RDMwQzYwMEZGNTYKLToxMERFOTAwMDBBMDAwRjAwMDAwMDAwMDA5MzYyMDAzRTMwNDIwMDQwODQKLToxMERFQTAwMDEwNDAwMDBFMjQwMjAwMDQ1NjYyMDAwNjI0MDIwMDEyRjQKLToxMERFQjAwMDAyMDAyMDIxMEUwMDEzRDYwMjIwMzAyMTBBMDAwRjAzOTkKLToxMERFQzAwMDhGQkYwMDdDMTY2MjAwMDUwMDAwMDAwMDBFMDAwRDEzREQKLToxMERFRDAwMDAwMDAyMDIxMEEwMDBGMDM4RkJGMDA3Qzk3NDMwMTFBMjYKLToxMERFRTAwMDk2MjQwMDBFOTM2MjAwMzUzMjg1MDAwNDMwNzZGRkZGRTEKLToxMERFRjAwMDAwNDQyMDA0QUZBNDAwNTQ4RTMyMDAwNDEwQTAwMDE1OEEKLToxMERGMDAwMDhFMzUwMDA4OTM2MjAwM0UzMDQyMDA0MDEwNDAwMDA3MEEKLToxMERGMTAwMDAwMDAwMDAwMEUwMDEzMTgwMjQwMjAyMTEwNDAwMDBERTgKLToxMERGMjAwMDAwMDAwMDAwMEEwMDBGMDAwMDAwMDAwMDhGNjIwMDQ0QTMKLToxMERGMzAwMDAyNDIxMDIzMDQ0MDAxNDUwMDAwMDAwMDhGNjIwMDQ4QTcKLToxMERGNDAwMDAyNDIxMDIzMDQ0MTAxNDEyNDA0MDAxNjBBMDAwRTAzN0EKLToxMERGNTAwMDhGQzIwMDA0OEY2MjAwNDgwMjQyMTAyMzA0NDAwMDA4NzAKLToxMERGNjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMzEwMDI0NDIwMDAxMDUKLToxMERGNzAwMDNDMDEwODAwQUMyMjMxMDAwQTAwMEVGNTAwMDAwMDAwNTAKLToxMERGODAwMDhGNjIwMDQwMDI0MjEwMjMxODQwMDAwOTI0MDIwMDBDNTYKLToxMERGOTAwMDNDMDIwODAwOEM0MjMxMDAzMjk0MDBGQzAwMDBCMDIxQTkKLToxMERGQTAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMzEwMDI0MDIwMDBDOTQKLToxMERGQjAwMEFGQTIwMDMwOEY2MjAwNDAwMDUyMjAyMzE4ODAwMDBENzUKLToxMERGQzAwMDAyQzQxMDJBMTQ0MDAxMTYwMDAwMDAwMDE0OTYwMDA2MzYKLToxMERGRDAwMDAyQzQxMDIzM0E4MjAwMDEzMDQyMDAwMTE0NDAwMTEwQjMKLToxMERGRTAwMDAwMDAwMDAwMDJDNDEwMjMwMjQ0OTAyMTBBMDAwREVCM0YKLToxMERGRjAwMDMwNTZGRkZGMDAwMDIwMjEzMjgyMDAwMjEwNDAwMDFBM0MKLToxMEUwMDAwMDMyODIwMDEwOTM2MjAwM0UzMDQyMDA0MDUwNDAwMDExQzYKLToxMEUwMTAwMDhGQzIwMDA0MEUwMDExRkUwMjAwMjAyMTI0MDIwMDE4MEQKLToxMEUwMjAwMEEzNjIwMDNGOTM2MjAwMDUyNDAzRkZGRTAyMDAyMDIxNEIKLToxMEUwMzAwMDAwNDMxMDI0MEUwMDEyMDdBMzYyMDAwNTI0MDQwMDM5RDcKLToxMEUwNDAwMDAwMDAyODIxMEUwMDEzMDEyNDA2MDAxODBBMDAwRjAyMDgKLToxMEUwNTAwMDI0MDIwMDAxMjQwNDAwMTcwMDQwRjgwOTAwMDAwMDAwMTkKLToxMEUwNjAwMDBBMDAwRjAyMjQwMjAwMDExMDQwMDBGODAwMDAwMDAwMjYKLToxMEUwNzAwMDhGNjMwMDRDOEY2MjAwNTQwMkEyMTAyMzFDNDAwMEYzRjcKLToxMEUwODAwMDAyQTMxMDIzMDQ0MjAwMDEwMDYwQTgyMUFGQTQwMDE4REQKLToxMEUwOTAwMEFGQjIwMDEwQUZCNjAwMTQ5MzQyMDEyMDhGNjUwMDQwNkMKLToxMEUwQTAwMDk3NjMwMDNDMzA0MjAwRkYwMzQyMTAyMTAwNDQxMDIxREUKLToxMEUwQjAwMDhGQTQwMDU0MzA2M0ZGRkYyNDQyNDAwMDAwODMxODJCREMKLToxMEUwQzAwMDhGQTQwMDMwQUZBMjAwMjBBRkE1MDAyODAwODMyMDI1MzgKLToxMEUwRDAwMEFGQTQwMDMwQUZBNTAwMjRBRkEwMDAyQ0FGQjUwMDM0MzIKLToxMEUwRTAwMDkzNjIwMDNFMzA0MjAwMDg1MDQwMDAxMThGQzIwMDAwOTEKLToxMEUwRjAwMDAyMjAyMDIxMjdBNTAwMzgwRTAwMENBNEFGQTAwMDM4NzQKLToxMEUxMDAwMDU0NDAwMDBCOEZDMjAwMDA4RkEyMDAzODMwNDIwMTAwNDMKLToxMEUxMTAwMDUwNDAwMDA3OEZDMjAwMDA4RkEzMDAzQzhGNjIwMDYwNTgKLToxMEUxMjAwMDAwNjIxMDIzMDQ0MzAwMDFBRjYzMDA2MDhGQzIwMDAwNEYKLToxMEUxMzAwMDAwNDBGODA5MjdBNDAwMTA4RkEyMDAzMDMwNDIwMDAyRUUKLToxMEUxNDAwMDU0NDAwMDAxMzI5NDAwRkU5MzYyMDAzRTMwNDIwMDQwOTEKLToxMEUxNTAwMDEwNDAwMDM3OEZBMzAwMTQ4RjYyMDA1NDE2QTIwMDFBREIKLToxMEUxNjAwMDMyODIwMDAxMjQwMjAwMTQxMjYyMDAxMDJBNjIwMDE1OUIKLToxMEUxNzAwMDEwNDAwMDA2MjQwMjAwMTYyNDAyMDAwQzEyNjIwMDA3NjAKLToxMEUxODAwMDMyODIwMDAxMEEwMDBFNUYwMDAwMDAwMDEyNjIwMDA1RUEKLToxMEUxOTAwMDMyODIwMDAxMEEwMDBFNUYwMDAwMDAwMDBBMDAwRTVBRTEKLToxMEUxQTAwMDI0MTcwMDBFMEEwMDBFNUEyNDE3MDAxMDBBMDAwRTVFRjMKLToxMEUxQjAwMDI0MTcwMDEyOTM2MjAwMjMyNDAzRkZCRDAwNDMxMDI0QTAKLToxMEUxQzAwMEEzNjIwMDIzMzI4MjAwMDExMDQwMDAxOThGQTMwMDE0QzMKLToxMEUxRDAwMDI0MDIwMDBDMTI2MjAwMEUyQTYyMDAwRDEwNDAwMDA2OUMKLToxMEUxRTAwMDI0MDIwMDBFMjQwMjAwMEExMjYyMDAwNzhGQTIwMDI0RkIKLToxMEUxRjAwMDBBMDAwRTc3MjQ0MjAwMDExMjYyMDAwODhGQTIwMDI0NTgKLToxMEUyMDAwMDBBMDAwRTc3MjQ0MjAwMDEwQTAwMEU3NTI0MTcwMDA4NDgKLToxMEUyMTAwMDI0MDIwMDBFMTZFMjAwMDIyNDE3MDAxNjI0MTcwMDEwMzQKLToxMEUyMjAwMDhGQTIwMDI0MjQ0MjAwMDFBRkEyMDAyNDhGQTMwMDE0NzcKLToxMEUyMzAwMDhGQTIwMDI0OEY3MzAwNDAwMDQzMTAyMUFGNjIwMDQwODIKLToxMEUyNDAwMDhGQTIwMDU0OTM2NDAwMzY4RjYzMDA0MDAyQTI4ODIxOUQKLToxMEUyNTAwMDM0MDJGRkZGMDA4MjEwMDQwMDYyMTgyMUFGNjMwMDQ4RkYKLToxMEUyNjAwMDhGQTYwMDMwMzBDMjAwMDgxMDQwMDAwRTAwMDAwMDAwRjEKLToxMEUyNzAwMDhGNjIwMDU4MTYyMjAwMDQzMEM2MDBGRjk3NDIwMTFBMzAKLToxMEUyODAwMDUwNDAwMDAxMzRDNjAwMTA5M0M1MDAwODhGQTcwMDM0MjkKLToxMEUyOTAwMDAyMDAyMDIxMDAwNTJCMDAzNEE1MDA4MDBFMDAwQzhEMEIKLToxMEUyQTAwMDMwQTVGMDgwOEY2MjAwNDAwMDUzMTAyMzE4NDAwMDE3MDMKLToxMEUyQjAwMDhGQTIwMDE4M0MwMjA4MDA4QzQyMzE5ODMwNDIwMDEwQjYKLToxMEUyQzAwMDEwNDAwMDA5MjQwMjAwMDE5NzYyMDA2ODE0NDAwMDA2MTMKLToxMEUyRDAwMDI0MDIwMDAxQTc2MjAwNjg5NzQyMDA3QTI0NDIwMDBBRTMKLToxMEUyRTAwMDBBMDAwRUJCQTc2MjAwMTJBNzYyMDAxMjBFMDAxMUZFMDgKLToxMEUyRjAwMDAyMDAyMDIxOTM2MjAwN0QyNDAzMDAwMTAyMDAyMDIxRkUKLToxMEUzMDAwMDM0NDIwMDAxMEEwMDBFQjlBRkEzMDA1MDE4NDAwMDBBQzEKLToxMEUzMTAwMDAwMDAwMDAwMEUwMDExRkUwMjAwMjAyMTkzNjIwMDdEMkIKLToxMEUzMjAwMDI0MDMwMDAxMDIwMDIwMjFBRkEzMDA1MDM0NDIwMDA0NjYKLToxMEUzMzAwMDBFMDAxMjA3QTM2MjAwN0Q5MzYyMDAzRTMwNDIwMDQwNEYKLToxMEUzNDAwMDE0NDAwMDBDMzI4MjAwMDExMDQwMDAwQTAwMDAwMDAwNUUKLToxMEUzNTAwMDhGNjMwMDQwOEZDMjAwMDQyNDA0MDAxODI0NjMwMDAxNkUKLToxMEUzNjAwMDAwNDBGODA5QUY2MzAwNDA4RkEyMDAzMDBBMDAwRjAyOUUKLToxMEUzNzAwMDMwNDIwMDA0OEY2MjAwNTgxMDUxMDAxMDAwMDAwMDAwNkQKLToxMEUzODAwMDhGNjIwMDE4MDI0MjEwMjMxQzQwMDAwODI0MDQwMDAxODAKLToxMEUzOTAwMDhGNjIwMDE4MTY0MjAwMDkwMDAwMDAwMDhGNjIwMDFDMDYKLToxMEUzQTAwMDAyQTIxMDIzMDQ0MDAwMDUwMDAwMDAwMEFGNzEwMDU4RDUKLToxMEUzQjAwMEFGQTQwMDUwQUY3MjAwMThBRjc1MDAxQzEyRTAwMDBCNDQKLToxMEUzQzAwMDhGQTIwMDUwMEUwMDExRkUwMjAwMjAyMUEzNzcwMDNGMTMKLToxMEUzRDAwMDBFMDAxMjA3MDIwMDIwMjEwMkUwMzAyMTI0MDQwMDM3NDEKLToxMEUzRTAwMDBFMDAxMzAxMDAwMDI4MjE4RkEyMDA1MDEwNDAwMDAzRUUKLToxMEUzRjAwMDAwMDAwMDAwMEUwMDBDOUIwMjAwMjAyMTEyQzAwMDA1NEUKLToxMEU0MDAwMDAwMDAxODIxOEZBMjAwMzAzMDQyMDAwNDUwNDAwMDExNUIKLToxMEU0MTAwMDAwNjAxMDIxMjQwMzAwMDEwQTAwMEYwMjAwNjAxMDIxOTcKLToxMEU0MjAwMDBFMDAxMUZFMDIwMDIwMjE5MzYyMDA3RDAyMDAyMDIxRDcKLToxMEU0MzAwMDM0NDIwMDA0MEUwMDEyMDdBMzYyMDA3RDBFMDAwQzlCMDQKLToxMEU0NDAwMDAyMDAyMDIxMEEwMDBGMDIyNDAyMDAwMUFGNDAwMDQ0MTQKLToxMEU0NTAwMDI0MDIwMDAxOEZCRjAwN0M4RkJFMDA3ODhGQjcwMDc0NEMKLToxMEU0NjAwMDhGQjYwMDcwOEZCNTAwNkM4RkI0MDA2ODhGQjMwMDY0RjYKLToxMEU0NzAwMDhGQjIwMDYwOEZCMTAwNUM4RkIwMDA1ODAzRTAwMDA4REQKLToxMEU0ODAwMDI3QkQwMDgwOEM4NzAwMDQ4Qzg2MDAwMDAwMDAxMDIxQ0UKLToxMEU0OTAwMDAwRTUzODIxMDBFNTI4MkIwMEMyMzAyMTAwQzUzMDIxREQKLToxMEU0QTAwMEFDODcwMDA0MDNFMDAwMDhBQzg2MDAwMDhGNDIwMUI4OEUKLToxMEU0QjAwMDA0NDBGRkZFMjQwMjA4MDBBRjQyMDFCODAzRTAwMDA4NTgKLToxMEU0QzAwMDAwMDAwMDAwM0MwMjAwMDgwMzQyMjgyMTk0QTIwMDQ4RkEKLToxMEU0RDAwMDMwODRGRkZGMTA0MDAwMUIyNDg0MDAxMjk0QTIwMDQ4RTcKLToxMEU0RTAwMDMwNDJGRkZGMDA0NDEwMkExMDQwMDAxNzI0MDIwMDAzQUUKLToxMEU0RjAwMDI0MDIwMDFBOTM0MzAxMjBBMzQyMDE4QjhGODIwMDAwNjMKLToxMEU1MDAwMDMwNjMwMEZGMzA0MjQwMDAxMDQwMDAwOTI0NjNGRkZFRUEKLToxMEU1MTAwMDk0QTIwMDQ4MzA0MkZGRkYwMDQzMTAyQjE0NDAwMDA1MzYKLToxMEU1MjAwMDhGODIwMDA0QTc0MzAxOTQwQTAwMEYzQzM0NDIwMDAxOEIKLToxMEU1MzAwMDhGODIwMDA0MjQwM0ZGRkUwMDQzMTAyNDAzRTAwMDA4NDAKLToxMEU1NDAwMEFGODIwMDA0MjQwMjAwMDMwM0UwMDAwOEEzNDIwMThCMTEKLToxMEU1NTAwMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOUMKLToxMEU1NjAwMEFGQkYwMDFDMzBCMUZGRkYzMEQwRkZGRjMwRjJGRkZGMjQKLToxMEU1NzAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMEFGNDQwMTgwNUMKLToxMEU1ODAwMEFGNDQwMDIwMEUwMDBGMUUwMjAwMjAyMThGODMwMDAwRTgKLToxMEU1OTAwMDhGODQwMDA0QTc1MTAxOENBNzUwMDE4RUE3NDMwMTkwREUKLToxMEU1QTAwMDhGODMwMDA4MzA4MjgwMDBBRjQzMDFBOEE3NTIwMTg4MDIKLToxMEU1QjAwMDEwNDAwMDBFOEY4MjAwMDQ5MzQyMDExNjMwNDIwMEZDOEUKLToxMEU1QzAwMDI0NDIwMDA0MDA1QTEwMjE4QzQyNDAwMDMwNDJGRkZGRDgKLToxMEU1RDAwMDE0NDAwMDA2OEY4MjAwMDQzQzAyRkZGRjM0NDI3RkZGOUMKLToxMEU1RTAwMDAwODIxMDI0QUY4MjAwMDQ4RjgyMDAwNDI0MDNCRkZGNDYKLToxMEU1RjAwMDAwNDMxMDI0QTc0MjAxQTY5NzQzMDEwQzhGNDIwMTA0NTcKLToxMEU2MDAwMDAwMDMxQzAwMzA0MkZGRkYwMDYyMTgyNUFGNDMwMUFDM0QKLToxMEU2MTAwMDNDMDIxMDAwQUY0MjAxQjg4RkJGMDAxQzhGQjIwMDE4M0YKLToxMEU2MjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNTgKLToxMEU2MzAwMDNDMDIwODAwOEM0MjAwMzgyN0JERkZDOEFGQjIwMDI4NUEKLToxMEU2NDAwMEFGQkYwMDMwQUZCMzAwMkNBRkIxMDAyNEFGQjAwMDIwOUIKLToxMEU2NTAwMDAwMDA5MDIxM0MwRTA4MDAyNUNFMDAzODE0NDAwMDAyMzYKLToxMEU2NjAwMDI0NERGRkZGMDAwMDY4MjE4Rjg0MDAwMDMwODI0MDAwQUQKLToxMEU2NzAwMDEwNDAwMDBBMzA4MjgwMDAzQzAyMDAyMDAwODIxMDI0RkEKLToxMEU2ODAwMDUwNDAwMDA2MzA4MjgwMDA4RjgyMDAwNDI0MDNCRkZGQzgKLToxMEU2OTAwMDAwODMxODI0MEEwMDBGOUQzNDQyMTAwMDEwNDAwMDBBMjUKLToxMEU2QTAwMDNDMDIwMDIwMDA4MjEwMjQxMDQwMDAwNzhGODIwMDA0RUEKLToxMEU2QjAwMDNDMDNGRkZGMzQ2MzdGRkYwMDgzMTgyNDM0NDI4MDAwNTMKLToxMEU2QzAwMEFGODIwMDA0QUY4MzAwMDA4RjQ4MDA3MDkzNDIwMTEyQjQKLToxMEU2RDAwMDhGODYwMDAwMzA0MjAwRkYwMDAyMjg4MjMwQzIwMTAwMTUKLToxMEU2RTAwMDEwNDAwMDQzMjRBNDAwMDMzMEMyNDAwMDEwNDAwMDEwM0EKLToxMEU2RjAwMDMwQzIyMDAwMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwREEKLToxMEU3MDAwMDI0QTQwMDA0MDAwNDEwODBBRkEzMDAxMDAwNUExMDIxQkMKLToxMEU3MTAwMDhDNDI0MDAwQUZBMjAwMTQ5MzQyMDExNjMwNDIwMEZDMkMKLToxMEU3MjAwMDAwNUExMDIxOEM0MjQwMDAwQTAwMEZDNEFGQTIwMDE4MEEKLToxMEU3MzAwMDEwNDAwMDJGMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwMkMKLToxMEU3NDAwMDI0QTQwMDA0MDAwNDEwODBBRkEzMDAxMDAwNUExMDIxN0MKLToxMEU3NTAwMDhDNDI0MDAwQUZBMDAwMThBRkEyMDAxNDhGQTkwMDE4OEYKLToxMEU3NjAwMDAwMDAzODIxMDAwMDIwMjEyNDBDMDAwODI3QUIwMDEwRjUKLToxMEU3NzAwMDNDMEEwODAwMjU0QTAxMDAwMTY0MTAyMTE0OEMwMDAzQTIKLToxMEU3ODAwMDAwMDQyQTAwMTEyMDAwMEEwMDAwMDAwMDkwNDIwMDAwNEUKLToxMEU3OTAwMDI0ODQwMDAxMkM4MzAwMEMwMEEyMTAyMTAwMDIxMDgwQjAKLToxMEU3QTAwMDAwNEExMDIxOEM0MjAwMDAxNDYwRkZGMzAwRTIzODI2N0EKLToxMEU3QjAwMDNDMDQwODAwOEM4NDMxMDQ4RjQyMDA3MDJDODMwMDIwQkMKLToxMEU3QzAwMDEwNjAwMDA5MDA0ODQwMjMzQzAzMDgwMDI0NjMzMTA4MUUKLToxMEU3RDAwMDAwMDQxMDgwMDA0MzEwMjEyNDgzMDAwMUFDNDgwMDAwOTUKLToxMEU3RTAwMDNDMDEwODAwQUMyMzMxMDQwQTAwMEZFRkFGODcwMDA4OUEKLToxMEU3RjAwMDk3NDMwMTFFOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwODMKLToxMEU4MDAwMDAwNjIxODI1QUY4MzAwMDg5NzQyMDEwQzhGNDM0MDAwMzcKLToxMEU4MTAwMDMwNDRGRkZGMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwRDkKLToxMEU4MjAwMDBBMDAwRkZCMjQxMjAwMjA4RjQyNDAwMDMwNDIwMTAwRkEKLToxMEU4MzAwMDU0NDAwMDAxMjQxMjAwMTAzMEMyMTAwMDUwNDAwMDE0NTcKLToxMEU4NDAwMDM2NTIwMDAxMzBDMjAwMjAxNDQwMDAwQjNDMDIxMDAwODAKLToxMEU4NTAwMDAwQzIxMDI0NTA0MDAwMEUzNjUyMDAwMTNDMDMwRTAwNEUKLToxMEU4NjAwMDNDMDIwREZGMDBDMzE4MjQzNDQyRkZGRjAwNDMxMDJCNkQKLToxMEU4NzAwMDUwNDAwMDA3MzY1MjAwMDEzQzAyMDgwMDhDNDIwMDJDMzgKLToxMEU4ODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyQzM2NTIwMDA1NTUKLToxMEU4OTAwMDNDMDUwODAwOENBNTAwMzQ1NEEwMDAyNDhGODQwMDAwOUYKLToxMEU4QTAwMDhGODIwMDBDNTQ0MDAwMjE4Rjg0MDAwMDhGODIwMDA0NkUKLToxMEU4QjAwMDMwNDI0MDAwNTQ0MDAwMUQ4Rjg0MDAwMDNDMDIxRjAxODQKLToxMEU4QzAwMDAwQzI4ODI0M0MwMjEwMDA1NjIyMDAxODhGODQwMDAwRTkKLToxMEU4RDAwMDMwODIwMjAwMTQ0MDAwMTU4Rjg0MDAwMDk3NTAwMTBFMTIKLToxMEU4RTAwMEFGNDAwMTgwQUY0MDAwMjAyNjEwMDAwNDMyMTBGRkZGMkYKLToxMEU4RjAwMDBFMDAwRjFFMDIwMDIwMjE4RjgzMDAwNDI0MDJCRkZGQTAKLToxMEU5MDAwMDM2NDQwMDAyMDA2MjE4MjQyNDAyMDAwMkE3NDIwMThDNEYKLToxMEU5MTAwMDhGODIwMDAwQTc1MDAxOEVBNzQ0MDE4OEE3NDMwMUE2NUIKLToxMEU5MjAwMEE3NDIwMTkwQUY1MTAxQjgwQTAwMTBEOTNDMDIwMDAxODIKLToxMEU5MzAwMDAwODIxMDI0MTA0MDAwMEMzQzAyMTAwMDNDMDIwODAwMzEKLToxMEU5NDAwMDhDNDIwMEQ4OTc0NjAxMEUyNDA0MDA4MDI0NDIwMDAxMjYKLToxMEU5NTAwMDMwQzZGRkZGMjQwNTAwMDIzQzAxMDgwMEFDMjIwMEQ4QUQKLToxMEU5NjAwMDBBMDAxMEUzMjQwNzAwMDMwMDgyMTAyNDEwNDAwMDQ1MzEKLToxMEU5NzAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDAzMDEwNDAwMDBERjYKLToxMEU5ODAwMDhGODIwMDA0MzA0MjQwMDAxMDQwMDAwQTNDMDMwRjAwMTgKLToxMEU5OTAwMDAwODMxODI0M0MwMjAxMDAwMDQzMTAyQjE0NDAwMDA1QTIKLToxMEU5QTAwMDAwMDAwMDAwOTc0NjAxMEUzNjQ3MDAwMjBBMDAxMEUwMDIKLToxMEU5QjAwMDI0MDQwMDgwMTBBMDAwMEQzMDgyMDEwMDEwNDAwMDBCRTQKLToxMEU5QzAwMDNDMDIwRjAwMDA4MjEwMjQzQzAzMDIwMDEwNDMwMDA3QTkKLToxMEU5RDAwMDhGODIwMDA4MDA0RDEwMjQwMDRFMTAyMTkwNDIwMDA0NDgKLToxMEU5RTAwMDI0NDIwMDA0MEEwMDEwOEIwMDAyMjFDMDAwMDAwMDAwMzUKLToxMEU5RjAwMDhGODYwMDAwM0MwNTA4MDA4Q0E1MDBEMDAwMDYxNjAyOUEKLToxMEVBMDAwMDMwNTAwMDBGMzhBMjAwMDEyQzQyMDAwMTJFMDMwMDBDRjAKLToxMEVBMTAwMDAwNDMxMDI0MTQ0MDAwMTgwMDEwMjFDMDI2MDJGRkZDRkYKLToxMEVBMjAwMDJDNDIwMDA0NTQ0MDAwMTQwMDAwMjAyMTM4QTIwMDAyQUYKLToxMEVBMzAwMDJDNDIwMDAxMDA0MzEwMjQxMDQwMDAwMzAwMDYxMjQyNDMKLToxMEVBNDAwMDBBMDAxMDhCMDAwMDIwMjEwMDEwMTgyQjAwNDMxMDI0MTYKLToxMEVBNTAwMDUwNDAwMDA5MDAxMDIxQzA5NzQ2MDEwRTAwMDAyMDIxRkYKLToxMEVBNjAwMDI0MDUwMDAyMjRDNjAwMDQzMEM2RkZGRjBFMDAwRjQxM0IKLToxMEVBNzAwMDMyNDdGRkZCMDAxMDIxQzA5NzQ2MDEwRTBBMDAxMEUwNEMKLToxMEVBODAwMDM2NDcwMDAyOEY0MjQwMDAzQzExMDgwMDhFMzEwMDI0QkUKLToxMEVBOTAwMDMwNDIwMTAwMTA0MDAwNDgzMjIyMDAwMTAyMjA4MDIxNTMKLToxMEVBQTAwMDEwQTAwMDE3MzI1MzAwMDQzMDgyMDEwMDEwNDAwMDE1RkUKLToxMEVBQjAwMDI0MDIwMDAxM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwRUIKLToxMEVBQzAwMDEwNDMwMDBGOEY4MjAwMDg5NzQ2MDEwRTAyNDAzODIxNDQKLToxMEVBRDAwMDAwNEQxMDI0MDA0RTEwMjE5MDQ0MDAwNDI0QzYwMDA0NzAKLToxMEVBRTAwMDMwQzZGRkZGMjQ4NDAwMDQwMDA0MjFDMDBFMDAwRjQxNDMKLToxMEVBRjAwMDI0MDUwMDAyMjQwMkZGRkUwMjIyODAyNDMyNTJGRkZCODIKLToxMEVCMDAwMDI0MDIwMDAxMTYwMjAwMDczMjAyMDAwMTMyNDIwMDA0MTIKLToxMEVCMTAwMDUwNDAwMDAxMzY1MjAwMDI5NzQ2MDEwRTBBMDAxMERGRjUKLToxMEVCMjAwMDAyNDAzODIxMTA0MDAwMEEzMjAyMDAwNDk3NDYwMTBFQ0MKLToxMEVCMzAwMDAyNDAzODIxMDAwMDIwMjEyNEM2MDAwNDMwQzZGRkZGMTcKLToxMEVCNDAwMDBFMDAwRjQxMjQwNTAwMDIzMjUyRkZGQjMyMDIwMDA0ODYKLToxMEVCNTAwMDEwNDAwMDBCOEY4MjAwMDAzMDQyMDgwMDEwNDAwMDA4NzcKLToxMEVCNjAwMDAwMDAwMDAwOTc0NjAxMEUwMjQwMzgyMTI0MDQwMTAwRjUKLToxMEVCNzAwMDI0QzYwMDA0MzBDNkZGRkYwRTAwMEY0MTI0MDUwMDAyMkEKLToxMEVCODAwMDE2NjAwMDE4OEZCRjAwMzAyNzQzMDE4MDhGNDIwMUI4MDQKLToxMEVCOTAwMDA0NDBGRkZFMjQwMjIwMDBBNDYyMDAwODI0MDIwMDAyQjgKLToxMEVCQTAwMEEwNjIwMDBCQTQ2MDAwMTAzQzAyMTAwMEFGNDIwMUI4NEMKLToxMEVCQjAwMDBBMDAxMEU2OEZCRjAwMzAxMDQwMDAwQThGQkYwMDMwRkYKLToxMEVCQzAwMDk3NDYwMTBFMzY0NzAwMDIwMDAwMjAyMTI0QzYwMDA0QUIKLToxMEVCRDAwMDMwQzZGRkZGMjQwNTAwMDIwRTAwMEY0MTAwMDAwMDAwQjgKLToxMEVCRTAwMDhGQkYwMDMwOEZCMzAwMkM4RkIyMDAyODhGQjEwMDI0NkMKLToxMEVCRjAwMDhGQjAwMDIwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDM4N0UKLToxMEVDMDAwMDI3QkRGRkU4QUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDE0OUMKLToxMEVDMTAwMDhDODI1MDAwMjQwM0ZGN0YzQzFBODAwMDAwNDMxMDI0QTQKLToxMEVDMjAwMDM0NDIzODBDQUM4MjUwMDAyNDAyMDAwMzNDMTA2MDAwRDcKLToxMEVDMzAwMEFGNDIwMDA4OEUwMjA4MDgzQzFCODAwODNDMDEwODAwMTcKLToxMEVDNDAwMEFDMjAwMDIwMzA0MkZGRjAzODQyMDAxMDJDNDIwMDAxN0UKLToxMEVDNTAwMDBFMDAxQjM1QUY4MjAwMTgzQzA0RkZGRjNDMDIwNDAwOEQKLToxMEVDNjAwMDM0ODMwODA2MzQ0MjAwMENBRTAyMTk0OEFFMDMxOTRDMzYKLToxMEVDNzAwMDNDMDU2MDE2OEUwMjE5ODA4Q0EzMDAwMDM0NDIwMjAwMEQKLToxMEVDODAwMDAwNjQxODI0QUUwMjE5ODAzQzAyNTM1MzE0NjIwMDAzM0UKLToxMEVDOTAwMDM0QTQ3QzAwOENBMjAwMDQwMDUwMjAyMThDODIwMDdDRDMKLToxMEVDQTAwMDhDODMwMDc4QUY4MjAwMTRBRjgzMDAxMDNDMDI4MDAwOTgKLToxMEVDQjAwMDM0NDIwMDcwOEM0MzAwMDAwMDQwMzgyMUFGODMwMDFDQjgKLToxMEVDQzAwMDAwNjAzMDIxOENFODAwMDAzQzA1MDgwMDhDQTUwMEZDQTkKLToxMEVDRDAwMDNDMDQwODAwOEM4NDAwRjgwMTA2MzAyMzAwMDAxMDIxNTkKLToxMEVDRTAwMDAwQTYyODIxMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxQUEKLToxMEVDRjAwMDNDMDEwODAwQUMyNTAwRkMzQzAxMDgwMEFDMjQwMEY4RjUKLToxMEVEMDAwMDhGNTAwMDAwMzIwMjAwMDMxMDQwRkZFRTAxMDAzMDIxNUUKLToxMEVEMTAwMDhDRTYwMDAwM0MwNTA4MDA4Q0E1MDBGQzNDMDQwODAwQzMKLToxMEVEMjAwMDhDODQwMEY4MDBDODMwMjMwMEE2MjgyMTAwMDAxMDIxQTAKLToxMEVEMzAwMDAwQTYzMDJCMDA4MjIwMjEwMDg2MjAyMTMyMDcwMDAxMEUKLToxMEVENDAwMDNDMDEwODAwQUMyNTAwRkNBRjg4MDAxQzNDMDEwODAwMTkKLToxMEVENTAwMEFDMjQwMEY4MTBFMDAwNjQzMjAyMDAwMjhGNDIwMTI4NjcKLToxMEVENjAwMEFGNDIwMDIwOEY0MjAxMDQ4RjQzMDEwMEFGODIwMDAwQjgKLToxMEVENzAwMDBFMDAwRjE4QUY4MzAwMDQ4RjQzNDAwMDM0MDJGRkZGRTIKLToxMEVEODAwMDE0NjIwMDA2MDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwRDQKLToxMEVEOTAwMDI0ODQwMEYwMEEwMDExNUIwMDAwMDAwMDhGNDI0MDAwNTQKLToxMEVEQTAwMDMwNDIwMTAwMTA0MDAwMEIwMDAwMDAwMDk3NDUwMTBFQUEKLToxMEVEQjAwMDNDMDQwODAwMjQ4NDAwRTgwRTAwMEYwRTMwQTVGRkZGN0QKLToxMEVEQzAwMDk3NDUwMTBFM0MwNDA4MDAyNDg0MzFDODBBMDAxMTcyRTIKLToxMEVERDAwMDAwMDAwMDAwOEY0MzQwMDA4RjgyMDAxMDE0NjIwMDBBODAKLToxMEVERTAwMDAwMDAwMDAwOEY0MzQwMDQ4RjgyMDAxNDE0NjIwMDA2NkMKLToxMEVERjAwMDAwMDAwMDAwOTc0NTAxMEUzQzA0MDgwMDI0ODQzMUI4NEYKLToxMEVFMDAwMDBBMDAxMTcyMDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwNDIKLToxMEVFMTAwMDI0ODQwMEUwMEUwMDBGMEUzMEE1RkZGRjNDMDIwODAwMjYKLToxMEVFMjAwMDhDNDIwMEMwMTA0MDAwMDg4Rjg0MDAwMDNDMDIwODAwQTMKLToxMEVFMzAwMDhDNDIwMEM0MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMEM0MDIKLToxMEVFNDAwMDBBMDAxMTlGMDAwMDAwMDAzQzAyMDAxMDAwODIxMDI0MDQKLToxMEVFNTAwMDE0NDAwMDBBOEY4MzAwMDQzQzAyMDgwMDhDNDIwMDIwMEEKLToxMEVFNjAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyMDBFMDAwRjc5NzIKLToxMEVFNzAwMDAwMDAyMDIxMEEwMDExOUQwMDAwMDAwMDI0MDJCRkZGQjUKLToxMEVFODAwMDAwNjIxMDI0MTA0MDAwMDgwMDAwMDAwMDI0MDI4N0ZGRTgKLToxMEVFOTAwMDAwNjIxMDI0MTQ0MDAwMDgzQzAyMDA2MDAwODIxMDI0MkMKLToxMEVFQTAwMDEwNDAwMDA1MDAwMDAwMDAwRTAwMEQyNjAwMDAwMDAwQ0MKLToxMEVFQjAwMDBBMDAxMTlEMDAwMDAwMDAwRTAwMTFFODAwMDAwMDAwOTMKLToxMEVFQzAwMDEwNDAwMDA2M0MwMjQwMDA4RjQzMDEyNDNDMDI2MDIwQjkKLToxMEVFRDAwMEFDNDMwMDE0MDAwMDAwMDAzQzAyNDAwMEFGNDIwMTM4ODcKLToxMEVFRTAwMDAwMDAwMDAwMzIwMjAwMDIxMDQwRkY3MTNDMDI4MDAwNkUKLToxMEVFRjAwMDhGNDIwMTQwM0MwNDQwMDBBRjQyMDAyMDhGNDMwMTQ4NTQKLToxMEVGMDAwMDNDMDI3MDAwMDA2MjE4MjQxMDY0MDAyRDAwMDAwMDAwMTQKLToxMEVGMTAwMDAwODMxMDJCMTQ0MDAwMDYzQzAyNjAwMDNDMDIyMDAwREQKLToxMEVGMjAwMDEwNjIwMDA3M0MwMjQwMDAwQTAwMTFFNDAwMDAwMDAwRUIKLToxMEVGMzAwMDEwNjIwMDI3MDAwMDAwMDAwQTAwMTFFNDNDMDI0MDAwQkIKLToxMEVGNDAwMDhGNDIwMTQ4MjQwMzAwMDQwMDAyMTQwMjMwNDIwMEZGRjMKLToxMEVGNTAwMDE0NDMwMDBCMjc0NDAxODA4RjQzMDE0MDhGNDIwMUI4QzYKLToxMEVGNjAwMDA0NDBGRkZFMjQwMjAwMUNBQzgzMDAwMEEwODIwMDBCQzIKLToxMEVGNzAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTFFNDNDMDI0MDAwMUMKLToxMEVGODAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDhGNDIwMTQ4OUMKLToxMEVGOTAwMDAwMDIxNDAyQTQ4MjAwMDgyNDAyMDAwMkEwODIwMDBCRDYKLToxMEVGQTAwMDhGNDIwMTQ4QTQ4MjAwMTA4RjQyMDE0NEFDODIwMDI0QTkKLToxMEVGQjAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTFFNDNDMDI0MDAwREMKLToxMEVGQzAwMDBFMDAxMjBDMDAwMDAwMDAwQTAwMTFFNDNDMDI0MDAwOTgKLToxMEVGRDAwMDBFMDAxQjQyMDAwMDAwMDAzQzAyNDAwMEFGNDIwMTc4REUKLToxMEVGRTAwMDAwMDAwMDAwMEEwMDExMTkzQzAyODAwMDhGNDIwMTAwNUQKLToxMEVGRjAwMDMwNDIwMDNFMTQ0MDAwMTEyNDAyMDAwMUFGNDAwMDQ4OUUKLToxMEYwMDAwMDhGNDIwMTAwMzA0MjA3QzAxMDQwMDAwNTAwMDAwMDAwQTAKLToxMEYwMTAwMEFGNDAwMDRDQUY0MDAwNTAwM0UwMDAwODI0MDIwMDAxNjQKLToxMEYwMjAwMEFGNDAwMDU0QUY0MDAwNDA4RjQyMDEwMDMwNDIzODAwRjIKLToxMEYwMzAwMDU0NDAwMDAxQUY0MDAwNDQyNDAyMDAwMTAzRTAwMDA4RjYKLToxMEYwNDAwMDAwMDAwMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QjQKLToxMEYwNTAwMEFGNDQwMDIwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwNkIKLToxMEYwNjAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxODAKLToxMEYwNzAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDgKLToxMEYwODAwMEFGQjIwMDE4QUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwOUEKLToxMEYwOTAwMDhGNTAwMTQwOEY1MTAxNDgzQzAyODAwMDAwMTE5NDAyQzIKLToxMEYwQTAwMDAyMjIyMDI0MzI0MzAwRkYyNDAyMDAwRTEwNjIwMDhBNTQKLToxMEYwQjAwMDI4NjIwMDBGMTA0MDAwMTIyODYyMDAzNzI0MDIwMDA2NjgKLToxMEYwQzAwMDEwNjIwMDNCMjg2MjAwMDcxMDQwMDAwNzI0MDIwMDA5N0MKLToxMEYwRDAwMDEwNjAwMDFBMjQwMjAwMDExMDYyMDAyNTAwMDAwMDAwRTgKLToxMEYwRTAwMDBBMDAxMkMxMDAwMDAwMDAxMDYyMDA3QjI0MDIwMDBCMjUKLToxMEYwRjAwMDEwNjIwMDVCMzIyMkZGRkYwQTAwMTJDMTAwMDAwMDAwMTQKLToxMEYxMDAwMDEwNDAwMDA4MjQwMjAwMzgyODYyMDAzNTEwNDAwMDgwQkEKLToxMEYxMTAwMDI0MDIwMDFGMTA2MjAwN0UwMDAwMDAwMDBBMDAxMkMxREQKLToxMEYxMjAwMDAwMDAwMDAwMTA2MjAwN0EyNDAyMDA4MDEwNjIwMDQyOTkKLToxMEYxMzAwMDAwMDAwMDAwMEEwMDEyQzEwMDAwMDAwMDhGNDIwMUI4NjgKLToxMEYxNDAwMDA0NDBGRkZFMjQwMjAwMDFBRjUwMDE4MEFGNDAwMTg0NjMKLToxMEYxNTAwMEE3NTIwMTg4QTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCMjQKLToxMEYxNjAwMEE3NTEwMTkwOEY0MjAxNDQwQTAwMTJCQ0FGNDIwMUE0OTIKLToxMEYxNzAwMDEwODAwMDBBMjQwMjAwMDIzQzAxMDgwMEEwMjI3MTkwQzUKLToxMEYxODAwMDNDMDEwODAwQUMzMDcxOTg4RjQyMDE0NDNDMDEwODAwRkEKLToxMEYxOTAwMEFDMjI3MTk0MEEwMDEyQzM4RkJGMDAxQzhGNDIwMUI4QzkKLToxMEYxQTAwMDA0NDBGRkZFMjQwMjAwMDIwQTAwMTJBNjAwMDAwMDAwMzQKLToxMEYxQjAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMEFGNTAwMTgwMDQKLToxMEYxQzAwMDNDMDIwODAwOTA0MjcxOTAxMDQwMDAwMzAwMDAxODIxOUEKLToxMEYxRDAwMDNDMDMwODAwOEM2MzcxOThBRjQzMDE4NEE3NTIwMTg4RjcKLToxMEYxRTAwMDNDMDIwODAwOTA0MjcxOTAwMDAwMTgyMTM0NDIwMDAxNTYKLToxMEYxRjAwMEEzNDIwMThBMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwN0QKLToxMEYyMDAwMDhGNDIwMTQ0QUY0MjAxQTQzQzAyMDgwMDkwNDI3MTkwMzkKLToxMEYyMTAwMDEwNDAwMDAzM0MwMjEwMDAzQzAzMDgwMDhDNjM3MTk0MTIKLToxMEYyMjAwMEFGNDMwMUE4QUY0MjAxQjgzQzAxMDgwMEEwMjA3MTkwOTMKLToxMEYyMzAwMDBBMDAxMkMzOEZCRjAwMUM4RjQyMDFCODA0NDBGRkZFQkEKLToxMEYyNDAwMDI0MDIwMDAyQTM0MjAxOEJBNzUyMDE4OEE3NTEwMTkwMUEKLToxMEYyNTAwMDhGNDIwMTQ0QTc0MjAxOTIwQTAwMTJCRTNDMDIxMDAwRjQKLToxMEYyNjAwMDE0NDAwMDFEMDAwMDAwMDA5MzYyMDAwNTMwNDIwMDA0QkQKLToxMEYyNzAwMDE0NDAwMDM3MDAwMDAwMDAwRTAwMTFGRTAyMDAyMDIxQTMKLToxMEYyODAwMDkzNjIwMDA1MDIwMDIwMjEzNDQyMDAwNDBFMDAxMjA3QTAKLToxMEYyOTAwMEEzNjIwMDA1OTM2MjAwMDUzMDQyMDAwNDE0NDAwMDAyOUUKLToxMEYyQTAwMDAwMDAwMDAwMDAwMDAwMEQ5MzYyMDAwMDI0MDMwMDIwMTUKLToxMEYyQjAwMDMwNDIwMEZGMTQ0MzAwMDgwMDAwMDAwMDhGNDIwMUI4RjQKLToxMEYyQzAwMDA0NDBGRkZFMjQwMjAwMDVBRjUwMDE4MEEzNDIwMThCRTEKLToxMEYyRDAwMDNDMDIxMDAwQUY0MjAxQjg4RjQyMDFCODA0NDBGRkZFNkIKLToxMEYyRTAwMDI0MDIwMDAyQUY0MDAxODBBRjUwMDE4NEE3NTIwMTg4ODAKLToxMEYyRjAwMEEzNDIwMThBQTM0MjAxOEJBNzUxMDE5MEFGNDAwMUE0MTAKLToxMEYzMDAwMDhGNDIwMTQ0QUY0MjAxQTgwQTAwMTJCRTNDMDIxMDAwMjUKLToxMEYzMTAwMDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAwMUFGNTAwMTgwN0IKLToxMEYzMjAwMEFGNDAwMTg0QTc1MjAxODhBMzQyMDE4QTI0MDIwMDAyNEYKLToxMEYzMzAwMEEzNDIwMThCQTc1MTAxOTBBRjQwMDFBNEFGNDAwMUE4QTcKLToxMEYzNDAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTJDMzhGQkYwMDFDN0MKLToxMEYzNTAwMDAwMDAwMDBEOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0ODkKLToxMEYzNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4OTQKLToxMEYzNzAwMEFGQkYwMDEwMEUwMDBGMTgwMDAwMDAwMEFGNDAwMTgwNkEKLToxMEYzODAwMDhGQkYwMDEwMDAwMDIwMjEwQTAwMEY3OTI3QkQwMDE4NTAKLToxMEYzOTAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMTEwODAwMDA3MTgKLToxMEYzQTAwMDAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyRjIKLToxMEYzQjAwMDAwNjUxODIxMEEwMDEyRDQwMDA1Mjg0MDAzRTAwMDA4NjcKLToxMEYzQzAwMDAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjhDQTIwMDAwQzAKLToxMEYzRDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMTJERTI0ODQwMDA0OEMKLToxMEYzRTAwMDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQjUKLToxMEYzRjAwMEFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGQjcKLToxMEY0MDAwMDI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4NzEKLToxMEY0MTAwMDAwMDAwMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMzAKLToxMEY0MjAwMDBFMDAxMUZFMDA4MDgwMjE5MzYyMDA3RDAyMDAyMDIxRTkKLToxMEY0MzAwMDM0NDIwMDIwMEUwMDEyMDdBMzYyMDA3RDAyMDAyMDIxNEEKLToxMEY0NDAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMEM5QjI3QkQwMDE4NUUKLToxMEY0NTAwMDMwODMwMEZGMzBBNTAwRkYzMEM2MDBGRjI3NDcwMTgwNDIKLToxMEY0NjAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDhGNDIwMTI4RDcKLToxMEY0NzAwMDM0NjM0MDAwQUNFMjAwMDAyNDAyMDAwMUFDRTAwMDA0NzAKLToxMEY0ODAwMEE0RTMwMDA4QTBFMjAwMEEyNDAyMDAwMkEwRTIwMDBCQUMKLToxMEY0OTAwMDNDMDIxMDAwQTRFNTAwMTBBQ0UwMDAyNEFDRTAwMDI4MjEKLToxMEY0QTAwMEE0RTYwMDEyMDNFMDAwMDhBRjQyMDFCODI3QkRGRkU4NjAKLToxMEY0QjAwMEFGQkYwMDEwOTM2MjAwM0YyNDAzMDAxMjMwNDIwMEZGRjAKLToxMEY0QzAwMDEwNDMwMDBEMDA4MDMwMjE4RjYyMDA0NDAwODIxMDIzMjEKLToxMEY0RDAwMDA0NDAwMDBBOEZCRjAwMTA4RjYyMDA0ODI0MDQwMDM5RTYKLToxMEY0RTAwMDAwMDAyODIxMDBDMjEwMjMwNDQxMDAwNDI0MDYwMDEyNTkKLToxMEY0RjAwMDBFMDAxMzAxMDAwMDAwMDA4RkJGMDAxMDI0MDIwMDAxNjUKLToxMEY1MDAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZDOEFGQjEwMDJDREQKLToxMEY1MTAwMDAwQTA4ODIxQUZCMjAwMzAyN0E1MDAxMDAwODA5MDIxMDQKLToxMEY1MjAwMDAyMjAyMDIxQUZCRjAwMzRBRkIwMDAyODBFMDAwQ0E0OTEKLToxMEY1MzAwMEFGQTAwMDEwMTA0MDAwMDkwMjQwMjAyMThFMjIwMDA4RDgKLToxMEY1NDAwMEFGNjIwMDg0MEUwMDEyRjJBRjYwMDA0MDI0MDQwMDM4NjUKLToxMEY1NTAwMDI0MDUwMDhEMEEwMDEzQ0QyNDA2MDAxMjkzNjIwMDNFOUMKLToxMEY1NjAwMDMwNDIwMDA4MTA0MDAwMEY4RkEyMDAxMDMwNDIwMTAwMEUKLToxMEY1NzAwMDEwNDAwMDA3OEZBMzAwMTQ4RjYyMDA2MDAwNjIxMDIzMDgKLToxMEY1ODAwMDA0NDMwMDA4QUY2MzAwNjAwQTAwMTM1NjAwMDAwMDAwNDcKLToxMEY1OTAwMEFGNjAwMDYwOTM2MjAwM0UyNDAzRkZGNzAwNDMxMDI0MzUKLToxMEY1QTAwMEEzNjIwMDNFOTM2MjAwM0UzMDQyMDAwODE0NDAwMDAyMTUKLToxMEY1QjAwMDI0MDYwMDAzMDAwMDMwMjE5MzYyMDAzNDkzNjMwMDM3NzcKLToxMEY1QzAwMDhGNjQwMDg0MzA0MjAwRkYzMDYzMDBGRjAwNjYxODIxMjIKLToxMEY1RDAwMDAwMDMxODgwMDA0MzI4MjEwMEE0MjAyQjEwODAwMDBCN0EKLToxMEY1RTAwMDAwMDAwMDAwOTc2MzAwM0M4RjYyMDA4NDMwNjNGRkZGREYKLToxMEY1RjAwMDAwNDUxMDIzMDA2MjE4MkIxNDYwMDAwNDAwMDAwMDAwNzYKLToxMEY2MDAwMDhGNjIwMDg0MEEwMDEzNzIwMDQ1ODAyMzk3NjIwMDNDRDkKLToxMEY2MTAwMDMwNTBGRkZGOEZBMzAwMTAzMDYyMDAwNDEwNDAwMDA0NDAKLToxMEY2MjAwMDAwMDYyODgwOEZBMjAwMUMwQTAwMTM3QTAyMDIxMDJCMDkKLToxMEY2MzAwMDJFMDIwMjE4NTA0MDAwMDMyNDAyMDIxODBBMDAxMzgzMEQKLToxMEY2NDAwMDAyMDUxMDIzMzA2MzAwMDQxMDYwMDAwMzAwNDUxMDIzRkUKLToxMEY2NTAwMDhGQTIwMDFDMDA0NTEwMjMwMDQwODAyMTJDNDIwMDgwMTYKLToxMEY2NjAwMDU0NDAwMDAxMjQxMDAwODAwRTAwMTFGRTAyNDAyMDIxQjEKLToxMEY2NzAwMDI0MDIwMDAxQUY2MjAwMEM5MzYyMDAzRTAwMTAyMDQwQTMKLToxMEY2ODAwMDMwNDIwMDdGQTM2MjAwM0U4RTIyMDAwNDI0NDIwMDAxMkIKLToxMEY2OTAwMEFGNjIwMDQwQTc3MDAwM0M4RjYyMDA1MDk2MjMwMDBFQkUKLToxMEY2QTAwMDAwNDMxMDIxQUY2MjAwNTg4RjYyMDA1MDAwNDQxMDIxQzcKLToxMEY2QjAwMEFGNjIwMDVDOEUyMjAwMDRBRjYyMDAxODhFMjIwMDA4NDgKLToxMEY2QzAwMEFGNjIwMDFDOEZBMjAwMTAzMDQyMDAwODU0NDAwMDBBQjQKLToxMEY2RDAwMDkzQTIwMDIwQTM2MDAwMzY5MzYyMDAzNjI0MDNGRkRGNkMKLToxMEY2RTAwMEEzNjIwMDM1OTM2MjAwM0UwMDQzMTAyNEEzNjIwMDNFRjMKLToxMEY2RjAwMDBBMDAxM0FEOEUyMjAwMDhBMzYyMDAzNThFMjIwMDA4OTYKLToxMEY3MDAwMEFGNjIwMDRDOEY2MjAwMjQ4RjYzMDA0MDAwNDMxMDIxRTEKLToxMEY3MTAwMEFGNjIwMDQ4OTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGQjMKLToxMEY3MjAwMDE0NDMwMDEyMjQwM0ZGODAzQzAyMDgwMDhDNDIzMUEwRTUKLToxMEY3MzAwMDAyNDIxMDIxMDA0MzEwMjRBRjQyMDAyODNDMDIwODAwN0UKLToxMEY3NDAwMDhDNDIzMUEwOEUyNDAwMDgzQzAzMDAwQzAyNDIxMDIxQTAKLToxMEY3NTAwMDMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMUFDNDQwMEQ4MDYKLToxMEY3NjAwMDhFMjMwMDA4QUY4MjAwMjRBQzQzMDBEQzBFMDAxMjA3OTkKLToxMEY3NzAwMDAyNDAyMDIxMjQwNDAwMzgwMDAwMjgyMTI0MDYwMDBBMjkKLToxMEY3ODAwMDBFMDAxMzAxMDAwMDAwMDA4RkJGMDAzNDhGQjIwMDMwNjQKLToxMEY3OTAwMDhGQjEwMDJDOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4ODQKLToxMEY3QTAwMDI3QkQwMDM4MjdCREZGRThBRkJGMDAxMDkwQzcwMDBEOTAKLToxMEY3QjAwMDAwQzAyODIxMzBFNjAwMTAxMEMwMDAwQTMwRTIwMDA0MkEKLToxMEY3QzAwMDhDQTMwMDA4OEY2MjAwNTQxMDYyMDAwNjMwRTIwMDA0MkYKLToxMEY3RDAwMDE0NDAwMDE3OEZCRjAwMTAwMDAwMjAyMTBBMDAwRDEzRjUKLToxMEY3RTAwMDI3QkQwMDE4MTA0MDAwMEQzMEUzMDAxMjEwQzAwMDEwQkIKLToxMEY3RjAwMDhGQkYwMDEwOENBMzAwMDg4RjYyMDA1NDE0NjIwMDBEQUMKLToxMEY4MDAwMDI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDBFMDAxMzAxOTkKLToxMEY4MTAwMDI0MDYwMDEyMEEwMDEzRjk4RkJGMDAxMDI0MDIwMDEyMDAKLToxMEY4MjAwMDE0NjIwMDAzOEZCRjAwMTAwQTAwMTMyRjI3QkQwMDE4QjkKLToxMEY4MzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkY4REYKLToxMEY4NDAwMDI3NDIwMTgwQUZBMjAwMDAzMDhBMDBGRjhGNDIwMUI4M0EKLToxMEY4NTAwMDA0NDBGRkZFMDAwMDAwMDA4RjQ2MDEyODNDMDIwODAwMjMKLToxMEY4NjAwMDhDNDIzMUEwMjQwM0ZGODBBRjg2MDA0QzAwQzIxMDIxREYKLToxMEY4NzAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwMTcKLToxMEY4ODAwMDhGQTkwMDAwOEZBODAwMDAwMEMyMTAyMTMwNDIwMDdGMjUKLToxMEY4OTAwMDAzNDIxODIxM0MwMjAwMEEwMDYyMTgyMTk0NjQwMEQ0M0IKLToxMEY4QTAwMDhGQTcwMDAwOEZBNTAwMDAyNDAyMDAwMkFGODMwMDI0NzAKLToxMEY4QjAwMEEwQTIwMDBCOEZBMzAwMDAzNTQyNjAwMDMwODRGRkZGNDAKLToxMEY4QzAwMEE0RTIwMDA4M0MwMjEwMDBBRDI2MDAwMEFEMDQwMDA0RDQKLToxMEY4RDAwMEFDNjAwMDI0MjdCRDAwMDhBRjQyMDFCODAzRTAwMDA4NzcKLToxMEY4RTAwMDI0MDIwMDAxOEM4MjAwMDQ4RjgzMDAyNDAwNDUxMDIzMzEKLToxMEY4RjAwMEFDODIwMDA0OTA2MjAwNjMzMDQyMDA3RkEwNjIwMDYzMkIKLToxMEY5MDAwMDhDODIwMDIwOTM4MzAwMkM4Rjg1MDAyNDM0NDIwMDAyRDcKLToxMEY5MTAwMEFGODMwMDQwQTc4MDAwM0VBQzgyMDAyMEE0QTAwMEU0OUEKLToxMEY5MjAwMDkwQTIwMDYzMjQwM0ZGQkYwMDQzMTAyNDAzRTAwMDA4RkIKLToxMEY5MzAwMEEwQTIwMDYzMjc0MzAxODA4RjQyMDFCODA0NDBGRkZFNkMKLToxMEY5NDAwMDhGODIwMDRDQUM2MjAwMDA4RjQyMDEyNEFDNjIwMDA0NDQKLToxMEY5NTAwMDI0MDI2MDgzQTQ2MjAwMDgyNDAyMDAwMkEwNjIwMDBCNUIKLToxMEY5NjAwMDNDMDIxMDAwMDNFMDAwMDhBRjQyMDFCODhGODgwMDQwNUQKLToxMEY5NzAwMDkzODIwMDJDOEY4MzAwMjQzQzA3MDgwMDI0RTc3NUFDOTkKLToxMEY5ODAwMDAwNDgxMDIzMzA0MjAwRkYzMDQ5MDBGQzI0NjUwMDg4MDUKLToxMEY5OTAwMDhGODYwMDQ0MzA0QTAwMDMxMTIwMDAwOTAwMDAyMDIxMTYKLToxMEY5QTAwMDI0ODIwMDA0OENBMzAwMDAzMDQ0MDBGRjAwODkxMDJBNDgKLToxMEY5QjAwMEFDRTMwMDAwMjRBNTAwMDQxNDQwRkZGOTI0RTcwMDA0OTAKLToxMEY5QzAwMDExNDAwMDA5MDAwMDIwMjEyNDgyMDAwMTkwQTMwMDAwQzIKLToxMEY5RDAwMDMwNDQwMEZGMDA4QTEwMkJBMEUzMDAwMDI0QTUwMDAxQTIKLToxMEY5RTAwMDE0NDBGRkY5MjRFNzAwMDEzMEMyMDAwMzE0NDAwMDA0NzIKLToxMEY5RjAwMDhGODUwMDQwMzEwMjAwMDMxMDQwMDAwRDAwMDAwMDAwMjAKLToxMEZBMDAwMDEwQTAwMDA5MDAwMDIwMjEyNDgyMDAwMTkwQzMwMDAwMDIKLToxMEZBMTAwMDMwNDQwMEZGMDA4NTEwMkJBMEUzMDAwMDI0QzYwMDAxNDUKLToxMEZBMjAwMDE0NDBGRkY5MjRFNzAwMDEwM0UwMDAwODAwMDAwMDAwOTMKLToxMEZBMzAwMDExMDBGRkZEMDAwMDIwMjEyNDgyMDAwNDhDQzMwMDAwN0YKLToxMEZBNDAwMDMwNDQwMEZGMDA4ODEwMkJBQ0UzMDAwMDI0QzYwMDA0MDMKLToxMEZBNTAwMDE0NDBGRkY5MjRFNzAwMDQwM0UwMDAwODAwMDAwMDAwNjAKLToxMEZBNjAwMDhGODMwMDQwOTM4MjAwMkMzMEM2MDBGRjMwQTUwMEZGM0EKLToxMEZBNzAwMDAwNDMxMDIzMzA0MzAwRkY4RjgyMDAyNDAwODAzODIxOTAKLToxMEZBODAwMDAwNDMxMDIxMTRDMDAwMDIyNDQ4MDA4ODAwODMzODIxNUMKLToxMEZBOTAwMDMwRTIwMDAzMTQ0MDAwMDUzMEEyMDAwMzE0NDAwMDAzQ0MKLToxMEZBQTAwMDMwNjIwMDAzMTA0MDAwMEQwMDAwMDAwMDEwQTAwMDA5QUIKLToxMEZBQjAwMDAwMDAyMDIxMjQ4MjAwMDE5MEUzMDAwMDMwNDQwMEZGNzgKLToxMEZBQzAwMDAwODUxMDJCQTEwMzAwMDAyNEU3MDAwMTE0NDBGRkY5N0EKLToxMEZBRDAwMDI1MDgwMDAxMDNFMDAwMDgwMDAwMDAwMDEwQTBGRkZENjEKLToxMEZBRTAwMDAwMDAyMDIxMjQ4MjAwMDQ4Q0UzMDAwMDMwNDQwMEZGNDkKLToxMEZBRjAwMDAwODUxMDJCQUQwMzAwMDAyNEU3MDAwNDE0NDBGRkY5M0IKLToxMEZCMDAwMDI1MDgwMDA0MDNFMDAwMDgwMDAwMDAwMDI3QkRGRkY4RkUKLToxMEZCMTAwMDI0MDJGRkZGQUZBMjAwMDAwMDgwMzgyMTI0MDUwMDJGM0YKLToxMEZCMjAwMDNDMDkwODAwMjUyOTcxQUMyNDA4MDBGRjI0MDZGRkZGQ0EKLToxMEZCMzAwMDkwRTIwMDAwMjRBM0ZGRkYwMDA2MjIwMjAwQzIxMDI2NkMKLToxMEZCNDAwMDMwNDIwMEZGMDAwMjEwODAwMDQ5MTAyMThDNDIwMDAwNkEKLToxMEZCNTAwMDMwNjUwMEZGMjRFNzAwMDExNEE4RkZGNTAwODIzMDI2N0QKLToxMEZCNjAwMDAwMDYxMDI3QUZBMjAwMDRBRkEyMDAwMDAwMDAyODIxNjkKLToxMEZCNzAwMDI3QTYwMDA0MDBDNTEwMjM5MDQ0MDAwMzI0QTIwMDAxMUUKLToxMEZCODAwMDAwQkQxODIxMzA0NTAwRkYyQ0EyMDAwNDE0NDBGRkY5RUQKLToxMEZCOTAwMEEwNjQwMDAwOEZBMjAwMDAwM0UwMDAwODI3QkQwMDA4NTkKLToxMEZCQTAwMDAwODA0ODIxMzBBQUZGRkYzMEM2MDBGRjMwRTdGRkZGOEEKLToxMEZCQjAwMDI3NDgwMTgwOEY0MjAxQjgwNDQwRkZGRThGODIwMDRDMkQKLToxMEZCQzAwMEFEMDIwMDAwOEY0MjAxMjRBRDAyMDAwNDhEMjIwMDIwMEUKLToxMEZCRDAwMEE1MDcwMDA4QTEwMjAwMEEyNDAyMDAxNkExMDIwMDBCREEKLToxMEZCRTAwMDkzNDMwMTIwOEQyMjAwMDg4RDI0MDAwNDMwNjMwMEZGMjAKLToxMEZCRjAwMDAwNDMxMDIxOTc4MzAwM0UwMDQ0MTAyMThEMjUwMDI0RUUKLToxMEZDMDAwMDAwNDMxMDIzM0MwMzA4MDA4QzYzMzFBMDhGODQwMDI0NDAKLToxMEZDMTAwMEE1MDIwMDBDMjQ2MzAwRTgyNDAyRkZGRkE1MEEwMDBFRTEKLToxMEZDMjAwMEE1MDMwMDEwQTUwNjAwMTJBRDA1MDAxOEFEMDIwMDI0QzIKLToxMEZDMzAwMDk0ODIwMTE0MjQwM0ZGRjczMDQyRkZGRkFEMDIwMDI4MzUKLToxMEZDNDAwMDhDODIwMTE4QUQwMjAwMkMzQzAyMTAwMEFEMDAwMDMwODcKLToxMEZDNTAwMEFGNDIwMUI4OEQyMjAwMjAwMDQzMTAyNDAzRTAwMDA4QzkKLToxMEZDNjAwMEFEMjIwMDIwOEY4MjAwMjQzMEU3RkZGRjAwODA0ODIxNzIKLToxMEZDNzAwMDkwNDIwMEQzMzBBNUZGRkYzMEM2MDBGRjAwMDIxMTAwMDQKLToxMEZDODAwMDMwNDIwRjAwMDBFMjM4MjUyNzQ4MDE4MDhGNDIwMUI4M0EKLToxMEZDOTAwMDA0NDBGRkZFOEY4MjAwNENBRDAyMDAwMDhGNDIwMTI0MjEKLToxMEZDQTAwMEFEMDIwMDA0OEQyMjAwMjBBNTA3MDAwOEExMDIwMDBBNzEKLToxMEZDQjAwMDI0MDIwMDE3QTEwMjAwMEI5MzQzMDEyMDhEMjIwMDA4QUIKLToxMEZDQzAwMDhEMjQwMDA0MzA2MzAwRkYwMDQzMTAyMTk3ODMwMDNFMjEKLToxMEZDRDAwMDAwNDQxMDIxOEY4NDAwMjQwMDQzMTAyMzNDMDMwODAwQkIKLToxMEZDRTAwMDhDNjMzMUEwQTUwMjAwMENBNTA1MDAwRTI0NjMwMEU4N0EKLToxMEZDRjAwMEE1MDMwMDEwQTUwNjAwMTJBRDAwMDAxNDhEMjIwMDI0RkIKLToxMEZEMDAwMEFEMDIwMDE4OEM4MjAwNUNBRDAyMDAxQzhDODIwMDU4OTEKLToxMEZEMTAwMEFEMDIwMDIwMjQwMkZGRkZBRDAyMDAyNDk0ODIwMEU2MjEKLToxMEZEMjAwMDMwNDJGRkZGQUQwMjAwMjg5NDgyMDA2MDk0ODMwMEJFNDEKLToxMEZEMzAwMDMwNDI3RkZGMzA2M0ZGRkYwMDAyMTIwMDAwNDMxMDIxQkEKLToxMEZENDAwMEFEMDIwMDJDM0MwMjEwMDBBRDAwMDAzMEFGNDIwMUI4MDMKLToxMEZENTAwMDk0ODIwMEJFMjQwM0ZGRjcwMEEyMTAyMUE0ODIwMEJFRkIKLToxMEZENjAwMDhEMjIwMDIwMDA0MzEwMjQwM0UwMDAwOEFEMjIwMDIwNzMKLToxMEZENzAwMDI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDE4OEYKLToxMEZEODAwMEFDNjQwMDAwQTA2MjAwMEI4RjgyMDAyNDk0NDIwMEU2NjUKLToxMEZEOTAwMEE0NjIwMDEwM0MwMjEwMDBBQzYwMDAzMDAzRTAwMDA4RDgKLToxMEZEQTAwMEFGNDIwMUI4Mjc0MzAxODA4RjQyMDFCODA0NDBGRkZFRjMKLToxMEZEQjAwMDhGODIwMDI4OTQ0MjAwMUMzMDQyRkZGRjAwMDIxMUMwRDUKLToxMEZEQzAwMEFDNjIwMDAwMjQwMjAwMTlBMDYyMDAwQjNDMDIxMDAwOEIKLToxMEZERDAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCODhGODcwMDMwMEMKLToxMEZERTAwMDMwQzMwMEZGOEY0MjAxQjgwNDQwRkZGRThGODIwMDRDRjkKLToxMEZERjAwMDM0NjM2MDAwQUNBMjAwMDA5MzgyMDA0OEEwQTIwMDA1MUEKLToxMEZFMDAwMDhDRTIwMDEwQTRBMjAwMDZBNEEzMDAwODhDODIwMDIwQUIKLToxMEZFMTAwMDI0MDNGRkY3QTBBMjAwMEEyNDAyMDAwMkEwQTIwMDBCMDQKLToxMEZFMjAwMDhDRTIwMDAwQUNBMjAwMTA4Q0UyMDAwNEFDQTIwMDE0MzIKLToxMEZFMzAwMDhDRTIwMDFDQUNBMjAwMjQ4Q0UyMDAyMEFDQTIwMDI4QzIKLToxMEZFNDAwMDhDRTIwMDJDQUNBMjAwMkM4QzgyMDAyNEFDQTIwMDE4MDYKLToxMEZFNTAwMDNDMDIxMDAwQUY0MjAxQjg4QzgyMDAyMDAwNDMxMDI0MDUKLToxMEZFNjAwMDAzRTAwMDA4QUM4MjAwMjA5MzgyMDA0ODI0MDMwMDAxRDQKLToxMEZFNzAwMDI3QkRGRkU4MDA0MzMwMDQyQzQyMDAyMEFGQjAwMDEwNDMKLToxMEZFODAwMEFGQkYwMDE0MjQxMEZGRkUxMDQwMDAwNTI3NDUwMTgwN0QKLToxMEZFOTAwMDNDMDIwODAwOEM0MjMxOTAwQTAwMTU5ODAwNDYxMDI0NUMKLToxMEZFQTAwMDNDMDIwODAwOEM0MjMxOTQwMDQ2MTAyNDE0NDAwMDA3QTQKLToxMEZFQjAwMDI0MDYwMDg0OEY4MzAwMjQyNDEwRkZGRjkwNjIwMDYyRDgKLToxMEZFQzAwMDMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjBFMDAxNTY0MTAKLToxMEZFRDAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwM0UKLToxMEZFRTAwMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAyODI3QkRGRkUwMkUKLToxMEZFRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDMUMKLToxMEZGMDAwMDkwNjIwMDBEMDBBMDkwMjEzMEQxMDBGRjMwNDIwMDdGQjAKLToxMEZGMTAwMEEwNjIwMDBEOEY4NTAwMjQ4RTQzMDAxODAwODA4MDIxOTAKLToxMEZGMjAwMDhDQTIwMDdDMTQ2MjAwMDUyNDAyMDAwRTkwQTIwMDYzRTMKLToxMEZGMzAwMDM0NDIwMDIwMEEwMDE1QzFBMEEyMDA2MzBFMDAxNTg3RkMKLToxMEZGNDAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDA0NzI0MDRGRkZGNUYKLToxMEZGNTAwMDUyMjAwMDQ1MDAwMDIwMjE4RTQzMDAwMDNDMDIwMDEwOEEKLToxMEZGNjAwMDAwNjIxMDI0NTA0MDAwMDQzQzAyMDAwODAyMDAyMDIxREUKLToxMEZGNzAwMDBBMDAxNUQwMjQwMjAwMTUwMDYyMTAyNDUwNDAwMDA5MjgKLToxMEZGODAwMDhFNDUwMDAwMDIwMDIwMjEyNDAyMDAxNDBFMDAxNTg3NzcKLToxMEZGOTAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGMjMKLToxMEZGQTAwMDhFNDUwMDAwM0MwMjAwMDIwMEEyMTAyNDEwNDAwMDE2MDIKLToxMEZGQjAwMDNDMDIwMDA0OEY4NjAwMjg4Q0MyMDAxNDhDQzMwMDEwMDEKLToxMEZGQzAwMDhDQzQwMDE0MDA0MzEwMjMwMDQ0MTAyQjUwNDAwMDA1NDMKLToxMEZGRDAwMDAyMDAyMDIxOEU0MzAwMkM4Q0MyMDAxMDEwNjIwMDAzMEUKLToxMEZGRTAwMDAyMDAyMDIxMEEwMDE2MDEyNDAyMDAxMjNDMDIwMDA0MzMKLToxMEZGRjAwMDAwQTIxMDI0NTA0MDAwMUMwMDAwMjAyMTAyMDAyMDIxRkIKLTowMjAwMDAwNDAwMDFGOQotOjEwMDAwMDAwMEEwMDE2MDEyNDAyMDAxMzAwQTIxMDI0MTA0MDAwMDY2QQotOjEwMDAxMDAwOEY4MzAwMjg4QzYyMDAxMDUwNDAwMDEzMDAwMDIwMjFDNAotOjEwMDAyMDAwMEEwMDE1RkIwMjAwMjAyMThDNjIwMDEwNTA0MDAwMDRFMQotOjEwMDAzMDAwOEU0MjAwMkMwMjAwMjAyMTBBMDAxNjAxMjQwMjAwMTEyOQotOjEwMDA0MDAwNTA0MDAwMDkwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMTc1NgotOjEwMDA1MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMDIwRgotOjEwMDA2MDAwMjQwNEZGRkYwMDAwMjAyMThGQkYwMDFDOEZCMjAwMTg2NgotOjEwMDA3MDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg0MQotOjEwMDA4MDAwMjdCRDAwMjA5MzgzMDAyQzI3QkRGRkUwMjQwMjAwMzQwRAotOjEwMDA5MDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTA3QQotOjEwMDBBMDAwMDA4MDg4MjExNDYyMDAwQzAwQTA5MDIxOEY4NDAwMzAxMQotOjEwMDBCMDAwMEUwMDE0QjA4QzkwMDAzMDEyMDIwMDA3MjQwMjAwMDVEQwotOjEwMDBDMDAwMDIyMDIwMjEwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkY5MQotOjEwMDBEMDAwMTA0MzAwNUYyNDA0RkZGRjkyNDIwMDA0MTA0MDAwMDkxNwotOjEwMDBFMDAwOEY4MjAwMjQwMjIwMjAyMTI0MDIwMDBDMEUwMDE1ODc5QwotOjEwMDBGMDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDU1MjQwNEZGRkZBMAotOjEwMDEwMDAwOEY4MjAwMjRBMzgwMDAyMDhFNDMwMDA0OEM0NDAwODA1MgotOjEwMDExMDAwM0MwMjAwRkYzNDQyRkZGRjAwNjIxODI0MDA4MzIwMkJDMgotOjEwMDEyMDAwMTA4MDAwMDhBRjgzMDAzODAyMjAyMDIxMjQwMjAwMTkyQgotOjEwMDEzMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNDRFQwotOjEwMDE0MDAwMjQwNEZGRkY5NzgyMDAzRThGODcwMDQwOEY4ODAwMzg4RAotOjEwMDE1MDAwMDA0NzEwMjMxMTAwMDAzOUE3ODIwMDNFOEY4NjAwMjQzQgotOjEwMDE2MDAwMzA0NUZGRkY4Rjg0MDA0QzkwQzMwMEJDM0MwMjA4MDA2OAotOjEwMDE3MDAwOEM0MjMxQTAwMDAzMTg4MjMwNzAwMDAxMDA4MjIwMjFERgotOjEwMDE4MDAwMDAxMDEwODAwMTAyMTAyMTAwQTIyODJCMTBBMDAwMTBFNgotOjEwMDE5MDAwMjQ4MjAwODg4Rjg0MDAzMDEwODIwMDBEM0MwMzNGMDFEMAotOjEwMDFBMDAwOEU0MjAwMDAwMDQzMTAyNDNDMDMyNTAwMTQ0MzAwMDY0NwotOjEwMDFCMDAwMzBFNTAwRkY4QzgyMDAwMEFDQzIwMDg4OEM4MjAwMTAwOQotOjEwMDFDMDAwMEEwMDE2NjFBQ0MyMDA5ODBFMDAxNDg1MDAwMDMwMjFCMAotOjEwMDFEMDAwOEY4NTAwMzg5MzgzMDAyMDhGODYwMDI0MzBBMjAwMDM4RgotOjEwMDFFMDAwMDAwMjEwMjMzMDQyMDAwMzAwNDMzODIxQTM4NzAwMjA3RgotOjEwMDFGMDAwOTRDNDAwRTQwMEEyMjgyMThGODMwMDQwOEY4MjAwNDQzMQotOjEwMDIwMDAwMzQ4NDEwMDBBNEM0MDBFNDAwNDMxMDIxQUY4MjAwNDRGMQotOjEwMDIxMDAwMTIwMDAwMEVBRjg1MDA0MDI0RTIwMDA0QTM4MjAwMjBGQgotOjEwMDIyMDAwOTRDMjAwRTQyNEEzMDAwNEFGODMwMDQwMzQ0MjIwMDBDMQotOjEwMDIzMDAwQTRDMjAwRTQwQTAwMTY4MTAwMDAyMDIxOEY4MjAwNDQzRAotOjEwMDI0MDAwQUY4MDAwNDAwMDQ3MTAyMUFGODIwMDQ0MDAwMDIwMjExMQotOjEwMDI1MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzOAotOjEwMDI2MDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY4NjAwMjRCNQotOjEwMDI3MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOTBDMjAwNjMwRAotOjEwMDI4MDAwMzA0MjAwMjAxMDQwMDAwODMwQTUwMEZGOENDMjAwN0NFNgotOjEwMDI5MDAwMjQwM0ZGREYyNDQyMDAwMUFDQzIwMDdDOTBDMjAwNjM1MwotOjEwMDJBMDAwMDA0MzEwMjRBMEMyMDA2MzEwQTAwMDIzOEY4MzAwMjQwOQotOjEwMDJCMDAwMjc1MDAxODAwMjAwMjgyMTBFMDAxNTY0MjQwNjAwODJDOAotOjEwMDJDMDAwOEY4MjAwMjQ5MDQyMDA2MzMwNDIwMDQwNTA0MDAwMTk2OQotOjEwMDJEMDAwQTM4MDAwNDg4RjgzMDAzMDhGNDIwMUI4MDQ0MEZGRkVBNgotOjEwMDJFMDAwOEY4MjAwNENBRTAyMDAwMDI0MDI2MDgyQTYwMjAwMDg0OQotOjEwMDJGMDAwMjQwMjAwMDJBMjAyMDAwQjhDNjIwMDA4QUUwMjAwMTA3MQotOjEwMDMwMDAwOEM2MjAwMENBRTAyMDAxNDhDNjIwMDE0QUUwMjAwMTg2NQotOjEwMDMxMDAwOEM2MjAwMThBRTAyMDAyNDhDNjIwMDI0QUUwMjAwMjgxOQotOjEwMDMyMDAwOEM2MjAwMjhBRTAyMDAyQzNDMDIxMDAwQUY0MjAxQjhFMwotOjEwMDMzMDAwQTM4MDAwNDg4RjgzMDAyNDhGQkYwMDE0OEZCMDAwMTA2QgotOjEwMDM0MDAwOTA2MjAwNjMyN0JEMDAxODMwNDIwMDdGQTA2MjAwNjMwNgotOjEwMDM1MDAwOTc4MjAwM0U4Rjg2MDA0MDhGODUwMDI0OTM4MzAwMkM3NwotOjEwMDM2MDAwMDA0NjEwMjNBNzgyMDAzRUE0QTAwMEU0OTBBNDAwNjNFRQotOjEwMDM3MDAwOEY4MjAwNDRBRjgzMDA0MDI0MDNGRkJGMDA0NjEwMjE1QQotOjEwMDM4MDAwMDA4MzIwMjRBRjgyMDA0NEEwQTQwMDYzOEY4MjAwMjQ1NQotOjEwMDM5MDAwQTA0MDAwQkQ4RjgyMDAyNDAzRTAwMDA4QTQ0MDAwQkVGRQotOjEwMDNBMDAwOEY4QTAwMjQyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTA2QQotOjEwMDNCMDAwOEY4ODAwNDBBRkJGMDAxODkzODkwMDIwOTU0MjAwRTQ2OQotOjEwMDNDMDAwMzBEMTAwRkYwMTA5MTgyQjAwODA4MDIxMzBBQzAwRkZFNAotOjEwMDNEMDAwMzA0N0ZGRkYwMDAwNTgyMTE0NjAwMDAzMzEwNjAwRkY4MgotOjEwMDNFMDAwMDEyMDMwMjEwMTA5NTgyMzk3ODMwMDNFMDA2ODEwMkIxQgotOjEwMDNGMDAwMTQ0MDAwMzIwMDAwMDAwMDE0NjgwMDA3MjQwMjAwMDFDRAotOjEwMDQwMDAwOEUwMjAwMjAyNDAzRkZGQjM0RTc4MDAwMDA0MzEwMjQwOQotOjEwMDQxMDAwQUUwMjAwMjAyNDAyMDAwMTM0RTcwODgwMTU4MjAwMDVBNgotOjEwMDQyMDAwMzE2NUZGRkYwRTAwMTRENTAyMDAyMDIxMEEwMDE3MTZDNwotOjEwMDQzMDAwMDIwMDIwMjEwRTAwMTUwNjAyMDAyMDIxMEUwMDE1NDlBMQotOjEwMDQ0MDAwOEY4NDAwNEM4Rjg0MDAyNDk0ODIwMDYwMjQ0MjAwMDEzOQotOjEwMDQ1MDAwQTQ4MjAwNjA5NDgyMDA2MDNDMDMwODAwOEM2MzMxODhCMQotOjEwMDQ2MDAwMzA0MjdGRkY1NDQzMDAwRjAyMDAyMDIxOTQ4MjAwNjAzRAotOjEwMDQ3MDAwMjQwMzgwMDAwMDQzMTAyNEE0ODIwMDYwOTA4MjAwNjA2NgotOjEwMDQ4MDAwOTA4MzAwNjAzMDQyMDBGRjAwMDIxMUMyMDAwMjEwMjc3QQotOjEwMDQ5MDAwMDAwMjExQzAzMDYzMDA3RjAwNjIxODI1QTA4MzAwNjA1NQotOjEwMDRBMDAwMDIwMDIwMjEwMjIwMjgyMThGQkYwMDE4OEZCMTAwMTRFNAotOjEwMDRCMDAwOEZCMDAwMTAwQTAwMTY4ODI3QkQwMDIwOTE0MjAwNjMwQgotOjEwMDRDMDAwMjQwM0ZGODAwMDQzMTAyNUExNDIwMDYzOTc4MjAwM0U3MQotOjEwMDREMDAwMzA0OEZGRkYxMTAwMDAyMDkzODMwMDIwOEY4NDAwMjQwOAotOjEwMDRFMDAwMDA0QjEwMjMzMDQ2MDBGRjk0ODMwMEU0MjQwMkVGRkYwQQotOjEwMDRGMDAwMDE2ODI4MkIwMDYyMTgyNEE0ODMwMEU0MTRBMDAwMDNFMAotOjEwMDUwMDAwOEUwMjAwMjAwMTAwNTgyMTAwMDAzMDIxMjQwM0ZGRkI0RgotOjEwMDUxMDAwMzRFNzgwMDAwMDQzMTAyNEFFMDIwMDIwMjQwMjAwMDFEMgotOjEwMDUyMDAwMTU4MjAwMDUzMTY1RkZGRjBFMDAxNEQ1MDIwMDIwMjE2MQotOjEwMDUzMDAwMEEwMDE3M0U5NzgzMDAzRTBFMDAxNTA2MDIwMDIwMjE5OAotOjEwMDU0MDAwOTc4MzAwM0U4RjgyMDA0MEE3ODAwMDNFMDA0MzEwMjMyNwotOjEwMDU1MDAwQUY4MjAwNDA5MzgzMDAyMDhGODIwMDI0OEZCRjAwMTg1OQotOjEwMDU2MDAwOEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwMDNFMDAwMDhGOQotOjEwMDU3MDAwQTA0MzAwQkQ4RjgyMDAyNDkwNDMwMDg4OTA0NTAwQkRCOQotOjEwMDU4MDAwMjQ0OTAwODgzMDYzMDAzRjI0NjNGRkUwMjQwMjAwMDExNwotOjEwMDU5MDAwMDA2MjM4MDQyQzYzMDAyMDMwRTgwMDE5QTM4NTAwMjA5NQotOjEwMDVBMDAwMTA2MDAwMTBBRjg5MDAzMDNDMDI4MDAwMzQ0MjAwMDIyRAotOjEwMDVCMDAwMjQwNTAwMDEyNDA2MDAwMTE1MDAwMDA4MDBFMjE4MjRBQgotOjEwMDVDMDAwMDAwMDI4MjExNDYwMDAwNTMwRTIwMDIwMTA0MDAwMDVFMgotOjEwMDVEMDAwMjQwNTAwMDE5MTI2MDAwMTMwQzYwMDAxMEEwMDE2RDU0RAotOjEwMDVFMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDg2NQotOjEwMDVGMDAwQUZCMDAwMTA4RjkwMDAzMEFGQjQwMDIwQUZCMTAwMTQ0NgotOjEwMDYwMDAwQUZCRjAwMjRBRkIzMDAxQ0FGQjIwMDE4OEUwNTAwMTBCRQotOjEwMDYxMDAwM0MwMjA4MDA4QzQyMzFCMDhGODYwMDM0MzBBMzNGRkY4QgotOjEwMDYyMDAwMDA2MjE4MkI4Q0QzMDAxNDAwODA4ODIxOENEMjAwMjAwQgotOjEwMDYzMDAwMTA2MDAwNzgwMDAwQTAyMTkwQzMwMDBEMjQwMkZGODAwQwotOjEwMDY0MDAwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDczMDIyMDIwMjE1QwotOjEwMDY1MDAwMDAwNTEzODIzMDQyMDAwMzU0NDAwMDZGMDIyMDIwMjEyNQotOjEwMDY2MDAwOTRDMzAwMUM4RjgyMDAyNDhFMDUwMDI4QTQ0MzAxMTQyQgotOjEwMDY3MDAwOENDMjAwMTAwMjYyMTgyMzE0NjUwMDA3MjQwMjAwMUZCOAotOjEwMDY4MDAwOEY4MjAwMzgwMDYyMTAyMTAyNjIxMDJCMTA0MDAwMDg5NwotOjEwMDY5MDAwOEY4MzAwMjgyNDAyMDAxODBFMDAxNTg3QTM4MjAwNDhDQgotOjEwMDZBMDAwMjQwM0ZGRkYxMDQzMDA2RjI0MDRGRkZGOEY4MzAwMjgwMwotOjEwMDZCMDAwOEY4NDAwMzg4QzYyMDAxMDAyNDQ5MDIxMDA0NDEwMjM4MwotOjEwMDZDMDAwQUM2MjAwMTA4RjgyMDAyNEFDNzIwMDIwOEM0MjAwNjg2MwotOjEwMDZEMDAwMDA1MjEwMkIxMDQwMDAwOThGODMwMDM0MDIyMDIwMjE4QgotOjEwMDZFMDAwMjQwMjAwMUQwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkY4QgotOjEwMDZGMDAwMTA0MzAwNUMyNDA0RkZGRjhGODMwMDM0OEUwMjAwMjQyQgotOjEwMDcwMDAwOEM2MzAwMjQxMDQzMDAwNzAyMjAyMDIxMjQwMjAwMUNENwotOjEwMDcxMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNTFGOQotOjEwMDcyMDAwMjQwNEZGRkY4Rjg0MDAyODhDODIwMDI0MjQ0MjAwMDFDRgotOjEwMDczMDAwQUM4MjAwMjQxMjUzMDAwNDhGODIwMDI0OEM0MjAwNjg5MwotOjEwMDc0MDAwNTY0MjAwMEU4RTAyMDAwMDhFMDIwMDAwM0MwMzAwODAyNAotOjEwMDc1MDAwMDA0MzEwMjQxNDQwMDAwRDI0MDIwMDFBMDIyMDIwMjExRQotOjEwMDc2MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwM0RCRAotOjEwMDc3MDAwMjQwNEZGRkYwQTAwMTdEMjhFMDIwMDE0M0MwMzAwODBGRAotOjEwMDc4MDAwMDA0MzEwMjQ1MDQwMDAwMzhFMDIwMDE0QUM4MDAwMjA2RgotOjEwMDc5MDAwOEUwMjAwMTQyNDEyRkZGRjEwNTIwMDA2MjQwMjAwMUJEOAotOjEwMDdBMDAwMDIyMDIwMjEwRTAwMTU4N0EzODIwMDQ4MTA1MjAwMkQ0MAotOjEwMDdCMDAwMjQwNEZGRkY4RTAzMDAwMDNDMDIwMDAxMDA2MjEwMjRBRAotOjEwMDdDMDAwMTA0MDAwMUYzQzAyMDA4MDAwNjIxMDI0MTQ0MDAwMDgwQQotOjEwMDdEMDAwMDIyMDIwMjEyNDAyMDAxQTBFMDAxNTg3QTM4MjAwNDg1RgotOjEwMDdFMDAwMjQwM0ZGRkYxMDQzMDAxRjI0MDRGRkZGMDIyMDIwMjFFOQotOjEwMDdGMDAwMDIwMDI4MjEwRTAwMTVBNzI0MDYwMDAxMjQwM0ZGRkY5NAotOjEwMDgwMDAwMjQwNEZGRkYxNDQzMDAwRTI0MTQwMDAxMEEwMDE4MDdGQgotOjEwMDgxMDAwOEZCRjAwMjQwMjIwMjAyMTI0MDIwMDBEOEZCRjAwMjQ1RQotOjEwMDgyMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ1QQotOjEwMDgzMDAwOEZCMDAwMTAyN0JEMDAyODBBMDAxNTg3QTM4MjAwNDg0QQotOjEwMDg0MDAwOEY4MzAwMjgwMjIwMjAyMTAyODAzMDIxOTQ2MjAwMzYwQwotOjEwMDg1MDAwMjQwNTAwMDEyNDQyMDAwMTBFMDAxNkQ1QTQ2MjAwMzZEMgotOjEwMDg2MDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUMxNAotOjEwMDg3MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFDQgotOjEwMDg4MDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDI0MjdCREZGRDg4MAotOjEwMDg5MDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQ2QQotOjEwMDhBMDAwQUZCMDAwMTBBRkJGMDAyNDkwNjIwMDYzOEY5MTAwMzBBMgotOjEwMDhCMDAwMjQxMkZGRkYzNDQyMDA0MDkyMjUwMDAwQTA2MjAwNjMzMgotOjEwMDhDMDAwOEUyMjAwMTAwMDgwOTgyMTMwQjAwMDNGMTA1MjAwMDZBOAotOjEwMDhEMDAwMDM2MEEwMjEyNDAyMDAwRDBFMDAxNTg3QTM4MjAwNDhBQQotOjEwMDhFMDAwMTA1MjAwNTIyNDA0RkZGRjhGODMwMDI0OEUyMjAwMTgzMAotOjEwMDhGMDAwOEM2MzAwN0MxMDQzMDAwNzAyNjAyMDIxMjQwMjAwMEU1QwotOjEwMDkwMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNDcxMQotOjEwMDkxMDAwMjQwNEZGRkYyNDA0MDAyMDEyMDQwMDA0OEY4MzAwMjQxOQotOjEwMDkyMDAwOTA2MjAwNjMzNDQyMDAyMEEwNjIwMDYzOEY4NTAwMzgyQgotOjEwMDkzMDAwMTBBMDAwMUUwMDAwMDAwMDU2MDQwMDA0OEY4MjAwMjQ1NgotOjEwMDk0MDAwMDI2MDIwMjEwQTAwMTg1MTI0MDIwMDBBOTY4MzAwMEEzRQotOjEwMDk1MDAwMjQwNEZGRkQ5NDQyMDA2MDMwNDJGRkZGMTA0MzAwMzQ0NgotOjEwMDk2MDAwOEZCRjAwMjQzQzAyMDgwMDhDNDIzMThDMDA0NTEwMkJDNAotOjEwMDk3MDAwMTQ0MDAwMDYwMjYwMjAyMTAwMDAyODIxMEUwMDE2RDUzOAotOjEwMDk4MDAwMjQwNjAwMDEwQTAwMTg3ODAwMDAyMDIxMjQwMjAwMkQwRQotOjEwMDk5MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMjNBNQotOjEwMDlBMDAwMjQwNEZGRkYwQTAwMTg3ODAwMDAyMDIxMTYwNDAwMDUyNwotOjEwMDlCMDAwOEY4NDAwMjQ4RTIzMDAxNDI0MDJGRkZGNTA2MjAwMTg0RAotOjEwMDlDMDAwMDI2MDIwMjE5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjAyMQotOjEwMDlEMDAwOTQ4MjAwNjAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkZDMgotOjEwMDlFMDAwNTQ0MzAwMEYwMjYwMjAyMTk0ODIwMDYwMjQwMzgwMDBBMQotOjEwMDlGMDAwMDA0MzEwMjRBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAxNQotOjEwMEEwMDAwMzA0MjAwRkYwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzA5NAotOjEwMEExMDAwMzA2MzAwN0YwMDYyMTgyNUEwODMwMDYwMDI2MDIwMjFGRgotOjEwMEEyMDAwMEUwMDE2ODgyNDA1MDAwMTAwMDAyMDIxOEZCRjAwMjQzRAotOjEwMEEzMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0OAotOjEwMEE0MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjhBRgotOjEwMEE1MDAwOEY4MzAwMjQyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTRBNAotOjEwMEE2MDAwOTA2MjAwNjM4Rjg3MDAzMDAwODA4MDIxMzQ0MjAwNDAxNAotOjEwMEE3MDAwOENFNjAwMTBBMDYyMDA2MzNDMDMwODAwOEM2MzMxQjA3OAotOjEwMEE4MDAwMzBDMjNGRkYwMDQzMTAyQjEwNDAwMDRFOEY4NTAwMzREMgotOjEwMEE5MDAwMjQwMkZGODA5MEEzMDAwRDAwNDMxMDI0MzA0MjAwRkY4OQotOjEwMEFBMDAwNTA0MDAwNDkwMjAwMjAyMTAwMDYxMzgyMzA0ODAwMDMxNAotOjEwMEFCMDAwMjQwMjAwMDI1NTAyMDA0NDAyMDAyMDIxOTRBMjAwMUNERQotOjEwMEFDMDAwOEY4NTAwMjQyNDAzMDAyM0E0QTIwMTE0OENFNjAwMDBENwotOjEwMEFEMDAwMDAwNjE2MDIzMDQyMDAzRjEwNDMwMDEwM0MwMzAwODMyMgotOjEwMEFFMDAwOENFMzAwMTg4Q0EyMDA3QzEwNjIwMDA2MjQwMjAwMEUyOQotOjEwMEFGMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMzgyRgotOjEwMEIwMDAwMjQwNEZGRkY4RjgzMDAyNDkwNjIwMDYzMzQ0MjAwMjA5RQotOjEwMEIxMDAwQTA2MjAwNjMwQTAwMThCRDhGODMwMDI4MDBDMzEwMjQ2MAotOjEwMEIyMDAwMTQ0MzAwMDc4RjgzMDAyODkwQTIwMDYyMzA0MjAwMEYxOAotOjEwMEIzMDAwMzQ0MjAwMjBBMEEyMDA2MkEzODgwMDNDOEY4MzAwMjhEQQotOjEwMEI0MDAwOTA2MjAwMEQzMDQyMDA3RkEwNjIwMDBEOEY4MzAwMzg1QwotOjEwMEI1MDAwMTA2MDAwMTgwMjAwMjAyMThGODQwMDM0OEM4MjAwMTA2NQotOjEwMEI2MDAwMDA0MzEwMkIxMDQwMDAwOTI0MDIwMDE4MDIwMDIwMjEyRAotOjEwMEI3MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMThDRQotOjEwMEI4MDAwMjQwNEZGRkYwQTAwMThFNTAwMDAyMDIxOEM4MjAwMTBEOQotOjEwMEI5MDAwMjQwNTAwMDEwMjAwMjAyMTAwNDMxMDIzOEY4MzAwMjgzOAotOjEwMEJBMDAwMjQwNjAwMDEwRTAwMTZENUFDNjIwMDEwMEEwMDE4RTVGQwotOjEwMEJCMDAwMDAwMDIwMjEwRTAwMTY4ODI0MDUwMDAxMEEwMDE4RTUxNwotOjEwMEJDMDAwMDAwMDIwMjEwMjAwMjAyMTI0MDIwMDBEOEZCRjAwMTQwQwotOjEwMEJEMDAwOEZCMDAwMTAyN0JEMDAxODBBMDAxNTg3QTM4MjAwNDhCNwotOjEwMEJFMDAwOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDhCOAotOjEwMEJGMDAwMjdCRDAwMTgyN0JERkZEOEFGQjAwMDEwOEY5MDAwMzA4MAotOjEwMEMwMDAwQUZCMzAwMUNBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRFQgotOjEwMEMxMDAwOEUxMjAwMTAzQzAzMDgwMDhDNjMzMUIwMzI0MjNGRkY1QgotOjEwMEMyMDAwMDA0MzEwMkIxMDQwMDA3QzAwODA5ODIxOEY4NTAwMzRGOQotOjEwMEMzMDAwMjQwMkZGODA5MEEzMDAwRDAwNDMxMDI0MzA0MjAwRkZFNwotOjEwMEM0MDAwNTA0MDAwNzYwMjYwMjAyMTAwMTIxMzgyMzA0MjAwMDNERgotOjEwMEM1MDAwMjQwMzAwMDE1NDQzMDA3MTAyNjAyMDIxOTBBMjAwMEQ4MgotOjEwMEM2MDAwMzA0MjAwMDg1NDQwMDAwMzhGODIwMDM4MEEwMDE5MTVGMgotOjEwMEM3MDAwMjQwMjAwMjQ1MDQwMDAwMzhFMDMwMDBDMEEwMDE5MTVDMgotOjEwMEM4MDAwMjQwMjAwMjc4Q0EyMDAyMDE0NjIwMDA1MjQwMjAwMjAwOAotOjEwMEM5MDAwOEUwMzAwMDg4Q0EyMDAyNDEwNjIwMDA4MjQwMjAwMjBBOQotOjEwMENBMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNkE0QgotOjEwMENCMDAwMjQwNEZGRkYwQTAwMTk0MDhGODQwMDI4OEUwMjAwMTRDQwotOjEwMENDMDAwMjQxMUZGRkYxNDUxMDAwMzhGODcwMDI0MEEwMDE5M0JGMQotOjEwMENEMDAwMjQwMjAwMjU4RTAzMDAxODhDRTIwMDdDMTQ2MjAwMTZBQQotOjEwMENFMDAwMjQwMjAwMEU4RTAzMDAyNDhDQTIwMDI4MTQ2MjAwMTIzRAotOjEwMENGMDAwMjQwMjAwMjE4RTA2MDAyODhDQTIwMDJDMTRDMjAwMEVCMwotOjEwMEQwMDAwMjQwMjAwMUY4RTAzMDAyQzEwNjAwMDBCMjQwMjAwMjMxRAotOjEwMEQxMDAwOENFMjAwNjgwMDQzMTAyQjE0NDAwMDA3MjQwMjAwMjZEOAotOjEwMEQyMDAwOENBMjAwMTQwMDY2MTgyMTAwNDMxMDJCNTA0MDAwMDdDRAotOjEwMEQzMDAwOEY4NDAwMjgyNDAyMDAyMjBFMDAxNTg3QTM4MjAwNDgxOQotOjEwMEQ0MDAwMTA1MTAwNDUyNDA0RkZGRjhGODQwMDI4MjQwM0ZGRjc3RgotOjEwMEQ1MDAwOTA4MjAwMEQwMDQzMTAyNEEwODIwMDBEOEY4NjAwMjQ5NQotOjEwMEQ2MDAwM0MwMzA4MDA4QzYzMzFBQzhGODIwMDRDOTRDNDAwRTBEQgotOjEwMEQ3MDAwOEY4NTAwMjgwMDQzMTAyMTMwODQ3RkZGMDAwNDIwNDAyRAotOjEwMEQ4MDAwMDA0NDEwMjEzMDQzMDA3RjAzNDMyMDIxM0MwMzAwMEUyOAotOjEwMEQ5MDAwMDA4MzIwMjEyNDAzRkY4MDAwNDMxMDI0QUY0MjAwMkM1NQotOjEwMERBMDAwQTQ5MjAwMDA4Q0EyMDAyODI0NDIwMDAxQUNBMjAwMjhEQQotOjEwMERCMDAwOENBMjAwMkM4RTAzMDAyQzAwNDMxMDIxQUNBMjAwMkMyRQotOjEwMERDMDAwOEUwMjAwMkNBQ0EyMDAzMDhFMDIwMDE0QUNBMjAwMzRDMwotOjEwMEREMDAwOTRBMjAwM0EyNDQyMDAwMUE0QTIwMDNBOTRDNjAwRTA4MgotOjEwMERFMDAwM0MwMjA4MDA4QzQyMzFCMDI0QzQwMDAxMzA4MzdGRkZGNAotOjEwMERGMDAwMTQ2MjAwMTMwMDgwMzAyMTI0MDI4MDAwMDA4MjMwMjQxRAotOjEwMEUwMDAwMzBDMkZGRkYwMDAyMTNDMjMwNDIwMEZGMDAwMjEwMjc3MQotOjEwMEUxMDAwMEEwMDE5N0QwMDAyMzNDMDAyNjAyMDIxMjQwMjAwMEQ2NwotOjEwMEUyMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0OQotOjEwMEUzMDAwOEZCMDAwMTAyN0JEMDAyODBBMDAxNTg3QTM4MjAwNDg0NAotOjEwMEU0MDAwOEY4MjAwMjQwMjYwMjAyMTI0MDUwMDAxMEUwMDE2ODhGNAotOjEwMEU1MDAwQTQ0NjAwRTAwMDAwMjAyMThGQkYwMDIwOEZCMzAwMUNCQgotOjEwMEU2MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFENQotOjEwMEU3MDAwMDNFMDAwMDgyN0JEMDAyODI3QkRGRkUwQUZCMTAwMTQ0NAotOjEwMEU4MDAwOEY5MTAwMzBBRkIwMDAxMEFGQkYwMDE4OEUyNjAwMTA1OQotOjEwMEU5MDAwM0MwMzA4MDA4QzYzMzFCMDMwQzIzRkZGMDA0MzEwMkI4RAotOjEwMEVBMDAwMTA0MDAwNUUwMDgwODAyMThGODUwMDM0MjQwMkZGODA4NgotOjEwMEVCMDAwOTBBMzAwMEQwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNTgyMgotOjEwMEVDMDAwMDIwMDIwMjE4RjgyMDAzODEwNDAwMDA4MDAwNjEzODJBMwotOjEwMEVEMDAwOEY4MjAwMjQ5NzYzMDAwQTI0MDRGRkZEOTQ0MjAwNjA3RgotOjEwMEVFMDAwMzA0MkZGRkYxMDQzMDA1NTAwMDYxMzgyMzA0MjAwMDNEQQotOjEwMEVGMDAwMTQ0MDAwMEUwMDAwMDAwMDkyMjIwMDAyMTA0MDAwMDU4NQotOjEwMEYwMDAwOEUyMzAwMjQ1MDYwMDAxNTkyMjMwMDAzMEEwMDE5QjZCNgotOjEwMEYxMDAwMDIwMDIwMjE4Q0EyMDAyNDUwNjIwMDEwOTIyMzAwMDNDMgotOjEwMEYyMDAwMDIwMDIwMjEwQTAwMTlCRTI0MDIwMDBGOTBBMjAwMEQyOQotOjEwMEYzMDAwMzA0MjAwMDg1NDQwMDAwOTkyMjMwMDAzMDIwMDIwMjE5RgotOjEwMEY0MDAwMjQwMjAwMTAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYyRgotOjEwMEY1MDAwMTA0MzAwM0EyNDA0RkZGRjkyMjMwMDAzMjQwMjAwMDJGRQotOjEwMEY2MDAwNTQ2MjAwMEM5MjIyMDAwMzhGODIwMDM4NTQ0MDAwMDkyMgotOjEwMEY3MDAwOTIyMjAwMDMwMjAwMjAyMTI0MDIwMDJDMEUwMDE1ODc3QgotOjEwMEY4MDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDJDMjQwNEZGRkYyQQotOjEwMEY5MDAwOTIyMjAwMDMwMjIwMjgyMTAyMDAyMDIxMzg0NjAwMTA1RQotOjEwMEZBMDAwMkNDNjAwMDEyQzQyMDAwMTBFMDAxNUE3MDA0NjMwMjU3QQotOjEwMEZCMDAwMjQxMUZGRkYxMDUxMDAyMTI0MDRGRkZGOEY4MzAwMzgwQwotOjEwMEZDMDAwMTA2MDAwMTIwMjAwMjAyMTNDMDIwODAwOEM0MjMxOEM4QgotOjEwMEZEMDAwMDA0MzEwMkIxNDQwMDAwNjAwMDAwMDAwMDAwMDI4MjFGMAotOjEwMEZFMDAwMEUwMDE2RDUyNDA2MDAwMTBBMDAxOUZDMDAwMDIwMjE3RAotOjEwMEZGMDAwMjQwMjAwMkQwRTAwMTU4N0EzODIwMDQ4MTA1MTAwMEYxNwotOjEwMTAwMDAwMjQwNEZGRkYwQTAwMTlGQzAwMDAyMDIxMEUwMDE2ODhBRQotOjEwMTAxMDAwMjQwNTAwMDEwQTAwMTlGQzAwMDAyMDIxMDIwMDIwMjEwMwotOjEwMTAyMDAwMjQwMjAwMEQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4NAotOjEwMTAzMDAwMjdCRDAwMjAwQTAwMTU4N0EzODIwMDQ4OEZCRjAwMTgzMwotOjEwMTA0MDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg2MQotOjEwMTA1MDAwMjdCRDAwMjA5MzgzMDAzQzI3QkRGRkUwMjQwMjAwMDI0RgotOjEwMTA2MDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMThFRQotOjEwMTA3MDAwMDAwMDgwMjExMDYyMDA4QzI0MDRGRkZEOTc4NTAwM0U1MwotOjEwMTA4MDAwOEY4MzAwNDAzMEEyRkZGRjAwNDMxMDJCNTQ0MDAwN0RBRgotOjEwMTA5MDAwOEY4NDAwNDQwRTAwMTQ0ODAwMDAwMDAwM0MwMjA4MDA0OQotOjEwMTBBMDAwMjQ0Mjc1QUMwMjIwMjAyMTAwNDAyODIxMEUwMDE2MEU5QgotOjEwMTBCMDAwQUY4MjAwMzAyNDA5RkZGRjEwNDkwMDdCMjQwNEZGRkZBQQotOjEwMTBDMDAwM0MwODA4MDA4RDA4NzVCQzNDMDIwODAwOEM0MjMxQjAxOQotOjEwMTBEMDAwM0MwMzA4MDA5MDYzNzVBQzMxMDQzRkZGMDA4MjEwMkI4NQotOjEwMTBFMDAwMTA0MDAwMUIzMDY3MDAzRjNDMDIwODAwOEM0MjMxQThEMgotOjEwMTBGMDAwOEY4MzAwNEMwMDA0MjE4MDAwNjIxODIxMDA2NDE4MjFCNQotOjEwMTEwMDAwMzA2MjAwN0YwMzQyMjgyMTNDMDIwMDBDMDBBMjI4MjEwQgotOjEwMTExMDAwM0MwMjAwODAzNDQyMDAwMTMwNjYwMDc4MDBDMjMwMjU3NQotOjEwMTEyMDAwMjQwMkZGODAwMDYyMTAyNEFGNDIwMDI4MzA2NDAwMDdEMAotOjEwMTEzMDAwQUY0MjA4MDQ4RjgyMDAyNDAzNDQyMDIxMjQ4NDA5NDAwNAotOjEwMTE0MDAwQUY0NjA4MTRBRjg1MDAyOEFGODQwMDM0QUM0MzAxMThDMwotOjEwMTE1MDAwOTM4MzAwM0MyNDAyMDAwMzE0NjIwMDNCMjQwMjAwMDEzQwotOjEwMTE2MDAwMjQwMjAwMjYxMEUyMDAzRDI4RTIwMDI3MTA0MDAwMTM3MAotOjEwMTE3MDAwMjQwMjAwMzIyNDAyMDAyMjEwRTIwMDM4MjhFMjAwMjM3OAotOjEwMTE4MDAwMTA0MDAwMDgyNDAyMDAyNDI0MDIwMDIwMTBFMjAwMjQ2MQotOjEwMTE5MDAwMjQwMjAwMjExMEUyMDAxRTAyMjAyMDIxMEEwMDFBN0JGNgotOjEwMTFBMDAwMjQwMjAwMEIxMEUyMDAyRDI0MDIwMDI1MTBFMjAwMTBBMgotOjEwMTFCMDAwMDIyMDIwMjEwQTAwMUE3QjI0MDIwMDBCMTBFMjAwMUFGMAotOjEwMTFDMDAwMjhFMjAwMzMxMDQwMDAwNjI0MDIwMDNGMjQwMjAwMzFEMAotOjEwMTFEMDAwMTBFMjAwMEIwMjIwMjAyMTBBMDAxQTdCMjQwMjAwMEJERgotOjEwMTFFMDAwMTBFMjAwMTEwMjIwMjAyMTBBMDAxQTdCMjQwMjAwMEJDOQotOjEwMTFGMDAwMEUwMDE3NjgwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjE2NAotOjEwMTIwMDAwMEUwMDE4RUEwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjFEMAotOjEwMTIxMDAwMEUwMDE5OEIwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjExRQotOjEwMTIyMDAwMTUwOTAwMEUwMDAwMDAwMDBFMDAxODBGMDIyMDIwMjFGQQotOjEwMTIzMDAwMEEwMDFBOTYwMDQwODAyMTBFMDAxNTg3QTM4MjAwNDhGQwotOjEwMTI0MDAwMEEwMDFBOTYwMDQwODAyMTE0NjIwMDE3MDIwMDIwMjEzMwotOjEwMTI1MDAwMjQwMjAwMjMxNEUyMDAwNTI0MDIwMDBCMEUwMDE4ODE3MgotOjEwMTI2MDAwMDIyMDIwMjEwQTAwMUE5NjAwNDA4MDIxMDIyMDIwMjExRAotOjEwMTI3MDAwQTM4MjAwNDgwRTAwMTU4NzI0MTBGRkZGMEEwMDFBOTc2QQotOjEwMTI4MDAwMDIwMDIwMjEzMEE1MDBGRjBFMDAxNDg1MjQwNjAwMDE3NQotOjEwMTI5MDAwOTc4MzAwM0U4RjgyMDA0MEE3ODAwMDNFMDA0MzEwMjNDQQotOjEwMTJBMDAwQUY4MjAwNDAwMjAwMjAyMThGQkYwMDE4OEZCMTAwMTREMAotOjEwMTJCMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjAzRgotOjEwMTJDMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTBGMgotOjEwMTJEMDAwOEY0NjAxMjgzQzAzMDgwMDhDNjMzMUEwMjQwMkZGODA2NAotOjEwMTJFMDAwQUY4NjAwNEMwMEMzMTgyMTMwNjUwMDdGMDM0NTI4MjFEQwotOjEwMTJGMDAwMDA2MjE4MjQzQzAyMDAwQUFGNDMwMDI0MDBBMjI4MjEwNwotOjEwMTMwMDAwOTBBMjAwNjIwMDgwODgyMUFGODUwMDI0MzA0MjAwRkY1NwotOjEwMTMxMDAwMDAwMjExMDJBMzgyMDAzQzkwQTIwMEJDMzA0MjAwMDJGNQotOjEwMTMyMDAwMTQ0MDAwMDIyNDAzMDAzNDI0MDMwMDMwOEY4MjAwMjQ4MAotOjEwMTMzMDAwQTM4MzAwMkM5MzgzMDAzQzhDNDIwMEMwQTM4MDAwNDgxMAotOjEwMTM0MDAwQUY4MjAwNDAyNDAyMDAwNDEwNjIwMDMwOEY4NDAwNDAwRAotOjEwMTM1MDAwOEUyNDAwMDQ1MDgwMDAyRDhGODQwMDQwOEUyMjAwMTBDNwotOjEwMTM2MDAwMzA4M0ZGRkZBNzg0MDAzRTEwNjAwMDFGQUY4MjAwNDQ1RgotOjEwMTM3MDAwOEY4MzAwMjQyNDA1RkY4MDAyMjAyMDIxOTA2MjAwNjNENwotOjEwMTM4MDAwMDBBMjEwMjQzMDQyMDBGRjE0NDAwMDBEMDAwMDAwMDBCNQotOjEwMTM5MDAwMEUwMDFBMDI5NzkwMDAzRTEwNDAwMDEwMDA0MDE4MjFFNQotOjEwMTNBMDAwMjQwMkZGRkQ1NDYyMDAxMThFMjMwMDIwMDIwMDI4MjEzOAotOjEwMTNCMDAwMEUwMDE0MjYwMjIwMjAyMTBBMDAxQUU4OEUyMzAwMjBBNQotOjEwMTNDMDAwOTA2MjAwNjMwMEEyMTAyNDMwNDIwMEZGMTA0MDAwMDMyRQotOjEwMTNEMDAwMDIyMDIwMjEwRTAwMTc0QTAwMDAwMDAwOTc4MjAwM0VFNAotOjEwMTNFMDAwMTQ0MEZGRTQ4RjgzMDAyNDhFMjMwMDIwMzA2MjAwMDQyOQotOjEwMTNGMDAwMTA0MDAwMDY4Rjg0MDA0MDI0MDJGRkZCMDA2MjEwMjQ4RQotOjEwMTQwMDAwMEUwMDE0M0FBRTIyMDAyMDhGODQwMDQwOEY4MzAwMjQwNwotOjEwMTQxMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDE5QwotOjEwMTQyMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjQwMEMwMzBBNTAwRkYyOQotOjEwMTQzMDAwMjQwMzAwMDEyNEE5MDAwMTAwNjkxMDJCMTA0MDAwMENCNgotOjEwMTQ0MDAwMDAwMDQwMjEyNDBBMDAwMTAwQTMxMDIzMDA0QTM4MDRCMAotOjEwMTQ1MDAwMjQ2MzAwMDEzMDgyMDAwMTAwNjkzMDJCMTA0MDAwMDIzQgotOjEwMTQ2MDAwMDAwNDIwNDIwMTA3NDAyNTU0QzBGRkY4MDBBMzEwMjNDOAotOjEwMTQ3MDAwMDNFMDAwMDgwMTAwMTAyMTI3QkRGRkUwM0MwMjFFREM1NAotOjEwMTQ4MDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTA3NgotOjEwMTQ5MDAwMzQ1MjZGNDEwMDAwODgyMTI0MDUwMDA4MEUwMDFBRjgxQwotOjEwMTRBMDAwMDIyMDIwMjEwMDExODA4MDNDMDcwODAwMjRFNzcxQUM1NQotOjEwMTRCMDAwMDAwMjE2MDAwMjA3MTgyMUFDNjIwMDAwMDAwMDI4MjE3QgotOjEwMTRDMDAwMjRBMjAwMDEzMDQ1RkZGRjhDNjIwMDAwMkNBNjAwMDgxQQotOjEwMTREMDAwMDQ0MTAwMDIwMDAyMjA0MDAwOTIyMDI2MTRDMEZGRjhDMAotOjEwMTRFMDAwQUM2NDAwMDAwMjA3ODAyMThFMDQwMDAwMEUwMDFBRjg5MAotOjEwMTRGMDAwMjQwNTAwMjAyNjIzMDAwMTMwNzFGRkZGMkUyMzAxMDA2OAotOjEwMTUwMDAwMTQ2MEZGRTVBRTAyMDAwMDhGQkYwMDFDOEZCMjAwMTgxMAotOjEwMTUxMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzOQotOjEwMTUyMDAwM0MwMjA4MDAyNDQyNkE3NDNDMDEwODAwQUMyMjcxQTAwRAotOjEwMTUzMDAwM0MwMjA4MDAyNDQyNEZGMDNDMDEwODAwQUMyMjcxQTQ5OAotOjEwMTU0MDAwMjQwMjAwMDYzQzAxMDgwMEEwMjI3MUE4MEEwMDFCMEIxRgotOjEwMTU1MDAwMDAwMDAwMDAyN0JERkZEOEFGQjMwMDFDQUZCMjAwMThEOQotOjEwMTU2MDAwQUZCRjAwMjBBRkIxMDAxNEFGQjAwMDEwOEY1MTAxNDBFOQotOjEwMTU3MDAwOEY0ODAxNDgwMDA4OTQwMjMyNDMwMEZGMzExMzAwRkZGNgotOjEwMTU4MDAwOEY0MjAxQjgwNDQwRkZGRTI3NTAwMTgwQUUxMTAwMDBEOQotOjEwMTU5MDAwOEY0MjAxNDRBRTAyMDAwNDI0MDIwMDAyQTYxMjAwMDg5OQotOjEwMTVBMDAwQTIwMjAwMEIyNDAyMDAxNEFFMTMwMDI0MTA2MjAwMjVENgotOjEwMTVCMDAwMjg2MjAwMTUxMDQwMDAwODI0MDIwMDE1MjQwMjAwMTBDMwotOjEwMTVDMDAwMTA2MjAwMzAyNDAyMDAxMjEwNjIwMDA5OEZCRjAwMjA1OAotOjEwMTVEMDAwMEEwMDFDMzU4RkIzMDAxQzEwNjIwMDcwMjQwMjAwMjIyOAotOjEwMTVFMDAwMTA2MjAwMzc4RkJGMDAyMDBBMDAxQzM1OEZCMzAwMUMyQgotOjEwMTVGMDAwM0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwQgotOjEwMTYwMDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA2OQotOjEwMTYxMDAwMDIyMjEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEFCRQotOjEwMTYyMDAwMDA2MjE4MjExNjYwMDBCQ0FGODMwMDI0OTA2MjAwNjI0MwotOjEwMTYzMDAwMzA0MjAwMEYzNDQyMDAzMEEwNjIwMDYyMEEwMDFDMzRDNQotOjEwMTY0MDAwOEZCRjAwMjAzQzA0NjAwMDhDODMyQzA4M0MwMkYwMDMxOAotOjEwMTY1MDAwMzQ0MkZGRkYwMDYyMTgyNEFDODMyQzA4M0MwMjA4MDBDRgotOjEwMTY2MDAwOEM0MjMxQTA4QzgzMkMwODI0NDIwMDc0MDAwMjEwODIyQQotOjEwMTY3MDAwMDAwMjE0ODAwMDYyMTgyNUFDODMyQzA4MEEwMDFDMzQ3OAotOjEwMTY4MDAwOEZCRjAwMjAzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODA2MQotOjEwMTY5MDAwMDIyMjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDAyMwotOjEwMTZBMDAwOEM0MjMxQTAzQzAzMDAwQTAyMjIxMDIxMzA0MjAwN0YwQwotOjEwMTZCMDAwMDM0MjEwMjEwMDQzMTAyMTBBMDAxQzMzQUY4MjAwMjQ5MgotOjEwMTZDMDAwM0MwMjA4MDA4QzQyMzFBMDI0MDVGRjgwMDIyMjEwMjEzOAotOjEwMTZEMDAwMDA0NTEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA5NwotOjEwMTZFMDAwMDIyMjEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEFFRQotOjEwMTZGMDAwMDA2MjE4MjE5MDYyMDA2MzAwQTIxMDI0MzA0MjAwRkZCMwotOjEwMTcwMDAwMTA0MDAwODVBRjgzMDAyNDI0NjIwMDg4OTQ0MzAwMTJCNwotOjEwMTcxMDAwM0MwMjA4MDA4QzQyMzFBODMwNjMzRkZGMDAwMzE5ODA2RgotOjEwMTcyMDAwMDIyMjEwMjEwMDQzMTAyMTMwNDMwMDdGMDM0MzIwMjE3NwotOjEwMTczMDAwMDA0NTEwMjQzQzAzMDAwQzAwODMyMDIxQUY0MjAwMjgwOAotOjEwMTc0MDAwOTA4MjAwMEQwMEEyMTAyNDMwNDIwMEZGMTA0MDAwNzI3MQotOjEwMTc1MDAwQUY4NDAwMjg5MDgyMDAwRDMwNDIwMDEwMTQ0MDAwNkZDQQotOjEwMTc2MDAwOEZCRjAwMjAwRTAwMTU1NjAwMDAwMDAwOEY0MjAxQjgwOAotOjEwMTc3MDAwMDQ0MEZGRkUwMDAwMDAwMEFFMTEwMDAwOEY0MjAxNDQ1MwotOjEwMTc4MDAwQUUwMjAwMDQyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIwRQotOjEwMTc5MDAwQUUxMzAwMjQwQTAwMUMzNDhGQkYwMDIwMjQwNkZGODBGMwotOjEwMTdBMDAwMDIyNjEwMjRBRjQyMDAyMDNDMDIwODAwOEM0MjMxQTBFNwotOjEwMTdCMDAwMzEwNDNGRkYwMDA0MjE4MDAyMjIxMDIxMDA0NjEwMjQ0MgotOjEwMTdDMDAwQUY0MjAwMjQzQzAzMDgwMDhDNjMzMUE4M0MwMjA4MDBBRgotOjEwMTdEMDAwOEM0MjMxQTAzMjI3MDA3RjAyMjMxODIxMDIyMjEwMjFERgotOjEwMTdFMDAwMDA2NDE4MjEzMDQyMDA3RjMwNjQwMDdGMDM0MjI4MjFDQQotOjEwMTdGMDAwM0MwMjAwMEEwMDY2MTgyNDAwQTIyODIxMDM0NDIwMjE4QwotOjEwMTgwMDAwM0MwMjAwMEMwMDgyMjAyMUFGNDMwMDI4M0MwMjAwMDg2QgotOjEwMTgxMDAwMDM0NzE4MjEwMDYyOTAyMUFGODUwMDI0QUY4NDAwMjg3RgotOjEwMTgyMDAwMEUwMDE1NTYwMTAwODAyMThGNDIwMUI4MDQ0MEZGRkVEMgotOjEwMTgzMDAwOEY4MjAwMjg4Rjg0MDAyNDI3NDUwMTgwOTA0MjAwMEQ2QwotOjEwMTg0MDAwQUNCMTAwMDBBNEIwMDAwNjAwMDIxNjAwMDAwMjE2MDNBRQotOjEwMTg1MDAwMDAwMjEwMjcwMDAyMzdDMjE0QzAwMDE2MjQ4MjAwODgzQwotOjEwMTg2MDAwOTQ0MjAwMTIzMjAzM0ZGRjMwNDIzRkZGMTQ0MzAwMTIwNAotOjEwMTg3MDAwMjQwMjYwODI5MDgzMDA2MzI0MDJGRjgwMDA0MzEwMjRDRQotOjEwMTg4MDAwMzA0MjAwRkY1MDQwMDAwQzI0MDI2MDgyOTA4MjAwNjJDRgotOjEwMTg5MDAwMzA0MjAwMEYzNDQyMDA0MEEwODIwMDYyMjQwMjYwODQ4MwotOjEwMThBMDAwQTRBMjAwMDgyNDAyMDAwREEwQTIwMDA1MEEwMDFDMUUyQwotOjEwMThCMDAwM0MwMjI3MDAyNDAyNjA4MkE0QTIwMDA4QTBBMDAwMDUyOAotOjEwMThDMDAwM0MwMjI3MDAwMDA2MUMwMDAwNjIxODI1MjQwMjAwMDJDQQotOjEwMThEMDAwQTBBMjAwMEJBQ0EzMDAxMEFDQTAwMDE0QUNBMDAwMjQ4QwotOjEwMThFMDAwQUNBMDAwMjhBQ0EwMDAyQzhFNDIwMDRDOEY4NDAwMjhCNQotOjEwMThGMDAwQUNBMjAwMTg5MDgzMDAwRDI0MDJGRjgwMDA0MzEwMjQ0NgotOjEwMTkwMDAwMzA0MjAwRkYxMDQwMDAwNThGQkYwMDIwOTA4MjAwMEQ4NAotOjEwMTkxMDAwMzA0MjAwN0ZBMDgyMDAwRDhGQkYwMDIwOEZCMzAwMUNEQgotOjEwMTkyMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MwMjEwMDA2RAotOjBDMTkzMDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMUI4MEEKLTowNDE5M0MwMDA4MDAzM0Y4NzQKLToxMDE5NDAwMDA4MDAzM0Y4MDgwMDMzNzAwODAwMzNBODA4MDAzM0RDQkYKLToxMDE5NTAwMDA4MDAzNDAwMDgwMDM0MDAwODAwMzQwMDA4MDAzMkUwQjkKLToxMDE5NjAwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEM0QKLToxMDE5NzAwMDc0NzA2MTM1MkUzMDJFMzA2QTMzMDAwMDA1MDAwMDAxOEUKLToxMDE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMDE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMDE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMDE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMDE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMDE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMDE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzRTQKLToxMDE5RjAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwODcKLToxMDFBMDAwMDI0NDIxQjgwM0MwMzA4MDAyNDYzMjAxNEFDNDAwMDAwRTcKLToxMDFBMTAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwREQKLToxMDFBMjAwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDI2MTAwNDg4Q0QKLToxMDFBMzAwMDNDMUMwODAwMjc5QzFCODAwRTAwMDE1QTAwMDAwMDAwN0YKLToxMDFBNDAwMDAwMDAwMDBEMzA4NEZGRkYzMDgyMDAwNzhGODUwMDE4RjIKLToxMDFBNTAwMDEwNDAwMDAyMjQ4MzAwMDczMDY0RkZGODAwODUzMDIxMjUKLToxMDFBNjAwMDMwQzQxRkZGMDM0NDE4MjEyNDdCNDAwMEFGODUwMDFDQjUKLToxMDFBNzAwMEFGODQwMDE4MDNFMDAwMDhBRjQ0MDA4NDMwODRGRkZGMDcKLToxMDFBODAwMDMwODIwMDA3OEY4NTAwMjA4Rjg2MDAyODEwNDAwMDAyREEKLToxMDFBOTAwMDI0ODMwMDA3MzA2NEZGRjgwMDg1MjAyMTAwODYxODJCN0UKLToxMDFBQTAwMDE0NjAwMDAyQUY4NTAwMjQwMDg2MjAyMzAzNDQyODIxMEYKLToxMDFBQjAwMDM0MDY4MDAwQUY4NDAwMjBBRjQ0MDA4MDAwQTYyMDIxQkYKLToxMDFBQzAwMDAzRTAwMDA4QUY4NDAwMzgyN0JERkZEOEFGQjMwMDFDODcKLToxMDFBRDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwMDkKLToxMDFBRTAwMEFGQjEwMDE0M0MwODYwMDg4RDE0NTAwMDI0MThGRjdGMkIKLToxMDFBRjAwMDNDMUE4MDAwMDI5ODk4MjQzNjcyMzgwQ0FEMTI1MDAwQkYKLToxMDFCMDAwMDhGNTEwMDA4M0MwNzYwMUMzQzA4NjAwMDM2MzAwMDAxMjMKLToxMDFCMTAwMEFGNTAwMDA4QUY4MDAwMThBRjQwMDA4MEFGNDAwMDg0OTUKLToxMDFCMjAwMDhDRTYwMDA4OEQwRjA4MDgzQzA3NjAxNjhDRUMwMDAwNUUKLToxMDFCMzAwMDMxRUVGRkYwMzlDQTAwMTAzQzBERkZGRjM0MEI4MDAwN0UKLToxMDFCNDAwMDNDMDMwMDgwMDM0QjQ4MjEyRDQ0MDAwMTAxOEQyODI0RDMKLToxMDFCNTAwMDNDMDI1MzUzM0MwMTA4MDBBQzIzMDQyMEFGODkwMDM4RjkKLToxMDFCNjAwMEFGODYwMDI4QUY4NDAwMTAyNzVCNDAwMDE0QTIwMDAzNUEKLToxMDFCNzAwMDM0RTM3QzAwOENGOTAwMDQwMzI4MTgyMThDN0YwMDdDNUUKLToxMDFCODAwMDhDNjUwMDc4M0MwMjgwMDAzNDUyMDA3MEFGODUwMDNDQzgKLToxMDFCOTAwMEFGOUYwMDQwM0MxMzA4MDAyNjczMUJDNDAyNDBBMDIxRTUKLToxMDFCQTAwMDhFNDgwMDAwOEY0NjAwMDAzOEMzMDAwMTMwNjQwMDAxRjkKLToxMDFCQjAwMDEwODAwMDE3QUY4ODAwMzQwMjgwNDgyMThEMkQwMDAwNkUKLToxMDFCQzAwMDNDMTkwODAwOEYzOTA0NUMzQzExMDgwMDhFMzEwNDU4MjAKLToxMDFCRDAwMDAxQThGODIzMDMzRjc4MjEwMDAwNDAyMTAyMjgzODIxODIKLToxMDFCRTAwMDAxRkY4MDJCMDBGMDcwMjEzQzAxMDgwMEFDMkYwNDVDNDkKLToxMDFCRjAwMDNDMDEwODAwQUMyRTA0NTg4RjRDMDAwMDM5OEIwMDAxQ0EKLToxMDFDMDAwMDMxNkEwMDAxMTU0MEZGRUQwMUEwNDAyMUFGOEQwMDM0ODUKLToxMDFDMTAwMDhFNEUwMDAwM0MwQzA4MDA4RDhDMDQ1QzNDMEEwODAwRDEKLToxMDFDMjAwMDhENEEwNDU4MDFDODY4MjMwMThEMjgyMTAwMDA1ODIxREQKLToxMDFDMzAwMDAwQUQzMDJCMDE0QjIwMjEwMDg2MTAyMTNDMDEwODAwMTMKLToxMDFDNDAwMEFDMjUwNDVDM0MwMTA4MDBBQzIyMDQ1ODhGNDUwMTA4MTcKLToxMDFDNTAwMDhGNDQwMTAwMzBBOTIwMDBBRjg1MDAwMEFGODQwMDBDNDQKLToxMDFDNjAwMDExMjAwMDBBMDBBMDMwMjEzQzA3MDgwMDhDRTcwNDJDNUEKLToxMDFDNzAwMDI0RUYwMDAxM0MwMTA4MDBBQzJGMDQyQzNDMTA0MDAwNzQKLToxMDFDODAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDMwQjAwMjAwOUYKLToxMDFDOTAwMDE2MDAwMDE0MjQxMTBGMDAxMDkxMDAxMjI0MDcwRDAwRUIKLToxMDFDQTAwMDEwODcwMjMzMzBCMDAwMDY1MjAwRkZGNTNDMTA0MDAwQjAKLToxMDFDQjAwMDkzNkQwMDAwMjQwQzAwMTAzMUE2MDBGMDEwQ0MwMjY5RDYKLToxMDFDQzAwMDI0MEUwMDcwMTBDRTAyREQ4RjhCMDAxNDI1NjcwMDAxRkEKLToxMDFDRDAwMEFGODcwMDE0M0MxMDQwMDBBRjUwMDEzODBBMDAwMTkwNUIKLToxMDFDRTAwMDAwMDAwMDAwOTc0ODAxMDQxMTAwRkZFNTNDMTA0MDAwOEYKLToxMDFDRjAwMDMwQjg0MDAwMTcwMDAwQTIwMDAwMDAwMDhGNTkwMTc4QTIKLToxMDFEMDAwMDA3MjBGRkZFOEY4NzAwMzgyNDA5MDAwODI0MDUwODAwRkIKLToxMDFEMTAwMDhDRTMwMDA4QUY0NTAxNzhBNzQ5MDE0MEE3NDAwMTQyODQKLToxMDFEMjAwMDk3NDIwMTA0OEY4NjAwMDAzMDQ5RkZGRjMwREYwMDAxMzkKLToxMDFEMzAwMDEzRTAwMkQ1MDEyMDQwMjEyNTI0RkZGRTI0MEEwMDAyRTEKLToxMDFENDAwMEE3NEEwMTQ2MzA4OEZGRkZBNzQ0MDE0ODNDMEIwODAwMjIKLToxMDFENTAwMDhENkIwNDNDMTU2MDAyQzQ4RjhGMDAwQzMwQzMwMDIwRDMKLToxMDFENjAwMDE0NjAwMDAyMjQwNDAwMDkyNDA0MDAwMTMwQ0QwQzAwOUEKLToxMDFENzAwMDI0MEMwNDAwNTFBQzAwMDEzNDg0MDAwNEE3NDQwMTRBM0YKLToxMDFEODAwMDNDMDUwODAwOENBNTA0MjAzQzAyMDA0ODNDMTkwMDAxRDkKLToxMDFEOTAwMDAwQTJGODI1MzBEODAwMDIwM0Y5MjgyNTEzMDAwMDA0MUEKLToxMDFEQTAwMDAwMDAxODIxM0MwNDAxMDAwMEE0MjgyNTI0MDMwMDAxQTAKLToxMDFEQjAwMDMwQ0EwMDA0NTE0MDAwMDVBRjgzMDAwODNDMDYwMDEwMDMKLToxMDFEQzAwMDAwQTYyODI1MjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwQkEKLToxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMDFERTAwMDhGODMwMDA4MTA2MDAwMjMwMDAwMDAwMDhGNEIxMDAwNUMKLToxMDFERjAwMDA1NjFGRkZFMDAwMDAwMDAxMDYwMDAxRTAwMDAwMDAwRjIKLToxMDFFMDAwMDhGNEQxMDAwM0MwMzAwMjAwMUEzNjAyNDExODAwMDE5QjUKLToxMDFFMTAwMDhGOEYwMDAwMzFFRTAwMDIxMUMwMDAxNjAwMDAwMDAwOUMKLToxMDFFMjAwMDk3NTAxMDE0MTYwMDAwMTMwMDAwMDAwMDk3NDUxMDA4OEEKLToxMDFFMzAwMDMwQkZGRkZGMjdGODAwMDYwMDE4Qzg4MjAwMTkzMDgwNjUKLToxMDFFNDAwMDAwQzcyODIxMzMxMTAwMDEzMzAzMDAwMzEyMjAwMzIwQUYKLToxMDFFNTAwMDhDQTIwMDAwMDAwMDAwMEQwMEM3RjgyMUFGRTIwMDAwRDYKLToxMDFFNjAwMDNDMTkwODAwOEYzOTA0MzAyNzI2MDAwMTNDMDEwODAwODYKLToxMDFFNzAwMEFDMjYwNDMwOEY2QTAwMDAzNDA1RkZGRkFGOEEwMDA0RUYKLToxMDFFODAwMDhDRTIwMDAwMTA0NTAyOUEwMDAwMjAyMThDRTUwMDAwNDEKLToxMDFFOTAwMDMwQkYwMTAwMTNFMDAyN0UwMTAwMjAyMTNDMDcwODAwNTIKLToxMDFFQTAwMDhDRTcwNDc0M0MxMDA4MDA4RTEwMDQ0QzAwRTg1ODIxQTQKLToxMDFFQjAwMDNDMTgwODAwOEYxODA0NzAwMTY4ODgyQjNDMDgwODAwNDMKLToxMDFFQzAwMDhEMDgwNDQ4MDAwMDc4MjEwMjA0NjAyMTAzMEYxODIxQzYKLToxMDFFRDAwMDAxODQ3MDJCMDEwRjY4MjEwMDcxNTAyMTAxQUUxMDIxODcKLToxMDFFRTAwMDNDMDEwODAwQUMyQzA0NEMzQzAxMDgwMEFDMjIwNDQ4MjYKLToxMDFFRjAwMDNDMDEwODAwQUMyQjA0NzQzQzAxMDgwMEFDMkEwNDcwQkYKLToxMDFGMDAwMDhGOEQwMDE4MDEyMDMwMjEzMTI5MDAwNzI1QUUwMDA4RUYKLToxMDFGMTAwMDMxQzIxRkZGMDM0MjYwMjFBRjhEMDAxQ0FGODIwMDE4NDkKLToxMDFGMjAwMDI1OUI0MDAwQUY0MjAwODQxMTIwMDAwMzhGOTAwMDIwQzkKLToxMDFGMzAwMDI0QzgwMDA3MzEwNkZGRjg4Rjg0MDAyODAwRDAyODIxMkMKLToxMDFGNDAwMDAwQTQ3ODJCMTVFMDAwMDJBRjkwMDAyNDAwQTQyODIzMDEKLToxMDFGNTAwMDAzNDUyMDIxMzQwMzgwMDAwMDgzMTAyMTNDMDYxMDAwM0IKLToxMDFGNjAwMEFGODUwMDIwQUY4MjAwMzhBRjQ1MDA4MEFGNDYwMTc4RDIKLToxMDFGNzAwMDhGOEIwMDE0MjU2NzAwMDEwQTAwMDFEREFGODcwMDE0NzQKLToxMDFGODAwMDhGNjIwMDA4OEY2NzAwMDAyNDExMDAzMDAwMDdDNjAyMkUKLToxMDFGOTAwMDMzMDMwMEYwMTA3MTAwQTIyNDE5MDA0MDE0NzlGRjRCQTQKLToxMDFGQTAwMDhGOEIwMDE0OEY0QTAxNzgwNTQwRkZGRTMwQTcwMjAwOTYKLToxMDFGQjAwMDE0RTAwMDAzMDAwNTEyODIwMDAwMDAwRDAwMDUxMjgyRUIKLToxMDFGQzAwMDMwNTAwMDAzMDAxMDQ5MDAwMTMwNzAyMTAwMEU2ODgwN0QKLToxMDFGRDAwMDAxQjA2MDIxMDAwQzU4ODAwMTczODAyMThFMDgwMDAwNDAKLToxMDFGRTAwMDE1MDAwMDAyMDAwMDAwMDAwMDAwMDAwRDhGNkYwMDA0Q0IKLToxMDFGRjAwMDA1RTIwMkIxOTIwMzAwMDY5MjA3MDAwNTkyMEYwMDA0NjkKLToxMDIwMDAwMDNDMDIwMDAxMDAwNzI4ODAwMEIwNjAyMThEODkwMDE4ODMKLToxMDIwMTAwMDI3NzEwMDA4MjVFRTAwMDUwMTIyNjgyMTAwMEUzMDgyOUMKLToxMDIwMjAwMEFEOEQwMDE4MDIyMDIwMjEwRTAwMDU4MDI2MDUwMDE0MjkKLToxMDIwMzAwMDkyMEIwMDA2OEY3RjAwMDQzQzA4N0ZGRjAwMEIyMDgwN0UKLToxMDIwNDAwMDAwOTEzMDIxOENDMzAwMDQzNTBBRkZGRjAzRUFDODI0NDUKLToxMDIwNTAwMDAwNzlDMDIxQUNEODAwMDQ5MjA3MDAwNTkyMDkwMDA0NjEKLToxMDIwNjAwMDk2MEQwMDA4MDAwNzI4ODAwMEIxRjgyMThGRUYwMDAwQ0UKLToxMDIwNzAwMDk3NDIwMTA0M0MwN0ZGRkYwMUU3NTAyNDMwNEVGRkZGNjkKLToxMDIwODAwMDAxQzk2MDIxMDE4RDU4MjMzMTY4RkZGRjAxNDgyMDI1RDcKLToxMDIwOTAwMEFGRTQwMDAwOTIwMzAwMDcyNDE5MDAwMTEwNzkwMjY5REYKLToxMDIwQTAwMDI0MDYwMDAzMTA2NjAyNzkwMDAwMDAwMDhFMTkwMDEwNUIKLToxMDIwQjAwMDI0MUYwMDBBQTc1RjAxNDBBNzU5MDE0MjkyMDMwMDA0QjAKLToxMDIwQzAwMDhGODYwMDAwMjQwNzAwMDFBNzQzMDE0NEE3NDAwMTQ2NzIKLToxMDIwRDAwMDk3NTgwMTA0MzBEMTAwMDIzQzA1MDA0MUE3NTgwMTQ4M0YKLToxMDIwRTAwMDAwMDAxODIxQTc0NzAxNEExMjIwMDAwMzMwQ0EwMDA0NEIKLToxMDIwRjAwMDNDMDUwMTQxMjQwMzAwMDE1MTQwMDAwNUFGODMwMDA4NjUKLToxMDIxMDAwMDNDMDgwMDEwMDBBODI4MjUyNDAzMDAwMUFGODMwMDA4MjQKLToxMDIxMTAwMEFGNDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMDIxMjAwMDAwMDAwMDAwOEY4QjAwMDgxMTYwMDAwNDAwMDAwMDAwMTgKLToxMDIxMzAwMDhGNDQxMDAwMDQ4MUZGRkUwMDAwMDAwMDhGNkEwMDAwNDEKLToxMDIxNDAwMDkyMDcwMDA0M0MwNTA4MDA4Q0E1MDQ0NEFGOEEwMDA0RjMKLToxMDIxNTAwMDk3NUYwMTA0M0MwRjA4MDA4REVGMDQ0MDMwRTMwMEZGNUYKLToxMDIxNjAwMDMzRjlGRkZGMDA3OUMwMjEwMEI4NjgyMTAwMDAxMDIxNzkKLToxMDIxNzAwMDI0RTYwMDBBMzBDOEZGRkYwMUI4NDgyQjAxRTI3MDIxQjUKLToxMDIxODAwMDAxQzk2MDIxMzExMDAwMDczQzAxMDgwMEFDMkQwNDQ0NTYKLToxMDIxOTAwMDNDMDEwODAwQUMyQzA0NDAxMjAwMDAwMzhGOEQwMDE4OTUKLToxMDIxQTAwMDI1MEIwMDA3MzE2OEZGRjgwMTBENzAyMTMxQ0MxRkZGQUUKLToxMDIxQjAwMEFGOEQwMDFDQUY4QzAwMThBRjRDMDA4NDk3NDQwMTA0MTUKLToxMDIxQzAwMDAzNEM4MDIxMzA4NEZGRkYzMDg4MDAwNzExMDAwMDAzOUEKLToxMDIxRDAwMDI2MUI0MDAwMjQ4OTAwMDczMTI0RkZGODhGODIwMDIwNEQKLToxMDIxRTAwMDhGODUwMDI4MDA4MjIwMjEwMDg1NzgyQjE1RTAwMDAyRDEKLToxMDIxRjAwMEFGODIwMDI0MDA4NTIwMjMwMzQ0ODgyMTM0MDU4MDAwMTkKLToxMDIyMDAwMDAyMjUxMDIxM0MwNjEwMDBBRjg0MDAyMEFGODIwMDM4NjgKLToxMDIyMTAwMEFGNDQwMDgwQUY0NjAxNzgwQTAwMDI4NThGOEIwMDE0MUUKLToxMDIyMjAwMDhGNUYwMTc4MDdFMEZGRkUzMEFBMDIwMDE1NDAwMDAzMkYKLToxMDIyMzAwMDAwMDU0MjgyMDAwMDAwMEQwMDA1NDI4MjMxMDIwMDAzQzkKLToxMDIyNDAwMDAwMDI3MTAwMDFDMjY4MjEwMDBENjA4MDAxODI0ODIxRjYKLToxMDIyNTAwMDAwMDkyODgwMDBCMzgwMjE4RTBCMDAwMDExNjAwMDAyNkQKLToxMDIyNjAwMDAwMDAwMDAwMDAwMDAwMEQ4RjZGMDAwQzA1RTAwMUYzN0UKLToxMDIyNzAwMDhGODcwMDM4MjQxOTAwMDFBRTE5MDAwMDhDRTMwMDA4OTQKLToxMDIyODAwMEEyMDAwMDA3OEY3ODAwMDQwMDE4MUMwMjMwNjYwMEZGQ0YKLToxMDIyOTAwMDI0RDEwMDA1MDAxMTMwODIyQ0M0MDA0MTE0ODAwMDAyQkEKLToxMDIyQTAwMEEyMDMwMDA0MDAwMDAwMEQ4RjZCMDAwNDNDMEVGRkZGMzIKLToxMDIyQjAwMDAwRTAyODIxMzE2NEZGRkYyNDhGMDAwQjAwMEY0MDgyRDMKLToxMDIyQzAwMDAwMDgxMDgwMDA0NzQ4MjE4RDJEMDAwMDI2MDQwMDE0Q0UKLToxMDIyRDAwMEE2MEIwMDA4MDFBRTYwMjQwRTAwMDU4MEFEMkMwMDAwQTYKLToxMDIyRTAwMDhGNUYwMTA4M0MwQTEwMDAwM0VBMzgyNDEwRTAwMUEzQzQKLToxMDIyRjAwMDAwMDAwMDAwOTc0NjAxMDQ5MjAzMDAwNzI0RDFGRkVDODAKLToxMDIzMDAwMDM0NjUwMDAyMzIyNEZGRkZBMjA1MDAwNzk2MDYwMDA4OEMKLToxMDIzMTAwMDJDQzcwMDEzNTRFMDAwMDU5MjAzMDAwNzkyMEEwMDA3M0YKLToxMDIzMjAwMDM1NUYwMDAxQTIxRjAwMDc5MjAzMDAwNzI0MEIwMDAxODQKLToxMDIzMzAwMDEwNkIwMUJBMjQwOTAwMDMxMDY5MDFDRDhGODgwMDM4QTEKLToxMDIzNDAwMDMwQ0ZGRkZGMjVFNDAwMDIwMDA0Qzg4MzMzM0YwMEZGQzUKLToxMDIzNTAwMDAwMUYyODgwQTIxOTAwMDUwMEE4NTgyMThENzgwMDAwRDAKLToxMDIzNjAwMDk3NTEwMTA0M0MwM0ZGRkYwMzAzNjAyNDMyMjJGRkZGNjcKLToxMDIzNzAwMDAwNEY3MDIzMjVDREZGRkUwMThENDgyNUFENjkwMDAwN0IKLToxMDIzODAwMDkyMDYwMDA1M0MwMkZGRjYzNDRFRkZGRjMwQ0EwMEZGMDQKLToxMDIzOTAwMDAwMEEzODgwMDBGMDIwMjE5MDk5MDAxNDNDMUZGRjdGMzQKLToxMDIzQTAwMDM3RTdGRkZGMzMyMzAwMEYwMDY2NzgyMTMxRjgwMEZGODUKLToxMDIzQjAwMDAwMTgyODgwMDBCMDg4MjE4RTJEMDAyMDAwQTg2MDIxMDAKLToxMDIzQzAwMEEyMEYwMDA2MDFBRTQ4MjRBRTBEMDAwQ0FEODkwMDBDMzIKLToxMDIzRDAwMDkyMEIwMDA2OEUwNDAwMEMwMTI3RjgyNDAwMEI1MDgwOUQKLToxMDIzRTAwMDAxNTBDODIxOTcyNjAwMjYwMTQ4QzAyMTAwODc0MDI0QkIKLToxMDIzRjAwMEFGMjYwMDI0QUUwODAwMENBRjNGMDAyMEFGMDYwMDEwNEYKLToxMDI0MDAwMDhGODYwMDAwMjQwQzAwMTAyNDA5MDAwMkE3NEMwMTQwMTQKLToxMDI0MTAwMEE3NDAwMTQyQTc0MDAxNDRBNzQ5MDE0Njk3NEIwMTA0NDgKLToxMDI0MjAwMDI0MDcwMDAxMzBDODAwMDIyNTZBRkZGRUE3NEEwMTQ4QzAKLToxMDI0MzAwMDNDMDUwMDA5QTc0NzAxNEExMTAwMDAwMzAwMDAxODIxQ0MKLToxMDI0NDAwMDNDMDUwMTA5MjQwMzAwMDEzMENEMDAwNDUxQTAwMDA1MjIKLToxMDI0NTAwMEFGODMwMDA4M0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxRDUKLToxMDI0NjAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMDI0NzAwMDAwMDAwMDAwMDAwMDAwMDA5MjE4MDAwNDI3MTEwMDAyNzQKLToxMDI0ODAwMDMyMkYwMDA3MDAwRjEwMjMzMDRFMDAwN0FFMEUwMDEwNTEKLToxMDI0OTAwMDhGOTAwMDA4MTIwMDAwMDQwMDAwMDAwMDhGNDMxMDAwMUQKLToxMDI0QTAwMDA0NjFGRkZFMDAwMDAwMDA4Rjc4MDAwMDhGOEYwMDE4OEQKLToxMDI0QjAwMDNDMTAwODAwOEUxMDA0NDRBRjk4MDAwNDk3NTEwMTA0QUEKLToxMDI0QzAwMDI1RTYwMDEwMzBDQTFGRkYzMjIyRkZGRkFGOEYwMDFDMkQKLToxMDI0RDAwMEFGOEEwMDE4QUY0QTAwODQyNDQ5RkZGRTNDMEIwODAwNzUKLToxMDI0RTAwMDhENkIwNDQwOTc0RTAxMDQwMTIwNjgyMTAwMDk2N0MzRTkKLToxMDI0RjAwMDAyMEQyODIxMzFDOUZGRkYwMEFENDAyQjAxNkMzODIxQUUKLToxMDI1MDAwMDAwRTgyMDIxMDM0QUY4MjEzMTM5MDAwNzNDMDEwODAwODYKLToxMDI1MTAwMEFDMjUwNDQ0M0MwMTA4MDBBQzI0MDQ0MDEzMjAwMDAzMTMKLToxMDI1MjAwMDI3RkI0MDAwMjUyMzAwMDczMDY5RkZGODhGOUYwMDIwMUMKLToxMDI1MzAwMDhGODQwMDI4MDEzRjM4MjEwMEU0QzgyQjE3MjAwMDAyQjcKLToxMDI1NDAwMEFGOUYwMDI0MDBFNDM4MjMwMzQ3MjAyMTM0MDU4MDAwOTYKLToxMDI1NTAwMDAwODUxMDIxM0MwNjEwMDBBRjg3MDAyMEFGODIwMDM4QjQKLToxMDI1NjAwMEFGNDcwMDgwQUY0NjAxNzgwQTAwMDI4NThGOEIwMDE0QzgKLToxMDI1NzAwMDk3NTgwMTA0MTMwMEZEQzIzQzEwNDAwMDhGNDMwMTc4QkUKLToxMDI1ODAwMDA0NjBGRkZFMzBCOTQwMDAxMzIwMDAwMzNDMDQwMDA4NDMKLToxMDI1OTAwMDAwMDAwMDBEM0MwNDAwMDhBRjQ0MDE0MDI0MDgwODAwN0UKLToxMDI1QTAwMEFGNDgwMTc4OEY4QjAwMDA5NzRBMDEwNDMxN0YwMDAxMEEKLToxMDI1QjAwMDEzRTAwMEU5MzE0NkZGRkYyNEQwRkZGRTI0MEMwMDAyQTcKLToxMDI1QzAwMEE3NEMwMTQ2QTc1MDAxNDg4RjhGMDAxODI0MDUwMDBEMjUKLToxMDI1RDAwMEE3NDUwMTRBOEY3MTAwMDAyNUUyMDAwODMwNDkxRkZGMUUKLToxMDI1RTAwMDAzNDk3MDIxMzBDRDAwMDdBRjkxMDAwNEFGOEYwMDFDNkMKLToxMDI1RjAwMEFGODkwMDE4MDBDMDM4MjFBRjQ5MDA4NDExQTAwMDAzNDIKLToxMDI2MDAwMDI1REI0MDAwMjRDNjAwMDczMEM3RkZGODhGOTgwMDIwNjQKLToxMDI2MTAwMDhGODQwMDI4MDBGODMwMjEwMEM0MzgyQjE0RTAwMDAyMTkKLToxMDI2MjAwMEFGOTgwMDI0MDBDNDMwMjM4RjhBMDAxNDAzNDY1ODIxMzkKLToxMDI2MzAwMDM0MDg4MDAwMDE2OEY4MjEyNTU5MDAwMTNDMDMxMDAwOEUKLToxMDI2NDAwMDNDMTA0MDAwQUY4NjAwMjBBRjlGMDAzOEFGNDYwMDgwQUUKLToxMDI2NTAwMEFGNDMwMTc4QUY5OTAwMTRBRjUwMDEzODBBMDAwMTkwRTAKLToxMDI2NjAwMDAwMDAwMDAwOEY2OTAwMDA5NzQ0MDEwNDMxMjdGRkZGM0MKLToxMDI2NzAwMDMwODhGRkZGOEY0RjAxNzgwNUUwRkZGRTMwRkYwMDA3MzUKLToxMDI2ODAwMDAwMUYxODIzMzA3ODAwMDcyNEU2RkZGRTI0MTkwMDBBRjMKLToxMDI2OTAwMEE3NTkwMTQwQTc1ODAxNDJBNzQ2MDE0NEE3NDAwMTQ2NTcKLToxMDI2QTAwMEE3NDgwMTQ4OEY0MjAxMDgzMDUxMDAyMDE2MjAwMDAyM0YKLToxMDI2QjAwMDI0MDMwMDA5MjQwMzAwMDEzMEFBMDAwMkE3NDMwMTRBQjEKLToxMDI2QzAwMDNDMDQwMDQxMTE0MDAwMDMwMDAwMTgyMTNDMDQwMTQxN0EKLToxMDI2RDAwMDI0MDMwMDAxMzBBQjAwMDQ1MTYwMDAwNUFGODMwMDA4MDMKLToxMDI2RTAwMDNDMDUwMDEwMDA4NTIwMjUyNDAzMDAwMUFGODMwMDA4NkQKLToxMDI2RjAwMEFGNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMDI3MDAwMDAwMDAwMDAwOEY5MDAwMDgxMjAwMDAwNDAwMDAwMDAwOEMKLToxMDI3MTAwMDhGNEMxMDAwMDU4MUZGRkUwMDAwMDAwMDhGNzgwMDAwNDQKLToxMDI3MjAwMDI3NjIwMDA4OEY4RDAwM0NBRjk4MDAwNDk0NDYwMDA4OTMKLToxMDI3MzAwMDk0NTEwMDBBOTQ0RjAwMEMzMENFRkZGRjAwMTEyNDAwOEEKLToxMDI3NDAwMDMxRTlGRkZGMTFDRDAwQTIwMDg5MjAyNTNDMDMwODAwREMKLToxMDI3NTAwMDhDNjMwNDQ0M0MxODA4MDA4RjE4MDQ0MDAwRTg1MDIxQTIKLToxMDI3NjAwMDI1NUZGRkZFMDA3Rjc4MjEwMDAwMTAyMTAxRkYzMDJCNDQKLToxMDI3NzAwMDAzMDI4ODIxMDIyNjQ4MjEzQzAxMDgwMEFDMkYwNDQ0QjIKLToxMDI3ODAwMDNDMDEwODAwQUMyOTA0NDAyNEVCMDAwODMxNjJGRkZGNDMKLToxMDI3OTAwMDMwNDcwMDA3MTBFMDAwMDM4Rjg1MDAxODI0NTAwMDA3MjEKLToxMDI3QTAwMDMyMDJGRkY4MzEwNkZGRkYzMEM4MDAwNzAwNDU3MDIxRjQKLToxMDI3QjAwMDMxQ0QxRkZGMDM0RDYwMjFBRjg1MDAxQ0FGOEQwMDE4ODgKLToxMDI3QzAwMDI1OUI0MDAwQUY0RDAwODQxMTAwMDAwMzhGOEYwMDIwMzcKLToxMDI3RDAwMDI0QzQwMDA3MzA4NkZGRjg4Rjg0MDAyODAwQ0YyODIxMEEKLToxMDI3RTAwMDAwQTQ0ODJCMTUyMDAwMDJBRjhGMDAyNDAwQTQyODIzNEEKLToxMDI3RjAwMEFGODUwMDIwQUY0NTAwODAzQzExMDgwMDhFMzEwNDM0QzUKLToxMDI4MDAwMDAzNDVDMDIxMzQwMjgwMDAwMzAyMzAyMTEyMjAwMDA1NUMKLToxMDI4MTAwMEFGODYwMDM4OTM4MzAwMTcyNDE5MDAwRTEwNzkwMDBEM0QKLToxMDI4MjAwMDI0MUYwNDNGM0MwQTEwMDBBRjRBMDE3ODhGOEIwMDE0MkMKLToxMDI4MzAwMDI1NjcwMDAxMEEwMDAxRERBRjg3MDAxNDBFMDAwNUE2MjAKLToxMDI4NDAwMDNDMTA0MDAwOEY4QjAwMTQyNTY3MDAwMTBBMDAwMURFNTgKLToxMDI4NTAwMEFGODcwMDE0M0MwQTEwMDBBNzVGMDE0OEFGNEEwMTc4MTcKLToxMDI4NjAwMDBBMDAwNEI0OEY4QjAwMTQyNDBFMEYwMDExRUUwMDNERkIKLToxMDI4NzAwMDMwRDEwMDIwMTYyMDAwMDIyNDAzMDAwOTI0MDMwMDAxQTcKLToxMDI4ODAwMDBBMDAwMjA4QTc0MzAxNEEwQTAwMDFGQkE3NDAwMTQ2Q0IKLToxMDI4OTAwMDk0RTUwMDA4OTRFMjAwMEE5NEVCMDAwQzhGODYwMDNDNUIKLToxMDI4QTAwMDAwMDJGQzAwMzE2QUZGRkYzMEI5RkZGRjEzMjYwMDM3M0EKLToxMDI4QjAwMDAzRUEyMDI1M0MwNTA4MDA4Q0E1MDQ0NDNDMUYwODAwQzEKLToxMDI4QzAwMDhGRkYwNDQwMDAwMDUwMjEwMEE4MzgyMTAwRTgzMDJCODEKLToxMDI4RDAwMDAzRUFDODIxMDMyNkMwMjEzQzAxMDgwMEFDMjcwNDQ0QjgKLToxMDI4RTAwMDNDMDEwODAwQUMzODA0NDAwQTAwMDI2OThGOEQwMDE4RDIKLToxMDI4RjAwMDNDMTkwODAwOEYzOTA0N0MzQzAzMDgwMDhDNjMwNDU0QTUKLToxMDI5MDAwMDNDMDYwODAwOENDNjA0NzgzQzBGMDgwMDhERUYwNDUwOEMKLToxMDI5MTAwMDAzMjgzODIxMDA2ODY4MjEwMEU4QzAyQjAwQzQ4ODIxMDIKLToxMDI5MjAwMDAxQTg0MDJCMDFFNDcwMjEwMjM4NTgyMTAxQzg2MDIxMjAKLToxMDI5MzAwMDNDMDEwODAwQUMyRDA0NTQzQzAxMDgwMEFDMkMwNDUwQjAKLToxMDI5NDAwMDNDMDEwODAwQUMyNzA0N0MzQzAxMDgwMEFDMkIwNDc4NTcKLToxMDI5NTAwMDBBMDAwMjY5OEY4RDAwMThBNzQwMDE0NjBBMDAwNDFCNzcKLToxMDI5NjAwMDhGOEYwMDE4MzBEMDAwMjAxNjAwRkZDNTI0MDMwMDBEMDMKLToxMDI5NzAwMDI0MDMwMDA1MEEwMDAyMDhBNzQzMDE0QTk3NTkwMTA0RUQKLToxMDI5ODAwMDI3MzhGRkYwMEEwMDAzNkIzMzA0RkZGRjhGOEMwMDQwRjEKLToxMDI5OTAwMDE0OENGRkM4MDAwMDgwMjEzQzExMDgwMDhFMzEwNDZDQUIKLToxMDI5QTAwMDNDMDQwODAwOEM4NDA0NjgwMjI4NzAyMTAxQzg3ODJCM0MKLToxMDI5QjAwMDAwOTA0MDIxMDEwRjY4MjEzQzAxMDgwMEFDMkUwNDZDRkUKLToxMDI5QzAwMDNDMDEwODAwQUMyRDA0NjgwQTAwMDI2OThGOEQwMDE4RDQKLToxMDI5RDAwMDhGOTkwMDQwMTQ5OUZGNUQwMDAwNjAyMTNDMDUwODAwQkMKLToxMDI5RTAwMDhDQTUwNDZDM0MxMDA4MDA4RTEwMDQ2ODAwRTgyMDIxQkYKLToxMDI5RjAwMDI0OEVGRkZFMDBBRUY4MjEwM0VFNTgyQjAyMEM1MDIxNkUKLToxMDJBMDAwMDAxNEIxODIxM0MwMTA4MDBBQzNGMDQ2QzNDMDEwODAwNUMKLToxMDJBMTAwMEFDMjMwNDY4MEEwMDA0OEIyNEVCMDAwODhGODgwMDM4N0MKLToxMDJBMjAwMDNDMDJGRkZGOEQwRTAwMEMwMUMyNjgyNDAxQTQ2MDI1NEEKLToxMDJBMzAwMEFEMEMwMDBDMEEwMDAzNzkzMENGRkZGRjBBMDAwM0E5OTgKLToxMDJBNDAwMEFFMDAwMDAwOTc0QjAxMDQ5MjA0MDAwNDhFMkEwMDBDOTMKLToxMDJBNTAwMDAxNjQ0MDIxMjUxRkZGRjIwMTQ3MTgyNDMzRjlGRkZGQ0QKLToxMDJBNjAwMDAwNzlDMDI1QUUzODAwMEMwQTAwMDJENDhFMTkwMDEwN0YKLToxMDJBNzAwMDNDMDNGRkZGOEQxMTAwMTAwMjIzMjgyNDAwQTQ3ODI1QjkKLToxMDJBODAwMEFEMEYwMDEwMEEwMDAzNzkzMENGRkZGRjk3NDUwMTA0MTYKLToxMDJBOTAwMDkyMDYwMDA0OEUyRjAwMTAwMEE2MTAyMTI0NDlGRkVFOUMKLToxMDJBQTAwMDAxRTc2ODI0MzEyRUZGRkYwMUFFNjAyNUFFMkMwMDEwMzcKLToxMDJBQjAwMDBBMDAwMkQ0OEUxOTAwMTA4RTA2MDAwQ0FFMDAwMDAwMzEKLToxMDJBQzAwMDAwMDNDMDgwMDMxMDg4MjEwQTAwMDJBNkFFMjYwMDIwNjEKLToxMDJBRDAwMDE0NjAwMDBEMzA1MEZGRkYzQzA0RkZGRjAwNDQ2MDI0RjEKLToxMDJBRTAwMDAxODQ2ODI2MDAwRDU4MkIwMDBDNTAyQjAxNEIxMDI0M0MKLToxMDJBRjAwMDEwNDAwMDAyMDAwMDAwMDAwMDAwMDAwRDhDQTMwMDAwNDgKLToxMDJCMDAwMDBBMDAwMjNFMDA2NDEwMjUzQTExRkZGRjAwMTE3ODJCRTUKLToxMDJCMTAwMDAwMTA3MDJCMDFDRjIwMjQxMDgwMDAwMjAwMDAwMDAwNjQKLToxMDJCMjAwMDAwMDAwMDBEOENCODAwMDAwQTAwMDIzRTM3MDJGRkZGRDMKLToxMDJCMzAwMDMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxNDAKLToxMDJCNDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxN0MKLToxMDJCNTAwMDE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxRkUKLToxMDJCNjAwMDEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGNzgKLToxMDJCNzAwMDI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0RTAKLToxMDJCODAwMDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGREQKLToxMDJCOTAwMEFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGREYKLToxMDJCQTAwMDI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4OUEKLToxMDJCQjAwMDAwMDAwMDAwMzA4RUZGRkYzMEQ4RkZGRjAwMDU3QzAwRDIKLToxMDJCQzAwMDAxRjg2MDI1MzlDREZGRkYwMUFDNTAyMTAxNEM1ODJCOTUKLToxMDJCRDAwMDAxNEI0ODIxMDAwOTQ0MDIzMTI3RkZGRjAwRTgzMDIxNjIKLToxMDJCRTAwMDAwMDYyNDAyMzBDNUZGRkYwMEE0MTgyMTM4NjJGRkZGNTEKLToxMDJCRjAwMDAzRTAwMDA4MzA0MkZGRkYzQzBDMDgwMDhEOEMwNDg0ODkKLToxMDJDMDAwMDI0MEJGRjgwMjdCREZGRDAwMTg0NTAyMTAxNEI0ODI0QjUKLToxMDJDMTAwMEFGNDkwMDIwM0MwODA4MDA4RDA4MDQ4NEFGQjIwMDIwQjIKLToxMDJDMjAwMEFGQjAwMDE4QUZCRjAwMjhBRkIzMDAyNEFGQjEwMDFDOTUKLToxMDJDMzAwMDkzNjYwMDA0MDEwNDM4MjEzMEU0MDA3RjAwOUExMDIxREIKLToxMDJDNDAwMDNDMDMwMDA4MDA0MzkwMjEzMEM1MDAyMDAzNjA4MDIxMzAKLToxMDJDNTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI2NDYwMDcwRTIKLToxMDJDNjAwMDI2NDYwMDZDOTIxMzAwMDQ5NzUxMDEwNDkyMEYwMDA0NTEKLToxMDJDNzAwMDMyNjcwMDBGMzIyRUZGRkYzMUVEMDA0MDAxQzcyODIzREQKLToxMDJDODAwMDExQTAwMDA1MDAwMDQ4MjE5MjU5MDBCQzMzMzgwMDA0MEYKLToxMDJDOTAwMDE3MDAwMDkwMDAwMDAwMDA5MjQzMDBCQzMwN0YwMDA0NDkKLToxMDJDQTAwMDEzRTAwMDBGMDAwMDAwMDAxMEEwMDAwRDAwMDAwMDAwNjUKLToxMDJDQjAwMDk2MEUwMDAyMjQwQUZGODAwMEE3NjAyMTI1Q0RGRkZFQUEKLToxMDJDQzAwMEE3NEQxMDE2OTIwQjAwMDQwMTRCMjAyNDMwODIwMEZGMDgKLToxMDJDRDAwMDEwNDAwMDg1MDEwQzQwMjUzQzBGMDQwMDAxMEY0MDI1RTkKLToxMDJDRTAwMDhGNTMwMTc4MDY2MEZGRkUyNDA0MDAwQUE3NDQwMTQwQzgKLToxMDJDRjAwMDk2MEQwMDAyMjQwNDAwMDkzMUFDMDAwNzAwMEM1ODIzOTMKLToxMDJEMDAwMDMxNkEwMDA3QTc0QTAxNDI5NjAyMDAwMjI0NDNGRkZFRUYKLToxMDJEMTAwMEE3NDMwMTQ0QTc0MDAxNDY5NzVGMDEwNEE3NUYwMTQ4MEMKLToxMDJEMjAwMDhGNTkwMTA4MzMzODAwMjA1MzAwMDAwMTI0MDQwMDAxQUEKLToxMDJEMzAwMDkyMEYwMDA0MzFFRTAwMTAxNUMwMDAwMjM0ODMwMDEwMjEKLToxMDJENDAwMDAwODAxODIxQTc0MzAxNEEwMDAwMDAwMDAwMDAwMDAwOTUKLToxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDBBRjQ4MTAwMDAwMDAwMDAwNkMKLToxMDJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNTExMDAwNzMKLToxMDJENzAwMDA2MjFGRkZFMzExM0ZGRkYxMjYwMDAwMzAwMDAwMDAwNzgKLToxMDJEODAwMDhGNDgxMDE4QUNDODAwMDA5NjAzMDAwNjMwN0ZGRkZGODQKLToxMDJEOTAwMDI3RjkwMDAyMDAxOTk4ODIwMDEzODg4MDAyM0IzMDIxMzUKLToxMDJEQTAwMDhDRDgwMDAwMTUyMDAwNTcwMDE4MzQwMjkyMDMwMDA0NEMKLToxMDJEQjAwMDI0MDVGRjgwMDBBM0Y4MjQzM0YxMDBGRjEyMjAwMDJDMkIKLToxMDJEQzAwMDAwMDAwMDAwOTI0NzAwQkMzMEYyMDAwMjEyNDAwMDI4RDAKLToxMDJERDAwMDAwMDAwMDAwOTc0QjEwMEMyNTYyRkZGRUE3NDIxMDE2NjIKLToxMDJERTAwMDAwMDAwMDAwM0MwQTA0MDAzNTQ5MDAzMEFGNDkxMDAwRTMKLToxMDJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDJFMDAwMDhGNEMxMDAwMDU4MUZGRkUwMDAwMDAwMDk3NDkxMDBDNTgKLToxMDJFMTAwMDhGNTExMDFDMDBDMDIwMjEzMTI3RkZGRjI0RjIwMDMwMDkKLToxMDJFMjAwMDAwMTIxODgyMDAwMzI4ODAwMEJCRjgyMTMyMjZGRkZGMjEKLToxMDJFMzAwMEFGRjEwMDAwMEUwMDA1OTUwMDExMkMwMjAwMTNDODgwQjAKLToxMDJFNDAwMDAzM0I5ODIxOEU3ODAwMDAwMDAyNzQwMEFGQjgwMDEwOTgKLToxMDJFNTAwMDhGQTgwMDEwMzEwRkZGRkZBRkFGMDAxMDhGQTQwMDEwM0MKLToxMDJFNjAwMDAxQzQ2ODI1QUZBRDAwMTA4RkE2MDAxMEFFNjYwMDAwNEIKLToxMDJFNzAwMDk3NzMwMDA4OTc2RDAwMEE5NzY2MDAwQzhGOEEwMDNDRDQKLToxMDJFODAwMDAwMEQ1QzAwMzBDQ0ZGRkYzMjYyRkZGRjEwNEEwMDM2QkQKLToxMDJFOTAwMDAxNkMyMDI1OTYwNjAwMDIzQzEwMTAwMDI0RDMwMDA4ODcKLToxMDJFQTAwMDBFMDAwMTM5MzI2NEZGRkY5NzRDMDEwNDBFMDAwMTQ3MDgKLToxMDJFQjAwMDMxODRGRkZGQUY1MDAxNzg4RkJGMDAyODhGQjMwMDI0MEIKLToxMDJFQzAwMDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MDMKLToxMDJFRDAwMDI3QkQwMDMwMTBBMEZGNzAwMDAwMDAwMDI0QTVGRkZDRkIKLToxMDJFRTAwMDBBMDAwNUNFMjQwOTAwMDQ4Q0QxMDAwMEFGNTExMDE4NEYKLToxMDJFRjAwMDhGNTMwMTc4MDY2MEZGN0EyNDA0MDAwQTBBMDAwNUUzNzQKLToxMDJGMDAwMDAwMDAwMDAwMDBBN0M4MjE4Rjg4MDAzODhGNEUxMDFDRDkKLToxMDJGMTAwMDAwMTlDMDgyMDAxODc4ODAwMUU4MjAyMUFDOEUwMDAwRTIKLToxMDJGMjAwMDAwMEUyQzAyMDBDMDIwMjEwRTAwMDU5NTMxQzZGRkZGQzcKLToxMDJGMzAwMDAyM0IyODIxOENBRDAwMDAwMDAyNTQwMDAwNDAzMDIxRUIKLToxMDJGNDAwMEFGQUQwMDEwOEZBQzAwMTAzMThCRkZGRkFGQUIwMDEwQTYKLToxMDJGNTAwMDhGQTIwMDEwMDE0MjQ4MjVBRkE5MDAxMDhGQTcwMDEwRDIKLToxMDJGNjAwMDBBMDAwNjEzQUNBNzAwMDA4RjhGMDA0MDE0OEZGRkM5MjIKLToxMDJGNzAwMDAwMDAwMDAwOTc0MjAxMDQ5NjBCMDAwMjNDMDUwODAwODcKLToxMDJGODAwMDhDQTUwNDZDMzA0OUZGRkYzMTZBRkZGRjNDMTEwODAwM0IKLToxMDJGOTAwMDhFMzEwNDY4MDEyQTM4MjEyNEYyRkZGRTAwQjI0MDIxNUMKLToxMDJGQTAwMDAwMTJGRkMzMDExMkM4MkIwMjNGQzAyMTAzMTkyMDIxQzgKLToxMDJGQjAwMDNDMDEwODAwQUMyODA0NkMzQzAxMDgwMEFDMjQwNDY4MDcKLToxMDJGQzAwMDBBMDAwNjREMDAwMDAwMDAwMEE0MTAyQjEwNDAwMDA5NkMKLToxMDJGRDAwMDI0MDMwMDAxMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzRDYKLToxMDJGRTAwMDAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MDEwNjAwMDA3MTMKLToxMDJGRjAwMDAwMDAwMDAwMDA4NTMwMkIxNEMwMDAwMjAwMDMxODQyQkUKLToxMDMwMDAwMDAwODUyMDIzMTQ2MEZGRkIwMDA1Mjg0MjAzRTAwMDA4MzAKLToxMDMwMTAwMDAwODAxMDIxOEY4NTAwMkMyN0JERkZFODAwMDUzMDI3OTgKLToxMDMwMjAwMDJDQzMwMDAxMkNBNDAwMDIwMDgzMTAyNTEwNDAwMDAzRDMKLToxMDMwMzAwMEFGQkYwMDEwMjQwNTAwN0ZBRjg1MDAyQzAwMDUyODI3QjYKLToxMDMwNDAwMDMwQTVGRkZGMEUwMDA1NzQyNDA0MjZGNThGODMwMDMwQTEKLToxMDMwNTAwMDI0MDQwMkJEMDA0MDMwMjEwMDgzMzgyQjEwRTAwMDA5MTkKLToxMDMwNjAwMDI0MDUwMDAxMDAwNDIwNDAwMDgzMTAyQjA0ODAwMDAzOEQKLToxMDMwNzAwMDAwMDUyODQwNTQ0MEZGRkMwMDA0MjA0MDEwQTAwMDA4MzgKLToxMDMwODAwMDAwQzM1MDIxMDA2NDQwMkIxNTAwMDAwMjAwMDUyODQyQjcKLToxMDMwOTAwMDAwNjQxODIzMTRBMEZGRkIwMDA0MjA0MjAwQzM1MDIxNDkKLToxMDMwQTAwMDhGQkYwMDEwMDAwQTRDMDIzMTIyMDBGRjI3QkQwMDE4MUMKLTowQzMwQjAwMEFGOEEwMDJDMDNFMDAwMDhBRjg5MDAzMDVDCi06MDQzMEJDMDAwQTAwMDAyQURDCi06MTAzMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3NDc4NzAzNTYyCi06MTAzMEQwMDAyRTMwMkUzMDZBMzMwMDAwMDUwMDAwMDAwMDAwMDAwQTg4Ci06MTAzMEUwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAzMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjk5Ci06MTAzMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAzMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAzMTUwMDAwMDAwMDAwMDAwMDAxMzg4MDAwMDAwMDAwMDAwMDVEQ0YzCi06MTAzMTYwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDRDCi06MTAzMTcwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyM0I2MEVFCi06MTAzMTgwMDAzQzAzMDgwMDI0NjMzRDE0QUM0MDAwMDAwMDQzMjAyQkE2Ci06MTAzMTkwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQzY1Ci06MTAzMUEwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTgzQzFDMDgwMEQ5Ci06MTAzMUIwMDAyNzlDM0I2MDBFMDAwMkJBMDAwMDAwMDAwMDAwMDAwRERBCi06MTAzMUMwMDA4RjgzMDAzODNDMDg4MDAwMzUwNzAwNzA4Q0U1MDAwMEQ0Ci06MTAzMUQwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjVBRjg1MDAzMERFCi06MTAzMUUwMDBBRjQ0MDAyMDhGNDkwMDIwMDUyMEZGRkUzQzAzODAwMEYzCi06MTAzMUYwMDAzNDYyMDA3MDhDNDUwMDAwOEY4NjAwMzAzQzE5MDgwMDU2Ci06MTAzMjAwMDA4RjM5MDA3QzNDMEUwODAwOERDRTAwNzgwMEE2MjAyMzZDCi06MTAzMjEwMDAwMzI0NTgyMTAwMDA3ODIxMDE2NDY4MkIwMUNGNjAyMTJDCi06MTAzMjIwMDAwMThENTAyMTNDMDEwODAwQUMyQjAwN0MzQzAxMDgwMEMyCi06MTAzMjMwMDBBQzJBMDA3ODAzRTAwMDA4MDAwMDAwMDAwQTAwMDA0MTBBCi06MTAzMjQwMDAyNDA0MDAwMThGODQwMDM4M0MwNTgwMDAzNEEyMDAwMTcyCi06MTAzMjUwMDAwMDgyMTgyNTAzRTAwMDA4QUY0MzAwMjAwM0UwMDAwOEM3Ci06MTAzMjYwMDAwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzExCi06MTAzMjcwMDAwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MkFBCi06MTAzMjgwMDAwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwOEJBCi06MTAzMjkwMDAwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDk4Ci06MTAzMkEwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjZECi06MTAzMkIwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwOEJGCi06MTAzMkMwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTAzMkQwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDJBCi06MTAzMkUwMDAwM0UwMDAwODAwMDAwMDAwMzA4QUZGRkY5M0E4MDAxM0VECi06MTAzMkYwMDBBNzRBMDE0NDk3NDkwRTE2MzBDNjAwRkYzQzAyMTAwMDUxCi06MTAzMzAwMDBBNzQ5MDE0NkFGNDUwMTQ4QTM0NjAxNTJBNzQ4MDE1QUMzCi06MTAzMzEwMDBBRjQ3MDE2MDhGQTQwMDE4OEZBMzAwMTRBNzQ0MDE1ODgxCi06MTAzMzIwMDBBRjQzMDE1NDAzRTAwMDA4QUY0MjAxNzgwM0UwMDAwODE2Ci06MTAzMzMwMDAwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ5MDAwMEYzCi06MTAzMzQwMDA4Rjg4MDAwMDI0ODQwMDA3MjdCREZGRjgzMDg0RkZGODMxCi06MTAzMzUwMDBBRjg5MDAzMDk3NEQwMDhBMzFBQ0ZGRkZBRkFDMDAwMDYxCi06MTAzMzYwMDA4RkFCMDAwMDAxNjg1MDIzMjU0N0ZGRkYzMEU2MUZGRkE5Ci06MTAzMzcwMDAwMEM0MjgyQjE0QTBGRkY3M0MwQzgwMDAzNThCMDA3MDk0Ci06MTAzMzgwMDA4RDZBMDAwMDNDMDcwODAwOENFNzAwODQzQzA2MDgwMEJBCi06MTAzMzkwMDA4Q0M2MDA4MDAwMDgxMDgyMDE0OTE4MjMwMDAyNzg4MDQyCi06MTAzM0EwMDAwMEUzNzAyMTAwMDAyMDIxMDFDM0M4MkIwMEM0QzAyMTBDCi06MTAzM0IwMDAwMUZBNDAyMTAzMTk0ODIxMjUwMjQwMDAyN0JEMDAwOEQ5Ci06MTAzM0MwMDAzQzAxMDgwMEFDMkUwMDg0M0MwMTA4MDBBQzI5MDA4MEMwCi06MTAzM0QwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMDAyNDg2MDAwNzQwCi06MTAzM0UwMDAzMEM1RkZGODAwQTIxODIxMzA2NDFGRkYwM0UwMDAwODc5Ci06MTAzM0YwMDBBRjg0MDAwMDhGODcwMDM4OEY4QTAwNDAyN0JERkZCODU4Ci06MTAzNDAwMDA4Rjg2MDA0NEFGQjYwMDQwQUZCRjAwNDRBRkI1MDAzQzZDCi06MTAzNDEwMDBBRkI0MDAzOEFGQjMwMDM0QUZCMjAwMzBBRkIxMDAyQzVFCi06MTAzNDIwMDBBRkIwMDAyODhGNDUwMTA0OEQ0OTAwQUNBRjQ3MDA4MDQ0Ci06MTAzNDMwMDA4Q0M4MDAyMDAwQTkzODIzMDAwMEIwMjFBRjQ4MEUxMDJFCi06MTAzNDQwMDA4RjQ0MEUxMDAwMDA0ODIxQUY0NDBFMTQ4Q0MyMDAyNDlCCi06MTAzNDUwMDBBRjQyMEUxODhGNDMwRTE4QUY0MzBFMUMxMEUwMDEyNTJCCi06MTAzNDYwMDAyRDIzMDAwMTkzNkIwMDA4MTE2MDAwRDQwMDAwMDAwMEMwCi06MTAzNDcwMDA5NzZFMDAxMDMxQ0RGRkZGMDBFRDYwMkIxNTgwMDBDRjVGCi06MTAzNDgwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRjRGMEUwMERBCi06MTAzNDkwMDA4RjUyMDAwMDMyNTEwMDA4MTIyMEZGRkQwMDAwMDAwMDkyCi06MTAzNEEwMDA5NzU0MEUwODhGNDYwRTA0MzI4NUZGRkYzMEIzMDAwMTlCCi06MTAzNEIwMDAxMjYwMDEzMjAwMDAwMDAwMDAwMDAwMEQzMEI4QTA0MDkyCi06MTAzNEMwMDAyNDE1MDA0MDEzMTUwMEMwMzBBOUEwMDAxMTIwMDEyREMzCi06MTAzNEQwMDAwMDAwMDAwMDkzN0YwMDA4MTNFMDAwMDgwMDAwMDAwMEQ3Ci06MTAzNEUwMDA5NzYzMDAxMDMwNkJGRkZGMDBDQjQwMkIxMTAwMDAwM0VGCi06MTAzNEYwMDAzMEFDMDA0MDExODAwMTIzMDAwMDAwMDBBNzg1MDAzQzkzCi06MTAzNTAwMDBBRjg2MDAzNDkzNjYwMDA4MDBFMDI4MjFBRkE3MDAyMEIyCi06MTAzNTEwMDAxNEMwMDEyNDI3QjMwMDIwQUY2MDAwMEM5NzgyMDAzQzQ4Ci06MTAzNTIwMDAzMDQ3NDAwMDE0RTAwMDAyMjQwMzAwMTYyNDAzMDAwRTdDCi06MTAzNTMwMDAyNDE5NDAwN0EzNjMwMDBBQUY3OTAwMTQ5MzhBMDAzRTYwCi06MTAzNTQwMDA4Rjc0MDAxNDMxNTgwMDA3MDAxOEFBNDAwMjk1OTAyNTg2Ci06MTAzNTUwMDBBRjcyMDAxNDk3ODQwMDNDOEY3MDAwMTQzMDkxMDAxMEZCCi06MTAzNTYwMDAwMjExNzgyNUFGNkYwMDE0OTc4RTAwM0MzMUNEMDAwODEyCi06MTAzNTcwMDAxMUEwMDE0NzAwMDAyODIxOEY2NzAwMTQzQzAyMTAwMEIxCi06MTAzNTgwMDAzQzBDODEwMDAwRTIyODI1QUY2NTAwMTQ5NzQ2MEUwQTI2Ci06MTAzNTkwMDAyNDA4MDAwRTM0MDVGRkZDMzBDM0ZGRkYwMDZDNTgyNUUzCi06MTAzNUEwMDBBRjZCMDAwNEEzNjgwMDAyOTM3RjAwMEEyN0U5MDAwNEMwCi06MTAzNUIwMDBBMzY5MDAwQTk3ODYwMDNDOTM2MzAwMEEzMENDMUYwMDgxCi06MTAzNUMwMDAwMDBDNTk4MzAxNjM0MDIxMjUxRjAwMjhBMzdGMDAwOUI3Ci06MTAzNUQwMDA5NzQ5MEUwQ0E3NjkwMDEwOTM3OTAwMDkyNzJBMDAwMjY5Ci06MTAzNUUwMDAzMTU4MDAwNzAwMThBODIzMzJCMTAwMDdBMzcxMDAwQjVGCi06MTAzNUYwMDA5Mzc0MDAwOTk3NjQwMDEwOEY5MTAwMzQ5NzhGMDAzQ0ZBCi06MTAzNjAwMDAzMjkyMDBGRjAyNDQ4MDIxMDIwNTcwMjEzMUVEMDA0MDFBCi06MTAzNjEwMDAxMUEwMDAwNTMxQzRGRkZGMDA5MTI4MkIzQzEyODAwMDRGCi06MTAzNjIwMDAxMEEwMDAxNDAwMDBBMDIxMDIyNDM4MkIxNEUwMDExQjdDCi06MTAzNjMwMDA4RkE1MDAyMDhGNEQwRTE0QUY0RDBFMTA4RjQyMEUxQzIzCi06MTAzNjQwMDBBRjQyMEUxOEFGNDQwRTAwOEY0RjAwMDAzMUVFMDAwODVECi06MTAzNjUwMDAxMUMwRkZGRDAwMDAwMDAwOTc1NDBFMDgwMDgwODgyMTczCi06MTAzNjYwMDAwMDAwOTAyMUE3OTQwMDNDOEY1MDBFMDQyNDE0MDAwMTA4Ci06MTAzNjcwMDBBRjkwMDAzNDk3NjQwMDEwMzA5NUZGRkY4RTY4MDAwMDEzCi06MTAzNjgwMDAwMTExRjgyMzE3RTAwMDA5QUU3RjAwMDA4RjY1MDAxNEQ4Ci06MTAzNjkwMDA4RjhCMDA0NDM0QTYwMDQwQUY2NjAwMTQ4RjRDMEUxMDkwCi06MTAzNkEwMDBBRDZDMDAyMDhGNDMwRTE4QUQ2MzAwMjQ5MzY3MDAwOEIzCi06MTAzNkIwMDAxNEUwMDBEMjAwMDAwMDAwMEUwMDAwOUUyNDA0MDAxMDYwCi06MTAzNkMwMDA4Rjg5MDA0ODNDMDgzMjAwMDA0MDI4MjEzMTI2MDBGRjQ1Ci06MTAzNkQwMDAwMDA2RkMwMDAzRTg1MDI1MjUzOTAwMDFBRjk5MDA0ODk5Ci06MTAzNkUwMDBBQzRBMDAwMDkzNzgwMDA5OTM3MDAwMEEzMzA0MDBGRjhECi06MTAzNkYwMDAwMDA0NzQwMDMyMEYwMEZGMDFDRjY4MjVBQzREMDAwNEI4Ci06MTAzNzAwMDA4RjgyMDA0ODA2NDAwMEVBQUNBMjAwMDhBQ0EwMDAwQzgyCi06MTAzNzEwMDA5NzgzMDAzQzMwNkIwMDA4MTU2MDAwMDIyNjI4MDAwNkU1Ci06MTAzNzIwMDAyNjI4MDAwMjk3NEUwRTE0OEY0NTBFMUM4RjY3MDAwNDRBCi06MTAzNzMwMDA5MzZEMDAwMjMxQzRGRkZGMzFBMjAwRkZBRkEyMDAxMDYxCi06MTAzNzQwMDA4RjZDMDAxNEFGQTgwMDE4MEUwMDAwOEJBRkFDMDAxNEYzCi06MTAzNzUwMDAyNDA0MDAxMDBFMDAwMEM3MDAwMDAwMDA4RTcyMDAwMDVDCi06MTAzNzYwMDAxNjQwMDAwNTAwMDAwMDAwOEY2NDAwMTQyNDA1RkZCRjEwCi06MTAzNzcwMDAwMDg1OTgyNEFGNzMwMDE0OEY3OTAwMEMwMzM1MzgyMTJECi06MTAzNzgwMDBBRjY3MDAwQzkzNzUwMDA4MTZBMDAwMDgwMDAwMDAwMDQ5Ci06MTAzNzkwMDAxMjgwMDAwNjAwMDAwMDAwOEY3RjAwMTQzQzBCRUZGRjNBCi06MTAzN0EwMDAzNTY4RkZGRTAzRTg0ODI0QUY2OTAwMTRBMzc0MDAwOERECi06MTAzN0IwMDA4RkE1MDAyMDBBMDAwMjQ2MDIyMDIwMjFBRjQ3MEUwMEZDCi06MTAzN0MwMDAwQTAwMDBGNTAwMDAwMDAwOEY1OTAxNzgwNzIwRkZGRTc1Ci06MTAzN0QwMDAyNDFGMDgwMDhGODQwMDAwQUY1RjAxNzg5NzRCMDA4QTk4Ci06MTAzN0UwMDAzMTZBRkZGRjAxNDQ0ODIzMjUyOEZGRkYzMTAyMUZGRkY0Ci06MTAzN0YwMDAyQzQzMDAwODE0NjBGRkY5MDAwMDAwMDA4RjhFMDA0ODgxCi06MTAzODAwMDA4RjhEMDAzODAwQzA0ODIxMDM0NDIwMjEyNUM2MDAwMUM3Ci06MTAzODEwMDAyNDBDMEYwMEFGODYwMDQ4MDBFOTM4MjMyNDg2NDAwMEJFCi06MTAzODIwMDAzMUNBMDBGRjExQUMwMDA1MjQwODAwMDE5MzkxMDAzRTRECi06MTAzODMwMDAzMjMwMDAwNzAwMTA3QTQwMzVFODAwMDEwMDBBQUMwMDgxCi06MTAzODQwMDAzQzE4MDEwMDAyQjhBMDI1QUM5NDQwMDA4RjkzMDA0OEJBCi06MTAzODUwMDAzMEIyMDAzNjMwQTQwMDA4QUNEMzAwMDQxMDgwMDA5N0NBCi06MTAzODYwMDAwMTEyMzAyNTk3NEUwRTBBOEY4RDAwMDAzQzAyODEwMDE4Ci06MTAzODcwMDAzMUNDRkZGRjI1QUIwMDA4MDE4MjQwMjUzQzAzMTAwMDNFCi06MTAzODgwMDAzMTY1MUZGRjI1MzkwMDA2MjQxRjAwMEVBRjQ4MDE2MDc3Ci06MTAzODkwMDAwMEMzMzAyNUE3NUYwMTVBQUY4NTAwMDBBNzU5MDE1ODIyCi06MTAzOEEwMDAxNEUwMDAwQThGOTMwMDM4MjQxMjBGMDA1MjcyMDAwMkI1Ci06MTAzOEIwMDAyNDE2MDAwMTM0QzYwMDQwOEY1ODBFMTA4Rjk0MDA0NDI3Ci06MTAzOEMwMDBBRTk4MDAyMDhGNTUwRTE4QUU5NTAwMjQ4RjQ1MEUxNDJCCi06MTAzOEQwMDBBRjQ1MDE0NDhGNTkwRTFDQUY1OTAxNDhBMzRBMDE1MjBDCi06MTAzOEUwMDAzQzBBMTAwMEFGNDYwMTU0QUY0QTAxNzgxNEUwRkVEREY3Ci06MTAzOEYwMDAyRDIzMDAwMTAwNzZBMDI1MTI4MDAwMTc4RkJGMDA0NDAxCi06MTAzOTAwMDA4Rjg0MDAzODI0MTYwRjAwMTA5NjAwODQwMDAwMDAwMEY5Ci06MTAzOTEwMDA4RjQ1MDE3ODA0QTBGRkZFMjQxNTBGMDAxMDk1MDA2RTVFCi06MTAzOTIwMDAwMDAwMDAwMDhGNDcwRTE0MjQwMjAyNDAzQzFGMTAwMENDCi06MTAzOTMwMDBBRjQ3MDE0NDhGNDQwRTFDQUY0NDAxNDhBMzQwMDE1MkRECi06MTAzOTQwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NDVGCi06MTAzOTUwMDBBRjVGMDE3ODhGQkYwMDQ0OEZCNjAwNDA4RkI1MDAzQzQ5Ci06MTAzOTYwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQzg5Ci06MTAzOTcwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNDgxNEMwRkVEMDI3Ci06MTAzOTgwMDAzMEI4QTA0MDhGNDIwRTE0OEY4NDAwNDQwMDAwNDgyMUJDCi06MTAzOTkwMDBBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQwQTAwMDIwRTU0Ci06MTAzOUEwMDAyRDIzMDAwMThGOTEwMDM0OTc4QTAwM0MzQzEyODAwMDQ3Ci06MTAzOUIwMDAwMjIwQTgyMTMxNTgwMDQwMTcwMEZGMzAwMDAwQTAyMTRDCi06MTAzOUMwMDA5NzY5MDAxMDhGOTIwMDM0MzEzOUZGRkYxMzMyMDAzNUIwCi06MTAzOUQwMDAwMDAwMjAyMTAwODA0ODIxMTQ4MEZFQTAwMEEwMzgyMTkyCi06MTAzOUUwMDA4RjQyMEUxNDhGODQwMDQ0QUM4MjAwMjA4RjUxMEUxQzM1Ci06MTAzOUYwMDBBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE5MzZBMDAwOUY1Ci06MTAzQTAwMDA5Mzc4MDAwQjMxNTAwMEZGMzMwRjAwRkYwMjBGNzAyMTNECi06MTAzQTEwMDAyNUMyMDAwQTMwNTBGRkZGMEUwMDAwOUUwMjAwMjAyMTQ4Ci06MTAzQTIwMDA4Rjg2MDA0ODNDMUY0MTAwMjRDRDAwMDFBRjhEMDA0ODI3Ci06MTAzQTMwMDA5MzZDMDAwOTMwQzYwMEZGMDAwNjQ0MDAzMTgzMDBGRjhDCi06MTAzQTQwMDAyNDZCMDAwMjAxMEI0ODI1MDEzRkM4MjVBQzU5MDAwMDNBCi06MTAzQTUwMDA4RjY3MDAwQzk3NDQwRTE0MDBGMjI4MjVBQzQ1MDAwNDMzCi06MTAzQTYwMDA4RjQ1MEUxQzhGNjcwMDA0OTM2QTAwMDIzMDg0RkZGRkFECi06MTAzQTcwMDAzMTU4MDBGRkFGQjgwMDEwOEY2RjAwMTRBRkIxMDAxOEJECi06MTAzQTgwMDAwRTAwMDA4QkFGQUYwMDE0MEEwMDAxQTYwMjAwMjAyMTM3Ci06MTAzQTkwMDBBRjYwMDAwNDBBMDAwMTNFQTM2MDAwMDIwQTAwMDI0NjczCi06MTAzQUEwMDAwMDAwMjAyMTAwMDA5MDIxMEEwMDAxNzAyNDE0MDAwMTcwCi06MTAzQUIwMDAzQzEyODAwMDBBMDAwMTk1QUNCMjAwMEM4RjkxMDAwMDBFCi06MTAzQUMwMDAyNTI0MDAwMkE3NDQwMTU4MjYzMDAwMDgzMjBGMUZGRkFBCi06MTAzQUQwMDAwQTAwMDFGOUFGOEYwMDAwQUY0MDAxNEMxMTIwMDAyQzBCCi06MTAzQUUwMDAwMDAwMDAwMDhGNTkwRTEwQUY1OTAxNDQ4RjQzMEUxODhCCi06MTAzQUYwMDAyNDAyMDA0MDNDMUYxMDAwQUY0MzAxNDhBMzQwMDE1Mjg0Ci06MTAzQjAwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NDlECi06MTAzQjEwMDBBRjVGMDE3ODBBMDAwMjI3OEZCRjAwNDQxMTIwMDAwNjIyCi06MTAzQjIwMDAwMDAwMDAwMDk3NDYwRTA4MzBDQzAwNDAxNTgwMDAwMkNGCi06MTAzQjMwMDAwMDAwMDAwMDAwMDAwMDBEOEY0RDAxNzgwNUEwRkZGRTgxCi06MTAzQjQwMDAwMDAwMDAwMDk3NTMwRTEwM0MxMjA1MDAyNDBFMjAwMEM4Ci06MTAzQjUwMDAzMjZBRkZGRjAxNTJDMDI1QUY1ODAxNEM4RjRGMEUxNDNGCi06MTAzQjYwMDAzQzAyMTAwMEFGNEYwMTQ0OEY1MDBFMUNBRjUwMDE0ODczCi06MTAzQjcwMDBBMzQwMDE1MjhGODQwMDM4QTc0MDAxNUFBRjQwMDE2MDMyCi06MTAzQjgwMDBBNzQwMDE1OEFGNEUwMTU0MEEwMDAyMTVBRjQyMDE3ODE4Ci06MTAzQjkwMDA4RjQ5MEUxNEFGNDkwMTQ0OEY0MzBFMUMwQTAwMDI4RTU4Ci06MTAzQkEwMDAyNDAyMDA0MDNDMEUyMEZGMjdCREZGRTAzQzFBODAwMEFECi06MTAzQkIwMDAzQzBGODAwODM1Q0RGRkZEQUZCRjAwMUNBRkIyMDAxODMxCi06MTAzQkMwMDBBRkIxMDAxNEFGQjAwMDEwQUY4RjAwNDBBRjREMEUwMDhBCi06MTAzQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTAzQkUwMDAwMDAwMDAwMDNDMEMwMEZGMzU4QkZGRkRBRjRCMEUwMENBCi06MTAzQkYwMDAzQzA2NjAwNDhDQzk1MDAwMjQwQUZGN0YzQzExNjAwMDIxCi06MTAzQzAwMDAwMTJBNDAyNDM1MDczODBDQUNDNzUwMDA4RTI0MDQzOEY0Ci06MTAzQzEwMDAyNDA1MDAwOUFGNDUwMDA4MzA4M0ZGRkYzODYyMkY3MThCCi06MTAzQzIwMDAyNDUwQzBCM0FGODAwMDQ4MEUwMDAwNjhBRjgwMDAwMDkxCi06MTAzQzMwMDA1MjAwMDAwMUFFMjA0NDJDMEUwMDA0MzUzQzExODAwMERGCi06MTAzQzQwMDAwRTAwMEVBODM2MzAwMDcwOEY4QTAwNDAzQzEyMDgwMDJCCi06MTAzQzUwMDAyNjUyM0JDODAyMDA4ODIxOEUwODAwMDA4RjVGMDAwMEJBCi06MTAzQzYwMDAzQkY5MDAwMTMzMzgwMDAxMTMwMDAwMTdBRjg4MDAzMDIyCi06MTAzQzcwMDAwMjIwNDgyMThEMjcwMDAwM0MwRjA4MDA4REVGMDA2Q0NBCi06MTAzQzgwMDAzQzBDMDgwMDhEOEMwMDY4MDBFOEMwMjMwMUY4MjgyMTU2Ci06MTAzQzkwMDAwMDAwNjgyMTAwQjgzMDJCMDE4RDU4MjEwMTY2NDAyMUI5Ci06MTAzQ0EwMDAzQzAxMDgwMEFDMjUwMDZDM0MwMTA4MDBBQzI4MDA2ODExCi06MTAzQ0IwMDA4RjQ0MDAwMDM4ODMwMDAxMzA2MjAwMDExNDQwRkZFREEyCi06MTAzQ0MwMDAwMEUwNDAyMUFGODcwMDMwOEUwQzAwMDAzQzA1MDgwMDZBCi06MTAzQ0QwMDA4Q0E1MDA2QzNDMDQwODAwOEM4NDAwNjgwMTg4MzAyM0FCCi06MTAzQ0UwMDAwMEE2MzgyMTAwMDAxMDIxMDBFNjQwMkIwMDgyMTgyMTk4Ci06MTAzQ0YwMDAwMDY4RjgyMTNDMDEwODAwQUMyNzAwNkMzQzAxMDgwMDdBCi06MTAzRDAwMDBBQzNGMDA2ODhGNDkwMTAwMjU1OTAwODhBRjk5MDA0NEY1Ci06MTAzRDEwMDBBRjg5MDAzOEFGNDkwMDIwOEUwNzAwMDBBRjg3MDAzMDIwCi06MTAzRDIwMDA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA4RTA2MDAwMDA4Ci06MTAzRDMwMDAzQzBCMDgwMDhENkIwMDc0M0MwNDA4MDA4Qzg0MDA3MDAwCi06MTAzRDQwMDAwMEM3MjgyMzAxNjVGODIxMDAwMDEwMjEwM0U1NDAyQjVFCi06MTAzRDUwMDAwMDgyMzgyMTAwRThDODIxMjQwOTA4MDAzQzAxMDgwMDNECi06MTAzRDYwMDBBQzNGMDA3NDNDMDEwODAwQUMzOTAwNzBBRjQ5MDE3OEU5Ci06MTAzRDcwMDA5MzU4MDEwOEEzOTgwMDNFOTM4RjAwM0UzMUVFMDAwMTU2Ci06MTAzRDgwMDAxNUMwMDAxNThGODMwMDM4MjQwRTBEMDAxMDZFMDAxOTI5Ci06MTAzRDkwMDAyNDBGMEYwMDEwNkYwMDFEMDAwMDAwMDA5MTU5MDAwMDVCCi06MTAzREEwMDAyNDE4MDA1MDMzMjkwMEZGMTEzODAwMDQzQzFGNDAwMDQ0Ci06MTAzREIwMDBBRjVGMDEzODBBMDAwMkU3MDAwMDAwMDAwRTAwMDhFRUM1Ci06MTAzREMwMDAwMDAwMDAwMDhGOEEwMDQwM0MxRjQwMDBBRjVGMDEzOEI4Ci06MTAzREQwMDAwQTAwMDJFNzAwMDAwMDAwOTM4RDAwM0UzMUFDMDAwNkFGCi06MTAzREUwMDAwMDBDNTEwMDBFMDAwMENFMDE1MkQ4MjEwQTAwMDM0M0ZFCi06MTAzREYwMDA4RjhBMDA0MDNDMUIwODAwMjc3QjNDNDgwRTAwMDBDRTA5Ci06MTAzRTAwMDAwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDAzQzFCMDgwMEFBCi06MTAzRTEwMDAyNzdCM0M2ODBFMDAwMENFMDAwMDAwMDAwQTAwMDM0MzMwCi06MTAzRTIwMDA4RjhBMDA0MDkwQUEwMDAxOEZBQjAwMTA4Q0FDMDAxMDZDCi06MTAzRTMwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDAxNEM1Ci06MTAzRTQwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDAxOEY0Ci06MTAzRTUwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDAxQzlFCi06MTAzRTYwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQ0MzCi06MTAzRTcwMDA4Q0FEMDAwODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAwMjEyCi06MTAzRTgwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMDBBNTYwMDAwMjc4Ci06MTAzRTkwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMDIzMDYyMDBGRjRGCi06MTAzRUEwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRTUzCi06MTAzRUIwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODdGCi06MTAzRUMwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNDE3Ci06MTAzRUQwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMUFECi06MTAzRUUwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxODIzCi06MTAzRUYwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODlBCi06MTAzRjAwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA2NDQ5Ci06MTAzRjEwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNENGCi06MTAzRjIwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwODY0Ci06MTAzRjMwMDBBMTZBMDAwMThDODIwMDY0MEEwMDAzOTkwMDAwMDAwMDVECi06MTAzRjQwMDA5MEFBMDAwMDI3QkRGRkY4OEZBOTAwMUNBM0FBMDAwMEJCCi06MTAzRjUwMDA4RkFFMDAwMDNDMEZGRjgwOEZBODAwMTgzNUUyRkZGRkY2Ci06MTAzRjYwMDA4Q0NEMDAyQzAxQzI2MDI0QUZBQzAwMDBBMTIwMDAwNDY1Ci06MTAzRjcwMDAwMEUwNjAyMUE3QTAwMDAyOEZCODAwMDA4RDI3MDAwNDk4Ci06MTAzRjgwMDAwMTg4MTgyMTAwQTA1ODIxMDBDMDUwMjEwMDZEMjgyNjZBCi06MTAzRjkwMDAzQzA2RkY3RjNDMEYwMEZGMkNBRDAwMDEzNUVFRkZGRjFDCi06MTAzRkEwMDAzNEQ5RkZGRjNDMDJGRjAwMDMxOTMwMjQwMDBEMURDMDZGCi06MTAzRkIwMDAwMTBFQzgyNDAwRTJDMDI0MDBDMzcwMjUwMzE5NzgyNTJGCi06MTAzRkMwMDBBRDJFMDAwMEFEMkYwMDA0OEQ0NTAwMjRBRkFFMDAwMEUzCi06MTAzRkQwMDBBRDI1MDAwODhENEQwMDIwMjQwNUZGRkZBRDJEMDAwQzAwCi06MTAzRkUwMDA5NTY4MDAwMjMxMDdGRkZGQUQyNzAwMTA5MTY2MDAxOEE5Ci06MTAzRkYwMDAzMEMyMDBGRjAwMDIxOUMyNTA2MDAwMDE4RDQ1MDAzNDNDCi06MTA0MDAwMDBBRDI1MDAxNDhENjcwMDA4MjdCRDAwMDhBRDI3MDAxQ0YyCi06MTA0MDEwMDA4QzhCMDBDQ0FEMkMwMDI4QUQyMDAwMkNBRDJCMDAyNEM3Ci06MTA0MDIwMDBBRDIwMDAxODAzRTAwMDA4QUQyMDAwMjAyN0JERkZFMDEwCi06MTA0MDMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzlBCi06MTA0MDQwMDA5MDk4MDAwMDAwQzA4ODIxM0MwRDAwRkYzMzBGMDA3RkQ2Ci06MTA0MDUwMDBBMENGMDAwMDkwOEUwMDAxMzVBQ0ZGRkYzQzBBRkYwMEFFCi06MTA0MDYwMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDQ4Q0FCMDAxNDc4Ci06MTA0MDcwMDA4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQwMTJBNDAyNEZDCi06MTA0MDgwMDAwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDJBRTI0MDAwNDEwCi06MTA0MDkwMDAyNjA1MDAyMDI2MjQwMDA4MEUwMDAwNzYyNDA2MDAwMkQzCi06MTA0MEEwMDA5MjQ3MDAwMDI2MDUwMDI4MjYyNDAwMTQwMDA3MUUwMDYxCi06MTA0MEIwMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDMyNDAzRkZGRjRBCi06MTA0MEMwMDA5NjU5MDAwMjMzMjNGRkZGMEUwMDAwNzZBRTIzMDAxMDQ2Ci06MTA0MEQwMDAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDVCCi06MTA0MEUwMDA4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjEwQTAwMDA4MDdBCi06MTA0MEYwMDAyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUNBRkIwMDAxODBFCi06MTA0MTAwMDBBRkJGMDAyMDkwQTgwMDAwMjQwMjAwMDE4RkIwMDAzQzQ3Ci06MTA0MTEwMDAzMTAzMDAzRjAwODA4ODIxMTA2MjAwMTQ4RkFBMDAzODBDCi06MTA0MTIwMDAyNDBCMDAwNTUwNkIwMDE2QUZBQTAwMTAwMEEwMjAyMTQwCi06MTA0MTMwMDAwMEMwMjgyMTBFMDAwM0RDMDIwMDMwMjE5MjI0MDBCQ0M0Ci06MTA0MTQwMDAzMDgzMDAwMjEwNjAwMDAzMjYwNjAwMzBBQ0MwMDAwMDdGCi06MTA0MTUwMDAyNEM2MDAwNDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODUwCi06MTA0MTYwMDAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgwMTQwMzgyMUNECi06MTA0MTcwMDAwRTAwMDM1QUFGQjAwMDEwMEEwMDA0MjAwMDAwMDAwMDM3Ci06MTA0MTgwMDAwRTAwMDNBMUFGQjAwMDE0MEEwMDA0MjAwMDAwMDAwMERDCi06MTA0MTkwMDAzQzAyMDAwQTAzNDIxODIxM0MwNDA4MDAyNDg0M0NBQzgxCi06MTA0MUEwMDAyNDA1MDAxQTAwMDAzMDIxMEEwMDAwODBBRjgzMDA1NDZCCi06MTA0MUIwMDAzQzAzODAwMDM0NjIwMDcwOEM0ODAwMDAwMEEwNTgyMTRECi06MTA0MUMwMDAwMEMwNDgyMTMwOEEwMEZGQUY4ODAwMzA4RjQ0MDE3ODVBCi06MTA0MUQwMDAwNDgwRkZGRTNDMEM4MDAwMzU4NjAwNzA4Q0M1MDAwMDFBCi06MTA0MUUwMDAzQzAzMDgwMDhDNjMwMDc0M0MxODA4MDA4RjE4MDA3MEIyCi06MTA0MUYwMDAwMEE4MjAyMzAwNjQ2ODIxMDAwMEM4MjEwMUE0NzgyQkI2Ci06MTA0MjAwMDAwMzE5NzAyMTAxQ0Y2MDIxM0MwMTA4MDBBQzJEMDA3NDFFCi06MTA0MjEwMDAzQzAxMDgwMEFDMkMwMDcwOEY0ODBFMTRBRjQ4MDE0NERDCi06MTA0MjIwMDBBRjQ3MDE0Q0EzNEEwMTUyQTc0QjAxNTg5MzQ2MDEwOERFCi06MTA0MjMwMDAzMEM1MDAwODU0QTAwMDAxMzUyOTEwMDA5MzRCMDkwMDM3Ci06MTA0MjQwMDAyNDA3MDA1MDMxNkEwMEZGMTE0NzAwMDcwMDAwMDAwMEZBCi06MTA0MjUwMDA4RjQ1MEUxQ0FGNDUwMTQ4QUY0OTAxNTQzQzA5MTAwMDgxCi06MTA0MjYwMDAwM0UwMDAwOEFGNDkwMTc4OTM0RDAxMDgzMUE4MDAwODI4Ci06MTA0MjcwMDAxMTAwMDAxMDAwMDAwMDAwOTM0RjAxMDgzMUVFMDAxMDAzCi06MTA0MjgwMDA1MUMwMDAwMTM1MjkwMDA4M0MwNDA4MDA5MDg0M0QxMDBECi06MTA0MjkwMDBBMzQ0MDE1MDhGNDMwOUE0QUY0MzAxNDg4RjQyMDlBMEIyCi06MTA0MkEwMDBBRjQyMDE0NEFGNDkwMTU0M0MwOTEwMDAwM0UwMDAwODRCCi06MTA0MkIwMDBBRjQ5MDE3ODNDMTkwODAwOEYzOTNDQ0MzMzM4MDAwOEVECi06MTA0MkMwMDA1NzAwRkZGMTM1MjkwMDA4MEEwMDA0NzMwMDAwMDAwMEMwCi06MTA0MkQwMDAyNDA3MDA0MEFGNDcwODE0QUY0MDA4MTA4RjQyMDk0NDNDCi06MTA0MkUwMDA4RjQzMDk1MDhGNDQwOTU0OEY0NTA5NUM4RjQ2MDk0QzEwCi06MTA0MkYwMDBBRjgyMDA2NEFGODMwMDUwQUY4NDAwNENBRjg1MDA1Qzk4Ci06MTA0MzAwMDAwM0UwMDAwOEFGODYwMDYwOTM0NjAxMDkzMEM1MDA3RkQ2Ci06MTA0MzEwMDAwMDA1MThDMDAwMDUyMTQwMDA4MzEwMjEwM0UwMDAwOEJCCi06MTA0MzIwMDAyNDQyMDA4ODNDMEEwODAwOTE0QTNDRDEzQzA5MDgwMDFDCi06MTA0MzMwMDA5NTI5M0NDQTNDMDUxMTAwMDAwQTNDMDAyNTI4MDAwMkQyCi06MTA0MzQwMDAwMEU4MzAyNTAwQzUxODI1MjQ4MjAwMDhBQzgzMDAwMDUxCi06MTA0MzUwMDAwM0UwMDAwOEFDODAwMDA0OEY0QTAwMkM5NzRFMDkwODQ3Ci06MTA0MzYwMDAzQzBGMDAwRTAzNEYzODIxMzFDREZGRkYwMDBENDFDMDNGCi06MTA0MzcwMDBBRjQ4MDAyQzk3NDMwOTA4OTRFQzAwMUEwMDgwNDAyMUI0Ci06MTA0MzgwMDAyNDAyMDAwMTMxOEJGRkZGQUM4QjAwMDA4Q0U5MDAxQzg0Ci06MTA0MzkwMDAwMEEwNTgyMTAwQzA2MDIxQUM4OTAwMDQ4Q0U0MDAyMEZBCi06MTA0M0EwMDBBRDA0MDAwODkwRTMwMDE5MzA2MzAwMDMxMDYyMDA0MDgwCi06MTA0M0IwMDAwMDAwMDAwMDI4NjUwMDAyMTRBMDAwNzMyNDA2MDAwMjFCCi06MTA0M0MwMDAxMDY2MDA0RTAwMDAwMDAwMjQxODAwMDMxMDc4MDA1NzBCCi06MTA0M0QwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzQ1MDkzNEMxCi06MTA0M0UwMDA5MzQ2MDkyMTNDMEUwODAwOTVDRTNDQzYzMEEyMDBGRjQyCi06MTA0M0YwMDAwMDAyQzg4Mjk0RTUwMDJBMzBDNDAwRkY5Nzg3MDA1ODY1Ci06MTA0NDAwMDAwMDE5QzYwMDAwMDQxQzAwMzEyRkZGRkYwMzAzMTAyNTE0Ci06MTA0NDEwMDAwMUNGNjgyMTAwNERDODI1MDBBNzIwMjEzQzA2NDAwMDlGCi06MTA0NDIwMDAwMzI2QzAyNTAwMDQ0QzAwQUQwOTAwMDRBRDE4MDAwMEFGCi06MTA0NDMwMDA5MzRGMDkyMDNDMDMwMDA2MjUwOTAwMTQwMDBGNzYwMDY1Ci06MTA0NDQwMDAwMUMzNjgyNUFEMEQwMDA4OEY0MjA5MkMyNEU1MDAwMTQ5Ci06MTA0NDUwMDAzMEE2N0ZGRkFEMDIwMDBDOEY1OTA5MzAyNTAyMDAyOERECi06MTA0NDYwMDBBNzg2MDA1OEFEMTkwMDEwOEY0NDA5MzhBRDA0MDAxNDE4Ci06MTA0NDcwMDBBRDJCMDAwNDhGNTgwOTQwQUQzODAwMDg5MzRGMDkzNzIxCi06MTA0NDgwMDAzQzBEMDgwMDkxQUQzQ0QwQUQyMDAwMTAzMUVFMDBGRjk2Ci06MTA0NDkwMDAwMUNDMTgyMTAwMDM2NzAwMDAwRDQ0MDAwMTg4NTgyNTU1Ci06MTA0NEEwMDAzNTY3RkZGRkFEMjcwMDBDMDNFMDAwMDhBRjRBMDAyQzgyCi06MTA0NEIwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNTA4MDA5NEE1M0NDQTZECi06MTA0NEMwMDAzQzBGMDgwMDk1RUYzQ0JDOTRFNDAwMjQzMTI2RkZGRjJDCi06MTA0NEQwMDAwMEE2NzAyMTAxQ0Y2ODIzMDAwNDFDMDAyNUEyRkZGMjcyCi06MTA0NEUwMDAwMDYyQzgyNTI0MTgwODAwQUQxOTAwMENBRDE4MDAxNDhFCi06MTA0NEYwMDBBRDAwMDAxMDBBMDAwNEM4MjUwODAwMTg5NEU2MDAyNDQ2Ci06MTA0NTAwMDA5NEU1MDAyODNDMDkwODAwOTUyOTNDQzAwMDA2N0MwMDgxCi06MTA0NTEwMDAwMDA1NzQwMDM1RUQ4MTAwMzVDNDA4MDBBRDBEMDAwQ0I4Ci06MTA0NTIwMDBBRDA0MDAxMDBBMDAwNEM4MjUwODAwMTQzQzA5MDgwMDY2Ci06MTA0NTMwMDA5NTI5M0NDMDNDMDIwODAwOTQ0MjNDQ0EzQzA2MDgwMDU1Ci06MTA0NTQwMDA5NEM2M0NCQzk0RTQwMDI0MzEyNUZGRkY5NEY4MDAyODc1Ci06MTA0NTUwMDAwMDQ1QzgyMTAzMjY3ODIzMDAxODFDMDAwMDA0NkMwMEM1Ci06MTA0NTYwMDAyNUVFRkZFRTAwNkVDODI1MzVBMjgxMDAyNDE4MDgwMDU0Ci06MTA0NTcwMDBBRDAyMDAwQ0FEMTkwMDEwQUQxODAwMThBRDAwMDAxNDBDCi06MTA0NTgwMDAwQTAwMDRDODI1MDgwMDFDMTQ2MEZGOTIwMDAwMDAwMDA3Ci06MTA0NTkwMDA5NEUzMDAyNDNDMDkwODAwOTUyOTNDQzAwMDAzMTQwMDYyCi06MTA0NUEwMDAzNDU5MDgwMEFEMTkwMDBDMEEwMDA0QzgyNTA4MDAxMDkxCi06MTA0NUIwMDAwM0UwMDAwODI0MDIwMUY0MjdCREZGRThBRkIwMDAxMEJCCi06MTA0NUMwMDBBRkJGMDAxNDBFMDAwMDYwMDA4MDgwMjEyNDA1MDA0MDcxCi06MTA0NUQwMDBBRjQ1MDgxNDhGODMwMDUwOEY4NDAwNEM4Rjg1MDA1QzlBCi06MTA0NUUwMDAwMDcwMTgyMTAwNjQxMDIzMTg0MDAwMDRBRjgzMDA1MEFECi06MTA0NUYwMDBBRjYzMDA1NDhGNjYwMDU0QUY4NjAwNEMxMjAwMDAwQzZECi06MTA0NjAwMDAwMDAwMDAwMDhGNDQwMDc0OTM2ODAwODEzNDA5RkEwMEIwCi06MTA0NjEwMDAyRDA3MDAwNzEwRTAwMDA1MDA4OTEwMjE5MzZDMDA4MTMwCi06MTA0NjIwMDAyNDBCMDFGNDAxOEI1MDA0MDE0NDEwMjFBRjYyMDAwQ0YzCi06MTA0NjMwMDA4RjRFMDk1QzAxQzU2ODIzMTlBMDAwMDQ4RkJGMDAxNEM4Ci06MTA0NjQwMDA4RjRGMDk1Q0FGOEYwMDVDOEZCRjAwMTQ4RkIwMDAxMERDCi06MTA0NjUwMDAwQTAwMDA2MjI3QkQwMDE4OEY4NDAwNjQ4RjgzMDA1MDE5Ci06MTA0NjYwMDA4RjgyMDA0Q0FGNjQwMDQ0QUY2MzAwNTAwM0UwMDAwODQ5Ci06MTA0NjcwMDBBRjYyMDA1NDNDMDM4MDAwMzQ2MjAwNzA4QzQzMDAwMDQxCi06MTA0NjgwMDAyN0JERkZGODMwODcwMEZGMzBBOTAwRkYzMEM4MDBGRkNBCi06MTA0NjkwMDBBRjgzMDAzMDhGNDQwMTc4MDQ4MEZGRkUzQzAyODAwMDJECi06MTA0NkEwMDAzNDU5MDA3MDhGMzgwMDAwQTNBNzAwMDMzQzA3MDgwMEFFCi06MTA0NkIwMDA4Q0U3MDA3NDhGQUMwMDAwM0MwNjA4MDA4Q0M2MDA3MENDCi06MTA0NkMwMDAwMzAzNzgyMzNDMEU3RkZGMDBFRkM4MjEzNUNERkZGRkE5Ci06MTA0NkQwMDAwMDAwNTAyMTAxOEQyODI0MDBDQTE4MjEwMDA4NDdDMDdECi06MTA0NkUwMDAwMzJGMjAyQjAwQTgxMDI1MDA2NEMwMjFBRkEyMDAwMERBCi06MTA0NkYwMDAzQzAxMDgwMEFDMzkwMDc0M0MwMTA4MDBBQzM4MDA3MDgzCi06MTA0NzAwMDA5MzRGMDEwQUEzQTAwMDAyM0MwRTgwRkZBM0FGMDAwMTVCCi06MTA0NzEwMDA4RkFDMDAwMDMxMkIwMDdGMzVDREZGRkYwMThENDgyNDg5Ci06MTA0NzIwMDAwMDBCNTYwMDAxMkE0MDI1MjQwNzMwMDAyNDA2RkY4MDk0Ci06MTA0NzMwMDAzQzA1MTAwMDI3QkQwMDA4QUY0ODAxNENBRjQ3MDE1NEFECi06MTA0NzQwMDBBNzQwMDE1OEEzNDYwMTUyMDNFMDAwMDhBRjQ1MDE3ODk1Ci06MTA0NzUwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA4RjY1MDA3NDM1Ci06MTA0NzYwMDAzQzA2ODAwMDMwOTAwMEZGMDBBNjIwMjUwRTAwMDA2MDZGCi06MTA0NzcwMDBBRjY0MDA3NDkzNjMwMDA1MzQ2MjAwMDgwRTAwMDA2MkE5Ci06MTA0NzgwMDBBMzYyMDAwNTAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDJCCi06MTA0NzkwMDAyNDA1MDAwNTI0MDYwMDAxMEEwMDA1NkUyN0JEMDAxODQ3Ci06MTA0N0EwMDAyN0JERkZFMDNDMDM4MDAwQUZCMDAwMTBBRkJGMDAxODkyCi06MTA0N0IwMDBBRkIxMDAxNDM0NjIwMDcwOEM0NzAwMDAzMDkwMDBGRkVECi06MTA0N0MwMDAzMEE4MDBGRkFGODcwMDMwOEY0NDAxNzgwNDgwRkZGRURGCi06MTA0N0QwMDAzQzE4ODAwMDM3MTEwMDcwOEUyRjAwMDAzQzBEMDgwMDNGCi06MTA0N0UwMDA4REFEMDA3NDNDMEEwODAwOEQ0QTAwNzAwMUU3NzAyMzBCCi06MTA0N0YwMDAwMUFFMjgyMTAwMDA1ODIxMDBBRTMwMkIwMTRCNDgyMThBCi06MTA0ODAwMDAwMTI2MzgyMTNDMDEwODAwQUMyNTAwNzQwMDAwODgyMUY1Ci06MTA0ODEwMDAzQzAxMDgwMEFDMjcwMDcwMTEwMDAwMEYwMDAwMDAwMEYwCi06MTA0ODIwMDA4RjYyMDA3NDI2MTlGRkZGMzIwODAwN0YwMDAyRkUwMjJCCi06MTA0ODMwMDAzM0U1MDA3RjE1MDAwMDA2MzMyMjAwRkYyNDA3RkY4MEM4Ci06MTA0ODQwMDAwMjA3MjAyNjI0QTNGRkZGMDA4MzgwMjUzMjAyMDBGRkY5Ci06MTA0ODUwMDAwMDQwODAyMTI0MTExMDA4MEUwMDAwNjAwMDAwMDAwMEJDCi06MTA0ODYwMDA4RjQ5MDgxODMxMjUwMDA0MTRBMEZGRkQzMjE4MDA3RjdECi06MTA0ODcwMDAwMDE4NzhDMDAwMTg3MTQwMDFDRjY4MjEyNUFDMDA4ODZECi06MTA0ODgwMDBBRjRDMDgxODI3NEEwOTgwOEQ0QjAwMjBBRjRCMDE0NERDCi06MTA0ODkwMDA4RDQ2MDAyNEFGNDYwMTQ4QTM1MDAxNTAwRTAwMDA2MjJGCi06MTA0OEEwMDBBNzQwMDE1ODAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNEJCCi06MTA0OEIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFOEVGCi06MTA0OEMwMDAzMDg0MDBGRkFGQkYwMDEwMEUwMDA1QjkzMEE1MDBGRjE3Ci06MTA0OEQwMDA4RjgzMDA1MDhGQkYwMDEwMzQ0NTAwNDAyNDA0RkY5MEE4Ci06MTA0OEUwMDAzQzAyMTAwMDI3QkQwMDE4QUY0MzAxNENBMzQ0MDE1MjA1Ci06MTA0OEYwMDBBRjQ1MDE1NDAzRTAwMDA4QUY0MjAxNzg5MzQzMDkzRUZECi06MTA0OTAwMDAzMDYyMDAwODEwNDAwMDBEM0MwOTAxMDEzNTI4MDgwQUZBCi06MTA0OTEwMDBBQzg4MDAwMDhGNDcwMDc0QUM4NzAwMDQzQzA2MDgwMDk4Ci06MTA0OTIwMDA5MEM2M0NEMDMwQzUwMDEwNTBBMDAwMDZBQzgwMDAwOEY2Ci06MTA0OTMwMDA4RjZBMDA2MEFDOEEwMDA4MjQ4NDAwMEMwM0UwMDAwODQxCi06MTA0OTQwMDAwMDgwMTAyMTBBMDAwNjIwMjQ4NDAwMEMyN0JERkZFODA3Ci06MTA0OTUwMDBBRkJGMDAxNEFGQjAwMDEwOTM0NjA5M0YwMEEwNTAyMTM0Ci06MTA0OTYwMDAwMDA1Mjg4MDAwODUzODIzMzBDMjAwRkYyNDAzMDAwNjlDCi06MTA0OTcwMDAzQzA5MDgwMDk1MjkzQ0M2MjRFOEZGRDgyNDA1MDAwNDFBCi06MTA0OTgwMDAxMDQzMDAzNzI0MDYwMDAyOTc1MDA5M0MzQzBGMDIwNEY0Ci06MTA0OTkwMDAwMDA2MzQwMDMyMEVGRkZGMDFDRjY4MjVBQzhEMDAwMDA5Ci06MTA0OUEwMDA5MzRDMDkzRTMxOEIwMDIwMTE2MDAwMDgwMDAwMDAwMDhDCi06MTA0OUIwMDA5MzQzMDkzNjNDMDIwMTAzMzQ1RjAzMDAzMDc5MDBGRjYyCi06MTA0OUMwMDAwMzNGQzAyNTI0MDUwMDA4QUM5ODAwMDQ5MzQzMDkzNDM0Ci06MTA0OUQwMDA5MzU5MDkyMTAwMDVGODgyMzA2MjAwRkYwMDAyQzA4MjZECi06MTA0OUUwMDAzMzJGMDBGRjAwMTg2RTAwMDAwRjc0MDAwMUFFNjAyNTI5Ci06MTA0OUYwMDAwMTg5MjAyNTNDMDk0MDAwMDA4OTgwMjVBQ0YwRkZEOEMyCi06MTA0QTAwMDA5MzQzMDkzNzhGNEYwOTQ4OEY1ODA5NDAzMDYyMDBGRkEwCi06MTA0QTEwMDAwMDRBQzgyMTAzM0Y3MDIxMDFGODYwMjMwMDBFNkYwMDk3Ci06MTA0QTIwMDAwMUE2NTAyNTMxODVGRkZGMDAxRjU4ODAwMTQ1NDgyNTBDCi06MTA0QTMwMDAwMTY4MzgyMUFEMDkwMDIwMEUwMDAwNjAyNEYwMDAyODM0Ci06MTA0QTQwMDAyNDA0MDAwNDBFMDAwMDYyQTM2NDAwM0YwMjAwMTAyMTUxCi06MTA0QTUwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEJFCi06MTA0QTYwMDAwQTAwMDYzMzI0MDYwMDEyMjdCREZGRDAyNDA5MDAxMEQ3Ci06MTA0QTcwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIxMDAxNDJBCi06MTA0QTgwMDBBRkIwMDAxMDNDMDEwODAwQTAyOTNDRDBBRkJGMDAyQzAzCi06MTA0QTkwMDBBRkIzMDAxQ0FGQjIwMDE4OTc0ODA5MDgzMDk1MDBGRjZCCi06MTA0QUEwMDAzQzAyMDAwRTMxMDdGRkZGMDAwNzMxQzBBRjQ2MDAyQzZCCi06MTA0QUIwMDA5NzQ0MDkwODkzNDQwMTBCMzBCNDAwRkYwMzQyODAyMTVFCi06MTA0QUMwMDAzMDgzMDAzMDAwMDBCMDIxMTA2MDAxMDcwMDAwODgyMTExCi06MTA0QUQwMDAyNDBDMDAwNDNDMDEwODAwQTAyQzNDRDA5MzRCMDkzRTYwCi06MTA0QUUwMDAwMDBCNTYwMDAwMEEyRTAzMDRBMDAxNEIwMDAwMDAwMDNBCi06MTA0QUYwMDBBRjQwMDA0ODkzNEYwMTBCMzFFRTAwMjAxMUMwMDAwNjdCCi06MTA0QjAwMDAwMDAwMDAwMDkzNTgwOTNFMDAxODlFMDAwMDEzOTYwMzExCi06MTA0QjEwMDAwNjQwMDE2QjAwMDAwMDAwOTM0NDAxMEIzMDgzMDA0MDBECi06MTA0QjIwMDAxMDYwMDAwMzhGOTMwMDUwOEY4MjAwNTAyNDUzRkZGRkNBCi06MTA0QjMwMDA5MzQ3MDkzRTMwRTYwMDA4MTRDMDAwMDIyNDEyMDAwMzI3Ci06MTA0QjQwMDAwMDAwOTAyMTk2MTkwMDJDOTM1ODA5MzQ5MzRGMDkzNzhGCi06MTA0QjUwMDBBNzk5MDA1ODMzMEMwMEZGMzFFRTAwRkYwMjRFNjgyMTg4Ci06MTA0QjYwMDAwMDBENTg4MDAxNkM1MDIxMDE1MTQwMjEzQzAxMDgwMDhBCi06MTA0QjcwMDBBNDI4M0NDNjkyMDUwMDE4MzBBOTAwRkYwMTA5MTgyMTlECi06MTA0QjgwMDAzQzAxMDgwMEE0MjMzQ0M4OTIxMTAwMTgxNjIwMDAwMzIxCi06MTA0QjkwMDAyNDY3MDAwQTAwMDAwMDBEMjQ2NzAwMEEzMEYwRkZGRkMwCi06MTA0QkEwMDAzQzAxMDgwMEE0MjMzQ0NBM0MwMTA4MDBBNDIwM0NDMEVFCi06MTA0QkIwMDAzQzAxMDgwMEE0MjAzQ0JDMEUwMDAwOUUwMjAwMjAyMTA1Ci06MTA0QkMwMDAwRTAwMDQ5QTAwNDAyMDIxOEY0QjAwMkM5NzRBMDkwOEMwCi06MTA0QkQwMDAzQzBDMDAwRTAzNEMzODIxMzE0NUZGRkYwMDA1NDlDMDU1Ci06MTA0QkUwMDBBRjQ5MDAyQzk3NDMwOTA4OTRGMTAwMUEwMDQwNDAyMTc2Ci06MTA0QkYwMDAyNDFGMDAwMTMyMjZGRkZGQUM0NjAwMDA4Q0UyMDAxQzlGCi06MTA0QzAwMDBBRDAyMDAwNDhDRTQwMDIwQUQwNDAwMDg5MEUzMDAxOTFDCi06MTA0QzEwMDAzMDYzMDAwMzEwN0YwMEQ2Mjg2RDAwMDIxNUEwMDExQzMwCi06MTA0QzIwMDAyNDBFMDAwMjEwNkUwMTBFMjQwRjAwMDMxMDZGMDBFMzJCCi06MTA0QzMwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzRFMDkzNDRGCi06MTA0QzQwMDA5MzUxMDkyMTNDMEEwODAwOTU0QTNDQzYzMUNEMDBGRjJBCi06MTA0QzUwMDA5NEY5MDAyQTAwMEQxODgyOTc4NzAwNTgzMjJDMDBGRjIzCi06MTA0QzYwMDAwMDAzMkUwMDAwMEMyNDAwMzEyNkZGRkYzMTQyRkZGRjFECi06MTA0QzcwMDAwMEE0RjgyNTAwNDY0ODIxMDNFOTc4MjUwMzI3NzAyMTgwCi06MTA0QzgwMDAzQzE4NDAwMDAxRjg2ODI1MDAwRThDMDBBRDBEMDAwMEI2Ci06MTA0QzkwMDBBRDExMDAwNDkzNEMwOTIwM0MwMzAwMDYyNTExMDAxNEJCCi06MTA0Q0EwMDAwMDBDMkUwMDAwQTMxMDI1QUQwMjAwMDg4RjQ5MDkyQzJFCi06MTA0Q0IwMDAyNEU0MDAwMTMwOUY3RkZGQUQwOTAwMEM4RjQ2MDkzMENFCi06MTA0Q0MwMDAyNTA5MDAyOEE3OUYwMDU4QUQwNjAwMTA4RjU5MDkzODA0Ci06MTA0Q0QwMDAwMTIwMzAyMUFEMTkwMDE0QUUzMzAwMDQ4RjU4MDk0MDczCi06MTA0Q0UwMDBBRTM4MDAwODkzNEYwOTM3M0MwQzA4MDA5MThDM0NEMDNCCi06MTA0Q0YwMDBBRTIwMDAxMDMxRUUwMEZGMDFEMjY4MjEwMDBEMkYwMDIwCi06MTA0RDAwMDAwMDBDMUMwMDAwQTMxMDI1MzQ0N0ZGRkZBRTI3MDAwQzQ5Ci06MTA0RDEwMDBBRjRCMDAyQzkzNEIwOTNFMzE3MzAwMDgxMjYwMDAwRDFECi06MTA0RDIwMDAzQzBGMDEwMTM1RTcwODBBQUQwNzAwMjg4RjRCMDA3NERFCi06MTA0RDMwMDBBRDJCMDAwNDNDMTMwODAwOTI3MzNDRDAzMjY4MDAxMDg1Ci06MTA0RDQwMDA1MTAwMDAwM0FEMjAwMDA4OEY3ODAwNjBBRDM4MDAwOEU2Ci06MTA0RDUwMDAyNTI2MDAwQzEyQzAwMDM4MDAwMDAwMDA5MzVGMDkzRkI4Ci06MTA0RDYwMDAyNDE2MDAwNjI0MDcwMDA0MzNGOTAwRkYxMzM2MDBEMjhFCi06MTA0RDcwMDAyNDA4MDAwMjk3NDMwOTNDM0MwQzAyMDQzMDY0RkZGRjA2Ci06MTA0RDgwMDAwMDhDMjgyNUFDQzUwMDAwOTM0MjA5M0UzMDQ5MDAyMDI0Ci06MTA0RDkwMDAxMTIwMDAwODAwMDAwMDAwOTM0QjA5MzYzQzEzMDEwMzZBCi06MTA0REEwMDAzNjZFMDMwMDMxNkQwMEZGMDFBRTg4MjVBQ0QxMDAwNEUyCi06MTA0REIwMDAyNDA3MDAwODkzNDkwOTM0OTM1OTA5MjEzMTRCRkZGRjE3Ci06MTA0REMwMDAzMTNGMDBGRjAwMUZCMDgyMzMzODAwRkYwMDE2NTYwMDRECi06MTA0REQwMDAwMDE4N0MwMDAxNEY5ODI1MDAxMjI4ODAwMjZCNjgyNTdFCi06MTA0REUwMDAzQzBFNDAwMDAwQzU1MDIzMDFBRTg4MjVBRDUxRkZEOEQwCi06MTA0REYwMDA5MzQzMDkzNzhGNUYwOTQ4OEY0OTA5NDAzMDZDMDBGRkEyCi06MTA0RTAwMDAwMTkyMTAyMTAwMDcyMDgyMDA0NEM4MjEwM0U5NzgyMzgxCi06MTA0RTEwMDAwMDE5QzcwMDAwMDhCNDAwMDMxNjQwMjUzMUU3RkZGRjYyCi06MTA0RTIwMDAwMTA3MzAyNTBFMDAwMDYwQUQ0NkZGRjgyNDEyMDAwNDkzCi06MTA0RTMwMDAwRTAwMDA2MkEzNzIwMDNGMEUwMDAwQzcwMjAwMjAyMTk2Ci06MTA0RTQwMDAzQzEyMDgwMDkyNTIzQ0QwMzI1MDAwMDMxMjAwMDAwRjc2Ci06MTA0RTUwMDAwMkEwMjAyMThGODIwMDUwMjQ0NzAwMDFBRjg3MDA1MDFDCi06MTA0RTYwMDBBRjY3MDA1MDhGNjgwMDU0MDEwNzMwMjMxOEMwMDAwMjVDCi06MTA0RTcwMDAwMEUwMjAyMThGNjQwMDU0QUY2NDAwNTQ4RjRDMDA3NDE0Ci06MTA0RTgwMDAyNTg0MDFGNEFGNjQwMDBDMDJBMDIwMjEwMjgwMjgyMUI3Ci06MTA0RTkwMDBBNzYwMDA2ODBFMDAwNUI5M0MxNDEwMDA4RjhEMDA1MDBCCi06MTA0RUEwMDAzNDU1MDAwNkFGNEQwMTRDOEY5MTAwNDg4RkJGMDAyQzQ4Ci06MTA0RUIwMDA4RkI2MDAyODI2MjMwMDAxQUY4MzAwNDg4RkIzMDAxQzYzCi06MTA0RUMwMDBBMzUxMDE1MjhGQjIwMDE4QUY1NTAxNTQ4RkIxMDAxNDk1Ci06MTA0RUQwMDBBRjU0MDE3ODhGQjUwMDI0OEZCNDAwMjA4RkIwMDAxMDNDCi06MTA0RUUwMDAwM0UwMDAwODI3QkQwMDMwOTM1ODA5M0UwMDE4OUUwMERCCi06MTA0RUYwMDAwMDEzOTYwMzA2NDIwMDUxMjQxMTAwMDI5MzQ0MDkyMzMzCi06MTA0RjAwMDAzMDgzMDAwMjEwNjBGRUZCOEY4NjAwNjA4RjgyMDA1MEFECi06MTA0RjEwMDAxNEMyRkVGODAwMDAwMDAwMEUwMDAwNjAwMDAwMDAwMDU3Ci06MTA0RjIwMDA5MzY5MDAzRjI0MDcwMDE2MzEyODAwRkYxMTA3MDAwQzg5Ci06MTA0RjMwMDAyNDA1MDAwODNDMEMwODAwOTE4QzNDRDAzNThCMDAwMTA2Ci06MTA0RjQwMDAzQzAxMDgwMEEwMkIzQ0QwOTM2QTAwM0YzMTQzMDBGRjk2Ci06MTA0RjUwMDAxMDY1MDA2NTI0MEQwMDBBMTA2RDAwNUUyNDAyMDAwQzJGCi06MTA0RjYwMDAwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OEUwMDAwMDAwMDMzCi06MTA0RjcwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNDA4MDA5NDg0M0NDQUM0Ci06MTA0RjgwMDAzQzFGMDgwMDk3RkYzQ0JDOTRGODAwMjQzMTIzRkZGRjJFCi06MTA0RjkwMDAwMDgzQzgyMTAzM0Y3ODIzMDAxODZDMDAyNUVFRkZGMjQwCi06MTA0RkEwMDAwMUFFNjAyNTI0MEEwODAwQUQwQzAwMENBRDBBMDAxNDA3Ci06MTA0RkIwMDBBRDAwMDAxMDBBMDAwNkUwMjUwODAwMTgzQzA5MDgwMEIyCi06MTA0RkMwMDA5NTI5M0NDMDNDMUYwODAwOTdGRjNDQ0EzQzE5MDgwMENCCi06MTA0RkQwMDA5NzM5M0NCQzk0RUYwMDI0MzEyNEZGRkY5NEVFMDAyODY1Ci06MTA0RkUwMDAwM0U0QzAyMTAzMTk2ODIzMDAwRjJDMDAwMDBFNTQwMEI1Ci06MTA0RkYwMDAyNUFDRkZFRTAxNEM4ODI1MzRBMjgxMDAyNDA2MDgwMDcwCi06MTA1MDAwMDBBRDAyMDAwQ0FEMTEwMDEwQUQwNjAwMThBRDAwMDAxNDhCCi06MTA1MDEwMDAwQTAwMDZFMDI1MDgwMDFDOEY2RTAwODQ4RjREMDk0MEIxCi06MTA1MDIwMDAxMUEwRkVCM0FGOEUwMDUwMjQwRjAwMTQzQzAxMDgwMDA1Ci06MTA1MDMwMDBBMDJGM0NEMDBBMDAwNjhEMDAwMDAwMDAzQzAxMDgwMEIzCi06MTA1MDQwMDBBMDMxM0NEMDkzNUYwOTNFMjQxNjAwMDEzM0Y5MDAyMEMzCi06MTA1MDUwMDAxNzIwRkVBODI0MTEwMDA4MEEwMDA2OEUyNDExMDAwNDVGCi06MTA1MDYwMDA5NEU1MDAyNDk0RjEwMDI4M0MwOTA4MDA5NTI5M0NDMEVGCi06MTA1MDcwMDAwMDA1MTQwMDAwMTEzNDAwMzQ0NDgxMDAzNEMzMDgwMERBCi06MTA1MDgwMDBBRDA0MDAwQ0FEMDMwMDEwMEEwMDA2RTAyNTA4MDAxNDcyCi06MTA1MDkwMDAxNDYwRkVFODAwMDAwMDAwOTRGRjAwMjQzQzA5MDgwMEIyCi06MTA1MEEwMDA5NTI5M0NDMDAwMUZDQzAwMzczODA4MDBBRDE4MDAwQzEzCi06MTA1MEIwMDAwQTAwMDZFMDI1MDgwMDEwMEEwMDA3MkUyNDA4MDAxMjQ2Ci06MTA1MEMwMDA4RjdGMDA0Q0FGN0YwMDU0OEY3OTAwNTQwQTAwMDY5NzAxCi06MTA1MEQwMDBBRjc5MDA1MEEzNjIwMDNGMEUwMDAwNjIwMDAwMDAwMEE0Ci06MTA1MEUwMDAwQTAwMDY4RTAwMDAwMDAwMjQwMjAwMTQwQTAwMDgwN0NGCi06MTA1MEYwMDBBMzYyMDAzRjI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDcwCi06MTA1MTAwMDAwRTAwMDVCOTMwQTUwMEZGOTM3ODAwN0U5Mzc5MDA3RkVCCi06MTA1MTEwMDA5MzZFMDA4MDkzNjgwMDdBMzMyRjAwRkYwMDE4NjYwMEJBCi06MTA1MTIwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDQ4MjUwMDBCNTIwMEIxCi06MTA1MTMwMDA4RkJGMDAxMDAxMkEzODI1MzEwNjAwRkYzNDQ0NzAwMDZCCi06MTA1MTQwMDAwMEU2MjgyNTI0MDJGRjgxM0MwMzEwMDAyN0JEMDAxODNCCi06MTA1MTUwMDBBRjQ1MDE0Q0FGNDQwMTU0QTM0MjAxNTIwM0UwMDAwOEEzCi06MTA1MTYwMDBBRjQzMDE3ODI3QkRGRkQ4QUZCMjAwMThBRkIxMDAxNDJDCi06MTA1MTcwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUM5MzQyMDEwOUQ1Ci06MTA1MTgwMDAzMDg2MDBGRjMwQjAwMEZGMDAwNjE4QzIzMjA0MDAwMjczCi06MTA1MTkwMDAzMDcxMDAwMTE0ODAwMDA1MzA1MjAwRkY5MzY3MDAwNTU0Ci06MTA1MUEwMDAzMEU1MDAwODEwQTAwMDBEMzBDODAwMTAwMjQwMjAyMTlBCi06MTA1MUIwMDAwRTAwMDVBNTAyMjAyODIxMjQwNDAwMDE4RkJGMDAyMDM1Ci06MTA1MUMwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDg1Ci06MTA1MUQwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNTAwMDAzMkUwCi06MTA1MUUwMDAwMDAwMDAwMDkzNDMwMTA5MDAwMDI4MjEzMDYyMDA3Rjg1Ci06MTA1MUYwMDAwMDAyMjBDMDAwMDJGOTQwMDNFNDk4MjEyNjc5MDA4OENCCi06MTA1MjAwMDAwMzNCOTgyMThFNzgwMDI0OEU2RjAwMDgxMzBGMDA0NjEwCi06MTA1MjEwMDAwMDAwMDAwMDhGNjQwMDg0MjQxODAwMDIwMDA0RkQ4MjU2Ci06MTA1MjIwMDAzM0Y5MDAwMzEzMzgwMDdDMDAwMDAwMDA5MzY2MDA4MzBDCi06MTA1MjMwMDA5MzRBMDEwOTUxNDYwMDA0MzIwNTAwN0MxMEEwMDA2MDI5Ci06MTA1MjQwMDAwMDAwMDAwMDMyMDUwMDdDMTRBMDAwNTMwMjQwMjAyMTIxCi06MTA1MjUwMDAxNjIwMDAwNjMyMDQwMDAxOEU3RjAwMjQ4RjU5MDEwNEJECi06MTA1MjYwMDAxN0Y5RkZENjAwMDAyMDIxMzIwNDAwMDExMDgwMDAwQTQ3Ci06MTA1MjcwMDAwMjQwMjAyMThGNDIwOTQwOEY5MzAwNjQxMDUzMDAwNkEyCi06MTA1MjgwMDAwMDAwMDAwMDBFMDAwNjZCMDIyMDI4MjE4RjQzMDk0MDE5Ci06MTA1MjkwMDBBRjYzMDA0NDAyNDAyMDIxMEUwMDA2MDAwMjIwMjgyMUI2Ci06MTA1MkEwMDAwQTAwMDg0MDI0MDQwMDAxM0MwOTA4MDA4RDI5MDA2NDFDCi06MTA1MkIwMDAyNTI2MDAwMTNDMDEwODAwQUMyNjAwNjQxNjAwMDAxMkZGCi06MTA1MkMwMDAwMDAwMDAwMDhGNkQwMDg0M0MwRTAwQzAwMUFFNjAyNDIxCi06MTA1MkQwMDAxNTgwMDAwNTAyNDAyMDIxMEUwMDA4MEUwMjIwMjgyMTIyCi06MTA1MkUwMDAwQTAwMDg0MDI0MDQwMDAxMjQwNTAwMDQwRTAwMDU2RTk1Ci06MTA1MkYwMDAyNDA2MDAwMTAyNDAyMDIxMEUwMDA4MEUwMjIwMjgyMTcxCi06MTA1MzAwMDAwQTAwMDg0MDI0MDQwMDAxMEUwMDAwNDEyNDA0MDAwMUFBCi06MTA1MzEwMDA5MzZCMDA3RDAyMEI1MDI1MEUwMDAwNjJBMzZBMDA3RDk2Ci06MTA1MzIwMDAwQTAwMDg4MzhGNkQwMDg0OEY2NjAwNzQ4RjQ4MDEwNDIzCi06MTA1MzMwMDA4RTY3MDAyNDAwMDY0RTAyMTUwN0ZGQjYzMTI2MDA3RjU3Ci06MTA1MzQwMDA5MzZCMDA4MzI2NDQwMDAxMzA4QTAwN0YxMTQ2MDA0MzlFCi06MTA1MzUwMDAzMTYzMDBGRjU0NjRGRkIwOEY2NDAwODQyNjQ1MDAwMTcwCi06MTA1MzYwMDAzMEIxMDA3RjMwQTIwMEZGMTIyNjAwMDQyNDA1MDAwMUE2Ci06MTA1MzcwMDAwMDQwOTAyMTBBMDAwODU2MjQxMTAwMDEyNDBGRkY4MEVDCi06MTA1MzgwMDAwMjRGNzAyNDAxQ0Y5MDI2MzI0MjAwRkYwMDQwOTAyMTRFCi06MTA1MzkwMDAwQTAwMDg1NjI0MTEwMDAxMEUwMDA2NkIwMjIwMjgyMTg1Ci06MTA1M0EwMDAzMjE4MDAzMDEzMDBGRkFBMzIxMDAwODIwMjQwMjAyMTgwCi06MTA1M0IwMDAwRTAwMDVBNTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTRGCi06MTA1M0MwMDA4RjZFMDA3NDNDMEY4MDAwMjQwNTAwMDMwMUNGOTAyNUYwCi06MTA1M0QwMDBBRjcyMDA3NDkzNzEwMDgzMjQwNjAwMDEwRTAwMDU2RTA1Ci06MTA1M0UwMDAzMjI0MDBGRjBFMDAwMDQxMjQwNDAwMDE5MzZEMDA3RDczCi06MTA1M0YwMDAwMjBENjAyNTBFMDAwMDYyQTM2QzAwN0QzQzBCMDgwMENFCi06MTA1NDAwMDA4RDZCMDA1NDI1NzAwMDAxM0MwMTA4MDBBQzMwMDA1NDQ1Ci06MTA1NDEwMDAwQTAwMDg0MDI0MDQwMDAxOEY2ODAwNzQzQzA5ODAwMEUxCi06MTA1NDIwMDAyNDA1MDAwNDAxMDkzODI1QUY2NzAwNzQ5MzYzMDA4M0U1Ci06MTA1NDMwMDAyNDA2MDAwMTBFMDAwNTZFMzA2NDAwRkYwRTAwMDA0MURFCi06MTA1NDQwMDAyNDA0MDAwMTkzNjIwMDdEMDIwMjk4MjUwRTAwMDA2MjkwCi06MTA1NDUwMDBBMzczMDA3RDBBMDAwODQwMjQwNDAwMDEzMjREMDA4MDNGCi06MTA1NDYwMDAzOUFDMDA4MDU0NkNGRjZDOEY2NDAwODQwQTAwMDhBOTdBCi06MTA1NDcwMDAyNjQ1MDAwMTI3QkRGRkM4M0MwQTAwMDhBRkJGMDAzMDI5Ci06MTA1NDgwMDBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRkIyMDAyMEZBCi06MTA1NDkwMDBBRkIxMDAxQ0FGQjAwMDE4MDM0QUQ4MjEyNDA5MDA0MDY2Ci06MTA1NEEwMDBBRjQ5MDgxNEFGNDAwODEwOEY0MjA5NDQ4RjQzMDk1MDk4Ci06MTA1NEIwMDA4RjQ2MDk1NDhGNDcwOTVDOEY0ODA5NEM5MzQ0MDEwODczCi06MTA1NEMwMDA5MzQ1MDEwQkFGODIwMDY0MzA4NDAwRkYzMEE1MDBGRkRDCi06MTA1NEQwMDBBRjgzMDA1MEFGODYwMDRDQUY4NzAwNUMwRTAwMDgyQUY3Ci06MTA1NEUwMDBBRjg4MDA2MDE0NDAwMTc0OEZCRjAwMzBBNzYwMDA2ODZGCi06MTA1NEYwMDA5MzREMDkwMDI0MEIwMDUwM0MxNTA4MDAyNkI1M0M4ODRDCi06MTA1NTAwMDAzMUFDMDBGRjNDMTIwODAwMjY1MjNDOTgxMThCMDAwMzdFCi06MTA1NTEwMDAwMDAwMDAwMDAwMDBBODIxMDAwMDkwMjE5MzUxMDEwOTIzCi06MTA1NTIwMDA4RjlGMDA1MDI0MDQwMDEwMzIyRTAwN0YwMDBFNjhDMEIwCi06MTA1NTMwMDAwMDBFNjE0MDAxOEQyODIxMjRCNDAwODhBRjU0MDgxODYyCi06MTA1NTQwMDA4RjQ5MDEwNDhGNEEwOUE0M0MwQjAwMEUwMzRCQzAyMTc0Ci06MTA1NTUwMDAwMTJBMTAyMzNDMDEwODAwQUMyMjNDQUM4RjQzMDk1OEJGCi06MTA1NTYwMDAzQzAxMDgwMEEwMjQzQ0QwOTc0NzA5MDgwMDdGMzAyMzY1Ci06MTA1NTcwMDAzQzAxMDgwMEFDMjYzQ0IwMzBFOEZGRkYwMDA4QzlDMDgxCi06MTA1NTgwMDAzQzAxMDgwMEFDM0YzQ0Q0QUY1OTAwMkM5NzQyMDkwOEJECi06MTA1NTkwMDA5NzEwMDAyQzhFQjEwMDAwOTMwRjAwMTgwMzc0OTgyMTBGCi06MTA1NUEwMDBBNzkwMDA1OEFGOTMwMDQ0MDIyMEY4MDkzMUYwMDBGRkEzCi06MTA1NUIwMDAzMDRFMDAwMjE1QzAwMUE5MzA0RjAwMDExMUUwMDE1RDFECi06MTA1NUMwMDAwMDAwMDAwMDkzNDMwOTNFMzA2NjAwMDgxNEMwMDAwMjRBCi06MTA1NUQwMDAyNDE0MDAwMzAwMDBBMDIxOEY1ODA5QTQyNDEzMDAwMTAzCi06MTA1NUUwMDAzQzAxMDgwMEFDMzgzQ0Q4OTM0RjA5MzQ5MzUxMDkzNzNCCi06MTA1NUYwMDAzMUVDMDBGRjMyMkUwMEZGMDI4RTY4MjEwMDBEMjg4MDYyCi06MTA1NjAwMDAwMEFDNTAyMTAxNTA1ODIxM0MwMTA4MDBBNDJCM0NDODlCCi06MTA1NjEwMDAzQzAxMDgwMEE0MkEzQ0M2OTM0OTA5MzQzMTIyMDBGRjBBCi06MTA1NjIwMDAwMjAyMjAyMTI0OTAwMDEwM0MwMTA4MDBBNDMwM0NDNDU4Ci06MTA1NjMwMDAyNDA3MDAwNjhGOUYwMDUwM0MwMTA4MDBBQzI3M0NDQzlCCi06MTA1NjQwMDA4Rjg4MDA1QzhGNTkwOTU4MDAwMDgwMjEwMTFGMjgyMzkyCi06MTA1NjUwMDAwNEEwMDE1MTAzM0YyMDIzMDQ4MDAxNEYwMEE0MzAyQkZDCi06MTA1NjYwMDAxMEMwMDE1MTAwMDAwMDAwM0MwMTA4MDBBQzI1M0NCMDE2Ci06MTA1NjcwMDA4RTQyMDAwMDAwNDBGODA5MDAwMDAwMDAzMDQzMDAwMkE0Ci06MTA1NjgwMDAxNDYwMDBGMTAwNDA4ODIxMzA0NDAwMDE1NDgwMDAxMDczCi06MTA1NjkwMDA4RTQyMDAwNDNDMDkwODAwOEQyOTNDQjQzQzBBQzAwMDNECi06MTA1NkEwMDAwMTJBODAyNUFGNTAwRTAwOEY0NTAwMDAzMEFCMDAwODY2Ci06MTA1NkIwMDAxMTYwRkZGRDAwMDAwMDAwOTc0RDBFMDgyNDEwMDAwMTRFCi06MTA1NkMwMDBBNzhEMDAzQzhGNEMwRTA0QUY4QzAwMzQ4RTQyMDAwNDNBCi06MTA1NkQwMDAwMDQwRjgwOTAwMDAwMDAwMDIyMjg4MjUzMjJFMDAwMjU2Ci06MTA1NkUwMDAxNUMwMDE2RjAwMDAwMDAwM0MwOTA4MDA5NTI5M0NCQzcyCi06MTA1NkYwMDAzQzA2MDgwMDk0QzYzQ0M4M0MwNDA4MDA5NDg0M0NCRUE4Ci06MTA1NzAwMDAzQzE4MDgwMDhGMTgzQ0I0MDEyNjU4MjEzQzBGMDgwMEIzCi06MTA1NzEwMDA4REVGM0NEODNDMUYwODAwOTdGRjNDRDIwMTY0MTgyMTU0Ci06MTA1NzIwMDA4RjREMDk0MDAzMDlDODIxMjQ2RTAwMDIwMzNGMjgyMTQwCi06MTA1NzMwMDAwMUY4NjAyMTNDMDEwODAwQTQyQjNDQ0FBRjhEMDA2NDM1Ci06MTA1NzQwMDAzQzAxMDgwMEFDMkMzQ0Q4M0MwMTA4MDBBNDI1M0NDMDFFCi06MTA1NzUwMDAwRTAwMDA5RTMxQzRGRkZGOEY4NzAwNDgwMDQwMjAyMUNCCi06MTA1NzYwMDAzQzAxMDgwMEEwMjczQ0QxOEU0MjAwMDgyNEU4MDAwMTNCCi06MTA1NzcwMDBBRjg4MDA0ODAwNDBGODA5MDAwMDAwMDA4RjRCMDAyQzYzCi06MTA1NzgwMDA5NzQ5MDkwODNDMEEwMDBFMDM0QTM4MjEzMTI0RkZGRkRCCi06MTA1NzkwMDAwMDA0MTlDMDhGOEEwMDUwQUY0MzAwMkM5NzQzMDkwOEJBCi06MTA1N0EwMDA5NEU2MDAxQTAwNDA0MDIxMzBERkZGRkZBQzVGMDAwMEFDCi06MTA1N0IwMDA4Q0Y5MDAxQ0FDNTkwMDA0OENGODAwMjBBQzU4MDAwODhGCi06MTA1N0MwMDA5MEVGMDAxOTMxRTMwMDAzMTA3MzAwRkIwMDAwMDAwMEFDCi06MTA1N0QwMDAyODYyMDAwMjE0NDAwMTE3MjQwNTAwMDIxMDY1MDEwOTI3Ci06MTA1N0UwMDAyNDBDMDAwMzEwNkMwMEJDMDAwMDAwMDAzQzA5MDgwMDAxCi06MTA1N0YwMDA5NTI5M0NDMDkzNUYwOTM0OTM0QzA5MjEzQzBEMDgwMDY2Ci06MTA1ODAwMDA5NUFEM0NDNjMzRjkwMEZGOTRFNTAwMkEwMDE5QzA4MjJCCi06MTA1ODEwMDAzMThGMDBGRjk3OEMwMDU4MDAxODE2MDAwMDBGNzQwMDlECi06MTA1ODIwMDAzMTI0RkZGRjAwNEUzODI1MDFBNDMwMjEwMEU2RjgyNTgxCi06MTA1ODMwMDAwMEFDQzgyMTNDMDM0MDAwMDNFM0MwMjUwMDE5NEMwMDI0Ci06MTA1ODQwMDBBRDE4MDAwMEFEMDkwMDA0OTM0RjA5MjAzQzBFMDAwNjdFCi06MTA1ODUwMDAyNTA5MDAxNDAwMEY2RTAwMDFBRTI4MjVBRDA1MDAwOEQzCi06MTA1ODYwMDA4RjQ2MDkyQzI1ODIwMDAxMzA0NzdGRkZBRDA2MDAwQ0QyCi06MTA1ODcwMDA4RjQ0MDkzMEE3ODcwMDU4MjUwNjAwMjhBRDA0MDAxMDgyCi06MTA1ODgwMDA4RjQzMDkzODAwQzAyMDIxQUQwMzAwMTRBRDJBMDAwNDY1Ci06MTA1ODkwMDA4RjVGMDk0MEFEM0YwMDA4OTM1OTA5MzczQzBFMDgwMDVGCi06MTA1OEEwMDA5MUNFM0NEMEFEMjAwMDEwMzMzODAwRkYwMzE0NzgyMTk2Ci06MTA1OEIwMDAwMDBGNjcwMDAwMEU2QzAwMDE4RDI4MjUzNEEyRkZGRjQ5Ci06MTA1OEMwMDBBRDIyMDAwQ0FGNEIwMDJDOTM0NzA5M0UzMEVBMDAwODk0Ci06MTA1OEQwMDA1MTQwMDAwRjhFNTgwMDBDM0MwMzAxMDEzNDY5MDgwQTQ2Ci06MTA1OEUwMDBBRDA5MDAyODhGNEEwMDc0QUNDQTAwMDQzQzBCMDgwMEM0Ci06MTA1OEYwMDA5MTZCM0NEMDMxNjgwMDEwNTEwMDAwMDNBQ0MwMDAwODJGCi06MTA1OTAwMDA4RjY1MDA2MEFDQzUwMDA4MjRDNDAwMEM4RTU4MDAwQ0U0Ci06MTA1OTEwMDAwMzAwRjgwOTAwMDAwMDAwM0MwRjA4MDA5NUVGM0NDQUE2Ci06MTA1OTIwMDAzQzAyMDgwMDk0NDIzQ0JFMDFFMjcwMjEyNUM0MDAwMjAyCi06MTA1OTMwMDAwRTAwMDBDNzMwODRGRkZGM0MwNjA4MDA4Q0M2M0NBQzVDCi06MTA1OTQwMDAzQzBEMDgwMDhEQUQzQ0I0MDBDRDM4MjMzQzAxMDgwMDZGCi06MTA1OTUwMDBBQzI3M0NBQzE0RTAwMDA2MDAwMDAwMDAzQzE5MDgwMDM1Ci06MTA1OTYwMDA4RjM5M0NDQzM3MkMwMDQwM0MwMTA4MDBBQzJDM0NDQzlGCi06MTA1OTcwMDAxMjAwMDA4NThGOEIwMDQ0OEY0ODBFMTA4RjkwMDA0NERBCi06MTA1OTgwMDBBRTA4MDAyMDhGNUYwRTE4QUUxRjAwMjQzQzEwMDgwMEU4Ci06MTA1OTkwMDA5NjEwM0NDMDBFMDAwMDYwMDAwMDAwMDAyNDA1MDA0MDhFCi06MTA1OUEwMDBBRjQ1MDgxNDhGODMwMDUwOEY4OTAwNEMwMDcwMTgyMTc4Ci06MTA1OUIwMDAwMDY5NTAyMzE5NDAwMDA0QUY4MzAwNTBBRjYzMDA1NEM2Ci06MTA1OUMwMDA4RjY3MDA1NEFGODcwMDRDMTIwMDAwMEMwMDAwMDAwMEVECi06MTA1OUQwMDA4RjQ0MDA3NDkzNkQwMDgxMzQwRUZBMDAyREE2MDAwN0U5Ci06MTA1OUUwMDAxMEMwMDAwNTAwOEUxODIxOTM3ODAwODEyNDAyMDFGNDc0Ci06MTA1OUYwMDAwMzAyNzgwNDAxRTQxODIxQUY2MzAwMEM4RjRDMDk1Q0FBCi06MTA1QTAwMDA4Rjk5MDA1QzAxOTkyMDIzMTg4MDAwMDMwMDAwMDAwMDlBCi06MTA1QTEwMDA4RjUwMDk1Q0FGOTAwMDVDMEUwMDAwNjIwMDAwMDAwMDM3Ci06MTA1QTIwMDA4RjhCMDA1MDhFNDgwMDEwM0MwMTA4MDBBQzJCM0NENEZBCi06MTA1QTMwMDAwMTAwRjgwOTAwMDAwMDAwM0MxRjA4MDA4RkZGM0NBQzhCCi06MTA1QTQwMDAxN0UwRkVGQzI0MDcwMDA2OEY0NTAwMjQ5NzQyMDkwODUyCi06MTA1QTUwMDA4RjhBMDA2NDhGOTQwMDUwM0MwRjAwMUY5Nzg3MDA1ODc2Ci06MTA1QTYwMDA4RjgzMDA1NDhGOTMwMDRDMzA0REZGRkYzNUVFRkY4MDQ1Ci06MTA1QTcwMDAwMEFFNDgyNDAwMEQzMUMwMzIzMjAwMTBBRjQ2MDAyNDgxCi06MTA1QTgwMDBBNDY3MDAyQ0FGNDkwMDI0QUY2QTAwNDRBRjc0MDA1MEYzCi06MTA1QTkwMDBBRjczMDA1NDU2NDAwMDdFOEVCODAwMDQzMjI0MDA0MDlDCi06MTA1QUEwMDA1NDgwMDAzMjhFQjEwMDA4OEVBQzAwMEMwMTgwRjgwOUUxCi06MTA1QUIwMDAwMDAwMDAwMDhGQkYwMDMwOEZCNTAwMkM4RkI0MDAyODhECi06MTA1QUMwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODVDCi06MTA1QUQwMDAwM0UwMDAwODI3QkQwMDM4M0MwOTA4MDA5NTI5M0NDMEI4Ci06MTA1QUUwMDAzQzA0MDgwMDk0ODQzQ0NBM0MxRjA4MDA5N0ZGM0NCQzVGCi06MTA1QUYwMDA5NEY4MDAyNDMxMjNGRkZGOTRFRjAwMjgwMDgzQzgyMThECi06MTA1QjAwMDAwMzNGNzAyMzAwMTgyQzAwMDAwRjY0MDAyNUNERkZFRTJBCi06MTA1QjEwMDAwMThEMzAyNTM0QTI4MTAwMjQwMzA4MDBBRDAyMDAwQzYxCi06MTA1QjIwMDBBRDA2MDAxMEFEMDMwMDE4QUQwMDAwMTQwQTAwMDlDRTQ4Ci06MTA1QjMwMDAyNTA4MDAxQzkzNDcwMTA5OEY4ODAwMzgwMDA3RkUwMEU0Ci06MTA1QjQwMDAwM0U4QzgyNUFGNTkwMDgwOEY1ODA5QTA4RjUzMDlBNEQ2Ci06MTA1QjUwMDBBRkI4MDAxMEFGNTgwRTE0OEZCNDAwMTBBRjU0MEUxMDMxCi06MTA1QjYwMDBBRjUzMEUxQzBBMDAwOTQyQUY1MzBFMTgwMjIwRjgwOTY5Ci06MTA1QjcwMDAwMDAwMDAwMDhFQUMwMDBDMDE4MEY4MDkwMDAwMDAwMDVECi06MTA1QjgwMDAwQTAwMEE3RjhGQkYwMDMwQTU2MDAwMjBBNTczMDAyMkE1Ci06MTA1QjkwMDAwQTAwMEEzNEFENzMwMDI0M0MwMTA4MDBBQzIwM0NCMDdDCi06MTA1QkEwMDAwQTAwMDk2RThFNDIwMDAwM0MwMTA4MDBBQzI0M0NCMEEzCi06MTA1QkIwMDAwQTAwMDk2RThFNDIwMDAwM0MwOTA4MDA5NTI5M0NDMDhECi06MTA1QkMwMDAzQzFGMDgwMDk3RkYzQ0NBM0MxOTA4MDA5NzM5M0NCQ0IxCi06MTA1QkQwMDA5NEVGMDAyNDMxMjRGRkZGMDNFNEMwMjEwMzE5NzAyMzU0Ci06MTA1QkUwMDAwMDBGNjQwMDI1Q0RGRkYyMDE4RDI4MjVBQzQ1MDAwQzg3Ci06MTA1QkYwMDAyNDAyMDgwMEFEMDIwMDE0QUQwMDAwMTAwQTAwMDlDRTE2Ci06MTA1QzAwMDAyNTA4MDAxODk0RTYwMDI0OTRFMzAwMjgzQzA5MDgwMEM1Ci06MTA1QzEwMDA5NTI5M0NDMDAwMDYyNDAwMDAwM0ZDMDAzNDk5ODEwMDUzCi06MTA1QzIwMDAzN0Y4MDgwMEFEMTkwMDBDQUQxODAwMTAwQTAwMDlDRUI1Ci06MTA1QzMwMDAyNTA4MDAxNDE0NjBGRUVEMDAwMDAwMDA5NEVGMDAyNDFECi06MTA1QzQwMDAzQzA5MDgwMDk1MjkzQ0MwMDAwRjc0MDAzNUNEMDgwMEMwCi06MTA1QzUwMDBBRDBEMDAwQzBBMDAwOUNFMjUwODAwMTA5MzUyMDEwOTcxCi06MTA1QzYwMDAwMDAwMjgyMTBFMDAwNjAwMzI0NDAwRkY4RkJGMDAzMEU0Ci06MTA1QzcwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDgyCi06MTA1QzgwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzODVBCi06MTA1QzkwMDAwMzAwRjgwOTAwMDAwMDAwMEEwMDBBNzkzMjI0MDA0MERECi06MTA1Q0EwMDAxMjAwRkY2OTAwMDAwMDAwOEY1NDBFMTQ4RjkyMDA0NDEwCi06MTA1Q0IwMDBBRTU0MDAyMDhGNTMwRTFDMEEwMDBBNjNBRTUzMDAyNDFBCi06MTA1Q0MwMDA4RjgyMDAxQzAwODA0MDIxM0MwNDAxMDA5MDQ3MDA4NTI5Ci06MTA1Q0QwMDAzMEUzMDAyMDEwNjAwMDA5MDAwMDAwMDAzQzA3MDgwMENECi06MTA1Q0UwMDA4Q0U3M0NENDhGODMwMDE4MDBFMzIwMjMwNDgwMDAwODU1Ci06MTA1Q0YwMDA5Mzg5MDAwNDE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwODVECi06MTA1RDAwMDAwMDgwMTAyMTNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMTA1Ci06MTA1RDEwMDAxMTIwMDAwQjAwNjczODIzOEY4QzAwMjAyNDA5MDAzNEU5Ci06MTA1RDIwMDA5MThCMDBCQzMxNkEwMDAyNTE0MDAwMDEyNDA5MDAzMDBGCi06MTA1RDMwMDAwMEU5NjgyQjE1QTBGRkYxMDEwMDIwMjEwMEU5MzgyM0JDCi06MTA1RDQwMDAyNDE5RkZGQzAwQjlDMDI0MDBGOTc4MjQwMEY4NzAyQjU2Ci06MTA1RDUwMDAxNUMwRkZFQTAxRTgyMDIxMzBDMjAwMDMwMDAyMTgyMzI5Ci06MTA1RDYwMDAxNEMwMDAxMjMwNjkwMDAzMDAwMDMwMjEwMEE5NzAyMTI2Ci06MTA1RDcwMDAwMUM2NjgyMTAwRUQ2MDJCMTE4MEZGRTAzQzA0MDEwMEFBCi06MTA1RDgwMDAyRDJGMDAwMTAwMDY0ODJCMDEwNTM4MjEwMUU5MzAyNEEwCi06MTA1RDkwMDAxNEMwRkZEQTI0RTRGRkZDMjQxOUZGRkMwMEI5QzAyNDdFCi06MTA1REEwMDAwMzA4MjAyMTAzRTAwMDA4MDA4MDEwMjE4RjhCMDAyMEQxCi06MTA1REIwMDAyNDA2MDAwNDkxNkEwMEJDMzE0NDAwMDQxNDgwRkZFQzA2Ci06MTA1REMwMDAwMEE5NzAyMTBBMDAwQjJEMDAwMDMwMjEyN0JERkZFODNCCi06MTA1REQwMDBBRkJGMDAxMDhGNDYwMTAwOTM0QTAxMDkzQzFGMDgwMDI1Ci06MTA1REUwMDA4RkZGMDA5MDI0MDdGRjgwMzE0RjAwRkYzMUU4MDA3RkQ0Ci06MTA1REYwMDAwMDA4NjE0MDAzRTZDODIxMDMyQ0MwMjEyNzA5MDEyMEM3Ci06MTA1RTAwMDAwMTI3NzAyNDNDMDEwODAwQTAyRjNEMTBBRjRFMDgwQzY0Ci06MTA1RTEwMDAzQzBEMDgwMDhEQUQwMDkwM0MwNDAwODAzNDgyMDAwM0VFCi06MTA1RTIwMDAwMUE2NTgyMTAxNkMxODIxMjQ2NTAxMjAzMEFBMDA3OEIwCi06MTA1RTMwMDAwMTQyNDAyNUFGNDgwODFDM0MxRjA4MDA4RkZGMDA5MDFFCi06MTA1RTQwMDA4Rjg4MDA0MDAzRTZDMDIxMzMxOTAwMDcwMzA3NDgyNDY4Ci06MTA1RTUwMDAwMzNBNzgyMUFGNDkwMDI4MjVFOTA5QzA5NTJFMDAwMkIwCi06MTA1RTYwMDAzQzBEMDgwMDhEQUQwMDhDM0MwQTA4MDA4RDRBMDA5MDY2Ci06MTA1RTcwMDAzMUNDM0ZGRjAxQTYxODIxMDAwQzU5ODAwMDZCMjgyMTZFCi06MTA1RTgwMDAwMEE3MjAyNEFGNDQwMDJDOTUyMjAwMDIzQzFGMDgwMEVDCi06MTA1RTkwMDA4RkZGMDA4QzkxMDcwMDg1MzA1OTNGRkYwM0U2NzgyMTgyCi06MTA1RUEwMDAwMDE5QzE4MDAxNDY3MDIxMDFGODY4MjEzMUNDMDA3RkMyCi06MTA1RUIwMDAzMUFCMDA3RjAxOUEyODIxMDE3QTUwMjEzQzAzMDAwQzZDCi06MTA1RUMwMDAzQzA0MDAwRTAwQTMyODIxMDE0NDEwMjEzMEU2MDAyMEVDCi06MTA1RUQwMDAyNzQ3MDk4MEFGODIwMDJDQUY4ODAwMUNBRjg5MDAyNEJGCi06MTA1RUUwMDBBRjg1MDAyMDEwQzAwMDA2QUY4NzAwMjg4RDAyMDA1MDRCCi06MTA1RUYwMDA4Q0E0MDEwQzAwNDQzMDIzMThDMDAwNzcwMDAwMDAwMDdGCi06MTA1RjAwMDA5MTBDMDA4NTI0MERGRkRGMDE4RDM4MjRBMTA3MDA4NTQ5Ci06MTA1RjEwMDA4RjhCMDAxQzhGODkwMDI0OEY4NzAwMjg4RDY1MDA0QzkzCi06MTA1RjIwMDBBRjg1MDAxODkxMkYwMDBEMzFFRTAwMjAxMUMwMDAxNzMxCi06MTA1RjMwMDAwMDAwMDAwMDI0MDkwMDAxQTM4OTAwMDRBRjgwMDAwQ0M4Ci06MTA1RjQwMDA4Q0U0MDAyNDhGODUwMDBDMjQwQTAwMDhBRjgwMDAwODMwCi06MTA1RjUwMDBBRjgwMDAxMDNDMDEwODAwQTQyQTNDQkUzQzAxMDgwMEIwCi06MTA1RjYwMDBBNDIwM0NEMjBFMDAwQjAxMDAwMDMwMjE4Rjg1MDAyNEJDCi06MTA1RjcwMDA4RkJGMDAxMEFGODIwMDE0OTBBODAwMEQyN0JEMDAxODNECi06MTA1RjgwMDAwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDE5MTNGMDAwMkJFCi06MTA1RjkwMDAyNDE4MDAwMTMzRjkwMEZGMDAxOTIxODIxMDk4MDAzOUZDCi06MTA1RkEwMDAyNDA4MDAwMjEwODgwMDVCOEY4NjAwMkM4Q0U1MDAyNEZBCi06MTA1RkIwMDAxNEEwMDAxQjhGOUYwMDIwOTEyMjAwMDAyNDBBMDAwNURFCi06MTA1RkMwMDAzMDQ2MDAzRjEwQ0EwMDQ3MjQwNDAwMDE4Rjg2MDAwOEI1Ci06MTA1RkQwMDBBMzg0MDAwNEFGODYwMDEwQUY4NjAwMEM4Q0U0MDAyNDdDCi06MTA1RkUwMDA4Rjg1MDAwQzI0MEEwMDA4M0MwMTA4MDBBNDJBM0NCRTRFCi06MTA1RkYwMDAzQzAxMDgwMEE0MjAzQ0QyMEUwMDBCMDEwMDAwMDAwMDcwCi06MTA2MDAwMDA4Rjg1MDAyNDhGQkYwMDEwQUY4MjAwMTQ5MEE4MDAwRDcwCi06MTA2MDEwMDAyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDgzMEUyMDAwMTAzCi06MTA2MDIwMDA4Q0Y4MDAwODhDRjkwMDI0OEZFRTAwQzRBMzgwMDAwNEQzCi06MTA2MDMwMDA4Q0U0MDAyNEFGOEUwMDBDOEY4NTAwMEM4Rjg2MDAwODQ2Ci06MTA2MDQwMDAwMzE5NzgyMzI0MEEwMDA4QUY4RjAwMTAzQzAxMDgwMEQwCi06MTA2MDUwMDBBNDJBM0NCRTNDMDEwODAwQTQyMDNDRDIwRTAwMEIwMTQ3Ci06MTA2MDYwMDAwMDAwMDAwMDhGODUwMDI0OEZCRjAwMTBBRjgyMDAxNDU1Ci06MTA2MDcwMDA5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODcxCi06MTA2MDgwMDAzMEUyMDAwMTkxMjMwMDAwMzA2MjAwM0YxMDQ0MDAyN0ZECi06MTA2MDkwMDA4Rjg1MDAyMDhDRTQwMDI0MTQ4MDAwMjEwMDAwMDAwMDgzCi06MTA2MEEwMDA4RDJFMDAxODNDMTg3RkZGOEY4NTAwMjAzNzBGRkZGRkQzCi06MTA2MEIwMDAwMUNGMTgyNEFGODMwMDA4OEY5RjAwMDg4Q0E4MDA4NEFDCi06MTA2MEMwMDAwM0U4QzgyQjE3MjAwMDAyMDNFMDIwMjE4Q0E0MDA4NEUxCi06MTA2MEQwMDAwQTAwMEJCQ0FGODQwMDA4OENBMzAxMEMwQTAwMEI5QUM5Ci06MTA2MEUwMDBBRjgzMDAxODhEMkMwMDE4OEY4NjAwMDgzQzBEN0ZGRkIxCi06MTA2MEYwMDA4Rjg5MDAyMDM1QTNGRkZGMDE4MzU4MjQyNDA0MDAwMTY5Ci06MTA2MTAwMDBBRjhCMDAxMEFEMjAwMENDQTM4NDAwMDQwQTAwMEJDOEE0Ci06MTA2MTEwMDBBRjg2MDAwQzhDQ0EwMDE0MEEwMDBCQkNBRjhBMDAwOEMyCi06MTA2MTIwMDA4Q0EzMDBDODBBMDAwQkZGQUY4MzAwMDg4Rjg0MDAyQ0VCCi06MTA2MTMwMDA4Q0FDMDA2NDhDOEQwMDE0MDE4RDU4MkIxMTYwMDAwNDEwCi06MTA2MTQwMDAwMDAwMDAwMDhDQTIwMDY0MEEwMDBCRkZBRjgyMDAwODcwCi06MTA2MTUwMDA4QzgyMDAxNDBBMDAwQkZGQUY4MjAwMDg4Rjg1MDAwQ0IwCi06MTA2MTYwMDAyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTQxNEEwMDAwN0I3Ci06MTA2MTcwMDBBRkIwMDAxMDhGODYwMDI0MjQwMjAwMDU5MEM0MDAwMEY4Ci06MTA2MTgwMDAzMDgzMDAzRjEwNjIwMEI2OEY4NDAwMjA4RjkxMDAwODlBCi06MTA2MTkwMDAwMEEwODAyMThGOEMwMDI4M0MwNTA4MDA4Q0E1M0NCMDE1Ci06MTA2MUEwMDA4RDhCMDAwNDMxNjYzRkZGMDBDNTUwMkI1NTQwMDAwMTI4Ci06MTA2MUIwMDAwMEMwMjgyMTkzOEQwMDA0MTFBMDAwNzMwMEIwRjgyQkJCCi06MTA2MUMwMDA4Rjk4MDAyMDI0MDQwMDM0OTMwRjAwQkMzMUVFMDAwMkFECi06MTA2MUQwMDA1MUMwMDAwMTI0MDQwMDMwMDBBNEM4MkIxNzIwMDBEMUI2Ci06MTA2MUUwMDAwMDAwMDAwMDAwQTQyODIzMDBCMEY4MkIzQzAxMDgwMEE4Ci06MTA2MUYwMDBBNDI0M0NCQzE3RTAwMDY4MDIwMDIwMjEzQzAzMDgwMEY2Ci06MTA2MjAwMDA4QzYzM0NBQzAwODMxMDJCNTQ0MDAwMDEwMDgwMTgyMUFCCi06MTA2MjEwMDA4Rjg4MDAyNDNDMDEwODAwQUMyMzNDQjQwMDAwNDgyMUQ2Ci06MTA2MjIwMDA5MTA0MDAwRDMwODMwMDIwNTA2MDAwMDE4RjQ5MEUxODRBCi06MTA2MjMwMDA4RjgzMDAxNDAxMjMzODJCMTBFMDAwNTkwMDAwMDAwMDY4Ci06MTA2MjQwMDAzQzA0MDgwMDhDODQzQ0I0MDA4OTU4MjEwMDZCNTAyQjFFCi06MTA2MjUwMDAxMTQwMDA1NjAwOTA2MDJCMDA2OTMwMjMwMEMwMjAyMUJGCi06MTA2MjYwMDAzQzAxMDgwMEFDMjYzQ0I0MTIwMDAwMDMyNDFGRkZGQ0Q0Ci06MTA2MjcwMDAxMDkwMDA4QTMyMjcwMDAzMDA5RkM4MjQzQzAxMDgwMEM4Ci06MTA2MjgwMDBBQzM5M0NCNDNDMDEwODAwQTQyMDNDRDI4Rjg0MDAwQzAzCi06MTA2MjkwMDAxMjA0MDAwNzhGODMwMDIwQUY5MTAwMDgwMjAwMjAyMTI0Ci06MTA2MkEwMDA4QzcxMDBDQ0FGOTAwMDBDMjYzMDAwMDFBQzcwMDBDQzlCCi06MTA2MkIwMDAzQzAyMDgwMDhDNDIzQ0I0OEY4QTAwMTAyNDA3MDAxODZFCi06MTA2MkMwMDAwMDgyMjAyMzAxNDIyODIzQUY4NDAwMEMxMDgwMDAwMkFBCi06MTA2MkQwMDBBRjg1MDAxMDI0MDcwMDEwOEY4NjAwMUMzQzAxMDgwMEM5Ci06MTA2MkUwMDBBMDI3M0NEMDI0MDcwMDQwOTBDQzAwODUzMThCMDBDMDEzCi06MTA2MkYwMDAxMTY3MDA0MDhGOEQwMDE0MTRBMDAwMTUwMDAwMjAyMUFDCi06MTA2MzAwMDA5MzRBMDEwOThGNDIwOTc0MzE0NTAwRkYwMDAyMjYwMkI5Ci06MTA2MzEwMDAyNEEzMDAwMTMwOTAwMDdGMzA3MTAwN0YxMjMwMDA3QTlBCi06MTA2MzIwMDAyNDA3RkY4MEEwQzMwMDgzM0MwOTA4MDA4RDI5M0NDQ0QyCi06MTA2MzMwMDA4Rjg4MDAyNDI0MEQwMDAyMzUyQzAwMDgzQzAxMDgwMDQxCi06MTA2MzQwMDBBMDJEM0QxMTNDMDEwODAwQUMyQzNDQ0MyNDA0MDAxMEQ1Ci06MTA2MzUwMDA5MTBFMDAwRDMxQzYwMDIwMTBDMDAwMDUwMDgwMTgyMUVDCi06MTA2MzYwMDAyNDA4MDAwMTNDMDEwODAwQUMyODNDQjQzNDgzMDAwMTNGCi06MTA2MzcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTgzCi06MTA2MzgwMDAwM0UwMDAwODI3QkQwMDIwM0MwMTA4MDBBNDIwM0NCQzFECi06MTA2MzkwMDAxM0UwRkY5QTAyMDAyMDIxMEEwMDBDNTAwMEEwMjAyMUU3Ci06MTA2M0EwMDAzQzA0MDgwMDhDODQzQ0I0MDA5MDYwMkIxMTgwRkZBRTRDCi06MTA2M0IwMDAwMDAwMDAwMDNDMEYwODAwOTVFRjNDQkMwMUU0NzAyMTk4Ci06MTA2M0MwMDAwMUM2NjgyQjExQTAwMDA3MkM4MjAwMDQzQzFGNjAwMDRFCi06MTA2M0QwMDA4RkY5NTQwNDMzMzgwMDNGMTcwMEZGRTUyNDAzMDA0MkNGCi06MTA2M0UwMDAyQzgyMDAwNDEwNDBGRkEwMjQwMzAwNDIwQTAwMENBRURGCi06MTA2M0YwMDA4RkJGMDAxODE1MkRGRkMwMDAwMDAwMDA4Q0RGMDA3NDU3Ci06MTA2NDAwMDAzQzAzODAwMDI0MDVGRjgwMDNFM0M4MjVBQ0Q5MDA3NDU5Ci06MTA2NDEwMDA5MEQ4MDA4NTI0MEUwMDA0MjQwNDAwMTAzMzBGMDAzRkEwCi06MTA2NDIwMDAwMUU1NDAyNUEwQzgwMDg1OEY4ODAwMjQzQzAxMDgwMEI0Ci06MTA2NDMwMDBBMDJFM0QxMTI0MDMwMDAxOTEwNjAwMEQzMEM5MDAyMDVCCi06MTA2NDQwMDAxNTIwMDAwMzAwMDAwMDAwM0MwMzA4MDA4QzYzM0NCNEVFCi06MTA2NDUwMDAzQzAxMDgwMEFDMjMzQ0FDMEEwMDBDQTUwMDAwMDAwMDg1Ci06MTA2NDYwMDA4Rjg3MDAxMDhDODgwMDg0MDBFODI4MkIxNEEwMDAwMjdECi06MTA2NDcwMDAwMEUwODgyMThDOTEwMDg0MjQwOTAwMDFBMzg5MDAwNDk0Ci06MTA2NDgwMDA4RjQ0MEUxODAyMjAyODIxMEUwMDBCMDEwMjIwMzAyMTFCCi06MTA2NDkwMDAwMjIwODAyMTBBMDAwQzM2QUY4MjAwMTQwMDA3MTgyMzY2Ci06MTA2NEEwMDAzMDY2MDAwMzNDMDEwODAwQTQyNjNDRDIxMjIwMDAwNUZGCi06MTA2NEIwMDA4RjhDMDAyMDkxOEIwMEJDMzE2QTAwMDQxNTQwMDAxNUMwCi06MTA2NEMwMDAyNENEMDAwNDNDMEYwODAwOTVFRjNDRDIwMUU0NzAyMTdDCi06MTA2NEQwMDAwMEFFMzAyQjUwQzBGRjZFOEY4NDAwMEMyQzg1MDAwNTYxCi06MTA2NEUwMDAxNEEwRkZBMzI0MDMwMDQyMzA5ODAwMDMxNzAwMDAwMjA5Ci06MTA2NEYwMDAwMDk4MTgyMzI0ODNGRkZDM0MwMTA4MDBBQzIzM0NCNDIzCi06MTA2NTAwMDAwQTAwMEM3MjAwMDAwMDAwMDBBNzU4MjQwQTAwMEM5QTMwCi06MTA2NTEwMDAwMTY3MTgyNjNDMDEwODAwQTQyRDNDRDIwQTAwMEQwMjk4Ci06MTA2NTIwMDAwMDAwMDAwMDNDMDEwODAwQUMyMDNDQjQwQTAwMENBREE3Ci06MTA2NTMwMDAyNDAzMDA0MjhGODMwMDEwMTQ2MDAwMDcwMDAwMTAyMTI0Ci06MTA2NTQwMDA4Rjg4MDAyNDI0MDUwMDA1OTEwNjAwMDAzMEM0MDBGRjU4Ci06MTA2NTUwMDAxMDg1MDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEI4Ci06MTA2NTYwMDA5MTBBMDAxODMxNDkwMEZGMDAwOTM5QzIxNEUwRkZGQTBFCi06MTA2NTcwMDA4Rjg1MDAxQzNDMDQwODAwOTQ4NDNDQkMzQzAzMDgwMDRDCi06MTA2NTgwMDA4QzYzM0NENDNDMTkwODAwOEYzOTNDQjQzQzBGMDgwMEE0Ci06MTA2NTkwMDA5NUVGM0NEMjAwNjRDMDIxOENBRDAwNTQwMzE5NzAyMUVBCi06MTA2NUEwMDAwMUNGNjAyMTAxOEQ1ODIzMTk2MDAwMUQwMDAwMDAwMEZCCi06MTA2NUIwMDA5MTBFMDAxQzhGOEMwMDJDOTc0QjBFMTAzMUNEMDBGRkRDCi06MTA2NUMwMDA4RDg1MDAwNDAxNkQzMDIzOEQ4ODAwMDAzMENFRkZGRkUzCi06MTA2NUQwMDAwMDBFNTEwMDAwQUFDODIxMDAwMDM4MjEwMTA3MjAyMTI3Ci06MTA2NUUwMDAwMzJBMTgyQjAwODNDMDIxQUQ5OTAwMDRBRDk4MDAwMDQ4Ci06MTA2NUYwMDA5MThGMDAwQTAxQ0Y2ODIxQTE4RDAwMEE4Rjg4MDAyQzlECi06MTA2NjAwMDA5NzRCMEUxMkE1MEIwMDA4OTUwQTAwMzgyNTQ5MDAwMThBCi06MTA2NjEwMDBBNTA5MDAzODkxMDcwMDBEMzRFNjAwMDhBMTA2MDAwRDE5Ci06MTA2NjIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA5Mzg3MDAwNDlFCi06MTA2NjMwMDA4RjhGMDAyNDhGQUQwMDE0M0MwRTdGRkY4Rjg5MDAwQ0RDCi06MTA2NjQwMDAzNUM4RkZGRkFGQkYwMDFDQUZCMDAwMTgwMUE4MTgyNDY5Ci06MTA2NjUwMDA5MUVBMDAwRDAwMDcxN0MwM0MxRkJGRkYwMDYyNTgyNURDCi06MTA2NjYwMDAyRDJFMDAwMThGOTAwMDE4MzdGOUZGRkYzQzE4MDgwMDBECi06MTA2NjcwMDA4RjE4M0NENDNDMEYwODAwOTVFRjNDQ0EwMTc5NjgyNDgwCi06MTA2NjgwMDAwMDBFNDc4MDNDMDdFRkZGM0MwNUYwRkYwMUE4MTgyNUVFCi06MTA2NjkwMDAzMTQ5MDAyMDM0RTJGRkZGMzRBQ0ZGRkYwMzEwNTgyM0UwCi06MTA2NkEwMDAyN0E1MDAxMDI0MDYwMDAyMjVFQTAwMDIwMDYyMTgyNDMzCi06MTA2NkIwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDQwMjE4RjQ4MEUxQzIwCi06MTA2NkMwMDBBN0FBMDAxMjA1NjAwMDM3MjQwNzAwMDAzMEZGMDBGRjcyCi06MTA2NkQwMDAwMDFGQ0YwMDhGOEIwMDFDMDA3OTM4MjVBRkE3MDAxNDU2Ci06MTA2NkUwMDA5MTZGMDA4NTNDMDgwODAwOTEwODNDRDEzQzE4REZGRjAxCi06MTA2NkYwMDAzMUVFMDBDMDM3MEFGRkZGMDAwRTE4MkIzQzFGMDgwMEM4Ci06MTA2NzAwMDA5N0ZGM0NDNDAwRUE2ODI0QTNBODAwMTEwMDAzMTc0MEM3Ci06MTA2NzEwMDAwMUEyNDgyNThGQjkwMDEwQUZBOTAwMTQzQzBBMDgwMDU3Ci06MTA2NzIwMDA5MTRBM0NEM0E3QkYwMDE2OEZBODAwMTQwMzJDQzAyNEE1Ci06MTA2NzMwMDAzQzBCMDEwMDNDMEYwRkZGMDMwQjE4MjUzMTQ3MDAwM0YyCi06MTA2NzQwMDAzNUVFRkZGRjAxMEM2ODI0MDAwNzE2MDAwMDZFRjgyNEU4Ci06MTA2NzUwMDAzQzA5NzAwMDAxQTJDODI1MDNFOTU4MjVBRkI5MDAxNDBGCi06MTA2NzYwMDBBRkFCMDAxMDBFMDAwMDc2QTNBMDAwMTU4RjhDMDAyNEE0Ci06MTA2NzcwMDAyNjAyMDAwODkxODYwMDBEMzBDNDAwMjAxMDgwMDAwNjFCCi06MTA2NzgwMDA4RkJGMDAxQzNDMDUwODAwOTRBNTNDQzAyNEIwRkZGRjRGCi06MTA2NzkwMDAzQzAxMDgwMEE0MzAzQ0MwOEZCMDAwMTgwM0UwMDAwOEEyCi06MTA2N0EwMDAyN0JEMDAyMDhGOTgwMDE0MDExODUwMkI1NTQwRkZDN0JCCi06MTA2N0IwMDAyNDA3MDAwMTBBMDAwRDg1MzBGRjAwRkY5MzgyMDAwNENBCi06MTA2N0MwMDAyN0JERkZFMEFGQkYwMDE4MTA0MDAwMEYwMDgwNTAyMTMwCi06MTA2N0QwMDA4Rjg4MDAyNDI0MEIwMDA1OEY4OTAwMDg5MTA3MDAwMDkyCi06MTA2N0UwMDA4Rjg0MDAyMDAxMDAyODIxMzBFMzAwM0Y4Rjg2MDAyQzk5Ci06MTA2N0YwMDAxMDZCMDAwODAwMDAzODIxQUZBOTAwMTAwRTAwMDQwRTM1Ci06MTA2ODAwMDBBRkFBMDAxNEEzODAwMDA0OEZCRjAwMTgwM0UwMDAwOEEzCi06MTA2ODEwMDAyN0JEMDAyMDhEMTkwMDE4M0MwRjA4MDA4REVGM0NCNEY3Ci06MTA2ODIwMDA4Rjk4MDAxMDNDMDI3RkZGOEQwODAwMTQzNDVGRkZGRjNCCi06MTA2ODMwMDAwMzNGNjgyNDAxRjg3MDIxMDFBRTYwMjMwMTg4MzgyMUVDCi06MTA2ODQwMDBBRkE5MDAxMDBFMDAwNDBFQUZBQTAwMTQwQTAwMEREMzY5Ci06MTA2ODUwMDBBMzgwMDAwNDhGODcwMDI0M0MwNTA4MDA5NEE1M0NEMjQ3Ci06MTA2ODYwMDAzQzAyMDgwMDhDNDIzQ0NDOTBFNjAwMEQwMDA1MjQwMDYwCi06MTA2ODcwMDAzMEMzMDAyMDEwNjAwMDJDMDA0NDQwMjU4Rjg1MDAxQzkwCi06MTA2ODgwMDAwMDAwNjAyMTI0MEIwMDAxOTBBMzAwODUwMDAwNDgyMTM2Ci06MTA2ODkwMDAyNDBBMDAwMTNDMEY4MDAwMzVFRTAwNzA4REM3MDAwMDE3Ci06MTA2OEEwMDBBRjg3MDAzMDhGNTgwMTc4MDcwMEZGRkUzQzAzODAwMDVGCi06MTA2OEIwMDAzNDc5MDA3MDhGMzgwMDAwM0MwNTA4MDA4Q0E1MDA3NDA2Ci06MTA2OEMwMDAzQzBEMDgwMDhEQUQwMDcwMDMwNzc4MjMwMEFGMzgyMTIwCi06MTA2OEQwMDAwMDAwMTAyMTAwRUYzMDJCMDFBMjIwMjEwMDg2MTgyMTlBCi06MTA2OEUwMDAzQzAxMDgwMEFDMjcwMDc0M0MwMTA4MDBBQzIzMDA3MDk4Ci06MTA2OEYwMDBBRjRCMDE0ODNDMTkwODAwOEYzOTNDRDRBNzQ5MDE0NEVCCi06MTA2OTAwMDBBNzRBMDE0NkFGNTkwMTRDM0MwQjA4MDA5MTZCM0NEMUEyCi06MTA2OTEwMDBBMzRCMDE1MkFGNDgwMTU0M0MwODEwMDBBNzRDMDE1ODRBCi06MTA2OTIwMDAwM0UwMDAwOEFGNDgwMTc4OEY0QjBFMUMzQzBBMDgwMEJBCi06MTA2OTMwMDA4RDRBM0NCNDk3NDkwRTE2OTc0RDBFMTQwMTQ1NjAyMUJGCi06MTA2OTQwMDAzMTJBRkZGRjBBMDAwREY2MzFBOUZGRkY4RjgzMDAyNEQzCi06MTA2OTUwMDA5MDY0MDAwRDMwODIwMDIwMTA0MDAwMjkwMDAwMDAwMEVCCi06MTA2OTYwMDAwMDAwNDgyMTAwMDA1MDIxMDAwMDQwMjEzQzA3ODAwMDI5Ci06MTA2OTcwMDAzNEVCMDA3MDhENjcwMDAwQUY4NzAwMzA4RjRDMDE3OERBCi06MTA2OTgwMDAwNTgwRkZGRTNDMEQ4MDAwMzVBQzAwNzA4RDhCMDAwMDUzCi06MTA2OTkwMDAzQzA1MDgwMDhDQTUwMDc0M0MwNDA4MDA4Qzg0MDA3MDQxCi06MTA2OUEwMDAwMTY3MzAyMzAwQTY3ODIxMDAwMDEwMjEwMUU2QzgyQkUyCi06MTA2OUIwMDAwMDgyQzAyMTAzMTk3MDIxM0MwMTA4MDBBQzJGMDA3NDMzCi06MTA2OUMwMDAzQzAxMDgwMEFDMkUwMDcwQUY0OTAxNDgzQzBEMDgwMEE2Ci06MTA2OUQwMDA4REFEM0NENEE3NDgwMTQ0MjQwOTAwNDBBNzRBMDE0Njk0Ci06MTA2OUUwMDAzQzA4MTAwMDI0MEFGRjkxQUY0RDAxNENBMzRBMDE1MjBDCi06MTA2OUYwMDBBRjQ5MDE1NEE3NDAwMTU4MDNFMDAwMDhBRjQ4MDE3OEFGCi06MTA2QTAwMDA4RjQ5MEUxODk3NDYwRTEyOTc0NTBFMTAzMENBRkZGRjk5Ci06MTA2QTEwMDAwQTAwMEUyQzMwQThGRkZGOEY4MzAwMjQyN0JERkZGODRCCi06MTA2QTIwMDA5MDY0MDAwRDMwODIwMDIwMTA0MDAwM0EwMDAwMDAwMDA5Ci06MTA2QTMwMDAyNDBCMDAwMTAwMDA0ODIxMjQwQTAwMDEzQzA4ODAwMENBCi06MTA2QTQwMDAzNTA3MDA3MDhDRTMwMDAwQUY4MzAwMzA4RjRDMDE3ODc1Ci06MTA2QTUwMDAwNTgwRkZGRTNDMEU4MDAwM0MwNDA4MDA5MDg0M0QxMDQxCi06MTA2QTYwMDAzNUM3MDA3MDhDRUMwMDAwM0MwNTA4MDA4Q0E1MDA3NDU0Ci06MTA2QTcwMDBBM0E0MDAwMzNDMTkwODAwOEYzOTAwNzA4RkFEMDAwMEZCCi06MTA2QTgwMDAwMTgzMzAyMzAwQTYzODIxMDAwMDEwMjEwMzIyNzgyMTQxCi06MTA2QTkwMDAwMEU2QzAyQjAxRjg2MDIxMDFBRTQwMjVBRkE4MDAwMDQwCi06MTA2QUEwMDAzQzAxMDgwMEFDMjcwMDc0M0MwMTA4MDBBQzJDMDA3MENECi06MTA2QUIwMDA5MzQ2MDEwQTNDMDQwODAwOTA4NDNEMTFBM0EwMDAwMjAzCi06MTA2QUMwMDBBM0E2MDAwMThGQTMwMDAwM0MwNTgwRkYzMDk5MDA3RjQyCi06MTA2QUQwMDAzNEEyRkZGRjAwNjI3ODI0MDAxOUM2MDAwMUY4NzAyNTc3Ci06MTA2QUUwMDAyNDBEMzAwMEFGNEUwMTRDMjdCRDAwMDhBRjREMDE1NEJFCi06MTA2QUYwMDBBNzQwMDE1OEFGNEIwMTQ4QTc0OTAxNDRBNzRBMDE0NkE2Ci06MTA2QjAwMDAzQzA5MTAwMDI0MEFGRjgwQTM0QTAxNTIwM0UwMDAwODU4Ci06MTA2QjEwMDBBRjQ5MDE3ODhGNEIwRTE4OTc0NjBFMTI5NzQ1MEUxMDBECi06MTA2QjIwMDAzMENBRkZGRjBBMDAwRTYwMzBBOUZGRkY4Rjg1MDAxQ0VFCi06MTA2QjMwMDAyNDAyMDA4MDkwQTQwMDg1MzA4MzAwQzAxMDYyMDAwNTBDCi06MTA2QjQwMDA4Rjg2MDAyMDhGODgwMDA4OEY4NzAwMENBQ0M4MDBDODkzCi06MTA2QjUwMDBBQ0M3MDBDNDAzRTAwMDA4MDAwMDAwMDAzQzBBMDgwMEM1Ci06MTA2QjYwMDAyNTRBMzg5MDNDMDkwODAwMjUyOTM5NUMzQzA4MDgwMDcyCi06MTA2QjcwMDAyNTA4MkQxMDNDMDcwODAwMjRFNzNBNzAzQzA2MDgwMDYxCi06MTA2QjgwMDAyNEM2MzcwMDNDMDUwODAwMjRBNTM0NzgzQzA0MDgwMERFCi06MTA2QjkwMDAyNDg0MzBBMDNDMDMwODAwMjQ2MzM3OTgzQzAyMDgwMDlBCi06MTA2QkEwMDAyNDQyMzU2QzNDMDEwODAwQUMyQTNDOTAzQzAxMDgwMEIyCi06MTA2QkIwMDBBQzI5M0M4QzNDMDEwODAwQUMyODNDODgzQzAxMDgwMDE2Ci06MTA2QkMwMDBBQzI3M0M5NDNDMDEwODAwQUMyNjNDQTQzQzAxMDgwMEU2Ci06MTA2QkQwMDBBQzI1M0M5QzNDMDEwODAwQUMyNDNDOTgzQzAxMDgwMERFCi06MTA2QkUwMDBBQzIzM0NBODNDMDEwODAwQUMyMjNDQTAwM0UwMDAwODE4Ci06MDQ2QkYwMDAwMDAwMDAwMEExCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzNzliZgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3LmloZXgKQEAgLTAsMCArMSw1OTA4IEBACis6MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDRDQzgwMDAwMDBDOEYzCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNENDOEM0Cis6MTAwMDIwMDAwMDAwMDAxNDAwMDA0RDkwMDgwMDAwODgwODAwMDAwMDQ3Cis6MTAwMDMwMDAwMDAwNThDNDAwMDA0REE0MDgwMDVBNDAwMDAwMDA4NDhECis6MTAwMDQwMDAwMDAwQTY2ODA4MDA1OEM0MDAwMDAxNTQwMDAwQTZFQzk3Cis6MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDc1MzQwMDAwQTg0MEY2Cis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzUzNERGCis6MTAwMDcwMDAwMDAwMDAyNDAwMDExRDc0MDgwMDA0ODgwODAwMDQwMDJBCis6MTAwMDgwMDAwMDAwMTc1QzAwMDExRDk4MDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNCMzgwMDAxMzRGNEZDCis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MDgwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMworOjEwMDBFMDAwNkEzNjAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2NgorOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQworOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgorOjEwMDFGMDAwMjQ0MjREMDAzQzAzMDgwMDI0NjM0REZDQUM0MDAwMDA0OQorOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQorOjEwMDIxMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAyMAorOjEwMDIyMDAwM0MxQzA4MDAyNzlDNEQwMDBFMDAwMjE0MDAwMDAwMDAzQQorOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBGNQorOjEwMDI0MDAwOTc0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEIyNgorOjEwMDI1MDAwMjg2MjIwMDExNDQwMDAyRjAwMDAxMDIxMjQwMjQwMDBEOQorOjEwMDI2MDAwMTA2MjAwMjUwMDAwMDAwMDI0MDI2MDAwMTA2MjAwMjZEOQorOjEwMDI3MDAwMDAwMDEwMjEwQTAwMDA5NDhGQkYwMDE0Mjc1MDAxMDBENQorOjEwMDI4MDAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxM0MwMjA4MDBGOQorOjEwMDI5MDAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxMEUwMDA1MkI5MworOjEwMDJBMDAwMDAwMDAwMDA5NjAzMDAwODNDMDYwODAwOTRDNjREQkVGRQorOjEwMDJCMDAwOEUwNDAwMTg4RjgyMDAyMDk2MDUwMDBDMDAwMzFDMDA5RAorOjEwMDJDMDAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0MjQwNDAwMDE3RAorOjEwMDJEMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQzNgorOjEwMDJFMDAwQUM0MDAwMTgwRTAwMDU1MEFDNDMwMDFDMDAwMDE4MjE2MworOjEwMDJGMDAwMEEwMDAwOTMwMDYwMTAyMTBFMDAwM0JEMDAwMDAwMDAwMgorOjEwMDMwMDAwMEEwMDAwOTMwMDAwMTAyMTBFMDAwRjgxMDAwMDAwMDA4MQorOjEwMDMxMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgxMAorOjEwMDMyMDAwMjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwQUZCRjAwMTgxOQorOjEwMDMzMDAwQUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCMjQwMjAwMUFGMQorOjEwMDM0MDAwOTYxMTAwMDgxNDYyMDA1QjAwMDAyODIxMzIyMjAwMDE4RgorOjEwMDM1MDAwMTA0MDAwMDgwMDAwMDAwMDhFMDIwMDAwOTYwMzAwMTQwOAorOjEwMDM2MDAwMDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMEEwMDAwREJGNgorOjEwMDM3MDAwQTQ0MzAwODAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMjg2QQorOjEwMDM4MDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMDg0RAorOjEwMDM5MDAwOTc0MzAxMEM4Rjg1MDAyMDMwNDIwMDNFMzA2M0ZGRkYwMQorOjEwMDNBMDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEY0MjAxMDA5RgorOjEwMDNCMDAwM0MwNjA4MDA5NEM2NERCRUFDQTIwMDA0OTc0MzAxMTY0QgorOjEwMDNDMDAwOTc0NDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYxNAorOjEwMDNEMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTc0MjAxMTAyNAorOjEwMDNFMDAwOTc0MzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkY1MAorOjEwMDNGMDAwMDA0MzEwMjVBQ0EyMDAwQzk3NDIwMTE0MzA0MkZGRkZDRAorOjEwMDQwMDAwQUNBMjAwMTA4RjQyMDExOEFDQTIwMDE0OTM0MjAxMEI2MQorOjEwMDQxMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwNTUwQUNBNjAwMUMzNAorOjEwMDQyMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBDQworOjEwMDQzMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJERQorOjEwMDQ0MDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ3MgorOjEwMDQ1MDAwMTA4MDAwMTgwMDAyMjgyQjhGNDIwMkI4MDQ0MzAwMDhDNQorOjEwMDQ2MDAwOEUwMjAwMjAzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDEwMQorOjEwMDQ3MDAwM0MwMTA4MDBBQzIyMDA2MDBBMDAwMEZCMjQwNTAwMDFEQQorOjEwMDQ4MDAwOTYwMzAwMTYwMDAwMjgyMUFGNDIwMjgwOEUwMjAwMDQ2RAorOjEwMDQ5MDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjg3OAorOjEwMDRBMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDAzMAorOjEwMDRCMDAwQUMyMjAwNUM4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwOQorOjEwMDRDMDAwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBOQorOjEwMDREMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0Mjc1MDAxMDAzQgorOjEwMDRFMDAwOTIwMzAwMEIyNDAyMDAwMzk2MTEwMDA4MTQ2MjAwNkRCMQorOjEwMDRGMDAwMDAwMDIwMjEzMjIyMDAwMTEwNDAwMDA4MDAwMDAwMDAwRQorOjEwMDUwMDAwOEUwMjAwMDA5NjAzMDAxNDAwMDIxMUMyMDAwMjEwNDA4NworOjEwMDUxMDAwMDA1QTEwMjEwQTAwMDE0MkE0NDMwMDgwM0MwMjA4MDA1NgorOjEwMDUyMDAwOEM0MjAwMjAxMDQwMDAyNTAwMDAwMDAwMEUwMDA1MkIyQQorOjEwMDUzMDAwMDAwMDAwMDA5NzQyMDEwODk3NDMwMTBDOEY4NTAwMjBCRQorOjEwMDU0MDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVEQworOjEwMDU1MDAwQUNBMjAwMDA4RjQyMDEwMDNDMDYwODAwOTRDNjREQkVDQworOjEwMDU2MDAwQUNBMjAwMDQ5NzQzMDExNjk3NDQwMTBFM0MwMjIwMDAwMAorOjEwMDU3MDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDhCMgorOjEwMDU4MDAwMDBDMjMwMjU5NzQyMDExMDk3NDMwMTEyMjQwNDAwMDE1NAorOjEwMDU5MDAwMDAwMjE0MDAzMDYzRkZGRjAwNDMxMDI1QUNBMjAwMENFMgorOjEwMDVBMDAwOTc0MjAxMTQzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQyRgorOjEwMDVCMDAwQUNBMDAwMTgwRTAwMDU1MEFDQTYwMDFDM0MwMjA4MDBDMAorOjEwMDVDMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA2MworOjEwMDVEMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDEwMworOjEwMDVFMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBMzIyMjAwMDJENAorOjEwMDVGMDAwOEY0MjAyQjgwNDQzMDAwODhFMDIwMDIwM0MwMjA4MDAyQgorOjEwMDYwMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBFMgorOjEwMDYxMDAwMEEwMDAxNzcyNDA0MDAwMTk2MDMwMDE2MDAwMDIwMjEzRgorOjEwMDYyMDAwQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0QUY0MjAyODhEOAorOjEwMDYzMDAwM0MwMjEwMDBBRjQyMDJCODNDMDIwODAwOEM0MjAwNUM1MQorOjEwMDY0MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDMEEwMDAxNzg1MQorOjEwMDY1MDAwOEZCRjAwMTgxMDQwMDAxMzAwMDAyMDIxOEY0MzAxMDRCOQorOjEwMDY2MDAwM0MwMjYwMjBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkVEMQorOjEwMDY3MDAwMzA0MjAzRkYxNDQzMDAwQjAwMDAyMDIxOEY0MjAxMDA5MQorOjEwMDY4MDAwMDAwMjExQzAyNDQyRkZGQzJDNDIwMDA4MTA0MDAwMDI2RQorOjEwMDY5MDAwMjQwMzAwMDIwMDAzMUY0MDNDMDI2MDAwQUM0MzY5MTRDNQorOjEwMDZBMDAwMDAwMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMAorOjEwMDZCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY0MzAxMDBDNworOjEwMDZDMDAwMjQwMjAxMDA1MDYyMDAwMzAwMDMxMUMyMDAwMDAwMEQ2QgorOjEwMDZEMDAwMDAwMzExQzIwMDAyMTA0MDAwNUExMDIxQTQ0MDAwODAwMworOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTkzNjIwMDAwMDNFMDAwMDgwRQorOjEwMDZGMDAwQUY4MDAwMDAwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhDNAorOjEwMDcwMDAwMDAwMDEwMjEyNDAyMDEwMDE0ODIwMDA4MDAwMDAwMDBGMworOjEwMDcxMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAxRAorOjEwMDcyMDAwQUMyMjAwRkMwQTAwMDE5RjMwQTIwMDIwM0MwMjA4MDAxRAorOjEwMDczMDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ2OQorOjEwMDc0MDAwMzBBMjAwMjAxMDQwMDAwODMwQTMwMDEwM0MwMjA4MDAzNgorOjEwMDc1MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgzRgorOjEwMDc2MDAwMDNFMDAwMDgwMDAwMDAwMDEwNjAwMDA4MDAwMDAwMDAyNgorOjEwMDc3MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBCNAorOjEwMDc4MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA2NQorOjEwMDc5MDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDAwRgorOjEwMDdBMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAxNQorOjEwMDdCMDAwMjc0NDAxMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMUJBRAorOjEwMDdDMDAwMzA2NjAwMDI4RjQyMDJCODA0NDEwMDA4MjQwNTAwMDE4RgorOjEwMDdEMDAwM0MwMjA4MDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBGOQorOjEwMDdFMDAwQUMyMjAwNjAwQTAwMDFFQjhGQkYwMDEwOEM4MjAwMjA1OQorOjEwMDdGMDAwOTQ4MzAwMTYwMDAwMjgyMUFGNDIwMjgwOEM4MjAwMDRGRQorOjEwMDgwMDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgwNAorOjEwMDgxMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBCQworOjEwMDgyMDAwQUMyMjAwNUMwQTAwMDFFQjhGQkYwMDEwMTBDMDAwMDY3NAorOjEwMDgzMDAwMDA2MDI4MjE4RjQ0MDEwMDBFMDAwMThGMDAwMDAwMDA5RAorOjEwMDg0MDAwMEEwMDAxRUEyNDA1MDAwMThGODIwMDA4OEY0MzAxMDQ5OQorOjEwMDg1MDAwNTA0MzAwMDcwMDAwMjgyMThGNDQwMTAwMEUwMDAxOEY0MworOjEwMDg2MDAwMDAwMDAwMDA4RjQyMDEwNEFGODIwMDA4MDAwMDI4MjEzMAorOjEwMDg3MDAwOEZCRjAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMTg2MgorOjEwMDg4MDAwM0MwMjA4MDA4QzQyMDA4ODI3NDMwMTAwOTQ2NTAwMEM1QworOjEwMDg5MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg4OEM2NDAwMTg0RQorOjEwMDhBMDAwMDM0NTEwMjE5MDQ1NDAwMEFGNDQwMDM4OEM2MjAwMUM4NQorOjEwMDhCMDAwMjQwM0ZGRjgwMDA1MkUwMDAwNDMxMDI0MzQ0MjAwMDRGNgorOjEwMDhDMDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDA5NworOjEwMDhEMDAwMDAwMDAwMDAwMDAwMDAwMEFGNDUwNDA0MDAwMDAwMDAxQworOjEwMDhFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwMDE0RAorOjEwMDhGMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwMDkwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEMDAwMDEwMjExNworOjEwMDkxMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMjAwMThCMAorOjEwMDkyMDAwM0MwMzYwMTBBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTBBQgorOjEwMDkzMDAwOEM2NDUwMDAyNDAyRkY3RjNDMUE4MDAwMDA4MjIwMjQzNworOjEwMDk0MDAwMzQ4NDM4MEMyNDAyMDAzN0FDNjQ1MDAwM0MxMjA4MDA5OAorOjEwMDk1MDAwMjY1MjREMzhBRjQyMDAwODI0MDIwQzgwQUY0MjAwMjREQQorOjEwMDk2MDAwM0MxQjgwMDgzQzA2MDgwMDI0QzYwNjJDMDI0MDEwMjFDRgorOjEwMDk3MDAwMjQwNDAwMUMyNDg0RkZGRkFDNDYwMDAwMDQ4MUZGRkQxQQorOjEwMDk4MDAwMjQ0MjAwMDQzQzAyMDgwMDI0NDIwMTZDM0MwMTA4MDA5RgorOjEwMDk5MDAwQUMyMjRENDAzQzAyMDgwMDI0NDIwNDA0M0MwMTA4MDAwMworOjEwMDlBMDAwQUMyMjRENDQzQzAyMDgwMDI0NDIwN0I4M0MwMTA4MDAzOAorOjEwMDlCMDAwQUMyMjREODgzQzAyMDgwMDI0NDIwMjVDM0MwMzA4MDA0MworOjEwMDlDMDAwMjQ2MzA2MzQzQzA0MDgwMDI0ODQwNkUwM0MwNTA4MDA0NworOjEwMDlEMDAwMjRBNTNCNTAzQzAxMDgwMEFDMjI0REEwM0MwMjA4MDA3RAorOjEwMDlFMDAwMjQ0MjA1RjQzQzAxMDgwMEFDMjY0RDg0M0MwMTA4MDA3QgorOjEwMDlGMDAwQUMyNTREOTQzQzAxMDgwMEFDMjM0RDlDM0MwMTA4MDAwMworOjEwMEEwMDAwQUMyNDREQTQzQzAxMDgwMEFDMjI0REE4M0MwMTA4MDBEOAorOjEwMEExMDAwQUMyMzREM0MzQzAxMDgwMEFDMjA0RDQ4M0MwMTA4MDA5MworOjEwMEEyMDAwQUMyMDRENEMzQzAxMDgwMEFDMjA0RDUwM0MwMTA4MDA2RQorOjEwMEEzMDAwQUMyMDRENTQzQzAxMDgwMEFDMjA0RDU4M0MwMTA4MDA0RQorOjEwMEE0MDAwQUMyMDRENUMzQzAxMDgwMEFDMjA0RDYwM0MwMTA4MDAyRQorOjEwMEE1MDAwQUMyNDRENjQzQzAxMDgwMEFDMjA0RDY4M0MwMTA4MDAwQQorOjEwMEE2MDAwQUMyMDRENkMzQzAxMDgwMEFDMjA0RDcwM0MwMTA4MDBFRQorOjEwMEE3MDAwQUMyMDRENzQzQzAxMDgwMEFDMjA0RDc4M0MwMTA4MDBDRQorOjEwMEE4MDAwQUMyNjREN0MzQzAxMDgwMEFDMjY0RDgwM0MwMTA4MDBBMgorOjEwMEE5MDAwQUMyMDREOEMzQzAxMDgwMEFDMjU0RDkwM0MwMTA4MDA3OQorOjEwMEFBMDAwQUMyMzREOTgwRTAwMDZCQjAwMDAwMDAwM0MwMjgwMDAwNQorOjEwMEFCMDAwMzQ0MjAwNzA4QzQyMDAwMEFGODIwMDE0M0MwMzA4MDBGNgorOjEwMEFDMDAwOEM2MzAwMjA4RjgyMDAwNDEwNDMwMDA0M0MwMjgwMDBFRAorOjEwMEFEMDAwMEUwMDA0RjNBRjgzMDAwNDNDMDI4MDAwMzQ0NjAwNzAzMworOjEwMEFFMDAwM0MwMzA4MDA4QzYzMDBBMDNDMDIwODAwOEM0MjAwQTQ3OAorOjEwMEFGMDAwMTA0MzAwMDQ4Rjg0MDAxNDNDMDEwODAwQUMyMzAwQTRDMAorOjEwMEIwMDAwQTc0MzAwOUU4Q0NBMDAwMDNDMDMwODAwOEM2MzAwQkMxNQorOjEwMEIxMDAwM0MwMjA4MDA4QzQyMDBCODAxNDQyMDIzMDA2NDE4MjFFNAorOjEwMEIyMDAwMDAwMDQwMjEwMDY0MjAyQjAwNDgxMDIxMDA0NDEwMjFDNworOjEwMEIzMDAwM0MwMTA4MDBBQzIzMDBCQzNDMDEwODAwQUMyMjAwQjgxQQorOjEwMEI0MDAwOEY1MTAwMDAzMjIyMDAwNzEwNDBGRkRDQUY4QTAwMTRGMgorOjEwMEI1MDAwOENDNjAwMDAzQzA1MDgwMDhDQTUwMEJDM0MwNDA4MDBDNQorOjEwMEI2MDAwOEM4NDAwQjgwMENBMzAyMzAwQTYyODIxMDAwMDEwMjE4MAorOjEwMEI3MDAwMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxMzIyNzAwMDE5MAorOjEwMEI4MDAwM0MwMTA4MDBBQzI1MDBCQzNDMDEwODAwQUMyNDAwQjhDNgorOjEwMEI5MDAwMTBFMDAwMUYzMjIyMDAwMjhGNDIwMTAwQUY0MjAwMjAwRAorOjEwMEJBMDAwOEY0MjAxMDRBRjQyMDBBODkzNDIwMTBCMEUwMDAxODg1RQorOjEwMEJCMDAwMzA1MDAwRkYyRTAyMDAxRDU0NDAwMDA0MDAxMDEwODAzMQorOjEwMEJDMDAwMEUwMDAxOEIwQTAwMDJDNTAwMDAwMDAwMDA1MjEwMjEzNworOjEwMEJEMDAwOEM0MjAwMDAwMDQwRjgwOTAwMDAwMDAwMTA0MDAwMDVCMQorOjEwMEJFMDAwM0MwMjQwMDA4RjQzMDEwNDNDMDI2MDIwQUM0MzAwMTRFRgorOjEwMEJGMDAwM0MwMjQwMDBBRjQyMDEzODNDMDIwODAwOEM0MjAwMzQwNQorOjEwMEMwMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDJFMAorOjEwMEMxMDAwMTA0MDAwMEUzMjIyMDAwNDhGNDIwMTQwMEUwMDAxODg3NQorOjEwMEMyMDAwQUY0MjAwMjAwRTAwMDM0QjAwMDAwMDAwM0MwMjQwMDBEOQorOjEwMEMzMDAwQUY0MjAxNzgzQzAyMDgwMDhDNDIwMDM4MjQ0MjAwMDE5NworOjEwMEM0MDAwM0MwMTA4MDBBQzIyMDAzODMyMjIwMDA0MTA0MEZGOTgxQQorOjEwMEM1MDAwM0MwMjgwMDA4RjQyMDE4MDBFMDAwMTg4QUY0MjAwMjBEQworOjEwMEM2MDAwOEY0MzAxODAyNDAyMEYwMDE0NjIwMDA1MDAwMDAwMDA4MQorOjEwMEM3MDAwOEY0MjAxODhBNzQyMDA5QzBBMDAwMkZBM0MwMjQwMDAxMQorOjEwMEM4MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDgyOAorOjEwMEM5MDAwM0MwMjQwMDAwRTAwMDMyRDAwMDAwMDAwNTQ0MDAwMDQwMAorOjEwMENBMDAwM0MwMjQwMDAwRTAwMEUwRDAwMDAwMDAwM0MwMjQwMDAxRgorOjEwMENCMDAwQUY0MjAxQjgzQzAyMDgwMDhDNDIwMDNDMjQ0MjAwMDFEMworOjEwMENDMDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMjdBM0MwMjgwMDA5MQorOjEwMENEMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QUY0NDAwMjBGNQorOjEwMENFMDAwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDhFNworOjEwMENGMDAwMDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxMDA4MjIwMjVGOAorOjEwMEQwMDAwMDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwQUZCMTAwMTRBRQorOjEwMEQxMDAwQUZCMDAwMTAwMDgwODgyMUFGQkYwMDE4MEUwMDAzMDJBMgorOjEwMEQyMDAwMzBCMDAwRkY5MzYyMDA3RDAyMjAyMDIxMDIwMjgwMjU2NgorOjEwMEQzMDAwQTM3MDAwN0Q4RjcwMDA3NDNDMDI4MDAwMEUwMDAzMEJENgorOjEwMEQ0MDAwMDIwMjgwMjQxNjAwMDAwOThGQkYwMDE4OEY0MjAxRjhBQworOjEwMEQ1MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwQTM0MjAxQzRCRgorOjEwMEQ2MDAwM0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4OEZCMTAwMTQ5MQorOjEwMEQ3MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTg2QQorOjEwMEQ4MDAwQUZCRjAwMTA5NzQyMDE4NDMwNDIwMjAwMTA0MDAwMDVCRQorOjEwMEQ5MDAwMDAwMDIwMjEwRTAwMTA0MjAwMDAwMDAwMEEwMDAzNDE2NAorOjEwMERBMDAwMjQwNDAwMDE4RjQyMDE4ODA0NDAwMDA5OEZCRjAwMTAxNQorOjEwMERCMDAwOEY0MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBFMQorOjEwMERDMDAwMTQ0MzAwMDMyNDA0MDAwMTkzNjIwMDNFOEZCRjAwMTAwRgorOjEwMEREMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4MjQwMjAwMDE1NAorOjEwMERFMDAwQTM2MDAwMjJBNzYyMDAxNjhGNDQwMTQwMEEwMDAzMTA4RQorOjEwMERGMDAwMjQwNTAwMDEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRAorOjEwMEUwMDAwOTM2MjAwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzBCNQorOjEwMEUxMDAwMDAwMzE4MkIwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDMzRQorOjEwMEUyMDAwMjQwMjAwNTAxNDgyMDA2MjhGQkYwMDE0OTM0MjAxNDhENAorOjEwMEUzMDAwMzA0MjAwRkYyNDQzRkZGRjJDNjIwMDA1MTA0MDAwNUM5RAorOjEwMEU0MDAwOEZCRjAwMTQwMDAzMTA4MDNDMDMwODAwMjQ2MzRDQzhDQgorOjEwMEU1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwOAorOjEwMEU2MDAwMEUwMDAzMDI4RjQ0MDE0MDhGNzAwMDBDOEY0MjAxNDQzQQorOjEwMEU3MDAwMTYwMjAwMDIyNDAyMDAwMUFGNjIwMDBDMEUwMDAzMEJGOAorOjEwMEU4MDAwOEY0NDAxNDA4RjQyMDE0NDE0NTAwMDA0OEZCRjAwMTQ2RQorOjEwMEU5MDAwOEZCMDAwMTAwQTAwMEZCODI3QkQwMDE4OEY2MjAwMEMzOQorOjEwMEVBMDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDEwOEY0MzAxNDQ2MgorOjEwMEVCMDAwMzA0MkZGRkYxNDYyMDAwOTAwMDAwMDAwMjQwMjAwMDExQworOjEwMEVDMDAwQTc2MjAwMTA4RjQyMDE0MEFGNDIwMjAwM0MwMjEwMDBCNgorOjEwMEVEMDAwQUY0MjAyMzgwQTAwMDNCQThGQkYwMDE0OTc2MjAwMTBCNQorOjEwMEVFMDAwMEEwMDAzQjMwMDAwMDAwMDBFMDAwMzAyOEY0NDAxNDAxQgorOjEwMEVGMDAwOTc2MjAwMTI4RjQzMDE0NDMwNTBGRkZGMTYwMzAwMDIzNworOjEwMEYwMDAwMjQwMjAwMDFBNzYyMDAxMjBFMDAwMzBCOEY0NDAxNDA2RgorOjEwMEYxMDAwOEY0MjAxNDQxNjAyMDAwNDhGQkYwMDE0OEZCMDAwMTBFRQorOjEwMEYyMDAwMEEwMDAzNDUyN0JEMDAxODk3NjIwMDEyMEEwMDAzQjNBOAorOjEwMEYzMDAwMDAwMDAwMDA5NzYyMDAxNDhGNDMwMTQ0MzA0MkZGRkYxRAorOjEwMEY0MDAwMTQ2MjAwMDY4RkJGMDAxNDI0MDIwMDAxOEZCMDAwMTA0RAorOjEwMEY1MDAwQTc2MjAwMTQwQTAwMTJFMjI3QkQwMDE4OTc2MjAwMTQ2RAorOjEwMEY2MDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDE2OEY0MzAxNDQ5QgorOjEwMEY3MDAwMzA0MkZGRkYxNDYyMDAwNjI0MDIwMDAxOEZCRjAwMTRGQworOjEwMEY4MDAwOEZCMDAwMTBBNzYyMDAxNjBBMDAwQkFBMjdCRDAwMTgzOAorOjEwMEY5MDAwOTc2MjAwMTYxNDQwMDAwNjhGQkYwMDE0M0MwMjA4MDA0MAorOjEwMEZBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxOQorOjEwMEZCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMAorOjEwMEZDMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMTAwOTM2MjAwMDA1QgorOjEwMEZEMDAwOTM0MzAxMDkzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQTU2MgorOjEwMEZFMDAwMjg2MjAwMjAxMDQwMDAxODI0MDIwMDM4Mjg2MjAwMEFGRAorOjEwMEZGMDAwMTA0MDAwMEMyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkM1NgorOjEwMTAwMDAwMDAwMDAwMDAwNDYwMDBFNTI4NjIwMDAyMTQ0MDAwMjg4RgorOjEwMTAxMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDE0MEEwMDA0QjdFNQorOjEwMTAyMDAwOEZCMDAwMTAxMDYyMDA1RTI4NjIwMDBCMTQ0MDAwRENEQworOjEwMTAzMDAwOEZCRjAwMTQyNDAyMDAwRTEwNjIwMDczOEZCMDAwMTBFNgorOjEwMTA0MDAwMEEwMDA0QjcwMDAwMDAwMDEwNjIwMEMwMjg2MjAwMzlFNgorOjEwMTA1MDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwQ0FGOAorOjEwMTA2MDAwMjg2MjAwMzcxMDQwMDBCNDI0MDIwMDM1MTA2MjAwQzEyRAorOjEwMTA3MDAwOEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwMTA2MjAwMkI1RAorOjEwMTA4MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlCMgorOjEwMTA5MDAwMTA2MjAwQjQ4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCNAorOjEwMTBBMDAwMTA2MjAwOTk4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCRgorOjEwMTBCMDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMEI5OEZCRjAwMTQ5MQorOjEwMTBDMDAwMEUwMDA1MkIwMDAwMDAwMDhGNDIwMTAwOEY4MzAwMjBERQorOjEwMTBEMDAwOTc0NTAxMEM5NzQ2MDEwOEFDNjIwMDAwOEY0MjAxMDQ1RAorOjEwMTBFMDAwM0MwNDA4MDA5NDg0NERCRTAwMDUyQzAwQUM2MjAwMDQ1MgorOjEwMTBGMDAwOEY0MjAxMTgwMDA2MzQwMDAwQzQzMDI1QUM2MjAwMDg5RAorOjEwMTEwMDAwOEY0MjAxMUMyNDA0MDAwMUFDNjIwMDBDOTM0MjAxMEFDRQorOjEwMTExMDAwMDBBMjI4MjVBQzY1MDAxMEFDNjAwMDE0QUM2MDAwMTg3QgorOjEwMTEyMDAwQUM2NjAwMUMwQTAwMDQ4RDhGQkYwMDE0M0MwMjA4MDA0RQorOjEwMTEzMDAwOEM0MjAwMjAxMDQwMDA5QThGQkYwMDE0MEUwMDA1MkIzNworOjEwMTE0MDAwMDAwMDAwMDA5NzQ0MDEwODNDMDMwODAwOTQ2MzREQkU3MgorOjEwMTE1MDAwOTc0NTAxMEMwMDA0MjIwMjk3NDYwMTBFOEY4MjAwMjA2MQorOjEwMTE2MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA5RAorOjEwMTE3MDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDREOAorOjEwMTE4MDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ3MgorOjEwMTE5MDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNDhDMjQwNDAwMDE3QworOjEwMTFBMDAwOTc0MjAxMEMxNDQwMDAxNTAwMDAwMDAwOTM2MjAwMDVGNgorOjEwMTFCMDAwMzA0MjAwMTAxNDQwMDAxMTAwMDAwMDAwMEUwMDAzMDIzNQorOjEwMTFDMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMTAxOQorOjEwMTFEMDAwMEUwMDAzMEJBMzYyMDAwNTkzNjIwMDAwMjQwMzAwMjBBRAorOjEwMTFFMDAwMzA0MjAwRkYxMDQzMDA2RDAyMDAyMDIxOEZCRjAwMTQyOQorOjEwMTFGMDAwOEZCMDAwMTAwQTAwMTA1ODI3QkQwMDE4MDAwMDAwMEQyNQorOjEwMTIwMDAwMEEwMDA0QjY4RkJGMDAxNDNDMDIwODAwOEM0MjAwMjA4NAorOjEwMTIxMDAwMTA0MDAwNjM4RkJGMDAxNDBFMDAwNTJCMDAwMDAwMDA3QgorOjEwMTIyMDAwOEY0MjAxMDQ4RjgzMDAyMDk3NDQwMTBDM0MwNTA4MDA4NQorOjEwMTIzMDAwOTRBNTREQkVBQzYyMDAwMDk3NjIwMDJDMDAwNDI0MDAwRgorOjEwMTI0MDAwMzA0MkZGRkYwMDgyMjAyNTNDMDI0MDBFMDBBMjI4MjVFQworOjEwMTI1MDAwQUM2NDAwMDRBQzYwMDAwOEFDNjAwMDBDQUM2MDAwMTAzMgorOjEwMTI2MDAwQUM2MDAwMTRBQzYwMDAxOEFDNjUwMDFDMEEwMDA0OEM3MworOjEwMTI3MDAwMjQwNDAwMDEwRTAwMDMwMjAyMDAyMDIxQTc2MDAwMDhFMAorOjEwMTI4MDAwMEUwMDAzMEIwMjAwMjAyMTAyMDAyMDIxMEUwMDAzMTA5QgorOjEwMTI5MDAwMjQwNTAwMDEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwNDA2MAorOjEwMTJBMDAwOEZCRjAwMTQwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMENCOAorOjEwMTJCMDAwOEY4MzAwMjAzQzA1MDgwMDk0QTU0REJFMDAwMjE0MDA1OQorOjEwMTJDMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEY2NDAwNEM5RAorOjEwMTJEMDAwM0MwMjQwMUYwMEEyMjgyNUFDNjQwMDBDOEY2MjAwNTAyNQorOjEwMTJFMDAwMjQwNDAwMDFBQzYyMDAxMDhGNjIwMDU0QUM2MjAwMTQ1MAorOjEwMTJGMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDE0OEZCMDAwMTBFQworOjEwMTMwMDAwMEEwMDA1NTAyN0JEMDAxODI0MDIwMDIwNTA4MjAwMjU0NQorOjEwMTMxMDAwOEZCMDAwMTAwRTAwMEZBMjAyMDAyMDIxMTA0MDAwMjAwQworOjEwMTMyMDAwOEZCRjAwMTQwMjAwMjAyMThGQjAwMDEwMDAwMDI4MjE4MAorOjEwMTMzMDAwMEEwMDAzMTAyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTRFRgorOjEwMTM0MDAwOEZCMDAwMTAwQTAwMDYxODI3QkQwMDE4OTc0NTAxMEM0MQorOjEwMTM1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDA2Mzg1MQorOjEwMTM2MDAwMjdCRDAwMTgwMjAwMjAyMThGQjAwMDEwMEEwMDA2NUQ4MgorOjEwMTM3MDAwMjdCRDAwMTg5MzQ1MDEwRDAyMDAyMDIxOEZCMDAwMTBGOQorOjEwMTM4MDAwMEEwMDA2QTcyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTQwNQorOjEwMTM5MDAwOEZCMDAwMTAwQTAwMDY4MzI3QkQwMDE4OEZCRjAwMTQwRAorOjEwMTNBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4OEY0MjAyNzhCQworOjEwMTNCMDAwMDQ0MEZGRkUyNDAyMDAwMjM0ODQwMDgwQUY0NDAyNDA1NworOjEwMTNDMDAwQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUY0MjAyNzg0RQorOjEwMTNEMDAwM0MwNDA4MDA5NDg0NERDQTNDMDIwODAwOEM0MjRERDQ2MQorOjEwMTNFMDAwMzA4M0ZGRkYwMDAzMThDMDAwNDMxMDIxQUY0MjAwM0NEMAorOjEwMTNGMDAwM0MwMjA4MDA4QzQyNEREMEFGNDIwMDM4M0MwMjAwNTAwNQorOjEwMTQwMDAwMzQ0MjAwMDhBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTQxMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQxRAorOjEwMTQyMDAwMDAwMDAwMDA4RjQyMDQwMDNDMDEwODAwQUMyMjREQzBDNworOjEwMTQzMDAwOEY0MjA0MDQzQzAxMDgwMEFDMjI0REM0M0MwMjAwMjA1MQorOjEwMTQ0MDAwQUY0MjAwMzAwMDAwMDAwMDNDMDIwODAwOTQ0MjREQzg0QQorOjEwMTQ1MDAwM0MwMzA4MDA5NDYzNERDQzNDMDUwODAwOTRBNTREQ0U5OAorOjEwMTQ2MDAwMjQ4NDAwMDEwMDQzMTAyMTMwODNGRkZGM0MwMTA4MDA2OQorOjEwMTQ3MDAwQTQyMjREQzgzQzAxMDgwMEE0MjQ0RENBMTQ2NTAwMDNGMQorOjEwMTQ4MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0RENBMDNFMDAwMDg1MQorOjEwMTQ5MDAwMDAwMDAwMDAzQzA1MDAwQTI3QkRGRkU4MDM0NTI4MjFBNQorOjEwMTRBMDAwM0MwNDA4MDAyNDg0NERCMEFGQkYwMDEwMEUwMDA1QjUwOQorOjEwMTRCMDAwMjQwNjAwMEEzQzAyMDgwMDk0NDI0REIyM0MwMzA4MDA5NgorOjEwMTRDMDAwOTQ2MzREQ0UzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDRDMQorOjEwMTREMDAwMjQwMjdGRkYwMDQzMTAyQjEwNDAwMDAyQUY4MzAwMUM0QQorOjEwMTRFMDAwMDAwMDAwMEQwRTAwMDRDMjAwMDAwMDAwM0MwMjA4MDBENQorOjEwMTRGMDAwOTQ0MjREQkE4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDhDQQorOjEwMTUwMDAwQTc0MjAwQTIzQzAyMDAwQTAzNDIxMDIxOTQ0MzAwMDZCNQorOjEwMTUxMDAwM0MwMjA4MDA5NDQyNERCQTNDMDEwODAwQTQyMzREQjY5OQorOjEwMTUyMDAwMDA0MzEwMjM4RjgzMDAxQzAwMDIxNDAwMDAwMjE0MDNFOAorOjEwMTUzMDAwMDA0MzEwMkIwM0UwMDAwODM4NDIwMDAxMjdCREZGRThGQworOjEwMTU0MDAwQUZCRjAwMTAzQzAyMDAwQTAzNDIxMDIxOTQ0MjAwMDY4MworOjEwMTU1MDAwM0MwMTA4MDBBNDIyNERCNjBFMDAwNTBGMDAwMDAwMDA1QgorOjEwMTU2MDAwNTQ0MEZGRjkzQzAyMDAwQThGQkYwMDEwMDNFMDAwMDg1RQorOjEwMTU3MDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwMEUwMDA1MEYwNAorOjEwMTU4MDAwMDAwMDAwMDAxMDQwMDAwMzAwMDAwMDAwMEUwMDA1MUREOAorOjEwMTU5MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDI0REMwOEZCRjAwMTBDQworOjEwMTVBMDAwMjc0MzA0MDBBRjQyMDAzODNDMDIwODAwOEM0MjREQzQ3RgorOjEwMTVCMDAwMjdCRDAwMThBRjgzMDAyMEFGNDIwMDNDM0MwMjAwMDU2RAorOjEwMTVDMDAwQUY0MjAwMzAwM0UwMDAwOEFGODAwMDE4OEY4MjAwMTg5RgorOjEwMTVEMDAwM0MwMzAwMDYwMDAyMTE0MDAwNDMxMDI1QUY0MjAwMzBEQQorOjEwMTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDAyQQorOjEwMTVGMDAwMzA0MjAwMTAxMDQwRkZGRDI3NDIwNDAwQUY4MjAwMjA1RgorOjEwMTYwMDAwMDNFMDAwMDhBRjgwMDAxODNDMDYwODAwOENDNjREQzRGQgorOjEwMTYxMDAwOEY4NTAwMTg4RjgzMDAyMDNDMDIwODAwOTQ0MjREQkE0OQorOjEwMTYyMDAwMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwMjQ0MjAwMDExRgorOjEwMTYzMDAwMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzNgorOjEwMTY0MDAwQUY4NTAwMThBRjgzMDAyMDNDMDEwODAwQTQyMjREQkFFQQorOjEwMTY1MDAwMzA5MDAwRkYzQzAxMDgwMEFDMjc0REM0MDRDMTAwMDhENQorOjEwMTY2MDAwMDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwM0MwMjA4MDBBMQorOjEwMTY3MDAwOEM0MjREQzAyNDQyMDAwMTNDMDEwODAwQUMyMjREQzAwOAorOjEwMTY4MDAwM0MwMjA4MDA5NDQyNERCQTNDMDMwODAwOTQ2MzREQzhFNAorOjEwMTY5MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjU4RQorOjEwMTZBMDAwMTQ0MDAwMDQ4RjgzMDAxODI0MDIwMDEwMTQ2MjAwMEZGRAorOjEwMTZCMDAwMDAwMDAwMDAwRTAwMDU0MTI0MTEwMDAxM0MwMzA4MDA1OQorOjEwMTZDMDAwOTQ2MzREQkEzQzAyMDgwMDk0NDI0REM4MTQ2MjAwMDM3MgorOjEwMTZEMDAwMDAwMDAwMDAwRTAwMDRDMjAwMDAwMDAwMTYwMDAwMDMxRAorOjEwMTZFMDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwM0MwMzA4MDA3NQorOjEwMTZGMDAwOTQ2MzREQkUzQzAyMDgwMDk0NDI0REJDMjQ2MzAwMDEzQgorOjEwMTcwMDAwMzA2NEZGRkYzQzAxMDgwMEE0MjM0REJFMTQ4MjAwMDM5NworOjEwMTcxMDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0REJFMTIwMDAwMDY5RAorOjEwMTcyMDAwMDAwMDAwMDAzQzAyMDgwMDk0NDI0REJBQTc0MjAwQTIwQgorOjEwMTczMDAwMEEwMDA1QTMwMjIwMTAyMTBFMDAwNTBGMDAwMDAwMDA4MgorOjEwMTc0MDAwMTA0MDAwMDQwMjIwMTAyMTBFMDAwNTFEMDAwMDAwMDBDMgorOjEwMTc1MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyRAorOjEwMTc2MDAwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGMzBBNUZGRkYwNQorOjEwMTc3MDAwMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDFFNgorOjEwMTc4MDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMEEwMDA1QUI0OQorOjEwMTc5MDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDY4QQorOjEwMTdBMDAwMjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAyOAorOjEwMTdCMDAwMEEwMDA1QjUyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBDRQorOjEwMTdDMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDA2QQorOjEwMTdEMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkFGMQorOjEwMTdFMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjQwMjAwMDEzQgorOjEwMTdGMDAwQUY2MjAwMENBNzYyMDAxMEE3NjIwMDEyQTc2MjAwMTQ3QgorOjEwMTgwMDAwMDNFMDAwMDhBNzYyMDAxNjMwODIwMDdGMDM0MjEwMjEyNworOjEwMTgxMDAwM0MwODAwMEUwMDQ4MTgyMTNDMDIwODAwOEM0MjAwMjBDMQorOjEwMTgyMDAwMjdCREZGRDgyNDA3RkY4MEFGQjMwMDFDQUZCMjAwMTg1QworOjEwMTgzMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMDA4MDgwMjExNgorOjEwMTg0MDAwMzBCMTAwRkYwMDg3MjAyNDMwRDIwMEZGMTA0MDAwMkY2RAorOjEwMTg1MDAwMDAwMDk4MjFBRjQ0MDAyQzkwNjIwMDAwMjQwMzAwNTA0NworOjEwMTg2MDAwMzA0MjAwRkYxNDQzMDAwRTAwMDAwMDAwM0MwMjA4MDA1QworOjEwMTg3MDAwOEM0MjAwRTAwMjAyMTAyMTAwNDcxMDI0QUY0MjAwMkNFRAorOjEwMTg4MDAwM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMzA0MjAwN0YzRQorOjEwMTg5MDAwMDM0MjEwMjEwMDQ4MTAyMTk0NDIwMEQ0MzA1M0ZGRkYyRQorOjEwMThBMDAwMEUwMDA1MkIwMDAwMDAwMDNDMDIwODAwOTQ0MjREQkVEMworOjEwMThCMDAwOEY4MzAwMjAwMDExMzQwMDAwQzIzMDI1MDAxMjJDMDA1QworOjEwMThDMDAwM0MwMjQwMDAwMEMyMzAyNTM0QTUwMDAxQUM3MDAwMDA4RAorOjEwMThEMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDgwQQorOjEwMThFMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NTAwMTAwRAorOjEwMThGMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMTgyQworOjEwMTkwMDAwMjdCRDAwMjgwQTAwMDU1MEFDNjYwMDFDOEZCRjAwMjBEMAorOjEwMTkxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2RAorOjEwMTkyMDAwMDNFMDAwMDgyN0JEMDAyODkzNDMwMTBGMjQwMjAwMTBBNAorOjEwMTkzMDAwMTA2MjAwMEUyODY1MDAxMTEwQTAwMDA3MjQwMjAwMTI5QQorOjEwMTk0MDAwMjQwMjAwMDgyNDA1MDAzQTEwNjIwMDA2MDAwMDMwMjEzRAorOjEwMTk1MDAwMDNFMDAwMDgwMDAwMDAwMDI0MDUwMDM1MTQ2MkZGRkNDRAorOjEwMTk2MDAwMDAwMDMwMjEwQTAwMDVEMDAwMDAwMDAwOEY0MjAwNzQwMgorOjEwMTk3MDAwMjQ0MjBGQTAwM0UwMDAwOEFGNjIwMDBDMjdCREZGRTg3RgorOjEwMTk4MDAwQUZCRjAwMTAwRTAwMDMxMDI0MDUwMDAxOEZCRjAwMTAzMAorOjEwMTk5MDAwMjQwMjAwMDFBNzYyMDAxMjI3QkQwMDE4MjQwMjAwMDFFMgorOjEwMTlBMDAwMDNFMDAwMDhBMzYwMDAyMjI3QkRGRkUwQUZCMTAwMTRGMAorOjEwMTlCMDAwQUZCMDAwMTBBRkJGMDAxODMwQjFGRkZGMEUwMDAzMDI0MAorOjEwMTlDMDAwMDA4MDgwMjE5MzYyMDAzRjI0MDMwMDA0MzA0MjAwRkYyNgorOjEwMTlEMDAwMTQ0MzAwMEMwMjAwMjAyMTEyMjAwMDA4MjQwMjAwMEFGNworOjEwMTlFMDAwMEUwMDA1QzkwMDAwMDAwMDkzNjIwMDA1MjQwM0ZGRkVGRAorOjEwMTlGMDAwMDA0MzEwMjRBMzYyMDAwNTI0MDIwMDEyQTM2MjAwM0ZFQQorOjEwMUEwMDAwMDIwMDIwMjEwRTAwMDMwQkEzNjAwMDgxMTYyMDAwMDNCQQorOjEwMUExMDAwMDIwMDIwMjEwRTAwMDYyRDAwMDAwMDAwMDIwMDIwMjFGRgorOjEwMUEyMDAwMzIyNjAwRkY4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1NgorOjEwMUEzMDAwMjQwNTAwMzgwQTAwMDVEMDI3QkQwMDIwMjdCREZGRTA5RgorOjEwMUE0MDAwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCMAorOjEwMUE1MDAwMEUwMDAzMDIwMDgwODAyMTBFMDAwNUM5MDAwMDAwMDA3NgorOjEwMUE2MDAwOTM2MjAwM0YyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDMyRAorOjEwMUE3MDAwMDIwMDIwMjEyNDAyMDAxMkEzNjIwMDNGOTM2MjAwMDVBRAorOjEwMUE4MDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzBCQTM2MjAwMDU5NQorOjEwMUE5MDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjExQQorOjEwMUFBMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAorOjEwMUFCMDAwMEEwMDAzMTAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg0MgorOjEwMUFDMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDA1RDAzMgorOjEwMUFEMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ0NgorOjEwMUFFMDAwOTc0MjAxMEMyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTAyQworOjEwMUFGMDAwMzA0NjAwRkYwRTAwMDMwMjAwMDAwMDAwMjQwMjAwMTIyNgorOjEwMUIwMDAwQTM2MjAwM0Y5MzYyMDAwNTM0NDIwMDEwMEUwMDA1QzkzNQorOjEwMUIxMDAwQTM2MjAwMDUwRTAwMDMwQjAyMDAyMDIxMDIwMDIwMjExOQorOjEwMUIyMDAwMEUwMDAzMTAyNDA1MDAyMDBBMDAwNjlDMDAwMDAwMDA5RgorOjEwMUIzMDAwMEUwMDA1RDAwMDAwMDAwMDBFMDAwMzAyMDIwMDIwMjE2QworOjEwMUI0MDAwOTM2MjAwMjMyNDAzRkY5RjAyMDAyMDIxMDA0MzEwMjRGRQorOjEwMUI1MDAwOEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDIzMEEwMDAzMEI5NAorOjEwMUI2MDAwMjdCRDAwMTgyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRCQworOjEwMUI3MDAwQUZCMDAwMTAzMEIxMDBGRjBFMDAwMzAyMDA4MDgwMjFFMgorOjEwMUI4MDAwMjQwMjAwMTIwRTAwMDVDOUEzNjIwMDNGMEUwMDAzMEJFMQorOjEwMUI5MDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMThFNgorOjEwMUJBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDA1RDA1NQorOjEwMUJCMDAwMjdCRDAwMjBBMzgwMDAyQzAzRTAwMDA4QTM4MDAwMkQ5NworOjEwMUJDMDAwOEY0MjAyNzgwNDQwRkZGRThGODIwMDM0QUY0MjAyNDAxMQorOjEwMUJEMDAwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDg3OQorOjEwMUJFMDAwQUY0MjAyNzgzQzAzNjAwMDhDNjI1NDAwMzA0MjAwMDgyRgorOjEwMUJGMDAwMTQ0MEZGRkQwMDAwMDAwMDhDNjI1NDA4QUY4MjAwMEMwRQorOjEwMUMwMDAwMjQwMjAwNTJBQzYwNTQwOEFDNjQ1NDMwQUM2MjU0MzRDQQorOjEwMUMxMDAwMjQwMjAwMDgwM0UwMDAwOEFDNjI1NDAwM0MwMjYwMDBBQgorOjEwMUMyMDAwOEM0MjU0MDAzMDQyMDAwODEwNDAwMDA1M0MwMzYwMDAyNAorOjEwMUMzMDAwOEM2MjU0MDAzMDQyMDAwODE0NDBGRkZEMDAwMDAwMDA5OAorOjEwMUM0MDAwOEY4MzAwMEMzQzAyNjAwMDAzRTAwMDA4QUM0MzU0MDhBMgorOjEwMUM1MDAwOTBBMzAwMDAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y3MworOjEwMUM2MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTBBMjAwMUNEMQorOjEwMUM3MDAwOTRBMzAwMUUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEM0NgorOjEwMUM4MDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM2RAorOjEwMUM5MDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA5QworOjEwMUNBMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJGOQorOjEwMUNCMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThENgorOjEwMUNDMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhENAorOjEwMUNEMDAwQTUwQTAwMjI4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwMAorOjEwMUNFMDAwQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwMDNFMDAwMDg1RAorOjEwMUNGMDAwQUY0MjAxRjgzQzAyMDgwMDhDNDIwMEI0MjdCREZGRTg2NworOjEwMUQwMDAwQUZCRjAwMTQyNDQyMDAwMUFGQjAwMDEwM0MwMTA4MDAzNgorOjEwMUQxMDAwQUMyMjAwQjQ4RjQzMDAyNDNDMDIwMDFGMzBBQTAwRkYxNQorOjEwMUQyMDAwMzQ0MkZGODAzMEQ4MDBGRjAwNjI4MDI0MDA4MEY4MjExOAorOjEwMUQzMDAwMzBFRjAwRkYxMTU4MDAzQjAxNDA1ODIxMjQwQ0ZGODA3OAorOjEwMUQ0MDAwM0MxOTAwMEEzMTYzMDA3RjAwMDMxMEMwMDAwMzE5NDBGMgorOjEwMUQ1MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMjU2ODAwMDE2QQorOjEwMUQ2MDAwMzEwRDAwN0YwM0UyMTAyMTAwNDMxMDIxMzA0MzAwN0YzQQorOjEwMUQ3MDAwMDM0MzE4MjEwMDRDMTAyNDAwNzk0ODIxQUY0MjAwMjQ2RAorOjEwMUQ4MDAwOEQyMjAwMjQwMTZDMTgyNDAwNkM3MDI2QUQyMjAwMENGQQorOjEwMUQ5MDAwOEQyMjAwMjQzMTA4MDBGRkFEMjIwMDEwOTUyMjAwMTQ4RQorOjEwMURBMDAwOTUyMzAwMjA4RDI3MDAxQzMwNDJGRkZGMzA2M0ZGRkY4QQorOjEwMURCMDAwOEQyNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDAwMjI3QzNFMworOjEwMURDMDAwMDA0MDI4MjEwMEM0MzAyMzAwRTIxMDJCMDBDMjMwMjM0MQorOjEwMUREMDAwMDBFNTM4MjNBRDI3MDAxQ0FEMjYwMDE4OTUyMjAwMjAxMQorOjEwMURFMDAwQTUyMjAwMTQ5NTIyMDAyMjE1NEIwMDBBQTUyMjAwMTZGOAorOjEwMURGMDAwOEQyMzAwMjQ4RDIyMDAwODI1NDYwMDAxMzE0NTAwODBGNgorOjEwMUUwMDAwMTQ2MjAwMDQzMEM0MDA3RjEwOEYwMDAyMzhBQTAwODBFMgorOjEwMUUxMDAwMDBDMDUwMjE1MUFGMDAwMTMxQzgwMEZGMTUxOEZGQzlBMworOjEwMUUyMDAwMDEwMDU4MjE4Rjg0MDAzNDMwODIwMDdGMDM0MjE4MjE0MgorOjEwMUUzMDAwM0MwMjAwMEEwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjQ1NAorOjEwMUU0MDAwQUY0NDAwMjRBMDZBMDA3OUEwNkEwMDgzOEM2MjAwNTAyRAorOjEwMUU1MDAwOEY4NDAwMzRBQzYyMDA3MDhDNjUwMDc0M0MwMjdGRkY5QworOjEwMUU2MDAwMzQ0MkZGRkYwMEEyMjgyNDBFMDAwNzAzQUM2NTAwNzQ3MworOjEwMUU3MDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhBMworOjEwMUU4MDAwMjdCRDAwMTgyN0JERkZDMEFGQkUwMDM4QUZCNzAwMzQ3NAorOjEwMUU5MDAwQUZCNTAwMkNBRkIyMDAyMEFGQjEwMDFDQUZCMDAwMTgzRQorOjEwMUVBMDAwQUZCRjAwM0NBRkI2MDAzMEFGQjQwMDI4QUZCMzAwMjRFMgorOjEwMUVCMDAwOEY0NTAwMjQ4RjQ2MDAyODhGNDMwMDJDM0MwMjAwMUZEMgorOjEwMUVDMDAwMzQ0MkZGODAwMDYyMTgyNDAwQzIzMDI0MDA4MEE4MjEyMAorOjEwMUVEMDAwQUZBMzAwMTQwMEEyRjAyNDBFMDAwNkM3QUZBNjAwMTBBNgorOjEwMUVFMDAwM0MwMjA4MDA4QzQyMDBFMDI0MTBGRjgwMDM2MDg4MjEzRgorOjEwMUVGMDAwMDJBMjEwMjEwMDUwMTAyNEFGNDIwMDI0M0MwMjA4MDAyRQorOjEwMUYwMDAwOEM0MjAwRTAwMkEyMTAyMTMwNDIwMDdGMDM0MjE4MjFERgorOjEwMUYxMDAwM0MwMjAwMEEwMDYyOTAyMTkyNDIwMEQyOTM2MzAwODQ0NgorOjEwMUYyMDAwMzA1NzAwRkYzMDYzMDBGRjI0MDIwMDAxMTA2MjAwMzRDQworOjEwMUYzMDAwMDM2MDIwMjEyNDAyMDAwMjE0NjIwMDM2MDAwMDAwMDAyOQorOjEwMUY0MDAwMEUwMDEyQUUwMjQwMjgyMTkyMjMwMDgzOTIyMjAwODNDOQorOjEwMUY1MDAwMzA2MzAwN0YzMDQyMDA3RjAwMDIxMEMwMDAwMzE5NDA1MAorOjEwMUY2MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDJBMjEwMjExMQorOjEwMUY3MDAwMDA0MzM4MjEwMEYwMTAyNEFGNDIwMDI4OTIyNTAwNzg1OQorOjEwMUY4MDAwOTIyNDAwODMzMEUyMDA3RjAzNDIxODIxM0MwMjAwMENCRgorOjEwMUY5MDAwMTQ4NTAwMDcwMDYyODAyMTI0MDJGRkZGQTI0MjAwRjFBNQorOjEwMUZBMDAwMjQwMkZGRkZBNjQyMDBGMjBBMDAwN0JGMjQwMkZGRkYzRgorOjEwMUZCMDAwOTYwMjAwMjBBMjQyMDBGMTk2MDIwMDIyQTY0MjAwRjIwMAorOjEwMUZDMDAwOEUwMjAwMjRBRTQyMDBGNDkyMjIwMDgzQTI0MjAwRjA2RQorOjEwMUZEMDAwOEU0MjAwQzhBRTQyMDBGQzhFNDIwMEM0QUU0MjAwRjgwMQorOjEwMUZFMDAwOEUyMjAwNTBBRTQyMDEwMDhFNDIwMENDQUU0MjAxMDQ2RgorOjEwMUZGMDAwOTIyMjAwODUzMDQyMDAzRjBBMDAwODFBMzQ0MjAwNDAxNQorOjEwMjAwMDAwMEUwMDEyRDEwMjQwMjgyMTkyMjIwMDg1MEEwMDA4MUFFRgorOjEwMjAxMDAwMzA0MjAwM0Y5MzYyMDA4NTI0MDNGRkRGMzA0MjAwM0ZERgorOjEwMjAyMDAwQTM2MjAwODU5MzYyMDA4NTAwNDMxMDI0QTM2MjAwODVBQgorOjEwMjAzMDAwOTM2MzAwODM5MzYyMDA3ODMwNzQwMEZGMzA0MjAwRkZBNgorOjEwMjA0MDAwMTA1NDAwMzYyNDBBRkY4MDNDMEMwMDBDMzI4MzAwN0ZDMQorOjEwMjA1MDAwMDAwMzEwQzAwMDAzMTk0MDAwNjIxODIxM0MwMjA4MDA3MAorOjEwMjA2MDAwOEM0MjAwREMyNjg4MDAwMTMxMDkwMDdGMDJBMjEwMjE4OQorOjEwMjA3MDAwMDA0MzM4MjEzMEUyMDA3RjAzNDIxODIxMDBFQTEwMjQ5NworOjEwMjA4MDAwQUY0MjAwMjgwMDZDODAyMThFMDIwMDI0MDI4QTE4MjRBRQorOjEwMjA5MDAwMDA2QTU4MjZBRTAyMDAwQzhFMDIwMDI0MzEwODAwRkZCMAorOjEwMjBBMDAwQUUwMjAwMTA5NjAyMDAxNDk2MDMwMDIwOEUwNzAwMUM1QQorOjEwMjBCMDAwMzA0MkZGRkYzMDYzRkZGRjhFMDYwMDE4MDA0MzEwMjNGRAorOjEwMjBDMDAwMDAwMjExMDAwMDAyMjdDMzAwNDAyODIxMDBDNDMwMjM3MQorOjEwMjBEMDAwMDBFMjEwMkIwMEMyMzAyMzAwRTUzODIzQUUwNzAwMUNCRAorOjEwMjBFMDAwQUUwNjAwMTg5NjAyMDAyMEE2MDIwMDE0OTYwMjAwMjJGNgorOjEwMjBGMDAwQTYwMjAwMTY5MjIyMDA3OTMwNDIwMEZGMTA1NDAwMDcxOQorOjEwMjEwMDAwMDAwMDAwMDA1MTM3MDAwMTMxNjgwMEZGOTIyMjAwNzg4MgorOjEwMjExMDAwMzA0MjAwRkYxNDQ4RkZDRDAxMDBBMDIxOTIyMjAwODMyRAorOjEwMjEyMDAwQTIyMjAwNzk4RTIyMDA1MDBBMDAwODdBQUUyMjAwNzBBNgorOjEwMjEzMDAwQTIyMjAwODU4RTIyMDA0QzI0MDVGRjgwQUU0MjAxMENCNQorOjEwMjE0MDAwOTIyMjAwODUzNDQyMDAyMEEyMjIwMDg1OTI0MjAwRDFEMgorOjEwMjE1MDAwM0MwMzA4MDA4QzYzMDBEQzMwNTQwMEZGM0MwMjA4MDBBNAorOjEwMjE2MDAwOEM0MjAwRTQwMDE0MzE0MDAwMTQyMEMwMDJBMzE4MjE2NgorOjEwMjE3MDAwMDBDNDIwMjEwMkEyMTAyMTAwNjQzODIxMDA0NjEwMjE1MQorOjEwMjE4MDAwMDA0NTE4MjQwMEU1MjgyNEFGNDUwMDI4QUY0MzAwMkM2MworOjEwMjE5MDAwMzA0MjAwN0Y5MjQ0MDBEMDMwRTMwMDdGMDM0MjI4MjE4OAorOjEwMjFBMDAwMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUxNworOjEwMjFCMDAwMzA5NjAwRkYwMEEyOTgyMTEyOTYwMDJBMDAwMDAwMDAyRAorOjEwMjFDMDAwOEUwMjAwMEMwMjAwMjAyMTAyNjAyODIxMTA0MDAwMjUxMAorOjEwMjFEMDAwMjYxMDAwMjgwRTAwMDZFMjAwMDAwMDAwOTI2MjAwMERBQQorOjEwMjFFMDAwMjY4MzAwMDEzMDc0MDBGRjMwNDIwMDdGQTI2MjAwMERBMAorOjEwMjFGMDAwMjQwNEZGODAxNjk3RkZGMDI2NzMwMDIwM0MwMjA4MDA5RAorOjEwMjIwMDAwOEM0MjAwREMwMDAwQTAyMTAyQTIxMDIxMDA0NDEwMjQxNgorOjEwMjIxMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA2NgorOjEwMjIyMDAwOEM2MzAwREMwMkEyMTAyMTAwNDQxMDI0QUY0MjAwMkM3OQorOjEwMjIzMDAwM0MwMjA4MDA4QzQyMDBFNDAyQTMxODIxMzA2MzAwN0ZCNgorOjEwMjI0MDAwMDJBMjEwMjEzMDQyMDA3RjAzNDIyMDIxMDM0MzE4MjFDMworOjEwMjI1MDAwM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFMEEwMDA4M0M5NworOjEwMjI2MDAwMDA4Mjk4MjE4RTQyMDBEOEFFMjIwMDUwOEU0MjAwRDhDMworOjEwMjI3MDAwQUUyMjAwNzA5MjI1MDA4MzkyNDYwMEQxOTIyMzAwODMwMworOjEwMjI4MDAwOTI0NDAwRDEyNDAyRkY4MDAwQTIyODI0MzA2MzAwN0YwMgorOjEwMjI5MDAwMzA4NDAwRkYwMEE2MjgyNTAwNjQxODJBMTA2MDAwMDI4MAorOjEwMjJBMDAwMzBBNTAwRkYzOEE1MDA4MEEyMjUwMDgzQTIyNTAwNzk3MworOjEwMjJCMDAwMEUwMDA2RDUwMDAwMDAwMDkyMjIwMDdFMDJBMDIwMjEyMAorOjEwMjJDMDAwQTIyMjAwN0E4RTIzMDA3NDNDMDI3RkZGMzQ0MkZGRkY3QgorOjEwMjJEMDAwMDA2MjE4MjQwRTAwMDcwM0FFMjMwMDc0OEZBMjAwMTBDMgorOjEwMjJFMDAwQUY1RTAwMjQ4RkJGMDAzQ0FGNDIwMDI4OEZCRTAwMzg5NQorOjEwMjJGMDAwOEZBMjAwMTQ4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkMzQQorOjEwMjMwMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUMzRgorOjEwMjMxMDAwOEZCMDAwMTgyN0JEMDA0MDAzRTAwMDA4QUY0MjAwMkMzQQorOjEwMjMyMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDA4QgorOjEwMjMzMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDBGMDA4MDMwMjExMgorOjEwMjM0MDAwQTBBMDAwMDAzQzAyMDgwMDhDNDIwMEU0OEY4NDAwMzQwRQorOjEwMjM1MDAwMDA4MjIwMjEzMDgyMDA3RjAzNDIxODIxM0MwMjAwMENDMQorOjEwMjM2MDAwMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0QUNDMzAwMDBGOAorOjEwMjM3MDAwMDNFMDAwMDhBRjQ0MDAyODhDODIwMDAwMjQ0MjAwMjBDMworOjEwMjM4MDAwMDNFMDAwMDhBQzgyMDAwMDk0QzIwMDAwM0MwODA4MDA5MgorOjEwMjM5MDAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNAorOjEwMjNBMDAwQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkJFNAorOjEwMjNCMDAwNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDBBMAorOjEwMjNDMDAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDA2RgorOjEwMjNEMDAwMzA0MkZGRkY1NDQzMDAwNzhGODYwMDI4MDEwNzEwMkI2RgorOjEwMjNFMDAwQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDA0RgorOjEwMjNGMDAwOEY4NjAwMjg4Q0M0MDAxQ0FGNDQwMDNDOTRBMjAwMDBDRgorOjEwMjQwMDAwOEY0MzAwM0MzMDQyRkZGRjAwMDIxMEMwMDA2MjE4MjFFMQorOjEwMjQxMDAwQUY0MzAwM0M4RjQyMDAzQzAwODIyMDIzMTg4MDAwMDQyMAorOjEwMjQyMDAwMDAwMDAwMDA4Q0MyMDAxODBBMDAwOERCMjQ0MjAwMDFGMgorOjEwMjQzMDAwOENDMjAwMThBRjQyMDAzODNDMDIwMDUwMzQ0MjAwMTBGOQorOjEwMjQ0MDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMjQ1MDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDBDRAorOjEwMjQ2MDAwOEY0MjA0MDRBRDIyMDAwNDhGNDIwNDAwQUQyMjAwMDAxQworOjEwMjQ3MDAwM0MwMjAwMjBBRjQyMDAzMDAzRTAwMDA4MDAwMDAwMDBGMgorOjEwMjQ4MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAyRAorOjEwMjQ5MDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDBBNQorOjEwMjRBMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDBENgorOjEwMjRCMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzBBOQorOjEwMjRDMDAwMEUwMDA4QjAwMjQwMzgyMTBBMDAwOTBEMDAwMDAwMDA4QgorOjEwMjREMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDdDNQorOjEwMjRFMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDA2MAorOjEwMjRGMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDBBMQorOjEwMjUwMDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDA1QQorOjEwMjUxMDAwMjQ0MjAwMDFBNjIyMDAwMDhGODIwMDI4OTYyMzAwMDA5QQorOjEwMjUyMDAwOTQ0MjAwMTYxNDQzMDAwNDhGQkYwMDFDMjQwMjAwMDFEMworOjEwMjUzMDAwQTYyMjAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQworOjEwMjU0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4OTAwMjgwRAorOjEwMjU1MDAwMjdCREZGRTBBRkJGMDAxODhEMjIwMDI4Mjc0ODA0MDBFOAorOjEwMjU2MDAwMzBFNzAwRkZBRjQyMDAzODhEMjIwMDJDQUY4ODAwMzBFQQorOjEwMjU3MDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDBDQQorOjEwMjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwMjU5MDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDQUQwMjAwMDA1OAorOjEwMjVBMDAwOEM4MjAwMTBBRDAyMDAwNDhDODIwMDE4QUQwMjAwMDg3RAorOjEwMjVCMDAwOEM4MjAwMUNBRDAyMDAwQzhDQTIwMDE0QUQwMjAwMTAzNQorOjEwMjVDMDAwOEM4MjAwMjBBRDAyMDAxNDkwODIwMDA1MzA0MjAwRkY5MgorOjEwMjVEMDAwMDAwMjEyMDBBRDAyMDAxODhDQTIwMDE4QUQwMjAwMUMwRgorOjEwMjVFMDAwOENBMjAwMENBRDAyMDAyMDhDQTIwMDEwQUQwMjAwMjREMQorOjEwMjVGMDAwOENBMjAwMUNBRDAyMDAyODhDQTIwMDIwQUQwMjAwMkM5MQorOjEwMjYwMDAwQUQwNjAwMzBBRDAwMDAzNDk3ODMwMDI2MzQwMkZGRkY5MgorOjEwMjYxMDAwMTQ2MjAwMDIwMDYwMjAyMTM0MDRGRkZGMTBFMDAwMTE2QQorOjEwMjYyMDAwQUQwNDAwMzg5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDFCRAorOjEwMjYzMDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDA1NQorOjEwMjY0MDAwMzA4NDAwMDcwMDgyMTAwNDAwNDUxMDI1QTA2MjAwNDA3RAorOjEwMjY1MDAwOEY4MjAwMjg5NDQyMDA1NjMwNDJGRkZGMEEwMDA5NzQxRQorOjEwMjY2MDAwQUQwMjAwM0M5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDE3QgorOjEwMjY3MDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDAxNQorOjEwMjY4MDAwMzA4NDAwMDcwMDgyMTAwNDAwMDIxMDI3MDA0NTEwMjQ0NworOjEwMjY5MDAwQTA2MjAwNDBBRDAwMDAzQzAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjZBMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDQwQUY0MjAwMzAwRgorOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDA0OQorOjEwMjZDMDAwMzA0MjAwMTAxMDQwRkZGRDhGODYwMDI4QUY4ODAwMzA5OAorOjEwMjZEMDAwMjRDMjAwNTYyNEM3MDAzQzI0QzQwMDI4MjRDNTAwMzI2QworOjEwMjZFMDAwMjRDNjAwMzYwRTAwMDhFRUFGQTIwMDEwOEZCRjAwMThGRgorOjEwMjZGMDAwMDNFMDAwMDgyN0JEMDAyMDhGODMwMDI0M0MwNjA4MDA2QgorOjEwMjcwMDAwOENDNjAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBERAorOjEwMjcxMDAwMDA0NjEwMjEwMDQzMTAyMTI0MDNGRjgwMzA0NjAwN0YzMworOjEwMjcyMDAwMDA0MzEwMjRBRjQyMDAyODAzNDYxODIxM0MwMjAwMEM0RAorOjEwMjczMDAwMDA2MjMwMjE5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjE1QQorOjEwMjc0MDAwMzQ0MjAwMTBBMEMyMDAwRDhGODkwMDI4OEY4QTAwMjQxNworOjEwMjc1MDAwOTUyMzAwMzYwMDBBMTM4MjMwNDgwMDAzMjQwMjAwMDE0QQorOjEwMjc2MDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDU1NAorOjEwMjc3MDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA5QjgyMQorOjEwMjc4MDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA5QjgyQworOjEwMjc5MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwOUI4MjQ0MzAwMDE1MworOjEwMjdBMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkI3QgorOjEwMjdCMDAwNTA0MDAwMDkyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDM0RQorOjEwMjdDMDAwMDAwMDAwMDAwQTAwMDlDNDI0MDcwMDAxOTUyMjAwM0UxMQorOjEwMjdEMDAwMjQ0MjAwMDFBNTIyMDAzRTAwMEExMzgyMzA0MzAwMDM3OAorOjEwMjdFMDAwMkM2MjAwMDIxMDQwMDAwOTAwODAyODIxMTQ2MDAwMDRCRgorOjEwMjdGMDAwMDAwMDAwMDA5NEMyMDAzNjBBMDAwOUQ0MzA0NkZGRkZGMgorOjEwMjgwMDAwOENDNjAwMzgwQTAwMDlENDAwODAyODIxMDAwMDMwMjEzRAorOjEwMjgxMDAwM0MwNDA4MDAyNDg0NEREODBBMDAwOTIxMDAwMDAwMDA2RgorOjEwMjgyMDAwMjc0OTAxMDA4RDIyMDAwQzk1MjMwMDA2MDEyMDIwMjE1QworOjEwMjgzMDAwMDAwMjE2MDIzMDQ2MDAzRjMwNjNGRkZGMjQwMjAwMjdFQgorOjEwMjg0MDAwMDBDMDI4MjEyOEM3MDAyODEwQzIwMDBFQUY4MzAwMjQzMgorOjEwMjg1MDAwMTBFMDAwMDgyNDAyMDAzMTI0MDIwMDIxMTBDMjAwMDkwNworOjEwMjg2MDAwMjQwMjAwMjUxMEMyMDAwNzkzODIwMDJEMEEwMDA5RjNGQworOjEwMjg3MDAwMDAwMDAwMDAxMEMyMDAwNTkzODIwMDJEMEEwMDA5RjMzOQorOjEwMjg4MDAwMDAwMDAwMDAwQTAwMDk4QzAwMDAwMDAwMEEwMDA2QkVEQgorOjEwMjg5MDAwMDAwMDAwMDA5NTIzMDAwNjkxMjQwMDA1OEQyNTAwMEMwMgorOjEwMjhBMDAwOEQyNjAwMTA4RDI3MDAxODhEMjgwMDFDOEQyOTAwMjBGMgorOjEwMjhCMDAwMjQ0MjAwMDEzQzAxMDgwMEE0MjM0RERFM0MwMTA4MDAzNQorOjEwMjhDMDAwQTAyNDREREQzQzAxMDgwMEFDMjU0REU0M0MwMTA4MDA4RQorOjEwMjhEMDAwQUMyNjRERTgzQzAxMDgwMEFDMjc0REYwM0MwMTA4MDA1NworOjEwMjhFMDAwQUMyODRERjQzQzAxMDgwMEFDMjk0REY4MDNFMDAwMDg4OQorOjEwMjhGMDAwQTM4MjAwMkQ4Rjg3MDAyODI3QkRGRkMwQUZCMzAwMzQwRgorOjEwMjkwMDAwQUZCMjAwMzBBRkIxMDAyQ0FGQjAwMDI4QUZCRjAwMzg3RAorOjEwMjkxMDAwM0MwMjA4MDA4QzQyMDBEMDk0RTMwMDMwMzBCMEZGRkY0RQorOjEwMjkyMDAwMDA1MDEwMDczMDQ1RkZGRjMwNjNGRkZGMDBDMDk4MjFDMworOjEwMjkzMDAwQTdBMjAwMTAzQzExMDgwMDk2MzEwMEM2MTRBMzAwMDY5RgorOjEwMjk0MDAwMzA5MkZGRkY4Q0UyMDAyNDI0NDIwMDMwQUY0MjAwM0M3MgorOjEwMjk1MDAwMEEwMDBBMkM4Q0UyMDAyMDk0RTIwMDMyMzA0MkZGRkY5MQorOjEwMjk2MDAwNTRBMjAwMDgyN0E0MDAxODhDRTIwMDJDMjQ0MjAwMzA1NgorOjEwMjk3MDAwQUY0MjAwM0M4Q0UyMDAyOEFGNDIwMDM4MEEwMDBBM0ExRAorOjEwMjk4MDAwOEY4NDAwMjgyN0E1MDAxMDI3QTYwMDIwMDIyMDM4MjFDOAorOjEwMjk5MDAwMEUwMDA4QjBBN0EwMDAyMDhGQTIwMDE4MjQ0MjAwMzAyQgorOjEwMjlBMDAwQUY0MjAwMzg4RkEyMDAxQ0FGNDIwMDNDOEY4NDAwMjg0OQorOjEwMjlCMDAwM0MwMjAwMDVBRjQyMDAzMDk0ODIwMDM0Mjc0MzA0MDBGQgorOjEwMjlDMDAwMzA0MkZGRkYwMjAyMTAyQjE0NDAwMDA3QUY4MzAwMzA5QgorOjEwMjlEMDAwOTQ4MjAwNTQ5NDgzMDAzNDAyMDIxMDIxMDA0MzEwMjM5NworOjEwMjlFMDAwMEEwMDBBNEUzMDQzRkZGRjk0ODMwMDU0OTQ4MjAwMzQ1RgorOjEwMjlGMDAwMDIyMzE4MjEwMDUwMTAyMzAwNjIxODIzMzA2M0ZGRkZDOAorOjEwMkEwMDAwOTQ4MjAwMTYzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDBEMAorOjEwMkExMDAwMEEwMDBBNUMyNDAzMDAwMTk0ODIwMDE2MzA0MkZGRkY4MgorOjEwMkEyMDAwMDA0MzEwMkIxMDQwMDAwNThGODIwMDMwOTQ4MjAwMTY2NgorOjEwMkEzMDAwMDA2MjEwMjMzMDQzRkZGRjhGODIwMDMwQUM1MzAwMDA1MAorOjEwMkE0MDAwQUM0MDAwMDRBQzUyMDAwOEFDNDMwMDBDM0MwMjAwMDY1MQorOjEwMkE1MDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMkE2MDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkRDNworOjEwMkE3MDAwMDAxMDE4QzIwMDY0MTgyMTkwNjUwMDQwMzIwNDAwMDc1RAorOjEwMkE4MDAwMjQwMjAwMDE4RkJGMDAzODhGQjMwMDM0OEZCMjAwMzBCMgorOjEwMkE5MDAwOEZCMTAwMkM4RkIwMDAyODAwODIxMDA0MDA0NTEwMjU1MworOjEwMkFBMDAwMjdCRDAwNDAwM0UwMDAwOEEwNjIwMDQwMjdCREZGQTg0QQorOjEwMkFCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ2MAorOjEwMkFDMDAwQUZCMTAwM0NBRkJGMDA1NEFGQjIwMDQwQUZCMDAwMzg3MAorOjEwMkFEMDAwOEM5MDAwMDAzQzAyMDgwMDhDNDIwMEU4OEY4NjAwMzQ5NQorOjEwMkFFMDAwOTYwMzAwMDIyNDEzRkY4MDAwQzIzMDIxMzA2MzNGRkZCMQorOjEwMkFGMDAwMDAwMzE5ODAwMEMzMzgyMTAwRjMxMDI0OTBCMjAwMDBCNQorOjEwMkIwMDAwQUY0MjAwMkM5MjAzMDAwMjMwRTIwMDdGMDM0MjMwMjFFQQorOjEwMkIxMDAwM0MwMjAwMEUwMEMyODgyMTMwNjMwMEMwMjQwMjAwNDA0NQorOjEwMkIyMDAwMDA4MEE4MjEwMEEwQjAyMTE0NjIwMDI2MDAwMEEwMjE4RQorOjEwMkIzMDAwOEUzNDAwMzg4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDE1NgorOjEwMkI0MDAwQUUyMjAwMTg5MjAyMDAwRDMwNDIwMDIwMTQ0MDAwMTUwMQorOjEwMkI1MDAwOEY4MjAwMzQzQzAzMDgwMDhDNjMwMERDMDAxMjM4QzAxNAorOjEwMkI2MDAwMDAxMjMxNDAwMDQzMTAyMTAwQzczMDIxMDA0NjM4MjFCNworOjEwMkI3MDAwMzBFMzAwMDczQzAyMDA4MDMwRTYwMDc4MDBDMjMwMjVEOAorOjEwMkI4MDAwMDM0MzE4MjEwMEYzMTAyNEFGNDIwODAwMjQ2MzA5MDAxNgorOjEwMkI5MDAwQUY0NjA4MTA4RTIyMDAxODhDNjMwMDA4MDA0MzEwMjFGNQorOjEwMkJBMDAwQUUyMjAwMTg4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEzMQorOjEwMkJCMDAwMDA2MjE4MkIxMDYwMDAzRDAwMDAwMDAwMEEwMDBCMTA5RQorOjEwMkJDMDAwMDAwMDAwMDA5MjAzMDAwMjI0MDJGRkMwMDA0MzEwMjQxMgorOjEwMkJEMDAwMzA0MjAwRkYxNDQwMDAwNTI0MDIwMDAxQUUyMjAwMTgxQworOjEwMkJFMDAwOTYyMjAwMzYwQTAwMEFGOTMwNTRGRkZGOEUyMjAwMTRBNAorOjEwMkJGMDAwMjQ0MjAwMDFBRTIyMDAxODkyMDIwMDAwMDAwMjE2MDBEQQorOjEwMkMwMDAwMDAwMjE2MDMwNDQxMDAyOTAwMDAwMDAwOTYwMjAwMDJBMQorOjEwMkMxMDAwMjdBNDAwMTAwMDgwMjgyMUE3QTIwMDE2OTYwMjAwMDIxNworOjEwMkMyMDAwMjQwNzAwMDEwMDAwMzAyMTMwNDJGRkZGQUY4MjAwMjQ2MgorOjEwMkMzMDAwMEUwMDA5MjFBRkEwMDAxQzk2MDMwMDAyM0MwNDA4MDAwRQorOjEwMkM0MDAwOEM4NDAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBEQQorOjEwMkM1MDAwMDA0NDEwMjEwMDQzMTAyMTMwNDMwMDdGM0MwNTAwMEM0QworOjEwMkM2MDAwMDA1MzEwMjQwMzQzMTgyMUFGNDIwMDI4MDA2NTE4MjFBNworOjEwMkM3MDAwOTA2MjAwMEQwMDEyMjE0MDMwNDIwMDdGQTA2MjAwMERFMgorOjEwMkM4MDAwM0MwMzA4MDA4QzYzMDBFNDhGODIwMDM0MDA0MzEwMjE3MQorOjEwMkM5MDAwMDA0NDM4MjEzMEUyMDA3RjAzNDIxMDIxMDA0NTEwMjExQQorOjEwMkNBMDAwMDBGMzE4MjRBRjQzMDAyOEFFQTIwMDAwOTIyMjAwMERDQQorOjEwMkNCMDAwMzA0MjAwMTAxMDQwMDAxMzAyQTAyMDIxOEY4MzAwMjgxMgorOjEwMkNDMDAwOEVBNDAwMDAwMjgwMzAyMTk0NjIwMDNFMjQ0MkZGRkY2NworOjEwMkNEMDAwQTQ2MjAwM0U5NDg0MDAwMjk2MjUwMDBFMzA4NEZGRkYxQgorOjEwMkNFMDAwMEUwMDBBMEIzMEE1RkZGRjhGODIwMDI4OTQ0MzAwMzRBQQorOjEwMkNGMDAwOTYyMjAwMEUxNDQzMDAwMzAyQTAyMDIxMjQwMjAwMDFBQQorOjEwMkQwMDAwQTM4MjAwMkMwMkMwMjgyMTBFMDAwODk2MDAwMDAwMDBCQgorOjEwMkQxMDAwOEZCRjAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg2MQorOjEwMkQyMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhBOQorOjEwMkQzMDAwMDNFMDAwMDgyN0JEMDA1ODhGODIwMDI4MjdCREZGRDA4MAorOjEwMkQ0MDAwQUZCNDAwMjhBRkIyMDAyMEFGQkYwMDJDQUZCMzAwMjQ1NworOjEwMkQ1MDAwQUZCMTAwMUNBRkIwMDAxODkwNDQwMEQwOTA0MzAwRDEzOAorOjEwMkQ2MDAwMDAwMEEwMjEzMDkyMDBGRkEzQTMwMDEwMzA2MzAwRkZGOQorOjEwMkQ3MDAwOEM1MTAwRDg4QzUzMDBEQzEwNzIwMDJCMjQwMjAwMDEwRgorOjEwMkQ4MDAwM0MwMzA4MDA4QzYzMDBFNDkzQTQwMDEwOEY4MjAwMzQ5RAorOjEwMkQ5MDAwMjQwNkZGODAwMDA0MjE0MDAwNDMxMDIxMDA0NDEwMjEzQworOjEwMkRBMDAwMzA0MzAwN0YwMDQ2MTAyNEFGNDIwMDI4MDM0MzE4MjExRgorOjEwMkRCMDAwM0MwMjAwMEMwMDYyMTgyMThDNjIwMDA0MjdBNDAwMTQ1RAorOjEwMkRDMDAwMjdBNTAwMTAwMjIyODAyMTAyNzAxMDIzMDQ0MDAwMTU2NAorOjEwMkREMDAwQUZBMzAwMTQ5MDYyMDAwRDAwQzIxMDI0MzA0MjAwRkYyNworOjEwMkRFMDAwMTQ0MDAwMDcwMjAwODgyMTkwNjIwMDBEMzQ0MjAwNDAyOAorOjEwMkRGMDAwMEUwMDA4OTZBMDYyMDAwRDBBMDAwQjU1OTNBMjAwMTA2OQorOjEwMkUwMDAwMEUwMDBBNzkyNDE0MDAwMThGODMwMDI4QUM3MDAwRDhDQQorOjEwMkUxMDAwOTNBMjAwMTBBMDYyMDBEMTkzQTIwMDEwMTQ1MkZGRDgxOAorOjEwMkUyMDAwMDAwMDAwMDAyNDAyMDAwMTE2ODIwMDA0OEZCRjAwMkM2NQorOjEwMkUzMDAwMEUwMDA2QkUwMDAwMDAwMDhGQkYwMDJDOEZCNDAwMjhEQgorOjEwMkU0MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwOAorOjEwMkU1MDAwMDNFMDAwMDgyN0JEMDAzMDI3QkRGRkQ4QUZCMzAwMUMzQQorOjEwMkU2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA3OAorOjEwMkU3MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDA1MkI3QgorOjEwMkU4MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMkU5MDAwOEY4MjAwMjBBQzUxMDAwMEFDNTIwMDA0QUM1MzAwMDhGQgorOjEwMkVBMDAwQUM0MDAwMENBQzQwMDAxMEFDNDAwMDE0QUM0MDAwMTgyQQorOjEwMkVCMDAwM0MwMzA4MDA5NDYzNERCRTAyMDM4MDI1QUM1MDAwMUMwNworOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDFEOQorOjEwMkVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3OQorOjEwMkVFMDAwOEZCMDAwMTAwQTAwMDU1MDI3QkQwMDI4MjdCREZGRTg1RAorOjEwMkVGMDAwQUZCMDAwMTBBRkJGMDAxNDMwQTVGRkZGMzBDNjAwRkYxOQorOjEwMkYwMDAwMDA4MDgwMjEyNDAyMEM4MEFGNDIwMDI0MDAwMDAwMDBEOQorOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMkYyMDAwMEUwMDBCNjQwMDAwMDAwMDNDMDQwODAwMjQ4NDAwRTA1NAorOjEwMkYzMDAwOEM4MjAwMDAyNDAzRkY4MDhGQkYwMDE0MDIwMjEwMjE0NgorOjEwMkY0MDAwMDA0MzEwMjRBRjQyMDAyNDhDODIwMDAwM0MwMzAwMEE5RQorOjEwMkY1MDAwMDIwMjgwMjEzMjEwMDA3RjAzNTAxMDIxOEZCMDAwMTAzOAorOjEwMkY2MDAwMDA0MzEwMjEyN0JEMDAxODAzRTAwMDA4QUY4MjAwMjhBRAorOjEwMkY3MDAwMjdCREZGRThBRkJGMDAxMDhGNDQwMTQwM0MwMzA4MDBBRAorOjEwMkY4MDAwOEM2MzAwRTAyNDAyRkY4MEFGODQwMDM0MDA4MzE4MjFBQQorOjEwMkY5MDAwMDA2MjEwMjRBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5QQorOjEwMkZBMDAwOTUwNTAwMDIzMDYzMDA3RjNDMDIwMDBBMDM0MzE4MjFBQworOjEwMkZCMDAwMDA2MjE4MjEzMEE1RkZGRjM0MDJGRkZGMDAwMDMwMjExRQorOjEwMkZDMDAwM0MwNzYwMjAxMEEyMDAwNkFGODMwMDI4MjQwMkZGRkYwOAorOjEwMkZEMDAwQTUwMjAwMDI5NDY1MDBENDBFMDAwQjg5MzBBNUZGRkYwNgorOjEwMkZFMDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDhFQQorOjEwMkZGMDAwQUY0MjAwMjQzQzAyMDAwODAzNDI0MDIxOTUwMjAwMDIzNworOjEwMzAwMDAwM0MwQTA4MDA5NTRBMDBDNjMwNDZGRkZGMTRDMDAwMDc3RQorOjEwMzAxMDAwMzQwMkZGRkY4RjgyMDAyODhGODQwMDM0M0MwNzYwMjAzOQorOjEwMzAyMDAwOTQ0NTAwRDQwQTAwMEJGMjMwQTVGRkZGMTBDMjAwMjQyMworOjEwMzAzMDAwOEY4NzAwMjg5NEUyMDA1NDk0RTQwMDE2MzA0NUZGRkY4NworOjEwMzA0MDAwMDBBNjEwMjMwMEE2MTgyQjMwODlGRkZGMTA2MDAwMDQ5MworOjEwMzA1MDAwMzA0NEZGRkYwMEM1MTAyMzAxMjIxMDIzMzA0NEZGRkYzRQorOjEwMzA2MDAwMDA4QTEwMkIxMDQwMDAwQzAxMkExMDIzMjQwMjAwMDFCQQorOjEwMzA3MDAwQTUwMjAwMTYyNDAyRkZGRkE1MDIwMDAyOTRFNTAwRDQ3OQorOjEwMzA4MDAwOEY4NDAwMzQwMDAwMzAyMTMwQTVGRkZGM0MwNzYwMjAxMgorOjEwMzA5MDAwMEEwMDBCODkwMDAwMDAwMDAwNDQxMDJBMTA0MDAwMDhCQworOjEwMzBBMDAwMDAwMDAwMDA5NTAyMDAxNjMwNDIwMDAxMTA0MDAwMDRBQworOjEwMzBCMDAwMDAwMDAwMDA5NzQyMDA3RTI0NDIwMDE0QTUwMjAwMTY4MgorOjEwMzBDMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI4MjdCREZGRTAxNworOjEwMzBEMDAwQUZCRjAwMTg5NDgyMDAzNDk0ODMwMDNFMTA2MDAwMUE0MQorOjEwMzBFMDAwMzA0OEZGRkY5MzgzMDAyQzI0MDIwMDAxMTQ2MjAwMjc2NAorOjEwMzBGMDAwOEZCRjAwMTg4RjgyMDAyODAwMDgxOEMyMzEwODAwMDcwRgorOjEwMzEwMDAwMDA2MjE4MjEyNDQ3MDAzQTI0NDkwMDU0MjQ0NDAwMjAzNgorOjEwMzExMDAwMjQ0NTAwMzAyNDQ2MDAzNDkwNjIwMDQwMzA0MjAwRkZENQorOjEwMzEyMDAwMDEwMjEwMDczMDQyMDAwMTEwNDAwMDE2OEZCRjAwMTg0NgorOjEwMzEzMDAwMEUwMDA4RUVBRkE5MDAxMDhGODIwMDI4OTQ0MjAwMzRFMAorOjEwMzE0MDAwMEEwMDBDMEIzMDQ4RkZGRjk0ODMwMDM2OTQ4MjAwMzQ1MQorOjEwMzE1MDAwMTA0MzAwMEU4RkJGMDAxODk0ODIwMDM2QTQ4MjAwMzQwMgorOjEwMzE2MDAwOTQ4MjAwNTZBNDgyMDA1NDhDODIwMDJDQUM4MjAwMjRFRAorOjEwMzE3MDAwOTQ4MjAwMzJBNDgyMDAzMDk0ODIwMDNDQTQ4MjAwM0FGRgorOjEwMzE4MDAwOEZCRjAwMTgwQTAwMEJDQjI3QkQwMDIwMDNFMDAwMDgwQQorOjEwMzE5MDAwMjdCRDAwMjAyN0JERkZFOEFGQkYwMDEwOEY0QTAxMDAwOAorOjEwMzFBMDAwM0MwNTA4MDA4Q0E1MDBFMDNDMDIwODAwOTA0MjRERTQ3QworOjEwMzFCMDAwM0MwQzA4MDA5NThDNERERTAxNDUyODIxMzA0QjAwM0YyQQorOjEwMzFDMDAwMzBBMjAwN0YwMzQyNDAyMTM5NjkwMDMyM0MwMjAwMEFFQworOjEwMzFEMDAwMzk2MzAwM0YyQzYzMDAwMTAxMDI0MDIxMkQyOTAwMDFDOQorOjEwMzFFMDAwMjQwMkZGODAwMEEyMjgyNDAxMjM0ODI1QUY4QTAwMzQ0RQorOjEwMzFGMDAwMDA4MDE4MjFBRjQ1MDAyNDAwMDAzMDIxMDA4MDI4MjFFNAorOjEwMzIwMDAwMjQwNzAwMDFBRjg4MDAyODNDMDQwODAwMjQ4NDRERDgxRQorOjEwMzIxMDAwQUY4QzAwMjQxNTIwMDAwN0EzODAwMDJEMjQwMjAwMjA3RAorOjEwMzIyMDAwNTU2MjAwMEYwMDYwMjAyMTM0MDJGRkZGNTU4MjAwMEMyMAorOjEwMzIzMDAwMDA2MDIwMjEyNDAyMDAyMDE1NjIwMDA1MDAwMDAwMDAyQgorOjEwMzI0MDAwOEM2MzAwMTQyNDAyRkZGRjEwNjIwMDA3MDAwMDAwMDBERQorOjEwMzI1MDAwMEUwMDA5MjEwMDAwMDAwMDBBMDAwQzY4MDAwMDAwMDBCOAorOjEwMzI2MDAwMEUwMDA5OEMwMTYwMjgyMTBFMDAwQzAwMDAwMDAwMDBGNworOjEwMzI3MDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDg1NworOjEwMzI4MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMjdCREZGQTBCMgorOjEwMzI5MDAwQUZCMTAwM0MwMDgyMTAyMTI0MTFGRjgwQUZCRTAwNTg2NgorOjEwMzJBMDAwQUZCNzAwNTRBRkIyMDA0MEFGQjAwMDM4QUZCRjAwNUM2MgorOjEwMzJCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ1OAorOjEwMzJDMDAwMDA1MTEwMjQ4RjQ4MDAyNDhGNDkwMDI4OEY0NzAwMjg4MAorOjEwMzJEMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMDA4MDkwMjFCNAorOjEwMzJFMDAwMjQwNjAwMDYwMDgyMTAyMTMwNDIwMDdGMDM0MjE4MjE4QworOjEwMzJGMDAwM0MwMjAwMEEwMDYyODAyMTNDMDIwMDFGMzQ0MkZGODAzMQorOjEwMzMwMDAwMDBFMjM4MjQyN0E0MDAxMDI2MDUwMEYwMDEyMkYwMjQ1MgorOjEwMzMxMDAwMDEwMkI4MjQwRTAwMDVCNUFGQTcwMDMwOEZBMjAwMTgzNworOjEwMzMyMDAwQUUwMjAwQzQ4RkEyMDAxQ0FFMDIwMEM4OEZBMjAwMjQwRgorOjEwMzMzMDAwQUUwMjAwQ0M5M0E0MDAxMDkyMDMwMEQxMjQwMkZGODBCRgorOjEwMzM0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4MzAwN0ZBNQorOjEwMzM1MDAwMzEyMjAwN0YwMDYyMTAyQTEwNDAwMDA0MDAwMzEwQzBEOAorOjEwMzM2MDAwMDEzMTEwMjYzMDQ5MDBGRjAwMDMxMEMwMDAwMzE5NDA0RQorOjEwMzM3MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDOTIwNDAwRDI1QQorOjEwMzM4MDAwMDI0MjEwMjEwMDQzMTAyMTAwNTExMDI0QUY0MjAwMjhCNgorOjEwMzM5MDAwOTNBMzAwMTAzMDYzMDA3RjAwMDMxMEMwMDAwMzE5NDBBNgorOjEwMzNBMDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjExRAorOjEwMzNCMDAwMDA0MzEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMENFMAorOjEwMzNDMDAwMDA2MjQwMjE4RkEzMDAxNDI0MDJGRkZGMTA2MjAwMzAyRQorOjEwMzNEMDAwMzA5NTAwRkY5M0EyMDAxMTk1MDMwMDE0MzA0NDAwRkZDNAorOjEwMzNFMDAwMzA2M0ZGRkYwMDY0MTgyQjEwNjAwMDBEMDAwMDAwMDAyOAorOjEwMzNGMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYxMworOjEwMzQwMDAwMDA0NDIwMjMwMDA0MjEwMDAwMDAxMDIxMDBFNDM4MjFBMgorOjEwMzQxMDAwMDBFNDIwMkIwMEMyMzAyMTBBMDAwQ0UyMDBDNDMwMjE1RAorOjEwMzQyMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkZFMgorOjEwMzQzMDAwMDA4MjIwMjMwMDA0MjEwMDAwMDAxMDIxMDA4MDE4MjFCOAorOjEwMzQ0MDAwMDBDMjMwMjMwMEU0MjAyQjAwQzQzMDIzMDBFMzM4MjNFMworOjEwMzQ1MDAwQUQwNzAwMUNBRDA2MDAxODkzQTIwMDExQTUwMjAwMTREMAorOjEwMzQ2MDAwOTdBMjAwMTJBNTAyMDAxNjhGQTIwMDE0QUQwMjAwMTA1MAorOjEwMzQ3MDAwOEZBMjAwMTRBRDAyMDAwQzkzQTIwMDExQTUwMjAwMjAzRgorOjEwMzQ4MDAwOTdBMjAwMTJBNTAyMDAyMjhGQTIwMDE0QUQwMjAwMjQxMAorOjEwMzQ5MDAwMjQwNkZGODAwMjQ2MTAyNDMyNTYwMDdGQUY0MjAwMjRFQgorOjEwMzRBMDAwMDM1NjE4MjEzQzAyMDAwQTAwNjI4MDIxOEUwMjAwNEM2MworOjEwMzRCMDAwOEZBMjAwMjAzMTI0MDA3RjAwMDQyOEMwQUUwMjAwNTBGQgorOjEwMzRDMDAwOEZBMjAwMjAwMDA0MjE0MDAwODUyODIxQUUwMjAwNzA1OAorOjEwMzREMDAwOTNBMjAwMTAwMTIwODgyMUEyMDIwMDgzOTNBMjAwMTA3MQorOjEwMzRFMDAwQTIwMjAwNzk5MjAyMDA4NTMwNDIwMDNGQTIwMjAwODVDQworOjEwMzRGMDAwM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxMDA0NTEwMjFGMQorOjEwMzUwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTQyQworOjEwMzUxMDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjFBRgorOjEwMzUyMDAwMDA0NjEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQxMAorOjEwMzUzMDAwMDI0MzE4MjEwMDY1MTgyMTAyNDIxMDIxMDA0NDEwMjE4NQorOjEwMzU0MDAwMzA0MjAwN0YzMDYzMDA3RjkzQTUwMDEwMDM0MjIwMjFBQQorOjEwMzU1MDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEM5MworOjEwMzU2MDAwMTBCMTAwOEMwMDgyNDgyMTMyMzMwMDdGMTY2MDAwMTlCMAorOjEwMzU3MDAwMjQwNEZGODAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEzRgorOjEwMzU4MDAwMDA0NDEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTRBRQorOjEwMzU5MDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjQyQworOjEwMzVBMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjE4QworOjEwMzVCMDAwMzA2MzAwN0YwMjQyMTAyMTMwNDIwMDdGMDM0MjIwMjEwRAorOjEwMzVDMDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEMyMworOjEwMzVEMDAwMDA4MjQ4MjE5MTI0MDAwRDI0MTRGRjgwMDAwMDEwMjE1NgorOjEwMzVFMDAwMDA5NDIwMjVBMTI0MDAwRDk1MDQwMDAyOTUwNTAwMTRFNworOjEwMzVGMDAwOEQwNzAwMUMzMDg0RkZGRjMwQTVGRkZGOEQwNjAwMThFQgorOjEwMzYwMDAwMDA4NTIwMjMwMDA0MjEwMDAwRTQzODIxMDBDMjMwMjE3RAorOjEwMzYxMDAwMDBFNDIwMkIwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThDQgorOjEwMzYyMDAwOTUwMjAwMDJBNTAyMDAxNEE1MDAwMDE2OEQwMjAwMDhGNAorOjEwMzYzMDAwQUQwMjAwMTA4RDAyMDAwOEFEMDIwMDBDOTUwMjAwMDJFMAorOjEwMzY0MDAwQTUwMjAwMjBBNTAwMDAyMjhEMDIwMDA4QUQwMjAwMjQ4MgorOjEwMzY1MDAwOTEyMjAwMEQzMDQyMDA0MDEwNDAwMDQyMjYyMjAwMDExRAorOjEwMzY2MDAwM0MwMjA4MDA4QzQyMDBFMEEzQjMwMDI4M0MxMDAwMEE5MgorOjEwMzY3MDAwMDI0MjEwMjEwMDU0MTAyNEFGNDIwMDI0M0MwMjA4MDBGMgorOjEwMzY4MDAwOEM0MjAwRTBBMzgwMDAyQzI3QTQwMDJDMDI0MjEwMjFEMQorOjEwMzY5MDAwMzA0MjAwN0YwMzQyMTgyMTAwNzAxODIxOEM2MjAwRDg0QworOjEwMzZBMDAwOEQyNjAwMDQyN0E1MDAyOEFGQTkwMDJDMDA0NjEwMjE3NAorOjEwMzZCMDAwQUM2MjAwRDgwRTAwMEE3OUFGODMwMDI4OTNBMzAwMjhEQgorOjEwMzZDMDAwOEY4MjAwMjgwRTAwMDZCRUEwNDMwMEQxMEUwMDBDMDAyMQorOjEwMzZEMDAwMDAwMDAwMDAwMjU0MTAyNEFGNDIwMDI0M0MwMjA4MDAwNQorOjEwMzZFMDAwOEM0MjAwREMwMDEzMjk0MDAwMTMyMEMwMDBBNDIwMjFEQworOjEwMzZGMDAwMDI0MjEwMjEwMDQ0MTAyMTAwNTQxMDI0QUY0MjAwMkMzQgorOjEwMzcwMDAwM0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwOEM2MzAwRENBRgorOjEwMzcxMDAwMDM1NjMwMjEwMjQyMTAyMTAwNDUxMDIxMDA1NDEwMjQ4QworOjEwMzcyMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwQQorOjEwMzczMDAwMDA2NDE4MjEwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YxMAorOjEwMzc0MDAwMzA2MzAwN0YwMzQyMjAyMTAzNDMxODIxM0MwMjAwMEUxNgorOjEwMzc1MDAwMDA2MjQwMjEzQzAyMDAwQzAwRDA4MDIxMDA4MjQ4MjEwMAorOjEwMzc2MDAwMjYyMjAwMDEzMDQzMDA3RjE0NzUwMDA1MzA0NDAwRkYxRAorOjEwMzc3MDAwMjQwM0ZGODAwMjIzMTAyNDAwNDMxMDI2MzA0NDAwRkY1RQorOjEwMzc4MDAwOTNBMjAwMTAwMDgwODgyMTI1MDgwMDI4MTQ0NEZGNzZBOQorOjEwMzc5MDAwMjUyOTAwMjA5M0E0MDAxMDhGQTMwMDE0MjQwMkZGRkYwQQorOjEwMzdBMDAwMTA2MjAwMEEzMDg5MDBGRjI0ODIwMDAxMjQ4MzAwMDE5NgorOjEwMzdCMDAwMzA0MjAwN0YxNDU1MDAwNTMwNjkwMEZGMjQwM0ZGODA2QworOjEwMzdDMDAwMDA4MzEwMjQwMDQzMTAyNjMwNDkwMEZGOTIwMjAwNzg0NQorOjEwMzdEMDAwMzA1MzAwRkYxMTMzMDAzMjAxMjA4ODIxM0MwMjA4MDBFMQorOjEwMzdFMDAwOEM0MjAwREMzMjI1MDA3RjAwMDUyMEMwMDAwNTI5NDAwNgorOjEwMzdGMDAwMDBBNDIwMjEwMjQyMTAyMTI0MDZGRjgwMDA0NDEwMjE1MQorOjEwMzgwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDMwODAwOEM2MzAwREMwRgorOjEwMzgxMDAwM0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxMDI0MjEwMjFCRAorOjEwMzgyMDAwMDA0NTEwMjEwMDY0MTgyMTAwNDYxMDI0MzA2MzAwN0ZGOQorOjEwMzgzMDAwQUY0MjAwMjgwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjFFMQorOjEwMzg0MDAwM0MwMjA4MDA4QzQyMDBFNDhEMDYwMDBDMDEwMDIwMjE5RgorOjEwMzg1MDAwMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGMDM0MjE4MjEwRQorOjEwMzg2MDAwM0MwMjAwMEMwMDYyNDgyMTEwQzAwMDBEMDEyMDI4MjFGQworOjEwMzg3MDAwMEUwMDA2RTIwMDAwMDAwMDI0MDJGRjgwMDIyMjE4MjQ0RAorOjEwMzg4MDAwMjYyNDAwMDEwMDYyMjgyNjMwODIwMDdGMTQ1NTAwMDJBMQorOjEwMzg5MDAwMzA4MzAwRkYzMEEzMDBGRjE0NzNGRkQwMDA2MDg4MjE0NQorOjEwMzhBMDAwOEUwMzAwNzQzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjQ0NQorOjEwMzhCMDAwQUUwMzAwNzQwRTAwMDcwMzAyNDAyMDIxQUY1NzAwMjQxRQorOjEwMzhDMDAwOEZBMjAwMzBBRjVFMDAyODhGQkYwMDVDOEZCRTAwNTgxMworOjEwMzhEMDAwOEZCNzAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg5RQorOjEwMzhFMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhERQorOjEwMzhGMDAwMjdCRDAwNjAwM0UwMDAwOEFGNDIwMDJDMjdCREZGRDhDMQorOjEwMzkwMDAwQUZCMTAwMUNBRkJGMDAyMEFGQjAwMDE4Mjc1MTAxODgzNQorOjEwMzkxMDAwOTIyMjAwMDMyNDA4RkY4MDNDMDMwMDBBMzA0NzAwN0YwNgorOjEwMzkyMDAwQTNBNzAwMTA4RjQ2MDE4MDNDMDIwODAwOEM0MjAwRTBGMworOjEwMzkzMDAwQUY4NjAwMzQwMEMyMjgyMTAwQTgxMDI0QUY0MjAwMjQyMgorOjEwMzk0MDAwOTIyNDAwMDAzMEEyMDA3RjAzNDIxMDIxMDA0MzEwMjE4NgorOjEwMzk1MDAwQUY4MjAwMjgzMDg0MDA3RjI0MDIwMDAyMTQ4MjAwMjVGOAorOjEwMzk2MDAwMDAwNzE5NDAzQzAyMDgwMDhDNDIwMEU0MDBDMjEwMjEwQworOjEwMzk3MDAwMDA0MzI4MjEzMEEyMDA3RjAzNDIxODIxMDBBODEwMjQxMAorOjEwMzk4MDAwQUY0MjAwMjgzQzAyMDAwQzAwNjIxODIxOTA2MjAwMEQzQQorOjEwMzk5MDAwQUZBMzAwMTQwMDQ4MTAyNUEwNjIwMDBEOEZBMzAwMTRFRgorOjEwMzlBMDAwOTA2MjAwMEQzMDQyMDA0MDUwNDAwMDZBOEZCRjAwMjBGRQorOjEwMzlCMDAwOEY4NjAwMjhBMzgwMDAyQzI3QTQwMDE0OENDMjAwRDg3NgorOjEwMzlDMDAwOEM2MzAwMDQyN0E1MDAxMDAwNDMxMDIxMEUwMDBBNzkyMworOjEwMzlEMDAwQUNDMjAwRDg5M0EzMDAxMDhGODIwMDI4MEUwMDA2QkU1MAorOjEwMzlFMDAwQTA0MzAwRDEwRTAwMEMwMDAwMDAwMDAwMEEwMDBFQTM0RQorOjEwMzlGMDAwOEZCRjAwMjAwRTAwMDZDNzAwQzAyMDIxMEUwMDA2RDU5NAorOjEwM0EwMDAwMDAwMDAwMDAzQzAyMDAwODAzNDI4MDIxOTIyMzAwMDFENAorOjEwM0ExMDAwOTIwMjAwN0IxNDQzMDA0RjhGQkYwMDIwOTIyMjAwMDBDRgorOjEwM0EyMDAwMzA0NDAwN0YyNDAyMDAwNDEwODIwMDE3Mjg4MjAwMDUyMQorOjEwM0EzMDAwMTA0MDAwMDYyNDAyMDAwNTI0MDIwMDAzMTA4MjAwMDc0MworOjEwM0E0MDAwOEZCMTAwMUMwQTAwMEVBNDAwMDAwMDAwMTA4MjAwMTJCQQorOjEwM0E1MDAwOEZCRjAwMjAwQTAwMEVBNDhGQjEwMDFDOTIwNTAwODNDNgorOjEwM0E2MDAwOTIwNjAwNzg4RTA3MDA3NDhGODQwMDM0MzBBNTAwRkYyMgorOjEwM0E3MDAwMDAwNzNFMDIzMEM2MDBGRjBFMDAwNzBCMzBFNzAwN0Y1NAorOjEwM0E4MDAwMEEwMDBFQTM4RkJGMDAyMDBFMDAwQzZGOEY4NDAwMzQzRAorOjEwM0E5MDAwMEEwMDBFQTM4RkJGMDAyMDI0MDIwQzgwQUY0MjAwMjQzNgorOjEwM0FBMDAwOTIwMjAwM0UzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDAyMgorOjEwM0FCMDAwOTIwMjAwM0UwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDZCNgorOjEwM0FDMDAwMDAwMDAwMDA4Rjg0MDAzNDBFMDAwNjM4MjQwNTAwOTNBNworOjEwM0FEMDAwMEEwMDBFQTM4RkJGMDAyMDkyMDIwMDNGMjQwMzAwMThBQgorOjEwM0FFMDAwMzA0MjAwRkYxNDQzMDAwQzhGODQwMDM0MjQwNTAwMzk1OQorOjEwM0FGMDAwMEUwMDA1RDAwMDAwMzAyMTBFMDAwMzAyOEY4NDAwMzQzOAorOjEwM0IwMDAwMjQwMjAwMTJBMjAyMDAzRjBFMDAwMzBCOEY4NDAwMzQzNworOjEwM0IxMDAwMEEwMDBFQTM4RkJGMDAyMDI0MDUwMDM2MEUwMDA1RDAzQQorOjEwM0IyMDAwMDAwMDMwMjEwQTAwMEVBMzhGQkYwMDIwMEUwMDAzMDIwOAorOjEwM0IzMDAwOEY4NDAwMzQ5MjAyMDAwNTM0NDIwMDIwQTIwMjAwMDU2NgorOjEwM0I0MDAwMEUwMDAzMEI4Rjg0MDAzNDBFMDAxMDU4OEY4NDAwMzQ1NQorOjEwM0I1MDAwOEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MjQwMjBDODA5MgorOjEwM0I2MDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMDI0MjdCREZGRTg3RQorOjEwM0I3MDAwQUZCMDAwMTBBRkJGMDAxNDI3NDMwMTAwOTQ2MjAwMDhFQgorOjEwM0I4MDAwMDAwMjE0MDAwMDAyMTQwMzA0NDEwMDAyMDAwMDgwMjExRQorOjEwM0I5MDAwMjQxMDAwMDE5NDYyMDAwODMwNDIwMDgwMTA0MDAwMUE5NgorOjEwM0JBMDAwMDIwMDEwMjE5NDYyMDAwODMwNDIyMDAwMTA0MDAwMTZFQworOjEwM0JCMDAwMDIwMDEwMjE4QzYzMDAxODNDMDIxQzJEMzQ0MjE5RURDOAorOjEwM0JDMDAwMjQwNjAwMDYxMDYyMDAwRjNDMDc2MDIxM0MwMjA4MDAzQQorOjEwM0JEMDAwOEM0MjAwRDQxMDQwMDAwNzhGODIwMDI4OEY4MzAwMjg3OQorOjEwM0JFMDAwOTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwQTA2MjAwNjJFNgorOjEwM0JGMDAwOEY4MjAwMjg4Rjg0MDAzNDk0NDUwMEQ0MEUwMDBCODlGNgorOjEwM0MwMDAwMzBBNUZGRkYwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTBGRAorOjEwM0MxMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwQUZCMTAwMTQ4NgorOjEwM0MyMDAwQUZCMDAwMTBBMzgwMDAyQ0FGQkYwMDE4OEY0NTAxMDA3QgorOjEwM0MzMDAwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwQUY4NTAwMzQ2MQorOjEwM0M0MDAwMDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQ1RgorOjEwM0M1MDAwM0MwMjAwMEEwMDgyMjAyMUFGNDMwMDI0Mjc1MDAxMDBDQgorOjEwM0M2MDAwOEUwMjAwMTQ4QzgzMDBEQ0FGODQwMDI4MDA0MzEwMjNGNAorOjEwM0M3MDAwMTg0MDAwMDQwMDAwODgyMThFMDIwMDE0MEUwMDBCMUM2NgorOjEwM0M4MDAwQUM4MjAwREM5MjAyMDAwQjI0MDMwMDAyMzA0MjAwRkZGMQorOjEwM0M5MDAwMTQ0MzAwMkYwMDAwMDAwMDk2MDIwMDA4MzA0MzAwRkY4QworOjEwM0NBMDAwMjQwMjAwODIxNDYyMDAwNTI0MDIwMDg0MEUwMDA5RDY1QQorOjEwM0NCMDAwMDAwMDAwMDAwQTAwMEYyRjAwMDAwMDAwMTQ2MjAwMDkzRAorOjEwM0NDMDAwMjQwMjAwODE4RjgyMDAyODhGODQwMDM0M0MwNzYwMjEwOQorOjEwM0NEMDAwOTQ0NTAwRDQ5MjA2MDAwNTMwQTVGRkZGMEEwMDBGMUU5MAorOjEwM0NFMDAwMzBDNjAwRkYxNDYyMDAyNzAwMDAwMDAwOTIwMjAwMEFBNAorOjEwM0NGMDAwMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA0MzA2MjAwNDA3QQorOjEwM0QwMDAwOEY4NDAwMzQwQTAwMEYxQTI0MDYwMDQwMTA0MDAwMDQ3QgorOjEwM0QxMDAwMDAwMzE2MDA4Rjg0MDAzNDBBMDAwRjFBMjQwNjAwNDFBNQorOjEwM0QyMDAwMDAwMjE2MDMwNDQxMDAxNzhGODQwMDM0MjQwNjAwNDI2OQorOjEwM0QzMDAwOEY4MjAwMjgzQzA3NjAxOTk0NDUwMEQ0MzBBNUZGRkYwRQorOjEwM0Q0MDAwMEUwMDBCODkwMDAwMDAwMDBBMDAwRjJGMDAwMDAwMDA4OQorOjEwM0Q1MDAwOTIwMjAwMEIyNDAzMDAxNjMwNDIwMEZGMTA0MzAwMDZCRAorOjEwM0Q2MDAwMDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE3MzA0MjAwRkYwNQorOjEwM0Q3MDAwMTQ0MzAwMDQwMDAwMDAwMDBFMDAwRUE5MDAwMDAwMDAyMworOjEwM0Q4MDAwMDA0MDg4MjEwRTAwMEMwMDAwMDAwMDAwOTIwMjAwMEE5MgorOjEwM0Q5MDAwMzA0MjAwMDgxMDQwMDAwNjI0MDIwQzgwOEY4NTAwMjg2NQorOjEwM0RBMDAwM0MwNDAwMDgwRTAwMTI4NjAzNDQyMDIxMjQwMjBDODBFQgorOjEwM0RCMDAwQUY0MjAwMjQ4RkJGMDAxODAyMjAxMDIxOEZCMDAwMTBFNgorOjEwM0RDMDAwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwMjdCREZGRThFNQorOjEwM0REMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDI0M0MwMzA4MDBBOAorOjEwM0RFMDAwOEM2MzAwRTA4RjQ1MDEwMDI0MDJGRjgwMDBBMzE4MjFBRQorOjEwM0RGMDAwMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0M0MwMjAwMEE0MgorOjEwM0UwMDAwMDA4MjIwMjFBRjg1MDAzNEFGNDMwMDI0OTA4MjAwNjJGRAorOjEwM0UxMDAwQUY4NDAwMjgzMDQyMDAwRjM0NDIwMDUwQTA4MjAwNjI3QworOjEwM0UyMDAwM0MwMjAwMUYzNDQyRkY4MDBFMDAwNkJFMDIwMjgwMjRDNgorOjEwM0UzMDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMworOjEwM0U0MDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMURENQorOjEwM0U1MDAwMjc0NTAxMDA5MEEzMDAwOTNDMDIwMDA4MDM0MjIwMjFFRAorOjEwM0U2MDAwMjQwMjAwMTg1NDYyMDAwMzNDMDIwMDA4MEEwMDBGNzA4QworOjEwM0U3MDAwMjQwMjAwMDgwMzQyMjAyMTI0MDIwMDE2MTQ2MjAwMDVENworOjEwM0U4MDAwMjQwMjAwMTcyNDAyMDAxMkEwODIwMDNGMEEwMDBGN0FDOQorOjEwM0U5MDAwOTRBNzAwMDg1NDYyMDAwNjk0QTcwMDA4OTM2MjAwMDVFNgorOjEwM0VBMDAwMjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1OTRBNzAwMDgyQQorOjEwM0VCMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2MEEwMDBCNjRDOQorOjEwM0VDMDAwMDAwNzNDMDAwM0UwMDAwODAwMDAwMDAwMjc0NDAxMDA1OAorOjEwM0VEMDAwOTQ4MjAwMDgzMDQ1MDBGRjM4QTMwMDgyMzhBMjAwODQ5NQorOjEwM0VFMDAwMkM2MzAwMDEyQzQyMDAwMTAwNjIxODI1MTA2MDAwMDZCRQorOjEwM0VGMDAwMjQwMjAwODM5MzgyMDAyRDEwNDAwMDBEMDAwMDAwMDA3QQorOjEwM0YwMDAwMEEwMDBDMzMwMDAwMDAwMDE0QTIwMDA1MjRBMkZGODA2OAorOjEwM0YxMDAwOEY0MzAxMDQzQzAyNjAyMDAzRTAwMDA4QUM0MzAwMTQxRQorOjEwM0YyMDAwMzA0MjAwRkYyQzQyMDAwMjEwNDAwMDAzMjQwMjAwMjIxNQorOjEwM0YzMDAwMEEwMDBFRDQwMDAwMDAwMDE0QTIwMDAzMDAwMDAwMDBEQworOjEwM0Y0MDAwMEEwMDBGNDEwMDAwMDAwMDBBMDAwRjVGMDAwMDAwMDA5RgorOjEwM0Y1MDAwOTM2MzAwN0U5MzYyMDA3QTE0NDMwMDA5MDAwMDIwMjFERAorOjEwM0Y2MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQxOQorOjEwM0Y3MDAwMjQwNDAwMDE5MzYyMDA3RTI0NDIwMDAxQTM2MjAwN0VCQgorOjEwM0Y4MDAwMDNFMDAwMDgwMDgwMTAyMThGNDIwMUY4MDQ0MEZGRkU4QQorOjEwM0Y5MDAwMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDA0RAorOjEwM0ZBMDAwMDNFMDAwMDhBRjQyMDFGODI3QkRGRkU4QUZCRjAwMTBGMworOjEwM0ZCMDAwOTM2MjAwM0YyNDAzMDAwQTMwNDIwMEZGMTQ0MzAwNDY4RQorOjEwM0ZDMDAwMDAwMDAwMDA4RjYzMDA1NDhGNjIwMDRDMTA2MjAwN0Q3RgorOjEwM0ZEMDAwMDM2MDMwMjE5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkY1MAorOjEwM0ZFMDAwMTQ0MzAwMkYwMDAwMDAwMDhGNDQwMTQwM0MwMjA4MDBGMQorOjEwM0ZGMDAwOEM0MjAwRTAyNDAzRkY4MDAwODIxMDIxMDA0MzEwMjQ0MworOjEwNDAwMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOEY2NTAwNTQ1RgorOjEwNDAxMDAwM0MwMzAwMEEwMDgyMjAyMTMwODQwMDdGMDM0NDEwMjFFOQorOjEwNDAyMDAwMDA0MzEwMjFBQzQ1MDEwODk3NjIwMDNDOEY2MzAwNENBRgorOjEwNDAzMDAwMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxQUY2MzAwNUNCNQorOjEwNDA0MDAwOEY2MzAwNTQ4RjY0MDA0Qzk3NjIwMDNDMDA2NDE4MjMxNworOjEwNDA1MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFDMworOjEwNDA2MDAwMTA0MDAwMDYwMDAwMDAwMDhGNjIwMDU0OEY2MzAwNEM3NworOjEwNDA3MDAwMDA0MzEwMjMwQTAwMEZGMDAwMDIxMDQzOTc2MjAwM0MzNworOjEwNDA4MDAwMzA0MkZGRkYwMDAyMTA0MEFDQzIwMDY0MjQwMjAwMDE3NQorOjEwNDA5MDAwQTBDMDAwN0NBMEMyMDA4NDI0MDIwQzgwQUY0MjAwMjQ5NworOjEwNDBBMDAwMEUwMDBGQTI4RjQ0MDE0MDEwNDAwMDQ3OEZCRjAwMTA0OAorOjEwNDBCMDAwOEY0MzAxNDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJCQQorOjEwNDBDMDAwQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg1QgorOjEwNDBEMDAwMEEwMDEwNDA4RkJGMDAxMDkzNjIwMDNGMjQwMzAwMTBCRAorOjEwNDBFMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwOEY0NDAxNDBGMAorOjEwNDBGMDAwMEEwMDEwMkMwMDAwMjgyMTkzNjIwMDNGMjQwMzAwMTZDMAorOjEwNDEwMDAwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMDE0QTM2MjAwM0Y2NQorOjEwNDExMDAwMEEwMDEwM0EwMDAwMDAwMDhGNjIwMDRDOEY2MzAwNTBDQworOjEwNDEyMDAwMDA0MzEwMjMwNDQxMDAyODhGQkYwMDEwOTM2MjAwODFEOAorOjEwNDEzMDAwMjQ0MjAwMDFBMzYyMDA4MTkzNjIwMDgxMkM0MjAwMDRBQQorOjEwNDE0MDAwMTQ0MDAwMTAwMDAwMDAwMDkzNjIwMDNGMjQwMzAwMDRBQworOjEwNDE1MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwOEY0NDAxNDA3RAorOjEwNDE2MDAwOEZCRjAwMTAyNDA1MDA5MzBBMDAwNjM4MjdCRDAwMThGMQorOjEwNDE3MDAwOEY0NDAxNDAyNDA1MDA5MzhGQkYwMDEwMEEwMDA2QTc1QQorOjEwNDE4MDAwMjdCRDAwMTg4RjQ0MDE0MDBFMDAwMzAyMDAwMDAwMDAwQworOjEwNDE5MDAwOEY2MjAwNTQyNDQyRkZGRkFGNjIwMDU0OEY2MjAwNTBEMAorOjEwNDFBMDAwMjQ0MkZGRkZBRjYyMDA1MDBFMDAwMzBCOEY0NDAxNDAxQQorOjEwNDFCMDAwOEY0NDAxNDA4RkJGMDAxMDI0MDUwMDA0MEEwMDAzMTA0MworOjEwNDFDMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRQorOjEwNDFEMDAwOEY0MjAxODg5MzYzMDA3RTAwMDIxNDAyMzA0NDAwRkY4NgorOjEwNDFFMDAwMzA2MzAwRkYxNDY0MDAwRDAwMDAwMDAwOTM2MjAwODA0MworOjEwNDFGMDAwMzA0MjAwRkYxMDQ0MDAwOTAwMDAwMDAwQTM2NDAwODA2QQorOjEwNDIwMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQ3NgorOjEwNDIxMDAwMDAwMDAwMDAwQTAwMDc2RjhGNDQwMTgwQTM2NDAwODA0MworOjEwNDIyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCMDAwMTA2OQorOjEwNDIzMDAwQUZCRjAwMTQ5MzYyMDAwNTI0MDMwMDMwMzA0MjAwMzAwOQorOjEwNDI0MDAwMTQ0MzAwODkwMDgwODAyMTNDMDIwODAwOEM0MjAwMjAzOQorOjEwNDI1MDAwMTA0MDAwODAwMjAwMjAyMTBFMDAwNTJCMDAwMDAwMDAwRAorOjEwNDI2MDAwOEY4NTAwMjBBQ0IwMDAwMDkzNjIwMDNFOTM2MzAwM0Y1NgorOjEwNDI3MDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjVBRgorOjEwNDI4MDAwQUNBMjAwMDQ5MzYyMDA4MjAwMDIxNjAwMDAwMjE2MDMzMgorOjEwNDI5MDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDg1NgorOjEwNDJBMDAwMEEwMDEwN0UwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDA5MQorOjEwNDJCMDAwMTQ0MDAwMDMwMDAwMTgyMTkzNjIwMDgxMzA0MzAwRkY4NgorOjEwNDJDMDAwOTM2MjAwODIwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDBDRgorOjEwNDJEMDAwMDA2MjE4MjVBQ0EzMDAwODhGNjIwMDQwQUNBMjAwMEM1RAorOjEwNDJFMDAwOEY2MjAwNDhBQ0EyMDAxMDhGNjIwMDRDQUNBMjAwMTQ5OAorOjEwNDJGMDAwOEY2MjAwNTA4RjYzMDA0QzAwNDMxMDIzMDQ0MTAwMDM4MQorOjEwNDMwMDAwMDAwMDAwMDAwQTAwMTA5MjhGNjIwMDRDOEY2MjAwNTA4MworOjEwNDMxMDAwQUNBMjAwMTgzQzAyMDgwMDk0NDI0REJFM0MwM0MwMEIwNgorOjEwNDMyMDAwMDAwMDIwMjEwMDQzMTAyNTBFMDAwNTUwQUNBMjAwMUMwNworOjEwNDMzMDAwOEY2MjAwNTQ4Rjg0MDAyMEFDODIwMDAwOEY2MjAwNTg4RQorOjEwNDM0MDAwQUM4MjAwMDQ4RjYyMDA1Q0FDODIwMDA4OEY2MjAwNjA2NworOjEwNDM1MDAwOEY0MzAwNzQwMDQzMTAyMUFDODIwMDBDOEY2MjAwNjQxNAorOjEwNDM2MDAwQUM4MjAwMTA5NzYzMDA2ODk3NjIwMDZBMDAwMzFDMDAyQgorOjEwNDM3MDAwMzA0MkZGRkYwMDYyMTgyNUFDODMwMDE0OTM2MjAwODI3NAorOjEwNDM4MDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDAzMDAwMDAwMDBCQgorOjEwNDM5MDAwMEEwMDEwQzZBQzgwMDAxODhGNjMwMDBDMjQwMjAwMDFENAorOjEwNDNBMDAwMTA2MjAwMEUyNDAyRkZGRjkzNjIwMDNFMzA0MjAwNDA4NAorOjEwNDNCMDAwMTQ0MDAwMEEyNDAyRkZGRjhGNjMwMDBDOEY0MjAwNzQzOAorOjEwNDNDMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDIxRQorOjEwNDNEMDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMTg0RAorOjEwNDNFMDAwM0MwMjA4MDA5NDQyNERCRTNDMDNDMDBDMDAwMDIwMjE1QQorOjEwNDNGMDAwMDA0MzEwMjU4RjgzMDAyMDBFMDAwNTUwQUM2MjAwMUM4NgorOjEwNDQwMDAwOEY2MjAwMTg4RjgzMDAyMDNDMDUwODAwOTRBNTREQkVFNAorOjEwNDQxMDAwMjQwNDAwMDFBQzYyMDAwMEFDNjAwMDA0OEY2NjAwNkNGNAorOjEwNDQyMDAwM0MwMjQwMEQwMEEyMjgyNUFDNjYwMDA4OEY2MjAwREMyQgorOjEwNDQzMDAwQUM2MjAwMENBQzYwMDAxMDkzNjIwMDA1MDAwMjE2MDAzNAorOjEwNDQ0MDAwQUM2MjAwMTRBQzYwMDAxODBFMDAwNTUwQUM2NTAwMUM5NgorOjEwNDQ1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQTM2MDAwMDU2MAorOjEwNDQ2MDAwMEEwMDA0QjkyN0JEMDAxODhGQkYwMDE0OEZCMDAwMTBEOAorOjEwNDQ3MDAwMDNFMDAwMDgyN0JEMDAxODk3NDIwMDdDMzBDNjAwRkYwQgorOjEwNDQ4MDAwQTA4NjAwODQzMDQ3RkZGRjI0MDIwMDA1MTRDMjAwMEIwMQorOjEwNDQ5MDAwMjRFMzQ2NTA5MEEyMDExMjJDNDIwMDA3MTA0MDAwMDc2RQorOjEwNDRBMDAwMjRFMzBBMDA5MEEzMDExMjI0MDIwMDE0MDA2MjEwMDQwNQorOjEwNDRCMDAwMDBFMjEwMjEwQTAwMTBGRTMwNDdGRkZGMzA2N0ZGRkZDNworOjEwNDRDMDAwMDNFMDAwMDhBNDg3MDAxNEFDODcwMDRDOENBMjAxMDgwQworOjEwNDREMDAwMDA4MDQwMjEwMEEwNDgyMTAwRTIxMDIzMzBDNjAwRkZFOAorOjEwNDRFMDAwMTg0MDAwMDM5M0FBMDAxMzI0RTJGRkZDQUNBMjAxMDhDOQorOjEwNDRGMDAwMzBDMjAwMDExMDQwMDAwODAwMDAwMDAwOEQwMjAwNTA5MgorOjEwNDUwMDAwMDBFMjEwMjMwNDQxMDAxMzI0MDYwMDA1OEQwMjAwNTQyQworOjEwNDUxMDAwMTBFMjAwMTAwMDAwMDAwMDhEMDIwMDU0MTRFMjAwMUFBNgorOjEwNDUyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAwRAorOjEwNDUzMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODNEOAorOjEwNDU0MDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMDEyMDI4MjEzQgorOjEwNDU1MDAwMjQwNjAwMDQwQTAwMTBFQzAwMDAwMDAwQTEwMDAwODQwMgorOjEwNDU2MDAwMTE0MDAwMDlBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjg5OQorOjEwNDU3MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQ3NQorOjEwNDU4MDAwM0MwMjEwMDBBRjQyMDFGODAzRTAwMDA4MDAwMDAwMDAwOAorOjEwNDU5MDAwMjdCREZGRTg4RkE5MDAyOEFGQkYwMDEwMDA4MDQwMjE5MQorOjEwNDVBMDAwMDBFOTE4MjMxODYwMDA3MzMwQzYwMEZGQTA4MDAwN0M2QgorOjEwNDVCMDAwQTA4MDAwODE4Q0EyMDEwODAwRTIxMDIzMDQ0MDAwNEQ3RAorOjEwNDVDMDAwMDAwMDAwMDA4QzgyMDA1MDk0ODMwMDNDOEM4NDAwNjRDNgorOjEwNDVEMDAwMDA0NzQ4MjMzMDYzRkZGRjAxMjMxODIxMDA4MzIwMkI2RAorOjEwNDVFMDAwMTA4MDAwMDQwMDAwMDAwMDhEMDIwMDY0MEEwMDExNEZEQQorOjEwNDVGMDAwMDBFMjEwMjE5NTAyMDAzQzMwNDJGRkZGMDEyMjEwMjExMQorOjEwNDYwMDAwMDBFMjEwMjFBRDAyMDA1Qzk1MDIwMDNDOEQwMzAwNUNDRAorOjEwNDYxMDAwMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxMDA0MzEwMkI0NworOjEwNDYyMDAwMTA0MDAwMDMwMDAwMDAwMDBBMDAxMTVFOEQwMjAwNUNEMworOjEwNDYzMDAwOTUwMjAwM0MzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjFEMgorOjEwNDY0MDAwQUQwMjAwNUNBMTAwMDA4NEFEMDcwMDRDOENBMjAxMDgwMworOjEwNDY1MDAwMDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUNBMjAxMDg5MworOjEwNDY2MDAwMzBDMjAwMDExMDQwMDAwQTAwMDAwMDAwOEQwMjAwNTAxRQorOjEwNDY3MDAwMDBFMjEwMjMwNDQxMDAwNDAxMDAyMDIxOEQwMjAwNTRCNworOjEwNDY4MDAwMTRFMjAwMDMwMDAwMDAwMDBBMDAxMTgwMjQwNjAwMDU2NworOjEwNDY5MDAwOEQwMjAwNTQxNEUyMDA0NzhGQkYwMDEwM0MwMjA4MDA1NgorOjEwNDZBMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE1MQorOjEwNDZCMDAwOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDE1NAorOjEwNDZDMDAwMDEwMDIwMjEyNDA2MDAwNDhGQkYwMDEwMEEwMDEwRUMxNgorOjEwNDZEMDAwMjdCRDAwMThBMTAwMDA4NEE1MDIwMDE0OEY0MzAxMDAyQgorOjEwNDZFMDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDExQTVENworOjEwNDZGMDAwMDAwMDAwMDA4QzgyMDA1QzAwNDkxMDIzMDA0MzEwMkI1NgorOjEwNDcwMDAwNTQ0MDAwMDFBQzg3MDA1Qzk1MDIwMDNDMzA0MkZGRkY0MgorOjEwNDcxMDAwMDA2MjEwMkIxNDQwMDAwNzI0MDIwMDAyOTUwMjAwM0NBNgorOjEwNDcyMDAwOEQwMzAwNUMzMDQyRkZGRjAwNjIxODIxQUQwMzAwNUM4NgorOjEwNDczMDAwMjQwMjAwMDJBRDA3MDA0Q0ExMDIwMDg0MEUwMDBGQTI2QgorOjEwNDc0MDAwOEY0NDAxMDAxMDQwMDAxQjhGQkYwMDEwOEY0MzAxMDBGOQorOjEwNDc1MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzA3MworOjEwNDc2MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4MEEwMDExQkI5MQorOjEwNDc3MDAwOEZCRjAwMTAzMEMyMDAxMDEwNDAwMDBFOEZCRjAwMTAxRAorOjEwNDc4MDAwOEM4MzAwNUM5NDgyMDAzQzAwNjkxODIzMzA0MkZGRkY1OAorOjEwNDc5MDAwMDA2MjE4MjEzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkJDRQorOjEwNDdBMDAwNTQ0MDAwMDEwMDgwMTgyMTAxMjMxMDIxQUQwMjAwNUM1QgorOjEwNDdCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThFOQorOjEwNDdDMDAwOEZBQTAwMjhBRkJGMDAxMDAwODA0MDIxMDBFQTQ4MjNENAorOjEwNDdEMDAwMTkyMDAwMjEzMEM2MDBGRjhDODMwMDVDOEM4MjAwNjRBRAorOjEwNDdFMDAwMDA2QTE4MjMwMDQzMTAyQjUwNDAwMDEwMDA2OTE4MjE2NAorOjEwNDdGMDAwOTRBMjAxMTAwMTIyMTAyMUE0QTIwMTEwOTRBMjAxMTA4MAorOjEwNDgwMDAwMzA0MkZGRkYwMDQzMTAyQjE0NDAwMDBBM0MwMjNGRkZFMAorOjEwNDgxMDAwOTRBMjAxMTAwMDQzMTAyM0E0QTIwMTEwOTQ4MjAwM0MzMgorOjEwNDgyMDAwMzA0MkZGRkYwQTAwMTFEQTAwNjIxODIxQTRBMDAxMTAzMworOjEwNDgzMDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEzMworOjEwNDg0MDAwMDA4MDE4MjEwMDY3MTAyMUFEMDIwMDVDQTEwMDAwN0NFRgorOjEwNDg1MDAwMEEwMDEyMjJBMTAwMDA4MTMwQzIwMDEwMTA0MDAwM0M2QQorOjEwNDg2MDAwMDAwMDAwMDA4QzgyMDA1MDAwNEExMDIzMTg0MDAwMzhERAorOjEwNDg3MDAwMDAwMDAwMDA5MDgyMDA3QzI0NDIwMDAxQTA4MjAwN0NBNQorOjEwNDg4MDAwOTA4MjAwN0MzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkZDRgorOjEwNDg5MDAwMDA0MzEwMkIxNDQwMDA1QzhGQkYwMDEwOENBMjAxMDg1NQorOjEwNDhBMDAwMDBFMjEwMjMxODQwMDA1ODAwMDAwMDAwOEM4MzAwNTRFMAorOjEwNDhCMDAwOTQ4MjAwM0MwMDZBMTgyMzMwNDJGRkZGMDAwMzE4NDMzMworOjEwNDhDMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBDNAorOjEwNDhEMDAwOEM4MjAwNTQwMDRBMTAyMzBBMDAxMjA5MDAwMjEwNDM3RgorOjEwNDhFMDAwOTQ4MjAwM0MzMDQyRkZGRjAwMDIxMDQwQUQwMjAwNjRBMQorOjEwNDhGMDAwOTUwMjAwM0M4RDA0MDA2NDk1MDMwMDNDMzA0MkZGRkZBQworOjEwNDkwMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE0NQorOjEwNDkxMDAwMDE0MzEwMjFBRDAyMDA1QzhEMDIwMDU0QUNBMjAxMDhERAorOjEwNDkyMDAwMjQwMjAwMDJBMTAyMDA4NDBFMDAwRkEyOEY0NDAxMDBBNQorOjEwNDkzMDAwMTA0MDAwMzU4RkJGMDAxMDhGNDMwMTAwOEY0MjAxRjhGNworOjEwNDk0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjRCMDAwMDAwMDA5NworOjEwNDk1MDAwQUQwNzAwNEM4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDJCMQorOjEwNDk2MDAwMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMEFBMgorOjEwNDk3MDAwMDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzMDQ0MTAwMDRGQQorOjEwNDk4MDAwMDEwMDIwMjE4RDAyMDA1NDE0RTIwMDAzMDAwMDAwMDAwOQorOjEwNDk5MDAwMEEwMDEyNDIyNDA2MDAwNThEMDIwMDU0MTRFMjAwMUE5NworOjEwNDlBMDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAyQgorOjEwNDlCMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODM1NAorOjEwNDlDMDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMjQwNjAwMDRGMworOjEwNDlEMDAwOEZCRjAwMTAwQTAwMTBFQzI3QkQwMDE4QTEwMDAwODQ1MgorOjEwNDlFMDAwQTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkUyRQorOjEwNDlGMDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBFNAorOjEwNEEwMDAwQUY0MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3NworOjEwNEExMDAwOEZBQTAwMTA4QzgyMDA1MDAwODA0MDIxMzBDNjAwRkYxOQorOjEwNEEyMDAwMDA0QTEwMjMwMEEwNDgyMTE4NDAwMDA3MDBFMDE4MjE4OAorOjEwNEEzMDAwMjQwMjAwMDFBMDgwMDA4NEEwQTAwMTEyQTQ4MjAwMTQxRQorOjEwNEE0MDAwMEEwMDExQkRBRkFBMDAxMEEwODAwMDgxQUQwNzAwNEM4NAorOjEwNEE1MDAwOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBRgorOjEwNEE2MDAwQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDBBNAorOjEwNEE3MDAwOEQwMjAwNTAwMDYyMTAyMzA0NDEwMDEzMjQwNjAwMDUzQgorOjEwNEE4MDAwOEQwMjAwNTQxMDYyMDAxMDAwMDAwMDAwOEQwMjAwNTRERQorOjEwNEE5MDAwMTQ2MjAwMTEwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDhBMworOjEwNEFBMDAwMzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzhFNworOjEwNEFCMDAwOTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjExQQorOjEwNEFDMDAwMDEyMDI4MjEyNDA2MDAwNDBBMDAxMEVDMDAwMDAwMDA0OAorOjEwNEFEMDAwQTEwMDAwODRBNTAyMDAxNDAzRTAwMDA4MDAwMDAwMDAwQgorOjEwNEFFMDAwMjdCREZGRTBBRkJGMDAxODI3NDIwMTAwOTA0NjAwMEEzMworOjEwNEFGMDAwOEM0ODAwMTQ4QzhCMDA0QzkwODIwMDg0MzBDOTAwRkZERAorOjEwNEIwMDAwMDE2ODE4MjMzMDRBMDBGRjFDNjAwMDFBMkQ0NjAwMDY3OQorOjEwNEIxMDAwMjQwMjAwMDEwMTQyMTAwNDEwQzAwMDE2MzA0MzAwMDNCQgorOjEwNEIyMDAwMDEyMDMwMjEwMTAwMzgyMTE0NjAwMDA3MzA0QzAwMENCNgorOjEwNEIzMDAwMTU4MDAwMDkzMDQyMDAzMDE0NDAwMDBCOEZCRjAwMTg3MAorOjEwNEI0MDAwMEEwMDEyQUMwMDAwMDAwMDBFMDAxMUJEQUZBQjAwMTA1NworOjEwNEI1MDAwMEEwMDEyQUM4RkJGMDAxODBFMDAxMTMyQUZBQjAwMTA2QworOjEwNEI2MDAwMEEwMDEyQUM4RkJGMDAxOEFGQUIwMDEwMEUwMDEyNTIzQgorOjEwNEI3MDAwQUZBQTAwMTQ4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA3MworOjEwNEI4MDAwMjQwMjAwMDNBMDgyMDA4NDhDODIwMDU0MDNFMDAwMDgwOQorOjEwNEI5MDAwQUNBMjAxMDgzQzAyMDAwODAzNDIxODIxOTA2MjAwODE4NworOjEwNEJBMDAwMjQwNjAwNDMzQzA3NjAxOTI0NDIwMDAxQTA2MjAwODFGMgorOjEwNEJCMDAwOTA2MzAwODEzQzAyMDgwMDhDNDIwMEMwMzA2MzAwRkYxQgorOjEwNEJDMDAwMTQ2MjAwMTAyNDAzRkY4MDNDMDIwODAwOEM0MjAwRTBDNQorOjEwNEJEMDAwMDA4MjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA1MAorOjEwNEJFMDAwOEM0MjAwRTAzQzAzMDAwQTAwODIxMDIxMzA0MjAwN0YyQQorOjEwNEJGMDAwMDM0MjEwMjEwMDQzMTAyMTk0NDUwMEQ0MEEwMDBCODk4MAorOjEwNEMwMDAwMzBBNUZGRkYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAyMworOjEwNEMxMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOEY0MjAxODBEOQorOjEwNEMyMDAwMDA4MDgwMjEwMEEwODgyMTBFMDAxMkIzMDA0MDIwMjFDNgorOjEwNEMzMDAwQTIwMDAwODQ4RTAyMDA1NDhGQkYwMDE4OEZCMDAwMTBCNQorOjEwNEM0MDAwQUUyMjAxMDg4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjA0OAorOjEwNEM1MDAwMjdCREZGRTAzQzAyMDAwOEFGQjAwMDEwQUZCRjAwMTg1NgorOjEwNEM2MDAwQUZCMTAwMTQwMzQyODAyMThGNTEwMTQwOTIwMzAwODRCMAorOjEwNEM3MDAwOEUwNDAwNTA4RTAyMDA0QzE0ODIwMDQwMzA2NjAwRkYwQgorOjEwNEM4MDAwM0MwMjA4MDA4QzQyMDBFMDI0MDNGRjgwMDIyMjEwMjEzNQorOjEwNEM5MDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA5NAorOjEwNENBMDAwOTc0NDAwN0M5MjA1MDA4MTAyMjIxMDIxMzA0MjAwN0Y0RgorOjEwNENCMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMTRBMDAwMEJENAorOjEwNENDMDAwMzA4NEZGRkYyNDAyMDAwNTU0QzIwMDE0MjQ4MjA1REM1NgorOjEwNENEMDAwOTA2MjAxMTIyNDQyMDAwMUEwNjIwMTEyMjQwMjBDODBBMQorOjEwNENFMDAwQUY0MjAwMjQwQTAwMTMwQjI0MDIwMDA1QTA2MDAxMTI0OQorOjEwNENGMDAwMjQwMjAwMDUxNEMyMDAwOTI0ODIwNURDOTIwMjAwODEwRQorOjEwNEQwMDAwMkM0MjAwMDc1MDQwMDAwNTI0ODIwQTAwOTIwMzAwODFEMworOjEwNEQxMDAwMjQwMjAwMTQwMDYyMTAwNDAwODIxMDIxMzA0NEZGRkZCRQorOjEwNEQyMDAwQTYwNDAwMTQwRTAwMTJCMzAyMjAyMDIxOTYwMjAwM0NCQgorOjEwNEQzMDAwOEUwMzAwNEMwMjIwMjAyMTMwNDJGRkZGMDAwMjEwNDA3MQorOjEwNEQ0MDAwMDA2MjE4MjEwRTAwMDMwMkFFMDMwMDVDOTIwMjAwN0Q5NworOjEwNEQ1MDAwMDIyMDIwMjEzNDQyMDA0MDBFMDAwMzBCQTIwMjAwN0RGRAorOjEwNEQ2MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY1MTAxQzA0RgorOjEwNEQ3MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4OEZCRjAwMThFQgorOjEwNEQ4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5MQorOjEwNEQ5MDAwMDgwMDBEOTgwODAwMERFMDA4MDAwRTIwMDgwMDBFNkNCOQorOjA0NERBMDAwMDgwMDBFQTA1OQorOjBDNERBNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDREQjAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTM2MDAwMDAwODIKKzoxMDREQzAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwQTMKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTEKKzoxMDRFMjAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDRFMzAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENDUKKzoxMDRFNDAwMDNDMDIwODAwMjQ0MjVBQzQzQzAzMDgwMDI0NjM2MTkwRDkKKzoxMDRFNTAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0REUKKzoxMDRFNjAwMDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwNkEKKzoxMDRFNzAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNUFDNDBFMDAwMUE2N0UKKzoxMDRFODAwMDAwMDAwMDAwMDAwMDAwMEQyN0JERkZFODNDMDk2MDE4OEQKKzoxMDRFOTAwMEFGQkYwMDEwOEQyQzUwMDAyNDBERkY3RjI0MDgwMDMxN0YKKzoxMDRFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA3MEMwMDNDMUE4MDAwMDgKKzoxMDRFQjAwMEFEMkE1MDAwM0MwNDgwMEFBRjQ4MDAwODNDMUI4MDA4MjMKKzoxMDRFQzAwMEFGNDcwMDI0MEUwMDA5MzVBRjg0MDAxMDBFMDAwOEY4MkIKKzoxMDRFRDAwMDAwMDAwMDAwMEUwMDA4NDUwMDAwMDAwMDBFMDAxMkRDN0IKKzoxMDRFRTAwMDAwMDAwMDAwM0MwNDYwMTY4Qzg1MDAwMDNDMDZGRkZGQkIKKzoxMDRFRjAwMDNDMDI1MzUzMDBBNjE4MjQxMDYyMDA0NzM0ODY3QzAwRkQKKzoxMDRGMDAwMDk0QzIwMUYyQTc4MDAwMkMxMDQwMDAwM0E3ODAwMENDQkYKKzoxMDRGMTAwMDM4NTgxRTFFQTc5ODAwMkM5NEMyMDFGODEwNDAwMDA0QjcKKzoxMDRGMjAwMDk3ODMwMENDMzg1OTFFMUVBNzk5MDBDQzk3ODMwMENDREMKKzoxMDRGMzAwMDJDN0YwMDY3NTNFMDAwMDEyNDAzMDA2Njk3ODQwMDJDNTcKKzoxMDRGNDAwMDJDODIwNDAxMTQ0MDAwMDIwMDYwMjgyMTI0MDQwNDAwODMKKzoxMDRGNTAwMDNDMDc2MDAwOENFOTA0MzgyNDAzMTAzQzMxMjhGRkZGMzMKKzoxMDRGNjAwMDExMDMwMDFGMzBCOUZGRkY1NzIwMDAxMEEzODAwMENFQUYKKzoxMDRGNzAwMDI0MDIwMDUwQTM4MjAwQ0U5MzlGMDBDRTUzRTAwMDBGODYKKzoxMDRGODAwMEE3ODUwMENDQTc4MDAwQ0M5Nzg1MDBDQzhGQkYwMDEwRjAKKzoxMDRGOTAwMEE3ODAwMDJDQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwMTEKKzoxMDRGQTAwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODkzOUYwMENFQzkKKzoxMDRGQjAwMDU3RTBGRkY1QTc4MDAwQ0NBNzg1MDBDQzk3ODUwMENDRjMKKzoxMDRGQzAwMDhGQkYwMDEwQTc4NDAwMkNBNzgwMDAzNEE3ODAwMEU2QzQKKzoxMDRGRDAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4NTQKKzoxMDRGRTAwMEEzODAwMENFOENDQjAwM0MzMTZBMDAwMTExNDAwMDBFNDIKKzoxMDRGRjAwMDAwMDAwMDAwMzBBN0ZGRkYxMEUwRkZERTI0MDIwMDUwOTkKKzoxMDUwMDAwMDhDQ0MwMEM4MzE4NjAwMDExNEMwRkZEQzkzOUYwMENFMTkKKzoxMDUwMTAwMDBBMDAwMDc0MjQwMjAwNTE4QzhGMDAwNDNDMEU2MDAwRDIKKzoxMDUwMjAwMDBBMDAwMDU3MDFFRTMwMjE4Q0VGMDgwODI0MEQ1NzA4QzQKKzoxMDUwMzAwMDAwMEY3NDAyMTFDRDAwMDQzMEI4RkZGRjI0MDUwMDY2OTQKKzoxMDUwNDAwMDBBMDAwMDc1MjQwNDA0MDAxNzAwRkZDQzkzOUYwMENFRDMKKzoxMDUwNTAwMDBBMDAwMDc0MjQwMjAwNTA4Rjg2MDAxMDMwODlGRkZGODAKKzoxMDUwNjAwMDAwMDkzOTQwOENDMzAwMTAzQzA4MDA1MDAwRTgyMDI1OUUKKzoxMDUwNzAwMEFGNDMwMDM4OENDNTAwMTQyNzQyMDQwMEFGODIwMDFDRTcKKzoxMDUwODAwMEFGNDUwMDNDQUY0NDAwMzAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDA4RjRCMDAwMDMxNkEwMDIwNkIKKzoxMDUwQjAwMDExNDBGRkZEMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwQjgKKzoxMDUwQzAwMDhGODQwMDEwOTQ4QTAwMUE4Qzg3MDAyNDMxNDlGRkZGRDYKKzoxMDUwRDAwMDAwMDk0MEMwMDBFODMwMjFBRjQ2MDAzQzhDODUwMDI0MjgKKzoxMDUwRTAwMDhGNDMwMDNDMDBBMzEwMjMxODQwMDAyOTAwMDAwMDAwNUIKKzoxMDUwRjAwMDhDOEIwMDIwMjU2MjAwMDEzQzBEMDA1MDM1QUMwMDA4NkYKKzoxMDUxMDAwMEFGNDIwMDM4QUY0QzAwMzAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRUUwMDIwNjIKKzoxMDUxMzAwMDExQzBGRkZEMDAwMDAwMDA4RjRBMDQwMDNDMDgwMDIwNjEKKzoxMDUxNDAwMEFDOEEwMDEwOEY0OTA0MDRBQzg5MDAxNEFGNDgwMDMwQzkKKzoxMDUxNTAwMDAwMDAwMDAwOTQ4NjAwMTg5NDg3MDAxQzAwQzcxODIxRTYKKzoxMDUxNjAwMEE0ODMwMDE4OTQ4NTAwMUEyNEEyMDAwMUE0ODIwMDFBQzYKKzoxMDUxNzAwMDk0OTgwMDFBOTQ5OTAwMUUxMzM4MDAwMzAwMDAwMDAwNTAKKzoxMDUxODAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0ODAwMDFBMEIKKzoxMDUxOTAwMDhDODIwMDIwMEEwMDAwRDYzQzBEMDA1MDBBMDAwMEM3OTcKKzoxMDUxQTAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDhGODIwMDE4ODAKKzoxMDUxQjAwMDI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMDBFMDAwMEZFMjAKKzoxMDUxQzAwMEFGODMwMDE4M0MwMzA4MDA4QzYzMDAyMDI0MDQwMDAxMTYKKzoxMDUxRDAwMDEwNjQwMDA0OEY4OTAwMTA4RkJGMDAxMDAzRTAwMDA4RTYKKzoxMDUxRTAwMDI3QkQwMDE4OEZCRjAwMTAzQzA3NjAxMkE1MjAwMDBBRTEKKzoxMDUxRjAwMDk1MjgwMDBBMzRFNTAwMTAyN0JEMDAxODMxMDZGRkZGOEUKKzoxMDUyMDAwMDAzRTAwMDA4QUNBNjAwOTAzQzAyMDgwMDhDNDIwMDIwOUQKKzoxMDUyMTAwMDI3QkRGRkM4QUZCRjAwMzRBRkJFMDAzMEFGQjcwMDJDMTIKKzoxMDUyMjAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDNjgKKzoxMDUyMzAwMEFGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MEFGQjAwMDEwNzIKKzoxMDUyNDAwMDhGODQwMDEwOTQ4NjAwMDY5NDgzMDAwQTAwQzMyODIzRUMKKzoxMDUyNTAwMDMwQjZGRkZGMTJDMDAwNEE4RkJGMDAzNDk0ODkwMDE4OTcKKzoxMDUyNjAwMDk0OEEwMDBBMDEyQTQwMjMzMTAyRkZGRjAyQzIzODJCMzAKKzoxMDUyNzAwMDE0RTAwMDAyMDJDMDIwMjEwMDQwMjAyMTJDOEMwMDA1RjcKKzoxMDUyODAwMDE1ODAwMDAyMDA4MEEwMjEyNDE0MDAwNDBFMDAwMEFENEYKKzoxMDUyOTAwMDAyODAyMDIxOEY4NzAwMTAwMjgwOTgyMUFGODAwMDE0QTcKKzoxMDUyQTAwMDk0RUQwMDBBMDI4MDg4MjExMjgwMDA0RTMxQjJGRkZGODcKKzoxMDUyQjAwMDNDMTc3MDAwM0MxNTQwMDAzQzFFNjAwMDhGOEYwMDFDQTYKKzoxMDUyQzAwMDhERUUwMDAwMDFENzE4MjQ1MDc1MDA1MDAyMjAyMDIxRDcKKzoxMDUyRDAwMDAyQTM4MDJCMTYwMDAwMzUzQzE4MjAwMDUwNzgwMDQ3QjAKKzoxMDUyRTAwMDAyMjAyMDIxMjQxMDAwMDE4RjgzMDAxNDE0NjAwMDM5NTMKKzoxMDUyRjAwMDAyOTE1ODIzMDIzMEY4MjMwMjUwQzgyMTMzRjFGRkZGRjYKKzoxMDUzMDAwMDE2MjBGRkVFMzMzMkZGRkY4Rjg3MDAxMDNDMTEwMDIwODQKKzoxMDUzMTAwMEFGNTEwMDMwMDAwMDAwMDA5NEU2MDAwQTNDMUU2MDEyMEQKKzoxMDUzMjAwMDM3RDUwMDEwMDI2NjI4MjFBNEU1MDAwQTk0RTIwMDBBOUQKKzoxMDUzMzAwMDk0RjIwMDBBOTRGNDAwMTgzMDU3RkZGRjEyOTIwMDNCRDkKKzoxMDUzNDAwMEFFQjcwMDkwOENFRDAwMTQ4Q0U0MDAxMDAwMTM3MTQwOTcKKzoxMDUzNTAwMDAxQUU0MDIxMDAwRTVGQzMwMTBFNTAyQjAwOEI0ODIxOEYKKzoxMDUzNjAwMDAxMkExODIxQUNFODAwMTRBQ0UzMDAxMDAyRDMzODIzNjIKKzoxMDUzNzAwMDMwRjZGRkZGMTZDMEZGQjk4Rjg0MDAxMDhGQkYwMDM0RDYKKzoxMDUzODAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0NTkKKzoxMDUzOTAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUYKKzoxMDUzQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODEwN0UwMDFCRkUKKzoxMDUzQjAwMDAwMDAwMDAwMTQ3N0ZGQ0MyNDEwMDAwMTBFMDAxNjI3MTcKKzoxMDUzQzAwMDAwMDAwMDAwOEY4MzAwMTQxMDYwRkZDQjAyMzBGODIzMzAKKzoxMDUzRDAwMDAyOTE1ODIzOEY4NzAwMTAwMTcwMjAyMTBBMDAwMTkxNEIKKzoxMDUzRTAwMDMwOTNGRkZGOEY4MzAwMTQxNDYwRkZDQjNDMTEwMDIwMkIKKzoxMDUzRjAwMEFGNTEwMDMwMEEwMDAxNUQwMDAwMDAwMDBFMDAwNzlFNjIKKzoxMDU0MDAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMzRCNzgKKzoxMDU0MTAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAxNEVGQjMKKzoxMDU0MjAwMDAyMjAyMDIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMEM3MDcKKzoxMDU0MzAwMDAwMDAwMDAwMEEwMDAxNzMwMkQzMzgyMzI3QkRGRkU4RjMKKzoxMDU0NDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMDAzOTAwMDAwMDAwMjQKKzoxMDU0NTAwMDNDMDI4MDAwMzQ1MDAwNzAwQTAwMDFCNDhFMDYwMDAwNDcKKzoxMDU0NjAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMTEwNDAwMDI0Q0UKKzoxMDU0NzAwMDhGODYwMEE4OEUwNzAwMDAzQzBDMDgwMDhEOEMwMDNDMzUKKzoxMDU0ODAwMDNDMDkwODAwOEQyOTAwMzgwMEU2NjgyMzAxOEQyODIxOTkKKzoxMDU0OTAwMDAwMDA1MDIxMDBBRDMwMkIwMTJBNDAyMTAxMDYyMDIxQkYKKzoxMDU0QTAwMDNDMDEwODAwQUMyNTAwM0NBRjg3MDBBODNDMDEwODAwODcKKzoxMDU0QjAwMEFDMjQwMDM4MEUwMDAxMDAwMDAwMDAwMDNDMDMwODAwOEUKKzoxMDU0QzAwMDhDNjMwMDcwMTA2MEZGRTYwMDYwMjAyMTNDMDUwODAwM0UKKzoxMDU0RDAwMDhDQTUwMDY4M0MwNjA4MDA4Q0M2MDA2QzBFMDAxNUI2NTIKKzoxMDU0RTAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwMDA3MDhGNEYwMDAwNUQKKzoxMDU0RjAwMDM5RUUwMDAxMzFDMjAwMDExNDQwRkZERThGODYwMEE4QTIKKzoxMDU1MDAwMDhFMEEwMDAwOEY4QjAwQTgzQzA1MDgwMDhDQTUwMDNDOEIKKzoxMDU1MTAwMDNDMDQwODAwOEM4NDAwMzgwMTRCNDgyMzAwQTkzODIxNDIKKzoxMDU1MjAwMDAwODIxODIxMDBFOTQwMkIwMDY4MTAyMTNDMDEwODAwOEUKKzoxMDU1MzAwMEFDMjcwMDNDM0MwMTA4MDBBQzIyMDAzODhGNUYwMTAwMjIKKzoxMDU1NDAwMDI0MTlGRjAwMjQxODBDMDAwM0Y5MjAyNDEwOTgwMDEyREQKKzoxMDU1NTAwMEFGODQwMDAwQUY0NDAwMjA5MzZEMDAwMDI0MEMwMDIwQjUKKzoxMDU1NjAwMDMxQTYwMEZGMTBDQzAwMTIyNDBFMDA1MDEwQ0UwMDA0MTMKKzoxMDU1NzAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwOUQKKzoxMDU1ODAwMDBFMDAxMjUyMDAwMDAwMDAzQzE5NDAwMEFGNTkwMTM4RDMKKzoxMDU1OTAwMDBBMDAwMUFEMDAwMDAwMDAwRTAwMDExOTAwMDAwMDAwMkIKKzoxMDU1QTAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwNkQKKzoxMDU1QjAwMDhGNTgwMTAwMDA4MDI4MjEzMzBGMDBGRjAxRTAyMDIxRDcKKzoxMDU1QzAwMDBFMDAwMkY4QUY4RjAwMDQzQzE5NDAwMEFGNTkwMTM4QkIKKzoxMDU1RDAwMDBBMDAwMUFEMDAwMDAwMDAwMEE0MTAyQjI0MDMwMDAxMEMKKzoxMDU1RTAwMDEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MDAwQTQxMDJCQzUKKzoxMDU1RjAwMDA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwQUQKKzoxMDU2MDAwMDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQjU0RTAwMDA0NzkKKzoxMDU2MTAwMDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzAwMDMxODQyRjAKKzoxMDU2MjAwMDE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjAzRTAwMDA4NkQKKzoxMDU2MzAwMDAwQzMxMDIxMzA4NEZGRkYzMEE1RkZGRjhGNDIwMUI4NjcKKzoxMDU2NDAwMDA0NDBGRkZFM0MwNzQwODAwMDg3MzAyNTNDMDMxMDAwRUIKKzoxMDU2NTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ2MDE4ODAzRTAwMDA4RjgKKzoxMDU2NjAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFMTIKKzoxMDU2NzAwMDNDMDc0MDM4OENBNjAwMDAwMDg3MjgyNTNDMDMxMDAwMUEKKzoxMDU2ODAwMEFGNDYwMTgwQUY0NTAxODgwM0UwMDAwOEFGNDMwMUI4OTEKKzoxMDU2OTAwMDhGODMwMDM4OEY4NjAwMzAxMDY2MDAwQjAwODA0MDIxMTkKKzoxMDU2QTAwMDNDMDcwODAwMjRFNzVDMzgwMDAzMjhDMDAwQTcxMDIxNEQKKzoxMDU2QjAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNTMKKzoxMDU2QzAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMjAKKzoxMDU2RDAwMDNDMDcwODAwMjRFNzVDM0MwMEE3MzAyMTAzRTAwMDA4RjkKKzoxMDU2RTAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1M0YKKzoxMDU2RjAwMEFGNDQwMDIwOEY0NTAwMjAwNEEwRkZGRTAwMDAwMDAwMDIKKzoxMDU3MDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDM0NjIwMDAxNTgKKzoxMDU3MTAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDEKKzoxMDU3MjAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4NTEKKzoxMDU3MzAwMDEyMjAwMDE1MDBBMDgwMjE4Q0E1MDAwMDEwQTAwMDEzRUQKKzoxMDU3NDAwMDI0MDQwMDAyMEUwMDBDN0MyNDA2MDE0MEFFMDAwMDAwODAKKzoxMDU3NTAwMDhGNDIwMUI4MDQ0MDAwMEQwMDAwMjgyMTNDMDY0MDAwQTMKKzoxMDU3NjAwMDAyMjYyMDI1OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzMKKzoxMDU3NzAwMDNDMDMxMDAwMjdCRDAwMjBBRjQ1MDE4MEFGNDQwMTg4RTUKKzoxMDU3ODAwMDAzRTAwMDA4QUY0MzAxQjg4Q0E1MDAwMDhGNDIwMUI4QzgKKzoxMDU3OTAwMDA0NDBGRkZFM0MwNjQwMDAwMjI2MjAyNThGQkYwMDE4NzMKKzoxMDU3QTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwMDMKKzoxMDU3QjAwMEFGNDUwMTgwQUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NjIKKzoxMDU3QzAwMDMwODZGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDk0MDA2Q0YKKzoxMDU3RDAwMDhDQTgwMDAwMDBDOTM4MjVBRjQ4MDE4MDhDQTQwMDA0QzMKKzoxMDU3RTAwMDNDMDMxMDAwQUY0NDAxODRBRjQ3MDE4ODAzRTAwMDA4ODgKKzoxMDU3RjAwMEFGNDMwMUI4MjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4NDYKKzoxMDU4MDAwMEFGQjEwMDE0OTM2MzAwM0UwMDgwODAyMTAwODAyODIxMDYKKzoxMDU4MTAwMDMwNjIwMDQwMDAwMDIwMjExMDQwMDAwRjhFMTEwMDAwNzcKKzoxMDU4MjAwMDBFMDAwODcxMDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwMUMKKzoxMDU4MzAwMDMwRTUwMEZGNTBBNDAwMTI4RTBGMDAwMDAyMjAyMDIxNEUKKzoxMDU4NDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEE3NjIwMTNDMDkKKzoxMDU4NTAwMDBBMDAwOTMxMjdCRDAwMjAwRTAwMDI4NzAwMDAwMDAwNjkKKzoxMDU4NjAwMDBFMDAwODcxMDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwREMKKzoxMDU4NzAwMDMwRTUwMEZGMTRBNEZGRjIwMjIwMjAyMThFMEYwMDAwNkIKKzoxMDU4ODAwMDNDMTAwODAwOEUxMDAwNTAzQzBEMDAwQzI0MEJGRjgwRDMKKzoxMDU4OTAwMDAxRjA1MDIxMzE0RTAwN0YwMURBNjAyMTAxOEQ0MDIxNUQKKzoxMDU4QTAwMDAxNEI0ODI0QUY0OTAwMjgwMjIwMjAyMThGQkYwMDE4NTcKKzoxMDU4QjAwMDhGQjEwMDE0OEZCMDAwMTBBNTAyMDBENjI3QkQwMDIwQzQKKzoxMDU4QzAwMDBBMDAwOTMxQUY4ODAwRDAyN0JERkZFMEFGQkYwMDE4NDQKKzoxMDU4RDAwMEFGQjEwMDE0QUZCMDAwMTA5MzY2MDAwMTAwODA4MDIxQ0EKKzoxMDU4RTAwMDBFMDAwMjUwMzBEMTAwMDQ5MzY0MDAwNTAwMTAyOUMyNUMKKzoxMDU4RjAwMEE3NjUwMDAwMzQ4MzAwNDBBMzYzMDAwNTBFMDAwMjU5MzEKKzoxMDU5MDAwMDAyMDAyMDIxMEUwMDA5MzMwMjAwMjAyMTI0MDIwMDAxQTAKKzoxMDU5MTAwMEFGNjIwMDBDMDIwMDI4MjFBNzYyMDAxMDI0MDQwMDAyREMKKzoxMDU5MjAwMEE3NjIwMDEyMjQwNjAxNDBBNzYyMDAxNDBFMDAwQzdDM0UKKzoxMDU5MzAwMEE3NjIwMDE2MTYyMDAwMEY4RkJGMDAxODk3OEMwMDM0NDYKKzoxMDU5NDAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGQjUKKzoxMDU5NTAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDM0RDAKKzoxMDU5NjAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwNjEKKzoxMDU5NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MzMKKzoxMDU5ODAwMDI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4NTYKKzoxMDU5OTAwMEFGQjAwMDEwMDBBMDg4MjExMDgwMDAwQTNDMDM2MDAwMTYKKzoxMDU5QTAwMDI0MDIwMDgwMTA4MjAwMTIwMDAwMDAwMDAwMDAwMDBEQTAKKzoxMDU5QjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RjMKKzoxMDU5QzAwMDI3QkQwMDIwOEM2ODJCRjgwNTAwRkZGRTAwMDAwMDAwQkEKKzoxMDU5RDAwMEFDNzEyQkMwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQjYKKzoxMDU5RTAwMDNDMDkxMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjkyQkY4M0IKKzoxMDU5RjAwMDBFMDAwMjUwMDBBMDIwMjE5MzY1MDAwNTAyMjAyMDIxMDYKKzoxMDVBMDAwMDBFMDAwMjU5MzBCMDAwRkYyNDAzMDAzRTE2MDNGRkU3RUEKKzoxMDVBMTAwMDAwMDAwMDAwOEY0NDAxNzgwNDgwRkZGRTI0MDcwMDA3ODcKKzoxMDVBMjAwMDNDMDYxMDAwQUY1MTAxNDAwMjIwMjAyMUEzNDcwMTQ0NTEKKzoxMDVBMzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEFGNDYwMTc4RUYKKzoxMDVBNDAwMDBBMDAwMkM5MjdCRDAwMjAyN0JERkZFOEFGQkYwMDE0MzAKKzoxMDVBNTAwMEFGQjAwMDEwOEY1MDAwMjAwMDAwMDAwMDBFMDAwOTMzOEUKKzoxMDVBNjAwMEFGNDQwMDIwQUY1MDAwMjA4RkJGMDAxNDhGQjAwMDEwNTMKKzoxMDVBNzAwMDAzRTAwMDA4MjdCRDAwMTgzMDg0RkZGRjhGNDIwMUI4MDMKKzoxMDVBODAwMDA0NDBGRkZFM0MwNzQwMzUwMDg3MzAyNTNDMDMxMDAwRjIKKzoxMDVBOTAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4QjQKKzoxMDVBQTAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFQ0UKKzoxMDVBQjAwMDNDMDc0MDM2MDA4NzMwMjUzQzAzMTAwMEFGNDUwMTgwOEQKKzoxMDVBQzAwMEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4NEUKKzoxMDVBRDAwMDI3QkRGRkQwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0NEMKKzoxMDVBRTAwMEFGQjIwMDE4QUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QjAKKzoxMDVBRjAwMEFGQjAwMDEwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxMEEKKzoxMDVCMDAwMDhGOTAwMDFDOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwQTEKKzoxMDVCMTAwMDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0NkMKKzoxMDVCMjAwMDE0ODIwMDFEMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBMTYKKzoxMDVCMzAwMDUxMDAwMDEwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwQTUKKzoxMDVCNDAwMDI1OEM1OEM0MDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4QUIKKzoxMDVCNTAwMDAwMDAwMDAwMDJCMjE4MjEzMDY1RkZGRjBFMDAwMjI0OTEKKzoxMDVCNjAwMDI0MDQwMDg0MTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4QkYKKzoxMDVCNzAwMDhGOTEwMDE0MjYwQzAwMjAyNjRCMDAwMTAxODA4MDIxMEIKKzoxMDVCODAwMDMxNzJGRkZGMTYyMDAwMDRBRjhDMDAxQzAyNTMyODJCM0IKKzoxMDVCOTAwMDE0QTBGRkRDMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEQKKzoxMDVCQTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4NzMKKzoxMDVCQjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwNDMKKzoxMDVCQzAwMDI0MEQwMDM0MTRBRDAwRjYwMDAwMDAwMDkyMEIwMDBFMEUKKzoxMDVCRDAwMDI0MEExNjgwM0MwNzAwMENBMzZCMDAyMTkyMDMwMDBERTEKKzoxMDVCRTAwMDAzNDdGODIxM0MwNjYwMDBBMzYzMDAyMDk2MTEwMDEyRDEKKzoxMDVCRjAwMDNDMDU3RkZGMzRBQ0ZGRkZBNzcxMDAzQzk2MDIwMDEwMEMKKzoxMDVDMDAwMDI0MEIwMDA1MzA1NEZGRkZBRjc0MDA4NDhFMTkwMDFDNzQKKzoxMDVDMTAwMEFGNEEwMDI4OEZGODAwMDA4Q0NGNDQ0ODAzMTk3MDI2NDMKKzoxMDVDMjAwMDAxRUUzMDIxQUY2NjAwNEM4RjY5MDA0QzI0Q0QwMDAxOUQKKzoxMDVDMzAwMDNDMTk3RjAwQUY2OTAwNTA4RjY0MDA1MEFGNjQwMDU0N0UKKzoxMDVDNDAwMEFGNjYwMDcwQUY2RDAwNTg4RjY4MDA1ODI0MDQwMDUwOTQKKzoxMDVDNTAwMEFGNjgwMDVDQTM2MDAwMjNBRjZDMDA2NEEzNkIwMDM3RTcKKzoxMDVDNjAwMDhFMDMwMDE0QUY2MzAwNDg4RjcxMDA0OEFGNzEwMDI0QTkKKzoxMDVDNzAwMDhFMDIwMDE4QUY2MjAwNkM5MjE0MDAwQ0EzNzQwMDM2MDAKKzoxMDVDODAwMDkzNkEwMDNFMzU1RjAwMjBBMzdGMDAzRThGNzgwMDc0NEEKKzoxMDVDOTAwMDAzMTk3ODI0MzVFRTQwMDBBRjZFMDA3NDkzNjkwMDAwNUMKKzoxMDVDQTAwMDMxMzAwMEZGMTIwNDAyMkMyNDE4RkY4MDNDMDQwODAwNEQKKzoxMDVDQjAwMDI0ODQ1Q0I4MEUwMDAyOTQwMDAwMDAwMDI0MDYwMDA0NTYKKzoxMDVDQzAwMDI0MDcwMDAxM0MwNDA4MDA4Qzg0NUNCOEEzNjYwMDdEQjYKKzoxMDVDRDAwMEEzNjcwMDA1OEY0QTAxNzgwNTQwRkZGRTI0MDIwMDAyRjkKKzoxMDVDRTAwMEFGNDQwMTQwQTM0MjAxNDQ4RjkwMDAxQzNDMTQxMDAwQkIKKzoxMDVDRjAwMEFGNTQwMTc4MEEwMDAzNzNBRjgwMDAyODJDQUQwMDM3NDEKKzoxMDVEMDAwMDUxQTBGRjlDOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwNTIKKzoxMDVEMTAwMDI3MTg1OEVDMDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4ODkKKzoxMDVEMjAwMDAwMDAwMDAwMjQwNjAwMDYxNEE2MDAxMTAwMDAwMDAwNzgKKzoxMDVEMzAwMDNDMUYwODAwOEZGRjVDQjgyNDA0MDAwNUFGNUYwMDIwMDMKKzoxMDVENDAwMDhFMTkwMDE4QUY3OTAwMTg4Rjc4MDA0Q0FGNzgwMDFDQkUKKzoxMDVENTAwMDhGNkYwMDUwMTIyMDAwQzJBRjZGMDA3MDBBMDAwMzczRjMKKzoxMDVENjAwMEFGODQwMDI4MjQwQTAwMDcxMEFBMDA4NDI0MDMwMDA2MzgKKzoxMDVENzAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTI0MDQwMDgxRTYKKzoxMDVEODAwMDhGOTAwMDFDMDAxMTEwMkIwQTAwMDM3M0FGODIwMDI4QjMKKzoxMDVEOTAwMDI0MDIwMDA0MTRBMkZGRjYyNDBBMDA1MDNDMDkwODAwNjMKKzoxMDVEQTAwMDhEMjk1Q0I4QUY0OTAwMjA4RTA0MDAwOEFGNjQwMDQwMjQKKzoxMDVEQjAwMDhFMDYwMDA4QUY2NjAwNDQ4RTA3MDAwQ0FGNjcwMDQ4RUYKKzoxMDVEQzAwMDhFMEQwMDEwQUY2RDAwNEM4RTA4MDAxMEFGNjgwMDg0N0YKKzoxMDVERDAwMDhFMDUwMDE0QUY2NTAwNTA4RTBDMDAxOEFGNkMwMDU0OTcKKzoxMDVERTAwMDhFMEIwMDFDQUY2QjAwNTg5Mzc0MDAwMDMyODMwMEZGRDEKKzoxMDVERjAwMDEwNkEwMUVFMDAwMDAwMDA4RjY3MDA0ODhGNjYwMDQwQzcKKzoxMDVFMDAwMDAwRTY2ODIzMDVBMDAwMDQyNDA0MDA4QzE2MjBGRkRFQjEKKzoxMDVFMTAwMDI0MDIwMDAzMjQwNDAwODIzQzA1MDgwMDI0QTU1Q0I4ODkKKzoxMDVFMjAwMDBFMDAwMjg3MDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxNkYKKzoxMDVFMzAwMDBBMDAwMzczQUY4MjAwMjgyNDA0MDAwNTE0QTRGRkNDRDkKKzoxMDVFNDAwMDI0MDUyMDAwM0MxRjA4MDA4RkZGNUNCOEFGNUYwMDIwRDYKKzoxMDVFNTAwMDhFMTkwMDA0QUY3OTAwNUM5MjE4MDAwODI0MTAwMDA4MjUKKzoxMDVFNjAwMEEzNzgwMDIxOEY4RjAwMUM5MUVFMDAwOUEzNkUwMDIwMDMKKzoxMDVFNzAwMDhGODYwMDFDOTBDOTAwMEEzMTI0MDBGRjEwOTAwMDEwOEEKKzoxMDVFODAwMDI4OEEwMDA5MTU0MDAwNkMyNDAyMDAwMjI0MEMwMDIwMUUKKzoxMDVFOTAwMDEwOEMwMDBCMzQwNTgwMDAyODg1MDAyMTE0QTAwMDA4MTgKKzoxMDVFQTAwMDI0MDU0MDAwMjQwODAwNDAxMDg4MDAwNTNDMDUwMDAxM0UKKzoxMDVFQjAwMDI0MEQwMDgwMTA4RDAwMDIzQzA1MDAwMjI0MDU0MDAwRTYKKzoxMDVFQzAwMDhGNkUwMDc0M0MwRkZGMDAwMUNGNDgyNDAxMjU4MDI1MTAKKzoxMDVFRDAwMEFGNzAwMDc0OTBDNDAwMEJBMzY0MDA4MThGODQwMDFDMTkKKzoxMDVFRTAwMDk0ODcwMDBDMTBFMDAxOTQwMDAwMDAwMDk0OEUwMDBDRDgKKzoxMDVFRjAwMDI0MUZGRkJGMjQwNjAwMDRBNzZFMDAzQzkwODkwMDBFRkIKKzoxMDVGMDAwMEEzNjkwMDNFOEY5MDAwMUM5MjA0MDAwRkEzNjQwMDNGMjEKKzoxMDVGMTAwMDhGOTQwMDFDOEU4RDAwMTA4RjQ3MDA3NDAxQTc0MDIzQzIKKzoxMDVGMjAwMEFGNjgwMDYwOEU4NTAwMTRBRjY1MDA2NDk2OEMwMDE4MjEKKzoxMDVGMzAwMEE3NkMwMDY4OTY4QjAwMUFBNzZCMDA2QThFODMwMDFDMDIKKzoxMDVGNDAwMEFGNjMwMDZDOTY4MjAwMDJBNzYyMDEzRTkyOEEwMDBFNDcKKzoxMDVGNTAwMEEzNkEwMDNFOTM3OTAwM0UwMzNGQzAyNDEyMjAwMTY3RUMKKzoxMDVGNjAwMEEzNzgwMDNFOEY5MDAwMUMwQTAwMDM3M0FGODYwMDI4QzAKKzoxMDVGNzAwMDI0MTQwMDIyMTRCNEZGN0UyNDAzMDAwNzNDMDIwODAwMEUKKzoxMDVGODAwMDhDNDI1Q0I4MTIyMDAwMENBRjQyMDAyMDBBMDAwMzczNjAKKzoxMDVGOTAwMEFGODMwMDI4MjQwQzAwMzMxMEFDMDAxNDI0MDUwMDI4MjMKKzoxMDVGQTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDI0MDQwMDgxRTIKKzoxMDVGQjAwMDBBMDAwM0Y4OEY5MDAwMUMzQzA0MDgwMDI0ODQ1Q0I4OUQKKzoxMDVGQzAwMDBFMDAwMjk0MDAwMDAwMDA5MzZCMDAwMDI0MTEwMDUwQUEKKzoxMDVGRDAwMDMxNjMwMEZGMTA3MTAxNTEwMDAwMDAwMDhGOTAwMDFDMjAKKzoxMDVGRTAwMDAwMDAxODIxMEEwMDAzNzNBRjgzMDAyODNDMDgwODAwNTIKKzoxMDVGRjAwMDhEMDg1Q0I4MjQwNDAwODFBRjQ4MDAyMEEzNjUwMDM0RkMKKzoxMDYwMDAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDAwMDAwMDAwMkEKKzoxMDYwMTAwMDhGOTAwMDFDMjQwMjAwMDkwQTAwMDM3M0FGODIwMDI4M0QKKzoxMDYwMjAwMDAyQjI4ODIxMzIyNUZGRkYwRTAwMDIyNDI0MDQwMDg0REUKKzoxMDYwMzAwMDBBMDAwMzczOEY5MDAwMUMxMDgyRkZBMTI0MDUwNDAwNDYKKzoxMDYwNDAwMDI4ODMwMDAzMTA2MDAxNkYyNDBCMDAwNDI0MTQwMDAxNTYKKzoxMDYwNTAwMDU0OTRGRjlCMjQwNTQwMDAwQTAwMDQ0NzI0MDUwMTAwRDYKKzoxMDYwNjAwMDNDMDQwODAwMjQ4NDVDQjg4RjYyMDA0QzBFMDAwMjk0NEIKKzoxMDYwNzAwMDhGNjMwMDUwOEY5MDAwMUMwMDAwMjAyMTBBMDAwMzczRTIKKzoxMDYwODAwMEFGODQwMDI4OEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwNDIKKzoxMDYwOTAwMDkzNkUwMDA1MzFDOTAwMDIxNTIwMDE1RTAyMDAyODIxMUYKKzoxMDYwQTAwMDkzNzgwMDIzMDIwMDI4MjEzMzBGMDAyMDE1RTAwMTU5QzYKKzoxMDYwQjAwMDI0MDQwMDhEOTM2MjAwM0YyNDE5MDAxMjMwNUYwMEZGMUEKKzoxMDYwQzAwMDEzRjkwMTU0MjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMjMKKzoxMDYwRDAwMDkzNzQwMDIzMjQwQTAwMDQwMjAwMjAyMTM2ODMwMDQyMjYKKzoxMDYwRTAwMEEzNjMwMDIzMEUwMDAyNTlBMzZBMDA3RDhGNEIwMTc4NDEKKzoxMDYwRjAwMDA1NjBGRkZFMjQwNTAwMDJBRjUwMDE0MEEzNDUwMTQ0QTYKKzoxMDYxMDAwMDhGOTAwMDFDM0MwQzEwMDBBRjRDMDE3ODBBMDAwM0Y5ODIKKzoxMDYxMTAwMDAwMTExMDJCOEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwQzAKKzoxMDYxMjAwMDkzNkQwMDA1MzFBODAwMDIxNTAwMDAxNjAyMDAyODIxMTkKKzoxMDYxMzAwMDkzNjQwMDNGMjQwNzAwMDQwMjAwMjgyMTMwODYwMEZGRkEKKzoxMDYxNDAwMDEwQzcwMDEwMjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMUMKKzoxMDYxNTAwMDkzN0YwMDIzMjQxODAwMTIyNDBGRkZGRTM3RjkwMDIwM0MKKzoxMDYxNjAwMEEzNzkwMDIzQTM3ODAwM0Y5MzZFMDAwNTAyMDAyMDIxNEQKKzoxMDYxNzAwMDAxQ0Y0ODI0MEUwMDAyNTlBMzY5MDAwNTAyMDAyODIxMUUKKzoxMDYxODAwMDAwMDAyMDIxMEUwMDAzNDAwMDAwMDAwMDBBMDAwM0Y4NzgKKzoxMDYxOTAwMDhGOTAwMDFDOEUwNTAwMDQzQzBGMDAwODAzNEY0MDIxMjcKKzoxMDYxQTAwMEFGNDUwMDIwOTEwRTAwMDAyNDA2MDA1MDMxQzkwMEZGQzkKKzoxMDYxQjAwMDExMjYwMTc2MjQwNDAwODg4RjU5MDFCODA3MjBGRkZFQkMKKzoxMDYxQzAwMDNDMEM0MDBFMDA4QzU4MjUzQzAzMTAwMEFGNDUwMTgwNkMKKzoxMDYxRDAwMEFGNDAwMTg0QUY0QjAxODhBRjQzMDFCODkxMDIwMDAwOEEKKzoxMDYxRTAwMDI0MEFGRjgwMjQwNDAwMDQwMDRBRjgyNUExMUYwMDAwQUYKKzoxMDYxRjAwMDBFMDAwQzdDMjQwNjAwMzAwQTAwMDNGODhGOTAwMDFDNkYKKzoxMDYyMDAwMDhFMEYwMDA0M0MxNDA4MDAyNjk0NUNCODNDMDEwODAwODIKKzoxMDYyMTAwMEFDMkY1Q0I4QUY0RjAwMjA5MjBFMDAwMzMxQzkwMDA0RDAKKzoxMDYyMjAwMDExMjAwMDAyMjQwMjAwMTIyNDAyMDAwNkEzNjIwMDNGOTMKKzoxMDYyMzAwMDkyMDMwMDFCMjQwQUZGQzAzMDYyMDAzRjAwNEFGODI1ODkKKzoxMDYyNDAwMEEzN0YwMDNFOTIxOTAwMDMzMzM4MDAwMTE3MDAwMTFDQTAKKzoxMDYyNTAwMDAwMDAwMDAwOEUwMjAwMDhBRTgyMDAwODNDMDIwODAwMjgKKzoxMDYyNjAwMDhDNDI1Q0MwMTA0MDAxMUIwMDAwMDAwMDAwMDIyMUMyRjMKKzoxMDYyNzAwMEE3NjQwMDA4OEUwRDAwMEMyNDBCMDAwMTI0MTQwMDE0RTgKKzoxMDYyODAwMEFGNkQwMDJDOEUwODAwMTBBRjY4MDAzMDk2MDUwMDE2MjgKKzoxMDYyOTAwMEE3NjUwMDM4OTYwQzAwMTRBNzZDMDAzQUFGNkIwMDBDOTEKKzoxMDYyQTAwMEE3NkIwMDEwQTc2QjAwMTJBNzZCMDAxNEE3NkIwMDE2NUEKKzoxMDYyQjAwMDEyMjAwMTQ2QTM3NDAwMzQ5MjA2MDAwMzMwQzcwMDAyODYKKzoxMDYyQzAwMDJDRjAwMDAxMjYwMjAwMDg4RjkwMDAxQzBBMDAwMzczQzYKKzoxMDYyRDAwMEFGODIwMDI4OEUxNDAwMDQyNDAzMDA4MUFGNTQwMDIwRjQKKzoxMDYyRTAwMDkzNjgwMDIzMzEwNTAwMTAxMEEwMDEwNzAwMDAwMDAwOTIKKzoxMDYyRjAwMDhGNDQwMUI4MDQ4MEZGRkUzQzA2NDAxRjAwMTEzODJCN0MKKzoxMDYzMDAwMDAwNjYxMDI1M0MxMTEwMDBBRjU0MDE4MEFGODcwMDI4QjMKKzoxMDYzMTAwMEFGNDAwMTg0QUY0MjAxODhBRjUxMDFCODBBMDAwMzc0NTUKKzoxMDYzMjAwMDhGOTEwMDE0OEUwNjAwMDQzQzE5MDAwODAzNTkyMDIxQTcKKzoxMDYzMzAwMEFGNDYwMDIwOEUwNzAwMDg5MDk4MDAwMDI0MEYwMDUwMDAKKzoxMDYzNDAwMDMzMTQwMEZGMTI4RjAxMDIyNDA1MDA4ODhGNDQwMUI4MjYKKzoxMDYzNTAwMDA0ODBGRkZFM0MwRDQwMDkwMDExNjAyQjAwQUQxMDI1QUMKKzoxMDYzNjAwMDNDMTExMDAwQUY0NjAxODBBRjhDMDAyOEFGNDcwMTg0N0MKKzoxMDYzNzAwMEFGNDIwMTg4QUY1MTAxQjgwQTAwMDM3NDhGOTEwMDE0MzUKKzoxMDYzODAwMDhFMDQwMDFDMEUwMDAyM0IwMDAwMDAwMDEwNDAwMEU4REMKKzoxMDYzOTAwMDAwNDA0ODIxOEY5MDAwMUMyNDA1MDA4OThGNEQwMUI4RDIKKzoxMDYzQTAwMDA1QTBGRkZFMDAwMDAwMDBBRjQ5MDE4MDhFMEYwMDFDMTkKKzoxMDYzQjAwMDNDMTQ0MDAxMDAxMTcwMkIwMEI0NDgyNTNDMTExMDAwMjIKKzoxMDYzQzAwMEFGNEYwMTg0QUY4RTAwMjhBRjQ5MDE4OEFGNTEwMUI4QUIKKzoxMDYzRDAwMDBBMDAwMzc0OEY5MTAwMTQ5NjE5MDAwMjNDMTQwODAwRkYKKzoxMDYzRTAwMDI2OTQ1Q0I4MzMzODAwMDQxMzAwMDA4RTNDMDI2MDAwMzEKKzoxMDYzRjAwMDhFMUYwMDFDM0MwMTA4MDBBQzNGNUNCOEFGNUYwMDIwNjIKKzoxMDY0MDAwMDkyMEMwMDEwMjQwQjAwMTQzMTg0MDBGRjE0OEIwMEI4OTAKKzoxMDY0MTAwMDAwMDAwMDAwOTYwOTAwMDIzMTJEMDAwMTE1QTAwMTRFNzgKKzoxMDY0MjAwMDAwMDAwMDAwOEUwMjAwMDRBRTgyMDAwODNDMEUwODAwNEUKKzoxMDY0MzAwMDhEQ0U1Q0MwMTFDMDAxNDQwMDAwMDAwMDhGNjkwMDc0NjMKKzoxMDY0NDAwMDNDMEU4MDAwMjQwNDAwMDEwMTJFNjgyNUFGNkQwMDc0MEQKKzoxMDY0NTAwMEEzNjAwMDA1QUY2NDAwMEMzQzBDMDgwMDhEOEM1Q0MwOTAKKzoxMDY0NjAwMDhGODgwMDFDQTc2NDAwMTAwMDBDNTlDMkE3NjQwMDEyOUEKKzoxMDY0NzAwMEE3NjQwMDE0QTc2NDAwMTZBNzZCMDAwODhEMDMwMDA4MkEKKzoxMDY0ODAwMDI0MDQwMDAyQUY2MzAwMkM4RDBBMDAwQ0FGNkEwMDMwQjgKKzoxMDY0OTAwMDkxMDcwMDEwQTM2NzAwMzQ4RjgyMDAxQzkwNDUwMDExMDMKKzoxMDY0QTAwMEEzNjUwMDM1OEY4NjAwMUM5MEQwMDAxMkEzNzAwMDM2QzMKKzoxMDY0QjAwMDhGOUYwMDFDOTNGOTAwMTNBMzc5MDAzNzhGOTAwMDFDNjUKKzoxMDY0QzAwMDk2MTgwMDE0QTc3ODAwMzg5NjE0MDAxNkE3NzQwMDNBOUUKKzoxMDY0RDAwMDhFMEYwMDE4QUY2RjAwMjQ1NjIwRkRBNUFGODQwMDI4NTIKKzoxMDY0RTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTAwMDAyMDIxRDcKKzoxMDY0RjAwMDhGOTAwMDFDMEEwMDA0QjYwMDAwMjAyMTNDMDUwODAwMTMKKzoxMDY1MDAwMDI0QTU1Q0I4MEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDMzIKKzoxMDY1MTAwMDAwMDAzMDIxMEEwMDAzNzNBRjg2MDAyODNDMDQwODAwMDUKKzoxMDY1MjAwMDhDODQ1Q0I4MEUwMDE1NzQwMDAwMDAwMDhGOTAwMDFDNzUKKzoxMDY1MzAwMDBBMDAwNDkwMDAwMDE4MjEzQzA1MDgwMDI0QTU1Q0I4NUUKKzoxMDY1NDAwMDBFMDAwMjg3MjQwNDAwOEI4RjkwMDAxQzAwMTEzMDJCNUEKKzoxMDY1NTAwMDBBMDAwMzczQUY4NjAwMjgzQzE5MDgwMDhGMzk1Q0I4MjUKKzoxMDY1NjAwMDNDMUYwODAwOEZGRjAwNTAyNENDRkZGRTAzM0Y3ODIxMjIKKzoxMDY1NzAwMDAxRjg3MDI0QUY0RTAwMjgzQzA0MDgwMDhDODQ1Q0I4RkQKKzoxMDY1ODAwMDNDMDkwODAwOEQyOTAwNTAwMDg5NjgyMTMxQTgwMDdGNEUKKzoxMDY1OTAwMDAxMUEyODIxMDBBNzgwMjFBRTA2MDBEOEFGOTAwMEQwQjQKKzoxMDY1QTAwMEFFMDAwMERDMEEwMDAzQzJBRTBDMDEwOEFGNjAwMDg0M0MKKzoxMDY1QjAwMDNDMDUwODAwOENBNTVDQjgzQzA4MDgwMDhEMDgwMDUwMUMKKzoxMDY1QzAwMDI0MENGRjgwM0MwMjAwMEMwMEE4QTAyMTAyOEM1ODI0NUYKKzoxMDY1RDAwMEFGNEIwMDI4OEUxRjAwMTQzMjgzMDA3RjAwN0E1MDIxQjkKKzoxMDY1RTAwMDAxNDI3MDIxQURERjAwRDg4RTE5MDAxNEFGOEUwMEQwQUIKKzoxMDY1RjAwMEFERDkwMERDOEUxODAwMTAyNzBGRkZGRTBBMDAwNDE1MkQKKzoxMDY2MDAwMEFEQ0YwMTA4NTQ4QkZFMkUyNDA1NDAwMDBBMDAwNDQ3M0MKKzoxMDY2MTAwMDI0MDUxMDAwMEUwMDAzMzUwMDAwMDAwMDBBMDAwM0Y4RjYKKzoxMDY2MjAwMDhGOTAwMDFDOEM0NjQ0MkMzQzA1NkM2MjM0QjA3OTcwMTEKKzoxMDY2MzAwMDNDMDEwODAwQUMyMDVDQjgxNEQwMDAwODI0MDQwMDAyMUYKKzoxMDY2NDAwMDk3ODgwMDM0OTc4QTAwMkMwMjgwMjgyMTAxMEEzODJCNzEKKzoxMDY2NTAwMDEwRTAwMDExMjQwNDAwOTIyNDA0MDAwMjBFMDAwQzlBQTEKKzoxMDY2NjAwMDI0MDUwMTQwM0MwMTA4MDBBQzIyNUNCOEFGNDIwMDIwODgKKzoxMDY2NzAwMDNDMDMwODAwOEM2MzVDQjgxMDYwMDAwNTI0MDQwMDgzQjAKKzoxMDY2ODAwMDBFMDAwODY1MDAwMDAwMDAxMDQwMDAwOTI0MDQwMDgzOEIKKzoxMDY2OTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTAwMDAwMDAwNjYKKzoxMDY2QTAwMDhGOTAwMDFDMDAxMTIwMkIwQTAwMDM3M0FGODQwMDI4NzgKKzoxMDY2QjAwMDBFMDAwODY5MDAwMDAwMDAwQTAwMDU5NzhGOTAwMDFDN0EKKzoxMDY2QzAwMDhFMDQwMDA4MEUwMDAyM0IwMDAwMDAwMDBBMDAwNTJFQTgKKzoxMDY2RDAwMEFFODIwMDA4M0MwNTA4MDAyNEE1NUNCODBFMDAwMjMwMUMKKzoxMDY2RTAwMDI0MDQwMDg3OEY5MDAwMUMwQTAwMDU0QTAwMTExMDJCMUIKKzoxMDY2RjAwMDBFMDAwODZEMDAwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4RjEKKzoxMDY3MDAwMDBBMDAwNjNEMjQwNDAwOEIwRTAwMDI1MDAyODAyMDIxNjYKKzoxMDY3MTAwMDkzNzAwMDIzMDI4MDIwMjEzNjBEMDAxMDBFMDAwMjU5RDQKKzoxMDY3MjAwMEEzNkQwMDIzOEY5MDAwMUMwQTAwMDU1MzAwMDAxODIxNjAKKzoxMDY3MzAwMDI0MDQwMDA0MEUwMDBDOUEyNDA1MDAzMDE0NDAwMDJBQTIKKzoxMDY3NDAwMDAwNDA0ODIxOEY5MDAwMUMwQTAwMDU3RTI0MDUwMDgzMkMKKzoxMDY3NTAwMDkyMDUwMDBDMzBCRjAwMDExM0UwMDAwMzAwMDAwMDAwQjAKKzoxMDY3NjAwMDk2MDIwMDBFQTQ4MjAwMkM5MjBBMDAwQzMxNDgwMDAyMEUKKzoxMDY3NzAwMDExMDBGRUY2MDAwMDI4MjE5NjBCMDAxMjhFMDMwMDE0NzMKKzoxMDY3ODAwMEE0OEIwMDFBMEEwMDA1NkFBQzgzMDAxQzhGODMwMDM4QjIKKzoxMDY3OTAwMDhGODcwMDMwMTA2N0ZFODgwMDAwMjAyMTNDMDkwODAwMjgKKzoxMDY3QTAwMDI1Mjk1QzNDMDAwMzIwQzAwMDg5MzAyMThDRDQwMDAwRTYKKzoxMDY3QjAwMDEyODUwMDVFMjQ3ODAwMDEzMzAzMDAwRjU0NjdGRkZBNEUKKzoxMDY3QzAwMDAwMDMyMEMwMEEwMDA1MDUwMDAwMjAyMTNDMDUwODAwNDgKKzoxMDY3RDAwMDI0QTU1Q0I4MEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDNjAKKzoxMDY3RTAwMDBBMDAwNTRBMDAwMDEwMjEzQzBCMDAwODAzNEIyMDIxNDEKKzoxMDY3RjAwMDI0MDMwMDUwMjQwQTAwMDFBRjQyMDAyMEEwODMwMDAwQkYKKzoxMDY4MDAwMEEwOEEwMDAxOEY4ODAwMUM5MTA3MDAwNEEwODcwMDE4NEYKKzoxMDY4MTAwMDhGODIwMDFDOTA0NTAwMDVBMDg1MDAxOThGODYwMDFDMDIKKzoxMDY4MjAwMDkwREYwMDA2QTA5RjAwMUE4Rjk5MDAxQzkzMzgwMDA3ODQKKzoxMDY4MzAwMEEwOTgwMDFCOEY5NDAwMUM5MjhGMDAwOEEwOEYwMDFDNTIKKzoxMDY4NDAwMDhGOTAwMDFDOTIwRTAwMDlBMDhFMDAxRDhGOEQwMDFDRTEKKzoxMDY4NTAwMDkxQUMwMDBBQTA4QzAwMUU4RjhCMDAxQzNDMEMwODAwMjEKKzoxMDY4NjAwMDI1OEM1QzNDOTE2MzAwMEIzQzBCMDgwMDI1NkI1QzM4NkQKKzoxMDY4NzAwMEEwODMwMDFGOEY4QTAwMUM5MTQ4MDAwQ0EwODgwMDIwNzQKKzoxMDY4ODAwMDhGODcwMDFDOTBFNTAwMERBMDg1MDAyMThGODIwMDFDRTEKKzoxMDY4OTAwMDI0MDU0NjQ2OTA0NjAwMEVBMDg2MDAyMjhGOUYwMDFDQ0QKKzoxMDY4QTAwMDkzRjkwMDBGQTA5OTAwMjM4Rjk4MDAxQzkzMTQwMDEwRjcKKzoxMDY4QjAwMEEwOTQwMDI0OEY4RjAwMUM5MUYwMDAxMUEwOTAwMDI1NUYKKzoxMDY4QzAwMDhGOTAwMDFDOEY4RTAwMzA4Rjk5MDAzODk2MEQwMDE0MjkKKzoxMDY4RDAwMDAwMEUxOEMwMjVDODAwMDFBNDhEMDAyODk2MEEwMDE2RDUKKzoxMDY4RTAwMDAwNkMzMDIxMDA2QkY4MjFBNDhBMDAyQTk2MDcwMDE4NUEKKzoxMDY4RjAwMDMxMDgwMDBGQTQ4NzAwMkNBNDg1MDAyRThFMDIwMDFDRjYKKzoxMDY5MDAwMEFDQzkwMDAwQUY4ODAwMzAxMTE5MDAwM0FGRTIwMDAwRUQKKzoxMDY5MTAwMDBBMDAwNTdFMDAwMDI4MjEyNTBDMDAwMTMxODQwMDBGQUIKKzoxMDY5MjAwMDAwMDAyODIxMEEwMDA1N0VBRjg0MDAzODNDMDcwODAwREIKKzoxMDY5MzAwMDI0RTc1QzM4MDA4NzgwMjEwMDAwMjAyMUFDQzAwMDAwRTMKKzoxMDY5NDAwMDBBMDAwNTA1QUUwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4NUYKKzoxMDY5NTAwMDBBMDAwNjNEMjQwNDAwODc4RTA0MDAwNDBFMDAwMjNCNUEKKzoxMDY5NjAwMDAwMDAwMDAwMEEwMDA1QTJBRTgyMDAwODMwODRGRkZGOEMKKzoxMDY5NzAwMDMwQzYwMEZGOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwMEQKKzoxMDY5ODAwMDAxMDQzMDI1M0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwRUYKKzoxMDY5OTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4QTcKKzoxMDY5QTAwMEFGNDMwMUI4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0ODAKKzoxMDY5QjAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxMzEKKzoxMDY5QzAwMDAwMTAxMDJCOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4RTAKKzoxMDY5RDAwMDI3QkQwMDE4M0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDNUEKKzoxMDY5RTAwMDhGODIwMDFDMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDQTQKKzoxMDY5RjAwMDBFMDAwNkYyOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0MDcKKzoxMDZBMDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFQTQKKzoxMDZBMTAwMDM0NDcwMTAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwNDAKKzoxMDZBMjAwMDAwMDAwMDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwREIKKzoxMDZBMzAwMEFGNDQwMDM4QUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxNUYKKzoxMDZBNDAwMDhGNEIwMDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGRkQKKzoxMDZBNTAwMDI0MDhGRkZGOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0QTEKKzoxMDZBNjAwMEFDRUMwMDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwQTkKKzoxMDZBNzAwMDAwMDAwMDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwN0QKKzoxMDZBODAwMDAwMDAwMDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGQTYKKzoxMDZBOTAwMDAwOEUyMDIxMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4M0QKKzoxMDZBQTAwMDAwMDAwMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MjkKKzoxMDZBQjAwMEFGQjAwMDEwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxMkQKKzoxMDZBQzAwMDE0NDAwMDA2M0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDNTYKKzoxMDZBRDAwMDAwRTgzMDI0MzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDRTEKKzoxMDZBRTAwMDI0MDkwMDAxQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0RTkKKzoxMDZBRjAwMDhENzAwMDBDMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4QzgKKzoxMDZCMDAwMDEwODAwMDA3OEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFRTcKKzoxMDZCMTAwMDMwQ0UwMDA3MzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwNTMKKzoxMDZCMjAwMDI0MDQwMDhCMDIwMDI4MjEwRTAwMDZGMjI0MDYwMDAzMzQKKzoxMDZCMzAwMDAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAKKzoxMDZCNDAwMDAzRTAwMDA4MjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCRDkKKzoxMDZCNTAwMDNDMDMwMDIwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxOEQKKzoxMDZCNjAwMEFGODIwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDZCNzAwMDNDMUYwMTUwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFMjMKKzoxMDZCODAwMEFGNDcwMDM4MDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDOUIKKzoxMDZCOTAwMEFGNTkwMDMwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwQTIKKzoxMDZCQTAwMDEwQzBGRkZEMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGMTkKKzoxMDZCQjAwMDI0MDNGRkZGOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0NDIKKzoxMDZCQzAwMEFEMEIwMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFNTkKKzoxMDZCRDAwMEFEMDkwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMDZCRTAwMDNDMDcwMDIwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNzFBRUQKKzoxMDZCRjAwMDAxNDAyMDIxMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkYyODEKKzoxMDZDMDAwMDI0MDYwMDAzMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0NTEKKzoxMDZDMTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4N0IKKzoxMDZDMjAwMEFGQjIwMDE4MzA5MkZGRkZBRkIxMDAxNEFGQkYwMDIwMjkKKzoxMDZDMzAwMEFGQjMwMDFDQUZCMDAwMTAxMjQwMDAyQzAwMDA4ODIxNDAKKzoxMDZDNDAwMDBBMDAwN0IyMjQxMzAwMDE1MEIzMDA0MDhDRTUwMDBDODkKKzoxMDZDNTAwMDAwMDAwMDBEMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwMjkKKzoxMDZDNjAwMDAyMzIzODJCMTBFMDAwMjFBRjk4MDAxQzhGODIwMDE0RjQKKzoxMDZDNzAwMDE0NDAwMDFFOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwNUYKKzoxMDZDODAwMDhDRTQwMDAwMDA4NjI4MjQxNEEzMDAxODhGODUwMDNDQTMKKzoxMDZDOTAwMDAwMDQ0NDAyM0MwOTgwMDAwMDg5ODAyNDE0QTBGRkVBMUIKKzoxMDZDQTAwMDMxMDYwMEZGMjQwQTAwMDIxMENBMDAyRTI4Q0IwMDAzODAKKzoxMDZDQjAwMDExNjAwMDE2MjQwQzAwMDMxNEQzRkZFNzI2MzkwMDAxRUQKKzoxMDZDQzAwMDAyMDAyODIxMEUwMDA3MDAyNDA0MDAwMThGODcwMDFDMDkKKzoxMDZDRDAwMEFGODIwMDNDMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwNDkKKzoxMDZDRTAwMDAyMzIzODJCMTRFMEZGRTFBRjk4MDAxQzAyMjAxMDIxODMKKzoxMDZDRjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MUIKKzoxMDZEMDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODEwQ0MwMDFBNDcKKzoxMDZEMTAwMDI0MEQwMDA0MTRDREZGRDAyNjM5MDAwMTMwOEVGRkZGNzIKKzoxMDZEMjAwMDAwMEUxOUMwOEY0NDAxQjgwNDgwRkZGRTNDMEYxMDAwMTQKKzoxMDZEMzAwMDNDMTAyMDA0QUY0MzAxODBBRjQwMDE4NEFGNTAwMTg4NzQKKzoxMDZENDAwMEFGNEYwMUI4MEEwMDA3QUQyNjM5MDAwMTBFMDAwNkYyNjgKKzoxMDZENTAwMDI0MDQwMDg0MTYwMEZGQkY4Rjg3MDAxQzBBMDAwN0FDQzQKKzoxMDZENjAwMEFGODAwMDNDMDIwMDI4MjEwRTAwMDcwMDAwMDAyMDIxMTcKKzoxMDZENzAwMDBBMDAwN0NCOEY4NzAwMUMwRTAwMDc0MDAyMDAyMDIxNkQKKzoxMDZEODAwMDhGODcwMDFDMEEwMDA3Q0NBRjgyMDAzQzMwODJGRkZGRDcKKzoxMDZEOTAwMDE0NDAwMDAzMDAwMDE4MjEwMDA0MjQwMjI0MDMwMDEwMDIKKzoxMDZEQTAwMDMwODUwMEZGMTRBMDAwMDUzMDg3MDAwRjI0NjYwMDA4MUUKKzoxMDZEQjAwMDAwMDQyMjAyMzBDMzAwRkYzMDg3MDAwRjE0RTAwMDA1RkEKKzoxMDZEQzAwMDMwODkwMDAzMjQ2ODAwMDQwMDA0MjEwMjMxMDMwMEZGMUQKKzoxMDZERDAwMDMwODkwMDAzMTUyMDAwMDUzODhCMDAwMTI0NkEwMDAyNjkKKzoxMDZERTAwMDAwMDQyMDgyMzE0MzAwRkYzODhCMDAwMTMxNjQwMDAxMzAKKzoxMDZERjAwMDEwODAwMDAyMjQ2QzAwMDEzMTgzMDBGRjAzRTAwMDA4RDIKKzoxMDZFMDAwMDAwNjAxMDIxMzA4QkZGRkYwMDBCMzk0MjMwRTYwMEZGOUQKKzoxMDZFMTAwMDNDMDkwODAwMjUyOTVCQjgwMDA2NDA4MDAxMDk2MDIxNzMKKzoxMDZFMjAwMDhEODcwMDAwMzE2NDAwMUYyNDBBMDAwMTAwOEExODA0QzUKKzoxMDZFMzAwMDMwQTUwMEZGMDBFMzIwMjUxNEEwMDAwMjAwMDMxMDI3NjYKKzoxMDZFNDAwMDAwRTIyMDI0MjQwRjAwMDEwMENGNzAwNDAxMDk2ODIxMTIKKzoxMDZFNTAwMDAwMEUyODI3MTQ4MDAwMDVBREE0MDAwMDhGODYwMDBDQ0EKKzoxMDZFNjAwMDAwQTYxMDI0MDNFMDAwMDhBRjgyMDAwQzhGODgwMDBDRkQKKzoxMDZFNzAwMDAxQzgxMDI1MDNFMDAwMDhBRjgyMDAwQzNDMDYwMDFGOEIKKzoxMDZFODAwMDNDMDM2MDAwMzA4NEZGRkYzNEM1RkY4MDI0MDIwMDIwRjMKKzoxMDZFOTAwMEFDNjAyMDA4QUM2MDIwMENBQzYwMjAxMEFDNjUyMDE0MDUKKzoxMDZFQTAwMEFDNjQyMDE4QUM2MjIwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDZFQjAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODI0MDJGRkZGRjgKKzoxMDZFQzAwMEFGQkYwMDEwQUY4MjAwMEMwMDAwMjAyMTNDMDYwODAwN0MKKzoxMDZFRDAwMDI0QzY1QkI4MjQwNUZGRkYyNDg5MDAwMTAwMDQ0MDgwMUMKKzoxMDZFRTAwMDMxMjRGRkZGMDEwNjE4MjEyQzg3MDAyMDE0RTBGRkZBNEYKKzoxMDZFRjAwMEFDNjUwMDAwMEUwMDA4MzYwMDAwMjAyMTI0MDIwMDAxQ0QKKzoxMDZGMDAwMDNDMDQ2MDAwMjQwNTAwMjBBQzgyMjAxOEFDODUyMDAwRTEKKzoxMDZGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0NEEwMDAxMDIKKzoxMDZGMjAwMDMxNDJGRkZGMkM0NjA0MDAxNEMwRkZGNzhGQkYwMDEwNTIKKzoxMDZGMzAwMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAwODJDNjIwNDAwQkUKKzoxMDZGNDAwMDAzRTAwMDA4Mzg0MjAwMDE4RjgzMDAwODI0NjIwMDAxM0EKKzoxMDZGNTAwMDAzRTAwMDA4QUY4MjAwMDg4RjgzMDAwODI0NjJGRkZGNkYKKzoxMDZGNjAwMDAzRTAwMDA4QUY4MjAwMDgyN0JERkZFMEFGQjEwMDE0QzYKKzoxMDZGNzAwMEFGQkYwMDE4QUZCMDAwMTA4RjZCMDAzMDNDMDY2MDAwNTAKKzoxMDZGODAwMDAwODA4ODIxQUNDQjIwMDg4RjZBMDAyQzNDMDI4MDAwNTYKKzoxMDZGOTAwMDI0MDMwMDA4QUNDQTIwMEM5NzY5MDAzQTk3NjgwMDM4QUYKKzoxMDZGQTAwMDAwMDkyQzAwMzEwN0ZGRkYwMEE3MjAyNUFDQzQyMDEwRUEKKzoxMDZGQjAwMEFDQzIyMDE0QUNDMzIwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDZGQzAwMDAwMDAwMDAwM0MwMzYwMDA4QzZEMjAwMDMxQUMwMDA4MjQKKzoxMDZGRDAwMDE1ODBGRkY5MDAwMDAwMDA4QzZFMjAxNDA1QzAwMDIwMTEKKzoxMDZGRTAwMDAwMDAwMDAwMEUwMDA3RkE4Rjg0MDAwQzAwMDI0MDgwQjEKKzoxMDZGRjAwMDNDMDkwODAwMjUyOTVCQjgwMTA5MzgyMThDRTQwMDAwMTAKKzoxMDcwMDAwMDBFMDAwN0ZBMDAwMjgxNDAwMjAyMjAyMTMwOTBGRkZGQUIKKzoxMDcwMTAwMDAyMDAyMDIxMEUwMDA4MTgwMDAwMjgyMTNDMEM4MDAwRUUKKzoxMDcwMjAwMDAyMkM1ODI1MzIxMEZGRkYzQzExNjAwMDI0MEEwMDIwN0EKKzoxMDcwMzAwMEFFMkIyMDE0QUUzMDIwMThBRTJBMjAwMDAwMDAwMDAwMzUKKzoxMDcwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE4QTcKKzoxMDcwNTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOUUKKzoxMDcwNjAwMDhDNjYyMDE0M0MwMjAwMUYzNDQzRkY4MDNDMUZGRkU4NjUKKzoxMDcwNzAwMDAwQzNDMDI0MzdGOTA4MDAwMzE5ODAyMTAwMTA3OUMyMjkKKzoxMDcwODAwMDNDMEM4MDAwMDIyQzU4MjUzMUYwRkZGRjNDMTE2MDAwQzEKKzoxMDcwOTAwMDI0MEEwMDIwQUUyQjIwMTRBRTMwMjAxOEFFMkEyMDAwODcKKzoxMDcwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAxMDIxQUQKKzoxMDcwQjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4REMKKzoxMDcwQzAwMDI3QkQwMDIwMjdCREZGRThBRkIwMDAxMDM0MDJGRkZGNEUKKzoxMDcwRDAwMDMwOTBGRkZGQUZCRjAwMTQxMjAyMDAwNjAyMDAyMDIxMTMKKzoxMDcwRTAwMDBFMDAwODM2MDAwMDAwMDAwMjAwMjAyMTBFMDAwODE4RTMKKzoxMDcwRjAwMDI0MDUwMDAxOEY4NDAwMDg4RkJGMDAxNDhGQjAwMDEwOUEKKzoxMDcxMDAwMDI0ODNGRkZGMjdCRDAwMTgwM0UwMDAwOEFGODMwMDA4QjkKKzoxMDcxMTAwMDAwMDQzOUMyMzBFNjAwM0YwMDA0M0I0MjAwMDcxODQwM0IKKzoxMDcxMjAwMDI0MDIxMDAwMkNDNDAwMjAyNEM4RkZFMEFGNDIwMDJDMzEKKzoxMDcxMzAwMDI0NjMwMDAxMTQ4MDAwMDMzMEE5MDBGRjAwMDcxODQwRjkKKzoxMDcxNDAwMDMxMDYwMEZGMDAwMzYwODAyNDA4MDAwMTAxOUE1ODIxRTUKKzoxMDcxNTAwMDNDMEEwMDBFMDBDODI4MDQwMTZBMzgyMTExMjAwMDA1RUQKKzoxMDcxNjAwMDAwMDUzMDI3OENFOTAwMDAwMTI1MzAyNTAzRTAwMDA4RTgKKzoxMDcxNzAwMEFDRTYwMDAwOENFRTAwMDAwMUM2NjgyNDAzRTAwMDA4QzUKKzoxMDcxODAwMEFDRUQwMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwQUEKKzoxMDcxOTAwMDNDMDQ2MDAwOEM4NTA4MDgzNDAzRjAwMDMwQTJGMDAwNDUKKzoxMDcxQTAwMDUwNDMwMDA2MjQwMjAwMDE4Qzg3MDgwODM0MDRFMDAwRTQKKzoxMDcxQjAwMDMwRTZGMDAwMTBDNDAwMUUyNDAyMDAwMkFGODIwMDQwM0UKKzoxMDcxQzAwMDNDMTA2MDAwM0MwQTAyMDBBRTBBMDgxNDI0MDkxMDAwQkEKKzoxMDcxRDAwMDNDMDgwMDBFOEUwMzQ0MDAwMzQ4MjAyMUFGNDkwMDJDRDgKKzoxMDcxRTAwMDI0MDUwMTIwMEUwMDBDRTAwMDAwMzAyMThGODMwMDQwQjgKKzoxMDcxRjAwMDEwNjAwMDA0M0MwMjE2OTEyNDBCMDAwMTEwNkIwMDBFN0QKKzoxMDcyMDAwMDNDMDIzRDZDMzQ0RjAwOTBBRTBGNDQwODhGQkYwMDE0MTkKKzoxMDcyMTAwMDhGQjAwMDEwM0MwQzYwMDAyNDBFMTAwMDNDMEQwMjAwRUEKKzoxMDcyMjAwMDI3QkQwMDE4QUQ4RTQ0MjAwM0UwMDAwOEFEOEQwODEwODYKKzoxMDcyMzAwMDBBMDAwOTA3QUY4MDAwNDAzQzAyMThEQTM0NEYwMDkwODIKKzoxMDcyNDAwMEFFMEY0NDA4OEZCRjAwMTQ4RkIwMDAxMDNDMEM2MDAwREMKKzoxMDcyNTAwMDI0MEUxMDAwM0MwRDAyMDAyN0JEMDAxOEFEOEU0NDIwMDYKKzoxMDcyNjAwMDAzRTAwMDA4QUQ4RDA4MTAwQTAwMDhEQjI0MDUwMDAxQ0EKKzoxMDcyNzAwMDBBMDAwOERCMDAwMDI4MjEzQzA4MDgwMDI1MDg1RkM0M0MKKzoxMDcyODAwMDI0MDRGRkZGMDEwMDE4MjEyNDAyMDAxRTI0NDJGRkZGRjYKKzoxMDcyOTAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDcwODAwQzcKKzoxMDcyQTAwMDI0RTc2MDQwOENFNUZGRkMyNDA0MDAxQzI0MDYwMDAxNTgKKzoxMDcyQjAwMDMwOEEwMDFGMDE0NjQ4MDQyNDg0MDAwMTAwMDkxMDI3NzkKKzoxMDcyQzAwMDJDODMwMDIwMTQ2MEZGRkEwMEEyMjgyNEFDRTVGRkZDMDgKKzoxMDcyRDAwMDNDMDU2NjY2MzRBNDYxNkUzQzA2MDgwMDI0QzY2MTAwNjUKKzoxMDcyRTAwMEFGODQwMDU4QUY4ODAwOUMyNDA0RkZGRjAwQzAxODIxMjEKKzoxMDcyRjAwMDI0MDIwMDFGMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEOTQKKzoxMDczMDAwMDI0NjMwMDA0M0MwNzY2NjYzQzA1MDgwMDI0QTU2MEMwQjEKKzoxMDczMTAwMEFGODYwMDQ4MzRFNjYxNkVBRjg2MDA5ODI0MDRGRkZGMTQKKzoxMDczMjAwMDAwQTAxODIxMjQwMjAwMEYyNDQyRkZGRkFDNjQwMDAwREIKKzoxMDczMzAwMDA0NDFGRkZEMjQ2MzAwMDQzQzBCNjY2NjNDMDYwODAwMjQKKzoxMDczNDAwMDI0QzY2MDQwMzU2ODYxNkVBRjg1MDBBNEFGODgwMDcwQzgKKzoxMDczNTAwMDI0MDRGRkZGMDBDMDE4MjEyNDAyMDAxRjI0NDJGRkZGNjUKKzoxMDczNjAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMEQ2NjY2MkMKKzoxMDczNzAwMDNDMEEwODAwMjU0QTYxODAzNUFDNjE2RUFGODYwMDkwRkEKKzoxMDczODAwMEFGOEMwMDVDMjQwNEZGRkYwMTQwMTgyMTI0MDIwMDAzOUQKKzoxMDczOTAwMDI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0QUQKKzoxMDczQTAwMDNDMDkwODAwMjUyOTYxOTA4RDI3RkZGQzI0MDQwMDA2NzQKKzoxMDczQjAwMDI0MDUwMDAxMzA5OTAwMUYwMzI1QzAwNDI0ODQwMDAxMjYKKzoxMDczQzAwMDAwMTg3ODI3MkM4RTAwMjAxNUMwRkZGQTAwRUYzODI0MTMKKzoxMDczRDAwMEFEMjdGRkZDM0MwOTY2NjYyNDAzMDQwMDI0MDQwM0RDOUIKKzoxMDczRTAwMDI0MDUwMjAwMjQwNjAwNjYzNTIyNjE2RTNDMDgwODAwNzAKKzoxMDczRjAwMDI1MDg1Q0M0QUY4MjAwNzRBRjgzMDA0NEFGODMwMDZDODcKKzoxMDc0MDAwMEFGODMwMDUwQUY4MzAwODRBRjhBMDA4Q0FGODQwMDY0RTgKKzoxMDc0MTAwMEFGODUwMDRDQUY4NjAwNTRBRjg0MDA3OEFGODUwMDYwMjQKKzoxMDc0MjAwMEFGODYwMDgwMDEwMDE4MjEyNDAyMDAwMjI0NDJGRkZGRTEKKzoxMDc0MzAwMEFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDI0MDQwMDAzNDkKKzoxMDc0NDAwMDI0MDMwMDBDM0MwQTA4MDAyNTRBNUNEMEFGOEEwMDY4N0YKKzoxMDc0NTAwMDBBMDAwOUFFMjQwNUZGRkYwMDA0MTg4MDI0ODQwMDAxRkYKKzoxMDc0NjAwMDAwNjg1ODIxMkM4NzAwQzAxNEUwRkZGQkFENjUwMDAwQzgKKzoxMDc0NzAwMDNDMEU2NjY2MzVDRDYxNkUyNDBDMTdBMDI0MDgxODAwRkEKKzoxMDc0ODAwMEFGOEQwMDg4QUY4QzAwOTQwM0UwMDAwOEFGODgwMDdDQ0IKKzoxMDc0OTAwMDI0ODQwMDdGMDAwNDIxQzIwMDAwNDAyMTAwMDAzMDIxMkMKKzoxMDc0QTAwMDAwMDAzODIxMDAwMDI4MjEwQTAwMDlDNUFGODQwMEEwOEYKKzoxMDc0QjAwMDEwNjAwMDA2MjRFNzAwMDEwMEM0MzAyMTI0QTUwMDAxNkIKKzoxMDc0QzAwMDJDQzIwQkY1MTQ0MEZGRkEyQ0EzMDA2NjNDMDkwODAwRkYKKzoxMDc0RDAwMDI1Mjk2MTgwMDEyMDE4MjEyNDAyMDAwMzI0NDJGRkZGOTYKKzoxMDc0RTAwMEFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDEwRTAwMDFBQkEKKzoxMDc0RjAwMDI0RTNGRkZGMDAwMzI5NDIxMEEwMDAwQTAwMDAyMDIxMUUKKzoxMDc1MDAwMDI0MDZGRkZGM0MwMzA4MDAyNDYzNjE4MDI0ODQwMDAxRkIKKzoxMDc1MTAwMDAwODU1MDJCQUM2NjAwMDAyNTA4MDAwMTE1NDBGRkZCREMKKzoxMDc1MjAwMDI0NjMwMDA0MzBFMjAwMUYxMDQwMDAwODAwMDg2ODgwNTcKKzoxMDc1MzAwMDI0MEMwMDAxMDA0QzM4MDQwMDA4NTg4MDAxNjkyODIxRkYKKzoxMDc1NDAwMDI0RTZGRkZGMDNFMDAwMDhBQ0E2MDAwMDAxQTk0MDIxRUIKKzoxMDc1NTAwMDI0MDlGRkZGQUQwOTAwMDAwM0UwMDAwODAwMDAwMDAwNUYKKzoxMDc1NjAwMEFGNDQwMDI4M0MwNDAwMEMwMzQ0MjAyMTAwMDUyODgyN0QKKzoxMDc1NzAwMDBBMDAwQ0UwMDAwMDMwMjEwMDA0MjE4MDNDMDM2MDAwODAKKzoxMDc1ODAwMEFDNjQxMDA4MDAwMDAwMDAwMDA1Mjk4MEFDNjUxMDBDRjgKKzoxMDc1OTAwMDAwMDAwMDAwMDNFMDAwMDg4QzYyMTAwQzI3QkRGRkU4MkIKKzoxMDc1QTAwMDAwODAyODIxMjQwNDAwMzhBRkJGMDAxNDBFMDAwOUY1MjQKKzoxMDc1QjAwMEFGQjAwMDEwMjQwNDBFMDBBRjQ0MDAyODNDMTAwMDBDQjMKKzoxMDc1QzAwMDAzNTAyMDIxMjQwNTAwMTAwRTAwMENFMDAwMDAzMDIxQTMKKzoxMDc1RDAwMDAzNTAxMDIxQUM0MDAwMDBBQzQwMDAwNDI0MDQwMDM4RUIKKzoxMDc1RTAwMDhGQkYwMDE0OEZCMDAwMTAyNDA1M0ZGRjI3QkQwMDE4ODcKKzoxMDc1RjAwMDBBMDAwOUY1OEM0MzAwMDAwMDA0MjE4MDNDMDM2MDAwNzAKKzoxMDc2MDAwMEFDNjQxMDA4MDAwMDAwMDA4QzYyMTAwQzAzRTAwMDA4NUQKKzoxMDc2MTAwMDAwMDIxMTgyMjdCREZGQzhBRkI0MDAyMDhGOTQwMDY4MUMKKzoxMDc2MjAwMEFGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODAwMDBCODIxQzUKKzoxMDc2MzAwMDAwODBCMDIxMjQxRTAwQzBBRkJGMDAzNEFGQjUwMDI0Q0QKKzoxMDc2NDAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwNjAKKzoxMDc2NTAwMDBBMDAwQTMyQUZBNTAwM0M1MDQwMDAwMThGOTQwMDY4MzgKKzoxMDc2NjAwMDI3REVGRkZGMTNDMDAwMjgyNjk0MDAwNDhFOTIwMDAwM0UKKzoxMDc2NzAwMDNDMDMwODAwMjQ2MzVGQzAxMjQwRkZGNzAyODMxMDJCMTUKKzoxMDc2ODAwMDNDMDQwODAwMjQ4NDVDQzQwMjg0MTAyMzAwMDJBOEMwQzcKKzoxMDc2OTAwMDAwMDA5ODIxMEEwMDBBNDEyNDExMDAwMTAwMTE4ODQwQ0QKKzoxMDc2QTAwMDEyMjAwMDI2MDAwMDAwMDAwMkIzODAyMTAyNTEyODI0OEQKKzoxMDc2QjAwMDAyMDAyMDIxMTBBMEZGRjkyNjczMDAwMTBFMDAwOUZFMzAKKzoxMDc2QzAwMDAwMDAwMDAwMDAxNjY4NDAzMkVDMDAwMTAxQUMyMDIxRUYKKzoxMDc2RDAwMDBFMDAwOUY1MDIwMDI4MjE4Rjg5MDA5NDI2RjcwMDAxODkKKzoxMDc2RTAwMDhGQTYwMDNDM0FFQjAwMDEzMTZBMDAwMTI1MjhGRkZGMUMKKzoxMDc2RjAwMDAwMTEzODI3MDJDQUIwMjFBRjg4MDA5NDE2RTZGRkU3RDAKKzoxMDc3MDAwMDAyNDc5MDI0QUU5MjAwMDAwMkUwMTAyMThGQkYwMDM0QTcKKzoxMDc3MTAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0QTUKKzoxMDc3MjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0RUIKKzoxMDc3MzAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODNDMEUwODAwQTEKKzoxMDc3NDAwMDI1Q0U1RkMwMDI4RTEwMkIwQTAwMEEyREFFOTIwMDAwREIKKzoxMDc3NTAwMDI3QkRGRkQ4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwRkQKKzoxMDc3NjAwMEFGQjMwMDFDQUZCMjAwMTgwMEEwODgyMTEwQTAwMDFGMEEKKzoxMDc3NzAwMDAwMDQ4MDQwM0MxMzA4MDAyNjczNUNDNDBBMDAwQTdBQTcKKzoxMDc3ODAwMDI0MTIwMDAxMTIyMDAwMTkyNjEwMDAwMTBFMDAwQTE1MTMKKzoxMDc3OTAwMDAyMDAyMDIxMDAwMjMxNDIyNDQ0RkZBMDAwMDYxODgwOEMKKzoxMDc3QTAwMDMwNDUwMDFGMkM4MjE3QTEwMDczMTgyMTI2MzFGRkZGREUKKzoxMDc3QjAwMDEwNDBGRkY0MDBCMjMwMDQ4QzY5MDAwMDAyMDAyMDIxNjgKKzoxMDc3QzAwMDI0MDUzRkZGMDEyNjQwMjQxNTAwRkZFRTAxMjYzODI1NDEKKzoxMDc3RDAwMDBFMDAwOUY1QUM2NzAwMDA4RjhBMDA5NDI2MTAwMDAxQTYKKzoxMDc3RTAwMDI1NDcwMDAxMTYyMEZGRTlBRjg3MDA5NDhGQkYwMDIwRDYKKzoxMDc3RjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMkYKKzoxMDc4MDAwMDAzRTAwMDA4MjdCRDAwMjg4Rjg1MDA5QzAwODA1ODIxRDgKKzoxMDc4MTAwMDAwMDA0MDIxMDAwMDQ4MjEyNDBBMDAxRjNDMEMwODAwMDEKKzoxMDc4MjAwMDI1OEM2MDNDM0MwRDA4MDAyNUFENUZDNDhDQTYwMDAwOTMKKzoxMDc4MzAwMDUwQzAwMDE0MDAwMDQwMjEwMEFEMTAyMzAwMDIzOEMwRTkKKzoxMDc4NDAwMDI0MDMwMDAxMEEwMDBBQjMwMDAwMjAyMTE1MDAwMDAzRjAKKzoxMDc4NTAwMDAwRTQxMDIxMjQ0ODIwMjQwMDAwNDgyMTI1MjkwMDAxQUIKKzoxMDc4NjAwMDUxMkIwMDEzMjUwNkRGREMxMDYwMDAwNjI0ODQwMDAxODQKKzoxMDc4NzAwMDAwQzM3MDI0MTVDMEZGRjUwMDAzMTg0MDBBMDAwQUIxQzgKKzoxMDc4ODAwMDAwMDA0MDIxMTBBQzAwMjYyNEEzMDAwNDAwNjAyODIxNDEKKzoxMDc4OTAwMDI1NEFGRkZGMTU0MEZGRTVBRjg1MDA5QzUxMkIwMDA0RjIKKzoxMDc4QTAwMDI1MDZERkRDMDAwMDQwMjEwM0UwMDAwODAxMDAxMDIxNzQKKzoxMDc4QjAwMDAwMDY2MTQyMzBDNTAwMUYwMDBDNTA4MDNDMDcwODAwRTQKKzoxMDc4QzAwMDI0RTc1RkM0MjQwNDAwMDEwMTQ3MzAyMTExMjAwMDBGODgKKzoxMDc4RDAwMDAwQTQyMDA0M0MwNTA4MDAyNEE1NjA0MDE0ODAwMDA1OTUKKzoxMDc4RTAwMDI1MjlGRkZGMjRDNjAwMDQxMEM1MDAxMTAwMDAwMDAwNzgKKzoxMDc4RjAwMDI0MDQwMDAxOENDRjAwMDAwMDA0QzAyNzAwMDQyMDQwQjUKKzoxMDc5MDAwMDAxRjg2ODI0MTUyMEZGRjVBQ0NEMDAwMDhGOTkwMDc4QjAKKzoxMDc5MTAwMDAxMDAxMDIxMDMyQjQ4MjMwM0UwMDAwOEFGODkwMDc4MDEKKzoxMDc5MjAwMDNDMDUwODAwMjRBNTVGQzQwQTAwMEFCQjAwMDA0MDIxRjIKKzoxMDc5MzAwMDNDMDYwODAwMjRDNjVGQzQwQTAwMEFENDI0MDQwMDAxREYKKzoxMDc5NDAwMDMwODgwMEZGMjQwMjAwMDIxMTAyMDAwQTI0MDMwMDAzMTEKKzoxMDc5NTAwMDExMDMwMDVDOEY4OTAwQTQyNDA0MDAwNDExMDQwMDVGNUIKKzoxMDc5NjAwMDI0MDUwMDA1MTEwNTAwNjcwMDAwMTgyMTAzRTAwMDA4NDgKKzoxMDc5NzAwMDAwNjAxMDIxOEY4OTAwNDgzQzBDMDgwMDI1OEM2MTAwQjQKKzoxMDc5ODAwMDNDMDQwODAwMjQ4NDYxODAyNDAzMDAyMDEwNjAwMDBGNjAKKzoxMDc5OTAwMDAwMDA1ODIxMjQwRDAwMDIyNDBFMDAwMzNDMEYwODAwQjMKKzoxMDc5QTAwMDI1RUY2MTAwOEQyNzAwMDAxNEUwMDAwQjMwRjlGRkZGODgKKzoxMDc5QjAwMDI1MjkwMDA0MDEyNEMwMkI1MzAwMDAwMTAxODA0ODIxMjcKKzoxMDc5QzAwMDI0NjNGRkZGNTQ2MEZGRjg4RDI3MDAwMDAxNjAxODIxMzkKKzoxMDc5RDAwMDAzRTAwMDA4MDA2MDEwMjExMzIwMDAzMjNDMDUwMEZGODYKKzoxMDc5RTAwMDMwRTIwMEZGMDA0MDMwMjExMDQwMDA0MjAwMDA1MDIxRjIKKzoxMDc5RjAwMDI0MDUwMDAxMDAwMDIwMjEwMDA1Qzg0MDAwQTZDMDI0ODUKKzoxMDdBMDAwMDE3MDAwMDAzMzMyNTAwRkYxNEEwRkZGQjI0ODQwMDAxQUUKKzoxMDdBMTAwMDAxMkNDMDIzMDAxODI4QzAwMEFBNjAyMTAwOEM1MDIxMkUKKzoxMDdBMjAwMDMxNDQwMDFGMjQwQzAwMDEwMDhDMTgwNDAwMDMxMDI3QUYKKzoxMDdBMzAwMDAwRTIzMDI0MTEwRDAwNDFBRDI2MDAwMDExMEUwMDRDNzMKKzoxMDdBNDAwMDAwMEExODQwMTEwRDAwMzY4Rjg3MDA2QzUxMEUwMDU2NDkKKzoxMDdBNTAwMDhGOEMwMDYwMjQwRDAwMDQxMTBEMDA1QThGOEUwMDg0NUQKKzoxMDdBNjAwMDI0MEUwMDA1MTUwRUZGREEwMTYwMTgyMTI0MEIxNDMwRDYKKzoxMDdBNzAwMDExNDAwMDA2MDAwMDE4MjE4Rjg0MDBBMDI0NjMwMDAxM0IKKzoxMDdBODAwMDAwNkE0MDJCMTUwMEZGRkQwMTY0NTgyMThGOEEwMDgwOTkKKzoxMDdBOTAwMEFGODkwMDhDMDE2MDE4MjEyNTQ5RkZGRjBBMDAwQjBCRkMKKzoxMDdBQTAwMEFGODkwMDgwMDBFNTIwMjQwMDA3MzYwMjEwODBGRkQwNTcKKzoxMDdBQjAwMDI0MEEwMDE4MDAwNzU0MDIzMTQ2MDBGRjBBMDAwQjEzODUKKzoxMDdBQzAwMDI0MEEwMDEwM0MwQzA4MDAyNThDNjBDMDNDMDQwODAwMEYKKzoxMDdBRDAwMDI0ODQ2MTAwMEEwMDBBRkEyNDAzMDAxMDNDMEMwODAwMDgKKzoxMDdBRTAwMDI1OEM2MDQwM0MwNDA4MDAyNDg0NjBDMDBBMDAwQUY5MjgKKzoxMDdBRjAwMDhGODkwMDkwMDAwNzFBMDIzMDY2MDBGRjBBMDAwQjEzRkUKKzoxMDdCMDAwMDI0MEEwMDA4OEY4OTAwOEMzQzBDMDgwMDI1OEM2MTgwQjkKKzoxMDdCMTAwMDNDMDQwODAwMjQ4NDYxOTAwQTAwMEFGQTI0MDMwMDA0NEIKKzoxMDdCMjAwMDAwMEE0MDgwMjUwQjAwMzAyNEU2RkZGRjAxNjAxODIxODkKKzoxMDdCMzAwMEFGODkwMDQ4MEEwMDBCMEJBRjg2MDA2QzAwMEFDOTgyQUYKKzoxMDdCNDAwMDAwMTk3ODgwM0MwNzA4MDAyNEU3NjBDMDAxRTcyMDIxODUKKzoxMDdCNTAwMDAwMEExODQyOEM4RjAwMDAzMDc5MDAxRjAzMkMzODA0NzMKKzoxMDdCNjAwMDAwMDdDMDI3MDFGODYwMjQwQTAwMEIyOEFDOEMwMDAwMzUKKzoxMDdCNzAwMDAwMDMzMTQyMDAwNjI4ODAwMEFGMjgyMTMwNjIwMDFGMzgKKzoxMDdCODAwMDhDQjgwMDAwMjQ2MzAwMDEwMDRDQzgwNDAwMDMyMTQyQUIKKzoxMDdCOTAwMDAwMTkzODI3MDAwNDEwODAwMzA3MzAyNDAwNEYyMDIxRUIKKzoxMDdCQTAwMDBBMDAwQjZDQUNBNjAwMDAwMDBBNjhDMDI1QUIwMDMyQ0UKKzoxMDdCQjAwMDI1OEFGRkZGMDE2MDE4MjFBRjg5MDBBNDBBMDAwQjBCODIKKzoxMDdCQzAwMEFGOEEwMDYwMjU0QjEwMzBBRjg5MDA5MDAxNjAxODIxMEEKKzoxMDdCRDAwMDI1QzlGRkZGMEEwMDBCMEJBRjg5MDA4NDMwODYwMDA3MjAKKzoxMDdCRTAwMDJDQzIwMDA2MTA0MDAwMTQwMDAwMDAwMDAwMDY0MDgwNzcKKzoxMDdCRjAwMDNDMDMwODAwMjQ2MzU5QzgwMTAzMzgyMThDRTQwMDAwQzkKKzoxMDdDMDAwMDAwODAwMDA4MDAwMDAwMDAyNDA5MDAwMzEwQTkwMDBFRjUKKzoxMDdDMTAwMDAwMDAwMDAwMjQwQTAwMDUxMEFBMDAwQjAwMDAwMDAwNkMKKzoxMDdDMjAwMDI0MEIwMDAxMTBBQjAwMDgwMDAwMDAwMDhGOEMwMEEwQTYKKzoxMDdDMzAwMDEwQUMwMDA1MDAwMDAwMDAwM0UwMDAwODAwMDAxMDIxNjcKKzoxMDdDNDAwMDBBMDAwQTk5MDBBMDIwMjEwQTAwMEFFNzAwQzAyMDIxQUEKKzoxMDdDNTAwMDI3QkRGRkU4MzA4NDAwRkYyNDAzMDAwMjEwODMwMDBCREYKKzoxMDdDNjAwMEFGQkYwMDEwMjQwNjAwMDMxMDg2MDAzQTI0MDgwMDA0NjkKKzoxMDdDNzAwMDEwODgwMDY4MjQwRTAwMDUxMDhFMDA3RjJDQUYxNDMwOTEKKzoxMDdDODAwMDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODJDQTIwMDMwQjEKKzoxMDdDOTAwMDE0NDBGRkZDOEZCRjAwMTAyNEE1RkZEMDAwMDUzMUMyQTcKKzoxMDdDQTAwMDAwMDY2ODgwM0MwNzA4MDAyNEU3NjEwMDAxQTczMDIxMzYKKzoxMDdDQjAwMDhDQzkwMDAwMDAwNTI4ODIzMEFDMDAxRjI0MEIwMDAxOTUKKzoxMDdDQzAwMDAxOEI1MDA0OEY4NDAwNDgwMTJBNDAyNUFDQzgwMDAwNzUKKzoxMDdDRDAwMDhDODMwMDAwNTA2MDAwMDFBRjg2MDA0ODhGOTgwMDZDRDQKKzoxMDdDRTAwMDMwQUUwMDAxMjRBNkZGRkYyNzBGMDAwMTE1QzAwMDAyREYKKzoxMDdDRjAwMEFGOEYwMDZDMjRBNjAwMDEwMDA2NDE0MjAwMDgyMDgwREUKKzoxMDdEMDAwMDAwODcxODIxOEM3OTAwMDAzMEMyMDAxRjI0MDYwMDAxNzIKKzoxMDdEMTAwMDAwNDZGODA0MDMzRjM4MjQxMEUwRkZEQThGQkYwMDEwNUMKKzoxMDdEMjAwMDAwMDVDMTgyMDAxODcwODAzQzBGMDgwMDI1RUY2MEMwN0MKKzoxMDdEMzAwMDAxQ0Y0ODIxOEQyQjAwMDAwMDA1Njg0MjMxQTUwMDFGQUUKKzoxMDdENDAwMDAwQTY2MDA0MDE2QzUwMjUyN0JEMDAxODAzRTAwMDA4NjAKKzoxMDdENTAwMEFEMkEwMDAwMkNBNzAwMzAxNEUwRkZDQThGQkYwMDEwMkUKKzoxMDdENjAwMDMwQjkwMDA3MTcyM0ZGQzcyNEE4RkZDRTAwMDg2QTAyMTYKKzoxMDdENzAwMDAwMEQ2MDgwM0MwQjA4MDAyNTZCNjBDMDAxOEIzMDIxM0EKKzoxMDdEODAwMDhDQzQwMDAwMDAwODI4QzIzMEFBMDAxRjI0MDgwMDAxOEIKKzoxMDdEOTAwMDAxNDg0ODA0OEY4MjAwQTQwMDg5MTgyNUFDQzMwMDAwNjQKKzoxMDdEQTAwMDhDNUYwMDAwNTNFMDAwMDFBRjg2MDBBNDAwMDU3MDQwMjYKKzoxMDdEQjAwMDAwMEU3OTQyMDAwRjI4ODAzQzA0MDgwMDI0ODQ2MTAwRjIKKzoxMDdEQzAwMDAwQTQxODIxOEM2QjAwMDAyNURGMDAwMTMxQ0QwMDFGQkQKKzoxMDdERDAwMDAwMUY1MTQyMDFBODYwMDQwMTZDNDgyNTAwMEExMDgwNzAKKzoxMDdERTAwMEFDNjkwMDAwMDA0NDI4MjE4Q0E2MDAwMDhGOTgwMDYwMzgKKzoxMDdERjAwMDMzRjkwMDFGOEZCRjAwMTAwMzI4MzgwNDAwQzc3ODI1MEYKKzoxMDdFMDAwMDI3MEUwMDAxMjdCRDAwMThBQ0FGMDAwMDAzRTAwMDA4RkEKKzoxMDdFMTAwMEFGOEUwMDYwMjRBNUVGRDAyQ0I4MDQwMDEzMDBGRjk5QUEKKzoxMDdFMjAwMDhGQkYwMDEwMDAwNTMxNDIwMDA2NTg4MDNDMEEwODAwNTAKKzoxMDdFMzAwMDI1NEE2MDQwMDE2QTMwMjE4Q0M0MDAwMDMwQTMwMDFGMzUKKzoxMDdFNDAwMDI0MDkwMDAxMDA2OTEwMDQ4Rjk5MDA5MDAwODJGODI1MzAKKzoxMDdFNTAwMEFDREYwMDAwOEYyNzAwMDA1MEUwMDAwMUFGODYwMDkwRUIKKzoxMDdFNjAwMDhGOEQwMDg0OEZCRjAwMTAyN0JEMDAxODI1QUMwMDAxNDYKKzoxMDdFNzAwMDAzRTAwMDA4QUY4QzAwODQxNUUwRkY4MjhGQkYwMDEwODQKKzoxMDdFODAwMDhGODYwMEEwMDAwNjEwNDAwMDQ2RjgyMTAwMUYyMTAwNDgKKzoxMDdFOTAwMDAzRTRDODIxMDAxOTM4NDAyNEY4MTQzMDAwQjg0MDJCRkUKKzoxMDdFQTAwMDExMDBGRjc4OEZCRjAwMTAyNEE0RUJEMDBFMDAwMjBENEMKKzoxMDdFQjAwMDAwQzAyODIxMDAwMjc5NDIwMDBGNzA4MDNDMEQwODAwQUMKKzoxMDdFQzAwMDI1QUQ2MTgwMDFDRDIwMjE4QzhCMDAwMDMwNEMwMDFGM0UKKzoxMDdFRDAwMDI0MDYwMDAxMDE4NjE4MDQ4Rjg5MDA4QzAxNjM1MDI1NTcKKzoxMDdFRTAwMEFDOEEwMDAwOEQyNTAwMDA1MEEwMDAwMUFGODQwMDhDRkEKKzoxMDdFRjAwMDhGOTgwMDgwOEZCRjAwMTAyN0JEMDAxODI3MDgwMDAxNTEKKzoxMDdGMDAwMDAzRTAwMDA4QUY4ODAwODAzMEE1MDAwNzI0MDMwMDAzQzkKKzoxMDdGMTAwMDEwQTMwMDEwMjhBMjAwMDQxNDQwMDAwODI0MDcwMDAyNDcKKzoxMDdGMjAwMDI0MDMwMDA0MTBBMzAwMTUyNDA4MDAwNTEwQTgwMDBGNjYKKzoxMDdGMzAwMDhGODUwMEEwMDNFMDAwMDgwMDAwMDAwMDE0QTdGRkZERUIKKzoxMDdGNDAwMDAwODAyODIxMTRDM0ZGRkIyNDA0MDAwMjBBMDAwQkFCQUQKKzoxMDdGNTAwMDAwMDAwMDAwMjQwOTAwMDUwMDgwMjgyMTEwQzlGRkZCNTMKKzoxMDdGNjAwMDI0MDQwMDAzMDNFMDAwMDgwMDAwMDAwMDE0QzVGRkYxMzIKKzoxMDdGNzAwMDAwODAyODIxMEEwMDBCQUIyNDA0MDAwNTI0MEEwMDAxMUMKKzoxMDdGODAwMDAwODAyODIxMTBDQUZGRjEyNDA0MDAwNDAzRTAwMDA4NDcKKzoxMDdGOTAwMDAwMDAwMDAwMjdCREZGRTBBRkIwMDAxMDAwMDU4MUMyNjcKKzoxMDdGQTAwMDI2MDNGRkQwMjRDNTAwM0YyQzYyMjNEMDI0QzYwMDdGQzcKKzoxMDdGQjAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQzMwOTEwMEZGOEEKKzoxMDdGQzAwMDAwMDY5MUMyMDAwNTI5ODIwMjAwMjAyMTEwNDAwMDA4MEQKKzoxMDdGRDAwMDI0MDNGRkZGMEUwMDBBNkIwMDAwMDAwMDAyMDAyMDIxQjYKKzoxMDdGRTAwMDAyMjAyODIxMEUwMDBDNTkwMjQwMzAyMTAwMDAxODIxRTcKKzoxMDdGRjAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMUIKKzoxMDgwMDAwMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4MzUKKzoxMDgwMTAwMDI0QTIwMDdGQUZCMzAwMUNBRkIyMDAxODAwMDI5OUMyQzcKKzoxMDgwMjAwMDMwOTIwMEZGMjRBMzAwM0YwMjQwMjAyMTAyNjAyODIxNUIKKzoxMDgwMzAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDBFMDAwQjhFMjgKKzoxMDgwNDAwMDAwMDM4OTgyMDA0MDgwMjEwMDQwMjAyMTAyMjAyODIxNTUKKzoxMDgwNTAwMDE0NDAwMDA5MDAwMDE4MjE4RkJGMDAyMDhGQjMwMDFDQkUKKzoxMDgwNjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxODMKKzoxMDgwNzAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMEExQzAwMDAwMDAwRDUKKzoxMDgwODAwMDAwNDAyODIxMDIwMDIwMjExMDUxRkZGMzAwMTAxOUMwRTgKKzoxMDgwOTAwMDBFMDAwQTZCMDAwMDAwMDAwMjAwMjAyMTAyNDAyODIxOEYKKzoxMDgwQTAwMDBFMDAwQzU5MDI2MDMwMjE4RkJGMDAyMDhGQjMwMDFDREUKKzoxMDgwQjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwMDAxODIxOEIKKzoxMDgwQzAwMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyODMwODRGRkZGNzYKKzoxMDgwRDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxNEEKKzoxMDgwRTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCQUMKKzoxMDgwRjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3QzAKKzoxMDgxMDAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0OEMKKzoxMDgxMTAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4Q0MKKzoxMDgxMjAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwQTAKKzoxMDgxMzAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGOTYKKzoxMDgxNDAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjkKKzoxMDgxNTAwMDMwQTVGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDc2MDE1QzkKKzoxMDgxNjAwMDAwQTczMDI1M0MwMzEwMDBBRjQ0MDE4MEFGNDAwMTg0REMKKzoxMDgxNzAwMEFGNDYwMTg4MDNFMDAwMDhBRjQzMDFCODhGODUwMEQwMDcKKzoxMDgxODAwMDJDODY0MDAwMDA4MDE4MjE4Q0E3MDA4NDAwODcxMDJCQ0IKKzoxMDgxOTAwMDE0NDAwMDEwMDAwMDAwMDA4Q0E4MDA4NDJEMDY0MDAwNTAKKzoxMDgxQTAwMDUwQzAwMDBGMjQwMzQwMDA4Q0FBMDA4NDAwOEE0ODJCOTIKKzoxMDgxQjAwMDUxMjAwMDAxOENBMzAwODQwMDAzNUE0MjAwMEIyMDgwNTAKKzoxMDgxQzAwMDNDMDUwODAwMjRBNTVBNDAwMDg1MTgyMTAzRTAwMDA4NUEKKzoxMDgxRDAwMDhDNjIwMDAwMTRDMEZGRjQwMDAwMDAwMDI0MDM0MDAwODMKKzoxMDgxRTAwMDAwMDM1QTQyMDAwQjIwODAzQzA1MDgwMDI0QTU1QTQwOTkKKzoxMDgxRjAwMDAwODUxODIxMDNFMDAwMDg4QzYyMDAwMDhGODMwMEQwMDYKKzoxMDgyMDAwMDkwNjYwMEQwMjRDNTAwMDFBMDY1MDBEMDhGODUwMEQwMDUKKzoxMDgyMTAwMDkwNjQwMEQwOTBBMjAwRDIxMDQ0MDAxNzAwMDAwMDAwMkIKKzoxMDgyMjAwMDkzNkMwMDc4OEY4QjAwQkMzMThBMDBGRkExNkEwMDBDMzAKKzoxMDgyMzAwMDI1NDkwMDAxOTM4NzAwQzQzMTIyMDBGRjMwNDgwMDdGQTgKKzoxMDgyNDAwMDExMDcwMDBCMDAwMjY4MjdBMzYyMDA3ODhGNEUwMTc4QTcKKzoxMDgyNTAwMDA1QzBGRkZFOEY5OTAwQjAyNDE4MDAwMjNDMEYxMDAwRUIKKzoxMDgyNjAwMEFGNTkwMTQwQTM1ODAxNDQwM0UwMDAwOEFGNEYwMTc4MjMKKzoxMDgyNzAwMDBBMDAwRDI5MzFBMjAwODBBMEEwMDBEMDBBMDAwRDFGMjUKKzoxMDgyODAwMDAwMDAwMDAwMjdCREZGRDhBRkIyMDAxODhGOTIwMEI4RTEKKzoxMDgyOTAwMEFGQkYwMDIwQUZCMzAwMUNBRkIwMDAxMEFGQjEwMDE0RUYKKzoxMDgyQTAwMDhGOTMwMEI0OEU1OTAwMjgzQzEwMDA4MDNDMEVGRkVGRTUKKzoxMDgyQjAwMEFFNzkwMDAwOEU1ODAwMjRBMjYwMDAwQTM1Q0RGRkZGODEKKzoxMDgyQzAwMEFFNzgwMDA0OTI1MTAwMkMzQzBCRkY5RjM1NkFGRkZGRjMKKzoxMDgyRDAwMEEyNzEwMDBDOEU2RjAwMEMzQzA4MDA0MEEyNzEwMDBCRDQKKzoxMDgyRTAwMDAxRjA2MDI1MDE4RDQ4MjQwMTJBMzgyNDAwRTgzMDI1NUEKKzoxMDgyRjAwMEFFNjYwMDBDOEU0NTAwMDRBRTYwMDAxODNDMDQwMEZGMjIKKzoxMDgzMDAwMEFFNjUwMDE0OEU0MzAwMkMzNDgyRkZGRkE2NjAwMDA4ODcKKzoxMDgzMTAwMDAwNjJGODI0QUU3RjAwMTA4RTU5MDAwODhGOTAwMEIwRTQKKzoxMDgzMjAwMDk2NEUwMDEyQUU3OTAwMjA4RTUxMDAwQzMxRDgzRkZGREUKKzoxMDgzMzAwMDAwMTg3OTgwQUU3MTAwMjQ4RTREMDAxNDAxRjA2MDIxODgKKzoxMDgzNDAwMDMxQ0IwMDAxQUU2RDAwMjg4RTRBMDAxODAwMEM0MUMyRUUKKzoxMDgzNTAwMDAwMEI0QjgwQUU2QTAwMkM4RTQ2MDAxQzAxMDkzODIxQjAKKzoxMDgzNjAwMEE2NjcwMDFDQUU2NjAwMzA5NjQ1MDAwMjhFNDQwMDIwRDEKKzoxMDgzNzAwMEE2NjUwMDFFQUU2NDAwMzQ5MjQzMDAzMzMwNjIwMDA0RjAKKzoxMDgzODAwMDU0NDAwMDA1OTI0NjAwMDA4RjgzMDBEMDhDN0YwMDdDMTMKKzoxMDgzOTAwMEFFN0YwMDMwOTI0NjAwMDA4Rjg1MDBCQ0EwQTYwMDAwOTIKKzoxMDgzQTAwMDkyNDQwMDMzMzA4MjAwMDI1MDQwMDAwNzkyNEUwMDAxOTgKKzoxMDgzQjAwMDhGODcwMEJDMjQwQUZGODA5MEU5MDAwMDAxMkE0MDI1MzUKKzoxMDgzQzAwMEEwRTgwMDAwOTI0RTAwMDE4RjhEMDBCQzI0MDlGRkJGODEKKzoxMDgzRDAwMDI0MDRGRkRGQTFBRTAwMDE4RjhBMDBCQzkxNEMwMDBEODgKKzoxMDgzRTAwMDMxOEIwMDdGQTE0QjAwMEQ4Rjg2MDBCQzkwQzgwMDBEMjMKKzoxMDgzRjAwMDAxMDkzODI0QTBDNzAwMEQ4RjkxMDBCQzhFNjUwMDE0QzAKKzoxMDg0MDAwMDkyMjMwMDBEMkNBMjAwMDEwMDAyRjk0MDAwNjRDODI0NTAKKzoxMDg0MTAwMDAzM0ZDMDI1QTIzODAwMEQ4Rjg4MDBCQzk2NTAwMDEyODMKKzoxMDg0MjAwMDhGODcwMEQwQTUxMDAwMDI4RTQ1MDAwNDkwRUQwMEJDOUYKKzoxMDg0MzAwMDMwQUYwMDAzMDAwRjcwMjMzMUNDMDAwMzAwQUMxMDIxREIKKzoxMDg0NDAwMDMxQUIwMDAyMTU2MDAwMDIyNDQ0MDAzNDI0NDQwMDMwQTMKKzoxMDg0NTAwMDkwRjEwMEJDMDBCMTgwMjQzMjBGMDAwNDE1RTAwMDAyNEUKKzoxMDg0NjAwMDI0ODMwMDA0MDA4MDE4MjE4Rjg5MDBBQzI0MEEwMDAyQjQKKzoxMDg0NzAwMEFEMDMwMDA0QTEyQTAwMDA5MjQ4MDAzRjhGODcwMEFDQTIKKzoxMDg0ODAwMEEwRTgwMDAxOEY5MTAwQUM5MjQ2MDAzRjhFNDQwMDA0QUEKKzoxMDg0OTAwMEE2MjYwMDAyOTc2NTAwM0MwRTAwMENGNjMwQjBGRkZGRTgKKzoxMDg0QTAwMDAwMDIxMzgwMDA1MDIwMjUzQzAzNDIwMDAwODNGODI1ODEKKzoxMDg0QjAwMEFFM0YwMDA0OEY4NTAwQUM4RTU5MDAzOEFDQjkwMDE4NkYKKzoxMDg0QzAwMDhFNTgwMDM0QUNCODAwMUNBQ0EwMDAwQ0FDQTAwMDEwNUUKKzoxMDg0RDAwMEE0QTAwMDE0QTRBMDAwMTZBNEEwMDAyMEE0QTAwMDIyMjAKKzoxMDg0RTAwMEFDQTAwMDI0OEU2MjAwMTQ1MDQwMDAwMTI0MDIwMDAxNjAKKzoxMDg0RjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MDMKKzoxMDg1MDAwMDhGQjAwMDEwQUNBMjAwMDgwQTAwMEQxNjI3QkQwMDI4OEQKKzoxMDg1MTAwMDhGODYwMEQwMjdCREZGRDBBRkJGMDAyQ0FGQjYwMDI4OUMKKzoxMDg1MjAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4NDkKKzoxMDg1MzAwMEFGQjEwMDE0QUZCMDAwMTA5NEMzMDBFMDk0QzIwMEUyRTkKKzoxMDg1NDAwMDEwNDMwMDQxMjQwNUZGRkYzQzE2MDAwRTkwQzQwMEQwRUMKKzoxMDg1NTAwMDkwQzgwMEQxMzA5MjAwRkYzMTA0MDBGRjAyNDQzODJCNTQKKzoxMDg1NjAwMDEwRTAwMDQ0MjY0OTAwMDExMDg5MDAzNzhGOTgwMEIwQzAKKzoxMDg1NzAwMDNDMDUwODAwOENBNTAwNUMyNDE0RkY4MDAwQjg2MDIxMzUKKzoxMDg1ODAwMDAxOTQ2ODI0QUY0RDAwMkM5NENBMDBFMjMxOEIwMDdGMjcKKzoxMDg1OTAwMDAxN0E0ODIxMzE0NDdGRkYwMTM2NDAyMTAwMDQxMDQwMTgKKzoxMDg1QTAwMDAwNDhBODIxOTZBNzAwMDAzQzFGMDgwMDhGRkYwMDU4MzQKKzoxMDg1QjAwMDMwRjUzRkZGMDAxNTE5ODAwM0UzQzgyMTAzMTk4ODIxMTYKKzoxMDg1QzAwMDMyMzMwMDdGMDI3QTc4MjEwMjM0ODAyNEFGNTAwMDJDQUQKKzoxMDg1RDAwMDAxRjY5ODIxOTI2RTAwMEQzMUM1MDAwNDEwQTAwMDQ4RUMKKzoxMDg1RTAwMDAwMDAwMDAwOTRDMzAwRTI5NEMzMDBFMjk0RDgwMEUyQ0IKKzoxMDg1RjAwMDI0MDQ4MDAwMzA3RjdGRkYyN0Y5MDAwMTMzMzE3RkZGQTMKKzoxMDg2MDAwMDAzMDQ4MDI0MDIxMTc4MjVBNENGMDBFMjk0Q0UwMEUyNzYKKzoxMDg2MTAwMDNDMTIwODAwOEU1MjAwNjAzMUQ0N0ZGRjEyOTIwMERGQkUKKzoxMDg2MjAwMDAwMDAwMDAwOEU3MjAwMTgwMDAwMjgyMTI2NDZGRkZGN0YKKzoxMDg2MzAwMEFFNjYwMDJDOEY4NjAwRDA5NEM4MDBFMDk0QzkwMEUyOUEKKzoxMDg2NDAwMDE1MjhGRkMyMDAwMDAwMDA4RkJGMDAyQzhGQjYwMDI4NDUKKzoxMDg2NTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OTgKKzoxMDg2NjAwMDhGQjEwMDE0OEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4QUIKKzoxMDg2NzAwMDI3QkQwMDMwOTBDRDAwRDIyNjRBMDAwMTMxQUMwMEZGNkEKKzoxMDg2ODAwMDAwOEM1ODIxMTE2QUZGRjA4Rjk4MDBCMDNDMDUwODAwNUIKKzoxMDg2OTAwMDhDQTUwMDVDMjQxNEZGODAwMEI4NjAyMTAxOTQ2ODI0M0MKKzoxMDg2QTAwMEFGNEQwMDJDOTRDQTAwRTIzMThCMDA3RjAxN0E0ODIxNDMKKzoxMDg2QjAwMDMxNDQ3RkZGMDEzNjQwMjEwMDA0MTA0MDAwNDhBODIxQ0EKKzoxMDg2QzAwMDk2QTcwMDAwM0MxRjA4MDA4RkZGMDA1ODMwRjUzRkZGQzEKKzoxMDg2RDAwMDAwMTUxOTgwMDNFM0M4MjEwMzE5ODgyMTMyMzMwMDdGNzQKKzoxMDg2RTAwMDAyN0E3ODIxMDIzNDgwMjRBRjUwMDAyQzAxRjY5ODIxQzAKKzoxMDg2RjAwMDkyNkUwMDBEMzFDNTAwMDQxNEEwRkZCQTAwMDAwMDAwMDYKKzoxMDg3MDAwMDhFNjYwMDEwMDAxMkMwQzA4RTZFMDAzMDAwMTI5MTQwQzQKKzoxMDg3MTAwMDAyNTg3ODIxMDM2RjU4MjEwMENFNjgyMzI1NkMwMDg4MDkKKzoxMDg3MjAwMDI0MDIwMDAyQUU2RDAwMTBBRjhDMDBBQ0ExNjIwMDg4ODQKKzoxMDg3MzAwMDk3NkEwMDNDOEU2NDAwMzA4RjkxMDBBQzBFMDAwQ0Y2RkUKKzoxMDg3NDAwMDMxNTBGRkZGMDAwMjIzODAwMDkwNDgyNTNDMDM0MjAwODcKKzoxMDg3NTAwMDAxMjM0MDI1QUUyODAwMDQ4RTY3MDAwNDhGOEMwMEFDRjYKKzoxMDg3NjAwMDhFN0YwMDAwMjQwRDAwMDhBRDg3MDAxQ0FEOUYwMDE4MEYKKzoxMDg3NzAwMEFEODAwMDBDQUQ4MDAwMTA5MjY1MDAwQTMwQjkwMEZGOUEKKzoxMDg3ODAwMEE1OTkwMDE0OTY3ODAwMDgzQzA1MDAwQ0E1OTgwMDE2RTEKKzoxMDg3OTAwMDkyNzEwMDBBMzIyRjAwRkZBNThGMDAyMDk2NzAwMDA4MEEKKzoxMDg3QTAwMDI0MTEwMDA1QTU5MDAwMjJBRDgwMDAyNDkyNkUwMDBCREMKKzoxMDg3QjAwMDI0MTBDMDAwMzFDNjAwRkZBNTg2MDAwMkExOEQwMDAxNzMKKzoxMDg3QzAwMDhFNkIwMDMwOEY4MjAwQUM4Rjg4MDBCMEFDNEIwMDA4RkQKKzoxMDg3RDAwMDNDMEEwODAwOEQ0QTAwNTQwMTQ4MjAyMTAwOTQ0ODI0OTYKKzoxMDg3RTAwMEFGNDkwMDI4M0MwMzA4MDA4QzYzMDA1NDAwNjgzODIxMUUKKzoxMDg3RjAwMDMwRkYwMDdGMDNGQUM4MjEwMzI1QzAyMTAyNTg3ODIxRTkKKzoxMDg4MDAwMEFGOEYwMEJDQUY5ODAwQzBBMUYxMDAwMDhGOEIwMEJDRkYKKzoxMDg4MTAwMDI0MDNGRkJGMjQwNUZGREY5NTZFMDAwMjAxRDBBMDI0RDIKKzoxMDg4MjAwMDAyOTU5MDI1QTU3MjAwMDI5MTY2MDAwMjMwQ0QwMDNGQUUKKzoxMDg4MzAwMDM1QUMwMDQwQTE2QzAwMDI4Rjg4MDBCQzhGODIwMEQwNTQKKzoxMDg4NDAwMDNDMEM3RkZGQUQwMDAwMDQ4QzRBMDA3QzM1OEJGRkZGQTEKKzoxMDg4NTAwMDNDMDI4MDAwQUQwQTAwMDg5MTA0MDAwRDMwODkwMDdGQzEKKzoxMDg4NjAwMEExMDkwMDBEOEY5RjAwQkM5M0Y1MDAwRDAyQTMzODI0RDEKKzoxMDg4NzAwMEEzRTcwMDBEOEY5MTAwQkM5MjM5MDAwRDAzMjVDMDI0QTEKKzoxMDg4ODAwMEEyMzgwMDBEOEU2RjAwMzQ4RjhEMDBCQ0FEQUYwMDEwOEMKKzoxMDg4OTAwMDhFNkUwMDJDOEU3MDAwMzAwMUQwQTAyM0FEQjQwMDE0NzkKKzoxMDg4QTAwMDkxQjIwMDE4MzI0NjAwN0ZBMUE2MDAxODhGODcwMEJDNDUKKzoxMDg4QjAwMDhFNkEwMDMwOENFNDAwMTgwMTRCNDgyNDAwODI0MDI0NkEKKzoxMDg4QzAwMDAxMDlBODI1QUNGNTAwMTg5MjYzMDAwQUEwRTMwMDFDN0EKKzoxMDg4RDAwMDk2N0YwMDA4OEY4NTAwQkM4Rjk5MDBEMEE0QkYwMDFFMzIKKzoxMDg4RTAwMDhFNzAwMDMwOEU2NDAwMzAwRTAwMDIwRDhGMjUwMDg0RTMKKzoxMDg4RjAwMDhGODUwMEQwMDAwMjg5NDAwMDAyQzEwMDkwQUUwMEJDMEMKKzoxMDg5MDAwMDAyMzg3ODIxMDA0MDMwMjEzMUQ0MDAwMjEyODAwMDAzNjcKKzoxMDg5MTAwMDAyMEY4MDIxMDAwMkE4ODAwMjE1ODAyMTkwQjIwMEJDQzUKKzoxMDg5MjAwMDMyNTQwMDA0MTI4MDAwMDIwMDA2Qzg4MDAyMTk4MDIxMUYKKzoxMDg5MzAwMDhFNkYwMDMwOEY4QjAwQkMyNDA2ODAwMDMxRUUwMDAzNjgKKzoxMDg5NDAwMDAwMEU2ODIzMzFBQzAwMDMwMjBDMTAyMUFENjIwMDA0NUMKKzoxMDg5NTAwMDk0QTQwMEUyOTRBQTAwRTI5NEEzMDBFMjMxNTA3RkZGQzUKKzoxMDg5NjAwMDI2MDQwMDAxMzA4OTdGRkYwMDY2NDAyNDAxMDk4ODI1MjQKKzoxMDg5NzAwMEE0QjEwMEUyOTRBNzAwRTIzQzEzMDgwMDhFNzMwMDYwRUIKKzoxMDg5ODAwMDMwRkY3RkZGMTNGMzAwMTIwMDAwMDAwMDBFMDAwRDE2RjEKKzoxMDg5OTAwMDAwMDAwMDAwMEEwMDBFMjQwMDAwMjgyMTk0Q0QwMEUyMEYKKzoxMDg5QTAwMDAxQTQ2MDI0QTRDQzAwRTI5MENCMDBFMjkwQzIwMEUyREIKKzoxMDg5QjAwMDMxNkEwMEZGMDAwQTQ5QzIwMDA5MjAyNzAwMDQ0MUMwQjMKKzoxMDg5QzAwMDMwNTUwMDdGMDJBODM4MjUwQTAwMEUyMEEwQzcwMEUyMUIKKzoxMDg5RDAwMDk0QjEwMEUyMDIyNjM4MjRBNEE3MDBFMjkwQkYwMEUyOEUKKzoxMDg5RTAwMDkwQjQwMEUyMzNGMzAwRkYwMDEzQzlDMjAwMTk5MDI3Q0UKKzoxMDg5RjAwMDMyOTgwMDdGMDAxMkE5QzAwMzE1MzAyNTBFMDAwRDE2MTUKKzoxMDhBMDAwMEEwQTYwMEUyMEEwMDBFMjQwMDAwMjgyMTMwODRGRkZGMDcKKzoxMDhBMTAwMDMwQTVGRkZGQUY0NDAwMThBRjQ1MDAxQzAzRTAwMDA4N0QKKzoxMDhBMjAwMDhGNDIwMDE0MjdCREZGQjBBRkIwMDAyODhGOTAwMEQwNTgKKzoxMDhBMzAwMEFGQjQwMDM4QUZCRjAwNENBRkJFMDA0OEFGQjcwMDQ0ODIKKzoxMDhBNDAwMEFGQjYwMDQwQUZCNTAwM0NBRkIzMDAzNEFGQjIwMDMwQkEKKzoxMDhBNTAwMEFGQjEwMDJDQTdBMDAwMTQ5MjA2MDBEMTkyMDUwMEQwNUYKKzoxMDhBNjAwMDMwOTRGRkZGMzBDNDAwRkYzMEEzMDBGRjAwNjQxMDJCRTAKKzoxMDhBNzAwMEE3QTAwMDFFMTA0MDAwNzFBRkEwMDAxMDkyMDkwMEQwMDYKKzoxMDhBODAwMDAwMTQ5ODJCMzEyODAwRkYwMDg4MzgyMzI0RjJGRkZGQzAKKzoxMDhBOTAwMDAwMTI4ODJCMDIzMzc4MjQ1MUUwMDA3NThGQjIwMDEwNDkKKzoxMDhBQTAwMDk2MTgwMDEyOTYxOTAwMTAwMDE0RjQwMDAzMTlCODIzNDgKKzoxMDhBQjAwMDAwMTdCNDAwMDAxNjE0MDMwMjgyQTgyQTE2QTAwMDAyQjAKKzoxMDhBQzAwMDAwMUUyNDAzMDA0MDIwMjEwMjQ0RjgyQjEzRTAwMDAyODIKKzoxMDhBRDAwMDAwODAxODIxMDI0MDE4MjEwMDAzMzQwMDAwMDYxQzAzMDYKKzoxMDhBRTAwMDMwNjVGRkZGMkNBMjAwMDkxNDQwMDAwMjAwNjA5ODIxQUQKKzoxMDhBRjAwMDI0MTMwMDA4OEUwOTAwMDgwMDEzNTk4MDhFMDgwMDBDMEEKKzoxMDhCMDAwMDMxNjRGRkZGM0MwQTAwMTAwMDhBMzgyNTI3NEEwNDAwMjAKKzoxMDhCMTAwMEFGNDkwMDM4QUY4QTAwQjhBRjQ4MDAzQ0FGNDcwMDMwREIKKzoxMDhCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDhCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDhCNDAwMDhGNEQwMDAwMzFBQzAwMjAxMTgwRkZGRDAwMTM3MDJBMTIKKzoxMDhCNTAwMDAxRDExMDI0MDAwMEE4MjExMDQwMDFDMDAwMDAwMDAwMzUKKzoxMDhCNjAwMDhGOTgwMEIwM0MwQjA4MDA4RDZCMDA1NDI0MTFGRjgwREYKKzoxMDhCNzAwMDkyMUUwMEQwMDE3ODIwMjEwMDkxMTAyNDkyMTkwMEQwN0IKKzoxMDhCODAwMEFGNDIwMDI4OEQ0NTAwMTAzQzA2MDgwMDhDQzYwMDU4RjYKKzoxMDhCOTAwMDNDMTcwODAwOEVGNzAwNTQzMEE3M0ZGRjAwMDcxOTgwRUMKKzoxMDhCQTAwMDAwQzM0MDIxMDMwODIwMjEwMDkxRjgyNDkyMEIwMEQwM0IKKzoxMDhCQjAwMEFGNUYwMDJDOTE0ODAwMDAzM0Q2MDBGRjMzMkYwMEZGMzkKKzoxMDhCQzAwMDAyRjg3MDIxMDAxNjYxNDAwMDBGNjhDMDMxQzkwMDdGQjMKKzoxMDhCRDAwMDAxOEQzODIxMDEzQTI4MjEzMTYzMDBGRjMwODYwMDdGNjIKKzoxMDhCRTAwMDNDMDIwMDBDMDBBMkIwMjEwMDAzODk0MDAzNjdDODIxQTkKKzoxMDhCRjAwMDAwREFGODIxMzEwODAwM0YzQzFFMDAwRTAyMzZCODIxOTEKKzoxMDhDMDAwMDI3MzgwMDg4MDNGRTg4MjEyRDBGMDAwOEFGOTgwMEFDOUMKKzoxMDhDMTAwMEFGOTcwMEJDQUY5NjAwQzAxMUUwMDE4RkFGOTEwMEI0RDgKKzoxMDhDMjAwMDAwMDg2ODgwM0MwRTA4MDAyNUNFNTlFMDAxQUU2MDIxQTYKKzoxMDhDMzAwMDhEODkwMDAwMDEyMDAwMDgwMDAwMDAwMDkyMEUwMEQyODMKKzoxMDhDNDAwMDkyMEQwMEQwMDAxNDk4MkIzMUNBMDBGRjMxQUMwMEZGMDgKKzoxMDhDNTAwMDAwOEM1ODIzMDE0QjIwMjEyNDkyRkZGRjAwMTI4ODJCMDcKKzoxMDhDNjAwMDAyMzM3ODI0MTVFMEZGOEUwMDAwMDAwMDhGQjIwMDEwNjAKKzoxMDhDNzAwMDhGQkYwMDRDOEZCRTAwNDgzQTQyMDAwMThGQjcwMDQ0QkUKKzoxMDhDODAwMDhGQjYwMDQwOEZCNTAwM0M4RkI0MDAzODhGQjMwMDM0RUUKKzoxMDhDOTAwMDhGQjIwMDMwOEZCMTAwMkM4RkIwMDAyODAzRTAwMDA4QTUKKzoxMDhDQTAwMDI3QkQwMDUwOTE1ODAwMDEzMzE3MDAyMDEyRTAwMjA0NDQKKzoxMDhDQjAwMDI0MTYwMDAxOTIxRjAwQkMwMDAwQjAyMTMzRjkwMDAxMEUKKzoxMDhDQzAwMDEzMjAwMDBEMjQxRTAwMDE4RDQ4MDAxNDhFMDMwMDg0MjMKKzoxMDhDRDAwMDAxMDNCMDJCMTZDMDAwMDIwMTAwMzAyMThFMDYwMDg0NzMKKzoxMDhDRTAwMDhFMDUwMDY0MDBDNTM4MkIxNEUwMDAwMjAwQzAyMDIxNkUKKzoxMDhDRjAwMDhFMDQwMDY0MDA4MEIwMjE4RDQyMDAxNDhFMEIwMDY0NEQKKzoxMDhEMDAwMDAwNEIzMDJCMTRDMDAwMDIwMDQwMjAyMThFMDQwMDY0NzAKKzoxMDhEMTAwMDAwOTZCODIzNTZFMDAwMDEyNDFFMDAwMjAyNUUyMDJCQkMKKzoxMDhEMjAwMDE0ODAwMTQ4MDAwMDE4MjE4RDU5MDAzODhFMkYwMDBDNDYKKzoxMDhEMzAwMDNDMTgwMDgwQUUzOTAwMDA4RDUwMDAzNDNDMEVGRjlGN0YKKzoxMDhENDAwMDAxRjg2MDI1QUUzMDAwMDQ5MTQ5MDAzRjM1Q0RGRkZGQUEKKzoxMDhENTAwMDAxOEQyMDI0M0MwQTAwMjAzQzBCRkZFRkEyMjkwMDBCRDAKKzoxMDhENjAwMDAwOEEzODI1MzU2MkZGRkYwMEUyMjgyNDNDMDYwMDA4MEYKKzoxMDhENzAwMDhGODcwMEI4MDBBNkM4MjVBRTM5MDAwQzhDRTMwMDE0MUMKKzoxMDhEODAwMEFFMjAwMDE4M0MwOEZGRkJBRTIzMDAxNDhDRjgwMDE4M0UKKzoxMDhEOTAwMDM1MUZGRkZGMDMzRjcwMjRBRTM4MDAxQzhDRUYwMDA4MjYKKzoxMDhEQTAwMDAyRDc4MDIxQUUyRjAwMjQ4Q0VEMDAwQ0FFMzAwMDJDQjkKKzoxMDhEQjAwMEFFMkUwMDBDQUUyRDAwMjBBRTIwMDAyOEE2MjAwMDM4REMKKzoxMDhEQzAwMEE2MjAwMDNBOENFQzAwMTQwMTk2NDgyMzAxMzc1MDIzNkEKKzoxMDhERDAwMDExNDAwMDExQUUyQTAwMTA5MEVFMDAzRDhFMkMwMDA0RDAKKzoxMDhERTAwMDhFMjQwMDAwMDAwRTY5MDAwMThEMjgyMTAwMDA1MDIxMTIKKzoxMDhERjAwMDAwQUQzMDJCMDA4QTU4MjEwMTY2MTAyMUFFMjUwMDA0RjkKKzoxMDhFMDAwMEFFMjIwMDAwOTBFMzAwM0RBMjIzMDAwQThGODgwMEI4NDQKKzoxMDhFMTAwMDk1MUYwMDA2QTYzRjAwMDg4RjhCMDBBQzI0MDYwMDAyQjkKKzoxMDhFMjAwMDAyQzAyMDIxQTE2NjAwMDA5NzY1MDAzQzhGOTAwMEFDMzUKKzoxMDhFMzAwMDMwQTJGRkZGMEUwMDBDRjZBRkEyMDAyMDhGQTMwMDIwOEYKKzoxMDhFNDAwMDAwMDI0MzgwOEY4NTAwQjgwMTAzQzgyNTNDMUY0MjAwMDMKKzoxMDhFNTAwMDAzM0ZDMDI1QUUxODAwMDQ4Rjg0MDBBQzhDQUYwMDM4RUYKKzoxMDhFNjAwMEFDOEYwMDE4OENCMDAwMzRBQzkwMDAxQ0FDODAwMDBDQUYKKzoxMDhFNzAwMEFDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNkE0ODAwMDIwMDAKKzoxMDhFODAwMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRkE0ODcwMDAyQTkKKzoxMDhFOTAwMDEyQzAwMjEwMjQwRDAwMDE1MkUwMDAwMjkwQTIwMDNEMTkKKzoxMDhFQTAwMDkwQTIwMDNFMjQ0QTAwMDFBMDhBMDAwMThGODQwMEFDRjkKKzoxMDhFQjAwMEFDOTYwMDA4OEY4MzAwRDAyNDA3MDAzNDkwNkYwMEJDNkMKKzoxMDhFQzAwMDMxRUUwMDAyNTFDMDAwMDEyNDA3MDAzMDhGODIwMEI4NEIKKzoxMDhFRDAwMDhGOTkwMEJDOTA2ODAwQkM5MDVGMDAwMDI0MTAwMDA0RDMKKzoxMDhFRTAwMDMyQ0YwMDAzQTMzRjAwMDA4Rjk4MDBCODhGOEMwMEJDRTYKKzoxMDhFRjAwMDAyMEY3MDIzOTMwRDAwMDEyNDA1QzAwMDMxQ0EwMDAzNDYKKzoxMDhGMDAwMEExOEQwMDAxOEY5MDAwQkM4Rjg5MDBCODAwRjYzODIxMzgKKzoxMDhGMTAwMDk2MDQwMDAyOTUyNjAwMTIwMEVBMzgyMTAwODU1ODI0QTQKKzoxMDhGMjAwMDMwQzMzRkZGMDE2MzEwMjVBNjAyMDAwMjkyMUYwMDAyMUEKKzoxMDhGMzAwMDMxMDgwMDA0MzNGOTAwM0YzNzM4MDA0MEEyMTgwMDAyMUUKKzoxMDhGNDAwMDEyQzAwMDAyOEY4NTAwQkMwMEU4MzgyMThGODYwMEQwNTcKKzoxMDhGNTAwMEFDQTcwMDA0MjQxRkZGQkY4Q0MzMDA3QzJFQ0IwMDAxRjQKKzoxMDhGNjAwMDI0MEZGRkRGQUNBMzAwMDg5MEE4MDAwRDAwMEI2OTQwQTAKKzoxMDhGNzAwMDMxMDIwMDdGQTBBMjAwMEQ4RjkwMDBCQzkyMTkwMDBENUQKKzoxMDhGODAwMDAzM0ZDMDI0QTIxODAwMEQ4RjhBMDBCQzkxNEUwMDBEMzMKKzoxMDhGOTAwMDAxQ0Y2MDI0MDE4RDQ4MjVBMTQ5MDAwRDhGODYwMEI4QkUKKzoxMDhGQTAwMDhGOEIwMEJDOENDNzAwMjBBRDY3MDAxMDhDQzUwMDI0REYKKzoxMDhGQjAwMEFENjUwMDE0OENDNDAwMjhBRDY0MDAxODhDQzMwMDJDNkYKKzoxMDhGQzAwMDBFMDAwRDE2QUQ2MzAwMUMyNDA4MDAwMjU3QzgwMDlDNUIKKzoxMDhGRDAwMDhGOTAwMEQwOEY4RjAwRDA4RjhBMDBDMDAyRTAyMDIxQjgKKzoxMDhGRTAwMDkxRTgwMEQwOTFFQjAwRDA5MUU3MDBEMDMxMTAwMEZGNjQKKzoxMDhGRjAwMDMxNkUwMEZGMDAxMDY5NDAwMDBFMjhDMDAxQTUxODIxNDUKKzoxMDkwMDAwMDMwRTkwMEZGMDM2M0M4MjEwMDA5MzE0MDAwQ0FGODIxOUMKKzoxMDkwMTAwMDI3MjIwMDg4QUY4MjAwQUNBRjlGMDBCQ0EzM0UwMDg4MkYKKzoxMDkwMjAwMDBFMDAwQ0Y2OEY5MDAwQUM4RkI4MDAyMDAwMDI2MzgwMTkKKzoxMDkwMzAwMDNDMEY0MjAwMDE5ODQwMjU4RjhDMDBCODAxMEY1ODI1NDUKKzoxMDkwNDAwMEFFMEIwMDA0OEQ4NDAwMzg4RjhCMDBBQzAwMDAyODIxMEIKKzoxMDkwNTAwMDAwMDUzOTAwQUQ2NDAwMTg4RDhFMDAzNDNDMEY3RkZGOTEKKzoxMDkwNjAwMDM1RThGRkZGQUQ2RTAwMUM5MTgzMDAzRThENjkwMDFDNEEKKzoxMDkwNzAwMDhENjYwMDE4MDAwMzUxMDAwMDAzNkYwMjAxMkFDMDIxMTEKKzoxMDkwODAwMDAwRUQxMDI1MDMwQUY4MkIwMEMyQzgyMTAzM0Y4MDIxMDAKKzoxMDkwOTAwMEFENzgwMDFDQUQ3MDAwMThBRDYwMDAwQ0FENjAwMDEwMjQKKzoxMDkwQTAwMDkxODQwMDNFMjQxRjAwMDUyNDEwQzAwMEE1NjQwMDE0MTQKKzoxMDkwQjAwMDk1OEUwMDA0MDJFODQwMjQwMkUwMjAyMUE1NkUwMDE2RUYKKzoxMDkwQzAwMDkxODUwMDNFQTU2NTAwMjA5NThEMDAwNEE1NkQwMDIyQzgKKzoxMDkwRDAwMEFENjAwMDI0OTE4NzAwM0ZBNTY3MDAwMjkxODMwMDNFQTgKKzoxMDkwRTAwMDkxODkwMDNEMDEyMzUwMjMyNTQ2MDAwMUExNjYwMDAxMUUKKzoxMDkwRjAwMDhGODIwMEFDOEY5OTAwQkNBQzU3MDAwOEEzM0YwMDAwRTIKKzoxMDkxMDAwMDhGOEEwMEJDOEY5ODAwQjg5NTRGMDAwMjk3MEUwMDEyMEUKKzoxMDkxMTAwMDI0MThGRkJGMDIwRjY4MjQzMUM1M0ZGRjAxQTUzODI1ODEKKzoxMDkxMjAwMEE1NDcwMDAyOTE0QzAwMDIyNDA1RkZERjMxODkwMDNGNzIKKzoxMDkxMzAwMDM1MjMwMDQwQTE0MzAwMDI4Rjk5MDBCQzhGODYwMEQwRTgKKzoxMDkxNDAwMDI0MDlGRkZGQUYyMDAwMDQ4Q0NCMDA3QzI0MDNGRjgwQTgKKzoxMDkxNTAwMEFGMkIwMDA4OTMyMjAwMEQzQzBCODAwMDMwNUYwMDdGOTYKKzoxMDkxNjAwMEEzM0YwMDBEOEY4RTAwQkM5MUQwMDAwRDAyMTg3ODI0MTMKKzoxMDkxNzAwMEExQ0YwMDBEOEY4QzAwQkM5MThEMDAwRDAxQTUzODI0NkUKKzoxMDkxODAwMEExODcwMDBEOEY4NjAwQkNBQ0M5MDAxMEFDRDYwMDE0QkUKKzoxMDkxOTAwMDkwQ0EwMDE4MDE0M0IwMjVBMEQ2MDAxODhGOEYwMEJDREMKKzoxMDkxQTAwMDhGOTgwMEI4OERFMjAwMTgwMDRCRjgyNDAzRThDODI1MUEKKzoxMDkxQjAwMEFERjkwMDE4OTMxMDAwM0VBMUYwMDAxQzhGOEUwMEI4OEUKKzoxMDkxQzAwMDhGOEQwMEJDOEY4NzAwRDA5NUM1MDAwNEE1QTUwMDFFMUIKKzoxMDkxRDAwMDBFMDAwMjBEOENFNTAwODQ4Rjg3MDBEMDAwMDI2MTQwRjQKKzoxMDkxRTAwMDAwMDIyMTAwOTBFQTAwQkMwMTg0NDgyMTAwNDAyODIxQUYKKzoxMDkxRjAwMDMxNTYwMDAyMTJDMDAwMDMwMkU5MzAyMTAwMDJCMDgwQTMKKzoxMDkyMDAwMDAwRDYzMDIxOTBFQzAwQkMzMTg0MDAwNDEwODAwMDAzQjMKKzoxMDkyMTAwMDMyRUEwMDAzMDAwNUMwODAwMEQ4MzAyMTI0MDkwMDA0OTAKKzoxMDkyMjAwMDhGOTcwMEJDMDEyQTEwMjMzMDVGMDAwMzAwREZDODIxQTQKKzoxMDkyMzAwMEFFRjkwMDA0MEUwMDBEMTZBNjI1MDAzODhGOTAwMEQwNjAKKzoxMDkyNDAwMDAzQzAxODIxMTQ2MDAwMDIwMDYwQjAyMTAwMDA5MDIxQ0EKKzoxMDkyNTAwMDU2QzAwMDg2OEY5NzAwQjgwMDEyODgyQjk2MDkwMDEwMjAKKzoxMDkyNjAwMDAyOTU1MDIzM0MxNDAwMjAwMkE5MTAyMUE2MDIwMDEwRjAKKzoxMDkyNzAwMEFGNTQwMDMwMzE1NEZGRkYwMDAwMDAwMDk2MTMwMDEwN0YKKzoxMDkyODAwMDk2MUYwMDEyMTNGMzAwMTEwMDAwMDAwMDhFMTcwMDBDNEYKKzoxMDkyOTAwMDhFMEMwMDA4MDAxNUM5ODAwMkY5NDAyMTAwMTkyN0MzNkYKKzoxMDkyQTAwMDAxMTlCMDJCMDE4NDc4MjEwMUY2NTgyMUFFMDgwMDBDNzkKKzoxMDkyQjAwMEFFMEIwMDA4MDAxNEE4MkIwMjM1ODAyNDEyMDBGRTZCQjAKKzoxMDkyQzAwMDhGOTAwMEQwMEEwMDBGM0YwMDAwMDAwMDk2MEIwMDE0QTIKKzoxMDkyRDAwMDhFMDUwMDA0MzE2M0ZGRkYwMDAzNzBDMDAwQUUzODIxMkIKKzoxMDkyRTAwMEFGNDcwMDNDOEUwNjAwMDQ4RjREMDAzQzAwQ0RGMDIzQkMKKzoxMDkyRjAwMDFCQzAwMDM2MDAwMDAwMDA4RTA4MDAwMDI1MDIwMDAxOUYKKzoxMDkzMDAwMDNDMTYwMDEwMzZDRjAwMDhBRjQyMDAzOEFGNEYwMDMwOTcKKzoxMDkzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDkzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDkzMzAwMDhGNDQwMDAwMzA4QzAwMjAxMTgwRkZGRDAwMDAwMDAwRjEKKzoxMDkzNDAwMDhGNTkwNDAwM0MxNzAwMjBBRTE5MDAwODhGNTUwNDA0MDMKKzoxMDkzNTAwMEFFMTUwMDBDQUY1NzAwMzAwMDAwMDAwMDNDMDYwODAwQkUKKzoxMDkzNjAwMDhDQzYwMDQ0MjQxODAwMDExMEQ4MDBEMzAwMDAwMDAwNkYKKzoxMDkzNzAwMDk2MDcwMDEyM0MwNTA4MDA4Q0E1MDA0MDAwQTc2ODIxNTQKKzoxMDkzODAwMEE2MEQwMDEyOTYxRTAwMTQyN0M5MDAwMUE2MDkwMDE0OUMKKzoxMDkzOTAwMDk2MDIwMDE0MzA0NEZGRkY1NDg2RkZDNzAwMTRBODJCMjgKKzoxMDkzQTAwMDMwQTVGRkZGMEUwMDBGMUFBNjAwMDAxNDNDMDMwODAwQjIKKzoxMDkzQjAwMDhDNjMwMDI0OTYwNTAwMTIwMDQzNzAyMzAwQUUzMDIzMTYKKzoxMDkzQzAwMEE2MDYwMDEyMEEwMDExNDUwMDE0QTgyQjhFMDIwMDAwMDgKKzoxMDkzRDAwMDBBMDAxMTU4M0MxNjAwMTA5MTU2MDAwMTI0MTAwMDAxOUIKKzoxMDkzRTAwMDAwMTY3ODQyMTVGMDAwMUM5N0E4MDAxRThENUYwMDE0MkYKKzoxMDkzRjAwMDI0MTFDMDAwMzNGRTNGRkYwMTExQzgyNDNDMTgwODAwQUYKKzoxMDk0MDAwMDhGMTgwMDYwMDMzRUI4MjUzMkU1M0ZGRjAwQjg1MDJCQUYKKzoxMDk0MTAwMDExNDAwMDExQTdCNzAwMUUzQzEwMDgwMDhFMTAwMDU4MjQKKzoxMDk0MjAwMDhGOEYwMEIwMDAwNTcxODAyNDBDRkY4MDAyMEY2ODIxMkYKKzoxMDk0MzAwMDAxQUU0ODIxMzEyNDAwN0YwMTJDNTgyNDAwOUEyODIxQjQKKzoxMDk0NDAwMDNDMDIwMDBFQUY0QjAwMkMwMEEyMzAyMTkwQzcwMDBENTMKKzoxMDk0NTAwMDM0RTMwMDA0QTBDMzAwMEQwRTAwMEQzODAwMDAwMDAwMkUKKzoxMDk0NjAwMDhGOTAwMEQwMjQwMzAwMDE4Rjk3MDBCODI2QjkwMDAxMjcKKzoxMDk0NzAwMDAwMTlBQzAwMDI0MzkwMjMwMDE1QUMwMzI2RjgwMDQwMEQKKzoxMDk0ODAwMDAyQjMyMDJBMDAxMjg4MkIyNDBDMDAwMTAzMDA1MDIxNzMKKzoxMDk0OTAwMDAwOTExMDI0QUY5ODAwQjgwQTAwMEY2REFGQUMwMDEwMTcKKzoxMDk0QTAwMDk1NTYwMDEyOEY4NDAwQjAzMkM1RkZGRjBFMDAwQ0VCMDIKKzoxMDk0QjAwMEE3QjYwMDE0OEY5MDAwRDAwQTAwMTFCMTAwMDAxODIxNDcKKzoxMDk0QzAwMDhENTkwMDM4QTYyMDAwMDgyNDA0MDAwM0FFMzkwMDAwOUUKKzoxMDk0RDAwMDhENTcwMDM0QTIyMDAwMEE4Rjk4MDBCOEFFMzcwMDA0RTAKKzoxMDk0RTAwMDNDMEYwMDgwOTMwQzAwM0ZBMjI0MDAwQzhFMjgwMDBDM0YKKzoxMDk0RjAwMDNDMEJGRjlGQTIyQzAwMEIwMTBGMTgyNTM1NkVGRkZGQzAKKzoxMDk1MDAwMDNDMDVGRkVGOEY5NzAwQjgwMDZFNjgyNDM0QTdGRkZGN0IKKzoxMDk1MTAwMDAxQTczMDI0QUUyNjAwMEM4RUZFMDAxNDk2RkYwMDEyMjgKKzoxMDk1MjAwMDhGODIwMEIwQUUzRTAwMTA4RUYwMDAxNEFFMjAwMDE4MDYKKzoxMDk1MzAwMEFFMjAwMDIwQUUzMDAwMTRBRTIwMDAyNDhFRTkwMDE4Q0EKKzoxMDk1NDAwMDMzRjAzRkZGMDAxMDUxODBBRTI5MDAyODhFRjkwMDA4NEIKKzoxMDk1NTAwMDAxNDJDMDIxMzNFQzAwMDFBRTM5MDAzMDhFRUIwMDBDMkIKKzoxMDk1NjAwMDhGODUwMEFDMDAxODc5QzIwMDBDMjM4MDAxRTQ0MDIxRjMKKzoxMDk1NzAwMDI0MEUwMDAyQTYyODAwMUNBNjIwMDAzNkFFMkIwMDJDQ0MKKzoxMDk1ODAwMEEwQUUwMDAwOTc2NzAwM0M4RjhBMDBBQzNDMDM0MjAwMEQKKzoxMDk1OTAwMDMwRURGRkZGMDFBMzMwMjVBRDQ2MDAwNDhGOUUwMEI4REIKKzoxMDk1QTAwMDI0MDIwMDAxMjQwOEMwMDA4RkQxMDAzODI0MDYwMDM0QjIKKzoxMDk1QjAwMEFENTEwMDE4OEZDOTAwMzRBRDQ5MDAxQ0FENDAwMDBDRkUKKzoxMDk1QzAwMEFENDAwMDEwQTU0MDAwMTRBNTQwMDAxNkE1NDAwMDIwQTUKKzoxMDk1RDAwMEE1NDAwMDIyQUQ0MDAwMjRBNTU2MDAwMkExNDIwMDAxOTIKKzoxMDk1RTAwMDhGOUYwMEFDOEY5OTAwQjg4Rjk4MDBCQ0FGRjYwMDA4MzEKKzoxMDk1RjAwMDkzMzcwMDAwQTMxNzAwMDA4RjhDMDBCODhGOEYwMEJDM0EKKzoxMDk2MDAwMDkxODQwMDAxQTFFNDAwMDE4RjhEMDBCQzk1QUIwMDAyQTQKKzoxMDk2MTAwMDAxNjg3MDI0MDFEMDI4MjVBNUE1MDAwMjkxQTcwMDAyQTkKKzoxMDk2MjAwMDMwRTMwMDNGQTFBMzAwMDI4RjgzMDBEMDhGODQwMEJDRjEKKzoxMDk2MzAwMDkwNzEwMEJDMzIzRTAwMDI1M0MwMDAwMTI0MDYwMDMwOEQKKzoxMDk2NDAwMEFDODYwMDA0OEM2RjAwN0MyNDAzRkZCRkFDOEYwMDA4NDUKKzoxMDk2NTAwMDkwODgwMDBEMzEwQjAwN0ZBMDhCMDAwRDhGODcwMEJDMjAKKzoxMDk2NjAwMDkwRUUwMDBEMDFDMzI4MjRBMEU1MDAwRDhGOUUwMEJDRTQKKzoxMDk2NzAwMDkzQ0QwMDBEMzVBNjAwMjBBM0M2MDAwRDhGOEEwMEI4M0IKKzoxMDk2ODAwMDhGOTEwMEJDOEQ1MDAwMjBBRTMwMDAxMDhENDkwMDI0MTkKKzoxMDk2OTAwMEFFMjkwMDE0OEQ0MjAwMjhBRTIyMDAxODhENUYwMDJDRTgKKzoxMDk2QTAwMEFFM0YwMDFDMEUwMDBEMTYwMDAwMDAwMDhGOTAwMEQwOTEKKzoxMDk2QjAwMDBBMDAxMTJCMDJDMDE4MjE5NjBBMDAxMjNDMUYwODAwNTQKKzoxMDk2QzAwMDhGRkYwMDI0MDNFQTk4MjFBNjEzMDAxMjBBMDAxMTQ1MTcKKzoxMDk2RDAwMDAwMTRBODJCQTA4RDAwMDE4Rjg5MDBBQzI0MEMwMDAxODAKKzoxMDk2RTAwMEFEMkMwMDA4MEEwMDEwNDU4RjgzMDBEMDI3QkRGRkUwOTUKKzoxMDk2RjAwMDNDMTgwODAwOEYxODAwNTBBRkIwMDAxMEFGQkYwMDE4MjIKKzoxMDk3MDAwMEFGQjEwMDE0QUY4NDAwQjA5MzcxMDA3NDAzMDQ3ODIxRUEKKzoxMDk3MTAwMDI0MTBGRjgwMzFFRTAwN0YzMjI1MDA3RjAxRjA1ODI0QjUKKzoxMDk3MjAwMDAxREE2ODIxM0MwQzAwMEFBMzg1MDBDNDAxQUMyODIxQTEKKzoxMDk3MzAwMEFGNEIwMDI0OTRBOTAwMTA5NzY4MDAwNjkwQTYwMDYyMjEKKzoxMDk3NDAwMDAwODAzODIxMjQwMjAwMzAwMTA5MjAyMzMwQzMwMEYwQkEKKzoxMDk3NTAwMEFGODUwMEQwMTA2MjAwMTkzMDkwRkZGRjkwQUUwMDYyMUMKKzoxMDk3NjAwMDI0MERGRkYwMjQwQTAwNTAwMUFFNjAyNDMxOEIwMEZGNkQKKzoxMDk3NzAwMDExNkEwMDJGMDAwMDAwMDAxNjAwMDAwNzI0MUYwQzAwRDMKKzoxMDk3ODAwMEFGNUYwMDI0OEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwOUUKKzoxMDk3OTAwMDAzRTAwMDA4MjdCRDAwMjAwRTAwMEYyMDAyMDAyMDIxNUEKKzoxMDk3QTAwMDI0MUYwQzAwQUY1RjAwMjQ4RkIxMDAxNDhGQkYwMDE4N0UKKzoxMDk3QjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDk0QTIwMEUwNTUKKzoxMDk3QzAwMDk0QTQwMEUyOTBCRjAxMTMwMDgyMTgyNjMwNzlGRkZGQjUKKzoxMDk3RDAwMDMzRTcwMEMwMTRFMDAwMDkyRjMxMDAwMTE2MDAwMDM4MDMKKzoxMDk3RTAwMDAwMDAwMDAwNTYyMEZGRTYyNDFGMEMwMDBFMDAwRERCRDkKKzoxMDk3RjAwMDAwMDAwMDAwMEEwMDEyNzcyNDFGMEMwMDE2MjBGRkRFNzQKKzoxMDk4MDAwMDAwMDAwMDAwMEUwMDBEREIwMDAwMDAwMDE0NDBGRkRDMzMKKzoxMDk4MTAwMDI0MUYwQzAwMTYwMDAwMjI4RjgzMDBEMDkwNjkwMTEzRDIKKzoxMDk4MjAwMDMxMjIwMDNGQTA2MjAxMTMwQTAwMTI3NzI0MUYwQzAwQUUKKzoxMDk4MzAwMDk0QUYwMEQ0OEY4NjAwRDQwMEUwMjgyMTI0MDQwMDA1RDIKKzoxMDk4NDAwMDBFMDAwQzdDMzFGMEZGRkYxNDQwMDAwNTI0MDMwMDAzRTAKKzoxMDk4NTAwMDk3OTEwMEU2MDAwMDE4MjEyNjI1RkZGRkE3ODUwMEU2NjYKKzoxMDk4NjAwMDhGNTgwMUI4MDcwMEZGRkUzQzE5NjAxM0FGNDAwMTgwMUMKKzoxMDk4NzAwMDI0MUYwQzAwQUY1MDAxODQwMDc5MzgyNTNDMTAxMDAwRTMKKzoxMDk4ODAwMEFGNDcwMTg4OEZCMTAwMTRBRjUwMDFCOEFGNUYwMDI0MUIKKzoxMDk4OTAwMDhGQjAwMDEwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwMjQKKzoxMDk4QTAwMDBFMDAwRjIwMDIwMDIwMjE1MDQwRkZCNTI0MUYwQzAwQTUKKzoxMDk4QjAwMDhGODMwMEQwOTA2OTAxMTMwQTAwMTJBMDMxMjIwMDNGNkIKKzoxMDk4QzAwMDBFMDAwRjIwMDIwMDIwMjExNDQwRkZBRDI0MUYwQzAwQzkKKzoxMDk4RDAwMDEyMjAwMDA3OEY4MzAwRDA5MDY4MDExMzMxMDYwMDNGRUIKKzoxMDk4RTAwMDM0QzIwMDQwQTA2MjAxMTMwQTAwMTI3NzI0MUYwQzAwNEEKKzoxMDk4RjAwMDBFMDAwRERCMDAwMDAwMDA1MDQwRkZBMTI0MUYwQzAwRjMKKzoxMDk5MDAwMDhGODMwMEQwOTA2ODAxMTMzMTA2MDAzRjBBMDAxMkQwMDcKKzoxMDk5MTAwMDM0QzIwMDQwQUY5QjAwQzgwM0UwMDAwOEFGODAwMEVDRjkKKzoxMDk5MjAwMDMwODlGRkZGMDAwOTQwNDIyRDAyMDA0MTAwMDkyOTgwRDMKKzoxMDk5MzAwMDE0NDAwMDAyMDAwOTUwNDAyNDA4MDA0MDAwMDg3OTQwMEIKKzoxMDk5NDAwMDAwMDhDMEMwMDFGODU4MjEyNTY3MDFBODAwRUY3MDIxNjgKKzoxMDk5NTAwMDI1Q0MwMDdGMjQwREZGODAwMThEMTgyNDAwNjUzMDIxNjcKKzoxMDk5NjAwMDAwQ0EyODIxMjU2NDAwODgyNDBBMDA4ODNDMDEwODAwRDgKKzoxMDk5NzAwMEFDMkEwMDRDM0MwMTA4MDBBQzI0MDA1MEFGODUwMEQ0NTgKKzoxMDk5ODAwMDNDMDEwODAwQUMyOTAwNjAzQzAxMDgwMEFDMjgwMDY0RTAKKzoxMDk5OTAwMDNDMDEwODAwQUMyNzAwNTQzQzAxMDgwMEFDMjMwMDU4RUYKKzoxMDk5QTAwMDNDMDEwODAwQUMyNjAwNUMwM0UwMDAwODAwMDAwMDAwNTkKKzoxMDk5QjAwMDMwODMwMEZGMzBDNkZGRkYzMEU0MDBGRjhGNDIwMUI4NjQKKzoxMDk5QzAwMDA0NDBGRkZFMDAwMzRDMDAwMTI0MzgyNTNDMDg2MDAwRTEKKzoxMDk5RDAwMDAwRTgyMDI1M0MwMzEwMDBBRjQ1MDE4MEFGNDYwMTg0MUMKKzoxMDk5RTAwMEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODhGODYwMDFDMzQKKzoxMDk5RjAwMDNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFMzMKKzoxMDlBMDAwMDM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0MUQKKzoxMDlBMTAwMDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyNDIKKzoxMDlBMjAwMEFDQTIzMTg0MDNFMDAwMDhBNzgzMDBFNDNDMDMwODAwRjMKKzoxMDlBMzAwMDhDNjMwMDUwOEY4NDAwRTg4Rjg2MDAxQzI0MDJGRjgwMTYKKzoxMDlBNDAwMDAwNjRDMDIxMDMwMkM4MjRBRjU5MDAyODhDQ0QwMDA0NTMKKzoxMDlBNTAwMDMzMDUwMDdGMDBCQTc4MjEzQzBFMDAwQzAxRUUyODIxNkUKKzoxMDlBNjAwMEFDQUQwMDU4OENDODAwMDhBRjg1MDBEMDNDMDc2MDEyMzAKKzoxMDlBNzAwMEFDQTgwMDVDOENDQzAwMTAzNEU4MDAxMEFDQUMwMDBDM0UKKzoxMDlBODAwMDhDQ0IwMDBDQUNBQjAwMDg5NEFBMDAxNDNDMDIwODAwN0MKKzoxMDlBOTAwMDhDNDIwMDQ0MjU0OTAwMDFBNEE5MDAxNDk0QTQwMDE0OTgKKzoxMDlBQTAwMDMwODNGRkZGMTA2MjAwMTc4Rjg0MDBEMDNDMEEwODAwNEIKKzoxMDlBQjAwMDhENEEwMDQwQTRBQTAwMTI4Q0NFMDAxOEFDOEUwMDI0NUYKKzoxMDlBQzAwMDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDMDYKKzoxMDlBRDAwMDhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDM0IKKzoxMDlBRTAwMDUxNjYwMDFBOEQwMjAwQjQ4RDAyMDBCOEE0ODIwMDNBQkIKKzoxMDlBRjAwMDk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4QkYKKzoxMDlCMDAwMDMxMDJGRkZGM0MwOTA4MDA4RDI5MDAyNEE0QTAwMDE0QTUKKzoxMDlCMTAwMDhGODQwMEQwQTRBOTAwMTI4Q0NFMDAxOEFDOEUwMDI0MzMKKzoxMDlCMjAwMDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDQTUKKzoxMDlCMzAwMDhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDREEKKzoxMDlCNDAwMDU1NjZGRkVBOEQwMjAwQjg4RDAyMDBCNEE0ODIwMDNBODcKKzoxMDlCNTAwMDk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4NUUKKzoxMDlCNjAwMDMxMDJGRkZGOEY4NjAwMUMzQzBDMDgwMDhEOEMwMDUwREEKKzoxMDlCNzAwMDI0MEJGRjgwOENDRDAwMDgzQzAzMDAwQzAwMEQ1MUMwNkQKKzoxMDlCODAwMDAxOEE0MDIxMDEwQjQ4MjRBRjhBMDBFOEFGNDkwMDI4MzAKKzoxMDlCOTAwMDkwQzcwMDA3MzEwNTAwN0YwMEJBMTAyMTAwNDMyODIxM0IKKzoxMDlCQTAwMDMwRTQwMDA0MTA4MDAwMkZBRjg1MDBEMDkwQ0YwMDA3NzQKKzoxMDlCQjAwMDMxRUUwMDA4MTFDMDAwM0MwMDAwMDAwMDhDRDkwMDBDMDAKKzoxMDlCQzAwMDhDQzQwMDE0MDMyNEMwMkIxMzAwMDAyNjAwMDAwMDAwRTYKKzoxMDlCRDAwMDhDQzIwMDBDQUNBMjAwNjQ4Q0NEMDAxODI0MDJGRkY4RUIKKzoxMDlCRTAwMEFDQUQwMDY4OENDQzAwMTBBQ0FDMDA4MDhDQ0IwMDBDMTEKKzoxMDlCRjAwMEFDQUIwMDg0OENDQTAwMUNBQ0FBMDA3QzkwQTkwMEJDNTEKKzoxMDlDMDAwMDAxMjI0MDI0QTBBODAwQkM5MEMzMDAwNzMwNjcwMDA4RDAKKzoxMDlDMTAwMDEwRTAwMDA0OEY4NTAwRDA5MEFGMDBCQzM1RUUwMDAxNEQKKzoxMDlDMjAwMEEwQUUwMEJDOTBEOTAwMDczMzM4MDAwMTEzMDAwMDBGMkMKKzoxMDlDMzAwMDhGODQwMEQwMjQwNzAwMjA5MDgyMDBCQzM0NDkwMDAyQTkKKzoxMDlDNDAwMEEwODkwMEJDOEY4NDAwRDA5MDg4MDA2MjMxMDMwMEYwQUUKKzoxMDlDNTAwMDE0NjcwMDA2MjQwQTAwMzRBQzhBMDBDMDBBMDAxM0IyNUMKKzoxMDlDNjAwMDAwMDAwMDAwMEEwMDEzOEM4Q0MyMDAxNDkwQ0IwMDA3ODcKKzoxMDlDNzAwMDMxNjYwMDAyMTBDMDAwMDUwMDAwMDAwMDkwOEQwMEJDOUQKKzoxMDlDODAwMDM1QUMwMDA0QTA4QzAwQkM4Rjg0MDBEMDkwOTgwMTEzRTgKKzoxMDlDOTAwMDMzMEYwMDNGQTA4RjAxMTM4RjhFMDBEMDk1QzUwMEQ0RTUKKzoxMDlDQTAwMDAzRTAwMDA4MzBBMkZGRkZBQ0EwMDA2NDBBMDAxMzhEOUYKKzoxMDlDQjAwMDAwMDAwMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDFDM0YKKzoxMDlDQzAwMEFGQkYwMDI0QUZCNDAwMjBBRkIyMDAxOEFGQjEwMDE0OTIKKzoxMDlDRDAwMEFGQjMwMDFDOTYxMzAwMEUzQzA3NjAwQTNDMTQ2MDA2RUMKKzoxMDlDRTAwMDMyNjRGRkZGMzY5MzAwMTAwRTAwMTJERjM0RjQwNDEwQ0MKKzoxMDlDRjAwMDhGODQwMEQ0M0MxMTYwMEUwRTAwMDlCQjM2MzEwMDEwNzkKKzoxMDlEMDAwMDkyMEUwMDE1M0MwNzA4MDA4Q0U3MDA2MDNDMTI2MDEyQzAKKzoxMDlEMTAwMDMxQ0QwMDBGQTM4RDAwRjA4RTBFMDAwNDhFMEQwMDA4RDMKKzoxMDlEMjAwMDk2MDgwMDEyOTYxRjAwMTA5NjE5MDAxQTk2MTgwMDFFMjkKKzoxMDlEMzAwMDk2MEYwMDFDMzEwQ0ZGRkYzM0VCRkZGRjMzMkFGRkZGQjAKKzoxMDlENDAwMDMzMDlGRkZGMzFFNkZGRkYzQzAxMDgwMEFDMkIwMDQwNjgKKzoxMDlENTAwMDNDMDEwODAwQUMyQzAwMjQzQzAxMDgwMEFDMkEwMDQ0NjMKKzoxMDlENjAwMEFFMjkzMTc4QUUyNjMxN0M5MjAyMDAxNTk2MDMwMDE2OUEKKzoxMDlENzAwMDM2NTIwMDEwMzA0NDAwRkYzMDY1RkZGRjNDMDYwODAwRkIKKzoxMDlEODAwMDhDQzYwMDY0QUUyNDMxODhBRTQ1MDBCNDkyMDgwMDE0M0QKKzoxMDlEOTAwMDk2MTkwMDE4MjQxRjAwMDEwMTFGQzAwNDMzMkZGRkZGNzQKKzoxMDlEQTAwMDNDMDUwODAwOENBNTAwNThBRTU4MDBCOEFFNEYwMEJDNkEKKzoxMDlEQjAwMDkyMEMwMDE0QUY4RTAwRDhBRjhEMDBEQzMxOEIwMEZGMDkKKzoxMDlEQzAwMEFFNEIwMEMwOTIwQTAwMTVBRTY3MDA0OEFFNjYwMDRDNkMKKzoxMDlERDAwMDMxNDkwMEZGQUU0OTAwQzhBRTY1MDA3QzNDMDMwODAwNzUKKzoxMDlERTAwMDhDNjMwMDUwM0MwNDA4MDA4Qzg0MDA0QzNDMDgwODAwNDQKKzoxMDlERjAwMDhEMDgwMDU0M0MwMjA4MDA4QzQyMDA1QzhGQkYwMDI0OTgKKzoxMDlFMDAwMEFFNjMwMDgwOEZCMDAwMTBBRTgzMDA3NDhGQjMwMDFDNkYKKzoxMDlFMTAwMEFFMjIzMTlDQUU0MjAwRENBRTI3MzFBMEFFMjYzMUE0OEEKKzoxMDlFMjAwMEFFMjQzMThDQUUyMzMxOTBBRTI4MzE5NEFFMjUzMTk4REEKKzoxMDlFMzAwMEFFODcwMDUwQUU4NjAwNTRBRTg1MDA3MDhGQjEwMDE0MUUKKzoxMDlFNDAwMEFFNDcwMEUwQUU0NjAwRTRBRTQ0MDBDQ0FFNDMwMEQwRTYKKzoxMDlFNTAwMEFFNDgwMEQ0QUU0NTAwRDg4RkI0MDAyMDhGQjIwMDE4QjEKKzoxMDlFNjAwMDAzRTAwMDA4MjdCRDAwMjgyN0JERkZFMEFGQjEwMDE0QzQKKzoxMDlFNzAwMEFGQkYwMDE4MjQxMTAwMDEwRTAwMDg2NUFGQjAwMDEwM0MKKzoxMDlFODAwMDEwNTEwMDA1OTc4NDAwRTY5NzgzMDBDQzAwODMxMDJCQzcKKzoxMDlFOTAwMDE0NDAwMDA4OEY4NTAwRDQyNDA3MDAwMjhGQkYwMDE4RUIKKzoxMDlFQTAwMDhGQjEwMDE0OEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MTMKKzoxMDlFQjAwMDI3QkQwMDIwMEUwMDBDOUEyNDA0MDAwNUFGODIwMEU4QTQKKzoxMDlFQzAwMDEwNDBGRkY2MjQwNzAwMDIwRTAwMDg2OThGOTAwMDFDNjYKKzoxMDlFRDAwMDk3OUYwMEU2OEY5OTAwRTg4RjhEMDBDODI3RUYwMDAxNUIKKzoxMDlFRTAwMDI0MEUwMDUwQUY1OTAwMjBBNzhGMDBFNkExQUUwMDAwNUQKKzoxMDlFRjAwMDNDMEMwODAwOEQ4QzAwNjQ4Rjg2MDBDODI0MEE4MDAwMEEKKzoxMDlGMDAwMDAwMEM1RTAwQUNDQjAwNzRBNEMwMDAwNjk0QzkwMDBBMkIKKzoxMDlGMTAwMDI0MUZGRjgwM0MwRDAwMEMwMTJBQzAyNEE0RDgwMDBBOTUKKzoxMDlGMjAwMDkwQzgwMDBBMjQxODIwMDAwMTFGMTgyNUEwQzMwMDBBQTkKKzoxMDlGMzAwMDhGODcwMEM4QTBFMDAwNzg4Rjg1MDBDODAwMDAzODIxMTYKKzoxMDlGNDAwMEEwQTAwMDgzM0MwMjA4MDA4QzQyMDA1MDhGODQwMEU4RUYKKzoxMDlGNTAwMDAwNDQ3ODIxMDFGRkM4MjRBRjU5MDAyODk2MEIwMDAyNjUKKzoxMDlGNjAwMDMxRUUwMDdGMDFEQTYwMjEwMThEMzAyMUE0Q0IwMEQ0RDUKKzoxMDlGNzAwMDk2MEEwMDAyQUY4NjAwRDAzQzBFMDAwNDI1NDkyNDAxNTkKKzoxMDlGODAwMEE0QzkwMEU2OEUwODAwMDRBQ0M4MDAwNDhFMDMwMDA4RDMKKzoxMDlGOTAwMEFDQzMwMDAwQTRDMDAwMTBBNEMwMDAxNEEwQzAwMEQwMzYKKzoxMDlGQTAwMDhGODUwMEQwMjQwM0ZGQkZBMEEwMDBEMTNDMDQwODAwOEYKKzoxMDlGQjAwMDhDODQwMDY0OEY4MjAwRDBBMDQ0MDBEMjhFMUYwMDBDREQKKzoxMDlGQzAwMDhGOEEwMEQwOTc4RjAwRTRBRDVGMDAxQzhFMTkwMDEwQkYKKzoxMDlGRDAwMDI0MTAwMDMwQUQ1OTAwMThBNTQwMDAzMEE1NTEwMDU0QTAKKzoxMDlGRTAwMEE1NTEwMDU2QTU0RjAwMTZBRDRFMDA2OEFENTgwMDgwMzMKKzoxMDlGRjAwMEFENTgwMDg0OTE0RDAwNjIzMUFDMDAwRjM1OEIwMDEwREMKKzoxMEEwMDAwMEExNEIwMDYyOEY4NjAwRDA5MEM5MDA2MzMxMjgwMDdGODkKKzoxMEEwMTAwMEEwQzgwMDYzOEY4NDAwRDAyNDA2RkZGRjkwODUwMDYzRjIKKzoxMEEwMjAwMDAwQTMxMDI0QTA4MjAwNjM4RjkxMDBEMDAwRTAxMDIxRDMKKzoxMEEwMzAwMDkyM0YwMEJDMzdGOTAwMDFBMjM5MDBCQzhGOEEwMEQwRTIKKzoxMEEwNDAwMDkzOEYwMEYwQUQ1ODAwNjRBRDUwMDBDMDkxNEUwMEQzMjYKKzoxMEEwNTAwMDAwMEY2OTAwMzFDQzAwMEYwMThENTgyNUExNEIwMEQzQjIKKzoxMEEwNjAwMDhGODUwMEQwOEY4OTAwRENBQ0E5MDBFODhGODgwMEQ4RUMKKzoxMEEwNzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwRDMKKzoxMEEwODAwMEFDQTgwMEVDQTRBNjAwRDZBNEEwMDBFMEE0QTAwMEUyMjYKKzoxMEEwOTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEFGQjAwMDEwQTMKKzoxMEEwQTAwMDhGOTAwMDFDQUZCMTAwMTRBRkJGMDAxODhFMTkwMDA0RDAKKzoxMEEwQjAwMDNDMTgwODAwOEYxODAwNTAyNDBGRkY4MDAwMTk4OUMwMzkKKzoxMEEwQzAwMDAyMzg3MDIxMzFDRDAwN0YwMUNGNjAyNDAxQkE1MDIxQzgKKzoxMEEwRDAwMDNDMEIwMDBDQUY0QzAwMjgwMTRCNDAyMTk1MDkwMEQ0RUIKKzoxMEEwRTAwMDk1MDQwMEQ2OEUwNzAwMDQzMTMxRkZGRkFGODgwMEQwMDEKKzoxMEEwRjAwMDBFMDAwOTMzMDAwNzIxQzA4RTA2MDAwNDhGODMwMEM4QkMKKzoxMEExMDAwMDAwMDYyOUMwQUY0NTAwMjA5MDY0MDAzRTMwODIwMDQwMjgKKzoxMEExMTAwMDE0NDAwMDA2OEY4NDAwRDAzNDFGRkZGRjk0ODMwMEQ2QzQKKzoxMEExMjAwMDMwNjJGRkZGMTQ1RjAwMDQwMDAwMDAwMDk0ODQwMEQ2M0EKKzoxMEExMzAwMDBFMDAwOEM4MzA4NEZGRkY4RTA1MDAwNDAyMjAzMDIxODUKKzoxMEExNDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyQkMKKzoxMEExNTAwMDAwMDAzODIxMDAwNTI5QzAwQTAwMTMwMzI3QkQwMDIwOTQKKzoxMEExNjAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwOEEKKzoxMEExNzAwMEFGQkYwMDE4MTIyMDAwMUQwMDAwODAyMThGODYwMDFDMzgKKzoxMEExODAwMDhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMjAwMDUxNDAyRjAKKzoxMEExOTAwMDMwRTQwMDA3MTQ4MzAwMTUzMDQ1MDBGRjJDQTgwMDA2QUEKKzoxMEExQTAwMDExMDAwMDREMDAwNTU4ODAzQzBDMDgwMDI1OEM1QTAwMTkKKzoxMEExQjAwMDAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODAwMDAwMDAwQzIKKzoxMEExQzAwMDhGOEUwMEVDMjQwRDAwMDExMUNEMDA1OTAwMDAwMDAwMUQKKzoxMEExRDAwMDI2MEIwMDAxMzE3MEZGRkYyNENBMDAyMDAyMTEyMDJCNDIKKzoxMEExRTAwMDAxNDAzMDIxMTQ4MEZGRTZBRjhBMDAxQzAyMDAxMDIxREMKKzoxMEExRjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NkIKKzoxMEEyMDAwMDI3QkQwMDIwOTM4NzAwQ0UxNEUwMDAzODI0MDQwMDE0RkEKKzoxMEEyMTAwMDBFMDAxM0M0MDAwMDAwMDA4Rjg2MDAxQzI0MDIwMDAxMDEKKzoxMEEyMjAwMDBBMDAxNTBCQUY4MjAwRUM4Rjg5MDBFQzI0MDgwMDAyQjUKKzoxMEEyMzAwMDExMjgwMDNCMjQwNDAwMTMwMDAwMjgyMTAwMDAzMDIxRDUKKzoxMEEyNDAwMDI0MDcwMDAxMEUwMDEzMDMwMDAwMDAwMDBBMDAxNTBCOTQKKzoxMEEyNTAwMDhGODYwMDFDOEY4NzAwRUMyNDA1MDAwMjE0RTVGRkY2QjIKKzoxMEEyNjAwMDI0MDQwMDEyMEUwMDEzNzAwMDAwMDAwMDhGODUwMEU4MjcKKzoxMEEyNzAwMDAwNDAzMDIxMjQwNDAwMTIwRTAwMTMwMzAwMDAzODIxOTYKKzoxMEEyODAwMDBBMDAxNTBCOEY4NjAwMUM4RjgzMDBFQzI0MUYwMDAzMkYKKzoxMEEyOTAwMDE0N0ZGRkQwMjYwQjAwMDEwRTAwMTMyMjAwMDAwMDAwRTcKKzoxMEEyQTAwMDhGODUwMEU4MDA0MDMwMjEyNDAyMDAwMjI0MDQwMDEwQzEKKzoxMEEyQjAwMDAwMDAzODIxQUY4MjAwRUMwRTAwMTMwMzAwMDAwMDAwMDQKKzoxMEEyQzAwMDBBMDAxNTBCOEY4NjAwMUM4RjhGMDBFQzI0MDYwMDAyRkQKKzoxMEEyRDAwMDExRTYwMDBCMDAwMDAwMDAyNDA0MDAxMDAwMDAyODIxRkIKKzoxMEEyRTAwMDAwMDAzMDIxMEEwMDE1MjgyNDA3MDAwMTAwMDAyODIxNjEKKzoxMEEyRjAwMDBFMDAxMzAzMDAwMDMwMjEwQTAwMTUwQjhGODYwMDFDOEUKKzoxMEEzMDAwMDBFMDAxNDMxMDAwMDAwMDAxNDQwMDAxMjhGOTkwMDFDNTAKKzoxMEEzMTAwMDhGODYwMDFDMjQwMjAwMDMwQTAwMTUwQkFGODIwMEVDOUMKKzoxMEEzMjAwMDBFMDAxNEJEMDAwMDAwMDAwQTAwMTUwQjhGODYwMDFDRjMKKzoxMEEzMzAwMDBFMDAxMzEyMDAwMDAwMDAyNDAyMDAwMjI0MDQwMDE0ODYKKzoxMEEzNDAwMDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMTBBMDAxNTQ1QjYKKzoxMEEzNTAwMEFGODIwMEVDMDA0MDM4MjEyNDA0MDAxMDk3MzgwMDAyM0UKKzoxMEEzNjAwMDAwMDAyODIxMEUwMDEzMDMzMzA2RkZGRjBBMDAxNTBCMUYKKzoxMEEzNzAwMDhGODYwMDFDOEY4NDAwQzgzQzA3N0ZGRjM0RTZGRkZGRjgKKzoxMEEzODAwMDhDODUwMDc0MjQwMjAwMDEwMEE2MTgyNEFDODMwMDc0OUMKKzoxMEEzOTAwMDAzRTAwMDA4QTA4MjAwMDUxMEEwMDAzNjJDQTIwMDgwNzcKKzoxMEEzQTAwMDI3NEEwNDAwM0MwQjAwMDUyNDA5MDA4MDEwNDAwMDA3RTgKKzoxMEEzQjAwMDI0MDgwMDgwMzBBNjAwMEYwMEM1NDAyMTJEMDMwMDgxMzUKKzoxMEEzQzAwMDE0NjAwMDAyMDBBMDQ4MjEyNDA4MDA4MEFGNEIwMDMwMzgKKzoxMEEzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMDA5NjMKKzoxMEEzRTAwMDAwMDAzODIxMDE0MDMwMjE4QzhEMDAwMDI0RTcwMDA0NUEKKzoxMEEzRjAwMDAwRTg2MDJCQUNDRDAwMDAyNDg0MDAwNDE1ODBGRkZBMzcKKzoxMEE0MDAwMDI0QzYwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMEE0MTAwMDNDMEUwMDA2MDEwRTM4MjVBRjQ3MDAzMDAwMDAwMDAwNUEKKzoxMEE0MjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRTgwMDEwMjUKKzoxMEE0MzAwMDExMDBGRkZEMDAwMDAwMDA4RjQyMDAzQzhGNDMwMDNDRjQKKzoxMEE0NDAwMDAwNDlDODIxMDMyM0MwMkIxMzAwMDAwNDAwMDAwMDAwQjIKKzoxMEE0NTAwMDhGNEMwMDM4MjU4NjAwMDFBRjQ2MDAzODhGNDcwMDNDRkUKKzoxMEE0NjAwMDAwQTkyODIzMDBFOTY4MjFBRjREMDAzQzE0QTBGRkNFQ0QKKzoxMEE0NzAwMDJDQTIwMDgwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQwRjAKKzoxMEE0ODAwMDNDMDIwMDAyQUZCMTAwMTQzQzExMDAwQ0FGNDUwMDM4OTMKKzoxMEE0OTAwMEFGQjMwMDFDQUY0NjAwM0MwMDgwOTgyMUFGNDIwMDMwQjMKKzoxMEE0QTAwMDI0MDUwMDg4QUY0NDAwMjgwMzUxMjAyMUFGQkYwMDI4QjUKKzoxMEE0QjAwMEFGQjUwMDI0QUZCNDAwMjBBRkIyMDAxODBFMDAxNTdENzgKKzoxMEE0QzAwMEFGQjAwMDEwM0MxRjA4MDA4RkZGMDA0QzNDMTgwODAwODQKKzoxMEE0RDAwMDhGMTgwMDY0MjQxMEZGODAwM0YzQTgyMTMyQjkwMDdGOTUKKzoxMEE0RTAwMDAyQjA3ODI0MDAxOEEwQzAwMzNBNzAyMTAwMTg5MTQwRUYKKzoxMEE0RjAwMDAxRDEyMDIxQUY0RjAwMjgwRTAwMTU3RDAyNTQyODIxRTQKKzoxMEE1MDAwMDNDMEQwODAwOERBRDAwNTAyNDA1MDEyMDAxQjM1ODIxRjkKKzoxMEE1MTAwMDMxNkMwMDdGMDE3MDUwMjQwMTlBNDgyMTAxMzEyMDIxQzMKKzoxMEE1MjAwMDBFMDAxNTdEQUY0QTAwMjgzQzA4MDgwMDhEMDgwMDU0MzUKKzoxMEE1MzAwMDNDMDUwODAwOENBNTAwNjQwMTEzMzgyMTMwRTYwMDdGM0IKKzoxMEE1NDAwMDAwRjAxODI0MDBEQTIwMjEwMDkxMjAyMUFGNDMwMDI4RDgKKzoxMEE1NTAwMDBFMDAxNTdEMDAwNTI5NDAzQzAyMDgwMDhDNDIwMDU4ODEKKzoxMEE1NjAwMDNDMTAwODAwOEUxMDAwNjAxMjAwMDAxQzAwNTM4ODIxNkYKKzoxMEE1NzAwMDI0MTVGRjgwMEEwMDE2MDAzQzE0MDAwQzMyMjYwMDdGRDAKKzoxMEE1ODAwMDAyMzUxODI0MDBEQTIwMjEwMjQwMjgyMUFGNDMwMDI4OTgKKzoxMEE1OTAwMDAwOTQyMDIxMEUwMDE1N0QyNjEwRkZDMDEyMDAwMDBGMzAKKzoxMEE1QTAwMDAyMzI4ODIxMkUwNTAwNDExMEEwRkZGNDI0MTIxMDAwNzEKKzoxMEE1QjAwMDMyMjYwMDdGMDAxMDkxODAwMjM1MTgyNDAwREEyMDIxMTUKKzoxMEE1QzAwMDAyNDAyODIxQUY0MzAwMjgwMDk0MjAyMTBFMDAxNTdENzEKKzoxMEE1RDAwMDAwMDA4MDIxMTYwMEZGRjMwMjMyODgyMTNDMEIwODAwQTYKKzoxMEE1RTAwMDhENkIwMDVDMjQwQUZGODAyNDA1MDAwMjAxNzM0MDIxNkEKKzoxMEE1RjAwMDAxMEE0ODI0QUY0OTAwMjgzQzA0MDgwMDk0ODQwMDYyMDIKKzoxMEE2MDAwMDMxMTAwMDdGMDIxQTg4MjEzQzA3MDAwQzBFMDAwQ0NBOTIKKzoxMEE2MTAwMDAyMjc5ODIxMDA0MDI4MjEwMjYwMjAyMThGQkYwMDI4QjYKKzoxMEE2MjAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4QTgKKzoxMEE2MzAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMTU3RDI3QkQwMDMwQzcKKzoxMEE2NDAwMDhGODMwMDFDOEM2MjAwMDQxMDQwMDAwMzAwMDAwMDAwOTcKKzoxMEE2NTAwMDAzRTAwMDA4MDAwMDAwMDA4QzY0MDAxMDhDNjUwMDA4MTYKKzowOEE2NjAwMDBBMDAxNUI2OEM2NjAwMEMxRgorOjA4QTY2ODAwMDAwMDAwMDAwMDAwMDAxQkNGCis6MTBBNjcwMDAwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNkIzCis6MTBBNjgwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNEI4Cis6MTBBNjkwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0FFCis6MTBBNkEwMDAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMkExCis6MTBBNkIwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkyCis6MTBBNkMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjgyCis6MTBBNkQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjcyCis6MENBNkUwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE2QgorOjA0QTZFQzAwMDgwMDBGNThGQgorOjEwQTZGMDAwMDgwMDBEQjAwODAwMEZFQzA4MDAxMDk0MDgwMDBGODA0RgorOjEwQTcwMDAwMDgwMDBGQzAwODAwMTFDQzA4MDAwRENDMDgwMDExRjBBMworOjEwQTcxMDAwMDgwMDBFMUMwODAwMTYzNDA4MDAxNURDMDgwMDBEQ0NEQgorOjEwQTcyMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxMjdDMDgwMDEyN0MzQgorOjEwQTczMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxNTgwMDgwMDBEQ0NEOQorOjEwQTc0MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDEzRjA1QgorOjEwQTc1MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M3NQorOjEwQTc2MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M2NQorOjEwQTc3MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M1NQorOjEwQTc4MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRkUwMDgwMDBEQ0MyRgorOjEwQTc5MDAwMDgwMDBEQ0MwODAwMTUzMDA4MDAwRENDMDgwMDBEQ0NDOQorOjEwQTdBMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MyNQorOjEwQTdCMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MxNQorOjEwQTdDMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwNQorOjEwQTdEMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDE0NUM1RQorOjEwQTdFMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxMzcwMDgwMDEyRTAyMgorOjEwQTdGMDAwMDgwMDJFOTQwODAwMkU5QzA4MDAyRTY0MDgwMDJFNzA3RAorOjEwQTgwMDAwMDgwMDJFN0MwODAwMkU4ODA4MDA0NkI0MDgwMDNGMDA4RgorOjEwQTgxMDAwMDgwMDQ2MzQwODAwNDZCNDA4MDA0NkI0MDgwMDQ0QjRCMgorOjEwQTgyMDAwMDgwMDQ2QjQwODAwNDZGQzA4MDA1NTI0MDgwMDU0RTQxQgorOjEwQTgzMDAwMDgwMDU0QjAwODAwNTQ4NDA4MDA1NDYwMDgwMDU0MUNGOAorOjEwQTg0MDAwMEEwMDBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2RgorOjEwQTg1MDAwNzI3ODcwMzUyRTMwMkUzMDZBMzYwMDAwMDUwMDAwMDMwNQorOjEwQTg2MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwRDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwRDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwRDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwRDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwRDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwRDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwRDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwRDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwRDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwRDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwRDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwRDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwRDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwRDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwRDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwRDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwRDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwRDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwRDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwRDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwRDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwRDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwRDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwRDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwRDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwRDU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwRDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwRDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwRDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwRDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwRDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwRDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwRDVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwRDVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwRDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwRDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwRDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwRDYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwRDYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwRDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwRDY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwRDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwRDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwRDY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwRDZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwRDZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwRDZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwRDZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwRDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwRDZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwRDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwRDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwRDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwRDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwRDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwRDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwRDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwRDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwRDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwRDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwRDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwRDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwRDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwRDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwRDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwRDgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwRDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwRDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwRDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwRDg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwRDg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwRDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwRDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwRDhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwRDhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwRDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwRDhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwRDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwRDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwRDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwRDkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwRDkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwRDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwRDk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwRDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwRDk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwRDk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwRDk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwRDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwRDlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwRDlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwRDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwRDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwRDlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwREExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNGMworOjEwREEyMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDA5NgorOjEwREEzMDAwMjQ0Mjc1ODAzQzAzMDgwMDI0NjM3QTI4QUM0MDAwMDAyRgorOjEwREE0MDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDBFRAorOjEwREE1MDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgxMAorOjEwREE2MDAwM0MxQzA4MDAyNzlDNzU4MDBFMDAxMEVGMDAwMDAwMDA5MQorOjEwREE3MDAwMDAwMDAwMEQzMEE1RkZGRjMwQzYwMEZGMjc0MzAxODBFNgorOjEwREE4MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAwMDA5MworOjEwREE5MDAwQTQ2NTAwMDhBMDY2MDAwQUEwNjIwMDBCM0MwMjEwMDAwQQorOjEwREFBMDAwQUM2NzAwMTgwM0UwMDAwOEFGNDIwMUI4M0MwMzYwMDAxNworOjEwREFCMDAwOEM2MjRGRjgwNDQwRkZGRTNDMDIwMjAwQUM2NDRGQzA5MQorOjEwREFDMDAwQUM2MjRGQzQzQzAyMTAwMDAzRTAwMDA4QUM2MjRGRjhBNworOjEwREFEMDAwOTQ4MjAwMEMyNDg2MDAxNDAwQTAzODIxMDAwMjEzMDI1NgorOjEwREFFMDAwMDAwMjEwODAwMDgyNDAyMTAwQzgxMDJCMTA0MDAwNTcxNworOjEwREFGMDAwMDAwMDAwMDA5MEMzMDAwMDJDNjIwMDA5NTA0MDAwNTE1QgorOjEwREIwMDAwOTBDMjAwMDEwMDAzMTA4MDNDMDMwODAwMjQ2Mzc1MzRCOAorOjEwREIxMDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDA3QgorOjEwREIyMDAwOTBDMzAwMDEyNDAyMDAwQTE0NjIwMDNBMDAwMDAwMDBDMQorOjEwREIzMDAwMDEwNjEwMjMyQzQyMDAwQTE0NDAwMDM2MjRDNjAwMDJCRAorOjEwREI0MDAwOENFMjAwMDAzNDQyMDEwMEFDRTIwMDAwOTBDMjAwMDAxMAorOjEwREI1MDAwOTBDMzAwMDE5MEM0MDAwMjkwQzUwMDAzMDAwMzFDMDBBNAorOjEwREI2MDAwMDAwMjE2MDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjU4NgorOjEwREI3MDAwMDA0NTEwMjUyNEM2MDAwNEFDRTIwMDA0OTBDMjAwMDA1OQorOjEwREI4MDAwOTBDMzAwMDE5MEM0MDAwMjkwQzUwMDAzMDAwMjE2MDA3QgorOjEwREI5MDAwMDAwMzFDMDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjU0RgorOjEwREJBMDAwMDA0NTEwMjUyNEM2MDAwNDBBMDAwQ0FBQUNFMjAwMDhCNworOjEwREJCMDAwOTBDMzAwMDEyNDAyMDAwNDE0NjIwMDE2MjRDNjAwMDI2RgorOjEwREJDMDAwOTBDMjAwMDA5MEM0MDAwMThDRTMwMDAwMDAwMjEyMDAyQgorOjEwREJEMDAwMDA0NDEwMjUzNDYzMDAwNDI0QzYwMDAyQUNFMjAwMENBQgorOjEwREJFMDAwMEEwMDBDQUFBQ0UzMDAwMDkwQzMwMDAxMjQwMjAwMDM2OQorOjEwREJGMDAwMTQ2MjAwMDgyNEM2MDAwMjhDRTIwMDAwOTBDMzAwMDBGQQorOjEwREMwMDAwMjRDNjAwMDEzNDQyMDAwOEEwRTMwMDEwMEEwMDBDQUE1OAorOjEwREMxMDAwQUNFMjAwMDAwM0UwMDAwODI0MDIwMDAxOTBDMzAwMDExMAorOjEwREMyMDAwMjQwMjAwMDIxMDYyMDAwMjI0QzQwMDAyMDEwMDIwMjEyQworOjEwREMzMDAwMEEwMDBDQUEwMDgwMzAyMTBBMDAwQ0FBMjRDNjAwMDFBOAorOjEwREM0MDAwOTBDMjAwMDEwQTAwMENBQTAwQzIzMDIxMDNFMDAwMDhDMworOjEwREM1MDAwMDAwMDEwMjEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBENworOjEwREM2MDAwMEUwMDEzMEUwMDgwODAyMTkzNjIwMDA1MjQwM0ZGRkU0NgorOjEwREM3MDAwMDIwMDIwMjEwMDQzMTAyNDhGQkYwMDE0OEZCMDAwMTAzOQorOjEwREM4MDAwQTM2MjAwMDUwQTAwMTMxNzI3QkQwMDE4MjdCREZGRTg4RgorOjEwREM5MDAwQUZCMDAwMTBBRkJGMDAxNDBFMDAwRjBFMDA4MDgwMjE0NworOjEwRENBMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQzQworOjEwRENCMDAwMjQwMjAxMDBBRjQyMDE4MDBBMDAwRDIyMDIwMDIwMjE0RgorOjEwRENDMDAwQUY0MDAxODAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBGMAorOjEwRENEMDAwMEEwMDBGQUQyN0JEMDAxODI3QkRGRjgwQUZCRTAwNzgzQQorOjEwRENFMDAwQUZCNzAwNzRBRkIzMDA2NEFGQkYwMDdDQUZCNjAwNzBENQorOjEwRENGMDAwQUZCNTAwNkNBRkI0MDA2OEFGQjIwMDYwQUZCMTAwNUMwQworOjEwREQwMDAwQUZCMDAwNTg4RjUwMDEyODkzNjMwMDNGOTM2MjAwMDUyNQorOjEwREQxMDAwMDAwMEYwMjEzMDczMDBGRjAwMDIxMDI3MzA0MjAwMDFBNAorOjEwREQyMDAwMDAwMEI4MjExNDQwMDA2NkFGQTAwMDUwOTM0MjAxMTZENQorOjEwREQzMDAwOTM0MzAxMTIzMDQyMDBGRjMwNjMwMEZGMDM0MjIwMjE3MQorOjEwREQ0MDAwMDM0MzEwMjEyNDQ1NDAwMDhGODIwMDFDMTA0MDAwMTgxRQorOjEwREQ1MDAwMjQ5MTQwMDA4RjQyMDEwNDNDMDMwMDAxMDA0MzEwMjQ0MQorOjEwREQ2MDAwMTA0MDAwMTMwMDAwMDAwMDhDQTMwMDBDOEY2MjAwMzBGNAorOjEwREQ3MDAwMTQ2MjAxQjUyNDAyMDAwMThDQTMwMDEwOEY2MjAwMkNGNAorOjEwREQ4MDAwMTQ2MjAxQjEyNDAyMDAwMTk3NjIwMDNBOTQ4MzQwMDBCQQorOjEwREQ5MDAwMzA0MkZGRkYxNDYyMDFBQzI0MDIwMDAxOTc2MjAwMzg5OAorOjEwRERBMDAwOTYyMzAwMDIzMDQyRkZGRjE0NjIwMUE3MjQwMjAwMDEwMworOjEwRERCMDAwOTM2MjAwMDAzMDQzMDBGRjI0MDIwMDIwMTA2MjAwMDUzRgorOjEwRERDMDAwMjQwMjAwNTAxMDYyMDAwNjAwMDAwMDAwMEEwMDBENkNFMgorOjEwREREMDAwMDAwMDAwMDAwMDAwMDAwRDBBMDAwRDc1QUZBMDAwMzAyQgorOjEwRERFMDAwM0MxRTA4MDAyN0RFNzVFODBBMDAwRDc1QUZBMDAwMzA2NAorOjEwRERGMDAwM0MwMjA4MDA4QzQyMDBEQzI0NDIwMDAxM0MwMTA4MDA4NworOjEwREUwMDAwQUMyMjAwREMwRTAwMTNEODAwMDAwMDAwMEEwMDBGMDM1MworOjEwREUxMDAwOEZCRjAwN0M4RjQyMDEwNDNDMDMwMDIwOTIzNDAwMEQzMAorOjEwREUyMDAwMDA0MzEwMjQwMDAyMjAyQjAwMDQyMTQwQUZBNDAwMzA0NgorOjEwREUzMDAwOEY0MzAxMDQzQzAyMDA0MDAwNjIxODI0MTQ2MDAwMDI3OQorOjEwREU0MDAwMzQ4NzAwNDAwMDgwMzgyMTMyODIwMDIwQUZBNzAwMzBBNAorOjEwREU1MDAwMTQ0MDAwMDIzNEU2MDA4MDAwRTAzMDIxMTBDMDAwMEJDNgorOjEwREU2MDAwQUZBNjAwMzA5M0M1MDAwODhGNjcwMDRDMDIwMDIwMjE0OAorOjEwREU3MDAwMDAwNTJCMDAzNEE1MDA4MTMwQTVGMDgxMEUwMDBDOEQyQgorOjEwREU4MDAwMzBDNjAwRkYwQTAwMEYwMDAwMDAwMDAwOTM2MjAwM0U1MQorOjEwREU5MDAwMzA0MjAwNDAxMDQwMDAwRTI0MDIwMDA0NTY2MjAwMDY4QQorOjEwREVBMDAwMjQwMjAwMTIwMjAwMjAyMTBFMDAxNEU2MDIyMDMwMjE3QworOjEwREVCMDAwMEEwMDBGMDM4RkJGMDA3QzE2NjIwMDA1MDAwMDAwMDBGRgorOjEwREVDMDAwMEUwMDBEMTMwMDAwMjAyMTBBMDAwRjAzOEZCRjAwN0NGRAorOjEwREVEMDAwOTc0MzAxMUE5NjI0MDAwRTkzNjIwMDM1MzI4NTAwMDRBMAorOjEwREVFMDAwMzA3NkZGRkYwMDQ0MjAwNEFGQTQwMDU0OEUzMjAwMDRCQgorOjEwREVGMDAwMTBBMDAwMTU4RTM1MDAwODkzNjIwMDNFMzA0MjAwNDBBRAorOjEwREYwMDAwMTA0MDAwMDcwMDAwMDAwMDBFMDAxNDI4MDI0MDIwMjFFRAorOjEwREYxMDAwMTA0MDAwMEQwMDAwMDAwMDBBMDAwRjAwMDAwMDAwMDA4QgorOjEwREYyMDAwOEY2MjAwNDQwMjQyMTAyMzA0NDAwMTQ1MDAwMDAwMDBCQgorOjEwREYzMDAwOEY2MjAwNDgwMjQyMTAyMzA0NDEwMTQxMjQwNDAwMTY2QworOjEwREY0MDAwMEEwMDBFMDM4RkMyMDAwNDhGNjIwMDQ4MDI0MjEwMjNCMQorOjEwREY1MDAwMDQ0MDAwMDgwMDAwMDAwMDNDMDIwODAwOEM0MjMxMDAzMAorOjEwREY2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIzMTAwMEEwMDBFRjVGOQorOjEwREY3MDAwMDAwMDAwMDA4RjYyMDA0MDAyNDIxMDIzMTg0MDAwMDk5OAorOjEwREY4MDAwMjQwMjAwMEMzQzAyMDgwMDhDNDIzMTAwMzI5NDAwRkM1OAorOjEwREY5MDAwMDAwMEIwMjEyNDQyMDAwMTNDMDEwODAwQUMyMjMxMDAwNQorOjEwREZBMDAwMjQwMjAwMENBRkEyMDAzMDhGNjIwMDQwMDA1MjIwMjNGOAorOjEwREZCMDAwMTg4MDAwMEQwMkM0MTAyQTE0NDAwMTE2MDAwMDAwMDA1MQorOjEwREZDMDAwMTQ5NjAwMDYwMkM0MTAyMzNBODIwMDAxMzA0MjAwMDE3OAorOjEwREZEMDAwMTQ0MDAxMTAwMDAwMDAwMDAyQzQxMDIzMDI0NDkwMjFFQworOjEwREZFMDAwMEEwMDBERUIzMDU2RkZGRjAwMDAyMDIxMzI4MjAwMDJCNAorOjEwREZGMDAwMTA0MDAwMUEzMjgyMDAxMDkzNjIwMDNFMzA0MjAwNDAwRQorOjEwRTAwMDAwNTA0MDAwMTE4RkMyMDAwNDBFMDAxMzBFMDIwMDIwMjFBOAorOjEwRTAxMDAwMjQwMjAwMThBMzYyMDAzRjkzNjIwMDA1MjQwM0ZGRkU2MAorOjEwRTAyMDAwMDIwMDIwMjEwMDQzMTAyNDBFMDAxMzE3QTM2MjAwMDVGNAorOjEwRTAzMDAwMjQwNDAwMzkwMDAwMjgyMTBFMDAxNDExMjQwNjAwMThDMQorOjEwRTA0MDAwMEEwMDBGMDIyNDAyMDAwMTI0MDQwMDE3MDA0MEY4MDkwRQorOjEwRTA1MDAwMDAwMDAwMDAwQTAwMEYwMjI0MDIwMDAxMTA0MDAwRjgzNgorOjEwRTA2MDAwMDAwMDAwMDA4RjYzMDA0QzhGNjIwMDU0MDJBMjEwMjM1NgorOjEwRTA3MDAwMUM0MDAwRjMwMkEzMTAyMzA0NDIwMDAxMDA2MEE4MjEwOQorOjEwRTA4MDAwQUZBNDAwMThBRkIyMDAxMEFGQjYwMDE0OTM0MjAxMjA0NQorOjEwRTA5MDAwOEY2NTAwNDA5NzYzMDAzQzMwNDIwMEZGMDM0MjEwMjEyRgorOjEwRTBBMDAwMDA0NDEwMjE4RkE0MDA1NDMwNjNGRkZGMjQ0MjQwMDAzRAorOjEwRTBCMDAwMDA4MzE4MkI4RkE0MDAzMEFGQTIwMDIwQUZBNTAwMjg0QQorOjEwRTBDMDAwMDA4MzIwMjVBRkE0MDAzMEFGQTUwMDI0QUZBMDAwMkMxMgorOjEwRTBEMDAwQUZCNTAwMzQ5MzYyMDAzRTMwNDIwMDA4NTA0MDAwMTE1QQorOjEwRTBFMDAwOEZDMjAwMDAwMjIwMjAyMTI3QTUwMDM4MEUwMDBDQTRCQQorOjEwRTBGMDAwQUZBMDAwMzg1NDQwMDAwQjhGQzIwMDAwOEZBMjAwMzg0MAorOjEwRTEwMDAwMzA0MjAxMDA1MDQwMDAwNzhGQzIwMDAwOEZBMzAwM0M0NgorOjEwRTExMDAwOEY2MjAwNjAwMDYyMTAyMzA0NDMwMDAxQUY2MzAwNjA1RgorOjEwRTEyMDAwOEZDMjAwMDAwMDQwRjgwOTI3QTQwMDEwOEZBMjAwMzAyMQorOjEwRTEzMDAwMzA0MjAwMDI1NDQwMDAwMTMyOTQwMEZFOTM2MjAwM0VERgorOjEwRTE0MDAwMzA0MjAwNDAxMDQwMDAzNzhGQTMwMDE0OEY2MjAwNTQwQgorOjEwRTE1MDAwMTZBMjAwMUEzMjgyMDAwMTI0MDIwMDE0MTI2MjAwMTA3QQorOjEwRTE2MDAwMkE2MjAwMTUxMDQwMDAwNjI0MDIwMDE2MjQwMjAwMEM0QQorOjEwRTE3MDAwMTI2MjAwMDczMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDBGOAorOjEwRTE4MDAwMTI2MjAwMDUzMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDBFQQorOjEwRTE5MDAwMEEwMDBFNUEyNDE3MDAwRTBBMDAwRTVBMjQxNzAwMTAwNworOjEwRTFBMDAwMEEwMDBFNUUyNDE3MDAxMjkzNjIwMDIzMjQwM0ZGQkRCMQorOjEwRTFCMDAwMDA0MzEwMjRBMzYyMDAyMzMyODIwMDAxMTA0MDAwMTlBMgorOjEwRTFDMDAwOEZBMzAwMTQyNDAyMDAwQzEyNjIwMDBFMkE2MjAwMERCQworOjEwRTFEMDAwMTA0MDAwMDYyNDAyMDAwRTI0MDIwMDBBMTI2MjAwMDcwQQorOjEwRTFFMDAwOEZBMjAwMjQwQTAwMEU3NzI0NDIwMDAxMTI2MjAwMDg2OAorOjEwRTFGMDAwOEZBMjAwMjQwQTAwMEU3NzI0NDIwMDAxMEEwMDBFNzU0NworOjEwRTIwMDAwMjQxNzAwMDgyNDAyMDAwRTE2RTIwMDAyMjQxNzAwMTY0QworOjEwRTIxMDAwMjQxNzAwMTA4RkEyMDAyNDI0NDIwMDAxQUZBMjAwMjQ4MgorOjEwRTIyMDAwOEZBMzAwMTQ4RkEyMDAyNDhGNzMwMDQwMDA0MzEwMjE5RAorOjEwRTIzMDAwQUY2MjAwNDA4RkEyMDA1NDkzNjQwMDM2OEY2MzAwNDBBOQorOjEwRTI0MDAwMDJBMjg4MjEzNDAyRkZGRjAwODIxMDA0MDA2MjE4MjExQworOjEwRTI1MDAwQUY2MzAwNDg4RkE2MDAzMDMwQzIwMDA4MTA0MDAwMEVBNworOjEwRTI2MDAwMDAwMDAwMDA4RjYyMDA1ODE2MjIwMDA0MzBDNjAwRkYzNAorOjEwRTI3MDAwOTc0MjAxMUE1MDQwMDAwMTM0QzYwMDEwOTNDNTAwMDhBRgorOjEwRTI4MDAwOEZBNzAwMzQwMjAwMjAyMTAwMDUyQjAwMzRBNTAwODA1OAorOjEwRTI5MDAwMEUwMDBDOEQzMEE1RjA4MDhGNjIwMDQwMDA1MzEwMjNEQgorOjEwRTJBMDAwMTg0MDAwMTc4RkEyMDAxODNDMDIwODAwOEM0MjMxOThEOQorOjEwRTJCMDAwMzA0MjAwMTAxMDQwMDAwOTI0MDIwMDAxOTc2MjAwNjhGQgorOjEwRTJDMDAwMTQ0MDAwMDYyNDAyMDAwMUE3NjIwMDY4OTc0MjAwN0EwOQorOjEwRTJEMDAwMjQ0MjAwMEEwQTAwMEVCQkE3NjIwMDEyQTc2MjAwMTJDNQorOjEwRTJFMDAwMEUwMDEzMEUwMjAwMjAyMTkzNjIwMDdEMjQwMzAwMDEyMgorOjEwRTJGMDAwMDIwMDIwMjEzNDQyMDAwMTBBMDAwRUI5QUZBMzAwNTBGMQorOjEwRTMwMDAwMTg0MDAwMEEwMDAwMDAwMDBFMDAxMzBFMDIwMDIwMjEzOQorOjEwRTMxMDAwOTM2MjAwN0QyNDAzMDAwMTAyMDAyMDIxQUZBMzAwNTA3RQorOjEwRTMyMDAwMzQ0MjAwMDQwRTAwMTMxN0EzNjIwMDdEOTM2MjAwM0U4NgorOjEwRTMzMDAwMzA0MjAwNDAxNDQwMDAwQzMyODIwMDAxMTA0MDAwMEFCQworOjEwRTM0MDAwMDAwMDAwMDA4RjYzMDA0MDhGQzIwMDA0MjQwNDAwMTgwNgorOjEwRTM1MDAwMjQ2MzAwMDEwMDQwRjgwOUFGNjMwMDQwOEZBMjAwMzA0MQorOjEwRTM2MDAwMEEwMDBGMDIzMDQyMDAwNDhGNjIwMDU4MTA1MTAwMTA2MgorOjEwRTM3MDAwMDAwMDAwMDA4RjYyMDAxODAyNDIxMDIzMUM0MDAwMDhCOQorOjEwRTM4MDAwMjQwNDAwMDE4RjYyMDAxODE2NDIwMDA5MDAwMDAwMDBGQQorOjEwRTM5MDAwOEY2MjAwMUMwMkEyMTAyMzA0NDAwMDA1MDAwMDAwMDA1MAorOjEwRTNBMDAwQUY3MTAwNThBRkE0MDA1MEFGNzIwMDE4QUY3NTAwMUNEOQorOjEwRTNCMDAwMTJFMDAwMEI4RkEyMDA1MDBFMDAxMzBFMDIwMDIwMjE2RAorOjEwRTNDMDAwQTM3NzAwM0YwRTAwMTMxNzAyMDAyMDIxMDJFMDMwMjE0NgorOjEwRTNEMDAwMjQwNDAwMzcwRTAwMTQxMTAwMDAyODIxOEZBMjAwNTBFMQorOjEwRTNFMDAwMTA0MDAwMDMwMDAwMDAwMDBFMDAwQzlCMDIwMDIwMjFFMgorOjEwRTNGMDAwMTJDMDAwMDUwMDAwMTgyMThGQTIwMDMwMzA0MjAwMDQzNgorOjEwRTQwMDAwNTA0MDAwMTEwMDYwMTAyMTI0MDMwMDAxMEEwMDBGMDI5NworOjEwRTQxMDAwMDA2MDEwMjEwRTAwMTMwRTAyMDAyMDIxOTM2MjAwN0Q4NworOjEwRTQyMDAwMDIwMDIwMjEzNDQyMDAwNDBFMDAxMzE3QTM2MjAwN0Q3NQorOjEwRTQzMDAwMEUwMDBDOUIwMjAwMjAyMTBBMDAwRjAyMjQwMjAwMDFBMgorOjEwRTQ0MDAwQUY0MDAwNDQyNDAyMDAwMThGQkYwMDdDOEZCRTAwNzhFMworOjEwRTQ1MDAwOEZCNzAwNzQ4RkI2MDA3MDhGQjUwMDZDOEZCNDAwNjhGMgorOjEwRTQ2MDAwOEZCMzAwNjQ4RkIyMDA2MDhGQjEwMDVDOEZCMDAwNTgzMgorOjEwRTQ3MDAwMDNFMDAwMDgyN0JEMDA4MDhGNDIwMUI4MDQ0MEZGRkU4MgorOjEwRTQ4MDAwMjQwMjA4MDBBRjQyMDFCODAzRTAwMDA4MDAwMDAwMDBDOQorOjEwRTQ5MDAwMzBBNUZGRkYzMEM2RkZGRjhGNDIwMUI4MDQ0MEZGRkVFQQorOjEwRTRBMDAwM0MwMjAwMDhBRjQ0MDE4MDAzNDIxMDIxQUY0NDAwMjAyOQorOjEwRTRCMDAwOTQ0MjAwNDgzMDQ0RkZGRjEwODAwMDE5MjQwMjAwMDNGQQorOjEwRTRDMDAwMjRBMjAwMTIwMDgyMTAyQjEwNDAwMDE1MjQwMjAwMDMyOQorOjEwRTREMDAwOTM0MjAxMjAyNDAzMDAxQUEzNDMwMThCMzA0MjAwRkYyMgorOjEwRTRFMDAwMjQ0N0ZGRkU4RjgyMDAwMDAwODcxODJCMzg2MzAwMDE0RAorOjEwRTRGMDAwMDAwMjEzODIwMDQzMTAyNDEwNDAwMDA1OEY4MzAwMDRBMworOjEwRTUwMDAwMzQ2MjAwMDFBNzQ3MDE5NDBBMDAwRjM5QUY4MjAwMDQ2QQorOjEwRTUxMDAwMjQwMkZGRkUwMDYyMTAyNDBBMDAwRjM5QUY4MjAwMDRCQgorOjEwRTUyMDAwQTM0MjAxOEIyNDAyMDAwMkE3NDIwMThDOEY4MjAwMDBDQgorOjEwRTUzMDAwOEY4NDAwMDRBNzQ1MDE4RUE3NDIwMTkwOEY4MjAwMENCMgorOjEwRTU0MDAwMzA4MzgwMDBBRjQyMDFBOEE3NDYwMTg4MTA2MDAwMEUwQQorOjEwRTU1MDAwOEY4MjAwMDQ5MzQyMDExNjMwNDIwMEZDMjQ0MjAwMDRFMgorOjEwRTU2MDAwMDA1QTEwMjE4QzQyNDAwMDMwNDJGRkZGMTQ0MDAwMDY0OAorOjEwRTU3MDAwOEY4MjAwMDQzQzAyRkZGRjM0NDI3RkZGMDA4MjEwMjRBMAorOjEwRTU4MDAwQUY4MjAwMDQ4RjgyMDAwNDI0MDNCRkZGOTc4NDAwMDIzRgorOjEwRTU5MDAwMDA0MzEwMjRBNzQyMDFBNjk3NDIwMTBDMDAwMjE0MDA3OAorOjEwRTVBMDAwMDA0NDEwMjVBRjQyMDFBQzNDMDIxMDAwQUY0MjAxQjg1QworOjEwRTVCMDAwMDNFMDAwMDgwMDAwMDAwMDhGNDcwMDcwOTM0MjAxMTI0MgorOjEwRTVDMDAwOEY4MzAwMDAyN0JERkZGMDMwNDIwMEZGMDAwMjI4ODI0OQorOjEwRTVEMDAwMzA2MjAxMDAwMDAwMzAyMTEwNDAwMDQzMjRBNDAwMDNGOQorOjEwRTVFMDAwMzA2MjQwMDAxMDQwMDAxMDMwNjIyMDAwMDAwNDEwODBCMworOjEwRTVGMDAwMDA1QTEwMjE4QzQzNDAwMDI0QTQwMDA0MDAwNDEwODAyMQorOjEwRTYwMDAwQUZBMzAwMDAwMDVBMTAyMThDNDI0MDAwQUZBMjAwMDRDQQorOjEwRTYxMDAwOTM0MjAxMTYzMDQyMDBGQzAwNUExMDIxOEM0MjQwMDAwNworOjEwRTYyMDAwMEEwMDBGODZBRkEyMDAwODEwNDAwMDJGMDAwMDMwMjEyMgorOjEwRTYzMDAwMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwMjRBNDAwMDRFMAorOjEwRTY0MDAwMDAwNDEwODBBRkEzMDAwMDAwNUExMDIxOEM0MjQwMDA0QgorOjEwRTY1MDAwQUZBMDAwMDhBRkEyMDAwNDhGQTgwMDA4MDAwMDMwMjE3RQorOjEwRTY2MDAwMDAwMDIwMjEyNDBBMDAwODNDMDkwODAwMjUyOTAxMDA5NworOjEwRTY3MDAwMDNBNDEwMjExNDhBMDAwMzAwMDQyQTAwMTEwMDAwMEFEOAorOjEwRTY4MDAwMDAwMDAwMDA5MDQyMDAwMDI0ODQwMDAxMkM4MzAwMEM1NAorOjEwRTY5MDAwMDBBMjEwMjEwMDAyMTA4MDAwNDkxMDIxOEM0MjAwMDBDRAorOjEwRTZBMDAwMTQ2MEZGRjMwMEMyMzAyNjNDMDQwODAwOEM4NDMxMDQ1RgorOjEwRTZCMDAwOEY0MjAwNzAyQzgzMDAyMDEwNjAwMDA5MDA0NzM4MjMyRgorOjEwRTZDMDAwM0MwMzA4MDAyNDYzMzEwODAwMDQxMDgwMDA0MzEwMjEzQgorOjEwRTZEMDAwMjQ4MzAwMDFBQzQ3MDAwMDNDMDEwODAwQUMyMzMxMDQ1NgorOjEwRTZFMDAwQUY4NjAwMEMyNDA2MDAwMTAwQzAxMDIxMDNFMDAwMDhFMgorOjEwRTZGMDAwMjdCRDAwMTAzQzAyMDgwMDhDNDIwMDM4MjdCREZGRDAyNworOjEwRTcwMDAwQUZCNjAwMjhBRkI0MDAyMEFGQjIwMDE4QUZCRjAwMkNFNgorOjEwRTcxMDAwQUZCNTAwMjRBRkIzMDAxQ0FGQjEwMDE0QUZCMDAwMTAxMAorOjEwRTcyMDAwMDAwMDkwMjEzQzE2MDgwMDI2RDYwMDM4MTQ0MDAwMDI1NAorOjEwRTczMDAwMjQ1NEZGRkYwMDAwQTAyMTk3NDIwMTBFOEY4NDAwMDBBNworOjEwRTc0MDAwMzA0MkZGRkYzMDgzNDAwMDEwNjAwMDBBMjQ1MzAwMDQ3MQorOjEwRTc1MDAwM0MwMjAwMjAwMDgyMTAyNDUwNDAwMDA3MzA4MjgwMDBEQworOjEwRTc2MDAwOEY4MjAwMDQyNDAzQkZGRjAwODMxODI0MEEwMDBGRDcwMAorOjEwRTc3MDAwMzQ0MjEwMDAzMDgyODAwMDEwNDAwMDBBM0MwMjAwMjAyOQorOjEwRTc4MDAwMDA4MjEwMjQxMDQwMDAwNzhGODIwMDA0M0MwM0ZGRkYyQQorOjEwRTc5MDAwMzQ2MzdGRkYwMDgzMTgyNDM0NDI4MDAwQUY4MjAwMDQ3QQorOjEwRTdBMDAwQUY4MzAwMDAwRTAwMEY1RTAwMDAwMDAwMTQ0MDAwMDc2MQorOjEwRTdCMDAwMDAwMDAwMDA5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkZEOQorOjEwRTdDMDAwMDAwMjE0MDAwMDYyMTgyNUFGODMwMDBDOTc0MjAxMEM3MAorOjEwRTdEMDAwOEY0MzQwMDAzMDQ2RkZGRjM0MDJGRkZGMTQ2MjAwMDMwNgorOjEwRTdFMDAwMDAwMDAwMDAwQTAwMEZFRjI0MTIwMDIwOEY0MjQwMDBCQQorOjEwRTdGMDAwMzA0MjAxMDA1NDQwMDAwMTI0MTIwMDEwOEY4NDAwMDBCOAorOjEwRTgwMDAwMzA4MjEwMDA1MDQwMDAxNDM2NTIwMDAxMzA4MjAwMjA0NworOjEwRTgxMDAwMTQ0MDAwMEIzQzAyMTAwMDAwODIxMDI0NTA0MDAwMEVGNworOjEwRTgyMDAwMzY1MjAwMDEzQzAzMEUwMDNDMDIwREZGMDA4MzE4MjQwOQorOjEwRTgzMDAwMzQ0MkZGRkYwMDQzMTAyQjUwNDAwMDA3MzY1MjAwMDFDNgorOjEwRTg0MDAwM0MwMjA4MDA4QzQyMDAyQzI0NDIwMDAxM0MwMTA4MDBEQworOjEwRTg1MDAwQUMyMjAwMkMzNjUyMDAwNTNDMDUwODAwOENBNTAwMzQ4MworOjEwRTg2MDAwNTRBMDAwNDA4Rjg0MDAwMDhGODIwMDEwNTQ0MDAwM0Q2RgorOjEwRTg3MDAwOEY4NDAwMDA4RjgyMDAwNDMwNDI0MDAwNTQ0MDAwMzlGMQorOjEwRTg4MDAwOEY4NDAwMDAzQzAyMUYwMTAwODIxMDI0M0MwMzEwMDAxMgorOjEwRTg5MDAwMTQ0MzAwMzQ4Rjg0MDAwMDMwQzIwMjAwMTQ0MDAwMzI2MAorOjEwRThBMDAwM0MwMjAwMDEzMjY1RkZGRjM2NDYwMDAyOEY0MjAxQjg4QworOjEwRThCMDAwMDQ0MEZGRkUzQzAyMDAwOEFGNDAwMTgwMDM0MjEwMjFFQgorOjEwRThDMDAwOTQ0MjAwNDgzMDQzRkZGRjEwNjAwMDE5QUY4MzAwMDhGNgorOjEwRThEMDAwMjRBMjAwMTIwMDYyMTAyQjEwNDAwMDE2MjQwMjAwMDMzNAorOjEwRThFMDAwOTM0MjAxMjAyNDAzMDAxQUEzNDMwMThCMzA0MjAwRkYwRQorOjEwRThGMDAwMjQ0M0ZGRkU4RjgyMDAwMDMwNDI0MDAwMTA0MDAwMDg5OQorOjEwRTkwMDAwOEY4MjAwMDQ4RjgyMDAwODAwNDMxMDJCMTQ0MDAwMDQwMworOjEwRTkxMDAwOEY4MjAwMDRBNzQzMDE5NDBBMDAxMDNBMzQ0MjAwMDE5OAorOjEwRTkyMDAwMjQwM0ZGRkUwMDQzMTAyNDBBMDAxMDNFQUY4MjAwMDRCRgorOjEwRTkzMDAwMjQwMjAwMDNBMzQyMDE4QjhGODMwMDA0MjQwMkJGRkY0MworOjEwRTk0MDAwMDA2MjE4MjQyNDAyMDAwMkE3NDIwMThDOEY4MjAwMDA3QQorOjEwRTk1MDAwQTc0NTAxOEVBNzQ2MDE4OEE3NDMwMUE2MEEwMDEwRDk0MgorOjEwRTk2MDAwQTc0MjAxOTAzQzAyMDAwMTAwODIxMDI0MTA0MDAwMEJERAorOjEwRTk3MDAwM0MwMjEwMDAzQzAyMDgwMDhDNDIwMEQ4OTc0NTAxMEU3MgorOjEwRTk4MDAwMjQwNDAwODAyNDQyMDAwMTMwQTVGRkZGM0MwMTA4MDA2MAorOjEwRTk5MDAwQUMyMjAwRDgwQTAwMTBFMjI0MDYwMDAzMDA4MjEwMjRGMgorOjEwRTlBMDAwMTA0MDAwNDEwMDAwMDAwMDNDMDIwODAwOEM0MjAwMzA5MgorOjEwRTlCMDAwMTA0MDAwMEM4RjgyMDAwNDMwNDI0MDAwMTA0MDAwMDlEQgorOjEwRTlDMDAwM0MwMzBGMDAwMDgzMTgyNDNDMDIwMTAwMDA0MzEwMkI3RAorOjEwRTlEMDAwMTQ0MDAwMDQzNjQ2MDAwMjMyNjVGRkZGMEEwMDEwRTJEMAorOjEwRTlFMDAwMjQwNDAwODAxMEEwMDAwRDMwODIwMTAwMTA0MDAwMEJCNAorOjEwRTlGMDAwM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwMTA0MzAwMDc3OQorOjEwRUEwMDAwOEY4MjAwMEMwMDU0MTAyNDAwNTYxMDIxOTA0MjAwMDQwNAorOjEwRUExMDAwMjQ0MjAwMDQwQTAwMTA5NzAwMDIyMUMwMDAwMDAwMDBGOAorOjEwRUEyMDAwOEY4NjAwMDAzQzA1MDgwMDhDQTUwMEQwMDAwNjE2MDI2OQorOjEwRUEzMDAwMzA1MDAwMEYzOEEyMDAwMTJDNDIwMDAxMkUwMzAwMENDMAorOjEwRUE0MDAwMDA0MzEwMjQxNDQwMDAxNTAwMTAyMUMwMjYwMkZGRkNEMgorOjEwRUE1MDAwMkM0MjAwMDQ1NDQwMDAxMTAwMDAyMDIxMzhBMjAwMDI4MgorOjEwRUE2MDAwMkM0MjAwMDEwMDQzMTAyNDEwNDAwMDAzMDAwNjEyNDIxMworOjEwRUE3MDAwMEEwMDEwOTcwMDAwMjAyMTAwMTAxODJCMDA0MzEwMjREQQorOjEwRUE4MDAwNTA0MDAwMDYwMDEwMjFDMDAwMDAyMDIxMzI2NUZGRkYyOQorOjEwRUE5MDAwMEUwMDBGMTQzMjQ2RkZGQjAwMTAyMUMwMzI2NUZGRkY0RAorOjEwRUFBMDAwMEEwMDEwRTIzNjQ2MDAwMjhGNDI0MDAwM0MxMTA4MDA4NgorOjEwRUFCMDAwOEUzMTAwMjQzMDQyMDEwMDEwNDAwMDNFMzIyMjAwMDExRAorOjEwRUFDMDAwMDIyMDgwMjExMEEwMDAxNDMyNTUwMDA0MzA4MjAxMDA4MQorOjEwRUFEMDAwMTA0MDAwMTIyNDAyMDAwMTNDMDIwRjAwMDA4MjEwMjRBQQorOjEwRUFFMDAwM0MwMzAyMDAxMDQzMDAwQzhGODIwMDBDMDI0MDMwMjFENgorOjEwRUFGMDAwMzI2NUZGRkYwMDU0MTAyNDAwNTYxMDIxOTA0NDAwMDQ5QQorOjEwRUIwMDAwMzI1MkZGRkIyNDg0MDAwNDBFMDAwRjE0MDAwNDIxQzBDNQorOjEwRUIxMDAwMjQwMkZGRkUwMjIyODAyNDI0MDIwMDAxMTYwMjAwMDdDNAorOjEwRUIyMDAwMzIwMjAwMDEzMjQyMDAwNDUwNDAwMDAxMzY1MjAwMDIxRAorOjEwRUIzMDAwMzI2NUZGRkYwQTAwMTBFMTAyNDAzMDIxMTA0MDAwMDc1QgorOjEwRUI0MDAwMzIwMjAwMDQwMjQwMzAyMTAwMDAyMDIxMEUwMDBGMTQ4OAorOjEwRUI1MDAwMzI2NUZGRkYzMjUyRkZGQjMyMDIwMDA0MTA0MDAwMDcxMworOjEwRUI2MDAwOEY4MjAwMDAzMDQyMDgwMDEwNDAwMDA0MzI2NUZGRkYzMQorOjEwRUI3MDAwMDI0MDMwMjEwRTAwMEYxNDI0MDQwMTAwMTZBMDAwMTVERAorOjEwRUI4MDAwOEZCRjAwMkMyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkU1NQorOjEwRUI5MDAwMjQwMjIwMDBBNDYyMDAwODI0MDIwMDAyQTA2MjAwMEJFQworOjEwRUJBMDAwQTQ2MDAwMTAzQzAyMTAwMEFGNDIwMUI4MEEwMDEwRTU1QQorOjEwRUJCMDAwOEZCRjAwMkMxMDQwMDAwNzhGQkYwMDJDMzI2NUZGRkY3NQorOjEwRUJDMDAwMzY0NjAwMDIwMDAwMjAyMTBFMDAwRjE0MDAwMDAwMDA1NQorOjEwRUJEMDAwOEZCRjAwMkM4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4MworOjEwRUJFMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDQgorOjEwRUJGMDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDMwMjdCREZGQzgzQQorOjEwRUMwMDAwQUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDMwQUZCNzAwMkNCOQorOjEwRUMxMDAwQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNERQorOjEwRUMyMDAwQUZCMjAwMThBRkIxMDAxNDhDODI1MDAwMjQwM0ZGN0ZGNAorOjEwRUMzMDAwM0MxQTgwMDAwMDQzMTAyNDM0NDIzODBDQUM4MjUwMDA0RgorOjEwRUM0MDAwMjQwMjAwMDMzQzEwNjAwMEFGNDIwMDA4OEUwMjA4MDg1NgorOjEwRUM1MDAwM0MxQjgwMDgzQzAxMDgwMEFDMjAwMDIwMzA0MkZGRjA0MworOjEwRUM2MDAwMzg0MjAwMTAyQzQyMDAwMTBFMDAxQzQ2QUY4MjAwMUNFRQorOjEwRUM3MDAwM0MwNEZGRkYzQzAyMDQwMDM0ODMwODA2MzQ0MjAwMENDRAorOjEwRUM4MDAwQUUwMjE5NDhBRTAzMTk0QzNDMDU2MDE2OEUwMjE5ODA3RAorOjEwRUM5MDAwOENBMzAwMDAzNDQyMDIwMDAwNjQxODI0QUUwMjE5ODBFNAorOjEwRUNBMDAwM0MwMjUzNTMxNDYyMDAwMzM0QTQ3QzAwOENBMjAwMDQ4MQorOjEwRUNCMDAwMDA1MDIwMjE4QzgyMDA3QzhDODMwMDc4QUY4MjAwMTg2OQorOjEwRUNDMDAwQUY4MzAwMTQzQzAyODAwMDM0NDIwMDcwOEM0MzAwMDA4QgorOjEwRUNEMDAwMDA0MDM4MjFBRjgzMDAyMDAwNjAzMDIxOENFODAwMDAyNAorOjEwRUNFMDAwM0MwNTA4MDA4Q0E1MDBGQzNDMDQwODAwOEM4NDAwRjg1RQorOjEwRUNGMDAwMDEwNjMwMjMwMDAwMTAyMTAwQTYyODIxMDBBNjMwMkI5OQorOjEwRUQwMDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTAwRkM2NworOjEwRUQxMDAwM0MwMTA4MDBBQzI0MDBGODhGNTYwMDAwMzJDMjAwMDMwQQorOjEwRUQyMDAwMTA0MEZGRUUwMTAwMzAyMThDRTYwMDAwM0MwNTA4MDA5OQorOjEwRUQzMDAwOENBNTAwRkMzQzA0MDgwMDhDODQwMEY4MDBDODMwMjMzQgorOjEwRUQ0MDAwMDBBNjI4MjEwMDAwMTAyMTAwQTYzMDJCMDA4MjIwMjFERgorOjEwRUQ1MDAwMDA4NjIwMjEzMkM3MDAwMTNDMDEwODAwQUMyNTAwRkNFMAorOjEwRUQ2MDAwQUY4ODAwMjAzQzAxMDgwMEFDMjQwMEY4MTBFMDAxNkJFMworOjEwRUQ3MDAwMzJDMjAwMDI4RjQzMDEyODNDMDIwMDA4MDM0MjEwMjFFNgorOjEwRUQ4MDAwQUY0MzAwMjA4RjQzMDEwNDhGNDQwMTAwOTQ0MjAwNDhBOAorOjEwRUQ5MDAwQUY4MzAwMDBBRjg0MDAwNDMwNDJGRkZGMEUwMDBGMEU2RgorOjEwRURBMDAwQUY4MjAwMDgzQzAyMDgwMDhDNDIwMEMwMTA0MDAwMDhGRQorOjEwRURCMDAwOEY4NDAwMDAzQzAyMDgwMDhDNDIwMEM0MjQ0MjAwMDEwMQorOjEwRURDMDAwM0MwMTA4MDBBQzIyMDBDNDBBMDAxMkFGMDAwMDAwMDBBMQorOjEwRUREMDAwM0MwMjAwMTAwMDgyMTAyNDE0NDAwMTM1OEY4MzAwMDQ4RgorOjEwRURFMDAwM0MwMjA4MDA4QzQyMDAyMDNDMDMwODAwOEM2MzAwMzg4MQorOjEwRURGMDAwMDAwMDkwMjEyNDQyMDAwMTNDMDEwODAwQUMyMjAwMjBDOAorOjEwRUUwMDAwM0MxNzA4MDAyNkY3MDAzODE0NjAwMDAyMjQ3NEZGRkY0NgorOjEwRUUxMDAwMDAwMEEwMjE5NzQyMDEwRTMwODM0MDAwMzA0MkZGRkZFNgorOjEwRUUyMDAwMTA2MDAwMEEyNDUzMDAwNDNDMDIwMDIwMDA4MjEwMjREOQorOjEwRUUzMDAwNTA0MDAwMDczMDgyODAwMDhGODIwMDA0MjQwM0JGRkYwRgorOjEwRUU0MDAwMDA4MzE4MjQwQTAwMTE4RDM0NDIxMDAwMzA4MjgwMDBBMworOjEwRUU1MDAwMTA0MDAwMEEzQzAyMDAyMDAwODIxMDI0MTA0MDAwMDdFRAorOjEwRUU2MDAwOEY4MjAwMDQzQzAzRkZGRjM0NjM3RkZGMDA4MzE4MjQ3QworOjEwRUU3MDAwMzQ0MjgwMDBBRjgyMDAwNEFGODMwMDAwMEUwMDBGNUVCQQorOjEwRUU4MDAwMDAwMDAwMDAxNDQwMDAwNzAwMDAwMDAwOTc0MzAxMUUyRQorOjEwRUU5MDAwOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwMDA2MjE4MjUzNgorOjEwRUVBMDAwQUY4MzAwMEM5NzQyMDEwQzhGNDM0MDAwMzA0NkZGRkZCOAorOjEwRUVCMDAwMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwMEEwMDExQTVFNQorOjEwRUVDMDAwMjQxMjAwMjA4RjQyNDAwMDMwNDIwMTAwNTQ0MDAwMDFEMworOjEwRUVEMDAwMjQxMjAwMTA4Rjg0MDAwMDMwODIxMDAwNTA0MDAwMTQ3MworOjEwRUVFMDAwMzY1MjAwMDEzMDgyMDAyMDE0NDAwMDBCM0MwMjEwMDAxQQorOjEwRUVGMDAwMDA4MjEwMjQ1MDQwMDAwRTM2NTIwMDAxM0MwMzBFMDBFOAorOjEwRUYwMDAwM0MwMjBERkYwMDgzMTgyNDM0NDJGRkZGMDA0MzEwMkIwNgorOjEwRUYxMDAwNTA0MDAwMDczNjUyMDAwMTNDMDIwODAwOEM0MjAwMkM5MQorOjEwRUYyMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDJDMzY1MjAwMDVBRQorOjEwRUYzMDAwM0MwNTA4MDA4Q0E1MDAzNDU0QTAwMDQwOEY4NDAwMDBEQworOjEwRUY0MDAwOEY4MjAwMTA1NDQwMDAzRDhGODQwMDAwOEY4MjAwMDRBNworOjEwRUY1MDAwMzA0MjQwMDA1NDQwMDAzOThGODQwMDAwM0MwMjFGMDFDMQorOjEwRUY2MDAwMDA4MjEwMjQzQzAzMTAwMDE0NDMwMDM0OEY4NDAwMDBGRQorOjEwRUY3MDAwMzBDMjAyMDAxNDQwMDAzMjNDMDIwMDAxMzI2NUZGRkY0MworOjEwRUY4MDAwMzY0NjAwMDI4RjQyMDFCODA0NDBGRkZFM0MwMjAwMDhGMgorOjEwRUY5MDAwQUY0MDAxODAwMzQyMTAyMTk0NDIwMDQ4MzA0M0ZGRkZGQworOjEwRUZBMDAwMTA2MDAwMTlBRjgzMDAwODI0QTIwMDEyMDA2MjEwMkIyOQorOjEwRUZCMDAwMTA0MDAwMTYyNDAyMDAwMzkzNDIwMTIwMjQwMzAwMUE4QgorOjEwRUZDMDAwQTM0MzAxOEIzMDQyMDBGRjI0NDNGRkZFOEY4MjAwMDBFOQorOjEwRUZEMDAwMzA0MjQwMDAxMDQwMDAwODhGODIwMDA0OEY4MjAwMDhGOQorOjEwRUZFMDAwMDA0MzEwMkIxNDQwMDAwNDhGODIwMDA0QTc0MzAxOTRCNworOjEwRUZGMDAwMEEwMDExRjAzNDQyMDAwMTI0MDNGRkZFMDA0MzEwMjRGNAorOjEwRjAwMDAwMEEwMDExRjRBRjgyMDAwNDI0MDIwMDAzQTM0MjAxOEIyMgorOjEwRjAxMDAwOEY4MzAwMDQyNDAyQkZGRjAwNjIxODI0MjQwMjAwMDIzMAorOjEwRjAyMDAwQTc0MjAxOEM4RjgyMDAwMEE3NDUwMThFQTc0NjAxODg2OAorOjEwRjAzMDAwQTc0MzAxQTYwQTAwMTI4RkE3NDIwMTkwM0MwMjAwMDFEQgorOjEwRjA0MDAwMDA4MjEwMjQ1MDQwMDAwQjNDMDIxMDAwM0MwMjA4MDBEQgorOjEwRjA1MDAwOEM0MjAwRDg5NzQ1MDEwRTI0MDQwMDgwMjQ0MjAwMDExMAorOjEwRjA2MDAwMzBBNUZGRkYzQzAxMDgwMEFDMjIwMEQ4MEEwMDEyOTgyRQorOjEwRjA3MDAwMjQwNjAwMDMwMDgyMTAyNDEwNDAwMDQxMDAwMDAwMDAxQworOjEwRjA4MDAwM0MwMjA4MDA4QzQyMDAzMDEwNDAwMDBDOEY4MjAwMDRDQgorOjEwRjA5MDAwMzA0MjQwMDAxMDQwMDAwOTNDMDMwRjAwMDA4MzE4MjQ1OAorOjEwRjBBMDAwM0MwMjAxMDAwMDQzMTAyQjE0NDAwMDA0MzY0NjAwMDJDRAorOjEwRjBCMDAwMzI2NUZGRkYwQTAwMTI5ODI0MDQwMDgwMTBBMDAwMERBMgorOjEwRjBDMDAwMzA4MjAxMDAxMDQwMDAwQjNDMDIwRjAwMDA4MjEwMjQyRgorOjEwRjBEMDAwM0MwMzAyMDAxMDQzMDAwNzhGODIwMDBDMDA1NDEwMjRGMAorOjEwRjBFMDAwMDA1NzEwMjE5MDQyMDAwNDI0NDIwMDA0MEEwMDEyNERFRgorOjEwRjBGMDAwMDAwMjIxQzAwMDAwMDAwMDhGODYwMDAwM0MwNTA4MDBDRgorOjEwRjEwMDAwOENBNTAwRDAwMDA2MTYwMjMwNTAwMDBGMzhBMjAwMDE3NgorOjEwRjExMDAwMkM0MjAwMDEyRTAzMDAwQzAwNDMxMDI0MTQ0MDAwMTU2MworOjEwRjEyMDAwMDAxMDIxQzAyNjAyRkZGQzJDNDIwMDA0NTQ0MDAwMTFCNAorOjEwRjEzMDAwMDAwMDIwMjEzOEEyMDAwMjJDNDIwMDAxMDA0MzEwMjRDQworOjEwRjE0MDAwNTA0MDAwMDMwMDA2MTI0MjBBMDAxMjREMDAwMDIwMjEyOAorOjEwRjE1MDAwMDAxMDE4MkIwMDQzMTAyNDUwNDAwMDA2MDAxMDIxQzA1RQorOjEwRjE2MDAwMDAwMDIwMjEzMjY1RkZGRjBFMDAwRjE0MzI0NkZGRkIyNgorOjEwRjE3MDAwMDAxMDIxQzAzMjY1RkZGRjBBMDAxMjk4MzY0NjAwMDJENworOjEwRjE4MDAwOEY0MjQwMDAzQzExMDgwMDhFMzEwMDI0MzA0MjAxMDBDMworOjEwRjE5MDAwMTA0MDAwM0UzMjIyMDAwMTAyMjA4MDIxMTBBMDAwMTQwNQorOjEwRjFBMDAwMzI1NTAwMDQzMDgyMDEwMDEwNDAwMDEyMjQwMjAwMDE5OAorOjEwRjFCMDAwM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwMTA0MzAwMENBQworOjEwRjFDMDAwOEY4MjAwMEMwMjQwMzAyMTMyNjVGRkZGMDA1NDEwMjQ3MgorOjEwRjFEMDAwMDA1NzEwMjE5MDQ0MDAwNDMyNTJGRkZCMjQ4NDAwMDRBNQorOjEwRjFFMDAwMEUwMDBGMTQwMDA0MjFDMDI0MDJGRkZFMDIyMjgwMjQxRQorOjEwRjFGMDAwMjQwMjAwMDExNjAyMDAwNzMyMDIwMDAxMzI0MjAwMDQxQworOjEwRjIwMDAwNTA0MDAwMDEzNjUyMDAwMjMyNjVGRkZGMEEwMDEyOTc5QgorOjEwRjIxMDAwMDI0MDMwMjExMDQwMDAwNzMyMDIwMDA0MDI0MDMwMjEzOQorOjEwRjIyMDAwMDAwMDIwMjEwRTAwMEYxNDMyNjVGRkZGMzI1MkZGRkI1OQorOjEwRjIzMDAwMzIwMjAwMDQxMDQwMDAwNzhGODIwMDAwMzA0MjA4MDBCNAorOjEwRjI0MDAwMTA0MDAwMDQzMjY1RkZGRjAyNDAzMDIxMEUwMDBGMTQxMQorOjEwRjI1MDAwMjQwNDAxMDAxNkEwMDAyRTNDMDI0MDAwMjc0MzAxODAzOAorOjEwRjI2MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIyMDAwQTQ2MjAwMDg3RgorOjEwRjI3MDAwMjQwMjAwMDJBMDYyMDAwQkE0NjAwMDEwM0MwMjEwMDBGNworOjEwRjI4MDAwQUY0MjAxQjgwQTAwMTJCNDNDMDI0MDAwNTA0MDAwMjBENgorOjEwRjI5MDAwM0MwMjQwMDAzMjY1RkZGRjM2NDYwMDAyMDAwMDIwMjE5QworOjEwRjJBMDAwMEUwMDBGMTQwMDAwMDAwMDBBMDAxMkI0M0MwMjQwMDBERgorOjEwRjJCMDAwMjQwMkJGRkYwMDYyMTAyNDEwNDAwMDA4MDAwMDAwMDA3QworOjEwRjJDMDAwMjQwMjg3RkYwMDYyMTAyNDE0NDAwMDA4M0MwMjAwNjAwMgorOjEwRjJEMDAwMDA4MjEwMjQxMDQwMDAwNTAwMDAwMDAwMEUwMDBEMjZFMgorOjEwRjJFMDAwMDAwMDAwMDAwQTAwMTJBRDAwMDAwMDAwMEUwMDEyRjgzRAorOjEwRjJGMDAwMDAwMDAwMDAxMDQwMDAwNjNDMDI0MDAwOEY0MzAxMjQ0MworOjEwRjMwMDAwM0MwMjYwMjBBQzQzMDAxNDAwMDAwMDAwM0MwMjQwMDBCRQorOjEwRjMxMDAwQUY0MjAxMzgwMDAwMDAwMDMyQzIwMDAyMTA0MEZFNkExNQorOjEwRjMyMDAwM0MwMjgwMDA4RjQyMDE0MDNDMDQ0MDAwQUY0MjAwMjA3QworOjEwRjMzMDAwOEY0MzAxNDgzQzAyNzAwMDAwNjIxODI0MTA2NDAwMkRDNQorOjEwRjM0MDAwMDAwMDAwMDAwMDgzMTAyQjE0NDAwMDA2M0MwMjYwMDAwNworOjEwRjM1MDAwM0MwMjIwMDAxMDYyMDAwNzNDMDI0MDAwMEEwMDEyRjQ0OAorOjEwRjM2MDAwMDAwMDAwMDAxMDYyMDAyNzAwMDAwMDAwMEEwMDEyRjRGNAorOjEwRjM3MDAwM0MwMjQwMDA4RjQyMDE0ODI0MDMwMDA0MDAwMjE0MDJCMgorOjEwRjM4MDAwMzA0MjAwRkYxNDQzMDAwQjI3NDQwMTgwOEY0MzAxNDBBQgorOjEwRjM5MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDFDQUM4MzAwMDAzMQorOjEwRjNBMDAwQTA4MjAwMEIzQzAyMTAwMEFGNDIwMUI4MEEwMDEyRjQyOAorOjEwRjNCMDAwM0MwMjQwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDAwNAorOjEwRjNDMDAwOEY0MjAxNDgwMDAyMTQwMkE0ODIwMDA4MjQwMjAwMDJCNQorOjEwRjNEMDAwQTA4MjAwMEI4RjQyMDE0OEE0ODIwMDEwOEY0MjAxNDQ5QQorOjEwRjNFMDAwQUM4MjAwMjQzQzAyMTAwMEFGNDIwMUI4MEEwMDEyRjRDMworOjEwRjNGMDAwM0MwMjQwMDAwRTAwMTMxQzAwMDAwMDAwMEEwMDEyRjQ0MgorOjEwRjQwMDAwM0MwMjQwMDAwRTAwMUM1MzAwMDAwMDAwM0MwMjQwMDA4MworOjEwRjQxMDAwQUY0MjAxNzgwMDAwMDAwMDBBMDAxMTIyM0MwMjgwMDA4NworOjEwRjQyMDAwOEY0MjAxMDAzMDQyMDAzRTE0NDAwMDExMjQwMjAwMDFDRQorOjEwRjQzMDAwQUY0MDAwNDg4RjQyMDEwMDMwNDIwN0MwMTA0MDAwMDUzNQorOjEwRjQ0MDAwMDAwMDAwMDBBRjQwMDA0Q0FGNDAwMDUwMDNFMDAwMDg1NworOjEwRjQ1MDAwMjQwMjAwMDFBRjQwMDA1NEFGNDAwMDQwOEY0MjAxMDA0MQorOjEwRjQ2MDAwMzA0MjM4MDA1NDQwMDAwMUFGNDAwMDQ0MjQwMjAwMDEwMworOjEwRjQ3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI5MDAwMzQ0MjAwMDE1QworOjEwRjQ4MDAwMDA4MjIwMjVBRjQ0MDAyMDhGNDIwMDIwMDQ0MEZGRkU3MAorOjEwRjQ5MDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDBDMworOjEwRjRBMDAwMzQ0MjAwMDEwMDgyMjAyNTAzRTAwMDA4QUY0NDAwMjAyMAorOjEwRjRCMDAwMjdCREZGRTBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTQxMgorOjEwRjRDMDAwQUZCMDAwMTA4RjUwMDE0MDhGNTEwMTQ4M0MwMjgwMDBDNgorOjEwRjREMDAwMDAxMTk0MDIwMjIyMjAyNDMyNDMwMEZGMjQwMjAwMEU3NQorOjEwRjRFMDAwMTA2MjAwOEEyODYyMDAwRjEwNDAwMDEyMjg2MjAwMzc2NAorOjEwRjRGMDAwMjQwMjAwMDYxMDYyMDAzQjI4NjIwMDA3MTA0MDAwMDc0QgorOjEwRjUwMDAwMjQwMjAwMDkxMDYwMDAxQTI0MDIwMDAxMTA2MjAwMjU4NAorOjEwRjUxMDAwMDAwMDAwMDAwQTAwMTNEMTAwMDAwMDAwMTA2MjAwN0IxMAorOjEwRjUyMDAwMjQwMjAwMEIxMDYyMDA1QjMyMjJGRkZGMEEwMDEzRDE5RAorOjEwRjUzMDAwMDAwMDAwMDAxMDQwMDAwODI0MDIwMDM4Mjg2MjAwMzU1NgorOjEwRjU0MDAwMTA0MDAwODAyNDAyMDAxRjEwNjIwMDdFMDAwMDAwMDBCNgorOjEwRjU1MDAwMEEwMDEzRDEwMDAwMDAwMDEwNjIwMDdBMjQwMjAwODAyQgorOjEwRjU2MDAwMTA2MjAwNDIwMDAwMDAwMDBBMDAxM0QxMDAwMDAwMDBGOQorOjEwRjU3MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAxQUY1MDAxODAxOQorOjEwRjU4MDAwQUY0MDAxODRBNzUyMDE4OEEzNDIwMThBMjQwMjAwMDJFRAorOjEwRjU5MDAwQTM0MjAxOEJBNzUxMDE5MDhGNDIwMTQ0MEEwMDEzQ0M3MgorOjEwRjVBMDAwQUY0MjAxQTQxMDgwMDAwQTI0MDIwMDAyM0MwMTA4MDBCRQorOjEwRjVCMDAwQTAyMjc1RDgzQzAxMDgwMEFDMzA3NUUwOEY0MjAxNDRCMAorOjEwRjVDMDAwM0MwMTA4MDBBQzIyNzVEQzBBMDAxM0QzOEZCRjAwMUM3RAorOjEwRjVEMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEzQjY2NQorOjEwRjVFMDAwMDAwMDAwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA1MAorOjEwRjVGMDAwQUY1MDAxODAzQzAyMDgwMDkwNDI3NUQ4MTA0MDAwMDNEMworOjEwRjYwMDAwMDAwMDE4MjEzQzAzMDgwMDhDNjM3NUUwQUY0MzAxODRCRgorOjEwRjYxMDAwQTc1MjAxODgzQzAyMDgwMDkwNDI3NUQ4MDAwMDE4MjFDQQorOjEwRjYyMDAwMzQ0MjAwMDFBMzQyMDE4QTI0MDIwMDAyQTM0MjAxOEI1QQorOjEwRjYzMDAwQTc1MTAxOTA4RjQyMDE0NEFGNDIwMUE0M0MwMjA4MDA0RgorOjEwRjY0MDAwOTA0Mjc1RDgxMDQwMDAwMzNDMDIxMDAwM0MwMzA4MDBCMworOjEwRjY1MDAwOEM2Mzc1RENBRjQzMDFBOEFGNDIwMUI4M0MwMTA4MDBFMAorOjEwRjY2MDAwQTAyMDc1RDgwQTAwMTNEMzhGQkYwMDFDOEY0MjAxQjhBOQorOjEwRjY3MDAwMDQ0MEZGRkUyNDAyMDAwMkEzNDIwMThCQTc1MjAxODgyRQorOjEwRjY4MDAwQTc1MTAxOTA4RjQyMDE0NEE3NDIwMTkyMEEwMDEzQ0U3NAorOjEwRjY5MDAwM0MwMjEwMDAxNDQwMDAxRDAwMDAwMDAwOTM2MjAwMDVCMQorOjEwRjZBMDAwMzA0MjAwMDQxNDQwMDAzNzAwMDAwMDAwMEUwMDEzMEUyQQorOjEwRjZCMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMDQ1MAorOjEwRjZDMDAwMEUwMDEzMTdBMzYyMDAwNTkzNjIwMDA1MzA0MjAwMDQ4OAorOjEwRjZEMDAwMTQ0MDAwMDIwMDAwMDAwMDAwMDAwMDBEOTM2MjAwMDBEMgorOjEwRjZFMDAwMjQwMzAwMjAzMDQyMDBGRjE0NDMwMDA4MDAwMDAwMDAwMworOjEwRjZGMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDA1QUY1MDAxODA5NAorOjEwRjcwMDAwQTM0MjAxOEIzQzAyMTAwMEFGNDIwMUI4OEY0MjAxQjgwNgorOjEwRjcxMDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDAwMTgwQUY1MDAxODQ4QworOjEwRjcyMDAwQTc1MjAxODhBMzQyMDE4QUEzNDIwMThCQTc1MTAxOTBFRAorOjEwRjczMDAwQUY0MDAxQTQ4RjQyMDE0NEFGNDIwMUE4MEEwMDEzQ0U5QQorOjEwRjc0MDAwM0MwMjEwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDE3OQorOjEwRjc1MDAwQUY1MDAxODBBRjQwMDE4NEE3NTIwMTg4QTM0MjAxOEFDMworOjEwRjc2MDAwMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwQUY0MDAxQTRFMworOjEwRjc3MDAwQUY0MDAxQTgzQzAyMTAwMEFGNDIwMUI4MEEwMDEzRDMwOQorOjEwRjc4MDAwOEZCRjAwMUMwMDAwMDAwRDhGQkYwMDFDOEZCMjAwMTgzRgorOjEwRjc5MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBENworOjEwRjdBMDAwMjdCREZGRThBRkJGMDAxMDBFMDAwRjBFMDAwMDAwMDBFNQorOjEwRjdCMDAwQUY0MDAxODA4RkJGMDAxMDAwMDAyMDIxMEEwMDBGQUQ3NAorOjEwRjdDMDAwMjdCRDAwMTgzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjE3RgorOjEwRjdEMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI4RAorOjEwRjdFMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAxM0U0MDAwNTI4NDBBNworOjEwRjdGMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkZDRgorOjEwRjgwMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDEzRUVDNAorOjEwRjgxMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg5OQorOjEwRjgyMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwRjgzMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwNAorOjEwRjg0MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTQ4MAorOjEwRjg1MDAwQUZCMDAwMTAwRTAwMTMwRTAwODA4MDIxOTM2MjAwN0Q3NworOjEwRjg2MDAwMDIwMDIwMjEzNDQyMDAyMDBFMDAxMzE3QTM2MjAwN0QwNQorOjEwRjg3MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBDOUJFMworOjEwRjg4MDAwMjdCRDAwMTgzMDgzMDBGRjMwQTUwMEZGMzBDNjAwRkYwMQorOjEwRjg5MDAwMjc0NzAxODA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBRQorOjEwRjhBMDAwOEY0MjAxMjgzNDYzNDAwMEFDRTIwMDAwMjQwMjAwMDFEMgorOjEwRjhCMDAwQUNFMDAwMDRBNEUzMDAwOEEwRTIwMDBBMjQwMjAwMDI3NQorOjEwRjhDMDAwQTBFMjAwMEIzQzAyMTAwMEE0RTUwMDEwQUNFMDAwMjQxNAorOjEwRjhEMDAwQUNFMDAwMjhBNEU2MDAxMjAzRTAwMDA4QUY0MjAxQjg0MworOjEwRjhFMDAwMjdCREZGRThBRkJGMDAxMDkzNjIwMDNGMjQwMzAwMTI2MgorOjEwRjhGMDAwMzA0MjAwRkYxMDQzMDAwRDAwODAzMDIxOEY2MjAwNDQzMQorOjEwRjkwMDAwMDA4MjEwMjMwNDQwMDAwQThGQkYwMDEwOEY2MjAwNDg1RAorOjEwRjkxMDAwMjQwNDAwMzkwMDAwMjgyMTAwQzIxMDIzMDQ0MTAwMDRGRgorOjEwRjkyMDAwMjQwNjAwMTIwRTAwMTQxMTAwMDAwMDAwOEZCRjAwMTAwQQorOjEwRjkzMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgwRQorOjEwRjk0MDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA3NQorOjEwRjk1MDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjhFQQorOjEwRjk2MDAwMEUwMDBDQTRBRkEwMDAxMDEwNDAwMDA5MDI0MDIwMjE5RQorOjEwRjk3MDAwOEUyMjAwMDhBRjYyMDA4NDBFMDAxNDAyQUY2MDAwNDBDNworOjEwRjk4MDAwMjQwNDAwMzgyNDA1MDA4RDBBMDAxNEREMjQwNjAwMTIyQQorOjEwRjk5MDAwOTM2MjAwM0UzMDQyMDAwODEwNDAwMDBGOEZBMjAwMTAxQQorOjEwRjlBMDAwMzA0MjAxMDAxMDQwMDAwNzhGQTMwMDE0OEY2MjAwNjBGNgorOjEwRjlCMDAwMDA2MjEwMjMwNDQzMDAwOEFGNjMwMDYwMEEwMDE0NjY2RAorOjEwRjlDMDAwMDAwMDAwMDBBRjYwMDA2MDkzNjIwMDNFMjQwM0ZGRjc3OAorOjEwRjlEMDAwMDA0MzEwMjRBMzYyMDAzRTkzNjIwMDNFMzA0MjAwMDhDMAorOjEwRjlFMDAwMTQ0MDAwMDIyNDA2MDAwMzAwMDAzMDIxOTM2MjAwMzQxQQorOjEwRjlGMDAwOTM2MzAwMzc4RjY0MDA4NDMwNDIwMEZGMzA2MzAwRkY2MAorOjEwRkEwMDAwMDA2NjE4MjEwMDAzMTg4MDAwNDMyODIxMDBBNDIwMkI0MQorOjEwRkExMDAwMTA4MDAwMEIwMDAwMDAwMDk3NjMwMDNDOEY2MjAwODRBMAorOjEwRkEyMDAwMzA2M0ZGRkYwMDQ1MTAyMzAwNjIxODJCMTQ2MDAwMDRCMAorOjEwRkEzMDAwMDAwMDAwMDA4RjYyMDA4NDBBMDAxNDgyMDA0NTgwMjNDOQorOjEwRkE0MDAwOTc2MjAwM0MzMDUwRkZGRjhGQTMwMDEwMzA2MjAwMDQyQgorOjEwRkE1MDAwMTA0MDAwMDQwMDA2Mjg4MDhGQTIwMDFDMEEwMDE0OEFBRgorOjEwRkE2MDAwMDIwMjEwMkIyRTAyMDIxODUwNDAwMDAzMjQwMjAyMTgzQQorOjEwRkE3MDAwMEEwMDE0OTMwMjA1MTAyMzMwNjMwMDA0MTA2MDAwMDM5MQorOjEwRkE4MDAwMDA0NTEwMjM4RkEyMDAxQzAwNDUxMDIzMDA0MDgwMjE1OAorOjEwRkE5MDAwMkM0MjAwODA1NDQwMDAwMTI0MTAwMDgwMEUwMDEzMEUwMAorOjEwRkFBMDAwMDI0MDIwMjEyNDAyMDAwMUFGNjIwMDBDOTM2MjAwM0U1QworOjEwRkFCMDAwMDAxMDIwNDAzMDQyMDA3RkEzNjIwMDNFOEUyMjAwMDRFRQorOjEwRkFDMDAwMjQ0MjAwMDFBRjYyMDA0MEE3NzAwMDNDOEY2MjAwNTBFQQorOjEwRkFEMDAwOTYyMzAwMEUwMDQzMTAyMUFGNjIwMDU4OEY2MjAwNTA0MQorOjEwRkFFMDAwMDA0NDEwMjFBRjYyMDA1QzhFMjIwMDA0QUY2MjAwMTg1NworOjEwRkFGMDAwOEUyMjAwMDhBRjYyMDAxQzhGQTIwMDEwMzA0MjAwMDg2NgorOjEwRkIwMDAwNTQ0MDAwMEE5M0EyMDAyMEEzNjAwMDM2OTM2MjAwMzY5RQorOjEwRkIxMDAwMjQwM0ZGREZBMzYyMDAzNTkzNjIwMDNFMDA0MzEwMjRGQworOjEwRkIyMDAwQTM2MjAwM0UwQTAwMTRCRDhFMjIwMDA4QTM2MjAwMzVDNQorOjEwRkIzMDAwOEUyMjAwMDhBRjYyMDA0QzhGNjIwMDI0OEY2MzAwNDA2OQorOjEwRkI0MDAwMDA0MzEwMjFBRjYyMDA0ODkzNjIwMDAwMjQwMzAwNTA3QworOjEwRkI1MDAwMzA0MjAwRkYxNDQzMDAxMjI0MDNGRjgwM0MwMjA4MDBERgorOjEwRkI2MDAwOEM0MjMxQTAwMjQyMTAyMTAwNDMxMDI0QUY0MjAwMjhGMQorOjEwRkI3MDAwM0MwMjA4MDA4QzQyMzFBMDhFMjQwMDA4M0MwMzAwMEM5QgorOjEwRkI4MDAwMDI0MjEwMjEzMDQyMDA3RjAzNDIxMDIxMDA0MzEwMjEyNQorOjEwRkI5MDAwQUM0NDAwRDg4RTIzMDAwOEFGODIwMDI4QUM0MzAwRENDMAorOjEwRkJBMDAwMEUwMDEzMTcwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjFGMQorOjEwRkJCMDAwMjQwNjAwMEEwRTAwMTQxMTAwMDAwMDAwOEZCRjAwMzQ1QworOjEwRkJDMDAwOEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4MjQwMjAwMDFDQQorOjEwRkJEMDAwMDNFMDAwMDgyN0JEMDAzODI3QkRGRkU4QUZCRjAwMTBENQorOjEwRkJFMDAwOTBDNzAwMEQwMEMwMjgyMTMwRTYwMDEwMTBDMDAwMEFBOAorOjEwRkJGMDAwMzBFMjAwMDU4Q0EzMDAwODhGNjIwMDU0MTA2MjAwMDZGQQorOjEwRkMwMDAwMzBFMjAwMDUxNDQwMDAxNzhGQkYwMDEwMDAwMDIwMjFEMworOjEwRkMxMDAwMEEwMDBEMTMyN0JEMDAxODEwNDAwMDBEMzBFMzAwMTIzQworOjEwRkMyMDAwMTBDMDAwMTA4RkJGMDAxMDhDQTMwMDA4OEY2MjAwNTQxQQorOjEwRkMzMDAwMTQ2MjAwMEQyNDAyMDAwMTI0MDQwMDM4MjQwNTAwOEQwNAorOjEwRkM0MDAwMEUwMDE0MTEyNDA2MDAxMjBBMDAxNTA5OEZCRjAwMTBCRgorOjEwRkM1MDAwMjQwMjAwMTIxNDYyMDAwMzhGQkYwMDEwMEEwMDE0M0YzOAorOjEwRkM2MDAwMjdCRDAwMTgyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTg4QQorOjEwRkM3MDAwMjdCREZGRjgyNzQyMDE4MEFGQTIwMDAwMzA4QTAwRkZCNQorOjEwRkM4MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwOEY0NjAxMjhBQgorOjEwRkM5MDAwM0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwQUY4NjAwNTA1NAorOjEwRkNBMDAwMDBDMjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4RgorOjEwRkNCMDAwOEM0MjMxQTA4RkE5MDAwMDhGQTgwMDAwMDBDMjEwMjE0MworOjEwRkNDMDAwMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjFFMgorOjEwRkNEMDAwOTQ2NDAwRDQ4RkE3MDAwMDhGQTUwMDAwMjQwMjAwMDJDNgorOjEwRkNFMDAwQUY4MzAwMjhBMEEyMDAwQjhGQTMwMDAwMzU0MjYwMDA2NAorOjEwRkNGMDAwMzA4NEZGRkZBNEUyMDAwODNDMDIxMDAwQUQyNjAwMDBBMworOjEwRkQwMDAwQUQwNDAwMDRBQzYwMDAyNDI3QkQwMDA4QUY0MjAxQjg3OAorOjEwRkQxMDAwMDNFMDAwMDgyNDAyMDAwMThDODIwMDA0OEY4MzAwMjg4NQorOjEwRkQyMDAwMDA0NTEwMjNBQzgyMDAwNDkwNjIwMDYzMzA0MjAwN0ZFMworOjEwRkQzMDAwQTA2MjAwNjM4QzgyMDAyMDkzODMwMDMwOEY4NTAwMjhBRQorOjEwRkQ0MDAwMzQ0MjAwMDJBRjgzMDA0NEE3ODAwMDQyQUM4MjAwMjAwRQorOjEwRkQ1MDAwQTRBMDAwRTQ5MEEyMDA2MzI0MDNGRkJGMDA0MzEwMjQ4QQorOjEwRkQ2MDAwMDNFMDAwMDhBMEEyMDA2MzI3NDMwMTgwOEY0MjAxQjg4RQorOjEwRkQ3MDAwMDQ0MEZGRkU4RjgyMDA1MEFDNjIwMDAwOEY0MjAxMjRERAorOjEwRkQ4MDAwQUM2MjAwMDQyNDAyNjA4M0E0NjIwMDA4MjQwMjAwMDIyMgorOjEwRkQ5MDAwQTA2MjAwMEIzQzAyMTAwMDAzRTAwMDA4QUY0MjAxQjg3MworOjEwRkRBMDAwOEY4ODAwNDQ5MzgyMDAzMDhGODMwMDI4M0MwNzA4MDAyRQorOjEwRkRCMDAwMjRFNzc5RjQwMDQ4MTAyMzMwNDIwMEZGMzA0OTAwRkM2QQorOjEwRkRDMDAwMjQ2NTAwODg4Rjg2MDA0ODMwNEEwMDAzMTEyMDAwMDkwRQorOjEwRkREMDAwMDAwMDIwMjEyNDgyMDAwNDhDQTMwMDAwMzA0NDAwRkY5NgorOjEwRkRFMDAwMDA4OTEwMkFBQ0UzMDAwMDI0QTUwMDA0MTQ0MEZGRjlBOAorOjEwRkRGMDAwMjRFNzAwMDQxMTQwMDAwOTAwMDAyMDIxMjQ4MjAwMDFCMgorOjEwRkUwMDAwOTBBMzAwMDAzMDQ0MDBGRjAwOEExMDJCQTBFMzAwMDAwNAorOjEwRkUxMDAwMjRBNTAwMDExNDQwRkZGOTI0RTcwMDAxMzBDMjAwMDNDQgorOjEwRkUyMDAwMTQ0MDAwMDQ4Rjg1MDA0NDMxMDIwMDAzMTA0MDAwMEQ4RgorOjEwRkUzMDAwMDAwMDAwMDAxMEEwMDAwOTAwMDAyMDIxMjQ4MjAwMDEyMQorOjEwRkU0MDAwOTBDMzAwMDAzMDQ0MDBGRjAwODUxMDJCQTBFMzAwMDBBOQorOjEwRkU1MDAwMjRDNjAwMDExNDQwRkZGOTI0RTcwMDAxMDNFMDAwMDg3NAorOjEwRkU2MDAwMDAwMDAwMDAxMTAwRkZGRDAwMDAyMDIxMjQ4MjAwMDQ5QQorOjEwRkU3MDAwOENDMzAwMDAzMDQ0MDBGRjAwODgxMDJCQUNFMzAwMDA2RQorOjEwRkU4MDAwMjRDNjAwMDQxNDQwRkZGOTI0RTcwMDA0MDNFMDAwMDgzRQorOjEwRkU5MDAwMDAwMDAwMDA4RjgzMDA0NDkzODIwMDMwMzBDNjAwRkZEMgorOjEwRkVBMDAwMzBBNTAwRkYwMDQzMTAyMzMwNDMwMEZGOEY4MjAwMjg1RAorOjEwRkVCMDAwMDA4MDM4MjEwMDQzMTAyMTE0QzAwMDAyMjQ0ODAwODgyQgorOjEwRkVDMDAwMDA4MzM4MjEzMEUyMDAwMzE0NDAwMDA1MzBBMjAwMDMxMworOjEwRkVEMDAwMTQ0MDAwMDMzMDYyMDAwMzEwNDAwMDBEMDAwMDAwMDBEOQorOjEwRkVFMDAwMTBBMDAwMDkwMDAwMjAyMTI0ODIwMDAxOTBFMzAwMDBGRQorOjEwRkVGMDAwMzA0NDAwRkYwMDg1MTAyQkExMDMwMDAwMjRFNzAwMDExRgorOjEwRkYwMDAwMTQ0MEZGRjkyNTA4MDAwMTAzRTAwMDA4MDAwMDAwMDA4QworOjEwRkYxMDAwMTBBMEZGRkQwMDAwMjAyMTI0ODIwMDA0OENFMzAwMDBEQgorOjEwRkYyMDAwMzA0NDAwRkYwMDg1MTAyQkFEMDMwMDAwMjRFNzAwMDRERgorOjEwRkYzMDAwMTQ0MEZGRjkyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDA1OQorOjEwRkY0MDAwMjdCREZGRjgyNDAyRkZGRkFGQTIwMDAwMDA4MDM4MjE4OAorOjEwRkY1MDAwMjQwNTAwMkYzQzA5MDgwMDI1Mjk3NUY0MjQwODAwRkYxQQorOjEwRkY2MDAwMjQwNkZGRkY5MEUyMDAwMDI0QTNGRkZGMDAwNjIyMDIwOAorOjEwRkY3MDAwMDBDMjEwMjYzMDQyMDBGRjAwMDIxMDgwMDA0OTEwMjEwQworOjEwRkY4MDAwOEM0MjAwMDAzMDY1MDBGRjI0RTcwMDAxMTRBOEZGRjU1MworOjEwRkY5MDAwMDA4MjMwMjYwMDA2MTAyN0FGQTIwMDA0QUZBMjAwMDBBNgorOjEwRkZBMDAwMDAwMDI4MjEyN0E2MDAwNDAwQzUxMDIzOTA0NDAwMDM2OAorOjEwRkZCMDAwMjRBMjAwMDEwMEJEMTgyMTMwNDUwMEZGMkNBMjAwMDQzRQorOjEwRkZDMDAwMTQ0MEZGRjlBMDY0MDAwMDhGQTIwMDAwMDNFMDAwMDhDNQorOjEwRkZEMDAwMjdCRDAwMDgwMDgwNDgyMTMwQUFGRkZGMzBDNjAwRkY3RgorOjEwRkZFMDAwMzBFN0ZGRkYyNzQ4MDE4MDhGNDIwMUI4MDQ0MEZGRkU0MQorOjEwRkZGMDAwOEY4MjAwNTBBRDAyMDAwMDhGNDIwMTI0QUQwMjAwMDQ0OAorOjAyMDAwMDA0MDAwMUY5Cis6MTAwMDAwMDA4RDIyMDAyMEE1MDcwMDA4QTEwMjAwMEEyNDAyMDAxNjg0Cis6MTAwMDEwMDBBMTAyMDAwQjkzNDMwMTIwOEQyMjAwMDg4RDI0MDAwNENGCis6MTAwMDIwMDAzMDYzMDBGRjAwNDMxMDIxOTc4MzAwNDIwMDQ0MTAyMUY5Cis6MTAwMDMwMDA4RDI1MDAyNDAwNDMxMDIzM0MwMzA4MDA4QzYzMzFBMDZECis6MTAwMDQwMDA4Rjg0MDAyOEE1MDIwMDBDMjQ2MzAwRTgyNDAyRkZGRjJGCis6MTAwMDUwMDBBNTBBMDAwRUE1MDMwMDEwQTUwNjAwMTJBRDA1MDAxOEE0Cis6MTAwMDYwMDBBRDAyMDAyNDk0ODIwMTE0MjQwM0ZGRjczMDQyRkZGRjA1Cis6MTAwMDcwMDBBRDAyMDAyODhDODIwMTE4QUQwMjAwMkMzQzAyMTAwMDU5Cis6MTAwMDgwMDBBRDAwMDAzMEFGNDIwMUI4OEQyMjAwMjAwMDQzMTAyNEEzCis6MTAwMDkwMDAwM0UwMDAwOEFEMjIwMDIwOEY4MjAwMjgzMEU3RkZGRjM4Cis6MTAwMEEwMDAwMDgwNDgyMTkwNDIwMEQzMzBBNUZGRkYzMEM2MDBGRkZBCis6MTAwMEIwMDAwMDAyMTEwMDMwNDIwRjAwMDBFMjM4MjUyNzQ4MDE4MDdECis6MTAwMEMwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTBBRDAyMDAwMDU1Cis6MTAwMEQwMDA4RjQyMDEyNEFEMDIwMDA0OEQyMjAwMjBBNTA3MDAwOEY0Cis6MTAwMEUwMDBBMTAyMDAwQTI0MDIwMDE3QTEwMjAwMEI5MzQzMDEyMDgxCis6MTAwMEYwMDA4RDIyMDAwODhEMjQwMDA0MzA2MzAwRkYwMDQzMTAyMThFCis6MTAwMTAwMDA5NzgzMDA0MjAwNDQxMDIxOEY4NDAwMjgwMDQzMTAyMzZECis6MTAwMTEwMDAzQzAzMDgwMDhDNjMzMUEwQTUwMjAwMENBNTA1MDAwRTZECis6MTAwMTIwMDAyNDYzMDBFOEE1MDMwMDEwQTUwNjAwMTJBRDAwMDAxNDJBCis6MTAwMTMwMDA4RDIyMDAyNEFEMDIwMDE4OEM4MjAwNUNBRDAyMDAxQ0YwCis6MTAwMTQwMDA4QzgyMDA1OEFEMDIwMDIwMjQwMkZGRkZBRDAyMDAyNDgzCis6MTAwMTUwMDA5NDgyMDBFNjMwNDJGRkZGQUQwMjAwMjg5NDgyMDA2MEU2Cis6MTAwMTYwMDA5NDgzMDBCRTMwNDI3RkZGMzA2M0ZGRkYwMDAyMTIwMDI1Cis6MTAwMTcwMDAwMDQzMTAyMUFEMDIwMDJDM0MwMjEwMDBBRDAwMDAzMDA1Cis6MTAwMTgwMDBBRjQyMDFCODk0ODIwMEJFMjQwM0ZGRjcwMEEyMTAyMTAxCis6MTAwMTkwMDBBNDgyMDBCRThEMjIwMDIwMDA0MzEwMjQwM0UwMDAwODRBCis6MTAwMUEwMDBBRDIyMDAyMDI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRUFBCis6MTAwMUIwMDAyNDAyMDAxOEFDNjQwMDAwQTA2MjAwMEI4RjgyMDAyOEFCCis6MTAwMUMwMDA5NDQyMDBFNkE0NjIwMDEwM0MwMjEwMDBBQzYwMDAzMEQzCis6MTAwMUQwMDAwM0UwMDAwOEFGNDIwMUI4Mjc0MzAxODA4RjQyMDFCODE1Cis6MTAwMUUwMDAwNDQwRkZGRThGODIwMDJDOTQ0MjAwMUMzMDQyRkZGRjJGCis6MTAwMUYwMDAwMDAyMTFDMEFDNjIwMDAwMjQwMjAwMTlBMDYyMDAwQkQyCis6MTAwMjAwMDAzQzAyMTAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCOENGCis6MTAwMjEwMDA4Rjg3MDAzNDMwQzMwMEZGOEY0MjAxQjgwNDQwRkZGRUQ3Cis6MTAwMjIwMDA4RjgyMDA1MDM0NjM2MDAwQUNBMjAwMDA5MzgyMDA0Q0M3Cis6MTAwMjMwMDBBMEEyMDAwNThDRTIwMDEwQTRBMjAwMDZBNEEzMDAwODVFCis6MTAwMjQwMDA4QzgyMDAyMDI0MDNGRkY3QTBBMjAwMEEyNDAyMDAwMkVGCis6MTAwMjUwMDBBMEEyMDAwQjhDRTIwMDAwQUNBMjAwMTA4Q0UyMDAwNDEzCis6MTAwMjYwMDBBQ0EyMDAxNDhDRTIwMDFDQUNBMjAwMjQ4Q0UyMDAyMEEyCis6MTAwMjcwMDBBQ0EyMDAyODhDRTIwMDJDQUNBMjAwMkM4QzgyMDAyNEMyCis6MTAwMjgwMDBBQ0EyMDAxODNDMDIxMDAwQUY0MjAxQjg4QzgyMDAyMEUyCis6MTAwMjkwMDAwMDQzMTAyNDAzRTAwMDA4QUM4MjAwMjA5MzgyMDA0QzRECis6MTAwMkEwMDAyNDAzMDAwMTI3QkRGRkU4MDA0MzMwMDQyQzQyMDAyMDU2Cis6MTAwMkIwMDBBRkIwMDAxMEFGQkYwMDE0MjQxMEZGRkUxMDQwMDAwNUM3Cis6MTAwMkMwMDAyNzQ1MDE4MDNDMDIwODAwOEM0MjMxOTAwQTAwMTZBOEE0Cis6MTAwMkQwMDAwMDQ2MTAyNDNDMDIwODAwOEM0MjMxOTQwMDQ2MTAyNDUxCis6MTAwMkUwMDAxNDQwMDAwNzI0MDYwMDg0OEY4MzAwMjgyNDEwRkZGRjk5Cis6MTAwMkYwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjBGCis6MTAwMzAwMDAwRTAwMTY3NDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNEMwCis6MTAwMzEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAyQzY5Cis6MTAwMzIwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFFCis6MTAwMzMwMDBBRkJGMDAxQzkwNjIwMDBEMDBBMDkwMjEzMEQxMDBGRkUzCis6MTAwMzQwMDAzMDQyMDA3RkEwNjIwMDBEOEY4NTAwMjg4RTQzMDAxODg4Cis6MTAwMzUwMDAwMDgwODAyMThDQTIwMDdDMTQ2MjAwMDUyNDAyMDAwRTIzCis6MTAwMzYwMDA5MEEyMDA2MzM0NDIwMDIwMEEwMDE2RDFBMEEyMDA2M0NDCis6MTAwMzcwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA0NzkyCis6MTAwMzgwMDAyNDA0RkZGRjUyMjAwMDQ1MDAwMDIwMjE4RTQzMDAwMDdFCis6MTAwMzkwMDAzQzAyMDAxMDAwNjIxMDI0NTA0MDAwMDQzQzAyMDAwODlGCis6MTAwM0EwMDAwMjAwMjAyMTBBMDAxNkUwMjQwMjAwMTUwMDYyMTAyNDM5Cis6MTAwM0IwMDA1MDQwMDAwOThFNDUwMDAwMDIwMDIwMjEyNDAyMDAxNDU0Cis6MTAwM0MwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDAzMzU2Cis6MTAwM0QwMDAyNDA0RkZGRjhFNDUwMDAwM0MwMjAwMDIwMEEyMTAyNDBFCis6MTAwM0UwMDAxMDQwMDAxNjNDMDIwMDA0OEY4NjAwMkM4Q0MyMDAxNEMyCis6MTAwM0YwMDA4Q0MzMDAxMDhDQzQwMDE0MDA0MzEwMjMwMDQ0MTAyQjQ1Cis6MTAwNDAwMDA1MDQwMDAwNTAyMDAyMDIxOEU0MzAwMkM4Q0MyMDAxMEI5Cis6MTAwNDEwMDAxMDYyMDAwMzAyMDAyMDIxMEEwMDE3MTEyNDAyMDAxMkJBCis6MTAwNDIwMDAzQzAyMDAwNDAwQTIxMDI0NTA0MDAwMUMwMDAwMjAyMUM3Cis6MTAwNDMwMDAwMjAwMjAyMTBBMDAxNzExMjQwMjAwMTMwMEEyMTAyNDM4Cis6MTAwNDQwMDAxMDQwMDAwNjhGODMwMDJDOEM2MjAwMTA1MDQwMDAxMzc3Cis6MTAwNDUwMDAwMDAwMjAyMTBBMDAxNzBCMDIwMDIwMjE4QzYyMDAxMEVFCis6MTAwNDYwMDA1MDQwMDAwNDhFNDIwMDJDMDIwMDIwMjEwQTAwMTcxMTg3Cis6MTAwNDcwMDAyNDAyMDAxMTUwNDAwMDA5MDAwMDIwMjEwMjAwMjAyMTI4Cis6MTAwNDgwMDAyNDAyMDAxNzBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRkRFCis6MTAwNDkwMDAxMDQzMDAwMjI0MDRGRkZGMDAwMDIwMjE4RkJGMDAxQzM2Cis6MTAwNEEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTlGCis6MTAwNEIwMDAwM0UwMDAwODI3QkQwMDIwOTM4MzAwMzAyN0JERkZFMDQ0Cis6MTAwNEMwMDAyNDAyMDAzNEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQzVCCis6MTAwNEQwMDBBRkIwMDAxMDAwODA4ODIxMTQ2MjAwMEMwMEEwOTAyMUIxCis6MTAwNEUwMDA4Rjg0MDAzNDBFMDAxNUMwOEM5MDAwMzAxMjAyMDAwNzdCCis6MTAwNEYwMDAyNDAyMDAwNTAyMjAyMDIxMEUwMDE2OTdBMzgyMDA0QzQyCis6MTAwNTAwMDAyNDAzRkZGRjEwNDMwMDYwMjQwNEZGRkY5MjQyMDAwNDE1Cis6MTAwNTEwMDAxMDQwMDAwOThGODIwMDI4MDIyMDIwMjEyNDAyMDAwQ0I0Cis6MTAwNTIwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA1NkQxCis6MTAwNTMwMDAyNDA0RkZGRjhGODIwMDI4QTM4MDAwMjQ4RTQzMDAwNDQwCis6MTAwNTQwMDA4QzQ0MDA4MDNDMDIwMEZGMzQ0MkZGRkYwMDYyMTgyNDBDCis6MTAwNTUwMDAwMDgzMjAyQjEwODAwMDA4QUY4MzAwM0MwMjIwMjAyMTY0Cis6MTAwNTYwMDAyNDAyMDAxOTBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRkZCCis6MTAwNTcwMDAxMDQzMDA0NTI0MDRGRkZGOTc4MjAwNDI4Rjg3MDA0NDA4Cis6MTAwNTgwMDA4Rjg1MDAzQzAwNDcyMDIzMTBBMDAwM0FBNzg0MDA0MjNBCis6MTAwNTkwMDA4Rjg2MDAyODMwQTIwMDAzMDAwMjEwMjM5MEMzMDBCQzA1Cis6MTAwNUEwMDAzMDUwMDAwMzAwQjAyODIxMDAwMzE4ODIzMDcxMDAwMTkwCis6MTAwNUIwMDAwMDExMTA4MDAwQTIyODIxM0MwMzA4MDA4QzYzMzFBMEE4Cis6MTAwNUMwMDA4RjgyMDA1MDMwODRGRkZGMDA4NTIwMkIwMDQzMTAyMUQ0Cis6MTAwNUQwMDAxMDgwMDAxMDI0NDIwMDg4OEY4NDAwMzQxMDgyMDAwREE3Cis6MTAwNUUwMDAzQzAzM0YwMThFNDIwMDAwMDA0MzEwMjQzQzAzMjUwMEUxCis6MTAwNUYwMDAxNDQzMDAwNjMwRTUwMEZGOEM4MjAwMDBBQ0MyMDA4ODg2Cis6MTAwNjAwMDA4QzgyMDAxMDBBMDAxNzc1QUNDMjAwOTgwRTAwMTU5NTc4Cis6MTAwNjEwMDAwMDAwMzAyMTkzODIwMDI0OEY4NTAwMjg4RjgzMDA0OEJBCis6MTAwNjIwMDAwMjAyMzgyMThGODIwMDQ0QTM4NzAwMjQ5NEE0MDBFNEFFCis6MTAwNjMwMDAwMDYyMTgyMThGODIwMDNDMzQ4NDEwMDBBRjgzMDA0ODkwCis6MTAwNjQwMDAwMDUwMzAyMUE0QTQwMEU0MTIyMDAwMEVBRjg2MDA0NDI0Cis6MTAwNjUwMDAyNEUyMDAwNEEzODIwMDI0OTRBMjAwRTQyNEMzMDAwNDQyCis6MTAwNjYwMDBBRjgzMDA0NDM0NDIyMDAwQTRBMjAwRTQwQTAwMTc5MkExCis6MTAwNjcwMDAwMDAwMjAyMThGODIwMDQ4QUY4MDAwNDQwMDQ3MTAyMUY1Cis6MTAwNjgwMDBBRjgyMDA0ODAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxOEVECis6MTAwNjkwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODFCCis6MTAwNkEwMDAyN0JEMDAyMDhGODYwMDI4MjdCREZGRThBRkJGMDAxNEJDCis6MTAwNkIwMDBBRkIwMDAxMDkwQzIwMDYzMzA0MjAwMjAxMDQwMDAwODJDCis6MTAwNkMwMDAzMEE1MDBGRjhDQzIwMDdDMjQwM0ZGREYyNDQyMDAwMTIwCis6MTAwNkQwMDBBQ0MyMDA3QzkwQzIwMDYzMDA0MzEwMjRBMEMyMDA2MzNGCis6MTAwNkUwMDAxMEEwMDAyMzhGODMwMDI4Mjc1MDAxODAwMjAwMjgyMUJBCis6MTAwNkYwMDAwRTAwMTY3NDI0MDYwMDgyOEY4MjAwMjg5MDQyMDA2MzQ4Cis6MTAwNzAwMDAzMDQyMDA0MDUwNDAwMDE5QTM4MDAwNEM4RjgzMDAzNEQ5Cis6MTAwNzEwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTBBRTAyMDAwMEZECis6MTAwNzIwMDAyNDAyNjA4MkE2MDIwMDA4MjQwMjAwMDJBMjAyMDAwQjNBCis6MTAwNzMwMDA4QzYyMDAwOEFFMDIwMDEwOEM2MjAwMENBRTAyMDAxNDQ1Cis6MTAwNzQwMDA4QzYyMDAxNEFFMDIwMDE4OEM2MjAwMThBRTAyMDAyNDA1Cis6MTAwNzUwMDA4QzYyMDAyNEFFMDIwMDI4OEM2MjAwMjhBRTAyMDAyQ0JECis6MTAwNzYwMDAzQzAyMTAwMEFGNDIwMUI4QTM4MDAwNEM4RjgzMDAyOEU4Cis6MTAwNzcwMDA4RkJGMDAxNDhGQjAwMDEwOTA2MjAwNjMyN0JEMDAxODc3Cis6MTAwNzgwMDAzMDQyMDA3RkEwNjIwMDYzOTc4MjAwNDI4Rjg2MDA0NDVGCis6MTAwNzkwMDA4Rjg1MDAyODkzODMwMDMwMDA0NjEwMjNBNzgyMDA0MkYzCis6MTAwN0EwMDBBNEEwMDBFNDkwQTQwMDYzOEY4MjAwNDhBRjgzMDA0NEJCCis6MTAwN0IwMDAyNDAzRkZCRjAwNDYxMDIxMDA4MzIwMjRBRjgyMDA0ODlECis6MTAwN0MwMDBBMEE0MDA2MzhGODIwMDI4QTA0MDAwQkQ4RjgyMDAyODczCis6MTAwN0QwMDAwM0UwMDAwOEE0NDAwMEJFOEY4QTAwMjgyN0JERkZFMDg4Cis6MTAwN0UwMDBBRkIxMDAxNEFGQjAwMDEwOEY4ODAwNDRBRkJGMDAxODQ1Cis6MTAwN0YwMDA5Mzg5MDAyNDk1NDIwMEU0MzBEMTAwRkYwMTA5MTgyQkIxCis6MTAwODAwMDAwMDgwODAyMTMwQUMwMEZGMzA0N0ZGRkYwMDAwNTgyMUZFCis6MTAwODEwMDAxNDYwMDAwMzMxMDYwMEZGMDEyMDMwMjEwMTA5NTgyMzM0Cis6MTAwODIwMDA5NzgzMDA0MjAwNjgxMDJCMTQ0MDAwMzIwMDAwMDAwMDQzCis6MTAwODMwMDAxNDY4MDAwNzI0MDIwMDAxOEUwMjAwMjAyNDAzRkZGQjNECis6MTAwODQwMDAzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjAyNDAyMDAwMTlGCis6MTAwODUwMDAzNEU3MDg4MDE1ODIwMDA1MzE2NUZGRkYwRTAwMTVFNUJECis6MTAwODYwMDAwMjAwMjAyMTBBMDAxODI3MDIwMDIwMjEwRTAwMTYxNjdGCis6MTAwODcwMDAwMjAwMjAyMTBFMDAxNjU5OEY4NDAwNTA4Rjg0MDAyODFBCis6MTAwODgwMDA5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjA5NDgyMDA2MDhGCis6MTAwODkwMDAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkY1NDQzMDAwRkQzCis6MTAwOEEwMDAwMjAwMjAyMTk0ODIwMDYwMjQwMzgwMDAwMDQzMTAyNDcxCis6MTAwOEIwMDBBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAzMDQyMDBGRjVDCis6MTAwOEMwMDAwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzAzMDYzMDA3RjM1Cis6MTAwOEQwMDAwMDYyMTgyNUEwODMwMDYwMDIwMDIwMjEwMjIwMjgyMTQ4Cis6MTAwOEUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTc5OTQ1Cis6MTAwOEYwMDAyN0JEMDAyMDkxNDIwMDYzMjQwM0ZGODAwMDQzMTAyNUEwCis6MTAwOTAwMDBBMTQyMDA2Mzk3ODIwMDQyMzA0OEZGRkYxMTAwMDAyMDlGCis6MTAwOTEwMDA5MzgzMDAyNDhGODQwMDI4MDA0QjEwMjMzMDQ2MDBGRjZGCis6MTAwOTIwMDA5NDgzMDBFNDI0MDJFRkZGMDE2ODI4MkIwMDYyMTgyNDVFCis6MTAwOTMwMDBBNDgzMDBFNDE0QTAwMDAzOEUwMjAwMjAwMTAwNTgyMUNCCis6MTAwOTQwMDAwMDAwMzAyMTI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNDIzCis6MTAwOTUwMDBBRTAyMDAyMDI0MDIwMDAxMTU4MjAwMDUzMTY1RkZGRjcwCis6MTAwOTYwMDAwRTAwMTVFNTAyMDAyMDIxMEEwMDE4NEY5NzgzMDA0MjZGCis6MTAwOTcwMDAwRTAwMTYxNjAyMDAyMDIxOTc4MzAwNDI4RjgyMDA0NDQ5Cis6MTAwOTgwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQ5MzgzMDAyNEQ5Cis6MTAwOTkwMDA4RjgyMDAyODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDE1Cis6MTAwOUEwMDAyN0JEMDAyMDAzRTAwMDA4QTA0MzAwQkQ4RjgyMDAyODdGCis6MTAwOUIwMDA5MDQzMDA4ODkwNDUwMEJEMjQ0OTAwODgzMDYzMDAzRjgzCis6MTAwOUMwMDAyNDYzRkZFMDI0MDIwMDAxMDA2MjM4MDQyQzYzMDAyMDRECis6MTAwOUQwMDAzMEU4MDAxOUEzODUwMDI0MTA2MDAwMTBBRjg5MDAzNEFFCis6MTAwOUUwMDAzQzAyODAwMDM0NDIwMDAyMjQwNTAwMDEyNDA2MDAwMTdDCis6MTAwOUYwMDAxNTAwMDAwODAwRTIxODI0MDAwMDI4MjExNDYwMDAwNUZBCis6MTAwQTAwMDAzMEUyMDAyMDEwNDAwMDA1MjQwNTAwMDE5MTI2MDAwMTdECis6MTAwQTEwMDAzMEM2MDAwMTBBMDAxN0U2MDAwMDAwMDAwM0UwMDAwOEVECis6MTAwQTIwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzNDQ5Cis6MTAwQTMwMDBBRkI0MDAyMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQ0FGCis6MTAwQTQwMDBBRkIyMDAxODhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDk1Cis6MTAwQTUwMDA4Rjg2MDAzODMwQTMzRkZGMDA2MjE4MkI4Q0QzMDAxNDIwCis6MTAwQTYwMDAwMDgwODgyMThDRDIwMDIwMTA2MDAwNzgwMDAwQTAyMTM2Cis6MTAwQTcwMDA5MEMzMDAwRDI0MDJGRjgwMDA0MzEwMjQzMDQyMDBGRjg5Cis6MTAwQTgwMDA1MDQwMDA3MzAyMjAyMDIxMDAwNTEzODIzMDQyMDAwM0YxCis6MTAwQTkwMDA1NDQwMDA2RjAyMjAyMDIxOTRDMzAwMUM4RjgyMDAyODQ0Cis6MTAwQUEwMDA4RTA1MDAyOEE0NDMwMTE0OENDMjAwMTAwMjYyMTgyMzkyCis6MTAwQUIwMDAxNDY1MDAwNzI0MDIwMDFGOEY4MjAwM0MwMDYyMTAyMTkxCis6MTAwQUMwMDAwMjYyMTAyQjEwNDAwMDA4OEY4MzAwMkMyNDAyMDAxOEIzCis6MTAwQUQwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA2RjAzCis6MTAwQUUwMDAyNDA0RkZGRjhGODMwMDJDOEY4NDAwM0M4QzYyMDAxMDU1Cis6MTAwQUYwMDAwMjQ0OTAyMTAwNDQxMDIzQUM2MjAwMTA4RjgyMDAyODMxCis6MTAwQjAwMDBBQzcyMDAyMDhDNDIwMDY4MDA1MjEwMkIxMDQwMDAwOThCCis6MTAwQjEwMDA4RjgzMDAzODAyMjAyMDIxMjQwMjAwMUQwRTAwMTY5NzJBCis6MTAwQjIwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwNUMyNDA0RkZGRjVBCis6MTAwQjMwMDA4RjgzMDAzODhFMDIwMDI0OEM2MzAwMjQxMDQzMDAwNzRBCis6MTAwQjQwMDAwMjIwMjAyMTI0MDIwMDFDMEUwMDE2OTdBMzgyMDA0Q0Q0Cis6MTAwQjUwMDAyNDAzRkZGRjEwNDMwMDUxMjQwNEZGRkY4Rjg0MDAyQzY3Cis6MTAwQjYwMDA4QzgyMDAyNDI0NDIwMDAxQUM4MjAwMjQxMjUzMDAwNDMxCis6MTAwQjcwMDA4RjgyMDAyODhDNDIwMDY4NTY0MjAwMEU4RTAyMDAwMEQwCis6MTAwQjgwMDA4RTAyMDAwMDNDMDMwMDgwMDA0MzEwMjQxNDQwMDAwRDNFCis6MTAwQjkwMDAyNDAyMDAxQTAyMjAyMDIxMEUwMDE2OTdBMzgyMDA0Qzg2Cis6MTAwQkEwMDAyNDAzRkZGRjEwNDMwMDNEMjQwNEZGRkYwQTAwMThFMzY1Cis6MTAwQkIwMDA4RTAyMDAxNDNDMDMwMDgwMDA0MzEwMjQ1MDQwMDAwM0M4Cis6MTAwQkMwMDA4RTAyMDAxNEFDODAwMDIwOEUwMjAwMTQyNDEyRkZGRjVECis6MTAwQkQwMDAxMDUyMDAwNjI0MDIwMDFCMDIyMDIwMjEwRTAwMTY5NzRFCis6MTAwQkUwMDBBMzgyMDA0QzEwNTIwMDJEMjQwNEZGRkY4RTAzMDAwMDRFCis6MTAwQkYwMDAzQzAyMDAwMTAwNjIxMDI0MTA0MDAwMUYzQzAyMDA4MEYzCis6MTAwQzAwMDAwMDYyMTAyNDE0NDAwMDA4MDIyMDIwMjEyNDAyMDAxQTRGCis6MTAwQzEwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDAxRjExCis6MTAwQzIwMDAyNDA0RkZGRjAyMjAyMDIxMDIwMDI4MjEwRTAwMTZCNzE1Cis6MTAwQzMwMDAyNDA2MDAwMTI0MDNGRkZGMjQwNEZGRkYxNDQzMDAwRUQ5Cis6MTAwQzQwMDAyNDE0MDAwMTBBMDAxOTE4OEZCRjAwMjQwMjIwMjAyMTVCCis6MTAwQzUwMDAyNDAyMDAwRDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzJFCis6MTAwQzYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODdDCis6MTAwQzcwMDAwQTAwMTY5N0EzODIwMDRDOEY4MzAwMkMwMjIwMjAyMUFCCis6MTAwQzgwMDAwMjgwMzAyMTk0NjIwMDM2MjQwNTAwMDEyNDQyMDAwMUQ0Cis6MTAwQzkwMDAwRTAwMTdFNkE0NjIwMDM2MDAwMDIwMjE4RkJGMDAyNDVBCis6MTAwQ0EwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEQ2Cis6MTAwQ0IwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODNECis6MTAwQ0MwMDA4RjgzMDAyODI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQzJFCis6MTAwQ0QwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNDI2Cis6MTAwQ0UwMDA5MDYyMDA2MzhGOTEwMDM0MjQxMkZGRkYzNDQyMDA0MDcxCis6MTAwQ0YwMDA5MjI1MDAwMEEwNjIwMDYzOEUyMjAwMTAwMDgwOTgyMURGCis6MTAwRDAwMDAzMEIwMDAzRjEwNTIwMDA2MDM2MEEwMjEyNDAyMDAwRDA1Cis6MTAwRDEwMDAwRTAwMTY5N0EzODIwMDRDMTA1MjAwNTIyNDA0RkZGRkNECis6MTAwRDIwMDA4RjgzMDAyODhFMjIwMDE4OEM2MzAwN0MxMDQzMDAwN0ZDCis6MTAwRDMwMDAwMjYwMjAyMTI0MDIwMDBFMEUwMDE2OTdBMzgyMDA0Q0IwCis6MTAwRDQwMDAyNDAzRkZGRjEwNDMwMDQ3MjQwNEZGRkYyNDA0MDAyMDc2Cis6MTAwRDUwMDAxMjA0MDAwNDhGODMwMDI4OTA2MjAwNjMzNDQyMDAyMDU0Cis6MTAwRDYwMDBBMDYyMDA2MzhGODUwMDNDMTBBMDAwMUUwMDAwMDAwMDAwCis6MTAwRDcwMDA1NjA0MDAwNDhGODIwMDI4MDI2MDIwMjEwQTAwMTk2MkI0Cis6MTAwRDgwMDAyNDAyMDAwQTk2ODMwMDBBMjQwNEZGRkQ5NDQyMDA2MEI2Cis6MTAwRDkwMDAzMDQyRkZGRjEwNDMwMDM0OEZCRjAwMjQzQzAyMDgwMEE0Cis6MTAwREEwMDA4QzQyMzE4QzAwNDUxMDJCMTQ0MDAwMDYwMjYwMjAyMTNCCis6MTAwREIwMDAwMDAwMjgyMTBFMDAxN0U2MjQwNjAwMDEwQTAwMTk4OTA4Cis6MTAwREMwMDAwMDAwMjAyMTI0MDIwMDJEMEUwMDE2OTdBMzgyMDA0QzYzCis6MTAwREQwMDAyNDAzRkZGRjEwNDMwMDIzMjQwNEZGRkYwQTAwMTk4OUE2Cis6MTAwREUwMDAwMDAwMjAyMTE2MDQwMDA1OEY4NDAwMjg4RTIzMDAxNEEzCis6MTAwREYwMDAyNDAyRkZGRjUwNjIwMDE4MDI2MDIwMjE5NDgyMDA2MEVDCis6MTAwRTAwMDAyNDQyMDAwMUE0ODIwMDYwOTQ4MjAwNjAzQzAzMDgwMDM4Cis6MTAwRTEwMDA4QzYzMzE4ODMwNDI3RkZGNTQ0MzAwMEYwMjYwMjAyMUYxCis6MTAwRTIwMDA5NDgyMDA2MDI0MDM4MDAwMDA0MzEwMjRBNDgyMDA2MEE4Cis6MTAwRTMwMDA5MDgyMDA2MDkwODMwMDYwMzA0MjAwRkYwMDAyMTFDMjg3Cis6MTAwRTQwMDAwMDAyMTAyNzAwMDIxMUMwMzA2MzAwN0YwMDYyMTgyNUU1Cis6MTAwRTUwMDBBMDgzMDA2MDAyNjAyMDIxMEUwMDE3OTkyNDA1MDAwMTg0Cis6MTAwRTYwMDAwMDAwMjAyMThGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzBFCis6MTAwRTcwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMUM1Cis6MTAwRTgwMDAwM0UwMDAwODI3QkQwMDI4OEY4MzAwMjgyN0JERkZFODY2Cis6MTAwRTkwMDBBRkIwMDAxMEFGQkYwMDE0OTA2MjAwNjM4Rjg3MDAzNEMyCis6MTAwRUEwMDAwMDgwODAyMTM0NDIwMDQwOENFNjAwMTBBMDYyMDA2Mzg0Cis6MTAwRUIwMDAzQzAzMDgwMDhDNjMzMUIwMzBDMjNGRkYwMDQzMTAyQjZECis6MTAwRUMwMDAxMDQwMDA0RThGODUwMDM4MjQwMkZGODA5MEEzMDAwRDUzCis6MTAwRUQwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNDkwMjAwMjAyMTBFCis6MTAwRUUwMDAwMDA2MTM4MjMwNDgwMDAzMjQwMjAwMDI1NTAyMDA0NDI5Cis6MTAwRUYwMDAwMjAwMjAyMTk0QTIwMDFDOEY4NTAwMjgyNDAzMDAyM0Q3Cis6MTAwRjAwMDBBNEEyMDExNDhDRTYwMDAwMDAwNjE2MDIzMDQyMDAzRjQ1Cis6MTAwRjEwMDAxMDQzMDAxMDNDMDMwMDgzOENFMzAwMTg4Q0EyMDA3QzdCCis6MTAwRjIwMDAxMDYyMDAwNjI0MDIwMDBFMEUwMDE2OTdBMzgyMDA0Q0U5Cis6MTAwRjMwMDAyNDAzRkZGRjEwNDMwMDM4MjQwNEZGRkY4RjgzMDAyOEExCis6MTAwRjQwMDA5MDYyMDA2MzM0NDIwMDIwQTA2MjAwNjMwQTAwMTlDRTYwCis6MTAwRjUwMDA4RjgzMDAyQzAwQzMxMDI0MTQ0MzAwMDc4RjgzMDAyQ0MwCis6MTAwRjYwMDA5MEEyMDA2MjMwNDIwMDBGMzQ0MjAwMjBBMEEyMDA2MjMyCis6MTAwRjcwMDBBMzg4MDA0MDhGODMwMDJDOTA2MjAwMEQzMDQyMDA3RkQ4Cis6MTAwRjgwMDBBMDYyMDAwRDhGODMwMDNDMTA2MDAwMTgwMjAwMjAyMTM5Cis6MTAwRjkwMDA4Rjg0MDAzODhDODIwMDEwMDA0MzEwMkIxMDQwMDAwOTExCis6MTAwRkEwMDAyNDAyMDAxODAyMDAyMDIxMEUwMDE2OTdBMzgyMDA0Qzk0Cis6MTAwRkIwMDAyNDAzRkZGRjEwNDMwMDE4MjQwNEZGRkYwQTAwMTlGNjYyCis6MTAwRkMwMDAwMDAwMjAyMThDODIwMDEwMjQwNTAwMDEwMjAwMjAyMTU1Cis6MTAwRkQwMDAwMDQzMTAyMzhGODMwMDJDMjQwNjAwMDEwRTAwMTdFNjI3Cis6MTAwRkUwMDBBQzYyMDAxMDBBMDAxOUY2MDAwMDIwMjEwRTAwMTc5OUNCCis6MTAwRkYwMDAyNDA1MDAwMTBBMDAxOUY2MDAwMDIwMjEwMjAwMjAyMTJBCis6MTAxMDAwMDAyNDAyMDAwRDhGQkYwMDE0OEZCMDAwMTAyN0JEMDAxODAwCis6MTAxMDEwMDAwQTAwMTY5N0EzODIwMDRDOEZCRjAwMTQ4RkIwMDAxMEY3Cis6MTAxMDIwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMTgyN0JERkZEODZECis6MTAxMDMwMDBBRkIwMDAxMDhGOTAwMDM0QUZCMzAwMUNBRkJGMDAyMEUyCis6MTAxMDQwMDBBRkIyMDAxOEFGQjEwMDE0OEUxMjAwMTAzQzAzMDgwMEJDCis6MTAxMDUwMDA4QzYzMzFCMDMyNDIzRkZGMDA0MzEwMkIxMDQwMDA3Q0M0Cis6MTAxMDYwMDAwMDgwOTgyMThGODUwMDM4MjQwMkZGODA5MEEzMDAwRDE2Cis6MTAxMDcwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNzYwMjYwMjAyMURGCis6MTAxMDgwMDAwMDEyMTM4MjMwNDIwMDAzMjQwMzAwMDE1NDQzMDA3MTE0Cis6MTAxMDkwMDAwMjYwMjAyMTkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwMzVECis6MTAxMEEwMDA4RjgyMDAzQzBBMDAxQTI2MjQwMjAwMjQ1MDQwMDAwM0NDCis6MTAxMEIwMDA4RTAzMDAwQzBBMDAxQTI2MjQwMjAwMjc4Q0EyMDAyMEFFCis6MTAxMEMwMDAxNDYyMDAwNTI0MDIwMDIwOEUwMzAwMDg4Q0EyMDAyNDc0Cis6MTAxMEQwMDAxMDYyMDAwODI0MDIwMDIwMEUwMDE2OTdBMzgyMDA0QzI0Cis6MTAxMEUwMDAyNDAzRkZGRjEwNDMwMDZBMjQwNEZGRkYwQTAwMUE1MTgzCis6MTAxMEYwMDA4Rjg0MDAyQzhFMDIwMDE0MjQxMUZGRkYxNDUxMDAwMzcyCis6MTAxMTAwMDA4Rjg3MDAyODBBMDAxQTRDMjQwMjAwMjU4RTAzMDAxODNECis6MTAxMTEwMDA4Q0UyMDA3QzE0NjIwMDE2MjQwMjAwMEU4RTAzMDAyNDcwCis6MTAxMTIwMDA4Q0EyMDAyODE0NjIwMDEyMjQwMjAwMjE4RTA2MDAyOERFCis6MTAxMTMwMDA4Q0EyMDAyQzE0QzIwMDBFMjQwMjAwMUY4RTAzMDAyQzZGCis6MTAxMTQwMDAxMDYwMDAwQjI0MDIwMDIzOENFMjAwNjgwMDQzMTAyQjg3Cis6MTAxMTUwMDAxNDQwMDAwNzI0MDIwMDI2OENBMjAwMTQwMDY2MTgyMTA3Cis6MTAxMTYwMDAwMDQzMTAyQjUwNDAwMDA3OEY4NDAwMkMyNDAyMDAyMkUzCis6MTAxMTcwMDAwRTAwMTY5N0EzODIwMDRDMTA1MTAwNDUyNDA0RkZGRjc3Cis6MTAxMTgwMDA4Rjg0MDAyQzI0MDNGRkY3OTA4MjAwMEQwMDQzMTAyNDZECis6MTAxMTkwMDBBMDgyMDAwRDhGODYwMDI4M0MwMzA4MDA4QzYzMzFBQ0QwCis6MTAxMUEwMDA4RjgyMDA1MDk0QzQwMEUwOEY4NTAwMkMwMDQzMTAyMUYyCis6MTAxMUIwMDAzMDg0N0ZGRjAwMDQyMDQwMDA0NDEwMjEzMDQzMDA3RjMyCis6MTAxMUMwMDAwMzQzMjAyMTNDMDMwMDBFMDA4MzIwMjEyNDAzRkY4MEUxCis6MTAxMUQwMDAwMDQzMTAyNEFGNDIwMDJDQTQ5MjAwMDA4Q0EyMDAyOEVGCis6MTAxMUUwMDAyNDQyMDAwMUFDQTIwMDI4OENBMjAwMkM4RTAzMDAyQzBCCis6MTAxMUYwMDAwMDQzMTAyMUFDQTIwMDJDOEUwMjAwMkNBQ0EyMDAzMEM3Cis6MTAxMjAwMDA4RTAyMDAxNEFDQTIwMDM0OTRBMjAwM0EyNDQyMDAwMUUxCis6MTAxMjEwMDBBNEEyMDAzQTk0QzYwMEUwM0MwMjA4MDA4QzQyMzFCMDFGCis6MTAxMjIwMDAyNEM0MDAwMTMwODM3RkZGMTQ2MjAwMTMwMDgwMzAyMTRBCis6MTAxMjMwMDAyNDAyODAwMDAwODIzMDI0MzBDMkZGRkYwMDAyMTNDMjZCCis6MTAxMjQwMDAzMDQyMDBGRjAwMDIxMDI3MEEwMDFBOEUwMDAyMzNDMDRECis6MTAxMjUwMDAwMjYwMjAyMTI0MDIwMDBEOEZCRjAwMjA4RkIzMDAxQ0VDCis6MTAxMjYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODc2Cis6MTAxMjcwMDAwQTAwMTY5N0EzODIwMDRDOEY4MjAwMjgwMjYwMjAyMTZBCis6MTAxMjgwMDAyNDA1MDAwMTBFMDAxNzk5QTQ0NjAwRTAwMDAwMjAyMTZCCis6MTAxMjkwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEQ1Cis6MTAxMkEwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODQ3Cis6MTAxMkIwMDAyN0JERkZFMEFGQjEwMDE0OEY5MTAwMzRBRkIwMDAxMDM0Cis6MTAxMkMwMDBBRkJGMDAxODhFMjYwMDEwM0MwMzA4MDA4QzYzMzFCMEJECis6MTAxMkQwMDAzMEMyM0ZGRjAwNDMxMDJCMTA0MDAwNUUwMDgwODAyMTkxCis6MTAxMkUwMDA4Rjg1MDAzODI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNDU2Cis6MTAxMkYwMDAzMDQyMDBGRjUwNDAwMDU4MDIwMDIwMjE4RjgyMDAzQzA1Cis6MTAxMzAwMDAxMDQwMDAwODAwMDYxMzgyOEY4MjAwMjg5NzYzMDAwQUFECis6MTAxMzEwMDAyNDA0RkZGRDk0NDIwMDYwMzA0MkZGRkYxMDQzMDA1NTVCCis6MTAxMzIwMDAwMDA2MTM4MjMwNDIwMDAzMTQ0MDAwMEUwMDAwMDAwMDRCCis6MTAxMzMwMDA5MjIyMDAwMjEwNDAwMDA1OEUyMzAwMjQ1MDYwMDAxNTA4Cis6MTAxMzQwMDA5MjIzMDAwMzBBMDAxQUM3MDIwMDIwMjE4Q0EyMDAyNDY1Cis6MTAxMzUwMDA1MDYyMDAxMDkyMjMwMDAzMDIwMDIwMjEwQTAwMUFDRkRECis6MTAxMzYwMDAyNDAyMDAwRjkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwOUYyCis6MTAxMzcwMDA5MjIzMDAwMzAyMDAyMDIxMjQwMjAwMTAwRTAwMTY5NzgxCis6MTAxMzgwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwM0EyNDA0RkZGRjE0Cis6MTAxMzkwMDA5MjIzMDAwMzI0MDIwMDAyNTQ2MjAwMEM5MjIyMDAwM0Y0Cis6MTAxM0EwMDA4RjgyMDAzQzU0NDAwMDA5OTIyMjAwMDMwMjAwMjAyMTU5Cis6MTAxM0IwMDAyNDAyMDAyQzBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRjhBCis6MTAxM0MwMDAxMDQzMDAyQzI0MDRGRkZGOTIyMjAwMDMwMjIwMjgyMTU2Cis6MTAxM0QwMDAwMjAwMjAyMTM4NDYwMDEwMkNDNjAwMDEyQzQyMDAwMURBCis6MTAxM0UwMDAwRTAwMTZCNzAwNDYzMDI1MjQxMUZGRkYxMDUxMDAyMUQyCis6MTAxM0YwMDAyNDA0RkZGRjhGODMwMDNDMTA2MDAwMTIwMjAwMjAyMUI0Cis6MTAxNDAwMDAzQzAyMDgwMDhDNDIzMThDMDA0MzEwMkIxNDQwMDAwNjMzCis6MTAxNDEwMDAwMDAwMDAwMDAwMDAyODIxMEUwMDE3RTYyNDA2MDAwMTRECis6MTAxNDIwMDAwQTAwMUIwRDAwMDAyMDIxMjQwMjAwMkQwRTAwMTY5NzNCCis6MTAxNDMwMDBBMzgyMDA0QzEwNTEwMDBGMjQwNEZGRkYwQTAwMUIwRDczCis6MTAxNDQwMDAwMDAwMjAyMTBFMDAxNzk5MjQwNTAwMDEwQTAwMUIwRDQxCis6MTAxNDUwMDAwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMEQ4RkJGMDAxODZGCis6MTAxNDYwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwQTAwMTY5NzFFCis6MTAxNDcwMDBBMzgyMDA0QzhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEYyCis6MTAxNDgwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5MzgzMDA0MDY2Cis6MTAxNDkwMDAyN0JERkZFMDI0MDIwMDAyQUZCMTAwMTRBRkIwMDAxMDdFCis6MTAxNEEwMDAwMDgwODgyMUFGQkYwMDE4MDAwMDgwMjExMDYyMDA4Q0VFCis6MTAxNEIwMDAyNDA0RkZGRDk3ODUwMDQyOEY4MzAwNDQzMEEyRkZGRjg0Cis6MTAxNEMwMDAwMDQzMTAyQjU0NDAwMDdEOEY4NDAwNDgwRTAwMTU1OEI3Cis6MTAxNEQwMDAwMDAwMDAwMDNDMDIwODAwMjQ0Mjc5RjQwMjIwMjAyMTkwCis6MTAxNEUwMDAwMDQwMjgyMTBFMDAxNzFFQUY4MjAwMzQyNDA5RkZGRkEwCis6MTAxNEYwMDAxMDQ5MDA3QjI0MDRGRkZGM0MwODA4MDA4RDA4N0EwNDkzCis6MTAxNTAwMDAzQzAyMDgwMDhDNDIzMUIwM0MwMzA4MDA5MDYzNzlGNDNGCis6MTAxNTEwMDAzMTA0M0ZGRjAwODIxMDJCMTA0MDAwMUIzMDY3MDAzRjVBCis6MTAxNTIwMDAzQzAyMDgwMDhDNDIzMUE4OEY4MzAwNTAwMDA0MjE4MEM3Cis6MTAxNTMwMDAwMDYyMTgyMTAwNjQxODIxMzA2MjAwN0YwMzQyMjgyMUQ0Cis6MTAxNTQwMDAzQzAyMDAwQzAwQTIyODIxM0MwMjAwODAzNDQyMDAwMTMxCis6MTAxNTUwMDAzMDY2MDA3ODAwQzIzMDI1MjQwMkZGODAwMDYyMTAyNDJCCis6MTAxNTYwMDBBRjQyMDAyODMwNjQwMDA3QUY0MjA4MDQ4RjgyMDAyODkxCis6MTAxNTcwMDAwMzQ0MjAyMTI0ODQwOTQwQUY0NjA4MTRBRjg1MDAyQzgxCis6MTAxNTgwMDBBRjg0MDAzOEFDNDMwMTE4OTM4MzAwNDAyNDAyMDAwMzY5Cis6MTAxNTkwMDAxNDYyMDAzQjI0MDIwMDAxMjQwMjAwMjYxMEUyMDAzREY4Cis6MTAxNUEwMDAyOEUyMDAyNzEwNDAwMDEzMjQwMjAwMzIyNDAyMDAyMjA3Cis6MTAxNUIwMDAxMEUyMDAzODI4RTIwMDIzMTA0MDAwMDgyNDAyMDAyNDMyCis6MTAxNUMwMDAyNDAyMDAyMDEwRTIwMDI0MjQwMjAwMjExMEUyMDAxRTY4Cis6MTAxNUQwMDAwMjIwMjAyMTBBMDAxQjhDMjQwMjAwMEIxMEUyMDAyREE3Cis6MTAxNUUwMDAyNDAyMDAyNTEwRTIwMDEwMDIyMDIwMjEwQTAwMUI4QzlBCis6MTAxNUYwMDAyNDAyMDAwQjEwRTIwMDFBMjhFMjAwMzMxMDQwMDAwNjFCCis6MTAxNjAwMDAyNDAyMDAzRjI0MDIwMDMxMTBFMjAwMEIwMjIwMjAyMUJFCis6MTAxNjEwMDAwQTAwMUI4QzI0MDIwMDBCMTBFMjAwMTEwMjIwMjAyMTgyCis6MTAxNjIwMDAwQTAwMUI4QzI0MDIwMDBCMEUwMDE4NzkwMjIwMjAyMUQ2Cis6MTAxNjMwMDAwQTAwMUJBNzAwNDA4MDIxMEUwMDE5RkIwMjIwMjAyMTc4Cis6MTAxNjQwMDAwQTAwMUJBNzAwNDA4MDIxMEUwMDFBOUMwMjIwMjAyMUM2Cis6MTAxNjUwMDAwQTAwMUJBNzAwNDA4MDIxMTUwOTAwMEUwMDAwMDAwMEIxCis6MTAxNjYwMDAwRTAwMTkyMDAyMjAyMDIxMEEwMDFCQTcwMDQwODAyMTIzCis6MTAxNjcwMDAwRTAwMTY5N0EzODIwMDRDMEEwMDFCQTcwMDQwODAyMTkxCis6MTAxNjgwMDAxNDYyMDAxNzAyMDAyMDIxMjQwMjAwMjMxNEUyMDAwNTQ2Cis6MTAxNjkwMDAyNDAyMDAwQjBFMDAxOTkyMDIyMDIwMjEwQTAwMUJBNzMxCis6MTAxNkEwMDAwMDQwODAyMTAyMjAyMDIxQTM4MjAwNEMwRTAwMTY5N0NBCis6MTAxNkIwMDAyNDEwRkZGRjBBMDAxQkE4MDIwMDIwMjEzMEE1MDBGRjE0Cis6MTAxNkMwMDAwRTAwMTU5NTI0MDYwMDAxOTc4MzAwNDI4RjgyMDA0NDg2Cis6MTAxNkQwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQwMjAwMjAyMTczCis6MTAxNkUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTQwCis6MTAxNkYwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEM0Cis6MTAxNzAwMDBBRkJGMDAxOEFGQjAwMDEwOEY0NjAxMjgzQzAzMDgwMDlGCis6MTAxNzEwMDA4QzYzMzFBMDI0MDJGRjgwQUY4NjAwNTAwMEMzMTgyMUUzCis6MTAxNzIwMDAzMDY1MDA3RjAzNDUyODIxMDA2MjE4MjQzQzAyMDAwQTJFCis6MTAxNzMwMDBBRjQzMDAyNDAwQTIyODIxOTBBMjAwNjIwMDgwODgyMUVCCis6MTAxNzQwMDBBRjg1MDAyODMwNDIwMEZGMDAwMjExMDJBMzgyMDA0MDUyCis6MTAxNzUwMDA5MEEyMDBCQzMwNDIwMDAyMTQ0MDAwMDIyNDAzMDAzNDc2Cis6MTAxNzYwMDAyNDAzMDAzMDhGODIwMDI4QTM4MzAwMzA5MzgzMDA0MDNECis6MTAxNzcwMDA4QzQyMDBDMEEzODAwMDRDQUY4MjAwNDQyNDAyMDAwNENECis6MTAxNzgwMDAxMDYyMDAzMDhGODQwMDQ0OEUyNDAwMDQ1MDgwMDAyREFECis6MTAxNzkwMDA4Rjg0MDA0NDhFMjIwMDEwMzA4M0ZGRkZBNzg0MDA0MjE0Cis6MTAxN0EwMDAxMDYwMDAxRkFGODIwMDQ4OEY4MzAwMjgyNDA1RkY4MDRGCis6MTAxN0IwMDAwMjIwMjAyMTkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRjJBCis6MTAxN0MwMDAxNDQwMDAwRDAwMDAwMDAwMEUwMDFCMTM5NzkwMDA0MjEzCis6MTAxN0QwMDAxMDQwMDAxMDAwNDAxODIxMjQwMkZGRkQ1NDYyMDAxMTQ3Cis6MTAxN0UwMDA4RTIzMDAyMDAyMDAyODIxMEUwMDE1MzYwMjIwMjAyMTIxCis6MTAxN0YwMDAwQTAwMUJGOThFMjMwMDIwOTA2MjAwNjMwMEEyMTAyNENGCis6MTAxODAwMDAzMDQyMDBGRjEwNDAwMDAzMDIyMDIwMjEwRTAwMTg1QjMwCis6MTAxODEwMDAwMDAwMDAwMDk3ODIwMDQyMTQ0MEZGRTQ4RjgzMDAyOEZDCis6MTAxODIwMDA4RTIzMDAyMDMwNjIwMDA0MTA0MDAwMDY4Rjg0MDA0NEE0Cis6MTAxODMwMDAyNDAyRkZGQjAwNjIxMDI0MEUwMDE1NEFBRTIyMDAyMDk1Cis6MTAxODQwMDA4Rjg0MDA0NDhGODMwMDI4OEZCRjAwMTg4RkIxMDAxNDRECis6MTAxODUwMDA4RkIwMDAxMDI0MDIwMDAxMjdCRDAwMjAwM0UwMDAwODIzCis6MTAxODYwMDBBQzY0MDBDMDMwQTUwMEZGMjQwMzAwMDEyNEE5MDAwMURFCis6MTAxODcwMDAwMDY5MTAyQjEwNDAwMDBDMDAwMDQwMjEyNDBBMDAwMUQ4Cis6MTAxODgwMDAwMEEzMTAyMzAwNEEzODA0MjQ2MzAwMDEzMDgyMDAwMUMxCis6MTAxODkwMDAwMDY5MzAyQjEwNDAwMDAyMDAwNDIwNDIwMTA3NDAyNTVGCis6MTAxOEEwMDA1NEMwRkZGODAwQTMxMDIzMDNFMDAwMDgwMTAwMTAyMTNBCis6MTAxOEIwMDAyN0JERkZFMDNDMDIxRURDQUZCMjAwMThBRkIxMDAxNDQwCis6MTAxOEMwMDBBRkJGMDAxQ0FGQjAwMDEwMzQ1MjZGNDEwMDAwODgyMTQwCis6MTAxOEQwMDAyNDA1MDAwODBFMDAxQzA5MDIyMDIwMjEwMDExODA4MDMwCis6MTAxOEUwMDAzQzA3MDgwMDI0RTc3NUY0MDAwMjE2MDAwMjA3MTgyMURGCis6MTAxOEYwMDBBQzYyMDAwMDAwMDAyODIxMjRBMjAwMDEzMDQ1RkZGRjU3Cis6MTAxOTAwMDA4QzYyMDAwMDJDQTYwMDA4MDQ0MTAwMDIwMDAyMjA0MDY2Cis6MTAxOTEwMDAwMDkyMjAyNjE0QzBGRkY4QUM2NDAwMDAwMjA3ODAyMTZBCis6MTAxOTIwMDA4RTA0MDAwMDBFMDAxQzA5MjQwNTAwMjAyNjIzMDAwMTVGCis6MTAxOTMwMDAzMDcxRkZGRjJFMjMwMTAwMTQ2MEZGRTVBRTAyMDAwMEFFCis6MTAxOTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMxCis6MTAxOTUwMDAwM0UwMDAwODI3QkQwMDIwM0MwMjA4MDAyNDQyNkVCOEM2Cis6MTAxOTYwMDAzQzAxMDgwMEFDMjI3NUU4M0MwMjA4MDAyNDQyNTQzMEQ3Cis6MTAxOTcwMDAzQzAxMDgwMEFDMjI3NUVDMjQwMjAwMDYzQzAxMDgwMDgyCis6MTAxOTgwMDBBMDIyNzVGMDBBMDAxQzFDMDAwMDAwMDAyN0JERkZEODMzCis6MTAxOTkwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCRjAwMjBBRkIxMDAxNDRFCis6MTAxOUEwMDBBRkIwMDAxMDhGNTEwMTQwOEY0ODAxNDgwMDA4OTQwMkU5Cis6MTAxOUIwMDAzMjQzMDBGRjMxMTMwMEZGOEY0MjAxQjgwNDQwRkZGRUE1Cis6MTAxOUMwMDAyNzUwMDE4MEFFMTEwMDAwOEY0MjAxNDRBRTAyMDAwNDk2Cis6MTAxOUQwMDAyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIyNDAyMDAxNDM2Cis6MTAxOUUwMDBBRTEzMDAyNDEwNjIwMDI1Mjg2MjAwMTUxMDQwMDAwODg0Cis6MTAxOUYwMDAyNDAyMDAxNTI0MDIwMDEwMTA2MjAwMzAyNDAyMDAxMjlDCis6MTAxQTAwMDAxMDYyMDAwOThGQkYwMDIwMEEwMDFENDY4RkIzMDAxQzIyCis6MTAxQTEwMDAxMDYyMDA3MDI0MDIwMDIyMTA2MjAwMzc4RkJGMDAyMDg1Cis6MTAxQTIwMDAwQTAwMUQ0NjhGQjMwMDFDM0MwMjA4MDA4QzQyMzFBMDA2Cis6MTAxQTMwMDAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjRBRjQyMDAyNDFGCis6MTAxQTQwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjZCCis6MTAxQTUwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNjYwMDBCQ0YzCis6MTAxQTYwMDBBRjgzMDAyODkwNjIwMDYyMzA0MjAwMEYzNDQyMDAzMEExCis6MTAxQTcwMDBBMDYyMDA2MjBBMDAxRDQ1OEZCRjAwMjAzQzA0NjAwMDg4Cis6MTAxQTgwMDA4QzgzMkMwODNDMDJGMDAzMzQ0MkZGRkYwMDYyMTgyNEQwCis6MTAxQTkwMDBBQzgzMkMwODNDMDIwODAwOEM0MjMxQTA4QzgzMkMwOEJCCis6MTAxQUEwMDAyNDQyMDA3NDAwMDIxMDgyMDAwMjE0ODAwMDYyMTgyNTkzCis6MTAxQUIwMDBBQzgzMkMwODBBMDAxRDQ1OEZCRjAwMjAzQzAyMDgwMEEzCis6MTAxQUMwMDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwMDQzMTAyNDA1Cis6MTAxQUQwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTAzQzAzMDAwQUMzCis6MTAxQUUwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMUM2Cis6MTAxQUYwMDAwQTAwMUQ0NEFGODIwMDI4M0MwMjA4MDA4QzQyMzFBMDNECis6MTAxQjAwMDAyNDA1RkY4MDAyMjIxMDIxMDA0NTEwMjRBRjQyMDAyNDRBCis6MTAxQjEwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjlBCis6MTAxQjIwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjE5MDYyMDA2M0ZGCis6MTAxQjMwMDAwMEEyMTAyNDMwNDIwMEZGMTA0MDAwODVBRjgzMDAyODJGCis6MTAxQjQwMDAyNDYyMDA4ODk0NDMwMDEyM0MwMjA4MDA4QzQyMzFBOEIxCis6MTAxQjUwMDAzMDYzM0ZGRjAwMDMxOTgwMDIyMjEwMjEwMDQzMTAyMTRGCis6MTAxQjYwMDAzMDQzMDA3RjAzNDMyMDIxMDA0NTEwMjQzQzAzMDAwQzM4Cis6MTAxQjcwMDAwMDgzMjAyMUFGNDIwMDI4OTA4MjAwMEQwMEEyMTAyNDkzCis6MTAxQjgwMDAzMDQyMDBGRjEwNDAwMDcyQUY4NDAwMkM5MDgyMDAwREE0Cis6MTAxQjkwMDAzMDQyMDAxMDE0NDAwMDZGOEZCRjAwMjAwRTAwMTY2NjA4Cis6MTAxQkEwMDAwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDZBCis6MTAxQkIwMDBBRTExMDAwMDhGNDIwMTQ0QUUwMjAwMDQyNDAyMDAwMjc0Cis6MTAxQkMwMDBBNjEyMDAwOEEyMDIwMDBCQUUxMzAwMjQwQTAwMUQ0NTU1Cis6MTAxQkQwMDA4RkJGMDAyMDI0MDZGRjgwMDIyNjEwMjRBRjQyMDAyMDgxCis6MTAxQkUwMDAzQzAyMDgwMDhDNDIzMUEwMzEwNDNGRkYwMDA0MjE4MEY4Cis6MTAxQkYwMDAwMjIyMTAyMTAwNDYxMDI0QUY0MjAwMjQzQzAzMDgwMEJBCis6MTAxQzAwMDA4QzYzMzFBODNDMDIwODAwOEM0MjMxQTAzMjI3MDA3RjRGCis6MTAxQzEwMDAwMjIzMTgyMTAyMjIxMDIxMDA2NDE4MjEzMDQyMDA3RjgzCis6MTAxQzIwMDAzMDY0MDA3RjAzNDIyODIxM0MwMjAwMEEwMDY2MTgyNDI5Cis6MTAxQzMwMDAwMEEyMjgyMTAzNDQyMDIxM0MwMjAwMEMwMDgyMjAyMTI0Cis6MTAxQzQwMDBBRjQzMDAyODNDMDIwMDA4MDM0NzE4MjEwMDYyOTAyMTlFCis6MTAxQzUwMDBBRjg1MDAyOEFGODQwMDJDMEUwMDE2NjYwMTAwODAyMTlECis6MTAxQzYwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwMkM4Rjg0MDAyODMxCis6MTAxQzcwMDAyNzQ1MDE4MDkwNDIwMDBEQUNCMTAwMDBBNEIwMDAwNkUxCis6MTAxQzgwMDAwMDAyMTYwMDAwMDIxNjAzMDAwMjEwMjcwMDAyMzdDMkVECis6MTAxQzkwMDAxNEMwMDAxNjI0ODIwMDg4OTQ0MjAwMTIzMjAzM0ZGRkQxCis6MTAxQ0EwMDAzMDQyM0ZGRjE0NDMwMDEyMjQwMjYwODI5MDgzMDA2MzlECis6MTAxQ0IwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkY1MDQwMDAwQ0ZCCis6MTAxQ0MwMDAyNDAyNjA4MjkwODIwMDYyMzA0MjAwMEYzNDQyMDA0MDYxCis6MTAxQ0QwMDBBMDgyMDA2MjI0MDI2MDg0QTRBMjAwMDgyNDAyMDAwREY1Cis6MTAxQ0UwMDBBMEEyMDAwNTBBMDAxRDJGM0MwMjI3MDAyNDAyNjA4MkVBCis6MTAxQ0YwMDBBNEEyMDAwOEEwQTAwMDA1M0MwMjI3MDAwMDA2MUMwMENBCis6MTAxRDAwMDAwMDYyMTgyNTI0MDIwMDAyQTBBMjAwMEJBQ0EzMDAxMDYwCis6MTAxRDEwMDBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjhBQ0EwMDAyQzA3Cis6MTAxRDIwMDA4RTQyMDA0QzhGODQwMDJDQUNBMjAwMTg5MDgzMDAwREQyCis6MTAxRDMwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAwNUMxCis6MTAxRDQwMDA4RkJGMDAyMDkwODIwMDBEMzA0MjAwN0ZBMDgyMDAwREU2Cis6MTAxRDUwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDBBCis6MTAxRDYwMDA4RkIwMDAxMDNDMDIxMDAwMjdCRDAwMjgwM0UwMDAwOERGCis6MDQxRDcwMDBBRjQyMDFCOEM1Cis6MEMxRDc0MDAwODAwMzNGODA4MDAzM0Y4MDgwMDMzNzA1MgorOjEwMUQ4MDAwMDgwMDMzQTgwODAwMzNEQzA4MDAzNDAwMDgwMDM0MDBFMQorOjA4MUQ5MDAwMDgwMDM0MDAwODAwMzJFMEY1Cis6MDgxRDk4MDAwQTAwMDEyMjAwMDAwMDAwMTYKKzoxMDFEQTAwMDAwMDAwMDAwMDAwMDAwMEQ3NDcwNjEzNTJFMzAyRTMwRjAKKzoxMDFEQjAwMDZBMzYwMDAwMDUwMDAwMDEwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDFFMjAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEOTIKKzoxMDFFMzAwMDAwMDAwMDBEM0MwMjA4MDAyNDQyMUI4MDNDMDMwODAwMDcKKzoxMDFFNDAwMDI0NjMyMDE0QUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEQ0QKKzoxMDFFNTAwMDI0NDIwMDA0M0MxRDA4MDAzN0JEMkZGQzAzQTBGMDIxRTQKKzoxMDFFNjAwMDNDMTAwODAwMjYxMDA0ODgzQzFDMDgwMDI3OUMxQjgwOUUKKzoxMDFFNzAwMDBFMDAwMTVBMDAwMDAwMDAwMDAwMDAwRDMwODRGRkZGM0EKKzoxMDFFODAwMDMwODIwMDA3OEY4NTAwMTgxMDQwMDAwMjI0ODMwMDA3NkQKKzoxMDFFOTAwMDMwNjRGRkY4MDA4NTMwMjEzMEM0MUZGRjAzNDQxODIxNEYKKzoxMDFFQTAwMDI0N0I0MDAwQUY4NTAwMUNBRjg0MDAxODAzRTAwMDA4Q0QKKzoxMDFFQjAwMEFGNDQwMDg0MzA4NEZGRkYzMDgyMDAwNzhGODUwMDIwMEMKKzoxMDFFQzAwMDhGODYwMDI4MTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4NEEKKzoxMDFFRDAwMDAwODUyMDIxMDA4NjE4MkIxNDYwMDAwMkFGODUwMDI0QTUKKzoxMDFFRTAwMDAwODYyMDIzMDM0NDI4MjEzNDA2ODAwMEFGODQwMDIwOEMKKzoxMDFFRjAwMEFGNDQwMDgwMDBBNjIwMjEwM0UwMDAwOEFGODQwMDM4MzIKKzoxMDFGMDAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwQjAKKzoxMDFGMTAwMEFGQkYwMDI0QUZCNDAwMjBBRkIxMDAxNDNDMDg2MDA4OEMKKzoxMDFGMjAwMDhEMTQ1MDAwMjQxOEZGN0YzQzFBODAwMDAyOTg5ODI0REEKKzoxMDFGMzAwMDM2NzIzODBDQUQxMjUwMDA4RjUxMDAwODNDMDc2MDFDRkYKKzoxMDFGNDAwMDNDMDg2MDAwMzYzMDAwMDFBRjUwMDAwOEFGODAwMDE4MzgKKzoxMDFGNTAwMEFGNDAwMDgwQUY0MDAwODQ4Q0U2MDAwODhEMEYwODA4NzkKKzoxMDFGNjAwMDNDMDc2MDE2OENFQzAwMDAzMUVFRkZGMDM5Q0EwMDEwMUYKKzoxMDFGNzAwMDNDMERGRkZGMzQwQjgwMDAzQzAzMDA4MDAzNEI0ODIxRTUKKzoxMDFGODAwMDJENDQwMDAxMDE4RDI4MjQzQzAyNTM1MzNDMDEwODAwREMKKzoxMDFGOTAwMEFDMjMwNDIwQUY4OTAwMzhBRjg2MDAyOEFGODQwMDEwM0UKKzoxMDFGQTAwMDI3NUI0MDAwMTRBMjAwMDMzNEUzN0MwMDhDRjkwMDA0OUEKKzoxMDFGQjAwMDAzMjgxODIxOEM3RjAwN0M4QzY1MDA3ODNDMDI4MDAwMEYKKzoxMDFGQzAwMDM0NTIwMDcwQUY4NTAwM0NBRjlGMDA0MDNDMTMwODAwQzYKKzoxMDFGRDAwMDI2NzMxQkM0MDI0MEEwMjE4RTQ4MDAwMDhGNDYwMDAwREIKKzoxMDFGRTAwMDM4QzMwMDAxMzA2NDAwMDExMDgwMDAxN0FGODgwMDM0NEUKKzoxMDFGRjAwMDAyODA0ODIxOEQyRDAwMDAzQzE5MDgwMDhGMzkwNDVDQjcKKzoxMDIwMDAwMDNDMTEwODAwOEUzMTA0NTgwMUE4RjgyMzAzM0Y3ODIxQzEKKzoxMDIwMTAwMDAwMDA0MDIxMDIyODM4MjEwMUZGODAyQjAwRjA3MDIxQjAKKzoxMDIwMjAwMDNDMDEwODAwQUMyRjA0NUMzQzAxMDgwMEFDMkUwNDU4QjUKKzoxMDIwMzAwMDhGNEMwMDAwMzk4QjAwMDEzMTZBMDAwMTE1NDBGRkVEMjMKKzoxMDIwNDAwMDAxQTA0MDIxQUY4RDAwMzQ4RTRFMDAwMDNDMEMwODAwRjIKKzoxMDIwNTAwMDhEOEMwNDVDM0MwQTA4MDA4RDRBMDQ1ODAxQzg2ODIzMzIKKzoxMDIwNjAwMDAxOEQyODIxMDAwMDU4MjEwMEFEMzAyQjAxNEIyMDIxOEIKKzoxMDIwNzAwMDAwODYxMDIxM0MwMTA4MDBBQzI1MDQ1QzNDMDEwODAwRUUKKzoxMDIwODAwMEFDMjIwNDU4OEY0NTAxMDg4RjQ0MDEwMDMwQTkyMDAwN0MKKzoxMDIwOTAwMEFGODUwMDAwQUY4NDAwMEMxMTIwMDAwQTAwQTAzMDIxQTEKKzoxMDIwQTAwMDNDMDcwODAwOENFNzA0MkMyNEVGMDAwMTNDMDEwODAwRTkKKzoxMDIwQjAwMEFDMkYwNDJDM0MxMDQwMDBBRjUwMDEzODBBMDAwMTkwQjYKKzoxMDIwQzAwMDAwMDAwMDAwMzBCMDAyMDAxNjAwMDAxNDI0MTEwRjAwQzAKKzoxMDIwRDAwMDEwOTEwMDEyMjQwNzBEMDAxMDg3MDIzMzMwQjAwMDA2NjMKKzoxMDIwRTAwMDUyMDBGRkY1M0MxMDQwMDA5MzZEMDAwMDI0MEMwMDEwREUKKzoxMDIwRjAwMDMxQTYwMEYwMTBDQzAyNjkyNDBFMDA3MDEwQ0UwMkRENzMKKzoxMDIxMDAwMDhGOEIwMDE0MjU2NzAwMDFBRjg3MDAxNDNDMTA0MDAwM0UKKzoxMDIxMTAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDk3NDgwMTA0MDgKKzoxMDIxMjAwMDExMDBGRkU1M0MxMDQwMDAzMEI4NDAwMDE3MDAwMEEyNEQKKzoxMDIxMzAwMDAwMDAwMDAwOEY1OTAxNzgwNzIwRkZGRThGODcwMDM4Q0MKKzoxMDIxNDAwMDI0MDkwMDA4MjQwNTA4MDA4Q0UzMDAwOEFGNDUwMTc4NDUKKzoxMDIxNTAwMEE3NDkwMTQwQTc0MDAxNDI5NzQyMDEwNDhGODYwMDAwMzEKKzoxMDIxNjAwMDMwNDlGRkZGMzBERjAwMDExM0UwMDJENTAxMjA0MDIxOUMKKzoxMDIxNzAwMDI1MjRGRkZFMjQwQTAwMDJBNzRBMDE0NjMwODhGRkZGRkIKKzoxMDIxODAwMEE3NDQwMTQ4M0MwQjA4MDA4RDZCMDQzQzE1NjAwMkM0NTkKKzoxMDIxOTAwMDhGOEYwMDBDMzBDMzAwMjAxNDYwMDAwMjI0MDQwMDA5NUIKKzoxMDIxQTAwMDI0MDQwMDAxMzBDRDBDMDAyNDBDMDQwMDUxQUMwMDAxQ0IKKzoxMDIxQjAwMDM0ODQwMDA0QTc0NDAxNEEzQzA1MDgwMDhDQTUwNDIwOEYKKzoxMDIxQzAwMDNDMDIwMDQ4M0MxOTAwMDEwMEEyRjgyNTMwRDgwMDAyNkEKKzoxMDIxRDAwMDAzRjkyODI1MTMwMDAwMDQwMDAwMTgyMTNDMDQwMTAwMjUKKzoxMDIxRTAwMDAwQTQyODI1MjQwMzAwMDEzMENBMDAwNDUxNDAwMDA1NDIKKzoxMDIxRjAwMEFGODMwMDA4M0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxMzgKKzoxMDIyMDAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIyMTAwMDAwMDAwMDAwMDAwMDAwMDA4RjgzMDAwODEwNjAwMDIzMTEKKzoxMDIyMjAwMDAwMDAwMDAwOEY0QjEwMDAwNTYxRkZGRTAwMDAwMDAwNjEKKzoxMDIyMzAwMDEwNjAwMDFFMDAwMDAwMDA4RjREMTAwMDNDMDMwMDIwQzUKKzoxMDIyNDAwMDAxQTM2MDI0MTE4MDAwMTk4RjhGMDAwMDMxRUUwMDAyN0QKKzoxMDIyNTAwMDExQzAwMDE2MDAwMDAwMDA5NzUwMTAxNDE2MDAwMDEzNjMKKzoxMDIyNjAwMDAwMDAwMDAwOTc0NTEwMDgzMEJGRkZGRjI3RjgwMDA2NjgKKzoxMDIyNzAwMDAwMThDODgyMDAxOTMwODAwMEM3MjgyMTMzMTEwMDAxREUKKzoxMDIyODAwMDMzMDMwMDAzMTIyMDAzMjA4Q0EyMDAwMDAwMDAwMDBEODUKKzoxMDIyOTAwMDAwQzdGODIxQUZFMjAwMDAzQzE5MDgwMDhGMzkwNDMwNzQKKzoxMDIyQTAwMDI3MjYwMDAxM0MwMTA4MDBBQzI2MDQzMDhGNkEwMDAwOUMKKzoxMDIyQjAwMDM0MDVGRkZGQUY4QTAwMDQ4Q0UyMDAwMDEwNDUwMjlBNEIKKzoxMDIyQzAwMDAwMDAyMDIxOENFNTAwMDAzMEJGMDEwMDEzRTAwMjdFRjkKKzoxMDIyRDAwMDAxMDAyMDIxM0MwNzA4MDA4Q0U3MDQ3NDNDMTAwODAwMzIKKzoxMDIyRTAwMDhFMTAwNDRDMDBFODU4MjEzQzE4MDgwMDhGMTgwNDcwMjgKKzoxMDIyRjAwMDAxNjg4ODJCM0MwODA4MDA4RDA4MDQ0ODAwMDA3ODIxRkMKKzoxMDIzMDAwMDAyMDQ2MDIxMDMwRjE4MjEwMTg0NzAyQjAxMEY2ODIxNDIKKzoxMDIzMTAwMDAwNzE1MDIxMDFBRTEwMjEzQzAxMDgwMEFDMkMwNDRDOEUKKzoxMDIzMjAwMDNDMDEwODAwQUMyMjA0NDgzQzAxMDgwMEFDMkIwNDc0QkEKKzoxMDIzMzAwMDNDMDEwODAwQUMyQTA0NzA4RjhEMDAxODAxMjAzMDIxNjgKKzoxMDIzNDAwMDMxMjkwMDA3MjVBRTAwMDgzMUMyMUZGRjAzNDI2MDIxN0EKKzoxMDIzNTAwMEFGOEQwMDFDQUY4MjAwMTgyNTlCNDAwMEFGNDIwMDg0NjcKKzoxMDIzNjAwMDExMjAwMDAzOEY5MDAwMjAyNEM4MDAwNzMxMDZGRkY4RDkKKzoxMDIzNzAwMDhGODQwMDI4MDBEMDI4MjEwMEE0NzgyQjE1RTAwMDAyQ0IKKzoxMDIzODAwMEFGOTAwMDI0MDBBNDI4MjMwMzQ1MjAyMTM0MDM4MDAwQkIKKzoxMDIzOTAwMDAwODMxMDIxM0MwNjEwMDBBRjg1MDAyMEFGODIwMDM4N0EKKzoxMDIzQTAwMEFGNDUwMDgwQUY0NjAxNzg4RjhCMDAxNDI1NjcwMDAxOTAKKzoxMDIzQjAwMDBBMDAwMUREQUY4NzAwMTQ4RjYyMDAwODhGNjcwMDAwRkMKKzoxMDIzQzAwMDI0MTEwMDMwMDAwN0M2MDIzMzAzMDBGMDEwNzEwMEEyOTAKKzoxMDIzRDAwMDI0MTkwMDQwMTQ3OUZGNEI4RjhCMDAxNDhGNEEwMTc4MjkKKzoxMDIzRTAwMDA1NDBGRkZFMzBBNzAyMDAxNEUwMDAwMzAwMDUxMjgyNDIKKzoxMDIzRjAwMDAwMDAwMDBEMDAwNTEyODIzMDUwMDAwMzAwMTA0OTAwNUIKKzoxMDI0MDAwMDAxMzA3MDIxMDAwRTY4ODAwMUIwNjAyMTAwMEM1ODgwRkUKKzoxMDI0MTAwMDAxNzM4MDIxOEUwODAwMDAxNTAwMDAwMjAwMDAwMDAwRkEKKzoxMDI0MjAwMDAwMDAwMDBEOEY2RjAwMDQwNUUyMDJCMTkyMDMwMDA2NjgKKzoxMDI0MzAwMDkyMDcwMDA1OTIwRjAwMDQzQzAyMDAwMTAwMDcyODgwNkIKKzoxMDI0NDAwMDAwQjA2MDIxOEQ4OTAwMTgyNzcxMDAwODI1RUUwMDA1NzUKKzoxMDI0NTAwMDAxMjI2ODIxMDAwRTMwODJBRDhEMDAxODAyMjAyMDIxNUIKKzoxMDI0NjAwMDBFMDAwNTgwMjYwNTAwMTQ5MjBCMDAwNjhGN0YwMDA0RTUKKzoxMDI0NzAwMDNDMDg3RkZGMDAwQjIwODAwMDkxMzAyMThDQzMwMDA0QkEKKzoxMDI0ODAwMDM1MEFGRkZGMDNFQUM4MjQwMDc5QzAyMUFDRDgwMDA0NTQKKzoxMDI0OTAwMDkyMDcwMDA1OTIwOTAwMDQ5NjBEMDAwODAwMDcyODgwQTUKKzoxMDI0QTAwMDAwQjFGODIxOEZFRjAwMDA5NzQyMDEwNDNDMDdGRkZGQzUKKzoxMDI0QjAwMDAxRTc1MDI0MzA0RUZGRkYwMUM5NjAyMTAxOEQ1ODIzRjAKKzoxMDI0QzAwMDMxNjhGRkZGMDE0ODIwMjVBRkU0MDAwMDkyMDMwMDA3QjgKKzoxMDI0RDAwMDI0MTkwMDAxMTA3OTAyNjkyNDA2MDAwMzEwNjYwMjc5QUMKKzoxMDI0RTAwMDAwMDAwMDAwOEUxOTAwMTAyNDFGMDAwQUE3NUYwMTQwQTEKKzoxMDI0RjAwMEE3NTkwMTQyOTIwMzAwMDQ4Rjg2MDAwMDI0MDcwMDAxQkYKKzoxMDI1MDAwMEE3NDMwMTQ0QTc0MDAxNDY5NzU4MDEwNDMwRDEwMDAyNzcKKzoxMDI1MTAwMDNDMDUwMDQxQTc1ODAxNDgwMDAwMTgyMUE3NDcwMTRBN0YKKzoxMDI1MjAwMDEyMjAwMDAzMzBDQTAwMDQzQzA1MDE0MTI0MDMwMDAxQ0QKKzoxMDI1MzAwMDUxNDAwMDA1QUY4MzAwMDgzQzA4MDAxMDAwQTgyODI1ODIKKzoxMDI1NDAwMDI0MDMwMDAxQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwMjUKKzoxMDI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGOEIwMDA4NTkKKzoxMDI1NjAwMDExNjAwMDA0MDAwMDAwMDA4RjQ0MTAwMDA0ODFGRkZFOTEKKzoxMDI1NzAwMDAwMDAwMDAwOEY2QTAwMDA5MjA3MDAwNDNDMDUwODAwN0MKKzoxMDI1ODAwMDhDQTUwNDQ0QUY4QTAwMDQ5NzVGMDEwNDNDMEYwODAwNDcKKzoxMDI1OTAwMDhERUYwNDQwMzBFMzAwRkYzM0Y5RkZGRjAwNzlDMDIxRTUKKzoxMDI1QTAwMDAwQjg2ODIxMDAwMDEwMjEyNEU2MDAwQTMwQzhGRkZGQUYKKzoxMDI1QjAwMDAxQjg0ODJCMDFFMjcwMjEwMUM5NjAyMTMxMTAwMDA3RTgKKzoxMDI1QzAwMDNDMDEwODAwQUMyRDA0NDQzQzAxMDgwMEFDMkMwNDQwNDQKKzoxMDI1RDAwMDEyMDAwMDAzOEY4RDAwMTgyNTBCMDAwNzMxNjhGRkY4RUIKKzoxMDI1RTAwMDAxMEQ3MDIxMzFDQzFGRkZBRjhEMDAxQ0FGOEMwMDE4ODYKKzoxMDI1RjAwMEFGNEMwMDg0OTc0NDAxMDQwMzRDODAyMTMwODRGRkZGREEKKzoxMDI2MDAwMDMwODgwMDA3MTEwMDAwMDMyNjFCNDAwMDI0ODkwMDA3QzIKKzoxMDI2MTAwMDMxMjRGRkY4OEY4MjAwMjA4Rjg1MDAyODAwODIyMDIxM0UKKzoxMDI2MjAwMDAwODU3ODJCMTVFMDAwMDJBRjgyMDAyNDAwODUyMDIzNkUKKzoxMDI2MzAwMDAzNDQ4ODIxMzQwNTgwMDAwMjI1MTAyMTNDMDYxMDAwNDcKKzoxMDI2NDAwMEFGODQwMDIwQUY4MjAwMzhBRjQ0MDA4MEFGNDYwMTc4RUQKKzoxMDI2NTAwMDBBMDAwMjg1OEY4QjAwMTQ4RjVGMDE3ODA3RTBGRkZFNzAKKzoxMDI2NjAwMDMwQUEwMjAwMTU0MDAwMDMwMDA1NDI4MjAwMDAwMDBENjAKKzoxMDI2NzAwMDAwMDU0MjgyMzEwMjAwMDMwMDAyNzEwMDAxQzI2ODIxOUMKKzoxMDI2ODAwMDAwMEQ2MDgwMDE4MjQ4MjEwMDA5Mjg4MDAwQjM4MDIxNkMKKzoxMDI2OTAwMDhFMEIwMDAwMTE2MDAwMDIwMDAwMDAwMDAwMDAwMDBEMjEKKzoxMDI2QTAwMDhGNkYwMDBDMDVFMDAxRjM4Rjg3MDAzODI0MTkwMDAxQkIKKzoxMDI2QjAwMEFFMTkwMDAwOENFMzAwMDhBMjAwMDAwNzhGNzgwMDA0MjgKKzoxMDI2QzAwMDAwMTgxQzAyMzA2NjAwRkYyNEQxMDAwNTAwMTEzMDgyODIKKzoxMDI2RDAwMDJDQzQwMDQxMTQ4MDAwMDJBMjAzMDAwNDAwMDAwMDBEN0QKKzoxMDI2RTAwMDhGNkIwMDA0M0MwRUZGRkYwMEUwMjgyMTMxNjRGRkZGRTgKKzoxMDI2RjAwMDI0OEYwMDBCMDAwRjQwODIwMDA4MTA4MDAwNDc0ODIxMDMKKzoxMDI3MDAwMDhEMkQwMDAwMjYwNDAwMTRBNjBCMDAwODAxQUU2MDI0RTUKKzoxMDI3MTAwMDBFMDAwNTgwQUQyQzAwMDA4RjVGMDEwODNDMEExMDAwMDAKKzoxMDI3MjAwMDAzRUEzODI0MTBFMDAxQTMwMDAwMDAwMDk3NDYwMTA0RUEKKzoxMDI3MzAwMDkyMDMwMDA3MjREMUZGRUMzNDY1MDAwMjMyMjRGRkZGMkUKKzoxMDI3NDAwMEEyMDUwMDA3OTYwNjAwMDgyQ0M3MDAxMzU0RTAwMDA1RjgKKzoxMDI3NTAwMDkyMDMwMDA3OTIwQTAwMDczNTVGMDAwMUEyMUYwMDA3REQKKzoxMDI3NjAwMDkyMDMwMDA3MjQwQjAwMDExMDZCMDFCQTI0MDkwMDAzMzcKKzoxMDI3NzAwMDEwNjkwMUNEOEY4ODAwMzgzMENGRkZGRjI1RTQwMDAyQkIKKzoxMDI3ODAwMDAwMDRDODgzMzMzRjAwRkYwMDFGMjg4MEEyMTkwMDA1MDIKKzoxMDI3OTAwMDAwQTg1ODIxOEQ3ODAwMDA5NzUxMDEwNDNDMDNGRkZGRTkKKzoxMDI3QTAwMDAzMDM2MDI0MzIyMkZGRkYwMDRGNzAyMzI1Q0RGRkZFN0MKKzoxMDI3QjAwMDAxOEQ0ODI1QUQ2OTAwMDA5MjA2MDAwNTNDMDJGRkY2MzgKKzoxMDI3QzAwMDM0NEVGRkZGMzBDQTAwRkYwMDBBMzg4MDAwRjAyMDIxOUQKKzoxMDI3RDAwMDkwOTkwMDE0M0MxRkZGN0YzN0U3RkZGRjMzMjMwMDBGNjIKKzoxMDI3RTAwMDAwNjY3ODIxMzFGODAwRkYwMDE4Mjg4MDAwQjA4ODIxQTkKKzoxMDI3RjAwMDhFMkQwMDIwMDBBODYwMjFBMjBGMDAwNjAxQUU0ODI0MDMKKzoxMDI4MDAwMEFFMEQwMDBDQUQ4OTAwMEM5MjBCMDAwNjhFMDQwMDBDN0UKKzoxMDI4MTAwMDAxMjdGODI0MDAwQjUwODAwMTUwQzgyMTk3MjYwMDI2N0MKKzoxMDI4MjAwMDAxNDhDMDIxMDA4NzQwMjRBRjI2MDAyNEFFMDgwMDBDRDgKKzoxMDI4MzAwMEFGM0YwMDIwQUYwNjAwMTA4Rjg2MDAwMDI0MEMwMDEwNzAKKzoxMDI4NDAwMDI0MDkwMDAyQTc0QzAxNDBBNzQwMDE0MkE3NDAwMTQ0Q0YKKzoxMDI4NTAwMEE3NDkwMTQ2OTc0QjAxMDQyNDA3MDAwMTMwQzgwMDAyMzQKKzoxMDI4NjAwMDI1NkFGRkZFQTc0QTAxNDgzQzA1MDAwOUE3NDcwMTRBMUYKKzoxMDI4NzAwMDExMDAwMDAzMDAwMDE4MjEzQzA1MDEwOTI0MDMwMDAxOTgKKzoxMDI4ODAwMDMwQ0QwMDA0NTFBMDAwMDVBRjgzMDAwODNDMDYwMDEwQzUKKzoxMDI4OTAwMDAwQTYyODI1MjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwREYKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI4QjAwMDkyMTgwMDA0MjcxMTAwMDIzMjJGMDAwNzAwMEYxMDIzODYKKzoxMDI4QzAwMDMwNEUwMDA3QUUwRTAwMTA4RjkwMDAwODEyMDAwMDA0N0EKKzoxMDI4RDAwMDAwMDAwMDAwOEY0MzEwMDAwNDYxRkZGRTAwMDAwMDAwQjQKKzoxMDI4RTAwMDhGNzgwMDAwOEY4RjAwMTgzQzEwMDgwMDhFMTAwNDQ0NzEKKzoxMDI4RjAwMEFGOTgwMDA0OTc1MTAxMDQyNUU2MDAxMDMwQ0ExRkZGNkQKKzoxMDI5MDAwMDMyMjJGRkZGQUY4RjAwMUNBRjhBMDAxOEFGNEEwMDg0NEQKKzoxMDI5MTAwMDI0NDlGRkZFM0MwQjA4MDA4RDZCMDQ0MDk3NEUwMTA0RDgKKzoxMDI5MjAwMDAxMjA2ODIxMDAwOTY3QzMwMjBEMjgyMTMxQzlGRkZGN0EKKzoxMDI5MzAwMDAwQUQ0MDJCMDE2QzM4MjEwMEU4MjAyMTAzNEFGODIxMkEKKzoxMDI5NDAwMDMxMzkwMDA3M0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwNzMKKzoxMDI5NTAwMEFDMjQwNDQwMTMyMDAwMDMyN0ZCNDAwMDI1MjMwMDA3N0MKKzoxMDI5NjAwMDMwNjlGRkY4OEY5RjAwMjA4Rjg0MDAyODAxM0YzODIxQjUKKzoxMDI5NzAwMDAwRTRDODJCMTcyMDAwMDJBRjlGMDAyNDAwRTQzODIzOTYKKzoxMDI5ODAwMDAzNDcyMDIxMzQwNTgwMDAwMDg1MTAyMTNDMDYxMDAwRkIKKzoxMDI5OTAwMEFGODcwMDIwQUY4MjAwMzhBRjQ3MDA4MEFGNDYwMTc4OTQKKzoxMDI5QTAwMDBBMDAwMjg1OEY4QjAwMTQ5NzU4MDEwNDEzMDBGREMyQTIKKzoxMDI5QjAwMDNDMTA0MDAwOEY0MzAxNzgwNDYwRkZGRTMwQjk0MDAwQjYKKzoxMDI5QzAwMDEzMjAwMDAzM0MwNDAwMDgwMDAwMDAwRDNDMDQwMDA4MzQKKzoxMDI5RDAwMEFGNDQwMTQwMjQwODA4MDBBRjQ4MDE3ODhGOEIwMDAwMDUKKzoxMDI5RTAwMDk3NEEwMTA0MzE3RjAwMDExM0UwMDBFOTMxNDZGRkZGRkYKKzoxMDI5RjAwMDI0RDBGRkZFMjQwQzAwMDJBNzRDMDE0NkE3NTAwMTQ4M0EKKzoxMDJBMDAwMDhGOEYwMDE4MjQwNTAwMERBNzQ1MDE0QThGNzEwMDAwMjMKKzoxMDJBMTAwMDI1RTIwMDA4MzA0OTFGRkYwMzQ5NzAyMTMwQ0QwMDA3MkYKKzoxMDJBMjAwMEFGOTEwMDA0QUY4RjAwMUNBRjg5MDAxODAwQzAzODIxOUYKKzoxMDJBMzAwMEFGNDkwMDg0MTFBMDAwMDMyNURCNDAwMDI0QzYwMDA3MzUKKzoxMDJBNDAwMDMwQzdGRkY4OEY5ODAwMjA4Rjg0MDAyODAwRjgzMDIxQ0QKKzoxMDJBNTAwMDAwQzQzODJCMTRFMDAwMDJBRjk4MDAyNDAwQzQzMDIzRDcKKzoxMDJBNjAwMDhGOEEwMDE0MDM0NjU4MjEzNDA4ODAwMDAxNjhGODIxMzkKKzoxMDJBNzAwMDI1NTkwMDAxM0MwMzEwMDAzQzEwNDAwMEFGODYwMDIwQTcKKzoxMDJBODAwMEFGOUYwMDM4QUY0NjAwODBBRjQzMDE3OEFGOTkwMDE0ODQKKzoxMDJBOTAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDhGNjkwMDAwNkIKKzoxMDJBQTAwMDk3NDQwMTA0MzEyN0ZGRkYzMDg4RkZGRjhGNEYwMTc4RTMKKzoxMDJBQjAwMDA1RTBGRkZFMzBGRjAwMDcwMDFGMTgyMzMwNzgwMDA3RjUKKzoxMDJBQzAwMDI0RTZGRkZFMjQxOTAwMEFBNzU5MDE0MEE3NTgwMTQyMzUKKzoxMDJBRDAwMEE3NDYwMTQ0QTc0MDAxNDZBNzQ4MDE0ODhGNDIwMTA4ODQKKzoxMDJBRTAwMDMwNTEwMDIwMTYyMDAwMDIyNDAzMDAwOTI0MDMwMDAxQjUKKzoxMDJBRjAwMDMwQUEwMDAyQTc0MzAxNEEzQzA0MDA0MTExNDAwMDAzRjAKKzoxMDJCMDAwMDAwMDAxODIxM0MwNDAxNDEyNDAzMDAwMTMwQUIwMDA0MDMKKzoxMDJCMTAwMDUxNjAwMDA1QUY4MzAwMDgzQzA1MDAxMDAwODUyMDI1QUEKKzoxMDJCMjAwMDI0MDMwMDAxQUY4MzAwMDhBRjQ0MTAwMDAwMDAwMDAwNDAKKzoxMDJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGOTAwMDA4NkUKKzoxMDJCNDAwMDEyMDAwMDA0MDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMDEKKzoxMDJCNTAwMDAwMDAwMDAwOEY3ODAwMDAyNzYyMDAwODhGOEQwMDNDODUKKzoxMDJCNjAwMEFGOTgwMDA0OTQ0NjAwMDg5NDUxMDAwQTk0NEYwMDBDNUEKKzoxMDJCNzAwMDMwQ0VGRkZGMDAxMTI0MDAzMUU5RkZGRjExQ0QwMEEyOEMKKzoxMDJCODAwMDAwODkyMDI1M0MwMzA4MDA4QzYzMDQ0NDNDMTgwODAwOUQKKzoxMDJCOTAwMDhGMTgwNDQwMDBFODUwMjEyNTVGRkZGRTAwN0Y3ODIxNTgKKzoxMDJCQTAwMDAwMDAxMDIxMDFGRjMwMkIwMzAyODgyMTAyMjY0ODIxNUEKKzoxMDJCQjAwMDNDMDEwODAwQUMyRjA0NDQzQzAxMDgwMEFDMjkwNDQwNEYKKzoxMDJCQzAwMDI0RUIwMDA4MzE2MkZGRkYzMDQ3MDAwNzEwRTAwMDAzRUMKKzoxMDJCRDAwMDhGODUwMDE4MjQ1MDAwMDczMjAyRkZGODMxMDZGRkZGRUUKKzoxMDJCRTAwMDMwQzgwMDA3MDA0NTcwMjEzMUNEMUZGRjAzNEQ2MDIxMjMKKzoxMDJCRjAwMEFGODUwMDFDQUY4RDAwMTgyNTlCNDAwMEFGNEQwMDg0QjEKKzoxMDJDMDAwMDExMDAwMDAzOEY4RjAwMjAyNEM0MDAwNzMwODZGRkY4RDYKKzoxMDJDMTAwMDhGODQwMDI4MDBDRjI4MjEwMEE0NDgyQjE1MjAwMDAyMTMKKzoxMDJDMjAwMEFGOEYwMDI0MDBBNDI4MjNBRjg1MDAyMEFGNDUwMDgwOEIKKzoxMDJDMzAwMDNDMTEwODAwOEUzMTA0MzQwMzQ1QzAyMTM0MDI4MDAwNjkKKzoxMDJDNDAwMDAzMDIzMDIxMTIyMDAwMDVBRjg2MDAzODkzODMwMDE3NUQKKzoxMDJDNTAwMDI0MTkwMDBFMTA3OTAwMEQyNDFGMDQzRjNDMEExMDAwQjcKKzoxMDJDNjAwMEFGNEEwMTc4OEY4QjAwMTQyNTY3MDAwMTBBMDAwMURENEYKKzoxMDJDNzAwMEFGODcwMDE0MEUwMDA1QTYzQzEwNDAwMDhGOEIwMDE0OTcKKzoxMDJDODAwMDI1NjcwMDAxMEEwMDAxREVBRjg3MDAxNDNDMEExMDAwMkUKKzoxMDJDOTAwMEE3NUYwMTQ4QUY0QTAxNzgwQTAwMDRCNDhGOEIwMDE0ODMKKzoxMDJDQTAwMDI0MEUwRjAwMTFFRTAwM0QzMEQxMDAyMDE2MjAwMDAyNEUKKzoxMDJDQjAwMDI0MDMwMDA5MjQwMzAwMDEwQTAwMDIwOEE3NDMwMTRBNzMKKzoxMDJDQzAwMDBBMDAwMUZCQTc0MDAxNDY5NEU1MDAwODk0RTIwMDBBQ0YKKzoxMDJDRDAwMDk0RUIwMDBDOEY4NjAwM0MwMDAyRkMwMDMxNkFGRkZGODEKKzoxMDJDRTAwMDMwQjlGRkZGMTMyNjAwMzcwM0VBMjAyNTNDMDUwODAwMTIKKzoxMDJDRjAwMDhDQTUwNDQ0M0MxRjA4MDA4RkZGMDQ0MDAwMDA1MDIxQjUKKzoxMDJEMDAwMDAwQTgzODIxMDBFODMwMkIwM0VBQzgyMTAzMjZDMDIxOUYKKzoxMDJEMTAwMDNDMDEwODAwQUMyNzA0NDQzQzAxMDgwMEFDMzgwNDQwRTYKKzoxMDJEMjAwMDBBMDAwMjY5OEY4RDAwMTgzQzE5MDgwMDhGMzkwNDdDNTUKKzoxMDJEMzAwMDNDMDMwODAwOEM2MzA0NTQzQzA2MDgwMDhDQzYwNDc4RUQKKzoxMDJENDAwMDNDMEYwODAwOERFRjA0NTAwMzI4MzgyMTAwNjg2ODIxRUIKKzoxMDJENTAwMDAwRThDMDJCMDBDNDg4MjEwMUE4NDAyQjAxRTQ3MDIxQTkKKzoxMDJENjAwMDAyMzg1ODIxMDFDODYwMjEzQzAxMDgwMEFDMkQwNDU0RjAKKzoxMDJENzAwMDNDMDEwODAwQUMyQzA0NTAzQzAxMDgwMEFDMjcwNDdDNEEKKzoxMDJEODAwMDNDMDEwODAwQUMyQjA0NzgwQTAwMDI2OThGOEQwMDE4MDIKKzoxMDJEOTAwMEE3NDAwMTQ2MEEwMDA0MUI4RjhGMDAxODMwRDAwMDIwODYKKzoxMDJEQTAwMDE2MDBGRkM1MjQwMzAwMEQyNDAzMDAwNTBBMDAwMjA4RDUKKzoxMDJEQjAwMEE3NDMwMTRBOTc1OTAxMDQyNzM4RkZGMDBBMDAwMzZCMjMKKzoxMDJEQzAwMDMzMDRGRkZGOEY4QzAwNDAxNDhDRkZDODAwMDA4MDIxNkIKKzoxMDJERDAwMDNDMTEwODAwOEUzMTA0NkMzQzA0MDgwMDhDODQwNDY4QUIKKzoxMDJERTAwMDAyMjg3MDIxMDFDODc4MkIwMDkwNDAyMTAxMEY2ODIxMzIKKzoxMDJERjAwMDNDMDEwODAwQUMyRTA0NkMzQzAxMDgwMEFDMkQwNDY4QkEKKzoxMDJFMDAwMDBBMDAwMjY5OEY4RDAwMTg4Rjk5MDA0MDE0OTlGRjVEQTgKKzoxMDJFMTAwMDAwMDA2MDIxM0MwNTA4MDA4Q0E1MDQ2QzNDMTAwODAwRjMKKzoxMDJFMjAwMDhFMTAwNDY4MDBFODIwMjEyNDhFRkZGRTAwQUVGODIxRjkKKzoxMDJFMzAwMDAzRUU1ODJCMDIwQzUwMjEwMTRCMTgyMTNDMDEwODAwRDUKKzoxMDJFNDAwMEFDM0YwNDZDM0MwMTA4MDBBQzIzMDQ2ODBBMDAwNDhCMEUKKzoxMDJFNTAwMDI0RUIwMDA4OEY4ODAwMzgzQzAyRkZGRjhEMEUwMDBDMjkKKzoxMDJFNjAwMDAxQzI2ODI0MDFBNDYwMjVBRDBDMDAwQzBBMDAwMzc5OUUKKzoxMDJFNzAwMDMwQ0ZGRkZGMEEwMDAzQTlBRTAwMDAwMDk3NEIwMTA0MEEKKzoxMDJFODAwMDkyMDQwMDA0OEUyQTAwMEMwMTY0NDAyMTI1MUZGRkYyRTkKKzoxMDJFOTAwMDAxNDcxODI0MzNGOUZGRkYwMDc5QzAyNUFFMzgwMDBDMzQKKzoxMDJFQTAwMDBBMDAwMkQ0OEUxOTAwMTAzQzAzRkZGRjhEMTEwMDEwQTAKKzoxMDJFQjAwMDAyMjMyODI0MDBBNDc4MjVBRDBGMDAxMDBBMDAwMzc5MEUKKzoxMDJFQzAwMDMwQ0ZGRkZGOTc0NTAxMDQ5MjA2MDAwNDhFMkYwMDEwQkIKKzoxMDJFRDAwMDAwQTYxMDIxMjQ0OUZGRUUwMUU3NjgyNDMxMkVGRkZGRjAKKzoxMDJFRTAwMDAxQUU2MDI1QUUyQzAwMTAwQTAwMDJENDhFMTkwMDEwMkQKKzoxMDJFRjAwMDhFMDYwMDBDQUUwMDAwMDAwMDAzQzA4MDAzMTA4ODIxODUKKzoxMDJGMDAwMDBBMDAwMkE2QUUyNjAwMjAxNDYwMDAwRDMwNTBGRkZGMUMKKzoxMDJGMTAwMDNDMDRGRkZGMDA0NDYwMjQwMTg0NjgyNjAwMEQ1ODJCMDgKKzoxMDJGMjAwMDAwMEM1MDJCMDE0QjEwMjQxMDQwMDAwMjAwMDAwMDAwNDgKKzoxMDJGMzAwMDAwMDAwMDBEOENBMzAwMDAwQTAwMDIzRTAwNjQxMDI1NzIKKzoxMDJGNDAwMDNBMTFGRkZGMDAxMTc4MkIwMDEwNzAyQjAxQ0YyMDI0QzUKKzoxMDJGNTAwMDEwODAwMDAyMDAwMDAwMDAwMDAwMDAwRDhDQjgwMDAwOEUKKzoxMDJGNjAwMDBBMDAwMjNFMzcwMkZGRkYzMDg0RkZGRjMwQTVGRkZGNUIKKzoxMDJGNzAwMDEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyN0MKKzoxMDJGODAwMDAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwNDIKKzoxMDJGOTAwMDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwREUKKzoxMDJGQTAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwMTAKKzoxMDJGQjAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQUMKKzoxMDJGQzAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwNTIKKzoxMDJGRDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBRDkKKzoxMDJGRTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDMwOEVGRkZGOEUKKzoxMDJGRjAwMDMwRDhGRkZGMDAwNTdDMDAwMUY4NjAyNTM5Q0RGRkZGQzgKKzoxMDMwMDAwMDAxQUM1MDIxMDE0QzU4MkIwMTRCNDgyMTAwMDk0NDAyQ0UKKzoxMDMwMTAwMDMxMjdGRkZGMDBFODMwMjEwMDA2MjQwMjMwQzVGRkZGMDIKKzoxMDMwMjAwMDAwQTQxODIxMzg2MkZGRkYwM0UwMDAwODMwNDJGRkZGRDAKKzoxMDMwMzAwMDNDMEMwODAwOEQ4QzA0ODQyNDBCRkY4MDI3QkRGRkQwM0UKKzoxMDMwNDAwMDAxODQ1MDIxMDE0QjQ4MjRBRjQ5MDAyMDNDMDgwODAwNkUKKzoxMDMwNTAwMDhEMDgwNDg0QUZCMjAwMjBBRkIwMDAxOEFGQkYwMDI4QzUKKzoxMDMwNjAwMEFGQjMwMDI0QUZCMTAwMUM5MzY2MDAwNDAxMDQzODIxMDMKKzoxMDMwNzAwMDMwRTQwMDdGMDA5QTEwMjEzQzAzMDAwODAwNDM5MDIxQjcKKzoxMDMwODAwMDMwQzUwMDIwMDM2MDgwMjEzQzA4MDExMTI3N0IwMDA4MjcKKzoxMDMwOTAwMDE0QTAwMDAyMjY0NjAwNzAyNjQ2MDA2QzkyMTMwMDA0MUQKKzoxMDMwQTAwMDk3NTEwMTA0OTIwRjAwMDQzMjY3MDAwRjMyMkVGRkZGODgKKzoxMDMwQjAwMDMxRUQwMDQwMDFDNzI4MjMxMUEwMDAwNTAwMDA0ODIxODAKKzoxMDMwQzAwMDkyNTkwMEJDMzMzODAwMDQxNzAwMDA5MDAwMDAwMDAwNDMKKzoxMDMwRDAwMDkyNDMwMEJDMzA3RjAwMDQxM0UwMDAwRjAwMDAwMDAwQUEKKzoxMDMwRTAwMDEwQTAwMDBEMDAwMDAwMDA5NjBFMDAwMjI0MEFGRjgwRDAKKzoxMDMwRjAwMDAwQTc2MDIxMjVDREZGRkVBNzREMTAxNjkyMEIwMDA0RkUKKzoxMDMxMDAwMDAxNEIyMDI0MzA4MjAwRkYxMDQwMDA4NTAxMEM0MDI1MzcKKzoxMDMxMTAwMDNDMEYwNDAwMDEwRjQwMjU4RjUzMDE3ODA2NjBGRkZFMkQKKzoxMDMxMjAwMDI0MDQwMDBBQTc0NDAxNDA5NjBEMDAwMjI0MDQwMDA5NkIKKzoxMDMxMzAwMDMxQUMwMDA3MDAwQzU4MjMzMTZBMDAwN0E3NEEwMTQyNEUKKzoxMDMxNDAwMDk2MDIwMDAyMjQ0M0ZGRkVBNzQzMDE0NEE3NDAwMTQ2MjQKKzoxMDMxNTAwMDk3NUYwMTA0QTc1RjAxNDg4RjU5MDEwODMzMzgwMDIwQTkKKzoxMDMxNjAwMDUzMDAwMDAxMjQwNDAwMDE5MjBGMDAwNDMxRUUwMDEwMEUKKzoxMDMxNzAwMDE1QzAwMDAyMzQ4MzAwMTAwMDgwMTgyMUE3NDMwMTRBQzMKKzoxMDMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDMxOTAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDMxQTAwMDAwMDAwMDAwOEY1MTEwMDAwNjIxRkZGRTMxMTNGRkZGQzkKKzoxMDMxQjAwMDEyNjAwMDAzMDAwMDAwMDA4RjQ4MTAxOEFDQzgwMDAwMjcKKzoxMDMxQzAwMDk2MDMwMDA2MzA3RkZGRkYyN0Y5MDAwMjAwMTk5ODgyNUUKKzoxMDMxRDAwMDAwMTM4ODgwMDIzQjMwMjE4Q0Q4MDAwMDE1MjAwMDU3NTYKKzoxMDMxRTAwMDAwMTgzNDAyOTIwMzAwMDQyNDA1RkY4MDAwQTNGODI0OTEKKzoxMDMxRjAwMDMzRjEwMEZGMTIyMDAwMkMwMDAwMDAwMDkyNDcwMEJDQjkKKzoxMDMyMDAwMDMwRjIwMDAyMTI0MDAwMjgwMDAwMDAwMDk3NEIxMDBDMjIKKzoxMDMyMTAwMDI1NjJGRkZFQTc0MjEwMTYwMDAwMDAwMDNDMEEwNDAwRDEKKzoxMDMyMjAwMDM1NDkwMDMwQUY0OTEwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMjAKKzoxMDMyNDAwMDAwMDAwMDAwOTc0OTEwMEM4RjUxMTAxQzAwQzAyMDIxNzUKKzoxMDMyNTAwMDMxMjdGRkZGMjRGMjAwMzAwMDEyMTg4MjAwMDMyODgwN0IKKzoxMDMyNjAwMDAwQkJGODIxMzIyNkZGRkZBRkYxMDAwMDBFMDAwNTk1RUMKKzoxMDMyNzAwMDAwMTEyQzAyMDAxM0M4ODAwMzNCOTgyMThFNzgwMDAwQjcKKzoxMDMyODAwMDAwMDI3NDAwQUZCODAwMTA4RkE4MDAxMDMxMEZGRkZGQ0MKKzoxMDMyOTAwMEFGQUYwMDEwOEZBNDAwMTAwMUM0NjgyNUFGQUQwMDEwQkYKKzoxMDMyQTAwMDhGQTYwMDEwQUU2NjAwMDA5NzczMDAwODk3NkQwMDBBQTUKKzoxMDMyQjAwMDk3NjYwMDBDOEY4QTAwM0MwMDBENUMwMDMwQ0NGRkZGNEQKKzoxMDMyQzAwMDMyNjJGRkZGMTA0QTAwMzYwMTZDMjAyNTk2MDYwMDAyOEMKKzoxMDMyRDAwMDNDMTAxMDAwMjREMzAwMDgwRTAwMDEzOTMyNjRGRkZGQjcKKzoxMDMyRTAwMDk3NEMwMTA0MEUwMDAxNDczMTg0RkZGRkFGNTAwMTc4NzUKKzoxMDMyRjAwMDhGQkYwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDMzUKKzoxMDMzMDAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzMDEwQTBGRjcwNDgKKzoxMDMzMTAwMDAwMDAwMDAwMjRBNUZGRkMwQTAwMDVDRTI0MDkwMDA0REIKKzoxMDMzMjAwMDhDRDEwMDAwQUY1MTEwMTg4RjUzMDE3ODA2NjBGRjdBREUKKzoxMDMzMzAwMDI0MDQwMDBBMEEwMDA1RTMwMDAwMDAwMDAwQTdDODIxRDkKKzoxMDMzNDAwMDhGODgwMDM4OEY0RTEwMUMwMDE5QzA4MjAwMTg3ODgwQkEKKzoxMDMzNTAwMDAxRTgyMDIxQUM4RTAwMDAwMDBFMkMwMjAwQzAyMDIxQ0MKKzoxMDMzNjAwMDBFMDAwNTk1MzFDNkZGRkYwMjNCMjgyMThDQUQwMDAwMDEKKzoxMDMzNzAwMDAwMDI1NDAwMDA0MDMwMjFBRkFEMDAxMDhGQUMwMDEwQUYKKzoxMDMzODAwMDMxOEJGRkZGQUZBQjAwMTA4RkEyMDAxMDAxNDI0ODI1MjgKKzoxMDMzOTAwMEFGQTkwMDEwOEZBNzAwMTAwQTAwMDYxM0FDQTcwMDAwMDkKKzoxMDMzQTAwMDhGOEYwMDQwMTQ4RkZGQzkwMDAwMDAwMDk3NDIwMTA0NzYKKzoxMDMzQjAwMDk2MEIwMDAyM0MwNTA4MDA4Q0E1MDQ2QzMwNDlGRkZGMDkKKzoxMDMzQzAwMDMxNkFGRkZGM0MxMTA4MDA4RTMxMDQ2ODAxMkEzODIxNjAKKzoxMDMzRDAwMDI0RjJGRkZFMDBCMjQwMjEwMDEyRkZDMzAxMTJDODJCRUQKKzoxMDMzRTAwMDAyM0ZDMDIxMDMxOTIwMjEzQzAxMDgwMEFDMjgwNDZDRDUKKzoxMDMzRjAwMDNDMDEwODAwQUMyNDA0NjgwQTAwMDY0RDAwMDAwMDAwRUYKKzoxMDM0MDAwMDAwQTQxMDJCMTA0MDAwMDkyNDAzMDAwMTAwMDUyODQwRUYKKzoxMDM0MTAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDM0MKKzoxMDM0MjAwMDAwMDUyODQwMTA2MDAwMDcwMDAwMDAwMDAwODUzMDJCRDgKKzoxMDM0MzAwMDE0QzAwMDAyMDAwMzE4NDIwMDg1MjAyMzE0NjBGRkZCMjMKKzoxMDM0NDAwMDAwMDUyODQyMDNFMDAwMDgwMDgwMTAyMThGODUwMDJDMzEKKzoxMDM0NTAwMDI3QkRGRkU4MDAwNTMwMjcyQ0MzMDAwMTJDQTQwMDAyODMKKzoxMDM0NjAwMDAwODMxMDI1MTA0MDAwMDNBRkJGMDAxMDI0MDUwMDdGMkIKKzoxMDM0NzAwMEFGODUwMDJDMDAwNTI4MjczMEE1RkZGRjBFMDAwNTc0M0UKKzoxMDM0ODAwMDI0MDQyNkY1OEY4MzAwMzAyNDA0MDJCRDAwNDAzMDIxM0YKKzoxMDM0OTAwMDAwODMzODJCMTBFMDAwMDkyNDA1MDAwMTAwMDQyMDQwQkYKKzoxMDM0QTAwMDAwODMxMDJCMDQ4MDAwMDMwMDA1Mjg0MDU0NDBGRkZDREIKKzoxMDM0QjAwMDAwMDQyMDQwMTBBMDAwMDgwMEMzNTAyMTAwNjQ0MDJCRUQKKzoxMDM0QzAwMDE1MDAwMDAyMDAwNTI4NDIwMDY0MTgyMzE0QTBGRkZCMjkKKzoxMDM0RDAwMDAwMDQyMDQyMDBDMzUwMjE4RkJGMDAxMDAwMEE0QzAyOUMKKzoxMDM0RTAwMDMxMjIwMEZGMjdCRDAwMThBRjhBMDAyQzAzRTAwMDA4M0UKKzowNDM0RjAwMEFGODkwMDMwNzAKKzowQzM0RjQwMDBBMDAwMDJBMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTAzNTAwMDAwMDAwMDAwRDc0Nzg3MDM1MkUzMDJFMzA2QTM2MDAwMEMxCis6MTAzNTEwMDAwNTAwMDAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDFCCis6MTAzNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTAzNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTAzNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzNTUwMDAwMDAwMDAwMDAwMDAwMDE2MDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAzNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAzNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTAzNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM4OEEwCis6MTAzNTkwMDAwMDAwMDAwMDAwMDAwNURDMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAzNUEwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwREVFCis6MTAzNUIwMDAzQzAyMDgwMDI0NDIzQjYwM0MwMzA4MDAyNDYzM0QxNEE1Cis6MTAzNUMwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDg3Cis6MTAzNUQwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDEzCis6MTAzNUUwMDAyNjEwMDBBODNDMUMwODAwMjc5QzNCNjAwRTAwMDJCQTc1Cis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDBEOEY4MzAwMzgzQzA4ODAwMEIwCis6MTAzNjAwMDAzNTA3MDA3MDhDRTUwMDAwMDA4MzMwMjUzQzAyOTAwMEY3Cis6MTAzNjEwMDAwMEMyMjAyNUFGODUwMDMwQUY0NDAwMjA4RjQ5MDAyMDM0Cis6MTAzNjIwMDAwNTIwRkZGRTNDMDM4MDAwMzQ2MjAwNzA4QzQ1MDAwMEUyCis6MTAzNjMwMDA4Rjg2MDAzMDNDMTkwODAwOEYzOTAwN0MzQzBFMDgwMDUyCis6MTAzNjQwMDA4RENFMDA3ODAwQTYyMDIzMDMyNDU4MjEwMDAwNzgyMTg1Cis6MTAzNjUwMDAwMTY0NjgyQjAxQ0Y2MDIxMDE4RDUwMjEzQzAxMDgwMERECis6MTAzNjYwMDBBQzJCMDA3QzNDMDEwODAwQUMyQTAwNzgwM0UwMDAwODg5Cis6MTAzNjcwMDAwMDAwMDAwMDBBMDAwMDQxMjQwNDAwMDE4Rjg0MDAzODhCCis6MTAzNjgwMDAzQzA1ODAwMDM0QTIwMDAxMDA4MjE4MjUwM0UwMDAwOEY4Cis6MTAzNjkwMDBBRjQzMDAyMDAzRTAwMDA4MDAwMDEwMjEzMDg0RkZGRjRBCis6MTAzNkEwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUM0Cis6MTAzNkIwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjI2Cis6MTAzNkMwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzNBCis6MTAzNkQwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDA3Cis6MTAzNkUwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODQ3Cis6MTAzNkYwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDFCCis6MTAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjEwCis6MTAzNzEwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEEzCis6MTAzNzIwMDAzMDhBRkZGRjkzQTgwMDEzQTc0QTAxNDQ5NzQ5MEUxNjU5Cis6MTAzNzMwMDAzMEM2MDBGRjNDMDIxMDAwQTc0OTAxNDZBRjQ1MDE0OEQyCis6MTAzNzQwMDBBMzQ2MDE1MkE3NDgwMTVBQUY0NzAxNjA4RkE0MDAxODUxCis6MTAzNzUwMDA4RkEzMDAxNEE3NDQwMTU4QUY0MzAxNTQwM0UwMDAwOEFECis6MTAzNzYwMDBBRjQyMDE3ODAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDQ1Cis6MTAzNzcwMDAzNDYyMDA3MDhDNDkwMDAwOEY4ODAwMDAyNDg0MDAwN0E4Cis6MTAzNzgwMDAyN0JERkZGODMwODRGRkY4QUY4OTAwMzA5NzREMDA4QURECis6MTAzNzkwMDAzMUFDRkZGRkFGQUMwMDAwOEZBQjAwMDAwMTY4NTAyM0RECis6MTAzN0EwMDAyNTQ3RkZGRjMwRTYxRkZGMDBDNDI4MkIxNEEwRkZGN0JBCis6MTAzN0IwMDAzQzBDODAwMDM1OEIwMDcwOEQ2QTAwMDAzQzA3MDgwMENGCis6MTAzN0MwMDA4Q0U3MDA4NDNDMDYwODAwOENDNjAwODAwMDA4MTA4MjRDCis6MTAzN0QwMDAwMTQ5MTgyMzAwMDI3ODgwMDBFMzcwMjEwMDAwMjAyMUI1Cis6MTAzN0UwMDAwMUMzQzgyQjAwQzRDMDIxMDFGQTQwMjEwMzE5NDgyMTlDCis6MTAzN0YwMDAyNTAyNDAwMDI3QkQwMDA4M0MwMTA4MDBBQzJFMDA4NEQzCis6MTAzODAwMDAzQzAxMDgwMEFDMjkwMDgwMDNFMDAwMDgwMDAwMDAwMDMzCis6MTAzODEwMDA4RjgyMDAwMDI0ODYwMDA3MzBDNUZGRjgwMEEyMTgyMTFGCis6MTAzODIwMDAzMDY0MUZGRjAzRTAwMDA4QUY4NDAwMDA4Rjg3MDAzODdBCis6MTAzODMwMDA4RjhBMDA0MDI3QkRGRkI4OEY4NjAwNDRBRkI2MDA0MDk2Cis6MTAzODQwMDBBRkJGMDA0NEFGQjUwMDNDQUZCNDAwMzhBRkIzMDAzNEY1Cis6MTAzODUwMDBBRkIyMDAzMEFGQjEwMDJDQUZCMDAwMjg4RjQ1MDEwNEVCCis6MTAzODYwMDA4RDQ5MDBBQ0FGNDcwMDgwOENDODAwMjAwMEE5MzgyM0U4Cis6MTAzODcwMDAwMDAwQjAyMUFGNDgwRTEwOEY0NDBFMTAwMDAwNDgyMTA4Cis6MTAzODgwMDBBRjQ0MEUxNDhDQzIwMDI0QUY0MjBFMTg4RjQzMEUxOEEyCis6MTAzODkwMDBBRjQzMEUxQzEwRTAwMTI1MkQyMzAwMDE5MzZCMDAwODlGCis6MTAzOEEwMDAxMTYwMDBENDAwMDAwMDAwOTc2RTAwMTAzMUNERkZGRkMyCis6MTAzOEIwMDAwMEVENjAyQjE1ODAwMENGMDAwMDAwMDA5NzcwMDAxMDE1Cis6MTAzOEMwMDAzMjBGRkZGRkFGNEYwRTAwOEY1MjAwMDAzMjUxMDAwODQxCis6MTAzOEQwMDAxMjIwRkZGRDAwMDAwMDAwOTc1NDBFMDg4RjQ2MEUwNEQyCis6MTAzOEUwMDAzMjg1RkZGRjMwQjMwMDAxMTI2MDAxMzIwMDAwMDAwMDlBCis6MTAzOEYwMDAwMDAwMDAwRDMwQjhBMDQwMjQxNTAwNDAxMzE1MDBDMDkyCis6MTAzOTAwMDAzMEE5QTAwMDExMjAwMTJEMDAwMDAwMDA5MzdGMDAwOEM1Cis6MTAzOTEwMDAxM0UwMDAwODAwMDAwMDAwOTc2MzAwMTAzMDZCRkZGRjA5Cis6MTAzOTIwMDAwMENCNDAyQjExMDAwMDAzMzBBQzAwNDAxMTgwMDEyMzdDCis6MTAzOTMwMDAwMDAwMDAwMEE3ODUwMDNDQUY4NjAwMzQ5MzY2MDAwOEI1Cis6MTAzOTQwMDAwMEUwMjgyMUFGQTcwMDIwMTRDMDAxMjQyN0IzMDAyMEU1Cis6MTAzOTUwMDBBRjYwMDAwQzk3ODIwMDNDMzA0NzQwMDAxNEUwMDAwMjRBCis6MTAzOTYwMDAyNDAzMDAxNjI0MDMwMDBFMjQxOTQwMDdBMzYzMDAwQTUxCis6MTAzOTcwMDBBRjc5MDAxNDkzOEEwMDNFOEY3NDAwMTQzMTU4MDAwNzA5Cis6MTAzOTgwMDAwMDE4QUE0MDAyOTU5MDI1QUY3MjAwMTQ5Nzg0MDAzQzVECis6MTAzOTkwMDA4RjcwMDAxNDMwOTEwMDEwMDIxMTc4MjVBRjZGMDAxNDYxCis6MTAzOUEwMDA5NzhFMDAzQzMxQ0QwMDA4MTFBMDAxNDcwMDAwMjgyMTZFCis6MTAzOUIwMDA4RjY3MDAxNDNDMDIxMDAwM0MwQzgxMDAwMEUyMjgyNUI3Cis6MTAzOUMwMDBBRjY1MDAxNDk3NDYwRTBBMjQwODAwMEUzNDA1RkZGQzZDCis6MTAzOUQwMDAzMEMzRkZGRjAwNkM1ODI1QUY2QjAwMDRBMzY4MDAwMkUyCis6MTAzOUUwMDA5MzdGMDAwQTI3RTkwMDA0QTM2OTAwMEE5Nzg2MDAzQzM4Cis6MTAzOUYwMDA5MzYzMDAwQTMwQ0MxRjAwMDAwQzU5ODMwMTYzNDAyMUZGCis6MTAzQTAwMDAyNTFGMDAyOEEzN0YwMDA5OTc0OTBFMENBNzY5MDAxMDA1Cis6MTAzQTEwMDA5Mzc5MDAwOTI3MkEwMDAyMzE1ODAwMDcwMDE4QTgyM0NCCis6MTAzQTIwMDAzMkIxMDAwN0EzNzEwMDBCOTM3NDAwMDk5NzY0MDAxMDcyCis6MTAzQTMwMDA4RjkxMDAzNDk3OEYwMDNDMzI5MjAwRkYwMjQ0ODAyMTI2Cis6MTAzQTQwMDAwMjA1NzAyMTMxRUQwMDQwMTFBMDAwMDUzMUM0RkZGRkQ3Cis6MTAzQTUwMDAwMDkxMjgyQjNDMTI4MDAwMTBBMDAwMTQwMDAwQTAyMTJGCis6MTAzQTYwMDAwMjI0MzgyQjE0RTAwMTFCOEZBNTAwMjA4RjREMEUxNDZCCis6MTAzQTcwMDBBRjREMEUxMDhGNDIwRTFDQUY0MjBFMThBRjQ0MEUwMDE5Cis6MTAzQTgwMDA4RjRGMDAwMDMxRUUwMDA4MTFDMEZGRkQwMDAwMDAwMDY0Cis6MTAzQTkwMDA5NzU0MEUwODAwODA4ODIxMDAwMDkwMjFBNzk0MDAzQ0Q0Cis6MTAzQUEwMDA4RjUwMEUwNDI0MTQwMDAxQUY5MDAwMzQ5NzY0MDAxMDZFCis6MTAzQUIwMDAzMDk1RkZGRjhFNjgwMDAwMDExMUY4MjMxN0UwMDAwOTIwCis6MTAzQUMwMDBBRTdGMDAwMDhGNjUwMDE0OEY4QjAwNDQzNEE2MDA0MDQ5Cis6MTAzQUQwMDBBRjY2MDAxNDhGNEMwRTEwQUQ2QzAwMjA4RjQzMEUxODkzCis6MTAzQUUwMDBBRDYzMDAyNDkzNjcwMDA4MTRFMDAwRDIwMDAwMDAwMERBCis6MTAzQUYwMDAwRTAwMDA5RTI0MDQwMDEwOEY4OTAwNDgzQzA4MzIwMDBDCis6MTAzQjAwMDAwMDQwMjgyMTMxMjYwMEZGMDAwNkZDMDAwM0U4NTAyNTc0Cis6MTAzQjEwMDAyNTM5MDAwMUFGOTkwMDQ4QUM0QTAwMDA5Mzc4MDAwOUFDCis6MTAzQjIwMDA5MzcwMDAwQTMzMDQwMEZGMDAwNDc0MDAzMjBGMDBGRjlBCis6MTAzQjMwMDAwMUNGNjgyNUFDNEQwMDA0OEY4MjAwNDgwNjQwMDBFQUEyCis6MTAzQjQwMDBBQ0EyMDAwOEFDQTAwMDBDOTc4MzAwM0MzMDZCMDAwOENFCis6MTAzQjUwMDAxNTYwMDAwMjI2MjgwMDA2MjYyODAwMDI5NzRFMEUxNDQzCis6MTAzQjYwMDA4RjQ1MEUxQzhGNjcwMDA0OTM2RDAwMDIzMUM0RkZGRjY4Cis6MTAzQjcwMDAzMUEyMDBGRkFGQTIwMDEwOEY2QzAwMTRBRkE4MDAxODk0Cis6MTAzQjgwMDAwRTAwMDA4QkFGQUMwMDE0MjQwNDAwMTAwRTAwMDBDNzIwCis6MTAzQjkwMDAwMDAwMDAwMDhFNzIwMDAwMTY0MDAwMDUwMDAwMDAwMENBCis6MTAzQkEwMDA4RjY0MDAxNDI0MDVGRkJGMDA4NTk4MjRBRjczMDAxNEIwCis6MTAzQkIwMDA4Rjc5MDAwQzAzMzUzODIxQUY2NzAwMEM5Mzc1MDAwODJFCis6MTAzQkMwMDAxNkEwMDAwODAwMDAwMDAwMTI4MDAwMDYwMDAwMDAwMDlGCis6MTAzQkQwMDA4RjdGMDAxNDNDMEJFRkZGMzU2OEZGRkUwM0U4NDgyNDlECis6MTAzQkUwMDBBRjY5MDAxNEEzNzQwMDA4OEZBNTAwMjAwQTAwMDI0NkU0Cis6MTAzQkYwMDAwMjIwMjAyMUFGNDcwRTAwMEEwMDAwRjUwMDAwMDAwMDVGCis6MTAzQzAwMDA4RjU5MDE3ODA3MjBGRkZFMjQxRjA4MDA4Rjg0MDAwMEQxCis6MTAzQzEwMDBBRjVGMDE3ODk3NEIwMDhBMzE2QUZGRkYwMTQ0NDgyMzY4Cis6MTAzQzIwMDAyNTI4RkZGRjMxMDIxRkZGMkM0MzAwMDgxNDYwRkZGOTE1Cis6MTAzQzMwMDAwMDAwMDAwMDhGOEUwMDQ4OEY4RDAwMzgwMEMwNDgyMUEyCis6MTAzQzQwMDAwMzQ0MjAyMTI1QzYwMDAxMjQwQzBGMDBBRjg2MDA0ODQ0Cis6MTAzQzUwMDAwMEU5MzgyMzI0ODY0MDAwMzFDQTAwRkYxMUFDMDAwNTdBCis6MTAzQzYwMDAyNDA4MDAwMTkzOTEwMDNFMzIzMDAwMDcwMDEwN0E0MDkyCis6MTAzQzcwMDAzNUU4MDAwMTAwMEFBQzAwM0MxODAxMDAwMkI4QTAyNTlDCis6MTAzQzgwMDBBQzk0NDAwMDhGOTMwMDQ4MzBCMjAwMzYzMEE0MDAwODU2Cis6MTAzQzkwMDBBQ0QzMDAwNDEwODAwMDk3MDExMjMwMjU5NzRFMEUwQTE1Cis6MTAzQ0EwMDA4RjhEMDAwMDNDMDI4MTAwMzFDQ0ZGRkYyNUFCMDAwODY2Cis6MTAzQ0IwMDAwMTgyNDAyNTNDMDMxMDAwMzE2NTFGRkYyNTM5MDAwNkI1Cis6MTAzQ0MwMDAyNDFGMDAwRUFGNDgwMTYwMDBDMzMwMjVBNzVGMDE1QUQyCis6MTAzQ0QwMDBBRjg1MDAwMEE3NTkwMTU4MTRFMDAwMEE4RjkzMDAzOEZGCis6MTAzQ0UwMDAyNDEyMEYwMDUyNzIwMDAyMjQxNjAwMDEzNEM2MDA0MDU0Cis6MTAzQ0YwMDA4RjU4MEUxMDhGOTQwMDQ0QUU5ODAwMjA4RjU1MEUxOEU4Cis6MTAzRDAwMDBBRTk1MDAyNDhGNDUwRTE0QUY0NTAxNDQ4RjU5MEUxQzBCCis6MTAzRDEwMDBBRjU5MDE0OEEzNEEwMTUyM0MwQTEwMDBBRjQ2MDE1NDcyCis6MTAzRDIwMDBBRjRBMDE3ODE0RTBGRUREMkQyMzAwMDEwMDc2QTAyNUM2Cis6MTAzRDMwMDAxMjgwMDAxNzhGQkYwMDQ0OEY4NDAwMzgyNDE2MEYwMEI0Cis6MTAzRDQwMDAxMDk2MDA4NDAwMDAwMDAwOEY0NTAxNzgwNEEwRkZGRTVCCis6MTAzRDUwMDAyNDE1MEYwMDEwOTUwMDZFMDAwMDAwMDA4RjQ3MEUxNDEwCis6MTAzRDYwMDAyNDAyMDI0MDNDMUYxMDAwQUY0NzAxNDQ4RjQ0MEUxQzQ4Cis6MTAzRDcwMDBBRjQ0MDE0OEEzNDAwMTUyQTc0MDAxNUFBRjQwMDE2MDNGCis6MTAzRDgwMDBBNzQwMDE1OEFGNDIwMTU0QUY1RjAxNzg4RkJGMDA0NDk0Cis6MTAzRDkwMDA4RkI2MDA0MDhGQjUwMDNDOEZCNDAwMzg4RkIzMDAzNDJECis6MTAzREEwMDA4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjgwM0UwMDAwOEU0Cis6MTAzREIwMDAyN0JEMDA0ODE0QzBGRUQwMzBCOEEwNDA4RjQyMEUxNDdBCis6MTAzREMwMDA4Rjg0MDA0NDAwMDA0ODIxQUM4MjAwMjA4RjUxMEUxQ0RCCis6MTAzREQwMDBBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE4RjkxMDAzNEMzCis6MTAzREUwMDA5NzhBMDAzQzNDMTI4MDAwMDIyMEE4MjEzMTU4MDA0MEY0Cis6MTAzREYwMDAxNzAwRkYzMDAwMDBBMDIxOTc2OTAwMTA4RjkyMDAzNDU3Cis6MTAzRTAwMDAzMTM5RkZGRjEzMzIwMDM1MDAwMDIwMjEwMDgwNDgyMUE2Cis6MTAzRTEwMDAxNDgwRkVBMDAwQTAzODIxOEY0MjBFMTQ4Rjg0MDA0NDJECis6MTAzRTIwMDBBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQwQTAwMDIwRUJGCis6MTAzRTMwMDAyRDIzMDAwMTkzNkEwMDA5OTM3ODAwMEIzMTUwMDBGRjk1Cis6MTAzRTQwMDAzMzBGMDBGRjAyMEY3MDIxMjVDMjAwMEEzMDUwRkZGRjIwCis6MTAzRTUwMDAwRTAwMDA5RTAyMDAyMDIxOEY4NjAwNDgzQzFGNDEwMDdBCis6MTAzRTYwMDAyNENEMDAwMUFGOEQwMDQ4OTM2QzAwMDkzMEM2MDBGRkRGCis6MTAzRTcwMDAwMDA2NDQwMDMxODMwMEZGMjQ2QjAwMDIwMTBCNDgyNTNCCis6MTAzRTgwMDAwMTNGQzgyNUFDNTkwMDAwOEY2NzAwMEM5NzQ0MEUxNDAxCis6MTAzRTkwMDAwMEYyMjgyNUFDNDUwMDA0OEY0NTBFMUM4RjY3MDAwNEY2Cis6MTAzRUEwMDA5MzZBMDAwMjMwODRGRkZGMzE1ODAwRkZBRkI4MDAxMDYyCis6MTAzRUIwMDA4RjZGMDAxNEFGQjEwMDE4MEUwMDAwOEJBRkFGMDAxNDZECis6MTAzRUMwMDAwQTAwMDFBNjAyMDAyMDIxQUY2MDAwMDQwQTAwMDEzRUEyCis6MTAzRUQwMDBBMzYwMDAwMjBBMDAwMjQ2MDAwMDIwMjEwMDAwOTAyMTk5Cis6MTAzRUUwMDAwQTAwMDE3MDI0MTQwMDAxM0MxMjgwMDAwQTAwMDE5NUIwCis6MTAzRUYwMDBBQ0IyMDAwQzhGOTEwMDAwMjUyNDAwMDJBNzQ0MDE1OEE5Cis6MTAzRjAwMDAyNjMwMDAwODMyMEYxRkZGMEEwMDAxRjlBRjhGMDAwMEIyCis6MTAzRjEwMDBBRjQwMDE0QzExMjAwMDJDMDAwMDAwMDA4RjU5MEUxMDAyCis6MTAzRjIwMDBBRjU5MDE0NDhGNDMwRTE4MjQwMjAwNDAzQzFGMTAwMDdCCis6MTAzRjMwMDBBRjQzMDE0OEEzNDAwMTUyQTc0MDAxNUFBRjQwMDE2MDdFCis6MTAzRjQwMDBBNzQwMDE1OEFGNDIwMTU0QUY1RjAxNzgwQTAwMDIyNzMxCis6MTAzRjUwMDA4RkJGMDA0NDExMjAwMDA2MDAwMDAwMDA5NzQ2MEUwOEE1Cis6MTAzRjYwMDAzMENDMDA0MDE1ODAwMDAyMDAwMDAwMDAwMDAwMDAwRDcxCis6MTAzRjcwMDA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA5NzUzMEUxMDQyCis6MTAzRjgwMDAzQzEyMDUwMDI0MEUyMDAwMzI2QUZGRkYwMTUyQzAyNUJBCis6MTAzRjkwMDBBRjU4MDE0QzhGNEYwRTE0M0MwMjEwMDBBRjRGMDE0NDNDCis6MTAzRkEwMDA4RjUwMEUxQ0FGNTAwMTQ4QTM0MDAxNTI4Rjg0MDAzODNGCis6MTAzRkIwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjRFMDE1NERECis6MTAzRkMwMDAwQTAwMDIxNUFGNDIwMTc4OEY0OTBFMTRBRjQ5MDE0NDJGCis6MTAzRkQwMDA4RjQzMEUxQzBBMDAwMjhFMjQwMjAwNDAzQzBFMjBGRjdDCis6MTAzRkUwMDAyN0JERkZFMDNDMUE4MDAwM0MwRjgwMDgzNUNERkZGRDY3Cis6MTAzRkYwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMERCCis6MTA0MDAwMDBBRjhGMDA0MEFGNEQwRTAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTA0MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzBDMDBGRjU5Cis6MTA0MDIwMDAzNThCRkZGREFGNEIwRTAwM0MwNjYwMDQ4Q0M5NTAwMDgxCis6MTA0MDMwMDAyNDBBRkY3RjNDMTE2MDAwMDEyQTQwMjQzNTA3MzgwQzE4Cis6MTA0MDQwMDBBQ0M3NTAwMDhFMjQwNDM4MjQwNTAwMDlBRjQ1MDAwODkxCis6MTA0MDUwMDAzMDgzRkZGRjM4NjIyRjcxMjQ1MEMwQjNBRjgwMDA0ODE3Cis6MTA0MDYwMDAwRTAwMDA2OEFGODAwMDAwNTIwMDAwMDFBRTIwNDQyQzFBCis6MTA0MDcwMDAwRTAwMDQzNTNDMTE4MDAwMEUwMDBFQTgzNjMwMDA3MDkyCis6MTA0MDgwMDA4RjhBMDA0MDNDMTIwODAwMjY1MjNCQzgwMjAwODgyMTVCCis6MTA0MDkwMDA4RTA4MDAwMDhGNUYwMDAwM0JGOTAwMDEzMzM4MDAwMUZCCis6MTA0MEEwMDAxMzAwMDAxN0FGODgwMDMwMDIyMDQ4MjE4RDI3MDAwMDQwCis6MTA0MEIwMDAzQzBGMDgwMDhERUYwMDZDM0MwQzA4MDA4RDhDMDA2OEY0Cis6MTA0MEMwMDAwMEU4QzAyMzAxRjgyODIxMDAwMDY4MjEwMEI4MzAyQjQ3Cis6MTA0MEQwMDAwMThENTgyMTAxNjY0MDIxM0MwMTA4MDBBQzI1MDA2QzhGCis6MTA0MEUwMDAzQzAxMDgwMEFDMjgwMDY4OEY0NDAwMDAzODgzMDAwMUMwCis6MTA0MEYwMDAzMDYyMDAwMTE0NDBGRkVEMDBFMDQwMjFBRjg3MDAzMDQ2Cis6MTA0MTAwMDA4RTBDMDAwMDNDMDUwODAwOENBNTAwNkMzQzA0MDgwMEU3Cis6MTA0MTEwMDA4Qzg0MDA2ODAxODgzMDIzMDBBNjM4MjEwMDAwMTAyMTFCCis6MTA0MTIwMDAwMEU2NDAyQjAwODIxODIxMDA2OEY4MjEzQzAxMDgwMEJECis6MTA0MTMwMDBBQzI3MDA2QzNDMDEwODAwQUMzRjAwNjg4RjQ5MDEwMENGCis6MTA0MTQwMDAyNTU5MDA4OEFGOTkwMDQ0QUY4OTAwMzhBRjQ5MDAyMDU1Cis6MTA0MTUwMDA4RTA3MDAwMEFGODcwMDMwOEY0RDAxNzgwNUEwRkZGRTZECis6MTA0MTYwMDAwMDAwMDAwMDhFMDYwMDAwM0MwQjA4MDA4RDZCMDA3NDAwCis6MTA0MTcwMDAzQzA0MDgwMDhDODQwMDcwMDBDNzI4MjMwMTY1RjgyMUU2Cis6MTA0MTgwMDAwMDAwMTAyMTAzRTU0MDJCMDA4MjM4MjEwMEU4QzgyMUZGCis6MTA0MTkwMDAyNDA5MDgwMDNDMDEwODAwQUMzRjAwNzQzQzAxMDgwMDAxCis6MTA0MUEwMDBBQzM5MDA3MEFGNDkwMTc4OTM1ODAxMDhBMzk4MDAzRURDCis6MTA0MUIwMDA5MzhGMDAzRTMxRUUwMDAxMTVDMDAwMTU4RjgzMDAzODRCCis6MTA0MUMwMDAyNDBFMEQwMDEwNkUwMDE5MjQwRjBGMDAxMDZGMDAxRDNCCis6MTA0MUQwMDAwMDAwMDAwMDkxNTkwMDAwMjQxODAwNTAzMzI5MDBGRjBFCis6MTA0MUUwMDAxMTM4MDAwNDNDMUY0MDAwQUY1RjAxMzgwQTAwMDJFN0FECis6MTA0MUYwMDAwMDAwMDAwMDBFMDAwOEVFMDAwMDAwMDA4RjhBMDA0MDYyCis6MTA0MjAwMDAzQzFGNDAwMEFGNUYwMTM4MEEwMDAyRTcwMDAwMDAwMEQ5Cis6MTA0MjEwMDA5MzhEMDAzRTMxQUMwMDA2MDAwQzUxMDAwRTAwMDBDRTI0Cis6MTA0MjIwMDAwMTUyRDgyMTBBMDAwMzQzOEY4QTAwNDAzQzFCMDgwMDNBCis6MTA0MjMwMDAyNzdCM0M0ODBFMDAwMENFMDAwMDAwMDAwQTAwMDM0MzJDCis6MTA0MjQwMDA4RjhBMDA0MDNDMUIwODAwMjc3QjNDNjgwRTAwMDBDRTk0Cis6MTA0MjUwMDAwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDA5MEFBMDAwMTdBCis6MTA0MjYwMDA4RkFCMDAxMDhDQUMwMDEwM0MwMzAwRkY4RDY4MDAwNDg1Cis6MTA0MjcwMDBBRDZDMDAyMDhDQUQwMDE0MDBFMDYwMjEzNDYyRkZGRkMzCis6MTA0MjgwMDBBRDZEMDAyNDhDQTcwMDE4M0MwOUZGMDAwMTA5QzAyNDczCis6MTA0MjkwMDBBRDY3MDAyODhDQUUwMDFDMDE4MkM4MjQwMzE5NzgyNTY0Cis6MTA0MkEwMDBBRDZGMDAwNEFENkUwMDJDOENBRDAwMDgzMTRBMDBGRkVDCis6MTA0MkIwMDBBRDZEMDAxQzk0QTkwMDAyMzEyOEZGRkZBRDY4MDAxMDBECis6MTA0MkMwMDA5MEE3MDAwMEE1NjAwMDAyQTE2MDAwMDRBMTY3MDAwMEEzCis6MTA0MkQwMDA5MEEzMDAwMjMwNjIwMEZGMDAwMjE5ODIxMDYwMDAwNTA2Cis6MTA0MkUwMDAyNDA1MDAwMTEwNjUwMDBFMDAwMDAwMDAwM0UwMDAwODM2Cis6MTA0MkYwMDBBMTZBMDAwMThDRDgwMDI4MzU0QTAwODBBRDc4MDAxOEVBCis6MTA0MzAwMDA4Q0NGMDAxNEFENkYwMDE0OENDRTAwMzBBRDZFMDAwODYxCis6MTA0MzEwMDA4Q0M0MDAyQ0ExNkEwMDAxMDNFMDAwMDhBRDY0MDAwQzBECis6MTA0MzIwMDA4Q0NEMDAxQ0FENkQwMDE4OENDOTAwMTRBRDY5MDAxNDUzCis6MTA0MzMwMDA4Q0M4MDAyNEFENjgwMDA4OENDNzAwMjBBRDY3MDAwQzU1Cis6MTA0MzQwMDA4Q0MyMDAxNDhDODMwMDY0MDA0M0M4MkIxMzIwMDAwNzI4Cis6MTA0MzUwMDAwMDAwMDAwMDhDQzIwMDE0MTQ0Q0ZGRTQwMDAwMDAwMEI4Cis6MTA0MzYwMDAzNTRBMDA4MDAzRTAwMDA4QTE2QTAwMDE4QzgyMDA2NEU1Cis6MTA0MzcwMDAwQTAwMDM5OTAwMDAwMDAwOTBBQTAwMDAyN0JERkZGODgyCis6MTA0MzgwMDA4RkE5MDAxQ0EzQUEwMDAwOEZBRTAwMDAzQzBGRkY4MDg1Cis6MTA0MzkwMDA4RkE4MDAxODM1RTJGRkZGOENDRDAwMkMwMUMyNjAyNEVECis6MTA0M0EwMDBBRkFDMDAwMEExMjAwMDA0MDBFMDYwMjFBN0EwMDAwMjQzCis6MTA0M0IwMDA4RkI4MDAwMDhEMjcwMDA0MDE4ODE4MjEwMEEwNTgyMTIzCis6MTA0M0MwMDAwMEMwNTAyMTAwNkQyODI2M0MwNkZGN0YzQzBGMDBGRkY3Cis6MTA0M0QwMDAyQ0FEMDAwMTM1RUVGRkZGMzREOUZGRkYzQzAyRkYwMDlBCis6MTA0M0UwMDAwMzE5MzAyNDAwMEQxREMwMDEwRUM4MjQwMEUyQzAyNEIyCis6MTA0M0YwMDAwMEMzNzAyNTAzMTk3ODI1QUQyRTAwMDBBRDJGMDAwNEYxCis6MTA0NDAwMDA4RDQ1MDAyNEFGQUUwMDAwQUQyNTAwMDg4RDREMDAyMDg1Cis6MTA0NDEwMDAyNDA1RkZGRkFEMkQwMDBDOTU2ODAwMDIzMTA3RkZGRjVBCis6MTA0NDIwMDBBRDI3MDAxMDkxNjYwMDE4MzBDMjAwRkYwMDAyMTlDMkNCCis6MTA0NDMwMDA1MDYwMDAwMThENDUwMDM0QUQyNTAwMTQ4RDY3MDAwOEUzCis6MTA0NDQwMDAyN0JEMDAwOEFEMjcwMDFDOEM4QjAwQ0NBRDJDMDAyOEFDCis6MTA0NDUwMDBBRDIwMDAyQ0FEMkIwMDI0QUQyMDAwMTgwM0UwMDAwODk3Cis6MTA0NDYwMDBBRDIwMDAyMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGCis6MTA0NDcwMDBBRkIwMDAxMEFGQkYwMDFDOTA5ODAwMDAwMEMwODgyMUIyCis6MTA0NDgwMDAzQzBEMDBGRjMzMEYwMDdGQTBDRjAwMDA5MDhFMDAwMTk1Cis6MTA0NDkwMDAzNUFDRkZGRjNDMEFGRjAwQTBDRTAwMDE5NEE2MDAxRTMxCis6MTA0NEEwMDBBMjIwMDAwNDhDQUIwMDE0OEUyOTAwMDQwMEEwODAyMUZGCis6MTA0NEIwMDAwMTZDMjgyNDAxMkE0MDI0MDA4MDkwMjEwMTA1MjAyNTM4Cis6MTA0NEMwMDBBNjI2MDAwMkFFMjQwMDA0MjYwNTAwMjAyNjI0MDAwOEFCCis6MTA0NEQwMDAwRTAwMDA3NjI0MDYwMDAyOTI0NzAwMDAyNjA1MDAyODAwCis6MTA0NEUwMDAyNjI0MDAxNDAwMDcxRTAwMDAwMzE2MDMyNDA2MDAwNEZGCis6MTA0NEYwMDAwNDQwMDAwMzI0MDNGRkZGOTY1OTAwMDIzMzIzRkZGRjBCCis6MTA0NTAwMDAwRTAwMDA3NkFFMjMwMDEwMjYyNDAwMjQ4RkJGMDAxQzZFCis6MTA0NTEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwMzczCis6MTA0NTIwMDAwMDAwMzAyMTBBMDAwMDgwMjdCRDAwMjAyN0JERkZEOEYxCis6MTA0NTMwMDBBRkIxMDAxQ0FGQjAwMDE4QUZCRjAwMjA5MEE4MDAwMEMyCis6MTA0NTQwMDAyNDAyMDAwMThGQjAwMDNDMzEwMzAwM0YwMDgwODgyMTJECis6MTA0NTUwMDAxMDYyMDAxNDhGQUEwMDM4MjQwQjAwMDU1MDZCMDAxNjVGCis6MTA0NTYwMDBBRkFBMDAxMDAwQTAyMDIxMDBDMDI4MjEwRTAwMDNEQzBCCis6MTA0NTcwMDAwMjAwMzAyMTkyMjQwMEJDMzA4MzAwMDIxMDYwMDAwMzRFCis6MTA0NTgwMDAyNjA2MDAzMEFDQzAwMDAwMjRDNjAwMDQ4RkJGMDAyMDA3Cis6MTA0NTkwMDA4RkIxMDAxQzhGQjAwMDE4MDBDMDEwMjEwM0UwMDAwODhDCis6MTA0NUEwMDAyN0JEMDAyODAxNDAzODIxMEUwMDAzNUFBRkIwMDAxMDhCCis6MTA0NUIwMDAwQTAwMDQyMDAwMDAwMDAwMEUwMDAzQTFBRkIwMDAxNEE4Cis6MTA0NUMwMDAwQTAwMDQyMDAwMDAwMDAwM0MwMjAwMEEwMzQyMTgyMUY3Cis6MTA0NUQwMDAzQzA0MDgwMDI0ODQzQ0FDMjQwNTAwMUEwMDAwMzAyMTZGCis6MTA0NUUwMDAwQTAwMDA4MEFGODMwMDU0M0MwMzgwMDAzNDYyMDA3MEY2Cis6MTA0NUYwMDA4QzQ4MDAwMDAwQTA1ODIxMDBDMDQ4MjEzMDhBMDBGRkVDCis6MTA0NjAwMDBBRjg4MDAzMDhGNDQwMTc4MDQ4MEZGRkUzQzBDODAwMEFFCis6MTA0NjEwMDAzNTg2MDA3MDhDQzUwMDAwM0MwMzA4MDA4QzYzMDA3NDc0Cis6MTA0NjIwMDAzQzE4MDgwMDhGMTgwMDcwMDBBODIwMjMwMDY0NjgyMTNGCis6MTA0NjMwMDAwMDAwQzgyMTAxQTQ3ODJCMDMxOTcwMjEwMUNGNjAyMTRCCis6MTA0NjQwMDAzQzAxMDgwMEFDMkQwMDc0M0MwMTA4MDBBQzJDMDA3MDRCCis6MTA0NjUwMDA4RjQ4MEUxNEFGNDgwMTQ0QUY0NzAxNENBMzRBMDE1MkEyCis6MTA0NjYwMDBBNzRCMDE1ODkzNDYwMTA4MzBDNTAwMDg1NEEwMDAwMTJCCis6MTA0NjcwMDAzNTI5MTAwMDkzNEIwOTAwMjQwNzAwNTAzMTZBMDBGRkQwCis6MTA0NjgwMDAxMTQ3MDAwNzAwMDAwMDAwOEY0NTBFMUNBRjQ1MDE0ODkwCis6MTA0NjkwMDBBRjQ5MDE1NDNDMDkxMDAwMDNFMDAwMDhBRjQ5MDE3ODFDCis6MTA0NkEwMDA5MzREMDEwODMxQTgwMDA4MTEwMDAwMTAwMDAwMDAwMDFGCis6MTA0NkIwMDA5MzRGMDEwODMxRUUwMDEwNTFDMDAwMDEzNTI5MDAwODY4Cis6MTA0NkMwMDAzQzA0MDgwMDkwODQzRDEwQTM0NDAxNTA4RjQzMDlBNDhBCis6MTA0NkQwMDBBRjQzMDE0ODhGNDIwOUEwQUY0MjAxNDRBRjQ5MDE1NEEyCis6MTA0NkUwMDAzQzA5MTAwMDAzRTAwMDA4QUY0OTAxNzgzQzE5MDgwMEJDCis6MTA0NkYwMDA4RjM5M0NDQzMzMzgwMDA4NTcwMEZGRjEzNTI5MDAwOENBCis6MTA0NzAwMDAwQTAwMDQ3MzAwMDAwMDAwMjQwNzAwNDBBRjQ3MDgxNEFCCis6MTA0NzEwMDBBRjQwMDgxMDhGNDIwOTQ0OEY0MzA5NTA4RjQ0MDk1NDE5Cis6MTA0NzIwMDA4RjQ1MDk1QzhGNDYwOTRDQUY4MjAwNjRBRjgzMDA1MDBGCis6MTA0NzMwMDBBRjg0MDA0Q0FGODUwMDVDMDNFMDAwMDhBRjg2MDA2MEVBCis6MTA0NzQwMDA5MzQ2MDEwOTMwQzUwMDdGMDAwNTE4QzAwMDA1MjE0MENGCis6MTA0NzUwMDAwMDgzMTAyMTAzRTAwMDA4MjQ0MjAwODgzQzBBMDgwMDdFCis6MTA0NzYwMDA5MTRBM0NEMTNDMDkwODAwOTUyOTNDQ0EzQzA1MTEwMEZFCis6MTA0NzcwMDAwMDBBM0MwMDI1MjgwMDAyMDBFODMwMjUwMEM1MTgyNTY1Cis6MTA0NzgwMDAyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDhBQzgwMDAwNDMxCis6MTA0NzkwMDA4RjRBMDAyQzk3NEUwOTA4M0MwRjAwMEUwMzRGMzgyMTFBCis6MTA0N0EwMDAzMUNERkZGRjAwMEQ0MUMwQUY0ODAwMkM5NzQzMDkwOEYxCis6MTA0N0IwMDA5NEVDMDAxQTAwODA0MDIxMjQwMjAwMDEzMThCRkZGRjlECis6MTA0N0MwMDBBQzhCMDAwMDhDRTkwMDFDMDBBMDU4MjEwMEMwNjAyMUM3Cis6MTA0N0QwMDBBQzg5MDAwNDhDRTQwMDIwQUQwNDAwMDg5MEUzMDAxOUNCCis6MTA0N0UwMDAzMDYzMDAwMzEwNjIwMDQwMDAwMDAwMDAyODY1MDAwMkYyCis6MTA0N0YwMDAxNEEwMDA3MzI0MDYwMDAyMTA2NjAwNEUwMDAwMDAwMEEyCis6MTA0ODAwMDAyNDE4MDAwMzEwNzgwMDU3MDAwMDAwMDAzQzA5MDgwMDNECis6MTA0ODEwMDA5NTI5M0NDMDkzNDUwOTM0OTM0NjA5MjEzQzBFMDgwMDc0Cis6MTA0ODIwMDA5NUNFM0NDNjMwQTIwMEZGMDAwMkM4ODI5NEU1MDAyQTYzCis6MTA0ODMwMDAzMEM0MDBGRjk3ODcwMDU4MDAxOUM2MDAwMDA0MUMwMDEwCis6MTA0ODQwMDAzMTJGRkZGRjAzMDMxMDI1MDFDRjY4MjEwMDREQzgyNTNDCis6MTA0ODUwMDAwMEE3MjAyMTNDMDY0MDAwMDMyNkMwMjUwMDA0NEMwMDkwCis6MTA0ODYwMDBBRDA5MDAwNEFEMTgwMDAwOTM0RjA5MjAzQzAzMDAwNjc5Cis6MTA0ODcwMDAyNTA5MDAxNDAwMEY3NjAwMDFDMzY4MjVBRDBEMDAwODVFCis6MTA0ODgwMDA4RjQyMDkyQzI0RTUwMDAxMzBBNjdGRkZBRDAyMDAwQzA5Cis6MTA0ODkwMDA4RjU5MDkzMDI1MDIwMDI4QTc4NjAwNThBRDE5MDAxMDRECis6MTA0OEEwMDA4RjQ0MDkzOEFEMDQwMDE0QUQyQjAwMDQ4RjU4MDk0MDIzCis6MTA0OEIwMDBBRDM4MDAwODkzNEYwOTM3M0MwRDA4MDA5MUFEM0NEMDRFCis6MTA0OEMwMDBBRDIwMDAxMDMxRUUwMEZGMDFDQzE4MjEwMDAzNjcwMDdECis6MTA0OEQwMDAwMDBENDQwMDAxODg1ODI1MzU2N0ZGRkZBRDI3MDAwQzA3Cis6MTA0OEUwMDAwM0UwMDAwOEFGNEEwMDJDM0MwOTA4MDA5NTI5M0NDMEIxCis6MTA0OEYwMDAzQzA1MDgwMDk0QTUzQ0NBM0MwRjA4MDA5NUVGM0NCQzYxCis6MTA0OTAwMDA5NEU0MDAyNDMxMjZGRkZGMDBBNjcwMjEwMUNGNjgyMzI0Cis6MTA0OTEwMDAwMDA0MUMwMDI1QTJGRkYyMDA2MkM4MjUyNDE4MDgwMDJDCis6MTA0OTIwMDBBRDE5MDAwQ0FEMTgwMDE0QUQwMDAwMTAwQTAwMDRDODQ5Cis6MTA0OTMwMDAyNTA4MDAxODk0RTYwMDI0OTRFNTAwMjgzQzA5MDgwMEE2Cis6MTA0OTQwMDA5NTI5M0NDMDAwMDY3QzAwMDAwNTc0MDAzNUVEODEwMDBGCis6MTA0OTUwMDAzNUM0MDgwMEFEMEQwMDBDQUQwNDAwMTAwQTAwMDRDOEY5Cis6MTA0OTYwMDAyNTA4MDAxNDNDMDkwODAwOTUyOTNDQzAzQzAyMDgwMEI5Cis6MTA0OTcwMDA5NDQyM0NDQTNDMDYwODAwOTRDNjNDQkM5NEU0MDAyNDIzCis6MTA0OTgwMDAzMTI1RkZGRjk0RjgwMDI4MDA0NUM4MjEwMzI2NzgyMzJECis6MTA0OTkwMDAwMDE4MUMwMDAwMDQ2QzAwMjVFRUZGRUUwMDZFQzgyNTE4Cis6MTA0OUEwMDAzNUEyODEwMDI0MTgwODAwQUQwMjAwMENBRDE5MDAxMERBCis6MTA0OUIwMDBBRDE4MDAxOEFEMDAwMDE0MEEwMDA0QzgyNTA4MDAxQzNBCis6MTA0OUMwMDAxNDYwRkY5MjAwMDAwMDAwOTRFMzAwMjQzQzA5MDgwMEZBCis6MTA0OUQwMDA5NTI5M0NDMDAwMDMxNDAwMzQ1OTA4MDBBRDE5MDAwQzlGCis6MTA0OUUwMDAwQTAwMDRDODI1MDgwMDEwMDNFMDAwMDgyNDAyMDFGNEFFCis6MTA0OUYwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQwRTAwMDA2MDhECis6MTA0QTAwMDAwMDgwODAyMTI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1MEFBCis6MTA0QTEwMDA4Rjg0MDA0QzhGODUwMDVDMDA3MDE4MjEwMDY0MTAyMzg3Cis6MTA0QTIwMDAxODQwMDAwNEFGODMwMDUwQUY2MzAwNTQ4RjY2MDA1NEY5Cis6MTA0QTMwMDBBRjg2MDA0QzEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDkwCis6MTA0QTQwMDA5MzY4MDA4MTM0MDlGQTAwMkQwNzAwMDcxMEUwMDAwNTgzCis6MTA0QTUwMDAwMDg5MTAyMTkzNkMwMDgxMjQwQjAxRjQwMThCNTAwNDE4Cis6MTA0QTYwMDAwMTQ0MTAyMUFGNjIwMDBDOEY0RTA5NUMwMUM1NjgyMzIwCis6MTA0QTcwMDAxOUEwMDAwNDhGQkYwMDE0OEY0RjA5NUNBRjhGMDA1QzNBCis6MTA0QTgwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwNjIyN0JEMDAxODBECis6MTA0QTkwMDA4Rjg0MDA2NDhGODMwMDUwOEY4MjAwNENBRjY0MDA0NDg5Cis6MTA0QUEwMDBBRjYzMDA1MDAzRTAwMDA4QUY2MjAwNTQzQzAzODAwMDk1Cis6MTA0QUIwMDAzNDYyMDA3MDhDNDMwMDAwMjdCREZGRjgzMDg3MDBGRjkwCis6MTA0QUMwMDAzMEE5MDBGRjMwQzgwMEZGQUY4MzAwMzA4RjQ0MDE3ODY5Cis6MTA0QUQwMDAwNDgwRkZGRTNDMDI4MDAwMzQ1OTAwNzA4RjM4MDAwMEQzCis6MTA0QUUwMDBBM0E3MDAwMzNDMDcwODAwOENFNzAwNzQ4RkFDMDAwMDBDCis6MTA0QUYwMDAzQzA2MDgwMDhDQzYwMDcwMDMwMzc4MjMzQzBFN0ZGRjQxCis6MTA0QjAwMDAwMEVGQzgyMTM1Q0RGRkZGMDAwMDUwMjEwMThEMjgyNDgyCis6MTA0QjEwMDAwMENBMTgyMTAwMDg0N0MwMDMyRjIwMkIwMEE4MTAyNTI5Cis6MTA0QjIwMDAwMDY0QzAyMUFGQTIwMDAwM0MwMTA4MDBBQzM5MDA3NDUxCis6MTA0QjMwMDAzQzAxMDgwMEFDMzgwMDcwOTM0RjAxMEFBM0EwMDAwMkFBCis6MTA0QjQwMDAzQzBFODBGRkEzQUYwMDAxOEZBQzAwMDAzMTJCMDA3RjMzCis6MTA0QjUwMDAzNUNERkZGRjAxOEQ0ODI0MDAwQjU2MDAwMTJBNDAyNTZBCis6MTA0QjYwMDAyNDA3MzAwMDI0MDZGRjgwM0MwNTEwMDAyN0JEMDAwODA0Cis6MTA0QjcwMDBBRjQ4MDE0Q0FGNDcwMTU0QTc0MDAxNThBMzQ2MDE1MjJBCis6MTA0QjgwMDAwM0UwMDAwOEFGNDUwMTc4MjdCREZGRThBRkJGMDAxNDgwCis6MTA0QjkwMDBBRkIwMDAxMDhGNjUwMDc0M0MwNjgwMDAzMDkwMDBGRkJECis6MTA0QkEwMDAwMEE2MjAyNTBFMDAwMDYwQUY2NDAwNzQ5MzYzMDAwNTJBCis6MTA0QkIwMDAzNDYyMDAwODBFMDAwMDYyQTM2MjAwMDUwMjAwMjAyMTlBCis6MTA0QkMwMDA4RkJGMDAxNDhGQjAwMDEwMjQwNTAwMDUyNDA2MDAwMURCCis6MTA0QkQwMDAwQTAwMDU2RTI3QkQwMDE4MjdCREZGRTAzQzAzODAwMERBCis6MTA0QkUwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzNDYyMDA3MDU2Cis6MTA0QkYwMDA4QzQ3MDAwMDMwOTAwMEZGMzBBODAwRkZBRjg3MDAzMEU2Cis6MTA0QzAwMDA4RjQ0MDE3ODA0ODBGRkZFM0MxODgwMDAzNzExMDA3MDRCCis6MTA0QzEwMDA4RTJGMDAwMDNDMEQwODAwOERBRDAwNzQzQzBBMDgwMDhBCis6MTA0QzIwMDA4RDRBMDA3MDAxRTc3MDIzMDFBRTI4MjEwMDAwNTgyMTUxCis6MTA0QzMwMDAwMEFFMzAyQjAxNEI0ODIxMDEyNjM4MjEzQzAxMDgwMEYxCis6MTA0QzQwMDBBQzI1MDA3NDAwMDA4ODIxM0MwMTA4MDBBQzI3MDA3MEVFCis6MTA0QzUwMDAxMTAwMDAwRjAwMDAwMDAwOEY2MjAwNzQyNjE5RkZGRjkyCis6MTA0QzYwMDAzMjA4MDA3RjAwMDJGRTAyMzNFNTAwN0YxNTAwMDAwNkQ3Cis6MTA0QzcwMDAzMzIyMDBGRjI0MDdGRjgwMDIwNzIwMjYyNEEzRkZGRjIyCis6MTA0QzgwMDAwMDgzODAyNTMyMDIwMEZGMDA0MDgwMjEyNDExMTAwODlCCis6MTA0QzkwMDAwRTAwMDA2MDAwMDAwMDAwOEY0OTA4MTgzMTI1MDAwNDU0Cis6MTA0Q0EwMDAxNEEwRkZGRDMyMTgwMDdGMDAxODc4QzAwMDE4NzE0MDcyCis6MTA0Q0IwMDAwMUNGNjgyMTI1QUMwMDg4QUY0QzA4MTgyNzRBMDk4MDJECis6MTA0Q0MwMDA4RDRCMDAyMEFGNEIwMTQ0OEQ0NjAwMjRBRjQ2MDE0ODc4Cis6MTA0Q0QwMDBBMzUwMDE1MDBFMDAwMDYyQTc0MDAxNTgwMjIwMTAyMThECis6MTA0Q0UwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEQwCis6MTA0Q0YwMDAyN0JEMDAyMDI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMEI0Cis6MTA0RDAwMDAwRTAwMDVCOTMwQTUwMEZGOEY4MzAwNTA4RkJGMDAxMDQzCis6MTA0RDEwMDAzNDQ1MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxOEQ5Cis6MTA0RDIwMDBBRjQzMDE0Q0EzNDQwMTUyQUY0NTAxNTQwM0UwMDAwOEQ2Cis6MTA0RDMwMDBBRjQyMDE3ODkzNDMwOTNFMzA2MjAwMDgxMDQwMDAwREY1Cis6MTA0RDQwMDAzQzA5MDEwMTM1MjgwODBBQUM4ODAwMDA4RjQ3MDA3NDJGCis6MTA0RDUwMDBBQzg3MDAwNDNDMDYwODAwOTBDNjNDRDAzMEM1MDAxMDZCCis6MTA0RDYwMDA1MEEwMDAwNkFDODAwMDA4OEY2QTAwNjBBQzhBMDAwODgyCis6MTA0RDcwMDAyNDg0MDAwQzAzRTAwMDA4MDA4MDEwMjEwQTAwMDYyMEIzCis6MTA0RDgwMDAyNDg0MDAwQzI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMEIzCis6MTA0RDkwMDA5MzQ2MDkzRjAwQTA1MDIxMDAwNTI4ODAwMDg1MzgyMzU0Cis6MTA0REEwMDAzMEMyMDBGRjI0MDMwMDA2M0MwOTA4MDA5NTI5M0NDNkQ4Cis6MTA0REIwMDAyNEU4RkZEODI0MDUwMDA0MTA0MzAwMzcyNDA2MDAwMjJECis6MTA0REMwMDA5NzUwMDkzQzNDMEYwMjA0MDAwNjM0MDAzMjBFRkZGRkVFCis6MTA0REQwMDAwMUNGNjgyNUFDOEQwMDAwOTM0QzA5M0UzMThCMDAyMDNCCis6MTA0REUwMDAxMTYwMDAwODAwMDAwMDAwOTM0MzA5MzYzQzAyMDEwM0YzCis6MTA0REYwMDAzNDVGMDMwMDMwNzkwMEZGMDMzRkMwMjUyNDA1MDAwODFECis6MTA0RTAwMDBBQzk4MDAwNDkzNDMwOTM0OTM1OTA5MjEwMDA1Rjg4MkIyCis6MTA0RTEwMDAzMDYyMDBGRjAwMDJDMDgyMzMyRjAwRkYwMDE4NkUwMEQ2Cis6MTA0RTIwMDAwMDBGNzQwMDAxQUU2MDI1MDE4OTIwMjUzQzA5NDAwMDc3Cis6MTA0RTMwMDAwMDg5ODAyNUFDRjBGRkQ4OTM0MzA5Mzc4RjRGMDk0ODhDCis6MTA0RTQwMDA4RjU4MDk0MDMwNjIwMEZGMDA0QUM4MjEwMzNGNzAyMTlCCis6MTA0RTUwMDAwMUY4NjAyMzAwMEU2RjAwMDFBNjUwMjUzMTg1RkZGRjg5Cis6MTA0RTYwMDAwMDFGNTg4MDAxNDU0ODI1MDE2ODM4MjFBRDA5MDAyMDAwCis6MTA0RTcwMDAwRTAwMDA2MDI0RjAwMDI4MjQwNDAwMDQwRTAwMDA2MkVDCis6MTA0RTgwMDBBMzY0MDAzRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMEY4Cis6MTA0RTkwMDAwM0UwMDAwODI3QkQwMDE4MEEwMDA2MzMyNDA2MDAxMkFDCis6MTA0RUEwMDAyN0JERkZEMDI0MDkwMDEwQUZCNjAwMjhBRkI1MDAyNEZECis6MTA0RUIwMDBBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTAzQzAxMDgwMDQ3Cis6MTA0RUMwMDBBMDI5M0NEMEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODdDCis6MTA0RUQwMDA5NzQ4MDkwODMwOTUwMEZGM0MwMjAwMEUzMTA3RkZGRjlDCis6MTA0RUUwMDAwMDA3MzFDMEFGNDYwMDJDOTc0NDA5MDg5MzQ0MDEwQkRBCis6MTA0RUYwMDAzMEI0MDBGRjAzNDI4MDIxMzA4MzAwMzAwMDAwQjAyMTM1Cis6MTA0RjAwMDAxMDYwMDEwNzAwMDA4ODIxMjQwQzAwMDQzQzAxMDgwMDA3Cis6MTA0RjEwMDBBMDJDM0NEMDkzNEIwOTNFMDAwQjU2MDAwMDBBMkUwM0Y4Cis6MTA0RjIwMDAwNEEwMDE0QjAwMDAwMDAwQUY0MDAwNDg5MzRGMDEwQjZDCis6MTA0RjMwMDAzMUVFMDAyMDExQzAwMDA2MDAwMDAwMDA5MzU4MDkzRTI5Cis6MTA0RjQwMDAwMDE4OUUwMDAwMTM5NjAzMDY0MDAxNkIwMDAwMDAwMDRECis6MTA0RjUwMDA5MzQ0MDEwQjMwODMwMDQwMTA2MDAwMDM4RjkzMDA1MDk2Cis6MTA0RjYwMDA4RjgyMDA1MDI0NTNGRkZGOTM0NzA5M0UzMEU2MDAwODJDCis6MTA0RjcwMDAxNEMwMDAwMjI0MTIwMDAzMDAwMDkwMjE5NjE5MDAyQzk2Cis6MTA0RjgwMDA5MzU4MDkzNDkzNEYwOTM3QTc5OTAwNTgzMzBDMDBGRjAxCis6MTA0RjkwMDAzMUVFMDBGRjAyNEU2ODIxMDAwRDU4ODAwMTZDNTAyMTU3Cis6MTA0RkEwMDAwMTUxNDAyMTNDMDEwODAwQTQyODNDQzY5MjA1MDAxODhDCis6MTA0RkIwMDAzMEE5MDBGRjAxMDkxODIxM0MwMTA4MDBBNDIzM0NDOEM2Cis6MTA0RkMwMDA5MjExMDAxODE2MjAwMDAzMjQ2NzAwMEEwMDAwMDAwRDRCCis6MTA0RkQwMDAyNDY3MDAwQTMwRjBGRkZGM0MwMTA4MDBBNDIzM0NDQTBDCis6MTA0RkUwMDAzQzAxMDgwMEE0MjAzQ0MwM0MwMTA4MDBBNDIwM0NCQ0JCCis6MTA0RkYwMDAwRTAwMDA5RTAyMDAyMDIxMEUwMDA0OUEwMDQwMjAyMTk1Cis6MTA1MDAwMDA4RjRCMDAyQzk3NEEwOTA4M0MwQzAwMEUwMzRDMzgyMUFBCis6MTA1MDEwMDAzMTQ1RkZGRjAwMDU0OUMwQUY0OTAwMkM5NzQzMDkwOEZGCis6MTA1MDIwMDA5NEYxMDAxQTAwNDA0MDIxMjQxRjAwMDEzMjI2RkZGRkE2Cis6MTA1MDMwMDBBQzQ2MDAwMDhDRTIwMDFDQUQwMjAwMDQ4Q0U0MDAyMEIxCis6MTA1MDQwMDBBRDA0MDAwODkwRTMwMDE5MzA2MzAwMDMxMDdGMDBENjIwCis6MTA1MDUwMDAyODZEMDAwMjE1QTAwMTFDMjQwRTAwMDIxMDZFMDEwRTI2Cis6MTA1MDYwMDAyNDBGMDAwMzEwNkYwMEUzMDAwMDAwMDAzQzA5MDgwMDVCCis6MTA1MDcwMDA5NTI5M0NDMDkzNEUwOTM0OTM1MTA5MjEzQzBBMDgwMEZDCis6MTA1MDgwMDA5NTRBM0NDNjMxQ0QwMEZGOTRGOTAwMkEwMDBEMTg4MkU0Cis6MTA1MDkwMDA5Nzg3MDA1ODMyMkMwMEZGMDAwMzJFMDAwMDBDMjQwMERDCis6MTA1MEEwMDAzMTI2RkZGRjMxNDJGRkZGMDBBNEY4MjUwMDQ2NDgyMUNBCis6MTA1MEIwMDAwM0U5NzgyNTAzMjc3MDIxM0MxODQwMDAwMUY4NjgyNTkyCis6MTA1MEMwMDAwMDBFOEMwMEFEMEQwMDAwQUQxMTAwMDQ5MzRDMDkyMEMyCis6MTA1MEQwMDAzQzAzMDAwNjI1MTEwMDE0MDAwQzJFMDAwMEEzMTAyNTJGCis6MTA1MEUwMDBBRDAyMDAwODhGNDkwOTJDMjRFNDAwMDEzMDlGN0ZGRkE2Cis6MTA1MEYwMDBBRDA5MDAwQzhGNDYwOTMwMjUwOTAwMjhBNzlGMDA1OEVDCis6MTA1MTAwMDBBRDA2MDAxMDhGNTkwOTM4MDEyMDMwMjFBRDE5MDAxNDY3Cis6MTA1MTEwMDBBRTMzMDAwNDhGNTgwOTQwQUUzODAwMDg5MzRGMDkzNzZBCis6MTA1MTIwMDAzQzBDMDgwMDkxOEMzQ0QwQUUyMDAwMTAzMUVFMDBGRjBBCis6MTA1MTMwMDAwMUQyNjgyMTAwMEQyRjAwMDAwQzFDMDAwMEEzMTAyNUQ3Cis6MTA1MTQwMDAzNDQ3RkZGRkFFMjcwMDBDQUY0QjAwMkM5MzRCMDkzRUJBCis6MTA1MTUwMDAzMTczMDAwODEyNjAwMDBEM0MwRjAxMDEzNUU3MDgwQUE5Cis6MTA1MTYwMDBBRDA3MDAyODhGNEIwMDc0QUQyQjAwMDQzQzEzMDgwMEUyCis6MTA1MTcwMDA5MjczM0NEMDMyNjgwMDEwNTEwMDAwMDNBRDIwMDAwODRCCis6MTA1MTgwMDA4Rjc4MDA2MEFEMzgwMDA4MjUyNjAwMEMxMkMwMDAzODZBCis6MTA1MTkwMDAwMDAwMDAwMDkzNUYwOTNGMjQxNjAwMDYyNDA3MDAwNDY2Cis6MTA1MUEwMDAzM0Y5MDBGRjEzMzYwMEQyMjQwODAwMDI5NzQzMDkzQzZDCis6MTA1MUIwMDAzQzBDMDIwNDMwNjRGRkZGMDA4QzI4MjVBQ0M1MDAwMEM1Cis6MTA1MUMwMDA5MzQyMDkzRTMwNDkwMDIwMTEyMDAwMDgwMDAwMDAwMEYxCis6MTA1MUQwMDA5MzRCMDkzNjNDMTMwMTAzMzY2RTAzMDAzMTZEMDBGRjFCCis6MTA1MUUwMDAwMUFFODgyNUFDRDEwMDA0MjQwNzAwMDg5MzQ5MDkzNDk2Cis6MTA1MUYwMDA5MzU5MDkyMTMxNEJGRkZGMzEzRjAwRkYwMDFGQjA4MjVGCis6MTA1MjAwMDAzMzM4MDBGRjAwMTY1NjAwMDAxODdDMDAwMTRGOTgyNTI3Cis6MTA1MjEwMDAwMDEyMjg4MDAyNkI2ODI1M0MwRTQwMDAwMEM1NTAyMzE4Cis6MTA1MjIwMDAwMUFFODgyNUFENTFGRkQ4OTM0MzA5Mzc4RjVGMDk0OEY4Cis6MTA1MjMwMDA4RjQ5MDk0MDMwNkMwMEZGMDE5MjEwMjEwMDA3MjA4MjQ1Cis6MTA1MjQwMDAwMDQ0QzgyMTAzRTk3ODIzMDAxOUM3MDAwMDA4QjQwMDBFCis6MTA1MjUwMDAwMzE2NDAyNTMxRTdGRkZGMDEwNzMwMjUwRTAwMDA2MEVGCis6MTA1MjYwMDBBRDQ2RkZGODI0MTIwMDA0MEUwMDAwNjJBMzcyMDAzRjU2Cis6MTA1MjcwMDAwRTAwMDBDNzAyMDAyMDIxM0MxMjA4MDA5MjUyM0NEMEQwCis6MTA1MjgwMDAzMjUwMDAwMzEyMDAwMDBGMDJBMDIwMjE4RjgyMDA1MDM0Cis6MTA1MjkwMDAyNDQ3MDAwMUFGODcwMDUwQUY2NzAwNTA4RjY4MDA1NDZCCis6MTA1MkEwMDAwMTA3MzAyMzE4QzAwMDAyMDBFMDIwMjE4RjY0MDA1NDYxCis6MTA1MkIwMDBBRjY0MDA1NDhGNEMwMDc0MjU4NDAxRjRBRjY0MDAwQzdCCis6MTA1MkMwMDAwMkEwMjAyMTAyODAyODIxQTc2MDAwNjgwRTAwMDVCOUY1Cis6MTA1MkQwMDAzQzE0MTAwMDhGOEQwMDUwMzQ1NTAwMDZBRjREMDE0QzJBCis6MTA1MkUwMDA4RjkxMDA0ODhGQkYwMDJDOEZCNjAwMjgyNjIzMDAwMTI1Cis6MTA1MkYwMDBBRjgzMDA0ODhGQjMwMDFDQTM1MTAxNTI4RkIyMDAxODM2Cis6MTA1MzAwMDBBRjU1MDE1NDhGQjEwMDE0QUY1NDAxNzg4RkI1MDAyNDBDCis6MTA1MzEwMDA4RkI0MDAyMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMERDCis6MTA1MzIwMDA5MzU4MDkzRTAwMTg5RTAwMDAxMzk2MDMwNjQyMDA1MTUwCis6MTA1MzMwMDAyNDExMDAwMjkzNDQwOTIzMzA4MzAwMDIxMDYwRkVGQjE1Cis6MTA1MzQwMDA4Rjg2MDA2MDhGODIwMDUwMTRDMkZFRjgwMDAwMDAwMEJCCis6MTA1MzUwMDAwRTAwMDA2MDAwMDAwMDAwOTM2OTAwM0YyNDA3MDAxNjYzCis6MTA1MzYwMDAzMTI4MDBGRjExMDcwMDBDMjQwNTAwMDgzQzBDMDgwMDQwCis6MTA1MzcwMDA5MThDM0NEMDM1OEIwMDAxM0MwMTA4MDBBMDJCM0NEMDI3Cis6MTA1MzgwMDA5MzZBMDAzRjMxNDMwMEZGMTA2NTAwNjUyNDBEMDAwQTU5Cis6MTA1MzkwMDAxMDZEMDA1RTI0MDIwMDBDMEUwMDAwNjIwMDAwMDAwMDkwCis6MTA1M0EwMDAwQTAwMDY4RTAwMDAwMDAwM0MwOTA4MDA5NTI5M0NDMDU4Cis6MTA1M0IwMDAzQzA0MDgwMDk0ODQzQ0NBM0MxRjA4MDA5N0ZGM0NCQzk2Cis6MTA1M0MwMDA5NEY4MDAyNDMxMjNGRkZGMDA4M0M4MjEwMzNGNzgyMzkyCis6MTA1M0QwMDAwMDE4NkMwMDI1RUVGRkYyMDFBRTYwMjUyNDBBMDgwMERCCis6MTA1M0UwMDBBRDBDMDAwQ0FEMEEwMDE0QUQwMDAwMTAwQTAwMDZFMDgwCis6MTA1M0YwMDAyNTA4MDAxODNDMDkwODAwOTUyOTNDQzAzQzFGMDgwMEZFCis6MTA1NDAwMDA5N0ZGM0NDQTNDMTkwODAwOTczOTNDQkM5NEVGMDAyNDM0Cis6MTA1NDEwMDAzMTI0RkZGRjk0RUUwMDI4MDNFNEMwMjEwMzE5NjgyMzIwCis6MTA1NDIwMDAwMDBGMkMwMDAwMEU1NDAwMjVBQ0ZGRUUwMTRDODgyNTI3Cis6MTA1NDMwMDAzNEEyODEwMDI0MDYwODAwQUQwMjAwMENBRDExMDAxMDVBCis6MTA1NDQwMDBBRDA2MDAxOEFEMDAwMDE0MEEwMDA2RTAyNTA4MDAxQzk3Cis6MTA1NDUwMDA4RjZFMDA4NDhGNEQwOTQwMTFBMEZFQjNBRjhFMDA1MEI3Cis6MTA1NDYwMDAyNDBGMDAxNDNDMDEwODAwQTAyRjNDRDAwQTAwMDY4RDM4Cis6MTA1NDcwMDAwMDAwMDAwMDNDMDEwODAwQTAzMTNDRDA5MzVGMDkzRUQxCis6MTA1NDgwMDAyNDE2MDAwMTMzRjkwMDIwMTcyMEZFQTgyNDExMDAwODdCCis6MTA1NDkwMDAwQTAwMDY4RTI0MTEwMDA0OTRFNTAwMjQ5NEYxMDAyOEVCCis6MTA1NEEwMDAzQzA5MDgwMDk1MjkzQ0MwMDAwNTE0MDAwMDExMzQwMDk3Cis6MTA1NEIwMDAzNDQ0ODEwMDM0QzMwODAwQUQwNDAwMENBRDAzMDAxMDc3Cis6MTA1NEMwMDAwQTAwMDZFMDI1MDgwMDE0MTQ2MEZFRTgwMDAwMDAwMDUxCis6MTA1NEQwMDA5NEZGMDAyNDNDMDkwODAwOTUyOTNDQzAwMDFGQ0MwMDIzCis6MTA1NEUwMDAzNzM4MDgwMEFEMTgwMDBDMEEwMDA2RTAyNTA4MDAxMDQ3Cis6MTA1NEYwMDAwQTAwMDcyRTI0MDgwMDEyOEY3RjAwNENBRjdGMDA1NDUzCis6MTA1NTAwMDA4Rjc5MDA1NDBBMDAwNjk3QUY3OTAwNTBBMzYyMDAzRkRDCis6MTA1NTEwMDAwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OEUwMDAwMDAwMDdECis6MTA1NTIwMDAyNDAyMDAxNDBBMDAwODA3QTM2MjAwM0YyN0JERkZFODE5Cis6MTA1NTMwMDAzMDg0MDBGRkFGQkYwMDEwMEUwMDA1QjkzMEE1MDBGRjlBCis6MTA1NTQwMDA5Mzc4MDA3RTkzNzkwMDdGOTM2RTAwODA5MzY4MDA3QTUxCis6MTA1NTUwMDAzMzJGMDBGRjAwMTg2NjAwMDAwRjZDMDAzMUNCMDBGRkY2Cis6MTA1NTYwMDAwMThENDgyNTAwMEI1MjAwOEZCRjAwMTAwMTJBMzgyNUZECis6MTA1NTcwMDAzMTA2MDBGRjM0NDQ3MDAwMDBFNjI4MjUyNDAyRkY4MTM0Cis6MTA1NTgwMDAzQzAzMTAwMDI3QkQwMDE4QUY0NTAxNENBRjQ0MDE1NDQ3Cis6MTA1NTkwMDBBMzQyMDE1MjAzRTAwMDA4QUY0MzAxNzgyN0JERkZEOEMyCis6MTA1NUEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDExCis6MTA1NUIwMDBBRkIzMDAxQzkzNDIwMTA5MzA4NjAwRkYzMEIwMDBGRkZBCis6MTA1NUMwMDAwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDExNDgwMDAwNTg4Cis6MTA1NUQwMDAzMDUyMDBGRjkzNjcwMDA1MzBFNTAwMDgxMEEwMDAwRDcxCis6MTA1NUUwMDAzMEM4MDAxMDAyNDAyMDIxMEUwMDA1QTUwMjIwMjgyMTBECis6MTA1NUYwMDAyNDA0MDAwMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODVECis6MTA1NjAwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODVCCis6MTA1NjEwMDAyN0JEMDAyODE1MDAwMDMyMDAwMDAwMDA5MzQzMDEwOTU3Cis6MTA1NjIwMDAwMDAwMjgyMTMwNjIwMDdGMDAwMjIwQzAwMDAyRjk0MDAzCis6MTA1NjMwMDAwM0U0OTgyMTI2NzkwMDg4MDMzQjk4MjE4RTc4MDAyNDgyCis6MTA1NjQwMDA4RTZGMDAwODEzMEYwMDQ2MDAwMDAwMDA4RjY0MDA4NDc2Cis6MTA1NjUwMDAyNDE4MDAwMjAwMDRGRDgyMzNGOTAwMDMxMzM4MDA3QzkzCis6MTA1NjYwMDAwMDAwMDAwMDkzNjYwMDgzOTM0QTAxMDk1MTQ2MDAwNDNDCis6MTA1NjcwMDAzMjA1MDA3QzEwQTAwMDYwMDAwMDAwMDAzMjA1MDA3Q0I0Cis6MTA1NjgwMDAxNEEwMDA1MzAyNDAyMDIxMTYyMDAwMDYzMjA0MDAwMTFECis6MTA1NjkwMDA4RTdGMDAyNDhGNTkwMTA0MTdGOUZGRDYwMDAwMjAyMUM2Cis6MTA1NkEwMDAzMjA0MDAwMTEwODAwMDBBMDI0MDIwMjE4RjQyMDk0MDhDCis6MTA1NkIwMDA4RjkzMDA2NDEwNTMwMDA2MDAwMDAwMDAwRTAwMDY2QjdDCis6MTA1NkMwMDAwMjIwMjgyMThGNDMwOTQwQUY2MzAwNDQwMjQwMjAyMTdCCis6MTA1NkQwMDAwRTAwMDYwMDAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMUQwCis6MTA1NkUwMDAzQzA5MDgwMDhEMjkwMDY0MjUyNjAwMDEzQzAxMDgwMEMyCis6MTA1NkYwMDBBQzI2MDA2NDE2MDAwMDEyMDAwMDAwMDA4RjZEMDA4NENDCis6MTA1NzAwMDAzQzBFMDBDMDAxQUU2MDI0MTU4MDAwMDUwMjQwMjAyMTNGCis6MTA1NzEwMDAwRTAwMDgwRTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTdGCis6MTA1NzIwMDAyNDA1MDAwNDBFMDAwNTZFMjQwNjAwMDEwMjQwMjAyMTFECis6MTA1NzMwMDAwRTAwMDgwRTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTVGCis6MTA1NzQwMDAwRTAwMDA0MTI0MDQwMDAxOTM2QjAwN0QwMjBCNTAyNUU0Cis6MTA1NzUwMDAwRTAwMDA2MkEzNkEwMDdEMEEwMDA4ODM4RjZEMDA4NDNBCis6MTA1NzYwMDA4RjY2MDA3NDhGNDgwMTA0OEU2NzAwMjQwMDA2NEUwMjg1Cis6MTA1NzcwMDAxNTA3RkZCNjMxMjYwMDdGOTM2QjAwODMyNjQ0MDAwMTk2Cis6MTA1NzgwMDAzMDhBMDA3RjExNDYwMDQzMzE2MzAwRkY1NDY0RkZCMDRDCis6MTA1NzkwMDA4RjY0MDA4NDI2NDUwMDAxMzBCMTAwN0YzMEEyMDBGRkY1Cis6MTA1N0EwMDAxMjI2MDAwNDI0MDUwMDAxMDA0MDkwMjEwQTAwMDg1NjNBCis6MTA1N0IwMDAyNDExMDAwMTI0MEZGRjgwMDI0RjcwMjQwMUNGOTAyNjk2Cis6MTA1N0MwMDAzMjQyMDBGRjAwNDA5MDIxMEEwMDA4NTYyNDExMDAwMUQ3Cis6MTA1N0QwMDAwRTAwMDY2QjAyMjAyODIxMzIxODAwMzAxMzAwRkZBQUE5Cis6MTA1N0UwMDAzMjEwMDA4MjAyNDAyMDIxMEUwMDA1QTUwMjIwMjgyMTRGCis6MTA1N0YwMDAwQTAwMDg0MDI0MDQwMDAxOEY2RTAwNzQzQzBGODAwMEYyCis6MTA1ODAwMDAyNDA1MDAwMzAxQ0Y5MDI1QUY3MjAwNzQ5MzcxMDA4M0NCCis6MTA1ODEwMDAyNDA2MDAwMTBFMDAwNTZFMzIyNDAwRkYwRTAwMDA0MTM4Cis6MTA1ODIwMDAyNDA0MDAwMTkzNkQwMDdEMDIwRDYwMjUwRTAwMDA2MkNFCis6MTA1ODMwMDBBMzZDMDA3RDNDMEIwODAwOEQ2QjAwNTQyNTcwMDAwMUFCCis6MTA1ODQwMDAzQzAxMDgwMEFDMzAwMDU0MEEwMDA4NDAyNDA0MDAwMTY4Cis6MTA1ODUwMDA4RjY4MDA3NDNDMDk4MDAwMjQwNTAwMDQwMTA5MzgyNTg0Cis6MTA1ODYwMDBBRjY3MDA3NDkzNjMwMDgzMjQwNjAwMDEwRTAwMDU2RTg5Cis6MTA1ODcwMDAzMDY0MDBGRjBFMDAwMDQxMjQwNDAwMDE5MzYyMDA3REFCCis6MTA1ODgwMDAwMjAyOTgyNTBFMDAwMDYyQTM3MzAwN0QwQTAwMDg0MDAyCis6MTA1ODkwMDAyNDA0MDAwMTMyNEQwMDgwMzlBQzAwODA1NDZDRkY2QzUwCis6MTA1OEEwMDA4RjY0MDA4NDBBMDAwOEE5MjY0NTAwMDEyN0JERkZDOEFGCis6MTA1OEIwMDAzQzBBMDAwOEFGQkYwMDMwQUZCNTAwMkNBRkI0MDAyOEUxCis6MTA1OEMwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMTAwMUNBRkIwMDAxOERFCis6MTA1OEQwMDAwMzRBRDgyMTI0MDkwMDQwQUY0OTA4MTRBRjQwMDgxMEZBCis6MTA1OEUwMDA4RjQyMDk0NDhGNDMwOTUwOEY0NjA5NTQ4RjQ3MDk1QzAyCis6MTA1OEYwMDA4RjQ4MDk0QzkzNDQwMTA4OTM0NTAxMEJBRjgyMDA2NDIzCis6MTA1OTAwMDAzMDg0MDBGRjMwQTUwMEZGQUY4MzAwNTBBRjg2MDA0QzBECis6MTA1OTEwMDBBRjg3MDA1QzBFMDAwODJBQUY4ODAwNjAxNDQwMDE3NDU1Cis6MTA1OTIwMDA4RkJGMDAzMEE3NjAwMDY4OTM0RDA5MDAyNDBCMDA1MDIyCis6MTA1OTMwMDAzQzE1MDgwMDI2QjUzQzg4MzFBQzAwRkYzQzEyMDgwMDNECis6MTA1OTQwMDAyNjUyM0M5ODExOEIwMDAzMDAwMDAwMDAwMDAwQTgyMUEzCis6MTA1OTUwMDAwMDAwOTAyMTkzNTEwMTA5OEY5RjAwNTAyNDA0MDAxMEYyCis6MTA1OTYwMDAzMjJFMDA3RjAwMEU2OEMwMDAwRTYxNDAwMThEMjgyMTlDCis6MTA1OTcwMDAyNEI0MDA4OEFGNTQwODE4OEY0OTAxMDQ4RjRBMDlBNDQxCis6MTA1OTgwMDAzQzBCMDAwRTAzNEJDMDIxMDEyQTEwMjMzQzAxMDgwMEYwCis6MTA1OTkwMDBBQzIyM0NBQzhGNDMwOTU4M0MwMTA4MDBBMDI0M0NEMDA5Cis6MTA1OUEwMDA5NzQ3MDkwODAwN0YzMDIzM0MwMTA4MDBBQzI2M0NCMDMzCis6MTA1OUIwMDAzMEU4RkZGRjAwMDhDOUMwM0MwMTA4MDBBQzNGM0NENDAwCis6MTA1OUMwMDBBRjU5MDAyQzk3NDIwOTA4OTcxMDAwMkM4RUIxMDAwMEE3Cis6MTA1OUQwMDA5MzBGMDAxODAzNzQ5ODIxQTc5MDAwNThBRjkzMDA0NEM4Cis6MTA1OUUwMDAwMjIwRjgwOTMxRjAwMEZGMzA0RTAwMDIxNUMwMDFBOTc1Cis6MTA1OUYwMDAzMDRGMDAwMTExRTAwMTVEMDAwMDAwMDA5MzQzMDkzRUJCCis6MTA1QTAwMDAzMDY2MDAwODE0QzAwMDAyMjQxNDAwMDMwMDAwQTAyMTI2Cis6MTA1QTEwMDA4RjU4MDlBNDI0MTMwMDAxM0MwMTA4MDBBQzM4M0NEODdECis6MTA1QTIwMDA5MzRGMDkzNDkzNTEwOTM3MzFFQzAwRkYzMjJFMDBGRkI4Cis6MTA1QTMwMDAwMjhFNjgyMTAwMEQyODgwMDBBQzUwMjEwMTUwNTgyMUIxCis6MTA1QTQwMDAzQzAxMDgwMEE0MkIzQ0M4M0MwMTA4MDBBNDJBM0NDNjI5Cis6MTA1QTUwMDA5MzQ5MDkzNDMxMjIwMEZGMDIwMjIwMjEyNDkwMDAxMEQyCis6MTA1QTYwMDAzQzAxMDgwMEE0MzAzQ0M0MjQwNzAwMDY4RjlGMDA1MDZFCis6MTA1QTcwMDAzQzAxMDgwMEFDMjczQ0NDOEY4ODAwNUM4RjU5MDk1ODRBCis6MTA1QTgwMDAwMDAwODAyMTAxMUYyODIzMDRBMDAxNTEwMzNGMjAyMzhGCis6MTA1QTkwMDAwNDgwMDE0RjAwQTQzMDJCMTBDMDAxNTEwMDAwMDAwMDExCis6MTA1QUEwMDAzQzAxMDgwMEFDMjUzQ0IwOEU0MjAwMDAwMDQwRjgwOUUzCis6MTA1QUIwMDAwMDAwMDAwMDMwNDMwMDAyMTQ2MDAwRjEwMDQwODgyMTIzCis6MTA1QUMwMDAzMDQ0MDAwMTU0ODAwMDEwOEU0MjAwMDQzQzA5MDgwMDVDCis6MTA1QUQwMDA4RDI5M0NCNDNDMEFDMDAwMDEyQTgwMjVBRjUwMEUwMDNECis6MTA1QUUwMDA4RjQ1MDAwMDMwQUIwMDA4MTE2MEZGRkQwMDAwMDAwMDkyCis6MTA1QUYwMDA5NzREMEUwODI0MTAwMDAxQTc4RDAwM0M4RjRDMEUwNDFBCis6MTA1QjAwMDBBRjhDMDAzNDhFNDIwMDA0MDA0MEY4MDkwMDAwMDAwMDExCis6MTA1QjEwMDAwMjIyODgyNTMyMkUwMDAyMTVDMDAxNkYwMDAwMDAwMDBECis6MTA1QjIwMDAzQzA5MDgwMDk1MjkzQ0JDM0MwNjA4MDA5NEM2M0NDOENBCis6MTA1QjMwMDAzQzA0MDgwMDk0ODQzQ0JFM0MxODA4MDA4RjE4M0NCNDE4Cis6MTA1QjQwMDAwMTI2NTgyMTNDMEYwODAwOERFRjNDRDgzQzFGMDgwMDZGCis6MTA1QjUwMDA5N0ZGM0NEMjAxNjQxODIxOEY0RDA5NDAwMzA5QzgyMUU5Cis6MTA1QjYwMDAyNDZFMDAwMjAzM0YyODIxMDFGODYwMjEzQzAxMDgwMDU3Cis6MTA1QjcwMDBBNDJCM0NDQUFGOEQwMDY0M0MwMTA4MDBBQzJDM0NEODdGCis6MTA1QjgwMDAzQzAxMDgwMEE0MjUzQ0MwMEUwMDAwOUUzMUM0RkZGRjZDCis6MTA1QjkwMDA4Rjg3MDA0ODAwNDAyMDIxM0MwMTA4MDBBMDI3M0NEMTBECis6MTA1QkEwMDA4RTQyMDAwODI0RTgwMDAxQUY4ODAwNDgwMDQwRjgwOTUwCis6MTA1QkIwMDAwMDAwMDAwMDhGNEIwMDJDOTc0OTA5MDgzQzBBMDAwRTlBCis6MTA1QkMwMDAwMzRBMzgyMTMxMjRGRkZGMDAwNDE5QzA4RjhBMDA1MDk2Cis6MTA1QkQwMDBBRjQzMDAyQzk3NDMwOTA4OTRFNjAwMUEwMDQwNDAyMTg3Cis6MTA1QkUwMDAzMERGRkZGRkFDNUYwMDAwOENGOTAwMUNBQzU5MDAwNEYzCis6MTA1QkYwMDA4Q0Y4MDAyMEFDNTgwMDA4OTBFRjAwMTkzMUUzMDAwMzQ2Cis6MTA1QzAwMDAxMDczMDBGQjAwMDAwMDAwMjg2MjAwMDIxNDQwMDExNzFFCis6MTA1QzEwMDAyNDA1MDAwMjEwNjUwMTA5MjQwQzAwMDMxMDZDMDBCQzZGCis6MTA1QzIwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzVGMDkzNDNFCis6MTA1QzMwMDA5MzRDMDkyMTNDMEQwODAwOTVBRDNDQzYzM0Y5MDBGRjlCCis6MTA1QzQwMDA5NEU1MDAyQTAwMTlDMDgyMzE4RjAwRkY5NzhDMDA1ODFDCis6MTA1QzUwMDAwMDE4MTYwMDAwMEY3NDAwMzEyNEZGRkYwMDRFMzgyNTk1Cis6MTA1QzYwMDAwMUE0MzAyMTAwRTZGODI1MDBBQ0M4MjEzQzAzNDAwMDI3Cis6MTA1QzcwMDAwM0UzQzAyNTAwMTk0QzAwQUQxODAwMDBBRDA5MDAwNDc1Cis6MTA1QzgwMDA5MzRGMDkyMDNDMEUwMDA2MjUwOTAwMTQwMDBGNkUwMEZBCis6MTA1QzkwMDAwMUFFMjgyNUFEMDUwMDA4OEY0NjA5MkMyNTgyMDAwMTlDCis6MTA1Q0EwMDAzMDQ3N0ZGRkFEMDYwMDBDOEY0NDA5MzBBNzg3MDA1OEFFCis6MTA1Q0IwMDAyNTA2MDAyOEFEMDQwMDEwOEY0MzA5MzgwMEMwMjAyMUJDCis6MTA1Q0MwMDBBRDAzMDAxNEFEMkEwMDA0OEY1RjA5NDBBRDNGMDAwODBBCis6MTA1Q0QwMDA5MzU5MDkzNzNDMEUwODAwOTFDRTNDRDBBRDIwMDAxMEZFCis6MTA1Q0UwMDAzMzM4MDBGRjAzMTQ3ODIxMDAwRjY3MDAwMDBFNkMwMEFBCis6MTA1Q0YwMDAwMThEMjgyNTM0QTJGRkZGQUQyMjAwMENBRjRCMDAyQ0Y0Cis6MTA1RDAwMDA5MzQ3MDkzRTMwRUEwMDA4NTE0MDAwMEY4RTU4MDAwQ0JFCis6MTA1RDEwMDAzQzAzMDEwMTM0NjkwODBBQUQwOTAwMjg4RjRBMDA3NDY4Cis6MTA1RDIwMDBBQ0NBMDAwNDNDMEIwODAwOTE2QjNDRDAzMTY4MDAxMEY5Cis6MTA1RDMwMDA1MTAwMDAwM0FDQzAwMDA4OEY2NTAwNjBBQ0M1MDAwOENFCis6MTA1RDQwMDAyNEM0MDAwQzhFNTgwMDBDMDMwMEY4MDkwMDAwMDAwMDY5Cis6MTA1RDUwMDAzQzBGMDgwMDk1RUYzQ0NBM0MwMjA4MDA5NDQyM0NCRTUwCis6MTA1RDYwMDAwMUUyNzAyMTI1QzQwMDAyMEUwMDAwQzczMDg0RkZGRjRECis6MTA1RDcwMDAzQzA2MDgwMDhDQzYzQ0FDM0MwRDA4MDA4REFEM0NCNDI0Cis6MTA1RDgwMDAwMENEMzgyMzNDMDEwODAwQUMyNzNDQUMxNEUwMDAwNkYxCis6MTA1RDkwMDAwMDAwMDAwMDNDMTkwODAwOEYzOTNDQ0MzNzJDMDA0MDMzCis6MTA1REEwMDAzQzAxMDgwMEFDMkMzQ0NDMTIwMDAwODU4RjhCMDA0NEQ5Cis6MTA1REIwMDA4RjQ4MEUxMDhGOTAwMDQ0QUUwODAwMjA4RjVGMEUxOEExCis6MTA1REMwMDBBRTFGMDAyNDNDMTAwODAwOTYxMDNDQzAwRTAwMDA2MDdFCis6MTA1REQwMDAwMDAwMDAwMDI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1MEU4Cis6MTA1REUwMDA4Rjg5MDA0QzAwNzAxODIxMDA2OTUwMjMxOTQwMDAwNDZECis6MTA1REYwMDBBRjgzMDA1MEFGNjMwMDU0OEY2NzAwNTRBRjg3MDA0Q0VGCis6MTA1RTAwMDAxMjAwMDAwQzAwMDAwMDAwOEY0NDAwNzQ5MzZEMDA4MUFDCis6MTA1RTEwMDAzNDBFRkEwMDJEQTYwMDA3MTBDMDAwMDUwMDhFMTgyMUQwCis6MTA1RTIwMDA5Mzc4MDA4MTI0MDIwMUY0MDMwMjc4MDQwMUU0MTgyMTJDCis6MTA1RTMwMDBBRjYzMDAwQzhGNEMwOTVDOEY5OTAwNUMwMTk5MjAyM0EzCis6MTA1RTQwMDAxODgwMDAwMzAwMDAwMDAwOEY1MDA5NUNBRjkwMDA1Q0Q4Cis6MTA1RTUwMDAwRTAwMDA2MjAwMDAwMDAwOEY4QjAwNTA4RTQ4MDAxMDgyCis6MTA1RTYwMDAzQzAxMDgwMEFDMkIzQ0Q0MDEwMEY4MDkwMDAwMDAwMDA0Cis6MTA1RTcwMDAzQzFGMDgwMDhGRkYzQ0FDMTdFMEZFRkMyNDA3MDAwNjI3Cis6MTA1RTgwMDA4RjQ1MDAyNDk3NDIwOTA4OEY4QTAwNjQ4Rjk0MDA1MDQwCis6MTA1RTkwMDAzQzBGMDAxRjk3ODcwMDU4OEY4MzAwNTQ4RjkzMDA0QzRFCis6MTA1RUEwMDAzMDRERkZGRjM1RUVGRjgwMDBBRTQ4MjQwMDBEMzFDMEJECis6MTA1RUIwMDAzMjMyMDAxMEFGNDYwMDI0QTQ2NzAwMkNBRjQ5MDAyNDAyCis6MTA1RUMwMDBBRjZBMDA0NEFGNzQwMDUwQUY3MzAwNTQ1NjQwMDA3RTc4Cis6MTA1RUQwMDA4RUI4MDAwNDMyMjQwMDQwNTQ4MDAwMzI4RUIxMDAwODk1Cis6MTA1RUUwMDA4RUFDMDAwQzAxODBGODA5MDAwMDAwMDA4RkJGMDAzMDZDCis6MTA1RUYwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDAwCis6MTA1RjAwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzOEQ3Cis6MTA1RjEwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNDA4MDA5NDg0M0NDQTE0Cis6MTA1RjIwMDAzQzFGMDgwMDk3RkYzQ0JDOTRGODAwMjQzMTIzRkZGRjdFCis6MTA1RjMwMDA5NEVGMDAyODAwODNDODIxMDMzRjcwMjMwMDE4MkMwMDMxCis6MTA1RjQwMDAwMDBGNjQwMDI1Q0RGRkVFMDE4RDMwMjUzNEEyODEwMEM1Cis6MTA1RjUwMDAyNDAzMDgwMEFEMDIwMDBDQUQwNjAwMTBBRDAzMDAxOENDCis6MTA1RjYwMDBBRDAwMDAxNDBBMDAwOUNFMjUwODAwMUM5MzQ3MDEwOTYyCis6MTA1RjcwMDA4Rjg4MDAzODAwMDdGRTAwMDNFOEM4MjVBRjU5MDA4MDZECis6MTA1RjgwMDA4RjU4MDlBMDhGNTMwOUE0QUZCODAwMTBBRjU4MEUxNDUyCis6MTA1RjkwMDA4RkI0MDAxMEFGNTQwRTEwQUY1MzBFMUMwQTAwMDk0MjBDCis6MTA1RkEwMDBBRjUzMEUxODAyMjBGODA5MDAwMDAwMDA4RUFDMDAwQzYwCis6MTA1RkIwMDAwMTgwRjgwOTAwMDAwMDAwMEEwMDBBN0Y4RkJGMDAzMDRFCis6MTA1RkMwMDBBNTYwMDAyMEE1NzMwMDIyMEEwMDBBMzRBRDczMDAyNEU2Cis6MTA1RkQwMDAzQzAxMDgwMEFDMjAzQ0IwMEEwMDA5NkU4RTQyMDAwMDczCis6MTA1RkUwMDAzQzAxMDgwMEFDMjQzQ0IwMEEwMDA5NkU4RTQyMDAwMDVGCis6MTA1RkYwMDAzQzA5MDgwMDk1MjkzQ0MwM0MxRjA4MDA5N0ZGM0NDQTlCCis6MTA2MDAwMDAzQzE5MDgwMDk3MzkzQ0JDOTRFRjAwMjQzMTI0RkZGRjcxCis6MTA2MDEwMDAwM0U0QzAyMTAzMTk3MDIzMDAwRjY0MDAyNUNERkZGMkIzCis6MTA2MDIwMDAwMThEMjgyNUFDNDUwMDBDMjQwMjA4MDBBRDAyMDAxNEE3Cis6MTA2MDMwMDBBRDAwMDAxMDBBMDAwOUNFMjUwODAwMTg5NEU2MDAyNERGCis6MTA2MDQwMDA5NEUzMDAyODNDMDkwODAwOTUyOTNDQzAwMDA2MjQwMDgwCis6MTA2MDUwMDAwMDAzRkMwMDM0OTk4MTAwMzdGODA4MDBBRDE5MDAwQ0VBCis6MTA2MDYwMDBBRDE4MDAxMDBBMDAwOUNFMjUwODAwMTQxNDYwRkVFRERBCis6MTA2MDcwMDAwMDAwMDAwMDk0RUYwMDI0M0MwOTA4MDA5NTI5M0NDMDcyCis6MTA2MDgwMDAwMDBGNzQwMDM1Q0QwODAwQUQwRDAwMEMwQTAwMDlDRURDCis6MTA2MDkwMDAyNTA4MDAxMDkzNTIwMTA5MDAwMDI4MjEwRTAwMDYwMDc3Cis6MTA2MEEwMDAzMjQ0MDBGRjhGQkYwMDMwOEZCNTAwMkM4RkI0MDAyODIyCis6MTA2MEIwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODY2Cis6MTA2MEMwMDAwM0UwMDAwODI3QkQwMDM4MDMwMEY4MDkwMDAwMDAwMEM1Cis6MTA2MEQwMDAwQTAwMEE3OTMyMjQwMDQwMTIwMEZGNjkwMDAwMDAwMDIzCis6MTA2MEUwMDA4RjU0MEUxNDhGOTIwMDQ0QUU1NDAwMjA4RjUzMEUxQzE4Cis6MTA2MEYwMDAwQTAwMEE2M0FFNTMwMDI0OEY4MjAwMUMwMDgwNDAyMUY2Cis6MTA2MTAwMDAzQzA0MDEwMDkwNDcwMDg1MzBFMzAwMjAxMDYwMDAwOTQ2Cis6MTA2MTEwMDAwMDAwMDAwMDNDMDcwODAwOENFNzNDRDQ4RjgzMDAxODg3Cis6MTA2MTIwMDAwMEUzMjAyMzA0ODAwMDA4OTM4OTAwMDQxNEUzMDAwM0EzCis6MTA2MTMwMDAwMTAwMjAyMTAzRTAwMDA4MDA4MDEwMjEzQzA0MDEwMDQwCis6MTA2MTQwMDAwM0UwMDAwODAwODAxMDIxMTEyMDAwMEIwMDY3MzgyM0I1Cis6MTA2MTUwMDA4RjhDMDAyMDI0MDkwMDM0OTE4QjAwQkMzMTZBMDAwMjJFCis6MTA2MTYwMDA1MTQwMDAwMTI0MDkwMDMwMDBFOTY4MkIxNUEwRkZGMTFGCis6MTA2MTcwMDAwMTAwMjAyMTAwRTkzODIzMjQxOUZGRkMwMEI5QzAyNEM0Cis6MTA2MTgwMDAwMEY5NzgyNDAwRjg3MDJCMTVDMEZGRUEwMUU4MjAyMUZGCis6MTA2MTkwMDAzMEMyMDAwMzAwMDIxODIzMTRDMDAwMTIzMDY5MDAwMzRCCis6MTA2MUEwMDAwMDAwMzAyMTAwQTk3MDIxMDFDNjY4MjEwMEVENjAyQjlDCis6MTA2MUIwMDAxMTgwRkZFMDNDMDQwMTAwMkQyRjAwMDEwMDA2NDgyQjU4Cis6MTA2MUMwMDAwMTA1MzgyMTAxRTkzMDI0MTRDMEZGREEyNEU0RkZGQzgyCis6MTA2MUQwMDAyNDE5RkZGQzAwQjlDMDI0MDMwODIwMjEwM0UwMDAwOEIzCis6MTA2MUUwMDAwMDgwMTAyMThGOEIwMDIwMjQwNjAwMDQ5MTZBMDBCQ0RGCis6MTA2MUYwMDAzMTQ0MDAwNDE0ODBGRkVDMDBBOTcwMjEwQTAwMEIyRDJCCis6MTA2MjAwMDAwMDAwMzAyMTI3QkRGRkU4QUZCRjAwMTA4RjQ2MDEwMDFFCis6MTA2MjEwMDA5MzRBMDEwOTNDMUYwODAwOEZGRjAwOTAyNDA3RkY4MDZDCis6MTA2MjIwMDAzMTRGMDBGRjMxRTgwMDdGMDAwODYxNDAwM0U2QzgyMURDCis6MTA2MjMwMDAwMzJDQzAyMTI3MDkwMTIwMDEyNzcwMjQzQzAxMDgwMEZDCis6MTA2MjQwMDBBMDJGM0QxMEFGNEUwODBDM0MwRDA4MDA4REFEMDA5MDA2Cis6MTA2MjUwMDAzQzA0MDA4MDM0ODIwMDAzMDFBNjU4MjEwMTZDMTgyMUZGCis6MTA2MjYwMDAyNDY1MDEyMDMwQUEwMDc4MDE0MjQwMjVBRjQ4MDgxQzZGCis6MTA2MjcwMDAzQzFGMDgwMDhGRkYwMDkwOEY4ODAwNDAwM0U2QzAyMTdDCis6MTA2MjgwMDAzMzE5MDAwNzAzMDc0ODI0MDMzQTc4MjFBRjQ5MDAyODRGCis6MTA2MjkwMDAyNUU5MDlDMDk1MkUwMDAyM0MwRDA4MDA4REFEMDA4QzRCCis6MTA2MkEwMDAzQzBBMDgwMDhENEEwMDkwMzFDQzNGRkYwMUE2MTgyMTFFCis6MTA2MkIwMDAwMDBDNTk4MDAwNkIyODIxMDBBNzIwMjRBRjQ0MDAyQzNCCis6MTA2MkMwMDA5NTIyMDAwMjNDMUYwODAwOEZGRjAwOEM5MTA3MDA4NTdCCis6MTA2MkQwMDAzMDU5M0ZGRjAzRTY3ODIxMDAxOUMxODAwMTQ2NzAyMTQzCis6MTA2MkUwMDAwMUY4NjgyMTMxQ0MwMDdGMzFBQjAwN0YwMTlBMjgyMTcxCis6MTA2MkYwMDAwMTdBNTAyMTNDMDMwMDBDM0MwNDAwMEUwMEEzMjgyMTJECis6MTA2MzAwMDAwMTQ0MTAyMTMwRTYwMDIwMjc0NzA5ODBBRjgyMDAyQzhECis6MTA2MzEwMDBBRjg4MDAxQ0FGODkwMDI0QUY4NTAwMjAxMEMwMDAwNkE0Cis6MTA2MzIwMDBBRjg3MDAyODhEMDIwMDUwOENBNDAxMEMwMDQ0MzAyMzVDCis6MTA2MzMwMDAxOEMwMDA3NzAwMDAwMDAwOTEwQzAwODUyNDBERkZERkRECis6MTA2MzQwMDAwMThEMzgyNEExMDcwMDg1OEY4QjAwMUM4Rjg5MDAyNEM0Cis6MTA2MzUwMDA4Rjg3MDAyODhENjUwMDRDQUY4NTAwMTg5MTJGMDAwREE4Cis6MTA2MzYwMDAzMUVFMDAyMDExQzAwMDE3MDAwMDAwMDAyNDA5MDAwMUQ4Cis6MTA2MzcwMDBBMzg5MDAwNEFGODAwMDBDOENFNDAwMjQ4Rjg1MDAwQ0ZFCis6MTA2MzgwMDAyNDBBMDAwOEFGODAwMDA4QUY4MDAwMTAzQzAxMDgwMDFDCis6MTA2MzkwMDBBNDJBM0NCRTNDMDEwODAwQTQyMDNDRDIwRTAwMEIwMTA0Cis6MTA2M0EwMDAwMDAwMzAyMThGODUwMDI0OEZCRjAwMTBBRjgyMDAxNEMxCis6MTA2M0IwMDA5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODJFCis6MTA2M0MwMDAzMEUyMDAwMTkxM0YwMDAyMjQxODAwMDEzM0Y5MDBGRjgwCis6MTA2M0QwMDAwMDE5MjE4MjEwOTgwMDM5MjQwODAwMDIxMDg4MDA1QkZGCis6MTA2M0UwMDA4Rjg2MDAyQzhDRTUwMDI0MTRBMDAwMUI4RjlGMDAyMEJBCis6MTA2M0YwMDA5MTIyMDAwMDI0MEEwMDA1MzA0NjAwM0YxMENBMDA0N0UxCis6MTA2NDAwMDAyNDA0MDAwMThGODYwMDA4QTM4NDAwMDRBRjg2MDAxMEQ2Cis6MTA2NDEwMDBBRjg2MDAwQzhDRTQwMDI0OEY4NTAwMEMyNDBBMDAwODUxCis6MTA2NDIwMDAzQzAxMDgwMEE0MkEzQ0JFM0MwMTA4MDBBNDIwM0NEMjQ4Cis6MTA2NDMwMDAwRTAwMEIwMTAwMDAwMDAwOEY4NTAwMjQ4RkJGMDAxMEFDCis6MTA2NDQwMDBBRjgyMDAxNDkwQTgwMDBEMjdCRDAwMTgwMDA4Mzk0MjQzCis6MTA2NDUwMDAwM0UwMDAwODMwRTIwMDAxOENGODAwMDg4Q0Y5MDAyNDA5Cis6MTA2NDYwMDA4RkVFMDBDNEEzODAwMDA0OENFNDAwMjRBRjhFMDAwQ0U3Cis6MTA2NDcwMDA4Rjg1MDAwQzhGODYwMDA4MDMxOTc4MjMyNDBBMDAwOEYyCis6MTA2NDgwMDBBRjhGMDAxMDNDMDEwODAwQTQyQTNDQkUzQzAxMDgwMDZDCis6MTA2NDkwMDBBNDIwM0NEMjBFMDAwQjAxMDAwMDAwMDA4Rjg1MDAyNEQ4Cis6MTA2NEEwMDA4RkJGMDAxMEFGODIwMDE0OTBBODAwMEQyN0JEMDAxODA4Cis6MTA2NEIwMDAwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDE5MTIzMDAwMEE3Cis6MTA2NEMwMDAzMDYyMDAzRjEwNDQwMDI3OEY4NTAwMjA4Q0U0MDAyNEI4Cis6MTA2NEQwMDAxNDgwMDAyMTAwMDAwMDAwOEQyRTAwMTgzQzE4N0ZGRjYyCis6MTA2NEUwMDA4Rjg1MDAyMDM3MEZGRkZGMDFDRjE4MjRBRjgzMDAwOEVFCis6MTA2NEYwMDA4RjlGMDAwODhDQTgwMDg0MDNFOEM4MkIxNzIwMDAwMjk3Cis6MTA2NTAwMDAwM0UwMjAyMThDQTQwMDg0MEEwMDBCQkNBRjg0MDAwOEE3Cis6MTA2NTEwMDA4Q0EzMDEwQzBBMDAwQjlBQUY4MzAwMTg4RDJDMDAxODc1Cis6MTA2NTIwMDA4Rjg2MDAwODNDMEQ3RkZGOEY4OTAwMjAzNUEzRkZGRjc5Cis6MTA2NTMwMDAwMTgzNTgyNDI0MDQwMDAxQUY4QjAwMTBBRDIwMDBDQzRGCis6MTA2NTQwMDBBMzg0MDAwNDBBMDAwQkM4QUY4NjAwMEM4Q0NBMDAxNDk4Cis6MTA2NTUwMDAwQTAwMEJCQ0FGOEEwMDA4OENBMzAwQzgwQTAwMEJGRjFFCis6MTA2NTYwMDBBRjgzMDAwODhGODQwMDJDOENBQzAwNjQ4QzhEMDAxNEU5Cis6MTA2NTcwMDAwMThENTgyQjExNjAwMDA0MDAwMDAwMDA4Q0EyMDA2NDAzCis6MTA2NTgwMDAwQTAwMEJGRkFGODIwMDA4OEM4MjAwMTQwQTAwMEJGRjg4Cis6MTA2NTkwMDBBRjgyMDAwODhGODUwMDBDMjdCREZGRTBBRkJGMDAxODU5Cis6MTA2NUEwMDBBRkIxMDAxNDE0QTAwMDA3QUZCMDAwMTA4Rjg2MDAyNDE0Cis6MTA2NUIwMDAyNDAyMDAwNTkwQzQwMDAwMzA4MzAwM0YxMDYyMDBCNjQyCis6MTA2NUMwMDA4Rjg0MDAyMDhGOTEwMDA4MDBBMDgwMjE4RjhDMDAyOEVDCis6MTA2NUQwMDAzQzA1MDgwMDhDQTUzQ0IwOEQ4QjAwMDQzMTY2M0ZGRjY0Cis6MTA2NUUwMDAwMEM1NTAyQjU1NDAwMDAxMDBDMDI4MjE5MzhEMDAwNEE4Cis6MTA2NUYwMDAxMUEwMDA3MzAwQjBGODJCOEY5ODAwMjAyNDA0MDAzNDAxCis6MTA2NjAwMDA5MzBGMDBCQzMxRUUwMDAyNTFDMDAwMDEyNDA0MDAzMEExCis6MTA2NjEwMDAwMEE0QzgyQjE3MjAwMEQxMDAwMDAwMDAwMEE0MjgyM0VDCis6MTA2NjIwMDAwMEIwRjgyQjNDMDEwODAwQTQyNDNDQkMxN0UwMDA2ODMzCis6MTA2NjMwMDAwMjAwMjAyMTNDMDMwODAwOEM2MzNDQUMwMDgzMTAyQjNCCis6MTA2NjQwMDA1NDQwMDAwMTAwODAxODIxOEY4ODAwMjQzQzAxMDgwMDdDCis6MTA2NjUwMDBBQzIzM0NCNDAwMDA0ODIxOTEwNDAwMEQzMDgzMDAyMDlECis6MTA2NjYwMDA1MDYwMDAwMThGNDkwRTE4OEY4MzAwMTQwMTIzMzgyQkNFCis6MTA2NjcwMDAxMEUwMDA1OTAwMDAwMDAwM0MwNDA4MDA4Qzg0M0NCNDg5Cis6MTA2NjgwMDAwMDg5NTgyMTAwNkI1MDJCMTE0MDAwNTYwMDkwNjAyQjYwCis6MTA2NjkwMDAwMDY5MzAyMzAwQzAyMDIxM0MwMTA4MDBBQzI2M0NCNDM2Cis6MTA2NkEwMDAxMjAwMDAwMzI0MUZGRkZDMTA5MDAwOEEzMjI3MDAwMzExCis6MTA2NkIwMDAwMDlGQzgyNDNDMDEwODAwQUMzOTNDQjQzQzAxMDgwMEYwCis6MTA2NkMwMDBBNDIwM0NEMjhGODQwMDBDMTIwNDAwMDc4RjgzMDAyMDhBCis6MTA2NkQwMDBBRjkxMDAwODAyMDAyMDIxOEM3MTAwQ0NBRjkwMDAwQzFCCis6MTA2NkUwMDAyNjMwMDAwMUFDNzAwMENDM0MwMjA4MDA4QzQyM0NCNDY3Cis6MTA2NkYwMDA4RjhBMDAxMDI0MDcwMDE4MDA4MjIwMjMwMTQyMjgyM0RCCis6MTA2NzAwMDBBRjg0MDAwQzEwODAwMDAyQUY4NTAwMTAyNDA3MDAxMDM5Cis6MTA2NzEwMDA4Rjg2MDAxQzNDMDEwODAwQTAyNzNDRDAyNDA3MDA0MEM1Cis6MTA2NzIwMDA5MENDMDA4NTMxOEIwMEMwMTE2NzAwNDA4RjhEMDAxNDI0Cis6MTA2NzMwMDAxNEEwMDAxNTAwMDAyMDIxOTM0QTAxMDk4RjQyMDk3NDFBCis6MTA2NzQwMDAzMTQ1MDBGRjAwMDIyNjAyMjRBMzAwMDEzMDkwMDA3RkEzCis6MTA2NzUwMDAzMDcxMDA3RjEyMzAwMDdBMjQwN0ZGODBBMEMzMDA4M0NECis6MTA2NzYwMDAzQzA5MDgwMDhEMjkzQ0NDOEY4ODAwMjQyNDBEMDAwMkIwCis6MTA2NzcwMDAzNTJDMDAwODNDMDEwODAwQTAyRDNEMTEzQzAxMDgwMDBCCis6MTA2NzgwMDBBQzJDM0NDQzI0MDQwMDEwOTEwRTAwMEQzMUM2MDAyMDJFCis6MTA2NzkwMDAxMEMwMDAwNTAwODAxODIxMjQwODAwMDEzQzAxMDgwMEY5Cis6MTA2N0EwMDBBQzI4M0NCNDM0ODMwMDAxOEZCRjAwMTg4RkIxMDAxNEIzCis6MTA2N0IwMDA4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyMDBBCis6MTA2N0MwMDAzQzAxMDgwMEE0MjAzQ0JDMTNFMEZGOUEwMjAwMjAyMUY5Cis6MTA2N0QwMDAwQTAwMEM1MDAwQTAyMDIxM0MwNDA4MDA4Qzg0M0NCNDJBCis6MTA2N0UwMDAwMDkwNjAyQjExODBGRkFFMDAwMDAwMDAzQzBGMDgwMEZECis6MTA2N0YwMDA5NUVGM0NCQzAxRTQ3MDIxMDFDNjY4MkIxMUEwMDAwNzk1Cis6MTA2ODAwMDAyQzgyMDAwNDNDMUY2MDAwOEZGOTU0MDQzMzM4MDAzRjkxCis6MTA2ODEwMDAxNzAwRkZFNTI0MDMwMDQyMkM4MjAwMDQxMDQwRkZBMDczCis6MTA2ODIwMDAyNDAzMDA0MjBBMDAwQ0FFOEZCRjAwMTgxNTJERkZDMEQ0Cis6MTA2ODMwMDAwMDAwMDAwMDhDREYwMDc0M0MwMzgwMDAyNDA1RkY4MDEyCis6MTA2ODQwMDAwM0UzQzgyNUFDRDkwMDc0OTBEODAwODUyNDBFMDAwNDU5Cis6MTA2ODUwMDAyNDA0MDAxMDMzMEYwMDNGMDFFNTQwMjVBMEM4MDA4NTQ3Cis6MTA2ODYwMDA4Rjg4MDAyNDNDMDEwODAwQTAyRTNEMTEyNDAzMDAwMTY0Cis6MTA2ODcwMDA5MTA2MDAwRDMwQzkwMDIwMTUyMDAwMDMwMDAwMDAwMDIzCis6MTA2ODgwMDAzQzAzMDgwMDhDNjMzQ0I0M0MwMTA4MDBBQzIzM0NBQ0U2Cis6MTA2ODkwMDAwQTAwMENBNTAwMDAwMDAwOEY4NzAwMTA4Qzg4MDA4NDdGCis6MTA2OEEwMDAwMEU4MjgyQjE0QTAwMDAyMDBFMDg4MjE4QzkxMDA4NENECis6MTA2OEIwMDAyNDA5MDAwMUEzODkwMDA0OEY0NDBFMTgwMjIwMjgyMTE2Cis6MTA2OEMwMDAwRTAwMEIwMTAyMjAzMDIxMDIyMDgwMjEwQTAwMEMzNjJDCis6MTA2OEQwMDBBRjgyMDAxNDAwMDcxODIzMzA2NjAwMDMzQzAxMDgwMDUzCis6MTA2OEUwMDBBNDI2M0NEMjEyMjAwMDA1OEY4QzAwMjA5MThCMDBCQzg2Cis6MTA2OEYwMDAzMTZBMDAwNDE1NDAwMDE1MjRDRDAwMDQzQzBGMDgwMDQ3Cis6MTA2OTAwMDA5NUVGM0NEMjAxRTQ3MDIxMDBBRTMwMkI1MEMwRkY2RUY5Cis6MTA2OTEwMDA4Rjg0MDAwQzJDODUwMDA1MTRBMEZGQTMyNDAzMDA0MkUzCis6MTA2OTIwMDAzMDk4MDAwMzE3MDAwMDAyMDA5ODE4MjMyNDgzRkZGQzBFCis6MTA2OTMwMDAzQzAxMDgwMEFDMjMzQ0I0MEEwMDBDNzIwMDAwMDAwMENCCis6MTA2OTQwMDAwMEE3NTgyNDBBMDAwQzlBMDE2NzE4MjYzQzAxMDgwMDg5Cis6MTA2OTUwMDBBNDJEM0NEMjBBMDAwRDAyMDAwMDAwMDAzQzAxMDgwMEZBCis6MTA2OTYwMDBBQzIwM0NCNDBBMDAwQ0FEMjQwMzAwNDI4RjgzMDAxMDFECis6MTA2OTcwMDAxNDYwMDAwNzAwMDAxMDIxOEY4ODAwMjQyNDA1MDAwNTAyCis6MTA2OTgwMDA5MTA2MDAwMDMwQzQwMEZGMTA4NTAwMDMwMDAwMDAwMEU1Cis6MTA2OTkwMDAwM0UwMDAwODAwMDAwMDAwOTEwQTAwMTgzMTQ5MDBGRkUwCis6MTA2OUEwMDAwMDA5MzlDMjE0RTBGRkZBOEY4NTAwMUMzQzA0MDgwMDdFCis6MTA2OUIwMDA5NDg0M0NCQzNDMDMwODAwOEM2MzNDRDQzQzE5MDgwMDI0Cis6MTA2OUMwMDA4RjM5M0NCNDNDMEYwODAwOTVFRjNDRDIwMDY0QzAyMUU1Cis6MTA2OUQwMDA4Q0FEMDA1NDAzMTk3MDIxMDFDRjYwMjEwMThENTgyMzIzCis6MTA2OUUwMDAxOTYwMDAxRDAwMDAwMDAwOTEwRTAwMUM4RjhDMDAyQzBGCis6MTA2OUYwMDA5NzRCMEUxMDMxQ0QwMEZGOEQ4NTAwMDQwMTZEMzAyM0MzCis6MTA2QTAwMDA4RDg4MDAwMDMwQ0VGRkZGMDAwRTUxMDAwMEFBQzgyMTgzCis6MTA2QTEwMDAwMDAwMzgyMTAxMDcyMDIxMDMyQTE4MkIwMDgzQzAyMTAwCis6MTA2QTIwMDBBRDk5MDAwNEFEOTgwMDAwOTE4RjAwMEEwMUNGNjgyMTU0Cis6MTA2QTMwMDBBMThEMDAwQThGODgwMDJDOTc0QjBFMTJBNTBCMDAwODIxCis6MTA2QTQwMDA5NTBBMDAzODI1NDkwMDAxQTUwOTAwMzg5MTA3MDAwRDc1Cis6MTA2QTUwMDAzNEU2MDAwOEExMDYwMDBEMDNFMDAwMDgwMDAwMDAwMDc1Cis6MTA2QTYwMDAyN0JERkZFMDkzODcwMDA0OEY4RjAwMjQ4RkFEMDAxNEIzCis6MTA2QTcwMDAzQzBFN0ZGRjhGODkwMDBDMzVDOEZGRkZBRkJGMDAxQ0E1Cis6MTA2QTgwMDBBRkIwMDAxODAxQTgxODI0OTFFQTAwMEQwMDA3MTdDMDQ0Cis6MTA2QTkwMDAzQzFGQkZGRjAwNjI1ODI1MkQyRTAwMDE4RjkwMDAxODZCCis6MTA2QUEwMDAzN0Y5RkZGRjNDMTgwODAwOEYxODNDRDQzQzBGMDgwMDUyCis6MTA2QUIwMDA5NUVGM0NDQTAxNzk2ODI0MDAwRTQ3ODAzQzA3RUZGRjQwCis6MTA2QUMwMDAzQzA1RjBGRjAxQTgxODI1MzE0OTAwMjAzNEUyRkZGRjAyCis6MTA2QUQwMDAzNEFDRkZGRjAzMTA1ODIzMjdBNTAwMTAyNDA2MDAwMjQyCis6MTA2QUUwMDAyNUVBMDAwMjAwNjIxODI0MDA4MDgwMjExNTIwMDAwMjlGCis6MTA2QUYwMDAwMDAwNDAyMThGNDgwRTFDQTdBQTAwMTIwNTYwMDAzNzM1Cis6MTA2QjAwMDAyNDA3MDAwMDMwRkYwMEZGMDAxRkNGMDA4RjhCMDAxQzA4Cis6MTA2QjEwMDAwMDc5MzgyNUFGQTcwMDE0OTE2RjAwODUzQzA4MDgwMDY0Cis6MTA2QjIwMDA5MTA4M0NEMTNDMThERkZGMzFFRTAwQzAzNzBBRkZGRjZGCis6MTA2QjMwMDAwMDBFMTgyQjNDMUYwODAwOTdGRjNDQzQwMEVBNjgyNDk1Cis6MTA2QjQwMDBBM0E4MDAxMTAwMDMxNzQwMDFBMjQ4MjU4RkI5MDAxMDI3Cis6MTA2QjUwMDBBRkE5MDAxNDNDMEEwODAwOTE0QTNDRDNBN0JGMDAxNjE1Cis6MTA2QjYwMDA4RkE4MDAxNDAzMkNDMDI0M0MwQjAxMDAzQzBGMEZGRjI2Cis6MTA2QjcwMDAwMzBCMTgyNTMxNDcwMDAzMzVFRUZGRkYwMTBDNjgyNDk1Cis6MTA2QjgwMDAwMDA3MTYwMDAwNkVGODI0M0MwOTcwMDAwMUEyQzgyNTE5Cis6MTA2QjkwMDAwM0U5NTgyNUFGQjkwMDE0QUZBQjAwMTAwRTAwMDA3NjIyCis6MTA2QkEwMDBBM0EwMDAxNThGOEMwMDI0MjYwMjAwMDg5MTg2MDAwREZBCis6MTA2QkIwMDAzMEM0MDAyMDEwODAwMDA2OEZCRjAwMUMzQzA1MDgwMDc4Cis6MTA2QkMwMDA5NEE1M0NDMDI0QjBGRkZGM0MwMTA4MDBBNDMwM0NDMEE5Cis6MTA2QkQwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjA4Rjk4MDAxNDM0Cis6MTA2QkUwMDAwMTE4NTAyQjU1NDBGRkM3MjQwNzAwMDEwQTAwMEQ4NUVFCis6MTA2QkYwMDAzMEZGMDBGRjkzODIwMDA0MjdCREZGRTBBRkJGMDAxODA1Cis6MTA2QzAwMDAxMDQwMDAwRjAwODA1MDIxOEY4ODAwMjQyNDBCMDAwNUM1Cis6MTA2QzEwMDA4Rjg5MDAwODkxMDcwMDAwOEY4NDAwMjAwMTAwMjgyMTNGCis6MTA2QzIwMDAzMEUzMDAzRjhGODYwMDJDMTA2QjAwMDgwMDAwMzgyMUY1Cis6MTA2QzMwMDBBRkE5MDAxMDBFMDAwNDBFQUZBQTAwMTRBMzgwMDAwNDM4Cis6MTA2QzQwMDA4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA4RDE5MDAxODMxCis6MTA2QzUwMDAzQzBGMDgwMDhERUYzQ0I0OEY5ODAwMTAzQzAyN0ZGRjgyCis6MTA2QzYwMDA4RDA4MDAxNDM0NUZGRkZGMDMzRjY4MjQwMUY4NzAyMTkyCis6MTA2QzcwMDAwMUFFNjAyMzAxODgzODIxQUZBOTAwMTAwRTAwMDQwRTc4Cis6MTA2QzgwMDBBRkFBMDAxNDBBMDAwREQzQTM4MDAwMDQ4Rjg3MDAyNDRDCis6MTA2QzkwMDAzQzA1MDgwMDk0QTUzQ0QyM0MwMjA4MDA4QzQyM0NDQzQ4Cis6MTA2Q0EwMDA5MEU2MDAwRDAwMDUyNDAwMzBDMzAwMjAxMDYwMDAyQzg5Cis6MTA2Q0IwMDAwMDQ0NDAyNThGODUwMDFDMDAwMDYwMjEyNDBCMDAwMTRBCis6MTA2Q0MwMDA5MEEzMDA4NTAwMDA0ODIxMjQwQTAwMDEzQzBGODAwMEE5Cis6MTA2Q0QwMDAzNUVFMDA3MDhEQzcwMDAwQUY4NzAwMzA4RjU4MDE3ODA3Cis6MTA2Q0UwMDAwNzAwRkZGRTNDMDM4MDAwMzQ3OTAwNzA4RjM4MDAwMEZECis6MTA2Q0YwMDAzQzA1MDgwMDhDQTUwMDc0M0MwRDA4MDA4REFEMDA3MEFCCis6MTA2RDAwMDAwMzA3NzgyMzAwQUYzODIxMDAwMDEwMjEwMEVGMzAyQjVCCis6MTA2RDEwMDAwMUEyMjAyMTAwODYxODIxM0MwMTA4MDBBQzI3MDA3NDQ0Cis6MTA2RDIwMDAzQzAxMDgwMEFDMjMwMDcwQUY0QjAxNDgzQzE5MDgwMDNGCis6MTA2RDMwMDA4RjM5M0NENEE3NDkwMTQ0QTc0QTAxNDZBRjU5MDE0Q0I5Cis6MTA2RDQwMDAzQzBCMDgwMDkxNkIzQ0QxQTM0QjAxNTJBRjQ4MDE1NDVFCis6MTA2RDUwMDAzQzA4MTAwMEE3NEMwMTU4MDNFMDAwMDhBRjQ4MDE3ODM4Cis6MTA2RDYwMDA4RjRCMEUxQzNDMEEwODAwOEQ0QTNDQjQ5NzQ5MEUxNjA2Cis6MTA2RDcwMDA5NzREMEUxNDAxNDU2MDIxMzEyQUZGRkYwQTAwMERGNkUwCis6MTA2RDgwMDAzMUE5RkZGRjhGODMwMDI0OTA2NDAwMEQzMDgyMDAyMDIyCis6MTA2RDkwMDAxMDQwMDAyOTAwMDAwMDAwMDAwMDQ4MjEwMDAwNTAyMUEwCis6MTA2REEwMDAwMDAwNDAyMTNDMDc4MDAwMzRFQjAwNzA4RDY3MDAwMDNDCis6MTA2REIwMDBBRjg3MDAzMDhGNEMwMTc4MDU4MEZGRkUzQzBEODAwMENFCis6MTA2REMwMDAzNUFDMDA3MDhEOEIwMDAwM0MwNTA4MDA4Q0E1MDA3NDZDCis6MTA2REQwMDAzQzA0MDgwMDhDODQwMDcwMDE2NzMwMjMwMEE2NzgyMUYxCis6MTA2REUwMDAwMDAwMTAyMTAxRTZDODJCMDA4MkMwMjEwMzE5NzAyMTg4Cis6MTA2REYwMDAzQzAxMDgwMEFDMkYwMDc0M0MwMTA4MDBBQzJFMDA3MDcwCis6MTA2RTAwMDBBRjQ5MDE0ODNDMEQwODAwOERBRDNDRDRBNzQ4MDE0NDcyCis6MTA2RTEwMDAyNDA5MDA0MEE3NEEwMTQ2M0MwODEwMDAyNDBBRkY5MUJCCis6MTA2RTIwMDBBRjREMDE0Q0EzNEEwMTUyQUY0OTAxNTRBNzQwMDE1ODRDCis6MTA2RTMwMDAwM0UwMDAwOEFGNDgwMTc4OEY0OTBFMTg5NzQ2MEUxMkZDCis6MTA2RTQwMDA5NzQ1MEUxMDMwQ0FGRkZGMEEwMDBFMkMzMEE4RkZGRjM2Cis6MTA2RTUwMDA4RjgzMDAyNDI3QkRGRkY4OTA2NDAwMEQzMDgyMDAyMDRFCis6MTA2RTYwMDAxMDQwMDAzQTAwMDAwMDAwMjQwQjAwMDEwMDAwNDgyMUZGCis6MTA2RTcwMDAyNDBBMDAwMTNDMDg4MDAwMzUwNzAwNzA4Q0UzMDAwMDA0Cis6MTA2RTgwMDBBRjgzMDAzMDhGNEMwMTc4MDU4MEZGRkUzQzBFODAwMDAwCis6MTA2RTkwMDAzQzA0MDgwMDkwODQzRDEwMzVDNzAwNzA4Q0VDMDAwMDY1Cis6MTA2RUEwMDAzQzA1MDgwMDhDQTUwMDc0QTNBNDAwMDMzQzE5MDgwMDRECis6MTA2RUIwMDA4RjM5MDA3MDhGQUQwMDAwMDE4MzMwMjMwMEE2MzgyMTg4Cis6MTA2RUMwMDAwMDAwMTAyMTAzMjI3ODIxMDBFNkMwMkIwMUY4NjAyMTg4Cis6MTA2RUQwMDAwMUFFNDAyNUFGQTgwMDAwM0MwMTA4MDBBQzI3MDA3NEJCCis6MTA2RUUwMDAzQzAxMDgwMEFDMkMwMDcwOTM0NjAxMEEzQzA0MDgwMEU5Cis6MTA2RUYwMDA5MDg0M0QxMUEzQTAwMDAyQTNBNjAwMDE4RkEzMDAwMDZGCis6MTA2RjAwMDAzQzA1ODBGRjMwOTkwMDdGMzRBMkZGRkYwMDYyNzgyNEE3Cis6MTA2RjEwMDAwMDE5QzYwMDAxRjg3MDI1MjQwRDMwMDBBRjRFMDE0QzU5Cis6MTA2RjIwMDAyN0JEMDAwOEFGNEQwMTU0QTc0MDAxNThBRjRCMDE0OEExCis6MTA2RjMwMDBBNzQ5MDE0NEE3NEEwMTQ2M0MwOTEwMDAyNDBBRkY4MEUyCis6MTA2RjQwMDBBMzRBMDE1MjAzRTAwMDA4QUY0OTAxNzg4RjRCMEUxOEE1Cis6MTA2RjUwMDA5NzQ2MEUxMjk3NDUwRTEwMzBDQUZGRkYwQTAwMEU2MENBCis6MTA2RjYwMDAzMEE5RkZGRjhGODUwMDFDMjQwMjAwODA5MEE0MDA4NUJCCis6MTA2RjcwMDAzMDgzMDBDMDEwNjIwMDA1OEY4NjAwMjA4Rjg4MDAwOEQzCis6MTA2RjgwMDA4Rjg3MDAwQ0FDQzgwMEM4QUNDNzAwQzQwM0UwMDAwODgxCis6MTA2RjkwMDAwMDAwMDAwMDNDMEEwODAwMjU0QTM4OTAzQzA5MDgwMDFGCis6MTA2RkEwMDAyNTI5Mzk1QzNDMDgwODAwMjUwODJEMTAzQzA3MDgwMEZECis6MTA2RkIwMDAyNEU3M0E3MDNDMDYwODAwMjRDNjM3MDAzQzA1MDgwMDY4Cis6MTA2RkMwMDAyNEE1MzQ3ODNDMDQwODAwMjQ4NDMwQTAzQzAzMDgwMDQ1Cis6MTA2RkQwMDAyNDYzMzc5ODNDMDIwODAwMjQ0MjM1NkMzQzAxMDgwMEM5Cis6MTA2RkUwMDBBQzJBM0M5MDNDMDEwODAwQUMyOTNDOEMzQzAxMDgwMEQ4Cis6MTA2RkYwMDBBQzI4M0M4ODNDMDEwODAwQUMyNzNDOTQzQzAxMDgwMENDCis6MTA3MDAwMDBBQzI2M0NBNDNDMDEwODAwQUMyNTNDOUMzQzAxMDgwMDlCCis6MTA3MDEwMDBBQzI0M0M5ODNDMDEwODAwQUMyMzNDQTgzQzAxMDgwMDhGCis6MEM3MDIwMDBBQzIyM0NBMDAzRTAwMDA4MDAwMDAwMDBDRgorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmUyMjA0Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw2MDUxICswLDAgQEAKLToxMDAwMDAwMDA4MDAwMTEwMDgwMDAwMDAwMDAwNTFDNDAwMDAwMEM4RjIKLToxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA1MUM0QzMKLToxMDAwMjAwMDAwMDAwMDM4MDAwMDUyOEMwODAwMDA4ODA4MDAwMDAwMjIKLToxMDAwMzAwMDAwMDA1MUI0MDAwMDUyQzQwODAwNTNBMDAwMDAwMDg0MjYKLToxMDAwNDAwMDAwMDBBNDc4MDgwMDUxQjQwMDAwMDFDMDAwMDBBNEZDMjYKLToxMDAwNTAwMDA4MDAzMUQ4MDgwMDAwMDAwMDAwODBFNDAwMDBBNkJDQzEKLToxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA4MEU0MjQKLToxMDAwNzAwMDAwMDAwMTI0MDAwMTI3QTAwODAwMDQ4ODA4MDAwNDAwRjMKLToxMDAwODAwMDAwMDAxN0VDMDAwMTI4QzQwMDAwMDAwMDAwMDAwMDAwODAKLToxMDAwOTAwMDAwMDAwMDAwMDgwMDFCRUMwMDAwMDAwNDAwMDE0MEIwNUMKLToxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwMzgxNDAwMDE0MEI0NTcKLToxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAzODE0RUMKLTowODAwQzAwMDAwMDAwMDMwMDAwMTc4QzhDNwotOjA4MDBDODAwMEEwMDAwNDQwMDAwMDAwMEUyCi06MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzUyRTMwMkUzMEUzCi06MTAwMEUwMDA2QTMzMDAwMDA1MDAwMDAyMDAwMDAwMDAwMDAwMDAwMzY5Ci06MTAwMEYwMDAwMDAwMDAxNDAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMEI3Ci06MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Ci06MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Ci06MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCi06MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzBDCi06MTAwMUUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMEFGCi06MTAwMUYwMDAyNDQyNTIyMDNDMDMwODAwMjQ2MzUzNTRBQzQwMDAwMEM2Ci06MTAwMjAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDA1Ci06MTAwMjEwMDAzN0JEOUZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMDExMDAwCi06MTAwMjIwMDAzQzFDMDgwMDI3OUM1MjIwMEUwMDAyNUYwMDAwMDAwMENBCi06MTAwMjMwMDAwMDAwMDAwRDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNEY0Ci06MTAwMjQwMDBBRkIwMDAxMDNDMDQ4MDAwOTQ4MjAxMDgzMDQzNzAwMDdECi06MTAwMjUwMDAyNDAyMjAwMDEwNjIwMDBCMjg2MjIwMDExNDQwMDAzNkE2Ci06MTAwMjYwMDAwMDAwMTAyMTI0MDI0MDAwMTA2MjAwMkMwMDAwMDAwMDU5Ci06MTAwMjcwMDAyNDAyNjAwMDEwNjIwMDJEMDAwMDEwMjEwQTAwMDA5RDgxCi06MTAwMjgwMDA4RkJGMDAxODM0OTEwMTAwOTIyNDAwMDk4RTMwMDAxOEFECi06MTAwMjkwMDAxMDgwMDAyMDI0MDMwMDAxMjQwMjAwMDkxNDgyMDAwNkJCCi06MTAwMkEwMDA4RjgyMDAxQzNDMDI4MDA4OTQ0MjAwMUEwMDAyMTQwMDU1Ci06MTAwMkIwMDAwMjAyODAyNThGODIwMDFDOEM0MjAwMEMxMDQwMDAxNTI5Ci06MTAwMkMwMDAwMDAwMTgyMTBFMDAwRDQ1MDAwMDAwMDA4RjgzMDAxQzY3Ci06MTAwMkQwMDA5NjI0MDAwODhGODIwMDE4OTQ2MzAwMUU5NjI1MDAwQzU3Ci06MTAwMkUwMDAwMDA0MjQwMDAwODMyMDI1QUM1MDAwMDBBQzQ1MDAwNDJECi06MTAwMkYwMDBBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNDE2Ci06MTAwMzAwMDBBQzQwMDAxOEFDNDQwMDFDMEUwMDBENzkyNDA0MDAwMTIwCi06MTAwMzEwMDAwMDAwMTgyMTBBMDAwMDlDMDA2MDEwMjEwRTAwMDQyRTJECi06MTAwMzIwMDAwMDAwMDAwMDBBMDAwMDlDMDAwMDEwMjEwRTAwMEM2NTc3Ci06MTAwMzMwMDAwMDAwMDAwMDAwMDAxMDIxOEZCRjAwMTg4RkIxMDAxNEQyCi06MTAwMzQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4RjgyMDAxQzQyCi06MTAwMzUwMDAyN0JERkZFMEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNDcxCi06MTAwMzYwMDA4QzQyMDAwQzNDMTA4MDAwOEUxMTAxMDAxMDQwMDAzNEMzCi06MTAwMzcwMDA4RkJGMDAxODBFMDAwRDQ1MDAwMDAwMDA4Rjg1MDAxODhCCi06MTAwMzgwMDAyNDA0N0ZGRjAwOTEyMDJCQUNCMTAwMDA4RTAzMDEwNEY4Ci06MTAwMzkwMDA5NjAyMDEwODAwMDMxQzAwMzA0MkZGRkYwMDYyMTgyNThFCi06MTAwM0EwMDBBQ0EzMDAwNDkyMDIwMTBBOTYwMzAxMTQzMDQyMDBGRjNDCi06MTAwM0IwMDAzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVBQ0EyMDAwOEM4Ci06MTAwM0MwMDA5NjAzMDEwQzk2MDIwMTBFMDAwMzFDMDAzMDQyRkZGRjUxCi06MTAwM0QwMDAwMDYyMTgyNUFDQTMwMDBDOTYwMzAxMTA5NjAyMDExMkNFCi06MTAwM0UwMDAwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBQ0EzMDAxMDgwCi06MTAwM0YwMDA4RTAyMDExOEFDQTIwMDE0OEUwMjAxMUNBQ0EyMDAxOERGCi06MTAwNDAwMDAxNDgwMDAwODhGODIwMDFDOTc4MjAwMDAzQzA0MjAwNUE1Ci06MTAwNDEwMDAwMDQ0MTgyNTI0NDIwMDAxQUNBMzAwMUMwQTAwMDBEQkE0Ci06MTAwNDIwMDBBNzgyMDAwMDNDMDM0MDE4OTQ0MjAwMUUwMDQzMTAyNUEwCi06MTAwNDMwMDBBQ0EyMDAxQzBFMDAwRDc5MjQwNDAwMDE4RkJGMDAxODJGCi06MTAwNDQwMDA4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjEwM0UwMDAwOEVECi06MTAwNDUwMDAyN0JEMDAyMDNDMDY4MDAwOENDMjAyQjgyNDAzMDAwMUE2Ci06MTAwNDYwMDAwNDQxMDAwODAwODAyODIxM0MwMjA4MDA4QzQyMDA2MDAyCi06MTAwNDcwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwM0UwMDAwOEI3Ci06MTAwNDgwMDAwMDYwMTAyMThDODMwMDIwOTQ4MjAwMTZBQ0MzMDI4MDhGCi06MTAwNDkwMDAyNDQyRkZGQ0E0QzIwMjg0M0MwMjA4MDA4QzQyMDA1QzlGCi06MTAwNEEwMDA4Qzg0MDAwNDk0QTMwMDBFMjQ0MjAwMDEzQzAxMDgwMDQ3Ci06MTAwNEIwMDBBQzIyMDA1QzNDMDIxMDAwQTRDMzAyODZBQ0M0MDI4OERCCi06MTAwNEMwMDAwMDAwMTgyMUFDQzIwMkI4MDNFMDAwMDgwMDYwMTAyMTRGCi06MTAwNEQwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEE1Ci06MTAwNEUwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQkU1Ci06MTAwNEYwMDAyNDAyMDAxQTk2NTEwMDA4MTQ2MjAwNUEwMDAwMjgyMUI0Ci06MTAwNTAwMDAzMjIyMDAwMTEwNDAwMDE4OEY4MjAwMUM4RTQyMDAwMDMxCi06MTAwNTEwMDAwMDAyMjM0MDNDMDIwMDNGMzQ0MkZGRkYwMDQ0MTAyQjA2Ci06MTAwNTIwMDAxMDQwMDAwNDNDMDMwMDQwOTY0MjAwMTQwQTAwMDEyNERECi06MTAwNTMwMDAwMDgzMjAyMThFMDMwMTAwMjQwMjAxMDA1NDYyMDAwNjgyCi06MTAwNTQwMDA5NjQyMDAxNDNDMDI4MDA4OTA0MjAwMDQzMDQyMDAwRkEyCi06MTAwNTUwMDAwMDAyMjUwMDk2NDIwMDE0MDA4MjEwMjVBRTAyMDA4MEExCi06MTAwNTYwMDAwQTAwMDE1NzAwMDAwMDAwOEM0MjAwMEMxMDQwMDAyOEQ3Ci06MTAwNTcwMDAwMDAwMDAwMDBFMDAwRDQ1MDAwMDAwMDA5NjAyMDEwODdBCi06MTAwNTgwMDA5NjAzMDEwQzhGODUwMDE4MzA0MjAwM0UzMDYzRkZGRjU4Ci06MTAwNTkwMDAwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDA4RTAyMDEwMEVFCi06MTAwNUEwMDBBQ0EyMDAwNDk2MDMwMTE2OTYwNDAxMEU4RjgyMDAxQzczCi06MTAwNUIwMDAwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjVBQ0EzMDAwODcyCi06MTAwNUMwMDA5NjAzMDExMDk2MDQwMTEyOTQ0NjAwMUUwMDAzMUMwMEJECi06MTAwNUQwMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMEMzQzAyMjAwMDBGCi06MTAwNUUwMDAwMEMyMzAyNTk2MDIwMTE0MjQwNDAwMDEzMDQyRkZGRkFFCi06MTAwNUYwMDBBQ0EyMDAxMDhFMDIwMTE4QUNBMjAwMTQ5MjAyMDEwQkYyCi06MTAwNjAwMDAzMDQyMDBGRkFDQTIwMDE4MEUwMDBENzlBQ0E2MDAxQzExCi06MTAwNjEwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMERBCi06MTAwNjIwMDBBQzIyMDA0MDNDMDMwODAwOEM2MzAwNDQzMjIyMDAwMkVDCi06MTAwNjMwMDAzMjI0MDAwNDI0NjMwMDAxM0MwMTA4MDBBQzIzMDA0NDgwCi06MTAwNjQwMDAxMDgwMDAwODAwMDIyODJCMDI0MDIwMjE4RkJGMDAxQ0QwCi06MTAwNjUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDBFM0IxCi06MTAwNjYwMDAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCi06MTAwNjcwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCi06MTAwNjgwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEYzCi06MTAwNjkwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQjMzCi06MTAwNkEwMDAyNDAyMDAwMzE0NjIwMDZBOTY1MTAwMDgzMjIyMDAwMUZECi06MTAwNkIwMDAxMDQwMDAxNzhGODIwMDFDOEU0MzAwMDAzQzAyMDAzRjU4Ci06MTAwNkMwMDAzNDQyRkZGRjAwMDMyMzQwMDA0NDEwMkI1MDQwMDAwNTNDCi06MTAwNkQwMDAyNDAyMDEwMDk2NDIwMDE0M0MwMzAwNDAwQTAwMDE4RUVGCi06MTAwNkUwMDAwMDgzMjAyMTU0NjIwMDA2OTY0MjAwMTQzQzAyODAwOEQ4Ci06MTAwNkYwMDA5MDQyMDAwNDMwNDIwMDBGMDAwMjI1MDA5NjQyMDAxNDkwCi06MTAwNzAwMDAwMDgyMTAyNUFFMDIwMDgwMEEwMDAxQkUwMDAwMDAwMDM5Ci06MTAwNzEwMDA4QzQyMDAwQzEwNDAwMDI1MDAwMDAwMDAwRTAwMEQ0NTJBCi06MTAwNzIwMDAwMDAwMDAwMDk2MDIwMTA4OTYwMzAxMEM4Rjg1MDAxODU2Ci06MTAwNzMwMDAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNUVBCi06MTAwNzQwMDBBQ0EyMDAwMDhFMDIwMTAwQUNBMjAwMDQ5NjAzMDExNkM4Ci06MTAwNzUwMDA5NjA0MDEwRThGODIwMDFDMDAwMzFDMDAzMDg0RkZGRkYyCi06MTAwNzYwMDAwMDY0MTgyNUFDQTMwMDA4OTYwMzAxMTA5NjA0MDExMjNBCi06MTAwNzcwMDA5NDQ2MDAxRTAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNTBGCi06MTAwNzgwMDBBQ0EzMDAwQzNDMDIyMDAwMDBDMjMwMjU5NjAyMDExNEVDCi06MTAwNzkwMDAyNDA0MDAwMTMwNDJGRkZGQUNBMjAwMTBBQ0EwMDAxNDAyCi06MTAwN0EwMDBBQ0EwMDAxODBFMDAwRDc5QUNBNjAwMUMzQzAyMDgwMDlECi06MTAwN0IwMDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA0MDcxCi06MTAwN0MwMDAzQzAyMDgwMDhDNDIwMDQ0MzIyMzAwMDQyNDQyMDAwMTExCi06MTAwN0QwMDAzQzAxMDgwMEFDMjIwMDQ0MTA2MDAwMDgzMjIyMDAwMkY0Ci06MTAwN0UwMDAwMjQwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCi06MTAwN0YwMDA4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMjAxMDQwMDAxNTU0Ci06MTAwODAwMDA4RkJGMDAxQzNDMDQ4MDAwOEM4MzAxMDQzQzAyNjAyMEVDCi06MTAwODEwMDBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkUzMDQyMDNGRjY5Ci06MTAwODIwMDAxNDQzMDAwQzhGQkYwMDFDOEM4MjAxMDAwMDAyMTlDMjBGCi06MTAwODMwMDAyNDYyRkZGQzJDNDIwMDA4MTA0MDAwMDMyNDA0MDAwMjQ0Ci06MTAwODQwMDAyNDYyRkZGRDAwNDQyMDA0M0MwMjYwMDBBQzQ0NjkxNEIzCi06MTAwODUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMyCi06MTAwODYwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzA0ODAwMEE4Ci06MTAwODcwMDA4QzgzMDEwMDI0MDIwMTAwNTA2MjAwMDMzQzAyODAwOEM2Ci06MTAwODgwMDAwMDAwMDAwRDNDMDI4MDA4OTA0MzAwMDQwMDAwMTAyMThECi06MTAwODkwMDAzMDYzMDAwRjAwMDMxRDAwMDNFMDAwMDhBQzgzMDA4MEZDCi06MTAwOEEwMDAyQzg0MDc4MTEwODAwMDBBMDAwMDI4MjEzQzAyODAwMDZGCi06MTAwOEIwMDA5NDQyMDEwODI0MDMyMDAwMzA0MjcwMDAxNDQzMDAwNUQ0Ci06MTAwOEMwMDAyNzgzRkZCMDNDMDI4MDA4OTA0MjAwMDUzMDQ1MDBGRkJFCi06MTAwOEQwMDAyNzgzRkZCMDAwMDUyMDgwMDA4MzIwMjEwMDA1MTBDMDgxCi06MTAwOEUwMDAwMDQ1MTAyMzhDODQwMDAwM0MwMzA4MDAyNDYzNTJFNDdDCi06MTAwOEYwMDAwMDAyMTBDMDAwNDMxMDIxM0MwMzgwMDBBQzY0MDA5MDUzCi06MTAwOTAwMDAwM0UwMDAwOEFGODIwMDFDMDNFMDAwMDgwMDAwMTAyMTkzCi06MTAwOTEwMDAwM0UwMDAwODAwMDAxMDIxMjQwMjAxMDAxNDgyMDAwOEY2Ci06MTAwOTIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRkMyNDQyMDAwMTUwCi06MTAwOTMwMDAzQzAxMDgwMEFDMjIwMEZDMEEwMDAyMjQzMEEyMDAyMDg2Ci06MTAwOTQwMDAzQzAyMDgwMDhDNDIwMDg0MjQ0MjAwMDEzQzAxMDgwMDYzCi06MTAwOTUwMDBBQzIyMDA4NDMwQTIwMDIwMTA0MDAwMDgzMEEzMDAxMDE4Ci06MTAwOTYwMDAzQzAyMDgwMDhDNDIwMTA4MjQ0MjAwMDEzQzAxMDgwMEJFCi06MTAwOTcwMDBBQzIyMDEwODAzRTAwMDA4MDAwMDAwMDAxMDYwMDAwODNECi06MTAwOTgwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAxMDQyNDQyMDAwMUU3Ci06MTAwOTkwMDAzQzAxMDgwMEFDMjIwMTA0MDNFMDAwMDgwMDAwMDAwMDU0Ci06MTAwOUEwMDAzQzAyMDgwMDhDNDIwMTAwMjQ0MjAwMDEzQzAxMDgwMDg2Ci06MTAwOUIwMDBBQzIyMDEwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEIyCi06MTAwOUMwMDBBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTQzNjA0MDEwMDJGCi06MTAwOUQwMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMDUzMDY2MDAwMjc1Ci06MTAwOUUwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwRTMyN0JEMDAxODZECi06MTAwOUYwMDAxMEMwMDAwNjAwNjAyODIxOEUwNDAxMDAwRTAwMDIxNEMxCi06MTAwQTAwMDAwMDAwMDAwMDBBMDAwMjVCMjQwMjAwMDE4RjgyMDAwODNGCi06MTAwQTEwMDA4RTAzMDEwNDEwNDMwMDA3MDAwMDEwMjE4RTA0MDEwMDIyCi06MTAwQTIwMDAwRTAwMDIxNDAwMDAwMDAwOEUwMjAxMDRBRjgyMDAwOEQ0Ci06MTAwQTMwMDAwMDAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEU5Ci06MTAwQTQwMDAyN0JEMDAxODI3QkRGRkQ4M0MwMzYwMTBBRkIzMDAxQ0MyCi06MTAwQTUwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFDCi06MTAwQTYwMDA4QzY0NTAwMDI0MDJGRjdGM0MxMzA4MDAyNjczNTI0ODE4Ci06MTAwQTcwMDAwMDgyMjAyNDM0ODQzODBDQUM2NDUwMDAzQzAyODAwMDk2Ci06MTAwQTgwMDAyNDAzMDAzN0FDNDMwMDA4M0MwNjA4MDAyNEM2MDg0MDk1Ci06MTAwQTkwMDAwMjYwMTAyMTI0MDQwMDFDMjQ4NEZGRkZBQzQ2MDAwMEU3Ci06MTAwQUEwMDAwNDgxRkZGRDI0NDIwMDA0M0MwMjA4MDAyNDQyMDE2QzQyCi06MTAwQUIwMDAzQzAxMDgwMEFDMjI1MjUwM0MwMjA4MDAyNDQyMDVCODE4Ci06MTAwQUMwMDAzQzAxMDgwMEFDMjI1MjU0M0MwMjA4MDAyNDQyMDI4NDNCCi06MTAwQUQwMDAzQzAxMDgwMEFDMjI1MjkwM0MwMjA4MDAyNDQyMDQwODY5Ci06MTAwQUUwMDAzQzAzMDgwMDI0NjMwODQ4M0MwNDA4MDAyNDg0MDhGNEZDCi06MTAwQUYwMDAzQzA1MDgwMDI0QTUyQzRDM0MwMTA4MDBBQzIyNTJCMDU3Ci06MTAwQjAwMDAzQzAyMDgwMDI0NDIwN0E0M0MwMTA4MDBBQzI2NTI5ODhECi06MTAwQjEwMDAzQzAxMDgwMEFDMjU1MkE0M0MwMTA4MDBBQzIzNTJBQ0I3Ci06MTAwQjIwMDAzQzAxMDgwMEFDMjQ1MkI0M0MwMTA4MDBBQzIyNTJCODhECi06MTAwQjMwMDAzQzAxMDgwMEFDMjM1MjRDM0MwMTA4MDBBQzIwNTI1ODQ4Ci06MTAwQjQwMDAzQzAxMDgwMEFDMjA1MjVDM0MwMTA4MDBBQzIwNTI2MDIzCi06MTAwQjUwMDAzQzAxMDgwMEFDMjA1MjY0M0MwMTA4MDBBQzIwNTI2ODAzCi06MTAwQjYwMDAzQzAxMDgwMEFDMjA1MjZDM0MwMTA4MDBBQzIwNTI3MEUzCi06MTAwQjcwMDAzQzAxMDgwMEFDMjQ1Mjc0M0MwMTA4MDBBQzIwNTI3OEJGCi06MTAwQjgwMDAzQzAxMDgwMEFDMjA1MjdDM0MwMTA4MDBBQzIwNTI4MEEzCi06MTAwQjkwMDAzQzAxMDgwMEFDMjA1Mjg0M0MwMTA4MDBBQzIwNTI4ODgzCi06MTAwQkEwMDAzQzAxMDgwMEFDMjY1MjhDM0MwMTA4MDBBQzI2NTI5NDUzCi06MTAwQkIwMDAzQzAxMDgwMEFDMjA1MjlDM0MwMTA4MDBBQzI1NTJBMDJFCi06MTAwQkMwMDAzQzAxMDgwMEFDMjM1MkE4MEUwMDA1NUEwMDAwMDAwMEFBCi06MTAwQkQwMDA4RjgzMDAwNDNDMDIwODAwOEM0MjAwMjAxMDYyMDAxRjNBCi06MTAwQkUwMDAwMDAwODgyMTI3OTJGRkIwM0MxMDA4MDAyNjEwNTJFNDM0Ci06MTAwQkYwMDAzQzAyMDgwMDhDNDIwMDIwMjQwNTAwMDEwMjI1MTgwNDU0Ci06MTAwQzAwMDAwMDQzMjAyNDhGODIwMDA0MDA0MzEwMjQ1MDQ0MDAwQzMxCi06MTAwQzEwMDAyNjMxMDAwMTEwODAwMDA4QUY5MDAwMUM4RTQzMDAwMEI4Ci06MTAwQzIwMDAzQzAyODAwMEFDNDMwMDkwMEUwMDBEMENBRTA1MDAwQ0ExCi06MTAwQzMwMDAwQTAwMDJERTI2MzEwMDAxQUUwMDAwMEMyNjMxMDAwMTYwCi06MTAwQzQwMDAyRTIyMDAwMjI2MTAwMDM4MTQ0MEZGRTkyNjUyMDAwNDJDCi06MTAwQzUwMDAzQzAyMDgwMDhDNDIwMDIwQUY4MjAwMDQzQzEwODAwMDVGCi06MTAwQzYwMDA4RTExMDAwMDMyMjIwMDA3MTA0MEZGREE4RjgzMDAwNDRCCi06MTAwQzcwMDAzMjIyMDAwMTEwNDAwMDIxMzIyMjAwMDI4RTAyMDEwMEM3Ci06MTAwQzgwMDBBRTAyMDAyMDhFMDIwMTA0QUUwMjAwQTgwRTAwMDFGNkEyCi06MTAwQzkwMDA4RTA0MDEwMDkyMDIwMTBCMzA0MzAwRkYyQzYyMDAxRDA0Ci06MTAwQ0EwMDA1NDQwMDAwNDAwMDMxMDgwMEUwMDAyMTAwQTAwMDJGRkVFCi06MTAwQ0IwMDAwMDAwMDAwMDAwNTMxMDIxOEM0MjAwMDAwMDQwRjgwOUExCi06MTAwQ0MwMDAwMDAwMDAwMDEwNDAwMDA0M0MwMjgwMDA4QzQzMDEwNDNFCi06MTAwQ0QwMDAzQzAyNjAyMEFDNDMwMDE0M0MwMjA4MDA4QzQyMDAzNDBCCi06MTAwQ0UwMDAzQzA0NDAwMDNDMDM4MDAwMjQ0MjAwMDFBQzY0MDEzODE1Ci06MTAwQ0YwMDAzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDIxMDQwMDAxMEY3Ci06MTAwRDAwMDAzMjIyMDAwNDNDMTA4MDAwOEUwMjAxNDBBRTAyMDAyMDFFCi06MTAwRDEwMDAwRTAwMDFGNjhFMDQwMTQwMEUwMDAzOTcwMDAwMDAwMDUzCi06MTAwRDIwMDAzQzAyNDAwMEFFMDIwMTc4M0MwMjA4MDA4QzQyMDAzOEQwCi06MTAwRDMwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzgzMjIyMDAwNEE5Ci06MTAwRDQwMDAxMDQwRkZBNDhGODMwMDA0M0MxMDgwMDA4RTAyMDE4MEJECi06MTAwRDUwMDBBRTAyMDAyMDBFMDAwMUY2OEUwNDAxODA4RTAzMDE4MDk5Ci06MTAwRDYwMDAyNDAyMEYwMDE0NjIwMDA3M0MwMjgwMDg4RTAyMDE4OEYyCi06MTAwRDcwMDAzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjUwQTAwMDMzQjI0Ci06MTAwRDgwMDBBRTAyMDA4MDM0NDIwMDgwOTA0MjAwMDAyNDAzMDA1MEY0Ci06MTAwRDkwMDAzMDQyMDBGRjE0NDMwMDA3MDAwMDAwMDAwRTAwMDM3NEZGCi06MTAwREEwMDAwMDAwMDAwMDE0NDAwMDAzMDAwMDAwMDAwRTAwMDk1RDc4Ci06MTAwREIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwM0MzQzA0NDAwMDYzCi06MTAwREMwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxQjgzQzAxMDgwMEVGCi06MTAwREQwMDBBQzIyMDAzQzBBMDAwMkMzOEY4MzAwMDQzQzAyOTAwMDU2Ci06MTAwREUwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEY3Ci06MTAwREYwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEU1Ci06MTAwRTAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMUMxCi06MTAwRTEwMDAwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjAyN0JERkZFMDRDCi06MTAwRTIwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxODMwCi06MTAwRTMwMDAwRTAwMDM0NTMwQjAwMEZGOEY4M0ZGQTgwMjIwMjAyMTYxCi06MTAwRTQwMDA5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU4QzcwMDAxODk5Ci06MTAwRTUwMDAzQzAyODAwMDBFMDAwMzUwMDIwMjgwMjQxNjAwMDAwQUFCCi06MTAwRTYwMDA4RkJGMDAxODNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTM1Ci06MTAwRTcwMDAyNDAyMDAwMkFDNzEwMUMwQTA2MjAxQzQzQzAyMTAwMDU3Ci06MTAwRTgwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDUyCi06MTAwRTkwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRThBRkJGMDAxMDFBCi06MTAwRUEwMDAzQzAzODAwMDk0NjIwMTg0MzA0MjAyMDAxMDQwMDAwNTNGCi06MTAwRUIwMDAwMDAwMjAyMTBFMDAwRkNEMDAwMDAwMDAwQTAwMDM4QTcwCi06MTAwRUMwMDAyNDA0MDAwMThDNjIwMTg4MDQ0MDAwMEE4RkJGMDAxMEQ2Ci06MTAwRUQwMDA4QzYyMDE4ODNDMDNGRjAwMDA0MzEwMjQzQzAzMDQwMEEzCi06MTAwRUUwMDAxNDQzMDAwNDI0MDQwMDAxOEY4MkZGQTg5MDQyMDAwOEVDCi06MTAwRUYwMDA4RkJGMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxOEZDCi06MTAwRjAwMDA4RjgyRkZBQzI0MDMwMDAxMjQwNTAwMDFBMDQwMDAxQUQ5Ci06MTAwRjEwMDA4RjgyRkZBOEE0NDMwMDE2M0MwMjgwMDAwQTAwMDM1NUZDCi06MTAwRjIwMDA4QzQ0MDE0MDhGODVGRkE4MjdCREZGRTBBRkJGMDAxQ0E4Ci06MTAwRjMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5MEEyMDAwMDIzCi06MTAwRjQwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzAwMDAzMTgyQjIzCi06MTAwRjUwMDAwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDUzQzAyODAwMDgzCi06MTAwRjYwMDAyNDAyMDA1MDE0ODIwMDgxOEZCRjAwMUMzQzAyODAwMENDCi06MTAwRjcwMDA5MDQyMDE0ODMwNDIwMEZGMjQ0M0ZGRkYyQzYyMDAwNUVECi06MTAwRjgwMDAxMDQwMDA3QThGQkYwMDFDMDAwMzEwODAzQzAzMDgwMDUzCi06MTAwRjkwMDAyNDYzNTFEQzAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwODEzCi06MTAwRkEwMDAwMDAwMDAwMDNDMTE4MDAwOEUyNDAxNDAwRTAwMDM0NTJCCi06MTAwRkIwMDA4RjkyRkZBODhFNTAwMDBDOEUyMjAxNDQxNjAyMDAwMjcwCi06MTAwRkMwMDAyNDAyMDAwMUFFNDIwMDBDMEUwMDAzNTA4RTI0MDE0MEFBCi06MTAwRkQwMDA4RTIyMDE0NDE0NTAwMDA2OEZCRjAwMUM4RkIyMDAxOEVGCi06MTAwRkUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMzkyN0JEMDAyMDA4Ci06MTAwRkYwMDA4RTQyMDAwQzBBMDAwNDIyMDAwMDAwMDA5NEEyMDAxMDlGCi06MTAxMDAwMDAzQzA0ODAwMDhDODMwMTQ0MzA0MkZGRkYxNDYyMDAwOURECi06MTAxMDEwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTA4QzgyMDE0MDA0Ci06MTAxMDIwMDBBQzgyMDIwMDNDMDIxMDAwQUM4MjAyMzgwQTAwMDQyOUEzCi06MTAxMDMwMDA4RkJGMDAxQzk0QTIwMDEwMEEwMDA0MjIwMDAwMDAwMEQwCi06MTAxMDQwMDAyNDAyMDAyMDE0ODIwMDBFM0MxMTgwMDA5NEEyMDAxMkExCi06MTAxMDUwMDAzQzAzODAwMDhDNjMwMTQ0MzA0MkZGRkYxNDYyMDAwNUIyCi06MTAxMDYwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTIwQTAwMDNGQ0Y4Ci06MTAxMDcwMDA4RkJGMDAxQzk0QTIwMDEyMEEwMDA0MjIwMDAwMDAwMDhFCi06MTAxMDgwMDA4RTI0MDE0MDBFMDAwMzQ1OEY5MkZGQTg5NjQyMDAxMjY1Ci06MTAxMDkwMDA4RTIzMDE0NDMwNTBGRkZGMTYwMzAwMDIyNDAyMDAwMTlBCi06MTAxMEEwMDBBNjQyMDAxMjBFMDAwMzUwOEUyNDAxNDA4RTIyMDE0NEZECi06MTAxMEIwMDAxNjAyMDAwNjhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEZCCi06MTAxMEMwMDA4RkIwMDAxMDBBMDAwMzhFMjdCRDAwMjA5NjQyMDAxMjQ4Ci06MTAxMEQwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTQzQzAzODAwMEQ3Ci06MTAxMEUwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDg4RkJGMDAxQzc0Ci06MTAxMEYwMDAyNDAyMDAwMThGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMENECi06MTAxMTAwMDBBNEEyMDAxNDBBMDAxNDI0MjdCRDAwMjA5NEEyMDAxNEY1Ci06MTAxMTEwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTYzQzAzODAwMDk0Ci06MTAxMTIwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDgyNDAyMDAwMTc2Ci06MTAxMTMwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ5Ci06MTAxMTQwMDBBNEEyMDAxNjBBMDAwQjAwMjdCRDAwMjA5NEEyMDAxNkRFCi06MTAxMTUwMDAxNDQwMDAwNjhGQkYwMDFDM0MwMjA4MDA4QzQyMDA3MDQ3Ci06MTAxMTYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA4RkIyMDAxODNDCi06MTAxMTcwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMERECi06MTAxMTgwMDAyN0JERkZEOEFGQjIwMDE4OEY5MkZGQThBRkIxMDAxNEVGCi06MTAxMTkwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMDAwMTAzQzAyODAwMDE2Ci06MTAxMUEwMDAzNDUxMDEwMDhDNTAwMTAwOTI0MjAwMDA5MjIzMDAwOTRBCi06MTAxMUIwMDAzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQUIyODYyMDAyMEIwCi06MTAxMUMwMDAxMDQwMDAxOTI0MDIwMDM4Mjg2MjAwMEExMDQwMDAwRDY3Ci06MTAxMUQwMDAyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkU4RjgyMDAxQ0ExCi06MTAxMUUwMDAwNDYwMDEwMzI4NjIwMDAyMTQ0MDAwMkE4RjgyMDAxQzYwCi06MTAxMUYwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMjAwQTAwMDU0QzYyCi06MTAxMjAwMDA4RkIzMDAxQzEwNjIwMDYwMjg2MjAwMEIxNDQwMDBGOUNDCi06MTAxMjEwMDA4RkJGMDAyMDI0MDIwMDBFMTA2MjAwNzg4RjgyMDAxQzE1Ci06MTAxMjIwMDAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwRDEyODYyMDAzOUZGCi06MTAxMjMwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBFNEZDCi06MTAxMjQwMDAyODYyMDAzNzEwNDAwMEMyMjQwMjAwMzUxMDYyMDBEODI2Ci06MTAxMjUwMDA4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMxMDYyMDAyREM4Ci06MTAxMjYwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOUQwCi06MTAxMjcwMDAxMDYyMDBDODhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzBECi06MTAxMjgwMDAxMDYyMDBBMjhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzIzCi06MTAxMjkwMDA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwRDY4RkJGMDAyMEIzCi06MTAxMkEwMDAwRTAwMEQ0NTAwMDAwMDAwM0MwMzgwMDAzNDYzMDEwMDg3Ci06MTAxMkIwMDA4QzYyMDAwMDhGODUwMDE4OTQ2NzAwMDg5NDY2MDAwQzBCCi06MTAxMkMwMDBBQ0EyMDAwMDhDNjQwMDA0OEY4MjAwMUMwMDA2MzQwMDc1Ci06MTAxMkQwMDBBQ0E0MDAwNDk0NDgwMDFFOEM2MjAwMTgwMDA3M0MwMDc3Ci06MTAxMkUwMDAwMEU4MzgyNUFDQTIwMDA4OEM2MjAwMUMyNDA0MDAwMTMwCi06MTAxMkYwMDBBQ0EyMDAwQzkwNjIwMDBBMDBDMjMwMjVBQ0E2MDAxMDFGCi06MTAxMzAwMDBBQ0EwMDAxNEFDQTAwMDE4QUNBNzAwMUMwQTAwMDUwQjkwCi06MTAxMzEwMDA4RkJGMDAyMDhGODIwMDFDOEM0MjAwMEMxMDQwMDBCNTUzCi06MTAxMzIwMDA4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA4RjgyMDAxQ0MyCi06MTAxMzMwMDA5NjI0MDAwODk2MjUwMDBDOTQ0MzAwMUUwMDA0MjIwMjA3Ci06MTAxMzQwMDA5NjI2MDAwRThGODIwMDE4MDAwNDI2MDAwMDgzMjAyNUI4Ci06MTAxMzUwMDAwMDA1MkMwMDNDMDMwMDgwMDBBNjI4MjUwMDgzMjAyNUUyCi06MTAxMzYwMDBBQzQwMDAwMEFDNDAwMDA0QUM0MDAwMDhBQzQwMDAwQ0I1Ci06MTAxMzcwMDBBQzQ1MDAxMEFDNDAwMDE0QUM0MDAwMThBQzQ0MDAxQzVDCi06MTAxMzgwMDAwQTAwMDUwQTI0MDQwMDAxOTYyMjAwMEMxNDQwMDAxOEVCCi06MTAxMzkwMDAwMDAwMDAwMDkyNDIwMDA1MzA0MjAwMTAxNDQwMDAxNDhBCi06MTAxM0EwMDAwMDAwMDAwMDBFMDAwMzQ1MDIwMDIwMjE5MjQyMDAwNUNCCi06MTAxM0IwMDAwMjAwMjAyMTM0NDIwMDEwMEUwMDAzNTBBMjQyMDAwNTFBCi06MTAxM0MwMDA5MjQyMDAwMDI0MDMwMDIwMzA0MjAwRkYxMDQzMDA4OEI2Ci06MTAxM0QwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEE1Ci06MTAxM0UwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDEwMzYyN0JEMDAyOEZFCi06MTAxM0YwMDAwMDAwMDAwRDBBMDAwNTRCOEZCRjAwMjA4QzQyMDAwQzNFCi06MTAxNDAwMDAxMDQwMDA3QzhGQkYwMDIwMEUwMDBENDUwMDAwMDAwMDQyCi06MTAxNDEwMDA4RTIyMDAwNDhGODQwMDE4OTYyMzAwMENBQzgyMDAwMEZBCi06MTAxNDIwMDAzQzAyODAwODk0NDUwMDJDOEY4MjAwMUMwMDAzMUMwMEE1Ci06MTAxNDMwMDAzMEE1RkZGRjk0NDYwMDFFM0MwMjQwMEUwMDY1MTgyNUIzCi06MTAxNDQwMDAwMEMyMzAyNUFDODMwMDA0QUM4MDAwMDhBQzgwMDAwQ0U2Ci06MTAxNDUwMDBBQzgwMDAxMEFDODAwMDE0QUM4MDAwMThBQzg2MDAxQzdFCi06MTAxNDYwMDAwQTAwMDUwQTI0MDQwMDAxMEUwMDAzNDUwMjAwMjAyMUExCi06MTAxNDcwMDA4RjkzRkZBQzAyMDAyMDIxMEUwMDAzNTBBNjYwMDAwQ0U5Ci06MTAxNDgwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMDE4RjgyMDAxQzVDCi06MTAxNDkwMDA4QzQyMDAwQzEwNDAwMDU3OEZCRjAwMjAwRTAwMEQ0NUZECi06MTAxNEEwMDAwMDAwMDAwMDk2MjIwMDBDOEY4MzAwMTgwMDAyMTQwMDM4Ci06MTAxNEIwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RTQ0MDAzOEUwCi06MTAxNEMwMDA4RjgyMDAxQ0FDNjQwMDBDOEU0NjAwM0M5NDQ1MDAxRUNDCi06MTAxNEQwMDAzQzAyNDAxRkFDNjYwMDEwMDBBMjI4MjU4RTYyMDAwNDZBCi06MTAxNEUwMDAyNDA0MDAwMUFDNjIwMDE0QUM2MDAwMThBQzY1MDAxQzYwCi06MTAxNEYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDczCi06MTAxNTAwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgyNDAyMDAyMEFBCi06MTAxNTEwMDAxMDgyMDAzOThGQjMwMDFDMEUwMDBGMUYwMDAwMDAwMDY2Ci06MTAxNTIwMDAxMDQwMDAzNDhGQkYwMDIwM0MwMzgwMDA4QzYyMDFGODIzCi06MTAxNTMwMDAwNDQwRkZGRTI0MDIwMDAyQUM3MDAxQzBBMDYyMDFDNDlFCi06MTAxNTQwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDA1NEI4RkJGMDAyMDdFCi06MTAxNTUwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODIzCi06MTAxNTYwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFNjgyN0JEMDAyODRDCi06MTAxNTcwMDA5NjI1MDAwQzAyMDAyMDIxOEZCRjAwMjA4RkIzMDAxQzk1Ci06MTAxNTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMEU4REJBCi06MTAxNTkwMDAyN0JEMDAyODAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODQ1Ci06MTAxNUEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFQjgyN0JEMDAyOEJDCi06MTAxNUIwMDA5MjI1MDAwRDAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODZECi06MTAxNUMwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMDkyN0JEMDAyODRBCi06MTAxNUQwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEEzCi06MTAxNUUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFRTAyN0JEMDAyODU0Ci06MTAxNUYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDcyCi06MTAxNjAwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgzQzAzODAwMEQ1Ci06MTAxNjEwMDA4QzYyMDI3ODA0NDBGRkZFMjQwMjAwMDJBQzY0MDI0MEE3Ci06MTAxNjIwMDBBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhBQzYyMDI3OEIxCi06MTAxNjMwMDBBMzgwMDAxMDAzRTAwMDA4QTM4MDAwMTEzQzAzODAwMDk5Ci06MTAxNjQwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRBQzYyMDI0MDdDCi06MTAxNjUwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAwM0UwMDAwOEUxCi06MTAxNjYwMDBBQzYyMDI3ODNDMDI2MDAwMDNFMDAwMDg4QzQyNTQwNDQzCi06MTAxNjcwMDA5MDgzMDAzMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRjQ5Ci06MTAxNjgwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MDgyMDA0Q0E3Ci06MTAxNjkwMDA5NDgzMDA0RTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQzFDCi06MTAxNkEwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQzUzCi06MTAxNkIwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMDgyCi06MTAxNkMwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQkRGCi06MTAxNkQwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxOEJDCi06MTAxNkUwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwOEJBCi06MTAxNkYwMDBBNTBBMDAyMjAzRTAwMDA4MDAwMDAwMDAyN0JERkZEODczCi06MTAxNzAwMDBBRkIyMDAxODNDMTI4MDA4QUZCNDAwMjBBRkIzMDAxQzg5Ci06MTAxNzEwMDBBRkIxMDAxNEFGQkYwMDI0QUZCMDAwMTAzNjUxMDEwMENDCi06MTAxNzIwMDAzQzAyNjAwMDhDNDI1NDA0OTIyMjAwMEMzQzE0MDgwMERECi06MTAxNzMwMDA5Mjk0MDBGNzMwNDMwMEZGMjQwMjAwMDExMDYyMDAzMjRGCi06MTAxNzQwMDAwMDgwOTgyMTI0MDIwMDAyMTQ2MjAwMzUzNjUwMDA4MDg3Ci06MTAxNzUwMDAwRTAwMTNGRTAwMDAwMDAwOTIwMjAwNEMyNDAzRkY4MEU0Ci06MTAxNzYwMDAzQzA0ODAwMDMwNDIwMDdGMDAwMjExQzAyNDQyMDI0MDRECi06MTAxNzcwMDAwMjYyMTAyMTAwNDMxODI0QUM4MzAwOTQ5MjQ1MDAwOEIzCi06MTAxNzgwMDA5MjA0MDA0QzMwNDIwMDdGM0MwMzgwMDYxNDg1MDAwNzIxCi06MTAxNzkwMDAwMDQzODAyMTI0MDJGRkZGQTIyMjAwMTEyNDAyRkZGRjQ4Ci06MTAxN0EwMDBBNjIyMDAxMjBBMDAwNUJFMjQwMkZGRkY5NjAyMDAyMEI2Ci06MTAxN0IwMDBBMjIyMDAxMTk2MDIwMDIyQTYyMjAwMTI4RTAyMDAyNDBDCi06MTAxN0MwMDAzQzA0ODAwOEFFMjIwMDE0MzQ4NTAwODA5MEEyMDA0Q0I2Ci06MTAxN0QwMDAzNDgzMDEwMEEwNjIwMDEwOENBMjAwM0NBQzYyMDAxOEFGCi06MTAxN0UwMDA4QzgyMDA2OEFDNjIwMEU0OEM4MjAwNjRBQzYyMDBFMDMxCi06MTAxN0YwMDA4QzgyMDA2Q0FDNjIwMEU4MjQwMjAwMDFBMEEyMDA2OEE4Ci06MTAxODAwMDAwQTAwMDVEQTNDMDQ4MDA4MEUwMDE0MTcwMDAwMDAwMEVFCi06MTAxODEwMDAzNjQyMDA4MEEwNDAwMDY4MEEwMDA1REEzQzA0ODAwOEQ3Ci06MTAxODIwMDBBMjAwMDA2OEEyMDAwMDY5MEEwMDA2MTUzQzAyODAwOEI4Ci06MTAxODMwMDAzNDgzMDA4MDhDNjIwMDM4MzQ4NTAxMDBBQzYyMDA2QzE3Ci06MTAxODQwMDAyNDAyMDAwMUEwNjIwMDY5OTBBMjAwQzU5MDgzMDAwOEY0Ci06MTAxODUwMDAzMDUxMDBGRjMwNzIwMDdGMTIzMjAwMTkwMDExMTFDMEE4Ci06MTAxODYwMDAyNDQyMDI0MDAyNjIxMDIxMjQwM0ZGODAwMDQzMTgyNDE2Ci06MTAxODcwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjJGCi06MTAxODgwMDAwMDQzODAyMThFMDIwMDBDMTA0MDAwMEQwMjAwMjAyMTM4Ci06MTAxODkwMDAwRTAwMDU2QTAwMDAwMDAwMjYyMjAwMDEzMDUxMDBGRjAyCi06MTAxOEEwMDA5MjAzMDAzQzAyMzQxMDI2MDAwMjEwMkIwMDAyMTAyMzg5Ci06MTAxOEIwMDAzMDYzMDA3RjAyMjI4ODI0MEEwMDA1RTRBMjAzMDAzQzcyCi06MTAxOEMwMDAzQzA4ODAwODM1MDQwMTAwOEM4MjAwRDAzNTA3MDA4MDc4Ci06MTAxOEQwMDBBQ0UyMDAzQzhDODIwMEQwQUQwMjAwMDA5MEU1MDA0Q0YwCi06MTAxOEUwMDA5MDg2MDBDNTkwRTMwMDRDOTA4NDAwQzUyNDAyRkY4MEUwCi06MTAxOEYwMDAwMEEyMjgyNDMwNjMwMDdGMzA4NDAwRkYwMEE2MjgyNTQyCi06MTAxOTAwMDAwMDY0MTgyQTEwNjAwMDAyMzBBNTAwRkYzOEE1MDA4MDhFCi06MTAxOTEwMDBBMEU1MDA0Q0ExMDUwMDA5M0MwMjgwMDg5MDQzMDAwRUEwCi06MTAxOTIwMDAzNDQ0MDA4MDNDMDU4MDAwQTA0MzAwMEE4QzgzMDAxOEVBCi06MTAxOTMwMDAzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjRBQzgzMDAxODkyCi06MTAxOTQwMDA4Q0EyMDFGODA0NDBGRkZFMDAwMDAwMDBBQ0IzMDFDMDBGCi06MTAxOTUwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEZCCi06MTAxOTYwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDJBMEEyMDFDNEE1Ci06MTAxOTcwMDAyN0JEMDAyODNDMDIxMDAwMDNFMDAwMDhBQ0EyMDFGOERCCi06MTAxOTgwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMDM1Ci06MTAxOTkwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMDIwMDgwMzAyMUM5Ci06MTAxOUEwMDBBMEEwMDAwMDkwQTIwMDAwOEY4NDAwMTQwMDAyMTFDMENCCi06MTAxOUIwMDAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjEyNDAyRkY4MDMwCi06MTAxOUMwMDAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMURDCi06MTAxOUQwMDAzQzAyODAwMEFDNDQwMDI0MDNFMDAwMDhBQ0MzMDAwMERCCi06MTAxOUUwMDA5NDgyMDAwNjkwODMwMDA1OEM4NTAwMEM4Qzg2MDAxMDg0Ci06MTAxOUYwMDA4Qzg3MDAxODhDODgwMDFDOEM4NDAwMjAzQzAxMDgwMDE3Ci06MTAxQTAwMDBBNDIyNTJDNjNDMDEwODAwQTAyMzUyQzUzQzAxMDgwMDk0Ci06MTAxQTEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMDU5Ci06MTAxQTIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDJECi06MTAxQTMwMDBBQzI0NTJFMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwOEYzCi06MTAxQTQwMDAzNDQyMDEwMDhDNDQwMDM0M0MwMzgwMDAzNDY1MDQwMEJGCi06MTAxQTUwMDBBQzY0MDAzODhDNDIwMDM4QUY4NTAwMjBBQzYyMDAzQzlBCi06MTAxQTYwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTAxQTcwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDYzMDg0MDBGRjg0Ci06MTAxQTgwMDAwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMzAwMDAwMDAwMEIxCi06MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4QzYyMDAwMDk5Ci06MTAxQUEwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDAwM0UwMDAwOEUzCi06MTAxQUIwMDBBRjgyMDAyMDk0QzIwMDAwM0MwODA4MDA5NTA4MDBDQUNDCi06MTAxQUMwMDAzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNEMyMDAwMDdFCi06MTAxQUQwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkI1NDQwMDAwMThFCi06MTAxQUUwMDBBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDA4QzYzMDBDQzUzCi06MTAxQUYwMDAyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDAzMDQyRkZGRjkzCi06MTAxQjAwMDAxNDQzMDAwNzNDMDI4MDA4MDEwNzEwMkJBNEEwMDAwMDJBCi06MTAxQjEwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDAzQzAyODAwOEE1Ci06MTAxQjIwMDAzNDQ2MDEwMDhDQzMwMDI4OTRBMjAwMDAzQzA0ODAwMENECi06MTAxQjMwMDAzMDQyRkZGRTAwMDIxMEMwMDA2MjEwMjFBQzgyMDAzQzY3Ci06MTAxQjQwMDA4QzgyMDAzQzAwNjIxODIzMTg2MDAwMDQwMDAwMDAwMDMyCi06MTAxQjUwMDA4Q0MyMDAyNDBBMDAwNkE2MjQ0MjAwMDE4Q0MyMDAyNDg0Ci06MTAxQjYwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTAzQzAzODAwMDNDCi06MTAxQjcwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTAxQjgwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMDg5Ci06MTAxQjkwMDA5NEEyMDAwMDNDMDQ4MDAwMzA0MjAwMDEwMDAyMTBDMDBBCi06MTAxQkEwMDAwMDQ0MTAyMThDNDMwNDAwQUQyMzAwMDA4QzQyMDQwNDQ3Ci06MTAxQkIwMDBBRDIyMDAwNDNDMDIwMDIwMDNFMDAwMDhBQzgyMDAzMEFCCi06MTAxQkMwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEY2Ci06MTAxQkQwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMDZFCi06MTAxQkUwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMDlGCi06MTAxQkYwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMDcyCi06MTAxQzAwMDAwRTAwMDY3QjAyNDAzODIxMEEwMDA2REQwMDAwMDAwMEJECi06MTAxQzEwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwNzhECi06MTAxQzIwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMDI4Ci06MTAxQzMwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMDY5Ci06MTAxQzQwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMDIzCi06MTAxQzUwMDAyNDQyMDAwMUE2MjIwMDAwM0MwMjgwMDgzNDQyMDEwMDE4Ci06MTAxQzYwMDA5NjIzMDAwMDk0NDIwMDNDMTQ0MzAwMDQ4RkJGMDAxQ0U0Ci06MTAxQzcwMDAyNDAyMDAwMUE2MjIwMDAwOEZCRjAwMUM4RkIyMDAxOEIyCi06MTAxQzgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEMyCi06MTAxQzkwMDAyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgzNDQyMDEwMEJFCi06MTAxQ0EwMDA4QzQ4MDAzNDNDMDM4MDAwMzQ2OTA0MDBBQzY4MDAzODgwCi06MTAxQ0IwMDA4QzQyMDAzODMwRTcwMEZGQUY4OTAwMjBBQzYyMDAzQzY2Ci06MTAxQ0MwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTAxQ0UwMDA4QzgyMDAwQzhDODIwMDBDOTc4MzAwMEVBRDIyMDAwMEM5Ci06MTAxQ0YwMDA4QzgyMDAxMDAwNjA0MDIxQUQyMjAwMDQ4QzgyMDAxODBDCi06MTAxRDAwMDBBRDIyMDAwODhDODIwMDFDQUQyMjAwMEM4Q0EyMDAxNEI1Ci06MTAxRDEwMDBBRDIyMDAxMDhDODIwMDIwQUQyMjAwMTQ5MDgyMDAwNUJDCi06MTAxRDIwMDAzMDQyMDBGRjAwMDIxMjAwQUQyMjAwMTg4Q0EyMDAxODAxCi06MTAxRDMwMDBBRDIyMDAxQzhDQTIwMDBDQUQyMjAwMjA4Q0EyMDAxMDUxCi06MTAxRDQwMDBBRDIyMDAyNDhDQTIwMDFDQUQyMjAwMjg4Q0EyMDAyMDExCi06MTAxRDUwMDBBRDIyMDAyQzM0MDJGRkZGQUQyNjAwMzBBRDIwMDAzNDUwCi06MTAxRDYwMDA1MDYyMDAwMTM0MDhGRkZGQUQyODAwMzg1MEUwMDAxMTM4Ci06MTAxRDcwMDAzQzAyODAwODNDMDQ4MDA4MzQ4NDAxMDA5NDgyMDA1MEI2Ci06MTAxRDgwMDAzMDQyRkZGRkFEMjIwMDNDOTQ4MzAwNDQ5NDg1MDA0NDIwCi06MTAxRDkwMDAyNDAyMDAwMTMwNjNGRkZGMDAwMzE4QzIwMDY0MTgyMTExCi06MTAxREEwMDA5MDY0MDA1NDMwQTUwMDA3MDBBMjEwMDQwQTAwMDc0ODAwCi06MTAxREIwMDAwMDQ0MTAyNTM0NDIwMTAwQUQyMDAwM0M5NDQzMDA0NDBGCi06MTAxREMwMDA5NDQ0MDA0NDMwNjNGRkZGMDAwMzE4QzIwMDYyMTgyMUVFCi06MTAxREQwMDAzMDg0MDAwNzkwNjUwMDU0MjQwMjAwMDEwMDgyMTAwNDQyCi06MTAxREUwMDAwMDAyMTAyNzAwNDUxMDI0QTA2MjAwNTQwMDAwMDAwMEVCCi06MTAxREYwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwMDYzNDQyMDA0MEU5Ci06MTAxRTAwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAxRTEwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGRDA2Ci06MTAxRTIwMDAzQzA2ODAwODM0QzIwMTUwMzQ2MzA0MDAzNEM3MDE0QUMwCi06MTAxRTMwMDAzNEM0MDEzNDM0QzUwMTQwMzRDNjAxNDRBRkEyMDAxMDlCCi06MTAxRTQwMDAwRTAwMDZCRUFGODMwMDIwOEZCRjAwMTgwM0UwMDAwODFECi06MTAxRTUwMDAyN0JEMDAyMDhGODMwMDBDM0MwNjA4MDA4Q0M2MDBFOERDCi06MTAxRTYwMDA4RjgyMDAxNDMwNjMzRkZGMDAwMzE5ODAwMDQ2MTAyMTY5Ci06MTAxRTcwMDAwMDQzMTAyMTI0MDNGRjgwMDA0MzE4MjQzQzA2ODAwMDA3Ci06MTAxRTgwMDBBQ0MzMDAyODMwNDIwMDdGM0MwMzgwMEMwMDQzMzAyMTZCCi06MTAxRTkwMDA5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjEzNDQyMDAxMDMwCi06MTAxRUEwMDBBMEMyMDAwRDhGODkwMDBDM0MwMjgwMDgzNDQyMDEwMDYyCi06MTAxRUIwMDA5NDQzMDA0NDAwMDkxMzgyMzA0ODAwMDMyNDAyMDAwMUM3Ci06MTAxRUMwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNUZECi06MTAxRUQwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDc5MEY0Ci06MTAxRUUwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDc5MEZGCi06MTAxRUYwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA3OTAyNDQzMDAwMTI2Ci06MTAxRjAwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQjIzCi06MTAxRjEwMDA1MDQwMDAwQTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwM0Y1Ci06MTAxRjIwMDAzQzAzODAwODBBMDAwNzlEMjQwNzAwMDEzNDYzMDEwMDc4Ci06MTAxRjMwMDA5NDYyMDA0QzI0NDIwMDAxQTQ2MjAwNEMwMDA5MTM4MjA4Ci06MTAxRjQwMDAzMDQzMDAwMzJDNjIwMDAyMTA0MDAwMDkwMDgwMjgyMTY5Ci06MTAxRjUwMDAxNDYwMDAwNDAwMDAwMDAwOTRDMjAwMzQwQTAwMDdBREMxCi06MTAxRjYwMDAzMDQ2RkZGRjhDQzYwMDM4MEEwMDA3QUQwMDgwMjgyMUVDCi06MTAxRjcwMDAwMDAwMzAyMTNDMDQwODAwMjQ4NDUyQzAwQTAwMDZGMjBDCi06MTAxRjgwMDAwMDAwMDAwMDI3QkRGRjkwQUZCNjAwNjhBRkI1MDA2NDQ5Ci06MTAxRjkwMDBBRkI0MDA2MEFGQjMwMDVDQUZCMjAwNThBRkIxMDA1NDUzCi06MTAxRkEwMDBBRkJGMDA2Q0FGQjAwMDUwOEM5MDAwMDAwMDgwQjAyMTNCCi06MTAxRkIwMDAzQzAyMDgwMDhDNDIwMEU4OTYwNDAwMzI4RjgzMDAxNDMzCi06MTAxRkMwMDAyNDE0RkY4MDMwODQzRkZGMDA2MjE4MjEwMDA0MjE4MDI4Ci06MTAxRkQwMDAwMDY0MTgyMTAwNzQxMDI0M0MxMzgwMDAwMEEwOTAyMTlDCi06MTAxRkUwMDA5MEE1MDAwMEFFNjIwMDI4OTIwNDAwMzIzQzAyODAwQ0YyCi06MTAxRkYwMDAzMDYzMDA3RjAwNjI4ODIxMzA4NDAwQzAyNDAyMDA0MEVBCi06MTAyMDAwMDAxNDgyMDAzMjAwMDBBODIxOEUzNTAwMzg4RTIyMDAxODdDCi06MTAyMDEwMDAxNDQwMDAwMjI0MDIwMDAxQUUyMjAwMTg5MjAyMDAzQzhCCi06MTAyMDIwMDAzMDQyMDAyMDE0NDAwMDBFOEY4MzAwMTQwMDA1MTFDMEMwCi06MTAyMDMwMDAyNDQyMDI0MDAwNjIxODIxMzA2NDAwNzgzQzAyMDA4MDkzCi06MTAyMDQwMDAwMDgyMjAyNTAwNzQxODI0QUU2MzA4MDBBRTY0MDgxMEQ2Ci06MTAyMDUwMDA4RTIyMDAxODhFMDMwMDA4MDA0MzEwMjFBRTIyMDAxOEMzCi06MTAyMDYwMDA4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEwMDYyMTgyQkJGCi06MTAyMDcwMDAxMDYwMDA0MzAwMDAwMDAwOTI0MjAwMDAyNDQyMDAwMTcyCi06MTAyMDgwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkQxCi06MTAyMDkwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNENGCi06MTAyMEEwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAzMDYzMDA3RkJDCi06MTAyMEIwMDAwMDgyMjAyMTNDMDI4MDBBMDA5NDIwMjQwMDYyMTgyMTIyCi06MTAyMEMwMDBBRTY0MDAyNDBBMDAwOEJFQUVDMzAwMDA5MjAzMDAzMkQyCi06MTAyMEQwMDAyNDAyRkZDMDAwNDMxMDI0MzA0MjAwRkYxNDQwMDAwNURBCi06MTAyMEUwMDAyNDAyMDAwMUFFMjIwMDE4OTYyMjAwMzQwQTAwMDgyRUI1Ci06MTAyMEYwMDAzMDU1RkZGRjhFMjIwMDE0MjQ0MjAwMDFBRTIyMDAxODRBCi06MTAyMTAwMDA5MjAyMDAzMDAwMDIxNjAwMDAwMjE2MDMwNDQxMDAxQzc3Ci06MTAyMTEwMDAwMDAwMDAwMDk2MDIwMDMyMjdBNDAwMTAwMDgwMjgyMTUxCi06MTAyMTIwMDBBN0EyMDAxNjk2MDIwMDMyMDAwMDMwMjEyNDA3MDAwMTA5Ci06MTAyMTMwMDAzMDQyRkZGRkFGODIwMDBDMEUwMDA2RjJBRkEwMDAxQzgxCi06MTAyMTQwMDA5NjAyMDAzMjhGODMwMDE0M0MwNDA4MDA4Qzg0MDBFODVGCi06MTAyMTUwMDAzMDQyM0ZGRjAwMDIxMTgwMDA2NDE4MjEwMDYyMTgyMTA0Ci06MTAyMTYwMDAwMDc0MTAyNEFFNjIwMDJDMzA2MzAwN0YzQzAyODAwRUFECi06MTAyMTcwMDAwMDYyMTgyMTkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwREM1Ci06MTAyMTgwMDA5MjIyMDAwRDMwNDIwMDEwNTA0MDAwNzg5MjQyMDAwMDMwCi06MTAyMTkwMDAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNEM4RUMzMDAwMDRECi06MTAyMUEwMDAzQzEzMDgwMDk2NzMwMEM2MjQ0MkZGRkZBNDgyMDA0QzMzCi06MTAyMUIwMDA5NDYyMDAzMjk2MjMwMDBFMzA1NEZGRkYzMDcwRkZGRjEwCi06MTAyMUMwMDAzQzAzMDgwMDhDNjMwMEQwMDA3MDE4MDdBN0EzMDAzOEY4Ci06MTAyMUQwMDA5NDgyMDAzRTMwNjNGRkZGMzA0MkZGRkYxNDYyMDAwNzJECi06MTAyMUUwMDAwMDAwMDAwMDhDODIwMDMwM0MwMzgwMDAyNDQyMDAzMDVDCi06MTAyMUYwMDBBQzYyMDAzQzBBMDAwODU2OEM4MjAwMkM5NDgyMDA0MDlECi06MTAyMjAwMDAzMDQyRkZGRjU0NjIwMDA5MjdBNDAwNDA4QzgyMDAzODRFCi06MTAyMjEwMDAzQzAzODAwMDI0NDIwMDMwQUM2MjAwM0M4QzgyMDAzNERECi06MTAyMjIwMDBBQzYyMDAzODBBMDAwODY1M0MwMzgwMDAyN0E1MDAzODJFCi06MTAyMjMwMDAyN0E2MDA0ODAyNjAzODIxMEUwMDA2N0JBN0EwMDA0OEIwCi06MTAyMjQwMDA4RkEzMDA0MDNDMDI4MDAwMjQ2MzAwMzBBQzQzMDAzODgwCi06MTAyMjUwMDA4RkEzMDA0NEFDNDMwMDNDM0MwMzgwMDAzQzAyMDAwNURCCi06MTAyMjYwMDBBQzYyMDAzMDNDMDI4MDA4MzQ0NDAxMDA5NDgyMDA0Mjk5Ci06MTAyMjcwMDAzNDYzMDQwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0I5Ci06MTAyMjgwMDBBRjgzMDAyMDk0ODIwMDRFOTQ4MzAwNDIwMjAyMTAyMTBBCi06MTAyMjkwMDAwMDQzMTAyMzBBMDAwODdCMzA0M0ZGRkY5NDgzMDA0RTY1Ci06MTAyMkEwMDA5NDgyMDA0MjAyNjMxODIxMDA1MDEwMjMwMDYyMTgyMzE4Ci06MTAyMkIwMDAzMDYzRkZGRjNDMDI4MDA4MzQ0NDAxMDA5NDgyMDAzQ0ZDCi06MTAyMkMwMDAzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDAwQTAwMDg4QkE3Ci06MTAyMkQwMDAyNDAzMDAwMTk0ODIwMDNDMzA0MkZGRkYwMDYyMTAyQjc3Ci06MTAyMkUwMDAxNDQwMDAwNThGODIwMDIwOTQ4MjAwM0MwMDYyMTAyMzdECi06MTAyMkYwMDAzMDQzRkZGRjhGODIwMDIwQUM1NTAwMDBBQzQwMDAwNDRCCi06MTAyMzAwMDBBQzU0MDAwOEFDNDMwMDBDM0MwMjAwMDYzNDQyMDAxMDAwCi06MTAyMzEwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTAyMzIwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGREYxCi06MTAyMzMwMDAzQzA0ODAwODM0ODQwMTAwMDAxMDE4QzIwMDY0MTgyMTk1Ci06MTAyMzQwMDA5MDY1MDA1NDMyMDIwMDA3MjQwNjAwMDEwMDQ2MTAwNDg0Ci06MTAyMzUwMDAwMDQ1MTAyNUEwNjIwMDU0OTQ4MzAwNDI5NjIyMDAwRThFCi06MTAyMzYwMDA1MDQzMDAwMUEzODYwMDEwOTI0MjAwMDAyNDQyMDAwMTY1Ci06MTAyMzcwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkRFCi06MTAyMzgwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNERDCi06MTAyMzkwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAwMDgyMjAyMTE4Ci06MTAyM0EwMDAyNDAyRkY4MDAwODIyMDI0MzA2MzAwN0YzQzAyODAwQUU4Ci06MTAyM0IwMDAwMDYyMTgyMTNDMDI4MDAwQUM0NDAwMjRBRUMzMDAwMDNGCi06MTAyM0MwMDA4RkJGMDA2QzhGQjYwMDY4OEZCNTAwNjQ4RkI0MDA2MDVCCi06MTAyM0QwMDA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQ4RkIwMDA1MEEzCi06MTAyM0UwMDAwM0UwMDAwODI3QkQwMDcwMjdCREZGRDhBRkIzMDAxQzc1Ci06MTAyM0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEYzCi06MTAyNDAwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMEQ0NUQzCi06MTAyNDEwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTAyNDIwMDA4RjgyMDAxODhGODMwMDFDQUM1MTAwMDBBQzUyMDAwNDU2Ci06MTAyNDMwMDBBQzUzMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNEExCi06MTAyNDQwMDBBQzQwMDAxODk0NjMwMDFFMDIwMzgwMjVBQzUwMDAxQ0IxCi06MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMTUzCi06MTAyNDYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCi06MTAyNDcwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgzMEE1RkZGRjlFCi06MTAyNDgwMDAwQTAwMDhDODMwQzYwMEZGM0MwMjgwMDgzNDQzMDEwMDNGCi06MTAyNDkwMDA5NDYyMDAwRTNDMDgwODAwOTUwODAwQzYzMDQ2RkZGRjE1Ci06MTAyNEEwMDAxNEMwMDAwNDM0MDJGRkZGOTQ2NTAwREEwQTAwMDkxNTI1Ci06MTAyNEIwMDA4Rjg0MDAxNDEwQzIwMDI3MDAwMDAwMDA5NDYyMDA0RUI4Ci06MTAyNEMwMDA5NDY0MDAzQzMwNDVGRkZGMDBBNjEwMjMwMEE2MTgyQkEzCi06MTAyNEQwMDAzMDg3RkZGRjEwNjAwMDA0MzA0NEZGRkYwMEM1MTAyMzY5Ci06MTAyNEUwMDAwMEUyMTAyMzMwNDRGRkZGMDA4ODEwMkIxMDQwMDAwRTQ0Ci06MTAyNEYwMDAwMEU4MTAyMzNDMDI4MDA4MzQ0NDAxMDAyNDAzMDAwMTVBCi06MTAyNTAwMDAzNDQyMDA4MEE0NDMwMDE2MjQwMkZGRkZBNDgyMDAwRTgwCi06MTAyNTEwMDA5NDg1MDBEQThGODQwMDE0MDAwMDMwMjEzMEE1RkZGRjdECi06MTAyNTIwMDAwQTAwMDhFRDNDMDc2MDIwMDA0NDEwMkExMDQwMDAwOTEyCi06MTAyNTMwMDAzQzAyODAwODM0NDMwMDgwOTQ2MjAwMTYzMDQyMDAwMTVGCi06MTAyNTQwMDAxMDQwMDAwNDNDMDI4MDAwOTQ0MjAwN0UyNDQyMDAxNEFCCi06MTAyNTUwMDBBNDYyMDAxNjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEIxCi06MTAyNTYwMDAzQzAyODAwOEFGQkYwMDFDQUZCMDAwMTgzNDQyMDEwMDJECi06MTAyNTcwMDA5NDQzMDA0Mjk0NDIwMDRDMTA0MDAwMTkzMDY4RkZGRjIxCi06MTAyNTgwMDA5MzgzMDAxMDI0MDIwMDAxMTQ2MjAwMjk4RkJGMDAxQ0Y1Ci06MTAyNTkwMDAzQzA2ODAwODM0RDAwMTAwMDAwODEwQzIwMDUwMTAyMTExCi06MTAyNUEwMDA5MDQyMDA1NDMxMDMwMDA3MzRDNzAxNDgzMDQyMDBGRjE1Ci06MTAyNUIwMDAwMDYyMTAwNzMwNDIwMDAxMzRDOTAxNEUzNEM0MDEyQ0JFCi06MTAyNUMwMDAzNEM1MDEzRTEwNDAwMDE2MzRDNjAxNDIwRTAwMDZCRTVFCi06MTAyNUQwMDBBRkE5MDAxMDk2MDIwMDQyMEEwMDA5MzIzMDQ4RkZGRkZFCi06MTAyNUUwMDAzQzAyODAwODM0NDQwMTAwOTQ4MzAwNDQ5NDgyMDA0MkY5Ci06MTAyNUYwMDAxMDQzMDAwRjhGQkYwMDFDOTQ4MjAwNDRBNDgyMDA0MjRECi06MTAyNjAwMDA5NDgyMDA1MEE0ODIwMDRFOEM4MjAwMzhBQzgyMDAzMDRDCi06MTAyNjEwMDA5NDgyMDA0MEE0ODIwMDNFOTQ4MjAwNEFBNDgyMDA0ODMyCi06MTAyNjIwMDA4RkJGMDAxQzhGQjAwMDE4MEEwMDA4RjAyN0JEMDAyMEUzCi06MTAyNjMwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjAyN0JERkZBMEQxCi06MTAyNjQwMDBBRkIxMDA0QzNDMTE4MDAwQUZCRjAwNThBRkIzMDA1NDk1Ci06MTAyNjUwMDBBRkIyMDA1MEFGQjAwMDQ4MzYyNjAxODg5MEMyMDAwM0U4Ci06MTAyNjYwMDAzMDQ0MDA3RkEzQTQwMDEwOEUzMjAxODA5MEMyMDAwMDhECi06MTAyNjcwMDAzMDQzMDA3RjI0MDIwMDAzMTA2MjAwM0JBRjkyMDAxNDNECi06MTAyNjgwMDAyODYyMDAwNDEwNDAwMDA2MjQwMjAwMDQyNDAyMDAwMjE0Ci06MTAyNjkwMDAxMDYyMDAwOThGQkYwMDU4MEEwMDBBRkI4RkIzMDA1NDc0Ci06MTAyNkEwMDAxMDYyMDA0RDI0MDIwMDA1MTA2MjAxNEU4RkJGMDA1OEQ5Ci06MTAyNkIwMDAwQTAwMEFGQjhGQjMwMDU0MDAwNDExQzAwMjQyMTAyMTJCCi06MTAyNkMwMDAyNDA0RkY4MDI0NDIwMjQwMDA0NDEwMjQyNjQzMDA0MDlBCi06MTAyNkQwMDBBRTIyMDAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMTkxCi06MTAyNkUwMDA5MDYyMDAzQ0FGQTMwMDNDMDA0NDEwMjVBMDYyMDAzQzc3Ci06MTAyNkYwMDA4RkEzMDAzQzkwNjIwMDNDMzA0MjAwNDAxMDQwMDE2Q0NGCi06MTAyNzAwMDA4RkJGMDA1ODNDMTA4MDA4QTM4MDAwMTAzNjEwMDEwMEQ1Ci06MTAyNzEwMDA4RTAyMDBEMDhDNjMwMDM0MjdBNDAwM0MyN0E1MDAxMDUzCi06MTAyNzIwMDAwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA5M0EyMDAxMEFDCi06MTAyNzMwMDAzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgwNDQwRkZGRUM4Ci06MTAyNzQwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NEE0Ci06MTAyNzUwMDAzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjUwMDAwMDAwMDY3Ci06MTAyNzYwMDAwQTAwMEFGQThGQkYwMDU4M0MwNTgwMDg5MEMzMDAwMTk4Ci06MTAyNzcwMDA5MEEyMDAwQjE0NDMwMTRFOEZCRjAwNTgzNEE0MDA4MDc4Ci06MTAyNzgwMDA4QzgyMDAxODkwODIwMDRDOTBBMjAwMDgzQzAyNjAwMEVECi06MTAyNzkwMDA4QzQyNTQwNDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRkJDCi06MTAyN0EwMDAwMDYyMTgyNDNDMDIwODAwOEM0MjAwQjRBQzgzMDAxODdDCi06MTAyN0IwMDAzQzAzODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDBCNDJDCi06MTAyN0MwMDA4QzYyMDFGODA0NDBGRkZFOEY4MjAwMTRBQzYyMDFDMEVECi06MTAyN0QwMDAwQTAwMEFDMjI0MDIwMDAyM0MxMDgwMDg5MEMzMDAwMUQzCi06MTAyN0UwMDA5MjAyMDAwQjE0NDMwMTMyOEZCRjAwNTgyN0E0MDAxODM3Ci06MTAyN0YwMDAzNjA1MDExMDI0MDYwMDAzM0MwMjYwMDA4QzQyNTQwNDlDCi06MTAyODAwMDAwRTAwMEUwODAwMDAwMDAwMjdBNDAwMjgzNjA1MDFFMDk1Ci06MTAyODEwMDAwRTAwMEUwODI0MDYwMDAzOEZBMjAwMjgzNjAzMDEwMEQ0Ci06MTAyODIwMDBBRTAyMDA2NDhGQTIwMDJDQUUwMjAwNjg4RkEyMDAzMEJFCi06MTAyODMwMDBBRTAyMDA2QzkzQTQwMDE4OTA2MzAwQzUyNDAyRkY4MEQwCi06MTAyODQwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDg0MDA3RkFGCi06MTAyODUwMDAzMTIyMDA3RjAwODIxMDJBNTQ0MDAwMDEzOTI5MDA4MDczCi06MTAyODYwMDAwMDA0MTFDMDI0NDIwMjQwMjQwM0ZGODAwMjQyMTAyMUQwCi06MTAyODcwMDAwMDQzMTAyNEFFMjIwMDk0MjY0MjAwNDAzMDQyMDA3RkU0Ci06MTAyODgwMDAzQzAzODAwNjAwNDM0MDIxOEZBMzAwMUMyNDAyRkZGRjZECi06MTAyODkwMDBBRkE4MDA0MDNDMTMwODAwOTI3MzAwRjcxMDYyMDAzM0E5Ci06MTAyOEEwMDA5M0EyMDAxOTk1MDMwMDE0MzA0NDAwRkYzMDYzRkZGRjJBCi06MTAyOEIwMDAwMDY0MTgyQjEwNjAwMDEwMDAwMDAwMDA5NTA0MDAxNDQ0Ci06MTAyOEMwMDA4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYwMDQ0MjAyMzc0Ci06MTAyOEQwMDAwMDA0MjEwMDAwRTQzODIxMDAwMDEwMjEwMEU0MjAyQjM2Ci06MTAyOEUwMDAwMEMyMzAyMTAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODI1Ci06MTAyOEYwMDAwQTAwMEExQjkzQTIwMDE5OTUwNDAwMTQ4RDA3MDAxQ0ZFCi06MTAyOTAwMDA4RDA2MDAxODMwODRGRkZGMDA4MjIwMjMwMDA0MjEwMDgwCi06MTAyOTEwMDAwMDAwMTAyMTAwODAxODIxMDBDMjMwMjMwMEU0MjAyQjg5Ci06MTAyOTIwMDAwMEM0MzAyMzAwRTMzODIzQUQwNzAwMUNBRDA2MDAxOEI3Ci06MTAyOTMwMDA5M0EyMDAxOThGQTMwMDQwQTQ2MjAwMTQ5N0EyMDAxQTZBCi06MTAyOTQwMDBBNDYyMDAxNjhGQTIwMDFDQUM2MjAwMTA4RkEyMDAxQ0IzCi06MTAyOTUwMDBBQzYyMDAwQzkzQTIwMDE5QTQ2MjAwMjA5N0EyMDAxQTk2Ci06MTAyOTYwMDBBNDYyMDAyMjhGQTIwMDFDQUM2MjAwMjQzQzA0ODAwOEY4Ci06MTAyOTcwMDAzNDgzMDA4MDhDNjIwMDM4OEZBMjAwMjAwMTIwODgyMURGCi06MTAyOTgwMDBBQzYyMDAzQzhGQTIwMDIwQUM4MjAwMDA5M0EyMDAxODMxCi06MTAyOTkwMDBBMDYyMDA0QzkzQTIwMDE4QTA4MjAwMDlBMDYwMDA2ODA5Ci06MTAyOUEwMDA5M0EyMDAxODEwNTEwMDUxMjQwN0ZGODAzMjI5MDA3RkE0Ci06MTAyOUIwMDAwMDA5MTFDMDI0NDIwMjQwMDI0MjEwMjEzMDQ2MDA3RjJCCi06MTAyOUMwMDAzQzAzODAwMDAwNDcxMDI0QUM2MjAwOTQzQzAyODAwNjY3Ci06MTAyOUQwMDAwMEMyMzAyMTkwQzIwMDNDQUZBNjAwNDAwMDAwMjAyMTgwCi06MTAyOUUwMDAwMDQ3MTAyNUEwQzIwMDNDOEZBODAwNDA5NTAyMDAwMkJECi06MTAyOUYwMDA5NTAzMDAxNDhEMDcwMDFDMzA0MkZGRkYzMDYzRkZGRjdBCi06MTAyQTAwMDA4RDA2MDAxODAwNDMxMDIzMDAwMjExMDAwMEUyMzgyMTU3Ci06MTAyQTEwMDAwMEUyMTAyQjAwQzQzMDIxMDBDMjMwMjFBRDA3MDAxQ0ExCi06MTAyQTIwMDBBRDA2MDAxODk1MDIwMDAyQTUwMjAwMTRBNTAwMDAxNkNDCi06MTAyQTMwMDA4RDAyMDAwOEFEMDIwMDEwOEQwMjAwMDhBRDAyMDAwQ0VFCi06MTAyQTQwMDA5NTAyMDAwMkE1MDIwMDIwQTUwMDAwMjI4RDAyMDAwOEM4Ci06MTAyQTUwMDBBRDAyMDAyNDkxMDIwMDNDMzA0MjAwNDAxMDQwMDAxQUI4Ci06MTAyQTYwMDAyNjIyMDAwMTNDMTA4MDA4QTNBOTAwMzhBMzgwMDAxMDkyCi06MTAyQTcwMDAzNjEwMDEwMDhFMDIwMEQwOEQwMzAwMzQyN0E0MDA0MEUwCi06MTAyQTgwMDAyN0E1MDAzODAwNDMxMDIxMEUwMDA3QUZBRTAyMDBEMDhBCi06MTAyQTkwMDA5M0EyMDAzODNDMDM4MDAwQTIwMjAwQzU4QzYyMDI3ODM5Ci06MTAyQUEwMDAwNDQwRkZGRThGODIwMDE0QUM2MjAyNDAyNDAyMDAwMjQ4Ci06MTAyQUIwMDBBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzgwRTAwMDkyNUJDCi06MTAyQUMwMDAwMDAwMDAwMDI2MjIwMDAxMzA0MzAwN0YxNDczMDAwNDQwCi06MTAyQUQwMDAwMDQwMjAyMTI0MDNGRjgwMDIyMzEwMjQwMDQzMjAyNkVECi06MTAyQUUwMDA5M0EyMDAxODBBMDAwQTM3MzA5MTAwRkY5M0E0MDAxODNGCi06MTAyQUYwMDA4RkEzMDAxQzI0MDJGRkZGMTA2MjAwMEEzMDg5MDBGRjMwCi06MTAyQjAwMDAyNDgyMDAwMTI0ODMwMDAxMzA0MjAwN0YxNDUzMDAwNTE5Ci06MTAyQjEwMDAzMDY5MDBGRjI0MDNGRjgwMDA4MzEwMjQwMDQzMTAyNjQ3Ci06MTAyQjIwMDAzMDQ5MDBGRjNDMDI4MDA4OTA0MjAwMDgwMTIwODgyMUMzCi06MTAyQjMwMDAzMDUwMDBGRjEyMzAwMDE5MzIyMjAwN0YwMDAyMTFDMDE1Ci06MTAyQjQwMDAwMjQyMTAyMTI0NDIwMjQwMjQwM0ZGODAwMDQzMTgyNDQzCi06MTAyQjUwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjNDCi06MTAyQjYwMDAwMDQzMTAyMThDNDMwMDBDMDA0MDIwMjExMDYwMDAwQjFBCi06MTAyQjcwMDBBRkEyMDA0MDBFMDAwNTZBMDAwMDAwMDAyNjIzMDAwMUZECi06MTAyQjgwMDAyNDA1RkY4MDMwNjIwMDdGMTQ1MzAwMDIwMjI1MjAyNEI4Ci06MTAyQjkwMDAwMDg1MTgyNjBBMDAwQTlCMzA3MTAwRkYzQzA0ODAwODVCCi06MTAyQkEwMDAzNDg0MDA4MDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRjk2Ci06MTAyQkIwMDAwMDYyMTgyNEFDODMwMDE4M0MwMzgwMDA4QzYyMDFGODhBCi06MTAyQkMwMDAwNDQwRkZGRTAwMDAwMDAwQUM3MjAxQzAyNDAyMDAwMkJECi06MTAyQkQwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMEFGQUNCCi06MTAyQkUwMDA4RkJGMDA1ODNDMDQ4MDA4OTBDMzAwMDE5MDgyMDAwQjA2Ci06MTAyQkYwMDAxNDQzMDAyRjhGQkYwMDU4MzQ5MDAwODA5MjAyMDAwOEM5Ci06MTAyQzAwMDAzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDA5MjAyMDAwODA2Ci06MTAyQzEwMDAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDUwMjQwMjAyMUI0Ci06MTAyQzIwMDAwRTAwMEU4RDI0MDUwMDkzMEEwMDBBRkE4RkJGMDA1ODhCCi06MTAyQzMwMDA5MjAyMDAwOTI0MDMwMDE4MzA0MjAwRkYxNDQzMDAwREUzCi06MTAyQzQwMDAwMjQwMjAyMTI0MDUwMDM5MEUwMDBFMjUwMDAwMzAyMTBECi06MTAyQzUwMDAwRTAwMDM0NThGODQwMDE0OEY4MkZGQTgyNDAzMDAxMjA2Ci06MTAyQzYwMDBBMDQzMDAwOTBFMDAwMzUwOEY4NDAwMTQwQTAwMEFGQUUyCi06MTAyQzcwMDA4RkJGMDA1ODI0MDUwMDM2MEUwMDBFMjUwMDAwMzAyMUJECi06MTAyQzgwMDAwQTAwMEFGQThGQkYwMDU4MEUwMDAzNDUwMjQwMjAyMUI3Ci06MTAyQzkwMDA5MjAyMDAwNThGODQwMDE0MzQ0MjAwMjAwRTAwMDM1MDdECi06MTAyQ0EwMDBBMjAyMDAwNTBFMDAxMDM2OEY4NDAwMTQ4RkJGMDA1ODVBCi06MTAyQ0IwMDA4RkIzMDA1NDhGQjIwMDUwOEZCMTAwNEM4RkIwMDA0OERBCi06MTAyQ0MwMDAwM0UwMDAwODI3QkQwMDYwM0MwMjgwMDgzNDQ1MDEwMDk1Ci06MTAyQ0QwMDAzQzAyODAwMDhDNDIwMTQwOTRBMzAwMEUwMDAwMzAyMTkxCi06MTAyQ0UwMDAwMDQwMjAyMUFGODIwMDE0MzA2M0ZGRkYzNDAyRkZGRjU5Ci06MTAyQ0YwMDAxMDYyMDAwNjNDMDc2MDIwMjQwMkZGRkZBNEEyMDAwRTIxCi06MTAyRDAwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEYzCi06MTAyRDEwMDAwMDAwMDAwMDI3QkRGRkM4M0MwMjgwMDAzQzA2ODAwODgwCi06MTAyRDIwMDBBRkI1MDAyQ0FGQjEwMDFDQUZCRjAwMzBBRkI0MDAyODZFCi06MTAyRDMwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMDAwMTgzNDUxMDEwMDhGCi06MTAyRDQwMDAzNEM1MDEwMDhDNDMwMTAwOEUyMjAwMTQ4Q0E0MDBENEYxCi06MTAyRDUwMDAwMDAwQTgyMUFGODMwMDE0MDA0NDEwMjMxODQwMDA1MjQzCi06MTAyRDYwMDBBMzgwMDAxMDhFMjIwMDE0MDAwMDUwMjFBQ0EyMDBENEQ5Ci06MTAyRDcwMDA5MEMzMDAwODkwQTIwMEM1MzA3MzAwN0ZBM0EyMDAxMDhBCi06MTAyRDgwMDA4Q0IyMDBEMDhDQjQwMEQ0MzA0MjAwRkYxMDUzMDAzQjEyCi06MTAyRDkwMDA5M0EyMDAxMDhGODMwMDE0MjQwN0ZGODAwMDAyMTFDMDRCCi06MTAyREEwMDAwMDYyMTAyMTI0NDIwMjQwMjQ2MzAwNDAwMDQ3MTAyNEE2Ci06MTAyREIwMDAzMDYzMDA3RjNDMDk4MDAwM0MwODgwMEEwMDY4MTgyMUNECi06MTAyREMwMDBBRDIyMDAyNDhDNjIwMDM0MjdBNDAwMTQyN0E1MDAxMDMzCi06MTAyREQwMDAwMjQyODAyMTAyOTAxMDIzMDQ0MDAwMjhBRkEzMDAxNDc3Ci06MTAyREUwMDA5MDYyMDAzQzAwRTIxMDI0MzA0MjAwRkYxNDQwMDAxOUMxCi06MTAyREYwMDAwMjAwOTAyMTkwNjIwMDNDMzQ0MjAwNDBBMDYyMDAzQ0ZFCi06MTAyRTAwMDA4Rjg2MDAxNDkzQTMwMDEwMjRDMjAwNDAzMDQyMDA3RjNDCi06MTAyRTEwMDAwMDQ4MjgyMTNDMDIwODAwOEM0MjAwRjQyNDYzMDAwMTkxCi06MTAyRTIwMDAzMDY0MDBGRjE0ODIwMDAyQTNBMzAwMTBBM0EwMDAxMENFCi06MTAyRTMwMDA5M0EyMDAxMEFGQTUwMDE0MDAwMjExQzAyNDQyMDI0MDZBCi06MTAyRTQwMDAwMEMyMTAyMTAwNDcxMDI0QUQyMjAwMjQwQTAwMEIzMURCCi06MTAyRTUwMDA5M0EyMDAxMDBFMDAwN0FGMDAwMDAwMDAzQzAyODAwOEEzCi06MTAyRTYwMDAzNDQyMDEwMEFDNTAwMEQwOTNBMzAwMTAyNDBBMDAwMUFBCi06MTAyRTcwMDBBMDQzMDBDNTBBMDAwQjMxOTNBMjAwMTAyNDAyMDAwMUY4Ci06MTAyRTgwMDAxNTQyMDAwOTNDMDM4MDAwOEM2MjAyNzgwNDQwRkZGRTdBCi06MTAyRTkwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NDRECi06MTAyRUEwMDAzQzAyMTAwMEFDNjIwMjc4OTIyMjAwMEIyNDAzMDAwMjY0Ci06MTAyRUIwMDAzMDQyMDBGRjE0NDMwMDcyMDAwMDAwMDA5NjIyMDAwODE4Ci06MTAyRUMwMDAzMDQzMDBGRjI0MDIwMDgyMTQ2MjAwNDAyNDAyMDA4NDg4Ci06MTAyRUQwMDAzQzAyODAwMDM0NDkwMTAwOEQyMjAwMEM5NTIzMDAwNjNECi06MTAyRUUwMDAwMDAyMTYwMjMwNjNGRkZGMzA0NTAwM0YyNDAyMDAyNzM2Ci06MTAyRUYwMDAxMEEyMDAwRkFGODMwMDBDMjhBMjAwMjgxMDQwMDAwODg5Ci06MTAyRjAwMDAyNDAyMDAzMTI0MDIwMDIxMTBBMjAwMDkyNDAyMDAyNTFECi06MTAyRjEwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDE0Ci06MTAyRjIwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDA0Ci06MTAyRjMwMDAwRTAwMDc2MzAxMjAyMDIxMEEwMDBDMjkwMDAwMDAwMDc4Ci06MTAyRjQwMDAzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNEY0Ci06MTAyRjUwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDYzCi06MTAyRjYwMDBBQzYyMDI3ODBBMDAwQzI5MDAwMDAwMDA5NTIzMDAwNkRDCi06MTAyRjcwMDA5MTI0MDAwNThEMjUwMDBDOEQyNjAwMTA4RDI3MDAxODRBCi06MTAyRjgwMDA4RDI4MDAxQzhEMjkwMDIwMjQ0MjAwMDEzQzAxMDgwMEVFCi06MTAyRjkwMDBBNDIzNTJDNjNDMDEwODAwQTAyNDUyQzUzQzAxMDgwMEVECi06MTAyRkEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMEI0Ci06MTAyRkIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDg4Ci06MTAyRkMwMDBBQzI5NTJFMDBBMDAwQzI5QTM4MjAwMTExNDYyMDAwQTA1Ci06MTAyRkQwMDAyNDAyMDA4MTNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTVBCi06MTAyRkUwMDA5MjI2MDAwNThGODQwMDE0MzBBNUZGRkYzMEM2MDBGRjM1Ci06MTAyRkYwMDAwQTAwMEJFQTNDMDc2MDIxMTQ2MjAwNUMwMDAwMDAwMDNDCi06MTAzMDAwMDA5MjIyMDAwQTMwNDMwMEZGMzA2MjAwMjAxMDQwMDAwNzg3Ci06MTAzMDEwMDAzMDYyMDA0MDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUVFCi06MTAzMDIwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDAxMDQwMDAwN0JCCi06MTAzMDMwMDAwMDAzMTYwMDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTg3Ci06MTAzMDQwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDEwMDAyMTYwM0Q2Ci06MTAzMDUwMDAwNDQxMDA0NjNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUY1Ci06MTAzMDYwMDA4Rjg0MDAxNDI0MDYwMDQyMzBBNUZGRkYzQzA3NjAxOTNFCi06MTAzMDcwMDAwRTAwMDhFRDAwMDAwMDAwMEEwMDBDMjkwMDAwMDAwMDBFCi06MTAzMDgwMDA5MjIyMDAwQjI0MDQwMDE2MzA0MjAwRkYxMDQ0MDAwNjc4Ci06MTAzMDkwMDAzQzA2ODAwMDkyMjIwMDBCMjQwMzAwMTczMDQyMDBGRjAwCi06MTAzMEEwMDAxNDQzMDAzMjAwMDAwMDAwMzRDNTAxMDA5MEEyMDAwQjYwCi06MTAzMEIwMDAzMDQyMDBGRjE0NDQwMDBCMDAwMDgwMjE4Q0EyMDAyMDRECi06MTAzMEMwMDA4Q0E0MDAyMDI0MDNGRjgwMDA0MzEwMjQwMDAyMTE0MDQwCi06MTAzMEQwMDAzMDg0MDA3RjAwNDQxMDI1M0MwMzIwMDAwMDQzMTAyNTZECi06MTAzMEUwMDBBQ0MyMDgzMDk0QTIwMDA4MDAwMjE0MDAwMDAyMTQwM0NECi06MTAzMEYwMDAwNDQyMDAwMTI0MTAwMDAxOTRBMjAwMDgzMDQyMDA4MDI0Ci06MTAzMTAwMDA1MDQwMDAxQTAyMDBBODIxOTRBMjAwMDgzMDQyMjAwMDdBCi06MTAzMTEwMDA1MDQwMDAxNjAyMDBBODIxOENBMzAwMTgzQzAyMUMyRDcwCi06MTAzMTIwMDAzNDQyMTlFRDEwNjIwMDExMDIwMEE4MjEzQzAyMDgwMDhGCi06MTAzMTMwMDA4QzQyMDBENDEwNDAwMDA1M0MwMjgwMDgyNDAzMDAwNEE3Ci06MTAzMTQwMDAzNDQyMDEwMEEwNDMwMEVDM0MwMjgwMDgzNDQyMDEwMEZDCi06MTAzMTUwMDA5NDQ1MDBEQThGODQwMDE0MjQwNjAwMDYzMEE1RkZGRjkyCi06MTAzMTYwMDAwRTAwMDhFRDNDMDc2MDIxMDIwMEE4MjEwRTAwMDkyNTkxCi06MTAzMTcwMDAwMDAwMDAwMDkyMjIwMDBBMzA0MjAwMDgxMDQwMDAwNEMzCi06MTAzMTgwMDAwMkEwMTAyMTBFMDAxMzNBMDAwMDAwMDAwMkEwMTAyMTNFCi06MTAzMTkwMDA4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDcwCi06MTAzMUEwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODIwCi06MTAzMUIwMDAyN0JEMDAzODI0MDJGRjgwMDA4MjIwMjQzQzAyOTAwMEJBCi06MTAzMUMwMDAzNDQyMDAwNzAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEVECi06MTAzMUQwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEUxCi06MTAzMUUwMDAwM0UwMDAwODAwMDAwMDAwM0MwMzgwMDAyNDAyRkY4MDkwCi06MTAzMUYwMDAwMDgyMjAyNDM0NjIwMDA3MDA4MjIwMjVBQzY0MDAyMDc1Ci06MTAzMjAwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODg0Ci06MTAzMjEwMDAwMDAwMDAwMDNDMDI4MDA4MjQwMzAwMDUzNDQyMDEwMDQ1Ci06MTAzMjIwMDBBMDQzMDBFQzNDMDI4MDAwOEM0MjAxMDAzQzAzODAwMDgzCi06MTAzMjMwMDBBRjgyMDAxNDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNDdCCi06MTAzMjQwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDcwCi06MTAzMjUwMDBBQzYyMDI3ODAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODMwCi06MTAzMjYwMDAzQzA2ODAwMEFGQkYwMDEwMzRDNzAxMDA5NEUyMDAwOEE0Ci06MTAzMjcwMDAzMDQ0MDBGRjM4ODMwMDgyMzg4MjAwODQyQzYzMDAwMUQwCi06MTAzMjgwMDAyQzQyMDAwMTAwNjIxODI1MTA2MDAwMkQyNDAyMDA4M0VBCi06MTAzMjkwMDA5MzgyMDAxMTUwNDAwMDM2OEZCRjAwMTAzQzAyMDgwMDlFCi06MTAzMkEwMDA5MDQyNTJDQzhDQzQwMTAwM0MwNjA4MDA5NEM2NTJDNjIxCi06MTAzMkIwMDAzMDQ1MDAzRjM4QTMwMDMyMzhBMjAwM0YyQzYzMDAwMUE0Ci06MTAzMkMwMDAyQzQyMDAwMTAwNjIxODI1QUY4NDAwMTRBRjg2MDAwQzY4Ci06MTAzMkQwMDBBMzgwMDAxMTE0NjAwMDA3MDBFMDIwMjEyNDAyMDAyMEQ4Ci06MTAzMkUwMDAxNEEyMDAxMjAwMDAwMDAwMzQwMkZGRkYxNEMyMDAwRkZECi06MTAzMkYwMDAwMDAwMDAwMDI0MDIwMDIwMTRBMjAwMDUwMEUwMjgyMUE0Ci06MTAzMzAwMDA4Q0UzMDAxNDI0MDJGRkZGNTA2MjAwMEI4RkJGMDAxMEZCCi06MTAzMzEwMDAzQzA0MDgwMDI0ODQ1MkMwMDAwMDMwMjEwRTAwMDZGMjU0Ci06MTAzMzIwMDAyNDA3MDAwMTBBMDAwQzlDOEZCRjAwMTAwRTAwMDc2M0U5Ci06MTAzMzMwMDAwMDAwMDAwMDhGQkYwMDEwMEEwMDA5MjUyN0JEMDAxOEZCCi06MTAzMzQwMDAxNDgyMDAwNjI0ODJGRjgwOENDMzAxMDQzQzAyNjAyMEFBCi06MTAzMzUwMDBBQzQzMDAxNDBBMDAwQ0QyOEZCRjAwMTAzMDQyMDBGRkIzCi06MTAzMzYwMDAyQzQyMDAwMjEwNDAwMDA0MjQwMjAwMjI4RkJGMDAxMEYzCi06MTAzMzcwMDAwQTAwMEIxMzI3QkQwMDE4MTQ4MjAwMDQ4RjgyMDAxQzYyCi06MTAzMzgwMDA4RkJGMDAxMDBBMDAwQzUzMjdCRDAwMTg4QzQyMDAwQ0EwCi06MTAzMzkwMDAxMDQwMDAxRTAwRTAyODIxOTBFMzAwMDkyNDAyMDAxOERDCi06MTAzM0EwMDAxNDYyMDAwMzI0MDIwMDE2MEEwMDBDQkQyNDAzMDAwODY2Ci06MTAzM0IwMDAxNDYyMDAwNzI0MDIwMDE3MjQwMzAwMTIzQzAyODAwODU0Ci06MTAzM0MwMDAzNDQyMDA4MEEwNDMwMDA5MEEwMDBDQ0E5NEE3MDAwOEY4Ci06MTAzM0QwMDA1NDYyMDAwNzk0QTcwMDA4OEY4MkZGQTgyNDA0RkZGRTEwCi06MTAzM0UwMDA5MDQzMDAwNTAwNjQxODI0QTA0MzAwMDU5NEE3MDAwODNBCi06MTAzM0YwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDY4RkJGMDAxMEFGCi06MTAzNDAwMDAwMDA3M0MwMDBBMDAwOEM4MjdCRDAwMTg4RkJGMDAxMDQ1Ci06MTAzNDEwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwMUMzQzA0ODAwMEQ1Ci06MTAzNDIwMDA5NEEyMDAyQThDQTMwMDM0MDAwMjMwQzAyNDAyRkZGMEQyCi06MTAzNDMwMDAwMEMyMTAyNDAwNjIxODIxQUM4MzAwM0M4Q0EyMDAzMDMyCi06MTAzNDQwMDAzQzAzODAwMEFDODIwMDM4M0MwMjAwNTAzNDQyMDAxMDQzCi06MTAzNDUwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTAzNDYwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQzMEMyMDAwODk2Ci06MTAzNDcwMDAxMDQwMDAwNjNDMDI4MDAwOEM2MjA0MDhBQ0EyMDAyMEQwCi06MTAzNDgwMDA4QzYyMDQwQzBBMDAwQ0Y1QUNBMjAwMjQ4QzQzMDQwMEVFCi06MTAzNDkwMDBBQ0EzMDAyMDhDNDIwNDA0QUNBMjAwMjQzQzAzMDAyMDE2Ci06MTAzNEEwMDAzQzAyODAwMEFDNDMwMDMwM0MwNDgwMDA4QzgyMDAzMDQxCi06MTAzNEIwMDAwMDQzMTAyNDE0NDBGRkZEOEY4NjAwMUMzQzAyMDA0MDk2Ci06MTAzNEMwMDBBQzgyMDAzMDk0QzMwMDJBOTRDMjAwMjg5NEM0MDAyQzFCCi06MTAzNEQwMDA5NEM1MDAyRTI0NjMwMDAxMDA0NDEwMjEzMDY0RkZGRkQ2Ci06MTAzNEUwMDBBNEMyMDAyODE0ODUwMDAyQTRDMzAwMkFBNEMwMDAyQTk0Ci06MTAzNEYwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUMyN0JERkZFOEU3Ci06MTAzNTAwMDAzQzA1ODAwNDI0ODQwMDEwQUZCRjAwMTAwRTAwMEUwODlDCi06MTAzNTEwMDAyNDA2MDAwQThGODQwMDFDOTQ4MjAwMTI5NDgzMDAyRURCCi06MTAzNTIwMDAzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDQyNDAyN0ZGRkFFCi06MTAzNTMwMDAwMDQzMTAyQjEwNDAwMDAyQUM4MzAwMDAwMDAwMDAwRDdGCi06MTAzNTQwMDAwRTAwMENENDAwMDAwMDAwOEY4MzAwMUM4RkJGMDAxMDAxCi06MTAzNTUwMDAyN0JEMDAxODk0NjIwMDE0OTQ2MzAwMUEzMDQyMDAwRkQzCi06MTAzNTYwMDAwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDAwM0UwMDAwOEZDCi06MTAzNTcwMDBBQzQzMDBBMDhGODMwMDFDM0MwMjgwMDQ5NDQ0MDAwNkVFCi06MTAzNTgwMDA5NDYyMDAxQThDNjUwMDAwQTQ2NDAwMTYwMDQ0MTAyM0E1Ci06MTAzNTkwMDAzMDQyRkZGRjAwNDUxMDJCMDNFMDAwMDgzODQyMDAwMUQ1Ci06MTAzNUEwMDA4Rjg0MDAxQzNDMDc4MDA0OTQ4NjAwMUE4Qzg1MDAwMEUwCi06MTAzNUIwMDA5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDYwMEMzMTAyM0UwCi06MTAzNUMwMDAzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDExNDQwRkZGODQ1Ci06MTAzNUQwMDBBNDgzMDAxNjAzRTAwMDA4MDAwMDAwMDA4Rjg0MDAxQzk0Ci06MTAzNUUwMDAzQzAyODAwNDk0NDIwMDA2OTQ4MzAwMUE4Qzg1MDAwMEZCCi06MTAzNUYwMDBBNDgyMDAxNjAwNjIxMDIzMzA0MkZGRkYwMDQ1MTAyQjBBCi06MTAzNjAwMDAzODQyMDAwMTUwNDAwMDBEOEY4NTAwMUMwMDYwMzAyMUMxCi06MTAzNjEwMDAzQzA3ODAwNDk0RTIwMDA2QTQ4MjAwMTY5NEUzMDAwNkFFCi06MTAzNjIwMDAwMEMzMTAyMzMwNDJGRkZGMDA0NTEwMkIzODQyMDAwMTM5Ci06MTAzNjMwMDAxNDQwRkZGOEE0ODMwMDE2OEY4NTAwMUMzQzAzODAwMDEzCi06MTAzNjQwMDAzNDYyMDQwMDhDQTQwMDIwQUY4MjAwMThBQzY0MDAzOEZGCi06MTAzNjUwMDA4Q0EyMDAyNEFDNjIwMDNDM0MwMjAwMDVBQzYyMDAzMDRECi06MTAzNjYwMDAwM0UwMDAwOEFDQTAwMDA0OEY4NDAwMUMzQzAzMDAwNkFCCi06MTAzNjcwMDA4QzgyMDAwNDAwMDIxMTQwMDA0MzEwMjUzQzAzODAwMEFFCi06MTAzNjgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTAzNjkwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQzNDYyMDQwMEQ0Ci06MTAzNkEwMDBBQzgwMDAwNDAzRTAwMDA4QUY4MjAwMTg4Rjg2MDAxQzg1Ci06MTAzNkIwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxOERFCi06MTAzNkMwMDA4Q0MzMDAwNDhDQzUwMDI0OEY4MjAwMTgzMDkwMDBGRjRBCi06MTAzNkQwMDA5NEM0MDAxQTI0NjMwMDAxMjQ0MjAwMjAyNDg0MDAwMUMxCi06MTAzNkUwMDAyNEE3MDAyMEFDQzMwMDA0QUY4MjAwMThBNEM0MDAxQUIxCi06MTAzNkYwMDBBQ0M3MDAyNDA0QTEwMDA2MDAwMDg4MjEwNEUyMDAwNUY0Ci06MTAzNzAwMDA5NEMyMDAxQThDQzIwMDIwMjQ0MjAwMDFBQ0MyMDAyMEU2Ci06MTAzNzEwMDA5NEMyMDAxQTk0QzMwMDI4MkUwNDAwMDEwMDQzMTAyNjBFCi06MTAzNzIwMDAyQzQyMDAwMTAwNDQxMDI0NTA0MDAwMDU5NEMyMDAxQUFECi06MTAzNzMwMDAyNDAyMDAwMUFDQzIwMDA4OTRDMjAwMUE5NEMzMDAyOEZECi06MTAzNzQwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNUJECi06MTAzNzUwMDAxNDQwMDAwNzAwMDAwMDAwOENDMjAwMDgxNDQwMDAwNDYwCi06MTAzNzYwMDAyNDAyMDAxMDhDQzMwMDA0MTQ2MjAwMEY4Rjg1MDAxQzFCCi06MTAzNzcwMDAwRTAwMEQ2ODI0MTEwMDAxOEY4MjAwMUM5NDQzMDAyODY0Ci06MTAzNzgwMDA5NDQyMDAxQTE0NDMwMDAzMDAwMDAwMDAwRTAwMENENDAxCi06MTAzNzkwMDAwMDAwMDAwMDE2MDAwMDA0OEY4NTAwMUMwRTAwMEQ0NTdGCi06MTAzN0EwMDAwMDAwMDAwMDhGODUwMDFDOTRBMjAwMUU5NEE0MDAxQzQxCi06MTAzN0IwMDAyNDQyMDAwMTMwNDNGRkZGMTQ2NDAwMDJBNEEyMDAxRTUzCi06MTAzN0MwMDBBNEEwMDAxRTEyMDAwMDBBM0MwMjgwMDQ5NEEyMDAxNDZGCi06MTAzN0QwMDA5NEEzMDAxQTMwNDIwMDBGMDAwMjE1MDAwMDYyMTgyNTYxCi06MTAzN0UwMDAzQzAyODAwMEFDNDMwMEEwMEEwMDBEREZBQ0EwMDAwODQyCi06MTAzN0YwMDA5NDQyMDAwNjk0QTMwMDFBOENBNDAwMDBBNEEyMDAxNjEwCi06MTAzODAwMDAwMDYyMTAyMzMwNDJGRkZGMDA0NDEwMkIzODQyMDAwMUI5Ci06MTAzODEwMDAxMDQwMDAwRDAyMjAxMDIxMDA2MDMwMjEzQzA3ODAwNDgwCi06MTAzODIwMDA5NEUyMDAwNkE0QTIwMDE2OTRFMzAwMDYwMEMzMTAyMzRECi06MTAzODMwMDAzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDExNDQwRkZGOEQzCi06MTAzODQwMDBBNEEzMDAxNjAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNDBFCi06MTAzODUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwM0UwMDAwODNGCi06MTAzODYwMDAwMDAwMDAwMDhGODIwMDI0M0MwMzAwMDYwMDAyMTE0MDhCCi06MTAzODcwMDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzAwMDAwMDAwMEQzCi06MTAzODgwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDAzMDQyMDAxMEM4Ci06MTAzODkwMDAxMDQwRkZGRDM0NjIwNDAwQUY4MjAwMjAwM0UwMDAwODA2Ci06MTAzOEEwMDBBRjgwMDAyNDAzRTAwMDA4MDAwMDEwMjEwM0UwMDAwOEJFCi06MTAzOEIwMDAwMDAwMDAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMTRBCi06MTAzOEMwMDAxMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjVDCi06MTAzOEQwMDAwMDA0MjA0MjAwNjUxODIxMEEwMDBERkUwMDA1Mjg0MDYyCi06MTAzOEUwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjlFCi06MTAzOEYwMDA4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMEUwODdGCi06MTAzOTAwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODY4Ci06MTAzOTEwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTAzOTIwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNEQzCi06MTAzOTMwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MEUwCi06MTAzOTQwMDAyNDAzMDAwMUFDNDMwMDBDQTQ0MzAwMTBBNDQzMDAxMjY0Ci06MTAzOTUwMDBBNDQzMDAxNDAzRTAwMDA4QTQ0MzAwMTY4RjgyMDAxQzU3Ci06MTAzOTYwMDAyN0JERkZEOEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDMxCi06MTAzOTcwMDBBRkIwMDAxMEFGQkYwMDIwOEM0NzAwMEMyNDgyMDA4MDQ1Ci06MTAzOTgwMDAyNDA5RkY4MDNDMDg4MDBFMzA0MzAwN0YwMDgwODAyMUE2Ci06MTAzOTkwMDAzQzBBODAwMDAwNDkyMDI0MDA2ODE4MjEzMEIxMDBGRjUzCi06MTAzOUEwMDAzMEQyMDBGRjEwRTAwMDI5MDAwMDk4MjEyNjAyMDEwMDFCCi06MTAzOUIwMDBBRDQ0MDAyQzAwNDkyODI0MzA0MjAwN0YwMDQ4MjAyMURCCi06MTAzOUMwMDA5MDYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEMyCi06MTAzOUQwMDAwMDAwMDAwMEFENDUwMDJDOTQ4MjAwREEzMDUzRkZGRjU4Ci06MTAzOUUwMDAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUM4RjgzMDAxODIwCi06MTAzOUYwMDAwMDExMkMwMDk0NDIwMDFFMDAxMjI0MDAzNDg0MDAwMUE3Ci06MTAzQTAwMDAwMEEyMjgyNTNDMDI0MDAwMDBBMjI4MjVBQzcwMDAwMDNFCi06MTAzQTEwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwOEE4Ci06MTAzQTIwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY0MDAxMEFDCi06MTAzQTMwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxOENBCi06MTAzQTQwMDAyN0JEMDAyODBBMDAwRDc5QUM2NTAwMUM4RkJGMDAyMDNGCi06MTAzQTUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBDCi06MTAzQTYwMDAwM0UwMDAwODI3QkQwMDI4M0MwNjgwMDAzNEMyMDEwMEE2Ci06MTAzQTcwMDA5MDQzMDAwRjI0MDIwMDEwMTA2MjAwMEUyODY1MDAxMTEwCi06MTAzQTgwMDAxMEEwMDAwNzI0MDIwMDEyMjQwMjAwMDgyNDA1MDAzQUI2Ci06MTAzQTkwMDAxMDYyMDAwNjAwMDAzMDIxMDNFMDAwMDgwMDAwMDAwMDcyCi06MTAzQUEwMDAyNDA1MDAzNTE0NjJGRkZDMDAwMDMwMjEwQTAwMEUyNUI5Ci06MTAzQUIwMDAwMDAwMDAwMDhDQzIwMDc0OEY4M0ZGQTgyNDQyMEZBMDc2Ci06MTAzQUMwMDAwM0UwMDAwOEFDNjIwMDBDMjdCREZGRThBRkJGMDAxMEE4Ci06MTAzQUQwMDAwRTAwMDM1NTI0MDUwMDAxM0MwNDgwMDg4RkJGMDAxMDMwCi06MTAzQUUwMDAyNDAyMDAwMTM0ODMwMDgwQTQ2MjAwMTIyN0JEMDAxODY0Ci06MTAzQUYwMDAyNDAyMDAwMTAzRTAwMDA4QTA4MDAwMUEyN0JERkZFMEI3Ci06MTAzQjAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQ0NGCi06MTAzQjEwMDAzMEIyRkZGRjBFMDAwMzQ1MDA4MDg4MjEzQzAyODAwODgwCi06MTAzQjIwMDAzNDUwMDA4MDkyMDIwMDA5MjQwMzAwMDQzMDQyMDBGRjU4Ci06MTAzQjMwMDAxNDQzMDAwQzNDMDI4MDA4MTI0MDAwMDgyNDAyMDAwQUQyCi06MTAzQjQwMDAwRTAwMEUxQzAwMDAwMDAwOTIwMjAwMDUyNDAzRkZGRTgwCi06MTAzQjUwMDAwMDQzMTAyNEEyMDIwMDA1MjQwMjAwMTJBMjAyMDAwOTYwCi06MTAzQjYwMDAzQzAyODAwODM0NDIwMDgwMDIyMDIwMjEwRTAwMDM1MEQ1Ci06MTAzQjcwMDBBMDQwMDAyNzE2NDAwMDAzMDIyMDIwMjEwRTAwMEU4MEU2Ci06MTAzQjgwMDAwMDAwMDAwMDAyMjAyMDIxMzI0NjAwRkY4RkJGMDAxQ0YxCi06MTAzQjkwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOEM4Ci06MTAzQkEwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTBBRkJGMDAxQzg3Ci06MTAzQkIwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwRTAwMDM0NTUzCi06MTAzQkMwMDAwMDgwODAyMTBFMDAwRTFDMDAwMDAwMDAzQzAyODAwOEQ2Ci06MTAzQkQwMDAzNDQ1MDA4MDkwQTIwMDA5MjQxMjAwMTgzMDUxMDBGRkUzCi06MTAzQkUwMDAxMjMyMDAwMzAyMDAyMDIxMjQwMjAwMTJBMEEyMDAwOUM4Ci06MTAzQkYwMDA5MEEyMDAwNTI0MDNGRkZFMDA0MzEwMjQwRTAwMDM1MDkyCi06MTAzQzAwMDBBMEEyMDAwNTAyMDAyMDIxMjQwNTAwMjAxNjMyMDAwNzkyCi06MTAzQzEwMDAwMDAwMzAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDNDCi06MTAzQzIwMDA4RkIwMDAxMDBBMDAwMzU1MjdCRDAwMjA4RkJGMDAxQzc1Ci06MTAzQzMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOTI2Ci06MTAzQzQwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTgzQzAyODAwMEFBCi06MTAzQzUwMDBBRkIwMDAxMEFGQkYwMDE0MzQ0MjAxMDA5NDQyMDAwQzFBCi06MTAzQzYwMDAyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTIzMDQ2MDBGRkY5Ci06MTAzQzcwMDAwRTAwMDM0NTAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MDMyCi06MTAzQzgwMDAyNDAzMDAxMkEwNDMwMDA5OTA0MzAwMDUzNDYzMDAxMDkwCi06MTAzQzkwMDAwRTAwMEUxQ0EwNDMwMDA1MEUwMDAzNTAwMjAwMjAyMTYwCi06MTAzQ0EwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMjAwQTAwMEVGRDBECi06MTAzQ0IwMDAwMDAwMDAwMDBFMDAwRTI1MDAwMDAwMDAwRTAwMDM0NTZECi06MTAzQ0MwMDAwMjAwMjAyMTNDMDI4MDA4OTA0MzAwMUIyNDA1RkY5RjM2Ci06MTAzQ0QwMDAwMjAwMjAyMTAwNjUxODI0OEZCRjAwMTQ4RkIwMDAxMDRGCi06MTAzQ0UwMDBBMDQzMDAxQjBBMDAwMzUwMjdCRDAwMTgyN0JERkZFMEJBCi06MTAzQ0YwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzMEIxMDBGRjdCCi06MTAzRDAwMDAwRTAwMDM0NTAwODA4MDIxM0MwMjgwMDgyNDAzMDAxMjNECi06MTAzRDEwMDAzNDQyMDA4MDBFMDAwRTFDQTA0MzAwMDkwRTAwMDM1MDI4Ci06MTAzRDIwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxODM0Ci06MTAzRDMwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMEUyNTQ1Ci06MTAzRDQwMDAyN0JEMDAyMDNDMDQ4MDA4OTA4MzAwMEU5MDgyMDAwQTZBCi06MTAzRDUwMDAxNDQzMDAwQjAwMDAyODIxOEY4MkZGQTgyNDAzMDA1MDg5Ci06MTAzRDYwMDAyNDA1MDAwMTkwNDIwMDAwMzA0MjAwRkYxNDQzMDAwNDhCCi06MTAzRDcwMDAwMDAwMDAwMDkwODIwMDBFMjQ0MjAwMDFBMDgyMDAwRThDCi06MTAzRDgwMDAwM0UwMDAwODAwQTAxMDIxM0MwMzgwMDA4QzYyMDFGOEQxCi06MTAzRDkwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDIyCi06MTAzREEwMDAzQzAyMTAwMDAzRTAwMDA4QUM2MjAxRjgyN0JERkZFMDEwCi06MTAzREIwMDBBRkIyMDAxODNDMTI4MDA4QUZCMTAwMTRBRkJGMDAxQ0I2Ci06MTAzREMwMDBBRkIwMDAxMDM2NTEwMDgwOTIyMjAwMDkyNDAzMDAwQThGCi06MTAzREQwMDAzMDQyMDBGRjE0NDMwMDNFMDAwMDAwMDA4RTQzMDAwNDA4Ci06MTAzREUwMDA4RTIyMDAzODUwNjIwMDgwOEZCRjAwMUM5MjIyMDAwMDlCCi06MTAzREYwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMjUzQzAyODAwMEExCi06MTAzRTAwMDA4QzQyMDE0MDhFNDMwMDA0MzY0MjAxMDAwMjIwMjgyMUVBCi06MTAzRTEwMDBBQzQzMDAxQzk2MjIwMDVDOEUyMzAwMzgzMDQyRkZGRjJBCi06MTAzRTIwMDAwMDAyMTA0MDAwNjIxODIxQUUyMzAwMUM4RTQzMDAwNEUzCi06MTAzRTMwMDA4RTI0MDAzODk2MjIwMDVDMDA2NDE4MjMzMDQyRkZGRjc1Ci06MTAzRTQwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNkVGCi06MTAzRTUwMDAwMDAwMDAwMDhFNDIwMDA0OEUyMzAwMzgwMDQzMTAyMzJGCi06MTAzRTYwMDAwQTAwMEY2QjAwMDIyMDQzOTYyMjAwNUMzMDQyRkZGRkU1Ci06MTAzRTcwMDAwMDAyMjA0MDNDMDI4MDA4MzQ0MzAxMDAzNDQyMDA4MEFDCi06MTAzRTgwMDBBQ0E0MDAyQ0EwNDAwMDI0MjQwMjAwMDFBMDYyMDAwQzdECi06MTAzRTkwMDAwRTAwMEYxRjAwMDAwMDAwMTA0MDAwNTM4RkJGMDAxQ0Q5Ci06MTAzRUEwMDAzQzAyODAwMDhDNDQwMTQwM0MwMzgwMDA4QzYyMDFGODlECi06MTAzRUIwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDAxCi06MTAzRUMwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDBGQzg4RkJGMDAxQzUyCi06MTAzRUQwMDA5MjIyMDAwOTI0MDMwMDEwMzA0MjAwRkYxNDQzMDAwNDIyCi06MTAzRUUwMDAzQzAyODAwMDhDNDQwMTQwMEEwMDBGQUYwMDAwMjgyMUYyCi06MTAzRUYwMDA5MjIyMDAwOTI0MDMwMDE2MzA0MjAwRkYxNDQzMDAwNkZBCi06MTAzRjAwMDAyNDAyMDAxNEEyMjIwMDA5M0MwMjgwMDA4QzQ0MDE0MERCCi06MTAzRjEwMDAwQTAwMEZDMjhGQkYwMDFDOEUyMjAwMzg4RTIzMDAzQzg3Ci06MTAzRjIwMDAwMDQzMTAyMzA0NDEwMDMwOEZCRjAwMUM5MjIyMDAyNzYxCi06MTAzRjMwMDAyNDQyMDAwMUEyMjIwMDI3OTIyMjAwMjcyQzQyMDAwNEUyCi06MTAzRjQwMDAxNDQwMDAxNjNDMTA4MDAwOTIyMjAwMDkyNDAzMDAwNDUzCi06MTAzRjUwMDAzMDQyMDBGRjE0NDMwMDA5M0MwMjgwMDA4QzQ0MDE0MEMxCi06MTAzRjYwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEVCCi06MTAzRjcwMDAyNDA1MDA5MzBBMDAwRThEMjdCRDAwMjA4QzQ0MDE0MENCCi06MTAzRjgwMDAyNDA1MDA5MzhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDVFCi06MTAzRjkwMDA4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjA4RTA0MDE0MEQ5Ci06MTAzRkEwMDAwRTAwMDM0NTAwMDAwMDAwOEU0MjAwMDQyNDQyRkZGRjgzCi06MTAzRkIwMDBBRTQyMDAwNDhFMjIwMDNDMjQ0MkZGRkZBRTIyMDAzQ0IxCi06MTAzRkMwMDAwRTAwMDM1MDhFMDQwMTQwOEUwNDAxNDA4RkJGMDAxQzgwCi06MTAzRkQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNEI4Ci06MTAzRkUwMDAwQTAwMDM1NTI3QkQwMDIwOEZCMjAwMTg4RkIxMDAxNEJFCi06MTAzRkYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQzA2ODAwMEMxCi06MTA0MDAwMDA4Q0MyMDE4ODNDMDM4MDA4MzQ2NTAwODA5MDYzMDAwRUY4Ci06MTA0MDEwMDAwMDAyMTQwMjMwNDQwMEZGMzA2MzAwRkYxNDY0MDAwRUZECi06MTA0MDIwMDAzQzAyODAwODkwQTIwMDI2MzA0MjAwRkYxMDQ0MDAwOUE0Ci06MTA0MDMwMDA4RjgyRkZBOEEwQTQwMDI2MjQwMzAwNTA5MDQyMDAwMDE1Ci06MTA0MDQwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDAwQTAwMDU4RDA2Ci06MTA0MDUwMDA4Q0M0MDE4MDNDMDI4MDA4MzQ0MjAwODBBMDQ0MDAyNkM5Ci06MTA0MDYwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAzMEU3MDBGRjhDCi06MTA0MDcwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDVBCi06MTA0MDgwMDAwMDgwOTAyMTE0RTAwMDA2MzBDNjAwRkYwMDAwMDAwMDEwCi06MTA0MDkwMDAwMDAwMDAwRDAwMDAwMDAwMEEwMDEwMjEyNDAwMDEwRUE1Ci06MTA0MEEwMDAzQzAzODAwODkwNjIwMDBFMzA0MjAwRkYxNDQ2MDAyMzVCCi06MTA0MEIwMDAzNDYyMDA4MDkwNDIwMDI2MzA0MjAwRkYxNDQ2MDAxRjA4Ci06MTA0MEMwMDAwMDAwMDAwMDkwNjIwMDBGMzA0MjAwRkYxNDQ2MDAxQjA5Ci06MTA0MEQwMDAwMDAwMDAwMDkwNjIwMDBBMzA0MjAwRkYxNDQ2MDAwMzE2Ci06MTA0MEUwMDA4RjkwRkZBODAwMDAwMDBEOEY5MEZGQTg4RjgyRkZBQzdCCi06MTA0MEYwMDAzQzExODAwMEFFMDUwMDNDQUM0NTAwMDBBMDY2MDAwQTAzCi06MTA0MTAwMDAwRTAwMDM0NThFMjQwMTAwQTIwMDAwMjQwRTAwMDM1MDdGCi06MTA0MTEwMDA4RTI0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTA1Ci06MTA0MTIwMDAyNDAyMDAwMkFDNzIwMUMwQTA2MjAxQzQzQzAyMTAwMDczCi06MTA0MTMwMDBBQzYyMDFGODBBMDAxMDIyOEZCRjAwMUMwMDAwMDAwMEQyCi06MTA0MTQwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAxMzc4RkJGMDAxQzlDCi06MTA0MTUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODc4Ci06MTA0MTYwMDAyN0JEMDAyMDhGODNGRkE4M0MwMjgwMDA4QzQ0MDEwMDAzCi06MTA0MTcwMDAzNDQyMDEwMDhDNjUwMDNDOTA0NjAwMUIwQTAwMEZFOEE5Ci06MTA0MTgwMDAyNDA3MDAwMTNDMDI4MDA4OTA0MzAwMEU5MDQyMDAwQTgwCi06MTA0MTkwMDAwMDQzMTAyNjMwNDIwMEZGMDNFMDAwMDgwMDAyMTAyQjBECi06MTA0MUEwMDAyN0JERkZFMDNDMDI4MDA4QUZCMTAwMTRBRkIwMDAxMEEzCi06MTA0MUIwMDBBRkJGMDAxODM0NTAwMDgwOTIwMjAwMDUyNDAzMDAzMDg1Ci06MTA0MUMwMDAzMDQyMDAzMDE0NDMwMDg1MDA4MDg4MjE4RjgyMDAxQzFCCi06MTA0MUQwMDA4QzQyMDAwQzEwNDAwMDgyOEZCRjAwMTgwRTAwMEQ0NTZECi06MTA0MUUwMDAwMDAwMDAwMDhGODYwMDE4QUNEMTAwMDA5MjAyMDAwODg5Ci06MTA0MUYwMDA5MjAzMDAwOTMwNDIwMEZGMDAwMjEyMDAzMDYzMDBGRjBBCi06MTA0MjAwMDAwMDQzMTAyNUFDQzIwMDA0OTIwMjAwNEQwMDAyMTYwMENCCi06MTA0MjEwMDAwMDAyMTYwMzA0NDEwMDA1MDAwMDAwMDAzQzAzMDgwMEYyCi06MTA0MjIwMDA4QzYzMDA0ODBBMDAxMDYwM0MxMDgwMDg5MjAyMDAwODZECi06MTA0MjMwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDE4MjE5MjAyMDAyNzgxCi06MTA0MjQwMDAzMDQzMDBGRjNDMTA4MDA4MzYxMTAwODA5MjIyMDA0RDYwCi06MTA0MjUwMDAwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDAwMDYyMTgyNTE3Ci06MTA0MjYwMDBBQ0MzMDAwODhFMjQwMDMwOEY4MjAwMUNBQ0M0MDAwQzRDCi06MTA0MjcwMDA4RTI1MDAzNDk0NDMwMDFFM0MwMkMwMEJBQ0M1MDAxMEQ4Ci06MTA0MjgwMDAwMDYyMTgyNThFMjIwMDM4MDAwMDIwMjFBQ0MyMDAxNEU0Ci06MTA0MjkwMDA4RTIyMDAzQ0FDQzIwMDE4MEUwMDBENzlBQ0MzMDAxQzhECi06MTA0MkEwMDA4RTAyMDAwNDhGODQwMDE4M0MwNTgwMDBBQzgyMDAwMDYwCi06MTA0MkIwMDA4RTIyMDAyMEFDODIwMDA0OEUyMjAwMUNBQzgyMDAwOEZBCi06MTA0MkMwMDA4RTIyMDA1ODhDQTMwMDc0MDA0MzEwMjFBQzgyMDAwQzk1Ci06MTA0MkQwMDA4RTIyMDAyQ0FDODIwMDEwOEUyMjAwNDA4RTIzMDA0NERGCi06MTA0MkUwMDAwMDAyMTQwMDAwNDMxMDI1QUM4MjAwMTQ5MjIyMDA0REZECi06MTA0MkYwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDQwMDAwMDAwMDRCCi06MTA0MzAwMDBBQzgwMDAxODBBMDAxMEE0OEY4MjAwMUM4RTIzMDAwQ0MxCi06MTA0MzEwMDAyNDAyMDAwMTEwNjIwMDBFMjQwMkZGRkY5MjIyMDAwODE2Ci06MTA0MzIwMDAzMDQyMDA0MDE0NDAwMDBBMjQwMkZGRkY4RTIzMDAwQzlDCi06MTA0MzMwMDA4Q0EyMDA3NDAwNjIxODIzM0MwMjA4MDAwMDYyMTAyNDYyCi06MTA0MzQwMDAxNDQwMDAwMjAwMDAyODIxMDA2MDI4MjEwMDA1MTA0M0NECi06MTA0MzUwMDBBQzgyMDAxODhGODIwMDFDMDAwMDIwMjE5NDQzMDAxRUI0Ci06MTA0MzYwMDAzQzAyQzAwQzAwNjIxODI1OEY4MjAwMTgwRTAwMEQ3OUU3Ci06MTA0MzcwMDBBQzQzMDAxQzNDMDM4MDA4MzQ2MjAxMDA4QzQyMDAwMDA2Ci06MTA0MzgwMDA4Rjg1MDAxODM0NjMwMDgwOEZCRjAwMThBQ0EyMDAwMDM2Ci06MTA0MzkwMDBBQ0EwMDAwNDhDNjQwMDQ4OEY4MjAwMUM4RkIxMDAxNDE0Ci06MTA0M0EwMDBBQ0E0MDAwOEFDQTAwMDBDQUNBMDAwMTA5MDYzMDAwNTA5Ci06MTA0M0IwMDA5NDQ2MDAxRTNDMDI0MDBEMDAwMzFFMDAwMEMyMzAyNTQyCi06MTA0M0MwMDBBQ0EzMDAxNDhGQjAwMDEwQUNBMDAwMTgyNDA0MDAwMUFFCi06MTA0M0QwMDBBQ0E2MDAxQzBBMDAwRDc5MjdCRDAwMjA4RkJGMDAxODc1Ci06MTA0M0UwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDNCCi06MTA0M0YwMDAzQzAyODAwMDk0NDMwMDdDM0MwMjgwMDgzNDQ2MDEwMDZCCi06MTA0NDAwMDAzMDg0MDBGRjMwNjVGRkZGMjQwMjAwMDUyNEEzNDY1MERFCi06MTA0NDEwMDBBMEM0MDAwQzU0ODIwMDBDMzA2NUZGRkY5MEMyMDAwRDU4Ci06MTA0NDIwMDAyQzQyMDAwNzEwNDAwMDA3MjRBMzBBMDA5MEMzMDAwRDhGCi06MTA0NDMwMDAyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjEwQTAwMTBFMEZGCi06MTA0NDQwMDAzMDQ1RkZGRjMwNjVGRkZGM0MwMjgwMDgzNDQyMDA4MEFBCi06MTA0NDUwMDAwM0UwMDAwOEE0NDUwMDE0M0MwMzgwMDgzNDY4MDA4MDkxCi06MTA0NDYwMDBBRDA1MDAzODM0NjcwMTAwOENFMjAwMUMzMDg0MDBGRjg5Ci06MTA0NDcwMDAwMEEyMTAyMzE4NDAwMDAzMzBDNjAwRkYyNEEyRkZGQzU2Ci06MTA0NDgwMDBBQ0UyMDAxQzMwODIwMDAxNTA0MDAwMDgzQzAzODAwODcwCi06MTA0NDkwMDA4RDAyMDAzQzAwQTIxMDIzMDQ0MTAwMTIyNDA0MDAwNUY4Ci06MTA0NEEwMDA4QzYyMDAwNDEwQTIwMDBGM0MwMzgwMDg4QzYyMDAwNEEwCi06MTA0NEIwMDAxNEEyMDAxRTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODNDCi06MTA0NEMwMDAzMDQyMDAyMDEwNDAwMDA5M0MwMjgwMDgzNDYyMDA4MDI1Ci06MTA0NEQwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDQzQzAyODAwOEEyCi06MTA0NEUwMDAyNDA0MDAwNDBBMDAxMENBMDAwMDAwMDAzNDQzMDA4MEM1Ci06MTA0NEYwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDE4Ci06MTA0NTAwMDAxMEMwMDAwQTNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMDgzCi06MTA0NTEwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDdBCi06MTA0NTIwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwM0UwMDAwODg0Ci06MTA0NTMwMDAwMDAwMDAwMDI3QkRGRkU4MDBBNjE4MjNBRkJGMDAxMDUxCi06MTA0NTQwMDAxODYwMDA4MDMwODgwMEZGM0MwMjgwMDgzNDQ3MDA4MEZCCi06MTA0NTUwMDBBMEUwMDAyNDM0NDQwMTAwQTBFMDAwMjc4QzgyMDAxQzZECi06MTA0NTYwMDAwMEEyMTAyMzA0NDAwMDU2MDAwMDAwMDA4Q0UyMDAzQzMyCi06MTA0NTcwMDA5NEUzMDA1QzhDRTQwMDJDMDA0NTMwMjMzMDYzRkZGRkEzCi06MTA0NTgwMDAwMEMzMTgyMTAwODMyMDJCMTA4MDAwMDQwMEUwMTgyMUI0Ci06MTA0NTkwMDA4Q0UyMDAyQzBBMDAxMTM5MDBBMjEwMjE5NEUyMDA1Qzg4Ci06MTA0NUEwMDAzMDQyRkZGRjAwQzIxMDIxMDBBMjEwMjFBQzYyMDAxQ0FCCi06MTA0NUIwMDAzQzAyODAwODM0NDQwMDgwOTQ4MjAwNUM4QzgzMDAxQ0EwCi06MTA0NUMwMDAzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjEwMDQzMTAyQkQ4Ci06MTA0NUQwMDAxMDQwMDAwNDAwMDAwMDAwOEM4MjAwMUMwQTAwMTE0Q0Y2Ci06MTA0NUUwMDAzQzA2ODAwODk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MENECi06MTA0NUYwMDAwMEEyMTAyMTNDMDY4MDA4MzRDMzAxMDAzNEM3MDA4MEFCCi06MTA0NjAwMDBBQzgyMDAxQ0EwNjAwMDBDQUNFNTAwMzg4QzYyMDAxQzgxCi06MTA0NjEwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQzYyMDAxQzgwCi06MTA0NjIwMDAzMTAyMDAwMTEwNDAwMDA4M0MwMzgwMDg4Q0UyMDAzQzhECi06MTA0NjMwMDAwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDU4Q0MyMDAwNENGCi06MTA0NjQwMDAxMEEyMDAxMDhGQkYwMDEwOEM2MjAwMDQxNEEyMDA0RjUzCi06MTA0NjUwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDdFCi06MTA0NjYwMDAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA5MDYzMDAwODE5Ci06MTA0NjcwMDA5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDgyNDA0MDAwNENFCi06MTA0NjgwMDA4RkJGMDAxMDBBMDAxMENBMjdCRDAwMTgzNDQzMDA4MEY1Ci06MTA0NjkwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDc2Ci06MTA0NkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOEQ1Ci06MTA0NkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDExOTkwMDAwMDAwMERECi06MTA0NkMwMDA4Q0UyMDAxQzAwNDYxMDIzMDA0MzEwMkI1NDQwMDAwMUQ0Ci06MTA0NkQwMDBBQ0U1MDAxQzk0RTIwMDVDMzA0MkZGRkYwMDYyMTAyQjRFCi06MTA0NkUwMDAxNDQwMDAwNzI0MDIwMDAyOTRFMjAwNUM4Q0UzMDAxQ0VBCi06MTA0NkYwMDAzMDQyRkZGRjAwNjIxODIxQUNFMzAwMUMyNDAyMDAwMkRDCi06MTA0NzAwMDBBQ0U1MDAzODBFMDAwRjFGQTA4MjAwMEMxMDQwMDAxRjA3Ci06MTA0NzEwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMEVECi06MTA0NzIwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDY4Ci06MTA0NzMwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMTFCMTkxCi06MTA0NzQwMDA4RkJGMDAxMDMxMDIwMDEwMTA0MDAwMTA4RkJGMDAxMDBBCi06MTA0NzUwMDAzQzAyODAwODM0NDUwMDgwOENBMzAwMUM5NEEyMDA1Q0JECi06MTA0NzYwMDAwMDY2MTgyMzMwNDJGRkZGMDA2MjE4MjEzQzAyM0ZGRjIxCi06MTA0NzcwMDAzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEwMDgwMTgyMUI3Ci06MTA0NzgwMDAwMEMzMTAyMUFDQTIwMDFDOEZCRjAwMTAwM0UwMDAwODgyCi06MTA0NzkwMDAyN0JEMDAxODI3QkRGRkU4MDBDMDQwMjEwMEE2MzAyMzM4Ci06MTA0N0EwMDBBRkJGMDAxMDE4QzAwMDI2MzA4QTAwRkYzQzAyODAwODBFCi06MTA0N0IwMDAzNDQ5MDA4MDhEMjQwMDFDOEQyMzAwMkMwMDg4MjAyMzg4Ci06MTA0N0MwMDAwMDY0MTgyQjEwNjAwMDBGMzQ0NzAxMDA4Q0UyMDAyMEI5Ci06MTA0N0QwMDAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjAwMDQ0MTAyQkE3Ci06MTA0N0UwMDAxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAwMDQ0MTAyM0U5Ci06MTA0N0YwMDBBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkYwQTAwMTFEMTlDCi06MTA0ODAwMDAwMDgyMjAyMUFDRTAwMDIwMDA4NjIwMjEzQzAyM0ZGRkY2Ci06MTA0ODEwMDAzNDQzRkZGRjAwNjQxMDJCNTQ0MDAwMDEwMDYwMjAyMTRFCi06MTA0ODIwMDAzQzAyODAwODM0NDIwMDgwMDA4NTE4MjFBQzQzMDAxQzAzCi06MTA0ODMwMDBBMDQwMDAyNEEwNDAwMDI3MEEwMDEyMjMzQzAzODAwODY3Ci06MTA0ODQwMDAzMTQyMDAxMDEwNDAwMDQzM0MwMzgwMDgzQzA2ODAwOEMxCi06MTA0ODUwMDAzNEM0MDA4MDhDODIwMDNDMDA0ODEwMjM1ODQwMDAzRTQ1Ci06MTA0ODYwMDAzNDY2MDA4MDkwODIwMDI0MjQ0MjAwMDFBMDgyMDAyNDRCCi06MTA0ODcwMDA5MDgyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjM3Ci06MTA0ODgwMDAwMDQzMTAyQjE0NDAwMDY4OEZCRjAwMTAzNEMyMDEwMDk5Ci06MTA0ODkwMDA4QzQyMDAxQzAwQTIxMDIzMTg0MDAwNjMwMDAwMDAwMDlFCi06MTA0OEEwMDA4Q0MzMDAwNDk0ODIwMDVDMDA2ODE4MjMzMDQyRkZGRjMwCi06MTA0OEIwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNTc2Ci06MTA0OEMwMDAwMDAwMDAwMDhDQzIwMDA0MDA0ODEwMjMwQTAwMTIwNkY5Ci06MTA0OEQwMDAwMDAyMTA0Mzk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MDRGCi06MTA0OEUwMDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODA5NEEyMDA1Qzk5Ci06MTA0OEYwMDA4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYwMDAyMTA0MDA3Ci06MTA0OTAwMDAwMDgyMjAyMTMwNjNGRkZGMDA4MzIwMjEwMTA0MTAyMTU5Ci06MTA0OTEwMDBBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBBQ0MyMDAxQzU2Ci06MTA0OTIwMDAyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEMxMDQwMDAzRTI3Ci06MTA0OTMwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMENCCi06MTA0OTQwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTI1M0E4Ci06MTA0OTUwMDAwMDAwMDAwMDM0NjYwMDgwQUNDNTAwMzgzNDY0MDEwMEZCCi06MTA0OTYwMDA4QzgyMDAxQzAwQTIxMDIzMTg0MDAwMDIyNEEyRkZGQzJECi06MTA0OTcwMDBBQzgyMDAxQzMxNDIwMDAxNTA0MDAwMEEzQzAzODAwODE4Ci06MTA0OTgwMDA4Q0MyMDAzQzAwQTIxMDIzMDQ0MzAwMTQyNDA0MDAwNTQwCi06MTA0OTkwMDA4QzYyMDAwNDE0QTIwMDAzM0MwMzgwMDgwQTAwMTI0NTQ0Ci06MTA0OUEwMDAyNDA0MDAwNThDNjIwMDA0MTRBMjAwMUY4RkJGMDAxMEI1Ci06MTA0OUIwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAxMDQwMDAwQTFGCi06MTA0OUMwMDAzQzAyODAwODM0NjIwMDgwOTA2MzAwMDg5MDQyMDA0Q0YyCi06MTA0OUQwMDAxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDQ4RkJGMDAxMDJCCi06MTA0OUUwMDAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODAzNDQyMDEwMDc5Ci06MTA0OUYwMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQzQzAyODAwMENDCi06MTA0QTAwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRUVFCi06MTA0QTEwMDAyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzQzAyMTAwMDg4Ci06MTA0QTIwMDBBQzYyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODNBCi06MTA0QTMwMDAyN0JERkZFODNDMEE4MDA4QUZCRjAwMTAzNTQ5MDA4MDYxCi06MTA0QTQwMDA4RDIyMDAzQzAwQzA0MDIxMzA4NDAwRkYwMDQ2MTAyMzJFCi06MTA0QTUwMDAxODQwMDA5RDMwRTcwMEZGMzU0NzAxMDAyNDAyMDAwMUE3Ci06MTA0QTYwMDAwMEE2MzAyM0EwRTAwMDBDQTBFMDAwMERBNTIyMDAxNDU5Ci06MTA0QTcwMDAxOEMwMDAyNDMwODIwMDEwOEQyMzAwMUM4RDIyMDAyQ0QxCi06MTA0QTgwMDAwMDY4MTgyMzAwNDMxMDJCMTA0MDAwMEYwMDAwMDAwMEE2Ci06MTA0QTkwMDA4Q0UyMDAyMDAwNDYxMDIxQUNFMjAwMjA4Q0UyMDAyMEQ1Ci06MTA0QUEwMDAwMDQzMTAyQjE0NDAwMDBCM0MwMjNGRkY4Q0UyMDAyMDFGCi06MTA0QUIwMDAwMDQzMTAyM0FDRTIwMDIwOTUyMjAwNUMzMDQyRkZGRjRGCi06MTA0QUMwMDAwQTAwMTI4MjAwNjIxODIxQUNFMDAwMjAwMDY2MTgyMTYyCi06MTA0QUQwMDAzQzAyM0ZGRjM0NDZGRkZGMDBDMzEwMkI1NDQwMDAwMTRGCi06MTA0QUUwMDAwMEMwMTgyMTNDMDI4MDA4MzQ0MjAwODAwMDY1MTgyMTczCi06MTA0QUYwMDBBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjcwQTAwMTJEMEI0Ci06MTA0QjAwMDAzQzAzODAwODEwNDAwMDQwM0MwMzgwMDg4RDIyMDAzQzlDCi06MTA0QjEwMDAwMDQ4MTAyMzU4NDAwMDNEMzQ2NzAwODA5MTIyMDAyNDUzCi06MTA0QjIwMDAyNDQyMDAwMUExMjIwMDI0OTEyMjAwMjQzQzAzMDgwMDE5Ci06MTA0QjMwMDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkIxNDQwMDA5QTg1Ci06MTA0QjQwMDA4RkJGMDAxMDhDRTIwMDFDMDBBMjEwMjMxODQwMDA5NkJBCi06MTA0QjUwMDAwMDAwMDAwMDhENDMwMDA0OTUyMjAwNUMwMDY4MTgyM0NCCi06MTA0QjYwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQUE4Ci06MTA0QjcwMDAxMDQwMDAwNTAxMjAyMDIxOEQ0MjAwMDQwMDQ4MTAyMzMwCi06MTA0QjgwMDAwQTAwMTJCMzAwMDIxMDQzOTUyMjAwNUMzMDQyRkZGRjdFCi06MTA0QjkwMDAwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkMzNEM1MDA4MDI2Ci06MTA0QkEwMDA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUMzMDQyRkZGRjE0Ci06MTA0QkIwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMTkzCi06MTA0QkMwMDAwMTAzMTAyMUFDQTIwMDFDOENDMjAwMDQzNEM2MDEwMEY5Ci06MTA0QkQwMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGMUZBMEMyMDAwQzc5Ci06MTA0QkUwMDAxMDQwMDA3MThGQkYwMDEwM0MwMjgwMDA4QzQ0MDEwMDE3Ci06MTA0QkYwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkE2Ci06MTA0QzAwMDAwQTAwMTJGQTAwMDAwMDAwMzQ2NzAwODBBQ0U1MDAzOEFBCi06MTA0QzEwMDAzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMxODQwMDAwMjYwCi06MTA0QzIwMDAyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDE1MDQwMDAwOEVFCi06MTA0QzMwMDAzQzAzODAwODhDRTIwMDNDMDBBMjEwMjMwNDQzMDA1MTk2Ci06MTA0QzQwMDAyNDA0MDAwNThDNjIwMDA0MTBBMjAwM0UzQzAzODAwODhFCi06MTA0QzUwMDA4QzYyMDAwNDU0QTIwMDU0OEZCRjAwMTAzQzAyMDgwMDc0Ci06MTA0QzYwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMDYzQzAyODAwOEYwCi06MTA0QzcwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxMDQzMDA0MDcyCi06MTA0QzgwMDAzQzAyODAwODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQzA0Ci06MTA0QzkwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDQ0Ci06MTA0Q0EwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkY1Ci06MTA0Q0IwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODA3Ci06MTA0Q0MwMDAwQTAwMTMzODhGQkYwMDEwMjQwMjAwMDVBMTIwMDAyNzFFCi06MTA0Q0QwMDAxNEUyMDAwQTNDMDM4MDA4MzU0MzAxMDA5MDYyMDAwRDk1Ci06MTA0Q0UwMDAyQzQyMDAwNjUwNDAwMDA1M0MwMzgwMDg5MDYyMDAwREY1Ci06MTA0Q0YwMDAyNDQyMDAwMUEwNjIwMDBEM0MwMzgwMDgzNDY3MDA4MDVDCi06MTA0RDAwMDBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUMwMEEyMTAyMzAwCi06MTA0RDEwMDAxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUMzMDgyMDAwMTNCCi06MTA0RDIwMDA1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMEEyMTAyM0EzCi06MTA0RDMwMDAwNDQxMDAxNDI0MDQwMDA1OEM2MjAwMDQxNEEyMDAwMzQyCi06MTA0RDQwMDAzQzAzODAwODBBMDAxMzJGMjQwNDAwMDU4QzYyMDAwNDMxCi06MTA0RDUwMDAxNEEyMDAxNThGQkYwMDEwM0MwMjA4MDA4QzQyMDBEODNFCi06MTA0RDYwMDAzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgzNDYyMDA4MDdCCi06MTA0RDcwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDUzQzAyODAwOEY4Ci06MTA0RDgwMDAyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyN0JEMDAxOEI5Ci06MTA0RDkwMDAzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMyNDAyMDAwMTkyCi06MTA0REEwMDBBNDYyMDAxNDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEE0Ci06MTA0REIwMDAzQzBCODAwODI3QkRGRkU4M0MwMjgwMDBBRkJGMDAxMDFECi06MTA0REMwMDAzNDQyMDEwMDM1NkEwMDgwOTA0NDAwMEEzNTY5MDEwMEQwCi06MTA0REQwMDA4QzQ1MDAxNDhENDgwMDM4OTEyMzAwMEMzMDg0MDBGRjZFCi06MTA0REUwMDAwMTA1MTAyMzFDNDAwMEIzMzA2NzAwRkYyQ0UyMDAwNkQxCi06MTA0REYwMDA1MDQwMDBCMThGQkYwMDEwMjQwMjAwMDEwMEUyMzAwNEQ3Ci06MTA0RTAwMDAzMEMyMDAwMzU0NDAwMDA4MDBBODMwMjMzMEMyMDAwQzE4Ci06MTA0RTEwMDAxNDQwMDBBMTMwQzIwMDMwMTQ0MDAwQTM4RkJGMDAxMDI2Ci06MTA0RTIwMDAwQTAwMTNGQzAwMDAwMDAwMThDMDAwMjQzMDgyMDAxMEFCCi06MTA0RTMwMDA4RDQzMDAxQzhENDIwMDJDMDA2ODE4MjMwMDQzMTAyQjZBCi06MTA0RTQwMDAxMDQwMDAwRjAwMDAwMDAwOEQyMjAwMjAwMDQ2MTAyMUJECi06MTA0RTUwMDBBRDIyMDAyMDhEMjIwMDIwMDA0MzEwMkIxNDQwMDAwQkI3Ci06MTA0RTYwMDAzQzAyM0ZGRjhEMjIwMDIwMDA0MzEwMjNBRDIyMDAyMDkyCi06MTA0RTcwMDA5NTQyMDA1QzMwNDJGRkZGMEEwMDEzNzAwMDYyMTgyMTY3Ci06MTA0RTgwMDBBRDIwMDAyMDAwNjYxODIxM0MwMjNGRkYzNDQ2RkZGRkEyCi06MTA0RTkwMDAwMEMzMTAyQjU0NDAwMDAxMDBDMDE4MjEzQzAyODAwOEMwCi06MTA0RUEwMDAzNDQyMDA4MDAwNjUxODIxQUM0MzAwMUNBMDQwMDAyNDVGCi06MTA0RUIwMDBBMDQwMDAyNzBBMDAxM0JFM0MwMzgwMDgxMDQwMDA0MEI5Ci06MTA0RUMwMDAzQzAzODAwODhENDIwMDNDMDA0ODEwMjMxODQwMDAzRDAwCi06MTA0RUQwMDAzNDY3MDA4MDkxNDIwMDI0MjQ0MjAwMDFBMTQyMDAyNDUyCi06MTA0RUUwMDA5MTQyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjAwCi06MTA0RUYwMDAwMDQzMTAyQjE0NDAwMDcwOEZCRjAwMTA4RDIyMDAxQzQ3Ci06MTA0RjAwMDAwMEEyMTAyMzE4NDAwMDZDMDAwMDAwMDA4RDYzMDAwNDE0Ci06MTA0RjEwMDA5NTQyMDA1QzAwNjgxODIzMzA0MkZGRkYwMDAzMTg0M0VECi06MTA0RjIwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMTQwMjAyMURCCi06MTA0RjMwMDA4RDYyMDAwNDAwNDgxMDIzMEEwMDEzQTEwMDAyMTA0M0YwCi06MTA0RjQwMDA5NTQyMDA1QzMwNDJGRkZGMDAwMjEwNDAzQzA2ODAwOEEyCi06MTA0RjUwMDBBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM4Q0E0MDAyQzkwCi06MTA0RjYwMDA5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwMDgyMjAyMTI5Ci06MTA0RjcwMDAzMDYzRkZGRjAwODMxODIxMDEwMzEwMjFBQ0EyMDAxQzQ1Ci06MTA0RjgwMDA4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUMyNDAyMDAwMjIyCi06MTA0RjkwMDAwRTAwMEYxRkEwQzIwMDBDMTA0MDAwNDc4RkJGMDAxMDcyCi06MTA0RkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOENDCi06MTA0RkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDEzRUUwMDAwMDAwMDdECi06MTA0RkMwMDAzNDY3MDA4MEFDRTUwMDM4MzQ2NjAxMDA4Q0MyMDAxQ0Y4Ci06MTA0RkQwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQ0MyMDAxQzU3Ci06MTA0RkUwMDAzMDgyMDAwMTUwNDAwMDBBM0MwMzgwMDg4Q0UyMDAzQzAzCi06MTA0RkYwMDAwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU4QzYyMDAwNDYyCi06MTA1MDAwMDAxNEEyMDAwMzNDMDM4MDA4MEEwMDEzRTAyNDA0MDAwNUY2Ci06MTA1MDEwMDA4QzYyMDAwNDE0QTIwMDI4OEZCRjAwMTAzQzAyMDgwMDFDCi06MTA1MDIwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEzQzAyODAwODI4Ci06MTA1MDMwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxNDQzMDAwNUU1Ci06MTA1MDQwMDAzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAwQTAwMTBDQTJDCi06MTA1MDUwMDAyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQ0ZBCi06MTA1MDYwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDcwCi06MTA1MDcwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMjIxCi06MTA1MDgwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODMzCi06MTA1MDkwMDAwQTAwMTNGQzhGQkYwMDEwOEZCRjAwMTAwMTAwMzAyMUU5Ci06MTA1MEEwMDAwQTAwMTExQjI3QkQwMDE4MDEwMDMwMjEwQTAwMTI1QTA2Ci06MTA1MEIwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEFGCi06MTA1MEMwMDAzQzAzODAwODM0NjQwMTAwMjQwMjAwMDNBMDgyMDAwQzI5Ci06MTA1MEQwMDA4QzYyMDAwNDAzRTAwMDA4QUM4MjAwMUMzQzA1ODAwOEUwCi06MTA1MEUwMDAzNEEzMDA4MDkwNjIwMDI3MzRBNTAxMDAyNDA2MDA0MzA5Ci06MTA1MEYwMDAyNDQyMDAwMUEwNjIwMDI3OTA2MzAwMjczQzAyMDgwMEMwCi06MTA1MTAwMDA4QzQyMDA0ODMwNjMwMEZGMTQ2MjAwMDQzQzA3NjAyMUI5Ci06MTA1MTEwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEJGCi06MTA1MTIwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAzQzAyODAwMDc4Ci06MTA1MTMwMDAwRTAwMTQwNThDNDQwMTgwM0MwMjgwMDgzNDQzMDEwMEI5Ci06MTA1MTQwMDBBMDYwMDAwQzhDNDIwMDA0OEZCRjAwMTAyN0JEMDAxODI3Ci06MTA1MTUwMDAwM0UwMDAwOEFDNjIwMDFDMjdCREZGRTAzQzAyODAwOEIxCi06MTA1MTYwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzNDQ1MDA4MERECi06MTA1MTcwMDAzNDQ2MDEwMDNDMDg4MDAwOEQwOTAxNDA5MEMzMDAwQ0JBCi06MTA1MTgwMDA4Q0E0MDAzQzhDQTIwMDM4MTQ4MjAwM0IzMDY3MDBGRkU2Ci06MTA1MTkwMDA5NTAyMDA3QzkwQTMwMDI3MTQ2MDAwMDkzMDQ1RkZGRkIyCi06MTA1MUEwMDAyNDAyMDAwNTU0RTIwMDA4M0MwNDgwMDg5MEMyMDAwRDZGCi06MTA1MUIwMDAyNDQyMDAwMUEwQzIwMDBEMEEwMDE0NDAzQzA0ODAwOEYzCi06MTA1MUMwMDBBMEMwMDAwRDNDMDQ4MDA4MzQ4MjAxMDA5MDQyMDAwQzE1Ci06MTA1MUQwMDAyNDAzMDAwNTMwNDIwMEZGMTQ0MzAwMEEyNEEyMDVEQzJBCi06MTA1MUUwMDAzNDgzMDA4MDkwNjIwMDI3MkM0MjAwMDc1MDQwMDAwNTY1Ci06MTA1MUYwMDAyNEEyMEEwMDkwNjMwMDI3MjQwMjAwMTQwMDYyMTAwNDE1Ci06MTA1MjAwMDAwMEEyMTAyMTNDMTA4MDA4MzYxMDAwODAzMDQ1RkZGRkJFCi06MTA1MjEwMDAwMTIwMjAyMTBFMDAxNDA1QTYwNTAwMTQ5NjAyMDA1QzUyCi06MTA1MjIwMDA4RTAzMDAzODNDMTE4MDAwMzA0MkZGRkYwMDAyMTA0MDI2Ci06MTA1MjMwMDAwMDYyMTgyMUFFMDMwMDFDMEUwMDAzNDU4RTI0MDE0MEJECi06MTA1MjQwMDA5MjAyMDAyNTM0NDIwMDQwQTIwMjAwMjUwRTAwMDM1MEM1Ci06MTA1MjUwMDA4RTI0MDE0MDhFMjQwMTQwM0MwMzgwMDA4QzYyMDFGOEMyCi06MTA1MjYwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDNECi06MTA1MjcwMDAzQzAyMTAwMEFDNjIwMUY4OEZCRjAwMTg4RkIxMDAxNDFGCi06MEM1MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBFNAotOjA0NTI4QzAwODAwODAxMDA5NQotOjEwNTI5MDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzgwMDAwMDMyMDBDMAotOjEwNTJBMDAwODAwODAyNDAwODAwMEVEQzA4MDAwRjM0MDgwMDBGNzg2OAotOjEwNTJCMDAwMDgwMDEwMTAwODAwMTA1MDgwMDgwMTAwODAwODAwODBDRAotOjA0NTJDMDAwODAwODAwMDA2MgotOjBDNTJDNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwQjIKLToxMDUyRDAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTMzMDAwMDAwNjAKLToxMDUyRTAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMDUyRjAwMDAwMDAwMDAwMDAwMDAwMDAzODAwM0MwMDAwMDAwMDAwM0EKLToxMDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwN0QKLToxMDUzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDUzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDUzMzAwMDAwMDAwMDAwMDAwMDAwMDAyMTAwMzgwMDAwMDAwMDAxMTMKLToxMDUzNDAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDUzNTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEMjAKLToxMDUzNjAwMDNDMDIwODAwMjQ0MjU0MjQzQzAzMDgwMDI0NjM1NjRDQTkKLToxMDUzNzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0QjkKLToxMDUzODAwMDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjUKLToxMDUzOTAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNTQyNDBFMDAwMjg4MUMKLToxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMEQwMEEwMTgyMTAwODAxMDIxNjYKLToxMDUzQjAwMDAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDI0MDYwMDA4QUYKLToxMDUzQzAwMDEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMEFDRTIyMDA4OTMKLToxMDUzRDAwMDhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQzBBMDAwRTJBRjYKLToxMDUzRTAwMDAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDAzRTAwMDA4Q0QKLToxMDUzRjAwMEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwMDhDRTUyMDc0RTEKLToxMDU0MDAwMDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwNzAwMDAyODIxM0MKLToxMDU0MTAwMDhGOEFGRDk4MjQwNTAwMDFBMTQ0MDAxMzhGODkwMDAwQTQKLToxMDU0MjAwMDAxMjQ0MDIxQUY4ODAwMDAwM0UwMDAwODAwQTAxMDIxMDMKLToxMDU0MzAwMDhGODRGRDk4OEY4NTAwMDA5MDg2MDAxMzMwQzMwMEZGOTUKLToxMDU0NDAwMDAwQTMxMDIzQUY4MjAwMDAwM0UwMDAwOEEwODAwMDEzMzcKLToxMDU0NTAwMDhGODRGRDk4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0RTgKLToxMDU0NjAwMDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODMxMjgwMEZGNDQKLToxMDU0NzAwMDM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQzJDRDAwMDAxRTEKLToxMDU0ODAwMDEwNjIwMDE2MjQ4NDAwMUMwRTAwMDAzOTAwMDAwMDAwODkKLToxMDU0OTAwMDhGOEZGRDk4M0MwNTYwMDAyNDAyMDIwNDk1RUUwMDNFQ0IKLToxMDU0QTAwMDk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjAxNkM1MDI1MTcKLToxMDU0QjAwMEFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNEFDQTIyMDAwN0IKLToxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGQkYwMDE0N0EKLToxMDU0RDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODBBMDAwMDcxMUIKLToxMDU0RTAwMDAwMDAyODIxOEY4NUZEOTgyN0JERkZEOEFGQkYwMDIwODEKLToxMDU0RjAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwRDIKLToxMDU1MDAwMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQzI0QjEwMDJDMkMKLToxMDU1MTAwMDMwODMwMEZGMzg2MjAwMjgwRTAwMDA1QjJDNTIwMDAxMkYKLToxMDU1MjAwMDBFMDAwMDYzMDAwMDAwMDAwMjAwMjAyMTEyNDAwMDAyNzMKLToxMDU1MzAwMDAyMjAyODIxMDAwMDI4MjEwRTAwMDAzOTAwMDAwMDAwNzAKLToxMDU1NDAwMDhGOERGRDk4M0MwODgwMDAzQzA1NjAwMDk1QUMwMDNFQzYKLToxMDU1NTAwMDk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDMxNkFGRkZGMUYKLToxMDU1NjAwMDAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMkFDQTYyMDE0ODAKLToxMDU1NzAwMDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMDhGQjMwMDFDQTQKLToxMDU1ODAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDI4MTMKLToxMDU1OTAwMDAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMEFGQjIwMDE4NzYKLToxMDU1QTAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzNDMTE2MDAwRTEKLToxMDU1QjAwMDhFMjMyMDc0OEY4MjAwMDAzMEQwRkZGRjMwRjJGRkZGNzcKLToxMDU1QzAwMDEwNjIwMDBDMjQwNjAwOEYwRTAwMDAzOTAwMDAwMDAwNUQKLToxMDU1RDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMDAxMTIzODI1MkUKLToxMDU1RTAwMDI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMUFFMjUyMDE0MzQKLToxMDU1RjAwMEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QTIKLToxMDU2MDAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDIwNkIKLToxMDU2MTAwMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRkFGQkYwMDE4RDQKLToxMDU2MjAwMEFGQjEwMDE0MEUwMDAwMzkzMEYxRkZGRjAwMTAyNDAwNkMKLToxMDU2MzAwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDhGQkYwMDE4RTMKLToxMDU2NDAwMDhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNEFDNjIyMDAwNUYKLToxMDU2NTAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTI3QkRGRkU4NUYKLToxMDU2NjAwMDNDMEI2MDE4QUZCRjAwMTA4RDZGNTAwMDI0MThGRjdGRjcKLToxMDU2NzAwMDM0MEM4MDcxMDFGODcwMjQzNUNEMzgwQzI0MEEwMDMxQzcKLToxMDU2ODAwMDNDMDk4MDAwQUQ2RDUwMDAzQzA4ODAwQUFENkM1M0JDRjUKLToxMDU2OTAwMEFEMkEwMDA4MEUwMDA0OUJBRjg4MDAyQzBFMDAwNDU5QjAKLToxMDU2QTAwMDAwMDAwMDAwMEUwMDAwNDgwMDAwMDAwMDNDMDc2MDAwMDEKLToxMDU2QjAwMDhDRTUwODA4MjQwNkZGRjAzQzAzNTcwOTAwQTYyMDI0QzcKLToxMDU2QzAwMDM0NjJGMDAwMTA4MjAwNTAyNDE5MDAwMUFGODAwMDM0RDEKLToxMDU2RDAwMDBFMDAwQkJDMDAwMDAwMDAzQzA2NjAxNjhDQzQwMDAwRUQKLToxMDU2RTAwMDNDMDc2MDE0OENFNTAwQTAzQzAzRkZGRjAwODMxMDI0RkUKLToxMDU2RjAwMDNDMUY1MzUzMDAwNTFGQzIxMDVGMDAzRDM0QzU3QzAwQTIKLToxMDU3MDAwMDk0QTIwMUYyQTc4MDAwNEMxMDQwMDAwM0E3ODAwMDVDMjcKLToxMDU3MTAwMDM4NEIxRTFFQTc4QjAwNEM5NEEyMDFGODEwNDAwMDA0QzkKLToxMDU3MjAwMDhGOEQwMDM0Mzg0QzFFMUVBNzhDMDA1QzhGOEQwMDM0OEEKLToxMDU3MzAwMDExQTAwMDA0OTc4NDAwNUMyNDBFMDAyMEE3OEUwMDRDNkEKLToxMDU3NDAwMDk3ODQwMDVDMkM4RjAwODE1MUUwMDAwMTI0MDQwMDgwQ0MKLToxMDU3NTAwMDk3ODUwMDRDMkNCODA0MDE1MzAwMDAwMTI0MDUwNDAwNzcKLToxMDU3NjAwMDNDMDI2MDAwOEM0MzA0MzgyNDE5MTAzQzMwN0ZGRkZGNUEKLToxMDU3NzAwMDEzRjkwMDAzMzA4N0ZGRkY1MEUwMDAwRjI0MDYwMDUwQUMKLToxMDU3ODAwMEEzODAwMDVFOTM4ODAwNUU1MTAwMDAxMEE3ODQwMDVDMzcKLToxMDU3OTAwMEE3ODAwMDVDOTc4NTAwNUM4RkJGMDAxMEE3ODAwMDRDM0QKLToxMDU3QTAwMEE3ODAwMDU0QTc4MDAwNzIzQzAxMDgwMEFDMjUwMDgwNEYKLToxMDU3QjAwMDAzRTAwMDA4MjdCRDAwMThBMzg2MDA1RTkzODgwMDVFMDIKLToxMDU3QzAwMDU1MDBGRkY0QTc4MDAwNUNBNzg0MDA1Q0E3ODUwMDRDMEYKLToxMDU3RDAwMDhGQkYwMDEwOTc4NTAwNUNBNzgwMDA1NEE3ODAwMDcyREYKLToxMDU3RTAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4M0MKLToxMDU3RjAwMDAwMDM1MDgwMDE0NjQ4MjE4RDI4MDAwNDNDMDY2MDAwQ0IKLToxMDU4MDAwMDBBMDAwMTBGMDEwNjI4MjEwQTAwMDEwM0FGOTkwMDM0QTQKLToxMDU4MTAwMDMwODNGRkZGOEY4ODAwMkM4Rjg3MDAyODAwMDMyMTQwRjIKLToxMDU4MjAwMDNDMDU4MDAwM0MwMjAwNTAwMDgyNDgyNTNDMDY2MDAwOTgKLToxMDU4MzAwMDNDMEEwMTAwMzRBQzA0MDA4Q0NEMDhFMDAxQUE1ODI0RDUKLToxMDU4NDAwMDExNjAwMDA1MDAwMDAwMDA4Q0NGMDhFMDI0RTcwMDAxOTMKLToxMDU4NTAwMDAxRUE3MDI1QUNDRTA4RTA4RDE5MDAxMDAxODA1ODIxQjYKLToxMDU4NjAwMEFDQjkwMDM4OEQxODAwMTRBQ0I4MDAzQ0FDQTkwMDMwQkQKLToxMDU4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDU4OTAwMDNDMDM4MDAwOEM2NDAwMDAzMDgyMDAyMDEwNDBGRkZEM0IKLToxMDU4QTAwMDNDMEY2MDAwOERFRDA4RTAzQzBFMDEwMDAxQUUxODI0QjUKLToxMDU4QjAwMDE0NjBGRkUxMDAwMDAwMDBBRjg3MDAyODAzRTAwMDA4NEIKLToxMDU4QzAwMEFGOEIwMDM4OEY4NTAwMkMyNDBCRkZGMDNDMDY4MDAwNDYKLToxMDU4RDAwMDk0QTcwMDFBOENBOTAwMjQzMEVDRkZGRjAwMEMzOEMwRkMKLToxMDU4RTAwMDAwRUI1MDI0MDEyQTQwMjFBQ0M4MDAzQzhDQTQwMDI0QzkKLToxMDU4RjAwMDhDQzMwMDNDMDA4MzEwMjMxODQwMDAzMzAwMDAwMDAwREMKLToxMDU5MDAwMDhDQUQwMDIwMjVBMjAwMDEzQzBGMDA1MEFDQzIwMDM4MzUKLToxMDU5MTAwMDM1RUUwMDEwM0MwNjgwMDBBQ0NFMDAzMDAwMDAwMDAwRTgKLToxMDU5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDQ4MDAwQTcKLToxMDU5NDAwMDhDOTkwMDAwMzMzODAwMjAxMzAwRkZGRDMwRTIwMDA4N0UKLToxMDU5NTAwMDEwNDAwMDE3M0MwOTgwMDA4Qzg4MDQwOEFDQTgwMDEwOTcKLToxMDU5NjAwMDhDODMwNDBDQUNBMzAwMTQzQzE5MDAyMDNDMTg4MDAwNkMKLToxMDU5NzAwMEFGMTkwMDMwOTRBRTAwMTg5NEFGMDAxQzAxQ0YzMDIxNTUKLToxMDU5ODAwMEE0QTYwMDE4OTRBRDAwMUEyNUE3MDAwMUE0QTcwMDFBMjgKLToxMDU5OTAwMDk0QUIwMDFBOTRBQzAwMUUxMThCMDAwMzAwMDAwMDAwQjEKLToxMDU5QTAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0QTAwMDFBQzMKLToxMDU5QjAwMDhEMkEwNDAwQUNBQTAwMTA4RDI0MDQwNEFDQTQwMDE0QTkKLToxMDU5QzAwMDBBMDAwMUFBM0MxOTAwMjA4Q0EyMDAyMDBBMDAwMTkyQzIKLToxMDU5RDAwMDNDMEYwMDUwMEEwMDAxODAwMDAwMDAwMDI3QkRGRkU4RDYKLToxMDU5RTAwMEFGQkYwMDEwMEUwMDAxQzQwMDAwMDAwMDhGODkwMDJDMjIKLToxMDU5RjAwMDhGQkYwMDEwM0MwMzgwMDBBNTIwMDAwQTk1MjgwMDBBRjQKLToxMDVBMDAwMDk1MjcwMDA0MjdCRDAwMTgzMTA1RkZGRjMwRTYwMDBGODEKLToxMDVBMTAwMDAwMDYxNTAwMDBBMjIwMjUwM0UwMDAwOEFDNjQwMDgwMDkKLToxMDVBMjAwMDNDMDUwODAwOENBNTAwMjA4RjgzMDAwNDI3QkRGRkU4RkIKLToxMDVBMzAwMEFGQjAwMDEwQUZCRjAwMTQxMEEzMDAxMDAwMDA4MDIxMTEKLToxMDVBNDAwMDI0MDQwMDAxMDIwNDMwMDQwMEE2MjAyNDAwQzMxMDI0MTIKLToxMDVBNTAwMDUwNDQwMDA2MjYxMDAwMDEwMDEwMTg4MDI3ODdGRDlDODYKLToxMDVBNjAwMDE0ODAwMDBBMDA2NzE4MjEyNjEwMDAwMTJFMDkwMDAyODgKLToxMDVBNzAwMDU1MjBGRkYzOEY4MzAwMDRBRjg1MDAwNDhGQkYwMDE0MEYKLToxMDVBODAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhDNjgwMDAwRUMKLToxMDVBOTAwMDNDMDU4MDAwQUNBODAwMjQwRTAwMDFDNjI2MTAwMDAxQzEKLToxMDVBQTAwMDNDMDUwODAwOENBNTAwMjAwQTAwMDFFQjJFMDkwMDAyMkQKLToxMDVBQjAwMDI0MDUwMDAxMDA4NTE4MDQzQzA0MDgwMDhDODQwMDIwQTMKLToxMDVBQzAwMDI3QkRGRkM4QUZCRjAwMzQwMDgzMTAyNEFGQkUwMDMwMzUKLToxMDVBRDAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwOUMKLToxMDVBRTAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUxQUEKLToxMDVBRjAwMEFGQjAwMDEwOEY4NDAwMkM5NDg3MDAwNjk0ODgwMDBBQjEKLToxMDVCMDAwMDAwRTgzMDIzMzBENUZGRkYxMkEwMDA0QjhGQkYwMDM0RDgKLToxMDVCMTAwMDk0OEIwMDE4OTQ4QzAwMEEwMTZDNTAyMzMxNDJGRkZGRDMKLToxMDVCMjAwMDAyQTI0ODJCMTUyMDAwMDIwMkEwMjAyMTAwNDAyMDIxQzMKLToxMDVCMzAwMDJDOEYwMDA1MTVFMDAwMDIwMDgwOTgyMTI0MTMwMDA0M0EKLToxMDVCNDAwMDBFMDAwMTUzMDI2MDIwMjE4Rjg3MDAyQzAyNjA5MDIxRkIKLToxMDVCNTAwMEFGODAwMDMwOTRGNDAwMEEwMjYwODAyMTEyNjAwMDRFOTEKLToxMDVCNjAwMDMyOTFGRkZGM0MxNjcwMDAzQzE0NDAwMDNDMUUyMDAwQTgKLToxMDVCNzAwMDNDMTc2MDAwOEY5OTAwMzg4RjM4MDAwMDAzMTYxODI0RjYKLToxMDVCODAwMDEwNzQwMDRGMDI4M0Y4MkIxN0UwMDAzNjAwMDAwMDAwNkQKLToxMDVCOTAwMDEwN0UwMDQ3OEY4NjAwMzAxNEMwMDAzQTI0MDMwMDAxQjUKLToxMDVCQTAwMDAyMDMxMDIzMDIyMzIwMjEzMDUwRkZGRjE2MDBGRkYxRDMKLToxMDVCQjAwMDMwOTFGRkZGOEY4NzAwMkMzQzExMDAyMDNDMTA4MDAwQUIKLToxMDVCQzAwMEFFMTEwMDMwOTRFQjAwMEEzQzE3ODAwMDAyNEI1MDIxQ0MKLToxMDVCRDAwMEE0RUEwMDBBOTRFOTAwMEE5NEU4MDAwNDMxMjNGRkZGRDQKLToxMDVCRTAwMDMxMDYwMDBGMDAwNjJEMDAwMDY1RjAyNUFFRkUwMDgwOTYKLToxMDVCRjAwMDk0RjMwMDBBOTRGNjAwMTgxMkQzMDAzNjAwMTIyMTQwRTQKLToxMDVDMDAwMDhDRkYwMDE0OENGNDAwMTAwM0U0NjgyMTAwMDBDMDIxMTQKLToxMDVDMTAwMDAxQTQ3ODJCMDI5ODcwMjEwMUNGNjAyMUFDRUQwMDE0MTMKLToxMDVDMjAwMEFDRUMwMDEwMDJCMjM4MjMzMEY1RkZGRjE2QTBGRkI4MkQKLToxMDVDMzAwMDhGODQwMDJDOEZCRjAwMzQ4RkJFMDAzMDhGQjcwMDJDQjQKLToxMDVDNDAwMDhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDQkUKLToxMDVDNTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NUQKLToxMDVDNjAwMDI3QkQwMDM4MTQ3N0ZGQ0M4Rjg2MDAzMDBFMDAwRDhCRDcKLToxMDVDNzAwMDAyMDAyMDIxMDA0MDE4MjE4Rjg2MDAzMDEwQzBGRkM5OEIKLToxMDVDODAwMDAyMDMxMDIzMDI3MDcwMjM4Rjg3MDAyQzAxQzM2ODIxNDgKLToxMDVDOTAwMDBBMDAwMjc2MzFCMkZGRkY4Rjg2MDAzMDE0QzBGRkM5QzAKLToxMDVDQTAwMDNDMTEwMDIwM0MxMDgwMDAwQTAwMDI0MEFFMTEwMDMwODAKLToxMDVDQjAwMDBFMDAwM0M0MDIwMDIwMjEwQTAwMDI2RDAwNDAxODIxREEKLToxMDVDQzAwMDAyMDAyMDIxMEUwMDA3REIwMjIwMjgyMTBBMDAwMjZEQkQKLToxMDVDRDAwMDAwNDAxODIxMEUwMDAxODAwMDAwMDAwMDBBMDAwMjU5NTcKLToxMDVDRTAwMDAyQjIzODIzMjdCREZGRDhBRkI0MDAyMEFGQjMwMDFDRTkKLToxMDVDRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDI0QjYKLToxMDVEMDAwMDBFMDAwMEU2MjQxMzAwMDEzQzAyODAwODNDMDMyMDAwNDIKLToxMDVEMTAwMDNDMDEwODAwQUMyMDAwNzAzNDU0MDA4MDM0NzIwMDAzNTEKLToxMDVEMjAwMDNDMTA4MDAwMjQxMUZGODAwRTAwMDFENzAwMDAwMDAwMEQKLToxMDVEMzAwMDhFMDYwMDAwMzhDNTAwMDEzMEE0MDAwMTE0ODBGRkZBNkYKLToxMDVENDAwMDAwMDAwMDAwOEUwNzAxMDAyNDAzMEMwMDEwRTMwMDA5OEUKLToxMDVENTAwMDNDMDU4MDAwOEUwOTAxMDAyRDI4MzA4MDU1MDAwMDEwODAKLToxMDVENjAwMDNDMDQ4MDAwOEUwQjAxMDAyRDZBMzE4MTExNDAwMDBDMzMKLToxMDVENzAwMDNDMDQ4MDAwOENBQzAxMDAxMTgzMDAwNDAwMDAyMDIxNTEKLToxMDVEODAwMDhDQUUwMTAwMjVDREZGODEzMUE0MDBGRjhFMEYwMTAwRjQKLToxMDVEOTAwMDBFMDAwMUZCQUUwRjAwMjQwQTAwMDJDMTNDMDQ4MDAwOEIKLToxMDVEQTAwMDhDOUYwMTAwMjQxODAwMjBBQzlGMDAyMDkyOTkwMDAwRDUKLToxMDVEQjAwMDMzMjMwMEZGMTA3ODAwMUYyNDAyMDA1MDEwNjIwMDIyREQKLToxMDVEQzAwMDAwMDAwMDAwM0MwNDgwMDA4QzgzMDEwMDE0NjAwMDAzOEMKLToxMDVERDAwMDAwMDAwMDAwNTY2MDAwMTQzQzA0NDAwMDhDODIwMTAwNkEKLToxMDVERTAwMDhDOTkwMTAwMDAwMDk4MjEwMDUxRjgyNDAwMUY3OTQwOEYKLToxMDVERjAwMDMzMzgwMDdGMDFGODcwMjUwMUQyNjgyNUFDOEQwODMwNUEKLToxMDVFMDAwMDhDOEMwMTAwOEM4OTAxMDAyNThCMDEwMDAxNzE1MDI0Q0MKLToxMDVFMTAwMDAwMEEzOTQwMzEyODAwN0YwMEU4MzAyNTAwRDIyODI1Q0IKLToxMDVFMjAwMEFDODUwODMwM0MwNDQwMDBBRTA0MDEzODBBMDAwMjk5RjkKLToxMDVFMzAwMDAwMDAwMDAwOEM4NTAxMDAwRTAwMDc4RDI0MDQwMDgwMDYKLToxMDVFNDAwMDBBMDAwMkMxM0MwNDgwMDA4Qzg0MDEwMDBFMDAxM0VBQTkKLToxMDVFNTAwMDAwMDAwMDAwMEEwMDAyQzEzQzA0ODAwMDAwQTQxMDJCRDYKLToxMDVFNjAwMDI0MDMwMDAxMTA0MDAwMDkwMDAwMzAyMTAwMDUyODQwRjMKLToxMDVFNzAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDQjIKLToxMDVFODAwMDAwMDUyODQwNTA2MDAwMEEwMDA0MTgyQjAwODUzODJCQkMKLToxMDVFOTAwMDU0RTAwMDA0MDAwMzE4NDIwMEMzMzAyNTAwODUyMDIzOEQKLToxMDVFQTAwMDAwMDMxODQyMTQ2MEZGRjkwMDA1Mjg0MjAwMDQxODJCNzMKLToxMDVFQjAwMDAzRTAwMDA4MDBDMzEwMjEzMDg0RkZGRjMwQzYwMEZGNUMKLToxMDVFQzAwMDNDMDc4MDAwOENFMjAxQjgwNDQwRkZGRTAwMDY0QzAwNTUKLToxMDVFRDAwMDAxMjQzMDI1M0MwODIwMDAwMEM4MjAyNTNDMDMxMDAwODgKLToxMDVFRTAwMEFDRTAwMTgwQUNFNTAxODRBQ0U0MDE4ODAzRTAwMDA4OEIKLToxMDVFRjAwMEFDRTMwMUI4M0MwNjYwMDA4Q0M1MjAxQzI0MDJGRkYwMTYKLToxMDVGMDAwMDMwODMwMjAwMzA4NjAxMDAxMDYwMDAwRTAwQTIyODI0QjkKLToxMDVGMTAwMDM0QTUwMDAxMzA4NzMwMDAxMEUwMDAwNTMwODMwQzAwMEMKLToxMDVGMjAwMDM0QTUwMDA0M0MwNDYwMDAwM0UwMDAwOEFDODUyMDFDOUMKLToxMDVGMzAwMDEwNjBGRkZEM0MwNDYwMDAzNEE1MDAwODAzRTAwMDA4ODkKLToxMDVGNDAwMEFDODUyMDFDNTRDMEZGRjMzNEE1MDAwMjBBMDAwMzE1RTEKLToxMDVGNTAwMDMwODczMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0OUUKLToxMDVGNjAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAxMTAwQTA4MDIxODAKLToxMDVGNzAwMDhGODMwMDM4MEUwMDAzMEM4QzY0MDAxODhGODIwMDM4NjkKLToxMDVGODAwMDAwMDAyMDIxMjQwNjAwMDE4QzQ1MDAwQzBFMDAwMkZEQkIKLToxMDVGOTAwMDAwMDAwMDAwMTYwMDAwMDIyNDAyMDAwMzAwMDAxMDIxOEYKLToxMDVGQTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4NTkKLToxMDVGQjAwMDhDRTgyMDFDMjQwOUZGRjAwMTA5MjgyNEFDRTUyMDFDRjIKLToxMDVGQzAwMDhGODcwMDM4MEEwMDAzMzI4Q0U1MDAwQzNDMDI2MDBFMUIKLToxMDVGRDAwMDAwODA0MDIxMzQ0NjAxMDAyNDA5MDAxODAwMDAwMDAwMjAKLToxMDVGRTAwMDAwMDAwMDAwMDAwMDAwMDAzQzBBMDA1MDNDMDM4MDAwNUMKLToxMDVGRjAwMDM1NDcwMjAwQUM2ODAwMzgzNDY0MDQwMEFDNjUwMDNDRUUKLToxMDYwMDAwMEFDNjcwMDMwOEM2QzAwMDAzMThCMDAyMDExNjBGRkZEMEMKLToxMDYwMTAwMDI0MDdGRkZGMjQwMzAwN0Y4QzhEMDAwMDI0NjNGRkZGMTMKLToxMDYwMjAwMDI0ODQwMDA0QUNDRDAwMDAxNDY3RkZGQjI0QzYwMDA0RTgKLToxMDYwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0QTQwMjAwOTYKLToxMDYwNDAwMDAwODUyODJCM0MwMzAwMjAzQzBFODAwMDI1MjlGRkZGMDMKLToxMDYwNTAwMDAxMDU0MDIxQURDMzAwMzAxNTIwRkZFMDAwODAyODIxNUMKLToxMDYwNjAwMDAzRTAwMDA4MDAwMDAwMDA4RjgyMDAzODI3QkRGRkQ4NDEKLToxMDYwNzAwMEFGQjMwMDFDQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0MjcKLToxMDYwODAwMEFGQjAwMDEwOTQ0NjAwMDIwMDgwOTgyMThDNTIwMDE4OTYKLToxMDYwOTAwMDJDQzMwMDgxOEM0ODAwMDQ4QzQ3MDAwODhDNTEwMDBDRjQKLToxMDYwQTAwMDhDNDkwMDEwMTA2MDAwMDc4QzRBMDAxNDJDQzQwMDA0QjYKLToxMDYwQjAwMDE0ODAwMDEzMzBFQjAwMDczMEM1MDAwMzEwQTAwMDEwNUYKLToxMDYwQzAwMDAwMDAwMDAwMjQxMDAwOEIwMjAwMjAyMTAyMjAyODIxNjMKLToxMDYwRDAwMDBFMDAwMkZEMjQwNjAwMDMxNjYwMDAwMjI0MDIwMDAzRTUKLToxMDYwRTAwMDAwMDAxMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NUEKLToxMDYwRjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MDYKLToxMDYxMDAwMDE1NjBGRkYxMjQxMDAwOEIzQzBDODAwMDNDMDMwMDIwNDQKLToxMDYxMTAwMDI0MUYwMDAxQUQ4MzAwMzBBRjlGMDAzMDAwMDAwMDAwNUQKLToxMDYxMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDE5RkZGMDI0RDgwMDBGMzgKLToxMDYxMzAwMDAzMTk3ODI0M0MxMDAwRDBBRDg4MDAzODAxRjA3MDI1OTgKLToxMDYxNDAwMDI0Q0QwMDAzM0MwODYwMEVBRDg3MDAzQzM1ODUwNDAwN0IKLToxMDYxNTAwMEFEOEUwMDMwMDAwRDM4ODIzNTA0MDAzQzNDMDM4MDAwRDkKLToxMDYxNjAwMDhDNkIwMDAwMzE2MjAwMjAxMDQwRkZGRDAwMDAwMDAwMzkKLToxMDYxNzAwMDEwRTAwMDA4MjRFM0ZGRkYyNDA3RkZGRjhDQTgwMDAwQzUKLToxMDYxODAwMDI0NjNGRkZGMjRBNTAwMDRBQzg4MDAwMDE0NjdGRkZCMTQKLToxMDYxOTAwMDI0ODQwMDA0M0MwNDYwMEVBQzg2MDAzODAwMDAwMDAwM0IKLToxMDYxQTAwMDAwMDAwMDAwMDAwMDAwMDAzQzA3MDAyMDNDMDY4MDAwQ0EKLToxMDYxQjAwMDAxMjAyMDIxMDE0MDI4MjFBQ0M3MDAzMDBFMDAwMzQyRkQKLToxMDYxQzAwMDAwMDA4MDIxMEUwMDAzMEMwMjQwMjAyMTBBMDAwMzgyRkYKLToxMDYxRDAwMDAyMDAyMDIxMjdCREZGRTBBRkIyMDAxODMwOTJGRkZGODAKLToxMDYxRTAwMEFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDE2NDAwMDBEREYKLToxMDYxRjAwMDAwMDA4ODIxMEEwMDAzRjEwMjIwMTAyMTI0MDUwMDAzNzkKLToxMDYyMDAwMDUwODUwMDI3OENFNTAwMEMwMDAwMDAwRDI2MkMwMDAxQjUKLToxMDYyMTAwMDMxOTFGRkZGMjRFQjAwMjAwMjMyNTAyQjExNDAwMDE5NzYKLToxMDYyMjAwMEFGOEIwMDM4OEY4MjAwMzAxNDQwMDAxNjhGODcwMDM4MDMKLToxMDYyMzAwMDNDMDY3MDAwM0MwMzIwMDA4Q0U1MDAwMDAwQTYyMDI0RjIKLToxMDYyNDAwMDE0ODMwMDEwOEY4NDAwNDAwMDA1NDQwMjNDMDk4MDAwNDQKLToxMDYyNTAwMDAwQTk4MDI0MTQ4MEZGRTkzMTA2MDBGRjJDQ0EwMDBCM0UKLToxMDYyNjAwMDExNDBGRkVCMjYyQzAwMDEwMDA2Njg4MDNDMEUwODAwNjAKLToxMDYyNzAwMDI1Q0U1MUM4MDFBRTYwMjE4RDhCMDAwMDAxNjAwMDA4NjEKLToxMDYyODAwMDAwMDAwMDAwMDIyMDEwMjE4RkJGMDAxQzhGQjIwMDE4RjgKLToxMDYyOTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNkMKLToxMDYyQTAwMDBFMDAwMkZEMjQwNDAwODQxNjAwRkZEODhGODcwMDM4RkEKLToxMDYyQjAwMDBBMDAwM0QyQUY4MDAwNDAwMjAwMjgyMTBFMDAwMzI0MTAKLToxMDYyQzAwMDI0MDQwMDAxOEY4NzAwMzgwQTAwMDNEMkFGODIwMDQwMDcKLToxMDYyRDAwMDAyMDAyODIxMEUwMDAzMjQwMDAwMjAyMTBBMDAwNDAxRUUKLToxMDYyRTAwMDhGODcwMDM4MEUwMDAzNjkwMjAwMjAyMThGODcwMDM4NTUKLToxMDYyRjAwMDBBMDAwM0QyQUY4MjAwNDAzMEFGRkZGRjAwMEYxOUMwODkKLToxMDYzMDAwMDNDMDQ4MDAwOEM5MDAxQjgwNjAwRkZGRTNDMTkyMDA0N0MKLToxMDYzMTAwMDNDMTgxMDAwQUM4MzAxODBBQzgwMDE4NEFDOTkwMTg4RUEKLToxMDYzMjAwMEFDOTgwMUI4MEEwMDAzRDMyNjJDMDAwMTkwRTIwMDAyQzkKLToxMDYzMzAwMDkwRkYwMDAzMDAwMDIwMjEwMDAyM0EwMDAwRkYyODI1MDIKLToxMDYzNDAwMDI0MDYwMDA4MEUwMDAyRkQwMDAwMDAwMDE2MDBGRkREMUMKLToxMDYzNTAwMDI0MDIwMDAzOEY4NzAwMzgwMDAwMTAyMTBBMDAwM0QyQjYKLToxMDYzNjAwMEFGODIwMDQwOTBFNTAwMDIwMDAwMjAyMTBBMDAwNDIwRDYKLToxMDYzNzAwMDI0MDYwMDA5OTRFNTAwMDQ5MEU5MDAwMzkwRTMwMDAyN0MKLToxMDYzODAwMDAwMDUzNDAwMDAwOTQyMDAwMEM4MjAyNTAwODMyODI1QUMKLToxMDYzOTAwMDI0MDYwMDBBMEEwMDA0MjAwMDAwMjAyMTkwRTUwMDAyRTMKLToxMDYzQTAwMDAwMDAyMDIxMEEwMDA0MjAyNDA2MDAwQjAwMDQ0OUMyM0EKLToxMDYzQjAwMDMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDAwMDgyMDQwOTcKLToxMDYzQzAwMDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQzI0RUFGRkUwRDYKLToxMDYzRDAwMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRjAwODAxMDIxQjYKLToxMDYzRTAwMDMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDI0MEEwMDAxNUMKLToxMDYzRjAwMDAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDAwOEIzMDIxODcKLToxMDY0MDAwMDExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDAxQzUzODI1NzUKLToxMDY0MTAwMDAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMDAzMDc3ODI0MTQKLToxMDY0MjAwMDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMEFGQjEwMDE0Q0YKLToxMDY0MzAwMEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMDhDRTQwODA4NDQKLToxMDY0NDAwMDM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMDI0MDUwMUMwRUMKLToxMDY0NTAwMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjI0MTAwMDAxNzAKLToxMDY0NjAwMDhDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDAwMDgzODJCOTAKLToxMDY0NzAwMDAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNDI0MEMxNjgwNEQKLToxMDY0ODAwMDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEUzNEFENkMwMDJDQjcKLToxMDY0OTAwMDEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMTEyMDUwMDEwQjAKLToxMDY0QTAwMDNDMDIzRDZDMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwMTIKLToxMDY0QjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwQzMKLToxMDY0QzAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwMDIKLToxMDY0RDAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwNUMKLToxMDY0RTAwMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwODkKLToxMDY0RjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwODMKLToxMDY1MDAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwQzEKLToxMDY1MTAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwMUIKLToxMDY1MjAwMDBBMDAwNDNBMjQwNTAwMDEwQTAwMDQzQTAwMDAyODIxNjgKLToxMDY1MzAwMDI0MDIwNDAwQTc4MjAwMTBBNzgwMDAwODAwMDAyMDIxODgKLToxMDY1NDAwMDNDMDYwODAwMjRDNjU0QjAyNDA1RkZGRjI0ODkwMDAxM0UKLToxMDY1NTAwMDAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMTJDODcwMDIwMTEKLToxMDY1NjAwMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMEE3ODQwMDEyQzQKLToxMDY1NzAwMEE3ODAwMDBBMDAwMDIwMjEzQzA2MDgwMDI0QzY1NTMwRjAKLToxMDY1ODAwMDI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDMxQTRGRkZGN0IKLToxMDY1OTAwMDAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQUFENjUwMDAwQzUKLToxMDY1QTAwMEE3ODAwMDE0QTc4MDAwMENBNzgwMDAwRTAwMDAyMDIxMDcKLToxMDY1QjAwMDNDMDYwODAwMjRDNjU1QjAyNDA1RkZGRjI0OTkwMDAxQkQKLToxMDY1QzAwMDAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTJDOEUwMDA0RDIKLToxMDY1RDAwMDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDhDQTczRDAwNEEKLToxMDY1RTAwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDAzRTAwMDA4NTgKLToxMDY1RjAwMEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjI0QzVGRkZGMDEKLToxMDY2MDAwMDAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRjAwMDIzOEMwNzgKLToxMDY2MTAwMEE3ODQwMDFDM0MwMTA4MDBBQzI3MDAzMEFGODAwMDE4QTQKLToxMDY2MjAwMDAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTI0ODkwMDAxRTEKLToxMDY2MzAwMDAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMTExMDAwMDAzMTcKLToxMDY2NDAwMDJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMTAwQzAyODIxQkIKLToxMDY2NTAwMEFGODYwMDE4MTBDMDAwMURBNzg2MDAxNjI0Q0FGRkZGRDEKLToxMDY2NjAwMDAwMEExMTQyM0MwODA4MDAyNTA4NTVCMDEwNDAwMDBBRjUKLToxMDY2NzAwMDAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjI0OEUwMDAxNkMKLToxMDY2ODAwMDAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMTAwODY1ODJCRjgKLToxMDY2OTAwMDE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRjUwNDAwMDA4Q0YKLToxMDY2QTAwMDAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNDAwMDQxMDgwNkIKLToxMDY2QjAwMDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwOEFERjgwMDAwMEMKLToxMDY2QzAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDAzRTAwMDA4N0UKLToxMDY2RDAwMDAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjMwQTgwMDFGRkMKLToxMDY2RTAwMDAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0MjAwMDA1MDIxQjIKLToxMDY2RjAwMDEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTI1MTgwMDAxMTEKLToxMDY3MDAwMDAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjM5MEUwMDIwRjMKLToxMDY3MTAwMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTEwNjAwMDBEMTEKLToxMDY3MjAwMDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMTAxMDAxODIxOTgKLToxMDY3MzAwMDEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMDAwOEExODI1QjEKLToxMDY3NDAwMEFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMTAwMDA1MDIxRjUKLToxMDY3NTAwMDMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRjAwQzkxMDJCMTUKLToxMDY3NjAwMDEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODAwMDAwMDAwQ0EKLToxMDY3NzAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDUyMEFDNjgwMDAwOTYKLToxMDY3ODAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkFGQjAwMDEwMDgKLToxMDY3OTAwMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMTM0MTBGRkZGQUYKLToxMDY3QTAwMDAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTI0MTgwMDAxMTAKLToxMDY3QjAwMDI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTAwMDJGOTQzMzEKLToxMDY3QzAwMDAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNDExMDAwMDE3QjgKLToxMDY3RDAwMDAwMEMxODgwMDA2NDEwMjExMEUwMDAwNThDNEIwMDAwQjQKLToxMDY3RTAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNDAwMDAzODIxQ0QKLToxMDY3RjAwMDE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNjMxNjlGRkZGM0YKLToxMDY4MDAwMDI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzAxRTAxMDIxNTkKLToxMDY4MTAwMDI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTAwMDk3MDJCNjAKLToxMDY4MjAwMDAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDE1NDYwMDA1NTIKLToxMDY4MzAwMDM0MDJGRkZGMDIwMDI4MjEwRTAwMDUwNDAwMDAzODIxNjkKLToxMDY4NDAwMDAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4NzkKLToxMDY4NTAwMDI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMTAwMEIxQzAyNDEKLToxMDY4NjAwMDI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTMwNkUwMDBGNEMKLToxMDY4NzAwMDI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRjMwNkUwMDBGM0EKLToxMDY4ODAwMDE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNDAwMDMxOTAyMjUKLToxMDY4OTAwMDMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTM4NjkwMDAxNkYKLToxMDY4QTAwMDI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjM4NjkwMDAxMDkKLToxMDY4QjAwMDMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRjI1MEEwMDAxQUMKLToxMDY4QzAwMDMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MDAxQTM0MDIxNjMKLToxMDY4RDAwMDI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRjI0NkUwMDAxMDkKLToxMDY4RTAwMDMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTJEMUYwMDIwNTMKLToxMDY4RjAwMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTBBMDAwNTk3QzAKLToxMDY5MDAwMDI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMTI1MDkwMDAxQTcKLToxMDY5MTAwMDMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjI1OEIwMDAxOTUKLToxMDY5MjAwMDI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNDI1MDkwMDAxRUQKLToxMDY5MzAwMDE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjEwRUUwMDBDMTgKLToxMDY5NDAwMDI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMTM0MTBGRkZGNzUKLToxMDY5NTAwMDMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjI1NDMwMDAxQkEKLToxMDY5NjAwMDI1OEIwMDAxMDE0NjQ4MjYwQTAwMDU1MTMxNkNGRkZGQzYKLToxMDY5NzAwMDAwMDAzODIxMDAwMDUwMjEwQTAwMDVBMzM0MTBGRkZGNTkKLToxMDY5ODAwMDI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkFGQjEwMDE0NEIKLToxMDY5OTAwMDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MEFGQjMwMDFDMzUKLToxMDY5QTAwMDAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODMwQTVGRkZGOUUKLToxMDY5QjAwMDAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMUFGQkYwMDIwRTAKLToxMDY5QzAwMDBFMDAwNTJGMzIwNzAwMUYwMjIyODgyMTM0MDNGRkZGMkIKLToxMDY5RDAwMDAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTAwMDAzODIxREQKLToxMDY5RTAwMDEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMThGQkYwMDIwMjkKLToxMDY5RjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0QKLToxMDZBMDAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDUyRjAwMDAwMDAwNEQKLToxMDZBMTAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDhGQjMwMDFDNkUKLToxMDZBMjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4N0YKLToxMDZBMzAwMDI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMEFDNjAzRDA4MzIKLToxMDZBNDAwMDEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNjAzRTAwMDA4MDEKLToxMDZBNTAwMEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDMwOTAwMEZGRjYKLToxMDZBNjAwMDJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwOEFGQjEwMDE0OUUKLToxMDZBNzAwMDAwMTAzMDgwM0MwMzA4MDAyNDYzNTFGNDAwQzMyODIxMzcKLToxMDZBODAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMDAyMDIxMEQKLToxMDZBOTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxM0MKLToxMDZBQTAwMDAzRTAwMDA4MjdCRDAwMjA5NzkxMDAxNjE2MjAwMDUxMzIKLToxMDZBQjAwMDAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzAKLToxMDZBQzAwMDAwMDAwMDAwOTc4RDAwMTIxNUEwMDAzMTAwMDAyMDIxNjkKLToxMDZBRDAwMDBBMDAwNjBBMjQwMjAwMDg5Nzg3MDAxMDE0RTAwMDFBMzIKLToxMDZBRTAwMDAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMTEwODBGRkU5MkQKLToxMDZBRjAwMDhGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTAwQTY1ODJCODIKLToxMDZCMDAwMDExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDAwMDU2OUMwREMKLToxMDZCMTAwMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwODI0MDIwMDFGNjMKLToxMDZCMjAwMDI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MjkKLToxMDZCMzAwMDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTAwMDU2OUMwNTMKLToxMDZCNDAwMDBBMDAwNUY0OEZCRjAwMTg5Nzg3MDAwODNDMDQwODAwNkUKLToxMDZCNTAwMDI0ODQ1NEIwMjQwNTA0MDAwRTAwMDVBRjI0MDYwMDAxNkYKLToxMDZCNjAwMDk3OEIwMDEwMjQ0NDAwMDEzMDhBRkZGRjI1NjlGRkZGNDYKLToxMDZCNzAwMDJENDgwNDAwMDA0MDI4MjExNTAwMDA0MEE3ODkwMDEwN0UKLToxMDZCODAwMDI0QUMzODAwMDAwQzE5QzAwQTAwMDYwOEE3ODAwMDA4RDEKLToxMDZCOTAwMDk3ODcwMDBBM0MwNDA4MDAyNDg0NTUzMDI0MDUwNDAwMkIKLToxMDZCQTAwMDBFMDAwNUFGMjQwNjAwMDE5Nzk5MDAxMjI0NDQwMDAxNEQKLToxMDZCQjAwMDMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDAwNDA4ODIxOTEKLToxMDZCQzAwMDE1QzAwMDJDQTc4RjAwMTJBNzgwMDAwQTNBMDIwMDAzMEMKLToxMDZCRDAwMDI2MjQwMTAwMzA4NEZGRkYwRTAwMDVEQzJDNDUwMDAxNTcKLToxMDZCRTAwMDAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMDBBMDAwNjBBQjkKLToxMDZCRjAwMDI0MDIwMDA4OTc4NTAwMUE5Nzg3MDAwRTNDMDQwODAwQkQKLToxMDZDMDAwMDI0ODQ1NUIwMEUwMDA1QUYyNDA2MDAwMTk3ODcwMDE2QjYKLToxMDZDMTAwMDhGODkwMDE4MjQ0NTAwMDEzMEE4RkZGRjI0RTNGRkZGRkYKLToxMDZDMjAwMDAxMDkzMDJCMDA0MDgwMjExNEMwMDAxOEE3ODMwMDE2RjIKLToxMDZDMzAwMEE3ODAwMDBFOTc4NTAwMUMwRTAwMEUxRTAyMDAyMDIxNkEKLToxMDZDNDAwMDI0NEEwNTAwMzE0NEZGRkYwRTAwMDVEQzI0MDUwMDAxNDUKLToxMDZDNTAwMDNDMDUwODAwOTRBNTAwMzIwRTAwMEUxRTAyMDAyMDIxMDMKLToxMDZDNjAwMDI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzUKLToxMDZDNzAwMDAwMDUyMUMwMEEwMDA2NDJBNzg0MDAwQTI0QUMzODAwOUYKLToxMDZDODAwMDAwMEMxOUMwMEEwMDA2MDhBNzg0MDAwODBBMDAwNjVDNjgKLToxMDZDOTAwMEE3ODUwMDBFMzA4NDAwRkYyN0JERkZFODJDODIwMDA2ODgKLToxMDZDQTAwMEFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTAwQTAzODIxOTUKLToxMDZDQjAwMDAwMDQ0MDgwM0MwMzA4MDAyNDYzNTIwQzAxMDMyODIxOTcKLToxMDZDQzAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDI0Q0MwMDdGOUQKLToxMDZDRDAwMDAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRjI1NDdDNDAwQTQKLToxMDZDRTAwMDMwRTVGRkZGMjc4NDAwMDgwMjAwMzAyMTBFMDAwNTA0NzQKLToxMDZDRjAwMDI0MDcwMDAxOTc4NjAwMTQwMjA2MjAyMUE3ODQwMDE0QUYKLToxMDZEMDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4RUIKLToxMDZEMTAwMDNDMDUwODAwOENBNTAwMzAwMDA3NzlDMjBFMDAwMkU2OTEKLToxMDZEMjAwMDI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDI0ODQ1NUIwMTMKLToxMDZEMzAwMDI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTk3OEUwMDE2QUEKLToxMDZENDAwMDhGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMTI3QkQwMDE4QTMKLToxMDZENTAwMDAzRTAwMDA4QTc4RDAwMTYwMDA3QzlDMjI3MzhGRjAwMEUKLToxMDZENjAwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDI0ODQ1NTMwM0QKLToxMDZENzAwMDAyMDAyODIxMjQwNjAwMDEwRTAwMDUwNDI0MDcwMDAxNUEKLToxMDZEODAwMDk3OEQwMDEyMjYwRTAxMDAwMDBFODQwMDI1QUMwMDAxMzQKLToxMDZEOTAwMDNDMEI2MDAwQTc4QzAwMTJBRDYwM0QwODM2MDQwMDA2NzUKLToxMDZEQTAwMDAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDMwNUYwMDA2QUIKLToxMDZEQjAwMDE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMDMxMjYwMEZGN0IKLToxMDZEQzAwMDAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDE0QTBGRkY2ODcKLToxMDZERDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MUIKLToxMDZERTAwMDAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTI0MDcwMDAxRkMKLToxMDZERjAwMDNDMDQwODAwMjQ4NDU0QjAwRTAwMDUwNDMxMjVGRkZGMzQKLToxMDZFMDAwMDk3ODcwMDEwOEZCRjAwMTQ4RkIwMDAxMDI0RTYwMDAxOTgKLToxMDZFMTAwMDI3QkQwMDE4MDNFMDAwMDhBNzg2MDAxMDMwODRGRkZGOUMKLToxMDZFMjAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFODUKLToxMDZFMzAwMDNDMDg0MDgwMDA4ODM4MjUzQzAzMTAwMEFDQzAwMTgwMkQKLToxMDZFNDAwMEFDQzUwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4M0QKLToxMDZFNTAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFNzYKLToxMDZFNjAwMDNDMDg0MDM4OENBNzAwMDAwMDg4MjgyNTNDMDMxMDAwMEYKLToxMDZFNzAwMEFDQzcwMTgwQUNDNTAxODgwM0UwMDAwOEFDQzMwMUI4MTEKLToxMDZFODAwMDhGODMwMDU4OEY4NjAwNTAxMDY2MDAwQjAwODA0MDIxRDEKLToxMDZFOTAwMDNDMDcwODAwMjRFNzU1QzAwMDAzMjhDMDAwQTcxMDIxQzQKLToxMDZFQTAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNEIKLToxMDZFQjAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMTgKLToxMDZFQzAwMDNDMDcwODAwMjRFNzU1QzQwMEE3MzAyMTAzRTAwMDA4NzAKLToxMDZFRDAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1MzcKLToxMDZFRTAwMDNDMDM4MDAwQUM2NDAwMjA4QzY1MDAyMDA0QTBGRkZFMDEKLToxMDZFRjAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwRTkKLToxMDZGMDAwMDM0NDMwMDAxMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwNDYKLToxMDZGMTAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwMEMKLToxMDZGMjAwMEFGQkYwMDE4MTIyMDAwMTIwMEEwODAyMThDQTUwMDAwMjUKLToxMDZGMzAwMDE0QTAwMDExMjQwNDAwMDIzQzA2ODAwMDhDQzIwMUI4OTkKLToxMDZGNDAwMDA0NDBGRkZFM0MwNzQwMDAwMjI3MjAyNThGQkYwMDE4QTkKLToxMDZGNTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwM0IKLToxMDZGNjAwMEFDQzUwMTgwQUNDNDAxODgwM0UwMDAwOEFDQzMwMUI4MjMKLToxMDZGNzAwMDBBMDAwNzFEOENBNTAwMDAwRTAwMDY3NDI0MDYwMjAwRkUKLToxMDZGODAwMDAwMDAyODIxMEEwMDA3MURBRTAwMDAwMDMwODdGRkZGMjcKLToxMDZGOTAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTNDMEE0MDA2NUIKLToxMDZGQTAwMDhDQTkwMDAwMDBFQTQwMjVBQ0M5MDE4MDhDQTQwMDA0MzMKLToxMDZGQjAwMDNDMDMxMDAwQUNDNDAxODRBQ0M4MDE4ODAzRTAwMDA4QTUKLToxMDZGQzAwMEFDQzMwMUI4OEY4M0ZEOTQyN0JERkZFOEFGQkYwMDE0QTkKLToxMDZGRDAwMEFGQjAwMDEwOTA2NzAwMDgwMDgwMTAyMTAwODAyODIxQzkKLToxMDZGRTAwMDMwRTYwMDQwMDAwMDIwMjExMEMwMDAwODhDNTAwMDAwNTYKLToxMDZGRjAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMThGQkYwMDE0MTMKLToxMDcwMDAwMDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFMDAwNzMyNDkKLToxMDcwMTAwMDAwMDAwMDAwMEUwMDAwODgwMjAwMjAyMTAyMDAyMDIxNTQKLToxMDcwMjAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMDQ5NzI3QkQwMDE4MEUKLToxMDcwMzAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwRkQ5NEFGQkYwMDFDRTQKLToxMDcwNDAwMEFGQjIwMDE4QUZCMTAwMTQ5MjA2MDAwMTAwODA4ODIxOTEKLToxMDcwNTAwMDBFMDAwNzA0MzBEMjAwMDQ5MjA0MDAwNTAwMTEyOUMyN0EKLToxMDcwNjAwMEE2MDUwMDAwMzQ4MzAwNDBBMjAzMDAwNTBFMDAwNzBFQjEKLToxMDcwNzAwMDAyMjAyMDIxMEUwMDA0OTkwMjIwMjAyMTI0MDIwMDAxNzgKLToxMDcwODAwMEFFMDIwMDBDMDIyMDI4MjFBNjAyMDAxMDI0MDQwMDAyRjcKLToxMDcwOTAwMEE2MDIwMDEyMjQwNjAyMDBBNjAyMDAxNDBFMDAwNjc0QzYKLToxMDcwQTAwMEE2MDIwMDE2MTY0MDAwMEY4RkJGMDAxQzk3OEMwMDU0REMKLToxMDcwQjAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGMkUKLToxMDcwQzAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDU0MjkKLToxMDcwRDAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwREEKLToxMDcwRTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0EKLToxMDcwRjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0NkEKLToxMDcxMDAwMEFGQkYwMDE4QUZCMDAwMTAxMDgwMDAwNDAwQTA4ODIxQUQKLToxMDcxMTAwMDI0MDIwMDgwMTA4MjAwMDcwMDAwMDAwMDAwMDAwMDBEMjMKLToxMDcxMjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NkIKLToxMDcxMzAwMDI3QkQwMDIwMEUwMDA3MDQwMEEwMjAyMThGODZGRDk0QUIKLToxMDcxNDAwMDAyMjAyMDIxOTBDNTAwMDUwRTAwMDcwRTMwQjAwMEZGODAKLToxMDcxNTAwMDI0MDMwMDNFMTYwM0ZGRjEwMDAwMDAwMDNDMDU4MDAwMDAKLToxMDcxNjAwMDhDQTQwMTc4MDQ4MEZGRkUyNDA4MDAwNzNDMDcxMDAwNkYKLToxMDcxNzAwMEFDQjEwMTQwMDIyMDIwMjFBMEE4MDE0NDhGQkYwMDE4MUIKLToxMDcxODAwMDhGQjEwMDE0OEZCMDAwMTBBQ0E3MDE3ODBBMDAwNzVCMjQKLToxMDcxOTAwMDI3QkQwMDIwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4MzMKLToxMDcxQTAwMEFGQjEwMDE0M0MxMDgwMDA4RTExMDAyMDAwMDAwMDAwRTAKLToxMDcxQjAwMDBFMDAwNDk5QUUwNDAwMjBBRTExMDAyMDhGQkYwMDE4MEQKLToxMDcxQzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkQKLToxMDcxRDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFRjMKLToxMDcxRTAwMDNDMDg0MDM1MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwQzAKLToxMDcxRjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4OEYKLToxMDcyMDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFQzIKLToxMDcyMTAwMDNDMDg0MDM2MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwOEUKLToxMDcyMjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4NUUKLToxMDcyMzAwMDI3QkRGRkQwQUZCNTAwMjQzMDk1RkZGRkFGQjYwMDI4QzMKLToxMDcyNDAwMEFGQjQwMDIwQUZCRjAwMkNBRkIzMDAxQ0FGQjIwMDE4MkEKLToxMDcyNTAwMEFGQjEwMDE0QUZCMDAwMTAzMEI2RkZGRjEyQTAwMDI3OEUKLToxMDcyNjAwMDAwMDBBMDIxOEY5MjAwMzg4RTQzMDAwMDNDMDY4MDAwNzEKLToxMDcyNzAwMDI0MDIwMDQwMDAwMzNFMDIwMDAzMkMwMjMwRTQwMDdGQTEKLToxMDcyODAwMDAwNjY5ODI0MTQ4MjAwMUQzMEE1MDBGRjhGODMwMDQ4RkIKLToxMDcyOTAwMDJDNjgwMDBBNTEwMDAwMTA4Rjg2MDAzMDAwMDM1ODgwQ0YKLToxMDcyQTAwMDNDMEMwODAwMjU4QzUyMjgwMTZDNTAyMThENDkwMDAwQUYKLToxMDcyQjAwMDAxMjAwMDA4MDAwMDAwMDAwMkQ0NzAyMTMxQzVGRkZGNEEKLToxMDcyQzAwMDBFMDAwNkQ2MjQwNDAwODQxNjYwMDAwMjhGOTIwMDM4NTcKLToxMDcyRDAwMEFGODAwMDQ4OEY4NjAwMzAyNjRGMDAyMDI2ODkwMDAxQUQKLToxMDcyRTAwMDAxRTA5MDIxMzEzNEZGRkYxNEMwMDAwNEFGOEYwMDM4NUIKLToxMDcyRjAwMDAyOTUyODJCMTRBMEZGREMwMDAwMDAwMDAyODAxMDIxNjIKLToxMDczMDAwMDhGQkYwMDJDOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwQ0IKLToxMDczMTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTMKLToxMDczMjAwMDAzRTAwMDA4MjdCRDAwMzAyNDA3MDAzNDE0QTcwMTQ2RkQKLToxMDczMzAwMDAwMDAwMDAwOTI0NzAwMEU4Rjk4RkQ5ODhGOTBGRDk0RkEKLToxMDczNDAwMDI0MEYxNjAwQTMwNzAwMTk5MjQ0MDAwRDNDMDg4MDAwOEEKLToxMDczNTAwMDNDMDc4MDBDQTMwNDAwMTg5NjVGMDAxMjNDMDk2MDAwRjMKLToxMDczNjAwMDNDMTE3RkZGQTYxRjAwNUM5NjU5MDAxMDM2MjJGRkZGREMKLToxMDczNzAwMDI0MDQwMDA1MzMyNUZGRkZBRTA1MDA1NDhFNDYwMDFDOTMKLToxMDczODAwMEFEMEYwMDI4OENFRTAwMDA4RDJENDQ0ODAxQzYxODI2NTQKLToxMDczOTAwMDAxQTMzMDIxQUUwNjAwMzg4RTBDMDAzODI0Q0EwMDAxNEIKLToxMDczQTAwMDNDMEQ3RjAwQUUwQzAwM0M4RTBCMDAzQ0FGMEIwMDA0OEMKLToxMDczQjAwMEFFMEEwMDIwOEUxMzAwMjBBRTEzMDAxQ0EzMDAwMDFCOTkKLToxMDczQzAwMEFFMDIwMDJDQTMwNDAwMTI4RTVGMDAxNDI0MTMwMDUwQTAKLToxMDczRDAwMEFFMUYwMDM0OEUxOTAwMzRBRjE5MDAxNDhFNDUwMDE4MEEKLToxMDczRTAwMEFFMDUwMDQ4OTI0RjAwMENBMjBGMDA0RTkyMDkwMDA4MTMKLToxMDczRjAwMDM1MkUwMDIwQTIwRTAwMDg4RTAzMDAxODAwNkQ2MDI0QjgKLToxMDc0MDAwMDM1OEI0MDAwQUUwQjAwMTg5MjBBMDAwMDMxNTIwMEZGOEQKLToxMDc0MTAwMDEyNTMwMkE2MjQxM0ZGODAzQzA0MDgwMDI0ODQ1NjQwMjMKLToxMDc0MjAwMDBFMDAwNzQwMDAwMDAwMDAyNDBDMDAwNDI0MDgwMDAxQTYKLToxMDc0MzAwMDNDMDUwODAwOENBNTU2NDAzQzA0ODAwMEEyMEMwMDI1QTkKLToxMDc0NDAwMEEyMDgwMDA1OEM5MDAxNzgwNjAwRkZGRThGOTIwMDM4OUMKLToxMDc0NTAwMDI0MEQwMDAyM0MwMzEwMDBBQzg1MDE0MEEwOEQwMTQ0QzYKLToxMDc0NjAwMEFDODMwMTc4MEEwMDA4MDRBRjgwMDA0ODJDQUQwMDM3RDcKLToxMDc0NzAwMDExQTBGRjk5OEY4NjAwMzAwMDA1ODA4MDNDMTEwODAwMjQKLToxMDc0ODAwMDI2MzE1MjUwMDIxMTc4MjE4REVFMDAwMDAxQzAwMDA4MTMKLToxMDc0OTAwMDAwMDAwMDAwMjQxMDAwMDQxNEIwMDA4RTNDMDc4MDAwOUYKLToxMDc0QTAwMDNDMEIwODAwOEQ2QjU2NDA4Rjg2RkQ5NEFDRUIwMDIwQTIKLToxMDc0QjAwMDhFNDMwMDA4OEY4RkZEOTgyNDBFMDA1MEFDQzMwMDMwMUYKLToxMDc0QzAwMDhFNEEwMDA4QUNDQTAwNTA4RTQyMDAwQ0FDQzIwMDM0OTgKLToxMDc0RDAwMDhFNDQwMDEwQUNDNDAwMzg4RTVGMDAxMEFDREYwMDU0NDYKLToxMDc0RTAwMDhFNTkwMDE0QUNEOTAwM0M4RTU4MDAxOEFERjgwMDA0MzkKLToxMDc0RjAwMDhFNTEwMDFDQUNEMTAwMjA5MEM1MDAwMDMwQTkwMEZGQzcKLToxMDc1MDAwMDExMkUwMjc2MDAwMDAwMDA4Q0M1MDAzNDhDRDEwMDMwQjIKLToxMDc1MTAwMDAwQjEzMDIzMDRDMDAwRjMyNDA0MDA4QzEyNjAwMEYwOUEKLToxMDc1MjAwMDI0MDIwMDAzMEEwMDA4MDRBRjgyMDA0ODI0MEYwMDA1NkIKLToxMDc1MzAwMDE0QUYwMDY4M0MwQjgwMDAzQzAzMDgwMDhDNjM1NjQwOEQKLToxMDc1NDAwMDhGODZGRDk0QUQ2MzAwMjA4RTRBMDAwNDhGOTlGRDk4Q0MKLToxMDc1NTAwMDI0MDcyMDAwQUNDQTAwMUM5MjQyMDAwODI0MTIwMDA4MzQKLToxMDc1NjAwMEEzMjIwMDE5OEY4NDAwMzg5MDlGMDAwOUEzM0YwMDE4QzAKLToxMDc1NzAwMDhGODUwMDM4OTBCODAwMEEzMzA0MDBGRjEwOTIwMDEwODUKLToxMDc1ODAwMDI4OEMwMDA5MTU4MDAwQkMyNDA4MDAwMjI0MEUwMDIwNkQKLToxMDc1OTAwMDEwOEUwMDBCMzQwNzgwMDAyODg5MDAyMTE1MjAwMDA4NzgKLToxMDc1QTAwMDI0MDc0MDAwMjQxMTAwNDAxMDkxMDAwNTNDMDcwMDAxMTEKLToxMDc1QjAwMDI0MEYwMDgwMTA4RjAwMDIzQzA3MDAwMjI0MDc0MDAwQzcKLToxMDc1QzAwMDhDREYwMDE4M0MwNEZGMDAwM0U0QzgyNDAzMjdDMDI1MTcKLToxMDc1RDAwMEFDRDgwMDE4OTBCMjAwMEJBMEQyMDAyNzhGODMwMDM4REYKLToxMDc1RTAwMDk0NjUwMDBDMTBBMDAyMkEwMDAwMDAwMDk0NjcwMDBDQjMKLToxMDc1RjAwMDNDMTk4MDAwMjQwQkZGQkZBNEM3MDA1QzkwNjIwMDBFMDIKLToxMDc2MDAwMDI0MDcwMDA0QTBDMjAwMDg4Rjg0MDAzODkwOUYwMDBGNTgKLToxMDc2MTAwMEEwREYwMDA5OEY4QzAwMzg4RDkyMDAxMDhGMzgwMDc0MjUKLToxMDc2MjAwMDAyNTgyODIzQUNDNTAwNTg4RDhGMDAxNEFDQ0YwMDJDMTUKLToxMDc2MzAwMDk1OTEwMDE4MzIyOUZGRkZBQ0M5MDA0MDk1OEUwMDFBQzEKLToxMDc2NDAwMDMxRDBGRkZGQUNEMDAwNDQ4RDhEMDAxQ0FDQ0QwMDQ4ODQKLToxMDc2NTAwMDk1ODgwMDAyQTRDODAwNzg5MTgzMDAwRUEwQzMwMDA4OUEKLToxMDc2NjAwMDkwQ0EwMDA4MDE0QjEwMjQxMjYwMDFENEEwQzIwMDA4ODcKLToxMDc2NzAwMDhGOTIwMDM4MEEwMDA4MDRBRjg3MDA0ODI0MDYwMDA2RUQKLToxMDc2ODAwMDE0QTYwMDE0M0MwRDgwMDAzQzEwMDgwMDhFMTA1NjQwREIKLToxMDc2OTAwMDhGOENGRDkwQURCMDAwMjA4RTQ4MDAxODhGODZGRDk0MzEKLToxMDc2QTAwMDhGOEFGRDk4QUQ4ODAwMDA4Q0MzMDAzODI0MDQwMDA1NDMKLToxMDc2QjAwMEFEODMwMDA0OENDQjAwM0MxMjYwMDA4MUFENEIwMDAwMTgKLToxMDc2QzAwMDBBMDAwODA0QUY4NDAwNDgyNDBFMDAwNzEwQUUwMDRCRTcKLToxMDc2RDAwMDI0MDQwMDA2M0MwNTA4MDAyNEE1NTY0MDBFMDAwNzEzQUMKLToxMDc2RTAwMDI0MDQwMDgxOEY5MjAwMzgwMDEzMTAyQjBBMDAwODA0MzQKLToxMDc2RjAwMEFGODIwMDQ4MjQxOTAwMjMxNEI5RkZGNjNDMEI4MDAwMjgKLToxMDc3MDAwMDNDMEMwODAwOEQ4QzU2NDA4RjhBRkQ5OEFENkMwMDIwOTMKLToxMDc3MTAwMDhGOTFGRDk0OEU0NjAwMDQyNTQ0MDAyMDI2NDUwMDE0RDgKLToxMDc3MjAwMEFFMjYwMDI4MjQwNjAwMDMwRTAwMEUyQTI1NTAwMDMwNDUKLToxMDc3MzAwMDhGODcwMDM4MDIwMDIwMjEyNDA2MDAwMzBFMDAwRTJBNDUKLToxMDc3NDAwMDI0RTUwMDA4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwNEQKLToxMDc3NTAwMDAwMDAwMDAwOTIyMjAwMDAyNDFGMDA1MDMwNDQwMEZGNkYKLToxMDc3NjAwMDU0OUZGRkUxOEY5MjAwMzgwRTAwMEUxNTAwMDAwMDAwQkMKLToxMDc3NzAwMDBBMDAwOTA5OEY5MjAwMzgyNDAzMDAzMzE0QTMwMDMyNTEKLToxMDc3ODAwMDNDMDI4MDAwM0MxMTA4MDA4RTMxNTY0MDhGOEVGRDk4REYKLToxMDc3OTAwMEFDNTEwMDIwOEU0NDAwMDgyNDA5MDAyODhGODhGRDk0RjUKLToxMDc3QTAwMEFEQzQwMDMwOEU1RjAwMEMyNDA2MDAwOUFEREYwMDM0NEMKLToxMDc3QjAwMDhFNTkwMDEwQUREOTAwMzg4RTU4MDAxNEFERDgwMDIwNzUKLToxMDc3QzAwMDhFNDUwMDE4QURDNTAwMjQ4RTRGMDAxQ0FEQ0YwMDI4OUIKLToxMDc3RDAwMEExQzkwMDExOEU0RDAwMDQxMjYwMDAzMUFEMEQwMDI4Q0EKLToxMDc3RTAwMDhGOTIwMDM4MEEwMDA4MDRBRjg2MDA0ODI0MDkwMDIyNUUKLToxMDc3RjAwMDE0QTlGRkI4MDAwMDAwMDAyNDA0MDAwNzNDMEYwODAwOTMKLToxMDc4MDAwMDhERUY1NjQwM0MxMTgwMDBBRTJGMDAyMDU2NjBGRUIxMzcKLToxMDc4MTAwMEFGODQwMDQ4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwMTIKLToxMDc4MjAwMDI0MTMwMDUwOEY5OEZEOTQ5MzEyMDAwMDMyNDUwMEZGRkUKLToxMDc4MzAwMDEwQjMwMTY5MDAwMDAwMDA4RjkyMDAzODAwMDAyMDIxODEKLToxMDc4NDAwMDBBMDAwODA0QUY4NDAwNDgzQzA1MDgwMDI0QTU1NjQwRkYKLToxMDc4NTAwMDBFMDAwNkUzMjQwNDAwODEwQTAwMDkwOThGOTIwMDM4MTMKLToxMDc4NjAwMDAyRDQ5ODIxMzI2NUZGRkYwRTAwMDZENjI0MDQwMDg0NUUKLToxMDc4NzAwMDBBMDAwODA0OEY5MjAwMzgxMDg4RkY1MTI0MDcwNDAwODIKLToxMDc4ODAwMDI4ODcwMDAzMTBFMDAxQTMyNDEwMDAwNDI0MEQwMDAxNDgKLToxMDc4OTAwMDU0OERGRjRCMjQwNzQwMDAwQTAwMDhCRjI0MDcwMTAwNTUKLToxMDc4QTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDgyM0YKLToxMDc4QjAwMDhGOTIwMDM4MDAwMDMwMjEwQTAwMDgwNEFGODYwMDQ4OEIKLToxMDc4QzAwMDNDMDQwODAwMjQ4NDU2NDA4Q0MyMDAzODBFMDAwNzQwNTcKLToxMDc4RDAwMDhDQzMwMDNDOEY5MjAwMzgwQTAwMDk1RjAwMDAyMDIxMTEKLToxMDc4RTAwMDI0MDQwMDgyM0MwNTA4MDAyNEE1NTY0MDBFMDAwNzMyRkYKLToxMDc4RjAwMDAwMDAwMDAwOEY5MjAwMzgwMDAwMTAyMTBBMDAwODA0RTgKLToxMDc5MDAwMEFGODIwMDQ4OEU1MDAwMDQ4RjkxRkQ5NDNDMEE4MDAwQTUKLToxMDc5MTAwMEFENTAwMDIwOTIyMjAwMDUwMjAwMjgyMTMwNDYwMDAyQ0UKLToxMDc5MjAwMDE0QzAwMTgwMjQwNDAwOEE4RjkyRkQ5ODAyMDAyODIxNEYKLToxMDc5MzAwMDI0MDQwMDhEOTI0QjAwMUIzMTYzMDAyMDE0NjAwMTc5RjgKLToxMDc5NDAwMDAwMDAwMDAwOTIyRDAwMDkyNDBDMDAxMjMxQTgwMEZGNTUKLToxMDc5NTAwMDExMEMwMTc0MjQwNDAwODEwRTAwMDcwNDAyMDAyMDIxOTAKLToxMDc5NjAwMDkyNDUwMDFCMjQwRTAwMDQwMjAwMjAyMTM0QTkwMDQyOEQKLToxMDc5NzAwMEEyNDkwMDFCMEUwMDA3MEVBMjJFMDAyNTNDMDQ4MDAwMjkKLToxMDc5ODAwMDhDOTEwMTc4MDYyMEZGRkUyNDE4MDAwMkFDOTAwMTQwODMKLToxMDc5OTAwMEEwOTgwMTQ0OEY5MjAwMzgzQzBGMTAwMEFDOEYwMTc4MDIKLToxMDc5QTAwMDBBMDAwOTBBMDAxMzEwMkI4RTUwMDAwNDhGOTFGRDk0RDkKLToxMDc5QjAwMDNDMUY4MDAwQUZGMDAwMjA5MjM5MDAwNTAyMDAyODIxMTIKLToxMDc5QzAwMDMzMjcwMDAyMTRFMDAwMTcyNDA0MDA4QTkyMjQwMDA5REYKLToxMDc5RDAwMDI0MTIwMDA0MDIwMDI4MjEzMDg2MDBGRjEwRDIwMDExN0EKLToxMDc5RTAwMDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMThGOENGRDk4RTIKLToxMDc5RjAwMDI0MEIwMDEyMjQwM0ZGRkU5MThEMDAxQjAyMDAyMDIxQTYKLToxMDdBMDAwMDM1QTgwMDIwQTE4ODAwMUJBMjJCMDAwOTkyMkEwMDA1OUUKLToxMDdBMTAwMDAxNDMxMDI0MEUwMDA3MEVBMjIyMDAwNTAyMDAyODIxQjcKLToxMDdBMjAwMDAwMDAyMDIxMEUwMDA3Q0YwMDAwMDAwMDBBMDAwOTA5MTUKLToxMDdBMzAwMDhGOTIwMDM4OEU1MTAwMDQzQzAyODAwMDNDMTAwODAwRjgKLToxMDdBNDAwMDI2MTA1NjQwQUM1MTAwMjAzQzAxMDgwMEFDMzE1NjQwOTUKLToxMDdBNTAwMDkyNDYwMDAzMzBDNDAwMDQxMDgwMDE2NThGODRGRDk0QjkKLToxMDdBNjAwMDI0MDIwMDA2QTA4MjAwMDk5MjREMDAxQjI0MDhGRkMwREEKLToxMDdBNzAwMDMxQUMwMDNGMDE4ODU4MjVBMDhCMDAwODkyNDMwMDAzRDkKLToxMDdBODAwMDMwNkEwMDAxMTU0MDAxNUMwMDAwMDAwMDhFNDIwMDA4RDEKLToxMDdBOTAwMEFFMDIwMDA4M0MwMjA4MDA4QzQyNTY0ODEwNDAwMTVCRDAKLToxMDdBQTAwMDhGOEVGRDk4MDAwMjgxQzI4Rjg1RkQ5NEE1RDAwMDBDQjkKLToxMDdBQjAwMDhFNUYwMDBDMjQwRjAwMDEyNDA5MDAxNEFEREYwMDJDQTAKLToxMDdBQzAwMDhFNTkwMDEwQUREOTAwMUM5NjQ3MDAxNkE1QzcwMDNDODIKLToxMDdBRDAwMDk2NTgwMDE0QTVEODAwM0VBQ0FGMDAwQ0E0QUYwMDEwMUYKLToxMDdBRTAwMEE0QUYwMDEyQTRBRjAwMTRBNEFGMDAxNjEyNjAwMTVGOEYKLToxMDdBRjAwMEExQzkwMDExOTI0NDAwMDMzMDkyMDAwMjJFNTMwMDAxRUMKLToxMDdCMDAwMDhGOTIwMDM4MjY2MjAwMDgwQTAwMDgwNEFGODIwMDQ4RkQKLToxMDdCMTAwMDhFNDYwMDA0M0MwNTgwMDAzQzA0ODAwOEFDQTYwMDIwOTIKLToxMDdCMjAwMDhFNDcwMDA4OTA4OTAwMDAyNDExMDA1MDMxMjIwMEZGODgKLToxMDdCMzAwMDEwNTEwMEI4MjQwNTAwODgzQzA0ODAwMDhDOEYwMUI4RTcKLToxMDdCNDAwMDA1RTBGRkZFMDAxMzgwMkIzQzE4NDAwOTAwQjgxMDI1MEIKLToxMDdCNTAwMEFGOTAwMDQ4M0MxMDEwMDBBQzg2MDE4MEFDODcwMTg0RDcKLToxMDdCNjAwMEFDODIwMTg4QUM5MDAxQjgwQTAwMDgwNThGODYwMDMwMEQKLToxMDdCNzAwMDhFNDUwMDA0M0MwNjgwMDAzQzA5ODAwOEFDQzUwMDIwMEUKLToxMDdCODAwMDkxM0YwMDAwMjQwNDAwNTAzM0Y5MDBGRjEzMjQwMEIwOUIKLToxMDdCOTAwMDI0MDYwMDg4M0MwNDgwMDA4QzhBMDFCODA1NDBGRkZFNjIKLToxMDdCQTAwMDNDMEU0MDBFMDBDRTY4MjUzQzA4MTAwMEFDODUwMTgwREMKLToxMDdCQjAwMEFDODAwMTg0QUM4RDAxODhBQzg4MDFCODkxMkIwMDAwQTkKLToxMDdCQzAwMDI0MENGRjgwMjQwNDAwMDQwMTZDMTgyNTI0MDYwMDMwRDYKLToxMDdCRDAwMDBFMDAwNjc0QTEyMzAwMDAwQTAwMDkwOThGOTIwMDM4RTQKLToxMDdCRTAwMDhFNTAwMDA0OEY5MUZEOTgzQzBGODAwMEFERjAwMDIwNzYKLToxMDdCRjAwMDkyMjUwMDFCMzBBOTAwMTAxMTIwMDA3QzI0MDMwMDgxNzUKLToxMDdDMDAwMDNDMDQ4MDAwOEM4NzAxQjgwNEUwRkZGRTNDMUY0MDFGNEQKLToxMDdDMTAwMEFDOTAwMTgwMDA3RjEwMjUwMDEzQzgyQjNDMTAxMDAwOTEKLToxMDdDMjAwMEFDODAwMTg0QUY5OTAwNDhBQzgyMDE4OEFDOTAwMUI4NjcKLToxMDdDMzAwMDBBMDAwODA1OEY4NjAwMzA4RTQ0MDAxQzBFMDAwNkVGRjcKLToxMDdDNDAwMDAwMDAwMDAwMTA0MDAwRjgwMDQwMzgyMThGOTIwMDM4RkEKLToxMDdDNTAwMDI0MDYwMDg5M0MwNTgwMDA4Q0FFMDFCODA1QzBGRkZFRkIKLToxMDdDNjAwMDAwMDAwMDAwQUNBNzAxODA4RTUwMDAxQzNDMTE0MDAxQjgKLToxMDdDNzAwMDAwMTM3ODJCMDBEMTM4MjUzQzEzMTAwMEFDQjAwMTg0RTAKLToxMDdDODAwMEFGOEYwMDQ4QUNBNzAxODhBQ0IzMDFCODBBMDAwODA1NjMKLToxMDdDOTAwMDhGODYwMDMwOTY1OTAwMDIzQzEwMDgwMDI2MTA1NjQwOEUKLToxMDdDQTAwMDMzMzgwMDA0MTMwMDAwQTMzQzA0NjAwMDhFNUYwMDFDMDYKLToxMDdDQjAwMDNDMDY4MDAwQUNERjAwMjAzQzAxMDgwMEFDM0Y1NjQwOTEKLToxMDdDQzAwMDk2NEYwMDAyMzFFNzAwMDExNEUwMDBFMzAwMDAwMDAwREQKLToxMDdDRDAwMDhFNDIwMDA0QUUwMjAwMDgzQzEwMDgwMDhFMTA1NjQ4ODgKLToxMDdDRTAwMDEyMDAwMEQ5M0MwNjgwMDA4Rjg1RkQ5NDI0MTAwMDAxMEQKLToxMDdDRjAwMDhDQkYwMDE4OEY5MUZEOTg4Rjg5RkQ5MDAzRTZDODI1RjEKLToxMDdEMDAwMEFDQjkwMDE4QTBBMDAwMDVBQ0IwMDAwQzNDMTgwODAwRUQKLToxMDdEMTAwMDhGMTg1NjQ4OEY4NzAwMzhBNEIwMDAxMDAwMTg3OUMyMTkKLToxMDdEMjAwMEE0QjAwMDEyQTRCMDAwMTRBNEIwMDAxNkE2MkYwMDBDM0EKLToxMDdEMzAwMDhDRUUwMDA4OEY4RDAwMzg4RjhDMDAzOEFFMkUwMDJDMTIKLToxMDdENDAwMDhEQTgwMDBDMjQwNzAwMDJBRTI4MDAxQzkxOEIwMDEwQTcKLToxMDdENTAwMEEyMkIwMDExOEY4MzAwMzg5MDZBMDAxMUExMkEwMDA4MUQKLToxMDdENjAwMDhGODIwMDM4OTA0NDAwMTJBMEE0MDA0RThGOTIwMDM4RjkKLToxMDdENzAwMDkyNDYwMDEzQTIyNjAwMTI4RjkyMDAzODk2NUYwMDE0REMKLToxMDdEODAwMEE2M0YwMDNDOTY1OTAwMTZBNjM5MDAzRThFNTgwMDE4QjIKLToxMDdEOTAwMEFFMzgwMDE0NTY2MEZENEZBRjg3MDA0ODNDMDUwODAwMjAKLToxMDdEQTAwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMjAyMThGOTIwMDM4QjIKLToxMDdEQjAwMDAwMDAzODIxMEEwMDA4MDRBRjg3MDA0ODNDMDUwODAwOEQKLToxMDdEQzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4MEEKLToxMDdERDAwMDBBMDAwOEVDMDAwMDM4MjEwRTAwMEUxNTAwMDAwMDAwMUIKLToxMDdERTAwMDhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTBFMDAwNzA0NkUKLToxMDdERjAwMDAyMDAyMDIxOTIzMjAwMUIwMjAwMjAyMTM2NTgwMDEwODAKLToxMDdFMDAwMDBFMDAwNzBFQTIzODAwMUI4RjkyMDAzODBBMDAwQTRGOUUKLToxMDdFMTAwMDAwMDAxODIxOTI0MzAwMEMzMDZBMDAwMTExNDAwMDAzNTkKLToxMDdFMjAwMDAwMDAwMDAwOTY0QjAwMEVBNDhCMDAyQzkyNDgwMDBDMjIKLToxMDdFMzAwMDMxMEMwMDAyMTE4MEZGNDAwMDAwMjgyMTk2NEUwMDEyRjQKLToxMDdFNDAwMDhFNEQwMDE0QTQ4RTAwMUEwQTAwMEExREFDOEQwMDFDNzEKLToxMDdFNTAwMDhGODMwMDU4OEY4NzAwNTAxMDY3RkY0RTAwMDAzMDIxM0QKLToxMDdFNjAwMDNDMDgwODAwMjUwODU1QzQwMDAzMjBDMDAwODgzMDIxQzQKLToxMDdFNzAwMDhDRDEwMDAwMTIyNTAwQzgyNDYyMDAwMTMwNDMwMDBGOUQKLToxMDdFODAwMDE0NjdGRkZBMDAwMzIwQzAwQTAwMEEzNDAwMDAzMDIxMDIKLToxMDdFOTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDhCNDAKLToxMDdFQTAwMDhGOTIwMDM4MEEwMDA4RUMwMDEzMzgyQjNDMEIwODAwQjYKLToxMDdFQjAwMDhENkI1NjQwMjREOEZGRkUyNTcxMDEwMDMyMkEwMDdGQzkKLToxMDdFQzAwMDAxNDc5MDIxMDIzMzEwMjRBRDAyMDAyOEFFNDYwMEQwQjUKLToxMDdFRDAwMEFFNDAwMEQ0MEEwMDA4NTVBRTU4MDAxQ0FDQzAwMDU0OTcKLToxMDdFRTAwMDNDMEUwODAwOERDRTU2NDAzQzA5ODAwQzM1MkMwMTAwMUMKLToxMDdFRjAwMEFDRUUwMDI4OEU1MDAwMTRBRDkwMDBEMDhFNEQwMDE0RDIKLToxMDdGMDAwMEFEOEQwMEQ0OEU0ODAwMTAyNTA3RkZGRTBBMDAwODkxQjEKLToxMDdGMTAwMEFEODcwMDFDNTQ5MEZEQUEyNDA3NDAwMDBBMDAwOEJGNEEKLToxMDdGMjAwMDI0MDcxMDAwMEUwMDA3QzMwMDAwMDAwMDBBMDAwOTA5MjIKLToxMDdGMzAwMDhGOTIwMDM4OEM4MzQ0MkMzQzA1REVBRDM0QjJCRUVGMEEKLToxMDdGNDAwMDNDMDEwODAwQUMyMDU2NDAxMDcyMDA5MDAwMDAwMDAwNzgKLToxMDdGNTAwMDNDMDQ2QzYyMzQ4Mjc5NzAxNDYyMDAwODI0MDQwMDAyQ0MKLToxMDdGNjAwMDk3OEEwMDU0OTc4MzAwNEMwMjAwMjgyMTAxNDM0ODJCMzQKLToxMDdGNzAwMDExMjAwMDE5MjQwNDAwOTIyNDA0MDAwMjBFMDAwNUU0REMKLToxMDdGODAwMDI0MDUwMjAwM0MwQjgwMDBBRDYyMDAyMDNDMDEwODAwOEIKLToxMDdGOTAwMEFDMjI1NjQwMTA0MDAwMEQ4RjhFMDAzODI0MEMwMDI4NzMKLToxMDdGQTAwMDI0MDQwMDAzOTFDRDAwMTAzMUE4MDBGRjU1MEMwMDAxRkUKLToxMDdGQjAwMDI0MDQwMDAxMEUwMDAwNEMwMDAwMDAwMDEwNDAwMDA0RUEKLToxMDdGQzAwMDI0MDQwMDgzMEEwMDBBN0Y4RjkyMDAzODI0MDQwMDgzNkYKLToxMDdGRDAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDcxMzAwMDAwMDAwRDEKLToxMDdGRTAwMDhGOTIwMDM4MDAxMzM4MkIwQTAwMDgwNEFGODcwMDQ4MkUKLToxMDdGRjAwMDBBMDAwOUU4MjQwMjAwMTI4RTQ0MDAwODBFMDAwNkVGNzEKLToxMDgwMDAwMDAwMDAwMDAwMEEwMDA5RjRBRTAyMDAwODNDMDUwODAwNjgKLToxMDgwMTAwMDI0QTU1NjQwMEUwMDA2RTMyNDA0MDA4NzhGOTIwMDM4MDIKLToxMDgwMjAwMDBBMDAwQTExMDAxMzEwMkIyNDA0MDAwNDBFMDAwNUU0QkEKLToxMDgwMzAwMDI0MDUwMDMwMTQ0MDAwMTQwMDQwMzgyMThGOTIwMDM4OEQKLToxMDgwNDAwMDBBMDAwQTY0MjQwNjAwODMzQzA1MDgwMDI0QTU1NjQwNjMKLToxMDgwNTAwMDBBMDAwQjQ1MjQwNDAwODc4RTQ0MDAwNDBFMDAwNkVGM0UKLToxMDgwNjAwMDAwMDAwMDAwMEEwMDBBODVBRTAyMDAwODNDMDUwODAwNzYKLToxMDgwNzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4NTcKLToxMDgwODAwMDBBMDAwQTExMDAwMDEwMjE4RjkyMDAzODNDMDg4MDA4NzUKLToxMDgwOTAwMDNDMEM4MDAwMjQwQjAwNTAyNDBBMDAwMUFEODIwMDIwMUIKLToxMDgwQTAwMEExMEIwMDAwQTEwQTAwMDE5MjQ5MDAwNEExMDkwMDE4RDcKLToxMDgwQjAwMDkyNDQwMDA1QTEwNDAwMTk5MjQzMDAwNjNDMDQwODAwMDQKLToxMDgwQzAwMDI0ODQ1NUM0QTEwMzAwMUE5MjQyMDAwNzNDMDMwODAwMEYKLToxMDgwRDAwMDI0NjM1NUMwQTEwMjAwMUI5MjQ1MDAwOEExMDUwMDFDQTUKLToxMDgwRTAwMDkyNDYwMDA5QTEwNjAwMUQ5MjVGMDAwQUExMUYwMDFFMTIKLToxMDgwRjAwMDkyNTkwMDBCQTExOTAwMUY5MjU4MDAwQ0ExMTgwMDIwRTIKLToxMDgxMDAwMDkyNTEwMDBEQTExMTAwMjE5MjUwMDAwRUExMTAwMDIyRTkKLToxMDgxMTAwMDkyNEYwMDBGQTEwRjAwMjM5MjRFMDAxMEExMEUwMDI0RDkKLToxMDgxMjAwMDkyNEQwMDExQTEwRDAwMjU5NjRDMDAxNEE1MEMwMDI4QkQKLToxMDgxMzAwMDk2NEIwMDE2OEY4QTAwNTA4Rjk4MDA1OEE1MEIwMDJBODYKLToxMDgxNDAwMDk2NDkwMDE4MDAwQTEwQzAyNTQ1MDAwMUE1MDkwMDJDMTkKLToxMDgxNTAwMDhFNDYwMDFDMDA0NEM4MjEwMDQzRjgyMTMwQTUwMDBGQzIKLToxMDgxNjAwMEFGRTYwMDAwQUYyNzAwMDAxMEI4MDAwM0FGODUwMDUwNTUKLToxMDgxNzAwMDBBMDAwQTY0MDAwMDMwMjEyNEFEMDAwMTMxQTgwMDBGN0MKLToxMDgxODAwMDAwMDAzMDIxMEEwMDBBNjRBRjg4MDA1ODhDODM0NDJDMTgKLToxMDgxOTAwMDBBMDAwQjI0M0MwNDZDNjIzQzA3MDgwMDI0RTc1NUMwMkQKLToxMDgxQTAwMDAwODc5MDIxQUNDMDAwMDAwMDAwMzAyMTBBMDAwQTM0OTIKLToxMDgxQjAwMEFFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMDM0ODIwRTAyQTkKLToxMDgxQzAwMEFDNjAzRDY4QUY4MDAwNzgwM0UwMDAwOEFDNjIzRDZDQjUKLToxMDgxRDAwMDI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRjAwMTAxODQyM0QKLToxMDgxRTAwMDJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMjI0MDQwMDgwNDAKLToxMDgxRjAwMDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MDNDMDEwODAwNTIKLToxMDgyMDAwMEFDMjMwMDY0MEUwMDBFMUUwMDYwMjgyMTI0NDgwMkJGMkIKLToxMDgyMTAwMDI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MDAwMTAzMDQwMTMKLToxMDgyMjAwMDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTAwODYxODIxRjYKLToxMDgyMzAwMEFGODMwMDYwM0MwMTA4MDBBQzI1MDA1ODNDMDEwODAwRjkKLToxMDgyNDAwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxODMwODMwMEZGNjkKLToxMDgyNTAwMDMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMDhEMDIwMUI4MEIKLToxMDgyNjAwMDA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNTNDMDk2MDAwMkYKLToxMDgyNzAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEFEMDYwMTg0MTYKLToxMDgyODAwMEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODhGODYwMDM4MTMKLToxMDgyOTAwMDNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFQUEKLToxMDgyQTAwMDM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0OTUKLToxMDgyQjAwMDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyQkEKLToxMDgyQzAwMEFDQTIzMTg0MDNFMDAwMDhBNzgzMDA3MDhGODUwMDM4REEKLToxMDgyRDAwMDhGODdGRjIwOEY4NkZGMjg4Q0FFMDAwNDNDMEY2MDEyMzIKLToxMDgyRTAwMDM1RTgwMDEwQUNFRTAwNjg4Q0FEMDAwOEFDRUQwMDZDMTkKLToxMDgyRjAwMDhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQ0FDQ0IwMDQ4NzAKLToxMDgzMDAwMDk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NDI1NDkwMDAxRjQKLToxMDgzMTAwMEE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRjEwNjIwMDE3QjYKLToxMDgzMjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MEE0QzIwMDUyNDEKLToxMDgzMzAwMDhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNEFDRTIwMDJDM0IKLToxMDgzNDAwMDhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNDI0MDUwMDAxNzEKLToxMDgzNTAwMEFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOThEMDIwMEI0ODUKLToxMDgzNjAwMDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0OEE0RTQwMDRBNjYKLToxMDgzNzAwMDk0RTgwMERBMDNFMDAwMDgzMTAyRkZGRjNDMDIwODAwNDUKLToxMDgzODAwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjhDQTMwMDE4NDQKLToxMDgzOTAwMEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzhDQjkwMDE4QzUKLToxMDgzQTAwMEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMUFDRjgwMDM0OTYKLToxMDgzQjAwMDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODhEMDIwMEI0RTEKLToxMDgzQzAwMEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTk0RTgwMERBRjcKLToxMDgzRDAwMDAzRTAwMDA4MzEwMkZGRkY4Rjg2MDAzODNDMDQ4MDAwNzQKLToxMDgzRTAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMDAwMDgzOUMwRTEKLToxMDgzRjAwMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDEwNDAwMDNBQjAKLToxMDg0MDAwMEFGODUwMDc0OTBDQjAwMDczMTZBMDAwODExNDAwMDM5MzUKLToxMDg0MTAwMDhGODdGRjI0OENDRDAwMEM4Q0NFMDAxNDAxQUU2MDJCMTYKLToxMDg0MjAwMDExODAwMDMyMDAwMDAwMDA4Q0MyMDAwQ0FDRTIwMDcwMzEKLToxMDg0MzAwMDhDQ0IwMDE4OEY4NUZGMjA4Rjg4RkYyOEFDRUIwMDc0NTEKLToxMDg0NDAwMDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBDODhDQzkwMDBDMkEKLToxMDg0NTAwMEFEMDkwMDYwOENDNDAwMUNBQ0E0MDBDMDkwRTMwMDdDOUIKLToxMDg0NjAwMDAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzMzMEYwMDA4RjAKLToxMDg0NzAwMDExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzM1QUMwMDAxMkMKLToxMDg0ODAwMEEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMTExQzAwMDA5ODQKLToxMDg0OTAwMDAwMDAwMDAwOTBFNDAwN0MyNDE4MDAwMjM0ODIwMDAyRjYKLToxMDg0QTAwMEEwRTIwMDdDOTBBMzAwRUMzMDc5MDBGRjEzMzgwMDEzQTkKLToxMDg0QjAwMDI0MDgwMDM0OTBDOTAwMDczMTI2MDAwMjEwQzAwMDA0Q0YKLToxMDg0QzAwMDAwMDAwMDAwOTBFQjAwN0MzNTZBMDAwNEEwRUEwMDdDMEMKLToxMDg0RDAwMDkwRUQwMDdEMzFBQzAwM0ZBMEVDMDA3RDk0QTcwMERBNjgKLToxMDg0RTAwMDAzRTAwMDA4MzBFMkZGRkY4Rjg3RkYyNDBBMDAwQzVBRTgKLToxMDg0RjAwMDhDQzIwMDE0MEEwMDBDNUJBQ0UwMDA3MDBBMDAwQzdDMUIKLToxMDg1MDAwMEFDQTgwMENDOEY4QzAwMzgyN0JERkZEOEFGQjMwMDFDQkYKLToxMDg1MTAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyMEFGQjEwMDE0NzEKLToxMDg1MjAwMDkxOEYwMDE1M0MxMzYwMEUzNjczMDAxMDMxRUIwMDBGNzUKLToxMDg1MzAwMEEzOEIwMDdDOEQ4RjAwMDQ4RDhCMDAwODk1OUYwMDEyMEIKLToxMDg1NDAwMDk1OTkwMDEwOTU4NDAwMUE5NTk4MDAxRTk1OEUwMDFDMzAKLToxMDg1NTAwMDMzRURGRkZGMzMyQUZGRkYzMDg5RkZGRjMzMDhGRkZGQjIKLToxMDg1NjAwMDMxQzdGRkZGM0MwMTA4MDBBQzJEMDAyNDNDMDEwODAwOEUKLToxMDg1NzAwMEFDMjkwMDQ0M0MwMTA4MDBBQzJBMDA0MEFFNjgzMTc4QzgKLToxMDg1ODAwMEFFNjczMTdDOTE4NTAwMTU5NTkxMDAxNjNDMTI2MDEyMDIKLToxMDg1OTAwMDM2NTIwMDEwMzBBMjAwRkYzMjMwRkZGRkFFNjIzMTg4NDkKLToxMDg1QTAwMEFFNTAwMEI0OTE4MzAwMTQ5NTlGMDAxODI0MDYwMDAxN0EKLToxMDg1QjAwMDAwNjZDODA0MzNGOEZGRkZBRTU5MDBCOEFFNTgwMEJDREYKLToxMDg1QzAwMDkxOEUwMDE0QUY4RjAwNjQzQzA4NjAwNjMxQ0QwMEZGMkYKLToxMDg1RDAwMEFFNEQwMEMwOTE4QTAwMTU5NTg0MDAwRTNDMDc2MDBBREMKLToxMDg1RTAwMDMxNDkwMEZGQUY4QjAwNjgzMDg0RkZGRkFFNDkwMEM4RkYKLToxMDg1RjAwMDM1MTEwMDEwMEUwMDBCQzMzNEYwMDQxMDNDMDIwODAwQ0IKLToxMDg2MDAwMDhDNDIwMDYwM0MwMzA4MDA4QzYzMDA2NDNDMDYwODAwNTgKLToxMDg2MTAwMDhDQzYwMDU4M0MwNTA4MDA4Q0E1MDA1QzhGODQwMDYwNjcKLToxMDg2MjAwMDhGQkYwMDIwQUUyMzAwNENBRTY1MzE5Q0FFMDMwMDU0REEKLToxMDg2MzAwMEFFNDUwMERDQUU2MjMxQTBBRTYzMzFBNEFFNjYzMTk4QzcKLToxMDg2NDAwMEFFMjIwMDQ4OEZCMzAwMUNBRTAyMDA1MDhGQjEwMDE0NjAKLToxMDg2NTAwMEFFNDIwMEUwQUU0MzAwRTRBRTQ2MDBEODhGQjAwMDEwNUEKLToxMDg2NjAwMDhGQjIwMDE4MEEwMDA0Q0MyN0JEMDAyODk3ODUwMDcyM0QKLToxMDg2NzAwMDk3ODMwMDVDMjdCREZGRThBRkIwMDAxMDAwQTMxMDJCNkMKLToxMDg2ODAwMEFGQkYwMDE0MjQwNDAwMDU4RjkwMDAzODEwNDAwMDU1M0YKLToxMDg2OTAwMDI0MDkwMDAyMEUwMDA1RTQ4Rjg1MDA2MEFGODIwMDc0OUIKLToxMDg2QTAwMDI0MDQwMDAzMTA0MDAwNEYyNDA5MDAwMjNDMDY4MDAwMEYKLToxMDg2QjAwMDBFMDAwMDRDQUNDMjAwMjAyNDA3MDAwMTI0MDgyMDAwNUEKLToxMDg2QzAwMDEwNDAwMDREMjQwNDAwMDU5NzhFMDA3MjhGOEFGRjI0MEQKLToxMDg2RDAwMDI0MDkwMDUwMjVDNTAwMDFBNzg1MDA3MkExNDkwMDAwQUEKLToxMDg2RTAwMDNDMEQwODAwOERBRDAwNjQyNDAzODAwMDhGODRGRjIwQzIKLToxMDg2RjAwMDAwMEQ2NjAwQUQ0QzAwMThBNTQwMDAwNjk1NEIwMDBBMjEKLToxMDg3MDAwMDhGODVGRjI4MjQwMkZGODAwMTYzMzAyNEE1NDYwMDBBREMKLToxMDg3MTAwMDkxNUYwMDBBMDAwMDQ4MjEwM0UyQzgyNUExNTkwMDBBMjAKLToxMDg3MjAwMEEwQTAwMDA4QTE0MDAwNENBMDgwMDBDNTk2MTgwMDAyM0YKLToxMDg3MzAwMDk3ODMwMDcwM0MwMjAwMDRBNDk4MDBEQTk2MEYwMDAyQjAKLToxMDg3NDAwMDI0MThGRkJGMjVFRTI0MDFBNDhFMDBBRThFMEQwMDA0NzgKLToxMDg3NTAwMEFDQUQwMDQ0OEUwQzAwMDhBQ0FDMDA0MEE0QTAwMDUwQUUKLToxMDg3NjAwMEE0QTAwMDU0OEUwQjAwMEMyNDBDMDAzMEFDOEIwMDI4MEQKLToxMDg3NzAwMDhFMDYwMDEwQUM4NjAwMjRBNDgwMDAzRUE0ODcwMDRFMjQKLToxMDg3ODAwMEE0ODcwMDUwQTQ4MzAwM0NBRDQyMDA3NEFDODgwMEM4QUMKLToxMDg3OTAwMEFDQTgwMDYwQTA4NzAwRUM5MDlGMDBDNDMzRjkwMDdGNzQKLToxMDg3QTAwMEEwOTkwMEM0OTA5MDAwQzQwMjE4NzgyNEEwOEYwMEM0M0YKLToxMDg3QjAwMDkxNEUwMDdDMzVDRDAwMDFBMTREMDA3QzkzOEIwMDdDNTcKLToxMDg3QzAwMEFENDgwMDcwQUM4QzAwQ0NBMDhCMDBDNjhGODgwMDY4RDAKLToxMDg3RDAwMDhGODcwMDY0QUM4ODAwQjRBQzg3MDBCOEE1NDAwMDc4RUYKLToxMDg3RTAwMEE1NDAwMDdBOEZCRjAwMTQ4RkIwMDAxMDAxMjAxMDIxMjcKLToxMDg3RjAwMDAzRTAwMDA4MjdCRDAwMTg4Rjg1MDA3NDBFMDAwNjc0ODIKLToxMDg4MDAwMDhGODYwMDYwMEEwMDBENDgyNDA5MDAwMjI3QkRGRkUwQTIKLToxMDg4MTAwMEFGQjAwMDEwOEY5MDAwMzhBRkIxMDAxNEFGQkYwMDE4OTgKLToxMDg4MjAwMDhFMDkwMDA0MEUwMDA0OTkwMDA5MjFDMDhFMDgwMDA0N0UKLToxMDg4MzAwMDhGODRGRjIwOEY4MkZGMjgwMDA4MzlDMDNDMDY4MDAwMEIKLToxMDg4NDAwMEFDQzcwMDIwOTQ4NTAwREE5MDQzMDAxMzE0NjAwMDFDMkMKLToxMDg4NTAwMDMwQjFGRkZGOEY4Q0ZGMjQ5MThCMDAwODMxNkEwMDQwRkMKLToxMDg4NjAwMDE1NDAwMDBCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxOTYKLToxMDg4NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyQTUKLToxMDg4ODAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwOUUKLToxMDg4OTAwMDBFMDAwMDYzMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxNTUKLToxMDg4QTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNzUKLToxMDg4QjAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwNkUKLToxMDg4QzAwMDBFMDAwMDVCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxMkQKLToxMDg4RDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNDUKLToxMDg4RTAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwM0UKLToxMDg4RjAwMDI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRkFGQjAwMDEwMEQKLToxMDg5MDAwMEFGQkYwMDFDQUZCMTAwMTQxMjQwMDAxRTAwMDA4MDIxNTgKLToxMDg5MTAwMDhGODYwMDM4OENDNTAwMDAyNDAzMDAwNjAwMDUzRjAyNDYKLToxMDg5MjAwMDAwMDUxNDAyMzBFNDAwMDcxNDgzMDAxNjMwNDUwMEZGRjAKLToxMDg5MzAwMDJDQTgwMDA2MTEwMDAwNDAwMDA1NTg4MDNDMEMwODAwREYKLToxMDg5NDAwMDI1OEM1MzJDMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MUEKLToxMDg5NTAwMDAwMDAwMDAwOEY4RTAwNzgyNDBEMDAwMTExQ0QwMDUwMjIKLToxMDg5NjAwMDI0MDIwMDAyQUY4MjAwNzgyNjA5MDAwMTMxMzBGRkZGQTcKLToxMDg5NzAwMDI0QzgwMDIwMDIxMjIwMkIwMTAwMzAyMTE0ODBGRkU1QzIKLToxMDg5ODAwMEFGODgwMDM4MDIwMDEwMjE4RkJGMDAxQzhGQjIwMDE4ODIKLToxMDg5OTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNDUKLToxMDg5QTAwMDkzODcwMDVFNTRFMDAwMzQwMDAwMzAyMTBFMDAwQzkwRUMKLToxMDg5QjAwMDAwMDAwMDAwOEY4NjAwMzgwQTAwMERBODI0MDIwMDAxODQKLToxMDg5QzAwMDhGODcwMDc4MjQwNTAwMDIxMEU1MDAzMTI0MDQwMDEzOEQKLToxMDg5RDAwMDAwMDAyODIxMDAwMDMwMjEyNDA3MDAwMTBFMDAwQkUyRDYKLToxMDg5RTAwMDAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODhGODMwMDc4RjAKLToxMDg5RjAwMDI0MDIwMDAyMTQ2MkZGRjYyNDA0MDAxMjBFMDAwQzQ1NEIKLToxMDhBMDAwMDAwMDAwMDAwOEY4NTAwNzQwMDQwMzAyMTI0MDQwMDEyMTMKLToxMDhBMTAwMDBFMDAwQkUyMDAwMDM4MjEwQTAwMERBOThGODYwMDM4RjUKLToxMDhBMjAwMDhGODMwMDc4MjQxMTAwMDMxMDcxMDAyOTI0MUYwMDAyOTUKLToxMDhBMzAwMDEwN0ZGRkNFMjYwOTAwMDEyNDA0MDAxMDAwMDAyODIxMjkKLToxMDhBNDAwMDAwMDAzMDIxMEEwMDBEQzYyNDA3MDAwMThGOTEwMDc4MzQKLToxMDhBNTAwMDI0MDYwMDAyMTYyNkZGRjkyNDA0MDAxMDBFMDAwQ0VBN0EKLToxMDhBNjAwMDAwMDAwMDAwMTQ0MDAwMjM4Rjk4MDAzODhGODYwMDM4RTMKLToxMDhBNzAwMDBBMDAwREE4MjQwMjAwMDMyNDA0MDAxNDBFMDAwQkUyRDcKLToxMDhBODAwMDAwMDAyODIxOEY4NjAwMzgwQTAwMERBODI0MDIwMDAyNjkKLToxMDhBOTAwMDBFMDAwRDUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4NUMKLToxMDhBQTAwMDBFMDAwQkYyMDAwMDAwMDAyNDE5MDAwMjI0MDQwMDE0NDAKLToxMDhBQjAwMDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMUFGOTkwMDc4MDMKLToxMDhBQzAwMDBFMDAwQkUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4OUUKLToxMDhBRDAwMDBFMDAwQzAyMDAwMDAwMDA4Rjg1MDA3NDI0MTkwMDAyQjMKLToxMDhBRTAwMDAwNDAzMDIxMjQwNDAwMTAwMDAwMzgyMTBBMDAwREZGNEUKLToxMDhBRjAwMEFGOTkwMDc4MDA0MDM4MjEyNDA0MDAxMDk3MEYwMDAyM0QKLToxMDhCMDAwMDAwMDAyODIxMEUwMDBCRTIzMUU2RkZGRjhGODYwMDM4QkYKLToxMDhCMTAwMDBBMDAwREE5QUY5MTAwNzg4Rjg0RkYyNDNDMDc3RkZGRTYKLToxMDhCMjAwMDM0RTZGRkZGOEM4NTAwMTgyNDAyMDAwMTAwQTYxODI0RkIKLToxMDhCMzAwMEFDODMwMDE4MDNFMDAwMDhBMDgyMDAwNTMwODRGRkZGMkEKLToxMDhCNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxQ0YKLToxMDhCNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMzEKLToxMDhCNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3NDUKLToxMDhCNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0MTIKLToxMDhCODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4NTIKLToxMDhCOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMjYKLToxMDhCQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMUMKLToxMDhCQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQUYKLToxMDhCQzAwMDAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MDI3QkRGRkU4NzIKLToxMDhCRDAwMEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNDBFMDAwRTNGMjgKLToxMDhCRTAwMDAwQTAyMDIxMDA1MDQ4MjEyNDBBRkY4MDhGQkYwMDE0REMKLToxMDhCRjAwMDhGQjAwMDEwMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBBMDIKLToxMDhDMDAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwMUEKLToxMDhDMTAwMDI3QkQwMDE4QUM2NTAwMjRBRjgyMDAyNEFDNDAwMDAwRTIKLToxMDhDMjAwMEFDNjUwMDI0MDNFMDAwMDhBQzQwMDA0MDNDMEQwODAwQTcKLToxMDhDMzAwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDAxQTQ1ODIxRjEKLToxMDhDNDAwMDAxNkM0ODIxMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBDMjgKLToxMDhDNTAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwQ0EKLToxMDhDNjAwMEFDNjUwMDI4QUY4MjAwMjAwM0UwMDAwOEFDNDAwMDI0N0YKLToxMDhDNzAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFMTcKLToxMDhDODAwMDNDMDg2MDE1MDBBODM4MjUzQzAzMTAwMEFDQzQwMTgwRTYKLToxMDhDOTAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4RDQKLToxMDhDQTAwMDNDMEQwODAwOERBRDAwNTgwMDA1NjE4MDI0MEFGRjgwNEUKLToxMDhDQjAwMDAxQTQ1ODIxMDE2QzQwMjEwMTBBNDgyNDAwMDkzMTQwRDcKLToxMDhDQzAwMDMxMDcwMDdGMDBDNzI4MjUzQzA0MjAwMDAwQTQxODI1OTgKLToxMDhDRDAwMDNDMDI4MDAwQUM0MzA4MzAwM0UwMDAwOEFGODAwMDIwNzUKLToxMDhDRTAwMDI3QkRGRkU4QUZCMDAwMTAwMDgwODAyMUFGQkYwMDE0QTcKLToxMDhDRjAwMDBFMDAwRTNGMDBBMDIwMjEwMDUwNDgyMTI0MEJGRjgwRDEKLToxMDhEMDAwMDAxMkI1MDI0MDAwQTM5NDAzMTI4MDA3RjNDMDYyMDAwMDYKLToxMDhEMTAwMDhGQkYwMDE0OEZCMDAwMTAwMEU4MjgyNTM0QzIwMDAxNzYKLToxMDhEMjAwMDAwQTIxODI1M0MwNDgwMDAyN0JEMDAxOEFDODMwODMwNDEKLToxMDhEMzAwMDAzRTAwMDA4QUY4MDAwMjQzQzA1ODAwODhDQTcwMDYwOTkKLToxMDhENDAwMDNDMDY4MDA4MDA4NzEwMkIxNDQwMDAxMTJDODM0MDAwNDMKLToxMDhENTAwMDhDQTgwMDYwMkQwMzQwMDAxMDYwMDAwRjI0MDM0MDAwMjkKLToxMDhENjAwMDhDQzkwMDYwMDA4OTI4MkIxNEEwMDAwMjAwODAxODIxMDMKLToxMDhENzAwMDhDQzMwMDYwMDAwMzVBNDIwMDBCMzA4MDNDMEEwODAwOUMKLToxMDhEODAwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODhDODIwMDAwN0QKLToxMDhEOTAwMDE0NjBGRkYzMjQwMzQwMDAwMDAzNUE0MjAwMEIzMDgwQUMKLToxMDhEQTAwMDNDMEEwODAwMjU0QTUzQTAwMENBMjAyMTAzRTAwMDA4MUQKLToxMDhEQjAwMDhDODIwMDAwM0MwNTgwMDg5MEE2MDAwODkzODQwMDg4RkYKLToxMDhEQzAwMDI0QzIwMDAxMzA0MjAwRkYzMDQzMDA3RjEwNjQwMDBDRDkKLToxMDhERDAwMDAwMDIzODI3QTBBMjAwMDgzQzA0ODAwMDhDODUwMTc4OUUKLToxMDhERTAwMDA0QTBGRkZFOEY4QTAwODAyNDA5MDAwMjNDMDgxMDAwQzYKLToxMDhERjAwMEFDOEEwMTQwQTA4OTAxNDQwM0UwMDAwOEFDODgwMTc4RjYKLToxMDhFMDAwMDBBMDAwRUM0MzBFMjAwODAyN0JERkZEOEFGQjIwMDE4QzAKLToxMDhFMTAwMDhGOTIwMDg0QUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwMzIKLToxMDhFMjAwMEFGQjEwMDE0OEY5MzAwMjA4RTU5MDAyODNDMTAwMDgwQjEKLToxMDhFMzAwMDNDMEVGRkVGQUU3OTAwMDA4RTU4MDAyNEEyNjAwMDBBQkQKLToxMDhFNDAwMDM1Q0RGRkZGQUU3ODAwMDQ5MjUxMDAyQzNDMEJGRjlGMDQKLToxMDhFNTAwMDM1NkFGRkZGQTI3MTAwMEM4RTZGMDAwQzNDMDgwMDQwQzkKLToxMDhFNjAwMEEyNzEwMDBCMDFGMDYwMjUwMThENDgyNDAxMkEzODI0RUQKLToxMDhFNzAwMDAwRTgzMDI1QUU2NjAwMEM4RTQ1MDAwNEFFNjAwMDE4OTgKLToxMDhFODAwMDNDMDQwMEZGQUU2NTAwMTQ4RTQzMDAyQzM0ODJGRkZGQ0IKLToxMDhFOTAwMEE2NjAwMDA4MDA2MkY4MjRBRTdGMDAxMDhFNTkwMDA4MUEKLToxMDhFQTAwMDhGOTAwMDgwOTY0RTAwMTJBRTc5MDAyMDhFNTEwMDBDRkIKLToxMDhFQjAwMDMxRDgzRkZGMDAxODc5ODBBRTcxMDAyNDhFNEQwMDE0MjgKLToxMDhFQzAwMDAxRjA2MDIxMzFDQjAwMDFBRTZEMDAyODhFNEEwMDE4MDAKLToxMDhFRDAwMDAwMEM0MUMyMDAwQjRCODBBRTZBMDAyQzhFNDYwMDFDNzkKLToxMDhFRTAwMDAxMDkzODIxQTY2NzAwMUNBRTY2MDAzMDk2NDUwMDAyRDUKLToxMDhFRjAwMDhFNDQwMDIwQTY2NTAwMUVBRTY0MDAzNDkyNDMwMDMzMDkKLToxMDhGMDAwMDMwNjIwMDA0NTQ0MDAwMDY5MjQ3MDAwMDNDMDI4MDA4OTIKLToxMDhGMTAwMDM0NDMwMTAwOEM3RjAwQzBBRTdGMDAzMDkyNDcwMDAwRDgKLToxMDhGMjAwMDhGODYwMDI0QTBDNzAwMzA5MjQ1MDAzMzMwQTQwMDAyOTEKLToxMDhGMzAwMDUwODAwMDA3OTI1MTAwMDE4Rjg4MDAyNDI0MEJGRjgwOEQKLToxMDhGNDAwMDkxMEEwMDMwMDE0QjQ4MjVBMTA5MDAzMDkyNTEwMDAxREYKLToxMDhGNTAwMDhGOTAwMDI0MjQwQ0ZGQkYyNDA0RkZERkEyMTEwMDMxRjYKLToxMDhGNjAwMDhGOEQwMDI0M0MxODgwMDgzNzExMDA4MDkxQUYwMDNDQTEKLToxMDhGNzAwMDMxRUUwMDdGQTFBRTAwM0M4Rjg5MDAyNDkxMkIwMDNDOTQKLToxMDhGODAwMDAxNkM1MDI0QTEyQTAwM0M4RjlGMDAyNDhFNjgwMDE0OUQKLToxMDhGOTAwMDkzRTYwMDNDMkQwNzAwMDEwMDA3MTE0MDAwQzQyODI0N0YKLToxMDhGQTAwMDAwQTIxODI1QTNFMzAwM0M4Rjg3MDAyNDk2NTkwMDEyRTUKLToxMDhGQjAwMEE0RjkwMDMyOEU0NTAwMDQ5MjJFMDA3QzMwQjAwMDAzRUMKLToxMDhGQzAwMDAwMTA3ODIzMzFFRDAwMDMwMEFEMTAyMTMxQ0MwMDAyRjgKLToxMDhGRDAwMDE1ODAwMDAyMjQ0NjAwMzQyNDQ2MDAzMDNDMDI4MDA4RkMKLToxMDhGRTAwMDM0NDMwMDgwOTA3RjAwN0MwMEJGQzgyNDMzMzgwMDA0RTUKLToxMDhGRjAwMDE3MDAwMDAyMjRDMjAwMDQwMEMwMTAyMThGOTgwMDI0MzIKLToxMDkwMDAwMDI0MTkwMDAyQUNFMjAwMzRBMzE5MDAwMDkyNEYwMDNGODMKLToxMDkwMTAwMDhGOEUwMDI0M0MwQzgwMDgzNThCMDA4MEExQ0YwMDAxOEUKLToxMDkwMjAwMDhGOTEwMDI0OTI0RDAwM0Y4RTQ0MDAwNEE2MkQwMDAyMzMKLToxMDkwMzAwMDk1NkEwMDVDMEUwMDBFOUQzMTUwRkZGRjAwMDI0QjgwRDAKLToxMDkwNDAwMDAxMzAzODI1M0MwODQyMDAwMEU4MjgyNUFFMjUwMDA0MDAKLToxMDkwNTAwMDhFNDQwMDM4OEY4NTAwMjRBQ0E0MDAxODhFNDYwMDM0NUUKLToxMDkwNjAwMEFDQTYwMDFDQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0ODYKLToxMDkwNzAwMEE0QTAwMDE2QTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0NUMKLToxMDkwODAwMDhFNjIwMDE0NTA0MDAwMDEyNDAyMDAwMThGQkYwMDIwQjYKLToxMDkwOTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNzYKLToxMDkwQTAwMEFDQTIwMDA4MEEwMDBFQkMyN0JEMDAyODI3QkRGRkM4REYKLToxMDkwQjAwMDNDMDU4MDA4MzRBNDAwODBBRkJGMDAzNEFGQkUwMDMwNTAKLToxMDkwQzAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwNzYKLToxMDkwRDAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQjYKLToxMDkwRTAwMDk0ODMwMDc4OTQ4MjAwN0ExMDQzMDA1MTI0MDVGRkZGOTYKLToxMDkwRjAwMDAwODBGMDIxMEEwMDBGQ0MwMDgwQjgyMTEwOEIwMDREQjkKLToxMDkxMDAwMDhGQkYwMDM0OEY4NjAwODAzQzE4MDgwMDhGMTgwMDVDRTkKLToxMDkxMTAwMDI0MTFGRjgwM0MxNjgwMDAwMzA2NzgyMTAxRjE4MDI0OTEKLToxMDkxMjAwMEFFRDAwMDJDOTZFRTAwN0EzMUVDMDA3RjNDMEQ4MDBFMjQKLToxMDkxMzAwMDMxQ0I3RkZGMDE4RDUwMjEwMDBCNDg0MDAxMkFBODIxMkYKLToxMDkxNDAwMDk2QTQwMDAwM0MwODA4MDA4RDA4MDA1ODI0MDVGRjgwMDQKLToxMDkxNTAwMDMwOTUzRkZGMDEwNjE4MjEwMDE1Mzk4MDAwNjdDODIxQUUKLToxMDkxNjAwMDAzMjVGODI0M0MwMjAxMDAwM0UyOTAyNTMzMzgwMDdGRjgKLToxMDkxNzAwMDNDMTE4MDBDQUVEMjAwMjgwMzExOTAyMTkyNTAwMDBEQkEKLToxMDkxODAwMDMyMEYwMDA0MTFFMDAwMzcwMkUwOTgyMTk2RTMwMDdBRTQKLToxMDkxOTAwMDk2RTgwMDdBOTZFNTAwN0EyNDA0ODAwMDMxMDc3RkZGODQKLToxMDkxQTAwMDI0RTMwMDAxMzA2MjdGRkYwMEE0RjgyNDAzRTJDODI1MTUKLToxMDkxQjAwMEE2RjkwMDdBOTZFNjAwN0EzQzE0MDgwMDhFOTQwMDYwQzYKLToxMDkxQzAwMDMwRDY3RkZGMTJENDAwQzEwMDAwMDAwMDhFNTgwMDE4NzYKLToxMDkxRDAwMDhGODQwMDgwMDJBMDI4MjEyNzEzRkZGRjBFMDAwRTc3NDYKLToxMDkxRTAwMEFFNTMwMDJDOTdENTAwNzg5N0Q0MDA3QTEyOTUwMDEwRDIKLToxMDkxRjAwMDAwMDAyODIxM0MwOTgwMDgzNTI0MDEwMDNDMEE4MDA4MzEKLToxMDkyMDAwMDkxNDgwMDA4OTA4NzAwQzUzMTE0MDA3RjMwRTQwMEZGQ0EKLToxMDkyMTAwMDAyODQzMDJCMTRDMEZGQjkyNjhCMDAwMTkzOEUwMDg4ODYKLToxMDkyMjAwMDI2OEMwMDAxMDA4RTY4MjExNUFDRkZCNzhGODYwMDgwNjgKLToxMDkyMzAwMDhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4NTAKLToxMDkyNDAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OUMKLToxMDkyNTAwMDhGQjEwMDE0OEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4QUYKLToxMDkyNjAwMDI3QkQwMDM4MDBDMDIwMjEwRTAwMEU0MjAyODAyODIxQjgKLToxMDkyNzAwMDhFNEIwMDEwOEU0QzAwMzA4Rjg0MDAyNDI0MDkwMDAyOTUKLToxMDkyODAwMDAxNkM1MDIzQUU0QTAwMTBBMDg5MDAwMDk2RTMwMDVDRjgKLToxMDkyOTAwMDhFNDQwMDMwOEY5MTAwMjQwRTAwMEU5RDMwNzBGRkZGMzEKLToxMDkyQTAwMDAwMDI0MzgwMDExMDI4MjUzQzA3NDIwMDAwQTcxMDI1M0EKLToxMDkyQjAwMEFFMjIwMDA0OEU1RjAwMDQ4RjhBMDAyNDhFNTkwMDAwQzUKLToxMDkyQzAwMDI0MEIwMDA4QUQ1RjAwMUNBRDU5MDAxOEFENDAwMDBDMjgKLToxMDkyRDAwMEFENDAwMDEwOTI0NjAwMEEyNDA0MDAwNTI0MDhDMDAwOTYKLToxMDkyRTAwMDMwRDAwMEZGQTU1MDAwMTQ5NjU4MDAwOEE1NTgwMDE2NkQKLToxMDkyRjAwMDkyNTEwMDBBM0MxODgwMDgzMjJGMDBGRkE1NEYwMDIwMzEKLToxMDkzMDAwMDk2NEUwMDA4MzcxMTAxMDBBNTRFMDAyMkFENDAwMDI0MDIKLToxMDkzMTAwMDkyNEQwMDBCMzFBQzAwRkZBNTRDMDAwMkExNEIwMDAxQTcKLToxMDkzMjAwMDhFNDkwMDMwOEY4MzAwMjQyNDBCRkZCRkFDNjkwMDA4RjYKLToxMDkzMzAwMEEwNjQwMDMwOEY5MDAwMjQyNDAzRkZERjk2MDcwMDMyRTIKLToxMDkzNDAwMDAwRTgyODI0MDBCNTEwMjVBNjAyMDAzMjkyMUYwMDMyNDIKLToxMDkzNTAwMDMzRjkwMDNGMzcyNjAwNDBBMjA2MDAzMjhGOEMwMDI0RUMKLToxMDkzNjAwMEFEODAwMDM0OEUyRjAwQzBBRDhGMDAzODkxOEUwMDNDNTAKLToxMDkzNzAwMDNDMEY3RkZGMzFDRDAwN0ZBMThEMDAzQzhGODQwMDI0MDYKLToxMDkzODAwMDM1RUVGRkZGOTA4QTAwM0MwMTRCNDgyNEEwODkwMDNDNDkKLToxMDkzOTAwMDhGODUwMDI0OTBBODAwM0MwMTAzMzgyNEEwQTcwMDNDM0UKLToxMDkzQTAwMDhFNDIwMDM0OEY5MTAwMjQzQzAzODAwOEFFMjIwMDQwOUUKLToxMDkzQjAwMDhFNTkwMDJDOEU1RjAwMzAwMzNGMzAyM0FFMjYwMDQ0RDAKLToxMDkzQzAwMDkyMzAwMDQ4MzIxODAwN0ZBMjM4MDA0ODhGODgwMDI0NkQKLToxMDkzRDAwMDhFNEQwMDMwOEQwQzAwNDgwMUFFNTgyNDAxOTY1MDI0NkIKLToxMDkzRTAwMDAxNEI0ODI1QUQwOTAwNDg5MjQ0MDAwQUExMDQwMDRDRjUKLToxMDkzRjAwMDk2NDcwMDA4OEY4NTAwMjRBNEE3MDA0RThFNTAwMDMwQTkKLToxMDk0MDAwMDhFNDQwMDMwMEUwMDAyRTY4QzY1MDA2MDkyRjkwMDdDMEMKLToxMDk0MTAwMDAwMDJGOTQwMDA0MDI4MjEwMDAyMTEwMDAzRTIzMDIxM0YKLToxMDk0MjAwMDMzMzYwMDAyMTJDMDAwMDMwMjA2ODAyMTAwMDVCMDgwMUUKLToxMDk0MzAwMDAyMTY4MDIxOTI2RDAwN0MzMUIzMDAwNDEyNjAwMDAyOUMKLToxMDk0NDAwMDAwMDU3MDgwMDIwRTgwMjE4RTRCMDAzMDI0MDU4MDAwQzQKLToxMDk0NTAwMDMxNkEwMDAzMDAwQTQ4MjMzMTI0MDAwMzAyMDQxODIxNjIKLToxMDk0NjAwMDhGOTAwMDI0QUUwMzAwMzQ5NkU0MDA3QTk2RTgwMDdBRTgKLToxMDk0NzAwMDk2RjEwMDdBMzEwNzdGRkYyNEUyMDAwMTMwNUY3RkZGMjEKLToxMDk0ODAwMDAyMjVDODI0MDMzRjMwMjVBNkU2MDA3QTk2RjgwMDdBMjQKLToxMDk0OTAwMDNDMTIwODAwOEU1MjAwNjAzMzBGN0ZGRjExRjIwMDE4NUIKLToxMDk0QTAwMDAwMDAwMDAwOEY4NDAwODAwRTAwMEU3NzAyQTAyODIxQUIKLToxMDk0QjAwMDhGODQwMDgwMEUwMDBFODcwMjgwMjgyMTBFMDAwRUJDRDMKLToxMDk0QzAwMDAwMDAwMDAwMEEwMDBGQzgwMDAwMDAwMDk2RjEwMDdBQkEKLToxMDk0RDAwMDAyMjQ4MDI0QTZGMDAwN0E5MkVGMDA3QTkyRUIwMDdBQzAKLToxMDk0RTAwMDMxRUUwMEZGMDAwRTY5QzIwMDBENjAyNzAwMEM1MUMwNzQKLToxMDk0RjAwMDMxNjkwMDdGMDEyQTIwMjUwQTAwMEZDMkEyRTQwMDdBMDgKLToxMDk1MDAwMDk2RTYwMDdBMDBDNUMwMjRBNkY4MDA3QTkyRUYwMDdBQTkKLToxMDk1MTAwMDkyRjMwMDdBMzFGMjAwRkYwMDEyNzFDMjAwMEU2ODI3NDgKLToxMDk1MjAwMDAwMERCMUMwMzI2QzAwN0YwMTk2MjgyNUEyRTUwMDdBQkIKLToxMDk1MzAwMDBBMDAxMDc5OEY4NDAwODAzQzAzODAwMDMwODRGRkZGOTQKLToxMDk1NDAwMDMwQTVGRkZGQUM2NDAwMThBQzY1MDAxQzAzRTAwMDA4MDgKLToxMDk1NTAwMDhDNjIwMDE0MjdCREZGQTgzQzA2ODAwOEFGQkUwMDUwRjcKLToxMDk1NjAwMEFGQkYwMDU0QUZCNzAwNENBRkI2MDA0OEFGQjUwMDQ0MzIKLToxMDk1NzAwMEFGQjQwMDQwQUZCMzAwM0NBRkIyMDAzOEFGQjEwMDM0N0QKLToxMDk1ODAwMEFGQjAwMDMwMzRDODAxMDA5MTA1MDBDNTkwQzcwMDA4OTUKLToxMDk1OTAwMDMwOUVGRkZGMzBBNTAwRkYzMEUyMDA3RjAwNDUxODJBMTMKLToxMDk1QTAwMEE3QTAwMDE0QTdBMDAwMUUxMDYwMDA1M0FGQTAwMDEwRDkKLToxMDk1QjAwMDkwQzkwMDA4MzEyNjAwN0YwMEE2MjAyMzI0OTNGRkZGRDYKLToxMDk1QzAwMDAwMTM4MDJCMDAxRTg4MkIwMjExNzgyNDUxRTAwMDg0QTgKLToxMDk1RDAwMDhGQjMwMDEwM0MxOTgwMDg5NzM2MDA1Mjk3MzcwMDUwMUYKLToxMDk1RTAwMDAwMUVDNDAwMDJEN0E4MjMwMDE1QTQwMDAwMTQxNDAzMTEKLToxMDk1RjAwMDAzQzI5MDJBMTY0MDAwMDIwMDE4MkMwMzAwNDAyODIxQzQKLToxMDk2MDAwMDAwMTMxNDAwMDAwMjI0MDMwMEE0RjgyQTU3RTAwMDAxMEMKLToxMDk2MTAwMDAwQTAyMDIxMjg4MzAwMDkxNDYwMDAwMjAwODBBMDIxRkUKLToxMDk2MjAwMDI0MTQwMDA4M0MwQTgwMDg4RDQ1MDA0ODAwMTQ0OTgwMzUKLToxMDk2MzAwMDhENDgwMDRDM0MwMzgwMDAzMTI0RkZGRjNDMDYwMDEwQTUKLToxMDk2NDAwMDAwODYzODI1MzQ3MTA0MDBBQzY1MDAzOEFGOTEwMDg0ODEKLToxMDk2NTAwMEFDNjgwMDNDQUM2NzAwMzAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMDk2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMDk2NzAwMDAwMDAwMDAwMDAwMDAwMDA4QzZDMDAwMDMxOEIwMDIwMTYKLToxMDk2ODAwMDExNjBGRkZEMDAxNDY4MkEwMUIwMTAyNDEwNDAwMDM5NTkKLToxMDk2OTAwMDAwMDBBODIxM0MxNjgwMDg5MkQ3MDAwODNDMTI4MDAwRTgKLToxMDk2QTAwMDhFNDQwMTAwMzJGNjAwN0YwRTAwMEU0MjAyQzAyODIxRDcKLToxMDk2QjAwMDhFMkYwMDEwOEU0NDAxMDAwMDAwOTAyMTMxRjczRkZGRjMKLToxMDk2QzAwMDBFMDAwRTVBMDJFMDI4MjE5MjJFMDAwMDMxQzIwMDNGMDcKLToxMDk2RDAwMDJDNTAwMDA4NTIwMDAwMTAwMDAwODgyMTAwMDJGODgwODEKLToxMDk2RTAwMDNDMDMwODAwMjQ2MzUzNTQwM0UzQzgyMThGMzgwMDAwNkYKLToxMDk2RjAwMDAzMDAwMDA4MDAwMDAwMDA5MENFMDAwODkzOEIwMDg4NTMKLToxMDk3MDAwMDMxQ0QwMDdGMDBBRDYwMjMwMTZDNTAyMTBBMDAxMEJGRjUKLToxMDk3MTAwMDI1NTNGRkZGMDAwMDg4MjEzQzEwODAwMDhFMDQwMTAwQ0IKLToxMDk3MjAwMDBFMDAwRTc3MDJFMDI4MjE4RTA0MDEwMDBFMDAwRTg3NDUKLToxMDk3MzAwMDAyQzAyODIxMTIyMDAwMEYwMDEzODAyQjhGOEEwMDg0ODIKLToxMDk3NDAwMDI2QTkwMDAxMDAwOUFDMDAwMjcyOTgyMzAwMTVBQzAzQTEKLToxMDk3NTAwMDI1NDUwMDQwMDJCNEIwMkEwMDEzODAyQjI0MTcwMDAxRDUKLToxMDk3NjAwMDAwQTA4ODIxMDJEMDEwMjRBRjg1MDA4NDE0NDBGRkM5RDYKLToxMDk3NzAwMEFGQjcwMDEwM0MwNzgwMDg5NEYxMDA1MDNDMDU4MDAwMTIKLToxMDk3ODAwMDNDMDYwMDIwMDJCMUM4MjFBNEY5MDA1MEFDQTYwMDMwNkMKLToxMDk3OTAwMDk0RjQwMDUwOTRFMzAwNTIwM0Q1NjAyMzEwNzQwMDFEMkMKLToxMDk3QTAwMDMxOUVGRkZGOENFNTAwNEM4Q0U5MDA0ODAwMTU2MTgwN0MKLToxMDk3QjAwMDAwQUNCMDIxMDAwMEEwMjEwMkNDQTgyQjAxMzQ1MDIxMjQKLToxMDk3QzAwMDAxNTVCODIxQUNGNjAwNENBQ0Y3MDA0ODAwMUU4ODJCQzAKLToxMDk3RDAwMDAyMTE3ODI0MTVFMEZGODAzQzE5ODAwODhGQjMwMDEwMzcKLToxMDk3RTAwMDhGQkYwMDU0OEZCRTAwNTAzQTYyMDAwMThGQjcwMDRDMEIKLToxMDk3RjAwMDhGQjYwMDQ4OEZCNTAwNDQ4RkI0MDA0MDhGQjMwMDNDNTMKLToxMDk4MDAwMDhGQjIwMDM4OEZCMTAwMzQ4RkIwMDAzMDAzRTAwMDA4MTEKLToxMDk4MTAwMDI3QkQwMDU4OTRGMjAwNTQ4Q0VGMDA0NDMyNUZGRkZFRTUKLToxMDk4MjAwMDAwMUZDMEMwMDFGODcwMjFBQ0FFMDAzQzhDRUIwMDQ0QkUKLToxMDk4MzAwMDhDQUQwMDNDMDE2RDQwMjMxOTAwMDAzQjAwMDAwMDAwOEUKLToxMDk4NDAwMDhDRTIwMDQwMjQ0MjAwMDEzQzA3MDA1MDM0RTQwMDEwNDgKLToxMDk4NTAwMDNDMDM4MDAwQUNBMjAwMzhBQzY0MDAzMDAwMDAwMDAwODMKLToxMDk4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMDk4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNzYwMDAwRTYKLToxMDk4ODAwMDMyRDcwMDIwMTJFMEZGRkQzQzExODAwODk2MjgwMDU0REEKLToxMDk4OTAwMDNDMEE4MDAwM0MwNjgwMDgzMTE5MDAwMTAwMTk2MEMwQjQKLToxMDk4QTAwMDAxOEFBMDIxOEU4MzA0MDAzQzA3MDgwMDhDRTcwMDQ0NTUKLToxMDk4QjAwMDNDMTUwMDIwQUNDMzAwNDg4RTg5MDQwNDI0MDUwMDAxMzcKLToxMDk4QzAwMEFDQzkwMDRDMTBFNTAyNTlBRDU1MDAzMDk2M0YwMDUyMkUKLToxMDk4RDAwMDNDMDUwODAwOENBNTAwNDAwMEJGQzAyMUE2MzgwMDUyRkUKLToxMDk4RTAwMDk2MkYwMDU0MjVFRTAwMDFBNjJFMDA1NDk2MjYwMDU0MTMKLToxMDk4RjAwMDMwQzRGRkZGNTQ4N0ZGMzQwMDFFODgyQjMwQTVGRkZGQzQKLToxMDk5MDAwMDBFMDAxMDlEQTYyMDAwNTQzQzA0MDgwMDhDODQwMDI0MDYKLToxMDk5MTAwMDk2MjcwMDUyMDA0NDEwMjMwMEUyOTAyM0E2MzIwMDUyMDIKLToxMDk5MjAwMDBBMDAxMEMxMDAxRTg4MkI4Q0UyMDA0MDBBMDAxMTYyNjAKLToxMDk5MzAwMDNDMDcwMDUwOTIyODAwMDEyNDA3MDAwMTMxMDIwMDdGRkIKLToxMDk5NDAwMDE0NDcwMDFDOTdBQzAwMUU4RTJBMDAxNDI0MEJDMDAwODQKLToxMDk5NTAwMDMxNDQzRkZGMDE4QjQ4MjQzQzA2MDgwMDhDQzYwMDYwNjAKLToxMDk5NjAwMDAxMjQyODI1MzBBNDNGRkYwMDg2ODgyQjEyMjAwMDExRjcKLToxMDk5NzAwMEE3QTUwMDFFM0MxMTA4MDA4RTMxMDA1ODhGODIwMDgwODAKLToxMDk5ODAwMDAwMDQ0MTgwMjQwN0ZGODAwMjIyMTgyMTAwNjhGODIxOEEKLToxMDk5OTAwMDAzRTdDODI0MzNFRjAwN0YzQzE4ODAwMDNDMTI4MDBFQTAKLToxMDk5QTAwMEFGMTkwMDJDMDFGMjY4MjE5MUFFMDAwRDM1RDAwMDA0RjIKLToxMDk5QjAwMEExQjAwMDBEMEUwMDBFRDEyNDEyMDAwMTI0MTEwMDAxRUYKLToxMDk5QzAwMDNDMTA4MDAwOEUwNDAxMDAwRTAwMEU3NzAyRTAyODIxN0EKLToxMDk5RDAwMDhFMDQwMTAwMEUwMDBFODcwMkMwMjgyMTE2MjBGRjU4QjkKLToxMDk5RTAwMDhGOEEwMDg0MEEwMDExMkMwMDEzODAyQjhGODYwMDg0M0MKLToxMDk5RjAwMDkwQzkwMDAxMzEyNTAwMjAxMEEwMDE4QTI0MTAwMDAxMjcKLToxMDlBMDAwMDNDMDQ4MDA4MzQ4QzAwODA5MThCMDA3QzhGOTEwMDIwNzYKLToxMDlBMTAwMDAwMDA5MDIxMzE2QTAwMDExMTQwMDAwRkFGQjAwMDIwMUEKLToxMDlBMjAwMDhDRDAwMDE0OEM4RTAwNjAwMjBFNjgyQjE1QTAwMDAzRjEKLToxMDlBMzAwMDAyMDAzODIxOEM4NzAwNjAzQzA0ODAwODM0ODMwMDgwNTkKLToxMDlBNDAwMDhDNzIwMDcwMDBGMjc4MkIxNUUwMDAwMjAwRTAyMDIxRkIKLToxMDlBNTAwMDhDNjQwMDcwMDA4MDkwMjEzQzA3ODAwODM0RTUwMDgwMTEKLToxMDlBNjAwMDhDRDkwMDE0OENCRjAwNzAwMzNGQzAyQjE3MDAwMDAyN0MKLToxMDlBNzAwMDAzMjAyMDIxOENBNDAwNzAwMDkyMTgyMzEwNjAwMDAzQTIKLToxMDlBODAwMEFGQTMwMDI4MjQwODAwMDJBRkE4MDAyMDhGQTUwMDIwNjMKLToxMDlBOTAwMDAyNjUxMDJCMTQ0MDAwQjUwMDAwMTgyMThDQzQwMDM4NUEKLToxMDlBQTAwMDhFMkYwMDBDM0MxODAwODBBRTI0MDAwMDhDQ0UwMDM0QjkKLToxMDlBQjAwMDNDMTBGRjlGMDFGODYwMjVBRTJFMDAwNDkwQ0IwMDNGQzQKLToxMDlBQzAwMDM2MERGRkZGMDE4RDQ4MjQzQzBBMDAyMDNDMDZGRkVGQzUKLToxMDlBRDAwMEEyMkIwMDBCMDEyQTM4MjUzNEM1RkZGRjAwRTU0MDI0RTYKLToxMDlBRTAwMDNDMDIwMDA4OEY4NzAwODQwMTAyMjAyNUFFMjQwMDBDNzAKLToxMDlBRjAwMDhDRTMwMDE0QUUyMDAwMTg4RkFGMDAyOEFFMjMwMDE0QjIKLToxMDlCMDAwMDhDRjgwMDE4M0MxRkZGRkIzN0Y5RkZGRkFFMzgwMDFDMzQKLToxMDlCMTAwMDhDRUUwMDA4MDA5OTY4MjQwMjRGODAyMUFFMkUwMDI0QUMKLToxMDlCMjAwMDhDRUMwMDBDQUUyRDAwMENBNjIwMDAzOEE2MjAwMDNBQ0MKLToxMDlCMzAwMEFFMzAwMDJDQUUyQzAwMjBBRTIwMDAyODhDRUIwMDE0QTAKLToxMDlCNDAwMDhGQUEwMDI4MDE3MjQ4MjMwMTJBMzAyMzEwQzAwMDExNzcKLToxMDlCNTAwMEFFMjYwMDEwOTBGMDAwM0Q4RTJDMDAwNDhFMkEwMDAwRUUKLToxMDlCNjAwMDAwMTA2OTAwMDE4RDI4MjEwMDAwMTAyMTAwQUQzMDJCNkMKLToxMDlCNzAwMDAxNDI0ODIxMDEyNjQwMjFBRTI1MDAwNEFFMjgwMDAwMDQKLToxMDlCODAwMDkwRTMwMDNEQTIyMzAwMEE4RjlGMDA4NDk3RjkwMDA2MEUKLToxMDlCOTAwMEE2MzkwMDA4OEY4QTAwMjQyNDAyMDAwMjNDMDY4MDA4QUYKLToxMDlCQTAwMEExNDIwMDAwMzRDOTAwODA5NTI1MDA1QzAyNDAyMDIxQkMKLToxMDlCQjAwMDhGOTAwMDI0MzBBOEZGRkYwRTAwMEU5REFGQTgwMDI0NTgKLToxMDlCQzAwMDhGQTMwMDI0MDAwMkZCODA4Rjg1MDA4NDNDMDQ0MjAwQTgKLToxMDlCRDAwMDAzRTNDODI1MDMyNEMwMjVBRTE4MDAwNDhGODQwMDI0QTUKLToxMDlCRTAwMDhDQUYwMDM4QUM4RjAwMTg4Q0FFMDAzNEFDOEUwMDFDRUIKLToxMDlCRjAwMEFDODAwMDBDQUM4MDAwMTBBNDgwMDAxNEE0ODAwMDE2N0YKLToxMDlDMDAwMEE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNDkwQTcwMDNGMDQKLToxMDlDMTAwMEE0ODcwMDAyNTI0MDAxOEMyNDA3MDAwMThGQUIwMDI4NkEKLToxMDlDMjAwMDUxNjAwMDAyOTBBMjAwM0Q5MEEyMDAzRTI0NEMwMDAxMzEKLToxMDlDMzAwMEEwOEMwMDAxOEY4NDAwMjRBQzkyMDAwODNDMTg4MDA4OUUKLToxMDlDNDAwMDM3MTAwMDgwOTIwRjAwN0MzMUVFMDAwMjE1QzAwMDAyMzgKLToxMDlDNTAwMDI0MDcwMDM0MjQwNzAwMzA4Rjg1MDA4NDNDMDg4MDA4RTYKLToxMDlDNjAwMDM1MDkwMDgwOTBBMzAwMDA5MTI4MDA3QzMyNTkwMDAzNDAKLToxMDlDNzAwMEEwODMwMDMwOEY5RjAwODQ4RjkwMDAyNDI0MDQwMDA0NzAKLToxMDlDODAwMDkzRjgwMDAxMDA5OTc4MjMyNDBEQzAwMEEyMTgwMDMxMzgKLToxMDlDOTAwMDhGOTkwMDI0OEY4RTAwODQzMUU1MDAwMzk3MkMwMDMyQzkKLToxMDlDQTAwMDk1Q0IwMDEyMDBGMjQ4MjEwMThENTAyNDMxNjIzRkZGMTQKLToxMDlDQjAwMDAxNDIzMDI1QTcyNjAwMzI5MzIzMDAzMjAxMjUzODIxQTYKLToxMDlDQzAwMDMxMDgwMDA0MzA3RjAwM0YzN0U0MDA0MEEzMjQwMDMyMTUKLToxMDlDRDAwMDEyNDAwMDAyOEY4NTAwMjQwMEU4MzgyMTNDMEM4MDA4RTcKLToxMDlDRTAwMEFDQTcwMDM0MzU4QjAxMDA4RDYyMDBDMDJFNDQwMDAxMEEKLToxMDlDRjAwMDI0MDNGRkRGQUNBMjAwMzg5MEFBMDAzQzAwMDRDOTQwNTYKLToxMDlEMDAwMDMxNDYwMDdGQTBBNjAwM0M4Rjg5MDAyNDI0MDVGRkJGQjgKLToxMDlEMTAwMDkxMjcwMDNDMDBFNTQwMjRBMTI4MDAzQzhGOEYwMDI0QkYKLToxMDlEMjAwMDkxRkYwMDNDMDNFM0MwMjQwMzE5ODAyNUExRjAwMDNDMEYKLToxMDlEMzAwMDhGOEIwMDg0OEY4QTAwMjQ4RDZFMDAyMEFENEUwMDQwRjIKLToxMDlENDAwMDhENkQwMDI0QUQ0RDAwNDQ4RDZDMDAyOEFENEMwMDQ4NTUKLToxMDlENTAwMDhENjIwMDJDMEUwMDBFQkNBRDQyMDA0QzhGQTYwMDIwODAKLToxMDlENjAwMDI0MDcwMDAyMTBDNzAwMTE4RkEzMDAyMDAwMDMyMDJCM0UKLToxMDlENzAwMDAwMDQ4MDIzMDI3MDk4MjQwMDYwODAyMTAwNjA5MDIxRkMKLToxMDlEODAwMDBBMDAxMTE1MDAxMDg4MkI5NjI3MDAxMjhGODQwMDgwN0UKLToxMDlEOTAwMDAwMDA5MDIxMzBFNUZGRkZBN0E3MDAxNDBFMDAwRTZCMTYKLToxMDlEQTAwMDI0MTEwMDAxMEEwMDExQzAzQzEwODAwMDNDMTk4MDAwMDEKLToxMDlEQjAwMDNDMDI4MDA4OEYyNDAxMDA5MDU4MDAwODBFMDAwRTQyREIKLToxMDlEQzAwMDMzMDUwMDdGOEY4RTAwMjQ4RkFGMDAyMDhGQTQwMDI4RTIKLToxMDlERDAwMEExQ0YwMDAwMEUwMDBFOUQ4RjkwMDAyNDhGQUQwMDI0QjcKLToxMDlERTAwMDAwMDIzQjgwM0MwQjQyMDAwMEVENDAyNThGODcwMDg0NDEKLToxMDlERjAwMDAxMEIyMDI1QUUwNDAwMDQ4Q0U1MDAzODhGOTAwMDI0NzAKLToxMDlFMDAwMDAwMDA1MDIxMDAwQTE5MDBBRTA1MDAxODhDRUMwMDM0NDcKLToxMDlFMTAwMDNDMDg3RkZGMzUwNEZGRkZBRTBDMDAxQzkwRTkwMDNFQkMKLToxMDlFMjAwMDhFMUYwMDFDOEUxODAwMTgwMDA5QzkwMDAwMDkzNzAyOTcKLToxMDlFMzAwMDAzRjk2ODIxMDA2NjEwMjUwMUI5NzgyQjAzMDI3MDIxMEYKLToxMDlFNDAwMDAxQ0Y1ODIxQUUwRDAwMUNBRTBCMDAxOEFFMDAwMDBDNjcKLToxMDlFNTAwMEFFMDAwMDEwOTBFNTAwM0U4RkFGMDAyODI0MEUwMDA1RjQKLToxMDlFNjAwMEE2MDUwMDE0OTRFQzAwMDQyNDA1QzAwMDAxRTQ1ODI0NjUKLToxMDlFNzAwMEE2MEMwMDE2OTBFQTAwM0UwMUUwMjAyMUE2MEEwMDIwNzAKLToxMDlFODAwMDk0RTYwMDA0QTYwNjAwMjJBRTAwMDAyNDkwRTMwMDNGMDIKLToxMDlFOTAwMEE2MDMwMDAyOTBFOTAwM0U5MEZGMDAzRDAzRTlDODIzQkQKLToxMDlFQTAwMDI3MzgwMDAxQTIxODAwMDE4RjhEMDAyNDNDMTA4MDA4ODMKLToxMDlFQjAwMEFEQUYwMDA4QTFBRTAwMzA4Rjk4MDAyNDhGODIwMDg0REYKLToxMDlFQzAwMDM2MEYwMTAwOTcwQzAwMzI5NDRBMDAxMjI0MTBGRjgwRDQKLToxMDlFRDAwMDAwQUMzODI0MzE0NjNGRkYwMEU2MTgyNUE3MDMwMDMyQzYKLToxMDlFRTAwMDkzMDkwMDMyMjQwNUZGQkYyNDAzRkZERjMxM0YwMDNGMDkKLToxMDlFRjAwMDM3RjkwMDQwQTMxOTAwMzI4RjhDMDAyNDI0MThGRkZGOEIKLToxMDlGMDAwMEFEODAwMDM0OERFRTAwQzBBRDhFMDAzODkxOEQwMDNDRTgKLToxMDlGMTAwMDMxQTIwMDdGQTE4MjAwM0M4Rjg3MDAyNDkwRUEwMDNDQTAKLToxMDlGMjAwMDAxNDUzMDI0QTBFNjAwM0M4Rjk5MDAyNDkzMjkwMDNDOTEKLToxMDlGMzAwMDAxMjNGODI0QTMzRjAwM0M4RjhEMDAyNDNDMUY4MDA4QTAKLToxMDlGNDAwMEFEQjgwMDQwQURCMjAwNDQ5MUFGMDA0ODNDMTI4MDAwNzMKLToxMDlGNTAwMDAxRjA3MDI1QTFBRTAwNDg4Rjg3MDAyNDhGODYwMDg0MTEKLToxMDlGNjAwMDhDRUMwMDQ4MDE5MjEwMjQwMDRCNTAyNUFDRUEwMDQ4Q0MKLToxMDlGNzAwMDkwQzUwMDNFQTBFNTAwNEM4Rjg4MDA4NDhGODMwMDI0QUMKLToxMDlGODAwMDk1MDkwMDA0QTQ2OTAwNEU4RkU1MDA2MDBFMDAwMkU2MEEKLToxMDlGOTAwMDAwMDAwMDAwOEY5OUZGMkM4RkFFMDAyODAwMDI4MTQwNDYKLToxMDlGQTAwMDkzMkYwMDdDMDAwMkMxMDAwMjE4NjgyMTMxRjIwMDAyRTgKLToxMDlGQjAwMDAwNDAyODIxMTY0MDAwQUEwMUNEMzAyMTNDMEE4MDA4MkIKLToxMDlGQzAwMDM1NDMwMDgwOTA2OTAwN0MzMTNGMDAwNDEzRTAwMDAzQkEKLToxMDlGRDAwMDhGQUUwMDI4MDAwNTYwODAwMENDMzAyMTI0MEQwMDA0RTUKLToxMDlGRTAwMDhGOTAwMDI0MzFDNzAwMDMwMUE3NTgyMzMxNjgwMDAzNzQKLToxMDlGRjAwMDAwQzgyMDIxQUUwNDAwMzQzQzA2ODAwOEE2MjUwMDM4QTUKLToxMEEwMDAwMDNDMDU4MDAwOENBNDAxMDA5MEQxMDAwODBFMDAwRTg3NTIKLToxMEEwMTAwMDMyMjUwMDdGMEUwMDBFQkMwMDAwMDAwMDBBMDAxMkFBQ0MKLToxMEEwMjAwMDhGQTMwMDIwOEY4NTAwMjA4Q0MyMDAzODI0MTgwMDAzRTUKLToxMEEwMzAwMEE0QTAwMDA4QUNBMjAwMDA4Q0RGMDAzNEEwQTAwMDBBOUQKLToxMEEwNDAwMDhGOTIwMDg0QUNCRjAwMDQzQzA0MDA4MDkyNEYwMDNGMUMKLToxMEEwNTAwMEEwQjgwMDBDOENBRTAwMEMzQzBERkY5RkEwQUYwMDBCMTUKLToxMEEwNjAwMDAxQzQ0MDI1MzVBQkZGRkYzQzExRkZFRjhGOTgwMDg0MDIKLToxMEEwNzAwMDAxMEIzMDI0MzYzOUZGRkYwMEQ5NjAyNEFDQUMwMDBDNTIKLToxMEEwODAwMDhGMDMwMDE0OTcxRjAwMTI4Rjg3MDA4MEFDQTMwMDEwNkQKLToxMEEwOTAwMDhGMDkwMDE0QUNBMDAwMThBQ0EwMDAyMEFDQTkwMDE0REIKLToxMEEwQTAwMEFDQTAwMDI0OEYwQTAwMTgzM0U5M0ZGRjAwMDkxMTgwOUIKLToxMEEwQjAwMEFDQUEwMDI4OEYxMjAwMDgwMDQ3NzgyMTMzRUUwMDAxNzcKLToxMEEwQzAwMEFDQjIwMDMwOEYwODAwMEM4Rjk5MDAyNDAwMEY2OUMyRDkKLToxMEEwRDAwMDAwMEUyMzgwMDFBNDU4MjEyNDExMDAwMjNDMDY4MDA4QjAKLToxMEEwRTAwMEE0QUIwMDFDQTRBMDAwMzRBQ0E4MDAyQ0EzMzEwMDAwMzkKLToxMEEwRjAwMDM0RDkwMDgwOTcyQzAwNUM4RjhGMDAyNDNDMDM0MjAwRjEKLToxMEExMDAwMDMxOEFGRkZGMDE0MzM4MjVBREU3MDAwNDhGODIwMDg0QzgKLToxMEExMTAwMDI0MTgwMDAxMjQxMUMwMDA4QzVGMDAzODI0MDcwMDM0OEIKLToxMEExMjAwMEFERkYwMDE4OEM1MjAwMzRBREYyMDAxQ0FERTAwMDBDMDUKLToxMEExMzAwMEFERTAwMDEwQTVFMDAwMTRBNUUwMDAxNkE1RTAwMDIwQTkKLToxMEExNDAwMEE1RTAwMDIyQURFMDAwMjRBNUYwMDAwMkExRjgwMDAxODYKLToxMEExNTAwMDhGOEIwMDI0OEY4RTAwODRBRDcwMDAwODkxQ0QwMDAwOUQKLToxMEExNjAwMEExNkQwMDMwOEY4ODAwODQ4Rjg0MDAyNDkxMDUwMDAxNDgKLToxMEExNzAwMEEwODUwMDMxOEY5MjAwMjQ5NjRDMDAzMjAxOTE1MDI0MkEKLToxMEExODAwMDAxNDkxODI1QTY0MzAwMzI5MjVGMDAzMjMzRTIwMDNGQjYKLToxMEExOTAwMEEyNDIwMDMyOTMzODAwN0MzMzBGMDAwMjE1RTAwMDAyMjcKLToxMEExQTAwMDhGODQwMDI0MjQwNzAwMzAzQzAyODAwOEFDODcwMDM0RjAKLToxMEExQjAwMDM0NTIwMTAwOEU1RjAwQzAyNDBFRkZCRjAyMDA5MDIxQzgKLToxMEExQzAwMEFDOUYwMDM4OTA5ODAwM0MzMzBGMDA3RkEwOEYwMDNDN0MKLToxMEExRDAwMDhGODgwMDI0OTEwRDAwM0MwMUFFNTgyNEExMEIwMDNDNTcKLToxMEExRTAwMDhGODYwMDI0OTBEMTAwM0MzNjM5MDAyMEEwRDkwMDNDNTUKLToxMEExRjAwMDhGOEEwMDg0OEY4NTAwMjQwMDEwODgyQjhENEMwMDIwQ0UKLToxMEEyMDAwMEFDQUMwMDQwOEQ0MzAwMjRBQ0EzMDA0NDhENDkwMDI4MzEKLToxMEEyMTAwMEFDQTkwMDQ4OEQ0NzAwMkNBQ0E3MDA0QzBFMDAwRUJDMkEKLToxMEEyMjAwMDNDMTA4MDAwMEEwMDExMTYwMDAwMDAwMDk0Q0QwMDUyN0UKLToxMEEyMzAwMDNDMEIwODAwOEQ2QjAwMjQwMTZEODgyMUE0RDEwMDUyRDUKLToxMEEyNDAwMDBBMDAxMEMxMDAxRTg4MkJBMDg3MDAwMThGODQwMDI0MDMKLToxMEEyNTAwMDI0MEQwMDAxQUM4RDAwMDgwQTAwMTI1RjNDMTg4MDA4MzQKLToxMEEyNjAwMDAwMDI5MDgwMEEwMDEzM0UwMEQyMzAyMTI3QkRGRkUwOUIKLToxMEEyNzAwMDNDMEQ4MDA4QUZCMjAwMThBRkIwMDAxMEFGQkYwMDFDOUIKLToxMEEyODAwMEFGQjEwMDE0MzVCMjAwODA4RTRDMDAxODM1QTgwMTAwMjMKLToxMEEyOTAwMDk2NEIwMDA2OTVBNzAwNTA5MTA5MDBFQzAwMEM1NjAyNjEKLToxMEEyQTAwMDAxNjcyODIzMzE0MzAwN0YzMTI2MDBGRjI0MDIwMDAzODkKLToxMEEyQjAwMEEzODMwMDg4QUY4NDAwODAxMEMyMDAxQjMwQjBGRkZGNzIKLToxMEEyQzAwMDkxMDYwMEVDMjQxMjAwMDUzMEMyMDBGRjEwNTIwMDMzNEEKLToxMEEyRDAwMDAwMDAwMDAwMTYwMDAwMDk4RkJGMDAxQzhGQjIwMDE4OUMKLToxMEEyRTAwMDhGQjEwMDE0OEZCMDAwMTAyNDBEMEMwMDNDMEM4MDAwQzYKLToxMEEyRjAwMDI3QkQwMDIwMDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NEYKLToxMEEzMDAwMDAyMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RjMKLToxMEEzMTAwMDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDI3QkQwMDIwRTUKLToxMEEzMjAwMDAzRTAwMDA4QUQ4RDAwMjQ5NjU4MDA3ODk2NTEwMDdBMUQKLToxMEEzMzAwMDkyNEUwMDdEMDIzODc4MjYzMUU4RkZGRjMxQzQwMEMwMUMKLToxMEEzNDAwMDE0ODAwMDA5MkQxMTAwMDExNjAwMDAzNzAwMDAwMDAwRTQKLToxMEEzNTAwMDU2MjBGRkUyOEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwQTUKLToxMEEzNjAwMDBBMDAxNDA2OEZCRjAwMUMxNjIwRkZEQTAwMDAwMDAwNTAKLToxMEEzNzAwMDBFMDAwRjdBMDAwMDAwMDAxNDQwRkZEODhGQkYwMDFDQjEKLToxMEEzODAwMDE2MDAwMDIyMDAwMDAwMDA5MjVGMDA3RDMzRTIwMDNGRDMKLToxMEEzOTAwMEEyNDIwMDdEMEEwMDE0MDY4RkJGMDAxQzk1MDkwMERBNTYKLToxMEEzQTAwMDhGODYwMDYwMDA4MDI4MjEyNDA0MDAwNTBFMDAwNjc0QkEKLToxMEEzQjAwMDMxMzBGRkZGOTc4MzAwNzIzQzA0ODAwMDI0NjVGRkZGNkIKLToxMEEzQzAwMEE3ODUwMDcyOEM4QTAxQjgwNTQwRkZGRTAwMDAwMDAwREUKLToxMEEzRDAwMEFDODAwMTgwOEZCRjAwMUNBQzkwMDE4NDhGQjIwMDE4NEMKLToxMEEzRTAwMDhGQjEwMDE0OEZCMDAwMTAzQzA3NjAxMzNDMEIxMDAwQkQKLToxMEEzRjAwMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEFDODcwMTg4OTgKLToxMEE0MDAwMEFDOEIwMUI4MDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NTEKLToxMEE0MTAwMDAyMDAyMDIxNTA0MEZGQjE4RkJGMDAxQzkyNUYwMDdERTEKLToxMEE0MjAwMDBBMDAxNDMzMzNFMjAwM0YwRTAwMTBBNDAyMDAyMDIxODIKLToxMEE0MzAwMDE0NDBGRkFBOEZCRjAwMUMxMjIwMDAwNzAwMDAwMDAwN0MKLToxMEE0NDAwMDkyNTkwMDdEMzMzMDAwM0YzNjAyMDA0MEEyNDIwMDdEMjkKLToxMEE0NTAwMDBBMDAxNDA2OEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwRDcKLToxMEE0NjAwMDUwNDBGRjlFOEZCRjAwMUM5MjU5MDA3RDMzMzAwMDNGNEIKLTowOEE0NzAwMDBBMDAxNDYyMzYwMjAwNDBFQwotOjA4QTQ3ODAwMDAwMDAwMDAwMDAwMDAxQkMxCi06MTBBNDgwMDAwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNkE1Ci06MTBBNDkwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNEFBCi06MTBBNEEwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0EwCi06MTBBNEIwMDAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkzCi06MTBBNEMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjg0Ci06MTBBNEQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjc0Ci06MTBBNEUwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjY0Ci06MENBNEYwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE1RAotOjA0QTRGQzAwODAwODAxMDBEMwotOjEwQTUwMDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzAwMDAwMDMwODBGRgotOjEwQTUxMDAwMDgwMDBGNDgwODAwMEZGNDA4MDAxMDBDMDgwMDEwMjA3NQotOjEwQTUyMDAwMDgwMDEwMzQwODAwMEY0ODA4MDAwRjQ4MDgwMDEwNjhBMQotOjEwQTUzMDAwMDgwMDEwQTAwODAwMTBCMDA4MDAxMEQ4MDgwMDE3QzhDNAotOjEwQTU0MDAwMDgwMDE3QzgwODAwMTgwMDA4MDAxODAwMDgwMDE4MTRCMAotOjEwQTU1MDAwMDgwMDE3RTQwODAwMUEzQzA4MDAxQTA4MDgwMDFBOTRCQQotOjEwQTU2MDAwMDgwMDFBOTQwODAwMUIxQzA4MDAxQTRDODAwODAyNDBCRQotOjEwQTU3MDAwMDgwMDIxQTgwODAwMUZGNDA4MDAyMUQwMDgwMDIyNjg2NAotOjEwQTU4MDAwMDgwMDIzQjgwODAwMjQwNDA4MDAyNTI4MDgwMDI0MzAwNwotOjEwQTU5MDAwMDgwMDI0QjQwODAwMjA2NDA4MDAyOUQwMDgwMDI5NzRBOQotOjEwQTVBMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI1OUMzQQotOjEwQTVCMDAwMDgwMDI1OUMwODAwMjAxMDA4MDAyMDEwMDgwMDI4NENFNgotOjEwQTVDMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBBQgotOjEwQTVEMDAwMDgwMDI4QUMwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBGNwotOjEwQTVFMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA4QgotOjEwQTVGMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA3QgotOjEwQTYwMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI0MjQ1MgotOjEwQTYxMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyOTFDMDgwMDIwMTA0NQotOjEwQTYyMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA0QQotOjEwQTYzMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAzQQotOjEwQTY0MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAyQQotOjEwQTY1MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAxQQotOjEwQTY2MDAwMDgwMDI3NzAwODAwMjAxMDA4MDAyMDEwMDgwMDI2RTRDOQotOjEwQTY3MDAwMDgwMDI2NDAwODAwMzc4ODA4MDAzNzVDMDgwMDM3MjhBMwotOjEwQTY4MDAwMDgwMDM2RkMwODAwMzZEQzA4MDAzNjkwODAwODAxMDAxRgotOjEwQTY5MDAwODAwODAwODA4MDA4MDAwMDgwMDgwMDgwMDgwMDQ2RjBFNAotOjEwQTZBMDAwMDgwMDQ3MjgwODAwNDY3MDA4MDA0NkYwMDgwMDQ2RjBGOQotOjBDQTZCMDAwMDgwMDQ0NTAwODAwNDZGMDA4MDA0QUM0QUUKLTowNEE2QkMwMDBBMDAwQzc2MEUKLToxMEE2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM1RUUKLToxMEE2RDAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMzAwMDAwMDAwMTkKLToxMEE2RTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEE2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEE3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEE3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEE3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEE3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEE3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEE3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEE3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEE3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEE3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEE3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEE4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEE4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEE4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEE4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEE4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwNzUKLToxMEQ4QTAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMTI0NDI4MjIwMEYKLToxMEQ4QjAwMDNDMDMwODAxMjQ2MzgyRTBBQzQwMDAwMDAwNDMyMDJCQkQKLToxMEQ4QzAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDNkUKLToxMEQ4RDAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMzFEODNDMUMwODAxQTAKLToxMEQ4RTAwMDI3OUM4MjIwMEUwMDExRUEwMDAwMDAwMDAwMDAwMDBEQkQKLToxMEQ4RjAwMDNDMDI4MDAwMzBBNUZGRkYzMEM2MDBGRjM0NDMwMTgwQUEKLToxMEQ5MDAwMDNDMDg4MDAwOEQwOTAxQjgwNTIwRkZGRTAwMDAwMDAwRTIKLToxMEQ5MTAwMEFDNjQwMDAwMjQwNDAwMDJBNDY1MDAwOEEwNjYwMDBBQUMKLToxMEQ5MjAwMEEwNjQwMDBCQUM2NzAwMTgzQzAzMTAwMDAzRTAwMDA4ODMKLToxMEQ5MzAwMEFEMDMwMUI4M0MwNTYwMDA4Q0EyNEZGODA0NDBGRkZFMjcKLToxMEQ5NDAwMDAwMDAwMDAwQUNBNDRGQzAzQzAzMTAwMDNDMDQwMjAwRTcKLToxMEQ5NTAwMEFDQTQ0RkM0MDNFMDAwMDhBQ0EzNEZGODk0ODYwMDBDQkQKLToxMEQ5NjAwMDAwQTA1MDIxMjQ4ODAwMTQwMDA2MkIwMjAwMDUxMDgwMUUKLToxMEQ5NzAwMDAwNDQ0ODIxMDEwOTE4MkIxMDYwMDAxMTAwMDAwMDAwMkMKLToxMEQ5ODAwMDkxMDMwMDAwMkM2NDAwMDk1MDgwMDAwOTkxMTkwMDAxRTYKLToxMEQ5OTAwMDAwMDM2MDgwM0MwRDA4MDEyNUFEODBFNDAxOEQ1ODIxMTUKLToxMEQ5QTAwMDhENjcwMDAwMDBFMDAwMDgwMDAwMDAwMDkxMTkwMDAxRjAKLToxMEQ5QjAwMDAxMTk0MDIxMDEwOTMwMkI1NEMwRkZGMjkxMDMwMDAwRUUKLToxMEQ5QzAwMDAzRTAwMDA4MDAwMDEwMjEwQTAwMENCRTI1MDgwMDAxMzkKLToxMEQ5RDAwMDkxMEYwMDAxMjQwRTAwMEExNUVFMDA0MDAxMjhDODIzMTMKLToxMEQ5RTAwMDJGMzgwMDBBMTcwMDAwM0QyNTBEMDAwMjhENTgwMDAwNTkKLToxMEQ5RjAwMDI1MEYwMDA2MzcwRTAxMDBBRDRFMDAwMDkxMEMwMDAyMEQKLToxMERBMDAwMDkxQUIwMDAxOTFBNDAwMDI5MUE2MDAwMzAwMEMyRTAwMkUKLToxMERBMTAwMDAwMEIzQzAwMDBBNzEwMjUwMDA0MUEwMDAwNDNDODI1OTUKLToxMERBMjAwMDAzMjZDMDI1QUQ1ODAwMDQ5MTBFMDAwNjkxRUQwMDAxQkIKLToxMERBMzAwMDkxRTcwMDAyOTFFNTAwMDMwMDBFNUUwMDAwMEQ2NDAwMTYKLToxMERBNDAwMDAxNkMzMDI1MDAwNzIyMDAwMEM0MTAyNTAwNDUxODI1NzAKLToxMERBNTAwMDI1MDgwMDBBMEEwMDBDQkVBRDQzMDAwODkxMEYwMDAxMjIKLToxMERBNjAwMDI1MDQwMDAyMjQwODAwMDI1NUU4MDAwMTAxMjAyMDIxQkQKLToxMERBNzAwMDBBMDAwQ0JFMDA4MDQwMjE5MTBDMDAwMTI0MEIwMDAzMjEKLToxMERBODAwMDE1OEIwMDE2MDAwMDAwMDA4RDU4MDAwMDkxMEUwMDAyNUEKLToxMERBOTAwMDI1MDgwMDAzMzcwRDAwMDhBMTRFMDAxMDBBMDAwQ0JFMzcKLToxMERBQTAwMEFENEQwMDAwOTExOTAwMDEyNDBGMDAwNDE3MkYwMDBCNDkKLToxMERBQjAwMDAwMDAwMDAwOTEwNzAwMDI5MTA0MDAwMzhENDMwMDAwNjQKLToxMERBQzAwMDAwMDcyQTAwMDBBNDEwMjUzNDY2MDAwNDI1MDgwMDA0N0QKLToxMERBRDAwMEFENDIwMDBDMEEwMDBDQkVBRDQ2MDAwMDAzRTAwMDA4OTkKLToxMERBRTAwMDI0MDIwMDAxMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwNTMKLToxMERBRjAwMDBFMDAxNEUwMDA4MDgwMjEzQzA0ODAwODM0ODUwMDgwMDIKLToxMERCMDAwMDkwQTYwMDA1MjQwM0ZGRkUwMjAwMjAyMTAwQzMxMDI0N0MKLToxMERCMTAwMDhGQkYwMDE0OEZCMDAwMTBBMEEyMDAwNTBBMDAxNEVBMDUKLToxMERCMjAwMDI3QkQwMDE4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0QKLToxMERCMzAwMDBFMDAwRjRFMDA4MDgwMjEzQzA2ODAwODM0QzUwMDgwMTYKLToxMERCNDAwMDkwQTQwMDAwMjQwMjAwNTAzMDgzMDBGRjEwNjIwMDA3MDAKLToxMERCNTAwMDNDMDk4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEMKLToxMERCNjAwMEFEMjAwMTgwMEEwMDEwMTAyN0JEMDAxODI0MDgwMTAwMTQKLToxMERCNzAwMDNDMDc4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwRUUKLToxMERCODAwMEFDRTgwMTgwMEEwMDEwMTAyN0JEMDAxODI3QkRGRjcwMDcKLToxMERCOTAwMDNDMDg4MDA4QUZCNjAwODBBRkI1MDA3Q0FGQjEwMDZDMjgKLToxMERCQTAwMEFGQkYwMDhDQUZCRTAwODhBRkI3MDA4NEFGQjQwMDc4QzEKLToxMERCQjAwMEFGQjMwMDc0QUZCMjAwNzBBRkIwMDA2ODM1MDUwMDgwM0QKLToxMERCQzAwMDNDMDc4MDAwOENGMjAxMjg5MEE0MDAwOUFDRTAwMDg0OUUKLToxMERCRDAwMDkwQTYwMDA1MzA5MTAwRkYwMDAwQTgyMTAwMDYxODI3M0MKLToxMERCRTAwMDMwNjIwMDAxMDAwMEIwMjExNDQwMDA2N0FGQTAwMDUwNzcKLToxMERCRjAwMDkwQTkwMDAwMjQwNTAwMjAzMTI0MDBGRjEwODUwMDE2QTQKLToxMERDMDAwMDI0MEEwMDUwMTA4QTAwOEMwMDAwMDAwMDNDMEMwODAwMjAKLToxMERDMTAwMDhEOEMwMERDMjU4QjAwMDEzQzAxMDgwMEFDMkIwMERDNjYKLToxMERDMjAwMDBFMDAxNUQ2MDAwMDAwMDA4RkJGMDA4QzhGQkUwMDg4NEMKLToxMERDMzAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4REEKLToxMERDNDAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4MUEKLToxMERDNTAwMDAzRTAwMDA4MjdCRDAwOTAwMDAwMDAwRDNDMTA4MDAwOEMKLToxMERDNjAwMEFGQTAwMDMwOTYxRjAxMTY4RTE5MDEwNDNDMUUwMDIwNDMKLToxMERDNzAwMDM2MTMwQzAwMDMzRUMwMjQwMDE4QjgyQjAwMTczMTQwQTcKLToxMERDODAwMEFGQTYwMDMwOEUwRTAxMDQzM0Y0RkZGRjNDMEYwMDQwQkUKLToxMERDOTAwMDAyOTM4MDIxMDFDRjY4MjQ5MjEzMDAwRDExQTAwMDQ4NDcKLToxMERDQTAwMDM0QzQwMDQwMzI2MjAwMjAxNDQwMDAwMjM0ODYwMDgwRjgKLToxMERDQjAwMDAwODAzMDIxMTRDMDAwOTNBRkE2MDAzMDNDMDU4MDA4REUKLToxMERDQzAwMDM0QTgwMDgwOTEwNzAwMDgzMEU2MDA0MDUwQzAwMDA2RUMKLToxMERDRDAwMDNDMDY4MDA4MjQwOTAwMDQxMjI5MDBBMjI0MEEwMDEyMkMKLToxMERDRTAwMDEyMkEwMDI5M0MwNjgwMDgzNEQ0MDEwMDNDMTc4MDAwMjkKLToxMERDRjAwMDk2RUYwMTFBOTYwRDAwMEU5MjhFMDAwODMyNkIwMDA0MEEKLToxMEREMDAwMDMxRjdGRkZGMDFDRDYwMDRBRkFDMDA1NDhFMTQwMDA0NjYKLToxMEREMTAwMDExNjAwMDMxOEUxRTAwMDgzNEMzMDA4MDkwNzkwMDA4MjUKLToxMEREMjAwMDMzMzgwMDQwMTcwMDAwMjgwMDAwMDAwMDhDNzMwMDUwQkEKLToxMEREMzAwMDAyOTM5MDIzMDY0MDAwMDYzQzBDODAwMDhDN0UwMDM0NDkKLToxMERENDAwMDAyOUU4MDIzMDYwMjAwODM4RUEyMDAwODNDMEM4MDAwMDUKLToxMERENTAwMEFEODAwMDQ0MjQwMjAwMDE4RkJGMDA4QzhGQkUwMDg4N0MKLToxMERENjAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4QTkKLToxMERENzAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4RTkKLToxMEREODAwMDAzRTAwMDA4MjdCRDAwOTAwRTAwMEQxQTAwMDAyMDIxQkUKLToxMEREOTAwMDhGQkYwMDhDOEZCRTAwODg4RkI3MDA4NDhGQjYwMDgwNDUKLToxMEREQTAwMDhGQjUwMDdDOEZCNDAwNzg4RkIzMDA3NDhGQjIwMDcwOTEKLToxMEREQjAwMDhGQjEwMDZDOEZCMDAwNjgwM0UwMDAwODI3QkQwMDkwQjEKLToxMEREQzAwMDBBMDAwRDdBMDBDMDIwMjEwRTAwMTYzNzAyODAyMDIxQTMKLToxMERERDAwMDE0NDBGRkRGM0MwQzgwMDAzQzAzODAwODM0NjMwMDgwNkIKLToxMERERTAwMDhDNjIwMDM0MDI4MkY4MjMwN0UwMDAxNzAwMDAwMDAwNzQKLToxMERERjAwMDNDMTUwODAwOEVCNTMxMDAyNkIxMDAwMTNDMDEwODAwMzkKLToxMERFMDAwMEFDMzEzMTAwMEUwMDE0RTAwMjQwMjAyMTNDMEI4MDA4QjAKLToxMERFMTAwMDM1NzAwMDgwOTIwQTAwMjUwMjQwMjAyMTM1NDIwMDA0MUUKLToxMERFMjAwMDBFMDAxNEVBQTIwMjAwMjUwRTAwMEM5RTAyNDAyMDIxRTIKLToxMERFMzAwMDBBMDAwREE3MjQwMjAwMDEzQzE1MDgwMTI2QjU4MkQwNzYKLToxMERFNDAwMDBBMDAwRDY5M0MxMDgwMDA4QzY2MDAzMDAyODYyMDIzOTkKLToxMERFNTAwMDE4ODAwMDA4MjQwOTAwMEMzQzA4MDgwMDhEMDgzMTAwRDcKLToxMERFNjAwMDMyNzMwMEZDMDAwMEI4MjEyNTA3MDAwMTNDMDEwODAwQzYKLToxMERFNzAwMEFDMjczMTAwQUZBOTAwMzA4QzY1MDAzMDAwQjQzODIzRTYKLToxMERFODAwMDE4RTAwMERCMDJFNzUwMkExNTQwRkZERTAwMDAwMDAwMkEKLToxMERFOTAwMDEyRTcwMDJBMDJFNzY4MjMwMjg3QTAyMTMxQjdGRkZGQkIKLToxMERFQTAwMDMyNkUwMDAyMTFDMDAwMzQzMjdGMDAxMDNDMTQ4MDA4MzIKLToxMERFQjAwMDM2OTAwMDgwOTIwRjAwMDgzMUY2MDA0MDUyQzAwMENFMkMKLToxMERFQzAwMDhFQTIwMDA4MDI0MDIwMjEwRTAwMTRFMDI0MTMwMDE4NDYKLToxMERFRDAwMEEyMTMwMDA5OTIxODAwMDUyNDE5RkZGRTAyNDAyMDIxMTgKLToxMERFRTAwMDAzMTlCODI0MEUwMDE0RUFBMjE3MDAwNTI0MDQwMDM5MEYKLToxMERFRjAwMDAwMDAyODIxMEUwMDE2MTIyNDA2MDAxODBBMDAwREE3QTMKLToxMERGMDAwMDI0MDIwMDAxOTJCNjAwMEMzQzA0ODAwODM0ODMwMDgwOTcKLToxMERGMTAwMDhDNjcwMDM4MDAxNkFCMDAzNkIxMDA4MTAyNDAyMDIxMkEKLToxMERGMjAwMDMyMjVGMDgxMEUwMDBDOEQzMEM2MDBGRjNDMEM4MDAwQzUKLToxMERGMzAwMEFEODAwMDQ0MEEwMDBEQTcyNDAyMDAwMTNBNkMwMDAxRTQKLToxMERGNDAwMDMxOEIwMDAxMTU2MEZGQUYwMjg3QTAyMTBBMDAwREY4OTgKLToxMERGNTAwMDAwMDAwMDAwMDA0MEY4MDkyNDA0MDAxNjBBMDAwREE3ODQKLToxMERGNjAwMDI0MDIwMDAxMDI0MDIwMjEwRTAwMTcxNzAyMDAyODIxODAKLToxMERGNzAwMDBBMDAwRDVDOEZCRjAwOEMxM0UwRkY3NDNDMDM4MDA4MjcKLToxMERGODAwMDM0NjgwMDgwOEQwNDAwMzg4QzY2MDAwNDAzQzYxMDIzQkEKLToxMERGOTAwMDFDNDBGRjZGM0MwQzgwMDAwM0M0MjgyMzA0QTIwMDAxMzYKLToxMERGQTAwMDAwODBGMDIxQUZCNDAwMTBBRkI3MDAxNEFGQTcwMDE4ODUKLToxMERGQjAwMDNDMUY4MDAwOTdFMzAxMjA4RDA5MDAzMDk1MDYwMDVDMkUKLToxMERGQzAwMDhGQjkwMDU0OEZBQzAwMzAzMDYyRkZGRjMwRDhGRkZGQjQKLToxMERGRDAwMDAwNDc3MDIxMzdFRjQwMDAwMzM4NjgyQjAxQ0Y1ODIxRUMKLToxMERGRTAwMDAxOEQ1MDI1QUZBQjAwMjBBRkE5MDAyOEFGQUEwMDMwQUIKLToxMERGRjAwMEFGQTkwMDI0QUZBMDAwMkNBRkJFMDAzNDkxMDcwMDA4RTkKLToxMEUwMDAwMDMwRTQwMDA4MTQ4MDAwOEYwMjAwMjAyMThFQTIwMDA0NUEKLToxMEUwMTAwMDAwNDBGODA5MjdBNDAwMTA4RkE5MDAzMDMxMjgwMDAyMjEKLToxMEUwMjAwMDU1MDAwMDAxMzI3MzAwRkUzQzA0ODAwODM0OEMwMDgwRUYKLToxMEUwMzAwMDkxOEIwMDA4MzE2QTAwNDA1MTQwMDAxMjhGQTQwMDI0RTcKLToxMEUwNDAwMDhDOEQwMDA0MTFCRTAwQkUyNDBFMDAxNDMyNjUwMDAxNDgKLToxMEUwNTAwMDEwQTAwMDBDOEZBNDAwMjQyNDA0MDAwQzEyMjQwMEQ0NkYKLToxMEUwNjAwMDJBMjcwMDBEMTBFMDAwQ0UyNDA5MDAwRTI0MDgwMDBBMjMKLToxMEUwNzAwMDUyMjgwMDAxMjQxNjAwMDg4RkEyMDAyNDI0NDQwMDAxMjUKLToxMEUwODAwMEFGQTQwMDI0OEZBNjAwMTQzQzAzODAwODM0NjUwMDgwRjAKLToxMEUwOTAwMDAwODZGODIxOENCMTAwMzBBQ0JGMDAzMDkwQjkwMDRFNDIKLToxMEUwQTAwMDhDQUUwMDMwMzQxOEZGRkYwMzM4NzgwNDAxQ0Y2ODIxQUMKLToxMEUwQjAwMEFDQUQwMDM0OEZBNjAwMzA4RkFDMDA1NDMwQ0EwMDA4REQKLToxMEUwQzAwMDAzQ0M1ODIxMTE0MDAwMENBRkFCMDA1ODhDQTQwMDIwQTkKLToxMEUwRDAwMDhGQjAwMDU4MTA5MDAwOTQzMEM2MDBGRjkyQTIwMDBDNDAKLToxMEUwRTAwMDhGQTcwMDM0MDI0MDIwMjEwMDAyNEIwMDM1MjgwMDgwMTkKLToxMEUwRjAwMDBFMDAwQzhEMzEwNUYwODAzQzBDODAwODM1OTAwMDgwQkUKLToxMEUxMDAwMDhFMEIwMDMwMDE3MTUwMjMxOTQwMDA3MDI2NTkwMDgwOTkKLToxMEUxMTAwMDNDMTgwODAwOEYxODMxOTgyNDFGRkY4MDAzM0Y3ODI0OTMKLToxMEUxMjAwMDMzMkQwMDdGM0MwNjgwMDAzQzBFODAwNDMzMTEwMDEwMkMKLToxMEUxMzAwMEFDQ0YwMDkwMTIyMDAwMzQwMUFFMjgyMTkwQTMwMDZCRDgKLToxMEUxNDAwMDU0NjAwMDMyM0MxMDgwMDgyNDA3MDAwMUEwQTcwMDZCMzcKLToxMEUxNTAwMDk0QzQwMDdBMjQ4NjAwMEFBNjA2MDAxMjNDMEQ4MDA4QUEKLToxMEUxNjAwMDM1QTUwMDgwOTBCMTAwMDgzMjJDMDA0MDE1ODAwMDA0RDUKLToxMEUxNzAwMDNDMDM4MDA4MzI2RTAwMDExNUMwMDA2MjAwMDAwMDAwMDAKLToxMEUxODAwMDM0NjQwMDgwOEM4RjAwMjA4RkIzMDA1ODExRjMwMDBBOTQKLToxMEUxOTAwMDM0NjMwMTAwOEM3OTAwMDAwMjk5QzAyMzFCMDAwMDc3RDIKLToxMEUxQTAwMDhGQTgwMDU4QUM4ODAwMjBBQzc0MDAwMDI0MTQwMDAxMzMKLToxMEUxQjAwMEFDN0UwMDA0QUZCNDAwNTAxNkMwMDAzNzAwMDAwMDAwNzEKLToxMEUxQzAwMDhGQTQwMDUwMTQ4MDAwMzAwMDAwMDAwMDEyRTAwMDA1MTEKLToxMEUxRDAwMDAwMDAxODIxOEZBOTAwMzAzMTM3MDAwNDUyRTBGRTkyNzAKLToxMEUxRTAwMDAwNjAxMDIxMjQwMzAwMDEwQTAwMEQ1QjAwNjAxMDIxNzMKLToxMEUxRjAwMDBBMDAwREY5MDAwMDM4MjEwMDQwRjgwOTI0MDQwMDE3MzYKLToxMEUyMDAwMDBBMDAwREE3MjQwMjAwMDEzQzEwODAwODM2MTAwMDgwOEYKLToxMEUyMTAwMDI0MDkwMDAxMDI0MDIwMjEwRTAwMTRFMEE2MDkwMDEyOEEKLToxMEUyMjAwMDkyMDgwMDI1MjQwNTAwMDFBRkE1MDA1MDM1MDIwMDAxMjkKLToxMEUyMzAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5QzUKLToxMEUyNDAwMDNDMEQ4MDA4MjdBNTAwMzhBRkE4MDA2MDBFMDAwQ0E4ODAKLToxMEUyNTAwMEFGQTAwMDM4MTQ0MEZGNkQ4RkE4MDA2MDhGQTUwMDM4NzQKLToxMEUyNjAwMDMwQjAwMTAwNTIwMEZGNkE4RUEyMDAwNDhGQTMwMDNDNzAKLToxMEUyNzAwMDhEMDcwMDU4MDA2NzIwMjMwNDgzRkY2NEFEMDMwMDU4MTYKLToxMEUyODAwMDBBMDAwRTU1OEVBMjAwMDQwRTAwMEM5RTAyNDAyMDIxQjIKLToxMEUyOTAwMDBBMDAwRUM0MDAwMDAwMDAwRTAwMTRFMDAyNDAyMDIxMUQKLToxMEUyQTAwMDNDMDU4MDA4MzRBMzAwODAwMjQwMjAyMTBFMDAxNEVBQkYKLToxMEUyQjAwMEEwNzYwMDA5MDJDMDMwMjEyNDA0MDAzNzBFMDAxNjEyOTcKLToxMEUyQzAwMDAwMDAyODIxMEEwMDBFQzI4RkE0MDA1MDhGQTIwMDE4NUYKLToxMEUyRDAwMDU4NDBGRkEzM0MwRDgwMDgwRTAwMTRFMDAyNDAyMDIxQUUKLToxMEUyRTAwMDkyMEEwMDI1MjQwQjAwMDFBRkFCMDA1MDM1NDIwMDA0MTgKLToxMEUyRjAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5MDUKLToxMEUzMDAwMDNDMEQ4MDA4OENCNjAwMzA4RUJFMDAwODI0MDQwMDE4MzYKLToxMEUzMTAwMDI2RDUwMDAxMDNDMEY4MDlBQ0I1MDAzMDhGQjIwMDMwM0IKLToxMEUzMjAwMDBBMDAwRDVCMzI0MjAwMDQzQzA3ODAwMDk0RTUwMTFBQUMKLToxMEUzMzAwMDUwQTBGRjZBMzRDNjAwMTAwQTAwMEU4OTkyQTIwMDBDOTkKLToxMEUzNDAwMDEyMkUwMDJBMkEyRjAwMTUxMUUwMDAxRTI0MTkwMDE2OTMKLToxMEUzNTAwMDI0MTgwMDBDNTYzOEZGM0UzMjY1MDAwMTNDMUY4MDA4MkYKLToxMEUzNjAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAwRTAwNzAzMDI0MjAKLToxMEUzNzAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMThDN0YwMDAwRDkKLToxMEUzODAwMDE3RjRGRjhEMDAwMDAwMDA4QzY3MDAwNDAzQzczMDIzRTIKLToxMEUzOTAwMDA0QzFGRjg0OEZBODAwNTgwQTAwMEVCRjAwMDAwMDAwQ0YKLToxMEUzQTAwMDE2MjlGRjM2OEZBMjAwMjQwQTAwMEU3MDI0MTYwMDEwRDIKLToxMEUzQjAwMDI0MTEwMDBFNTJEMUZGMzAyNDE2MDAxMDBBMDAwRTZGRjcKLToxMEUzQzAwMDI0MTYwMDE2NTYzOUZGMjIzMjY1MDAwMTNDMUY4MDA4RDIKLToxMEUzRDAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAxMDAwNzAzMDI0QUUKLToxMEUzRTAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMTBBMDAwRTY0RjgKLToxMEUzRjAwMDI0MTYwMDEyM0MwMzgwMDA4QzYyMDFCODA0NDBGRkZFMkEKLToxMEU0MDAwMDI0MDQwODAwQUM2NDAxQjgwM0UwMDAwODAwMDAwMDAwMjgKLToxMEU0MTAwMDMwQTVGRkZGMzBDNkZGRkYzQzA3ODAwMDhDRTIwMUI4NEIKLToxMEU0MjAwMDA0NDBGRkZFMzRFODAxODBBRDA0MDAwMEFDRTQwMDIwQUQKLToxMEU0MzAwMDNDMDQ4MDA4OTQ4MzAwNDgzMDYzRkZGRjEwNjAwMDFEOTcKLToxMEU0NDAwMDNDMEI4MDAwMjRBQTAwMTIwMDZBNDgyQjUxMjAwMDFBQkQKLToxMEU0NTAwMDI0MEEwMDAzOTRGOTAxMjA4Rjg5MDAwMDI0MEMwMDFBN0IKLToxMEU0NjAwMDMzMzhGRkZGMjcwN0ZGRkUwMDY3NzgyQjM5RUUwMDAxRTYKLToxMEU0NzAwMDAwMDk2QjgyMDFBRTU4MjRBMTBDMDAwQjExNjAwMDQ3MEIKLToxMEU0ODAwMDhGODMwMDA0QTUwNzAwMTQ4Rjg4MDAwNDM1MDcwMDAxNUUKLToxMEU0OTAwMEFGODcwMDA0MzBDQzAwNDA1NTgwMDAwRjNDMDg4MDAwNUUKLToxMEU0QTAwMDNDMEM4MDAwMzU4NDAxODBBNDg1MDAwRTBBMDAwRjk4ODIKLToxMEU0QjAwMDhGOEYwMDBDMjQwQTAwMDMzNTY0MDE4MDMwQ0MwMDQwQUIKLToxMEU0QzAwMDhGODkwMDAwOEY4NzAwMDRBMDhBMDAwQjUxODBGRkY1MjAKLToxMEU0RDAwMDNDMEM4MDAwM0MwODgwMDA5NTAzMDEyMDNDMDg4MDA4MkIKLToxMEU0RTAwMDk1MTgwMDQwMzA3OUZGRkYyNzJFRkZGRTMzMEZGRkZGMDYKLToxMEU0RjAwMDAxQ0Y2ODJCMTFBMDAwMDMwMUMwMjAyMTk1MDIwMDQwMkMKLToxMEU1MDAwMDMwNDRGRkZGM0MwQjgwMDAwMEE0NTAyMzM1NjUwMTgwQTAKLToxMEU1MTAwMEE0QTQwMDBFQTRBQTAwMjQ4RjhGMDAwQzNDMDU4MDAwNDgKLToxMEU1MjAwMDM0QUUwMTgwMjQxODAwMDIzMEVEODAwMEE1RDgwMDBDMjQKLToxMEU1MzAwMEE1QzkwMDEwQURDRjAwMjhBNUM2MDAwODExQTAwMDBFODcKLToxMEU1NDAwMDNDMDQ4MDAwOTRBQTAxMTYzMTQyRkZGQzI0NDgwMDA0RDgKLToxMEU1NTAwMDAxMDUxODIxOEM3OTQwMDAzMzI2RkZGRjE0QzAwMDA3MDUKLToxMEU1NjAwMDI0MEVCRkZGM0MwQkZGRkYzNTY1N0ZGRjAwRTUzODI0MUQKLToxMEU1NzAwMEFGODcwMDA0M0MwNDgwMDAyNDBFQkZGRjM0OEMwMTgwNzAKLToxMEU1ODAwMDAwRUU2ODI0QTU4RDAwMjZBRDg5MDAyQzNDMDcxMDAwMDQKLToxMEU1OTAwMEFDODcwMUI4MDNFMDAwMDgwMDAwMDAwMDI0MDJGRkZFODEKLToxMEU1QTAwMDAwNjIzODI0MEEwMDBGNzZBRjg3MDAwNDNDMDU4MDAwMjMKLToxMEU1QjAwMDM0QTQwMDcwOEM4QTAwMDA5MEE2MDExMjhGODQwMDAwQTEKLToxMEU1QzAwMDI3QkRGRkYwMzBDMzAwRkYwMDAzMTg4MjMwODIwMTAwMzYKLToxMEU1RDAwMDAwMDAzODIxMTA0MDAwMzkyNDY2MDAwMzMwODc0MDAwRDUKLToxMEU1RTAwMDUwRTAwMDM5MzA4ODIwMDAwMDA2MTA4MDAwNDVDODIxMjYKLToxMEU1RjAwMDhGMkY0MDAwMjQ3ODAwMDQwMDE4NzA4MEFGQUYwMDAwMTcKLToxMEU2MDAwMDAxQzU2ODIxOERBQzQwMDBBRkFDMDAwNDk0QUIwMTE2OEQKLToxMEU2MTAwMDMxNjlGRkZDMDEyNTQwMjE4RDA1NDAwMEFGQTUwMDA4QjAKLToxMEU2MjAwMDhGQTkwMDA4MDAwMDMwMjEwMDAwMjgyMTNDMDcwODAwQzUKLToxMEU2MzAwMDI0RTcwMTAwMEEwMDBGRTkyNDA4MDAwODkwNDIwMDAwQzYKLToxMEU2NDAwMDI0QTUwMDAxMkNBRDAwMEMwMDYyQzgyMTAwMTlDMDgwNzcKLToxMEU2NTAwMDAzMDc3ODIxOERFRTAwMDAxMUEwMDAwNjAwQ0UzMDI2QzEKLToxMEU2NjAwMDAzQTUxMDIxMTRBOEZGRjUwMDA1MUEwMDU1MjBGRkY0OUEKLToxMEU2NzAwMDkwNDIwMDAwM0MwNDgwMDAzNDg3MDA3MDNDMDUwODAwOTQKLToxMEU2ODAwMDhDQTUzMTA0OENFMzAwMDAyQ0E4MDAyMDExMDAwMDA5QTcKLToxMEU2OTAwMDAwNkEzODIzMDAwNTU4ODAzQzBDMDgwMDI1OEMzMTA4OUUKLToxMEU2QTAwMDAxNkM0ODIxMjRBQTAwMDFBRDI3MDAwMDNDMDEwODAwQUMKLToxMEU2QjAwMEFDMkEzMTA0QUY4NjAwMEMyNDA3MDAwMTAwRTAxMDIxRDEKLToxMEU2QzAwMDAzRTAwMDA4MjdCRDAwMTAxMTAwRkZGQzAwMDAzODIxMDYKLToxMEU2RDAwMDAwMDY2MDgwMDE4NTU4MjE4RDY0NDAwMDI0NjkwMDA0OTMKLToxMEU2RTAwMDAwMDkzODgwQUZBNDAwMDAwMEU1MTgyMThDNjY0MDAwQzYKLToxMEU2RjAwMEFGQTAwMDA4MEEwMDBGRDlBRkE2MDAwNDI3QkRGRkQ4QkQKLToxMEU3MDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwMEMKLToxMEU3MTAwMEFGQjMwMDFDQUZCMTAwMTQ4Rjg3MDAwMDNDMDQ4MDAwMzEKLToxMEU3MjAwMDk0ODMwMTBFMzBFMjQwMDAwMDAwODAyMTEwNDAwMDEwNzAKLToxMEU3MzAwMDMwNzJGRkZGM0MwNjAwMjAwMEU2MjgyNDEwQTAwMDBERTgKLToxMEU3NDAwMDMwRUE4MDAwOEY4ODAwMDQyNDA5QkZGRjAwRTkzODI0RTQKLToxMEU3NTAwMDM1MDMxMDAwQUY4NzAwMDAzMEYxMjAwMDE2MjAwMDBCQjkKLToxMEU3NjAwMDNDMTQwMDA0MjQxOEZGQkYwQTAwMTAzODAwNzgxMDI0NUQKLToxMEU3NzAwMDMwRUE4MDAwMTU0MDAwODYzQzBDMDAyMDMwRjEyMDAwN0IKLToxMEU3ODAwMDEyMjBGRkY4OEY4MzAwMDQzQzE0MDAwNDAwRjQ5ODI0NDYKLToxMEU3OTAwMDEyNjBGRkY1MjQxOEZGQkYzNDYyMDA0MDMwRjkwMTAwMTkKLToxMEU3QTAwMDEzMjAwMDBGQUY4MjAwMDQzQzAyMDAyMDAwRTJGODI0OTYKLToxMEU3QjAwMDEzRTAwMDA1M0MwQjgwMDAzQzA0MDAwNDAwRTQxODI0MzYKLToxMEU3QzAwMDEwNjAwMENGMDAwMDAwMDA5NTZBMDExRTk1NjkwMTFDRDEKLToxMEU3RDAwMDMxNDZGRkZGMDAwOTQ0MDAwMEM4MjgyNUFGODUwMDBDMjIKLToxMEU3RTAwMDNDMEU4MDAwOTVDRDAxMEM4REM0NDAwMDM0MENGRkZGMjEKLToxMEU3RjAwMDEwOEMwMEIwMzFBNUZGRkYzMDhGMDEwMDU1RTAwMDAxMDMKLToxMEU4MDAwMDI0MTAwMDEwMzBGMTEwMDA1MjIwMDAwODM2MTEwMDAxRDEKLToxMEU4MTAwMDMwRjMwMDIwMTY2MDAwOUYzQzE4MTAwMDAwRjhBMDI0ODAKLToxMEU4MjAwMDE2ODAwMDk2M0MwNDBDMDAzNjExMDAwMTMwRTgwMTAwMEYKLToxMEU4MzAwMDE1MDAwMDBCM0MwQTAwMDE4Rjg4MDAwNDMxMDk0MDAwREMKLToxMEU4NDAwMDE1MjAwMDA4MDBFQTMwMjQzQzBDMUYwMTAwRUM1ODI0N0QKLToxMEU4NTAwMDNDMEExMDAwNTE2QTAwQUUzMEFEMDIwMDNDMEEwMDAxRDMKLToxMEU4NjAwMDAwRUEzMDI0MTRDMDAwOTUzQzA1MTAwMDAwRTUyMDI0ODcKLToxMEU4NzAwMDAwMDA0MDIxMTA4MDAwMDcwMDAwOTAyMTAwMDc5RTAyNDgKLToxMEU4ODAwMDMyNzIwMDBGMDAxMjc4ODAzQzBFMDgwMTI1Q0U4MjgwODMKLToxMEU4OTAwMDAxRUU0MDIxOEY5NDAwMTgxMjgwMDA0NzAyMjA4MDIxNTEKLToxMEU4QTAwMDEwODAwMDkxMDAwMDAwMDAzQzA5ODAwMDk1MzkwMTBFQTUKLToxMEU4QjAwMDkxMDMwMDAwMDIyMDMwMjEzMzM4RkZGRjI3MDUwMDA0QjgKLToxMEU4QzAwMDEwNjAwMDA4MDAwMEEwMjEyNDFGMDAwMzEwN0YwMTNBRkYKLToxMEU4RDAwMDI0MDQwMDAyOTEwQzAwMDExMTg0MDExODMwRUEwMDQwNjgKLToxMEU4RTAwMDAwMTJBMUMwOEY5MjAwMUM1MjQwMDAwMTM2MjYwMDQwNDkKLToxMEU4RjAwMDNDMTM4MDAwOEU2RjQwMDAzMUYxMDEwMDEyMjAwMENCRUMKLToxMEU5MDAwMDMwRDFGRkZCM0MxODA4MDA4RjE4MDAyNDMwRDIwMDA0REYKLToxMEU5MTAwMDMzMDYwMDA0MTRDMDAwQ0MzMEIwRkZGRjU2NDAwMDAxQTUKLToxMEU5MjAwMDM2MzEwMDA0MDI4MDIwMjEwMjAwMjgyMTBFMDAwRjU1RkMKLToxMEU5MzAwMDAyMjAzMDIxMTY0MDAwMEQwMDAwMjAyMTM2NjUwMTgwQTQKLToxMEU5NDAwMDNDMDQ4MDAwOEM5MzAxQjgwNjYwRkZGRTI0MTkyMDAwNkYKLToxMEU5NTAwMDI0MTQwMDAyQTRCOTAwMDhBMEI0MDAwQkE0QTAwMDEwNjUKLToxMEU5NjAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMThGQkYwMDI0QjkKLToxMEU5NzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MjkKLToxMEU5ODAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4OTAKLToxMEU5OTAwMDAwRUM1ODI0MTE2MEZGN0EzMEYxMjAwMDhGOEQwMDA0QzQKLToxMEU5QTAwMDNDMEZGRkZGMzVFRTdGRkYwMEVFMzgyNDM1QTM4MDAwREIKLToxMEU5QjAwMDBBMDAxMDI3QUY4NzAwMDAzQzAyMDgwMDhDNDIwMDM4OTQKLToxMEU5QzAwMDNDMDQwODAwMjQ4NDAwMzgxMDQwMDA0QjI0NDlGRkZGMTkKLToxMEU5RDAwMDNDMDM4MDAwOTQ2QzAxMEUzMThCRkZGRjExMDAwMEEwRkUKLToxMEU5RTAwMDI1NzMwMDA0M0MxMDA4MDA4RTEwMDAzMDEyMDAwMDBBNEQKLToxMEU5RjAwMDMwRTYwMTAwOEY4QTAwMDQzMTQzNDAwMDEwNjAwMDA2QjkKLToxMEVBMDAwMDNDMEYwRjAwMDBFRjcwMjQzQzBEMDEwMDAxQUU0MDJCQzUKLToxMEVBMTAwMDExMDAwMERGMzI2NUZGRkYxMEMwMDA2OTNDMTQwRjAwRDkKLToxMEVBMjAwMDAwRjQyODI0M0MxODAyMDAxMEI4MDA2NThGOTkwMDBDRUYKLToxMEVBMzAwMDMyNzBGRkZGMDMyOTk4MjQwMjY0OTAyMTkyNDkwMDA0NTgKLToxMEVBNDAwMDI1MjcwMDA0MDAwNzIxQzAwMjAwMjgyMTM2MjYwMDAyRTUKLToxMEVBNTAwMDBFMDAwRjU1MDAwMDAwMDA4RkJGMDAyNDhGQjQwMDIwNkYKLToxMEVBNjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNEMKLToxMEVBNzAwMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAyODNDMDIwQkZGMjYKLToxMEVBODAwMDAwRTQxODI0MzQ1RkZGRkYwM0UzQzgyQjUzMjBGRjY3MjMKLToxMEVBOTAwMDM2MTEwMDAxM0MwNjA4MDA4Q0M2MDAyQzM2MTEwMDA1MUEKLToxMEVBQTAwMDI0RDAwMDAxM0MwMTA4MDBBQzMwMDAyQzBBMDAxMDVEQUQKLToxMEVBQjAwMDMwRTgwMTAwMEEwMDEwNTIyNDEwMDAyMDAyNDAyODIxRjIKLToxMEVBQzAwMDNDMTIwODAwOEU1MjAwRDgyNDA0MDA4MDI2NEQwMDAxMUMKLToxMEVBRDAwMDNDMDEwODAwQUMyRDAwRDgwRTAwMEY1NTI0MDYwMDAzQTEKLToxMEVBRTAwMDBBMDAxMEU4OEZCRjAwMjQzQzA4MDgwMTI1MDg4MjgwMzYKLToxMEVBRjAwMDBBMDAxMDdDM0MwOTgwMDAwQTAwMTBDNTAwMDA0ODIxNzMKLToxMEVCMDAwMDBFMDAwRkJDMDAwMDAwMDAwQTAwMTA0OThGODcwMDAwQjMKLToxMEVCMTAwMDE1QTBGRjUzM0MwQTAwMDEyNjQ1MDAwNDMwQUFGRkZGNjAKLToxMEVCMjAwMDM2MjYwMDAyM0MwMzgwMDA4QzcyMDFCODA2NDBGRkZFQ0UKLToxMEVCMzAwMDhGODUwMDA4MzQ2OTAxODBBRDIwMDAwMDEwQTAwMEFGNkYKLToxMEVCNDAwMDNDMDQ4MDAwMjU0RjAwMTIwMEFGNzAyQjUxQzAwMEFDNzgKLToxMEVCNTAwMDI0MDMwMDAzOTQ3ODAxMjAyNDE0MDAxQTMwRjE0MDAwQUIKLToxMEVCNjAwMDMzMTNGRkZGQTEzNDAwMEIxMjIwMDBCNjI2NjNGRkZFMTMKLToxMEVCNzAwMDAwQTNDODJCNTcyMDAwQjQyNDFGRkZGRTM1MDgwMDAxNTYKLToxMEVCODAwMEE1MjMwMDE0QUY4ODAwMDQzQzEwODAwMDI0MENCRkZGQjQKLToxMEVCOTAwMDAxMEM0ODI0MjQwQjAwMDIzNjA4MDE4MEE1MEIwMDBDNTAKLToxMEVCQTAwMEE1MEEwMDBFQTUwNjAwMDhBNTA5MDAyNkE1MDcwMDEwNjUKLToxMEVCQjAwMDNDMDcxMDAwQUUwNzAxQjgwQTAwMTBFODhGQkYwMDI0MjAKLToxMEVCQzAwMDNDMDMwODAwOEM2MzAwRDAyRTQ1MDAwQzAwMTIyMUMwQ0QKLToxMEVCRDAwMDM4NkIwMDAxMkQ2MjAwMDEwMDQ1RjgyNDE3RTBGRjlBMTAKLToxMEVCRTAwMDMyNzBGRkZGMjY0Q0ZGRkMyRDg0MDAwNDU0ODAwMDUwM0YKLToxMEVCRjAwMDAwMDAyMDIxMzg2QTAwMDIyRDQzMDAwMTAwNjU4MDI0QjYKLToxMEVDMDAwMDE2MDAwMDRBMzI3MEZGRkYwMDA3NkE0MjAwMTI3MDJCQTQKLToxMEVDMTAwMDAxQUU0MDI0NTUwMDAwNjMwMDAwMjAyMTAwMTIyMUMwRjUKLToxMEVDMjAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjM0REYwMDAyMjcKLToxMEVDMzAwMDAyODAyMDIxMzNFNkZGRkYwRTAwMEY1NTMwQTVGRkZGQjUKLToxMEVDNDAwMDBBMDAxMEFDMDAwMDIwMjEyNDA0MDEwMDAyMDAyODIxNDkKLToxMEVDNTAwMDBFMDAwRjU1MDIyMDMwMjEwQTAwMTA5ODAwMDAwMDAwMUQKLToxMEVDNjAwMDhDNjY0MDAwMzBDRjAxMDAxMUUwMDAzRDMwRjgwMTAwMUIKLToxMEVDNzAwMDNDMTIwODAwOEU1MjAwMjQxMzAwMDAxMTMyMzQwMDA0QUMKLToxMEVDODAwMDNDMUYwRjAwMDBGRkM4MjQzQzA1MDIwMDEzMjUwMDBDQTgKLToxMEVDOTAwMDhGOEMwMDBDMDIyMDMwMjEzMjY1RkZGRjAxODk1ODI0M0YKLToxMEVDQTAwMDAxNjQxMDIxOTA0OTAwMDQzMjMwRkZGQjI0MTFGRkZFNjMKLToxMEVDQjAwMDI1MjcwMDA0MEUwMDBGNTUwMDA3MjFDMDAyNTE5MDI0QTMKLToxMEVDQzAwMDI0MDQwMDAxMTI0NDAwNTIzMjQzMDAwMTE0NjAwMDU4MzEKLToxMEVDRDAwMDAyMDAzMDIxMzI0QTAwMDQxMTQwMDAwNDhGOEQwMDAwRjAKLToxMEVDRTAwMDMxQTgwODAwMTUwMDAwNUEzMjY1RkZGRjE2ODBGRjVCNEYKLToxMEVDRjAwMDhGQkYwMDI0M0MxMzgwMDAzNjY1MDE4MDNDMDQ4MDAwRjcKLToxMEVEMDAwMDhDOTAwMUI4MDYwMEZGRkUyNDA2MjAwMDI0MEYwMDAyQUMKLToxMEVEMTAwMEE0QTYwMDA4QTBBRjAwMEJBNEEwMDAxMDNDMEUxMDAwOTkKLToxMEVEMjAwMEFDOEUwMUI4MEEwMDEwRTg4RkJGMDAyNDAwMDAyMDIxM0IKLToxMEVEMzAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjExNDBGRUU5RjMKLToxMEVENDAwMDAwMDBBMDIxOTUyRTAxMTA5NTBEMDAwMjMxQzhGRkZGOTMKLToxMEVENTAwMDUxQThGRUU0MDAxMkExQzAwQTAwMTA4QjhGOTIwMDFDODMKLToxMEVENjAwMDNDMDUwODAwOENBNTAwMjQzMEI4MDAwMTUzMDBGRjNCOEYKLToxMEVENzAwMDhGQkYwMDI0MzI2NUZGRkYzNjI2MDAwMjAwMDAyMDIxRUQKLToxMEVEODAwMDBFMDAwRjU1MDAwMDAwMDAwQTAwMTBFODhGQkYwMDI0OUQKLToxMEVEOTAwMDM2MjYwMDAyMEUwMDBGNTUyNDA0MDA4MDBBMDAxMEU4RjkKLToxMEVEQTAwMDhGQkYwMDI0MDIwMDI4MjEwRTAwMEY1NTMyMjZGRkZCRTIKLToxMEVEQjAwMDBBMDAxMTU5MDAxMjIxQzA5MTAzMDAwMTI0MDIwMDAxMzAKLToxMEVEQzAwMDEwNjJGRUVBMjQwNDAwMDEyNDEwMDAwMjE0NzBGRUM1NDMKLToxMEVERDAwMDAwMDBBMDIxMzBFMzAwNDAxMDYwRkVDMzhGOTIwMDFDQjEKLToxMEVERTAwMDk1MkIwMTEwOTUwOTAwMDIzMTY3RkZGRjExMjdGRUUwMDYKLToxMEVERjAwMDhGQkYwMDI0MEEwMDEwOEIwMDAwMDAwMDI0MDMwMDAzRDIKLToxMEVFMDAwMDM0ODIwMTgwQTA0MzAwMEIwQTAwMTEzNDNDMTA4MDAwQzIKLToxMEVFMTAwMDMyMTQwMDA0MTY4MDAwMDMzMjY1RkZGRjM2MTIwMDAyMzAKLToxMEVFMjAwMDMyNTBGRkZGMDIwMDMwMjEwQTAwMTFCMTAwMDAyMDIxMDIKLToxMEVFMzAwMDAwMDAyMDIxMEUwMDBGNTUzMjY1RkZGRjBBMDAxMTg2RTkKLToxMEVFNDAwMDMyMTBGRkZCMjQxRkZGRkUwQTAwMTEzMjAxMUY0MDI0NzUKLToxMEVFNTAwMDAyMDAzMDIxMEUwMDBGNTUyNDA0MDEwMDBBMDAxMThDMUQKLToxMEVFNjAwMDAwMDAwMDAwMjdCREZGQzhBRkIwMDAxMEFGQkYwMDM0RTYKLToxMEVFNzAwMDNDMTA2MDBDQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4MUUKLToxMEVFODAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4ODAKLToxMEVFOTAwMEFGQjEwMDE0OEUwQzUwMDAyNDBERkY3RjNDMDU4MDAwQTQKLToxMEVFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA5MDAwM0FFMEE1MDAwM0QKLToxMEVFQjAwMEFDQTkwMDA4M0MwMTA4MDBBQzIwMDAyMDBFMDAxNzQzNUMKLToxMEVFQzAwMDAwMDAwMDAwM0MwNTYwMTY4Q0E3MDAwMDNDMDhGRkZGMTYKLToxMEVFRDAwMDNDMDYwMDEwMzRDMzgwNTEwMEU4MjAyNDNDMDI1MzUzMDgKLToxMEVFRTAwMEFFMDM1MzdDMTA4MjAyNjEzNEEzN0MwMDhDNzQwMDdDREUKLToxMEVFRjAwMDhDNzUwMDc4M0MxMTYwMDAzNjI0MjAyMDNDMDUwODAxMDgKLToxMEVGMDAwMDI0QTU4MTE0MjQwNjAwMEEzQzExODAwMDNDMTMwMDAyNTEKLToxMEVGMTAwMDNDMTI2MDBDQUY5NTAwMTBBRjk0MDAxNDBFMDAxNUVDN0QKLToxMEVGMjAwMDM2M0UwMTgwQUU1MzUzRkM4RTMwMDAwMDMyMTYwMDAzOTMKLToxMEVGMzAwMDEyQzBGRkZEMzIxNzAwMDExNkUwMDA1ODMyMDYwMDAyMzEKLToxMEVGNDAwMDEwQzBGRkY5M0MwNDgwMDA4QzhGMDE0MDI0MTAwMDQwNjkKLToxMEVGNTAwMEFDOEYwMDIwOEM5MjAxNDgwMDEyNzYwMjMxQzMwMDcwMDEKLToxMEVGNjAwMDEwNzAwMTNEMkM2NzAwNDE1MEUwMDAwODI0MDQwMDYwNEYKLToxMEVGNzAwMDI0MTUwMDIwMTA3NTAwMEUzQzAzNDAwMDNDMDc4MDAwNjMKLToxMEVGODAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDE0NjRGRkZCRDAKLToxMEVGOTAwMDNDMDM0MDAwMEUwMDFGNUQwMDAwMDAwMDNDMDM0MDAwRTkKLToxMEVGQTAwMDNDMDc4MDAwQUNFMzAxNzgwQTAwMTIxQjAwMDAwMDAwNUYKLToxMEVGQjAwMDhDODMwMTQ4MjQxNDAwMDQzNDg3MDE4MDAwMDM0QzAyMzAKLToxMEVGQzAwMDMxMjUwMEZGOEM4MzAxNDAxMEI0MDE3MTI0QkZGRkZBOEEKLToxMEVGRDAwMDJGRjkwMDA2NTMyMDAwMTIzQzA1ODAwMDhDODYwMTQ0NjYKLToxMEVGRTAwMDI0MTYwMEZGMzBBNTAwRkYzMENCMDBGRjMwQ0EwMEZGMjEKLToxMEVGRjAwMDExNTYwMUJDMjU2ODAwMDQyNDAyMDAwOTEwQTIwMUFBRDAKLToxMEYwMDAwMDI4QUMwMDBBMTE4MDAxOTYyNDEzMDAwQTI0MEQwMDA4ODAKLToxMEYwMTAwMDEwQUQwMDE0OEY4NTAwMTgwMDA4MTlDMDNDMDU4MDAwNTEKLToxMEYwMjAwMDhDQTgwMUI4MDUwMEZGRkUyNDE3MDAwMkFDRTMwMDAwMjUKLToxMEYwMzAwMEE0RTkwMDA4QTBGNzAwMEI4Q0I0MDE0ODNDMDkxMDAwQkIKLToxMEYwNDAwMDNDMDM0MDAwQTRGNDAwMTA4Q0E0MDE0NEFDRTQwMDI0NzAKLToxMEYwNTAwMDNDMDc4MDAwQUNBOTAxQjhBQ0UzMDE3ODBBMDAxMjFCQTAKLToxMEYwNjAwMDAwMDAwMDAwMDAwNjdBMDIwMDA4QTg4MDNDMDQwODAxQTUKLToxMEYwNzAwMDI0ODQ4MjgwMjRBRTAwMDEwMkE0OTAyMTMxRTUwMEZGQTcKLToxMEYwODAwMDI0MTAwMDAxQTI0RjAwMDAxNEIwRkZFM0FGOEUwMDE4NUYKLToxMEYwOTAwMDAwMDgxOUMwMEEwMDEyNThBRjg1MDAxQzhFMzQwMTI4RTAKLToxMEYwQTAwMDNDMDI4MDA4QUUzNDAwMjA4RTI0MDEwNDhFMjMwMTAwMkYKLToxMEYwQjAwMDk0NUYwMDQ4QUY4NDAwMDBBRjgzMDAwNDMzRjlGRkZGODIKLToxMEYwQzAwMDBFMDAwRjRFQUY5OTAwMDgzQzE4MDgwMDhGMTgwMEMwQzIKLToxMEYwRDAwMDEzMDAwMDI0OEY4NzAwMDAzQzA3MDgwMDhDRTcwMEM0NjEKLToxMEYwRTAwMDI0RTYwMDAxM0MwMTA4MDBBQzI2MDBDNDNDMDM4MDAwN0IKLToxMEYwRjAwMDhDNjQwMTI0M0MwNzYwMjBBQ0U0MDAxNDAwMDAwMDAwOTQKLToxMEYxMDAwMDNDMDY4MDAwM0MxNTQwMDBBQ0Q1MDEzODAwMDAwMDAwRjIKLToxMEYxMTAwMDUyODBGRjhCMzIwNjAwMDIyNjhDMDE0MDI2OEQwMDgwMzMKLToxMEYxMjAwMDI0MDlGRjgwMDE4OTI4MjQwMUE5OTgyNDAwMTM1OTQwNEIKLToxMEYxMzAwMDMxQTIwMDdGMDAwNUIxNDAzMThBMDA3RjNDMUYyMDAwRDIKLToxMEYxNDAwMDM3RTgwMDAyMDE2MkMwMjUwMkNBQzgyNTAzMjhBMDI1QUQKLToxMEYxNTAwMDAzMDhCODI1QUNENzA4MzBBQ0Q0MDgzMDBBMDAxMjIxMTcKLToxMEYxNjAwMDMyMDYwMDAyM0MwNTAwMTAwMEU1NDAyNDE1MDAwMEE2MTAKLToxMEYxNzAwMDhGODMwMDA0M0MwQzA4MDA4RDhDMDAyMDNDMEQ4MDAwMjcKLToxMEYxODAwMDk1QUEwMTBFMjU4QjAwMDEzMEU5NDAwMDNDMDEwODAwRTIKLToxMEYxOTAwMEFDMkIwMDIwMzE1NUZGRkYxMTIwMDBCNjAwMDA5MDIxNUMKLToxMEYxQTAwMDNDMEYwMDIwMDBFRjcwMjQxMUMwMDBCMzMwRjc4MDAwNDYKLToxMEYxQjAwMDhGOTMwMDA0MjQxNkJGRkYwMEY2MzgyNDM2NjMxMDAwMzYKLToxMEYxQzAwMEFGODcwMDAwMzBFMjIwMDAxMDQwMDBCNjI0MDVGRkJGRUEKLToxMEYxRDAwMDNDMDgwMDA0MDBFODMwMjQxMEMwMDAwMjAwNjUxMDI0NDAKLToxMEYxRTAwMDM0NjIwMDQwMzBFOTAxMDAxMTIwMDAwRUFGODIwMDA0QkIKLToxMEYxRjAwMDNDMEIwMDIwMDBFQjUwMjQxMTQwMDAwNDNDMEQwMDA0QTcKLToxMEYyMDAwMDAwRUQ2MDI0MTE4MDAxMzkwMDAwMDAwMDk2MzcwMTFFRDYKLToxMEYyMTAwMDk2MzYwMTFDMzJFRkZGRkYwMDE2OUMwMDAxRjM3MDI1QUIKLToxMEYyMjAwMEFGOEUwMDBDOTYzOTAxMEM4RTI0NDAwMDM0MThGRkZGN0QKLToxMEYyMzAwMDEwOTgwMENBMzMyNUZGRkYzMDlGMDEwMDU3RTAwMDAxRkUKLToxMEYyNDAwMDI0MTIwMDEwMzBFMzEwMDAxMDYwMDAxMzM2NTMwMDAxNDgKLToxMEYyNTAwMDMwRTQwMDIwMTQ4MDAwMEEzQzA2MTAwMDAwRTYxMDI0NzAKLToxMEYyNjAwMDEwNDAwMDBEM0MwQzBDMDAzQzBCMEJGRjAwRUM1MDI0M0MKLToxMEYyNzAwMDM1NjlGRkZGMDEyQTQwMkIxMTAwMDAwODMwRUUwMTAwMjQKLToxMEYyODAwMDNDMEQwODAwOERBRDAwMkMzNjUzMDAwNTI1QjIwMDAxNjEKLToxMEYyOTAwMDNDMDEwODAwQUMzMjAwMkMzMEVFMDEwMDE1QzAwMDBCMjAKLToxMEYyQTAwMDNDMDYwMDAxOEY4ODAwMDQzMTBGNDAwMDU1RTAwMDA4NDMKLToxMEYyQjAwMDAwRTYyODI0M0MxODFGMDEwMEY4QjgyNDNDMTYxMDAwNzIKLToxMEYyQzAwMDUyRjYwMTBFMzBCOTAyMDAzQzA2MDAwMTAwRTYyODI0ODcKLToxMEYyRDAwMDE0QTAwMEE0M0MxRjEwMDAwMEZGMjAyNDAwMDA0MDIxQzcKLToxMEYyRTAwMDEwODAwMDA3MDAwMEE4MjEwMDA3NUUwMjMxNzUwMDBGQTIKLToxMEYyRjAwMDAwMTU1MDgwM0MwMjA4MDEyNDQyODI4MDAxNDI0MDIxRDYKLToxMEYzMDAwMDhGOEMwMDE4MTE4MDAwNjkwMjYwOTAyMTE0ODAwMDAzMjYKLToxMEYzMTAwMDNDMDk4MDAwM0MwODA4MDEyNTA4ODI4MDk1MzIwMTBFRDYKLToxMEYzMjAwMDkxMDMwMDAwMDI2MDMwMjEzMjQ0RkZGRjI0ODUwMDA0NzUKLToxMEYzMzAwMDEwNjAwMDA4MDAwMEI4MjEyNDBEMDAwMzEwNkQwMTIyQTgKLToxMEYzNDAwMDI0MTYwMDAyOTExNzAwMDExMkY2MDAyNjMwRjgwMDQwNDIKLToxMEYzNTAwMDAwMTVCOUMwOEY4MjAwMUM1MDQwMDAwMTM2NjYwMDQwODUKLToxMEYzNjAwMDNDMTY4MDAwOEVDQTQwMDAzMTUzMDEwMDEyNjAwMEM3NzUKLToxMEYzNzAwMDMwRDUwMDA0M0MwQjA4MDA4RDZCMDAyNDMwRDNGRkZCMUMKLToxMEYzODAwMDMxNjYwMDA0MTRDMDAxMEEzMEIyRkZGRjU2QTAwMDAxMkMKLToxMEYzOTAwMDM2NzMwMDA0MDJFMDIwMjEwMjQwMjgyMTBFMDAwRjU1QTAKLToxMEYzQTAwMDAyNjAzMDIxMTZBMDAwMEQwMDAwMjAyMTM2QzUwMTgwMkEKLToxMEYzQjAwMDNDMDQ4MDAwOEM4QzAxQjgwNTgwRkZGRTI0MEQyMDAwRTkKLToxMEYzQzAwMDI0MTIwMDAyQTRBRDAwMDhBMEIyMDAwQkE0QTAwMDEwRkIKLToxMEYzRDAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMTBBMDAxMzVGMzUKLToxMEYzRTAwMDAwODAxMDIxMTMwMEZGREIwMDAwQjgyMTk1M0YwMTEwQzEKLToxMEYzRjAwMDk1MTkwMDAyMzNFOEZGRkY1MzI4RkZENjAwMTVCOUMwNjYKLToxMEY0MDAwMDBBMDAxMzI3OEY4MjAwMUMyNDEzQkZGRjAwNzM2ODI0OTcKLToxMEY0MTAwMDExQTAwMDA3MjQwRTg3RkYwMDZFNDgyNDE1MjAwMDBBNjMKLToxMEY0MjAwMDNDMEYwMDYwMDBFRjkwMjQxMjQwMDAwNzAwMDAwMDAwMzUKLToxMEY0MzAwMDBFMDAwRDM0MDAwMDAwMDAxMDQwRkYzMjNDMDY4MDAwM0EKLToxMEY0NDAwMDBBMDAxMjhEM0MwMzgwMDAwRTAwMTRDOTAwMDAwMDAwNjkKLToxMEY0NTAwMDBBMDAxMzVGMDAwMDAwMDAwRTAwMTRFRjAwMDAwMDAwMUYKLToxMEY0NjAwMDNDMDM0MDAwM0MwNzgwMDBBQ0UzMDE3ODBBMDAxMjFCMUIKLToxMEY0NzAwMDAwMDAwMDAwMzBGNzgwMDAxMkUwRkY1MjhGODMwMDA0OEMKLToxMEY0ODAwMDNDMTkwMDIwMDBGOUMwMjQxMzAwRkY0RThGOUYwMDA0OTgKLToxMEY0OTAwMDNDMDRGRkZGMzQ4MzdGRkYwMEUzMzgyNDBBMDAxMkMxREQKLToxMEY0QTAwMDM3RTM4MDAwMEEwMDEyQ0EwMDY1MTAyNDNDMDQwODAwRkIKLToxMEY0QjAwMDhDODQwMDM4MTQ4MDAwMDIyNDg5RkZGRjAwMDA0ODIxNUEKLToxMEY0QzAwMDNDMDM4MDAwOTQ2RjAxMEUzMUVFRkZGRjExMDAwMEVCNTIKLToxMEY0RDAwMDI1RDYwMDA0M0MwMzA4MDA4QzYzMDAzMDEwNjAwMDBBNEQKLToxMEY0RTAwMDMwRUEwMTAwOEY5ODAwMDQzMzE3NDAwMDEyRTAwMDA2NTQKLToxMEY0RjAwMDNDMDIwRjAwMDBFMkY4MjQzQzE5MDEwMDAzM0Y0MDJCQkUKLToxMEY1MDAwMDExMDAwMEQ1MzJDNUZGRkYxMTQwMDAzMDNDMEMwRjAwNDgKLToxMEY1MTAwMDAwRUM1ODI0M0MwNjAyMDAxMTY2MDAyQzAwMDAwMDAwOUMKLToxMEY1MjAwMDhGOTUwMDBDM0MwRDA4MDAyNUFEMDAzODMyRDJGRkZGNEUKLToxMEY1MzAwMDAyQTkyODI0MDBBREIwMjE5MkM3MDAwNDI0RTkwMDA0RTgKLToxMEY1NDAwMDAwMDkyMUMwMDI0MDI4MjEzNjY2MDAwMjBFMDAwRjU1MzYKLToxMEY1NTAwMDAwMDAwMDAwMEEwMDEzNUYwMDAwMTAyMTBBMDAxMkUyMDAKLToxMEY1NjAwMDI0MTIwMDIwM0MxOTA4MDA4RjM5MDBEODAyQTAyODIxNUQKLToxMEY1NzAwMDI0MDQwMDgwMjczODAwMDEzQzAxMDgwMEFDMzgwMEQ4ODIKLToxMEY1ODAwMDBFMDAwRjU1MjQwNjAwMDMwQTAwMTM1RjAwMDAxMDIxMkYKLToxMEY1OTAwMDhDODQwMTQwMDBFMDI4MjEzQzAzODAwMDhDNzcwMUI4NzYKLToxMEY1QTAwMDA2RTBGRkZFMjQwODAwMUNBQ0E0MDAwMEEwQTgwMDBCOEQKLToxMEY1QjAwMDNDMTgxMDAwQUM3ODAxQjgzQzAzNDAwMDNDMDc4MDAwQzgKLToxMEY1QzAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDNDMDMwODAwQjUKLToxMEY1RDAwMDhDNjMwMEQwMkVBNTAwMEMwMDE1MjFDMDM4NkYwMDAxRUYKLToxMEY1RTAwMDJERjIwMDAxMDI0NTcwMjQxNUMwRkZENjMyRDJGRkZGNzQKLToxMEY1RjAwMDI2QjdGRkZDMkVFNDAwMDQxNDgwMDAwODAwMDAyMDIxNDAKLToxMEY2MDAwMDM4NjgwMDAyMkQxODAwMDEwMzA1MTgyNDEwNjAwMDA2NTgKLToxMEY2MTAwMDAwMDdGQTQyMzJEMkZGRkYwMDAwMjAyMTAyNDAyODIxRDkKLToxMEY2MjAwMDBBMDAxM0E0MzY2NjAwMDIwMDE1MTAyQjAzRTJDODI0NUEKLToxMEY2MzAwMDE3MjAwMDA1MzJEMkZGRkYwMDE1MjFDMDAyNDAyODIxMEIKLToxMEY2NDAwMDBBMDAxM0E0MzY2NjAwMDIwMDAwMjAyMTAyNDAyODIxOEYKLToxMEY2NTAwMDBFMDAwRjU1MzI2NkZGRkIwQTAwMTNFMDAwMTUyMUMwQjMKLToxMEY2NjAwMDEwQjMwMDZBMDAwODYwODAyNDA2MDAwQjE0QTZGRTZCMkQKLToxMEY2NzAwMDAwMDgxOUMwMDAwODI4ODAzQzE1MDgwMTI2QjU4MjgwQzIKLToxMEY2ODAwMDAwQjUzMDIxMEEwMDEyNThBMEMwMDAwMTM0RDUwMDAyOTQKLToxMEY2OTAwMDAyRTAyMDIxMzBBNUZGRkYwRTAwMEY1NTMyQTZGRkZGMkMKLToxMEY2QTAwMDBBMDAxMzQ4MDAwMDIwMjEwMDA4Qjg4MDNDMDMwODAxMkMKLToxMEY2QjAwMDI0NjM4MjgwMDJFMzEwMjE5MDU0MDAwMDEyODBGRTU3RTAKLToxMEY2QzAwMDAwMDgxOUMwQTA0MDAwMDA4Rjk5MDAxODI3MzhGRkZGREMKLToxMEY2RDAwMDE3MDBGRTUyQUY5ODAwMTgwMDA4MTlDMDBBMDAxMjU4MEYKLToxMEY2RTAwMEFGODAwMDFDMEEwMDEyNEYyNDA4MDAwMzBFMDAwRkJDNUMKLToxMEY2RjAwMDAwMDAwMDAwMEEwMDEyREE4Rjg3MDAwMDE3MjBGRUYzRDYKLToxMEY3MDAwMDNDMDYwMDAxMjZCRjAwMDQzM0U1RkZGRjM2NjYwMDAyMTkKLToxMEY3MTAwMDNDMDM4MDAwOEM3NTAxQjgwNkEwRkZGRThGODkwMDA4QUQKLToxMEY3MjAwMDNDMDQ4MDAwMzQ5MzAxODBBRTYwMDAwMDExMjAwMDk5RjkKLToxMEY3MzAwMDI0MEYwMDAzMjRBQTAwMTIwMTJBMTAyQjEwNDAwMDk1NjgKLToxMEY3NDAwMDAwMDAwMDAwOTQ2RDAxMjAzQzEyODAwMDI0MDMwMDFBODgKLToxMEY3NTAwMDMxQUNGRkZGMzY0QTAxODAzMEVCNDAwMEExNDMwMDBCODMKLToxMEY3NjAwMDExNjAwMDhGMjU4M0ZGRkUwMTIzNzAyQjE1QzAwMDhERDMKLToxMEY3NzAwMDI0MDlGRkZFMzUwODAwMDFBNTQzMDAxNEFGODgwMDA0RUEKLToxMEY3ODAwMDI0MTdCRkZGMDExN0IwMjQyNDA4MDAwMkE3QzgwMDBDRUIKLToxMEY3OTAwMEE3QzUwMDBFQTdDNjAwMDhBN0Q2MDAyNkE3QzcwMDEwNTkKLToxMEY3QTAwMDNDMDcxMDAwQUUyNzAxQjgwQTAwMTM1RjAwMDAxMDIxQ0IKLToxMEY3QjAwMDI0MDQwMTAwMDI0MDI4MjEwRTAwMEY1NTAyNjAzMDIxNzAKLToxMEY3QzAwMDBBMDAxMzM0MDAwMDAwMDA5MTAzMDAwMTI0MTUwMDAxMTkKLToxMEY3RDAwMDEwNzVGRjAyMjQwNDAwMDEyNDBFMDAwMjE0NkVGRURERTkKLToxMEY3RTAwMDAwMDBCODIxMzBFMzAwNDAxMDYwRkVEQjhGODIwMDFDNzcKLToxMEY3RjAwMDk1MjcwMTEwOTUwRjAwMDIzMEU5RkZGRjExRTlGRjBFNzgKLToxMEY4MDAwMDAwODAxMDIxMEEwMDEzMjc4RjgyMDAxQzNDMEYwODAxODIKLToxMEY4MTAwMDI1RUY4MjgwMDE4RjcwMjEwMDA2OTIwMkExRDIwMDAxQTMKLToxMEY4MjAwMDNDMUY2MDAwOEZFRDE4MjAyNDEwMDAwMTAxMTA5ODA0ODcKLToxMEY4MzAwMDNDMDIwODAxMjQ0MjgyODIwMUIzQjAyNTAxODI1MDIxOUEKLToxMEY4NDAwMDAwMDY1QzAyMDAwODE5QzBBNTRCMDAwMEFGRjYxODIwQTYKLToxMEY4NTAwMDBBMDAxMjU5M0MwNTgwMDAzNjY2MDAwMjBFMDAwRjU1NjIKLToxMEY4NjAwMDI0MDQwMDgwMEEwMDEzNUYwMDAwMTAyMThDQUUwMDA0MDUKLToxMEY4NzAwMDNDMEY2MDAwMEEwMDEyMEMwMUNGMTgyMThDNjY0MDAwN0EKLToxMEY4ODAwMDMwQ0EwMTAwMTE0MDAwMzczMEVCMDEwMDNDMTUwODAwODAKLToxMEY4OTAwMDhFQjUwMDI0MTE2MDAwMTMzMjc3MDAwNDNDMEQwRjAwNzgKLToxMEY4QTAwMDAwRUQyODI0M0MwQzAyMDAxMEFDMDAwRThGODQwMDBDRUMKLToxMEY4QjAwMDNDMEYwODAwMjVFRjAwMzgwMjYwMzAyMTAwODk5MDI0QjkKLToxMEY4QzAwMDAyNEY3MDIxOTFDNzAwMDQzMkM1RkZGRjMyNzJGRkZCNjcKLToxMEY4RDAwMDI0RTkwMDA0MDAwOTIxQzAwRTAwMEY1NTI0MTNGRkZFODcKLToxMEY4RTAwMDAyQjNBODI0MjQwMzAwMDExMkEzMDAzMDMyQjgwMDAxOUYKLToxMEY4RjAwMDEzMDAwMDA3MzJBODAwMDQwMjQwMzAyMTAwMDAyMDIxM0MKLToxMEY5MDAwMDBFMDAwRjU1MzJDNUZGRkYzMjUyRkZGQjMyQTgwMDA0MzQKLToxMEY5MTAwMDExMDAwMDA0OEY5RjAwMDAzM0Y5MDgwMDU3MjAwMDJCQ0UKLToxMEY5MjAwMDMyQzVGRkZGMTZFMEZFQzQwMDAwMTAyMTNDMTY4MDAwMjcKLToxMEY5MzAwMDM2QzQwMTgwM0MwNTgwMDA4Q0EyMDFCODA0NDBGRkZFNjMKLToxMEY5NDAwMDI0MEIyMDAwMjQwNjAwMDJBNDhCMDAwOEEwODYwMDBCRDQKLToxMEY5NTAwMEE0ODAwMDEwM0MwQTEwMDBBQ0FBMDFCODBBMDAxMzVGOTIKLToxMEY5NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDAyNDMwQUMwMDAxRUIKLToxMEY5NzAwMDUxODBGRUIxMDAwMDEwMjEzMkM1RkZGRjM2NjYwMDAyNDMKLToxMEY5ODAwMDAwMDAyMDIxMEUwMDBGNTUwMDAwMDAwMDBBMDAxMzVGNDgKLToxMEY5OTAwMDAwMDAxMDIxQTNDRjAwMEIwQTAwMTQzMjI0MTdCRkZGNzAKLToxMEY5QTAwMDI0MDlGRkZFMEEwMDE0MzAwMTA5NDAyNDMyNTUwMDA0RTYKLToxMEY5QjAwMDE2QTAwMDAzMzJDNUZGRkYzNjU3MDAwMjMyRjJGRkZGRTgKLToxMEY5QzAwMDAyNDAzMDIxMEEwMDE0QjIwMDAwMjAyMTAyNDAzMDIxMDAKLToxMEY5RDAwMDBFMDAwRjU1MjQwNDAxMDAwQTAwMTQ5QTAwMDAwMDAwRDQKLToxMEY5RTAwMDNDMDM4MDAwOEM2NDAxMDAzMDgyMDAzRTE0NDAwMDA4MUIKLToxMEY5RjAwMDAwMDAwMDAwQUM2MDAwNDg4QzY2MDEwMDMwQzUwN0MwMDQKLToxMEZBMDAwMDEwQTAwMDA1MDAwMDAwMDBBQzYwMDA0Q0FDNjAwMDUwOEQKLToxMEZBMTAwMDAzRTAwMDA4MjQwMjAwMDFBQzYwMDA1NEFDNjAwMDQwMjgKLToxMEZBMjAwMDhDNjgwMTAwMzEwNzM4MDAxMEUwRkZGOTAwMDAwMDAwODkKLToxMEZBMzAwMDI0MDIwMDAxMDNFMDAwMDhBQzYwMDA0NDNDMDM5MDAwOTUKLToxMEZBNDAwMDM0NjIwMDAxMDA4MjIwMjUzQzAzODAwMEFDNjQwMDIwNjkKLToxMEZBNTAwMDhDNjUwMDIwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDkKLToxMEZBNjAwMDAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMTAwODMyMDI1OTgKLToxMEZBNzAwMDAzRTAwMDA4QUM0NDAwMjAyN0JERkZEOEFGQjEwMDE0NUMKLToxMEZBODAwMDNDMDQ4MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjIwMDE4MzEKLToxMEZBOTAwMEFGQjAwMDEwOEM5MjAxNDA4QzkwMDE0ODI0MDIwMDBFRkYKLToxMEZBQTAwMDAwMTA4QzAyMzIyMzAwRkYxMDYyMDA1OTAyMDQyODI0NDcKLToxMEZBQjAwMDI4NjYwMDBGMTBDMDAwMTMyODZBMDAzNzI0MDcwMDA2Q0MKLToxMEZBQzAwMDEwNjcwMDhFMjg2ODAwMDc1MTAwMDAyRDI0MDQwMDA5RUIKLToxMEZBRDAwMDEwNjAwMDc4M0MwNjgwMDAyNDA5MDAwMTEwNjkwMEIwMjUKLToxMEZBRTAwMDAwMDAwMDAwMDAwMDAwMEQ4RkJGMDAyMDhGQjMwMDFDM0QKLToxMEZBRjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MUYKLToxMEZCMDAwMDI3QkQwMDI4MTE0MDAwNTkyNDBEMDAzODI4NkIwMDM1MEUKLToxMEZCMTAwMDExNjAwMDA1M0MwNTgwMDAyNDBDMDAxRjE0NkNGRkYxRUYKLToxMEZCMjAwMDAwMDAwMDAwM0MwNTgwMDA4Q0I4MDFCODA3MDBGRkZFMTMKLToxMEZCMzAwMDM0QjkwMTgwQUYzMjAwMDAyNDFGMDAwMTI0MTIwMDAyRkEKLToxMEZCNDAwMDNDMDIxMDAwQUYyMDAwMDRBNzMxMDAwOEEzM0YwMDBBQzgKLToxMEZCNTAwMEEzMzIwMDBCQTczMDAwMTBBRjIwMDAyNEFGMjAwMDI4RjQKLToxMEZCNjAwMEFDQTIwMUI4OEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NjkKLToxMEZCNzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4RUIKLToxMEZCODAwMDEwNjQwMDIzMjQwNTAwMEIxNDY1RkZENjMyMThGRkZGMTQKLToxMEZCOTAwMDE3MDAwMDIwM0MwNTgwMDA4RjkzRkVFQzkyN0YwMDA1NEIKLToxMEZCQTAwMDMzRjkwMDA0MTcyMEZGQ0YwMDAwMDAwMDBFMDAxNEUwMUUKLToxMEZCQjAwMDAyNDAyMDIxOTI2OTAwMDUwMjQwMjAyMTM1MjgwMDA0REUKLToxMEZCQzAwMDBFMDAxNEVBQTI2ODAwMDU5MjY3MDAwNTMwRTIwMDA0MDYKLToxMEZCRDAwMDE0NDAwMDAyMDAwMDAwMDAwMDAwMDAwRDkyNkIwMDAwQzUKLToxMEZCRTAwMDI0MDYwMDIwMzE2QTAwRkYxNTQ2MDAwQTNDMDU4MDAwMEIKLToxMEZCRjAwMDhDQTQwMUI4MDQ4MEZGRkUzNEFEMDE4MDI0MEUwMDA1MDIKLToxMEZDMDAwMDNDMEMxMDAwQURCMjAwMDBBMUFFMDAwQkFDQUMwMUI4RDIKLToxMEZDMTAwMDNDMDU4MDAwOENBMzAxQjgwNDYwRkZGRTM0QUYwMTgwNzYKLToxMEZDMjAwMDI0MTMwMDAyQURGMjAwMDBBREYyMDAwNEE1RjEwMDA4QkIKLToxMEZDMzAwMEExRjMwMDBBQTFGMzAwMEJBNUYwMDAxMEFERTAwMDI0MzEKLToxMEZDNDAwMDhDQjEwMTQ0M0MxMDEwMDBBREYxMDAyOEFDQjAwMUI4RkIKLToxMEZDNTAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MkIKLToxMEZDNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODEwNkRGRkFEMjUKLToxMEZDNzAwMDI0MEUwMDgwMTQ2RUZGOUIwMDAwMDAwMDNDMDU4MDAwRjUKLToxMEZDODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDI0MTIwMDAyOEYKLToxMEZDOTAwMEExRjIwMDBCQTVGMTAwMDhBNUYwMDAxMDhDQjMwMTQ0RkYKLToxMEZDQTAwMDNDMDIxMDAwQTVGMzAwMTJBQ0EyMDFCODBBMDAxNTJCMEIKLToxMEZDQjAwMDhGQkYwMDIwOENDMzAxQjgwNDYwRkZGRTM0RDMwMTgwRTUKLToxMEZDQzAwMEFFNzIwMDAwQUU2MDAwMDQyNDEyMDAwMUE2NzEwMDA4QUMKLToxMEZDRDAwMDI0MTEwMDAyQTI3MjAwMEFBMjcxMDAwQkE2NzAwMDEwOEIKLToxMEZDRTAwMDhDRDAwMTQ0M0MwRjEwMDBBRTcwMDAyNEFFNjAwMDI4QTAKLToxMEZDRjAwMEFDQ0YwMUI4MEEwMDE1NjY4RkJGMDAyMDNDMDM4MDAwMUUKLToxMEZEMDAwMDhDNjYwMUI4MDRDMEZGRkUzNDYyMDE4MDNDMDYwODAxMjUKLToxMEZEMTAwMDkwQzY4MkMwQUM1MjAwMDAxMEMwMDAwMzAwMDAzODIxMjEKLToxMEZEMjAwMDNDMDcwODAxOENFNzgyQzgzQzA1ODAwMDM0QUEwMTgwQUEKLToxMEZEMzAwMDI0MDQwMDAyMzRDQzAwMDFBQzQ3MDAwNEE1NTEwMDA4QTMKLToxMEZENDAwMEExNEMwMDBBQTE0NDAwMEJBNTUwMDAxMDhDQUIwMTQ0NEIKLToxMEZENTAwMDAwMDAyMDIxMDE0MDI4MjFBRDRCMDAyNDEwQzAwMDAzRTkKLToxMEZENjAwMDhGQkYwMDIwM0MwNDA4MDE4Qzg0ODJDNDhGQjMwMDFDMjgKLToxMEZENzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDMEUxMDAwMkQKLToxMEZEODAwMDNDMEQ4MDAwMjdCRDAwMjhBQ0E0MDAyOEFEQUUwMUI4MTIKLToxMEZEOTAwMDNDMDEwODAxQTAyMDgyQzAwM0UwMDAwODAwMDAwMDAwMzAKLToxMEZEQTAwMDEwQTAwMDBCM0MwNjgwMDA4Qzk4MDE0NDI0MTkwMDAyMkUKLToxMEZEQjAwMDNDMDEwODAxQTAzOTgyQzAzQzAxMDgwMUFDMzI4MkM4NzQKLToxMEZEQzAwMDNDMDEwODAxQUMzODgyQzQwQTAwMTU2NjhGQkYwMDIwRDAKLToxMEZERDAwMDhDREYwMUI4MDdFMEZGRkUzNEM3MDE4MDI0MDkwMDAyNzAKLToxMEZERTAwMEFDRjIwMDAwQUNGMjAwMDRBNEYxMDAwOEEwRTkwMDBBQTMKLToxMEZERjAwMEEwRTkwMDBCQTRGMDAwMTBBQ0UwMDAyNDhDQzgwMTQ0ODIKLToxMEZFMDAwMDNDMDIxMDAwQUNFODAwMjhBQ0MyMDFCODBBMDAxNTY2M0MKLToxMEZFMTAwMDhGQkYwMDIwMjdCREZGRThBRkJGMDAxMDBFMDAwRjRFQzAKLToxMEZFMjAwMDAwMDAwMDAwM0MwMjgwMDA4RkJGMDAxMDAwMDAyMDIxNzUKLToxMEZFMzAwMEFDNDAwMTgwMEEwMDEwMTAyN0JEMDAxODMwODRGRkZGN0QKLToxMEZFNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxNUMKLToxMEZFNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCQkUKLToxMEZFNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3RDIKLToxMEZFNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0OUYKLToxMEZFODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4REYKLToxMEZFOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwQjMKLToxMEZFQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGQTkKLToxMEZFQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwM0MKLToxMEZFQzAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBFMDAxNEUwNzQKLToxMEZFRDAwMDAwODA4MDIxM0MwNDgwMDgzNDgzMDA4MDkwNjUwMDI1RTgKLToxMEZFRTAwMDAyMDAyMDIxMzRBMjAwMjAwRTAwMTRFQUEwNjIwMDI1QTYKLToxMEZFRjAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwQzlFNUEKLToxMEZGMDAwMDI3QkQwMDE4M0MwMzgwMDAyN0JERkZGODM0NjIwMTgwNDQKLToxMEZGMTAwMEFGQTIwMDAwMzA4QzAwRkYzMEFEMDBGRjMwQ0UwMEZGRkMKLToxMEZGMjAwMDNDMEI4MDAwOEQ2NDAxQjgwNDgwRkZGRTAwMDAwMDAwREYKLToxMEZGMzAwMDhGQTkwMDAwOEQ2ODAxMjg4RkFBMDAwMDhGQTcwMDAwRkMKLToxMEZGNDAwMDhGQTQwMDAwMjQwNTAwMDEyNDAyMDAwMkEwODUwMDBBRkQKLToxMEZGNTAwMDhGQTMwMDAwMzU5OTQwMDAzQzA1MTAwMEEwNjIwMDBCMDMKLToxMEZGNjAwMDhGQjgwMDAwOEZBQzAwMDA4RkE2MDAwMDhGQUYwMDAwOUMKLToxMEZGNzAwMDI3QkQwMDA4QUQyODAwMDBBRDQwMDAwNEFEODAwMDI0N0UKLToxMEZGODAwMEFDQzAwMDI4QTRGOTAwMDhBNzBEMDAxMEE1RUUwMDEyQ0YKLToxMEZGOTAwMDAzRTAwMDA4QUQ2NTAxQjgzQzA2ODAwODI3QkRGRkU4MTYKLToxMEZGQTAwMDM0QzUwMDgwQUZCRjAwMTA5MEE3MDAwOTI0MDIwMDEyRTIKLToxMEZGQjAwMDMwRTMwMEZGMTA2MjAwMEIwMDgwMzAyMThDQTgwMDUwNUQKLToxMEZGQzAwMDAwODgyMDIzMDQ4MDAwMDg4RkJGMDAxMDhDQUEwMDM0MTIKLToxMEZGRDAwMDI0MDQwMDM5MDAwMDI4MjEwMENBNDgyMzA1MjAwMDA1MTgKLToxMEZGRTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4NjUKLToxMEZGRjAwMDI3QkQwMDE4MEUwMDE2MTIwMDAwMDAwMDhGQkYwMDEwNzEKLTowMjAwMDAwNDAwMDFGOQotOjEwMDAwMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgzNwotOjEwMDAxMDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA5RQotOjEwMDAyMDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjgxMwotOjEwMDAzMDAwMEUwMDBDQThBRkEwMDAxMDE0NDAwMDlCM0MwNzgwMDhFNQotOjEwMDA0MDAwMzRFNDAwODA5MDg2MDAwODMwQzUwMDA4MTRBMDAwNjlFMAotOjEwMDA1MDAwOEZBNzAwMTAzQzE4ODAwODM3MTAwMDgwOTIwRjAwMDgwRQotOjEwMDA2MDAwMzFFRTAwMDgxNUMwMDAwMjI0MDgwMDAzMDAwMDQwMjEwMgotOjEwMDA3MDAwM0MwQjgwMDg5MTY1MDAxMTkxNkEwMDEyMzU2NjAwODA4MgotOjEwMDA4MDAwOENERjAwNTQzMTQ5MDBGRjAxMjgyMDIxMzBBMzAwRkZGQwotOjEwMDA5MDAwMDAwNDEwODAwMDYyMjgyMTAwQkZDODJCMTMyMDAwMDgzNAotOjEwMDBBMDAwMDAwMDAwMDA5NEQwMDA1QzhDQ0YwMDU0MzIwREZGRkZBNAotOjEwMDBCMDAwMDFFNTcwMjMwMUFFNjAyQjExODAwMDk0MDAwMDAwMDA2OAotOjEwMDBDMDAwOTREOTAwNUMzMzIzRkZGRjMwRkYwMDA0MTNFMDAwNzQ3OQotOjEwMDBEMDAwMDAwODMwODA4RkE4MDAxQzAwNjgxMDJCNTA0MDAwNEY5MwotOjEwMDBFMDAwMzBFMzAwMDQwMDY2MTAyMzJDNDYwMDgwMTBDMDAwMDI5QwotOjEwMDBGMDAwMDA0MDgwMjEyNDEwMDA4MDBFMDAxNEUwMDI0MDIwMjFFNgotOjEwMDEwMDAwM0MwMzgwMDgzNDY2MDA4MDI0MDcwMDAxQUNDNzAwMEM2MwotOjEwMDExMDAwOTBDODAwMDgwMDEwNjg0MDM0NjcwMTAwMzExRjAwN0Y1QwotOjEwMDEyMDAwQTBERjAwMDg4RTM5MDAwNDI3MzgwMDAxQUNEODAwMzA2OQotOjEwMDEzMDAwQTREMDAwNUM4Q0NGMDAzQzk2MzAwMDBFMDFGMDcwMjEwMgotOjEwMDE0MDAwQUNDRTAwMjA4Q0NDMDAzQzAxOEQ1ODIxQUNDQjAwMUNFNwotOjEwMDE1MDAwOEUyQTAwMDRBQ0VBMDAwMDhFMjkwMDA4QUNFOTAwMDRGNQotOjEwMDE2MDAwOEZBNTAwMTAzMEE0MDAwODU0ODAwMDMyOTNBNjAwMjAxMAotOjEwMDE3MDAwQTBDMDAwNEU5MEM5MDA0RTI0MDJGRkRGM0MxODgwMDg0QQotOjEwMDE4MDAwQTBFOTAwMDg5MEM1MDAwODM3MEQwMDgwMjQwQTAwNTAzRgotOjEwMDE5MDAwMDBBMjIwMjRBMEM0MDAwODhFMzkwMDA4QURCOTAwMzhBMAotOjEwMDFBMDAwOEYwRjAwMTQ4REIwMDAzMDAxRjA3MDIxQURBRTAwMzQxRgotOjEwMDFCMDAwOTFBQzAwMDAzMThCMDBGRjExNkEwMDJDMjY0NTAxMDAzNAotOjEwMDFDMDAwMEUwMDE0RUEwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjFGNwotOjEwMDFEMDAwMEUwMDE2MTIyNDA2MDAwQThGQkYwMDM0OEZCMjAwMzBDMgotOjEwMDFFMDAwOEZCMTAwMkM4RkIwMDAyODI0MDIwMDAxMDNFMDAwMDgyQQotOjEwMDFGMDAwMjdCRDAwMzgzMEU4MDEwMDExMDAwMDNEOEZBMzAwMTQzNgotOjEwMDIwMDAwOEM4QTAwNTgwMDZBNDgyMzA1MjBGRjkzM0MxODgwMDgxOAotOjEwMDIxMDAwQUM4MzAwNTgwQTAwMTY2NjhGQTcwMDEwMjQwNzAyMTg0NgotOjEwMDIyMDAwMTA2MEZGQjEwMEU2MTAyMzhGQTIwMDFDMEEwMDE2OEI5RAotOjEwMDIzMDAwMDA0NjEwMjMzQzE4ODAwODM3MEQwMDgwQTBFNjAwMDgxNwotOjEwMDI0MDAwOEUzOTAwMDgyNDBBMDA1MEFEQjkwMDM4OEYwRjAwMTQxMQotOjEwMDI1MDAwOERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0OTFBQzAwMDBFMwotOjEwMDI2MDAwMzE4QjAwRkYxNTZBRkZENjI2NDUwMTAwMjQwNkZGODA2QQotOjEwMDI3MDAwMDBBNjEwMjQzQzA5ODAwMEFEMjIwMDI4OEUyNzAwMDgyQgotOjEwMDI4MDAwMzBBMzAwN0YzQzA0ODAwQzAwNjRGODIxQUZFNzAwRDA2RAotOjEwMDI5MDAwOEUyODAwMDhBRjlGMDAyODBBMDAxNkMxQUZFODAwRDRERQotOjEwMDJBMDAwMEEwMDE2ODgyQzYyMDIxODhFMjMwMDA4M0MwNDgwMDg3RAotOjEwMDJCMDAwMzQ4MjAwODBBQzQzMDA1NDAyNDAyMDIxMEUwMDE2MDExRAotOjEwMDJDMDAwQUM0MDAwMzAyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJDNgotOjEwMDJEMDAwMjQwNjAwMTI4RkJGMDAzNDhGQjIwMDMwOEZCMTAwMkM4MwotOjEwMDJFMDAwOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMzg3OQotOjEwMDJGMDAwQUM4MDAwNTg5MDhDMDAwODI0MERGRkY3MDE4RDU4MjQyNQotOjEwMDMwMDAwQTA4QjAwMDgwQTAwMTY2NjhGQTcwMDEwOENEODAwNTQzNgotOjEwMDMxMDAwMEEwMDE2ODMwMzA1MTgyMzI3QkRGRkU4QUZCRjAwMTBBRQotOjEwMDMyMDAwOTBBNjAwMEQzMEM3MDAxMDEwRTAwMDBDMDA4MDQwMjFBNgotOjEwMDMzMDAwM0MwMjgwMDg4QzQ0MDAwNDhDQTMwMDA4MTA2NDAwMDg3MAotOjEwMDM0MDAwMzBDOTAwMDQzMEM1MDAwNDEwQTAwMDFDOEZCRjAwMTA4RAotOjEwMDM1MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MzBDOTAwMDQ5MgotOjEwMDM2MDAwMTEyMDAwMTAzMENCMDAxMjEwRTBGRkY5OEZCRjAwMTBGOQotOjEwMDM3MDAwM0MwODgwMDg4Q0E3MDAwODhEMDYwMDA0MTRFNkZGRjVGMQotOjEwMDM4MDAwMjQwMjAwMDEyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJGQQotOjEwMDM5MDAwMjQwNjAwMTI4RkJGMDAxMDI0MDIwMDAxMDNFMDAwMDhCMQotOjEwMDNBMDAwMjdCRDAwMTgyNDBBMDAxMjE1NkFGRkU5OEZCRjAwMTA0QwotOjEwMDNCMDAwMDEwMDIwMjEwQTAwMTY1NDI3QkQwMDE4MDAwMDIwMjE0QQotOjEwMDNDMDAwMEEwMDBEMUEyN0JEMDAxODNDMDUwODAwMjRBNTVENTA0MQotOjEwMDNEMDAwM0MwNDA4MDAyNDg0N0IxMDNDMDIwODAwMjQ0MjVENTg0MQotOjEwMDNFMDAwMjQwMzAwMDYzQzAxMDgwMUFDMjU4MkQwM0MwMTA4MDEzMQotOjEwMDNGMDAwQUMyNDgyRDQzQzAxMDgwMUFDMjI4MkQ4M0MwMTA4MDEyMwotOjEwMDQwMDAwQTAyMzgyREMwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhGNQotOjEwMDQxMDAwMjQwMjAwMDEzQzAyODAwMDMwODgwMEZGMzQ0NzAxODA0NAotOjEwMDQyMDAwM0MwNjgwMDA4Q0MzMDFCODA0NjBGRkZFMDAwMDAwMDBBMQotOjEwMDQzMDAwOENDNTAxMjgyNDE4RkY4MDNDMEQ4MDBBMjRBRjAxMDBFMAotOjEwMDQ0MDAwMDFGODcwMjQzMUVDMDA3RkFDQ0UwMDI0MDE4RDIwMjExNgotOjEwMDQ1MDAwQUNFNTAwMDA5NDhCMDBEQTM1MDk2MDAwMjQwODAwMDI0NgotOjEwMDQ2MDAwMzE2QUZGRkZBQ0VBMDAwNDI0MDIwMDAxQTRFOTAwMDg5RAotOjEwMDQ3MDAwQTBFODAwMEJBQ0UwMDAyNDNDMDcxMDAwQUNDNzAxQjhCQQotOjEwMDQ4MDAwQUY4NDAwMjgwM0UwMDAwOEFGODUwMDU4OEM5OTAwMDQ3MQotOjEwMDQ5MDAwOEY4RDAwMjgyNDA5RkZCRjAzMjVDMDIzQUM5ODAwMDREQQotOjEwMDRBMDAwOTFBRjAwQzQyNDAzRkZFRjMxRUUwMDdGQTFBRTAwQzQ4MgotOjEwMDRCMDAwOEM4QzAwMjA5MzhCMDAzNDhGODYwMDI4MzU4QTAwMDJCNAotOjEwMDRDMDAwQUY4QjAwNENBNzgwMDA0OEFDOEEwMDIwQTRDMDAwQUNEMQotOjEwMDREMDAwOTBDODAwQzQwMTA5MzgyNEEwQzcwMEM0OEY4NDAwMjgzNAotOjEwMDRFMDAwQUM4MDAwREM5MDg1MDBDNDAwQTMxMDI0MDNFMDAwMDg2OQotOjEwMDRGMDAwQTA4MjAwQzQzQzAyODAwMDM0NDUwMTgwM0MwNDgwMDA5RQotOjEwMDUwMDAwOEM4MzAxQjgwNDYwRkZGRThGODkwMDU4MjQwNzYwODM0NAotOjEwMDUxMDAwMjQwNjAwMDJBQ0E5MDAwMDhDODgwMTI0QUNBODAwMDRDOQotOjEwMDUyMDAwQTRBNzAwMDhBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDhFQgotOjEwMDUzMDAwQUM4NTAxQjg5Mzg4MDAzNDhGODkwMDRDOEY4MjAwMjhFNQotOjEwMDU0MDAwMzBDNjAwRkYwMTA5MzgyMzMwRTkwMEZGMDEyMjE4MjFERAotOjEwMDU1MDAwMzBBNTAwRkYyNDY4MDA3ODEwQzAwMDAyMDEyNDM4MjE3MwotOjEwMDU2MDAwMDA4MDM4MjEzMEU0MDAwMzE0ODAwMDAzMzBBQTAwMDMyNwotOjEwMDU3MDAwMTE0MDAwMEQzMTJCMDAwMzEwQTAwMDA5MDAwMDEwMjFENAotOjEwMDU4MDAwOTBFRDAwMDAyNDRFMDAwMTMxQzIwMEZGMDA0NTYwMkJCOQotOjEwMDU5MDAwQTEwRDAwMDAyNEU3MDAwMTE1ODBGRkY5MjUwODAwMDFFNgotOjEwMDVBMDAwMDNFMDAwMDgwMDAwMDAwMDE1NjBGRkYzMDAwMDAwMDBGOQotOjEwMDVCMDAwMTBBMEZGRkIwMDAwMTAyMThDRjgwMDAwMjQ1OTAwMDQ1QgotOjEwMDVDMDAwMzMyMjAwRkYwMDQ1NzgyQkFEMTgwMDAwMjRFNzAwMDQxQgotOjEwMDVEMDAwMTVFMEZGRjkyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDAxMgotOjEwMDVFMDAwOTM4NTAwMzQ5Mzg4MDA0NDhGODcwMDRDMDAwNDMyMDBDOAotOjEwMDVGMDAwMzEwMzAwN0YwMEU1MTAyQjMwQzQ3RjAwMTA0MDAwMEY1NgotOjEwMDYwMDAwMDA2NDI4MjU4Rjg0MDAyODNDMDk4MDAwOEM4QTAwREM0NwotOjEwMDYxMDAwQUQyQTAwQTQzQzAzODAwMDAwQTM1ODI1QUM2QjAwQTBDOQotOjEwMDYyMDAwOEM2QzAwQTAwNTgwRkZGRTAwMDAwMDAwOEM2RDAwQUMwQgotOjEwMDYzMDAwQUM4RDAwREMwM0UwMDAwODhDNjIwMEE4MEEwMDE3RDYyRAotOjEwMDY0MDAwOEY4NDAwMjg5Mzg4MDA0NTNDMDI4MDAwMDA4MDUwMjE2MAotOjEwMDY1MDAwMzEwMzAwRkVBMzgzMDA0NTMwQUJGRkZGMzBDQzAwRkYyOQotOjEwMDY2MDAwMzBFN0ZGRkYzNDQ4MDE4MDNDMDk4MDAwOEQyNDAxQjg0OQotOjEwMDY3MDAwMDQ4MEZGRkU4RjhEMDA1ODI0MTgwMDE2QUQwRDAwMDA3OQotOjEwMDY4MDAwOEQyMjAxMjQ4RjhEMDAyOEFEMDIwMDA0OEQ1OTAwMjA5OQotOjEwMDY5MDAwQTUwNzAwMDgyNDAyMDFCNEExMTkwMDBBQTExODAwMEI0MwotOjEwMDZBMDAwOTUyRjAxMjA4RDRFMDAwODhENDcwMDA0OTc4MzAwNDg0OAotOjEwMDZCMDAwOEQ1OTAwMjQwMUNGMzAyMTAwQzcyODIxMDBBMzIwMjMxOQotOjEwMDZDMDAwMjQxOEZGRkZBNTA0MDAwQ0E1MEIwMDBFQTUwMjAwMTBDNgotOjEwMDZEMDAwQTUwQzAwMTJBRDE5MDAxOEFEMTgwMDI0OTVBRjAwRDg3NAotOjEwMDZFMDAwM0MwQjEwMDAyNDA3RkZGNzMxRUVGRkZGQUQwRTAwMjg5MgotOjEwMDZGMDAwOERBQzAwNzRBRDBDMDAyQ0FEMkIwMUI4OEQ0NjAwMjBFNAotOjEwMDcwMDAwMDBDNzI4MjQwM0UwMDAwOEFENDUwMDIwOEY4ODAwMjg5QQotOjEwMDcxMDAwMDA4MDU4MjEzMEU3RkZGRjkxMDkwMEM2M0MwMjgwMDBBRAotOjEwMDcyMDAwMzBBNUZGRkYzMTI0MDBGRjAwMDQxQTAwMDA2NzUwMjVBOAotOjEwMDczMDAwMzBDNjAwRkYzNDQ3MDE4MDNDMDk4MDAwOEQyQzAxQjg5MQotOjEwMDc0MDAwMDU4MEZGRkU4RjgyMDA1ODI0MEYwMDE3QUNFMjAwMDBFNgotOjEwMDc1MDAwOEQzOTAxMjRBQ0Y5MDAwNDhENzgwMDIwQTRFQTAwMDg0QQotOjEwMDc2MDAwMjQxOTAxQjRBMEY4MDAwQUEwRUYwMDBCOTUyMzAxMjA4MgotOjEwMDc3MDAwOEQ2RTAwMDg4RDZEMDAwNDk3ODQwMDQ4MDFDMzUwMjFFMAotOjEwMDc4MDAwMDE0RDYwMjEwMTg0MTAyM0E0RTIwMDBDQTRFNTAwMEVCOQotOjEwMDc5MDAwQTRGOTAwMTBBNEU2MDAxMkFDRTAwMDE0OEQ3ODAwMjQ0NwotOjEwMDdBMDAwMjQwREZGRkZBQ0Y4MDAxODhEMEYwMDZDQUNFRjAwMUM5RgotOjEwMDdCMDAwOEQwRTAwNjgzQzBGMTAwMEFDRUUwMDIwQUNFRDAwMjQ2NAotOjEwMDdDMDAwOTUwQTAwQUUyNDBERkZGNzMxNDZGRkZGQUNFNjAwMjg4NgotOjEwMDdEMDAwOTUwQzAwNzA5NTA0MDA3MjMxODM3RkZGMDAwM0NBMDBGRQotOjEwMDdFMDAwMzA4MkZGRkYwMzIyQzAyMUFDRjgwMDJDQUQyRjAxQjhFRQotOjEwMDdGMDAwOTUwRTAwNzI4RDZBMDAyMDAwQUUzMDIxMDE0RDI4MjQzNAotOjEwMDgwMDAwQTUwNjAwNzIwM0UwMDAwOEFENjUwMDIwM0MwMjgwMDBGMAotOjEwMDgxMDAwMzQ0NjAxODAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkVEMwotOjEwMDgyMDAwMjQwOTAwMThBQ0M0MDAwMEEwQzkwMDBCOEY4ODAwMjg2MAotOjEwMDgzMDAwM0MwNDEwMDA5NTA3MDBBRUE0QzcwMDEwQUNDMDAwMzAwNwotOjEwMDg0MDAwMDNFMDAwMDhBQ0E0MDFCODNDMDI4MDAwMzQ0NTAxODBGQwotOjEwMDg1MDAwM0MwNDgwMDA4QzgzMDFCODA0NjBGRkZFOEY4QTAwMzA2NgotOjEwMDg2MDAwMjQwNjAwMTk5NTQ5MDAxQzMxMjhGRkZGMDAwODM5QzBGMwotOjEwMDg3MDAwQUNBNzAwMDBBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDg5OAotOjEwMDg4MDAwQUM4NTAxQjg4Rjg3MDAzODAwODA0MDIxMzBDNDAwRkY1QwotOjEwMDg5MDAwM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFOEY4OTAwNThERQotOjEwMDhBMDAwOTM4MzAwNTQzNDk5NjAwMEFDQTkwMDAwQTBBMzAwMDUxNAotOjEwMDhCMDAwOENFMjAwMTAyNDBGMDAwMjI0MDNGRkY3QTRBMjAwMDYxQwotOjEwMDhDMDAwQTRCOTAwMDg4RDE4MDAyMEEwQjgwMDBBQTBBRjAwMEI0MgotOjEwMDhEMDAwOENFRTAwMDBBQ0FFMDAxMDhDRUQwMDA0QUNBRDAwMTQ0QQotOjEwMDhFMDAwOENFQzAwMUNBQ0FDMDAyNDhDRUIwMDIwQUNBQjAwMjhFMgotOjEwMDhGMDAwOENFQTAwMkMzQzA3MTAwMEFDQUEwMDJDOEQwOTAwMjRDNwotOjEwMDkwMDAwQUNBOTAwMThBQ0M3MDFCODhEMDUwMDIwMDBBMzIwMjRCNQotOjEwMDkxMDAwMDNFMDAwMDhBRDA0MDAyMDkzODUwMDU0MjQwMzAwMDE4NwotOjEwMDkyMDAwMjdCREZGRTgwMEEzMzAwNDJDQTIwMDIwQUZCMDAwMTBDOAotOjEwMDkzMDAwQUZCRjAwMTQwMEMwMTgyMTEwNDAwMDEzMjQxMEZGRkVBOAotOjEwMDk0MDAwM0MwNzA4MDA4Q0U3MzE5MDAwRTYxMDI0M0MwODgwMDA0QQotOjEwMDk1MDAwMzUwNTAxODAxNDQwMDAwNTI0MDYwMDg0OEY4OTAwMjg5NQotOjEwMDk2MDAwMjQwQTAwMDQyNDEwRkZGRkExMkEwMEVDMEUwMDE4NzJENAotOjEwMDk3MDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTA5MwotOjEwMDk4MDAwMDNFMDAwMDgyN0JEMDAxODNDMDYwODAwOENDNjMxOTQxRgotOjEwMDk5MDAwMEEwMDE4QTQwMEMzMTAyNDhGODcwMDMwMjdCREZGRTA5MQotOjEwMDlBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM2MQotOjEwMDlCMDAwMzBEMDAwRkY5MEU2MDAwRDAwQTA4ODIxMDA4MDkwMjEzQgotOjEwMDlDMDAwMzBDNTAwN0ZBMEU1MDAwRDhGODUwMDI4OEUyMzAwMTgxQwotOjEwMDlEMDAwOENBMjAwQzAxMDYyMDAyRTI0MEEwMDBFMEUwMDE4OTc5MAotOjEwMDlFMDAwQTM4QTAwNTQyNDA5RkZGRjEwNDkwMDIyMjQwNEZGRkZCQQotOjEwMDlGMDAwNTIwMDAwMjAwMDAwMjAyMThFMjYwMDAwM0MwQzAwMTAzOAotOjEwMEEwMDAwMDBDQzU4MjQxNTYwMDAzOTNDMEUwMDA4MDBDRTY4MjQ0NAotOjEwMEExMDAwNTVBMDAwM0YwMjQwMjAyMTNDMTgwMDAyMDBEODgwMjQ0RAotOjEwMEEyMDAwMTIwMDAwMUYzQzBBMDAwNDhGODcwMDMwOENFMjAwMTQ4MwotOjEwMEEzMDAwOENFMzAwMTA4Q0U1MDAxNDAwNDNGODIzMDNFNUM4MkI3OQotOjEwMEE0MDAwMTMyMDAwMDUwMjQwMjAyMThFMjQwMDJDOENGMTAwMTA4MAotOjEwMEE1MDAwMTA5MTAwMzEwMjQwMjAyMTI0MDIwMDEyQTM4MjAwNTQ5MAotOjEwMEE2MDAwMEUwMDE4OTcyNDEyRkZGRjEwNTIwMDAyMjQwNEZGRkYwQgotOjEwMEE3MDAwMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQxRQotOjEwMEE4MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA3NwotOjEwMEE5MDAwOTBBODAwQzQzNTA0MDAyMDBBMDAxOENEQTBBNDAwQzQwQQotOjEwMEFBMDAwMDBDQTQ4MjQxNTIwMDAwQjhGOEIwMDMwOEY4RDAwMzAzQQotOjEwMEFCMDAwOERBQzAwMTAxNTgwMDAwQjAyNDAyMDIxOEUyRTAwMkNFMgotOjEwMEFDMDAwNTFDMEZGRUMwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RTg1QwotOjEwMEFEMDAwMjQwMjAwMTc4RDY2MDAxMDUwQzBGRkU2MDAwMDIwMjFBMAotOjEwMEFFMDAwMDI0MDIwMjEwQTAwMThFODI0MDIwMDExMDI0MDIwMjFCRgotOjEwMEFGMDAwMjQwMjAwMTUwRTAwMTg5N0EzODIwMDU0MjQwRkZGRkY1NAotOjEwMEIwMDAwMTA0RkZGREMyNDA0RkZGRjBBMDAxOEQ3OEUyNjAwMDBEOAotOjEwMEIxMDAwMEEwMDE5MEUyNDAyMDAxNDNDMDgwMDA0MDBDODM4MjRGRQotOjEwMEIyMDAwNTBFMEZGRDQwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RThGNAotOjEwMEIzMDAwMjQwMjAwMTM4Rjg2MDAyODI3QkRGRkUwQUZCMTAwMTQwOAotOjEwMEI0MDAwQUZCRjAwMThBRkIwMDAxMDkwQzMwMEM0MzBBNTAwRkZDNQotOjEwMEI1MDAwMzA2MjAwMjAxMDQwMDAwODAwODA4ODIxOENDQjAwQzA0QgotOjEwMEI2MDAwMjQwOUZGREYyNTZBMDAwMUFDQ0EwMEMwOTBDODAwQzQ5OAotOjEwMEI3MDAwMDEwOTM4MjRBMEM3MDBDNDE0QTAwMDQwM0MwQzgwMDAyOAotOjEwMEI4MDAwOEY4NDAwMjg5MDg3MDBDNDI0MThGRkJGMjQwNkZGRUYzRAotOjEwMEI5MDAwMzBFMzAwN0ZBMDgzMDBDNDk3OUYwMDQ4OEY4MjAwNEMwMQotOjEwMEJBMDAwOEY4RDAwMjgwM0UyQzgyM0E3OTkwMDQ4QTVBMDAwQUNCOAotOjEwMEJCMDAwOTFBRjAwQzQwMUY4NzAyNEExQUUwMEM0OEY4QzAwMjg0RQotOjEwMEJDMDAwQTE4MDAwQzc4RjhBMDAyOEE1NDAwMDcyQUQ0MDAwRENEQwotOjEwMEJEMDAwOTE0NTAwQzQwMEE2NTgyNEExNEIwMEM0OEY5MDAwMjQ2NgotOjEwMEJFMDAwOEY4NDAwNEM5Nzg2MDA0ODAyMDQyODIxMTBDMDAwMEYxMwotOjEwMEJGMDAwQUY4NTAwMjRBMzgwMDA0NDNDMDc4MDAwOEUyQzAwMDhCMQotOjEwMEMwMDAwOTRFRDAxMjA4RTJCMDAwNDAxOEQ1MDIxMDE0QjgwMjE5OQotOjEwMEMxMDAwMDIwNjIwMjMzMDg2RkZGRjMwQzgwMDBGMzkwOTAwMDE4QgotOjEwMEMyMDAwMzEzMTAwMDExNjIwMDAwOUEzODgwMDQ0OTM4NjAwMzQ2NgotOjEwMEMzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjBBNwotOjEwMEM0MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMDBDODcwMjM1OQotOjEwMEM1MDAwOEZCRjAwMTg5Mzg2MDAzNDhGQjEwMDE0OEZCMDAwMTAzRQotOjEwMEM2MDAwMzRFRjBDMDAwMTBGMjgyMTI3QkQwMDIwQUNFRTAwODREQQotOjEwMEM3MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMzU5MDAxODAzRQotOjEwMEM4MDAwMDIwMDI4MjEwRTAwMTg3MjI0MDYwMDgyOEY4NDAwMjg5QQotOjEwMEM5MDAwOTA4NjAwQzQzMEM1MDA0MDUwQTBGRkJBQTM4MDAwNTQyNQotOjEwMENBMDAwOEY4NTAwMzgzQzA2ODAwMDhDQ0QwMUI4MDVBMEZGRkU4MgotOjEwMENCMDAwOEY4OTAwNTgyNDA4NjA4MjI0MDcwMDAyQUUwOTAwMDBEMgotOjEwMENDMDAwQTYwODAwMDhBMjA3MDAwQjhDQTMwMDA4M0MwRTEwMDAyOQotOjEwMENEMDAwQUUwMzAwMTA4Q0EyMDAwQ0FFMDIwMDE0OENCRjAwMTRGNgotOjEwMENFMDAwQUUxRjAwMTg4Q0I5MDAxOEFFMTkwMDI0OENCODAwMjQ2RgotOjEwMENGMDAwQUUxODAwMjg4Q0FGMDAyOEFFMEYwMDJDQUNDRTAxQjg4NwotOjEwMEQwMDAwMEEwMDE5MzJBMzgwMDA1NDhGOEEwMDI4MjdCREZGRTAxMwotOjEwMEQxMDAwQUZCMTAwMTRBRkIwMDAxMDhGODgwMDRDQUZCRjAwMTgwNwotOjEwMEQyMDAwOTM4OTAwMkM5NTQyMDBBQzMwRDEwMEZGMDEwOTE4MkJBQgotOjEwMEQzMDAwMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGMDAwMDU4MjFDOQotOjEwMEQ0MDAwMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxMDEwOTU4MjNGRgotOjEwMEQ1MDAwOTc4MzAwNDgwMDY4MjAyQjE0ODAwMDFCMDAwMDAwMDBDRgotOjEwMEQ2MDAwMTA2ODAwNDMyNDBBMDAwMTExOEEwMDQ4MzRFNzA4ODAxMwotOjEwMEQ3MDAwMzE2NUZGRkYwRTAwMTgxNDAyMDAyMDIxMEUwMDE4NTRFOAotOjEwMEQ4MDAwOEY4NDAwNTg4Rjg0MDAyODk0OEQwMDcwMjVBQzAwMDE1QQotOjEwMEQ5MDAwQTQ4QzAwNzA5NDhCMDA3MDNDMDYwODAwOENDNjMxODhDRgotOjEwMERBMDAwMzE2NzdGRkYxMEU2MDA0RjAwMDAwMDAwMDIwMDIwMjFBNQotOjEwMERCMDAwMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCRgotOjEwMERDMDAwMEEwMDE5MUUyN0JEMDAyMDkxNDQwMEM0MjQwNkZGODA5QwotOjEwMEREMDAwMDA4Njg4MjVBMTUxMDBDNDk3ODQwMDQ4MzA4OEZGRkYxMQotOjEwMERFMDAwMTEwMDAwMUM5Mzg5MDAyQzhGOEUwMDI4MjQxOUVGRkYxRQotOjEwMERGMDAwMDA4QkY4MjM5NUQ4MDBBQzAxNjg2ODJCMzNFOTAwRkYxRAotOjEwMEUwMDAwMDMxOTc4MjRBNUNGMDBBQzUxQTAwMDJBMDEwMDU4MjE3NQotOjEwMEUxMDAwOEUwNTAwMjAyNDA4RkZGQjI0MDMwMDAxMDBBODEwMjRGNQotOjEwMEUyMDAwQUUwMjAwMjAxMTgzMDAyNTM0RTc4MDAwMDIwMDIwMjE1QgotOjEwMEUzMDAwMzE2NUZGRkYwRTAwMTgxNDAxMjAzMDIxOTc4QjAwNDgwOAotOjEwMEU0MDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzQUY5MDAwNENCOAotOjEwMEU1MDAwOTM4OTAwMkM4RjhDMDAyODhGQkYwMDE4OEZCMTAwMTQ0RAotOjEwMEU2MDAwOEZCMDAwMTAyN0JEMDAyMDAzRTAwMDA4QTE4OTAwQzc1MwotOjEwMEU3MDAwOEUwODAwMjAyNDA5RkZGQjM0RTc4MDAwMDEwOTI4MjRBNAotOjEwMEU4MDAwQUUwNTAwMjAxNThBRkZCQTM0RTcwODgwMDIwMDIwMjE1MQotOjEwMEU5MDAwMEUwMDE3RTIzMTY1RkZGRjAyMDAyMDIxMDIyMDI4MjEwOQotOjEwMEVBMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE5MUVGOAotOjEwMEVCMDAwMjdCRDAwMjAwQTAwMTlENTAwMDA0ODIxMDIwMDIwMjE4QQotOjEwMEVDMDAwMzE2NUZGRkYwRTAwMTdFMjAxMjAzMDIxOTc4QjAwNDhBQgotOjEwMEVEMDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzMEEwMDE5RTVBQgotOjEwMEVFMDAwQUY5MDAwNEM5NDg5MDA3MDI0MEE4MDAwMDEyQTQwMjRBRAotOjEwMEVGMDAwQTQ4ODAwNzA5MDg1MDA3MDkwOTkwMDcwMzBBMjAwRkY2NwotOjEwMEYwMDAwMDAwMjE5QzIwMDAzRjgyNzAwMUZDMUMwMzMyRjAwN0Y2MQotOjEwMEYxMDAwMDFGODcwMjVBMDhFMDA3MDBBMDAxOUJEMDIwMDIwMjE4MgotOjEwMEYyMDAwOEY4ODAwMjgyNDAzMDAwMTkxMEEwMDc4OTEwNTAwQzdFQQotOjEwMEYzMDAwMjUwOTAwNzgzMTQ3MDAzRjI0RTZGRkUwMDBDMzE4MDQ4QwotOjEwMEY0MDAwMkNDMjAwMjAzMDY3MDAxOUEzODUwMDJDMTA0MDAwMUEyNQotOjEwMEY1MDAwQUY4OTAwMzgzQzBBODAwMDM1NEIwMDAyMjQwNTAwMDFBRgotOjEwMEY2MDAwMjQwNjAwMDExNEUwMDAxNjAwNkIxMDI0MDAwMDI4MjE2NAotOjEwMEY3MDAwMTQ0MDAwMEYzMDYzMDAyMDEwNjAwMDBGMjQwNTAwMDFCMgotOjEwMEY4MDAwOEQwNjAwNzQ4RDE5MDA3NDI0MDNGRjgwMDBDMzEwMjRBMwotOjEwMEY5MDAwMDAwMjc5NDAzMzM4MDA3RjAxRjg2ODI1M0MwRTEwMDBDQwotOjEwMEZBMDAwMDFBRTYwMjVBRDRDMDgzMDkxMjgwMDAxMzEwNjAwMDFFQQotOjEwMEZCMDAwMEEwMDE5OTMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA5MAotOjEwMEZDMDAwOEQwRjAwNzQ4RDBEMDA3NDI0MThGRjgwMDFGODcwMjRCQgotOjEwMEZEMDAwMDAwRTQxNDAzMUFDMDA3RjAxMEM1MDI1M0MwQjEwMDA0RAotOjEwMEZFMDAwMDE0QjM4MjUzQzA5ODAwMDBBMDAxOTkzQUQyNzA4MzBEMQotOjEwMEZGMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDM4QUZCNDAwMjBFRAotOjEwMTAwMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjMwMDFDQUZCMjAwMThFMwotOjEwMTAxMDAwOEUwNTAwMTAzQzAyMDgwMDhDNDIzMUIwOEY4NjAwM0NFNwotOjEwMTAyMDAwMzBBNzNGRkYwMEUyMTgyQjhDRDIwMDE0MDA4MDg4MjFFQgotOjEwMTAzMDAwOENEMzAwMjAxMDYwMDAwNzAwMDBBMDIxOTBDQjAwMEQ5MQotOjEwMTA0MDAwMjQwQUZGODAwMTRCNDgyNDMxMjgwMEZGMTUwMDAwMENDMgotOjEwMTA1MDAwMDAwNTYzODIwMjIwMjAyMTI0MTEwMDBEQTM5MTAwNTQ3OQotOjEwMTA2MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGNAotOjEwMTA3MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxODk3MjdCRDAwMjgwOAotOjEwMTA4MDAwMzE4NTAwMDM1NEEwRkZGNDAyMjAyMDIxOTRDRjAwMUNERQotOjEwMTA5MDAwOEY4RTAwMjg4RTA3MDAyOEE1Q0YwMEQ4OENDRDAwMTA5OQotOjEwMTBBMDAwMDI0RDMwMjMxMEU2MDA1QzI0MDIwMDFGMEUwMDE4OTc0QQotOjEwMTBCMDAwQTM4MjAwNTQyNDFGRkZGRjEwNUYwMDRFMjQwNEZGRkY5MwotOjEwMTBDMDAwOEY4MzAwNDA4Rjg4MDAzMDAyNjM5ODIxOEQwOTAwMTBDMwotOjEwMTBEMDAwMDEyMzEwMjM4RjgzMDAyMEFEMDIwMDEwQUQxMzAwMjBFOAotOjEwMTBFMDAwOEM2NzAwNzQwMEYzMjAyQjE0ODAwMDYyMDIyMDIwMjEwMgotOjEwMTBGMDAwOEY4NjAwM0M4RTBDMDAyNDhDQzUwMDI0MTE4NTAwMDdDRgotOjEwMTEwMDAwMDIyMDIwMjEyNDBFMDAxQzBFMDAxODk3QTM4RTAwNTRFQwotOjEwMTExMDAwMjQwREZGRkYxMDREMDAzNzI0MDRGRkZGOEY4NDAwMzBBMwotOjEwMTEyMDAwOEM5ODAwMjQyNzBGMDAwMUFDOEYwMDI0MTI3MjAwNDQxOQotOjEwMTEzMDAwOEY5OTAwMjA4RjMyMDA3NDEyNTMwMDQxM0MwQTAwODBDNgotOjEwMTE0MDAwOEUwOTAwMDAwMTJBMTAyNDE0NDAwMDNBMDAwMDAwMDAxQgotOjEwMTE1MDAwOEUwNDAwMTQyNDEyRkZGRjEwOTIwMDA2MjQwQjAwMUJDMwotOjEwMTE2MDAwMDIyMDIwMjEwRTAwMTg5N0EzOEIwMDU0MTA1MjAwMjE1QQotOjEwMTE3MDAwMjQwNEZGRkY4RTAzMDAwMDNDMEMwMDAxMDA2QzI4MjRCNwotOjEwMTE4MDAwMTBBMDAwMTMzQzA2MDA4MDAwNjZBMDI0MTY4MDAwMDkxMQotOjEwMTE5MDAwMDIwMDI4MjEwMjIwMjAyMTI0MEUwMDFBMEUwMDE4OTc5OAotOjEwMTFBMDAwQTM4RTAwNTQyNDBERkZGRjEwNEQwMDEyMjQwNEZGRkZGNgotOjEwMTFCMDAwMDIwMDI4MjEwMjIwMjAyMTBFMDAxOEI3MjQwNjAwMDE3OQotOjEwMTFDMDAwMjQxMEZGRkYyNDA0RkZGRjEwNTAwMDBBMjQxNDAwMDEyNAotOjEwMTFEMDAwOEY4RjAwMzAwMjIwMjAyMTAyODAzMDIxOTVGMjAwMzREMAotOjEwMTFFMDAwMjQwNTAwMDEyNjU4MDAwMTBFMDAxOTkzQTVGODAwMzRDQgotOjEwMTFGMDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM3QgotOjEwMTIwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEzMQotOjEwMTIxMDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDQwMDBFM0M4MjFCOQotOjEwMTIyMDAwMDI1OUMwMkIxMzAwRkZBODhGODgwMDMwMEEwMDFBN0NENwotOjEwMTIzMDAwMjQwMjAwMThBQzgwMDAyMDBBMDAxQUE2OEUwNDAwMTRCNAotOjEwMTI0MDAwOEUxRjAwMDAzQzA3MDA4MDAzRTc5ODI0MTY2MEZGRjkxQQotOjEwMTI1MDAwMjQwODAwMUEwMjIwMjAyMTBFMDAxODk3QTM4ODAwNTRBOQotOjEwMTI2MDAwMjQwM0ZGRkYxNDQzRkZCQTI0MDRGRkZGMEEwMDFBQ0YzMAotOjEwMTI3MDAwOEZCRjAwMjQyNDBCMDAxRDBFMDAxODk3QTM4QjAwNTQ3MQotOjEwMTI4MDAwMjQwQUZGRkYxNDRBRkY5QTI0MDRGRkZGMEEwMDFBQ0YyMgotOjEwMTI5MDAwOEZCRjAwMjQ4Rjg1MDAyODI3QkRGRkQ4QUZCMzAwMUM2NwotOjEwMTJBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA1NAotOjEwMTJCMDAwOTBBNzAwQzQ4RjkwMDAzODI0MTJGRkZGMzRFMjAwNDA1MgotOjEwMTJDMDAwOTIwNjAwMDBBMEEyMDBDNDhFMDMwMDEwMDA4MDk4MjFBNgotOjEwMTJEMDAwMTA3MjAwMDYzMEQxMDAzRjI0MDgwMDBEMEUwMDE4OTc1MAotOjEwMTJFMDAwQTM4ODAwNTQxMDUyMDAyNjI0MDZGRkZGOEY4QTAwMjg4RQotOjEwMTJGMDAwOEUwOTAwMTg4RDQ0MDBDMDExMjQwMDA3MjQwQzAwMEUzNAotOjEwMTMwMDAwMDI2MDIwMjEwRTAwMTg5N0EzOEMwMDU0MjQwQkZGRkZDRAotOjEwMTMxMDAwMTA0QjAwMUIyNDA2RkZGRjI0MDQwMDIwMTIyNDAwMDRBRAotOjEwMTMyMDAwOEY4RDAwMjg5MUFGMDBDNDM1RUUwMDIwQTFBRTAwQzQxRgotOjEwMTMzMDAwOEY4NTAwNDAxMEEwMDAxQTAwMDAwMDAwMTIyNDAwNEIwRQotOjEwMTM0MDAwOEY5ODAwMjg4RjkyRkVFQzI0MDZGRkZEOTcxMDAwNzAwNgotOjEwMTM1MDAwOTY1MTAwMEExMjMwMDAwQjhGQkYwMDIwM0MxRjA4MDA3RQotOjEwMTM2MDAwOEZGRjMxOEMwM0U1QzgyQjE3MjAwMDFFMDI2MDIwMjE1RgotOjEwMTM3MDAwMDAwMDI4MjEwRTAwMTk5MzI0MDYwMDAxMDAwMDMwMjFFRQotOjEwMTM4MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRFNAotOjEwMTM5MDAwOEZCMDAwMTAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNgotOjEwMTNBMDAwNTIyNDAwMkE4RTAzMDAxNDhGODQwMDI4OTQ4OTAwNzAzMAotOjEwMTNCMDAwMjUyODAwMDFBNDg4MDA3MDk0ODcwMDcwM0MwNTA4MDA2RgotOjEwMTNDMDAwOENBNTMxODgzMEUyN0ZGRjEwNDUwMDBFMDAwMDAwMDA0MAotOjEwMTNEMDAwMDI2MDIwMjEwRTAwMTkxRTI0MDUwMDAxMEEwMDFCMzFBNQotOjEwMTNFMDAwMDAwMDMwMjEyNDAyMDAyREEzODIwMDU0MEUwMDE4OTcyMwotOjEwMTNGMDAwMjQxM0ZGRkYxNDUzRkZFMTI0MDZGRkZGMEEwMDFCMzJGMgotOjEwMTQwMDAwOEZCRjAwMjA5NDk4MDA3MDI0MTk4MDAwMjQwNTAwMDFFQgotOjEwMTQxMDAwMDMxOTkwMjRBNDkyMDA3MDkwOTEwMDcwOTA4RDAwNzAzOAotOjEwMTQyMDAwMzIzMDAwRkYwMDEwNzlDMjAwMEY3MDI3MDAwRTYxQzAzQgotOjEwMTQzMDAwMzFBQjAwN0YwMTZDNTAyNUEwOEEwMDcwMEUwMDE5MUU5MAotOjEwMTQ0MDAwMDI2MDIwMjEwQTAwMUIzMTAwMDAzMDIxMjQwNkZGRkYyQQotOjEwMTQ1MDAwMTQ2NkZGRDY4Rjg0MDAyODAyNjAyMDIxMEUwMDE5MUUxQQotOjEwMTQ2MDAwMjQwNTAwMDEwQTAwMUIzMTAwMDAzMDIxMDI2MDIwMjEwOAotOjEwMTQ3MDAwMEEwMDFCNEIyNDAyMDAwQThGODgwMDI4MjdCREZGRThDMgotOjEwMTQ4MDAwQUZCMDAwMTBBRkJGMDAxNDkxMEEwMEM0OEY4NzAwMzhCRQotOjEwMTQ5MDAwMDA4MDgwMjEzNTQ5MDA0MDhDRTYwMDEwQTEwOTAwQzQ3RAotOjEwMTRBMDAwM0MwMjA4MDA4QzQyMzFCMDMwQzUzRkZGMDBBMjE4MkIyRgotOjEwMTRCMDAwMTA2MDAwMDc4Rjg1MDAzQzI0MERGRjgwOTBBRTAwMEQ2QQotOjEwMTRDMDAwMDFBRTYwMjQzMThCMDBGRjE1NjAwMDA4MDAwNkMzODI2NgotOjEwMTREMDAwMDIwMDIwMjEyNDAzMDAwRDhGQkYwMDE0OEZCMDAwMTBFNAotOjEwMTRFMDAwMjdCRDAwMTgwQTAwMTg5N0EzODMwMDU0MzMwNjAwMDM5MQotOjEwMTRGMDAwMjQwRjAwMDI1NENGRkZGNzAyMDAyMDIxOTRBMjAwMUMwOQotOjEwMTUwMDAwOEY4NTAwMjgyNDE5MDAyM0E0QTIwMEQ4OENFODAwMDBBRAotOjEwMTUxMDAwMDAwODFFMDIzMDdGMDAzRjEzRjkwMDM1M0MwQTAwODNBQgotOjEwMTUyMDAwOENFODAwMTg4Q0E2MDBDMDExMDYwMDA4MDAwMDAwMDAxRQotOjEwMTUzMDAwMjQwNTAwMEUwRTAwMTg5N0EzODUwMDU0MjQwN0ZGRkYxMgotOjEwMTU0MDAwMTA0NzAwMTgyNDA0RkZGRjhGODUwMDI4OTBBOTAwQzRDRAotOjEwMTU1MDAwMzUyNDAwMjBBMEE0MDBDNDhGOEMwMDMwOTE4RTAwMEQ5MwotOjEwMTU2MDAwMzFDRDAwN0ZBMThEMDAwRDhGODMwMDQwMTA2MDAwMUNFNQotOjEwMTU3MDAwMDIwMDIwMjE4Rjg0MDAzQzhDOTgwMDEwMDMwMzc4MkJGQwotOjEwMTU4MDAwMTFFMDAwMEQyNDE5MDAxODAyMDAyMDIxQTM5OTAwNTQzNQotOjEwMTU5MDAwMEUwMDE4OTcyNDEwRkZGRjEwNTAwMDAyMjQwNEZGRkZENAotOjEwMTVBMDAwMDAwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMDA4MDEwMjE5OAotOjEwMTVCMDAwMDNFMDAwMDgyN0JEMDAxODhDODYwMDEwOEY5RjAwMzBDNAotOjEwMTVDMDAwMDIwMDIwMjEwMEMzMTAyM0FGRTIwMDEwMjQwNTAwMDExNwotOjEwMTVEMDAwMEUwMDE5OTMyNDA2MDAwMTBBMDAxQkJBMDAwMDIwMjEwNgotOjEwMTVFMDAwMEUwMDE5MUUyNDA1MDAwMTBBMDAxQkJBMDAwMDIwMjE2QwotOjEwMTVGMDAwMDEwQTU4MjQxNTZBRkZEOThGOEMwMDMwQTBBNjAwRUM5MAotOjEwMTYwMDAwMEEwMDFCQTdBMzg2MDA0NjI3QkRGRkQ4QUZCMDAwMTA3NQotOjEwMTYxMDAwOEY5MDAwMzhBRkIyMDAxOEFGQkYwMDIwQUZCMzAwMUNFRQotOjEwMTYyMDAwQUZCMTAwMTQ4RTExMDAxMDNDMDMwODAwOEM2MzMxQjA4MAotOjEwMTYzMDAwMzIyNTNGRkYwMEEzMTAyQjEwNDAwMDA4MDA4MDkwMjFBRQotOjEwMTY0MDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjRBNwotOjEwMTY1MDAwMzEwNzAwRkYxNEUwMDAwQjAwMTE2QjgyMDI0MDIwMjFEMwotOjEwMTY2MDAwMjQxMjAwMERBMzkyMDA1NDhGQkYwMDIwOEZCMzAwMUNFMgotOjEwMTY3MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE4OTdCNQotOjEwMTY4MDAwMjdCRDAwMjgzMUFDMDAwMzI0MEIwMDAxNTU4QkZGRjQ2QgotOjEwMTY5MDAwMDI0MDIwMjE5MENGMDAwRDMxRUUwMDA4MTFDMDAwNjAwMwotOjEwMTZBMDAwOEY5MzAwNDAxNjYwMDAwOTI0MDIwMDI3OEUxOTAwMEM1OQotOjEwMTZCMDAwOENEODAwMjAxNzM4MDAwNTI0MDIwMDIwOEUwMjAwMDg3NAotOjEwMTZDMDAwOENERjAwMjQxMDVGMDA0MDI0MDIwMDIwMEUwMDE4OTdEOQotOjEwMTZEMDAwQTM4MjAwNTQyNDA2RkZGRjEwNDYwMDMzMjQwNEZGRkZCQQotOjEwMTZFMDAwOEY5OTAwMzAyNDBBRkZGNzNDMTM4MDBFOTMyOTAwMEREOAotOjEwMTZGMDAwMjQwNEZGODAzQzBEODAwMDAxMkFGODI0QTMzRjAwMEQ0NAotOjEwMTcwMDAwOEY5OTAwMjAzQzA4MDgwMDhEMDgzMUFDOEY4MzAwNTg2OQotOjEwMTcxMDAwOTcyNzAwNzg4RjlGMDAzMDAxMDMxMDIxMzBFNTdGRkY2RAotOjEwMTcyMDAwMDAwNTMwNDAwMDQ2NzgyMTMxRjgwMDdGMDMxMzYwMjEyNgotOjEwMTczMDAwMDFFNDcwMjRBREFFMDAyQ0E1OTEwMDAwOEZFQjAwMjhEMQotOjEwMTc0MDAwMjU2QTAwMDFBRkVBMDAyODhGRTMwMDJDOEUwOTAwMkNFNwotOjEwMTc1MDAwMDA2OTQwMjFBRkU4MDAyQzhFMDcwMDJDQUZFNzAwMzA3NQotOjEwMTc2MDAwOEUwNTAwMTRBRkU1MDAzNDk3RTYwMDNBMjRDMjAwMDE2QwotOjEwMTc3MDAwQTdFMjAwM0E5NzMzMDA3ODNDMTAwODAwOEUxMDMxQjA5MQotOjEwMTc4MDAwMjY2MzAwMDEzMDcxN0ZGRjEyMzAwMDI3MDA2MDMwMjE5NgotOjEwMTc5MDAwOEY4RjAwMjAwMjQwMjAyMTI0MDUwMDAxMEUwMDE5MUUxOQotOjEwMTdBMDAwQTVFNjAwNzgwMDAwMjAyMThGQkYwMDIwOEZCMzAwMUMyOQotOjEwMTdCMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjE3QwotOjEwMTdDMDAwMDNFMDAwMDgyN0JEMDAyODhFMDUwMDE0MjQxM0ZGRkY0NgotOjEwMTdEMDAwMTBCMzAwMUQ4RjgzMDAyODhFMDgwMDE4OEM2NzAwQzA4RQotOjEwMTdFMDAwMTUwNzAwMDkyNDAyMDAwRThFMEEwMDI0OENDOTAwMjg2NwotOjEwMTdGMDAwMTU0OTAwMDUyNDAyMDAyMThFMDcwMDI4OENDQjAwMkNGRgotOjEwMTgwMDAwMTBFQjAwMTMyNDAyMDAxRjBFMDAxODk3QTM4MjAwNTQ0RgotOjEwMTgxMDAwMTQ1M0ZGQjMyNDA0RkZGRjBBMDAxQzNDOEZCRjAwMjBCOQotOjEwMTgyMDAwMEEwMDFDMDQyNDAyMDAyNDI0MEU4MDAwMDA2RTY4MjQ5OAotOjEwMTgzMDAwMzFBQ0ZGRkYwMDBDNUJDMjMxNzEwMEZGMDAxMTgwMjc0QgotOjEwMTg0MDAwMEEwMDFDMzUwMDEwMzNDMDBBMDAxQzUzMjQwMjAwMjU3NgotOjEwMTg1MDAwOEUwNTAwMkMxMEEwRkZFQzI0MDIwMDIzOEY4RTAwMjBBOAotOjEwMTg2MDAwOERDRDAwNzQwMUE1NjAyQjE1ODBGRkU3MjQwMjAwMjZCMgotOjEwMTg3MDAwOENDRjAwMTQwMEE3QzAyMTAxRjgyMDJCMTA4MEZGOTkwNQotOjEwMTg4MDAwOEY5OTAwMzAwMjQwMjAyMTBBMDAxQzUzMjQwMjAwMjJCQwotOjEwMTg5MDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTQ0QgotOjEwMThBMDAwQUZCRjAwMTg4RTA1MDAxMDNDMDMwODAwOEM2MzMxQjBGOAotOjEwMThCMDAwMDA4MDg4MjEzMEE0M0ZGRjAwODMxMDJCMTA0MDAwMDdEOAotOjEwMThDMDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjQyNQotOjEwMThEMDAwMzEwNzAwRkYxNEUwMDAwOThGOEIwMDQwMjQxMDAwMEQzOQotOjEwMThFMDAwMDIyMDIwMjFBMzkwMDA1NDhGQkYwMDE4OEZCMTAwMTQ1NAotOjEwMThGMDAwOEZCMDAwMTAwQTAwMTg5NzI3QkQwMDIwMTE2MDAwMDg2MwotOjEwMTkwMDAwMDAwNUMzODI4RjhGMDAyODhGOEVGRUVDMjQwN0ZGRkQxOQotOjEwMTkxMDAwOTVFQzAwNzA5NUNEMDAwQTExQUMwMDM4OEZCRjAwMTgwRgotOjEwMTkyMDAwMzMwNTAwMDMxNEEwMDAxMDAwMDAwMDAwOTIxOTAwMDIwQgotOjEwMTkzMDAwMTMyMDAwNDEwMDAwMDAwMDhFMDYwMDI0NTBDMDAwMEY1QwotOjEwMTk0MDAwOTIwNDAwMDMwMjIwMjAyMTI0MDIwMDBGMEUwMDE4OTdBOQotOjEwMTk1MDAwQTM4MjAwNTQyNDA4RkZGRjE0NDgwMDA3MjQwN0ZGRkY1OAotOjEwMTk2MDAwMEEwMDFDRDA4RkJGMDAxODkwQzMwMDBEMzA2NDAwMDgxRgotOjEwMTk3MDAwMTA4MDAwMzcwMjIwMjAyMTkyMDQwMDAzMjQwNzAwMDI3NwotOjEwMTk4MDAwMzA4OTAwRkYxNTI3MDAwNTMwOEYwMEZGOEY4QTAwNDA0NwotOjEwMTk5MDAwMTE0MDAwMzEyNDBDMDAyQzMwOEYwMEZGMzlFNTAwMTA3RAotOjEwMTlBMDAwMkNBRDAwMDEyREVFMDAwMTAyMDAyODIxMDFDRDMwMjVEMwotOjEwMTlCMDAwMEUwMDE4QjcwMjIwMjAyMTI0MTBGRkZGMTA1MDAwMEU0NwotOjEwMTlDMDAwMjQwN0ZGRkY4RjgzMDA0MDEwNjAwMDE3MDIyMDIwMjFCMgotOjEwMTlEMDAwM0MxOTA4MDA4RjM5MzE4QzAzMjNDMDJCNTcwMDAwMENCMQotOjEwMTlFMDAwMjQxMTAwMkQwMjIwMjAyMTAwMDAyODIxMEUwMDE5OTMyRgotOjEwMTlGMDAwMjQwNjAwMDEwMDAwMzgyMThGQkYwMDE4OEZCMTAwMTRBOQotOjEwMUEwMDAwOEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MjdCRDAwMjA4NwotOjEwMUExMDAwMEUwMDE4OTdBMzkxMDA1NDE0NTBGRkY2MjQwN0ZGRkZGRgotOjEwMUEyMDAwMEEwMDFDRDA4RkJGMDAxODBFMDAxOTFFMjQwNTAwMDFFQgotOjEwMUEzMDAwMEEwMDFDQ0YwMDAwMzgyMThDREYwMDI0OEUwMjAwMjQxNQotOjEwMUE0MDAwNTQ1RkZGQzEwMjIwMjAyMTBBMDAxQ0IwOTIwNDAwMDM1MQotOjEwMUE1MDAwMEEwMDFDQTQyNDAyMDAxMDAyMjAyMDIxMEUwMDE4OTc2NgotOjEwMUE2MDAwQTM4QzAwNTQyNDBCRkZGRjEwNEJGRkUzMjQwN0ZGRkY2MAotOjEwMUE3MDAwMEEwMDFDQjc5MjA0MDAwMzMwQTUwMEZGMjQwNjAwMDFGMQotOjEwMUE4MDAwMjRBOTAwMDEwMEM5MTAyQjEwNDAwMDBDMDAwMDQwMjFDNwotOjEwMUE5MDAwMjQwQTAwMDEwMEE2MTgyMzMwOEIwMDAxMjRDNjAwMDE4RgotOjEwMUFBMDAwMDA2QTM4MDQwMDA0MjA0MjExNjAwMDAyMDBDOTE4MkJBQgotOjEwMUFCMDAwMDEwNzQwMjUxNDYwRkZGODAwQTYxODIzMDNFMDAwMDg4MgotOjEwMUFDMDAwMDEwMDEwMjEyN0JERkZEOEFGQjAwMDE4OEY5MDAwMzg1QgotOjEwMUFEMDAwQUZCMTAwMUNBRkJGMDAyMDI0MDNGRkZGMjQxMTAwMkY3MwotOjEwMUFFMDAwQUZBMzAwMTA5MjA2MDAwMDI0MDUwMDA4MjYxMDAwMDE5NAotOjEwMUFGMDAwMDA2NjIwMjYwRTAwMUNFRjMwODQwMEZGMDAwMjFFMDA0RQotOjEwMUIwMDAwM0MwMjFFREMzNDQ2NkY0MTBBMDAxRDE3MDAwMDEwMjEwNAotOjEwMUIxMDAwMTBBMDAwMDkwMDgwMTgyMTI0NDUwMDAxMzBBMkZGRkYxOQotOjEwMUIyMDAwMkM0NTAwMDgwNDYxRkZGQTAwMDMyMDQwMDA4NjIwMjZBRgotOjEwMUIzMDAwMTRBMEZGRjkwMDgwMTgyMTBFMDAxQ0VGMjQwNTAwMjBERQotOjEwMUI0MDAwOEZBMzAwMTAyNjI5RkZGRjMxMzEwMEZGMDAwMzQyMDI1RQotOjEwMUI1MDAwMjQwNzAwRkYxNjI3RkZFMjAxMDIxODI2MDAwMzUwMjc4MgotOjEwMUI2MDAwQUZBQTAwMTRBRkFBMDAxMDAwMDAzMDIxMjdBODAwMTA2RgotOjEwMUI3MDAwMjdBNzAwMTQwMEU2NzgyMzkxRUQwMDAzMjRDRTAwMDE4RQotOjEwMUI4MDAwMDBDODYwMjEzMUM2MDBGRjJDQ0IwMDA0MTU2MEZGRjlBRQotOjEwMUI5MDAwQTE4RDAwMDA4RkEyMDAxMDhGQkYwMDIwOEZCMTAwMUMwQwotOjEwMUJBMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDI4OTM4MzAwMzQ5RAotOjEwMUJCMDAwMjdCREZGRTAyNDAyMDAzNEFGQjEwMDE0QUZCMDAwMTAyNQotOjEwMUJDMDAwQUZCRjAwMUNBRkIyMDAxODAwODA4ODIxMTA2MjAwNjIxNQotOjEwMUJEMDAwMDBBMDgwMjE5MjA0MDAwNDE0ODAwMDQ1OEY4ODAwMjgxMgotOjEwMUJFMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY3MgotOjEwMUJGMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTQ0MDAwNEQ0MAotOjEwMUMwMDAwQUY4NTAwNDA5NzhBMDA0ODhGODcwMDRDMDE0NzEwMjMxQQotOjEwMUMxMDAwMTBBMDAwMzJBNzgyMDA0ODhGOTgwMDIwMzA0Q0ZGRkZCMAotOjEwMUMyMDAwOTMxMjAwN0MwMDEyNzg4MjMxRjEwMDAxMDAxMTcwODA2MwotOjEwMUMzMDAwMDFDNTY4MjEwMThENTgyQjExNjAwMDYxOEY4NjAwMjgzNQotOjEwMUM0MDAwOEY4OTAwMjQ4Rjg0MDA1MDEwODkwMDVFM0MwMjNGMDE4MAotOjEwMUM1MDAwOEUxRjAwMDAzQzEwMjUwMDAzRTJDODI0MTczMDAwN0FENAotOjEwMUM2MDAwOEY4NDAwMzg4Rjg3MDAzODhGODYwMDI4OENFMzAwMDAyRgotOjEwMUM3MDAwQUNDMzAwNzg4Q0U1MDAxMEFDQzUwMDg4OEY4NzAwNENBMQotOjEwMUM4MDAwOEY4NTAwNDA5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjM2MgotOjEwMUM5MDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNGNQotOjEwMUNBMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUM2NQotOjEwMUNCMDAwMTYyMDAwNTEwMTQ1MjAyMUFGODQwMDRDMDAwMDIwMjE1NgotOjEwMUNDMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBRQotOjEwMUNEMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY4NDAwMjQyRAotOjEwMUNFMDAwQUY4MDAwNEMwMDg3MzAyMTBBMDAxRDgwQUY4NjAwMjRBMQotOjEwMUNGMDAwMjQxRjAwMENBMzlGMDA1NDBFMDAxODk3MDIyMDIwMjFERgotOjEwMUQwMDAwMjQxOUZGRkYxMDU5RkZFRTI0MDRGRkZGOEY4ODAwMjhERAotOjEwMUQxMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY0MAotOjEwMUQyMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTA0MEZGQjVBQgotOjEwMUQzMDAwQUY4NTAwNDAwMjIwMjAyMTI0MDkwMDE5QTM4OTAwNTQwNgotOjEwMUQ0MDAwMEUwMDE4OTcyNDExRkZGRjEwNTFGRkREMjQwNEZGRkY0MAotOjEwMUQ1MDAwMEEwMDFENTI4Rjg1MDA0MDhGODQwMDI4OEY4NzAwMzgyRAotOjEwMUQ2MDAwOENGMjAwMzA5MDg2MDBDNDMwQzUwMDEwMTRBMDAwMTAyMgotOjEwMUQ3MDAwOEY4MzAwNEMyQzY4MDAwNTE1MDAwMDI4MDAwMDAwMDAyRgotOjEwMUQ4MDAwOTA4QTAwQzQyNDZCRkZGQzMxNDkwMDEwMTUyMDAwMDgyNAotOjEwMUQ5MDAwMzE2NDAwRkY4RjhEMDA1MDhGOEMwMDI0MTFBQzAwMDQ0MwotOjEwMURBMDAwMzg4RjAwMDEzMUVFMDAwMTE1QzAwMDJGMDAwMDAwMDA0NwotOjEwMURCMDAwMEUwMDFEMDIwMDAwMDAwMDBBMDAxREQ5MDAwMDAwMDBGNgotOjEwMURDMDAwOEY4OTAwMjQ5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjMzOQotOjEwMUREMDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNCNAotOjEwMURFMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUMyNAotOjEwMURGMDAwMTIyMEZGQjEwMTQ1MjAyMTI1MTgwMDA0QTM5ODAwMkNEMgotOjEwMUUwMDAwOTRDRjAwQUMyNDkyMDAwNEFGOTIwMDRDMzVGMTIwMDAzNgotOjEwMUUxMDAwQTREMTAwQUMwQTAwMUQ4MTAwMDAyMDIxOEM4MjAwRENDRQotOjEwMUUyMDAwMTI0MkZGNkMwMjIwMjAyMTI0MTgwMDA1QTM5ODAwNTRDMAotOjEwMUUzMDAwMEUwMDE4OTcyNDEyRkZGRjE0NTJGRjY2MjQwNEZGRkZDMAotOjEwMUU0MDAwMEEwMDFEODI4RkJGMDAxQzMwRTUwMEZGMEUwMDE3OUVBOAotOjEwMUU1MDAwMDAwMDMwMjE4Rjg2MDAyODhGODcwMDRDOEY4OTAwMjQ1NgotOjEwMUU2MDAwMEEwMDFENzI4Rjg1MDA0MDBFMDAxN0M5MDAwMDAwMDA5NwotOjEwMUU3MDAwMEEwMDFERDkwMDAwMDAwMDkzODMwMDQ2MjdCREZGRTA0MwotOjEwMUU4MDAwMjQwMjAwMDJBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMUNCMwotOjEwMUU5MDAwMDA4MDg4MjFBRkIwMDAxMDAwMDA5MDIxMTA2MjAwNTUzMgotOjEwMUVBMDAwMjQwNEZGRkQ5NzgzMDA0ODhGODUwMDRDMzA2NkZGRkZCOAotOjEwMUVCMDAwMDBDNTIwMkIxNDgwMDA1QjkzODcwMDM0M0MwODgwMDAxMQotOjEwMUVDMDAwOTUwNDAxMjAxMEU1MDA1MjhGOEEwMDI0OEY4NDAwNTA3MQotOjEwMUVEMDAwMzBBNTAwRkYwRTAwMTc5RTI0MDYwMDAxOEY5RjAwNThCQQotOjEwMUVFMDAwM0MwNTgwMDAzQzE5NDA4MDI3RUQwMTc4MzFCMDAwNzgzNgotOjEwMUVGMDAwMjQwRUZGODAwMjE5NTgyNTM0QUYwOTAwMzFCODAwMDdCRAotOjEwMUYwMDAwMDFBRTYwMjRBQ0FDMDgwMDAzMEY4MDIxQUNBQjA4MTAxQwotOjEwMUYxMDAwMDIyMDIwMjEwMjAwMjgyMTBFMDAxRDNDQUY5MDAwMzgzNQotOjEwMUYyMDAwMjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGOEUwQzAwMTAzNgotOjEwMUYzMDAwM0MwNzA4MDA4Q0U3MzFCMDkyMDYwMDAwMzE4NDNGRkY3NwotOjEwMUY0MDAwMDA4NzEwMkIxMDQwMDAyMzMwQ0QwMDNGOEY5ODAwNThBMQotOjEwMUY1MDAwMDAwNDcxODAzQzA0MDgwMDhDODQzMUE4MjQwOUZGODBBRgotOjEwMUY2MDAwOTM5MDAwNDUwMDk4NDAyMTAxMEUyMDIxMDA4OTcwMjRBMwotOjEwMUY3MDAwMDAwRTUxNDAzQzA5ODAwMDMwOTkwMDdGM0MwRjAwODBFQQotOjEwMUY4MDAwOEY4ODAwMjgzNTI1MDk0MDM1RTIwMDAxMDE1OTM4MjVBMAotOjEwMUY5MDAwMzA4QjAwNzgzMDg2MDAwNzNDMDMxMDAwM0MxRjgwMEMxQgotOjEwMUZBMDAwMDBDNUMwMjEwMTYyNTgyNTAwRTM1MDI1MDMzRjc4MjE3OAotOjEwMUZCMDAwMzYwNTAwMDFBRDJFMDgwNEFGOTgwMDNDQUQyQjA4MTQ4NwotOjEwMUZDMDAwQUY4RjAwMzBBRDJFMDAyOEFEMDQwMDc0QUQyQTA4MzA2QwotOjEwMUZEMDAwQTM4NTAwNDU5MzgzMDA0NjI0MTAwMDAzNTA3MDAwMjcxQQotOjEwMUZFMDAwMjVBM0ZGRTAyNDBDMDAwMTEwNkMwMDFDMjQwNjAwMjMzNAotOjEwMUZGMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ0NwotOjEwMjAwMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjBFMQotOjEwMjAxMDAwMzE0OTAwMDM1NTIwRkZBRThGODQwMDUwMEEwMDFFMTU4MQotOjEwMjAyMDAwOEY5MDAwNTA4Rjg0MDA1MDMwNjUwMEZGMEUwMDE3OUU4NwotOjEwMjAzMDAwMjQwNjAwMDE5MzhCMDAzNDI0MDUwMDM0MTE2NTAwMTgzOAotOjEwMjA0MDAwOTc4MzAwNDg4Rjg1MDA0QzMwNjJGRkZGMDBBMjU4MjMyMQotOjEwMjA1MDAwQUY4QjAwNEMwQTAwMUU0REE3ODAwMDQ4MTFBNjAwMzcyOAotOjEwMjA2MDAwMDAwMDAwMDAwMjIwMjAyMTI0MTEwMDBCMEUwMDE4OTcxMAotOjEwMjA3MDAwQTM5MTAwNTQwQTAwMUU0RDAwNDA5MDIxMkM3MjAwMjBCNAotOjEwMjA4MDAwMTI0MEZGRjgwMDAzRjg4MDNDMDcwODAxMjRFNzgxM0M3OAotOjEwMjA5MDAwMDNFN0M4MjE4RjJEMDAwMDAxQTAwMDA4MDAwMDAwMDAwOAotOjEwMjBBMDAwOEY4NTAwNEMyQ0EyMDAwNTU0NDAwMDFEQTc4MDAwNDhERAotOjEwMjBCMDAwOTc4QTAwNDgzMTQ4RkZGRjAwQTg0ODIzMkQyRjAwMDVDQwotOjEwMjBDMDAwMTFFMDAwMDMzMTQ0MDBGRjI0QUVGRkZDMzFDNDAwRkZFNwotOjEwMjBEMDAwOEY5MDAwNTA4Rjk4MDAyNDEyMTgwMDA0Mzg5OTAwMDE0NgotOjEwMjBFMDAwMzMyRDAwMDExNUEwMDAyOTAwMDAwMDAwOEY5MTAwMjg2OQotOjEwMjBGMDAwOTIyNTAwQzQzNEEzMDAxMEEyMjMwMEM0OTc4MzAwNDg5MwotOjEwMjEwMDAwOEY4NTAwNEM4Rjg0MDAyODMwNjJGRkZGMDBBMjU4MjM4NwotOjEwMjExMDAwQUM4MDAwRENBNzgwMDA0ODBBMDAxRTREQUY4QjAwNEM0RAotOjEwMjEyMDAwMzA2MkZGRkYwMEEyNTgyMzBBMDAxRTREQUY4QjAwNEMwNwotOjEwMjEzMDAwMjQwM0ZGRkYxMTgzMDAwNTAwMDAwMDAwMEUwMDFCNkY0OQotOjEwMjE0MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBRjZBOAotOjEwMjE1MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFCRDNCQQotOjEwMjE2MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBNEQzMQotOjEwMjE3MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFDNzVGNwotOjEwMjE4MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDE3Qzk5OAotOjEwMjE5MDAwMDAwMDAwMDA5NzgzMDA0ODhGODUwMDRDMzA2Q0ZGRkZFMwotOjEwMjFBMDAwMDBBQzM4MjMyQ0ZGMDAwNTUzRTBGRkE4MzA2MkZGRkY4RQotOjEwMjFCMDAwOEY4NjAwMjhBNzgwMDA0OEFDQzIwMERDMzA2MkZGRkY5OQotOjEwMjFDMDAwMDBBMjU4MjMwQTAwMUU0REFGOEIwMDRDMjdCREZGRDA0NAotOjEwMjFEMDAwQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI4QUZCNTAwMjRGOQotOjEwMjFFMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjEwMDE0M0MwQzgwMDBCMgotOjEwMjFGMDAwOEQ4ODAxMjgyNDBGRkY4MDNDMDc4MDBBMjUxMDAxMDBFQwotOjEwMjIwMDAwMjUwQjAwODAwMjBGNjgyNDMyMDUwMDdGMDE2RjcwMjRDNwotOjEwMjIxMDAwQUQ4RTAwOTAwMEE3MjgyMUFEOEQwMDI0OTBBNzAwRUM4MgotOjEwMjIyMDAwMzE2OTAwN0YzQzBBODAwNDAxMkExODIxQTM4NzAwNDZGNwotOjEwMjIzMDAwOTA2NjAwN0MwMDgwOTAyMUFGODMwMDIwMzBDMjAwMDJCNQotOjEwMjI0MDAwQUY4ODAwNThBRjg1MDAyODAwQTAxODIxMTQ0MDAwMDI3NAotOjEwMjI1MDAwMjQwNDAwMzQyNDA0MDAzMEEzODQwMDM0OEM2NjAwQ0NCMQotOjEwMjI2MDAwMzBGMTAwRkYyNDA0MDAwNEFGODYwMDRDMTIyNDAwMDQ2NwotOjEwMjI3MDAwQTM4MDAwNTQ4RTUzMDAwNDE2NjAwMDFEM0MwODgwMDBBQgotOjEwMjI4MDAwOTM4NzAwNDUzMEYyMDAwMTEyNDAwMDBGOEZCRjAwMjhGNQotOjEwMjI5MDAwOENCODAwNzQ4Q0E0MDA3NDI0MTlGRjgwMDMxOTg4MjQ1RQotOjEwMjJBMDAwMDAxMTcxNDAzMDhGMDA3RjAxQ0Y2MDI1M0MwRDIwMDA3MAotOjEwMjJCMDAwMDE4RDU4MjUzMEY1MDBGRTNDMEE4MDAwQUQ0QjA4MzBGQQotOjEwMjJDMDAwQTM5NTAwNDU4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA1MAotOjEwMjJEMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNAotOjEwMjJFMDAwMjQwMjAwMDEyN0JEMDAzMDAzRTAwMDA4QUNBNjAwQ0NBQQotOjEwMjJGMDAwOEU1OTAwMDg5NTFGMDEyMDhFNDYwMDEwMDMzRkMwMjExMwotOjEwMjMwMDAwMzMwN0ZGRkYzMEY1MDAwRjMyQjQwMDAxQUY4NjAwMjQyMQotOjEwMjMxMDAwMTY4MDAwM0JBMzk1MDA0NDM1MDYwQzAwMDJBNjEwMjE1MAotOjEwMjMyMDAwMDBGNTE4MjNBRDAzMDA4NEFGODIwMDUwOEU0OTAwMDRFRAotOjEwMjMzMDAwMzEyOEZGRkYxMTAwMDAyQkE3ODkwMDQ4MjQxMEZGODBERgotOjEwMjM0MDAwM0MxNTgwMDAzQzE0MjAwMDBBMDAxRjNCMjQxM0ZGRkVCNAotOjEwMjM1MDAwOTBBRTAwQzQwMjBFNjgyNDMxQUMwMEZGMTU4MDAwMkE0NAotOjEwMjM2MDAwMDI0MDIwMjE5Mzg0MDA0NTk3ODYwMDQ4MzA4RjAwMDE2OQotOjEwMjM3MDAwMTFFMDAwMEIwMjY0MjgyNDhGODkwMDI4OEQyMzAwNzQ0QgotOjEwMjM4MDAwOEQyODAwNzRBMzg1MDA0NTAwNzAxMDI0MDAwMkM5NDAwOAotOjEwMjM5MDAwMzExRjAwN0YwMzNGQzAyNTAzMTQ4ODI1QUVCMTA4MzBFQwotOjEwMjNBMDAwMTBDMDAwMTA4Rjg1MDAyODkwQTcwMEM0MDIwNzU4MjQ5MQotOjEwMjNCMDAwMzE2QTAwRkYxNTQwRkZFNjAyNDAyMDIxMEUwMDFERUZBQwotOjEwMjNDMDAwOTc5MTAwNDgxMDQwRkZFODkzODQwMDQ1MjQwNUZGRkRFNQotOjEwMjNEMDAwNTQ0NTAwMDU4RTQzMDAyMDAyMjAyODIxMEUwMDE3NzQ2QQotOjEwMjNFMDAwMDI0MDIwMjE4RTQzMDAyMDMwNzAwMDA0MTYwMDAwMEFCNQotOjEwMjNGMDAwMjQxNEZGRkI4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENGNQotOjEwMjQwMDAwMEEwMDFGMUNBRjg2MDA1MDBFMDAxQTE5MDAwMDAwMDBDMQotOjEwMjQxMDAwMEEwMDFGMkI5Mzg0MDA0NTAwNzQ5ODI0MEUwMDE3OEUyOQotOjEwMjQyMDAwQUU1MzAwMjA4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENENQotOjEwMjQzMDAwMjdCREZGRDhBRkIzMDAxQ0FGQjEwMDE0QUZCRjAwMjA2MQotOjEwMjQ0MDAwQUZCMjAwMThBRkIwMDAxMDNDMDI4MDAwOEM1MjAxNDBDNwotOjEwMjQ1MDAwOEM0QjAxNDgzQzA0ODAwMDAwMEI4QzAyMzIyMzAwRkZBRgotOjEwMjQ2MDAwMzE3MzAwRkY4Qzg1MDFCODA0QTBGRkZFMzQ5MDAxODAxOQotOjEwMjQ3MDAwQUUxMjAwMDA4Qzg3MDE0NDI0NjRGRkYwMjQwNjAwMDJBMQotOjEwMjQ4MDAwMkM4MzAwMTNBRTA3MDAwNEE2MTEwMDA4QTIwNjAwMEI1RgotOjEwMjQ5MDAwQUUxMzAwMjQxMDYwMDA0RjhGQkYwMDIwMDAwNDQ4ODA1RQotOjEwMjRBMDAwM0MwQTA4MDEyNTRBODFCQzAxMkE0MDIxOEQwNDAwMDAxNAotOjEwMjRCMDAwMDA4MDAwMDgwMDAwMDAwMDNDMTAwODAwOEUxMDMxQThDOQotOjEwMjRDMDAwMzE3MzNGRkYwMDEzODk4MDAyMTJDODIxMjQwNUZGODA2OQotOjEwMjREMDAwMDMzMTIwMjEyNjRDMDEwMDI2NDcwMDgwM0MxRjgwMDA0QwotOjEwMjRFMDAwMDBFNTE4MjQzMThGMDA3RjMwRTkwMDdGMzA4QTAwN0ZCQgotOjEwMjRGMDAwM0MxODgwMEEzQzBFODAwNDNDMEQ4MDBDMDA4NTEwMjRBMgotOjEwMjUwMDAwMDE4NTMwMjQwMTREODAyMUFGRTYwMDI0MDFGODQwMjFFRgotOjEwMjUxMDAwQUZFMzAwOTAwMTJFOTgyMUFGRTIwMDI4QUY5MDAwMzA4OQotOjEwMjUyMDAwQUY4ODAwMjhBRjkzMDAyMDBFMDAxODYzMDE2MDgwMjE1RgotOjEwMjUzMDAwM0MwMzgwMDA4QzZCMDFCODA1NjBGRkZFOEY4NzAwMzA4NAotOjEwMjU0MDAwMzQ2NTAxODA4Rjg2MDAyODkwRTMwMDBEQUNCMjAwMDA1NgotOjEwMjU1MDAwQTRCMDAwMDYwMDAzMTYwMDAwMDJGRTAzMDAxRjkwMjcyRgotOjEwMjU2MDAwMDAxMjI3QzIxMDgwMDA3QTI0QzIwMDc4MjQxOTYwODJFOQotOjEwMjU3MDAwQTRCOTAwMDhBMEEwMDAwNTI0MUYwMDAyQTBCRjAwMEIwMgotOjEwMjU4MDAwMDAwNDFDMDA4RjhCMDAyMDNDMDIyNzAwMDA2MjkwMjU3NQotOjEwMjU5MDAwQUNCMjAwMTBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjg4OQotOjEwMjVBMDAwQUNBMDAwMkM4RDczMDAzODI0MTBGRjgwQUNCMzAwMTg1MQotOjEwMjVCMDAwOTBFNDAwMEQwMjA0ODgyNDMyMjUwMEZGMTBBMDAwMDVERAotOjEwMjVDMDAwOEZCRjAwMjA5MEVDMDAwRDMxODgwMDdGQTBFODAwMEQ0NwotOjEwMjVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4MgotOjEwMjVFMDAwOEZCMDAwMTAzQzBEMTAwMDNDMEE4MDAwMjdCRDAwMjg3MQotOjEwMjVGMDAwMDNFMDAwMDhBRDREMDFCODI2NUYwMTAwMjQwNUZGODAwRgotOjEwMjYwMDAwMzNGODAwN0YzQzA2ODAwMDAzRTU3ODI0M0MxOTgwMEFGQgotOjEwMjYxMDAwMDMxOTIwMjFBQ0NGMDAyNDkwOEUwMEM0MDBBRTY4MjRBMgotOjEwMjYyMDAwMzFBQzAwRkYxMTgwRkZFQUFGODQwMDI4MjQ4RTAwNzhDRgotOjEwMjYzMDAwOTVDRDAwMTIzQzBDMDgwMDhEOEMzMUE4MzFBQjNGRkZDQQotOjEwMjY0MDAwMDE5MjQ4MjEwMDBCNTE4MDAxMkE0MDIxMDEwNTIwMjREQwotOjEwMjY1MDAwQUNDNDAwMjgzMTA3MDA3RjNDMDY4MDBDMDBFNjIwMjEzNgotOjEwMjY2MDAwOTA4MzAwMEQwMEEzMTAyNDMwNDUwMEZGMTBBMEZGRDg3OAotOjEwMjY3MDAwQUY4NDAwMzA5MDk4MDAwRDMzMEYwMDEwMTVFMEZGRDVBNwotOjEwMjY4MDAwOEZCRjAwMjAwRTAwMTg2MzAwMDAwMDAwM0MwMzgwMDA5NAotOjEwMjY5MDAwOEM3OTAxQjgwNzIwRkZGRTAwMDAwMDAwQUUxMjAwMDA5OAotOjEwMjZBMDAwOEM3MjAxNDRBRTEyMDAwNEE2MTEwMDA4MjQxMTAwMDIyRAotOjEwMjZCMDAwQTIxMTAwMEJBRTEzMDAyNDBBMDAxRkM2OEZCRjAwMjAxQQotOjEwMjZDMDAwM0MxMjYwMDA4RTQ1MkMwODNDMDNGMDAzMzQ2MkZGRkY4RgotOjEwMjZEMDAwMDBBMkY4MjRBRTVGMkMwODhFNTgyQzA4M0MxOTAxQjBEQgotOjEwMjZFMDAwMDMxOTk4MjVBRTUzMkMwODBBMDAxRkM2OEZCRjAwMjA3RgotOjEwMjZGMDAwMjY0RDAxMDAzMUFGMDA3RjNDMTA4MDBBMjQwRUZGODA4MAotOjEwMjcwMDAwMDFGMDI4MjEwMUFFNjAyNDNDMEI4MDAwQUQ2QzAwMjQ1OAotOjEwMjcxMDAwMTY2MEZGQUZBRjg1MDAyODI0MTEwMDAzQTBCMTAwRUNDNAotOjEwMjcyMDAwMEEwMDFGQzY4RkJGMDAyMDI2NDgwMTAwMzEwQTAwN0YyMwotOjEwMjczMDAwM0MwQjgwMEEyNDA5RkY4MDAxNEIzMDIxMDEwOTIwMjQzMQotOjEwMjc0MDAwM0MwNzgwMDBBQ0U0MDAyNDBBMDAxRkM1QUY4NjAwMjhDNwotOjEwMjc1MDAwOTQ0QTAwMTIzMjA4M0ZGRjMxNEMzRkZGMTU4OEZGODQzNgotOjEwMjc2MDAwMjQxOTYwODI5MENGMDBDNDI0MEVGRjgwMDFDRjQ4MjQzQQotOjEwMjc3MDAwMzEyRDAwRkYxMUEwRkY3RTAwMDAwMDAwMjQwNzAwMDQ5RgotOjEwMjc4MDAwQTBDNzAwRUM4Rjg3MDAzMDI0MTg2MDg0MjQwNjAwMEQ1OQotOjEwMjc5MDAwQTRCODAwMDhBMEE2MDAwNTBBMDAxRkIwMjQxRjAwMDI2QwotOjEwMjdBMDAwMDgwMDMzMEMwODAwMzMwQzA4MDAzM0U4MDgwMDMzQkM4MQotOjEwMjdCMDAwMDgwMDMzQTAwODAwMzJGMDA4MDAzMkYwMDgwMDMyRjBDMAotOjEwMjdDMDAwMDgwMDMzMTQ4MDA4MDEwMDgwMDgwMDgwODAwODAwMDBBMQotOjEwMjdEMDAwNUY4NjU0MzdFNEFDNjJDQzUwMTAzQTQ1MzY2MjE5ODVCNgotOjEwMjdFMDAwQkYxNEMwRTgxQkMyN0ExRTg0RjRCNTU2MDk0RUE2RkU3QgotOjEwMjdGMDAwN0REQTAxRTdDMDRENzQ4MTA4MDA3QTc0MDgwMDdBQzA2MAotOjEwMjgwMDAwMDgwMDdBODAwODAwNzlBODA4MDA3QTgwMDgwMDdBQjA2OQotOjEwMjgxMDAwMDgwMDdBODAwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgzQgotOjEwMjgyMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgwNAotOjEwMjgzMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDdBQTBGQgotOjEwMjg0MDAwMDgwMDdBOTAwODAwNzlBODA4MDA3OUE4MDgwMDc5QThGQgotOjEwMjg1MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThENAotOjEwMjg2MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThDNAotOjEwMjg3MDAwMDgwMDc5QTgwODAwN0E5MDA4MDA4MDZDMDgwMDdGMTQ4RQotOjEwMjg4MDAwMDgwMDgwMzQwODAwN0YxNDA4MDA4MDA0MDgwMDdERkNFNAotOjEwMjg5MDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRDQwotOjEwMjhBMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRCQwotOjEwMjhCMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRBQwotOjA0MjhDMDAwMDgwMDdGM0M1MQotOjBDMjhDNDAwMEEwMDAxMjIwMDAwMDAwMDAwMDAwMDAwREIKLToxMDI4RDAwMDAwMDAwMDBENzQ3MDYxMzUyRTMwMkUzMDZBMzMwMDAwMTgKLToxMDI4RTAwMDA1MDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMDI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMDI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMDI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMDI5NTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENEEKLToxMDI5NjAwMDNDMDIwODAwMjQ0MjFDMjAzQzAzMDgwMDI0NjMxRkEwRjIKLToxMDI5NzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0RTMKLToxMDI5ODAwMDNDMUQwODAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwQkYKLToxMDI5OTAwMDI2MTAwNDg4M0MxQzA4MDAyNzlDMUMyMDBFMDAwMkUyMjQKLToxMDI5QTAwMDAwMDAwMDAwMDAwMDAwMEQyNDAyRkY4MDI3QkRGRkUwQjIKLToxMDI5QjAwMDAwODIxMDI0QUZCMDAwMTBBRjQyMDAyMEFGQkYwMDE4NUIKLToxMDI5QzAwMEFGQjEwMDE0OTM2NTAwMDQzMDg0MDA3RjAzNDQxODIxRTQKLToxMDI5RDAwMDNDMDIwMDA4MDA2MjE4MjEzMEE1MDAyMDAzNjA4MDIxMUQKLToxMDI5RTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI0NjYwMDVDNEIKLToxMDI5RjAwMDI0NjYwMDU4OTIwMjAwMDQ5NzQzMDEwNDkyMDQwMDA0RTQKLToxMDJBMDAwMDMwNDcwMDBGMzA2M0ZGRkYzMDg0MDA0MDAwNjcyODIzMDkKLToxMDJBMTAwMDEwODAwMDA5MDAwMDQ4MjE5MjAyMDAwNTMwNDIwMDA0QTUKLToxMDJBMjAwMDEwNDAwMDA1MDAwMDAwMDAxMEEwMDAwMzAwMDAwMDAwOUUKLToxMDJBMzAwMDI0QTVGRkZDMjQwOTAwMDQ5MjAyMDAwNTMwNDIwMDA0OTIKLToxMDJBNDAwMDEwNDAwMDEyMDAwMDAwMDAxMEEwMDAxMDAwMDAwMDAwNjQKLToxMDJBNTAwMDk2MDIwMDAyMDBBNzIwMjEwMTA0NDAyNTI0NDJGRkZFMjcKLToxMDJBNjAwMEE3NDIxMDE2OTIwMzAwMDQyNDAyRkY4MDAwNDMxMDI0QTIKLToxMDJBNzAwMDMwNDIwMEZGMTA0MDAwMDMzQzAyMDQwMDBBMDAwMTcyRDMKLToxMDJBODAwMDAxMDI0MDI1OENDMjAwMDBBRjQyMTAxODhGNDIwMTc4MkQKLToxMDJBOTAwMDA0NDBGRkZFMjQwMjAwMEFBNzQyMDE0MDk2MDIwMDAyMDEKLToxMDJBQTAwMDI0MDQwMDA5MzA0MjAwMDcwMDAyMTAyMzMwNDIwMDA3Q0UKLToxMDJBQjAwMEE3NDIwMTQyOTYwMjAwMDIyNDQyRkZGRUE3NDIwMTQ0QkYKLToxMDJBQzAwMEE3NDAwMTQ2OTc0MjAxMDRBNzQyMDE0ODhGNDIwMTA4RUUKLToxMDJBRDAwMDMwNDIwMDIwNTA0MDAwMDEyNDA0MDAwMTkyMDIwMDA0MTIKLToxMDJBRTAwMDMwNDIwMDEwMTQ0MDAwMDIzNDgzMDAxMDAwODAxODIxOEUKLToxMDJBRjAwMEE3NDMwMTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMDJCMDAwMDAwMDAwMDAwQUY0ODEwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDA0NDFGRkZFOTIKLToxMDJCMjAwMDMxMDJGRkZGMTA0MDAwMDcwMDAwMDAwMDkyMDIwMDA0ODUKLToxMDJCMzAwMDMwNDIwMDQwMTQ0MDAwMDMwMDAwMDAwMDhGNDIxMDE4OTMKLToxMDJCNDAwMEFDQzIwMDAwOTYwMjAwMDYzMDQyRkZGRjI0NDIwMDAyQTEKLToxMDJCNTAwMDAwMDIxMDQzMDAwMjEwNDAwMzYyODgyMTk2MjIwMDAwMDgKLToxMDJCNjAwMDExMjAwMDBEMzA0NEZGRkYwMEE3MTAyMThGODMwMDM4OTMKLToxMDJCNzAwMDhGNDUxMDFDMDAwMjEwODIwMDAyMTA4MDAwNDMxMDIxQkIKLToxMDJCODAwMEFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTAwMDUyQzAyNkMKLToxMDJCOTAwMDAwNDAyMDIxQTYyMjAwMDA5MjAzMDAwNDI0MDJGRjgwQUUKLToxMDJCQTAwMDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAxRjAwMDAwMDAwQ0UKLToxMDJCQjAwMDkyMDIwMDA1MzA0MjAwMDIxMDQwMDAxQjAwMDAwMDAwOUQKLToxMDJCQzAwMDk3NDIxMDBDMjQ0MkZGRkVBNzQyMTAxNjAwMDAwMDAwOUUKLToxMDJCRDAwMDNDMDIwNDAwMzQ0MjAwMzBBRjQyMTAwMDAwMDAwMDAwMEMKLToxMDJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIxMDAwMDQKLToxMDJCRjAwMDA0NDFGRkZFMDAwMDAwMDA5NzQyMTAwQzhGNDUxMDFDOUUKLToxMDJDMDAwMDMwNDJGRkZGMjQ0MjAwMzAwMDAyMTA4MjAwMDIxMDgwOTgKLToxMDJDMTAwMDAwNUIxMDIxQUM0NTAwMDAzMEE2RkZGRjBFMDAwMkQxODIKLToxMDJDMjAwMDAwMDUyQzAyQTYyMjAwMDA5NjA0MDAwMjI0ODQwMDA4NUQKLToxMDJDMzAwMDBFMDAwMUU3MzA4NEZGRkY5NzQ0MDEwNDBFMDAwMUY1MDgKLToxMDJDNDAwMDMwODRGRkZGOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzkKLToxMDJDNTAwMDNDMDIxMDAwMjdCRDAwMjAwM0UwMDAwOEFGNDIwMTc4Q0QKLToxMDJDNjAwMDMwODRGRkZGMzA4MjAwMDc4Rjg1MDAyNDEwNDAwMDAyNkYKLToxMDJDNzAwMDI0ODMwMDA3MzA2NEZGRjgwMEE0MTAyMTMwNDIxRkZGQjYKLToxMDJDODAwMDAzNDIxODIxMjQ3QjQwMDBBRjg1MDAyOEFGODIwMDI0MzYKLToxMDJDOTAwMDAzRTAwMDA4QUY0MjAwODQzMDg0RkZGRjMwODIwMDBGNjEKLToxMDJDQTAwMDhGODUwMDJDOEY4NjAwMzQxMDQwMDAwMjI0ODMwMDBGOTMKLToxMDJDQjAwMDMwNjRGRkYwMDBBNDEwMjEwMDQ2MTgyQkFGODUwMDMwQ0YKLToxMDJDQzAwMDAwNDYyMDIzMTQ2MDAwMDJBRjgyMDAyQ0FGODQwMDJDNDkKLToxMDJDRDAwMDhGODIwMDJDMzQwNDgwMDAwMzQyMTgyMTAwNjQxODIxRTQKLToxMDJDRTAwMEFGODMwMDM4MDNFMDAwMDhBRjQyMDA4MDhGODIwMDE0RjkKLToxMDJDRjAwMDEwNDAwMDA4OEY4MjAwMDQ4RjgyRkZDQzE0NDAwMDA1MzIKLToxMDJEMDAwMDhGODIwMDA0M0MwMkZGQkYzNDQyRkZGRjAwODIyMDI0NzgKLToxMDJEMTAwMDhGODIwMDA0MzA0MzAwMDYyNDAyMDAwMjEwNjIwMDBGN0MKLToxMDJEMjAwMDNDMDIwMTAxMkM2MjAwMDM1MDQwMDAwNTI0MDIwMDA0MTMKLToxMDJEMzAwMDEwNjAwMDBGM0MwMjAwMDEwQTAwMDIyRTAwMDAwMDAwOUIKLToxMDJENDAwMDEwNjIwMDA1MjQwMjAwMDYxNDYyMDAwQzNDMDIwMTExMEUKLToxMDJENTAwMDBBMDAwMjI3MDA4MjEwMjUzQzAyMDAxMTAwODIxMDI1ODMKLToxMDJENjAwMEFGNDIxMDAwMjQwMjAwMDEwQTAwMDIyRUFGODIwMDBDQzQKLToxMDJENzAwMDAwODIxMDI1QUY0MjEwMDBBRjgwMDAwQzAwMDAwMDAwNjAKLToxMDJEODAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwNTgKLToxMDJEOTAwMDhGODIwMDBDMTA0MDAwMDQwMDAwMDAwMDhGNDIxMDAwRTEKLToxMDJEQTAwMDA0NDFGRkZFMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwRjYKLToxMDJEQjAwMDhGODIwMDEwMjQ0M0Y4MDAwMDAyMjlDMjI0QTJGRkYwRjEKLToxMDJEQzAwMDJDNjMwMzAxMTA2MDAwMDMwMDAyMTA0MjBBMDAwMjU1NDgKLToxMDJERDAwMEFDODIwMDAwOEY4MzAwMTgwMEEzMTAyQjE0NDAwMDBCNUUKLToxMDJERTAwMDAwMDAzODIxMDBBMzEwMjMyNDQ2MDAwMThGODIwMDFDMUMKLToxMDJERjAwMDAwNjIxMDIxMjQ0MkZGRkYwMDQ1MTAyQjU0NDAwMDA0QzQKLToxMDJFMDAwMDI0MDJGRkZGMEEwMDAyNTVBQzg2MDAwMDI0MDJGRkZGRTcKLToxMDJFMTAwMDBBMDAwMjVBQUM4MjAwMDA4QzgyMDAwMDNDMDMwODAwQzkKLToxMDJFMjAwMDI0NjMxQzVDMDAwMjExNDAwMDQzMzgyMTAzRTAwMDA4QzkKLToxMDJFMzAwMDAwRTAxMDIxM0MwOTA4MDA4RDI5MUQ4MDAwMDQ1MTQwNEMKLToxMDJFNDAwMDNDMTkwODAwMjczOTFDNUMwMEMwNzgyMTAwODA2MDIxRjMKLToxMDJFNTAwMDI0MEVGRkZGMDAwMDM4MjEwMTU5NDAyMTExMjAwMDM2QzcKLToxMDJFNjAwMDAwMDAzMDIxM0MxODA4MDAyNzE4MUQ5ODNDMEQwODAwNzAKLToxMDJFNzAwMDI1QUQxRDlDMDAwRjU4MkIwMDA2MTE4MDAwNDYxMDIxMjcKLToxMDJFODAwMDAwMDIxOEMwMDA3ODEwMjE4QzQyMDAwMDE1ODIwMDIwM0EKLToxMDJFOTAwMDAwNkQyMDIxOENBMjAwMDA1NDQwMDAwOThEMDIwMDE4MTIKLToxMDJFQTAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMUFDODIwMDAwRDgKLToxMDJFQjAwMDNDMDEwODAwQUMyMjFEODQwQTAwMDJDRjAwMDAyMDIxNDIKLToxMDJFQzAwMDhGNDcwMDIwMDAwMDMwMjEwMDAyMTFDMDExNjAwMDRBMkQKLToxMDJFRDAwMEFGNDIwMDIwOEQwODAwMUMzQzA5MDAwODhDQTMwMDAwQjQKLToxMDJFRTAwMDAwNjYxODIxMDAwMzE4ODAwMDdBMTAyMTAwNDkxMDIxODMKLToxMDJFRjAwMDhDNDQwMDAwMjRDNjAwMDEwMDY4MTgyMTAwQ0YxMDJCNkMKLToxMDJGMDAwMDE0NDBGRkY2QUM2NDAwMDAwQTAwMDJDRDAwMDAwMDAwOEYKLToxMDJGMTAwMDhDODQwMDAwMDA4RTEwMkI1MDQwMDAwNDI0QzYwMDAxNTkKLToxMDJGMjAwMDAwODA3MDIxMDBDMDM4MjEyNEM2MDAwMTAwQzkxMDJCODgKLToxMDJGMzAwMDE0NDBGRkQyMDAwNjExODAyNDAyMDAwMUFDQTIwMDAwNjAKLToxMDJGNDAwMDNDMDIwODAwOEM0MjFEN0MzQzAzMDgwMDhDNjMxRDgwMDEKLToxMDJGNTAwMDAwNDMxMDJCMTQ0MDAwMkEyNDA0RkZGRTAxNTkxMDIxQzUKLToxMDJGNjAwMDhDNDIwMDE4MTA0MDAwMjYyNDA0RkZGRjAwMDcyMTgwMzcKLToxMDJGNzAwMDNDMDUwODAwOENBNTFEODQwMDg3MjAyMThEMDYwMDE4QzMKLToxMDJGODAwMDAwMDQyMEMwM0MwMjA4MDAyNDQyMUQ5ODAwODIxMDIxNDkKLToxMDJGOTAwMDNDMDMwODAwMjQ2MzFEOUNBQzRDMDAwMDI0QTUwMDAxRTgKLToxMDJGQTAwMDAwODMxODIxM0MwMjA4MDAyNDQyMURBMEFDNjUwMDAwRUIKLToxMDJGQjAwMDAwMDYzMUMwM0MwMTA4MDBBQzI1MUQ4NDAwODIyMDIxQTAKLToxMDJGQzAwMDhGNDcwMDIwQUQwNDAwMUNBRjQ2MDAyMDExRTAwMDBBMkUKLToxMDJGRDAwMDAwMDAzMDIxM0MwMjAwMDgwMzQyMjgyMThDQTIwMDAwOUUKLToxMDJGRTAwMDI0QzYwMDAxMDBDRjE4MkJBQzgyMDAwMDI0QTUwMDA0RTkKLToxMDJGRjAwMDE0NjBGRkZBMjQ4NDAwMDRBRjQ3MDAyMDAwMDAyMDIxNjEKLToxMDMwMDAwMDAzRTAwMDA4MDA4MDEwMjEzMDg0RkZGRjMwQzZGRkZGN0UKLToxMDMwMTAwMDAwMDUyQzAwMDBBNjI4MjUzODgyRkZGRjAwNDUxMDIxNUUKLToxMDMwMjAwMDAwNDUyODJCMDA0NTEwMjEwMDAyMUMwMjMwNDJGRkZGMDIKLToxMDMwMzAwMDAwNDMxMDIxMDAwMjFDMDIzMDQyRkZGRjAwNDMxMDIxMTgKLToxMDMwNDAwMDM4NDJGRkZGMDNFMDAwMDgzMDQyRkZGRjI3QkRGRkM4MDIKLToxMDMwNTAwMEFGQkYwMDMwQUZCMzAwMkNBRkIyMDAyOEFGQjEwMDI0MzcKLToxMDMwNjAwMEFGQjAwMDIwM0MwNDYwMDg4QzgyNTAwMDI0MDNGRjdGMzYKLToxMDMwNzAwMDNDMDY2MDAwMDA0MzEwMjQzNDQyMzgwQ0FDODI1MDAwRkYKLToxMDMwODAwMDhDQzI0QzFDM0MxQTgwMDAwMDAyMTYwMjMwNDIwMDBGMTkKLToxMDMwOTAwMDEwNDAwMDA3QUY4MjAwMUM4Q0MzNEMxQzNDMDIwMDFGNzgKLToxMDMwQTAwMDM0NDJGQzAwMDA2MjE4MjQwMDAzMTlDMkFGODMwMDE4RTgKLToxMDMwQjAwMDhGNDIwMDA4Mjc1QjQwMDAzNDQyMDAwMUFGNDIwMDA4MDUKLToxMDMwQzAwMEFGODAwMDI0M0MwMjYwMUNBRjQwMDA4MEFGNDAwMDg0MTEKLToxMDMwRDAwMDhDNDUwMDA4OENDMzA4MDgzNDAyODAwMDAzNDIyMDIxN0MKLToxMDMwRTAwMDI0MDJGRkYwMDA2MjE4MjQzQzAyMDA4MDNDMDEwODAwMkEKLToxMDMwRjAwMEFDMjIwNDIwM0MwMjU3MDlBRjg0MDAzODE0NjIwMDA0NUIKLToxMDMxMDAwMEFGODUwMDM0MjQwMjAwMDEwQTAwMDMxNEFGODIwMDE0Q0EKLToxMDMxMTAwMEFGODAwMDE0MjQwMzAwM0QyNDAyMDAwNDNDMDEwODAwOTkKLToxMDMxMjAwMEFDMjIxRDk0M0MwMTA4MDBBQzIzMUQ5MDNDMDEwODAwMUEKLToxMDMxMzAwMEFDMjMxRDhDM0MwMTA4MDBBQzIzMUQ4ODNDMTMwODAwMDcKLToxMDMxNDAwMDI2NzMxQzVDMjQwNDAwMDQzQzAyMDgwMDI0NDIxQzc0MDYKLToxMDMxNTAwMDI0MDMwMDA4MjQ2M0ZGRkZBQzQwMDAwNEFDNDAwMDAwREYKLToxMDMxNjAwMDA0NjFGRkZDMjQ0MjAwMjAwMDA0MTBDMDAwNDQxMDIxMzAKLToxMDMxNzAwMDI0NDIwMDNEM0MwMTA4MDBBQzIyMUQ5MDI0MDIwMDAxQzUKLToxMDMxODAwMDNDMDEwODAwQUMyMjFEN0MyNDAyRkZGRjNDMDEwODAwMkEKLToxMDMxOTAwMEFDMjIxRDk4M0MwMTA4MDBBQzIwMUQ4NDhGNDIwMDAwMjkKLToxMDMxQTAwMDM4NDIwMDAxMzA0MjAwMDExNDQwRkZGQzhGODIwMDE0QkQKLToxMDMxQjAwMDEwNDAwMDE2MDAwMDAwMDA5NzQyMDEwNDEwNDAwMDA1NzYKLToxMDMxQzAwMDhGODMwMDAwMTQ2MDAwMDcyNDYyRkZGRjBBMDAwMzRCOTYKLToxMDMxRDAwMDJDNjIwMDBBMkM2MjAwMTA1MDQwMDAwNDhGODMwMDAwMTMKLToxMDMxRTAwMDI0NjIwMDAxQUY4MjAwMDA4RjgzMDAwMDJDNjIwMDBBN0QKLToxMDMxRjAwMDE0NDAwMDAzMkM2MjAwMDcwQTAwMDM1MkFGODBGRkNDOEEKLToxMDMyMDAwMDEwNDAwMDAyMjQwMjAwMDFBRjgyRkZDQzhGNDMwMTA4NkUKLToxMDMyMTAwMDhGNDQwMTAwMzA2MjIwMDBBRjgzMDAwNDEwNDAwMDA4OUEKLToxMDMyMjAwMEFGODQwMDEwM0MwMjA4MDA4QzQyMDQyQzI0NDIwMDAxQjAKLToxMDMyMzAwMDNDMDEwODAwQUMyMjA0MkMwQTAwMDZENzNDMDI0MDAwRTYKLToxMDMyNDAwMDMwNjUwMjAwMTRBMDAwMDMyNDAyMEYwMDE0ODIwMzA5NTkKLToxMDMyNTAwMDI0MDIwRDAwOTc0MjAxMDQxMDQwMDM3MTNDMDI0MDAwMUIKLToxMDMyNjAwMDMwNjI0MDAwMTQ0MDAwQUQ4RjgyMDAzODhDNDQwMDA4NkEKLToxMDMyNzAwMDhGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEFGNDIwMTc4MkIKLToxMDMyODAwMDI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0Mjk3NDIwMTA0REUKLToxMDMyOTAwMDhGODQwMDA0MzA1MUZGRkYzMDgyMDAwMTEwNDAwMDA3OEUKLToxMDMyQTAwMDAyMjA4MDIxMjYyM0ZGRkUyNDAyMDAwMjMwNzBGRkZGNEYKLToxMDMyQjAwMEE3NDIwMTQ2MEEwMDAzN0ZBNzQzMDE0OEE3NDAwMTQ2RjEKLToxMDMyQzAwMDNDMDIwODAwOEM0MjA0M0MxNDQwMDAwRDhGODMwMDEwMjcKLToxMDMyRDAwMDMwODIwMDIwMTQ0MDAwMDIyNDAzMDAwOTI0MDMwMDAxNkUKLToxMDMyRTAwMDAwNjAyMDIxOEY4MzAwMTAyNDAyMDkwMDUwNjIwMDAxMzkKLToxMDMyRjAwMDM0ODQwMDA0QTc0NDAxNEEwQTAwMDM5QTAwMDAwMDAwMzUKLToxMDMzMDAwMDI0MDIwRjAwMTQ2MjAwMDUzMDgyMDAyMDE0NDAwMDA2RTEKLToxMDMzMTAwMDI0MDMwMDBEMEEwMDAzOTkyNDAzMDAwNTE0NDAwMDAyNTEKLToxMDMzMjAwMDI0MDMwMDA5MjQwMzAwMDFBNzQzMDE0QTNDMDIwODAwQ0EKLToxMDMzMzAwMDhDNDIwNDIwM0MwNDAwNDgwRTAwMDIwQTAwNDQyMDI1NzAKLToxMDMzNDAwMDBFMDAwMjMzMDAwMDAwMDA4RjgyMDAwQzEwNDAwMDNFOEYKLToxMDMzNTAwMDAwMDAwMDAwOEY0MjEwMDAzQzAzMDAyMDAwNDMxMDI0QjYKLToxMDMzNjAwMDEwNDAwMDM5OEY4MjAwMDQzMDQyMDAwMjEwNDAwMDM2QzUKLToxMDMzNzAwMDAwMDAwMDAwOTc0MjEwMTQxNDQwMDAzMzAwMDAwMDAwQzkKLToxMDMzODAwMDk3NDIxMDA4OEY4ODAwMzgzMDQyRkZGRjI0NDIwMDA2MjEKLToxMDMzOTAwMDAwMDIxODgyMDAwMzM4ODAwMEU4MzAyMTMwNDMwMDAxMjkKLToxMDMzQTAwMDhDQzQwMDAwMTA2MDAwMDQzMDQyMDAwMzAwMDAwMDBERDcKLToxMDMzQjAwMDBBMDAwM0RCMDBFODEwMjE1NDQwMDAxMDMwODRGRkZGQjYKLToxMDMzQzAwMDNDMDVGRkZGMDA4NTIwMjQwMDg1MTgyNjAwMDMxODJCRUMKLToxMDMzRDAwMDAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNTAwMDAwMDAwRTIKLToxMDMzRTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjFDOEUKLToxMDMzRjAwMDhDQzIwMDAwMEEwMDAzREEwMDQ1MjAyNTM4ODNGRkZGNTUKLToxMDM0MDAwMDAwMDMxODJCMDAwNDEwMkIwMDQzMTAyNDEwNDAwMDA1NkIKLToxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwOUYKLToxMDM0MjAwMDI0MDAwMjI1OENDMjAwMDAzNDQ0RkZGRjAwRTgxMDIxNzQKLToxMDM0MzAwMEFDNDQwMDAwM0MwMjA4MDA4QzQyMDQzMDI0NDIwMDAxRUQKLToxMDM0NDAwMDNDMDEwODAwQUMyMjA0MzA4RjYyMDAwMDhGODQwMDM4RjkKLToxMDM0NTAwMEFGODIwMDA4OEM4MzAwMDAzNDAyRkZGRjE0NjIwMDBGNkIKLToxMDM0NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDQ1NDNDMDQwODAwMTEKLToxMDM0NzAwMDhDODQwNDUwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxMjEKLToxMDM0ODAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ1NDNDMDEwODAwQzIKLToxMDM0OTAwMEFDMjQwNDUwMEEwMDA2Q0QyNDA0MDAwODhDODIwMDAwRUQKLToxMDM0QTAwMDMwNDIwMTAwMTA0MDAwMEYwMDAwMTAyMTNDMDUwODAwRDAKLToxMDM0QjAwMDhDQTUwNDRDM0MwNDA4MDA4Qzg0MDQ0ODAwQjAyODIxRUUKLToxMDM0QzAwMDAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwMjIKLToxMDM0RDAwMEFDMjUwNDRDM0MwMTA4MDBBQzI0MDQ0ODBBMDAwNkNEOEQKLToxMDM0RTAwMDI0MDQwMDA4M0MwNTA4MDA4Q0E1MDQ0NDNDMDQwODAwQTIKLToxMDM0RjAwMDhDODQwNDQwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxQjEKLToxMDM1MDAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwNTEKLToxMDM1MTAwMEFDMjQwNDQwMEEwMDA2Q0QyNDA0MDAwODhGNjIwMDA4OTEKLToxMDM1MjAwMDhGNjIwMDAwMDAwMjE2MDIzMDQzMDBGMDI0MDIwMDMwRDcKLToxMDM1MzAwMDEwNjIwMDA1MjQwMjAwNDAxMDYyMDE2QjhGODIwMDIwOUYKLToxMDM1NDAwMDBBMDAwNkQ1MjQ0MjAwMDExNEEwMDAwNTAwMDAwMDAwNzYKLToxMDM1NTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjUwRTgKLToxMDM1NjAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCODUKLToxMDM1NzAwMDI3QTQwMDEwMTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwMzYKLToxMDM1ODAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1NzhFMDIwMDAwMjEKLToxMDM1OTAwMDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzkKLToxMDM1QTAwMDAwMDAwMDAwMjQwMDAyNUE4RjYyMDAwQzA0NDMwMDAzNTQKLToxMDM1QjAwMDI0MDIwMDAxMEEwMDA1NURBRTAwMDAwMEFFMDIwMDAwMUEKLToxMDM1QzAwMDhGODIwMDM4OEM0NTAwMDhBMjAwMDAwNzhGNjUwMDBDMzAKLToxMDM1RDAwMDhGNjQwMDA0MzBBM0ZGRkYwMDA0MjQwMjAwODUyMDIzMzEKLToxMDM1RTAwMDMwODIwMEZGMDA0MzEwMjEyNDQyMDAwNTAwMDI4ODgzM0UKLToxMDM1RjAwMDJFMjIwMDgxQTYwNTAwMEExNDQwMDAwNUEyMDQwMDA0NDIKLToxMDM2MDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjcyMTUKLToxMDM2MTAwMDNDMDcwODAwOENFNzFEODA4RkE4MDAxMDI0MDlGRkZGREQKLToxMDM2MjAwMDAwMDA1MDIxMTBFMDAwMTMwMDAwMzAyMTNDMEMwODAwODUKLToxMDM2MzAwMDI1OEMxRDlDMDE4MDI4MjEwMDAwMTgyMThDQTJGRkZDRjQKLToxMDM2NDAwMDUxMDIwMDJGMDA2QzE4MjE4Q0E0MDAwMDI0NjMwMjA4OTIKLToxMDM2NTAwMDAwODkxMDJCMTA0MDAwMDMyNEE1MDIwODAwODA0ODIxOTcKLToxMDM2NjAwMDAwQzA1MDIxMjRDNjAwMDEwMEM3MTAyQjU0NDBGRkY0QjUKLToxMDM2NzAwMDhDQTJGRkZDM0MwNTA4MDA4Q0E1MUQ4MDNDMDIwODAwQzQKLToxMDM2ODAwMDhDNDIxRDdDM0MwOTA4MDAyNTI5MUM2MDNDMDMwODAwNzUKLToxMDM2OTAwMDI0NjMxRDk4MDBBMjEwMkIzQzBDMDgwMDI1OEMxRDlDNTcKLToxMDM2QTAwMDNDMDQwODAwOEM4NDFEODQzQzBCMDgwMDI1NkIxREEwODUKLToxMDM2QjAwMDEwNDAwMDFBMDAwODMxNDAwMDA1MTE4MDAwNDUxMDIxMUIKLToxMDM2QzAwMDAwMDIxMEMwMDBDOTM4MjEyNDg0MDAwMTAwNEIzMDIxQzEKLToxMDM2RDAwMDAwNDMxODIxMjRBNTAwMDEwMDRDMTAyMUFDNjgwMDAwMTMKLToxMDM2RTAwMEFDRTYwMDE4M0MwMTA4MDBBQzI0MUQ4NEFDNDQwMDAwOEEKLToxMDM2RjAwMDNDMDEwODAwQUMyNTFEODAwQTAwMDRBODhFMDQwMDFDQjMKLToxMDM3MDAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMTNDMDEwODAwNTgKLToxMDM3MTAwMEFDMjIxRDg0MEEwMDA0QTdBQzYyMDAwMDAwMEExMTgwREMKLToxMDM3MjAwMDAwNEExMDIxMDAwMjEwQzAwMDQzMjgyMThDQTMwMDAwOTEKLToxMDM3MzAwMDAwNEMzODIxMjQ4NDAwMDEwMDAzMTk0MDAwQzkzMDIxQzUKLToxMDM3NDAwMDAwNjkxODIxMDA0QjEwMjFBQ0E4MDAwMEFDNjAwMDE4RTMKLToxMDM3NTAwMDNDMDEwODAwQUMyNDFEODRBQ0MyMDAxOEFDRTQwMDAwOUQKLToxMDM3NjAwMDhFMDQwMDFDOEY4NTAwMzgwRTAwMDZFNzAyMjAzMDIxRjEKLToxMDM3NzAwMDhGNjIwMDA0OEY0MzAxMDhBNjAyMDAwODNDMDIxMDAwN0IKLToxMDM3ODAwMDAwNjIxODI0MTA2MDAwMDgwMDAwMDAwMDk3NDIwMTA0NDUKLToxMDM3OTAwMDkyMDMwMDA3MjQ0MkZGRUMzNDYzMDAwMjMwNDVGRkZGMzAKLToxMDM3QTAwMDBBMDAwNEJDQTIwMzAwMDc5NzQyMDEwNDI0NDJGRkYwNzAKLToxMDM3QjAwMDMwNDVGRkZGOTYwNjAwMDgyQ0MyMDAxMzU0NDAwMDA1NTgKLToxMDM3QzAwMDkyMDMwMDA3OTIwMjAwMDczNDQyMDAwMUEyMDIwMDA3QTAKLToxMDM3RDAwMDkyMDMwMDA3MjQwMjAwMDExMDYyMDAwNTI0MDIwMDAzODYKLToxMDM3RTAwMDEwNjIwMDBCMzBDN0ZGRkYwQTAwMDREQjI0RTIwMDAyNzYKLToxMDM3RjAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAwQzAwNjQxODI0QzcKLToxMDM4MDAwMDAwNjUxODI1QUM0MzAwMEMwQTAwMDREQTMwQzdGRkZGM0UKLToxMDM4MTAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAxMDAwNjQxODI0QTIKLToxMDM4MjAwMDAwNjUxODI1QUM0MzAwMTAzMEM3RkZGRjI0RTIwMDAyRkEKLToxMDM4MzAwMDAwMDIxMDgzQTIwMjAwMDU4RjgzMDAzODMwNDIwMEZGOEYKLToxMDM4NDAwMDAwMDIxMDgwMDA0MzMwMjE4Q0M1MDAwMDhDQzIwMDAwQjMKLToxMDM4NTAwMDI0MDMwMDA0MDAwMjE3MDIxNDQzMDAxMzAwMDAwMDAwQjgKLToxMDM4NjAwMDk3NDIwMTA0M0MwM0ZGRkYwMEEzMTgyNDMwNDJGRkZGRUUKLToxMDM4NzAwMDAwNDcxMDIzMjQ0MkZGRkUwMDYyMjgyNUFDQzUwMDAwNEIKLToxMDM4ODAwMDkyMDQwMDA1OEUwMzAwMUMzMDgyMDBGRjAwMDIxMDgwQUQKLToxMDM4OTAwMDAwNDMxMDIxOTA0MjAwMDAzMDQyMDAwRjAwNDQxMDIxRUMKLToxMDM4QTAwMDBBMDAwNTEwQTIwMjAwMDY4Q0M0MDAwNDk3NDIwMTA0MUQKLToxMDM4QjAwMDk2MDMwMDBBMzA4NUZGRkYzMDQyRkZGRjAwNDcxMDIzQzgKLToxMDM4QzAwMDI0NDJGRkQ2MDAwMjE0MDAwMEEyMjgyNUFDQzUwMDA0NDMKLToxMDM4RDAwMDkyMDIwMDA3OTIwNDAwMDUyNDYzMDAyODAwMDMxODgzNjUKLToxMDM4RTAwMDAwNjQxODIxMzQ0MjAwMDRBMjAzMDAwNkEyMDIwMDA3NkIKLToxMDM4RjAwMDhGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMjAwNDMxMDI0QTMKLToxMDM5MDAwMEFGODIwMDA0OTIwMzAwMDY4RTA3MDAxQzhGODYwMDM4RTkKLToxMDM5MTAwMDAwMDMxODgwMDA2NzEwMjE4QzQ0MDAwQzNDMDJGRkY2NjUKLToxMDM5MjAwMDM0NDJGRkZGMDA4MjI4MjQwMDY2MTgyMUFFMDQwMDBDRjgKLToxMDM5MzAwMEFDNjUwMDBDOTIwMzAwMDY4RTA0MDAwQzNDMDJGRjdGNzUKLToxMDM5NDAwMDM0NDJGRkZGMDAwMzE4ODAwMEEyMjgyNDAwODIyMDI0QjQKLToxMDM5NTAwMDAwNjcxODIxQUUwNDAwMENBQzY1MDAwQzkyMDIwMDA2NTIKLToxMDM5NjAwMDAwMDIxMDgwMDA0NzEwMjE5NDQ1MDAxMkFDNDUwMDEwNjEKLToxMDM5NzAwMDkyMDIwMDA2MDAwMjEwODAwMDQ2MTAyMUFDNDUwMDEwQTMKLToxMDM5ODAwMDhGQTIwMDEwOTIwMzAwMDUwMDAyMTE0MDAwMDMxODgwNkUKLToxMDM5OTAwMDAwNjcxODIxMDA1MzIwMjE4QzYyMDAwNDhDODMwMDE4REEKLToxMDM5QTAwMDE0NjAwMDBFQUUwMjAwMTQzQzAzMDgwMDhDNjMxRDhDRjIKLToxMDM5QjAwMEFDODMwMDE4M0MwMjA4MDA4QzQyMUQ5MDAwNjIxMDJCNjIKLToxMDM5QzAwMDEwNDAwMDE5MDAwMDAwMDAzQzAyMDgwMDhDNDIxRDk0QzkKLToxMDM5RDAwMDAwNjIxMDIxM0MwMTA4MDBBQzIyMUQ4QzhFMDIwMDE4RjAKLToxMDM5RTAwMDhGNDgwMDIwMDAwMDMwMjEwMDAyMTFDMDEyMjAwMDBCN0YKLToxMDM5RjAwMEFGNDIwMDIwM0MwMjAwMDgwMzQyMjgyMTAwRTAyMDIxQzEKLToxMDNBMDAwMDhDODIwMDAwMjRDNjAwMDEwMEQxMTgyQkFDQTIwMDAwNUIKLToxMDNBMTAwMDI0ODQwMDA0MTQ2MEZGRkEyNEE1MDAwNEFGNDgwMDIwQTkKLToxMDNBMjAwMDBBMDAwNTVFMjQwMjAwMTAwMDAwMDAwMDAwMDAwMDBERTYKLToxMDNBMzAwMDAwMDAwMDAwMjQwMDAyRDQyNDAyMDAxMEE3NDIwMTQwMkMKLToxMDNBNDAwMDI0MDIwMDAyQTc0MDAxNDJBNzQwMDE0NEE3NDIwMTQ2QzgKLToxMDNBNTAwMDk3NDIwMTA0M0MwNDAwMDgyNDQyRkZGRUE3NDIwMTQ4QUIKLToxMDNBNjAwMDI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QTk2MDMwMDBBM0UKLToxMDNBNzAwMDkyMDIwMDA0MDA0MzEwMjEyNDQyMDAwMjMwNDIwMDA3NTkKLToxMDNBODAwMDAwMDIxMDIzMzA0MjAwMDcwRTAwMDIzM0FFMDIwMDEwODUKLToxMDNBOTAwMDhGNjIwMDAwM0MwMzA4MDA4QzYzMDQ0NDI0MDQwMDEwN0YKLToxMDNBQTAwMEFGODIwMDA4OTc0MjAxMDQzMDQyRkZGRjI0NDJGRkZFMkMKLToxMDNBQjAwMDAwNDAzODIxMDAwMjM3QzMzQzAyMDgwMDhDNDIwNDQwMTkKLToxMDNBQzAwMDAwNjcxODIxMDA2NzI4MkIwMDQ2MTAyMTAwNDUxMDIxQUYKLToxMDNBRDAwMDNDMDEwODAwQUMyMzA0NDQzQzAxMDgwMEFDMjIwNDQwMzMKLToxMDNBRTAwMDBBMDAwNjYyMDAwMDAwMDAxNEEwMDAwNTAwMDAwMDAwQUIKLToxMDNBRjAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMzA0OEUKLToxMDNCMDAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCREYKLToxMDNCMTAwMDI3QTQwMDE0MTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwOEMKLToxMDNCMjAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwQjkyMDYwMDA0QkEKLToxMDNCMzAwMDhGQTQwMDE0MjdBNTAwMTgwMDA2MzA4MjBFMDAwMjVDMzYKLToxMDNCNDAwMEFGQTAwMDE4NTA0MDAwMDY4RTAyMDAwMDAwMDAwMDAwRTgKLToxMDNCNTAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMxMThFMDIwMDAwOTAKLToxMDNCNjAwMDU0NDAwMDA2OTIwMjAwMDcwMDAwMDAwMDAwMDAwMDBEMTMKLToxMDNCNzAwMDAwMDAwMDAwMjQwMDAzMTY5MjAyMDAwNzMwNDIwMDA0RjcKLToxMDNCODAwMDEwNDAwMDA1OEY4MjAwMDQyNDAzRkZGQjM0NDIwMDAyMzIKLToxMDNCOTAwMDAwNDMxMDI0QUY4MjAwMDQ4RjYyMDAwNDA0NDMwMDA5MzQKLToxMDNCQTAwMDkyMDIwMDA3OTIwMjAwMDY4RTAzMDAxQzhFMDQwMDBDOTUKLToxMDNCQjAwMDAwMDIxMDgwMDA0MzEwMjFBQzQ0MDAwQ0FFMDAwMDAwNTUKLToxMDNCQzAwMDkyMDIwMDA3MzA0MjAwMDQ1NDQwMDAwQjkyMDMwMDA0QUMKLToxMDNCRDAwMDkyMDMwMDA1OEUwNDAwMTQ4RTA1MDAxQzAwMDMxODgwNUIKLToxMDNCRTAwMDNDMDIwMDAxMDA4MjIwMjEwMDY1MTgyMUFFMDQwMDE0NkYKLToxMDNCRjAwMEFDNjQwMDA0OTIwMzAwMDQ5NjAyMDAwQTAwNjIxMDIxRTMKLToxMDNDMDAwMDI0NDIwMDA1MDAwMjkwODM4RkEyMDAxODEwNDAwMDBEOEUKLToxMDNDMTAwMDI3NzEwMDA4OEZBNDAwMTQwMDAzMTA4MjAyNDIzMDIzOTEKLToxMDNDMjAwMDI3QTUwMDE4MEUwMDAyNUNBRkEyMDAxODUwNDAwMDA2NDUKLToxMDNDMzAwMDhFMDUwMDFDMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwQzgKLToxMDNDNDAwMDI0MDAwMzNGOEUwNTAwMUMwMjIwMjAyMTBFMDAwNkU3MDEKLToxMDNDNTAwMDAyNDAzMDIxOTIwNDAwMDY4RjY1MDAwNDNDMDI3RkZGODEKLToxMDNDNjAwMDAwMDQyMDgwMDA5MTIwMjE4QzgzMDAwNDM0NDJGRkZGNTcKLToxMDNDNzAwMDAwQTIyODI0MDA2NTE4MjFBQzgzMDAwNDkyMDIwMDA3RUEKLToxMDNDODAwMDkyMDMwMDA0OTIwNTAwMDUzMDQyMDAwNDEwNDAwMDE0MjUKLToxMDNDOTAwMDk2MDcwMDA4MzBBNTAwRkYwMDA1Mjg4MDAwQjEyODIxMDQKLToxMDNDQTAwMDhDQTQwMDA0OTc0MjAxMDQ5NjA2MDAwQTMwNjMwMEZGQ0EKLToxMDNDQjAwMDMwNDJGRkZGMDA0MzEwMjEwMDQ2MTAyMTMwRTNGRkZGOTgKLToxMDNDQzAwMDAwNDMxMDIzMjQ0MkZGRDgzMDg0RkZGRjAwMDIxNDAwNzkKLToxMDNDRDAwMDAwODIyMDI1QUNBNDAwMDQwQTAwMDYxNjkyMDMwMDA3MDcKLToxMDNDRTAwMDMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMThDQTQwMDAwMjkKLToxMDNDRjAwMDk3NDIwMTA0MzA2MzAwRkYzMDQyRkZGRjAwNDMxMDIxNzAKLToxMDNEMDAwMDAwNDcxMDIzM0MwM0ZGRkYwMDgzMjAyNDMwNDJGRkZGQzUKLToxMDNEMTAwMDAwODIyMDI1QUNBNDAwMDA5MjAzMDAwNzI0MDIwMDAxQzkKLToxMDNEMjAwMDEwNjIwMDA2MDAwMDAwMDAyNDAyMDAwMzEwNjIwMDExNkYKLToxMDNEMzAwMDAwMDAwMDAwMEEwMDA2Mzk4RTAzMDAxMDk3NDIwMTA0QkIKLToxMDNENDAwMDkyMDMwMDA0OTYwNTAwMEE4RTI0MDAwQzAwNDMxMDIxMDMKLToxMDNENTAwMDAwNDUxMDIxMjQ0MkZGRjIzQzAzRkZGRjAwODMyMDI0OTIKLToxMDNENjAwMDMwNDJGRkZGMDA4MjIwMjVBRTI0MDAwQzBBMDAwNjM5RjUKLToxMDNENzAwMDhFMDMwMDEwOTc0MjAxMDQ5MjAzMDAwNDk2MDUwMDBBODYKLToxMDNEODAwMDhFMjQwMDEwMDA0MzEwMjEwMDQ1MTAyMTI0NDJGRkVFMzQKLToxMDNEOTAwMDNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRjAwODIyMDI1RTgKLToxMDNEQTAwMEFFMjQwMDEwOEUwMzAwMTAyNDAyMDAwQUE3NDIwMTQwMzYKLToxMDNEQjAwMEE3NDMwMTQyOTYwMzAwMEE5MjAyMDAwNDNDMDQwMDQwMUIKLToxMDNEQzAwMDAwNDMxMDIxQTc0MjAxNDRBNzQwMDE0Njk3NDIwMTA0NDUKLToxMDNERDAwMEE3NDIwMTQ4MjQwMjAwMDEwRTAwMDIwQUE3NDIwMTRBM0MKLToxMDNERTAwMDBFMDAwMjMzMDAwMDAwMDA4RjYyMDAwMDkyMDMwMDA0MDYKLToxMDNERjAwMDAwMDAyMDIxQUY4MjAwMDg5NzQyMDEwNDk2MDYwMDBBQzUKLToxMDNFMDAwMDMwNDJGRkZGMDA2MjE4MjEwMDYwMjgyMTNDMDMwODAwQjcKLToxMDNFMTAwMDhDNjMwNDQ0M0MwMjA4MDA4QzQyMDQ0MDAwNjUxODIxNzUKLToxMDNFMjAwMDAwNDQxMDIxMDA2NTM4MkIwMDQ3MTAyMTNDMDEwODAwOTgKLToxMDNFMzAwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MDkyMDQwMDA0N0EKLToxMDNFNDAwMDAwODYyMDIxMjQ4NDAwMEEzMDg0RkZGRjBFMDAwMUU3NTEKLToxMDNFNTAwMDAwMDAwMDAwOTc0NDAxMDQzMDg0RkZGRjBFMDAwMUY1Q0MKLToxMDNFNjAwMDAwMDAwMDAwM0MwMjEwMDBBRjQyMDE3ODBBMDAwNkQ0QjYKLToxMDNFNzAwMDhGODIwMDIwMTQ4MjAwMjczMDYyMDAwNjk3NDIwMTA0REUKLToxMDNFODAwMDEwNDAwMDY3M0MwMjQwMDAzMDYyNDAwMDEwNDAwMDA1RDYKLToxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMTUKLToxMDNFQTAwMDI0MDAwNDFBOEY0MjAxNzgwNDQwRkZGRTI0MDIwODAwMTcKLToxMDNFQjAwMEFGNDIwMTc4MjQwMjAwMDhBNzQyMDE0MEE3NDAwMTQyMTYKLToxMDNFQzAwMDhGODIwMDA0OTc0MzAxMDQzMDQyMDAwMTEwNDAwMDA3MzQKLToxMDNFRDAwMDMwNzBGRkZGMjYwM0ZGRkUyNDAyMDAwMkE3NDIwMTQ2QzYKLToxMDNFRTAwMEE3NDMwMTQ4MEEwMDA2OEMyNDAyMDAwREE3NDAwMTQ2QTIKLToxMDNFRjAwMDI0MDIwMDBEQTc0MjAxNEE4RjYyMDAwMDI0MDQwMDA4M0EKLToxMDNGMDAwMEFGODIwMDA4MEUwMDAxRTcwMDAwMDAwMDBBMDAwNjY2MEMKLToxMDNGMTAwMDAyMDAyMDIxMTA0MDAwNDIzQzAyNDAwMDkzNjIwMDAwNTkKLToxMDNGMjAwMDMwNDMwMEYwMjQwMjAwMTAxMDYyMDAwNTI0MDIwMDcwRUIKLToxMDNGMzAwMDEwNjIwMDM1OEY4MjAwMjAwQTAwMDZENTI0NDIwMDAxNUQKLToxMDNGNDAwMDhGNjIwMDAwOTc0MzAxMDQzMDUwRkZGRjMwNzFGRkZGODQKLToxMDNGNTAwMDhGNDIwMTc4MDQ0MEZGRkUzMjAyMDAwNzAwMDIxMDIzNjYKLToxMDNGNjAwMDMwNDIwMDA3MjQwMzAwMEEyNjA0RkZGRUE3NDMwMTQwNTUKLToxMDNGNzAwMEE3NDIwMTQyQTc0NDAxNDRBNzQwMDE0NkE3NTEwMTQ4NzYKLToxMDNGODAwMDhGNDIwMTA4MzA0MjAwMjAxNDQwMDAwMjI0MDMwMDA5M0YKLToxMDNGOTAwMDI0MDMwMDAxQTc0MzAxNEEwRTAwMDIwQTNDMDQwMDQwMkEKLToxMDNGQTAwMDBFMDAwMjMzMDAwMDAwMDAzQzA3MDgwMDhDRTcwNDQ0QzgKLToxMDNGQjAwMDAyMTExMDIxMjQ0MkZGRkUzQzA2MDgwMDhDQzYwNDQwN0EKLToxMDNGQzAwMDAwNDAxODIxMDBFMzM4MjEwMDAwMTAyMThGNjUwMDAwMTcKLToxMDNGRDAwMDAwRTM0MDJCMDBDMjMwMjEyNjA0MDAwODAwQzgzMDIxMzUKLToxMDNGRTAwMDMwODRGRkZGQUY4NTAwMDgzQzAxMDgwMEFDMjcwNDQ0ODMKLToxMDNGRjAwMDNDMDEwODAwQUMyNjA0NDAwRTAwMDFFNzAwMDAwMDAwNzAKLToxMDQwMDAwMDBBMDAwNjY2MDIyMDIwMjEwRTAwMDEzOTAwMDAwMDAwOEYKLToxMDQwMTAwMDhGODIwMDIwMjQ0MjAwMDFBRjgyMDAyMDNDMDI0MDAwMzkKLToxMDQwMjAwMEFGNDIwMTM4MEEwMDAzMzYwMDAwMDAwMDMwODRGRkZGNzEKLToxMDQwMzAwMDMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwREQKLToxMDQwNDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxNjcKLToxMDQwNTAwMDBBMDAwNkREMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxOEEKLToxMDQwNjAwMDEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0OTcKLToxMDQwNzAwMEFDODIwMDAwMEEwMDA2RTcyNDg0MDAwNDAzRTAwMDA4ODQKLToxMDQwODAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwODEKLToxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGNzcKLToxMDQwQTAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMEEKLTowNDQwQjAwMDAwMDAwMDAxMEIKLTowQzQwQjQwMDBBMDAwMDJBMDAwMDAwMDAwMDAwMDAwMENDCi06MTA0MEMwMDAwMDAwMDAwRDc0Nzg3MDM1MkUzMDJFMzA2QTMzMDAwMEY5Ci06MTA0MEQwMDAwNTAwMDAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDUwCi06MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA0MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDE2MDAwMDAwMDAwMDAwMDAwMDg5Ci06MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM4OEQ0Ci06MTA0MTUwMDAwMDAwMDAwMDAwMDAwNURDMDAwMDAwMDAwMDAwMDAwMDdFCi06MTA0MTYwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIyCi06MTA0MTcwMDAzQzAyMDgwMDI0NDIzODYwM0MwMzA4MDAyNDYzM0IxNERFCi06MTA0MTgwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEJCCi06MTA0MTkwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDQ3Ci06MTA0MUEwMDAyNjEwMDBBODNDMUMwODAwMjc5QzM4NjAwRTAwMDQwNzVECi06MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDBEOEY4NjAwM0MzQzAzOTAwMEQyCi06MTA0MUMwMDAzQzAyODAwMDAwODYyODI1MDBBMzIwMjVBQzQ0MDAyMDY2Ci06MTA0MUQwMDAzQzAzODAwMDhDNjcwMDIwMDRFMEZGRkUwMDAwMDAwMDJDCi06MTA0MUUwMDAwM0UwMDAwODAwMDAwMDAwMEEwMDAwNDEyNDA0MDAwMTcwCi06MTA0MUYwMDA4Rjg1MDAzQzNDMDQ4MDAwMzQ4MzAwMDEwMEEzMTAyNTFGCi06MTA0MjAwMDAwM0UwMDAwOEFDODIwMDIwMDNFMDAwMDgwMDAwMTAyMTU5Ci06MTA0MjEwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTQ5Ci06MTA0MjIwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTg1Ci06MTA0MjMwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTA3Ci06MTA0MjQwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjgxCi06MTA0MjUwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEU5Ci06MTA0MjYwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkU2Ci06MTA0MjcwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkU4Ci06MTA0MjgwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwOEEzCi06MTA0MjkwMDAwMDAwMDAwMDkwQUEwMDMxOEZBQjAwMTA4Q0FDMDA0MEYxCi06MTA0MkEwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDA0NDIxCi06MTA0MkIwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDA0ODUwCi06MTA0MkMwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDA0Q0ZBCi06MTA0MkQwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQzRGCi06MTA0MkUwMDA4Q0FEMDAzODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAzMjNFCi06MTA0MkYwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMzBBNTYwMDAwMkQ0Ci06MTA0MzAwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMzIzMDYyMDBGRkFBCi06MTA0MzEwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRURFCi06MTA0MzIwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODBBCi06MTA0MzMwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNEEyCi06MTA0MzQwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMTM4Ci06MTA0MzUwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxOEFFCi06MTA0MzYwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODI1Ci06MTA0MzcwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA3MEM5Ci06MTA0MzgwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNDVCCi06MTA0MzkwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwOEYwCi06MTA0M0EwMDBBMTZBMDAwMThDODIwMDcwMEEwMDAwQjcwMDAwMDAwMEMyCi06MTA0M0IwMDA5MDg5MDAzMDI3QkRGRkY4OEZBODAwMUNBM0E5MDAwMDNBCi06MTA0M0MwMDA4RkEzMDAwMDNDMERGRjgwMzVBMkZGRkY4Q0FDMDAyQ0JBCi06MTA0M0QwMDAwMDYyNTgyNEFGQUIwMDAwQTEwMDAwMDQwMEMwNTgyMUM3Ci06MTA0M0UwMDBBN0EwMDAwMjhEMDYwMDA0MDBBMDQ4MjEwMTY3QzgyMTkzCi06MTA0M0YwMDA4RkE1MDAwMDAwODA1MDIxM0MxOEZGN0YwMzJDMjAyNjUxCi06MTA0NDAwMDAzQzBFMDBGRjJDOEMwMDAxMzcwRkZGRkYzNUNERkZGRjY2Ci06MTA0NDEwMDAzQzAyRkYwMDAwQUZDODI0MDBFREMwMjQwMEMyNzgyNDk1Ci06MTA0NDIwMDAwMDBDMURDMDAzMjM2ODI1MDFGODcwMjVBRDBEMDAwMEE4Ci06MTA0NDMwMDBBRDBFMDAwNDhEMjQwMDI0QUZBRDAwMDBBRDA0MDAwOEQzCi06MTA0NDQwMDA4RDJDMDAyMDI0MDRGRkZGQUQwQzAwMEM5NTQ3MDAzMjlBCi06MTA0NDUwMDAzMEU2RkZGRkFEMDYwMDEwOTE0NTAwNDgzMEEyMDBGRjk2Ci06MTA0NDYwMDAwMDAyMTlDMjUwNjAwMDAxOEQyNDAwMzRBRDA0MDAxNDE0Ci06MTA0NDcwMDA4RDQ3MDAzODhGQUEwMDE4MjdCRDAwMDhBRDBCMDAyODEzCi06MTA0NDgwMDBBRDBBMDAyNEFEMDcwMDFDQUQwMDAwMkNBRDAwMDAxOEUzCi06MTA0NDkwMDAwM0UwMDAwOEFEMDAwMDIwMjdCREZGRTBBRkIyMDAxODI4Ci06MTA0NEEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM5MDk4MDAzMDQ3Ci06MTA0NEIwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0ZBMENGMDAwMDFCCi06MTA0NEMwMDA5MDhFMDAzMTM1QUNGRkZGM0MwQUZGMDBBMENFMDAwMTBBCi06MTA0NEQwMDA5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQ4RTI5MDAwNEI4Ci06MTA0NEUwMDAwMEEwODAyMTAxNkMyODI0MDEyQTQwMjQwMDgwOTAyMTEyCi06MTA0NEYwMDAwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDQyNjA1MDAyMDgyCi06MTA0NTAwMDAyNjI0MDAwODBFMDAwMDYzMjQwNjAwMDI5MjQ3MDAzMEIzCi06MTA0NTEwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDAwMDAzMTYwM0E5Ci06MTA0NTIwMDAyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkY5NjU5MDAzMkQwCi06MTA0NTMwMDAzMzIzRkZGRjBFMDAwMDYzQUUyMzAwMTAyNjI0MDAyNDY3Ci06MTA0NTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDA1Ci06MTA0NTUwMDAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwNkQyN0JEMDAyMDYzCi06MTA0NTYwMDAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMThBRkJGMDAyMDBGCi06MTA0NTcwMDA5MEE5MDAzMDI0MDIwMDAxMDBFMDUwMjEzMTIzMDAzRkM3Ci06MTA0NTgwMDAwMEEwNDAyMThGQjAwMDQwMDA4MDg4MjEwMEMwNDgyMTU5Ci06MTA0NTkwMDAxMDYyMDAxNDhGQTcwMDM4MjQwQjAwMDUwMEEwMjAyMTEyCi06MTA0NUEwMDAwMEMwMjgyMTEwNkIwMDEzMDIwMDMwMjEwRTAwMDBGOTFBCi06MTA0NUIwMDAwMDAwMDAwMDkyMjUwMDdDMzBBNDAwMDIxMDgwMDAwMzVGCi06MTA0NUMwMDAyNjAzMDAzMEFFMDAwMDMwMjYwMzAwMzQ4RkJGMDAyMEU5Ci06MTA0NUQwMDA4RkIxMDAxQzhGQjAwMDE4MDA2MDEwMjEwM0UwMDAwOEFDCi06MTA0NUUwMDAyN0JEMDAyODBFMDAwMDc4QUZCMDAwMTAwQTAwMDE0MDdGCi06MTA0NUYwMDAwMDAwMDAwMDhGQTMwMDNDMDEwMDIwMjEwMTIwMjgyMUExCi06MTA0NjAwMDAwMTQwMzAyMUFGQTMwMDEwMEUwMDAwQkZBRkIwMDAxNDc2Ci06MTA0NjEwMDAwQTAwMDE0MDAwMDAwMDAwM0MwNTgwMDA4Q0EzMEUxMDQxCi06MTA0NjIwMDA4Rjg0MDA0NEFDODMwMDIwOENBMjBFMTgwM0UwMDAwOEE1Ci06MTA0NjMwMDBBQzgyMDAyNDNDMDU4MDAwOENBMzBFMTQ4Rjg0MDA0NEJGCi06MTA0NjQwMDBBQzgzMDAyMDhDQTIwRTFDMDNFMDAwMDhBQzgyMDAyNDg2Ci06MTA0NjUwMDA5MzgyMDAwQzEwNDAwMDFCMjQ4MzAwMEYyNDA0RkZGMDAxCi06MTA0NjYwMDAwMDY0MzgyNDEwRTAwMDE5OTc4QjAwMTA5Nzg0MDAwRTI2Ci06MTA0NjcwMDA5Mzg5MDAwRDNDMEE2MDFDMEEwMDAxN0IwMTY0NDAyMzAxCi06MTA0NjgwMDAwMTAzNzAyMTAwNjQyODIzMTEyNjAwMDIzMUMyRkZGRkJDCi06MTA0NjkwMDAzMEEyRkZGRjAwNDczMDJCNTBDMDAwMEUwMEU0NDgyMTNECi06MTA0NkEwMDA4RDREMDAwQzMxQTNGRkZGMDAwMzY0MDAwMDBDMkMwM0IwCi06MTA0NkIwMDAwNEExRkZGMzAwMDAzMDIxMzA2MzdGRkYwQTAwMDE3MzgzCi06MTA0NkMwMDAyNDA2MDAwMTAzRTAwMDA4MDAwMDAwMDA5Nzg0MDAwRUFCCi06MTA0NkQwMDAwMEU0NDgyMTMxMjNGRkZGMzE2OEZGRkYwMDY4MzgyQkQ5Ci06MTA0NkUwMDA1NEUwRkZGOEE3ODMwMDBFOTM4QTAwMEQxMTQwMDAwNUU3Ci06MTA0NkYwMDAyNDBGMDAwMTAwNkJDMDIzQTM4MDAwMEQwM0UwMDAwODFECi06MTA0NzAwMDBBNzk4MDAwRTAwNkJDMDIzQTM4RjAwMEQwM0UwMDAwOEU0Ci06MTA0NzEwMDBBNzk4MDAwRTAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODk2Ci06MTA0NzIwMDBBRkIwMDAxMDMwODRGRkZGM0MxMDgwMDA5M0E4MDAyQjM2Ci06MTA0NzMwMDBBRkJGMDAxNEE2MDQwMTQ0OTYwQTBFMTYzMEM2MDBGRjRGCi06MTA0NzQwMDA4RkE5MDAzMEE2MEEwMTQ2QUUwNTAxNDhBMjA2MDE1MjEzCi06MTA0NzUwMDBBNjA4MDE1QUFFMDcwMTYwOEZBMzAwMkNBNjA5MDE1OEQ0Ci06MTA0NzYwMDAwMTIwMjAyMTBFMDAwMTY3QUUwMzAxNTQzQzAyMTAwMDFECi06MTA0NzcwMDBBRTAyMDE3ODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc0Ci06MTA0NzgwMDAyN0JEMDAxODhGODUwMDAwMjQ4NDAwMDcyN0JERkZGODhGCi06MTA0NzkwMDAzMDg0RkZGODNDMDY4MDAwOTRDQjAwOEEzMTZBRkZGRjJBCi06MTA0N0EwMDBBRkFBMDAwMDhGQTkwMDAwMDEyNTQwMjMyNTA3RkZGRkM1Ci06MTA0N0IwMDAzMEUzMUZGRjAwNjQxMDJCMTQ0MEZGRjcwMDA1Njg4MkYwCi06MTA0N0MwMDAwMDBEMjg4MDM0Q0M0MDAwMDBBQzEwMjEwM0UwMDAwODJDCi06MTA0N0QwMDAyN0JEMDAwODhGODIwMDAwMjQ4NjAwMDczMEM1RkZGODNGCi06MTA0N0UwMDAwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDhBRjg0MDAwMDFFCi06MTA0N0YwMDA4Rjg1MDA0NDhGOEEwMDNDMjdCREZGQjAzQzA0ODAwMEI5Ci06MTA0ODAwMDBBRkI3MDA0NEFGQjQwMDM4QUZCMTAwMkNBRkJGMDA0ODIxCi06MTA0ODEwMDBBRkI2MDA0MEFGQjUwMDNDQUZCMzAwMzRBRkIyMDAzMDJDCi06MTA0ODIwMDBBRkIwMDAyODhDODcwMTA0OENBOTAwMjRBQzhBMDA4MERBCi06MTA0ODMwMDA4Q0E4MDAyMDAwRTk4ODIzMDAwMEI4MjFBQzg4MEUxMDY1Ci06MTA0ODQwMDA4Q0E2MDAyNDAwMDBBMDIxQUM4NjBFMTg4QzgyMEUxMENECi06MTA0ODUwMDBBQzgyMEUxNDhDODMwRTE4QUM4MzBFMUMxMjIwMDBGQjRECi06MTA0ODYwMDAzQzE2ODAwMDkzNkIwMDA4MTE2MDAwRjEwMDAwMDAwMDBFCi06MTA0ODcwMDA5NzZFMDAxMDMxQ0RGRkZGMDIyRDYwMkIxNTgwMDBFQ0VDCi06MTA0ODgwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRUNGMEUwMDQ3Ci06MTA0ODkwMDAzQzA1ODAwMDhDQjMwMDAwMzI3MjAwMDgxMjQwRkZGRDFFCi06MTA0OEEwMDAwMDAwMDAwMDk0QjUwRTA4OENBNzBFMDQzMkE1RkZGRjhGCi06MTA0OEIwMDAzMEI0MDAwMTEyODAwMEUxMDAwMDAwMDAwMDAwMDAwRDkzCi06MTA0OEMwMDAzMEI5QTA0MDI0MTgwMDQwMTMzODAxMTczMEI0QTAwMEJDCi06MTA0OEQwMDAxMjgwMDBEQzAwMDAwMDAwOTM3MzAwMDgxMjYwMDAwOEUyCi06MTA0OEUwMDAwMDAwMDAwMDk3NjkwMDEwMzEyMkZGRkYwMEUyMjAyQjNBCi06MTA0OEYwMDAxMDgwMDAwMzMwQTYwMDQwMTBDMDAwRDIwMDAwMDAwMDZECi06MTA0OTAwMDBBNzg1MDA0MEFGODcwMDM4OTM2QTAwMDgwMjIwMzgyMTRECi06MTA0OTEwMDBBRkIxMDAyMDE1NDAwMEYxMjdCNDAwMjBBRjYwMDAwQ0JCCi06MTA0OTIwMDA5Nzg1MDA0MDMwQjE0MDAwMTYyMDAwMDIyNDAzMDAxNjk1Ci06MTA0OTMwMDAyNDAzMDAwRTI0MTU0MDA3QTM2MzAwMEFBRjc1MDAxNDdBCi06MTA0OTQwMDA5MzkwMDA0MjhGNkYwMDE0MzIxOTAwMDEwMDE5QzI0MDg5Ci06MTA0OTUwMDAwMUY4NDAyNUFGNjgwMDE0OTc4NzAwNDA4RjYzMDAxNDZBCi06MTA0OTYwMDAzMEVFMDAxMDAwNkU2ODI1QUY2RDAwMTQ5NzhDMDA0MDhCCi06MTA0OTcwMDAzMThCMDAwODExNjAwMTY1MDAwMDAwMDA4RjY1MDAxNDk0Ci06MTA0OTgwMDAzQzBCMTAwMDNDMEE4MDAwMDBBQjg4MjVBRjcxMDAxNDdFCi06MTA0OTkwMDA5NTQ2MEUwQTNDMDk4MTAwMjQxMzAwMEUzMEMyRkZGRjI5Ci06MTA0OUEwMDAwMDQ5MjAyNUFGNjQwMDA0QTM3MzAwMDI5MzdGMDAwQTJFCi06MTA0OUIwMDAzNDA2RkZGQzI3RjIwMDA0QTM3MjAwMEE5NzhEMDA0MDIyCi06MTA0OUMwMDAzMUFDMjAwMDExODAwMTU3MDAwMDAwMDAzQzA3ODAwMDNFCi06MTA0OUQwMDA5NzhEMDA0MDk0RUMwRTBDOTc5MTAwNDAwMDBENTg0MkNBCi06MTA0OUUwMDAzMTg1QzAwMDMxNkEwMDAzMDAwNTEzMDMzMjI5MTAwMDJECi06MTA0OUYwMDAwMTQyOTgyNTAwMDkyMjAzMDI2NEY4MjUwMDFGOTBDMDk3Ci06MTA0QTAwMDBBNzcyMDAxMjk3OTUwMDQwOTM3OTAwMEEwMDE1ODE4MkUxCi06MTA0QTEwMDAzMjE4MDAzQzAzMTk3ODIxMjVFODAwM0NBMzY4MDAwOUZFCi06MTA0QTIwMDA5NEVFMEUwQzMxQzMzRkZGQTc2MzAwMTA5NzYzMDAxMjkyCi06MTA0QTMwMDA5MzY3MDAwOTAwRTM3MDIxMjVDRDAwMDIzMUFDMDAwNzI3Ci06MTA0QTQwMDAwMDBDNTgyMzMxNjUwMDA3QTM2NTAwMEI5MzcxMDAwOTIyCi06MTA0QTUwMDA5NzY0MDAxMjk3NkEwMDEwMzIyMjAwRkY4RjkxMDAzODhECi06MTA0QTYwMDA5NzlGMDA0MDAwNDQ0ODIxMDEyQTk4MjEwMjY2OTAyMTI2Ci06MTA0QTcwMDAzM0Y1MDA0MDEyQTAwMDA1MzI0NkZGRkYwMEQxNDAyQjY1Ci06MTA0QTgwMDAzQzEyODAwMDExMDAwMDE2MDAwMDk4MjEwMjI2NzgyQkFECi06MTA0QTkwMDAxNUUwMDEzNjhGQTcwMDIwM0MxODgwMDA4RjEwMEUxNEZGCi06MTA0QUEwMDAzQzA1ODAwMEFGMTAwRTEwOEYxOTBFMUNBRjE5MEUxOEE4Ci06MTA0QUIwMDBBRjA2MEUwMDhDQjIwMDAwMzI1NTAwMDgxMkEwRkZGREI4Ci06MTA0QUMwMDAwMDAwMDAwMDk0QkYwRTA4MDBDMDg4MjEwMDAwOTAyMTYzCi06MTA0QUQwMDBBNzlGMDA0MDhDQTYwRTA0MjQxMzAwMDFBRjg2MDAzODY3Ci06MTA0QUUwMDA5NzY5MDAxMDMxMzVGRkZGOEU4QzAwMDAwMTkxMjAyMzYzCi06MTA0QUYwMDAxMDgwMDExOEFFODQwMDAwOTM2NzAwMDgxNEUwMDBEODBECi06MTA0QjAwMDAwMDAwMDAwMDBFMDAwMUI0MjQwNDAwMTA4RjhFMDA0ODQ1Ci06MTA0QjEwMDAzQzAzMzIwMDAwNDAyODIxMzFDNjAwRkYwMDA2M0MwMDYzCi06MTA0QjIwMDAwMEUzNjAyNTI1Q0QwMDAxQUY4RDAwNDhBQzRDMDAwMEFFCi06MTA0QjMwMDA5MzYyMDAwOTk3NjQwMDEyOTM3RjAwMEEzMDRBMDBGRkQ1Ci06MTA0QjQwMDAzMDhCRkZGRjAxNEI0ODIxMDAwOUNDMDAzM0YwMDBGRjAwCi06MTA0QjUwMDAwMzMwQzAyNUFDQjgwMDA0OEY4RjAwNDg5Nzg4MDA0MDEwCi06MTA0QjYwMDAzMTAzMjAwMDEwNjAwMTAzQUNBRjAwMDg5NzZGMDAxMjAyCi06MTA0QjcwMDAzMUU4RkZGRjA2NDAwMTAxQUNBODAwMEM5NzkwMDA0MDBGCi06MTA0QjgwMDAzMjA1MDAwODE0QTAwMDAyMjYyODAwMDYyNjI4MDAwMjhDCi06MTA0QjkwMDAzQzA0ODAwMDk0OEIwRTE0OEM4NTBFMUM4RjY3MDAwNERGCi06MTA0QkEwMDA5MzZBMDAwMjMxNjRGRkZGMzE0OTAwRkZBRkE5MDAxMDkyCi06MTA0QkIwMDA4RjdGMDAxNEFGQTgwMDE4QUZCRjAwMTQwRTAwMDE5QTM5Ci06MTA0QkMwMDAwMDAwMDAwMDI0MDQwMDEwMEUwMDAxQzgwMDAwMDAwMEQ2Ci06MTA0QkQwMDA4RTkyMDAwMDE2NDAwMDA1MDAwMDAwMDA4Rjc5MDAxNDNFCi06MTA0QkUwMDAyNDA1RkZCRjAzMjVBMDI0QUY3NDAwMTQ4RjY5MDAwQ0I3Ci06MTA0QkYwMDAwMTM1RjgyMUFGN0YwMDBDOTM3NTAwMDgxNkEwMDAwODVFCi06MTA0QzAwMDAwMDAwMDAwMDEyNjAwMDA2MDAwMDAwMDA4RjZCMDAxNDFFCi06MTA0QzEwMDAzQzBDRUZGRjM1ODRGRkZFMDE2NDUwMjRBRjZBMDAxNEEyCi06MTA0QzIwMDBBMzczMDAwODhGQTcwMDIwMEEwMDAzMTYwMjIwMjAyMThBCi06MTA0QzMwMDBBRUQxMEUwMDBBMDAwMUY4M0MwNTgwMDAxNEUwRkYyMTBGCi06MTA0QzQwMDAzMEI5QTA0MDBFMDAwMTYwMDAwMEEwMjEyRTkxMDAwMUFCCi06MTA0QzUwMDAwMjM3QjAyNTEyQzAwMDE3OEZCRjAwNDg4Rjg1MDAzQzc3Ci06MTA0QzYwMDAyNDE3MEYwMDEwQjcwMENEM0MwNDgwMDA4Qzk5MDE3ODA4Ci06MTA0QzcwMDAwNzIwRkZGRTI0MTUwRjAwNTBCNTAwRUIzQzA0ODAwMDE4Ci06MTA0QzgwMDA4Qzg5MEUxNDI0MDUwMjQwM0MxNDEwMDBBQzg5MDE0NEE4Ci06MTA0QzkwMDA4QzlGMEUxQ0FDOUYwMTQ4QTA4MDAxNTJBNDgwMDE1QTM5Ci06MTA0Q0EwMDBBQzgwMDE2MEE0ODAwMTU4QUM4NTAxNTRBQzk0MDE3OEJCCi06MTA0Q0IwMDA4RkJGMDA0ODhGQjcwMDQ0OEZCNjAwNDA4RkI1MDAzQ0NGCi06MTA0Q0MwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQzE2Ci06MTA0Q0QwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNTA4RjkxMDAzOEY2Ci06MTA0Q0UwMDA5NzkzMDA0MDNDMTI4MDAwMDIyMEE4MjEzMjZBMDA0MEM1Ci06MTA0Q0YwMDAxNTQwRkY3RDAwMDA5ODIxOTc2QjAwMTA4Rjg1MDAzOENDCi06MTA0RDAwMDAzMTYyRkZGRjEwNDUwMEEyMDAwMDIwMjEwMDgwQTAyMTk5Ci06MTA0RDEwMDAxMDgwMDBFNTAwRTA4ODIxMTYyMEZFRDIwMDAwMDAwMDhGCi06MTA0RDIwMDAwQTAwMDJFNzJFOTEwMDAxM0MwMzgwMDA4QzdGMDE3ODhECi06MTA0RDMwMDAwN0UwRkZGRTI0MDQwODAwOEY4NjAwMDBBQzY0MDE3OEMxCi06MTA0RDQwMDAzQzAzODAwMDk0NkMwMDhBMzE4QkZGRkYwMTY2NTAyMzg2Ci06MTA0RDUwMDAyNTQ5RkZGRjMxMjgxRkZGMkQwMjAwMDgxNDQwRkZGOUVECi06MTA0RDYwMDAwMDAwMDAwMDhGOEUwMDQ4MzQ2RjQwMDA4RjgzMDAzQ0FECi06MTA0RDcwMDAwMEUwQTAyMTI0MEQwRjAwMjVDNzAwMDFBRjg3MDA0OEU3Ci06MTA0RDgwMDAwMENGMzAyMTAyMzQ4ODIzM0MwODgwMDAzMUQ1MDBGRjU5Ci06MTA0RDkwMDAxMDZEMDAwNTI0MDcwMDAxOTM5MzAwNDIzMjcyMDAwMTU4Ci06MTA0REEwMDAwMDEyODI0MDM2MDcwMDAxMDAxNTE0MDAzQzA5MDEwMDgyCi06MTA0REIwMDAwMDQ5MjAyNUFDQzQwMDAwOEY5RjAwNDgzMEI5MDAzNjYwCi06MTA0REMwMDAzMEI4MDAwOEFDREYwMDA0MTMwMDAwOTAwMEY5OTgyNTBCCi06MTA0REQwMDA5NTA3MEUwQThGOEUwMDAwM0MwMzgxMDAzMEVERkZGRjI3Ci06MTA0REUwMDAyNUNCMDAwODAxQTMyODI1M0MwQzEwMDAzMTZBMUZGRkM5Ci06MTA0REYwMDAyNjkyMDAwNjI0MDYwMDBFQUQwNTAxNjAwMjZDOTgyNTdGCi06MTA0RTAwMDBBNTA2MDE1QUFGOEEwMDAwQTUxMjAxNTgxNjIwMDAwODE1Ci06MTA0RTEwMDAzQzEwODAwMDhGOTkwMDNDMjQxODBGMDA1MzM4MDAwMjhBCi06MTA0RTIwMDAyNDE3MDAwMTM2NzMwMDQwMEUwMDAxNTkzQzEwODAwMDI5Ci06MTA0RTMwMDA4RTFGMEUxNDAyNDAyMDIxQUUxRjAxNDQ4RTEyMEUxQzQ0Ci06MTA0RTQwMDBBRTEyMDE0OEEyMTUwMTUyQUUxMzAxNTQwRTAwMDE2N0MzCi06MTA0RTUwMDAzQzE1MTAwMEFFMTUwMTc4MEEwMDAzMTkwMDAwMDAwMDhGCi06MTA0RTYwMDA5Mzc4MDAwOTk3NjMwMDEyOTM2ODAwMEIzMzBGMDBGRkRCCi06MTA0RTcwMDAwMUUzMzgyMTMxMDIwMEZGMDBFMjcwMjEyNUQwMDAwQTUxCi06MTA0RTgwMDAzMjEwRkZGRjBFMDAwMUI0MDIwMDIwMjE4Rjg2MDA0ODdGCi06MTA0RTkwMDAzQzE5NDEwMDNDMDc4MDAwMjRDRDAwMDFBRjhEMDA0ODQzCi06MTA0RUEwMDA5MzZDMDAwOTk3NjQwMDEyMzBDNjAwRkYzMThBMDBGRjNFCi06MTA0RUIwMDAzMDhCRkZGRjAxNEI0ODIxMDAwNjJDMDAyNTNGMDAwMkVDCi06MTA0RUMwMDAwMEJGQzAyNTAzMTk3ODI1QUM0RjAwMDA4RjY4MDAwQzg3Ci06MTA0RUQwMDA5NEVFMEUxNDAxMTIxODI1QUM0MzAwMDQ4Q0U1MEUxQzUwCi06MTA0RUUwMDA4RjY3MDAwNDkzNkQwMDAyMzFDNEZGRkYzMUFDMDBGRkY3Ci06MTA0RUYwMDBBRkFDMDAxMDhGNjIwMDE0QUZCMTAwMTgwRTAwMDE5QTIxCi06MTA0RjAwMDBBRkEyMDAxNDBBMDAwMkM1MDIwMDIwMjFBRjYwMDAwNDE1Ci06MTA0RjEwMDBBMzYwMDAwMjk3OEQwMDQwMzFBQzIwMDAxNTgwRkVBQkVECi06MTA0RjIwMDAwMDAwMzAyMUE3NjAwMDEyOTc5MDAwNDA5Mzc4MDAwQTlCCi06MTA0RjMwMDAzQzAzODAwMDMyMTkxRjAwMDAxOTc5ODMwMUY4NDAyMUQ5Ci06MTA0RjQwMDAyNTA3MDAyOEEzNjcwMDA5OTQ2RTBFMEMwQTAwMDI1RTc0Ci06MTA0RjUwMDBBNzZFMDAxMDhGNkUwMDE0MzVDRDAwNDAwRTAwMDE1OTcxCi06MTA0RjYwMDBBRjZEMDAxNDBBMDAwMjkxMDAwMDAwMDAwQTAwMDMxNjUxCi06MTA0RjcwMDAwMDAwMjAyMTA2NDFGRjAxQUNBMDAwMEM4Q0I4MDAwQzAxCi06MTA0RjgwMDAzQzE5ODAwMDAzMTk5MDI1MEEwMDAyQjJBQ0IyMDAwQzUzCi06MTA0RjkwMDAwMDAwOTAyMTBBMDAwMjhEMjQxMzAwMDExMjgwMDAwNUY4Ci06MTA0RkEwMDAzQzBEODAwMDk1QTYwRTA4MzBEMzAwNDAxMjYwMDA0MkYwCi06MTA0RkIwMDAwMDAwMDAwMDhDOTAwMTc4MDYwMEZGRkUwMDAwMDAwMDU5Ci06MTA0RkMwMDA5NDkyMEUxMDNDMDMwNTAwMjQwNzIwMDAzMjU4RkZGRjg2Ci06MTA0RkQwMDAwMzAzNzgyNUFDOEYwMTRDOEM4ODBFMTQzQzBFMTAwMDE2Ci06MTA0RkUwMDBBQzg4MDE0NDhDODIwRTFDQUM4MjAxNDhBMDgwMDE1MjI2Ci06MTA0RkYwMDBBNDgwMDE1QUFDODAwMTYwQTQ4MDAxNThBQzg3MDE1NEEwCi06MTA1MDAwMDBBQzhFMDE3ODBBMDAwMkVFM0MwNDgwMDA4RjkwMDAwMDE0Ci06MTA1MDEwMDAyNjkyMDAwMkE1MTIwMTU4MjYwRjAwMDgzMUU4MUZGRjUyCi06MTA1MDIwMDAwQTAwMDM1NkFGODgwMDAwQUM4MDAxNEMxMjgwMDAxOUMyCi06MTA1MDMwMDAwMDAwMDAwMDhDOEEwRTEwQUM4QTAxNDQ4QzgzMEUxODhDCi06MTA1MDQwMDAzQzBDODAwMDI0MTYwMDQwQUM4MzAxNDg4RkJGMDA0ODEwCi06MTA1MDUwMDBBMTgwMDE1MjhGQjcwMDQ0QTU4MDAxNUE4RkI1MDAzQzUyCi06MTA1MDYwMDBBRDgwMDE2MDhGQjQwMDM4QTU4MDAxNTg4RkIzMDAzNDQzCi06MTA1MDcwMDBBRDk2MDE1NDhGQjIwMDMwOEZCNjAwNDA4RkIxMDAyQzM2Ci06MTA1MDgwMDA4RkIwMDAyODNDMDQxMDAwMjdCRDAwNTAwM0UwMDAwODRBCi06MTA1MDkwMDBBRDg0MDE3ODhDOEIwRTE0QUM4QjAxNDQ4QzgzMEUxQzc4Ci06MTA1MEEwMDAwQTAwMDNFNDNDMEM4MDAwMEUwMDAxNjAyRTkxMDAwMTE4Ci06MTA1MEIwMDAwQTAwMDJFODAyMzdCMDI1MDAwMDAwMDAwMDAwMDAwREUxCi06MTA1MEMwMDAwMDAwMDAwMDI0MDAwMzNBMEEwMDAzQzAzQzA0ODAwMEYyCi06MTA1MEQwMDAyN0JERkZFMEFGQkYwMDFDM0MxRjIwRkYzQzA3NjAwMDY2Ci06MTA1MEUwMDAzQzA5ODAwMDI0MDIwMDEwMzdGOUZGRkRBQ0UyMzAwOEQzCi06MTA1MEYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRDM5MEUwMDYwCi06MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTA1MTEwMDAwMDAwMDAwMDNDMTgwMEZGMzcxMkZGRkRBRDMyMEUwMDBBCi06MTA1MTIwMDAzQzBCNjAwNDhENzA1MDAwMjQxMUZGN0YzQzBFMDAwMjg4Ci06MTA1MTMwMDAwMjExNzgyNDM1RUMzODBDMzVDRDAxMDlBQ0VENEMxODUyCi06MTA1MTQwMDAyNDBBMDAwOUFENkM1MDAwOENFODA0MzhBRDJBMDAwODMwCi06MTA1MTUwMDBBRDIwMDAxNDhDRTU0QzFDMzEwNkZGRkYzOEM0MkY3MUM0Ci06MTA1MTYwMDAwMDA1MUUwMjMwNjIwMDBGMjQ4NkMwQjMxMDQwMDAwNzA1Ci06MTA1MTcwMDBBRjgyMDAwODhDRTU0QzFDM0MwOTAwMUYzNTI4RkMwMDYwCi06MTA1MTgwMDAwMEE4MTgyNDAwMDMyMUMyQUY4NDAwMDQ4Q0YxMDgwODkxCi06MTA1MTkwMDAzQzBGNTcwOTI0MTJGMDAwMDIzMjcwMjQzNUYwMDAxMDQxCi06MTA1MUEwMDAwMUQwNjAyNjAxQ0Y2ODI2MkRBQTAwMDEyRDhCMDAwMUI5Ci06MTA1MUIwMDAwMTRCMzgyNTUwRTAwMDA5QTM4MDAwMEMzQzAyNjAxQzI0Ci06MTA1MUMwMDA4QzU5MDAwODI0MUYwMDAxQTM5RjAwMEMzMzM4N0MwMDc5Ci06MTA1MUQwMDBBNzk4MDAxMEE3ODAwMDBFQTM4MDAwMERBRjgwMDA0OEE0Ci06MTA1MUUwMDAxNEMwMDAwM0FGODAwMDAwM0MwNjYwMDBBQ0MwNDQyQzNCCi06MTA1MUYwMDAwRTAwMDRCNjNDMTA4MDAwMEUwMDBEREYwMDAwMDAwMDIxCi06MTA1MjAwMDAzQzExMDgwMDI2MzEzOEM4M0MxMjA4MDAyNjUyMzk0OEEzCi06MTA1MjEwMDA4RTA1MDAwMDM4QTMwMDAxMzA2NDAwMDExNDgwRkZGQ0ZCCi06MTA1MjIwMDAwMDAwMDAwMDhFMDYwMTAwM0MwQzgwMEEyNDBBRkY4MDZBCi06MTA1MjMwMDAyNEM3MDI0MDMwRUIwMDdGMDE2QzQ4MjEwMEVBNDAyNDgzCi06MTA1MjQwMDBBRTA2MDAyMEFGODkwMDQ0QUUwODAwMjQzQzAzODAwMDc1Ci06MTA1MjUwMDBBRjg2MDAzQzhDNkQwMTc4MDVBMEZGRkUyNDE5MDgwMDg0Ci06MTA1MjYwMDBBQzc5MDE3ODkwNzgwMTA4QTM5ODAwNDI5MzhGMDA0MkFFCi06MTA1MjcwMDAzMUVFMDAwMTExQzAwMDBGMjQwRDBEMDAyNEMyRjgwMDEyCi06MTA1MjgwMDAyQzVGMDMwMTEzRTAwMDFDMDAwNjI5QzIyNEEzRkZGMEQ5Ci06MTA1MjkwMDAwMDAzMjA0MjAwMDQzMTQwMEUwMDAxQ0YwMEQxRDgyMThDCi06MTA1MkEwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzgwQTAwMDQ1N0FFCi06MTA1MkIwMDAwMDAwMDAwMDEwQ0QwMDI2MjQwRTBGMDAxMENFMDAyQUEyCi06MTA1MkMwMDAzQzAyODAwODM0NUYwMDgwOTNGOTAwMDAyNDBGMDA1MEY2Ci06MTA1MkQwMDAzMzM4MDBGRjE3MEZGRkYzM0MwNDQwMDAwRTAwMDkxMkEzCi06MTA1MkUwMDAwMDAwMDAwMDNDMDQ0MDAwM0MwNjgwMDBBQ0M0MDEzOEQzCi06MTA1MkYwMDAwQTAwMDQ1NzAwMDAwMDAwOEY4MzAwMDQwMEEzNDAyQjI1Ci06MTA1MzAwMDAxNTAwMDAwQjhGOEIwMDA4MDA2QjUwMjEyNTQ3RkZGRjE1Ci06MTA1MzEwMDAwMEU1NDgyQjE1MjAwMDA2MDBBMzYwMjMwMDBDMjk0MDVGCi06MTA1MzIwMDAwRTAwMDFDRjAwQjJEODIxMEEwMDA0N0MzQzA0NDAwMEVBCi06MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDNBRDhDCi06MTA1MzQwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDc1Ci06MTA1MzUwMDAzQzFCMDgwMDI3N0IzQTQ4MEUwMDAxQ0YwMDAwMDAwMEVDCi06MTA1MzYwMDAwQTAwMDQ3QzNDMDQ0MDAwM0MxQjA4MDAyNzdCM0E2ODkwCi06MTA1MzcwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDQ1Ci06MTA1MzgwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAzQzA0MDgwMDZECi06MTA1MzkwMDAyNDg0M0FBQzI0MDUwMDFBMEEwMDAwNkQwMDAwMzAyMTc0Ci06MTA1M0EwMDAyN0JERkZFMEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNEMzCi06MTA1M0IwMDBBRkIwMDAxMDNDMTA4MDAwOTIwQjAxMDkyNDEyRkY4MDU2Ci06MTA1M0MwMDAwRTAwMDRCMzMxNjQwMDdGOEY5MTAwM0MwMDUxNTAyMUU2Ci06MTA1M0QwMDAwMTUyNDAyNEFFMDgwMDI0OTIwMzAxMDkwRTAwMDRCM0Q4Ci06MTA1M0UwMDAzMDY0MDA3RjI0MDYwMDgwMjQwNzAwQzAyNDA0MDA0MEFECi06MTA1M0YwMDBBRTAwMDgxMEFFMDQwODE0QUUwNjA4MThBRTA3MDgxQzZDCi06MTA1NDAwMDA5MjBDMDEwOTAwNTFGODIxMzNGODAwN0YzQzE5ODAwQTAxCi06MTA1NDEwMDAwMzE5MTAyMTMxODQwMDdGMEUwMDA0QjNBRjgyMDA0NEQxCi06MTA1NDIwMDA4RTExMDEwMDNDMEMwMDgwMzU4NTAwMDEwMjIyNzgyMTlDCi06MTA1NDMwMDAwMUYyNDgyNEFFMDkwODA0OEUwRTAxMDAzNTk4MDAwMkRFCi06MTA1NDQwMDAzNjA5MDkwMDAxQzI2ODIxMzFBQjAwNzgwMTY1NTAyNTk5Ci06MTA1NDUwMDBBRTBBMDgyMDhFMDUwMTAwOEUwODAxMDAzNjA1MDk4MDdECi06MTA1NDYwMDAwMTAyMTgyMTI0NjQwMDQwMDA5MjMwMjRBRTA2MDgwODhFCi06MTA1NDcwMDA4RTA3MDEwMDAwRTJGODIxMjdGOTAwNDAzMzMyMDA3ODVFCi06MTA1NDgwMDAwMjU4ODgyNUFFMTEwODI0OEUwNDAxMDA5NTJGMDAwQ0M3Ci06MTA1NDkwMDA4RkJGMDAxQzhGQjIwMDE4MzFFRUZGRkYwMDBFNjlDMEY1Ci06MTA1NEEwMDBBRTBEMDgwMEFFMEMwODI4OTUyQjAwMEM4RkIxMDAxNDJGCi06MTA1NEIwMDAzMTZBRkZGRjAwMEE0MUMwQUUwODAwMkM4Q0EzMDA1MEU3Ci06MTA1NEMwMDA4RkIwMDAxMDhDQTIwMDNDOEQyNDAwMDQ4Q0E2MDAxQzIwCi06MTA1NEQwMDA4Q0E3MDAzODI3QkQwMDIwQUY4MzAwNjBBRjgyMDA1MDRBCi06MTA1NEUwMDBBRjg0MDA0Q0FGODYwMDU4MDNFMDAwMDhBRjg3MDA1QzMzCi06MTA1NEYwMDAzQzBBMDgwMDkxNEEzQUQxM0MwOTA4MDA5NTI5M0FDQTY5Ci06MTA1NTAwMDAzQzA1MTEwMDAwMEEzQzAwMjUyODAwMDIwMEU4MzAyNTc3Ci06MTA1NTEwMDAwMEM1MTgyNTI0ODIwMDA4QUM4MzAwMDAwM0UwMDAwOEMxCi06MTA1NTIwMDBBQzgwMDAwNDNDMDk4MDAwMzUyODA5MDA5MTA3MDAxMTc3Ci06MTA1NTMwMDAyNDAyMDAyODAwODA1MDIxMzBFMzAwRkYwMEEwNjgyMUYxCi06MTA1NTQwMDAwMEMwNjAyMTEwNjIwMDAyMzQwQjg2REQyNDBCMDgwMENECi06MTA1NTUwMDAzQzA3ODAwMDM0RTIwQTlBOTQ0MzAwMDAzNEY4MEE5QzI1Ci06MTA1NTYwMDAzNEU2MEFBMDMwNzlGRkZGQUQ1OTAwMDA4RjBGMDAwMDJDCi06MTA1NTcwMDAzNEU4MEE4MDI0MDQwMDAxQUQ0RjAwMDQ4Q0NFMDAwMDAyCi06MTA1NTgwMDBBRDRFMDAwODkxMDUwMDE5MzBBMzAwMDMxMDY0MDA0NkQ5Ci06MTA1NTkwMDAyODY5MDAwMjE1MjAwMEI1MjQwNDAwMDIxMDY0MDA5MDYwCi06MTA1NUEwMDAyNDA1MDAwMzEwNjUwMDlCMzRFNDBBQTQzQzA5MDgwMEFDCi06MTA1NUIwMDA5NTI5M0FDMDI0MDcwODAwNTE2NzAwNTAzQzE4ODAwMDI0Ci06MTA1NUMwMDAzQzAyODAwMDM0NTkwOTAwOTMyODAwMTI5MzJFMDAxOUUwCi06MTA1NUQwMDAzNDU4MDk4MDMxMEYwMEZGOEYwNjAwMjgwMUVDMTgyMTk0Ci06MTA1NUUwMDAwMDAzMzg4MDMxMjRGRkZGMzFDQjAwRkYwMEU0MTAyMTlECi06MTA1NUYwMDAwMDBCMkQwMDAwQTZDMDI1MDAwMjdDMDAzQzA4NjAwMEM2Ci06MTA1NjAwMDAwMzA4MTgyNTM1RTkwNkZGQUQ0MzAwMDBBRDQ5MDAwNDQ1Ci06MTA1NjEwMDA4RjJFMDAyQzNDMDM4MDAwMzQ3ODA5M0NBRDRFMDAwOEVFCi06MTA1NjIwMDA4RjI3MDAzMDI1NDkwMDI4MzQ2RTA5MDBBRDQ3MDAwQzUzCi06MTA1NjMwMDA4RjJCMDAzNEFENEIwMDEwOEYyNDAwMzhBRDQ0MDAxNDg0Ci06MTA1NjQwMDA4RjI1MDAxQ0FENDUwMDE4OEYyMjAwMjBBRDQyMDAxQ0E0Ci06MTA1NjUwMDA4RjI2MDAyNDI1MjIwMDE0QUQ0NjAwMjA4RjI4MDAyODI0Ci06MTA1NjYwMDBBRDQ4MDAyNDhGMEYwMDAwQUQyRDAwMDRBRDJGMDAwMEM5Ci06MTA1NjcwMDA4QzY0MDEwQ0FEMjQwMDA4OTFDNzAwMTIzQzA1MDgwMEExCi06MTA1NjgwMDA5MEE1M0FEMEFEMjAwMDEwMzBFQjAwRkYwMTZDMzAyMTI2Ci06MTA1NjkwMDAwMDA2NkYwMDAwMDVDQzAwMDFCOTYwMjUzNThBRkZGRkM4Ci06MTA1NkEwMDAwM0UwMDAwOEFEMkEwMDBDM0MwOTA4MDA5NTI5M0FDMDI3Ci06MTA1NkIwMDAzQzE5MDgwMDk3MzkzQUNBMzRFMjBBQTQzQzA2MDgwMEFCCi06MTA1NkMwMDA5NEM2M0FCQzk0NEYwMDAwMzEyM0ZGRkYwMzIzQzAyMTRFCi06MTA1NkQwMDAwMzA2NzAyMzAwMEYzQzAwMjVDOEZGRjIwMEU4MjgyNUQwCi06MTA1NkUwMDAyNDA3MDgwMEFENDUwMDBDQUQ0MDAwMTBBRDRCMDAxNDgwCi06MTA1NkYwMDAxNTY3RkZCMzI1NEEwMDE4M0MxODgwMDAzNzA4MDkwMEQ5Ci06MTA1NzAwMDA5MTBGMDAxMTkxMDcwMDE5MzcwMzBBODAzMUVFMDBGRjU1Ci06MTA1NzEwMDAzQzE5MDgwMDk3MzkzQUM2OTQ2RjAwMkEwMDBFNTg4MjQ3Ci06MTA1NzIwMDAzMEU0MDBGRjk3ODcwMDU0MDAwQjE2MDAwMDA0MkMwMEEzCi06MTA1NzMwMDAzMTI2RkZGRjAzMjZDMDIxMDA0NTQ4MjUwMTM4NzAyNThBCi06MTA1NzQwMDAwMUU3NTgyMTNDMDM0MDAwMDFDMzIwMjUwMDBCMkMwMDM5Ci06MTA1NzUwMDBBRDQ0MDAwMEFENDUwMDA0OTEwMjAwMTgzQzA2MDAwNjZGCi06MTA1NzYwMDAzQzAzODAwMDAwMDJDRTAwMDMyNkMwMjVBRDU4MDAwODhGCi06MTA1NzcwMDA4RDBGMDAyQzM0NzgwOTNDMjRFOTAwMDFBRDRGMDAwQzVBCi06MTA1NzgwMDA4RDBCMDAxQzMxMkU3RkZGMjU0OTAwMTRBRDRCMDAxMEZFCi06MTA1NzkwMDA4RjBGMDAwMEFEMkQwMDA0QTc4RTAwNTRBRDJGMDAwMDI4Ci06MTA1N0EwMDA4QzY0MDEwQzM0NkUwOTAwMjUyMjAwMTRBRDI0MDAwODFECi06MTA1N0IwMDA5MUM3MDAxMjNDMDUwODAwOTBBNTNBRDBBRDIwMDAxMDFBCi06MTA1N0MwMDAzMEVCMDBGRjAxNkMzMDIxMDAwNjZGMDAwMDA1Q0MwMEJCCi06MTA1N0QwMDAwMUI5NjAyNTM1OEFGRkZGMDNFMDAwMDhBRDJBMDAwQ0ZGCi06MTA1N0UwMDAzNEU5MEFBNDk1MjQwMDAwOTUwMjAwMjgzQzA5MDgwMDI5Ci06MTA1N0YwMDA5NTI5M0FDMDAwMDQxQzAwMDAwMkNDMDAzNDc4ODEwMEQ2Ci06MTA1ODAwMDAwMzJCNzgyNUFENTgwMDBDQUQ0RjAwMTAwQTAwMDU0MDYxCi06MTA1ODEwMDAyNTRBMDAxNDNDMDkwODAwOTUyOTNBQzAzQzA1MDgwMEI3Ci06MTA1ODIwMDA5NEE1M0FDQTNDMDYwODAwOTRDNjNBQkM5NDk5MDAwMDc0Ci06MTA1ODMwMDAzMTIzRkZGRjk1MTgwMDI4MDBBMzEwMjEwMDQ2NzgyMzhDCi06MTA1ODQwMDAwMDE5M0MwMDAwMTg0NDAwMjVFRUZGRUUwMTBFMjgyNTRCCi06MTA1ODUwMDAzNEU0ODEwMEFENDQwMDBDQUQ0NTAwMTBBRDQwMDAxNEFGCi06MTA1ODYwMDBBRDRCMDAxODBBMDAwNTQwMjU0QTAwMUMxNDYwRkY0RjhDCi06MTA1ODcwMDAzNEU2MEFBNDk0Q0UwMDAwM0MwOTA4MDA5NTI5M0FDMEY5Ci06MTA1ODgwMDAwMDBFNDQwMDAxMEIzODI1QUQ0NzAwMEMwQTAwMDU0MDBFCi06MTA1ODkwMDAyNTRBMDAxMDAzRTAwMDA4MjQwMjA3RDAyN0JERkZFMERFCi06MTA1OEEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzEyCi06MTA1OEIwMDAwRTAwMDA0RDAwODA4ODIxOEY4ODAwNTA4Rjg3MDA0QzlCCi06MTA1OEMwMDAzQzA1ODAwODM0QjIwMDgwMDExMTI4MjEzQzEwODAwMDgyCi06MTA1OEQwMDAyNDAyMDA4MDI0MDMwMEMwMDBBNzIwMjNBRTAyMDgxODgxCi06MTA1OEUwMDAzQzA2ODAwOEFFMDMwODFDMTg4MDAwMDRBRjg1MDA1MEY5Ci06MTA1OEYwMDBBQ0M1MDAwNDhDQzkwMDA0QUY4OTAwNEMxMjIwMDAwOTFCCi06MTA1OTAwMDAzNjA0MDk4MDBFMDAwNUY4MDAwMDAwMDA5MjRDMDAyN0M0Ci06MTA1OTEwMDA4RTBCMDA3NDAxODI1MDA0MDE0QjMwMjFBRTQ2MDAwQzA2Ci06MTA1OTIwMDAzNjA0MDk4MDhDOEUwMDFDOEY4RjAwNTgwMUNGNjgyM0FECi06MTA1OTMwMDAxOUEwMDAwNDhGQkYwMDFDOEM5MDAwMUNBRjkwMDA1ODcxCi06MTA1OTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEYxCi06MTA1OTUwMDAwQTAwMDA0RjI3QkQwMDIwOEY4NjAwNjA4RjgzMDA1MDEzCi06MTA1OTYwMDA4RjgyMDA0QzNDMDU4MDA4MzRBNDAwODBBQzg2MDA1MDM3Ci06MTA1OTcwMDBBQzgzMDAzQzAzRTAwMDA4QUNBMjAwMDQzQzAzMDgwMDM4Ci06MTA1OTgwMDA4QzYzMDA1NDI3QkRGRkY4MzA4NDAwRkYyNDYyMDAwMUJGCi06MTA1OTkwMDAzMEE1MDBGRjNDMDEwODAwQUMyMjAwNTQzMEM2MDBGRkQ3Ci06MTA1OUEwMDAzQzA3ODAwMDhDRTgwMTc4MDUwMEZGRkUzQzBBN0ZGRjgxCi06MTA1OUIwMDBBM0E0MDAwMzhGQTQwMDAwMzU0OUZGRkYwMDg5MTgyNDI5Ci06MTA1OUMwMDAwMDA2NDdDMDAwNjgxMDI1QUZBMjAwMDA5MEY5MDEwQTQ4Ci06MTA1OUQwMDBBM0EwMDAwMjNDMTg4MEZGQTNCOTAwMDE4RkFFMDAwMDE1Ci06MTA1OUUwMDAzMEFEMDA3RjM3MEZGRkZGMDFDRjU4MjQwMDBENjYwMDU4Ci06MTA1OUYwMDAzQzA5MDAyMDAxNkM1MDI1MzUyNjIwMDAyNDA1RkY4MDNECi06MTA1QTAwMDAzQzA0MTAwMDI3QkQwMDA4QUNFQTAxNENBQ0U2MDE1NDkwCi06MTA1QTEwMDBBNEUwMDE1OEEwRTUwMTUyMDNFMDAwMDhBQ0U0MDE3OERECi06MTA1QTIwMDAzMDg4MDBGRjNDMDM4MDAwMzBBNDAwRkY4QzYyMDE3OEM2Ci06MTA1QTMwMDAwNDQwRkZGRTAwMDAwMDAwM0MwMzgwMDAzNDY2MEEwMEMyCi06MTA1QTQwMDA4Q0NBMDAyMDM0NjcwOTgwMDAwNDQ4MkJBQzZBMDE0NEVBCi06MTA1QTUwMDA4Q0M1MDAyNDAwMDkxNTQwQUM2NTAxNDhBMDY4MDE1MEMwCi06MTA1QTYwMDA5MEU0MDA0Q0EwNjQwMTZEMDNFMDAwMDhBNDYwMDE1OEJDCi06MTA1QTcwMDAyN0JERkZFODMwODQwMEZGQUZCRjAwMTAwRTAwMDY1QkJCCi06MTA1QTgwMDAzMEE1MDBGRjhGODMwMDUwOEZCRjAwMTAzQzA1ODAwMEMxCi06MTA1QTkwMDAzNDQ2MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxODRCCi06MTA1QUEwMDBBQ0EzMDE0Q0EwQTQwMTUyQUNBNjAxNTQwM0UwMDAwODMxCi06MTA1QUIwMDBBQ0EyMDE3ODI3QkRGRkUwM0MwODgwMDhBRkJGMDAxQzA2Ci06MTA1QUMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAzNTEwMDA4MEI1Ci06MTA1QUQwMDA4RTA2MDAxODNDMDc4MDAwMzA5MjAwRkYwMEM3MjAyNThBCi06MTA1QUUwMDBBRTA0MDAxODBFMDAwMDREMzBCMTAwRkY5MjAzMDAwNTE3Ci06MTA1QUYwMDAzNDYyMDAwODBFMDAwMDRGQTIwMjAwMDUwMjQwMjAyMTdGCi06MTA1QjAwMDAwRTAwMDY2RjAyMjAyODIxMDI0MDIwMjE4RkJGMDAxQ0JBCi06MTA1QjEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNTVCCi06MTA1QjIwMDAyNDA2MDAwMTBBMDAwNjMyMjdCRDAwMjAzQzA1ODAwMDQzCi06MTA1QjMwMDAzNEEzMDk4MDkwNjYwMDA4MzBDMjAwMDgxMDQwMDAwRkFFCi06MTA1QjQwMDAzQzBBMDEwMTM1NDkwODBBQUM4OTAwMDA4Q0E4MDA3NEEwCi06MTA1QjUwMDBBQzg4MDAwNDNDMDcwODAwOTBFNzNBRDAzMEU1MDAxMDFDCi06MTA1QjYwMDA1MEEwMDAwOEFDODAwMDA4M0MwRDgwMDgzNUFDMDA4MEQ3Ci06MTA1QjcwMDA4RDhCMDA1OEFDOEIwMDA4MjQ4NDAwMEMwM0UwMDAwOEQ3Ci06MTA1QjgwMDAwMDgwMTAyMTBBMDAwNkIyMjQ4NDAwMEMyN0JERkZFODIzCi06MTA1QjkwMDAzQzA4ODAwMEFGQjAwMDEwQUZCRjAwMTQzNTA2MDk4MDhDCi06MTA1QkEwMDA5MEM3MDAwOTI0MDIwMDA2MzUwOTA5MDAzMEUzMDBGRjEwCi06MTA1QkIwMDAwMDgwODAyMTAwQTA2MDIxMjQwQjAwMDQxMDYyMDA3OTg1Ci06MTA1QkMwMDAyNDA3MDAwMjk0Q0YwMDVDM0MwRTAyMDQzMUVERkZGRjdECi06MTA1QkQwMDAwMUFFNTAyNUFFMEEwMDAwOTBDNTAwMDgzMEE0MDAyMDk4Ci06MTA1QkUwMDAxMDgwMDAwODAwMDAwMDAwOTBDMjAwNEUzQzFGMDEwMzFFCi06MTA1QkYwMDAzN0Y5MDMwMDMwNTgwMEZGMDMxOTMwMjUyNDBCMDAwODQzCi06MTA1QzAwMDBBRTA2MDAwNDkxMzkwMDExOTEyNjAwMTI5MTI0MDAxMTcyCi06MTA1QzEwMDAzMzM4MDBGRjAwMTg3MDgyMzBDRjAwRkYwMUNGNTAyMUQxCi06MTA1QzIwMDAwMTRDNjgyMTMwODgwMEZGMzFBQUZGRkYzOTAzMDAyOEFBCi06MTA1QzMwMDAwMDBBMjg4MDE0NjAwMDJCMDIwNTQwMjM5MTI0MDAxMkUyCi06MTA1QzQwMDAzQzBFODAwMDM1RDkwOTgwMzA4NTAwRkYwMEFDMTgyMTVBCi06MTA1QzUwMDAwMDAzMTA4MDAwNEJGODIxMDAxRjg0MDAzNjA5MDZGRjY2Ci06MTA1QzYwMDBBRDA5MDAwNDM1QzkwOTAwOTEyNjAwMTE5MTJGMDAxMkQ5Ci06MTA1QzcwMDAwMDBCQzA4MjhGMkIwMDM0MzFFRDAwRkY4REM0MDEwQzZFCi06MTA1QzgwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDJBCi06MTA1QzkwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQzcxCi06MTA1Q0EwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDUzCi06MTA1Q0IwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEFCCi06MTA1Q0MwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOThFCi06MTA1Q0QwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEY1Ci06MTA1Q0UwMDAyN0JEMDAxODkxMjUwMDExOTEyMzAwMTkzQzE4MDgwMEM4Ci06MTA1Q0YwMDA5NzE4M0FDNjMwQTIwMEZGMDAwMkY4ODIzMDcwMDBGRjA5Ci06MTA1RDAwMDAwMDFGQ0UwMDAwMTA0QzAwMDMyOTMwMjUwMEQ4NzAyNTVDCi06MTA1RDEwMDAzQzBGNDAwMDAxQ0Y2ODI1M0MwRTgwMDBBRDBEMDAwMDE3Ci06MTA1RDIwMDAzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTIzNUQ5MDk4MDNCCi06MTA1RDMwMDAwMDBCQzA4MjMxRUQwMEZGOEYyQjAwMzQ4REM0MDEwQ0FECi06MTA1RDQwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDY5Ci06MTA1RDUwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQ0IwCi06MTA1RDYwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDkyCi06MTA1RDcwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEVBCi06MTA1RDgwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOUNECi06MTA1RDkwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODM0Ci06MTA1REEwMDAyN0JEMDAxODBBMDAwNkM0MjQwNzAwMTIyN0JERkZEMDMzCi06MTA1REIwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIwMDAxMEVCCi06MTA1REMwMDBBRkJGMDAyOEFGQjIwMDE4QUZCMTAwMTQzQzA2ODAwMDhFCi06MTA1REQwMDA5MEMzMDEwQjMwOTMwMEZGMzBCNDAwRkYzMDYyMDAzMEZECi06MTA1REUwMDAwMDAwQTgyMTEwNDAwMDgyMDAwMDgwMjEzNEM0MDk4MEY2Ci06MTA1REYwMDA5MDg4MDAwODAwMDgzRTAwMDAwNzJFMDMwNEEwMDBBOUI4Ci06MTA1RTAwMDAyNDA0MDAwNDhGODcwMDUwM0MwMTA4MDBBMDI0M0FEMEVECi06MTA1RTEwMDAzQzBDODAwMEFEODAwMDQ4M0MwMzgwMDA5MDZFMDEwQjdDCi06MTA1RTIwMDAzMUM1MDAyMDEwQTAwMDA3M0MwQzgwMDAzNDc4MDk4MEE4Ci06MTA1RTMwMDA5MzEyMDAwODAwMTI4RTAwMDAxMTdFMDMwNUUwMDBBRUYwCi06MTA1RTQwMDAzQzAyODAwODkxOEIwMTBCMzU4NjA5ODA5MEM0MDAwOEM0Ci06MTA1RTUwMDAzMTZBMDA0MDAwMEE0ODJCMzA4ODAwMDgyNDExMDAwM0YyCi06MTA1RTYwMDAxNTAwMDAwMjAwRTk5MDIzMDAwMDg4MjEzQzAzODAwMDE3Ci06MTA1RTcwMDAzNDc4MEE4MDM0NkEwOTAwOTcwNzAwMkM5MTQ0MDAxMTk1Ci06MTA1RTgwMDA5MTQ5MDAxMjkzMDUwMDE4MzA5RjAwRkYzMTI4MDBGRjUwCi06MTA1RTkwMDAwMjI4MTAyMTAwMDJDODgwOTMwRDAwMTgwMzNGNzgyMUNBCi06MTA1RUEwMDAwMUYwNzAyMTMwQjAwMEZGMDFEMDE4MjFBNzg3MDA1NDA1Ci06MTA1RUIwMDAzQzAxMDgwMEE0MkUzQUM2M0MwMTA4MDBBNDIzM0FDOEJECi06MTA1RUMwMDAxNUEwMDAwMzI0NkIwMDBBMDAwMDAwMEQyNDZCMDAwQURCCi06MTA1RUQwMDAzMTcwRkZGRjNDMDEwODAwQTQyMzNBQ0EzQzAxMDgwMENFCi06MTA1RUUwMDBBNDIwM0FDMDNDMDEwODAwQTQyMDNBQkMwRTAwMDFCNDMyCi06MTA1RUYwMDAwMjAwMjAyMTBFMDAwNTBGMDA0MDIwMjEwMDQwMjAyMTNCCi06MTA1RjAwMDAwMjQwMjgyMTBFMDAwNTFDMDIyMDMwMjEwRTAwMDY5RUIyCi06MTA1RjEwMDAwMDQwMjAyMTE2QTAwMDVGMDA0MDIwMjEwRTAwMDFDODkzCi06MTA1RjIwMDAwMjAwMjAyMTNDMTEwODAwOTIzMTNBRDAzMjM1MDAwM0EyCi06MTA1RjMwMDAxMkEwMDAxNjNDMEE4MDA4OEY4NzAwNTAzQzBFODAwODkzCi06MTA1RjQwMDAzNUNEMDA4MDI0RUMwMDAxQURBQzAwM0MzQzA1ODAwODYwCi06MTA1RjUwMDA4Q0E2MDAwNDAxODAyMDIxMDBDQzkwMjMxQTQwMDAwMjZFCi06MTA1RjYwMDBBRjhDMDA1MDhDQTQwMDA0MEUwMDA1RjhBQ0E0MDAwNDEzCi06MTA1RjcwMDAzQzE5ODAwMDhGMzgwMDc0M0MwRjgwMDgzNUYwMDA4MDk5Ci06MTA1RjgwMDAwMDU4MjgyMUFFMDUwMDBDM0MwQTgwMDgzNTQyMDA4MEVDCi06MTA1RjkwMDAwMjYwMjAyMTAyODAyODIxQTA0MDAwNkIwRTAwMDY1QkQ5Ci06MTA1RkEwMDAzQzEzODAwMDhGODQwMDUwMzQ1RjAwMDZBRTY0MDE0Q0M3Ci06MTA1RkIwMDA4Rjg4MDA0ODNDMTQxMDAwOEZCNTAwMjQyNTA5MDAwMThCCi06MTA1RkMwMDBBRjg5MDA0ODhGQjIwMDE4QTI2ODAxNTI4RkIxMDAxNDQ3Ci06MTA1RkQwMDBBRTdGMDE1NDhGQjAwMDEwQUU3NDAxNzg4RkJGMDAyOERGCi06MTA1RkUwMDA4RkI0MDAyMDhGQjMwMDFDMDNFMDAwMDgyN0JEMDAzMEYxCi06MTA1RkYwMDAzNEMzMDk4MDkwNkYwMDA4MDAwRjc2MDAwMDBFNkUwMzE2Ci06MTA2MDAwMDAwNUEwMDAzMzM0QzIwOTAwOTA1OTAwMUIyNDFGMDAxMDYyCi06MTA2MDEwMDAzQzAxMDgwMEEwM0YzQUQwMzMzODAwMDIxMzAwRkY3RTU1Ci06MTA2MDIwMDA4Rjg3MDA1MDhGODMwMDVDMTQ2N0ZGN0MzQzAzODAwMEU3Ci06MTA2MDMwMDAwRTAwMDA0RDAwMDAwMDAwM0MwOTgwMDgzNTI1MDA4MDVFCi06MTA2MDQwMDA5MEE0MDAwOTI0MDcwMDE2MzA4ODAwRkYxMTA3MDAwREY2Ci06MTA2MDUwMDAwMDAwMDAwMDkwQTYwMDA5M0MwQzA4MDA5MThDM0FEMDhBCi06MTA2MDYwMDAyNDBBMDAwODMwQzQwMEZGMzU4QjAwMDEzQzAxMDgwMDAxCi06MTA2MDcwMDBBMDJCM0FEMDEwOEEwMDJGMjQwRDAwMEExMDhEMDAyODgyCi06MTA2MDgwMDAyNDAyMDAwQzBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTE3Ci06MTA2MDkwMDA4Rjg3MDA1MDBFMDAwNkI2MDIyMDI4MjEwQTAwMDc5QUJBCi06MTA2MEEwMDAwMDAwMDAwMDNDMEI4MDA4MzU2QTAwODA4RDQ3MDA1NERBCi06MTA2MEIwMDA4Q0M5MDEwQzExMjBGRjU0QUY4NzAwNTAyNDA2MDAxNDM2Ci06MTA2MEMwMDAzQzAxMDgwMEEwMjYzQUQwMEEwMDA3NTgzQzBDODAwMDhBCi06MTA2MEQwMDA5MDcxMDAwODI0MTIwMDAyM0MwMTA4MDBBMDMyM0FEMDVFCi06MTA2MEUwMDAzMjMwMDAyMDEyMDAwMDBCMjQxNTAwMDE4Rjg3MDA1MDcxCi06MTA2MEYwMDAwQTAwMDc1OTI0MTAwMDA4MzQ1OTAwODA4RjIzMDAzODAzCi06MTA2MTAwMDBBQzQzMDAwNDhDNUYwMDA0QUYzRjAwM0MwQTAwMDc2NDBFCi06MTA2MTEwMDAzQzBDODAwMDhGODcwMDUwMEEwMDA3NTkyNDEwMDAwNEFGCi06MTA2MTIwMDBBMEEyMDAwOTBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTVECi06MTA2MTMwMDA4Rjg3MDA1MDI0MDIwMDE0MEEwMDA4MUNBMEEyMDAwOTQ2Ci06MTA2MTQwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAzQzEwODAwMEM3Ci06MTA2MTUwMDA5MjAyMDEwOTI0MDUwMDAxMEUwMDA2NUIzMDQ0MDBGRjk1Ci06MTA2MTYwMDAzQzFGODAwODkzRjgwMDBFMzdFMzAwODA5M0Y5MDAwRjdFCi06MTA2MTcwMDA5MDZFMDAyNjkzRTkwMDBBMzMyRjAwRkYwMDE4NjYwMDk2Ci06MTA2MTgwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDUwMjUwMDBCMzIwMDU5Ci06MTA2MTkwMDAwMTQ2MzgyNTMxMjgwMEZGMzQ0NTYwMDAwMEU4MjAyNUZECi06MTA2MUEwMDAyNDAyRkY4MTNDMDMxMDAwQUUwNDAxNEM4RkJGMDAxNDk5Ci06MTA2MUIwMDBBRTA1MDE1NEEyMDIwMTUyQUUwMzAxNzg4RkIwMDAxMDY3Ci06MTA2MUMwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMDg0MDBGRjZBCi06MTA2MUQwMDBBRkJGMDAxMDBFMDAwNjVCMzBBNTAwRkYzNDQ2MDA0MDQ0Ci06MTA2MUUwMDAzQzA0ODAwMDI0MDVGRjkyQUM4NjAxNTRBMDg1MDE1MjM2Ci06MTA2MUYwMDA4RjgzMDA1MDhGQkYwMDEwM0MwMjEwMDAyN0JEMDAxODk1Ci06MTA2MjAwMDBBQzgzMDE0QzAzRTAwMDA4QUM4MjAxNzgyN0JERkZEOEM1Ci06MTA2MjEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDk0Ci06MTA2MjIwMDBBRkIzMDAxQzNDMDc4MDAwOTBFMjAxMDkzMDg2MDBGRkZDCi06MTA2MjMwMDAzMEIwMDBGRjAwMDYxOEMyMzIwNDAwMDIzMDcxMDAwMUM1Ci06MTA2MjQwMDAxNDgwMDAwNzMwNTIwMEZGM0MwOTgwMDgzNTMzMDA4MDdECi06MTA2MjUwMDA5MjY4MDAwNTMxMDUwMDA4MTBBMDAwMEMzMENBMDAxMDNCCi06MTA2MjYwMDAwMjQwMjAyMTBFMDAwNjgwMDIyMDI4MjEyNDAyMDAwMTg1Ci06MTA2MjcwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEE1Ci06MTA2MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNTQwMDAzMDQzCi06MTA2MjkwMDAzNEU1MEEwMDhDQjkwMDI0OENCODAwMDgxMzM4MDA0Nzk0Ci06MTA2MkEwMDAwMDAwNDAyMTNDMEU4MDA4MzVEMzAwODA5MjZEMDA2OENDCi06MTA2MkIwMDAyNDBCMDAwMjMxQUMwMEZGMTE4QjAwODAzQzA2ODAwMEYzCi06MTA2MkMwMDA5MjdGMDA0QzkwQzQwMTA5NTA5RjAwMDQzMjEzMDA3QzVGCi06MTA2MkQwMDAxMTAwMDA2NzAwMDAwMDAwMzIxMzAwN0MxNjYwMDA1QUI1Ci06MTA2MkUwMDAwMjQwMjAyMTE2MjAwMDA4MzIwQzAwMDEzQzA3ODAwMEVCCi06MTA2MkYwMDAzNEVCMEEwMDhENjUwMDI0OENFODAxMDQxNEE4RkZEQzRGCi06MTA2MzAwMDAwMDAwMTAyMTMyMEMwMDAxMTE4MDAwMEQwMjQwMjAyMUZDCi06MTA2MzEwMDAzQzEwODAwMDhFMEUwMTBDOEY4RDAwNjAxMUNEMDAwOEE2Ci06MTA2MzIwMDAwMDAwMDAwMDBFMDAwNzNFMDIyMDI4MjE4RTBGMDEwQzA1Ci06MTA2MzMwMDAzQzE4ODAwODM3MTAwMDgwQUUwRjAwNTAwMjQwMjAyMTJBCi06MTA2MzQwMDAwRTAwMDY2RjAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMUI3Ci06MTA2MzUwMDAzQzA3MDgwMDhDRTcwMDY0MjRFNjAwMDEzQzAxMDgwMENCCi06MTA2MzYwMDBBQzI2MDA2NDE2MDAwMDBEMDAwMDAwMDAwMjIwMjgyMTY5Ci06MTA2MzcwMDAwRTAwMDY2RjAyNDAyMDIxOTI2RjAwNjgyNDBEMDAwMjdCCi06MTA2MzgwMDAzMUVFMDBGRjExQ0QwMDIyMDI0MDIwMjEwRTAwMDgyMzMzCi06MTA2MzkwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEwRTAwMDA0MTA2Ci06MTA2M0EwMDAyNDA0MDAwMTkyNkMwMDI1MDIwQzU4MjUwRTAwMDA0RkI5Ci06MTA2M0IwMDBBMjZCMDAyNTBBMDAwOEFGMDIyMDI4MjE4RTYzMDAxODc2Ci06MTA2M0MwMDA4Q0U0MDEwNDhDQkYwMDI0MDAwMzE2MDIxNDlGRkZCNTY3Ci06MTA2M0QwMDAzMDQ1MDA3RjkyNjkwMDRDMjY0NDAwMDEzMDkzMDA3RkQ1Ci06MTA2M0UwMDAxMjY1MDA0MDMxMjMwMEZGMTQ2NEZGQUYzQzBFODAwOEFCCi06MTA2M0YwMDAyNjQ4MDAwMTMxMTEwMDdGMzEwMjAwRkYxMjI1MDAwQkY5Ci06MTA2NDAwMDAyNDA4MDAwMTAwNDA5MDIxMEEwMDA4N0MyNDExMDAwMUFBCi06MTA2NDEwMDAyNDA1MDAwNDBFMDAwNjMyMjQwNjAwMDEwRTAwMDgyM0E1Ci06MTA2NDIwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEyNDA3RkY4MDFBCi06MTA2NDMwMDAwMjQ3MjgyNDAwQTc5MDI2MzI0MjAwRkYwMDQwOTAyMTA2Ci06MTA2NDQwMDAwQTAwMDg3QzI0MTEwMDAxMEUwMDA3M0UwMjIwMjgyMUNBCi06MTA2NDUwMDAzMjA2MDAzMDEwQzBGRkEzMzIxMDAwODIwMjQwMjAyMTFCCi06MTA2NDYwMDAwRTAwMDY4MDAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMTg1Ci06MTA2NDcwMDA4RTYzMDAxODAyNDAyMDIxMDIyMDI4MjEwMDY2MTAyNThBCi06MTA2NDgwMDAwRTAwMDg0NUFFNjIwMDE4OTI2NDAwNEMyNDA1MDAwMzFCCi06MTA2NDkwMDAyNDA2MDAwMTBFMDAwNjMyMzA4NDAwRkYwRTAwMDA0MTg5Ci06MTA2NEEwMDAyNDA0MDAwMTkyNkEwMDI1MDIwQTQ4MjUwRTAwMDA0RkNDCi06MTA2NEIwMDBBMjY5MDAyNTBBMDAwODZGMjQwMjAwMDE4RTc4MDAxOEU2Ci06MTA2NEMwMDAzQzE5ODAwMDAyNDAyMDIxMDMxOTc4MjUwMjIwMjgyMTUwCi06MTA2NEQwMDAwRTAwMDY2RkFFNkYwMDE4OTI2NDAwNEMwQTAwMDhGN0I5Ci06MTA2NEUwMDAyNDA1MDAwNDMyNDYwMDgwMzhDQTAwODAxNDZBRkY2RTFBCi06MTA2NEYwMDAzQzBFODAwODBBMDAwOEQwMjY0ODAwMDEyN0JERkZDMEQ2Ci06MTA2NTAwMDBBRkIwMDAxODNDMTA4MDAwQUZCRjAwMzhBRkI3MDAzNDA4Ci06MTA2NTEwMDBBRkI2MDAzMEFGQjUwMDJDQUZCNDAwMjhBRkIzMDAyNDQ1Ci06MTA2NTIwMDBBRkIyMDAyMDBFMDAwNEJCQUZCMTAwMUM5MjA0MDEwODAyCi06MTA2NTMwMDA5MjA1MDEwQjMwODQwMEZGMEUwMDA4NTYzMEE1MDBGRkM1Ci06MTA2NTQwMDAxNDQwMDBFMzhGQkYwMDM4M0MwOTgwMDgzNTI4MDA4MEU0Ci06MTA2NTUwMDBBMTAwMDA2QjM2MDcwOTgwOTBFNjAwMDAyNDAyMDA1MDdECi06MTA2NTYwMDAzQzE3MDgwMDI2RjczQTg4MzBDMzAwRkYzQzEzMDgwMEE4Ci06MTA2NTcwMDAyNjczM0E5ODEwNjIwMDAzM0MxMDgwMDAwMDAwQjgyMTk2Ci06MTA2NTgwMDAwMDAwOTgyMTI0MUYwMDEwMzYxMTBBMDAzNjE0MDk4MERCCi06MTA2NTkwMDA4RTE2MDEwNDhGOEQwMDUwOEUzODAwMjQzNjE5MEE4MDIzCi06MTA2NUEwMDA4RTkyMDAyMDNDMDEwODAwQTAzRjNBRDA5NzJDMDAyQzhFCi06MTA2NUIwMDA4RUY1MDAwMDkzMkIwMDE4MDI0RDcwMjMwMkQ4NzgyMzJCCi06MTA2NUMwMDAzQzAxMDgwMEFDMkYzQUFDM0MwMTA4MDBBQzJFM0FCMEJDCi06MTA2NUQwMDAzQzAxMDgwMEFDMkQzQUQ0QTc4QzAwNTQwMkEwRjgwOTY1Ci06MTA2NUUwMDAzMTcyMDBGRjMwNEEwMDAyMTU0MDAwRTYzMDQ1MDAwMURDCi06MTA2NUYwMDAxMEEwMDBDMTAwMDAwMDAwOTI4QTAwMDgzMTUwMDAwODdECi06MTA2NjAwMDAxNjAwMDAwMjI0MTQwMDAzMDAwMEEwMjEzQzA2ODAwMEI0Ci06MTA2NjEwMDAzNEM0MDkwMDM0QzMwQTAwOEM2RTAwMjQ5MDg1MDAxMTM0Ci06MTA2NjIwMDA5MDgyMDAxMjkwOTkwMDExMzBCODAwRkYzMDUxMDBGRkE1Ci06MTA2NjMwMDAwMjkxRjgyMTAwMUZCMDgwMzMyRjAwRkYwMkQ4NTgyMUFCCi06MTA2NjQwMDAwMjRGQTgyMTI2QUMwMDEwMDE3MjY4MjEzQzE1ODAwMDgxCi06MTA2NjUwMDAzQzAxMDgwMEFDMkUzQUQ4M0MwMTA4MDBBNDJEM0FDOEYxCi06MTA2NjYwMDAzQzAxMDgwMEE0MkMzQUM0M0MwMTA4MDBBNDJCM0FDNjAzCi06MTA2NjcwMDAzNkI2MDk4MDhGODcwMDUwOEY4OTAwNTg4RUQyMDAyMDRGCi06MTA2NjgwMDAyNDA4MDAwNjAxMjczMDIzMDI0NzI4MjMzQzAxMDgwMDg0Ci06MTA2NjkwMDBBQzI4M0FDQzA0QzAwMEIzMDAwMDkwMjEwNEEwMDBCMUEzCi06MTA2NkEwMDAwMEM1ODAyQjEyMDAwMEIzMDAwMDAwMDAzQzAxMDgwMDcwCi06MTA2NkIwMDBBQzI2M0FCMDhFNzEwMDAwMDIyMEY4MDkwMDAwMDAwMEZDCi06MTA2NkMwMDAzMDRBMDAwMjE1NDAwMDc0MDA0MDgwMjEzMDRCMDAwMTI4Ci06MTA2NkQwMDA1NTYwMDAxMThFNzEwMDA0M0MwRDA4MDA4REFEM0FCNDc4Ci06MTA2NkUwMDAzQzBFQzAwMDNDMDQ4MDAwMDFBRTYwMjVBRUFDMEUwMDQ0Ci06MTA2NkYwMDA4Qzk4MDAwMDMzMEYwMDA4MTFFMEZGRkQwMDAwMDAwMDNGCi06MTA2NzAwMDA5NDlGMEUwODI0MTIwMDAxQTc5RjAwNDA4Qzk5MEUwNDRDCi06MTA2NzEwMDBBRjk5MDAzODhFNzEwMDA0MDIyMEY4MDkwMDAwMDAwMEQzCi06MTA2NzIwMDAwMjAyODAyNTMyMDIwMDAyMTQ0MDAwQTkwMDAwMDAwMDhECi06MTA2NzMwMDAzQzA4MDgwMDk1MDgzQUJDM0MxMTA4MDA5NjMxM0FDODVDCi06MTA2NzQwMDAzQzA5MDgwMDk1MjkzQUJFM0MwMzA4MDA4QzYzM0FCNDIyCi06MTA2NzUwMDAwMTExNjgyMTNDMUYwODAwOEZGRjNBRDgzQzA3MDgwMDUwCi06MTA2NzYwMDA5NEU3M0FEMjNDMTE4MDAwMDFBOTIwMjE4RTM4MDEwQzE3Ci06MTA2NzcwMDAwMDY4MjgyMTI0OTkwMDAyMDBBNzcwMjEwM0UzNzgyMUYyCi06MTA2NzgwMDBBRjk4MDA2MDNDMDEwODAwQUMyRjNBRDgzQzAxMDgwMEVCCi06MTA2NzkwMDBBNDJFM0FDMDNDMDEwODAwQTQyRDNBQ0EwRTAwMDFCNDUwCi06MTA2N0EwMDAzMzI0RkZGRjhGOEMwMDQ4MDA0MDIwMjEzQzAxMDgwMDZCCi06MTA2N0IwMDBBMDJDM0FEMThFNjIwMDA4MjU4QjAwMDFBRjhCMDA0OEQ3Ci06MTA2N0MwMDAwMDQwRjgwOTAwMDAwMDAwOEY4NTAwNTAwMjgwMzAyMTUxCi06MTA2N0QwMDAwRTAwMDUxQzAwNDAyMDIxMEUwMDA2OUUwMDQwMjAyMUQ2Ci06MTA2N0UwMDA4RTZBMDAwQzAxNDBGODA5MDA0MDIwMjEzQzA4MDgwMDk2Ci06MTA2N0YwMDA5NTA4M0FDQTNDMDkwODAwOTUyOTNBQkUwMTA5MzgyMTkyCi06MTA2ODAwMDAyNEU2MDAwMjBFMDAwMUM4MzBDNEZGRkYzQzA0MDgwMDZCCi06MTA2ODEwMDA4Qzg0M0FBQzNDMDMwODAwOEM2MzNBQjQwMDgzMjgyMzkwCi06MTA2ODIwMDAzQzAxMDgwMEFDMjUzQUFDMTRBMDAwMDYwMDAwMDAwMEIyCi06MTA2ODMwMDAzQzBBMDgwMDhENEEzQUNDMzU0NjAwNDAzQzAxMDgwMDJECi06MTA2ODQwMDBBQzI2M0FDQzEyNDAwMDQxOEY4QzAwNDQ4RTJCMEUxMEE3Ci06MTA2ODUwMDA4RjkyMDA0NEFFNEIwMDIwOEUyMjBFMThBRTQyMDAyNEQwCi06MTA2ODYwMDAzQzA0MDgwMDk0ODQzQUMwMEUwMDA1RkEwMDAwMDAwMEMxCi06MTA2ODcwMDA4Rjk5MDA1MDhFNzgwMDEwM0MwMTA4MDBBQzM5M0FENDUyCi06MTA2ODgwMDAwMzAwRjgwOTAwMDAwMDAwM0MwRjA4MDA4REVGM0FBQzRGCi06MTA2ODkwMDAxNUUwRkY3OThGODcwMDUwOTc5NDAwNTQzQzEzODAwRUM5Ci06MTA2OEEwMDAzMjE1MDAxMDBFMDAwNjI5QTY3NDAwMkM1NkEwMDA0NEQ0Ci06MTA2OEIwMDA4RUY2MDAwNDMyMUYwMDQwNTdFMDAwMUQ4RUYwMDAwOEU1Ci06MTA2OEMwMDA4RUUzMDAwQzAwNjBGODA5MDAwMDAwMDA4RkJGMDAzODY0Ci06MTA2OEQwMDA4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkM4RkI0MDAyOEVFCi06MTA2OEUwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODJFCi06MTA2OEYwMDAwM0UwMDAwODI3QkQwMDQwOTIwOTAxMDk4Rjg4MDAzQzkxCi06MTA2OTAwMDAwMDA5M0UwMDAwRTgzMDI1QUUwNjAwODA4RTIzMDAyMEZFCi06MTA2OTEwMDA4RTI0MDAyNEFGQTMwMDEwQUUwMzBFMTQ4RkEyMDAxMDJCCi06MTA2OTIwMDBBRTAyMEUxMEFFMDQwRTFDMEEwMDA5NTFBRTA0MEUxODgxCi06MTA2OTMwMDAwMjAwRjgwOTAwMDAwMDAwOEVFMzAwMEMwMDYwRjgwOTc2Ci06MTA2OTQwMDAwMDAwMDAwMDBBMDAwQTA3OEZCRjAwMzgyNDBFMDAwMTczCi06MTA2OTUwMDAyNDBEMDAwMUE1ODAwMDIwQTU4RTAwMjIwQTAwMDlFQjZECi06MTA2OTYwMDBBRDhEMDAyNDNDMDEwODAwQUMyMDNBQjAwQTAwMDk4MTNBCi06MTA2OTcwMDA4RTcxMDAwMDNDMDEwODAwQUMyNTNBQjAwQTAwMDk4MTg0Ci06MTA2OTgwMDA4RTcxMDAwMDkyMTEwMTA5MDAwMDI4MjEwRTAwMDY2RjhGCi06MTA2OTkwMDAzMjI0MDBGRjhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDJECi06MTA2OUEwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDQ1Ci06MTA2OUIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDE1Ci06MTA2OUMwMDAwMkMwRjgwOTAwMDAwMDAwMEEwMDBBMDEzMjFGMDA0MDVFCi06MTA2OUQwMDA1MjQwRkZCMjk3OTQwMDU0OEVCNjBFMTQ4RjkzMDA0NDI5Ci06MTA2OUUwMDBBRTc2MDAyMDhFQjQwRTFDQUU3NDAwMjQwQTAwMDlGQUE0Ci06MTA2OUYwMDA5Nzk0MDA1NDhGODIwMDE0MDAwNDIxODAwM0UwMDAwODYzCi06MTA2QTAwMDAwMDgyMTAyMTNDMDc4MDA4MzRFMjAwODA5MDQzMDA2OTM2Ci06MTA2QTEwMDAwMDgwNDAyMTEwNjAwMDA5M0MwNDAxMDAzQzA3MDgwMDkwCi06MTA2QTIwMDA4Q0U3M0FENDhGODMwMDMwMDBFMzIwMjMwNDgwMDAwOEYxCi06MTA2QTMwMDA5Mzg5MDAxQzE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwOEY3Ci06MTA2QTQwMDAwMDgwMTAyMTNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMUI4Ci06MTA2QTUwMDAxMTIwMDAwQjAwNjczODIzM0MwRDgwMDAzNUFDMDk4MDA1Ci06MTA2QTYwMDA5MThCMDA3QzMxNkEwMDAyMTE0MDAwMjAyNDA5MDAzNDFGCi06MTA2QTcwMDAwMEU5NzAyQjE1QzBGRkYxMDEwMDIwMjEwMEU5MzgyMzQ3Ci06MTA2QTgwMDAyNDAzRkZGQzAwQTNDODI0MDBFM0MwMjQwMEY5NzgyQkYyCi06MTA2QTkwMDAxNUUwRkZFQTAzMDgyMDIxMzBDNDAwMDMwMDA0MTAyMzlFCi06MTA2QUEwMDAxNEMwMDAxNDMwNDkwMDAzMDAwMDMwMjEwMEE5NzgyMUVGCi06MTA2QUIwMDAwMUU2NzAyMTAwRUU2ODJCMTFBMEZGRTAzQzA0MDEwMDBDCi06MTA2QUMwMDAyRDM4MDAwMTAwMDZDODJCMDEwNTQ4MjEwMzE5MzgyNDgwCi06MTA2QUQwMDAxNEUwRkZEQTI1MjRGRkZDMjQwMkZGRkMwMEEyMTgyNEE2Ci06MTA2QUUwMDAwMDY4MjAyMTAzRTAwMDA4MDA4MDEwMjEwQTAwMEE2RkRFCi06MTA2QUYwMDAyNDA5MDAzMDNDMEM4MDAwMzU4NjA5ODA5MENCMDA3QzU2Ci06MTA2QjAwMDAzMTZBMDAwNDE1NDBGRkU5MjQwNjAwMDQwQTAwMEE3RUU5Ci06MTA2QjEwMDAwMDAwMzAyMTNDMDMwODAwOEM2MzAwNUM4RjgyMDAxODY5Ci06MTA2QjIwMDAyN0JERkZFOEFGQkYwMDE0MTA2MjAwMDVBRkIwMDAxMDMyCi06MTA2QjMwMDAwMDAzMjlDMDI0QTQwMjgwQUY4NDAwMTRBRjgzMDAxODhFCi06MTA2QjQwMDAzQzEwODAwMDM2MDMwQTAwOTQ2NTAwMzIwRTAwMEE1MEEzCi06MTA2QjUwMDAzMEE0M0ZGRjhFMDQwMTAwM0MxODAwODAzNzBGMDAwMzczCi06MTA2QjYwMDAwMDgyQzgyMTI0MDJGRjgwMDMyMjYwMjQzMzI5MDA3RjkxCi06MTA2QjcwMDAwMDBDRjk0MDAzRTk0MDI1MzMyRTAwNzgzQzBEMTAwMDRECi06MTA2QjgwMDAwMTBENTAyNTAxQ0Y1ODI1QUUwQzAwMjgzNjA4MDk4MDhDCi06MTA2QjkwMDBBRTBDMDgwQ0FFMEIwODJDQUUwQTA4MzA5MTAzMDA2OTRECi06MTA2QkEwMDAzQzA2ODAwQzAxMjYzODIxMTA2MDAwMDZBRjg3MDAzNEI3Ci06MTA2QkIwMDA4RDA5MDAzQzhEMDYwMDZDMDEyNjM4MjMxOEUwMDA3RjBCCi06MTA2QkMwMDAwMDAwMDAwMDNDMEM4MDA4MzU4QjAwODAzQzBBODAwMEVGCi06MTA2QkQwMDBBMTYwMDA2OTM1NTAwOTgwOEUwMjAwMzgzQzA2ODAwMEIzCi06MTA2QkUwMDAzNEM1MEEwMDkwQUQwMDNDMzFBODAwMjAxMTAwMDAxOTA2Ci06MTA2QkYwMDBBRjgyMDAzMDI0MEUwMDAxM0MxOTgwMDAzNzMwMEEwMEJCCi06MTA2QzAwMDBBMzhFMDAxQ0FGODAwMDI0OEUwNDAwMjQ4Rjg1MDAyNEY2Ci06MTA2QzEwMDAyNDE4MDAwOEFGODAwMDIwQUY4MDAwMjgzQzAxMDgwMDQ1Ci06MTA2QzIwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NDBGCi06MTA2QzMwMDAwMDAwMzAyMTkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMDc1Ci06MTA2QzQwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODNFCi06MTA2QzUwMDAzMUMyMDAwMTkwQjkwMDMyMjQwRjAwMDEzMzM4MDBGRjI3Ci06MTA2QzYwMDAwMDE4MjE4MjEwOEYwMDNGMjQxRjAwMDIxMDlGMDA2MjM1Ci06MTA2QzcwMDAzNEMyMEFDMDNDMDM4MDAwMzQ2NDBBMDA4Qzk5MDAyNEFBCi06MTA2QzgwMDAxNzIwMDAxRDM0NjYwOTAwOTA4MzAwMzAyNDFGMDAwNTgyCi06MTA2QzkwMDAzMDYyMDAzRjEwNUYwMDRDMjQwNTAwMDE4Rjg2MDAyMDA5Ci06MTA2Q0EwMDBBMzg1MDAxQ0FGODYwMDI4QUY4NjAwMjQzQzE5ODAwMDE1Ci06MTA2Q0IwMDAzNzMwMEEwMDhFMDQwMDI0OEY4NTAwMjQyNDE4MDAwODMxCi06MTA2Q0MwMDAzQzAxMDgwMEE0MzgzQUJFM0MwMTA4MDBBNDIwM0FEMjk2Ci06MTA2Q0QwMDAwRTAwMEE1NDAwMDAwMDAwOTIwRjAwM0M4RkJGMDAxNDA5Ci06MTA2Q0UwMDA4RkIwMDAxMDAwMEY3MTQyQUY4MjAwMkMyN0JEMDAxODNBCi06MTA2Q0YwMDAwM0UwMDAwODMxQzIwMDAxOEM4ODAwMDg4QzhEMDAyNDVDCi06MTA2RDAwMDA4Q0NCMDA2NDNDMTk4MDAwMzczMDBBMDBBRjhCMDAyNDI0Ci06MTA2RDEwMDBBMzgwMDAxQzhFMDQwMDI0OEY4NjAwMjA4Rjg1MDAyNDExCi06MTA2RDIwMDAwMTBENjAyMzI0MTgwMDA4QUY4QzAwMjgzQzAxMDgwMEU2Ci06MTA2RDMwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NEZFCi06MTA2RDQwMDAwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMEI1Ci06MTA2RDUwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODJECi06MTA2RDYwMDAzMUMyMDAwMTkwQTcwMDMwMzBFMzAwM0Y1MDY0MDAyODlBCi06MTA2RDcwMDAzNEM1MEFDMDhDQUEwMDI0MTU0MDAwMjIzNEM4MDkwMDdBCi06MTA2RDgwMDA4Q0FCMDA0ODNDMEM3RkZGMzU4NUZGRkYwMTY1MTAyNDZDCi06MTA2RDkwMDAzQzE4ODAwMEFGODIwMDIwMzcwNTA5MDA4RjhFMDAyMDRDCi06MTA2REEwMDA4Q0FGMDA2MDAxQ0Y2ODJCMTVBMDAwMDIwMUMwMjAyMTJDCi06MTA2REIwMDA4Q0E0MDA2MDBBMDAwQUYwQUY4NDAwMjA4RDAyMDA2Q0YxCi06MTA2REMwMDAwQTAwMEFDQjNDMDY4MDAwOEM4OTAwNDg4Rjg2MDAyMDkwCi06MTA2REQwMDAzQzBBN0ZGRjM1NTBGRkZGMDEzMDM4MjQzQzA0ODAwODE3Ci06MTA2REUwMDAyNDA1MDAwMUFGODcwMDI4QUM4MDAwNkNBMzg1MDAxQzNGCi06MTA2REYwMDAwQTAwMEFGRUFGODYwMDI0OEM0NDAwMTQwQTAwMEFGMDQwCi06MTA2RTAwMDBBRjg0MDAyMDhEMDIwMDY4MEEwMDBCMzgzQzE4ODAwMDE3Ci06MTA2RTEwMDAzNEM0MDk4MDhDODYwMDcwOENCMDAwMTQwMEQwNDgyQkRDCi06MTA2RTIwMDAxMTIwMDAwNDAwMDAwMDAwOEM4MjAwNzAwQTAwMEIzODYyCi06MTA2RTMwMDAzQzE4ODAwMDhDQTIwMDE0MEEwMDBCMzgzQzE4ODAwMDFCCi06MTA2RTQwMDA4Rjg1MDAyNDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDRECi06MTA2RTUwMDAxNEEwMDAwOEFGQjAwMDEwM0MwNDgwMDAzNDg3MEEwMDgyCi06MTA2RTYwMDA5MEU2MDAzMDI0MDIwMDA1MzBDMzAwM0YxMDYyMDBCN0Y2Ci06MTA2RTcwMDAzNDg0MDkwMDhGOTEwMDIwMDBBMDgwMjEzQzA0ODAwMDEwCi06MTA2RTgwMDAzNDhFMEEwMDhEQ0QwMDA0M0MwNjA4MDA4Q0M2M0FCMDUyCi06MTA2RTkwMDAzMUE3M0ZGRjAwRTY2MDJCNTU4MDAwMDEwMEUwMzAyMTY0Ci06MTA2RUEwMDA5MzhGMDAxQzExRTAwMDc2MDBEMDEwMkIzNDk5MDk4MERDCi06MTA2RUIwMDA5MzM4MDA3QzMzMDQwMDAyMTA4MDAwNzcyNDAzMDAzNEYwCi06MTA2RUMwMDAwMEMzRjgyQjE3RTAwMEQ2MDBDMzMwMjMwMEQwMTAyQkVFCi06MTA2RUQwMDAzQzAxMDgwMEE0MjMzQUJDMTQ0MDAwNkQwMjAwMTgyMUI0Ci06MTA2RUUwMDAzQzA0MDgwMDhDODQzQUFDMDA2NDI4MkI1NEEwMDAwMUI4Ci06MTA2RUYwMDAwMDYwMjAyMTNDMDU4MDAwMzRBOTBBMDA5MTI4MDAzQzU0Ci06MTA2RjAwMDAzQzAxMDgwMEFDMjQzQUI0MzEwMzAwMjAxNDYwMDAwMkI0Ci06MTA2RjEwMDAwMDAwNDgyMThDQTkwRTE4OEY4ODAwMkMwMTI4NTAyQkM2Ci06MTA2RjIwMDAxMTQwMDA1RjAwMDAwMDAwM0MwNTA4MDA4Q0E1M0FCNDQ5Ci06MTA2RjMwMDAwMEE5NjAyMTAxMEM1ODJCMTE2MDAwNUMwMEIwNjgyQjg3Ci06MTA2RjQwMDAwMTA5MzgyMzAwRTAyODIxM0MwMTA4MDBBQzI3M0FCNEFECi06MTA2RjUwMDAxMjAwMDAwMzI0MDJGRkZDMTBCMDAwOEMzMjJBMDAwMzUwCi06MTA2RjYwMDAwMEEyRjgyNDNDMDEwODAwQTQyMDNBRDIzQzAxMDgwMDA5Ci06MTA2RjcwMDBBQzNGM0FCNDAzRTAyODIxOEY4NDAwMjQxMjA0MDAwNkI5Ci06MTA2RjgwMDAzQzAzODAwODhDNkEwMDZDMDIwMDIwMjFBRjkxMDAyMDM1Ci06MTA2RjkwMDAyNTUwMDAwMUFDNzAwMDZDOEY4QjAwMjgwMDg1ODgyMzgxCi06MTA2RkEwMDBBRjkxMDAyNDAxNjUyMDIzQUY4NDAwMjgxMjIwMDAwMjQ1Ci06MTA2RkIwMDAyNDA3MDAxODI0MDcwMDEwM0MwRTgwMDgzNUM2MDA4MDA2Ci06MTA2RkMwMDA5MENEMDA2ODI0MEMwMDAxM0MwMTA4MDBBMDI3M0FEMEI1Ci06MTA2RkQwMDAzMUE3MDBGRjEwRUMwMDQ3MDAwMDAwMDAxNDgwMDAxOEVCCi06MTA2RkUwMDAwMDAwMjgyMTNDMEI4MDAwOTE2NTAxMDkzNTcxMDk4MDYyCi06MTA2RkYwMDA4RTIzMDAxODMwQTUwMEZGMDAwMzU2MDIyNEEzMDAwMUQxCi06MTA3MDAwMDAzMTQ2MDA3RjMwNzAwMDdGMTIwNjAwN0UyNDBDRkY4MDI2Ci06MTA3MDEwMDAzQzBGODAwODM1RTkwMDgwQTEyMzAwNEMzQzA4MDgwMEEzCi06MTA3MDIwMDA4RDA4M0FDQzI0MEUwMDAyM0MwMTA4MDBBMDJFM0IxMTMyCi06MTA3MDMwMDAzNTBEMDAwODNDMDEwODAwQUMyRDNBQ0MyNDA1MDAxMEE5Ci06MTA3MDQwMDAzQzFGODAwMDM3RTQwQTAwOTA5OTAwM0MzMzM4MDAyMDUwCi06MTA3MDUwMDAxMzAwMDAwNTAwQTAyMDIxMjQwMjAwMDEzQzAxMDgwMENCCi06MTA3MDYwMDBBQzIyM0FCNDM0QTQwMDAxOEZCRjAwMTg4RkIxMDAxNEQxCi06MTA3MDcwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDIxCi06MTA3MDgwMDAzQzAxMDgwMEE0MjAzQUJDMTA0MEZGOTUwMjAwMTgyMUUyCi06MTA3MDkwMDAwQTAwMEI4QjAwQzAxODIxMEEwMDBCODMyNDAzMDAzMDY4Ci06MTA3MEEwMDAzQzA1MDgwMDhDQTUzQUI0MDBCMDY4MkIxMUEwRkZBOERECi06MTA3MEIwMDAwMDAwMDAwMDNDMDQwODAwOTQ4NDNBQkMwMDg1NzgyMTVDCi06MTA3MEMwMDAwMUU3NzAyQjExQzAwMDA3MkNBMjAwMDQzQzFGNjAwMEQ4Ci06MTA3MEQwMDA4RkY5NTQwNDMzMzgwMDNGMTcwMEZGRTMyNDA0MDA0MkMzCi06MTA3MEUwMDAyQ0EyMDAwNDEwNDBGRjlBMjQwNDAwNDIwQTAwMEJFRTc4Ci06MTA3MEYwMDA4RkJGMDAxODE1MjhGRkI5MDAwMDAwMDA4Q0MyMDAxOENGCi06MTA3MTAwMDAzQzE4ODAwMDI0MTkwMDAyMDA1OEY4MjVBQ0RGMDAxODU0Ci06MTA3MTEwMDAzNzA0MEEwMEEwRDkwMDY4OTA4OTAwM0MyNDBGMDAwNEJECi06MTA3MTIwMDAwMEEwMTAyMTMxMjgwMDIwM0MwMTA4MDBBMDJGM0IxMUI1Ci06MTA3MTMwMDAxMTAwMDAwMjI0MDUwMDEwMjQwMjAwMDEzQzAxMDgwMDk3Ci06MTA3MTQwMDBBQzIyM0FBQzBBMDAwQkU0M0MxRjgwMDA4Rjg4MDAyODc4Ci06MTA3MTUwMDA4Qzg5MDA2MDAxMDkyODJCMTRBMDAwMDIwMTAwODgyMUZECi06MTA3MTYwMDA4QzkxMDA2MDNDMEI4MDAwOEQ2NDBFMTgyNDBBMDAwMTk1Ci06MTA3MTcwMDAwMjIwMjgyMTAyMjAzMDIxQTM4QTAwMUMwRTAwMEE1NDdDCi06MTA3MTgwMDAwMjIwODAyMTBBMDAwQjcyQUY4MjAwMkMwMDBBMTgyMzEzCi06MTA3MTkwMDAxMjIwMDAwNzMwNjQwMDAzM0MwRDgwMDAzNUE3MDk4MEYxCi06MTA3MUEwMDA5MEVDMDA3QzMxOEIwMDA0MTU2MDAwMTkyNDhFMDAwNEUzCi06MTA3MUIwMDAzQzAxMDgwMEE0MjQzQUQyM0MxODA4MDA5NzE4M0FEMjlGCi06MTA3MUMwMDAwMzA1MjAyMTAwQzQ3ODJCMTFFMEZGNkM4Rjg0MDAyNDdDCi06MTA3MUQwMDAyQ0E2MDAwNTE0QzBGRkE0MjQwNDAwNDIzMEI5MDAwMzBCCi06MTA3MUUwMDAxNzIwMDAwMjAwQjkxODIzMjRBM0ZGRkMzQzAxMDgwMDZCCi06MTA3MUYwMDBBQzIzM0FCNDNDMDEwODAwQTQyMDNBRDIwQTAwMEJCMUY3Ci06MTA3MjAwMDAwMDYwMjgyMTAwQUMzODI0MEEwMDBCRDcwMEVDMTgyNkI3Ci06MTA3MjEwMDAzQzAxMDgwMEE0MkUzQUQyMEEwMDBDNDEwMDAwMDAwMEY0Ci06MTA3MjIwMDAzQzAxMDgwMEFDMjAzQUI0MEEwMDBCRUQyNDA0MDA0MkYzCi06MTA3MjMwMDA4RjgzMDAyODNDMEI4MDAwMzU2QTBBMDAxNDYwMDAwNjJBCi06MTA3MjQwMDAwMDAwMTAyMTkxNDYwMDMwMjQwNTAwMDUzMEM0MDBGRkU1Ci06MTA3MjUwMDAxMDg1MDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEFCCi06MTA3MjYwMDA5MTQ5MDA0ODMxMjgwMEZGMDAwODM5QzIxNEUwRkZGQUI0Ci06MTA3MjcwMDAzQzA0ODAwODNDMDYwODAwOTRDNjNBQkMzQzAzMDgwMDY1Ci06MTA3MjgwMDA4QzYzM0FENDNDMDUwODAwOENBNTNBQjQzQzE4MDgwMDNECi06MTA3MjkwMDA5NzE4M0FEMjAwNjZDODIxOEM4RTAwMDQwMzI1NzgyMTA1Ci06MTA3MkEwMDAwMUY4NjgyMTAxQUU2MDIzMTk4MDAwMUQwMDAwMDAwMDc0Ci06MTA3MkIwMDA5MTU4MDA0QzhGOEQwMDM0OTU2RTBFMTAzMzBGMDBGRkU3Ci06MTA3MkMwMDA4REE5MDAwNDAxQ0YzMDIzOERBQTAwMDAzMENGRkZGRjJECi06MTA3MkQwMDAwMDBGNjEwMDAxMkMyODIxMDAwMDM4MjEwMTQ3MjAyMUU2Ci06MTA3MkUwMDAwMEFDMTgyQjAwODNDODIxQURBNTAwMDRBREI5MDAwMDg3Ci06MTA3MkYwMDA5MUI4MDAwQTAxRjg3MDIxQTFBRTAwMEE5NTZDMEUxMjM3Ci06MTA3MzAwMDA4RjhBMDAzNEE1NEMwMDA4OTU0OTAwMzgyNTI4MDAwMUQzCi06MTA3MzEwMDBBNTQ4MDAzODkxNDcwMDBEMzRFQjAwMDhBMTRCMDAwRDQzCi06MTA3MzIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDhBRkIwMDAxODQwCi06MTA3MzMwMDA5MzhGMDAxQzhGQjAwMDE0M0MwODdGRkY4Rjg3MDAyNEMwCi06MTA3MzQwMDAzQzBDODAwMDM1MThGRkZGQUZCRjAwMjBBRkIxMDAxQzIwCi06MTA3MzUwMDAzNTk5MEEwMDAyMTgxODI0OTMyQTAwM0MwMDBGNUZDMEQ4Ci06MTA3MzYwMDAzQzAyQkZGRjJDRjAwMDAxMzQ0OUZGRkYwMDZCRjgyNTAxCi06MTA3MzcwMDAzQzA4MDgwMDhEMDgzQUQ0OEY5OTAwMzAzQzE4MDgwMDZBCi06MTA3MzgwMDA5NzE4M0FDQTAzRTk1ODI0MDAxMDdGODAzQzA3RUZGRkEyCi06MTA3MzkwMDAzQzA1RjBGRjAxNkYxODI1M0MxMTgwMDAzMTQ5MDAyMEE5Ci06MTA3M0EwMDAzNEUyRkZGRjM0QURGRkZGMzYyRTA5ODAyN0E1MDAxMDIxCi06MTA3M0IwMDAyNDA2MDAwMjAxMTk0MDIzMjcwQTAwMDIwMDYyMTgyNDUzCi06MTA3M0MwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDU4MjE4RDhCMEUxQ0FBCi06MTA3M0QwMDBBN0FBMDAxMjA1MDAwMDNBMjQwNzAwMDAzMEVGMDBGRkMyCi06MTA3M0UwMDAwMDBGM0YwMDAwNjc0MDI1M0MwMjgwMDhBRkE4MDAxNDUyCi06MTA3M0YwMDAzNDRCMDA4MDkxNkEwMDY4M0MwRjA4MDA5MUVGM0FEMTRECi06MTA3NDAwMDAzQzA5REZGRjM1M0ZGRkZGMDAwQTYwMkIzQzAyMDgwMDBDCi06MTA3NDEwMDA5NDQyM0FDNEEzQUYwMDExMDExRkMwMjQwMDBDQ0Y0MDE2Ci06MTA3NDIwMDAwMzE5MTgyNThGQTcwMDEwQUZBMzAwMTQzQzFGMDgwMEY0Ci06MTA3NDMwMDA5M0ZGM0FEM0E3QTIwMDE2OEZBODAwMTQwMEVENDgyNEFBCi06MTA3NDQwMDAzQzBCMDEwMDNDMEEwRkZGMDEyQkM4MjUzM0Y4MDAwMzU5Ci06MTA3NDUwMDAzNTRDRkZGRjAxMEQ3ODI0M0MwMjcwMDAwMzJDMzgyNENBCi06MTA3NDYwMDAwMDE4MUUwMDAwRTI0ODI1MDFFMzU4MjVBRkFCMDAxNEM4Ci06MTA3NDcwMDBBRkE5MDAxMDkxREYwMDdDQTNCRjAwMTUwRTAwMDA2M0QwCi06MTA3NDgwMDAwMDAwMDAwMDM2MkQwQTAwOTFBNjAwM0MzMEM0MDAyMDA4Ci06MTA3NDkwMDAxMDgwMDAwNjI2MDIwMDA4M0MxMTA4MDA5NjMxM0FDMDEwCi06MTA3NEEwMDAyNjJFRkZGRjNDMDEwODAwQTQyRTNBQzA4RkJGMDAyMDBCCi06MTA3NEIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODIyCi06MTA3NEMwMDA4RjhBMDAyQzAxNkE2MDJCNTU4MEZGQzQyNDA3MDAwMUJECi06MTA3NEQwMDAwQTAwMENDQjMwRUYwMEZGOTM4MzAwMUMzQzAyODAwMEJECi06MTA3NEUwMDAyN0JERkZEODM0NDgwQTAwMDA4MDUwMjFBRkJGMDAyMERDCi06MTA3NEYwMDAzNDQ2MEFDMDAxMDAyODIxMTA2MDAwMEUzNDQ0MDk4MDdGCi06MTA3NTAwMDA5MTA3MDAzMDI0MEIwMDA1OEY4OTAwMjAzMEVDMDAzRkVDCi06MTA3NTEwMDAxMThCMDAwQjAwMDAzODIxQUZBOTAwMTAzQzBCODAwODM0Ci06MTA3NTIwMDA4RDY5MDA2Q0FGQUEwMDE4MEUwMDAxMkJBRkE5MDAxNEUyCi06MTA3NTMwMDBBMzgwMDAxQzhGQkYwMDIwMDNFMDAwMDgyN0JEMDAyOEE3Ci06MTA3NTQwMDA4RDFGMDA0ODNDMTgwODAwOEYxODNBQjQ4Rjk5MDAyODA2Ci06MTA3NTUwMDAzQzAyN0ZGRjhEMDgwMDQ0MzQ0M0ZGRkZBRkE5MDAxMEI5Ci06MTA3NTYwMDAzQzBCODAwODhENjkwMDZDMDNFMzcwMjQwMzE5NzgyMUJCCi06MTA3NTcwMDAwMUNGNjgyMzAxQTgzODIxQUZBQTAwMTgwRTAwMDEyQjAzCi06MTA3NTgwMDBBRkE5MDAxNDBBMDAwRDIwQTM4MDAwMUMzQzA1ODAwMDU4Ci06MTA3NTkwMDAzNEE2MEEwMDkwQzcwMDNDM0MwNjA4MDA5NEM2M0FEMkM0Ci06MTA3NUEwMDAzQzAyMDgwMDhDNDIzQUNDMzBFMzAwMjAwMDA2MjQwMDY0Ci06MTA3NUIwMDAxMDYwMDAxRTAwNDQzODI1M0MwODgwMDgzNTA1MDA4MDE2Ci06MTA3NUMwMDA5MEEzMDA2ODAwMDAzMDIxMjQwODAwMDEwMDAwMjAyMTYxCi06MTA3NUQwMDAyNDAzMDAwMTNDMDU4MDAwOENBQzAxNzgwNTgwRkZGRThGCi06MTA3NUUwMDAwMDAwMDAwMEFDQTgwMTQ4QTRBNDAxNDRBNEEzMDE0NkUzCi06MTA3NUYwMDAzQzAzMDgwMDhDNjMzQUQ0M0MxODgwMDgzNzBGMDA4MEE1Ci06MTA3NjAwMDBBQ0EzMDE0QzNDMTkwODAwOTMzOTNBRDEzQzBEMTAwMDUxCi06MTA3NjEwMDBBMEI5MDE1MkFDQTcwMTU0QTRBNjAxNTg5MUVFMDA0Q0E4Ci06MTA3NjIwMDBBMEFFMDE2RDAzRTAwMDA4QUNBRDAxNzg4Q0E4MEUxQzgzCi06MTA3NjMwMDAzQzBCMDgwMDhENkIzQUI0OTRBQTBFMTY5NEE5MEUxNDU0Ci06MTA3NjQwMDAwMTY2MzAyMTMxNDNGRkZGMEEwMDBENDgzMTI0RkZGRjVFCi06MTA3NjUwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMDg2Ci06MTA3NjYwMDAxMDQwMDAxQzAwMDAwMDAwMDAwMDMwMjEwMDAwMjAyMTFDCi06MTA3NjcwMDAwMDAwMTgyMTNDMDU4MDAwOENBOTAxNzgwNTIwRkZGRTQwCi06MTA3NjgwMDAwMDAwMDAwMEFDQTYwMTQ4M0MwRTA4MDA4RENFM0FENEE0Ci06MTA3NjkwMDAyNDBERkY5MTI0MEMwMDQwM0MwQjgwMDhBNEEzMDE0NDVFCi06MTA3NkEwMDAzNTZBMDA4MEE0QTQwMTQ2QUNBRTAxNENBMEFEMDE1MkU1Ci06MTA3NkIwMDBBQ0FDMDE1NEE0QTAwMTU4OTBBMzAxMDk5MTQ0MDA0QzIyCi06MTA3NkMwMDA5MEE2MDEwOTNDMDQxMDAwQTBBNjAxNkQwM0UwMDAwODhCCi06MTA3NkQwMDBBQ0E0MDE3ODhDODYwRTE4OTQ4ODBFMTI5NDg3MEUxMDM0Ci06MTA3NkUwMDAzMTA0RkZGRjBBMDAwRDcwMzBFM0ZGRkYzQzA0ODAwMDBGCi06MTA3NkYwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjAxMDQwMDAyNjMwCi06MTA3NzAwMDAyN0JERkZGODI0MDkwMDAxMDAwMDM4MjEyNDA4MDAwMUVBCi06MTA3NzEwMDAzQzA2ODAwMDhDQzQwMTc4MDQ4MEZGRkUwMDAwMDAwMDVECi06MTA3NzIwMDA5MENBMDEwOTNDMDQwODAwOTA4NDNCMTEzQzE4ODBGRjdBCi06MTA3NzMwMDBBM0FBMDAwMzhGQTMwMDAwMzA4NTAwN0YzNzBGRkZGRjRGCi06MTA3NzQwMDAwMDY2MTAyNUFGQTIwMDAwOTBEOTAxMEFBM0EwMDAwMjk0Ci06MTA3NzUwMDAwMDA1NkUwMEEzQjkwMDAxOEZBRTAwMDAyNDBBMzAwMEJFCi06MTA3NzYwMDAyN0JEMDAwODAxQ0Y2MDI0MDE4RDU4MjVBQ0NCMDE0QzBBCi06MTA3NzcwMDBBQ0NBMDE1NEE0QzAwMTU4QUNDOTAxNDhBNEM3MDE0NDEzCi06MTA3NzgwMDAyNDA5RkY4MEE0QzgwMTQ2M0MwODEwMDBBMEM5MDE1MjhBCi06MTA3NzkwMDAwM0UwMDAwOEFDQzgwMTc4OEM4OTBFMTg5NDg3MEUxMjlCCi06MTA3N0EwMDA5NDg2MEUxMDMwRThGRkZGMEEwMDBEOTczMEM3RkZGRkU4Ci06MTA3N0IwMDAyN0JERkZFOEFGQjAwMDEwM0MxMDgwMDBBRkJGMDAxNDQxCi06MTA3N0MwMDAzNjE4MEEwMDk3MEYwMDMyMEUwMDBBNTAzMUU0M0ZGRkNFCi06MTA3N0QwMDA4RTBFMDEwMDI0MERGRjgwM0MwNDIwMDAwMUMyNTgyMUMwCi06MTA3N0UwMDAwMTZENjAyNDAwMEM0OTQwMzE2QTAwN0YwMTJBNDAyNTY4Ci06MTA3N0YwMDAwMTA0MzgyNTNDMDQ4MDA4QUUwNzA4MzAzNDg2MDA4MDM4Ci06MTA3ODAwMDA5MEM1MDA2ODI0MDMwMDAyMzBBMjAwRkYxMDQzMDAwNDZBCi06MTA3ODEwMDA4RjlGMDAyMDhGOTkwMDI0QUM5RjAwNjhBQzk5MDA2NDcyCi06MTA3ODIwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEMwCi06MTA3ODMwMDAzQzBBMDgwMDI1NEEzNTlDM0MwOTA4MDAyNTI5MzYzOEIxCi06MTA3ODQwMDAzQzA4MDgwMDI1MDgyQTYwM0MwNzA4MDAyNEU3MzZGQ0FECi06MTA3ODUwMDAzQzA2MDgwMDI0QzYzNDI0M0MwNTA4MDAyNEE1MzE3Q0RECi06MTA3ODYwMDAzQzA0MDgwMDI0ODQyRDhDM0MwMzA4MDAyNDYzMzREODk1Ci06MTA3ODcwMDAzQzAyMDgwMDI0NDIzMjc0M0MwMTA4MDBBQzJBM0E5MEQxCi06MTA3ODgwMDAzQzAxMDgwMEFDMjkzQThDM0MwMTA4MDBBQzI4M0E4ODNECi06MTA3ODkwMDAzQzAxMDgwMEFDMjczQTk0M0MwMTA4MDBBQzI2M0FBNDBECi06MTA3OEEwMDAzQzAxMDgwMEFDMjUzQTlDM0MwMTA4MDBBQzI0M0E5ODA1Ci06MTA3OEIwMDAzQzAxMDgwMEFDMjMzQUE4M0MwMTA4MDBBQzIyM0FBMEU1Ci06MDg3OEMwMDAwM0UwMDAwODAwMDAwMDAwRDUKLTowODc4QzgwMDgwMDAwOTQwODAwMDA5MDA2NgotOjEwNzhEMDAwODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwODAwRTAwMDAwMQotOjEwNzhFMDAwODAwODAwODA4MDA4MDAwMDgwMDAwQTgwODAwMDBBMDA3NAotOjA4NzhGMDAwODAwMDA5ODA4MDAwMDkwMEZFCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlOTIyZQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3LmloZXgKQEAgLTAsMCArMSw2MDU4IEBACis6MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDUxQzQwMDAwMDBDOEYyCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNTFDNEMzCis6MTAwMDIwMDAwMDAwMDAzODAwMDA1MjhDMDgwMDAwODgwODAwMDAwMDIyCis6MTAwMDMwMDAwMDAwNTFCNDAwMDA1MkM0MDgwMDUzQTAwMDAwMDA4NDI2Cis6MTAwMDQwMDAwMDAwQTQ3ODA4MDA1MUI0MDAwMDAxQzAwMDAwQTRGQzI2Cis6MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDgxNTQwMDAwQTZCQzUwCis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwODE1NEIzCis6MTAwMDcwMDAwMDAwMDEyNDAwMDEyODEwMDgwMDA0ODgwODAwMDQwMDgyCis6MTAwMDgwMDAwMDAwMTdFQzAwMDEyOTM0MDAwMDAwMDAwMDAwMDAwMDBGCis6MTAwMDkwMDAwMDAwMDAwMDA4MDAxQkVDMDAwMDAwMDQwMDAxNDEyMEVCCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDM4MTQwMDAxNDEyNEU2Cis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMzgxNEVDCis6MDgwMEMwMDAwMDAwMDAzMDAwMDE3OTM4NTYKKzowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMworOjEwMDBFMDAwNkEzOTAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2MworOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQworOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgorOjEwMDFGMDAwMjQ0MjUyMjAzQzAzMDgwMDI0NjM1MzU0QUM0MDAwMDBDNgorOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQorOjEwMDIxMDAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAwMAorOjEwMDIyMDAwM0MxQzA4MDAyNzlDNTIyMDBFMDAwMjVGMDAwMDAwMDBDQQorOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRGNAorOjEwMDI0MDAwQUZCMDAwMTAzQzA0ODAwMDk0ODIwMTA4MzA0MzcwMDA3RAorOjEwMDI1MDAwMjQwMjIwMDAxMDYyMDAwQjI4NjIyMDAxMTQ0MDAwMzZBNgorOjEwMDI2MDAwMDAwMDEwMjEyNDAyNDAwMDEwNjIwMDJDMDAwMDAwMDA1OQorOjEwMDI3MDAwMjQwMjYwMDAxMDYyMDAyRDAwMDAxMDIxMEEwMDAwOUQ4MQorOjEwMDI4MDAwOEZCRjAwMTgzNDkxMDEwMDkyMjQwMDA5OEUzMDAwMThBRAorOjEwMDI5MDAwMTA4MDAwMjAyNDAzMDAwMTI0MDIwMDA5MTQ4MjAwMDZCQgorOjEwMDJBMDAwOEY4MjAwMUMzQzAyODAwODk0NDIwMDFBMDAwMjE0MDA1NQorOjEwMDJCMDAwMDIwMjgwMjU4RjgyMDAxQzhDNDIwMDBDMTA0MDAwMTUyOQorOjEwMDJDMDAwMDAwMDE4MjEwRTAwMEQ0NTAwMDAwMDAwOEY4MzAwMUM2NworOjEwMDJEMDAwOTYyNDAwMDg4RjgyMDAxODk0NjMwMDFFOTYyNTAwMEM1NworOjEwMDJFMDAwMDAwNDI0MDAwMDgzMjAyNUFDNTAwMDAwQUM0NTAwMDQyRAorOjEwMDJGMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQxNgorOjEwMDMwMDAwQUM0MDAwMThBQzQ0MDAxQzBFMDAwRDc5MjQwNDAwMDEyMAorOjEwMDMxMDAwMDAwMDE4MjEwQTAwMDA5QzAwNjAxMDIxMEUwMDA0MkUyRAorOjEwMDMyMDAwMDAwMDAwMDAwQTAwMDA5QzAwMDAxMDIxMEUwMDBDNjU3NworOjEwMDMzMDAwMDAwMDAwMDAwMDAwMTAyMThGQkYwMDE4OEZCMTAwMTREMgorOjEwMDM0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4MjAwMUM0MgorOjEwMDM1MDAwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQ3MQorOjEwMDM2MDAwOEM0MjAwMEMzQzEwODAwMDhFMTEwMTAwMTA0MDAwMzRDMworOjEwMDM3MDAwOEZCRjAwMTgwRTAwMEQ0NTAwMDAwMDAwOEY4NTAwMTg4QgorOjEwMDM4MDAwMjQwNDdGRkYwMDkxMjAyQkFDQjEwMDAwOEUwMzAxMDRGOAorOjEwMDM5MDAwOTYwMjAxMDgwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjU4RQorOjEwMDNBMDAwQUNBMzAwMDQ5MjAyMDEwQTk2MDMwMTE0MzA0MjAwRkYzQworOjEwMDNCMDAwMzA2M0ZGRkYwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDhDOAorOjEwMDNDMDAwOTYwMzAxMEM5NjAyMDEwRTAwMDMxQzAwMzA0MkZGRkY1MQorOjEwMDNEMDAwMDA2MjE4MjVBQ0EzMDAwQzk2MDMwMTEwOTYwMjAxMTJDRQorOjEwMDNFMDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUNBMzAwMTA4MAorOjEwMDNGMDAwOEUwMjAxMThBQ0EyMDAxNDhFMDIwMTFDQUNBMjAwMThERgorOjEwMDQwMDAwMTQ4MDAwMDg4RjgyMDAxQzk3ODIwMDAwM0MwNDIwMDVBNQorOjEwMDQxMDAwMDA0NDE4MjUyNDQyMDAwMUFDQTMwMDFDMEEwMDAwREJBNAorOjEwMDQyMDAwQTc4MjAwMDAzQzAzNDAxODk0NDIwMDFFMDA0MzEwMjVBMAorOjEwMDQzMDAwQUNBMjAwMUMwRTAwMEQ3OTI0MDQwMDAxOEZCRjAwMTgyRgorOjEwMDQ0MDAwOEZCMTAwMTQ4RkIwMDAxMDAwMDAxMDIxMDNFMDAwMDhFRAorOjEwMDQ1MDAwMjdCRDAwMjAzQzA2ODAwMDhDQzIwMkI4MjQwMzAwMDFBNgorOjEwMDQ2MDAwMDQ0MTAwMDgwMDgwMjgyMTNDMDIwODAwOEM0MjAwNjAwMgorOjEwMDQ3MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwMDNFMDAwMDhCNworOjEwMDQ4MDAwMDA2MDEwMjE4QzgzMDAyMDk0ODIwMDE2QUNDMzAyODA4RgorOjEwMDQ5MDAwMjQ0MkZGRkNBNEMyMDI4NDNDMDIwODAwOEM0MjAwNUM5RgorOjEwMDRBMDAwOEM4NDAwMDQ5NEEzMDAwRTI0NDIwMDAxM0MwMTA4MDA0NworOjEwMDRCMDAwQUMyMjAwNUMzQzAyMTAwMEE0QzMwMjg2QUNDNDAyODhEQgorOjEwMDRDMDAwMDAwMDE4MjFBQ0MyMDJCODAzRTAwMDA4MDA2MDEwMjE0RgorOjEwMDREMDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThBNQorOjEwMDRFMDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEJFNQorOjEwMDRGMDAwMjQwMjAwMUE5NjUxMDAwODE0NjIwMDVBMDAwMDI4MjFCNAorOjEwMDUwMDAwMzIyMjAwMDExMDQwMDAxODhGODIwMDFDOEU0MjAwMDAzMQorOjEwMDUxMDAwMDAwMjIzNDAzQzAyMDAzRjM0NDJGRkZGMDA0NDEwMkIwNgorOjEwMDUyMDAwMTA0MDAwMDQzQzAzMDA0MDk2NDIwMDE0MEEwMDAxMjRERAorOjEwMDUzMDAwMDA4MzIwMjE4RTAzMDEwMDI0MDIwMTAwNTQ2MjAwMDY4MgorOjEwMDU0MDAwOTY0MjAwMTQzQzAyODAwODkwNDIwMDA0MzA0MjAwMEZBMgorOjEwMDU1MDAwMDAwMjI1MDA5NjQyMDAxNDAwODIxMDI1QUUwMjAwODBBMQorOjEwMDU2MDAwMEEwMDAxNTcwMDAwMDAwMDhDNDIwMDBDMTA0MDAwMjhENworOjEwMDU3MDAwMDAwMDAwMDAwRTAwMEQ0NTAwMDAwMDAwOTYwMjAxMDg3QQorOjEwMDU4MDAwOTYwMzAxMEM4Rjg1MDAxODMwNDIwMDNFMzA2M0ZGRkY1OAorOjEwMDU5MDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEUwMjAxMDBFRQorOjEwMDVBMDAwQUNBMjAwMDQ5NjAzMDExNjk2MDQwMTBFOEY4MjAwMUM3MworOjEwMDVCMDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDg3MgorOjEwMDVDMDAwOTYwMzAxMTA5NjA0MDExMjk0NDYwMDFFMDAwMzFDMDBCRAorOjEwMDVEMDAwMzA4NEZGRkYwMDY0MTgyNUFDQTMwMDBDM0MwMjIwMDAwRgorOjEwMDVFMDAwMDBDMjMwMjU5NjAyMDExNDI0MDQwMDAxMzA0MkZGRkZBRQorOjEwMDVGMDAwQUNBMjAwMTA4RTAyMDExOEFDQTIwMDE0OTIwMjAxMEJGMgorOjEwMDYwMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwRDc5QUNBNjAwMUMxMQorOjEwMDYxMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBEQQorOjEwMDYyMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJFQworOjEwMDYzMDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ4MAorOjEwMDY0MDAwMTA4MDAwMDgwMDAyMjgyQjAyNDAyMDIxOEZCRjAwMUNEMAorOjEwMDY1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwRTNCMQorOjEwMDY2MDAwMjdCRDAwMjA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDY3MDAwOEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMjA2QgorOjEwMDY4MDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThGMworOjEwMDY5MDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEIzMworOjEwMDZBMDAwMjQwMjAwMDMxNDYyMDA2QTk2NTEwMDA4MzIyMjAwMDFGRAorOjEwMDZCMDAwMTA0MDAwMTc4RjgyMDAxQzhFNDMwMDAwM0MwMjAwM0Y1OAorOjEwMDZDMDAwMzQ0MkZGRkYwMDAzMjM0MDAwNDQxMDJCNTA0MDAwMDUzQworOjEwMDZEMDAwMjQwMjAxMDA5NjQyMDAxNDNDMDMwMDQwMEEwMDAxOEVFRgorOjEwMDZFMDAwMDA4MzIwMjE1NDYyMDAwNjk2NDIwMDE0M0MwMjgwMDhEOAorOjEwMDZGMDAwOTA0MjAwMDQzMDQyMDAwRjAwMDIyNTAwOTY0MjAwMTQ5MAorOjEwMDcwMDAwMDA4MjEwMjVBRTAyMDA4MDBBMDAwMUJFMDAwMDAwMDAzOQorOjEwMDcxMDAwOEM0MjAwMEMxMDQwMDAyNTAwMDAwMDAwMEUwMDBENDUyQQorOjEwMDcyMDAwMDAwMDAwMDA5NjAyMDEwODk2MDMwMTBDOEY4NTAwMTg1NgorOjEwMDczMDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVFQQorOjEwMDc0MDAwQUNBMjAwMDA4RTAyMDEwMEFDQTIwMDA0OTYwMzAxMTZDOAorOjEwMDc1MDAwOTYwNDAxMEU4RjgyMDAxQzAwMDMxQzAwMzA4NEZGRkZGMgorOjEwMDc2MDAwMDA2NDE4MjVBQ0EzMDAwODk2MDMwMTEwOTYwNDAxMTIzQQorOjEwMDc3MDAwOTQ0NjAwMUUwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjUwRgorOjEwMDc4MDAwQUNBMzAwMEMzQzAyMjAwMDAwQzIzMDI1OTYwMjAxMTRFQworOjEwMDc5MDAwMjQwNDAwMDEzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQwMgorOjEwMDdBMDAwQUNBMDAwMTgwRTAwMEQ3OUFDQTYwMDFDM0MwMjA4MDA5RAorOjEwMDdCMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA3MQorOjEwMDdDMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDExMQorOjEwMDdEMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDA4MzIyMjAwMDJGNAorOjEwMDdFMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDdGMDAwOEZCMDAwMTAwQTAwMDBFMzI3QkQwMDIwMTA0MDAwMTU1NAorOjEwMDgwMDAwOEZCRjAwMUMzQzA0ODAwMDhDODMwMTA0M0MwMjYwMjBFQworOjEwMDgxMDAwQUM0MzAwMTQ4QzQyMDAwNDI0MDMwMUZFMzA0MjAzRkY2OQorOjEwMDgyMDAwMTQ0MzAwMEM4RkJGMDAxQzhDODIwMTAwMDAwMjE5QzIwRgorOjEwMDgzMDAwMjQ2MkZGRkMyQzQyMDAwODEwNDAwMDAzMjQwNDAwMDI0NAorOjEwMDg0MDAwMjQ2MkZGRkQwMDQ0MjAwNDNDMDI2MDAwQUM0NDY5MTRCMworOjEwMDg1MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzMgorOjEwMDg2MDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDIwM0MwNDgwMDBBOAorOjEwMDg3MDAwOEM4MzAxMDAyNDAyMDEwMDUwNjIwMDAzM0MwMjgwMDhDNgorOjEwMDg4MDAwMDAwMDAwMEQzQzAyODAwODkwNDMwMDA0MDAwMDEwMjE4RAorOjEwMDg5MDAwMzA2MzAwMEYwMDAzMUQwMDAzRTAwMDA4QUM4MzAwODBGQworOjEwMDhBMDAwMkM4NDA3ODExMDgwMDAwQTAwMDAyODIxM0MwMjgwMDA2RgorOjEwMDhCMDAwOTQ0MjAxMDgyNDAzMjAwMDMwNDI3MDAwMTQ0MzAwMDVENAorOjEwMDhDMDAwMjc4M0ZGQjAzQzAyODAwODkwNDIwMDA1MzA0NTAwRkZCRQorOjEwMDhEMDAwMjc4M0ZGQjAwMDA1MjA4MDAwODMyMDIxMDAwNTEwQzA4MQorOjEwMDhFMDAwMDA0NTEwMjM4Qzg0MDAwMDNDMDMwODAwMjQ2MzUyRTQ3QworOjEwMDhGMDAwMDAwMjEwQzAwMDQzMTAyMTNDMDM4MDAwQUM2NDAwOTA1MworOjEwMDkwMDAwMDNFMDAwMDhBRjgyMDAxQzAzRTAwMDA4MDAwMDEwMjE5MworOjEwMDkxMDAwMDNFMDAwMDgwMDAwMTAyMTI0MDIwMTAwMTQ4MjAwMDhGNgorOjEwMDkyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEZDMjQ0MjAwMDE1MAorOjEwMDkzMDAwM0MwMTA4MDBBQzIyMDBGQzBBMDAwMjI0MzBBMjAwMjA4NgorOjEwMDk0MDAwM0MwMjA4MDA4QzQyMDA4NDI0NDIwMDAxM0MwMTA4MDA2MworOjEwMDk1MDAwQUMyMjAwODQzMEEyMDAyMDEwNDAwMDA4MzBBMzAwMTAxOAorOjEwMDk2MDAwM0MwMjA4MDA4QzQyMDEwODI0NDIwMDAxM0MwMTA4MDBCRQorOjEwMDk3MDAwQUMyMjAxMDgwM0UwMDAwODAwMDAwMDAwMTA2MDAwMDgzRAorOjEwMDk4MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMTA0MjQ0MjAwMDFFNworOjEwMDk5MDAwM0MwMTA4MDBBQzIyMDEwNDAzRTAwMDA4MDAwMDAwMDA1NAorOjEwMDlBMDAwM0MwMjA4MDA4QzQyMDEwMDI0NDIwMDAxM0MwMTA4MDA4NgorOjEwMDlCMDAwQUMyMjAxMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThCMgorOjEwMDlDMDAwQUZCMDAwMTAzQzEwODAwMEFGQkYwMDE0MzYwNDAxMDAyRgorOjEwMDlEMDAwOTQ4MzAwMDgzMDYyMDAwNDEwNDAwMDA1MzA2NjAwMDI3NQorOjEwMDlFMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMTg2RAorOjEwMDlGMDAwMTBDMDAwMDYwMDYwMjgyMThFMDQwMTAwMEUwMDAyMTRDMQorOjEwMEEwMDAwMDAwMDAwMDAwQTAwMDI1QjI0MDIwMDAxOEY4MjAwMDgzRgorOjEwMEExMDAwOEUwMzAxMDQxMDQzMDAwNzAwMDAxMDIxOEUwNDAxMDAyMgorOjEwMEEyMDAwMEUwMDAyMTQwMDAwMDAwMDhFMDIwMTA0QUY4MjAwMDhENAorOjEwMEEzMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhFOQorOjEwMEE0MDAwMjdCRDAwMTgyN0JERkZEODNDMDM2MDEwQUZCMzAwMUNDMgorOjEwMEE1MDAwQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBQworOjEwMEE2MDAwOEM2NDUwMDAyNDAyRkY3RjNDMTMwODAwMjY3MzUyNDgxOAorOjEwMEE3MDAwMDA4MjIwMjQzNDg0MzgwQ0FDNjQ1MDAwM0MwMjgwMDA5NgorOjEwMEE4MDAwMjQwMzAwMzdBQzQzMDAwODNDMDYwODAwMjRDNjA4NDA5NQorOjEwMEE5MDAwMDI2MDEwMjEyNDA0MDAxQzI0ODRGRkZGQUM0NjAwMDBFNworOjEwMEFBMDAwMDQ4MUZGRkQyNDQyMDAwNDNDMDIwODAwMjQ0MjAxNkM0MgorOjEwMEFCMDAwM0MwMTA4MDBBQzIyNTI1MDNDMDIwODAwMjQ0MjA1QjgxOAorOjEwMEFDMDAwM0MwMTA4MDBBQzIyNTI1NDNDMDIwODAwMjQ0MjAyODQzQgorOjEwMEFEMDAwM0MwMTA4MDBBQzIyNTI5MDNDMDIwODAwMjQ0MjA0MDg2OQorOjEwMEFFMDAwM0MwMzA4MDAyNDYzMDg0ODNDMDQwODAwMjQ4NDA4RjRGQworOjEwMEFGMDAwM0MwNTA4MDAyNEE1MkM0QzNDMDEwODAwQUMyMjUyQjA1NworOjEwMEIwMDAwM0MwMjA4MDAyNDQyMDdBNDNDMDEwODAwQUMyNjUyOTg4RAorOjEwMEIxMDAwM0MwMTA4MDBBQzI1NTJBNDNDMDEwODAwQUMyMzUyQUNCNworOjEwMEIyMDAwM0MwMTA4MDBBQzI0NTJCNDNDMDEwODAwQUMyMjUyQjg4RAorOjEwMEIzMDAwM0MwMTA4MDBBQzIzNTI0QzNDMDEwODAwQUMyMDUyNTg0OAorOjEwMEI0MDAwM0MwMTA4MDBBQzIwNTI1QzNDMDEwODAwQUMyMDUyNjAyMworOjEwMEI1MDAwM0MwMTA4MDBBQzIwNTI2NDNDMDEwODAwQUMyMDUyNjgwMworOjEwMEI2MDAwM0MwMTA4MDBBQzIwNTI2QzNDMDEwODAwQUMyMDUyNzBFMworOjEwMEI3MDAwM0MwMTA4MDBBQzI0NTI3NDNDMDEwODAwQUMyMDUyNzhCRgorOjEwMEI4MDAwM0MwMTA4MDBBQzIwNTI3QzNDMDEwODAwQUMyMDUyODBBMworOjEwMEI5MDAwM0MwMTA4MDBBQzIwNTI4NDNDMDEwODAwQUMyMDUyODg4MworOjEwMEJBMDAwM0MwMTA4MDBBQzI2NTI4QzNDMDEwODAwQUMyNjUyOTQ1MworOjEwMEJCMDAwM0MwMTA4MDBBQzIwNTI5QzNDMDEwODAwQUMyNTUyQTAyRQorOjEwMEJDMDAwM0MwMTA4MDBBQzIzNTJBODBFMDAwNTVBMDAwMDAwMDBBQQorOjEwMEJEMDAwOEY4MzAwMDQzQzAyMDgwMDhDNDIwMDIwMTA2MjAwMUYzQQorOjEwMEJFMDAwMDAwMDg4MjEyNzkyRkZCMDNDMTAwODAwMjYxMDUyRTQzNAorOjEwMEJGMDAwM0MwMjA4MDA4QzQyMDAyMDI0MDUwMDAxMDIyNTE4MDQ1NAorOjEwMEMwMDAwMDA0MzIwMjQ4RjgyMDAwNDAwNDMxMDI0NTA0NDAwMEMzMQorOjEwMEMxMDAwMjYzMTAwMDExMDgwMDAwOEFGOTAwMDFDOEU0MzAwMDBCOAorOjEwMEMyMDAwM0MwMjgwMDBBQzQzMDA5MDBFMDAwRDBDQUUwNTAwMENBMQorOjEwMEMzMDAwMEEwMDAyREUyNjMxMDAwMUFFMDAwMDBDMjYzMTAwMDE2MAorOjEwMEM0MDAwMkUyMjAwMDIyNjEwMDAzODE0NDBGRkU5MjY1MjAwMDQyQworOjEwMEM1MDAwM0MwMjA4MDA4QzQyMDAyMEFGODIwMDA0M0MxMDgwMDA1RgorOjEwMEM2MDAwOEUxMTAwMDAzMjIyMDAwNzEwNDBGRkRBOEY4MzAwMDQ0QgorOjEwMEM3MDAwMzIyMjAwMDExMDQwMDAyMTMyMjIwMDAyOEUwMjAxMDBDNworOjEwMEM4MDAwQUUwMjAwMjA4RTAyMDEwNEFFMDIwMEE4MEUwMDAxRjZBMgorOjEwMEM5MDAwOEUwNDAxMDA5MjAyMDEwQjMwNDMwMEZGMkM2MjAwMUQwNAorOjEwMENBMDAwNTQ0MDAwMDQwMDAzMTA4MDBFMDAwMjEwMEEwMDAyRkZFRQorOjEwMENCMDAwMDAwMDAwMDAwMDUzMTAyMThDNDIwMDAwMDA0MEY4MDlBMQorOjEwMENDMDAwMDAwMDAwMDAxMDQwMDAwNDNDMDI4MDAwOEM0MzAxMDQzRQorOjEwMENEMDAwM0MwMjYwMjBBQzQzMDAxNDNDMDIwODAwOEM0MjAwMzQwQgorOjEwMENFMDAwM0MwNDQwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxMzgxNQorOjEwMENGMDAwM0MwMTA4MDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMTBGNworOjEwMEQwMDAwMzIyMjAwMDQzQzEwODAwMDhFMDIwMTQwQUUwMjAwMjAxRQorOjEwMEQxMDAwMEUwMDAxRjY4RTA0MDE0MDBFMDAwMzk3MDAwMDAwMDA1MworOjEwMEQyMDAwM0MwMjQwMDBBRTAyMDE3ODNDMDIwODAwOEM0MjAwMzhEMAorOjEwMEQzMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM4MzIyMjAwMDRBOQorOjEwMEQ0MDAwMTA0MEZGQTQ4RjgzMDAwNDNDMTA4MDAwOEUwMjAxODBCRAorOjEwMEQ1MDAwQUUwMjAwMjAwRTAwMDFGNjhFMDQwMTgwOEUwMzAxODA5OQorOjEwMEQ2MDAwMjQwMjBGMDAxNDYyMDAwNzNDMDI4MDA4OEUwMjAxODhGMgorOjEwMEQ3MDAwM0MwMzAwRTAzMDQyRkZGRjAwNDMxMDI1MEEwMDAzM0IyNAorOjEwMEQ4MDAwQUUwMjAwODAzNDQyMDA4MDkwNDIwMDAwMjQwMzAwNTBGNAorOjEwMEQ5MDAwMzA0MjAwRkYxNDQzMDAwNzAwMDAwMDAwMEUwMDAzNzRGRgorOjEwMERBMDAwMDAwMDAwMDAxNDQwMDAwMzAwMDAwMDAwMEUwMDA5NUQ3OAorOjEwMERCMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDNDM0MwNDQwMDA2MworOjEwMERDMDAwM0MwMzgwMDAyNDQyMDAwMUFDNjQwMUI4M0MwMTA4MDBFRgorOjEwMEREMDAwQUMyMjAwM0MwQTAwMDJDMzhGODMwMDA0M0MwMjkwMDA1NgorOjEwMERFMDAwMzQ0MjAwMDEwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBGNworOjEwMERGMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFNQorOjEwMEUwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDFDMQorOjEwMEUxMDAwMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTA0QworOjEwMEUyMDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMTgzMAorOjEwMEUzMDAwMEUwMDAzNDUzMEIwMDBGRjhGODNGRkE4MDIyMDIwMjE2MQorOjEwMEU0MDAwOTA2MjAwMjUwMjAyODAyNUEwNzAwMDI1OEM3MDAwMTg5OQorOjEwMEU1MDAwM0MwMjgwMDAwRTAwMDM1MDAyMDI4MDI0MTYwMDAwMEFBQgorOjEwMEU2MDAwOEZCRjAwMTgzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUzNQorOjEwMEU3MDAwMjQwMjAwMDJBQzcxMDFDMEEwNjIwMUM0M0MwMjEwMDA1NworOjEwMEU4MDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1MgorOjEwMEU5MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTAxQQorOjEwMEVBMDAwM0MwMzgwMDA5NDYyMDE4NDMwNDIwMjAwMTA0MDAwMDUzRgorOjEwMEVCMDAwMDAwMDIwMjEwRTAwMEZDRDAwMDAwMDAwMEEwMDAzOEE3MAorOjEwMEVDMDAwMjQwNDAwMDE4QzYyMDE4ODA0NDAwMDBBOEZCRjAwMTBENgorOjEwMEVEMDAwOEM2MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBBMworOjEwMEVFMDAwMTQ0MzAwMDQyNDA0MDAwMThGODJGRkE4OTA0MjAwMDhFQworOjEwMEVGMDAwOEZCRjAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMThGQworOjEwMEYwMDAwOEY4MkZGQUMyNDAzMDAwMTI0MDUwMDAxQTA0MDAwMUFEOQorOjEwMEYxMDAwOEY4MkZGQThBNDQzMDAxNjNDMDI4MDAwMEEwMDAzNTVGQworOjEwMEYyMDAwOEM0NDAxNDA4Rjg1RkZBODI3QkRGRkUwQUZCRjAwMUNBOAorOjEwMEYzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTBBMjAwMDAyMworOjEwMEY0MDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkIyMworOjEwMEY1MDAwMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDA1M0MwMjgwMDA4MworOjEwMEY2MDAwMjQwMjAwNTAxNDgyMDA4MThGQkYwMDFDM0MwMjgwMDBDQworOjEwMEY3MDAwOTA0MjAxNDgzMDQyMDBGRjI0NDNGRkZGMkM2MjAwMDVFRAorOjEwMEY4MDAwMTA0MDAwN0E4RkJGMDAxQzAwMDMxMDgwM0MwMzA4MDA1MworOjEwMEY5MDAwMjQ2MzUxREMwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDgxMworOjEwMEZBMDAwMDAwMDAwMDAzQzExODAwMDhFMjQwMTQwMEUwMDAzNDUyQgorOjEwMEZCMDAwOEY5MkZGQTg4RTUwMDAwQzhFMjIwMTQ0MTYwMjAwMDI3MAorOjEwMEZDMDAwMjQwMjAwMDFBRTQyMDAwQzBFMDAwMzUwOEUyNDAxNDBBQQorOjEwMEZEMDAwOEUyMjAxNDQxNDUwMDAwNjhGQkYwMDFDOEZCMjAwMThFRgorOjEwMEZFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjM5MjdCRDAwMjAwOAorOjEwMEZGMDAwOEU0MjAwMEMwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTA5RgorOjEwMTAwMDAwM0MwNDgwMDA4QzgzMDE0NDMwNDJGRkZGMTQ2MjAwMDlERAorOjEwMTAxMDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEwOEM4MjAxNDAwNAorOjEwMTAyMDAwQUM4MjAyMDAzQzAyMTAwMEFDODIwMjM4MEEwMDA0MjlBMworOjEwMTAzMDAwOEZCRjAwMUM5NEEyMDAxMDBBMDAwNDIyMDAwMDAwMDBEMAorOjEwMTA0MDAwMjQwMjAwMjAxNDgyMDAwRTNDMTE4MDAwOTRBMjAwMTJBMQorOjEwMTA1MDAwM0MwMzgwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDVCMgorOjEwMTA2MDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEyMEEwMDAzRkNGOAorOjEwMTA3MDAwOEZCRjAwMUM5NEEyMDAxMjBBMDAwNDIyMDAwMDAwMDA4RQorOjEwMTA4MDAwOEUyNDAxNDAwRTAwMDM0NThGOTJGRkE4OTY0MjAwMTI2NQorOjEwMTA5MDAwOEUyMzAxNDQzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDE5QQorOjEwMTBBMDAwQTY0MjAwMTIwRTAwMDM1MDhFMjQwMTQwOEUyMjAxNDRGRAorOjEwMTBCMDAwMTYwMjAwMDY4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRGQgorOjEwMTBDMDAwOEZCMDAwMTAwQTAwMDM4RTI3QkQwMDIwOTY0MjAwMTI0OAorOjEwMTBEMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE0M0MwMzgwMDBENworOjEwMTBFMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4OEZCRjAwMUM3NAorOjEwMTBGMDAwMjQwMjAwMDE4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDRAorOjEwMTEwMDAwQTRBMjAwMTQwQTAwMTQyNDI3QkQwMDIwOTRBMjAwMTRGNQorOjEwMTExMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE2M0MwMzgwMDA5NAorOjEwMTEyMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4MjQwMjAwMDE3NgorOjEwMTEzMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA0OQorOjEwMTE0MDAwQTRBMjAwMTYwQTAwMEIwMDI3QkQwMDIwOTRBMjAwMTZERQorOjEwMTE1MDAwMTQ0MDAwMDY4RkJGMDAxQzNDMDIwODAwOEM0MjAwNzA0NworOjEwMTE2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDcwOEZCMjAwMTgzQworOjEwMTE3MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBERAorOjEwMTE4MDAwMjdCREZGRDhBRkIyMDAxODhGOTJGRkE4QUZCMTAwMTRFRgorOjEwMTE5MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwM0MwMjgwMDAxNgorOjEwMTFBMDAwMzQ1MTAxMDA4QzUwMDEwMDkyNDIwMDAwOTIyMzAwMDk0QQorOjEwMTFCMDAwMzA0NDAwRkYyNDAyMDAxRjEwNjIwMEFCMjg2MjAwMjBCMAorOjEwMTFDMDAwMTA0MDAwMTkyNDAyMDAzODI4NjIwMDBBMTA0MDAwMEQ2NworOjEwMTFEMDAwMjQwMjAwMEIyODYyMDAwODEwNDAwMDJFOEY4MjAwMUNBMQorOjEwMTFFMDAwMDQ2MDAxMDMyODYyMDAwMjE0NDAwMDJBOEY4MjAwMUM2MAorOjEwMTFGMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDIwMEEwMDA1NEM2MgorOjEwMTIwMDAwOEZCMzAwMUMxMDYyMDA2MDI4NjIwMDBCMTQ0MDAwRjlDQworOjEwMTIxMDAwOEZCRjAwMjAyNDAyMDAwRTEwNjIwMDc4OEY4MjAwMUMxNQorOjEwMTIyMDAwMEEwMDA1NEM4RkIzMDAxQzEwNjIwMEQxMjg2MjAwMzlGRgorOjEwMTIzMDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwRTRGQworOjEwMTI0MDAwMjg2MjAwMzcxMDQwMDBDMjI0MDIwMDM1MTA2MjAwRDgyNgorOjEwMTI1MDAwOEZCRjAwMjAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwMkRDOAorOjEwMTI2MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlEMAorOjEwMTI3MDAwMTA2MjAwQzg4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMwRAorOjEwMTI4MDAwMTA2MjAwQTI4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMyMworOjEwMTI5MDAwOEY4MjAwMUM4QzQyMDAwQzEwNDAwMEQ2OEZCRjAwMjBCMworOjEwMTJBMDAwMEUwMDBENDUwMDAwMDAwMDNDMDM4MDAwMzQ2MzAxMDA4NworOjEwMTJCMDAwOEM2MjAwMDA4Rjg1MDAxODk0NjcwMDA4OTQ2NjAwMEMwQgorOjEwMTJDMDAwQUNBMjAwMDA4QzY0MDAwNDhGODIwMDFDMDAwNjM0MDA3NQorOjEwMTJEMDAwQUNBNDAwMDQ5NDQ4MDAxRThDNjIwMDE4MDAwNzNDMDA3NworOjEwMTJFMDAwMDBFODM4MjVBQ0EyMDAwODhDNjIwMDFDMjQwNDAwMDEzMAorOjEwMTJGMDAwQUNBMjAwMEM5MDYyMDAwQTAwQzIzMDI1QUNBNjAwMTAxRgorOjEwMTMwMDAwQUNBMDAwMTRBQ0EwMDAxOEFDQTcwMDFDMEEwMDA1MEI5MAorOjEwMTMxMDAwOEZCRjAwMjA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwQjU1MworOjEwMTMyMDAwOEZCRjAwMjAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUNDMgorOjEwMTMzMDAwOTYyNDAwMDg5NjI1MDAwQzk0NDMwMDFFMDAwNDIyMDIwNworOjEwMTM0MDAwOTYyNjAwMEU4RjgyMDAxODAwMDQyNjAwMDA4MzIwMjVCOAorOjEwMTM1MDAwMDAwNTJDMDAzQzAzMDA4MDAwQTYyODI1MDA4MzIwMjVFMgorOjEwMTM2MDAwQUM0MDAwMDBBQzQwMDAwNEFDNDAwMDA4QUM0MDAwMENCNQorOjEwMTM3MDAwQUM0NTAwMTBBQzQwMDAxNEFDNDAwMDE4QUM0NDAwMUM1QworOjEwMTM4MDAwMEEwMDA1MEEyNDA0MDAwMTk2MjIwMDBDMTQ0MDAwMThFQgorOjEwMTM5MDAwMDAwMDAwMDA5MjQyMDAwNTMwNDIwMDEwMTQ0MDAwMTQ4QQorOjEwMTNBMDAwMDAwMDAwMDAwRTAwMDM0NTAyMDAyMDIxOTI0MjAwMDVDQgorOjEwMTNCMDAwMDIwMDIwMjEzNDQyMDAxMDBFMDAwMzUwQTI0MjAwMDUxQQorOjEwMTNDMDAwOTI0MjAwMDAyNDAzMDAyMDMwNDIwMEZGMTA0MzAwODhCNgorOjEwMTNEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBNQorOjEwMTNFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxMDM2MjdCRDAwMjhGRQorOjEwMTNGMDAwMDAwMDAwMEQwQTAwMDU0QjhGQkYwMDIwOEM0MjAwMEMzRQorOjEwMTQwMDAwMTA0MDAwN0M4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA0MgorOjEwMTQxMDAwOEUyMjAwMDQ4Rjg0MDAxODk2MjMwMDBDQUM4MjAwMDBGQQorOjEwMTQyMDAwM0MwMjgwMDg5NDQ1MDAyQzhGODIwMDFDMDAwMzFDMDBBNQorOjEwMTQzMDAwMzBBNUZGRkY5NDQ2MDAxRTNDMDI0MDBFMDA2NTE4MjVCMworOjEwMTQ0MDAwMDBDMjMwMjVBQzgzMDAwNEFDODAwMDA4QUM4MDAwMENFNgorOjEwMTQ1MDAwQUM4MDAwMTBBQzgwMDAxNEFDODAwMDE4QUM4NjAwMUM3RQorOjEwMTQ2MDAwMEEwMDA1MEEyNDA0MDAwMTBFMDAwMzQ1MDIwMDIwMjFBMQorOjEwMTQ3MDAwOEY5M0ZGQUMwMjAwMjAyMTBFMDAwMzUwQTY2MDAwMENFOQorOjEwMTQ4MDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDAxOEY4MjAwMUM1QworOjEwMTQ5MDAwOEM0MjAwMEMxMDQwMDA1NzhGQkYwMDIwMEUwMDBENDVGRAorOjEwMTRBMDAwMDAwMDAwMDA5NjIyMDAwQzhGODMwMDE4MDAwMjE0MDAzOAorOjEwMTRCMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEU0NDAwMzhFMAorOjEwMTRDMDAwOEY4MjAwMUNBQzY0MDAwQzhFNDYwMDNDOTQ0NTAwMUVDQworOjEwMTREMDAwM0MwMjQwMUZBQzY2MDAxMDAwQTIyODI1OEU2MjAwMDQ2QQorOjEwMTRFMDAwMjQwNDAwMDFBQzYyMDAxNEFDNjAwMDE4QUM2NTAwMUM2MAorOjEwMTRGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MworOjEwMTUwMDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MjQwMjAwMjBBQQorOjEwMTUxMDAwMTA4MjAwMzk4RkIzMDAxQzBFMDAwRjFGMDAwMDAwMDA2NgorOjEwMTUyMDAwMTA0MDAwMzQ4RkJGMDAyMDNDMDM4MDAwOEM2MjAxRjgyMworOjEwMTUzMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNzAwMUMwQTA2MjAxQzQ5RQorOjEwMTU0MDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwNTRCOEZCRjAwMjA3RQorOjEwMTU1MDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTgyMworOjEwMTU2MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRTY4MjdCRDAwMjg0QworOjEwMTU3MDAwOTYyNTAwMEMwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM5NQorOjEwMTU4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBFOERCQQorOjEwMTU5MDAwMjdCRDAwMjgwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg0NQorOjEwMTVBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUI4MjdCRDAwMjhCQworOjEwMTVCMDAwOTIyNTAwMEQwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg2RAorOjEwMTVDMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjg0QQorOjEwMTVEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBMworOjEwMTVFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUUwMjdCRDAwMjg1NAorOjEwMTVGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MgorOjEwMTYwMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4M0MwMzgwMDBENQorOjEwMTYxMDAwOEM2MjAyNzgwNDQwRkZGRTI0MDIwMDAyQUM2NDAyNDBBNworOjEwMTYyMDAwQTA2MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUM2MjAyNzhCMQorOjEwMTYzMDAwQTM4MDAwMTAwM0UwMDAwOEEzODAwMDExM0MwMzgwMDA5OQorOjEwMTY0MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDE0QUM2MjAyNDA3QworOjEwMTY1MDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhFMQorOjEwMTY2MDAwQUM2MjAyNzgzQzAyNjAwMDAzRTAwMDA4OEM0MjU0MDQ0MworOjEwMTY3MDAwOTA4MzAwMzAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y0OQorOjEwMTY4MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTA4MjAwNENBNworOjEwMTY5MDAwOTQ4MzAwNEUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEMxQworOjEwMTZBMDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM1MworOjEwMTZCMDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA4MgorOjEwMTZDMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJERgorOjEwMTZEMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThCQworOjEwMTZFMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhCQQorOjEwMTZGMDAwQTUwQTAwMjIwM0UwMDAwODAwMDAwMDAwMjdCREZGRDg3MworOjEwMTcwMDAwQUZCMjAwMTgzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUM4OQorOjEwMTcxMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDBDQworOjEwMTcyMDAwM0MwMjYwMDA4QzQyNTQwNDkyMjIwMDBDM0MxNDA4MDBERAorOjEwMTczMDAwOTI5NDAwRjczMDQzMDBGRjI0MDIwMDAxMTA2MjAwMzI0RgorOjEwMTc0MDAwMDA4MDk4MjEyNDAyMDAwMjE0NjIwMDM1MzY1MDAwODA4NworOjEwMTc1MDAwMEUwMDEzRkUwMDAwMDAwMDkyMDIwMDRDMjQwM0ZGODBFNAorOjEwMTc2MDAwM0MwNDgwMDAzMDQyMDA3RjAwMDIxMUMwMjQ0MjAyNDA0RAorOjEwMTc3MDAwMDI2MjEwMjEwMDQzMTgyNEFDODMwMDk0OTI0NTAwMDhCMworOjEwMTc4MDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDcyMQorOjEwMTc5MDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkY0OAorOjEwMTdBMDAwQTYyMjAwMTIwQTAwMDVCRTI0MDJGRkZGOTYwMjAwMjBCNgorOjEwMTdCMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjQwQworOjEwMTdDMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNENCNgorOjEwMTdEMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMThBRgorOjEwMTdFMDAwOEM4MjAwNjhBQzYyMDBFNDhDODIwMDY0QUM2MjAwRTAzMQorOjEwMTdGMDAwOEM4MjAwNkNBQzYyMDBFODI0MDIwMDAxQTBBMjAwNjhBOAorOjEwMTgwMDAwMEEwMDA1REEzQzA0ODAwODBFMDAxNDE3MDAwMDAwMDBFRQorOjEwMTgxMDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNURBM0MwNDgwMDhENworOjEwMTgyMDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjE1M0MwMjgwMDhCOAorOjEwMTgzMDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkMxNworOjEwMTg0MDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEM1OTA4MzAwMDhGNAorOjEwMTg1MDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDE5MDAxMTExQzBBOAorOjEwMTg2MDAwMjQ0MjAyNDAwMjYyMTAyMTI0MDNGRjgwMDA0MzE4MjQxNgorOjEwMTg3MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYyRgorOjEwMTg4MDAwMDA0MzgwMjE4RTAyMDAwQzEwNDAwMDBEMDIwMDIwMjEzOAorOjEwMTg5MDAwMEUwMDA1NkEwMDAwMDAwMDI2MjIwMDAxMzA1MTAwRkYwMgorOjEwMThBMDAwOTIwMzAwM0MwMjM0MTAyNjAwMDIxMDJCMDAwMjEwMjM4OQorOjEwMThCMDAwMzA2MzAwN0YwMjIyODgyNDBBMDAwNUU0QTIwMzAwM0M3MgorOjEwMThDMDAwM0MwODgwMDgzNTA0MDEwMDhDODIwMEQwMzUwNzAwODA3OAorOjEwMThEMDAwQUNFMjAwM0M4QzgyMDBEMEFEMDIwMDAwOTBFNTAwNENGMAorOjEwMThFMDAwOTA4NjAwQzU5MEUzMDA0QzkwODQwMEM1MjQwMkZGODBFMAorOjEwMThGMDAwMDBBMjI4MjQzMDYzMDA3RjMwODQwMEZGMDBBNjI4MjU0MgorOjEwMTkwMDAwMDA2NDE4MkExMDYwMDAwMjMwQTUwMEZGMzhBNTAwODA4RQorOjEwMTkxMDAwQTBFNTAwNENBMTA1MDAwOTNDMDI4MDA4OTA0MzAwMEVBMAorOjEwMTkyMDAwMzQ0NDAwODAzQzA1ODAwMEEwNDMwMDBBOEM4MzAwMThFQQorOjEwMTkzMDAwM0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0QUM4MzAwMTg5MgorOjEwMTk0MDAwOENBMjAxRjgwNDQwRkZGRTAwMDAwMDAwQUNCMzAxQzAwRgorOjEwMTk1MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGQgorOjEwMTk2MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAyQTBBMjAxQzRBNQorOjEwMTk3MDAwMjdCRDAwMjgzQzAyMTAwMDAzRTAwMDA4QUNBMjAxRjhEQgorOjEwMTk4MDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDAzNQorOjEwMTk5MDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDAyMDA4MDMwMjFDOQorOjEwMTlBMDAwQTBBMDAwMDA5MEEyMDAwMDhGODQwMDE0MDAwMjExQzBDQgorOjEwMTlCMDAwMjQ0MjAyNDAyNDgzMDA0MDAwODIyMDIxMjQwMkZGODAzMAorOjEwMTlDMDAwMDA4MjIwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjFEQworOjEwMTlEMDAwM0MwMjgwMDBBQzQ0MDAyNDAzRTAwMDA4QUNDMzAwMDBEQgorOjEwMTlFMDAwOTQ4MjAwMDY5MDgzMDAwNThDODUwMDBDOEM4NjAwMTA4NAorOjEwMTlGMDAwOEM4NzAwMTg4Qzg4MDAxQzhDODQwMDIwM0MwMTA4MDAxNworOjEwMUEwMDAwQTQyMjUyQzYzQzAxMDgwMEEwMjM1MkM1M0MwMTA4MDA5NAorOjEwMUExMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDA1OQorOjEwMUEyMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDAyRAorOjEwMUEzMDAwQUMyNDUyRTAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDhGMworOjEwMUE0MDAwMzQ0MjAxMDA4QzQ0MDAzNDNDMDM4MDAwMzQ2NTA0MDBCRgorOjEwMUE1MDAwQUM2NDAwMzg4QzQyMDAzOEFGODUwMDIwQUM2MjAwM0M5QQorOjEwMUE2MDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUE3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA2MzA4NDAwRkY4NAorOjEwMUE4MDAwMDA4MjIwMjUzQzAyODAwMEFDNDQwMDMwMDAwMDAwMDBCMQorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM4MDAwOEM2MjAwMDA5OQorOjEwMUFBMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwMDNFMDAwMDhFMworOjEwMUFCMDAwQUY4MjAwMjA5NEMyMDAwMDNDMDgwODAwOTUwODAwQ0FDQworOjEwMUFDMDAwMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTRDMjAwMDA3RQorOjEwMUFEMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCNTQ0MDAwMDE4RQorOjEwMUFFMDAwQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwOEM2MzAwQ0M1MworOjEwMUFGMDAwMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwMzA0MkZGRkY5MworOjEwMUIwMDAwMTQ0MzAwMDczQzAyODAwODAxMDcxMDJCQTRBMDAwMDAyQQorOjEwMUIxMDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwM0MwMjgwMDhBNQorOjEwMUIyMDAwMzQ0NjAxMDA4Q0MzMDAyODk0QTIwMDAwM0MwNDgwMDBDRAorOjEwMUIzMDAwMzA0MkZGRkUwMDAyMTBDMDAwNjIxMDIxQUM4MjAwM0M2NworOjEwMUI0MDAwOEM4MjAwM0MwMDYyMTgyMzE4NjAwMDA0MDAwMDAwMDAzMgorOjEwMUI1MDAwOENDMjAwMjQwQTAwMDZBNjI0NDIwMDAxOENDMjAwMjQ4NAorOjEwMUI2MDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwM0MwMzgwMDAzQworOjEwMUI3MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMUI4MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDA4OQorOjEwMUI5MDAwOTRBMjAwMDAzQzA0ODAwMDMwNDIwMDAxMDAwMjEwQzAwQQorOjEwMUJBMDAwMDA0NDEwMjE4QzQzMDQwMEFEMjMwMDAwOEM0MjA0MDQ0NworOjEwMUJCMDAwQUQyMjAwMDQzQzAyMDAyMDAzRTAwMDA4QUM4MjAwMzBBQgorOjEwMUJDMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBGNgorOjEwMUJEMDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDA2RQorOjEwMUJFMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDA5RgorOjEwMUJGMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzA3MgorOjEwMUMwMDAwMEUwMDA2N0IwMjQwMzgyMTBBMDAwNkREMDAwMDAwMDBCRAorOjEwMUMxMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDc4RAorOjEwMUMyMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDAyOAorOjEwMUMzMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDA2OQorOjEwMUM0MDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDAyMworOjEwMUM1MDAwMjQ0MjAwMDFBNjIyMDAwMDNDMDI4MDA4MzQ0MjAxMDAxOAorOjEwMUM2MDAwOTYyMzAwMDA5NDQyMDAzQzE0NDMwMDA0OEZCRjAwMUNFNAorOjEwMUM3MDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMThCMgorOjEwMUM4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBDMgorOjEwMUM5MDAwMjdCREZGRTAzQzAyODAwOEFGQkYwMDE4MzQ0MjAxMDBCRQorOjEwMUNBMDAwOEM0ODAwMzQzQzAzODAwMDM0NjkwNDAwQUM2ODAwMzg4MAorOjEwMUNCMDAwOEM0MjAwMzgzMEU3MDBGRkFGODkwMDIwQUM2MjAwM0M2NgorOjEwMUNDMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUNFMDAwOEM4MjAwMEM4QzgyMDAwQzk3ODMwMDBFQUQyMjAwMDBDOQorOjEwMUNGMDAwOEM4MjAwMTAwMDYwNDAyMUFEMjIwMDA0OEM4MjAwMTgwQworOjEwMUQwMDAwQUQyMjAwMDg4QzgyMDAxQ0FEMjIwMDBDOENBMjAwMTRCNQorOjEwMUQxMDAwQUQyMjAwMTA4QzgyMDAyMEFEMjIwMDE0OTA4MjAwMDVCQworOjEwMUQyMDAwMzA0MjAwRkYwMDAyMTIwMEFEMjIwMDE4OENBMjAwMTgwMQorOjEwMUQzMDAwQUQyMjAwMUM4Q0EyMDAwQ0FEMjIwMDIwOENBMjAwMTA1MQorOjEwMUQ0MDAwQUQyMjAwMjQ4Q0EyMDAxQ0FEMjIwMDI4OENBMjAwMjAxMQorOjEwMUQ1MDAwQUQyMjAwMkMzNDAyRkZGRkFEMjYwMDMwQUQyMDAwMzQ1MAorOjEwMUQ2MDAwNTA2MjAwMDEzNDA4RkZGRkFEMjgwMDM4NTBFMDAwMTEzOAorOjEwMUQ3MDAwM0MwMjgwMDgzQzA0ODAwODM0ODQwMTAwOTQ4MjAwNTBCNgorOjEwMUQ4MDAwMzA0MkZGRkZBRDIyMDAzQzk0ODMwMDQ0OTQ4NTAwNDQyMAorOjEwMUQ5MDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2NDE4MjExMQorOjEwMURBMDAwOTA2NDAwNTQzMEE1MDAwNzAwQTIxMDA0MEEwMDA3NDgwMAorOjEwMURCMDAwMDA0NDEwMjUzNDQyMDEwMEFEMjAwMDNDOTQ0MzAwNDQwRgorOjEwMURDMDAwOTQ0NDAwNDQzMDYzRkZGRjAwMDMxOEMyMDA2MjE4MjFFRQorOjEwMUREMDAwMzA4NDAwMDc5MDY1MDA1NDI0MDIwMDAxMDA4MjEwMDQ0MgorOjEwMURFMDAwMDAwMjEwMjcwMDQ1MTAyNEEwNjIwMDU0MDAwMDAwMDBFQgorOjEwMURGMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBFOQorOjEwMUUwMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMUUxMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQwNgorOjEwMUUyMDAwM0MwNjgwMDgzNEMyMDE1MDM0NjMwNDAwMzRDNzAxNEFDMAorOjEwMUUzMDAwMzRDNDAxMzQzNEM1MDE0MDM0QzYwMTQ0QUZBMjAwMTA5QgorOjEwMUU0MDAwMEUwMDA2QkVBRjgzMDAyMDhGQkYwMDE4MDNFMDAwMDgxRAorOjEwMUU1MDAwMjdCRDAwMjA4RjgzMDAwQzNDMDYwODAwOENDNjAwRThEQworOjEwMUU2MDAwOEY4MjAwMTQzMDYzM0ZGRjAwMDMxOTgwMDA0NjEwMjE2OQorOjEwMUU3MDAwMDA0MzEwMjEyNDAzRkY4MDAwNDMxODI0M0MwNjgwMDAwNworOjEwMUU4MDAwQUNDMzAwMjgzMDQyMDA3RjNDMDM4MDBDMDA0MzMwMjE2QgorOjEwMUU5MDAwOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxMzQ0MjAwMTAzMAorOjEwMUVBMDAwQTBDMjAwMEQ4Rjg5MDAwQzNDMDI4MDA4MzQ0MjAxMDA2MgorOjEwMUVCMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDFDNworOjEwMUVDMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVGRAorOjEwMUVEMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3OTBGNAorOjEwMUVFMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3OTBGRgorOjEwMUVGMDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwNzkwMjQ0MzAwMDEyNgorOjEwMUYwMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkIyMworOjEwMUYxMDAwNTA0MDAwMEEyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDNGNQorOjEwMUYyMDAwM0MwMzgwMDgwQTAwMDc5RDI0MDcwMDAxMzQ2MzAxMDA3OAorOjEwMUYzMDAwOTQ2MjAwNEMyNDQyMDAwMUE0NjIwMDRDMDAwOTEzODIwOAorOjEwMUY0MDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjE2OQorOjEwMUY1MDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM0MEEwMDA3QURDMQorOjEwMUY2MDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwN0FEMDA4MDI4MjFFQworOjEwMUY3MDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ1MkMwMEEwMDA2RjIwQworOjEwMUY4MDAwMDAwMDAwMDAyN0JERkY5MEFGQjYwMDY4QUZCNTAwNjQ0OQorOjEwMUY5MDAwQUZCNDAwNjBBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQ1MworOjEwMUZBMDAwQUZCRjAwNkNBRkIwMDA1MDhDOTAwMDAwMDA4MEIwMjEzQgorOjEwMUZCMDAwM0MwMjA4MDA4QzQyMDBFODk2MDQwMDMyOEY4MzAwMTQzMworOjEwMUZDMDAwMjQxNEZGODAzMDg0M0ZGRjAwNjIxODIxMDAwNDIxODAyOAorOjEwMUZEMDAwMDA2NDE4MjEwMDc0MTAyNDNDMTM4MDAwMDBBMDkwMjE5QworOjEwMUZFMDAwOTBBNTAwMDBBRTYyMDAyODkyMDQwMDMyM0MwMjgwMENGMgorOjEwMUZGMDAwMzA2MzAwN0YwMDYyODgyMTMwODQwMEMwMjQwMjAwNDBFQQorOjEwMjAwMDAwMTQ4MjAwMzIwMDAwQTgyMThFMzUwMDM4OEUyMjAwMTg3QworOjEwMjAxMDAwMTQ0MDAwMDIyNDAyMDAwMUFFMjIwMDE4OTIwMjAwM0M4QgorOjEwMjAyMDAwMzA0MjAwMjAxNDQwMDAwRThGODMwMDE0MDAwNTExQzBDMAorOjEwMjAzMDAwMjQ0MjAyNDAwMDYyMTgyMTMwNjQwMDc4M0MwMjAwODA5MworOjEwMjA0MDAwMDA4MjIwMjUwMDc0MTgyNEFFNjMwODAwQUU2NDA4MTBENgorOjEwMjA1MDAwOEUyMjAwMTg4RTAzMDAwODAwNDMxMDIxQUUyMjAwMThDMworOjEwMjA2MDAwOEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMDA2MjE4MkJCRgorOjEwMjA3MDAwMTA2MDAwNDMwMDAwMDAwMDkyNDIwMDAwMjQ0MjAwMDE3MgorOjEwMjA4MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZEMQorOjEwMjA5MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTRDRgorOjEwMjBBMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMzA2MzAwN0ZCQworOjEwMjBCMDAwMDA4MjIwMjEzQzAyODAwQTAwOTQyMDI0MDA2MjE4MjEyMgorOjEwMjBDMDAwQUU2NDAwMjQwQTAwMDhCRUFFQzMwMDAwOTIwMzAwMzJEMgorOjEwMjBEMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDVEQQorOjEwMjBFMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4MkVCNQorOjEwMjBGMDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMTg0QQorOjEwMjEwMDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUM3NworOjEwMjExMDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjE1MQorOjEwMjEyMDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDEwOQorOjEwMjEzMDAwMzA0MkZGRkZBRjgyMDAwQzBFMDAwNkYyQUZBMDAwMUM4MQorOjEwMjE0MDAwOTYwMjAwMzI4RjgzMDAxNDNDMDQwODAwOEM4NDAwRTg1RgorOjEwMjE1MDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjEwNAorOjEwMjE2MDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEVBRAorOjEwMjE3MDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMERDNQorOjEwMjE4MDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDAzMAorOjEwMjE5MDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDA0RAorOjEwMjFBMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNEMzMworOjEwMjFCMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkYxMAorOjEwMjFDMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhGOAorOjEwMjFEMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDcyRAorOjEwMjFFMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzA1QworOjEwMjFGMDAwQUM2MjAwM0MwQTAwMDg1NjhDODIwMDJDOTQ4MjAwNDA5RAorOjEwMjIwMDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzg0RQorOjEwMjIxMDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzRERAorOjEwMjIyMDAwQUM2MjAwMzgwQTAwMDg2NTNDMDM4MDAwMjdBNTAwMzgyRQorOjEwMjIzMDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjdCQTdBMDAwNDhCMAorOjEwMjI0MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzg4MAorOjEwMjI1MDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDVEQgorOjEwMjI2MDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI5OQorOjEwMjI3MDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdCOQorOjEwMjI4MDAwQUY4MzAwMjA5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjEwQQorOjEwMjI5MDAwMDA0MzEwMjMwQTAwMDg3QjMwNDNGRkZGOTQ4MzAwNEU2NQorOjEwMjJBMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjMxOAorOjEwMjJCMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NGQworOjEwMjJDMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OEJBNworOjEwMjJEMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkI3NworOjEwMjJFMDAwMTQ0MDAwMDU4RjgyMDAyMDk0ODIwMDNDMDA2MjEwMjM3RAorOjEwMjJGMDAwMzA0M0ZGRkY4RjgyMDAyMEFDNTUwMDAwQUM0MDAwMDQ0QgorOjEwMjMwMDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTAwMAorOjEwMjMxMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMjMyMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRGMQorOjEwMjMzMDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE5NQorOjEwMjM0MDAwOTA2NTAwNTQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQ4NAorOjEwMjM1MDAwMDA0NTEwMjVBMDYyMDA1NDk0ODMwMDQyOTYyMjAwMEU4RQorOjEwMjM2MDAwNTA0MzAwMDFBMzg2MDAxMDkyNDIwMDAwMjQ0MjAwMDE2NQorOjEwMjM3MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZERQorOjEwMjM4MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTREQworOjEwMjM5MDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjExOAorOjEwMjNBMDAwMjQwMkZGODAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEFFOAorOjEwMjNCMDAwMDA2MjE4MjEzQzAyODAwMEFDNDQwMDI0QUVDMzAwMDAzRgorOjEwMjNDMDAwOEZCRjAwNkM4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjA1QgorOjEwMjNEMDAwOEZCMzAwNUM4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTBBMworOjEwMjNFMDAwMDNFMDAwMDgyN0JEMDA3MDI3QkRGRkQ4QUZCMzAwMUM3NQorOjEwMjNGMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBGMworOjEwMjQwMDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDBENDVEMworOjEwMjQxMDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjQyMDAwOEY4MjAwMTg4RjgzMDAxQ0FDNTEwMDAwQUM1MjAwMDQ1NgorOjEwMjQzMDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBMQorOjEwMjQ0MDAwQUM0MDAwMTg5NDYzMDAxRTAyMDM4MDI1QUM1MDAwMUNCMQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDE1MworOjEwMjQ2MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRGMworOjEwMjQ3MDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MzBBNUZGRkY5RQorOjEwMjQ4MDAwMEEwMDA4QzgzMEM2MDBGRjNDMDI4MDA4MzQ0MzAxMDAzRgorOjEwMjQ5MDAwOTQ2MjAwMEUzQzA4MDgwMDk1MDgwMEM2MzA0NkZGRkYxNQorOjEwMjRBMDAwMTRDMDAwMDQzNDAyRkZGRjk0NjUwMERBMEEwMDA5MTUyNQorOjEwMjRCMDAwOEY4NDAwMTQxMEMyMDAyNzAwMDAwMDAwOTQ2MjAwNEVCOAorOjEwMjRDMDAwOTQ2NDAwM0MzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkJBMworOjEwMjREMDAwMzA4N0ZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjM2OQorOjEwMjRFMDAwMDBFMjEwMjMzMDQ0RkZGRjAwODgxMDJCMTA0MDAwMEU0NAorOjEwMjRGMDAwMDBFODEwMjMzQzAyODAwODM0NDQwMTAwMjQwMzAwMDE1QQorOjEwMjUwMDAwMzQ0MjAwODBBNDQzMDAxNjI0MDJGRkZGQTQ4MjAwMEU4MAorOjEwMjUxMDAwOTQ4NTAwREE4Rjg0MDAxNDAwMDAzMDIxMzBBNUZGRkY3RAorOjEwMjUyMDAwMEEwMDA4RUQzQzA3NjAyMDAwNDQxMDJBMTA0MDAwMDkxMgorOjEwMjUzMDAwM0MwMjgwMDgzNDQzMDA4MDk0NjIwMDE2MzA0MjAwMDE1RgorOjEwMjU0MDAwMTA0MDAwMDQzQzAyODAwMDk0NDIwMDdFMjQ0MjAwMTRBQgorOjEwMjU1MDAwQTQ2MjAwMTYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTBCMQorOjEwMjU2MDAwM0MwMjgwMDhBRkJGMDAxQ0FGQjAwMDE4MzQ0MjAxMDAyRAorOjEwMjU3MDAwOTQ0MzAwNDI5NDQyMDA0QzEwNDAwMDE5MzA2OEZGRkYyMQorOjEwMjU4MDAwOTM4MzAwMTAyNDAyMDAwMTE0NjIwMDI5OEZCRjAwMUNGNQorOjEwMjU5MDAwM0MwNjgwMDgzNEQwMDEwMDAwMDgxMEMyMDA1MDEwMjExMQorOjEwMjVBMDAwOTA0MjAwNTQzMTAzMDAwNzM0QzcwMTQ4MzA0MjAwRkYxNQorOjEwMjVCMDAwMDA2MjEwMDczMDQyMDAwMTM0QzkwMTRFMzRDNDAxMkNCRQorOjEwMjVDMDAwMzRDNTAxM0UxMDQwMDAxNjM0QzYwMTQyMEUwMDA2QkU1RQorOjEwMjVEMDAwQUZBOTAwMTA5NjAyMDA0MjBBMDAwOTMyMzA0OEZGRkZGRQorOjEwMjVFMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODMwMDQ0OTQ4MjAwNDJGOQorOjEwMjVGMDAwMTA0MzAwMEY4RkJGMDAxQzk0ODIwMDQ0QTQ4MjAwNDI0RAorOjEwMjYwMDAwOTQ4MjAwNTBBNDgyMDA0RThDODIwMDM4QUM4MjAwMzA0QworOjEwMjYxMDAwOTQ4MjAwNDBBNDgyMDAzRTk0ODIwMDRBQTQ4MjAwNDgzMgorOjEwMjYyMDAwOEZCRjAwMUM4RkIwMDAxODBBMDAwOEYwMjdCRDAwMjBFMworOjEwMjYzMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwMjdCREZGQTBEMQorOjEwMjY0MDAwQUZCMTAwNEMzQzExODAwMEFGQkYwMDU4QUZCMzAwNTQ5NQorOjEwMjY1MDAwQUZCMjAwNTBBRkIwMDA0ODM2MjYwMTg4OTBDMjAwMDNFOAorOjEwMjY2MDAwMzA0NDAwN0ZBM0E0MDAxMDhFMzIwMTgwOTBDMjAwMDA4RAorOjEwMjY3MDAwMzA0MzAwN0YyNDAyMDAwMzEwNjIwMDNCQUY5MjAwMTQzRAorOjEwMjY4MDAwMjg2MjAwMDQxMDQwMDAwNjI0MDIwMDA0MjQwMjAwMDIxNAorOjEwMjY5MDAwMTA2MjAwMDk4RkJGMDA1ODBBMDAwQUZCOEZCMzAwNTQ3NAorOjEwMjZBMDAwMTA2MjAwNEQyNDAyMDAwNTEwNjIwMTRFOEZCRjAwNThEOQorOjEwMjZCMDAwMEEwMDBBRkI4RkIzMDA1NDAwMDQxMUMwMDI0MjEwMjEyQgorOjEwMjZDMDAwMjQwNEZGODAyNDQyMDI0MDAwNDQxMDI0MjY0MzAwNDA5QQorOjEwMjZEMDAwQUUyMjAwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE5MQorOjEwMjZFMDAwOTA2MjAwM0NBRkEzMDAzQzAwNDQxMDI1QTA2MjAwM0M3NworOjEwMjZGMDAwOEZBMzAwM0M5MDYyMDAzQzMwNDIwMDQwMTA0MDAxNkNDRgorOjEwMjcwMDAwOEZCRjAwNTgzQzEwODAwOEEzODAwMDEwMzYxMDAxMDBENQorOjEwMjcxMDAwOEUwMjAwRDA4QzYzMDAzNDI3QTQwMDNDMjdBNTAwMTA1MworOjEwMjcyMDAwMDA0MzEwMjEwRTAwMDdBRkFFMDIwMEQwOTNBMjAwMTBBQworOjEwMjczMDAwM0MwMzgwMDBBMjAyMDBDNThDNjIwMjc4MDQ0MEZGRkVDOAorOjEwMjc0MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDRBNAorOjEwMjc1MDAwM0MwMjEwMDBBQzYyMDI3ODBFMDAwOTI1MDAwMDAwMDA2NworOjEwMjc2MDAwMEEwMDBBRkE4RkJGMDA1ODNDMDU4MDA4OTBDMzAwMDE5OAorOjEwMjc3MDAwOTBBMjAwMEIxNDQzMDE0RThGQkYwMDU4MzRBNDAwODA3OAorOjEwMjc4MDAwOEM4MjAwMTg5MDgyMDA0QzkwQTIwMDA4M0MwMjYwMDBFRAorOjEwMjc5MDAwOEM0MjU0MDQ4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkZCQworOjEwMjdBMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTg3QworOjEwMjdCMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjQyQworOjEwMjdDMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDE0QUM2MjAxQzBFRAorOjEwMjdEMDAwMEEwMDBBQzIyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDFEMworOjEwMjdFMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MjdBNDAwMTgzNworOjEwMjdGMDAwMzYwNTAxMTAyNDA2MDAwMzNDMDI2MDAwOEM0MjU0MDQ5QworOjEwMjgwMDAwMEUwMDBFMDgwMDAwMDAwMDI3QTQwMDI4MzYwNTAxRTA5NQorOjEwMjgxMDAwMEUwMDBFMDgyNDA2MDAwMzhGQTIwMDI4MzYwMzAxMDBENAorOjEwMjgyMDAwQUUwMjAwNjQ4RkEyMDAyQ0FFMDIwMDY4OEZBMjAwMzBCRQorOjEwMjgzMDAwQUUwMjAwNkM5M0E0MDAxODkwNjMwMEM1MjQwMkZGODBEMAorOjEwMjg0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4NDAwN0ZBRgorOjEwMjg1MDAwMzEyMjAwN0YwMDgyMTAyQTU0NDAwMDAxMzkyOTAwODA3MworOjEwMjg2MDAwMDAwNDExQzAyNDQyMDI0MDI0MDNGRjgwMDI0MjEwMjFEMAorOjEwMjg3MDAwMDA0MzEwMjRBRTIyMDA5NDI2NDIwMDQwMzA0MjAwN0ZFNAorOjEwMjg4MDAwM0MwMzgwMDYwMDQzNDAyMThGQTMwMDFDMjQwMkZGRkY2RAorOjEwMjg5MDAwQUZBODAwNDAzQzEzMDgwMDkyNzMwMEY3MTA2MjAwMzNBOQorOjEwMjhBMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkYyQQorOjEwMjhCMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTQ0NAorOjEwMjhDMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjM3NAorOjEwMjhEMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkIzNgorOjEwMjhFMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMTgyNQorOjEwMjhGMDAwMEEwMDBBMUI5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUNGRQorOjEwMjkwMDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDA4MAorOjEwMjkxMDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkI4OQorOjEwMjkyMDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMThCNworOjEwMjkzMDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUE2QQorOjEwMjk0MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUNCMworOjEwMjk1MDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE5NgorOjEwMjk2MDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhGOAorOjEwMjk3MDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDEyMDg4MjFERgorOjEwMjk4MDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMTgzMQorOjEwMjk5MDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjgwOQorOjEwMjlBMDAwOTNBMjAwMTgxMDUxMDA1MTI0MDdGRjgwMzIyOTAwN0ZBNAorOjEwMjlCMDAwMDAwOTExQzAyNDQyMDI0MDAyNDIxMDIxMzA0NjAwN0YyQgorOjEwMjlDMDAwM0MwMzgwMDAwMDQ3MTAyNEFDNjIwMDk0M0MwMjgwMDY2NworOjEwMjlEMDAwMDBDMjMwMjE5MEMyMDAzQ0FGQTYwMDQwMDAwMDIwMjE4MAorOjEwMjlFMDAwMDA0NzEwMjVBMEMyMDAzQzhGQTgwMDQwOTUwMjAwMDJCRAorOjEwMjlGMDAwOTUwMzAwMTQ4RDA3MDAxQzMwNDJGRkZGMzA2M0ZGRkY3QQorOjEwMkEwMDAwOEQwNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDBFMjM4MjE1NworOjEwMkExMDAwMDBFMjEwMkIwMEM0MzAyMTAwQzIzMDIxQUQwNzAwMUNBMQorOjEwMkEyMDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTZDQworOjEwMkEzMDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMENFRQorOjEwMkE0MDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhDOAorOjEwMkE1MDAwQUQwMjAwMjQ5MTAyMDAzQzMwNDIwMDQwMTA0MDAwMUFCOAorOjEwMkE2MDAwMjYyMjAwMDEzQzEwODAwOEEzQTkwMDM4QTM4MDAwMTA5MgorOjEwMkE3MDAwMzYxMDAxMDA4RTAyMDBEMDhEMDMwMDM0MjdBNDAwNDBFMAorOjEwMkE4MDAwMjdBNTAwMzgwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA4QQorOjEwMkE5MDAwOTNBMjAwMzgzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgzOQorOjEwMkFBMDAwMDQ0MEZGRkU4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDI0OAorOjEwMkFCMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjVCQworOjEwMkFDMDAwMDAwMDAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3MzAwMDQ0MAorOjEwMkFEMDAwMDA0MDIwMjEyNDAzRkY4MDAyMjMxMDI0MDA0MzIwMjZFRAorOjEwMkFFMDAwOTNBMjAwMTgwQTAwMEEzNzMwOTEwMEZGOTNBNDAwMTgzRgorOjEwMkFGMDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA4OTAwRkYzMAorOjEwMkIwMDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDUxOQorOjEwMkIxMDAwMzA2OTAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjY0NworOjEwMkIyMDAwMzA0OTAwRkYzQzAyODAwODkwNDIwMDA4MDEyMDg4MjFDMworOjEwMkIzMDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzAxNQorOjEwMkI0MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjQ0MworOjEwMkI1MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYzQworOjEwMkI2MDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEIxQQorOjEwMkI3MDAwQUZBMjAwNDAwRTAwMDU2QTAwMDAwMDAwMjYyMzAwMDFGRAorOjEwMkI4MDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjRCOAorOjEwMkI5MDAwMDA4NTE4MjYwQTAwMEE5QjMwNzEwMEZGM0MwNDgwMDg1QgorOjEwMkJBMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY5NgorOjEwMkJCMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjg4QQorOjEwMkJDMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDJCRAorOjEwMkJEMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBBRkFDQgorOjEwMkJFMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEIwNgorOjEwMkJGMDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDhDOQorOjEwMkMwMDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDgwNgorOjEwMkMxMDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjFCNAorOjEwMkMyMDAwMEUwMDBFOEQyNDA1MDA5MzBBMDAwQUZBOEZCRjAwNTg4QgorOjEwMkMzMDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMERFMworOjEwMkM0MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTI1MDAwMDMwMjEwRAorOjEwMkM1MDAwMEUwMDAzNDU4Rjg0MDAxNDhGODJGRkE4MjQwMzAwMTIwNgorOjEwMkM2MDAwQTA0MzAwMDkwRTAwMDM1MDhGODQwMDE0MEEwMDBBRkFFMgorOjEwMkM3MDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTI1MDAwMDMwMjFCRAorOjEwMkM4MDAwMEEwMDBBRkE4RkJGMDA1ODBFMDAwMzQ1MDI0MDIwMjFCNworOjEwMkM5MDAwOTIwMjAwMDU4Rjg0MDAxNDM0NDIwMDIwMEUwMDAzNTA3RAorOjEwMkNBMDAwQTIwMjAwMDUwRTAwMTAzNjhGODQwMDE0OEZCRjAwNTg1QQorOjEwMkNCMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDhEQQorOjEwMkNDMDAwMDNFMDAwMDgyN0JEMDA2MDNDMDI4MDA4MzQ0NTAxMDA5NQorOjEwMkNEMDAwM0MwMjgwMDA4QzQyMDE0MDk0QTMwMDBFMDAwMDMwMjE5MQorOjEwMkNFMDAwMDA0MDIwMjFBRjgyMDAxNDMwNjNGRkZGMzQwMkZGRkY1OQorOjEwMkNGMDAwMTA2MjAwMDYzQzA3NjAyMDI0MDJGRkZGQTRBMjAwMEUyMQorOjEwMkQwMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhGMworOjEwMkQxMDAwMDAwMDAwMDAyN0JERkZDODNDMDI4MDAwM0MwNjgwMDg4MAorOjEwMkQyMDAwQUZCNTAwMkNBRkIxMDAxQ0FGQkYwMDMwQUZCNDAwMjg2RQorOjEwMkQzMDAwQUZCMzAwMjRBRkIyMDAyMEFGQjAwMDE4MzQ1MTAxMDA4RgorOjEwMkQ0MDAwMzRDNTAxMDA4QzQzMDEwMDhFMjIwMDE0OENBNDAwRDRGMQorOjEwMkQ1MDAwMDAwMEE4MjFBRjgzMDAxNDAwNDQxMDIzMTg0MDAwNTI0MworOjEwMkQ2MDAwQTM4MDAwMTA4RTIyMDAxNDAwMDA1MDIxQUNBMjAwRDREOQorOjEwMkQ3MDAwOTBDMzAwMDg5MEEyMDBDNTMwNzMwMDdGQTNBMjAwMTA4QQorOjEwMkQ4MDAwOENCMjAwRDA4Q0I0MDBENDMwNDIwMEZGMTA1MzAwM0IxMgorOjEwMkQ5MDAwOTNBMjAwMTA4RjgzMDAxNDI0MDdGRjgwMDAwMjExQzA0QgorOjEwMkRBMDAwMDA2MjEwMjEyNDQyMDI0MDI0NjMwMDQwMDA0NzEwMjRBNgorOjEwMkRCMDAwMzA2MzAwN0YzQzA5ODAwMDNDMDg4MDBBMDA2ODE4MjFDRAorOjEwMkRDMDAwQUQyMjAwMjQ4QzYyMDAzNDI3QTQwMDE0MjdBNTAwMTAzMworOjEwMkREMDAwMDI0MjgwMjEwMjkwMTAyMzA0NDAwMDI4QUZBMzAwMTQ3NworOjEwMkRFMDAwOTA2MjAwM0MwMEUyMTAyNDMwNDIwMEZGMTQ0MDAwMTlDMQorOjEwMkRGMDAwMDIwMDkwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0NGRQorOjEwMkUwMDAwOEY4NjAwMTQ5M0EzMDAxMDI0QzIwMDQwMzA0MjAwN0YzQworOjEwMkUxMDAwMDA0ODI4MjEzQzAyMDgwMDhDNDIwMEY0MjQ2MzAwMDE5MQorOjEwMkUyMDAwMzA2NDAwRkYxNDgyMDAwMkEzQTMwMDEwQTNBMDAwMTBDRQorOjEwMkUzMDAwOTNBMjAwMTBBRkE1MDAxNDAwMDIxMUMwMjQ0MjAyNDA2QQorOjEwMkU0MDAwMDBDMjEwMjEwMDQ3MTAyNEFEMjIwMDI0MEEwMDBCMzFEQgorOjEwMkU1MDAwOTNBMjAwMTAwRTAwMDdBRjAwMDAwMDAwM0MwMjgwMDhBMworOjEwMkU2MDAwMzQ0MjAxMDBBQzUwMDBEMDkzQTMwMDEwMjQwQTAwMDFBQQorOjEwMkU3MDAwQTA0MzAwQzUwQTAwMEIzMTkzQTIwMDEwMjQwMjAwMDFGOAorOjEwMkU4MDAwMTU0MjAwMDkzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU3QQorOjEwMkU5MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQ0RAorOjEwMkVBMDAwM0MwMjEwMDBBQzYyMDI3ODkyMjIwMDBCMjQwMzAwMDI2NAorOjEwMkVCMDAwMzA0MjAwRkYxNDQzMDA3MjAwMDAwMDAwOTYyMjAwMDgxOAorOjEwMkVDMDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQ4OAorOjEwMkVEMDAwM0MwMjgwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYzRAorOjEwMkVFMDAwMDAwMjE2MDIzMDYzRkZGRjMwNDUwMDNGMjQwMjAwMjczNgorOjEwMkVGMDAwMTBBMjAwMEZBRjgzMDAwQzI4QTIwMDI4MTA0MDAwMDg4OQorOjEwMkYwMDAwMjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5MjQwMjAwMjUxRAorOjEwMkYxMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAxNAorOjEwMkYyMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAwNAorOjEwMkYzMDAwMEUwMDA3NjMwMTIwMjAyMTBBMDAwQzI5MDAwMDAwMDA3OAorOjEwMkY0MDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRGNAorOjEwMkY1MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA2MworOjEwMkY2MDAwQUM2MjAyNzgwQTAwMEMyOTAwMDAwMDAwOTUyMzAwMDZEQworOjEwMkY3MDAwOTEyNDAwMDU4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMTg0QQorOjEwMkY4MDAwOEQyODAwMUM4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDBFRQorOjEwMkY5MDAwQTQyMzUyQzYzQzAxMDgwMEEwMjQ1MkM1M0MwMTA4MDBFRAorOjEwMkZBMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDBCNAorOjEwMkZCMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDA4OAorOjEwMkZDMDAwQUMyOTUyRTAwQTAwMEMyOUEzODIwMDExMTQ2MjAwMEEwNQorOjEwMkZEMDAwMjQwMjAwODEzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE1QQorOjEwMkZFMDAwOTIyNjAwMDU4Rjg0MDAxNDMwQTVGRkZGMzBDNjAwRkYzNQorOjEwMkZGMDAwMEEwMDBCRUEzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDAzQworOjEwMzAwMDAwOTIyMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDc4NworOjEwMzAxMDAwMzA2MjAwNDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFFRQorOjEwMzAyMDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQwMTA0MDAwMDdCQgorOjEwMzAzMDAwMDAwMzE2MDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4NworOjEwMzA0MDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQxMDAwMjE2MDNENgorOjEwMzA1MDAwMDQ0MTAwNDYzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFGNQorOjEwMzA2MDAwOEY4NDAwMTQyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTkzRQorOjEwMzA3MDAwMEUwMDA4RUQwMDAwMDAwMDBBMDAwQzI5MDAwMDAwMDAwRQorOjEwMzA4MDAwOTIyMjAwMEIyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDY3OAorOjEwMzA5MDAwM0MwNjgwMDA5MjIyMDAwQjI0MDMwMDE3MzA0MjAwRkYwMAorOjEwMzBBMDAwMTQ0MzAwMzIwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEI2MAorOjEwMzBCMDAwMzA0MjAwRkYxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjA0RAorOjEwMzBDMDAwOENBNDAwMjAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDA0MAorOjEwMzBEMDAwMzA4NDAwN0YwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjU2RAorOjEwMzBFMDAwQUNDMjA4MzA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDNDRAorOjEwMzBGMDAwMDQ0MjAwMDEyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODAyNAorOjEwMzEwMDAwNTA0MDAwMUEwMjAwQTgyMTk0QTIwMDA4MzA0MjIwMDA3QQorOjEwMzExMDAwNTA0MDAwMTYwMjAwQTgyMThDQTMwMDE4M0MwMjFDMkQ3MAorOjEwMzEyMDAwMzQ0MjE5RUQxMDYyMDAxMTAyMDBBODIxM0MwMjA4MDA4RgorOjEwMzEzMDAwOEM0MjAwRDQxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDRBNworOjEwMzE0MDAwMzQ0MjAxMDBBMDQzMDBFQzNDMDI4MDA4MzQ0MjAxMDBGQworOjEwMzE1MDAwOTQ0NTAwREE4Rjg0MDAxNDI0MDYwMDA2MzBBNUZGRkY5MgorOjEwMzE2MDAwMEUwMDA4RUQzQzA3NjAyMTAyMDBBODIxMEUwMDA5MjU5MQorOjEwMzE3MDAwMDAwMDAwMDA5MjIyMDAwQTMwNDIwMDA4MTA0MDAwMDRDMworOjEwMzE4MDAwMDJBMDEwMjEwRTAwMTMzQTAwMDAwMDAwMDJBMDEwMjEzRQorOjEwMzE5MDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ3MAorOjEwMzFBMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyMAorOjEwMzFCMDAwMjdCRDAwMzgyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDBCQQorOjEwMzFDMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBFRAorOjEwMzFEMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFMQorOjEwMzFFMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODA5MAorOjEwMzFGMDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjA3NQorOjEwMzIwMDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDg4NAorOjEwMzIxMDAwMDAwMDAwMDAzQzAyODAwODI0MDMwMDA1MzQ0MjAxMDA0NQorOjEwMzIyMDAwQTA0MzAwRUMzQzAyODAwMDhDNDIwMTAwM0MwMzgwMDA4MworOjEwMzIzMDAwQUY4MjAwMTQ4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTQ3QgorOjEwMzI0MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA3MAorOjEwMzI1MDAwQUM2MjAyNzgwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgzMAorOjEwMzI2MDAwM0MwNjgwMDBBRkJGMDAxMDM0QzcwMTAwOTRFMjAwMDhBNAorOjEwMzI3MDAwMzA0NDAwRkYzODgzMDA4MjM4ODIwMDg0MkM2MzAwMDFEMAorOjEwMzI4MDAwMkM0MjAwMDEwMDYyMTgyNTEwNjAwMDJEMjQwMjAwODNFQQorOjEwMzI5MDAwOTM4MjAwMTE1MDQwMDAzNjhGQkYwMDEwM0MwMjA4MDA5RQorOjEwMzJBMDAwOTA0MjUyQ0M4Q0M0MDEwMDNDMDYwODAwOTRDNjUyQzYyMQorOjEwMzJCMDAwMzA0NTAwM0YzOEEzMDAzMjM4QTIwMDNGMkM2MzAwMDFBNAorOjEwMzJDMDAwMkM0MjAwMDEwMDYyMTgyNUFGODQwMDE0QUY4NjAwMEM2OAorOjEwMzJEMDAwQTM4MDAwMTExNDYwMDAwNzAwRTAyMDIxMjQwMjAwMjBEOAorOjEwMzJFMDAwMTRBMjAwMTIwMDAwMDAwMDM0MDJGRkZGMTRDMjAwMEZGRAorOjEwMzJGMDAwMDAwMDAwMDAyNDAyMDAyMDE0QTIwMDA1MDBFMDI4MjFBNAorOjEwMzMwMDAwOENFMzAwMTQyNDAyRkZGRjUwNjIwMDBCOEZCRjAwMTBGQgorOjEwMzMxMDAwM0MwNDA4MDAyNDg0NTJDMDAwMDAzMDIxMEUwMDA2RjI1NAorOjEwMzMyMDAwMjQwNzAwMDEwQTAwMEM5QzhGQkYwMDEwMEUwMDA3NjNFOQorOjEwMzMzMDAwMDAwMDAwMDA4RkJGMDAxMDBBMDAwOTI1MjdCRDAwMThGQgorOjEwMzM0MDAwMTQ4MjAwMDYyNDgyRkY4MDhDQzMwMTA0M0MwMjYwMjBBQQorOjEwMzM1MDAwQUM0MzAwMTQwQTAwMENEMjhGQkYwMDEwMzA0MjAwRkZCMworOjEwMzM2MDAwMkM0MjAwMDIxMDQwMDAwNDI0MDIwMDIyOEZCRjAwMTBGMworOjEwMzM3MDAwMEEwMDBCMTMyN0JEMDAxODE0ODIwMDA0OEY4MjAwMUM2MgorOjEwMzM4MDAwOEZCRjAwMTAwQTAwMEM1MzI3QkQwMDE4OEM0MjAwMENBMAorOjEwMzM5MDAwMTA0MDAwMUUwMEUwMjgyMTkwRTMwMDA5MjQwMjAwMThEQworOjEwMzNBMDAwMTQ2MjAwMDMyNDAyMDAxNjBBMDAwQ0JEMjQwMzAwMDg2NgorOjEwMzNCMDAwMTQ2MjAwMDcyNDAyMDAxNzI0MDMwMDEyM0MwMjgwMDg1NAorOjEwMzNDMDAwMzQ0MjAwODBBMDQzMDAwOTBBMDAwQ0NBOTRBNzAwMDhGOAorOjEwMzNEMDAwNTQ2MjAwMDc5NEE3MDAwODhGODJGRkE4MjQwNEZGRkUxMAorOjEwMzNFMDAwOTA0MzAwMDUwMDY0MTgyNEEwNDMwMDA1OTRBNzAwMDgzQQorOjEwMzNGMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2OEZCRjAwMTBBRgorOjEwMzQwMDAwMDAwNzNDMDAwQTAwMDhDODI3QkQwMDE4OEZCRjAwMTA0NQorOjEwMzQxMDAwMDNFMDAwMDgyN0JEMDAxODhGODUwMDFDM0MwNDgwMDBENQorOjEwMzQyMDAwOTRBMjAwMkE4Q0EzMDAzNDAwMDIzMEMwMjQwMkZGRjBEMgorOjEwMzQzMDAwMDBDMjEwMjQwMDYyMTgyMUFDODMwMDNDOENBMjAwMzAzMgorOjEwMzQ0MDAwM0MwMzgwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTA0MworOjEwMzQ1MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMzQ2MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMzBDMjAwMDg5NgorOjEwMzQ3MDAwMTA0MDAwMDYzQzAyODAwMDhDNjIwNDA4QUNBMjAwMjBEMAorOjEwMzQ4MDAwOEM2MjA0MEMwQTAwMENGNUFDQTIwMDI0OEM0MzA0MDBFRQorOjEwMzQ5MDAwQUNBMzAwMjA4QzQyMDQwNEFDQTIwMDI0M0MwMzAwMjAxNgorOjEwMzRBMDAwM0MwMjgwMDBBQzQzMDAzMDNDMDQ4MDAwOEM4MjAwMzA0MQorOjEwMzRCMDAwMDA0MzEwMjQxNDQwRkZGRDhGODYwMDFDM0MwMjAwNDA5NgorOjEwMzRDMDAwQUM4MjAwMzA5NEMzMDAyQTk0QzIwMDI4OTRDNDAwMkMxQgorOjEwMzREMDAwOTRDNTAwMkUyNDYzMDAwMTAwNDQxMDIxMzA2NEZGRkZENgorOjEwMzRFMDAwQTRDMjAwMjgxNDg1MDAwMkE0QzMwMDJBQTRDMDAwMkE5NAorOjEwMzRGMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDFDMjdCREZGRThFNworOjEwMzUwMDAwM0MwNTgwMDQyNDg0MDAxMEFGQkYwMDEwMEUwMDBFMDg5QworOjEwMzUxMDAwMjQwNjAwMEE4Rjg0MDAxQzk0ODIwMDEyOTQ4MzAwMkVEQgorOjEwMzUyMDAwMzA0MjAwMEYyNDQyMDAwMzAwNDMxODA0MjQwMjdGRkZBRQorOjEwMzUzMDAwMDA0MzEwMkIxMDQwMDAwMkFDODMwMDAwMDAwMDAwMEQ3RgorOjEwMzU0MDAwMEUwMDBDRDQwMDAwMDAwMDhGODMwMDFDOEZCRjAwMTAwMQorOjEwMzU1MDAwMjdCRDAwMTg5NDYyMDAxNDk0NjMwMDFBMzA0MjAwMEZEMworOjEwMzU2MDAwMDAwMjE1MDAwMDYyMTgyNTNDMDI4MDAwMDNFMDAwMDhGQworOjEwMzU3MDAwQUM0MzAwQTA4RjgzMDAxQzNDMDI4MDA0OTQ0NDAwMDZFRQorOjEwMzU4MDAwOTQ2MjAwMUE4QzY1MDAwMEE0NjQwMDE2MDA0NDEwMjNBNQorOjEwMzU5MDAwMzA0MkZGRkYwMDQ1MTAyQjAzRTAwMDA4Mzg0MjAwMDFENQorOjEwMzVBMDAwOEY4NDAwMUMzQzA3ODAwNDk0ODYwMDFBOEM4NTAwMDBFMAorOjEwMzVCMDAwOTRFMjAwMDZBNDgyMDAxNjk0RTMwMDA2MDBDMzEwMjNFMAorOjEwMzVDMDAwMzA0MkZGRkYwMDQ1MTAyQjM4NDIwMDAxMTQ0MEZGRjg0NQorOjEwMzVEMDAwQTQ4MzAwMTYwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUM5NAorOjEwMzVFMDAwM0MwMjgwMDQ5NDQyMDAwNjk0ODMwMDFBOEM4NTAwMDBGQgorOjEwMzVGMDAwQTQ4MjAwMTYwMDYyMTAyMzMwNDJGRkZGMDA0NTEwMkIwQQorOjEwMzYwMDAwMzg0MjAwMDE1MDQwMDAwRDhGODUwMDFDMDA2MDMwMjFDMQorOjEwMzYxMDAwM0MwNzgwMDQ5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDZBRQorOjEwMzYyMDAwMDBDMzEwMjMzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDEzOQorOjEwMzYzMDAwMTQ0MEZGRjhBNDgzMDAxNjhGODUwMDFDM0MwMzgwMDAxMworOjEwMzY0MDAwMzQ2MjA0MDA4Q0E0MDAyMEFGODIwMDE4QUM2NDAwMzhGRgorOjEwMzY1MDAwOENBMjAwMjRBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzA0RAorOjEwMzY2MDAwMDNFMDAwMDhBQ0EwMDAwNDhGODQwMDFDM0MwMzAwMDZBQgorOjEwMzY3MDAwOEM4MjAwMDQwMDAyMTE0MDAwNDMxMDI1M0MwMzgwMDBBRQorOjEwMzY4MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwMzY5MDAwOEM2MjAwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDBENAorOjEwMzZBMDAwQUM4MDAwMDQwM0UwMDAwOEFGODIwMDE4OEY4NjAwMUM4NQorOjEwMzZCMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThERQorOjEwMzZDMDAwOENDMzAwMDQ4Q0M1MDAyNDhGODIwMDE4MzA5MDAwRkY0QQorOjEwMzZEMDAwOTRDNDAwMUEyNDYzMDAwMTI0NDIwMDIwMjQ4NDAwMDFDMQorOjEwMzZFMDAwMjRBNzAwMjBBQ0MzMDAwNEFGODIwMDE4QTRDNDAwMUFCMQorOjEwMzZGMDAwQUNDNzAwMjQwNEExMDAwNjAwMDA4ODIxMDRFMjAwMDVGNAorOjEwMzcwMDAwOTRDMjAwMUE4Q0MyMDAyMDI0NDIwMDAxQUNDMjAwMjBFNgorOjEwMzcxMDAwOTRDMjAwMUE5NEMzMDAyODJFMDQwMDAxMDA0MzEwMjYwRQorOjEwMzcyMDAwMkM0MjAwMDEwMDQ0MTAyNDUwNDAwMDA1OTRDMjAwMUFBRAorOjEwMzczMDAwMjQwMjAwMDFBQ0MyMDAwODk0QzIwMDFBOTRDMzAwMjhGRAorOjEwMzc0MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjVCRAorOjEwMzc1MDAwMTQ0MDAwMDcwMDAwMDAwMDhDQzIwMDA4MTQ0MDAwMDQ2MAorOjEwMzc2MDAwMjQwMjAwMTA4Q0MzMDAwNDE0NjIwMDBGOEY4NTAwMUMxQgorOjEwMzc3MDAwMEUwMDBENjgyNDExMDAwMThGODIwMDFDOTQ0MzAwMjg2NAorOjEwMzc4MDAwOTQ0MjAwMUExNDQzMDAwMzAwMDAwMDAwMEUwMDBDRDQwMQorOjEwMzc5MDAwMDAwMDAwMDAxNjAwMDAwNDhGODUwMDFDMEUwMDBENDU3RgorOjEwMzdBMDAwMDAwMDAwMDA4Rjg1MDAxQzk0QTIwMDFFOTRBNDAwMUM0MQorOjEwMzdCMDAwMjQ0MjAwMDEzMDQzRkZGRjE0NjQwMDAyQTRBMjAwMUU1MworOjEwMzdDMDAwQTRBMDAwMUUxMjAwMDAwQTNDMDI4MDA0OTRBMjAwMTQ2RgorOjEwMzdEMDAwOTRBMzAwMUEzMDQyMDAwRjAwMDIxNTAwMDA2MjE4MjU2MQorOjEwMzdFMDAwM0MwMjgwMDBBQzQzMDBBMDBBMDAwRERGQUNBMDAwMDg0MgorOjEwMzdGMDAwOTQ0MjAwMDY5NEEzMDAxQThDQTQwMDAwQTRBMjAwMTYxMAorOjEwMzgwMDAwMDA2MjEwMjMzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDFCOQorOjEwMzgxMDAwMTA0MDAwMEQwMjIwMTAyMTAwNjAzMDIxM0MwNzgwMDQ4MAorOjEwMzgyMDAwOTRFMjAwMDZBNEEyMDAxNjk0RTMwMDA2MDBDMzEwMjM0RAorOjEwMzgzMDAwMzA0MkZGRkYwMDQ0MTAyQjM4NDIwMDAxMTQ0MEZGRjhEMworOjEwMzg0MDAwQTRBMzAwMTYwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQwRQorOjEwMzg1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDNFMDAwMDgzRgorOjEwMzg2MDAwMDAwMDAwMDA4RjgyMDAyNDNDMDMwMDA2MDAwMjExNDA4QgorOjEwMzg3MDAwMDA0MzEwMjUzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDBEMworOjEwMzg4MDAwMDAwMDAwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTBDOAorOjEwMzg5MDAwMTA0MEZGRkQzNDYyMDQwMEFGODIwMDIwMDNFMDAwMDgwNgorOjEwMzhBMDAwQUY4MDAwMjQwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhCRQorOjEwMzhCMDAwMDAwMDAwMDAzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjE0QQorOjEwMzhDMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI1QworOjEwMzhEMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAwREZFMDAwNTI4NDA2MgorOjEwMzhFMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkY5RQorOjEwMzhGMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDBFMDg3RgorOjEwMzkwMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg2OAorOjEwMzkxMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMzkyMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDREMworOjEwMzkzMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODBFMAorOjEwMzk0MDAwMjQwMzAwMDFBQzQzMDAwQ0E0NDMwMDEwQTQ0MzAwMTI2NAorOjEwMzk1MDAwQTQ0MzAwMTQwM0UwMDAwOEE0NDMwMDE2OEY4MjAwMUM1NworOjEwMzk2MDAwMjdCREZGRDhBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQzMQorOjEwMzk3MDAwQUZCMDAwMTBBRkJGMDAyMDhDNDcwMDBDMjQ4MjAwODA0NQorOjEwMzk4MDAwMjQwOUZGODAzQzA4ODAwRTMwNDMwMDdGMDA4MDgwMjFBNgorOjEwMzk5MDAwM0MwQTgwMDAwMDQ5MjAyNDAwNjgxODIxMzBCMTAwRkY1MworOjEwMzlBMDAwMzBEMjAwRkYxMEUwMDAyOTAwMDA5ODIxMjYwMjAxMDAxQgorOjEwMzlCMDAwQUQ0NDAwMkMwMDQ5MjgyNDMwNDIwMDdGMDA0ODIwMjFEQgorOjEwMzlDMDAwOTA2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDRDMgorOjEwMzlEMDAwMDAwMDAwMDBBRDQ1MDAyQzk0ODIwMERBMzA1M0ZGRkY1OAorOjEwMzlFMDAwMEUwMDBENDUwMDAwMDAwMDhGODIwMDFDOEY4MzAwMTgyMAorOjEwMzlGMDAwMDAxMTJDMDA5NDQyMDAxRTAwMTIyNDAwMzQ4NDAwMDFBNworOjEwM0EwMDAwMDBBMjI4MjUzQzAyNDAwMDAwQTIyODI1QUM3MDAwMDAzRQorOjEwM0ExMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDhBOAorOjEwM0EyMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NDAwMTBBQworOjEwM0EzMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMThDQQorOjEwM0E0MDAwMjdCRDAwMjgwQTAwMEQ3OUFDNjUwMDFDOEZCRjAwMjAzRgorOjEwM0E1MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQworOjEwM0E2MDAwMDNFMDAwMDgyN0JEMDAyODNDMDY4MDAwMzRDMjAxMDBBNgorOjEwM0E3MDAwOTA0MzAwMEYyNDAyMDAxMDEwNjIwMDBFMjg2NTAwMTExMAorOjEwM0E4MDAwMTBBMDAwMDcyNDAyMDAxMjI0MDIwMDA4MjQwNTAwM0FCNgorOjEwM0E5MDAwMTA2MjAwMDYwMDAwMzAyMTAzRTAwMDA4MDAwMDAwMDA3MgorOjEwM0FBMDAwMjQwNTAwMzUxNDYyRkZGQzAwMDAzMDIxMEEwMDBFMjVCOQorOjEwM0FCMDAwMDAwMDAwMDA4Q0MyMDA3NDhGODNGRkE4MjQ0MjBGQTA3NgorOjEwM0FDMDAwMDNFMDAwMDhBQzYyMDAwQzI3QkRGRkU4QUZCRjAwMTBBOAorOjEwM0FEMDAwMEUwMDAzNTUyNDA1MDAwMTNDMDQ4MDA4OEZCRjAwMTAzMAorOjEwM0FFMDAwMjQwMjAwMDEzNDgzMDA4MEE0NjIwMDEyMjdCRDAwMTg2NAorOjEwM0FGMDAwMjQwMjAwMDEwM0UwMDAwOEEwODAwMDFBMjdCREZGRTBCNworOjEwM0IwMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNDRgorOjEwM0IxMDAwMzBCMkZGRkYwRTAwMDM0NTAwODA4ODIxM0MwMjgwMDg4MAorOjEwM0IyMDAwMzQ1MDAwODA5MjAyMDAwOTI0MDMwMDA0MzA0MjAwRkY1OAorOjEwM0IzMDAwMTQ0MzAwMEMzQzAyODAwODEyNDAwMDA4MjQwMjAwMEFEMgorOjEwM0I0MDAwMEUwMDBFMUMwMDAwMDAwMDkyMDIwMDA1MjQwM0ZGRkU4MAorOjEwM0I1MDAwMDA0MzEwMjRBMjAyMDAwNTI0MDIwMDEyQTIwMjAwMDk2MAorOjEwM0I2MDAwM0MwMjgwMDgzNDQyMDA4MDAyMjAyMDIxMEUwMDAzNTBENQorOjEwM0I3MDAwQTA0MDAwMjcxNjQwMDAwMzAyMjAyMDIxMEUwMDBFODBFNgorOjEwM0I4MDAwMDAwMDAwMDAwMjIwMjAyMTMyNDYwMEZGOEZCRjAwMUNGMQorOjEwM0I5MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzhDOAorOjEwM0JBMDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkUwQUZCRjAwMUM4NworOjEwM0JCMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMEUwMDAzNDU1MworOjEwM0JDMDAwMDA4MDgwMjEwRTAwMEUxQzAwMDAwMDAwM0MwMjgwMDhENgorOjEwM0JEMDAwMzQ0NTAwODA5MEEyMDAwOTI0MTIwMDE4MzA1MTAwRkZFMworOjEwM0JFMDAwMTIzMjAwMDMwMjAwMjAyMTI0MDIwMDEyQTBBMjAwMDlDOAorOjEwM0JGMDAwOTBBMjAwMDUyNDAzRkZGRTAwNDMxMDI0MEUwMDAzNTA5MgorOjEwM0MwMDAwQTBBMjAwMDUwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDc5MgorOjEwM0MxMDAwMDAwMDMwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQzQworOjEwM0MyMDAwOEZCMDAwMTAwQTAwMDM1NTI3QkQwMDIwOEZCRjAwMUM3NQorOjEwM0MzMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkyNgorOjEwM0M0MDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkU4M0MwMjgwMDBBQQorOjEwM0M1MDAwQUZCMDAwMTBBRkJGMDAxNDM0NDIwMTAwOTQ0MjAwMEMxQQorOjEwM0M2MDAwMjQwNTAwMzYwMDgwODAyMTE0NDAwMDEyMzA0NjAwRkZGOQorOjEwM0M3MDAwMEUwMDAzNDUwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODAzMgorOjEwM0M4MDAwMjQwMzAwMTJBMDQzMDAwOTkwNDMwMDA1MzQ2MzAwMTA5MAorOjEwM0M5MDAwMEUwMDBFMUNBMDQzMDAwNTBFMDAwMzUwMDIwMDIwMjE2MAorOjEwM0NBMDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDIwMEEwMDBFRkQwRAorOjEwM0NCMDAwMDAwMDAwMDAwRTAwMEUyNTAwMDAwMDAwMEUwMDAzNDU2RAorOjEwM0NDMDAwMDIwMDIwMjEzQzAyODAwODkwNDMwMDFCMjQwNUZGOUYzNgorOjEwM0NEMDAwMDIwMDIwMjEwMDY1MTgyNDhGQkYwMDE0OEZCMDAwMTA0RgorOjEwM0NFMDAwQTA0MzAwMUIwQTAwMDM1MDI3QkQwMDE4MjdCREZGRTBCQQorOjEwM0NGMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzBCMTAwRkY3QgorOjEwM0QwMDAwMEUwMDAzNDUwMDgwODAyMTNDMDI4MDA4MjQwMzAwMTIzRAorOjEwM0QxMDAwMzQ0MjAwODAwRTAwMEUxQ0EwNDMwMDA5MEUwMDAzNTAyOAorOjEwM0QyMDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMTgzNAorOjEwM0QzMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDBFMjU0NQorOjEwM0Q0MDAwMjdCRDAwMjAzQzA0ODAwODkwODMwMDBFOTA4MjAwMEE2QQorOjEwM0Q1MDAwMTQ0MzAwMEIwMDAwMjgyMThGODJGRkE4MjQwMzAwNTA4OQorOjEwM0Q2MDAwMjQwNTAwMDE5MDQyMDAwMDMwNDIwMEZGMTQ0MzAwMDQ4QgorOjEwM0Q3MDAwMDAwMDAwMDA5MDgyMDAwRTI0NDIwMDAxQTA4MjAwMEU4QworOjEwM0Q4MDAwMDNFMDAwMDgwMEEwMTAyMTNDMDM4MDAwOEM2MjAxRjhEMQorOjEwM0Q5MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQyMgorOjEwM0RBMDAwM0MwMjEwMDAwM0UwMDAwOEFDNjIwMUY4MjdCREZGRTAxMAorOjEwM0RCMDAwQUZCMjAwMTgzQzEyODAwOEFGQjEwMDE0QUZCRjAwMUNCNgorOjEwM0RDMDAwQUZCMDAwMTAzNjUxMDA4MDkyMjIwMDA5MjQwMzAwMEE4RgorOjEwM0REMDAwMzA0MjAwRkYxNDQzMDAzRTAwMDAwMDAwOEU0MzAwMDQwOAorOjEwM0RFMDAwOEUyMjAwMzg1MDYyMDA4MDhGQkYwMDFDOTIyMjAwMDA5QgorOjEwM0RGMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDI1M0MwMjgwMDBBMQorOjEwM0UwMDAwOEM0MjAxNDA4RTQzMDAwNDM2NDIwMTAwMDIyMDI4MjFFQQorOjEwM0UxMDAwQUM0MzAwMUM5NjIyMDA1QzhFMjMwMDM4MzA0MkZGRkYyQQorOjEwM0UyMDAwMDAwMjEwNDAwMDYyMTgyMUFFMjMwMDFDOEU0MzAwMDRFMworOjEwM0UzMDAwOEUyNDAwMzg5NjIyMDA1QzAwNjQxODIzMzA0MkZGRkY3NQorOjEwM0U0MDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDZFRgorOjEwM0U1MDAwMDAwMDAwMDA4RTQyMDAwNDhFMjMwMDM4MDA0MzEwMjMyRgorOjEwM0U2MDAwMEEwMDBGNkIwMDAyMjA0Mzk2MjIwMDVDMzA0MkZGRkZFNQorOjEwM0U3MDAwMDAwMjIwNDAzQzAyODAwODM0NDMwMTAwMzQ0MjAwODBBQworOjEwM0U4MDAwQUNBNDAwMkNBMDQwMDAyNDI0MDIwMDAxQTA2MjAwMEM3RAorOjEwM0U5MDAwMEUwMDBGMUYwMDAwMDAwMDEwNDAwMDUzOEZCRjAwMUNEOQorOjEwM0VBMDAwM0MwMjgwMDA4QzQ0MDE0MDNDMDM4MDAwOEM2MjAxRjg5RAorOjEwM0VCMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQwMQorOjEwM0VDMDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwRkM4OEZCRjAwMUM1MgorOjEwM0VEMDAwOTIyMjAwMDkyNDAzMDAxMDMwNDIwMEZGMTQ0MzAwMDQyMgorOjEwM0VFMDAwM0MwMjgwMDA4QzQ0MDE0MDBBMDAwRkFGMDAwMDI4MjFGMgorOjEwM0VGMDAwOTIyMjAwMDkyNDAzMDAxNjMwNDIwMEZGMTQ0MzAwMDZGQQorOjEwM0YwMDAwMjQwMjAwMTRBMjIyMDAwOTNDMDI4MDAwOEM0NDAxNDBEQgorOjEwM0YxMDAwMEEwMDBGQzI4RkJGMDAxQzhFMjIwMDM4OEUyMzAwM0M4NworOjEwM0YyMDAwMDA0MzEwMjMwNDQxMDAzMDhGQkYwMDFDOTIyMjAwMjc2MQorOjEwM0YzMDAwMjQ0MjAwMDFBMjIyMDAyNzkyMjIwMDI3MkM0MjAwMDRFMgorOjEwM0Y0MDAwMTQ0MDAwMTYzQzEwODAwMDkyMjIwMDA5MjQwMzAwMDQ1MworOjEwM0Y1MDAwMzA0MjAwRkYxNDQzMDAwOTNDMDI4MDAwOEM0NDAxNDBDMQorOjEwM0Y2MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBFQgorOjEwM0Y3MDAwMjQwNTAwOTMwQTAwMEU4RDI3QkQwMDIwOEM0NDAxNDBDQgorOjEwM0Y4MDAwMjQwNTAwOTM4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1RQorOjEwM0Y5MDAwOEZCMDAwMTAwQTAwMEYwOTI3QkQwMDIwOEUwNDAxNDBEOQorOjEwM0ZBMDAwMEUwMDAzNDUwMDAwMDAwMDhFNDIwMDA0MjQ0MkZGRkY4MworOjEwM0ZCMDAwQUU0MjAwMDQ4RTIyMDAzQzI0NDJGRkZGQUUyMjAwM0NCMQorOjEwM0ZDMDAwMEUwMDAzNTA4RTA0MDE0MDhFMDQwMTQwOEZCRjAwMUM4MAorOjEwM0ZEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDRCOAorOjEwM0ZFMDAwMEEwMDAzNTUyN0JEMDAyMDhGQjIwMDE4OEZCMTAwMTRCRQorOjEwM0ZGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwM0MwNjgwMDBDMQorOjEwNDAwMDAwOENDMjAxODgzQzAzODAwODM0NjUwMDgwOTA2MzAwMEVGOAorOjEwNDAxMDAwMDAwMjE0MDIzMDQ0MDBGRjMwNjMwMEZGMTQ2NDAwMEVGRAorOjEwNDAyMDAwM0MwMjgwMDg5MEEyMDAyNjMwNDIwMEZGMTA0NDAwMDlBNAorOjEwNDAzMDAwOEY4MkZGQThBMEE0MDAyNjI0MDMwMDUwOTA0MjAwMDAxNQorOjEwNDA0MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwMEEwMDA1OEQwNgorOjEwNDA1MDAwOENDNDAxODAzQzAyODAwODM0NDIwMDgwQTA0NDAwMjZDOQorOjEwNDA2MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwMzBFNzAwRkY4QworOjEwNDA3MDAwQUZCMjAwMThBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTA1QQorOjEwNDA4MDAwMDA4MDkwMjExNEUwMDAwNjMwQzYwMEZGMDAwMDAwMDAxMAorOjEwNDA5MDAwMDAwMDAwMEQwMDAwMDAwMDBBMDAxMDIxMjQwMDAxMEVBNQorOjEwNDBBMDAwM0MwMzgwMDg5MDYyMDAwRTMwNDIwMEZGMTQ0NjAwMjM1QgorOjEwNDBCMDAwMzQ2MjAwODA5MDQyMDAyNjMwNDIwMEZGMTQ0NjAwMUYwOAorOjEwNDBDMDAwMDAwMDAwMDA5MDYyMDAwRjMwNDIwMEZGMTQ0NjAwMUIwOQorOjEwNDBEMDAwMDAwMDAwMDA5MDYyMDAwQTMwNDIwMEZGMTQ0NjAwMDMxNgorOjEwNDBFMDAwOEY5MEZGQTgwMDAwMDAwRDhGOTBGRkE4OEY4MkZGQUM3QgorOjEwNDBGMDAwM0MxMTgwMDBBRTA1MDAzQ0FDNDUwMDAwQTA2NjAwMEEwMworOjEwNDEwMDAwMEUwMDAzNDU4RTI0MDEwMEEyMDAwMDI0MEUwMDAzNTA3RgorOjEwNDExMDAwOEUyNDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUwNQorOjEwNDEyMDAwMjQwMjAwMDJBQzcyMDFDMEEwNjIwMUM0M0MwMjEwMDA3MworOjEwNDEzMDAwQUM2MjAxRjgwQTAwMTAyMjhGQkYwMDFDMDAwMDAwMDBEMgorOjEwNDE0MDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMTM3OEZCRjAwMUM5QworOjEwNDE1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3OAorOjEwNDE2MDAwMjdCRDAwMjA4RjgzRkZBODNDMDI4MDAwOEM0NDAxMDAwMworOjEwNDE3MDAwMzQ0MjAxMDA4QzY1MDAzQzkwNDYwMDFCMEEwMDBGRThBOQorOjEwNDE4MDAwMjQwNzAwMDEzQzAyODAwODkwNDMwMDBFOTA0MjAwMEE4MAorOjEwNDE5MDAwMDA0MzEwMjYzMDQyMDBGRjAzRTAwMDA4MDAwMjEwMkIwRAorOjEwNDFBMDAwMjdCREZGRTAzQzAyODAwOEFGQjEwMDE0QUZCMDAwMTBBMworOjEwNDFCMDAwQUZCRjAwMTgzNDUwMDA4MDkyMDIwMDA1MjQwMzAwMzA4NQorOjEwNDFDMDAwMzA0MjAwMzAxNDQzMDA4NTAwODA4ODIxOEY4MjAwMUMxQgorOjEwNDFEMDAwOEM0MjAwMEMxMDQwMDA4MjhGQkYwMDE4MEUwMDBENDU2RAorOjEwNDFFMDAwMDAwMDAwMDA4Rjg2MDAxOEFDRDEwMDAwOTIwMjAwMDg4OQorOjEwNDFGMDAwOTIwMzAwMDkzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwQQorOjEwNDIwMDAwMDA0MzEwMjVBQ0MyMDAwNDkyMDIwMDREMDAwMjE2MDBDQgorOjEwNDIxMDAwMDAwMjE2MDMwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDBGMgorOjEwNDIyMDAwOEM2MzAwNDgwQTAwMTA2MDNDMTA4MDA4OTIwMjAwMDg2RAorOjEwNDIzMDAwMzA0MjAwNDAxNDQwMDAwMzAwMDAxODIxOTIwMjAwMjc4MQorOjEwNDI0MDAwMzA0MzAwRkYzQzEwODAwODM2MTEwMDgwOTIyMjAwNEQ2MAorOjEwNDI1MDAwMDAwMzFFMDAzMDQyMDBGRjAwMDIxNDAwMDA2MjE4MjUxNworOjEwNDI2MDAwQUNDMzAwMDg4RTI0MDAzMDhGODIwMDFDQUNDNDAwMEM0QworOjEwNDI3MDAwOEUyNTAwMzQ5NDQzMDAxRTNDMDJDMDBCQUNDNTAwMTBEOAorOjEwNDI4MDAwMDA2MjE4MjU4RTIyMDAzODAwMDAyMDIxQUNDMjAwMTRFNAorOjEwNDI5MDAwOEUyMjAwM0NBQ0MyMDAxODBFMDAwRDc5QUNDMzAwMUM4RAorOjEwNDJBMDAwOEUwMjAwMDQ4Rjg0MDAxODNDMDU4MDAwQUM4MjAwMDA2MAorOjEwNDJCMDAwOEUyMjAwMjBBQzgyMDAwNDhFMjIwMDFDQUM4MjAwMDhGQQorOjEwNDJDMDAwOEUyMjAwNTg4Q0EzMDA3NDAwNDMxMDIxQUM4MjAwMEM5NQorOjEwNDJEMDAwOEUyMjAwMkNBQzgyMDAxMDhFMjIwMDQwOEUyMzAwNDRERgorOjEwNDJFMDAwMDAwMjE0MDAwMDQzMTAyNUFDODIwMDE0OTIyMjAwNERGRAorOjEwNDJGMDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA0QgorOjEwNDMwMDAwQUM4MDAwMTgwQTAwMTBBNDhGODIwMDFDOEUyMzAwMENDMQorOjEwNDMxMDAwMjQwMjAwMDExMDYyMDAwRTI0MDJGRkZGOTIyMjAwMDgxNgorOjEwNDMyMDAwMzA0MjAwNDAxNDQwMDAwQTI0MDJGRkZGOEUyMzAwMEM5QworOjEwNDMzMDAwOENBMjAwNzQwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQ2MgorOjEwNDM0MDAwMTQ0MDAwMDIwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNDRAorOjEwNDM1MDAwQUM4MjAwMTg4RjgyMDAxQzAwMDAyMDIxOTQ0MzAwMUVCNAorOjEwNDM2MDAwM0MwMkMwMEMwMDYyMTgyNThGODIwMDE4MEUwMDBENzlFNworOjEwNDM3MDAwQUM0MzAwMUMzQzAzODAwODM0NjIwMTAwOEM0MjAwMDAwNgorOjEwNDM4MDAwOEY4NTAwMTgzNDYzMDA4MDhGQkYwMDE4QUNBMjAwMDAzNgorOjEwNDM5MDAwQUNBMDAwMDQ4QzY0MDA0ODhGODIwMDFDOEZCMTAwMTQxNAorOjEwNDNBMDAwQUNBNDAwMDhBQ0EwMDAwQ0FDQTAwMDEwOTA2MzAwMDUwOQorOjEwNDNCMDAwOTQ0NjAwMUUzQzAyNDAwRDAwMDMxRTAwMDBDMjMwMjU0MgorOjEwNDNDMDAwQUNBMzAwMTQ4RkIwMDAxMEFDQTAwMDE4MjQwNDAwMDFBRQorOjEwNDNEMDAwQUNBNjAwMUMwQTAwMEQ3OTI3QkQwMDIwOEZCRjAwMTg3NQorOjEwNDNFMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQgorOjEwNDNGMDAwM0MwMjgwMDA5NDQzMDA3QzNDMDI4MDA4MzQ0NjAxMDA2QgorOjEwNDQwMDAwMzA4NDAwRkYzMDY1RkZGRjI0MDIwMDA1MjRBMzQ2NTBERQorOjEwNDQxMDAwQTBDNDAwMEM1NDgyMDAwQzMwNjVGRkZGOTBDMjAwMEQ1OAorOjEwNDQyMDAwMkM0MjAwMDcxMDQwMDAwNzI0QTMwQTAwOTBDMzAwMEQ4RgorOjEwNDQzMDAwMjQwMjAwMTQwMDYyMTAwNDAwQTIxMDIxMEEwMDEwRTBGRgorOjEwNDQ0MDAwMzA0NUZGRkYzMDY1RkZGRjNDMDI4MDA4MzQ0MjAwODBBQQorOjEwNDQ1MDAwMDNFMDAwMDhBNDQ1MDAxNDNDMDM4MDA4MzQ2ODAwODA5MQorOjEwNDQ2MDAwQUQwNTAwMzgzNDY3MDEwMDhDRTIwMDFDMzA4NDAwRkY4OQorOjEwNDQ3MDAwMDBBMjEwMjMxODQwMDAwMzMwQzYwMEZGMjRBMkZGRkM1NgorOjEwNDQ4MDAwQUNFMjAwMUMzMDgyMDAwMTUwNDAwMDA4M0MwMzgwMDg3MAorOjEwNDQ5MDAwOEQwMjAwM0MwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDVGOAorOjEwNDRBMDAwOEM2MjAwMDQxMEEyMDAwRjNDMDM4MDA4OEM2MjAwMDRBMAorOjEwNDRCMDAwMTRBMjAwMUUwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzQworOjEwNDRDMDAwMzA0MjAwMjAxMDQwMDAwOTNDMDI4MDA4MzQ2MjAwODAyNQorOjEwNDREMDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA0M0MwMjgwMDhBMgorOjEwNDRFMDAwMjQwNDAwMDQwQTAwMTBDQTAwMDAwMDAwMzQ0MzAwODBDNQorOjEwNDRGMDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQxOAorOjEwNDUwMDAwMTBDMDAwMEEzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4MworOjEwNDUxMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA3QQorOjEwNDUyMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MDNFMDAwMDg4NAorOjEwNDUzMDAwMDAwMDAwMDAyN0JERkZFODAwQTYxODIzQUZCRjAwMTA1MQorOjEwNDU0MDAwMTg2MDAwODAzMDg4MDBGRjNDMDI4MDA4MzQ0NzAwODBGQgorOjEwNDU1MDAwQTBFMDAwMjQzNDQ0MDEwMEEwRTAwMDI3OEM4MjAwMUM2RAorOjEwNDU2MDAwMDBBMjEwMjMwNDQwMDA1NjAwMDAwMDAwOENFMjAwM0MzMgorOjEwNDU3MDAwOTRFMzAwNUM4Q0U0MDAyQzAwNDUzMDIzMzA2M0ZGRkZBMworOjEwNDU4MDAwMDBDMzE4MjEwMDgzMjAyQjEwODAwMDA0MDBFMDE4MjFCNAorOjEwNDU5MDAwOENFMjAwMkMwQTAwMTEzOTAwQTIxMDIxOTRFMjAwNUM4OAorOjEwNDVBMDAwMzA0MkZGRkYwMEMyMTAyMTAwQTIxMDIxQUM2MjAwMUNBQgorOjEwNDVCMDAwM0MwMjgwMDgzNDQ0MDA4MDk0ODIwMDVDOEM4MzAwMUNBMAorOjEwNDVDMDAwMzA0MkZGRkYwMDAyMTA0MDAwQTIxMDIxMDA0MzEwMkJEOAorOjEwNDVEMDAwMTA0MDAwMDQwMDAwMDAwMDhDODIwMDFDMEEwMDExNENGNgorOjEwNDVFMDAwM0MwNjgwMDg5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDBDRAorOjEwNDVGMDAwMDBBMjEwMjEzQzA2ODAwODM0QzMwMTAwMzRDNzAwODBBQgorOjEwNDYwMDAwQUM4MjAwMUNBMDYwMDAwQ0FDRTUwMDM4OEM2MjAwMUM4MQorOjEwNDYxMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUM2MjAwMUM4MAorOjEwNDYyMDAwMzEwMjAwMDExMDQwMDAwODNDMDM4MDA4OENFMjAwM0M4RAorOjEwNDYzMDAwMDBBMjEwMjMwNDQxMDAxMjI0MDQwMDA1OENDMjAwMDRDRgorOjEwNDY0MDAwMTBBMjAwMTA4RkJGMDAxMDhDNjIwMDA0MTRBMjAwNEY1MworOjEwNDY1MDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3RQorOjEwNDY2MDAwMTA0MDAwMEEzQzAyODAwODM0NjIwMDgwOTA2MzAwMDgxOQorOjEwNDY3MDAwOTA0MjAwNEMxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDRDRQorOjEwNDY4MDAwOEZCRjAwMTAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODBGNQorOjEwNDY5MDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQ3NgorOjEwNDZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhENQorOjEwNDZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMTk5MDAwMDAwMDBERAorOjEwNDZDMDAwOENFMjAwMUMwMDQ2MTAyMzAwNDMxMDJCNTQ0MDAwMDFENAorOjEwNDZEMDAwQUNFNTAwMUM5NEUyMDA1QzMwNDJGRkZGMDA2MjEwMkI0RQorOjEwNDZFMDAwMTQ0MDAwMDcyNDAyMDAwMjk0RTIwMDVDOENFMzAwMUNFQQorOjEwNDZGMDAwMzA0MkZGRkYwMDYyMTgyMUFDRTMwMDFDMjQwMjAwMDJEQworOjEwNDcwMDAwQUNFNTAwMzgwRTAwMEYxRkEwODIwMDBDMTA0MDAwMUYwNworOjEwNDcxMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBFRAorOjEwNDcyMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA2OAorOjEwNDczMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDExQjE5MQorOjEwNDc0MDAwOEZCRjAwMTAzMTAyMDAxMDEwNDAwMDEwOEZCRjAwMTAwQQorOjEwNDc1MDAwM0MwMjgwMDgzNDQ1MDA4MDhDQTMwMDFDOTRBMjAwNUNCRAorOjEwNDc2MDAwMDA2NjE4MjMzMDQyRkZGRjAwNjIxODIxM0MwMjNGRkYyMQorOjEwNDc3MDAwMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjFCNworOjEwNDc4MDAwMDBDMzEwMjFBQ0EyMDAxQzhGQkYwMDEwMDNFMDAwMDg4MgorOjEwNDc5MDAwMjdCRDAwMTgyN0JERkZFODAwQzA0MDIxMDBBNjMwMjMzOAorOjEwNDdBMDAwQUZCRjAwMTAxOEMwMDAyNjMwOEEwMEZGM0MwMjgwMDgwRQorOjEwNDdCMDAwMzQ0OTAwODA4RDI0MDAxQzhEMjMwMDJDMDA4ODIwMjM4OAorOjEwNDdDMDAwMDA2NDE4MkIxMDYwMDAwRjM0NDcwMTAwOENFMjAwMjBCOQorOjEwNDdEMDAwMDA0NjEwMjFBQ0UyMDAyMDhDRTIwMDIwMDA0NDEwMkJBNworOjEwNDdFMDAwMTQ0MDAwMEIzQzAyM0ZGRjhDRTIwMDIwMDA0NDEwMjNFOQorOjEwNDdGMDAwQUNFMjAwMjA5NTIyMDA1QzMwNDJGRkZGMEEwMDExRDE5QworOjEwNDgwMDAwMDA4MjIwMjFBQ0UwMDAyMDAwODYyMDIxM0MwMjNGRkZGNgorOjEwNDgxMDAwMzQ0M0ZGRkYwMDY0MTAyQjU0NDAwMDAxMDA2MDIwMjE0RQorOjEwNDgyMDAwM0MwMjgwMDgzNDQyMDA4MDAwODUxODIxQUM0MzAwMUMwMworOjEwNDgzMDAwQTA0MDAwMjRBMDQwMDAyNzBBMDAxMjIzM0MwMzgwMDg2NworOjEwNDg0MDAwMzE0MjAwMTAxMDQwMDA0MzNDMDM4MDA4M0MwNjgwMDhDMQorOjEwNDg1MDAwMzRDNDAwODA4QzgyMDAzQzAwNDgxMDIzNTg0MDAwM0U0NQorOjEwNDg2MDAwMzQ2NjAwODA5MDgyMDAyNDI0NDIwMDAxQTA4MjAwMjQ0QgorOjEwNDg3MDAwOTA4MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYzNworOjEwNDg4MDAwMDA0MzEwMkIxNDQwMDA2ODhGQkYwMDEwMzRDMjAxMDA5OQorOjEwNDg5MDAwOEM0MjAwMUMwMEEyMTAyMzE4NDAwMDYzMDAwMDAwMDA5RQorOjEwNDhBMDAwOENDMzAwMDQ5NDgyMDA1QzAwNjgxODIzMzA0MkZGRkYzMAorOjEwNDhCMDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDU3NgorOjEwNDhDMDAwMDAwMDAwMDA4Q0MyMDAwNDAwNDgxMDIzMEEwMDEyMDZGOQorOjEwNDhEMDAwMDAwMjEwNDM5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDA0RgorOjEwNDhFMDAwM0MwNjgwMDhBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM5OQorOjEwNDhGMDAwOENBNDAwMkM5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwNworOjEwNDkwMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMyMDIxMDEwNDEwMjE1OQorOjEwNDkxMDAwQUNBMjAwMUM4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUM1NgorOjEwNDkyMDAwMjQwMjAwMDIwRTAwMEYxRkEwQzIwMDBDMTA0MDAwM0UyNworOjEwNDkzMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBDQgorOjEwNDk0MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEyNTNBOAorOjEwNDk1MDAwMDAwMDAwMDAzNDY2MDA4MEFDQzUwMDM4MzQ2NDAxMDBGQgorOjEwNDk2MDAwOEM4MjAwMUMwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkMyRAorOjEwNDk3MDAwQUM4MjAwMUMzMTQyMDAwMTUwNDAwMDBBM0MwMzgwMDgxOAorOjEwNDk4MDAwOENDMjAwM0MwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU0MAorOjEwNDk5MDAwOEM2MjAwMDQxNEEyMDAwMzNDMDM4MDA4MEEwMDEyNDU0NAorOjEwNDlBMDAwMjQwNDAwMDU4QzYyMDAwNDE0QTIwMDFGOEZCRjAwMTBCNQorOjEwNDlCMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEExRgorOjEwNDlDMDAwM0MwMjgwMDgzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNENGMgorOjEwNDlEMDAwMTQ0MzAwMDUzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAyQgorOjEwNDlFMDAwMEEwMDEwQ0EyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDA3OQorOjEwNDlGMDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDBDQworOjEwNEEwMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkVFRQorOjEwNEExMDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDA4OAorOjEwNEEyMDAwQUM2MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgzQQorOjEwNEEzMDAwMjdCREZGRTgzQzBBODAwOEFGQkYwMDEwMzU0OTAwODA2MQorOjEwNEE0MDAwOEQyMjAwM0MwMEMwNDAyMTMwODQwMEZGMDA0NjEwMjMyRQorOjEwNEE1MDAwMTg0MDAwOUQzMEU3MDBGRjM1NDcwMTAwMjQwMjAwMDFBNworOjEwNEE2MDAwMDBBNjMwMjNBMEUwMDAwQ0EwRTAwMDBEQTUyMjAwMTQ1OQorOjEwNEE3MDAwMThDMDAwMjQzMDgyMDAxMDhEMjMwMDFDOEQyMjAwMkNEMQorOjEwNEE4MDAwMDA2ODE4MjMwMDQzMTAyQjEwNDAwMDBGMDAwMDAwMDBBNgorOjEwNEE5MDAwOENFMjAwMjAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjBENQorOjEwNEFBMDAwMDA0MzEwMkIxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAxRgorOjEwNEFCMDAwMDA0MzEwMjNBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkY0RgorOjEwNEFDMDAwMEEwMDEyODIwMDYyMTgyMUFDRTAwMDIwMDA2NjE4MjE2MgorOjEwNEFEMDAwM0MwMjNGRkYzNDQ2RkZGRjAwQzMxMDJCNTQ0MDAwMDE0RgorOjEwNEFFMDAwMDBDMDE4MjEzQzAyODAwODM0NDIwMDgwMDA2NTE4MjE3MworOjEwNEFGMDAwQUM0MzAwMUNBMDQwMDAyNEEwNDAwMDI3MEEwMDEyRDBCNAorOjEwNEIwMDAwM0MwMzgwMDgxMDQwMDA0MDNDMDM4MDA4OEQyMjAwM0M5QworOjEwNEIxMDAwMDA0ODEwMjM1ODQwMDAzRDM0NjcwMDgwOTEyMjAwMjQ1MworOjEwNEIyMDAwMjQ0MjAwMDFBMTIyMDAyNDkxMjIwMDI0M0MwMzA4MDAxOQorOjEwNEIzMDAwOEM2MzAwMjQzMDQyMDBGRjAwNDMxMDJCMTQ0MDAwOUE4NQorOjEwNEI0MDAwOEZCRjAwMTA4Q0UyMDAxQzAwQTIxMDIzMTg0MDAwOTZCQQorOjEwNEI1MDAwMDAwMDAwMDA4RDQzMDAwNDk1MjIwMDVDMDA2ODE4MjNDQgorOjEwNEI2MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFBOAorOjEwNEI3MDAwMTA0MDAwMDUwMTIwMjAyMThENDIwMDA0MDA0ODEwMjMzMAorOjEwNEI4MDAwMEEwMDEyQjMwMDAyMTA0Mzk1MjIwMDVDMzA0MkZGRkY3RQorOjEwNEI5MDAwMDAwMjEwNDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODAyNgorOjEwNEJBMDAwOTRBMjAwNUM4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYxNAorOjEwNEJCMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE5MworOjEwNEJDMDAwMDEwMzEwMjFBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBGOQorOjEwNEJEMDAwQUNDMjAwMUMyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEM3OQorOjEwNEJFMDAwMTA0MDAwNzE4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAxNworOjEwNEJGMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBNgorOjEwNEMwMDAwMEEwMDEyRkEwMDAwMDAwMDM0NjcwMDgwQUNFNTAwMzhBQQorOjEwNEMxMDAwMzQ2NjAxMDA4Q0MyMDAxQzAwQTIxMDIzMTg0MDAwMDI2MAorOjEwNEMyMDAwMjRBMkZGRkNBQ0MyMDAxQzMwODIwMDAxNTA0MDAwMDhFRQorOjEwNEMzMDAwM0MwMzgwMDg4Q0UyMDAzQzAwQTIxMDIzMDQ0MzAwNTE5NgorOjEwNEM0MDAwMjQwNDAwMDU4QzYyMDAwNDEwQTIwMDNFM0MwMzgwMDg4RQorOjEwNEM1MDAwOEM2MjAwMDQ1NEEyMDA1NDhGQkYwMDEwM0MwMjA4MDA3NAorOjEwNEM2MDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDA2M0MwMjgwMDhGMAorOjEwNEM3MDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTA0MzAwNDA3MgorOjEwNEM4MDAwM0MwMjgwMDgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMwNAorOjEwNEM5MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA0NAorOjEwNENBMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJGNQorOjEwNENCMDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwNworOjEwNENDMDAwMEEwMDEzMzg4RkJGMDAxMDI0MDIwMDA1QTEyMDAwMjcxRQorOjEwNENEMDAwMTRFMjAwMEEzQzAzODAwODM1NDMwMTAwOTA2MjAwMEQ5NQorOjEwNENFMDAwMkM0MjAwMDY1MDQwMDAwNTNDMDM4MDA4OTA2MjAwMERGNQorOjEwNENGMDAwMjQ0MjAwMDFBMDYyMDAwRDNDMDM4MDA4MzQ2NzAwODA1QworOjEwNEQwMDAwQUNFNTAwMzgzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMwMAorOjEwNEQxMDAwMTg0MDAwMDIyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDEzQgorOjEwNEQyMDAwNTA0MDAwMEEzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNBMworOjEwNEQzMDAwMDQ0MTAwMTQyNDA0MDAwNThDNjIwMDA0MTRBMjAwMDM0MgorOjEwNEQ0MDAwM0MwMzgwMDgwQTAwMTMyRjI0MDQwMDA1OEM2MjAwMDQzMQorOjEwNEQ1MDAwMTRBMjAwMTU4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzRQorOjEwNEQ2MDAwMzA0MjAwMjAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA3QgorOjEwNEQ3MDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDhGOAorOjEwNEQ4MDAwMjQwNDAwMDQ4RkJGMDAxMDBBMDAxMENBMjdCRDAwMThCOQorOjEwNEQ5MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDE5MgorOjEwNERBMDAwQTQ2MjAwMTQ4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBNAorOjEwNERCMDAwM0MwQjgwMDgyN0JERkZFODNDMDI4MDAwQUZCRjAwMTAxRAorOjEwNERDMDAwMzQ0MjAxMDAzNTZBMDA4MDkwNDQwMDBBMzU2OTAxMDBEMAorOjEwNEREMDAwOEM0NTAwMTQ4RDQ4MDAzODkxMjMwMDBDMzA4NDAwRkY2RQorOjEwNERFMDAwMDEwNTEwMjMxQzQwMDBCMzMwNjcwMEZGMkNFMjAwMDZEMQorOjEwNERGMDAwNTA0MDAwQjE4RkJGMDAxMDI0MDIwMDAxMDBFMjMwMDRENworOjEwNEUwMDAwMzBDMjAwMDM1NDQwMDAwODAwQTgzMDIzMzBDMjAwMEMxOAorOjEwNEUxMDAwMTQ0MDAwQTEzMEMyMDAzMDE0NDAwMEEzOEZCRjAwMTAyNgorOjEwNEUyMDAwMEEwMDEzRkMwMDAwMDAwMDE4QzAwMDI0MzA4MjAwMTBBQgorOjEwNEUzMDAwOEQ0MzAwMUM4RDQyMDAyQzAwNjgxODIzMDA0MzEwMkI2QQorOjEwNEU0MDAwMTA0MDAwMEYwMDAwMDAwMDhEMjIwMDIwMDA0NjEwMjFCRAorOjEwNEU1MDAwQUQyMjAwMjA4RDIyMDAyMDAwNDMxMDJCMTQ0MDAwMEJCNworOjEwNEU2MDAwM0MwMjNGRkY4RDIyMDAyMDAwNDMxMDIzQUQyMjAwMjA5MgorOjEwNEU3MDAwOTU0MjAwNUMzMDQyRkZGRjBBMDAxMzcwMDA2MjE4MjE2NworOjEwNEU4MDAwQUQyMDAwMjAwMDY2MTgyMTNDMDIzRkZGMzQ0NkZGRkZBMgorOjEwNEU5MDAwMDBDMzEwMkI1NDQwMDAwMTAwQzAxODIxM0MwMjgwMDhDMAorOjEwNEVBMDAwMzQ0MjAwODAwMDY1MTgyMUFDNDMwMDFDQTA0MDAwMjQ1RgorOjEwNEVCMDAwQTA0MDAwMjcwQTAwMTNCRTNDMDM4MDA4MTA0MDAwNDBCOQorOjEwNEVDMDAwM0MwMzgwMDg4RDQyMDAzQzAwNDgxMDIzMTg0MDAwM0QwMAorOjEwNEVEMDAwMzQ2NzAwODA5MTQyMDAyNDI0NDIwMDAxQTE0MjAwMjQ1MgorOjEwNEVFMDAwOTE0MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYwMAorOjEwNEVGMDAwMDA0MzEwMkIxNDQwMDA3MDhGQkYwMDEwOEQyMjAwMUM0NworOjEwNEYwMDAwMDBBMjEwMjMxODQwMDA2QzAwMDAwMDAwOEQ2MzAwMDQxNAorOjEwNEYxMDAwOTU0MjAwNUMwMDY4MTgyMzMwNDJGRkZGMDAwMzE4NDNFRAorOjEwNEYyMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDE0MDIwMjFEQgorOjEwNEYzMDAwOEQ2MjAwMDQwMDQ4MTAyMzBBMDAxM0ExMDAwMjEwNDNGMAorOjEwNEY0MDAwOTU0MjAwNUMzMDQyRkZGRjAwMDIxMDQwM0MwNjgwMDhBMgorOjEwNEY1MDAwQUM4MjAwMkMzNEM1MDA4MDk0QTIwMDVDOENBNDAwMkM5MAorOjEwNEY2MDAwOTRBMzAwNUMzMDQyRkZGRjAwMDIxMDQwMDA4MjIwMjEyOQorOjEwNEY3MDAwMzA2M0ZGRkYwMDgzMTgyMTAxMDMxMDIxQUNBMjAwMUM0NQorOjEwNEY4MDAwOENDMjAwMDQzNEM2MDEwMEFDQzIwMDFDMjQwMjAwMDIyMgorOjEwNEY5MDAwMEUwMDBGMUZBMEMyMDAwQzEwNDAwMDQ3OEZCRjAwMTA3MgorOjEwNEZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhDQworOjEwNEZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxM0VFMDAwMDAwMDA3RAorOjEwNEZDMDAwMzQ2NzAwODBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUNGOAorOjEwNEZEMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUM1NworOjEwNEZFMDAwMzA4MjAwMDE1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMworOjEwNEZGMDAwMDBBMjEwMjMwNDQzMDAxNDI0MDQwMDA1OEM2MjAwMDQ2MgorOjEwNTAwMDAwMTRBMjAwMDMzQzAzODAwODBBMDAxM0UwMjQwNDAwMDVGNgorOjEwNTAxMDAwOEM2MjAwMDQxNEEyMDAyODhGQkYwMDEwM0MwMjA4MDAxQworOjEwNTAyMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgyOAorOjEwNTAzMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDVFNQorOjEwNTA0MDAwM0MwMjgwMDgyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyQworOjEwNTA1MDAwMjdCRDAwMTgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMENGQQorOjEwNTA2MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA3MAorOjEwNTA3MDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIyMQorOjEwNTA4MDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgzMworOjEwNTA5MDAwMEEwMDEzRkM4RkJGMDAxMDhGQkYwMDEwMDEwMDMwMjFFOQorOjEwNTBBMDAwMEEwMDExMUIyN0JEMDAxODAxMDAzMDIxMEEwMDEyNUEwNgorOjEwNTBCMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRgorOjEwNTBDMDAwM0MwMzgwMDgzNDY0MDEwMDI0MDIwMDAzQTA4MjAwMEMyOQorOjEwNTBEMDAwOEM2MjAwMDQwM0UwMDAwOEFDODIwMDFDM0MwNTgwMDhFMAorOjEwNTBFMDAwMzRBMzAwODA5MDYyMDAyNzM0QTUwMTAwMjQwNjAwNDMwOQorOjEwNTBGMDAwMjQ0MjAwMDFBMDYyMDAyNzkwNjMwMDI3M0MwMjA4MDBDMAorOjEwNTEwMDAwOEM0MjAwNDgzMDYzMDBGRjE0NjIwMDA0M0MwNzYwMjFCOQorOjEwNTExMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhCRgorOjEwNTEyMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDEwM0MwMjgwMDA3OAorOjEwNTEzMDAwMEUwMDE0MDU4QzQ0MDE4MDNDMDI4MDA4MzQ0MzAxMDBCOQorOjEwNTE0MDAwQTA2MDAwMEM4QzQyMDAwNDhGQkYwMDEwMjdCRDAwMTgyNworOjEwNTE1MDAwMDNFMDAwMDhBQzYyMDAxQzI3QkRGRkUwM0MwMjgwMDhCMQorOjEwNTE2MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzQ0NTAwODBERAorOjEwNTE3MDAwMzQ0NjAxMDAzQzA4ODAwMDhEMDkwMTQwOTBDMzAwMENCQQorOjEwNTE4MDAwOENBNDAwM0M4Q0EyMDAzODE0ODIwMDNCMzA2NzAwRkZFNgorOjEwNTE5MDAwOTUwMjAwN0M5MEEzMDAyNzE0NjAwMDA5MzA0NUZGRkZCMgorOjEwNTFBMDAwMjQwMjAwMDU1NEUyMDAwODNDMDQ4MDA4OTBDMjAwMEQ2RgorOjEwNTFCMDAwMjQ0MjAwMDFBMEMyMDAwRDBBMDAxNDQwM0MwNDgwMDhGMworOjEwNTFDMDAwQTBDMDAwMEQzQzA0ODAwODM0ODIwMTAwOTA0MjAwMEMxNQorOjEwNTFEMDAwMjQwMzAwMDUzMDQyMDBGRjE0NDMwMDBBMjRBMjA1REMyQQorOjEwNTFFMDAwMzQ4MzAwODA5MDYyMDAyNzJDNDIwMDA3NTA0MDAwMDU2NQorOjEwNTFGMDAwMjRBMjBBMDA5MDYzMDAyNzI0MDIwMDE0MDA2MjEwMDQxNQorOjEwNTIwMDAwMDBBMjEwMjEzQzEwODAwODM2MTAwMDgwMzA0NUZGRkZCRQorOjEwNTIxMDAwMDEyMDIwMjEwRTAwMTQwNUE2MDUwMDE0OTYwMjAwNUM1MgorOjEwNTIyMDAwOEUwMzAwMzgzQzExODAwMDMwNDJGRkZGMDAwMjEwNDAyNgorOjEwNTIzMDAwMDA2MjE4MjFBRTAzMDAxQzBFMDAwMzQ1OEUyNDAxNDBCRAorOjEwNTI0MDAwOTIwMjAwMjUzNDQyMDA0MEEyMDIwMDI1MEUwMDAzNTBDNQorOjEwNTI1MDAwOEUyNDAxNDA4RTI0MDE0MDNDMDM4MDAwOEM2MjAxRjhDMgorOjEwNTI2MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzRAorOjEwNTI3MDAwM0MwMjEwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQxRgorOjBDNTI4MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwRTQKKzowNDUyOEMwMDgwMDgwMTAwOTUKKzoxMDUyOTAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEM4MDAwMDAzMjAwQzAKKzoxMDUyQTAwMDgwMDgwMjQwMDgwMDBFREMwODAwMEYzNDA4MDAwRjc4NjgKKzoxMDUyQjAwMDA4MDAxMDEwMDgwMDEwNTA4MDA4MDEwMDgwMDgwMDgwQ0QKKzowNDUyQzAwMDgwMDgwMDAwNjIKKzowQzUyQzQwMDBBMDAwMDIyMDAwMDAwMDAwMDAwMDAwMEIyCis6MTA1MkQwMDAwMDAwMDAwRDYzNzAzNTJFMzAyRTMwNkEzOTAwMDAwMDVBCis6MTA1MkUwMDAwNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTA1MkYwMDAwMDAwMDAwMDAwMDAwMDAwMzgwMDNDMDAwMDAwMDAwMDNBCis6MTA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDdECis6MTA1MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMDM4MDAwMDAwMDAwMTEzCis6MTA1MzQwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA1MzUwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIwCis6MTA1MzYwMDAzQzAyMDgwMDI0NDI1NDI0M0MwMzA4MDAyNDYzNTY0Q0E5Cis6MTA1MzcwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEI5Cis6MTA1MzgwMDAzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEzQzEwMDgwMDI1Cis6MTA1MzkwMDAyNjEwMDA4ODNDMUMwODAwMjc5QzU0MjQwRTAwMDI4ODFDCis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDBEMDBBMDE4MjEwMDgwMTAyMTY2Cis6MTA1M0IwMDAwMDgwMjgyMTNDMDQ2MDAwM0MwNzYwMDAyNDA2MDAwOEFGCis6MTA1M0MwMDAxMDYwMDAwNjM0ODQyMDc4OEM0MjAwMDBBQ0UyMjAwODkzCis6MTA1M0QwMDA4QzYzMDAwMDAzRTAwMDA4QUNFMzIwMEMwQTAwMEUyQUY2Cis6MTA1M0UwMDAwMDAwMDAwMDI0MDMwMDQwM0MwMjYwMDAwM0UwMDAwOENECis6MTA1M0YwMDBBQzQzMjAwMDNDMDc2MDAwOEY4NjAwMDA4Q0U1MjA3NEUxCis6MTA1NDAwMDAwMDg2MTAyMTAwQTIxODJCMTQ2MDAwMDcwMDAwMjgyMTNDCis6MTA1NDEwMDA4RjhBRkQ5ODI0MDUwMDAxQTE0NDAwMTM4Rjg5MDAwMEE0Cis6MTA1NDIwMDAwMTI0NDAyMUFGODgwMDAwMDNFMDAwMDgwMEEwMTAyMTAzCis6MTA1NDMwMDA4Rjg0RkQ5ODhGODUwMDAwOTA4NjAwMTMzMEMzMDBGRjk1Cis6MTA1NDQwMDAwMEEzMTAyM0FGODIwMDAwMDNFMDAwMDhBMDgwMDAxMzM3Cis6MTA1NDUwMDA4Rjg0RkQ5ODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEU4Cis6MTA1NDYwMDA5MDg5MDAxMTkwODcwMDExMjQwMjAwMjgzMTI4MDBGRjQ0Cis6MTA1NDcwMDAzOTA2MDAyODMwRTMwMEZGMjQ4NTAwMkMyQ0QwMDAwMUUxCis6MTA1NDgwMDAxMDYyMDAxNjI0ODQwMDFDMEUwMDAwMzkwMDAwMDAwMDg5Cis6MTA1NDkwMDA4RjhGRkQ5ODNDMDU2MDAwMjQwMjAyMDQ5NUVFMDAzRUNCCis6MTA1NEEwMDA5NUVEMDAzQzAwMEU1QzAwMzFBQ0ZGRkYwMTZDNTAyNTE3Cis6MTA1NEIwMDBBQ0FBMjAxMDUyMDAwMDAxMjQwMjAwMDRBQ0EyMjAwMDdCCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RkJGMDAxNDdBCis6MTA1NEQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgwQTAwMDA3MTFCCis6MTA1NEUwMDAwMDAwMjgyMThGODVGRDk4MjdCREZGRDhBRkJGMDAyMDgxCis6MTA1NEYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEQyCis6MTA1NTAwMDAwMDgwOTgyMTkwQTQwMDExMjRCMDAwMUMyNEIxMDAyQzJDCis6MTA1NTEwMDAzMDgzMDBGRjM4NjIwMDI4MEUwMDAwNUIyQzUyMDAwMTJGCis6MTA1NTIwMDAwRTAwMDA2MzAwMDAwMDAwMDIwMDIwMjExMjQwMDAwMjczCis6MTA1NTMwMDAwMjIwMjgyMTAwMDAyODIxMEUwMDAwMzkwMDAwMDAwMDcwCis6MTA1NTQwMDA4RjhERkQ5ODNDMDg4MDAwM0MwNTYwMDA5NUFDMDAzRUM2Cis6MTA1NTUwMDA5NUFCMDAzQzAyNjgzMDI1MDAwQzRDMDAzMTZBRkZGRjFGCis6MTA1NTYwMDAwMTJBMzgyNUFDQTcyMDEwMjQwMjAyMDJBQ0E2MjAxNDgwCis6MTA1NTcwMDA1MjQwMDAwMTI0MDIwMDAyOEZCRjAwMjA4RkIzMDAxQ0E0Cis6MTA1NTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODEzCis6MTA1NTkwMDAwM0UwMDAwOEFDQTIyMDAwMjdCREZGRTBBRkIyMDAxODc2Cis6MTA1NUEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMzQzExNjAwMEUxCis6MTA1NUIwMDA4RTIzMjA3NDhGODIwMDAwMzBEMEZGRkYzMEYyRkZGRjc3Cis6MTA1NUMwMDAxMDYyMDAwQzI0MDYwMDhGMEUwMDAwMzkwMDAwMDAwMDVECis6MTA1NUQwMDAzQzA2ODAxRjAwMTA0NDAwMzRDNUZGMDAwMTEyMzgyNTJFCis6MTA1NUUwMDAyNDA0MDAwMkFFMjcyMDEwMDAwMDMwMjFBRTI1MjAxNDM0Cis6MTA1NUYwMDBBRTI0MjAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEEyCis6MTA1NjAwMDA4RkIwMDAxMDAwQzAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCis6MTA1NjEwMDAyN0JERkZFMEFGQjAwMDEwMzBEMEZGRkZBRkJGMDAxOEQ0Cis6MTA1NjIwMDBBRkIxMDAxNDBFMDAwMDM5MzBGMUZGRkYwMDEwMjQwMDZDCis6MTA1NjMwMDAwMDkxODAyNTNDMDM2MDAwQUM3MDIwMTA4RkJGMDAxOEUzCis6MTA1NjQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDRBQzYyMjAwMDVGCis6MTA1NjUwMDAyN0JEMDAyMDAzRTAwMDA4MDAwMDEwMjEyN0JERkZFODVGCis6MTA1NjYwMDAzQzBCNjAxOEFGQkYwMDEwOEQ2RjUwMDAyNDE4RkY3RkY3Cis6MTA1NjcwMDAzNDBDODA3MTAxRjg3MDI0MzVDRDM4MEMyNDBBMDAzMUM3Cis6MTA1NjgwMDAzQzA5ODAwMEFENkQ1MDAwM0MwODgwMEFBRDZDNTNCQ0Y1Cis6MTA1NjkwMDBBRDJBMDAwODBFMDAwNDlCQUY4ODAwMkMwRTAwMDQ1OUIwCis6MTA1NkEwMDAwMDAwMDAwMDBFMDAwMDQ4MDAwMDAwMDAzQzA3NjAwMDAxCis6MTA1NkIwMDA4Q0U1MDgwODI0MDZGRkYwM0MwMzU3MDkwMEE2MjAyNEM3Cis6MTA1NkMwMDAzNDYyRjAwMDEwODIwMDUwMjQxOTAwMDFBRjgwMDAzNEQxCis6MTA1NkQwMDAwRTAwMEJCQzAwMDAwMDAwM0MwNjYwMTY4Q0M0MDAwMEVECis6MTA1NkUwMDAzQzA3NjAxNDhDRTUwMEEwM0MwM0ZGRkYwMDgzMTAyNEZFCis6MTA1NkYwMDAzQzFGNTM1MzAwMDUxRkMyMTA1RjAwM0QzNEM1N0MwMEEyCis6MTA1NzAwMDA5NEEyMDFGMkE3ODAwMDRDMTA0MDAwMDNBNzgwMDA1QzI3Cis6MTA1NzEwMDAzODRCMUUxRUE3OEIwMDRDOTRBMjAxRjgxMDQwMDAwNEM5Cis6MTA1NzIwMDA4RjhEMDAzNDM4NEMxRTFFQTc4QzAwNUM4RjhEMDAzNDhBCis6MTA1NzMwMDAxMUEwMDAwNDk3ODQwMDVDMjQwRTAwMjBBNzhFMDA0QzZBCis6MTA1NzQwMDA5Nzg0MDA1QzJDOEYwMDgxNTFFMDAwMDEyNDA0MDA4MENDCis6MTA1NzUwMDA5Nzg1MDA0QzJDQjgwNDAxNTMwMDAwMDEyNDA1MDQwMDc3Cis6MTA1NzYwMDAzQzAyNjAwMDhDNDMwNDM4MjQxOTEwM0MzMDdGRkZGRjVBCis6MTA1NzcwMDAxM0Y5MDAwMzMwODdGRkZGNTBFMDAwMEYyNDA2MDA1MEFDCis6MTA1NzgwMDBBMzgwMDA1RTkzODgwMDVFNTEwMDAwMTBBNzg0MDA1QzM3Cis6MTA1NzkwMDBBNzgwMDA1Qzk3ODUwMDVDOEZCRjAwMTBBNzgwMDA0QzNECis6MTA1N0EwMDBBNzgwMDA1NEE3ODAwMDcyM0MwMTA4MDBBQzI1MDA4MDRGCis6MTA1N0IwMDAwM0UwMDAwODI3QkQwMDE4QTM4NjAwNUU5Mzg4MDA1RTAyCis6MTA1N0MwMDA1NTAwRkZGNEE3ODAwMDVDQTc4NDAwNUNBNzg1MDA0QzBGCis6MTA1N0QwMDA4RkJGMDAxMDk3ODUwMDVDQTc4MDAwNTRBNzgwMDA3MkRGCis6MTA1N0UwMDAzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODNDCis6MTA1N0YwMDAwMDAzNTA4MDAxNDY0ODIxOEQyODAwMDQzQzA2NjAwMENCCis6MTA1ODAwMDAwQTAwMDEwRjAxMDYyODIxMEEwMDAxMDNBRjk5MDAzNEE0Cis6MTA1ODEwMDAzMDgzRkZGRjhGODgwMDJDOEY4NzAwMjgwMDAzMjE0MEYyCis6MTA1ODIwMDAzQzA1ODAwMDNDMDIwMDUwMDA4MjQ4MjUzQzA2NjAwMDk4Cis6MTA1ODMwMDAzQzBBMDEwMDM0QUMwNDAwOENDRDA4RTAwMUFBNTgyNEQ1Cis6MTA1ODQwMDAxMTYwMDAwNTAwMDAwMDAwOENDRjA4RTAyNEU3MDAwMTkzCis6MTA1ODUwMDAwMUVBNzAyNUFDQ0UwOEUwOEQxOTAwMTAwMTgwNTgyMUI2Cis6MTA1ODYwMDBBQ0I5MDAzODhEMTgwMDE0QUNCODAwM0NBQ0E5MDAzMEJECis6MTA1ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTA1ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTA1ODkwMDAzQzAzODAwMDhDNjQwMDAwMzA4MjAwMjAxMDQwRkZGRDNCCis6MTA1OEEwMDAzQzBGNjAwMDhERUQwOEUwM0MwRTAxMDAwMUFFMTgyNEI1Cis6MTA1OEIwMDAxNDYwRkZFMTAwMDAwMDAwQUY4NzAwMjgwM0UwMDAwODRCCis6MTA1OEMwMDBBRjhCMDAzODhGODUwMDJDMjQwQkZGRjAzQzA2ODAwMDQ2Cis6MTA1OEQwMDA5NEE3MDAxQThDQTkwMDI0MzBFQ0ZGRkYwMDBDMzhDMEZDCis6MTA1OEUwMDAwMEVCNTAyNDAxMkE0MDIxQUNDODAwM0M4Q0E0MDAyNEM5Cis6MTA1OEYwMDA4Q0MzMDAzQzAwODMxMDIzMTg0MDAwMzMwMDAwMDAwMERDCis6MTA1OTAwMDA4Q0FEMDAyMDI1QTIwMDAxM0MwRjAwNTBBQ0MyMDAzODM1Cis6MTA1OTEwMDAzNUVFMDAxMDNDMDY4MDAwQUNDRTAwMzAwMDAwMDAwMEU4Cis6MTA1OTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA1OTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzA0ODAwMEE3Cis6MTA1OTQwMDA4Qzk5MDAwMDMzMzgwMDIwMTMwMEZGRkQzMEUyMDAwODdFCis6MTA1OTUwMDAxMDQwMDAxNzNDMDk4MDAwOEM4ODA0MDhBQ0E4MDAxMDk3Cis6MTA1OTYwMDA4QzgzMDQwQ0FDQTMwMDE0M0MxOTAwMjAzQzE4ODAwMDZDCis6MTA1OTcwMDBBRjE5MDAzMDk0QUUwMDE4OTRBRjAwMUMwMUNGMzAyMTU1Cis6MTA1OTgwMDBBNEE2MDAxODk0QUQwMDFBMjVBNzAwMDFBNEE3MDAxQTI4Cis6MTA1OTkwMDA5NEFCMDAxQTk0QUMwMDFFMTE4QjAwMDMwMDAwMDAwMEIxCis6MTA1OUEwMDAwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhBNEEwMDAxQUMzCis6MTA1OUIwMDA4RDJBMDQwMEFDQUEwMDEwOEQyNDA0MDRBQ0E0MDAxNEE5Cis6MTA1OUMwMDAwQTAwMDFBQTNDMTkwMDIwOENBMjAwMjAwQTAwMDE5MkMyCis6MTA1OUQwMDAzQzBGMDA1MDBBMDAwMTgwMDAwMDAwMDAyN0JERkZFOEQ2Cis6MTA1OUUwMDBBRkJGMDAxMDBFMDAwMUM0MDAwMDAwMDA4Rjg5MDAyQzIyCis6MTA1OUYwMDA4RkJGMDAxMDNDMDM4MDAwQTUyMDAwMEE5NTI4MDAwQUY0Cis6MTA1QTAwMDA5NTI3MDAwNDI3QkQwMDE4MzEwNUZGRkYzMEU2MDAwRjgxCis6MTA1QTEwMDAwMDA2MTUwMDAwQTIyMDI1MDNFMDAwMDhBQzY0MDA4MDA5Cis6MTA1QTIwMDAzQzA1MDgwMDhDQTUwMDIwOEY4MzAwMDQyN0JERkZFOEZCCis6MTA1QTMwMDBBRkIwMDAxMEFGQkYwMDE0MTBBMzAwMTAwMDAwODAyMTExCis6MTA1QTQwMDAyNDA0MDAwMTAyMDQzMDA0MDBBNjIwMjQwMEMzMTAyNDEyCis6MTA1QTUwMDA1MDQ0MDAwNjI2MTAwMDAxMDAxMDE4ODAyNzg3RkQ5Qzg2Cis6MTA1QTYwMDAxNDgwMDAwQTAwNjcxODIxMjYxMDAwMDEyRTA5MDAwMjg4Cis6MTA1QTcwMDA1NTIwRkZGMzhGODMwMDA0QUY4NTAwMDQ4RkJGMDAxNDBGCis6MTA1QTgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4QzY4MDAwMEVDCis6MTA1QTkwMDAzQzA1ODAwMEFDQTgwMDI0MEUwMDAxQzYyNjEwMDAwMUMxCis6MTA1QUEwMDAzQzA1MDgwMDhDQTUwMDIwMEEwMDAxRUIyRTA5MDAwMjJECis6MTA1QUIwMDAyNDA1MDAwMTAwODUxODA0M0MwNDA4MDA4Qzg0MDAyMEEzCis6MTA1QUMwMDAyN0JERkZDOEFGQkYwMDM0MDA4MzEwMjRBRkJFMDAzMDM1Cis6MTA1QUQwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDlDCis6MTA1QUUwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MUFBCis6MTA1QUYwMDBBRkIwMDAxMDhGODQwMDJDOTQ4NzAwMDY5NDg4MDAwQUIxCis6MTA1QjAwMDAwMEU4MzAyMzMwRDVGRkZGMTJBMDAwNEI4RkJGMDAzNEQ4Cis6MTA1QjEwMDA5NDhCMDAxODk0OEMwMDBBMDE2QzUwMjMzMTQyRkZGRkQzCis6MTA1QjIwMDAwMkEyNDgyQjE1MjAwMDAyMDJBMDIwMjEwMDQwMjAyMUMzCis6MTA1QjMwMDAyQzhGMDAwNTE1RTAwMDAyMDA4MDk4MjEyNDEzMDAwNDNBCis6MTA1QjQwMDAwRTAwMDE1MzAyNjAyMDIxOEY4NzAwMkMwMjYwOTAyMUZCCis6MTA1QjUwMDBBRjgwMDAzMDk0RjQwMDBBMDI2MDgwMjExMjYwMDA0RTkxCis6MTA1QjYwMDAzMjkxRkZGRjNDMTY3MDAwM0MxNDQwMDAzQzFFMjAwMEE4Cis6MTA1QjcwMDAzQzE3NjAwMDhGOTkwMDM4OEYzODAwMDAwMzE2MTgyNEY2Cis6MTA1QjgwMDAxMDc0MDA0RjAyODNGODJCMTdFMDAwMzYwMDAwMDAwMDZECis6MTA1QjkwMDAxMDdFMDA0NzhGODYwMDMwMTRDMDAwM0EyNDAzMDAwMUI1Cis6MTA1QkEwMDAwMjAzMTAyMzAyMjMyMDIxMzA1MEZGRkYxNjAwRkZGMUQzCis6MTA1QkIwMDAzMDkxRkZGRjhGODcwMDJDM0MxMTAwMjAzQzEwODAwMEFCCis6MTA1QkMwMDBBRTExMDAzMDk0RUIwMDBBM0MxNzgwMDAwMjRCNTAyMUNDCis6MTA1QkQwMDBBNEVBMDAwQTk0RTkwMDBBOTRFODAwMDQzMTIzRkZGRkQ0Cis6MTA1QkUwMDAzMTA2MDAwRjAwMDYyRDAwMDA2NUYwMjVBRUZFMDA4MDk2Cis6MTA1QkYwMDA5NEYzMDAwQTk0RjYwMDE4MTJEMzAwMzYwMDEyMjE0MEU0Cis6MTA1QzAwMDA4Q0ZGMDAxNDhDRjQwMDEwMDNFNDY4MjEwMDAwQzAyMTE0Cis6MTA1QzEwMDAwMUE0NzgyQjAyOTg3MDIxMDFDRjYwMjFBQ0VEMDAxNDEzCis6MTA1QzIwMDBBQ0VDMDAxMDAyQjIzODIzMzBGNUZGRkYxNkEwRkZCODJECis6MTA1QzMwMDA4Rjg0MDAyQzhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQ0I0Cis6MTA1QzQwMDA4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQ0JFCis6MTA1QzUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODVECis6MTA1QzYwMDAyN0JEMDAzODE0NzdGRkNDOEY4NjAwMzAwRTAwMEQ4QkQ3Cis6MTA1QzcwMDAwMjAwMjAyMTAwNDAxODIxOEY4NjAwMzAxMEMwRkZDOThCCis6MTA1QzgwMDAwMjAzMTAyMzAyNzA3MDIzOEY4NzAwMkMwMUMzNjgyMTQ4Cis6MTA1QzkwMDAwQTAwMDI3NjMxQjJGRkZGOEY4NjAwMzAxNEMwRkZDOUMwCis6MTA1Q0EwMDAzQzExMDAyMDNDMTA4MDAwMEEwMDAyNDBBRTExMDAzMDgwCis6MTA1Q0IwMDAwRTAwMDNDNDAyMDAyMDIxMEEwMDAyNkQwMDQwMTgyMURBCis6MTA1Q0MwMDAwMjAwMjAyMTBFMDAwN0RCMDIyMDI4MjEwQTAwMDI2REJECis6MTA1Q0QwMDAwMDQwMTgyMTBFMDAwMTgwMDAwMDAwMDAwQTAwMDI1OTU3Cis6MTA1Q0UwMDAwMkIyMzgyMzI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQ0U5Cis6MTA1Q0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNEI2Cis6MTA1RDAwMDAwRTAwMDBFNjI0MTMwMDAxM0MwMjgwMDgzQzAzMjAwMDQyCis6MTA1RDEwMDAzQzAxMDgwMEFDMjAwMDcwMzQ1NDAwODAzNDcyMDAwMzUxCis6MTA1RDIwMDAzQzEwODAwMDI0MTFGRjgwMEUwMDAxRDcwMDAwMDAwMDBECis6MTA1RDMwMDA4RTA2MDAwMDM4QzUwMDAxMzBBNDAwMDExNDgwRkZGQTZGCis6MTA1RDQwMDAwMDAwMDAwMDhFMDcwMTAwMjQwMzBDMDAxMEUzMDAwOThFCis6MTA1RDUwMDAzQzA1ODAwMDhFMDkwMTAwMkQyODMwODA1NTAwMDAxMDgwCis6MTA1RDYwMDAzQzA0ODAwMDhFMEIwMTAwMkQ2QTMxODExMTQwMDAwQzMzCis6MTA1RDcwMDAzQzA0ODAwMDhDQUMwMTAwMTE4MzAwMDQwMDAwMjAyMTUxCis6MTA1RDgwMDA4Q0FFMDEwMDI1Q0RGRjgxMzFBNDAwRkY4RTBGMDEwMEY0Cis6MTA1RDkwMDAwRTAwMDFGQkFFMEYwMDI0MEEwMDAyQzEzQzA0ODAwMDhCCis6MTA1REEwMDA4QzlGMDEwMDI0MTgwMDIwQUM5RjAwMjA5Mjk5MDAwMEQ1Cis6MTA1REIwMDAzMzIzMDBGRjEwNzgwMDFGMjQwMjAwNTAxMDYyMDAyMkRECis6MTA1REMwMDAwMDAwMDAwMDNDMDQ4MDAwOEM4MzAxMDAxNDYwMDAwMzhDCis6MTA1REQwMDAwMDAwMDAwMDU2NjAwMDE0M0MwNDQwMDA4QzgyMDEwMDZBCis6MTA1REUwMDA4Qzk5MDEwMDAwMDA5ODIxMDA1MUY4MjQwMDFGNzk0MDhGCis6MTA1REYwMDAzMzM4MDA3RjAxRjg3MDI1MDFEMjY4MjVBQzhEMDgzMDVBCis6MTA1RTAwMDA4QzhDMDEwMDhDODkwMTAwMjU4QjAxMDAwMTcxNTAyNENDCis6MTA1RTEwMDAwMDBBMzk0MDMxMjgwMDdGMDBFODMwMjUwMEQyMjgyNUNCCis6MTA1RTIwMDBBQzg1MDgzMDNDMDQ0MDAwQUUwNDAxMzgwQTAwMDI5OUY5Cis6MTA1RTMwMDAwMDAwMDAwMDhDODUwMTAwMEUwMDA3OEQyNDA0MDA4MDA2Cis6MTA1RTQwMDAwQTAwMDJDMTNDMDQ4MDAwOEM4NDAxMDAwRTAwMTNFQUE5Cis6MTA1RTUwMDAwMDAwMDAwMDBBMDAwMkMxM0MwNDgwMDAwMEE0MTAyQkQ2Cis6MTA1RTYwMDAyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MEYzCis6MTA1RTcwMDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQ0IyCis6MTA1RTgwMDAwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQkJDCis6MTA1RTkwMDA1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzhECis6MTA1RUEwMDAwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjczCis6MTA1RUIwMDAwM0UwMDAwODAwQzMxMDIxMzA4NEZGRkYzMEM2MDBGRjVDCis6MTA1RUMwMDAzQzA3ODAwMDhDRTIwMUI4MDQ0MEZGRkUwMDA2NEMwMDU1Cis6MTA1RUQwMDAwMTI0MzAyNTNDMDgyMDAwMDBDODIwMjUzQzAzMTAwMDg4Cis6MTA1RUUwMDBBQ0UwMDE4MEFDRTUwMTg0QUNFNDAxODgwM0UwMDAwODhCCis6MTA1RUYwMDBBQ0UzMDFCODNDMDY2MDAwOENDNTIwMUMyNDAyRkZGMDE2Cis6MTA1RjAwMDAzMDgzMDIwMDMwODYwMTAwMTA2MDAwMEUwMEEyMjgyNEI5Cis6MTA1RjEwMDAzNEE1MDAwMTMwODczMDAwMTBFMDAwMDUzMDgzMEMwMDBDCis6MTA1RjIwMDAzNEE1MDAwNDNDMDQ2MDAwMDNFMDAwMDhBQzg1MjAxQzlDCis6MTA1RjMwMDAxMDYwRkZGRDNDMDQ2MDAwMzRBNTAwMDgwM0UwMDAwODg5Cis6MTA1RjQwMDBBQzg1MjAxQzU0QzBGRkYzMzRBNTAwMDIwQTAwMDMxNUUxCis6MTA1RjUwMDAzMDg3MzAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDlFCis6MTA1RjYwMDAzQzA3NjAwMDI0MDYwMDAyMTA4MDAwMTEwMEEwODAyMTgwCis6MTA1RjcwMDA4RjgzMDAzODBFMDAwMzBDOEM2NDAwMTg4RjgyMDAzODY5Cis6MTA1RjgwMDAwMDAwMjAyMTI0MDYwMDAxOEM0NTAwMEMwRTAwMDJGREJCCis6MTA1RjkwMDAwMDAwMDAwMDE2MDAwMDAyMjQwMjAwMDMwMDAwMTAyMThGCis6MTA1RkEwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODU5Cis6MTA1RkIwMDA4Q0U4MjAxQzI0MDlGRkYwMDEwOTI4MjRBQ0U1MjAxQ0YyCis6MTA1RkMwMDA4Rjg3MDAzODBBMDAwMzMyOENFNTAwMEMzQzAyNjAwRTFCCis6MTA1RkQwMDAwMDgwNDAyMTM0NDYwMTAwMjQwOTAwMTgwMDAwMDAwMDIwCis6MTA1RkUwMDAwMDAwMDAwMDAwMDAwMDAwM0MwQTAwNTAzQzAzODAwMDVDCis6MTA1RkYwMDAzNTQ3MDIwMEFDNjgwMDM4MzQ2NDA0MDBBQzY1MDAzQ0VFCis6MTA2MDAwMDBBQzY3MDAzMDhDNkMwMDAwMzE4QjAwMjAxMTYwRkZGRDBDCis6MTA2MDEwMDAyNDA3RkZGRjI0MDMwMDdGOEM4RDAwMDAyNDYzRkZGRjEzCis6MTA2MDIwMDAyNDg0MDAwNEFDQ0QwMDAwMTQ2N0ZGRkIyNEM2MDAwNEU4Cis6MTA2MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNEE0MDIwMDk2Cis6MTA2MDQwMDAwMDg1MjgyQjNDMDMwMDIwM0MwRTgwMDAyNTI5RkZGRjAzCis6MTA2MDUwMDAwMTA1NDAyMUFEQzMwMDMwMTUyMEZGRTAwMDgwMjgyMTVDCis6MTA2MDYwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMzgyN0JERkZEODQxCis6MTA2MDcwMDBBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThBRkIxMDAxNDI3Cis6MTA2MDgwMDBBRkIwMDAxMDk0NDYwMDAyMDA4MDk4MjE4QzUyMDAxODk2Cis6MTA2MDkwMDAyQ0MzMDA4MThDNDgwMDA0OEM0NzAwMDg4QzUxMDAwQ0Y0Cis6MTA2MEEwMDA4QzQ5MDAxMDEwNjAwMDA3OEM0QTAwMTQyQ0M0MDAwNEI2Cis6MTA2MEIwMDAxNDgwMDAxMzMwRUIwMDA3MzBDNTAwMDMxMEEwMDAxMDVGCis6MTA2MEMwMDAwMDAwMDAwMDI0MTAwMDhCMDIwMDIwMjEwMjIwMjgyMTYzCis6MTA2MEQwMDAwRTAwMDJGRDI0MDYwMDAzMTY2MDAwMDIyNDAyMDAwM0U1Cis6MTA2MEUwMDAwMDAwMTAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODVBCis6MTA2MEYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODA2Cis6MTA2MTAwMDAxNTYwRkZGMTI0MTAwMDhCM0MwQzgwMDAzQzAzMDAyMDQ0Cis6MTA2MTEwMDAyNDFGMDAwMUFEODMwMDMwQUY5RjAwMzAwMDAwMDAwMDVECis6MTA2MTIwMDAwMDAwMDAwMDAwMDAwMDAwMjQxOUZGRjAyNEQ4MDAwRjM4Cis6MTA2MTMwMDAwMzE5NzgyNDNDMTAwMEQwQUQ4ODAwMzgwMUYwNzAyNTk4Cis6MTA2MTQwMDAyNENEMDAwMzNDMDg2MDBFQUQ4NzAwM0MzNTg1MDQwMDdCCis6MTA2MTUwMDBBRDhFMDAzMDAwMEQzODgyMzUwNDAwM0MzQzAzODAwMEQ5Cis6MTA2MTYwMDA4QzZCMDAwMDMxNjIwMDIwMTA0MEZGRkQwMDAwMDAwMDM5Cis6MTA2MTcwMDAxMEUwMDAwODI0RTNGRkZGMjQwN0ZGRkY4Q0E4MDAwMEM1Cis6MTA2MTgwMDAyNDYzRkZGRjI0QTUwMDA0QUM4ODAwMDAxNDY3RkZGQjE0Cis6MTA2MTkwMDAyNDg0MDAwNDNDMDQ2MDBFQUM4NjAwMzgwMDAwMDAwMDNCCis6MTA2MUEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjAzQzA2ODAwMENBCis6MTA2MUIwMDAwMTIwMjAyMTAxNDAyODIxQUNDNzAwMzAwRTAwMDM0MkZECis6MTA2MUMwMDAwMDAwODAyMTBFMDAwMzBDMDI0MDIwMjEwQTAwMDM4MkZGCis6MTA2MUQwMDAwMjAwMjAyMTI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRjgwCis6MTA2MUUwMDBBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAxNjQwMDAwRERGCis6MTA2MUYwMDAwMDAwODgyMTBBMDAwM0YxMDIyMDEwMjEyNDA1MDAwMzc5Cis6MTA2MjAwMDA1MDg1MDAyNzhDRTUwMDBDMDAwMDAwMEQyNjJDMDAwMUI1Cis6MTA2MjEwMDAzMTkxRkZGRjI0RUIwMDIwMDIzMjUwMkIxMTQwMDAxOTc2Cis6MTA2MjIwMDBBRjhCMDAzODhGODIwMDMwMTQ0MDAwMTY4Rjg3MDAzODAzCis6MTA2MjMwMDAzQzA2NzAwMDNDMDMyMDAwOENFNTAwMDAwMEE2MjAyNEYyCis6MTA2MjQwMDAxNDgzMDAxMDhGODQwMDQwMDAwNTQ0MDIzQzA5ODAwMDQ0Cis6MTA2MjUwMDAwMEE5ODAyNDE0ODBGRkU5MzEwNjAwRkYyQ0NBMDAwQjNFCis6MTA2MjYwMDAxMTQwRkZFQjI2MkMwMDAxMDAwNjY4ODAzQzBFMDgwMDYwCis6MTA2MjcwMDAyNUNFNTFDODAxQUU2MDIxOEQ4QjAwMDAwMTYwMDAwODYxCis6MTA2MjgwMDAwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMUM4RkIyMDAxOEY4Cis6MTA2MjkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDZDCis6MTA2MkEwMDAwRTAwMDJGRDI0MDQwMDg0MTYwMEZGRDg4Rjg3MDAzOEZBCis6MTA2MkIwMDAwQTAwMDNEMkFGODAwMDQwMDIwMDI4MjEwRTAwMDMyNDEwCis6MTA2MkMwMDAyNDA0MDAwMThGODcwMDM4MEEwMDAzRDJBRjgyMDA0MDA3Cis6MTA2MkQwMDAwMjAwMjgyMTBFMDAwMzI0MDAwMDIwMjEwQTAwMDQwMUVFCis6MTA2MkUwMDA4Rjg3MDAzODBFMDAwMzY5MDIwMDIwMjE4Rjg3MDAzODU1Cis6MTA2MkYwMDAwQTAwMDNEMkFGODIwMDQwMzBBRkZGRkYwMDBGMTlDMDg5Cis6MTA2MzAwMDAzQzA0ODAwMDhDOTAwMUI4MDYwMEZGRkUzQzE5MjAwNDdDCis6MTA2MzEwMDAzQzE4MTAwMEFDODMwMTgwQUM4MDAxODRBQzk5MDE4OEVBCis6MTA2MzIwMDBBQzk4MDFCODBBMDAwM0QzMjYyQzAwMDE5MEUyMDAwMkM5Cis6MTA2MzMwMDA5MEZGMDAwMzAwMDAyMDIxMDAwMjNBMDAwMEZGMjgyNTAyCis6MTA2MzQwMDAyNDA2MDAwODBFMDAwMkZEMDAwMDAwMDAxNjAwRkZERDFDCis6MTA2MzUwMDAyNDAyMDAwMzhGODcwMDM4MDAwMDEwMjEwQTAwMDNEMkI2Cis6MTA2MzYwMDBBRjgyMDA0MDkwRTUwMDAyMDAwMDIwMjEwQTAwMDQyMEQ2Cis6MTA2MzcwMDAyNDA2MDAwOTk0RTUwMDA0OTBFOTAwMDM5MEUzMDAwMjdDCis6MTA2MzgwMDAwMDA1MzQwMDAwMDk0MjAwMDBDODIwMjUwMDgzMjgyNUFDCis6MTA2MzkwMDAyNDA2MDAwQTBBMDAwNDIwMDAwMDIwMjE5MEU1MDAwMkUzCis6MTA2M0EwMDAwMDAwMjAyMTBBMDAwNDIwMjQwNjAwMEIwMDA0NDlDMjNBCis6MTA2M0IwMDAzMTI3MDAzRjAwMDQ0MzQyM0MwMjgwMDAwMDA4MjA0MDk3Cis6MTA2M0MwMDAyNDAzMTY4MDJDRTYwMDIwQUM0MzAwMkMyNEVBRkZFMEQ2Cis6MTA2M0QwMDAyNDgyMDAwMTE0QzAwMDAzMzBBOTAwRkYwMDgwMTAyMUI2Cis6MTA2M0UwMDAzMTQ3MDBGRjAwMDI2MDgwM0MwRDgwMDAyNDBBMDAwMTVDCis6MTA2M0YwMDAwMThEMjAyMTNDMEIwMDBFMDBFQTI4MDQwMDhCMzAyMTg3Cis6MTA2NDAwMDAxMTIwMDAwNTAwMDUzODI3OENDRTAwMDAwMUM1MzgyNTc1Cis6MTA2NDEwMDAwM0UwMDAwOEFDQzcwMDAwOENEODAwMDAwMzA3NzgyNDE0Cis6MTA2NDIwMDAwM0UwMDAwOEFDQ0YwMDAwMjdCREZGRTBBRkIxMDAxNENGCis6MTA2NDMwMDBBRkIwMDAxMEFGQkYwMDE4M0MwNzYwMDA4Q0U0MDgwODQ0Cis6MTA2NDQwMDAzNDAyRjAwMDNDMTE2MDAwMzA4M0YwMDAyNDA1MDFDMEVDCis6MTA2NDUwMDAzQzA0ODAwRTAwMDAzMDIxMTA2MjAwMDYyNDEwMDAwMTcwCis6MTA2NDYwMDA4Q0VBMDgwODMxNDlGMDAwMzkyOEUwMDAwMDA4MzgyQjkwCis6MTA2NDcwMDAwMDA3ODA0MDNDMEQwMjAwQUUyRDA4MTQyNDBDMTY4MDRECis6MTA2NDgwMDAzQzBCODAwMDhFMjc0NDAwMEUwMDBFMzRBRDZDMDAyQ0I3Cis6MTA2NDkwMDAxMjAwMDAwNDNDMDIxNjkxMjQwNTAwMDExMjA1MDAxMEIwCis6MTA2NEEwMDAzQzAyM0Q2QzM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDEyCis6MTA2NEIwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MEMzCis6MTA2NEMwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMDAyCis6MTA2NEQwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDVDCis6MTA2NEUwMDAzQzAyMThEQTM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDg5Cis6MTA2NEYwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MDgzCis6MTA2NTAwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMEMxCis6MTA2NTEwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDFCCis6MTA2NTIwMDAwQTAwMDQzQTI0MDUwMDAxMEEwMDA0M0EwMDAwMjgyMTY4Cis6MTA2NTMwMDAyNDAyMDQwMEE3ODIwMDEwQTc4MDAwMDgwMDAwMjAyMTg4Cis6MTA2NTQwMDAzQzA2MDgwMDI0QzY1NEIwMjQwNUZGRkYyNDg5MDAwMTNFCis6MTA2NTUwMDAwMDA0NDA4MDMxMjRGRkZGMDEwNjE4MjEyQzg3MDAyMDExCis6MTA2NTYwMDAxNEUwRkZGQUFDNjUwMDAwMjQwNDA0MDBBNzg0MDAxMkM0Cis6MTA2NTcwMDBBNzgwMDAwQTAwMDAyMDIxM0MwNjA4MDAyNEM2NTUzMEYwCis6MTA2NTgwMDAyNDA1RkZGRjI0OEQwMDAxMDAwNDYwODAzMUE0RkZGRjdCCis6MTA2NTkwMDAwMTg2NTgyMTJDOEEwMDIwMTU0MEZGRkFBRDY1MDAwMEM1Cis6MTA2NUEwMDBBNzgwMDAxNEE3ODAwMDBDQTc4MDAwMEUwMDAwMjAyMTA3Cis6MTA2NUIwMDAzQzA2MDgwMDI0QzY1NUIwMjQwNUZGRkYyNDk5MDAwMUJECis6MTA2NUMwMDAwMDA0QzA4MDMzMjRGRkZGMDMwNjc4MjEyQzhFMDAwNEQyCis6MTA2NUQwMDAxNUMwRkZGQUFERTUwMDAwM0MwNTYwMDA4Q0E3M0QwMDRBCis6MTA2NUUwMDAyNDAzRTA4RjAwRTMxMDI0MzQ0NjAxNDAwM0UwMDAwODU4Cis6MTA2NUYwMDBBQ0E2M0QwMDI0ODcwMDdGMDAwNzMxQzIyNEM1RkZGRjAxCis6MTA2NjAwMDAwMDA1MThDMjI0NjQwMDAxMzA4MkZGRkYwMDAyMzhDMDc4Cis6MTA2NjEwMDBBNzg0MDAxQzNDMDEwODAwQUMyNzAwMzBBRjgwMDAxOEE0Cis6MTA2NjIwMDAwMDAwMjgyMTAwMDAyMDIxMDAwMDMwMjEyNDg5MDAwMUUxCis6MTA2NjMwMDAwMEE3MjgyMTMxMjRGRkZGMkNBODE3MDExMTAwMDAwMzE3Cis6MTA2NjQwMDAyQzgzMDA4MDE0NjBGRkY5MjRDNjAwMDEwMEMwMjgyMUJCCis6MTA2NjUwMDBBRjg2MDAxODEwQzAwMDFEQTc4NjAwMTYyNENBRkZGRkQxCis6MTA2NjYwMDAwMDBBMTE0MjNDMDgwODAwMjUwODU1QjAxMDQwMDAwQUY1Cis6MTA2NjcwMDAwMDAwMjAyMTAwNDAzMDIxMjQwN0ZGRkYyNDhFMDAwMTZDCis6MTA2NjgwMDAwMDA0Njg4MDMxQzRGRkZGMDFBODYwMjEwMDg2NTgyQkY4Cis6MTA2NjkwMDAxNTYwRkZGQUFEODcwMDAwMzBBMjAwMUY1MDQwMDAwOENGCis6MTA2NkEwMDAwMDA0MzA4MDI0MDMwMDAxMDA0M0M4MDQwMDA0MTA4MDZCCis6MTA2NkIwMDAwMDQ4NzgyMTI3MzhGRkZGMDNFMDAwMDhBREY4MDAwMDBDCis6MTA2NkMwMDAwMEM4MjAyMTI0MDVGRkZGQUM4NTAwMDAwM0UwMDAwODdFCis6MTA2NkQwMDAwMDAwMDAwMDMwQTVGRkZGMzBDNkZGRkYzMEE4MDAxRkZDCis6MTA2NkUwMDAwMDgwNjAyMTMwRTcwMEZGMDAwNTI5NDIwMDAwNTAyMUIyCis6MTA2NkYwMDAxMEMwMDAxRDI0MDkwMDAxMjQwQjAwMDEyNTE4MDAwMTExCis6MTA2NzAwMDAwMTBCMjAwNDMzMDgwMEZGMDEyNjc4MjYzOTBFMDAyMEYzCis6MTA2NzEwMDAyREVEMDAwMTJEQzIwMDAxMDFBMjE4MjUxMDYwMDAwRDExCis6MTA2NzIwMDAwMTQ0NTAyNTAwMDVDODgwMDMyQzQwMjEwMTAwMTgyMTk4Cis6MTA2NzMwMDAxMEUwMDAwRjAwMEEyMDI3OEQwNDAwMDAwMDhBMTgyNUIxCis6MTA2NzQwMDBBRDAzMDAwMDI0QUQwMDAxMDAwMDQwMjEwMDAwNTAyMUY1Cis6MTA2NzUwMDAzMUE1RkZGRjI1MkUwMDAxMzFDOUZGRkYwMEM5MTAyQjE1Cis6MTA2NzYwMDAxMDQwRkZFNzI1MTgwMDAxMDNFMDAwMDgwMDAwMDAwMENBCis6MTA2NzcwMDA4RDBBMDAwMDAxNDQ0MDI0MEEwMDA1MjBBQzY4MDAwMDk2Cis6MTA2NzgwMDAyN0JERkZFODMwQTVGRkZGMzBDNkZGRkZBRkIwMDAxMDA4Cis6MTA2NzkwMDBBRkJGMDAxNDMwRTdGRkZGMDAwMDUwMjEzNDEwRkZGRkFGCis6MTA2N0EwMDAwMDAwNjAyMTI0QUYwMDFGMDBDMDQ4MjEyNDE4MDAwMTEwCis6MTA2N0IwMDAyNDE5MDAyMDA1RTAwMDE2MDFFMDEwMjEwMDAyRjk0MzMxCis6MTA2N0MwMDAwMTlGNjgyQTAwMDk3MDJCMDFBRTQwMjQxMTAwMDAxN0I4Cis6MTA2N0QwMDAwMDBDMTg4MDAwNjQxMDIxMTBFMDAwMDU4QzRCMDAwMEI0Cis6MTA2N0UwMDAwMEY4NDAwNDAwMDgzODIzMDE2NzU4MjQwMDAwMzgyMUNECis6MTA2N0YwMDAxNTQwMDA0MTAwMDA0MDIxNTU2MDAwMTYzMTY5RkZGRjNGCis6MTA2ODAwMDAyNThCMDAwMTMxNkNGRkZGMDVFMUZGRUMwMUUwMTAyMTU5Cis6MTA2ODEwMDAyNEEyMDAzRTAwMDJGOTQzMDE5RjY4MkEwMDA5NzAyQjYwCis6MTA2ODIwMDAwMUFFNDAyNDE1MDBGRkVCMDAwQzE4ODAxNTQ2MDAwNTUyCis6MTA2ODMwMDAzNDAyRkZGRjAyMDAyODIxMEUwMDA1MDQwMDAwMzgyMTY5Cis6MTA2ODQwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc5Cis6MTA2ODUwMDAyN0JEMDAxODE1MjAwMDAzMDE2MDE4MjEwMDBCMUMwMjQxCis6MTA2ODYwMDAyNDA4MDAxMDMwNkEwMEZGMTU0MDAwMDUzMDZFMDAwRjRDCis6MTA2ODcwMDAyNTBEMDAwODAwMDMxQTAyMzFBODAwRkYzMDZFMDAwRjNBCis6MTA2ODgwMDAxNUMwMDAwNTMwN0YwMDAzMjUxMDAwMDQwMDAzMTkwMjI1Cis6MTA2ODkwMDAzMjA4MDBGRjMwN0YwMDAzMTdFMDAwMDUzODY5MDAwMTZGCis6MTA2OEEwMDAyNTAyMDAwMjAwMDMxODgyMzA0ODAwRkYzODY5MDAwMTA5Cis6MTA2OEIwMDAzMTIzMDAwMTEwNjAwMDA0MzEwMzAwRkYyNTBBMDAwMUFDCis6MTA2OEMwMDAzMTQ4MDBGRjMxMDMwMEZGMDAwQzY5NDAwMUEzNDAyMTYzCis6MTA2OEQwMDAyNDBBMDAwMTEwQ0FGRkQ1MzExMEZGRkYyNDZFMDAwMTA5Cis6MTA2OEUwMDAzMUM4MDBGRjExMTlGRkM2MzhDOTAwMDEyRDFGMDAyMDUzCis6MTA2OEYwMDA1M0UwMDAxQzI1OEIwMDAxMjQwRDAwMDEwQTAwMDU5N0MwCis6MTA2OTAwMDAyNDBFMDAyMDUxNDYwMDE3MjU4QjAwMDEyNTA5MDAwMUE3Cis6MTA2OTEwMDAzMTI4MDBGRjJEMDkwMDIwNTEyMDAwMTIyNThCMDAwMTk1Cis6MTA2OTIwMDAyNTQzMDAwMTAxMEQ1MDA0MDE0QjEwMjQyNTA5MDAwMUVECis6MTA2OTMwMDAxNDQwRkZGNDMwNkFGRkZGMzEyN0ZGRkYxMEVFMDAwQzE4Cis6MTA2OTQwMDAyNTgyRkZGRjMwNENGRkZGMDAwMDUwMjEzNDEwRkZGRjc1Cis6MTA2OTUwMDAzMTI4MDBGRjJEMDkwMDIwNTUyMEZGRjIyNTQzMDAwMUJBCis6MTA2OTYwMDAyNThCMDAwMTAxNDY0ODI2MEEwMDA1NTEzMTZDRkZGRkM2Cis6MTA2OTcwMDAwMDAwMzgyMTAwMDA1MDIxMEEwMDA1QTMzNDEwRkZGRjU5Cis6MTA2OTgwMDAyN0JERkZEOEFGQjAwMDEwMzBGMEZGRkZBRkIxMDAxNDRCCis6MTA2OTkwMDAwMDEwMzk0MjMyMTFGRkUwMDAwNzEwODBBRkIzMDAxQzM1Cis6MTA2OUEwMDAwMEIxMjgyMzMwRDNGRkZGQUZCMjAwMTgzMEE1RkZGRjlFCis6MTA2OUIwMDAwMDgwOTAyMTAyNjAzMDIxMDA0NDIwMjFBRkJGMDAyMEUwCis6MTA2OUMwMDAwRTAwMDUyRjMyMDcwMDFGMDIyMjg4MjEzNDAzRkZGRjJCCis6MTA2OUQwMDAwMjQwMjAyMTAyMDAyODIxMDI2MDMwMjEwMDAwMzgyMURECis6MTA2OUUwMDAxMDQzMDAwOTMyMzFGRkZGMDIyMDEwMjE4RkJGMDAyMDI5Cis6MTA2OUYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNECis6MTA2QTAwMDAwM0UwMDAwODI3QkQwMDI4MEUwMDA1MkYwMDAwMDAwMDRECis6MTA2QTEwMDAwMDQwODgyMTAyMjAxMDIxOEZCRjAwMjA4RkIzMDAxQzZFCis6MTA2QTIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODdGCis6MTA2QTMwMDAyN0JEMDAyODAwMDQyNDAwM0MwMzYwMDBBQzYwM0QwODMyCis6MTA2QTQwMDAxMEEwMDAwMjM0ODIxMDA2MzQ4MjEwMTYwM0UwMDAwODAxCis6MTA2QTUwMDBBQzYyM0QwNDI3QkRGRkUwQUZCMDAwMTAzMDkwMDBGRkY2Cis6MTA2QTYwMDAyRTAyMDAwNkFGQkYwMDE4MTA0MDAwMDhBRkIxMDAxNDlFCis6MTA2QTcwMDAwMDEwMzA4MDNDMDMwODAwMjQ2MzUxRjQwMEMzMjgyMTM3Cis6MTA2QTgwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAwMDAwMjAyMTBECis6MTA2QTkwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTNDCis6MTA2QUEwMDAwM0UwMDAwODI3QkQwMDIwOTc5MTAwMTYxNjIwMDA1MTMyCis6MTA2QUIwMDAwMDAwMjAyMTNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTMwCis6MTA2QUMwMDAwMDAwMDAwMDk3OEQwMDEyMTVBMDAwMzEwMDAwMjAyMTY5Cis6MTA2QUQwMDAwQTAwMDYwQTI0MDIwMDA4OTc4NzAwMTAxNEUwMDAxQTMyCis6MTA2QUUwMDAwMDAwMTgyMTAwNjAyMDIxMjQwMjAwMDExMDgwRkZFOTJECis6MTA2QUYwMDA4RkJGMDAxODAwMDQyOUMyMDA0NTMwMjEwMEE2NTgyQjgyCis6MTA2QjAwMDAxMTYwRkZFNDNDMDg4MDAwM0MwNzIwMDAwMDA1NjlDMERDCis6MTA2QjEwMDAwMUE3NjAyNUFEMEMwMDIwM0MwMzgwMDgyNDAyMDAxRjYzCis6MTA2QjIwMDAyNDQyRkZGRkFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDI5Cis6MTA2QjMwMDAyNEE1MDAwMTAwQTY3MDJCMTVDMEZGRjUwMDA1NjlDMDUzCis6MTA2QjQwMDAwQTAwMDVGNDhGQkYwMDE4OTc4NzAwMDgzQzA0MDgwMDZFCis6MTA2QjUwMDAyNDg0NTRCMDI0MDUwNDAwMEUwMDA1QUYyNDA2MDAwMTZGCis6MTA2QjYwMDA5NzhCMDAxMDI0NDQwMDAxMzA4QUZGRkYyNTY5RkZGRjQ2Cis6MTA2QjcwMDAyRDQ4MDQwMDAwNDAyODIxMTUwMDAwNDBBNzg5MDAxMDdFCis6MTA2QjgwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA2MDhBNzgwMDAwOEQxCis6MTA2QjkwMDA5Nzg3MDAwQTNDMDQwODAwMjQ4NDU1MzAyNDA1MDQwMDJCCis6MTA2QkEwMDAwRTAwMDVBRjI0MDYwMDAxOTc5OTAwMTIyNDQ0MDAwMTRECis6MTA2QkIwMDAzMDk4RkZGRjI3MkZGRkZGMkYwRTA0MDAwMDQwODgyMTkxCis6MTA2QkMwMDAxNUMwMDAyQ0E3OEYwMDEyQTc4MDAwMEEzQTAyMDAwMzBDCis6MTA2QkQwMDAyNjI0MDEwMDMwODRGRkZGMEUwMDA1REMyQzQ1MDAwMTU3Cis6MTA2QkUwMDAwMDExRjhDMDI3RjAwMTAwMDAxMDIxQzAwQTAwMDYwQUI5Cis6MTA2QkYwMDAyNDAyMDAwODk3ODUwMDFBOTc4NzAwMEUzQzA0MDgwMEJECis6MTA2QzAwMDAyNDg0NTVCMDBFMDAwNUFGMjQwNjAwMDE5Nzg3MDAxNkI2Cis6MTA2QzEwMDA4Rjg5MDAxODI0NDUwMDAxMzBBOEZGRkYyNEUzRkZGRkZGCis6MTA2QzIwMDAwMTA5MzAyQjAwNDA4MDIxMTRDMDAwMThBNzgzMDAxNkYyCis6MTA2QzMwMDBBNzgwMDAwRTk3ODUwMDFDMEUwMDBFMUUwMjAwMjAyMTZBCis6MTA2QzQwMDAyNDRBMDUwMDMxNDRGRkZGMEUwMDA1REMyNDA1MDAwMTQ1Cis6MTA2QzUwMDAzQzA1MDgwMDk0QTUwMDMyMEUwMDBFMUUwMjAwMjAyMTAzCis6MTA2QzYwMDAyNDQ1MjEwMDNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTM1Cis6MTA2QzcwMDAwMDA1MjFDMDBBMDAwNjQyQTc4NDAwMEEyNEFDMzgwMDlGCis6MTA2QzgwMDAwMDBDMTlDMDBBMDAwNjA4QTc4NDAwMDgwQTAwMDY1QzY4Cis6MTA2QzkwMDBBNzg1MDAwRTMwODQwMEZGMjdCREZGRTgyQzgyMDAwNjg4Cis6MTA2Q0EwMDBBRkJGMDAxNEFGQjAwMDEwMTA0MDAwMTUwMEEwMzgyMTk1Cis6MTA2Q0IwMDAwMDA0NDA4MDNDMDMwODAwMjQ2MzUyMEMwMTAzMjgyMTk3Cis6MTA2Q0MwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAyNENDMDA3RjlECis6MTA2Q0QwMDAwMDA3NTFDMjAwMEM1OUMyMzE3MEZGRkYyNTQ3QzQwMEE0Cis6MTA2Q0UwMDAzMEU1RkZGRjI3ODQwMDA4MDIwMDMwMjEwRTAwMDUwNDc0Cis6MTA2Q0YwMDAyNDA3MDAwMTk3ODYwMDE0MDIwNjIwMjFBNzg0MDAxNEFGCis6MTA2RDAwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEVCCis6MTA2RDEwMDAzQzA1MDgwMDhDQTUwMDMwMDAwNzc5QzIwRTAwMDJFNjkxCis6MTA2RDIwMDAyNUU0REYwMDMwNDVGRkZGM0MwNDA4MDAyNDg0NTVCMDEzCis6MTA2RDMwMDAyNDA2MDAwMTBFMDAwNTA0MjQwNzAwMDE5NzhFMDAxNkFBCis6MTA2RDQwMDA4RkJGMDAxNDhGQjAwMDEwMjVDRDAwMDEyN0JEMDAxOEEzCis6MTA2RDUwMDAwM0UwMDAwOEE3OEQwMDE2MDAwN0M5QzIyNzM4RkYwMDBFCis6MTA2RDYwMDAwMDE4NzhDMjMxRjBGRkZGM0MwNDA4MDAyNDg0NTUzMDNECis6MTA2RDcwMDAwMjAwMjgyMTI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTVBCis6MTA2RDgwMDA5NzhEMDAxMjI2MEUwMTAwMDAwRTg0MDAyNUFDMDAwMTM0Cis6MTA2RDkwMDAzQzBCNjAwMEE3OEMwMDEyQUQ2MDNEMDgzNjA0MDAwNjc1Cis6MTA2REEwMDAwMDAwMzAyMTNDMDc2MDAwOENFMjNEMDQzMDVGMDAwNkFCCis6MTA2REIwMDAxN0UwRkZGRDI0QzkwMDAxMDAwNjFCMDAzMTI2MDBGRjdCCis6MTA2REMwMDAwMDY0NDAyNTJDQzUwMDA0QUNFODNEMDQxNEEwRkZGNjg3Cis6MTA2REQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODFCCis6MTA2REUwMDAwMDA3NTFDMjI1NDlDODAwMjQwNjAwMDEyNDA3MDAwMUZDCis6MTA2REYwMDAzQzA0MDgwMDI0ODQ1NEIwMEUwMDA1MDQzMTI1RkZGRjM0Cis6MTA2RTAwMDA5Nzg3MDAxMDhGQkYwMDE0OEZCMDAwMTAyNEU2MDAwMTk4Cis6MTA2RTEwMDAyN0JEMDAxODAzRTAwMDA4QTc4NjAwMTAzMDg0RkZGRjlDCis6MTA2RTIwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTg1Cis6MTA2RTMwMDAzQzA4NDA4MDAwODgzODI1M0MwMzEwMDBBQ0MwMDE4MDJECis6MTA2RTQwMDBBQ0M1MDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODNECis6MTA2RTUwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTc2Cis6MTA2RTYwMDAzQzA4NDAzODhDQTcwMDAwMDA4ODI4MjUzQzAzMTAwMDBGCis6MTA2RTcwMDBBQ0M3MDE4MEFDQzUwMTg4MDNFMDAwMDhBQ0MzMDFCODExCis6MTA2RTgwMDA4RjgzMDA1ODhGODYwMDUwMTA2NjAwMEIwMDgwNDAyMUQxCis6MTA2RTkwMDAzQzA3MDgwMDI0RTc1NUMwMDAwMzI4QzAwMEE3MTAyMUM0Cis6MTA2RUEwMDA4QzQ0MDAwMDI0NjMwMDAxMTA4ODAwMDUzMDYzMDAwRjRCCis6MTA2RUIwMDA1NDY2RkZGQTAwMDMyOEMwMDNFMDAwMDgwMDAwMTAyMTE4Cis6MTA2RUMwMDAzQzA3MDgwMDI0RTc1NUM0MDBBNzMwMjEwM0UwMDAwODcwCis6MTA2RUQwMDA4Q0MyMDAwMDNDMDM5MDAwMzQ2MjAwMDEwMDgyMjAyNTM3Cis6MTA2RUUwMDAzQzAzODAwMEFDNjQwMDIwOEM2NTAwMjAwNEEwRkZGRTAxCis6MTA2RUYwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMEU5Cis6MTA2RjAwMDAzNDQzMDAwMTAwODMyMDI1MDNFMDAwMDhBQzQ0MDAyMDQ2Cis6MTA2RjEwMDAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMDBDCis6MTA2RjIwMDBBRkJGMDAxODEyMjAwMDEyMDBBMDgwMjE4Q0E1MDAwMDI1Cis6MTA2RjMwMDAxNEEwMDAxMTI0MDQwMDAyM0MwNjgwMDA4Q0MyMDFCODk5Cis6MTA2RjQwMDAwNDQwRkZGRTNDMDc0MDAwMDIyNzIwMjU4RkJGMDAxOEE5Cis6MTA2RjUwMDA4RkIxMDAxNDhGQjAwMDEwM0MwMzEwMDAyN0JEMDAyMDNCCis6MTA2RjYwMDBBQ0M1MDE4MEFDQzQwMTg4MDNFMDAwMDhBQ0MzMDFCODIzCis6MTA2RjcwMDAwQTAwMDcxRDhDQTUwMDAwMEUwMDA2NzQyNDA2MDIwMEZFCis6MTA2RjgwMDAwMDAwMjgyMTBBMDAwNzFEQUUwMDAwMDAzMDg3RkZGRjI3Cis6MTA2RjkwMDAzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkUzQzBBNDAwNjVCCis6MTA2RkEwMDA4Q0E5MDAwMDAwRUE0MDI1QUNDOTAxODA4Q0E0MDAwNDMzCis6MTA2RkIwMDAzQzAzMTAwMEFDQzQwMTg0QUNDODAxODgwM0UwMDAwOEE1Cis6MTA2RkMwMDBBQ0MzMDFCODhGODNGRDk0MjdCREZGRThBRkJGMDAxNEE5Cis6MTA2RkQwMDBBRkIwMDAxMDkwNjcwMDA4MDA4MDEwMjEwMDgwMjgyMUM5Cis6MTA2RkUwMDAzMEU2MDA0MDAwMDAyMDIxMTBDMDAwMDg4QzUwMDAwMDU2Cis6MTA2RkYwMDAwRTAwMDA4ODAyMDAyMDIxMDIwMDIwMjE4RkJGMDAxNDEzCis6MTA3MDAwMDA4RkIwMDAxMDBBMDAwNDk3MjdCRDAwMTgwRTAwMDczMjQ5Cis6MTA3MDEwMDAwMDAwMDAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMTU0Cis6MTA3MDIwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFCis6MTA3MDMwMDAyN0JERkZFMEFGQjAwMDEwOEY5MEZEOTRBRkJGMDAxQ0U0Cis6MTA3MDQwMDBBRkIyMDAxOEFGQjEwMDE0OTIwNjAwMDEwMDgwODgyMTkxCis6MTA3MDUwMDAwRTAwMDcwNDMwRDIwMDA0OTIwNDAwMDUwMDExMjlDMjdBCis6MTA3MDYwMDBBNjA1MDAwMDM0ODMwMDQwQTIwMzAwMDUwRTAwMDcwRUIxCis6MTA3MDcwMDAwMjIwMjAyMTBFMDAwNDk5MDIyMDIwMjEyNDAyMDAwMTc4Cis6MTA3MDgwMDBBRTAyMDAwQzAyMjAyODIxQTYwMjAwMTAyNDA0MDAwMkY3Cis6MTA3MDkwMDBBNjAyMDAxMjI0MDYwMjAwQTYwMjAwMTQwRTAwMDY3NEM2Cis6MTA3MEEwMDBBNjAyMDAxNjE2NDAwMDBGOEZCRjAwMUM5NzhDMDA1NERDCis6MTA3MEIwMDAzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYzMTA5RkZGRjJFCis6MTA3MEMwMDAyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDZBNzg4MDA1NDI5Cis6MTA3MEQwMDAzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTBBREFFMDA1MERBCis6MTA3MEUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNBCis6MTA3MEYwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDZBCis6MTA3MTAwMDBBRkJGMDAxOEFGQjAwMDEwMTA4MDAwMDQwMEEwODgyMUFECis6MTA3MTEwMDAyNDAyMDA4MDEwODIwMDA3MDAwMDAwMDAwMDAwMDAwRDIzCis6MTA3MTIwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODZCCis6MTA3MTMwMDAyN0JEMDAyMDBFMDAwNzA0MDBBMDIwMjE4Rjg2RkQ5NEFCCis6MTA3MTQwMDAwMjIwMjAyMTkwQzUwMDA1MEUwMDA3MEUzMEIwMDBGRjgwCis6MTA3MTUwMDAyNDAzMDAzRTE2MDNGRkYxMDAwMDAwMDAzQzA1ODAwMDAwCis6MTA3MTYwMDA4Q0E0MDE3ODA0ODBGRkZFMjQwODAwMDczQzA3MTAwMDZGCis6MTA3MTcwMDBBQ0IxMDE0MDAyMjAyMDIxQTBBODAxNDQ4RkJGMDAxODFCCis6MTA3MTgwMDA4RkIxMDAxNDhGQjAwMDEwQUNBNzAxNzgwQTAwMDc1QjI0Cis6MTA3MTkwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTBBRkJGMDAxODMzCis6MTA3MUEwMDBBRkIxMDAxNDNDMTA4MDAwOEUxMTAwMjAwMDAwMDAwMEUwCis6MTA3MUIwMDAwRTAwMDQ5OUFFMDQwMDIwQUUxMTAwMjA4RkJGMDAxODBECis6MTA3MUMwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDJECis6MTA3MUQwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUYzCis6MTA3MUUwMDAzQzA4NDAzNTAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MEMwCis6MTA3MUYwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODhGCis6MTA3MjAwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUMyCis6MTA3MjEwMDAzQzA4NDAzNjAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MDhFCis6MTA3MjIwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODVFCis6MTA3MjMwMDAyN0JERkZEMEFGQjUwMDI0MzA5NUZGRkZBRkI2MDAyOEMzCis6MTA3MjQwMDBBRkI0MDAyMEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODJBCis6MTA3MjUwMDBBRkIxMDAxNEFGQjAwMDEwMzBCNkZGRkYxMkEwMDAyNzhFCis6MTA3MjYwMDAwMDAwQTAyMThGOTIwMDM4OEU0MzAwMDAzQzA2ODAwMDcxCis6MTA3MjcwMDAyNDAyMDA0MDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RkExCis6MTA3MjgwMDAwMDY2OTgyNDE0ODIwMDFEMzBBNTAwRkY4RjgzMDA0OEZCCis6MTA3MjkwMDAyQzY4MDAwQTUxMDAwMDEwOEY4NjAwMzAwMDAzNTg4MENGCis6MTA3MkEwMDAzQzBDMDgwMDI1OEM1MjI4MDE2QzUwMjE4RDQ5MDAwMEFGCis6MTA3MkIwMDAwMTIwMDAwODAwMDAwMDAwMDJENDcwMjEzMUM1RkZGRjRBCis6MTA3MkMwMDAwRTAwMDZENjI0MDQwMDg0MTY2MDAwMDI4RjkyMDAzODU3Cis6MTA3MkQwMDBBRjgwMDA0ODhGODYwMDMwMjY0RjAwMjAyNjg5MDAwMUFECis6MTA3MkUwMDAwMUUwOTAyMTMxMzRGRkZGMTRDMDAwMDRBRjhGMDAzODVCCis6MTA3MkYwMDAwMjk1MjgyQjE0QTBGRkRDMDAwMDAwMDAwMjgwMTAyMTYyCis6MTA3MzAwMDA4RkJGMDAyQzhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMENCCis6MTA3MzEwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDEzCis6MTA3MzIwMDAwM0UwMDAwODI3QkQwMDMwMjQwNzAwMzQxNEE3MDE0NkZECis6MTA3MzMwMDAwMDAwMDAwMDkyNDcwMDBFOEY5OEZEOTg4RjkwRkQ5NEZBCis6MTA3MzQwMDAyNDBGMTYwMEEzMDcwMDE5OTI0NDAwMEQzQzA4ODAwMDhBCis6MTA3MzUwMDAzQzA3ODAwQ0EzMDQwMDE4OTY1RjAwMTIzQzA5NjAwMEYzCis6MTA3MzYwMDAzQzExN0ZGRkE2MUYwMDVDOTY1OTAwMTAzNjIyRkZGRkRDCis6MTA3MzcwMDAyNDA0MDAwNTMzMjVGRkZGQUUwNTAwNTQ4RTQ2MDAxQzkzCis6MTA3MzgwMDBBRDBGMDAyODhDRUUwMDAwOEQyRDQ0NDgwMUM2MTgyNjU0Cis6MTA3MzkwMDAwMUEzMzAyMUFFMDYwMDM4OEUwQzAwMzgyNENBMDAwMTRCCis6MTA3M0EwMDAzQzBEN0YwMEFFMEMwMDNDOEUwQjAwM0NBRjBCMDAwNDhDCis6MTA3M0IwMDBBRTBBMDAyMDhFMTMwMDIwQUUxMzAwMUNBMzAwMDAxQjk5Cis6MTA3M0MwMDBBRTAyMDAyQ0EzMDQwMDEyOEU1RjAwMTQyNDEzMDA1MEEwCis6MTA3M0QwMDBBRTFGMDAzNDhFMTkwMDM0QUYxOTAwMTQ4RTQ1MDAxODBBCis6MTA3M0UwMDBBRTA1MDA0ODkyNEYwMDBDQTIwRjAwNEU5MjA5MDAwODEzCis6MTA3M0YwMDAzNTJFMDAyMEEyMEUwMDA4OEUwMzAwMTgwMDZENjAyNEI4Cis6MTA3NDAwMDAzNThCNDAwMEFFMEIwMDE4OTIwQTAwMDAzMTUyMDBGRjhECis6MTA3NDEwMDAxMjUzMDJBNjI0MTNGRjgwM0MwNDA4MDAyNDg0NTY0MDIzCis6MTA3NDIwMDAwRTAwMDc0MDAwMDAwMDAwMjQwQzAwMDQyNDA4MDAwMUE2Cis6MTA3NDMwMDAzQzA1MDgwMDhDQTU1NjQwM0MwNDgwMDBBMjBDMDAyNUE5Cis6MTA3NDQwMDBBMjA4MDAwNThDOTAwMTc4MDYwMEZGRkU4RjkyMDAzODlDCis6MTA3NDUwMDAyNDBEMDAwMjNDMDMxMDAwQUM4NTAxNDBBMDhEMDE0NEM2Cis6MTA3NDYwMDBBQzgzMDE3ODBBMDAwODA0QUY4MDAwNDgyQ0FEMDAzN0Q3Cis6MTA3NDcwMDAxMUEwRkY5OThGODYwMDMwMDAwNTgwODAzQzExMDgwMDI0Cis6MTA3NDgwMDAyNjMxNTI1MDAyMTE3ODIxOERFRTAwMDAwMUMwMDAwODEzCis6MTA3NDkwMDAwMDAwMDAwMDI0MTAwMDA0MTRCMDAwOEUzQzA3ODAwMDlGCis6MTA3NEEwMDAzQzBCMDgwMDhENkI1NjQwOEY4NkZEOTRBQ0VCMDAyMEEyCis6MTA3NEIwMDA4RTQzMDAwODhGOEZGRDk4MjQwRTAwNTBBQ0MzMDAzMDFGCis6MTA3NEMwMDA4RTRBMDAwOEFDQ0EwMDUwOEU0MjAwMENBQ0MyMDAzNDk4Cis6MTA3NEQwMDA4RTQ0MDAxMEFDQzQwMDM4OEU1RjAwMTBBQ0RGMDA1NDQ2Cis6MTA3NEUwMDA4RTU5MDAxNEFDRDkwMDNDOEU1ODAwMThBREY4MDAwNDM5Cis6MTA3NEYwMDA4RTUxMDAxQ0FDRDEwMDIwOTBDNTAwMDAzMEE5MDBGRkM3Cis6MTA3NTAwMDAxMTJFMDI3NjAwMDAwMDAwOENDNTAwMzQ4Q0QxMDAzMEIyCis6MTA3NTEwMDAwMEIxMzAyMzA0QzAwMEYzMjQwNDAwOEMxMjYwMDBGMDlBCis6MTA3NTIwMDAyNDAyMDAwMzBBMDAwODA0QUY4MjAwNDgyNDBGMDAwNTZCCis6MTA3NTMwMDAxNEFGMDA2ODNDMEI4MDAwM0MwMzA4MDA4QzYzNTY0MDhECis6MTA3NTQwMDA4Rjg2RkQ5NEFENjMwMDIwOEU0QTAwMDQ4Rjk5RkQ5OENDCis6MTA3NTUwMDAyNDA3MjAwMEFDQ0EwMDFDOTI0MjAwMDgyNDEyMDAwODM0Cis6MTA3NTYwMDBBMzIyMDAxOThGODQwMDM4OTA5RjAwMDlBMzNGMDAxOEMwCis6MTA3NTcwMDA4Rjg1MDAzODkwQjgwMDBBMzMwNDAwRkYxMDkyMDAxMDg1Cis6MTA3NTgwMDAyODhDMDAwOTE1ODAwMEJDMjQwODAwMDIyNDBFMDAyMDZECis6MTA3NTkwMDAxMDhFMDAwQjM0MDc4MDAwMjg4OTAwMjExNTIwMDAwODc4Cis6MTA3NUEwMDAyNDA3NDAwMDI0MTEwMDQwMTA5MTAwMDUzQzA3MDAwMTExCis6MTA3NUIwMDAyNDBGMDA4MDEwOEYwMDAyM0MwNzAwMDIyNDA3NDAwMEM3Cis6MTA3NUMwMDA4Q0RGMDAxODNDMDRGRjAwMDNFNEM4MjQwMzI3QzAyNTE3Cis6MTA3NUQwMDBBQ0Q4MDAxODkwQjIwMDBCQTBEMjAwMjc4RjgzMDAzOERGCis6MTA3NUUwMDA5NDY1MDAwQzEwQTAwMjJBMDAwMDAwMDA5NDY3MDAwQ0IzCis6MTA3NUYwMDAzQzE5ODAwMDI0MEJGRkJGQTRDNzAwNUM5MDYyMDAwRTAyCis6MTA3NjAwMDAyNDA3MDAwNEEwQzIwMDA4OEY4NDAwMzg5MDlGMDAwRjU4Cis6MTA3NjEwMDBBMERGMDAwOThGOEMwMDM4OEQ5MjAwMTA4RjM4MDA3NDI1Cis6MTA3NjIwMDAwMjU4MjgyM0FDQzUwMDU4OEQ4RjAwMTRBQ0NGMDAyQzE1Cis6MTA3NjMwMDA5NTkxMDAxODMyMjlGRkZGQUNDOTAwNDA5NThFMDAxQUMxCis6MTA3NjQwMDAzMUQwRkZGRkFDRDAwMDQ0OEQ4RDAwMUNBQ0NEMDA0ODg0Cis6MTA3NjUwMDA5NTg4MDAwMkE0QzgwMDc4OTE4MzAwMEVBMEMzMDAwODlBCis6MTA3NjYwMDA5MENBMDAwODAxNEIxMDI0MTI2MDAxRDRBMEMyMDAwODg3Cis6MTA3NjcwMDA4RjkyMDAzODBBMDAwODA0QUY4NzAwNDgyNDA2MDAwNkVECis6MTA3NjgwMDAxNEE2MDAxNDNDMEQ4MDAwM0MxMDA4MDA4RTEwNTY0MERCCis6MTA3NjkwMDA4RjhDRkQ5MEFEQjAwMDIwOEU0ODAwMTg4Rjg2RkQ5NDMxCis6MTA3NkEwMDA4RjhBRkQ5OEFEODgwMDAwOENDMzAwMzgyNDA0MDAwNTQzCis6MTA3NkIwMDBBRDgzMDAwNDhDQ0IwMDNDMTI2MDAwODFBRDRCMDAwMDE4Cis6MTA3NkMwMDAwQTAwMDgwNEFGODQwMDQ4MjQwRTAwMDcxMEFFMDA0QkU3Cis6MTA3NkQwMDAyNDA0MDAwNjNDMDUwODAwMjRBNTU2NDAwRTAwMDcxM0FDCis6MTA3NkUwMDAyNDA0MDA4MThGOTIwMDM4MDAxMzEwMkIwQTAwMDgwNDM0Cis6MTA3NkYwMDBBRjgyMDA0ODI0MTkwMDIzMTRCOUZGRjYzQzBCODAwMDI4Cis6MTA3NzAwMDAzQzBDMDgwMDhEOEM1NjQwOEY4QUZEOThBRDZDMDAyMDkzCis6MTA3NzEwMDA4RjkxRkQ5NDhFNDYwMDA0MjU0NDAwMjAyNjQ1MDAxNEQ4Cis6MTA3NzIwMDBBRTI2MDAyODI0MDYwMDAzMEUwMDBFMkEyNTUwMDAzMDQ1Cis6MTA3NzMwMDA4Rjg3MDAzODAyMDAyMDIxMjQwNjAwMDMwRTAwMEUyQTQ1Cis6MTA3NzQwMDAyNEU1MDAwODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDRECis6MTA3NzUwMDAwMDAwMDAwMDkyMjIwMDAwMjQxRjAwNTAzMDQ0MDBGRjZGCis6MTA3NzYwMDA1NDlGRkZFMThGOTIwMDM4MEUwMDBFMTUwMDAwMDAwMEJDCis6MTA3NzcwMDAwQTAwMDkwOThGOTIwMDM4MjQwMzAwMzMxNEEzMDAzMjUxCis6MTA3NzgwMDAzQzAyODAwMDNDMTEwODAwOEUzMTU2NDA4RjhFRkQ5OERGCis6MTA3NzkwMDBBQzUxMDAyMDhFNDQwMDA4MjQwOTAwMjg4Rjg4RkQ5NEY1Cis6MTA3N0EwMDBBREM0MDAzMDhFNUYwMDBDMjQwNjAwMDlBRERGMDAzNDRDCis6MTA3N0IwMDA4RTU5MDAxMEFERDkwMDM4OEU1ODAwMTRBREQ4MDAyMDc1Cis6MTA3N0MwMDA4RTQ1MDAxOEFEQzUwMDI0OEU0RjAwMUNBRENGMDAyODlCCis6MTA3N0QwMDBBMUM5MDAxMThFNEQwMDA0MTI2MDAwMzFBRDBEMDAyOENBCis6MTA3N0UwMDA4RjkyMDAzODBBMDAwODA0QUY4NjAwNDgyNDA5MDAyMjVFCis6MTA3N0YwMDAxNEE5RkZCODAwMDAwMDAwMjQwNDAwMDczQzBGMDgwMDkzCis6MTA3ODAwMDA4REVGNTY0MDNDMTE4MDAwQUUyRjAwMjA1NjYwRkVCMTM3Cis6MTA3ODEwMDBBRjg0MDA0ODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDEyCis6MTA3ODIwMDAyNDEzMDA1MDhGOThGRDk0OTMxMjAwMDAzMjQ1MDBGRkZFCis6MTA3ODMwMDAxMEIzMDE2OTAwMDAwMDAwOEY5MjAwMzgwMDAwMjAyMTgxCis6MTA3ODQwMDAwQTAwMDgwNEFGODQwMDQ4M0MwNTA4MDAyNEE1NTY0MEZGCis6MTA3ODUwMDAwRTAwMDZFMzI0MDQwMDgxMEEwMDA5MDk4RjkyMDAzODEzCis6MTA3ODYwMDAwMkQ0OTgyMTMyNjVGRkZGMEUwMDA2RDYyNDA0MDA4NDVFCis6MTA3ODcwMDAwQTAwMDgwNDhGOTIwMDM4MTA4OEZGNTEyNDA3MDQwMDgyCis6MTA3ODgwMDAyODg3MDAwMzEwRTAwMUEzMjQxMDAwMDQyNDBEMDAwMTQ4Cis6MTA3ODkwMDA1NDhERkY0QjI0MDc0MDAwMEEwMDA4QkYyNDA3MDEwMDU1Cis6MTA3OEEwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjNGCis6MTA3OEIwMDA4RjkyMDAzODAwMDAzMDIxMEEwMDA4MDRBRjg2MDA0ODhCCis6MTA3OEMwMDAzQzA0MDgwMDI0ODQ1NjQwOENDMjAwMzgwRTAwMDc0MDU3Cis6MTA3OEQwMDA4Q0MzMDAzQzhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTExCis6MTA3OEUwMDAyNDA0MDA4MjNDMDUwODAwMjRBNTU2NDAwRTAwMDczMkZGCis6MTA3OEYwMDAwMDAwMDAwMDhGOTIwMDM4MDAwMDEwMjEwQTAwMDgwNEU4Cis6MTA3OTAwMDBBRjgyMDA0ODhFNTAwMDA0OEY5MUZEOTQzQzBBODAwMEE1Cis6MTA3OTEwMDBBRDUwMDAyMDkyMjIwMDA1MDIwMDI4MjEzMDQ2MDAwMkNFCis6MTA3OTIwMDAxNEMwMDE4MDI0MDQwMDhBOEY5MkZEOTgwMjAwMjgyMTRGCis6MTA3OTMwMDAyNDA0MDA4RDkyNEIwMDFCMzE2MzAwMjAxNDYwMDE3OUY4Cis6MTA3OTQwMDAwMDAwMDAwMDkyMkQwMDA5MjQwQzAwMTIzMUE4MDBGRjU1Cis6MTA3OTUwMDAxMTBDMDE3NDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMTkwCis6MTA3OTYwMDA5MjQ1MDAxQjI0MEUwMDA0MDIwMDIwMjEzNEE5MDA0MjhECis6MTA3OTcwMDBBMjQ5MDAxQjBFMDAwNzBFQTIyRTAwMjUzQzA0ODAwMDI5Cis6MTA3OTgwMDA4QzkxMDE3ODA2MjBGRkZFMjQxODAwMDJBQzkwMDE0MDgzCis6MTA3OTkwMDBBMDk4MDE0NDhGOTIwMDM4M0MwRjEwMDBBQzhGMDE3ODAyCis6MTA3OUEwMDAwQTAwMDkwQTAwMTMxMDJCOEU1MDAwMDQ4RjkxRkQ5NEQ5Cis6MTA3OUIwMDAzQzFGODAwMEFGRjAwMDIwOTIzOTAwMDUwMjAwMjgyMTEyCis6MTA3OUMwMDAzMzI3MDAwMjE0RTAwMDE3MjQwNDAwOEE5MjI0MDAwOURGCis6MTA3OUQwMDAyNDEyMDAwNDAyMDAyODIxMzA4NjAwRkYxMEQyMDAxMTdBCis6MTA3OUUwMDAyNDA0MDA4MTBFMDAwNzA0MDIwMDIwMjE4RjhDRkQ5OEUyCis6MTA3OUYwMDAyNDBCMDAxMjI0MDNGRkZFOTE4RDAwMUIwMjAwMjAyMUE2Cis6MTA3QTAwMDAzNUE4MDAyMEExODgwMDFCQTIyQjAwMDk5MjJBMDAwNTlFCis6MTA3QTEwMDAwMTQzMTAyNDBFMDAwNzBFQTIyMjAwMDUwMjAwMjgyMUI3Cis6MTA3QTIwMDAwMDAwMjAyMTBFMDAwN0NGMDAwMDAwMDAwQTAwMDkwOTE1Cis6MTA3QTMwMDA4RjkyMDAzODhFNTEwMDA0M0MwMjgwMDAzQzEwMDgwMEY4Cis6MTA3QTQwMDAyNjEwNTY0MEFDNTEwMDIwM0MwMTA4MDBBQzMxNTY0MDk1Cis6MTA3QTUwMDA5MjQ2MDAwMzMwQzQwMDA0MTA4MDAxNjU4Rjg0RkQ5NEI5Cis6MTA3QTYwMDAyNDAyMDAwNkEwODIwMDA5OTI0RDAwMUIyNDA4RkZDMERBCis6MTA3QTcwMDAzMUFDMDAzRjAxODg1ODI1QTA4QjAwMDg5MjQzMDAwM0Q5Cis6MTA3QTgwMDAzMDZBMDAwMTE1NDAwMTVDMDAwMDAwMDA4RTQyMDAwOEQxCis6MTA3QTkwMDBBRTAyMDAwODNDMDIwODAwOEM0MjU2NDgxMDQwMDE1QkQwCis6MTA3QUEwMDA4RjhFRkQ5ODAwMDI4MUMyOEY4NUZEOTRBNUQwMDAwQ0I5Cis6MTA3QUIwMDA4RTVGMDAwQzI0MEYwMDAxMjQwOTAwMTRBRERGMDAyQ0EwCis6MTA3QUMwMDA4RTU5MDAxMEFERDkwMDFDOTY0NzAwMTZBNUM3MDAzQzgyCis6MTA3QUQwMDA5NjU4MDAxNEE1RDgwMDNFQUNBRjAwMENBNEFGMDAxMDFGCis6MTA3QUUwMDBBNEFGMDAxMkE0QUYwMDE0QTRBRjAwMTYxMjYwMDE1RjhGCis6MTA3QUYwMDBBMUM5MDAxMTkyNDQwMDAzMzA5MjAwMDIyRTUzMDAwMUVDCis6MTA3QjAwMDA4RjkyMDAzODI2NjIwMDA4MEEwMDA4MDRBRjgyMDA0OEZECis6MTA3QjEwMDA4RTQ2MDAwNDNDMDU4MDAwM0MwNDgwMDhBQ0E2MDAyMDkyCis6MTA3QjIwMDA4RTQ3MDAwODkwODkwMDAwMjQxMTAwNTAzMTIyMDBGRjg4Cis6MTA3QjMwMDAxMDUxMDBCODI0MDUwMDg4M0MwNDgwMDA4QzhGMDFCOEU3Cis6MTA3QjQwMDAwNUUwRkZGRTAwMTM4MDJCM0MxODQwMDkwMEI4MTAyNTBCCis6MTA3QjUwMDBBRjkwMDA0ODNDMTAxMDAwQUM4NjAxODBBQzg3MDE4NEQ3Cis6MTA3QjYwMDBBQzgyMDE4OEFDOTAwMUI4MEEwMDA4MDU4Rjg2MDAzMDBECis6MTA3QjcwMDA4RTQ1MDAwNDNDMDY4MDAwM0MwOTgwMDhBQ0M1MDAyMDBFCis6MTA3QjgwMDA5MTNGMDAwMDI0MDQwMDUwMzNGOTAwRkYxMzI0MDBCMDlCCis6MTA3QjkwMDAyNDA2MDA4ODNDMDQ4MDAwOEM4QTAxQjgwNTQwRkZGRTYyCis6MTA3QkEwMDAzQzBFNDAwRTAwQ0U2ODI1M0MwODEwMDBBQzg1MDE4MERDCis6MTA3QkIwMDBBQzgwMDE4NEFDOEQwMTg4QUM4ODAxQjg5MTJCMDAwMEE5Cis6MTA3QkMwMDAyNDBDRkY4MDI0MDQwMDA0MDE2QzE4MjUyNDA2MDAzMEQ2Cis6MTA3QkQwMDAwRTAwMDY3NEExMjMwMDAwMEEwMDA5MDk4RjkyMDAzOEU0Cis6MTA3QkUwMDA4RTUwMDAwNDhGOTFGRDk4M0MwRjgwMDBBREYwMDAyMDc2Cis6MTA3QkYwMDA5MjI1MDAxQjMwQTkwMDEwMTEyMDAwN0MyNDAzMDA4MTc1Cis6MTA3QzAwMDAzQzA0ODAwMDhDODcwMUI4MDRFMEZGRkUzQzFGNDAxRjRECis6MTA3QzEwMDBBQzkwMDE4MDAwN0YxMDI1MDAxM0M4MkIzQzEwMTAwMDkxCis6MTA3QzIwMDBBQzgwMDE4NEFGOTkwMDQ4QUM4MjAxODhBQzkwMDFCODY3Cis6MTA3QzMwMDAwQTAwMDgwNThGODYwMDMwOEU0NDAwMUMwRTAwMDZFRkY3Cis6MTA3QzQwMDAwMDAwMDAwMDEwNDAwMEY4MDA0MDM4MjE4RjkyMDAzOEZBCis6MTA3QzUwMDAyNDA2MDA4OTNDMDU4MDAwOENBRTAxQjgwNUMwRkZGRUZCCis6MTA3QzYwMDAwMDAwMDAwMEFDQTcwMTgwOEU1MDAwMUMzQzExNDAwMUI4Cis6MTA3QzcwMDAwMDEzNzgyQjAwRDEzODI1M0MxMzEwMDBBQ0IwMDE4NEUwCis6MTA3QzgwMDBBRjhGMDA0OEFDQTcwMTg4QUNCMzAxQjgwQTAwMDgwNTYzCis6MTA3QzkwMDA4Rjg2MDAzMDk2NTkwMDAyM0MxMDA4MDAyNjEwNTY0MDhFCis6MTA3Q0EwMDAzMzM4MDAwNDEzMDAwMEEzM0MwNDYwMDA4RTVGMDAxQzA2Cis6MTA3Q0IwMDAzQzA2ODAwMEFDREYwMDIwM0MwMTA4MDBBQzNGNTY0MDkxCis6MTA3Q0MwMDA5NjRGMDAwMjMxRTcwMDAxMTRFMDAwRTMwMDAwMDAwMERECis6MTA3Q0QwMDA4RTQyMDAwNEFFMDIwMDA4M0MxMDA4MDA4RTEwNTY0ODg4Cis6MTA3Q0UwMDAxMjAwMDBEOTNDMDY4MDAwOEY4NUZEOTQyNDEwMDAwMTBECis6MTA3Q0YwMDA4Q0JGMDAxODhGOTFGRDk4OEY4OUZEOTAwM0U2QzgyNUYxCis6MTA3RDAwMDBBQ0I5MDAxOEEwQTAwMDA1QUNCMDAwMEMzQzE4MDgwMEVECis6MTA3RDEwMDA4RjE4NTY0ODhGODcwMDM4QTRCMDAwMTAwMDE4NzlDMjE5Cis6MTA3RDIwMDBBNEIwMDAxMkE0QjAwMDE0QTRCMDAwMTZBNjJGMDAwQzNBCis6MTA3RDMwMDA4Q0VFMDAwODhGOEQwMDM4OEY4QzAwMzhBRTJFMDAyQzEyCis6MTA3RDQwMDA4REE4MDAwQzI0MDcwMDAyQUUyODAwMUM5MThCMDAxMEE3Cis6MTA3RDUwMDBBMjJCMDAxMThGODMwMDM4OTA2QTAwMTFBMTJBMDAwODFECis6MTA3RDYwMDA4RjgyMDAzODkwNDQwMDEyQTBBNDAwNEU4RjkyMDAzOEY5Cis6MTA3RDcwMDA5MjQ2MDAxM0EyMjYwMDEyOEY5MjAwMzg5NjVGMDAxNERDCis6MTA3RDgwMDBBNjNGMDAzQzk2NTkwMDE2QTYzOTAwM0U4RTU4MDAxOEIyCis6MTA3RDkwMDBBRTM4MDAxNDU2NjBGRDRGQUY4NzAwNDgzQzA1MDgwMDIwCis6MTA3REEwMDAyNEE1NTY0MDBFMDAwNzEzMDAwMDIwMjE4RjkyMDAzOEIyCis6MTA3REIwMDAwMDAwMzgyMTBBMDAwODA0QUY4NzAwNDgzQzA1MDgwMDhECis6MTA3REMwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODBBCis6MTA3REQwMDAwQTAwMDhFQzAwMDAzODIxMEUwMDBFMTUwMDAwMDAwMDFCCis6MTA3REUwMDA4RjkyMDAzODBBMDAwOTVGMDAwMDIwMjEwRTAwMDcwNDZFCis6MTA3REYwMDAwMjAwMjAyMTkyMzIwMDFCMDIwMDIwMjEzNjU4MDAxMDgwCis6MTA3RTAwMDAwRTAwMDcwRUEyMzgwMDFCOEY5MjAwMzgwQTAwMEE0RjlFCis6MTA3RTEwMDAwMDAwMTgyMTkyNDMwMDBDMzA2QTAwMDExMTQwMDAwMzU5Cis6MTA3RTIwMDAwMDAwMDAwMDk2NEIwMDBFQTQ4QjAwMkM5MjQ4MDAwQzIyCis6MTA3RTMwMDAzMTBDMDAwMjExODBGRjQwMDAwMDI4MjE5NjRFMDAxMkY0Cis6MTA3RTQwMDA4RTREMDAxNEE0OEUwMDFBMEEwMDBBMURBQzhEMDAxQzcxCis6MTA3RTUwMDA4RjgzMDA1ODhGODcwMDUwMTA2N0ZGNEUwMDAwMzAyMTNECis6MTA3RTYwMDAzQzA4MDgwMDI1MDg1NUM0MDAwMzIwQzAwMDg4MzAyMUM0Cis6MTA3RTcwMDA4Q0QxMDAwMDEyMjUwMEM4MjQ2MjAwMDEzMDQzMDAwRjlECis6MTA3RTgwMDAxNDY3RkZGQTAwMDMyMEMwMEEwMDBBMzQwMDAwMzAyMTAyCis6MTA3RTkwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4QjQwCis6MTA3RUEwMDA4RjkyMDAzODBBMDAwOEVDMDAxMzM4MkIzQzBCMDgwMEI2Cis6MTA3RUIwMDA4RDZCNTY0MDI0RDhGRkZFMjU3MTAxMDAzMjJBMDA3RkM5Cis6MTA3RUMwMDAwMTQ3OTAyMTAyMzMxMDI0QUQwMjAwMjhBRTQ2MDBEMEI1Cis6MTA3RUQwMDBBRTQwMDBENDBBMDAwODU1QUU1ODAwMUNBQ0MwMDA1NDk3Cis6MTA3RUUwMDAzQzBFMDgwMDhEQ0U1NjQwM0MwOTgwMEMzNTJDMDEwMDFDCis6MTA3RUYwMDBBQ0VFMDAyODhFNTAwMDE0QUQ5MDAwRDA4RTREMDAxNEQyCis6MTA3RjAwMDBBRDhEMDBENDhFNDgwMDEwMjUwN0ZGRkUwQTAwMDg5MUIxCis6MTA3RjEwMDBBRDg3MDAxQzU0OTBGREFBMjQwNzQwMDAwQTAwMDhCRjRBCis6MTA3RjIwMDAyNDA3MTAwMDBFMDAwN0MzMDAwMDAwMDAwQTAwMDkwOTIyCis6MTA3RjMwMDA4RjkyMDAzODhDODM0NDJDM0MwNURFQUQzNEIyQkVFRjBBCis6MTA3RjQwMDAzQzAxMDgwMEFDMjA1NjQwMTA3MjAwOTAwMDAwMDAwMDc4Cis6MTA3RjUwMDAzQzA0NkM2MjM0ODI3OTcwMTQ2MjAwMDgyNDA0MDAwMkNDCis6MTA3RjYwMDA5NzhBMDA1NDk3ODMwMDRDMDIwMDI4MjEwMTQzNDgyQjM0Cis6MTA3RjcwMDAxMTIwMDAxOTI0MDQwMDkyMjQwNDAwMDIwRTAwMDVFNERDCis6MTA3RjgwMDAyNDA1MDIwMDNDMEI4MDAwQUQ2MjAwMjAzQzAxMDgwMDhCCis6MTA3RjkwMDBBQzIyNTY0MDEwNDAwMDBEOEY4RTAwMzgyNDBDMDAyODczCis6MTA3RkEwMDAyNDA0MDAwMzkxQ0QwMDEwMzFBODAwRkY1NTBDMDAwMUZFCis6MTA3RkIwMDAyNDA0MDAwMTBFMDAwMDRDMDAwMDAwMDAxMDQwMDAwNEVBCis6MTA3RkMwMDAyNDA0MDA4MzBBMDAwQTdGOEY5MjAwMzgyNDA0MDA4MzZGCis6MTA3RkQwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMDAwMEQxCis6MTA3RkUwMDA4RjkyMDAzODAwMTMzODJCMEEwMDA4MDRBRjg3MDA0ODJFCis6MTA3RkYwMDAwQTAwMDlFODI0MDIwMDEyOEU0NDAwMDgwRTAwMDZFRjcxCis6MTA4MDAwMDAwMDAwMDAwMDBBMDAwOUY0QUUwMjAwMDgzQzA1MDgwMDY4Cis6MTA4MDEwMDAyNEE1NTY0MDBFMDAwNkUzMjQwNDAwODc4RjkyMDAzODAyCis6MTA4MDIwMDAwQTAwMEExMTAwMTMxMDJCMjQwNDAwMDQwRTAwMDVFNEJBCis6MTA4MDMwMDAyNDA1MDAzMDE0NDAwMDE0MDA0MDM4MjE4RjkyMDAzODhECis6MTA4MDQwMDAwQTAwMEE2NDI0MDYwMDgzM0MwNTA4MDAyNEE1NTY0MDYzCis6MTA4MDUwMDAwQTAwMEI0NTI0MDQwMDg3OEU0NDAwMDQwRTAwMDZFRjNFCis6MTA4MDYwMDAwMDAwMDAwMDBBMDAwQTg1QUUwMjAwMDgzQzA1MDgwMDc2Cis6MTA4MDcwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODU3Cis6MTA4MDgwMDAwQTAwMEExMTAwMDAxMDIxOEY5MjAwMzgzQzA4ODAwODc1Cis6MTA4MDkwMDAzQzBDODAwMDI0MEIwMDUwMjQwQTAwMDFBRDgyMDAyMDFCCis6MTA4MEEwMDBBMTBCMDAwMEExMEEwMDAxOTI0OTAwMDRBMTA5MDAxOEQ3Cis6MTA4MEIwMDA5MjQ0MDAwNUExMDQwMDE5OTI0MzAwMDYzQzA0MDgwMDA0Cis6MTA4MEMwMDAyNDg0NTVDNEExMDMwMDFBOTI0MjAwMDczQzAzMDgwMDBGCis6MTA4MEQwMDAyNDYzNTVDMEExMDIwMDFCOTI0NTAwMDhBMTA1MDAxQ0E1Cis6MTA4MEUwMDA5MjQ2MDAwOUExMDYwMDFEOTI1RjAwMEFBMTFGMDAxRTEyCis6MTA4MEYwMDA5MjU5MDAwQkExMTkwMDFGOTI1ODAwMENBMTE4MDAyMEUyCis6MTA4MTAwMDA5MjUxMDAwREExMTEwMDIxOTI1MDAwMEVBMTEwMDAyMkU5Cis6MTA4MTEwMDA5MjRGMDAwRkExMEYwMDIzOTI0RTAwMTBBMTBFMDAyNEQ5Cis6MTA4MTIwMDA5MjREMDAxMUExMEQwMDI1OTY0QzAwMTRBNTBDMDAyOEJECis6MTA4MTMwMDA5NjRCMDAxNjhGOEEwMDUwOEY5ODAwNThBNTBCMDAyQTg2Cis6MTA4MTQwMDA5NjQ5MDAxODAwMEExMEMwMjU0NTAwMDFBNTA5MDAyQzE5Cis6MTA4MTUwMDA4RTQ2MDAxQzAwNDRDODIxMDA0M0Y4MjEzMEE1MDAwRkMyCis6MTA4MTYwMDBBRkU2MDAwMEFGMjcwMDAwMTBCODAwMDNBRjg1MDA1MDU1Cis6MTA4MTcwMDAwQTAwMEE2NDAwMDAzMDIxMjRBRDAwMDEzMUE4MDAwRjdDCis6MTA4MTgwMDAwMDAwMzAyMTBBMDAwQTY0QUY4ODAwNTg4QzgzNDQyQzE4Cis6MTA4MTkwMDAwQTAwMEIyNDNDMDQ2QzYyM0MwNzA4MDAyNEU3NTVDMDJECis6MTA4MUEwMDAwMDg3OTAyMUFDQzAwMDAwMDAwMDMwMjEwQTAwMEEzNDkyCis6MTA4MUIwMDBBRTQwMDAwMDNDMDQ4MjAxM0MwMzYwMDAzNDgyMEUwMkE5Cis6MTA4MUMwMDBBQzYwM0Q2OEFGODAwMDc4MDNFMDAwMDhBQzYyM0Q2Q0I1Cis6MTA4MUQwMDAyN0JERkZFOEFGQjAwMDEwMzA5MEZGRkYwMDEwMTg0MjNECis6MTA4MUUwMDAyQzYyMDA0MUFGQkYwMDE0MTQ0MDAwMDIyNDA0MDA4MDQwCis6MTA4MUYwMDAyNDAzMDA0MDNDMDEwODAwQUMzMDAwNjAzQzAxMDgwMDUyCis6MTA4MjAwMDBBQzIzMDA2NDBFMDAwRTFFMDA2MDI4MjEyNDQ4MDJCRjJCCis6MTA4MjEwMDAyNDA5RkY4MDAxMDkyODI0MDAxMDM5ODAwMDEwMzA0MDEzCis6MTA4MjIwMDA4RkJGMDAxNDhGQjAwMDEwMDBBNzIwMjEwMDg2MTgyMUY2Cis6MTA4MjMwMDBBRjgzMDA2MDNDMDEwODAwQUMyNTAwNTgzQzAxMDgwMEY5Cis6MTA4MjQwMDBBQzI0MDA1QzAzRTAwMDA4MjdCRDAwMTgzMDgzMDBGRjY5Cis6MTA4MjUwMDAzMEM2RkZGRjMwRTQwMEZGM0MwODgwMDA4RDAyMDFCODBCCis6MTA4MjYwMDAwNDQwRkZGRTAwMDM1NDAwMDE0NDM4MjUzQzA5NjAwMDJGCis6MTA4MjcwMDAwMEU5MjAyNTNDMDMxMDAwQUQwNTAxODBBRDA2MDE4NDE2Cis6MTA4MjgwMDBBRDA0MDE4ODAzRTAwMDA4QUQwMzAxQjg4Rjg2MDAzODEzCis6MTA4MjkwMDAzQzA5NjAxMjM1MjcwMDEwOENDQjAwMDQzQzBDNjAwRUFBCis6MTA4MkEwMDAzNTg1MDAxMDMxNkEwMDA2MkQ0ODAwMDFBQ0U4MDBDNDk1Cis6MTA4MkIwMDA4Q0M0MDAwNEFDQTQzMTgwOENDMjAwMDg5NEMzMDAwMkJBCis6MTA4MkMwMDBBQ0EyMzE4NDAzRTAwMDA4QTc4MzAwNzA4Rjg1MDAzOERBCis6MTA4MkQwMDA4Rjg3RkYyMDhGODZGRjI4OENBRTAwMDQzQzBGNjAxMjMyCis6MTA4MkUwMDAzNUU4MDAxMEFDRUUwMDY4OENBRDAwMDhBQ0VEMDA2QzE5Cis6MTA4MkYwMDA4Q0FDMDAxMEFDQ0MwMDRDOENBQjAwMENBQ0NCMDA0ODcwCis6MTA4MzAwMDA5NENBMDA1NDNDMDIwODAwOEM0MjAwNDQyNTQ5MDAwMUY0Cis6MTA4MzEwMDBBNEM5MDA1NDk0QzQwMDU0MzA4M0ZGRkYxMDYyMDAxN0I2Cis6MTA4MzIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwNDBBNEMyMDA1MjQxCis6MTA4MzMwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzNCCis6MTA4MzQwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMTcxCis6MTA4MzUwMDBBQ0Y4MDAzNDhEMDYwMEJDNTBDNTAwMTk4RDAyMDBCNDg1Cis6MTA4MzYwMDA4RDAyMDBCOEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTY2Cis6MTA4MzcwMDA5NEU4MDBEQTAzRTAwMDA4MzEwMkZGRkYzQzAyMDgwMDQ1Cis6MTA4MzgwMDA4QzQyMDAyNEE0QzAwMDU0QTRDMjAwNTI4Q0EzMDAxODQ0Cis6MTA4MzkwMDBBQ0UzMDAzMDhDQTIwMDE0QUNFMjAwMkM4Q0I5MDAxOEM1Cis6MTA4M0EwMDBBQ0Y5MDAzODhDQjgwMDE0MjQwNTAwMDFBQ0Y4MDAzNDk2Cis6MTA4M0IwMDA4RDA2MDBCQzU0QzVGRkVCOEQwMjAwQjg4RDAyMDBCNEUxCis6MTA4M0MwMDBBNEUyMDA0ODk0RTQwMDQ4QTRFNDAwNEE5NEU4MDBEQUY3Cis6MTA4M0QwMDAwM0UwMDAwODMxMDJGRkZGOEY4NjAwMzgzQzA0ODAwMDc0Cis6MTA4M0UwMDA4Q0M5MDAwODhDQzgwMDA4MDAwOTI5QzAwMDA4MzlDMEUxCis6MTA4M0YwMDBBQzg3MDAyMDkwQzMwMDA3MzA2MjAwMDQxMDQwMDAzQUIwCis6MTA4NDAwMDBBRjg1MDA3NDkwQ0IwMDA3MzE2QTAwMDgxMTQwMDAzOTM1Cis6MTA4NDEwMDA4Rjg3RkYyNDhDQ0QwMDBDOENDRTAwMTQwMUFFNjAyQjE2Cis6MTA4NDIwMDAxMTgwMDAzMjAwMDAwMDAwOENDMjAwMENBQ0UyMDA3MDMxCis6MTA4NDMwMDA4Q0NCMDAxODhGODVGRjIwOEY4OEZGMjhBQ0VCMDA3NDUxCis6MTA4NDQwMDA4Q0NBMDAxMDI0MDJGRkY4QUNBQTAwQzg4Q0M5MDAwQzJBCis6MTA4NDUwMDBBRDA5MDA2MDhDQzQwMDFDQUNBNDAwQzA5MEUzMDA3QzlCCis6MTA4NDYwMDAwMDYyQzgyNEEwRjkwMDdDOTBEODAwMDczMzBGMDAwOEYwCis6MTA4NDcwMDAxMUUwMDAwNDAwMDAwMDAwOTBFRDAwN0MzNUFDMDAwMTJDCis6MTA4NDgwMDBBMEVDMDA3QzkwQ0YwMDA3MzFFRTAwMDExMUMwMDAwOTg0Cis6MTA4NDkwMDAwMDAwMDAwMDkwRTQwMDdDMjQxODAwMDIzNDgyMDAwMkY2Cis6MTA4NEEwMDBBMEUyMDA3QzkwQTMwMEVDMzA3OTAwRkYxMzM4MDAxM0E5Cis6MTA4NEIwMDAyNDA4MDAzNDkwQzkwMDA3MzEyNjAwMDIxMEMwMDAwNENGCis6MTA4NEMwMDAwMDAwMDAwMDkwRUIwMDdDMzU2QTAwMDRBMEVBMDA3QzBDCis6MTA4NEQwMDA5MEVEMDA3RDMxQUMwMDNGQTBFQzAwN0Q5NEE3MDBEQTY4Cis6MTA4NEUwMDAwM0UwMDAwODMwRTJGRkZGOEY4N0ZGMjQwQTAwMEM1QUU4Cis6MTA4NEYwMDA4Q0MyMDAxNDBBMDAwQzVCQUNFMDAwNzAwQTAwMEM3QzFCCis6MTA4NTAwMDBBQ0E4MDBDQzhGOEMwMDM4MjdCREZGRDhBRkIzMDAxQ0JGCis6MTA4NTEwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjBBRkIxMDAxNDcxCis6MTA4NTIwMDA5MThGMDAxNTNDMTM2MDBFMzY3MzAwMTAzMUVCMDAwRjc1Cis6MTA4NTMwMDBBMzhCMDA3QzhEOEYwMDA0OEQ4QjAwMDg5NTlGMDAxMjBCCis6MTA4NTQwMDA5NTk5MDAxMDk1ODQwMDFBOTU5ODAwMUU5NThFMDAxQzMwCis6MTA4NTUwMDAzM0VERkZGRjMzMkFGRkZGMzA4OUZGRkYzMzA4RkZGRkIyCis6MTA4NTYwMDAzMUM3RkZGRjNDMDEwODAwQUMyRDAwMjQzQzAxMDgwMDhFCis6MTA4NTcwMDBBQzI5MDA0NDNDMDEwODAwQUMyQTAwNDBBRTY4MzE3OEM4Cis6MTA4NTgwMDBBRTY3MzE3QzkxODUwMDE1OTU5MTAwMTYzQzEyNjAxMjAyCis6MTA4NTkwMDAzNjUyMDAxMDMwQTIwMEZGMzIzMEZGRkZBRTYyMzE4ODQ5Cis6MTA4NUEwMDBBRTUwMDBCNDkxODMwMDE0OTU5RjAwMTgyNDA2MDAwMTdBCis6MTA4NUIwMDAwMDY2QzgwNDMzRjhGRkZGQUU1OTAwQjhBRTU4MDBCQ0RGCis6MTA4NUMwMDA5MThFMDAxNEFGOEYwMDY0M0MwODYwMDYzMUNEMDBGRjJGCis6MTA4NUQwMDBBRTREMDBDMDkxOEEwMDE1OTU4NDAwMEUzQzA3NjAwQURDCis6MTA4NUUwMDAzMTQ5MDBGRkFGOEIwMDY4MzA4NEZGRkZBRTQ5MDBDOEZGCis6MTA4NUYwMDAzNTExMDAxMDBFMDAwQkMzMzRGMDA0MTAzQzAyMDgwMENCCis6MTA4NjAwMDA4QzQyMDA2MDNDMDMwODAwOEM2MzAwNjQzQzA2MDgwMDU4Cis6MTA4NjEwMDA4Q0M2MDA1ODNDMDUwODAwOENBNTAwNUM4Rjg0MDA2MDY3Cis6MTA4NjIwMDA4RkJGMDAyMEFFMjMwMDRDQUU2NTMxOUNBRTAzMDA1NERBCis6MTA4NjMwMDBBRTQ1MDBEQ0FFNjIzMUEwQUU2MzMxQTRBRTY2MzE5OEM3Cis6MTA4NjQwMDBBRTIyMDA0ODhGQjMwMDFDQUUwMjAwNTA4RkIxMDAxNDYwCis6MTA4NjUwMDBBRTQyMDBFMEFFNDMwMEU0QUU0NjAwRDg4RkIwMDAxMDVBCis6MTA4NjYwMDA4RkIyMDAxODBBMDAwNENDMjdCRDAwMjg5Nzg1MDA3MjNECis6MTA4NjcwMDA5NzgzMDA1QzI3QkRGRkU4QUZCMDAwMTAwMEEzMTAyQjZDCis6MTA4NjgwMDBBRkJGMDAxNDI0MDQwMDA1OEY5MDAwMzgxMDQwMDA1NTNGCis6MTA4NjkwMDAyNDA5MDAwMjBFMDAwNUU0OEY4NTAwNjBBRjgyMDA3NDlCCis6MTA4NkEwMDAyNDA0MDAwMzEwNDAwMDRGMjQwOTAwMDIzQzA2ODAwMDBGCis6MTA4NkIwMDAwRTAwMDA0Q0FDQzIwMDIwMjQwNzAwMDEyNDA4MjAwMDVBCis6MTA4NkMwMDAxMDQwMDA0RDI0MDQwMDA1OTc4RTAwNzI4RjhBRkYyNDBECis6MTA4NkQwMDAyNDA5MDA1MDI1QzUwMDAxQTc4NTAwNzJBMTQ5MDAwMEFBCis6MTA4NkUwMDAzQzBEMDgwMDhEQUQwMDY0MjQwMzgwMDA4Rjg0RkYyMEMyCis6MTA4NkYwMDAwMDBENjYwMEFENEMwMDE4QTU0MDAwMDY5NTRCMDAwQTIxCis6MTA4NzAwMDA4Rjg1RkYyODI0MDJGRjgwMDE2MzMwMjRBNTQ2MDAwQURDCis6MTA4NzEwMDA5MTVGMDAwQTAwMDA0ODIxMDNFMkM4MjVBMTU5MDAwQTIwCis6MTA4NzIwMDBBMEEwMDAwOEExNDAwMDRDQTA4MDAwQzU5NjE4MDAwMjNGCis6MTA4NzMwMDA5NzgzMDA3MDNDMDIwMDA0QTQ5ODAwREE5NjBGMDAwMkIwCis6MTA4NzQwMDAyNDE4RkZCRjI1RUUyNDAxQTQ4RTAwQUU4RTBEMDAwNDc4Cis6MTA4NzUwMDBBQ0FEMDA0NDhFMEMwMDA4QUNBQzAwNDBBNEEwMDA1MEFFCis6MTA4NzYwMDBBNEEwMDA1NDhFMEIwMDBDMjQwQzAwMzBBQzhCMDAyODBECis6MTA4NzcwMDA4RTA2MDAxMEFDODYwMDI0QTQ4MDAwM0VBNDg3MDA0RTI0Cis6MTA4NzgwMDBBNDg3MDA1MEE0ODMwMDNDQUQ0MjAwNzRBQzg4MDBDOEFDCis6MTA4NzkwMDBBQ0E4MDA2MEEwODcwMEVDOTA5RjAwQzQzM0Y5MDA3Rjc0Cis6MTA4N0EwMDBBMDk5MDBDNDkwOTAwMEM0MDIxODc4MjRBMDhGMDBDNDNGCis6MTA4N0IwMDA5MTRFMDA3QzM1Q0QwMDAxQTE0RDAwN0M5MzhCMDA3QzU3Cis6MTA4N0MwMDBBRDQ4MDA3MEFDOEMwMENDQTA4QjAwQzY4Rjg4MDA2OEQwCis6MTA4N0QwMDA4Rjg3MDA2NEFDODgwMEI0QUM4NzAwQjhBNTQwMDA3OEVGCis6MTA4N0UwMDBBNTQwMDA3QThGQkYwMDE0OEZCMDAwMTAwMTIwMTAyMTI3Cis6MTA4N0YwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwNzQwRTAwMDY3NDgyCis6MTA4ODAwMDA4Rjg2MDA2MDBBMDAwRDQ4MjQwOTAwMDIyN0JERkZFMEEyCis6MTA4ODEwMDBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTRBRkJGMDAxODk4Cis6MTA4ODIwMDA4RTA5MDAwNDBFMDAwNDk5MDAwOTIxQzA4RTA4MDAwNDdFCis6MTA4ODMwMDA4Rjg0RkYyMDhGODJGRjI4MDAwODM5QzAzQzA2ODAwMDBCCis6MTA4ODQwMDBBQ0M3MDAyMDk0ODUwMERBOTA0MzAwMTMxNDYwMDAxQzJDCis6MTA4ODUwMDAzMEIxRkZGRjhGOENGRjI0OTE4QjAwMDgzMTZBMDA0MEZDCis6MTA4ODYwMDAxNTQwMDAwQjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTk2Cis6MTA4ODcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMkE1Cis6MTA4ODgwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDlFCis6MTA4ODkwMDAwRTAwMDA2MzAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTU1Cis6MTA4OEEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjc1Cis6MTA4OEIwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDZFCis6MTA4OEMwMDAwRTAwMDA1QjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTJECis6MTA4OEQwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjQ1Cis6MTA4OEUwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDNFCis6MTA4OEYwMDAyN0JERkZFMEFGQjIwMDE4MzA5MkZGRkZBRkIwMDAxMDBECis6MTA4OTAwMDBBRkJGMDAxQ0FGQjEwMDE0MTI0MDAwMUUwMDAwODAyMTU4Cis6MTA4OTEwMDA4Rjg2MDAzODhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMjQ2Cis6MTA4OTIwMDAwMDA1MTQwMjMwRTQwMDA3MTQ4MzAwMTYzMDQ1MDBGRkYwCis6MTA4OTMwMDAyQ0E4MDAwNjExMDAwMDQwMDAwNTU4ODAzQzBDMDgwMERGCis6MTA4OTQwMDAyNThDNTMyQzAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODFBCis6MTA4OTUwMDAwMDAwMDAwMDhGOEUwMDc4MjQwRDAwMDExMUNEMDA1MDIyCis6MTA4OTYwMDAyNDAyMDAwMkFGODIwMDc4MjYwOTAwMDEzMTMwRkZGRkE3Cis6MTA4OTcwMDAyNEM4MDAyMDAyMTIyMDJCMDEwMDMwMjExNDgwRkZFNUMyCis6MTA4OTgwMDBBRjg4MDAzODAyMDAxMDIxOEZCRjAwMUM4RkIyMDAxODgyCis6MTA4OTkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDQ1Cis6MTA4OUEwMDA5Mzg3MDA1RTU0RTAwMDM0MDAwMDMwMjEwRTAwMEM5MEVDCis6MTA4OUIwMDAwMDAwMDAwMDhGODYwMDM4MEEwMDBEQTgyNDAyMDAwMTg0Cis6MTA4OUMwMDA4Rjg3MDA3ODI0MDUwMDAyMTBFNTAwMzEyNDA0MDAxMzhECis6MTA4OUQwMDAwMDAwMjgyMTAwMDAzMDIxMjQwNzAwMDEwRTAwMEJFMkQ2Cis6MTA4OUUwMDAwMDAwMDAwMDBBMDAwREE5OEY4NjAwMzg4RjgzMDA3OEYwCis6MTA4OUYwMDAyNDAyMDAwMjE0NjJGRkY2MjQwNDAwMTIwRTAwMEM0NTRCCis6MTA4QTAwMDAwMDAwMDAwMDhGODUwMDc0MDA0MDMwMjEyNDA0MDAxMjEzCis6MTA4QTEwMDAwRTAwMEJFMjAwMDAzODIxMEEwMDBEQTk4Rjg2MDAzOEY1Cis6MTA4QTIwMDA4RjgzMDA3ODI0MTEwMDAzMTA3MTAwMjkyNDFGMDAwMjk1Cis6MTA4QTMwMDAxMDdGRkZDRTI2MDkwMDAxMjQwNDAwMTAwMDAwMjgyMTI5Cis6MTA4QTQwMDAwMDAwMzAyMTBBMDAwREM2MjQwNzAwMDE4RjkxMDA3ODM0Cis6MTA4QTUwMDAyNDA2MDAwMjE2MjZGRkY5MjQwNDAwMTAwRTAwMENFQTdBCis6MTA4QTYwMDAwMDAwMDAwMDE0NDAwMDIzOEY5ODAwMzg4Rjg2MDAzOEUzCis6MTA4QTcwMDAwQTAwMERBODI0MDIwMDAzMjQwNDAwMTQwRTAwMEJFMkQ3Cis6MTA4QTgwMDAwMDAwMjgyMThGODYwMDM4MEEwMDBEQTgyNDAyMDAwMjY5Cis6MTA4QTkwMDAwRTAwMEQ1MjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODVDCis6MTA4QUEwMDAwRTAwMEJGMjAwMDAwMDAwMjQxOTAwMDIyNDA0MDAxNDQwCis6MTA4QUIwMDAwMDAwMjgyMTAwMDAzMDIxMDAwMDM4MjFBRjk5MDA3ODAzCis6MTA4QUMwMDAwRTAwMEJFMjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODlFCis6MTA4QUQwMDAwRTAwMEMwMjAwMDAwMDAwOEY4NTAwNzQyNDE5MDAwMkIzCis6MTA4QUUwMDAwMDQwMzAyMTI0MDQwMDEwMDAwMDM4MjEwQTAwMERGRjRFCis6MTA4QUYwMDBBRjk5MDA3ODAwNDAzODIxMjQwNDAwMTA5NzBGMDAwMjNECis6MTA4QjAwMDAwMDAwMjgyMTBFMDAwQkUyMzFFNkZGRkY4Rjg2MDAzOEJGCis6MTA4QjEwMDAwQTAwMERBOUFGOTEwMDc4OEY4NEZGMjQzQzA3N0ZGRkU2Cis6MTA4QjIwMDAzNEU2RkZGRjhDODUwMDE4MjQwMjAwMDEwMEE2MTgyNEZCCis6MTA4QjMwMDBBQzgzMDAxODAzRTAwMDA4QTA4MjAwMDUzMDg0RkZGRjJBCis6MTA4QjQwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUNGCis6MTA4QjUwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjMxCis6MTA4QjYwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzQ1Cis6MTA4QjcwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDEyCis6MTA4QjgwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODUyCis6MTA4QjkwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDI2Cis6MTA4QkEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjFDCis6MTA4QkIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEFGCis6MTA4QkMwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAyN0JERkZFODcyCis6MTA4QkQwMDBBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTQwRTAwMEUzRjI4Cis6MTA4QkUwMDAwMEEwMjAyMTAwNTA0ODIxMjQwQUZGODA4RkJGMDAxNERDCis6MTA4QkYwMDA4RkIwMDAxMDAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQTAyCis6MTA4QzAwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMDFBCis6MTA4QzEwMDAyN0JEMDAxOEFDNjUwMDI0QUY4MjAwMjRBQzQwMDAwMEUyCis6MTA4QzIwMDBBQzY1MDAyNDAzRTAwMDA4QUM0MDAwNDAzQzBEMDgwMEE3Cis6MTA4QzMwMDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwMUE0NTgyMUYxCis6MTA4QzQwMDAwMTZDNDgyMTAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQzI4Cis6MTA4QzUwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMENBCis6MTA4QzYwMDBBQzY1MDAyOEFGODIwMDIwMDNFMDAwMDhBQzQwMDAyNDdGCis6MTA4QzcwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTE3Cis6MTA4QzgwMDAzQzA4NjAxNTAwQTgzODI1M0MwMzEwMDBBQ0M0MDE4MEU2Cis6MTA4QzkwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCOEQ0Cis6MTA4Q0EwMDAzQzBEMDgwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDRFCis6MTA4Q0IwMDAwMUE0NTgyMTAxNkM0MDIxMDEwQTQ4MjQwMDA5MzE0MEQ3Cis6MTA4Q0MwMDAzMTA3MDA3RjAwQzcyODI1M0MwNDIwMDAwMEE0MTgyNTk4Cis6MTA4Q0QwMDAzQzAyODAwMEFDNDMwODMwMDNFMDAwMDhBRjgwMDAyMDc1Cis6MTA4Q0UwMDAyN0JERkZFOEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNEE3Cis6MTA4Q0YwMDAwRTAwMEUzRjAwQTAyMDIxMDA1MDQ4MjEyNDBCRkY4MEQxCis6MTA4RDAwMDAwMTJCNTAyNDAwMEEzOTQwMzEyODAwN0YzQzA2MjAwMDA2Cis6MTA4RDEwMDA4RkJGMDAxNDhGQjAwMDEwMDBFODI4MjUzNEMyMDAwMTc2Cis6MTA4RDIwMDAwMEEyMTgyNTNDMDQ4MDAwMjdCRDAwMThBQzgzMDgzMDQxCis6MTA4RDMwMDAwM0UwMDAwOEFGODAwMDI0M0MwNTgwMDg4Q0E3MDA2MDk5Cis6MTA4RDQwMDAzQzA2ODAwODAwODcxMDJCMTQ0MDAwMTEyQzgzNDAwMDQzCis6MTA4RDUwMDA4Q0E4MDA2MDJEMDM0MDAwMTA2MDAwMEYyNDAzNDAwMDI5Cis6MTA4RDYwMDA4Q0M5MDA2MDAwODkyODJCMTRBMDAwMDIwMDgwMTgyMTAzCis6MTA4RDcwMDA4Q0MzMDA2MDAwMDM1QTQyMDAwQjMwODAzQzBBMDgwMDlDCis6MTA4RDgwMDAyNTRBNTNBMDAwQ0EyMDIxMDNFMDAwMDg4QzgyMDAwMDdECis6MTA4RDkwMDAxNDYwRkZGMzI0MDM0MDAwMDAwMzVBNDIwMDBCMzA4MEFDCis6MTA4REEwMDAzQzBBMDgwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODFECis6MTA4REIwMDA4QzgyMDAwMDNDMDU4MDA4OTBBNjAwMDg5Mzg0MDA4OEZGCis6MTA4REMwMDAyNEMyMDAwMTMwNDIwMEZGMzA0MzAwN0YxMDY0MDAwQ0Q5Cis6MTA4REQwMDAwMDAyMzgyN0EwQTIwMDA4M0MwNDgwMDA4Qzg1MDE3ODlFCis6MTA4REUwMDAwNEEwRkZGRThGOEEwMDgwMjQwOTAwMDIzQzA4MTAwMEM2Cis6MTA4REYwMDBBQzhBMDE0MEEwODkwMTQ0MDNFMDAwMDhBQzg4MDE3OEY2Cis6MTA4RTAwMDAwQTAwMEVDNDMwRTIwMDgwMjdCREZGRDhBRkIyMDAxOEMwCis6MTA4RTEwMDA4RjkyMDA4NEFGQkYwMDIwQUZCMzAwMUNBRkIwMDAxMDMyCis6MTA4RTIwMDBBRkIxMDAxNDhGOTMwMDIwOEU1OTAwMjgzQzEwMDA4MEIxCis6MTA4RTMwMDAzQzBFRkZFRkFFNzkwMDAwOEU1ODAwMjRBMjYwMDAwQUJECis6MTA4RTQwMDAzNUNERkZGRkFFNzgwMDA0OTI1MTAwMkMzQzBCRkY5RjA0Cis6MTA4RTUwMDAzNTZBRkZGRkEyNzEwMDBDOEU2RjAwMEMzQzA4MDA0MEM5Cis6MTA4RTYwMDBBMjcxMDAwQjAxRjA2MDI1MDE4RDQ4MjQwMTJBMzgyNEVECis6MTA4RTcwMDAwMEU4MzAyNUFFNjYwMDBDOEU0NTAwMDRBRTYwMDAxODk4Cis6MTA4RTgwMDAzQzA0MDBGRkFFNjUwMDE0OEU0MzAwMkMzNDgyRkZGRkNCCis6MTA4RTkwMDBBNjYwMDAwODAwNjJGODI0QUU3RjAwMTA4RTU5MDAwODFBCis6MTA4RUEwMDA4RjkwMDA4MDk2NEUwMDEyQUU3OTAwMjA4RTUxMDAwQ0ZCCis6MTA4RUIwMDAzMUQ4M0ZGRjAwMTg3OTgwQUU3MTAwMjQ4RTREMDAxNDI4Cis6MTA4RUMwMDAwMUYwNjAyMTMxQ0IwMDAxQUU2RDAwMjg4RTRBMDAxODAwCis6MTA4RUQwMDAwMDBDNDFDMjAwMEI0QjgwQUU2QTAwMkM4RTQ2MDAxQzc5Cis6MTA4RUUwMDAwMTA5MzgyMUE2NjcwMDFDQUU2NjAwMzA5NjQ1MDAwMkQ1Cis6MTA4RUYwMDA4RTQ0MDAyMEE2NjUwMDFFQUU2NDAwMzQ5MjQzMDAzMzA5Cis6MTA4RjAwMDAzMDYyMDAwNDU0NDAwMDA2OTI0NzAwMDAzQzAyODAwODkyCis6MTA4RjEwMDAzNDQzMDEwMDhDN0YwMEMwQUU3RjAwMzA5MjQ3MDAwMEQ4Cis6MTA4RjIwMDA4Rjg2MDAyNEEwQzcwMDMwOTI0NTAwMzMzMEE0MDAwMjkxCis6MTA4RjMwMDA1MDgwMDAwNzkyNTEwMDAxOEY4ODAwMjQyNDBCRkY4MDhECis6MTA4RjQwMDA5MTBBMDAzMDAxNEI0ODI1QTEwOTAwMzA5MjUxMDAwMURGCis6MTA4RjUwMDA4RjkwMDAyNDI0MENGRkJGMjQwNEZGREZBMjExMDAzMUY2Cis6MTA4RjYwMDA4RjhEMDAyNDNDMTg4MDA4MzcxMTAwODA5MUFGMDAzQ0ExCis6MTA4RjcwMDAzMUVFMDA3RkExQUUwMDNDOEY4OTAwMjQ5MTJCMDAzQzk0Cis6MTA4RjgwMDAwMTZDNTAyNEExMkEwMDNDOEY5RjAwMjQ4RTY4MDAxNDlECis6MTA4RjkwMDA5M0U2MDAzQzJEMDcwMDAxMDAwNzExNDAwMEM0MjgyNDdGCis6MTA4RkEwMDAwMEEyMTgyNUEzRTMwMDNDOEY4NzAwMjQ5NjU5MDAxMkU1Cis6MTA4RkIwMDBBNEY5MDAzMjhFNDUwMDA0OTIyRTAwN0MzMEIwMDAwM0VDCis6MTA4RkMwMDAwMDEwNzgyMzMxRUQwMDAzMDBBRDEwMjEzMUNDMDAwMkY4Cis6MTA4RkQwMDAxNTgwMDAwMjI0NDYwMDM0MjQ0NjAwMzAzQzAyODAwOEZDCis6MTA4RkUwMDAzNDQzMDA4MDkwN0YwMDdDMDBCRkM4MjQzMzM4MDAwNEU1Cis6MTA4RkYwMDAxNzAwMDAwMjI0QzIwMDA0MDBDMDEwMjE4Rjk4MDAyNDMyCis6MTA5MDAwMDAyNDE5MDAwMkFDRTIwMDM0QTMxOTAwMDA5MjRGMDAzRjgzCis6MTA5MDEwMDA4RjhFMDAyNDNDMEM4MDA4MzU4QjAwODBBMUNGMDAwMThFCis6MTA5MDIwMDA4RjkxMDAyNDkyNEQwMDNGOEU0NDAwMDRBNjJEMDAwMjMzCis6MTA5MDMwMDA5NTZBMDA1QzBFMDAwRTlEMzE1MEZGRkYwMDAyNEI4MEQwCis6MTA5MDQwMDAwMTMwMzgyNTNDMDg0MjAwMDBFODI4MjVBRTI1MDAwNDAwCis6MTA5MDUwMDA4RTQ0MDAzODhGODUwMDI0QUNBNDAwMTg4RTQ2MDAzNDVFCis6MTA5MDYwMDBBQ0E2MDAxQ0FDQTAwMDBDQUNBMDAwMTBBNEEwMDAxNDg2Cis6MTA5MDcwMDBBNEEwMDAxNkE0QTAwMDIwQTRBMDAwMjJBQ0EwMDAyNDVDCis6MTA5MDgwMDA4RTYyMDAxNDUwNDAwMDAxMjQwMjAwMDE4RkJGMDAyMEI2Cis6MTA5MDkwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDc2Cis6MTA5MEEwMDBBQ0EyMDAwODBBMDAwRUJDMjdCRDAwMjgyN0JERkZDOERGCis6MTA5MEIwMDAzQzA1ODAwODM0QTQwMDgwQUZCRjAwMzRBRkJFMDAzMDUwCis6MTA5MEMwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDc2Cis6MTA5MEQwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEI2Cis6MTA5MEUwMDA5NDgzMDA3ODk0ODIwMDdBMTA0MzAwNTEyNDA1RkZGRjk2Cis6MTA5MEYwMDAwMDgwRjAyMTBBMDAwRkNDMDA4MEI4MjExMDhCMDA0REI5Cis6MTA5MTAwMDA4RkJGMDAzNDhGODYwMDgwM0MxODA4MDA4RjE4MDA1Q0U5Cis6MTA5MTEwMDAyNDExRkY4MDNDMTY4MDAwMDMwNjc4MjEwMUYxODAyNDkxCis6MTA5MTIwMDBBRUQwMDAyQzk2RUUwMDdBMzFFQzAwN0YzQzBEODAwRTI0Cis6MTA5MTMwMDAzMUNCN0ZGRjAxOEQ1MDIxMDAwQjQ4NDAwMTJBQTgyMTJGCis6MTA5MTQwMDA5NkE0MDAwMDNDMDgwODAwOEQwODAwNTgyNDA1RkY4MDA0Cis6MTA5MTUwMDAzMDk1M0ZGRjAxMDYxODIxMDAxNTM5ODAwMDY3QzgyMUFFCis6MTA5MTYwMDAwMzI1RjgyNDNDMDIwMTAwMDNFMjkwMjUzMzM4MDA3RkY4Cis6MTA5MTcwMDAzQzExODAwQ0FFRDIwMDI4MDMxMTkwMjE5MjUwMDAwREJBCis6MTA5MTgwMDAzMjBGMDAwNDExRTAwMDM3MDJFMDk4MjE5NkUzMDA3QUU0Cis6MTA5MTkwMDA5NkU4MDA3QTk2RTUwMDdBMjQwNDgwMDAzMTA3N0ZGRjg0Cis6MTA5MUEwMDAyNEUzMDAwMTMwNjI3RkZGMDBBNEY4MjQwM0UyQzgyNTE1Cis6MTA5MUIwMDBBNkY5MDA3QTk2RTYwMDdBM0MxNDA4MDA4RTk0MDA2MEM2Cis6MTA5MUMwMDAzMEQ2N0ZGRjEyRDQwMEMxMDAwMDAwMDA4RTU4MDAxODc2Cis6MTA5MUQwMDA4Rjg0MDA4MDAyQTAyODIxMjcxM0ZGRkYwRTAwMEU3NzQ2Cis6MTA5MUUwMDBBRTUzMDAyQzk3RDUwMDc4OTdENDAwN0ExMjk1MDAxMEQyCis6MTA5MUYwMDAwMDAwMjgyMTNDMDk4MDA4MzUyNDAxMDAzQzBBODAwODMxCis6MTA5MjAwMDA5MTQ4MDAwODkwODcwMEM1MzExNDAwN0YzMEU0MDBGRkNBCis6MTA5MjEwMDAwMjg0MzAyQjE0QzBGRkI5MjY4QjAwMDE5MzhFMDA4ODg2Cis6MTA5MjIwMDAyNjhDMDAwMTAwOEU2ODIxMTVBQ0ZGQjc4Rjg2MDA4MDY4Cis6MTA5MjMwMDA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODUwCis6MTA5MjQwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODlDCis6MTA5MjUwMDA4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwOEFGCis6MTA5MjYwMDAyN0JEMDAzODAwQzAyMDIxMEUwMDBFNDIwMjgwMjgyMUI4Cis6MTA5MjcwMDA4RTRCMDAxMDhFNEMwMDMwOEY4NDAwMjQyNDA5MDAwMjk1Cis6MTA5MjgwMDAwMTZDNTAyM0FFNEEwMDEwQTA4OTAwMDA5NkUzMDA1Q0Y4Cis6MTA5MjkwMDA4RTQ0MDAzMDhGOTEwMDI0MEUwMDBFOUQzMDcwRkZGRjMxCis6MTA5MkEwMDAwMDAyNDM4MDAxMTAyODI1M0MwNzQyMDAwMEE3MTAyNTNBCis6MTA5MkIwMDBBRTIyMDAwNDhFNUYwMDA0OEY4QTAwMjQ4RTU5MDAwMEM1Cis6MTA5MkMwMDAyNDBCMDAwOEFENUYwMDFDQUQ1OTAwMThBRDQwMDAwQzI4Cis6MTA5MkQwMDBBRDQwMDAxMDkyNDYwMDBBMjQwNDAwMDUyNDA4QzAwMDk2Cis6MTA5MkUwMDAzMEQwMDBGRkE1NTAwMDE0OTY1ODAwMDhBNTU4MDAxNjZECis6MTA5MkYwMDA5MjUxMDAwQTNDMTg4MDA4MzIyRjAwRkZBNTRGMDAyMDMxCis6MTA5MzAwMDA5NjRFMDAwODM3MTEwMTAwQTU0RTAwMjJBRDQwMDAyNDAyCis6MTA5MzEwMDA5MjREMDAwQjMxQUMwMEZGQTU0QzAwMDJBMTRCMDAwMUE3Cis6MTA5MzIwMDA4RTQ5MDAzMDhGODMwMDI0MjQwQkZGQkZBQzY5MDAwOEY2Cis6MTA5MzMwMDBBMDY0MDAzMDhGOTAwMDI0MjQwM0ZGREY5NjA3MDAzMkUyCis6MTA5MzQwMDAwMEU4MjgyNDAwQjUxMDI1QTYwMjAwMzI5MjFGMDAzMjQyCis6MTA5MzUwMDAzM0Y5MDAzRjM3MjYwMDQwQTIwNjAwMzI4RjhDMDAyNEVDCis6MTA5MzYwMDBBRDgwMDAzNDhFMkYwMEMwQUQ4RjAwMzg5MThFMDAzQzUwCis6MTA5MzcwMDAzQzBGN0ZGRjMxQ0QwMDdGQTE4RDAwM0M4Rjg0MDAyNDA2Cis6MTA5MzgwMDAzNUVFRkZGRjkwOEEwMDNDMDE0QjQ4MjRBMDg5MDAzQzQ5Cis6MTA5MzkwMDA4Rjg1MDAyNDkwQTgwMDNDMDEwMzM4MjRBMEE3MDAzQzNFCis6MTA5M0EwMDA4RTQyMDAzNDhGOTEwMDI0M0MwMzgwMDhBRTIyMDA0MDlFCis6MTA5M0IwMDA4RTU5MDAyQzhFNUYwMDMwMDMzRjMwMjNBRTI2MDA0NEQwCis6MTA5M0MwMDA5MjMwMDA0ODMyMTgwMDdGQTIzODAwNDg4Rjg4MDAyNDZECis6MTA5M0QwMDA4RTREMDAzMDhEMEMwMDQ4MDFBRTU4MjQwMTk2NTAyNDZCCis6MTA5M0UwMDAwMTRCNDgyNUFEMDkwMDQ4OTI0NDAwMEFBMTA0MDA0Q0Y1Cis6MTA5M0YwMDA5NjQ3MDAwODhGODUwMDI0QTRBNzAwNEU4RTUwMDAzMEE5Cis6MTA5NDAwMDA4RTQ0MDAzMDBFMDAwMkU2OEM2NTAwNjA5MkY5MDA3QzBDCis6MTA5NDEwMDAwMDAyRjk0MDAwNDAyODIxMDAwMjExMDAwM0UyMzAyMTNGCis6MTA5NDIwMDAzMzM2MDAwMjEyQzAwMDAzMDIwNjgwMjEwMDA1QjA4MDFFCis6MTA5NDMwMDAwMjE2ODAyMTkyNkQwMDdDMzFCMzAwMDQxMjYwMDAwMjlDCis6MTA5NDQwMDAwMDA1NzA4MDAyMEU4MDIxOEU0QjAwMzAyNDA1ODAwMEM0Cis6MTA5NDUwMDAzMTZBMDAwMzAwMEE0ODIzMzEyNDAwMDMwMjA0MTgyMTYyCis6MTA5NDYwMDA4RjkwMDAyNEFFMDMwMDM0OTZFNDAwN0E5NkU4MDA3QUU4Cis6MTA5NDcwMDA5NkYxMDA3QTMxMDc3RkZGMjRFMjAwMDEzMDVGN0ZGRjIxCis6MTA5NDgwMDAwMjI1QzgyNDAzM0YzMDI1QTZFNjAwN0E5NkY4MDA3QTI0Cis6MTA5NDkwMDAzQzEyMDgwMDhFNTIwMDYwMzMwRjdGRkYxMUYyMDAxODVCCis6MTA5NEEwMDAwMDAwMDAwMDhGODQwMDgwMEUwMDBFNzcwMkEwMjgyMUFCCis6MTA5NEIwMDA4Rjg0MDA4MDBFMDAwRTg3MDI4MDI4MjEwRTAwMEVCQ0QzCis6MTA5NEMwMDAwMDAwMDAwMDBBMDAwRkM4MDAwMDAwMDA5NkYxMDA3QUJBCis6MTA5NEQwMDAwMjI0ODAyNEE2RjAwMDdBOTJFRjAwN0E5MkVCMDA3QUMwCis6MTA5NEUwMDAzMUVFMDBGRjAwMEU2OUMyMDAwRDYwMjcwMDBDNTFDMDc0Cis6MTA5NEYwMDAzMTY5MDA3RjAxMkEyMDI1MEEwMDBGQzJBMkU0MDA3QTA4Cis6MTA5NTAwMDA5NkU2MDA3QTAwQzVDMDI0QTZGODAwN0E5MkVGMDA3QUE5Cis6MTA5NTEwMDA5MkYzMDA3QTMxRjIwMEZGMDAxMjcxQzIwMDBFNjgyNzQ4Cis6MTA5NTIwMDAwMDBEQjFDMDMyNkMwMDdGMDE5NjI4MjVBMkU1MDA3QUJCCis6MTA5NTMwMDAwQTAwMTA3OThGODQwMDgwM0MwMzgwMDAzMDg0RkZGRjk0Cis6MTA5NTQwMDAzMEE1RkZGRkFDNjQwMDE4QUM2NTAwMUMwM0UwMDAwODA4Cis6MTA5NTUwMDA4QzYyMDAxNDI3QkRGRkE4M0MwNjgwMDhBRkJFMDA1MEY3Cis6MTA5NTYwMDBBRkJGMDA1NEFGQjcwMDRDQUZCNjAwNDhBRkI1MDA0NDMyCis6MTA5NTcwMDBBRkI0MDA0MEFGQjMwMDNDQUZCMjAwMzhBRkIxMDAzNDdECis6MTA5NTgwMDBBRkIwMDAzMDM0QzgwMTAwOTEwNTAwQzU5MEM3MDAwODk1Cis6MTA5NTkwMDAzMDlFRkZGRjMwQTUwMEZGMzBFMjAwN0YwMDQ1MTgyQTEzCis6MTA5NUEwMDBBN0EwMDAxNEE3QTAwMDFFMTA2MDAwNTNBRkEwMDAxMEQ5Cis6MTA5NUIwMDA5MEM5MDAwODMxMjYwMDdGMDBBNjIwMjMyNDkzRkZGRkQ2Cis6MTA5NUMwMDAwMDEzODAyQjAwMUU4ODJCMDIxMTc4MjQ1MUUwMDA4NEE4Cis6MTA5NUQwMDA4RkIzMDAxMDNDMTk4MDA4OTczNjAwNTI5NzM3MDA1MDFGCis6MTA5NUUwMDAwMDFFQzQwMDAyRDdBODIzMDAxNUE0MDAwMDE0MTQwMzExCis6MTA5NUYwMDAwM0MyOTAyQTE2NDAwMDAyMDAxODJDMDMwMDQwMjgyMUM0Cis6MTA5NjAwMDAwMDEzMTQwMDAwMDIyNDAzMDBBNEY4MkE1N0UwMDAwMTBDCis6MTA5NjEwMDAwMEEwMjAyMTI4ODMwMDA5MTQ2MDAwMDIwMDgwQTAyMUZFCis6MTA5NjIwMDAyNDE0MDAwODNDMEE4MDA4OEQ0NTAwNDgwMDE0NDk4MDM1Cis6MTA5NjMwMDA4RDQ4MDA0QzNDMDM4MDAwMzEyNEZGRkYzQzA2MDAxMEE1Cis6MTA5NjQwMDAwMDg2MzgyNTM0NzEwNDAwQUM2NTAwMzhBRjkxMDA4NDgxCis6MTA5NjUwMDBBQzY4MDAzQ0FDNjcwMDMwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA5NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA5NjcwMDAwMDAwMDAwMDAwMDAwMDAwOEM2QzAwMDAzMThCMDAyMDE2Cis6MTA5NjgwMDAxMTYwRkZGRDAwMTQ2ODJBMDFCMDEwMjQxMDQwMDAzOTU5Cis6MTA5NjkwMDAwMDAwQTgyMTNDMTY4MDA4OTJENzAwMDgzQzEyODAwMEU4Cis6MTA5NkEwMDA4RTQ0MDEwMDMyRjYwMDdGMEUwMDBFNDIwMkMwMjgyMUQ3Cis6MTA5NkIwMDA4RTJGMDAxMDhFNDQwMTAwMDAwMDkwMjEzMUY3M0ZGRkYzCis6MTA5NkMwMDAwRTAwMEU1QTAyRTAyODIxOTIyRTAwMDAzMUMyMDAzRjA3Cis6MTA5NkQwMDAyQzUwMDAwODUyMDAwMDEwMDAwMDg4MjEwMDAyRjg4MDgxCis6MTA5NkUwMDAzQzAzMDgwMDI0NjM1MzU0MDNFM0M4MjE4RjM4MDAwMDZGCis6MTA5NkYwMDAwMzAwMDAwODAwMDAwMDAwOTBDRTAwMDg5MzhCMDA4ODUzCis6MTA5NzAwMDAzMUNEMDA3RjAwQUQ2MDIzMDE2QzUwMjEwQTAwMTBCRkY1Cis6MTA5NzEwMDAyNTUzRkZGRjAwMDA4ODIxM0MxMDgwMDA4RTA0MDEwMENCCis6MTA5NzIwMDAwRTAwMEU3NzAyRTAyODIxOEUwNDAxMDAwRTAwMEU4NzQ1Cis6MTA5NzMwMDAwMkMwMjgyMTEyMjAwMDBGMDAxMzgwMkI4RjhBMDA4NDgyCis6MTA5NzQwMDAyNkE5MDAwMTAwMDlBQzAwMDI3Mjk4MjMwMDE1QUMwM0ExCis6MTA5NzUwMDAyNTQ1MDA0MDAyQjRCMDJBMDAxMzgwMkIyNDE3MDAwMUQ1Cis6MTA5NzYwMDAwMEEwODgyMTAyRDAxMDI0QUY4NTAwODQxNDQwRkZDOUQ2Cis6MTA5NzcwMDBBRkI3MDAxMDNDMDc4MDA4OTRGMTAwNTAzQzA1ODAwMDEyCis6MTA5NzgwMDAzQzA2MDAyMDAyQjFDODIxQTRGOTAwNTBBQ0E2MDAzMDZDCis6MTA5NzkwMDA5NEY0MDA1MDk0RTMwMDUyMDNENTYwMjMxMDc0MDAxRDJDCis6MTA5N0EwMDAzMTlFRkZGRjhDRTUwMDRDOENFOTAwNDgwMDE1NjE4MDdDCis6MTA5N0IwMDAwMEFDQjAyMTAwMDBBMDIxMDJDQ0E4MkIwMTM0NTAyMTI0Cis6MTA5N0MwMDAwMTU1QjgyMUFDRjYwMDRDQUNGNzAwNDgwMDFFODgyQkMwCis6MTA5N0QwMDAwMjExNzgyNDE1RTBGRjgwM0MxOTgwMDg4RkIzMDAxMDM3Cis6MTA5N0UwMDA4RkJGMDA1NDhGQkUwMDUwM0E2MjAwMDE4RkI3MDA0QzBCCis6MTA5N0YwMDA4RkI2MDA0ODhGQjUwMDQ0OEZCNDAwNDA4RkIzMDAzQzUzCis6MTA5ODAwMDA4RkIyMDAzODhGQjEwMDM0OEZCMDAwMzAwM0UwMDAwODExCis6MTA5ODEwMDAyN0JEMDA1ODk0RjIwMDU0OENFRjAwNDQzMjVGRkZGRUU1Cis6MTA5ODIwMDAwMDFGQzBDMDAxRjg3MDIxQUNBRTAwM0M4Q0VCMDA0NEJFCis6MTA5ODMwMDA4Q0FEMDAzQzAxNkQ0MDIzMTkwMDAwM0IwMDAwMDAwMDhFCis6MTA5ODQwMDA4Q0UyMDA0MDI0NDIwMDAxM0MwNzAwNTAzNEU0MDAxMDQ4Cis6MTA5ODUwMDAzQzAzODAwMEFDQTIwMDM4QUM2NDAwMzAwMDAwMDAwMDgzCis6MTA5ODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTA5ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Qzc2MDAwMEU2Cis6MTA5ODgwMDAzMkQ3MDAyMDEyRTBGRkZEM0MxMTgwMDg5NjI4MDA1NERBCis6MTA5ODkwMDAzQzBBODAwMDNDMDY4MDA4MzExOTAwMDEwMDE5NjBDMEI0Cis6MTA5OEEwMDAwMThBQTAyMThFODMwNDAwM0MwNzA4MDA4Q0U3MDA0NDU1Cis6MTA5OEIwMDAzQzE1MDAyMEFDQzMwMDQ4OEU4OTA0MDQyNDA1MDAwMTM3Cis6MTA5OEMwMDBBQ0M5MDA0QzEwRTUwMjU5QUQ1NTAwMzA5NjNGMDA1MjJFCis6MTA5OEQwMDAzQzA1MDgwMDhDQTUwMDQwMDBCRkMwMjFBNjM4MDA1MkZFCis6MTA5OEUwMDA5NjJGMDA1NDI1RUUwMDAxQTYyRTAwNTQ5NjI2MDA1NDEzCis6MTA5OEYwMDAzMEM0RkZGRjU0ODdGRjM0MDAxRTg4MkIzMEE1RkZGRkM0Cis6MTA5OTAwMDAwRTAwMTA5REE2MjAwMDU0M0MwNDA4MDA4Qzg0MDAyNDA2Cis6MTA5OTEwMDA5NjI3MDA1MjAwNDQxMDIzMDBFMjkwMjNBNjMyMDA1MjAyCis6MTA5OTIwMDAwQTAwMTBDMTAwMUU4ODJCOENFMjAwNDAwQTAwMTE2MjYwCis6MTA5OTMwMDAzQzA3MDA1MDkyMjgwMDAxMjQwNzAwMDEzMTAyMDA3RkZCCis6MTA5OTQwMDAxNDQ3MDAxQzk3QUMwMDFFOEUyQTAwMTQyNDBCQzAwMDg0Cis6MTA5OTUwMDAzMTQ0M0ZGRjAxOEI0ODI0M0MwNjA4MDA4Q0M2MDA2MDYwCis6MTA5OTYwMDAwMTI0MjgyNTMwQTQzRkZGMDA4Njg4MkIxMjIwMDAxMUY3Cis6MTA5OTcwMDBBN0E1MDAxRTNDMTEwODAwOEUzMTAwNTg4RjgyMDA4MDgwCis6MTA5OTgwMDAwMDA0NDE4MDI0MDdGRjgwMDIyMjE4MjEwMDY4RjgyMThBCis6MTA5OTkwMDAwM0U3QzgyNDMzRUYwMDdGM0MxODgwMDAzQzEyODAwRUEwCis6MTA5OUEwMDBBRjE5MDAyQzAxRjI2ODIxOTFBRTAwMEQzNUQwMDAwNEYyCis6MTA5OUIwMDBBMUIwMDAwRDBFMDAwRUQxMjQxMjAwMDEyNDExMDAwMUVGCis6MTA5OUMwMDAzQzEwODAwMDhFMDQwMTAwMEUwMDBFNzcwMkUwMjgyMTdBCis6MTA5OUQwMDA4RTA0MDEwMDBFMDAwRTg3MDJDMDI4MjExNjIwRkY1OEI5Cis6MTA5OUUwMDA4RjhBMDA4NDBBMDAxMTJDMDAxMzgwMkI4Rjg2MDA4NDNDCis6MTA5OUYwMDA5MEM5MDAwMTMxMjUwMDIwMTBBMDAxOEEyNDEwMDAwMTI3Cis6MTA5QTAwMDAzQzA0ODAwODM0OEMwMDgwOTE4QjAwN0M4RjkxMDAyMDc2Cis6MTA5QTEwMDAwMDAwOTAyMTMxNkEwMDAxMTE0MDAwMEZBRkIwMDAyMDFBCis6MTA5QTIwMDA4Q0QwMDAxNDhDOEUwMDYwMDIwRTY4MkIxNUEwMDAwM0YxCis6MTA5QTMwMDAwMjAwMzgyMThDODcwMDYwM0MwNDgwMDgzNDgzMDA4MDU5Cis6MTA5QTQwMDA4QzcyMDA3MDAwRjI3ODJCMTVFMDAwMDIwMEUwMjAyMUZCCis6MTA5QTUwMDA4QzY0MDA3MDAwODA5MDIxM0MwNzgwMDgzNEU1MDA4MDExCis6MTA5QTYwMDA4Q0Q5MDAxNDhDQkYwMDcwMDMzRkMwMkIxNzAwMDAwMjdDCis6MTA5QTcwMDAwMzIwMjAyMThDQTQwMDcwMDA5MjE4MjMxMDYwMDAwM0EyCis6MTA5QTgwMDBBRkEzMDAyODI0MDgwMDAyQUZBODAwMjA4RkE1MDAyMDYzCis6MTA5QTkwMDAwMjY1MTAyQjE0NDAwMEI1MDAwMDE4MjE4Q0M0MDAzODVBCis6MTA5QUEwMDA4RTJGMDAwQzNDMTgwMDgwQUUyNDAwMDA4Q0NFMDAzNEI5Cis6MTA5QUIwMDAzQzEwRkY5RjAxRjg2MDI1QUUyRTAwMDQ5MENCMDAzRkM0Cis6MTA5QUMwMDAzNjBERkZGRjAxOEQ0ODI0M0MwQTAwMjAzQzA2RkZFRkM1Cis6MTA5QUQwMDBBMjJCMDAwQjAxMkEzODI1MzRDNUZGRkYwMEU1NDAyNEU2Cis6MTA5QUUwMDAzQzAyMDAwODhGODcwMDg0MDEwMjIwMjVBRTI0MDAwQzcwCis6MTA5QUYwMDA4Q0UzMDAxNEFFMjAwMDE4OEZBRjAwMjhBRTIzMDAxNEIyCis6MTA5QjAwMDA4Q0Y4MDAxODNDMUZGRkZCMzdGOUZGRkZBRTM4MDAxQzM0Cis6MTA5QjEwMDA4Q0VFMDAwODAwOTk2ODI0MDI0RjgwMjFBRTJFMDAyNEFDCis6MTA5QjIwMDA4Q0VDMDAwQ0FFMkQwMDBDQTYyMDAwMzhBNjIwMDAzQUNDCis6MTA5QjMwMDBBRTMwMDAyQ0FFMkMwMDIwQUUyMDAwMjg4Q0VCMDAxNEEwCis6MTA5QjQwMDA4RkFBMDAyODAxNzI0ODIzMDEyQTMwMjMxMEMwMDAxMTc3Cis6MTA5QjUwMDBBRTI2MDAxMDkwRjAwMDNEOEUyQzAwMDQ4RTJBMDAwMEVFCis6MTA5QjYwMDAwMDEwNjkwMDAxOEQyODIxMDAwMDEwMjEwMEFEMzAyQjZDCis6MTA5QjcwMDAwMTQyNDgyMTAxMjY0MDIxQUUyNTAwMDRBRTI4MDAwMDA0Cis6MTA5QjgwMDA5MEUzMDAzREEyMjMwMDBBOEY5RjAwODQ5N0Y5MDAwNjBFCis6MTA5QjkwMDBBNjM5MDAwODhGOEEwMDI0MjQwMjAwMDIzQzA2ODAwOEFGCis6MTA5QkEwMDBBMTQyMDAwMDM0QzkwMDgwOTUyNTAwNUMwMjQwMjAyMUJDCis6MTA5QkIwMDA4RjkwMDAyNDMwQThGRkZGMEUwMDBFOURBRkE4MDAyNDU4Cis6MTA5QkMwMDA4RkEzMDAyNDAwMDJGQjgwOEY4NTAwODQzQzA0NDIwMEE4Cis6MTA5QkQwMDAwM0UzQzgyNTAzMjRDMDI1QUUxODAwMDQ4Rjg0MDAyNEE1Cis6MTA5QkUwMDA4Q0FGMDAzOEFDOEYwMDE4OENBRTAwMzRBQzhFMDAxQ0VCCis6MTA5QkYwMDBBQzgwMDAwQ0FDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNjdGCis6MTA5QzAwMDBBNDgwMDAyMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRjA0Cis6MTA5QzEwMDBBNDg3MDAwMjUyNDAwMThDMjQwNzAwMDE4RkFCMDAyODZBCis6MTA5QzIwMDA1MTYwMDAwMjkwQTIwMDNEOTBBMjAwM0UyNDRDMDAwMTMxCis6MTA5QzMwMDBBMDhDMDAwMThGODQwMDI0QUM5MjAwMDgzQzE4ODAwODlFCis6MTA5QzQwMDAzNzEwMDA4MDkyMEYwMDdDMzFFRTAwMDIxNUMwMDAwMjM4Cis6MTA5QzUwMDAyNDA3MDAzNDI0MDcwMDMwOEY4NTAwODQzQzA4ODAwOEU2Cis6MTA5QzYwMDAzNTA5MDA4MDkwQTMwMDAwOTEyODAwN0MzMjU5MDAwMzQwCis6MTA5QzcwMDBBMDgzMDAzMDhGOUYwMDg0OEY5MDAwMjQyNDA0MDAwNDcwCis6MTA5QzgwMDA5M0Y4MDAwMTAwOTk3ODIzMjQwREMwMDBBMjE4MDAzMTM4Cis6MTA5QzkwMDA4Rjk5MDAyNDhGOEUwMDg0MzFFNTAwMDM5NzJDMDAzMkM5Cis6MTA5Q0EwMDA5NUNCMDAxMjAwRjI0ODIxMDE4RDUwMjQzMTYyM0ZGRjE0Cis6MTA5Q0IwMDAwMTQyMzAyNUE3MjYwMDMyOTMyMzAwMzIwMTI1MzgyMUE2Cis6MTA5Q0MwMDAzMTA4MDAwNDMwN0YwMDNGMzdFNDAwNDBBMzI0MDAzMjE1Cis6MTA5Q0QwMDAxMjQwMDAwMjhGODUwMDI0MDBFODM4MjEzQzBDODAwOEU3Cis6MTA5Q0UwMDBBQ0E3MDAzNDM1OEIwMTAwOEQ2MjAwQzAyRTQ0MDAwMTBBCis6MTA5Q0YwMDAyNDAzRkZERkFDQTIwMDM4OTBBQTAwM0MwMDA0Qzk0MDU2Cis6MTA5RDAwMDAzMTQ2MDA3RkEwQTYwMDNDOEY4OTAwMjQyNDA1RkZCRkI4Cis6MTA5RDEwMDA5MTI3MDAzQzAwRTU0MDI0QTEyODAwM0M4RjhGMDAyNEJGCis6MTA5RDIwMDA5MUZGMDAzQzAzRTNDMDI0MDMxOTgwMjVBMUYwMDAzQzBGCis6MTA5RDMwMDA4RjhCMDA4NDhGOEEwMDI0OEQ2RTAwMjBBRDRFMDA0MEYyCis6MTA5RDQwMDA4RDZEMDAyNEFENEQwMDQ0OEQ2QzAwMjhBRDRDMDA0ODU1Cis6MTA5RDUwMDA4RDYyMDAyQzBFMDAwRUJDQUQ0MjAwNEM4RkE2MDAyMDgwCis6MTA5RDYwMDAyNDA3MDAwMjEwQzcwMDExOEZBMzAwMjAwMDAzMjAyQjNFCis6MTA5RDcwMDAwMDA0ODAyMzAyNzA5ODI0MDA2MDgwMjEwMDYwOTAyMUZDCis6MTA5RDgwMDAwQTAwMTExNTAwMTA4ODJCOTYyNzAwMTI4Rjg0MDA4MDdFCis6MTA5RDkwMDAwMDAwOTAyMTMwRTVGRkZGQTdBNzAwMTQwRTAwMEU2QjE2Cis6MTA5REEwMDAyNDExMDAwMTBBMDAxMUMwM0MxMDgwMDAzQzE5ODAwMDAxCis6MTA5REIwMDAzQzAyODAwODhGMjQwMTAwOTA1ODAwMDgwRTAwMEU0MkRCCis6MTA5REMwMDAzMzA1MDA3RjhGOEUwMDI0OEZBRjAwMjA4RkE0MDAyOEUyCis6MTA5REQwMDBBMUNGMDAwMDBFMDAwRTlEOEY5MDAwMjQ4RkFEMDAyNEI3Cis6MTA5REUwMDAwMDAyM0I4MDNDMEI0MjAwMDBFRDQwMjU4Rjg3MDA4NDQxCis6MTA5REYwMDAwMTBCMjAyNUFFMDQwMDA0OENFNTAwMzg4RjkwMDAyNDcwCis6MTA5RTAwMDAwMDAwNTAyMTAwMEExOTAwQUUwNTAwMTg4Q0VDMDAzNDQ3Cis6MTA5RTEwMDAzQzA4N0ZGRjM1MDRGRkZGQUUwQzAwMUM5MEU5MDAzRUJDCis6MTA5RTIwMDA4RTFGMDAxQzhFMTgwMDE4MDAwOUM5MDAwMDA5MzcwMjk3Cis6MTA5RTMwMDAwM0Y5NjgyMTAwNjYxMDI1MDFCOTc4MkIwMzAyNzAyMTBGCis6MTA5RTQwMDAwMUNGNTgyMUFFMEQwMDFDQUUwQjAwMThBRTAwMDAwQzY3Cis6MTA5RTUwMDBBRTAwMDAxMDkwRTUwMDNFOEZBRjAwMjgyNDBFMDAwNUY0Cis6MTA5RTYwMDBBNjA1MDAxNDk0RUMwMDA0MjQwNUMwMDAwMUU0NTgyNDY1Cis6MTA5RTcwMDBBNjBDMDAxNjkwRUEwMDNFMDFFMDIwMjFBNjBBMDAyMDcwCis6MTA5RTgwMDA5NEU2MDAwNEE2MDYwMDIyQUUwMDAwMjQ5MEUzMDAzRjAyCis6MTA5RTkwMDBBNjAzMDAwMjkwRTkwMDNFOTBGRjAwM0QwM0U5QzgyM0JECis6MTA5RUEwMDAyNzM4MDAwMUEyMTgwMDAxOEY4RDAwMjQzQzEwODAwODgzCis6MTA5RUIwMDBBREFGMDAwOEExQUUwMDMwOEY5ODAwMjQ4RjgyMDA4NERGCis6MTA5RUMwMDAzNjBGMDEwMDk3MEMwMDMyOTQ0QTAwMTIyNDEwRkY4MEQ0Cis6MTA5RUQwMDAwMEFDMzgyNDMxNDYzRkZGMDBFNjE4MjVBNzAzMDAzMkM2Cis6MTA5RUUwMDA5MzA5MDAzMjI0MDVGRkJGMjQwM0ZGREYzMTNGMDAzRjA5Cis6MTA5RUYwMDAzN0Y5MDA0MEEzMTkwMDMyOEY4QzAwMjQyNDE4RkZGRjhCCis6MTA5RjAwMDBBRDgwMDAzNDhERUUwMEMwQUQ4RTAwMzg5MThEMDAzQ0U4Cis6MTA5RjEwMDAzMUEyMDA3RkExODIwMDNDOEY4NzAwMjQ5MEVBMDAzQ0EwCis6MTA5RjIwMDAwMTQ1MzAyNEEwRTYwMDNDOEY5OTAwMjQ5MzI5MDAzQzkxCis6MTA5RjMwMDAwMTIzRjgyNEEzM0YwMDNDOEY4RDAwMjQzQzFGODAwOEEwCis6MTA5RjQwMDBBREI4MDA0MEFEQjIwMDQ0OTFBRjAwNDgzQzEyODAwMDczCis6MTA5RjUwMDAwMUYwNzAyNUExQUUwMDQ4OEY4NzAwMjQ4Rjg2MDA4NDExCis6MTA5RjYwMDA4Q0VDMDA0ODAxOTIxMDI0MDA0QjUwMjVBQ0VBMDA0OENDCis6MTA5RjcwMDA5MEM1MDAzRUEwRTUwMDRDOEY4ODAwODQ4RjgzMDAyNEFDCis6MTA5RjgwMDA5NTA5MDAwNEE0NjkwMDRFOEZFNTAwNjAwRTAwMDJFNjBBCis6MTA5RjkwMDAwMDAwMDAwMDhGOTlGRjJDOEZBRTAwMjgwMDAyODE0MDQ2Cis6MTA5RkEwMDA5MzJGMDA3QzAwMDJDMTAwMDIxODY4MjEzMUYyMDAwMkU4Cis6MTA5RkIwMDAwMDQwMjgyMTE2NDAwMEFBMDFDRDMwMjEzQzBBODAwODJCCis6MTA5RkMwMDAzNTQzMDA4MDkwNjkwMDdDMzEzRjAwMDQxM0UwMDAwM0JBCis6MTA5RkQwMDA4RkFFMDAyODAwMDU2MDgwMDBDQzMwMjEyNDBEMDAwNEU1Cis6MTA5RkUwMDA4RjkwMDAyNDMxQzcwMDAzMDFBNzU4MjMzMTY4MDAwMzc0Cis6MTA5RkYwMDAwMEM4MjAyMUFFMDQwMDM0M0MwNjgwMDhBNjI1MDAzOEE1Cis6MTBBMDAwMDAzQzA1ODAwMDhDQTQwMTAwOTBEMTAwMDgwRTAwMEU4NzUyCis6MTBBMDEwMDAzMjI1MDA3RjBFMDAwRUJDMDAwMDAwMDAwQTAwMTJBQUNDCis6MTBBMDIwMDA4RkEzMDAyMDhGODUwMDIwOENDMjAwMzgyNDE4MDAwM0U1Cis6MTBBMDMwMDBBNEEwMDAwOEFDQTIwMDAwOENERjAwMzRBMEEwMDAwQTlECis6MTBBMDQwMDA4RjkyMDA4NEFDQkYwMDA0M0MwNDAwODA5MjRGMDAzRjFDCis6MTBBMDUwMDBBMEI4MDAwQzhDQUUwMDBDM0MwREZGOUZBMEFGMDAwQjE1Cis6MTBBMDYwMDAwMUM0NDAyNTM1QUJGRkZGM0MxMUZGRUY4Rjk4MDA4NDAyCis6MTBBMDcwMDAwMTBCMzAyNDM2MzlGRkZGMDBEOTYwMjRBQ0FDMDAwQzUyCis6MTBBMDgwMDA4RjAzMDAxNDk3MUYwMDEyOEY4NzAwODBBQ0EzMDAxMDZECis6MTBBMDkwMDA4RjA5MDAxNEFDQTAwMDE4QUNBMDAwMjBBQ0E5MDAxNERCCis6MTBBMEEwMDBBQ0EwMDAyNDhGMEEwMDE4MzNFOTNGRkYwMDA5MTE4MDlCCis6MTBBMEIwMDBBQ0FBMDAyODhGMTIwMDA4MDA0Nzc4MjEzM0VFMDAwMTc3Cis6MTBBMEMwMDBBQ0IyMDAzMDhGMDgwMDBDOEY5OTAwMjQwMDBGNjlDMkQ5Cis6MTBBMEQwMDAwMDBFMjM4MDAxQTQ1ODIxMjQxMTAwMDIzQzA2ODAwOEIwCis6MTBBMEUwMDBBNEFCMDAxQ0E0QTAwMDM0QUNBODAwMkNBMzMxMDAwMDM5Cis6MTBBMEYwMDAzNEQ5MDA4MDk3MkMwMDVDOEY4RjAwMjQzQzAzNDIwMEYxCis6MTBBMTAwMDAzMThBRkZGRjAxNDMzODI1QURFNzAwMDQ4RjgyMDA4NEM4Cis6MTBBMTEwMDAyNDE4MDAwMTI0MTFDMDAwOEM1RjAwMzgyNDA3MDAzNDhCCis6MTBBMTIwMDBBREZGMDAxODhDNTIwMDM0QURGMjAwMUNBREUwMDAwQzA1Cis6MTBBMTMwMDBBREUwMDAxMEE1RTAwMDE0QTVFMDAwMTZBNUUwMDAyMEE5Cis6MTBBMTQwMDBBNUUwMDAyMkFERTAwMDI0QTVGMDAwMDJBMUY4MDAwMTg2Cis6MTBBMTUwMDA4RjhCMDAyNDhGOEUwMDg0QUQ3MDAwMDg5MUNEMDAwMDlECis6MTBBMTYwMDBBMTZEMDAzMDhGODgwMDg0OEY4NDAwMjQ5MTA1MDAwMTQ4Cis6MTBBMTcwMDBBMDg1MDAzMThGOTIwMDI0OTY0QzAwMzIwMTkxNTAyNDJBCis6MTBBMTgwMDAwMTQ5MTgyNUE2NDMwMDMyOTI1RjAwMzIzM0UyMDAzRkI2Cis6MTBBMTkwMDBBMjQyMDAzMjkzMzgwMDdDMzMwRjAwMDIxNUUwMDAwMjI3Cis6MTBBMUEwMDA4Rjg0MDAyNDI0MDcwMDMwM0MwMjgwMDhBQzg3MDAzNEYwCis6MTBBMUIwMDAzNDUyMDEwMDhFNUYwMEMwMjQwRUZGQkYwMjAwOTAyMUM4Cis6MTBBMUMwMDBBQzlGMDAzODkwOTgwMDNDMzMwRjAwN0ZBMDhGMDAzQzdDCis6MTBBMUQwMDA4Rjg4MDAyNDkxMEQwMDNDMDFBRTU4MjRBMTBCMDAzQzU3Cis6MTBBMUUwMDA4Rjg2MDAyNDkwRDEwMDNDMzYzOTAwMjBBMEQ5MDAzQzU1Cis6MTBBMUYwMDA4RjhBMDA4NDhGODUwMDI0MDAxMDg4MkI4RDRDMDAyMENFCis6MTBBMjAwMDBBQ0FDMDA0MDhENDMwMDI0QUNBMzAwNDQ4RDQ5MDAyODMxCis6MTBBMjEwMDBBQ0E5MDA0ODhENDcwMDJDQUNBNzAwNEMwRTAwMEVCQzJBCis6MTBBMjIwMDAzQzEwODAwMDBBMDAxMTE2MDAwMDAwMDA5NENEMDA1MjdFCis6MTBBMjMwMDAzQzBCMDgwMDhENkIwMDI0MDE2RDg4MjFBNEQxMDA1MkQ1Cis6MTBBMjQwMDAwQTAwMTBDMTAwMUU4ODJCQTA4NzAwMDE4Rjg0MDAyNDAzCis6MTBBMjUwMDAyNDBEMDAwMUFDOEQwMDA4MEEwMDEyNUYzQzE4ODAwODM0Cis6MTBBMjYwMDAwMDAyOTA4MDBBMDAxMzNFMDBEMjMwMjEyN0JERkZFMDlCCis6MTBBMjcwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQzlCCis6MTBBMjgwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMDIzCis6MTBBMjkwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRUMwMDBDNTYwMjYxCis6MTBBMkEwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwMzg5Cis6MTBBMkIwMDBBMzgzMDA4OEFGODQwMDgwMTBDMjAwMUIzMEIwRkZGRjcyCis6MTBBMkMwMDA5MTA2MDBFQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzMzRBCis6MTBBMkQwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxODlDCis6MTBBMkUwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMEM2Cis6MTBBMkYwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDRGCis6MTBBMzAwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCis6MTBBMzEwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEU1Cis6MTBBMzIwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QTFECis6MTBBMzMwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMDFDCis6MTBBMzQwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMEU0Cis6MTBBMzUwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEE1Cis6MTBBMzYwMDAwQTAwMTQwNjhGQkYwMDFDMTYyMEZGREEwMDAwMDAwMDUwCis6MTBBMzcwMDAwRTAwMEY3QTAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0IxCis6MTBBMzgwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRkQzCis6MTBBMzkwMDBBMjQyMDA3RDBBMDAxNDA2OEZCRjAwMUM5NTA5MDBEQTU2Cis6MTBBM0EwMDA4Rjg2MDA2MDAwODAyODIxMjQwNDAwMDUwRTAwMDY3NEJBCis6MTBBM0IwMDAzMTMwRkZGRjk3ODMwMDcyM0MwNDgwMDAyNDY1RkZGRjZCCis6MTBBM0MwMDBBNzg1MDA3MjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMERFCis6MTBBM0QwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxODRDCis6MTBBM0UwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMEJECis6MTBBM0YwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4ODk4Cis6MTBBNDAwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDUxCis6MTBBNDEwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3REUxCis6MTBBNDIwMDAwQTAwMTQzMzMzRTIwMDNGMEUwMDEwQTQwMjAwMjAyMTgyCis6MTBBNDMwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMDdDCis6MTBBNDQwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3RDI5Cis6MTBBNDUwMDAwQTAwMTQwNjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEQ3Cis6MTBBNDYwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRjRCCis6MDhBNDcwMDAwQTAwMTQ2MjM2MDIwMDQwRUMKKzowOEE0NzgwMDAwMDAwMDAwMDAwMDAwMUJDMQorOjEwQTQ4MDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDZBNQorOjEwQTQ5MDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDRBQQorOjEwQTRBMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDNBMAorOjEwQTRCMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5MworOjEwQTRDMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI4NAorOjEwQTREMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI3NAorOjEwQTRFMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI2NAorOjBDQTRGMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxNUQKKzowNEE0RkMwMDgwMDgwMTAwRDMKKzoxMEE1MDAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEMwMDAwMDAzMDgwRkYKKzoxMEE1MTAwMDA4MDAwRjQ4MDgwMDBGRjQwODAwMTAwQzA4MDAxMDIwNzUKKzoxMEE1MjAwMDA4MDAxMDM0MDgwMDBGNDgwODAwMEY0ODA4MDAxMDY4QTEKKzoxMEE1MzAwMDA4MDAxMEEwMDgwMDEwQjAwODAwMTBEODA4MDAxN0M4QzQKKzoxMEE1NDAwMDA4MDAxN0M4MDgwMDE4MDAwODAwMTgwMDA4MDAxODE0QjAKKzoxMEE1NTAwMDA4MDAxN0U0MDgwMDFBM0MwODAwMUEwODA4MDAxQTk0QkEKKzoxMEE1NjAwMDA4MDAxQTk0MDgwMDFCMUMwODAwMUE0QzgwMDgwMjQwQkUKKzoxMEE1NzAwMDA4MDAyMUE4MDgwMDFGRjQwODAwMjFEMDA4MDAyMjY4NjQKKzoxMEE1ODAwMDA4MDAyM0I4MDgwMDI0MDQwODAwMjUyODA4MDAyNDMwMDcKKzoxMEE1OTAwMDA4MDAyNEI0MDgwMDIwNjQwODAwMjlEMDA4MDAyOTc0QTkKKzoxMEE1QTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNTlDM0EKKzoxMEE1QjAwMDA4MDAyNTlDMDgwMDIwMTAwODAwMjAxMDA4MDAyODRDRTYKKzoxMEE1QzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwQUIKKzoxMEE1RDAwMDA4MDAyOEFDMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwRjcKKzoxMEE1RTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwOEIKKzoxMEE1RjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwN0IKKzoxMEE2MDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNDI0NTIKKzoxMEE2MTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjkxQzA4MDAyMDEwNDUKKzoxMEE2MjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwNEEKKzoxMEE2MzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwM0EKKzoxMEE2NDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMkEKKzoxMEE2NTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMUEKKzoxMEE2NjAwMDA4MDAyNzcwMDgwMDIwMTAwODAwMjAxMDA4MDAyNkU0QzkKKzoxMEE2NzAwMDA4MDAyNjQwMDgwMDM3ODgwODAwMzc1QzA4MDAzNzI4QTMKKzoxMEE2ODAwMDA4MDAzNkZDMDgwMDM2REMwODAwMzY5MDgwMDgwMTAwMUYKKzoxMEE2OTAwMDgwMDgwMDgwODAwODAwMDA4MDA4MDA4MDA4MDA0NkYwRTQKKzoxMEE2QTAwMDA4MDA0NzI4MDgwMDQ2NzAwODAwNDZGMDA4MDA0NkYwRjkKKzowQ0E2QjAwMDA4MDA0NDUwMDgwMDQ2RjAwODAwNEFDNEFFCis6MDRBNkJDMDAwQTAwMEM3NjBFCis6MTBBNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNUVFCis6MTBBNkQwMDAyRTMwMkUzMDZBMzkwMDAwMDUwMDAwMDMwMDAwMDAwMDEzCis6MTBBNkUwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBBNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBBNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBBNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBBNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBBNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBBNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBBNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBBNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBBN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBBN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBBN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBBN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBBN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBBODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBBODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBBODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBBODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBBODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDc1Cis6MTBEOEEwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDEyNDQyODJBMDhGCis6MTBEOEIwMDAzQzAzMDgwMTI0NjM4MzYwQUM0MDAwMDAwMDQzMjAyQjNDCis6MTBEOEMwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEOUZGQzZFCis6MTBEOEQwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgzQzFDMDgwMUEwCis6MTBEOEUwMDAyNzlDODJBMDBFMDAxMUVBMDAwMDAwMDAwMDAwMDAwRDNECis6MTBEOEYwMDAzQzAyODAwMDMwQTVGRkZGMzBDNjAwRkYzNDQzMDE4MEFBCis6MTBEOTAwMDAzQzA4ODAwMDhEMDkwMUI4MDUyMEZGRkUwMDAwMDAwMEUyCis6MTBEOTEwMDBBQzY0MDAwMDI0MDQwMDAyQTQ2NTAwMDhBMDY2MDAwQUFDCis6MTBEOTIwMDBBMDY0MDAwQkFDNjcwMDE4M0MwMzEwMDAwM0UwMDAwODgzCis6MTBEOTMwMDBBRDAzMDFCODNDMDU2MDAwOENBMjRGRjgwNDQwRkZGRTI3Cis6MTBEOTQwMDAwMDAwMDAwMEFDQTQ0RkMwM0MwMzEwMDAzQzA0MDIwMEU3Cis6MTBEOTUwMDBBQ0E0NEZDNDAzRTAwMDA4QUNBMzRGRjg5NDg2MDAwQ0JECis6MTBEOTYwMDAwMEEwNTAyMTI0ODgwMDE0MDAwNjJCMDIwMDA1MTA4MDFFCis6MTBEOTcwMDAwMDQ0NDgyMTAxMDkxODJCMTA2MDAwMTEwMDAwMDAwMDJDCis6MTBEOTgwMDA5MTAzMDAwMDJDNjQwMDA5NTA4MDAwMDk5MTE5MDAwMUU2Cis6MTBEOTkwMDAwMDAzNjA4MDNDMEQwODAxMjVBRDgxNTQwMThENTgyMUE0Cis6MTBEOUEwMDA4RDY3MDAwMDAwRTAwMDA4MDAwMDAwMDA5MTE5MDAwMUYwCis6MTBEOUIwMDAwMTE5NDAyMTAxMDkzMDJCNTRDMEZGRjI5MTAzMDAwMEVFCis6MTBEOUMwMDAwM0UwMDAwODAwMDAxMDIxMEEwMDBDQkUyNTA4MDAwMTM5Cis6MTBEOUQwMDA5MTBGMDAwMTI0MEUwMDBBMTVFRTAwNDAwMTI4QzgyMzEzCis6MTBEOUUwMDAyRjM4MDAwQTE3MDAwMDNEMjUwRDAwMDI4RDU4MDAwMDU5Cis6MTBEOUYwMDAyNTBGMDAwNjM3MEUwMTAwQUQ0RTAwMDA5MTBDMDAwMjBECis6MTBEQTAwMDA5MUFCMDAwMTkxQTQwMDAyOTFBNjAwMDMwMDBDMkUwMDJFCis6MTBEQTEwMDAwMDBCM0MwMDAwQTcxMDI1MDAwNDFBMDAwMDQzQzgyNTk1Cis6MTBEQTIwMDAwMzI2QzAyNUFENTgwMDA0OTEwRTAwMDY5MUVEMDAwMUJCCis6MTBEQTMwMDA5MUU3MDAwMjkxRTUwMDAzMDAwRTVFMDAwMDBENjQwMDE2Cis6MTBEQTQwMDAwMTZDMzAyNTAwMDcyMjAwMDBDNDEwMjUwMDQ1MTgyNTcwCis6MTBEQTUwMDAyNTA4MDAwQTBBMDAwQ0JFQUQ0MzAwMDg5MTBGMDAwMTIyCis6MTBEQTYwMDAyNTA0MDAwMjI0MDgwMDAyNTVFODAwMDEwMTIwMjAyMUJECis6MTBEQTcwMDAwQTAwMENCRTAwODA0MDIxOTEwQzAwMDEyNDBCMDAwMzIxCis6MTBEQTgwMDAxNThCMDAxNjAwMDAwMDAwOEQ1ODAwMDA5MTBFMDAwMjVBCis6MTBEQTkwMDAyNTA4MDAwMzM3MEQwMDA4QTE0RTAwMTAwQTAwMENCRTM3Cis6MTBEQUEwMDBBRDREMDAwMDkxMTkwMDAxMjQwRjAwMDQxNzJGMDAwQjQ5Cis6MTBEQUIwMDAwMDAwMDAwMDkxMDcwMDAyOTEwNDAwMDM4RDQzMDAwMDY0Cis6MTBEQUMwMDAwMDA3MkEwMDAwQTQxMDI1MzQ2NjAwMDQyNTA4MDAwNDdECis6MTBEQUQwMDBBRDQyMDAwQzBBMDAwQ0JFQUQ0NjAwMDAwM0UwMDAwODk5Cis6MTBEQUUwMDAyNDAyMDAwMTI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDUzCis6MTBEQUYwMDAwRTAwMTRGQzAwODA4MDIxM0MwNDgwMDgzNDg1MDA4MEU2Cis6MTBEQjAwMDA5MEE2MDAwNTI0MDNGRkZFMDIwMDIwMjEwMEMzMTAyNDdDCis6MTBEQjEwMDA4RkJGMDAxNDhGQjAwMDEwQTBBMjAwMDUwQTAwMTUwNkU4Cis6MTBEQjIwMDAyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDNECis6MTBEQjMwMDAwRTAwMEY0RTAwODA4MDIxM0MwNjgwMDgzNEM1MDA4MDE2Cis6MTBEQjQwMDA5MEE0MDAwMDI0MDIwMDUwMzA4MzAwRkYxMDYyMDAwNzAwCis6MTBEQjUwMDAzQzA5ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBDCis6MTBEQjYwMDBBRDIwMDE4MDBBMDAxMDEwMjdCRDAwMTgyNDA4MDEwMDE0Cis6MTBEQjcwMDAzQzA3ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEVFCis6MTBEQjgwMDBBQ0U4MDE4MDBBMDAxMDEwMjdCRDAwMTgyN0JERkY3MDA3Cis6MTBEQjkwMDAzQzA4ODAwOEFGQjYwMDgwQUZCNTAwN0NBRkIxMDA2QzI4Cis6MTBEQkEwMDBBRkJGMDA4Q0FGQkUwMDg4QUZCNzAwODRBRkI0MDA3OEMxCis6MTBEQkIwMDBBRkIzMDA3NEFGQjIwMDcwQUZCMDAwNjgzNTA1MDA4MDNECis6MTBEQkMwMDAzQzA3ODAwMDhDRjIwMTI4OTBBNDAwMDlBQ0UwMDA4NDlFCis6MTBEQkQwMDA5MEE2MDAwNTMwOTEwMEZGMDAwMEE4MjEwMDA2MTgyNzNDCis6MTBEQkUwMDAzMDYyMDAwMTAwMDBCMDIxMTQ0MDAwNjdBRkEwMDA1MDc3Cis6MTBEQkYwMDA5MEE5MDAwMDI0MDUwMDIwMzEyNDAwRkYxMDg1MDAxNkE0Cis6MTBEQzAwMDAyNDBBMDA1MDEwOEEwMDhDMDAwMDAwMDAzQzBDMDgwMDIwCis6MTBEQzEwMDA4RDhDMDBEQzI1OEIwMDAxM0MwMTA4MDBBQzJCMDBEQzY2Cis6MTBEQzIwMDAwRTAwMTVGMjAwMDAwMDAwOEZCRjAwOEM4RkJFMDA4ODMwCis6MTBEQzMwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OERBCis6MTBEQzQwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2ODFBCis6MTBEQzUwMDAwM0UwMDAwODI3QkQwMDkwMDAwMDAwMEQzQzEwODAwMDhDCis6MTBEQzYwMDBBRkEwMDAzMDk2MUYwMTE2OEUxOTAxMDQzQzFFMDAyMDQzCis6MTBEQzcwMDAzNjEzMEMwMDAzM0VDMDI0MDAxOEI4MkIwMDE3MzE0MEE3Cis6MTBEQzgwMDBBRkE2MDAzMDhFMEUwMTA0MzNGNEZGRkYzQzBGMDA0MEJFCis6MTBEQzkwMDAwMjkzODAyMTAxQ0Y2ODI0OTIxMzAwMEQxMUEwMDA0ODQ3Cis6MTBEQ0EwMDAzNEM0MDA0MDMyNjIwMDIwMTQ0MDAwMDIzNDg2MDA4MEY4Cis6MTBEQ0IwMDAwMDgwMzAyMTE0QzAwMDkzQUZBNjAwMzAzQzA1ODAwOERFCis6MTBEQ0MwMDAzNEE4MDA4MDkxMDcwMDA4MzBFNjAwNDA1MEMwMDAwNkVDCis6MTBEQ0QwMDAzQzA2ODAwODI0MDkwMDA0MTIyOTAwQTIyNDBBMDAxMjJDCis6MTBEQ0UwMDAxMjJBMDAyOTNDMDY4MDA4MzRENDAxMDAzQzE3ODAwMDI5Cis6MTBEQ0YwMDA5NkVGMDExQTk2MEQwMDBFOTI4RTAwMDgzMjZCMDAwNDBBCis6MTBERDAwMDAzMUY3RkZGRjAxQ0Q2MDA0QUZBQzAwNTQ4RTE0MDAwNDY2Cis6MTBERDEwMDAxMTYwMDAzMThFMUUwMDA4MzRDMzAwODA5MDc5MDAwODI1Cis6MTBERDIwMDAzMzM4MDA0MDE3MDAwMDI4MDAwMDAwMDA4QzczMDA1MEJBCis6MTBERDMwMDAwMjkzOTAyMzA2NDAwMDA2M0MwQzgwMDA4QzdFMDAzNDQ5Cis6MTBERDQwMDAwMjlFODAyMzA2MDIwMDgzOEVBMjAwMDgzQzBDODAwMDA1Cis6MTBERDUwMDBBRDgwMDA0NDI0MDIwMDAxOEZCRjAwOEM4RkJFMDA4ODdDCis6MTBERDYwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OEE5Cis6MTBERDcwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2OEU5Cis6MTBERDgwMDAwM0UwMDAwODI3QkQwMDkwMEUwMDBEMUEwMDAwMjAyMUJFCis6MTBERDkwMDA4RkJGMDA4QzhGQkUwMDg4OEZCNzAwODQ4RkI2MDA4MDQ1Cis6MTBEREEwMDA4RkI1MDA3QzhGQjQwMDc4OEZCMzAwNzQ4RkIyMDA3MDkxCis6MTBEREIwMDA4RkIxMDA2QzhGQjAwMDY4MDNFMDAwMDgyN0JEMDA5MEIxCis6MTBEREMwMDAwQTAwMEQ3QTAwQzAyMDIxMEUwMDE2NTMwMjgwMjAyMTg3Cis6MTBEREQwMDAxNDQwRkZERjNDMEM4MDAwM0MwMzgwMDgzNDYzMDA4MDZCCis6MTBEREUwMDA4QzYyMDAzNDAyODJGODIzMDdFMDAwMTcwMDAwMDAwMDc0Cis6MTBEREYwMDAzQzE1MDgwMDhFQjUzMTAwMjZCMTAwMDEzQzAxMDgwMDM5Cis6MTBERTAwMDBBQzMxMzEwMDBFMDAxNEZDMDI0MDIwMjEzQzBCODAwODk0Cis6MTBERTEwMDAzNTcwMDA4MDkyMEEwMDI1MDI0MDIwMjEzNTQyMDAwNDFFCis6MTBERTIwMDAwRTAwMTUwNkEyMDIwMDI1MEUwMDBDOUUwMjQwMjAyMUM1Cis6MTBERTMwMDAwQTAwMERBNzI0MDIwMDAxM0MxNTA4MDEyNkI1ODM1MEY1Cis6MTBERTQwMDAwQTAwMEQ2OTNDMTA4MDAwOEM2NjAwMzAwMjg2MjAyMzk5Cis6MTBERTUwMDAxODgwMDAwODI0MDkwMDBDM0MwODA4MDA4RDA4MzEwMEQ3Cis6MTBERTYwMDAzMjczMDBGQzAwMDBCODIxMjUwNzAwMDEzQzAxMDgwMEM2Cis6MTBERTcwMDBBQzI3MzEwMEFGQTkwMDMwOEM2NTAwMzAwMEI0MzgyM0U2Cis6MTBERTgwMDAxOEUwMDBEQjAyRTc1MDJBMTU0MEZGREUwMDAwMDAwMDJBCis6MTBERTkwMDAxMkU3MDAyQTAyRTc2ODIzMDI4N0EwMjEzMUI3RkZGRkJCCis6MTBERUEwMDAzMjZFMDAwMjExQzAwMDM0MzI3RjAwMTAzQzE0ODAwODMyCis6MTBERUIwMDAzNjkwMDA4MDkyMEYwMDA4MzFGNjAwNDA1MkMwMDBDRTJDCis6MTBERUMwMDA4RUEyMDAwODAyNDAyMDIxMEUwMDE0RkMyNDEzMDAxODJBCis6MTBERUQwMDBBMjEzMDAwOTkyMTgwMDA1MjQxOUZGRkUwMjQwMjAyMTE4Cis6MTBERUUwMDAwMzE5QjgyNDBFMDAxNTA2QTIxNzAwMDUyNDA0MDAzOUYyCis6MTBERUYwMDAwMDAwMjgyMTBFMDAxNjJFMjQwNjAwMTgwQTAwMERBNzg3Cis6MTBERjAwMDAyNDAyMDAwMTkyQjYwMDBDM0MwNDgwMDgzNDgzMDA4MDk3Cis6MTBERjEwMDA4QzY3MDAzODAwMTZBQjAwMzZCMTAwODEwMjQwMjAyMTJBCis6MTBERjIwMDAzMjI1RjA4MTBFMDAwQzhEMzBDNjAwRkYzQzBDODAwMEM1Cis6MTBERjMwMDBBRDgwMDA0NDBBMDAwREE3MjQwMjAwMDEzQTZDMDAwMUU0Cis6MTBERjQwMDAzMThCMDAwMTE1NjBGRkFGMDI4N0EwMjEwQTAwMERGODk4Cis6MTBERjUwMDAwMDAwMDAwMDAwNDBGODA5MjQwNDAwMTYwQTAwMERBNzg0Cis6MTBERjYwMDAyNDAyMDAwMTAyNDAyMDIxMEUwMDE3MzMwMjAwMjgyMTY0Cis6MTBERjcwMDAwQTAwMEQ1QzhGQkYwMDhDMTNFMEZGNzQzQzAzODAwODI3Cis6MTBERjgwMDAzNDY4MDA4MDhEMDQwMDM4OEM2NjAwMDQwM0M2MTAyM0JBCis6MTBERjkwMDAxQzQwRkY2RjNDMEM4MDAwMDNDNDI4MjMwNEEyMDAwMTM2Cis6MTBERkEwMDAwMDgwRjAyMUFGQjQwMDEwQUZCNzAwMTRBRkE3MDAxODg1Cis6MTBERkIwMDAzQzFGODAwMDk3RTMwMTIwOEQwOTAwMzA5NTA2MDA1QzJFCis6MTBERkMwMDA4RkI5MDA1NDhGQUMwMDMwMzA2MkZGRkYzMEQ4RkZGRkI0Cis6MTBERkQwMDAwMDQ3NzAyMTM3RUY0MDAwMDMzODY4MkIwMUNGNTgyMUVDCis6MTBERkUwMDAwMThENTAyNUFGQUIwMDIwQUZBOTAwMjhBRkFBMDAzMEFCCis6MTBERkYwMDBBRkE5MDAyNEFGQTAwMDJDQUZCRTAwMzQ5MTA3MDAwOEU5Cis6MTBFMDAwMDAzMEU0MDAwODE0ODAwMDhGMDIwMDIwMjE4RUEyMDAwNDVBCis6MTBFMDEwMDAwMDQwRjgwOTI3QTQwMDEwOEZBOTAwMzAzMTI4MDAwMjIxCis6MTBFMDIwMDA1NTAwMDAwMTMyNzMwMEZFM0MwNDgwMDgzNDhDMDA4MEVGCis6MTBFMDMwMDA5MThCMDAwODMxNkEwMDQwNTE0MDAwMTI4RkE0MDAyNEU3Cis6MTBFMDQwMDA4QzhEMDAwNDExQkUwMEJFMjQwRTAwMTQzMjY1MDAwMTQ4Cis6MTBFMDUwMDAxMEEwMDAwQzhGQTQwMDI0MjQwNDAwMEMxMjI0MDBENDZGCis6MTBFMDYwMDAyQTI3MDAwRDEwRTAwMENFMjQwOTAwMEUyNDA4MDAwQTIzCis6MTBFMDcwMDA1MjI4MDAwMTI0MTYwMDA4OEZBMjAwMjQyNDQ0MDAwMTI1Cis6MTBFMDgwMDBBRkE0MDAyNDhGQTYwMDE0M0MwMzgwMDgzNDY1MDA4MEYwCis6MTBFMDkwMDAwMDg2RjgyMThDQjEwMDMwQUNCRjAwMzA5MEI5MDA0RTQyCis6MTBFMEEwMDA4Q0FFMDAzMDM0MThGRkZGMDMzODc4MDQwMUNGNjgyMUFDCis6MTBFMEIwMDBBQ0FEMDAzNDhGQTYwMDMwOEZBQzAwNTQzMENBMDAwOERECis6MTBFMEMwMDAwM0NDNTgyMTExNDAwMDBDQUZBQjAwNTg4Q0E0MDAyMEE5Cis6MTBFMEQwMDA4RkIwMDA1ODEwOTAwMDk0MzBDNjAwRkY5MkEyMDAwQzQwCis6MTBFMEUwMDA4RkE3MDAzNDAyNDAyMDIxMDAwMjRCMDAzNTI4MDA4MDE5Cis6MTBFMEYwMDAwRTAwMEM4RDMxMDVGMDgwM0MwQzgwMDgzNTkwMDA4MEJFCis6MTBFMTAwMDA4RTBCMDAzMDAxNzE1MDIzMTk0MDAwNzAyNjU5MDA4MDk5Cis6MTBFMTEwMDAzQzE4MDgwMDhGMTgzMTk4MjQxRkZGODAwMzNGNzgyNDkzCis6MTBFMTIwMDAzMzJEMDA3RjNDMDY4MDAwM0MwRTgwMDQzMzExMDAxMDJDCis6MTBFMTMwMDBBQ0NGMDA5MDEyMjAwMDM0MDFBRTI4MjE5MEEzMDA2QkQ4Cis6MTBFMTQwMDA1NDYwMDAzMjNDMTA4MDA4MjQwNzAwMDFBMEE3MDA2QjM3Cis6MTBFMTUwMDA5NEM0MDA3QTI0ODYwMDBBQTYwNjAwMTIzQzBEODAwOEFBCis6MTBFMTYwMDAzNUE1MDA4MDkwQjEwMDA4MzIyQzAwNDAxNTgwMDAwNEQ1Cis6MTBFMTcwMDAzQzAzODAwODMyNkUwMDAxMTVDMDAwNjIwMDAwMDAwMDAwCis6MTBFMTgwMDAzNDY0MDA4MDhDOEYwMDIwOEZCMzAwNTgxMUYzMDAwQTk0Cis6MTBFMTkwMDAzNDYzMDEwMDhDNzkwMDAwMDI5OUMwMjMxQjAwMDA3N0QyCis6MTBFMUEwMDA4RkE4MDA1OEFDODgwMDIwQUM3NDAwMDAyNDE0MDAwMTMzCis6MTBFMUIwMDBBQzdFMDAwNEFGQjQwMDUwMTZDMDAwMzcwMDAwMDAwMDcxCis6MTBFMUMwMDA4RkE0MDA1MDE0ODAwMDMwMDAwMDAwMDAxMkUwMDAwNTExCis6MTBFMUQwMDAwMDAwMTgyMThGQTkwMDMwMzEzNzAwMDQ1MkUwRkU5MjcwCis6MTBFMUUwMDAwMDYwMTAyMTI0MDMwMDAxMEEwMDBENUIwMDYwMTAyMTczCis6MTBFMUYwMDAwQTAwMERGOTAwMDAzODIxMDA0MEY4MDkyNDA0MDAxNzM2Cis6MTBFMjAwMDAwQTAwMERBNzI0MDIwMDAxM0MxMDgwMDgzNjEwMDA4MDhGCis6MTBFMjEwMDAyNDA5MDAwMTAyNDAyMDIxMEUwMDE0RkNBNjA5MDAxMjZFCis6MTBFMjIwMDA5MjA4MDAyNTI0MDUwMDAxQUZBNTAwNTAzNTAyMDAwMTI5Cis6MTBFMjMwMDAwMjQwMjAyMTBFMDAxNTA2QTIwMjAwMjUwQTAwMEVBOUE4Cis6MTBFMjQwMDAzQzBEODAwODI3QTUwMDM4QUZBODAwNjAwRTAwMENBODgwCis6MTBFMjUwMDBBRkEwMDAzODE0NDBGRjZEOEZBODAwNjA4RkE1MDAzODc0Cis6MTBFMjYwMDAzMEIwMDEwMDUyMDBGRjZBOEVBMjAwMDQ4RkEzMDAzQzcwCis6MTBFMjcwMDA4RDA3MDA1ODAwNjcyMDIzMDQ4M0ZGNjRBRDAzMDA1ODE2Cis6MTBFMjgwMDAwQTAwMEU1NThFQTIwMDA0MEUwMDBDOUUwMjQwMjAyMUIyCis6MTBFMjkwMDAwQTAwMEVDNDAwMDAwMDAwMEUwMDE0RkMwMjQwMjAyMTAxCis6MTBFMkEwMDAzQzA1ODAwODM0QTMwMDgwMDI0MDIwMjEwRTAwMTUwNkEyCis6MTBFMkIwMDBBMDc2MDAwOTAyQzAzMDIxMjQwNDAwMzcwRTAwMTYyRTdCCis6MTBFMkMwMDAwMDAwMjgyMTBBMDAwRUMyOEZBNDAwNTA4RkEyMDAxODVGCis6MTBFMkQwMDA1ODQwRkZBMzNDMEQ4MDA4MEUwMDE0RkMwMjQwMjAyMTkyCis6MTBFMkUwMDA5MjBBMDAyNTI0MEIwMDAxQUZBQjAwNTAzNTQyMDAwNDE4Cis6MTBFMkYwMDAwMjQwMjAyMTBFMDAxNTA2QTIwMjAwMjUwQTAwMEVBOUU4Cis6MTBFMzAwMDAzQzBEODAwODhDQjYwMDMwOEVCRTAwMDgyNDA0MDAxODM2Cis6MTBFMzEwMDAyNkQ1MDAwMTAzQzBGODA5QUNCNTAwMzA4RkIyMDAzMDNCCis6MTBFMzIwMDAwQTAwMEQ1QjMyNDIwMDA0M0MwNzgwMDA5NEU1MDExQUFDCis6MTBFMzMwMDA1MEEwRkY2QTM0QzYwMDEwMEEwMDBFODk5MkEyMDAwQzk5Cis6MTBFMzQwMDAxMjJFMDAyQTJBMkYwMDE1MTFFMDAwMUUyNDE5MDAxNjkzCis6MTBFMzUwMDAyNDE4MDAwQzU2MzhGRjNFMzI2NTAwMDEzQzFGODAwODJGCis6MTBFMzYwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMEUwMDcwMzAyNDIwCis6MTBFMzcwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDE4QzdGMDAwMEQ5Cis6MTBFMzgwMDAxN0Y0RkY4RDAwMDAwMDAwOEM2NzAwMDQwM0M3MzAyM0UyCis6MTBFMzkwMDAwNEMxRkY4NDhGQTgwMDU4MEEwMDBFQkYwMDAwMDAwMENGCis6MTBFM0EwMDAxNjI5RkYzNjhGQTIwMDI0MEEwMDBFNzAyNDE2MDAxMEQyCis6MTBFM0IwMDAyNDExMDAwRTUyRDFGRjMwMjQxNjAwMTAwQTAwMEU2RkY3Cis6MTBFM0MwMDAyNDE2MDAxNjU2MzlGRjIyMzI2NTAwMDEzQzFGODAwOEQyCis6MTBFM0QwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMTAwMDcwMzAyNEFFCis6MTBFM0UwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDEwQTAwMEU2NEY4Cis6MTBFM0YwMDAyNDE2MDAxMjNDMDM4MDAwOEM2MjAxQjgwNDQwRkZGRTJBCis6MTBFNDAwMDAyNDA0MDgwMEFDNjQwMUI4MDNFMDAwMDgwMDAwMDAwMDI4Cis6MTBFNDEwMDAzMEE1RkZGRjMwQzZGRkZGM0MwNzgwMDA4Q0UyMDFCODRCCis6MTBFNDIwMDAwNDQwRkZGRTM0RTgwMTgwQUQwNDAwMDBBQ0U0MDAyMEFECis6MTBFNDMwMDAzQzA0ODAwODk0ODMwMDQ4MzA2M0ZGRkYxMDYwMDAxRDk3Cis6MTBFNDQwMDAzQzBCODAwMDI0QUEwMDEyMDA2QTQ4MkI1MTIwMDAxQUJECis6MTBFNDUwMDAyNDBBMDAwMzk0RjkwMTIwOEY4OTAwMDAyNDBDMDAxQTdCCis6MTBFNDYwMDAzMzM4RkZGRjI3MDdGRkZFMDA2Nzc4MkIzOUVFMDAwMUU2Cis6MTBFNDcwMDAwMDA5NkI4MjAxQUU1ODI0QTEwQzAwMEIxMTYwMDA0NzBCCis6MTBFNDgwMDA4RjgzMDAwNEE1MDcwMDE0OEY4ODAwMDQzNTA3MDAwMTVFCis6MTBFNDkwMDBBRjg3MDAwNDMwQ0MwMDQwNTU4MDAwMEYzQzA4ODAwMDVFCis6MTBFNEEwMDAzQzBDODAwMDM1ODQwMTgwQTQ4NTAwMEUwQTAwMEY5ODgyCis6MTBFNEIwMDA4RjhGMDAwQzI0MEEwMDAzMzU2NDAxODAzMENDMDA0MEFCCis6MTBFNEMwMDA4Rjg5MDAwMDhGODcwMDA0QTA4QTAwMEI1MTgwRkZGNTIwCis6MTBFNEQwMDAzQzBDODAwMDNDMDg4MDAwOTUwMzAxMjAzQzA4ODAwODJCCis6MTBFNEUwMDA5NTE4MDA0MDMwNzlGRkZGMjcyRUZGRkUzMzBGRkZGRjA2Cis6MTBFNEYwMDAwMUNGNjgyQjExQTAwMDAzMDFDMDIwMjE5NTAyMDA0MDJDCis6MTBFNTAwMDAzMDQ0RkZGRjNDMEI4MDAwMDBBNDUwMjMzNTY1MDE4MEEwCis6MTBFNTEwMDBBNEE0MDAwRUE0QUEwMDI0OEY4RjAwMEMzQzA1ODAwMDQ4Cis6MTBFNTIwMDAzNEFFMDE4MDI0MTgwMDAyMzBFRDgwMDBBNUQ4MDAwQzI0Cis6MTBFNTMwMDBBNUM5MDAxMEFEQ0YwMDI4QTVDNjAwMDgxMUEwMDAwRTg3Cis6MTBFNTQwMDAzQzA0ODAwMDk0QUEwMTE2MzE0MkZGRkMyNDQ4MDAwNEQ4Cis6MTBFNTUwMDAwMTA1MTgyMThDNzk0MDAwMzMyNkZGRkYxNEMwMDAwNzA1Cis6MTBFNTYwMDAyNDBFQkZGRjNDMEJGRkZGMzU2NTdGRkYwMEU1MzgyNDFECis6MTBFNTcwMDBBRjg3MDAwNDNDMDQ4MDAwMjQwRUJGRkYzNDhDMDE4MDcwCis6MTBFNTgwMDAwMEVFNjgyNEE1OEQwMDI2QUQ4OTAwMkMzQzA3MTAwMDA0Cis6MTBFNTkwMDBBQzg3MDFCODAzRTAwMDA4MDAwMDAwMDAyNDAyRkZGRTgxCis6MTBFNUEwMDAwMDYyMzgyNDBBMDAwRjc2QUY4NzAwMDQzQzA1ODAwMDIzCis6MTBFNUIwMDAzNEE0MDA3MDhDOEEwMDAwOTBBNjAxMTI4Rjg0MDAwMEExCis6MTBFNUMwMDAyN0JERkZGMDMwQzMwMEZGMDAwMzE4ODIzMDgyMDEwMDM2Cis6MTBFNUQwMDAwMDAwMzgyMTEwNDAwMDM5MjQ2NjAwMDMzMDg3NDAwMEQ1Cis6MTBFNUUwMDA1MEUwMDAzOTMwODgyMDAwMDAwNjEwODAwMDQ1QzgyMTI2Cis6MTBFNUYwMDA4RjJGNDAwMDI0NzgwMDA0MDAxODcwODBBRkFGMDAwMDE3Cis6MTBFNjAwMDAwMUM1NjgyMThEQUM0MDAwQUZBQzAwMDQ5NEFCMDExNjhECis6MTBFNjEwMDAzMTY5RkZGQzAxMjU0MDIxOEQwNTQwMDBBRkE1MDAwOEIwCis6MTBFNjIwMDA4RkE5MDAwODAwMDAzMDIxMDAwMDI4MjEzQzA3MDgwMEM1Cis6MTBFNjMwMDAyNEU3MDEwMDBBMDAwRkU5MjQwODAwMDg5MDQyMDAwMEM2Cis6MTBFNjQwMDAyNEE1MDAwMTJDQUQwMDBDMDA2MkM4MjEwMDE5QzA4MDc3Cis6MTBFNjUwMDAwMzA3NzgyMThERUUwMDAwMTFBMDAwMDYwMENFMzAyNkMxCis6MTBFNjYwMDAwM0E1MTAyMTE0QThGRkY1MDAwNTFBMDA1NTIwRkZGNDlBCis6MTBFNjcwMDA5MDQyMDAwMDNDMDQ4MDAwMzQ4NzAwNzAzQzA1MDgwMDk0Cis6MTBFNjgwMDA4Q0E1MzEwNDhDRTMwMDAwMkNBODAwMjAxMTAwMDAwOUE3Cis6MTBFNjkwMDAwMDZBMzgyMzAwMDU1ODgwM0MwQzA4MDAyNThDMzEwODlFCis6MTBFNkEwMDAwMTZDNDgyMTI0QUEwMDAxQUQyNzAwMDAzQzAxMDgwMEFDCis6MTBFNkIwMDBBQzJBMzEwNEFGODYwMDBDMjQwNzAwMDEwMEUwMTAyMUQxCis6MTBFNkMwMDAwM0UwMDAwODI3QkQwMDEwMTEwMEZGRkMwMDAwMzgyMTA2Cis6MTBFNkQwMDAwMDA2NjA4MDAxODU1ODIxOEQ2NDQwMDAyNDY5MDAwNDkzCis6MTBFNkUwMDAwMDA5Mzg4MEFGQTQwMDAwMDBFNTE4MjE4QzY2NDAwMEM2Cis6MTBFNkYwMDBBRkEwMDAwODBBMDAwRkQ5QUZBNjAwMDQyN0JERkZEOEJECis6MTBFNzAwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjRBRkI0MDAyMDBDCis6MTBFNzEwMDBBRkIzMDAxQ0FGQjEwMDE0OEY4NzAwMDAzQzA0ODAwMDMxCis6MTBFNzIwMDA5NDgzMDEwRTMwRTI0MDAwMDAwMDgwMjExMDQwMDAxMDcwCis6MTBFNzMwMDAzMDcyRkZGRjNDMDYwMDIwMDBFNjI4MjQxMEEwMDAwREU4Cis6MTBFNzQwMDAzMEVBODAwMDhGODgwMDA0MjQwOUJGRkYwMEU5MzgyNEU0Cis6MTBFNzUwMDAzNTAzMTAwMEFGODcwMDAwMzBGMTIwMDAxNjIwMDAwQkI5Cis6MTBFNzYwMDAzQzE0MDAwNDI0MThGRkJGMEEwMDEwMzgwMDc4MTAyNDVECis6MTBFNzcwMDAzMEVBODAwMDE1NDAwMDg2M0MwQzAwMjAzMEYxMjAwMDdCCis6MTBFNzgwMDAxMjIwRkZGODhGODMwMDA0M0MxNDAwMDQwMEY0OTgyNDQ2Cis6MTBFNzkwMDAxMjYwRkZGNTI0MThGRkJGMzQ2MjAwNDAzMEY5MDEwMDE5Cis6MTBFN0EwMDAxMzIwMDAwRkFGODIwMDA0M0MwMjAwMjAwMEUyRjgyNDk2Cis6MTBFN0IwMDAxM0UwMDAwNTNDMEI4MDAwM0MwNDAwMDQwMEU0MTgyNDM2Cis6MTBFN0MwMDAxMDYwMDBDRjAwMDAwMDAwOTU2QTAxMUU5NTY5MDExQ0QxCis6MTBFN0QwMDAzMTQ2RkZGRjAwMDk0NDAwMDBDODI4MjVBRjg1MDAwQzIyCis6MTBFN0UwMDAzQzBFODAwMDk1Q0QwMTBDOERDNDQwMDAzNDBDRkZGRjIxCis6MTBFN0YwMDAxMDhDMDBCMDMxQTVGRkZGMzA4RjAxMDA1NUUwMDAwMTAzCis6MTBFODAwMDAyNDEwMDAxMDMwRjExMDAwNTIyMDAwMDgzNjExMDAwMUQxCis6MTBFODEwMDAzMEYzMDAyMDE2NjAwMDlGM0MxODEwMDAwMEY4QTAyNDgwCis6MTBFODIwMDAxNjgwMDA5NjNDMDQwQzAwMzYxMTAwMDEzMEU4MDEwMDBGCis6MTBFODMwMDAxNTAwMDAwQjNDMEEwMDAxOEY4ODAwMDQzMTA5NDAwMERDCis6MTBFODQwMDAxNTIwMDAwODAwRUEzMDI0M0MwQzFGMDEwMEVDNTgyNDdECis6MTBFODUwMDAzQzBBMTAwMDUxNkEwMEFFMzBBRDAyMDAzQzBBMDAwMUQzCis6MTBFODYwMDAwMEVBMzAyNDE0QzAwMDk1M0MwNTEwMDAwMEU1MjAyNDg3Cis6MTBFODcwMDAwMDAwNDAyMTEwODAwMDA3MDAwMDkwMjEwMDA3OUUwMjQ4Cis6MTBFODgwMDAzMjcyMDAwRjAwMTI3ODgwM0MwRTA4MDEyNUNFODMwMDAyCis6MTBFODkwMDAwMUVFNDAyMThGOTQwMDFDMTI4MDAwNDcwMjIwODAyMTRECis6MTBFOEEwMDAxMDgwMDA5MTAwMDAwMDAwM0MwOTgwMDA5NTM5MDEwRUE1Cis6MTBFOEIwMDA5MTAzMDAwMDAyMjAzMDIxMzMzOEZGRkYyNzA1MDAwNEI4Cis6MTBFOEMwMDAxMDYwMDAwODAwMDBBMDIxMjQxRjAwMDMxMDdGMDEzQUZGCis6MTBFOEQwMDAyNDA0MDAwMjkxMEMwMDAxMTE4NDAxMTgzMEVBMDA0MDY4Cis6MTBFOEUwMDAwMDEyQTFDMDhGOTIwMDIwNTI0MDAwMDEzNjI2MDA0MDQ1Cis6MTBFOEYwMDAzQzEzODAwMDhFNkY0MDAwMzFGMTAxMDAxMjIwMDBDQkVDCis6MTBFOTAwMDAzMEQxRkZGQjNDMTgwODAwOEYxODAwMjQzMEQyMDAwNERGCis6MTBFOTEwMDAzMzA2MDAwNDE0QzAwMENDMzBCMEZGRkY1NjQwMDAwMUE1Cis6MTBFOTIwMDAzNjMxMDAwNDAyODAyMDIxMDIwMDI4MjEwRTAwMEY1NUZDCis6MTBFOTMwMDAwMjIwMzAyMTE2NDAwMDBEMDAwMDIwMjEzNjY1MDE4MEE0Cis6MTBFOTQwMDAzQzA0ODAwMDhDOTMwMUI4MDY2MEZGRkUyNDE5MjAwMDZGCis6MTBFOTUwMDAyNDE0MDAwMkE0QjkwMDA4QTBCNDAwMEJBNEEwMDAxMDY1Cis6MTBFOTYwMDAzQzA1MTAwMEFDODUwMUI4MDAwMDIwMjE4RkJGMDAyNEI5Cis6MTBFOTcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDI5Cis6MTBFOTgwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODkwCis6MTBFOTkwMDAwMEVDNTgyNDExNjBGRjdBMzBGMTIwMDA4RjhEMDAwNEM0Cis6MTBFOUEwMDAzQzBGRkZGRjM1RUU3RkZGMDBFRTM4MjQzNUEzODAwMERCCis6MTBFOUIwMDAwQTAwMTAyN0FGODcwMDAwM0MwMjA4MDA4QzQyMDAzODk0Cis6MTBFOUMwMDAzQzA0MDgwMDI0ODQwMDM4MTA0MDAwNEIyNDQ5RkZGRjE5Cis6MTBFOUQwMDAzQzAzODAwMDk0NkMwMTBFMzE4QkZGRkYxMTAwMDBBMEZFCis6MTBFOUUwMDAyNTczMDAwNDNDMTAwODAwOEUxMDAwMzAxMjAwMDAwQTRECis6MTBFOUYwMDAzMEU2MDEwMDhGOEEwMDA0MzE0MzQwMDAxMDYwMDAwNkI5Cis6MTBFQTAwMDAzQzBGMEYwMDAwRUY3MDI0M0MwRDAxMDAwMUFFNDAyQkM1Cis6MTBFQTEwMDAxMTAwMDBERjMyNjVGRkZGMTBDMDAwNjkzQzE0MEYwMEQ5Cis6MTBFQTIwMDAwMEY0MjgyNDNDMTgwMjAwMTBCODAwNjU4Rjk5MDAwQ0VGCis6MTBFQTMwMDAzMjcwRkZGRjAzMjk5ODI0MDI2NDkwMjE5MjQ5MDAwNDU4Cis6MTBFQTQwMDAyNTI3MDAwNDAwMDcyMUMwMDIwMDI4MjEzNjI2MDAwMkU1Cis6MTBFQTUwMDAwRTAwMEY1NTAwMDAwMDAwOEZCRjAwMjQ4RkI0MDAyMDZGCis6MTBFQTYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDRDCis6MTBFQTcwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjgzQzAyMEJGRjI2Cis6MTBFQTgwMDAwMEU0MTgyNDM0NUZGRkZGMDNFM0M4MkI1MzIwRkY2NzIzCis6MTBFQTkwMDAzNjExMDAwMTNDMDYwODAwOENDNjAwMkMzNjExMDAwNTFBCis6MTBFQUEwMDAyNEQwMDAwMTNDMDEwODAwQUMzMDAwMkMwQTAwMTA1REFECis6MTBFQUIwMDAzMEU4MDEwMDBBMDAxMDUyMjQxMDAwMjAwMjQwMjgyMUYyCis6MTBFQUMwMDAzQzEyMDgwMDhFNTIwMEQ4MjQwNDAwODAyNjREMDAwMTFDCis6MTBFQUQwMDAzQzAxMDgwMEFDMkQwMEQ4MEUwMDBGNTUyNDA2MDAwM0ExCis6MTBFQUUwMDAwQTAwMTBFODhGQkYwMDI0M0MwODA4MDEyNTA4ODMwMEI1Cis6MTBFQUYwMDAwQTAwMTA3QzNDMDk4MDAwMEEwMDEwQzUwMDAwNDgyMTczCis6MTBFQjAwMDAwRTAwMEZCQzAwMDAwMDAwMEEwMDEwNDk4Rjg3MDAwMEIzCis6MTBFQjEwMDAxNUEwRkY1MzNDMEEwMDAxMjY0NTAwMDQzMEFBRkZGRjYwCis6MTBFQjIwMDAzNjI2MDAwMjNDMDM4MDAwOEM3MjAxQjgwNjQwRkZGRUNFCis6MTBFQjMwMDA4Rjg1MDAwODM0NjkwMTgwQUQyMDAwMDAxMEEwMDBBRjZGCis6MTBFQjQwMDAzQzA0ODAwMDI1NEYwMDEyMDBBRjcwMkI1MUMwMDBBQzc4Cis6MTBFQjUwMDAyNDAzMDAwMzk0NzgwMTIwMjQxNDAwMUEzMEYxNDAwMEFCCis6MTBFQjYwMDAzMzEzRkZGRkExMzQwMDBCMTIyMDAwQjYyNjYzRkZGRTEzCis6MTBFQjcwMDAwMEEzQzgyQjU3MjAwMEI0MjQxRkZGRkUzNTA4MDAwMTU2Cis6MTBFQjgwMDBBNTIzMDAxNEFGODgwMDA0M0MxMDgwMDAyNDBDQkZGRkI0Cis6MTBFQjkwMDAwMTBDNDgyNDI0MEIwMDAyMzYwODAxODBBNTBCMDAwQzUwCis6MTBFQkEwMDBBNTBBMDAwRUE1MDYwMDA4QTUwOTAwMjZBNTA3MDAxMDY1Cis6MTBFQkIwMDAzQzA3MTAwMEFFMDcwMUI4MEEwMDEwRTg4RkJGMDAyNDIwCis6MTBFQkMwMDAzQzAzMDgwMDhDNjMwMEQwMkU0NTAwMEMwMDEyMjFDMENECis6MTBFQkQwMDAzODZCMDAwMTJENjIwMDAxMDA0NUY4MjQxN0UwRkY5QTEwCis6MTBFQkUwMDAzMjcwRkZGRjI2NENGRkZDMkQ4NDAwMDQ1NDgwMDA1MDNGCis6MTBFQkYwMDAwMDAwMjAyMTM4NkEwMDAyMkQ0MzAwMDEwMDY1ODAyNEI2Cis6MTBFQzAwMDAxNjAwMDA0QTMyNzBGRkZGMDAwNzZBNDIwMDEyNzAyQkE0Cis6MTBFQzEwMDAwMUFFNDAyNDU1MDAwMDYzMDAwMDIwMjEwMDEyMjFDMEY1Cis6MTBFQzIwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIzNERGMDAwMjI3Cis6MTBFQzMwMDAwMjgwMjAyMTMzRTZGRkZGMEUwMDBGNTUzMEE1RkZGRkI1Cis6MTBFQzQwMDAwQTAwMTBBQzAwMDAyMDIxMjQwNDAxMDAwMjAwMjgyMTQ5Cis6MTBFQzUwMDAwRTAwMEY1NTAyMjAzMDIxMEEwMDEwOTgwMDAwMDAwMDFECis6MTBFQzYwMDA4QzY2NDAwMDMwQ0YwMTAwMTFFMDAwM0QzMEY4MDEwMDFCCis6MTBFQzcwMDAzQzEyMDgwMDhFNTIwMDI0MTMwMDAwMTEzMjM0MDAwNEFDCis6MTBFQzgwMDAzQzFGMEYwMDAwRkZDODI0M0MwNTAyMDAxMzI1MDAwQ0E4Cis6MTBFQzkwMDA4RjhDMDAwQzAyMjAzMDIxMzI2NUZGRkYwMTg5NTgyNDNGCis6MTBFQ0EwMDAwMTY0MTAyMTkwNDkwMDA0MzIzMEZGRkIyNDExRkZGRTYzCis6MTBFQ0IwMDAyNTI3MDAwNDBFMDAwRjU1MDAwNzIxQzAwMjUxOTAyNEEzCis6MTBFQ0MwMDAyNDA0MDAwMTEyNDQwMDUyMzI0MzAwMDExNDYwMDA1ODMxCis6MTBFQ0QwMDAwMjAwMzAyMTMyNEEwMDA0MTE0MDAwMDQ4RjhEMDAwMEYwCis6MTBFQ0UwMDAzMUE4MDgwMDE1MDAwMDVBMzI2NUZGRkYxNjgwRkY1QjRGCis6MTBFQ0YwMDA4RkJGMDAyNDNDMTM4MDAwMzY2NTAxODAzQzA0ODAwMEY3Cis6MTBFRDAwMDA4QzkwMDFCODA2MDBGRkZFMjQwNjIwMDAyNDBGMDAwMkFDCis6MTBFRDEwMDBBNEE2MDAwOEEwQUYwMDBCQTRBMDAwMTAzQzBFMTAwMDk5Cis6MTBFRDIwMDBBQzhFMDFCODBBMDAxMEU4OEZCRjAwMjQwMDAwMjAyMTNCCis6MTBFRDMwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIxMTQwRkVFOUYzCis6MTBFRDQwMDAwMDAwQTAyMTk1MkUwMTEwOTUwRDAwMDIzMUM4RkZGRjkzCis6MTBFRDUwMDA1MUE4RkVFNDAwMTJBMUMwMEEwMDEwOEI4RjkyMDAyMDdGCis6MTBFRDYwMDAzQzA1MDgwMDhDQTUwMDI0MzBCODAwMDE1MzAwRkYzQjhGCis6MTBFRDcwMDA4RkJGMDAyNDMyNjVGRkZGMzYyNjAwMDIwMDAwMjAyMUVECis6MTBFRDgwMDAwRTAwMEY1NTAwMDAwMDAwMEEwMDEwRTg4RkJGMDAyNDlECis6MTBFRDkwMDAzNjI2MDAwMjBFMDAwRjU1MjQwNDAwODAwQTAwMTBFOEY5Cis6MTBFREEwMDA4RkJGMDAyNDAyMDAyODIxMEUwMDBGNTUzMjI2RkZGQkUyCis6MTBFREIwMDAwQTAwMTE1OTAwMTIyMUMwOTEwMzAwMDEyNDAyMDAwMTMwCis6MTBFREMwMDAxMDYyRkVFQTI0MDQwMDAxMjQxMDAwMDIxNDcwRkVDNTQzCis6MTBFREQwMDAwMDAwQTAyMTMwRTMwMDQwMTA2MEZFQzM4RjkyMDAyMEFECis6MTBFREUwMDA5NTJCMDExMDk1MDkwMDAyMzE2N0ZGRkYxMTI3RkVFMDA2Cis6MTBFREYwMDA4RkJGMDAyNDBBMDAxMDhCMDAwMDAwMDAyNDAzMDAwM0QyCis6MTBFRTAwMDAzNDgyMDE4MEEwNDMwMDBCMEEwMDExMzQzQzEwODAwMEMyCis6MTBFRTEwMDAzMjE0MDAwNDE2ODAwMDAzMzI2NUZGRkYzNjEyMDAwMjMwCis6MTBFRTIwMDAzMjUwRkZGRjAyMDAzMDIxMEEwMDExQjEwMDAwMjAyMTAyCis6MTBFRTMwMDAwMDAwMjAyMTBFMDAwRjU1MzI2NUZGRkYwQTAwMTE4NkU5Cis6MTBFRTQwMDAzMjEwRkZGQjI0MUZGRkZFMEEwMDExMzIwMTFGNDAyNDc1Cis6MTBFRTUwMDAwMjAwMzAyMTBFMDAwRjU1MjQwNDAxMDAwQTAwMTE4QzFECis6MTBFRTYwMDAwMDAwMDAwMDI3QkRGRkM4QUZCMDAwMTBBRkJGMDAzNEU2Cis6MTBFRTcwMDAzQzEwNjAwQ0FGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODFFCis6MTBFRTgwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODgwCis6MTBFRTkwMDBBRkIxMDAxNDhFMEU1MDAwMjQwRkZGN0YzQzA2ODAwMDlGCis6MTBFRUEwMDAwMUNGNjgyNDM1QUMzODBDMjQwQjAwMDNBRTBDNTAwMEE1Cis6MTBFRUIwMDBBQ0NCMDAwODNDMDEwODAwQUMyMDAwMjAwRTAwMTc1RjFFCis6MTBFRUMwMDAwMDAwMDAwMDNDMEEwMDEwMzU0OTgwNTFBRTA5NTM3QzE3Cis6MTBFRUQwMDAzQzA2NjAxNjhDQzcwMDAwM0MwODYwMTQ4RDA1MDBBMDNECis6MTBFRUUwMDAzQzAzRkZGRjAwRTMyMDI0M0MwMjUzNTMwMDA1MkZDMkU0Cis6MTBFRUYwMDAxNDgyMDAwNjM0RDA3QzAwMDAwNUEwODAwMjg2OTgyMTkwCis6MTBFRjAwMDA4RTcyMDAwNDNDMTE2MDAwMDI1MTgwMjE4RTFFMDA3ODM4Cis6MTBFRjEwMDA4RTE3MDA3QzNDMDI2MDAwM0MwNTA4MDEyNEE1ODE4NDFBCis6MTBFRjIwMDAzNDQ0MjAyMDI0MDYwMDBBQUY5RTAwMTAwRTAwMTYwODZDCis6MTBFRjMwMDBBRjk3MDAxNDNDMTgwMDk4MjYwNTAzODgzQzFGMDAxMDZBCis6MTBFRjQwMDAzQzE5NjAwQzM3MTYwMEMwM0MxNTgwMDBBRjNGNTNGQ0U1Cis6MTBFRjUwMDAzQzFFMDgwMDI3REUwMDM4M0MxNzA4MDEyNkY3ODMwMjE0Cis6MTBFRjYwMDBBRUI2MDEzQ0FGODUwMDE4M0MwNDdGRkYzNDg4RkZGRjNDCis6MTBFRjcwMDAzQzA3ODAwMDBBMDAxMjM3M0MwNjYwMDA4Q0FCMDAwMEEyCis6MTBFRjgwMDAzMTZBMDAwMTE1NDAwMDAyMzU2MzAwMDFBQ0EzMDAwMEE2Cis6MTBFRjkwMDA1NDgwMDAwOTMyMDUwMDAxOENGMDAwMDA4Q0M5MTgwQzY3Cis6MTBFRkEwMDAzMjA0MDAwMzA1MjFGRkY1MDEyODE4MjRBQ0MzMTgwQzE2Cis6MTBFRkIwMDAwQTAwMTIzMDAwMDAwMDAwMTRBMDAwNTUzQzExODAwMDJGCis6MTBFRkMwMDAzMjA2MDAwMjEwQzBGRkU4OEY4NTAwMTgzQzA0ODAwMDY0Cis6MTBFRkQwMDA4Qzk5MDE0MDI0MTAwMDQwQUM5OTAwMjA4Qzk4MDE0ODg1Cis6MTBFRkUwMDAwMDE4N0UwMjMxRTMwMDcwMTA3MDAyMkMwMDAwMDAwMDU3Cis6MTBFRkYwMDAyQzY3MDA0MTUwRTAwMDc4MjQwNDAwNjAyNDExMDAyMEI4Cis6MTBGMDAwMDAxMDcxMDAwNjNDMUY0MDAwM0MxMzgwMDBBRTdGMDE3ODY5Cis6MTBGMDEwMDAwMDAwMDAwMDBBMDAxMjJCOEY4NTAwMTg4QzkzMDE0ODE1Cis6MTBGMDIwMDAyNDE2MDAwNDM0ODgwMTgwMDAxMzRDMDIzMTI1MDBGRkFGCis6MTBGMDMwMDA4QzgzMDE0MDEwQjYwMTczMjRCMkZGRkEyRTRCMDAwNkY4Cis6MTBGMDQwMDA1MTYwMDAxMzNDMDU4MDAwOEM4NjAxNDQzMEE0MDBGRjExCis6MTBGMDUwMDAzMEQ0MDBGRjMwQzMwMEZGMkU4NTAwMDgxNEEwMDAwMjRBCis6MTBGMDYwMDAyNDY3MDAwNDI0MDcwMDAzMjQwQzAwMDkxMDhDMDFBQzYxCis6MTBGMDcwMDAyODhEMDAwQTExQTAwMTk4MjQxNTAwMEEyNDBFMDAwODBBCis6MTBGMDgwMDAxMDhFMDAxNThGOTEwMDFDMDAwNzE5QzAzQzA1ODAwMEYwCis6MTBGMDkwMDA4Q0E3MDFCODA0RTBGRkZFMjQxNjAwMDJBRDAzMDAwMEI3Cis6MTBGMEEwMDBBNTA5MDAwOEExMTYwMDBCOENBNDAxNDgzQzFGNDAwMEQ0Cis6MTBGMEIwMDAzQzEzODAwMEE1MDQwMDEwOENBOTAxNDRBRDA5MDAyNDc0Cis6MTBGMEMwMDAzQzA4MTAwMEFDQTgwMUI4QUU3RjAxNzgwMDAwMDAwMDM5Cis6MTBGMEQwMDAwQTAwMTIyQjhGODUwMDE4MDAwNkNBMDIwMDA3MjA4MDQ0Cis6MTBGMEUwMDAzQzE2MDgwMTI2RDY4MzAwMDA5NkMwMjEyNjJGMDAwMTc5Cis6MTBGMEYwMDAzMzI1MDBGRjI0MTAwMDAxQTMxOTAwMDAxNEIwRkZFMjIzCis6MTBGMTAwMDBBRjhGMDAxQzAwMDcxOUMwMEEwMDEyNzRBRjg1MDAyMEUxCis6MTBGMTEwMDA4RTMzMDEyODNDMEQ4MDA4QUUzMzAwMjA4RTJDMDEwNDc0Cis6MTBGMTIwMDA4RTI2MDEwMDk1QTgwMDQ4QUY4QzAwMDBBRjg2MDAwNDMxCis6MTBGMTMwMDAzMTAzRkZGRjBFMDAwRjRFQUY4MzAwMDgzQzA3MDgwMEFECis6MTBGMTQwMDA4Q0U3MDBDMDEwRTAwMDJEOEY4NzAwMDAzQzBGMDgwMDA2Cis6MTBGMTUwMDA4REVGMDBDNDI1RUUwMDAxM0MwMTA4MDBBQzJFMDBDNDc4Cis6MTBGMTYwMDAzQzA0ODAwMDhDOTEwMTI0M0MwNzYwMjBBQ0YxMDAxNDI5Cis6MTBGMTcwMDAwMDAwMDAwMDNDMDY4MDAwM0MxNjQwMDBBQ0Q2MDEzODgwCis6MTBGMTgwMDAwMDAwMDAwMDUyNjBGRjhGMzIwNjAwMDIyNjY5MDE0MDM1Cis6MTBGMTkwMDAyNjZEMDA4MDI0MTVGRjgwMDEzNTYwMjQwMUI1NzAyNEEwCis6MTBGMUEwMDAwMDBFMTk0MDMxQjQwMDdGMDAwQzkxNDAzMTI4MDA3RkRGCis6MTBGMUIwMDAzQzA1MjAwMDM0QTIwMDAyMDA3NDUwMjUwMjQ4NTgyNTY2Cis6MTBGMUMwMDAwMTYyOTgyNTAxNDJGODI1QUNERjA4MzBBQ0QzMDgzMDQ1Cis6MTBGMUQwMDAwQTAwMTI0MjMyMDYwMDAyMTQ2NEZGOEIzQzFGNDAwMEZBCis6MTBGMUUwMDAwRTAwMUY3OTNDMTM4MDAwM0MxRjQwMDBBRTdGMDE3ODY5Cis6MTBGMUYwMDAwMDAwMDAwMDBBMDAxMjJCOEY4NTAwMTgzQzE0MDAxMDNDCis6MTBGMjAwMDAwMEY0OTAyNDE2NDAwMEE3OEY4MzAwMDQzQzE4MDgwMEU3Cis6MTBGMjEwMDA4RjE4MDAyMDk2MzYwMTBFMzBGNTQwMDAyNzExMDAwMUFFCis6MTBGMjIwMDAzQzAxMDgwMEFDMzEwMDIwMzJEMkZGRkYxMkEwMDBCMzM1Cis6MTBGMjMwMDAwMDAwODgyMTNDMUYwMDIwMDBGRkM4MjQxMzIwMDBCMERDCis6MTBGMjQwMDAzMEU5ODAwMDhGODIwMDA0MjQwNEJGRkYwMEU0MzgyNEVBCis6MTBGMjUwMDAzNDQzMTAwMEFGODcwMDAwMzBFNjIwMDAxMEMwMDBBNTQ2Cis6MTBGMjYwMDAyNDBFRkZCRjNDMEQwMDA0MDBFRDYwMjQxMTgwMDAwMjVECis6MTBGMjcwMDAwMDZFMTAyNDM0NjIwMDQwMzBFRjAxMDAxMUUwMDAwRkY2Cis6MTBGMjgwMDBBRjgyMDAwNDNDMTUwMDIwMDBGNUEwMjQxMjgwMDAwNTg4Cis6MTBGMjkwMDAzQzA0ODAwMDNDMTgwMDA0MDBGOEIwMjQxMkMwMDEyRjg4Cis6MTBGMkEwMDAwMDAwMDAwMDk0OEEwMTFFOTQ4OTAxMUMzMTVGRkZGRjU5Cis6MTBGMkIwMDAwMDA5MTQwMDAzRTJDODI1QUY5OTAwMEMzQzA1ODAwMDRBCis6MTBGMkMwMDA5NEEzMDEwQzhDQTQ0MDAwMzQwQkZGRkYxMDhCMDBDQkU3Cis6MTBGMkQwMDAzMDY1RkZGRjMwODgwMTAwNTUwMDAwMDEyNDExMDAxMDQ3Cis6MTBGMkUwMDAzMEU2MTAwMDEwQzAwMDEzMzYzNTAwMDEzMEVDMDAyMDZECis6MTBGMkYwMDAxNTgwMDAwQTNDMEUxMDAwMDBFRTY4MjQxMUEwMDAwRERECis6MTBGMzAwMDAzQzE4MEMwMDNDMTYwQkZGMDBGOEE4MjQzNkQ0RkZGRjc1Cis6MTBGMzEwMDAwMjk1NzgyQjExRTAwMDA3MzYzNTAwMDEzQzE5MDgwMEYyCis6MTBGMzIwMDA4RjM5MDAyQzM2MzUwMDA1MjczMTAwMDEzQzAxMDgwMERCCis6MTBGMzMwMDBBQzMxMDAyQzMwRkYwMTAwMTdFMDAwMEIzQzBBMDAwMTRCCis6MTBGMzQwMDA4Rjg4MDAwNDMxMDI0MDAwMTQ0MDAwMDgwMEVBMzAyNDk1Cis6MTBGMzUwMDAzQzA0MUYwMTAwRTQ1MDI0M0MwOTEwMDAxMTQ5MDEwMzQyCis6MTBGMzYwMDAzMEFCMDIwMDNDMEEwMDAxMDBFQTMwMjQxNEMwMDA5OENGCis6MTBGMzcwMDAzQzAzMTAwMDAwRTMyMDI0MDAwMDQwMjExMDgwMDAwNzFGCis6MTBGMzgwMDAwMDAwQTAyMTAwMDc2RTAyMzFCNDAwMEYwMDE0NjA4MDVECis6MTBGMzkwMDAzQzEyMDgwMTI2NTI4MzAwMDE5MjQwMjE4RjhFMDAxQ0VFCis6MTBGM0EwMDAxMUMwMDA2MjAyQTA4ODIxMTQ4MDAwMDMzQzA5ODAwMDgzCis6MTBGM0IwMDAzQzA4MDgwMTI1MDg4MzAwOTUyRjAxMEU5MTAzMDAwMEU5Cis6MTBGM0MwMDAwMkEwMzAyMTMxRTRGRkZGMjQ4NTAwMDQxMDYwMDAwODEyCis6MTBGM0QwMDAwMDAwQjAyMTI0MTYwMDAzMTA3NjAxMDkyNDBBMDAwMjVGCis6MTBGM0UwMDA5MTBCMDAwMTExNkEwMDI2MzBFMzAwNDAwMDE0QjFDMDA3Cis6MTBGM0YwMDA4RjkyMDAyMDUyNDAwMDAxMzZBNjAwNDAzQzE0ODAwMDRECis6MTBGNDAwMDA4RThDNDAwMDMxOTUwMTAwMTJBMDAwQkUzMEQ1MDAwNDYyCis6MTBGNDEwMDAzQzBEMDgwMDhEQUQwMDI0MzBEMkZGRkIzMUE2MDAwNDY2Cis6MTBGNDIwMDAxNEMwMDBGMTMwQjFGRkZGNTZBMDAwMDEzNjUyMDAwNEI1Cis6MTBGNDMwMDAwMkMwMjAyMTAyMjAyODIxMEUwMDBGNTUwMjQwMzAyMTU5Cis6MTBGNDQwMDAxNkEwMDAwRDAwMDAyMDIxMzY4NDAxODAzQzA1ODAwMEJDCis6MTBGNDUwMDA4Q0FFMDFCODA1QzBGRkZFMjQxNjIwMDAyNDBGMDAwMjY4Cis6MTBGNDYwMDBBNDk2MDAwOEEwOEYwMDBCQTQ4MDAwMTAzQzA0MTAwMDlDCis6MTBGNDcwMDBBQ0E0MDFCODAwMDAyMDIxMEEwMDEzODYwMDgwMTAyMUVFCis6MTBGNDgwMDAxMDYwRkZEQjAwMDBCMDIxOTUyNzAxMTA5NTA5MDAwMkY0Cis6MTBGNDkwMDAzMEU4RkZGRjUxMjhGRkQ2MDAxNEIxQzAwQTAwMTM0RTE4Cis6MTBGNEEwMDA4RjkyMDAyMDI0MEVCRkZGMDA2RTY4MjQxMUEwMDAwNzc5Cis6MTBGNEIwMDAyNDBGODdGRjAwNkZBODI0MTZBMDAwMEEzQzE5MDA2MEUzCis6MTBGNEMwMDAwMEY5QzAyNDEzMDAwMDA3MDAwMDAwMDAwRTAwMEQzNEY2Cis6MTBGNEQwMDAwMDAwMDAwMDEwNDBGRjI4M0MwNjgwMDAwQTAwMTJBQTJECis6MTBGNEUwMDAzQzA0ODAwMDBFMDAxNEU1MDAwMDAwMDAwQTAwMTM4NkIyCis6MTBGNEYwMDAwMDAwMDAwMDBBMDAxMkVGMDA2RTEwMjQzMEU5ODAwMEM2Cis6MTBGNTAwMDAxMTIwRkY1NThGODMwMDA0M0MwQjAwMjAwMEVCNTAyNDlBCis6MTBGNTEwMDAxMTQwRkY1MThGODUwMDA0M0MwOEZGRkYzNTAzN0ZGRjNBCis6MTBGNTIwMDAwMEUzMzgyNDBBMDAxMkU2MzRBMzgwMDAzQzA1MDgwMEZBCis6MTBGNTMwMDA4Q0E1MDAzODE0QTAwMDAyMjRBNEZGRkYwMDAwMjAyMUE1Cis6MTBGNTQwMDAzQzAzODAwMDk0NzkwMTBFMzMzOEZGRkYxMTAwMDBEQThDCis6MTBGNTUwMDAyNzEyMDAwNDNDMTEwODAwOEUzMTAwMzAxMjIwMDAwQUVFCis6MTBGNTYwMDAzMEU5MDEwMDhGODIwMDA0MzA1RjQwMDAxM0UwMDAwNkE0Cis6MTBGNTcwMDAzQzA4MEYwMDAwRTgxODI0M0MwQjAxMDAwMTYzNTAyQkVECis6MTBGNTgwMDAxMTQwMDBDMTMyNDVGRkZGMTEyMDAwMkUzQzBEMEYwMDNECis6MTBGNTkwMDAwMEVEMzAyNDNDMEMwMjAwMTBDQzAwMkE4Rjk2MDAwQ0E5Cis6MTBGNUEwMDAzMjUxRkZGRjAyQzQ3ODI0MDFGRTcwMjE5MUQyMDAwNDgxCis6MTBGNUIwMDAyNjQ3MDAwNDAwMDcyMUMwMDIyMDI4MjEzNkE2MDAwMkE5Cis6MTBGNUMwMDAwRTAwMEY1NTAwMDAwMDAwMEEwMDEzODYwMDAwMTAyMUY1Cis6MTBGNUQwMDAzQzBCMDgwMDhENkIwMEQ4MDI0MDI4MjEyNDA0MDA4MEQ5Cis6MTBGNUUwMDAyNTY3MDAwMTNDMDEwODAwQUMyNzAwRDgwRTAwMEY1NTJDCis6MTBGNUYwMDAyNDA2MDAwMzBBMDAxMzg2MDAwMDEwMjEwQTAwMTMwOUU0Cis6MTBGNjAwMDAyNDExMDAyMDhDODQwMTQwMDEwMDI4MjEzQzAzODAwMDRCCis6MTBGNjEwMDA4QzdGMDFCODA3RTBGRkZFMjQwMjAwMUNBQ0E0MDAwMEIwCis6MTBGNjIwMDBBMEEyMDAwQjNDMEExMDAwQUM2QTAxQjgzQzFGNDAwMENECis6MTBGNjMwMDAzQzEzODAwMEFFN0YwMTc4MDAwMDAwMDAwQTAwMTIyQjBFCis6MTBGNjQwMDA4Rjg1MDAxODNDMDMwODAwOEM2MzAwRDAyRTg1MDAwQ0M5Cis6MTBGNjUwMDAwMDE0MjFDMDM4NzEwMDAxMkUzOTAwMDEwMzI1QzAyNDk3Cis6MTBGNjYwMDAxNzAwRkZENTMyNTFGRkZGMjY5RkZGRkMyRkU0MDAwNDU3Cis6MTBGNjcwMDAxNDgwMDAwODAwMDAyMDIxMzg2QjAwMDIyRDZBMDAwMTcwCis6MTBGNjgwMDAwMTQ1MTAyNDEwNDAwMDA2MDAwNzQyNDIzMjUxRkZGRjlFCis6MTBGNjkwMDAwMDAwMjAyMTAyMjAyODIxMEEwMDEzQzEzNkE2MDAwMjAyCis6MTBGNkEwMDAwMDE0MTgyQjAxMDMyODI0MTRBMDAwMDUzMjUxRkZGRjc5Cis6MTBGNkIwMDAwMDE0MjFDMDAyMjAyODIxMEEwMDEzQzEzNkE2MDAwMjJFCis6MTBGNkMwMDAwMDAwMjAyMTAyMjAyODIxMEUwMDBGNTUzMkE2RkZGQjRBCis6MTBGNkQwMDAwQTAwMTNGRTAwMTQyMUMwMTA5NTAwNUEwMDA3Njg4MDJDCis6MTBGNkUwMDAyNDA2MDAwQjE0ODZGRTY5MDAwNzE5QzAwMDA3Qzg4MEI1Cis6MTBGNkYwMDAzQzExMDgwMTI2MzE4MzAwMDMzMTMwMjEwQTAwMTI3NEM1Cis6MTBGNzAwMDBBMEMwMDAwMTM0RDQwMDAyMDJDMDIwMjEzMEE1RkZGRkI4Cis6MTBGNzEwMDAwRTAwMEY1NTMyODZGRkZGMEEwMDEzNkYwMDAwMjAyMUY0Cis6MTBGNzIwMDAwMDA3Rjg4MDNDMEEwODAxMjU0QTgzMDAwM0VBMTAyMUZCCis6MTBGNzMwMDA5MDUzMDAwMDEyNjBGRTU1MDAwNzE5QzBBMDQwMDAwMDYxCis6MTBGNzQwMDA4RjhCMDAxQzI1NjJGRkZGMTQ0MEZFNTBBRjgyMDAxQzBGCis6MTBGNzUwMDAwMDA3MTlDMDBBMDAxMjc0QUY4MDAwMjAwRTAwMEZCQzExCis6MTBGNzYwMDAwMDAwMDAwMDBBMDAxMzAwOEY4NzAwMDAxNTYwRkVGRUY1Cis6MTBGNzcwMDAzQzBBMDAwMTI2NDMwMDA0MzA2QUZGRkYzNkE2MDAwMjVGCis6MTBGNzgwMDAzQzAzODAwMDhDNzIwMUI4MDY0MEZGRkUzNDY5MDE4MEEyCis6MTBGNzkwMDA4Rjg1MDAwOEFEMjAwMDAwMTBBMDAwOEIzQzE5ODAwMDcwCis6MTBGN0EwMDAyNTREMDAxMjAwQUQ2MDJCMTE4MDAwODgyNDExMDAwMzRDCis6MTBGN0IwMDA5NDc1MDEyMDI0MTQwMDFBMzBFRTQwMDAzMkFGRkZGRjkwCis6MTBGN0MwMDBBMTM0MDAwQjExQzAwMDkxMjVFM0ZGRkUwMEEzQjAyQjc0Cis6MTBGN0QwMDAxNkMwMDA4RjI0MDVGRkZFMzUwODAwMDFBNTIzMDAxNDg0Cis6MTBGN0UwMDAwQTAwMTRDNkFGODgwMDA0MjQwNDAxMDAwMjIwMjgyMTY2Cis6MTBGN0YwMDAwRTAwMEY1NTAyNDAzMDIxMEEwMDEzNUIwMDAwMDAwMDhDCis6MTBGODAwMDA5MTAzMDAwMTI0MTQwMDAxMTA3NEZGMUIyNDA0MDAwMTYzCis6MTBGODEwMDAyNDE4MDAwMjE0NzhGRUY2MDAwMEIwMjEzMEYxMDA0MEY4Cis6MTBGODIwMDAxMjIwRkVGNDhGOTIwMDIwOTUyMjAxMTA5NTFGMDAwMkY1Cis6MTBGODMwMDAzMDU5RkZGRjEzRjlGRjI3MDA4MDEwMjEwQTAwMTM0RUYzCis6MTBGODQwMDAwMDAwMDAwMDNDMTgwODAxMjcxODgzMDAwMUI4ODAyMTNGCis6MTBGODUwMDAwMDA2N0EwMkEyMEYwMDAxM0MxMjYwMDA4RTQzMTgyMEJECis6MTBGODYwMDAyNDE1MDAwMTAwRjU3MDA0MDA2RTI4MjUwMUI3QTAyMUMxCis6MTBGODcwMDAwMDA2NjQwMjAwMDcxOUMwQTY4QzAwMDBBRTQ1MTgyMERGCis6MTBGODgwMDAwQTAwMTI3NTNDMDU4MDAwMzZBNjAwMDIwRTAwMEY1NUQ2Cis6MTBGODkwMDAyNDA0MDA4MDBBMDAxMzg2MDAwMDEwMjEwRTAwMTUwQkJFCis6MTBGOEEwMDAzQzEzODAwMDNDMUY0MDAwQUU3RjAxNzgwMDAwMDAwMDQ4Cis6MTBGOEIwMDAwQTAwMTIyQjhGODUwMDE4OEM2OTQwMDAzMTM0MDEwMDNBCis6MTBGOEMwMDAxMjgwMDAzNTMwRUMwMTAwM0MxNDA4MDA4RTk0MDAyNEI2Cis6MTBGOEQwMDAxMTgwMDAxMTMyQjYwMDA0M0MwRTBGMDAwMEVFNjgyNEM3Cis6MTBGOEUwMDAzQzA2MDIwMDExQTYwMDBDMDJBMDMwMjE4RjkxMDAwQ0YyCis6MTBGOEYwMDAzMjQ1RkZGRjAyMjRDODI0MDMzRUMwMjE5MzBGMDAwNEI5Cis6MTBGOTAwMDAzMkIxRkZGQjI0MTVGRkZFMjVFNzAwMDQwRTAwMEY1NTYyCis6MTBGOTEwMDAwMDA3MjFDMDAyOTVBMDI0MjQwNDAwMDExMjg0MDAzRkE2Cis6MTBGOTIwMDAzMjgyMDAwMTEwNDAwMDA3MzI4QTAwMDQwMjIwMzAyMTk4Cis6MTBGOTMwMDAwMDAwMjAyMTBFMDAwRjU1MzI0NUZGRkYzMjMxRkZGQjQyCis6MTBGOTQwMDAzMjhBMDAwNDExNDAwMDA0OEY4NTAwMDAzMEFCMDgwMEFCCis6MTBGOTUwMDAxNTYwMDAzQTMyNDVGRkZGMTZDMEZFREUwMDAwMTAyMUEwCis6MTBGOTYwMDAzQzEyODAwMDM2NDQwMTgwM0MwNTgwMDA4Q0E4MDFCODIwCis6MTBGOTcwMDAwNTAwRkZGRTI0MTQyMDAwMjQwMzAwMDJBNDk0MDAwOEM0Cis6MTBGOTgwMDBBMDgzMDAwQkE0ODAwMDEwM0MwOTEwMDBBQ0E5MDFCOEIyCis6MTBGOTkwMDAwQTAwMTM4NjAwMDAxMDIxM0MwNjA4MDA4Q0M2MDAyNEQzCis6MTBGOUEwMDAzMENDMDAwMTUxODBGRUNCMDAwMDEwMjEzMjQ1RkZGRjFBCis6MTBGOUIwMDAzNkE2MDAwMjAwMDAyMDIxMEUwMDBGNTUwMDAwMDAwMEI2Cis6MTBGOUMwMDAwQTAwMTM4NjAwMDAxMDIxMjQxMTAwMDMzNzM4MDE4MDNCCis6MTBGOUQwMDBBMzExMDAwQjNDMDU4MDAwMjQwOUJGRkYwMTA5RjgyNDk2Cis6MTBGOUUwMDAyNDAyMDAwMjM0QTgwMTgwQTUwMjAwMENBNTBBMDAwRTIyCis6MTBGOUYwMDBBNTA2MDAwOEE1MUYwMDI2QTUwNzAwMTAzQzA5MTAwMDU5Cis6MTBGQTAwMDBBQ0E5MDFCODBBMDAxMzg2MDAwMDEwMjEyNDA1RkZGRUVFCis6MTBGQTEwMDAwMTA1NDAyNDBBMDAxNEM2QUY4ODAwMDQzMjM2MDAwNEYxCis6MTBGQTIwMDAxNkMwMDAwMzMyNDVGRkZGMzYzRjAwMDIzM0YxRkZGRkVGCis6MTBGQTMwMDAwMjIwMzAyMTBBMDAxNEJGMDAwMDIwMjEwMjIwMzAyMUMyCis6MTBGQTQwMDAwRTAwMEY1NTI0MDQwMTAwMEEwMDE0QTcwMDAwMDAwMDU2Cis6MTBGQTUwMDAzQzAzODAwMDhDNjQwMTAwMzA4MjAwM0UxNDQwMDAwOEFBCis6MTBGQTYwMDAwMDAwMDAwMEFDNjAwMDQ4OEM2NjAxMDAzMEM1MDdDMDkzCis6MTBGQTcwMDAxMEEwMDAwNTAwMDAwMDAwQUM2MDAwNENBQzYwMDA1MDFECis6MTBGQTgwMDAwM0UwMDAwODI0MDIwMDAxQUM2MDAwNTRBQzYwMDA0MEI4Cis6MTBGQTkwMDA4QzY4MDEwMDMxMDczODAwMTBFMEZGRjkwMDAwMDAwMDE5Cis6MTBGQUEwMDAyNDAyMDAwMTAzRTAwMDA4QUM2MDAwNDQzQzAzOTAwMDI1Cis6MTBGQUIwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMEY5Cis6MTBGQUMwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODk5Cis6MTBGQUQwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNTI4Cis6MTBGQUUwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRDhBRkIxMDAxNEVDCis6MTBGQUYwMDAzQzA0ODAwMEFGQkYwMDIwQUZCMzAwMUNBRkIyMDAxOEMxCis6MTBGQjAwMDBBRkIwMDAxMDhDOTIwMTQwOEM5MDAxNDgyNDAyMDAwRThFCis6MTBGQjEwMDAwMDEwOEMwMjMyMjMwMEZGMTA2MjAwNTkwMjA0MjgyNEQ2Cis6MTBGQjIwMDAyODY2MDAwRjEwQzAwMDEzMjg2QTAwMzcyNDA3MDAwNjVCCis6MTBGQjMwMDAxMDY3MDA4RTI4NjgwMDA3NTEwMDAwMkQyNDA0MDAwOTdBCis6MTBGQjQwMDAxMDYwMDA3ODNDMDY4MDAwMjQwOTAwMDExMDY5MDBCMEI0Cis6MTBGQjUwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMjA4RkIzMDAxQ0NDCis6MTBGQjYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEFFCis6MTBGQjcwMDAyN0JEMDAyODExNDAwMDU5MjQwRDAwMzgyODZCMDAzNTlFCis6MTBGQjgwMDAxMTYwMDAwNTNDMDU4MDAwMjQwQzAwMUYxNDZDRkZGMTdGCis6MTBGQjkwMDAwMDAwMDAwMDNDMDU4MDAwOENCODAxQjgwNzAwRkZGRUEzCis6MTBGQkEwMDAzNEI5MDE4MEFGMzIwMDAwMjQxRjAwMDEyNDEyMDAwMjhBCis6MTBGQkIwMDAzQzAyMTAwMEFGMjAwMDA0QTczMTAwMDhBMzNGMDAwQTU4Cis6MTBGQkMwMDBBMzMyMDAwQkE3MzAwMDEwQUYyMDAwMjRBRjIwMDAyODg0Cis6MTBGQkQwMDBBQ0EyMDFCODhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEY5Cis6MTBGQkUwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODdCCis6MTBGQkYwMDAxMDY0MDAyMzI0MDUwMDBCMTQ2NUZGRDYzMjE4RkZGRkE0Cis6MTBGQzAwMDAxNzAwMDAyMDNDMDU4MDAwOEY5M0ZFREM5MjdGMDAwNUVBCis6MTBGQzEwMDAzM0Y5MDAwNDE3MjBGRkNGMDAwMDAwMDAwRTAwMTRGQzkxCis6MTBGQzIwMDAwMjQwMjAyMTkyNjkwMDA1MDI0MDIwMjEzNTI4MDAwNDZECis6MTBGQzMwMDAwRTAwMTUwNkEyNjgwMDA1OTI2NzAwMDUzMEUyMDAwNDc4Cis6MTBGQzQwMDAxNDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5MjZCMDAwMDU0Cis6MTBGQzUwMDAyNDA2MDAyMDMxNkEwMEZGMTU0NjAwMEEzQzA1ODAwMDlBCis6MTBGQzYwMDA4Q0E0MDFCODA0ODBGRkZFMzRBRDAxODAyNDBFMDAwNTkxCis6MTBGQzcwMDAzQzBDMTAwMEFEQjIwMDAwQTFBRTAwMEJBQ0FDMDFCODYyCis6MTBGQzgwMDAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDA2Cis6MTBGQzkwMDAyNDEzMDAwMkFERjIwMDAwQURGMjAwMDRBNUYxMDAwODRCCis6MTBGQ0EwMDBBMUYzMDAwQUExRjMwMDBCQTVGMDAwMTBBREUwMDAyNEMxCis6MTBGQ0IwMDA4Q0IxMDE0NDNDMTAxMDAwQURGMTAwMjhBQ0IwMDFCODhCCis6MTBGQ0MwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEJCCis6MTBGQ0QwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxMDZERkZBREI1Cis6MTBGQ0UwMDAyNDBFMDA4MDE0NkVGRjlCMDAwMDAwMDAzQzA1ODAwMDg1Cis6MTBGQ0YwMDA4Q0EzMDFCODA0NjBGRkZFMzRBRjAxODAyNDEyMDAwMjFGCis6MTBGRDAwMDBBMUYyMDAwQkE1RjEwMDA4QTVGMDAwMTA4Q0IzMDE0NDhFCis6MTBGRDEwMDAzQzAyMTAwMEE1RjMwMDEyQUNBMjAxQjgwQTAwMTU0NzdFCis6MTBGRDIwMDA4RkJGMDAyMDhDQzMwMUI4MDQ2MEZGRkUzNEQzMDE4MDc0Cis6MTBGRDMwMDBBRTcyMDAwMEFFNjAwMDA0MjQxMjAwMDFBNjcxMDAwODNCCis6MTBGRDQwMDAyNDExMDAwMkEyNzIwMDBBQTI3MTAwMEJBNjcwMDAxMDFBCis6MTBGRDUwMDA4Q0QwMDE0NDNDMEYxMDAwQUU3MDAwMjRBRTYwMDAyODJGCis6MTBGRDYwMDBBQ0NGMDFCODBBMDAxNTgyOEZCRjAwMjAzQzAzODAwMDkxCis6MTBGRDcwMDA4QzY2MDFCODA0QzBGRkZFMzQ2MjAxODAzQzA2MDgwMUI1Cis6MTBGRDgwMDA5MEM2ODM0MEFDNTIwMDAwMTBDMDAwMDMwMDAwMzgyMTMwCis6MTBGRDkwMDAzQzA3MDgwMThDRTc4MzQ4M0MwNTgwMDAzNEFBMDE4MEI5Cis6MTBGREEwMDAyNDA0MDAwMjM0Q0MwMDAxQUM0NzAwMDRBNTUxMDAwODMzCis6MTBGREIwMDBBMTRDMDAwQUExNDQwMDBCQTU1MDAwMTA4Q0FCMDE0NERCCis6MTBGREMwMDAwMDAwMjAyMTAxNDAyODIxQUQ0QjAwMjQxMEMwMDAwMzc5Cis6MTBGREQwMDA4RkJGMDAyMDNDMDQwODAxOEM4NDgzNDQ4RkIzMDAxQzM3Cis6MTBGREUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzQzBFMTAwMEJECis6MTBGREYwMDAzQzBEODAwMDI3QkQwMDI4QUNBNDAwMjhBREFFMDFCOEEyCis6MTBGRTAwMDAzQzAxMDgwMUEwMjA4MzQwMDNFMDAwMDgwMDAwMDAwMDNFCis6MTBGRTEwMDAxMEEwMDAwQjNDMDY4MDAwOEM5ODAxNDQyNDE5MDAwMkJECis6MTBGRTIwMDAzQzAxMDgwMUEwMzk4MzQwM0MwMTA4MDFBQzMyODM0ODAxCis6MTBGRTMwMDAzQzAxMDgwMUFDMzg4MzQ0MEEwMDE1ODI4RkJGMDAyMEMyCis6MTBGRTQwMDA4Q0RGMDFCODA3RTBGRkZFMzRDNzAxODAyNDA5MDAwMkZGCis6MTBGRTUwMDBBQ0YyMDAwMEFDRjIwMDA0QTRGMTAwMDhBMEU5MDAwQTMyCis6MTBGRTYwMDBBMEU5MDAwQkE0RjAwMDEwQUNFMDAwMjQ4Q0M4MDE0NDExCis6MTBGRTcwMDAzQzAyMTAwMEFDRTgwMDI4QUNDMjAxQjgwQTAwMTU4MkIwCis6MTBGRTgwMDA4RkJGMDAyMDI3QkRGRkU4QUZCRjAwMTAwRTAwMEY0RTUwCis6MTBGRTkwMDAwMDAwMDAwMDNDMDI4MDAwOEZCRjAwMTAwMDAwMjAyMTA1Cis6MTBGRUEwMDBBQzQwMDE4MDBBMDAxMDEwMjdCRDAwMTgzMDg0RkZGRjBECis6MTBGRUIwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUVDCis6MTBGRUMwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjRFCis6MTBGRUQwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzYyCis6MTBGRUUwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDJGCis6MTBGRUYwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODZGCis6MTBGRjAwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDQyCis6MTBGRjEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjM4Cis6MTBGRjIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMENCCis6MTBGRjMwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRTAwMTRGQ0U3Cis6MTBGRjQwMDAwMDgwODAyMTNDMDQ4MDA4MzQ4MzAwODA5MDY1MDAyNTc3Cis6MTBGRjUwMDAwMjAwMjAyMTM0QTIwMDIwMEUwMDE1MDZBMDYyMDAyNTE4Cis6MTBGRjYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMEM5RUU5Cis6MTBGRjcwMDAyN0JEMDAxODNDMDM4MDAwMjdCREZGRjgzNDYyMDE4MEQ0Cis6MTBGRjgwMDBBRkEyMDAwMDMwOEMwMEZGMzBBRDAwRkYzMENFMDBGRjhDCis6MTBGRjkwMDAzQzBCODAwMDhENjQwMUI4MDQ4MEZGRkUwMDAwMDAwMDZGCis6MTBGRkEwMDA4RkE5MDAwMDhENjgwMTI4OEZBQTAwMDA4RkE3MDAwMDhDCis6MTBGRkIwMDA4RkE0MDAwMDI0MDUwMDAxMjQwMjAwMDJBMDg1MDAwQThECis6MTBGRkMwMDA4RkEzMDAwMDM1OTk0MDAwM0MwNTEwMDBBMDYyMDAwQjkzCis6MTBGRkQwMDA4RkI4MDAwMDhGQUMwMDAwOEZBNjAwMDA4RkFGMDAwMDJDCis6MTBGRkUwMDAyN0JEMDAwOEFEMjgwMDAwQUQ0MDAwMDRBRDgwMDAyNDBFCis6MTBGRkYwMDBBQ0MwMDAyOEE0RjkwMDA4QTcwRDAwMTBBNUVFMDAxMjVGCis6MDIwMDAwMDQwMDAxRjkKKzoxMDAwMDAwMDAzRTAwMDA4QUQ2NTAxQjgzQzA2ODAwODI3QkRGRkU4QTUKKzoxMDAwMTAwMDM0QzUwMDgwQUZCRjAwMTA5MEE3MDAwOTI0MDIwMDEyNzEKKzoxMDAwMjAwMDMwRTMwMEZGMTA2MjAwMEIwMDgwMzAyMThDQTgwMDUwRUMKKzoxMDAwMzAwMDAwODgyMDIzMDQ4MDAwMDg4RkJGMDAxMDhDQUEwMDM0QTEKKzoxMDAwNDAwMDI0MDQwMDM5MDAwMDI4MjEwMENBNDgyMzA1MjAwMDA1QTcKKzoxMDAwNTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4RjQKKzoxMDAwNjAwMDI3QkQwMDE4MEUwMDE2MkUwMDAwMDAwMDhGQkYwMDEwRTQKKzoxMDAwNzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4QzcKKzoxMDAwODAwMEFGQjEwMDJDMDBBMDg4MjFBRkIyMDAzMDI3QTUwMDEwMkUKKzoxMDAwOTAwMDAwODA5MDIxMDIyMDIwMjFBRkJGMDAzNEFGQjAwMDI4QTMKKzoxMDAwQTAwMDBFMDAwQ0E4QUZBMDAwMTAxNDQwMDA5QjNDMDc4MDA4NzUKKzoxMDAwQjAwMDM0RTQwMDgwOTA4NjAwMDgzMEM1MDAwODE0QTAwMDY5NzAKKzoxMDAwQzAwMDhGQTcwMDEwM0MxODgwMDgzNzEwMDA4MDkyMEYwMDA4OUUKKzoxMDAwRDAwMDMxRUUwMDA4MTVDMDAwMDIyNDA4MDAwMzAwMDA0MDIxOTIKKzoxMDAwRTAwMDNDMEI4MDA4OTE2NTAwMTE5MTZBMDAxMjM1NjYwMDgwMTIKKzoxMDAwRjAwMDhDREYwMDU0MzE0OTAwRkYwMTI4MjAyMTMwQTMwMEZGOEMKKzoxMDAxMDAwMDAwMDQxMDgwMDA2MjI4MjEwMEJGQzgyQjEzMjAwMDA4QzMKKzoxMDAxMTAwMDAwMDAwMDAwOTREMDAwNUM4Q0NGMDA1NDMyMERGRkZGMzMKKzoxMDAxMjAwMDAxRTU3MDIzMDFBRTYwMkIxMTgwMDA5NDAwMDAwMDAwRjcKKzoxMDAxMzAwMDk0RDkwMDVDMzMyM0ZGRkYzMEZGMDAwNDEzRTAwMDc0MDgKKzoxMDAxNDAwMDAwMDgzMDgwOEZBODAwMUMwMDY4MTAyQjUwNDAwMDRGMjIKKzoxMDAxNTAwMDMwRTMwMDA0MDA2NjEwMjMyQzQ2MDA4MDEwQzAwMDAyMkIKKzoxMDAxNjAwMDAwNDA4MDIxMjQxMDAwODAwRTAwMTRGQzAyNDAyMDIxNTkKKzoxMDAxNzAwMDNDMDM4MDA4MzQ2NjAwODAyNDA3MDAwMUFDQzcwMDBDRjMKKzoxMDAxODAwMDkwQzgwMDA4MDAxMDY4NDAzNDY3MDEwMDMxMUYwMDdGRUMKKzoxMDAxOTAwMEEwREYwMDA4OEUzOTAwMDQyNzM4MDAwMUFDRDgwMDMwRjkKKzoxMDAxQTAwMEE0RDAwMDVDOENDRjAwM0M5NjMwMDAwRTAxRjA3MDIxOTIKKzoxMDAxQjAwMEFDQ0UwMDIwOENDQzAwM0MwMThENTgyMUFDQ0IwMDFDNzcKKzoxMDAxQzAwMDhFMkEwMDA0QUNFQTAwMDA4RTI5MDAwOEFDRTkwMDA0ODUKKzoxMDAxRDAwMDhGQTUwMDEwMzBBNDAwMDg1NDgwMDAzMjkzQTYwMDIwQTAKKzoxMDAxRTAwMEEwQzAwMDRFOTBDOTAwNEUyNDAyRkZERjNDMTg4MDA4REEKKzoxMDAxRjAwMEEwRTkwMDA4OTBDNTAwMDgzNzBEMDA4MDI0MEEwMDUwQ0YKKzoxMDAyMDAwMDAwQTIyMDI0QTBDNDAwMDg4RTM5MDAwOEFEQjkwMDM4MkYKKzoxMDAyMTAwMDhGMEYwMDE0OERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0QUUKKzoxMDAyMjAwMDkxQUMwMDAwMzE4QjAwRkYxMTZBMDAyQzI2NDUwMTAwQzMKKzoxMDAyMzAwMDBFMDAxNTA2MDI0MDIwMjEyNDA0MDAzODAwMDAyODIxNjkKKzoxMDAyNDAwMDBFMDAxNjJFMjQwNjAwMEE4RkJGMDAzNDhGQjIwMDMwMzUKKzoxMDAyNTAwMDhGQjEwMDJDOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4QjkKKzoxMDAyNjAwMDI3QkQwMDM4MzBFODAxMDAxMTAwMDAzRDhGQTMwMDE0QzUKKzoxMDAyNzAwMDhDOEEwMDU4MDA2QTQ4MjMwNTIwRkY5MzNDMTg4MDA4QTgKKzoxMDAyODAwMEFDODMwMDU4MEEwMDE2ODI4RkE3MDAxMDI0MDcwMjE4QkEKKzoxMDAyOTAwMDEwNjBGRkIxMDBFNjEwMjM4RkEyMDAxQzBBMDAxNkE3MTEKKzoxMDAyQTAwMDAwNDYxMDIzM0MxODgwMDgzNzBEMDA4MEEwRTYwMDA4QTcKKzoxMDAyQjAwMDhFMzkwMDA4MjQwQTAwNTBBREI5MDAzODhGMEYwMDE0QTEKKzoxMDAyQzAwMDhEQjAwMDMwMDFGMDcwMjFBREFFMDAzNDkxQUMwMDAwNzMKKzoxMDAyRDAwMDMxOEIwMEZGMTU2QUZGRDYyNjQ1MDEwMDI0MDZGRjgwRkEKKzoxMDAyRTAwMDAwQTYxMDI0M0MwOTgwMDBBRDIyMDAyODhFMjcwMDA4QkIKKzoxMDAyRjAwMDMwQTMwMDdGM0MwNDgwMEMwMDY0RjgyMUFGRTcwMEQwRkQKKzoxMDAzMDAwMDhFMjgwMDA4QUY5RjAwMkMwQTAwMTZEREFGRTgwMEQ0NEQKKzoxMDAzMTAwMDBBMDAxNkE0MkM2MjAyMTg4RTIzMDAwODNDMDQ4MDA4RjAKKzoxMDAzMjAwMDM0ODIwMDgwQUM0MzAwNTQwMjQwMjAyMTBFMDAxNjFEOTAKKzoxMDAzMzAwMEFDNDAwMDMwMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjJFMzkKKzoxMDAzNDAwMDI0MDYwMDEyOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDMTIKKzoxMDAzNTAwMDhGQjAwMDI4MjQwMjAwMDEwM0UwMDAwODI3QkQwMDM4MDgKKzoxMDAzNjAwMEFDODAwMDU4OTA4QzAwMDgyNDBERkZGNzAxOEQ1ODI0QjQKKzoxMDAzNzAwMEEwOEIwMDA4MEEwMDE2ODI4RkE3MDAxMDhDRDgwMDU0QUEKKzoxMDAzODAwMDBBMDAxNjlGMDMwNTE4MjMyN0JERkZFOEFGQkYwMDEwMjIKKzoxMDAzOTAwMDkwQTYwMDBEMzBDNzAwMTAxMEUwMDAwQzAwODA0MDIxMzYKKzoxMDAzQTAwMDNDMDI4MDA4OEM0NDAwMDQ4Q0EzMDAwODEwNjQwMDA4MDAKKzoxMDAzQjAwMDMwQzkwMDA1MzBDNTAwMDUxMEEwMDAxQzhGQkYwMDEwMUIKKzoxMDAzQzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODMwQzkwMDA1MjEKKzoxMDAzRDAwMDExMjAwMDEwMzBDQjAwMTIxMEUwRkZGOThGQkYwMDEwODkKKzoxMDAzRTAwMDNDMDg4MDA4OENBNzAwMDg4RDA2MDAwNDE0RTZGRkY1ODEKKzoxMDAzRjAwMDI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjJFNkUKKzoxMDA0MDAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4NDAKKzoxMDA0MTAwMDI3QkQwMDE4MjQwQTAwMTIxNTZBRkZFOThGQkYwMDEwREIKKzoxMDA0MjAwMDAxMDAyMDIxMEEwMDE2NzAyN0JEMDAxODAwMDAyMDIxQkQKKzoxMDA0MzAwMDBBMDAwRDFBMjdCRDAwMTgzQzA1MDgwMDI0QTU1REMwNjAKKzoxMDA0NDAwMDNDMDQwODAwMjQ4NDdCODAzQzAyMDgwMDI0NDI1REM4RjAKKzoxMDA0NTAwMDI0MDMwMDA2M0MwMTA4MDFBQzI1ODM1MDNDMDEwODAxM0YKKzoxMDA0NjAwMEFDMjQ4MzU0M0MwMTA4MDFBQzIyODM1ODNDMDEwODAxQjAKKzoxMDA0NzAwMEEwMjM4MzVDMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4MDQKKzoxMDA0ODAwMDI0MDIwMDAxM0MwMjgwMDAzMDg4MDBGRjM0NDcwMTgwRDQKKzoxMDA0OTAwMDNDMDY4MDAwOENDMzAxQjgwNDYwRkZGRTAwMDAwMDAwMzEKKzoxMDA0QTAwMDhDQzUwMTI4MjQxOEZGODAzQzBEODAwQTI0QUYwMTAwNzAKKzoxMDA0QjAwMDAxRjg3MDI0MzFFQzAwN0ZBQ0NFMDAyNDAxOEQyMDIxQTYKKzoxMDA0QzAwMEFDRTUwMDAwOTQ4QjAwREEzNTA5NjAwMDI0MDgwMDAyRDYKKzoxMDA0RDAwMDMxNkFGRkZGQUNFQTAwMDQyNDAyMDAwMUE0RTkwMDA4MkQKKzoxMDA0RTAwMEEwRTgwMDBCQUNFMDAwMjQzQzA3MTAwMEFDQzcwMUI4NEEKKzoxMDA0RjAwMEFGODQwMDJDMDNFMDAwMDhBRjg1MDA1QzhDOTkwMDA0RjkKKzoxMDA1MDAwMDhGOEQwMDJDMjQwOUZGQkYwMzI1QzAyM0FDOTgwMDA0NjUKKzoxMDA1MTAwMDkxQUYwMEM0MjQwM0ZGRUYzMUVFMDA3RkExQUUwMEM0MTEKKzoxMDA1MjAwMDhDOEMwMDIwOTM4QjAwMzg4Rjg2MDAyQzM1OEEwMDAyM0IKKzoxMDA1MzAwMEFGOEIwMDUwQTc4MDAwNENBQzhBMDAyMEE0QzAwMEFDNTgKKzoxMDA1NDAwMDkwQzgwMEM0MDEwOTM4MjRBMEM3MDBDNDhGODQwMDJDQkYKKzoxMDA1NTAwMEFDODAwMERDOTA4NTAwQzQwMEEzMTAyNDAzRTAwMDA4RjgKKzoxMDA1NjAwMEEwODIwMEM0M0MwMjgwMDAzNDQ1MDE4MDNDMDQ4MDAwMkQKKzoxMDA1NzAwMDhDODMwMUI4MDQ2MEZGRkU4Rjg5MDA1QzI0MDc2MDgzRDAKKzoxMDA1ODAwMDI0MDYwMDAyQUNBOTAwMDA4Qzg4MDEyNEFDQTgwMDA0NTkKKzoxMDA1OTAwMEE0QTcwMDA4QTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4N0IKKzoxMDA1QTAwMEFDODUwMUI4OTM4ODAwMzg4Rjg5MDA1MDhGODIwMDJDNjkKKzoxMDA1QjAwMDMwQzYwMEZGMDEwOTM4MjMzMEU5MDBGRjAxMjIxODIxNkQKKzoxMDA1QzAwMDMwQTUwMEZGMjQ2ODAwNzgxMEMwMDAwMjAxMjQzODIxMDMKKzoxMDA1RDAwMDAwODAzODIxMzBFNDAwMDMxNDgwMDAwMzMwQUEwMDAzQjcKKzoxMDA1RTAwMDExNDAwMDBEMzEyQjAwMDMxMEEwMDAwOTAwMDAxMDIxNjQKKzoxMDA1RjAwMDkwRUQwMDAwMjQ0RTAwMDEzMUMyMDBGRjAwNDU2MDJCNDkKKzoxMDA2MDAwMEExMEQwMDAwMjRFNzAwMDExNTgwRkZGOTI1MDgwMDAxNzUKKzoxMDA2MTAwMDAzRTAwMDA4MDAwMDAwMDAxNTYwRkZGMzAwMDAwMDAwODgKKzoxMDA2MjAwMDEwQTBGRkZCMDAwMDEwMjE4Q0Y4MDAwMDI0NTkwMDA0RUEKKzoxMDA2MzAwMDMzMjIwMEZGMDA0NTc4MkJBRDE4MDAwMDI0RTcwMDA0QUEKKzoxMDA2NDAwMDE1RTBGRkY5MjUwODAwMDQwM0UwMDAwODAwMDAwMDAwQTEKKzoxMDA2NTAwMDkzODUwMDM4OTM4ODAwNDg4Rjg3MDA1MDAwMDQzMjAwNEIKKzoxMDA2NjAwMDMxMDMwMDdGMDBFNTEwMkIzMEM0N0YwMDEwNDAwMDBGRTUKKzoxMDA2NzAwMDAwNjQyODI1OEY4NDAwMkMzQzA5ODAwMDhDOEEwMERDRDMKKzoxMDA2ODAwMEFEMkEwMEE0M0MwMzgwMDAwMEEzNTgyNUFDNkIwMEEwNTkKKzoxMDA2OTAwMDhDNkMwMEEwMDU4MEZGRkUwMDAwMDAwMDhDNkQwMEFDOUIKKzoxMDA2QTAwMEFDOEQwMERDMDNFMDAwMDg4QzYyMDBBODBBMDAxN0YyQTEKKzoxMDA2QjAwMDhGODQwMDJDOTM4ODAwNDkzQzAyODAwMDAwODA1MDIxRTgKKzoxMDA2QzAwMDMxMDMwMEZFQTM4MzAwNDkzMEFCRkZGRjMwQ0MwMEZGQjUKKzoxMDA2RDAwMDMwRTdGRkZGMzQ0ODAxODAzQzA5ODAwMDhEMjQwMUI4RDkKKzoxMDA2RTAwMDA0ODBGRkZFOEY4RDAwNUMyNDE4MDAxNkFEMEQwMDAwMDUKKzoxMDA2RjAwMDhEMjIwMTI0OEY4RDAwMkNBRDAyMDAwNDhENTkwMDIwMjUKKzoxMDA3MDAwMEE1MDcwMDA4MjQwMjAxQjRBMTE5MDAwQUExMTgwMDBCRDIKKzoxMDA3MTAwMDk1MkYwMTIwOEQ0RTAwMDg4RDQ3MDAwNDk3ODMwMDRDRDMKKzoxMDA3MjAwMDhENTkwMDI0MDFDRjMwMjEwMEM3MjgyMTAwQTMyMDIzQTgKKzoxMDA3MzAwMDI0MThGRkZGQTUwNDAwMENBNTBCMDAwRUE1MDIwMDEwNTUKKzoxMDA3NDAwMEE1MEMwMDEyQUQxOTAwMThBRDE4MDAyNDk1QUYwMEQ4MDMKKzoxMDA3NTAwMDNDMEIxMDAwMjQwN0ZGRjczMUVFRkZGRkFEMEUwMDI4MjEKKzoxMDA3NjAwMDhEQUMwMDc0QUQwQzAwMkNBRDJCMDFCODhENDYwMDIwNzMKKzoxMDA3NzAwMDAwQzcyODI0MDNFMDAwMDhBRDQ1MDAyMDhGODgwMDJDMjYKKzoxMDA3ODAwMDAwODA1ODIxMzBFN0ZGRkY5MTA5MDBDNjNDMDI4MDAwM0QKKzoxMDA3OTAwMDMwQTVGRkZGMzEyNDAwRkYwMDA0MUEwMDAwNjc1MDI1MzgKKzoxMDA3QTAwMDMwQzYwMEZGMzQ0NzAxODAzQzA5ODAwMDhEMkMwMUI4MjEKKzoxMDA3QjAwMDA1ODBGRkZFOEY4MjAwNUMyNDBGMDAxN0FDRTIwMDAwNzIKKzoxMDA3QzAwMDhEMzkwMTI0QUNGOTAwMDQ4RDc4MDAyMEE0RUEwMDA4REEKKzoxMDA3RDAwMDI0MTkwMUI0QTBGODAwMEFBMEVGMDAwQjk1MjMwMTIwMTIKKzoxMDA3RTAwMDhENkUwMDA4OEQ2RDAwMDQ5Nzg0MDA0QzAxQzM1MDIxNkMKKzoxMDA3RjAwMDAxNEQ2MDIxMDE4NDEwMjNBNEUyMDAwQ0E0RTUwMDBFNDkKKzoxMDA4MDAwMEE0RjkwMDEwQTRFNjAwMTJBQ0UwMDAxNDhENzgwMDI0RDYKKzoxMDA4MTAwMDI0MERGRkZGQUNGODAwMTg4RDBGMDA2Q0FDRUYwMDFDMkUKKzoxMDA4MjAwMDhEMEUwMDY4M0MwRjEwMDBBQ0VFMDAyMEFDRUQwMDI0RjMKKzoxMDA4MzAwMDk1MEEwMEFFMjQwREZGRjczMTQ2RkZGRkFDRTYwMDI4MTUKKzoxMDA4NDAwMDk1MEMwMDcwOTUwNDAwNzIzMTgzN0ZGRjAwMDNDQTAwOEQKKzoxMDA4NTAwMDMwODJGRkZGMDMyMkMwMjFBQ0Y4MDAyQ0FEMkYwMUI4N0QKKzoxMDA4NjAwMDk1MEUwMDcyOEQ2QTAwMjAwMEFFMzAyMTAxNEQyODI0QzMKKzoxMDA4NzAwMEE1MDYwMDcyMDNFMDAwMDhBRDY1MDAyMDNDMDI4MDAwODAKKzoxMDA4ODAwMDM0NDYwMTgwM0MwNTgwMDA4Q0EzMDFCODA0NjBGRkZFNjMKKzoxMDA4OTAwMDI0MDkwMDE4QUNDNDAwMDBBMEM5MDAwQjhGODgwMDJDRUMKKzoxMDA4QTAwMDNDMDQxMDAwOTUwNzAwQUVBNEM3MDAxMEFDQzAwMDMwOTcKKzoxMDA4QjAwMDAzRTAwMDA4QUNBNDAxQjgzQzAyODAwMDM0NDUwMTgwOEMKKzoxMDA4QzAwMDNDMDQ4MDAwOEM4MzAxQjgwNDYwRkZGRThGOEEwMDM0RjIKKzoxMDA4RDAwMDI0MDYwMDE5OTU0OTAwMUMzMTI4RkZGRjAwMDgzOUMwODMKKzoxMDA4RTAwMEFDQTcwMDAwQTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4MjgKKzoxMDA4RjAwMEFDODUwMUI4OEY4NzAwM0MwMDgwNDAyMTMwQzQwMEZGRTgKKzoxMDA5MDAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRThGODkwMDVDNjkKKzoxMDA5MTAwMDkzODMwMDU4MzQ5OTYwMDBBQ0E5MDAwMEEwQTMwMDA1OUYKKzoxMDA5MjAwMDhDRTIwMDEwMjQwRjAwMDIyNDAzRkZGN0E0QTIwMDA2QUIKKzoxMDA5MzAwMEE0QjkwMDA4OEQxODAwMjBBMEI4MDAwQUEwQUYwMDBCRDEKKzoxMDA5NDAwMDhDRUUwMDAwQUNBRTAwMTA4Q0VEMDAwNEFDQUQwMDE0RDkKKzoxMDA5NTAwMDhDRUMwMDFDQUNBQzAwMjQ4Q0VCMDAyMEFDQUIwMDI4NzEKKzoxMDA5NjAwMDhDRUEwMDJDM0MwNzEwMDBBQ0FBMDAyQzhEMDkwMDI0NTYKKzoxMDA5NzAwMEFDQTkwMDE4QUNDNzAxQjg4RDA1MDAyMDAwQTMyMDI0NDUKKzoxMDA5ODAwMDAzRTAwMDA4QUQwNDAwMjA5Mzg1MDA1ODI0MDMwMDAxMTMKKzoxMDA5OTAwMDI3QkRGRkU4MDBBMzMwMDQyQ0EyMDAyMEFGQjAwMDEwNTgKKzoxMDA5QTAwMEFGQkYwMDE0MDBDMDE4MjExMDQwMDAxMzI0MTBGRkZFMzgKKzoxMDA5QjAwMDNDMDcwODAwOENFNzMxOTAwMEU2MTAyNDNDMDg4MDAwREEKKzoxMDA5QzAwMDM1MDUwMTgwMTQ0MDAwMDUyNDA2MDA4NDhGODkwMDJDMjEKKzoxMDA5RDAwMDI0MEEwMDA0MjQxMEZGRkZBMTJBMDBFQzBFMDAxODhFNDgKKzoxMDA5RTAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMjMKKzoxMDA5RjAwMDAzRTAwMDA4MjdCRDAwMTgzQzA2MDgwMDhDQzYzMTk0QUYKKzoxMDBBMDAwMDBBMDAxOEMwMDBDMzEwMjQ4Rjg3MDAzNDI3QkRGRkUwMDAKKzoxMDBBMTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDRjAKKzoxMDBBMjAwMDMwRDAwMEZGOTBFNjAwMEQwMEEwODgyMTAwODA5MDIxQ0EKKzoxMDBBMzAwMDMwQzUwMDdGQTBFNTAwMEQ4Rjg1MDAyQzhFMjMwMDE4QTcKKzoxMDBBNDAwMDhDQTIwMEMwMTA2MjAwMkUyNDBBMDAwRTBFMDAxOEIzMDMKKzoxMDBBNTAwMEEzOEEwMDU4MjQwOUZGRkYxMDQ5MDAyMjI0MDRGRkZGNDUKKzoxMDBBNjAwMDUyMDAwMDIwMDAwMDIwMjE4RTI2MDAwMDNDMEMwMDEwQzcKKzoxMDBBNzAwMDAwQ0M1ODI0MTU2MDAwMzkzQzBFMDAwODAwQ0U2ODI0RDQKKzoxMDBBODAwMDU1QTAwMDNGMDI0MDIwMjEzQzE4MDAwMjAwRDg4MDI0REQKKzoxMDBBOTAwMDEyMDAwMDFGM0MwQTAwMDQ4Rjg3MDAzNDhDRTIwMDE0MEYKKzoxMDBBQTAwMDhDRTMwMDEwOENFNTAwMTQwMDQzRjgyMzAzRTVDODJCMDkKKzoxMDBBQjAwMDEzMjAwMDA1MDI0MDIwMjE4RTI0MDAyQzhDRjEwMDEwMTAKKzoxMDBBQzAwMDEwOTEwMDMxMDI0MDIwMjEyNDAyMDAxMkEzODIwMDU4MUMKKzoxMDBBRDAwMDBFMDAxOEIzMjQxMkZGRkYxMDUyMDAwMjI0MDRGRkZGN0YKKzoxMDBBRTAwMDAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QUUKKzoxMDBBRjAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwMDcKKzoxMDBCMDAwMDkwQTgwMEM0MzUwNDAwMjAwQTAwMThFOUEwQTQwMEM0N0QKKzoxMDBCMTAwMDAwQ0E0ODI0MTUyMDAwMEI4RjhCMDAzNDhGOEQwMDM0QzEKKzoxMDBCMjAwMDhEQUMwMDEwMTU4MDAwMEIwMjQwMjAyMThFMkUwMDJDNzEKKzoxMDBCMzAwMDUxQzBGRkVDMDAwMDIwMjEwMjQwMjAyMTBBMDAxOTA0Q0UKKzoxMDBCNDAwMDI0MDIwMDE3OEQ2NjAwMTA1MEMwRkZFNjAwMDAyMDIxMkYKKzoxMDBCNTAwMDAyNDAyMDIxMEEwMDE5MDQyNDAyMDAxMTAyNDAyMDIxMzEKKzoxMDBCNjAwMDI0MDIwMDE1MEUwMDE4QjNBMzgyMDA1ODI0MEZGRkZGQzMKKzoxMDBCNzAwMDEwNEZGRkRDMjQwNEZGRkYwQTAwMThGMzhFMjYwMDAwNEMKKzoxMDBCODAwMDBBMDAxOTJBMjQwMjAwMTQzQzA4MDAwNDAwQzgzODI0NzIKKzoxMDBCOTAwMDUwRTBGRkQ0MDAwMDIwMjEwMjQwMjAyMTBBMDAxOTA0NjcKKzoxMDBCQTAwMDI0MDIwMDEzOEY4NjAwMkMyN0JERkZFMEFGQjEwMDE0OTQKKzoxMDBCQjAwMEFGQkYwMDE4QUZCMDAwMTA5MEMzMDBDNDMwQTUwMEZGNTUKKzoxMDBCQzAwMDMwNjIwMDIwMTA0MDAwMDgwMDgwODgyMThDQ0IwMEMwREIKKzoxMDBCRDAwMDI0MDlGRkRGMjU2QTAwMDFBQ0NBMDBDMDkwQzgwMEM0MjgKKzoxMDBCRTAwMDAxMDkzODI0QTBDNzAwQzQxNEEwMDA0MDNDMEM4MDAwQjgKKzoxMDBCRjAwMDhGODQwMDJDOTA4NzAwQzQyNDE4RkZCRjI0MDZGRkVGQzkKKzoxMDBDMDAwMDMwRTMwMDdGQTA4MzAwQzQ5NzlGMDA0QzhGODIwMDUwODgKKzoxMDBDMTAwMDhGOEQwMDJDMDNFMkM4MjNBNzk5MDA0Q0E1QTAwMEFDM0YKKzoxMDBDMjAwMDkxQUYwMEM0MDFGODcwMjRBMUFFMDBDNDhGOEMwMDJDRDkKKzoxMDBDMzAwMEExODAwMEM3OEY4QTAwMkNBNTQwMDA3MkFENDAwMERDNjcKKzoxMDBDNDAwMDkxNDUwMEM0MDBBNjU4MjRBMTRCMDBDNDhGOTAwMDI4RjEKKzoxMDBDNTAwMDhGODQwMDUwOTc4NjAwNEMwMjA0MjgyMTEwQzAwMDBGOUEKKzoxMDBDNjAwMEFGODUwMDI4QTM4MDAwNDgzQzA3ODAwMDhFMkMwMDA4MzgKKzoxMDBDNzAwMDk0RUQwMTIwOEUyQjAwMDQwMThENTAyMTAxNEI4MDIxMjkKKzoxMDBDODAwMDAyMDYyMDIzMzA4NkZGRkYzMEM4MDAwRjM5MDkwMDAxMUIKKzoxMDBDOTAwMDMxMzEwMDAxMTYyMDAwMDlBMzg4MDA0ODkzODYwMDM4RUUKKzoxMDBDQTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwMzcKKzoxMDBDQjAwMEFGODUwMDU0MDNFMDAwMDhBRjg2MDA1MDAwQzg3MDIzRTEKKzoxMDBDQzAwMDhGQkYwMDE4OTM4NjAwMzg4RkIxMDAxNDhGQjAwMDEwQ0EKKzoxMDBDRDAwMDM0RUYwQzAwMDEwRjI4MjEyN0JEMDAyMEFDRUUwMDg0NkEKKzoxMDBDRTAwMEFGODUwMDU0MDNFMDAwMDhBRjg2MDA1MDM1OTAwMTgwQzYKKzoxMDBDRjAwMDAyMDAyODIxMEUwMDE4OEUyNDA2MDA4MjhGODQwMDJDMEEKKzoxMDBEMDAwMDkwODYwMEM0MzBDNTAwNDA1MEEwRkZCQUEzODAwMDU4QjAKKzoxMDBEMTAwMDhGODUwMDNDM0MwNjgwMDA4Q0NEMDFCODA1QTBGRkZFMEQKKzoxMDBEMjAwMDhGODkwMDVDMjQwODYwODIyNDA3MDAwMkFFMDkwMDAwNUQKKzoxMDBEMzAwMEE2MDgwMDA4QTIwNzAwMEI4Q0EzMDAwODNDMEUxMDAwQjgKKzoxMDBENDAwMEFFMDMwMDEwOENBMjAwMENBRTAyMDAxNDhDQkYwMDE0ODUKKzoxMDBENTAwMEFFMUYwMDE4OENCOTAwMThBRTE5MDAyNDhDQjgwMDI0RkUKKzoxMDBENjAwMEFFMTgwMDI4OENBRjAwMjhBRTBGMDAyQ0FDQ0UwMUI4MTYKKzoxMDBENzAwMDBBMDAxOTRFQTM4MDAwNTg4RjhBMDAyQzI3QkRGRkUwN0YKKzoxMDBEODAwMEFGQjEwMDE0QUZCMDAwMTA4Rjg4MDA1MEFGQkYwMDE4OTMKKzoxMDBEOTAwMDkzODkwMDMwOTU0MjAwQUMzMEQxMDBGRjAxMDkxODJCMzcKKzoxMDBEQTAwMDAwODA4MDIxMzBBQzAwRkYzMDQ3RkZGRjAwMDA1ODIxNTkKKzoxMDBEQjAwMDE0NjAwMDAzMzEwNjAwRkYwMTIwMzAyMTAxMDk1ODIzOEYKKzoxMDBEQzAwMDk3ODMwMDRDMDA2ODIwMkIxNDgwMDAxQjAwMDAwMDAwNUIKKzoxMDBERDAwMDEwNjgwMDQzMjQwQTAwMDExMThBMDA0ODM0RTcwODgwQTMKKzoxMDBERTAwMDMxNjVGRkZGMEUwMDE4MzAwMjAwMjAyMTBFMDAxODcwNDAKKzoxMDBERjAwMDhGODQwMDVDOEY4NDAwMkM5NDhEMDA3MDI1QUMwMDAxRTIKKzoxMDBFMDAwMEE0OEMwMDcwOTQ4QjAwNzAzQzA2MDgwMDhDQzYzMTg4NUUKKzoxMDBFMTAwMDMxNjc3RkZGMTBFNjAwNEYwMDAwMDAwMDAyMDAyMDIxMzQKKzoxMDBFMjAwMDAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwNEUKKzoxMDBFMzAwMDBBMDAxOTNBMjdCRDAwMjA5MTQ0MDBDNDI0MDZGRjgwMEYKKzoxMDBFNDAwMDAwODY4ODI1QTE1MTAwQzQ5Nzg0MDA0QzMwODhGRkZGOUMKKzoxMDBFNTAwMDExMDAwMDFDOTM4OTAwMzA4RjhFMDAyQzI0MTlFRkZGQTUKKzoxMDBFNjAwMDAwOEJGODIzOTVEODAwQUMwMTY4NjgyQjMzRTkwMEZGQUMKKzoxMDBFNzAwMDAzMTk3ODI0QTVDRjAwQUM1MUEwMDAyQTAxMDA1ODIxMDUKKzoxMDBFODAwMDhFMDUwMDIwMjQwOEZGRkIyNDAzMDAwMTAwQTgxMDI0ODUKKzoxMDBFOTAwMEFFMDIwMDIwMTE4MzAwMjUzNEU3ODAwMDAyMDAyMDIxRUIKKzoxMDBFQTAwMDMxNjVGRkZGMEUwMDE4MzAwMTIwMzAyMTk3OEIwMDRDNzgKKzoxMDBFQjAwMDhGODcwMDUwQTc4MDAwNEMwMEVCODAyM0FGOTAwMDUwM0MKKzoxMDBFQzAwMDkzODkwMDMwOEY4QzAwMkM4RkJGMDAxODhGQjEwMDE0RDUKKzoxMDBFRDAwMDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwOEExODkwMEM3RTMKKzoxMDBFRTAwMDhFMDgwMDIwMjQwOUZGRkIzNEU3ODAwMDAxMDkyODI0MzQKKzoxMDBFRjAwMEFFMDUwMDIwMTU4QUZGQkEzNEU3MDg4MDAyMDAyMDIxRTEKKzoxMDBGMDAwMDBFMDAxN0ZFMzE2NUZGRkYwMjAwMjAyMTAyMjAyODIxN0MKKzoxMDBGMTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOTNBNkIKKzoxMDBGMjAwMDI3QkQwMDIwMEEwMDE5RjEwMDAwNDgyMTAyMDAyMDIxRkQKKzoxMDBGMzAwMDMxNjVGRkZGMEUwMDE3RkUwMTIwMzAyMTk3OEIwMDRDMUEKKzoxMDBGNDAwMDhGODcwMDUwQTc4MDAwNEMwMEVCODAyMzBBMDAxQTAxMTUKKzoxMDBGNTAwMEFGOTAwMDUwOTQ4OTAwNzAyNDBBODAwMDAxMkE0MDI0MzgKKzoxMDBGNjAwMEE0ODgwMDcwOTA4NTAwNzA5MDk5MDA3MDMwQTIwMEZGRjYKKzoxMDBGNzAwMDAwMDIxOUMyMDAwM0Y4MjcwMDFGQzFDMDMzMkYwMDdGRjEKKzoxMDBGODAwMDAxRjg3MDI1QTA4RTAwNzAwQTAwMTlEOTAyMDAyMDIxRjYKKzoxMDBGOTAwMDhGODgwMDJDMjQwMzAwMDE5MTBBMDA3ODkxMDUwMEM3NzYKKzoxMDBGQTAwMDI1MDkwMDc4MzE0NzAwM0YyNEU2RkZFMDAwQzMxODA0MUMKKzoxMDBGQjAwMDJDQzIwMDIwMzA2NzAwMTlBMzg1MDAzMDEwNDAwMDFBQjEKKzoxMDBGQzAwMEFGODkwMDNDM0MwQTgwMDAzNTRCMDAwMjI0MDUwMDAxM0IKKzoxMDBGRDAwMDI0MDYwMDAxMTRFMDAwMTYwMDZCMTAyNDAwMDAyODIxRjQKKzoxMDBGRTAwMDE0NDAwMDBGMzA2MzAwMjAxMDYwMDAwRjI0MDUwMDAxNDIKKzoxMDBGRjAwMDhEMDYwMDc0OEQxOTAwNzQyNDAzRkY4MDAwQzMxMDI0MzMKKzoxMDEwMDAwMDAwMDI3OTQwMzMzODAwN0YwMUY4NjgyNTNDMEUxMDAwNUIKKzoxMDEwMTAwMDAxQUU2MDI1QUQ0QzA4MzA5MTI4MDAwMTMxMDYwMDAxNzkKKzoxMDEwMjAwMDBBMDAxOUFGMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMDMKKzoxMDEwMzAwMDhEMEYwMDc0OEQwRDAwNzQyNDE4RkY4MDAxRjg3MDI0NEEKKzoxMDEwNDAwMDAwMEU0MTQwMzFBQzAwN0YwMTBDNTAyNTNDMEIxMDAwREMKKzoxMDEwNTAwMDAxNEIzODI1M0MwOTgwMDAwQTAwMTlBRkFEMjcwODMwNDQKKzoxMDEwNjAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzQ0FGQjQwMDIwNzgKKzoxMDEwNzAwMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQ0FGQjIwMDE4NzMKKzoxMDEwODAwMDhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDhGODYwMDQwNzMKKzoxMDEwOTAwMDMwQTczRkZGMDBFMjE4MkI4Q0QyMDAxNDAwODA4ODIxN0IKKzoxMDEwQTAwMDhDRDMwMDIwMTA2MDAwMDcwMDAwQTAyMTkwQ0IwMDBEMjEKKzoxMDEwQjAwMDI0MEFGRjgwMDE0QjQ4MjQzMTI4MDBGRjE1MDAwMDBDNTIKKzoxMDEwQzAwMDAwMDU2MzgyMDIyMDIwMjEyNDExMDAwREEzOTEwMDU4MDUKKzoxMDEwRDAwMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4ODQKKzoxMDEwRTAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMThCMzI3QkQwMDI4N0MKKzoxMDEwRjAwMDMxODUwMDAzNTRBMEZGRjQwMjIwMjAyMTk0Q0YwMDFDNkUKKzoxMDExMDAwMDhGOEUwMDJDOEUwNzAwMjhBNUNGMDBEODhDQ0QwMDEwMjQKKzoxMDExMTAwMDAyNEQzMDIzMTBFNjAwNUMyNDAyMDAxRjBFMDAxOEIzQkQKKzoxMDExMjAwMEEzODIwMDU4MjQxRkZGRkYxMDVGMDA0RTI0MDRGRkZGMUUKKzoxMDExMzAwMDhGODMwMDQ0OEY4ODAwMzQwMjYzOTgyMThEMDkwMDEwNEEKKzoxMDExNDAwMDAxMjMxMDIzOEY4MzAwMjRBRDAyMDAxMEFEMTMwMDIwNzMKKzoxMDExNTAwMDhDNjcwMDc0MDBGMzIwMkIxNDgwMDA2MjAyMjAyMDIxOTEKKzoxMDExNjAwMDhGODYwMDQwOEUwQzAwMjQ4Q0M1MDAyNDExODUwMDA3NUEKKzoxMDExNzAwMDAyMjAyMDIxMjQwRTAwMUMwRTAwMThCM0EzOEUwMDU4NUMKKzoxMDExODAwMDI0MERGRkZGMTA0RDAwMzcyNDA0RkZGRjhGODQwMDM0MkYKKzoxMDExOTAwMDhDOTgwMDI0MjcwRjAwMDFBQzhGMDAyNDEyNzIwMDQ0QTkKKzoxMDExQTAwMDhGOTkwMDI0OEYzMjAwNzQxMjUzMDA0MTNDMEEwMDgwNTIKKzoxMDExQjAwMDhFMDkwMDAwMDEyQTEwMjQxNDQwMDAzQTAwMDAwMDAwQUIKKzoxMDExQzAwMDhFMDQwMDE0MjQxMkZGRkYxMDkyMDAwNjI0MEIwMDFCNTMKKzoxMDExRDAwMDAyMjAyMDIxMEUwMDE4QjNBMzhCMDA1ODEwNTIwMDIxQ0EKKzoxMDExRTAwMDI0MDRGRkZGOEUwMzAwMDAzQzBDMDAwMTAwNkMyODI0NDcKKzoxMDExRjAwMDEwQTAwMDEzM0MwNjAwODAwMDY2QTAyNDE2ODAwMDA5QTEKKzoxMDEyMDAwMDAyMDAyODIxMDIyMDIwMjEyNDBFMDAxQTBFMDAxOEIzMEIKKzoxMDEyMTAwMEEzOEUwMDU4MjQwREZGRkYxMDREMDAxMjI0MDRGRkZGODEKKzoxMDEyMjAwMDAyMDAyODIxMDIyMDIwMjEwRTAwMThEMzI0MDYwMDAxRUMKKzoxMDEyMzAwMDI0MTBGRkZGMjQwNEZGRkYxMDUwMDAwQTI0MTQwMDAxQjMKKzoxMDEyNDAwMDhGOEYwMDM0MDIyMDIwMjEwMjgwMzAyMTk1RjIwMDM0NUIKKzoxMDEyNTAwMDI0MDUwMDAxMjY1ODAwMDEwRTAwMTlBRkE1RjgwMDM0M0UKKzoxMDEyNjAwMDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDMEEKKzoxMDEyNzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxQzEKKzoxMDEyODAwMDAzRTAwMDA4MjdCRDAwMjg4RjgzMDA0NDAwRTNDODIxNDUKKzoxMDEyOTAwMDAyNTlDMDJCMTMwMEZGQTg4Rjg4MDAzNDBBMDAxQTk4NDcKKzoxMDEyQTAwMDI0MDIwMDE4QUM4MDAwMjAwQTAwMUFDMjhFMDQwMDE0MjgKKzoxMDEyQjAwMDhFMUYwMDAwM0MwNzAwODAwM0U3OTgyNDE2NjBGRkY5QUEKKzoxMDEyQzAwMDI0MDgwMDFBMDIyMDIwMjEwRTAwMThCM0EzODgwMDU4MTkKKzoxMDEyRDAwMDI0MDNGRkZGMTQ0M0ZGQkEyNDA0RkZGRjBBMDAxQUVCQTQKKzoxMDEyRTAwMDhGQkYwMDI0MjQwQjAwMUQwRTAwMThCM0EzOEIwMDU4RTEKKzoxMDEyRjAwMDI0MEFGRkZGMTQ0QUZGOUEyNDA0RkZGRjBBMDAxQUVCOTYKKzoxMDEzMDAwMDhGQkYwMDI0OEY4NTAwMkMyN0JERkZEOEFGQjMwMDFDRjIKKzoxMDEzMTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwRTMKKzoxMDEzMjAwMDkwQTcwMEM0OEY5MDAwM0MyNDEyRkZGRjM0RTIwMDQwREQKKzoxMDEzMzAwMDkyMDYwMDAwQTBBMjAwQzQ4RTAzMDAxMDAwODA5ODIxMzUKKzoxMDEzNDAwMDEwNzIwMDA2MzBEMTAwM0YyNDA4MDAwRDBFMDAxOEIzQzMKKzoxMDEzNTAwMEEzODgwMDU4MTA1MjAwMjYyNDA2RkZGRjhGOEEwMDJDMTUKKzoxMDEzNjAwMDhFMDkwMDE4OEQ0NDAwQzAxMTI0MDAwNzI0MEMwMDBFQzMKKzoxMDEzNzAwMDAyNjAyMDIxMEUwMDE4QjNBMzhDMDA1ODI0MEJGRkZGM0QKKzoxMDEzODAwMDEwNEIwMDFCMjQwNkZGRkYyNDA0MDAyMDEyMjQwMDA0M0QKKzoxMDEzOTAwMDhGOEQwMDJDOTFBRjAwQzQzNUVFMDAyMEExQUUwMEM0QUIKKzoxMDEzQTAwMDhGODUwMDQ0MTBBMDAwMUEwMDAwMDAwMDEyMjQwMDRCOUEKKzoxMDEzQjAwMDhGOTgwMDJDOEY5MkZFREMyNDA2RkZGRDk3MTAwMDcwQTIKKzoxMDEzQzAwMDk2NTEwMDBBMTIzMDAwMEI4RkJGMDAyMDNDMUYwODAwMEUKKzoxMDEzRDAwMDhGRkYzMThDMDNFNUM4MkIxNzIwMDAxRTAyNjAyMDIxRUYKKzoxMDEzRTAwMDAwMDAyODIxMEUwMDE5QUYyNDA2MDAwMTAwMDAzMDIxNjIKKzoxMDEzRjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NzQKKzoxMDE0MDAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDI4QTUKKzoxMDE0MTAwMDUyMjQwMDJBOEUwMzAwMTQ4Rjg0MDAyQzk0ODkwMDcwQkIKKzoxMDE0MjAwMDI1MjgwMDAxQTQ4ODAwNzA5NDg3MDA3MDNDMDUwODAwRkUKKzoxMDE0MzAwMDhDQTUzMTg4MzBFMjdGRkYxMDQ1MDAwRTAwMDAwMDAwQ0YKKzoxMDE0NDAwMDAyNjAyMDIxMEUwMDE5M0EyNDA1MDAwMTBBMDAxQjRERkMKKzoxMDE0NTAwMDAwMDAzMDIxMjQwMjAwMkRBMzgyMDA1ODBFMDAxOEIzOTIKKzoxMDE0NjAwMDI0MTNGRkZGMTQ1M0ZGRTEyNDA2RkZGRjBBMDAxQjRFNjUKKzoxMDE0NzAwMDhGQkYwMDIwOTQ5ODAwNzAyNDE5ODAwMDI0MDUwMDAxN0IKKzoxMDE0ODAwMDAzMTk5MDI0QTQ5MjAwNzA5MDkxMDA3MDkwOEQwMDcwQzgKKzoxMDE0OTAwMDMyMzAwMEZGMDAxMDc5QzIwMDBGNzAyNzAwMEU2MUMwQ0IKKzoxMDE0QTAwMDMxQUIwMDdGMDE2QzUwMjVBMDhBMDA3MDBFMDAxOTNBMDQKKzoxMDE0QjAwMDAyNjAyMDIxMEEwMDFCNEQwMDAwMzAyMTI0MDZGRkZGOUUKKzoxMDE0QzAwMDE0NjZGRkQ2OEY4NDAwMkMwMjYwMjAyMTBFMDAxOTNBOEEKKzoxMDE0RDAwMDI0MDUwMDAxMEEwMDFCNEQwMDAwMzAyMTAyNjAyMDIxN0MKKzoxMDE0RTAwMDBBMDAxQjY3MjQwMjAwMEE4Rjg4MDAyQzI3QkRGRkU4MzIKKzoxMDE0RjAwMEFGQjAwMDEwQUZCRjAwMTQ5MTBBMDBDNDhGODcwMDNDNEEKKzoxMDE1MDAwMDAwODA4MDIxMzU0OTAwNDA4Q0U2MDAxMEExMDkwMEM0MEMKKzoxMDE1MTAwMDNDMDIwODAwOEM0MjMxQjAzMEM1M0ZGRjAwQTIxODJCQkUKKzoxMDE1MjAwMDEwNjAwMDA3OEY4NTAwNDAyNDBERkY4MDkwQUUwMDBERjUKKzoxMDE1MzAwMDAxQUU2MDI0MzE4QjAwRkYxNTYwMDAwODAwMDZDMzgyRjUKKzoxMDE1NDAwMDAyMDAyMDIxMjQwMzAwMEQ4RkJGMDAxNDhGQjAwMDEwNzMKKzoxMDE1NTAwMDI3QkQwMDE4MEEwMDE4QjNBMzgzMDA1ODMzMDYwMDAzMDAKKzoxMDE1NjAwMDI0MEYwMDAyNTRDRkZGRjcwMjAwMjAyMTk0QTIwMDFDOTgKKzoxMDE1NzAwMDhGODUwMDJDMjQxOTAwMjNBNEEyMDBEODhDRTgwMDAwMzkKKzoxMDE1ODAwMDAwMDgxRTAyMzA3RjAwM0YxM0Y5MDAzNTNDMEEwMDgzM0IKKzoxMDE1OTAwMDhDRTgwMDE4OENBNjAwQzAxMTA2MDAwODAwMDAwMDAwQUUKKzoxMDE1QTAwMDI0MDUwMDBFMEUwMDE4QjNBMzg1MDA1ODI0MDdGRkZGODIKKzoxMDE1QjAwMDEwNDcwMDE4MjQwNEZGRkY4Rjg1MDAyQzkwQTkwMEM0NTkKKzoxMDE1QzAwMDM1MjQwMDIwQTBBNDAwQzQ4RjhDMDAzNDkxOEUwMDBEMUYKKzoxMDE1RDAwMDMxQ0QwMDdGQTE4RDAwMEQ4RjgzMDA0NDEwNjAwMDFDNzEKKzoxMDE1RTAwMDAyMDAyMDIxOEY4NDAwNDA4Qzk4MDAxMDAzMDM3ODJCODgKKzoxMDE1RjAwMDExRTAwMDBEMjQxOTAwMTgwMjAwMjAyMUEzOTkwMDU4QzEKKzoxMDE2MDAwMDBFMDAxOEIzMjQxMEZGRkYxMDUwMDAwMjI0MDRGRkZGNDcKKzoxMDE2MTAwMDAwMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxMjcKKzoxMDE2MjAwMDAzRTAwMDA4MjdCRDAwMTg4Qzg2MDAxMDhGOUYwMDM0NEYKKzoxMDE2MzAwMDAyMDAyMDIxMDBDMzEwMjNBRkUyMDAxMDI0MDUwMDAxQTYKKzoxMDE2NDAwMDBFMDAxOUFGMjQwNjAwMDEwQTAwMUJENjAwMDAyMDIxNUQKKzoxMDE2NTAwMDBFMDAxOTNBMjQwNTAwMDEwQTAwMUJENjAwMDAyMDIxQzMKKzoxMDE2NjAwMDAxMEE1ODI0MTU2QUZGRDk4RjhDMDAzNEEwQTYwMEVDMUIKKzoxMDE2NzAwMDBBMDAxQkMzQTM4NjAwNEEyN0JERkZEOEFGQjAwMDEwRTUKKzoxMDE2ODAwMDhGOTAwMDNDQUZCMjAwMThBRkJGMDAyMEFGQjMwMDFDN0EKKzoxMDE2OTAwMEFGQjEwMDE0OEUxMTAwMTAzQzAzMDgwMDhDNjMzMUIwMTAKKzoxMDE2QTAwMDMyMjUzRkZGMDBBMzEwMkIxMDQwMDAwODAwODA5MDIxM0UKKzoxMDE2QjAwMDhGODYwMDQwMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0MzMKKzoxMDE2QzAwMDMxMDcwMEZGMTRFMDAwMEIwMDExNkI4MjAyNDAyMDIxNjMKKzoxMDE2RDAwMDI0MTIwMDBEQTM5MjAwNTg4RkJGMDAyMDhGQjMwMDFDNkUKKzoxMDE2RTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOEIzMjkKKzoxMDE2RjAwMDI3QkQwMDI4MzFBQzAwMDMyNDBCMDAwMTU1OEJGRkY0RkIKKzoxMDE3MDAwMDAyNDAyMDIxOTBDRjAwMEQzMUVFMDAwODExQzAwMDYwOTIKKzoxMDE3MTAwMDhGOTMwMDQ0MTY2MDAwMDkyNDAyMDAyNzhFMTkwMDBDRTQKKzoxMDE3MjAwMDhDRDgwMDIwMTczODAwMDUyNDAyMDAyMDhFMDIwMDA4MDMKKzoxMDE3MzAwMDhDREYwMDI0MTA1RjAwNDAyNDAyMDAyMDBFMDAxOEIzNEMKKzoxMDE3NDAwMEEzODIwMDU4MjQwNkZGRkYxMDQ2MDAzMzI0MDRGRkZGNDUKKzoxMDE3NTAwMDhGOTkwMDM0MjQwQUZGRjczQzEzODAwRTkzMjkwMDBENjMKKzoxMDE3NjAwMDI0MDRGRjgwM0MwRDgwMDAwMTJBRjgyNEEzM0YwMDBERDMKKzoxMDE3NzAwMDhGOTkwMDI0M0MwODA4MDA4RDA4MzFBQzhGODMwMDVDRjEKKzoxMDE3ODAwMDk3MjcwMDc4OEY5RjAwMzQwMTAzMTAyMTMwRTU3RkZGRjkKKzoxMDE3OTAwMDAwMDUzMDQwMDA0Njc4MjEzMUY4MDA3RjAzMTM2MDIxQjYKKzoxMDE3QTAwMDAxRTQ3MDI0QURBRTAwMkNBNTkxMDAwMDhGRUIwMDI4NjEKKzoxMDE3QjAwMDI1NkEwMDAxQUZFQTAwMjg4RkUzMDAyQzhFMDkwMDJDNzcKKzoxMDE3QzAwMDAwNjk0MDIxQUZFODAwMkM4RTA3MDAyQ0FGRTcwMDMwMDUKKzoxMDE3RDAwMDhFMDUwMDE0QUZFNTAwMzQ5N0U2MDAzQTI0QzIwMDAxRkMKKzoxMDE3RTAwMEE3RTIwMDNBOTczMzAwNzgzQzEwMDgwMDhFMTAzMUIwMjEKKzoxMDE3RjAwMDI2NjMwMDAxMzA3MTdGRkYxMjMwMDAyNzAwNjAzMDIxMjYKKzoxMDE4MDAwMDhGOEYwMDI0MDI0MDIwMjEyNDA1MDAwMTBFMDAxOTNBODgKKzoxMDE4MTAwMEE1RTYwMDc4MDAwMDIwMjE4RkJGMDAyMDhGQjMwMDFDQjgKKzoxMDE4MjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMEIKKzoxMDE4MzAwMDAzRTAwMDA4MjdCRDAwMjg4RTA1MDAxNDI0MTNGRkZGRDUKKzoxMDE4NDAwMDEwQjMwMDFEOEY4MzAwMkM4RTA4MDAxODhDNjcwMEMwMTkKKzoxMDE4NTAwMDE1MDcwMDA5MjQwMjAwMEU4RTBBMDAyNDhDQzkwMDI4RjYKKzoxMDE4NjAwMDE1NDkwMDA1MjQwMjAwMjE4RTA3MDAyODhDQ0IwMDJDOEUKKzoxMDE4NzAwMDEwRUIwMDEzMjQwMjAwMUYwRTAwMThCM0EzODIwMDU4QkYKKzoxMDE4ODAwMDE0NTNGRkIzMjQwNEZGRkYwQTAwMUM1ODhGQkYwMDIwMkQKKzoxMDE4OTAwMDBBMDAxQzIwMjQwMjAwMjQyNDBFODAwMDAwNkU2ODI0MEMKKzoxMDE4QTAwMDMxQUNGRkZGMDAwQzVCQzIzMTcxMDBGRjAwMTE4MDI3REIKKzoxMDE4QjAwMDBBMDAxQzUxMDAxMDMzQzAwQTAwMUM2RjI0MDIwMDI1Q0UKKzoxMDE4QzAwMDhFMDUwMDJDMTBBMEZGRUMyNDAyMDAyMzhGOEUwMDI0MzQKKzoxMDE4RDAwMDhEQ0QwMDc0MDFBNTYwMkIxNTgwRkZFNzI0MDIwMDI2NDIKKzoxMDE4RTAwMDhDQ0YwMDE0MDBBN0MwMjEwMUY4MjAyQjEwODBGRjk5OTUKKzoxMDE4RjAwMDhGOTkwMDM0MDI0MDIwMjEwQTAwMUM2RjI0MDIwMDIyMkMKKzoxMDE5MDAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwMDAzQ0FGQjEwMDE0RDYKKzoxMDE5MTAwMEFGQkYwMDE4OEUwNTAwMTAzQzAzMDgwMDhDNjMzMUIwODcKKzoxMDE5MjAwMDAwODA4ODIxMzBBNDNGRkYwMDgzMTAyQjEwNDAwMDA3NjcKKzoxMDE5MzAwMDhGODYwMDQwMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0QjAKKzoxMDE5NDAwMDMxMDcwMEZGMTRFMDAwMDk4RjhCMDA0NDI0MTAwMDBEQzQKKzoxMDE5NTAwMDAyMjAyMDIxQTM5MDAwNTg4RkJGMDAxODhGQjEwMDE0REYKKzoxMDE5NjAwMDhGQjAwMDEwMEEwMDE4QjMyN0JEMDAyMDExNjAwMDA4RDYKKzoxMDE5NzAwMDAwMDVDMzgyOEY4RjAwMkM4RjhFRkVEQzI0MDdGRkZEQjUKKzoxMDE5ODAwMDk1RUMwMDcwOTVDRDAwMEExMUFDMDAzODhGQkYwMDE4OUYKKzoxMDE5OTAwMDMzMDUwMDAzMTRBMDAwMTAwMDAwMDAwMDkyMTkwMDAyOUIKKzoxMDE5QTAwMDEzMjAwMDQxMDAwMDAwMDA4RTA2MDAyNDUwQzAwMDBGRUMKKzoxMDE5QjAwMDkyMDQwMDAzMDIyMDIwMjEyNDAyMDAwRjBFMDAxOEIzMUQKKzoxMDE5QzAwMEEzODIwMDU4MjQwOEZGRkYxNDQ4MDAwNzI0MDdGRkZGRTQKKzoxMDE5RDAwMDBBMDAxQ0VDOEZCRjAwMTg5MEMzMDAwRDMwNjQwMDA4OTMKKzoxMDE5RTAwMDEwODAwMDM3MDIyMDIwMjE5MjA0MDAwMzI0MDcwMDAyMDcKKzoxMDE5RjAwMDMwODkwMEZGMTUyNzAwMDUzMDhGMDBGRjhGOEEwMDQ0RDMKKzoxMDFBMDAwMDExNDAwMDMxMjQwQzAwMkMzMDhGMDBGRjM5RTUwMDEwMEMKKzoxMDFBMTAwMDJDQUQwMDAxMkRFRTAwMDEwMjAwMjgyMTAxQ0QzMDI1NjIKKzoxMDFBMjAwMDBFMDAxOEQzMDIyMDIwMjEyNDEwRkZGRjEwNTAwMDBFQkEKKzoxMDFBMzAwMDI0MDdGRkZGOEY4MzAwNDQxMDYwMDAxNzAyMjAyMDIxM0QKKzoxMDFBNDAwMDNDMTkwODAwOEYzOTMxOEMwMzIzQzAyQjU3MDAwMDBDNDAKKzoxMDFBNTAwMDI0MTEwMDJEMDIyMDIwMjEwMDAwMjgyMTBFMDAxOUFGQTIKKzoxMDFBNjAwMDI0MDYwMDAxMDAwMDM4MjE4RkJGMDAxODhGQjEwMDE0MzgKKzoxMDFBNzAwMDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODI3QkQwMDIwMTcKKzoxMDFBODAwMDBFMDAxOEIzQTM5MTAwNTgxNDUwRkZGNjI0MDdGRkZGNkYKKzoxMDFBOTAwMDBBMDAxQ0VDOEZCRjAwMTgwRTAwMTkzQTI0MDUwMDAxNDMKKzoxMDFBQTAwMDBBMDAxQ0VCMDAwMDM4MjE4Q0RGMDAyNDhFMDIwMDI0ODkKKzoxMDFBQjAwMDU0NUZGRkMxMDIyMDIwMjEwQTAwMUNDQzkyMDQwMDAzQzUKKzoxMDFBQzAwMDBBMDAxQ0MwMjQwMjAwMTAwMjIwMjAyMTBFMDAxOEIzQkUKKzoxMDFBRDAwMEEzOEMwMDU4MjQwQkZGRkYxMDRCRkZFMzI0MDdGRkZGRUMKKzoxMDFBRTAwMDBBMDAxQ0QzOTIwNDAwMDMzMEE1MDBGRjI0MDYwMDAxNjUKKzoxMDFBRjAwMDI0QTkwMDAxMDBDOTEwMkIxMDQwMDAwQzAwMDA0MDIxNTcKKzoxMDFCMDAwMDI0MEEwMDAxMDBBNjE4MjMzMDhCMDAwMTI0QzYwMDAxMUUKKzoxMDFCMTAwMDAwNkEzODA0MDAwNDIwNDIxMTYwMDAwMjAwQzkxODJCM0EKKzoxMDFCMjAwMDAxMDc0MDI1MTQ2MEZGRjgwMEE2MTgyMzAzRTAwMDA4MTEKKzoxMDFCMzAwMDAxMDAxMDIxMjdCREZGRDhBRkIwMDAxODhGOTAwMDNDRTYKKzoxMDFCNDAwMEFGQjEwMDFDQUZCRjAwMjAyNDAzRkZGRjI0MTEwMDJGMDIKKzoxMDFCNTAwMEFGQTMwMDEwOTIwNjAwMDAyNDA1MDAwODI2MTAwMDAxMjMKKzoxMDFCNjAwMDAwNjYyMDI2MEUwMDFEMEIzMDg0MDBGRjAwMDIxRTAwQzAKKzoxMDFCNzAwMDNDMDIxRURDMzQ0NjZGNDEwQTAwMUQzMzAwMDAxMDIxNzgKKzoxMDFCODAwMDEwQTAwMDA5MDA4MDE4MjEyNDQ1MDAwMTMwQTJGRkZGQTkKKzoxMDFCOTAwMDJDNDUwMDA4MDQ2MUZGRkEwMDAzMjA0MDAwODYyMDI2M0YKKzoxMDFCQTAwMDE0QTBGRkY5MDA4MDE4MjEwRTAwMUQwQjI0MDUwMDIwNTEKKzoxMDFCQjAwMDhGQTMwMDEwMjYyOUZGRkYzMTMxMDBGRjAwMDM0MjAyRUUKKzoxMDFCQzAwMDI0MDcwMEZGMTYyN0ZGRTIwMTAyMTgyNjAwMDM1MDI3MTIKKzoxMDFCRDAwMEFGQUEwMDE0QUZBQTAwMTAwMDAwMzAyMTI3QTgwMDEwRkYKKzoxMDFCRTAwMDI3QTcwMDE0MDBFNjc4MjM5MUVEMDAwMzI0Q0UwMDAxMUUKKzoxMDFCRjAwMDAwQzg2MDIxMzFDNjAwRkYyQ0NCMDAwNDE1NjBGRkY5M0UKKzoxMDFDMDAwMEExOEQwMDAwOEZBMjAwMTA4RkJGMDAyMDhGQjEwMDFDOUIKKzoxMDFDMTAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODkzODMwMDM4MjgKKzoxMDFDMjAwMDI3QkRGRkUwMjQwMjAwMzRBRkIxMDAxNEFGQjAwMDEwQjQKKzoxMDFDMzAwMEFGQkYwMDFDQUZCMjAwMTgwMDgwODAyMTEwNjIwMDY0QUEKKzoxMDFDNDAwMDAwQTA4ODIxOTIyNDAwMDQxNDgwMDA0NzhGODgwMDJDNzMKKzoxMDFDNTAwMEEzODAwMDMwOEUyNTAwMDQ4RDA3MDBDODNDMDYwMEZGREQKKzoxMDFDNjAwMDM0QzNGRkZGMDBBMzMwMjQwMEU2MTAyQjE0NDAwMDRGQzQKKzoxMDFDNzAwMEFGODYwMDQ0OTc4QTAwNEM4Rjg4MDA1MDAxNDgzODIzNzMKKzoxMDFDODAwMDEwQzAwMDM0QTc4NzAwNEM4Rjk5MDAyNDMwREYwMDAzNzgKKzoxMDFDOTAwMDAwMUYyMDIzOTMzMjAwN0MzMDkwMDAwMzAyMDY3MDIxNDUKKzoxMDFDQTAwMDAwMTJDMDgyMzMxMjAwMDEwMDEyNzg4MDAxQ0Y2ODIxMzcKKzoxMDFDQjAwMDMwRUNGRkZGMDE4RDU4MkIxMTYwMDA1RjhGODcwMDJDRTcKKzoxMDFDQzAwMDhGODkwMDI4OEY4MjAwNTQxMDQ5MDA1QzNDMDMzRjAxM0IKKzoxMDFDRDAwMDhFMjUwMDAwM0MxMTI1MDAwMEEzMzgyNDE0RjEwMDc2NjUKKzoxMDFDRTAwMDhGODQwMDNDOEY4ODAwM0M4Rjg3MDAyQzhEMEEwMDAwNzkKKzoxMDFDRjAwMEFDRUEwMDc4OEQwNjAwMTBBQ0U2MDA4ODhGODgwMDUwQjIKKzoxMDFEMDAwMDhGODYwMDQ0OTM4QjAwMzAwMTI4NjAyMTAyMDYyODIxMzEKKzoxMDFEMTAwMDAyMEIxODIxQTM4MzAwMzA5NEU5MDBBQ0FGOEMwMDI4OUIKKzoxMDFEMjAwMDM1MzAxMDAwQTRGMDAwQUMxNjQwMDA1MDI0NzgwMDA0QjgKKzoxMDFEMzAwMEFGODUwMDUwMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4MUIKKzoxMDFENDAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4NTQKKzoxMDFENTAwMDI3QkQwMDIwOEY4NDAwMjhBRjgwMDA1MDAwODg5MDIxOEMKKzoxMDFENjAwMDBBMDAxRDlFQUY5MjAwMjgyNDFGMDAwQ0EzOUYwMDU4NUMKKzoxMDFENzAwMDBFMDAxOEIzMDIwMDIwMjEyNDE5RkZGRjEwNTlGRkVFQjYKKzoxMDFEODAwMDI0MDRGRkZGOEY4ODAwMkNBMzgwMDAzMDhFMjUwMDA0RTAKKzoxMDFEOTAwMDhEMDcwMEM4M0MwNjAwRkYzNEMzRkZGRjAwQTMzMDI0QkEKKzoxMDFEQTAwMDAwRTYxMDJCMTA0MEZGQjNBRjg2MDA0NDAyMDAyMDIxNTQKKzoxMDFEQjAwMDI0MDkwMDE5QTM4OTAwNTgwRTAwMThCMzI0MTBGRkZGNEUKKzoxMDFEQzAwMDEwNTBGRkREMjQwNEZGRkYwQTAwMUQ2RThGODYwMDQ0QzMKKzoxMDFERDAwMDhGODQwMDJDOEY4NzAwM0M4Q0YyMDAzMDkwODYwMEM0RUEKKzoxMDFERTAwMDMwQzUwMDEwMTRBMDAwMTA4RjgzMDA1MDJDNjgwMDA1MkYKKzoxMDFERjAwMDE1MDAwMDI2MDAwMDAwMDA5MDhBMDBDNDI0NkJGRkZDNDAKKzoxMDFFMDAwMDMxNDkwMDEwMTUyMDAwMDgzMTY0MDBGRjhGOEQwMDU0MDcKKzoxMDFFMTAwMDhGOEMwMDI4MTFBQzAwMDQzODhGMDAwMTMxRUUwMDAxRDYKKzoxMDFFMjAwMDE1QzAwMDJEMDAwMDAwMDAwRTAwMUQxRTAwMDAwMDAwNjcKKzoxMDFFMzAwMDBBMDAxREY1MDAwMDAwMDA4Rjg5MDAyODkzOEIwMDMwRjgKKzoxMDFFNDAwMDAxMjg2MDIxMDIwNjI4MjEwMjBCMTgyMUEzODMwMDMwRkIKKzoxMDFFNTAwMDk0RTkwMEFDQUY4QzAwMjgzNTMwMTAwMEE0RjAwMEFDNDEKKzoxMDFFNjAwMDUyNDBGRkI0QUY4NTAwNTAyNDc4MDAwNEEzOTgwMDMwOUUKKzoxMDFFNzAwMDk0RUUwMEFDMjRBRjAwMDRBRjhGMDA1MDM1Q0QyMDAwQUQKKzoxMDFFODAwMEE0RUQwMEFDMEEwMDFEOUYwMDAwMjAyMThDODIwMERDMjQKKzoxMDFFOTAwMDEyNDJGRjZDMDIwMDIwMjEyNDE4MDAwNUEzOTgwMDU4NkMKKzoxMDFFQTAwMDBFMDAxOEIzMjQxMkZGRkYxNDUyRkY2NjI0MDRGRkZGMzQKKzoxMDFFQjAwMDBBMDAxREEwOEZCRjAwMUMzMTA1MDBGRjBFMDAxN0JBREQKKzoxMDFFQzAwMDAwMDAzMDIxOEY4NzAwMkM4Rjg4MDA1MDhGODkwMDI4RDgKKzoxMDFFRDAwMDBBMDAxRDkyOEY4NjAwNDQwRTAwMTdFNTAwMDAwMDAwRTYKKzoxMDFFRTAwMDBBMDAxREY1MDAwMDAwMDA5MzgzMDA0QTI3QkRGRkUwQjMKKzoxMDFFRjAwMDI0MDIwMDAyQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDNDMKKzoxMDFGMDAwMDAwODA4ODIxQUZCMDAwMTAwMDAwOTAyMTEwNjIwMDU1QzEKKzoxMDFGMTAwMDI0MDRGRkZEOTc4MzAwNEM4Rjg1MDA1MDMwNjZGRkZGM0YKKzoxMDFGMjAwMDAwQzUyMDJCMTQ4MDAwNUI5Mzg3MDAzODNDMDg4MDAwOUMKKzoxMDFGMzAwMDk1MDQwMTIwMTBFNTAwNTI4RjhBMDAyODhGODQwMDU0RjgKKzoxMDFGNDAwMDMwQTUwMEZGMEUwMDE3QkEyNDA2MDAwMThGOUYwMDVDMjkKKzoxMDFGNTAwMDNDMDU4MDAwM0MxOTQwODAyN0VEMDE3ODMxQjAwMDc4QzUKKzoxMDFGNjAwMDI0MEVGRjgwMDIxOTU4MjUzNEFGMDkwMDMxQjgwMDA3NEMKKzoxMDFGNzAwMDAxQUU2MDI0QUNBQzA4MDAwMzBGODAyMUFDQUIwODEwQUMKKzoxMDFGODAwMDAyMjAyMDIxMDIwMDI4MjEwRTAwMUQ1OEFGOTAwMDNDQTUKKzoxMDFGOTAwMDI0MDNGRkZGMTA0MzAwMzMyNDA0RkZGRjhFMEMwMDEwQzYKKzoxMDFGQTAwMDNDMDcwODAwOENFNzMxQjA5MjA2MDAwMDMxODQzRkZGMDcKKzoxMDFGQjAwMDAwODcxMDJCMTA0MDAwMjMzMENEMDAzRjhGOTgwMDVDMkQKKzoxMDFGQzAwMDAwMDQ3MTgwM0MwNDA4MDA4Qzg0MzFBODI0MDlGRjgwM0YKKzoxMDFGRDAwMDkzOTAwMDQ5MDA5ODQwMjEwMTBFMjAyMTAwODk3MDI0MkYKKzoxMDFGRTAwMDAwMEU1MTQwM0MwOTgwMDAzMDk5MDA3RjNDMEYwMDgwN0EKKzoxMDFGRjAwMDhGODgwMDJDMzUyNTA5NDAzNUUyMDAwMTAxNTkzODI1MkMKKzoxMDIwMDAwMDMwOEIwMDc4MzA4NjAwMDczQzAzMTAwMDNDMUY4MDBDQUEKKzoxMDIwMTAwMDAwQzVDMDIxMDE2MjU4MjUwMEUzNTAyNTAzM0Y3ODIxMDcKKzoxMDIwMjAwMDM2MDUwMDAxQUQyRTA4MDRBRjk4MDA0MEFEMkIwODE0MTIKKzoxMDIwMzAwMEFGOEYwMDM0QUQyRTAwMjhBRDA0MDA3NEFEMkEwODMwRjcKKzoxMDIwNDAwMEEzODUwMDQ5OTM4MzAwNEEyNDEwMDAwMzUwNzAwMDI3QTEKKzoxMDIwNTAwMDI1QTNGRkUwMjQwQzAwMDExMDZDMDAxQzI0MDYwMDIzQzMKKzoxMDIwNjAwMDAyNDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RDYKKzoxMDIwNzAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwNzEKKzoxMDIwODAwMDMxNDkwMDAzNTUyMEZGQUU4Rjg0MDA1NDBBMDAxRTMxRjEKKzoxMDIwOTAwMDhGOTAwMDU0OEY4NDAwNTQzMDY1MDBGRjBFMDAxN0JBRjMKKzoxMDIwQTAwMDI0MDYwMDAxOTM4QjAwMzgyNDA1MDAzNDExNjUwMDE4QzQKKzoxMDIwQjAwMDk3ODMwMDRDOEY4NTAwNTAzMDYyRkZGRjAwQTI1ODIzQTkKKzoxMDIwQzAwMEFGOEIwMDUwMEEwMDFFNjlBNzgwMDA0QzExQTYwMDM3OTQKKzoxMDIwRDAwMDAwMDAwMDAwMDIyMDIwMjEyNDExMDAwQjBFMDAxOEIzODQKKzoxMDIwRTAwMEEzOTEwMDU4MEEwMDFFNjkwMDQwOTAyMTJDNzIwMDIwMjQKKzoxMDIwRjAwMDEyNDBGRkY4MDAwM0Y4ODAzQzA3MDgwMTI0RTc4MUFDOTgKKzoxMDIxMDAwMDAzRTdDODIxOEYyRDAwMDAwMUEwMDAwODAwMDAwMDAwOTcKKzoxMDIxMTAwMDhGODUwMDUwMkNBMjAwMDU1NDQwMDAxREE3ODAwMDRDNjQKKzoxMDIxMjAwMDk3OEEwMDRDMzE0OEZGRkYwMEE4NDgyMzJEMkYwMDA1NTcKKzoxMDIxMzAwMDExRTAwMDAzMzE0NDAwRkYyNEFFRkZGQzMxQzQwMEZGNzYKKzoxMDIxNDAwMDhGOTAwMDU0OEY5ODAwMjgxMjE4MDAwNDM4OTkwMDAxQ0QKKzoxMDIxNTAwMDMzMkQwMDAxMTVBMDAwMjkwMDAwMDAwMDhGOTEwMDJDRjQKKzoxMDIxNjAwMDkyMjUwMEM0MzRBMzAwMTBBMjIzMDBDNDk3ODMwMDRDMUUKKzoxMDIxNzAwMDhGODUwMDUwOEY4NDAwMkMzMDYyRkZGRjAwQTI1ODIzMEYKKzoxMDIxODAwMEFDODAwMERDQTc4MDAwNEMwQTAwMUU2OUFGOEIwMDUwQjkKKzoxMDIxOTAwMDMwNjJGRkZGMDBBMjU4MjMwQTAwMUU2OUFGOEIwMDUwNzcKKzoxMDIxQTAwMDI0MDNGRkZGMTE4MzAwMDUwMDAwMDAwMDBFMDAxQjhCQkQKKzoxMDIxQjAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQjEyRkYKKzoxMDIxQzAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQkVGMTIKKzoxMDIxRDAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQTY5ODkKKzoxMDIxRTAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQzkxNEYKKzoxMDIxRjAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxN0U1RjAKKzoxMDIyMDAwMDAwMDAwMDAwOTc4MzAwNEM4Rjg1MDA1MDMwNkNGRkZGNkEKKzoxMDIyMTAwMDAwQUMzODIzMkNGRjAwMDU1M0UwRkZBODMwNjJGRkZGMUQKKzoxMDIyMjAwMDhGODYwMDJDQTc4MDAwNENBQ0MyMDBEQzMwNjJGRkZGMjAKKzoxMDIyMzAwMDAwQTI1ODIzMEEwMDFFNjlBRjhCMDA1MDI3QkRGRkQwQjMKKzoxMDIyNDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyOEFGQjUwMDI0ODgKKzoxMDIyNTAwMEFGQjQwMDIwQUZCMzAwMUNBRkIxMDAxNDNDMEM4MDAwNDEKKzoxMDIyNjAwMDhEODgwMTI4MjQwRkZGODAzQzA3ODAwQTI1MTAwMTAwN0IKKzoxMDIyNzAwMDI1MEIwMDgwMDIwRjY4MjQzMjA1MDA3RjAxNkY3MDI0NTcKKzoxMDIyODAwMEFEOEUwMDkwMDBBNzI4MjFBRDhEMDAyNDkwQTcwMEVDMTIKKzoxMDIyOTAwMDMxNjkwMDdGM0MwQTgwMDQwMTJBMTgyMUEzODcwMDRBODMKKzoxMDIyQTAwMDkwNjYwMDdDMDA4MDkwMjFBRjgzMDAyNDMwQzIwMDAyNDEKKzoxMDIyQjAwMEFGODgwMDVDQUY4NTAwMkMwMEEwMTgyMTE0NDAwMDAyRkMKKzoxMDIyQzAwMDI0MDQwMDM0MjQwNDAwMzBBMzg0MDAzODhDNjYwMENDM0QKKzoxMDIyRDAwMDMwRjEwMEZGMjQwNDAwMDRBRjg2MDA1MDEyMjQwMDA0RjMKKzoxMDIyRTAwMEEzODAwMDU4OEU1MzAwMDQxNjYwMDAxRDNDMDg4MDAwMzcKKzoxMDIyRjAwMDkzODcwMDQ5MzBGMjAwMDExMjQwMDAwRjhGQkYwMDI4ODEKKzoxMDIzMDAwMDhDQjgwMDc0OENBNDAwNzQyNDE5RkY4MDAzMTk4ODI0RUQKKzoxMDIzMTAwMDAwMTE3MTQwMzA4RjAwN0YwMUNGNjAyNTNDMEQyMDAwRkYKKzoxMDIzMjAwMDAxOEQ1ODI1MzBGNTAwRkUzQzBBODAwMEFENEIwODMwODkKKzoxMDIzMzAwMEEzOTUwMDQ5OEZCRjAwMjg4RkI1MDAyNDhGQjQwMDIwREIKKzoxMDIzNDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMzMKKzoxMDIzNTAwMDI0MDIwMDAxMjdCRDAwMzAwM0UwMDAwOEFDQTYwMENDMzkKKzoxMDIzNjAwMDhFNTkwMDA4OTUxRjAxMjA4RTQ2MDAxMDAzM0ZDMDIxQTIKKzoxMDIzNzAwMDMzMDdGRkZGMzBGNTAwMEYzMkI0MDAwMUFGODYwMDI4QUQKKzoxMDIzODAwMDE2ODAwMDNCQTM5NTAwNDgzNTA2MEMwMDAyQTYxMDIxREMKKzoxMDIzOTAwMDAwRjUxODIzQUQwMzAwODRBRjgyMDA1NDhFNDkwMDA0NzkKKzoxMDIzQTAwMDMxMjhGRkZGMTEwMDAwMkJBNzg5MDA0QzI0MTBGRjgwNkIKKzoxMDIzQjAwMDNDMTU4MDAwM0MxNDIwMDAwQTAwMUY1NzI0MTNGRkZFMjgKKzoxMDIzQzAwMDkwQUUwMEM0MDIwRTY4MjQzMUFDMDBGRjE1ODAwMDJBRDQKKzoxMDIzRDAwMDAyNDAyMDIxOTM4NDAwNDk5Nzg2MDA0QzMwOEYwMDAxRjEKKzoxMDIzRTAwMDExRTAwMDBCMDI2NDI4MjQ4Rjg5MDAyQzhEMjMwMDc0RDcKKzoxMDIzRjAwMDhEMjgwMDc0QTM4NTAwNDkwMDcwMTAyNDAwMDJDOTQwOTQKKzoxMDI0MDAwMDMxMUYwMDdGMDMzRkMwMjUwMzE0ODgyNUFFQjEwODMwN0IKKzoxMDI0MTAwMDEwQzAwMDEwOEY4NTAwMkM5MEE3MDBDNDAyMDc1ODI0MUMKKzoxMDI0MjAwMDMxNkEwMEZGMTU0MEZGRTYwMjQwMjAyMTBFMDAxRTBCMUUKKzoxMDI0MzAwMDk3OTEwMDRDMTA0MEZGRTg5Mzg0MDA0OTI0MDVGRkZENkMKKzoxMDI0NDAwMDU0NDUwMDA1OEU0MzAwMjAwMjIwMjgyMTBFMDAxNzkwREQKKzoxMDI0NTAwMDAyNDAyMDIxOEU0MzAwMjAzMDcwMDAwNDE2MDAwMDBBNDQKKzoxMDI0NjAwMDI0MTRGRkZCOEY4NTAwMkMwQTAwMUYwRDhGODYwMDUwNUYKKzoxMDI0NzAwMDBBMDAxRjM4QUY4NjAwNTQwRTAwMUEzNTAwMDAwMDAwMTUKKzoxMDI0ODAwMDBBMDAxRjQ3OTM4NDAwNDkwMDc0OTgyNDBFMDAxN0FBN0QKKzoxMDI0OTAwMEFFNTMwMDIwOEY4NTAwMkMwQTAwMUYwRDhGODYwMDUwNDAKKzoxMDI0QTAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIxMDAxNEFGQkYwMDIwRjEKKzoxMDI0QjAwMEFGQjIwMDE4QUZCMDAwMTAzQzAyODAwMDhDNTIwMTQwNTcKKzoxMDI0QzAwMDhDNEIwMTQ4M0MwNDgwMDAwMDBCOEMwMjMyMjMwMEZGM0YKKzoxMDI0RDAwMDMxNzMwMEZGOEM4NTAxQjgwNEEwRkZGRTM0OTAwMTgwQTkKKzoxMDI0RTAwMEFFMTIwMDAwOEM4NzAxNDQyNDY0RkZGMDI0MDYwMDAyMzEKKzoxMDI0RjAwMDJDODMwMDEzQUUwNzAwMDRBNjExMDAwOEEyMDYwMDBCRUYKKzoxMDI1MDAwMEFFMTMwMDI0MTA2MDAwNEY4RkJGMDAyMDAwMDQ0ODgwRUQKKzoxMDI1MTAwMDNDMEEwODAxMjU0QTgyMkMwMTJBNDAyMThEMDQwMDAwMzIKKzoxMDI1MjAwMDAwODAwMDA4MDAwMDAwMDAzQzEwMDgwMDhFMTAzMUE4NTgKKzoxMDI1MzAwMDMxNzMzRkZGMDAxMzg5ODAwMjEyQzgyMTI0MDVGRjgwRjgKKzoxMDI1NDAwMDAzMzEyMDIxMjY0QzAxMDAyNjQ3MDA4MDNDMUY4MDAwREIKKzoxMDI1NTAwMDAwRTUxODI0MzE4RjAwN0YzMEU5MDA3RjMwOEEwMDdGNEEKKzoxMDI1NjAwMDNDMTg4MDBBM0MwRTgwMDQzQzBEODAwQzAwODUxMDI0MzEKKzoxMDI1NzAwMDAxODUzMDI0MDE0RDgwMjFBRkU2MDAyNDAxRjg0MDIxN0YKKzoxMDI1ODAwMEFGRTMwMDkwMDEyRTk4MjFBRkUyMDAyOEFGOTAwMDM0MTUKKzoxMDI1OTAwMEFGODgwMDJDQUY5MzAwMjQwRTAwMTg3RjAxNjA4MDIxQ0IKKzoxMDI1QTAwMDNDMDM4MDAwOEM2QjAxQjgwNTYwRkZGRThGODcwMDM0MTAKKzoxMDI1QjAwMDM0NjUwMTgwOEY4NjAwMkM5MEUzMDAwREFDQjIwMDAwRTIKKzoxMDI1QzAwMEE0QjAwMDA2MDAwMzE2MDAwMDAyRkUwMzAwMUY5MDI3QkYKKzoxMDI1RDAwMDAwMTIyN0MyMTA4MDAwN0EyNEMyMDA3ODI0MTk2MDgyNzkKKzoxMDI1RTAwMEE0QjkwMDA4QTBBMDAwMDUyNDFGMDAwMkEwQkYwMDBCOTIKKzoxMDI1RjAwMDAwMDQxQzAwOEY4QjAwMjQzQzAyMjcwMDAwNjI5MDI1MDEKKzoxMDI2MDAwMEFDQjIwMDEwQUNBMDAwMTRBQ0EwMDAyNEFDQTAwMDI4MTgKKzoxMDI2MTAwMEFDQTAwMDJDOEQ3MzAwMzgyNDEwRkY4MEFDQjMwMDE4RTAKKzoxMDI2MjAwMDkwRTQwMDBEMDIwNDg4MjQzMjI1MDBGRjEwQTAwMDA1NkMKKzoxMDI2MzAwMDhGQkYwMDIwOTBFQzAwMEQzMTg4MDA3RkEwRTgwMDBERDYKKzoxMDI2NDAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MTEKKzoxMDI2NTAwMDhGQjAwMDEwM0MwRDEwMDAzQzBBODAwMDI3QkQwMDI4MDAKKzoxMDI2NjAwMDAzRTAwMDA4QUQ0RDAxQjgyNjVGMDEwMDI0MDVGRjgwOUUKKzoxMDI2NzAwMDMzRjgwMDdGM0MwNjgwMDAwM0U1NzgyNDNDMTk4MDBBOEIKKzoxMDI2ODAwMDAzMTkyMDIxQUNDRjAwMjQ5MDhFMDBDNDAwQUU2ODI0MzIKKzoxMDI2OTAwMDMxQUMwMEZGMTE4MEZGRUFBRjg0MDAyQzI0OEUwMDc4NUIKKzoxMDI2QTAwMDk1Q0QwMDEyM0MwQzA4MDA4RDhDMzFBODMxQUIzRkZGNUEKKzoxMDI2QjAwMDAxOTI0ODIxMDAwQjUxODAwMTJBNDAyMTAxMDUyMDI0NkMKKzoxMDI2QzAwMEFDQzQwMDI4MzEwNzAwN0YzQzA2ODAwQzAwRTYyMDIxQzYKKzoxMDI2RDAwMDkwODMwMDBEMDBBMzEwMjQzMDQ1MDBGRjEwQTBGRkQ4MDgKKzoxMDI2RTAwMEFGODQwMDM0OTA5ODAwMEQzMzBGMDAxMDE1RTBGRkQ1MzMKKzoxMDI2RjAwMDhGQkYwMDIwMEUwMDE4N0YwMDAwMDAwMDNDMDM4MDAwMDgKKzoxMDI3MDAwMDhDNzkwMUI4MDcyMEZGRkUwMDAwMDAwMEFFMTIwMDAwMjcKKzoxMDI3MTAwMDhDNzIwMTQ0QUUxMjAwMDRBNjExMDAwODI0MTEwMDAyQkMKKzoxMDI3MjAwMEEyMTEwMDBCQUUxMzAwMjQwQTAwMUZFMjhGQkYwMDIwOEQKKzoxMDI3MzAwMDNDMTI2MDAwOEU0NTJDMDgzQzAzRjAwMzM0NjJGRkZGMUUKKzoxMDI3NDAwMDAwQTJGODI0QUU1RjJDMDg4RTU4MkMwODNDMTkwMUIwNkEKKzoxMDI3NTAwMDAzMTk5ODI1QUU1MzJDMDgwQTAwMUZFMjhGQkYwMDIwRjIKKzoxMDI3NjAwMDI2NEQwMTAwMzFBRjAwN0YzQzEwODAwQTI0MEVGRjgwMEYKKzoxMDI3NzAwMDAxRjAyODIxMDFBRTYwMjQzQzBCODAwMEFENkMwMDI0RTgKKzoxMDI3ODAwMDE2NjBGRkFGQUY4NTAwMkMyNDExMDAwM0EwQjEwMEVDNTAKKzoxMDI3OTAwMDBBMDAxRkUyOEZCRjAwMjAyNjQ4MDEwMDMxMEEwMDdGOTcKKzoxMDI3QTAwMDNDMEI4MDBBMjQwOUZGODAwMTRCMzAyMTAxMDkyMDI0QzEKKzoxMDI3QjAwMDNDMDc4MDAwQUNFNDAwMjQwQTAwMUZFMUFGODYwMDJDMzcKKzoxMDI3QzAwMDk0NEEwMDEyMzIwODNGRkYzMTRDM0ZGRjE1ODhGRjg0QzYKKzoxMDI3RDAwMDI0MTk2MDgyOTBDRjAwQzQyNDBFRkY4MDAxQ0Y0ODI0Q0EKKzoxMDI3RTAwMDMxMkQwMEZGMTFBMEZGN0UwMDAwMDAwMDI0MDcwMDA0MkYKKzoxMDI3RjAwMEEwQzcwMEVDOEY4NzAwMzQyNDE4NjA4NDI0MDYwMDBERTUKKzoxMDI4MDAwMEE0QjgwMDA4QTBBNjAwMDUwQTAwMUZDQzI0MUYwMDAyREYKKzoxMDI4MTAwMDA4MDAzMzBDMDgwMDMzMEMwODAwMzNFODA4MDAzM0JDMTAKKzoxMDI4MjAwMDA4MDAzM0EwMDgwMDMyRjAwODAwMzJGMDA4MDAzMkYwNEYKKzoxMDI4MzAwMDA4MDAzMzE0ODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwMzAKKzoxMDI4NDAwMDVGODY1NDM3RTRBQzYyQ0M1MDEwM0E0NTM2NjIxOTg1NDUKKzoxMDI4NTAwMEJGMTRDMEU4MUJDMjdBMUU4NEY0QjU1NjA5NEVBNkZFMEEKKzoxMDI4NjAwMDdEREEwMUU3QzA0RDc0ODEwODAwN0FFNDA4MDA3QjMwMEUKKzoxMDI4NzAwMDA4MDA3QUYwMDgwMDdBMTgwODAwN0FGMDA4MDA3QjIwMzcKKzoxMDI4ODAwMDA4MDA3QUYwMDgwMDdBMTgwODAwN0ExODA4MDA3QTE4MDgKKzoxMDI4OTAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4RDAKKzoxMDI4QTAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QjEwQzcKKzoxMDI4QjAwMDA4MDA3QjAwMDgwMDdBMTgwODAwN0ExODA4MDA3QTE4QzcKKzoxMDI4QzAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4QTAKKzoxMDI4RDAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4OTAKKzoxMDI4RTAwMDA4MDA3QTE4MDgwMDdCMDAwODAwODBEQzA4MDA3Rjg0NUMKKzoxMDI4RjAwMDA4MDA4MEE0MDgwMDdGODQwODAwODA3NDA4MDA3RTZDQjMKKzoxMDI5MDAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0OUIKKzoxMDI5MTAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0OEIKKzoxMDI5MjAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0N0IKKzowNDI5MzAwMDA4MDA3RkFDNzAKKzowQzI5MzQwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyOTQwMDAwMDAwMDAwRDc0NzA2MTM1MkUzMDJFMzA2QTM5MDAwMEExCis6MTAyOTUwMDAwNTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAyOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAyOUMwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRERBCis6MTAyOUQwMDAzQzAyMDgwMDI0NDIxQzIwM0MwMzA4MDAyNDYzMUZBMDgyCis6MTAyOUUwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDczCis6MTAyOUYwMDAzQzFEMDgwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDRGCis6MTAyQTAwMDAyNjEwMDQ4ODNDMUMwODAwMjc5QzFDMjAwRTAwMDJFMkIzCis6MTAyQTEwMDAwMDAwMDAwMDAwMDAwMDBEMjQwMkZGODAyN0JERkZFMDQxCis6MTAyQTIwMDAwMDgyMTAyNEFGQjAwMDEwQUY0MjAwMjBBRkJGMDAxOEVBCis6MTAyQTMwMDBBRkIxMDAxNDkzNjUwMDA0MzA4NDAwN0YwMzQ0MTgyMTczCis6MTAyQTQwMDAzQzAyMDAwODAwNjIxODIxMzBBNTAwMjAwMzYwODAyMUFDCis6MTAyQTUwMDAzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIyNDY2MDA1Q0RBCis6MTAyQTYwMDAyNDY2MDA1ODkyMDIwMDA0OTc0MzAxMDQ5MjA0MDAwNDczCis6MTAyQTcwMDAzMDQ3MDAwRjMwNjNGRkZGMzA4NDAwNDAwMDY3MjgyMzk5Cis6MTAyQTgwMDAxMDgwMDAwOTAwMDA0ODIxOTIwMjAwMDUzMDQyMDAwNDM1Cis6MTAyQTkwMDAxMDQwMDAwNTAwMDAwMDAwMTBBMDAwMDMwMDAwMDAwMDJFCis6MTAyQUEwMDAyNEE1RkZGQzI0MDkwMDA0OTIwMjAwMDUzMDQyMDAwNDIyCis6MTAyQUIwMDAxMDQwMDAxMjAwMDAwMDAwMTBBMDAwMTAwMDAwMDAwMEY0Cis6MTAyQUMwMDA5NjAyMDAwMjAwQTcyMDIxMDEwNDQwMjUyNDQyRkZGRUI3Cis6MTAyQUQwMDBBNzQyMTAxNjkyMDMwMDA0MjQwMkZGODAwMDQzMTAyNDMyCis6MTAyQUUwMDAzMDQyMDBGRjEwNDAwMDAzM0MwMjA0MDAwQTAwMDE3MjYzCis6MTAyQUYwMDAwMTAyNDAyNThDQzIwMDAwQUY0MjEwMTg4RjQyMDE3OEJECis6MTAyQjAwMDAwNDQwRkZGRTI0MDIwMDBBQTc0MjAxNDA5NjAyMDAwMjkwCis6MTAyQjEwMDAyNDA0MDAwOTMwNDIwMDA3MDAwMjEwMjMzMDQyMDAwNzVECis6MTAyQjIwMDBBNzQyMDE0Mjk2MDIwMDAyMjQ0MkZGRkVBNzQyMDE0NDRFCis6MTAyQjMwMDBBNzQwMDE0Njk3NDIwMTA0QTc0MjAxNDg4RjQyMDEwODdECis6MTAyQjQwMDAzMDQyMDAyMDUwNDAwMDAxMjQwNDAwMDE5MjAyMDAwNEExCis6MTAyQjUwMDAzMDQyMDAxMDE0NDAwMDAyMzQ4MzAwMTAwMDgwMTgyMTFECis6MTAyQjYwMDBBNzQzMDE0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAyQjcwMDAwMDAwMDAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjEwMDAwNDQxRkZGRTIyCis6MTAyQjkwMDAzMTAyRkZGRjEwNDAwMDA3MDAwMDAwMDA5MjAyMDAwNDE1Cis6MTAyQkEwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDAwMDA4RjQyMTAxODIzCis6MTAyQkIwMDBBQ0MyMDAwMDk2MDIwMDA2MzA0MkZGRkYyNDQyMDAwMjMxCis6MTAyQkMwMDAwMDAyMTA0MzAwMDIxMDQwMDM2Mjg4MjE5NjIyMDAwMDk4Cis6MTAyQkQwMDAxMTIwMDAwRDMwNDRGRkZGMDBBNzEwMjE4RjgzMDAzODIzCis6MTAyQkUwMDA4RjQ1MTAxQzAwMDIxMDgyMDAwMjEwODAwMDQzMTAyMTRCCis6MTAyQkYwMDBBQzQ1MDAwMDMwQTZGRkZGMEUwMDAyRDEwMDA1MkMwMkZDCis6MTAyQzAwMDAwMDQwMjAyMUE2MjIwMDAwOTIwMzAwMDQyNDAyRkY4MDNECis6MTAyQzEwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMUYwMDAwMDAwMDVECis6MTAyQzIwMDA5MjAyMDAwNTMwNDIwMDAyMTA0MDAwMUIwMDAwMDAwMDJDCis6MTAyQzMwMDA5NzQyMTAwQzI0NDJGRkZFQTc0MjEwMTYwMDAwMDAwMDJECis6MTAyQzQwMDAzQzAyMDQwMDM0NDIwMDMwQUY0MjEwMDAwMDAwMDAwMDlCCis6MTAyQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDkzCis6MTAyQzYwMDAwNDQxRkZGRTAwMDAwMDAwOTc0MjEwMEM4RjQ1MTAxQzJECis6MTAyQzcwMDAzMDQyRkZGRjI0NDIwMDMwMDAwMjEwODIwMDAyMTA4MDI4Cis6MTAyQzgwMDAwMDVCMTAyMUFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTEyCis6MTAyQzkwMDAwMDA1MkMwMkE2MjIwMDAwOTYwNDAwMDIyNDg0MDAwOEVECis6MTAyQ0EwMDAwRTAwMDFFNzMwODRGRkZGOTc0NDAxMDQwRTAwMDFGNTk4Cis6MTAyQ0IwMDAzMDg0RkZGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDU5Cis6MTAyQ0MwMDAzQzAyMTAwMDI3QkQwMDIwMDNFMDAwMDhBRjQyMDE3ODVECis6MTAyQ0QwMDAzMDg0RkZGRjMwODIwMDA3OEY4NTAwMjQxMDQwMDAwMkZGCis6MTAyQ0UwMDAyNDgzMDAwNzMwNjRGRkY4MDBBNDEwMjEzMDQyMUZGRjQ2Cis6MTAyQ0YwMDAwMzQyMTgyMTI0N0I0MDAwQUY4NTAwMjhBRjgyMDAyNEM2Cis6MTAyRDAwMDAwM0UwMDAwOEFGNDIwMDg0MzA4NEZGRkYzMDgyMDAwRkYwCis6MTAyRDEwMDA4Rjg1MDAyQzhGODYwMDM0MTA0MDAwMDIyNDgzMDAwRjIyCis6MTAyRDIwMDAzMDY0RkZGMDAwQTQxMDIxMDA0NjE4MkJBRjg1MDAzMDVFCis6MTAyRDMwMDAwMDQ2MjAyMzE0NjAwMDAyQUY4MjAwMkNBRjg0MDAyQ0Q4Cis6MTAyRDQwMDA4RjgyMDAyQzM0MDQ4MDAwMDM0MjE4MjEwMDY0MTgyMTczCis6MTAyRDUwMDBBRjgzMDAzODAzRTAwMDA4QUY0MjAwODA4RjgyMDAxNDg4Cis6MTAyRDYwMDAxMDQwMDAwODhGODIwMDA0OEY4MkZGQ0MxNDQwMDAwNUMxCis6MTAyRDcwMDA4RjgyMDAwNDNDMDJGRkJGMzQ0MkZGRkYwMDgyMjAyNDA4Cis6MTAyRDgwMDA4RjgyMDAwNDMwNDMwMDA2MjQwMjAwMDIxMDYyMDAwRjBDCis6MTAyRDkwMDAzQzAyMDEwMTJDNjIwMDAzNTA0MDAwMDUyNDAyMDAwNEEzCis6MTAyREEwMDAxMDYwMDAwRjNDMDIwMDAxMEEwMDAyMkUwMDAwMDAwMDJCCis6MTAyREIwMDAxMDYyMDAwNTI0MDIwMDA2MTQ2MjAwMEMzQzAyMDExMTlFCis6MTAyREMwMDAwQTAwMDIyNzAwODIxMDI1M0MwMjAwMTEwMDgyMTAyNTEzCis6MTAyREQwMDBBRjQyMTAwMDI0MDIwMDAxMEEwMDAyMkVBRjgyMDAwQzU0Cis6MTAyREUwMDAwMDgyMTAyNUFGNDIxMDAwQUY4MDAwMEMwMDAwMDAwMEYwCis6MTAyREYwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEU4Cis6MTAyRTAwMDA4RjgyMDAwQzEwNDAwMDA0MDAwMDAwMDA4RjQyMTAwMDcwCis6MTAyRTEwMDAwNDQxRkZGRTAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDg1Cis6MTAyRTIwMDA4RjgyMDAxMDI0NDNGODAwMDAwMjI5QzIyNEEyRkZGMDgwCis6MTAyRTMwMDAyQzYzMDMwMTEwNjAwMDAzMDAwMjEwNDIwQTAwMDI1NUQ3Cis6MTAyRTQwMDBBQzgyMDAwMDhGODMwMDE4MDBBMzEwMkIxNDQwMDAwQkVECis6MTAyRTUwMDAwMDAwMzgyMTAwQTMxMDIzMjQ0NjAwMDE4RjgyMDAxQ0FCCis6MTAyRTYwMDAwMDYyMTAyMTI0NDJGRkZGMDA0NTEwMkI1NDQwMDAwNDUzCis6MTAyRTcwMDAyNDAyRkZGRjBBMDAwMjU1QUM4NjAwMDAyNDAyRkZGRjc3Cis6MTAyRTgwMDAwQTAwMDI1QUFDODIwMDAwOEM4MjAwMDAzQzAzMDgwMDU5Cis6MTAyRTkwMDAyNDYzMUM1QzAwMDIxMTQwMDA0MzM4MjEwM0UwMDAwODU5Cis6MTAyRUEwMDAwMEUwMTAyMTNDMDkwODAwOEQyOTFEODAwMDA0NTE0MERDCis6MTAyRUIwMDAzQzE5MDgwMDI3MzkxQzVDMDBDMDc4MjEwMDgwNjAyMTgzCis6MTAyRUMwMDAyNDBFRkZGRjAwMDAzODIxMDE1OTQwMjExMTIwMDAzNjU3Cis6MTAyRUQwMDAwMDAwMzAyMTNDMTgwODAwMjcxODFEOTgzQzBEMDgwMDAwCis6MTAyRUUwMDAyNUFEMUQ5QzAwMEY1ODJCMDAwNjExODAwMDQ2MTAyMUI3Cis6MTAyRUYwMDAwMDAyMThDMDAwNzgxMDIxOEM0MjAwMDAxNTgyMDAyMENBCis6MTAyRjAwMDAwMDZEMjAyMThDQTIwMDAwNTQ0MDAwMDk4RDAyMDAxOEExCis6MTAyRjEwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDFBQzgyMDAwMDY3Cis6MTAyRjIwMDAzQzAxMDgwMEFDMjIxRDg0MEEwMDAyQ0YwMDAwMjAyMUQxCis6MTAyRjMwMDA4RjQ3MDAyMDAwMDAzMDIxMDAwMjExQzAxMTYwMDA0QUJDCis6MTAyRjQwMDBBRjQyMDAyMDhEMDgwMDFDM0MwOTAwMDg4Q0EzMDAwMDQzCis6MTAyRjUwMDAwMDY2MTgyMTAwMDMxODgwMDA3QTEwMjEwMDQ5MTAyMTEyCis6MTAyRjYwMDA4QzQ0MDAwMDI0QzYwMDAxMDA2ODE4MjEwMENGMTAyQkZCCis6MTAyRjcwMDAxNDQwRkZGNkFDNjQwMDAwMEEwMDAyQ0QwMDAwMDAwMDFGCis6MTAyRjgwMDA4Qzg0MDAwMDAwOEUxMDJCNTA0MDAwMDQyNEM2MDAwMUU5Cis6MTAyRjkwMDAwMDgwNzAyMTAwQzAzODIxMjRDNjAwMDEwMEM5MTAyQjE4Cis6MTAyRkEwMDAxNDQwRkZEMjAwMDYxMTgwMjQwMjAwMDFBQ0EyMDAwMEYwCis6MTAyRkIwMDAzQzAyMDgwMDhDNDIxRDdDM0MwMzA4MDA4QzYzMUQ4MDkxCis6MTAyRkMwMDAwMDQzMTAyQjE0NDAwMDJBMjQwNEZGRkUwMTU5MTAyMTU1Cis6MTAyRkQwMDA4QzQyMDAxODEwNDAwMDI2MjQwNEZGRkYwMDA3MjE4MEM3Cis6MTAyRkUwMDAzQzA1MDgwMDhDQTUxRDg0MDA4NzIwMjE4RDA2MDAxODUzCis6MTAyRkYwMDAwMDA0MjBDMDNDMDIwODAwMjQ0MjFEOTgwMDgyMTAyMUQ5Cis6MTAzMDAwMDAzQzAzMDgwMDI0NjMxRDlDQUM0QzAwMDAyNEE1MDAwMTc3Cis6MTAzMDEwMDAwMDgzMTgyMTNDMDIwODAwMjQ0MjFEQTBBQzY1MDAwMDdBCis6MTAzMDIwMDAwMDA2MzFDMDNDMDEwODAwQUMyNTFEODQwMDgyMjAyMTJGCis6MTAzMDMwMDA4RjQ3MDAyMEFEMDQwMDFDQUY0NjAwMjAxMUUwMDAwQUJECis6MTAzMDQwMDAwMDAwMzAyMTNDMDIwMDA4MDM0MjI4MjE4Q0EyMDAwMDJECis6MTAzMDUwMDAyNEM2MDAwMTAwQ0YxODJCQUM4MjAwMDAyNEE1MDAwNDc4Cis6MTAzMDYwMDAxNDYwRkZGQTI0ODQwMDA0QUY0NzAwMjAwMDAwMjAyMUYwCis6MTAzMDcwMDAwM0UwMDAwODAwODAxMDIxMzA4NEZGRkYzMEM2RkZGRjBFCis6MTAzMDgwMDAwMDA1MkMwMDAwQTYyODI1Mzg4MkZGRkYwMDQ1MTAyMUVFCis6MTAzMDkwMDAwMDQ1MjgyQjAwNDUxMDIxMDAwMjFDMDIzMDQyRkZGRjkyCis6MTAzMEEwMDAwMDQzMTAyMTAwMDIxQzAyMzA0MkZGRkYwMDQzMTAyMUE4Cis6MTAzMEIwMDAzODQyRkZGRjAzRTAwMDA4MzA0MkZGRkYyN0JERkZDODkyCis6MTAzMEMwMDBBRkJGMDAzMEFGQjMwMDJDQUZCMjAwMjhBRkIxMDAyNEM3Cis6MTAzMEQwMDBBRkIwMDAyMDNDMDQ2MDA4OEM4MjUwMDAyNDAzRkY3RkM2Cis6MTAzMEUwMDAzQzA2NjAwMDAwNDMxMDI0MzQ0MjM4MENBQzgyNTAwMDhGCis6MTAzMEYwMDA4Q0MyNEMxQzNDMUE4MDAwMDAwMjE2MDIzMDQyMDAwRkE5Cis6MTAzMTAwMDAxMDQwMDAwN0FGODIwMDFDOENDMzRDMUMzQzAyMDAxRjA3Cis6MTAzMTEwMDAzNDQyRkMwMDAwNjIxODI0MDAwMzE5QzJBRjgzMDAxODc3Cis6MTAzMTIwMDA4RjQyMDAwODI3NUI0MDAwMzQ0MjAwMDFBRjQyMDAwODk0Cis6MTAzMTMwMDBBRjgwMDAyNDNDMDI2MDFDQUY0MDAwODBBRjQwMDA4NEEwCis6MTAzMTQwMDA4QzQ1MDAwODhDQzMwODA4MzQwMjgwMDAwMzQyMjAyMTBCCis6MTAzMTUwMDAyNDAyRkZGMDAwNjIxODI0M0MwMjAwODAzQzAxMDgwMEI5Cis6MTAzMTYwMDBBQzIyMDQyMDNDMDI1NzA5QUY4NDAwMzgxNDYyMDAwNEVBCis6MTAzMTcwMDBBRjg1MDAzNDI0MDIwMDAxMEEwMDAzMTRBRjgyMDAxNDVBCis6MTAzMTgwMDBBRjgwMDAxNDI0MDMwMDNEMjQwMjAwMDQzQzAxMDgwMDI5Cis6MTAzMTkwMDBBQzIyMUQ5NDNDMDEwODAwQUMyMzFEOTAzQzAxMDgwMEFBCis6MTAzMUEwMDBBQzIzMUQ4QzNDMDEwODAwQUMyMzFEODgzQzEzMDgwMDk3Cis6MTAzMUIwMDAyNjczMUM1QzI0MDQwMDA0M0MwMjA4MDAyNDQyMUM3NDk2Cis6MTAzMUMwMDAyNDAzMDAwODI0NjNGRkZGQUM0MDAwMDRBQzQwMDAwMDZGCis6MTAzMUQwMDAwNDYxRkZGQzI0NDIwMDIwMDAwNDEwQzAwMDQ0MTAyMUMwCis6MTAzMUUwMDAyNDQyMDAzRDNDMDEwODAwQUMyMjFEOTAyNDAyMDAwMTU1Cis6MTAzMUYwMDAzQzAxMDgwMEFDMjIxRDdDMjQwMkZGRkYzQzAxMDgwMEJBCis6MTAzMjAwMDBBQzIyMUQ5ODNDMDEwODAwQUMyMDFEODQ4RjQyMDAwMEI4Cis6MTAzMjEwMDAzODQyMDAwMTMwNDIwMDAxMTQ0MEZGRkM4RjgyMDAxNDRDCis6MTAzMjIwMDAxMDQwMDAxNjAwMDAwMDAwOTc0MjAxMDQxMDQwMDAwNTA1Cis6MTAzMjMwMDA4RjgzMDAwMDE0NjAwMDA3MjQ2MkZGRkYwQTAwMDM0QjI1Cis6MTAzMjQwMDAyQzYyMDAwQTJDNjIwMDEwNTA0MDAwMDQ4RjgzMDAwMEEyCis6MTAzMjUwMDAyNDYyMDAwMUFGODIwMDAwOEY4MzAwMDAyQzYyMDAwQTBDCis6MTAzMjYwMDAxNDQwMDAwMzJDNjIwMDA3MEEwMDAzNTJBRjgwRkZDQzE5Cis6MTAzMjcwMDAxMDQwMDAwMjI0MDIwMDAxQUY4MkZGQ0M4RjQzMDEwOEZFCis6MTAzMjgwMDA4RjQ0MDEwMDMwNjIyMDAwQUY4MzAwMDQxMDQwMDAwODJBCis6MTAzMjkwMDBBRjg0MDAxMDNDMDIwODAwOEM0MjA0MkMyNDQyMDAwMTQwCis6MTAzMkEwMDAzQzAxMDgwMEFDMjIwNDJDMEEwMDA2RDczQzAyNDAwMDc2Cis6MTAzMkIwMDAzMDY1MDIwMDE0QTAwMDAzMjQwMjBGMDAxNDgyMDMwOUU5Cis6MTAzMkMwMDAyNDAyMEQwMDk3NDIwMTA0MTA0MDAzNzEzQzAyNDAwMEFCCis6MTAzMkQwMDAzMDYyNDAwMDE0NDAwMEFEOEY4MjAwMzg4QzQ0MDAwOEZBCis6MTAzMkUwMDA4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDBBRjQyMDE3OEJCCis6MTAzMkYwMDAyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDI5NzQyMDEwNDZFCis6MTAzMzAwMDA4Rjg0MDAwNDMwNTFGRkZGMzA4MjAwMDExMDQwMDAwNzFECis6MTAzMzEwMDAwMjIwODAyMTI2MjNGRkZFMjQwMjAwMDIzMDcwRkZGRkRFCis6MTAzMzIwMDBBNzQyMDE0NjBBMDAwMzdGQTc0MzAxNDhBNzQwMDE0NjgwCis6MTAzMzMwMDAzQzAyMDgwMDhDNDIwNDNDMTQ0MDAwMEQ4RjgzMDAxMEI2Cis6MTAzMzQwMDAzMDgyMDAyMDE0NDAwMDAyMjQwMzAwMDkyNDAzMDAwMUZECis6MTAzMzUwMDAwMDYwMjAyMThGODMwMDEwMjQwMjA5MDA1MDYyMDAwMUM4Cis6MTAzMzYwMDAzNDg0MDAwNEE3NDQwMTRBMEEwMDAzOUEwMDAwMDAwMEM0Cis6MTAzMzcwMDAyNDAyMEYwMDE0NjIwMDA1MzA4MjAwMjAxNDQwMDAwNjcxCis6MTAzMzgwMDAyNDAzMDAwRDBBMDAwMzk5MjQwMzAwMDUxNDQwMDAwMkUxCis6MTAzMzkwMDAyNDAzMDAwOTI0MDMwMDAxQTc0MzAxNEEzQzAyMDgwMDVBCis6MTAzM0EwMDA4QzQyMDQyMDNDMDQwMDQ4MEUwMDAyMEEwMDQ0MjAyNTAwCis6MTAzM0IwMDAwRTAwMDIzMzAwMDAwMDAwOEY4MjAwMEMxMDQwMDAzRTFGCis6MTAzM0MwMDAwMDAwMDAwMDhGNDIxMDAwM0MwMzAwMjAwMDQzMTAyNDQ2Cis6MTAzM0QwMDAxMDQwMDAzOThGODIwMDA0MzA0MjAwMDIxMDQwMDAzNjU1Cis6MTAzM0UwMDAwMDAwMDAwMDk3NDIxMDE0MTQ0MDAwMzMwMDAwMDAwMDU5Cis6MTAzM0YwMDA5NzQyMTAwODhGODgwMDM4MzA0MkZGRkYyNDQyMDAwNkIxCis6MTAzNDAwMDAwMDAyMTg4MjAwMDMzODgwMDBFODMwMjEzMDQzMDAwMUI4Cis6MTAzNDEwMDA4Q0M0MDAwMDEwNjAwMDA0MzA0MjAwMDMwMDAwMDAwRDY2Cis6MTAzNDIwMDAwQTAwMDNEQjAwRTgxMDIxNTQ0MDAwMTAzMDg0RkZGRjQ1Cis6MTAzNDMwMDAzQzA1RkZGRjAwODUyMDI0MDA4NTE4MjYwMDAzMTgyQjdCCis6MTAzNDQwMDAwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDUwMDAwMDAwMDcxCis6MTAzNDUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDIxQzFECis6MTAzNDYwMDA4Q0MyMDAwMDBBMDAwM0RBMDA0NTIwMjUzODgzRkZGRkU0Cis6MTAzNDcwMDAwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNUZCCis6MTAzNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDJGCis6MTAzNDkwMDAyNDAwMDIyNThDQzIwMDAwMzQ0NEZGRkYwMEU4MTAyMTA0Cis6MTAzNEEwMDBBQzQ0MDAwMDNDMDIwODAwOEM0MjA0MzAyNDQyMDAwMTdECis6MTAzNEIwMDAzQzAxMDgwMEFDMjIwNDMwOEY2MjAwMDA4Rjg0MDAzODg5Cis6MTAzNEMwMDBBRjgyMDAwODhDODMwMDAwMzQwMkZGRkYxNDYyMDAwRkZCCis6MTAzNEQwMDAwMDAwMTAyMTNDMDUwODAwOENBNTA0NTQzQzA0MDgwMEExCis6MTAzNEUwMDA4Qzg0MDQ1MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMUIxCis6MTAzNEYwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NTQzQzAxMDgwMDUyCis6MTAzNTAwMDBBQzI0MDQ1MDBBMDAwNkNEMjQwNDAwMDg4QzgyMDAwMDdDCis6MTAzNTEwMDAzMDQyMDEwMDEwNDAwMDBGMDAwMDEwMjEzQzA1MDgwMDVGCis6MTAzNTIwMDA4Q0E1MDQ0QzNDMDQwODAwOEM4NDA0NDgwMEIwMjgyMTdECis6MTAzNTMwMDAwMEIwMzAyQjAwODIyMDIxMDA4NjIwMjEzQzAxMDgwMEIxCis6MTAzNTQwMDBBQzI1MDQ0QzNDMDEwODAwQUMyNDA0NDgwQTAwMDZDRDFDCis6MTAzNTUwMDAyNDA0MDAwODNDMDUwODAwOENBNTA0NDQzQzA0MDgwMDMxCis6MTAzNTYwMDA4Qzg0MDQ0MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMTQwCis6MTAzNTcwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NDQzQzAxMDgwMEUxCis6MTAzNTgwMDBBQzI0MDQ0MDBBMDAwNkNEMjQwNDAwMDg4RjYyMDAwODIxCis6MTAzNTkwMDA4RjYyMDAwMDAwMDIxNjAyMzA0MzAwRjAyNDAyMDAzMDY3Cis6MTAzNUEwMDAxMDYyMDAwNTI0MDIwMDQwMTA2MjAxNkI4RjgyMDAyMDJGCis6MTAzNUIwMDAwQTAwMDZENTI0NDIwMDAxMTRBMDAwMDUwMDAwMDAwMDA2Cis6MTAzNUMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1MDc4Cis6MTAzNUQwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQjE1Cis6MTAzNUUwMDAyN0E0MDAxMDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMEM2Cis6MTAzNUYwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNTc4RTAyMDAwMEIxCis6MTAzNjAwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDU4Cis6MTAzNjEwMDAwMDAwMDAwMDI0MDAwMjVBOEY2MjAwMEMwNDQzMDAwM0UzCis6MTAzNjIwMDAyNDAyMDAwMTBBMDAwNTVEQUUwMDAwMDBBRTAyMDAwMEE5Cis6MTAzNjMwMDA4RjgyMDAzODhDNDUwMDA4QTIwMDAwMDc4RjY1MDAwQ0JGCis6MTAzNjQwMDA4RjY0MDAwNDMwQTNGRkZGMDAwNDI0MDIwMDg1MjAyM0MwCis6MTAzNjUwMDAzMDgyMDBGRjAwNDMxMDIxMjQ0MjAwMDUwMDAyODg4M0NECis6MTAzNjYwMDAyRTIyMDA4MUE2MDUwMDBBMTQ0MDAwMDVBMjA0MDAwNEQxCis6MTAzNjcwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI3MkE1Cis6MTAzNjgwMDAzQzA3MDgwMDhDRTcxRDgwOEZBODAwMTAyNDA5RkZGRjZECis6MTAzNjkwMDAwMDAwNTAyMTEwRTAwMDEzMDAwMDMwMjEzQzBDMDgwMDE1Cis6MTAzNkEwMDAyNThDMUQ5QzAxODAyODIxMDAwMDE4MjE4Q0EyRkZGQzg0Cis6MTAzNkIwMDA1MTAyMDAyRjAwNkMxODIxOENBNDAwMDAyNDYzMDIwODIyCis6MTAzNkMwMDAwMDg5MTAyQjEwNDAwMDAzMjRBNTAyMDgwMDgwNDgyMTI3Cis6MTAzNkQwMDAwMEMwNTAyMTI0QzYwMDAxMDBDNzEwMkI1NDQwRkZGNDQ1Cis6MTAzNkUwMDA4Q0EyRkZGQzNDMDUwODAwOENBNTFEODAzQzAyMDgwMDU0Cis6MTAzNkYwMDA4QzQyMUQ3QzNDMDkwODAwMjUyOTFDNjAzQzAzMDgwMDA1Cis6MTAzNzAwMDAyNDYzMUQ5ODAwQTIxMDJCM0MwQzA4MDAyNThDMUQ5Q0U2Cis6MTAzNzEwMDAzQzA0MDgwMDhDODQxRDg0M0MwQjA4MDAyNTZCMURBMDE0Cis6MTAzNzIwMDAxMDQwMDAxQTAwMDgzMTQwMDAwNTExODAwMDQ1MTAyMUFBCis6MTAzNzMwMDAwMDAyMTBDMDAwQzkzODIxMjQ4NDAwMDEwMDRCMzAyMTUwCis6MTAzNzQwMDAwMDQzMTgyMTI0QTUwMDAxMDA0QzEwMjFBQzY4MDAwMEEyCis6MTAzNzUwMDBBQ0U2MDAxODNDMDEwODAwQUMyNDFEODRBQzQ0MDAwMDE5Cis6MTAzNzYwMDAzQzAxMDgwMEFDMjUxRDgwMEEwMDA0QTg4RTA0MDAxQzQyCis6MTAzNzcwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDEzQzAxMDgwMEU4Cis6MTAzNzgwMDBBQzIyMUQ4NDBBMDAwNEE3QUM2MjAwMDAwMDBBMTE4MDZDCis6MTAzNzkwMDAwMDRBMTAyMTAwMDIxMEMwMDA0MzI4MjE4Q0EzMDAwMDIxCis6MTAzN0EwMDAwMDRDMzgyMTI0ODQwMDAxMDAwMzE5NDAwMEM5MzAyMTU1Cis6MTAzN0IwMDAwMDY5MTgyMTAwNEIxMDIxQUNBODAwMDBBQzYwMDAxODczCis6MTAzN0MwMDAzQzAxMDgwMEFDMjQxRDg0QUNDMjAwMThBQ0U0MDAwMDJECis6MTAzN0QwMDA4RTA0MDAxQzhGODUwMDM4MEUwMDA2RTcwMjIwMzAyMTgxCis6MTAzN0UwMDA4RjYyMDAwNDhGNDMwMTA4QTYwMjAwMDgzQzAyMTAwMDBCCis6MTAzN0YwMDAwMDYyMTgyNDEwNjAwMDA4MDAwMDAwMDA5NzQyMDEwNEQ1Cis6MTAzODAwMDA5MjAzMDAwNzI0NDJGRkVDMzQ2MzAwMDIzMDQ1RkZGRkJGCis6MTAzODEwMDAwQTAwMDRCQ0EyMDMwMDA3OTc0MjAxMDQyNDQyRkZGMEZGCis6MTAzODIwMDAzMDQ1RkZGRjk2MDYwMDA4MkNDMjAwMTM1NDQwMDAwNUU3Cis6MTAzODMwMDA5MjAzMDAwNzkyMDIwMDA3MzQ0MjAwMDFBMjAyMDAwNzJGCis6MTAzODQwMDA5MjAzMDAwNzI0MDIwMDAxMTA2MjAwMDUyNDAyMDAwMzE1Cis6MTAzODUwMDAxMDYyMDAwQjMwQzdGRkZGMEEwMDA0REIyNEUyMDAwMjA1Cis6MTAzODYwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMEMwMDY0MTgyNDU2Cis6MTAzODcwMDAwMDY1MTgyNUFDNDMwMDBDMEEwMDA0REEzMEM3RkZGRkNFCis6MTAzODgwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMTAwMDY0MTgyNDMyCis6MTAzODkwMDAwMDY1MTgyNUFDNDMwMDEwMzBDN0ZGRkYyNEUyMDAwMjhBCis6MTAzOEEwMDAwMDAyMTA4M0EyMDIwMDA1OEY4MzAwMzgzMDQyMDBGRjFGCis6MTAzOEIwMDAwMDAyMTA4MDAwNDMzMDIxOENDNTAwMDA4Q0MyMDAwMDQzCis6MTAzOEMwMDAyNDAzMDAwNDAwMDIxNzAyMTQ0MzAwMTMwMDAwMDAwMDQ4Cis6MTAzOEQwMDA5NzQyMDEwNDNDMDNGRkZGMDBBMzE4MjQzMDQyRkZGRjdFCis6MTAzOEUwMDAwMDQ3MTAyMzI0NDJGRkZFMDA2MjI4MjVBQ0M1MDAwMERCCis6MTAzOEYwMDA5MjA0MDAwNThFMDMwMDFDMzA4MjAwRkYwMDAyMTA4MDNECis6MTAzOTAwMDAwMDQzMTAyMTkwNDIwMDAwMzA0MjAwMEYwMDQ0MTAyMTdCCis6MTAzOTEwMDAwQTAwMDUxMEEyMDIwMDA2OENDNDAwMDQ5NzQyMDEwNEFDCis6MTAzOTIwMDA5NjAzMDAwQTMwODVGRkZGMzA0MkZGRkYwMDQ3MTAyMzU3Cis6MTAzOTMwMDAyNDQyRkZENjAwMDIxNDAwMDBBMjI4MjVBQ0M1MDAwNEQyCis6MTAzOTQwMDA5MjAyMDAwNzkyMDQwMDA1MjQ2MzAwMjgwMDAzMTg4M0Y0Cis6MTAzOTUwMDAwMDY0MTgyMTM0NDIwMDA0QTIwMzAwMDZBMjAyMDAwN0ZBCis6MTAzOTYwMDA4RjgyMDAwNDI0MDNGRkZCMzQ0MjAwMDIwMDQzMTAyNDMyCis6MTAzOTcwMDBBRjgyMDAwNDkyMDMwMDA2OEUwNzAwMUM4Rjg2MDAzODc5Cis6MTAzOTgwMDAwMDAzMTg4MDAwNjcxMDIxOEM0NDAwMEMzQzAyRkZGNkY1Cis6MTAzOTkwMDAzNDQyRkZGRjAwODIyODI0MDA2NjE4MjFBRTA0MDAwQzg4Cis6MTAzOUEwMDBBQzY1MDAwQzkyMDMwMDA2OEUwNDAwMEMzQzAyRkY3RjA1Cis6MTAzOUIwMDAzNDQyRkZGRjAwMDMxODgwMDBBMjI4MjQwMDgyMjAyNDQ0Cis6MTAzOUMwMDAwMDY3MTgyMUFFMDQwMDBDQUM2NTAwMEM5MjAyMDAwNkUyCis6MTAzOUQwMDAwMDAyMTA4MDAwNDcxMDIxOTQ0NTAwMTJBQzQ1MDAxMEYxCis6MTAzOUUwMDA5MjAyMDAwNjAwMDIxMDgwMDA0NjEwMjFBQzQ1MDAxMDMzCis6MTAzOUYwMDA4RkEyMDAxMDkyMDMwMDA1MDAwMjExNDAwMDAzMTg4MEZFCis6MTAzQTAwMDAwMDY3MTgyMTAwNTMyMDIxOEM2MjAwMDQ4QzgzMDAxODY5Cis6MTAzQTEwMDAxNDYwMDAwRUFFMDIwMDE0M0MwMzA4MDA4QzYzMUQ4QzgxCis6MTAzQTIwMDBBQzgzMDAxODNDMDIwODAwOEM0MjFEOTAwMDYyMTAyQkYxCis6MTAzQTMwMDAxMDQwMDAxOTAwMDAwMDAwM0MwMjA4MDA4QzQyMUQ5NDU4Cis6MTAzQTQwMDAwMDYyMTAyMTNDMDEwODAwQUMyMjFEOEM4RTAyMDAxODdGCis6MTAzQTUwMDA4RjQ4MDAyMDAwMDAzMDIxMDAwMjExQzAxMjIwMDAwQjBFCis6MTAzQTYwMDBBRjQyMDAyMDNDMDIwMDA4MDM0MjI4MjEwMEUwMjAyMTUwCis6MTAzQTcwMDA4QzgyMDAwMDI0QzYwMDAxMDBEMTE4MkJBQ0EyMDAwMEVCCis6MTAzQTgwMDAyNDg0MDAwNDE0NjBGRkZBMjRBNTAwMDRBRjQ4MDAyMDM5Cis6MTAzQTkwMDAwQTAwMDU1RTI0MDIwMDEwMDAwMDAwMDAwMDAwMDAwRDc2Cis6MTAzQUEwMDAwMDAwMDAwMDI0MDAwMkQ0MjQwMjAwMTBBNzQyMDE0MEJDCis6MTAzQUIwMDAyNDAyMDAwMkE3NDAwMTQyQTc0MDAxNDRBNzQyMDE0NjU4Cis6MTAzQUMwMDA5NzQyMDEwNDNDMDQwMDA4MjQ0MkZGRkVBNzQyMDE0ODNCCis6MTAzQUQwMDAyNDAyMDAwMTBFMDAwMjBBQTc0MjAxNEE5NjAzMDAwQUNFCis6MTAzQUUwMDA5MjAyMDAwNDAwNDMxMDIxMjQ0MjAwMDIzMDQyMDAwN0U5Cis6MTAzQUYwMDAwMDAyMTAyMzMwNDIwMDA3MEUwMDAyMzNBRTAyMDAxMDE1Cis6MTAzQjAwMDA4RjYyMDAwMDNDMDMwODAwOEM2MzA0NDQyNDA0MDAxMDBFCis6MTAzQjEwMDBBRjgyMDAwODk3NDIwMTA0MzA0MkZGRkYyNDQyRkZGRUJCCis6MTAzQjIwMDAwMDQwMzgyMTAwMDIzN0MzM0MwMjA4MDA4QzQyMDQ0MEE4Cis6MTAzQjMwMDAwMDY3MTgyMTAwNjcyODJCMDA0NjEwMjEwMDQ1MTAyMTNFCis6MTAzQjQwMDAzQzAxMDgwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MEMyCis6MTAzQjUwMDAwQTAwMDY2MjAwMDAwMDAwMTRBMDAwMDUwMDAwMDAwMDNBCis6MTAzQjYwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwNDFECis6MTAzQjcwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQjZGCis6MTAzQjgwMDAyN0E0MDAxNDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMDFDCis6MTAzQjkwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMEI5MjA2MDAwNDRBCis6MTAzQkEwMDA4RkE0MDAxNDI3QTUwMDE4MDAwNjMwODIwRTAwMDI1Q0M2Cis6MTAzQkIwMDBBRkEwMDAxODUwNDAwMDA2OEUwMjAwMDAwMDAwMDAwMDc4Cis6MTAzQkMwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMTE4RTAyMDAwMDIwCis6MTAzQkQwMDA1NDQwMDAwNjkyMDIwMDA3MDAwMDAwMDAwMDAwMDAwREEzCis6MTAzQkUwMDAwMDAwMDAwMDI0MDAwMzE2OTIwMjAwMDczMDQyMDAwNDg3Cis6MTAzQkYwMDAxMDQwMDAwNThGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMkMyCis6MTAzQzAwMDAwMDQzMTAyNEFGODIwMDA0OEY2MjAwMDQwNDQzMDAwOUMzCis6MTAzQzEwMDA5MjAyMDAwNzkyMDIwMDA2OEUwMzAwMUM4RTA0MDAwQzI0Cis6MTAzQzIwMDAwMDAyMTA4MDAwNDMxMDIxQUM0NDAwMENBRTAwMDAwMEU0Cis6MTAzQzMwMDA5MjAyMDAwNzMwNDIwMDA0NTQ0MDAwMEI5MjAzMDAwNDNCCis6MTAzQzQwMDA5MjAzMDAwNThFMDQwMDE0OEUwNTAwMUMwMDAzMTg4MEVBCis6MTAzQzUwMDAzQzAyMDAwMTAwODIyMDIxMDA2NTE4MjFBRTA0MDAxNEZFCis6MTAzQzYwMDBBQzY0MDAwNDkyMDMwMDA0OTYwMjAwMEEwMDYyMTAyMTcyCis6MTAzQzcwMDAyNDQyMDAwNTAwMDI5MDgzOEZBMjAwMTgxMDQwMDAwRDFFCis6MTAzQzgwMDAyNzcxMDAwODhGQTQwMDE0MDAwMzEwODIwMjQyMzAyMzIxCis6MTAzQzkwMDAyN0E1MDAxODBFMDAwMjVDQUZBMjAwMTg1MDQwMDAwNkQ1Cis6MTAzQ0EwMDA4RTA1MDAxQzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDU4Cis6MTAzQ0IwMDAyNDAwMDMzRjhFMDUwMDFDMDIyMDIwMjEwRTAwMDZFNzkxCis6MTAzQ0MwMDAwMjQwMzAyMTkyMDQwMDA2OEY2NTAwMDQzQzAyN0ZGRjExCis6MTAzQ0QwMDAwMDA0MjA4MDAwOTEyMDIxOEM4MzAwMDQzNDQyRkZGRkU3Cis6MTAzQ0UwMDAwMEEyMjgyNDAwNjUxODIxQUM4MzAwMDQ5MjAyMDAwNzdBCis6MTAzQ0YwMDA5MjAzMDAwNDkyMDUwMDA1MzA0MjAwMDQxMDQwMDAxNEI1Cis6MTAzRDAwMDA5NjA3MDAwODMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMTkzCis6MTAzRDEwMDA4Q0E0MDAwNDk3NDIwMTA0OTYwNjAwMEEzMDYzMDBGRjU5Cis6MTAzRDIwMDAzMDQyRkZGRjAwNDMxMDIxMDA0NjEwMjEzMEUzRkZGRjI3Cis6MTAzRDMwMDAwMDQzMTAyMzI0NDJGRkQ4MzA4NEZGRkYwMDAyMTQwMDA4Cis6MTAzRDQwMDAwMDgyMjAyNUFDQTQwMDA0MEEwMDA2MTY5MjAzMDAwNzk2Cis6MTAzRDUwMDAzMEE1MDBGRjAwMDUyODgwMDBCMTI4MjE4Q0E0MDAwMEI4Cis6MTAzRDYwMDA5NzQyMDEwNDMwNjMwMEZGMzA0MkZGRkYwMDQzMTAyMUZGCis6MTAzRDcwMDAwMDQ3MTAyMzNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRjU1Cis6MTAzRDgwMDAwMDgyMjAyNUFDQTQwMDAwOTIwMzAwMDcyNDAyMDAwMTU5Cis6MTAzRDkwMDAxMDYyMDAwNjAwMDAwMDAwMjQwMjAwMDMxMDYyMDAxMUZGCis6MTAzREEwMDAwMDAwMDAwMDBBMDAwNjM5OEUwMzAwMTA5NzQyMDEwNDRCCis6MTAzREIwMDA5MjAzMDAwNDk2MDUwMDBBOEUyNDAwMEMwMDQzMTAyMTkzCis6MTAzREMwMDAwMDQ1MTAyMTI0NDJGRkYyM0MwM0ZGRkYwMDgzMjAyNDIyCis6MTAzREQwMDAzMDQyRkZGRjAwODIyMDI1QUUyNDAwMEMwQTAwMDYzOTg1Cis6MTAzREUwMDA4RTAzMDAxMDk3NDIwMTA0OTIwMzAwMDQ5NjA1MDAwQTE2Cis6MTAzREYwMDA4RTI0MDAxMDAwNDMxMDIxMDA0NTEwMjEyNDQyRkZFRUM0Cis6MTAzRTAwMDAzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkYwMDgyMjAyNTc3Cis6MTAzRTEwMDBBRTI0MDAxMDhFMDMwMDEwMjQwMjAwMEFBNzQyMDE0MEM1Cis6MTAzRTIwMDBBNzQzMDE0Mjk2MDMwMDBBOTIwMjAwMDQzQzA0MDA0MEFBCis6MTAzRTMwMDAwMDQzMTAyMUE3NDIwMTQ0QTc0MDAxNDY5NzQyMDEwNEQ0Cis6MTAzRTQwMDBBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QUNCCis6MTAzRTUwMDAwRTAwMDIzMzAwMDAwMDAwOEY2MjAwMDA5MjAzMDAwNDk1Cis6MTAzRTYwMDAwMDAwMjAyMUFGODIwMDA4OTc0MjAxMDQ5NjA2MDAwQTU0Cis6MTAzRTcwMDAzMDQyRkZGRjAwNjIxODIxMDA2MDI4MjEzQzAzMDgwMDQ3Cis6MTAzRTgwMDA4QzYzMDQ0NDNDMDIwODAwOEM0MjA0NDAwMDY1MTgyMTA1Cis6MTAzRTkwMDAwMDQ0MTAyMTAwNjUzODJCMDA0NzEwMjEzQzAxMDgwMDI4Cis6MTAzRUEwMDBBQzIzMDQ0NDNDMDEwODAwQUMyMjA0NDA5MjA0MDAwNDBBCis6MTAzRUIwMDAwMDg2MjAyMTI0ODQwMDBBMzA4NEZGRkYwRTAwMDFFN0UxCis6MTAzRUMwMDAwMDAwMDAwMDk3NDQwMTA0MzA4NEZGRkYwRTAwMDFGNTVDCis6MTAzRUQwMDAwMDAwMDAwMDNDMDIxMDAwQUY0MjAxNzgwQTAwMDZENDQ2Cis6MTAzRUUwMDA4RjgyMDAyMDE0ODIwMDI3MzA2MjAwMDY5NzQyMDEwNDZFCis6MTAzRUYwMDAxMDQwMDA2NzNDMDI0MDAwMzA2MjQwMDAxMDQwMDAwNTY2Cis6MTAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMEE0Cis6MTAzRjEwMDAyNDAwMDQxQThGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEE2Cis6MTAzRjIwMDBBRjQyMDE3ODI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0MkE1Cis6MTAzRjMwMDA4RjgyMDAwNDk3NDMwMTA0MzA0MjAwMDExMDQwMDAwN0MzCis6MTAzRjQwMDAzMDcwRkZGRjI2MDNGRkZFMjQwMjAwMDJBNzQyMDE0NjU1Cis6MTAzRjUwMDBBNzQzMDE0ODBBMDAwNjhDMjQwMjAwMERBNzQwMDE0NjMxCis6MTAzRjYwMDAyNDAyMDAwREE3NDIwMTRBOEY2MjAwMDAyNDA0MDAwOEM5Cis6MTAzRjcwMDBBRjgyMDAwODBFMDAwMUU3MDAwMDAwMDAwQTAwMDY2NjlDCis6MTAzRjgwMDAwMjAwMjAyMTEwNDAwMDQyM0MwMjQwMDA5MzYyMDAwMEU5Cis6MTAzRjkwMDAzMDQzMDBGMDI0MDIwMDEwMTA2MjAwMDUyNDAyMDA3MDdCCis6MTAzRkEwMDAxMDYyMDAzNThGODIwMDIwMEEwMDA2RDUyNDQyMDAwMUVECis6MTAzRkIwMDA4RjYyMDAwMDk3NDMwMTA0MzA1MEZGRkYzMDcxRkZGRjE0Cis6MTAzRkMwMDA4RjQyMDE3ODA0NDBGRkZFMzIwMjAwMDcwMDAyMTAyM0Y2Cis6MTAzRkQwMDAzMDQyMDAwNzI0MDMwMDBBMjYwNEZGRkVBNzQzMDE0MEU1Cis6MTAzRkUwMDBBNzQyMDE0MkE3NDQwMTQ0QTc0MDAxNDZBNzUxMDE0ODA2Cis6MTAzRkYwMDA4RjQyMDEwODMwNDIwMDIwMTQ0MDAwMDIyNDAzMDAwOUNGCis6MTA0MDAwMDAyNDAzMDAwMUE3NDMwMTRBMEUwMDAyMEEzQzA0MDA0MEI5Cis6MTA0MDEwMDAwRTAwMDIzMzAwMDAwMDAwM0MwNzA4MDA4Q0U3MDQ0NDU3Cis6MTA0MDIwMDAwMjExMTAyMTI0NDJGRkZFM0MwNjA4MDA4Q0M2MDQ0MDA5Cis6MTA0MDMwMDAwMDQwMTgyMTAwRTMzODIxMDAwMDEwMjE4RjY1MDAwMEE2Cis6MTA0MDQwMDAwMEUzNDAyQjAwQzIzMDIxMjYwNDAwMDgwMEM4MzAyMUM0Cis6MTA0MDUwMDAzMDg0RkZGRkFGODUwMDA4M0MwMTA4MDBBQzI3MDQ0NDEyCis6MTA0MDYwMDAzQzAxMDgwMEFDMjYwNDQwMEUwMDAxRTcwMDAwMDAwMEZGCis6MTA0MDcwMDAwQTAwMDY2NjAyMjAyMDIxMEUwMDAxMzkwMDAwMDAwMDFGCis6MTA0MDgwMDA4RjgyMDAyMDI0NDIwMDAxQUY4MjAwMjAzQzAyNDAwMEM5Cis6MTA0MDkwMDBBRjQyMDEzODBBMDAwMzM2MDAwMDAwMDAzMDg0RkZGRjAxCis6MTA0MEEwMDAzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDcwMDAwMDAwMDZECis6MTA0MEIwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMUY3Cis6MTA0MEMwMDAwQTAwMDZERDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTFBCis6MTA0MEQwMDAxMEMwMDAwNjI0QzZGRkZGOENBMjAwMDAyNEE1MDAwNDI3Cis6MTA0MEUwMDBBQzgyMDAwMDBBMDAwNkU3MjQ4NDAwMDQwM0UwMDAwODE0Cis6MTA0MEYwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDExCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjA2Cis6MTA0MTEwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDk5Cis6MDQ0MTIwMDAwMDAwMDAwMTlBCis6MEM0MTI0MDAwQTAwMDAyQTAwMDAwMDAwMDAwMDAwMDA1QgorOjEwNDEzMDAwMDAwMDAwMEQ3NDc4NzAzNTJFMzAyRTMwNkEzOTAwMDA4MgorOjEwNDE0MDAwMDUwMDAwMDAwMDAwMDAwQTAwMDAwMTM2MDAwMEVBNjBERgorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAxNjAwMDAwMDAwMDAwMDAwMDAxOQorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzODg2NAorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDVEQzAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDFEMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMERCMgorOjEwNDFFMDAwM0MwMjA4MDAyNDQyMzg2MDNDMDMwODAwMjQ2MzNCMTQ2RQorOjEwNDFGMDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQ0QgorOjEwNDIwMDAwM0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDBENgorOjEwNDIxMDAwMjYxMDAwQTgzQzFDMDgwMDI3OUMzODYwMEUwMDA0MDdFQworOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwRDhGODYwMDNDM0MwMzkwMDA2MQorOjEwNDIzMDAwM0MwMjgwMDAwMDg2MjgyNTAwQTMyMDI1QUM0NDAwMjBGNQorOjEwNDI0MDAwM0MwMzgwMDA4QzY3MDAyMDA0RTBGRkZFMDAwMDAwMDBCQgorOjEwNDI1MDAwMDNFMDAwMDgwMDAwMDAwMDBBMDAwMDQxMjQwNDAwMDFGRgorOjEwNDI2MDAwOEY4NTAwM0MzQzA0ODAwMDM0ODMwMDAxMDBBMzEwMjVBRQorOjEwNDI3MDAwMDNFMDAwMDhBQzgyMDAyMDAzRTAwMDA4MDAwMDEwMjFFOQorOjEwNDI4MDAwMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjFEOQorOjEwNDI5MDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNQorOjEwNDJBMDAwMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjE5NworOjEwNDJCMDAwMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYxMQorOjEwNDJDMDAwMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQ3OQorOjEwNDJEMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkY3NgorOjEwNDJFMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkY3OAorOjEwNDJGMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgzMworOjEwNDMwMDAwMDAwMDAwMDA5MEFBMDAzMThGQUIwMDEwOENBQzAwNDA4MAorOjEwNDMxMDAwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwOENBRDAwNDRCMAorOjEwNDMyMDAwMDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0OENBNzAwNDhERgorOjEwNDMzMDAwM0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4OENBRTAwNEM4OQorOjEwNDM0MDAwMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0QUQ2RTAwMkNERQorOjEwNDM1MDAwOENBRDAwMzgzMTRBMDBGRkFENkQwMDFDOTRBOTAwMzJDRAorOjEwNDM2MDAwMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDMwQTU2MDAwMDI2MworOjEwNDM3MDAwQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDMyMzA2MjAwRkYzQQorOjEwNDM4MDAwMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMTA2NTAwMEU2RQorOjEwNDM5MDAwMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxOENEODAwMjg5QQorOjEwNDNBMDAwMzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QUQ2RjAwMTQzMgorOjEwNDNCMDAwOENDRTAwMzBBRDZFMDAwODhDQzQwMDJDQTE2QTAwMDFDOAorOjEwNDNDMDAwMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDQUQ2RDAwMTgzRQorOjEwNDNEMDAwOENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0QUQ2ODAwMDhCNQorOjEwNDNFMDAwOENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEM4MzAwNzA1OQorOjEwNDNGMDAwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOENDMjAwMTRFQgorOjEwNDQwMDAwMTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwMDNFMDAwMDg3RgorOjEwNDQxMDAwQTE2QTAwMDE4QzgyMDA3MDBBMDAwMEI3MDAwMDAwMDA1MQorOjEwNDQyMDAwOTA4OTAwMzAyN0JERkZGODhGQTgwMDFDQTNBOTAwMDBDOQorOjEwNDQzMDAwOEZBMzAwMDAzQzBERkY4MDM1QTJGRkZGOENBQzAwMkM0OQorOjEwNDQ0MDAwMDA2MjU4MjRBRkFCMDAwMEExMDAwMDA0MDBDMDU4MjE1NgorOjEwNDQ1MDAwQTdBMDAwMDI4RDA2MDAwNDAwQTA0ODIxMDE2N0M4MjEyMgorOjEwNDQ2MDAwOEZBNTAwMDAwMDgwNTAyMTNDMThGRjdGMDMyQzIwMjZFMAorOjEwNDQ3MDAwM0MwRTAwRkYyQzhDMDAwMTM3MEZGRkZGMzVDREZGRkZGNgorOjEwNDQ4MDAwM0MwMkZGMDAwMEFGQzgyNDAwRURDMDI0MDBDMjc4MjQyNQorOjEwNDQ5MDAwMDAwQzFEQzAwMzIzNjgyNTAxRjg3MDI1QUQwRDAwMDAzOAorOjEwNDRBMDAwQUQwRTAwMDQ4RDI0MDAyNEFGQUQwMDAwQUQwNDAwMDg2MworOjEwNDRCMDAwOEQyQzAwMjAyNDA0RkZGRkFEMEMwMDBDOTU0NzAwMzIyQQorOjEwNDRDMDAwMzBFNkZGRkZBRDA2MDAxMDkxNDUwMDQ4MzBBMjAwRkYyNgorOjEwNDREMDAwMDAwMjE5QzI1MDYwMDAwMThEMjQwMDM0QUQwNDAwMTRBNAorOjEwNDRFMDAwOEQ0NzAwMzg4RkFBMDAxODI3QkQwMDA4QUQwQjAwMjhBMworOjEwNDRGMDAwQUQwQTAwMjRBRDA3MDAxQ0FEMDAwMDJDQUQwMDAwMTg3MworOjEwNDUwMDAwMDNFMDAwMDhBRDAwMDAyMDI3QkRGRkUwQUZCMjAwMThCNworOjEwNDUxMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDOTA5ODAwMzBENgorOjEwNDUyMDAwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGQTBDRjAwMDBBQQorOjEwNDUzMDAwOTA4RTAwMzEzNUFDRkZGRjNDMEFGRjAwQTBDRTAwMDE5OQorOjEwNDU0MDAwOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0OEUyOTAwMDQ0NworOjEwNDU1MDAwMDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0MDA4MDkwMjFBMQorOjEwNDU2MDAwMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0MjYwNTAwMjAxMQorOjEwNDU3MDAwMjYyNDAwMDgwRTAwMDA2MzI0MDYwMDAyOTI0NzAwMzA0MworOjEwNDU4MDAwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwMDAwMzE2MDMzOQorOjEwNDU5MDAwMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGOTY1OTAwMzI2MAorOjEwNDVBMDAwMzMyM0ZGRkYwRTAwMDA2M0FFMjMwMDEwMjYyNDAwMjRGNworOjEwNDVCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA5NQorOjEwNDVDMDAwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDZEMjdCRDAwMjBGMworOjEwNDVEMDAwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4QUZCRjAwMjA5RgorOjEwNDVFMDAwOTBBOTAwMzAyNDAyMDAwMTAwRTA1MDIxMzEyMzAwM0Y1NworOjEwNDVGMDAwMDBBMDQwMjE4RkIwMDA0MDAwODA4ODIxMDBDMDQ4MjFFOQorOjEwNDYwMDAwMTA2MjAwMTQ4RkE3MDAzODI0MEIwMDA1MDBBMDIwMjFBMQorOjEwNDYxMDAwMDBDMDI4MjExMDZCMDAxMzAyMDAzMDIxMEUwMDAwRjlBOQorOjEwNDYyMDAwMDAwMDAwMDA5MjI1MDA3QzMwQTQwMDAyMTA4MDAwMDNFRQorOjEwNDYzMDAwMjYwMzAwMzBBRTAwMDAzMDI2MDMwMDM0OEZCRjAwMjA3OAorOjEwNDY0MDAwOEZCMTAwMUM4RkIwMDAxODAwNjAxMDIxMDNFMDAwMDgzQgorOjEwNDY1MDAwMjdCRDAwMjgwRTAwMDA3OEFGQjAwMDEwMEEwMDAxNDAwRQorOjEwNDY2MDAwMDAwMDAwMDA4RkEzMDAzQzAxMDAyMDIxMDEyMDI4MjEzMAorOjEwNDY3MDAwMDE0MDMwMjFBRkEzMDAxMDBFMDAwMEJGQUZCMDAwMTQwNgorOjEwNDY4MDAwMEEwMDAxNDAwMDAwMDAwMDNDMDU4MDAwOENBMzBFMTBEMQorOjEwNDY5MDAwOEY4NDAwNDRBQzgzMDAyMDhDQTIwRTE4MDNFMDAwMDgzNQorOjEwNDZBMDAwQUM4MjAwMjQzQzA1ODAwMDhDQTMwRTE0OEY4NDAwNDQ0RgorOjEwNDZCMDAwQUM4MzAwMjA4Q0EyMEUxQzAzRTAwMDA4QUM4MjAwMjQxNgorOjEwNDZDMDAwOTM4MjAwMEMxMDQwMDAxQjI0ODMwMDBGMjQwNEZGRjA5MQorOjEwNDZEMDAwMDA2NDM4MjQxMEUwMDAxOTk3OEIwMDEwOTc4NDAwMEVCNgorOjEwNDZFMDAwOTM4OTAwMEQzQzBBNjAxQzBBMDAwMTdCMDE2NDQwMjM5MQorOjEwNDZGMDAwMDEwMzcwMjEwMDY0MjgyMzExMjYwMDAyMzFDMkZGRkY0QworOjEwNDcwMDAwMzBBMkZGRkYwMDQ3MzAyQjUwQzAwMDBFMDBFNDQ4MjFDQworOjEwNDcxMDAwOEQ0RDAwMEMzMUEzRkZGRjAwMDM2NDAwMDAwQzJDMDMzRgorOjEwNDcyMDAwMDRBMUZGRjMwMDAwMzAyMTMwNjM3RkZGMEEwMDAxNzMxMgorOjEwNDczMDAwMjQwNjAwMDEwM0UwMDAwODAwMDAwMDAwOTc4NDAwMEUzQQorOjEwNDc0MDAwMDBFNDQ4MjEzMTIzRkZGRjMxNjhGRkZGMDA2ODM4MkI2OAorOjEwNDc1MDAwNTRFMEZGRjhBNzgzMDAwRTkzOEEwMDBEMTE0MDAwMDU3NgorOjEwNDc2MDAwMjQwRjAwMDEwMDZCQzAyM0EzODAwMDBEMDNFMDAwMDhBQworOjEwNDc3MDAwQTc5ODAwMEUwMDZCQzAyM0EzOEYwMDBEMDNFMDAwMDg3NAorOjEwNDc4MDAwQTc5ODAwMEUwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgyNgorOjEwNDc5MDAwQUZCMDAwMTAzMDg0RkZGRjNDMTA4MDAwOTNBODAwMkJDNgorOjEwNDdBMDAwQUZCRjAwMTRBNjA0MDE0NDk2MEEwRTE2MzBDNjAwRkZERgorOjEwNDdCMDAwOEZBOTAwMzBBNjBBMDE0NkFFMDUwMTQ4QTIwNjAxNTJBMworOjEwNDdDMDAwQTYwODAxNUFBRTA3MDE2MDhGQTMwMDJDQTYwOTAxNTg2NAorOjEwNDdEMDAwMDEyMDIwMjEwRTAwMDE2N0FFMDMwMTU0M0MwMjEwMDBBRAorOjEwNDdFMDAwQUUwMjAxNzg4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgwNAorOjEwNDdGMDAwMjdCRDAwMTg4Rjg1MDAwMDI0ODQwMDA3MjdCREZGRjgxRgorOjEwNDgwMDAwMzA4NEZGRjgzQzA2ODAwMDk0Q0IwMDhBMzE2QUZGRkZCOQorOjEwNDgxMDAwQUZBQTAwMDA4RkE5MDAwMDAxMjU0MDIzMjUwN0ZGRkY1NAorOjEwNDgyMDAwMzBFMzFGRkYwMDY0MTAyQjE0NDBGRkY3MDAwNTY4ODI3RgorOjEwNDgzMDAwMDAwRDI4ODAzNENDNDAwMDAwQUMxMDIxMDNFMDAwMDhCQgorOjEwNDg0MDAwMjdCRDAwMDg4RjgyMDAwMDI0ODYwMDA3MzBDNUZGRjhDRQorOjEwNDg1MDAwMDBBMjE4MjEzMDY0MUZGRjAzRTAwMDA4QUY4NDAwMDBBRAorOjEwNDg2MDAwOEY4NTAwNDQ4RjhBMDAzQzI3QkRGRkIwM0MwNDgwMDA0OAorOjEwNDg3MDAwQUZCNzAwNDRBRkI0MDAzOEFGQjEwMDJDQUZCRjAwNDhCMQorOjEwNDg4MDAwQUZCNjAwNDBBRkI1MDAzQ0FGQjMwMDM0QUZCMjAwMzBCQworOjEwNDg5MDAwQUZCMDAwMjg4Qzg3MDEwNDhDQTkwMDI0QUM4QTAwODA2QQorOjEwNDhBMDAwOENBODAwMjAwMEU5ODgyMzAwMDBCODIxQUM4ODBFMTBGNQorOjEwNDhCMDAwOENBNjAwMjQwMDAwQTAyMUFDODYwRTE4OEM4MjBFMTA1RAorOjEwNDhDMDAwQUM4MjBFMTQ4QzgzMEUxOEFDODMwRTFDMTIyMDAwRkJERAorOjEwNDhEMDAwM0MxNjgwMDA5MzZCMDAwODExNjAwMEYxMDAwMDAwMDA5RQorOjEwNDhFMDAwOTc2RTAwMTAzMUNERkZGRjAyMkQ2MDJCMTU4MDAwRUM3QworOjEwNDhGMDAwMDAwMDAwMDA5NzcwMDAxMDMyMEZGRkZGQUVDRjBFMDBENworOjEwNDkwMDAwM0MwNTgwMDA4Q0IzMDAwMDMyNzIwMDA4MTI0MEZGRkRBRAorOjEwNDkxMDAwMDAwMDAwMDA5NEI1MEUwODhDQTcwRTA0MzJBNUZGRkYxRQorOjEwNDkyMDAwMzBCNDAwMDExMjgwMDBFMTAwMDAwMDAwMDAwMDAwMEQyMgorOjEwNDkzMDAwMzBCOUEwNDAyNDE4MDA0MDEzMzgwMTE3MzBCNEEwMDA0QgorOjEwNDk0MDAwMTI4MDAwREMwMDAwMDAwMDkzNzMwMDA4MTI2MDAwMDg3MQorOjEwNDk1MDAwMDAwMDAwMDA5NzY5MDAxMDMxMjJGRkZGMDBFMjIwMkJDOQorOjEwNDk2MDAwMTA4MDAwMDMzMEE2MDA0MDEwQzAwMEQyMDAwMDAwMDBGQworOjEwNDk3MDAwQTc4NTAwNDBBRjg3MDAzODkzNkEwMDA4MDIyMDM4MjFERAorOjEwNDk4MDAwQUZCMTAwMjAxNTQwMDBGMTI3QjQwMDIwQUY2MDAwMEM0QgorOjEwNDk5MDAwOTc4NTAwNDAzMEIxNDAwMDE2MjAwMDAyMjQwMzAwMTYyNQorOjEwNDlBMDAwMjQwMzAwMEUyNDE1NDAwN0EzNjMwMDBBQUY3NTAwMTQwQQorOjEwNDlCMDAwOTM5MDAwNDI4RjZGMDAxNDMyMTkwMDAxMDAxOUMyNDAxOQorOjEwNDlDMDAwMDFGODQwMjVBRjY4MDAxNDk3ODcwMDQwOEY2MzAwMTRGQQorOjEwNDlEMDAwMzBFRTAwMTAwMDZFNjgyNUFGNkQwMDE0OTc4QzAwNDAxQgorOjEwNDlFMDAwMzE4QjAwMDgxMTYwMDE2NTAwMDAwMDAwOEY2NTAwMTQyNAorOjEwNDlGMDAwM0MwQjEwMDAzQzBBODAwMDAwQUI4ODI1QUY3MTAwMTQwRQorOjEwNEEwMDAwOTU0NjBFMEEzQzA5ODEwMDI0MTMwMDBFMzBDMkZGRkZCOAorOjEwNEExMDAwMDA0OTIwMjVBRjY0MDAwNEEzNzMwMDAyOTM3RjAwMEFCRAorOjEwNEEyMDAwMzQwNkZGRkMyN0YyMDAwNEEzNzIwMDBBOTc4RDAwNDBCMQorOjEwNEEzMDAwMzFBQzIwMDAxMTgwMDE1NzAwMDAwMDAwM0MwNzgwMDBDRAorOjEwNEE0MDAwOTc4RDAwNDA5NEVDMEUwQzk3OTEwMDQwMDAwRDU4NDI1OQorOjEwNEE1MDAwMzE4NUMwMDAzMTZBMDAwMzAwMDUxMzAzMzIyOTEwMDBCQworOjEwNEE2MDAwMDE0Mjk4MjUwMDA5MjIwMzAyNjRGODI1MDAxRjkwQzAyNgorOjEwNEE3MDAwQTc3MjAwMTI5Nzk1MDA0MDkzNzkwMDBBMDAxNTgxODI3MQorOjEwNEE4MDAwMzIxODAwM0MwMzE5NzgyMTI1RTgwMDNDQTM2ODAwMDk4RQorOjEwNEE5MDAwOTRFRTBFMEMzMUMzM0ZGRkE3NjMwMDEwOTc2MzAwMTIyMgorOjEwNEFBMDAwOTM2NzAwMDkwMEUzNzAyMTI1Q0QwMDAyMzFBQzAwMDdCNworOjEwNEFCMDAwMDAwQzU4MjMzMTY1MDAwN0EzNjUwMDBCOTM3MTAwMDlCMgorOjEwNEFDMDAwOTc2NDAwMTI5NzZBMDAxMDMyMjIwMEZGOEY5MTAwMzgxRAorOjEwNEFEMDAwOTc5RjAwNDAwMDQ0NDgyMTAxMkE5ODIxMDI2NjkwMjFCNgorOjEwNEFFMDAwMzNGNTAwNDAxMkEwMDAwNTMyNDZGRkZGMDBEMTQwMkJGNQorOjEwNEFGMDAwM0MxMjgwMDAxMTAwMDAxNjAwMDA5ODIxMDIyNjc4MkIzRAorOjEwNEIwMDAwMTVFMDAxMzY4RkE3MDAyMDNDMTg4MDAwOEYxMDBFMTQ4RQorOjEwNEIxMDAwM0MwNTgwMDBBRjEwMEUxMDhGMTkwRTFDQUYxOTBFMTgzNworOjEwNEIyMDAwQUYwNjBFMDA4Q0IyMDAwMDMyNTUwMDA4MTJBMEZGRkQ0NworOjEwNEIzMDAwMDAwMDAwMDA5NEJGMEUwODAwQzA4ODIxMDAwMDkwMjFGMgorOjEwNEI0MDAwQTc5RjAwNDA4Q0E2MEUwNDI0MTMwMDAxQUY4NjAwMzhGNgorOjEwNEI1MDAwOTc2OTAwMTAzMTM1RkZGRjhFOEMwMDAwMDE5MTIwMjNGMgorOjEwNEI2MDAwMTA4MDAxMThBRTg0MDAwMDkzNjcwMDA4MTRFMDAwRDg5QworOjEwNEI3MDAwMDAwMDAwMDAwRTAwMDFCNDI0MDQwMDEwOEY4RTAwNDhENQorOjEwNEI4MDAwM0MwMzMyMDAwMDQwMjgyMTMxQzYwMEZGMDAwNjNDMDBGMworOjEwNEI5MDAwMDBFMzYwMjUyNUNEMDAwMUFGOEQwMDQ4QUM0QzAwMDAzRQorOjEwNEJBMDAwOTM2MjAwMDk5NzY0MDAxMjkzN0YwMDBBMzA0QTAwRkY2NQorOjEwNEJCMDAwMzA4QkZGRkYwMTRCNDgyMTAwMDlDQzAwMzNGMDAwRkY5MAorOjEwNEJDMDAwMDMzMEMwMjVBQ0I4MDAwNDhGOEYwMDQ4OTc4ODAwNDBBMAorOjEwNEJEMDAwMzEwMzIwMDAxMDYwMDEwM0FDQUYwMDA4OTc2RjAwMTI5MgorOjEwNEJFMDAwMzFFOEZGRkYwNjQwMDEwMUFDQTgwMDBDOTc5MDAwNDA5RgorOjEwNEJGMDAwMzIwNTAwMDgxNEEwMDAwMjI2MjgwMDA2MjYyODAwMDIxQworOjEwNEMwMDAwM0MwNDgwMDA5NDhCMEUxNDhDODUwRTFDOEY2NzAwMDQ2RQorOjEwNEMxMDAwOTM2QTAwMDIzMTY0RkZGRjMxNDkwMEZGQUZBOTAwMTAyMQorOjEwNEMyMDAwOEY3RjAwMTRBRkE4MDAxOEFGQkYwMDE0MEUwMDAxOUFDOAorOjEwNEMzMDAwMDAwMDAwMDAyNDA0MDAxMDBFMDAwMUM4MDAwMDAwMDA2NQorOjEwNEM0MDAwOEU5MjAwMDAxNjQwMDAwNTAwMDAwMDAwOEY3OTAwMTRDRAorOjEwNEM1MDAwMjQwNUZGQkYwMzI1QTAyNEFGNzQwMDE0OEY2OTAwMEM0NgorOjEwNEM2MDAwMDEzNUY4MjFBRjdGMDAwQzkzNzUwMDA4MTZBMDAwMDhFRAorOjEwNEM3MDAwMDAwMDAwMDAxMjYwMDAwNjAwMDAwMDAwOEY2QjAwMTRBRQorOjEwNEM4MDAwM0MwQ0VGRkYzNTg0RkZGRTAxNjQ1MDI0QUY2QTAwMTQzMgorOjEwNEM5MDAwQTM3MzAwMDg4RkE3MDAyMDBBMDAwMzE2MDIyMDIwMjExQQorOjEwNENBMDAwQUVEMTBFMDAwQTAwMDFGODNDMDU4MDAwMTRFMEZGMjE5RgorOjEwNENCMDAwMzBCOUEwNDAwRTAwMDE2MDAwMDBBMDIxMkU5MTAwMDEzQgorOjEwNENDMDAwMDIzN0IwMjUxMkMwMDAxNzhGQkYwMDQ4OEY4NTAwM0MwNworOjEwNENEMDAwMjQxNzBGMDAxMEI3MDBDRDNDMDQ4MDAwOEM5OTAxNzg5OAorOjEwNENFMDAwMDcyMEZGRkUyNDE1MEYwMDUwQjUwMEVCM0MwNDgwMDBBOAorOjEwNENGMDAwOEM4OTBFMTQyNDA1MDI0MDNDMTQxMDAwQUM4OTAxNDQzOAorOjEwNEQwMDAwOEM5RjBFMUNBQzlGMDE0OEEwODAwMTUyQTQ4MDAxNUFDOAorOjEwNEQxMDAwQUM4MDAxNjBBNDgwMDE1OEFDODUwMTU0QUM5NDAxNzg0QQorOjEwNEQyMDAwOEZCRjAwNDg4RkI3MDA0NDhGQjYwMDQwOEZCNTAwM0M1RQorOjEwNEQzMDAwOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwOEZCMTAwMkNBNQorOjEwNEQ0MDAwOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwOEY5MTAwMzg4NQorOjEwNEQ1MDAwOTc5MzAwNDAzQzEyODAwMDAyMjBBODIxMzI2QTAwNDA1NAorOjEwNEQ2MDAwMTU0MEZGN0QwMDAwOTgyMTk3NkIwMDEwOEY4NTAwMzg1QgorOjEwNEQ3MDAwMzE2MkZGRkYxMDQ1MDBBMjAwMDAyMDIxMDA4MEEwMjEyOQorOjEwNEQ4MDAwMTA4MDAwRTUwMEUwODgyMTE2MjBGRUQyMDAwMDAwMDAxRgorOjEwNEQ5MDAwMEEwMDAyRTcyRTkxMDAwMTNDMDM4MDAwOEM3RjAxNzgxRAorOjEwNERBMDAwMDdFMEZGRkUyNDA0MDgwMDhGODYwMDAwQUM2NDAxNzg1MQorOjEwNERCMDAwM0MwMzgwMDA5NDZDMDA4QTMxOEJGRkZGMDE2NjUwMjMxNgorOjEwNERDMDAwMjU0OUZGRkYzMTI4MUZGRjJEMDIwMDA4MTQ0MEZGRjk3RAorOjEwNEREMDAwMDAwMDAwMDA4RjhFMDA0ODM0NkY0MDAwOEY4MzAwM0MzRAorOjEwNERFMDAwMDBFMEEwMjEyNDBEMEYwMDI1QzcwMDAxQUY4NzAwNDg3NworOjEwNERGMDAwMDBDRjMwMjEwMjM0ODgyMzNDMDg4MDAwMzFENTAwRkZFOQorOjEwNEUwMDAwMTA2RDAwMDUyNDA3MDAwMTkzOTMwMDQyMzI3MjAwMDFFNworOjEwNEUxMDAwMDAxMjgyNDAzNjA3MDAwMTAwMTUxNDAwM0MwOTAxMDAxMQorOjEwNEUyMDAwMDA0OTIwMjVBQ0M0MDAwMDhGOUYwMDQ4MzBCOTAwMzZFRgorOjEwNEUzMDAwMzBCODAwMDhBQ0RGMDAwNDEzMDAwMDkwMDBGOTk4MjU5QQorOjEwNEU0MDAwOTUwNzBFMEE4RjhFMDAwMDNDMDM4MTAwMzBFREZGRkZCNgorOjEwNEU1MDAwMjVDQjAwMDgwMUEzMjgyNTNDMEMxMDAwMzE2QTFGRkY1OAorOjEwNEU2MDAwMjY5MjAwMDYyNDA2MDAwRUFEMDUwMTYwMDI2Qzk4MjUwRQorOjEwNEU3MDAwQTUwNjAxNUFBRjhBMDAwMEE1MTIwMTU4MTYyMDAwMDhBNQorOjEwNEU4MDAwM0MxMDgwMDA4Rjk5MDAzQzI0MTgwRjAwNTMzODAwMDIxQQorOjEwNEU5MDAwMjQxNzAwMDEzNjczMDA0MDBFMDAwMTU5M0MxMDgwMDBCOQorOjEwNEVBMDAwOEUxRjBFMTQwMjQwMjAyMUFFMUYwMTQ0OEUxMjBFMUNENAorOjEwNEVCMDAwQUUxMjAxNDhBMjE1MDE1MkFFMTMwMTU0MEUwMDAxNjc1MworOjEwNEVDMDAwM0MxNTEwMDBBRTE1MDE3ODBBMDAwMzE5MDAwMDAwMDAxRgorOjEwNEVEMDAwOTM3ODAwMDk5NzYzMDAxMjkzNjgwMDBCMzMwRjAwRkY2QgorOjEwNEVFMDAwMDFFMzM4MjEzMTAyMDBGRjAwRTI3MDIxMjVEMDAwMEFFMQorOjEwNEVGMDAwMzIxMEZGRkYwRTAwMDFCNDAyMDAyMDIxOEY4NjAwNDgwRgorOjEwNEYwMDAwM0MxOTQxMDAzQzA3ODAwMDI0Q0QwMDAxQUY4RDAwNDhEMgorOjEwNEYxMDAwOTM2QzAwMDk5NzY0MDAxMjMwQzYwMEZGMzE4QTAwRkZDRAorOjEwNEYyMDAwMzA4QkZGRkYwMTRCNDgyMTAwMDYyQzAwMjUzRjAwMDI3QgorOjEwNEYzMDAwMDBCRkMwMjUwMzE5NzgyNUFDNEYwMDAwOEY2ODAwMEMxNgorOjEwNEY0MDAwOTRFRTBFMTQwMTEyMTgyNUFDNDMwMDA0OENFNTBFMUNERgorOjEwNEY1MDAwOEY2NzAwMDQ5MzZEMDAwMjMxQzRGRkZGMzFBQzAwRkY4NgorOjEwNEY2MDAwQUZBQzAwMTA4RjYyMDAxNEFGQjEwMDE4MEUwMDAxOUFCMAorOjEwNEY3MDAwQUZBMjAwMTQwQTAwMDJDNTAyMDAyMDIxQUY2MDAwMDRBNQorOjEwNEY4MDAwQTM2MDAwMDI5NzhEMDA0MDMxQUMyMDAwMTU4MEZFQUI3RAorOjEwNEY5MDAwMDAwMDMwMjFBNzYwMDAxMjk3OTAwMDQwOTM3ODAwMEEyQgorOjEwNEZBMDAwM0MwMzgwMDAzMjE5MUYwMDAwMTk3OTgzMDFGODQwMjE2OQorOjEwNEZCMDAwMjUwNzAwMjhBMzY3MDAwOTk0NkUwRTBDMEEwMDAyNUUwNAorOjEwNEZDMDAwQTc2RTAwMTA4RjZFMDAxNDM1Q0QwMDQwMEUwMDAxNTkwMQorOjEwNEZEMDAwQUY2RDAwMTQwQTAwMDI5MTAwMDAwMDAwMEEwMDAzMTZFMQorOjEwNEZFMDAwMDAwMDIwMjEwNjQxRkYwMUFDQTAwMDBDOENCODAwMEM5MQorOjEwNEZGMDAwM0MxOTgwMDAwMzE5OTAyNTBBMDAwMkIyQUNCMjAwMENFMworOjEwNTAwMDAwMDAwMDkwMjEwQTAwMDI4RDI0MTMwMDAxMTI4MDAwMDU4NworOjEwNTAxMDAwM0MwRDgwMDA5NUE2MEUwODMwRDMwMDQwMTI2MDAwNDI3RgorOjEwNTAyMDAwMDAwMDAwMDA4QzkwMDE3ODA2MDBGRkZFMDAwMDAwMDBFOAorOjEwNTAzMDAwOTQ5MjBFMTAzQzAzMDUwMDI0MDcyMDAwMzI1OEZGRkYxNQorOjEwNTA0MDAwMDMwMzc4MjVBQzhGMDE0QzhDODgwRTE0M0MwRTEwMDBBNQorOjEwNTA1MDAwQUM4ODAxNDQ4QzgyMEUxQ0FDODIwMTQ4QTA4MDAxNTJCNQorOjEwNTA2MDAwQTQ4MDAxNUFBQzgwMDE2MEE0ODAwMTU4QUM4NzAxNTQyRgorOjEwNTA3MDAwQUM4RTAxNzgwQTAwMDJFRTNDMDQ4MDAwOEY5MDAwMDBBNAorOjEwNTA4MDAwMjY5MjAwMDJBNTEyMDE1ODI2MEYwMDA4MzFFODFGRkZFMgorOjEwNTA5MDAwMEEwMDAzNTZBRjg4MDAwMEFDODAwMTRDMTI4MDAwMTk1MgorOjEwNTBBMDAwMDAwMDAwMDA4QzhBMEUxMEFDOEEwMTQ0OEM4MzBFMTgxQworOjEwNTBCMDAwM0MwQzgwMDAyNDE2MDA0MEFDODMwMTQ4OEZCRjAwNDhBMAorOjEwNTBDMDAwQTE4MDAxNTI4RkI3MDA0NEE1ODAwMTVBOEZCNTAwM0NFMgorOjEwNTBEMDAwQUQ4MDAxNjA4RkI0MDAzOEE1ODAwMTU4OEZCMzAwMzREMworOjEwNTBFMDAwQUQ5NjAxNTQ4RkIyMDAzMDhGQjYwMDQwOEZCMTAwMkNDNgorOjEwNTBGMDAwOEZCMDAwMjgzQzA0MTAwMDI3QkQwMDUwMDNFMDAwMDhEQQorOjEwNTEwMDAwQUQ4NDAxNzg4QzhCMEUxNEFDOEIwMTQ0OEM4MzBFMUMwNworOjEwNTExMDAwMEEwMDAzRTQzQzBDODAwMDBFMDAwMTYwMkU5MTAwMDFBNworOjEwNTEyMDAwMEEwMDAyRTgwMjM3QjAyNTAwMDAwMDAwMDAwMDAwMEQ3MAorOjEwNTEzMDAwMDAwMDAwMDAyNDAwMDMzQTBBMDAwM0MwM0MwNDgwMDA4MQorOjEwNTE0MDAwMjdCREZGRTBBRkJGMDAxQzNDMUYyMEZGM0MwNzYwMDBGNQorOjEwNTE1MDAwM0MwOTgwMDAyNDAyMDAxMDM3RjlGRkZEQUNFMjMwMDg2MgorOjEwNTE2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUQzOTBFMDBFRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAzQzE4MDBGRjM3MTJGRkZEQUQzMjBFMDA5QQorOjEwNTE5MDAwM0MwQjYwMDQ4RDcwNTAwMDI0MTFGRjdGM0MwRTAwMDIxOAorOjEwNTFBMDAwMDIxMTc4MjQzNUVDMzgwQzM1Q0QwMTA5QUNFRDRDMThFMgorOjEwNTFCMDAwMjQwQTAwMDlBRDZDNTAwMDhDRTgwNDM4QUQyQTAwMDhDMAorOjEwNTFDMDAwQUQyMDAwMTQ4Q0U1NEMxQzMxMDZGRkZGMzhDNDJGNzE1NAorOjEwNTFEMDAwMDAwNTFFMDIzMDYyMDAwRjI0ODZDMEIzMTA0MDAwMDc5NQorOjEwNTFFMDAwQUY4MjAwMDg4Q0U1NEMxQzNDMDkwMDFGMzUyOEZDMDBGMAorOjEwNTFGMDAwMDBBODE4MjQwMDAzMjFDMkFGODQwMDA0OENGMTA4MDgyMQorOjEwNTIwMDAwM0MwRjU3MDkyNDEyRjAwMDAyMzI3MDI0MzVGMDAwMTBEMAorOjEwNTIxMDAwMDFEMDYwMjYwMUNGNjgyNjJEQUEwMDAxMkQ4QjAwMDE0OAorOjEwNTIyMDAwMDE0QjM4MjU1MEUwMDAwOUEzODAwMDBDM0MwMjYwMUNCMworOjEwNTIzMDAwOEM1OTAwMDgyNDFGMDAwMUEzOUYwMDBDMzMzODdDMDAwOAorOjEwNTI0MDAwQTc5ODAwMTBBNzgwMDAwRUEzODAwMDBEQUY4MDAwNDgzMworOjEwNTI1MDAwMTRDMDAwMDNBRjgwMDAwMDNDMDY2MDAwQUNDMDQ0MkNDQQorOjEwNTI2MDAwMEUwMDA0QjYzQzEwODAwMDBFMDAwRERGMDAwMDAwMDBCMAorOjEwNTI3MDAwM0MxMTA4MDAyNjMxMzhDODNDMTIwODAwMjY1MjM5NDgzMworOjEwNTI4MDAwOEUwNTAwMDAzOEEzMDAwMTMwNjQwMDAxMTQ4MEZGRkM4QgorOjEwNTI5MDAwMDAwMDAwMDA4RTA2MDEwMDNDMEM4MDBBMjQwQUZGODBGQQorOjEwNTJBMDAwMjRDNzAyNDAzMEVCMDA3RjAxNkM0ODIxMDBFQTQwMjQxMworOjEwNTJCMDAwQUUwNjAwMjBBRjg5MDA0NEFFMDgwMDI0M0MwMzgwMDAwNQorOjEwNTJDMDAwQUY4NjAwM0M4QzZEMDE3ODA1QTBGRkZFMjQxOTA4MDAxNAorOjEwNTJEMDAwQUM3OTAxNzg5MDc4MDEwOEEzOTgwMDQyOTM4RjAwNDIzRQorOjEwNTJFMDAwMzFFRTAwMDExMUMwMDAwRjI0MEQwRDAwMjRDMkY4MDBBMgorOjEwNTJGMDAwMkM1RjAzMDExM0UwMDAxQzAwMDYyOUMyMjRBM0ZGRjA2OQorOjEwNTMwMDAwMDAwMzIwNDIwMDA0MzE0MDBFMDAwMUNGMDBEMUQ4MjExQgorOjEwNTMxMDAwM0MwNDQwMDAzQzA2ODAwMEFDQzQwMTM4MEEwMDA0NTczRAorOjEwNTMyMDAwMDAwMDAwMDAxMENEMDAyNjI0MEUwRjAwMTBDRTAwMkEzMQorOjEwNTMzMDAwM0MwMjgwMDgzNDVGMDA4MDkzRjkwMDAwMjQwRjAwNTA4NQorOjEwNTM0MDAwMzMzODAwRkYxNzBGRkZGMzNDMDQ0MDAwMEUwMDA5MTIzMgorOjEwNTM1MDAwMDAwMDAwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzg2MgorOjEwNTM2MDAwMEEwMDA0NTcwMDAwMDAwMDhGODMwMDA0MDBBMzQwMkJCNAorOjEwNTM3MDAwMTUwMDAwMEI4RjhCMDAwODAwNkI1MDIxMjU0N0ZGRkZBNQorOjEwNTM4MDAwMDBFNTQ4MkIxNTIwMDAwNjAwQTM2MDIzMDAwQzI5NDBFRgorOjEwNTM5MDAwMEUwMDAxQ0YwMEIyRDgyMTBBMDAwNDdDM0MwNDQwMDA3QQorOjEwNTNBMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzQUQxQworOjEwNTNCMDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDAwNQorOjEwNTNDMDAwM0MxQjA4MDAyNzdCM0E0ODBFMDAwMUNGMDAwMDAwMDA3QworOjEwNTNEMDAwMEEwMDA0N0MzQzA0NDAwMDNDMUIwODAwMjc3QjNBNjgyMAorOjEwNTNFMDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDBENQorOjEwNTNGMDAwMDAwNDExQzAwM0UwMDAwODI0NDIwMjQwM0MwNDA4MDBGRAorOjEwNTQwMDAwMjQ4NDNBQUMyNDA1MDAxQTBBMDAwMDZEMDAwMDMwMjEwMworOjEwNTQxMDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQ1MgorOjEwNTQyMDAwQUZCMDAwMTAzQzEwODAwMDkyMEIwMTA5MjQxMkZGODBFNQorOjEwNTQzMDAwMEUwMDA0QjMzMTY0MDA3RjhGOTEwMDNDMDA1MTUwMjE3NQorOjEwNTQ0MDAwMDE1MjQwMjRBRTA4MDAyNDkyMDMwMTA5MEUwMDA0QjM2NworOjEwNTQ1MDAwMzA2NDAwN0YyNDA2MDA4MDI0MDcwMEMwMjQwNDAwNDAzQworOjEwNTQ2MDAwQUUwMDA4MTBBRTA0MDgxNEFFMDYwODE4QUUwNzA4MUNGQgorOjEwNTQ3MDAwOTIwQzAxMDkwMDUxRjgyMTMzRjgwMDdGM0MxOTgwMEE5MQorOjEwNTQ4MDAwMDMxOTEwMjEzMTg0MDA3RjBFMDAwNEIzQUY4MjAwNDQ2MQorOjEwNTQ5MDAwOEUxMTAxMDAzQzBDMDA4MDM1ODUwMDAxMDIyMjc4MjEyQworOjEwNTRBMDAwMDFGMjQ4MjRBRTA5MDgwNDhFMEUwMTAwMzU5ODAwMDI2RQorOjEwNTRCMDAwMzYwOTA5MDAwMUMyNjgyMTMxQUIwMDc4MDE2NTUwMjUyOQorOjEwNTRDMDAwQUUwQTA4MjA4RTA1MDEwMDhFMDgwMTAwMzYwNTA5ODAwRAorOjEwNTREMDAwMDEwMjE4MjEyNDY0MDA0MDAwOTIzMDI0QUUwNjA4MDgxRQorOjEwNTRFMDAwOEUwNzAxMDAwMEUyRjgyMTI3RjkwMDQwMzMzMjAwNzhFRQorOjEwNTRGMDAwMDI1ODg4MjVBRTExMDgyNDhFMDQwMTAwOTUyRjAwMEM1NworOjEwNTUwMDAwOEZCRjAwMUM4RkIyMDAxODMxRUVGRkZGMDAwRTY5QzA4NAorOjEwNTUxMDAwQUUwRDA4MDBBRTBDMDgyODk1MkIwMDBDOEZCMTAwMTRCRQorOjEwNTUyMDAwMzE2QUZGRkYwMDBBNDFDMEFFMDgwMDJDOENBMzAwNTA3NgorOjEwNTUzMDAwOEZCMDAwMTA4Q0EyMDAzQzhEMjQwMDA0OENBNjAwMUNBRgorOjEwNTU0MDAwOENBNzAwMzgyN0JEMDAyMEFGODMwMDYwQUY4MjAwNTBEOQorOjEwNTU1MDAwQUY4NDAwNENBRjg2MDA1ODAzRTAwMDA4QUY4NzAwNUNDMgorOjEwNTU2MDAwM0MwQTA4MDA5MTRBM0FEMTNDMDkwODAwOTUyOTNBQ0FGOAorOjEwNTU3MDAwM0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyMDBFODMwMjUwNworOjEwNTU4MDAwMDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDg1MQorOjEwNTU5MDAwQUM4MDAwMDQzQzA5ODAwMDM1MjgwOTAwOTEwNzAwMTEwNworOjEwNTVBMDAwMjQwMjAwMjgwMDgwNTAyMTMwRTMwMEZGMDBBMDY4MjE4MQorOjEwNTVCMDAwMDBDMDYwMjExMDYyMDAwMjM0MEI4NkREMjQwQjA4MDA1RAorOjEwNTVDMDAwM0MwNzgwMDAzNEUyMEE5QTk0NDMwMDAwMzRGODBBOUNCNQorOjEwNTVEMDAwMzRFNjBBQTAzMDc5RkZGRkFENTkwMDAwOEYwRjAwMDBCQworOjEwNTVFMDAwMzRFODBBODAyNDA0MDAwMUFENEYwMDA0OENDRTAwMDA5MgorOjEwNTVGMDAwQUQ0RTAwMDg5MTA1MDAxOTMwQTMwMDAzMTA2NDAwNDY2OQorOjEwNTYwMDAwMjg2OTAwMDIxNTIwMDBCNTI0MDQwMDAyMTA2NDAwOTBFRgorOjEwNTYxMDAwMjQwNTAwMDMxMDY1MDA5QjM0RTQwQUE0M0MwOTA4MDAzQgorOjEwNTYyMDAwOTUyOTNBQzAyNDA3MDgwMDUxNjcwMDUwM0MxODgwMDBCMworOjEwNTYzMDAwM0MwMjgwMDAzNDU5MDkwMDkzMjgwMDEyOTMyRTAwMTk2RgorOjEwNTY0MDAwMzQ1ODA5ODAzMTBGMDBGRjhGMDYwMDI4MDFFQzE4MjEyMworOjEwNTY1MDAwMDAwMzM4ODAzMTI0RkZGRjMxQ0IwMEZGMDBFNDEwMjEyQworOjEwNTY2MDAwMDAwQjJEMDAwMEE2QzAyNTAwMDI3QzAwM0MwODYwMDA1NQorOjEwNTY3MDAwMDMwODE4MjUzNUU5MDZGRkFENDMwMDAwQUQ0OTAwMDRENQorOjEwNTY4MDAwOEYyRTAwMkMzQzAzODAwMDM0NzgwOTNDQUQ0RTAwMDg3RQorOjEwNTY5MDAwOEYyNzAwMzAyNTQ5MDAyODM0NkUwOTAwQUQ0NzAwMENFMworOjEwNTZBMDAwOEYyQjAwMzRBRDRCMDAxMDhGMjQwMDM4QUQ0NDAwMTQxNAorOjEwNTZCMDAwOEYyNTAwMUNBRDQ1MDAxODhGMjIwMDIwQUQ0MjAwMUMzNAorOjEwNTZDMDAwOEYyNjAwMjQyNTIyMDAxNEFENDYwMDIwOEYyODAwMjhCNAorOjEwNTZEMDAwQUQ0ODAwMjQ4RjBGMDAwMEFEMkQwMDA0QUQyRjAwMDA1OQorOjEwNTZFMDAwOEM2NDAxMENBRDI0MDAwODkxQzcwMDEyM0MwNTA4MDAzMQorOjEwNTZGMDAwOTBBNTNBRDBBRDIwMDAxMDMwRUIwMEZGMDE2QzMwMjFCNgorOjEwNTcwMDAwMDAwNjZGMDAwMDA1Q0MwMDAxQjk2MDI1MzU4QUZGRkY1NworOjEwNTcxMDAwMDNFMDAwMDhBRDJBMDAwQzNDMDkwODAwOTUyOTNBQzBCNgorOjEwNTcyMDAwM0MxOTA4MDA5NzM5M0FDQTM0RTIwQUE0M0MwNjA4MDAzQQorOjEwNTczMDAwOTRDNjNBQkM5NDRGMDAwMDMxMjNGRkZGMDMyM0MwMjFERAorOjEwNTc0MDAwMDMwNjcwMjMwMDBGM0MwMDI1QzhGRkYyMDBFODI4MjU1RgorOjEwNTc1MDAwMjQwNzA4MDBBRDQ1MDAwQ0FENDAwMDEwQUQ0QjAwMTQwRgorOjEwNTc2MDAwMTU2N0ZGQjMyNTRBMDAxODNDMTg4MDAwMzcwODA5MDA2OAorOjEwNTc3MDAwOTEwRjAwMTE5MTA3MDAxOTM3MDMwQTgwMzFFRTAwRkZFNQorOjEwNTc4MDAwM0MxOTA4MDA5NzM5M0FDNjk0NkYwMDJBMDAwRTU4ODJENworOjEwNTc5MDAwMzBFNDAwRkY5Nzg3MDA1NDAwMEIxNjAwMDAwNDJDMDAzMworOjEwNTdBMDAwMzEyNkZGRkYwMzI2QzAyMTAwNDU0ODI1MDEzODcwMjUxQQorOjEwNTdCMDAwMDFFNzU4MjEzQzAzNDAwMDAxQzMyMDI1MDAwQjJDMDBDOQorOjEwNTdDMDAwQUQ0NDAwMDBBRDQ1MDAwNDkxMDIwMDE4M0MwNjAwMDZGRgorOjEwNTdEMDAwM0MwMzgwMDAwMDAyQ0UwMDAzMjZDMDI1QUQ1ODAwMDgxRgorOjEwNTdFMDAwOEQwRjAwMkMzNDc4MDkzQzI0RTkwMDAxQUQ0RjAwMENFQQorOjEwNTdGMDAwOEQwQjAwMUMzMTJFN0ZGRjI1NDkwMDE0QUQ0QjAwMTA4RQorOjEwNTgwMDAwOEYwRjAwMDBBRDJEMDAwNEE3OEUwMDU0QUQyRjAwMDBCNworOjEwNTgxMDAwOEM2NDAxMEMzNDZFMDkwMDI1MjIwMDE0QUQyNDAwMDhBQworOjEwNTgyMDAwOTFDNzAwMTIzQzA1MDgwMDkwQTUzQUQwQUQyMDAwMTBBOQorOjEwNTgzMDAwMzBFQjAwRkYwMTZDMzAyMTAwMDY2RjAwMDAwNUNDMDA0QQorOjEwNTg0MDAwMDFCOTYwMjUzNThBRkZGRjAzRTAwMDA4QUQyQTAwMEM4RQorOjEwNTg1MDAwMzRFOTBBQTQ5NTI0MDAwMDk1MDIwMDI4M0MwOTA4MDBCOAorOjEwNTg2MDAwOTUyOTNBQzAwMDA0MUMwMDAwMDJDQzAwMzQ3ODgxMDA2NQorOjEwNTg3MDAwMDMyQjc4MjVBRDU4MDAwQ0FENEYwMDEwMEEwMDA1NDBGMQorOjEwNTg4MDAwMjU0QTAwMTQzQzA5MDgwMDk1MjkzQUMwM0MwNTA4MDA0NworOjEwNTg5MDAwOTRBNTNBQ0EzQzA2MDgwMDk0QzYzQUJDOTQ5OTAwMDAwNAorOjEwNThBMDAwMzEyM0ZGRkY5NTE4MDAyODAwQTMxMDIxMDA0Njc4MjMxQworOjEwNThCMDAwMDAxOTNDMDAwMDE4NDQwMDI1RUVGRkVFMDEwRTI4MjVEQgorOjEwNThDMDAwMzRFNDgxMDBBRDQ0MDAwQ0FENDUwMDEwQUQ0MDAwMTQzRgorOjEwNThEMDAwQUQ0QjAwMTgwQTAwMDU0MDI1NEEwMDFDMTQ2MEZGNEYxQworOjEwNThFMDAwMzRFNjBBQTQ5NENFMDAwMDNDMDkwODAwOTUyOTNBQzA4OQorOjEwNThGMDAwMDAwRTQ0MDAwMTBCMzgyNUFENDcwMDBDMEEwMDA1NDA5RQorOjEwNTkwMDAwMjU0QTAwMTAwM0UwMDAwODI0MDIwN0QwMjdCREZGRTA2RAorOjEwNTkxMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNBMQorOjEwNTkyMDAwMEUwMDAwNEQwMDgwODgyMThGODgwMDUwOEY4NzAwNEMyQQorOjEwNTkzMDAwM0MwNTgwMDgzNEIyMDA4MDAxMTEyODIxM0MxMDgwMDAxMQorOjEwNTk0MDAwMjQwMjAwODAyNDAzMDBDMDAwQTcyMDIzQUUwMjA4MTgxMAorOjEwNTk1MDAwM0MwNjgwMDhBRTAzMDgxQzE4ODAwMDA0QUY4NTAwNTA4OAorOjEwNTk2MDAwQUNDNTAwMDQ4Q0M5MDAwNEFGODkwMDRDMTIyMDAwMDlBQQorOjEwNTk3MDAwMzYwNDA5ODAwRTAwMDVGODAwMDAwMDAwOTI0QzAwMjc1NAorOjEwNTk4MDAwOEUwQjAwNzQwMTgyNTAwNDAxNEIzMDIxQUU0NjAwMEM5NgorOjEwNTk5MDAwMzYwNDA5ODA4QzhFMDAxQzhGOEYwMDU4MDFDRjY4MjMzRAorOjEwNTlBMDAwMTlBMDAwMDQ4RkJGMDAxQzhDOTAwMDFDQUY5MDAwNTgwMQorOjEwNTlCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA4MQorOjEwNTlDMDAwMEEwMDAwNEYyN0JEMDAyMDhGODYwMDYwOEY4MzAwNTBBMworOjEwNTlEMDAwOEY4MjAwNEMzQzA1ODAwODM0QTQwMDgwQUM4NjAwNTBDNworOjEwNTlFMDAwQUM4MzAwM0MwM0UwMDAwOEFDQTIwMDA0M0MwMzA4MDBDOAorOjEwNTlGMDAwOEM2MzAwNTQyN0JERkZGODMwODQwMEZGMjQ2MjAwMDE0RgorOjEwNUEwMDAwMzBBNTAwRkYzQzAxMDgwMEFDMjIwMDU0MzBDNjAwRkY2NgorOjEwNUExMDAwM0MwNzgwMDA4Q0U4MDE3ODA1MDBGRkZFM0MwQTdGRkYxMAorOjEwNUEyMDAwQTNBNDAwMDM4RkE0MDAwMDM1NDlGRkZGMDA4OTE4MjRCOAorOjEwNUEzMDAwMDAwNjQ3QzAwMDY4MTAyNUFGQTIwMDAwOTBGOTAxMEFENworOjEwNUE0MDAwQTNBMDAwMDIzQzE4ODBGRkEzQjkwMDAxOEZBRTAwMDBBNAorOjEwNUE1MDAwMzBBRDAwN0YzNzBGRkZGRjAxQ0Y1ODI0MDAwRDY2MDBFNworOjEwNUE2MDAwM0MwOTAwMjAwMTZDNTAyNTM1MjYyMDAwMjQwNUZGODBDQworOjEwNUE3MDAwM0MwNDEwMDAyN0JEMDAwOEFDRUEwMTRDQUNFNjAxNTQyMAorOjEwNUE4MDAwQTRFMDAxNThBMEU1MDE1MjAzRTAwMDA4QUNFNDAxNzg2RAorOjEwNUE5MDAwMzA4ODAwRkYzQzAzODAwMDMwQTQwMEZGOEM2MjAxNzg1NgorOjEwNUFBMDAwMDQ0MEZGRkUwMDAwMDAwMDNDMDM4MDAwMzQ2NjBBMDA1MgorOjEwNUFCMDAwOENDQTAwMjAzNDY3MDk4MDAwMDQ0ODJCQUM2QTAxNDQ3QQorOjEwNUFDMDAwOENDNTAwMjQwMDA5MTU0MEFDNjUwMTQ4QTA2ODAxNTA1MAorOjEwNUFEMDAwOTBFNDAwNENBMDY0MDE2RDAzRTAwMDA4QTQ2MDAxNTg0QworOjEwNUFFMDAwMjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwMEUwMDA2NUI0QgorOjEwNUFGMDAwMzBBNTAwRkY4RjgzMDA1MDhGQkYwMDEwM0MwNTgwMDA1MQorOjEwNUIwMDAwMzQ0NjAwNDAyNDA0RkY5MDNDMDIxMDAwMjdCRDAwMThEQQorOjEwNUIxMDAwQUNBMzAxNENBMEE0MDE1MkFDQTYwMTU0MDNFMDAwMDhDMAorOjEwNUIyMDAwQUNBMjAxNzgyN0JERkZFMDNDMDg4MDA4QUZCRjAwMUM5NQorOjEwNUIzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMzUxMDAwODA0NAorOjEwNUI0MDAwOEUwNjAwMTgzQzA3ODAwMDMwOTIwMEZGMDBDNzIwMjUxOQorOjEwNUI1MDAwQUUwNDAwMTgwRTAwMDA0RDMwQjEwMEZGOTIwMzAwMDVBNgorOjEwNUI2MDAwMzQ2MjAwMDgwRTAwMDA0RkEyMDIwMDA1MDI0MDIwMjEwRQorOjEwNUI3MDAwMEUwMDA2NkYwMjIwMjgyMTAyNDAyMDIxOEZCRjAwMUM0QQorOjEwNUI4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDVFQgorOjEwNUI5MDAwMjQwNjAwMDEwQTAwMDYzMjI3QkQwMDIwM0MwNTgwMDBEMworOjEwNUJBMDAwMzRBMzA5ODA5MDY2MDAwODMwQzIwMDA4MTA0MDAwMEYzRQorOjEwNUJCMDAwM0MwQTAxMDEzNTQ5MDgwQUFDODkwMDAwOENBODAwNzQzMAorOjEwNUJDMDAwQUM4ODAwMDQzQzA3MDgwMDkwRTczQUQwMzBFNTAwMTBBQworOjEwNUJEMDAwNTBBMDAwMDhBQzgwMDAwODNDMEQ4MDA4MzVBQzAwODA2NworOjEwNUJFMDAwOEQ4QjAwNThBQzhCMDAwODI0ODQwMDBDMDNFMDAwMDg2NworOjEwNUJGMDAwMDA4MDEwMjEwQTAwMDZCMjI0ODQwMDBDMjdCREZGRThCMworOjEwNUMwMDAwM0MwODgwMDBBRkIwMDAxMEFGQkYwMDE0MzUwNjA5ODAxQgorOjEwNUMxMDAwOTBDNzAwMDkyNDAyMDAwNjM1MDkwOTAwMzBFMzAwRkY5RgorOjEwNUMyMDAwMDA4MDgwMjEwMEEwNjAyMTI0MEIwMDA0MTA2MjAwNzkxNAorOjEwNUMzMDAwMjQwNzAwMDI5NENGMDA1QzNDMEUwMjA0MzFFREZGRkYwQworOjEwNUM0MDAwMDFBRTUwMjVBRTBBMDAwMDkwQzUwMDA4MzBBNDAwMjAyNworOjEwNUM1MDAwMTA4MDAwMDgwMDAwMDAwMDkwQzIwMDRFM0MxRjAxMDNBRAorOjEwNUM2MDAwMzdGOTAzMDAzMDU4MDBGRjAzMTkzMDI1MjQwQjAwMDhEMgorOjEwNUM3MDAwQUUwNjAwMDQ5MTM5MDAxMTkxMjYwMDEyOTEyNDAwMTEwMgorOjEwNUM4MDAwMzMzODAwRkYwMDE4NzA4MjMwQ0YwMEZGMDFDRjUwMjE2MQorOjEwNUM5MDAwMDE0QzY4MjEzMDg4MDBGRjMxQUFGRkZGMzkwMzAwMjgzQQorOjEwNUNBMDAwMDAwQTI4ODAxNDYwMDAyQjAyMDU0MDIzOTEyNDAwMTI3MgorOjEwNUNCMDAwM0MwRTgwMDAzNUQ5MDk4MDMwODUwMEZGMDBBQzE4MjFFQQorOjEwNUNDMDAwMDAwMzEwODAwMDRCRjgyMTAwMUY4NDAwMzYwOTA2RkZGNgorOjEwNUNEMDAwQUQwOTAwMDQzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTI2OQorOjEwNUNFMDAwMDAwQkMwODI4RjJCMDAzNDMxRUQwMEZGOERDNDAxMENGRQorOjEwNUNGMDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDBCQQorOjEwNUQwMDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkMwMAorOjEwNUQxMDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODBFMgorOjEwNUQyMDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDgzQQorOjEwNUQzMDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDkxRAorOjEwNUQ0MDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDg4NAorOjEwNUQ1MDAwMjdCRDAwMTg5MTI1MDAxMTkxMjMwMDE5M0MxODA4MDA1NworOjEwNUQ2MDAwOTcxODNBQzYzMEEyMDBGRjAwMDJGODgyMzA3MDAwRkY5OAorOjEwNUQ3MDAwMDAxRkNFMDAwMDEwNEMwMDAzMjkzMDI1MDBEODcwMjVFQworOjEwNUQ4MDAwM0MwRjQwMDAwMUNGNjgyNTNDMEU4MDAwQUQwRDAwMDBBNworOjEwNUQ5MDAwMzVDOTA5MDA5MTI2MDAxMTkxMkYwMDEyMzVEOTA5ODBDQgorOjEwNURBMDAwMDAwQkMwODIzMUVEMDBGRjhGMkIwMDM0OERDNDAxMEMzRAorOjEwNURCMDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDBGOQorOjEwNURDMDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkM0MAorOjEwNUREMDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODAyMgorOjEwNURFMDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDg3QQorOjEwNURGMDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDk1RAorOjEwNUUwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMworOjEwNUUxMDAwMjdCRDAwMTgwQTAwMDZDNDI0MDcwMDEyMjdCREZGRDBDMgorOjEwNUUyMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDQUZCMDAwMTA3QQorOjEwNUUzMDAwQUZCRjAwMjhBRkIyMDAxOEFGQjEwMDE0M0MwNjgwMDAxRAorOjEwNUU0MDAwOTBDMzAxMEIzMDkzMDBGRjMwQjQwMEZGMzA2MjAwMzA4QworOjEwNUU1MDAwMDAwMEE4MjExMDQwMDA4MjAwMDA4MDIxMzRDNDA5ODA4NQorOjEwNUU2MDAwOTA4ODAwMDgwMDA4M0UwMDAwMDcyRTAzMDRBMDAwQTk0NworOjEwNUU3MDAwMjQwNDAwMDQ4Rjg3MDA1MDNDMDEwODAwQTAyNDNBRDA3RAorOjEwNUU4MDAwM0MwQzgwMDBBRDgwMDA0ODNDMDM4MDAwOTA2RTAxMEIwQworOjEwNUU5MDAwMzFDNTAwMjAxMEEwMDAwNzNDMEM4MDAwMzQ3ODA5ODAzOAorOjEwNUVBMDAwOTMxMjAwMDgwMDEyOEUwMDAwMTE3RTAzMDVFMDAwQUU4MAorOjEwNUVCMDAwM0MwMjgwMDg5MThCMDEwQjM1ODYwOTgwOTBDNDAwMDg1NAorOjEwNUVDMDAwMzE2QTAwNDAwMDBBNDgyQjMwODgwMDA4MjQxMTAwMDM4MgorOjEwNUVEMDAwMTUwMDAwMDIwMEU5OTAyMzAwMDA4ODIxM0MwMzgwMDBBNworOjEwNUVFMDAwMzQ3ODBBODAzNDZBMDkwMDk3MDcwMDJDOTE0NDAwMTEyNQorOjEwNUVGMDAwOTE0OTAwMTI5MzA1MDAxODMwOUYwMEZGMzEyODAwRkZFMAorOjEwNUYwMDAwMDIyODEwMjEwMDAyQzg4MDkzMEQwMDE4MDMzRjc4MjE1OQorOjEwNUYxMDAwMDFGMDcwMjEzMEIwMDBGRjAxRDAxODIxQTc4NzAwNTQ5NAorOjEwNUYyMDAwM0MwMTA4MDBBNDJFM0FDNjNDMDEwODAwQTQyMzNBQzg0QworOjEwNUYzMDAwMTVBMDAwMDMyNDZCMDAwQTAwMDAwMDBEMjQ2QjAwMEE2QQorOjEwNUY0MDAwMzE3MEZGRkYzQzAxMDgwMEE0MjMzQUNBM0MwMTA4MDA1RAorOjEwNUY1MDAwQTQyMDNBQzAzQzAxMDgwMEE0MjAzQUJDMEUwMDAxQjRDMQorOjEwNUY2MDAwMDIwMDIwMjEwRTAwMDUwRjAwNDAyMDIxMDA0MDIwMjFDQQorOjEwNUY3MDAwMDI0MDI4MjEwRTAwMDUxQzAyMjAzMDIxMEUwMDA2OUU0MgorOjEwNUY4MDAwMDA0MDIwMjExNkEwMDA1RjAwNDAyMDIxMEUwMDAxQzgyMworOjEwNUY5MDAwMDIwMDIwMjEzQzExMDgwMDkyMzEzQUQwMzIzNTAwMDMzMgorOjEwNUZBMDAwMTJBMDAwMTYzQzBBODAwODhGODcwMDUwM0MwRTgwMDgyMworOjEwNUZCMDAwMzVDRDAwODAyNEVDMDAwMUFEQUMwMDNDM0MwNTgwMDhGMAorOjEwNUZDMDAwOENBNjAwMDQwMTgwMjAyMTAwQ0M5MDIzMUE0MDAwMDJGRQorOjEwNUZEMDAwQUY4QzAwNTA4Q0E0MDAwNDBFMDAwNUY4QUNBNDAwMDRBMworOjEwNUZFMDAwM0MxOTgwMDA4RjM4MDA3NDNDMEY4MDA4MzVGMDAwODAyOQorOjEwNUZGMDAwMDA1ODI4MjFBRTA1MDAwQzNDMEE4MDA4MzU0MjAwODA3QworOjEwNjAwMDAwMDI2MDIwMjEwMjgwMjgyMUEwNDAwMDZCMEUwMDA2NUI2OAorOjEwNjAxMDAwM0MxMzgwMDA4Rjg0MDA1MDM0NUYwMDA2QUU2NDAxNEM1NgorOjEwNjAyMDAwOEY4ODAwNDgzQzE0MTAwMDhGQjUwMDI0MjUwOTAwMDExQQorOjEwNjAzMDAwQUY4OTAwNDg4RkIyMDAxOEEyNjgwMTUyOEZCMTAwMTRENgorOjEwNjA0MDAwQUU3RjAxNTQ4RkIwMDAxMEFFNzQwMTc4OEZCRjAwMjg2RQorOjEwNjA1MDAwOEZCNDAwMjA4RkIzMDAxQzAzRTAwMDA4MjdCRDAwMzA4MAorOjEwNjA2MDAwMzRDMzA5ODA5MDZGMDAwODAwMEY3NjAwMDAwRTZFMDNBNQorOjEwNjA3MDAwMDVBMDAwMzMzNEMyMDkwMDkwNTkwMDFCMjQxRjAwMTBGMgorOjEwNjA4MDAwM0MwMTA4MDBBMDNGM0FEMDMzMzgwMDAyMTMwMEZGN0VFNQorOjEwNjA5MDAwOEY4NzAwNTA4RjgzMDA1QzE0NjdGRjdDM0MwMzgwMDA3NworOjEwNjBBMDAwMEUwMDAwNEQwMDAwMDAwMDNDMDk4MDA4MzUyNTAwODBFRQorOjEwNjBCMDAwOTBBNDAwMDkyNDA3MDAxNjMwODgwMEZGMTEwNzAwMEQ4NgorOjEwNjBDMDAwMDAwMDAwMDA5MEE2MDAwOTNDMEMwODAwOTE4QzNBRDAxQQorOjEwNjBEMDAwMjQwQTAwMDgzMEM0MDBGRjM1OEIwMDAxM0MwMTA4MDA5MQorOjEwNjBFMDAwQTAyQjNBRDAxMDhBMDAyRjI0MEQwMDBBMTA4RDAwMjgxMgorOjEwNjBGMDAwMjQwMjAwMEMwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTlBNworOjEwNjEwMDAwOEY4NzAwNTAwRTAwMDZCNjAyMjAyODIxMEEwMDA3OUE0OQorOjEwNjExMDAwMDAwMDAwMDAzQzBCODAwODM1NkEwMDgwOEQ0NzAwNTQ2OQorOjEwNjEyMDAwOENDOTAxMEMxMTIwRkY1NEFGODcwMDUwMjQwNjAwMTRDNQorOjEwNjEzMDAwM0MwMTA4MDBBMDI2M0FEMDBBMDAwNzU4M0MwQzgwMDAxOQorOjEwNjE0MDAwOTA3MTAwMDgyNDEyMDAwMjNDMDEwODAwQTAzMjNBRDBFRAorOjEwNjE1MDAwMzIzMDAwMjAxMjAwMDAwQjI0MTUwMDAxOEY4NzAwNTAwMAorOjEwNjE2MDAwMEEwMDA3NTkyNDEwMDAwODM0NTkwMDgwOEYyMzAwMzg5MgorOjEwNjE3MDAwQUM0MzAwMDQ4QzVGMDAwNEFGM0YwMDNDMEEwMDA3NjQ5RQorOjEwNjE4MDAwM0MwQzgwMDA4Rjg3MDA1MDBBMDAwNzU5MjQxMDAwMDQzRgorOjEwNjE5MDAwQTBBMjAwMDkwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTlFRAorOjEwNjFBMDAwOEY4NzAwNTAyNDAyMDAxNDBBMDAwODFDQTBBMjAwMDlENgorOjEwNjFCMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwM0MxMDgwMDA1NworOjEwNjFDMDAwOTIwMjAxMDkyNDA1MDAwMTBFMDAwNjVCMzA0NDAwRkYyNQorOjEwNjFEMDAwM0MxRjgwMDg5M0Y4MDAwRTM3RTMwMDgwOTNGOTAwMEYwRQorOjEwNjFFMDAwOTA2RTAwMjY5M0U5MDAwQTMzMkYwMEZGMDAxODY2MDAyNgorOjEwNjFGMDAwMDAwRjZDMDAzMUNCMDBGRjAxOEQ1MDI1MDAwQjMyMDBFOQorOjEwNjIwMDAwMDE0NjM4MjUzMTI4MDBGRjM0NDU2MDAwMDBFODIwMjU4QworOjEwNjIxMDAwMjQwMkZGODEzQzAzMTAwMEFFMDQwMTRDOEZCRjAwMTQyOAorOjEwNjIyMDAwQUUwNTAxNTRBMjAyMDE1MkFFMDMwMTc4OEZCMDAwMTBGNgorOjEwNjIzMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MzA4NDAwRkZGOQorOjEwNjI0MDAwQUZCRjAwMTAwRTAwMDY1QjMwQTUwMEZGMzQ0NjAwNDBEMworOjEwNjI1MDAwM0MwNDgwMDAyNDA1RkY5MkFDODYwMTU0QTA4NTAxNTJDNQorOjEwNjI2MDAwOEY4MzAwNTA4RkJGMDAxMDNDMDIxMDAwMjdCRDAwMTgyNAorOjEwNjI3MDAwQUM4MzAxNEMwM0UwMDAwOEFDODIwMTc4MjdCREZGRDg1NQorOjEwNjI4MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjAyNAorOjEwNjI5MDAwQUZCMzAwMUMzQzA3ODAwMDkwRTIwMTA5MzA4NjAwRkY4QworOjEwNjJBMDAwMzBCMDAwRkYwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDE1NQorOjEwNjJCMDAwMTQ4MDAwMDczMDUyMDBGRjNDMDk4MDA4MzUzMzAwODAwRAorOjEwNjJDMDAwOTI2ODAwMDUzMTA1MDAwODEwQTAwMDBDMzBDQTAwMTBDQgorOjEwNjJEMDAwMDI0MDIwMjEwRTAwMDY4MDAyMjAyODIxMjQwMjAwMDExNQorOjEwNjJFMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQzNQorOjEwNjJGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MTU0MDAwMzBEMworOjEwNjMwMDAwMzRFNTBBMDA4Q0I5MDAyNDhDQjgwMDA4MTMzODAwNDcyMworOjEwNjMxMDAwMDAwMDQwMjEzQzBFODAwODM1RDMwMDgwOTI2RDAwNjg1QgorOjEwNjMyMDAwMjQwQjAwMDIzMUFDMDBGRjExOEIwMDgwM0MwNjgwMDA4MgorOjEwNjMzMDAwOTI3RjAwNEM5MEM0MDEwOTUwOUYwMDA0MzIxMzAwN0NFRQorOjEwNjM0MDAwMTEwMDAwNjcwMDAwMDAwMDMyMTMwMDdDMTY2MDAwNUE0NAorOjEwNjM1MDAwMDI0MDIwMjExNjIwMDAwODMyMEMwMDAxM0MwNzgwMDA3QQorOjEwNjM2MDAwMzRFQjBBMDA4RDY1MDAyNDhDRTgwMTA0MTRBOEZGRENERQorOjEwNjM3MDAwMDAwMDEwMjEzMjBDMDAwMTExODAwMDBEMDI0MDIwMjE4QworOjEwNjM4MDAwM0MxMDgwMDA4RTBFMDEwQzhGOEQwMDYwMTFDRDAwMDgzNgorOjEwNjM5MDAwMDAwMDAwMDAwRTAwMDczRTAyMjAyODIxOEUwRjAxMEM5NQorOjEwNjNBMDAwM0MxODgwMDgzNzEwMDA4MEFFMEYwMDUwMDI0MDIwMjFCQQorOjEwNjNCMDAwMEUwMDA2NkYwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDE0NworOjEwNjNDMDAwM0MwNzA4MDA4Q0U3MDA2NDI0RTYwMDAxM0MwMTA4MDA1QgorOjEwNjNEMDAwQUMyNjAwNjQxNjAwMDAwRDAwMDAwMDAwMDIyMDI4MjFGOQorOjEwNjNFMDAwMEUwMDA2NkYwMjQwMjAyMTkyNkYwMDY4MjQwRDAwMDIwQgorOjEwNjNGMDAwMzFFRTAwRkYxMUNEMDAyMjAyNDAyMDIxMEUwMDA4MjNDMworOjEwNjQwMDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMEUwMDAwNDE5NQorOjEwNjQxMDAwMjQwNDAwMDE5MjZDMDAyNTAyMEM1ODI1MEUwMDAwNEY0OAorOjEwNjQyMDAwQTI2QjAwMjUwQTAwMDhBRjAyMjAyODIxOEU2MzAwMTgwNQorOjEwNjQzMDAwOENFNDAxMDQ4Q0JGMDAyNDAwMDMxNjAyMTQ5RkZGQjVGNgorOjEwNjQ0MDAwMzA0NTAwN0Y5MjY5MDA0QzI2NDQwMDAxMzA5MzAwN0Y2NAorOjEwNjQ1MDAwMTI2NTAwNDAzMTIzMDBGRjE0NjRGRkFGM0MwRTgwMDgzQQorOjEwNjQ2MDAwMjY0ODAwMDEzMTExMDA3RjMxMDIwMEZGMTIyNTAwMEI4OAorOjEwNjQ3MDAwMjQwODAwMDEwMDQwOTAyMTBBMDAwODdDMjQxMTAwMDEzQQorOjEwNjQ4MDAwMjQwNTAwMDQwRTAwMDYzMjI0MDYwMDAxMEUwMDA4MjMzNQorOjEwNjQ5MDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMjQwN0ZGODBBQQorOjEwNjRBMDAwMDI0NzI4MjQwMEE3OTAyNjMyNDIwMEZGMDA0MDkwMjE5NgorOjEwNjRCMDAwMEEwMDA4N0MyNDExMDAwMTBFMDAwNzNFMDIyMDI4MjE1QQorOjEwNjRDMDAwMzIwNjAwMzAxMEMwRkZBMzMyMTAwMDgyMDI0MDIwMjFBQgorOjEwNjREMDAwMEUwMDA2ODAwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDExNQorOjEwNjRFMDAwOEU2MzAwMTgwMjQwMjAyMTAyMjAyODIxMDA2NjEwMjUxQQorOjEwNjRGMDAwMEUwMDA4NDVBRTYyMDAxODkyNjQwMDRDMjQwNTAwMDNBQgorOjEwNjUwMDAwMjQwNjAwMDEwRTAwMDYzMjMwODQwMEZGMEUwMDAwNDExOAorOjEwNjUxMDAwMjQwNDAwMDE5MjZBMDAyNTAyMEE0ODI1MEUwMDAwNEY1QgorOjEwNjUyMDAwQTI2OTAwMjUwQTAwMDg2RjI0MDIwMDAxOEU3ODAwMTg3NQorOjEwNjUzMDAwM0MxOTgwMDAwMjQwMjAyMTAzMTk3ODI1MDIyMDI4MjFERgorOjEwNjU0MDAwMEUwMDA2NkZBRTZGMDAxODkyNjQwMDRDMEEwMDA4Rjc0OAorOjEwNjU1MDAwMjQwNTAwMDQzMjQ2MDA4MDM4Q0EwMDgwMTQ2QUZGNkVBOQorOjEwNjU2MDAwM0MwRTgwMDgwQTAwMDhEMDI2NDgwMDAxMjdCREZGQzA2NQorOjEwNjU3MDAwQUZCMDAwMTgzQzEwODAwMEFGQkYwMDM4QUZCNzAwMzQ5OAorOjEwNjU4MDAwQUZCNjAwMzBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRENQorOjEwNjU5MDAwQUZCMjAwMjAwRTAwMDRCQkFGQjEwMDFDOTIwNDAxMDg5MgorOjEwNjVBMDAwOTIwNTAxMEIzMDg0MDBGRjBFMDAwODU2MzBBNTAwRkY1NQorOjEwNjVCMDAwMTQ0MDAwRTM4RkJGMDAzODNDMDk4MDA4MzUyODAwODA3NAorOjEwNjVDMDAwQTEwMDAwNkIzNjA3MDk4MDkwRTYwMDAwMjQwMjAwNTAwRAorOjEwNjVEMDAwM0MxNzA4MDAyNkY3M0E4ODMwQzMwMEZGM0MxMzA4MDAzOAorOjEwNjVFMDAwMjY3MzNBOTgxMDYyMDAwMzNDMTA4MDAwMDAwMEI4MjEyNgorOjEwNjVGMDAwMDAwMDk4MjEyNDFGMDAxMDM2MTEwQTAwMzYxNDA5ODA2QgorOjEwNjYwMDAwOEUxNjAxMDQ4RjhEMDA1MDhFMzgwMDI0MzYxOTBBODBCMgorOjEwNjYxMDAwOEU5MjAwMjAzQzAxMDgwMEEwM0YzQUQwOTcyQzAwMkMxRAorOjEwNjYyMDAwOEVGNTAwMDA5MzJCMDAxODAyNEQ3MDIzMDJEODc4MjNCQQorOjEwNjYzMDAwM0MwMTA4MDBBQzJGM0FBQzNDMDEwODAwQUMyRTNBQjA0QgorOjEwNjY0MDAwM0MwMTA4MDBBQzJEM0FENEE3OEMwMDU0MDJBMEY4MDlGNAorOjEwNjY1MDAwMzE3MjAwRkYzMDRBMDAwMjE1NDAwMEU2MzA0NTAwMDE2QgorOjEwNjY2MDAwMTBBMDAwQzEwMDAwMDAwMDkyOEEwMDA4MzE1MDAwMDgwQworOjEwNjY3MDAwMTYwMDAwMDIyNDE0MDAwMzAwMDBBMDIxM0MwNjgwMDA0NAorOjEwNjY4MDAwMzRDNDA5MDAzNEMzMEEwMDhDNkUwMDI0OTA4NTAwMTFDNAorOjEwNjY5MDAwOTA4MjAwMTI5MDk5MDAxMTMwQjgwMEZGMzA1MTAwRkYzNQorOjEwNjZBMDAwMDI5MUY4MjEwMDFGQjA4MDMzMkYwMEZGMDJEODU4MjEzQgorOjEwNjZCMDAwMDI0RkE4MjEyNkFDMDAxMDAxNzI2ODIxM0MxNTgwMDAxMQorOjEwNjZDMDAwM0MwMTA4MDBBQzJFM0FEODNDMDEwODAwQTQyRDNBQzg4MQorOjEwNjZEMDAwM0MwMTA4MDBBNDJDM0FDNDNDMDEwODAwQTQyQjNBQzY5MworOjEwNjZFMDAwMzZCNjA5ODA4Rjg3MDA1MDhGODkwMDU4OEVEMjAwMjBERgorOjEwNjZGMDAwMjQwODAwMDYwMTI3MzAyMzAyNDcyODIzM0MwMTA4MDAxNAorOjEwNjcwMDAwQUMyODNBQ0MwNEMwMDBCMzAwMDA5MDIxMDRBMDAwQjEzMgorOjEwNjcxMDAwMDBDNTgwMkIxMjAwMDBCMzAwMDAwMDAwM0MwMTA4MDBGRgorOjEwNjcyMDAwQUMyNjNBQjA4RTcxMDAwMDAyMjBGODA5MDAwMDAwMDA4QgorOjEwNjczMDAwMzA0QTAwMDIxNTQwMDA3NDAwNDA4MDIxMzA0QjAwMDFCNworOjEwNjc0MDAwNTU2MDAwMTE4RTcxMDAwNDNDMEQwODAwOERBRDNBQjQwNworOjEwNjc1MDAwM0MwRUMwMDAzQzA0ODAwMDAxQUU2MDI1QUVBQzBFMDBEMworOjEwNjc2MDAwOEM5ODAwMDAzMzBGMDAwODExRTBGRkZEMDAwMDAwMDBDRQorOjEwNjc3MDAwOTQ5RjBFMDgyNDEyMDAwMUE3OUYwMDQwOEM5OTBFMDREQworOjEwNjc4MDAwQUY5OTAwMzg4RTcxMDAwNDAyMjBGODA5MDAwMDAwMDA2MworOjEwNjc5MDAwMDIwMjgwMjUzMjAyMDAwMjE0NDAwMEE5MDAwMDAwMDAxRAorOjEwNjdBMDAwM0MwODA4MDA5NTA4M0FCQzNDMTEwODAwOTYzMTNBQzhFQworOjEwNjdCMDAwM0MwOTA4MDA5NTI5M0FCRTNDMDMwODAwOEM2MzNBQjRCMgorOjEwNjdDMDAwMDExMTY4MjEzQzFGMDgwMDhGRkYzQUQ4M0MwNzA4MDBFMAorOjEwNjdEMDAwOTRFNzNBRDIzQzExODAwMDAxQTkyMDIxOEUzODAxMENBNworOjEwNjdFMDAwMDA2ODI4MjEyNDk5MDAwMjAwQTc3MDIxMDNFMzc4MjE4MgorOjEwNjdGMDAwQUY5ODAwNjAzQzAxMDgwMEFDMkYzQUQ4M0MwMTA4MDA3QgorOjEwNjgwMDAwQTQyRTNBQzAzQzAxMDgwMEE0MkQzQUNBMEUwMDAxQjRERgorOjEwNjgxMDAwMzMyNEZGRkY4RjhDMDA0ODAwNDAyMDIxM0MwMTA4MDBGQQorOjEwNjgyMDAwQTAyQzNBRDE4RTYyMDAwODI1OEIwMDAxQUY4QjAwNDg2NgorOjEwNjgzMDAwMDA0MEY4MDkwMDAwMDAwMDhGODUwMDUwMDI4MDMwMjFFMAorOjEwNjg0MDAwMEUwMDA1MUMwMDQwMjAyMTBFMDAwNjlFMDA0MDIwMjE2NQorOjEwNjg1MDAwOEU2QTAwMEMwMTQwRjgwOTAwNDAyMDIxM0MwODA4MDAyNQorOjEwNjg2MDAwOTUwODNBQ0EzQzA5MDgwMDk1MjkzQUJFMDEwOTM4MjEyMQorOjEwNjg3MDAwMjRFNjAwMDIwRTAwMDFDODMwQzRGRkZGM0MwNDA4MDBGQgorOjEwNjg4MDAwOEM4NDNBQUMzQzAzMDgwMDhDNjMzQUI0MDA4MzI4MjMyMAorOjEwNjg5MDAwM0MwMTA4MDBBQzI1M0FBQzE0QTAwMDA2MDAwMDAwMDA0MgorOjEwNjhBMDAwM0MwQTA4MDA4RDRBM0FDQzM1NDYwMDQwM0MwMTA4MDBCRAorOjEwNjhCMDAwQUMyNjNBQ0MxMjQwMDA0MThGOEMwMDQ0OEUyQjBFMTAzNworOjEwNjhDMDAwOEY5MjAwNDRBRTRCMDAyMDhFMjIwRTE4QUU0MjAwMjQ2MAorOjEwNjhEMDAwM0MwNDA4MDA5NDg0M0FDMDBFMDAwNUZBMDAwMDAwMDA1MQorOjEwNjhFMDAwOEY5OTAwNTA4RTc4MDAxMDNDMDEwODAwQUMzOTNBRDRFMgorOjEwNjhGMDAwMDMwMEY4MDkwMDAwMDAwMDNDMEYwODAwOERFRjNBQUNERgorOjEwNjkwMDAwMTVFMEZGNzk4Rjg3MDA1MDk3OTQwMDU0M0MxMzgwMEU1OAorOjEwNjkxMDAwMzIxNTAwMTAwRTAwMDYyOUE2NzQwMDJDNTZBMDAwNDQ2MworOjEwNjkyMDAwOEVGNjAwMDQzMjFGMDA0MDU3RTAwMDFEOEVGMDAwMDg3NAorOjEwNjkzMDAwOEVFMzAwMEMwMDYwRjgwOTAwMDAwMDAwOEZCRjAwMzhGMworOjEwNjk0MDAwOEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjg3RAorOjEwNjk1MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMThCRAorOjEwNjk2MDAwMDNFMDAwMDgyN0JEMDA0MDkyMDkwMTA5OEY4ODAwM0MyMAorOjEwNjk3MDAwMDAwOTNFMDAwMEU4MzAyNUFFMDYwMDgwOEUyMzAwMjA4RQorOjEwNjk4MDAwOEUyNDAwMjRBRkEzMDAxMEFFMDMwRTE0OEZBMjAwMTBCQgorOjEwNjk5MDAwQUUwMjBFMTBBRTA0MEUxQzBBMDAwOTUxQUUwNDBFMTgxMQorOjEwNjlBMDAwMDIwMEY4MDkwMDAwMDAwMDhFRTMwMDBDMDA2MEY4MDkwNgorOjEwNjlCMDAwMDAwMDAwMDAwQTAwMEEwNzhGQkYwMDM4MjQwRTAwMDEwMworOjEwNjlDMDAwMjQwRDAwMDFBNTgwMDAyMEE1OEUwMDIyMEEwMDA5RUJGRAorOjEwNjlEMDAwQUQ4RDAwMjQzQzAxMDgwMEFDMjAzQUIwMEEwMDA5ODFDQQorOjEwNjlFMDAwOEU3MTAwMDAzQzAxMDgwMEFDMjUzQUIwMEEwMDA5ODExNAorOjEwNjlGMDAwOEU3MTAwMDA5MjExMDEwOTAwMDAyODIxMEUwMDA2NkYxRgorOjEwNkEwMDAwMzIyNDAwRkY4RkJGMDAzODhGQjcwMDM0OEZCNjAwMzBCQworOjEwNkExMDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjBENAorOjEwNkEyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwNDBBNAorOjEwNkEzMDAwMDJDMEY4MDkwMDAwMDAwMDBBMDAwQTAxMzIxRjAwNDBFRAorOjEwNkE0MDAwNTI0MEZGQjI5Nzk0MDA1NDhFQjYwRTE0OEY5MzAwNDRCOAorOjEwNkE1MDAwQUU3NjAwMjA4RUI0MEUxQ0FFNzQwMDI0MEEwMDA5RkEzMworOjEwNkE2MDAwOTc5NDAwNTQ4RjgyMDAxNDAwMDQyMTgwMDNFMDAwMDhGMgorOjEwNkE3MDAwMDA4MjEwMjEzQzA3ODAwODM0RTIwMDgwOTA0MzAwNjlDNgorOjEwNkE4MDAwMDA4MDQwMjExMDYwMDAwOTNDMDQwMTAwM0MwNzA4MDAyMAorOjEwNkE5MDAwOENFNzNBRDQ4RjgzMDAzMDAwRTMyMDIzMDQ4MDAwMDg4MQorOjEwNkFBMDAwOTM4OTAwMUMxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDg4NworOjEwNkFCMDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjE0OAorOjEwNkFDMDAwMTEyMDAwMEIwMDY3MzgyMzNDMEQ4MDAwMzVBQzA5ODA5NQorOjEwNkFEMDAwOTE4QjAwN0MzMTZBMDAwMjExNDAwMDIwMjQwOTAwMzRBRgorOjEwNkFFMDAwMDBFOTcwMkIxNUMwRkZGMTAxMDAyMDIxMDBFOTM4MjNENworOjEwNkFGMDAwMjQwM0ZGRkMwMEEzQzgyNDAwRTNDMDI0MDBGOTc4MkI4MgorOjEwNkIwMDAwMTVFMEZGRUEwMzA4MjAyMTMwQzQwMDAzMDAwNDEwMjMyRAorOjEwNkIxMDAwMTRDMDAwMTQzMDQ5MDAwMzAwMDAzMDIxMDBBOTc4MjE3RQorOjEwNkIyMDAwMDFFNjcwMjEwMEVFNjgyQjExQTBGRkUwM0MwNDAxMDA5QgorOjEwNkIzMDAwMkQzODAwMDEwMDA2QzgyQjAxMDU0ODIxMDMxOTM4MjQwRgorOjEwNkI0MDAwMTRFMEZGREEyNTI0RkZGQzI0MDJGRkZDMDBBMjE4MjQzNQorOjEwNkI1MDAwMDA2ODIwMjEwM0UwMDAwODAwODAxMDIxMEEwMDBBNkY2RAorOjEwNkI2MDAwMjQwOTAwMzAzQzBDODAwMDM1ODYwOTgwOTBDQjAwN0NFNQorOjEwNkI3MDAwMzE2QTAwMDQxNTQwRkZFOTI0MDYwMDA0MEEwMDBBN0U3OQorOjEwNkI4MDAwMDAwMDMwMjEzQzAzMDgwMDhDNjMwMDVDOEY4MjAwMThGOQorOjEwNkI5MDAwMjdCREZGRThBRkJGMDAxNDEwNjIwMDA1QUZCMDAwMTBDMgorOjEwNkJBMDAwMDAwMzI5QzAyNEE0MDI4MEFGODQwMDE0QUY4MzAwMTgxRQorOjEwNkJCMDAwM0MxMDgwMDAzNjAzMEEwMDk0NjUwMDMyMEUwMDBBNTAzMworOjEwNkJDMDAwMzBBNDNGRkY4RTA0MDEwMDNDMTgwMDgwMzcwRjAwMDMwMworOjEwNkJEMDAwMDA4MkM4MjEyNDAyRkY4MDAzMjI2MDI0MzMyOTAwN0YyMQorOjEwNkJFMDAwMDAwQ0Y5NDAwM0U5NDAyNTMzMkUwMDc4M0MwRDEwMDBERAorOjEwNkJGMDAwMDEwRDUwMjUwMUNGNTgyNUFFMEMwMDI4MzYwODA5ODAxQworOjEwNkMwMDAwQUUwQzA4MENBRTBCMDgyQ0FFMEEwODMwOTEwMzAwNjlEQworOjEwNkMxMDAwM0MwNjgwMEMwMTI2MzgyMTEwNjAwMDA2QUY4NzAwMzQ0NgorOjEwNkMyMDAwOEQwOTAwM0M4RDA2MDA2QzAxMjYzODIzMThFMDAwN0Y5QQorOjEwNkMzMDAwMDAwMDAwMDAzQzBDODAwODM1OEIwMDgwM0MwQTgwMDA3RQorOjEwNkM0MDAwQTE2MDAwNjkzNTUwMDk4MDhFMDIwMDM4M0MwNjgwMDA0MgorOjEwNkM1MDAwMzRDNTBBMDA5MEFEMDAzQzMxQTgwMDIwMTEwMDAwMTk5NQorOjEwNkM2MDAwQUY4MjAwMzAyNDBFMDAwMTNDMTk4MDAwMzczMDBBMDA0QQorOjEwNkM3MDAwQTM4RTAwMUNBRjgwMDAyNDhFMDQwMDI0OEY4NTAwMjQ4NgorOjEwNkM4MDAwMjQxODAwMDhBRjgwMDAyMEFGODAwMDI4M0MwMTA4MDBENQorOjEwNkM5MDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTQ5RgorOjEwNkNBMDAwMDAwMDMwMjE5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTAwNQorOjEwNkNCMDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDhDRQorOjEwNkNDMDAwMzFDMjAwMDE5MEI5MDAzMjI0MEYwMDAxMzMzODAwRkZCNworOjEwNkNEMDAwMDAxODIxODIxMDhGMDAzRjI0MUYwMDAyMTA5RjAwNjJDNQorOjEwNkNFMDAwMzRDMjBBQzAzQzAzODAwMDM0NjQwQTAwOEM5OTAwMjQzQQorOjEwNkNGMDAwMTcyMDAwMUQzNDY2MDkwMDkwODMwMDMwMjQxRjAwMDUxMgorOjEwNkQwMDAwMzA2MjAwM0YxMDVGMDA0QzI0MDUwMDAxOEY4NjAwMjA5OAorOjEwNkQxMDAwQTM4NTAwMUNBRjg2MDAyOEFGODYwMDI0M0MxOTgwMDBBNAorOjEwNkQyMDAwMzczMDBBMDA4RTA0MDAyNDhGODUwMDI0MjQxODAwMDhDMAorOjEwNkQzMDAwM0MwMTA4MDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIyNQorOjEwNkQ0MDAwMEUwMDBBNTQwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ5OAorOjEwNkQ1MDAwOEZCMDAwMTAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMThDOQorOjEwNkQ2MDAwMDNFMDAwMDgzMUMyMDAwMThDODgwMDA4OEM4RDAwMjRFQgorOjEwNkQ3MDAwOENDQjAwNjQzQzE5ODAwMDM3MzAwQTAwQUY4QjAwMjRCNAorOjEwNkQ4MDAwQTM4MDAwMUM4RTA0MDAyNDhGODYwMDIwOEY4NTAwMjRBMQorOjEwNkQ5MDAwMDEwRDYwMjMyNDE4MDAwOEFGOEMwMDI4M0MwMTA4MDA3NgorOjEwNkRBMDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTQ4RQorOjEwNkRCMDAwMDAwMDAwMDA5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTA0NQorOjEwNkRDMDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDhCRAorOjEwNkREMDAwMzFDMjAwMDE5MEE3MDAzMDMwRTMwMDNGNTA2NDAwMjgyQQorOjEwNkRFMDAwMzRDNTBBQzA4Q0FBMDAyNDE1NDAwMDIyMzRDODA5MDAwQQorOjEwNkRGMDAwOENBQjAwNDgzQzBDN0ZGRjM1ODVGRkZGMDE2NTEwMjRGQworOjEwNkUwMDAwM0MxODgwMDBBRjgyMDAyMDM3MDUwOTAwOEY4RTAwMjBEQgorOjEwNkUxMDAwOENBRjAwNjAwMUNGNjgyQjE1QTAwMDAyMDFDMDIwMjFCQgorOjEwNkUyMDAwOENBNDAwNjAwQTAwMEFGMEFGODQwMDIwOEQwMjAwNkM4MAorOjEwNkUzMDAwMEEwMDBBQ0IzQzA2ODAwMDhDODkwMDQ4OEY4NjAwMjAxRgorOjEwNkU0MDAwM0MwQTdGRkYzNTUwRkZGRjAxMzAzODI0M0MwNDgwMDhBNgorOjEwNkU1MDAwMjQwNTAwMDFBRjg3MDAyOEFDODAwMDZDQTM4NTAwMUNDRQorOjEwNkU2MDAwMEEwMDBBRkVBRjg2MDAyNDhDNDQwMDE0MEEwMDBBRjBDRgorOjEwNkU3MDAwQUY4NDAwMjA4RDAyMDA2ODBBMDAwQjM4M0MxODgwMDBBNworOjEwNkU4MDAwMzRDNDA5ODA4Qzg2MDA3MDhDQjAwMDE0MDBEMDQ4MkI2QworOjEwNkU5MDAwMTEyMDAwMDQwMDAwMDAwMDhDODIwMDcwMEEwMDBCMzhGMgorOjEwNkVBMDAwM0MxODgwMDA4Q0EyMDAxNDBBMDAwQjM4M0MxODgwMDBBQgorOjEwNkVCMDAwOEY4NTAwMjQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRERAorOjEwNkVDMDAwMTRBMDAwMDhBRkIwMDAxMDNDMDQ4MDAwMzQ4NzBBMDAxMgorOjEwNkVEMDAwOTBFNjAwMzAyNDAyMDAwNTMwQzMwMDNGMTA2MjAwQjc4NgorOjEwNkVFMDAwMzQ4NDA5MDA4RjkxMDAyMDAwQTA4MDIxM0MwNDgwMDBBMAorOjEwNkVGMDAwMzQ4RTBBMDA4RENEMDAwNDNDMDYwODAwOENDNjNBQjBFMgorOjEwNkYwMDAwMzFBNzNGRkYwMEU2NjAyQjU1ODAwMDAxMDBFMDMwMjFGMworOjEwNkYxMDAwOTM4RjAwMUMxMUUwMDA3NjAwRDAxMDJCMzQ5OTA5ODA2QgorOjEwNkYyMDAwOTMzODAwN0MzMzA0MDAwMjEwODAwMDc3MjQwMzAwMzQ3RgorOjEwNkYzMDAwMDBDM0Y4MkIxN0UwMDBENjAwQzMzMDIzMDBEMDEwMkI3RAorOjEwNkY0MDAwM0MwMTA4MDBBNDIzM0FCQzE0NDAwMDZEMDIwMDE4MjE0MworOjEwNkY1MDAwM0MwNDA4MDA4Qzg0M0FBQzAwNjQyODJCNTRBMDAwMDE0NworOjEwNkY2MDAwMDA2MDIwMjEzQzA1ODAwMDM0QTkwQTAwOTEyODAwM0NFMworOjEwNkY3MDAwM0MwMTA4MDBBQzI0M0FCNDMxMDMwMDIwMTQ2MDAwMDI0NAorOjEwNkY4MDAwMDAwMDQ4MjE4Q0E5MEUxODhGODgwMDJDMDEyODUwMkI1NgorOjEwNkY5MDAwMTE0MDAwNUYwMDAwMDAwMDNDMDUwODAwOENBNTNBQjREOQorOjEwNkZBMDAwMDBBOTYwMjEwMTBDNTgyQjExNjAwMDVDMDBCMDY4MkIxNworOjEwNkZCMDAwMDEwOTM4MjMwMEUwMjgyMTNDMDEwODAwQUMyNzNBQjQzRAorOjEwNkZDMDAwMTIwMDAwMDMyNDAyRkZGQzEwQjAwMDhDMzIyQTAwMDNFMAorOjEwNkZEMDAwMDBBMkY4MjQzQzAxMDgwMEE0MjAzQUQyM0MwMTA4MDA5OQorOjEwNkZFMDAwQUMzRjNBQjQwM0UwMjgyMThGODQwMDI0MTIwNDAwMDY0OQorOjEwNkZGMDAwM0MwMzgwMDg4QzZBMDA2QzAyMDAyMDIxQUY5MTAwMjBDNQorOjEwNzAwMDAwMjU1MDAwMDFBQzcwMDA2QzhGOEIwMDI4MDA4NTg4MjMxMAorOjEwNzAxMDAwQUY5MTAwMjQwMTY1MjAyM0FGODQwMDI4MTIyMDAwMDJENAorOjEwNzAyMDAwMjQwNzAwMTgyNDA3MDAxMDNDMEU4MDA4MzVDNjAwODA5NQorOjEwNzAzMDAwOTBDRDAwNjgyNDBDMDAwMTNDMDEwODAwQTAyNzNBRDA0NAorOjEwNzA0MDAwMzFBNzAwRkYxMEVDMDA0NzAwMDAwMDAwMTQ4MDAwMTg3QQorOjEwNzA1MDAwMDAwMDI4MjEzQzBCODAwMDkxNjUwMTA5MzU3MTA5ODBGMQorOjEwNzA2MDAwOEUyMzAwMTgzMEE1MDBGRjAwMDM1NjAyMjRBMzAwMDE2MAorOjEwNzA3MDAwMzE0NjAwN0YzMDcwMDA3RjEyMDYwMDdFMjQwQ0ZGODBCNgorOjEwNzA4MDAwM0MwRjgwMDgzNUU5MDA4MEExMjMwMDRDM0MwODA4MDAzMworOjEwNzA5MDAwOEQwODNBQ0MyNDBFMDAwMjNDMDEwODAwQTAyRTNCMTFDMgorOjEwNzBBMDAwMzUwRDAwMDgzQzAxMDgwMEFDMkQzQUNDMjQwNTAwMTAzOQorOjEwNzBCMDAwM0MxRjgwMDAzN0U0MEEwMDkwOTkwMDNDMzMzODAwMjBFMAorOjEwNzBDMDAwMTMwMDAwMDUwMEEwMjAyMTI0MDIwMDAxM0MwMTA4MDA1QgorOjEwNzBEMDAwQUMyMjNBQjQzNEE0MDAwMThGQkYwMDE4OEZCMTAwMTQ2MQorOjEwNzBFMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjBCMQorOjEwNzBGMDAwM0MwMTA4MDBBNDIwM0FCQzEwNDBGRjk1MDIwMDE4MjE3MgorOjEwNzEwMDAwMEEwMDBCOEIwMEMwMTgyMTBBMDAwQjgzMjQwMzAwMzBGNworOjEwNzExMDAwM0MwNTA4MDA4Q0E1M0FCNDAwQjA2ODJCMTFBMEZGQTg2QworOjEwNzEyMDAwMDAwMDAwMDAzQzA0MDgwMDk0ODQzQUJDMDA4NTc4MjFFQgorOjEwNzEzMDAwMDFFNzcwMkIxMUMwMDAwNzJDQTIwMDA0M0MxRjYwMDA2NworOjEwNzE0MDAwOEZGOTU0MDQzMzM4MDAzRjE3MDBGRkUzMjQwNDAwNDI1MgorOjEwNzE1MDAwMkNBMjAwMDQxMDQwRkY5QTI0MDQwMDQyMEEwMDBCRUUwNworOjEwNzE2MDAwOEZCRjAwMTgxNTI4RkZCOTAwMDAwMDAwOENDMjAwMTg1RQorOjEwNzE3MDAwM0MxODgwMDAyNDE5MDAwMjAwNThGODI1QUNERjAwMThFNAorOjEwNzE4MDAwMzcwNDBBMDBBMEQ5MDA2ODkwODkwMDNDMjQwRjAwMDQ0RAorOjEwNzE5MDAwMDBBMDEwMjEzMTI4MDAyMDNDMDEwODAwQTAyRjNCMTE0NQorOjEwNzFBMDAwMTEwMDAwMDIyNDA1MDAxMDI0MDIwMDAxM0MwMTA4MDAyNworOjEwNzFCMDAwQUMyMjNBQUMwQTAwMEJFNDNDMUY4MDAwOEY4ODAwMjgwOAorOjEwNzFDMDAwOEM4OTAwNjAwMTA5MjgyQjE0QTAwMDAyMDEwMDg4MjE4RAorOjEwNzFEMDAwOEM5MTAwNjAzQzBCODAwMDhENjQwRTE4MjQwQTAwMDEyNQorOjEwNzFFMDAwMDIyMDI4MjEwMjIwMzAyMUEzOEEwMDFDMEUwMDBBNTQwQworOjEwNzFGMDAwMDIyMDgwMjEwQTAwMEI3MkFGODIwMDJDMDAwQTE4MjNBMworOjEwNzIwMDAwMTIyMDAwMDczMDY0MDAwMzNDMEQ4MDAwMzVBNzA5ODA4MAorOjEwNzIxMDAwOTBFQzAwN0MzMThCMDAwNDE1NjAwMDE5MjQ4RTAwMDQ3MgorOjEwNzIyMDAwM0MwMTA4MDBBNDI0M0FEMjNDMTgwODAwOTcxODNBRDIyRQorOjEwNzIzMDAwMDMwNTIwMjEwMEM0NzgyQjExRTBGRjZDOEY4NDAwMjQwQgorOjEwNzI0MDAwMkNBNjAwMDUxNEMwRkZBNDI0MDQwMDQyMzBCOTAwMDM5QQorOjEwNzI1MDAwMTcyMDAwMDIwMEI5MTgyMzI0QTNGRkZDM0MwMTA4MDBGQQorOjEwNzI2MDAwQUMyMzNBQjQzQzAxMDgwMEE0MjAzQUQyMEEwMDBCQjE4NgorOjEwNzI3MDAwMDA2MDI4MjEwMEFDMzgyNDBBMDAwQkQ3MDBFQzE4MjY0NworOjEwNzI4MDAwM0MwMTA4MDBBNDJFM0FEMjBBMDAwQzQxMDAwMDAwMDA4NAorOjEwNzI5MDAwM0MwMTA4MDBBQzIwM0FCNDBBMDAwQkVEMjQwNDAwNDI4MworOjEwNzJBMDAwOEY4MzAwMjgzQzBCODAwMDM1NkEwQTAwMTQ2MDAwMDZCQQorOjEwNzJCMDAwMDAwMDEwMjE5MTQ2MDAzMDI0MDUwMDA1MzBDNDAwRkY3NQorOjEwNzJDMDAwMTA4NTAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQgorOjEwNzJEMDAwOTE0OTAwNDgzMTI4MDBGRjAwMDgzOUMyMTRFMEZGRkE0NAorOjEwNzJFMDAwM0MwNDgwMDgzQzA2MDgwMDk0QzYzQUJDM0MwMzA4MDBGNQorOjEwNzJGMDAwOEM2MzNBRDQzQzA1MDgwMDhDQTUzQUI0M0MxODA4MDBDRAorOjEwNzMwMDAwOTcxODNBRDIwMDY2QzgyMThDOEUwMDA0MDMyNTc4MjE5NAorOjEwNzMxMDAwMDFGODY4MjEwMUFFNjAyMzE5ODAwMDFEMDAwMDAwMDAwMworOjEwNzMyMDAwOTE1ODAwNEM4RjhEMDAzNDk1NkUwRTEwMzMwRjAwRkY3NgorOjEwNzMzMDAwOERBOTAwMDQwMUNGMzAyMzhEQUEwMDAwMzBDRkZGRkZCQworOjEwNzM0MDAwMDAwRjYxMDAwMTJDMjgyMTAwMDAzODIxMDE0NzIwMjE3NQorOjEwNzM1MDAwMDBBQzE4MkIwMDgzQzgyMUFEQTUwMDA0QURCOTAwMDAxNgorOjEwNzM2MDAwOTFCODAwMEEwMUY4NzAyMUExQUUwMDBBOTU2QzBFMTJDNgorOjEwNzM3MDAwOEY4QTAwMzRBNTRDMDAwODk1NDkwMDM4MjUyODAwMDE2MworOjEwNzM4MDAwQTU0ODAwMzg5MTQ3MDAwRDM0RUIwMDA4QTE0QjAwMEREMworOjEwNzM5MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMThEMAorOjEwNzNBMDAwOTM4RjAwMUM4RkIwMDAxNDNDMDg3RkZGOEY4NzAwMjQ1MAorOjEwNzNCMDAwM0MwQzgwMDAzNTE4RkZGRkFGQkYwMDIwQUZCMTAwMUNCMAorOjEwNzNDMDAwMzU5OTBBMDAwMjE4MTgyNDkzMkEwMDNDMDAwRjVGQzA2OAorOjEwNzNEMDAwM0MwMkJGRkYyQ0YwMDAwMTM0NDlGRkZGMDA2QkY4MjU5MQorOjEwNzNFMDAwM0MwODA4MDA4RDA4M0FENDhGOTkwMDMwM0MxODA4MDBGQQorOjEwNzNGMDAwOTcxODNBQ0EwM0U5NTgyNDAwMTA3RjgwM0MwN0VGRkYzMgorOjEwNzQwMDAwM0MwNUYwRkYwMTZGMTgyNTNDMTE4MDAwMzE0OTAwMjAzOAorOjEwNzQxMDAwMzRFMkZGRkYzNEFERkZGRjM2MkUwOTgwMjdBNTAwMTBCMAorOjEwNzQyMDAwMjQwNjAwMDIwMTE5NDAyMzI3MEEwMDAyMDA2MjE4MjRFMgorOjEwNzQzMDAwMDA4MDgwMjExNTIwMDAwMjAwMDA1ODIxOEQ4QjBFMUMzOQorOjEwNzQ0MDAwQTdBQTAwMTIwNTAwMDAzQTI0MDcwMDAwMzBFRjAwRkY1MQorOjEwNzQ1MDAwMDAwRjNGMDAwMDY3NDAyNTNDMDI4MDA4QUZBODAwMTRFMQorOjEwNzQ2MDAwMzQ0QjAwODA5MTZBMDA2ODNDMEYwODAwOTFFRjNBRDFEQworOjEwNzQ3MDAwM0MwOURGRkYzNTNGRkZGRjAwMEE2MDJCM0MwMjA4MDA5QworOjEwNzQ4MDAwOTQ0MjNBQzRBM0FGMDAxMTAxMUZDMDI0MDAwQ0NGNDBBNgorOjEwNzQ5MDAwMDMxOTE4MjU4RkE3MDAxMEFGQTMwMDE0M0MxRjA4MDA4NAorOjEwNzRBMDAwOTNGRjNBRDNBN0EyMDAxNjhGQTgwMDE0MDBFRDQ4MjQzQQorOjEwNzRCMDAwM0MwQjAxMDAzQzBBMEZGRjAxMkJDODI1MzNGODAwMDNFOQorOjEwNzRDMDAwMzU0Q0ZGRkYwMTBENzgyNDNDMDI3MDAwMDMyQzM4MjQ1QQorOjEwNzREMDAwMDAxODFFMDAwMEUyNDgyNTAxRTM1ODI1QUZBQjAwMTQ1OAorOjEwNzRFMDAwQUZBOTAwMTA5MURGMDA3Q0EzQkYwMDE1MEUwMDAwNjM2MAorOjEwNzRGMDAwMDAwMDAwMDAzNjJEMEEwMDkxQTYwMDNDMzBDNDAwMjA5OAorOjEwNzUwMDAwMTA4MDAwMDYyNjAyMDAwODNDMTEwODAwOTYzMTNBQzA5RgorOjEwNzUxMDAwMjYyRUZGRkYzQzAxMDgwMEE0MkUzQUMwOEZCRjAwMjA5QQorOjEwNzUyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjhCMQorOjEwNzUzMDAwOEY4QTAwMkMwMTZBNjAyQjU1ODBGRkM0MjQwNzAwMDE0QworOjEwNzU0MDAwMEEwMDBDQ0IzMEVGMDBGRjkzODMwMDFDM0MwMjgwMDA0QworOjEwNzU1MDAwMjdCREZGRDgzNDQ4MEEwMDAwODA1MDIxQUZCRjAwMjA2QgorOjEwNzU2MDAwMzQ0NjBBQzAwMTAwMjgyMTEwNjAwMDBFMzQ0NDA5ODAwRQorOjEwNzU3MDAwOTEwNzAwMzAyNDBCMDAwNThGODkwMDIwMzBFQzAwM0Y3QworOjEwNzU4MDAwMTE4QjAwMEIwMDAwMzgyMUFGQTkwMDEwM0MwQjgwMDhDNAorOjEwNzU5MDAwOEQ2OTAwNkNBRkFBMDAxODBFMDAwMTJCQUZBOTAwMTQ3MgorOjEwNzVBMDAwQTM4MDAwMUM4RkJGMDAyMDAzRTAwMDA4MjdCRDAwMjgzNworOjEwNzVCMDAwOEQxRjAwNDgzQzE4MDgwMDhGMTgzQUI0OEY5OTAwMjg5NgorOjEwNzVDMDAwM0MwMjdGRkY4RDA4MDA0NDM0NDNGRkZGQUZBOTAwMTA0OQorOjEwNzVEMDAwM0MwQjgwMDg4RDY5MDA2QzAzRTM3MDI0MDMxOTc4MjE0QgorOjEwNzVFMDAwMDFDRjY4MjMwMUE4MzgyMUFGQUEwMDE4MEUwMDAxMkI5MworOjEwNzVGMDAwQUZBOTAwMTQwQTAwMEQyMEEzODAwMDFDM0MwNTgwMDBFOAorOjEwNzYwMDAwMzRBNjBBMDA5MEM3MDAzQzNDMDYwODAwOTRDNjNBRDI1MworOjEwNzYxMDAwM0MwMjA4MDA4QzQyM0FDQzMwRTMwMDIwMDAwNjI0MDBGMworOjEwNzYyMDAwMTA2MDAwMUUwMDQ0MzgyNTNDMDg4MDA4MzUwNTAwODBBNQorOjEwNzYzMDAwOTBBMzAwNjgwMDAwMzAyMTI0MDgwMDAxMDAwMDIwMjFGMAorOjEwNzY0MDAwMjQwMzAwMDEzQzA1ODAwMDhDQUMwMTc4MDU4MEZGRkUxRQorOjEwNzY1MDAwMDAwMDAwMDBBQ0E4MDE0OEE0QTQwMTQ0QTRBMzAxNDY3MgorOjEwNzY2MDAwM0MwMzA4MDA4QzYzM0FENDNDMTg4MDA4MzcwRjAwODAzNAorOjEwNzY3MDAwQUNBMzAxNEMzQzE5MDgwMDkzMzkzQUQxM0MwRDEwMDBFMQorOjEwNzY4MDAwQTBCOTAxNTJBQ0E3MDE1NEE0QTYwMTU4OTFFRTAwNEMzOAorOjEwNzY5MDAwQTBBRTAxNkQwM0UwMDAwOEFDQUQwMTc4OENBODBFMUMxMworOjEwNzZBMDAwM0MwQjA4MDA4RDZCM0FCNDk0QUEwRTE2OTRBOTBFMTRFNAorOjEwNzZCMDAwMDE2NjMwMjEzMTQzRkZGRjBBMDAwRDQ4MzEyNEZGRkZFRQorOjEwNzZDMDAwM0MwNDgwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjAxNgorOjEwNzZEMDAwMTA0MDAwMUMwMDAwMDAwMDAwMDAzMDIxMDAwMDIwMjFBQworOjEwNzZFMDAwMDAwMDE4MjEzQzA1ODAwMDhDQTkwMTc4MDUyMEZGRkVEMAorOjEwNzZGMDAwMDAwMDAwMDBBQ0E2MDE0ODNDMEUwODAwOERDRTNBRDQzNAorOjEwNzcwMDAwMjQwREZGOTEyNDBDMDA0MDNDMEI4MDA4QTRBMzAxNDRFRAorOjEwNzcxMDAwMzU2QTAwODBBNEE0MDE0NkFDQUUwMTRDQTBBRDAxNTI3NAorOjEwNzcyMDAwQUNBQzAxNTRBNEEwMDE1ODkwQTMwMTA5OTE0NDAwNENCMQorOjEwNzczMDAwOTBBNjAxMDkzQzA0MTAwMEEwQTYwMTZEMDNFMDAwMDgxQQorOjEwNzc0MDAwQUNBNDAxNzg4Qzg2MEUxODk0ODgwRTEyOTQ4NzBFMTBDMworOjEwNzc1MDAwMzEwNEZGRkYwQTAwMEQ3MDMwRTNGRkZGM0MwNDgwMDA5RQorOjEwNzc2MDAwMzQ4MzBBMDA5MDY1MDAzQzMwQTIwMDIwMTA0MDAwMjZCRgorOjEwNzc3MDAwMjdCREZGRjgyNDA5MDAwMTAwMDAzODIxMjQwODAwMDE3QQorOjEwNzc4MDAwM0MwNjgwMDA4Q0M0MDE3ODA0ODBGRkZFMDAwMDAwMDBFRAorOjEwNzc5MDAwOTBDQTAxMDkzQzA0MDgwMDkwODQzQjExM0MxODgwRkYwQQorOjEwNzdBMDAwQTNBQTAwMDM4RkEzMDAwMDMwODUwMDdGMzcwRkZGRkZERgorOjEwNzdCMDAwMDA2NjEwMjVBRkEyMDAwMDkwRDkwMTBBQTNBMDAwMDIyNAorOjEwNzdDMDAwMDAwNTZFMDBBM0I5MDAwMThGQUUwMDAwMjQwQTMwMDA0RQorOjEwNzdEMDAwMjdCRDAwMDgwMUNGNjAyNDAxOEQ1ODI1QUNDQjAxNEM5QQorOjEwNzdFMDAwQUNDQTAxNTRBNEMwMDE1OEFDQzkwMTQ4QTRDNzAxNDRBMworOjEwNzdGMDAwMjQwOUZGODBBNEM4MDE0NjNDMDgxMDAwQTBDOTAxNTIxQQorOjEwNzgwMDAwMDNFMDAwMDhBQ0M4MDE3ODhDODkwRTE4OTQ4NzBFMTIyQQorOjEwNzgxMDAwOTQ4NjBFMTAzMEU4RkZGRjBBMDAwRDk3MzBDN0ZGRkY3NworOjEwNzgyMDAwMjdCREZGRThBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTREMAorOjEwNzgzMDAwMzYxODBBMDA5NzBGMDAzMjBFMDAwQTUwMzFFNDNGRkY1RAorOjEwNzg0MDAwOEUwRTAxMDAyNDBERkY4MDNDMDQyMDAwMDFDMjU4MjE0RgorOjEwNzg1MDAwMDE2RDYwMjQwMDBDNDk0MDMxNkEwMDdGMDEyQTQwMjVGNworOjEwNzg2MDAwMDEwNDM4MjUzQzA0ODAwOEFFMDcwODMwMzQ4NjAwODBDNworOjEwNzg3MDAwOTBDNTAwNjgyNDAzMDAwMjMwQTIwMEZGMTA0MzAwMDRGQQorOjEwNzg4MDAwOEY5RjAwMjA4Rjk5MDAyNEFDOUYwMDY4QUM5OTAwNjQwMgorOjEwNzg5MDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg1MAorOjEwNzhBMDAwM0MwQTA4MDAyNTRBMzU5QzNDMDkwODAwMjUyOTM2Mzg0MQorOjEwNzhCMDAwM0MwODA4MDAyNTA4MkE2MDNDMDcwODAwMjRFNzM2RkMzRAorOjEwNzhDMDAwM0MwNjA4MDAyNEM2MzQyNDNDMDUwODAwMjRBNTMxN0M2RAorOjEwNzhEMDAwM0MwNDA4MDAyNDg0MkQ4QzNDMDMwODAwMjQ2MzM0RDgyNQorOjEwNzhFMDAwM0MwMjA4MDAyNDQyMzI3NDNDMDEwODAwQUMyQTNBOTA2MQorOjEwNzhGMDAwM0MwMTA4MDBBQzI5M0E4QzNDMDEwODAwQUMyODNBODhDRAorOjEwNzkwMDAwM0MwMTA4MDBBQzI3M0E5NDNDMDEwODAwQUMyNjNBQTQ5QworOjEwNzkxMDAwM0MwMTA4MDBBQzI1M0E5QzNDMDEwODAwQUMyNDNBOTg5NAorOjEwNzkyMDAwM0MwMTA4MDBBQzIzM0FBODNDMDEwODAwQUMyMjNBQTA3NAorOjA4NzkzMDAwMDNFMDAwMDgwMDAwMDAwMDY0Cis6MDg3OTM4MDA4MDAwMDk0MDgwMDAwOTAwRjUKKzoxMDc5NDAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDgwMEUwMDAwOTAKKzoxMDc5NTAwMDgwMDgwMDgwODAwODAwMDA4MDAwMEE4MDgwMDAwQTAwMDMKKzowODc5NjAwMDgwMDAwOTgwODAwMDA5MDA4RAorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmoxMC5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1OWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmoxMC5mdy5paGV4CkBAIC0wLDAgKzEsNDYyIEBACis6MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTA4MDAwMDAwNTgwMDAwMDAwOTc5Cis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAwMDMwMDAwMDAwMEREODAwMDAwRTYwMDAwMDAwMDUwMDAwMDAwMDY4Cis6MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQorOjEwMDA2MDAwMDAwMDAwMUYwNTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1QgorOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQorOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQorOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgorOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQorOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAorOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMworOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MworOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNworOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQorOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgorOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgorOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA3QzAwMDAwMDA4MkQ4MDAxMUNFOQorOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQorOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAorOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA4MzAwMDAwMDBDMjk4MDAwMDJDRAorOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQorOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQorOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNworOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgorOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQorOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQorOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA3MjAwMDAwMDE4ODAwMEZGRjE5RAorOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAorOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQworOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJFMAorOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQorOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAorOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQorOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAorOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAorOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQorOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NworOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQorOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQorOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAorOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQorOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAorOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQkNERAorOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBCQjAwMDAwMDE4ODAwMDAwMDAzMworOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQorOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQorOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAorOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMDdBNQorOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAorOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAorOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRDJBQgorOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMDczNgorOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDEzMjAwMDAwMDE4ODAwMDAwRkQyRAorOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE1NjAwMDAwMDE4ODAwMDAwNEVBOAorOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOEZBRQorOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQworOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgorOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgorOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAorOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQorOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgorOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQorOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgorOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQorOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgorOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgorOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTc0NQorOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBDQjAwMDAwMDEwMkM2MjAxQkFFMAorOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQworOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQorOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRGMworOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQworOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAorOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAorOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgorOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQorOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQorOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDE4MDAwMjAwMDBEMworOjEwMDUwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgxMAorOjEwMDUxMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY1QgorOjEwMDUyMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBENQorOjEwMDUzMDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE1QgorOjEwMDU0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAxMQorOjEwMDU1MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAxNQorOjEwMDU2MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBFMQorOjEwMDU3MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDU0OAorOjEwMDU4MDAwMDAwMDAwMTg4MDAwRkY1RjAwMDAwMDAxMDU2MTE0MDBGQQorOjEwMDU5MDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE5NAorOjEwMDVBMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA5RQorOjEwMDVCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDUwNworOjEwMDVDMDAwMDAwMDAwMTg4MDAwRkY1NzAwMDAwMDAxMDU2MjE0MDBDMQorOjEwMDVEMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFEMgorOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNDMgorOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA5NAorOjEwMDYwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwMQorOjEwMDYxMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVBRAorOjEwMDYyMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM4NQorOjEwMDYzMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTYwRQorOjEwMDY0MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFDOAorOjEwMDY1MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBDNQorOjEwMDY2MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYyMworOjEwMDY3MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM2MQorOjEwMDY4MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI5MQorOjEwMDY5MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA3MQorOjEwMDZBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMworOjEwMDZCMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBFNworOjEwMDZDMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ1OAorOjEwMDZEMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBCRAorOjEwMDZFMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAyNAorOjEwMDZGMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI3QgorOjEwMDcwMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBFQQorOjEwMDcxMDAwMDAwMDAwMDkwNTYwMDAwRjAwMDAwMDEwQjE4QTAwMEIwNgorOjEwMDcyMDAwMDAwMDAwMDAwNTYzNEMwMDAwMDAwMDA4MDUwQTAwMTJFQworOjEwMDczMDAwMDAwMDAwMTBCOTYyMTQwMzAwMDAwMDAwMDMwMDAwMDA3NAorOjEwMDc0MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDE4ODAwMEZGMjQ1MAorOjEwMDc1MDAwMDAwMDAwMTBCNjA2MTQwNDAwMDAwMDA4MDMwNjAwMDFBMworOjEwMDc2MDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDE4ODAwMEZGMjk5NgorOjEwMDc3MDAwMDAwMDAwMDAwQzk2MTgwMDAwMDAwMDA5MEM5OUZGRkYxMworOjEwMDc4MDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDEwQjE5NjMyMDI0MQorOjEwMDc5MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDEwQworOjEwMDdBMDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDAzQQorOjEwMDdCMDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUE3RAorOjEwMDdDMDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDM4QgorOjEwMDdEMDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDE0MgorOjEwMDdFMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDBDRQorOjEwMDdGMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGMTc5NAorOjEwMDgwMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDA1OAorOjEwMDgxMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDA1OQorOjEwMDgyMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwMDA5RgorOjEwMDgzMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMUNCMQorOjEwMDg0MDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDA4MkM4MDAwMDZCNQorOjEwMDg1MDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDBBRAorOjEwMDg2MDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDY5QworOjEwMDg3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDExNgorOjEwMDg4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBFMAorOjEwMDg5MDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDAxMQorOjEwMDhBMDAwMDAwMDAwMTg4MDAwRkYwMjAwMDAwMDEwOTFBMEIwMDlCNQorOjEwMDhCMDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDkzOAorOjEwMDhDMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDdGNgorOjEwMDhEMDAwMDAwMDAwMTg4MDAwRkY5QjAwMDAwMDE4ODAwMDAwMTAzRQorOjEwMDhFMDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEJCMAorOjEwMDhGMDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDJBQQorOjEwMDkwMDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDAwNgorOjEwMDkxMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGN0QwQgorOjEwMDkyMDAwMDAwMDAwMTg4MDAwMDAzMTAwMDAwMDE4ODAwMDAwMDY2MAorOjEwMDkzMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDA2MgorOjEwMDk0MDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTVCNworOjEwMDk1MDAwMDAwMDAwMTg4MDAwRkVFQzAwMDAwMDAwMDY4MjAwMDA4RAorOjEwMDk2MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDEyNQorOjEwMDk3MDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkZGRgorOjEwMDk4MDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDAwRgorOjEwMDk5MDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDVGRgorOjEwMDlBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAxMEMxMQorOjEwMDlCMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMTg0MworOjEwMDlDMDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGNzE2OQorOjEwMDlEMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEVEMworOjEwMDlFMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDAxMQorOjEwMDlGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDAzNgorOjEwMEEwMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDEwMkM2MjAwMDI5OQorOjEwMEExMDAwMDAwMDAwMTg4MDAwMDAwQzAwMDAwMDBCMkZERjAwMDIxNworOjEwMEEyMDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDFFNworOjEwMEEzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMEZGRkYyQworOjEwMEE0MDAwMDAwMDAwMTg4MDAwRkVDRTAwMDAwMDA4MkM4MDAxMEQ4MAorOjEwMEE1MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBFMworOjEwMEE2MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGNjhDQQorOjEwMEE3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDExNAorOjEwMEE4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBERQorOjEwMEE5MDAwMDAwMDAwMDgyQTAwMDAwQTAwMDAwMDAwMDUwMDAwMDAxNQorOjEwMEFBMDAwMDAwMDAwMTg4MDAwRkVDMjAwMDAwMDAwMDY4MjAwMDA2NgorOjEwMEFCMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDgzOAorOjEwMEFDMDAwMDAwMDAwMDgyRDgwMDEzNDAwMDAwMDAwMDAwMDAwMDAzQworOjEwMEFEMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDA4MkM4MDAxNDA5MgorOjEwMEFFMDAwMDAwMDAwMDgyRDAwMDAzQzAwMDAwMDA4MkQ4MDAxMjRCQgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA3NworOjEwMEIwMDAwMDAwMDAwMDgyQzgwMDA4MDAwMDAwMDA4MkQwMDAwMDA3QworOjEwMEIxMDAwMDAwMDAwMDgyRDgwMDEwNTAwMDAwMDEwQkVFMjAwMDU2NQorOjEwMEIyMDAwMDAwMDAwMTg4MDAwRkVBQjAwMDAwMDAxMDU2MjE0MDAwOAorOjEwMEIzMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDE2QworOjEwMEI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAwMQorOjEwMEI1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUFCRQorOjEwMEI2MDAwMDAwMDAwMTg4MDAwRkYzNDAwMDAwMDBDMjk4MDAwMDEwNAorOjEwMEI3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDk4RQorOjEwMEI4MDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFQTVDOQorOjEwMEI5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTUyOAorOjEwMEJBMDAwMDAwMDAwMTg4MDAwRkYyQzAwMDAwMDEwOTFBMDNDMDIwMworOjEwMEJCMDAwMDAwMDAwMTBCMUU2NjIwNzAwMDAwMDBCMkZERjAwMDIwQQorOjEwMEJDMDAwMDAwMDAwMDAyQzMxMDAwMDAwMDAwMDA5MkNCMTAwN0Y2MworOjEwMEJEMDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDBEMworOjEwMEJFMDAwMDAwMDAwMDgyRDgwMDEwRDAwMDAwMDEwQjFBODAwMDZEMworOjEwMEJGMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkMyMDAwMDAxQQorOjEwMEMwMDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTBDQworOjEwMEMxMDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZGMjc1OAorOjEwMEMyMDAwMDAwMDAwMTBCMUE2MDAxMDAwMDAwMDEwMDAxRjAwMDAxRQorOjEwMEMzMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDAwMEE2MDAwMDBGNQorOjEwMEM0MDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDhGNQorOjEwMEM1MDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDAwMEQ2MjAwMDBGQworOjEwMEM2MDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDczMDAwMDMwQgorOjEwMEM3MDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDgwNAorOjEwMEM4MDAwMDAwMDAwMEY0Q0UzMDAxODAwMDAwMDAwMEM5OTJDMDAzRAorOjEwMEM5MDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDA4MEY4MDAwMDAyMAorOjEwMENBMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDAwMzMzMTAwMDAyQQorOjEwMENCMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDAwMkFERjAwMDBFQgorOjEwMENDMDAwMDAwMDAwMDgyQTAwMDAwQzAwMDAwMDEwMDA5RjAwMDAzNworOjEwMENEMDAwMDAwMDAwMDAwRjIwMDAwMDAwMDAwMDBDMUY4MDAwMDEzOQorOjEwMENFMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNzkzRQorOjEwMENGMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUExRAorOjEwMEQwMDAwMDAwMDAwMTg4MDAwRkYwMDAwMDAwMDBGNDcyMjAwMDhDQworOjEwMEQxMDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDg4MQorOjEwMEQyMDAwMDAwMDAwMDgwMjgwMDAwMTAwMDAwMDA3MDI4NTFDMDA4RQorOjEwMEQzMDAwMDAwMDAwMDg4Mjg1MDAwMTAwMDAwMDAwMDI4NTRDMDBEMAorOjEwMEQ0MDAwMDAwMDAwMDc0Mjg1MUMwMDAwMDAwMDAzQzNBQTUyMDBGNworOjEwMEQ1MDAwMDAwMDAwMDAwM0IxMEUwMDAwMDAwMDA3NEIwNzFDMDA1QworOjEwMEQ2MDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDBGMEE5NjAwMDM3QworOjEwMEQ3MDAwMDAwMDAwMDAwQTk1NUMwMDAwMDAwMDAwNEEwMDVBMDBENAorOjEwMEQ4MDAwMDAwMDAwMDAwQzk2MEEwMDAwMDAwMDA5MEM5OUZGRkYwQgorOjEwMEQ5MDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDEwQjE5NjMyMDJCNQorOjEwMERBMDAwMDAwMDAwMDgwRjgwMDAwNTAwMDAwMDEwQjFBODAwMDgzNgorOjEwMERCMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDBCMkZERjAwMDI4OQorOjEwMERDMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDAwNAorOjEwMEREMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDgxMAorOjEwMERFMDAwMDAwMDAwMTg4MDAwRkVFRTAwMDAwMDBDMjk4MDAwMDFDOQorOjEwMERGMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDMUY4MDAwMDExOAorOjEwMEUwMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEQ5QQorOjEwMEUxMDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFNTM4OAorOjEwMEUyMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTU5NQorOjEwMEUzMDAwMDAwMDAwMTg4MDAwRkVEQTAwMDAwMDBDMjk4MDAwMDE4QworOjEwMEU0MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDdCRAorOjEwMEU1MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNEJGQQorOjEwMEU2MDAwMDAwMDAwMTBCMTgwMDAwNDAwMDAwMDFGMDUwMzAzMDAxMworOjEwMEU3MDAwMDAwMDAwMDgwNTAwMDBGRjAwMDAwMDE4MDAwMjAwMDA0QworOjEwMEU4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFENDAwMDBBMworOjEwMEU5MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMjA1MzAwMDA1MAorOjEwMEVBMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDAwMkY4MEFBMDBCQQorOjEwMEVCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDA4MDI1NDAwMEUxMAorOjEwMEVDMDAwMDAwMDAwMDAyQzQwMDAwMDAwMDAwMDA5Mjk1MjAwM0ZGMworOjEwMEVEMDAwMDAwMDAwMTgwMDA0MDAwMDAwMDAwMDE4ODAwMDAwMTA0RQorOjEwMEVFMDAwMDAwMDAwMTg4MDAwMDAxMTAwMDAwMDE4ODAwMDAwMzk4OAorOjEwMEVGMDAwMDAwMDAwMTg4MDAwMDBGRDAwMDAwMDE4ODAwMDAwRkNDOQorOjEwMEYwMDAwMDAwMDAwMTg4MDAwMDBGQjAwMDAwMDE4ODAwMDAwRkJCQgorOjEwMEYxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMTM4RAorOjEwMEYyMDAwMDAwMDAwMTg4MDAwMDBGNzAwMDAwMDE4ODAwMDAwMEI4RgorOjEwMEYzMDAwMDAwMDAwMTg4MDAwMDExNzAwMDAwMDE4ODAwMDAxNjUwMworOjEwMEY0MDAwMDAwMDAwMTg4MDAwMDA2MzAwMDAwMDE4ODAwMDAwQ0U0MAorOjEwMEY1MDAwMDAwMDAwMTg4MDAwMDBERTAwMDAwMDAwMkEwMDAwMDBGMQorOjEwMEY2MDAwMDAwMDAwMTg4MDAwRkZFNTAwMDAwMDAwMkEwMDAwMDBEQgorOjEwMEY3MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDE4ODAwMEZGRTI0MworOjEwMEY4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDE4ODAwMEZGRTBDMAorOjEwMEY5MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDAwMDUwMjAwMDAzMAorOjEwMEZBMDAwMDAwMDAwMTA5MTk2MzQyMTAwMDAwMDEwMjA1RjAwMDAyNgorOjEwMEZCMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDYyRAorOjEwMEZDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDA4MkQ4MDAxMDIyRQorOjEwMEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA5MgorOjEwMEZFMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4MDAwQTAwMDA3MQorOjEwMEZGMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTE5NjM0MTY2OQorOjEwMTAwMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMDlEODAwMDA3MAorOjEwMTAxMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAxMEVDMworOjEwMTAyMDAwMDAwMDAwMDgyRDAwMDAwQTAwMDAwMDA4MkQ4MDAxMDJDOQorOjEwMTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAzMQorOjEwMTA0MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDAwMkMxMzAwMDBGMgorOjEwMTA1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA2NworOjEwMTA2MDAwMDAwMDAwMTA5MTk2MzQwOTAwMDAwMDEwMjA1RjAwMDA3RAorOjEwMTA3MDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDY2QworOjEwMTA4MDAwMDAwMDAwMDgyRDAwMDA2QTAwMDAwMDA4MkQ4MDAxMDIwOQorOjEwMTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBEMQorOjEwMTBBMDAwMDAwMDAwMDAwRDdBMDAwMDAwMDAwMDE4MDAwQTAwMDA5NworOjEwMTBCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDAwMEQ2MTAwMDA5OAorOjEwMTBDMDAwMDAwMDAwMDAwMzYyMDAwMDAwMDAwMDEwMjM0MjAwQzE4NQorOjEwMTBEMDAwMDAwMDAwMDAwMjYzOEMwMDAwMDAwMDAwMjY0NjAwMDBCMworOjEwMTBFMDAwMDAwMDAwMDgwMjA0MDAxMjAwMDAwMDEwQjkwNjA4MjdFMgorOjEwMTBGMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDAxQgorOjEwMTEwMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkY3OAorOjEwMTExMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDAzOAorOjEwMTEyMDAwMDAwMDAwMDgwQ0M2MDAxMjAwMDAwMDE4ODAwMEZGQ0U2RQorOjEwMTEzMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMTE0MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDA4MjcxMTAwMTI5RQorOjEwMTE1MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDA4QTMxQjAwMTJDMQorOjEwMTE2MDAwMDAwMDAwMTBCMTk4MDAwMzAwMDAwMDEwMDAxRjAwMDBGNAorOjEwMTE3MDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMDNBNworOjEwMTE4MDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEM1RQorOjEwMTE5MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMjU5NjAwMDBFNQorOjEwMTFBMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY2NjAwMDAxRQorOjEwMTFCMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwMEZCNgorOjEwMTFDMDAwMDAwMDAwMEYwMjA0MDAwMjAwMDAwMDEwQjYwQzA4MDUyOQorOjEwMTFEMDAwMDAwMDAwMEMxRkJGMDAwMDAwMDAwMDEwMjg2NjAwMDM4NAorOjEwMTFFMDAwMDAwMDAwMDgwNzhGMDAwMTAwMDAwMDBDMzM2NjAwMTBBQgorOjEwMTFGMDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDBFMgorOjEwMTIwMDAwMDAwMDAwMDU3MzY2MkMwMDAwMDAwMDAwMzFFMzJFMDA5MgorOjEwMTIxMDAwMDAwMDAwMDgyRDgwMDAxMDAwMDAwMDE4ODAwMEZGOEVFNAorOjEwMTIyMDAwMDAwMDAwMDAyMzAwMDAwMDAwMDAwMDA5MjVFNkZGRkY4OQorOjEwMTIzMDAwMDAwMDAwMDgyMjAwMDAwQjAwMDAwMDBDNjk1MjAwMDBCMgorOjEwMTI0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjg2NjAwNzVENgorOjEwMTI1MDAwMDAwMDAwMTg4MDAwRkY4NzAwMDAwMDAwMkEwMDAwMDA0NgorOjEwMTI2MDAwMDAwMDAwMDgyQzgwMDA0MDAwMDAwMDA4MkQwMDAwMjAzNQorOjEwMTI3MDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDAwMDAwMDAwMDA5QworOjEwMTI4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDBGNDJFQTAwMTA5NAorOjEwMTI5MDAwMDAwMDAwMTAwMDRGMDAwNDAwMDAwMDEwQjc0NjkyMDA0QworOjEwMTJBMDAwMDAwMDAwMDgwMjQ5MDAxMjAwMDAwMDEwQjU4NDBBMDA4NgorOjEwMTJCMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDEwQkE2NjM0NTcwNQorOjEwMTJDMDAwMDAwMDAwMDg4MzA1MDAxMjAwMDAwMDEwMDA0RjAwMDIxQgorOjEwMTJEMDAwMDAwMDAwMDAwMzQ5MDAwMDAwMDAwMDAxODMwNjhDMDBBQworOjEwMTJFMDAwMDAwMDAwMDA4M0M2MEMwMDAwMDAwMDEwQjE4NzAwMTE1MAorOjEwMTJGMDAwMDAwMDAwMDAwQjZFMDAwMDAwMDAwMDEwQkVFOTAwMDVCOQorOjEwMTMwMDAwMDAwMDAwMTg4MDAwRkY2RTAwMDAwMDAxMDU2OTE0MDA1NQorOjEwMTMxMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjRFOTAwMDFGQQorOjEwMTMyMDAwMDAwMDAwMTBCMUU5MkM0QTAwMDAwMDAwODY2OTJDMDA4MgorOjEwMTMzMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDA5MDJFQUZGRkZCOAorOjEwMTM0MDAwMDAwMDAwMTAwMDBDMDAwMjAwMDAwMDAwMDIwNDBBMDA2RgorOjEwMTM1MDAwMDAwMDAwMEY0NjBDMDAwMTAwMDAwMDBGMDI4NTAwMDE5NAorOjEwMTM2MDAwMDAwMDAwMTA5MThDMDFGQzAwMDAwMDEwQjcwNDBFNDEzOQorOjEwMTM3MDAwMDAwMDAwMDAwRjQwMDAwMDAwMDAwMDAwMEQ2MTAwMDBCMAorOjEwMTM4MDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDAwMAorOjEwMTM5MDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEMwMDAwMDBDOQorOjEwMTNBMDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDA4MEM4NjAwMTIwNgorOjEwMTNCMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDBDMjk1MjAwMDAwQworOjEwMTNDMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDA4MjcxMTAwMTIxQworOjEwMTNEMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDAwMjY0NjAwMDBBQgorOjEwMTNFMDAwMDAwMDAwMDAyMzA2MDAwMDAwMDAwMDEwQjE5ODAwMDU3NgorOjEwMTNGMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MEY4MDAwMDQyMworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAxRjAwMDBBRAorOjEwMTQxMDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDBCRgorOjEwMTQyMDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA1NzM2NjJDMDA3MAorOjEwMTQzMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDEwQjE4NzAwMTY5MworOjEwMTQ0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY2QjAwMDc1NworOjEwMTQ1MDAwMDAwMDAwMDAwRDY5MDAwMDAwMDAwMDAwMEE2QzAwMDBBMAorOjEwMTQ2MDAwMDAwMDAwMDAwQUVEMDAwMDAwMDAwMDAwMEI2RTAwMDAwQworOjEwMTQ3MDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMEM4NzAwMDA0RQorOjEwMTQ4MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDEwMjA1MzAwMDAzRgorOjEwMTQ5MDAwMDAwMDAwMEM2OTUyMDAwMTAwMDAwMDEwMDAxRjAwMDA1NQorOjEwMTRBMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjMxQjAwMDA4QgorOjEwMTRCMDAwMDAwMDAwMDAyNzExMDAwMDAwMDAwMDAwMjY5MDAwMDAzRQorOjEwMTRDMDAwMDAwMDAwMTBCODE3MEUwMzAwMDAwMDBDMjk4MDAwMDA3NworOjEwMTREMDAwMDAwMDAwMTg4MDAwRkZGNjAwMDAwMDEwQjE5ODAwMDIyNAorOjEwMTRFMDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMUExRAorOjEwMTRGMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMENFQgorOjEwMTUwMDAwMDAwMDAwMDgyRDgwMDAxMDAwMDAwMDEwMDAxRjAwMDBFNworOjEwMTUxMDAwMDAwMDAwMDAwRDZFMDAwMDAwMDAwMDAzRTdDRjM0MDA2MworOjEwMTUyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDA4NworOjEwMTUzMDAwMDAwMDAwMTBCMTg3MDAwNzAwMDAwMDAwMzYxNDAwMDAxMgorOjEwMTU0MDAwMDAwMDAwMDAzNjk1MDAwMDAwMDAwMDAwMzcxNjAwMDA4MworOjEwMTU1MDAwMDAwMDAwMDgyQzgwMDA1MDAwMDAwMDA4MkQwMDAwMzAyMgorOjEwMTU2MDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDE4ODAwMEZGMjRGRgorOjEwMTU3MDAwMDAwMDAwMDAyNjQ2MDAwMDAwMDAwMDAwMjMwMDAwMDBEQworOjEwMTU4MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDAwMEI2RTAwMDBEMAorOjEwMTU5MDAwMDAwMDAwMDNFN0NGMkMwMDAwMDAwMDA4MjIwMDAwMUIyMQorOjEwMTVBMDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBCRgorOjEwMTVCMDAwMDAwMDAwMTg4MDAwRkYxQjAwMDAwMDAwMkEwMDAwMDA0RgorOjEwMTVDMDAwMDAwMDAwMTAwODY2MDAwNTAwMDAwMDAwMDY2NjAwMDAyQworOjEwMTVEMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwRjBCMQorOjEwMTVFMDAwMDAwMDAwMTBCNjBDMDgwMjAwMDAwMDE4ODAwMEZGMTQ3NAorOjEwMTVGMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4RjAwMDAxMworOjEwMTYwMDAwMDAwMDAwMDg4NzhGMDAwMTAwMDAwMDBDNzM2NjAwMTBDNgorOjEwMTYxMDAwMDAwMDAwMDgyQzgwMDAxODAwMDAwMDA4MkQwMDAwMThCMQorOjEwMTYyMDAwMDAwMDAwMDgyRDgwMDAwMjAwMDAwMDBDNUZCRjAwMDBEOQorOjEwMTYzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAwNgorOjEwMTY0MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMjg2NjAxRjVEQworOjEwMTY1MDAwMDAwMDAwMDgyQzgwMDAwMzAwMDAwMDA4MkQwMDAwMDM5QgorOjEwMTY2MDAwMDAwMDAwMDkzMDYwRkZGMDAwMDAwMDA4MkQ4MDAwMDEzQworOjEwMTY3MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDAzNgorOjEwMTY4MDAwMDAwMDAwMDgyQzgwMDAxQTAwMDAwMDA4MkQwMDAwMUEzRAorOjEwMTY5MDAwMDAwMDAwMDU3MzY2MDAwMDAwMDAwMDA4MkQ4MDAwMDJCNQorOjEwMTZBMDAwMDAwMDAwMDAzMTgwMDAwMDAwMDAwMDEwOTFERTAwMDAwQQorOjEwMTZCMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEMyOQorOjEwMTZDMDAwMDAwMDAwMDgyRDgwMDAwNDAwMDAwMDE4ODAwMEZFRjhEMworOjEwMTZEMDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDE4ODAwMEZFRjY2NAorOjEwMTZFMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBBMQorOjEwMTZGMDAwMDAwMDAwMDAwRjAwODAwMDAwMDAwMDA4MEY4MDAwMDdCRAorOjEwMTcwMDAwMDAwMDAwMTg4MDAwMDAxQTAwMDAwMDAwMjgwQTAwMDBGNQorOjEwMTcxMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDA4MjIwMDAwMDk4RgorOjEwMTcyMDAwMDAwMDAwMDAyOTAwMDAwMDAwMDAwMDBGNjU2ODAwMTBBNAorOjEwMTczMDAwMDAwMDAwMDNGNjZDOTQwMDAwMDAwMDEwQjk3MkEwMDREMQorOjEwMTc0MDAwMDAwMDAwMEM3M0U3MDAxOTAwMDAwMDBDMjE0MjAwMDRBNworOjEwMTc1MDAwMDAwMDAwMDAzQ0Y4MDAwMDAwMDAwMDBDMjk4MDAwMDBBMAorOjEwMTc2MDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDA4MjIwMDAwMDhDNAorOjEwMTc3MDAwMDAwMDAwMEM2MTQyMDAwNDAwMDAwMDE4MDAwQTAwMDA5NAorOjEwMTc4MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDBDNjE0MjAwMDBBMworOjEwMTc5MDAwMDAwMDAwMTAwMTQyMDAwMzAwMDAwMDBDMzNFNzAwMURCMAorOjEwMTdBMDAwMDAwMDAwMEM2MTQyMDAwMjAwMDAwMDE4MDAwQTAwMDA2NgorOjEwMTdCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBEMAorOjEwMTdDMDAwMDAwMDAwMEYwRjQ3MDAwNzAwMDAwMDA4MEY4MDAwMDgwRQorOjEwMTdEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDA5RjAwMDBBNQorOjEwMTdFMDAwMDAwMDAwMTg4MDAwRkVENTAwMDAwMDAwMzM1MTAwMDAwQQorOjEwMTdGMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFDNjAwMjMxNQorOjEwMTgwMDAwMDAwMDAwMEYwRjUwMDAwNzAwMDAwMDAwMEE2MDAwMDBGOQorOjEwMTgxMDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDgxOQorOjEwMTgyMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDBGNEM2MjAwMTBDMgorOjEwMTgzMDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkYwQQorOjEwMTg0MDAwMDAwMDAwMTAwNzUwMDAwMzAwMDAwMDBDMEQxQTAwMDhGMworOjEwMTg1MDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDAwMENDNjAwMDA4MQorOjEwMTg2MDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMDY5ODAwMDA0RgorOjEwMTg3MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDEwMDZDMjAwMDRGMgorOjEwMTg4MDAwMDAwMDAwMEMyOTAwMDAwMjAwMDAwMDEwMjY0MjAwMDJBNworOjEwMTg5MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDA4MjIwMDAwMDE5MworOjEwMThBMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMjMxQjAwMDA0QgorOjEwMThCMDAwMDAwMDAwMDAyNzExMUEwMDAwMDAwMDAwNjY5MDAwMDBFMAorOjEwMThDMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwQjE5NzMyMDlGRQorOjEwMThEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY5ODAwMDBCNQorOjEwMThFMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDNFQgorOjEwMThGMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDEwMDAxRjAwMDA0NgorOjEwMTkwMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDE4ODAwMEZGRjNCMworOjEwMTkxMDAwMDAwMDAwMTBCMUM4MDAxMzAwMDAwMDEwQjFDNjAwMDNBMQorOjEwMTkyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA3RgorOjEwMTkzMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDBDMjk1MjAwMDM5NgorOjEwMTk0MDAwMDAwMDAwMTAwNkMyMDAwMjAwMDAwMDBDMjk1MjAwMDIzNAorOjEwMTk1MDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjc2NTAwMDA4OAorOjEwMTk2MDAwMDAwMDAwMDAyNkU0MDAwMDAwMDAwMDA4MjIwMDAwMTYyRAorOjEwMTk3MDAwMDAwMDAwMTBCMUM2MDAwMzAwMDAwMDAwMjM0ODAwMDA3MgorOjEwMTk4MDAwMDAwMDAwMTBCMTgwMDAwNTAwMDAwMDAwMjM0ODAwMDBBNgorOjEwMTk5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY1MDAwMDcxRAorOjEwMTlBMDAwMDAwMDAwMTg4MDAwMDAxMjAwMDAwMDA4MjIwMDAwMTY0RAorOjEwMTlCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMzAxNDAwMDAyRQorOjEwMTlDMDAwMDAwMDAwMDAzMDk1MDAwMDAwMDAwMDEwMDc1MDAwMDNFOAorOjEwMTlEMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDA5MEQxQTAwRkZBRgorOjEwMTlFMDAwMDAwMDAwMEYzMTE2MDAwODAwMDAwMDAwMzE2MjM0MDBEMgorOjEwMTlGMDAwMDAwMDAwMDNGMTYyMzAwMDAwMDAwMDEwMjA1RjAwMDBEMgorOjEwMUEwMDAwMDAwMDAwMDAyQzUxMDAwMDAwMDAwMDA5MkNEMTAwN0ZENAorOjEwMUExMDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDA4NAorOjEwMUEyMDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUEzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMDVDMjAwMDQ0QworOjEwMUE0MDAwMDAwMDAwMDgwRjgwMDAwNzAwMDAwMDAwMzMwMDAwMDBDNQorOjEwMUE1MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDE4ODAwMEZFODZCQgorOjEwMUE2MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBGMEY1MDAwMDdENworOjEwMUE3MDAwMDAwMDAwMTBCMUM2MDAyRDAwMDAwMDBGNDc0MjAwMDgxMgorOjEwMUE4MDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDgwNAorOjEwMUE5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MDkwMDAwMDEwNQorOjEwMUFBMDAwMDAwMDAwMDcwOTEyMUMwMDAwMDAwMDAzQ0JDQTkyMDBDRQorOjEwMUFCMDAwMDAwMDAwMDAwQjk3QTIwMDAwMDAwMDA3NDIxNzFDMDA2NgorOjEwMUFDMDAwMDAwMDAwMDAwQjA0MDAwMDAwMDAwMDBGMEE4NDAwMDM2NworOjEwMUFEMDAwMDAwMDAwMDAwQTk1OUMwMDAwMDAwMDAwNEEwMDlBMDBFNworOjEwMUFFMDAwMDAwMDAwMDg4MjEyMDAwMTAwMDAwMDAxMEMxNzA4MDAyRAorOjEwMUFGMDAwMDAwMDAwMDAwQzk3OEMwMDAwMDAwMDAwMDIxODAwMDA5RAorOjEwMUIwMDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDA4MEY4MDAwMDYyNQorOjEwMUIxMDAwMDAwMDAwMEMyOTAwMDAwMDAwMDAwMDEwMDZDMjAwMDRCNAorOjEwMUIyMDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDEwMjY0MjAwMDJCMgorOjEwMUIzMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDA4MjIwMDAwMDFGMAorOjEwMUI0MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDEwQjE5NzMyMEM1MAorOjEwMUI1MDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDAwNworOjEwMUI2MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDBDMjk4MDAwMDBDQQorOjEwMUI3MDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDEwMjA1MzAwMDBDOAorOjEwMUI4MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDAwMjJDNTM2MDBBRQorOjEwMUI5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MEY4MDAwMDY3OQorOjEwMUJBMDAwMDAwMDAwMTg4MDAwRkZGNDAwMDAwMDAwMjMxQjAwMDA2QworOjEwMUJCMDAwMDAwMDAwMDAyNzExMDgwMDAwMDAwMDAwNjY5MDAwMDBFRgorOjEwMUJDMDAwMDAwMDAwMTBCMUM4MDAwQjAwMDAwMDBDMjk4MDAwMDBDQworOjEwMUJEMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDBGQgorOjEwMUJFMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDEwMDZDMjAwMDI5MQorOjEwMUJGMDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDAwMjJDNThDMDBFOQorOjEwMUMwMDAwMDAwMDAwMDAyNzY1MDAwMDAwMDAwMDAwMjZFNDAwMDAzRQorOjEwMUMxMDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDA4MjIwMDAwMTcxOAorOjEwMUMyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDAxRjAwMDBEMAorOjA4MUMzMDAwMDAwMDAwMTg4MDAwRkU0QkNCCis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmozLmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZjVlOTUuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MiArMCwwIEBACi06MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwNTgwMDAwMDAwOTgxCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAwMDMwMDAwMDAwMEREODAwMDAwRTU4MDAwMDAwMDUwMDAwMDAwMDcwCi06MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLTowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQotOjEwMDA2MDAwMDAwMDAwMUYwNTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1QgotOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQotOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQotOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgotOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQotOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAotOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMwotOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MwotOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNwotOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQotOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgotOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgotOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA3QzAwMDAwMDA4MkQ4MDAxMUNFOQotOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQotOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAotOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA4MzAwMDAwMDBDMjk4MDAwMDJDRAotOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQotOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQotOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNwotOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgotOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQotOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQotOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA3MjAwMDAwMDE4ODAwMEZGRjE5RAotOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAotOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQwotOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJFMAotOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQotOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAotOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQotOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAotOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAotOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQotOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NwotOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQotOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQotOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAotOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQotOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAotOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQkJERQotOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBCQTAwMDAwMDE4ODAwMDAwMDAzNAotOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQotOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQotOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAotOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMDZBNgotOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAotOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAotOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRDFBQwotOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMDYzNwotOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDEzMTAwMDAwMDE4ODAwMDAwRkMyRgotOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE1NTAwMDAwMDE4ODAwMDAwNEVBOQotOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOEVBRgotOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQwotOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgotOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgotOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAotOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQotOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgotOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQotOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgotOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQotOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgotOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgotOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTc0NQotOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBDQTAwMDAwMDEwMkM2MjAxQkFFMQotOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQwotOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQotOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRGMwotOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQwotOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAotOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAotOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgotOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQotOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQotOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDE4MDAwMjAwMDBEMwotOjEwMDUwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgxMAotOjEwMDUxMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY1QgotOjEwMDUyMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBENQotOjEwMDUzMDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE1QgotOjEwMDU0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAxMQotOjEwMDU1MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAxNQotOjEwMDU2MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBFMQotOjEwMDU3MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDU0OAotOjEwMDU4MDAwMDAwMDAwMTg4MDAwRkY1RjAwMDAwMDAxMDU2MTE0MDBGQQotOjEwMDU5MDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE5NAotOjEwMDVBMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA5RQotOjEwMDVCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDUwNwotOjEwMDVDMDAwMDAwMDAwMTg4MDAwRkY1NzAwMDAwMDAxMDU2MjE0MDBDMQotOjEwMDVEMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFEMgotOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNDMgotOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA5NAotOjEwMDYwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwMQotOjEwMDYxMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVBRAotOjEwMDYyMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM4NQotOjEwMDYzMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTYwRQotOjEwMDY0MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFDOAotOjEwMDY1MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBDNQotOjEwMDY2MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYyMwotOjEwMDY3MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM2MQotOjEwMDY4MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI5MQotOjEwMDY5MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA3MQotOjEwMDZBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMwotOjEwMDZCMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBFNwotOjEwMDZDMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ1OAotOjEwMDZEMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBCRAotOjEwMDZFMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAyNAotOjEwMDZGMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI3QgotOjEwMDcwMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBFQQotOjEwMDcxMDAwMDAwMDAwMDkwNTYwMDAwRjAwMDAwMDEwQjE4QTAwMEEwNwotOjEwMDcyMDAwMDAwMDAwMDAwNTYzNEMwMDAwMDAwMDA4MDUwQTAwMTJFQwotOjEwMDczMDAwMDAwMDAwMTBCOTYyMTQwMzAwMDAwMDAwMDMwMDAwMDA3NAotOjEwMDc0MDAwMDAwMDAwMTg4MDAwMDAwNTAwMDAwMDE4ODAwMEZGMjQ1MQotOjEwMDc1MDAwMDAwMDAwMTBCNjA2MTQwMzAwMDAwMDA4MDMwNjAwMDFBNAotOjEwMDc2MDAwMDAwMDAwMTg4MDAwRkYyQTAwMDAwMDAwMEM5NjE4MDAwRQotOjEwMDc3MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA0Q0M5OTM0MDAzMAotOjEwMDc4MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDA0NwotOjEwMDc5MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMjk1MjAwMDExQgotOjEwMDdBMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDA4MDIwMDAwMEVBQQotOjEwMDdCMDAwMDAwMDAwMDgwMjgwMDAxQTAwMDAwMDEwQjFDNDBBMDIwNAotOjEwMDdDMDAwMDAwMDAwMDgwMjAwMDAwMzAwMDAwMDA4MjIwMDAwMDFGMQotOjEwMDdEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDA2NAotOjEwMDdFMDAwMDAwMDAwMDAyQTAwMDgwMDAwMDAwMDA4MDUwMDU1NTUyMAotOjEwMDdGMDAwMDAwMDAwMTg4MDAwRkYxODAwMDAwMDBCMkZERjAwMDIyRgotOjEwMDgwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkEwMDAwMDE0MAotOjEwMDgxMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDAxNwotOjEwMDgyMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDBERgotOjEwMDgzMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDE4ODAwMEZGQTNBQwotOjEwMDg0MDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDZCMwotOjEwMDg1MDAwMDAwMDAwMDAzMDgwMDAwMDAwMDAwMDAwMzEwMDAwMDBCNwotOjEwMDg2MDAwMDAwMDAwMDgyRDgwMDAwNjAwMDAwMDBDMjk4MDAwMDExNwotOjEwMDg3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0RAotOjEwMDg4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMTAxRAotOjEwMDg5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGMDNCOQotOjEwMDhBMDAwMDAwMDAwMTA5MUEwQjAwOTAwMDAwMDA4MkM4MDAxMEQ4QwotOjEwMDhCMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA4NQotOjEwMDhDMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGOUMzOAotOjEwMDhEMDAwMDAwMDAwMTg4MDAwMDAxMDAwMDAwMDA4QUMwMDAwMDFCQgotOjEwMDhFMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDAwMDM4MEIwMDAzMgotOjEwMDhGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDQwMDA3MQotOjEwMDkwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCQQotOjEwMDkxMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDE4ODAwMDAwMzFGOQotOjEwMDkyMDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDBCMkZERjAwMDIwRQotOjEwMDkzMDAwMDAwMDAwMDAyQzAwMEUwMDAwMDAwMDA4MkEwMDAwMDc0NAotOjEwMDk0MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFRUQ2RAotOjEwMDk1MDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDBDMjk4MDAwMDE1OQotOjEwMDk2MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwMENFNzAwMDdEMQotOjEwMDk3MDAwMDAwMDAwMDkwNTYyRkZGRjAwMDAwMDEwQkE2QzE0MDVCQQotOjEwMDk4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMjEwMDAwMDAzRAotOjEwMDk5MDAwMDAwMDAwMDgyQTAwMDAwNTAwMDAwMDEwOTFENDAwMDBBQgotOjEwMDlBMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDg0OQotOjEwMDlCMDAwMDAwMDAwMEMzMTYyMDAxODAwMDAwMDA4MkQ4MDAwMDFDQQotOjEwMDlDMDAwMDAwMDAwMTg4MDAwRkY3MjAwMDAwMDE4MDAwRDAwMDBGOQotOjEwMDlEMDAwMDAwMDAwMTBCMUEwQjAwRTAwMDAwMDBCMkZERjAwMDJERAotOjEwMDlFMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMyMDAwMDBFMAotOjEwMDlGMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4ODAwMDAwMTVENQotOjEwMEEwMDAwMDAwMDAwMTAyQzYyMDAwMjAwMDAwMDE4ODAwMDAwMENBMgotOjEwMEExMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwNzAwMDA4OAotOjEwMEEyMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA5QgotOjEwMEEzMDAwMDAwMDAwMDgwNTAwRkZGRjAwMDAwMDE4ODAwMEZFQ0Y0NgotOjEwMEE0MDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDlBNgotOjEwMEE1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc2NAotOjEwMEE2MDAwMDAwMDAwMTg4MDAwRkY2OTAwMDAwMDBDMjk4MDAwMDFEMAotOjEwMEE3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0QgotOjEwMEE4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEEyMQotOjEwMEE5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZFQzNGOAotOjEwMEFBMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDA4MkM4MDAxMENGRAotOjEwMEFCMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAxMzQwRgotOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjA1RjAwMDA5NwotOjEwMEFEMDAwMDAwMDAwMDgyQzgwMDE0MDAwMDAwMDA4MkQwMDAwM0NCMAotOjEwMEFFMDAwMDAwMDAwMDgyRDgwMDEyNDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwMEFGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MkM4MDAwODA0MwotOjEwMEIwMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMDVGNQotOjEwMEIxMDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZFQUNERQotOjEwMEIyMDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDIxQwotOjEwMEIzMDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDEwOTFERTAwMDAxQQotOjEwMEI0MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwOTFENDAwMDAwQgotOjEwMEI1MDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMzU2NwotOjEwMEI2MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDEyMwotOjEwMEI3MDAwMDAwMDAwMDgyQTAwMDAwOTAwMDAwMDA4MDUwMEFBQUFEOQotOjEwMEI4MDAwMDAwMDAwMTg4MDAwRkVBNjAwMDAwMDEwOTFENDAwMDBCNAotOjEwMEI5MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGMkREOQotOjEwMEJBMDAwMDAwMDAwMTA5MUEwM0MwMjAwMDAwMDEwQjFFNjYyMDdCNgotOjEwMEJCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMzMTAwMDBCRAotOjEwMEJDMDAwMDAwMDAwMDkyQ0IxMDA3RjAwMDAwMDA4MkNEOTAwMDBCMwotOjEwMEJEMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMEQxRAotOjEwMEJFMDAwMDAwMDAwMTBCMUE4MDAwNjAwMDAwMDEwMjA1RjAwMDAwNwotOjEwMEJGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDBENgotOjEwMEMwMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDhFMQotOjEwMEMxMDAwMDAwMDAwMTg4MDAwRkYyODAwMDAwMDEwQjFBNjAwMTA5RQotOjEwMEMyMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBGMEYzMDAwMDc0MAotOjEwMEMzMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDA1RgotOjEwMEM0MDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkZCNwotOjEwMEM1MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkZGNgotOjEwMEM2MDAwMDAwMDAwMTAwNzMwMDAwMzAwMDAwMDBDMEQxQTAwMDhGRgotOjEwMEM3MDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDBGNENFMzAwMThFOQotOjEwMEM4MDAwMDAwMDAwMDAwQzk5MkMwMDAwMDAwMDA0Q0M5OTM0MDBGNgotOjEwMEM5MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDEwNwotOjEwMENBMDAwMDAwMDAwMDAzMzMxMDAwMDAwMDAwMDA4MjIwMDAwMTZBMAotOjEwMENCMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMENFRAotOjEwMENDMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMEYyMDAwMDA0NgotOjEwMENEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MDUwMDU1NTVCMQotOjEwMENFMDAwMDAwMDAwMTg4MDAwRkU3QTAwMDAwMDEwOTFENDAwMDA3RgotOjEwMENGMDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMDFGQQotOjEwMEQwMDAwMDAwMDAwMEY0NzIyMDAwODAwMDAwMDA5MDcwRTAwMEYzNgotOjEwMEQxMDAwMDAwMDAwMDgwNzBFMDAwODAwMDAwMDA4MDI4MDAwMDEyMwotOjEwMEQyMDAwMDAwMDAwMDcwMjg1MUMwMDAwMDAwMDA4ODI4NTAwMDEwOQotOjEwMEQzMDAwMDAwMDAwMDAwMjg1NEMwMDAwMDAwMDA3NDI4NTFDMDBGNgotOjEwMEQ0MDAwMDAwMDAwMDNDM0FBNTIwMDAwMDAwMDAwMDNCMTBFMDAxRgotOjEwMEQ1MDAwMDAwMDAwMDc0QjA3MUMwMDAwMDAwMDBGMEYzMDAwMDdDOQotOjEwMEQ2MDAwMDAwMDAwMEYwQTk2MDAwMzAwMDAwMDAwMEE5NTVDMDBENgotOjEwMEQ3MDAwMDAwMDAwMDA0QTAwNUEwMDAwMDAwMDAwMEM5NjBBMDAyMwotOjEwMEQ4MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA4MEQwMEZGRkZBNAotOjEwMEQ5MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDUyQwotOjEwMERBMDAwMDAwMDAwMTBCMUE4MDAwODAwMDAwMDEwMjA1RjAwMDA0MwotOjEwMERCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDBDQwotOjEwMERDMDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTAwQgotOjEwMEREMDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZFRUZEMAotOjEwMERFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDEwMDAxRjAwMDAxRQotOjEwMERGMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDAzRQotOjEwMEUwMDAwMDAwMDAwMDgyQTAwMDAwRDAwMDAwMDA4MDUwMEFBQUE0MgotOjEwMEUxMDAwMDAwMDAwMTg4MDAwRkU1NDAwMDAwMDEwOTFENDAwMDA3MwotOjEwMEUyMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZFREI5OQotOjEwMEUzMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE1MAotOjEwMEU0MDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTVCMgotOjA4MEU1MDAwMDAwMDAwMTg4MDAwRkU0Q0I4Ci06MDgwRTU4MDAwMDAwMDAxMEIxODAwMDA0NEQKLToxMDBFNjAwMDAwMDAwMDFGMDUwMzAzMDAwMDAwMDAwODA1MDAwMEZGNEMKLToxMDBFNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDJBMDAwMDAwMkUKLToxMDBFODAwMDAwMDAwMDEwQjFENDAwMDAwMDAwMDAxMDkxREUwMDAwNEUKLToxMDBFOTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDAwMUYwMDAwQTAKLToxMDBFQTAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwQzI5ODAwMDAxMzMKLToxMDBFQjAwMDAwMDAwMDA4MDI1NDAwMEUwMDAwMDAwMDJDNDAwMDAwNUEKLToxMDBFQzAwMDAwMDAwMDA5Mjk1MjAwM0YwMDAwMDAxODAwMDQwMDAwNDMKLToxMDBFRDAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExQzEKLToxMDBFRTAwMDAwMDAwMDE4ODAwMDAwMzkwMDAwMDAxODgwMDAwMEZEOUMKLToxMDBFRjAwMDAwMDAwMDE4ODAwMDAwRkMwMDAwMDAxODgwMDAwMEZCQ0IKLToxMDBGMDAwMDAwMDAwMDE4ODAwMDAwRkIwMDAwMDAxODgwMDAwMDAwQjYKLToxMDBGMTAwMDAwMDAwMDE4ODAwMDAxMTMwMDAwMDAxODgwMDAwMEY3OTYKLToxMDBGMjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAxODgwMDAwMTE3NkUKLToxMDBGMzAwMDAwMDAwMDE4ODAwMDAxNjUwMDAwMDAxODgwMDAwMDYzQjgKLToxMDBGNDAwMDAwMDAwMDE4ODAwMDAwQ0UwMDAwMDAxODgwMDAwMERFQzUKLToxMDBGNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU1RUIKLToxMDBGNjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwQTIKLToxMDBGNzAwMDAwMDAwMDE4ODAwMEZGRTIwMDAwMDAwMDJBMDAwMDAwQ0UKLToxMDBGODAwMDAwMDAwMDE4ODAwMEZGRTAwMDAwMDAxODAwMDIwMDAwRDAKLToxMDBGOTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDIxQkUKLToxMDBGQTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwNjgKLToxMDBGQjAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2M0MKLToxMDBGQzAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwNjkKLToxMDBGRDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjEwMDAwMjQKLToxMDBGRTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRDgKLToxMDBGRjAwMDAwMDAwMDEwOTE5NjM0MTYwMDAwMDAxMDIwNUYwMDAwRTEKLToxMDEwMDAwMDAwMDAwMDAwMDlEODAwMDAwMDAwMDAwMDJDMUUwMDAwQjUKLToxMDEwMTAwMDAwMDAwMDA4MkM4MDAxMEUwMDAwMDAwODJEMDAwMDBBQ0UKLToxMDEwMjAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwMDgKLToxMDEwMzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjIwMDAwQzIKLToxMDEwNDAwMDAwMDAwMDAwMkMxMzAwMDAwMDAwMDAxODAwMEEwMDAwM0YKLToxMDEwNTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDA5MTUKLToxMDEwNjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwQTcKLToxMDEwNzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDZBMTcKLToxMDEwODAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDEwOTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBEN0EwMDAwNEEKLToxMDEwQTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRjQKLToxMDEwQjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAzNjIwMDAwNUQKLToxMDEwQzAwMDAwMDAwMDEwMjM0MjAwQzEwMDAwMDAwMDAyNjM4QzAwRjkKLToxMDEwRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwODAyMDQwMDEyODQKLToxMDEwRTAwMDAwMDAwMDEwQjkwNjA4MjcwMDAwMDAwMDBGNTgwMDAwOUIKLToxMDEwRjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOTMKLToxMDExMDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwNUIKLToxMDExMTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDQzYwMDEyNTgKLToxMDExMjAwMDAwMDAwMDE4ODAwMEZGQ0UwMDAwMDAwODBGODAwMDAzQzAKLToxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwOUYwMDAwMDAKLToxMDExNDAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwNTcKLToxMDExNTAwMDAwMDAwMDA4QTMxQjAwMTIwMDAwMDAxMEIxOTgwMDAzNUIKLToxMDExNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA0QjUKLToxMDExNzAwMDAwMDAwMDA4MjIwMDAwMDMwMDAwMDAwODJDODAwMDBDODIKLToxMDExODAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAxMDAwOUYwMDAwNkYKLToxMDExOTAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAwQzI5ODAwMDAwREYKLToxMDExQTAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwRDQKLToxMDExQjAwMDAwMDAwMDA5MDI2MDAwMEYwMDAwMDAwRjAyMDQwMDAyOUUKLToxMDExQzAwMDAwMDAwMDEwQjYwQzA4MDUwMDAwMDAwQzFGQkYwMDAwNTYKLToxMDExRDAwMDAwMDAwMDEwMjg2NjAwMDMwMDAwMDAwODA3OEYwMDAxQ0YKLToxMDExRTAwMDAwMDAwMDBDMzM2NjAwMTAwMDAwMDAwMDMyMTQwMDAwMDQKLToxMDExRjAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwMUUKLToxMDEyMDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwRDcKLToxMDEyMTAwMDAwMDAwMDE4ODAwMEZGOEUwMDAwMDAwMDIzMDAwMDAwODYKLToxMDEyMjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCNzcKLToxMDEyMzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwMzIKLToxMDEyNDAwMDAwMDAwMDEwMjg2NjAwNzUwMDAwMDAxODgwMDBGRjg3NkQKLToxMDEyNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwODJDODAwMDQwNzAKLToxMDEyNjAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDNTcKLToxMDEyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwRUYKLToxMDEyODAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0QjAKLToxMDEyOTAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyNEEKLToxMDEyQTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwN0QKLToxMDEyQjAwMDAwMDAwMDEwQkE2NjM0NTcwMDAwMDAwODgzMDUwMDEyRDEKLToxMDEyQzAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwNzEKLToxMDEyRDAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwQTMKLToxMDEyRTAwMDAwMDAwMDEwQjE4NzAwMTEwMDAwMDAwMDBCNkUwMDAwMkMKLToxMDEyRjAwMDAwMDAwMDEwQkVFOTAwMDUwMDAwMDAxODgwMDBGRjZFMkQKLToxMDEzMDAwMDAwMDAwMDAxMDU2OTE0MDAwMDAwMDAxMDkxOEEwMDAyMkQKLToxMDEzMTAwMDAwMDAwMDA4QjRFOTAwMDEwMDAwMDAxMEIxRTkyQzRBMDcKLToxMDEzMjAwMDAwMDAwMDAwODY2OTJDMDAwMDAwMDAwMDAyMDAwMDAwQTAKLToxMDEzMzAwMDAwMDAwMDA5MDJFQUZGRkYwMDAwMDAxMDAwMEMwMDAyOUMKLToxMDEzNDAwMDAwMDAwMDAwMDIwNDBBMDAwMDAwMDAwRjQ2MEMwMDAxMkIKLToxMDEzNTAwMDAwMDAwMDBGMDI4NTAwMDEwMDAwMDAxMDkxOEMwMUZDQ0MKLToxMDEzNjAwMDAwMDAwMDEwQjcwNDBFNDEwMDAwMDAwMDBGNDAwMDAwMTQKLToxMDEzNzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwOTEKLToxMDEzODAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGRjYKLToxMDEzOTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwQjYKLToxMDEzQTAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAwODBGODAwMDAzRjcKLToxMDEzQjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwOUYwMDAwRjcKLToxMDEzQzAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwRDUKLToxMDEzRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDYwMDAwNzgKLToxMDEzRTAwMDAwMDAwMDEwQjE5ODAwMDUwMDAwMDAxMDAwMUYwMDAwNzAKLToxMDEzRjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwNTIKLToxMDE0MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDMyMTQwMDAwNjcKLToxMDE0MTAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwMDMxRTMyRTAwQzMKLToxMDE0MjAwMDAwMDAwMDA1NzM2NjJDMDAwMDAwMDAwMDI1OTYwMDAwRjcKLToxMDE0MzAwMDAwMDAwMDEwQjE4NzAwMTYwMDAwMDAwQzI5ODAwMDAwOTkKLToxMDE0NDAwMDAwMDAwMDBGMEY2QjAwMDcwMDAwMDAwMDBENjkwMDAwOTYKLToxMDE0NTAwMDAwMDAwMDAwMEE2QzAwMDAwMDAwMDAwMDBBRUQwMDAwMUYKLToxMDE0NjAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwMDBCODAwMDAwNzgKLToxMDE0NzAwMDAwMDAwMDAwMEM4NzAwMDAwMDAwMDAwODBGODAwMDAzM0YKLToxMDE0ODAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzY5NTIwMDAxMTEKLToxMDE0OTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDIyQzU4QzAwQUEKLToxMDE0QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwMDAwQzYKLToxMDE0QjAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzODYKLToxMDE0QzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkY2REEKLToxMDE0RDAwMDAwMDAwMDEwQjE5ODAwMDIwMDAwMDAwODBGODAwMDA0MTYKLToxMDE0RTAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDRjgKLToxMDE0RjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwRTYKLToxMDE1MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBENkUwMDAwMzEKLToxMDE1MTAwMDAwMDAwMDAzRTdDRjM0MDAwMDAwMDAwQzI5ODAwMDAwMjkKLToxMDE1MjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEIxODcwMDA3RUQKLToxMDE1MzAwMDAwMDAwMDAwMzYxNDAwMDAwMDAwMDAwMDM2OTUwMDAwOTYKLToxMDE1NDAwMDAwMDAwMDAwMzcxNjAwMDAwMDAwMDAwODJDODAwMDUwNEEKLToxMDE1NTAwMDAwMDAwMDA4MkQwMDAwMzAwMDAwMDAwODJEODAwMDBDNjUKLToxMDE1NjAwMDAwMDAwMDE4ODAwMEZGMjQwMDAwMDAwMDI2NDYwMDAwNTQKLToxMDE1NzAwMDAwMDAwMDAwMjMwMDAwMDAwMDAwMDAwOTI1RTZGRkZGMzYKLToxMDE1ODAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwM0U3Q0YyQzAwRkQKLToxMDE1OTAwMDAwMDAwMDA4MjIwMDAwMUIwMDAwMDAwQzY5NTIwMDAwM0YKLToxMDE1QTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRjFCRDQKLToxMDE1QjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDA4NjYwMDA1N0UKLToxMDE1QzAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwQjAKLToxMDE1RDAwMDAwMDAwMDA5MDI2MDAwRjAwMDAwMDAxMEI2MEMwODAyRDQKLToxMDE1RTAwMDAwMDAwMDE4ODAwMEZGMTQwMDAwMDAwMDA2ODIwMDAwQzgKLToxMDE1RjAwMDAwMDAwMDEwQjE4RjAwMDAwMDAwMDAwODg3OEYwMDAxN0MKLToxMDE2MDAwMDAwMDAwMDBDNzM2NjAwMTAwMDAwMDAwODJDODAwMDE4MTkKLToxMDE2MTAwMDAwMDAwMDA4MkQwMDAwMTgwMDAwMDAwODJEODAwMDAyQzYKLToxMDE2MjAwMDAwMDAwMDBDNUZCRjAwMDAwMDAwMDAxMDkxREUwMDAwMTEKLToxMDE2MzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDJBMDAwMDAwNUIKLToxMDE2NDAwMDAwMDAwMDEwMjg2NjAxRjUwMDAwMDAwODJDODAwMDAzNEYKLToxMDE2NTAwMDAwMDAwMDA4MkQwMDAwMDMwMDAwMDAwOTMwNjBGRkYwQ0EKLToxMDE2NjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAwQzI5ODAwMDAwMEYKLToxMDE2NzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDFBMUQKLToxMDE2ODAwMDAwMDAwMDA4MkQwMDAwMUEwMDAwMDAwNTczNjYwMDAwMkQKLToxMDE2OTAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwMDMxODAwMDAwRTIKLToxMDE2QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDBDRkIKLToxMDE2QjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDA0MzAKLToxMDE2QzAwMDAwMDAwMDE4ODAwMEZFRjgwMDAwMDAxODAwMDIwMDAwNzIKLToxMDE2RDAwMDAwMDAwMDE4ODAwMEZFRjYwMDAwMDAwMDJBMDAwMDAwNTQKLToxMDE2RTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGMDA4MDAwM0MKLToxMDE2RjAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxODgwMDAwMDFBOUEKLToxMDE3MDAwMDAwMDAwMDAwMjgwQTAwMDAwMDAwMDAwMDA1MDIwMDAwQTAKLToxMDE3MTAwMDAwMDAwMDA4MjIwMDAwMDkwMDAwMDAwMDI5MDAwMDAwNkQKLToxMDE3MjAwMDAwMDAwMDBGNjU2ODAwMTAwMDAwMDAwM0Y2NkM5NDAwRDQKLToxMDE3MzAwMDAwMDAwMDEwQjk3MkEwMDQwMDAwMDAwQzczRTcwMDE5NEIKLToxMDE3NDAwMDAwMDAwMDBDMjE0MjAwMDQwMDAwMDAwMDNDRjgwMDAwRjIKLToxMDE3NTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwNTEKLToxMDE3NjAwMDAwMDAwMDA4MjIwMDAwMDgwMDAwMDAwQzYxNDIwMDA0OTQKLToxMDE3NzAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwNDAKLToxMDE3ODAwMDAwMDAwMDBDNjE0MjAwMDAwMDAwMDAxMDAxNDIwMDAzNTQKLToxMDE3OTAwMDAwMDAwMDBDMzNFNzAwMUQwMDAwMDAwQzYxNDIwMDAyNTUKLToxMDE3QTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRUQKLToxMDE3QjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGNDcwMDA3OEUKLToxMDE3QzAwMDAwMDAwMDA4MEY4MDAwMDgwMDAwMDAwQzI5ODAwMDAwQzUKLToxMDE3RDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxODgwMDBGRUQ1RUYKLToxMDE3RTAwMDAwMDAwMDAwMzM1MTAwMDAwMDAwMDAwMDJBMDAwMDAwNEIKLToxMDE3RjAwMDAwMDAwMDEwQjFDNjAwMjMwMDAwMDAwRjBGNTAwMDA3Q0EKLToxMDE4MDAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwODMKLToxMDE4MTAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGREIKLToxMDE4MjAwMDAwMDAwMDBGNEM2MjAwMTAwMDAwMDAwMDBENjIwMDAwN0MKLToxMDE4MzAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3NTAwMDAzMEYKLToxMDE4NDAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4MjgKLToxMDE4NTAwMDAwMDAwMDAwMENDNjAwMDAwMDAwMDAwMDBCODAwMDAwMkIKLToxMDE4NjAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAwODBGODAwMDAzNDAKLToxMDE4NzAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5MDAwMDAyNTUKLToxMDE4ODAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzNTQKLToxMDE4OTAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwNkUKLToxMDE4QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTExQTAwQTgKLToxMDE4QjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5NTIwMDAwQUIKLToxMDE4QzAwMDAwMDAwMDEwQjE5NzMyMDkwMDAwMDAwQzI5ODAwMDAwRDAKLToxMDE4RDAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTMwMDAwRTcKLToxMDE4RTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzU4QzAwRkIKLToxMDE4RjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDAzMUYKLToxMDE5MDAwMDAwMDAwMDE4ODAwMEZGRjMwMDAwMDAxMEIxQzgwMDEzQjEKLToxMDE5MTAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwQzI5ODAwMDAwODgKLToxMDE5MjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwQUQKLToxMDE5MzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyNDMKLToxMDE5NDAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwOUIKLToxMDE5NTAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwRjEKLToxMDE5NjAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAxMEIxQzYwMDAzQUQKLToxMDE5NzAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAxMEIxODAwMDA1QjYKLToxMDE5ODAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwQzI5ODAwMDAwMzcKLToxMDE5OTAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxODgwMDAwMDEyMjgKLToxMDE5QTAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwQzI5ODAwMDAwNDIKLToxMDE5QjAwMDAwMDAwMDAwMzAxNDAwMDAwMDAwMDAwMDMwOTUwMDAwMUUKLToxMDE5QzAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwOTBCMTYwMEZGODQKLToxMDE5RDAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAwRjMxMTYwMDA4N0EKLToxMDE5RTAwMDAwMDAwMDAwMzE2MjM0MDAwMDAwMDAwM0YxNjIzMDAwQUEKLToxMDE5RjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDNTEwMDAwREIKLToxMDFBMDAwMDAwMDAwMDA5MkNEMTAwN0YwMDAwMDAwODJDRDkwMDAwNDQKLToxMDFBMTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMDBDRDAKLToxMDFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMzcKLToxMDFBMzAwMDAwMDAwMDEwMDVDMjAwMDQwMDAwMDAwODBGODAwMDA3MkQKLToxMDFBNDAwMDAwMDAwMDAwMzMwMDAwMDAwMDAwMDAxMDAwOUYwMDAwQjQKLToxMDFBNTAwMDAwMDAwMDE4ODAwMEZFODYwMDAwMDAwMDJBMDAwMDAwNDAKLToxMDFBNjAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxMEIxQzYwMDJENEQKLToxMDFBNzAwMDAwMDAwMDBGNDc0MjAwMDgwMDAwMDAwOTA3MEUwMDBGOTkKLToxMDFBODAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAxMDAwMUYwMDAwMDIKLToxMDFBOTAwMDAwMDAwMDA4MDkwMDAwMDEwMDAwMDAwNzA5MTIxQzAwRjYKLToxMDFBQTAwMDAwMDAwMDAzQ0JDQTkyMDAwMDAwMDAwMDBCOTdBMjAwQzgKLToxMDFBQjAwMDAwMDAwMDA3NDIxNzFDMDAwMDAwMDAwMDBCMDQwMDAwOUIKLToxMDFBQzAwMDAwMDAwMDBGMEE4NDAwMDMwMDAwMDAwMDBBOTU5QzAwM0IKLToxMDFBRDAwMDAwMDAwMDAwNEEwMDlBMDAwMDAwMDAwODgyMTIwMDAxODUKLToxMDFBRTAwMDAwMDAwMDAxMEMxNzA4MDAwMDAwMDAwMDBDOTc4QzAwOUIKLToxMDFBRjAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAwODBEMDBGRkZGQjkKLToxMDFCMDAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAwQzI5MDAwMDAwMDMKLToxMDFCMTAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5NTIwMDAyNjAKLToxMDFCMjAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzQjEKLToxMDFCMzAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwQ0IKLToxMDFCNDAwMDAwMDAwMDEwQjE5NzMyMEMwMDAwMDAwMDIzMUIwMDAwQzEKLToxMDFCNTAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwNEYKLToxMDFCNjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDAyMTgwMDAwQTYKLToxMDFCNzAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzNTgKLToxMDFCODAwMDAwMDAwMDAwMjJDNTM2MDAwMDAwMDAxMDAwMUYwMDAwMDkKLToxMDFCOTAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAxODgwMDBGRkY0MUQKLToxMDFCQTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwQjcKLToxMDFCQjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAxMEIxQzgwMDBCOUIKLToxMDFCQzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwREQKLToxMDFCRDAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzRjQKLToxMDFCRTAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyOTIKLToxMDFCRjAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwRTYKLToxMDFDMDAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwMDIzNDgwMDAwNUYKLToxMDFDMTAwMDAwMDAwMDA4MjIwMDAwMTcwMDAwMDAwQzI5ODAwMDAwQ0UKLToxMDFDMjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxODgwMDBGRTRCQTQKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmoxMC5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI1ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncuaWhleApAQCAtMCwwICsxLDQ5OSBAQAorOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEU4MDAwMDAwMDU4MDAwMDAwMDkwMQorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDBGQTgwMDAwMEVEODAwMDAwMDA1MDAwMDAwMDAxRQorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MDgwMDU4MDAwMDAwMDAxMEIxODAwMDA2NTkKKzoxMDAwNjAwMDAwMDAwMDFGMDMwMzAzMDAwMDAwMDAwODA1MDBGRkZGNUQKKzoxMDAwNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwODA1MDAwMEZGNUEKKzoxMDAwODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwOEFDMDAwMDAxQTEKKzoxMDAwOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxOUYKKzoxMDAwQTAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwN0EKKzoxMDAwQjAwMDAwMDAwMDEwOTFFMDAwMDIwMDAwMDAwOEFDMDAwMDAxMDgKKzoxMDAwQzAwMDAwMDAwMDEwMjAzRjAwNkIwMDAwMDAxMDIxM0YwMDAzRTMKKzoxMDAwRDAwMDAwMDAwMDEwMjBCRjAwM0EwMDAwMDAxODgwMDBGRkZENjMKKzoxMDAwRTAwMDAwMDAwMDEwQjFCOEIwMTUwMDAwMDAwQjJGREYwMDAyQjcKKzoxMDAwRjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwQzEKKzoxMDAxMDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMDYKKzoxMDAxMTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QjIKKzoxMDAxMjAwMDAwMDAwMDE4ODAwMDAwOEYwMDAwMDAwODJEODAwMTFDRDYKKzoxMDAxMzAwMDAwMDAwMDA4MDIwMDAwMDEwMDAwMDAxMDkxREUwMDAwMzUKKzoxMDAxNDAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE2MUQKKzoxMDAxNTAwMDAwMDAwMDE4ODAwMDAwOTYwMDAwMDAwQzI5ODAwMDAyQkEKKzoxMDAxNjAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwRDkKKzoxMDAxNzAwMDAwMDAwMDA4MkEwMDAwMEYwMDAwMDAwMDA1MDAwMDAwMzkKKzoxMDAxODAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwODAyMDAwMDAxRTcKKzoxMDAxOTAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE4Q0IKKzoxMDAxQTAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2NUEKKzoxMDAxQjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA2MEUKKzoxMDAxQzAwMDAwMDAwMDE4ODAwMDAwODUwMDAwMDAxODgwMDBGRkYxOEEKKzoxMDAxRDAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMTBDQTQKKzoxMDAxRTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxMUMKKzoxMDAxRjAwMDAwMDAwMDE4ODAwMDAwN0YwMDAwMDAwQjJGREYwMDAyQ0QKKzoxMDAyMDAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwMEUKKzoxMDAyMTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1QTgKKzoxMDAyMjAwMDAwMDAwMDE4ODAwMEZGRDIwMDAwMDAwQjJGREYwMDAyNEEKKzoxMDAyMzAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwRTAKKzoxMDAyNDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1NzgKKzoxMDAyNTAwMDAwMDAwMDE4ODAwMEZGQ0MwMDAwMDAwQzFGODAwMDAyOEUKKzoxMDAyNjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkM5NzcKKzoxMDAyNzAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyMUEKKzoxMDAyODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1MkUKKzoxMDAyOTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkMzNEQKKzoxMDAyQTAwMDAwMDAwMDA4MDIyNDAwNEEwMDAwMDAxODAwMDQwMDAwQkEKKzoxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFRDQKKzoxMDAyQzAwMDAwMDAwMDE4ODAwMDAwNzgwMDAwMDAxODgwMDAwMENCQkIKKzoxMDAyRDAwMDAwMDAwMDE4ODAwMDAwQ0EwMDAwMDAxODgwMDAwMDAwMjQKKzoxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwREUKKzoxMDAyRjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQ0UKKzoxMDAzMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQkQKKzoxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMTE2OTYKKzoxMDAzMjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwOUQKKzoxMDAzMzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCNUQKKzoxMDAzNDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEUxOUMKKzoxMDAzNTAwMDAwMDAwMDE4ODAwMDAwMkYwMDAwMDAxODgwMDAwMTE2MjcKKzoxMDAzNjAwMDAwMDAwMDE4ODAwMDAxNDEwMDAwMDAxODgwMDAwMTBDMEUKKzoxMDAzNzAwMDAwMDAwMDE4ODAwMDAxNjUwMDAwMDAxODgwMDAwMDYxODYKKzoxMDAzODAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDlFOUYKKzoxMDAzOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwQUMKKzoxMDAzQTAwMDAwMDAwMDE4ODAwMEZGQTIwMDAwMDAxMDkxRDQwMDAwOUYKKzoxMDAzQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxREIKKzoxMDAzQzAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRjQKKzoxMDAzRDAwMDAwMDAwMDE4ODAwMEZGOUMwMDAwMDAxMDkxRDQwMDAwNzUKKzoxMDAzRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQUIKKzoxMDAzRjAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyNUUKKzoxMDA0MDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjk1QkIKKzoxMDA0MTAwMDAwMDAwMDE4ODAwMEZGOTQwMDAwMDAxMEIxQkNCMDBBN0EKKzoxMDA0MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwRDYKKzoxMDA0MzAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwREYKKzoxMDA0NDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDJBMzIKKzoxMDA0NTAwMDAwMDAwMDE4ODAwMDAwREEwMDAwMDAxMDJDNjIwMUJBRDEKKzoxMDA0NjAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwODJDODAwMTBEMkMKKzoxMDA0NzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwQzkKKzoxMDA0ODAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDAwMDM3RTAKKzoxMDA0OTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwRkMKKzoxMDA0QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwQzQKKzoxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1NEQKKzoxMDA0QzAwMDAwMDAwMDE4ODAwMEZGN0UwMDAwMDAxMDkxRDQwMDAwQTIKKzoxMDA0RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQkEKKzoxMDA0RTAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwQ0EKKzoxMDA0RjAwMDAwMDAwMDE4ODAwMEZGNzgwMDAwMDAwMDAyMDIwMDAwRTkKKzoxMDA1MDAwMDAwMDAwMDAwMDI5QTAwMDAwMDAwMDAwMDA2MEMyQzAwMTEKKzoxMDA1MTAwMDAwMDAwMDA0QzYwQzM0MDAwMDAwMDAxMDAwMUYwMDAwQTIKKzoxMDA1MjAwMDAwMDAwMDEwQjE5NjE4MEMwMDAwMDAwODA2OTYwMDA0QTgKKzoxMDA1MzAwMDAwMDAwMDA5MDY4REZGRkMwMDAwMDAwNENEMDUxQTAwMzQKKzoxMDA1NDAwMDAwMDAwMDA0Q0M5QTE4MDAwMDAwMDAxMDIwRDcwMDAwMjIKKzoxMDA1NTAwMDAwMDAwMDBDMkI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwRDcwMDAwODQKKzoxMDA1NzAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMEIxODAwMUY0QUQKKzoxMDA1ODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCNTYwMDAwNkYKKzoxMDA1OTAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAwMDA2ODIwMDAwQjcKKzoxMDA1QTAwMDAwMDAwMDEwQjE4QTAwMDgwMDAwMDAxMEIxOEMxNDA3OTAKKzoxMDA1QjAwMDAwMDAwMDBCMDUwQUZGRkYwMDAwMDAxMEIxOEEwMDAzRDUKKzoxMDA1QzAwMDAwMDAwMDAwODYwQTE4MDAwMDAwMDAxMDkxOEMwMDAwNTYKKzoxMDA1RDAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAxMDkxRDQwMDAwNzMKKzoxMDA1RTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA1MDIwMDAwREYKKzoxMDA1RjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwNUEKKzoxMDA2MDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwRTMKKzoxMDA2MTAwMDAwMDAwMDEwQkVFMTAwMDUwMDAwMDAxODgwMDBGRjRDNDMKKzoxMDA2MjAwMDAwMDAwMDAxMDU2MTE0MDAwMDAwMDAxMDkxOEEwMDAyMjIKKzoxMDA2MzAwMDAwMDAwMDA4QjBFMTAwMDEwMDAwMDAxODAwMEQwMDAwRkIKKzoxMDA2NDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwQTMKKzoxMDA2NTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRjQ0MEEKKzoxMDA2NjAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyRTEKKzoxMDA2NzAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxODAwMEQwMDAwMzkKKzoxMDA2ODAwMDAwMDAwMDEwQjFBMEIwMTMwMDAwMDAwQjJGREYwMDAyMkIKKzoxMDA2OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwODJDODAwMDAwNUEKKzoxMDA2QTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwQTAKKzoxMDA2QjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRkRDMEYKKzoxMDA2QzAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDAwMUYwMDAwMjkKKzoxMDA2RDAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwRjQ3NjAwMDA4REYKKzoxMDA2RTAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAwMDBGNTgwMDAwN0YKKzoxMDA2RjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOUQKKzoxMDA3MDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwMDMKKzoxMDA3MTAwMDAwMDAwMDE4ODAwMDAwMTMwMDAwMDAwRjQ3NjAwMDA4NzAKKzoxMDA3MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwODJDODAwMDAwRkEKKzoxMDA3MzAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwMEYKKzoxMDA3NDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwRjA2MEUwMDAxQjMKKzoxMDA3NTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGNTgwMDAwMDMKKzoxMDA3NjAwMDAwMDAwMDE4ODAwMEZGRDQwMDAwMDAwMDBBNjQwMDAwQjAKKzoxMDA3NzAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMTIKKzoxMDA3ODAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAyNjIwMDAwOTcKKzoxMDA3OTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDMxMDQwMDAwMDkKKzoxMDA3QTAwMDAwMDAwMDAwMzA5QTAwMDAwMDAwMDAwOTA1NjAwMDBGMDIKKzoxMDA3QjAwMDAwMDAwMDEwQjE4QTAwMEIwMDAwMDAwMDA1NjM0QzAwMkYKKzoxMDA3QzAwMDAwMDAwMDA4MDUwQTAwMTIwMDAwMDAxMEI5NjIxNDAzQkUKKzoxMDA3RDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAxODgwMDAwMDA2NzgKKzoxMDA3RTAwMDAwMDAwMDE4ODAwMEZGMTEwMDAwMDAxMEI2MDYxNDA0N0QKKzoxMDA3RjAwMDAwMDAwMDA4MDMwNjAwMDEwMDAwMDAwODJBMDAwMDAxQjQKKzoxMDA4MDAwMDAwMDAwMDE4ODAwMEZGMTYwMDAwMDAxODgwMDBGRjlFMDYKKzoxMDA4MTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzI5NTIwMDAxOUEKKzoxMDA4MjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwODAyMDAwMDBFMjkKKzoxMDA4MzAwMDAwMDAwMDA4MDI4MDAwMUEwMDAwMDAxMEIxQzQwQTAyODMKKzoxMDA4NDAwMDAwMDAwMDA4MDIwMDAwMDMwMDAwMDAwODIyMDAwMDAxNzAKKzoxMDA4NTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwRTMKKzoxMDA4NjAwMDAwMDAwMDAwMkEwMDA4MDAwMDAwMDAwODA1MDA1NTU1OUYKKzoxMDA4NzAwMDAwMDAwMDE4ODAwMEZGMDgwMDAwMDAwQjJGREYwMDAyQkUKKzoxMDA4ODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJBMDAwMDAxQzAKKzoxMDA4OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwOTcKKzoxMDA4QTAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwNUYKKzoxMDA4QjAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxODgwMDBGRkE2MjkKKzoxMDA4QzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2MzMKKzoxMDA4RDAwMDAwMDAwMDAwMzA4MDAwMDAwMDAwMDAwMDMxMDAwMDAwMzcKKzoxMDA4RTAwMDAwMDAwMDA4MkQ4MDAwMDYwMDAwMDAwQzI5ODAwMDAxOTcKKzoxMDA4RjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwQ0QKKzoxMDA5MDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDEwOUMKKzoxMDA5MTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUYzNDkKKzoxMDA5MjAwMDAwMDAwMDEwOTFBMEIwMDkwMDAwMDAwODJDODAwMTBEMEIKKzoxMDA5MzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwMDQKKzoxMDA5NDAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDBGRjlGQjQKKzoxMDA5NTAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAwOEFDMDAwMDAxM0EKKzoxMDA5NjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAwMDAzODBCMDAwQjEKKzoxMDA5NzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDA0MDAwRjAKKzoxMDA5ODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1M0EKKzoxMDA5OTAwMDAwMDAwMDE4ODAwMEZGODEwMDAwMDAxODgwMDAwMDMxNzYKKzoxMDA5QTAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwQjJGREYwMDAyOEUKKzoxMDA5QjAwMDAwMDAwMDAwMkMwMDBFMDAwMDAwMDAwODJBMDAwMDA3QzQKKzoxMDA5QzAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRURERkQKKzoxMDA5RDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwQzI5ODAwMDAxRDkKKzoxMDA5RTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDBDRTcwMDA3NTEKKzoxMDA5RjAwMDAwMDAwMDA5MDU2MkZGRkYwMDAwMDAxMEJBNkMxNDA1M0EKKzoxMDBBMDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDIxMDAwMDAwQkMKKzoxMDBBMTAwMDAwMDAwMDA4MkEwMDAwMDUwMDAwMDAxMDkxRDQwMDAwMkEKKzoxMDBBMjAwMDAwMDAwMDA4MkM4MDAxMEMwMDAwMDAwODJEMDAwMDA4QzgKKzoxMDBBMzAwMDAwMDAwMDBDMzE2MjAwMTgwMDAwMDAwODJEODAwMDAxNDkKKzoxMDBBNDAwMDAwMDAwMDE4ODAwMEZGNzUwMDAwMDAxODAwMEQwMDAwNzUKKzoxMDBBNTAwMDAwMDAwMDEwQjFBMEIwMEUwMDAwMDAwQjJGREYwMDAyNUMKKzoxMDBBNjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMjAwMDAwNUYKKzoxMDBBNzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAxODgwMDAwMDE1NTQKKzoxMDBBODAwMDAwMDAwMDEwMkM2MjAwMDIwMDAwMDAxODgwMDAwMDBDMjIKKzoxMDBBOTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDcwMDAwMDgKKzoxMDBBQTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwMUIKKzoxMDBBQjAwMDAwMDAwMDA4MDUwMEZGRkYwMDAwMDAxODgwMDBGRUJGRDYKKzoxMDBBQzAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5MjYKKzoxMDBBRDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3RTQKKzoxMDBBRTAwMDAwMDAwMDE4ODAwMEZGNkMwMDAwMDAwQzI5ODAwMDAxNEQKKzoxMDBBRjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwQ0IKKzoxMDBCMDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBBQTAKKzoxMDBCMTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUIzODcKKzoxMDBCMjAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwODJDODAwMTBDN0MKKzoxMDBCMzAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMTM0OEUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwNUYwMDAwMTYKKzoxMDBCNTAwMDAwMDAwMDA4MkM4MDAxNDAwMDAwMDAwODJEMDAwMDNDMkYKKzoxMDBCNjAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDBCNzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDgwQzIKKzoxMDBCODAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTA1NzUKKzoxMDBCOTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRTlDNkUKKzoxMDBCQTAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyOUMKKzoxMDBCQjAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxMDkxREUwMDAwOUEKKzoxMDBCQzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMDkxRDQwMDAwOEIKKzoxMDBCRDAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjM4RTQKKzoxMDBCRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQTMKKzoxMDBCRjAwMDAwMDAwMDA4MkEwMDAwMDkwMDAwMDAwODA1MDBBQUFBNTkKKzoxMDBDMDAwMDAwMDAwMDE4ODAwMEZFOTYwMDAwMDAxMDkxRDQwMDAwNDMKKzoxMDBDMTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjMwNTUKKzoxMDBDMjAwMDAwMDAwMDEwOTFBMDNDMDIwMDAwMDAxMEIxRTY2MjA3MzUKKzoxMDBDMzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMzEwMDAwM0MKKzoxMDBDNDAwMDAwMDAwMDA5MkNCMTAwN0YwMDAwMDAwODJDRDkwMDAwMzIKKzoxMDBDNTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTBEOUMKKzoxMDBDNjAwMDAwMDAwMDEwQjFBODAwMDYwMDAwMDAxMDIwNUYwMDAwODYKKzoxMDBDNzAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwNTUKKzoxMDBDODAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4NjEKKzoxMDBDOTAwMDAwMDAwMDE4ODAwMEZGMkIwMDAwMDAxMEIxQTYwMDEwMUIKKzoxMDBDQTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGMzAwMDA3QzAKKzoxMDBDQjAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwREYKKzoxMDBDQzAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGMzcKKzoxMDBDRDAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGNzYKKzoxMDBDRTAwMDAwMDAwMDEwMDczMDAwMDMwMDAwMDAwQzBEMUEwMDA4N0YKKzoxMDBDRjAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwRjRDRTMwMDE4NjkKKzoxMDBEMDAwMDAwMDAwMDAwMEM5OTJDMDAwMDAwMDAwNENDOTkzNDAwNzUKKzoxMDBEMTAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxODYKKzoxMDBEMjAwMDAwMDAwMDAwMzMzMTAwMDAwMDAwMDAwODIyMDAwMDE2MUYKKzoxMDBEMzAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBDNkMKKzoxMDBENDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDBGMjAwMDAwQzUKKzoxMDBENTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODA1MDA1NTU1MzAKKzoxMDBENjAwMDAwMDAwMDE4ODAwMEZFNkEwMDAwMDAxMDkxRDQwMDAwMEUKKzoxMDBENzAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjA0NzYKKzoxMDBEODAwMDAwMDAwMDBGNDcyMjAwMDgwMDAwMDAwOTA3MEUwMDBGQjYKKzoxMDBEOTAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAwODAyODAwMDAxQTMKKzoxMDBEQTAwMDAwMDAwMDA3MDI4NTFDMDAwMDAwMDAwODgyODUwMDAxODkKKzoxMDBEQjAwMDAwMDAwMDAwMDI4NTRDMDAwMDAwMDAwNzQyODUxQzAwNzYKKzoxMDBEQzAwMDAwMDAwMDAzQzNBQTUyMDAwMDAwMDAwMDAzQjEwRTAwOUYKKzoxMDBERDAwMDAwMDAwMDA3NEIwNzFDMDAwMDAwMDAwRjBGMzAwMDA3NDkKKzoxMDBERTAwMDAwMDAwMDBGMEE5NjAwMDMwMDAwMDAwMDBBOTU1QzAwNTYKKzoxMDBERjAwMDAwMDAwMDAwNEEwMDVBMDAwMDAwMDAwMDBDOTYwQTAwQTMKKzoxMDBFMDAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwODBEMDBGRkZGMjMKKzoxMDBFMTAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDA1QUIKKzoxMDBFMjAwMDAwMDAwMDEwQjFBODAwMDgwMDAwMDAxMDIwNUYwMDAwQzIKKzoxMDBFMzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwNEIKKzoxMDBFNDAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwOEEKKzoxMDBFNTAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRUYyNEMKKzoxMDBFNjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMUYwMDAwOUQKKzoxMDBFNzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwQkQKKzoxMDBFODAwMDAwMDAwMDA4MkEwMDAwMEQwMDAwMDAwODA1MDBBQUFBQzIKKzoxMDBFOTAwMDAwMDAwMDE4ODAwMEZFNDQwMDAwMDAxMDkxRDQwMDAwMDMKKzoxMDBFQTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRURFMTYKKzoxMDBFQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxRDAKKzoxMDBFQzAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1MzIKKzowODBFRDAwMDAwMDAwMDE4ODAwMEZFM0M0OAorOjA4MEVEODAwMDAwMDAwMTBCMTgwMDAwNENECis6MTAwRUUwMDAwMDAwMDAxRjAzMDMwMzAwMDAwMDAwMDgwNTAwMDBGRkNFCis6MTAwRUYwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAyQTAwMDAwMEFFCis6MTAwRjAwMDAwMDAwMDAxMEIxRDQwMDAwMDAwMDAwMTA5MURFMDAwMENECis6MTAwRjEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTAwMDFGMDAwMDFGCis6MTAwRjIwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyRjgwQUEwMDE5Cis6MTAwRjMwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMDgwMjU0MDAwRjhFCis6MTAwRjQwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDkyOTUyMDAzRjcyCis6MTAwRjUwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMTg4MDAwMDAxMENECis6MTAwRjYwMDAwMDAwMDAxODgwMDAwMDExMDAwMDAwMTg4MDAwMDA0QUY2Cis6MTAwRjcwMDAwMDAwMDAxODgwMDAwMTI4MDAwMDAwMTg4MDAwMDEyN0YwCis6MTAwRjgwMDAwMDAwMDAxODgwMDAwMTI2MDAwMDAwMTg4MDAwMDEyNkUzCis6MTAwRjkwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDEzRkUxCis6MTAwRkEwMDAwMDAwMDAxODgwMDAwMTIyMDAwMDAwMTg4MDAwMDAwQkUzCis6MTAwRkIwMDAwMDAwMDAxODgwMDAwMTQ1MDAwMDAwMTg4MDAwMDE5QTIwCis6MTAwRkMwMDAwMDAwMDAxODgwMDAwMDdCMDAwMDAwMTg4MDAwMDBGOTdECis6MTAwRkQwMDAwMDAwMDAxODgwMDAwMTA5MDAwMDAwMDAyQTAwMDAwMDQ1Cis6MTAwRkUwMDAwMDAwMDAxODgwMDBGRkU0MDAwMDAwMDAyQTAwMDAwMDVDCis6MTAwRkYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZFMUM0Cis6MTAxMDAwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZERjQwCis6MTAxMDEwMDAwMDAwMDAwMDAzODIwMDAwMDAwMDAwMTg4MDAwRkZEQURBCis6MTAxMDIwMDAwMDAwMDAwMTBDMTYxNDAwMDAwMDAwMDA4QzE4MTQwMEQxCis6MTAxMDMwMDAwMDAwMDAxMDkxOTgwMDAzMDAwMDAwMDgwQzk2MDAwMkM4Cis6MTAxMDQwMDAwMDAwMDAxMEIxODAwMDAzMDAwMDAwMDgwQzk2MDAwMUIxCis6MTAxMDUwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwRDE5MDAwMDVFCis6MTAxMDYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUVCCis6MTAxMDcwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAxMDgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUUyCis6MTAxMDkwMDAwMDAwMDAxMDAxMTMwMUYxMDAwMDAwMTgwMDA3MDAwMDFCCis6MTAxMEEwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQyMUFECis6MTAxMEIwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDU3Cis6MTAxMEMwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjJCCis6MTAxMEQwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTAxMEUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYxMDAwMDEzCis6MTAxMEYwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEM3Cis6MTAxMTAwMDAwMDAwMDAxMDkxOTYzNDE2MDAwMDAwMTAyMDVGMDAwMENGCis6MTAxMTEwMDAwMDAwMDAwMDA5RDgwMDAwMDAwMDAwMDAyQzFFMDAwMEE0Cis6MTAxMTIwMDAwMDAwMDAwODJDODAwMTBFMDAwMDAwMDgyRDAwMDAwQUJECis6MTAxMTMwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAxMTQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYyMDAwMEIxCis6MTAxMTUwMDAwMDAwMDAwMDJDMTMwMDAwMDAwMDAwMTgwMDBBMDAwMDJFCis6MTAxMTYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQwOTA0Cis6MTAxMTcwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDk2Cis6MTAxMTgwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDA2QTA2Cis6MTAxMTkwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAxMUEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDdBMDAwMDM5Cis6MTAxMUIwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMEUzCis6MTAxMUMwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMzYyMDAwMDRDCis6MTAxMUQwMDAwMDAwMDAxMDIzNDIwMERCMDAwMDAwMDAwMjYzOEMwMENFCis6MTAxMUUwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDgwMjA0MDAxMjczCis6MTAxMUYwMDAwMDAwMDAxMEI5MDYwODJFMDAwMDAwMDAwRjU4MDAwMDgzCis6MTAxMjAwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDgxCis6MTAxMjEwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDRBCis6MTAxMjIwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQ0M2MDAxMjQ3Cis6MTAxMjMwMDAwMDAwMDAxODgwMDBGRkNFMDAwMDAwMTAyMDU2MDAwMEMzCis6MTAxMjQwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwM0Y1Cis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDVGCis6MTAxMjYwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgyNzExMDAxMkRECis6MTAxMjcwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDhBMzFCMDAxMkEwCis6MTAxMjgwMDAwMDAwMDAxMEIxOTgwMDA2MDAwMDAwMTAwMDFGMDAwMEQwCis6MTAxMjkwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMDc5Cis6MTAxMkEwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNDk0Cis6MTAxMkIwMDAwMDAwMDAwODIyMDAwMDAzMDAwMDAwMDgyQzgwMDAwQzQxCis6MTAxMkMwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMTAwMDFGMDAwMEFFCis6MTAxMkQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyNTk2MDAwMDA0Cis6MTAxMkUwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwNjY2MDAwMERECis6MTAxMkYwMDAwMDAwMDAwMDg2NjExODAwMDAwMDAwMDkwMjYwMDAwRjc1Cis6MTAxMzAwMDAwMDAwMDAwRjAyMDQwMDAyMDAwMDAwMTBCNjBDMDgwNUU3Cis6MTAxMzEwMDAwMDAwMDAwQzFGQkYwMDAwMDAwMDAwMTAyODY2MDAwMzQyCis6MTAxMzIwMDAwMDAwMDAwODA3OEYwMDAxMDAwMDAwMEMzMzY2MDAxMDY5Cis6MTAxMzMwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMEEwCis6MTAxMzQwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAzMUUzMkUwMDUxCis6MTAxMzUwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTg4MDAwRkY3NUJDCis6MTAxMzYwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjQ4Cis6MTAxMzcwMDAwMDAwMDAwODIyMDAwMDBCMDAwMDAwMEM2OTUyMDAwMDcxCis6MTAxMzgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyODY2MDA4ODgyCis6MTAxMzkwMDAwMDAwMDAxODgwMDBGRjZFMDAwMDAwMDAyQTAwMDAwMDFFCis6MTAxM0EwMDAwMDAwMDAwODJDODAwMDQwMDAwMDAwMDgyRDAwMDAyMEY0Cis6MTAxM0IwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAxM0MwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMEY0MkVBMDAxMDUzCis6MTAxM0QwMDAwMDAwMDAxMDAwNEYwMDA0MDAwMDAwMTBCNzQ2OTIwMDBCCis6MTAxM0UwMDAwMDAwMDAwODAyNDkwMDEyMDAwMDAwMTBCNTg0MEEwMDQ1Cis6MTAxM0YwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTBCQTY2MzQ2QUIxCis6MTAxNDAwMDAwMDAwMDAwODgzMDUwMDEyMDAwMDAwMTAwMDRGMDAwMkQ5Cis6MTAxNDEwMDAwMDAwMDAwMDAzNDkwMDAwMDAwMDAwMDE4MzA2OEMwMDZBCis6MTAxNDIwMDAwMDAwMDAwMDgzQzYwQzAwMDAwMDAwMTBCMTg3MDAxMTBFCis6MTAxNDMwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMTBCRUU5MDAwNTc3Cis6MTAxNDQwMDAwMDAwMDAxODgwMDBGRjU1MDAwMDAwMDEwNTY5MTQwMDJECis6MTAxNDUwMDAwMDAwMDAxMDkxOEEwMDAyMDAwMDAwMDhCNEU5MDAwMUI5Cis6MTAxNDYwMDAwMDAwMDAxMEIxRTkyQzVEMDAwMDAwMDA4NjY5MkMwMDJFCis6MTAxNDcwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDkwMkVBRkZGRjc3Cis6MTAxNDgwMDAwMDAwMDAxMDAwMEMwMDAyMDAwMDAwMDAwMjA0MEEwMDJFCis6MTAxNDkwMDAwMDAwMDAwRjQ2MEMwMDAxMDAwMDAwMEYwMjg1MDAwMTUzCis6MTAxNEEwMDAwMDAwMDAxMDkxOEMwMUZDMDAwMDAwMTBCNzA0MEU1NEU1Cis6MTAxNEIwMDAwMDAwMDAwMDBGNDAwMDAwMDAwMDAwMDAwRDYxMDAwMDZGCis6MTAxNEMwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMEJGCis6MTAxNEQwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDg4Cis6MTAxNEUwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQzg2MDAxMkM1Cis6MTAxNEYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTU3Cis6MTAxNTAwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMEMyOTUyMDAwMEJBCis6MTAxNTEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTRECis6MTAxNTIwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMDczCis6MTAxNTMwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzA2MDAwMDE2Cis6MTAxNTQwMDAwMDAwMDAxMEIxOTgwMDA5MDAwMDAwMTAwMDFGMDAwMDBBCis6MTAxNTUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMEI2Cis6MTAxNTYwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNEQxCis6MTAxNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDNDCis6MTAxNTgwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAzMjE0MDAwMEM2Cis6MTAxNTkwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDAzMUUzMkUwMDQyCis6MTAxNUEwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAyNTk2MDAwMDc2Cis6MTAxNUIwMDAwMDAwMDAxMEIxODcwMDIxMDAwMDAwMEMyOTgwMDAwMDBECis6MTAxNUMwMDAwMDAwMDAwRjBGNkIwMDA3MDAwMDAwMDAwRDY5MDAwMDE1Cis6MTAxNUQwMDAwMDAwMDAwMDBBNkMwMDAwMDAwMDAwMDAwQUVEMDAwMDlFCis6MTAxNUUwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDAwQjgwMDAwMEY3Cis6MTAxNUYwMDAwMDAwMDAwMDBDODcwMDAwMDAwMDAwMTg4MDAwRkYxRUEzCis6MTAxNjAwMDAwMDAwMDAwMTBDMTYxNDAwMDAwMDAwMDA4QzE4MTQwMEVCCis6MTAxNjEwMDAwMDAwMDAwODBDOTYwMDAxMDAwMDAwMTA5MTk4MDAwMkU0Cis6MTAxNjIwMDAwMDAwMDAwODBDOTkwMDAxMDAwMDAwMDAwRDE5MDAwMEU2Cis6MTAxNjMwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMTAyMDU2MDAwMDE4Cis6MTAxNjQwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMUYzCis6MTAxNjUwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEM2OTUyMDAwMTNGCis6MTAxNjYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUZDCis6MTAxNjcwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyMzEyMDAwMEMyCis6MTAxNjgwMDAwMDAwMDAwMDI3MTEwMDAwMDAwMDAwMDAyNjkwMDAwMDZDCis6MTAxNjkwMDAwMDAwMDAxMEI4MTcwRTAzMDAwMDAwMEMyOTgwMDAwMEE1Cis6MTAxNkEwMDAwMDAwMDAxODgwMDBGRkVCMDAwMDAwMDA4Mjk3MEUwMDkxCis6MTAxNkIwMDAwMDAwMDAwMEEzMTIwQTAwMDAwMDAwMDgyMjAwMDAxQTI3Cis6MTAxNkMwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQzE5Cis6MTAxNkQwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTAwMDFGMDAwMDE2Cis6MTAxNkUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAwRDZFMDAwMDMwCis6MTAxNkYwMDAwMDAwMDAwM0U3Q0YzNDAwMDAwMDAwMEMyOTgwMDAwMDQ4Cis6MTAxNzAwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTBCMTg3MDAwNzBCCis6MTAxNzEwMDAwMDAwMDAwMDM2MTQwMDAwMDAwMDAwMDAzNjk1MDAwMEI0Cis6MTAxNzIwMDAwMDAwMDAwMDM3MTYwMDAwMDAwMDAwMDgyQzgwMDA1MDY4Cis6MTAxNzMwMDAwMDAwMDAwODJEMDAwMDMwMDAwMDAwMDgyRDgwMDAwQzgzCis6MTAxNzQwMDAwMDAwMDAxODgwMDBGRUY4MDAwMDAwMDAyNjQ2MDAwMDlGCis6MTAxNzUwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjU0Cis6MTAxNzYwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDNFN0NGMkMwMDFCCis6MTAxNzcwMDAwMDAwMDAwODIyMDAwMDFCMDAwMDAwMEM2OTUyMDAwMDVECis6MTAxNzgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkVFRjFGCis6MTAxNzkwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwODY2MDAwNTlDCis6MTAxN0EwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMENFCis6MTAxN0IwMDAwMDAwMDAwOTAyNjAwMEYwMDAwMDAwMTBCNjBDMDgwMkYyCis6MTAxN0MwMDAwMDAwMDAxODgwMDBGRUU4MDAwMDAwMDAwNjgyMDAwMDEzCis6MTAxN0QwMDAwMDAwMDAxMEIxOEYwMDAwMDAwMDAwMDg4NzhGMDAwMTlBCis6MTAxN0UwMDAwMDAwMDAwQzczNjYwMDEwMDAwMDAwMDgyQzgwMDAxODM4Cis6MTAxN0YwMDAwMDAwMDAwODJEMDAwMDE4MDAwMDAwMDgyRDgwMDAwMkU1Cis6MTAxODAwMDAwMDAwMDAwQzVGQkYwMDAwMDAwMDAwMTA5MURFMDAwMDJGCis6MTAxODEwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMDAyQTAwMDAwMDc5Cis6MTAxODIwMDAwMDAwMDAxMDI4NjYwMUY1MDAwMDAwMDgyQzgwMDAwMzZECis6MTAxODMwMDAwMDAwMDAwODJEMDAwMDAzMDAwMDAwMDkzMDYwRkZGMEU4Cis6MTAxODQwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMEMyOTgwMDAwMDJECis6MTAxODUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAxQTNCCis6MTAxODYwMDAwMDAwMDAwODJEMDAwMDFBMDAwMDAwMDU3MzY2MDAwMDRCCis6MTAxODcwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMDAzMTgwMDAwMDAwCis6MTAxODgwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwQzE5Cis6MTAxODkwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAwNDRFCis6MTAxOEEwMDAwMDAwMDAxODgwMDBGRUNDMDAwMDAwMTgwMDAyMDAwMEJDCis6MTAxOEIwMDAwMDAwMDAxODgwMDBGRUNBMDAwMDAwMDAyQTAwMDAwMDlFCis6MTAxOEMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTlBCis6MTAxOEQwMDAwMDAwMDAwMDBGMDA4MDAwMDAwMDAwMDgwRjgwMDAwN0RCCis6MTAxOEUwMDAwMDAwMDAxODgwMDAwMDFCMDAwMDAwMDAyODBBMDAwMDEzCis6MTAxOEYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMDgyMjAwMDAwOUFFCis6MTAxOTAwMDAwMDAwMDAwMDI5MDAwMDAwMDAwMDAwMEY2NTY4MDAxMEMyCis6MTAxOTEwMDAwMDAwMDAwM0Y2NkM5NDAwMDAwMDAwMTBCOTcyQTAwNEVGCis6MTAxOTIwMDAwMDAwMDAwQzczRTcwMDE5MDAwMDAwMEMyMTQyMDAwNEM1Cis6MTAxOTMwMDAwMDAwMDAwMDNDRjgwMDAwMDAwMDAwMEMyOTgwMDAwMEJFCis6MTAxOTQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMDgyMjAwMDAwOEUyCis6MTAxOTUwMDAwMDAwMDAwQzYxNDIwMDA0MDAwMDAwMTgwMDBBMDAwMEIyCis6MTAxOTYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMEM2MTQyMDAwMEMxCis6MTAxOTcwMDAwMDAwMDAxMDAxNDIwMDAzMDAwMDAwMEMzM0U3MDAxRENFCis6MTAxOTgwMDAwMDAwMDAwQzYxNDIwMDAyMDAwMDAwMTgwMDBBMDAwMDg0Cis6MTAxOTkwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMEVFCis6MTAxOUEwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMEYwRjQ3MDAwNzdDCis6MTAxOUIwMDAwMDAwMDAwODBGODAwMDA4MDAwMDAwMEMyOTgwMDAwMEQzCis6MTAxOUMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTk5Cis6MTAxOUQwMDAwMDAwMDAxODgwMDBGRUE2MDAwMDAwMDAzMzUxMDAwMDQ3Cis6MTAxOUUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUM2MDAyOTFECis6MTAxOUYwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMDAwQTYwMDAwMDA4Cis6MTAxQTAwMDAwMDAwMDAwMDBBRTEwMDAwMDAwMDAwMEY0QjYyMDAwODI3Cis6MTAxQTEwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMEY0QzYyMDAxMEQwCis6MTAxQTIwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDkwRDFBMDBGRjE4Cis6MTAxQTMwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMEMwRDFBMDAwODAxCis6MTAxQTQwMDAwMDAwMDAwQzBCMTYwMDA4MDAwMDAwMDAwQ0M2MDAwMDhGCis6MTAxQTUwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwNjk4MDAwMDVECis6MTAxQTYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUUxCis6MTAxQTcwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTAwNkMyMDAwNEYwCis6MTAxQTgwMDAwMDAwMDAwQzI5MDAwMDAyMDAwMDAwMTAyNjQyMDAwMkE1Cis6MTAxQTkwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTkxCis6MTAxQUEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUI4Cis6MTAxQUIwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMUEwMDk2Cis6MTAxQUMwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTUyMDAwMDk5Cis6MTAxQUQwMDAwMDAwMDAxMEIxOTczMjBDMDAwMDAwMEMyOTgwMDAwMEJCCis6MTAxQUUwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDUzMDAwMEQ1Cis6MTAxQUYwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1OEMwMEU5Cis6MTAxQjAwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTU3Cis6MTAxQjEwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTMwCis6MTAxQjIwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTg4MDAwRkZFRjk1Cis6MTAxQjMwMDAwMDAwMDAxMEIxQzgwMDEzMDAwMDAwMTBCMUM2MDAwMzdGCis6MTAxQjQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDVECis6MTAxQjUwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwMzc0Cis6MTAxQjYwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMjEyCis6MTAxQjcwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMDY2Cis6MTAxQjgwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDgyMjAwMDAxNjBCCis6MTAxQjkwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMDAyMzQ4MDAwMDUwCis6MTAxQkEwMDAwMDAwMDAxMEIxODAwMDA1MDAwMDAwMDAyMzQ4MDAwMDg0Cis6MTAxQkIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjUwMDAwN0ZCCis6MTAxQkMwMDAwMDAwMDAxODgwMDAwMDEyMDAwMDAwMDgyMjAwMDAxNjJCCis6MTAxQkQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAzMDE0MDAwMDBDCis6MTAxQkUwMDAwMDAwMDAwMDMwOTUwMDAwMDAwMDAwMTAwNzUwMDAwM0M2Cis6MTAxQkYwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMDkwRDFBMDBGRjhECis6MTAxQzAwMDAwMDAwMDAwRjMxMTYwMDA4MDAwMDAwMDAzMTYyMzQwMEFGCis6MTAxQzEwMDAwMDAwMDAwM0YxNjIzMDAwMDAwMDAwMTAyMDVGMDAwMEFGCis6MTAxQzIwMDAwMDAwMDAwMDJDNTEwMDAwMDAwMDAwMDkyQ0QxMDA3RkIyCis6MTAxQzMwMDAwMDAwMDAwODJDRDkwMDAwMDAwMDAwMDgyRDAwMDAwMDYyCis6MTAxQzQwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAxQzUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwNUMyMDAwNTI5Cis6MTAxQzYwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMDAzMzAwMDAwMEEzCis6MTAxQzcwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUU2Cis6MTAxQzgwMDAwMDAwMDAxODgwMDBGRTUwMDAwMDAwMDAyQTAwMDAwMDQ0Cis6MTAxQzkwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTBCMUM2MDAzMDE4Cis6MTAxQ0EwMDAwMDAwMDAwRjQ3NDIwMDA4MDAwMDAwMDkwNzBFMDAwRjY3Cis6MTAxQ0IwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMTAwMDFGMDAwMEQwCis6MTAxQ0MwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwOTAwMDAwMUIzCis6MTAxQ0QwMDAwMDAwMDAwNzA5MTIxQzAwMDAwMDAwMDNDQkNBOTIwMDlDCis6MTAxQ0UwMDAwMDAwMDAwMDBCOTdBMjAwMDAwMDAwMDc0MjE3MUMwMDM0Cis6MTAxQ0YwMDAwMDAwMDAwMDBCMDQwMDAwMDAwMDAwMEYwQTg0MDAwMzM1Cis6MTAxRDAwMDAwMDAwMDAwMDBBOTU5QzAwMDAwMDAwMDA0QTAwOUEwMEI0Cis6MTAxRDEwMDAwMDAwMDAwODgyMTIwMDAxMDAwMDAwMDEwQzE3MDgwMEZBCis6MTAxRDIwMDAwMDAwMDAwMDBDOTc4QzAwMDAwMDAwMDAwMjE4MDAwMDZBCis6MTAxRDMwMDAwMDAwMDAwODBEMDBGRkZGMDAwMDAwMDgwRjgwMDAwNkYzCis6MTAxRDQwMDAwMDAwMDAwQzI5MDAwMDAwMDAwMDAwMTAwNkMyMDAwNDgyCis6MTAxRDUwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMTAyNjQyMDAwMjgwCis6MTAxRDYwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMUJFCis6MTAxRDcwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUU1Cis6MTAxRDgwMDAwMDAwMDAxMEIxOTczMjBEMDAwMDAwMDAyMzFCMDAwMDdFCis6MTAxRDkwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDBECis6MTAxREEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwMjE4MDAwMDY0Cis6MTAxREIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMzE2Cis6MTAxREMwMDAwMDAwMDAwMDIyQzUzNjAwMDAwMDAwMTAwMDFGMDAwMEM3Cis6MTAxREQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNjE3Cis6MTAxREUwMDAwMDAwMDAxODgwMDBGRkYyMDAwMDAwMDAyMzFCMDAwMDJDCis6MTAxREYwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMEFECis6MTAxRTAwMDAwMDAwMDAxMEIxQzgwMDBCMDAwMDAwMEMyOTgwMDAwMDg5Cis6MTAxRTEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMEI4Cis6MTAxRTIwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMjRFCis6MTAxRTMwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMEE2Cis6MTAxRTQwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMEZDCis6MTAxRTUwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMDgyMjAwMDAxN0Q2Cis6MTAxRTYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDFGMDAwMDhFCis6MTAxRTcwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTg4MDAwRkUxMTZDCis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNkYmVhLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OCArMCwwIEBACi06MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTc4MDAwMDAwNTgwMDAwMDAwOTA5Ci06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAwMDMwMDAwMDAwMEZBODAwMDAwRUQwMDAwMDAwMDUwMDAwMDAwMDI2Ci06MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLTowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQotOjEwMDA2MDAwMDAwMDAwMUYwMzAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1RAotOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQotOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQotOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgotOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQotOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAotOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMwotOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MwotOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNwotOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQotOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgotOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgotOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA4RjAwMDAwMDA4MkQ4MDAxMUNENgotOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQotOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAotOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA5NjAwMDAwMDBDMjk4MDAwMDJCQQotOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQotOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQotOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNwotOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgotOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQotOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQotOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA4NTAwMDAwMDE4ODAwMEZGRjE4QQotOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAotOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQwotOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA3RjAwMDAwMDBCMkZERjAwMDJDRAotOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQotOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAotOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQotOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAotOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAotOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQotOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NwotOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQotOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQotOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAotOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQotOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAotOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA3ODAwMDAwMDE4ODAwMDAwQ0FCQwotOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBDOTAwMDAwMDE4ODAwMDAwMDAyNQotOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQotOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQotOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAotOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMTU5NwotOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAotOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAotOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRTA5RAotOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMTUyOAotOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDE0MDAwMDAwMDE4ODAwMDAxMEIxMAotOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE2NDAwMDAwMDE4ODAwMDAwNjE4NwotOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOURBMAotOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQwotOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgotOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgotOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAotOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQotOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgotOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQotOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgotOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQotOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgotOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgotOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMkEzMgotOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBEOTAwMDAwMDEwMkM2MjAxQkFEMgotOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQwotOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQotOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMzdFMAotOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQwotOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAotOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAotOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgotOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQotOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQotOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDAwMDIwMjAwMDBFOQotOjEwMDUwMDAwMDAwMDAwMDAwMjlBMDAwMDAwMDAwMDAwMDYwQzJDMDAxMQotOjEwMDUxMDAwMDAwMDAwMDRDNjBDMzQwMDAwMDAwMDEwMDAxRjAwMDBBMgotOjEwMDUyMDAwMDAwMDAwMTBCMTk2MTgwQzAwMDAwMDA4MDY5NjAwMDRBOAotOjEwMDUzMDAwMDAwMDAwMDkwNjhERkZGQzAwMDAwMDA0Q0QwNTFBMDAzNAotOjEwMDU0MDAwMDAwMDAwMDRDQzlBMTgwMDAwMDAwMDEwMjBENzAwMDAyMgotOjEwMDU1MDAwMDAwMDAwMEMyQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjBENzAwMDA4NAotOjEwMDU3MDAwMDAwMDAwMDgwRjgwMDAwMTAwMDAwMDEwQjE4MDAxRjRBRAotOjEwMDU4MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkI1NjAwMDA2RgotOjEwMDU5MDAwMDAwMDAwMTgwMDA0MDAwMDAwMDAwMDAwMDY4MjAwMDBCNwotOjEwMDVBMDAwMDAwMDAwMTBCMThBMDAwODAwMDAwMDEwQjE4QzE0MDc5MAotOjEwMDVCMDAwMDAwMDAwMEIwNTBBRkZGRjAwMDAwMDEwQjE4QTAwMDNENQotOjEwMDVDMDAwMDAwMDAwMDA4NjBBMTgwMDAwMDAwMDEwOTE4QzAwMDA1NgotOjEwMDVEMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDEwOTFENDAwMDA3MwotOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDUwMjAwMDBERgotOjEwMDVGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwQTAwMDA1QQotOjEwMDYwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwOTFERTAwMDBFMwotOjEwMDYxMDAwMDAwMDAwMTBCRUUxMDAwNTAwMDAwMDE4ODAwMEZGNEM0MwotOjEwMDYyMDAwMDAwMDAwMDEwNTYxMTQwMDAwMDAwMDEwOTE4QTAwMDIyMgotOjEwMDYzMDAwMDAwMDAwMDhCMEUxMDAwMTAwMDAwMDE4MDAwRDAwMDBGQgotOjEwMDY0MDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwOTFERTAwMDBBMwotOjEwMDY1MDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZGNDQwQQotOjEwMDY2MDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDJFMQotOjEwMDY3MDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDE4MDAwRDAwMDAzOQotOjEwMDY4MDAwMDAwMDAwMTBCMUEwQjAxMzAwMDAwMDBCMkZERjAwMDIyQgotOjEwMDY5MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDA4MkM4MDAwMDA1QQotOjEwMDZBMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDBBMAotOjEwMDZCMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGREMwRgotOjEwMDZDMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDEwMDAxRjAwMDAyOQotOjEwMDZEMDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDBGNDc2MDAwMDhERgotOjEwMDZFMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDAwMEY1ODAwMDA3RgotOjEwMDZGMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDA5RAotOjEwMDcwMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAwMwotOjEwMDcxMDAwMDAwMDAwMTg4MDAwMDAxMzAwMDAwMDBGNDc2MDAwMDg3MAotOjEwMDcyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDA4MkM4MDAwMDBGQQotOjEwMDczMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDAwRgotOjEwMDc0MDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDBGMDYwRTAwMDFCMwotOjEwMDc1MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDAwMEY1ODAwMDAwMwotOjEwMDc2MDAwMDAwMDAwMTg4MDAwRkZENDAwMDAwMDAwMEE2NDAwMDBCMAotOjEwMDc3MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYxMgotOjEwMDc4MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDAwMDI2MjAwMDA5NwotOjEwMDc5MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMzEwNDAwMDAwOQotOjEwMDdBMDAwMDAwMDAwMDAzMDlBMDAwMDAwMDAwMDA5MDU2MDAwMEYwMgotOjEwMDdCMDAwMDAwMDAwMTBCMThBMDAwQTAwMDAwMDAwMDU2MzRDMDAzMAotOjEwMDdDMDAwMDAwMDAwMDgwNTBBMDAxMjAwMDAwMDEwQjk2MjE0MDNCRQotOjEwMDdEMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDE4ODAwMDAwMDU3OQotOjEwMDdFMDAwMDAwMDAwMTg4MDAwRkYxMTAwMDAwMDEwQjYwNjE0MDM3RQotOjEwMDdGMDAwMDAwMDAwMDgwMzA2MDAwMTAwMDAwMDE4ODAwMEZGMTczOQotOjEwMDgwMDAwMDAwMDAwMTg4MDAwRkY5RjAwMDAwMDBDMjk4MDAwMDFGQwotOjEwMDgxMDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDBDOQotOjEwMDgyMDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUEwQwotOjEwMDgzMDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDMxQQotOjEwMDg0MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDFEMQotOjEwMDg1MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDA1RAotOjEwMDg2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGMDkzMQotOjEwMDg3MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDBFOAotOjEwMDg4MDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDBFOQotOjEwMDg5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwMDAyRgotOjEwMDhBMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMUM0MQotOjEwMDhCMDAwMDAwMDAwMTg4MDAwRkZBNzAwMDAwMDA4MkM4MDAwMDY0MAotOjEwMDhDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDAzRAotOjEwMDhEMDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDYyQwotOjEwMDhFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBNgotOjEwMDhGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDA3MAotOjEwMDkwMDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDBBMAotOjEwMDkxMDAwMDAwMDAwMTg4MDAwRkVGNDAwMDAwMDEwOTFBMEIwMDk1MwotOjEwMDkyMDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDlDNwotOjEwMDkzMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc4NQotOjEwMDk0MDAwMDAwMDAwMTg4MDAwRkZBMDAwMDAwMDE4ODAwMDAwMTBDOAotOjEwMDk1MDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEIzRgotOjEwMDk2MDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDIzOQotOjEwMDk3MDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDA5NgotOjEwMDk4MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGODI5NgotOjEwMDk5MDAwMDAwMDAwMTg4MDAwMDAzMTAwMDAwMDE4ODAwMDAwMDZGMAotOjEwMDlBMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDBGMgotOjEwMDlCMDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTU0NwotOjEwMDlDMDAwMDAwMDAwMTg4MDAwRkVERTAwMDAwMDAwMDY4MjAwMDAyQgotOjEwMDlEMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCNQotOjEwMDlFMDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkY4RgotOjEwMDlGMDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDA5RgotOjEwMEEwMDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDU4RQotOjEwMEExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAxMENBMAotOjEwMEEyMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMThEMgotOjEwMEEzMDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGNzZGMwotOjEwMEE0MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEU2MgotOjEwMEE1MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBBMAotOjEwMEE2MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDBDNQotOjEwMEE3MDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDEwMkM2MjAwMDIyOQotOjEwMEE4MDAwMDAwMDAwMTg4MDAwMDAwQzAwMDAwMDBCMkZERjAwMDJBNwotOjEwMEE5MDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDE3NwotOjEwMEFBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMEZGRkZCQwotOjEwMEFCMDAwMDAwMDAwMTg4MDAwRkVDMDAwMDAwMDA4MkM4MDAxMEQxRQotOjEwMEFDMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA3MwotOjEwMEFEMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGNkQ1NQotOjEwMEFFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBNAotOjEwMEFGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDA2RQotOjEwMEIwMDAwMDAwMDAwMDgyQTAwMDAwQTAwMDAwMDAwMDUwMDAwMDBBNAotOjEwMEIxMDAwMDAwMDAwMTg4MDAwRkVCNDAwMDAwMDAwMDY4MjAwMDAwMwotOjEwMEIyMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDhDNwotOjEwMEIzMDAwMDAwMDAwMDgyRDgwMDEzNDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwMEI0MDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDA4MkM4MDAxNDAyMQotOjEwMEI1MDAwMDAwMDAwMDgyRDAwMDAzQzAwMDAwMDA4MkQ4MDAxMUM1MgotOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAwNgotOjEwMEI3MDAwMDAwMDAwMDgyQzgwMDA4MDAwMDAwMDA4MkQwMDAwMDAwQwotOjEwMEI4MDAwMDAwMDAwMDgyRDgwMDEwNTAwMDAwMDEwQkVFMjAwMDVGNQotOjEwMEI5MDAwMDAwMDAwMTg4MDAwRkU5RDAwMDAwMDAxMDU2MjE0MDBBNgotOjEwMEJBMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFGQwotOjEwMEJCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDA5MQotOjEwMEJDMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUE0RQotOjEwMEJEMDAwMDAwMDAwMTg4MDAwRkYzOTAwMDAwMDBDMjk4MDAwMDE4RgotOjEwMEJFMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDkxRQotOjEwMEJGMDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFOTc2NwotOjEwMEMwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCNwotOjEwMEMxMDAwMDAwMDAwMTg4MDAwRkYzMTAwMDAwMDEwOTFBMDNDMDI4RAotOjEwMEMyMDAwMDAwMDAwMTBCMUU2NjIwNzAwMDAwMDBCMkZERjAwMDI5OQotOjEwMEMzMDAwMDAwMDAwMDAyQzMxMDAwMDAwMDAwMDA5MkNCMTAwN0ZGMgotOjEwMEM0MDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDA2MgotOjEwMEM1MDAwMDAwMDAwMDgyRDgwMDEwRDAwMDAwMDEwQjFBODAwMDY2MgotOjEwMEM2MDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkMyMDAwMDBBOQotOjEwMEM3MDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTA1QwotOjEwMEM4MDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZGMkNFMwotOjEwMEM5MDAwMDAwMDAwMTBCMUE2MDAxMDAwMDAwMDEwMDAxRjAwMDBBRQotOjEwMENBMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDAwMEE2MDAwMDA4NQotOjEwMENCMDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDg4NQotOjEwMENDMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDAwMEQ2MjAwMDA4QwotOjEwMENEMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDczMDAwMDM5QgotOjEwMENFMDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDg5NAotOjEwMENGMDAwMDAwMDAwMEY0Q0UzMDAxODAwMDAwMDAwMEM5OTJDMDBDRAotOjEwMEQwMDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDA4MEY4MDAwMDBBRgotOjEwMEQxMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDAwMzMzMTAwMDBCOQotOjEwMEQyMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDAwMkFERjAwMDA3QQotOjEwMEQzMDAwMDAwMDAwMDgyQTAwMDAwQzAwMDAwMDEwMDA5RjAwMDBDNgotOjEwMEQ0MDAwMDAwMDAwMDAwRjIwMDAwMDAwMDAwMDBDMUY4MDAwMDFDOAotOjEwMEQ1MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNkJEQgotOjEwMEQ2MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUFBQwotOjEwMEQ3MDAwMDAwMDAwMTg4MDAwRkYwNTAwMDAwMDBGNDcyMjAwMDg1NwotOjEwMEQ4MDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDgxMQotOjEwMEQ5MDAwMDAwMDAwMDgwMjgwMDAwMTAwMDAwMDA3MDI4NTFDMDAxRQotOjEwMERBMDAwMDAwMDAwMDg4Mjg1MDAwMTAwMDAwMDAwMDI4NTRDMDA2MAotOjEwMERCMDAwMDAwMDAwMDc0Mjg1MUMwMDAwMDAwMDAzQzNBQTUyMDA4NwotOjEwMERDMDAwMDAwMDAwMDAwM0IxMEUwMDAwMDAwMDA3NEIwNzFDMDBFQwotOjEwMEREMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDBGMEE5NjAwMDMwQwotOjEwMERFMDAwMDAwMDAwMDAwQTk1NUMwMDAwMDAwMDAwNEEwMDVBMDA2NAotOjEwMERGMDAwMDAwMDAwMDAwQzk2MEEwMDAwMDAwMDA5MEM5OUZGRkY5QgotOjEwMEUwMDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDEwQjE5NjMyMDI0NAotOjEwMEUxMDAwMDAwMDAwMDgwRjgwMDAwNTAwMDAwMDEwQjFBODAwMDhDNQotOjEwMEUyMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDBCMkZERjAwMDIxOAotOjEwMEUzMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDA5MwotOjEwMEU0MDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDg5RgotOjEwMEU1MDAwMDAwMDAwMTg4MDAwRkVGMzAwMDAwMDBDMjk4MDAwMDE1MwotOjEwMEU2MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDMUY4MDAwMDFBNwotOjEwMEU3MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEQyQQotOjEwMEU4MDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFNDUyNgotOjEwMEU5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTUyNQotOjEwMEVBMDAwMDAwMDAwMTg4MDAwRkVERjAwMDAwMDBDMjk4MDAwMDExNwotOjEwMEVCMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDc0RAotOjEwMEVDMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFM0Q5OAotOjEwMEVEMDAwMDAwMDAwMTBCMTgwMDAwNDAwMDAwMDFGMDMwMzAzMDBBNQotOjEwMEVFMDAwMDAwMDAwMDgwNTAwMDBGRjAwMDAwMDE4MDAwMjAwMDBEQwotOjEwMEVGMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFENDAwMDAzMwotOjEwMEYwMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMjA1MzAwMDBERgotOjEwMEYxMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE1MwotOjEwMEYyMDAwMDAwMDAwMDAyRjgwQUEwMDAwMDAwMDBDMjk4MDAwMDFCMgotOjEwMEYzMDAwMDAwMDAwMDgwMjU0MDAwRjAwMDAwMDAwMkM0MDAwMDBEOAotOjEwMEY0MDAwMDAwMDAwMDkyOTUyMDAzRjAwMDAwMDE4MDAwNDAwMDBDMgotOjEwMEY1MDAwMDAwMDAwMTg4MDAwMDAxMDAwMDAwMDE4ODAwMDAwMTE0MAotOjEwMEY2MDAwMDAwMDAwMTg4MDAwMDA0QTAwMDAwMDE4ODAwMDAxMjhERQotOjEwMEY3MDAwMDAwMDAwMTg4MDAwMDEyNzAwMDAwMDE4ODAwMDAxMjZGMgotOjEwMEY4MDAwMDAwMDAwMTg4MDAwMDEyNjAwMDAwMDE4ODAwMDAwMDAwQQotOjEwMEY5MDAwMDAwMDAwMTg4MDAwMDEzRjAwMDAwMDE4ODAwMDAxMjJCRQotOjEwMEZBMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDE4ODAwMDAxNDVDMAotOjEwMEZCMDAwMDAwMDAwMTg4MDAwMDE5QTAwMDAwMDE4ODAwMDAwN0JFQgotOjEwMEZDMDAwMDAwMDAwMTg4MDAwMDBGOTAwMDAwMDE4ODAwMDAxMDlFRQotOjEwMEZEMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDE4ODAwMEZGRTQ2QwotOjEwMEZFMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBDMjk4MDAwMDAyMgotOjEwMEZGMDAwMDAwMDAwMTg4MDAwRkZFMTAwMDAwMDAwMkEwMDAwMDA0RgotOjEwMTAwMDAwMDAwMDAwMTg4MDAwRkZERjAwMDAwMDAwMDM4MjAwMDBFNQotOjEwMTAxMDAwMDAwMDAwMTg4MDAwRkZEQTAwMDAwMDAxMEMxNjE0MDAyOAotOjEwMTAyMDAwMDAwMDAwMDA4QzE4MTQwMDAwMDAwMDEwOTE5ODAwMDNDQwotOjEwMTAzMDAwMDAwMDAwMDgwQzk2MDAwMjAwMDAwMDEwQjE4MDAwMDNDMAotOjEwMTA0MDAwMDAwMDAwMDgwQzk2MDAwMTAwMDAwMDAwMEMwMDAwMDBFOQotOjEwMTA1MDAwMDAwMDAwMDAwRDE5MDAwMDAwMDAwMDEwMjA1NjAwMDBFNAotOjEwMTA2MDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDFEOQotOjEwMTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAxRjAwMDA0MQotOjEwMTA4MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwMDExMzAxRjFGQgotOjEwMTA5MDAwMDAwMDAwMTgwMDA3MDAwMDAwMDAwMDAwMDUwMjAwMDAyQQotOjEwMTBBMDAwMDAwMDAwMTA5MTk2MzQyMTAwMDAwMDEwMjA1RjAwMDAyNQotOjEwMTBCMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDYyQwotOjEwMTBDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDA4MkQ4MDAxMDIyRAotOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA5MQotOjEwMTBFMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4MDAwQTAwMDA3MAotOjEwMTBGMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTE5NjM0MTY2OAotOjEwMTEwMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMDlEODAwMDA2RgotOjEwMTExMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAxMEVDMgotOjEwMTEyMDAwMDAwMDAwMDgyRDAwMDAwQTAwMDAwMDA4MkQ4MDAxMDJDOAotOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAzMAotOjEwMTE0MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDAwMkMxMzAwMDBGMQotOjEwMTE1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA2NgotOjEwMTE2MDAwMDAwMDAwMTA5MTk2MzQwOTAwMDAwMDEwMjA1RjAwMDA3QwotOjEwMTE3MDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDY2QgotOjEwMTE4MDAwMDAwMDAwMDgyRDAwMDA2QTAwMDAwMDA4MkQ4MDAxMDIwOAotOjEwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBEMAotOjEwMTFBMDAwMDAwMDAwMDAwRDdBMDAwMDAwMDAwMDE4MDAwQTAwMDA5NgotOjEwMTFCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDAwMEQ2MTAwMDA5NwotOjEwMTFDMDAwMDAwMDAwMDAwMzYyMDAwMDAwMDAwMDEwMjM0MjAwREI2QQotOjEwMTFEMDAwMDAwMDAwMDAwMjYzOEMwMDAwMDAwMDAwMjY0NjAwMDBCMgotOjEwMTFFMDAwMDAwMDAwMDgwMjA0MDAxMjAwMDAwMDEwQjkwNjA4MkVEQQotOjEwMTFGMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDAxQQotOjEwMTIwMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkY3NwotOjEwMTIxMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDAzNwotOjEwMTIyMDAwMDAwMDAwMDgwQ0M2MDAxMjAwMDAwMDE4ODAwMEZGQ0U2RAotOjEwMTIzMDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDExOQotOjEwMTI0MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDAwMDAwMDAwMDAwNAotOjEwMTI1MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDExMAotOjEwMTI2MDAwMDAwMDAwMDgyNzExMDAxMjAwMDAwMDAwNjY5MDAwMDAzNgotOjEwMTI3MDAwMDAwMDAwMDhBMzFCMDAxMjAwMDAwMDEwQjE5ODAwMDYzNwotOjEwMTI4MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFFMAotOjEwMTI5MDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDFCOQotOjEwMTJBMDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMDM3NgotOjEwMTJCMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEMyRAotOjEwMTJDMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFBMAotOjEwMTJEMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDBDMjk4MDAwMDA5RQotOjEwMTJFMDAwMDAwMDAwMDAwNjY2MDAwMDAwMDAwMDAwODY2MTE4MDA5MwotOjEwMTJGMDAwMDAwMDAwMDkwMjYwMDAwRjAwMDAwMDBGMDIwNDAwMDI1RAotOjEwMTMwMDAwMDAwMDAwMTBCNjBDMDgwNTAwMDAwMDBDMUZCRjAwMDAxNAotOjEwMTMxMDAwMDAwMDAwMTAyODY2MDAwMzAwMDAwMDA4MDc4RjAwMDE4RAotOjEwMTMyMDAwMDAwMDAwMEMzMzY2MDAxMDAwMDAwMDAwMzIxNDAwMDBDMgotOjEwMTMzMDAwMDAwMDAwMDAzMjk1MDAwMDAwMDAwMDA1NzM2NjJDMDBEQwotOjEwMTM0MDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA4MkQ4MDAwMTA5NgotOjEwMTM1MDAwMDAwMDAwMTg4MDAwRkY3NTAwMDAwMDAwMjMwMDAwMDA1RQotOjEwMTM2MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDA4MjIwMDAwMEIzNgotOjEwMTM3MDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBGMQotOjEwMTM4MDAwMDAwMDAwMTAyODY2MDA4ODAwMDAwMDE4ODAwMEZGNkUzMgotOjEwMTM5MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDA4MkM4MDAwNDAyRgotOjEwMTNBMDAwMDAwMDAwMDgyRDAwMDAyMDAwMDAwMDA4MkQ4MDAxMUMxNgotOjEwMTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBBRQotOjEwMTNDMDAwMDAwMDAwMEY0MkVBMDAxMDAwMDAwMDEwMDA0RjAwMDQ2RgotOjEwMTNEMDAwMDAwMDAwMTBCNzQ2OTIwMDAwMDAwMDA4MDI0OTAwMTIwOQotOjEwMTNFMDAwMDAwMDAwMTBCNTg0MEEwMDAwMDAwMDAwMEQ2MTAwMDAzQwotOjEwMTNGMDAwMDAwMDAwMTBCQTY2MzQ2QTAwMDAwMDA4ODMwNTAwMTI3RAotOjEwMTQwMDAwMDAwMDAwMTAwMDRGMDAwMjAwMDAwMDAwMDM0OTAwMDAyRgotOjEwMTQxMDAwMDAwMDAwMDE4MzA2OEMwMDAwMDAwMDAwODNDNjBDMDA2MQotOjEwMTQyMDAwMDAwMDAwMTBCMTg3MDAxMTAwMDAwMDAwMEI2RTAwMDBFQQotOjEwMTQzMDAwMDAwMDAwMTBCRUU5MDAwNTAwMDAwMDE4ODAwMEZGNTUwNAotOjEwMTQ0MDAwMDAwMDAwMDEwNTY5MTQwMDAwMDAwMDEwOTE4QTAwMDJFQwotOjEwMTQ1MDAwMDAwMDAwMDhCNEU5MDAwMTAwMDAwMDEwQjFFOTJDNURCMwotOjEwMTQ2MDAwMDAwMDAwMDA4NjY5MkMwMDAwMDAwMDAwMDIwMDAwMDA1RgotOjEwMTQ3MDAwMDAwMDAwMDkwMkVBRkZGRjAwMDAwMDEwMDAwQzAwMDI1QgotOjEwMTQ4MDAwMDAwMDAwMDAwMjA0MEEwMDAwMDAwMDBGNDYwQzAwMDFFQQotOjEwMTQ5MDAwMDAwMDAwMEYwMjg1MDAwMTAwMDAwMDEwOTE4QzAxRkM4QgotOjEwMTRBMDAwMDAwMDAwMTBCNzA0MEU1NDAwMDAwMDAwMEY0MDAwMDBDMAotOjEwMTRCMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDAwMEE2NDAwMDA1MAotOjEwMTRDMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkZCNQotOjEwMTREMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDA3NQotOjEwMTRFMDAwMDAwMDAwMDgwQzg2MDAxMjAwMDAwMDEwMjA1NjAwMDBDQQotOjEwMTRGMDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDM0MwotOjEwMTUwMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwMDAxRjAwMDAyNQotOjEwMTUxMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDA4MjcxMTAwMTIyQQotOjEwMTUyMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDAwMjY0NjAwMDA1OQotOjEwMTUzMDAwMDAwMDAwMDAyMzA2MDAwMDAwMDAwMDEwQjE5ODAwMDkyMAotOjEwMTU0MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDExRAotOjEwMTU1MDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDFGNgotOjEwMTU2MDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwMTU3MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFFRAotOjEwMTU4MDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDA0RQotOjEwMTU5MDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA1NzM2NjJDMDBGRgotOjEwMTVBMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDEwQjE4NzAwMjExNwotOjEwMTVCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY2QjAwMDdFNgotOjEwMTVDMDAwMDAwMDAwMDAwRDY5MDAwMDAwMDAwMDAwMEE2QzAwMDAyRgotOjEwMTVEMDAwMDAwMDAwMDAwQUVEMDAwMDAwMDAwMDAwMEI2RTAwMDA5QgotOjEwMTVFMDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMEM4NzAwMDBERAotOjEwMTVGMDAwMDAwMDAwMTg4MDAwRkYxRTAwMDAwMDAxMEMxNjE0MDBGRgotOjEwMTYwMDAwMDAwMDAwMDA4QzE4MTQwMDAwMDAwMDA4MEM5NjAwMDE3NwotOjEwMTYxMDAwMDAwMDAwMTA5MTk4MDAwMjAwMDAwMDA4MEM5OTAwMDFFMQotOjEwMTYyMDAwMDAwMDAwMDAwRDE5MDAwMDAwMDAwMDAwMEMwMDAwMDA4OAotOjEwMTYzMDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDExNQotOjEwMTY0MDAwMDAwMDAwMDgwRjgwMDAwMTAwMDAwMDEwMjA1MzAwMDA3RgotOjEwMTY1MDAwMDAwMDAwMEM2OTUyMDAwMTAwMDAwMDEwMDAxRjAwMDA5MwotOjEwMTY2MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMjJDNThDMDBCOAotOjEwMTY3MDAwMDAwMDAwMDAyMzEyMDAwMDAwMDAwMDAwMjcxMTAwMDBGRAotOjEwMTY4MDAwMDAwMDAwMDAyNjkwMDAwMDAwMDAwMDEwQjgxNzBFMDNCNAotOjEwMTY5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDE4ODAwMEZGRUIxMwotOjEwMTZBMDAwMDAwMDAwMDA4Mjk3MEUwMDAwMDAwMDAwQTMxMjBBMDA1NAotOjEwMTZCMDAwMDAwMDAwMDgyMjAwMDAxQTAwMDAwMDA4MkM4MDAwMEMyNgotOjEwMTZDMDAwMDAwMDAwMDgyRDAwMDAwQzAwMDAwMDA4MkQ4MDAwMTAxNAotOjEwMTZEMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE4QwotOjEwMTZFMDAwMDAwMDAwMDAwRDZFMDAwMDAwMDAwMDAzRTdDRjM0MDA5MgotOjEwMTZGMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDBCNgotOjEwMTcwMDAwMDAwMDAwMTBCMTg3MDAwNzAwMDAwMDAwMzYxNDAwMDA0MAotOjEwMTcxMDAwMDAwMDAwMDAzNjk1MDAwMDAwMDAwMDAwMzcxNjAwMDBCMQotOjEwMTcyMDAwMDAwMDAwMDgyQzgwMDA1MDAwMDAwMDA4MkQwMDAwMzA1MAotOjEwMTczMDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDE4ODAwMEZFRjg1QQotOjEwMTc0MDAwMDAwMDAwMDAyNjQ2MDAwMDAwMDAwMDAwMjMwMDAwMDAwQQotOjEwMTc1MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDAwMEI2RTAwMDBGRQotOjEwMTc2MDAwMDAwMDAwMDNFN0NGMkMwMDAwMDAwMDA4MjIwMDAwMUI0RgotOjEwMTc3MDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBFRAotOjEwMTc4MDAwMDAwMDAwMTg4MDAwRkVFRjAwMDAwMDAwMkEwMDAwMDBBQQotOjEwMTc5MDAwMDAwMDAwMTAwODY2MDAwNTAwMDAwMDAwMDY2NjAwMDA1QQotOjEwMTdBMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwRjBERgotOjEwMTdCMDAwMDAwMDAwMTBCNjBDMDgwMjAwMDAwMDE4ODAwMEZFRThDRgotOjEwMTdDMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4RjAwMDA0MQotOjEwMTdEMDAwMDAwMDAwMDg4NzhGMDAwMTAwMDAwMDBDNzM2NjAwMTBGNQotOjEwMTdFMDAwMDAwMDAwMDgyQzgwMDAxODAwMDAwMDA4MkQwMDAwMThFMAotOjEwMTdGMDAwMDAwMDAwMDgyRDgwMDAwMjAwMDAwMDBDNUZCRjAwMDAwOAotOjEwMTgwMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAzNAotOjEwMTgxMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMjg2NjAxRjUwQQotOjEwMTgyMDAwMDAwMDAwMDgyQzgwMDAwMzAwMDAwMDA4MkQwMDAwMDNDOQotOjEwMTgzMDAwMDAwMDAwMDkzMDYwRkZGMDAwMDAwMDA4MkQ4MDAwMDE2QQotOjEwMTg0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDA2NAotOjEwMTg1MDAwMDAwMDAwMDgyQzgwMDAxQTAwMDAwMDA4MkQwMDAwMUE2QgotOjEwMTg2MDAwMDAwMDAwMDU3MzY2MDAwMDAwMDAwMDA4MkQ4MDAwMDJFMwotOjEwMTg3MDAwMDAwMDAwMDAzMTgwMDAwMDAwMDAwMDEwOTFERTAwMDAzOAotOjEwMTg4MDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEM1NwotOjEwMTg5MDAwMDAwMDAwMDgyRDgwMDAwNDAwMDAwMDE4ODAwMEZFQ0MyRAotOjEwMThBMDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDE4ODAwMEZFQ0FCRQotOjEwMThCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBDRgotOjEwMThDMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMEYwMDgwMDAzQQotOjEwMThEMDAwMDAwMDAwMDgwRjgwMDAwNzAwMDAwMDE4ODAwMDAwMUJCNwotOjEwMThFMDAwMDAwMDAwMDAyODBBMDAwMDAwMDAwMDAwMDUwMjAwMDBCRgotOjEwMThGMDAwMDAwMDAwMDgyMjAwMDAwOTAwMDAwMDAwMjkwMDAwMDA4QwotOjEwMTkwMDAwMDAwMDAwMEY2NTY4MDAxMDAwMDAwMDAzRjY2Qzk0MDBGMgotOjEwMTkxMDAwMDAwMDAwMTBCOTcyQTAwNDAwMDAwMDBDNzNFNzAwMTk2OQotOjEwMTkyMDAwMDAwMDAwMEMyMTQyMDAwNDAwMDAwMDAwM0NGODAwMDAxMAotOjEwMTkzMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA2RgotOjEwMTk0MDAwMDAwMDAwMDgyMjAwMDAwODAwMDAwMDBDNjE0MjAwMDRCMgotOjEwMTk1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA1RQotOjEwMTk2MDAwMDAwMDAwMEM2MTQyMDAwMDAwMDAwMDEwMDE0MjAwMDM3MgotOjEwMTk3MDAwMDAwMDAwMEMzM0U3MDAxRDAwMDAwMDBDNjE0MjAwMDI3MwotOjEwMTk4MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMkEwMDAwMDAwQgotOjEwMTk5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFDOQotOjEwMTlBMDAwMDAwMDAwMEYwRjQ3MDAwNzAwMDAwMDA4MEY4MDAwMDgyQwotOjEwMTlCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDAxRjAwMDA0MwotOjEwMTlDMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDE4ODAwMEZFQTY4QwotOjEwMTlEMDAwMDAwMDAwMDAzMzUxMDAwMDAwMDAwMDAwMkEwMDAwMDA1OQotOjEwMTlFMDAwMDAwMDAwMTBCMUM2MDAyOTAwMDAwMDBGMEY1MDAwMDdEMgotOjEwMTlGMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDA5MgotOjEwMUEwMDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkZFOQotOjEwMUExMDAwMDAwMDAwMEY0QzYyMDAxMDAwMDAwMDAwMEQ2MjAwMDA4QQotOjEwMUEyMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDc1MDAwMDMxRAotOjEwMUEzMDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDgzNgotOjEwMUE0MDAwMDAwMDAwMDAwQ0M2MDAwMDAwMDAwMDAwMEI4MDAwMDAzOQotOjEwMUE1MDAwMDAwMDAwMDAwNjk4MDAwMDAwMDAwMDEwMjA1NjAwMDA2MgotOjEwMUE2MDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDNDRAotOjEwMUE3MDAwMDAwMDAwMTAwNkMyMDAwNDAwMDAwMDBDMjkwMDAwMDI1MwotOjEwMUE4MDAwMDAwMDAwMTAyNjQyMDAwMjAwMDAwMDBDMjk1MjAwMDM1MgotOjEwMUE5MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDEwMDAxRjAwMDBFQwotOjEwMUFBMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMjMxQjAwMDBBOQotOjEwMUFCMDAwMDAwMDAwMDAyNzExMUEwMDAwMDAwMDAwNjY5MDAwMDBERQotOjEwMUFDMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwQjE5NzMyMENGOQotOjEwMUFEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY5ODAwMDBCMwotOjEwMUFFMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDNFOQotOjEwMUFGMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDEwMDAxRjAwMDA0NAotOjEwMUIwMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwMjA1NjAwMDAwMAotOjEwMUIxMDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDMxQwotOjEwMUIyMDAwMDAwMDAwMTg4MDAwRkZFRjAwMDAwMDEwQjFDODAwMTM5MwotOjEwMUIzMDAwMDAwMDAwMTBCMUM2MDAwMzAwMDAwMDBDMjk4MDAwMDA2NgotOjEwMUI0MDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDA4QgotOjEwMUI1MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDEwMDZDMjAwMDIyMQotOjEwMUI2MDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDAwMjJDNThDMDA3OQotOjEwMUI3MDAwMDAwMDAwMDAyNzY1MDAwMDAwMDAwMDAwMjZFNDAwMDBDRgotOjEwMUI4MDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDEwQjFDNjAwMDM4QgotOjEwMUI5MDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDEwQjE4MDAwMDU5NAotOjEwMUJBMDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDBDMjk4MDAwMDAxNQotOjEwMUJCMDAwMDAwMDAwMEYwRjUwMDAwNzAwMDAwMDE4ODAwMDAwMTIwNgotOjEwMUJDMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDBDMjk4MDAwMDAyMAotOjEwMUJEMDAwMDAwMDAwMDAzMDE0MDAwMDAwMDAwMDAwMzA5NTAwMDBGQwotOjEwMUJFMDAwMDAwMDAwMTAwNzUwMDAwMzAwMDAwMDA5MEIxNjAwRkY2MgotOjEwMUJGMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDBGMzExNjAwMDg1OAotOjEwMUMwMDAwMDAwMDAwMDAzMTYyMzQwMDAwMDAwMDAzRjE2MjMwMDA4NwotOjEwMUMxMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkM1MTAwMDBCOAotOjEwMUMyMDAwMDAwMDAwMDkyQ0QxMDA3RjAwMDAwMDA4MkNEOTAwMDAyMgotOjEwMUMzMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAwMENBRQotOjEwMUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAxNQotOjEwMUM1MDAwMDAwMDAwMTAwNUMyMDAwNTAwMDAwMDA4MEY4MDAwMDcwQQotOjEwMUM2MDAwMDAwMDAwMDAzMzAwMDAwMDAwMDAwMDEwMDAxRjAwMDAxMgotOjEwMUM3MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDE4ODAwMEZFNTAyRgotOjEwMUM4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBGMEY1MDAwMDdCNQotOjEwMUM5MDAwMDAwMDAwMTBCMUM2MDAzMDAwMDAwMDBGNDc0MjAwMDhFRAotOjEwMUNBMDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDhFMgotOjEwMUNCMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFBNgotOjEwMUNDMDAwMDAwMDAwMDgwOTAwMDAwMTAwMDAwMDA3MDkxMjFDMDBDNAotOjEwMUNEMDAwMDAwMDAwMDNDQkNBOTIwMDAwMDAwMDAwMEI5N0EyMDA5NgotOjEwMUNFMDAwMDAwMDAwMDc0MjE3MUMwMDAwMDAwMDAwMEIwNDAwMDA2OQotOjEwMUNGMDAwMDAwMDAwMEYwQTg0MDAwMzAwMDAwMDAwMEE5NTlDMDAwOQotOjEwMUQwMDAwMDAwMDAwMDA0QTAwOUEwMDAwMDAwMDA4ODIxMjAwMDE1MgotOjEwMUQxMDAwMDAwMDAwMDEwQzE3MDgwMDAwMDAwMDAwMEM5NzhDMDA2OAotOjEwMUQyMDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDA4MEQwMEZGRkY4NgotOjEwMUQzMDAwMDAwMDAwMDgwRjgwMDAwNjAwMDAwMDBDMjkwMDAwMDBEMQotOjEwMUQ0MDAwMDAwMDAwMTAwNkMyMDAwNDAwMDAwMDBDMjk1MjAwMDIyRQotOjEwMUQ1MDAwMDAwMDAwMTAyNjQyMDAwMjAwMDAwMDBDMjk1MjAwMDM3RgotOjEwMUQ2MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDEwMDAxRjAwMDAxOQotOjEwMUQ3MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwQjE5NzMyMEQ3RAotOjEwMUQ4MDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDBENQotOjEwMUQ5MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDBDMjk4MDAwMDA5OAotOjEwMURBMDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDEwMjA1MzAwMDA5NgotOjEwMURCMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDAwMjJDNTM2MDA3QwotOjEwMURDMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE5NQotOjEwMUREMDAwMDAwMDAwMDgwRjgwMDAwNjAwMDAwMDE4ODAwMEZGRjJERAotOjEwMURFMDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDA3NQotOjEwMURGMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDEwQjFDODAwMEI1OQotOjEwMUUwMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA5QQotOjEwMUUxMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDBDMjk1MjAwMDNCMQotOjEwMUUyMDAwMDAwMDAwMTAwNkMyMDAwMjAwMDAwMDBDMjk1MjAwMDI0RgotOjEwMUUzMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjc2NTAwMDBBMwotOjEwMUU0MDAwMDAwMDAwMDAyNkU0MDAwMDAwMDAwMDAwMjM0ODAwMDAxRAotOjEwMUU1MDAwMDAwMDAwMDgyMjAwMDAxNzAwMDAwMDBDMjk4MDAwMDA4QwotOjEwMUU2MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFGNAotOjA4MUU3MDAwMDAwMDAwMTg4MDAwRkUxMUMzCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngtZTEtNS4yLjEzLjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMi4xMy4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxZjQzNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMi4xMy4wLmZ3LmloZXgKQEAgLTAsMCArMSwxMDE5MSBAQAorOjEwMDAwMDAwMDAwMDI4QjAwMDAwMDA2MDAwMDAwNjg4MDAwMDI5MThFOQorOjEwMDAxMDAwMDAwMDE2MTQwMDAwMkZBODAwMDAwMDk4MDAwMDQ1QzA0MgorOjEwMDAyMDAwMDAwMDczQzQwMDAwNDY2MDAwMDAwMENDMDAwMEJBMjg0NQorOjEwMDAzMDAwMDAwMDlBNzAwMDAwQkFGODAwMDAwMDk0MDAwMTU1NzBBQQorOjEwMDA0MDAwMDAwMDU3QkMwMDAxNTYwODAwMDAwMEI4MDAwMUFEQzgxMAorOjEwMDA1MDAwMDAwMENFMjAwMDAxQUU4ODAwMDAwMDA0MDAwMjdDQjA0OQorOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAorOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgorOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAorOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgorOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgorOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQorOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQorOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQorOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAorOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDA2MDQwMENDMDAwMDAwMDQxOAorOjEwMDEwMDAwMDIwNDAwREMwMDEwMDAwMDAyMDQwMEUwMTIxNDAwMDBGMQorOjEwMDExMDAwMDIwNDAwRTQyMjE0MDAwMDAyMDQwMEU4MzIxNDAwMDA4QgorOjEwMDEyMDAwMDYwNDAwRUMwMDAwMDAwNDAxMDQwMTI0MDAwMDAwMDBBQgorOjEwMDEzMDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA1RgorOjEwMDE0MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMDA0MDAwMDAwRkY3MAorOjEwMDE1MDAwMDIwNDAwMDgwMDAwMDBGRjAyMDQwMDBDMDAwMDAwRkY4MQorOjEwMDE2MDAwMDIwNDAwMTAwMDAwMDBGRjAyMDQwMDE0MDAwMDAwRkY2MQorOjEwMDE3MDAwMDIwNDAwMTgwMDAwMDBGRjAyMDQwMDFDMDAwMDAwRkY0MQorOjEwMDE4MDAwMDIwNDAwMjAwMDAwMDBGRjAyMDQwMDI0MDAwMDAwM0VFMgorOjEwMDE5MDAwMDIwNDAwMjgwMDAwMDAwMDAyMDQwMDJDMDAwMDAwM0ZDMAorOjEwMDFBMDAwMDIwNDAwMzAwMDAwMDAzRjAyMDQwMDM0MDAwMDAwM0Y2MQorOjEwMDFCMDAwMDIwNDAwMzgwMDAwMDAwMDAyMDQwMDNDMDAwMDAwM0Y4MAorOjEwMDFDMDAwMDIwNDAwNDAwMDAwMDAzRjAyMDQwMDQ0MDAwMDAwM0YyMQorOjEwMDFEMDAwMDIwNDIwMDgwMDAwMDQxMTAyMDQyMDBDMDAwMDA0MDBBNgorOjEwMDFFMDAwMDIwNDIwMTAwMDAwMDQwNDAyMDQyMDE0MDAwMDA0MTk3QQorOjEwMDFGMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY3QgorOjEwMDIwMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkY1QQorOjEwMDIxMDAwMDYwNDIwMzgwMDAwMDAwMjAyMDQyMDQwMDAwMDAwMzRFMAorOjEwMDIyMDAwMDIwNDIwNDQwMDAwMDAzNTA2MDQyMDQ4MDAwMDAwN0M0MQorOjEwMDIzMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZCNworOjEwMDI0MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZDNworOjEwMDI1MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBCQworOjEwMDI2MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA5QworOjEwMDI3MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA3QworOjEwMDI4MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA1QworOjEwMDI5MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAzQworOjEwMDJBMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAxQworOjEwMDJCMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBGQworOjEwMDJDMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgyQworOjEwMDJEMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFCNgorOjEwMDJFMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIyMgorOjEwMDJGMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjA1RQorOjEwMDMwMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA2MworOjEwMDMxMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAyOAorOjEwMDMyMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIzOAorOjEwMDMzMDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDY0MAorOjEwMDM0MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIyNworOjEwMDM1MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDUwNgorOjEwMDM2MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJFNworOjEwMDM3MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFDOAorOjEwMDM4MDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEyQgorOjEwMDM5MDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEyNQorOjEwMDNBMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA5RgorOjEwMDNCMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTNCQworOjEwMDNDMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE4OQorOjEwMDNEMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDcxNAorOjEwMDNFMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDg0NAorOjEwMDNGMDAwMDIwNTAwNUMwMDAwMDAwODA2MDUwMDYwMDAwMDAwMDQyMworOjEwMDQwMDAwMDIwNTAwRDgwMDAwMDAwNjAyMDUwMEUwMDAwMDAwMEQxMworOjEwMDQxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEU4MDAwMDAwMDdDRQorOjEwMDQyMDAwMDIwNTAwRUMwMDAwMDAyNzAyMDUwMEYwMDAwMDAwMDdCNAorOjEwMDQzMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEY4MDAwMDAwMDc5NAorOjEwMDQ0MDAwMDIwNTAwRkMwMDAwMDAyNzAyMDUwMDA0MDAwMDAwMDE3NgorOjEwMDQ1MDAwMDIwNTAwMDgwMDAwMDAwMTAyMDUwMDBDMDAwMDAwMDE3OAorOjEwMDQ2MDAwMDIwNTAwMTAwMDAwMDAwMTAyMDUwMDE0MDAwMDAwMDE1OAorOjEwMDQ3MDAwMDIwNTAwMTgwMDAwMDAwMTAyMDUwMDFDMDAwMDAwMDEzOAorOjEwMDQ4MDAwMDIwNTAwMjAwMDAwMDAwMTAyMDUwMDI0MDAwMDAwMDExOAorOjEwMDQ5MDAwMDIwNTAwMjgwMDAwMDAwMTAyMDUwMDJDMDAwMDAwMDFGOAorOjEwMDRBMDAwMDIwNTAwMzAwMDAwMDAwMTAyMDUwMDM0MDAwMDAwMDFEOAorOjEwMDRCMDAwMDIwNTAwMzgwMDAwMDAwMTAyMDUwMDNDMDAwMDAwMDFCOAorOjEwMDRDMDAwMDIwNTAwNDAwMDAwMDAwMTA0MDYxMDAwMDIwMDAwMjBBOAorOjEwMDREMDAwMDIwNjAwREMwMDAwMDAwMTAxMDYwMEQ4MDAwMDAwMDA1OAorOjEwMDRFMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBGNworOjEwMDRGMDAwMDIwNjAwNjgwMDAwMDBCODAyMDYwMDc4MDAwMDAxMTQzRgorOjEwMDUwMDAwMDEwNjAwQjgwMDAwMDAwMDAxMDYwMEM4MDAwMDAwMDA1RAorOjEwMDUxMDAwMDIwNjAwNkMwMDAwMDBCODAyMDYwMDdDMDAwMDAxMTQxNgorOjEwMDUyMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDAzNQorOjEwMDUzMDAwMDcxODA0MDAwMDk1MDAwMDA4MTgwNzYwMDAxNDAyMjM0MworOjEwMDU0MDAwMDcxQzAwMDAzNEQ0MDAwMDA3MUM4MDAwMzRDRjBEMzY5NworOjEwMDU1MDAwMDcxRDAwMDAwQTE5MUE2QTA4MUQxNDYwNUQ3NDAyMjUzRgorOjEwMDU2MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA1NQorOjEwMDU3MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDAzNQorOjEwMDU4MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAxNQorOjEwMDU5MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJFMAorOjEwMDVBMDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBDMAorOjEwMDVCMDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDE5RQorOjEwMDVDMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDE4MgorOjEwMDVEMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA1RgorOjEwMDVFMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDMzRgorOjEwMDVGMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDEyMgorOjEwMDYwMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDBGRQorOjEwMDYxMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNERQorOjEwMDYyMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFDMQorOjEwMDYzMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDA5RQorOjEwMDY0MDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM3QgorOjEwMDY1MDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkZGRQorOjEwMDY2MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDA4NgorOjEwMDY3MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBDMgorOjEwMDY4MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDAzOQorOjEwMDY5MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQyMAorOjEwMDZBMDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEMyQworOjEwMDZCMDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA0QgorOjEwMDZDMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgwNQorOjEwMDZEMDAwMDIxQjgzQzAwMDAwMDFGNDA2MUEyMDAwMDAwMDAwQjJEMworOjEwMDZFMDAwMDYxQTIzQzgwMDAwMDE4MTA0MUEyOUNDMDAwMTAyMjc0MAorOjEwMDZGMDAwMDYxQTEwMjAwMDAwMDBDODA2MUExMDAwMDAwMDAwMDJCMAorOjEwMDcwMDAwMDYxQTFFMzgwMDAwMDAwMjA2MUExRTMwMDAwMDAwMDIwMQorOjEwMDcxMDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODA4MDAwMDAwMDI3RAorOjEwMDcyMDAwMDYxQTA4MTAwMDAwMDAwNDA0MUExRkIwMDAwNTAyMjg3MQorOjEwMDczMDAwMDQxQTRDQjAwMDA4MDIyRDA2MUEyMkM4MDAwMDAwMjAzRQorOjEwMDc0MDAwMDYxQTQwMDAwMDAwMDEyNDAyMUE0OTIwMDAwMDAwMDA5RgorOjEwMDc1MDAwMDYxQTE0MDAwMDAwMDAwQTA2MUExNDUwMDAwMDAwMDZEMQorOjEwMDc2MDAwMDYxQTE1MDAwMDAwMDAwMjA0MUExNTA4MDAwNTAyMzVEQgorOjEwMDc3MDAwMDYxQTE1MUMwMDAwMDAwOTA2MUExNTgwMDAwMDAwMTQ1NgorOjEwMDc4MDAwMDYxQTA5QzAwMDAwMDA0ODA2MUEwODAwMDAwMDAwMDIwRQorOjEwMDc5MDAwMDYxQTA4MjAwMDAwMDAwRTA0MUExRkIwMDAwMjAyM0FEOAorOjEwMDdBMDAwMDYxQTJDMjgwMDAwMDAwMjA2MUEyMzQ4MDAwMDAwMjAyOAorOjEwMDdCMDAwMDYxQTQ0OTAwMDAwMDEyNDAyMUE0OTI0MDAwMDAwMDA5NworOjEwMDdDMDAwMDYxQTE0MjgwMDAwMDAwQTA2MUExNDY4MDAwMDAwMDYyMQorOjEwMDdEMDAwMDYxQTE1NDAwMDAwMDAwMjA0MUExNTQ4MDAwNTAyM0NFNAorOjEwMDdFMDAwMDYxQTE1NUMwMDAwMDAwOTA2MUExNUQwMDAwMDAwMTQ1NgorOjEwMDdGMDAwMDYxQTBBRTAwMDAwMDA0ODA2MUEwODA4MDAwMDAwMDI3NQorOjEwMDgwMDAwMDYxQTA4NTgwMDAwMDAwRTA0MUExRkI4MDAwMjAyNDEyMAorOjEwMDgxMDAwMDYxQTJDMzAwMDAwMDAwMjAyMDBBMjgwMDAwMDAwMDEzNQorOjEwMDgyMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDBGNgorOjEwMDgzMDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDA3MAorOjEwMDg0MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBNEZDRkYwMDAwMDBCNAorOjEwMDg1MDAwMDIwMTAwQjQwMDAwMDAwMTAyMDEwMEI4MDAwMDAwMDEyNAorOjEwMDg2MDAwMDIwMTAwREMwMDAwMDAwMTAyMDEwMTAwMDAwMDAwMDFBMworOjEwMDg3MDAwMDIwMTAxMDQwMDAwMDAwMTAyMDEwMDdDMDAzMDAwMDBDMAorOjEwMDg4MDAwMDIwMTAwODQwMDAwMDAyODAyMDEwMDhDMDAwMDAwMDAyQQorOjEwMDg5MDAwMDIwMTAxMzAwMDAwMDAwNDAyMDEwMjVDMDAwMDAwMDFCRQorOjEwMDhBMDAwMDIwMTAzMjgwMDAwMDAwMDAyMDEwNTU0MDAwMDAwMzA4RQorOjEwMDhCMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFBMAorOjEwMDhDMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDEzOAorOjEwMDhEMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjhCMgorOjEwMDhFMDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDQzOQorOjEwMDhGMDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDBFNAorOjEwMDkwMDAwMDIwMTA1NjQwMDAwMDAzMDAyMDEwMEM4MDAwMDAwMDE3RgorOjEwMDkxMDAwMDIwMTAwRDAwMDAwMDAwMTAyMDEwMEZDMDAwMDAwMDEwMworOjEwMDkyMDAwMDIwMTAwRjQwMDAwMDAwMTAyMEMxMDAwMDAwMDAwMjA5MQorOjEwMDkzMDAwMDIwQzIwMDgwMDAwMEExMTAyMEMyMDBDMDAwMDBBMDAyMgorOjEwMDk0MDAwMDIwQzIwMTAwMDAwMEEwNDAyMEMyMDFDMDAwMEZGRkYxMworOjEwMDk1MDAwMDIwQzIwMjAwMDAwRkZGRjAyMEMyMDI0MDAwMEZGRkZGQgorOjEwMDk2MDAwMDIwQzIwMjgwMDAwRkZGRjA2MEMyMDM4MDAwMDAwMDJDNworOjEwMDk3MDAwMDIwQzIwNDAwMDAwMDAzNDAyMEMyMDQ0MDAwMDAwMzUyRQorOjEwMDk4MDAwMDIwQzIwNDgwMDAwMDAyMDAyMEMyMDRDMDAwMDAwMjEzNgorOjEwMDk5MDAwMDIwQzIwNTAwMDAwMDAyMjAyMEMyMDU0MDAwMDAwMjMxMgorOjEwMDlBMDAwMDIwQzIwNTgwMDAwMDAyNDAyMEMyMDVDMDAwMDAwMjVFRQorOjEwMDlCMDAwMDIwQzIwNjAwMDAwMDAyNjAyMEMyMDY0MDAwMDAwMjdDQQorOjEwMDlDMDAwMDIwQzIwNjgwMDAwMDAyODAyMEMyMDZDMDAwMDAwMjlBNgorOjEwMDlEMDAwMDIwQzIwNzAwMDAwMDAyQTAyMEMyMDc0MDAwMDAwMkI4MgorOjEwMDlFMDAwMDYwQzIwNzgwMDAwMDA1NjAyMEMyMUQwMDAwMDAwMDEwNworOjEwMDlGMDAwMDIwQzIxRDQwMDAwMDAwMTAyMEMyMUQ4MDAwMDAwMDFFQgorOjEwMEEwMDAwMDIwQzIxREMwMDAwMDAwMTAyMEMyMUUwMDAwMDAwMDFDQQorOjEwMEExMDAwMDIwQzIxRTQwMDAwMDAwMTAyMEMyMUU4MDAwMDAwMDFBQQorOjEwMEEyMDAwMDIwQzIxRUMwMDAwMDAwMTAyMEMyMUYwMDAwMDAwMDE4QQorOjEwMEEzMDAwMDIwQzIxRjQwMDAwMDAwMTA2MEMyMUY4MDAwMDAwMTA1NworOjEwMEE0MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y4RgorOjEwMEE1MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY5RgorOjEwMEE2MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA5NAorOjEwMEE3MDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDA3NAorOjEwMEE4MDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDA1NAorOjEwMEE5MDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDAzNAorOjEwMEFBMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDAxNAorOjEwMEFCMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBGNAorOjEwMEFDMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDBENAorOjEwMEFEMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRTgwNAorOjEwMEFFMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE4RQorOjEwMEFGMDAwMDIwQzQwMDgwMDAwMDM2NTAyMEM0MDBDMDAwMDAzNTQ4NworOjEwMEIwMDAwMDIwQzQwMTAwMDAwMDM1ODAyMEM0MDE0MDAwMDAzNzU1MgorOjEwMEIxMDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkYwMQorOjEwMEIyMDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZFMQorOjEwMEIzMDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDU1QQorOjEwMEI0MDAwMDYwQzQwNDAwMDAwMDA1RTAyMEM0MUI4MDAwMDAwMDFBRAorOjEwMEI1MDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkZEQgorOjEwMEI2MDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkYyNgorOjEwMEI3MDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDAzQgorOjEwMEI4MDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDAyQgorOjEwMEI5MDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDAwQgorOjEwMEJBMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDBFQgorOjEwMEJCMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDBDQgorOjEwMEJDMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDBBQgorOjEwMEJEMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDA4QgorOjEwMEJFMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDA2QgorOjEwMEJGMDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTg5RgorOjEwMEMwMDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEEyQworOjEwMEMxMDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjA3RAorOjEwMEMyMDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDAzMworOjEwMEMzMDAwMDIwRDAwOTgwMDAwMDAzMzAyMEQwMDlDMDAwMDAwMDIyRAorOjEwMEM0MDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDUzRAorOjEwMEM1MDAwMDIwRDAwQTgwMDAwMDAwNTA2MEQwMEFDMDAwMDAwMDIxNworOjEwMEM2MDAwMDIwRDAwQjQwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDNGNQorOjEwMEM3MDAwMDIwRDAwQkMwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDFENworOjEwMEM4MDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDJBRQorOjEwMEM5MDAwMDIwRDAxMDgwMDAwMDAwMTAyMEQwMTVDMDAwMDAwMDFDRQorOjEwMENBMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDI1NQorOjEwMENCMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjBFMQorOjEwMENDMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDA1RQorOjEwMENEMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTg5MworOjEwMENFMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAyNDAyNDNFMAorOjEwMENGMDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDIzNworOjEwMEQwMDAwMDIwRDAwNTQwMDAwMDAwODAyMEQwMDU4MDAwMDAwMDgwOQorOjEwMEQxMDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQ4OQorOjEwMEQyMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTE4MDAwMDAwMjk0NQorOjEwMEQzMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTIwMDAwMDAwMkEyMworOjEwMEQ0MDAwMDIwRDAxMjQwMDAwMDAwNzAyMEQwMTI4MDAwMDAwMjcwOQorOjEwMEQ1MDAwMDIwRDAxMkMwMDAwMDAwNzAyMEQwMTMwMDAwMDAwMjdFOQorOjEwMEQ2MDAwMDIwRDAxMzQwMDAwMDAwQzAyMEQwMTM4MDAwMDAwMkNCRgorOjEwMEQ3MDAwMDIwRDAxM0MwMDAwMDAwQzAyMEQwMTQwMDAwMDAwMkM5RgorOjEwMEQ4MDAwMDIwRDAxNDQwMDAwMDAwQzAyMEQwMTQ4MDAwMDAwMkM3RgorOjEwMEQ5MDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDEyNworOjEwMERBMDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDEwNworOjEwMERCMDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDFFNworOjEwMERDMDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDFDNworOjEwMEREMDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDFBNworOjEwMERFMDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDE4NworOjEwMERGMDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDE2NworOjEwMEUwMDAwMDIwRDAwM0MwMDAwMDAwMTAyMEUwMDRDMDAwMDAwMzIwOAorOjEwMEUxMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjAxOAorOjEwMEUyMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDAxRQorOjEwMEUzMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzBFMworOjEwMEU0MDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDJGMworOjEwMEU1MDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDAwMgorOjEwMEU2MDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDJFMgorOjEwMEU3MDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDJDNAorOjEwMEU4MDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDI5RAorOjEwMEU5MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDE4MworOjEwMEVBMDAwMDIwRTAwRTQwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDFGNworOjEwMEVCMDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDI3MQorOjEwMEVDMDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDBBRAorOjEwMEVEMDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDQ3RQorOjEwMEVFMDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEU2QworOjEwMEVGMDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTI3NAorOjEwMEYwMDAwMDQwRTAyODAwMDFCMDI2NzAyMEUwMDU0MDAwMDAwMEM1OQorOjEwMEYxMDAwMDIwRTAwNTgwMDAwMDAwOTAyMEUwMDVDMDAwMDAwMEZFNQorOjEwMEYyMDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDRDNQorOjEwMEYzMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEY5MgorOjEwMEY0MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMEUxNgorOjEwMEY1MDAwMDIwRTAxMUMwMDAwMDAyRTAyMEUwMDA0MDAwMDAwMDEyMQorOjEwMEY2MDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDE0QgorOjEwMEY3MDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDEyQgorOjEwMEY4MDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDEwQgorOjEwMEY5MDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDFFQgorOjEwMEZBMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDFDQgorOjEwMEZCMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDFBQgorOjEwMEZDMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDE4QgorOjEwMEZEMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDE2QgorOjEwMEZFMDAwMDczMDA0MDAwMEM5MDAwMDA4MzAwNzY4MDAxMzAyODJCRgorOjEwMEZGMDAwMDczNDAwMDAzMzRCMDAwMDA3MzQ4MDAwMzcwOTBDRDM1RQorOjEwMTAwMDAwMDczNTAwMDAzMDE2MUE5NjA4MzU3MkYwNTFBMjAyODQ5NgorOjEwMTAxMDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDA2QQorOjEwMTAyMDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDA0QQorOjEwMTAzMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDAyQQorOjEwMTA0MDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDJGNQorOjEwMTA1MDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDBENQorOjEwMTA2MDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDFCMworOjEwMTA3MDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDE5NworOjEwMTA4MDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDA3NAorOjEwMTA5MDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDM1NAorOjEwMTBBMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDEzNworOjEwMTBCMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDAxNAorOjEwMTBDMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDNGNAorOjEwMTBEMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDFENworOjEwMTBFMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDBCNAorOjEwMTBGMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDM5MQorOjEwMTEwMDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkYxMworOjEwMTExMDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDA5QgorOjEwMTEyMDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDBENworOjEwMTEzMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDAzQgorOjEwMTE0MDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUE0RgorOjEwMTE1MDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTAwNworOjEwMTE2MDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjA2MAorOjEwMTE3MDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODgxQQorOjEwMTE4MDAwMDIzMzgzQzAwMDAwMDFGNDBDMzM4MzgwMURDRDY1MDA2MQorOjEwMTE5MDAwMEEzMzgzODAwMDA0QzRCNDBCMzM4MzgwMDA0QzRCNDA3QgorOjEwMTFBMDAwMDYzMjFBQTAwMDAwMDBDMjA2MzIxMDIwMDAwMDAwQzg1QgorOjEwMTFCMDAwMDYzMjEwMDAwMDAwMDAwMjA2MzIxNDAwMDAwMDAwNDA1OQorOjEwMTFDMDAwMDYzMjUwOTgwMDAwMDAwNDA2MzI1MDgwMDAwMDAwMDVFRQorOjEwMTFEMDAwMDQzMjUwOTQwMDAxMDI4NjA2MzI1MDAwMDAwMDAwMjBDNAorOjEwMTFFMDAwMDQzMjI4MzAwMDAyMDI4NzAyMzMwODAwMDEwMDAwMDBBOAorOjEwMTFGMDAwMDQzMzBDMDAwMDEwMDI4OTAyMzMwODAwMDAwMDAwMDBENAorOjEwMTIwMDAwMDQzMzBDNDAwMDEwMDI5OTA2MzIxNTAwMDAwMDAwQjRBRgorOjEwMTIxMDAwMDIzMjFEQzgwMDAwMDAwMDA2MzI0MDAwMDAwMDAwRDg2NQorOjEwMTIyMDAwMDYzMjE3RDAwMDAwMDBCNDAyMzIxRENDMDAwMDAwMDBDRQorOjEwMTIzMDAwMDYzMjQzNjAwMDAwMDBEODA3MjAwNDAwMDA5MjAwMDAzRQorOjEwMTI0MDAwMDgyMDA3ODAwMDEwMDJBOTA3MjQwMDAwMkNEMTAwMDAwQworOjEwMTI1MDAwMDcyNDgwMDAyQUU1MEIzNTA4MjREQzYwNjJEQTAyQUI0MworOjEwMTI2MDAwMDEyMDAwMDAwMDAwMDAwMDAxMjAwMDA0MDAwMDAwMDAzOAorOjEwMTI3MDAwMDEyMDAwMDgwMDAwMDAwMDAxMjAwMDBDMDAwMDAwMDAxOAorOjEwMTI4MDAwMDEyMDAwMTAwMDAwMDAwMDAxMjAwMDE0MDAwMDAwMDBGOAorOjEwMTI5MDAwMDIyMDAwMjAwMDAwMDAwMTAyMjAwMDI0MDAwMDAwMDJDMworOjEwMTJBMDAwMDIyMDAwMjgwMDAwMDAwMzAyMjAwMDJDMDAwMDAwMDBBMworOjEwMTJCMDAwMDIyMDAwMzAwMDAwMDAwNDAyMjAwMDM0MDAwMDAwMDE4MQorOjEwMTJDMDAwMDIyMDAwMzgwMDAwMDAwMDAyMjAwMDNDMDAwMDAwMDE2NQorOjEwMTJEMDAwMDIyMDAwNDAwMDAwMDAwNDAyMjAwMDQ0MDAwMDAwMDA0MgorOjEwMTJFMDAwMDIyMDAwNDgwMDAwMDAwMTAyMjAwMDRDMDAwMDAwMDMyMgorOjEwMTJGMDAwMDIyMDAwNTAwMDAwMDAwMDAyMjAwMDU0MDAwMDAwMDEwNQorOjEwMTMwMDAwMDIyMDAwNTgwMDAwMDAwNDAyMjAwMDVDMDAwMDAwMDBFMQorOjEwMTMxMDAwMDIyMDAwNjAwMDAwMDAwMTAyMjAwMDY0MDAwMDAwMDNDMQorOjEwMTMyMDAwMDIyMDAwNjgwMDAwMDAwMDAyMjAwMDZDMDAwMDAwMDFBNAorOjEwMTMzMDAwMDIyMDAwNzAwMDAwMDAwNDAyMjAwMDc0MDAwMDAwMDA4MQorOjEwMTM0MDAwMDIyMDAwNzgwMDAwMDAwNDAyMjAwMDdDMDAwMDAwMDM1RQorOjEwMTM1MDAwMDYyMDAwODAwMDAwMDAwMjAyMjAwMEE0MDAwMDNGRkZFMQorOjEwMTM2MDAwMDIyMDAwQTgwMDAwMDNGRjAyMjAwMjI0MDAwMDAwMDA2OQorOjEwMTM3MDAwMDIyMDAyMzQwMDAwMDAwMDAyMjAwMjRDMDAwMDAwMDBBNQorOjEwMTM4MDAwMDIyMDAyRTQwMDAwRkZGRjA2MjAyMDAwMDAwMDA4MDAwOQorOjEwMTM5MDAwMDIyMzhCQzAwMDAwMDAwMTAyMjM4MDAwMDAwMDAwMTAyNworOjEwMTNBMDAwMDIyMzgwNDAwMDAwMDAxMjAyMjM4MDgwMDAwMDAwMzBGMQorOjEwMTNCMDAwMDIyMzgwQzAwMDAwMDAwRTAyMjM4M0MwMDAwMDAxRjQ1RAorOjEwMTNDMDAwMDYyMjUwMDAwMDAwMDA0MjA2MjIxMDIwMDAwMDAwQzg0MworOjEwMTNEMDAwMDYyMjEwMDAwMDAwMDAwMjA2MjIyMDAwMDAwMDAwQzBDQgorOjEwMTNFMDAwMDYyMjI1QzAwMDAwMDI0MDA0MjIyRUM4MDAwODAyQUREQgorOjEwMTNGMDAwMDIyMzA4MDAwMTNGRkZGRjA0MjMwQzAwMDAxMDAyQjU4OAorOjEwMTQwMDAwMDIyMzA4MDAwMDAwMDAwMDA0MjMwQzQwMDAxMDAyQzU2NQorOjEwMTQxMDAwMDYyMjMwNDAwMDAwMDBBMDA2MjIzNTQwMDAwMDAwMTBFNworOjEwMTQyMDAwMDYyMjM2QzAwMDAwMDAzMDA2MjI0MDAwMDAwMDAyMDAwNAorOjEwMTQzMDAwMDYyMjM1QzAwMDAwMDAyMDA2MjIzODQwMDAwMDAwMzA5RgorOjEwMTQ0MDAwMDYyMjMwMDAwMDAwMDAwODAyMjI1MTE4MDAwMDAwMDBBRgorOjEwMTQ1MDAwMDYyMjIzMDAwMDAwMDAwRTA2MjIyNDEwMDAwMDAwMzBBNworOjEwMTQ2MDAwMDYyMjMyQzAwMDAwMDBBMDA2MjIzNTgwMDAwMDAwMTBENQorOjEwMTQ3MDAwMDYyMjM3ODAwMDAwMDAzMDA2MjI0ODAwMDAwMDAyMDBFQgorOjEwMTQ4MDAwMDYyMjM2NDAwMDAwMDAyMDA2MjIzOTAwMDAwMDAwMzAwRAorOjEwMTQ5MDAwMDYyMjMwMjAwMDAwMDAwODAyMjI1MTFDMDAwMDAwMDAzQgorOjEwMTRBMDAwMDYyMjIzMzgwMDAwMDAwRTA2MjIyNEQwMDAwMDAwMzA1RgorOjEwMTRCMDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDJCOQorOjEwMTRDMDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDQ3QgorOjEwMTREMDAwMDIxNzAwNDQwMDAwMDAwODAyMTcwMDQ4MDAwMDAwMDI0NAorOjEwMTRFMDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTAwRQorOjEwMTRGMDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxNDAwMDBFMgorOjEwMTUwMDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODBEQgorOjEwMTUxMDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODBDNAorOjEwMTUyMDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDBDNAorOjEwMTUzMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDRDMgorOjEwMTU0MDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDJFRAorOjEwMTU1MDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDE0NAorOjEwMTU2MDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDE5NQorOjEwMTU3MDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDE1RAorOjEwMTU4MDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDEwRAorOjEwMTU5MDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUM1MgorOjEwMTVBMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDg2MQorOjEwMTVCMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTBGMworOjEwMTVDMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDEwNgorOjEwMTVEMDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDE3OQorOjEwMTVFMDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDEyRAorOjEwMTVGMDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDBBRgorOjEwMTYwMDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDA2MAorOjEwMTYxMDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDIzOAorOjEwMTYyMDAwMDIxNjYwMDgwMDAwMDYxNDAyMTY2MDBDMDAwMDA2MDA5NgorOjEwMTYzMDAwMDIxNjYwMTAwMDAwMDYwNDAyMTY2MDFDMDAwMEZGRkY4NgorOjEwMTY0MDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkY2QQorOjEwMTY1MDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjAxQworOjEwMTY2MDAwMDIxNjYwM0MwMDAwMDAyMDAyMTY2MDQwMDAwMDAwMzRCQQorOjEwMTY3MDAwMDIxNjYwNDQwMDAwMDAzNTAyMTY2MDQ4MDAwMDAwMjM5NgorOjEwMTY4MDAwMDIxNjYwNEMwMDAwMDAyNDAyMTY2MDUwMDAwMDAwMjU4NQorOjEwMTY5MDAwMDIxNjYwNTQwMDAwMDAyNjAyMTY2MDU4MDAwMDAwMjc2MQorOjEwMTZBMDAwMDIxNjYwNUMwMDAwMDAyOTAyMTY2MDYwMDAwMDAwMkEzQgorOjEwMTZCMDAwMDIxNjYwNjQwMDAwMDAyQjAyMTY2MDY4MDAwMDAwMkMxNworOjEwMTZDMDAwMDIxNjYwNkMwMDAwMDAyRDA2MTY2MDcwMDAwMDAwNTJDQgorOjEwMTZEMDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUY4MAorOjEwMTZFMDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0Y0RgorOjEwMTZGMDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEY1RgorOjEwMTcwMDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDA1MworOjEwMTcxMDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDAzMworOjEwMTcyMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDAxMworOjEwMTczMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDBGMworOjEwMTc0MDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDBEMworOjEwMTc1MDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDBCMworOjEwMTc2MDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDA5MworOjEwMTc3MDAwMDIxNjY0QkMwMDAwMDAwMTBDMTY2MDAwMDAwMDAzRThDMworOjEwMTc4MDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEE0RAorOjEwMTc5MDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDU4QQorOjEwMTdBMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDU2NgorOjEwMTdCMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDREMworOjEwMTdDMDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDQzRAorOjEwMTdEMDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQxRAorOjEwMTdFMDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDRGRAorOjEwMTdGMDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDRCRAorOjEwMTgwMDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0Q4QgorOjEwMTgxMDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUM0OQorOjEwMTgyMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDU5NAorOjEwMTgzMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDA1NworOjEwMTg0MDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDQ0MgorOjEwMTg1MDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDRGQworOjEwMTg2MDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDUwOAorOjEwMTg3MDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDVFOAorOjEwMTg4MDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDg4QQorOjEwMTg5MDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDdBRAorOjEwMThBMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjA3OAorOjEwMThCMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDE3NworOjEwMThDMDAwMDYxNjgxNDgwMDAwMDAwNDAyMTY4ODM4MDEwMTAxMDE1MworOjEwMThEMDAwMDYxNjgxNTgwMDAwMDAwNDAyMTY4ODNDMDEwMTAxMDEyRgorOjEwMThFMDAwMDYxNjgxNjgwMDAwMDAwMzAyMTY4MTc0MDAwMDAwMDFFMgorOjEwMThGMDAwMDIxNjg4NDAwMTAxMDEwMTAyMTY4MTc4MDAwMDAwMDFGMgorOjEwMTkwMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFBNworOjEwMTkxMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDFDMQorOjEwMTkyMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDQ2QworOjEwMTkzMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDI0QgorOjEwMTk0MDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDU0QworOjEwMTk1MDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDUwRgorOjEwMTk2MDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDE0OAorOjEwMTk3MDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDZEMworOjEwMTk4MDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDFCOQorOjEwMTk5MDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDExQQorOjEwMTlBMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDE4NworOjEwMTlCMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDEwOQorOjEwMTlDMDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDE0RgorOjEwMTlEMDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDEyRgorOjEwMTlFMDAwMDIxNjg4MjAwMTAxMDEwMTAyMTY4MUQ4MDAwMDAwMDFDMQorOjEwMTlGMDAwMDIxNjgxREMwMDAwMDAwMTAyMTY4MUUwMDAwMDAwMDFGNworOjEwMUEwMDAwMDIxNjgxRTQwMDAwMDAwMTAyMTY4ODI0MDEwMTAxMDE5MAorOjEwMUExMDAwMDIxNjgxRTgwMDAwMDAwMTAyMTY4MUVDMDAwMDAwMDFCRQorOjEwMUEyMDAwMDIxNjgxRjAwMDAwMDAwMTAyMTY4ODI4MDEwMTAxMDE2MAorOjEwMUEzMDAwMDIxNjgyNDBGRkZGMDAzRjA2MTY4MjQ0MDAwMDAwMDJBQgorOjEwMUE0MDAwMDIxNjgyNENGRkZGMDAzRjAyMTY4MjUwMDAwMDAxMDA4OAorOjEwMUE1MDAwMDIxNjgyNTQwMDAwMDEwMDA2MTY4MjU4MDAwMDAwMDI5RgorOjEwMUE2MDAwMDIxNjgyNjAwMDAwMDBDMDAyMTY4MjY0MDAwMDAwQzBGRQorOjEwMUE3MDAwMDIxNjgyNjgwMDAwMUUwMDAyMTY4MjZDMDAwMDFFMDAyMgorOjEwMUE4MDAwMDIxNjgyNzAwMDAwNDAwMDAyMTY4Mjc0MDAwMDQwMDBCRQorOjEwMUE5MDAwMDIxNjgyNzgwMDAwODAwMDAyMTY4MjdDMDAwMDgwMDAxRQorOjEwMUFBMDAwMDIxNjgyODAwMDAwMjAwMDAyMTY4Mjg0MDAwMDIwMDBCRQorOjEwMUFCMDAwMDYxNjgyODgwMDAwMDAwNzAyMTY4MkE0MDAwMDAwMDFCQQorOjEwMUFDMDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDgyNQorOjEwMUFEMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA5RgorOjEwMUFFMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc4NworOjEwMUFGMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDAxQworOjEwMUIwMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4RkZGRjAxRkY3QgorOjEwMUIxMDAwMDIxNjgyMTRGRkZGMDFGRjAyMTY4MjNDMDAwMDAwMTMzMAorOjEwMUIyMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDAxNAorOjEwMUIzMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDI2MgorOjEwMUI0MDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDdCNgorOjEwMUI1MDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDg4OQorOjEwMUI2MDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDhBNworOjEwMUI3MDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDBDMAorOjEwMUI4MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkZENAorOjEwMUI5MDAwMDIxNjgyMjAwMDAwMDAwNzAyMTY4MjFDMDAwMDAwMDdDNworOjEwMUJBMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkZCOQorOjEwMUJCMDAwMDIxNjgyMzAwMDAwMDAwMDAyMTY4MjJDRkZGRkZGRkY5OQorOjEwMUJDMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDE3QgorOjEwMUJEMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDE4QgorOjEwMUJFMDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDBGQgorOjEwMUJGMDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDA0RAorOjEwMUMwMDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDE3MgorOjEwMUMxMDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDAzOAorOjEwMUMyMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDE0QQorOjEwMUMzMDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDAxMAorOjEwMUM0MDAwMDIwMjAwNTgwMDAwMDAzMjAyMDIwMEEwMDMxNTAwMjAyQQorOjEwMUM1MDAwMDIwMjAwQTQwMzE1MDAyMDAyMDIwMEE4MDEwMDAwMzBDNworOjEwMUM2MDAwMDIwMjAwQUMwODEwMDAwMDAyMDIwMEIwMDAwMDAwMzNDNQorOjEwMUM3MDAwMDIwMjAwQjQwMDAwMDAzMDAyMDIwMEI4MDAwMDAwMzE4RgorOjEwMUM4MDAwMDIwMjAwQkMwMDAwMDAwMzAyMDIwMEMwMDAwMDAwMDZDNworOjEwMUM5MDAwMDIwMjAwQzQwMDAwMDAwMzAyMDIwMEM4MDAwMDAwMDNBQQorOjEwMUNBMDAwMDIwMjAwQ0MwMDAwMDAwMjAyMDIwMEQwMDAwMDAwMDA4RQorOjEwMUNCMDAwMDIwMjAwRDQwMDAwMDAwMjAyMDIwMERDMDAwMDAwMDA2QQorOjEwMUNDMDAwMDIwMjAwRTAwMDAwMDAwNjAyMDIwMEU0MDAwMDAwMDQzRQorOjEwMUNEMDAwMDIwMjAwRTgwMDAwMDAwMjAyMDIwMEVDMDAwMDAwMDIyNAorOjEwMUNFMDAwMDIwMjAwRjAwMDAwMDAwMTAyMDIwMEZDMDAwMDAwMDZGOQorOjEwMUNGMDAwMDIwMjAxMjAwMDAwMDAwMDAyMDIwMTM0MDAwMDAwMDI4NAorOjEwMUQwMDAwMDIwMjAxQjAwMDAwMDAwMTAyMDIwMjBDMDAwMDAwMDEwQQorOjEwMUQxMDAwMDIwMjAyMTQwMDAwMDAwMTAyMDIwMjE4MDAwMDAwMDI4OAorOjEwMUQyMDAwMDIwMjA0MDQwMDAwMDAwMTAyMDIwNDBDMDAwMDAwNDA1MgorOjEwMUQzMDAwMDIwMjA0MTAwMDAwMDA0MDAyMDIwNDFDMDAwMDAwMDQyMworOjEwMUQ0MDAwMDIwMjA0MjAwMDAwMDAyMDAyMDIwNDI0MDAwMDAwMDIxRAorOjEwMUQ1MDAwMDIwMjA0MjgwMDAwMDAxRjA2MDIwNTAwMDAwMDAwMTIxNQorOjEwMUQ2MDAwMDQwMjA0ODAwMDFGMDJENTAyMDIwMDYwMDAwMDAwMEY4MAorOjEwMUQ3MDAwMDIwMjAwNjQwMDAwMDAwNzAyMDIwMDY4MDAwMDAwMEI3RAorOjEwMUQ4MDAwMDIwMjAwNkMwMDAwMDAwRTA2MDIwMDcwMDAwMDAwMDQ1OQorOjEwMUQ5MDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDEzRQorOjEwMURBMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDExNQorOjEwMURCMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDFGNQorOjEwMURDMDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDFENQorOjEwMUREMDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDFCNQorOjEwMURFMDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDE5NQorOjEwMURGMDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDE3NQorOjEwMUUwMDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDE1NAorOjEwMUUxMDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDEzNAorOjEwMUUyMDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDExNAorOjEwMUUzMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzg3OAorOjEwMUU0MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBBQQorOjEwMUU1MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJENgorOjEwMUU2MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZBNworOjEwMUU3MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTBDMDAwMDAwQzg5OQorOjEwMUU4MDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDA2MgorOjEwMUU5MDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI4RQorOjEwMUVBMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkY1RgorOjEwMUVCMDAwMDIwMjAxRjAwMDAwMDBGRjA3MjgwNDAwMDBCNTAwMDA0NgorOjEwMUVDMDAwMDgyODA3NjgwMDEzMDJGNDA3MkMwMDAwMzVENTAwMDAyRAorOjEwMUVEMDAwMDcyQzgwMDAzQTNFMEQ3NjA3MkQwMDAwM0I0NzFDMDY3QworOjEwMUVFMDAwMDcyRDgwMDAyMkJDMkFEODA4MkRDNzcwNDcxMjAyRjZBMQorOjEwMUVGMDAwMDEyODAwMDAwMDAwMDAwMDAxMjgwMDA0MDAwMDAwMDA4QworOjEwMUYwMDAwMDEyODAwMDgwMDAwMDAwMDAxMjgwMDBDMDAwMDAwMDA2QgorOjEwMUYxMDAwMDEyODAwMTAwMDAwMDAwMDAxMjgwMDE0MDAwMDAwMDA0QgorOjEwMUYyMDAwMDIyODAwMjAwMDAwMDAwMTAyMjgwMDI0MDAwMDAwMDIxNgorOjEwMUYzMDAwMDIyODAwMjgwMDAwMDAwMzAyMjgwMDJDMDAwMDAwMDBGNgorOjEwMUY0MDAwMDIyODAwMzAwMDAwMDAwNDAyMjgwMDM0MDAwMDAwMDFENAorOjEwMUY1MDAwMDIyODAwMzgwMDAwMDAwMDAyMjgwMDNDMDAwMDAwMDFCOAorOjEwMUY2MDAwMDIyODAwNDAwMDAwMDAwNDAyMjgwMDQ0MDAwMDAwMDA5NQorOjEwMUY3MDAwMDIyODAwNDgwMDAwMDAwMTAyMjgwMDRDMDAwMDAwMDM3NQorOjEwMUY4MDAwMDIyODAwNTAwMDAwMDAwMDAyMjgwMDU0MDAwMDAwMDE1OAorOjEwMUY5MDAwMDIyODAwNTgwMDAwMDAwNDAyMjgwMDVDMDAwMDAwMDAzNQorOjEwMUZBMDAwMDIyODAwNjAwMDAwMDAwMTAyMjgwMDY0MDAwMDAwMDMxNQorOjEwMUZCMDAwMDIyODAwNjgwMDAwMDAwMDAyMjgwMDZDMDAwMDAwMDFGOAorOjEwMUZDMDAwMDIyODAwNzAwMDAwMDAwNDAyMjgwMDc0MDAwMDAwMDBENQorOjEwMUZEMDAwMDIyODAwNzgwMDAwMDAwNDAyMjgwMDdDMDAwMDAwMDNCMgorOjEwMUZFMDAwMDYyODAwODAwMDAwMDAwMjAyMjgwMEE0MDAwMDNGRkYzNQorOjEwMUZGMDAwMDIyODAwQTgwMDAwMDNGRjAyMjgwMjI0MDAwMDAwMDBCRAorOjEwMjAwMDAwMDIyODAyMzQwMDAwMDAwMDAyMjgwMjRDMDAwMDAwMDBGOAorOjEwMjAxMDAwMDIyODAyRTQwMDAwRkZGRjA2MjgyMDAwMDAwMDA4MDA1QworOjEwMjAyMDAwMDIyQjhCQzAwMDAwMDAwMTAyMkI4MDAwMDAwMDAwMDA4QQorOjEwMjAzMDAwMDIyQjgwNDAwMDAwMDAxODAyMkI4MDgwMDAwMDAwMEM2MgorOjEwMjA0MDAwMDIyQjgwQzAwMDAwMDA2NjBDMkI4MzAwMDAwN0ExMjAzQgorOjEwMjA1MDAwMEEyQjgzMDAwMDAwMDEzODBCMkI4MzAwMDAwMDEzODgzQgorOjEwMjA2MDAwMDIyQjgzQzAwMDAwMDFGNDBDMkI4MzQwMDAwMDAxRjQxQworOjEwMjA3MDAwMEEyQjgzNDAwMDAwMDAwMDBCMkI4MzQwMDAwMDAwMDU2QQorOjEwMjA4MDAwMEEyQjgzODAwMDA0QzRCNDBDMkI4MzgwMURDRDY1MDAxMworOjEwMjA5MDAwMEIyQjgzODAwMDRDNEI0MDA2MkEzQzQwMDAwMDAwMDQ4MAorOjEwMjBBMDAwMDQyQTNDNTAwMDAyMDJGODA2MkEzMDAwMDAwMDAwNDhEMgorOjEwMjBCMDAwMDYyQTEwMjAwMDAwMDBDODA2MkExMDAwMDAwMDAwMDJCNgorOjEwMjBDMDAwMDYyQTMxMjgwMDAwMDA4RTAyMkEzMzY4MDAwMDAwMDAzMgorOjEwMjBEMDAwMDQyQTMzNzAwMDAyMDJGQTA0MkEzQTcwMDAwNDAyRkM1NworOjEwMjBFMDAwMDQyQTNEMDAwMDAyMDMwMDA0MkExNTAwMDAwMjAzMDIzNgorOjEwMjBGMDAwMDYyQTE1MDgwMDAwMDEwMDAyMkExOTcwMDAwMDAwMDBERAorOjEwMjEwMDAwMDIyQTE5NzgwMDAwMDAwMDA0MkExOTYwMDAwMjAzMDQ2MgorOjEwMjExMDAwMDYyQTRBQzAwMDAwMDAwMjA2MkE0QjAwMDAwMDAwMDQwNAorOjEwMjEyMDAwMDQyQTFGNDgwMDAyMDMwNjAyMkIwODAwMDAwMDAwMDBEQQorOjEwMjEzMDAwMDQyQjBDMDAwMDEwMDMwODAyMkIwODAwMDEwMDAwMDAxMworOjEwMjE0MDAwMDQyQjBDNDAwMDA4MDMxODAyMkIwODAwMDIwMDAwMDBCQQorOjEwMjE1MDAwMDQyQjBDNjAwMDA4MDMyMDA2MkEzQTgwMDAwMDAwMTRCQgorOjEwMjE2MDAwMDYyQTNCMjAwMDAwMDAyNDA2MkExNDAwMDAwMDAwMEE3MgorOjEwMjE3MDAwMDYyQTE0NTAwMDAwMDAwNjA2MkEzMzc4MDAwMDAwRDgxMgorOjEwMjE4MDAwMDIyQTNBMzgwMDAwMDAwMDA0MkEzQzU4MDAwMjAzMjhDMgorOjEwMjE5MDAwMDQyQTNDNjgwMDEwMDMyQTA2MkE1MDIwMDAwMDAwMDI4RQorOjEwMjFBMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDJGQgorOjEwMjFCMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MDQwMDAwMDAwMDBEMQorOjEwMjFDMDAwMDYyQTUwNDgwMDAwMDAwRTAyMkE1MEI4MDAwMDAwMDEwNAorOjEwMjFEMDAwMDQyQTRBQzgwMDAyMDMzQTA2MkE0QjEwMDAwMDAwNDJCMworOjEwMjFFMDAwMDYyQTREMjAwMDAwMDAwNDA2MkEzQUQwMDAwMDAwMTQwMAorOjEwMjFGMDAwMDYyQTNCQjAwMDAwMDAyNDA2MkExNDI4MDAwMDAwMEEyQQorOjEwMjIwMDAwMDYyQTE0NjgwMDAwMDAwNjA2MkEzNkQ4MDAwMDAwRDgwNgorOjEwMjIxMDAwMDIyQTNBM0MwMDAwMDAwMDA0MkEzQzYwMDAwMjAzM0MxMQorOjEwMjIyMDAwMDQyQTNDQTgwMDEwMDMzRTA2MkE1MDI4MDAwMDAwMDJBMQorOjEwMjIzMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDI1QQorOjEwMjI0MDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MDQ0MDAwMDAwMDAzNAorOjEwMjI1MDAwMDYyQTUwODAwMDAwMDAwRTAyMkE1MEJDMDAwMDAwMDEzNworOjEwMjI2MDAwMDQyQTRBRDAwMDAyMDM0RTA2MkE0QzE4MDAwMDAwNDJGRAorOjEwMjI3MDAwMDYyQTREMzAwMDAwMDAwNDAyMTAxMDA4MDAwMDAwMDE4MgorOjEwMjI4MDAwMDIxMDEwMTAwMDAwMDI2NDAyMTAxMDAwMDAwM0QwMDBDMQorOjEwMjI5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDAzNTA1NQorOjEwMjJBMDAwMDkxMDExMDAwMDIwMDU1MDA2MTAxMTgwMDAwMDAwMDJFNgorOjEwMjJCMDAwMDkxMDExODgwMDA2MDU3MDA2MTAxMUEwMDAwMDAwMTgxMgorOjEwMjJDMDAwMDIxMDEwMTAwMDAwMDAwMDA2MTAyNDAwMDAwMDAwRTBDMgorOjEwMjJEMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDE1RAorOjEwMjJFMDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDFDNAorOjEwMjJGMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA1NzZDRQorOjEwMjMwMDAwMDkxMDNDMjAwMDA1MDU3QjA5MTAzODAwMDAwNTA1ODBGOAorOjEwMjMxMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkY1RgorOjEwMjMyMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEFBNQorOjEwMjMzMDAwMDIxMDQwNTgwMDAwMDAwMDA2MTA4MDY4MDAwMDAwMDRGMQorOjEwMjM0MDAwMDIxMDgwMDAwMDAwMTA4MDA2MTA4MDI4MDAwMDAwMDJBQgorOjEwMjM1MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MDQwMDAwMEZGRkZEMworOjEwMjM2MDAwMDIxMDgwNDQwMDAwRkZGRjAyMTA4MDUwMDAwMDAwMDBCNworOjEwMjM3MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIxMQorOjEwMjM4MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA1QQorOjEwMjM5MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZDMQorOjEwMjNBMDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODAyOAorOjEwMjNCMDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE0MgorOjEwMjNDMDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEFGNQorOjEwMjNEMDAwMDIxMDgwMDQwMDAwMTA4MDA2MTA4MDMwMDAwMDAwMDIwRgorOjEwMjNFMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MDQ4MDAwMEZGRkYzNworOjEwMjNGMDAwMDIxMDgwNEMwMDAwRkZGRjAyMTA4MDU0MDAwMDAwMDAxQgorOjEwMjQwMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3NAorOjEwMjQxMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBDMQorOjEwMjQyMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYyQQorOjEwMjQzMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA4QgorOjEwMjQ0MDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFGOAorOjEwMjQ1MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEExMgorOjEwMjQ2MDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTBBNQorOjEwMjQ3MDAwMDIxMjA1MjAwMDAwMDAwMjAyMTIwNDk0RkZGRkZGRkY3OQorOjEwMjQ4MDAwMDIxMjA0OThGRkZGRkZGRjAyMTIwNDlDRkZGRkZGRkZGMAorOjEwMjQ5MDAwMDIxMjA0QTBGRkZGRkZGRjAyMTIwNEE0RkZGRkZGRkZEMAorOjEwMjRBMDAwMDIxMjA0QThGRkZGRkZGRjAyMTIwNEFDRkZGRkZGRkZCMAorOjEwMjRCMDAwMDIxMjA0QjBGRkZGRkZGRjAyMTIwNEI4RkZGRkZGRkY4QworOjEwMjRDMDAwMDIxMjA0QkNGRkZGRkZGRjAyMTIwNEMwRkZGRkZGRkY2OAorOjEwMjREMDAwMDIxMjA0QzRGRkZGRkZGRjAyMTIwNEM4RkZGRkZGRkY0OAorOjEwMjRFMDAwMDIxMjA0Q0NGRkZGRkZGRjAyMTIwNEQwRkZGRkZGRkYyOAorOjEwMjRGMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGOAorOjEwMjUwMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZENworOjEwMjUxMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCNworOjEwMjUyMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5NworOjEwMjUzMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3NgorOjEwMjU0MDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY1NQorOjEwMjU1MDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYzNQorOjEwMjU2MDAwMDIxMjA0RDRGRkZGMzMzMDAyMTIwNEQ4RkZGRjMzNDBCRAorOjEwMjU3MDAwMDIxMjA0QjRGMDAwMzAwMDAyMTIwMzkwMDAwMDAwMDhDMAorOjEwMjU4MDAwMDIxMjAzOUMwMDAwMDAwODA2MTIwM0EwMDAwMDAwMDJEMworOjEwMjU5MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0M0MDAwMDAwMDQ4NQorOjEwMjVBMDAwMDIxMjAzRDAwMDAwMDAwMDAyMTIwM0RDMDAwMDAwMDA1MQorOjEwMjVCMDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0ZEOQorOjEwMjVDMDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDgwNQorOjEwMjVEMDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDMyRgorOjEwMjVFMDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDNFMgorOjEwMjVGMDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDNFRgorOjEwMjYwMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDNENQorOjEwMjYxMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNBRQorOjEwMjYyMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDM5RQorOjEwMjYzMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDM3RQorOjEwMjY0MDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDM1RAorOjEwMjY1MDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDMzQworOjEwMjY2MDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDMxQworOjEwMjY3MDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDNGQworOjEwMjY4MDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDNEQworOjEwMjY5MDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDM5OAorOjEwMjZBMDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDk2QQorOjEwMjZCMDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODRFNAorOjEwMjZDMDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDZENQorOjEwMjZEMDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDYyMworOjEwMjZFMDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDYxMAorOjEwMjZGMDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODY2NworOjEwMjcwMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDZDRgorOjEwMjcxMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDZCNQorOjEwMjcyMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDY5NQorOjEwMjczMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDY3NQorOjEwMjc0MDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDY1NQorOjEwMjc1MDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDYzNQorOjEwMjc2MDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDYxNQorOjEwMjc3MDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDZGNQorOjEwMjc4MDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDZEMgorOjEwMjc5MDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZBOAorOjEwMjdBMDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDQ3MQorOjEwMjdCMDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDAzNworOjEwMjdDMDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMTY4NworOjEwMjdEMDAwMDIwMEEwNkNCRjVDMDAwMDAyMDBBMDcwRkZGNTFGRUZCQworOjEwMjdFMDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4NTAwMDAzRTA4OAorOjEwMjdGMDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDBGOQorOjEwMjgwMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDA3MAorOjEwMjgxMDAwMDYwMEEwOUMwMDAwMDAxNDAyMDBBMEVDNTU1NDAwMDAyQgorOjEwMjgyMDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTU4MgorOjEwMjgzMDAwMDIwMEEwRjgwMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDBCNworOjEwMjg0MDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTU0MAorOjEwMjg1MDAwMDIwMEExMDgwMDAwMDAwMDAyMDBBMjJDMDAwMDAwMDBGRAorOjEwMjg2MDAwMDYwMEEyMzAwMDAwMDAwMzAyMDBBMDYwMDAwMDAwMDc4NAorOjEwMjg3MDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUZEOQorOjEwMjg4MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4NTAwMDAzRTBBNQorOjEwMjg5MDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDAxNgorOjEwMjhBMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA4RQorOjEwMjhCMDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDA0OQorOjEwMjhDMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTVBMAorOjEwMjhEMDAwMDIwMEExOTgwMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDBENQorOjEwMjhFMDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTU2MAorOjEwMjhGMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBMjNDMDAwMDAwMDBBRAorOjEwMjkwMDAwMDYwMEEyNDAwMDAwMDAwMzAyMDBBMDY0MDAwMDAwMDdDRgorOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDAwMDAwMDA4OQorOjEwMjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMjk3MDAwMDAyRTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwOEQ1QQorOjEwMjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQwMDkyMDA5MjAwOTZDMAorOjEwMjlEMDAwMDA5NjAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwMjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMjlGMDAwMDAwMDAwMDAwMDlBMDBEQjAwREIwMEU5MDBFOTAwRjdCRQorOjEwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwMkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMkFEMDAwMDBGNzAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUwMTAzMDEwMzAxMEU5MAorOjEwMkIzMDAwMDEwRTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMkI4MDAwMDExOTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExQTAxNTJCNworOjEwMkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTIwMTc2MDAwMDAwMDAyQgorOjEwMkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMkMwMDAwMDAwMDAwMDAwMTc2MDFCNTAwMDAwMDAwMDAwMDAwMDA5NworOjEwMkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMkMzMDAwMDFCNTAxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMzU0QworOjEwMkM2MDAwMDIzNTAyMzgwMjM4MDIzQjAwMDAwMDAwMDAwMDAwMDA3QworOjEwMkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAyM0IwMjc2MDI3NjAyODA5NQorOjEwMkM5MDAwMDI4MDAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMkNCMDAwMDAwMDAwMDAwMjhBMDI4QjAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMkNFMDAwMDI4QjAyOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5RDAyQjI3MAorOjEwMkQxMDAwMDJCMjAyQjUwMkI1MDJCODAwMDAwMDAwMDAwMDAwMDBENworOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwMkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAyQjgwMkU2MDAwMDAwMDBGMQorOjEwMkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwMkQ2MDAwMDAwMDAwMDAwMkU2MDM2RDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwMkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwMkQ5MDAwMDM2RDAzNzQwMzc0MDM3ODAzNzgwMzdDMDAwMDAwMDA2MAorOjEwMkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3QzAzQkJENgorOjEwMkRDMDAwMDNCQjAzQzMwM0MzMDNDQjAwMDAwMDAwMDAwMDAwMDBFQgorOjEwMkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAzQ0IwNDFGMDQxRjA0MzE5QQorOjEwMkRGMDAwMDQzMTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMkUxMDAwMDAwMDAwMDAwNDQzMDQ0RDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMkU0MDAwMDQ0RDA0NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwMkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1MzA0NTZCMQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMkU5MDAwMDAwMDAwMDAwMDAwMDAwMDA0NTYwNDVCMDAwMDAwMDA3OQorOjEwMkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMkVDMDAwMDAwMDAwMDAwNDVCMDQ1QzA0NUMwNDZFMDQ2RTA0ODA3QgorOjEwMkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkVGMDAwMDQ4MDA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFRDA0RUVDRQorOjEwMkYyMDAwMDRFRTA1MDIwNTAyMDUxNjAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzA1QQorOjEwMkZCMDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzAzRQorOjEwMkZDMDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzBEMgorOjEwMkZEMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzA2NgorOjEwMkZFMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzBGQQorOjEwMkZGMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzA4RQorOjEwMzAwMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzAyMQorOjEwMzAxMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzBCNQorOjEwMzAyMDAwMDAxRjhFODAwMDIwOTM0MDAwMDAyMDAwMDAwMDQwMDAyMAorOjEwMzAzMDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDA1MAorOjEwMzA0MDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDAzRAorOjEwMzA1MDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDAyQworOjEwMzA2MDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDAxOQorOjEwMzA3MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDAwOAorOjEwMzA4MDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDBGNQorOjEwMzA5MDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDBFNAorOjEwMzBBMDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDBEMQorOjEwMzBCMDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDBDMAorOjEwMzBDMDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDBBRAorOjEwMzBEMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDA5QworOjEwMzBFMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDA4OQorOjEwMzBGMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDA3OAorOjEwMzEwMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDA2NAorOjEwMzExMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDA1MworOjEwMzEyMDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDA0MAorOjEwMzEzMDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDAyRgorOjEwMzE0MDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDAxQworOjEwMzE1MDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDAwQgorOjEwMzE2MDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDBGOAorOjEwMzE3MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDBFNworOjEwMzE4MDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDBENAorOjEwMzE5MDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDBDMworOjEwMzFBMDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDBCMAorOjEwMzFCMDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDA5RgorOjEwMzFDMDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDA4QworOjEwMzFEMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDA3QgorOjEwMzFFMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDA2OAorOjEwMzFGMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDA1NworOjEwMzIwMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDA0MworOjEwMzIxMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDAzMgorOjEwMzIyMDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDAxRgorOjEwMzIzMDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDAwRQorOjEwMzI0MDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDBGQgorOjEwMzI1MDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDBFQQorOjEwMzI2MDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDBENworOjEwMzI3MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDBDNgorOjEwMzI4MDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDBCMworOjEwMzI5MDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDBBMgorOjEwMzJBMDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDA4RgorOjEwMzJCMDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDA3RQorOjEwMzJDMDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDA2QgorOjEwMzJEMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDA1QQorOjEwMzJFMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDA0NworOjEwMzJGMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDAzNgorOjEwMzMwMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDAyMgorOjEwMzMxMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDAxMQorOjEwMzMyMDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDBGRQorOjEwMzMzMDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDBFRAorOjEwMzM0MDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDBEQQorOjEwMzM1MDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDBDOQorOjEwMzM2MDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDBCNgorOjEwMzM3MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDBBNQorOjEwMzM4MDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDA5MgorOjEwMzM5MDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDA4MQorOjEwMzNBMDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDA2RQorOjEwMzNCMDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDA1RAorOjEwMzNDMDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDA0QQorOjEwMzNEMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDAzOQorOjEwMzNFMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDAyNgorOjEwMzNGMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDAxNQorOjEwMzQwMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDAwMQorOjEwMzQxMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDBGMAorOjEwMzQyMDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDBERAorOjEwMzQzMDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDBDQworOjEwMzQ0MDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDBCOQorOjEwMzQ1MDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDBBOAorOjEwMzQ2MDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDA5NQorOjEwMzQ3MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDA4NAorOjEwMzQ4MDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDA3MQorOjEwMzQ5MDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDA2MAorOjEwMzRBMDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDA0RAorOjEwMzRCMDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDAzQworOjEwMzRDMDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDAyOQorOjEwMzREMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDAxOAorOjEwMzRFMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDAwNQorOjEwMzRGMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDBGNAorOjEwMzUwMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDBFMAorOjEwMzUxMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDBDRgorOjEwMzUyMDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDBCQworOjEwMzUzMDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDBBQgorOjEwMzU0MDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDA5OAorOjEwMzU1MDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDA4NworOjEwMzU2MDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDA3NAorOjEwMzU3MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDA2MworOjEwMzU4MDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDA1MAorOjEwMzU5MDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDAzRgorOjEwMzVBMDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDAyQworOjEwMzVCMDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDAxQgorOjEwMzVDMDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDAwOAorOjEwMzVEMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDBGNworOjEwMzVFMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDBFNAorOjEwMzVGMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDBEMworOjEwMzYwMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDBCRgorOjEwMzYxMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDBBRQorOjEwMzYyMDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDA5QgorOjEwMzYzMDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDA4QQorOjEwMzY0MDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDA3NworOjEwMzY1MDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDA2NgorOjEwMzY2MDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDA1MworOjEwMzY3MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDA0MgorOjEwMzY4MDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDAyRgorOjEwMzY5MDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDAxRQorOjEwMzZBMDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDAwQgorOjEwMzZCMDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDBGQQorOjEwMzZDMDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDBFNworOjEwMzZEMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDBENgorOjEwMzZFMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDBDMworOjEwMzZGMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDBCMgorOjEwMzcwMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDA5RQorOjEwMzcxMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDA4RAorOjEwMzcyMDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDA3QQorOjEwMzczMDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDA2OQorOjEwMzc0MDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDA1NgorOjEwMzc1MDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDA0NQorOjEwMzc2MDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDAzMgorOjEwMzc3MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDAyMQorOjEwMzc4MDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDAwRQorOjEwMzc5MDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDBGRAorOjEwMzdBMDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDBFQQorOjEwMzdCMDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDBEOQorOjEwMzdDMDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDBDNgorOjEwMzdEMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDBCNQorOjEwMzdFMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDBBMgorOjEwMzdGMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDA5MQorOjEwMzgwMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDA3RAorOjEwMzgxMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDA2QworOjEwMzgyMDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkY1OQorOjEwMzgzMDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAyNkYyNworOjEwMzg0MDAwMDAwMDE1MDAwMDAwMDAwMTAwMDAwMDAzMDBCRUJDMjBDNQorOjEwMzg1MDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAwMDAxRkZGRkZGRkZDRQorOjEwMzg2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2OAorOjEwMzg3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1OAorOjEwMzg4MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkY0MAorOjEwMzg5MDAwMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDA4RgorOjEwMzhBMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDMxRAorOjEwMzhCMDAwMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODA2RAorOjEwMzhDMDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODBBQworOjEwMzhEMDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODA4QworOjEwMzhFMDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODA3MAorOjEwMzhGMDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODA1MAorOjEwMzkwMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODAzMworOjEwMzkxMDAwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwMDAwMzczODAxMworOjEwMzkyMDAwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwMDAwM0Y2ODBGNworOjEwMzkzMDAwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwMDAwNDc5ODBENworOjEwMzk0MDAwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDAwRAorOjEwMzk1MDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDAxRgorOjEwMzk2MDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDBDRgorOjEwMzk3MDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDA3RgorOjEwMzk4MDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDAyRgorOjEwMzk5MDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDBERgorOjEwMzlBMDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwRERCMDA4RgorOjEwMzlCMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMTc0MDAwMDE1MDA4RgorOjEwMzlDMDAwMDAwMDE5MDAwMDAwMDAwMEZGRkZGRkZGNDAwMDAwMDBBMgorOjEwMzlEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNworOjEwMzlFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENworOjEwMzlGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNworOjEwM0EwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNgorOjEwM0ExMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNgorOjEwM0EyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NgorOjEwM0EzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NgorOjEwM0E0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDdGRjgzRgorOjEwM0E1MDAwMDAwMDdGRjgwMDAwMDUwOTAwMDAzNTAwRkZGRkZGRkZCMAorOjEwM0E2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NgorOjEwM0E3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAwMDAwMDAxMgorOjEwM0E4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzNgorOjEwM0E5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyNgorOjEwM0FBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAxNgorOjEwM0FCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwNgorOjEwM0FDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGNgorOjEwM0FEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNgorOjEwM0FFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENgorOjEwM0FGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDEwMDBGNgorOjEwM0IwMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDBEMQorOjEwM0IxMDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDBCOQorOjEwM0IyMDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDBBMQorOjEwM0IzMDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDA4NworOjEwM0I0MDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDA2RAorOjEwM0I1MDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDA1NQorOjEwM0I2MDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDAzRAorOjEwM0I3MDAwMDAwMUVFODAwMDAxRkYwMDAwMDA3RkY4MDAwMDdGRjhFOAorOjEwM0I4MDAwMDAwMDA0NDgwMDAwMTUwMDEwMDAwMDAwMDAwMDI4QURFRgorOjEwM0I5MDAwMDAwMDAwMDAwMDAxMDAwMTAwMEQwMjA1Q0NDQ0NDQzFFQQorOjEwM0JBMDAwRkZGRkZGRkZGRkZGRkZGRjcwNTgxMDNDMDAwMDAwMDAwOQorOjEwM0JCMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0MzOQorOjEwM0JDMDAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwNDAwMDAwMDA3OQorOjEwM0JEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNQorOjEwM0JFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENQorOjEwM0JGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNQorOjEwM0MwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNAorOjEwM0MxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNAorOjEwM0MyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NAorOjEwM0MzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NAorOjEwM0M0MDAwNDAwMDAwMDA0MDAwMDAwMDAwMEUwMUI3MDExNjAwRDY0MQorOjEwM0M1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OAorOjEwM0M2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OAorOjEwM0M3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OAorOjEwM0M4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOAorOjEwM0M5MDAwMDAxMDAwMDAwMDAwMDAwMDAwNzIwMUJCMDEyMzAwRjNDRgorOjEwM0NBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOAorOjEwM0NCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOAorOjEwM0NDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOAorOjEwM0NEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOAorOjEwM0NFMDAwMDAxMDAwMDAwMDAwMDAwMEZGRkZGRkYzMzE4RkZGRkYxNgorOjEwM0NGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwOAorOjEwM0QwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkY2OQorOjEwM0QxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNworOjEwM0QyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMworOjEwM0QzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNworOjEwM0Q0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MQorOjEwM0Q1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OQorOjEwM0Q2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBNAorOjEwM0Q3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NworOjEwM0Q4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5OAorOjEwM0Q5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NworOjEwM0RBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkZCMgorOjEwM0RCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NworOjEwM0RDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkY0NQorOjEwM0REMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNworOjEwM0RFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzE4RkZGRkZBNgorOjEwM0RGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNworOjEwM0UwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NworOjEwM0UxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNgorOjEwM0UyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMgorOjEwM0UzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNgorOjEwM0U0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MAorOjEwM0U1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OAorOjEwM0U2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMworOjEwM0U3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NgorOjEwM0U4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NworOjEwM0U5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NgorOjEwM0VBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkZCMgorOjEwM0VCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NgorOjEwM0VDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYyNAorOjEwM0VEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNgorOjEwM0VFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzFFRkZGRkY0NQorOjEwM0VGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNgorOjEwM0YwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NgorOjEwM0YxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNQorOjEwM0YyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMQorOjEwM0YzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNQorOjEwM0Y0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RgorOjEwM0Y1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NworOjEwM0Y2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMgorOjEwM0Y3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NQorOjEwM0Y4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NgorOjEwM0Y5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NQorOjEwM0ZBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDU2RkZGRkZCQworOjEwM0ZCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3OAorOjEwM0ZDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MgorOjEwM0ZEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNQorOjEwM0ZFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYyMworOjEwM0ZGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNQorOjEwNDAwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NQorOjEwNDAxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNAorOjEwNDAyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMAorOjEwNDAzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNAorOjEwNDA0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RQorOjEwNDA1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NgorOjEwNDA2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMQorOjEwNDA3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NAorOjEwNDA4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYzMQorOjEwNDA5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM5NworOjEwNDBBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkY1QgorOjEwNDBCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NworOjEwNDBDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MQorOjEwNDBEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNAorOjEwNDBFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYyNAorOjEwNDBGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNAorOjEwNDEwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkY0NQorOjEwNDExMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMworOjEwNDEyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZDRgorOjEwNDEzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDMworOjEwNDE0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RAorOjEwNDE1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NQorOjEwNDE2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMAorOjEwNDE3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MworOjEwNDE4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NAorOjEwNDE5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2MworOjEwNDFBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYxQgorOjEwNDFCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NgorOjEwNDFDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkY2MQorOjEwNDFEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMworOjEwNDFFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NworOjEwNDFGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNworOjEwNDIwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NgorOjEwNDIxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNgorOjEwNDIyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDIzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNgorOjEwNDI0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzNAorOjEwNDI1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENgorOjEwNDI2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMgorOjEwNDI3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNgorOjEwNDI4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRQorOjEwNDI5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NgorOjEwNDJBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNgorOjEwNDJCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NgorOjEwNDJDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NgorOjEwNDJEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NgorOjEwNDJFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NgorOjEwNDJGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNgorOjEwNDMwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NQorOjEwNDMxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNQorOjEwNDMyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NAorOjEwNDMzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNQorOjEwNDM0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMworOjEwNDM1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENQorOjEwNDM2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMQorOjEwNDM3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNQorOjEwNDM4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRAorOjEwNDM5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NQorOjEwNDNBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNQorOjEwNDNCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NQorOjEwNDNDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NQorOjEwNDNEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NQorOjEwNDNFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDNGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNQorOjEwNDQwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NAorOjEwNDQxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNAorOjEwNDQyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MworOjEwNDQzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNAorOjEwNDQ0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMgorOjEwNDQ1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENAorOjEwNDQ2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMAorOjEwNDQ3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNAorOjEwNDQ4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFQworOjEwNDQ5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NAorOjEwNDRBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNAorOjEwNDRCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NAorOjEwNDRDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NAorOjEwNDREMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NAorOjEwNDRFMDAwMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzA3QQorOjEwNDRGMDAwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzBERQorOjEwNDUwMDAwMDAwRjAyNDAwMDAxMDMzMDAwMEMwMDAwMDAwODAwQzA1MgorOjEwNDUxMDAwMDAwMjgxNDAwMDBCODE2ODAwMDIwMjIwMDAwMTAyNDA3RAorOjEwNDUyMDAwMDAwNzAyNTAwMDAyMDJDMDAwMEYwMDAwMDAwODAwRjA2NworOjEwNDUzMDAwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzA5RAorOjEwNDU0MDAwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDAwODAxMDAwMgorOjEwNDU1MDAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMDAwMTgyODBCRAorOjEwNDU2MDAwMDAwRTgyOTgwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjg2MworOjEwNDU3MDAwMDAwMjAwRTAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThBRAorOjEwNDU4MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDU5MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDVBMDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0M1QgorOjEwNDVCMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDA3QgorOjEwNDVDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDM2MAorOjEwNDVEMDAwOEE3QkQ4MTgxOEY2NzAyMEY4NDMwMTVGNjQ2MjYwQjhDRgorOjEwNDVFMDAwMENDNDU3ODE1ODgwOTk4MTIxOTg5MTgxMjE4NDkxNzhCOAorOjEwNDVGMDAwRkQ3MUEyMDhGNjEzMjFBMDE5QzI0MDMzMDQxOTE4NEUwOAorOjEwNDYwMDAwMEIyM0M0MEYwMkQ1OTg4ODMwMzA3Qzg3OEE1NTAzRDk5NAorOjEwNDYxMDAwMENBMkQ0NzFGRjQwRTM3NTUyOTg2MkFCMjUxMEVDRjUwMworOjEwNDYyMDAwNThFNDkxRjEwNjM0NzkyRTQ5NTRGRTQ2MDJGQTA3MUFFRAorOjEwNDYzMDAwREY1NzQ0RTUwQjI5NDBFODZDQThGODAzMzQ3OTYxQThGQQorOjEwNDY0MDAwRkM3OUE4QkYxRTJBNjIzN0Y3MDI1NDFFMDA1QkJCRDI1QQorOjEwNDY1MDAwNTM2MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwNDY2MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODU0RDU3NworOjEwNDY3MDAwQjVGMDNFNzNDRTlDOTk0OTY2MjYyNzIxNEYxRTYxMTJFNAorOjEwNDY4MDAwMjAwMjg2MzhCQzAyMjhCNzRFNDgwODUwNjkxRDZDNTU3OAorOjEwNDY5MDAwQjQ2ODA3MDgxMEYyOTZBMjk3RDZGNkNCMDQ0MjhDODAzNQorOjEwNDZBMDAwMzZGOEZCNDA4QjNBQkMyQTJBNkFDMDQ4NTEwMTg3QTdEQQorOjEwNDZCMDAwRThGNUY2MDZBQjk2NTZFQjhENjg1MTkxNDdFNDU2QTVBMgorOjEwNDZDMDAwRkY2REFGRkY1QTZCRUY5RDM5NjczMjAxRUNENzdCRkY2RgorOjEwNDZEMDAwRkJERkVGOEY5RkRGNjE5RkJEQ0ZERTZCQUZENzVFNkJFMAorOjEwNDZFMDAwRURCNUY3RDg2RDFFQTY1RkNERDhEN0Y4MDdDRjdBMUJFQQorOjEwNDZGMDAwNjMyQzIzRjY3Q0M0Q0U3RTE4NzQzMzU2QjBDRUI3QzI3QQorOjEwNDcwMDAwOUQwRUVGNzdFNTZENEZGNjMxOTZCMzdCQUQzMjA1REU0QQorOjEwNDcxMDAwRTdBQzZGNTNFNjE1QzZCRTBGQjhBMDcyM0NCQ0RGQjU2MAorOjEwNDcyMDAwNTYyOTgxRjczOTZGQjQyOTczRjFFOUIwQjE0RTY4Q0ZEQQorOjEwNDczMDAwMzQ1RjBBQzMyNzBCMzA5NkM5RDg5MDg5NENGQzA1REMzRQorOjEwNDc0MDAwMzlDNThDMERDNDdGNDIxN0U3OEM2NEM2QzYzMTk2Qjc1NQorOjEwNDc1MDAwRDIxNjA5MkJGMDNFNTQzOTkzNzkxOURCMDQ3MEU1QTQ4NQorOjEwNDc2MDAwQzE3N0VBNUZGNkQ5QjE2RDgzNzZCQ0NCQzk5ODUzNzMzNAorOjEwNDc3MDAwNkE1RkU3MzM5NjNCOUJEOTE4M0MwNzJGRTNFRkYxRUZENQorOjEwNDc4MDAwNkJGODNGMkY2QzJEMEY2MUE2NzIxRTk2M0RFOTI3NjBENgorOjEwNDc5MDAwNDhFNjYxOUVBRkQ1NDRGMDc2RUJDMTUxQjE3OUNBRTdFNgorOjEwNDdBMDAwRkE0NjVGQTY1QkVCRkQ1RTNFOTdEQ0Y2ODk3RTE3N0NFMgorOjEwNDdCMDAwRkQxOEI2MUJDQTU4MjRBRTdENkQ1OEQ3RDgxNUYwMDQyNQorOjEwNDdDMDAwMDRCNDE3RjZGRTdFMjYyQjI5NDYzQURDQ0FBNkQwQjNERgorOjEwNDdEMDAwNUVGM0REODg3OEE5M0Y2MjY3NjE4MEJCQkVFMTQ0Mzk0MgorOjEwNDdFMDAwOTZEOTJFODUwRENCRUJGREZEMjg2NjI3N0E5NDMwNDVCMgorOjEwNDdGMDAwM0I4MUYzRjUzMjJGQ0U0RkFERjEzRDU0MEU3ODZFNDgyQworOjEwNDgwMDAwMEU5NDYxQkYwRjI3ODdFODI5REY2N0NGOUI5RTFEMDJBQgorOjEwNDgxMDAwNzg0QTE3MTU4NjE5RDBGRERDM0FDNUVGODBDRjNGNTY5MAorOjEwNDgyMDAwMjJCQTFERTg1MUZERkQ4NkEyNjlEMEVFNkQzRDc0MERFMgorOjEwNDgzMDAwN0VCNzQ4OERCNkQ4NjFGQ0RBMzkwRDA1NDAwMUQ2QTk5RQorOjEwNDg0MDAwNzNGRTE5QkNBQkU0NTMwREU4MzY5OEIxNzA0QTFBRDIyNgorOjEwNDg1MDAwODVCMUUzMjYzQUUwREZGMUUxQTJBQ0Y2OERDNzhCM0RFRQorOjEwNDg2MDAwMkJCMDFGMEQ3Qjg5RDA3Q0U1RkJCQ0YwOTEyMTQzRTM4RAorOjEwNDg3MDAwQzY2M0M1MDQwRjQzMzgxOUVCNTIxMkQxNzVGMDhCMjU2RQorOjEwNDg4MDAwNDdCNEEyQkVDN0ZCQ0Y5RjQ3OThDQjIxRTAwRUU5NUJBMAorOjEwNDg5MDAwRUJEMTIzQ0IwMUJGQTUyRkQ4QTM1NzAzM0Q2QTM3MjhGRgorOjEwNDhBMDAwMTEwNzk0NkQ3QjVEMDFBNENGOTlDRDUwMDZCQTQ0M0RBQworOjEwNDhCMDAwM0FCNTNGNkQzOEE5NUNFRkU4QkNGNzJBMjg3N0JGQTA2RQorOjEwNDhDMDAwQjI4REQ4RURGMDI0MUJDQUREMDkwMTNCMUIwNzY1QzA4MgorOjEwNDhEMDAwQzc0MjE3MkZENjZFRDg3NzJCRjY1N0I5Q0JDMTVDNDg5NQorOjEwNDhFMDAwQ0YxNzE3N0RGNzJBMjgyRjAyN0VDMzI2QjU1QjlBRjRDRgorOjEwNDhGMDAwRkU1MDVFMUM1MURBQjE3Qzc2MEEyM0ZFMDhBN0U5OTFDRQorOjEwNDkwMDAwMkQzMERFNTk2RjY3RTZGNTIwMkYyNzFCOURDQzA3QTBDMQorOjEwNDkxMDAwQUNGMDc0NjY3RTFGRjhBODJBQjJCRDFDQkZBQkRBQTY0NQorOjEwNDkyMDAwRjgxMUVEQTUyRjZDMzk5QzgzRjM3QTEyRjgwQUY4QThEOAorOjEwNDkzMDAwN0E2QjMyRjM0OUZDQzFGRjI3NjAyQTU3NDNGRDEyOTg3NgorOjEwNDk0MDAwMjdDQUZGMjJENjU2Q0U1NDFDN0ZBREVFRjNDNEYwNzVCNQorOjEwNDk1MDAwQjJEMUEwNzE3QUU0RTk0OTE4MDdCRUFCN0I1NkYxRTMwNgorOjEwNDk2MDAwMTRFQjZDMkM4NDcyNzVFNjQ1RDdFQzRENkU5QzVGOTMwRQorOjEwNDk3MDAwNUVFMEMxNzlEREE1NjNCQjQ1OTFCOTNCNTE2NTU1NDUwNQorOjEwNDk4MDAwMzZFOEU1NTA1RkI1N0U4M0JFQjAxMEYxMDY3QUFGMTAxMQorOjEwNDk5MDAwRTFFQTY3ODU2QjlEMUE0MEZDMkU0OTc1NkU1NDAxM0YxNAorOjEwNDlBMDAwQ0MxREM4QkUyRTAxRkY5QzZDMDQzNTU2MTAyQjU3QTFBMAorOjEwNDlCMDAwN0M5MzNFODlFOEIzNENFRENCOTU1NEUyRDdFQUFEMkExRgorOjEwNDlDMDAwRjM1OUY4ODlEMzNGN0M5NEQzM0ZCQ0M3MTNEOTkyMTdDRQorOjEwNDlEMDAwQTNERjEyODNFQjQ5NDlCRjI1QTk4MjlFNUE3NzcxMjIzMgorOjEwNDlFMDAwNzhFRTQ1N0EwMDNDNkQ4ODJGNzhBRTExRjA3OTI3QjNDOAorOjEwNDlGMDAwMTIwREU4RTIwRDMwNDM2MTE3RTdDRjM2M0I5QkNCNjBFOQorOjEwNEEwMDAwRUMzN0Q5ODI4MDM2MDlDQTNBQkI4REY5MTkzM0I0REE0QQorOjEwNEExMDAwNDAxOTk0RkZDMjgyNkZFMDdDMThGM0ZCODI4MEU3MTY5NgorOjEwNEEyMDAwODVDREM2NzkxRjQyNjA2MTNFMkQzOTNBRTFBRjZENkE4RQorOjEwNEEzMDAwRjEyNjU1MTEzMEE3NjM3OUUxMkY1N0U1RDFGNzZGRDFGMgorOjEwNEE0MDAwRjcxQTdDM0ZBQUVGRUY4REYyODk5NkVGOERGMjRBRjlDMworOjEwNEE1MDAwRkQ3QkQ4OEUzOTJGRkM3RDVCRjk5NUQ2RjFDQkFCRTQ4RAorOjEwNEE2MDAwRjcxRkQxRjhFRTBCQzM2RjRDOUI2QzFEN0Y1QTBEN0Q2OQorOjEwNEE3MDAwNUZFRkUwRjRFQTRFNzU0NjM2NDJCOUQ5RTUwRjY4NDg3MworOjEwNEE4MDAwMzc4RDQ1RjFCRDk2NTZCMDExREJBOTkyMUY1ODY3NDA4RQorOjEwNEE5MDAwODVFRkREREI1MkM3QUM2MjY2QkU5OEYyMjcxQ0NGMDMwMAorOjEwNEFBMDAwRDI2MkU2OEI5NDg5NDkxNjdFNEMwREE0NTlDQUQwOTNFNAorOjEwNEFCMDAwNzFFMkYyOTgxRTBBNzg5RDA0OEZERTVGMjc3RDUxRDI0NQorOjEwNEFDMDAwREY0OUYwREVCMUQ3NDVFNTNCQUVFNEYwREVEMURGNERBNgorOjEwNEFEMDAwNzI4NjMwQjAxQzI4RUJBMTJCMENEMzdBMDQ3MDJBMkNFMAorOjEwNEFFMDAwOUJCMTJGOTQ5MDRCMTk2RjdFRUZCM0UxRkIyNDk1MzU2QQorOjEwNEFGMDAwRTA3QzkyMUM4Q0Y0RDE1RDc5QzU5QkMyMjZGQ0I0MEU3RgorOjEwNEIwMDAwMDJGQTQyMzk1REQxMzkxRTA1NUVFRjFBQjQzMDdCQUUzMAorOjEwNEIxMDAwNjk5Qzk2NDFGQUVDOEQ4NUZDRkQ3QzM3OEUxN0NDNTQ1MAorOjEwNEIyMDAwNTAwRkVBREQwNTg2QkJGNzM4OEVGQzg5OTY3MTlDQjk3QgorOjEwNEIzMDAwOTUzNDRFNUVEQzM4OEVEQ0NBQjg3MTlDQjMzNzhBRjc4OAorOjEwNEI0MDAwNjI5QzIxMTcxQUU3QUVGQzJCQURGM0M5QURBMjcxOEFBNgorOjEwNEI1MDAwRTJFNzkzNUIxNTM3NEUxMjlGMEZCQzE3RTNGODExN0YwNgorOjEwNEI2MDAwN0RDRTY3Qzg2NEVCN0MwNkQ3RDAzODU3RTEzOEUzNEQ3QgorOjEwNEI3MDAwRjMxOTVDMTMzNzhFOUJDNkMxRjczODBFMTg1MjNFOTY1OAorOjEwNEI4MDAwMDU3NDc3NzQyRjI0RkFCRkUyMjI3QjQxNzc4NDlFQzA5QworOjEwNEI5MDAwN0VEOUJCMkU0NkZBQzQwN0UzNjZBMTVFODFDNTE5RTQzRgorOjEwNEJBMDAwNTc1M0QyNjg5QzJGOTM4MEZFNkUzMzlEQjkzRUEyMjc0NworOjEwNEJCMDAwRTg5RjA1MDI0NDE2MDE4ODQwRkZENDA5MUVBREQ4MzY4RgorOjEwNEJDMDAwMkJCNzA5OUZCQjRBQjNFN0EyNUQ3MkJGQzczRjBDNDQzNgorOjEwNEJEMDAwRTdDQ0FFNTI3RDdFMDJGQjY2NDE5QkZENDQ5Nzg1N0YwQworOjEwNEJFMDAwODVERTlCQzI4NjM3QzBGODFEQTg2QzRDRTUxM0EwQkZCQworOjEwNEJGMDAwMThFOEFERTNBMEJGRjBGOUIxQjA0RjNGMDJGREM2NzRCNQorOjEwNEMwMDAwMzNCQzREMzQ4RjEzMUFDN0UzODlGNTdDMURGOTcyRUQ1RgorOjEwNEMxMDAwNTEzQjE4N0IzOENDNUI4NTAwRjcwRDYyMUEwQkRBQzA2QworOjEwNEMyMDAwRjgzM0M5NTlCREEwNDdGNzhCOEVDODQ2QTI0NzYwODBBQworOjEwNEMzMDAwMERGODlDQURFQjA3QjgxMkVEQzBDRUZDODNCMDQ3RTE5OAorOjEwNEM0MDAwNkY4MDBENkNEOTlCNUJCNzFGQzI2NkVGMjg3MzA3MkQ3MQorOjEwNEM1MDAwODFGOUNFRUU1ODZCMUYwMEU1MzNGNkFFNUJGRDZFNTM2NworOjEwNEM2MDAwM0ZCM0VEQzc3MURFNEVGODBGRkJCOTI5NjRCN0Q4QTc4MworOjEwNEM3MDAwM0ZBOEI0OTY2Rjg5QjM1NzZCOTQ3QzQxMEYzMUFFMkYyOAorOjEwNEM4MDAwNjI0NzdBREQ5MEM5RTFCOTA1OUY2M0IwREEyMDdBREQyOQorOjEwNEM5MDAwNkFGMDZGMjUzQ0Y1NzdEQTU5OTRENkEzQUUwQzU2ODhBNgorOjEwNENBMDAwRjhDODIwQkIyODI0RDc5NTM4Rjg2RUI1M0IwMzQxQTAzRgorOjEwNENCMDAwRTdBRDNGNTYwOThGRjFGMDc2RUQ0RDBFRDhDMDVFRUFCNAorOjEwNENDMDAwNUFGNzZGNzZCNEJGMkYwNkZGMEY5NzU5RUI1OTk4OEY5RAorOjEwNENEMDAwMjdGMTJBRjlFMEM2RDkyNUZEM0UzMkI1QkIyOTM0QTMxOAorOjEwNENFMDAwREY0NzI2N0VGOTQxRTUyQzRCRjk5Njg2OUIyQ0VEN0YxQworOjEwNENGMDAwQjg2Q0FFQTU3RTZFNzhCMUE1N0U3RUVCNkQ5NkYyODIyNQorOjEwNEQwMDAwQjYxRjVCREEyRjVBRDc2NEE5NUYxQ0I5REI1MjVGQkRBRgorOjEwNEQxMDAwNzVBREE1NUNEQkZFQjBBNTdERkRBRTBEOTY3QURCREU0NAorOjEwNEQyMDAwMTFEN0EyM0NBRTc4NUI2NTY4OUY3REUxM0U3MTJGREFCQQorOjEwNEQzMDAwNTc1RjE4OUExRkRCRDQyMUFGODExQzdFRDI5ODRERkM5RgorOjEwNEQ0MDAwN0RCMkQxNDdDRjMzQkJDNjNBRDExRUFGNEYwMjc5ODY3MQorOjEwNEQ1MDAwQjU3RUFGRjI4NzcwRUI2NEQ0MjNEMDFFNzRGODdFRTU4NQorOjEwNEQ2MDAwQzM3MDE4OUNBN0Q3MTQxRkYxQkRCQTRFNjc1MTYwNTU4OAorOjEwNEQ3MDAwODVBNUY1RjA3NUI3MUFBQkQ3QkFBMDdFNkNERkY1RUE1QQorOjEwNEQ4MDAwM0EyRDYxQkRENkE1MjVFQ0Y3QUNEMjVEODBGNjVERjg3NQorOjEwNEQ5MDAwNzcwRTg2NzY2MDVGRjYwM0ZDMERDMEY1QTJBRkZBNTM3RQorOjEwNERBMDAwMzY1NkQ5NkVEMjNCMjcxNDFCRjFDMTBEQ0E5NDEzQThGNQorOjEwNERCMDAwOUY2Qjc0MkVFRjM1M0I3MkE2QTAzRjU4QTM0NzBCMUE4QQorOjEwNERDMDAwREMxNzE4QUYxRDgwQzlDMjdFRjI2OTVFOEIyMzAzNjJCNworOjEwNEREMDAwRjI0QkY0MUI2MjkxRkJBNTJDRjQ0N0Q0Q0ZBN0Y2QTlBNAorOjEwNERFMDAwQTQ2NzU5RjQ0MEVFRjc0NkUxRjg4MTEzRjg5RUVEQ0E0NgorOjEwNERGMDAwQTBGNUYxOURDNjQwQkY4RkMwOUYzQkQ2Mzg5RDlFQkY5QQorOjEwNEUwMDAwNkYwQ0Y2RkIwODc0Q0Q3QjhEQjNBOUZDN0U2Mzg4OUU4NgorOjEwNEUxMDAwNUQ4RDk1RjQzQ0RFRDg0MEY1MUYzNTJFQTNGMjg5QzY5MgorOjEwNEUyMDAwMzAzRDNGNjk2Q0E1RTdDOUM2MzZBQTNGRDVCODhFQ0FFMgorOjEwNEUzMDAwNjcxQTIzRjRFQ0YxMDM4NDNEQ0FEMjg1RkQyN0VDNzU5MworOjEwNEU0MDAwNTgzOUE4N0M0RUNDNDE4NTdGNzNCRkQ1OUY4RDcyN0QyQworOjEwNEU1MDAwQ0VGRDY1MDFEQUI5RTc4RTgxNjE5MkMwM0Y5NENGNzhDQgorOjEwNEU2MDAwN0VFQjlCN0UwMTVBRUYxNzQ2ODBGRTYzN0JEN0JCOTI5OQorOjEwNEU3MDAwMzg3RDVDMzYzNjlEODFGRUI5N0I5OENFMzQxODNGRTk4QgorOjEwNEU4MDAwOTVDQkM5NUU4NkY3MUEyMzdEMTlGMUNGRjIyNEU4MUY2RQorOjEwNEU5MDAwRTc5Qzc1NzEzQUY1RjBDNzIzRkY1RThDRjE4NzFCODRBMAorOjEwNEVBMDAwM0U0QzNBQTAzNjcwQkE2REYyMjNERDRDRjhFMzc2RDk2OQorOjEwNEVCMDAwMEI0MjlGQzdFMTkxNkNCOTlDREVGODNDOUQyMUYxRDk3MgorOjEwNEVDMDAwOTk4QjcxODBGQjk1RTAwODFCRjBDMUI5MEUwN0NERUIwMworOjEwNEVEMDAwRENFRUU0MDhDMzZGMzEzODMyRTk0Mjc4RTM3MDU0NkY5NgorOjEwNEVFMDAwNzUxOTY2RkQ1MERCOUU2QTU4RjU0NThFNjFENjE3RTc0OQorOjEwNEVGMDAwOEU2Q0YyQTJEQzJGQzlCNjE5MUY4RDQ1RkUwODA4RkU4NAorOjEwNEYwMDAwRTA3QzI3RkJBRjZEQ0YzM0RDOTY3RUFDRTU3MzZEQ0FEQQorOjEwNEYxMDAwNzRGNDgzNDBCOUE3N0MzRjgxN0YyMDlGNEJCMjc1RTMzNworOjEwNEYyMDAwMjM5MEVGOTM1Qjg3QTRFMEI4RTBDNzE5MzhDRUE5NDY3OQorOjEwNEYzMDAwQzNFMEUzNjYxQjY2QkVBQzU5OTY0NEVEMjU3QzdERjU2NworOjEwNEY0MDAwRkJGNzg2MEYyRDgzMEY5RDhDNTBGRkY1OTA2RkVFNjc1QQorOjEwNEY1MDAwMzNFRDRGMTRDRjYxQkJFRDVGRTJCQUUzODBGRkJGQTYzNAorOjEwNEY2MDAwNzg4MDQ2NjVEOTZGN0RCQjFBNzY1QzgxRUZCNzU5QzZFQworOjEwNEY3MDAwODNFRjdDRDI4N0M2RjVBQTZGQkE2QkVDODQyOTJFNTBEQQorOjEwNEY4MDAwODc2MzkwN0ZFNDI0M0E4N0EwQzcxNEU4RUZBQ0U2NkUwRAorOjEwNEY5MDAwNTU2MDlDRTkzNjFGRDVENzBCN0VBQzc1NzZFOTIxNzgzNAorOjEwNEZBMDAwNzVCQTgzRDNBM0FGNzE0RTM2MUVGMTY5QTAzRjJBOUQxNworOjEwNEZCMDAwRTA5MUMxMzg5NUVEMjNDQTUwM0Y5RUVFNTg5MTE5MDJGOQorOjEwNEZDMDAwQkVBRDU2Q0ZERDExNENGMDdEQUI0REUxRjA0NEVDRERENAorOjEwNEZEMDAwNURBNkY5QzgzODBBNjNEMEFGMzMwNjNGNzJGQTA5NTNBOQorOjEwNEZFMDAwMzk1RTVGQ0JFNzdERDgyRkYwNDdEREI2QTNFNTU3MDFFQgorOjEwNEZGMDAwRkM3NUJCM0VENzExOEVFOUI2RDA3REI2OENEOEZDMTVCQQorOjEwNTAwMDAwOUMzRkY0NTNCNUY1MDMxREU3Rjc4OTNENUM3MEU3MDU1OAorOjEwNTAxMDAwRjQ1NDZGMzhEREQ5MTRCNzkzRjA4NTU5MjdEQTMxRjM5QQorOjEwNTAyMDAwN0FFMjhBQkUxQkRGMDVEMUZDRjQ5RkVDNkMxNUMwQzE4RgorOjEwNTAzMDAwRkUwMkFEQTBERTJFNkEyQjU4RDA4QkY4OUFENzUxNERDOAorOjEwNTA0MDAwRjFDNTRGNkREMjZFNkEyQjQ2RkUzOENENkNEMzcxN0VBMgorOjEwNTA1MDAwQTdEOTlCREVCMTI2RkM3NUQ4QjhERENGNUFCOTFEMTM5MAorOjEwNTA2MDAwODZGRjEwMUVCMDY3MkQ3NkNEQTI3NUQ2RjI0Mjc2NUQxMgorOjEwNTA3MDAwMjZFQThEODVGN0RCNTkwNDUwQjQxOEVEMjJDOTFGMzA5QworOjEwNTA4MDAwRUZDRDM2NkVFRjJFNjIwRDJENjhDRjY5MEVFRTFGQ0M4MAorOjEwNTA5MDAwMzM5ODM2MDBFMEFBRkRENUEzQzU2OEY3QkY2Q0IzMTFGRAorOjEwNTBBMDAwN0Q2NDlDNjE3MTFBODdCQjJBM0RBMjA3QTBGRUMzOEU1NgorOjEwNTBCMDAwQjEzNzVDODVEQ0U3ODhCNEUwQkFDQzUyOTg3RjBCRUI2MworOjEwNTBDMDAwOERDRkY5QUQ1NkY4MkUwNjdGM0NCQzhDMkRCN0MwMjE5NAorOjEwNTBEMDAwRkI5NTcwQTg1Qjk1NDAyNDAxREZCRDI2Rjk0RUU4OTE1MQorOjEwNTBFMDAwMzRENTZBRTc2N0M1OTVERkIzODlGOEE1Q0E1NEE0RjMzOAorOjEwNTBGMDAwNjlDMzE5QjZBNTUwQkQzRjhBRjE5MTFEMEVGRjBBQTBFNAorOjEwNTEwMDAwRUZFREI2NjAxN0VBNjdCMDBCOEE5OEE5RERFREI2MTAyRgorOjEwNTExMDAwQkQzRkE1QkNCMTEwRUQ1M0E2NDU4QkQwQkY4NzM1NDUyQgorOjEwNTEyMDAwNDM3RUQwMDUzRkE4NDlERTIyOENDNzdBMThBQzlGMjA2OQorOjEwNTEzMDAwOTcwRTg0MEZGQTY5RjE1NENFNjQ0NTE4N0YwNTM5ODVCRQorOjEwNTE0MDAwRkVFRUYxOTYxRjUxQTBFQzcyNzczMEVDQ0Y5MTZEOEQ5MQorOjEwNTE1MDAwMkZCQjdDRDY3MjNERkUwM0U5MzA5QzUxMUMyNzc5QjhFOQorOjEwNTE2MDAwQjUxRTE2MkM4NkZDRTZGMTVCREZGRkVGMUUzQzQ1ODk4MQorOjEwNTE3MDAwNkZCREM0RDJGMDc0QkFBMzJBOENDRjI2NkFBN0NDNzZBRQorOjEwNTE4MDAwNzM5RDkzQzM0RjdFMzlCNDVGMkFFQ0Y5M0FFNjBCNTMxMworOjEwNTE5MDAwOUMzODlCRjNDMUQyMTkzNjgyNjdBOUM3RTcwRjQzQkQ3QworOjEwNTFBMDAwQTIwNTE4Q0ExRkM2QUFDREVCNThGRDc5MTBCOTdFQTY3NAorOjEwNTFCMDAwQjJENkFEMjM1RkQ2OUZENzU4MDRGNDdEOTEyREU0NTEyQworOjEwNTFDMDAwQzcyM0ZFMDI2NEU3M0EwMTU5NUYwM0M4OUE3QkJBQzU1OAorOjEwNTFEMDAwRUU2NTAzRDNDNEZBM0FEMDMwQ0JFQjQwQTRGM0Y4MTgxMQorOjEwNTFFMDAwOURBNTVFQjAwQkJEMDhGQTIyNEJDRDQwM0REODVENEU2QgorOjEwNTFGMDAwN0UwOUVCMjIzRDIxREJFOUIxNzYwMzExOEVCRURBQjlERgorOjEwNTIwMDAwNjJFREYyMTJGNTU3RkJBQjY3NzY4NjAxRkY1NUNGM0Q5NQorOjEwNTIxMDAwRTAwNUUyQjM0RkI1QjY0QzNGQkNBRkQ5QjJEMjhCN0MwMAorOjEwNTIyMDAwRkM4OTE2RjZFMkJDM0Y4REE4RDMxM0YxRjMwREFBMjIzOAorOjEwNTIzMDAwRkNCMTgwNUI0MTdGNThEMEU5RTQ1M0FCQkY4Qjc4RkY3MgorOjEwNTI0MDAwNzI4QkREQzAyNkY1NUIxRDUxMDcxMEIxQUU2MzMxRTdFRgorOjEwNTI1MDAwQTdBRDhFMEY3OEY5QUVDRjkxOUVGNUJCQUNGMjU2RjVBNworOjEwNTI2MDAwQzQwMzk5MThFRjA0MEM3MUJGOTE0NUM5N0VBRURCRkNGNQorOjEwNTI3MDAwQzc3MkI0NDdFQTU5MzdFOTg5RjhFRjcwRkNGMzY5QjRBQgorOjEwNTI4MDAwN0VDREQ1NTM3QUQ3Q0JGRDk3N0FDMUY3RjUxREFCM0ZDRAorOjEwNTI5MDAwNTdCRDU4QjZDQTc3QTVGMDQ3QTZBOTlFNzQ4QTJCNEQ2QworOjEwNTJBMDAwNjAxMzkwNkUxMjBGMkNDMkVERTExNTRGM0U1NEY0MDFDNQorOjEwNTJCMDAwQzA3MTZBRjMzRjc5MTU0QkRDODhFQjg3NzNFREYzMUYwMAorOjEwNTJDMDAwN0ZDOUQ3Qjc1RTNGMjNGQ0Y5RDg3NzExRkFDRUI3OEJFOQorOjEwNTJEMDAwREJFRjZDMzc3RkQ2RDhBMzVFRjQ5NzZBMzZEOEZEMjAxMworOjEwNTJFMDAwOTlBQ0U2OTk0REJGN0MwNEY5RkE3NzBFOEEzMzU0M0ZBNgorOjEwNTJGMDAwNzNFODlEMkJBMTVDQkRERDlFM0U5MzRGQzNBRDY0QzY5QworOjEwNTMwMDAwRTg1MTBGRkYyRjFCMTNDMzdGRDVGMzg3NzRERjI4RkVFRgorOjEwNTMxMDAwRkVBNzY5MzEzQTU0NkZERkE3QjM1MUJERjE1NkRBQkUyQgorOjEwNTMyMDAwNEZFRjcyMjdBMDQ3RkIwN0U1Njg2RkFGNzhGMjJCMURBMAorOjEwNTMzMDAwRTVFQUQzQkQwQUNCQ0FFQkZEN0RFNTg2NDM2NENGMjEwOAorOjEwNTM0MDAwOUU4ODdFODIzRTNERjRFQTQ1QTdFODc3NUYxQTQ3RURFNgorOjEwNTM1MDAwMEM1Q0JGRkFBMkQzNDg1Q0ZCMzI4ODhGOUY3RDA5RTNDNworOjEwNTM2MDAwRjdCRjc3Rjg3MUZFOTVDRkZFQzg4QkYzRjg1ODZCRTA2NgorOjEwNTM3MDAwRkNGQ0U4Q0FDQzAwOEM1QjY5MEY2NzFBRjRFNEVGMkJFNQorOjEwNTM4MDAwMUZCQjlERjg2Q0QxRDFEQjMzMjkxRUMwMDIzOTM2NUFDMAorOjEwNTM5MDAwNDNDMzM5MzhCRjA1RUJBRkE3RjkyRDY0MjFFMkI3Q0E4MworOjEwNTNBMDAwNDdENTYwMDRFMzU5MUE5QkJFM0Q4MTNDQkMyMUU0RTEzMgorOjEwNTNCMDAwRTM4RDBFNUM3QkQ4QzdBODYwRDEzRjdDNTNBNTdEMDJFRQorOjEwNTNDMDAwQzY2RUEzNzhDM0VENzIxRjgyMkRBMUYyMTc0RTRFQTdCMQorOjEwNTNEMDAwNERBQTREQzYzNzlDMTYzRUREN0M1NzI3RDJFN0U0QTA4OAorOjEwNTNFMDAwNDAxNkM2MjcwMTBGNjE4MTJGMDVGNThFN0E3NDZBMTY2MworOjEwNTNGMDAwQTcwRkYzNjlDNUUyM0JEMDhCQTVGODFFREI3N0RBMDM3NAorOjEwNTQwMDAwQUUyMkNCNzc2MjFERTNFMzJGMTVFMzAzREM0OTY4OEZGRgorOjEwNTQxMDAwN0Q5QzA5RjY0RDgyRjk3REE1NEFCRDBDRjY4Njg5QkZCMworOjEwNTQyMDAwNEM3MkNERTU3Q0YzREQ1Q0FFQTU5QzQ3NjY0REM3RkFCQQorOjEwNTQzMDAwM0ZCREM1RTUwN0JGQzM3NTFERTA4QTY2NTFGREJFRUZFMAorOjEwNTQ0MDAwMkJBNDA3MUMyQzlBNDg5RTM3REI4NTNDNUJFQkU1RkVDMgorOjEwNTQ1MDAwMjRDMEFERTFGQTE0RTMxM0U4M0Y4REYwNEY3NkRBQzJEMQorOjEwNTQ2MDAwRkJFMTNCOTM1RUFFQzdGMUE4OUQxRTdCNkY1QUQ3MTczOQorOjEwNTQ3MDAwMDlGOTdGNTUxNUZCQTM0MkZFRDk3QTJFRjc3RERCQkRENgorOjEwNTQ4MDAwNjFFRTFGRDgyM0JGN0MwNEU1MTVFNDEzRDc5OTlBNjcxMgorOjEwNTQ5MDAwRUM0MTlDRjc2N0RCMEVCQzczMzNGMEY1NjdFRDUyNEVDMQorOjEwNTRBMDAwQUQ3QTMzNUU0RTJCNzc4QzY3ODlFNEY0MzNCNzlGMjU1MgorOjEwNTRCMDAwOTQ1Mzc4OUY1MDRFREQ1REM0QzdGRkQ5N0E1M0UyRUQxNworOjEwNTRDMDAwNEM5Q0RFOTQ3QUIwMkZGQ0M1RUJDMTM1QUEyRkExMUVFRgorOjEwNTREMDAwODRCRkI3NTg3MTZGQkU5M0ZDMjZGOUFDRUFFOURBQzExNAorOjEwNTRFMDAwMTQzNzkyRkMyOEY5QUQ4NzFGMjVCRkM1Q0ZEMzhBQjdFMworOjEwNTRGMDAwRjhGQTE3ODVCRTkxNzRCNjJGNjc2MTBGQzY0QkY3QThFRgorOjEwNTUwMDAwRTQ1RjlGMDU5ODVBODBCRTY3QjdFNTQ1MzBFRUJDRDI5MAorOjEwNTUxMDAwQzVFMzE3Njc4RDZFNkYxQTNDNTdBNkYyNzI3Nzg2REU2OQorOjEwNTUyMDAwODJGQTQxQkVFRjc2RjFGOEY2RDk2MEI3MzdENUU0NTc4NQorOjEwNTUzMDAwN0NCMDVCRjVGQUEwQkUyQkMyQTYyN0YyMzc0MEYzMTI2RgorOjEwNTU0MDAwMUM1REFDQUY3QTFFMEY5RUFBQkE3Mzk3QTFERkRFQTZEMAorOjEwNTU1MDAwRDI3RTc2NDVEMzhENUVEQzA3M0VCQjdCQzhDRjUxM0YwNAorOjEwNTU2MDAwMkQ3ODBEMEM0QzgwRjcyQ0RBODEyOTM4QkQ4MDg2Nzk5NgorOjEwNTU3MDAwMDlGMzA1QkQzRjYxRTEwNzI3QzNGQ0U2RUZFNkZFNDIwNAorOjEwNTU4MDAwQzU5QTM4RkJERUJENTQ0NzdEMDNGNkZENzE2QjVDOUIwRAorOjEwNTU5MDAwRjM0RDk1RThBNzcyQkRCNUJFOEFBRDIxQkE1NUM1RjFFOAorOjEwNTVBMDAwNTE0OEY4ODExMzM0QzE0N0EzRDk2OEUxODdGMUY4ODVFMAorOjEwNTVCMDAwRDA1NzUzRDVDMjlGQTM5RDcxRjYwODhGMkI5RURCQURBQworOjEwNTVDMDAwMTJGRUNGNkQ1MzIyMThGN0ExRjhFRTI0QTQ3RkI3Q0VCOAorOjEwNTVEMDAwNENGRUYyMjlFNDM3QkQ2RjM5M0VGNUMyMUY4QUVGODRENQorOjEwNTVFMDAwMjYzNTNCREYyREZBMDUzQzRGRURGQzVEQzFDQjU4RkU2NworOjEwNTVGMDAwRDU2RjczREY2NUJEREI5N0VFRkQzM0VEMUY5RkRERUJGMAorOjEwNTYwMDAwMjAzOENFRUU3RDM1Rjc0RTJDQkZFNEYwMjM5QzY3OTcxMworOjEwNTYxMDAwM0I2OEZGMkNCQ0Q3MTMxOTg2RjU4MzgwREVCODZFRUU4RAorOjEwNTYyMDAwRjlBQUE4OEJENjlENjZBMkQzM0M4REVGNzc5Q0RCRkRCMworOjEwNTYzMDAwRUZFRjJCOTg3RkIwREJFMUMzNzlENEVGRTU3OTIxRjU2QgorOjEwNTY0MDAwMkZCOTI4RUU3Mjc2Q0Y1N0M1MjFGN0RGNkYzRTc1M0EzNgorOjEwNTY1MDAwMEIxMUZGNzlEOEVDMURDOEFGQTk3QzFGQTBGRUU1NDk0RQorOjEwNTY2MDAwOUI5QTcwM0ZCQzYzOUY4RUZCMkJBNUFGRkNCNTA4RjVFMgorOjEwNTY3MDAwQ0JEOTFEREM0RTM4NjNFRjdBMENGNzQxNkJCNUExQ0I2QgorOjEwNTY4MDAwRUQyOEY3NjhCM0Y1MDdCQkQzQkU2MDRBQjgzMDExNUVBQQorOjEwNTY5MDAwMzgxRUNFMDIxRTcwNUU4MDk3NEFENDhCN0RFMUEzNTlERQorOjEwNTZBMDAwRTNGRUU2N0YzRjdDN0M3RTJCOEU1RkIzN0IwMkM5NERBMQorOjEwNTZCMDAwMEMyRjRBODBCRkY3NDQ5QzBBQ0Q5RkJGREZGQjU1MTFEQQorOjEwNTZDMDAwREEzRDlGQjUzN0QxM0E3RUIxNzk2RkZBMUYzNzZGMjUzMgorOjEwNTZEMDAwN0EyOUYzREVGRkRGOUNGRkE3NkI3QzVEOEE5NzgzREU3MAorOjEwNTZFMDAwN0NGRUFCM0JBOEZDQUNDNzRGRjA1RUEyRkMxRkZGOUY0QgorOjEwNTZGMDAwNDZGNzFENDA3N0VGQzVFOUFFRDhGRkJCQ0VGQjYyNzQxRAorOjEwNTcwMDAwN0Y0REQwREQ2MzYwNUVDMUQ5M0Q3RkE1NzhCOTlDRkYzOAorOjEwNTcxMDAwQzVFNkVERkI3Rjc0REVEMkZFNTk2NUYzQjdFNTQzRkJDQQorOjEwNTcyMDAwMzUyQ0RBRTkwMzM4NTcwRUJGQUUwREMzNENFMDI2MDQyMgorOjEwNTczMDAwMTNEOTIzNDEzQkY3OEY1NDg1Qzc2MUQ4MjAxRTE3NjJDOAorOjEwNTc0MDAwQzI5RkEwMTQzMDFGQzY1MTE2OTI1REE3Qjk1QkM4Q0U4OAorOjEwNTc1MDAwNjQ5QUJGMzMwMEY4NTgzNTcyOUU5RjcyMzVEODk4NjNBQgorOjEwNTc2MDAwMjEyQzBGOUNFQ0E3Rjg2NjlDNUZBNThERkNGNjExQjQ2QworOjEwNTc3MDAwRUY5QjlCMDAzRTE4QTdEOUEzMTk2MDI5MzFGQjcwNUJGMgorOjEwNTc4MDAwRDQ1MTQ0Q0YwRkYwNzk5Nzg4NjdEOTBERERFMjU3QjgyRgorOjEwNTc5MDAwRTNGQzAyOTdDRjVBRUYxMEZEM0JEOTdFMDNGMzg4OUNDMAorOjEwNTdBMDAwN0U4RDQ1QjAxRDZCMEI5QkYzMDcxQ0NDRjQxREQ0MTdFRAorOjEwNTdCMDAwNjIwMEQ2NjQzRjdFNTNGQzM1RjVFMDZGNEM2NzAwRjEyNAorOjEwNTdDMDAwMzdDMjQ2NzEyRDRBRUEyMzdDRjgyM0FCNzgxRTg1RDM3NQorOjEwNTdEMDAwOEFDRjk2NEVDNEEzQzZDMEZGRTNGMzIyQkY5MTA5N0ZEMAorOjEwNTdFMDAwNTExMzVENjhDMzZEMDE5N0I1OURGMDhCMkU0QTFGNEUxNgorOjEwNTdGMDAwOEZEQzFBNDE5RjI1MTY3QTQ4QkM1RjgwMkUxNjdBNDhBNgorOjEwNTgwMDAwRkM3RTUzQkFDNEQzMjMxRUZGREZCN0YzQjg5QkE0OTMyNworOjEwNTgxMDAwMjVCRjIzODNGQjIxNTFGMDQzNUVEREI2ODlFMjFEQTczRQorOjEwNTgyMDAwOUZGQUUwQkJDOEE3RDUyRkFCQ0MwOURGOUZEOUU2NjFCMworOjEwNTgzMDAwNTE5NDVGMkRBMkEzM0Y1NUQ1QTEyNjhDRjM0QUJCQkM0MgorOjEwNTg0MDAwRkEzOTBGRjE3OUQ1MEU0NzY0MjY3QzVGQjVGM0MzMjI5MAorOjEwNTg1MDAwQjI5Qjk2NzcxRjFFODA3MTgxQTcxNDRFQkY3MDU3MTE5RgorOjEwNTg2MDAwRUVEQjU1NjlEQzNGODhFRjZGQkQ5REM3MDU0RUJEOThFNworOjEwNTg3MDAwM0MxQkUzMEZDQTU2OUVBRjU4RDU3RUEzREQ2MURBNzc5NQorOjEwNTg4MDAwRkU1Rjc2OUVGNzBBRUQ0ODlFQzM0RjJBQjRERUY0ODY4QgorOjEwNTg5MDAwOEZGQjA1QTc5RTU0Mzg3Q0JCRUMxMUNDN0JBQ0RBQkFFRAorOjEwNThBMDAwNDEwRkExNUZCOUY1NzM4QTYzOTczRUY3OENCNzhCRkMwNAorOjEwNThCMDAwNDVENUVBM0Y2RjU1ODk5RUYwMjRCQUM1RkJCMTc1MURFOQorOjEwNThDMDAwQjVFNDI3RDRCNTBCM0YzMUNFOEZBQTdFNkVDRkNFMzA1NAorOjEwNThEMDAwQTBBNkZBRjkyN0JDMTg3RjM5RDlCOUM1NEJGRUU5NTZGRAorOjEwNThFMDAwRUU3RjZBNkUyREIxN0Y3QTMxQkZCNEZERUU4NDdFRTkyMgorOjEwNThGMDAwNDlGQzA3RjgxM0ZCRUM3MUZFRkNENjdFOTdCNjdGRjlFNgorOjEwNTkwMDAwQ0MxNzhGNjE5Q0Y0RDQ4RUNGMUU0M0I4NkJGRUUzREZCRgorOjEwNTkxMDAwMUU0M0ZCOUVFRDc1MTk1QjYwQkVGNTRGQkQ0REYxMjYzNAorOjEwNTkyMDAwRjlEREJCNDI0RUNGMEM2MkUxMUM2ODc3RTY3NzBFQ0EwOAorOjEwNTkzMDAwMUYzOUIzRTdFMzVDRjRFN0NFNkNGRjczMjZGQUY1NEI0RgorOjEwNTk0MDAwRjc0Q0NEQzI3OTJGN0RBMTM0OEIyNTkwNzdGOTQ0QkVEOQorOjEwNTk1MDAwOEM1QzQyOUMzMDlFMEUwNzNBMEU5MDFGNzJGQTk4ODMyMAorOjEwNTk2MDAwRkNCRTlFRjg0MjdCMkQ4RkQ3Rjg0NDVDNjE1QkUyMzgyOQorOjEwNTk3MDAwQUNGNDg3RUIzQTNFMkNFN0YxMzFFMTE3NUYyQzhFRjA2NworOjEwNTk4MDAwMTZEMEYxOEE0QkEwRDczNjExMjc4QUEzRDc2OUZDMDcxNgorOjEwNTk5MDAwRDBFNUFCMzg3QTdEQzE0MjhGRTdFMDNFNjQ0N0JGM0UzOQorOjEwNTlBMDAwRTMwOEQxNEJDMDkzOENFRjFFQjYwNzZDM0FDQUMxOEU4OAorOjEwNTlCMDAwRTQxRTNBQ0Q0NDNBM0RGMzQ1MkVDNkMzM0ZCMTc3OTMzQQorOjEwNTlDMDAwREREM0JEQzc2MUEwN0Y1RkI1RTdCNzI0MTc2NzVFMzgzOQorOjEwNTlEMDAwNEFGMTUzMjZFMkFDNjc1OENGMUY4RjhCMjk2MjdFOUIxQQorOjEwNTlFMDAwM0QzQ0ZFMjBGMDhERjEwOTlGOTdERThCMzgwNEU3NTc5MAorOjEwNTlGMDAwMTk5RkU4MkIyRTMxNDExNzc5NEYyMkVFNUNCQkY5NURFMAorOjEwNUEwMDAwOURDNUM1Nzk5NDg5NDhBNzBGMkNGMTcxMzlFRkY4RkUyRgorOjEwNUExMDAwMENDNEMzMDQ3MzdDMkQ3MURDNDdGQUNEMzEzQUYxQjg2NAorOjEwNUEyMDAwOUE4QzlGOUREOTIwRTI2RUYwN0VFMDE4RjQwNzc5MUNENQorOjEwNUEzMDAwQTMzRUEyRkM5NjI1OTA0MzE5NUYxQkEzQzdDOTYxRTQ0RQorOjEwNUE0MDAwRDJFMjZBMTc4M0Y3NkZDNUM3MzA5REFGMEIxMjJGQTczRAorOjEwNUE1MDAwRkU5MjU4MEY3RjQ3RTc3MjNEREQxNjlBQTk5QkY2QjM3OQorOjEwNUE2MDAwN0YyOEY2NTkyNEJFMjRCQ0E3NDQxRURFQTlBNzU0OEE2OQorOjEwNUE3MDAwMDdCNUI0MUYyMDdEMUEyRkNGNzU3RDlDODNCODU1RTdERAorOjEwNUE4MDAwRjFENkJBNURGQjhBNTBFRjlDREFGRjIyRjE1REREQjZGQworOjEwNUE5MDAwMEZGNDMwRjQ3Mzc4RUJGMzNBQjcyNzM5OUZBMzlFOEU1NworOjEwNUFBMDAwOThGNEY0QTk2N0Y3MTVGMUI4MUZDRkJCOERFRkJGNUE3MworOjEwNUFCMDAwRjQ1RkJGREJEQTdGRkRCNkNGMkRGRDU3ODdEQjc1QkUwOAorOjEwNUFDMDAwNUU1RTc4OUM5MzVBRTA0NjlDRUZDOTRFM0I0MzdENzdERgorOjEwNUFEMDAwQjI1RDlEMUU0OTY0MDdFQTc2Q0IzRTY4Q0I1MTlERDZFOAorOjEwNUFFMDAwQUI3MTZGMjY1MTdFRUVEMkEzRDNERjREQzE3RDNBMTA0QworOjEwNUFGMDAwMzNCNDdGM0I5QTM4NUY3NUZDMkMzMDAwRTlEMjcxRjRFNworOjEwNUIwMDAwNjYxNUQ3OEQ5RDg4NDc5MzFENUNGQzU2NDNBOTA3RTQxNQorOjEwNUIxMDAwQjVGOEJERTAzODY0QUI3ODNEMzBFMTk4Q0QwMjM3OEMwNAorOjEwNUIyMDAwOTM4NUZBQjgxOUZBQzE3QzdBQ0MxRkMyRkQ1MUQ1NUJCNgorOjEwNUIzMDAwM0UxREUxNTEwRDlCRTE0QUI4N0VGMkZFRUNFRTIwNDNBMgorOjEwNUI0MDAwQkJEQzZFNThGMzk1QjNBRjEzNzFCNEE4MzU2RjNENUJGMgorOjEwNUI1MDAwNjdDMzcxMUY5Q0Q5OTJGQ0I4MUZCMDY0NDQ2MEY0MjFFNAorOjEwNUI2MDAwQ0NBQjVGOTA0RDcxRTI5Q0VGRjFFRjRFMUJFRUIwRUREMAorOjEwNUI3MDAwOEFEOEJFNkRGMjc5RTgxRkYzNjA2QzkxQjU3M0UwQkIxMworOjEwNUI4MDAwNjRBRDVEQzE3RDAwNzgzMkE0Q0JFREI2RDA0NjNEMDM1NworOjEwNUI5MDAwREJFOUNDMDdBQUYxMzE1REQxMjhGRjQyOUM3QjkxRkQ2NgorOjEwNUJBMDAwQzk3NjdERUQwN0NCNzM0OEFBODA3Rjg4RDgwRjFFQzRDNQorOjEwNUJCMDAwQkExNERDMEY1RUVGRTFFNzkxMDZCQkQzRTlCQ0QxMjY1NgorOjEwNUJDMDAwNjFBRkY5NzBERjE1REIzNTU4RDdFRDhCOUU0NzZBQjVBRAorOjEwNUJEMDAwOTZEMzRCNEI2RTFCRUMwNzNGNThCRkEzNTQwMzdEOTBFRAorOjEwNUJFMDAwN0U2M0M5RjYwMTA2RUU0QkRGNUY4QTc5RjdFOTRGOTREMQorOjEwNUJGMDAwOENDRTgxRjI2QzQ3NTExOUQ1RkY0QkM5RTg1QzI4RkY2OAorOjEwNUMwMDAwQTg3NTUyMTlENTU3MkI5NDE3Qjg0N0VGMkUwREJCNjNDMworOjEwNUMxMDAwRjI5OTAxQzYyREU2NUI4MERDRUU0N0I5M0QxRDNDRDUwRgorOjEwNUMyMDAwODJCNUI1RDc3RkE5RjNGMzMwMkM4OEYzMUYzNDkxQ0YxOQorOjEwNUMzMDAwN0ZBMEZCQkRFRDM4REZDMUI2QUUyNkU0QkZDN0Y3N0M2MQorOjEwNUM0MDAwOTU4QUVEN0NDQ0EwNzkxQUFDRDlDMDdENzk3ODM1RjFGNAorOjEwNUM1MDAwRUIwQkU0RkZDNEU3QzE0ODdFN0YyRTM5RjQxQjg0RTNERAorOjEwNUM2MDAwRUU3OUMzMUYyQTQ3OUQ1QUUzMjczRThBREYyNzY2NDZGRgorOjEwNUM3MDAwM0FEMUE1NDJEMDA1RTE3NDlBRjI5MDJCRjEyNDAyRTlDMQorOjEwNUM4MDAwOUIzMjAzQzc1MUMyMzVFQUQ3OTc3RjczNzg0RTQ4N0U1RgorOjEwNUM5MDAwMTFFN0MwNENFN0E0M0U0NTM4MUY0RTBFRDEzM0ZFOUNBMQorOjEwNUNBMDAwRDQ3RTNERjgxOUYyNTNDRUMyRjNCOTA4QkYzQ0ZGNTQ3RAorOjEwNUNCMDAwQkFDODRENzE4MTczQkI1OUM0OTE0MDdFRTQ3MzYzMjNBQworOjEwNUNDMDAwQ0JEMDg2RjY1REZGQjYyM0Y0NjcxQzM3RkYxNURGOEU1OQorOjEwNUNEMDAwMjNEMERGMTUxNUJBMUY1M0Q3QUU1ODM2MkU0MzFCQ0IzMgorOjEwNUNFMDAwRjg4NEQwOUUxMDc0Q0I0NjVBQTI3Q0REQzFGOEI5MUM1MgorOjEwNUNGMDAwODcxMjQwQkZGMUVDOEYwQ0QyQkYwMzJCNjY5MjVGNzEwRAorOjEwNUQwMDAwMzYzOUFGMURGMzI3Q0VERUM5RjMwMDYwODU1NzUwMEUzQworOjEwNUQxMDAwMDZFRDRFODlBMkZGMDM3Q0ZDNjUxQzFGN0Y2OTVENjc1MQorOjEwNUQyMDAwQUNFMzlFRkREQUI3QUI4QkZBMzM0NDdGNjBFODY0QTI0NAorOjEwNUQzMDAwRENGMEJGQjMyQUI3QjNDRjM2RkEwODBFMzAwQkY3RTE2OQorOjEwNUQ0MDAwN0E3QUE5RTM2NTNCQUNFN0Y0MDBFRkZEMUQyNkJDRTdEQQorOjEwNUQ1MDAwM0FGQUE0NUY5RTgzRDM4RjlFRjFGNDVCRTg2Q0M4NDU0QQorOjEwNUQ2MDAwMzlBRTBBQjY5N0EzNkJGQUYxQzIzQjhBOTFBOURGRDY4NgorOjEwNUQ3MDAwNDM5NzYxRkI5QUQ5OUQ4Nzc5Q0U1MDQzMDFFRUIzRjVFNQorOjEwNUQ4MDAwQTYyRjNGOEY5NUI5N0I2RTkzMURFMzE1NDgxRjVGNkY1QworOjEwNUQ5MDAwM0E1RUIxQ0M5RkExRjVCM0QwNzUyQ0MyN0ZDNUVFQ0ZEMgorOjEwNURBMDAwNkQwOEJGQTRFNzQzMjJDRjNGRkVGQjZGMzkxNDMxNkU2RAorOjEwNURCMDAwNEQ5MzFERTMyNEJCNzRCMjY3RTNEQjREQzc0MzU1RTM0QQorOjEwNURDMDAwNjNFNTIyNjczMThEOUI2NUUzRjE4RURFRURGOUZBMTcwRAorOjEwNUREMDAwRUJENzQ5RTdCMkZBRTJDNzIyODNGNzA3RjhGRkI2MTkxMworOjEwNURFMDAwRkZERkVEMUJGRkIzQjAxREUwOUY5RURGMDBGRjM3NjJCQQorOjEwNURGMDAwRkJCRUYwMkZFREU4NkFBMTE3QUE3MTFGMDVGOEU4OEYyNgorOjEwNUUwMDAwODFFQjMyODdDMkY4RTVBQTlCRTQ2MEYxMTY5NUU0MEZCNgorOjEwNUUxMDAwREFDRkNDQzk4Q0U5OTFDNTkzMUFGNkUxN0MxNzNGQUE3OQorOjEwNUUyMDAwMTBCRjU2ODg3M0E2OUY4OUJDRkVGODdDQTg4NUIzQzNCMworOjEwNUUzMDAwQjRCRkQzMkIyRjJBMTJFN0Q3QzVFNUJCRDdDN0Y4NzY1NworOjEwNUU0MDAwMzBDRjUzRTNFN0I2NTQyMTE3QTU4QjBBNTNEMDFFREE5RgorOjEwNUU1MDAwNkJGN0ZEMEJEOUQ5QUZBOTZDNjMwMkZDNkY0MDI2MzNGOQorOjEwNUU2MDAwRDE3NTUwODNDRDkyMjdDQjJBNTIyREZEOTYyRDJBQTQ5MQorOjEwNUU3MDAwN0RFRjI1MUVERjA1RkRBQUMxQ0JBQ0VCNzY1RUQ4N0E5RgorOjEwNUU4MDAwQ0U2ODQ4QUJGNTlDRDFCMEI2RkU5NkY2OTdBRENCQjdEMQorOjEwNUU5MDAwRDQ4Rjg4OENCNEQ0NUZCRTc1OENBNTNDQUFGRDRBNEJDOAorOjEwNUVBMDAwRkIyQjc2NERCMTk0NDc0N0JGNkQ2OTNGRjZDODc1OTY5OQorOjEwNUVCMDAwRjJGOENFOUIyREVEMjcxQzlCNjdBOTlGRDQ1NTY1QTlCMQorOjEwNUVDMDAwQkZFQTkzMjU5NkYyM0Y3NEZGQzQ2QUE3RDgxOEU5NDc0MgorOjEwNUVEMDAwOTZBNDkwQkUzQ0Q4MzgzMTE3RjNCMUQ5MzhBNTBDRjE0RgorOjEwNUVFMDAwNTkyQUYyMDkwRkRFQTZEQjBDMkYzRTBCNkMwNkU4QUQzQgorOjEwNUVGMDAwRkQwQjY2RDJCQTdGRjBCNkNDODA4RjlFQzUwMUY0NkJFNQorOjEwNUYwMDAwOTgzQTc5NUNBMjdDQ0RBOUM2QTQ1QzczNUU1NEE5RDNFRgorOjEwNUYxMDAwNkVEMTZGNTMwRDZCNzlBNzQzRUNGQjBERTY3Q0YzNzJFQQorOjEwNUYyMDAwOUM3Q0Q5MUIyNjQ3QzEzMjY0RkQxNzBGQ0RDMkYxNDBCRQorOjEwNUYzMDAwQ0VGNjBBM0RCN0Y3OTJGNDVDNjY0MzMxOTY0MUNFMEUzOQorOjEwNUY0MDAwMjY5MjMzMjZENkQ5MTJDMTRGRjAwQ0U4OTgxRjU5RTY5NQorOjEwNUY1MDAwQTFGNTM4ODAyRjdERjQzRUFDODFCQzRDNzFGQTA3MUU1MAorOjEwNUY2MDAwQzI3OUQ5RkNFOUM4ODQ2NUIzODMwNzc5N0Y2MjVENjYyRAorOjEwNUY3MDAwQzM2RERGNjQ1RDk2NzI5RTZEMTNGOTZCNjkzQzdGRURCNgorOjEwNUY4MDAwRTEwNTA1MjlDQzg0REYzRjM4NkNDMjhFNkVFMzRGRTMxOAorOjEwNUY5MDAwODhBQjI3NkYzNURGRkNGRTkzMjRDRDk0MkZBNzJDOUE3NgorOjEwNUZBMDAwNDlGOTIyRDk3REU4NDUzRDNCN0ZDNjY2RDBDNzdBOEU0OAorOjEwNUZCMDAwOEY5RUYyN0RDQjZDNUJDMjNDQjA2RUExNDdBNUJEMzUxOAorOjEwNUZDMDAwMjI2NjZGNzUyMzNENEU2N0JGRjkyMEU2MjlENUNERTlERQorOjEwNUZEMDAwMjY3QjJCREJENjc2REI2MTlDRDdFQkFBODg1RkZBRjhCMQorOjEwNUZFMDAwRjkyQTYxMjcyRjk4NzFERjZEODc3MTVGRkE5Rjg3OTE3QQorOjEwNUZGMDAwN0U5MkUzQUM2RjlDM0U0MzMzOUQyMzFGRDg4N0RGNzRCMgorOjEwNjAwMDAwQjk5M0MzRjM1OEUzRjAxOTE1OTRCNzZERjBGM0EyQTI1NgorOjEwNjAxMDAwRkZEQzcwNkQzOURBQ0Q4MzQ1QkVFOTgzQjZDNEY5MkU1NQorOjEwNjAyMDAwNkVEMTRGMTY5MjFDRTEzNURDMjQyN0E3MTdCRUU3RDVBOQorOjEwNjAzMDAwNjAxRThGQzBFQUU1QzQ3RERCMkIzQThCQjkxRDE2RjBEQworOjEwNjA0MDAwRTMzOUQ0RENFODJEMEY2MkZCREM2QzhERjI1REUzQzczNQorOjEwNjA1MDAwQ0Y5QTEzNkFDREMzRjg2NzlBQ0RFRkE2NzJCNzgyRURENworOjEwNjA2MDAwMUQzRjY1QUMxRkI0NkZGRTBGOTVFMDY5REUzRjg5RjJGRQorOjEwNjA3MDAwM0YxQ0VFMDY4NkZCQTk3MjVFMDdEMjFFMjFGQ0E4MURGRQorOjEwNjA4MDAwQzlCNDBFMzJCMTJGMkVFM0FENUY2NDU3NzRBMkJERjFENworOjEwNjA5MDAwQzVGRDc2MUFFRjBCOThBMzAxRkQ3RkQxQTFEMkJFRUIwRgorOjEwNjBBMDAwRTFCNEE0QTgwRENBNkFBQjg3RDZFRjVDQjQzREExRkRFQworOjEwNjBCMDAwQzIwRTRGQzQ5NzE3QzM4QkI2NkUzMjlEODc3MTBDRTQyNgorOjEwNjBDMDAwRjM2RjRFNzM0N0RDNzkzNEVGNzQ5Q0I3ODQ1M0NFN0IwNworOjEwNjBEMDAwNTAxRjdFNjY4OTgwM0JFN0IyOUU3MzFBMENGOTU4MzVEMworOjEwNjBFMDAwMzRFQTc3NDEyQTNGODcxOTY5OUMyOEU4NjU5RDRGNEIyMAorOjEwNjBGMDAwRjY3NUQ3REU4NEU3ODdERTUyMTlBNjg2RjhCQURBNjgyNQorOjEwNjEwMDAwRkUwQjYxRkUxMTVGNkZGQzlFRjZFNTdENjk1MzA5Q0VDMworOjEwNjExMDAwMTI4NDUzNUQ1NzRFRjNBMDc2RjA1REVERTMwQTdCMjRDNQorOjEwNjEyMDAwMEZGOTMwMzQ5REU4REFERjQ2RTcwMjdCRDkwNzRFMkVCRgorOjEwNjEzMDAwNUYzMzlDM0MyRjU3Q0YyRTk4QjFCOTFGM0U4NzkyNUM5RQorOjEwNjE0MDAwN0NDN0Q5RTdCQTFGNzQ3MjdENDRDRjZGNzBCRjAwQURCMgorOjEwNjE1MDAwRkY1MjFGQTkwMTlCQjA3M0I5NUVFQUIxOUZGNEQwMEY0MworOjEwNjE2MDAwOUMxOUIxQjI5QUYyRDMyMkVDQjc2RkZCNkNGQjNFMURDNworOjEwNjE3MDAwRUQzMzM3MjNGQjU5RUFDREJFRUMzM0I0Q0I5MERGQTQyQgorOjEwNjE4MDAwNURCNjM4NkU5RTMwQkYxQTMxQkY5QTQ0RjNFQkE1NkZFRgorOjEwNjE5MDAwNkY2RTkwNzZDRDEyRTcwNUVDQ0EwQzNEQjEzRTdBNTI5NworOjEwNjFBMDAwRDBBMURFRDAxOUM1OUI2ODhEMDJCREIzRDg0NkU3OEQ1RQorOjEwNjFCMDAwOTkxNjcxOTlDRjk3QUY3NzRBQkI2RUY3M0UxREYxMENEOAorOjEwNjFDMDAwRjM0NjNDNjc4M0ZGNUM0RTdBQzc5RTMwMkZGQzYyRkUyRAorOjEwNjFEMDAwNDhGRUVBQzIxRDQ3QjAzRkIwNzMxMUZBNzM2REJFOTQxQQorOjEwNjFFMDAwQjQwQkQ4MTdGNjY1QUZCQkNDNzhCRENGMjlGMkI5NjMzNQorOjEwNjFGMDAwNzg3QzQwRTBGMTgxODQ3ODRDMDczQ0RBMkNGNkUxQ0VFMworOjEwNjIwMDAwMDIxRkUxRjExN0NFMEJEODg3QTdCRkY3N0UzMUFFNDc0QgorOjEwNjIxMDAwNjcwNEJFRUE3QUZDNUNBRTlGRkJDMzIyODVGMUFBNUFGMgorOjEwNjIyMDAwQ0M1Rjc2RjIzMkVFMDdFMTVFMENDNkUxOEE2Q0MxMjdFNAorOjEwNjIzMDAwQjBGRkZBNURENjczODczRjczRjIzODE5NzNGMzczQjMwNworOjEwNjI0MDAwQjJCRjRDQTFFRkMxQUZGRUQ2MUY3REE0RjdGRjExRTc4RgorOjEwNjI1MDAwMTNGM0FGQkI4QUQxQkY1QUYxQzI2NTI5Njg5Nzk1RUQ5OAorOjEwNjI2MDAwQkNDOUMwRTdCOUY0QTFCNDlFOURERUU5MDgyMDlDQTc5MworOjEwNjI3MDAwRDM3OEJFREVFOTlEMTMwRTYzRkNFMUIzQzYyM0Y5NjY1NQorOjEwNjI4MDAwN0Q3RkZBRDlBM0M1NzZFOEU3RjQ4RUEzQzUxQUU1MDdBMgorOjEwNjI5MDAwNDcyQzc2NjFFREQ3QkYyOUM2NzM1ODMyQUZCQTg3NUZGNgorOjEwNjJBMDAwOUM3QzlEQjhERkM1RTMxQTE5OTk3QTBCRTY4QjlGNEY0QQorOjEwNjJCMDAwNEEyNTdDM0Q5MDY5QkIzNzUxQkMwNkQ1MjdFRERCN0I3OQorOjEwNjJDMDAwNzREQUE3NUMzMkMyQjdDMjhERjE5QTNDODNGMjcwNTc4MAorOjEwNjJEMDAwMjg4MTlDMDVCOENGMzJDQkU5Qzc3RDgwRjQ3QzM2M0M2MQorOjEwNjJFMDAwMkYwNTUxMTg2MjZFQzBBN0UzNjAxQjFEMzc0REVBMzRCRAorOjEwNjJGMDAwRjZBMTc5MjRFMzM4NUEyOUQ3QjdEREQ3RUI5NDM3OTYzRQorOjEwNjMwMDAwQUNGOTFFOUEwM0U1RUNEOTFBQUQ3NzMyQUVFMzQ4RTY1NAorOjEwNjMxMDAwRTc5MjY1NUNBNzA3OUVEN0VDQjQwRTJEQzkwQkI1OTUyNworOjEwNjMyMDAwQzA3NzRCMjZBNUQxNzdERTU5RUYxMEJGOUNGNUQ5QzJCNworOjEwNjMzMDAwNzY5QzhGRDY0REYxOUQ5RjM3MEVDRjE4MEE3ODM0NzIxOAorOjEwNjM0MDAwNkMzM0M4QTZGOTBCNjBDQjk0RkZFRkQ1NTgzODA1RUMzOQorOjEwNjM1MDAwOUJENUMwRkY0MzgxRkYzQjFBOURENEJFMDVFQzQzMjM3MAorOjEwNjM2MDAwOERFRTQ5ODhEREYzNjE5MjlCMUQ4RDA2QjVGQjY1NjM1QgorOjEwNjM3MDAwMzY3RDc3NUZBMzhGOUUzRDc2MDRFM0RGNTEzOTgxN0VDMgorOjEwNjM4MDAwRkRDRjdBREVEM0M4RUYxMzkxRTU3RjFCMDc3NjFBRDBENQorOjEwNjM5MDAwM0I3RDAyNTAxNUYwOTIyRUNFOUZDQkZBNDcxQTVGMUIyMQorOjEwNjNBMDAwNTIzNjU0MjAwM0YwRDlCRkM2RDhCMEVBMDJGMEE2M0I1QgorOjEwNjNCMDAwMjJBOTc4QzRGODcyMTcwQjk3NERDNDNDQkZFRTdCQ0I3MworOjEwNjNDMDAwNTNGMTdDQzQ1RDY1NjUyMzAwOEZCOEJGN0QyNTkwQ0FGRAorOjEwNjNEMDAwNzU1RjMzOUU0RkNEQTlGMTM1NjFEQzJGNjc5N0QyOEU2MworOjEwNjNFMDAwRUI1N0NFQUVCNTI1Qjg4RjAwRURFOERDQTBFQzM3QzM5NworOjEwNjNGMDAwQzVGNTVDRjI4MTg3OTVGQzUxQjhCOUMwRjdFNUQ5OUUyNworOjEwNjQwMDAwRTQ0OEEyRjNBNUUzNUM1Q0NGRjk1RDdDN0Y3MEI1RDg2RQorOjEwNjQxMDAwNTdFRjlFRTUyNkJEOTg3Q0MwNDVGQzkyQjNGQjcyREEyRgorOjEwNjQyMDAwREY3M0Y3QjFBRjFDREY0RkYyODEzRjUzMUNEOEFEQjQxRgorOjEwNjQzMDAwRURDMzdENEFCNjgwREI5RjkyOUZGQUZBMEVEQkVCOTdBNQorOjEwNjQ0MDAwRDBGRUFDNUZBM0I4MzA5OEJEMzRCRkQzQjMwNjEyQkU0NAorOjEwNjQ1MDAwQjFCRDU5OEY5RkQ1MTNEQjY1MDE4MUE3OTVGNkM0NzEzNgorOjEwNjQ2MDAwN0E4REYxNzFDNjc1NzZEMzdFMjZERURCODRGOENFNzkxRgorOjEwNjQ3MDAwQUI0RDQxN0ZGREI0QzJGMzMxRkEwMzNFNzY0MDM5NjczQworOjEwNjQ4MDAwNzIxQkRERUJGNDlDMzM1NEVFODJFRkZFNjQxQzJCNTg0MAorOjEwNjQ5MDAwMDlFMEI4MEE3RjlGOEJERjQ5N0NBODQ1QkExM0Y1NDkwQworOjEwNjRBMDAwQ0VFRTBGRjgzOTFGNUI5NzhFRjk2RjhCRUU3RTlFRTI3MgorOjEwNjRCMDAwOEZBQTFFQ0NFM0U1OTUyQjMxM0U5OUUxMEQ2RTQwM0U0RgorOjEwNjRDMDAwNjFFMUU3Q0IwRTAyOUYzQzIwQ0UyREUzMUJENDdCQUJEQQorOjEwNjREMDAwNURBMjFDNkU2RjBFMDA5RkFDQjZGM0YyQTJCQjlGMjNCMQorOjEwNjRFMDAwQkU1OTZEMEYyRUM2NzNDRjU4NkU4NkZFNTdBN0I2Njc3RQorOjEwNjRGMDAwREJBMEVDNkU3QUE2RjlDODIwMkNDQkY2Q0YzNDg3MjcyOAorOjEwNjUwMDAwODMxREVBOTJGQTM5OTg4Mzc4RUYyOTFCNTAxRTY1MkE3OQorOjEwNjUxMDAwNkJCQ0NDOUNGQzI5RTc1NzdCRTBDRjg3MDcwMEJGRDQzRQorOjEwNjUyMDAwRURFNkY3RENGNEUwNkRENzVBMDVEN0EzNUYzNjFFRjEzMAorOjEwNjUzMDAwMzU2QjQyNEVBNEZFODA3NUZFQjI2QzQ2N0U4QTFFNTFCQgorOjEwNjU0MDAwMjJGOTBBREVGN0QxOUE2OUNFNTdGOTQxQjIyMkUyMTY1MgorOjEwNjU1MDAwRjBCRDM5RkUxODc3QUU4RDhFQ0FFMEZBRENDQ0YzNDI3RQorOjEwNjU2MDAwRTJFOUZBNzY1MjQ5NUI1MjA2OUU0NzBEQUQ1MjUxMEY1MQorOjEwNjU3MDAwM0U2MzM3MjhBRkJFNEIyM0JEN0Q0QUU2RDUzN0Q4QzkyOQorOjEwNjU4MDAwMUVBQzExRTc1Q0VEQ0I0M0FCNDZBMDVDRENBMkY5MzE1RAorOjEwNjU5MDAwQkU1MDlERDc1NjgyRjY1MEY1OEI3OUZFMjYxNkNCRDM4QQorOjEwNjVBMDAwQUQ0RTZEQ0YxQ0UzOEVFNUU5Q0FGMjBBMTE5N0NBNEFENworOjEwNjVCMDAwNkQ0ODREMkRDNEZEOThCNUI5Qjg1RjUyQzdEQTZFRkQ3MAorOjEwNjVDMDAwMDlDMkZCODZDQTkwREYzRkREMzcyOTA1RUYxREFBODU4QQorOjEwNjVEMDAwMzJDNkMxNkEzQjhFRUEyMTY4Nzc2NTEyQkZFRkE2QUU2QworOjEwNjVFMDAwMDNGOEM2Q0RFRkExMDkxNDMwQjY0MTMzOTI1MENGRkY2NgorOjEwNjVGMDAwMzJEMDMwMTI0REUyNERBRTVGOTdCOUZFODFCMTI3RjIzNQorOjEwNjYwMDAwMDMwNkQyRjk5NUJCOEYzNTNCQjFBQzFCMjNEODY4MkM2MAorOjEwNjYxMDAwRkY2QjMzRjI1OUY1NjgxQkU1NTlCMkYwQkYxRTBDMEM0NQorOjEwNjYyMDAwMTVGQkJENTA2RTc1MEQ5QTZBOEU3QkU3ODg3Mzg2RjVGMworOjEwNjYzMDAwRUJERDc0MUUwQ0Q2RTU4REM4REY3NUVCNkM2MURDM0ZCRAorOjEwNjY0MDAwQjMzOTNCRTkxQ0QwMkIyRTI2RTg2MzNEM0Y3NUJGQzIxMgorOjEwNjY1MDAwRjU2MTc4MDE4RkE3MkU5RDkxRjY2RDNBM0ZCNTMyREYzNworOjEwNjY2MDAwMDg1RjIwQUU1Qjc5M0U4OUNFNDlDOUYyOTU0OTNFRUE4MgorOjEwNjY3MDAwQkY1MjBCRDMzRTUyRTU3OTJGOURBRkZBRkI4REU3QjRBNQorOjEwNjY4MDAwOUNEN0VBM0Q5RTlCRTA5MUUzRDVDNEM2MjNCQTFFMTg3MQorOjEwNjY5MDAwRjNGQTgzNDM4MTZFNEJCN0RCNkQwRTEzREYyREREMkVENgorOjEwNjZBMDAwRjZFNzVEODEyQ0VDMjc0M0U3Nzg2NkU4MEYwMkFGRDE2RgorOjEwNjZCMDAwMUQzN0JDMUNENkIyNDFGRjRCRjkwRTlGNkIyRTlCOEMzNQorOjEwNjZDMDAwNzQ4QkQ1MzNBQkZDMDdEMDFGQkYyNzQ5OTZGRkJEQjlFQworOjEwNjZEMDAwNkM2MDgyRjY0OTcxRURGMzY1RkZFQTRBRUMzRjFFOUU1RAorOjEwNjZFMDAwOENBNDU4RDkwOUVEQjVCRjNBN0FDQTA4REY1QTVCNUM2OQorOjEwNjZGMDAwN0Y2OUIyRUM1RTg5RTM0QkJFNkFCRDNCRkQ1MDE4Rjg4MgorOjEwNjcwMDAwRUE5RUQ0QjYxMkQ0RkZERDBCOTgwRkVGRDE0MjdFRjU4RQorOjEwNjcxMDAwOUJGNDZEQUI4QkNCNzVFNUY5N0MwQkJENjM3ODJGQjAyQgorOjEwNjcyMDAwRDBFNUUzQzY2Q0NCQkVFN0EyMzk0QjY5N0ZCNkQ1MjU3MQorOjEwNjczMDAwRThDNUMyRkM5Q0NERkEwMTJDNjI4QTA3RkQ3RjM4RkVCOQorOjEwNjc0MDAwNTYzOEFFRUMwMzhFNkZGRDE3QzNFMUIzOEMxNzgzNjMyRAorOjEwNjc1MDAwQTgwNUJFQkYxNThFOEQzNzE0N0MzQjBGOUEzQ0EwODRENAorOjEwNjc2MDAwOURGOUI4MkVGQzhDRTdDNUE5QTk2NUJFMjZEQzk3Rjk3MgorOjEwNjc3MDAwOTk0NjcxRkQ2MThDRTdCQkU0NkJFQzg4MzYwNkU1QTdCMgorOjEwNjc4MDAwMkQ4MDcxMTBCNjlDREIyQkYwQkVENTNFODZENjIxRjI1MworOjEwNjc5MDAwMTc4NkVDNzZDQ0M1QkM4REZDQ0FDMDYyN0NCMjgxODUwNAorOjEwNjdBMDAwQjRFRjIzRjc0OTk5ODgxM0NBN0Q5RTYxMDYyQkMxN0JGQworOjEwNjdCMDAwRkY4RTI3Q0RBNTc1MkEzRjM4QTcxQUUzRUFBQTY3NUNBMgorOjEwNjdDMDAwMTJBRTg3MEZEODIyNjExQzJGN0MxRjFGMkZDMzE2NjlBMgorOjEwNjdEMDAwNzdBMkJERTQxRDZBRTA3QTk3RTFFNUZBOEZBRDJBQTRCRAorOjEwNjdFMDAwRjU2RkEzMkQ3RkU0NkQwMEM3NEFBNTI0RTkzNUM0NzM3NgorOjEwNjdGMDAwNkEzRUM1QzdGMTNEREVCM0IzNTFBQzVCNkFBQURGQzBFOAorOjEwNjgwMDAwNzU2QUEzNThCNzU2MDhGRDJFREYyN0E3MDVFN0EyMUQxNgorOjEwNjgxMDAwRjFGMzU1RDNBNjNBMjdBMTFFMEFCNEY2ODNGNUU2REVCNgorOjEwNjgyMDAwNTVEMzU2NjY0RkMyRjVDNjk3RUY4NEY1RTVERUE0NjlFOQorOjEwNjgzMDAwMkI5RDMwOTk4RDREQkVGRTQ2NkFBQzNDRUNBRkIwNUFGNAorOjEwNjg0MDAwOTM5RTk4QjYzMjAwN0FBN0Q5QkRBNDBBRUQxQ0E4M0Y0MgorOjEwNjg1MDAwODQ3RUUyMTM2OTUyRUZGMEZBN0NBOUE3NTAyRjgxMUVDMworOjEwNjg2MDAwNTM5QjdBQ0E2MUQ0NEJGOTNEN0E2NzFBRTk5RENEOEY2MworOjEwNjg3MDAwQTk1NDVFMEFFM0ExMUQwM0YzMDhFM0ZENjBEREMzMzQwMAorOjEwNjg4MDAwRjI4RjVDMDA0QjEyOTQ1RDIzRjI2OUZGMENFNkNEOTIwRgorOjEwNjg5MDAwRDBGRjFGQzFFQkU1N0U4NzNFQ0M0NkZCMUREODFFRjEyNQorOjEwNjhBMDAwRThDQUUxRURGNTU5RkNCQ0I0RUU3MTkzREYyNkY3NEY3MQorOjEwNjhCMDAwNTRCMTdGOTcyNEYyNTQxNDYzMTZGOUMxQ0UzNTYzOTYxMAorOjEwNjhDMDAwQTAxRkU1MUM2QUREOUZENkUzRjI1OUQ0RjhGQzE2NzdDOQorOjEwNjhEMDAwOTRFQ0FFQjYyNDExQkZFRUM3QjJFOURFMDRGMTFFMkM3MworOjEwNjhFMDAwRTUzMUY4Q0NCQ0E5Qjk4NEVFRDNGMzMwMDNGM0E5QjNGNgorOjEwNjhGMDAwNDM1MTY2QjY5N0U0RDMwMUVCQThDRjI0MzcwRTM3MEI4QworOjEwNjkwMDAwMjRDQUE3NTg5OENDRUQ2MUY3Nzk4REZCODkwQUQ4Mzc0RQorOjEwNjkxMDAwQjg4RTdBODQxRDJFRUMyM0JCQkNFNzI4NkVERDk1RjY3RAorOjEwNjkyMDAwOTI1RERDQTdCNzc0QzY5NDJDM0M5N0E0QkEwMzRFQjQwRQorOjEwNjkzMDAwNzNGNjE5NjM2ODlGNDY2NUZFNkI0QjRDRjY0RTczNzQ5NQorOjEwNjk0MDAwMDZDNTI3MzUyM0MwRDBDRTc5NUREODM5QUFFMTY3NjY2MAorOjEwNjk1MDAwM0JBN0E1MTExQzcwNThBQjM2MTUxN0QwRkQzNThGQjg2NQorOjEwNjk2MDAwQTJDRTIxNDhERjA3NkM3RUQ0MUIwN0M2NTQ4NTE1OEM0OAorOjEwNjk3MDAwNEYyRTYzMjRBNzlCOEEzM0E3RTAzRUMzMDYyRDk4NzI0RgorOjEwNjk4MDAwMEJDQUNCNUIzMDlFOEZEMzhERUY3M0FGNTAzMDlFRkUyMgorOjEwNjk5MDAwODUzMzk4ODJGQUUwOUU1NDY2RjFBM0FFNERFNkZFQzhCOAorOjEwNjlBMDAwOTYyNEFFN0ZBNDlGRDAwMkYwNDQwMTBFRURGQzQ4QkFCRAorOjEwNjlCMDAwQ0Y2N0I0QjA0QkY1Mzk2NTE0MkZDMzM0MjA4QzdGM0FDMAorOjEwNjlDMDAwNTgwM0U1ODdDQUZCRUExQ0Q5MzY0QkZFQTM3NkJFODg3RQorOjEwNjlEMDAwRTI4OTVCOTJGODM4NzJEQ0JCQzQ3RDgzQjJFQzY0MEQ1MworOjEwNjlFMDAwM0M2RTBDM0M5RUM4N0ZBQjE1NzAzQUMwMUVGMjkxN0Q4OAorOjEwNjlGMDAwMTJCN0ZGREZEQjNFMjI3QjQ1RDJBN0M3NEU1MUY4Qjk2NQorOjEwNkEwMDAwRDBCRUVDQTNGQUYzMzY4QjlFOEQ5RDY3RDc0OTJGOUY5RQorOjEwNkExMDAwMTFGNzA1QzgzQzEwQjdEMDY3MkREOUExQjZBQkYyNjIwQgorOjEwNkEyMDAwRjcwMzY4MjIxRjY0OERCODE3ODA2NTZCRERFNjczRjg4NQorOjEwNkEzMDAwQzkxODhGODFGQTY2OTExNzkyMUM3N0FFREZFNTVFNEExRQorOjEwNkE0MDAwRkU4MjZCQjg2NjM5MDdFNjY0MjFGQUNFRTFCM0JFRDdBMQorOjEwNkE1MDAwQjJFM0VGMEIwOEY3RTQ4MTUxREVBMkM2MUU1NkU4NzJERQorOjEwNkE2MDAwMDA2RUVGMEUxMDc5NThBNzkzREZBNzc4MjNEOEJCMDdFNQorOjEwNkE3MDAwOUNCNDJGQzFDRjg5Q0E3OEQ4MzdCNThGNUY0N0JCOEFGRQorOjEwNkE4MDAwRkNDMkU5QTNCMURGNDVCODFFNjEzQzlCMDU3M0Y4QTZDMworOjEwNkE5MDAwNjMzQkEzQkNBMTI0N0YxN0UzNzc4RTkxQkRBNTRBM0QzQworOjEwNkFBMDAwMTc3RUJFMTlGREE4MENCMzdENjdCMkQ3MkU1RkZEN0NBMworOjEwNkFCMDAwNzM3MzIxRjkxRDU0NUU3NDc3MUJFOUMxOTUyRTU5NUVERAorOjEwNkFDMDAwNEQ2NTU4QUZBMkU4RjdCMDlEMEUxRkYyMTM3QzFGNDAzMgorOjEwNkFEMDAwQjk2MTM3MTQ5MEJEQUNFNjgzNEIwQjcwOTdFMUZEODcyRAorOjEwNkFFMDAwQjgzRkIwRDNCMTExRUQ1OUYwNkJFN0I5NEM3MUIyRDNFNworOjEwNkFGMDAwOUU2M0I5QUMzMDYxN0Y2MTRCN0ZCOURGQUMzRjE4QkY5QgorOjEwNkIwMDAwMDNGMzhDNjQ3RDk5Nzc1RDU0RTVERkY5RjAzQjM2QjA5MworOjEwNkIxMDAwRjNGRDMwRjRGRkMwMEIwRUJBOTc0NERFQjMxQ0NGQUZDOQorOjEwNkIyMDAwNTM5MkI5RkY4RTdBQzM5Q0NGQTlDRkE5MDgyMDczNEE4QworOjEwNkIzMDAwRjk3NDY0Mjc1OUYyQkZBNUJDNkFFNzg3OTM3Q0NBRUY1MgorOjEwNkI0MDAwNUU0RkUyRkJDNzlBMTZBMEI4OUE3NkJFOTBFNDdGOEJBMAorOjEwNkI1MDAwQTA2QjRCQTM3MTkxNzFEMkZBMTg2NzBDRjVEM0Y3Mzg3QgorOjEwNkI2MDAwQzU0MjRGMzBCMTNGQTYxOUU2N0I2NEZBOTJEN0Y4RkREMworOjEwNkI3MDAwQzA3OEZEMjY5RjUyQkZFRDE1RkRDRjREQjZDNjk3QUIzMQorOjEwNkI4MDAwRDZCNTFGNDYxNkZBODkyRDU0OTEzQzFFRjNCRURFRjM4RQorOjEwNkI5MDAwRTI1MjVDNjM4QjE2QTFCQ0REREVGQjdEMUQ0RUVFNDczMQorOjEwNkJBMDAwMjI0RTUwQjBGNUI2RkRDOEFFMERDOUExRjU0OTUwQUVBNAorOjEwNkJCMDAwNEExNkZCMDBEOUIwQUVBOUI4NkVGMUJDQTU4N0IxMUVDQworOjEwNkJDMDAwRjMxQjQyQkU4N0E2QTI5RTlBNTU0RUYxRUJFNzkyODMzNQorOjEwNkJEMDAwQkZDMUVGRUVCRUFFOTg2MjA1MTJFRUQ1OEQzQ0RGNEUyMgorOjEwNkJFMDAwRUE0QjM3RTIwQkRBM0JCNDA2MUVGNzc0MDdBMjY4NUY4NAorOjEwNkJGMDAwREM5N0ZDRjY1NDBERjk1MEUzNzJCMDZDRjVGRTk1MTg3NQorOjEwNkMwMDAwMTc3MTZBN0VFMjJCQTdEQkU2QzNGNUREMDlGRTFEQUUzOAorOjEwNkMxMDAwN0I0RDZFMUJDNTkzNTZFMDNEQzBGMEJFNTk5OTY5QTBFRgorOjEwNkMyMDAwQkMyRUYxRTQ2N0IxMEJFODQ3RUQ3Q0E2RDBCRkQ2N0I2NAorOjEwNkMzMDAwNzVGRUZFRTNBNEQzRjdCREVFRUYzOTMwMjk4QUZENjk3NgorOjEwNkM0MDAwN0U0NkY5MzM4ODg0MEY0RDdBNTVBRUVCRjFERkM1RjdGOAorOjEwNkM1MDAwMkZGMTI5RjFFQkQwNDI4NDU3MURFRDg2MDQ3MDNEOTk0OAorOjEwNkM2MDAwNkNEREI3Q0Q5MkZBMzNGNTlEODIyOEJDQUQ1NUJBQkMyOAorOjEwNkM3MDAwNjg5RjgwNUU3QzEyRjlBNDZFNTRGN0FGMTUxRkU5RDNBQworOjEwNkM4MDAwNEM2RUNGODRFNTdEMDU5NkZCOTE2NDVDNUU3NTczQkJBRAorOjEwNkM5MDAwNDZDMkJGRTRCNTA3OUNFNjdEQTc3ODc4RTNENzRCNzc3QgorOjEwNkNBMDAwQTEzNTNGQzMzOTMwMjlFRUJFRTAyNjNFOEUxNjI0QkUwNAorOjEwNkNCMDAwQjE0RjBFMzg1MTRFOUE4QzMxMDZEQTJCQ0Q5QUVGQjc4MAorOjEwNkNDMDAwMDFDQTJCQjE5M0REMEM3NkI4NjU3Q0Y5QkM0N0RDMEZBQgorOjEwNkNEMDAwN0M1NEQ4NTFGMUY1MUU3MTlGNzJGQ0ZCQ0Y4NUZENzA3RAorOjEwNkNFMDAwQ0ZCRTlCNDgwRkY3NDUzRjNDNTA4REY0RjVFNDMzMDM4RQorOjEwNkNGMDAwQ0ZFN0Q4MDVCQ0RFOEJGNERCMTcxRkREQkI4RkM3NzU3NAorOjEwNkQwMDAwQjU4OUNFMDhCQTU4RjFFM0E5RjY2MDAwQ0Y5M0E5QTNEQworOjEwNkQxMDAwMTlEOUJCRUEyMDNFM0VEMEQyQzBCOEIwNzc1QzFBMUI2RQorOjEwNkQyMDAwNkU1QTY3RUYxRTdBMURCRkRGMzlDM0EwRjM3REFBQzc3NQorOjEwNkQzMDAwMTY0QzY0Njc0QTNDMUQ0Qzk2Rjc1NDcwQkVDOTk2N0M0RAorOjEwNkQ0MDAwMzNFQ0Y3NzQwRkJBODk2RkJBMTNGMUNEQzE2NEFFQUZFQgorOjEwNkQ1MDAwMTAwRTMzM0RFRjFFOUE5Rjk1ODgzRTMxQkRDOEY5RUE2QgorOjEwNkQ2MDAwNjI3Q0QxMjFFRTRCQUM0NURDODA3RjUzMjNDRURCOUY5MAorOjEwNkQ3MDAwMTJGNzA0Q0Q0QjE2RjcwNTE5REMyRTk2Rjc1Rjc0NjhGMQorOjEwNkQ4MDAwODE2NEI0QUJFNkY1RUM1MzA3RTg1QzRBOEQyQjkwMzI5NgorOjEwNkQ5MDAwMDlGOUYyMjhCNzdCM0YyRUUxRjc5NjdENkMwRkE0MjAwRQorOjEwNkRBMDAwOUUzRjNFQUEyQTREQjRDRkNGRjMwMjY1OUVENUM3NzY0QgorOjEwNkRCMDAwREZFQTkxNTAzRkZGMTc2QUEwODlBQUFERjZEQzI5MTZEOQorOjEwNkRDMDAwMThGQkNGNjhERkVFNTI2OUZGMjhFRkJFQjlFQTI4NjhFQQorOjEwNkREMDAwNUYwMTg2MUVGMkQxQkM1Mjc3MThEN0RGOEVERjM3QkMzOQorOjEwNkRFMDAwOEY3QTY4RkU2MzBFREY3MjE4RTdFMEJBQjE1RjYyRjk2RQorOjEwNkRGMDAwQzQxQThGQ0Y0MTcxQjI3QzA1RUYxNTVGQkEzNkNGQTBCMAorOjEwNkUwMDAwRkRBMzY1NENEODE5NDNDQjRCODczMkY2MTRGRTUzQzYwRAorOjEwNkUxMDAwOUQ5RDc0Q0ZCOEE4MEZCNjk0QzFGQzQ2NjY3NEQ4RENBQgorOjEwNkUyMDAwMDA1M0M0MUQ2Q0MxNzM0RTJCOUI4MkQ5RThGRjVEQkIyMAorOjEwNkUzMDAwQTZBMDA1RTM4Rjk5OTk4MUNFQUI0MTFGQUY1ODMzQkMxMworOjEwNkU0MDAwMUNGREMxOEU0NzQ0N0ZFMTExMkRFOEVGQkQ2QzBCRTVDMQorOjEwNkU1MDAwMjk1MEZGRDQ5QTI5RTU5NDk3M0I0NEY2N0YwM0Q1Q0Y3OAorOjEwNkU2MDAwN0JGQ0IyMkY4RjE5ODhEM0NBNzI4Qzk5MTVDRjkxRjAwMQorOjEwNkU3MDAwRDQ5Njk3ODI2RTVGMzA1OTk2OTdFODU4NEU0RjY2OTYzMworOjEwNkU4MDAwMzg5ODNERTY0RjUyOUNBREEzQzc3RkJDQTMxQ0UzNjA3RQorOjEwNkU5MDAwRjNBNzM0OTQ2QUQwN0Y5RUU3QTcyRDg1MjAxQTEzREFEMgorOjEwNkVBMDAwNEE4QzAwNUU5OUVCQjlBRjNDMzkwMzZGQ0QwQjU0RTNDQworOjEwNkVCMDAwN0EzMkQyNzM3RjM5Q0UyN0JEOUZCNUZGNzQ1NUM0NTM0NAorOjEwNkVDMDAwRDlCQTE2RUNBRjA3QkVGMEQ2MTY4Q0FGQ0FGNjZGREU5NQorOjEwNkVEMDAwRjM0RTRCNzg2MDhDRUZCRjFCQkI1RkU5M0JFRTBDQkEwNworOjEwNkVFMDAwQjdFRTMwODZEODcyOTc3NUVCM0M5RjU3RTRERjBDRUMxOQorOjEwNkVGMDAwMkFFMjc5NDVBMjNDQkM4QkU3NURDQjcyMzYyRjc3MkMxQQorOjEwNkYwMDAwNEZCQ0NFRkZEQ0NCRTVBRDIzMjk3MUZEQ0ZEQzVDNUY1MAorOjEwNkYxMDAwMDBEQ0E0RTc1MzhFQjFDMEI2MDQ3MjU0RTE3NjUzQkJEMworOjEwNkYyMDAwNDM2MEU3MzlEMzYyRjI3NEFEODNCMTg5OThERkU0RTQ1QQorOjEwNkYzMDAwNzBDQTdFRTJCRkJGNTM4Q0MzQzJEN0E2MjExRkNGMTQzNQorOjEwNkY0MDAwN0MzRUM0QUZGMDNDQTU1REM5MTFGQzNEMDZGMEIyQjQ3NworOjEwNkY1MDAwRUZDMTdDQjY4QTc4QzQ1NjE3RkJFMTJDMTgzQTMzODkwNgorOjEwNkY2MDAwODVGMERFOUM4QzdFNTAyRUE0RUYwM0RCRERCMUZFREVDRgorOjEwNkY3MDAwRTAyMkNDQTYwRTA5NkVDNkZFQTY2NkU1OEM1RTkxMTdEMQorOjEwNkY4MDAwRUIwN0UwNkU3NjhFQjFDMEFENEQ0Q0MzRkE3MDdGOENDRQorOjEwNkY5MDAwOTNGNEUwQjM5MENGMDNGODg0RjAwNUMzM0M4REJGMUY5QQorOjEwNkZBMDAwRDBEMTM5MzIxRkY1RUY0ODRDQkEzMUU5RjlFMkNFRUJENgorOjEwNkZCMDAwRTgzQ0NENTJBRkQ4MUZGMUYxRUYzMzRBNzlERTRCRjcwMQorOjEwNkZDMDAwOEJDOUZDRkU0QzY3Njc4MTc5M0ZFQjIxQjdDODMzQjhBQQorOjEwNkZEMDAwNkJFNjQzNzQwRUJBRDNDRUU4RkNDMkY2OTIwQkU2MUQwNAorOjEwNkZFMDAwRDY2MDVDQ0U2NDM3RDY2ODUxRjJDNzZBMzAyRTM3MTY0OQorOjEwNkZGMDAwRkI3QjgzQ0UxRjYyM0YzRTExN0ZDNkI4NUFDNjhBQzQ1MAorOjEwNzAwMDAwRjQ5N0VCNjBDRDc5ODM4NUZCRjVENjk3QjFGRUQzNTkyNAorOjEwNzAxMDAwNzhFQ0M1RTcxNUVCQ0ZFQTM3RjZFRTRGMTc3MTdDODFCOAorOjEwNzAyMDAwNzc0REUwNUQ0RjBDRTc1RUM5QTc4MDZGOUI4OUJGMTY2NworOjEwNzAzMDAwMDg3RTkzRkI4MTY3NzY4RUQ4NjhERTdGOTVFNzg2NDA3MQorOjEwNzA0MDAwM0YzRjhEQkY4RjEwRUU0QzIyN0ZBNTU4MEI1QzgzRUQyOAorOjEwNzA1MDAwOEIzQkQzNjg3RjQwRjI4N0U0MEI0OUQ3OEVCNDA2OEExNgorOjEwNzA2MDAwQjc3NDNGQUNEMDM5QUU3OEI4MEU0OUI4RDZGMTdCRkJENworOjEwNzA3MDAwQjJFNjg0NTRGMzNERTM1MjFFQTBGRjBFRDFGRkI4ODk1RgorOjEwNzA4MDAwMjQzRjhGNzI3OTAwQjlCOTA1RTUxN0VGNjFDMTc5RjgyRQorOjEwNzA5MDAwQkI4QUNDQkY0NzIwRTEyRjQyNUUxQzRGNzRFNEY4N0ZDRgorOjEwNzBBMDAwQzEyNUYyNTczOERFN0FFM0JGRkY0NUU4OTk0QkY0MkM0RgorOjEwNzBCMDAwRUVEQzRGRjNBQ0U5NDM2RUFCQkM1RTlFQzc3NjJDRUFDOAorOjEwNzBDMDAwRjU0MUJCMzE4MkZGM0JEQTNGQTQ3QkM1M0E3NkE5NEM0MAorOjEwNzBEMDAwRjFGMTc5QTNERTJBRUVEMUM3RTM1RjlEMDJGQTM4QUI2NgorOjEwNzBFMDAwQTcwQ0ZBRDI4Nzc0RThEMTlGNTFBNzMzRDZGRTA3REVFQQorOjEwNzBGMDAwRjFEMzlBNTE1RjhBN0I3QkQzNTU1ODZEQzZDNEUwRjhCMworOjEwNzEwMDAwOTM5QkRCNTcxMzQzODlFMzU4MEQ1RThGNDU4RjNEQkMzRQorOjEwNzExMDAwNkMwQUZCMTBFNjdGQTU5QkU3NUY0REVDMEFEM0VGRUExNAorOjEwNzEyMDAwNDhCOThFRDc1M0ZEM0M5QzhFODZFN0ZGOTI5RTcyNUREOAorOjEwNzEzMDAwNDQ0RkI5QTQ5RUUyRUYwRkExQ0QzQjA2RDdEN0FFMjJCNAorOjEwNzE0MDAwMDVFQ0U2MEE1QjIwMTNGREFGOEY4RUZFODRDRUE3MkNFNAorOjEwNzE1MDAwMTJGOTM5QTMzMDNGMDdEN0NENjM0MTVBNTczRUM1NEE4QworOjEwNzE2MDAwOUVBNzMzRDA5MzgxRjlEQUQ2M0MxREI2OTk5RjZCOEREQgorOjEwNzE3MDAwRTdBQjE4MUY4NTg1RkQyNkUwMTBFQkMxQjU4RUFFNjcyNQorOjEwNzE4MDAwNzkzQ0MzMkFDRkIyMEM3MEQ2RDk4Njk4RUFERDdDREQ3MworOjEwNzE5MDAwOTI3NDAwN0EzN0QzM0RDNzQyOEU4RkVGQ0NEQTgwRkFGMworOjEwNzFBMDAwRjY0RDBGQ0ZCMzQ5MUYxMjE4OERGMzk3NzIwOUVCQUE1MgorOjEwNzFCMDAwRTAxM0RCMEZBRjczNzNCRDcxNUQwMkZFOURFQ0UxN0FFRQorOjEwNzFDMDAwNzZDMTNBQ0UzNzFERkZCQkY0MUFDNDdCQzc5QjY5QTlCMQorOjEwNzFEMDAwQ0I0RDdBQTI0Q0M4QjFFQzU3RUEyMUY5OURBQzlGMjI2NQorOjEwNzFFMDAwRkE5QkU2RTE3MjUxRTZFNjdDODc3MDI0Q0EyNzI4MzNEMQorOjEwNzFGMDAwQURBRkM0M0ZBRDlDN0Y2MEJFNjEzMzdGQkYyOUZBOERDOAorOjEwNzIwMDAwRTE1M0FDQUIwMkNGQjUzQUUwMTdGMEI3RDUxRUVFOEYyNQorOjEwNzIxMDAwRjk0OUM1OUQzNkVBQUY2Mjk3ODdGMjMyMkJEQTM5MUVGQgorOjEwNzIyMDAwMkJEQUY2RDlBQTRERjg4OUVGNkZBOTg3Q0JEMTA2NzE3MQorOjEwNzIzMDAwMEZFRDIxMUJGMDFCRTJERENERTEzQkIzMzM4N0Y0RTcxQgorOjEwNzI0MDAwMjIwRkI3MUIyRUJFNkU1QzlBOUVEOTIwRjIzMTgwQkVGMworOjEwNzI1MDAwOTRCRjU4RkJEMjgwMEQ1NjNEQ0RGQjRCRUYxNzVBODFBMgorOjEwNzI2MDAwRTdGMEQyMUY2MjdFQ0MyOTAzM0M0NTE1ODBGQjRCOEY5MworOjEwNzI3MDAwRDAzQjdBNDBDN0YzQjZERDBGMzNEQThGMUYzNjI3MzBBNQorOjEwNzI4MDAwREEwN0U1RkFBMDdCOEMwMkZEMTVCNDcxM0Q1QzdDM0YwQQorOjEwNzI5MDAwRDgzMTI4Nzc0RUI5MkVCQ0I2Q0QzQ0RFOUQxRThGRTU4OQorOjEwNzJBMDAwMUM2MUM1M0E4RUJGNjE2MEZGM0M4RDRGRThFNzU5QjI2MworOjEwNzJCMDAwRTMzOTNDQzcxRjZDQkYwQUUzNEVGMkZCNTY0MUZGOEIxQworOjEwNzJDMDAwQzE1NzhDRjA4RDhCQzE4N0ZENTNGRThBM0JCODFDRkJFOAorOjEwNzJEMDAwQURGQkNEOEUwMUU2N0UxRkU4RTk3N0RFMTQxN0VBRjlGMworOjEwNzJFMDAwQjVCMEVFOTA3NDg2MEVFMEI5OEI4QUREQTkwNkRFOTMwOAorOjEwNzJGMDAwMDBGMjZDNDM3RjQ3OEU1QkExQzlERkNCRTkyQUM2N0JENgorOjEwNzMwMDAwQzIwQjdBQzY5MTc0RkRERDMzRTZGOTZGRjJCOEZGQUVCOQorOjEwNzMxMDAwRjRFREQwNDMzNDlGRUVFRDAwQUYyRjg2OTc4RUY2Qjk5MworOjEwNzMyMDAwQ0I1REI4NEUxQzYzN0U1QzI3MjRCQ0MzRTY3NDc5MzEwOAorOjEwNzMzMDAwNUZBNDVFQUMxRjMwNUYxQkZBMkZFOUJGRjBCMTE1ODg2OAorOjEwNzM0MDAwQjdDRTI5NzQ0RjQyM0M1RjRCM0EwRDY3NUM3RUE0OUZEOQorOjEwNzM1MDAwMzYxQzAzRkM1MERFRUQyOTEyRkE4NzkxOUY3QkZDQTVCOQorOjEwNzM2MDAwM0Q0RkYzN0IyRDM4NURFQUU3NzAzQTc2Nzk0MjVGN0FEQworOjEwNzM3MDAwMzI2MjcyMDhGQTlDRUUyRkFFQjhCRjQ3MUZCNUYzRjcyMgorOjEwNzM4MDAwOURCOTczMDA5RkJGRjY0ODM5QjdEMjI1M0REOEVFQTIwQworOjEwNzM5MDAwNEI2NjA1NUY5RjdFNzE1NDY0MTVBNzMzOERERkQxRUU3OAorOjEwNzNBMDAwODkyODBBOUVBMzZENjg0MjdGNUJFQTA5ODRDNzlDQUY2NworOjEwNzNCMDAwMjRFMUU5QTEyMzAzM0E4RThBQkQxRjM2ODdGNzU3MEZEMAorOjEwNzNDMDAwRjI4RTdDNTRBMzM2MjgzOTBBRTkwMThBQUY2NkExMUVFMQorOjEwNzNEMDAwODA3MjU2M0I2RkM3NzZGM0ZCMUIyNDlFNkE2RTg0NEUwOQorOjEwNzNFMDAwQzFFRkZDNTc0RjIxQ0Q0M0UyMkI2QjRFRDQ1NjUzODg0RgorOjEwNzNGMDAwRjlDQUZCMDc3RjY0QTJGMzExQjE1RjgwNzhCOThFRkNGNAorOjEwNzQwMDAwMERBRUFGNkJENEUwNDBGNDVCNTk5NjgzQ0VBMUMyM0E4NworOjEwNzQxMDAwNDRGQUU1OTA4QjY5MkVFOEVGNTU3OEUyQkEzNDU1QkQxMQorOjEwNzQyMDAwOERDRTA5NEQxREEyOTAxQzgzMDY5MEYxMUVGQTNEQUUzMworOjEwNzQzMDAwNkJBRjRFRTY3OTVCN0ZGOUQxNTA5QzY3NDYzMkU3NDNFQworOjEwNzQ0MDAwRThDNzI5RkE3MUQyM0EyOEQ2ODM3RkM5MDVCQjRFODk4RAorOjEwNzQ1MDAwRTlFNTQzOEE0MkZEMUNGQTg3Q0IzN0FFNTA2MjdDODk0RQorOjEwNzQ2MDAwRkRBMUZENzQ0ODk5MzU5MEQ2Q0I4RTBDOTExQ0Q0NjU0NgorOjEwNzQ3MDAwQzkyN0VCQkQ5RTc1RTU2MkJERDk1RjQ0RkYyRUU2NkY1RgorOjEwNzQ4MDAwMkE3NzREMDM5RTlBMzBCRDNEOEE1NzRFMzc4NUQ1Njk4MAorOjEwNzQ5MDAwRkYwOEUzNEUwNTdGRDM4NUZBRDNDQkY5RkE1MDVFNTg0NworOjEwNzRBMDAwRjUyMjVDQzMxNEJBNUZGOTcwNTJBODkwREZEM0NCQzc0MgorOjEwNzRCMDAwQzkxNDcxOUI0QzkxQUY4Q0Y2MDIzRTIzNUVBRUZGNDcyMAorOjEwNzRDMDAwQTZGMEU3OEZDNTMzRDM5QjM4Q0VCMzU2RDRENzhCN0I4QQorOjEwNzREMDAwQUQ1Nzk1MjRDRTY3MUJFODU1MkNGMTk2NkJDNUJFMDVCQworOjEwNzRFMDAwREVGRkVCRTU3RUE3QzhCM0U1RkIxQzYwREYxMzdFNEIzOAorOjEwNzRGMDAwRUY5QTQzRkI3NjVGNzQ1RTlGQzJFRjZGRTBGQUUwNDM2MgorOjEwNzUwMDAwMjVGMEVCMUIxNTdDMDZFOUZFQkNGMERCMkFFNUJGN0YwRQorOjEwNzUxMDAwNjQwNEJDOThERjU0OUI5NDM4MEZCQjQ0Q0NBRjU2Q0M2QQorOjEwNzUyMDAwRkZFMzQ2N0VERkMyN0NEQzRGMDNGRDMxRDZDQkU3QjEwMworOjEwNzUzMDAwQTg2RDZDMzlEMjdCRDExQTg1RjZEM0U0QkVCREE0NkY5OQorOjEwNzU0MDAwRTU3QUQ1MTI0RjlGOEZGQjY5RkRGRTE2M0ZDQURGODc5NAorOjEwNzU1MDAwMUYzNUNFRTI0N0M5NzFFM0ZEQTlFMzhERDk5NkI4RkY4NworOjEwNzU2MDAwQkNCNjIxRTI5RTBCREU3RTNFRjMxM0RDRjM1QjA3NThENAorOjEwNzU3MDAwRjZGRjU4NkJDNkE1REQwMzBBRkU1MzM4MjE3QzNBRTlCNQorOjEwNzU4MDAwNUJGOUZFNzhBMzkzODVDRDcwN0MzMjk0RjIxRTA2N0E2NworOjEwNzU5MDAwNDMzNzIxN0Q2MzcwMjRCM0IwMTkwRTM2OTlGRkVFOTUwMQorOjEwNzVBMDAwOEJDNzVEQzEwRUU3RkUwQjNDMzdCOEM5NEVBNzdCNkE5RgorOjEwNzVCMDAwN0JFMjYwQTAzRjhDMTRENDQ3MjU3M0JERTM2MzdFODNEOAorOjEwNzVDMDAwOTRBRjlBQzk4OUZEODc3MUMyQ0YxREU3RTZGRTcxQ0FFMworOjEwNzVEMDAwMzFFOTRGMjdGOTUwMkY0QTdCM0NGRUJCODYxRUJFQjVEMgorOjEwNzVFMDAwREE5MzE3OEIzRjAwRkY4NkNERkU1MTdDQkYyREEyREZDMworOjEwNzVGMDAwNkZDRTJGRjk3REYwNEJDMTdGODlERjVEM0MzOTQ0RjFCRgorOjEwNzYwMDAwM0RENkE2NTAyRUNBODQzMkFCMUZGNDg4OTdBRkU3OEZDMQorOjEwNzYxMDAwNzg5M0U5N0I2OTU3NTdDQ0IxQjY3QjBDREI4REM3Njc5NAorOjEwNzYyMDAwRjIyNUM1NzNDQ0Y2QkIzMjA0RjUxRkVGNEZGRUVFNEVDQworOjEwNzYzMDAwREVDOTM3MjlGRkYzNzdFODI3NDI3RjZGQTQwNEI2MjAxRAorOjEwNzY0MDAwN0ZBQzExRjlGMjFCRkU3QTIwN0IzRURBNDNGRjZDQTc3OAorOjEwNzY1MDAwRkRGQTkyNDc5N0FFQzA3QzY2NzdCQjYyRDBGOUEzNUQxNgorOjEwNzY2MDAwNTY3OUY4Q0VCMkY2QzExNTgwOEY3NjQxQTcxQTNGOUZBMgorOjEwNzY3MDAwNDc4RDNGQUEwRjc1NjM3RTM1MUY3RjYwRkIzRTQ1MzMwNAorOjEwNzY4MDAwRjFEQkMwNEFERUVFMjVBRkREMTI5RkQ5OEI2NUU4NjdERQorOjEwNzY5MDAwQjdENzkwN0VDQkJFMTlFOUQ4M0VBMEExMUREMDFGN0ZFMQorOjEwNzZBMDAwRUYwNkUwRTlERkMwQzg4RUVFM0Y0RUExRkVCRjMzNkVBRAorOjEwNzZCMDAwODM4MkJGQkYyNUU3RDk2QTlCNTU2OEMwNzdBRDk5Qzk1QQorOjEwNzZDMDAwN0U1QzZGMzI4REQwNDE5QzY3Q0Q3QkQxMjgyRThGMTM4RAorOjEwNzZEMDAwREVFQkQ0RDBCRjFBNkUwNDBFQTFEQ0M5NzlGOTU0QTMzNQorOjEwNzZFMDAwM0ZEQUVEQzlFRjcxRjhEQTdBRTI0QTdDQkQ2MTZDQjUzOAorOjEwNzZGMDAwQjA0MzM3NzI3QjRDNjU0NzE4QjdDNzY5NURDRjVDM0VCNgorOjEwNzcwMDAwOUNENjNEMzk5RkNDMzRCMTZFNjRCMjEwRTYxRjQzRkI2QQorOjEwNzcxMDAwNTZCMjUzOUM3Q0REQ0Y1Q0NFN0YyRjRGRDIzM0U2NjdEMQorOjEwNzcyMDAwOEUxODgzN0VFNjkwMzU1MTZEMUU3Q0Y3RDI3QTVCQzI0RgorOjEwNzczMDAwRkIzNTNFMTQ3ODg3NzlCQzZGOUVDN0M1RjQ5NTZDNjc5RQorOjEwNzc0MDAwRUYyM0NFMjhGOTNENzk3QTYyRkY5REIxN0JBOUJFRTQ5MworOjEwNzc1MDAwRDFGNDlCNDkyRTlCNzVCQTBGNTFFMjdGQjgxMUZDMUNFNgorOjEwNzc2MDAwRTFFOURGQkU0MTQxREMxQzE3NzkwNUM3NTczREFEQTBGQgorOjEwNzc3MDAwMURGOUEzQzVDQzUwMTNGMDUzOEZCQzJFREIzMUI4QzIxQQorOjEwNzc4MDAwQTQzN0ExN0ZBMkM3ODZCODNDNzExOTZGNzFBNTcwRkY5RAorOjEwNzc5MDAwRTcxNjIzQzg1MkM2NTNERTJFRjlDRjhCMzdGM0RGREQ1MQorOjEwNzdBMDAwRTgxMzFGOTc4ODJGQTU5MkRCRTUzNUIzRjlFRjhFOTY4NgorOjEwNzdCMDAwM0NBQTExQkRBQjlCRjlFRjBFRDY2Q0RCNEVFN0VDRDhDMworOjEwNzdDMDAwNEY5OTFGRTVCREE2N0RCQjUyMDFFMzU2NkZEQkFFMkM4MgorOjEwNzdEMDAwMzBFMTZGNDA0RDg0RjJBQjJGRjNDODdEODcyOEQ5Q0RCRgorOjEwNzdFMDAwRjE3QzhERjEwMkI0NTMwRUJCQjhCQzlGMkE3MTg3NzEzNgorOjEwNzdGMDAwMUZFMjk0M0Q1NDgzRUQ0RUU1MjRGQjcxOUY1MkUyRkI2MgorOjEwNzgwMDAwRDVFREQzRThCRTAzQ0YwRTQ3MTQ5RkFEQjY4REQ5NEU0QworOjEwNzgxMDAwNjhENzNBNTJGNzIzMUYwRDM3NDJDMzEwMkY2OTVBQjA2OQorOjEwNzgyMDAwMDNCRjRGNERGN0Y4NzExRkMzRTc2MDYzNjhCREJFNDRFNworOjEwNzgzMDAwM0M0Qzg4RTM4NzA5M0ZFNTcyNzI2MzhBNTdDODA1QTMwOQorOjEwNzg0MDAwQkNBN0FCNTMzQ0QyN0UyMkZENzREOENFRTdCMTgzNzE4NgorOjEwNzg1MDAwNzgyM0RFQzBCODE0RTRDMzIzRkM3NzEzRkFENzQ0MTVBOQorOjEwNzg2MDAwQ0MxNzg5MUYzN0M2NEY4MTJCMTFGRTRCODdCMzVENDc1RAorOjEwNzg3MDAwQkQ1RTJERjQ0Q0M5QTM5Qjk1MEY0RDcwQ0Y0MEEzMEE1QworOjEwNzg4MDAwRjk3M0RCMDYwNUUzNjQ1MDRGN0EwNkRBMzNDQzRCRUEzMgorOjEwNzg5MDAwQkY4REZCQTVENTUwQkZDMEE0NTdFNDNDMTJFODk3MjA4QworOjEwNzhBMDAwQzJFNzdFQUZGMzIwRDcyRjUxQkUyRjIwRTA4REE3RTc5MAorOjEwNzhCMDAwOUMxNDFGOEQ1RjBFRTYwMUJERDdDM0MzRDEyRjNFOUMyNAorOjEwNzhDMDAwOUY0NEZENDk3OThGOTdDRjM5ODJDRkZCQUZERkFDRDg4QQorOjEwNzhEMDAwRENCNDdGNDI3NkE0ODQ0RkI2N0IyMzY1NEEwOEUxOTlFNQorOjEwNzhFMDAwMzBCRDkzRjA1MEJCNUVBM0Y5NENENTgzNDM2RjMzQzlEMQorOjEwNzhGMDAwNDM1RDBBQjdFM0Y2REZGODNFRERGRjczRkZBRjhFMTI5QworOjEwNzkwMDAwM0ZENjgyM0Y0REZFNDREQjUxRkQ3QTVDNTdDMjRGQUEwMQorOjEwNzkxMDAwQjhERjc1MEQzNzQ5RDg4M0UyNUVBQzZCM0FCOEZFQUQ3RgorOjEwNzkyMDAwRUREOEFFRTEzRDkyOTI0RkYzNEVFRUE3RkJCNDZBREI4OQorOjEwNzkzMDAwMUQwQ0ZEMjhFMEJGQTU0OEVGNzgzRUJENTQ3QTgyMUU5RAorOjEwNzk0MDAwRTI3RTUyNTgxN0YxQkM1MDFFRkEzOTUyM0Y0Nzg0M0QyRgorOjEwNzk1MDAwQ0FEQ0ZDRkRCRDAyNEYzMUZFMDlCNUE0NThGNEFCOEI2NworOjEwNzk2MDAwRTQyMkVGRTQ5OEZEOTg5NzU5RUI1N0U4QkNBNDg0MjdFQworOjEwNzk3MDAwQkQzNEIxN0QyRUY1QTJENEQ3MTgzNzBDOUFGNEZBNUEzQgorOjEwNzk4MDAwQTRFQjc4MkE0N0I5M0ZDQUYyNzE1RDk2NzBDNkQzRTk3NQorOjEwNzk5MDAwRTUxNEFFQkYxM0YwRDMyMzI5MDlENjJCQjk3RUU3M0RGQQorOjEwNzlBMDAwQjY0M0MzN0I5MTI0OUY1QzgzRjQzNUYxQzk5MzI5RkNEMgorOjEwNzlCMDAwN0VERDI3NTMzNEVBRkZDMTEyQkVCRkY4QTA5REFGNTM0RQorOjEwNzlDMDAwMEYzNjM5Mjk1RkYyRDU5Qjc4RkU5NkU3NjYzRDhBQ0Y2MAorOjEwNzlEMDAwNDNCNjc5MzU1ODdGQTgzRjg3QTNENUI2OUNDRUQ3ODFDQgorOjEwNzlFMDAwRkMzRDk1NDI3Q0UyNjU1QzBGNzJCRDc3RkZGMzVDNkZGNgorOjEwNzlGMDAwRDU4NERERTRDRkQ2ODRCRTVGNDE3OUFERTkyRTNGREQ4RAorOjEwN0EwMDAwRjcxOTNBQTg1RkVGODlFMTM1OUU4RjdDM0JGNkQxRUZGRAorOjEwN0ExMDAwMUQ1RkQzQ0VFNTBERjQyNkYxNTEwQzdGMUNDRjUyNEVFNQorOjEwN0EyMDAwQTQzQzQ0RTRGRTBERjAwMUI3N0JCOEJGNTQyOENFM0IyNAorOjEwN0EzMDAwNTYzQUZENzQ1RUIyNTJDNDU1MEJDNUI5QzdFMjYzMDEzNAorOjEwN0E0MDAwNUEwRkU2MDkzQTE0RDk4MkFGRTJCQzJBRDZDNEM1NTUwQQorOjEwN0E1MDAwMkZEMUVFQUY1RUY2RkEwOEZDNURCMEFBRUMyM0Y0OTRFOQorOjEwN0E2MDAwRjIwODdFQTk0NTZFREYxMUZFREYxRTQxRUYzRjA4RjlFNworOjEwN0E3MDAwQUYxRUQ3NEVGMjU2RkQ1MTAzQzlBOTdCM0FENzU3RUUzOAorOjEwN0E4MDAwRjdBQzdBOTZCMTdCQzQ3Q0Q3RDA3NzUzOTNEQkNCNzFCQworOjEwN0E5MDAwNUY3OEVBRTMwQUREQUJEOTE3OUM4QkYwMUMxOEZBNkYwQworOjEwN0FBMDAwRUIwRjc4RTdBMjNDOEJERjg3OTJFNzY1Q0UwODM5Mzk4OAorOjEwN0FCMDAwQjU1NTE1QkY5N0Q5QTA1RkM4QUVCRTU4N0YyQ0ZBOTZCMgorOjEwN0FDMDAwNDJGNzk1MDg5RkVGRDRCNkQyNDk3RjQ0QkY3MzZCMEE0MworOjEwN0FEMDAwRkQ3RUM5NjdEQkJFRjdFMzNGQTZFM0VGODM1Q0VEQzczRQorOjEwN0FFMDAwRjUzRjdENDU5MEY4QTUzQkMzRTVERkM4RTNBQ0QzMzE1NgorOjEwN0FGMDAwMEVENUQ0N0VDMDhCRTc2QjNFN0RGQThBMzFBODhGRjExQworOjEwN0IwMDAwREUyRDlDRkZDOUU3RDU2NTg4OTdFNTRGM0NGNzJEQUM4NgorOjEwN0IxMDAwQUY4RTI4RkREMDJFM0RCNUY1RjFGRkMwREY4MUFBREM4OAorOjEwN0IyMDAwNUM0RkJGRjNCQ0UyRTk1N0M4QkVGRjNGNzVBOUM3ODZFQgorOjEwN0IzMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxMworOjEwN0I0MDAwMDAwQkQ1N0QwQjc4NTQ0NTlBNjg5RDNFRkQyNEREQTE0MAorOjEwN0I1MDAwM0JFOTNDQzlBMzkzNDA0MDI1QTExMzEyMDhGMkVBMjQ1MworOjEwN0I2MDAwODQ4NzIwNzY0MDg2MjBBRkU2MUQyMDI0MTE5ODU5MUM3QQorOjEwN0I3MDAwREQ5Qjg2MjAyMjE3NjdFMkVBMjhGOERBMEU4MzhBMzMzMworOjEwN0I4MDAwQ0UxODMwNkE5MEEwQ0Q0M0M0MTk1RDVCMDQwNzY3OTE5RAorOjEwN0I5MDAwNkRENDQxOTA5MEY0NDY2NzE2NzdCOEMzQURGRkFGQUE5NQorOjEwN0JBMDAwNzQ5RjkzMEVBODNCQ0U3NzZGRkNGQzhBM0E3NTRFM0RDRQorOjEwN0JCMDAwRkU3N0ZERkY1RkQ1MUE1RkYzREY1MkVEODQ1NEVGRTlFNgorOjEwN0JDMDAwNkYzNTEwNDIyRUZFRjJFMTcxNjQyODIxOEQyRDhERkE2MQorOjEwN0JEMDAwQTA5OTkwMkY3RkQ5OENGNUMzQ0ZCRkY0QzY3RkQzRjc4MAorOjEwN0JFMDAwNkFEQ0IxNEU3OEVGQ0I5NzBGRTlFMTc5OEQ0N0VCNkEwQworOjEwN0JGMDAwQTEyNUYxMUNENUNGQjJEMEQyRkI4MjRDMTIwOTk5NEFGMworOjEwN0MwMDAwRDhERjYzN0IwRkU5MUQ3OUI0REUyMjExNDJCRjI3NTUwRgorOjEwN0MxMDAwN0FERkEwMkNGQTVEQ0I1RUVEMTIzM0JDRTEyM0E0OTg5MQorOjEwN0MyMDAwOEVGQkZDQzI1MTFFQThCNzI1MTA5MjEyN0VCRTU1NEY4NgorOjEwN0MzMDAwQkNDNjM4NUFGNjIzQzQ0NENCNEJBNTY2QUZENDlGOTAzQworOjEwN0M0MDAwRDU2NUU2QUQ1MDVFRkE4REE5Q0E0N0JGQUJENTA3NzNCRgorOjEwN0M1MDAwNkQzMDlGQTFDNDA1RjU3OEFCODY5MDA0MThFNzZFNUQ4MgorOjEwN0M2MDAwQUQxOUJGQzc3RTNFRDIxMTAyNjUxRUYxOTJGMzQzMDhFMworOjEwN0M3MDAwQTE2RkVEQkUzNjFDQzZGQjJEQkU0RkRGMkIzMTE1MTI5QQorOjEwN0M4MDAwMzI3QkRFMzkwOUU2MTMzM0I0NUVCNzFBRTdGOTZCRDZGNworOjEwN0M5MDAwNEU1NzFERDkzRTYyM0QxRDhGOEU3QjBERkVDNjg3Q0I5NAorOjEwN0NBMDAwM0NBQjE5REZBNzAwQzEzMkI1QjUzMkNEMDFFQkI3MUIzNAorOjEwN0NCMDAwOUNCMDdFQjFCRUQ0NkE0RkEzODUzRUJGNkRCREM3MjlCRgorOjEwN0NDMDAwM0IwODc5RkRDMjg5ODkwMzY4RkRGOTIxRDI3MDE5NUVFQworOjEwN0NEMDAwOTdBNTg1NkVEQTdGQURENzhDRTNBQ0Q5NTA0NjNFQTMyRAorOjEwN0NFMDAwRjMxRDZGOTVGMEZCNDQyQkIxREY0QUQ3NTNBMTI1NzZFNgorOjEwN0NGMDAwMzM5NDg0OUNENDE1NDJGRkNGNjJCQkMzNDA1Q0E0ODhGQworOjEwN0QwMDAwOTY2RkNFN0U3NjIzRkRFNDMxOUQyN0E1MThGQUQ5MUEwOQorOjEwN0QxMDAwRDAzQkEwRENDREU2NEZCRkI3OUEwQkIxM0ZFQkFERjA0NworOjEwN0QyMDAwQkQ5MUFDODVFRkJBMzY0RUIzNkY5M0IwREY4MDJFMkU4NworOjEwN0QzMDAwM0M2RjQyNDIxOUIzRjI1ODdGNDUwMEE3QzlERTJBNzg0QQorOjEwN0Q0MDAwOUYzOEY0QjhCRTJGRTExNUM0QTMzNzdGN0UxRTk0MEY3MQorOjEwN0Q1MDAwQjFGOTZBODgwN0U4MjU1MTRGNEI4NEFCMjdBQjkyRDIyMworOjEwN0Q2MDAwQ0Q3QzZCNjk5NUI1Mzg1QzI2RjY2M0VENkFCODNFMDU0NworOjEwN0Q3MDAwRUQxNDlFNjdBQzJFMkNDOTlFNzg0MjQ2RjU3RTRGOTQzQQorOjEwN0Q4MDAwMDJGRTg3Njc3N0VBODM3NERDNDcwRjlDNDNCQUFEMDUzMAorOjEwN0Q5MDAwQkE4NUYxM0Q5RkVCNjExRDgyNkU5NzA4QkFERDdGMEVCQgorOjEwN0RBMDAwRTk3NjQ5OUI4NEY0NTREQjU2QTAwNzdBQkRENEUwMjJERgorOjEwN0RCMDAwOUY2OTY5OUREM0RGNjM1MjcwMzlEMEI1NzdCRkM5RkEyNworOjEwN0RDMDAwMkM4NTUzQTdBMENGRURFN0NFQ0IxNDFFRDk2RDI5MEU3RAorOjEwN0REMDAwMDk5RUVGNjc3NEZBOTY0NkUzMDUzOEJEQjVFQjk2RTY2MworOjEwN0RFMDAwNDYyOTcyOUUxQjExM0U1MjM1NDEzRUE5QUQyNzNFMDNFNgorOjEwN0RGMDAwNkQyRjdEN0FGRDg5MjlCNEJFQTY5QTM4MEQ5NDNFNkEwRQorOjEwN0UwMDAwNTU3NDk0RjVDQ0E3NUI4MDVFNkMzNUE0QzhFNDgwNzU4RQorOjEwN0UxMDAwOUU5RDM4ODBGNjVGNUI0MzhBODE0RjUzMjdCOEY2NDNCNworOjEwN0UyMDAwOURCNDQ5NjQxMEQ0QUJERDRCNjFGQ0RCRUMyQjlEMzI3RgorOjEwN0UzMDAwRURERjM2QzFERDBBRTNERDY2MUZFQjk0Njk3RjhGQTVCOAorOjEwN0U0MDAwQjc2QzMxRDI3NjZGMDVCMTNFRUIwMEZDMzY5NTY5NjlBRgorOjEwN0U1MDAwRkRCMTBBODc5NTQyOTJDMjZENzczMkI0OTMyMTdBRTdEOQorOjEwN0U2MDAwQjM0MEM3OUVBNTM1RDA1RjZERjI1QzI3RDA0OTJGRkU4OQorOjEwN0U3MDAwREZCRjcxMDhDQ0I3RDZEMUNGNjlBMkVGNEY2RDkzOTAxOQorOjEwN0U4MDAwQUU4OEQ3NEM2MEZFQjUxNEJFNTA5RkVBMUJFRDgzRjk1NworOjEwN0U5MDAwNUNFNkYwMTM3MEVDRDQwNTE2QzBGQzNBNUYzMTEwMkY4RAorOjEwN0VBMDAwNkQ5RjNBODFEMUFCNkQ0MjBCQ0E4RkI3Rjc0RjNBMkUxNworOjEwN0VCMDAwRTU4N0U5RDJGMkFBQzEwRkY1MzhBRDU1NzI4MjVDMjI4RQorOjEwN0VDMDAwMzMwRDkxNzg2REQyOTE4NTZFRkE5RDZEMzJFQjI3NjdGNworOjEwN0VEMDAwM0JDM0VGNzM5QzlGOUUwM0I5ODFBNTlFRjM2RjEzQTNEMQorOjEwN0VFMDAwNzdBQjM3REY0REU5RTEzMkM3M0ZGQzM5NjhCRkFCRjExMworOjEwN0VGMDAwMUYxNDNGNEJGREM4NEYzNTJGQjJGRUVDMDY1N0MxQkFEOQorOjEwN0YwMDAwMDhGQUI1OTcxM0U0RTMzRDI2QjJCMDkyM0VERjYzNjMwRgorOjEwN0YxMDAwQTU5QTVFREZFNUYzQzg3QTY2MkRFMjdEMDlDNTNCRTBGMAorOjEwN0YyMDAwMzU3NTNCN0QwRTcwQTM3NDAxNzBBMzc4NDQzQUI4Q0RDQgorOjEwN0YzMDAwQkUwMkYxQjY2NEJCNzQxN0UyRDEzQjgyNDAzRDIxOUU4NAorOjEwN0Y0MDAwQUQ1M0REN0Y4MENCQzUzRDI2Nzc5MTQ0RkIwQjI1NTg5MworOjEwN0Y1MDAwOUNCQjI0OTg4RjRCNjM4MjdBODFDREI5OEJDMEY3RUU5RQorOjEwN0Y2MDAwREQzMDVFNDI5MkM5RDkxODIxQUYwODcxMTc2OUU4MzgyRgorOjEwN0Y3MDAwMTcxMjJEMENERkJFRjdCNTMzRjI4MDFGMUREODZGODJBQworOjEwN0Y4MDAwNENGQzA0RTUwRkM5NzZFNzg1QkZBQkM4NjFGRDU1RjAzMQorOjEwN0Y5MDAwRkVBNjM1NzlGMzQ5MzY4MzA3QzI4NUMzQzNCN0IxNUZGRgorOjEwN0ZBMDAwNTVBNDNDRkQwOEUwNDFGQkY1REQ0NEFBNDA2RUJDQTVBQworOjEwN0ZCMDAwMjc2NjIzRjQ2RkE1RTNEMEZFMTI3NzhERkVFNTM2OUM4RAorOjEwN0ZDMDAwNUYyM0JFRjdBNkQ1OEE2NTQ1QkNCQkE4MUU0NDcwOEU0QworOjEwN0ZEMDAwN0IzREMwNDVBQzUzMEQ4RkY5MUMxRTg3NjcyRjI4RDAwMQorOjEwN0ZFMDAwMDAxRERGNjk3NjAyREYzRDdBNDA1QThDNzRFRDM1NTIxMAorOjEwN0ZGMDAwQTYwNEJBNjc3QzQ4MjgzRTgwMkY4ODQ3OEJGOEE4QUQzNgorOjEwODAwMDAwNzdGQkEyRDM3RDI1RjI1OUFERERFNDM0NDk0OEY3MkU0NAorOjEwODAxMDAwRDQ3RjVFQjM4RkQxM0REMzdGMzE5Mzk5QkUwMjM5NTk1RQorOjEwODAyMDAwOTlENzVCMUUwODM5MDNGQTBERTg1OUYwNDVFREI4NjBBMQorOjEwODAzMDAwMkVFMEY3REJDQTk1NEUxREUzRjM0RTBBMDdFMDIzQzE5RAorOjEwODA0MDAwMzc5NkQ3MTlCRjZDREJFODI4ODVGNjZEOTRFRjIzRjFERQorOjEwODA1MDAwN0Q0Q0VGNDVGRTNEOTZERENGMDlGREMyM0NERDk2QjA3RgorOjEwODA2MDAwN0M0RkI0QkFGQkQ5NjA5RTFBRkYxNjZENTY1ODFFRDdDNgorOjEwODA3MDAwQkVGRTYwQUUyNzBBRkQwOTc5NkNENDMyMzk2N0Y0QzVCQgorOjEwODA4MDAwRjg1OEJGNkMzQzIzMDVCN0E1MTA0QjJGRThBMzk4MERGQgorOjEwODA5MDAwMEMzRUVBN0VEMjZENjY0RThGNDZFQkU3NTQ4RjRGQTdCQgorOjEwODBBMDAwNDhFQTlGNDNDODY0OEQyN0RENDZGQjVGNjMwQzFFQTMyRgorOjEwODBCMDAwOTgyNTE5MUI0MjdBOTg0NzIyRTgyRUUwOUY1RDMxM0VCMQorOjEwODBDMDAwOTA1Qjg5ODlDNEIzMkY0QUJGRkQ2RDhDREUwNDVFOUEzNAorOjEwODBEMDAwRTIxODFGMjVDNkIyRjc0N0Q5MThCRDBDQjUzMTNFMkRBMQorOjEwODBFMDAwRTNFRjhCRjkwQkZBNzc2ODNDRTc4OERDQjcxRTEzREYwOAorOjEwODBGMDAwRDE3OTYxQkI5ODBGRkQ3RTJCNjFGQTE3RTc5QkI4MjlGOAorOjEwODEwMDAwNzdEN0I2MDg3Qzg0RjlFOEE2NDJDMDUzQ0U3NkJGNzYwRQorOjEwODExMDAwQjEzOTNDOEVEMEE3NkFGQ0MzRkM4MTdGNjAzRDk1NDM5QQorOjEwODEyMDAwRkI3RUFGRTkxMEUzNDczNTNENEVFMTdDNjJCMDExMkM5OAorOjEwODEzMDAwOUI3NEZFM0YyMzVGREQ2RDIxQkI2MDdFM0I4ODJCOUVFMQorOjEwODE0MDAwQ0VBQkVFOERDMThDMUY1Q0ExNUNFOEZGNjA5QzY3MzdGNQorOjEwODE1MDAwRTA2M0U0MDQ0RUU3RjRGOTBDRkE3Q0I1OTY3ODBEMTQ2QworOjEwODE2MDAwMjdBQkY3RTg3QzQxMjNFMzk5NkJGNEZGNjJDMDEzOUREMgorOjEwODE3MDAwNDc5N0M1RTg5NTI5OURCRjFGRTdBOTgyRUZCRDY1QzQ1NAorOjEwODE4MDAwRTkwN0JERjQ1MzJBM0Y4MEZGODhCRjE4RTQ0QjFEMDk1RgorOjEwODE5MDAwQzYwMjlDNkJFNTQwMkVBMUY4QkYxQUUzOTkwRkY0RjhENAorOjEwODFBMDAwQTkyNjkwMDFDRjA5MDkyMkJEOUUzMUM1RTYxM0RBNUZFOQorOjEwODFCMDAwQUJERTlGRkU0RjMwRUY3NzY0QjI4QkY2RDM0RDVDNTM0RQorOjEwODFDMDAwNjExREREMDE0RDlDOTdBRUUzOTNCNjBGN0Y3MzgwN0VGQQorOjEwODFEMDAwMzVGRkMwRTVGOUY3MDI5NEI2QzUyQzc4OTI5NkYzOEM3QQorOjEwODFFMDAwMUFBMzc2NzgxODFFNjcyQ0QxRTVFQjhGMzk1RDI0MzRGRAorOjEwODFGMDAwMzJCQjJCQjREMUUwMDNGOEE4REYxQjFGQzdGMDVGNzdCOQorOjEwODIwMDAwMjU5NTc4RTMyMzlGMzMzOTVBQTcwREU5QzE4NEFDQkI4OAorOjEwODIxMDAwOTI0MUJDNzREQzRGMzRBNEJBMjU4QTlERjlBMThERTk0MgorOjEwODIyMDAwQUI1NjRBRkFEMURBNEY3MzNBREJBMzIzQjkzQjYwM0UyRgorOjEwODIzMDAwQ0Q1NDBFMDJGQ0I0MEU5NDE3RDU4RjY0MzlCN0QxNkFCMQorOjEwODI0MDAwNkI3NkU4MThEODExQTE1RjQ4MjhGRkNGRTg5OERDQTEyOQorOjEwODI1MDAwN0Y3NzFBNDc4NEY1Mjc5ODI3NjAxRjU2NUJCRDdFMERGMAorOjEwODI2MDAwOTUxQkQ1RUIyRDdFMzkxRjlGNkJDNzAwRUVCQzU2MkQ5RAorOjEwODI3MDAwQzhDMUM1NUMyRjJFQTk3RkZCMUIyOTk2QjY2Qjg5NzFERgorOjEwODI4MDAwMENGREVFMEJGM0QyNTg1MDBCQ0I3RkJDMkUxMThDRUZCNAorOjEwODI5MDAwQTQ3OTREQzg5Rjg0NENCMDgyM0QyRUI5QTZDOUQ3NjIzRgorOjEwODJBMDAwQUU2N0NGNjlEMTZFNDc3QUExRjgyRDhGNzMzRjA5Rjg3OQorOjEwODJCMDAwOUVENzlGQzE3QkRFQkExODlGMzc0MkZFRERDMUUxQTM4NgorOjEwODJDMDAwQTZCMzNENDBBMzc0QkU2NzI1QTY1N0Q0RTNCQzEwNTdBMAorOjEwODJEMDAwMzYwOUZBRkRBQkM1RkQxQ0Y2QkZFRTMyQ0FCMzc5MDcwRAorOjEwODJFMDAwNEMxOUEwQjc1NjVGRDEyMDVFQkEwQTAyQjkxQkIyODAwMgorOjEwODJGMDAwOUU0MzE5N0ZBMEYwNUJERDZFQjA3QTFERDBBRTU3RTBEMworOjEwODMwMDAwRjVEMzA2MkFEMDcyQzNGNUM1MTcwNjRFMjQ2NjgwQUI5NgorOjEwODMxMDAwNzMwQkUwNzlDOUQ2MThFMjFEMTI5RTFGMThEMjQwQjcyMAorOjEwODMyMDAwQjU1NzA4RjZCM0I4RkRFREQzMjBBNzZCQjU0MUE0OEJDNAorOjEwODMzMDAwQzU0NjMzQzJCREY2OEExNkU3NDFCNkVBM0E4MkUyN0IwOQorOjEwODM0MDAwM0FCRkY4NTg1NzNCQ0NEQkZCQzAxOERCRjk1QkU4QzNGRQorOjEwODM1MDAwMjRGQTFDRDdFNTM5MENGQ0Y0Nzg0QzJDNzEzMTNFRjAzMgorOjEwODM2MDAwMERBNkYzRUYzNjNBRkFDNzUxMzhENEU5MjlERTg3NjExMgorOjEwODM3MDAwMzc2RTYzODRERDQ0RDIyQzRBQkNCNkJGRjMwRENDNjdBNAorOjEwODM4MDAwQTlEMUEzMDc3ODJDQUJBQUQ3MDNCRkNERUJFRjJGQjZBQgorOjEwODM5MDAwMEU4REM0RTcxOEY5REEyRERGMUU5RkNGNzNGOUYyODkyRAorOjEwODNBMDAwOUVEMjdCMTRGRTNBQ0RFNUVGNzgyRTI3M0U0OTY1N0NDMAorOjEwODNCMDAwRjE0OTA2QTlERTA3RTVDREI0QTRERjdEOTJDREVCODVCQQorOjEwODNDMDAwQUNBRUVFRTcyQUU3OEI0RkYyOTkxRUYyQUU2NTdBNDEyQQorOjEwODNEMDAwRkQ1RTI3MUZBRjNDQ0U3NTFFRTAyNjlFMEY4RjYzQ0YzQworOjEwODNFMDAwNUY4ODczNUQwNDM4NTMzOTc3OTlEM0ExREY0NkZCOUJDRgorOjEwODNGMDAwRjdBNjAxRTk5MDZDMEVFNTAyMUU3QkQ2OTVDQkU3OUJCNAorOjEwODQwMDAwMTg3RDVFQjY3MEJGNUY0MzdGRjQzRDE3REFFMzZGOTg2NworOjEwODQxMDAwN0NCMEJGMjBEM0E4REMwNTM5QkIzNjlEODA5Q0E1RTM4QQorOjEwODQyMDAwNUVDNUY3NzJFOUI4Rjg5RTAxRDc0MUI2NTJGOTRCMTkwQgorOjEwODQzMDAwQURBQkQ4ODE3OEQ5NTY0QUU5MTNGOEZGQTBDMTBBRkM0MAorOjEwODQ0MDAwMkZFODQ5RDA5MTlBN0U0QzcxNDJBRjMxRkQ3QTA3RTgwRQorOjEwODQ1MDAwNTcxOUY1QUIyOThFRTk1NzNERjAyRkVENTFDRkVDQkMwNAorOjEwODQ2MDAwODE4ODZGQTQzM0Y5REJFM0ZCQTA5MTcwRjhCQUUzRTNGMgorOjEwODQ3MDAwNTA5RkZCRjNEQzc5QkRFMTJDRTRERjI3RkQ5NDc0RTEzMAorOjEwODQ4MDAwRTM3ODFDQzBERkVCODE3MzFDN0JDRjlFQzNGNDk5QjBGMworOjEwODQ5MDAwRkI2RkUxRUJEQUNERTVCNDI4ODU3RTFBMzk1OTY5NkZCNworOjEwODRBMDAwRUNFNkYyNjNCNzJEMTY0QjhBOTdDMUIwN0VBMUQ3N0E1RQorOjEwODRCMDAwRTFGQjI5ODY2RkZBREU1MDU4Q0YzQzQzNjg0MTNDRDUzQQorOjEwODRDMDAwNEIzRkEyRjY4RUJFMTBCRjdCMUVCRUVCRTU3Rjk4QzA3MQorOjEwODREMDAwRjQ2OURENUEwQjAxN0QzRjIyOEVEOUIxQTQyODk0MDFBNQorOjEwODRFMDAwRkQ5MTIxQjRDQzAzRkVBM0YyNDZCQTMxRkU2MEFGOUZFQQorOjEwODRGMDAwNDI3OUU0RjY1ODA3REI1N0NBNzQ0MEUwOTkyMUM0MDE3OQorOjEwODUwMDAwRkQ1MTc4OTdDNjI1ODRFMUFEMUVFRjBDMzQ1MUZCNkUwQQorOjEwODUxMDAwNkE5Q0E0M0QwRjM4MkEyMDA1ODBBRjA1MUY3QzY1OTkxMQorOjEwODUyMDAwNEZCQkJDNkMzNTdBMzU1NDNGRkM1OEUzQjkwM0ZBRTlDQworOjEwODUzMDAwQjhFNzFEQjRFN0NGRThGREI5NERFNjI4RUQ3QUZGMzM4MworOjEwODU0MDAwOEY0QkUxRjY4NTJGQzg1RTNEOTUzM0FEODE4RTVGQ0NCNAorOjEwODU1MDAwQTY3NEI5MzgyMDNCNjFDOEM1RjdGREY5QkQ5MTYwMjcwNQorOjEwODU2MDAwMDc3NDRFRDhBRjUyM0I2MUJCOTZDRUZCOEM4NkUxOTMyRAorOjEwODU3MDAwRDQyQkY3RkJBQjM4REVBOUJEQTQyNTIzQzJGMjQ5RTgxMgorOjEwODU4MDAwRkI5NUM0M0YwOEVDODIyNUM0QTU4N0YyRDNCQjU3NENBQQorOjEwODU5MDAwMjMxNDVFQ0JDQ0VCNTE2RTVENUMzQjA1RURFMEU1QzQ5NgorOjEwODVBMDAwOEJFRDRCQjZFQTNFOERENDEzQ0I5QTk0RjUxNTNCOTRFNAorOjEwODVCMDAwRjU5NTNFNjVGREQyNEYxOEJERjVBNjdCNjY1RjI1OTQwNworOjEwODVDMDAwNDdCNzFCMUVFMTc0Nzk0OTFGQkRCRDMxOEVEMTY5RjlEMgorOjEwODVEMDAwMDNEMzFFNDdGRTBGRTg4ODgxRDJDOUZBODNBNTQ5MjQzOAorOjEwODVFMDAwQ0FGQkEyQUNCQjkyNEQ3QzExN0EyODZDNTdFNDEyREYxNworOjEwODVGMDAwNzBFOEVGMkFGQUY5QTAxRkQ4QkZBRTM3Qjk5MjYwOUY5MgorOjEwODYwMDAwNzFBOTJDRkEzQ0ZFNzc4RkRERDJBRjhGN0U2M0IxREY4QworOjEwODYxMDAwNEJEOUQ3NUY2N0REMTUyM0JFRDdGQjdCMzNGNjRCRUQxOAorOjEwODYyMDAwQTdBOERGRUZFNjcwQjgxNDE3QkREREQ3RDM3RjMyRUExNQorOjEwODYzMDAwQzVGMDc3OEMwRkMyRTNBNEExNUVBREJCNjI1NUU4RTkzQgorOjEwODY0MDAwNzBCQjlERTk1NUJFRkZBNzc4RjVBMkJEQ0JFRDM5QUE1OQorOjEwODY1MDAwMTBBREU3NjNDMjcyNENENzhGQ0Q0N0YwQ0Q2NzEyMzFCMgorOjEwODY2MDAwQTZBMEJGRUM2MTJFNDc5REY5NjBGNzdFMDY3NjE1RjA1NworOjEwODY3MDAwRUQyNEM3MUI0MTNBRDUyNUY3OEVDQUQ1NjY4N0Y5NEEzRQorOjEwODY4MDAwQkQxRTRBOEY1RjA2MjNFQzgyQjYzODhCMURGNUI5OTM2OQorOjEwODY5MDAwMzg2MTVDQzEwRjBCRUVBOUU4RUZBMTc4RkI4RkZCQ0EzNAorOjEwODZBMDAwOTMzQzQzMjNFOUNFOEJFM0Q3RUE4NTNENjc1NkU4NzFENworOjEwODZCMDAwQTJEMkYzNEJEQURFNDE3QjZEQTlEMTlEMEJDMkU5NEYwQgorOjEwODZDMDAwMDdFRjQxM0U1OTRFREM4OUMwMUY1RDA3MDc2Nzc4RkUwMgorOjEwODZEMDAwMDdGQTVEQ0M2N0E2Nzc5MThFRDlFNzE0QTg5NDZGNjdFNworOjEwODZFMDAwRjBGOUNDNkM2N0Y2QTJDNkU4RDJFMTM4MkVFMkIwMjZFQgorOjEwODZGMDAwRTIxNjlDQ0Q5NzBBNTkyREFEOEZFRDk5M0YzODEzMDk5RAorOjEwODcwMDAwMTlDM0U3MkZDMUY3MTRCRTYzNzk0OTE2N0I5MjYxREU2NgorOjEwODcxMDAwMDYxODk3OEU2NzIyQkU2NDI4MUI0NzM5MUQ1MDhFOTcxNgorOjEwODcyMDAwREM1QTM2MEYxRkUyNzkyMkE5NEY4M0Y3MzVDNkEwQ0M1OQorOjEwODczMDAwRDY0OTY3OTAwOERGRjdDMDBCRUIxNjVFREY3QzY3Rjc2MgorOjEwODc0MDAwODI2NUYwREM2QzQxRjlBM0U3RjNGODQ2Qzg0RDIzMzFBQworOjEwODc1MDAwQzJCQTBENjZGRjQ1NTg5Nzg1OTdERTMyNjY3RjdCQjNCOAorOjEwODc2MDAwODlCMzkxQkVENjhGQjQxMDE4RDc2Q0JFRUM4NUM1NUFBQworOjEwODc3MDAwODk1NTgyQkFDOURBRUQ4NzdEQzg2NUFCRDlBQjE5ODY1MAorOjEwODc4MDAwRjJGNEZGQTAzQzk1REU1RDBFNzhBMUYyOUJGOUE1RkEwQworOjEwODc5MDAwNkFEN0ZBNzFGRjIzRTQ2MzFDOUY1RjIzOTc4RjI5ODRCNAorOjEwODdBMDAwQzFDMTRFREM4NzVDOTRBRUZGQzVCMjdDMUE4OTA1MzUyOQorOjEwODdCMDAwRUVDMUYxNzdDNjRFM0UwRUYzMDVDMEEzOUU5RkFDRkQwMQorOjEwODdDMDAwMzQ1MkNGMjRCOEI1MEFGOTk3NTRBNUFDQTc3ODk0NzU1QworOjEwODdEMDAwMjMzOTYzMDVGQTk1RkNFRUU0NkJGMUI4QUYxQjAyN0UxQQorOjEwODdFMDAwMUExRDk3Mzc3N0Y2NjNGMzEyRjQ5MzE2QUY1MUQ4MjExOQorOjEwODdGMDAwNkVCRUNGQUY4REQzMTNGNDBGMjYxQThENjQxOERBMjUxMQorOjEwODgwMDAwNjlGMUNDMkUzOTRCMzE0REY3ODMyMTk0RTcwNUUzNURCNworOjEwODgxMDAwODM3RTQxRTFCQ0U1MDNEOUI5ODlFMjY5OEJDNUIxNTFEOQorOjEwODgyMDAwMEJGNkRFMUNDOUY5MkM5MjY3OEIxRkZDM0VDRDBCNkMzRQorOjEwODgzMDAwQ0U2REQwNkU3MkZERkNGRjQwRkIwNzMyMDE3QkFCMEVBQworOjEwODg0MDAwRkNFREYxRjBBMkI1MTRCRTZCQ0VCMEUyN0JGNkYyMTBGNworOjEwODg1MDAwRkE0OTQzMEYxMkI0QTc3QUQxRTk1NTNBN0YwQUVGNUY3QworOjEwODg2MDAwNDI5REMyQjc2RUE5NzVGNThCRjRGRDE0Nzc4QzUzOEFCRgorOjEwODg3MDAwNjhERjBERUQ3NDlFMTJBNzBCNzgzRTdFMDRFQzZCRDk3OQorOjEwODg4MDAwNUY0RTdCNDFDMDA1N0UwQjk3OENGQUIwQUVCREUwODg5MQorOjEwODg5MDAwOTlDRTIzQzc1M0UwMDRCMjFERDhDRUUzMkE3NjgzOEY0NgorOjEwODhBMDAwQzUxNTI4RDdEMjc5Q0MzMkIyNzlENEI1OTdERTUxNENFMAorOjEwODhCMDAwREIwNzA2ODYxMzg4MkZDNDFDNzdDQ0FEODEyNjBEREQxRgorOjEwODhDMDAwNEZDMzc3NjUzMUU4Q0YzQUM5RkQ0QTg0Q0I4MzkxMkFGQgorOjEwODhEMDAwN0UxQjFEQTY3RjZDMkYxMDc1NkEzNkI4NDYzMDc3MDU1MworOjEwODhFMDAwRDZFRDhDMEY5QzQ0RkMzMUZFQkM5NTg0RkZFMEZCRjI3RQorOjEwODhGMDAwNzA3RjI4OEYyNjg0OUJDM0ZDNDY5NzU2Njg3NDM2RDZCMworOjEwODkwMDAwRDBGN0RFQUE5Qzg0NzQ1ODA3RkIyRThBOEY5MTVBRkZGOQorOjEwODkxMDAwMjFFMEVGRDFCQzJDRTAyNTU5REM4NEYwRENCNkQxN0YxRQorOjEwODkyMDAwNTg5NzA1MkUxNEI3MENGNTExRDYwNzFCQTFCRkIxOTJBRAorOjEwODkzMDAwMUZDQjhDQUE4NzFCODFBQzVFMDNFMzBDRUQ0RTRGMDU2OQorOjEwODk0MDAwRjBFMzk2MEE2MjA1RkJBQkIxQzRFOUI0RDJBNkQ5NTVFRgorOjEwODk1MDAwQ0NFRjNBQUJDQUU4MDMzRkZFMkMyRDYxRjEyRUFEMjdEOAorOjEwODk2MDAwRUI0Nzk0QUY3RTM0OEZGOTdCQTEzRTJGQzI5RjIyRTI2QQorOjEwODk3MDAwMUIyN0U5M0U2NjZGMTQ3QkUwQjU3OEE2QzdDNEY3NzU4MAorOjEwODk4MDAwOUJGNThBMzhEMkNCRjFDQ0JGQjUzMzdFRTI0RkUyRDkyQQorOjEwODk5MDAwRkNCMjgwRkZFRThCRTc3MjY1MDgxOTAyNzIyNTgyRUY0OAorOjEwODlBMDAwQkRGMDVFNDdFOUVGRkI5MjBCQ0E3NjJFMTc2NkI5MUU0MworOjEwODlCMDAwRDFBMTFEQ0ZFNTgzOTBDMzZFRTA0M0ZBNUQ0MDcyRTkxQgorOjEwODlDMDAwMDA3RTFGOTczMUY4OUYyODVEODlGMjYxMzZGMUUwNzNEMAorOjEwODlEMDAwNEEyMDNBNzdBNDFGNjk3Mjg0M0Q0NEM3OTlFNTU2REE2NAorOjEwODlFMDAwNDdCM0FCOTQ3NTQxQUY2MkRDMzkxRTY1RkIwQzYxREZBOAorOjEwODlGMDAwNEU1NkRBQjdGM0ZFRTlBQTBERjU2RkQyNzM2QkFFNjU4QQorOjEwOEEwMDAwNjJEQzA0RjdGRjc1MTQ0RjJDNkVBMjY1NzE5NENEN0E2OQorOjEwOEExMDAwMUZEODQ5NzU2RDc3QkY5NTAwN0M3NDFGRTE3Q0I0NTdGMgorOjEwOEEyMDAwNUEzQTE0RkRCMEQyQjIwODNCNjI0MDhENEYwMkI5M0ZCMgorOjEwOEEzMDAwOThBRTI5ODA3ODBENjFCQ0U4QTRDRTc3MDhFMjI4Mjc5QgorOjEwOEE0MDAwNTdEMjE1RDM3OTFFRDFCMzc4RTQ1MTEzRjE4MjNGNUEyRQorOjEwOEE1MDAwRDBBNzY1MDZGM0E3NTIzMkM2Qjg0ODlBMzVDNjA5RjRCRQorOjEwOEE2MDAwQjQ1NTUzODhGRUQ3QURCMTE2NjdBNEJGNzNEQjQ2NEEzMQorOjEwOEE3MDAwNzcxMTdFNTc4NzgxMTQ1QTM5REQ0NERCRkZCRUM5RTU4MworOjEwOEE4MDAwRTE2MzEyRjM3RjdCRTcxODcxQkY5NzkwRTM1NkM0MUIzNQorOjEwOEE5MDAwMTI2NDcyMUFGQzg4M0Y4OTc3ODhGN0QxQ0YwMUYxQkE0NgorOjEwOEFBMDAwRTFCNEY0NDlDQzlFRTlGOTVFMjY5QkQxRUZBODkyM0Y1MAorOjEwOEFCMDAwMDlGMTRFRjRGNzI3RjRDRjQzQkY3RDU1N0JDMTZFOTQ4NworOjEwOEFDMDAwMzc2NjkzNzM5MDE0RUVCRkNBRDNBQzVEMDZGRTgzRjY4RgorOjEwOEFEMDAwNjZFRDUyNzM5OEVFNEUwMEJEMDJERTYyNDgwQ0QwNkIxQworOjEwOEFFMDAwOEYxRjZGOUYwMUZENzgzRkQ2QjgzRjAyQkFBQ0QxRkIxNAorOjEwOEFGMDAwRjM4OTkyOUVGMTc5NUY3QTZDMDVBNzE3NUQ5OTdCQ0UxOQorOjEwOEIwMDAwMzIzQTlGQUVGN0Y0Q0NBRjc1MUY0MTdFN0Q3OUJGMEQzMQorOjEwOEIxMDAwRkQ5MERBMTkwNEY1QzlFNjUyODJGNEQwRDUyQ0ExRkRGNgorOjEwOEIyMDAwRjY4NUFEMUFGNzAxOUJBNTI2RDQxMzlENzExMzExN0YwRAorOjEwOEIzMDAwQUJDQzQ3NzE1RjVCRkQ5NEVFRDM0OEJCNkJENTZFNjVFNAorOjEwOEI0MDAwN0QzNTA5RTBCRUJBRTZDNTVFRjQ4Q0YyNEJDOEM3REFFMworOjEwOEI1MDAwNTZFNTc3NjRBMDUyM0UxNjcwQjk1RkU4NzZDRUFDODBEOQorOjEwOEI2MDAwQTk1NzM5NzNEOEJFOUFGODBENzQxREM1RUZFQUI5RkYzRAorOjEwOEI3MDAwNzcxRUQzOUJFNDM5MDlFQ0FEMkVDQjA1OTlGMTM5OTNERgorOjEwOEI4MDAwQzdDNUJDM0ZCNTFFMkFFNkY2RDQzODJBQjc2MEZGMjkxMAorOjEwOEI5MDAwRUMyM0ZBM0VENjhGNkFEQUU1NjQ0RDc4NUU0NUZDM0JGRAorOjEwOEJBMDAwNjE5NzA5QjkyREYwNTI1QTQyNDgwOUE1RkI2NDNCOTdEOQorOjEwOEJCMDAwNDNEOTI0MUJGMDRBRkI0NzdFQTBFMzdBRjU3MUQ4QkY2NgorOjEwOEJDMDAwMTdGNjZEQTNGOTc4MTRFRjVFRDBCMzVFOEREMTA3NzRGQworOjEwOEJEMDAwQjQ0NUFBNDczOTZEMjQ1QzVFNEIxRTk0Q0JBRjc5QkQ3QQorOjEwOEJFMDAwMzJDMDc1MTRBOTlGMzk4REJFMzdDNjE4ODgwMTc4NTBEOAorOjEwOEJGMDAwN0E0OEIzMjc4NEU5QTQ5MUY4MzNGNjRBMEE3QUMxRjY5MQorOjEwOEMwMDAwMEVEQkVGQTNEMjhCRDAyRkZFOEY5OTdEMzE5NUFFMTg1RQorOjEwOEMxMDAwRkFBOTgwNDAwRTJEOEY0QTZDNUYzOEM5RkNBODE2QkU5OQorOjEwOEMyMDAwRkZCRDY2MEFEMkMzNjRFMkQzQzJGQzJBQUM0QTNDNEYwMQorOjEwOEMzMDAwNEE1NkQ2QTczODdBRDE4MTBDRTNCQTM4M0NBNzBFNTFGMAorOjEwOEM0MDAwQjZCQjg0NUMyMzRBQjk5NjQ1QUUyMjlFQzk4M0M3N0VEMworOjEwOEM1MDAwMEM3RTgxOTgwRDY0MDhEODFERDQ0MjQ0N0U1M0NCODM4QQorOjEwOEM2MDAwNzE3NkIzQzIzRThBODg4MzhDQjMxN0Y3OEU4Mzc0NzE5MgorOjEwOEM3MDAwQkZFRUFEMjRCOEZDNDVBOTM3QkQ3NEJFQjU0MTRFOEVEQworOjEwOEM4MDAwQTAyQjQxQzdBRkYzQkMwOUU5NEQxRTZGMkQ2MkZFQzA5QQorOjEwOEM5MDAwQjA5RTY3RjQzMjgyRDc2RTA1N0FBM0VGMkYxNDc0OTJEOAorOjEwOENBMDAwNDkzMjgxNEVDNkI2OTlGQzMyODU2QjAxRUZFNzU2QTA3QQorOjEwOENCMDAwOUJDMkIwM0VGNzZCQ0MwRTdEMzZEMDg3NzNBQjJDRjdFMgorOjEwOENDMDAwQjZEQjEzRTMxQzQ4MjdDMzM1MkVBNDkzNjJFMjhDMDc1RQorOjEwOENEMDAwRkM5NDE4NUIxQUI1MzBGRkZEMjMwNzc4Q0MwQUJBNTgwQworOjEwOENFMDAwNjI0NzM5NDJFOTAyRjlBQTk3NUU1NEI2QUJFODQ2RTAxQQorOjEwOENGMDAwRUYzOEI3OTcyNzExRUY0MDE4OEY4QUIxQTM2MDJGRkI4OQorOjEwOEQwMDAwQjMxOERENTQxMDE3RDJDOURCRDk1Mzc4M0NEQUEzQzVBOAorOjEwOEQxMDAwN0U4ODUyMUY5NjFCOTU3NEEwQTYyQjNBQTIyNjcyNUNFMQorOjEwOEQyMDAwMzU5REY1NDUzNzk5NDAzNzQyMUZDNkRGOTg2RUVFRUYwNworOjEwOEQzMDAwOUI2RUVFQkYxRUREQThFOTQ1Qzg5M0JEMjY2QjM5RDhGMgorOjEwOEQ0MDAwQTU3NUQ1MTJDQUUxRTFFRjBENkM4NEZBRTAzNTU5OThBQQorOjEwOEQ1MDAwRDdCMkQ3RTY0NEJCQjVBRTlFQjUxNzA1NUMzMkU0QkRDRAorOjEwOEQ2MDAwRTRBQ0U3RUQ1OUVFNzJBOEQ3NkQ2MEYxODdFMjkzMkM4MQorOjEwOEQ3MDAwMkY2NkUwN0RBQ0JENjA1M0ZEMTEwQkU4NzcyRkZCRkU0NQorOjEwOEQ4MDAwRjU4QjVCRTQ1OERBRUVEQkMyQkYyRjZEMkE4NzdBREQwNAorOjEwOEQ5MDAwNTZGNkZEMTcxMDNGQTJGODFENzFEQUQ3MDhDRjZGREEyQgorOjEwOERBMDAwOUVFNTY0REI0RjY2Q0Y4RUU3NzRCQTU3REE3NzA0QkY2RgorOjEwOERCMDAwNkI2MkRGQUQzODY2RUM0N0QwMEU2Njc2RUIzOEJFQ0UyMAorOjEwOERDMDAwRjE0RkIxNzVEQTNGQkI2REIyODNEMkVGQjI5MDE3RURDMAorOjEwOEREMDAwQTZGMzlBOUExMTI4NkZGQUQ4Njc5NjRBNEQ2OTUwNTJBRAorOjEwOERFMDAwQkE0MTM5RTMzMjUyQkFDRTY2RjFDNTVENzQ4ODQzNzYzMgorOjEwOERGMDAwNjYwNzhBQjgxQ0U0MDk0NEU2MDUxQ0IyMzNGRkEzNzg3MQorOjEwOEUwMDAwMkYzMThFQjAzOEYyMTMxNkY0MDc4QkI4QTFGRjcxMjIwMAorOjEwOEUxMDAwMDE5RkMxMUFCOUZFOEYxQTQ3OUM5NDUzOEZGMUMzNDkyMQorOjEwOEUyMDAwOTkyMjdFMThENDJFQTZFMzE2NUNGQjZBNjIzNDdGQ0FCMAorOjEwOEUzMDAwNzEzRUVFMDU5RUY3MjA5RTU3RkJCMjM0NDAxNzdCODFCMgorOjEwOEU0MDAwNDg1MjAxNDhBQjdGMDc3NkQzNUVGMEJGMzJBNUUxMjVEQgorOjEwOEU1MDAwMjU4MDU3NTZGRkM4QkU2MkRCRDYzNDBBNUY0REJERDZBQgorOjEwOEU2MDAwMEI0QTI2ODNFRUJGNjhEN0QzMDNDNERGM0ZCNkY3RkNCNworOjEwOEU3MDAwMjc2OTg5MUZGNDEzRDFCMkY5MkY2RkE0N0E1MDBBQ0I1NgorOjEwOEU4MDAwQTU1OTQyRUM4QzE5ODQ3QzdBMjdDN0QzNjc3NjZFNkYxQworOjEwOEU5MDAwMEMyN0MzNDFERUNDRTI3OEZCOTFCMTVFQzdGNDY1OTM0OQorOjEwOEVBMDAwNEVDNUZGNUYyMEZGRUZFQ0QzNkU1NkI2QUJFNDQzMzUwMworOjEwOEVCMDAwMUY3NzM5Qjc5NzU3OTIxMERBMDVFNzI1MUY5NjE3NzY2RgorOjEwOEVDMDAwMzI3Qjc5QjVGOTI0REExNTVENEYzMDNCQjE4NjA0RDE5OAorOjEwOEVEMDAwRUU1MEZCMEY1N0VGNTFENkQ3QjQyOEVCNzU2RENBN0ExOQorOjEwOEVFMDAwNTc5RTE3QzdFOURBQjk2NjA0RjhFRkFBNzdCQzg3N0UwMAorOjEwOEVGMDAwRTE2QTIxMjc3QzRBMzk0MTBEMjQyNjI3MUVCRjE5RkQyRQorOjEwOEYwMDAwMzYxQTIzOTUxMzQ1MDBBRTdFOTg0NzMyOUNCOEUyNDE0RAorOjEwOEYxMDAwMUU4MDkyQkQ0NkVCMEZDMjI3MjlCNEFFNzExQjEzNTBDMQorOjEwOEYyMDAwNUU0QzhFRkY1QzhDMkY2MzlDRjYzRDk3MjM4Qzk3OUU0NgorOjEwOEYzMDAwN0RBMTRBNEUxNDA4N0ZDQ0MwMzhGNDU3MDlCOTUxQzBGRQorOjEwOEY0MDAwRUQxMjMyNTlCRDZGN0MxNEY5NkYzOEFGRTUyNDI4Rjc2NAorOjEwOEY1MDAwM0RDMkNFQTBERkEzOUQxMUQwOTg3RDFBNERBNDVERTE0NgorOjEwOEY2MDAwNDM3RTJDMzQ1MjNEODEyQ0U0MzRCMkZENEExMzUxRTE0RQorOjEwOEY3MDAwNzczMEFDRUIzQUZCMjY2NUJCMEFGRjYyREYzMjgyRTM1NworOjEwOEY4MDAwN0YwRUYxMEMwMDdDREM0OURDNkY4MTdFMzhGMTcxQjUxRAorOjEwOEY5MDAwNjJCRkY0RjExRjI3MEE3RjBBRUU5QkJFRkI3RUM5RkY2QQorOjEwOEZBMDAwQkRGNjRCM0Q3ODM3NTFGQjkxOTZFNTMzQTYwQ0ZBMDU5QgorOjEwOEZCMDAwQzRCRDVCNEQ5OENGNTkyNzMxM0MyN0NFMzk5OTExRTk3MworOjEwOEZDMDAwM0YzQ0QxNDAxMkI0MTE3Q0RGMzhDNTYwODRGODYwQTMwNworOjEwOEZEMDAwOEVFRDI3NjY0Q0ZENjRDNEUyMDhCOUYxOTJCMTc0NkE2MworOjEwOEZFMDAwNDIzMUUwMjFGMDkzN0Y4N0ZEQzUzQjMyQzE3Qzk5RjY4OQorOjEwOEZGMDAwMDRDNDdCNzcxMzdENEVFOUFERkJBOTVCOUM1RUZBRjg1OAorOjEwOTAwMDAwOTI4RUM1MUJCRjkwRUE5NzQzOEE5Mzk4QzdGMjBEQkYxMworOjEwOTAxMDAwMzM2OUE5MUU1QjIxRkJERTA4NDI3QzU1RjJCRDVBNDMzMQorOjEwOTAyMDAwREI0RUU5M0Q3M0EwRkZENTFBQkY5RUY5RUQwMjE4Mjc2QworOjEwOTAzMDAwMTVGREY3RUQ4N0Y0QTJCRUQzMUY2NjdBMzEyNEY1NzNEMAorOjEwOTA0MDAwMzIzRkFFMzczNzMyREU1NDk1QzhGNjU3RUZDN0I5OTc3RgorOjEwOTA1MDAwMDFERTg1REUxM0YxODQzMzc3NEZFQTBGQUFFMTZCRTI3QworOjEwOTA2MDAwRUEwRjcxNEU0OTBCQjFBN0RFRTM0MUJFQzBFNjA4QkY2RgorOjEwOTA3MDAwRjIxOTUzRjRCOEMwREEwNDI2NUZGNzAxNkZEMUZGRUQ5RgorOjEwOTA4MDAwMzZENzNBMThGNzAyREZGRjVERTBGMUFFMEJCMTJDRkVFOAorOjEwOTA5MDAwRjVCRjdBREU2N0U1QTMwOUNDREY3RDgxQzdDNzJFQzRBMworOjEwOTBBMDAwMjlGNzhERTJCREM3NzhGOTc5ODNEMUI4MzkwMjlGOEU0RgorOjEwOTBCMDAwQzcwREY1M0VDQzkzRTI3OTIxRUIwOURCMjdFREI3MzVGRgorOjEwOTBDMDAwNkY4Qjg4ODczNjI3OTRFRTgzNzkyNUU0QjhGNDI5MDBERQorOjEwOTBEMDAwQkZGRDRDMEY0MzNDMUFFMkM2NDU1NkNGNzZDMDRCQURBMAorOjEwOTBFMDAwODNCODIwRUU0QTFDNDFGRDRDODgzRkMyQkUxM0VEMDdGOQorOjEwOTBGMDAwNDYyRjVEMjY1NjhBNzkzNTI3NTRFRTgzRUZCQUVFMEU1OQorOjEwOTEwMDAwMjIzRTdCRUE5NTRDM0UzNjI3Qjg3MURDQUU1OUEyOUREMworOjEwOTExMDAwRDcxRjBBNzJGQzMzRkY4MUYwNjdGNzE1MEY1M0M3QkZFMworOjEwOTEyMDAwQThFMjYwNzZCNjg5QzkzMTc1REM3QkJFOTA2MzNDRUVGRgorOjEwOTEzMDAwM0Q4RkNCQTFGOUVEQ0MzRkJFQzA0OEI2MENBMEVEMEJFNgorOjEwOTE0MDAwREI5M0Q4N0UzMUQ2OUJBQjg4N0I3QjYzQkU1MzFFODM3QgorOjEwOTE1MDAwQTBDRkFFRjQ0MDRGQkNGNjg5ODg3OEVEMUExRUVGNUJDNQorOjEwOTE2MDAwMjNENkQ3QUE1Q0RGOUIwOTdEQzY2QkRGNEM4ODEyQUY4NAorOjEwOTE3MDAwNTVFNzA1QkMwQUZBN0Q2MDE4OUU2QkFENkNGRDE1NzI1MworOjEwOTE4MDAwNERCOTFFRTRDNDUyODJGOUUxNkJERjU5RDI2OEE0RjVFRgorOjEwOTE5MDAwQjUwRjgyRTcwRkZFOThCREJBODZDM0FCQUZGOTI1QjgwRAorOjEwOTFBMDAwMzVDNEExRjAxM0Y3MjM4RTg4N0Q3MThBMjc0RTUxNDc2RAorOjEwOTFCMDAwMEIzODIyQkY3MjQwNzVBQUUyRkJGNEZBNkNDNUZCOTkyQQorOjEwOTFDMDAwMUI2RTU2QjQ2Nzc5MEIxNUY1OUNBREI3MkFERTFGRDQxQworOjEwOTFEMDAwNTRBNkE4MEZERTcxOUJFMkZEMDI5MkQzMUZFM0IxQzczNAorOjEwOTFFMDAwNjVGMDk1OTA5QjdDMzMxNEVEQjdFQ0I5NEJGMUZEMTcwRQorOjEwOTFGMDAwQTRGRUIxMzFGNEJENTYxM0QzMDNDNEVCMEEwQ0E1NzAyMQorOjEwOTIwMDAwNTlDQUU3OUZEN0IyNThGMTdEQTNENDMyQzI0RkRGNUY2RQorOjEwOTIxMDAwMUE2MEZFRjY2MTZEQUIxNEZENUQ4QTlEQzhGNjExM0NDNworOjEwOTIyMDAwRkU1ODRGRkY2MzcyREMyMUEzM0RENDI2OTEyN0E0REVCNAorOjEwOTIzMDAwRjFDOEVBRjY4N0I3MEMyMEJERUQwQUZBODc3QTdFMTVFOQorOjEwOTI0MDAwRDVGMzYwNDdBOUVEMEMzOUQxNjI0N0ZEOTA0QTUyQUY4MgorOjEwOTI1MDAwNDVGMDU1OTgwRUNDNjg4Nzc1M0YyNUEzM0ZBRDgwMEMyRgorOjEwOTI2MDAwN0U3QzBDQzI0NzQ3N0M4RURFRjhFQTI2Q0NDRkQzRkQ0RAorOjEwOTI3MDAwQTJDNTA5RkVCMjE1RUYyQzQxRkEzMzI0MkJFOUMwRTQ1NAorOjEwOTI4MDAwNTBEMjQxQ0MxMDI1MUQ1ODlDNEFCQ0Y3MkY1MUUyNURBRAorOjEwOTI5MDAwMEQ2NzlCNEI0OTA3MDI4RTAyQ0VGMTkzOTU3NDIxRTAzNgorOjEwOTJBMDAwNUI0MkZGMDNGODE2OTJEMDMxQ0M5RkY2NDk0RTNGODlCRQorOjEwOTJCMDAwMTJFRjZENkJDNjc1RENDODZFQ0I1M0MxNzNGODUxNTc5NgorOjEwOTJDMDAwQTMxOUUxQzRGMkE5ODQ5RDY0RTBGRTY5QjVERjVDRDgwRQorOjEwOTJEMDAwMUY2MzEzQjlEREMzRkIxMTdFRUUyRDkyMTdFRDlDOUUyQgorOjEwOTJFMDAwNzg1Njg5M0ZDMzlGMDVGNjRFM0Q2MUZFMTI3NzY5NjI0RAorOjEwOTJGMDAwNDI1NEJGMUEzRUVGQ0JBRjI2RTAyOEVDOTlENTYwQ0ZBMQorOjEwOTMwMDAwRDA3MTk2MTEwRkNBQTVDRkI5M0RCM0MyRkMyOEM2MDVDRQorOjEwOTMxMDAwMkZGRDkxQzFCNzlBRjg1MDVFN0ZENzc4MzlEODg5MjQ0QworOjEwOTMyMDAwQzJERkE4ODZBM0Q0MkVGOTJEQzAwNzVDNkVBNzkyNzY2MworOjEwOTMzMDAwMjFCNzNEOTgzNzQxQzlDRTM4NDIxMTVGNTBEQUExQzRGOAorOjEwOTM0MDAwMjU0NUNBMjc2MTk3OEFGMTA0M0M4NURDMTJFMzE5NDg1OAorOjEwOTM1MDAwQkQ5QzBDN0NBMDkyNjM2NDg4REE0RTU1RkEzRDg0OUZENAorOjEwOTM2MDAwMDQwNzhCODg2MzhDRUM4OTRGQjA3RDYyRDhFRkM1RkMxNQorOjEwOTM3MDAwMUM3MjY2NTYyMzAxRkJEQjJBRkMxQTgxQjlGMDVDRjhFQgorOjEwOTM4MDAwMzVENEZCRkIxQkM1NDU2NzdBQTVFMDkzNTlCREUzQTEyNgorOjEwOTM5MDAwMjJCRTRBOTdGOUQ5QkZEMzhGQzc0ODhFNzQxODZGQzZCQgorOjEwOTNBMDAwRUI4MzEzODgyNjlBNUZDRTc5RkEwMEVENDdENjg0RTJFNAorOjEwOTNCMDAwMjNGRDY1QzI3RkZEQjYxNEM0NzlGRjg4QjhFRTI3MTE3RQorOjEwOTNDMDAwRjY0MjJENjk5OTM4MzcwQkZDOUY1NDZGQzU0MkM5RkM5MgorOjEwOTNEMDAwM0VBNDRENkQ5N0IyNzhBMjg2QUUwNEU4N0IzNTg5ODhBRAorOjEwOTNFMDAwMTc2Njg1REJCMTJFRjdBRThCM0M5NzFCRTk3NzQ3OTI2QQorOjEwOTNGMDAwNTU5QzVCQzk2NUVENENCRTg5RkQ1QjVGRkIyNTExQ0ZCQworOjEwOTQwMDAwN0Y0QjRGNjE1MjE4Q0U2Qjc5MzE5MUVGMzNGMzQ5M0U2OAorOjEwOTQxMDAwRjQ0RkY5QUEyNTExRjdFNzk0MEZBNTQ4QkVFQkM5ODNDRAorOjEwOTQyMDAwQzFGNjVFN0NBNzVBQkY4OEU3Q0I5NjIyRjRCQjJDODk5NQorOjEwOTQzMDAwNUNFRkI3ODA4N0IwMjNCRUEyNkI4MzcyNUJBMjAzQ0JDNQorOjEwOTQ0MDAwMzVGRENFN0NFNDgyRTZBMjQwNDZBNEJENUJBNzY3NzlFOQorOjEwOTQ1MDAwQzFBNDQ1NjkzRjlGNENENDcwNzhCOUU0NkYwM0E3QkU5RgorOjEwOTQ2MDAwRjFDMEYzQzIzODFFQkVBRDNEMjRGMkMyMDRGQ0ZFMjg5QQorOjEwOTQ3MDAwRTQ2MDE4REU2NzE1NzJBQzY3REZENjAzRUZCM0QxRTRBMgorOjEwOTQ4MDAwOUM4MEM3RTVFMkMwNzM4MDI3RDk3MjMyMTFFMEZDNTc5NworOjEwOTQ5MDAwOEJGQjMzQzA0RkZBRTlFMDc5NDkwM0ZBQUVFM0I5MjcxMQorOjEwOTRBMDAwNDE3RkI1QzlCODNGQUExRENCRjI4MzZBRjc2M0IwOUM3MAorOjEwOTRCMDAwNzRCNjFCMzAxRTU4REQ3NjA0RURCMjhFMDYyQTQwMDdDNgorOjEwOTRDMDAwRjYwRDlGOUU3NUFBRTBEQ0Q3M0U0NUFDRTNCRjU1NzQxMAorOjEwOTREMDAwMjZGMjQ0RThGQUZFQTZBMEE3REVFQkZGNUIzNDdBMTM3RgorOjEwOTRFMDAwRjk0OTE1RjJEMEZFQzE4OEZENDgzQkRGRjc5OEI0NkUwQworOjEwOTRGMDAwNkQxMkZEQUVFOEMzQjQ1ODgwNEI4NURDN0UyQzE1RTBDMAorOjEwOTUwMDAwQjA1RUMyRjM0N0UzMERDNDBCN0VGRTE0N0UwRUFEMjRBNQorOjEwOTUxMDAwNThFRkI0NTI3ODI0QTc5OUYxM0NEMUUwMUZDQjZFODg2NAorOjEwOTUyMDAwNjM3RUIyN0U1RERDMTI1QTdFRDk0MDg3QTZGQjhEQzE3OAorOjEwOTUzMDAwOTJDNjhENzQ0NkY2OURGRDY5MTFDNEQ3RTY2MURFRjFEMQorOjEwOTU0MDAwN0MwMzhCRkI2N0ZEMjRDNjlGNDNFNUMzOUI3QTYyMDRDMworOjEwOTU1MDAwM0VEMzY1RDdFMzc5OEI5MDREQzY3RDg2NUQyNjEzODAxQgorOjEwOTU2MDAwQUUwNDlDRUQzMTZDMURFMjc5RTlEM0JCMjVDODYzMTJEMgorOjEwOTU3MDAwQ0ZDNzM3ODY4NkFGQTVFNTM5QzA3NzcxNzg5REUzQ0IzNQorOjEwOTU4MDAwNDNDM0VCQ0Q2MTM4OEJGQzQwQTIwRDY1Q0M4OEUwOEJFQQorOjEwOTU5MDAwMzczOTNDNkExM0Y0NUI0MDBGNzYxQUY5RkU4RkVGMDNGQworOjEwOTVBMDAwODk1NThCRjI2MzNEOEZCMzlGMTk0NDc3QTJEODhGREYyMworOjEwOTVCMDAwMDJGOTU4QjUyNjU3RkY5MUUwRTc4MjNDMDI1QTdDNkRDQworOjEwOTVDMDAwNzVGNUI3RTFGQTFENjgyRkFGRTc3NjU1MjdDRkRCNUU1QgorOjEwOTVEMDAwM0ZBNTJDMDlGNjUxN0RFNTNEOTUyNjMxRkJCRTg2Qzc5QQorOjEwOTVFMDAwQkZDNUYzMUFBRDFGRjM5NTZBMjBERjM4MjJERkU5QkI1MAorOjEwOTVGMDAwRTYxQjhCRkNGMTNFRTE2MEQzMTIyRDg1NDNBRDQ0RENDQworOjEwOTYwMDAwRDc3QkVGQzBERkU0QThGQkRDRUEyNENENzVGM0RGMTZERgorOjEwOTYxMDAwRjJGNTg5RkNCNjVBQzg2RkEzOEZENkVGMkY0RDIyNTFCMQorOjEwOTYyMDAwRkFFQkQxMzM1NzZFNTVFNDkxODlGQ0U4REEyQkUzMzAzRAorOjEwOTYzMDAwOEZBQ0ZDODEwRTNDRjcwN0ZEMzhDQ0UxRkNCNkJFRTBGOAorOjEwOTY0MDAwRkM2NjIyOUI0NzJERTQ4NTBEOEY3Q0NFRTQ0NkI4N0ZENworOjEwOTY1MDAwM0JFMkUxNTcwMDQwRjA3M0I0QzlFODhGRkRENTcxQ0QwRQorOjEwOTY2MDAwRTQ1RDUxRTZGQjUwMTI4M0NGQ0QwOTVBRTQ4RjVCRkNEOQorOjEwOTY3MDAwQzRENTFDNjU3Q0YxOUUzODE3MDI3MEFFQ0NFQjNEQkZBMworOjEwOTY4MDAwRDZCMkUwMDI5ODNGRTRBRDQ2MUJBRjIxODlFREFGQzVFRAorOjEwOTY5MDAwQkM1QkUzODJDQjM5OURFM0I5OEM5RUJBNTU4OUM3N0YwOQorOjEwOTZBMDAwRTU3MkJGRjVCNjYwMDY5RTJGOUExMjNEM0Y1RUUwN0JFNQorOjEwOTZCMDAwODRCNjVFMDI3ODA0MkQ5RTAzNjg2RkNFQTY5NTYxOTBGNQorOjEwOTZDMDAwRDdFRkQ3QjBGQzI5QzY2NzdERTEzRDBDNkY4RDIyOUY5NworOjEwOTZEMDAwQjAzN0JDRjU4ODY3RDE5RkQ4OEY1Q0RDMjE2M0JDRkZCNQorOjEwOTZFMDAwRTIwOUNFOTdDNDY1OTYyODdGMkRFMkZBRUEyMjYxNzFERAorOjEwOTZGMDAwODM4QjREMTJFRTQzMTY3QjA4RDk0MEU1Q0JBMkREQUI0MAorOjEwOTcwMDAwMzE2RUIzRkNEOUUxNUI0MDREQzFGM0ZCQTgxQzU5OTQwOQorOjEwOTcxMDAwNENDODM4NUEyRURFQUM4Q0RCMkVERERFMkI0RTQzMjJCRAorOjEwOTcyMDAwRjUyMjM1M0I3MTVGQkRGQzUxRTU3N0Q1NjRGQjdGODI0NworOjEwOTczMDAwREQ1M0FEQjI2QjA2NzMzRkQ3QkUyNDlFQ0YzNzgyOEMwQworOjEwOTc0MDAwMDBGOUJFRjZEOUFGRjQ5MEIyREIxN0JEN0Y0OUY5N0FDNAorOjEwOTc1MDAwQTAxNkU0QTAxNUNCQTM0OUFFRkQ0OTE0MUUxRjI2NzkxRgorOjEwOTc2MDAwREE0MTZFNzc3REMwRTBEMDVERDNDREU0RkU1Mzc2RDQ5MAorOjEwOTc3MDAwMzcwNjEwQ0VGNDlGODZCOTJDRkVGQTAwMTUxNzEwNzcyNQorOjEwOTc4MDAwMzMxODk4NUQyM0VDMzk1OTVFMjdDN0QyRjY1MTdGNUFCQQorOjEwOTc5MDAwMUYwN0Y4QjNGRjdBRDI2NEIwRjcxMzdFMURFMzAyNzg5NworOjEwOTdBMDAwNkQyQjc1MTVDMEZFN0Y1QkE1MTlGMzE4OEMwNjE2Rjc5NworOjEwOTdCMDAwRjVGRDZBRDQ2MTA4MDMwQzZDNzlCODBDRjY5RkQ2RjZGNworOjEwOTdDMDAwNDM3RUYwOEY2Q0Q1RkMyNzlFMkJEOTNBOEVFNUI5ODk2NAorOjEwOTdEMDAwNzFFQURBMkJGN0MyN0MzMkVFNjQ3QTYzNUI5NkFCQzAzNworOjEwOTdFMDAwMUFEMTJGRTFGNjU5MkQ4NzU5RDdDMUMxM0YxRjRERjEyRAorOjEwOTdGMDAwRjhFNDcxMzQ4RkU5RkFCMkQxMEY3NzMzNjFGODE0RjlENAorOjEwOTgwMDAwNTQzMDc2QTQxRERBNDFGNTBGMjRFNTg5RkFDRDJEOTI2NgorOjEwOTgxMDAwNUY0N0Q3QjNBNjc1MkZDNjJGNkEzNkY5MTNFNzgyOUUyNgorOjEwOTgyMDAwNzk0MThCRjExRjMxM0ZGQjlCMjk2NTEwRTcxMUZBNjVFOAorOjEwOTgzMDAwQUU2NDQ1RkQyRkVDRUMzOTQ0RkNCMTM4NTExNUE3ODNEQgorOjEwOTg0MDAwMzlEQ0JFOUUxQkMzRTBCQjk4MzgzM0UwQkJCQjhDMjQyNQorOjEwOTg1MDAwMTZGQ0QzNzNDQjVCOEE1MUZGQUNENkQ5NDBBRjhCNzg2MworOjEwOTg2MDAwNDdERkY2NDA3NDNGNTFFRDczMTY3NjNFNTYwQUU1NDJFNworOjEwOTg3MDAwMjc1RkQyN0QwNzYxRkVBMkE4RTc4RDRDQzk5Q0NGNzJGRAorOjEwOTg4MDAwQjlCRDM3OTBCODIwQkU1NkZCQzZFMDY2RjAwNzE4RkE5RgorOjEwOTg5MDAwQjEzODJDOTUzQkM2OTI0MkI0Nzc4REIwOEY1OTc5QzBDMAorOjEwOThBMDAwRTQ2N0ZFNkExRjNGMDdFQjJBODA3QzkwQkExOTY5ODUzRQorOjEwOThCMDAwOTg5NzcwOUFDQTBGMEI5QzJGMEM2NjIwOUY1MkI5MjI2MgorOjEwOThDMDAwNTFERDk2OUQxQzMzNEQ0QkU5QkIzNjk1REE1M0I0RUUxMgorOjEwOThEMDAwREU5MUNDRUFEOUMxRTUxQTVBREY5MDVDQzhFQTM3MDdCNQorOjEwOThFMDAwQ0Y0MzdENTNGMjU4NTYyRjBDMkU5NzY5RkRFOUU0QTkxQQorOjEwOThGMDAwQUMwRTFCM0I0QTU4QkY0QTlFMzFDRDBCRjY4NDhERUIxNAorOjEwOTkwMDAwNkI2NzEwQ0YwNUQ3QkUzRTU4MTNFOUE3N0MyQzk5QzlDOQorOjEwOTkxMDAwQTUyRkI5QkZGNUNCMkNCMjcwMDZDMDdCNDgxMENGOURFOAorOjEwOTkyMDAwODlGNzdFOUEyQ0VDNUI5NkRGMkJENjI5QkUyM0M5RDExMgorOjEwOTkzMDAwRkIyRkUwREZBREU0RTc3OUM3Qzc5MEFEMjYxNkE3RjJBRAorOjEwOTk0MDAwQzY1MkY4MUY2RDFGOEM3MUI2QzRFNDM4RTY4RkIzRDJDRgorOjEwOTk1MDAwN0U4QUMyRkQwODM4OEFGRUM0QjhBQjQwQUY4MkJDRDU0RgorOjEwOTk2MDAwMzE3RkE5NjgxRjk3Q0NFNDM4MUQ2NzMzOEUzMzk0QzFDQgorOjEwOTk3MDAwQkY3NjQ2NUEwMUUwOERFMjRCQ0JGMUE1NjVGQkNFNjY4MgorOjEwOTk4MDAwMUMxN0ZBQjVFNUEzN0MxRjBFRkVFRUEzNTdFOUZCNTlBMQorOjEwOTk5MDAwRTE3OUFCRTk2MzJBQTc4Rjk1OEQyQ0JFMThCMkU1MjAzQgorOjEwOTlBMDAwMUQ4RDhGNjFGNjFFMjk1MkFFRTM2OTBFODdDNzkyNkQzOQorOjEwOTlCMDAwMEM4RTNERjg0ODkyNzA5QzQ2MEVDNzM0MEFGN0JDRUZGNworOjEwOTlDMDAwQkVFRUY5M0ZEMEJBMjNGMEU1OTJBMUJERURBNjVEOTFDMAorOjEwOTlEMDAwRUIxMUY5REFBMjlGMkYzN0FBQkUyQjYxNzk1M0I1NzEyQgorOjEwOTlFMDAwMzlGOEREMDMyNjYyQzRFNzY0NTdDRjc3NTlGOUNDQ0U0NgorOjEwOTlGMDAwMDRGQjUzRENENzQwQkNFM0QwNDk1MEMzQTU0NkNGRkRBMAorOjEwOUEwMDAwMEIyRDNDN0Y3MEEwOEI5RDNGOUUzMUFEODhBRkNGQ0FBMAorOjEwOUExMDAwRDc2NzM1NDZEQ0JCRDBDMzhGMjc0MzE5Nzc1QTdBRDMzMworOjEwOUEyMDAwNkYwRkRDN0JGQTFCNUFDOEZCNTNGMDc1QjRGRTgwM0YwNgorOjEwOUEzMDAwRkFDMkM3Q0ZGRkRFRjgxMEYzNTRDMUIzMDdDRUFBRjlCQworOjEwOUE0MDAwMDk3ODAyM0ZFMzc3NDM5NUY0MjhFNkI5Mjk1OUU0MEJGNgorOjEwOUE1MDAwQUJGODNBRUI3QjhFNTdDQUJFNUI3MzBGQ0YwMzc2MjgwOQorOjEwOUE2MDAwRTk3OTRENkI5NjA2RTJFN0UyQkJDOUUwNjM0RjA4RkI3QworOjEwOUE3MDAwREJGNjI1RjM3RDZCMUE0OUVCMjNGRkVERDVFNEU4N0U5OQorOjEwOUE4MDAwM0E3Q0FFREVCRjc1RDk1OERFQjNEQTZGRDA5NUUwMEMwNAorOjEwOUE5MDAwQzA3OTNFRUY2NTc2M0U3REI0Q0FERTgwRjhDQjNFNzM3QQorOjEwOUFBMDAwRjhCQkIwM0U1MUQ2RTUxNEM2MDdCREZENDAyMTNDNEY4MgorOjEwOUFCMDAwNUI2NDI4N0JEOUUxQTQ3QjlERTRFQTY5NUE2QTU3MTQ2OAorOjEwOUFDMDAwRjUyRjVCOTc0NUVCQTc5MjU3QTFCQzJFMUE1MEY2NTU4MAorOjEwOUFEMDAwMTY5NURGN0Y0ODVFQ0RFQUI3OTQ3RDk1MERGNTFEQUJGOQorOjEwOUFFMDAwRDlGQkUzNUQyRjgzN0MyN0RFRDVEMzI2QTQ4NEVEODdDNQorOjEwOUFGMDAwRDNDOTBFODQ5QjVDQUUyMTQwNDcwNkY5NkUyN0U4NDkyNgorOjEwOUIwMDAwMDFDRkJFQ0EyMjgzQTYzRTlBN0Q3QUFFODcwRTU4N0NDQworOjEwOUIxMDAwQTI4NEVCRTcxMkIxM0YwRjZBMTVGQkYzQUU1ODc2REU3NQorOjEwOUIyMDAwQjgwQkY0Mjk1RDZGNDdCMkU3N0MzMkQ4MjkzMTFEMEJBMQorOjEwOUIzMDAwQjI2ODU3OUI2MkNFRUFDMTFFOTI1QzU0Nzc4MTlGQzM4NAorOjEwOUI0MDAwNjEyNUYzMjA5RkFFNjM5QjFCRUMyM0IyQ0E2OUQ0MjIyQworOjEwOUI1MDAwM0NCOURGODlBRUVEMUFFREU3QzAxQjJGREMzQjgwMEQ3MQorOjEwOUI2MDAwRTM4Njc5OENFMkZDNUZGN0M2Mzc3RjgxRjg2OEREOTc4MgorOjEwOUI3MDAwNjYyN0I4RjU0NkI1RUY1QzA3RjZENUE4RjZERjdGQzNENAorOjEwOUI4MDAwRjQyRDNCQTcyMUU2M0QwQUZDODdGNDc5NDk5QjAxRTdDOAorOjEwOUI5MDAwM0ZBQUZEQTY2NUYwRkVFODBGREI3MzgwM0VDNjlFRjE4RQorOjEwOUJBMDAwMzc4MjM4RTgzQUY4REEwMEM1RjkwQ0YyODVGNDdEQ0U1MAorOjEwOUJCMDAwNjdGNEMwRTM0RkQ0NzhFQThGRjAzMEE2MjQwMDNDQUVCRgorOjEwOUJDMDAwNjI5RTU0NjdDMjg5MkQ0MUI0RDM5NEU3NjBBODVEOEUyQworOjEwOUJEMDAwRjFENTZFRDJDRjA5NzEwMjcxOEU1QkVEQUYzQzVENDk1QworOjEwOUJFMDAwRDc0NzlGOEYwREQxMTk0NEQ4Q0JFM0FGRDBGRDdEODRFQgorOjEwOUJGMDAwOUQ1RDRBNkM4QTdBQjkzMTQ1RjE3RTg1MzU0QkQxM0VGRgorOjEwOUMwMDAwMjlGOTI2NDVGQjE0NDc4MUEyM0U3NUM4MjhDNUZCQjczNAorOjEwOUMxMDAwM0I0QjE1RjUzQjRBQTYyOERFQUY3NDU1MkFFQTA1RkVGNAorOjEwOUMyMDAwMTZDNUZCQzM4RkI3MjlEQjRGM0ExMDBGQzNDRkI4Q0I5NAorOjEwOUMzMDAwQzE4RTc3MDYzQzhENTA4RUVDNjgyQUVGRUYyMEJERkM3QworOjEwOUM0MDAwQjQ0NTQxNUYyMzNDMUY3REI1QkVEODRGQTI5QzVGNTlGMAorOjEwOUM1MDAwRTU0MUZGN0VBRkYzMkJBNUVDN0M3QkE3ODY5RERGMTA1MworOjEwOUM2MDAwN0VEOUFCMzE5RUIxODBBN0I3MjUwQTc2MEFFQzcxQzZDMgorOjEwOUM3MDAwNTAzQ0UwQUI2MkUxNDM5ODJGRDUxRDIyRThDRjZBRDU3NgorOjEwOUM4MDAwMDc3RjM2MUFGNEZDN0MxOUVEREU1NjlFNjdEMzVBOTU5MQorOjEwOUM5MDAwRTcwMzVGREU2OTI5RjgyQUM0RTlCREYzRDlGOTgwQjE4OQorOjEwOUNBMDAwRDRDMkM1NzU0MzRDNTMwMjNDNzkxNEVCMkUyNTJCNTU3OQorOjEwOUNCMDAwNzhCQTVCNTFBRkIwREVBMzc4N0Y1MkYyNDY0NUZCMTQxMQorOjEwOUNDMDAwQzc4MzJBM0MzREFDQThERkVFRENBOUMyNTNCMzBBNEZFMAorOjEwOUNEMDAwMkYyOERBQzc3RTFFNkMwNDM2MUFERkUxOTUyRDc0RkUzQworOjEwOUNFMDAwQjc5RTZFMkEwN0JDOEMzRUUzOUQwRkZDNTJFNEY3MzQwRQorOjEwOUNGMDAwODIzODJDM0U1QTdGMDQ0QTNGREQ0RjgxOUZFQTcwNDNGMQorOjEwOUQwMDAwMzI5NjQ3MUIxQ0U4NjczQUQ2MzAwNENCRTMwRDRFN0NGNQorOjEwOUQxMDAwRkVCQjg2MTIyQ0RGNkQ3MDYxRjk2RjBEOTNCMTBDMzRCMAorOjEwOUQyMDAwQjhCMTZDNjk2OEMxRjdGNzM1QjQ2MTQ5MjE5ODBFRkE4QQorOjEwOUQzMDAwQzIxRURGNzNBRjQyM0FFQ0U3M0IzNUMxNUE4OEEwQUU5MgorOjEwOUQ0MDAwREI3OTAwRTU2NDY3QkY2MDI3RDQzNzkxRDdBNzREODBFMgorOjEwOUQ1MDAwRjM1Q0IwOTkwMkZCMEE0QThBQ0ZGQjUyNUQ3RjQ5QTFBRQorOjEwOUQ2MDAwRjU0RDI5QUMyRUYyMTI1QTM0QUUwMkIwQUYxRkQ4Nzk5RAorOjEwOUQ3MDAwNjRCQjM2OUQ5MEZCMzdCQTkzQUQzNjU2MzdEMjNBMjI0NAorOjEwOUQ4MDAwMUJGQUYwMUVEOUVFNEEyM0U0MzdBMDMyNkVDNUZBMzQyRQorOjEwOUQ5MDAwQTg3Nzk5NThGQkE2OUQ0N0E2Nzk1MTNGQjBGOEYxOUQ0OQorOjEwOURBMDAwRTFGOEYxMDMzMEFFM0E3RUZDOUIwQjBFMEJGODUzNEVGQworOjEwOURCMDAwNUMxRDZDODE3NTlERTBGRTIzMTcyOUQwMkRBMjY1QTkzRAorOjEwOURDMDAwQjY0MDA3N0FGMUI0Q0E4RTEwNjU5REE2QjQwOUZBNkQ0MworOjEwOUREMDAwRDEzODY3NjE1RUYwNkQzQTAyNzlFODMzMjRCNjFGRUQ0MQorOjEwOURFMDAwQjEwMzUzOTkxQ0VGQkFERDgwRkI5RDkzMUFENzMyQ0M5NworOjEwOURGMDAwNzc5MjQyQ0YwMEJDRjZBNDlDNDRCREQyNjUwOTY1MDBCMQorOjEwOUUwMDAwMUM5RTRCRjk5MEQ1MTM0MkNGNDhDRTg4QkE4RUFERjM0NQorOjEwOUUxMDAwNUY1MzRFRTAzRTIyQ0EzQTc3QTc0NDg5OTNCRjkwQzI2RgorOjEwOUUyMDAwRTMwNjdFNTczQTlFRUJFNUY1OTM5NUFFMzVBMDI3NEVCNworOjEwOUUzMDAwOTZCQTA2QzE3QzRFQjgwREM4M0Y1RUI3QzUwN0Y5OTYwNQorOjEwOUU0MDAwNDRFQjJBOUUxNUUxNTdDOTQ5RDVFMTc3NzdFQTE5OUY3NgorOjEwOUU1MDAwOTFCQkU0QThFN0NENEI1Mzk5OUQ4NTc4ODNGRERDOUNBRAorOjEwOUU2MDAwMThCNEMzNEY2QUEyOUYxNzlGOTNDQUY0RjVBNTdFRDE3OQorOjEwOUU3MDAwRkQyQjc3RjFGNkIyOTkxNkVDQUY2QkJEMDlFM0I3NUQzOAorOjEwOUU4MDAwRUVDMTY4MDc3NUQ1NTMyODUxRkVFOEJBNTA3RkY5MTUyMQorOjEwOUU5MDAwNkMzNzg4RDAxNkM2MjlFNzcyMzlGNTlCRjY3NTdGM0U3OAorOjEwOUVBMDAwNDVERjNGQkIzRUM2ODkzMkRDN0EzM0VBQTdCQkY4Q0IzRAorOjEwOUVCMDAwRjNFMzhENjhCN0NDOUY5MTVFMDY3QTY5MkU4Rjc3MkQ3QworOjEwOUVDMDAwQjA2ODEzMzFFQ0E1QjVFOUUxOEFBMEE1RTY4MjJEQTAyMgorOjEwOUVEMDAwRkU5N0RCMkJGNTM2NUFBRjRFQkI3QjBCOTRBQjA2M0VBMQorOjEwOUVFMDAwQUM4NzIzOUEzNTQzRjc2RTAxRjM3MTBENjVBRDYyRENFMworOjEwOUVGMDAwMkYwNURGNkJBMEYzNUFCODQxNzZCMEZEOTMzODc3QjhFMQorOjEwOUYwMDAwRkEzQkU1NTcwODNBM0NDOUYzNjQyODdDNzE1RjM4Mzc1RgorOjEwOUYxMDAwOTVFRDdCQzQ3NzczMzlCRDVENENFMTc2NUIxRUM5QkJBMworOjEwOUYyMDAwQTY4Q0UzNUMwNjNBRTk5OEZGNUU2RTFGN0U3NzY1M0I4MAorOjEwOUYzMDAwQjdEQjNFRDJCMzcxRDVGNzUwODg3MUU3NzFCQzlGRDRCRgorOjEwOUY0MDAwMTM5NzA0NzZEQzVEMTZBNDhGRkNBQUFGMzYxNUQzRjUwMworOjEwOUY1MDAwRTdCNzVCMzUxODg3MTc3MjNDQzBFRTAzMkJGRURDODMzNgorOjEwOUY2MDAwNzI2RTY0NDdGMEI5NTMwNEU5QkMwREY4RTQ0NjdBNkFBRQorOjEwOUY3MDAwQTY3NzIzRUE4NzUxNUY1M0ZEMDM3MkYxQUFFN0VDMjkyNAorOjEwOUY4MDAwNkNCNTQ3M0Q4RkU5NkZBOEU2RjJCMTFFRTVEQUQxODZFMAorOjEwOUY5MDAwMEQ1ODNGRDZFMEM1RjI3OEMzNTYyRTFGOUJCMEZERERBRAorOjEwOUZBMDAwODYxRDVDM0VGQUI4N0NEQzgzQ0ZEQjFCQUFCMDdDQTNBOQorOjEwOUZCMDAwQzE4M0U1NUYyREVFQjhENDA0MjAzNjBGRTY2N0JFQjU0OQorOjEwOUZDMDAwRDM0MEUwREVCNEVFNzYwM0QyMjlFNTgwNjc5RUI0NDM0OQorOjEwOUZEMDAwRkU4QkMxMEFFN0VFRDQ3OTMwNkE3OURCODNGRkQ2NUU2NworOjEwOUZFMDAwRjc2MTY0QTQxNjQ3RTRCRDgwN0Q5NkQ5MzdGRDlDMjBCNworOjEwOUZGMDAwMEUwQkM4OTMxMTRGMjRERDBFRjJGOTg0QzM2MTAxQkIyRgorOjEwQTAwMDAwNzU2NDZBMzJBQkJCMUMxNjFEQUQ5NzNDNDFFQjU0QkU2OAorOjEwQTAxMDAwOUNGMDM4MkMwNjVBMUY5NTlBQzJEQUJEMEU4Qjg5RDY1MQorOjEwQTAyMDAwNkY3RDIyODVCNUZCMDgwNkE5QzczRjkxNzEzQkM4OUY4QworOjEwQTAzMDAwNTIyMjFEMDU3RTI4Mzc2NjREODA5NEQ5MEE2QkU5NTE1RQorOjEwQTA0MDAwRTA4MzQ5Qzk4QjI2MDAxRkZDMzZDNTgxNzQzOEM1QjEzMQorOjEwQTA1MDAwRjEyOEQ0QTcwRTY5RDZDMjUxMUI5N0I5NjAzMzdDNTczQgorOjEwQTA2MDAwNjZBRkQ0QzI3NzEzRDJFRURFMENERjREMUNGOEIwMzZFQgorOjEwQTA3MDAwRjJCQkM5NDNGNzZFODZGQTM0NjdCMzE2RUNDMURGQTZBQworOjEwQTA4MDAwQjBGM0ZEQTIxRjUxMTdFRDQyQkU4QTNDQUQ2MUVENkVFQgorOjEwQTA5MDAwOTRFM0Y5NkQ2RTk0RTMwMjJFNjU3NzU2REUwRjdFQkE3NworOjEwQTBBMDAwQkEzNkM5MkFDMTNDRUU5NDdBODJFRjkwMEI1NzdCOTU2MQorOjEwQTBCMDAwNzIwQjk1QjNEMzlGQjhDOUIyOTFGMjU3MURENDZGQzUzNworOjEwQTBDMDAwRkE0MzFCQTNDQkREOTlBOTUxRjRDQjFGMzg5RjgyREU0NQorOjEwQTBEMDAwODQ3Q0U4M0ZFOEQ5N0QxRTJGRjNGNUQ1QjUyRkIyMkM0RgorOjEwQTBFMDAwNDI3REU1QjE4MDdFREQ5RkMyRjRFNTQxQUUxRjJGRjNENgorOjEwQTBGMDAwQjI5QjNGQUZEM0I4RTZDMzM4NEI1M0ZCRTRFQjZBNjg3RgorOjEwQTEwMDAwQTc3Q0FCM0EyN0QwNDczQkU3RUI1NUE5NUMzRkYwN0JGOAorOjEwQTExMDAwMTNENjEwNzY5RUU4NDZGOTVBMkIyM0Y3NkY1OTkwOTc3RAorOjEwQTEyMDAwRDM3MjBDRjI0NUQ1RjkwRjM1NzBDRTI4QTc3NzFFMzBDMworOjEwQTEzMDAwOTU4QjJDRUZCMTREOTkzRkRBQjNGRkU4QzdFNDFFMUNCNQorOjEwQTE0MDAwNUY4NDRENDc2M0RGRUI3RTIwMzVFMUJBRUI1NkI2RjMxMworOjEwQTE1MDAwNzVBRjI0MkNCRjU5QkQwRUUyNDk0MERFMTJGOUNFQkRDOQorOjEwQTE2MDAwRDcxMzhDQkU5RTVFRUJFMEY3RUVBOUYyQUNBOTFERjQwRQorOjEwQTE3MDAwMzhDQ0E3NjJBMTg1ODBGRjI2NTI0RTlDQkE4RTlDNTA5NworOjEwQTE4MDAwQ0I5REJGOTczQ0JCOEVCQzc5MzE5QUJDMTFFNzlERDU2NgorOjEwQTE5MDAwQTVCMEU3RTA5QzE0RTREQkMxN0QyRkUwQTdGRkE3NDQ1NgorOjEwQTFBMDAwQ0Y2QkQwNEY1NzU5RTgyRjFBRDg5RkQ5ODM0ODY3NzY3RAorOjEwQTFCMDAwOUJFNzc1NzgyRUU5NTlEQzVERTRCMTVFRDA3ODdGMEJDMgorOjEwQTFDMDAwNzZEMUIxMjc5NkEwMUNFQTA0RTU0MEY5RjEwRDVBMDdCMworOjEwQTFEMDAwQjk1MzY0NzVGQjAxN0U2NDA4QTM5RkJFRjIzM0RGRTZDQQorOjEwQTFFMDAwN0FCMTc3QzlGODQ5RTQyOTc2MzU3RjkzODE3RUFDMUIzMworOjEwQTFGMDAwRDA3QjVGNzBBODkwQzcwNEUxM0M0MDc3NDkwQzlBM0M0MworOjEwQTIwMDAwMUQxMkYxNEI4NTkwNkY5RDg4NzY0NDQ3QkE1RTBCRTUzMQorOjEwQTIxMDAwREY3QjlGRDg5MTlFOEJGREFCRjc4QjFEMjkyNTQ2MzZBMgorOjEwQTIyMDAwRUVDNEM5NTBCNkU5M0QzQjE2QzEzRTY5OTQwMUY3NDlGOQorOjEwQTIzMDAwRUZGM0ZDQkVFOTlGNUVCNTgzQkU5QTJFRkIxM0YzQTUzOAorOjEwQTI0MDAwREVGQkNDOEU3N0U2OTUzOUYyN0JFRjM3RTlGQTI2QzA1NAorOjEwQTI1MDAwRkE2RUI0RUY3NDFCMDM3MTAwNDZGNUZFQjM2NkMzNUY3QworOjEwQTI2MDAwMDhFNDQ1OEZERTcwOTVDMDdENjQzN0RFOEYxMjE5QzQxNworOjEwQTI3MDAwNDRFMTY5RTcxMTI4OEIzRjc3NjExQUNFODgwQkY1NDdENworOjEwQTI4MDAwQTAxQ0Y1MzVEQjlFREYyODlGRThENjJCMkQ0N0Q4RjFBMworOjEwQTI5MDAwRjBBMUNBRkIxNjRBN0VDRkY2QUJCQ0VDNzU0RkRCMkFBOQorOjEwQTJBMDAwQUYzMjRGQURENDVGOEM3OTE0NzIzMDE2Q0FDQjUyMTBENgorOjEwQTJCMDAwRkQ1RUIyODZEREMzMjBFRTVGQTBGQkQ4QzQwMUM1QjA1MQorOjEwQTJDMDAwRUY2NUY5NTJFMzIxQ0Y4ODRFQUVFMkE3MUYyRkI4MTdGMgorOjEwQTJEMDAwRjlERTg0RjY0RkNGM0VGNjE1MERFNjA5QjQ2QTVERkQ1MgorOjEwQTJFMDAwQzdDMjNFNzZDMzIwRTc0NjVBRkY4RjQwQzIyRjBFRDAyQQorOjEwQTJGMDAwQjJDRUZBMTcxMjc5N0Y1QkNEODY2RTQ1QkQ2MzYzRjhFNworOjEwQTMwMDAwOUUyMEM4ODNBRUY5OUI4QzdBQTc4NjkwQUQ4MEFGMUE0OQorOjEwQTMxMDAwNzI1OEJGMzY0MjBGOTI5NkZGRUM4MUZCMzAyQUU3MkEzMworOjEwQTMyMDAwMDE3MEI4QUZEMjRDNzdEMUY3MkFGOTdFODM3ODFCNTlFOAorOjEwQTMzMDAwOURFRkIzMDhGOUVDNzYxN0VEQjczMjgxQkY0RjY2NEY0QQorOjEwQTM0MDAwQzc3QUJBNjhBRjYyRjU0MUEyQkZEN0Q4RkIyOUEyQ0VCRgorOjEwQTM1MDAwRkJCQjQ5RDQ3RkNFRUE1OUUyRkIxNkY2N0Q5RTE4RkY3RgorOjEwQTM2MDAwQkREQkIxRERDMkRFMUYzRjYwRkQ3NDkwMDM0MkJFNTcwRQorOjEwQTM3MDAwMENFMEY5MjVGQzdFMUYyQUVGQTcwQzQ4Qjg2RTVFODkxOQorOjEwQTM4MDAwQjI5REVCMDM3MTlGNEZDNTRGQTdDNEJDMDdGQ0RDMjJGNQorOjEwQTM5MDAwNjFFRTVCQ0Q3RDNBRjQ2RjVGOEE2QkM5OEYzQzlGMkM3OQorOjEwQTNBMDAwRjI1MERDRTUxNjE3RDg3QjZCNUUxREJDNEJFNkY5MzgyNgorOjEwQTNCMDAwNjA2RjZDRTNGMUU1MEFEOThDRjE4OEVFRUQ0Q0NFRjdENQorOjEwQTNDMDAwNjVBRjJEREZGMEJBMDI5RkJEREFGOTNEQ0ExOEE4QTMyOAorOjEwQTNEMDAwRTM1RDdFMjgwOUYzREJDOUMwMDBDNkMzNTcwQzkwQzRGNworOjEwQTNFMDAwRjkyQTNDREYyQUYyQkRFQzM5QzQwNUZCNTNGQjZCMjY4RQorOjEwQTNGMDAwNzY0RkU1RTcwMTk0QkZDQjVGNjNGRURFMzUzQjhGQTA3MAorOjEwQTQwMDAwOUU1QjJDM0I5MDhFMEY2Nzc5RDYwMERENzY1QUQ4N0QwNworOjEwQTQxMDAwODRDQjM3QkM4MUZDQkEyMTkzREIwOUQ2RDA1MDA1M0NGNAorOjEwQTQyMDAwN0JDM0ZGOUUxQkMwRkY5RTdGMjRGQ0Q1N0U2NjcxM0VEMgorOjEwQTQzMDAwN0FENTc3Q0M0QkVCQjRCMDM4QTg5M0UzRTk1MzhENjM2RQorOjEwQTQ0MDAwMDQ4N0Q3MjNCMDlFQ0JDQjAyQjkzNjE5OTI4NjAzODlGNQorOjEwQTQ1MDAwMkNFRkU4REQ2MkQ4MDc3NUQ3NUJGMDlFQTM3OUVCM0U2MQorOjEwQTQ2MDAwQzk4RjNDOTcyMjRBQjVGRDdGMEVGOEE4MzgwQ0FGRTY5RAorOjEwQTQ3MDAwREVGMDdEMTZGMDczMURGODJBREI3RjYwRjgyNjY5ODMxNQorOjEwQTQ4MDAwN0EyN0M0NEQ0RkIzN0JDNzQ2MDQzRUQ1NDdFNkJCQkNENQorOjEwQTQ5MDAwMzU4MEU5RERGRUZDMUU2QTc1REVENjVCMDMyQzBDNEZCMQorOjEwQTRBMDAwM0MxRUIzNjZDNkJCNjMyMDFFMjNGODYxN0MwQzY5MDFBOQorOjEwQTRCMDAwRkYzQUE1NkIyN0E3NkIyN0QwQjVBMERGNzA1Qzg2N0UxRgorOjEwQTRDMDAwMTc4NUJGQzJGNDRCMTQ3OTY5RUYwRTUwREUwQjQ2RTFERAorOjEwQTREMDAwMTZCODAxREQwNkZFOTE3NERCNEFFRDVGOEM2M0JFNjI0NworOjEwQTRFMDAwNDJGRjg5MUFDRTVGNzFCODBBNzg2QkQzQUUwRjY3NkRFMQorOjEwQTRGMDAwREEwRjAzNjc2RDlBNDNFMTdGMTBGMEVFNEIzRkE5RjE0RAorOjEwQTUwMDAwMjNFNjFEODU0RjhCQkYwRjlGMzZBNjczMzlBNTBENjJCRAorOjEwQTUxMDAwOUVBODFBRUYzMTY5QkRGMERFM0ZFREZBNzg1N0I2RkYxRAorOjEwQTUyMDAwQzA3ODU3QzM0RDVERDZGMEY4QTZGQTc5NUU5QTg4RkZEOQorOjEwQTUzMDAwRkUzMDcwRkNGRkNEN0YzRUJGRkU5MEEyN0RFMTg2NzdBRQorOjEwQTU0MDAwMTRFRDhCQkMxRjI4RUE2MzgyODE3MjIwNzNFMTBGMUYxOAorOjEwQTU1MDAwNzcyMTg0RjZFNUY3RjVBQkY3RTU0RjlGRkVGMjBBMEQ5QworOjEwQTU2MDAwQzREQjRBMDJDQzlGRkY2NUJBNjc1MzFBODVGM0ZCMUExNgorOjEwQTU3MDAwNUZBMzg1QzI3NUU0OTkxNjc2NkY1Nzc1MkVFNjBGQUQwOQorOjEwQTU4MDAwRTM3M0ZDNkFDQzdGOURCRDk3RDJDRDU3QzQ4MEZFNEU0RAorOjEwQTU5MDAwRkZBMTlCQjQ4RUJDREU3NDUwN0E0NTQzNUMxMTc5Njg5MAorOjEwQTVBMDAwQTU0NjlCRDY4NUZFMUFFMjhBNDYzNzBGNzBCQUMxRkNEMworOjEwQTVCMDAwMUZDQUVGNTU0NkEyQjM1MzNFQUZBQTkyMzBERkE5OEExNQorOjEwQTVDMDAwQjA3QzY4NUFGQTNEQjQ3REJBOTZGOEUxREVFMzRBQjM0RQorOjEwQTVEMDAwRDY2RkMwMzg5RkYyM0NCMzgxREY4QjRDRUNGMThBNzNBRAorOjEwQTVFMDAwQ0RCMjRCQzZCQ0I0NTkyNTJDM0U3ODk3QjkwNUNGOTM1NAorOjEwQTVGMDAwQ0UzOUJFRTlGMkJEQjQ5RDZDRjYxNkIzN0M2QjcxRkUyQworOjEwQTYwMDAwRUM4RjlBRUYxMkY3N0IyMDhERjE3OTk3QzRFM0M4OTIxMworOjEwQTYxMDAwMEVFRkM3NTI3RjM3Mzc4REYxRDk3NDc5QTMwQ0Y5MkUxRAorOjEwQTYyMDAwQTEwRjA4REFERDgyRUZFOEZBOEUxQjBBRDlGOTBBRjhFMQorOjEwQTYzMDAwNUQ4QTRBQTJGMzBGQzZGM0NFMEY5N0MzRkIzNTI3MURFMQorOjEwQTY0MDAwMDg5N0JBOTI4REY5ODBDN0JBMDlEMjM5NDM3RTc4NUZFQworOjEwQTY1MDAwNTNCN0UxNkJFQ0E3NDI3RUIxMTFERUVGM0VDRDVDRTE3QQorOjEwQTY2MDAwMjMzQkU4M0VDNTExRTlBRjBDMkUwMEJFQkNEMUZFNDcyRQorOjEwQTY3MDAwQ0NGQjRDODMxRkU5RTk2Q0MzNzEyQ0RGMUZGN0ZCNjIzNQorOjEwQTY4MDAwQjAzMzgyMEQ4MUE4N0VDOUVGRUIxRjEwN0UwMUUxMjc1OAorOjEwQTY5MDAwMTA3MjQwRENDQkI3Mzc4RENCMDVBMzM0MDBFRjUzRDMxQQorOjEwQTZBMDAwQjI1MkM4Q0JEN0QyN0FEOTJCMDc2RTIwNUYwRkZDMjNDQQorOjEwQTZCMDAwRTVFQkI3QTVGMzlBNjRBNjE3RDVGNEFEQTY2QjQxQ0YyOQorOjEwQTZDMDAwNzA5RjM3RkMxRUMxNURENERFMDNCRDNBOTc3OEYzNkFGNAorOjEwQTZEMDAwQTg5Q0FENUFEMUE0MUIyRDdEN0ZCQTVFNjVGRTNDODMzQworOjEwQTZFMDAwNDQzOTY3RjJEREU1Qjk4M0U1NDc5NkNCQjgzRjEwRjkwOQorOjEwQTZGMDAwMDkwMjBGOURCREYxRDY5RDc2N0QzQjUzRDlGRTBGQjc2NAorOjEwQTcwMDAwRTMzRjVGRjBGREY0MUE1MUQ4MDM5NkY0NUVFQkI2QTU3MworOjEwQTcxMDAwNUY3RkREQ0FGNjFGNzhERDExRTc1RjE2Qzg5QUYwNzkxMgorOjEwQTcyMDAwMEZDODFGMDYzQkFFQ0JDN0NFMzM1NjY3MzVFMTNERjJBRgorOjEwQTczMDAwQTQyNDE0MEI3NkUzQ0E4MzMyRDIyMUQxQkFCNDI5MTFFRQorOjEwQTc0MDAwRjc0RDc1MTBGRjQ3NDA4RjJCQzZBQ0MwNzM3MEJERUU0MAorOjEwQTc1MDAwODkzMkI3RTJCOTM4RjU3RDUxMjI1RkI4OTZGN0EzQkVDQQorOjEwQTc2MDAwMzdBQTk2RTcwOUQ3QUFGMjc2NDZBNEYzRkNFMDQyNTI0QworOjEwQTc3MDAwQzhGMjJCOTQ3NkE5QkFFQzZDMjAwQUJGNjRFN0Q1MDYyMAorOjEwQTc4MDAwRjQwMzhDNEI2RkY5OTkzNzJEOEM4NzA5RTlCREVDQjgzMAorOjEwQTc5MDAwQzkzN0MwREJFNDdGMjRERUQ0RjQyQTVCNzZFMzc5QThGMgorOjEwQTdBMDAwRUY0QUFGNTczMzVERjNEMzEzQzI3Mjc4MUVFNDcwMTVDRQorOjEwQTdCMDAwQzEzREVFMDYxRkRDRjcyRkVFQzdFRTkyRDg3RDM0NUQ2QgorOjEwQTdDMDAwRTcwOEZBOEQ2RTc0QkZGMkE4OTMxRTNDQ0YzOUYyNUQ5NAorOjEwQTdEMDAwOTdDQ0YyMDg1OEJFODFCMDUzODRERDMyQkEyMzI0QjMzQgorOjEwQTdFMDAwRkJFREY5MzkyODlFMTdGNDZERTU5NzMzNjA0NTNCNDczQgorOjEwQTdGMDAwRjhERkZFNUU3RTZCQTFFNzBFMUE5OTVDMTNGRUMxQTIyNAorOjEwQTgwMDAwQTAxQkVEQjg0RTlEQkYxOEVFQjNGN0VFMzc0NUI1MDM2QworOjEwQTgxMDAwN0U5NkFFQjlFRTNEQUU3RkI1Nzg3RTA2RjQzMjkzQ0IzMAorOjEwQTgyMDAwNzc3MTlGNkI4NUNDRUU3QkVFMEVDOEU4QkY1QkZGQ0ZFOAorOjEwQTgzMDAwMUZGRUY2NDlDNzhERjdGNTc1RDZFRUE4RkIyMjUxRDY1NworOjEwQTg0MDAwNjlEODc5ODlDMjcyMDdFNkVEQzE3RTA5RkM3N0MyOUY5QgorOjEwQTg1MDAwQTc3RUZGRjVDQzMyMUZDQ0FGNDIxRTgzRjc2Qjc2RUY5RAorOjEwQTg2MDAwNjBGM0U5MEIyRjc1MUI0MjM4N0U5RkVEN0NGQ0JBODNBOQorOjEwQTg3MDAwQzVENkM4RkIzMENFQTVGN0VDQ0ZBQ0U3OEQ2MUJDN0U2QQorOjEwQTg4MDAwNUJGQzhGMEQ1NTI5RUM5QkZGRDdGNzBERDM2NTZBM0ExQQorOjEwQTg5MDAwNTJGRDk4MjdGOTk4N0Q0QTk4OUQzQThGMDRCMDVDNDAwNAorOjEwQThBMDAwNDI1ODdBMDhDQkE3NUY0QzlDNTgyRTI1NkUyQ0E3NjU4MgorOjEwQThCMDAwN0E0RUE1NjM3RTRCMjgxMUYzMjE1RkZERUI1MEEwOUJFMAorOjEwQThDMDAwQ0JFMzQ2Mzc0MUVFREMwRjY1QTc3NTE1Mzg3MEZDQUU1QgorOjEwQThEMDAwNTdGRTlBMDE3OTJEMzdFMkZGRjg1OEQ3MDU5OEE3M0EyNQorOjEwQThFMDAwQUVGMTZGQTUzMkM2NEY4ODcxMkRDQUZCNEE3RTRCMDI2RQorOjEwQThGMDAwOTlDMEUyNjJEQjEyQjM5MERGQzJGMjJGQTk1OUM4M0ZDMAorOjEwQTkwMDAwODhCN0U2OUREM0IwRkM5MDk1MTJERUU3REExNkQ0MjAyNgorOjEwQTkxMDAwNkJFNTJEQ0JGMkMxRkQzQzZEQURBQzNENkY4RENEMjcxMAorOjEwQTkyMDAwRDE3QURFMjgxMzZCQkZEQkU2ODM3MzBGRjM0OTEwRjk4RQorOjEwQTkzMDAwNzEyMTlDN0E5MEUxMUMwQzkzNkZFMkZFNzM2QUIxNjdGRgorOjEwQTk0MDAwODM5REI1QUNEREM4RjJGNzQ5NzAyMEM4RjFGQzNFRjYzNgorOjEwQTk1MDAwMzcxMzMyMTg5RjBGQ0I2NjcyN0I1ODk5RDIwRkQxOEY2NQorOjEwQTk2MDAwQjdBRkNDMkM1Qjk2MDE3MUQ5MEM1NzRDMDY1RERGQjBBQworOjEwQTk3MDAwQjhDMEI2NDc4QUQwMkY4RkJGQjNGMkM1QTg3QjMwN0U1MAorOjEwQTk4MDAwMjhCRTZCQ0EyQ0IzQzI3QjJGNDkyQ0RGREM3QjkwRkYyNworOjEwQTk5MDAwNkUwMTA5MjU0NkRFMjczQTJEQjMzQzExREU0QkNGMjA1MAorOjEwQTlBMDAwREM2RThFMEU1N0Y4M0QzQTc3OTRGRDlDQzg2NzFDMDYwNgorOjEwQTlCMDAwN0IyQUY0OEZCMzdCQTk1RTkyNTgzREZGMTlFQjFEOUI1OAorOjEwQTlDMDAwODdBMjBGREYwQjc2NkQ1M0E2NjczMEFDNjM5ODlFMTA5RAorOjEwQTlEMDAwMzNDQ0ZGNjk4MzZGMTdEQTlGRjUxOUUwOEY1Q0YxOEMzOAorOjEwQTlFMDAwNDEwMzc2QzFDNzU0QURDMkI5OTI3RjZGMzA2MkY5MDk5NQorOjEwQTlGMDAwRERFNzQyRjkxRjc0OUYwQkU1MzlCQUNGODVGMjMzQkExMAorOjEwQUEwMDAwQ0Y4NTcyRDkxNTI3MjUxQTQyREVDOTcwQjk2MDNEMjI1QgorOjEwQUExMDAwREVBNjlFRUYyODAxNkYzMUZFNDEzRDhFQkYzMkQzODMwQgorOjEwQUEyMDAwRjBFREMxRjc3RUUyODM3OEM4NEJCNjUwNkFEQzc1RTg3QQorOjEwQUEzMDAwQUQ2RjM5RTNFNUZCQkRFOEY5NTlDMzMyRDhCRTM2QkY4NworOjEwQUE0MDAwNTU4QjdBM0NCRjJEMThCQjNDRTJCREU5MTk3QTZDQ0YxRgorOjEwQUE1MDAwN0JFNTczM0MyN0RBNjlFRDgxQUY0QkEyNEI5RUFFNjE3QgorOjEwQUE2MDAwRjVFOUNGRTQyMjdDNTc2NkJBOTZDMUJBMjk3RkNGODAzOAorOjEwQUE3MDAwNzVFNEI3N0RGODJGNzA5RTg3RjY4Rjc5MDQ1RDUyRThGNAorOjEwQUE4MDAwMzFCNEYzNTVFQjUwQzM0MUFDRUIyNTVCNjAxQjdDRkY0RAorOjEwQUE5MDAwRDIyQkQ5QjAxMjJBNkYwOEUzMUJBMDIzMjlEQTdBMzcwOAorOjEwQUFBMDAwRTI3Q0VGMzA4NDhBRTA5Q0NBMUREN0U0QTg3OUMzMkJFRQorOjEwQUFCMDAwMzM0QjExQ0UxMkQwNUI0MjA0OUMzOEJFQkUyRjVGRjdFMQorOjEwQUFDMDAwQzRCMzM5OUQxMjcxQkYwNkM4NEUwN0U4QTFBQkIxNjA4RgorOjEwQUFEMDAwRDc1NUYyNzg3RDVCRUJDMEY3NjE3RERFRTMzMjE5RTQ5OAorOjEwQUFFMDAwNDBGQTU1RjBERDBFOEUxRjUxRTYxREQ0QkIwMTRGMkZFRAorOjEwQUFGMDAwMUQzQzNGMTBFRTVGQTU3ODE5MDhGN0IxNkVDRDE4QTQ4NAorOjEwQUIwMDAwRjAyRkU2OERGQUU2ODk0N0VDRjgzRUZDQjIxQTk1Q0ZCNQorOjEwQUIxMDAwQ0QxNTkwNEYzMkQ3NzhFODJENThEMjdDRUJCOTBBQzhDMgorOjEwQUIyMDAwMjc1OTk4MkMxRDgzNzI5MTIzNkIyMkU0OTE4ODdDRjcxRQorOjEwQUIzMDAwMjU0MzRBOEYwMTJCNEQ3MzU2QTIzRDU2MEFDMjI1NDIyQQorOjEwQUI0MDAwMUY5NDFCNjNGODY1RDA0MkZGQzQyQkVBOTM5MjA3MjgzOQorOjEwQUI1MDAwREU5RkUyQzg1MUI0NEYxRDcyOEJBMjVEOEMzQkNEMzk5NAorOjEwQUI2MDAwNUNGMURFQjBCODUwMzZFQ0JGRTgzQUQ4RkREN0NGQ0FCQQorOjEwQUI3MDAwOTg3Nzk3RjdDQUM5REI2RUExRjVFOUNGQ0RDMkZCRkU4NgorOjEwQUI4MDAwNUVFMkVERDNGNzk1RTNFRjBCNzY1MTc4RUFBOTIxNzVGNAorOjEwQUI5MDAwQTFFNEMxQzcxRTgxQ0U1NEY2N0RDREMxNUYxRTczMzlCRAorOjEwQUJBMDAwQUU2M0RGREZDMEFFMTdGMjc1NzVCQkIxMThFNEVCQjc2QgorOjEwQUJCMDAwQjVGM0Q1Nzg3OTI1ODNERjFGQzJFREZFQkVFOEE1ODcwMgorOjEwQUJDMDAwMUYyNDA3QTMxNzdFREY5NjlBNUUyMEIzOTREMTFGMkIxNAorOjEwQUJEMDAwQTc5RjYwRTdDMEJFQUIxQ0ZCMTNDOEIxODg3Mzk4M0Q0QworOjEwQUJFMDAwQTVDQURGMzY0Q0VGN0M3RjFERjhERkRGOTMwOTlFQUJGMworOjEwQUJGMDAwRTNFN0YzOTZDM0JGRTUzMDlEOTNBNUNERjdDMzdENTI0MAorOjEwQUMwMDAwRjRCOTE3RUM0RjM4MDdFQUEyRkQ1RkNFRTA3NjUzQ0REQQorOjEwQUMxMDAwQTFGQjUzOEFDMkVENjRGRDM5QzVGQkU0M0U2OThCQTJGQQorOjEwQUMyMDAwQkUzOTRCNTlERjVFQkEyNUYyRkJCRUU0RTFGMjFEOEI2MworOjEwQUMzMDAwRjQxRTNDQkYyOTQ1RkQzRDU3MzE5RjhBQzMyNkNDQ0YyQQorOjEwQUM0MDAwQkIxREYyNEVFOEEzREFBMjBGQjQxMDZGQkRCRDBGRkQxRAorOjEwQUM1MDAwMjlFNENFMUM5OUQ0NDc2QkJGOTJDMUUyOEVEMzBFOUJFMAorOjEwQUM2MDAwMzA5RkU1QkJGNkZCMzE4NTI1RTYwQkJFQzZGNEU3Qzc5MgorOjEwQUM3MDAwRkQwM0RBNDhCQ0NCOTlBQ0ZGQ0JDNTBGRkZGMzVGMjBENworOjEwQUM4MDAwRUVCOTlGNjBGRUU2NjUxQjkzRkJGOUFENUY2ODM0QjRENworOjEwQUM5MDAwMUNENjhGRDE0QkJFMzVBODAxN0REMjU1MURFMzg1RkM1NgorOjEwQUNBMDAwRkNCQTk1MTZDQ0VCMUM5NjFERkFDODU4NDA0ODRDRTZFOQorOjEwQUNCMDAwQjY5RjFCMjlCREZEMTEwRTMzNDZFOEQzMkVEOEUzRDAzNQorOjEwQUNDMDAwQkFGRDVGMUZCQzYzMzNGREY3RDRDMzI2QkZFNjdCQUM4MAorOjEwQUNEMDAwQzc0RTZEMjhENDdGNjU4Q0JGMTcwMERENzBCRDAyQkVFNgorOjEwQUNFMDAwRjNCQUZCNDk4RjlFMDE3OTAwRUI4N0ZBNkQ5OTBGQkQ4RQorOjEwQUNGMDAwRkYyODlENzdERDNCOENCRjIxNTM0RUJENkY5RjFCQjE1RAorOjEwQUQwMDAwNkYyNzRGMzFCRTM0RDJGRkMwOUU1Qjc1QjQ0OTBGRkIzNQorOjEwQUQxMDAwQjkxQkYzNzcwQkU2Q0Q3QzVCQkVDRUNGQkMyMTFGOUY2QQorOjEwQUQyMDAwOTg0QUYxNTJCNzlGREQzM0QxREQzRTA4Q0ZCNUY2QTU4NQorOjEwQUQzMDAwQkZFQjc2Njg5MEZGNDRCREIzNUQ5RTBDRjRBQTNFMjczRQorOjEwQUQ0MDAwMkVFMDQ5QUNCOThBN0I5Q0Q2OEVGREFGMTlBMDI3RDdERgorOjEwQUQ1MDAwMUVENEIyNjQ4RkJFQzZEOUFBMjE4RTg4NzE1RTdBQzMxMgorOjEwQUQ2MDAwNTBDRDdFQTc5MkNEQkY0QkU4RTc4MzdGOEUyQjFEQ0FDNworOjEwQUQ3MDAwQ0E4RDUxRjQxQ0Q1Q0IzQTNCRThFNTRBRjY3QjBCQTdDQworOjEwQUQ4MDAwMEUyNjk1MDFGQzRGNDlDNEVGQzA3MzU3MkNDRjc4MjY4RgorOjEwQUQ5MDAwRUIwRTlFOUJGMUZFOTBFNDIxREFDODdCMEVDNTNFNzI1RAorOjEwQURBMDAwRDZDMTU5ODNDMDhFRkNBODc1RjEyOThBMTlCMjI4MzNGRgorOjEwQURCMDAwMDdFOTY1MzZGMUEyREQ3QkNBRTY0RTA3N0ZDMzc0MUU0NAorOjEwQURDMDAwRUYzRjY1MEI3NTgwM0MzRTM1MzY0NjgyRjgzREVEN0ZBMgorOjEwQUREMDAwMzM4OUI4QUZFRjk0Q0U5RENFRUU4MzEwNzlDNTM3N0YxRgorOjEwQURFMDAwQUY3QkRCMkFFNEZCNEFBNzQyQkM3QTFFQjFDMjNFRjIyQgorOjEwQURGMDAwMEU5OUQ5QjVFNDREQzY5NzQyREVENTQ5ODEzODk4RTcxQQorOjEwQUUwMDAwQjRDQzE5RUIzMjIxRkVCQkUxNjdCOEFGRUM4MTlCOTY2NQorOjEwQUUxMDAwRkZERUQzQjdCNDZCN0JGNkFGN0IyNDc2NEY4OTkzRDkzMworOjEwQUUyMDAwRkJCNTYzMkVGRDYyMzY5QzczQTNGQjZDODlDRTY3NzEwNAorOjEwQUUzMDAwREIyMUJDODc0N0JEQUZFRUQ5REZGQzBGRkRBM0JERjcxQgorOjEwQUU0MDAwNDdFRTg3NjA3REMyRUZBRERFMjdGNUQ4RTVDMkJFN0I1OQorOjEwQUU1MDAwOTZFNUI5MUYxOUZCNzhFNzZBNUE1RkZGNkMwQ0MyRjFERgorOjEwQUU2MDAwRTIzMzA2MkZDOEVGOEJCQjBDQjhERkI5MTgxNzNBQjMyMworOjEwQUU3MDAwMEVFQUZCRjI5QzVFMUMyRDE3Q0Y3NzA5RkE1RUExNzFEQQorOjEwQUU4MDAwRkMwMUY0MEVGOTlEMEVFRkRERjhFMjY5MDNGRUJFQzc4QQorOjEwQUU5MDAwQ0E1RkRFQjQwQkY2NEY1RkE0M0I3RUZEMjJGOEY3N0U1RgorOjEwQUVBMDAwOUQ4MEY3MDE5MDY0RjZGREVEOUMxRjgxQkYxQzE0MUY2RgorOjEwQUVCMDAwRjJGMzE2QjQxQjU2QkU5QzgyRjI0QkUwRUZDMkQzMjZDRgorOjEwQUVDMDAwM0MwNzdGRjFGOENDRkVFMDA3RUJEMEVDNjVCRjMzMjlGRgorOjEwQUVEMDAwOUJCRDIwODc1N0VGMzJBMURENDdGNDlFOTc2MEZERTVDQgorOjEwQUVFMDAwQ0ZERjNFN0IzODhDRkY2MTAyODFGNTc0QjVCRjhDRkVFRAorOjEwQUVGMDAwQzczMDdFQTNFQkY1RUVGNjFDMjYwNzdBRjQyQ0NCOUIyRAorOjEwQUYwMDAwNUQxOEJFQTdGOTE1RTg3RjBEMTFGNzIwQjJCQ0Q5NDIzNAorOjEwQUYxMDAwNTk2MkJGM0JGOTUwRjQ3M0UwQzczMjk5QkQ1ODIzRkMyNgorOjEwQUYyMDAwMjVGMUM0OTgwQzdDRTgyMUVDREVDNzg3MDZFMzNEQkIyNQorOjEwQUYzMDAwNjczM0Y5Rjk2NTEyRTJFNzFEMDVCRDlEQTkzRDgwRkU2NQorOjEwQUY0MDAwMTIwM0NCRDdFQkUzNUVDQjEzOTkzNjdDN0ZCOUYxNkI2MQorOjEwQUY1MDAwODVERkE0NzZDMzE1NjU3RDI4RkIxREU2QzI0NkM3RjBENAorOjEwQUY2MDAwQkI2OUI5OEVDM0Y5QkY5MkRDQTc2MDdEQUI1QTFFN0U2OAorOjEwQUY3MDAwRjU1RDg0Q0I1MzNGRjkyMzhDN0JEQzhDN0UxQUYyMkU1QgorOjEwQUY4MDAwODM5RjdBRkZCMkRDMThFMjcxODc2Njg1REQ3QjdFRTdGRQorOjEwQUY5MDAwMUYzMDdGRTRGQzJCQjdFMEVGOTQyRDk2MDNFN0UxN0VCMgorOjEwQUZBMDAwQUM0RTRCRTBFQ0JEQjREQzc3RkMwNEUyNDUzRERGNUUyQgorOjEwQUZCMDAwNzE3ODg5Qzk5NTFBNThDNzcwQzg1RjcxNUZDQTQ0QkU1NQorOjEwQUZDMDAwNjVGQ0ZFRTlCNjNDODQ5RkYwRDM3NjVEOENCRUJGMTI3MworOjEwQUZEMDAwRjMxNEZEOEJGOTg5RkVDNTdCREY3MDdDNURENjA3RjIyQgorOjEwQUZFMDAwNDEyRkZCMjAwRTExQjFBRUNCQjE4MTdDRjgyOTVDNUYwMworOjEwQUZGMDAwM0FDQkU3QkUxQzQ3RUIxMTc0NzNBMzc4Q0RGRjA1NUMxOQorOjEwQjAwMDAwRjEzNEU2MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMworOjEwQjAxMDAwMDAwQkFENTgwRjZDMTNFNzE1N0Y3NzY3OUYxRDYyM0JFMAorOjEwQjAyMDAwODY4NEZDMjE3RjM4M0IxMEQyMjYyNDQ3RkU3ODY5MDJCMworOjEwQjAzMDAwRTM5QTkwODgyMkI2OUFDMEI0OENDMTM4REE0MjI5MzQ5NworOjEwQjA0MDAwOEQ5N0MwODZFODI0MkVGNUM0M0Y4MTlBNjlERDQ2QTcxNgorOjEwQjA1MDAwRDIxOTI2MThEMjQwNEQzMzQwQUMwMkU2ODI1NkM4ODYzQgorOjEwQjA2MDAwNUE3NzY1MUFERDIyNzRDQjVBMTZBRDIxNDkxOTVCODVEMgorOjEwQjA3MDAwRDQyRDdCRUZCQjNCOUM3MzAyNUJBQkQ5OEE1RkJFRkJERAorOjEwQjA4MDAwQkVFRjdERUZGRERFREZFRkRBMDBFMjZBMTVDMEIzQjk5NworOjEwQjA5MDAwNkY4MEEzMUFFODEzNzY2NzAzN0MwNUNDNEY1NkE2MDM4RQorOjEwQjBBMDAwNDIwMEFCRTg3RjA5OUZEN0ZERjYyRUU3MDM1ODBEQkRBMAorOjEwQjBCMDAwNEUyODA2QjhDRTc3NkYxMzA1ODBFMURFRUYzQjU1MEZDMworOjEwQjBDMDAwMkQ1QUUyQkY1OTBBQzA2OTdGRTRDN0NCMDBDNkU5QjM3NQorOjEwQjBEMDAwNzgzMjA1NzAwMEFEQTNDRkI4NDBCRjFBQzA0Q0ZDNkRFQworOjEwQjBFMDAwODREMjA4RjJCOUU1Rjc2ODdDMjVDMDJDODk3M0RDNzQzQQorOjEwQjBGMDAwRTM3NDIxMTREMjNBOUM5N0UzMzU0OEZCNUM3MjE0RTU2MworOjEwQjEwMDAwRDlDNjg3OEIyNERDRjdBQzE4QUYwMDIxQjk2RjFCQUYxMQorOjEwQjExMDAwQjJFN0MzRENENThEMTBBNEUzRTIxNTYxMkZDMEU4NzQ1QgorOjEwQjEyMDAwMTFCODBDQTQzM0U1ODQ5Mjg1N0NGRTAxRjI1MUU0MzMxRQorOjEwQjEzMDAwRUE4NEI2M0UzQ0I3QTY4OThGRjQzMTNEMUM4MzNBQ0FGNworOjEwQjE0MDAwQzcwM0M3RTRBQjI5QzNFN0U1MDA4QkU4QjlEQjk0M0I1MQorOjEwQjE1MDAwODBDRjJCRURFQjkzRkFEOEM3NjcyNDlFRTk1NzkzQzlBQworOjEwQjE2MDAwNDc3QUNCMjdFM0YxQjgzOTFGODVCODQwQjhFMjY3OTUzNQorOjEwQjE3MDAwMUI3MTZGMzA3MTA3NTAwNDQwQkIzQzY3OEU5RjczN0IxRgorOjEwQjE4MDAwRTI0MjA1Q0FFRDczNkIwMkVBRDM3MDBFRUQ4MkUzMDY2QworOjEwQjE5MDAwNDdGQzREQTI5QzAyQjA3RDA2QUUzREVCMUNCRTI3MDdDRQorOjEwQjFBMDAwRTE5MDVCRTYyMDNFRjVBNjc5MzlFNEI1MDZEN0VERTJGRAorOjEwQjFCMDAwMjI0MEU3QkFBMTg3RDE3RDVDODJDOUYxNDUxODYzNTQ2QQorOjEwQjFDMDAwMDFCRjgzMjhDMkNGRTgxMjA4MzNEQTAyMTE0Njk3NDI0MgorOjEwQjFEMDAwMEZBM0NCQTA5N0QxRTU5MDYwMTQxRThFNDcyMTQwMjc4NgorOjEwQjFFMDAwN0RDNzdGMzMxREM5NjM0RkYzRTM0ODZCQkUwQTkxNUU5MQorOjEwQjFGMDAwQ0Y2NDFDQkU0OTM4RDQzRTA4MDc4RDIzN0ZGQ0FDMzg5MQorOjEwQjIwMDAwQjQ4MDlBQ0JGOEE1RTI1MTUwQ0FGQzNCMTUwRjE3Rjk1MAorOjEwQjIxMDAwMjNEQTJEMEQ2MkI5NDQxNzgxMkUxMDVENEM4RThCN0M4NAorOjEwQjIyMDAwMUUwNUM5NDFFMzI2NTBEOEI4Rjk3RkM0QTE0RTU3MUQ2OQorOjEwQjIzMDAwNkFGOTE0NzgzNDRERUQxNzNCNENCRjE4MjdERDY3MjZBQgorOjEwQjI0MDAwRUQ3NDUyOTJEOEQ4QjIxN0EwOUNFMUY5OTNFRDY4M0QwNQorOjEwQjI1MDAwQUY0OTZGRkNCQkU0MDdGODQxQUMzMUVDQzhDMzcxNzU3MgorOjEwQjI2MDAwNjM1NzMxOEU4RjQ5QURDNkI4QTFGMTE3NDExQzFGOEZBRQorOjEwQjI3MDAwQUQwQzNCMUUyMUJGNkVBQzc2Q0EwMERERERBQkMyNEIxMAorOjEwQjI4MDAwNzA1RTRERjM1NTAwQzYxNUI0OTVGMEU0M0Y1QkZEMDZDNgorOjEwQjI5MDAwRkU2QUY3MzZEOThGNzFBNDE2N0E2NEQyQ0ZFRDQyQ0MwQworOjEwQjJBMDAwMTAzRkExNTg4MDNBQTQ0NTRCRTMxNzlEQjg2RTg5QTg3QQorOjEwQjJCMDAwRjY1MDNDQjZCQkUzM0UwOTcxREZEQUREOUMwM0E4RUYzNAorOjEwQjJDMDAwNkVEMTU4RUZDMjdERUVBQUE0NUVGODVDNEJDMzcxNUZFRAorOjEwQjJEMDAwNUY1OTE3MTdCQ0ZGRjlDOEY3OTA1NDRCNzJDQ0Q1ODA1MworOjEwQjJFMDAwRTQzOENEQzk4NjI1MUI3M0RBMzA0RjBDMjc5Q0IwNEY0QworOjEwQjJGMDAwNEE5RUYzQTMxQ0Y1MDhDOTAxRUUxMjIwQkJFN0JCMEQ2MworOjEwQjMwMDAwM0VDMzdENjU2NTY0OTc5MzA0MTJDRDY3MDVBQTA5QjdBRQorOjEwQjMxMDAwMEY3M0MyMjc2OUZEQThEN0YwQUY5MzY0ODdEQUZCRDMxOAorOjEwQjMyMDAwREY0QkNBQ0Y2OTdERUFGM0QxMEY1MTAwREM3RjQxNTI3OAorOjEwQjMzMDAwNUYyNzc5M0JEMjNGMkRBMUJDMzRCMkUwQkQ1RDdBMjBCRQorOjEwQjM0MDAwRTlBNzFDOUVCRjA2RjU4RTJBMTAxMzU5MUU1OUU4QkZBNworOjEwQjM1MDAwODk3OTE0RDAwNkUzNjhDRkQxMERDODA3NzFBODA5QUI2RAorOjEwQjM2MDAwNTEyNzNFRkVDMjlBQjExMDI2MjlFMjdCOEVDRUVEMTAwNworOjEwQjM3MDAwRjVBMjA1QjhFRkE1OTUzNzQ0QzNDRjBBMEMzRjMzRjNDOAorOjEwQjM4MDAwRDBGOTBCRkRDRkU3MUJDMzMwNEM4OEFCOEUwQjc3RkY5QQorOjEwQjM5MDAwRjkyN0M0QUZFM0I2NDdBNkU1Qzk3ODdBQjkwQjdDQjQwMAorOjEwQjNBMDAwQzg2M0NCMUI1NjlDRDU5Rjc1QzUwNTFGOEQxRkRBNDAwMgorOjEwQjNCMDAwRUIxNkJEMzc1MDRDN0EyRDFFRDBBMzVFRTI3M0ZFMEYwNAorOjEwQjNDMDAwRjk4NjFDNjY1RDUwM0VFMTNFNEY1RDY4MTYyODM5MDNFNAorOjEwQjNEMDAwNzQ5RTE2NjIyRUM0QUI5MzhCNUNGMkQyRjgyNDI3NkI1QQorOjEwQjNFMDAwMjhGRjVGRERFODFGMTlCNDVFRjFFNEExNUU5QjRDQkQ1MAorOjEwQjNGMDAwREFGQjhGRUVGMjIyRERGNENBOTNDQkExODJDMkMxQzk3RgorOjEwQjQwMDAwRjJCNzg0NUY4QUZGMkRDNzlEQzk3Q0NFN0VEMTEwQTg3QworOjEwQjQxMDAwNjcwNzU4OUZCODQ4N0VEMERFNkI1RkQ3MDFGQjNGQTYxOQorOjEwQjQyMDAwQkNEMzMxMzFDRkEzNUNDMzkyMzc4QkQ5Q0JBQzU3NDA1RgorOjEwQjQzMDAwMjUwNEY5M0Q2REVFMjUzRDNDMjRGNzc5MzFFNkUyOTA5NworOjEwQjQ0MDAwMUVFQTkyRkQzNDM2RTMwNzRFQkNDMEZDRDI1QTBGQUY2MQorOjEwQjQ1MDAwNjQzMkRCNUJGMUY0Q0MxRTk0M0QzMzg5NTdFNTMxOTdDMAorOjEwQjQ2MDAwNDJCODU3MUVDQjUxNDhCRjRBMTFENjg1MTlERTMxRTY4NgorOjEwQjQ3MDAwNzc5NUU4MUIxQ0ZBRDM2QkQzQzc4MjNDOUVGM0RBRjlBRAorOjEwQjQ4MDAwNTIxOTMzMjhCQ0IxNTM4MUJGQ0M0OUNBRDc2OUM2NTNCRQorOjEwQjQ5MDAwQjM3MEEyNDk0NDNGQjhGRDE0RjgzMTI0QTFCM0ZGQTcwQgorOjEwQjRBMDAwNTEzNzhFM0JGNzAyQUQ4MERCRjQ4MzdDNkUwRkYxMzFCOAorOjEwQjRCMDAwRTI1M0RGNUY5RDRCRjYzRTY1QzZBNzJCOTcwNzY5MDJGNworOjEwQjRDMDAwNEU2OUQyMzQ5MDRBOTM2MzBCNUY5NzY5OUZGNEQyMTkwNworOjEwQjREMDAwQjY3OUFGM0NDQkI2M0ZBMzJFNjhERkFGMjk4OUYyMTAxNworOjEwQjRFMDAwRTU2MzYzRkY3NEU1NjFEQkZBRERCRTk2MkJFNDk3OEJDMQorOjEwQjRGMDAwMTIxQjk3MTMyRTk5NEJBQjZDRjMyMTcwQjNGRUExQjZDMAorOjEwQjUwMDAwQzAyM0M3NzAzRkRDMzFFQTc5MUQ3RTU5M0Q4MDg4NDBGOQorOjEwQjUxMDAwRkEzNUU4MDAzRjQ2N0JENDBGM0I2Qzc2NEZEM0QxMUYwMgorOjEwQjUyMDAwNzE1RERBQjUwOTc2QzczRjk3NjQxRkNGMEY5ODdFNTBEQgorOjEwQjUzMDAwMDAwNTEzRkQyMDg5QjNFNzFFOEVDQzBGRkE3MTExRTFDRgorOjEwQjU0MDAwRUMxNTYzRDg3MjRDQzIyOTA0NzMzMjY4QkVGNjhBMDBDNworOjEwQjU1MDAwMzE4NjdCOTcxQ0M3RTczM0MzNzZCQzczREFFQzc4RTc5OAorOjEwQjU2MDAwQTk3NjdDRjMzN0Q5RjEyRDhDRDhGMTlEQkRERDhFNjc5RQorOjEwQjU3MDAwNDBCM0UzNTdCQ0E3REVCNjdFNkU0RkEzNkQzQ0VGRTA1MQorOjEwQjU4MDAwMzJEQkZBODc2MkFEQjY3MUQ5RjFENUI2RjVGMzdCOUZBMAorOjEwQjU5MDAwQjBDRDU3OUVERDZDOUJCN0ZDMkFENUVFMEJFMjlEQjY3NQorOjEwQjVBMDAwNzVBOTc2QUZCRUIyQzNDNkQ3QjJCMzg2REZGRkE3OUQ3QgorOjEwQjVCMDAwMzdBN0Q4Rjk1QjI4MUJDNUREREJCRUExRkQxNDg2NUY2QworOjEwQjVDMDAwNEUzN0YyNTJCM0IwMzBBMTkwQkQxNzNBNjVCMkU5M0JBNQorOjEwQjVEMDAwNTI2NjkzOTdFMkREQUM0MzYxQjMwRTQxNzgxN0IzN0JCQgorOjEwQjVFMDAwRDhGNDEzMzkyMTVGQTIzQzVBNzUzRERDRTRDMzcxOEQ1OAorOjEwQjVGMDAwMUVCOTQ0RTkzODM0RDREMzk0MjEzMTM3OTFGQ0I4OUUzNAorOjEwQjYwMDAwMzM3MTc5QkM4RTAzODcyRDVFNzA5QzlEQzQ2REE1RDY2OQorOjEwQjYxMDAwMkQ2NEUwRTI4NjRGNjM1MTk2MkVDOUE5RjBGQzU2NzM2MworOjEwQjYyMDAwOUVBQjMzRjJGQTBBMjUwRDFDMTNGMDU4NjQzRTA3MkEyQworOjEwQjYzMDAwREFDODZGQTEzMTA1MkJDREZCMDBGNkU1MjA1MjVGQ0VCNQorOjEwQjY0MDAwQkI2M0QxQzA1NEZEQTQ3QzUwNjA3RDkyQ0FGQUE2Q0JFNgorOjEwQjY1MDAwOUNFQTI0QkFDQTlEMjhBMkZBNzUyODVCN0QyOTgwNzlDNAorOjEwQjY2MDAwN0U4NDk3MjVENjY3NzE3QTk0OTQxQTI1QzU1OEQxNzkyNgorOjEwQjY3MDAwMjdBQzk0NTNGRjhFRkZDRUMyQkNDQjVGMEQ2QjFFMjY1MgorOjEwQjY4MDAwQkU1RjQ3Rjk1NTUzOUVDMzAxRjU1MDAwRjExRkU0RkMxRQorOjEwQjY5MDAwQkJBQTcxRUZEQkY1MUYxNTUxRkQ3MTA5ODgwNEU2QzFFNgorOjEwQjZBMDAwNEM5RkYyMTMzQTQ3REJCRDcwM0FCMzVCMEVFQTg3NzlFMQorOjEwQjZCMDAwNTRFNzI1RDYzRjY4M0IzODc2MUZGODg4OTgzRDMyMjFGRAorOjEwQjZDMDAwNEVGNzM4NTlERDAxRjM3RUI0RDZDNENCQkExRkFEMzE4NQorOjEwQjZEMDAwQ0YxRjQ0MTY5QjMwNEZBRjNEN0I5OUUxQjIyNTc3MThDMQorOjEwQjZFMDAwMUM5OUNDREY1ODlGRjQ2NDgxQTc2QTFGRTlBNDU0Q0I0RQorOjEwQjZGMDAwQURGM0U5Qjk3NTVGQ0ExNzNFNEI1RDZDMTZDQTMzRjRGQQorOjEwQjcwMDAwMjlGQTQ1OEI2RUM5MUQ2MkY3Qjk3QkZCNEYxODc1RTRBQQorOjEwQjcxMDAwRkVGQzM1NTY2NzkzN0ExQkZDMDdGN0E2QjNGQTMyQjhERQorOjEwQjcyMDAwQjdCMDkxNjg5MkZGMDhFM0JGMzZGMkFFQ0Q0RkQ2NkQ0OQorOjEwQjczMDAwN0ZERkU2N0ZFQkI1M0ZEQkU2RjVBQzMxNjczRUVBQUY5NgorOjEwQjc0MDAwOUZDOTZCRjkzQUUyNzdFQkI0MkI0NEY3NDZCNERCMzU4QgorOjEwQjc1MDAwQjI4QkM1NUYzRjMwNkYwOTlERjdERkY1RkMxQkMzNzdFOAorOjEwQjc2MDAwNjA2NzAyMUM3MzkyN0FERUQ4Nzk5RDhERjU5RDNBQTNBRAorOjEwQjc3MDAwQTk3QTVBRjc0QzhCOEExN0ExRDQ4MUY2MTlFM0E2Qzk4NgorOjEwQjc4MDAwNDcwMjkzQ0ZEOTFDMzRGQUYwODE0N0IzMUJBOUNFMEVFMAorOjEwQjc5MDAwMTQ4QTBFODM5NjE4RTNCQzNBQjczMTZFNTk0QTc0RDRCMgorOjEwQjdBMDAwRTlEOTQzRjdDQzAxMEUxNDBFRkQ2MTBEQTdCQ0JBMUVGQQorOjEwQjdCMDAwRjk3RTNCNUJGRDk4RkNCMzYzRjM1ODg1MDNFM0ExQTNEQgorOjEwQjdDMDAwNTJGRjA2NDdBOTdGQkE3QTg3RjRFN0IwQkRDQjlCQzE4OQorOjEwQjdEMDAwRTQyQ0ExQkU2Mzg4RDcyQTM4Q0MwNTE1QzE5QzE1RDRBQQorOjEwQjdFMDAwOTcwRjRERDM0NkE4MTI5NzFDOTk2MThDNDUyMzNFNDI3MgorOjEwQjdGMDAwQzE3RkIxNzhBOEYxQUJGRjI2M0UxRjcwNDI5Q0ZDNTY3QQorOjEwQjgwMDAwRkIyNTE3M0JDQUZDNEQxNzVCQkQyQzlFREFFOERFNDVENQorOjEwQjgxMDAwRjc1REJBNkY4Q0E2MTlENDE5RTQ5ODdFNjIwQUE1NUUwQQorOjEwQjgyMDAwOUQ2ODI4NjhFNEI1NjY2MTdGMDk0N0ZEQzE0MTE3NTBFRQorOjEwQjgzMDAwM0NFMDM5MEFGNTE1REE3OTU3RUMyODhFQjM1MTc2RUFFRgorOjEwQjg0MDAwNTM3RTJEMUFGRDdDRDVBRjVDNzFDQTFCMUJERDc3OTgyQQorOjEwQjg1MDAwOURGMjgyMDFDNjJGQUIxODMzMTdGMkM5N0FEMTE1OEIyRQorOjEwQjg2MDAwOTI3QzdBQTI2ODA1Q0FEN0UzQzRGRTg1RTJGQTFBQ0VCMgorOjEwQjg3MDAwMjNERjVCMDdFNjFERDkzN0MxMUU3OTQxRTM3RTA4NEYwMAorOjEwQjg4MDAwMDExOEYzMzk4NzY5QkVCRDdGRjAwNkU1OTE4QjAxQjVEQworOjEwQjg5MDAwMzA4OEZDMDc3OTI5NDQ3OUE0RERGN0E2NDhGOUE3MzI1NgorOjEwQjhBMDAwMjhCMTdEMjgyRkQzMTdGM0MxNzczOTg2QjNEQkZGMDE4OQorOjEwQjhCMDAwRkFFQjNBNEMzNjE5NzQ3RkUzRDVCOUMxNUFCQUE3RTgwNgorOjEwQjhDMDAwMjJGMTQzOEY2MEZEREZGREY0QkZCNTIxRjFDMzcyQTQwNworOjEwQjhEMDAwMjM1RUI5ODhDRUIxQ0U0NTM5MkE4OThGQTVCNzI1NDdEMQorOjEwQjhFMDAwOTJDRjgzRkQ3QUEzN0JDQzE2QkYzNzVGREU1RDQyNzFCQQorOjEwQjhGMDAwNTIyNTcwMEM5RkQ0RjUyRDI2MkUwMzRFQTNGRjRCOUQ5MQorOjEwQjkwMDAwNUY0RkY2QUM5REMyM0VGMzAwNzI5MUJBQTY2MUFENDNBMworOjEwQjkxMDAwQkE5MjcwNDJGQzZFN0QwREY1NjE3RDhCQjI4MEVDREJERQorOjEwQjkyMDAwREVFQTkxMjk2RjU5RkM5MThGRkFGQTAzQ0VGOTI0MjdBOAorOjEwQjkzMDAwRkMyNUIyQzNFNkM4RjdDRTVDOTU5MkYzRTg3RkNDQUVBNworOjEwQjk0MDAwREEwMUMzNUZEQTJGQkM3RkUzNzkzQ0U1OTk5RkNEQUY4NQorOjEwQjk1MDAwQTYzQzZERUQ0RkM1NzlDNDJCQjFGNzNCNEYwODcxODZGRQorOjEwQjk2MDAwMjNFMkJCOUFGOEY3NURGOTVEMzZFMTYyRTFGQzc5NzE5QgorOjEwQjk3MDAwMUQyRDRDODhDNDdGRjRGMEREMjIwOUY3Qjc5RkJCN0NGNgorOjEwQjk4MDAwOURGQ0I2REQ3Q0JGMDBBN0VDRUYwRDEwMkY4REVFOTM3NAorOjEwQjk5MDAwRjdFQTA4RTVENkQ5NkM5QTlCRDhCN0I5QUNGRDA1MEU4NQorOjEwQjlBMDAwRkI3RTZDRDA3OTNDRUY5NDc5NkYzOTRCRjk2MjhBRkI1RQorOjEwQjlCMDAwRURBOTA0Q0Y0QUY0QTk1Q0VDMEJBOUZFNjBCREE3N0FGRgorOjEwQjlDMDAwNjNENUZCQURFRkYyMkMwRUI2MDY4MENEOTM1QzY0NTdDOQorOjEwQjlEMDAwNEU3RjhCRDUxRkVCRkQ0NTk0QzNCQThBQjg3NThBRUFCMgorOjEwQjlFMDAwMEJFNDk3QTA3NkIxN0EyNENDNDZCQkUyQkVCRURGMkMzNgorOjEwQjlGMDAwMzNFRjY5NDY3REFCMzVFQjU5MkRGMTIxRjlDQjMzNTg0NworOjEwQkEwMDAwOURBQjMxQ0YwREI5QjE3RjBBNTJBOUQwQ0NGNzM0RTY0NgorOjEwQkExMDAwRkI4Q0JENkZEOUVFNzdGRjAxRTkxRTM1RTI2MDE0MDBBMworOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA2NAorOjEwQkEzMDAwMDAwQkZCNTFDRkMwRjAwMzhBRDUxNTE4MThENjI5MzE1OQorOjEwQkE0MDAwMzBEQzUyNjY2MDcwNTU2MTYwMzgyNzhGOTBBMzE1NTZDMAorOjEwQkE1MDAwRTVBMDRDRkYwQjQ2MDY4NjU3NDBGQzA2ODhERjMxOTI3NgorOjEwQkE2MDAwQUU1RjRCMThDMTVFQzlDQkMwQTAwREU0RDcwMDY5NTVDRAorOjEwQkE3MDAwMDEwNjA2MkUyMDVCMDc4OEY3MDFGOUY3ODBGODE1MTBGQworOjEwQkE4MDAwQkIwODMxMzA3MEYzMzEzMDk4MDJCMTE4MTBFQjAyRTU4OQorOjEwQkE5MDAwN0Q4MUY0MzczRUVDRTZFQjA5RTNCN0ZGQjkwMDJBNUY5RQorOjEwQkFBMDAwNTIxMDk1Q0YyMDgwNUY3Rjk3MjA3RTc5NjkyMUQyQzM4NQorOjEwQkFCMDAwQzQ0RTlERkNGODY4QTI0MEVGNDBFMDlCMENBODdDMEJCNAorOjEwQkFDMDAwNTkwNjA2MkYzOTA2ODYxRTc5MDhGRjFBOTJGQzNDQTBGQgorOjEwQkFEMDAwOThBNTJDMzQ1Q0M1ODE2OTA3QzhCRkNDODBERDVDMTk5MgorOjEwQkFFMDAwQTBCQzM2NTA3RTE1RDQxQzAwREY0Mzk4NjU2ODAzMDA2NworOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5NAorOjEwQkIwMDAwMDAwQkU1N0QwOTdDNTRENUQ1Rjg3REYzREU5QjJEQjM4NAorOjEwQkIxMDAwODUyQzg0MkQ0QzU4MTQxMDcwMDg1QjEwOTRDOTg2MDEzNAorOjEwQkIyMDAwMDIwQzhCODgxNjc1NTg4NDEwMjA4OTgwRkQ1MUI1MUYzMgorOjEwQkIzMDAwMTM5Njg4OTY3RTBEQTI5NjVBQjAwMzBEODJGREIwMEQyNQorOjEwQkI0MDAwMTgzNTYwQTBDMzY2QjE0NTFCNUMxMEJCN0MxRDE2RDlCRgorOjEwQkI1MDAwMEMyNDA0QTVBM0M1RkFERDczRUU3RDk5Rjc1RTY2NDg1MworOjEwQkI2MDAwQjRGRUJGN0Y3RkZGN0YxMDJGRjdEREZERENCM0RENzNGOQorOjEwQkI3MDAwQ0VCRDkxMEQ3NjQyNDYxM0YyMzVGQ0QwNzQ5OTQwMDg0MworOjEwQkI4MDAwNDk4OUE2RjRFNzlGNUZBNzEyMzJDOTRDRkYyNTEyOTI5QworOjEwQkI5MDAwMkZEQTA4MTk0MkM4NDQxQjA5OUE2ODlEODlBM0U4Qzc4RgorOjEwQkJBMDAwNjQ0MkRFQUQxMjgyMjJCNEExRjUwMkMzMDgyOTI2RUM1QworOjEwQkJCMDAwNjc5MjQ0NkE4NURCMDk2OUNFN0FCNTYyOTA5QjEwQzFCMQorOjEwQkJDMDAwRUIyNUNCMzM2OUVBNzY5MTk5OTA4RTNBRjA4NUUwMjBBNworOjEwQkJEMDAwQzQ5OTY1MjBBNDBGNkJGMzM1RkQ5QkU4QjU2MjVGNEFGRAorOjEwQkJFMDAwM0VBOUEwODMyNjlGRTJFQkFDQTlERjcxNDYwRjRENzlGOQorOjEwQkJGMDAwMjc3RjNGNEQ3OTk3QTI0QzREQkU1QkQ5MUQ5QUZBREQ0OAorOjEwQkMwMDAwOTdFNzY4RjIxOTgxNzE5QUZBM0RENzRFRDFFNDdCNTdENAorOjEwQkMxMDAwREVBRkE5N0ZFQkM2RDk5QUYyQkVDMTYyNERGOTZEM0I4QQorOjEwQkMyMDAwOTY2OEYyMDNBQTFGRDNENEJGQkQ3NkE1QTY3QzUwRThDMAorOjEwQkMzMDAwNjk0REY5RTBBM0NGNjhGMjQzRUI1RkQwRDQxRjdFNzI2OQorOjEwQkM0MDAwQUJBNjdDNDRGODU3OUFGMjkxMTc3NjZCRjI3NzM2RURGMworOjEwQkM1MDAwRDVENDFGMUQzOUE4Qzk2NzkzM0Y2OEVBRTc5QURGRDc5MworOjEwQkM2MDAwRTRGMzVEN0ZENkQ0QkYzQkVEOENBNjdDQUNGQjUzNEQ5QgorOjEwQkM3MDAwQjk4MjA3RTNGQjVDRDM3QzlGRTBGOTg3QTY5RDQ0N0NGNworOjEwQkM4MDAwMTREODg0MTg0OTE5QTY2NjUyODlBOTk1NTQ2MzZBMjM2MQorOjEwQkM5MDAwRjU5ODlFNDlGN0RGOEZGOEY5NjJBMDgyNTBCQzVCMTVEQQorOjEwQkNBMDAwNjhGQUVGMjQ5QUJFOUJENUQzRTlFRjBGQkQ3OTA5QTFCRAorOjEwQkNCMDAwNzgzQjkxNzU0RDI2OUE2RDIxOTFFMjk5Qzk0QzAyMTZGNworOjEwQkNDMDAwOEEwQThFMDhDNUI3MjQ4QTc3MTE4MkE5MkI0MkYxNkRBMgorOjEwQkNEMDAwMzBDNUJCODgxOUQzMEU5MTBFRjgzRDI5RTJDMjM0MzkyNAorOjEwQkNFMDAwRDIxOUJGQTc0NEQyMzA0RDhERjRDMEI0NjNDNDhENjk1RQorOjEwQkNGMDAwNUFBNDFGQTY5RDIyN0QzMEVEMUNDOUM0NzY1RDIyMUU2QworOjEwQkQwMDAwNENCQjQ2RUVDMEVGREQyMjU5OThBNjQ3NzJGMDdCRjc5OAorOjEwQkQxMDAwODgxNzUzNzc2NDFDQTYxOTkxMDI0QzdCNDRBNjYwQkQxQQorOjEwQkQyMDAwOUUxMTFGQTZCRDIyRjdFM0Y3REU5MTE5OThERTEyOTk0NgorOjEwQkQzMDAwOERFOUFEMTEzRkE2N0QyMkM1OThGNjhEMTQ2MURBMkZFRAorOjEwQkQ0MDAwQjIwNERCREQxNjI5QzNCNDdGRTQzMUZDM0UyMEIyMUMxMworOjEwQkQ1MDAwRDM4MTkxOTU5OERFMUUwOTYwRUE4OTNDOERGNTA2NDVGMAorOjEwQkQ2MDAwRDY2MjlBMTk3OTA2QkYwRjhFNTQ2MjNBMjRGMjAyN0U4NworOjEwQkQ3MDAwMUYxQUQ5ODhFOUIwQzg1NjRDODc0NzgyOTg2NjQ1N0UxNQorOjEwQkQ4MDAwODVFOTg4QzgwRTRDRUY4OEVDQzY3NjIzMjNENTk4OEVCQgorOjEwQkQ5MDAwOEFFQ0M1RUY3NzQ2NkEzMUJEMEJGMDJEMDlGMDJFODQ5MQorOjEwQkRBMDAwQTkzN0YyN0JGQzlFMUQzOThBNjk0RUU0M0RGQzlFMUIzRgorOjEwQkRCMDAwQTlDNzM0MkZGMjI3RkM5RTFGMzk4OUU5OThDODY5NEMxRQorOjEwQkRDMDAwRUY4RTg0MzEyRDg4NUNDMjc0NkNFNDAyQTZFMzIyQ0QzMAorOjEwQkREMDAwRDg2RTdDQTQwOUQzQzJDODk3Rjg3RDQyMjQ4MkE5QzIzOAorOjEwQkRFMDAwRUY0ODk2REMxMDU2RjBBRjA3RkM3RkE2RUJEQzZEOTRCNQorOjEwQkRGMDAwMkYxMUJGRTE2QjlBMTIxQkM1ODMxMUQxRkFGQTk0NzIwRAorOjEwQkUwMDAwM0JFNDkzMzJDNUFCMDQ4QURGODk5NDE3MDIzRjlDNTgwOAorOjEwQkUxMDAwMjYwNEVGQ0VBMEY4OTExQzNFMEM3OTM5Q0JFNDM2RDE0NAorOjEwQkUyMDAwRkMwM0E0NDkwNkZDMjVBNERFRUUxQjQwQzg4MTExRTdGMworOjEwQkUzMDAwQkI4NjI5QkVCRTlCMTJFQTQ2OTExQjdFOTBERkNBMzBBQworOjEwQkU0MDAwQTc5RUMwNkYxQkE0MzBGRDNFMzFGOTYwOEFERjA2RUQ2RQorOjEwQkU1MDAwMjk2RDY0MDI3QUQzRjEwMUJGMjkzQTAyNUY3RTQwMjI0NAorOjEwQkU2MDAwMDEwNzlERUE3MUU4NjEwNEQ2MEI5OTY4N0U2NjIxRjFBRAorOjEwQkU3MDAwNjZEMkZBMTUyMzRDMzM4Mjc0OUM4QTRDNUY5MThGQTY0QworOjEwQkU4MDAwM0ZDRUYwQ0Q4MEY0Rjc0MDNDNzRGRTg3Nzg3QTlDMTg2MgorOjEwQkU5MDAwMzBGRDMyREQ4NUU5Q0M0NzdBMzM3QUNBQTM0MEVDRDQ1MQorOjEwQkVBMDAwMzYxQzFFNDg2NUVEODhBRDI5MURENkQ3REU3NjEyQTE1OQorOjEwQkVCMDAwRUQ4NjQ2RUJCRjRDN0MxRkMyRjc0MDBFRTk1MzY2OEIwNAorOjEwQkVDMDAwRDZBM0RGNEY0MkJEMThERkZGMUNFQjdCQUQ4MTMyMDJGMgorOjEwQkVEMDAwMEFGRjQwMDc2MzcwMUJDODI3RTI3NjRFODY3OTk5REQxQQorOjEwQkVFMDAwQ0UyOUY2RjhGMzdBNzI4NUFCQkZENDRCM0RDRjIwQ0U4NgorOjEwQkVGMDAwRUY0OTgxQ0NBODY2RkMyNTZEQ0EwMEVDMUZFNTYxQzA0NgorOjEwQkYwMDAwNkFDMUZFNDUwRTdGQTVERDY3MDA0RkRBRUUzRDhCQUZCRgorOjEwQkYxMDAwOTFDOTUzNzc1Nzg0OEJDREQ1MkVCOEQwNzZENzExMkVCMworOjEwQkYyMDAwMTI2RDY3NkY3RkJCRjg2OTI1ODMzM0YxQkE3MTFFRkMxMAorOjEwQkYzMDAwN0JBOTg5MDQwNEJBOEVBNjZERjZFMEQ2MENDMDYxMzdFMQorOjEwQkY0MDAwRjJDRjIyMTc2N0EwQzkxNDE4NTRBRTE3MjVDMjEyMDhFMQorOjEwQkY1MDAwMzlCQzNGMjE2NEEwRjU3M0I2RDlCNzgyMUVEMDk4MTNCRgorOjEwQkY2MDAwNzhERTA3NzBERTJBOTM2REI0Q0FDQUZEM0YzQUYxNzNEQQorOjEwQkY3MDAwOUFDRkQ5MjIxMzEzQ0QyRjQ4Nzg2RTE4QTE3MEJCNTVENAorOjEwQkY4MDAwMTBEOEY4MDFFRjgxNUVCNDdGM0Y1MTdFQkMwMkY0M0ZEMAorOjEwQkY5MDAwOUZCMEZFMUIwNTQ2NDc4MTZENEU4NEVCODVCQ0FBOEE4NworOjEwQkZBMDAwOTEzNDBERUY1QjVDNDgyODFGM0Y0RkMxREE4OUUyRjdGRgorOjEwQkZCMDAwMDIyQjkxMjBBNTFDREM4OEYwMDlDODY3QzM4QTdDNDE0QworOjEwQkZDMDAwN0E5NkEyNzlCMTc1N0UzRUU0MTVGQUE3RUI1RTEwOTRERAorOjEwQkZEMDAwQTM3OUZBNzdFMTBFNkQ1RTA1MkZEQ0Y3MjY4QjFDREM2QQorOjEwQkZFMDAwOEE3OEQ1ODVDMTQ3ODE5N0I3MEI4MzFGODc1NzlFNDVCMAorOjEwQkZGMDAwMEUxODkyMTE1RTQxRTAwMzRFQzE4RDcwMjhCMkM4MjEyNworOjEwQzAwMDAwOTFGNjUzNDRFMTA4MjQ1OEI0RUZBOTU0ODBEM0MyMUREQgorOjEwQzAxMDAwMTZENzU5RDVCODhCQUIxMzM1RjlEMkRBNEVBRUIzMkE1MQorOjEwQzAyMDAwMzlEQTdDRjQ5NzBFQTBEMzI1NjkwNkQ3NTlDQURGMUFFRQorOjEwQzAzMDAwNTY3ODkzQ0VEMjJEQkJCMkEyMDA1MzA1M0YxNjU3Njc1OAorOjEwQzA0MDAwQjg2QzlBN0VCNEY5RTY0QUExODBFMUI3REIzOTZENDA1RAorOjEwQzA1MDAwN0MzQzVCOTI2Njc0OURBNUE0N0E2OTA3OTNCNzk3NTY1QQorOjEwQzA2MDAwOTg1RDMwNEVDMzBBOTc4QjhEOUI4NkE5MDJBRjQ1Q0I1NgorOjEwQzA3MDAwQUQ1ODVGOTk1RkJDN0VCRkVCRjkxMTUyNDNDRTk4ODFGQQorOjEwQzA4MDAwOUZEM0IyOUVGMUVCQzdBNTI3RTkzMzIzRDI0OTlEN0MwQworOjEwQzA5MDAwMURGMEM2NENGRjdFNkQ0MDNDQzJCQ0QyNkY2OUI1MTgyNgorOjEwQzBBMDAwMzBERDBFREY3NzZBQzZBM0VERENFNzU0RjIyNTNFREQxNgorOjEwQzBCMDAwNEFFNDlDMEEyRjk3NDIwNzQ4QTc2NkRDNjczRkVERDEwOAorOjEwQzBDMDAwNDlGQjZCOTQ2QzZCNDE4RjlBQzBGMUE3MTRFQTUxN0VDNworOjEwQzBEMDAwQjBEODFDMzZGQUU5QTdDQjM1NkMzRkUyOEQ3MzY5QzU0MQorOjEwQzBFMDAwOEUyRUMwRDc4QUNDOTU0NjYwNTY0NUQ1N0RGMzgwOUU2RQorOjEwQzBGMDAwMkVEN0FDNEEwNUY5QjI1MDZDRkVCRTJGNDZGQjFGMkI2MworOjEwQzEwMDAwNzQxQjk0OUJCNEYyMzJDOEU3NDlGQkQ1RDAxOUIxQjU4MgorOjEwQzExMDAwQUM5QkU2MUIwQzc0Mjg1QkVCN0U3RjJBMzBCOTUzQjJENAorOjEwQzEyMDAwRjNGODk4OTE3NEZFMjVCNTU3OEQzMDhGMDk4MkZGQTdEQgorOjEwQzEzMDAwNDI0QTc0RkQwMkFDOUZGNjUzQkNFMzk0MTFENjc3NDE5QQorOjEwQzE0MDAwMEVEQ0YyNzhDNjRERTBEOTZBOUVCNkI0NzMwOUFBRjkzRQorOjEwQzE1MDAwMDVBODIyNDlFOTc1NzYxNkE3NTdFMkJFRjdDRjk0M0VBNworOjEwQzE2MDAwMkZGRTQxMjY0RkQzNzk5MDFCQjQxNjJENEZFN0E1NzNCMAorOjEwQzE3MDAwODlDRjAxRjA5QTVEQjMxMEY5Q0Y0NUUwM0YyMDg3NDlBMAorOjEwQzE4MDAwRTUzMEMwOEZDQkM0NTAwMEVCQkI0Q0RFNzMwQzU2QzEwNgorOjEwQzE5MDAwRUZBMDYwRTRGMEExQUEyQ0U1MDcyNjFDMEFFMUQ2MDk2RAorOjEwQzFBMDAwRjg5NUE5QThBMjVFMUMwOERGQTUwMEU3NEJDMkQ3Qzg3NgorOjEwQzFCMDAwNEY4MjAyRjJCMzIyRjYzRDQwQ0NFNUI4OEVCNThDMUYxQgorOjEwQzFDMDAwMDVFODFGQzgzRjVDQTlFNTRGRjMzNzZBRjNGM0M4OTQ0RAorOjEwQzFEMDAwNTQ4OUYyOTc3OUNGQ0FCNDQ3Q0FERkQ0RkM4RkMyRUYzMworOjEwQzFFMDAwNjU4MUM5RERGOUE0QUNDMjQ1RTdCRkQ5NDhGNzg5Q0U1RQorOjEwQzFGMDAwN0ZCNjhCNDg1REU4RkExNkJGQjE3OUQ4MkM5QTdGNUI4MQorOjEwQzIwMDAwNjA3MkVDRDIwQTNBRkQ1QjY4M0YxREQ4RkE4Qjk3MDc0MworOjEwQzIxMDAwOERERUZFQURENzc3QTY2NkYwRjQ5MTA0RkI2M0YyQjEzNAorOjEwQzIyMDAwNTg5MUJGQzQyRDBENDM2RTQ5OTVEQ0Y4RUJFRjUyMjNCNgorOjEwQzIzMDAwN0EyRDBFQTg0N0JGQUJGOEYzOUNCNURBRjVCNUI1N0VGRAorOjEwQzI0MDAwRkQ3QTA5NzkwNkYxQUQ3OEM3NjQwMjc4QTZBQzQ3RDlDMgorOjEwQzI1MDAwMkY2NTNERjIwRUMxMUI4QzQxMDc2MThFQUYwQTVGNkJFQgorOjEwQzI2MDAwRTJGMDUzRjQ4RUNGNzVGOTJGNzVGOUFGNzU3OTA1QkZFQworOjEwQzI3MDAwNjU0RURGMTRFRjNGMTc4NjAyM0QzNzhENjE3ODEyMzYyOQorOjEwQzI4MDAwQjJGMzBDQUI2NzhDRDZGQkYyNjZGNTRDOUM1RTY4QkRENgorOjEwQzI5MDAwQUY2RjU2Q0YxMkVENEYzMkE0QjRBRUI3Rjg4RDU3NUVFNAorOjEwQzJBMDAwMEY1MEZDMkVGRUNENzMwRTQyRjFGMUEyNTQ5OUVBQTE3QgorOjEwQzJCMDAwREYxNzZENUJFMzAwMzg1RDkwMDIwRUMwOUI4QjQxQjFEMAorOjEwQzJDMDAwMjAxNkJDNDYxODA0NDVERkIwMDk3NERGNEIxNEZDMUY3MAorOjEwQzJEMDAwNTUzRTExRTRGQkY1NkRCMkVCNjlCQTJGQTUzQjRDMjEzRAorOjEwQzJFMDAwMTNEREVGOTI5QTA1ODU2NDIwRTY0RkIxRkM5MzU3MDE2OAorOjEwQzJGMDAwM0Y0QTZCRTVEM0VBN0QyRERFRkU1Q0FBREI4RUZCRDBFOAorOjEwQzMwMDAwQzUwMDNBMzAwOTc1MjEzNDJEQTlGQTY0MENFOEQxQTU4RAorOjEwQzMxMDAwQTQwOUYxNTlERjBFQzY4N0EzMURFNUQ3QjM4Q0NFRDY4RAorOjEwQzMyMDAwRTVDQUI5QjE5NDdEMjJBNTM1M0ZCQTBBRTdDNjUyMjJDMworOjEwQzMzMDAwOUQ1NkUzNTExMUUwMzJENUYzRkExOUVDQzk3MDVFMjAzNQorOjEwQzM0MDAwQzNDOTcwRTAyQjBBMUM0ODMwMDVGOUYyQUE5NzdGM0E1RQorOjEwQzM1MDAwRjAxNDlENDc0M0Q1MUYxQzgyMEEzRTU0NDM0MkI4MzQxMworOjEwQzM2MDAwNTdDRkY5NUJEMjRERTRDMjE1OEE5RkU0MTY3NUJCMjAwNgorOjEwQzM3MDAwQjY3M0Q3RDIwOTc0QTREOTNBOTYyRTkyNDM4RTkxMTRFQgorOjEwQzM4MDAwOUU4QkI2QzgxRThBOTk2NEQxMkJCRjdDRTkwNTRBNzc3QgorOjEwQzM5MDAwRTQ2MzkzQTczNzg1RjdDMjU3OEU5Q0I4ODNFNjE3RUUwMAorOjEwQzNBMDAwOTI5MzBCRDkzMjZDNDI2QTc0M0Y0QUU5NUZCMENCMjg1MgorOjEwQzNCMDAwRjAyRjdFRjU4OEQxM0Q4MDdEN0ZBMjQzNzQxRjE2RUU1RAorOjEwQzNDMDAwM0E2MDI0MDM1QUMzMkRCN0ZBODAzMTZDOEJCMTFGRDU2NAorOjEwQzNEMDAwQTdDNjgwM0VCM0VBRTVCRjFCNjFCRjJGRUUxNzQ4Qzc3MworOjEwQzNFMDAwOENENkVEOEJCNjFDNDFGRDA1RTA4NEZCQzdGN0E3NjUzNQorOjEwQzNGMDAwQkY1QUVENTM2OEUyREUyMTU4Q0YwNUZDM0FERTNFRDk0NAorOjEwQzQwMDAwNDE1NjBGNDUzQ0ZFRjU1RTNBN0VEMTlGNEMxRTU4N0Y0QgorOjEwQzQxMDAwRDFBRjk3M0E2MDFERTdBNTMyODZDRjlCRDdBNDdBRTlDMgorOjEwQzQyMDAwQjg0NTcyMjBENTg1MjlGQjVFRjRFMkEzODg2N0YzOEZCNworOjEwQzQzMDAwM0Y4QTdBMTlDNThGNEUwNjk0MTk4MTRFQjBCRTg3Mzc1MAorOjEwQzQ0MDAwREQ4M0VCOUI0N0ZDODg2RjQ1OUI0NTVGMTBGODgwNDQ3QworOjEwQzQ1MDAwMEE3NkM1QTA4N0RGNzA3QTM4QkY5NTcyNEFCQUJFRjNGNAorOjEwQzQ2MDAwQzAxRjQxQ0Y3RDRGRTRGQ0YxMTFENDIzMUZFNTZCQTUyNAorOjEwQzQ3MDAwOUEwQ0U2M0YzN0IzN0RBQTMwMTgxNEJCOUM1OTgzQTdBQQorOjEwQzQ4MDAwNTU0RjIyMUZCREQ0Q0REQkQxRDUxRkUxQTBGMDRERTQyNworOjEwQzQ5MDAwQTdFMkYxRkM4RTZDN0YxOEZGQzU3NjE0RUY3MkUxM0JDQQorOjEwQzRBMDAwRDRBRjk3QkQ5NjgxOUE3NjlDNUZCMkYxOTdGMUYxRTk4RQorOjEwQzRCMDAwQkNBREEwN0Y5QzRGNjU3MjQyQkZCRTNGMTkxNEZFNDhDMQorOjEwQzRDMDAwRTVBQjBBQkY1NDc0Q0RFOEJDRUEyOTQ2RDcwQTlEMDdGQworOjEwQzREMDAwMjcxNzQwRjk2NzFGMzBGQTgxNzYyMDdGRThCQzQyMUQ5QworOjEwQzRFMDAwQjFGQ0MwMzQwMUY5ODA4OTg0NjJEMTczOTVDQ0U5NTlEQgorOjEwQzRGMDAwNUI0RTM5MzRFQTZGNzRERTkyRTA1NEUzMDlFREJGMDMxQQorOjEwQzUwMDAwQzIxRkY1OTI3OUNGRDI3NjJBN0RCQTE0QzZDMzdBQzZGNQorOjEwQzUxMDAwRThGNzhDMjhERENFRTdGNEZGMkJBMEZGODQyOEZEOTNGRAorOjEwQzUyMDAwNEQyOUVEM0E5RjJEOTI4MzJGQkQwMEY0NEFFOTMzRTA2NworOjEwQzUzMDAwMDY3QTk1N0RCMEVFNEY3NzFFM0E3MTNGQzVFQjRGQUI1MworOjEwQzU0MDAwMTUzQUQ1RjI0RDNEOUQxNkVEN0U5NDAwN0VFQUU5RjQ1NAorOjEwQzU1MDAwRDNBRTY1MjQyNjlERDJFRjMxRTlCNDZCRjg3Rjg1NkZBOQorOjEwQzU2MDAwMkE3MDNCQUU4MzFCRTU4M0JGRDhFQjhFMEYzRjNEMUY4OAorOjEwQzU3MDAwMkMzNUI4NjNGMjQxRkFGMzAxMTlENjFBRUYxNDdDNTM0MworOjEwQzU4MDAwRjBBQ0Y4QkYxNjc3MDc3RUQzODI4RjBBQkVCNUUwQTM2MgorOjEwQzU5MDAwODI2RkZBNzU2QUUxQTYyRkRGMDRGQzQ2QTUxRkM4MkIzRgorOjEwQzVBMDAwNDlDMDRFRjdCOTY5OUY4OEU3QzQ0Njc3OTNBMzAzMUQzNgorOjEwQzVCMDAwNzc4RDg1M0MwNDdBNzZBMzhCRTcxMzU5QkUyOUM1NTgzRAorOjEwQzVDMDAwMDE3QzQxRjlERTY0MjEzMzAwM0YxQjdENEQ4RTQ0OTU5MworOjEwQzVEMDAwRkU3Q0FBNEU3NEI4Njk3OTM4NDgwQTYyRTlENTk0RTNCQQorOjEwQzVFMDAwRTJGODYxMTJBRkJDMUNFMTk3MkZEQUQyOTcwRjgxNzM4QQorOjEwQzVGMDAwOTVFODAxREQ2RDZFRjlCRDBFMzA1OTM0RDZGNTlDMzRFOQorOjEwQzYwMDAwODM3RTdGRjg2RDExNkQxQThENTZDNzQwOTgxNzNEQjcyMAorOjEwQzYxMDAwNEI5RDI4N0NFN0YwN0RCRTQwMDJDRjhGQTJFQjlBNTM2MgorOjEwQzYyMDAwQzdGNEUyQjlFQkI0RjA5ODY3NUI2NjA0M0U0M0Y1Q0YxQworOjEwQzYzMDAwMjgxRUE4RjA0NUYxMTMxNDZERDI5NjE3OTM3NUI4NUZCNAorOjEwQzY0MDAwQzUzQUZDRjFGM0YzNEUyNzkxRTNDRjIwMzI4ODlGMzdCMAorOjEwQzY1MDAwMENEMERGMTJDRUE3RjJDNUZFOTM2NjUwQjgzNzFFMTU3OAorOjEwQzY2MDAwODk4OUU2OUJFQjQ0NTIwMUVCREMyOTA0MDlEMDcxMjA1NworOjEwQzY3MDAwMDVGMUIwODRGMjA3QTIzQTE3MzYwMDlFMTlFM0QzNkY5MgorOjEwQzY4MDAwQzM2QjdGMURGNjM4QURCMkU4RjUzRjBGRkMzOTREMUI4QgorOjEwQzY5MDAwNUVGRkY4OTYzNzIxRkZDNjQ3RTk3RjI2QURFQkU3RUU1MAorOjEwQzZBMDAwRkZFMjQxRTBFRjhERkI0RDA0RUQyNEZCN0Y5N0ZFMzg2OAorOjEwQzZCMDAwRTRGNzlBM0M2OEU3NTg2OUYyQTI3RUJDREYxRUVDMERGNQorOjEwQzZDMDAwRTVERDk4N0Q2OUQ1QkVCRjBGMENBM0JDNTk4REZCOTRFOQorOjEwQzZEMDAwMjdCMjczNDQ3M0REM0ZGRTVCNDg4Njk0QUUwQUU0RThGQworOjEwQzZFMDAwRkUwNEQ0QUY0QkY3NUE4MjcwRTg2Q0RDRjdGNzYxN0UzQQorOjEwQzZGMDAwREI3N0I3OUUxMjIzRjEyM0ZFRDlDOThDREQ4MEFGODk4OQorOjEwQzcwMDAwQ0M5RTU2RkFFNjg4NUY5NkQzRjExN0Q3MUMzMENFQTE5RgorOjEwQzcxMDAwRTVCOUJGRkQ2QTIwRjA5NUM2REQ0QzNGQjgyMjg3NUZDMgorOjEwQzcyMDAwMjQxRTQyMjY4OUNGOTVDQjc0QkZBRTgwQUVENjk5RjIzNworOjEwQzczMDAwMjVGMTQ0NzZDMDE2MEIyRTBDMEU4RDE0MEVCMDJFMEE2OQorOjEwQzc0MDAwOTcyMkUwODdGMUUwMzFFRkRGMTYxRTU3MUY4NEYxMTdDMworOjEwQzc1MDAwRDUwRDI3NjI4NjFBMkU4Mjk3N0RCNzA3Q0QwMkFFOUYzMAorOjEwQzc2MDAwN0RERkZGRjc4MUMwNzczRkFEMkU0N0Y5RERENkJBRDcyMQorOjEwQzc3MDAwQzBCQTUzRkU1RjVBQjcxMDZBQ0ZCQUFCRkU2REQ3Q0RDMQorOjEwQzc4MDAwRjBCRjlGQzhFNDkxOUUwRTVBRTNGOTFCREZDN0ZDQUZEMAorOjEwQzc5MDAwRUQxRTlDNkYzQkU5RkZGMEJGRURGQUJGRTVCRUVGMTY2MworOjEwQzdBMDAwRDAxRkQ3RDZCRTlGRjlCNzVENzc1QkZCRkUzNkRGNzcyQworOjEwQzdCMDAwQkIwQkVDQkQ4REZCQkU0QTI3QUFGNUI3QjU2RTgzRjQ2MworOjEwQzdDMDAwRUZDQURGNkVCRTZFNDVFRkE5Mzc5NEI5ODZEMEY5N0QwQQorOjEwQzdEMDAwNEMyQUVGQzlBMEU5MUZCREQ3OTJFMTM4NEE2OUMwMTdCQQorOjEwQzdFMDAwRUJEQzkwMjlCMTczODMwOUVDNEM1MEYxMUU0MUIxMTc3OQorOjEwQzdGMDAwRDU2QkZDQjg1RDhCNTBDRjk4RThGRDMxRUEwNzQ0MkEzMQorOjEwQzgwMDAwQUJDRkE2RjVFQjczRTY3ODlFQzYxQTk5MjdGRDkwOUZFRAorOjEwQzgxMDAwNzYyN0NGNkJDRjUzMTM3M0M2MUYwNUJERUVERDcyM0E3QgorOjEwQzgyMDAwM0Y4ODVCRTgyNkI5QThBNjQ0MjY3OTQ1RDQwMzY5OEFERgorOjEwQzgzMDAwRkFERjg3RTk2M0IwREVBNDJDRUQ3OUUyM0VERDc5RTAzMgorOjEwQzg0MDAwREUxOURBRjI3Qjc4RkZEM0M5MzMyOTYwNzc5QjNFOTdGNAorOjEwQzg1MDAwRDlEREVFMjU2NTZCNUNBQTdEQkE0N0Q3OEY0MzIyREMxNAorOjEwQzg2MDAwNEVGMkVERTAzN0I3MDU3RTRCMTAxRTI0NUJGNDZDMjNDRgorOjEwQzg3MDAwRUQ4MDFGNjFGMEFFOUYzNjI4MDg3NjE4MjI3OTE4RkNFQgorOjEwQzg4MDAwQTYyRkY2QTAxRDk0OUYzMzY1REU1RUI2QURBRDA3QkE0OAorOjEwQzg5MDAwOTU4OUY2N0NBOTlDMTNEQjgyMzNFMUU3NEZFQ0FGNDcyNworOjEwQzhBMDAwMTRFRUIyNTdDNEYzQTdBQTVGODQ4QkIyMUZERjc0MUZDNAorOjEwQzhCMDAwOTRGREZCQjZGQjMxMENGNjIzODZGRjZDODFEOTdDMEYwRgorOjEwQzhDMDAwRjgyRkNDN0QwNDNDQjc0RjVBMjc2MjFDOENCOUJGODAyRgorOjEwQzhEMDAwNzBGNDY1QzlFOERGRjlDNEUwMUIwNjhBNzNFMUUwRTFBMgorOjEwQzhFMDAwMjU4RkIxNkUzRDAwOUYwNTFDOEVGMzQ4MTlFQTlERTQyQgorOjEwQzhGMDAwQzZENzVGOEYwMkJGMTE0Mjg2OTY3QjA5OTk0MENGMjEzMAorOjEwQzkwMDAwRjM0NjA5MjEyQjVERjc3Qzg5MDQ5Qzk5NjBENzE0QzhGNAorOjEwQzkxMDAwNjlCNTVEMzNBOENEQzNDRjVEQTlEMTdFREFBQTFGOEZEQgorOjEwQzkyMDAwM0Y3Q0Q3RTlERjI4M0YzQUREOEI5RTU3MjA5NTcwNzgxMgorOjEwQzkzMDAwNDk3RDRFN0NBODhFQzFCMTc0OTExMEVDODE3ODE0OTIxRgorOjEwQzk0MDAwN0QyQUJGQ0VDNzFDQUZGRkY2QzQ2MEU0NzNEOTNGMTk4MAorOjEwQzk1MDAwRTBDNEYzQUJCNzFGRUFGQkE1NUNERjZGMEVCODlENjBDOAorOjEwQzk2MDAwQUY2OUFFRUJFOTA0N0I0Q0YzRDE1Qzg3OUEyRjJBRTlERgorOjEwQzk3MDAwNzE3RThFN0M3Rjg1MTlEM0M2M0NBMTUyODRGMzE2NjlFMworOjEwQzk4MDAwOUE4ODcyMzhDRjQyODBFRkU4REJFRDkxMTRCQjRCMTlFNworOjEwQzk5MDAwRjMzM0QyMUY3MTE4RUMyM0ZCOTk0RjlCM0EzQkE4RjY1NworOjEwQzlBMDAwNkRERDg0OEJEMkMwRDZGQjAwM0ZBNzU1N0U5MjdGMTVFQworOjEwQzlCMDAwQkU3MDZFMDVCODFFQjc4NEM3Rjg2MkFDRjcwRjFDN0U1OAorOjEwQzlDMDAwODUwN0JGMzA4MjlENjA0QTVEODYwQzcwOTk5MjI3NkEwOAorOjEwQzlEMDAwRTI2RTBFNDlGQzNDMzU5ODBDODY3OTE1MUUxQ0VCMTg0RQorOjEwQzlFMDAwMDFGQjcyNTRGNDU4Mjg3QzRCRUJBRTFBRkQzMUZDNkQwMAorOjEwQzlGMDAwN0E3ODQyRkY2MDE3M0UyMzdCRTYwMTNDQ0ZGQ0Q4NDJBOQorOjEwQ0EwMDAwMDI5NDFFREVFMUZFMUY1QUU0MDVGRTQ1QkJGMjgyN0Q2NAorOjEwQ0ExMDAwRUMwMzg5RjkxNUZBQ0FDQzJFM0VCNTMwNUI0RUExRTM4MgorOjEwQ0EyMDAwRjZBRjcxMEQwMjExRDM5OUQ3RUYyQkJCQjFCQzBCNkZEMQorOjEwQ0EzMDAwQTdENEVCQkM4OEQ1M0I2NTc0OTVDNDVBRkYwNDIzNUIyRgorOjEwQ0E0MDAwRkY3Q0UyRjk3RTk2RjBFRkI3NkZEOTNGQjE4NzcyNDA3NQorOjEwQ0E1MDAwQkVFNzA5Qzg0NzVBRTMzNTQxRkE2ODJFMTA4MjIwN0ZBNQorOjEwQ0E2MDAwRTExQzhCRjk0MjAxRTVGRjNCMDY1NjFFOThDMkU0QTU4NgorOjEwQ0E3MDAwODJGNzdBMzgwQjMyODNCMzMyN0U4NkNDRjBEOTI4MzNGMgorOjEwQ0E4MDAwRjgyODcwNTZFMEFCOUZBRjUyOUZGMkFCRDE2QUZCQ0E1OQorOjEwQ0E5MDAwQTREQTQxQkYwNkZEQTRBNDRFNzA4MUU5QUY0NDBBMUI4RAorOjEwQ0FBMDAwODEwRTRCNkJEN0NCRTAyRkI4Q0ZDREZBMjU5MjZGQTA3QworOjEwQ0FCMDAwREE1RkRCNTc5NjcwM0U4NzMyNDdBMkZFNzg2RDFERDM1MgorOjEwQ0FDMDAwOEZCRDczQUYzQTQwMEY3QUM3RTBGOUUzNDhBMEM3Nzc0QworOjEwQ0FEMDAwNDU4QzI3ODgwN0M3M0ZBRkQ4MzEyRDRGNTJGNzlCODEzMAorOjEwQ0FFMDAwRjM5Q0JBMjg1QjA2NzNEMEY3MTYxRDkwM0JBQUYwQTlGOQorOjEwQ0FGMDAwQUZEQzAxQ0I5NUVGOUQxN0I5MzNFMTNCMUQwRkU3MTE3QgorOjEwQ0IwMDAwRjg0RjEzRDk0NkJCRTg1RjVEOUY5MzQwQ0JCRjU3OTY2NAorOjEwQ0IxMDAwQzhGMEIwQThGQTgwMTFGMzE5NTg1RjE5NEYxOTQ3NEZBMAorOjEwQ0IyMDAwNEZEMzBBMTMzNEY5MzlCOUUxQUUwMDk3NDI1MzY4OTlFQgorOjEwQ0IzMDAwMjcwNjlFMUU5NjE1M0ZDOTM3OTQxMzVFOEFCNzAzRkZEQQorOjEwQ0I0MDAwN0Y5MDEzNTdDNzc4NjNDMDZEODNEQzRBM0U3NDhDMjU5MQorOjEwQ0I1MDAwMUY5Njk0QkIzQjAyRkM5N0VDRUJEOTExODg2M0M5REJCMQorOjEwQ0I2MDAwRjlBOUIxRTRDMzg3MkI5ODNGRjAyM0NBQ0YyMDZEOUM2RAorOjEwQ0I3MDAwNDZFNUMzRUQyQUY5MzBDRDgyRjhBMTZGRjc0M0I5OURBMAorOjEwQ0I4MDAwRjI0MUQ5QUZGRjY1M0VGMzIxQzg4NzE4NzQ1RDI5NkI2OAorOjEwQ0I5MDAwRTVDM0Y0QkE1OTI4MUZBNjRGMTM4OTVCNjU4RjdCNTJGMgorOjEwQ0JBMDAwRTY3RUFFQjhGMjIxM0JGNTNFQ0NDQjlFODQxODc4RjNGRQorOjEwQ0JCMDAwMjEzRjk3MDA1QzIxODU3MTQwNEVGQzk2RjM3REJEQkMwMgorOjEwQ0JDMDAwODhDN0NGQTcxODA1RUVBRjZFODM5RkZGNUY4MkIzQzIwMQorOjEwQ0JEMDAwQ0Y5N0QwRjMwQkU4ODFBREYxOTAyMEJGNUU3MjFGRTVENworOjEwQ0JFMDAwRTcwMkUwMjNFM0U3NEIxRUUwNzY0OTFEN0ZGNTAxN0Y3NgorOjEwQ0JGMDAwMURBMkU2QUZBQzdEODk5RkM5ODNEMkRBOEM5RkNFQTRGQgorOjEwQ0MwMDAwRTVGNzU3Q0ExRTMzQUQ3RjdGOTRERjBFNTNGM0RCREZBQQorOjEwQ0MxMDAwNzI3RTRCRTE5Q0VFOEFCMUJGMzM2NjI2MTBCNzk2NUZGOQorOjEwQ0MyMDAwRjUwMjNFNzU2NkQwRUZGQUJGMEE3OEZGOEU4ODdFQzRBMworOjEwQ0MzMDAwNEZCODFDM0YzNkU4Nzc0M0MwN0U5RTZDOTQxMDdGM0UxMQorOjEwQ0M0MDAwRTFGQ0VCQ0E4QUUwQjQzQzRBQzdCOTczOTkzRUJDNzhCMAorOjEwQ0M1MDAwQTc4ODcwMjhBOTYxN0E1RTQ5MkY2QkQwNERGMzYzMzJBMworOjEwQ0M2MDAwQkY0MDdGRTBDMjdEQ0MxRjQ4MDE1NTk4QUREQUM3ODUzMworOjEwQ0M3MDAwRUY4NDJCQkE0MEY5MTYwMUZEOTlGMzNDMEJEMThFNEY4RQorOjEwQ0M4MDAwMzYzMjNCQjE5OUZFNjE3MTFENUVCNDIzMkZFNkYwNUEzNgorOjEwQ0M5MDAwNTBCNzA1RURDRDBCODI1QTNCRjRFMjVFRTMyRUMyMzk2QworOjEwQ0NBMDAwNDBFMUJGMEI3N0U4Q0EzRDRGQTFCRjYyMzFEODlCNTUyOQorOjEwQ0NCMDAwRTcwRjkxRUIwRjBGOEJBMUZFQUY0MjZDRTcxRkQ5QjlDNQorOjEwQ0NDMDAwNEFCRkZGNEFCRDk2RjUxN0ZEOEJFQjNGNEVENzNGRTRCOQorOjEwQ0NEMDAwQkI1RjdGN0JENzJEMUIzOUJENjc5MjIxNDAxRjlGMThGQgorOjEwQ0NFMDAwQkM0OEVGODFERkQzRjVEMzcxRTZBRUVGREQ1MTFENjdCMAorOjEwQ0NGMDAwOTRDNEU5RjIxRDgzQkZBMjEzRDQyQjExQjBERUZDNEQwNgorOjEwQ0QwMDAwQkI4RUE0RDJGQ0NDNkEzMjA4Q0NGNEYzMzc2QUU1NjI1RAorOjEwQ0QxMDAwOEIxQ0FFNzFBMzlDOUQ1OUI2NEI5OEREMUZFMDREQ0E4QworOjEwQ0QyMDAwMDBDRkU2NjQ5QUZDRTA0RjNENkU2OTQyRkVBNUUwREQ2RgorOjEwQ0QzMDAwOUQ0Njg2Q0YyM0Y5Qjg2NzNBMzdFNUUxMzlBMjU2NzBBOAorOjEwQ0Q0MDAwMjE1RDg0MkNFQzVDNDFFMTZGQTFGOTQzMjNGRTNFODYxQQorOjEwQ0Q1MDAwQzMxQkVEMzFBNUI1NkM3RjRBRTk3RTAwNUQ4REE5RTM2QgorOjEwQ0Q2MDAwRjkxRDRDMEZGQjFFOTUzN0U4MEZBQjNCMjA0M0JCMjI1MAorOjEwQ0Q3MDAwNUEzRjA5Rjk0RDNGOEQ5RjBCRkM3M0Q5QTlBQTdEREI2MgorOjEwQ0Q4MDAwNzc4QUUxRUQzNkMxNDM2MkVDNUIxRkZBMjdFNkJFN0Q5MAorOjEwQ0Q5MDAwNDdGOEFBQzBFMzRFMjNEN0U3RjlGRTFEQjdENDE3MEUxNAorOjEwQ0RBMDAwNDYzRjk0RTBEOTBBOTVFQjEyRDE4RjcyQjZCMjI3RUVDNgorOjEwQ0RCMDAwRTM3ODhFQkY3QUJDMDZGRERFQURCMjI3NEQ4Njg5NDM4RgorOjEwQ0RDMDAwQkM2NTgxMDVFM0RDNzBEQzFFNENGRjUxRjMxM0ZEQjkzQgorOjEwQ0REMDAwQjk5NEQ0QTMxRTMzNDFGMEZGNTU1MkM1QjU0REU3RjFDOAorOjEwQ0RFMDAwMjc4QTlGNTY1NUVGQTdGMjRERUE5MTM0OTcwMUY4RTQ1MAorOjEwQ0RGMDAwNTIyNURFMTJFMjg3NTMzMTZFMDk3RjBFNzUxQkY2RDE4NAorOjEwQ0UwMDAwNENCQURFNkI2QjQ1MEZGODdGRUUzNUI4NEY4QzAyRkFFQgorOjEwQ0UxMDAwN0Q1QTI2ODA5N0Q3OEVDOTVFQTY3NzI2MjBERjlERjU5RQorOjEwQ0UyMDAwQ0UxOTE5NEMyMUIzMjg0QzYwQkY2N0ZEOTBGMUQ3MzM2MAorOjEwQ0UzMDAwRDAxOUZERjYyNzJBQjdCQ0UwQUIyN0Q1NDMyMTdFNzg3MQorOjEwQ0U0MDAwOUFFNzQwQkU5QkVFQ0IzRDQzOEVBRjAxM0ZEQ0Q0NUMwNgorOjEwQ0U1MDAwRDc4OTEzMDBERkE3NDQwMkYwM0RCRDM2MTdDRjI3NEIxQgorOjEwQ0U2MDAwMUYxMTEwQUY0RjUyMzg0MkZCN0JBNjY1OUMzODQxQzc1QgorOjEwQ0U3MDAwN0Q2MDZEMEFGQUQ1NjY3QThGRTQwMzlFQ0Q5OTY0QjcxQQorOjEwQ0U4MDAwODE3RjZEN0MxRjkxRjg1NTcwN0M4MEQ0QTM5RDYyNjY3NAorOjEwQ0U5MDAwRDkyM0Y3QzA3QzhCQTgxQzAwM0I2QjUxRERGMUZDOEVDNQorOjEwQ0VBMDAwOTBERjI0NzhEQ0I0RkZEMjgwREZEODkxNkU2MUZEQzZCQworOjEwQ0VCMDAwQUI0NkIwQjdDQ0EzRjU2MDdCNEEzN0IxN0FBNTU1ODJCMworOjEwQ0VDMDAwQzcwMkY4NThCNzFFRjlDRUJDMkE4MUI4QTAzRUQ1RjdFNAorOjEwQ0VEMDAwQ0NBQ0RGQTA5OUY2NUJCRjg5QjZBN0Y5RjlEMDFFRkFGMgorOjEwQ0VFMDAwQUQ0QTlDMEU3RUI0RDI2MzIyNkI5RjU1RkUxNkYwQTUxMAorOjEwQ0VGMDAwNzlCNDFEMkQyNkY1NTU4RjYwN0YwQjM2MDkyNDhERjZFQworOjEwQ0YwMDAwNTc5NDk1RjE5RjU5RDBERjMxRDkwM0U1MUYxREY4OTk0QQorOjEwQ0YxMDAwMTFFNkZEMjAxREFGMTNFRDdGOEUxOENFODdGQUU0NzE2OAorOjEwQ0YyMDAwQzFCNTBERUQ0RDJDNEVCNjkxRDMwMUY5QTAxM0EzMkYzMQorOjEwQ0YzMDAwODFFN0I5MUVBOEM4QzNGNzhEM0QxMDlGRTYyRDJGQUYxRQorOjEwQ0Y0MDAwODA3NTg1MDMyOTE5NzAwNDJBQURCRDZBMDRCREVFMkNENQorOjEwQ0Y1MDAwODVCMzlGRUE2RDY3NzgxQ0RCQTFDMDE5NjM1OEM1QTcyQworOjEwQ0Y2MDAwOUE4QzNEQjFGRERDREE2Q0E0RUY4Nzg5MEZGRERERkUwNAorOjEwQ0Y3MDAwNzIyNjg3NEZBREIxMDQwNUQwM0Y2NDE3Q0FDOTQzNkIxMQorOjEwQ0Y4MDAwNkU3RDFFRDY3RkU1MTUxOUZEQTM1N0JBODVEMTFFN0I5MAorOjEwQ0Y5MDAwN0U5MzRDMDI3NDhFQUIzNjg5QzgzN0NFRUY2NDc2MjAxMAorOjEwQ0ZBMDAwNzFCMzhDRjlGOThGMUEzMTdGNjhEM0Q0MzFDMDBGQ0ZBOAorOjEwQ0ZCMDAwNTNGODAzMUVFNjZFQ0UzNzQyN0UzRUU1RUJBNjE4RkMyNAorOjEwQ0ZDMDAwNjM5RUJCOThGMTBCMUQ3Rjk4QkY1MTRCRkZBREY4QzUxOQorOjEwQ0ZEMDAwQjIzMThDQkZFQkY4QzFFMkFFMTU2OEU3RDNGMzg5NTJFQQorOjEwQ0ZFMDAwNjI1M0Y4NDMyNkU0RUI0MzlEMTA3RjRCOEVDOTA0RjQ1MworOjEwQ0ZGMDAwQjkxMkM5RjVFMDQ2QzA5Qjk5MTZGMDE0NTNCQTA4MUQ0MgorOjEwRDAwMDAwMDFCRTc2MkQyOEI4MDNCNEZDN0IwRkVEMTkwQUYwM0I2NgorOjEwRDAxMDAwMDdGMDA2QkE1ODk3ODRGRUQ0NzlDMTU5MDg1NzI1OUU1RgorOjEwRDAyMDAwNzBGRTQ2MkQzRTJCRjE0QkY3Rjk0NUUyNTVDQjgxQTIyMAorOjEwRDAzMDAwMDRFMjU1RDVGQkU4ODcxNDJGRTk3ODBGRDUwQTQxOEIxOAorOjEwRDA0MDAwMDBGOTUzNkYzRDNBMDRGMzJFQzBDMzkyRTU1QzlFQUVFNworOjEwRDA1MDAwQjMyM0RFN0VGNDgzQUI2QjAwMkYxRjdDNDJDMEY5OTNCOQorOjEwRDA2MDAwODBCRjAyRTQ0QUM5NDZDMTBENzZDQ0Y5NEZCMEY2RjM1MQorOjEwRDA3MDAwNjk3QkMwOTc4RjdFQzZGMDg3RTJCMTFCRjBCQzY0RDM5QQorOjEwRDA4MDAwRkFCN0IwN0U5NUUwODZGRTNGREEzMjBCRTU2RjUxNDA4RAorOjEwRDA5MDAwMjQ1ODVFNzUwQUY1NjMyQTA3MzAwRUU4NTA0MDRDMDVBNworOjEwRDBBMDAwM0MyRjU5NkQ3MkMxM0UyQUY4QTJFMERGMjk5OUY5RURCMworOjEwRDBCMDAwODlEOTMzNzAyQTZEQjdDNUU4QzY3NUVCRjE0RTlDOTFERQorOjEwRDBDMDAwODFGODU1QkE1MzQ2RkMyODBEMzA3QzNBRjU4QTg4NzhBOQorOjEwRDBEMDAwNzg2OENEQkQ4ODNGNTdCNjA5NzFGMDJGRDdEODA5RjBEMQorOjEwRDBFMDAwMkZDOENBNUJGMEVGNjU4MUUzMUZDM0VCRjNDQjE4M0U5QgorOjEwRDBGMDAwRTY0MjM5RTBERjZCNUMzRjI1QzRBNkQ2M0IxNEZDNTMwNworOjEwRDEwMDAwRjBBOTJEQkM2QjI1OTdFMkUwMUJENThEQTdDM0JDOTY3QgorOjEwRDExMDAwQUVCMUUwQkM3MzJCRjY0QzVGOEU3NDIzQTM3RjNFQjc5OQorOjEwRDEyMDAwRTIwN0E5NDBBN0YzMjQxNjg3QTFDMDcxQjFDNEUyNzQzNQorOjEwRDEzMDAwNUFDREUzRDk3MjYzQTdGNkNDNDczNzhGMDM1MUI5OTgxQworOjEwRDE0MDAwMDk3MjExRTI0QTQyNzQ5Q0RGRURGQzI1QzZBRjVERkUxOAorOjEwRDE1MDAwRDUyOThDNEI1Q0Y4MjZERDc3NUFGRkNBNEUzQjA5QTFENgorOjEwRDE2MDAwM0UxRDQ0RkU1MjVDMjM2MjVDMjg5MTQyQzNBNkFBRUU5NworOjEwRDE3MDAwOEYyOEYxMTYwQjdGNjM0N0Y4MTZFRjM2MDUwQjY5RkIxNgorOjEwRDE4MDAwRTJEN0NGMEM0NDdGRjhDQUE2Qjc4MDdFMDJCRjEyOThDMAorOjEwRDE5MDAwNUQzRTEwMUUzODE1RTIyQTI1MTZGN0ExOTdCQjIzNENEOQorOjEwRDFBMDAwQ0M1RUQzQjAyNzYxMDZFODNGQzI4RTAzRTg0RjJBQUVCQgorOjEwRDFCMDAwQkU1NzM2QTlFQzkzMUU5MzhDRTNEMjdBRUM5RTBCREQxRQorOjEwRDFDMDAwNzdGMDIzQzJGQzI2MEY1MENGQUY5Q0Y1RjczMkEzOUIxQworOjEwRDFEMDAwRTI1QTE5RjVBMkUyMUQ1QkQwQUU1N0JBRTMyQUM2QkRFQQorOjEwRDFFMDAwRTZGRUU2MTUwN0MwQTFCNDU2RDRDNjQzRUQxMDQzMjZBQgorOjEwRDFGMDAwOENENzEyNEY5OTE4N0ZEMkM0MjU5NUQ0QjA3QjE5MjVBRQorOjEwRDIwMDAwRDUzQ0VFNDcxNzE3QjNGMDM3RkI1RTBGNTBEMDJDN0NBMAorOjEwRDIxMDAwNzVCQjAzRThFODUyRkQzNjA3QzA5M0Y2ODdGMTQ0OTNFNworOjEwRDIyMDAwQjJFMkM0MUJCNTE1Njc1NEZENTRDQzM4QTM0QkYwMEZDNAorOjEwRDIzMDAwOEEyMDBGOUFCNEYxOTk2NDA3RTM1Mzc0RDc4N0Y5NjI4RgorOjEwRDI0MDAwRDgzMzE1N0Q2NUUxMkI5RkJGMDg3MUFGMERCQjNGN0RDNgorOjEwRDI1MDAwMTFFNkJERTg5RkQ3NUU4NEI4MERCMkRGRTIwMkZEQTEwMgorOjEwRDI2MDAwRjQ1NzFGNjJGQ0EwRDI2RUI5ODk5RjdGNUVERThFNzE3QgorOjEwRDI3MDAwOTc1NzNFMzZBMUZFNzc2NURGRjk3NEQwMEZBRUVDRkExMgorOjEwRDI4MDAwMjIxNUUyMjk5N0VEQ0I0N0ZCQzNCMkQ3NzIzQjkyMTgyOAorOjEwRDI5MDAwRTc1QjI1MDVCQzBDQjYyM0VFNTNCRjBGODc2QUM0OTAyRAorOjEwRDJBMDAwOERDRUYzRjI0OTEzRDI3NzRCQkM1OEY1NjIxNjdGRTc2NworOjEwRDJCMDAwRTY3MTYyM0I2M0M3RDUyQUYxNEQyNTM1NTMyN0REMDk1OQorOjEwRDJDMDAwRkNBRDg2QzlGMTk2NzhBN0I2RTJDMzNFQTBGQjc5N0I5OAorOjEwRDJEMDAwM0JGNjZEMjc4RkZGRDNFRERCNjVGODA3REQ5RkU3NEM0RAorOjEwRDJFMDAwREFGOEIwQ0Y2QjFFRkVDNTBCNTA1NjEzRkIzRTk5NDJDOQorOjEwRDJGMDAwQzc2REMxNEI4OURCOUQ2M0YyMDY0RDQwMzdCQkZGMEIwOQorOjEwRDMwMDAwRTNGMDYwQkYwQUREMjBFNzNGNEYwN0JCRTUwNUI5MDk0MQorOjEwRDMxMDAwRUQ4MTRERkI0QzJFODhEQjJBREVGNzExRDJDNzk1RDc2NQorOjEwRDMyMDAwOEU2MzVDMkNFMUYxQjM1NzQ4Q0IwRjhCNzdFNDM2ODlFMQorOjEwRDMzMDAwRDIyQTNCOEIyQkUzNzA4N0I4MzNCNzAzQkZGM0Y4MzJBNQorOjEwRDM0MDAwODZCNzRBREM1OUJDNzhCMzBGNEQzREY4QkQwQjE2MTdCNAorOjEwRDM1MDAwQjdEODVENkYwNEY4QUJFM0QwODQyQ0Q4QTc1MzlBRjgwNAorOjEwRDM2MDAwM0Q2NURERkFGRTVDMDA4N0UxRUFCOEM5NzhGMTdDNUNENgorOjEwRDM3MDAwMUY2RkQ5MjdDNjg3QUY2Q0UxNzE5NDJERjE5MTg0NzQyQQorOjEwRDM4MDAwQ0Q4NDc4MUYyNkVGNEE4M0MyNDcyNDA2M0QyQTcxOTMzNQorOjEwRDM5MDAwRjU3QTdBMENCNjJGNUVCMkVERjk3RTNCNzgxQzMyMzEwRAorOjEwRDNBMDAwRkI5MzAyOTc4NjFCQjFGOUYxQTc5Q0JFRTlCOUU0OTIwMQorOjEwRDNCMDAwNDk3NTJGRTUyMTdFMkU1MUUyQzg5NEY5NTY1NDMzQjlCMAorOjEwRDNDMDAwREJCMDgzRTk4NTdBN0EyRUUxRjY3NkZEMzg1RkYwNzE3RAorOjEwRDNEMDAwNEE2QTBGMEMwNEJFRDM3MDcwMEZDNzM3ODZDRjI1M0I0NworOjEwRDNFMDAwNEYxOTAzOUMzRjA3RDVGQzE5RkE4QkMxNEY0NDMzRUIwRgorOjEwRDNGMDAwOEY5RTYzNjNGNjU3QkFGMzZBQ0NGRTJFNDlERTdCNjFEQgorOjEwRDQwMDAwRkU5N0VBOTk5RTcxQTk1QTJDMDhDNkU4RkYzMjk3M0YwOQorOjEwRDQxMDAwMkRFQkI2MUJGMTVDMjUzQUFDQzg3Rjk2RDlCMzRFM0FEQQorOjEwRDQyMDAwOTMyMTM1NjJGQ0MyQUE3MjFFRUZGMDQzNEYxQUMwNzlGNQorOjEwRDQzMDAwOTU3RDFDODFGOUFDMDFGOEE4Q0U5OUIyQ0I0RjQwQ0ZCNQorOjEwRDQ0MDAwOTFEMzdDNDNFMEZDQTRDQzU3MjkzNzI2MUI0ODUwQkQyMAorOjEwRDQ1MDAwRkY1MjAwRUY0NzRFRUNGMTc3MDlFNDRCRkQwQUVEQkRCQQorOjEwRDQ2MDAwOEU3QUM5NzUyNDg5RjY1NzlGMjc3ODQwOUY2RDhENjdGRQorOjEwRDQ3MDAwREFGRTI3N0I0NThEM0QwQzZDQ0ZCMEFFNjY4RjAxRjc5MQorOjEwRDQ4MDAwRDM2RTA4Qjk2ODE1NjJCN0Q0QTdFMTQxQ0U0RERDNTIxRQorOjEwRDQ5MDAwMkE4Njc0QTM1RkZCRTkxNTNCQkFDMTNEMkIwN0YxMDg0RgorOjEwRDRBMDAwNTA2RUY3QjREQzZGQzFGRTlDNDQxNzY3MUQyMDFGQzA4RgorOjEwRDRCMDAwN0Q0ODFCNjcyNjRFRTIzQTAwNzYwOTZCMUZEMjA3RkNCNworOjEwRDRDMDAwRDYyRTYyRjVDMEZCMEExQkY4QkRDNzc1NzYzRkNBREJENgorOjEwRDREMDAwQjg3NEUzNjFGNzVFMTQzQjkxMzM0QkQyREM4QjQ5RjRCMworOjEwRDRFMDAwNkFGMzQ5QkE3QjkwMEFCRkM2MkI3NDE0RkU2M0Y4QkI3QgorOjEwRDRGMDAwMEY4OUY5NkNGRDYwQUZFQUFEOUE2RjYyMEFGMTg0QTAwMgorOjEwRDUwMDAwN0M4MjBERTM5OTZEMzYzNjNGNjVCRTc0M0VDODBGMjhBOAorOjEwRDUxMDAwOThEODdDRkE4NzAzQTA4N0QzNzlFOUU4OThFMEJEMjdGQgorOjEwRDUyMDAwM0FCRkQzQkFGOTY5RjRCOEZCQ0M1QzNFNDg0NDAyM0UzQQorOjEwRDUzMDAwNjIzM0Q3MTMwRUU3NjY2RDlDNjk4MDQwQkM4MUIzMDVFQQorOjEwRDU0MDAwQUVCNDlDRjY5MzIxNEMzMjQxREM4MjBCNEVDMTNENzE0RQorOjEwRDU1MDAwM0M1REJCQUUyRUY1N0RCMTVBRjhDNzA4RjQxNzFEMzZGOQorOjEwRDU2MDAwODI5RkRGMkNDMEYxOTk3NDA0NUMwMzIwNDhGNTQ2MDBDQgorOjEwRDU3MDAwQzY0RjZENEEzRTg0RkFBMkFGRTYzODlFM0YxNzU3MUY0QQorOjEwRDU4MDAwQzc3MjAzRTQ2OTlBOTRFMENFRUIzMjg4OTBBN0Q2RTY5RQorOjEwRDU5MDAwRTVBNUY1ODU3QUIzRDIwQzFFQ0MxRjk2ODA4RTI2RkJBRQorOjEwRDVBMDAwRDMwQzgzNjBGQTc5QUIwRjhGMjI2NDNCMjlFQjA3MTYwQgorOjEwRDVCMDAwMjVGMzZBRUZFMUEzREQwMEFGMDgzQUVENDhDMDdCMTgyMAorOjEwRDVDMDAwNzA3M0JCOTJBNzBDMTBERTU3RDg2RTZEQzk3QkNEOTREQgorOjEwRDVEMDAwMkY2RUVGRDE5MjBGNDBCRTBBODA3RjA3OENFNzNEQkNEMworOjEwRDVFMDAwMUFFMjdDQ0NCRUQ1NjYzQUVFRTRDRDA2QTRCQkQxMTFERQorOjEwRDVGMDAwMUI5RTNGNDhCODAzRjI2NzQyQ0FBQ0JFMThGN0E1NUI1MgorOjEwRDYwMDAwRUMzQ0JDNUU1QjdDN0MzQjhGNDc5RUVDRjc3QkUwQUFFRQorOjEwRDYxMDAwRjc3MDJFOEY4OTJCM0MxOEVFNjMzNzlBNjczRjZGNTY1MQorOjEwRDYyMDAwRDNFMUU2NjZCMTA3OURERkYzQjBGN0I0QkRCM0MwMzUxMworOjEwRDYzMDAwQUUwRjlEOUY3MzkzODFDNUNGOUFGRDNGODdGQUJEOUYyMworOjEwRDY0MDAwRjAxQkEwQ0E2ODEyNUUyQTAwMUZGRTRCMzJDRTQ3MTk5QgorOjEwRDY1MDAwQTc2MjFGM0I1NzU1QUMzMTA0NTcyMkZFQkEwNTkwNkZBNQorOjEwRDY2MDAwRDFGRDBCRUJGNkFGODlFRDVGRUQyOURDQkY5MkJBNTMyQworOjEwRDY3MDAwNkNGRjZBQjcxQzMwNzI3QjNDOUM1QkI2MTNDRjJFMzBCQworOjEwRDY4MDAwM0RFRDVBM0IyMzRGQTJGQjkyNjQ2QUFBODA3RDk1Qzk2NworOjEwRDY5MDAwRjRCQ0MyQkUwOEQ3REZDNDg0MkI5RjVGNUI3MEREN0UwNQorOjEwRDZBMDAwNjFFQjhGMDY4MjVFREY2MEYwRjQyNjUxNzgyOUY1NEUzQgorOjEwRDZCMDAwOTg1OTlDRDg2NEFCQkYwRUM2Mjk3RDM2NUMwMUU3REY2NAorOjEwRDZDMDAwQkQxN0RFNDMzRjcwRUY4NkU2RDA0MDNBREZERUEzQjhGOQorOjEwRDZEMDAwMzk4NThGQkJCRDYxMkJGQTMzQjcwMzFFQkJDMTc1RUYxNAorOjEwRDZFMDAwNUYwOTcyMzIzRTNDMTg3RUI3QzBBM0U2MTRDMkM3MDA4MQorOjEwRDZGMDAwNzlGQTdEMzdCRjQ3OTE1MzJCNzg0MTRFMjQ5OUE4MUM2NgorOjEwRDcwMDAwQTVFOTFGQ0RFQzFDNzNDNjJDRjI5NEQ5MTk5RDBEM0REMworOjEwRDcxMDAwMjREMDhCNzNBNjE5RjAzQ0U1RTQ2OTc0RkQzQ0ZFQ0Y4MAorOjEwRDcyMDAwMkM2OUU0OEJCMjlGMEExRTExNTI5OTAwRTc5QzAyQTc1NAorOjEwRDczMDAwRkYyRjVBQkM3OTI2QTEwNzJEMUY3REY2RjQ1MkIwRUJCRQorOjEwRDc0MDAwMjlFREI2QUQyMDlFQjlBQUZCRDAxNDdGRjY2OERBRTVDNAorOjEwRDc1MDAwM0Y2QTA1N0JBODUyMUZGMDMyRDYzOTgxQjZCQjA0RUQ3MworOjEwRDc2MDAwNjAxQzU4Qzc5RUIzQ0QyMkMwQkJCREZCQUFGRjVFQkZFNQorOjEwRDc3MDAwODI4RUQ3MkIzRUZERjhCMkQ5QkQyMkZERjc3RjlBMTVEOAorOjEwRDc4MDAwQkYyM0QzNDdCQ0QxN0I3RkZGMDQ3QzU4NkMwRTNCQTZFNAorOjEwRDc5MDAwRDFGRDJEQzlCRTY2MDQzOEFDNENCODMyMzI5NkRGMzNBOQorOjEwRDdBMDAwREUzQ0VBNkZEQzZBMDMzOTdEMzA2MjhBNzk4RkEwQUY5NAorOjEwRDdCMDAwODVFOTE3RUZBRTk4RTEwMTNGRkM1MzJERjcwNDk4M0M0MworOjEwRDdDMDAwQ0JFMzdDMzdBRjU3NzEyMTYzNUFBQUI4MzEzMDU4NzAxOAorOjEwRDdEMDAwQjk5OTBGNUZFOEZDMEFCMjc2NDkyMDNGRjM4OTRBNUVBNworOjEwRDdFMDAwMzIzQkM1MDREMDQ3OUVDQTExMDlDNkE5Qjk2NDhEN0NENQorOjEwRDdGMDAwMUIwRkY2NzIwN0JDMEI1Mjc2MTg4NkJGM0I0RDdCMEY5MgorOjEwRDgwMDAwNzREMkE4NTMxMkJDNTczMDM2OEI4QTYzMDFERUE3RDE3RAorOjEwRDgxMDAwOTY4RkQ3REQxMzlERUM5REU1QzlFM0U1RDdGMEZGNDE3OQorOjEwRDgyMDAwNUNFN0E0QUNGQjNDNzk2QTM5MjE1NUY2ODE3RDNFRkU2QworOjEwRDgzMDAwOTUxODUzNkY3Q0I0MDUzRTNFODRFQjFCMTYwQTlGREJBNAorOjEwRDg0MDAwNjE5REIzNTYzMzk5NzQ3Mzc4RThFMUE4ODc0QkRFNUYyNgorOjEwRDg1MDAwRTYzMTdCQTEwRTFFNzdERkE4M0M5QzE0MDMwRUFERDdFQQorOjEwRDg2MDAwNUREOTA3RTRBNjAyM0YzRDFDRUFBMTJFRUE0REE2MjBBMQorOjEwRDg3MDAwRTg4MUY1NTIxOEUxNTg0RkUxMThFMDdFQUI3Q0Y1M0VBNworOjEwRDg4MDAwMkJGM0UxRkFDMzc4RkU1RDBGNEYzRDFDQTk3RTgxRkFCMAorOjEwRDg5MDAwQzNEODAxNzZCNDgzMUQwMzc4NjExQzQwRTUwNzI2RkFERQorOjEwRDhBMDAwRkRFRDVFMzI3OTFBNzg1RjY4MzRDNjE5REU0NTEwNTY5MAorOjEwRDhCMDAwRTQwREExMkMwRkZEMzIyRUU2NUZBMUYyOUNFMUMzNUZDNworOjEwRDhDMDAwOThGREFBMzBDMkU2M0ZDNkNERTI2NTI4M0M0RUVCRTBBQgorOjEwRDhEMDAwNzE1QTg3MDc5QTczOEI3RTlFNkZDMDNGNDZDNEMwMEZGNAorOjEwRDhFMDAwOEUwNzhCMkNGQzdDOTM0RURDNzBGRjdGRDhDNzQzOUM0QgorOjEwRDhGMDAwOEMyRkM0OTY4RkEzMjNCRTk2N0U5OERFQzFERUU3MTBFMAorOjEwRDkwMDAwODhCRkU1QkI4QkY2MTNGMkNBMThGRjk5NkI3NjIxN0RCMQorOjEwRDkxMDAwRTQxMjZGMTJCQzA3MDE0MTg2MzA0RjY1NUU4MzA1REY1QworOjEwRDkyMDAwMEYyRDI5RjA3RUQzRDgyNEY1RkIxMENBRjhDQUJFRTQyNworOjEwRDkzMDAwNzJGOEU1OTJDMDAxMzg4N0U2MTJFOTMzRjVCQTk1RkUzMAorOjEwRDk0MDAwMkEyQzVDQ0ZFQTRFQkFBMzlGMUM4Q0ExNDNBM0ZEMjlDRAorOjEwRDk1MDAwRUI0QjRBMjIyMTdDM0Y0NDMwRTMzRDI3RkE1RkMwRDg5RAorOjEwRDk2MDAwMjEzQTlFMTIzRjlBNjg5RjUyNjk0MUJGNEUxOTYxNzFEOAorOjEwRDk3MDAwMTIyMURDQ0YxQzVFOUVDM0RGNjkyMkU2QjhFRkYyOTA3NQorOjEwRDk4MDAwQUYxM0EyRjM3QkQxMjI0OEY4NkUwMjlGREZFNUEzRTYzNgorOjEwRDk5MDAwMDBDNDZCM0MyNkY4QjcwMjFDMUE4NDYzMDMwMTVFNTQ3MgorOjEwRDlBMDAwMUZCQjA1RUZFOUVCQ0FBRjlEM0M1QzAyRTVCNERFM0M3MgorOjEwRDlCMDAwQUNDN0Q3QjU1MDY0NzYzMjdBRkVDN0Y3NTA1QUYzNzFDOAorOjEwRDlDMDAwNjY0RkEzRTQyNkMxRkMxNUZDQ0ZCMTMyRkExRTRGREMzMgorOjEwRDlEMDAwNURGMUJEMzRFMjk3MjAzRDZDNjFGN0QwRUUzRUY5MEM2RAorOjEwRDlFMDAwRUVERjFGQUM3NzFGMDU3QTJCMjA0MTA5REZGOTcxNjk0MworOjEwRDlGMDAwRjFCMDREM0NFREEzM0ZGRkYyNzc1REE0QTY3NDgwRUI0MAorOjEwREEwMDAwNDFDQkFEQkQ0MDhFMjlGQUMyN0IxNkRGNkY2MUJEMDdFOQorOjEwREExMDAwMkQ4QzNGOUZGNjBFN0QxN0U0QzJFQ0VDQzEyNzg2RDAxQgorOjEwREEyMDAwRDQ2MEY2RTFCQjBCMEYwMzVFNTE3ODY2MDE1RUQxQjZBMAorOjEwREEzMDAwMDdBMUVCNEU4ODU3NDc2MURGRTZBQ0Q1RTE5NTk5RDk1MAorOjEwREE0MDAwRDM2NjUzQjYwNUVCQzg1OTJCN0ZBOTlFNTcwQkJDQjhCQworOjEwREE1MDAwNUM2QzRCM0YyNDg3QTk0MjlGMEFFRjJEMzBGQzNDNjg0OQorOjEwREE2MDAwMzEwNTQwNkZDQjc5OEFDNTQ3Q0MyMUZFMTcyQjA1N0M0OQorOjEwREE3MDAwMDc0MEEzQUZDRkI1MzBCQkY3REM5RjU5OTBDRTY5RTMyOQorOjEwREE4MDAwNEQ2NUUwRTdCMkYwRjcxQ0ZBQjA3Nzc3NUFDNkFCNTRCMQorOjEwREE5MDAwQjU4NzdEMzdBNzIyMUVDRUU1RkVDM0IzMDIzQkI3Q0NDOAorOjEwREFBMDAwQjVFNEIzN0JCRjFCRTU2NjM1M0VFQUM3OEZEQkFGQUU5RgorOjEwREFCMDAwREQ0MTgxRDk0OTBFQ0E2RThDMDc1M0RBNURCMTMwMzkyOAorOjEwREFDMDAwREU2Q0VFQkRDOTcwOTNGQkUwRjNDQzFERkE0QjQ5RDE3RgorOjEwREFEMDAwRkMzOThCNjU0NjJDQkQ0MEU5QUZFNTVDREU3MjlFMzBCQgorOjEwREFFMDAwQUUzOURDMzU3QTlFMzA5NENCNDdCNEU3MDlGOUM4QkYyQworOjEwREFGMDAwNzI5RUIwM0YyRDFGNTk0RERCQkY2REYzQTU1QTYxN0M1RgorOjEwREIwMDAwQzlENzE3RTBGRTFDRDcwRkE5MjZEMzU3NkQ5NzRFQjU3RQorOjEwREIxMDAwMzJGRDMwNzU3OTBFMzkzMzM4RkEzRTlCMjBEMTk5RTBDOQorOjEwREIyMDAwRkIxQUZFNzI5MDM3RDIwQzgyRkM5RkYyOTk4NzYyQzU3NQorOjEwREIzMDAwMDUyNURBNzMzQTVCODc0NkU5RUYyOTgzQkJBQTkyQzVDQworOjEwREI0MDAwMkJBMEJGRDdCNzdDMzZFQTczNTM5NzE3NjFEQTc4RkEwMAorOjEwREI1MDAwQzYyRDQwODczOTFDOUVCNzVBOTk1RTVBOUFDMEU4NDMzMQorOjEwREI2MDAwMTBGQ0I3NDI3RkY1NUVEMTBFRkVENDg1QjUyMkY3RDcwMworOjEwREI3MDAwQjE3N0FEQTY0RTEwNTNFMEZCMTlCMzhDRTdDMDgzNzZBNgorOjEwREI4MDAwQjZBRjY3MDg3QjlGMjZFN0I4Qzk1NzQzRDMxQjI0N0JGMgorOjEwREI5MDAwOUM1NUE1RUZERDIwNzk5ODI3NjlBOUU4QkY1NkVFMkJBMworOjEwREJBMDAwOUUyMTE5NkNCRTZCOTk3RkEwNzk2RDA2QzYzMTFGOTRCQQorOjEwREJCMDAwQjVGNkE4NTE1NkE2MEY4RkIyQjJGRDlEQ0RERkIxMDNDOQorOjEwREJDMDAwN0M4MkY3MjQ2NjRCNkVCNDBGQ0U4RTE4RDkzQjZBNzRGNAorOjEwREJEMDAwMUU4ODZGMTY2RDNGRjk1NjE2M0Y5MUNGRTEzRjFCRTQ0QgorOjEwREJFMDAwRTQ2MEE4QTdFRjQ3NjJGRDczQkNENUMzRkQ0RDRCRUVDMworOjEwREJGMDAwNTg4MEQzMERFMjFENjc0NUJFRUU5NjAwM0UzOTQzMEVCOAorOjEwREMwMDAwOUYwNEZFRDYzNjNGMEYwOEMwQ0Y0QjZGMDhBMUVFNjBEMQorOjEwREMxMDAwMkZBQjkxRjE3Q0Q2QzBGNUZCQ0IzNTg3NTI2N0QzNzQxRgorOjEwREMyMDAwRjFBRUY3MUQ3MDBFRkM5RTk1RTk1Mzk3QTU3QTdDNzdBRgorOjEwREMzMDAwNjJEMTZCMjJERTlCQTY2ODlBRkEzRDZDM0Y2NzE4QkJFNworOjEwREM0MDAwRjdDMUVFMkQyODcyRUU4RUFGN0E3NkY1NjEzRDc2RkY0NAorOjEwREM1MDAwNDBEMUFGNzJDRDgxMjBDQ0VGNjBCOTg4NzYyOTJBMDdGOAorOjEwREM2MDAwMzVFRjkwRTREN0IwN0IwOTdBQkRFQjExQUJDQ0UzMzU0RgorOjEwREM3MDAwRDkzRTJFNzNCMTcxRTJEMTZENEVDNDRBODIyQUJBQ0QxQgorOjEwREM4MDAwOTFEQzEyQ0MzRjI3RTIyMDQxMEFGN0NCMTdCNjZFOTgwMQorOjEwREM5MDAwNDhGMTNDOTAyNkUzMzk4RjFFN0YwRUEzREVBN0Y4QzEyMgorOjEwRENBMDAwMDMzNDRGQzczOUNDRDc3M0E0NjZFQTM0Nzg1RkU1MkRDNworOjEwRENCMDAwNTJCNjdBMDBBRDkzMTdGNjI3MzMyMkE2QTdCNDYxNTE2NgorOjEwRENDMDAwQkQyQkRGQTVENUY3RjRGQTYwNDFEREZBRDVGMDE2NEI5MAorOjEwRENEMDAwMDM3QzgwRjFDRDI2OEMyMzZFQTUyNzlBRUY4RUE5MUY5OQorOjEwRENFMDAwMTJCMjFFRjFGMDhFRDc3RTM5MUVERTlGQjhFM0EyQzFCQworOjEwRENGMDAwMDVGMzlCNkM3NTMzRkI2MkNEMzU3QzFGQTE4NDg0QTYzNAorOjEwREQwMDAwNDM3OTQ5OERFODBBRDE1NjQ3NDhDRDZEMjAxNzE1MzkxQQorOjEwREQxMDAwQUVDMDI1NzRFMzkwRDkwM0ZDREUyMkJBNTZDMjNBQ0REOAorOjEwREQyMDAwRjdEODIwQ0U2MjY0NjNGRjY0OTA2NzA3Q0QzMkRBMjFCMgorOjEwREQzMDAwNzMyQ0JENkQ3MzU0Rjg3QzMwOTlCRDFCNzAyNEI5QTc0QQorOjEwREQ0MDAwRjZCQjc5QzM2RDIwRDdGNkYwQjhCNUMzRTdFRUI3ODU1QgorOjEwREQ1MDAwQjFERUQ0NjRENENCMTQzOUFFRDM1NzE1N0JEN0Q4REUxQgorOjEwREQ2MDAwNjI4QkJENEJBREU3MTI3MUQzQjMxNjVBM0VGRTU2MTkwNgorOjEwREQ3MDAwRUZCREU1ODU5OURGQjQ5NTFDQkZFMTVGQ0RDRjIzOUE1OAorOjEwREQ4MDAwRUYwNTVDM0Y2ODI1RDdBMzcwRDZFOEExNkY1OEI5NUU1MAorOjEwREQ5MDAwRTkyNjAzNDBBRjBDREREOEIwMTBFRkNCRDYyNUI4NTYzRQorOjEwRERBMDAwQTIzRDgxRTkyRDhENjc4QjM3NEM4MEVGQzc0NDY2MUZGQworOjEwRERCMDAwQjkyMTIyMUQxRERDQkZCMDdCNTg0NUJGNTQyMkUwQkVGNworOjEwRERDMDAwNUQxRjc0RjVDQTlCNzQ1RkFFN0Y2MkY1MDRFMEIzNTRDNworOjEwREREMDAwN0Q1QjZDQkY1ODkwQzMyOUQ0OTlEOUQ5MDM5REQ5M0I5OQorOjEwRERFMDAwMThFQ0RDNzk1N0Y0RENGOTBFRjAwMTc4NDcwNkM0NDNFRgorOjEwRERGMDAwREFBNjUzNDYzODFGNUZBNkFBMzhFMjE3NUQzNEUwRDc4QgorOjEwREUwMDAwNURERUIwQThCRTdGNzM4QUYzREZDOTU2RUZGQkMwMUY4QgorOjEwREUxMDAwMDMyNEE3MEI1NTQyNDg5MUQ1OUIwRDcxRTA0RDkzODk4MgorOjEwREUyMDAwNkIyQjVEQ0ZCRTBCMzk4MjRDRjNBM0I2NjU3ODA0OUE5OQorOjEwREUzMDAwREYwRDhBMjVGMENERDdDNDIwQzQ5M0VDODY3QjZCQjQ2QworOjEwREU0MDAwREYwNUY1OTVDNjBDM0E2RUEwNDY0NEJCRkUwMjZFMUY3OAorOjEwREU1MDAwQkYyMDA3RDIxMzU1Rjg1MTk5QzBGOEM5MDVEOUZGMEI1NworOjEwREU2MDAwRThFN0MyQzcyNkI0Nzc1RkY4QzQxQTUzQUVDRTQ4NjA1RAorOjEwREU3MDAwN0NGNzREMkVDRjMyMTNEQzk4MEYzNUVDN0RBQjMzOUQwNAorOjEwREU4MDAwNTcyOEUyMUEwNDcwMkZERTcxNTU4NDc3OTNFRUU0RkE3NgorOjEwREU5MDAwNTdFMUIzRjVBQkMxMkUzMzcxNTM5MzA0N0NDNzE3NzRBQworOjEwREVBMDAwRTU4MzQ4OURCMkMzMjM4MzFDOUFCNkQzMjc4MzlBM0Q0QQorOjEwREVCMDAwQkRBNjBDRTM5MDY2RDQ1NjFFODFGQ0ZEQTE2QUNDRjc4QQorOjEwREVDMDAwNEZGMDQ3MDAyRTc3QUQ2RDNBMDRFOEQyQUI5MjQ4Rjg5OAorOjEwREVEMDAwOEVDRjY3NENBRjRBRTVGM0U4MTFGMTFDNzQyMjM2NjcyOAorOjEwREVFMDAwMUIwMEJGNUJDNjdGQTI1RTAyRDU3REUyNkEzNjNFRURCNworOjEwREVGMDAwQ0Y5MDQwRDc3RDU3NTk1MzJFQzhCNUY0RTVBQ0JGNzRDOQorOjEwREYwMDAwNzJBMERDRTk4RUY2M0JGQTQ2QkRBMEI2MTdCQ0Y4OThDNQorOjEwREYxMDAwQUQ4OEYxNUIwNkY3RjRDNzNCNkZDMTczMTk3MTU5RjExNgorOjEwREYyMDAwNUQ0NTRFNEYzOThGREJEMDBGNzBGRDA3Q0MwRjcwN0RGNAorOjEwREYzMDAwMTBEM0E3QUZGRkMwMTYwQ0M0RDBBN0EzNzgxNjMyMzFGOAorOjEwREY0MDAwRkM1MkYwOEQ5ODU5REU2QjA2N0NGQkZFRjM2NTU2QTAwMworOjEwREY1MDAwOUI2NDlGREJBODhFM0ZDQ0Q5NTBEOEVGNkRFOERGNjI4MQorOjEwREY2MDAwNDJCQjVDQ0I3OEVCRDk3ODEwODgwQjc4QURDOEIxRDlCRgorOjEwREY3MDAwM0FGRjRCOTQwRjMwQkFBMDVEMDQ2MTVDMjUyNUMyNEE3QworOjEwREY4MDAwMTc1MUU3NDkyODBERTY5MzlFQzBGODVDOTVEMTNEMTNFMworOjEwREY5MDAwQzZBQkIyOUE1QzMwREU2QzczNkYyM0YwQUQxNkZCMjYxNQorOjEwREZBMDAwOEY0RjFCQzlGNUNCN0QxNzBFMjZDMUJFNUYxRjU0OUUzOAorOjEwREZCMDAwMEU3QTczQzhGMDczRTQ1MzZERTFERDRGQUNERUUxMDkxNgorOjEwREZDMDAwMzhDRjAwRUFGOTRBRkQzREU3QUNGRDQxNEVCRTY5NjAzRAorOjEwREZEMDAwNzE0RkM0MzNBQjNCQUM1NzY5Mzc4REE3QkJCOTlGNEU2QworOjEwREZFMDAwQTE5M0U0N0FFMkRERDIxRjQxRTVEREFEODJDN0E0MDQ0RQorOjEwREZGMDAwNDY4RjRBQkE1Qjc2MDcxODlEQjFCOENFRERGNjkwQjk2OAorOjEwRTAwMDAwMjdEMEYzOUU5RTk4NEZGNjExOUIwN0UyNTg2QTdCN0JDMAorOjEwRTAxMDAwQzA1RjQzRjlDMEE0MDQ5NTVERUE0RUNFMUY5MkVCOUIwRQorOjEwRTAyMDAwOTAyRURCN0IxRTE4QzZFMTFCOTJBQTM5N0QxMUU0NTNBQQorOjEwRTAzMDAwNDA1RjhDN0Y4N0JBRjBGNzc4RDBGRjA3N0M4M0VGNEY4MworOjEwRTA0MDAwMjcyMTBERTNDMTcxOUY5NTc1Mjc3M0JFQjA4Q0QzM0QxOQorOjEwRTA1MDAwQzAwMUNBNEI3OTVFMjk1RkNDRTE5NTJGRjY3N0FBRTMyMAorOjEwRTA2MDAwQzc1QUM5RjVFNTY5MDRGNEM3RkNFNTlEMzEyREU1RjMxMAorOjEwRTA3MDAwNUQ2MDVFOEZGNkQyMDVDOUVCRDE0RTlBRUNBREM0NzRFQgorOjEwRTA4MDAwNDE1RTI1N0U0RkRCMzQwQkYxNjNDMUM2RDhFRjhDMUQ5QQorOjEwRTA5MDAwRTU3QUQ5RTUwQjA2RjY5RTk0QzFEQTE5RjA0RjI5N0Y4RgorOjEwRTBBMDAwQzcyQTczN0VFOTdGMUNGMEUxNjJDRDg2RTcwN0JBQTMzOQorOjEwRTBCMDAwNzZERkVCOTZDQTg5RjcwM0ZFNkYxMzVERTVCMDNGNTUzNworOjEwRTBDMDAwRjk4MjNCMDY1RUE5RTEwN0YwMkFBREZBMUNGREE2MjUwMAorOjEwRTBEMDAwMjRDQ0ZDQTZEQzJGQUFGODRGODM1NThDOUY1RUU0RkE3MworOjEwRTBFMDAwNTk5MTU1QUI1NzU2MjYxODM4M0ZBRDFGN0YzQjFEM0YwMgorOjEwRTBGMDAwRDREQzJCMTNGQzQxMjEyOTJDNEE2Q0ZGRDA2RTA0N0MwQworOjEwRTEwMDAwRDg4NUY4RkU3NEZBNjM4MDQ3ODIxREY1MUVFMEFCQkIyQworOjEwRTExMDAwNTRGOEIxNzBFNzk2OEFDRUY0OUY3N0RENjBGNzc3NDJDNgorOjEwRTEyMDAwMTJCMUE5RjlCNzgyMjcwQTNGRDZBRjZGMkJDNzVGMDU5NworOjEwRTEzMDAwMEY0NzQ2RTVENEQ2MDQ2RTFGRUQ0OUZCMkQ1OURGOEMwMQorOjEwRTE0MDAwRjZEMTM3MTQ3QTA2N0MwMzdBNUVBQkUwREIyMDAzN0JFMgorOjEwRTE1MDAwMzc0RDRCQzdDM0JGMjNGRUJFRTc5OTE3RDJEMUZFOTAwMAorOjEwRTE2MDAwNDVFOTE2REU1OTAzQkE4RTgxMTdCRjZERTEwM0ZFQkQ4NgorOjEwRTE3MDAwMDkzMUU0QzE0NUMxRkY4QkE0OUVEMUY2N0JDRThERUI2NgorOjEwRTE4MDAwMzc1QkQ1Q0ZDRjM4OUU1Rjk3RkRERDVEMzFFMDE1ODVEQworOjEwRTE5MDAwMkJFOTBDRjg1MDQ0NzcwNkUwNDAzNjA5MkU3NURDN0JGRAorOjEwRTFBMDAwRjIyNjY2RTdBRkU3RjA1NUJFRDdFQkUwM0QzQUZBQkVBMAorOjEwRTFCMDAwNUMzRDgzNzc5MzExNDQ3NjVBOTBFOTA1QzQzMEFFMzNDMQorOjEwRTFDMDAwQzhGOTA1NTZFRjM4QjRCN0FDMzcxMDdDNEY1NUM4NDE4NQorOjEwRTFEMDAwN0M0RkFFN0FFRURDNTc0MzIwQjVGNDQwQkYwOTcxMUI4QgorOjEwRTFFMDAwMDA4RjE2M0NFNUM2RjNFMENBOTcyQzg4OTdFNzEyNThEMworOjEwRTFGMDAwOUNDNENBMkE5OUUxQTc1Qzg5Rjg3NUYxOTNFMkVFRTAyNAorOjEwRTIwMDAwNzcwOTUwQjlERTNCODZEQ0Y5QUQ0RTlFQkZDQUU1QTg2MgorOjEwRTIxMDAwODI3NzNERDYzMUJDQUI5MkJDRDY0NDE1NUU2RTI3REUwQworOjEwRTIyMDAwNENFNkVGNjc3MjI1MUUzRTQ2RjFDODM1NDhDMUEzNTkzQQorOjEwRTIzMDAwRjQ3QjhGQjU2MTExRjY4QkVFRTMzNUEwREY5RUVCOUE5MAorOjEwRTI0MDAwOTA5RkM1REI0N0M1QkZBNkVDQTdDMkU3ODdEQkI0Rjc0NQorOjEwRTI1MDAwRkE2NDFCNUI0RjcyOUM3ODgwQTg5Q0QzRjI2NTc4RkZCMAorOjEwRTI2MDAwQ0YzNjU0NEIwRjcwRTU1MjU5NEYyMzg3NEIzQ0JBOTgyOQorOjEwRTI3MDAwNjM2M0VGM0U1N0ZDNzVDMzgzNDBDRjE1RUJBRDlFOTVBRQorOjEwRTI4MDAwMjRFQUE3NTFGQ0E3Q0EzQzNBREEwNDhEM0Y0N0VGNjc1RQorOjEwRTI5MDAwNjkzNEZCNTM2RDJBQkMwMjNGQTAxQkY5M0RGM0FCMjg0OAorOjEwRTJBMDAwQkY4NzYwQzkzNjE2RTdCNDA3OEE4MDhGOUNCNTA2RDU0QworOjEwRTJCMDAwRjc3NzZGOTU4ODU3Q0FBNDcwQjU2NUUwQkE2RjA1MTZGMQorOjEwRTJDMDAwNDJGM0M5Q0I4REE0MTczRDc3NUQxRjcxRTBCMDgzRDZCMworOjEwRTJEMDAwOUZEMDE0MkVCQzlEMkU3MThGMzEzQzZEMTJEODdEODkzQworOjEwRTJFMDAwQjcxOEY0MENCNEQxMDNGRTM3QjA3RTg5QUI1QTMzQ0ZFNAorOjEwRTJGMDAwODExQ0RFQ0FGRTU0RkM3NTRFNUEyQzNGODAwMkM3Nzg0MgorOjEwRTMwMDAwRkIzMjg3QzNDM0M5Q0JGNUY0NkZFMUU1OUZCNjlCN0VCMworOjEwRTMxMDAwMDM0RUEwREZCQjQ4QTAxQ0UyMkZFODAxMURFM0Q2NUE0NAorOjEwRTMyMDAwRTg5NzFFRDhBMUZGMDI5Qjk2N0U5NTdDMENGQTJEQjAzMworOjEwRTMzMDAwQTlFOTM3MTI2NkY0Q0JFOUQ0NTkyNTdCNjNFOTJERDNEQgorOjEwRTM0MDAwNkRFQzlDRUNBQ0NBQ0YwNjc5RTRGNDYxRDgzOUQwMEQwMQorOjEwRTM1MDAwRDJGQjAyNEFFRjQwQzcwMUEwREI4RTAwNEY4NjY3M0QyQgorOjEwRTM2MDAwQkM5NTE4RUZEOEEzOEFFOUUzRDcxM0Q5N0ExN0RDRTk2QgorOjEwRTM3MDAwM0QwMEVGMjUyRkEwRTcwMTgxNTZBREU0RjQxRTFGRUUwRQorOjEwRTM4MDAwMjFBN0MwRTQ5QjEzRjhDQzVEQTNDMkI5MjA4N0RENjA1MAorOjEwRTM5MDAwRUZFODg4QkZGQTAyMzc2NUY0MjgxMjBDRDE3RDc3REZFOQorOjEwRTNBMDAwMjA4QzdGN0NGMkMyODM4RjAxREY1ODZGQzM3QjRGOEE0MgorOjEwRTNCMDAwNUM0QTRERjAxN0RCODZDNkE3NkI4QTk3NUVCMDU3MkQ3NworOjEwRTNDMDAwRjlDMkM2Q0U4RDcxRkNFMkEzOTcxQjQ4QUYyNEM0RjNGQgorOjEwRTNEMDAwQTU2QTNDMUZFRDZCMTIwMUFFNDkwOUZFMzQzOTkxOTBEQworOjEwRTNFMDAwRDVCNjlDMzFFNjZFNzQ3RDE5NTRFRkE1Rjk3MjlBNUYyQgorOjEwRTNGMDAwMDdGNkI3MEU2MUMyRjMxNUI2NEVERkRFNUVCNzdBOUQ0MworOjEwRTQwMDAwRjcyREIwRDdCRDk0RTA1RDA5RUI4MjM4MDA0OEVGRUEwNAorOjEwRTQxMDAwRDIyNDIyN0Y2QkE3NUZCRjE0RUM3Nzc0M0RBN0VGRTk4RQorOjEwRTQyMDAwRjdEMjJDRkE3NUY2N0RCRTBBMjg1NUVDQzlDM0I5M0Q2MgorOjEwRTQzMDAwQjlCNDZFMTBEQTk5NTU3NkU1MERCMEZFNzg3NkU1QjY4QQorOjEwRTQ0MDAwQzY3NTcwQkFBN0Y4OERFNzNGNDc1NjkzMDhGQzUxRTFBRgorOjEwRTQ1MDAwMkI1QjZDMUQzODNFODcwOUJDRDdBRUQwMTdGMDI1RDA5QQorOjEwRTQ2MDAwNzc5NUY4MDJCMDNCREFEMTVGMTE0NDdDODVCQzMzMzMzOQorOjEwRTQ3MDAwQ0E2RkQ2NTUxQTYyQzYzRjU1REI2QzFBN0E1MUY4MjkxNQorOjEwRTQ4MDAwQTlGQkM3RUI4RjI5RUYyQzMyRkU1QUFERTZBRjU1OTVBRAorOjEwRTQ5MDAwQTc1Mzk5RkVDQURFMkQ1QkNBNkQwMDFCNTY3QUZFRDhDMworOjEwRTRBMDAwMkIzOTdBRUY3OTg0QzkxODgwRjcxNkU5ODFDRUVENTJCRAorOjEwRTRCMDAwQzU0RjBBNzU0MkM4MEU3MTc5NUZEMjIyQzBBMzJGMERENQorOjEwRTRDMDAwOTg2RUY4MEY1RjQxMDZEODU5NEUxQTkwRkY5NkYwN0I3MAorOjEwRTREMDAwNEQ1OUREMDlCRUMzNTNDQkVEQTNEOTY3NkM1RUYwRkY4OAorOjEwRTRFMDAwMzcwQTY2RTQ5RjhEQTdBQzAxOTBBQjhENzYwM0RBQ0YzNworOjEwRTRGMDAwMEZFRjMzMjE1RDVDRUI2NUU1RjY4RkEwQzY0RUEyRjgwOQorOjEwRTUwMDAwNzNBRTFEOUI5MzA0RkNGRjc5RUVENzdDRkVCRTVCRDBGRgorOjEwRTUxMDAwNkVBOUQ4NzMyNTg5QzJCQzAzODRFOUIwN0I5OTM5Q0IzNQorOjEwRTUyMDAwM0JBM0JENTVCMUVGQTY5QTY3MDkyQzg4ODhGNTJGOTlCMgorOjEwRTUzMDAwRDlCQTUyMjVCRjAwRjZGMTJENkRDNDNGOUNCMTE5MTUxMworOjEwRTU0MDAwM0RGODJGMDBERkQyMjdDMjQ2MzhFNzJBN0FCMDIyQUY0MworOjEwRTU1MDAwQkIzN0Y0MzgwMDcxMTBERDBCOTgzOTZENEI4M0MxMDA2NworOjEwRTU2MDAwRUJEQjQyRDEyODMxQTMzNTVFQjVFMDRGRUIzODgzOEIyRQorOjEwRTU3MDAwMUFCOUI0ODZDNTE5QjRFNDc5QkI1RkYwMzg4M0QxNjdBMgorOjEwRTU4MDAwNEZCRjhBRUZFOTk5RkQxRjZCREFFNUE3NTg2M0JERDM0QQorOjEwRTU5MDAwM0Q3REY5NjNEODNFMUVERTRGMzdCMEY3NzlGNERGMTNDNworOjEwRTVBMDAwRUM5QzZGNEI2NTVERjA3RUQ0REZCRTlGRTA4RTYxQzc1MworOjEwRTVCMDAwOTlGRUQ3RDlGODdCMjRGNDc2QjdFOEY4RkZFMUM5QTMzMAorOjEwRTVDMDAwRkIyNkRCQjlERjJGOURBNDgzNUZBRDJEM0ZBNjdFREU0QQorOjEwRTVEMDAwMjc2NDdGQjc1OEYyNDkxRjY3QTc4Q0Q3QkEzRDNCOTc4RQorOjEwRTVFMDAwQjVENDMzMTJGRjJFMUJFQjM3NTNENUVGMjgzQkQzN0YyNworOjEwRTVGMDAwQTYwQjA0RTNERkM5NTcwNEU1QjQ4MjI3MTRFRURERUQ3MgorOjEwRTYwMDAwQjQ3Q0Q4M0I2NzA2NUJEMUNGRDMyNDAyMUZCODc2QjI2NworOjEwRTYxMDAwNTc1N0Y0QUZDNzM5ODcyQUYzMjFDNERGM0I1NjFDQzdDRAorOjEwRTYyMDAwNzQ3ODg3MjdDNkZBNDZEODk5N0M5RTJFMzMzRjg1NzAyQQorOjEwRTYzMDAwNUY2RkI0MEI0Q0I3OTgwNDc1REM3RTZGNjVCRjc0RkVEQQorOjEwRTY0MDAwRDg4Mzk2RTE3OEJGMTFFQ0Y5QjFFMEE3RjdEM0Y2MDZDRAorOjEwRTY1MDAwMUZFQTUwMDYxNzRGMEM3QzUyRkM4MjBBOUMyQkIyQkQ1RAorOjEwRTY2MDAwRDkxMkIzQTdFMTNEQjU2NDJGRTM5RkM5MDUwNEZENkI0MworOjEwRTY3MDAwQzMwNTJGQzI2M0JDM0QwM0U3Qjc4NUM3Qzc1RDNCQzY3MworOjEwRTY4MDAwRTI1OTg3NjVCQkYxRjczQzUxMzkzMTE2RTAzQTlBODQ3QgorOjEwRTY5MDAwNUYzNUE4RTJBRDE0M0NBOTc4ODVDQTYzOERCRDMxQTA3MQorOjEwRTZBMDAwMzk0RjI3NzIzRUVDODJGNzI2NTRGNURDNEYwMDBGODg3NQorOjEwRTZCMDAwQ0E4MUFFQUJDRDlBN0NGQTMyMTc5MTU0NzIyMkQxOUJBQgorOjEwRTZDMDAwQTZDOTc3RjVCOUFDNzA4RUVBNUFFMEQ2QjQ1M0YwNEVDRAorOjEwRTZEMDAwODlGN0MzOUY2NDU4QjcwQkRGM0RFQUMwRTczMzVDRjBBRQorOjEwRTZFMDAwMjNERTAwNUYwMzNCRjIwMkJFOUY3NEJERjM3MUJEMDVFNAorOjEwRTZGMDAwRTE2QjZBQkM1MUQ2REJENkJBNEVBRjcwMjMyRjNDQkI2MAorOjEwRTcwMDAwODJDRTk3RjI4NTM5RUIzMkNBRDMxMEVFMkUwMkU3OEIxOAorOjEwRTcxMDAwNzMyQkNDRjhGRDYxREUzRUYxRDk1OTc4OEYzNjcxQjU5NworOjEwRTcyMDAwMUJFREI4ODlERUIyQjdFMDlFNEY2Mjk5MUJFRjE1Q0NBNgorOjEwRTczMDAwQUQxNDA0QjBGNzUwM0U4M0VEMzZBRjcwNjFBQUVDQjc2QworOjEwRTc0MDAwOEI5NjBCQjZFODNCRTNGMUU0RDc1QTdCQkJFNUQ3NUE4RgorOjEwRTc1MDAwN0IwQ0Y5NjUzMDdCREUwNkJGRkZFMjNBRDEwRDc4QjE2NAorOjEwRTc2MDAwQUFCMDAzREFGRDM2NTRCM0ZCNkU4N0VBNThEQ0REODZDNworOjEwRTc3MDAwRTk0QzhFMjhFMzVFNzlDRDg5RjJFMjhBRjJGQjU0QkM0MworOjEwRTc4MDAwNUZBNjRFQzE3ODgwMkY1MzgxQ0Y2RUIzRjk5RkI3QUI5MAorOjEwRTc5MDAwRjhFNTg2QkFBMTE2RkVGRUIyNDZGRUQwMUYxN0RDN0Y1MgorOjEwRTdBMDAwNDBERjlDMDA3QUQyQTBCNTUyNEZBNEZCMTc2MUJFNjQzMworOjEwRTdCMDAwNUU3OEIwQTUyN0UwQTlGRjdENzhBN0Y0REFDOUNGRDJBQgorOjEwRTdDMDAwNjFGRjE0M0Y5RkUyMDc1NEM2NTFGQzg0ODJFMERGNkU3NAorOjEwRTdEMDAwNTdGMUE5RDY3RTQwQURGRjRBNzQ5ODMxNEUzNzRCNjQ0RAorOjEwRTdFMDAwNzFCQTJBMzk0QjYwMUY1NzgxM0U0OEYxNkNENTI5MkJFRAorOjEwRTdGMDAwQzI2M0Q1NTc4Q0RFRTgzQzVGODU3MTBFREI4NzIxRkU1NgorOjEwRTgwMDAwMjhGMjk0Q0U3M0UwQkIyNDNBQ0Y1MjQzNTNCQUZBOUQxOAorOjEwRTgxMDAwNTJENTNDRUI2RTNFNEY1RDFDMkI5Rjk3Njg5NzcwQkVBOAorOjEwRTgyMDAwOERDNEVBODE3OUQ1MUEzRDI3RkQyMDY3QUY1OEQxOUU2NgorOjEwRTgzMDAwRDdFOEJEQzMwMkVGQ0QzNjkyM0IyQ0YwMEU2REI1Q0RCRgorOjEwRTg0MDAwN0YxNEY2NDNFQ0Q2RTQwMDNERkI1MERERTBCRTMwREY0NAorOjEwRTg1MDAwNzhGRUQ4MjY1QkNFMzFBODRGRDdGNzQ3NDg0N0JCQzJEMgorOjEwRTg2MDAwRDc3RUVEOEVBRUVGMjY3RURDRjdBMUZFMzc1OEZGNUYzOAorOjEwRTg3MDAwQkVDOUZBNEJFMUY3NjczMDAzMzlFQTUzMDJFN0JCN0FDNgorOjEwRTg4MDAwQkMxMkVBMEU3QzAxRjE0Mzk0N0UzMDZFMzM5MDRFODJDRQorOjEwRTg5MDAwQUIyODlDMkEwNjMwRkMyMjczMDlGRkZEMzk1QTNDRDg2QworOjEwRThBMDAwNjZGMzM1QzA3QzE0QkFCQjA5N0M5QTYwOUQxQjZEQkVCMworOjEwRThCMDAwNjY0ODYxMUU3MDBGODRGMjk5Q0ZCOEJDN0FENTY4ODgxQgorOjEwRThDMDAwRUE1MTQ5NDk4QzVGMzUyNTEyOENBRkQxRkJDOTEzRUQ1NAorOjEwRThEMDAwNTNGRTAxRUQ1MkZCRjgwNTU3RkY2Rjg0RTc5MkUzQTY2NAorOjEwRThFMDAwRjAwQjYxNUM4NDcyMEY3NTMxRjg3MzIxQkVBQjQ2NkUxQworOjEwRThGMDAwRDBGRTlFMUQyRDFDQUE2RDNFODcwM0ZDMzgzOUVDM0REMQorOjEwRTkwMDAwMzlDMDJCNzhGRkVEMjZGMEU4RTA0MDc4Rjg1MzIwQjVDOQorOjEwRTkxMDAwQ0IxNDVGMDAyODU5QjNEMjAwQ0U4RDY2NkYyQUY4OTVDQworOjEwRTkyMDAwNzY5NzMzMzgzNEJFQzNFMEIwRTdBQzAxRjFGODM5RDJBMgorOjEwRTkzMDAwMEZFOTJFRDNEMEZDMjBGNDRGRjk0Nzc3NThEN0E4QTY3QgorOjEwRTk0MDAwNkEwMUNFQkYxRDhCREMwNkUwQjM1RDlBM0NBMkUxRTYxNgorOjEwRTk1MDAwNzhEQkQzODFGQ0RFN0Y4QjgzRURDMzUyRDg4N0MxQzdDMAorOjEwRTk2MDAwOTg3REU2MjY3OERCQ0Y5MUYyOERFMDNFRDg5MUQyN0U3RAorOjEwRTk3MDAwRkU0MkYxNkFCODQzODU1N0VEOEQ5QjEyRjhGRDQ5N0Q0MworOjEwRTk4MDAwN0ZGNDNDODRGRTgzMDM3QjRDQzg4RjRBNzZCM0ZCQTJBMgorOjEwRTk5MDAwMjVGQkNGRTNCOUJCNjRBRjA5OTEzMjZGQUY4NUREN0I1NworOjEwRTlBMDAwQTg2MUU1NTdCMjYzQzcwMTc4RTE5NzhGODE3Q0E4N0VBMworOjEwRTlCMDAwQzRBMzk1QkIwMTY2QUZGNDM2QkI3QTg5NTFCRjZBRDI1NgorOjEwRTlDMDAwMDQ3NjhGNjAxNThGNDc1MkZDQUIwRThFNjc0OUREN0M1NQorOjEwRTlEMDAwNUU5MDJCNDlGOTA0RUYxMzM4NkMyQ0FFQjBGNTdEMDEzNQorOjEwRTlFMDAwNDZCNzI5QkM5RENCRTUxNjAwREVGQUZCMDMyOUYwOUU1NQorOjEwRTlGMDAwMzRGMzhGMjNCRTg4MDZBQjA3RTQ3RTUyODFBRTlFQUQxMgorOjEwRUEwMDAwMDBGREFGMjlCQUZCMDZGMzFERENGRjZBMjQ2OUMwNDc4RAorOjEwRUExMDAwQUEyREIxRUYwOTdERTY1MEY0M0EyQjlFRUIyNDNFQUZEMAorOjEwRUEyMDAwQzM3NjIzN0JFN0M1NkVDNjc1MkY0OTI0NDk4NTk4OTcyMQorOjEwRUEzMDAwNTA5RUVCRkI2OUMxMkJBRjQxNzMwRjI1QTlDMEFBNzk4QQorOjEwRUE0MDAwNjcyMUM1RDc0MTkzRUYzOEEzQjNBNjdFMjc3RjBGNEQyQgorOjEwRUE1MDAwNzk5N0EyN0U5QUYyNkU2NTk5OUE3Q0Y3RTU3NzY4RUFEMworOjEwRUE2MDAwNjc1MDg0NTNFNzdCQUUxREE3QTlERkJCNzI4QTI2N0Y2MAorOjEwRUE3MDAwRUJDNkZCMzVGNUZCMDY2NzZCQ0E2RkRCNTFBQzI5MUY5NAorOjEwRUE4MDAwNTBCRDQ0OTNCRkJERjYzMTREN0QzMThFOUVCRDg3QzNEMQorOjEwRUE5MDAwNTk1NEY0NkNGQjEwM0ZERTNCQjI5QjA1OTNFQTNDRjcwNAorOjEwRUFBMDAwMkNBRjk3RUQyODQ4MDNGRkY3NkFGQjk4MzQzODZGMUVBOAorOjEwRUFCMDAwNEUxQ0U2MENDN0U4NTc0OUJGRUQzOTZDQjc0M0QwRDhCOAorOjEwRUFDMDAwNTc3M0I4RkRFQ0NBNDFDQTQ1RTBGNzU5MUNBMjc4ODBEQgorOjEwRUFEMDAwQkZCRkM5QkZEQkMxRjVBOTU5NkVBOENGREZCNTkwM0M1OAorOjEwRUFFMDAwQjg4RUU5MEUzM0RBQzVGNEZEM0ZFQjcwNkJFQzc1OEEzNgorOjEwRUFGMDAwNUUyRjFBM0NBRTQyMjEzRUJDM0U2QjI3QkNGNjdFNDdFMQorOjEwRUIwMDAwRjAzQUExOEIxNzUyQ0U2RkZBNzY1NzFEQ0M3RTRBRjk5OAorOjEwRUIxMDAwRUQwN0MwMEY1QkNFNjlBNDQ5RjRFMTM5RURCMzJCMDFEOQorOjEwRUIyMDAwMDJGQzk0QTBERTEyNEYwRjUwQzYxNzA0REY1RkExMUYzNgorOjEwRUIzMDAwM0QzRkY1MkQ5RkM3Q0U5OTA2MkZERUQ3OEE3NzdFQkI0NgorOjEwRUI0MDAwQ0FENzFGM0RCRkU1Q0ZDMEZENDgzNDZBRTBGNEI3MTYxMQorOjEwRUI1MDAwM0FGNzZBQ0U2RkFCMTM4N0UxRjk2REI1RUM0RDZCQ0YyOQorOjEwRUI2MDAwRjlFRDZGQzA5Mzg2MDJEQ0Q5QkVCNkVDQTdEMUUzNjY5RgorOjEwRUI3MDAwRjczQ0I1RkE0QjZCN0Q5QkNBM0ZCQUNFMERBMEM3MDlENworOjEwRUI4MDAwQTA5NzI1MzFGRDdCMzc3QjBGNDAxOUI3MURGQUI2RTRGRQorOjEwRUI5MDAwNkM4N0JFNkQyMjlFQjU5Mjg4RkI2NTc1MzJGRDdBQTlBMQorOjEwRUJBMDAwNDVGQzU2RkE3NTkyRjMxQkM4QkZGNzY0MEZDNkZGQkY0QQorOjEwRUJCMDAwMzc0MTI0RjAyRUNCQjU4MkUxNzg4RjNBMUUzRTdFQzBERAorOjEwRUJDMDAwRUQyRkVGMzkxOTdDREJCMjVGQkNCN0EyRThBNkY3MkZCNworOjEwRUJEMDAwREUxQkNCRTIyQ0E3RThERURGMURFMTY0NzgzMDk1QTdEMQorOjEwRUJFMDAwMTQ0MDY4ODdCOEZDQkExREUzRTUyRjhGRkIxMDdGNkZEOAorOjEwRUJGMDAwRDJFNTlBQzE0MzAyRjg3QkMyM0NDQjIwREUyNjYwQjM0QgorOjEwRUMwMDAwQTM3RDZGQ0FEOEExNDNDQUVEMkEzQ0UyQkY4RjJDRjc3RgorOjEwRUMxMDAwOEQ3NzFDNjBCRjk5QjJBQjY3NEFDMDE2MUY3RkE2RjIwMgorOjEwRUMyMDAwRjUxMTI5N0MwQkM2NTNCRjc5MTE3RjVGQ0Q5NDNEQkQ5MworOjEwRUMzMDAwNTM5ODdENTExQjlGQTZCN0ZCNEM1OTVFODJGOEE2RTQwMgorOjEwRUM0MDAwMTc0NzA4QzZBM0I1RTQyNTc2REY3ODcxNDRDMkY4QjU0NgorOjEwRUM1MDAwNkVDRTk2RjhGNkY0OUJCRDlCRDY1RTc4RUFCRjJCRjA5RAorOjEwRUM2MDAwN0M2RkVDNDU3NjZGREUxMjVCREY1OEUxMTQzNDc2MjQ1RQorOjEwRUM3MDAwRkRCRDk1NzhGNzMxRTZGMUZFQUYxNThDQzBGQkY3NTM3QgorOjEwRUM4MDAwOENFRURFRURCMTUzMjk3MEFBQkY3MTNFMDFGOEMyN0U1MQorOjEwRUM5MDAwQjgwRjEzQTNGRjg3OUM4QzlGRURGNzdFOTIwNDY2RTk2MworOjEwRUNBMDAwNkM3MzUzMkVFMDdGMzZCNzgzQzc4OEQ3NUYwQTc0MzRGRQorOjEwRUNCMDAwM0E1MkYwOURDNEVCM0ZFMUQ0QzZFQjE3MzgxOTVGRDE0RgorOjEwRUNDMDAwQzdFQkI3NzVERjY4QjIzMUI2N0M5QkMxRTE0RUUxRjdBNworOjEwRUNEMDAwMjFEMEVCRDJDRDMyQzZGQkNEQTc3MzA4ODBGRDZEOEI2MgorOjEwRUNFMDAwOENGNkI3Rjc2Rjk4MDhGODQxQ0U2RjkyN0YwOUYxNjlGQgorOjEwRUNGMDAwNDU5QjdCNkU3RTk2RTY4QkM2OUFEMDZGMzM3RjBCN0JFRgorOjEwRUQwMDAwODc4NDhDQjUwNEMxMkY1QkI0RTVEMTU0Nzg1N0ZDNTM4QworOjEwRUQxMDAwNEFCNzhCQThEMjM0N0ZGMzczMTgwRkYzRkVEOUE3MzEwQgorOjEwRUQyMDAwRkVGQTIyRDAzM0ZENUVGNEQ1OTNEMzAxRkU3QjhDOTVBMQorOjEwRUQzMDAwQjcwREEyRTlBMjlEODJFNkZFNDQ3MTk1NDU5MzU3RTI4NAorOjEwRUQ0MDAwRkU5NEZEMjM0MkY0NUU4NTlCQ0E5MTk3OUNEQUZCNTNBNworOjEwRUQ1MDAwODNBM0ZFQUU5NzlDRThFRjBBNjM5QzdDQzkwNDc2N0Y5MAorOjEwRUQ2MDAwRUFEMDM5NzY3RTNGRDI4QkM1MDU4NkM2REU1QjM4ODgxMQorOjEwRUQ3MDAwQUU2MzZDMEE3QkJGNDUxRjQ3NDhDMDM5MDZFRkFCRjA1NgorOjEwRUQ4MDAwMzhERkIxMUY0QjJERjc1QzU4QjlENzk2QUZCQTNGRjBCQgorOjEwRUQ5MDAwRDY4QTMyREM5N0IxM0Y2Mzc2OTNCMTE5MkNFRTNENkU4MworOjEwRURBMDAwN0M2MTVBQUI3QjAwN0Q0MDZFQjY4QTJCOENERUVGMzlERQorOjEwRURCMDAwMUQwQjZGMEVFOUU4RkFEMDM5MTY0NzM4RUYxODdCM0Y4NAorOjEwRURDMDAwQUIyREJFRjkwMTlGRjdGQjY3RkIzREYwNkIwQThGRjc5OAorOjEwRUREMDAwMEIxODE3N0ZGRkM2REQ2QkYwN0QxQTlGNDAyMDlFRjM1NgorOjEwRURFMDAwRkM4REQ4RjdDODUyOUM4QURFRTQ2RkI5NkYwM0ZCMzMwMQorOjEwRURGMDAwQjU2MDQxNEIxRUM4RjIxRURGMjM5QUZCMzhFREU3MzdBMgorOjEwRUUwMDAwMzdFNzI3NEYzQUQ5M0Q0QTNEN0ZEN0UzRkRGRjI5RkUzQgorOjEwRUUxMDAwM0U2NUVDOTE3NEI4OUY0RkQzOTdGMDlFRkUyRUM2MUZBRgorOjEwRUUyMDAwRjU3NEFFRTdFNzMzNzQ3QzMwQ0FDNzBEOUE3OEUzMTlGRQorOjEwRUUzMDAwQzAwNzg2QUFGOUI5MTFGOUZDRkYwMEQxRTdFRENCMDBCNAorOjEwRUU0MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QyQgorOjEwRUU1MDAwNzk3QzU0RDVGNUY4N0RGM0RFMkM0OTY2OTJDOTY0MTJBRAorOjEwRUU2MDAwQjIzMzYxODlBMDg4QzNCRTQ1N0QwOThCNTEwODBFQjhCNQorOjEwRUU3MDAwQTE4MjRFMDIyMTZDMjE4MTZBNDU2QkJGMTk0OEMwODA3NgorOjEwRUU4MDAwNjA2MzVEOEE4QTc2QTA0MUQxQTIwRDg4MzVENkEwMTMzMQorOjEwRUU5MDAwQTUwODZBMzU3RUM1QUZENjJBMEQ4MjA4ODgxMjQxMkQ5NQorOjEwRUVBMDAwNkRBNUZDQ0UzOUY3REVDQ0JDQzk4NEE1QjVGRkZDRTI2QworOjEwRUVCMDAwQTdCRERDNzdGN0IzOUY3Mzk3MDkxNDMxOURCOTE5MEI4MAorOjEwRUVDMDAwMENENzgyQjUwQTYzMUJFRDdFQjMzMzk1QjFBMUY2NjAxMgorOjEwRUVEMDAwNEEyMTYzQUNDRUI5MjFDMTNGODBCMTk0MTQ3NkFCQ0Y0NworOjEwRUVFMDAwQ0VEODY5RkNCQjNDOUM3NkQ4OEJFMkIwRkVBRkUyRkM4RQorOjEwRUVGMDAwNzZFNzMwQThGNzU2NjYxMTRCNjQ2Q0M4REI0RDhBMUY2NQorOjEwRUYwMDAwRUExRjUzRDhCNEE2MThFRDRFQzU5OTE4ODNGQTVCQ0QwNQorOjEwRUYxMDAwQkM3QzJCRDYxQjEwMkVDRjc0MTY5RThBODM3RUI3RDk0RAorOjEwRUYyMDAwMjA4NTdBOENEOTlDMDdGQUMxQkM5ODg5MjVBOThDOTUzMworOjEwRUYzMDAwMjhGRTRDMUNCN0QyRDY3RTVGMjk5NDJFRENGREJEMDU4MQorOjEwRUY0MDAwOEFEODQzMTY3RkJBMzYxNEQ2OTM2OUYxNkVDQ0VCM0E2MQorOjEwRUY1MDAwNkUxRjI3MUYzNzZENDkxMURCM0Y4NDMxQUI4RDA1RTJGMgorOjEwRUY2MDAwMDYzM0E2NjgyQzYwMUU4Q0UzRjg5NzlBQTBCRDM2OERGOAorOjEwRUY3MDAwQjE1NTAwOEYzRDMwMzdBQ0NGRkFBNTlCNTgxQTYzM0Y4RgorOjEwRUY4MDAwQjEzMUZBMEIxNDMxOUMwQzBCN0MxNjFGQUM4NTcxNEUwMQorOjEwRUY5MDAwMzFGRDQyNUNGRkJGOTg3RTExQ0VFQjEzQTYwRkMwQkNDMworOjEwRUZBMDAwMUNCNzRFQUM1MzMzMzFGRjk2MThGMDI4NzcyQTdDMUNERgorOjEwRUZCMDAwRTZDQkY3MzkyMDVGQzRGQzkxRjA5MEE5Q0ZBOTUxQkRGMQorOjEwRUZDMDAwQzI4NzZGQ0M2RDg3RjJDRkY3REQ5NENCMjBEREYxRDAxNworOjEwRUZEMDAwODhBNEY2MThGNTY1RkE4QjlBNkFFRjM4Njg3QTZGOEQwRgorOjEwRUZFMDAwOUZEMjI0QzY3NDlDQ0Y5QTlBMzlERTcxN0QxODczNDJFMQorOjEwRUZGMDAwMUVFNzU1NkVGMUU1Mjc0N0Y0MzNDNDk5Q0MxOEFDMjdDQQorOjEwRjAwMDAwNzFENEQ2QjY1RTQwMjcwNzU2QUI0RUM1MDMyOTMzMTVEQgorOjEwRjAxMDAwNjNGQkZEQzFBNEUyNkQwMzc4M0JCN0ExMUQ5RkE3MEE2NgorOjEwRjAyMDAwRTRDNTdBQzNCQUVEREEzRkRBMDVFQzRFMzM1QzJGQTNDMAorOjEwRjAzMDAwN0VCQjVCNjdCOUMwOTM4NTc5NkREOERFRjJEOTU1MzY1MgorOjEwRjA0MDAwRDYwQkZBNTM3NDI3RTYyNTNEOEM4MjExOTAxRUVFQzEzMworOjEwRjA1MDAwNEZBMzYwNUNDNTdGQUI5M0RBRTkyOUIyRkM3NDFFOEVDNgorOjEwRjA2MDAwNUY0Qzc5MzkzRUNCNzYzMTk2RDEzREJDOThBMkNGQzI2OAorOjEwRjA3MDAwN0UwRTMxQkQxQ0QzNjY0QkUwMjIyN0FDQjczOTlFQ0Q0NgorOjEwRjA4MDAwODk0NUNGRjMxMTdGQjA5RUZFNEU0MTJGQ0NFRTNDNzhFOAorOjEwRjA5MDAwOTExODBGRTZGNzY0ODJCRTEwRkIzOTY2RjM1NTYzN0E2OAorOjEwRjBBMDAwNTk1NjQ3QUQ4QTc0MTNFNzE0RjVEQjE5RTIxRENBNkY5MAorOjEwRjBCMDAwQzc3Mjk2REVDRUFFMDY3ODVGMDY5MzVEMDVEOTk3MEZEMAorOjEwRjBDMDAwN0RDNjNDMDBBN0M0OEUwM0NDMDNFMzI3MjJGRTYyQzBBQQorOjEwRjBEMDAwMkQyMTk5QzNFRDBGOEMxNUM3RTYzQjRFNjcwMTMxQ0Y0QgorOjEwRjBFMDAwNDZFMDE3OTMzQkNDMkY0RjQxQkIyRDAzOTBFRkZDODJBMgorOjEwRjBGMDAwRUZGNEFCNTAzRTM0RkVEMkE1QUM4MkYyNUVCQUM3ODRDOAorOjEwRjEwMDAwRjRFMTZFNjM3QTEwRTEyMUUwMkVGQkZGQzQ2OUExN0U3OQorOjEwRjExMDAwOTEwRjk1MzNGMEUxNDNFN0M5ODc4REJGOUM2NDhBQzNBMworOjEwRjEyMDAwNzlERUM1QkM3RDNENThFRTU5NjY4M0ZDMTM4QjlEREVCMAorOjEwRjEzMDAwNTU5MEVGQkQxQTA4MERFQUU3MkM4OURGQTA0MkZEQTAyQgorOjEwRjE0MDAwRTBBNzlFMEZCMjY1NzE1MDNCNkY1RDg3ODZGMjYxRDI3QQorOjEwRjE1MDAwREQ2RDlBMERFQUU3RDVCNTZCMjg5RjVFQkFFQkQxNUMwMQorOjEwRjE2MDAwQTRBQkMzOUY1RkE1M0FCMEZGNkY2NEZGMDAyMEUwRjczOAorOjEwRjE3MDAwMzE0RThFNDMzNkIyQjQyN0UyQTcwOUU3OUQxQUMxNTczNAorOjEwRjE4MDAwRjFGRURGMjJCRjVGNTZERDMxRDYwQUQ1NzI5NzMwMEQxMgorOjEwRjE5MDAwRTVFNTYxQzVGRkVCOTRERUQ4NkZGQ0I0RTAwMDQ0MkZEOQorOjEwRjFBMDAwQTdCNzk3MEUxRUU5NUYwNkY5RUQ5MkRGOTVBMjRDOTY4MAorOjEwRjFCMDAwQ0U1ODQxQTM5OUUwNTlEMEY4RDAyRDA4RUY4MkM2MkI0NAorOjEwRjFDMDAwMzQwNUFBM0NBMTg1MTQwREQ3NTlBRDZCMDFDOEJGRUIxRQorOjEwRjFEMDAwMzREM0Y4ODczRjlGRDc1M0MxRjlGRUQ5Q0FGQUM2ODAwNgorOjEwRjFFMDAwRUY5QkEyRkYyNjgxRTc5NzJEQjFFOTc2NjdBN0RDRTFDNworOjEwRjFGMDAwRkMzNDg2Mjk1MkJFRUU0NDNBMDRGOTlBRDgxQkUwQjE5OQorOjEwRjIwMDAwRjBDRUUzMjQ1RjlGNzI3QTY4RkMyN0I0QTY5RDk5MzQwMAorOjEwRjIxMDAwMkZFNjBEQzBBNzc5OUJERTIzNzkyRkM3OTFGNUU2NkYwNgorOjEwRjIyMDAwNUVCRjAyRUI2NURGRTYxQ0E0N0FCMDVEN0IxQ0QyQ0YyQgorOjEwRjIzMDAwRjc3MTFDNUZERkRGMTkxRjVDQUExMEZEMEZGMjVEMUM2OAorOjEwRjI0MDAwODMwRjU5Qzg2QTRBMjcwQ0Q4NzhBQURCNEMyMzAxQUYzMAorOjEwRjI1MDAwMUQxRDg1MjhGN0EwQ0I2NUM4OTc1NzI1N0I2ODFEQjI3MworOjEwRjI2MDAwRERGQTBFNjczQ0YyQ0JEOUY0QzE0MTgxQ0Y3M0E1QzM1RgorOjEwRjI3MDAwMzc5MkI5REMwQTc0RDU5QjQ3MTE1RUU3QTEzNzNCODQwRQorOjEwRjI4MDAwREUzQ0YxNkZFOTREQTEyRkE1RkU5NEU1NEEzMkM3RTdCOAorOjEwRjI5MDAwM0RDRTZFRjVBNjkyM0NBQ0FCREU3NEIzRTBCRDAzNjEyRgorOjEwRjJBMDAwM0RFQ0E4QzlCQjkxNzUxRDM3MjBFNERCRDE3OEREOUExMAorOjEwRjJCMDAwMEM2OTgxQzI3QzM4NkVFMkQxQ0Y5ODEyMjE4NzE2MEI3RgorOjEwRjJDMDAwQkVERTJBRTlDMEM1NkU5RDEyNjMxRDk1QTIzRkQzRjQzMAorOjEwRjJEMDAwMEU0QjNCRjZEM0EyMTBGRDc3NURBRjg1RUE4MTVDRUM2NworOjEwRjJFMDAwODFGM0JFQUMyN0M4NERBNUFCREM4QzgxOEY1Q0FDOUY5NQorOjEwRjJGMDAwRjVCNkZFM0ExMkM5RThFNEM2MDQ0MEZGOTlGMEQxMEIxNgorOjEwRjMwMDAwRUJGRjJBNEVFRjhERUI5M0YwMUY3QzVBQkRENTM3QTA1MworOjEwRjMxMDAwMkJGQzJGMTQ3MEJFQ0NBMUY3Qzc3NjdGMTM3Q0Q2MURCMworOjEwRjMyMDAwNUU0NjI1NzM3QkU2QUE2NDhFOTdBRDBFNTEyRkNFNThBQworOjEwRjMzMDAwNkY2NjMyODc0QjQ1QjI5MTJGMjNGMDM3MkEzOTg2REQyRAorOjEwRjM0MDAwMjNFNUYwRDE3ODVGMDE5NkZGRTFEMEQ2MDRBNDIzODlBQworOjEwRjM1MDAwMjcyOTdGQTJGMTE1RTZCM0E1MzQxRUMwNzkzQ0I2OEZFQworOjEwRjM2MDAwRDYzRkIyN0RCNDFFMEFCNzBGRDBCQ0Q3MjMxRDIxQkYzNAorOjEwRjM3MDAwMjExRDc5Qjg5RTU4M0YyMDNDM0Y0OUU3N0VCMUNFMUYwMgorOjEwRjM4MDAwRTJGNTI5MDhCRkU4NzkzQThGOUE5NDMzQ0QzM0I5QzNBRgorOjEwRjM5MDAwQUQyMEZGMjdFQjRFNEE1RjNFNjQ1MjcwNUVDRTBFNERBRAorOjEwRjNBMDAwQzE3OTM5ODU3RThDRDY4MzIwMkUwNDVDNzkzRjZGMDgyNQorOjEwRjNCMDAwQjlCMUUyQUI5OUU5ODhFNzE1ODVGRUY0NkFBODNGRDlBRgorOjEwRjNDMDAwQTFDRjQyMzhEQ0UzRDRDQjcxN0VBNTBFN0QzNkU2NEY2QgorOjEwRjNEMDAwQzU3MUZFMUY5NUFDQ0ZDMUVGQzlDMjhFOEE5RTY3QjVCRAorOjEwRjNFMDAwQzAxRkMwQjMwQUVCMjU4RTYzMDFENDg3OTc5RkI0MDc3MworOjEwRjNGMDAwNDFDNDAyMDg2MERFQTAxRjEyNzU2NzExRUFCMUM0NzUyRQorOjEwRjQwMDAwQ0M4Qjc0OUE5MkQwRDE2QTg1N0NDNzQzQ0NCQjAxRjI3NQorOjEwRjQxMDAwRjkwMThGQzk4QUZBRUQzNjdEMTlBNjJCQkU1MkM5RUVDNQorOjEwRjQyMDAwNUM1MUM4ODJDQkE4MUY2RTg3QjJCQTVFNDFEMkRGQzBFMgorOjEwRjQzMDAwNkY5MUY0QkE0Q0MwNzk1OTMyOTc3MzYwODdENDI0NzNCMgorOjEwRjQ0MDAwN0U1QTlBMUM2MTg3NDgzRUVBQ0VBRTg4RTBDM0ZBRjM0MgorOjEwRjQ1MDAwRTRDMzVGRTA3OEU3QzE4NzBGMDgzRTdDRjA1Q0Y4RjAxQQorOjEwRjQ2MDAwQjEzMDFGM0U4QUY1Q0ZDNjg3Q0YwODNFN0NFMzJDN0NBNworOjEwRjQ3MDAwQjg1QkMwRUQ1RDUxM0YwNjFGM0UxMzhCMEZERDgyMUU1MgorOjEwRjQ4MDAwMjRCRDIzMUZBMkJFMEYyNTc3Q0FDRkRGQzVBMkY3NzMwNQorOjEwRjQ5MDAwRTBDQkU2RTQ3M0IwMEIzQkZCM0I0N0ZBRUZDRUZFMUI0MQorOjEwRjRBMDAwRTMzQUIzRkRCN0M3RUVBNEY1NDg3RTA2N0U3OTMzOTlGQgorOjEwRjRCMDAwRjQ4RUZFMTZDMjA1RjhFNTZEQ0UyRkIxRjlBQjUzREYyMQorOjEwRjRDMDAwNzQ3MDM5QzE1ODQzMDJEMjhGOUNFN0U3MDJBRjAwQUY5NgorOjEwRjREMDAwMEZCMDFGQzk2N0QyNEY5MUYwRUJBNDA3NjFGNzFFMTU1QgorOjEwRjRFMDAwNjk2MkM3NjcwQ0U1MDJDMDZENkYyNEJEM0UyNUY4MjUzMworOjEwRjRGMDAwMzA5MjExQkY4MDQ3NTU4NDc2RTU0QjQ3QzE4RTQ0QUJBRgorOjEwRjUwMDAwQ0ZDNUU3NUJCMEI2RUQ3NTY0NzVBNjM1MjQ0Qzc1NzQ1MAorOjEwRjUxMDAwMEZBNzIyMTdCNzczQkE4MzEzOEM3RjJDOTYzQzZENDFDQgorOjEwRjUyMDAwQkNEOUJCREFGM0QxRjhGQTQ0QUNDN0U5NTJDRTg4QUYwNAorOjEwRjUzMDAwQjNDRDQzQzIwRkU3NzEwOUNEQzM2MzVBMTVBMUU3Q0QxRgorOjEwRjU0MDAwMkU0NUYyQjdFNjgyRjRGMjcxMUQyQUEzNzk4NTEyQzAyNgorOjEwRjU1MDAwODVFQTk0QTcyQzFCREEwRkVEREFERTFFNkU2Rjc3QzFGOQorOjEwRjU2MDAwM0MyRkQ3QTFGRDgwNzA3QjE4OUZFNDVERUZEQjQwOUVCMAorOjEwRjU3MDAwOTE5REFDOUI1MDNGQURDOEUzRjQxMDRERjc4RDY4M0ZCMworOjEwRjU4MDAwMEM4OEMwNTc0MzI2RTFFQjNFOUIzRjEzRkI2RkQ0M0NGNgorOjEwRjU5MDAwMjZCNEVCMUFFQjlENEE4MEYwNTgxRDhGRjQ2M0I3RUI0RAorOjEwRjVBMDAwNDRCNzMxRTQ5MEM3NzU3RTcyQTg4RjhCQ0JBMUJFQUVGNQorOjEwRjVCMDAwNzM5MDQzMDM1QzlENzJFODIyQUNFRjNDOEIxQzFBMjNEMgorOjEwRjVDMDAwRUExN0I4Qjg3Q0U5NEUwRTVEMjZFQTE1MDlGOEM2OTAzMAorOjEwRjVEMDAwNDM2MzVDMzFFQ0I5NkQzNjlERkE4REMxQTc5NzYzRkQyRAorOjEwRjVFMDAwNENBN0FFQkJCODVFMkI3NDQ1RTgzNTY4MzcxNkYzRjcwOQorOjEwRjVGMDAwODlGNkFCMUI0Q0ZEQzg3RTY2RjFERTU4N0U4NkNGNjU3MgorOjEwRjYwMDAwMzdEODI5OTcwQUZGODFCNUZDRjNGNzc3MEQ2N0FDMEE2NQorOjEwRjYxMDAwOEJGODNDN0RBRUQ0QjAzRkQxRDhGMDU5MUFFMjFGRkUzMgorOjEwRjYyMDAwMEM3MTk1MDc5Njc5REZFRDgzNzg3QjQ3NjU2ODg3M0U5NworOjEwRjYzMDAwRjAzRkVEMTY4NDc3NzM3Q0UyNDA3NjQ5NzhEQ0FBN0Y1MAorOjEwRjY0MDAwMDA0MUE2MDA1RUZFNjFBMjU0RTI3MTYxQ0JEMjIxMENBMgorOjEwRjY1MDAwRkM4OEMyRkQzRkU0QTI1RDc5NkNERjNGMjgzRUQyNjFBOQorOjEwRjY2MDAwMkZGM0UzRjgzQkI2RjMzOEM5ODlCNzY3QTZBMDdEMkUyMAorOjEwRjY3MDAwQzc1RjhDRjg4Mjc5OEQ1NzA3MzQ4NTYwQkRDNzc3NTk4RAorOjEwRjY4MDAwQkNBODZGNTVFNkY5NTUwMUNDQTc2QTk3OTkwNTQ5NEU3NAorOjEwRjY5MDAwMzExQkQ2MzdGM0U5MzJGM0FFMTU2RDZBMjJFNkI1ODAzOQorOjEwRjZBMDAwODg2RjI4QTdDOTlGRjEyNDIxREQ5QTc3QTkwQ0Y5OTBDQQorOjEwRjZCMDAwQjk3OTc5ODBEOTk2OUUwNjdGMzM2OUE0ODk3OTIyRTI0NworOjEwRjZDMDAwMjFDOTdBM0NGMzQ0QzQyNzUyOEE1RDg2N0NBQTJGRDM5MQorOjEwRjZEMDAwNTBCRkM3QjQ1RTg2RjIwQ0ZGODU4NkYyQUMzOTgzMEQ0RAorOjEwRjZFMDAwRjk5Q0VBRDE4NkZBM0RDMURGODlDQ0U3MDVBRTMyRDQ3OAorOjEwRjZGMDAwRUY1RDNGRDU5MEVGREI3MDkzQTFGRTA1NkJDQjBDRTU4MgorOjEwRjcwMDAwRkQ4M0YzMENFNTE1QkI5RkI3QTA1RjdERDFBNkM1ODYzMQorOjEwRjcxMDAwRUYxNzM3REQ2NTY4MDcwMDY5RUIwMzc0MzI4QjcxRjgwQQorOjEwRjcyMDAwNUZEMkJDQ0M1MDdGNTZGQkJDNDk0OEI3ODM0MkFCOEMwMAorOjEwRjczMDAwRUQxQUNDMDczODNDMDMwQ0UxRjkwNUYzNUI5MENFMzRBRAorOjEwRjc0MDAwRDZCMTMzMEJFMEJFMzBBODc4NDM1MDZENkU3MzVFNkY1OAorOjEwRjc1MDAwRTQ4NzJGREYyQ0RFQTUwQzg0NzlBREU1RUQ2NDNGNzNFMworOjEwRjc2MDAwODNDNkZDN0M3NTMzRjE0RjM0OUVBQjU4QUYyNENGNTAyOQorOjEwRjc3MDAwQTQwMzk1MDU5NTMwREVFNzZGMzJCNjY3MThFRjgyNzYwMQorOjEwRjc4MDAwRjNDNTdBQTJFOUUyMEI1NkZENzAwMUQyNDc0MDZGRUI1OAorOjEwRjc5MDAwOTMxNjVFQjc5OTM1MEQwRkUxNzc0MTI3NEU0MTI3NzJEOQorOjEwRjdBMDAwRkQ3MkZFNzJERDRFRjgwRkNCNDFFMTVCOTBDRTY2MzcwNQorOjEwRjdCMDAwMkJFQzUxQTVFQkZBRTZCNERDQkYyMjJCQzYzQTE5MEJCMQorOjEwRjdDMDAwNUFEMERGOEU5RUZGMEU5N0MzN0QzMDAxRkU5MUNCNzIyMworOjEwRjdEMDAwMzE2RUM1QkFGMDg3OURFNEYxRjE3NTZBRDAwQTc0QUQ1NworOjEwRjdFMDAwMDZGQTQ1RjE4NzcxRkREMTcwM0M1RjdFRjEwODM4NTgwQgorOjEwRjdGMDAwRDM4REZDMTJFNzg5OEZBNkI3RTEyMUQ2MTVBRTA5RkQ5RQorOjEwRjgwMDAwOEM3QzI0RTEyOEUxRUFGMDY2QzZBNDJCMEZGQ0M3RTE1QQorOjEwRjgxMDAwQUJCMzFGMTNCRTFEMDhERjhCQzJGMDNENjZGMzlGNDBFNAorOjEwRjgyMDAwMzk3Q0UyQTM2RjU1QTIzQjdGRkIxMEQ0NjNEREU5QTVEMQorOjEwRjgzMDAwNjQ0N0QxREY0NEZENUNBQzVGOTUwMDcyMzEwOUZBRjk5MQorOjEwRjg0MDAwRUM4NzdDRTRCNzRFQjlCQ0E0Q0MzQjBFRTRBMkEyRjg5MgorOjEwRjg1MDAwNTk0QTZBRjg3QjlCQUUzQTg2MDJCRUU2MzdBQjVFRDQ2NQorOjEwRjg2MDAwQzNDNzM0N0JCRDcyMDkyREQzRTM0QzQzMjUyREYxQzZBQworOjEwRjg3MDAwRjEyOEYxQTZCNEJDRkU3NzA1RTAwNTZERkMxNjhDQkYzRgorOjEwRjg4MDAwMTY3QjZEMzg0RkM2QTY1MzlDNTMwMUY3RTY3NDAyRTkwOAorOjEwRjg5MDAwRDlDNDE0RDJCRjNBQTNGOERGNzFFNkFEODVGRTZBMUQ2NAorOjEwRjhBMDAwQkZCRkU4MkNGMTEwNTcwQUQ5MEZGRUI0NzhCNDNGM0EyNQorOjEwRjhCMDAwREE0RjNDODdERDZCNkQ0RTFDNjc4QURGNEZFQjE5ODE5OQorOjEwRjhDMDAwMTMwNEJCOUEzOTAxNEUxMUYxMjI2ODk3OERFMzRFNzlFQQorOjEwRjhEMDAwRkM5NzA5NjgwRkJGNzRFMEI4NEFGQUU1MTMzN0Q5QzMzQgorOjEwRjhFMDAwNEYzMTVGN0Y5NDBGNURFREVCMDBFOTNENjlBRjgzN0ZBMgorOjEwRjhGMDAwRDQzQjg1REJEQjdENTMyMkZEQTM0RUJCRkFDQ0ZEODBFMAorOjEwRjkwMDAwREREMTBGRUQ5OUVFNTJFNTM1OTVGNDY5ODcxMkVGREQwMworOjEwRjkxMDAwMTA0MzlGOEU0QzMxRUFGOTRCQzNGMUI4OTEyOTExRkE4QgorOjEwRjkyMDAwNzNFMUVEMjc3NkUyM0MwMERFNjM3MDlFMEUwN0Q4MzU2QQorOjEwRjkzMDAwQ0EzOUQ5MzU5NzYzM0ZCRjRBNDgyNEJBRUVEOEFEMDZENQorOjEwRjk0MDAwMkY4MDA2Qzc2RDlFMjQxN0RBOTE0MkNGMkExQUU4MTAzRAorOjEwRjk1MDAwNTc4NDNGNkI3MzBERDA4NjYwNzlGRjI0MTZDMzRGOTE5NworOjEwRjk2MDAwNjkxMUQ2NEIwOUU3NUY4QjMzRkFBMzJCMDZGMzc5NEQ2OAorOjEwRjk3MDAwMTFFQjVDMjlFQ0E3RjIxNDZFRTc1NDYxMUMyRTI1MUNEOAorOjEwRjk4MDAwODdBQjlBQzZFM0NDMEY0NUM1MkZDQjUzMUM1NDdGQTUzQworOjEwRjk5MDAwQkRBODFDRDdCRjIyNEYyMUJCNjk4NUEyMThGNjkxNTI4MgorOjEwRjlBMDAwNTMwQUNCNzFCREI3OEFGRUNCQTE2RjFDRjdBOTVFN0M1MQorOjEwRjlCMDAwNUVFRTI4RkYzRDBGRUIwRkMzOTRGNzBCOUNENDFGRTlCRAorOjEwRjlDMDAwQ0ZBMkFBMzFFMTM5MkY0NUM0QjFFMzk5QjRCRjg5NkYwMQorOjEwRjlEMDAwMjYwQUJFOTkyMEU0RTU5NTdENDE1RTEyNzNFOTkzQzYzRgorOjEwRjlFMDAwNDNGOTM4NTFDRUQ0NzU3QkFDNTAzRUYxMDIzMzQzM0FFMworOjEwRjlGMDAwMUI4NzcyMDlFNUJDRDNGQzU5N0JCRkIwOUM5RkQwQUY3RAorOjEwRkEwMDAwN0EwNzhBODcyQkQyRTE3Qjg0M0MyOTY2QkUyQ0E0ODNBQgorOjEwRkExMDAwMkIzREM2RUYxM0Y3NEMzODhDRkMzQTkxNjlENDBGN0QxRgorOjEwRkEyMDAwQ0ZFMzcwNEQ3MDg1RTk3RDU5NEFBN0JDRjc5QzA2QkVBRgorOjEwRkEzMDAwMEVDNUZCMUYyOEMxRjhDMzlGNTRFRjA2NkFENTM2MjRCNAorOjEwRkE0MDAwRDIyRkZCODVDMERCNkFFMUE3RTAzRTEyRkExRjJFOTFBMAorOjEwRkE1MDAwNDZDM0U3MTcyOTNDRUVCMERCRUVGQjA1QzJGMzIxNEJCMgorOjEwRkE2MDAwREI0RjcwQkUyMTRCN0I2RDEyOEVGMzAxQTM3MTMyRTcyOQorOjEwRkE3MDAwRThBRDk4MUZFNkYzMzA4QzEzQUZDODYzNzYyRkQyRTc1QQorOjEwRkE4MDAwMjAxM0M1NDFEQzdFRTczODBCRTREREVCMTRCNDg0OTkyOAorOjEwRkE5MDAwNTk2MzAxQzdFMEIwNUM2ODRFQzkxM0YzQUE2RDREODI4QgorOjEwRkFBMDAwRkE0OUVCQkU2MUJEQzg3RjcwOEU3M0EyMUM5QUM1NjIxNQorOjEwRkFCMDAwQzYzNTlGMTY3NDMxRTVGMTVFMUFGQTYxNDkzNjQ1MEY3NQorOjEwRkFDMDAwQzY1OEM3RDMwMkNGMjAxNzM2RTEzQTJFQjdFRDFCQTI5NgorOjEwRkFEMDAwOTA3RUUwN0UwN0JBQjJGNDdGMDc0Q0MxOEQ0QUQ3RjYxQworOjEwRkFFMDAwNzZGQkQ4RTc5MDBFMjUxRDVGQUFCMkVBMkQ3NjRFNUYxMQorOjEwRkFGMDAwNTMyMkU0NThCM0E0QTc3MzhDNDcwRjlCQzM2MkM2NEQyRgorOjEwRkIwMDAwREYxNzc4MkFCN0Y5NUVDMUY5MEVEQkUzQTFGRDhFMEE5MworOjEwRkIxMDAwMjlFRjY3OTk5ODA2NzQ3OEEzMjBDMzFCRDdCNUZFOUQ3QgorOjEwRkIyMDAwRUM4QjFGNEU5RjU2QTVERENFQTg3Rjg2RkIwRjE1MEJENQorOjEwRkIzMDAwMUM0MURDOEZBODY4QzkwQjUwQkM2OThFNDJGQjI0NTU2MAorOjEwRkI0MDAwMkRFRkY5MzA1RjMxNzRBODkzRTQ2NDgyQTIxQ0VDNDc3NgorOjEwRkI1MDAwMjYzRkUzNzI1MTYzMDcyNUZEQTkwMjQ4RDBGRjM0QTE3NworOjEwRkI2MDAwNjc0MDlGQUM0RTgwNzU1NUFDNUJERjlBMDE0NTdGMDFDNQorOjEwRkI3MDAwQzMwMUYxRkY5MDg5RkI3RkQxRUI0QThCRTdGMDU5MzE0QworOjEwRkI4MDAwMDVGQ0UwNDEyODc2NEZBQ0RDOTE4RDc4QUVCRTUwRjE5QgorOjEwRkI5MDAwODJCMUIyRjRGOEVFNUQ5NzhBQjg1ODI2OTYxRkRGQURCMQorOjEwRkJBMDAwNEIzRjMyOTNBNjExNjIzMDlGQTdFMjNCRjNCQTJEOURFMworOjEwRkJCMDAwRTQ4MUNDMDczMERGODhDQzM2MUFFQ0I1MDc4RUVGQUU4NworOjEwRkJDMDAwMUI0MEY0NEI3QTg5NjkyMDBGMkUwRUYzRkI0N0FBRkZFNgorOjEwRkJEMDAwQTM5RkMxQkFBRjAzNjVCQzY0MzBBNjFBOUI0RTc4NEE5NgorOjEwRkJFMDAwQTc3NTVFMkJENjE5RjgwNzUzMEVEQUMyNzBCOUFFNjU0OQorOjEwRkJGMDAwMzdDMUZCMjMzMzhDMDdDQzYzMkVFMkEwMzFERjk1NDQ2MQorOjEwRkMwMDAwRkJDOTYwM0ZEMDNBQUZCNzM1OEM0N0JEN0VDQ0QyMzEwRgorOjEwRkMxMDAwRDA4QkYxODRFRDFGRTYwNDYwRkM0RjdGN0VDMkMxODA3MworOjEwRkMyMDAwRUVGRUFBNzUzOEYwRkJBMUJCREY3N0U4ODBERjRGRUY2RgorOjEwRkMzMDAwNTY4QjkxN0U2RjExN0E1MkMyMkRDRUNERTlFMTY2QjcxNworOjEwRkM0MDAwOEZCOTUxMUVENjlDMUFFRThGOEMwQjJENDkyNUZEMzY4RgorOjEwRkM1MDAwMzcwODMzOENCMDk3RTY2RjRBNDAwQkFFMzM1RkQ5OTRDOAorOjEwRkM2MDAwNjJDODRCQkQ1NzY5NjVENUIxRTJBMDk3QkEzOUJFRTYwNworOjEwRkM3MDAwNkU1RTZGQzlGMkUwRjg3RTE3OEU3RjA4RjQwQkQyQ0Q2RQorOjEwRkM4MDAwQTE2RDhFMjBGQUVGNzIzRTY1OUIwNzU5RDA5RUZBNkJFQworOjEwRkM5MDAwOEI5NTg1RDAzRkQzREFDQ0NDQ0VFNUE2MDJGNEVBMTcxQgorOjEwRkNBMDAwNzQxOTNEQ0Y5REFGMjQ1MDdGRTUwRjcxMzk1QjBBNjMxNgorOjEwRkNCMDAwMkQwMUI4RkE1QkU2OTIzQzhENUU0N0Y5QTc5RTA5M0Q5RgorOjEwRkNDMDAwMDBERUU1MkJDMTcyRjFGMEZBNzcwM0RFRkM0QkVFRjlCMgorOjEwRkNEMDAwMDZFREQzRTg3NTk2MDY4Q0YyNzU2NkJEMzEyRkU1N0U4QworOjEwRkNFMDAwODVDMDM3ODg5QjdBQjRGM0NCMUI4Q0Y1MkE1QUVFQTVENgorOjEwRkNGMDAwRkUyQjUwMkVDQkVGQjBGRTIxNkU2MTE3MEU2NzIzNTAwNgorOjEwRkQwMDAwMEVEN0RBN0IyNUY5Q0ZBMDY3OEZENjgwNDE5RUNGRDg1QQorOjEwRkQxMDAwOTExQTFCQTU4NzZBMThBNUNDRUQyMTdDMkM2ODc5RUY3OAorOjEwRkQyMDAwQTc0ODM3MEI5QkI3NThCMDlGQkFFMDc4Mjc5MDMzQjNGQQorOjEwRkQzMDAwQjYwMEM3QTMzRDhERkJFM0QwNzQwNkVFOEZDMzNDNkJDQQorOjEwRkQ0MDAwNzEyMjE5Qjg3RkVFMUJFRjA2N0M5OTlENTFGQkU1NjI4RAorOjEwRkQ1MDAwN0REMzA1RkM5OURENDVGNDM1MURENzMzMTBCRjZCREYyRQorOjEwRkQ2MDAwNDZBRUU3RjhBRTIxMzYxQzc3QjI1Q0Q3MDg1ODk3N0FEMgorOjEwRkQ3MDAwRUVFQjkyRUI5MUVCOTNFNTk1MjAzNzYzQzkwNTQ5REZGNAorOjEwRkQ4MDAwQ0NDREY1Q0RBQ0M2MjkyQjMyMDExNEI1REJCRkEwMzhFNAorOjEwRkQ5MDAwMDAxMzdFODgyNkYwQTNEOTU3OTExRkEyMzFGMDMzRjhDMworOjEwRkRBMDAwM0FCOTFGMTI2MDdCNTgwNDlENDVEMzUxMDVDMjAxOTk5MQorOjEwRkRCMDAwRDhDOURCRDk4NDdGRDI0OTNGMkQ2QjA4MUUxMkNGRDAyMgorOjEwRkRDMDAwNjEzQURGQjcwQ0E1RTNCRTI1RDBEMTgxMjgzQTMyRTRGMQorOjEwRkREMDAwQ0IxQjhDRjlBRkNERURCOUM4REY0MDJGMDcyMkUxRkI3QgorOjEwRkRFMDAwNzVENDc5MTk5OUNFNzBGN0UyRUJGN0U4MTM5QzUwNUU2MQorOjEwRkRGMDAwQ0U3QzJCOUNCNEZFMDZFMkMzNDM1QUMzQ0U5RjIxREZDOAorOjEwRkUwMDAwMzU3MkJBRkZBQkMwRkJDNzZFNUYyREUyOUQ2OUZBNDA0OQorOjEwRkUxMDAwOTQ2RjQ1Q0IzMjU0MzdENDJCNURBRDM4OTE5RjY2RDY2NQorOjEwRkUyMDAwMEQ5QTgwN0MzODk4RTlENERGOEM2RUVDQ0I4RDAyRkU4NQorOjEwRkUzMDAwNjVENTY2NjYwMUUzQTBDQ0MzNDhBRTk1NkQ1MzgzM0M5RgorOjEwRkU0MDAwNEVBN0RCNEIwMEJFNzMwNDFFMkE1NzZFQjE2NDQwM0FDNgorOjEwRkU1MDAwQTdCQTgyREIzRDQxQ0UyRjAwNTdCMjdCRTZBRDZFQTUzRgorOjEwRkU2MDAwMzgwMkY4NTEzMUY5NERFQUE5Q0EyNjYzNzkxNTVCNEQ3QworOjEwRkU3MDAwNzhBODhBQjI3RjgyOTIxRUJEQ0M4QkY0RThGRkE5QzMxQQorOjEwRkU4MDAwQTYyNDlEN0RCREFDNkI5Qzg4RTI0OEM3NzdGNTI1N0I5OQorOjEwRkU5MDAwRjhCOEM3RDMwM0VCRjkwMUU3NkQ2OEU3NkJGRTExRjgxQgorOjEwRkVBMDAwMURFMDQ0RkFCMjYzNjk0MjEwRURGRDdEMjdDMThGNDUyNAorOjEwRkVCMDAwMUJENEU5MUY2MTAxQjhCNDdGOUM0MzdBNUNEMkE3NUM3NAorOjEwRkVDMDAwNEY5NTZEMzVEMTY3MTUzM0ZBQzlBNUUwOTA2MUZDQjc0MAorOjEwRkVEMDAwNzQ2MzRBMTBDRjAzNDBGRjAzOUJEMThFREE2ODI2M0I0MAorOjEwRkVFMDAwMjlDMDE2QTczM0EwMzNERjcyMzNDOUMzQjJFNjY0RjI2OAorOjEwRkVGMDAwRDNDQkVBRjhCRTUxRDlFNkU0QTBDQUUzMEY3QjMwRUVEQgorOjEwRkYwMDAwMjJGMUIwQUY2RUFDMjU4M0YwOTRFNzQ1RkRDQjlBQ0RERQorOjEwRkYxMDAwMDZGQTk2Rjg4OUY2NzNFN0Q1QjdFRTRDRjc3NDFGMDcyMworOjEwRkYyMDAwODlDMENGODE2RUYwNzMyMDEyM0Y3QkEyRjBDM0VFNEVFQQorOjEwRkYzMDAwRTE3MjY2RDExRkZCRTIzRUQ5RjFFQTM4QUYxQUMzNkYxNgorOjEwRkY0MDAwOTI3QTg4NjUwMzAxMEUwRkM3MTM4QjMzMzkzRTk4RTYwQQorOjEwRkY1MDAwNEQ0MzdDOUU1ODNEOENGMDE1OERBN0UyN0ZDRDI0N0NDRgorOjEwRkY2MDAwQjA4RjFEMENFM0NDMzM3QUIzNUJBN0MyRjc1QjE1Q0UyMQorOjEwRkY3MDAwMUYzMzZBQUYyQzQ2N0RGRDk1OTAzM0VGODI3Q0QyMkRFNgorOjEwRkY4MDAwOENCRDA3RjI0OTA3RjlGNDNFQzgyRENDN0Y1MDkzNEU0MworOjEwRkY5MDAwRjkwRjZCM0M5NEZFQjlBNjFGQTUwNzg0REQyN0Y5MDY2RgorOjEwRkZBMDAwMDhDMDgyNzZFMzA5QzEyRjI3QTRGQzYyQjdBNUEzRTlBNAorOjEwRkZCMDAwNTBGQ0FGRjc4Nzk5MzA3NDFCQjhFQkFBRjE2MENGNUNBNworOjEwRkZDMDAwQUQxQkY1RERCNDZCOERGQUFDRERFQzlDOTA4RTc2RUU1RQorOjEwRkZEMDAwNEE4NUY2NTNDQTdDNjMwQ0Y1OTlFNkIxNEM0MTdGQkQ2NgorOjEwRkZFMDAwREY5MEYwNzdCMjVGM0Q5NkE5QzBFRjM3NEU0QTMxRDQyQgorOjEwRkZGMDAwQkZCRTNFQ0I5MDRGNDhGNUQwRkNBNjE0RjczNjdDQkY3MQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA2OUZBNDU4NjdDRTk0OTAwQzIxMEE0NjYxN0UxRTEzNjI5Cis6MTAwMDEwMDAxQjEzRjEwNDE3OEZGMzhBRjMzNERGNTY4RkU4NzEwNzRGCis6MTAwMDIwMDBDQ0Y3REJCN0NENTQxRThEMEY4OUQ3NTk2QjREQ0MwRjU0Cis6MTAwMDMwMDA1MzlCQjkxNkQ2MDZGRDFFNjgwMDNDNDFCQjJGM0Y3MjhDCis6MTAwMDQwMDAzMEE0RTMxNTlCODdCQzMzMTJGMkZCMzY5QjI5NUVCQkMxCis6MTAwMDUwMDBBRjJFRTUzRUI0OEZGNjZENEU0REM0MzhCMDdGODUyQTg1Cis6MTAwMDYwMDBFQzA4QTc4NTQ1QzhBQkIxNzU0QkU5OUM0RDY5RDBFQTUyCis6MTAwMDcwMDAyNTdCNjE0N0UwMDk5OUY3MjhDOEY3OENGM0NCMUUzNTNCCis6MTAwMDgwMDA4ODcxMzlDMDFGOEY2NzNDNjNBNTdEODg0MzYwQjczOThECis6MTAwMDkwMDA0MTJGMUM1MjU4MURBNkE4NTg5MkEwRkNCQkI2RDQyMEQ0Cis6MTAwMEEwMDBGMjczRjFCRjU0M0QxREU5RTk5OTM4QjFDRkE0NTA3RkY3Cis6MTAwMEIwMDA0N0RFRUJCQjYxMTVEMTk3QTcyOTQ0N0M2QjI1RkY2NzExCis6MTAwMEMwMDA2NjNCNUYxRjUzMDY2NzIxRkUwRjI1MzMzRDE5MjY1MUZFCis6MTAwMEQwMDBCOUY4QzNCRDFBRTA2OTZFN0VEQkMwMTBCNDlCOUUxN0YxCis6MTAwMEUwMDA0QUJEMDFEQTFENkQzNEQzQjkxQkVDRDcwOUY5Q0FERjVCCis6MTAwMEYwMDA1QUQ3NzMzOUEyRjc0MDdGMjIwQ0NGRTA0MDVDRjcwQzRGCis6MTAwMTAwMDA5M0VGRjI1NEMwREY5MUQ5QzE4MTI0Q0ZFRTRFMjVCRUNBCis6MTAwMTEwMDA4QTg2RkIwMThCOUZFMDFCNDAzRTUwQzJGMjMxQ0M2N0M4Cis6MTAwMTIwMDA3Q0ZGMTA4NDVBMDZDQTk5OTk2NjZGMUFFQUE3MDNBQjM2Cis6MTAwMTMwMDBDRDY0Nzc4MkZFNDhDNEYxMTlEQjRBNzQ3QzQwRjM0Q0VECis6MTAwMTQwMDBDMDc1MUZBOENGNjMyOEFGRTRCODY1QUI1NUYyQjM5MDc0Cis6MTAwMTUwMDBGRUE4RkVGREFBMUY2QzA0MjZGNTU0QTA1RUYxQjMxRTk2Cis6MTAwMTYwMDA1REU5RTYyNzhCNDZGNEMwRjU0NERCQjczMkZEMUE3ODJCCis6MTAwMTcwMDBENTFGNjEyRkNDREJBRUZBRDAzRjYyNDNEQkI1NkIyRkNFCis6MTAwMTgwMDA4RTVDNDcxRERGQjc0OEU3RkRERjI2RTRGQTgyNUU2RjJECis6MTAwMTkwMDBFQ0I1OUI1MEFFRjc0RTQyQkZFN0YwMUU5NUU4RUM3MDExCis6MTAwMUEwMDBBRjg2RTFFOUJERjE3OENDNkJDM0VGODBGQzk3MjU4MTg4Cis6MTAwMUIwMDA4MzFBRTQ5RkIwRkExNzIwNUNFNzlCNTYzRkExNDBCQjJGCis6MTAwMUMwMDA2MzJERkJFRjFCMDNFRDhFM0M2QkY2RTJCMEYzOUU5OUMzCis6MTAwMUQwMDBEQjkzRjYxOTg0N0RERDU1NkVFOUQyM0U0ODUzRDJEMUNBCis6MTAwMUUwMDA4RTcwOTJERUY2RDRDMTIwQjRGRTIwQ0RGMzY2RDZCNDc0Cis6MTAwMUYwMDAxQ0YxRTY1Q0MwQkZFRjFGRTY1ODg1NzE5QTk5QzAxRURFCis6MTAwMjAwMDA5MTc2Rjc3RTMzQjcwQkZFMjc5NUZCQjU1MkJGQjdBNEE3Cis6MTAwMjEwMDA3MkY5MzJEM0M0RTk5QUJEQTI5MDlGOEFGNjRFOUYwODI0Cis6MTAwMjIwMDA3RDJDRTVGMjlBNTQ2RTQ3NzRFQTY1RDY0NEYyNkEzNjNDCis6MTAwMjMwMDA5RURCODFGNTJERDg2NDBEMDZGM0E4OEQxM0Y5N0MyRTc1Cis6MTAwMjQwMDA0NzBGREI4RDcyMDJDNjlENjc3OUY2NjFFNEExMEFENjdECis6MTAwMjUwMDA0NkZBRjM4ODM5MzhCQjJEMEZEQkFGQUY3MzUxN0JCMzUwCis6MTAwMjYwMDA5N0UyQzU0MjlGRDg4MDgxNTAxRTU1MDhCRUFCNkM1MEE2Cis6MTAwMjcwMDA4MjIxRTIxQkFFMTdDQjQ1RkYwQ0Y1NEM4NEZDRUFBQUE5Cis6MTAwMjgwMDA1NzhDRkFBNDVDRThEMTcyMTYxNTZGNkUzMEVBMzc1RkFFCis6MTAwMjkwMDAwMjc3RTJFN0MxQjhBODJGQzNGMzAyRkIxODYwMzZEQjkwCis6MTAwMkEwMDAxRkRDMzk5OUU2QUQ3ODgzMzFFNjUxQzEzQTQyMkFDRTU2Cis6MTAwMkIwMDA3QjMzREY3Nzg4OUU1N0Y0M0FDRTc1OUVCM0JENTNDNjI1Cis6MTAwMkMwMDAyNTBGOEQxODM3NkFERTEyREUxNEIwOEVDMDgzODRGQkQyCis6MTAwMkQwMDBFQzAwODdFN0VDMTY4NUYwRjVCOUIwQ0JFNEJFOEJDNDMzCis6MTAwMkUwMDA3QjA1RjM0REM2RjM4NDE1MEY4MkJDQ0MwQkQzNDFBNzFECis6MTAwMkYwMDBERURGMTJBNEZEOTUyRjU5NDNBMjFERTg3RUMxREEyRDQxCis6MTAwMzAwMDBENzhGQzI3NkVCREUyM0ZGNjJCQTJCRDRENzk0Q0M1OEJBCis6MTAwMzEwMDA0QUUwRjM1NUM1MzkzMUY2NTVBMkVDODMxRjBCM0UzODQwCis6MTAwMzIwMDA3QjZEQjg2ODA3RjAyODZGNTRGNUI4ODE4NjdBRDQ1RTgzCis6MTAwMzMwMDBEQTA3NzMwMjAxMEJDNjYxRTc4OEY4RTZEOUU2NTk4NTRBCis6MTAwMzQwMDBGNTA2OUZDQjdDNjNEQjMzRkZFOUJDQkY0RjE1RjFCOUVBCis6MTAwMzUwMDAyRUY2NTBERjk4N0U1NEE3MUQ3NDE2RkRGQjg5Mzk5NDQ0Cis6MTAwMzYwMDA4M0ZBQjcyMzQ3MjNGREYzQURFNkZEQjBEMDhERkFCODhECis6MTAwMzcwMDAyRkY5MDVEREM5RDdEOTQyMEY5N0EzNUU4NkY0RTBEQURECis6MTAwMzgwMDBFNzEzRDE2RkZGRkNDMUU3NjkzRkQ3RjI2Qzc5MjJEQTNFCis6MTAwMzkwMDBDNTA3RDdDRUJDMkYwMDJDNzU3MEYzNENEMkMzMTU4Rjc4Cis6MTAwM0EwMDA0QTNERUNCNzQ0RUFGN0IxNkI0QjdGRkQ3M0E0Q0Y0REU4Cis6MTAwM0IwMDA3MUI0MUYzMTdCODc1RkQ4RERFMEI3QTAxQzVDQUIzMDI4Cis6MTAwM0MwMDBEMjBCMEY3MkI5NTc4MUZBNkEwMEU5QUIwQkIwREU0RjVFCis6MTAwM0QwMDA2N0ZCMkY0MDNBOEZGODRFN0FFQ0E3MzNGRDIzQTgzREY4Cis6MTAwM0UwMDA3Mzg2RDBFRjAyQzkxOTQyN0QyNUY1QTlENEIzOUFDOTA1Cis6MTAwM0YwMDBERjI3MERFMUE1QkVGREMxOURCMEZFQUZCNkFBRTRERUNDCis6MTAwNDAwMDA1NUFBRUI3MzlEQjhDRkQxOEREQ0ZFRjdFMTZERUE4NDgwCis6MTAwNDEwMDA3N0RFMzlDMEJCMENFMTRERjYwRjg3Rjc2N0Y1MUNDRUQwCis6MTAwNDIwMDBGQjU3NzNCOEFGRDhEQzNCMTFGRERCQ0ZFQTdCOTNERDI0Cis6MTAwNDMwMDBGM0Q5RTZCRTA0RUY1OUFCMDBERTY0Rjc3QThDNzY0RjUxCis6MTAwNDQwMDAzREMwMUJFRDdDODQzNzhDNUJCNkMzMjNFMEVERTVGMDRCCis6MTAwNDUwMDBBRTE3N0E2NzM1NEY2Nzc1ODE2QkUwMTY5NDI3M0ZGREJECis6MTAwNDYwMDA4REQ1OEJGQUZDNTA1QzI4MTVGRDkxNDM1QjU0ODZFN0QzCis6MTAwNDcwMDAyQzNBRUQyMjYxQkY0ODM4N0ZDNzFBOUU0MDNCQUE4QkI5Cis6MTAwNDgwMDAzRDczQkY5NTYxN0M3NkVFMEI4RTIwODNGQzExQTVCMDg5Cis6MTAwNDkwMDAwNzIyRTA2OEMzMUI4OTM4NUU3OEZDNEUzQjY2NUFEQTU3Cis6MTAwNEEwMDBCMDA4M0JFNjFDRjFCMzkwRjlFODFFQzJDMjk2MzczRTk1Cis6MTAwNEIwMDA0MjNCNUVEMUI5NUZCRkQwNjYwRjIxREY4MkJGNzMzNDhDCis6MTAwNEMwMDA1MjlFMkIxRTk0NjkxODI3RjFEQTZDNDgwN0Q5Q0NFM0E5Cis6MTAwNEQwMDAyM0JCNDZFRTc3RjkxOUVFNzc3RERGRjc5QjVCMTYxM0FBCis6MTAwNEUwMDAzRjc3RTQ0N0M2QzlBQkUyNDM2NjhDMkY3NTZDNTEwODcxCis6MTAwNEYwMDBERjk1QjcxNTI2MTYzMkRDNEZBQkE2NzlEQzlFQzZGNTI0Cis6MTAwNTAwMDBCMUEyRUIxNDM3QjQwMkREQzRDMzc4NEJEMjNDMjRDRjg0Cis6MTAwNTEwMDAxNThGOTNDNzExRDdDMUI4OEVGMDdDQTNCRjRGNDZEMkI5Cis6MTAwNTIwMDA0MzdENkU4RjFENzdERTk4QzZFRDgwNEFENTQ0N0VDNzI5Cis6MTAwNTMwMDAwMjBCRjczRkU0Nzk5NkU1NjIxRUNCRDNCODFGNzI2RkNBCis6MTAwNTQwMDAxQTNGQ0Y3NzBDQ0Y4MzQwQkZDNzJFQjU4QUYzRDlFM0NDCis6MTAwNTUwMDAyODlFRDkxOTNGOTE3MDczNkE1Rjc3Q0EyQkU0MkJBRDNGCis6MTAwNTYwMDAyMzFCRTFCNDc3RjQ3QjY2OTQ2QjdCQjEyRDE5RDM4MEE4Cis6MTAwNTcwMDA4MEUxNjhDN0YwRjZFRjk4RURGNTY4NTdERTNDRjIwREM0Cis6MTAwNTgwMDA4QTgzRUU4REYzNzlEMERFREE5QjZBRjMyMjFEMDVCNkZECis6MTAwNTkwMDA1Qjg5RkVFRTg5RTdGMTZGRTY0RUQyOTA5RjZFMTJGMjE0Cis6MTAwNUEwMDA3NjQ2ODE1NUM3MjBFRkNEMDVGN0Y4MzA4NTcxMDJCODQyCis6MTAwNUIwMDAwOUIxQTJGMEY1RTU0ODQ3QjdBNkVGQkZERDA2NEI1QUYzCis6MTAwNUMwMDA2QUUyRjZDQTUyMTdBMzczNDA5NzgwQjk4RTcxNTgzQ0ZECis6MTAwNUQwMDAyMjczM0FFNTRDNzQ2MzhDNUIyRkMwRjhFQzY4QzYwOTUzCis6MTAwNUUwMDA2QTI0QzFEMzkwMDdCODUyRkVFNTg3QUY5QkY4NjAzNjA2Cis6MTAwNUYwMDA2M0ZGQ0IzQzE3MjM5RTE3MjA0QzkwMEU0QTkzQzhGRkY1Cis6MTAwNjAwMDBCRjFBRTNDNDJFNEMzNUEyQUZBOTFBMEI5ODc4NUE4RkEzCis6MTAwNjEwMDAyMTM1MTkzNzlFMkNENjc5REQ0ODE2NEE4MkY1ODU3NjI0Cis6MTAwNjIwMDAzMzQzNUNGRDg2OTAyOTc0MDFDMEVENkEyREQ0OEFGMEI1Cis6MTAwNjMwMDAzM0Q5M0M2NkY0MDM3Q0M1Q0E2MEY0OEYxNzJDM0JCN0YyCis6MTAwNjQwMDBGOUJFRjNCMDdGRTI4MzA1OTAzN0YxQzM4QjFENzcyQUEzCis6MTAwNjUwMDBDMTBEMDBBNzlCODFCOTkxMkU2RkQxRDgwRTc1MzBDN0ZGCis6MTAwNjYwMDAxQkQyNUQ5NUNCMTNBMDdBOEIxNEIxM0ZDNEUzRjkxMjcyCis6MTAwNjcwMDAyRjgzQTBGQjQ4RjhERTJDRTYwN0ZERDQyNzYyN0I0QkQ2Cis6MTAwNjgwMDBFQ0I4RDFDNzY5RDJGRkU1NzZFNjdDQzFBN0YzMjU5RDFBCis6MTAwNjkwMDA2RDM2RjJFNzNGMjQ5RkEwM0QwQjcwQkI1OUE0REREMTFFCis6MTAwNkEwMDBGOURGNDRGRjdGMTM3NEZFRjk3OThFNTc2OTY1MjE1QThCCis6MTAwNkIwMDBGNzc2MkJFMTUxOEU3QkI1NDhCRjRCRTNGNkIyOUM4N0IyCis6MTAwNkMwMDBBNDVGMjZFMjRGMjY5MDE4NDg0NzA3MUE2QUM5NUU5QTI3Cis6MTAwNkQwMDAxMzE1RkY2NTkxNzEyQTM1NTZCRTUzRUU5ODRFNjM2QTI1Cis6MTAwNkUwMDBFOTk4ODVGMzUxMkU4QjIzN0VCOUQ5RDJENEI3REFERUJGCis6MTAwNkYwMDBCNTFFRDhEMTg0QTI0QUJCOERFQ0JGODVBQzlEQzdCM0QzCis6MTAwNzAwMDA4NEREMkZFREM1Qjk2OEU3NjFCQ0IyOTFEQkI1OUFCMDY1Cis6MTAwNzEwMDBDNzRCQzEzRjQzQTIyQkFEOEZCMDc3RTE3RjkzOUJCNzBGCis6MTAwNzIwMDA4Q0M3NzgzRTE4MjY3RURBQjdCMERCRThEQ0M2RTQwNTc1Cis6MTAwNzMwMDA0NjNCQzkyQ0VDMjI3Mzk0NURDNEEyQ0Y4NTA4M0IyOUFCCis6MTAwNzQwMDBGQTVDODgyQUY4MTdFQTcyN0Y0NTlDMEJEMTg0RkREQjlFCis6MTAwNzUwMDA0OTQ3Njk2NjgxQ0Y4MDYxMUY3RTNBNkIzM0YzRkI2MjQ0Cis6MTAwNzYwMDAyMjdFMjdGNEYzNzhENURFMEZFNUNENzQyNURFOEJGNkY3Cis6MTAwNzcwMDBGRUIxNDI0N0MwOTQ4NEYxMjUzMzhEMzcxREY4MDBFNTYyCis6MTAwNzgwMDBDODI3NzFGQzdDQzU4Q0E0OUY0RTQ2M0I3ODdBQTI0NTU1Cis6MTAwNzkwMDBDM0Y0NTM2N0FGQTQxQjE4Q0ExQjU1RUMxQjA1MjdFMjEzCis6MTAwN0EwMDAzRTUzMkRDQTREOUVCRjU3Q0ZBNjI4OThDODZGN0MwQkNECis6MTAwN0IwMDBGNzY3QUVGRDAxRTY0QkY5MjcyN0VBRTBCRjFERkJBMzczCis6MTAwN0MwMDAyODBGNDAxRUU5NzVCOUU0REJERkYyRkM0M0IyRkM3Nzg5Cis6MTAwN0QwMDAzQ0JGNTI5NjZGQTNGMThFQUQ5MUZEOEJGQ0ZENTFFNUIwCis6MTAwN0UwMDA0QkEzQ0ExRkUxRjlGMTNEQjY0RDBDMjA3Q0M0QkVEMzJBCis6MTAwN0YwMDBGNEQxMEFFRDNCQ0Q0MUJFMDJGODRENUYxNjIyN0E5QTQ0Cis6MTAwODAwMDA2RTdBOERBNzQ1MkM4NEZCOEU2N0FCQjdBODg3NkYwRUQ5Cis6MTAwODEwMDBFQTY3RDU3MUMwODFGNkM5OUQxOUZBMUNCNEFGQUU0RDE3Cis6MTAwODIwMDBGNUZCN0FBMDVGMzg0NTA5NTg3MEZGNzE0RjMwNUZFOERCCis6MTAwODMwMDBBRjk4RTdFN0U3MDgzRTVEOThFRUEzRjZEMkRFODU3RTQ3Cis6MTAwODQwMDA2RUZDNzdGQTM5RDVBMzRCM0Y2NTNENTJDRkJGOUZERDk0Cis6MTAwODUwMDBFOTdDN0QxMUZEQ0NGRjc3RkExOTk4NjE5QzhGQjRGRjdDCis6MTAwODYwMDBERUM4RDQ1N0UwRkFEODAxQjdFMTVDRTRGQ0ZGRjEyNjFBCis6MTAwODcwMDBBMUZEQzhGMDVDMjQ4MDdFRkVCMkE2REMyMUQwRkZGQzg2Cis6MTAwODgwMDBFNzVFQ0E5RDFEMTE1RjU4NzhEMkM0NzRCMDEzQUI0RTk5Cis6MTAwODkwMDAzMjRBQkY2Q0ZEQjNDNTAzRjM1OUI4QURENTMyMDFFQTk2Cis6MTAwOEEwMDA1NTQxM0EzNjYyNUUwQkU0Qjk2MEQ2QUU0RDhEQjA1RjBECis6MTAwOEIwMDBFRUVENjExMkZDNzQzRkJGQzdGNURDNjFEQTNGOUU2RjVECis6MTAwOEMwMDA2QTNBRjgyOEYyRTM2ODFFNjc4QzVFREY0RjdBRjBGRDIzCis6MTAwOEQwMDBCRUJENzgzRTIwODY3RjcyN0YwRjZFOEY2Q0NGRDYxQjk5Cis6MTAwOEUwMDA3MDlEOEI1MTQ2NDIzQUI2MzZGNkY5OEE4RjQ1N0ZEM0QyCis6MTAwOEYwMDBFM0I5M0M5RjM5REM2MUYzNUM4MkZCRDlGRTVBQkNBRkEzCis6MTAwOTAwMDAzNzdCNURERTYwOEM1N0RGOTE1QUY0Njg4RjMzQzY3RjhBCis6MTAwOTEwMDAzQjc4RkNCNzg1Qzc3RkE3QkJEQTZFMDM2NUM1M0VGODk5Cis6MTAwOTIwMDBENUZCRjdEQUMwNUY5REY4MkJENkI5MUY4QzcxRDU2MjY1Cis6MTAwOTMwMDBBQkU0QkIyMzEzQzcxNTUwM0M4RkYyQ0QzRDBFREMxQjNGCis6MTAwOTQwMDA4MEY2QkJFMkY5Rjk5MTE5MjMyRThFNDc3OUQwOUU5NzU0Cis6MTAwOTUwMDA2MDcyODI5QzA4Qjg0QjNGQzA3OUNDMTg3MUU5MDRGQ0U2Cis6MTAwOTYwMDA1RTY4NzVFNDk3RjJGRDAzQTI4QjgwREJENzg0RUJDNjRCCis6MTAwOTcwMDBGQTE4QkZGMTVCNzgzQ0NGRkZBNjRBRjEzQ0ZGQzAwNEY4Cis6MTAwOTgwMDA3RkFDRjMwN0NGMDkzODdDRDA4M0RCNjdCQjAwQ0Q2ODMxCis6MTAwOTkwMDA1N0M5NzlDOEYxQzEyMEJCQUQwREZBM0JCMDJDNjMxMDJCCis6MTAwOUEwMDBERThCRkNEODVEQjg4N0UwMjJDNkZGRDhFRDZGOEQxQ0NBCis6MTAwOUIwMDAxRjk2M0IxMEJGOUZFQjNDNUUxMTc0QjE0N0UwQ0Q1N0QzCis6MTAwOUMwMDBBMDMyM0Q0MkRFNEYxRDk3NjBDODVGM0IyOTg1RTk5MTBCCis6MTAwOUQwMDA3MUU1NkJCMzBDRjk2OUQzN0IxQkVBREYzNEVCMjI0MzdGCis6MTAwOUUwMDA3OTg5QjU2RDY4RjU3OUQ4Rjk1NTBFNDczQzlFNkZGODUxCis6MTAwOUYwMDBCNEU1QkJGRkJCMTlFREQ3NDZENUFCQzA3QUU2NkVERkQ5Cis6MTAwQTAwMDBGODdGNjNBMEQ2NzEzQzM2NENGNkE4ODdFMjdCNDdGMEFFCis6MTAwQTEwMDBCQzIxRjI5RUE2NkI5MUZCNTI1RkIxMzYzQUE3MTlCMTg5Cis6MTAwQTIwMDBFRjYxRDg1RjlBRUZEQzQxRTc0NDdGQUM3REE5MTMzRENECis6MTAwQTMwMDBDNEJFQzc2MDNDNjI4RTdBRTg4MzVDM0M1RkIyRDBDRUI1Cis6MTAwQTQwMDBEN0YzRDU0QkZCMkM3NEJGMDNGNTA3RDBGNzE1RDg1MDVGCis6MTAwQTUwMDA0NTNFMEY1MEJDN0Q2Q0YzM0VCQTQ3Rjc1MDBGMkU5N0MyCis6MTAwQTYwMDAxNzY2MkZEMkMwMDI2NTU1OTBBMkRDOUYwMEYyMjkwOUJCCis6MTAwQTcwMDBFOEEzQUQ5NTVEQkMwRENGNTdFNzM5RTgzQzRDRTVDOTFGCis6MTAwQTgwMDBBOThDQTUyMDFEMDUwNjJDODI3QUYzRUI4QjI5QkZGMERCCis6MTAwQTkwMDA2NDNDRjVGQkFFREEzNjgxQ0VEMUJGQThEMEJFNDg0OTYyCis6MTAwQUEwMDBENjhDNjU2ODI3NjBGRDlGQzA3ODI1QkZCQkEyMThFMTgyCis6MTAwQUIwMDBCMzcwMUIzRjM3NTNBMkZFRUY1MEVDNjc0MTQzMzFCNTkzCis6MTAwQUMwMDAyRjUxRDkyRTA1RUNBMTg5NjNCOTdFMkQ0MTVCMDZGMjI5Cis6MTAwQUQwMDBFQTcwQzcyQUQ0QUJBQTI1OTRGRjE4Q0ExMzhCODNFNDAzCis6MTAwQUUwMDA0OUQyQzk5QjY4RkNBQTkzMzY2QTlGOTVDRUVEMzQ3M0IwCis6MTAwQUYwMDAzQjlGRDdGODkzM0VGQTJFRjE5RTk3REVDQjcwRUZEMzUzCis6MTAwQjAwMDA5Q0RBQTg5NUQ5QjEzRUEzRkE1NzlEQkM5MDUyQjlDRUI0Cis6MTAwQjEwMDAzN0ZCRkRDNjhENzJDQzlDRkFFRDA0M0MyN0ZDQTY1QjJFCis6MTAwQjIwMDA3MTkyNzkxNTI1NkY0RjU0OEY0ODYyMzFFNDkxNENBRDI1Cis6MTAwQjMwMDA0MkNFREU3QzkyOUY0M0VGOTVBOThGNDg4Nzc5NEVCRUM3Cis6MTAwQjQwMDBCQjVEQzM3RDJBNjZCNzM5MTE1RTkzNDcwRUYyQ0M4RTJBCis6MTAwQjUwMDBFMDIzRjVCNTFCRDEzMzYwNTY3Nzg3MTlGNUY5Q0Q5MEIxCis6MTAwQjYwMDA0NkNBRTM1QkJCOTFDNzk3QTY5QjBDRjc3NkE0N0U2MTUwCis6MTAwQjcwMDBDMTFCQzlGRUJFNDVERTUzMTY3QzcyQTFBODJGREJCNzkwCis6MTAwQjgwMDA5MUVEMDQ3ODdDQzE0QTc2RDQ5ODRDQkYyRjFEQ0FEQjA2Cis6MTAwQjkwMDAwQUQ5QjRBRDI0MUZEQjcyNzE3RkU4Qzc5QTNGRTBEOTUwCis6MTAwQkEwMDBBNjkwM0ZEMzRFRjczMDI2OEZGNDk4RDAzRUJDMkVERDcyCis6MTAwQkIwMDA2NEIwRDNDRUI2OEUyMjUxRkY1RDk1MkQ0MTdERjJFRTBECis6MTAwQkMwMDBFNTk3QjdFOUQwNUZFQkNGODYwQzQxQjkyRkM3OUQ5RDY0Cis6MTAwQkQwMDBDRUVGOUQzMzY3QzcwRkU4Qjc1NkJEOTJFMDQxQkUyRUZBCis6MTAwQkUwMDBDMUJERDZBMTYxQkIxREJFMzM4QzczNTZCRDYyREQ4MDE1Cis6MTAwQkYwMDBFNzk5QUExMkMxNkY4N0YxQzdCRTFBMTc0MjNBNkU3REY0Cis6MTAwQzAwMDAzNTRFNDNGREYwNzVCNjdGMzZFMjczRUNBQjE3OENDM0ZGCis6MTAwQzEwMDA3Mzc0N0E4QjU1NjM2NERGRTgxNTA4QjdFRUU2N0IzNkFDCis6MTAwQzIwMDBGOTE0NEQ2NzkyMkZGREY1OUM1RjRBMDU5RDk2MDlGRUNDCis6MTAwQzMwMDBGMzBCM0UzQTUxREQ4M0Y4RjBDNEREMzA2OTU4NDdEOUYzCis6MTAwQzQwMDBERENBQzVEQkQwMUVGMDM4RTgxQzk2RTRDQjEyRjRGMzA1Cis6MTAwQzUwMDBFMDdCQzk0NUM5RTRFRjQ2RjAxREYxRTE4MjkzNEVFQTFECis6MTAwQzYwMDBBRkYyQTQ0N0YwQjk4QkYyOTJERkNBMDRCRjQ4RkFGNjlDCis6MTAwQzcwMDAwOTNCRTI2Nzk5RkU4NzExMUUyNUI1QzBFRjc4N0Y3M0E3Cis6MTAwQzgwMDA1OUM2NTBFNEEzMzBCRDU4OUM0ODU3NDAyRkU5QjMyM0MwCis6MTAwQzkwMDBFOEExQjYxNUU4QzU0MUY0NDI3MkM4MDc2OTI0QkQ1Q0Y1Cis6MTAwQ0EwMDAyREVGMTUzMUU3ODQzNDk4RjdFNEJBM0NDM0JEQTJDN0YxCis6MTAwQ0IwMDBDRTkzRUVFQjA1QkQ5NEQ5NDM3REQxNUUzNTU3Qzc3OTEwCis6MTAwQ0MwMDBGMTlFRTQ3MTM3REY4NzVBQkM5MkMzNkZCMUQ5MzcxNkYyCis6MTAwQ0QwMDBFRDg3QzU4RjI4NUVDMDBDRDkxNTI4OEY4NjdGNTQ2RDhGCis6MTAwQ0UwMDA4OThDQUJERTc4NzIyMEYzQzBGQUFGMzlEOTg3RDIzQjVBCis6MTAwQ0YwMDA1MkZENEYyMzFDNEE0RjVFMkZFMDM1RjBERkRBRUYxQzI4Cis6MTAwRDAwMDBBNkYzMzg5QTM5NjhGNUFFQzdGREM0MzhCRjhBRjgzREY2Cis6MTAwRDEwMDA5NEMzOUMwRjQ0QzREMTMwRUU4N0YxM0ZCOTBGMkFFMzRFCis6MTAwRDIwMDA2QTU2REMzNzhFRDA5M0RGNjkwREI5RThFNzc0ODlBRjc2Cis6MTAwRDMwMDAxNTFBRjcwQjE3QjRGRUVGNzAxMzk0MUZDOUQzMjlDRTAxCis6MTAwRDQwMDAzNkMzRTQ3RjFERTk3OURFRDRFMDczNjZDOENGNUZGMzc0Cis6MTAwRDUwMDA3QzIyQzZGNTI1M0M5QkI0NTA1RkQ0OTM0RDAwNDc4QzU0Cis6MTAwRDYwMDBGNzM1QUQ1NjhCODNEQzlFNDlFMEZCN0M5Q0FFMjUxREEwCis6MTAwRDcwMDA0N0QzRjdCQzkzQkQ4ODlFNEU1NDVCNDlFRjlDMDA3QUU1Cis6MTAwRDgwMDA2NTExN0EyNzVBREY0ODNBQUVENDk4RjA1QjkzRThEQ0Q1Cis6MTAwRDkwMDA4ODk0RkY2MTdEQjNGRUJFRDE0ODc3NDczNUEyRkZCMDhFCis6MTAwREEwMDBCRTk5RUEyQkU0RjQ0RkU3Q0VBM0U5RkZDNTlBNzQzQTYzCis6MTAwREIwMDA0RjI0RjU0OEI0QkU4OTk2RUI1MjVGN0Q5MkUxRkYxRTQ5Cis6MTAwREMwMDBFMTU0RjREQjdGM0VGRjMxN0NCQTRBRTM3QUVCMkFDRDczCis6MTAwREQwMDA0MUY0RjNERjkyRkJGRjNDNEZGQTNGMkNFQTgzRkQ0QURDCis6MTAwREUwMDA3NjIxQ0FGNUM4RkVDNjY0MTYyNTY2NDA3OTRBMDZENzNDCis6MTAwREYwMDBBQkZGNkQ3OTlGOTI3MTdFRjI5RTY1RjBGOTlGNERERTlCCis6MTAwRTAwMDBFNzY3NzA3OTFGMkRERkYxQTIyMkNBRjc2M0RCRkJEM0ZFCis6MTAwRTEwMDAzRUZDNUUwNkZBMDBGNTVFNEI4MjY3QTM5MEZGQTQxRkJFCis6MTAwRTIwMDBFMjkzODI2NzkyRkZEQkIzNjdFNjY3QzQ5NkZGMTc2NEJECis6MTAwRTMwMDBGQzA3RjJGRjdDRjk0NEQyNkY3N0ZDMzJGMTVFNkU5RkMzCis6MTAwRTQwMDAzMUI0Q0Y5NDQ4RkI4Q0MzNjVENzg1NUMwRjQ0RDg2OTE3Cis6MTAwRTUwMDAzQzlFMDI3Q0Q1NTc4OUU0OUIwREY3OEQ0NkJFMzlFNjUyCis6MTAwRTYwMDBGNkUyNTk0MEM5Mjc5MjZGMjRCRkRDMkNGOEUzNTZBMTYzCis6MTAwRTcwMDAxNzI0N0ZCQzlBRTFCRjExRTEyNUY5NjNDMUQ2NjhGRDUzCis6MTAwRTgwMDA3MDY2RkFCQUQ5NURDRDUwM0ZEQzBBNjkyNDdENTkzQkMyCis6MTAwRTkwMDBGNTgzOTEyRjZFRTlBNEFCNzNFMzhCNDkxOUU3NjY0NzlECis6MTAwRUEwMDAyQ0NBRTBGN0RDRkY4Qjc0QjUwOEU5MjcwNjVEMkRGRTQwCis6MTAwRUIwMDA0RkU4QUFBQkZERkFFMTUwQkNBRjc2NjIyOEQwNTE1RTk0Cis6MTAwRUMwMDA5ODhFMjZCRUM1QjhEREQwOUJEQkZGOUQ3NDYyQzlBMTlDCis6MTAwRUQwMDBCOENFQzREM0ZDMUNBRkE0NTM4OURGNjhCOUY4NUNBNkI0Cis6MTAwRUUwMDBFRjYxQzRCN0Y0MUJGRTVCRjJFRkIxRjNDNEYzQ0E3MzU2Cis6MTAwRUYwMDBDNEYzNjY4MUU3MUZEMTVFN0MzMTE2NUU5OUQzNjU4OEE1Cis6MTAwRjAwMDA0NzAwN0Y1RjQzNzY1QzQ4QTMyMzQxRERFMUQ1QkM5NjczCis6MTAwRjEwMDBGMzk3Q0MyRjBGNjk1MkVGQTZBMERFMDU3QTY5RkU0RjNBCis6MTAwRjIwMDBFOEE1NjQyQzEzRjE4RDQzOTMzMDRFMzlGMTE3MjJDRjhECis6MTAwRjMwMDA4RTRFNDIzRUJDN0VBNDJDM0ZCQzVBRUY4MzcyODZDOUMzCis6MTAwRjQwMDBGRDAzOEE4RkJDQUI4QTdDRTBDOERCRTM2MDVFMTMxRkM1Cis6MTAwRjUwMDA2MEUxRkQwNTI4MUY1RjkwRDQxOTRGNDFENzQzRDZGRkFDCis6MTAwRjYwMDBGMDkxMkZERTVFNERGQ0NDQ0ZGOTMwN0ZCQkM2RjdENUJDCis6MTAwRjcwMDA0NDdFMjhFNDFEMTFGOTkxNTFGOTc1QkM3RUEyRDZDRUFDCis6MTAwRjgwMDBGOEI5Q0MyMEQ3MDMyQTZFMzU3MkZBRjE0NUQ4MjU4MEZFCis6MTAwRjkwMDBDOTA5Nzg3RTYyRjIzNkM1ODlGMTkwOUIwQThFRDFGRTJFCis6MTAwRkEwMDA3Mzc4RkRDNzI3RTkwNUI4MkZBODg4RkNGNzZGRTM3QUE3Cis6MTAwRkIwMDA2RkRBQzZGM0E3MUVGOUM3RUE4MDI2RkE0QkEzNzgxOUExCis6MTAwRkMwMDBGRDU5OUIxNDVEQzVGMzIwMjM5NTYwQUZCQ0FFNzAzRTA4Cis6MTAwRkQwMDAxNUE1RjdGMDRGMzNCNjY3NzhDRUVBN0NEQTIzOUVBOUUxCis6MTAwRkUwMDA3RDJGNkExRkIyOUVDN0Y4MzcxNEM0QkUyN0UyQzgxNDBCCis6MTAwRkYwMDBGNTQ0NUM4MUZBMDc1ODVFRDMxNEZCMUU0Q0FBQThERkE3Cis6MTAxMDAwMDA4NkZCNDUwNEFGQTQzNTA4QkYzNjhCODQ2N0UyMUFBNDdCCis6MTAxMDEwMDBBN0YxOENFNzdCM0U5QTU4MTIxOEMwQTdBRjQ3QURGRkU3Cis6MTAxMDIwMDA0Q0YzNTczMkJCQUVERjYzNkMxRjNBMTNGQ0FDNUREQTk2Cis6MTAxMDMwMDAwQkZBOTk2M0E0QTcyNENEQjdFMzA0Q0MyM0M5QUQzODM4Cis6MTAxMDQwMDBEMTNFNUVFODhCNUI4RDdFNDA5ODNFMzI0QTcwM0Q2REFFCis6MTAxMDUwMDA5RDcxRkQ2OEZBQ0YyQzQxRkE1RkM4NjRGREVDMzVFNDYwCis6MTAxMDYwMDBFNzk4M0FFQjczN0U5MEY0MDVFREZCRjFGN0Y3QThGREY2Cis6MTAxMDcwMDBBODQ3QjNENjIwN0MwMDNGNTQ0RTc5RUQwQ0ZDRDAxNDI5Cis6MTAxMDgwMDA5NTJGODhFMjFGNDFGRkM0QkYyOEU3MDEzRTdENjNDODVBCis6MTAxMDkwMDA5OTY5MDIzRTVGODk3M0U0NkQ0NURDNUU2QzEzRjdFMjhCCis6MTAxMEEwMDA5NjY0RjIzOEFEM0Y5M0RCNjM3MzI0REUyM0VFQ0RCMDVDCis6MTAxMEIwMDAwODNDMzM3MUFGMjY2MkREMDRBNzFCREQ3MkREMDUyNTE4Cis6MTAxMEMwMDA5MzYwNUQ2RDJFNUVCRTM4NzNFNDlBNDA3NjM4MUZERDA2Cis6MTAxMEQwMDBERjZEOTkwNTI1QjgzRjExRUU3RkY0OUY1MDZGREMyODM2Cis6MTAxMEUwMDBFMEI2MjQ3M0NDOUYwMjVDMUUyQUM4OTc5NTQ0MjA4MEVBCis6MTAxMEYwMDBGNzZENEE4MENFNjEyMTVEQzQ1OEI3REU5NUFFMDI1MUNFCis6MTAxMTAwMDBFRDc1RjMxOURBNEZFOERBNUU4RjZBQ0ZDQ0VFRjM2OTRBCis6MTAxMTEwMDAyRkYwMzYyOTBBQUZDNTUxNzgxRDE3OTU5RjJFRjM0MTQwCis6MTAxMTIwMDA4M0ZDOTM3MkIxQUNGOUZFRTU2OTZFOEM0RjJBNzRBNzBCCis6MTAxMTMwMDAzNzRDQ0Y1NzExM0RDRjc3NEFGQTlERjgyN0E0RDczMEM3Cis6MTAxMTQwMDAzRDRGMjIzODRGNkQ5MkYyQjA2NDBEQ0FDMzI5MjgwRjZCCis6MTAxMTUwMDA0Nzg3RjNEN0EwQkNBMEZDRTQxMjNEMjk1MjVGNUNCREQ5Cis6MTAxMTYwMDA0NjA3M0NERjUwMkZFQkZCQThGRTRENzVCMkJGMjk1NDVDCis6MTAxMTcwMDAyRUYxQzgwMjUzNEI3MEZDMUI4NzBBN0QxMUI4RTY0RjU1Cis6MTAxMTgwMDA1ODNFQUY4NUI3RkZFREEzRDdGRTI5RDBFNzBDRkNEMEMyCis6MTAxMTkwMDAxMDA1OTc3NTUxRjk0MDU0RkQwN0NGQTI1RkVBQTJEQTE2Cis6MTAxMUEwMDBERjFENTVCRTNBMkFCRjM2MkE1RjZGNkM1RjNBNEIyMTZFCis6MTAxMUIwMDAzRTJDMDU3QTQwNDQ5QzhEMkY1RkNFRUNGNDdGM0FGNUFGCis6MTAxMUMwMDBBOTYyMjdCQkNEQzA1NzEzNkI3OUZFOEY4Rjk2OTZENDNCCis6MTAxMUQwMDAwRjg4Qzg2N0NFMkM4OUU0MEJCOUJGMEFCMjM2ODBGQUYzCis6MTAxMUUwMDBDQURDOERCQzdDQkUzQkJBRUMxN0FENkY3OUY5NUZGMTAwCis6MTAxMUYwMDA5RjE5QjRDRjYzQjAwQjVFNTc4REY5NTY1NUNFN0JEMTk2Cis6MTAxMjAwMDA5RjZFMUIxMEI5MUY1QTVEODI3MTk2NkVGNzVERDhDMjMyCis6MTAxMjEwMDA5MjcxOTE3NjQ5QTA5MkU4NDRBRTUzRDY5RjcwRUFCNDk5Cis6MTAxMjIwMDA4QUUzRkQyNUIzQjJBNDExRjc3NThBQzQ3RUE0OEJBNzA3Cis6MTAxMjMwMDBBMEQ3NTRENDlCNTUyMjJFMzMwMUNGMDM2M0JERjg1MDYxCis6MTAxMjQwMDBERkM1OTE3NjA4NkJDQUM3NzVCNkZFOENERjkzMDhENEVDCis6MTAxMjUwMDAwMjdFMzBDRUM2QkMxNjhDQUJCNDI2MjUyRDc5MTJFQUEwCis6MTAxMjYwMDBCRkZFMzM3NTA5RUFEMUJENEI1MkU4MUNENjY1NTlEQzg3Cis6MTAxMjcwMDA4RTdDM0RBOTY3NUEzOUU0NUIxMzZFQjVFMEZERjNENjY5Cis6MTAxMjgwMDA3QkM2NTNGQTlBQUFBRkU4MDA1RUZCRkJBMzc3OTdEODE4Cis6MTAxMjkwMDBGQjYzNzkxMkMxRTdCQkNDMjUyNTRCODFDRTRGRTIyNUZDCis6MTAxMkEwMDAyNTY4RUY3NzM5RDNGMDFFMDc1QjY1NjZGQzNEMjRFRkI4Cis6MTAxMkIwMDAxMzQ0Mzc2QkFDODNEMDhGMkU1RDdBMTFFRDVGOTUzRDczCis6MTAxMkMwMDAzNDY1MDJEREQzNTg2RUE2N0QwREY4QTNGQjNBRkU1NUJBCis6MTAxMkQwMDBFM0U5OUNEN0FDM0E5MTA2QUVBMEY0RDU3RkZEQTYzNkUzCis6MTAxMkUwMDAxMUNGMkQzQ0FFRDBGRDkwNEJCRjZEN0EwQkRGNURBQUM4Cis6MTAxMkYwMDBBOEVGRUQ0NUQ0QkMwMjc2M0Q5RUJGRkE2Q0VEMDU3NEI3Cis6MTAxMzAwMDAyRjY0N0Y1QzM1OUQ3Mzg1RkEwQ0VCNTdGQ0UwNzk2N0ExCis6MTAxMzEwMDBGMjUwQUNBRjNBRjE0OEM5NDFGODhFRjZGMEMxOTVFQTA3Cis6MTAxMzIwMDAwNjA1RTc5NUU4ODhDNzczM0MwNzRGNzlERTQxQkIxNjkxCis6MTAxMzMwMDBDQTlEQ0JFMEZCQzFFNTczRDNEMENFM0FBODc4MTIxNTk1Cis6MTAxMzQwMDBCQ0M3RjBEOEFBOTJGNDBDN0MzRkMxMkFGMEI5Q0E1MUFDCis6MTAxMzUwMDAwQTdDNUQ2QUVBQTQxN0QyMUZCMzkzNzkzRTM1NkI1NUI4Cis6MTAxMzYwMDBDOTQ2OThGRkMxNDcyRUEwNzM2RUJGQ0NEMkQzQjIwMDNFCis6MTAxMzcwMDA0RUI3NjZFQjNEQjI4NkUxM0NCOTlFN0FGNTVGN0NERjA1Cis6MTAxMzgwMDBGMEU1QTM2NTY5NDg0Rjc5NTk5QzhFNUYzOTU5OTY1NkE3Cis6MTAxMzkwMDAxNjYxRUZDQ0ZFNEEyM0JDQkY2QUYxREM4NkYzN0MzNUQ0Cis6MTAxM0EwMDAzRTQ3QTFGM0U4QUMyOTA1RTNERUIzODQ5RjA5RjRCQjEzCis6MTAxM0IwMDBFNEY5MTg3NkNGMEY5OTJBRjU3QkMwQkE4NEVEODc3OUM2Cis6MTAxM0MwMDBCN0RFN0JERDU4MDdDMEE1RjU0NTg1RjAzMDhCRjk2QjlFCis6MTAxM0QwMDAzMUNGOUE2M0VGOEJGRTkwNTYzNDEwRTcxRkE2RkY3NTRFCis6MTAxM0UwMDAyNDY3QzlERjgwRkNDOEFDNDdENjA0RDAwNjEwRTczQkIxCis6MTAxM0YwMDAxOUJFM0U4NUZDQkEzOTJFMTgwN0YwOUNFNUQ2Mjc2MDQ5Cis6MTAxNDAwMDA3RDk2REU5NDNGRDUxMUMxQTdBMkZFQTcwMTdFN0VGOThECis6MTAxNDEwMDA1M0E4OEZGRURFQTc4MUJGMzgyMkY3MkY2NEZEOEE0NEQwCis6MTAxNDIwMDA0NzAwOEQ4RjJGMUMwRTBERjFCNjU3QUIzOTg4RTcxRTg0Cis6MTAxNDMwMDA2NzNGNkUyNjNEMzFGQkYxRDRCQjNCNzAxRDQwNUY3REE1Cis6MTAxNDQwMDA1OUQ3NzVENDY1OTk4OTVGQkFERjJGN0REQUM4QjdFQ0IzCis6MTAxNDUwMDBFOTMzRjJFREQ0QzczNjk1MzREQUJCRTdEQjBBRTFEN0RFCis6MTAxNDYwMDA0Qzc4REM0Q0U3RjgyQjg2MzkzNERDQjcyQzdBRkM4RkNGCis6MTAxNDcwMDAxQkU5REVGMUEyQjhDMTc4N0ZBM0UyNzEyQkUxQjdEREYxCis6MTAxNDgwMDBFMTA4Mzg3MTVGMzVEMUExMjU2MzJBRTg2MTY5MTZFNzYzCis6MTAxNDkwMDBCM0IxMkFEMzZDODMyOUE1N0IxQjcyM0ZGMEYwOTIwNzZFCis6MTAxNEEwMDAxRUM2NjNBNjQ3NThGMEZBMTEwMEJGRTM4ODI4ODBDQjE4Cis6MTAxNEIwMDA3MTc5NkYyRDZBN0ZCMDcyRjdGMzk2NDI3Njg2RkRDMTFGCis6MTAxNEMwMDBCM0VDMEJFMjBENzhFNERCNzNERDFGQkMyMzJCN0E3RkRBCis6MTAxNEQwMDBEMDlDOEZGQjhGMTU2MjdGNzBFQzNBMUVEN0E5NThDMjQzCis6MTAxNEUwMDBERjY1MTk5QkMyRTNDNDA3NkEwMkY4MTgzMkFFMzdFMDIxCis6MTAxNEYwMDBDNDdCRDYwRjcyN0Q1NEMxOTRBMDBERkU3OUM1QkE0NTQ4Cis6MTAxNTAwMDBGNDVFRUQxMTIxODc0QUYxNURCNTAxQzg1RkRFNUNGNDQwCis6MTAxNTEwMDBFQjY3M0YxRTQ3NzBBRDc4NjJFRUZGM0QwMkVEREE5NzU0Cis6MTAxNTIwMDA5NkI4MjNGREU4MzU4MjFFQTA3Rjg2Rjc5ODY1M0Y1RjU5Cis6MTAxNTMwMDAyQ0ZENzkyRUNBQkZCMUJGMDY3RjE4RUY0MzI2QjNFNzUzCis6MTAxNTQwMDA2RUNDNDMzQzY1RTRFMjNFQTZBQzU3QjFFQzY3RjlCQzE3Cis6MTAxNTUwMDAxRUY4RDNFMDM3OTdBRTU0Nzk3Q0VBMDUyQkU5NDc5MDIzCis6MTAxNTYwMDAwOUU5MkNFMjNFRkFBQ0JBREQxNkNCODBGMEZEQjhDRjJCCis6MTAxNTcwMDAyMDhGNEYyQzQ0REM5M0IzMjBCQ0U0QkQyREZDNEIxRkNCCis6MTAxNTgwMDAyRUVDNzMwRkM5MUI3QTZGN0FCQTQ5QTFGQjVEMjBFOTczCis6MTAxNTkwMDBFODVFRDRDQjU5M0MxRURBOTRDNUVEREVEMjVDMkZERDdCCis6MTAxNUEwMDAwRkFBQkNDRkVBNURDNkNGMkJCMUNFN0JGMTc4MUVDQ0EzCis6MTAxNUIwMDBENDM2OUJGNjJEN0Y2RkE1Mzg0QTU1NUQ5QzFFOTdDODgzCis6MTAxNUMwMDBDRjUzNkMxRDQwRTdDNjM1MEJFRUI3NzhCODVDNzk1OTQwCis6MTAxNUQwMDBEMDVGOTU2N0NBMTU0ODJGNTBGRTkxODZFN0Q1MUM1Q0YxCis6MTAxNUUwMDA3RTU2MjY4QkY3MDBBMUJEMDlDNjM5ODZGRkVBQ0RGQkUyCis6MTAxNUYwMDBDRDE4MTgzMUJFMjJCRTQzM0Y5RUM0NzBCRkJCNENBQzU5Cis6MTAxNjAwMDAxRUUzMzQ1OEJGRkY0MDg0NjNDQUY1RDM3MDdFQ0ZBQTZGCis6MTAxNjEwMDBDNEM3QjBGOEZCNDZBMjNERjhBQzNBMDRGREUwRDI5NTUxCis6MTAxNjIwMDBBRjRGNTg4QkY5MkQ4M0YwNDYwNzJCN0RFRTdERDIyRkRGCis6MTAxNjMwMDBGMzA1RkVEQkM1QjlCOTMyQzhFMzNCMDU3QjA0MUZGOUVFCis6MTAxNjQwMDA1NTFFMUZEQTIzRTAyNUU5NDA5NjU3QUVFNEU3QTcyQUE2Cis6MTAxNjUwMDA5NzVCQzlERUE5NUNGQTIxRjU1QkU5Njg0QjQzMzk1RDBDCis6MTAxNjYwMDBGOTgyOTlFRTc5N0YyOEU2NURCNjM0QTdFMDIzQTBBQjM2Cis6MTAxNjcwMDAzMjczMTJCRDJCQkUyMDUwNjJDMUZDODIwNjg1RjJFMTlFCis6MTAxNjgwMDA3NkE5Qjk0OEE3NUZENkJEOTg4OEY0QjMzRjJFRDQxNzgyCis6MTAxNjkwMDBGNTU2QzdBMjM4MkY5RTU3OTRGMUI5MkZFQkZBNkVDMEJBCis6MTAxNkEwMDAzOENFMkM2NzlCMDNFRjZCQ0RCQUFEQjcwQkU1RkM1RTc0Cis6MTAxNkIwMDA2N0M4ODJFNTdCOUJGMjRDOThENzlEQ0UwMkNDRUJEQUQzCis6MTAxNkMwMDAyNTk0RkY1MjlDNTdBMTNGQTQxNzg1RTM3OUMxRTZENzIzCis6MTAxNkQwMDAyREJENjBCQzFGQzQ3QUJGN0FGNkZEN0NENDZCOTVCOTcyCis6MTAxNkUwMDA2REY5QTg3RjgwMEVGMkIzMTBDRUNGMjhBNEI3MTc2RTg1Cis6MTAxNkYwMDBFNkU3RjgyNTFEMkM0NDNBMDBCRTlCMjdFODYwRTFCNkRBCis6MTAxNzAwMDAxN0VGNDA3RTU4ODhGODFGREM5NThFODA0RTc3RDBGNzEzCis6MTAxNzEwMDBBREVCMjczMERFN0UwN0QyODlENDc3OTBBRjMzQkIzMDc0Cis6MTAxNzIwMDA1RTI3RjIzMDBFRTY0RjIxM0M4NzUxRjkzODVFMUUxOEQ1Cis6MTAxNzMwMDBDMENGMDNCNkQzRjlDNjJBNzE5RkIzNTMzRTc1ODNFNzcyCis6MTAxNzQwMDBDQzZDQjE3RkI2RDQ0QUYyMzYzMzlCQUZCQjdERTUwQjkwCis6MTAxNzUwMDA4OTg4QzdBRjlFN0Q3RDI3QzY4OTJCQjc4MjU2RjdDNDdGCis6MTAxNzYwMDBFMDBCMDE5NzJBODQ0MzIyQUQ4M0VDOTAyQTVDNzc2MkQ4Cis6MTAxNzcwMDAxODBFOURGNDJGRjhCMThBRjE3NUNBNzU1NzY5MDIwRURCCis6MTAxNzgwMDBCMjVDQjRDRkNBRTZFQjVDQzAwNERDQjY1REMwRjk0RjE2Cis6MTAxNzkwMDBGMDFCRjIzM0JEQkIyNEQ2RTc3NzE5REY5N0Q3QzVGQTI0Cis6MTAxN0EwMDBGQThCNzQwMUQwMDVERTVGNjM3ODdENTNDQTA5MjhGQThECis6MTAxN0IwMDA2QUNCN0E4QTEzNDk3Q0M5Nzk0RkNERjY0ODNEQTIyNzc2Cis6MTAxN0MwMDBCQkMyNzg2QzM3QzU3RTVGN0I1NDM2OTcyN0ZCOTZGNzk0Cis6MTAxN0QwMDBDODZEMDZCODdEMDlGRTE4OUQzNzAwN0FENTIyQzY5M0RDCis6MTAxN0UwMDA3NDIzQzcxQkZCREIyOTU3RTE3QUExRkYxMEY2MkZDNzMzCis6MTAxN0YwMDBERDFCNDhEMEIwOUZCRDhDRjMwN0QyMjdDQTRGQzk5N0Q1Cis6MTAxODAwMDA2MzZCNjc1QzM1MDhDRjQzMDdCRTcyRjQ0NjdCNUJFMEQxCis6MTAxODEwMDA2RjZBMzY3RjA3NTA0NzNCMDFEQUVCQ0QwQUM1QTlGNzVGCis6MTAxODIwMDAwOUZGN0ZERkYyMTcxM0NCMjJFMEU0MTNGMzk2NzQ4NkVGCis6MTAxODMwMDA3RjE4QkY5MkYzRERFNUUyNzFERkU4Nzk0QjM5MjRFN0U5Cis6MTAxODQwMDAzREY2OUUxQkFFQzJFRjcyRkU5MjVFMjU3RDRBMzg0QTdGCis6MTAxODUwMDAzQTk1RjcwM0EzRTk5NTY4NERFQTRGRDUyMEVGNDkzRjQ0Cis6MTAxODYwMDA1RTkxRkQ4REM1NkZFRkZBM0QzQURGNjkzN0Q1QTVFRjgzCis6MTAxODcwMDA4OEJDRjdCNjVGOUM3N0VGNDg2NTNDREVDRjgwNkEyMzczCis6MTAxODgwMDBGNDhFRDRGMzExN0E2NUI1MTZBMTU3QUFEQzNBQkRCNzI4Cis6MTAxODkwMDAzMzY3RThBMjdDRDQ2MzJGNjRGMzczMjk0NzU4OTNBNTc4Cis6MTAxOEEwMDAxMEZBNUI3MEE4NkQ0MkEyMjc2Q0FGNUVGQTZENDhDNTU2Cis6MTAxOEIwMDBGNzZFMTY2Q0UzRTdENzI0REMxNzFDREQ0MUY0NUYyOUQzCis6MTAxOEMwMDBFRTZGOTVBRTdDQkY2NDA0RDJGOUQzNjZEQUU3MkM1RDg3Cis6MTAxOEQwMDAzRTlFRUU2OUNGREQzODczMzhEMjExREVGQjQwQjk3RTEzCis6MTAxOEUwMDBCODcxRDgxMEZFNUM5QjMzRUQ3QUJDRkZEMUY4QzBGNTFGCis6MTAxOEYwMDAzN0MxRjc1OUNEQUE5N0U0M0JGNDgzN0M1QjdBRkIxMEEwCis6MTAxOTAwMDBBNkQwN0FEQjRCNzBGRkI0RTM0RUQ1ODk3NkZFOTg4RDc2Cis6MTAxOTEwMDBDM0VFQzZGQTYzMUMzRDkzNzEzRDdBNjMwQUU1NzUyREVCCis6MTAxOTIwMDA4OUY0ODNCNDhGRTVCOUJFNUEzM0E3OEI1RjY3NzM3RkExCis6MTAxOTMwMDBGNUUxQ0U1NDExRTdGOTZBRjM3MUZGQkQ2MzdEMUNCRDdCCis6MTAxOTQwMDA3MzM1REQyMkVFQkI2RUVGNDE3RTQ4OTUwNUFGNUVEMjZBCis6MTAxOTUwMDBGRDU5QjJDN0U2NTg5ODJEODM5RjBGQjc2NUMwRjdEREQ0Cis6MTAxOTYwMDBFNkI2REI1MThGRUNCRUREMzE4OEVFMUZBODNGMEMyRkIxCis6MTAxOTcwMDBFM0ZFMjNDREEzMjRDNUY4QUU5NDlDQzcxMzgyREVBMzU3Cis6MTAxOTgwMDBGQjkzRUQ3Nzg5RjNEOUZCQzVGQzBGRDczRDdEM0RFQThECis6MTAxOTkwMDBDMUMzOUJGQUJBNzBERDVGNkM4RkEzRjc3MUJFODg3QTAyCis6MTAxOUEwMDBBRkYzN0NFRkIzMDFGRDQ2REQxNzVCNDZGMzZCQ0FCNkMwCis6MTAxOUIwMDBGM0ZCNUNDMjhFOTNGNDdFRDZGQjVDOUZCOEEzRjYxMTVBCis6MTAxOUMwMDBDRTdDM0VFOTY4MERBMzdCRTdCNzgxMkQ4RUVEQzcyNTYwCis6MTAxOUQwMDA5QzdBMUVDRjA1Q0U2RUIwM0FGMURFQ0YwMUE0NzdEQzQzCis6MTAxOUUwMDBCRjdBNDFFNUY3OTM2RDlDRkUwRjZDMTkxNDQ0N0Y3MzI5Cis6MTAxOUYwMDBGNjI3RkMxRUQ2OEVGQkVGQTE3MzA5RTU2MDVGRTJEMUVFCis6MTAxQTAwMDBDRDRFN0JGOUMxRkJBRjQ3MzYzOEVFRjVBRkM4ODA3NkQ3Cis6MTAxQTEwMDBDNzM3RjE3MzE0NURERTc3RDhGREZDQ0VDOEY3MURDRTU1Cis6MTAxQTIwMDBENzRFM0U1N0ZCNThDNjIzM0VDOTM2QkUxRjIwRTEyQTdCCis6MTAxQTMwMDBGREE0NTcwMUZGMjMwNzg3RTFGNDc1Q0QxQ0IyOEY4RkZBCis6MTAxQTQwMDBENkY4MjkzREE2RUNCQjZGMENEMkFEMjM4OUVFMzdCQzhFCis6MTAxQTUwMDBEQ0ZDODA4QUVGRDE1NDZFMUJGNDAzRkFDNUEzRUQ0OTc4Cis6MTAxQTYwMDA0RUU0RDdBRjZCOTZEMEZFRThEMTlBNkFGRUVFNEFFNzE1Cis6MTAxQTcwMDBCQkNBNDE0QTJGRERENjRBRURCRTZFMUVEMjgyRjc4MTI3Cis6MTAxQTgwMDA1RkIxMjcwOUI5MUZCRDFGQzRGMUQ4REQzRDY3QjlBRUVECis6MTAxQTkwMDAyMzc3NzI3Q0NBNzkxRkQ5MzQzMzExRDdENUZBNTg0QUMzCis6MTAxQUEwMDBDQjI4QzQ2MzQyOTIxM0VEQkMwQTcxNEVFNEUwNUE2RTM3Cis6MTAxQUIwMDA0NzFGQjIyNTNEMzkwOUUwNzM2OEREMzU2OUY4NUU1MDhFCis6MTAxQUMwMDA3OUVCQjVEN0UzRjdEOURCMTUyN0RBRkZERUVENTMxMjUzCis6MTAxQUQwMDBEMTNGRkI1QzZCNEZDNEZCNUY5RkFGOTVGN0M2ODJGNEIxCis6MTAxQUUwMDA3RUVGRTg2MjQ2RkI1NUEzNDMxQUYzRTREMUQ2MzNEMTI3Cis6MTAxQUYwMDBDOUE4QTMxQUREQ0ZGRDEyRjdCMTMwNUVGMjQzM0NDNTkxCis6MTAxQjAwMDA0Qjk4RDg5RjJBN0Y4OUM3NTkzQUZENTlFMUNGOEQxMTRCCis6MTAxQjEwMDBFQjFFOTFFMzkyRkIwRUY0N0RFQzQ4RkVGRDhCNzVDRjNFCis6MTAxQjIwMDA0RkM2RkUwRTM3OUE5RDM4RUZBRjFCRjkzQjE2RjNDMDM4Cis6MTAxQjMwMDAwRkMzQUIwMDg3MzY3MTNGNjc1RTkzNDI3RUYxRTE0RDg0Cis6MTAxQjQwMDBBMEE3NjE1RDk1OEJDQzNBREQ2QjhEQTJCRkIxNTA4RUE1Cis6MTAxQjUwMDBFNzIyMjVGRENERDM4MzQ0RDdEMUVGOEMyNEIzMjZCQTE5Cis6MTAxQjYwMDBGRkY2NjNEMUUzQzUzOTQ2N0ZBRDkzMEVCQkMzQkY4MDlCCis6MTAxQjcwMDAxM0YyMkREMkExQzRGM0JDQjVGQzdENUI1N0QzQTA0MkI4Cis6MTAxQjgwMDBBNDI3ODlGN0U4N0IwRUI1MTY0NkY3MTkwMkE2Nzg3QURFCis6MTAxQjkwMDAxNzdBOEFERDYzNTY2MEZERDdCOERCQzdBMUY4N0MyNENECis6MTAxQkEwMDA4N0NCNDU3NUFDNDlDN0ZCN0FBQzk2QkY2M0QwMjUzRTYxCis6MTAxQkIwMDA5REMzRTVFODlCMzk4Q0QyQjIxQzdFREU1OERFNUI5Mzc4Cis6MTAxQkMwMDAyOTJDMjQ4N0RFNjU0QzcwN0RFNzgxMkFEN0U0NkM5QTQ2Cis6MTAxQkQwMDBBQ0MxRkNBNzhDNzFERERFREJDQkQ4Q0QzOUNGNERENkM3Cis6MTAxQkUwMDA4MDZFQTcwQzcxQkREMDBCRjIzMzFFREZDQ0YzOTdCODFCCis6MTAxQkYwMDA4Njk5MjFCRjU0RjlEREU0NzE5MEJGMkI0NzlGOTI5M0UyCis6MTAxQzAwMDAxQTFFNDdGNjBCREZBRkM1RUY4NzUyRkMzN0U0MEM0M0QzCis6MTAxQzEwMDAzOUNFREYyRDNCQTY3NDBDNUM5MjE3QUVGRjlFQzJGNjQ4Cis6MTAxQzIwMDBCRUFDODRGM0VENjY0NkVGRTU5NEUxRkM1M0JCNEYzNzYxCis6MTAxQzMwMDBFNEU4RkU5QzYxMzFDQTE5QTNGQjYzNjUwMTdFMUYwOEJECis6MTAxQzQwMDBGRTdDQjYzNDNBQTc0NkY0NTQyNkVGMDdENTFCRUYwN0JGCis6MTAxQzUwMDAzMTJGQkY5RjI2RUY2REM5N0I1OUZEQzNGN0NERDY5REIwCis6MTAxQzYwMDBDRjdEQjM2M0UyN0U1Q0Y0QkQzRkE1ODVERjk3QUIwRDBFCis6MTAxQzcwMDBCMEY2MzhDMjQzRDQ3RDlGMDRGRTdFRTNFMjE3QkVEQTlECis6MTAxQzgwMDA4MTY0MzU1N0RBMkJBODZDODc4N0RGMzk2MEU5RkNCQ0EzCis6MTAxQzkwMDBDMEVEODIwRUJGQTg2MTdERkEwMDJCNUZEREQ2OTZFODBECis6MTAxQ0EwMDA4MUM5MUU5RDFDQ0E0N0ZFRjY1OEZERjUwOEE3MkZENjEwCis6MTAxQ0IwMDBENTY2MkY3NkUzRkQ1OEFCNzcxMkQ0M0YxNEU0Rjc0Rjg3Cis6MTAxQ0MwMDAxNzA4QkI5MzM1QTYwQTNFNTc0Mzk3NDNCRDVENzlGRDgwCis6MTAxQ0QwMDBFOTlEOEI1RjBBN0EzQTlBMTdDQUM1Nzc4NzAyNzlEQzQxCis6MTAxQ0UwMDBDRjgxN0E3NEZFQUQ3OEQ5MTVBOTU4RUZFODk2N0JGQUMyCis6MTAxQ0YwMDA5NDAzREVBQ0Y4QUU5RjhCNTI4NkY3QzVBRTg0QkU0NzI4Cis6MTAxRDAwMDBCQUU4QkQzRkE2RDJGRTZFOTBGQUMzN0E4OUE4RDczRDQ1Cis6MTAxRDEwMDAzM0QzNzlGQzlEREYyRjk0Nzg5MkYwRUY4MjE3OTgwMkVECis6MTAxRDIwMDBEQUE1MjYxQjMzRTNGQ0ZCQjM3NTRFRDRDNzEyM0ZGMjkyCis6MTAxRDMwMDA3RERCQzUyRkYwMzhDQTYyQTVCRDJFMDVGM0NGMkE3NDBFCis6MTAxRDQwMDA3RUVFMEIxQkJGMEZENDU1Q0Y2REI0MjBBOEU3QUM5QjI0Cis6MTAxRDUwMDA2OTc4Qzc0OEJFMjNGQjYzQzc4MzVFQ0ExMUY3QzIwNzExCis6MTAxRDYwMDBCMTQxOTFFRkY0NTY4OEI2RTNENUU5MUU3QzY3NzQ3MUYyCis6MTAxRDcwMDBBQThEREUzNzU5RkM3ODZGRDIyNzJDNzAzQkQxODFBQzBECis6MTAxRDgwMDBDN0Q2QTUxMDdEQUNDODUzMDlDRTczOUIxOUJENEY1NDVGCis6MTAxRDkwMDBEMjlDNDlFNzFEMjczNUJCMjg0RDNDOTk0RURGMEYzRkFDCis6MTAxREEwMDBGOUQ2NTAyRTdGMzgxRTRBOUVFQTQxRUY4QTk3M0M3NTNECis6MTAxREIwMDA0MTExN0Y3NEFGQ0IzQjQ5RkMzRDZEQkI4REVFMUIyRkJBCis6MTAxREMwMDBERUNERjVEMkUyRUI1NDhBNTMzMjcxMEZDQzI3QTZFMzc1Cis6MTAxREQwMDBCM0Q3NTM1Q0M3Qzc2MkJGMEZFQzkzRUYwM0VCRTYzMzk3Cis6MTAxREUwMDBCRTBGMkNFMTZCMTVGODg5N0UyRkY4QkFERDQzRDJEMUY2Cis6MTAxREYwMDA1Rjk1RUYwNUNCRjcwOERCQzQ3REFGRTg3NzgzRUY0OTRDCis6MTAxRTAwMDA5QzQwRUYwNjRGRDNCOTFFODk3RTM3NTgwQkM0NzlEMTU5Cis6MTAxRTEwMDBCRTM1NjdEQkY5QkIxNkZFRTg3Nzg0REIzNTVDRjdGNThBCis6MTAxRTIwMDAwNUZDMURFMUVCQTYxOUVGRDM5OTBCQkUyMTM5NkQyRUYwCis6MTAxRTMwMDBFOEYyOEU5MjE5RTlEQkVBMzNENkZGQkJENDJGRkQ1OUM1Cis6MTAxRTQwMDBGRjMzQkVEMzlDNkRBMUY3RjAzNDdDQzcxQ0YyRDc4QjU3Cis6MTAxRTUwMDA3NzlBRDE4RTQzRkJGQ0I4Q0VERkRGQjNDNkYzNzVCN0ZDCis6MTAxRTYwMDBCMUExRTlDOEY3RkZCRkJGNEY3RUI2NzdDOUEzREYyMTk1Cis6MTAxRTcwMDA4RjdFN0Y3Q0M4QUU1RjFBRjJDM0RBMUUzNUQ0MUZGMUE1Cis6MTAxRTgwMDBEMTA2NDNGOUE4RjY2NzBDRTU2MzBFNkQzNUU0MkZFRDM2Cis6MTAxRTkwMDBGODgzQTFGRUU1Mjc1RjMzRTQwQkQ5NUI4NkZBNjM2RDE3Cis6MTAxRUEwMDBFRjFCRjJFMzlEN0YzMUQ0QkYyMjdEQkZBMUZDNEFDRjVGCis6MTAxRUIwMDA5Nzg2RjI4OUZENEUxOEQ3QTNGOTI3RTQyMjNGN0JGRkNFCis6MTAxRUMwMDA2OTY4Mzc5OTc5N0U4MUVGN0JERkUwMzZEMUJCMjZDNTIzCis6MTAxRUQwMDBCOTQ2QkExQjk3QzNFMzBBQUMwRkNCNDVGOTM1NUU5REYzCis6MTAxRUUwMDA0NEVGMjQxRDZGNTJGOEZCRDJEREU4QjEyNEIwRjdCNDAzCis6MTAxRUYwMDA4ODcxOTI3NTFCMzg4MkUxN0M0QUIxRDM5MDRGRjVBNTY5Cis6MTAxRjAwMDAxQkVBRjc5OEU2MzE5NDY3RjhGQjE5Q0FCM0U2NzgwRDM3Cis6MTAxRjEwMDBGOTlDRUE5MTg2RkEzRDk3RTg4NjdDNUVBMEQ4NTBCRjhFCis6MTAxRjIwMDA3N0JEQ0Y5MEVGREIzMENENTBGRjgyQjU3RTQzNzlGRjk4Cis6MTAxRjMwMDBFMDFDNDNGOTQ1OUJBQTBERjk4QjlCOTYxOEVBNUZEMkVBCis6MTAxRjQwMDAxQzMwOTQwRjBBRDUxQkNBODdFQzZBMzBFNDg3QjVBRDA0Cis6MTAxRjUwMDAzNUQ0MUZGMTUxRDA1MDNFQUE3RDkzQTE3Q0NDQTEyNjRGCis6MTAxRjYwMDA0M0ZFRDI4RTY2NDNGRENCNEY4NjBDRjk0MkI2REI1MDYyCis6MTAxRjcwMDA3RkFDRUQzRDQzN0VCQ0YzQ0Y4NkZBNTdBNEVGMzM5NDlDCis6MTAxRjgwMDA1RkU5Mzk2QzI4NUZGMEE1OTdFRTRCQjM5N0Y5N0VEOERGCis6MTAxRjkwMDBDNDdFREYxOENBQ0Q2RTQ2RUY2MDU3QjI3ODJGRUUzQjk1Cis6MTAxRkEwMDA0QUJCQTZDNEZCNzc0M0JGNEZFNkYyMzgwQUQwNTI3QjQ4Cis6MTAxRkIwMDAxQ0JFMUYxOUYwNTFGQ0M3ODUwNzAyNTE0RUUxM0Q3NTRCCis6MTAxRkMwMDAxNzNGNEYzMzlERTI0ODZFRDI2RkE0OEEzQzc4QkUwNzFDCis6MTAxRkQwMDBFQzgwNDRGNEFFRjJGMkQwNEU0RTA4REI2M0Q5QTcyMzc2Cis6MTAxRkUwMDBDRUQ3OURDRDFFREI5NkNCNjgxRUZCNzNGRDRGRTdBNkJCCis6MTAxRkYwMDBBMkZGQjE2NTAyQkRGQkNFMDIyQjcwMUVGMjNEQzA3NzgxCis6MTAyMDAwMDBBMkRFQkI5NkU5OTVCNjQzMkNGMjVERUNERDcxMEREOUVECis6MTAyMDEwMDA4M0NGRTBCRjVGNjkzQkNBRjBCREVEQ0U3RTQ1QkM0MkQ5Cis6MTAyMDIwMDA4MUY1MkQ4RUU4RkYzRUYwMTdCNDNFOEMzNUQ0MDBGRkNECis6MTAyMDMwMDA4MDhERjRDQjFBMjdFNTFGQUM0OUE3RkNDMzM1MUU0QTk3Cis6MTAyMDQwMDBEN0Q2RjRBM0Y0RDExQTJGOTVBRkFCMTk0OUY5Mjc2QTYzCis6MTAyMDUwMDA3NENBMDc2QjhBMjlERDUwRTNBM0VGOEQzNUQzMjhGRkJGCis6MTAyMDYwMDAyNEY4QzU5ODZFMDIzRjE5RDM2N0MwREZDNUYyQ0RFMEYyCis6MTAyMDcwMDBGRjYyRkVCOTlBMDBBNTREMzVGNUY0N0Q2QjREMDNFNTgxCis6MTAyMDgwMDBCN0Q1QUNBNUZDRUY2QjgyOTQzNkQ3NkNBMkY0MEYzNUI0Cis6MTAyMDkwMDA0RDU0REU1MkQzNENGOTU3NkE0Mjk0MEZENUVDQTJGQzUyCis6MTAyMEEwMDA2QjM1NkQ5NERGNTFGMzExRTU3N0Q2QjQ1M0JBQUJFNkQ3Cis6MTAyMEIwMDAxMEE1NkZENjc0NTBGOURCMzUyNzI5N0Y1NEM0NURGNzFFCis6MTAyMEMwMDBFNTFBRjcyMzY0NUVCRTVCMjFFREJGQzk2OEJGMjM3MUNCCis6MTAyMEQwMDA4QzM0N0Y2REIwREZBM0VDRTg2ODdDMUMxMUUzRTAzQjNGCis6MTAyMEUwMDBCRDQzODE2RUNEOTlGOTFCNkEyM0ZDQTdBRkM0NzhGMjdBCis6MTAyMEYwMDBCRDhBRTg3NzI3OThCMDRGRTVGQkIwRjIzRDhCRDk2MkY3Cis6MTAyMTAwMDA1RTE1ODJGRTg3MjE3REY2MjNGQTdDRkI3Q0ZDMDVFOUM3Cis6MTAyMTEwMDAwRjVFOUJFQTNGNDVGNDk5NjMwQTkwM0Y2Q0U3Rjc5MUE1Cis6MTAyMTIwMDBFRjQ4RjVCMzlFQzM3MERGQjA3QzI3OERFN0Y0RDJGRTk1Cis6MTAyMTMwMDA2MTg5MzU5NDdBQzM1MDdBMDc5RUUyNzJERDhENTcyNTA2Cis6MTAyMTQwMDBDRTg5Nzc1QkZFQ0FFMTZDQjRBNzhCRkZBNUQyN0I2NDE2Cis6MTAyMTUwMDBFRjk4MURGNEJCOTcyOTNEMzk1QzUyN0E5QTBDRTkzRjAwCis6MTAyMTYwMDA1M0ZEQUU5RTkwN0VFRkE4QkVDNTA0RjNGRkZFQjI0NUMwCis6MTAyMTcwMDA0RkZFMjQyRkVDMjc1RjhEQUUyNkY4Mzc1Mzk4Qzc0Q0JGCis6MTAyMTgwMDBFNzExOTlGRUM3M0NCNDlCQzBCMEMyRkMwRDJDNDA2OTVFCis6MTAyMTkwMDBDMEVEQ0ZDMjc1REQwODA2MzdFNkZEQTNBREI5QjFENkY3Cis6MTAyMUEwMDAxNTNEQUY3QzMxQUY3QzMxMUY5OUY2NEZGM0Y3QzVGRTdCCis6MTAyMUIwMDBCRTc3RTgzNEFGNzc0NjVEOTE4RkVCOTJGMzlBMjdERUQ2Cis6MTAyMUMwMDA5RDk4Q0MzQTlFQzBGOTdEQkZGRDlCODM0QUVGMzBGQ0MxCis6MTAyMUQwMDBBNTNGNEVFRjAyQTBCRkIzNDgxMUVGRkY3NTc5N0Y4MDk2Cis6MTAyMUUwMDBDQUE3REZBRTkwN0QzNjAzRkMxOURDMjc5MkVGMEQxQ0U5Cis6MTAyMUYwMDBBRjM2OTM3Q0M0RjcwOTcwMUZFRDc4RjVFNzc2MjQ2NzU2Cis6MTAyMjAwMDBBOEM3NzA5RkEzMTYwRkY2NDA3OUVEQ0YxNUEyQUZFOUNFCis6MTAyMjEwMDBGODhFMDhCNDlGOTE5NkM3RUY0QjMzOUI4RTdBNzg3QUVECis6MTAyMjIwMDA4Qjc1M0REMkU5NzRCMEY3RDA3RjAyRkEyODQ0QjhDRjVECis6MTAyMjMwMDAxQkE1RDI3REY1Nzc0Q0MxN0M4NUY2OTNDQjJEMEFDQ0JFCis6MTAyMjQwMDBBQkMyRUQzNUZDOEU0NDM0RkUxNzhBRkIwN0YyM0JEMDVGCis6MTAyMjUwMDBENTQ0ODREN0Q3MkY4REU4NDdGMUY3NTc0Njc5MTA0RUVDCis6MTAyMjYwMDBCNTI2N0VFRjI4RjBBNjJBN0VERjhCOEI2Njc1Q0NDNTVGCis6MTAyMjcwMDAxNDVGNjQ5QUQ3OEI3MUEyMTI3MTRGQTU1NTY1NEI2MjlBCis6MTAyMjgwMDBCRDFGNUYyOUYwRjQ0RTNBN0Y1RkIwMzY2QTlGQTVCQzUwCis6MTAyMjkwMDAyN0Y3MkZDQjdCRjJCODczQzk2QkJCRTk5REE1ODVCQjM0Cis6MTAyMkEwMDBGODdCOTA2QzY4RkI4MEM4Nzc3OTNBRDdCM0U0Q0RGRUIxCis6MTAyMkIwMDA3RDIyRDY1MUQ1QkM4RjlGQUY2MEVEMDMyMkNGOUZBRjVCCis6MTAyMkMwMDAxMEUzNEJGQTUxMkQwRUZGN0E3QkU0RkMzQUU5NzkwMUQ5Cis6MTAyMkQwMDBEMTczMzJEMDczNkZBMkU3ODNCOEFGMzhEOUVBNDlCQTY1Cis6MTAyMkUwMDA0MUMxNUZDNzYzNUZFM0ZCNDdGRTVGM0JFOTNDOTEzQzU1Cis6MTAyMkYwMDA1NzM0OEJGOTI4QUQwMEY0MjNGREZBMDJGN0QzN0JCN0VFCis6MTAyMzAwMDBGMzU4MTM3RDVGMzg3MjI2RkQzRTZEMTVFQjE4OTcwRTVFCis6MTAyMzEwMDA3MEJCQUU3RUU5MUZGMUI5QzA2QjFBRUUxRjhGNzFENThECis6MTAyMzIwMDBBOUMxRDIzRjYyM0FBNTUxMzk4OEZFMjlGMEMzQ0YxMTI1Cis6MTAyMzMwMDAxRkVENEFGNTcyM0NDMjc5RDNFNkMyRTVCODM1Mzg1OThCCis6MTAyMzQwMDBFNUY4NjA2RjcxN0MwMEJERThBQUFCRUIzQTgxRkU5N0JGCis6MTAyMzUwMDAxM0ZEMjdFQkI0MEUzNUIxRDg0MEZGRDM5NzMxNUQ3MTMzCis6MTAyMzYwMDA4N0NGQzc3N0YyQzNDOEY5N0ZDNTJENjBBNjc1RDBCRUU5Cis6MTAyMzcwMDA3OUQ1MkI1NjE3RTI3OTFFRTNGQTNBNkNGRjQ5M0RDRDI5Cis6MTAyMzgwMDBGNUZGN0NEMEZGNThFRjg4QTBFNzIzMzk4Q0VFMjExQ0E1Cis6MTAyMzkwMDA1MTE4REQ2Rjk3RjYyM0NCRjVBNzBGRUUxREQ2Qjc0NzgzCis6MTAyM0EwMDA0Q0MxRTE4OUJENDkxRkFGQzNGOUVFNENCRjg2REUwRkJBCis6MTAyM0IwMDA5QUVGQjZEMUZCQjA0NzkyODNCOTUxRUZBMUQwN0I0REQ0Cis6MTAyM0MwMDAzMjdFNzU5Rjk5Qzc5M0EyRTdBNThDRENDOTdGRTdDNENECis6MTAyM0QwMDBDMjAyQjgyRjgxQkZGMzNEMUNGOTM4RDM0MjdDNTY4QjIzCis6MTAyM0UwMDBBMEM1Mzg1ODkxQ0YxM0FCRkYzQUQxRUZBRTUzRENDRjM1Cis6MTAyM0YwMDAwREU0RjA3NzRCQkE4Q0UzMTRFM0M0RjM3MUE0REVFODg4Cis6MTAyNDAwMDBGQzVERjEzNDY2MTg2RjdCQ0YzQ0NFMDcwRTlERTZCRkI2Cis6MTAyNDEwMDBENDk0NEM3MjI2QzNFNjZGQzFGNUNCNzg4RUY0RkY3NjY4Cis6MTAyNDIwMDBFNTdERDE4N0ZDRjQxRjZBRTkzRDI2N0FCRjAwQ0ZGNTMwCis6MTAyNDMwMDA1Q0M2RTVEMTNCNjYwRkJENEJGQzRFNjExRUM1RURBNUVDCis6MTAyNDQwMDA5Q0JEN0EyNDhGN0I1RDJERTM1QzA1NTE3MUFFQTgzODZECis6MTAyNDUwMDAwQjJCODgxREY3NjJDQzZCQzY3MUZCQjM0RjI0N0MyODE1Cis6MTAyNDYwMDBCRUYyNUE4MTY2RjgzREIxRDc4NERGNzlCQ0Q4M0Q5NDdECis6MTAyNDcwMDA3RTJGQ0FDM0NGNTkyNUE2RjBGNzQ2M0ExQzJBRDFEOUQ4Cis6MTAyNDgwMDBFQjAxQUYxRDdGOUY2NDk1ODg4RkFFOEU3QTE3N0NENTQ4Cis6MTAyNDkwMDBEMEM1NEUzQzE3NjA3NUYwRjczRUQ3MTRDNUNGODkzQ0M4Cis6MTAyNEEwMDBCRkVFQ0VFN0VGQzMzQzk5NUY5OEUxODE3NDgwM0Q1ODYxCis6MTAyNEIwMDA0NDZBNTlENzNDMzg3RjQ1QUNFNzIyMjdDMERCODRGNjE1Cis6MTAyNEMwMDBBNjRGQzQzOUU1RUZEQzhDMjNCRDJDRjE3Q0FFN0FGOTQ0Cis6MTAyNEQwMDAxOTJEQjgyQzFFRDdFQjY2QzQ3NzhFQjUzNjkyOUY2QTNECis6MTAyNEUwMDA5MzFFQzJBM0Q0QjNGMkE3MUU0N0I5QzEzNDVGM0YxQ0U5Cis6MTAyNEYwMDBBNzc1NzgzQ0IzNDNGREVGNUIyRDE0N0Y3QUM1NTRGNjg2Cis6MTAyNTAwMDA2QjdDOTdCOEUzQ0Y1Njg2RTcxQzlBMUM1OTFBMUFCNzBBCis6MTAyNTEwMDA0REE3MkUxQzQ3QTk2M0NDMDRGRTNFMjc0QkMwNzc0NDMxCis6MTAyNTIwMDAwNzM5RDk2RjdFODc0ODEyRjdDOTJDRTlDRkY4MEU4MDlBCis6MTAyNTMwMDBEQzZFNTJEODJFRkUwRTk3OUU4MEVGRTEzNTk5RDg4OTM5Cis6MTAyNTQwMDBDQjYxN0VGRjBGQTY0QzA4NjMwMDgwMDAwMDAwMDAwMEY2Cis6MTAyNTUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwQjc4NTRENUE4Cis6MTAyNTYwMDBCNUYwM0UzMzY3NEU2NjI2OTM3MDMyNzkzMEU0MDE2N0VBCis6MTAyNTcwMDA5MkM5OEI0Q0UyOTBGMDU0QUE5MzEwNjg0MEQwRTE1NTc4Cis6MTAyNTgwMDA4MzI0M0E1OEY0NDY4NTRDOEFCNDQ1QUY1RjMzOTAwMEIzCis6MTAyNTkwMDAwMUY0MkZBMkI1NDhCRDc2NDBBNTY4QjUwRDRBNkQ2QzEzCis6MTAyNUEwMDAyMzc3MDI0MkIxOTdFQTYwNkQ4QkJEQjU3RkYwRjZGN0Y1Cis6MTAyNUIwMDA2QUFEMTJDNDdBQjFBNUU1QUVCNUY2M0U5OTM5OTMwOTc0Cis6MTAyNUMwMDBBMkJEN0ZGRkVGQkZERjhEMUZFRUVDQjNGN0Q5OEZCNTU0Cis6MTAyNUQwMDBENzdCQUQ3REYyOENBM0Y2RkVDQjE4NjM5MzU5QzBDQ0FDCis6MTAyNUUwMDA0QTE4RDM0QTgzOEE5NkNCRDg1NEQ2NDFGNTdCOTU0MDc2Cis6MTAyNUYwMDBEQkVFMUMyODlENTY1RjE4RkFENThFMzNGOTE5RDREOTE1Cis6MTAyNjAwMDBDNzhFNDhBOUM0NThFMDk4NkMzMTNCMThFQkYzMDQxRDAxCis6MTAyNjEwMDBGOERFMDVGQ0I5MEE5RUJCNEMxNkM1Q0JEODQ2ODVCNTdECis6MTAyNjIwMDBGNTQyOTlFMUIzMzM2NjY1RjQ3MzAxRkUwNUNFOTUzMTQ5Cis6MTAyNjMwMDA1NkM3RDg1OENEQzREODE0QzZCQTVERkU5ODVGOEFCRkI1Cis6MTAyNjQwMDA5RjVDMzI1NTFFMUFENERGMkZDNkZGMTdBQTZGQTU4QkM5Cis6MTAyNjUwMDBCQTk5MzFBRjIzRDIyMDYxQzUyRjZCRUE1NEM2RTg3NzBGCis6MTAyNjYwMDA4REIxMkE5NTA1MkQzMDQ1MUEwQjMwREMwRjlCRUVCMzRBCis6MTAyNjcwMDAwNkFBQjFCMTUxN0RBQjAyRkJGOUE1MEJFOTE3OTk5N0Y5Cis6MTAyNjgwMDBDOTBDRkJFOUYzRkM2MTAyQTNGNTFFQjI2N0Q2QjAzMUI5Cis6MTAyNjkwMDA4Qzg1MUJCNEZCMUEyNzQzRjk1M0IzQUY4QjdBQTk5M0VDCis6MTAyNkEwMDA3MUZDQ0M2QzE2MzVDMUYzQTEwQzczNjQ4RjlCQjFDMzY0Cis6MTAyNkIwMDA2MUVEQTk1RUE4MUY5NkFCMDg4RUY3NzRDMjY2MDAwNDkwCis6MTAyNkMwMDA1QjNCQTFBMkM0RTdEQjNBNzk4REFBMDEzQ0QzMzJDQ0IzCis6MTAyNkQwMDA1RjNBOEM3MDJFMzJBOUE1QjA4RkNERjNFRDREMTE4MEVECis6MTAyNkUwMDBFM0JEMERGNjM2MkM3M0NBMkM4QzAxQkM5NzE2NUI2OEMzCis6MTAyNkYwMDAzRDdCQ0JFQUJGNUQwQ0Y1NTY0NzYwQjZBNDcxMzhCMEEwCis6MTAyNzAwMDBCQzM4MUNFMDAxRTNGQjBEMzJEQzZGOEJDQTA2QTU0NDJDCis6MTAyNzEwMDBCODMwODA0QjA2REYwMEJFNzcwRERGMzJCQjQ2NjZFMTg2Cis6MTAyNzIwMDAzMTRFQzY1RTlFRjFGNjYzQkQzMDRFQzY0RTU4NzczNkNBCis6MTAyNzMwMDBCQ0RGNzE0NjBFQzIzQUQ4RjkwQjU3RDkwMURFMDFCRDk0Cis6MTAyNzQwMDBGRjRDODlCRDk5NzhDRUYwRUZDRDBBQjEzRjM3QzE1MzI4Cis6MTAyNzUwMDA3RDRCNkYzNzVGM0FEQzJENEJENjU3MzA1OEVGQTY0RTg2Cis6MTAyNzYwMDAxN0MxQUI0N0YyRjlDN0MyNzg3MkM3QTkzQkYwRjk0NjY3Cis6MTAyNzcwMDAxOTNBMDJCQ0MyNUUyNUYyMzhDRTIzMDcyQTcwM0ZGQTBFCis6MTAyNzgwMDA3ODJCQ0IxQTZFRDAwMDRFMTlEM0ZFOTA3RTBCRjRGQjQzCis6MTAyNzkwMDAyOENGQTQyMTcwMzY2QTM3N0RERjhFRTc3NzMyOURFMTNFCis6MTAyN0EwMDA3Qjk5RDlCMUI2NDdBMTdERThGNTcyQjYwNzg2RjlFOEZECis6MTAyN0IwMDBENkUwMDQxNUNFNjMwQjlDRDM5QjFFNUM0RDY0QUM2OUM0Cis6MTAyN0MwMDAzQTk2ODM2MzREMkUwMkFFOEI5NzQxMTc3RkNFNDQ3QkEyCis6MTAyN0QwMDA4NEVBNkZCOThCRTk5QzAwRkVBMkZGMjBGNURGQTI2Q0IyCis6MTAyN0UwMDBCN0RBNzExRUI3NTVERDkzODBGNzU3OTk1OTQ3MkZDQzRCCis6MTAyN0YwMDBGNzc1QTQwQjdDRUY3Qzk3QjYzMDAzRUIxMkQ1RUZFRkE3Cis6MTAyODAwMDBEQzE5Rjg5RDA3RDcxM0ExMzI3QjdFODQwNTAxREZFQzJDCis6MTAyODEwMDAxNTYxMkQwQ0ZEQUMxQjU4MTBERjRGODZFN0RCNkU5OTYwCis6MTAyODIwMDBERUI3MUU3QTg4NjlEMDJGREJFMzkzODJEMDJGNjczRTE0Cis6MTAyODMwMDA4Q0E3QzM5OUQxQjk4N0M3RDQ0MkJGM0Q4MDMwOTMxMUNCCis6MTAyODQwMDAzRUY2NDgzODA1NUQ1RTkzREI3MDRDQ0UxQ0ZERkM5Mjc1Cis6MTAyODUwMDBGMTgwMDkzQ0QwQ0ZEM0ZBNTc3MzEwRjkwMjYzMkUxM0RECis6MTAyODYwMDBFMkRCNUEyQkM3RDNDNjYyMkJBMzc5RDcyOUJCRDM2MDJGCis6MTAyODcwMDBERTI3QjQyQzVBRjc4NzM5MEQ2Mzk4NzdGNEY5MUU4MTU3Cis6MTAyODgwMDBGMzA5MDMzRDQ1ODBBRUIwRENEM0E5QjIzMEUwQzk2M0EzCis6MTAyODkwMDA4MDJGNThERkRCQTk1MUI5QUZCMzgyQ0EyNzNCN0RENDYzCis6MTAyOEEwMDBGRTU0RTc3NEFBN0ZBRkQzNEZGNURFQ0UyNkFBM0ZEM0ZFCis6MTAyOEIwMDAxOUEwRkE4MUNFNjZBQTNGRDcxOUE0QjJBRkIzOERDQUM4Cis6MTAyOEMwMDAxRjc1NzY1MDdCN0ZFNzNBQUE1Rjk1MDZFNzg2RkJBOURFCis6MTAyOEQwMDAwOEJCMTZDMTc5RjREQ0E5RjgzNTgwQ0ZBMDM4QzdDMzhFCis6MTAyOEUwMDBGRUUyNkMxRjlDQjdBREMyMDQzNDA3RTVGMTFEMENGNzg2Cis6MTAyOEYwMDA2MzczOTlGQzExMzg4NzREQUUxREVDOEI1MDVBQTY2NjU4Cis6MTAyOTAwMDBGNDQ4QzA1NzM2M0VFREU4OTE4MDMxREJFNEZCMTlGMjI0Cis6MTAyOTEwMDA4MzQ3QTQ3MDFCRjMzMUY2OTM0ODMwMjBDRjYwQ0NFMzlCCis6MTAyOTIwMDBGQTUyODMxM0VBM0Y4QkRDQjJERDBBNzg1QkE2MkQ2QzhBCis6MTAyOTMwMDA1RTlGNTBENzMyNkE2RkRCQUZDNkVCMTNCQ0JCNjUzQjAzCis6MTAyOTQwMDBCNEJGQUFEREJBM0Q0N0UyRUI2MEY5OENGRDI2NzI3QjhECis6MTAyOTUwMDA2MDNERTA1MUI0OTg4NTExRUU0MzZFMjU4MkY4QjgxMkJGCis6MTAyOTYwMDBDRjRCQzZGNUFCQjRGRUFCNTk5N0NCMDRFQjlGQTAyOTc4Cis6MTAyOTcwMDBCNTQ4MzdEMDNGQ0E3MjJFQkRGRkEwQTZEMUYzRTRGNzA5Cis6MTAyOTgwMDAyRUQ2Q0YzNEY5OTJGQTMxRjM0NUM2QzM3NkU5MjJFMzY1Cis6MTAyOTkwMDA1OEE1QzVENjE4QUM3RDlCNDVGMDhGNUMwN0YxOEYxRUZFCis6MTAyOUEwMDAwQkJCMzEwMDcwRUZCMUYxRjJDQTYyODlGOEFDQjNCODc5Cis6MTAyOUIwMDA2MUI3MUJFNkRERURFNjcyQUJDNzE2NTYxQjcwRkU2QTBCCis6MTAyOUMwMDA5MzBGRjkwNTVCRTdGRTc5MzFDQ0Y3OTU5RkNBNkNBQkE1Cis6MTAyOUQwMDAxNkM3Q0ZGRjEwNzg1MDNBMjE4M0NCQ0Y3RkI0NDY0QTM5Cis6MTAyOUUwMDA2MTlFQ0Y0Rjc4QkFEQjA5RjVEMjQ3N0QzRTMzRjRERkU1Cis6MTAyOUYwMDBDNjdDNzZDNDkzRjAzRDI2RjYzOEQ0QkYzQkI5QzRCOTQzCis6MTAyQTAwMDAxMEJBNTc0REY5ODExM0Y5RUQ1MjM3RTcwMzExQzY5QTAxCis6MTAyQTEwMDAxMERGRDY2RkJDNjVDMjIwOTQxRjlERTA3QzRBNzFGMzI1Cis6MTAyQTIwMDA3OTc2NUI2MjFENzQ5RTUzMUM2QzBGMDk4MUVERTlDOEI5Cis6MTAyQTMwMDA3N0Q2QkJFMDkwQTYzMTY2MUFDNzRCQzVBMjVFOEZGRDY0Cis6MTAyQTQwMDAxNDEwRDQ2MTU4OEZGMjk3NjlENjAwOENENzc1MkVBRENCCis6MTAyQTUwMDAwOUY5MDg2M0IxNzRFNDYzOEEyREE4NjZDMUYzRUQ2MUQ2Cis6MTAyQTYwMDAxM0YxODUyRUNEMTE5MTYwREM2RDhFREE2MzFBRjI0RjcxCis6MTAyQTcwMDBENUU0MkI0NTM4N0E0RDA0Qzc2RUM3MTcyMjY2RTRDRkRDCis6MTAyQTgwMDBEMkZBMzY5NDJGMTFGNTE5QUIxQjlFNDdCQzI2MTVFOUQ3Cis6MTAyQTkwMDAzQ0UyNUZENDg0RjU3MDUwRjY5NTZBODI0MTYwN0JEMDQ5Cis6MTAyQUEwMDAxOUQ5OEFFM0IyQTE3RkI5MENEQjVCOTgwRkUxQjAzMTkxCis6MTAyQUIwMDBFRjRGODdEMkExREVCNTU0RjU5OTc5NkY0RDA2QjkzMzQyCis6MTAyQUMwMDAwRTdGODMyOUJCMkM4MzFCRDI3MTFEQ0I3ODdGRjhDRDYxCis6MTAyQUQwMDBCNzEwRTU3MDFBM0ZCRkFGMEZDQzU1OEI0OUVFQ0I2MUY1Cis6MTAyQUUwMDBBMTQ3NDgxNzgwMTA2NThCQ0ZFQTgzRjYxQTQ3NkQ5MzhDCis6MTAyQUYwMDAxRjRBMzlBM0Q2QUFDMTNFQkJENTVBRUIwQURBM0Y3M0E3Cis6MTAyQjAwMDA4MDMyODQyMjhGRjg1Mzk3NkEyMjM5OENFRDVGNDQ3QUExCis6MTAyQjEwMDBFRjY2MkY3QUYyODg5NEE4QkREQkIxNjMwMEUxMjFERjc0Cis6MTAyQjIwMDBDQzk4NUJDM0Y1QzE3QzNBREYwMzc4NTg0QjY2MUVEMzYzCis6MTAyQjMwMDA2MDFGM0RCNzM4NjkxRkIyRTRBMzNBQkI1OUE2NzVFN0Q5Cis6MTAyQjQwMDA2QkY2MjhBQjAxM0VBRjJDMzhDNjgwN0ZFNDVCNkY5RkVECis6MTAyQjUwMDA4RkY1NzE2REYyRUYwNjEzRjhGNEQ4QTBCMTlFREI2QzFGCis6MTAyQjYwMDBBQzY3MzNBODVCRTNGMzJFNzI3M0ZDNEQ4NjVCMzIzQzlCCis6MTAyQjcwMDBDNkE5REQyNzcwRkRFMzgyMzIzRDRDNUVGRjQzRUEwM0M4Cis6MTAyQjgwMDA1OUY1MENEN0U5QTA3NUU2Mzk2RUFBMDcwODAxQ0EwNTAwCis6MTAyQjkwMDBENjIzRkVGREFERUJBQzUxMTc1OUREMzA3RjREOEU4OTRDCis6MTAyQkEwMDBENDk2Q0JEOEQwMDYxQzc3OUJDMEY3MUUzNzNGQ0YzOEMyCis6MTAyQkIwMDA1RDk5NzVCQURDOEE3NDM5NjE5RDg5ODUxM0U0OEUzQjExCis6MTAyQkMwMDA2QzY3RTE4NEY5NEE3QTlDODY3QUU5RjY3QzQzRkZGMkU1Cis6MTAyQkQwMDA5REM1ODZGNkNBQzg0NDQzN0JENUJFNUE0M0JEQkFGN0U1Cis6MTAyQkUwMDA3MjQzRkZDQkZBMUEwQ0Y1NDlEMTc5ODZGRTc1QzcxNkU4Cis6MTAyQkYwMDAxOUVBNTM2MkQ3MUJGQTRGM0I3OTkzQTE3REM2RTA2RDZBCis6MTAyQzAwMDA4NkY2MkJERTVFNjNBODdGNkVFODJFNDM3RjVEREY0RTg3Cis6MTAyQzEwMDA5NjhGREQ4MjJGN0M1QTNEM0JDRDA1OTg5RDMwNUZCMjZCCis6MTAyQzIwMDAxRTlGQUM4NzVCRkZEQUE1NkQ0MDdDQ0U1NDA4OUY2NTg0Cis6MTAyQzMwMDA5NEU3NTA1RjczQTcxMjQ5NDNGQ0JGRDJBNzIxN0ZCOTI1Cis6MTAyQzQwMDA0QkUwQTNCN0RDN0YxRjlFNUI3REE2OTVFNDgyRUNFMEEyCis6MTAyQzUwMDBGRDY0QzcxQ0QyNTNDNkVGMDRCRTU0ODc1QTIzMUI2RUIzCis6MTAyQzYwMDA0RjQ3RkVEQzE5MEU3ODNDRjE3NURCRDRFRDBDRTlCNzZCCis6MTAyQzcwMDAzRUIzODkwRDNBRTJFRkNCQUE5RjA1MzM3MDNFOERFNjU1Cis6MTAyQzgwMDBCM0FBNjFFQTY3RDNFMEZEODQ3RDFEMzQ5OTk4MDNGOTA2Cis6MTAyQzkwMDBGODgwNDJGQTdBNkY0NjgxOENGNEQ3RkI5Nzg5OEQ1NDdECis6MTAyQ0EwMDA2NjVDMzEwN0YxN0Q5MkNBMUVGRDNFRjRFRjk1RDgzMTg2Cis6MTAyQ0IwMDAwNjdBNTJBRjg5OUQwNTlEOEQzRDkzNjQ0N0U5RjZEMzExCis6MTAyQ0MwMDA3ODEzQjM2M0I5NUIxQUJDODNBMTlERDI3MUEyNjEyQzQ2Cis6MTAyQ0QwMDAyMzNCRUI1OURDRjdCREEwNDNFMEJFRUVBREUxN0FENjc1Cis6MTAyQ0UwMDBDNkJDNzkxQUVBNjUzREVFREU2M0M1Qjg5RTVDOTAyQkUyCis6MTAyQ0YwMDA0ODA4NzJDMDg3N0E4NUJFREYzN0M0NzlDQUM1M0Q4MzZDCis6MTAyRDAwMDAyOEZGRDY2NDU5MzVENDk3NjRFQkY2QzBFRjAwNUU4Rjg4Cis6MTAyRDEwMDA1ODA2OUZFODgyN0FCN0E0QUU0MkJCMjM3Q0E3QzNGN0NDCis6MTAyRDIwMDAzODQzRkQ5MUMzNERDQjMwRDU2RDgwNzE3QkQ3RkJFNTJBCis6MTAyRDMwMDAyQzY4RUZEREMyN0NERDQ4MUYzOUY1MUJCMkUwNzk2OUY0Cis6MTAyRDQwMDBFMTBBOTMxM0U5QzFCMzdFMDM5NkFGQTAxRTBCRjBBQjZCCis6MTAyRDUwMDBGNEVFMzY2NTQzN0JENUU0RkE2Njg2QjI1Nzg1RjlCMjYwCis6MTAyRDYwMDA0N0M3Mjc3M0U2NEU4NkZCNjExRUY5MkRDNDJCRDRCQUU0Cis6MTAyRDcwMDAyRkMwRDJFQjlENzBERTMwQUYwRENGNUJBMjkyRTA2MDMyCis6MTAyRDgwMDAzQkU3ODhEOEIwRUVFMTcwQjFGOUE1NDgzQUQ0NzMzQzdFCis6MTAyRDkwMDA3RUM5RUZDNUY3NzZEMkY5REFBMjQ2M0QxNkVDQ0YzN0Y5Cis6MTAyREEwMDBEQzUzNTA5RjM1OUVBQjZDN0Q4MEQ2QjdDREM0RTlBMjc1Cis6MTAyREIwMDAyNzRCM0I4RUYyQjlDN0VENzE3NjY5RjE3NUVBN0NFNTc4Cis6MTAyREMwMDA2RDYxOEZFQUNGNzVCRTcyM0REQTE0NTNFMkZBMERFMDAxCis6MTAyREQwMDBGOTRFNTMwOUVBNjdEQjE5RjIyN0RCREREQjE5RTJCNUFGCis6MTAyREUwMDA0RDBENkIwQ0Y1RjBBRjg1MDlDRjc1RkRGNjBFNDEzMzM3Cis6MTAyREYwMDA4REM1Q0Q1Njk0RDc2NzczNkE0OTlGQjVBRERCNEJFNzU4Cis6MTAyRTAwMDA5NTBDMzdEQkEwODlGOTJGMDJEN0NDQjI1RDI0REY4MTg2Cis6MTAyRTEwMDAwMTZCNjg4NzFGQ0E3M0I0RUQ0RUExRjc2RkQwMzg5RDYwCis6MTAyRTIwMDA2RDAxMzI4RTc5MDk4RkFDQzhBRjJEQzJDRTAwNEMzMDA3Cis6MTAyRTMwMDBBMTdDM0JBQjMyNkUyN0Y2QkFBOTdFNDcxNkFGRUJFMzE3Cis6MTAyRTQwMDBEQzkxNUIzQkY2NjJGQUI3MERFQ0MyNjBDMjNFQjZDMEU1Cis6MTAyRTUwMDAzQzA4OTc4REU3MTczNjIxNUM5OTRDQzRDMUI2RkRDNTc3Cis6MTAyRTYwMDBCQjdCMkJDMjUyRDgzNTFCMDRCQ0JGQUU3MUY4OEU1NzRBCis6MTAyRTcwMDAxOEQ5MDVCRTlDRjk0RDI0RkY1QzRGRDJGOTA1Q0UxNTNCCis6MTAyRTgwMDA5MzEwOUU1NkVDMjRGODgzMTE2REVFQTBGNTVCNzRGOTU3Cis6MTAyRTkwMDA2NEJBNzAxOUFENTk1MzYwRkQwNUY4QTQxODRCMkVERkM0Cis6MTAyRUEwMDBBMENCQzAwNTA5Rjk3RjgyM0NFMzA1QzlGNzAyRkUzQkQwCis6MTAyRUIwMDBDODAzNjM3QkY5NEU2M0JEMzI5MkY0N0U5OEJEODZGMkZGCis6MTAyRUMwMDA3RjI1RTNGMEFBREE2NzZDRkYxNkNBNzFFMDFCMkI4NTM5Cis6MTAyRUQwMDAxQzY3REIyRDI0RUZBQ0IwQTIwQjVDRkVDNkU1MjFGMDM1Cis6MTAyRUUwMDA4NzZCN0E2M0Y1RTkzMDRFRDE3NDhCNDE0RTE2MjRGNjI4Cis6MTAyRUYwMDAwM0Y4RDVERTZBMEFBMEREQTBGQjVGNzRCODA3REE0Q0UwCis6MTAyRjAwMDAxNjg1RTg0MTIzMzgwRDNGMTdGRTk2NjRGRTNEM0U4RDQxCis6MTAyRjEwMDA5RkNCMjEyNTIzQjJDMUNERkQxMkMxMzI2RTY3MDc4MTNGCis6MTAyRjIwMDAyNEVGOTU3REJGNkE0MTdCRUM5OEQ5MDc5ODNEN0M5RTQ0Cis6MTAyRjMwMDBDOUU3QkY2RjU4M0YwRUNDMkYyNjdCNzdCMDBFRUQ2RkUxCis6MTAyRjQwMDA5QzJGOTgzMDlGRUUzNzI5MkMwRjJFMkE4NkZFMUYzNDk3Cis6MTAyRjUwMDBFNTRDQzY3MzRBMkI2NDE2QTQ2M0REMkZBMkRCRjlCQkQ0Cis6MTAyRjYwMDAxMTU3NjBCQzZEQkU1NzNCMEVDMzNBMzY5RjRDMjM5RjMyCis6MTAyRjcwMDBDNjZDRjNGMTYzOUQ1MDVGNTMyNDEzREY1M0E3QURGQTgyCis6MTAyRjgwMDAzNkRBRDMwREZGMEFFREYwQ0U2NjREMUI0QkZBRkMzMTVECis6MTAyRjkwMDAwQkQ5RjUwRDAyREYxQjg0OURBNkZCNEY2RTJCRTZGQUM1Cis6MTAyRkEwMDBGNDJEQTI4NDM3RUNEQzRFOEZEQTUxRUZBRERBMDczQzFBCis6MTAyRkIwMDBEQjg4MkZFOUJDREQ0RjdBNzE3NTZGNzJCQjlGMjFCRDM1Cis6MTAyRkMwMDA0RjE0RjgwMDc1NDczREQ0Mjc4OTdBMkY5M0IyNTUzOEFFCis6MTAyRkQwMDBFN0NCOUEwNzBGQTFDOUUxN0RFOTg4MURGNUIwRkQzNjYxCis6MTAyRkUwMDA4RTFGNEYwQUJEMkY4RjQ5QkUyOEFDM0Y2RjlGQzMxNzVFCis6MTAyRkYwMDA4MTdFMTk2NkI2M0YwNkZCRjBCRDI4QkYzOTk4MDBDRjI5Cis6MTAzMDAwMDA5QTdFNjNERENCMTJFQTZFNUM4N0IxN0U4RkQ2MjEyMTdBCis6MTAzMDEwMDA1Q0VFNjkwMTU0ODQyRDZGMjhDRUM4NzlBQjhBMjFDQzJGCis6MTAzMDIwMDBDQjEwRkY2NjlCMUQ5M0QwRUU1QTUzRUY2MDA4RDdCNEM4Cis6MTAzMDMwMDA1M0U1REY4QzIxOUYzOTYxNjYyODNGRDQ3NEVEQkU0NjhECis6MTAzMDQwMDA3ODVGRkQ5NzZDREY3QTJEN0VGRTRGNzYyMjhCNjdFQ0UyCis6MTAzMDUwMDBDMTBCM0VENkVEODlGQkE5OUU4MkYzNDQ3OUYzM0RCMEM2Cis6MTAzMDYwMDBDN0IxQkQxN0NFMTVFQkNGODAzRDhFRTUwMUIwQzdGMURFCis6MTAzMDcwMDBGOTczNjA4RjYzQkQwRkVDNzEyQzdGMDRGNjM4M0VFRjVGCis6MTAzMDgwMDAwNzdCMUNFQjdCQ0JFQTFGNENGNjZGMjVGQUY5RTJGRUJGCis6MTAzMDkwMDBBRDQxNDlGNzZGQTUwMTVDMUJEMDRFOUM5MkUwRTcwQTU5Cis6MTAzMEEwMDA3MjNGRDcyNzhGRTNEN0M3MjFGRkUxODg3MTg2RkQ4ODVDCis6MTAzMEIwMDA1NjE1RkQyN0M1RjBDNjE4NzhGRURFOURCRkRFOEI3MjYzCis6MTAzMEMwMDA2NTgxMTREQzg3RjhCRDdBQ0E5QjBBRDdCMzg3MTRFQ0Y0Cis6MTAzMEQwMDBGRkIwMERGMDFGRjg1NEUxMjhGRUMzMkI2NzlEQkEyMzAzCis6MTAzMEUwMDAxN0VDRjQxRjE1QjcyRTQ0M0JGRkNBREI0RkQ1OEQ4Nzc1Cis6MTAzMEYwMDAzQTJCMzlDNkVCREYzOUY1NkMwMUYwRUE1QjRBQjZGMEUyCis6MTAzMTAwMDBGQUZEQTdDRTE2NDJGQjE4RjZFQ0MyQzYxOUU0NzcyNEU2Cis6MTAzMTEwMDAzOUY2QjBDNDlBMTNGNUMwOUYwOEZBMENBRERCNDFGQzM4Cis6MTAzMTIwMDAxNEU0MDA0MzM4NzRFNTA1NDg4RTlFQ0UxOUNBNUMwMTRDCis6MTAzMTMwMDBGRDQzQjk0Mzc5Mzc1RDg0Q0Y4N0Q2M0Q0OEYyQUEyQjRBCis6MTAzMTQwMDBGM0Y3QTRBNzc0MERDQjE1MUZDOTE1N0Q1RTVEQUU3QzhBCis6MTAzMTUwMDAyMDcwNEY5NzJCNkI2Q0JDM0FEQzJGNTg0MkNGRUYxNzg3Cis6MTAzMTYwMDBGRTFGMTYyOUE1N0FCNjhERDdGRjU3ODNGNjBBREE0N0QwCis6MTAzMTcwMDAwMDFGQjI4NzBGNjc0RUZDRkE0Q0I0M0Y5QjY0NUYxQTg2Cis6MTAzMTgwMDBENEVGNzdENERBNTAyRTlEMTVGNDBCRTM4NkQxREUwRjAxCis6MTAzMTkwMDBDRkI2NDYxRUM3NDNDREQxODgxRTlERkFGODM5MUU1NEJFCis6MTAzMUEwMDBDRTk4NTNBQ0UzQzVDQkVENTFGNDA3NzQzNTVBRjdBMDc0Cis6MTAzMUIwMDBERUI5QzM1MTRDRTM3NTRENTdDMkU4ODdEMUVCMUIyRUU2Cis6MTAzMUMwMDBCRkRDOEE3QTQ3NTZBNkQzOEQ3NTlEM0ZFOUZFNUJGODMyCis6MTAzMUQwMDAzMUUzQjgwRDYyQkIwRDU2NDdENDlDODlFODYxRjk0M0QxCis6MTAzMUUwMDBBMjNFRUQ2MDMxQzIxRjlGMDkwQzE3QTBCN0FGOTU3MENBCis6MTAzMUYwMDBCQ0FBNjNCRTY2N0NBRTQ4MUQ2MTQ0QzY4NzcxRURCODRCCis6MTAzMjAwMDA4RjBDRTFDRjQ0MDkzNTM1NjExRkZFMDJCRTJGN0QxRkIzCis6MTAzMjEwMDAxOTRBNThFQzgzRjRBOTFEMEU1MzE0RjVDMjFEQjAyRkEyCis6MTAzMjIwMDAxQ0VGREY4QjM1ODI0RkYyQkUxOEJBNjg2MURDNTlEM0QwCis6MTAzMjMwMDBDNUJBRDU5OTA3NzAxREIzNERGRTZFN0NFRkM4QzcyRDdBCis6MTAzMjQwMDAzOTg4N0U3MzU4ODc4Q0NGNEJDMEYyNDVGRjJEQTA3NDEwCis6MTAzMjUwMDBGNzg1OEJFODI3QzlGRURCMkJGRjREQTJGREIwREIxNTAwCis6MTAzMjYwMDAzQTE3QTU4Q0VGN0I5NzEyNzEzMzMyODQyM0UzMTY2NUVFCis6MTAzMjcwMDA4QzhFQkYyNTI1RkM3Q0UzRjhFQjY3NDg0RjVENEUzRjA1Cis6MTAzMjgwMDBDNzVGNzUyODczM0RFMjZGRDY1MERFMDZEQTU3MzRFNTI2Cis6MTAzMjkwMDA3OTI0RTM3MUYyRjlENDIwNkQ3MzM5NjA0NkY4N0VEMjU3Cis6MTAzMkEwMDA3OUVBRTdBOEUzNDFCMkZDRkE1QTg5QUE5RkFGOEJGNjA0Cis6MTAzMkIwMDBFOUFGRTA3NEEwRUI1QjBDRUNBMThDOTFGMERCMDRFM0Q0Cis6MTAzMkMwMDA2OTY1RjFCQUUyMEE5MDFFNkRDOUYxNTVBMDlGQjdFQjhFCis6MTAzMkQwMDBBRkU2QjY1NDdFREUxQjA0OUNENjY3REE0OUJGRUVDQTYxCis6MTAzMkUwMDBFNEZBRjU0MEU2M0M4MzVERDQwODc2OTIwNEY4NjFDRUJBCis6MTAzMkYwMDA2NkJENDg0N0U2MzFENzkzOUZDQzNDMTYzNTI4NUM1N0NFCis6MTAzMzAwMDA5MkRFM0E2NjNFRDc1QjU1RDA1QjUzQ0NBQjk3MzJFQTQwCis6MTAzMzEwMDBBRDI5RjREOTYxQkRENTM5OEZFQkFEOTkwQUU5QUQwRjZGCis6MTAzMzIwMDA2NzI4Q0RCQjUzRjA5QkE5MjU1QzJGMUNDMDdEQTRCMEEyCis6MTAzMzMwMDAwQkMxMUUyNDdGQTU2RTBGMkE2QTkwRUMzQTdEOUY1MzI1Cis6MTAzMzQwMDAwNTVERTlGREQzRDQwRTg2RkUzM0IzRTJEMzUwMkYzNUFECis6MTAzMzUwMDBEQkI5OUU5OTA2REJBQzQ4OTBERkZBRkM5MzRBNzg1Q0I3Cis6MTAzMzYwMDAyNUFCOUNFQkZCMjYyQkQ3NEZBRTdDNDVFQTQ4MDVGN0Y3Cis6MTAzMzcwMDA1MDg5RUU1RjQ5OEQ3NzdGMDNERTEwNUZBODc1Mjg3RTQ4Cis6MTAzMzgwMDBENDBGNkExREFFMDZENDBGNDY3QjBGNENEMkYwREJDRUI1Cis6MTAzMzkwMDAzODVGRjFGRDc1QUE5OUU0OEZFQzczMjE5RUY1NUEwNjBBCis6MTAzM0EwMDA5RjdEMDVFREJEMjMwRTkyMzdCRDE5ODUzNDlFQUU1RjFFCis6MTAzM0IwMDA4MzVEMUJBRTgwNDFGNkZGMTkyOEQxMzREMjlFMDUzQkI4Cis6MTAzM0MwMDA2QjRCMDlDNkJGRDZFNDRERTZFMzgyOUU1NzNENTJBRjM0Cis6MTAzM0QwMDA0Q0Y2MUIwQ0QzN0JFNjVFMzc3RjJGMzIwRURGOTNENjg1Cis6MTAzM0UwMDA0QzFGOEI3ODk1NENFRjdBNTlFNEZBNjlEMTRBNTg1N0JCCis6MTAzM0YwMDBEMUI4NjM1NEVBQ0ZGRjg5OTlDOTBGOTdEQzNGMzI3QzdCCis6MTAzNDAwMDAwRTVDMkU1N0MyNjQ2M0NDMjQ4RjIzQjhFRUY3RDZCRTcxCis6MTAzNDEwMDA5QUU3ODNBNUI0Q0I2NzQ4MkU3RkQwMzE3RENDNjY4REVCCis6MTAzNDIwMDBGM0RCN0QyODY3QkUyNDEzQkYyREJDNzUyMENCOTk3MEJDCis6MTAzNDMwMDBDRUJCM0FGQjhBNjQwRkM2MTc2MjQ1OEQxRUYyRjdGOUMwCis6MTAzNDQwMDA1M0FERjdCODNFN0Y3NDAyRjE2NzhCQzAwMzJEMjczNjZBCis6MTAzNDUwMDBCNzFDRTBBRTM5NEMzRTU0MjU0MEY4MUFGODQwQkQ5Q0VDCis6MTAzNDYwMDBENUE4QzJGQzQ1OURDQ0U3ODBCQTlCQTlFNEY3MkFCQTRGCis6MTAzNDcwMDA2MDI2N0MyQjNBQkM4Q0YwNzg0MkNFOTAxNEY2MjZDQzk5Cis6MTAzNDgwMDA4M0FDMzgyMTdFRjI2MTQ3MjNEMTY3RDFEODYxN0I4RjJECis6MTAzNDkwMDBFMjBDMUZFNjQ0MTcyMjdEN0ZGODAwNUY1MUQxQTNDNkRFCis6MTAzNEEwMDA3NjkwQjFFNDk3QkU2NUFEM0Q4MjI2RTM4NEJCNTUxM0FCCis6MTAzNEIwMDBENjhCQkUyREIxNDIzN0FFRTNCMDdCMzNGQTc1N0U5ODIyCis6MTAzNEMwMDA0RTdFMURGMzRFMEZGOTY1QkUyRDA1MEYxMDVDMjNEQUZECis6MTAzNEQwMDA1NzRDMjU2MkIzRDA2RkY1NTdFRDdCQjY5MjFDOEJDRDYwCis6MTAzNEUwMDAyNTM5RjY2NTEzN0IzQzg1REZFOUU3MjVEQzhGRjE5QTBBCis6MTAzNEYwMDBDMEY3MjJEN0NCNDUyQkVCQjAzQzRFRTc3REE5RjRDNEY3Cis6MTAzNTAwMDAwNERGREUzQzY2M0JDNUM1QzIwREFDMDJFREMzMUUwQjNECis6MTAzNTEwMDBFMDU1MEE3QUY1N0IzODdGMTlFNkM3MDI3RTM2QjQ1NjQ1Cis6MTAzNTIwMDA2MDJDQjMyNEY0QkM3RDRGM0VGOTY0MUVDQTZENDZGNjkwCis6MTAzNTMwMDA2NDcyQkMzNkJEQTI5NzFBRDM3RDdFODZGRTA5NDlGNTFBCis6MTAzNTQwMDA3MzNFQUI4NjVENjE4QzAzRkRDNTlDMTJBRkM3NzgwNEVBCis6MTAzNTUwMDA5Rjc2NkY3MjYxRkY0NjhGQ0Y4NTc0MzBFMDlFRUFCQTI2Cis6MTAzNTYwMDAwOUUwRTc3MDI4MkMyRDgxMEZFQjc4RjI2MkM2NTREMjY3Cis6MTAzNTcwMDA0M0Y0NzFENjY0MTQ1RkQ0MkU1NzgwMUY2QjE3OTFEMzE4Cis6MTAzNTgwMDAwQUZBQzc1MTlGMzkzNEMzQUFDMTdBMzczOTZBNjNBODg2Cis6MTAzNTkwMDA2RjZENzJFNEQ0OTI5RkREMDE3QzIzQzFFRkU0NzAxQzU3Cis6MTAzNUEwMDAyNTNDNzRGOEI4M0ZDRTgxRkMxN0ZENEU2MkZGMDNFRTU4Cis6MTAzNUIwMDBBM0I0N0ZCRERGQkI4MjBGMzk3QzUxMUVBNzA0NkIwNjBECis6MTAzNUMwMDBGQkQ5RTQ0MDE4RUQwQzVCMEUyM0JCRDI2NkU1RjQ5NDA2Cis6MTAzNUQwMDAwRUM3NjE0REUwMjNGQUJDQkYyQkUxRjZEQUE2QzJEQUQyCis6MTAzNUUwMDA1ODNEQUQ0RjQ2Q0YwMURCRTRBQTc1OTEzQzQ0MzhBMzZBCis6MTAzNUYwMDAzRTNBNkU1ODFGMjVGRjRBQjE4MEIzM0U0RUQ3MDBERkRBCis6MTAzNjAwMDA2NzYwOURDQkRGOTg4RDc2NjhDMEU1QzE3MTFEMzc1OTI1Cis6MTAzNjEwMDBDMzI4MTczMjI2NUY3NDNDQUY0NzMyRjg4N0UyRTNBRDI4Cis6MTAzNjIwMDA5QjI1QzYyQkM2RjFDQzE5QjUyQThFNjc0MTNFOTEwMjY3Cis6MTAzNjMwMDBGRjY2ODg3NTdENTZGRjE5NDA1NDI1QkI4RDcxRkQwQUM0Cis6MTAzNjQwMDAzMERFOTU0QThGRDA0QkFCRjA4MzhEN0M4RkYzNDlCNzNBCis6MTAzNjUwMDBCMDVGODA0RkNFRjZBMERENTJGOEU2RDE3QUVBQzVFRDM0Cis6MTAzNjYwMDAxNkU3NUNCOTQyODZGM0ZBMDA0RUQwMkNDNUVERjg2NDNCCis6MTAzNjcwMDA3REE2REUzQzQ0NzI0RDk3NDdCQTdDREE4NUZBOEMxMkZGCis6MTAzNjgwMDBBN0E3N0NDRUI5NTg0MTVCODBFNEI2OTQxMzIwQkMwMTU3Cis6MTAzNjkwMDBGRDQ2NDNCQTMxNjM3QzM4MDVEQ0I2MDhGODRCOTlEMzU0Cis6MTAzNkEwMDAzNUE0OTdDNkYzODMwNUY4REVDMThDQjcwQjU4ODJCRkVCCis6MTAzNkIwMDA0REU3ODcyRjdFQkNENzg2RUQxRkI2MzU1QzU0NkZEMUEyCis6MTAzNkMwMDBFM0M3QTNDNThEMzNFRkZBRkQ5NzEyRjU5NkQxRTJDODkzCis6MTAzNkQwMDA5RjE0M0YzRTk0QTk5MDlGRUUxMUM5Qzg5N0JBMDQzRjJBCis6MTAzNkUwMDBGQTlBQzAwQjY3NzFGMDJCODg0NzhGNDgwMTFGRTk4RDRDCis6MTAzNkYwMDBDMjlGRTIyRDBGREU4OUU3MzNCRTQ3NjE2MTM4Q0Y4Mzc5Cis6MTAzNzAwMDAxRjRGNzUyMTdFNUMyQTdDNzUzRjdCQkVEMEE3RjIxREMyCis6MTAzNzEwMDA3QjI1QTREM0ZDQjY4ODg0N0VGMjgyQjY1RUM5N0Y5MUY1Cis6MTAzNzIwMDA3RThCM0M5QzlFRjVGRTE2MzFGRTU1RjI5MDE5RTVENTM4Cis6MTAzNzMwMDA1NTgyOEUwQkNFQzlBQzIyNDEwRjVDRTBFMUZBOTQ0NTc0Cis6MTAzNzQwMDBFOEVGOTk4NzlFQjBFMTc4ODc0QzgxOUUzMjk0MEY5OTdCCis6MTAzNzUwMDAyNkVERjEwNDdBQjdEQzVBNkI2RDQ4ODQwRkM2N0Y1MkIwCis6MTAzNzYwMDA5Q0RGNzczREMzN0ExN0Q5NDdCQUJDQjVFODcyMjI0N0M4Cis6MTAzNzcwMDAzNkM4ODk1MDNBQzc1QjVEREYwOTVEQ0VFRDIxNDkwQTQ1Cis6MTAzNzgwMDAzRTg2RjAzRTdERjlFRkFGNDE5Njc1NUFFQTU1MzA0RUQwCis6MTAzNzkwMDBGRTQ5RjE4RjYxQkRDNjE0NTlBMURCMzE0ODJGM0U1OTU2Cis6MTAzN0EwMDBGREYxMjBCQzNGRTkzQkY1NDQwRjUzNTg5MENBNjk4Q0FBCis6MTAzN0IwMDBFQjdEQTA0NzNERTMyMUZEMEU5NjlDNzBCRTBDNUQwRjk2Cis6MTAzN0MwMDA3OTlGQkM4RjQ3M0M1Q0RFREQyQkM3QzhDRjdBRUY3OTkxCis6MTAzN0QwMDA4OUY4NzgzMjdDRkVFOEQxRkQ1QUMzNzFCRThCRkE0OTc0Cis6MTAzN0UwMDAzNUY0OTNCQTMxNkU2NUY0NjNENjFEMzNENkE3QzQ4QzE1Cis6MTAzN0YwMDBGNTY5Mjc5M0ZEQTJGRTVGMjRGQTQ1MUYwNkJBNDI3RUIzCis6MTAzODAwMDBBMEZCNDEwQkMzOTE3QTE1RDY1QkM0N0EyOTZFNThEMEMwCis6MTAzODEwMDBFNjM0QzBGNTRBQjNDOEE3NjA3RTI5RDEzRjVCMjAyRkFDCis6MTAzODIwMDA3ODA3REZGRkZERjBCOTg3NDlDRkJBNDVCNEZGNDNFMzFFCis6MTAzODMwMDBDQUFGNzRBM0VEM0NFQzY3RDUwODVFRkYzMDc3RDE2QzVFCis6MTAzODQwMDAzQ0Q3NjQ3RjZCNTE0NzQyRkM5MThERjRCM0RFRjJCMEZDCis6MTAzODUwMDBDNUQwMUVGMDRGMjIzQjYwRjExMkEzN0Y5NkQ2OTFDQkNDCis6MTAzODYwMDBGNzVCNTAzQjcyRkU0RjlFMTdGRTM5NDdDRUFGOEZCQkMyCis6MTAzODcwMDAwQkY4MERGMjUxNzYxRUNFNzUyQUMyOERBMUM3ODExNUE3Cis6MTAzODgwMDBDOTUxMDlFM0Q3RjkxRENDOEZGQTcwQzE1QUU2NEYxNTFCCis6MTAzODkwMDAwNzI4MkNFNTc4OTAwQzY3MTZCRThBRTAzNzRCM0NDQkE2Cis6MTAzOEEwMDA3Nzk4Qzk0RUNGNUY2QjIyM0QzMDFGRjgwMUYyODE2QkQ0Cis6MTAzOEIwMDA1NjAxQjk0MEJENjA5NTQ2N0FFNEI1NkQyNjg2NzI4MEEyCis6MTAzOEMwMDA5REVGMzRCQzBGQ0IyNTdGQTc3RUVFQkI3MDNDRDQyMzhECis6MTAzOEQwMDA1N0IzODgwOUY3RDMzMTkxRTg4OUQ2NTU2Q0YwOEJCRjdGCis6MTAzOEUwMDBDOUUxNjUyNTc4NUQzQkRENjJGMDZCMTZBMTFGMzMwMUYwCis6MTAzOEYwMDAyRTNBMUUxNDI0M0Q3RkMxQTMxQUU4MDJFNDU5NjEyOTFGCis6MTAzOTAwMDBFMTNGOTc3M0E1MjhFNzYwNDlFRkNEMzhCOTE3RjNEOUEwCis6MTAzOTEwMDBBRURDQzA2OEJGNDM1OUY2MDhDRjkzMTg4RTI3OTgyRkE2Cis6MTAzOTIwMDA5NDAzN0ZCMkNFQUE0MEJGQ0EzNkQ1NkVDMjdDODY4M0NFCis6MTAzOTMwMDA1OTgzREY2MjU5OENENTk0QjI3MEUzNENDNkZFRDkzRUYwCis6MTAzOTQwMDA1NDI1NDFGREYyRDI0Nzc3RjRDMEExMUNCNDBEN0QxNzc4Cis6MTAzOTUwMDA5REJEMEVDNzkzOEI5QTNFMTdBRjY3NjYxRUE0M0E5QjE4Cis6MTAzOTYwMDBDRTM0MTlFMDYzQzcxOTYwOUY3Njc1REUzRTMzQ0M2RkE1Cis6MTAzOTcwMDBGNzNBQzgwOTY5NjdDMzc0NEFGQkU5QkU1Q0JCMDdGMzQxCis6MTAzOTgwMDA0MUJBNEI0REE0MjdCMUM0NzZEOEM3Nzc0QTU1M0RCRjNECis6MTAzOTkwMDA4Q0YyREQ1ODEzOEZFRjI3OEUyRkU3NUM2NEZDNzkzMEIzCis6MTAzOUEwMDBGRUU0NEYzMUJFOTVBRjNGMEYxRjgxN0NDOUMzRjVBMzI1Cis6MTAzOUIwMDA5RjFBQzdDN0YzNDU2NzUxRTJGQzYyM0M5OTg1Nzc2MzVDCis6MTAzOUMwMDBGQzA1RTY3MzQ4N0MzRTE1RjM0REYyOTgzMUJGNjA3OEY0Cis6MTAzOUQwMDAzRTE1RTZBQkZFM0JFQ0E3NzlFNDc5NTgyRTc2MUVENzcwCis6MTAzOUUwMDA3RkJBRjNFODM2Rjk2OUJERTExQTA3RDkzRjBDOUE0RDYxCis6MTAzOUYwMDA1M0QxQ0VFMEYzRDk2NEY2QTI1Q0NCRTFEQTNEMzUwRUNCCis6MTAzQTAwMDA1N0QwRjc2ODVDRThCRUZFODI4MEIzMDVFMUFDMkEwNEJCCis6MTAzQTEwMDBFN0QxRTA3NjQ4RTVGOTRFNUI1NDdCNjRCREZCRkZDMTFFCis6MTAzQTIwMDA3OUI5Rjg3OTI1Q0U4NzdBRTMyNUNGNzczRENDOTc3MzlFCis6MTAzQTMwMDBFOUYzMjE3QzkxN0U4NkUxMEI2N0IyMjFFRkQyRTEwQkE1Cis6MTAzQTQwMDBBQjBBNUYwQTdDMEZDMUI4QTYwNEI4QzZGMzhBMUU1MjNGCis6MTAzQTUwMDA1MUZGQjc1OTAyNTYxRkYwREYwM0E1M0M1RkQxOUJCMzVFCis6MTAzQTYwMDBDODRBNzkwNkI5OEJBQzk4QkZCN0QxRUI2OEMyNzhERDhDCis6MTAzQTcwMDA0NkNGMTJBQjI1NDE0RTZGRjRCNjUwM0JGNEE3N0MyOERECis6MTAzQTgwMDA2RkQ0OEVFRTA5NTZDRDYyNjRGRjZGOTlEOUU4NUE4MUUyCis6MTAzQTkwMDBGOEQzQzFGM0FCRjQ3QzIzNUQxRTMyMTFCRkE0N0RDMTBBCis6MTAzQUEwMDA4QjYzM0U3NzYwRTgxMEY0REZEMjMxOTlGMkM5QzY2NEM3Cis6MTAzQUIwMDBGRDg5RjJBOEI2QjVGOTdDRDhGRTJEOEMzMzgxM0VGMTk0Cis6MTAzQUMwMDBBMDg4MzMyMUEyOTIxRkFERTZGMjQ3MzEyRTVCNUJCQThDCis6MTAzQUQwMDA0NkMyNzQ4RUMyNTU0NkY5OTQ5Rjk0QTc1MzdCMjZENjRFCis6MTAzQUUwMDA4MEY5NTg2QzA1Q0ZCNzcyQjVDODQ5RjJEMDQ4QjdEQjNBCis6MTAzQUYwMDAxMEFFM0MyRjJBMjI3MUY4MUFDNkZCM0QzMkU5NUNENDg1Cis6MTAzQjAwMDBFRkY3MzBCNEVGOUU4NUIxQ0M0NkZBMzI2MTdFNTIzMjg3Cis6MTAzQjEwMDAzRENBOEE1RkFENDdCRDdDOEQ4OUQ2NTE4MDIxN0YxMDFCCis6MTAzQjIwMDA3MUI1RDVGMzVEMkJFMDc5RTFDREIyNEY4MkU3NjNCRDhFCis6MTAzQjMwMDA3NzUzOUUxMjY4RjVBNDZGNzhCREM3MUJCMDNFNjI5Rjk1Cis6MTAzQjQwMDAyQjhERkI0OERFNTdGMkJBNDE3MDkxMUVBMjlGNTdFREI0Cis6MTAzQjUwMDAxOTVGM0FEQTUxQjVBNThCMjg4RjhDN0U3NDdBMzcyNzk2Cis6MTAzQjYwMDBFRDI3MUJFRDVGOTNERjA2NzJDQ0VFNDlEODE3MzNGNEQ3Cis6MTAzQjcwMDAxMzc2REE3RjZERkQyNDIyMTNEMjUxNzJGQ0VCNkIwMUI4Cis6MTAzQjgwMDA1QTY3MUFGMzU5MTU3QUFGODVFQzQ1M0RBRTk2OEZCNDU2Cis6MTAzQjkwMDA4M0U3M0U5RUYxQjg0NEYyRkI1M0Y5RkJDQ0M1RTM2Q0RFCis6MTAzQkEwMDA2OTc2MzAzRDgxRkVBNERCRUNFNEJGNEM0QjgzM0E5QzRDCis6MTAzQkIwMDA4RkE0MzBFQjM4NzhCRTRCRjhGREQ2NEI0Q0M2N0E3Q0UwCis6MTAzQkMwMDBCRTI4RTVBOTc3NDk4MUVEM0UzNzk2REM1RUIyNjQwNUYzCis6MTAzQkQwMDAyODBGMTFDM0I0ODk3NkU3MjFDQ0VGODBGNjM1QjdCQTQ4Cis6MTAzQkUwMDBDN0EyREY2RTBDMTA0NDBDRUQ2NjExOTdEMkZEMjQ5OTJDCis6MTAzQkYwMDAyNTgzQ0I1MTdFMTc5Nzk1MkNCNkEyN0M0NkM3RDJFNTdDCis6MTAzQzAwMDA4QzVEQjZCN0U4RkVGMENDMzg1REE2OURDQjY3NUE4MkQ2Cis6MTAzQzEwMDBGRDkyMjY3NzUwOUU0N0RBQjlGMTA2N0Y0QTU0RDg1RDY3Cis6MTAzQzIwMDA3QUREOUYyMzM3RTI3QzczRDAyRUMwQkMyNkE2NzZFM0Q0Cis6MTAzQzMwMDA3QkY1MDAxNDJERDEzRjdBQ0U2NTE4MjczRTdFQTE2MTE5Cis6MTAzQzQwMDBERTI4RDhDRjg5NzE4MEQxQzc0RjY3NUE0NUUyRjhDNUMxCis6MTAzQzUwMDBBMzhDNUY5NjM0QkU5QTcyRkNGOEI4RDk4NjcxMzdDQUM1Cis6MTAzQzYwMDA5QzVGODQ3M0VDOTE1NEZFQkM5NTY1MEQ1Nzk3RTU4RTZGCis6MTAzQzcwMDA5RTg3RjZDNTMyRTE3N0IzMDJDQkM3Qjg5M0MwOUJDRDIwCis6MTAzQzgwMDBBRTBFQ0E0QjMzREI3OTdDRDQyMkUyMjU4NzMzREE4ODQ3Cis6MTAzQzkwMDA1RkIxNDI2MzVFNUEwMzUzNjU2Q0RGOTgzOUU3OTgwNDVECis6MTAzQ0EwMDBFRDBEMEVBMzlFN0VENUY5MzdDREM4NzdBRTkyOEQ3QUY1Cis6MTAzQ0IwMDBCQTlGNzUxMDdFNUVDOThDQ0YyRDg1NDYzRTQwQkEzNkMwCis6MTAzQ0MwMDBGQUZEMzMyNkM3Mjg3RjJERDc0MTc5MDZBM0Y5MEY3RTQ5Cis6MTAzQ0QwMDBEM0M5MjhBRkNBOTIxRUU4NDAxOTc3NzdEOUI0RUM4REMyCis6MTAzQ0UwMDBEM0ExM0U4NkUzRDdENkIyRjk4QkQxMUZGNDFCODFDNzhGCis6MTAzQ0YwMDAxQjgxRUUxMThFMkQ2QkM2RUUzNjI3OENEQkEyNDQ0QjVBCis6MTAzRDAwMDA1MThFQjQ5ODc4MUUzRkZEQzBGQ0JGQzlDRDI3N0Y2QTk1Cis6MTAzRDEwMDBGMkJDOTQwOTlDRTA4RjZBRUQ5MDAyOUU4NDdERkM0NjgzCis6MTAzRDIwMDBEMEM1RjA3Qzc3MTRFQzQ2M0Q3Njc4QkVCNEU4MTQ5QUEyCis6MTAzRDMwMDA2RjM4MUY0OENDOTdGN0Q5RTY3QjQzRDBCMzNFNUZFQjkzCis6MTAzRDQwMDA1NzhDRkI2QjU1NjJCNEJGNTYxMzEzRjlGRjdDQkUzNzFCCis6MTAzRDUwMDA3MDdGRUVDRjMwOUZDOEVCMUE5RUVGQUJDNkZEQjVBNkM1Cis6MTAzRDYwMDBDNTY4N0ZBREMzRjZBNDk4MkZFRkIzQ0Q5N0E2NzQ1MDY2Cis6MTAzRDcwMDAzQ0U2M0U4OTlGRUJBMUJENEJFRTQ3N0ZGQ0Q5Rjk2QjNBCis6MTAzRDgwMDAzNEM0MzdERDNFQTNGQjMzNjZCQTNGNDM3MkVGREE0MkY5Cis6MTAzRDkwMDA4NUY0MDY3RERDN0Q5REQzOTk1RkUxN0UxQjJDMkI2NjJGCis6MTAzREEwMDA0QTc0MEZBMDcyQkFFNEM3NzhEOEMzNDBGN0ZFMzJGNDYxCis6MTAzREIwMDA0QkE5RDQxRUU5NzQ1MUI5QTc1M0EzRjIzMUIwMDdGRDQyCis6MTAzREMwMDBFNDlGRjI1MUZENkMxOUI3ODdFRjFCQTcyRTVCODlGQUIwCis6MTAzREQwMDA0MkJEOURFNzQxQ0ZCQzAyMzREMUI4QkQwNTA2RDgyMTE0Cis6MTAzREUwMDAxQkU2MUI3RTgxNEREQThBNjhCRTkzQzMyM0E3MzEyRjYxCis6MTAzREYwMDA4MkU3NjQ5RkY0NjJBQzEzRUE2OTMzQ0MxQUU2NzdBN0QyCis6MTAzRTAwMDBCOTU5MjA5NURGRTU3RDkxM0ZCMzU5Q0Y5QkZGOUNDNDA1Cis6MTAzRTEwMDBFM0VEQTA4RkQ0QzNGRTZGMTRBMDY2RTZGOTEyRUE1NTU1Cis6MTAzRTIwMDBENzdFMzU4QkY0OTE5NjI1ODMxOTJBQUNFMzA2NjlEMkE3Cis6MTAzRTMwMDAyRjNDMDA4RkZGMkRGNDkxMUJDNzczM0E0RUI2Mjc3M0FBCis6MTAzRTQwMDA1MEIyNENDNkJDM0U3MzI0MDJCRjJFQ0U1ODRDRjZFODhFCis6MTAzRTUwMDBFMkE1OEMzOUUxRkQ2QkYxM0Q5MDJCQUYwODdERTZFNUU1Cis6MTAzRTYwMDBDMTM0ODZGNjVBQjg5MUM3OTk2RkI4REI2ODQ3REU2N0U4Cis6MTAzRTcwMDA4QkFBQThDN0REMzcyOTg3RTE3OUI0QUMzNUI2NkYxNkIwCis6MTAzRTgwMDBGMTgyQzU0OTc2RTVCNTQ5NzkzNEEwNjVGMjdDMTBEQzRDCis6MTAzRTkwMDBGMzBDQzZERTJEQ0JDOEExM0M1ODkxNDdGMzg0RjAwQjQwCis6MTAzRUEwMDBCMUMyMUM0QUI2NzZDRUY1OENDMUY4NjM5QTkyRkE3RUZFCis6MTAzRUIwMDA4RTNFNUU4RUUwM0IyQ0M3NEY3MEQwRjNDQTk5RjlBOUI1Cis6MTAzRUMwMDA0OUY0QkU5ODRGN0Y2Rjk3RjRENEI4OEJGOTM1NDE2RkEyCis6MTAzRUQwMDA3QjZCQjA4MkNCNjdENEFGNTlCOTMxREZFN0VDRkNFMjQyCis6MTAzRUUwMDBBRjM3QjI1NDc4M0IyNEEzNUY0MTVGRkZGRjJEN0NGREM5Cis6MTAzRUYwMDAxMUVFMTdDQTU3NjY3RDM4OTlERjQzMkI2NDg5RjdDRkQ3Cis6MTAzRjAwMDBGNDdDQUFDNUMzNzU5OUExNUVCOTU0QUZCQTg2QkM3OEQyCis6MTAzRjEwMDBERUFGN0QyRUREQjc5NUYwNEZFODBGRDFENzREMTdEMjJDCis6MTAzRjIwMDAzRkZENzhDM0VCNzBGOThCQjgzRjRFREMxMzE0RTM4RDgzCis6MTAzRjMwMDAwNkU3RTQ3QzA3REQ2RjQzM0Y1M0UzRkVEOEFFREQzQzhDCis6MTAzRjQwMDAyRjMyM0ZBN0UxMURCQzNGODVDRkRGMzRFMDk1RjE5RUM2Cis6MTAzRjUwMDA1NEQ3QzAxMzEyREExN0RGQzI3QjVGNzI3QzNFRjREM0YyCis6MTAzRjYwMDA4NjQ5N0YzNURFREYxQTIxOEYxOUJGOTdBM0FGQTc0Qjk0Cis6MTAzRjcwMDA2MTE1NjQ4RjlBODAzRkMwN0MwQjFDODNCMkE0QTFERkMzCis6MTAzRjgwMDA3RDg4RUVGM0RENTlDRUNGMDU3Mzg3Rjk3RDE4QUVFNzU2Cis6MTAzRjkwMDA5OTBCNEMzQzdGNjM4MkM2RjUzRUNGRDBGOEM0QjhEMEI1Cis6MTAzRkEwMDAwREU1NUNBRTJGNDg3Rjc1QUQwNkYyNkY0OUY5OTM4QjM2Cis6MTAzRkIwMDAzMTNGNjlDMTk4NTdEN0JBQTE3RTVERjk3NzE3Q0I4MDk5Cis6MTAzRkMwMDA0NzBCMEE1RUZERDAwRDNBREJCMkYyQTc3OEJERUFENTA5Cis6MTAzRkQwMDAwRjhCQTFCRUJDRkM2OTVFQkY4MjExNTA1QUNCQkZCNzJDCis6MTAzRkUwMDAxOEY5RUEwREU1QUFGMEYzQzUwQTcxQkUwNTEyQTc4RjBDCis6MTAzRkYwMDBDRjVBOUFEMzRDMjlFM0Y3RkY1MEFFRkIxMzk5MDVFNzRDCis6MTA0MDAwMDAwOUY0RkZFNDI0RjJBMzgwRUU3RkY1MjdDNTFCQjEyOTU0Cis6MTA0MDEwMDAwRkVGMTM4OTlGOUM0Q0QyNjdFNkUxRUYwMENGQUJFNTMxCis6MTA0MDIwMDBFODAwQkU2RkIyNDYwOUFFRTU5ODM3NTM0MTI4RjBDMEFDCis6MTA0MDMwMDA4NThCRTQ0NzI0RTM5MTA0RThCQTBFRjU2NTRENjUyREMwCis6MTA0MDQwMDBBMDFGNzdBRDYzNDE1QjQ5MDI5RTMzQkZDMDczOUVDNzFCCis6MTA0MDUwMDBBM0FGNDc5RjdGQzRCQUUwNDg2NTY3RTJCQTFFQTY3MTY2Cis6MTA0MDYwMDBGNDc1OUQ5RTk0MTZDNjdCNjc3QUZDNTQ1RkQ3Njk2OTg4Cis6MTA0MDcwMDBFODExNzQ0NjQ0QUIwNjk3RTJCOTlFQ0UxODFBMkY0MTU4Cis6MTA0MDgwMDA1REFCNTA5NzUwM0Q3N0U4MTFDOTk3NTBCN0YwNzNCQ0JFCis6MTA0MDkwMDBCN0ZDMjdBNEY3QUM5NUZDRjc5NjIzQkY1NDFDNzRCRjVDCis6MTA0MEEwMDBBRDQ3RTg3OURCNzI4MzYxQzZGNTdCQ0E3NzBDMTdGMUZGCis6MTA0MEIwMDA3QjAzOEQ5MzI1N0Y2MjdDRkY5QjAyQkZGMjJBNzgzOUI4Cis6MTA0MEMwMDAzQjZEN0JDNzA5QzBDN0QwMDE4OUFEODdGRUExRjM2N0VGCis6MTA0MEQwMDAxNUI0QzcxN0Y0OUY1MkQwRUU2RTNGNzA0QTQxQkJCQTc5Cis6MTA0MEUwMDAxREVCMzA0RUZCQzMwQUYxQUI2NDc4MTc1NDk4MEQ3MTg5Cis6MTA0MEYwMDA3NEREOUUzODUyNTRCNjMxMDdENkQzQkU1MkYyNjE4QTZGCis6MTA0MTAwMDBFQzlBRTdCMzY2NjM3RENEMEFEQzI1NjNEN0NGREMzRjRECis6MTA0MTEwMDAxQkM5QkIzNTMwQjAxMUNCMUJEOUUwMTE4QzE3MkMwQjUwCis6MTA0MTIwMDAxQUY1RkNFNTZENDZCREJDQjVDM0E4NEZERkI4MUQ0RTAyCis6MTA0MTMwMDAwN0U0RDc4REVCMEEwQ0VGMzFENDkwNjEzRENCQzQ3OTA1Cis6MTA0MTQwMDAyRTczREQxMzMzRDc2MDNERTFCRThFNDQ2NDRERkU5RDdBCis6MTA0MTUwMDBFNTdDMDc1MDFBRkQxNjBCRkEyNUEyRTNGNjY2MkJGOTRCCis6MTA0MTYwMDA1RjhGMTRGMTNDRkJEMDJBMzNFNTA1ODUxMDFEQjBERUNFCis6MTA0MTcwMDAyMTA5N0Y5NjlGRjhBMzJFQkY2N0Y3OUQzOTVBODBFRkRDCis6MTA0MTgwMDBBRkIyMTAxQzU4RDgxRjQzRkY0M0IzQzBBNzFCOUI5QjYzCis6MTA0MTkwMDBERTQxM0M2QkQ2NkVFMzcyN0NDMjVFMEJGOTU3ODI1Q0VCCis6MTA0MUEwMDAxRkQ3ODRGRkJCQTVFRkJFNDYyN0VBOUY2QjI1RjI2RkEyCis6MTA0MUIwMDAyQzZGMzNFQUVCQURGODBCRUE2RkVCQTQ0OEQ0OEQ3MEFCCis6MTA0MUMwMDAzMkI2REZCOENFNTg3RkJENUNDOERCMkE1Njg1NzRGMkE0Cis6MTA0MUQwMDBEQjcyNDlBNjdCQzVBMkZFODdBMjVGQkUxQzg1ODlFRTY1Cis6MTA0MUUwMDA5MjAyQTcxMEVGNTYyOUQxMUE5NDZCNzc0OTQxQUFFQjk2Cis6MTA0MUYwMDBFREYwQkM5RENCMUQyRUVGNEQ0MDUxQzQ3NzJERENBRkIzCis6MTA0MjAwMDAxMDVFMkQxMTNFMkUxRjIxRkYxM0Y0MDNGM0M4N0E0RUNBCis6MTA0MjEwMDAwNUY3Qjc3N0Q5MDI2QkM5NUU3QTQxNTI1MTFGNjk5NDhECis6MTA0MjIwMDBGREIyRDMxQkI3Njc5M0YxMzE1N0UwRjdDQjZDRDA4QjVFCis6MTA0MjMwMDBFQjJBNDNBMDAzRkNDQjE2OEY4OUEwM0ZBQ0VDOUY1NzIxCis6MTA0MjQwMDA1MDdFNjM1OTlERTQzMzExM0Q5QkQ4QkE1QTJDNjVFMkU4Cis6MTA0MjUwMDAwRkE4NkZEQUEwMkMzM0Y3MzYxM0JGQkU0QzUxNzlGRThFCis6MTA0MjYwMDBBMDhCMjVGMjAxRkYxMzRDNDI3OEUxRDI3MURFQUIwQjNCCis6MTA0MjcwMDA4RjdEOENFNzc4Q0RDRTdCQ0UyMEJGRjM5NEY4NkJFRkFCCis6MTA0MjgwMDA4M0Y1NkRCM0YxRjlCNzNEMkY5MUZFREFFRTNENEE3QzJGCis6MTA0MjkwMDA3MTJDQTAwOUNFREJFRTEyRkNCMTBGRjhBM0JFRkY2MkI5Cis6MTA0MkEwMDBCQ0Q3MEZGQzBBMkY4RUNDRjdEMkJDRTNGNEY4ODA5RTZCCis6MTA0MkIwMDA1RjFCNkQzMDVEMDBCRTMzNTZDQzVCNTBBMzExQkNGMjZBCis6MTA0MkMwMDA2RUVCOTU3MERGNDUyQ0JDMUVGRDQ0MzI4RTk5MUIyRjgyCis6MTA0MkQwMDA3NTNGRkVEMjc4QkNGQTlCNzg5RUFCNUQ4MzBBRTlERjFFCis6MTA0MkUwMDAyMjVFOURBMkRGRUU5NEZERkNDQ0UwNDc5ODZEM0U5RkUwCis6MTA0MkYwMDA4OTcxRTUzNTJGOTQ1QzM0QUZDMjZDMzUxOUU4RDVBMkNECis6MTA0MzAwMDBEQTBENzQ3RDc1ODU5MUNFMTdGODhDRjQ3REVERjQxMjdECis6MTA0MzEwMDA0M0ZCNDI3Rjk1QTE3RDcxNTM5REExQkUzNDcwODVBMTYxCis6MTA0MzIwMDBGRjc1Q0RCMzhDRjZCRTZCOUVBMUJGNEQ1QjY0QThBNzk1Cis6MTA0MzMwMDA1NzVDNkZFODlGRTFCQkM5Qzg2RjcyN0EyOTdGNDBCMUIzCis6MTA0MzQwMDA4NjA3ODMxQURFQUY2NzZDQkEzM0NFQUZBQjMyQUQ5ODU3Cis6MTA0MzUwMDA2NENDRUM3NTM2MDc5NjNEOTNEMkEyNzg2RTNERjkzQzVECis6MTA0MzYwMDA5RTlBRjZEMjk3NUQ1MTg0RkE5OEE3QUNGNTUwN0U1Nzg1Cis6MTA0MzcwMDA4QTM0NjBCQ0M4MkFFQ0JDODk3NzMzMDMzRkZGQTcyQTg0Cis6MTA0MzgwMDA4RUU3N0FCOUE0MjI3ODYzMjU5NERFN0Q1QTAxQ0Y5NzBGCis6MTA0MzkwMDA4RTREQzRGM0IxQTIwMzExRjFGODM5MkJFOTFEOTcyNTE1Cis6MTA0M0EwMDBFOUJGNDUzNUY1Q0IyQUYwQkRCQkZENzNDOTJGRDVDNzk1Cis6MTA0M0IwMDA1NEJDNTdCQjQ3RTFGOTRDRTFFNzc4RkVBQ0I3NkZEMDhFCis6MTA0M0MwMDBFNDRGQTBCN0ZGNTNDMUU1RkQzNzAyMEQ5NDlGRDRERTQzCis6MTA0M0QwMDAwRkQyMENGMTdCRTc5QjBBRkFFRERBRkIwNzMyNTE2RTQ0Cis6MTA0M0UwMDBENDA0REU1NDUwQkY4RTNGMTdGMjQ0MUVCMjYzRkNGMjc5Cis6MTA0M0YwMDBGQkJEQTlGM0QwQkU1MUExRDBGODQ3MDVCRjZERkQzMjdBCis6MTA0NDAwMDBFN0I3ODA3MEYzRDEzRUQyRjk2N0VCN0VCRUJGRDZBNTg5Cis6MTA0NDEwMDAwQUQxQjdDRTQ3ODE3RjFBRTI2MUM5N0M3OUY5Q0NDODRECis6MTA0NDIwMDA0NkE0NURFMEEzMDZGQkU1QzYyNTczREU0MTdCMDgyNEI4Cis6MTA0NDMwMDAzNUU5MzFDMDQ3OERFRDg1OUI4OEJFNkY0Q0IyNkZCQUIwCis6MTA0NDQwMDAyQTg2RjlBOUY3MDJEMENCQzk4MDI5RTVCRUY2NTRDOTVFCis6MTA0NDUwMDBCNEFGOTNDMTU5MDRFRjZGMDBEQ0QwNkVGQ0M2MDgzOENFCis6MTA0NDYwMDA3MUY4N0QxMjdDOUUxNkZFNDRGRDlDOTJGQjdEQTc4QTBFCis6MTA0NDcwMDA5RkQzRDNBM0YwQ0I3NzA1OUZERDIzQzU2QTkxOTk4NUEwCis6MTA0NDgwMDAwMjc2QzJEM0U1NTZFQjUyQ0MzMzM4NUFGNEQxMjY4QzlGCis6MTA0NDkwMDAyN0I0RkU0MDQyNUI5NkZERUJDMDRCNzk5ODc3QTBFQ0M5Cis6MTA0NEEwMDAzRjkyODdGOTEwQTFERTIzNzkwQ0UwQjRDQUEyQUQ0NzkwCis6MTA0NEIwMDBCRDE4RjBDMEI3MUVDRUE1QkQyRjRBRUI1RkRENUIzNzQwCis6MTA0NEMwMDA4MENGNTdGNzQ5M0U2NDg1QTEwMzY3RTZEMDNFRDlFMDI3Cis6MTA0NEQwMDAyNkQ0RTNGNzhDQjJBRUZEMTUzQ0FGQURCRjQyRTM3OTE1Cis6MTA0NEUwMDBGNzQxOTgxM0U1RUM4MTM0QjI2MzVCRjcwMzFGQzI3NUEzCis6MTA0NEYwMDAzRDJGRDEzRDhDM0Q1QkFDQ0RBOUY0OTNBN0FBRjg3N0I1Cis6MTA0NTAwMDAxQjVFRENBMjMwOENBM0FDODJGNzcxMUY0NzhCOEUyQTE2Cis6MTA0NTEwMDA1NkM0OUJGRDEyRDk4NEExREUxMzRCRDExRjFGNUE2QkM5Cis6MTA0NTIwMDA2MTE4QjdENUQ3Rjc1RTUxRUNCN0I4RkZENzU3NUExODBGCis6MTA0NTMwMDBERTJGRUM1QUM5RTNCMUFGQUYzNUQzMzhFNjlCMkQ1NDJCCis6MTA0NTQwMDA1Rjc2MkJDRjEzM0VCQ0YyREYzNjE1QzBCOEFGQUY5MjBCCis6MTA0NTUwMDAyOEJGN0VENkNEN0YzQzhBRjU2NUI3NzIzRDI4MTk3RjhFCis6MTA0NTYwMDA4N0YxMzUwOTNGOTcwNThENzgzNzAyNEZEQjNFMUI5RTVCCis6MTA0NTcwMDA5RUFDMTBGNjZCMTVBQjQxMzkwQkU3M0U3QjJDRTJDRkJFCis6MTA0NTgwMDA5RDhDRUUzNzM2OUYzRjZDMTkwQkVCMkRERUE0RkEzMDc1Cis6MTA0NTkwMDBCNDVCNkQ4RTZDQ0M0M0JFNzA5OEI3NEY1QUI1NUJFMjdFCis6MTA0NUEwMDBGQzQ1QTM3QkVGMDUzRDBBNDNCQkYxNUQ3MTVFRUZFMjg1Cis6MTA0NUIwMDA3OUU1RTJENjg2MjRDQzZCNjM3MkFDMThEN0U3MTY3OTFFCis6MTA0NUMwMDA1Q0NGNTg1OEYzN0VGNDIzQzk5Q0JGNTRGRkQwQjUzQjUxCis6MTA0NUQwMDBEMThGQjQ0QkUwQTNDRUY3QUFDMERFREY0RjdFRThERTdBCis6MTA0NUUwMDA3Q0JDOEZGRUI0ODVGQkM3QzY4QkYxNEE0Qjg2RTYyQzlDCis6MTA0NUYwMDA4NDMyQkQ5MkNGRkY0N0IxMEVCREZFOUNDMDdGRjY4N0NGCis6MTA0NjAwMDA0NzA5QkUwQkFDMUNFRUYzRDY0NTVCNzAxRkI3QzhDMUEzCis6MTA0NjEwMDAzRjIzRkY5QjNGRkU5N0FCNTBBRUY1MTRGRkQ0NEJERjFCCis6MTA0NjIwMDA2NTYxMTM0OUFFODVDNDc5MUM5RUYxRUYwRkRGODFGOUY2Cis6MTA0NjMwMDA3Njk1NzYzQUM3ODU4NzFFOEFFMUI5QjY3QjY0Q0EzMzE4Cis6MTA0NjQwMDBCNDk1NEUxRTFCQkM4ODFGMjE3NDRFMzNEQ0VGNkJFRkZDCis6MTA0NjUwMDAzRjMzQzc5RjgyQUVGNzU3RjFGRDU3OEI3QjdDQUM5RkYyCis6MTA0NjYwMDBGQjBGODAxRkNCRDM2QkUzRkRGNEZERUI3RTBGNUJFOTBCCis6MTA0NjcwMDA2Mzc0NEU3NzdDODk0REUyRjdGQkVGQTM3MTk2QUYzQUY2Cis6MTA0NjgwMDAyMUUxQkQ5NEVCMkM3RThCMDNFMEZDQ0IzMTZDMjlEQTZECis6MTA0NjkwMDBDMTNGRUQ2NDc0NEZFRDM4REU1NzAzNTZGMjcyQTc0QUZFCis6MTA0NkEwMDBGNTk4QjhCN0Y2NkFBNzQ2RTU3NTRBNjAzQ0NBOTVBNTdECis6MTA0NkIwMDAyRjc2OTQyMkJDMEUxNzNEMThDMEVGMzU5QzNFMkVGNDg5Cis6MTA0NkMwMDA1OUE2RjJGQjhFMDJGN0NFRjY5Qjk5MTVEQUNGMUU5MDEzCis6MTA0NkQwMDAyMkU0MzQxMUVCQkZFMTVDM0UwQjAyM0ZGOUI1QjgxRjk5Cis6MTA0NkUwMDBCNzdBRERDRjg5Q0ZGOURBQ0VDQzQxM0I2M0QyQUE1MzdBCis6MTA0NkYwMDA5QkIwMUU1QUY3QzczOUE4MzdGQzE2RTQwNEUyNTdBODQ2Cis6MTA0NzAwMDA0RjYyMkUxOEE3RTU5QzkzREU1RkRENzc0MjQxN0JGRTZBCis6MTA0NzEwMDA2OUQzRDAxQzg0N0ZGOEEwNDRGN0FBNDIxRDY3ODg3RjI0Cis6MTA0NzIwMDAzRTJDRkMyQjM3NTQ2NjcxQkVEMTNGQzk0NEU3RTk5RjRDCis6MTA0NzMwMDBDOEVEMTM3MUZFMDMxM0ZGOTQ4OUZDQ0JCQTRFN0JFNUUxCis6MTA0NzQwMDAwQTNDQzc2MzY2M0FDN0FEMEQ0Mzk5NkE4QTczMzkwOTUzCis6MTA0NzUwMDBFM0EyNEZGQkQ3MjIxRjJGQjlCRDU5MDk5MzVGQjY1OTZBCis6MTA0NzYwMDBFMDZENzJGQkY1OTUyNkREMEVCNzg4M0MyNTI2QzE3QUYzCis6MTA0NzcwMDA1QTA0N0VCNTMyRkU5REEwOTYzRTI5NkEwN0JBNkRFREI5Cis6MTA0NzgwMDA5RjQ1RkU4REQ2OEU4QjdGMDc2NjM0N0NCQkQ0QjI5RDUxCis6MTA0NzkwMDA3MUZGODY1RTQ3RkIyQjMxNUYwQkVEMkZFMzdERjUzMDFDCis6MTA0N0EwMDBFMTU1NUE5MTY3NkNGMDIyRkE1RDY4MzA5RkUyMjdFRDdGCis6MTA0N0IwMDAzRDhDRTIyNUFCQ0Y0REE0RjJGREU3MzdEM0JEMjdBQjRGCis6MTA0N0MwMDA3REU4NDE5NDBCQUNDQzQ0N0FGREVBQjA1MUJGOTkyRDAxCis6MTA0N0QwMDBFODc2QjZEMDZGRDY1NDgyN0Q1MkMxODZFRDEzQjA0M0QxCis6MTA0N0UwMDBCRTVDQzlFRDkwQ0M0M0NDNjA5RjI0M0YyN0ZCQzQyQTFDCis6MTA0N0YwMDBGQzg2MzA1Q0YwOTkxNEVCOUU1N0Q1NzA1NzY1MkVEMjJECis6MTA0ODAwMDBENTc2QzI2RjA2Rjg4RDc4OTVCQ0NGOEQ5NTlDM0U3NTk4Cis6MTA0ODEwMDA3QTVFNzZFODFEMDVGNURENTA1RjZBN0E1RTVBNTVCRjBGCis6MTA0ODIwMDAxMUQ3QjM2NTk0RkNCQkFCMDVCREFGREVDOTA4NUVBMTczCis6MTA0ODMwMDA5RDRFODJEMzdCNkM2N0EwMDFGMEYyM0Q1ODA3REU1RjhFCis6MTA0ODQwMDAzRjFEMDhBNDY3QzFGQkE3ODM4MTc0OENDRkU5RjRERjA3Cis6MTA0ODUwMDBCRUQzNEVFRjZERjEyQ0NBQzZFRjZERUNBQUU0RjFGM0I2Cis6MTA0ODYwMDBGN0ZCNjY1OTExQ0UzN0VDRTQ3NEE3Q0ZGN0RCRThCMjVCCis6MTA0ODcwMDA2Q0E0OUYyOTk2MjEwNUZEOTM4NUZEQTczMjUxQUY5QjFFCis6MTA0ODgwMDBGMkZDRTI2Q0E0QkZEMUQ2Qjk3NUEyNThFN0JBRkNBNTc4Cis6MTA0ODkwMDA3NEVGMDc3RUNDNDBGN0I3MEIzOTE2REExMDU1MTBGRUNGCis6MTA0OEEwMDBCN0FGNjM4NEJGMDNDRkZENkIzQkQyRUZGQkZERTkyQUJCCis6MTA0OEIwMDBDQUM5Rjc1RTQ4MEYyM0JGM0Y3RDMwMkQ2MjgyQTE1NkUzCis6MTA0OEMwMDA4OUVGMjRCRDY3MTlCQzg2RjRDN0U3Q0Q5NEFGMTAzQUQxCis6MTA0OEQwMDBGOEVFODM0ODhGQTFFN0QyRTgxRUNERURGRDlCQ0ZBMDc3Cis6MTA0OEUwMDA5QzVCRDUzRkY3MUQxOUNCQTdGRUJFRjRCMDdBRERGODZGCis6MTA0OEYwMDBBNTg5RjlDNUVGNzZFRUNCNDdGRUY5QkVDQ0Y5QzRFRDNDCis6MTA0OTAwMDA3RENGOTIzRTdCRkJGOUIzMzU5ODNGRjhERTBCN0Y5RTVGCis6MTA0OTEwMDA4QUZDMkNGNENGNjdBNzIyMUYwQkZERjhFQzU0NkMwRjE4Cis6MTA0OTIwMDBGRDMwQkQyMzk1N0VGMkUzMkFFRTNGRDFFNUEzRkIzNUIyCis6MTA0OTMwMDBEOUUwNjdCOTU5RTA4N0JCN0I3QjEzN0VDRjYwQ0E4OTFBCis6MTA0OTQwMDAyNTE0MDdEMERCQTc5NEYyN0JDQzUzN0VEMTk4N0Q3M0RFCis6MTA0OTUwMDBDMjdCREQzMTk5RjIyNTI2OUY2ODRDNUY5OTgwOTdEN0ZECis6MTA0OTYwMDA1NzU5NzQ3RkNEQTVGOTQ3NDQxRTgyRUUxRkQ5MTI5MzgzCis6MTA0OTcwMDBGOUJEQkEzNjMzN0RCRjZFNzk4Q0M3REY5M0ZEMjY4Q0M3Cis6MTA0OTgwMDAwNUFFQUVDNkYzQkUzNUQ3ODdERkYxQzFGQkVCMTgxNzE2Cis6MTA0OTkwMDAzOTdENjc2OTg0RUVBRjg3QUQ0NzNDMDk3QUQwQjI5ODFDCis6MTA0OUEwMDAyOTlBODY3RTkwRkVCNDI4RUE0M0NCNjJGMkE5QjQwNDI5Cis6MTA0OUIwMDBCRkM4NkZENTY3MzZBMjFBQkYyQzY4RjQ2MzI0RkI0MUM5Cis6MTA0OUMwMDBFMDI3NDM0RTg4OUZCNEFFOEQ1QTc0MzlCNTAwRTZGRjk4Cis6MTA0OUQwMDBFNTQ2QTY2MkRDNjY4NDdGQTRGOUYzRTQ4NzQ5RjY5MzkyCis6MTA0OUUwMDA2OEIxMDdBQ0Y4OUVFNkUxREZEREQxRjU0QzNDQUYwM0UyCis6MTA0OUYwMDAyOUU4N0RDMzQ0Q0VCNzc0M0FFQThFOTlFODFDQkE2M0JECis6MTA0QTAwMDAwRDU2MEY5NEZGMjhEQTBGODBEODBDNjM1RTUwRkZFMjNBCis6MTA0QTEwMDBDN0QxNEVFRjNFN0Y1RDNBQzJBQkZCQjU0NTBDQkYyQjE1Cis6MTA0QTIwMDA3MTVBNkRCMDk2RTI3QkU3M0Y2RjVERUE4REUzQzcwODkwCis6MTA0QTMwMDBGRTMxOTFGM0M3NjE3RDYwMTQzOTM3NTNDQ0ZCRjc5Mjk3Cis6MTA0QTQwMDA3N0QzMjc5QTg0QkZFMUZGNkY3OTA3NzZGNTU1MTNCOUJECis6MTA0QTUwMDA1REJEOUNGQjNEQjg1RDlEMkMyNzc0RkVBQjhGMUIxMjhBCis6MTA0QTYwMDBGMDFFQzk3RkRGMjFGRDA1RUM1RkUyQkZBMTg5MUFGNUM5Cis6MTA0QTcwMDAyQkVDNUY5ODRENzZGMTZCNEJCMjM1QzdDOEYxNEI2NEE4Cis6MTA0QTgwMDA5RkM5RTkxRDM5QkVBRUFGODVDMkZFMjM1NkI0NjNGQzkzCis6MTA0QTkwMDAzQ0ZGMzRCNDQ0QTJFRjRCODUwMjEyRTlEOUExMTY0Qjc2Cis6MTA0QUEwMDAwNERCRjVGNUM0OTZGMEI4RTA1MjlGNDRERjBCRDFGNTc2Cis6MTA0QUIwMDAzRjVEM0YxQzZFOUYwQ0VERUVCOEJFQThFQjg1QjEwMENDCis6MTA0QUMwMDBGNzhCMkVGMTVCQThGRDNBMjU3ODBCQzJFOUI3NTExQjk1Cis6MTA0QUQwMDAzRDlGMzI4MzhGMEI3Q0UwMDhGQTNGQUZGQjgyNDRERkJGCis6MTA0QUUwMDBGM0QyRjU0NTFEM0Y5M0Y1QzkwRkZBNEIyRUZBOURCQTQ3Cis6MTA0QUYwMDA4NzA1NUVFQUY0MzUzRTg5MkU3NDM5QjVBQjkyQzNBN0JCCis6MTA0QjAwMDAxREU1NzQzNkNBRTk4Rjk1NDFDN0U4N0EzN0M4RTlCQjE1Cis6MTA0QjEwMDA3MEZEQkIyQTE5QkQzRkY5MTc3MjIwOTVERDlEMjFDNjk2Cis6MTA0QjIwMDBERjhBRTcwNjY1NjFFQ0M1N0E1QzZGMTE4QjUxNUVENDU0Cis6MTA0QjMwMDA2OEYyRjNCNjJBNEUwRkEzQjVFRkFBQkMzNDNBRkU4MTUxCis6MTA0QjQwMDA5OEZGRUY0NUM3RkIyN0ZFRjdEMDVCODdGNTNGMjVGNUJDCis6MTA0QjUwMDAzRUU3NTVENUZGNjgyMkMwRDU2RUVFQTBGQjUxRUM1RjU1Cis6MTA0QjYwMDAyQ0U0Qjc0RUVFMTcxMkYyMThFNDk5MDE4RjhGMTQyOTM2Cis6MTA0QjcwMDAyNkI0N0I0MjZERENFRUVGQzlEMjVFMjFGQkU0MjU3RURDCis6MTA0QjgwMDBFRkZFNzY5MUFGNzREQjM5OTVDQTFFRkM4MDE4QjY3RkI0Cis6MTA0QjkwMDBEOTREN0U5QkRCRjY5REIwRjhFMUZERTU2QkE1NDlFOEJDCis6MTA0QkEwMDAwRjVBREU2NkRDNEY0RkFFN0Y2RUEyMUZCQzY3NUMyRkQ0Cis6MTA0QkIwMDBDNTE1QzI4Rjk3NjgzODdFMkI2RTE2RkQyMTNERjkxMTAxCis6MTA0QkMwMDA4QzNEQjZBMzFGRTczMjdDOUU3MERGMDJFNjU5MkQ5RTE2Cis6MTA0QkQwMDA1RjIxRkMzQjJDNDkwRkY4RjFDMEVCRTRFRkMxQjgxMEFBCis6MTA0QkUwMDBEMkFGRDIyRjUxNUU0OEU4MThGNzc3QjRGNzczQkVGMDEyCis6MTA0QkYwMDA3NjlCNDRGQ0U0NkQ5MTlGMTE1QTY3MjNGRkI2QUU0NzQ0Cis6MTA0QzAwMDBCQzIzRkFERDdBQTc0NEZBREUwOEJEQzI2RjhDQkJBQ0M4Cis6MTA0QzEwMDA3RUVDMTdDNDE3OTNGNTA4RTcwMTNFMEVDNjVCRDAyRjU0Cis6MTA0QzIwMDA3M0E0NjhBQTg0RjVENTYwMTdFMkY3NEI0MzlBNzY2REIyCis6MTA0QzMwMDAwMTVGMUY4QjEwN0ZGMTFCRkMyODFGMUNGQjM3QjIyMzY5Cis6MTA0QzQwMDA5NzNGMkZCMTZDRDIzQjkyRTIyRjNERjM5MkUyMkY0Nzc4Cis6MTA0QzUwMDA4RjE0RTAzODQyQ0Y1MEUxM0ZGNDFGMjZFQjE5RUQ3RDcxCis6MTA0QzYwMDAyNzJDNjgxNzdDNTI5QzQ1QTkxQUY2Qjc5MDVGNzA4MjcyCis6MTA0QzcwMDBDQ0ZEQUMxM0ZBMjUxNUZENDkxMzA0OUNBNjZEQjExM0E4Cis6MTA0QzgwMDA5Q0U2QkNCMTMyMUJFOTVDM0Y5RkY3MTdGMkYzN0FGRjU5Cis6MTA0QzkwMDBGNTBGRUJGMUJEQTk2RkM4MkFGMkRCMUZCRkJFRjZFNzI3Cis6MTA0Q0EwMDAwNUJDQUU1OTM1N0M2RjZEM0FEQTIxRUZCRkIxMjYxREQ4Cis6MTA0Q0IwMDBFMUY4NjMyOEYxM0I0QTNGM0MyOUE3RjQxRkFFMTVGQ0ZECis6MTA0Q0MwMDAwOEU0NUI0MTE1RTZEQkRFMkRGQ0M2MzJDOEI3OENCOEM0Cis6MTA0Q0QwMDBGRjI1RjlCRDFEQzIxRUVCQzFFRjFCMjFGRTNEQ0ZFMzM5Cis6MTA0Q0UwMDBEQjNERTM4MkYzQThGRTUwMzFDRjIzOTYzOUJFM0VEQjk1Cis6MTA0Q0YwMDA5RkE1QTJCRTU3MDU5QkM1MzhFQ0Y3RUNBQzFCRTMyQjc4Cis6MTA0RDAwMDAzREI5QzE5RjEyN0QzQzY0MjJGQzg1RjdGOTc3MjdGNkY3Cis6MTA0RDEwMDA2QjI0RUYxMDY0MThGRkE4MDE1OTYzQTVCQ0M2MUM4QTU4Cis6MTA0RDIwMDA4M0U4REY4NTE5MDc3NkE4Rjg4RUMyMTI4Q0JCNTY4OUY2Cis6MTA0RDMwMDAzODQ4OEQ5REM5MzhGRTM2NEI3MDZCMjVDNjVEMDY2NEJDCis6MTA0RDQwMDBERjdBN0M0N0Y2NjVFM0Y3OTI5MkUzMzE3QTdDNTg4RkZECis6MTA0RDUwMDBDQkU4NzFFMkQxRTIzMjEyQ0U1M0MzRjEyQ0YxM0IyNzAyCis6MTA0RDYwMDA3QUZDODU3RDgxRTc2Rjc2NERFRkEwRkJBRjYzQjEyRkI1Cis6MTA0RDcwMDBGMUNGMTFGMTk0RDU2ODZGMjZDNzUzRUVBQUQ0RkIxQjZGCis6MTA0RDgwMDBFMzY5NUIyQjlFMjE3Q0ZCQjQ3MUI0MUY0QzFDNkQ3RUQwCis6MTA0RDkwMDA4RDlFMjdDRjNGMzlFQjgzM0NCMjVGRkVGMjFGOTkyNEYzCis6MTA0REEwMDBDRkZBQ0Y5MkRDMzkzRDk0MjZFRTcxMEU3MjNGNzVCRjdCCis6MTA0REIwMDA4NUVDRjVEMzYwMDdFNTI2QzhCMzVGNTVGMjcxMEZGNUIyCis6MTA0REMwMDBDRjIyN0MzQzEwNkI0Q0M3RkU3RkFERTRGMEQ5RjJEQTA5Cis6MTA0REQwMDA5MkM1QTg0Rjg3NjMzMkNGQzc2NkRDQUUzOTEwOTNBNzYwCis6MTA0REUwMDA3MEZENjAwNDlDMzY0RDRDMDEyN0FCM0Q3NTFFRDA1NEMwCis6MTA0REYwMDA4MUQ3NTNBQkY4QkU2N0JEQ0VFRDk1RDA1QTFFM0Y1MDVDCis6MTA0RTAwMDAwNUJEODU5QTE0RTIyNzQ3OEJGMjI0REQ4RjNDMzY1NTg5Cis6MTA0RTEwMDA3Q0UxRjkyMUUyQjNBREI3RjJGOEVFMjVDNzE3RkEwNjQ3Cis6MTA0RTIwMDAyQ0FDMzg4NURGQjY2OTBFRjE5QjRCRjVENzMyQjQ4MkQ2Cis6MTA0RTMwMDBBN0M2RjlGMzc2OUQ5RjU0NzNGRkFEQUI4QUU3RjMzQkFBCis6MTA0RTQwMDAzQjI2RDVFMzc3RjFGNDdEQTc4MDIzRjM1RTVBOUMyRkIwCis6MTA0RTUwMDBCM0ZBRDJGQTJEQUNCOEI0N0U5QjJCNTI5QzVGOEE3RUZCCis6MTA0RTYwMDBERkI4QzQ3RTNGQjhDNDc5RDM1M0QxNTc4QTdFN0ZCQ0E0Cis6MTA0RTcwMDBDNDc5NUZBQUZDOUZGOEU3NzAzRDM5QkU5OTFDMEY0REJECis6MTA0RTgwMDA4RTczQTZCRDc0NzMxOERCMzY0QkY3MEM0NTExQkE5OUI3Cis6MTA0RTkwMDBDRjM1RTNGN0QzRTVBQ0M3QUNDOEQ3RTZDRkUwRjE4MEI4Cis6MTA0RUEwMDAyRDhERDZDODZFMjkxRTE3RDVFMUY1NTEzNUQ3QkI1NEM3Cis6MTA0RUIwMDBFRjk5MzA3RTNGNzFCQzNGRDY5ODBENzQ3QzdBMDYyMzAzCis6MTA0RUMwMDBCQkUxQjQ0RDdDMEY0OTU2QzcyREE0RjM1M0U5N0IzOEExCis6MTA0RUQwMDAzREI2RDRGMUE1MjdDNTc4QTNGMTkxQTI5QUZBRjM1NTZFCis6MTA0RUUwMDA1M0U4RkU1MENBRUY1NERDMkZGNDQwQjU4RjkxQkY4NkQzCis6MTA0RUYwMDBDOURBQjg0NTM0QUYzNjBFRTVDQzk4MTdGOUYzQ0MyOEFCCis6MTA0RjAwMDBBM0ZDM0U2ODc3MkYyMkZENTk3M0UzRkE3Njg4Qjg5N0ExCis6MTA0RjEwMDA3MzVFOTkxQkZENzQ0RTkwQjcxODE3QjkwRkUzMjNFNDI1Cis6MTA0RjIwMDBENzU3QTk5RjNFNUY5Nzk3Q0ZCN0MzQzIyNDhDNjM4NTlECis6MTA0RjMwMDAyQjc5NUUwNTZCRTkzNUM0MzU4RTVCQTJCRjVCMjE1MUQxCis6MTA0RjQwMDA1QzYzMkNEMkZCQ0Y0QzUxRUYxRTM3M0YxNzg0QUZGNzc5Cis6MTA0RjUwMDA4MDRBRjE5Njk3Njc3Q0E3ODJFRUM1OEIzOEM3MUQyQUQ5Cis6MTA0RjYwMDBFRjcyMThFRDBDNThDNzFEMkZENDExRkUyRTNGMzRFM0ZECis6MTA0RjcwMDA1NzJEQTgwRjdBNjQ4MkYzMDgzRDVDRDg1NzI3ODU3REFBCis6MTA0RjgwMDBBOERCNTc4MzY4MjcyNkQ4MUI1NTVFRDM2ODdDQTkyQURGCis6MTA0RjkwMDAxNTVGREEyMTcxRkIzN0ZDMzM2RUZGRDYyOUJFOTJDNDUwCis6MTA0RkEwMDA3Q0FBNjkwMjFFMkJBMkRDMEZBQkRCQjUzNUZFODgyOTdCCis6MTA0RkIwMDAwRkUwNTA3N0E3Mzk5QTA2QjJCNzZFNTNCNTgyRkNCQUE0Cis6MTA0RkMwMDA2RTUzOTE5REZDNEEyQkY3OUI3NDc4QTczQUY3N0FCMTAwCis6MTA0RkQwMDBDRTJEQzc4NjI4MkVGMTZDRjIzRDczMkY4RkJCMEUwOUE0Cis6MTA0RkUwMDBGQ0U5QzJCMzg1RkExREE1NzIxNzhBREYzMTMzNTU3MzA4Cis6MTA0RkYwMDAyQUJGNzgyQkU4RkRCOEJFMTUzRDdDQkQ3QTFDQTQzNUQwCis6MTA1MDAwMDBBQUNEQzI3OTRFMUQxOURBODQ2NTZEOUI3QjE2RjkwRDA4Cis6MTA1MDEwMDA1NzlERDk4NDcyMzM3NEZFRUNEMUFCQzgwRkEwNjhBOTM4Cis6MTA1MDIwMDBFRTBCNTg2QkNDQjQ4RTY3NTExMTQxNzhDRDk1Mjk2RjNBCis6MTA1MDMwMDBCNzZFQUU0Q0U3RUQ2Q0I1OTExREVFQjQzMDMzN0U5RjhDCis6MTA1MDQwMDBENUI5OTBDQkIxREFBNjlDNTk1ODY3NEJCMjQ4MEVENzY4Cis6MTA1MDUwMDAxRUQzQjI2RUY2QzZFRDdDRTdEQ0I1QjkwOEE3NEY4QTYxCis6MTA1MDYwMDAwRkU5RkU4MkVCMTRGRjRENzg4RTlGMzYzRUI0RkFGOEJFCis6MTA1MDcwMDA2Qjk0Njc3NkMzQTAzMTNFQTRDNzdCNDY4QjBGRTlGMUUyCis6MTA1MDgwMDBEOTUwRDM4Nzg2Nzg3MjQ4MUU5QTgzN0U5NUJBMTc0RTc4Cis6MTA1MDkwMDA1MTdDMzhENDI3QTkyRTc3M0M2RTE0M0E3MDQ2MjFGOEZCCis6MTA1MEEwMDA4QTc4MTFGNDU3RjBCRDNBMzhGNjcxNEVGQ0RFMDA4RjY1Cis6MTA1MEIwMDAxRjNEODdGOUI4MEE3RTRGNEZBNUJDREIxRjYxM0U2RUNFCis6MTA1MEMwMDAxOTdFNEY4RkU3RTMxRUM0N0M1QzA1RUY3RkYwN0NEQzJDCis6MTA1MEQwMDA0MzIyQkYzN0Q0N0Y4NkUyNEQzRDVFNjNCQzQyOEY0NzlCCis6MTA1MEUwMDBEQzI1MDVCNjc5NzMwREYxMEFBQTI3QzcyQkNDNzY2RTlECis6MTA1MEYwMDA4Nzg2OEU1OUU4QkJFOEExRTM1NkUyQjNGNUZEMkIyNjdGCis6MTA1MTAwMDBBMDNFQTY3RkFGQkMxREUzMDUwOUZFQTVGN0ZEM0UxQjMzCis6MTA1MTEwMDBERUVGNzkzRkUwQjM2MTlDQTA2RUUwMUQ0NTIzQkUxMzM2Cis6MTA1MTIwMDAyREMwMTRBNjc2MzlBNkEwQkQ4RjcwQTAzQ0JGRkU3QTE0Cis6MTA1MTMwMDAxQkMyRjUxM0ZERkE3REZGRTNEN0ZGMzQ3RUZEOEMzOEVCCis6MTA1MTQwMDA1RDEyRkZBODBEOThFODVFNzlFRDMxQkZFREU2MDRGRTMzCis6MTA1MTUwMDBCMDI1QzBGREMzNUIzQ0M1NDQ3RjBGMDQ4QUIzNTYyNjBGCis6MTA1MTYwMDBGQUYxOUJCOEZERTY5Q0VCQjEyNTNFNUY1NEMzRUYwRjBGCis6MTA1MTcwMDAzOEE1RDRGNzBCNUVGN0VBRkVENzExRkNGNjc1NkY0QTM3Cis6MTA1MTgwMDA3RDI3NzUzQzYwNEIxM0U3MjNCQUJGN0Y2NDdDQzBGNzczCis6MTA1MTkwMDA5MjI3QzFDRkZGRkVDRkFDRjQ3NzE3MDY5RTRGMjM3OTNECis6MTA1MUEwMDBGRUQxMEI2OTdCNTBFRkFFNkQ1QTM5MjEwM0VBQjUyNzZBCis6MTA1MUIwMDBEMzk4OUJDQjIzNDM1QzYxNzk5M0M5NkZDQjRDMTU0NzQ0Cis6MTA1MUMwMDBGMDE3RDBGNzQyOTNFMzA1NEQyNkUyRUZDM0YxODIyNkI0Cis6MTA1MUQwMDBGOTE0RDU4NTdFN0VDMzk5N0ZDRkMwNEY2NDNGMkI0NUEwCis6MTA1MUUwMDA3QUQwQkU3ODc2QjVFNDFCNjAyM0UzMDczMDcwMDE5QjZDCis6MTA1MUYwMDAwRUJCNjhFMjc2ODJBRkQ5NEE3NkMxMjdDNTE1NUEwRTMyCis6MTA1MjAwMDA5Q0Q4ODg3RTgyNDk2QzdCMEY3RTdGNzI5MkM3QTQ4Mjc1Cis6MTA1MjEwMDAyODRBMTE1N0UwRjk5REI1NDI4RjQ4RjYwRjIwN0VBMDJECis6MTA1MjIwMDBEQzRGRjYwQjY2NTY3MzM5OTQ1OUNERkQ5ODNCNTFBRjYwCis6MTA1MjMwMDBDRjhEOEZBM0JGOTc3Q0VFNUYxNDcyNjkzNDNGRTM2MjFBCis6MTA1MjQwMDBEMURFREQ1NEJCMDVDRjJEM0NERkM0OTBGRjc3MzczNTcxCis6MTA1MjUwMDA1ODNEMDlFM0I5QUI3OURFQ0MwRThDNTNFNDI0QzYyOTYyCis6MTA1MjYwMDA3ODNDMjIzOTNFQTFGM0E3QkE4MThGRTdFMEI5M0ZEMDVECis6MTA1MjcwMDBDRkZENDcyMTE3Rjc2N0Q2MURBQ0E3N0IyNkYxNzU3MkM2Cis6MTA1MjgwMDBGQzdDQzAzNTdDQ0YzMDhCRjE3RDMxMkJGNzczOTE1Rjg3Cis6MTA1MjkwMDBBMTc2RkU4Nzg3RjBFRjEyQjA0MDE2RkQ5RDgzRDA3MTk2Cis6MTA1MkEwMDA0Rjk3MDNGOUM4N0M3OThBQTQ5MTdGN0JEOERGOERGRTY0Cis6MTA1MkIwMDBBOEM1QUZCNENEQzM3Q0UwQkFBNTkzNEVFMEI5MkM2REMwCis6MTA1MkMwMDBCMTUwREVEMUUyNTc5QUU5RkJFM0JBQkNBQTVCQkE3QkU0Cis6MTA1MkQwMDAwM0ZFREQ5QUE1MTU5MkNGQTY2MTdCNTMwM0I2NUZGRDUxCis6MTA1MkUwMDA1NDE0M0Q3QjZDMDFBRTBFRTgyNTc2MUM3QTE3OTM3RjMzCis6MTA1MkYwMDBCQkJFMUFENjVCQjc1MEY4QkQ1QkI4NUM1RERBQkZEMEY5Cis6MTA1MzAwMDBDMjNGNkU2NTk0NzM4NzhCM0UyMkJCRjk2QzdGMURGOTlCCis6MTA1MzEwMDBCM0IzMzFERUVBOERDQjk5QkExNzQwRkU2NEM0RTVDRjUyCis6MTA1MzIwMDBERjJBNzdCRTU4Q0RFREMwQ0I0MEZFRTA3QTlDMEI3OUVBCis6MTA1MzMwMDA1QzMwRjlGQ0RERTJGQzQ3OTMyN0EzRjE0Rjk0MUZGQzlFCis6MTA1MzQwMDBFRkYyODQwQjI0NTc1Q0VFNkE2ODRGNEY4QkNCNUZCNTRFCis6MTA1MzUwMDAwRkVBNjM0N0M3QkY4Nzg0N0U5NTM1OEFGRUY1ODBDMDE0Cis6MTA1MzYwMDBGNzUxRjMzNUZBRkUzRTdFRUZFREQ1RkYzREUyNTdCQTM5Cis6MTA1MzcwMDA3REEzRkJCRjc1N0JFOEY3MDJDRTdBRjlBRUMwOEJCRjg5Cis6MTA1MzgwMDAzOTVGMTk4NTYyQ0E3QzY1NjdFQTdDRTUxQjdBMjVGQTc0Cis6MTA1MzkwMDAwRThCQzg1NzNFQTJCMEZBRkQzOTk4QTcyN0VFMjU0NEQ4Cis6MTA1M0EwMDAwMkE0REYxQ0Q5RjVFQjRENEZFNEUwQkQwNDQ5NDVCMTQzCis6MTA1M0IwMDBCM0JBRjcwNEM5RTdENUEwQ0Y5MDFFRDRGRjJFRjc0QkEwCis6MTA1M0MwMDBGNUYyRkNEMkQ1N0RDNkZCMEY3QUU5QUNFMUYxRjY0NkU5Cis6MTA1M0QwMDBEODBGRjk5MTQ1MUVERjlDMDM5Q0FFNDM3RTI1QTJCOUYwCis6MTA1M0UwMDBEMTJGRjQxNTM5RDEyRjE0RDI2MkI5N0E3RTYwODRDQkQzCis6MTA1M0YwMDBBNTk0Nzk3Q0VENkM4OEYyRkREQURCMjQxRkNBODNDRjlCCis6MTA1NDAwMDBFQzI3RjJGM0ZDQkU0QkY1MTNGREJDREE5ODdGN0FBRUM1Cis6MTA1NDEwMDA4QURGRkI2OTBFNEExMkVBQTM1NjUzNjAxNUU1RjcxRUIwCis6MTA1NDIwMDA5NEQ0NTQ3OUEyRUYwODc5NzNCNUYwRDNFRTU1MzgxRUIxCis6MTA1NDMwMDBFQ0JENUNBMkJDNUFCQzE3ODNFN0JCRjcyMENGOUZERjUzCis6MTA1NDQwMDA1QkNCRjNFNzc1QkZBQzlFMTc1RjE5RjdDQkQyN0QxODI2Cis6MTA1NDUwMDAzRDlGNUVDRjhGRDdFRjg3MkVEQzY5OEZBMjdFQjFDREM3Cis6MTA1NDYwMDBEMkVCNDIzQTFDRkU0RTBGRUEyMkQwNkUxN0RGMTk0RkU0Cis6MTA1NDcwMDA1RUU3MkZBQUVCNzc1NTUzQkY1MUY1OUIzRjU2QTdEMDU4Cis6MTA1NDgwMDA2RkZDQzI0RUZCNzNGNUE4N0FGOTVGQUI4RDdBMzlENTA0Cis6MTA1NDkwMDA5M0Y1RjJGRjJBQkZFQzM3QzQzRTUzRjlENTUyRUI2N0MwCis6MTA1NEEwMDAyM0ZBQkQ3ODg5RkQ3RTk4MEExRTVEQjZENERGMEI2REE4Cis6MTA1NEIwMDBBRDExRkMzN0U5RUY5MkIwMTFGNzdCQjg3Q0VCOTFCNEZBCis6MTA1NEMwMDA1RjVENDE3MTJFMEJDNUI5NzRGRUQyOTNDMUM3Rjc4QUQ3Cis6MTA1NEQwMDBGMUY0RjJGMzM1OUNDRjhDRjY1REM5NDVBMkRGNUFDOUQxCis6MTA1NEUwMDA1RjU1MzMwNUJGMUY2RkY0OTM1NUY3MUFGRDY0OTdGNUE5Cis6MTA1NEYwMDAzOTBERjU0OUQxN0M0M0ZGQkE2M0M1ODZGNjI5QjE4OUQ4Cis6MTA1NTAwMDA4NkY2NjkyNzZCMERGNTE5ODM5NzFCRkE1RkYxNzY4MzkxCis6MTA1NTEwMDBBMUZFQjkyMUEzOUZFQ0FBNzM4QjkyRUUxRDcxRkNBRTg0Cis6MTA1NTIwMDAwNzhDNDg3QzZGOTZGNThCODY3RTA1NkRDNjdEMTU3NTVDCis6MTA1NTMwMDAxOEY3MzU2MTlENzE1RkZBQjhFRUIwNzE3RjI1M0RDNkYxCis6MTA1NTQwMDBGRDM5RDE3RkVGRkRFQ0ZFRkI5ODU3RTNERkMxRTkyRjdBCis6MTA1NTUwMDBBMUVGRkVFRDY4RjJEMDc3QUVGNUZCN0ZGRjA5RkVFRjFECis6MTA1NTYwMDBEOTIyRjA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTA1NTcwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjUzRTE2NzYwRjg1MTJBCis6MTA1NTgwMDAwRkMxNUJGOTE4MTgyRUYwMjFGOEY0QzAxQ0NDMEMwQ0RDCis6MTA1NTkwMDA5QzQwQUNDOEM4QzAyMDAxQzRGQzQwQ0MwNkM0OUUwQ0QyCis6MTA1NUEwMDAwQzBDRkY4MUY4MUIxMEJGMDVFMjI3NDBFQzBDQzQwNzcwCis6MTA1NUIwMDA1OEIwOUJFM0M2Q0FDMEUwMDFDNERDNDBCMzc4OTg4OTA4Cis6MTA1NUMwMDBCN0RGODkxN0MxN0VDQ0MzQzA3MDBFODg5RkYxRDAzNzdBCis6MTA1NUQwMDAwQzA2MUI1RTI3NDAzRkJCN0U0M0VEM0EyOTMyRjBGRUFFCis6MTA1NUUwMDAwNjYxMjEzMTYwOUExNDQ3RjBBNzhBQTNDQTBCOEIyMTY4Cis6MTA1NUYwMDBEOEM5RDI5NEQ5OTUwRkQ0MEYwMEYxOTMyMUYwODAwMzJDCis6MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEU4Cis6MTA1NjEwMDAwMDBCRUQ3RDBCN0M5NEM1QjVGODdDQkJERkJFOTJERDQ1Cis6MTA1NjIwMDBDRDI2RTQ0OTAwMzcwOTYwNTAxRTRCODBDODRCRERGMEExCis6MTA1NjMwMDAzMjUyQzQwNDExODI4QTJDQUYxMDAyNzkxNEE5QTVGRjNBCis6MTA1NjQwMDBEQUJCMEIyODA0QUFERTU4NTFBMzdGNkExNzA0MUIyRDZFCis6MTA1NjUwMDBEQTgwRDExQjZERTAyRUEyMDhENTZBNjg0NTUxQUIwREVBCis6MTA1NjYwMDA4ODg4MDg0OThDOEY2QUI1N0FDRjM5MzNERjY2RTdDQkYzCis6MTA1NjcwMDAyRTg5QjZGRTZGRkZCRjdCQzNBRjFERTc5Qjk5MzM2N0QzCis6MTA1NjgwMDBDRTM5NzNFNkNDOTk5OUIzMjY4MzgzMTkyRTYwRUMxQjJGCis6MTA1NjkwMDBGQ0JCOUMzMTlCODkzMTM2QTYyQjZENTczQTg2QUIzOUMyCis6MTA1NkEwMDA1REU1QjdGOUJEQ0M2QjY2QUNDRTZGQTU3NDhCM0Y5RDQ1Cis6MTA1NkIwMDA3OTA3QzM3NzlGQTEzMDY4NjdFQzVFQkY4QkYyQkZGMEJDCis6MTA1NkMwMDAxNzUyNUFFQjJGQTI3QTc3RkE0QjI4N0ZCQkRGNDdFOUI0Cis6MTA1NkQwMDA2NjdGMTk3REFGRjE1NzUzN0U4MzdGMERBNTlCRDQ0NTFGCis6MTA1NkUwMDA2OTJDMDVGQTY2NDU4NTU5Qzk4QzU1M0Q5MzkzQjcxOUMwCis6MTA1NkYwMDA3MjVCNjY4RDRGNTA0NzQzRkUxNTIzMzM2NjAxN0M5RkQ2Cis6MTA1NzAwMDA0QUZEMzFENUJENjlFMEU4QUU3QTFBOUU5QkQ0NDlGREM5Cis6MTA1NzEwMDAxMDRFRUQxMjhFMTdCMzMyNUI4QzdBNTkzOENFM0I5NzEwCis6MTA1NzIwMDAwODc4RjZENjlBOUNFNEE4RjUwNjIzQkNEQjRCMDBERThECis6MTA1NzMwMDA1MDI4NzA4NUFDMzlEMUUxNUQ4Q0YwMzY5N0E4QkM1RUZECis6MTA1NzQwMDA3MkIwMjYzQjNBM0MwRkQ2QUJCOTQxQzA0QjBGNTg2MzAxCis6MTA1NzUwMDBENDFCODNGNTM2REMyMEYwRUJFN0FCQzk4QURFRUY3OEFCCis6MTA1NzYwMDBBQ0M3NUNFQURGNUFBRDhDRkVCRUM5QzZGRkI3QkI0RTA0Cis6MTA1NzcwMDA1RDJDRjI0NkNDMjYzMTM2QUVBQjlEM0U2NTJDQzA3MDFBCis6MTA1NzgwMDA5QzJBRjMxNTEyMUZEQzk5NUY3RjkzQ0ZEODREMDgxMzI1Cis6MTA1NzkwMDBEQTA3MjZCMTkwMTFGQTBGMjRCMUUwRkEyQ0E5RkU0Q0Q5Cis6MTA1N0EwMDBBQURGREFGN0VCNkY1MkE1RkEwMTQzOTRGQTI2RDZBMEU2Cis6MTA1N0IwMDA2MEY5Q0Y1MThFODBFRkY3Rjk3MzI5REQyOEU0RTdCRTU5Cis6MTA1N0MwMDBBMTA2QzZCMDVEQkEzOTM4MDhEQURERTNGNzkwQkNEQzczCis6MTA1N0QwMDBFRDFGNEJFNTc3MDkzOUZDNzcyMTY3NDEyMTY3MEZBMjVGCis6MTA1N0UwMDA5QzQxQkExNUU1Q0M4Q0ZERjk1QTRCMDE0RUZCREU3ODk1Cis6MTA1N0YwMDBCNkQ5NERGMkI1OThGMDU0MTlDMURGQjA3N0M4RjZDRERGCis6MTA1ODAwMDAwMEZGQkUxQjU2OURERTA2RjQ2RjZCMUVFNjMxNDJCREU3Cis6MTA1ODEwMDA3Qjg2NkFGMkM1QkMyQ0I5QUJERTNEQjM0RjM4MTcwREExCis6MTA1ODIwMDAyNTdBOTcyMTlDQkIzRDgyN0YyQTBDMkNBMkRFREQzMzlBCis6MTA1ODMwMDBDMkY1MkFCMERFNUQ5RTMwQkM1MDY0QkY3NzREMDlEN0ZCCis6MTA1ODQwMDA1QjQ1N0M1NjU4NDk4M0JEM0I1Rjc2MzA4NUU2MjMwODJGCis6MTA1ODUwMDAwQUQxRDc4NEY0ODU3OUY5RUM4MEVCOTQ1NjY4OUY5MjRECis6MTA1ODYwMDA5Qzk3QzZBMERERkQzODFGQ0QzOEVGREM0NDE3QUQzRDU5Cis6MTA1ODcwMDBEMkQ5MDdERjMzMkNBQzFBRTEwMzY1RjcxQjAxNUZEM0U0Cis6MTA1ODgwMDA2Qzc3MjJEMkU1RjY2QjhCOTgzMjhDQjFCRUEyM0MzNTk4Cis6MTA1ODkwMDA1MEE0NjQwMTVDRkI5QzIyMDVCRjlCNjY0MzM5N0M3NzY2Cis6MTA1OEEwMDA4OUYyRTQzNUJDRkM3NjJDNzc3NDk1Mjc2MjM5N0M0RkZECis6MTA1OEIwMDBBQTg2NzJDOERCRTdGMkYyM0JGQ0MwODlDMTVERjUzNjBGCis6MTA1OEMwMDAwMTlGN0RDNEVGNzRGRTFERDg4QUY0MzE4REU2QTk4NjUwCis6MTA1OEQwMDBGNzEzMjgyNDQwQkY4Mzk4OEVFOUMyN0ZEM0EwN0IzMzdGCis6MTA1OEUwMDAxNkRBQkJGMEI1MERBRUE3QkM4NkRGQTZDMTcxOTREN0EyCis6MTA1OEYwMDBGMEIxNUREODJGNjMyMUE0N0Q5N0Y0NjVERTVDMzExRjg0Cis6MTA1OTAwMDA1ODc3M0EyNzdBQjNBNUYyNENENTkzQTAwMjlEMzI1RjFGCis6MTA1OTEwMDAzMkIyMDBCMDIwMTNDNDEzRTFFOURCMTUzMTAzRTFEOTQxCis6MTA1OTIwMDBFM0ZDNEJFRURERkMzMzBEOTVFOUEwQTU0NzA1M0QzNEM2Cis6MTA1OTMwMDAzQTZDRUMyRkQzQzEzMjQwQTZDM0M2MDEzMjFEMkMxN0RFCis6MTA1OTQwMDA5QzlGMEUzQjk4OUJFODFDOEIxRTVBQkY5Qjg3QzhGREYzCis6MTA1OTUwMDBDNjVEMjRGN0JCRjkyMkI5REZCODhCRkYzOUZERDY2NEU5Cis6MTA1OTYwMDBDOUZENUFCM0U1N0U2QkIyRTU3RUFEMzlGRjU4QkY0QzM5Cis6MTA1OTcwMDBGNUMwNjQ0MDdEQTVGRDVEMjhFOUI3QUI5OUVGMkNCNjc1Cis6MTA1OTgwMDA0NzNEODdGMzQ5RDM3M0E2NjQxRkYzRDlCQkY4MDlFQkVFCis6MTA1OTkwMDAxNDYzRjk5MTcwMDY0QjdBMTVFMDdDOEFGNTAwOEVGNzU2Cis6MTA1OUEwMDBGQzcwNUMzQTM4ODNGNDcwQkUxNkY4QjA0ODNEREQwREVCCis6MTA1OUIwMDAwRTFCQTgxRjg3NDlFMUVENDI4Njg4RkU5OUVBNjM0NUUwCis6MTA1OUMwMDA4RUM4NzYxRTVERkYzOUZBRkU5RDhBMTg4N0UxQkNGRDAwCis6MTA1OUQwMDBCQjc1NzRDREQ2RTM5MzI2RjA2MTg2RjNEMTgzQjk3NDk5Cis6MTA1OUUwMDA3MEIyRjQ3MERDMDI5RjkwNzI1RTM4NkVGRDM4MkUxNDM3Cis6MTA1OUYwMDBGRDA3MTQ2OUZEMDI3QTBDRUI2QUQ3MEVGOEQxM0E5NUNGCis6MTA1QTAwMDA2NzA5RUUwNEZEMTBEQUY3RTUyOTVDMDdDRTM1NUVFQjk5Cis6MTA1QTEwMDBCNjQwRkRGRDIzMkRBMUNCQTFGQzVDQjAyMDY4ODFGMjM2Cis6MTA1QTIwMDBDOTRGMUU3NUEyMUQ1M0YxQTQ1MUM1NzJDMzNFMUJBREQzCis6MTA1QTMwMDAyRjZEM0IxNDJBQUZCMkI0REMzOTAxQ0EzQjlFMzRCMjlECis6MTA1QTQwMDBFREQ0NURBNjAxQzc3NzRBRTgxNDE2RTJGOTUyMUJDRkUwCis6MTA1QTUwMDA1NjZDREI3RjIzQjYyRjZCQjIzMDFCQzBBQjc4N0FEOTg0Cis6MTA1QTYwMDBDQzA5OTA1Rjc2QzhDNEIwNEFDNUNFQjVFNkJFOTA1RjlCCis6MTA1QTcwMDAxRTU0MUEzMDBGRjhEMjNBMTVDOEIzMDU3NzQyRkQ3NTk3Cis6MTA1QTgwMDBGQkJFNkM0M0ZDQ0YzNTlBMDYyMTNFNjc2MDlENzBDMzE4Cis6MTA1QTkwMDAzQUYxOTJBMzI1NzUzNkQwQTczQ0I4N0IxQUI2MkZERjEyCis6MTA1QUEwMDBBNTc4NDBDMzAxRkUzQjBGNjYyMEZFOEYyODFFMEJCMDc5Cis6MTA1QUIwMDA3MDQ1N0QzQzczNDdDQzk3NTM4RDQ2MUFFRkFBNkQ0QUNCCis6MTA1QUMwMDA5MDAxQkM2NUFDNzYxQUQyQjMwMjg5ODM3ODc4MkM0MUY4Cis6MTA1QUQwMDA5QkQyMzVERkNFRjhFQkE4M0YyRDVGRjEwOEY0MDdFRDQwCis6MTA1QUUwMDAyQjFGNTczQzM4RTQ0QTAzRjNFMTNDNkU3QkRBNTZGMjU1Cis6MTA1QUYwMDA5MDFEQzdCQkQ2M0NEODgxRTNEQzY4QzY3QUNCODIwQjRECis6MTA1QjAwMDA5RkIyQjkxMUNGNkRFNjY5ODhFRkQ2NkRFNkQyQTE0ODk0Cis6MTA1QjEwMDA0N0I2QTA2ODI4RTJGNzdGNjVGQ0VBOEM1RTFDRUZBQTE2Cis6MTA1QjIwMDA5MTk2RUQ0NkMwODNEOTQzMDM2NzM5QkFFQkQ5MzNCMEI4Cis6MTA1QjMwMDA1RUI5MjNENkNGNzIwNjdBOUZENkVGQTBCOTc4NThENzMwCis6MTA1QjQwMDBGNzJGMEQ4OUE0M0Y1NkQ0MUI5OURCREFENThGMjYxRjdBCis6MTA1QjUwMDA4MTIzNDIzRUY2M0E4OERFMUEzRjU3QjlGODE0RDBGODRFCis6MTA1QjYwMDBCOTJBNTFGMDU3RURDODlGMzVBQzNCM0U3NzIyNUZDODRDCis6MTA1QjcwMDA5RTc2NTFGQTBCNTgzNzMxREQwMkVCM0NEMkVGNUVCMDI2Cis6MTA1QjgwMDA5RkRDNjQ5NzdCRThGQjAzNjAyNzYxQkExNUVDMjQ0QzJCCis6MTA1QjkwMDAxRjA0M0JDOTJERUMyNEFDQjcxREVDMjQ0Qzc3ODA5RDMxCis6MTA1QkEwMDA4NERGMUYwNjdCMUNEMzdBQjBDN0YxRkJBMzYwOEY2MzMxCis6MTA1QkIwMDBCQUNCMUZBMEVGOEZGQjZCMjg2REYwRDc1MkJBMDdGOTU1Cis6MTA1QkMwMDAwNjY5QTMzRjQ4RjU5RUYyRDc1M0RBRTQ2RkEwRUZDRjAyCis6MTA1QkQwMDBGODlCMjhCRDVERDBEMTM5OTExNUUwM0FFQUY0MzIxNzJGCis6MTA1QkUwMDA5MjNENjk4NkI3QzAwNEY5QTQyMjlFNEZCRDIxNTA2MDQyCis6MTA1QkYwMDA4NjdDQUEwRkYyNDA5N0JFMkI0MzA1MTZDOEY3QURFNjg4Cis6MTA1QzAwMDBFNTAzNkU2MTkzQUM5MDFGMTBFMEU1RDlCNzdCMjdEOTBGCis6MTA1QzEwMDAyMDlGNURDQkNCMDc2RjBENEM4QTgzRkNFMDIwMkZCRjBDCis6MTA1QzIwMDA2ODU3Njg1MjNDRTQyRjZBRTBFNUMzOUJEOTY0M0JFNEMzCis6MTA1QzMwMDA4Nzg3NzgzRUVGMjVFRjY0MDdFNEYzNUE3ODNFRkZDRjdECis6MTA1QzQwMDA4MUM5NEVDOEU3QjdGMkY2RTNDRjA2OERFRTI4RUJFRjM5Cis6MTA1QzUwMDAxRTkzN0IzMUFBOUMwM0NBREI1RTM1MDNGMjY2Rjc0REM3Cis6MTA1QzYwMDBBODEyOEYyQUE3MjhERjY4RjI1MkY5RkI0QUJCNTc4NTkyCis6MTA1QzcwMDA3NUJFRDFFQ0E1RjIyRjk0Q0YyOUZGOTRDOTQ3RTVGMTY5Cis6MTA1QzgwMDAwNkE1ODBGMjY2MUY5NUY3MzdDNDUxQkVDOTE0QTBGMjZECis6MTA1QzkwMDAxMTg2M0UzQzZGMEU1MDc5ODFBMTVGMDFDMjdGQzYxNDEwCis6MTA1Q0EwMDBBNEYyNkIwQzgzNzhERTFDQTRGMjVGQThDMzBCQTY0MEExCis6MTA1Q0IwMDBGREM3MERCRUJEQThFRkQ2MkJCRTMyQjQwRjk5REE5MDRBCis6MTA1Q0MwMDA4RUZBNEFCMzJCNzdFMkUwRDBDRUNDMzBEMzNDRDhGMzc3Cis6MTA1Q0QwMDA4N0ZDODc2ODFFRTA1RjMyRTY0QjFGNDZCQjE0RTAxQzYyCis6MTA1Q0UwMDAyNDM4MjY4MDYzRUMxOTRFREVDQjYzMjUzODc5MkY5NzU0Cis6MTA1Q0YwMDA2OTcwNUUyMTM4QjZERUMxRDlGM0YyNzgxOTlGOTdDQjZGCis6MTA1RDAwMDAzNTM4QzcwODhFQTM3N0UzQ0E3QjY1QTI4Q0NGMkIyQkNGCis6MTA1RDEwMDAzNTM4QzcwOTRFNjJFRkYwNjkzQzJBRDNBN0YxNjg5ODdECis6MTA1RDIwMDAzRTY3NzA3RDU4OUZEMjNCN0M0NkJGMjZEMzY3RjQ2QjlECis6MTA1RDMwMDA2MUZBN0M0Q0Y4NjRGNDBFNEVFMzZCMzI3RDFBNUYwQjEzCis6MTA1RDQwMDBEM0U3MkI4MkQzQkY3N0UzMUFGREJBNEM5RkQxQUY4NzNECis6MTA1RDUwMDBFOTYzMzIyMDlDQUNERUMxNzlFQTZEOTkzRTRGQkQxREVFCis6MTA1RDYwMDBBNjhGRDM4MEY0MTlENEJCNzFFNUJGMjNEMzI3RkY5RDQxCis6MTA1RDcwMDAzMDdERDIwODlGMjFCRDgzRjNENDNCMzI3RDlFN0EyN0FDCis6MTA1RDgwMDA0QzFGMzdFMTMzQUM3N0UzQ0FGRjhCNEM5RkZDQkY4NEQ5Cis6MTA1RDkwMDBFOTMzODRFMDhDRUMxRDNFNERFRkM5RjQ2OTdBMkY0QzU5Cis6MTA1REEwMDA5RjNDODIzM0E2NzdGODhDM0QyNUQzNjdFQ0E5MzA3REU0Cis6MTA1REIwMDAyNjEwOUM3MUJEODNEMzc0NEFBNjRGRDNBOTMwN0RBNjBCCis6MTA1REMwMDAxMDlEMkZFREREQjhDNkJFMkZEMzY3RUNGQjYxRkE1Q0VBCis6MTA1REQwMDA0NTcwMEE3Q0Y1ODQwRjAzMzg4RUQ4NzA5RTM5MjdEMzFFCis6MTA1REUwMDBFNzk5NzM2MUZBQ0MyMTM4NTMwMTRFNEVDRjcwQzZCNzk0Cis6MTA1REYwMDBDOUY0MTlERjE2QTZDRjAyODI3MzY1RUZFMDNDRDMyNjAzCis6MTA1RTAwMDBEM0U3OTlCNjMwN0RDQTg4Q0U1N0Y1NkU1Q0UzREI2NTgzCis6MTA1RTEwMDBGQThDNkZFN0Y0QTlCMjc4MjYzQkQwQkU0QjY0OUVFREI2Cis6MTA1RTIwMDBEMEU0OTI5MzBEMDc5QzkwMzdEOTk5MDdDMUJFQTQ4NDAyCis6MTA1RTMwMDA3NjIwN0M1ODJCQzkyRTU0M0Q5QTlERTI2MTY4ODdDRTBFCis6MTA1RTQwMDA3MEJBM0RFOEY3MzE2QUY2MDg2QkExRkQ4MjdENTdBMjcyCis6MTA1RTUwMDBFNDBGRkFEMjMwRTkxNkM0RDcwMTU2NUJBNDVEOTIzMDQ0Cis6MTA1RTYwMDAzNjRFQjI4NzEyQkQ0OTUyQkU0RjYxNUZBOTdFNEE1MTdDCis6MTA1RTcwMDBCNjU0OUU1NjcyOTE1NDlFRTFDQjkzRjI5OTY1RTNBNTc4Cis6MTA1RTgwMDBGQUZEQUIyNzQ5RjkwQkQ2NEM5N0VBNjcwNTY2NDlGOTQ1Cis6MTA1RTkwMDA5QzlBRUJBNEZBODM2QTE3NDlFNTE3RDY5NTRCRTU0MzFDCis6MTA1RUEwMDA4MkFCQTRGQ0M1RjVGRjQ3QUEzRkFDNjE5RDU0M0VBMjVFCis6MTA1RUIwMDA2OUIzNTQzRTMyRjQwQjI5M0ZFQUQwMDM1MkZEMzEyRDMxCis6MTA1RUMwMDBEQkE1RjI0QjhFM0QyQTk1OEY2QkREMjNFNTI3OUM3RTZCCis6MTA1RUQwMDA0NjY3MDdDQUZCRkZGNTA1OENEQjgzMTk2NkIyMDc0M0VCCis6MTA1RUUwMDAwRTMzRTVDREZCNkM2NEZGRUZDNzNDRjBEM0RDNzcwNkU3Cis6MTA1RUYwMDBFNUNEQ0YyRTc2MjdFMzdFMUEwMUMwN0E1RkQwQjdFQ0NFCis6MTA1RjAwMDA0MkY0RjdEQzNDREU3N0ExMEJCRURGNkNGNjhENzA0NTBBCis6MTA1RjEwMDBGMTQ3Nzg1NERGM0UwM0Y5OEI1QTE0OTY4RUE5REI4MDQzCis6MTA1RjIwMDA2OTlDNTFFQ0Q3MkQ1Q0JFMzY2NkU1M0YxNDg4OTBEMzUyCis6MTA1RjMwMDA5QUZFMzBGRjIwN0ZEODYwMjZGQjU1OTNFRjhERkQ0QkY2Cis6MTA1RjQwMDBEMzE3NDZGNEIzQTFCRkI5NjRGQjUwRkU3REIxMURGQjZFCis6MTA1RjUwMDAyQjdBMTFFNzU5OTVCOTYzMzBFMkE1RUZDNzkyM0Q1NjA4Cis6MTA1RjYwMDBFQUM3M0FBMDhDRkE3OTBERkI4OUYwN0I1OTA2OTRFOUNGCis6MTA1RjcwMDBGQUIxOTY2QzE3REY0NTNGQzc3MDVDQjFGQUQ5OTgzRDBFCis6MTA1RjgwMDA1RTFFQ0Y4MDcyRUFFNzVENUQzRjFCMDc5NEVCRkE4OUU2Cis6MTA1RjkwMDBFM0UzODFFRkEyOUZGN0NFM0I5RTlDODlGMjc4MkU1OEQ3Cis6MTA1RkEwMDA0OUZENzRFOEU4NjZCOTYwQTVBRTFGM0JGNTgzREYxN0NECis6MTA1RkIwMDA5MzNGMTc3NjAxNjlDMDY3NEI0NzI5QzlDMTdGREE1OEZCCis6MTA1RkMwMDAwMEU0QzI5QzU5RkU2QkNDQjNCNzZDNkMxMEY2RTM4NjUwCis6MTA1RkQwMDA3RUExMUVDQkU1RkVBM0E3MEQ0OTM0OUVDRkUyODBGRjM0Cis6MTA1RkUwMDAxMTc2NkFENzdFMzY0MEZCRTJBNTAyNDUxNjA0OEM2MDI2Cis6MTA1RkYwMDA3RjVCMjk2NDczQzlBRUUyMDEzN0I5MjE2RDNBMzBGMDk1Cis6MTA2MDAwMDA2RUVDNjc4QkMzMzMwOEYyNkQ0RDkzQ0Q4QkEzQzhEMzcxCis6MTA2MDEwMDBEMjVBRDNBOUQ2NDhCRjg4QjZCRjk5QzQ3MkFCQTFGRkU0Cis6MTA2MDIwMDA1RDM2OTc5NEQ3RDI5NThBOEIwOTdGMDRFNTRGQzBCRTIxCis6MTA2MDMwMDA4NUMxN0VFMENGQjAyRjYwNDBBQTc3NEQ3QzlGRjYwRUUxCis6MTA2MDQwMDBFQzZGMzBERjBBRkIxQjJDNjc2QzJEQjUzQjIxRkNCNEQ5Cis6MTA2MDUwMDAyNzZFNTc4MjQ4RUZDRjdFRjI0MzEzRTlGMTAwN0IzNTdDCis6MTA2MDYwMDAzRDE1RkQ2RUZDNkZDMTlBNzhGNEYxODdGMTVCMThFODdECis6MTA2MDcwMDAyM0U1NDE1RDY2MUFEMjY5NUY0OEZCREY4RUE3MkRDMTFCCis6MTA2MDgwMDBFRDQ4RDc5QTRDQTBBOUE4OTdDREQ4RUJCMEM5Q0Q0ODc4Cis6MTA2MDkwMDBBMjZDQTY2MTJDNjNCM0FCOEJBN0E2RDEyQzUyRkFBRjJFCis6MTA2MEEwMDAwMjNDNjczNThFMzQ0MTBCRDY2NjZBQkREMTYzRUY4MjAwCis6MTA2MEIwMDBDQkJDQTYxMzQ4MUYyQkZDNDMzOEQ3MTQ0MjNFQTJGRjhCCis6MTA2MEMwMDA2QjhCRTRGQzVDQTY3NkU1ODFERjgzOEREOTgyNkZBMkMxCis6MTA2MEQwMDA1RkI3RDc4NDdDMkQ0QUU1RjhDQ0M1MzQwRjhCQjlCRkE4Cis6MTA2MEUwMDBBM0M0QzVEQjZBRjg1NDJEMzZCMTEwRUQ0RjAzMjkwQzVCCis6MTA2MEYwMDBGREQxODE2NEFBNzc5REI2Q0ZENEUxNTc2MkIyN0E4Qjg1Cis6MTA2MTAwMDA4MEFFMjUwQjhENDQ1NzNEQkU2RkVFOEJGNzFBODY0MzRDCis6MTA2MTEwMDA1QTczQjcwOTVEOUIzREUxM0ZDRjI3OTdCMzMyREU5RkFFCis6MTA2MTIwMDA0NjU3NEQ1RTRFMDlGRTlFNDBGRTQzRkEzRUYyMUZGMDdBCis6MTA2MTMwMDAzRTI5RjhERjI1Qzc5Q0ZGNTUxNkRGNENFNDdGQzdGRERECis6MTA2MTQwMDA0NjQ2RkMxMjdDOUYyM0Y4QkVCNDU2RTZGQjFDRjQ5MzMzCis6MTA2MTUwMDA0M0ZEMzlBQkIzODJFQkIxN0U1RDFGODlCRjMwNzA5OUNGCis6MTA2MTYwMDAwRUI1Nzc0RDA1QjVEQTBERkZCNzg1MUM1QzU3QjNGQjRGCis6MTA2MTcwMDA3OTY0RUZGNTY1QkFGMTA5M0VEQzI4RjgzMDVGNDc4RkE2Cis6MTA2MTgwMDAzOTgyNkZGMzA1REY5NkIxQzA2RDE5RTQzRjBBOUFEMEVBCis6MTA2MTkwMDAyRjM2QUY0QzYxQTgyRkFBN0VBQUYxQUQ1NUUyOUI0RkQ2Cis6MTA2MUEwMDBFMzlCMEVERjFCMDVERjZFRkMwOUU3OUIxRUVGNTZDMTZDCis6MTA2MUIwMDBCN0Q2QkE4RjREMkNCQjNCREU3QTNDMTdBQ0QxOEQyQkJBCis6MTA2MUMwMDBBMEU3NUJBRDM4Nzc3MDk5RDFERTI5RjYxNkY0MzkxOTVFCis6MTA2MUQwMDA1MUZGOUFDMjJCRkI5QzhDRDAwQkQ3MTYxNTRCRjlCOUVCCis6MTA2MUUwMDAyNUYzQTRGQUYzN0MwQkE1RjJFQkNCOTY0QkU1RjNBQkNFCis6MTA2MUYwMDA3RjI4RTUxN0FDRjk4OTU0N0Y2MTYwQUQ1NEJFQjg2NjVECis6MTA2MjAwMDA5MzU0QkVCNEY2MkUyOUJGQUNFRTdFQTlGRUYyRTAzNjYyCis6MTA2MjEwMDBBOTdDNDVGRDIzNTI3OTQ1QzM2RTI5NUZENUY0QjQ1NDVBCis6MTA2MjIwMDBERkIwNkZDOEQ1Mjg1RjJGMUQzNTMyRjQ5NzdERUE3OTJFCis6MTA2MjMwMDA5RkZDNzU5RjdBNEMxRUFDNTM4OTMyMzcwRUU1RDk0REMxCis6MTA2MjQwMDBGMjdDQ0E5RjRCRTk2OUJGODdFNEZEOEM3RjJDQTU2RDZBCis6MTA2MjUwMDA0RDA3RUNFODdGQUM4QTAzQkQ5RjA4NzZCOEYxQ0RCNTU5Cis6MTA2MjYwMDAzNUZENzBCRDgxRjZFMzE5NkIzNkI2QUUwRDQwRkUwMDBDCis6MTA2MjcwMDAxRTQ2QzFCQzk5NTE2NzY2QTE1MTBDQTRCQjZGNTg5RUM0Cis6MTA2MjgwMDAzQjhDMTFFNUFEM0Q5NEQ3QTkyQ0Q0QTc3QkY5OENENkQ2Cis6MTA2MjkwMDBFOERGREI5NThFQzExOUU4Mjc3Q0MzQzI3NjQ2RjhFQkIwCis6MTA2MkEwMDBCQTlGNTdCMDRDQjQyQjYyOTU5RjM1QjBCMkM4RjNBQ0NGCis6MTA2MkIwMDA5MzQ2N0U0RUUyMzQ0RTNBNjk4NDc0QTU5OUNGRkY5NTk5Cis6MTA2MkMwMDA3QjMyMjYzMTI3RTY0MzgzQUJBM0Y4NURDMkZEMzUwMDYwCis6MTA2MkQwMDAzMjY5QzhFNzFDNjlERTJGQUJCQkI4NkI5RTMzRUMyNzc1Cis6MTA2MkUwMDA5QkU0NzY3OTcwOTRGNDdENDVGRDA0QTk1REFFRTI3Qjc0Cis6MTA2MkYwMDBENzA4RjVDRUVFMzdEMjdBQ0Q0MjA3MDY1QzMzMENGMUUzCis6MTA2MzAwMDBGMzlFQzRFRkFDMjk4NUVDQUUxNkJGQjdDRkM5ODE4QzI0Cis6MTA2MzEwMDBGREQxNUY0OEU5QUJGRTIyNEE1RkYzOTc1MDdBQ0NFRjlDCis6MTA2MzIwMDBBM0Y0NEQ3RjE5QTU3RkY2NTc1M0ZBOEU3RjBEQTVBREM3Cis6MTA2MzMwMDBGRTAwQTUyN0ZDMzU5NDlFRjRENzUyN0FDQTVGNDdFOTQwCis6MTA2MzQwMDA2OTdGOTBEMjMzRkU3QTRBQ0ZGQTFCMjg2REYzMzc1MTFBCis6MTA2MzUwMDBBQUU5Q0Y5RUU0RUZCNDU4NUZDRkEwRkM0NTkxMzNGMzk4Cis6MTA2MzYwMDBBRDZDNURDREM0MkUzOThCNTMyREVCNTBDRTM0RkFDRUFGCis6MTA2MzcwMDBBOEIzMDg3OTQ4OTVFNDIxMTFENzYxOTJCMzFFQ0FFQkZFCis6MTA2MzgwMDA0QzQyMEU2M0I1OEY1RThFRjJENkY3N0I5MDM3QzZENjQxCis6MTA2MzkwMDA5MTFDQ0MxNDcyRjc1REU1OERBMTM3M0UwNUU1Mjk1M0JDCis6MTA2M0EwMDAyNzRGQjIxQzZBNzJBNEU5ODE1Q0E1NjhCODNBQTY0QjczCis6MTA2M0IwMDBBRTY2MUFCOTlEQTRDOUQ1Q0ZEMTRFOEM2MjZGRERBMDRGCis6MTA2M0MwMDAyQTYyRkRFM0Y2MTFGMzY1MThEMDdFNUIyNUZDRkVDQzU2Cis6MTA2M0QwMDA5RDRFRjk0RUQxRjc3QTAwRDc4MkY1RDQ2MDJFQUUyM0M4Cis6MTA2M0UwMDA5REI5N0YxQjhDRkVGMUNFNjMxNjg2N0VGODU4RTNEM0YxCis6MTA2M0YwMDBDQjRCNkNCQTdCNjlGRjUwMUE4NDQ1NkQ1NEY3NzI1QkM2Cis6MTA2NDAwMDAxQ0E3QUJDREMwMEE1OTFFOUVDRkU2MUZGMzAxM0ZFMzg4Cis6MTA2NDEwMDBGRUYzRTIzQ0RDRDdDMjc3OTU5MTVEMTVGNDE0NDdGMUE5Cis6MTA2NDIwMDBCNzMzOTRGMUI0OUVFOUFCRDUzRkY1QzA5N0Y5Nzg2RUQ4Cis6MTA2NDMwMDAzRTUzQ0NGM0I4MDM0NjdFQUUxRDdBQzg3MzREQzRGOTAzCis6MTA2NDQwMDAwQ0VDQjdEM0QxRUZEQzMxQzhFQzIyRkIyMUQ0NTdBNjNBCis6MTA2NDUwMDA2M0IwQUY0NEM3MDM4MzNFMUI4Q0U3MUI5QjQwMEU3MUE4Cis6MTA2NDYwMDA3RTc1MEUxQzlDQzBDRTIzMUYzREU5Rjk5RUU4QjkyODFECis6MTA2NDcwMDBEOEI3OTdGNDM0MzMzQzM3MDI3QTZFQzdGQjJGQkRBNUVCCis6MTA2NDgwMDA2NzRGN0FCMjI3RkQ3ODYyMzNBN0IzNTNEOEE3QjFFODM0Cis6MTA2NDkwMDBEQzNFMDlFNjVEMTQzOUJFNDc1NTY1Mzk2NjAzRjk3OTc2Cis6MTA2NEEwMDA4NzQ2N0ZEQzk3NDZEMEZGNTJCQjlCRUEzRkI3RUZBREY0Cis6MTA2NEIwMDAwMUFERDA0RjY3RTM4NTA5OEM5RkU3OTA1REQ3RjFBNENDCis6MTA2NEMwMDBCMERCREQ5OTMyMUY1QkZCMTI1QzBEQ0U3MzRGQkUzRTFECis6MTA2NEQwMDAwMEY3QzlCNzYxMDZFNkQ5OTNGMTQ1QkY1MjUzQkFFMDU4Cis6MTA2NEUwMDBGNUY2MUMzRUQ2Qjg3NjdGQ0JGOUQ5OUVBQUNEQ0Y5NkNECis6MTA2NEYwMDAwMTI4NEY5RjA5M0QxMDczN0MzREM5Mjk4RTBGRTA1QzM4Cis6MTA2NTAwMDBBNUYwRjE2RDMwMTZGRDBFRjU0Qzc4N0NBMzUzN0EzNTZECis6MTA2NTEwMDBCRUFBMDQzMzUzNDYwMDdFMEVCMzk5MjUzMEI2NDNGNTI4Cis6MTA2NTIwMDAxRDU0NjkxRkU3NjkwREEwOUY2MjVGQkM2NzNEQjBBNDYxCis6MTA2NTMwMDBDQTc5RTZFNTkwMUJEQkM5RkU4QzE1RjUzNjk3NkMzRkYyCis6MTA2NTQwMDAyNUJBNjRGQjI5QzMxNTY5M0Y3NTFFN0FDOEU5MDNGQ0E3Cis6MTA2NTUwMDA1NkE1MUI1QzI3NDdFMTNBRTcxNUVCMUM1RjU3MzVGQzU2Cis6MTA2NTYwMDAyQTFBQjI1Qzc2MDk4RTlDRUZBQzU1MEExQjQ4OUVEQzU5Cis6MTA2NTcwMDAwOUIzQTM5Qzk3NjlFOUFBNzRCM0VCMjRBQzU3NjdFQTAzCis6MTA2NTgwMDA3MzEyQjBERjMzN0VBQjhCQUZBRjJFMTdFRjM3REQxNTU1Cis6MTA2NTkwMDBCOUJFQUU1QzEzNDdGNTM1RkM2MkMxRkQ2N0UzQzc1ODcxCis6MTA2NUEwMDAyMzdCRDc4QUVCMjI5NEU1QzRBRTFGOTM5RkVBMjc2NjJDCis6MTA2NUIwMDAzQTk3NkUzNjdEODZGNkJCMkQ1N0IzREY1NUNBNkI3MEEyCis6MTA2NUMwMDBBQjFBOEMwMUNCMDhGQ0JFNEJFQTBGREFCOUI1MzM2NkM3Cis6MTA2NUQwMDA2QzE3NUI2RTU0NzY0QUUzMjdGMERGOEEwN0VGQjQ2RkRGCis6MTA2NUUwMDBCNTEyOUY3RDAwMzEwMUUwQjVBQkY2MUE5NEFCMTMyQUNBCis6MTA2NUYwMDA5RkNGNTU0MjRFMkJBQ0FENjY5RjlCQzhERDgyRjJCQzRGCis6MTA2NjAwMDA2ODJDRDMyNkNDRENCNzQwNEY3RkYwQTI4OUVFNjlCMTZECis6MTA2NjEwMDBBRjAwN0E3RUQ3NTU4MTI1QUNDODg5NEVDRjQ1OEQyQkVBCis6MTA2NjIwMDA2NkUwQkFGRDgxNDFEQjBGRDdFNkUzQjhDRjMxNDMyMTA1Cis6MTA2NjMwMDBFQUE1NzNFQzhGQ0U1MTExRjM3NTg4ODlGQjYzNTgwRDcxCis6MTA2NjQwMDBERkU3MDRFMDFGOEU2RjY5QURCQ0VGNTk1NjI3RTc0QkJCCis6MTA2NjUwMDBEOUFDNTRENEI3QTU1QjRDMkMwOEI4MkZDNzdEOTMzNjYyCis6MTA2NjYwMDA2RUQwQkYxOTI2RUVENzU4QzZBQTM3RTAzRUZENUUxMzlFCis6MTA2NjcwMDBGN0Y3MkM3MjMxMzUxM0YwQUFGODhGNUZFNkEzREZDNzY2Cis6MTA2NjgwMDA2M0UyNzY4Nzc2OUVCQzNDODlFMzVEM0UzQjY4RjY0MkRBCis6MTA2NjkwMDBGRDc3MUI0N0NEMDE4RDBCRUQ4MzFCQzhGRTI5NjY5RTQwCis6MTA2NkEwMDA5REFDM0JERDE3RDdDOEY4RjU4NEJGMUU1RkNEMEVFQTYxCis6MTA2NkIwMDA3NkFFMkRGMDQ4QUU1N0JDQzEyODdBRUUzMjkzMjJGNjYyCis6MTA2NkMwMDA3RjdDN0VDQzM2QzlGRTlDNzkyNkQ5RUZBM0M5ODE0OTRGCis6MTA2NkQwMDBDOEMxMDlENTc3QjU2OTBDRTczQkYyNTE1MTNCQ0NCRTM3Cis6MTA2NkUwMDA4ODdBRTZBRTdBQjNDRjU3Q0Y4MkY1OEM1NDZGOUUyOTY1Cis6MTA2NkYwMDAwNUVCNzU0Q0EzRkQzMTAzNzkxQURBNTVDRkQ2MDVFRkJBCis6MTA2NzAwMDA0NjBFNEZBRTU3RjExRjhGM0QxNTAwNzkyOUZGRUQzRDI1Cis6MTA2NzEwMDA0RTA2RUJFNjA3NkE2REFBMDdCRUFGREM3OTlCRDMwQjhBCis6MTA2NzIwMDBFOTY5MzVFMDQ0N0U3RTEwMzQxNjQ2QTNDNzk2MzAzREI1Cis6MTA2NzMwMDBCQzc2MDVGRDY5NDIzRTU5NEQ4MEZDMTQ5RkVEMzRCOThECis6MTA2NzQwMDBDOENGNUY2RjA5NTk0MDRFMkIxQjk3Q0Y2MEMzMjk3RjdECis6MTA2NzUwMDA5Q0U3Mzc3RTY0QzQ3QzkzQ0NBRkYyNUZERjkzRUFFNkJDCis6MTA2NzYwMDBGNzZDQjgzRjg5ODVDOENFQUREQ0YxREUzNDVDMkZBQTZBCis6MTA2NzcwMDA1ODA3Qzk5OUJFMURGNkZGNzkxMkNERUI4NUU2ODRFRTY4Cis6MTA2NzgwMDBFNTgwMjdGOTEzQUFDNDJDQUI2QUZDRjk0NzQ2MjdFNjMzCis6MTA2NzkwMDA2NUY5MjgxM0Y2MkFEMjA5RjdGOUI3OTkxQ0M5QTdFMkI3Cis6MTA2N0EwMDAyMTdCMDlCQjA0RTdCOTQ2MEYxNkU0NzZFQkZBNDdFRTA2Cis6MTA2N0IwMDAxQjdFMUNGMDM5QkJFMzQ1QTczMjM0NTIzRjcwMzlFQkU2Cis6MTA2N0MwMDA2QzU4RkMyQkFCMjFCNjFFNjkwMzM5OENCNDhGMDAzMDlBCis6MTA2N0QwMDBCNTczMzcwOTdCQkI5OUE3MkI0RDIxMjdERTY3NTlCOUM0Cis6MTA2N0UwMDBDREU0MDEwOTY0MkIxRjMzMzJCQzA3QzBERUIwMDREMUY1Cis6MTA2N0YwMDAyRkJBRTJCMUU3NUYxQjBGNzQ1RkIxREI5NDNDODMwRkVDCis6MTA2ODAwMDBDN0FFQTQ3NkYxQTUwQUZFQjcyNkFGOEIwRkU1NEYzQ0M1Cis6MTA2ODEwMDA2Rjc2MEZFM0RGNkY0OUVBRTJDNzhBRERGQkNENkM1ODg0Cis6MTA2ODIwMDA3N0ZBNEQ2RUQ4NkY2RUI1NDdFMTRCQzNGMTY5QjhDRUJDCis6MTA2ODMwMDBBRTdGRTRBRjY2RjQyNzdFQjA0RjYxNjk1OUREREI5NzI4Cis6MTA2ODQwMDA2RDdCOUVENjNCQTQxM0YxNTFGMDI5Q0NCNzZFRkMwQUE4Cis6MTA2ODUwMDBDRDdDNjYzNEQ1NzNBMTFFOENDNUFGNjU0MkVGODIzQ0ZBCis6MTA2ODYwMDAzRkZFMENERUZGNzlEM0UyQzFGMTk3M0Q3RTkzMTNDNzYzCis6MTA2ODcwMDBGMUJFNUFDREU1RkE5N0I3QTVFMkZDMkUzMzA1NTI1RDdECis6MTA2ODgwMDA5NEYyRUY2NTBGRkU4OEU0NkREOTkxMUZBNTkyQkRDMDBCCis6MTA2ODkwMDBCQzE5MDZEMkM1ODEwQzFDREZEMkFERDdEMkY4NEE5OUZCCis6MTA2OEEwMDA4RkU0QUVFQzk3QzYyMkJDOEZGOEE5Q0EwQTc3NDc5OTQ1Cis6MTA2OEIwMDAxNzcxNjY4NUYwNzk3RjNCMTgzMjMwQkVGNzcxN0Y4OTlBCis6MTA2OEMwMDBGQUVDOEY0NkJBMTdDNUQ4MEZFOURFRDg4RkM0NTg2MUU1Cis6MTA2OEQwMDBFNUEzRkNBNzU2Q0VBN0UzNDI0RkUyNDQ5NkU0NzVDNzcyCis6MTA2OEUwMDBDNjE2RTRDRjk5RkVERTM0M0NFNzAwM0EwNDA0QkQ5NEJBCis6MTA2OEYwMDA2RjAwQUVGMUM4RDQzNENFMUZFNjU2RjM0NTNCRDBFRjVGCis6MTA2OTAwMDA5M0YxM0JENjZGMzE3OTZEQzNBNTc2NDIxRkYyRkU1N0U2Cis6MTA2OTEwMDA4QkZFMDFFRjM4NUNBRkRFNEY4RDZFRUY4RDExRTM4M0EwCis6MTA2OTIwMDBCRjE2MTYyMTVGMTFGMzlCQ0ZGNzFEOUJGOEZDRDZFNjJGCis6MTA2OTMwMDA3QkIwQjgxMENCM0Y3OTk1Q0YxRjZDODdFQjAzRTAxNTg4Cis6MTA2OTQwMDA0QUEzRjJGREIzMTVEMjA3QjBBRjhFMzZBRjc3OThDNDI1Cis6MTA2OTUwMDBCQzk2Q0JDMTUyQTRGNTFFRjA1Njk1ODQ0ODM5MDFGODc3Cis6MTA2OTYwMDA0OTQ0N0ZEQTA3OTc2RTgxNzYxMUY2NTcxNUY2NDdGNTk5Cis6MTA2OTcwMDBDQzVEREYyM0Q2ODc2NTQyMEY5OENDMzBGRjJGRUU5QThGCis6MTA2OTgwMDBGRjZDMkI5RkY3M0REOTkzMkI0REMxODcxRkMwRjlGQUEwCis6MTA2OTkwMDA4NkM1MTM3MEUzN0MzNTE1RTFCODNGREM3NUUwQjVFQkQ3Cis6MTA2OUEwMDA0MEFFM0Y2Q0QwRTZBOUFDM0ZGNUYzQjQ2Q0NGMTgxNkZGCis6MTA2OUIwMDA2RDlFN0U2ODg3RkQ1NUI0NzkwQURGQTNDRTUzN0IyQjhECis6MTA2OUMwMDBDOUYxRjdBRDNGMzVCQTBEMzVDQjdBMTNGNUUwMzNFRUFCCis6MTA2OUQwMDBEOEY0RDNFQkMxREY5QkRDNDQ0N0JEMUU4NEJGNTc1OUJECis6MTA2OUUwMDA3RTc3QjlEM0U0NEQ5M0IzRjJERjU0NUM4MEZBMjYyQzYyCis6MTA2OUYwMDA4RjlBQkM4NUU1NTE5MzM3RkQzODY1QkFFOUNCRkYyQUZDCis6MTA2QTAwMDBGNENERjVENkMyNkJEMDJFQjY3NjMwREFBRjE0Q0MzNkQ0Cis6MTA2QTEwMDAwNjcxOUY2Q0ZEODREMTdDOUY3NDQzM0NFNUU3MUE1QjUzCis6MTA2QTIwMDA5RjQwOUJFRkFEOEFCOUMzNzAxREJGOUUwNTRDRkNEQzM3Cis6MTA2QTMwMDBCQ0Q2NDQ3NkVBNTdERjdDMzMxMUM2NzM5REEwRUJGNUQ0Cis6MTA2QTQwMDA0MEU2QUI4MDBGMjVBQTEyOEEwMzNDRTdBOTJDOTA5MDYwCis6MTA2QTUwMDA4NEZFNjI4NTlEODhDMEUzRkEzMjM5OEY3Rjk3QTU3NkUwCis6MTA2QTYwMDBDMUU5QTlGRUI3QjVBQkJGNkI3QUM0Q0ZDRkFFRkU4NDg4Cis6MTA2QTcwMDAyOUVEMkZDMDcwOEU5MEEzRTI2NjdFNEU1MTM1NUEwOUUzCis6MTA2QTgwMDA2NkQzRkM2QjU1OEIyMkY2MDk4Rjk5Qjk5RDcxNjRDQTQ4Cis6MTA2QTkwMDAzNTYzOTA3RTA1NzM4NzI1OTA3Q0Q3MEVBMTdENjA5NTI4Cis6MTA2QUEwMDBEMDVCOUQwMTc3MDJFQUYzQ0VFNjFDREFGNzc1MUU1QTM5Cis6MTA2QUIwMDBFQ0YwNDVEMTVGMDc4NDlDM0QyRkNFNTlEQUVENEFBRDBECis6MTA2QUMwMDAxMUU0QkQ5RDc1OTBERDEyQjBEQkEyRkFEREVBQ0MwNkMzCis6MTA2QUQwMDA2MUVGMDhCRUMxOUYxMUZBMkYxMTcyMzgwRjlBMjZFNDk4Cis6MTA2QUUwMDA0NUYwNkRGNjU1MUZBOENFRUU3Q0MwQkYxMzExRkI4Njk2Cis6MTA2QUYwMDA3Rjk0QkUyOEQ3NDhERjAzQjZENjY5NDU1MUZDMzM4RjUzCis6MTA2QjAwMDAwQTdEN0REOUIzNUY5ODcxOUQ5QkQyNUNBMDIyMURBN0ExCis6MTA2QjEwMDBEODhEOTJCRjYzQkIzNjVGODdCMkExODhENzY1Q0YyRTcxCis6MTA2QjIwMDBCRjYzMENDODcxRDUyMUEzQzcwNkUzQUI2QUZFQzhFQ0VFCis6MTA2QjMwMDA4QkIyN0ZEM0QzMTNFMUEzRkREODZBRTZGNkYxNTE1M0FDCis6MTA2QjQwMDBEMTUyQTRFQkQxNkJGOTc5RUU5RkNDOUU4QTY4NzhDRUI2Cis6MTA2QjUwMDBCNjcyM0NFN0IxQTI0RjQ3MkJGRjdBRjQyRDk4RUIwOEIxCis6MTA2QjYwMDA0RDAyN0E3NERBRjlGREU0RUVGMkM3RTc3REE3NEIwOTJFCis6MTA2QjcwMDBBRTU1NTAwRThEM0M5RkNDRUZGRjRFNjNCRTNCMjYyQTk4Cis6MTA2QjgwMDAzNERGMkY4RkQ0NUYwNTREQzU4RkUxN0Q5NkNBNjZDNTcyCis6MTA2QjkwMDA2NTgwRjI0QUI1RDU4QzcyNUNENUI0NUI0NUJCRkMwNzA5Cis6MTA2QkEwMDA2RUZFQ0U4MkE5RDVDMzY2NDdGOEI3NUFDRERDOUY3NDc2Cis6MTA2QkIwMDBFMDZGRDdDRDQ3RkE3RTNDREJDMjEwMkZFRkQwOEY5QzIxCis6MTA2QkMwMDBCOERFN0ZEQzNDOEFFNjQxQUM3MUZEQzFFRkI5NjYwQUY0Cis6MTA2QkQwMDBGQUUzQ0Q1QzlGRTlFNTYxNUE3MkJDOTRCRjc2MzJFQjczCis6MTA2QkUwMDA4N0U3QkM5NzU5NUE2RkYyNDRFMURGM0EwQjlGQTdCRDg0Cis6MTA2QkYwMDBENjZGRDZGRjYxRkE2RDIyRTgzNzJFRDdBNjQ4RkQzNjRDCis6MTA2QzAwMDBEREMyRTUzRTQyQkZBNTQ1RDM2RkFCRDZCQUQzNTAyRTA5Cis6MTA2QzEwMDA1NkVEQ0Q0OTQzQkVBRTNBQkMzNDI1OUE3RTdCNDFFQzVECis6MTA2QzIwMDA2QjBGOEI3QkQyRURGRDQwQkY4RDg4RDA2RkZENDBCRkQ5Cis6MTA2QzMwMDA0NUYxODM4RkI2Njg3NjY3MEZGQUNERkFERjMzRkY1RUQyCis6MTA2QzQwMDA0MEZEMTY2NUJDNTcwOEI5RDNGNDVCNjFGMzVBRDI2RkE3Cis6MTA2QzUwMDA4NUZEOENEMjdEQTRDQjJDQzI4RThCQTlERjE2REU3MzcyCis6MTA2QzYwMDAyREU1NEQ5RUY4MjhGMjgzNzQ0NUZENzY1OEU4MzlFQzAxCis6MTA2QzcwMDAwN0Y1RENDRjJDREY0RUNGQ0RCMzcyN0M3QkQ0NzNGRjE2Cis6MTA2QzgwMDA0RDc0RDZGNERDQUFGRTBBRDkyRkRERTU5MEVCQjk1NTk4Cis6MTA2QzkwMDA1OTVDQ0ZBRERBQ0JGNURDQUE0MTVDQ0ZFOUY1REJBNERBCis6MTA2Q0EwMDA2RUZBOERCN0FGQ0M4NUY2QjQ0RkNDQkFFRjA2QkNDRjM5Cis6MTA2Q0IwMDA1NzYyRjI1OEExRkUwQ0I3RjZCRUEwN0E0Q0E0QkVGQkY4Cis6MTA2Q0MwMDA5OTI1ODZCRUYzODBCRUIzRjdBQ0VGNUU0MTdEQTc5MkY3Cis6MTA2Q0QwMDAxRTFCODhGMzQ4MkYxRkQzMDdDNjRCRjdENThFN0U3MTM2Cis6MTA2Q0UwMDBFQTM3QkZDNUY5RjIwNzIzREQwNzdBRERDMEY3NDNGQkJBCis6MTA2Q0YwMDBCRTM4MzUwQUU3RERDQjg4MEZDQzk3OUQ0MkZFREFGQzIzCis6MTA2RDAwMDA2MzQ5OUY0RTFFQ0FFNzdCQzVBMTM4NUEyNzJBMUIxNTI3Cis6MTA2RDEwMDAzRURFNUI5NEEwMUJENzgxQkY3RDRFRkJFNEY5N0JGOTdGCis6MTA2RDIwMDAzRTc5QUU4NUQzODNGREQ4QzhERjQ1MDAwOTE2NDZDODM1Cis6MTA2RDMwMDA0M0M5RTdFNUU0RTcyQjUxOTkxNUVERDcwNTg3QTY3RjExCis6MTA2RDQwMDA4MDc2RUI4MkNGNkJDOERFNUQ4MERGRjE3RUM1RUVENjRDCis6MTA2RDUwMDAwRDk5RDBFRkZDRTUwQUVEMzc5OEI4MEZBMUREOTdCODkzCis6MTA2RDYwMDBCRTc5M0ZERDVGRDFERjgzRDBGNEY5RkM2QUY5RkIwMjI1Cis6MTA2RDcwMDA5RDVEN0Y0MDhDMTNFQzU5QTIwQjdCQzUxOEQ1M0Y3N0U2Cis6MTA2RDgwMDA0MDRGMEYwRjFGN0ZDNTZBNkUxRjg3RTkwMUY0NzEyQkZCCis6MTA2RDkwMDBEREU5MDExQzlEQjEzMEI1NkJGQ0YzOUY4NDcxMjU3NzUzCis6MTA2REEwMDA4RDRCQTM4NzdFN0NEQUZFNjQ4MTk4MUJCMUM2QUJEMTg0Cis6MTA2REIwMDBBRkRCNzgzNTdBRUFDNkZEQkM0NUQ4NDUxN0IzNjEzOEY0Cis6MTA2REMwMDBDRjVFMzdGOEVFMTg4MzcyRjE3QjE4M0ZFMDMzNjdERTUxCis6MTA2REQwMDBBMEI0NDgzREZDQTJEMEU3NTdGOThFNEY0OTc1MjNCREJBCis6MTA2REUwMDBGOEZCQkJFQkNBNzYzRjlGMEFFM0I4REE5Qjk1ODc1NzVGCis6MTA2REYwMDAxMUFFRkQ5QkQ5ODc3RTg0MDNCNjBFRDI2QjlBNUM1RDgzCis6MTA2RTAwMDA2OEU1NzJGRTc3MDFFNzY4NUZENzE0NUEzRjlBMTQxNzU2Cis6MTA2RTEwMDBDRDk3OTA0RTZGODk3QjYxNTU0MDRGOUM4RjU1NEQ2MjQ5Cis6MTA2RTIwMDBCRDAxNzlDM0Y5MzY0RDVCN0Y5MEZFRjA5RjU3MzU3M0Y2Cis6MTA2RTMwMDBGQTU3NTUyQjQ0RkY5OUFDRTMyMEQyQjczMjU5RjE4NDZECis6MTA2RTQwMDAwMEQ0QjRBNkREQjdFMTNEQUExNzZDRjAxREU3NkQ5OTNCCis6MTA2RTUwMDBFMkQ5Q0VDOTYxQ0Y0ODhEMkE5NzZBMzRCOTY0RDU0MzQ3Cis6MTA2RTYwMDBDOEFGQTBBRDgzMEJCMDVFMTJCRTE3NzkzRDA1RUQxMzIwCis6MTA2RTcwMDBCREJENzE5OUE1RTUyOEUyNzFEOThGNEQ2QzFCRUI2RUY0Cis6MTA2RTgwMDA3RjY4RkNDRTg1N0ZERjQ0QkJDRkQzODNGQzBFMTJGNjM4Cis6MTA2RTkwMDBFNTBCNDg2RjNCRDJCNUMzOEM3MjVGMTVFMkVCODY1NkFCCis6MTA2RUEwMDA1RUE1QkFBNzEwN0QzNDdBMzdDMUJBMzA5QUQzMUJERkZBCis6MTA2RUIwMDA3REU5RTk3OUI1OTY0Nzc5QzZGQUNEOEEwOURCNUYwOTlDCis6MTA2RUMwMDA3Q0U4MDM0NTkzMEQ1RjFDRDRFNDE3REY4OUU5RTk4MjcwCis6MTA2RUQwMDBGQkZGOEM4OEY5OEU3QTI5RjJEQ0IxQjJFOTA4RDE2NTIyCis6MTA2RUUwMDBGQTZBMzBBQjIyRTg4RUZBRUE3Q0Y0RTkzNjFGOUFGNkE5Cis6MTA2RUYwMDA0N0JEMDdGNTZERTdDMzg1NTY3OTNFRUNCMzc1QkMzOEUxCis6MTA2RjAwMDAwMkZENUI3QjE1RDIwN0FDMzk1MURBREY1RjYxRTVGQjJGCis6MTA2RjEwMDBBNjAzMzYxRkM5NkRDNzYxMTNEREY3RDZFQjhEQjE4MkFECis6MTA2RjIwMDBGRUI4OUY4ODdDMDczNzE5MDc4MkU3QkIyRTFCN0I1NzZCCis6MTA2RjMwMDBDMzIzOUJDQjRGQTRCRTdFQzFFNjIzM0VDNTgyM0Y0REZCCis6MTA2RjQwMDBDMDhGNjUyRjg1RjFDNUZFRjAzQ0M1MkRGN0E3NUYyRkRCCis6MTA2RjUwMDAzNDNGNEY0RkUzQkE0NkFDRjdERjc1NUNFMUYzNDlENkY3Cis6MTA2RjYwMDA2MjY2REM5RkJGREIxQzcxQ0UzNDQ3RjhGOTM1M0Y1OEIxCis6MTA2RjcwMDA0NEJEOTk5NjMxQjFFQkExQkYyNTA0RTM3RTYxRDc0M0FGCis6MTA2RjgwMDBFNEQ3M0RGN0U4RjE5OTI4QjcyQjdFNjc2NDU2RTA3M0E0Cis6MTA2RjkwMDBEQjJFMDcwQkYxN0IxNDY2NUM1N0NCMUI4RDUxQ0Y0NTY1Cis6MTA2RkEwMDAxODVCNEZGOEFERjhBRDgzRjQ0QUY5MUU0QjcwMDZCNDg4Cis6MTA2RkIwMDAyRjdGRUFEREUxRTg5RjZBNUJDN0Y1NEJFMDUxMjExRkI3Cis6MTA2RkMwMDA4MUQ2RTE3ODVFNUVBRUYyRjM2MjNEQkMxRjBCNzkzOThCCis6MTA2RkQwMDBGQjc0N0MwOUVBNDdBNTlFQkZFQjJDNkY5ODZCQjI0NDBCCis6MTA2RkUwMDBFQ0NCMkJGMUMwOEREN0EzN0JDODgxNDcxNEYyODM3N0ZDCis6MTA2RkYwMDBDNzZGMkRBRkY3MDhENzdCRTU0REE2MjBCRTBGMkRBRjhECis6MTA3MDAwMDBERjQ2RkJEOUFBRkE4RkNDNjhDNzRERkVFRDYzNjQ0NzEzCis6MTA3MDEwMDA1NDM1MTk2NTNGNjFCRDMxNjQyMTNGQTZGMTM4QTY3QTI4Cis6MTA3MDIwMDA3RjVENjU2MzA1Q0RDN0NBMDZFMTBGRDNGOThCNTZGQ0JBCis6MTA3MDMwMDA3NkVGNTMwMTIwQ0Q4QTI3N0VFRDQ0M0Q3M0E2NjVBN0U4Cis6MTA3MDQwMDA5M0ZDNzBGNURDQ0ZBNkRBRDVFODdFQjg5RUZDNkYwRDE4Cis6MTA3MDUwMDA5QkEyRkFERkNFRTA3RkMwRkNEQjZBOTVGRDZGQUNCRTgxCis6MTA3MDYwMDA0RkFGQ0VDMTU3M0NGNkU5ODM3ODJFNzQ3NkNGODcwRkE5Cis6MTA3MDcwMDAyMkRFMkJCRkZFRjhDMTlGQTI3REIyQ0ZFNkMyRjVBRUU1Cis6MTA3MDgwMDBFQUQxQTNFNDU3RDdEQTNEMjVFNjU1REIyM0JGN0VGOEU2Cis6MTA3MDkwMDAwMTk4N0Y2RDZGNThFOEZFNTVEQkRFRjcwN0I4NjE5Q0ZECis6MTA3MEEwMDA2REJCQkY0ODQ1RkZFNUVBQkQ1MzY5REZCMkZBQzlDOTA4Cis6MTA3MEIwMDA2OUU3QkI0NzgyNzIxOUVDQzU3OTg4OUUwRjA3MUE4RDY0Cis6MTA3MEMwMDAwQ0RGNDE5RTNCNjYyMTNCMjNFQzQ3NkRBOEUwN0U2OUM3Cis6MTA3MEQwMDBCN0YwOUZFRThBN0VFRUE0RjlGRDJBMUJBRkI5RkE1MkYzCis6MTA3MEUwMDA1Q0Y3MUE0RDFFMzc3RDE3N0VDMDlFRkNBNkFGMDIzRjhGCis6MTA3MEYwMDA0N0Y0ODI2RkJCODQ1RjVDQzdCNzczRjgxRkMwOUYzRkM0Cis6MTA3MTAwMDA1OTY1N0ZGM0E3OEQ0QjdGRjUwMDk2MzVGNjg5RTkzN0YyCis6MTA3MTEwMDAwREY1ODI1RURBQjlENjM2QUJGNzFEMkJDRTg3M0RCRkIzCis6MTA3MTIwMDAyMUZGMzRGMjBCNkM2RUQ2RjZEOEE3MDNEMERGNzBEQUVECis6MTA3MTMwMDBENDcxMjNEREJGRDg2QkExN0I0MkU1N0I1RkE3RjlEMTdBCis6MTA3MTQwMDBGNkU0MTEzQTJGNjJFMjVDQTk4RDg1RkZGODM5ODBEODA4Cis6MTA3MTUwMDBDQjU0RUQ3MDcwN0ZBQkEwM0JGQTYzREQ0RUZBMkVGQzkyCis6MTA3MTYwMDBBRTVDNkUzNTdGNkMyQzNGNkMxRjlCQjgwNzJFQ0VEOTYyCis6MTA3MTcwMDAyQTc2QkM2NTY2M0FCRkI2MzIxNkY5NzQ1QzNBMTdENDAzCis6MTA3MTgwMDBDNkFEODdFNzQyM0E1QzEyNzk5RTEwQ0JDRjJERjQ2OEVBCis6MTA3MTkwMDA5ODRGRkMxQ0ExNkQ5QjM4NUYwODlGMUIzMEQ2MkYwRkFBCis6MTA3MUEwMDBFRkJGRjNGM0VFQUFBMEYyM0E4QjMyMUZCNUYzMDRBN0I4Cis6MTA3MUIwMDA0RDM3MUY4M0JEM0I0N0U4MTlERkVGNDYwRkM1QzZGN0M0Cis6MTA3MUMwMDBBRDFBNURDRTdFMTU1RDFGMEZCMTI5RTJGRDgxMkZENzZGCis6MTA3MUQwMDAxNkIxRUUyQzEwRUI0OTI1RDA4QkJGMjdFM0Y4OUUxNTk2Cis6MTA3MUUwMDBGQkJCQjM4RjFBODNCODBGREVEMDcwODBGNEFBN0U1RTJCCis6MTA3MUYwMDA1N0IyRThGMTQzQzZEQkI4M0VBOTZDREEzRjFDRjVDRkM1Cis6MTA3MjAwMDBEOTY3OUYyNkI5QUJEQzc1REMxQzAwMzgwN0VCOUYzMEQzCis6MTA3MjEwMDBCNzBFRUQ5MjczRDREN0MxMDg3RDdERjZGMUZEQzNGOUE5Cis6MTA3MjIwMDAzOTA3REY0N0VBRTE1RjIxRTA1NzM1Q0JGMEFCNzY3REU4Cis6MTA3MjMwMDAyNEMxNUYxMTY4MzBCQkVDM0RGNzczNDZGNUNFQzVGMTU0Cis6MTA3MjQwMDA5RTY5MzE1MTVDOTQzMzBEQzZDMjY4RjE0QTg2NjIyMDUyCis6MTA3MjUwMDBBOTk0MkUzQTZENzBGMEY3NzFDNjI0MzNEOTkxQUIxRDA1Cis6MTA3MjYwMDA2MzhGMjUyNDYzNkE3NkUzM0U3QUZENUE3RTFGNzJGREEyCis6MTA3MjcwMDBDRjNDRTlDODk3RjU4OTczRTgxQ0E4NTY0NzQ3NTdCMjMxCis6MTA3MjgwMDBBQjAwRjdEN0FFMjk0NUEzNTFBQ0Y0N0EyMEQxNkI5MDZGCis6MTA3MjkwMDBGMDVFRUQyODRDQzNGN0RDQjcwQTdCODRBOTFFN0FCRkU5Cis6MTA3MkEwMDA2Nzc0NEUyQkM0NzExODVEMDY5NzJERUEzQUNBRTE5OUFFCis6MTA3MkIwMDBFQzQ1MTQyRkMyRTQ5MkRGRDM3REVGRjExRkRDRkRFNDM3Cis6MTA3MkMwMDBGODBGODE3RUZGNjhGQzA3NDY3MTMwRkVERkM3N0YwODNDCis6MTA3MkQwMDA2MDNGRkYwMkYxMUY0MkU0QjdEMUUyM0YyNDdGQ0ZGMUNDCis6MTA3MkUwMDAxRkQ2MzIzOUZFODNFMDY3MzhGRTgzRTBFN0ZGQzY3RkIyCis6MTA3MkYwMDBGOEZGMkJGRTgzMzFFRUVGNTMzMDNFODMxNkZGMjEyNTNFCis6MTA3MzAwMDBDRTNDMzUzMkZFQzM4NTcxMDk1MzIzRTMzRjhDOEI0QjUyCis6MTA3MzEwMDA5RjFBMTlGRkUxMDc3MTU5NTMyM0UzM0ZDQzhGQkI2OEQ0Cis6MTA3MzIwMDA2QTY0RkM4N0FBQjg1MTUzMjNFMzNGQUM4RDlCNDg3OTJDCis6MTA3MzMwMDAyREZFQzNERDcxNTNBN0NBRjExRjY2NEU5RDAyRjlCNjNCCis6MTA3MzQwMDAzOERGREY3MUJEOEExNUZGRTEzRDlDMkM2MzdBOEVGRjJCCis6MTA3MzUwMDAwMDcwQ0M3MTYzNjJDNzdGRDBDMzg5MTVGRjAxRTAyNDQwCis6MTA3MzYwMDAxMDlDMThGMTFGQkFFMTEzMjNGRTAzQzA0OTI3MzgzMURFCis6MTA3MzcwMDBFMjNGNzRDMzI3NDZGQzA3ODA5MzQ1NzA2MkM0N0ZEMDA4Cis6MTA3MzgwMDBDMzg5MTVGRjAxRTA1QzE0OTcxMjNCRkU4MzFFNEVBQ0NGCis6MTA3MzkwMDBGODBGMDA2NzE0RTExMzIzRkU0MzM3N0M2MkM0N0YwMEJCCis6MTA3M0EwMDAzODEzMDk0RThDRjgwRkRERjA4OTExRkYwMUUwNENBNTcwCis6MTA3M0IwMDA3MUM1ODhGRkEwODcxMzJCRkUwM0MwOTk0OUY4QzQ4OEM0Cis6MTA3M0MwMDBGRkEwODcxMzJCRkUwM0MwOTk0QkY4QzQ4OEZGRDAwRDk0Cis6MTA3M0QwMDA5RjE4RjExRjAwOEU4RkYwODkxMUZGQTExQjNFMzFFMjMzCis6MTA3M0UwMDAzRjAwOUNFNTA0Mjc0NkZDMDczRDlDNThGMTFGMDBDRTVBCis6MTA3M0YwMDAyQTgyMTMyM0ZFODMxRTRFQUNGODBGMDBFN0E3MDQyNzUyCis6MTA3NDAwMDA0NkZDODc2RUY4QzQ4OEZGMDA3MDZFMjUzODMxRTIzRjc1Cis6MTA3NDEwMDA3NEMzMjc0NkZDMDc4MDczMDdDMTg5MTFGRjQxMEYyN0ZBCis6MTA3NDIwMDA1NkZDMDc4MDczMkZDMTg5MTFGRjQxMEYyNzU2RkMwN0I3Cis6MTA3NDMwMDA4MEYzMkI4MjEzMjNGRTQzMzc3QzYyQzQ3RjAwMzhGNTMwCis6MTA3NDQwMDAyNDg3MzFFMjNGNzRDM0U3QkJDNjdGQjA4NTA2MkEzOTgzCis6MTA3NDUwMDAxNEZGODFFMjQ0ODZFMzNGMjQ3RkVCRjgwRkNEODhFRkYxCis6MTA3NDYwMDBGRkM2N0ZGODlGMTlGRkUxNjZCQkVGRUIzOEYyODM3RTIyCis6MTA3NDcwMDBCN0Y4MEZCNkY4NkYxN0ZGRTE2NjdCNTE3QzNDRUUyRjMzCis6MTA3NDgwMDBCRjY1RkM4N0Q0Rjg2RjE3RkYwMUZBNDk4RjFGMTNCQjQ0Cis6MTA3NDkwMDA5RjU4RjExRjcyNzRGREY0MTRGRjAxRkExOTc0REVGMUE0Cis6MTA3NEEwMDBDNDg4RkZFMEQxRDFFREZCOEFGRkYwNDVEQ0Y5RTMzRjcyCis6MTA3NEIwMDBGQ0NCQzU1OTgwNkQwQTlFRkYxNDkzMjhCMjdGOTlCODAyCis6MTA3NEMwMDAwQkQ3QzZGRjkzRTMyRTkwQjFGMEFGMTQ3NzQxN0JCRjhCCis6MTA3NEQwMDBERjYwQzJGNUVBNERDMUY3RDc4NDVDQkMyNUUyMkYxQzAyCis6MTA3NEUwMDA4QjE5N0YyMTc4MTVGOTQ1OTdDQkYxMTdBNjBCM0VDRTY2Cis6MTA3NEYwMDBGM0M5RjIzMDlERjFGMzg2RTk1M0IyNzhCQ0NDMzI1RDJBCis6MTA3NTAwMDBGQzg1NUNGOUZDN0E4NkVGQzgxNDAwQzdBRUYyQzhFM0NDCis6MTA3NTEwMDAzODIyRTQ2MTY2Qzk0N0NGMjE3QkFFMUUxQjNERkVDMjA3Cis6MTA3NTIwMDAyQ0MxOEY2MjFENURBNjBCQkUxNThCRjQ3QTdDOTIwMjc2Cis6MTA3NTMwMDBGMjNDQTNFQzg4OEE3NDlERTk2RTU1QzlBRkZEMDM4REJBCis6MTA3NTQwMDA3RjZFODk3RkIzMDU1QzNEQkVCMzA0RkY2NjVEQzlGOUZDCis6MTA3NTUwMDBBN0M3RkI1NUU0OUYxM0QyQjI1MUM0M0YzRERFN0EzQzJFCis6MTA3NTYwMDBGNUZDNjc5MUZDOEU4ODlCNTFDMEU0QjgwQjkzQUQ3MjFCCis6MTA3NTcwMDBEQzg1QTkyRTM5RUVDMjE1RTk3MkRDODUyQkRENzJEQ0MzCis6MTA3NTgwMDA4NTFGRTRDQTcxMTdBRUYyQzg3MTE3QUUxRTJCQzc1RDE2Cis6MTA3NTkwMDAyOEY2QUVENUM1N0REOEE0OEJGQjcwOTcyRUVFQzNGRDIzCis6MTA3NUEwMDBCQUI4MEZEQjc0NzExRjFFRDFDNTdERDhBRDhCRkJGMDRGCis6MTA3NUIwMDBCNDJFRUVDMzdFMjlCRkI4RTZCMDU0N0Y2OUVEMTEyOTIxCis6MTA3NUMwMDBCRkFDRUUwREE5RkVGMkUwNzFBOTdDNDVGRDA3NTI3OTMyCis6MTA3NUQwMDA0NUMzNDc1MkJFQUFFOTBCQTk3RTZGRTMzRUJDMkFERTMzCis6MTA3NUUwMDAwM0JGMjZERTAzMUYxM0VGODFERjhDMTFGN0UxQUYzRkVFCis6MTA3NUYwMDBGRkUyQjZDOEY3Rjg1RkZFRkM5QkRCRjAzREJFNDFCQzg2Cis6MTA3NjAwMDA4MzhEMTVGNzIxNUMxRTIzRUU0MzU3RkI2RjFGRjcyMTc3Cis6MTA3NjEwMDAyNUY5OUZGRjBFM0ZDN0NFQ0YzNzI3QzQ0RkNBQjFBNzZBCis6MTA3NjIwMDA3Q0Y3NzdGOEQ3MTZDOUVGOTlFNzk2QzhFRjk5NzNFQzBFCis6MTA3NjMwMDA1QzlGQ0ZGM0M5RUY5QUFGMkY5M0RGMzU5N0Q5N0NEOUYxCis6MTA3NjQwMDA4ODg3M0VFRUMzODQ3ODZGOEUxREY1QTU3ODlGMUZDMjk0Cis6MTA3NjUwMDBGN0E5QjAzNjNFOEJFRjUzMjE3RDBFRTMzRTQwN0ExMDAyCis6MTA3NjYwMDBFMzNFNDA3QTA4RTMzRTQwRkE3QjhDRkIwMEU5NEIxODhFCis6MTA3NjcwMDBGNzAxRDI5NzMxRUU4MzhBNzEyMzAyMjI2RTQ0OEQ4OEZFCis6MTA3NjgwMDAxQjUxMkJFMjQ2RDQ4OUI4MTE0MTExMzdBMjVFQzQ4RDNCCis6MTA3NjkwMDA2ODEwNzEyMzlBNDREQzg4MTBDMTM5RTEzRjQ0RTk0OUZDCis6MTA3NkEwMDA3RjBCQTVBN0ZDQzcyODNERUQ2RkE1RjQ4Q0ZGMzRBNTgzCis6MTA3NkIwMDA2N0ZEMUQ5NEI2RjkzRkE3QjRCNzcxMjMzNEI5RkMzMzA1Cis6MTA3NkMwMDBEQTBENjZFQzlGQ0JCMTI2QTczM0VDMDMzNzQ0Q0E2OUM5Cis6MTA3NkQwMDA5MUZEQTIwRDI4QTdCMUUyNDVDQzQ1OUFBNkM0OEUxNzBDCis6MTA3NkUwMDAxMTJFOEYxMTJGQTJBQjdERUM3ODExNjlBM0JGQkY3ODRCCis6MTA3NkYwMDAxMUZGMTZDRkU1RjUxRjhEMTczMUJGNUE4RTY3QjA2MEE5Cis6MTA3NzAwMDBDREY5RTM0NTk0RDk4QTU2QTM1QzZBRjJGODZGRjFGQzhGCis6MTA3NzEwMDBCQ0FBQTc3ODExREJFQzhBNThBRjgxMkU2ODc3MDE1RDhGCis6MTA3NzIwMDA2OEJERUVFMUJERkQ3MzhFODc3MzcxM0ZEMTk5N0JEMTRBCis6MTA3NzMwMDA3OUUzMUNFOEU1MjIzNkJENzk1QzgzRUJCRUU3MzgxMUJFCis6MTA3NzQwMDAzREQxNTVBQkZGNjYzOThGNUZGMDZGRjFFNzhGNUZEMEFBCis6MTA3NzUwMDAyRDRFNDQ0RkYxMDUwNjdENDY3QUIyQjc3MTIyN0E1QTEyCis6MTA3NzYwMDAxNzdBQTJFN0FDRUYzOTRFNDQ0RjdBQjUyNzdERkFDN0I2Cis6MTA3NzcwMDBFOTlDQ0UxM0UyQ0YxRjhGMjMxQzE3Q0VEQTcyOTAxQTJBCis6MTA3NzgwMDBCQkJDMzRCNTU1RjEwRUJDNjBCNjhCRkMyN0VEQkJDNDU5Cis6MTA3NzkwMDBCRDMxMkY3M0JCNTJGOTNCNzVCNDM3REJGNzI0MEM2NzRGCis6MTA3N0EwMDBGNDdFRERDNUJDQzA5Rjc4RjE1REQ5QjU3RjNGOUVBNzUzCis6MTA3N0IwMDBERkVBNjRERUM0MjQ4QTA3RUYzNkU2RTAzRTZDQTQxNUY3Cis6MTA3N0MwMDBGRDI5MTU4RDFGQkRGQzNCODA2QjZCMzZEMjdEQjI3NkRCCis6MTA3N0QwMDBDMEExODVFQzNFNkYyMkYyMkQ5RURENEVGQjc0M0NFMzkyCis6MTA3N0UwMDBGQUE2NEZFNDdCNjZEREVGMzc2MDk1ODhGMzlCQTk0NkU4Cis6MTA3N0YwMDAzQkVEOUIzQUI3RjI3QjlFNDY3NkYxN0QxMzQ3RDM3REY2Cis6MTA3ODAwMDA2QTE2NzQxM0ZGQzg0RTVEMjFGMEVDQzQxNEVCRkJBQzk4Cis6MTA3ODEwMDA2NDNGMkUzQkZDNDQ3RTg4RjFGM0NBNDhCRjQxOUY0MjNGCis6MTA3ODIwMDBEOTRGNTM2NzczMEVDNzc3OTUyQ0UwNkQ0MUZCN0I4OTY5Cis6MTA3ODMwMDA4MDk3NTIyNEZCNkYzRTVDNTQ3ODA4Q0ZFOTk3Rjg0QTUyCis6MTA3ODQwMDBFOTFFNDI1QTg5RUNDRjYxRTJERDM4NkVDN0MyRjdFNTI2Cis6MTA3ODUwMDAwMDlGRDIyNjg1M0RBMDc0N0Y0NzVFRDY3Q0Q3MDZEQzhDCis6MTA3ODYwMDBFNzJDMEZFQUVENkY5NjhCNzI1NkNFRTIzQ0I4RUY1REQ3Cis6MTA3ODcwMDA1MTJGOTczQjFDRTIzRTg3OUREOTdCNDVCN0Q2MEJFRjM2Cis6MTA3ODgwMDA5Qjk4N0M1RUJBNzk0MjU4N0Y5NzgzRUVDMzJFM0JCQ0FGCis6MTA3ODkwMDBEODhDQ0NCMkE0Q0I3NEIzQjk2NUJBQzVFN0NBRjREMTVECis6MTA3OEEwMDBEM0NGRTE5MUU5QTNBNzVGQzI1OEQ5RkZBNUQxNEZCQkMwCis6MTA3OEIwMDA2RkE4MzI3MTVGMzRDOEVGOTE3NjdCODdERkI0OERGMEFCCis6MTA3OEMwMDBENEQzNEY0RkFGNTEwRTcxNEZBMjhCNUU0NUQ2NTQ1MjU5Cis6MTA3OEQwMDBGOTg0Njc4NjFBMjJGOUQ2Q0Y4NzRDN0I0OEMxRkZFRTIwCis6MTA3OEUwMDA5RjFDNUM0QkFEM0MwRTE1RjU1NjNBMDdDRDk0MjVCQzVDCis6MTA3OEYwMDA1RDNDQ0UwNzhDMkJDQjNDMzQxRjcwNDc4RkZFREQ3ODcwCis6MTA3OTAwMDBGNjY3MjFGN0VGQjI2RjIwQkRBOUY4QjlFMzhCQTA3NDM5Cis6MTA3OTEwMDAyQkNBREIwOEZFRkIwQkU0QUZEMjdFMzc4MTc5NUNCODYzCis6MTA3OTIwMDA4RjZBRjA1QkRENEI1NDNDMTc2NEVFMjUwM0YxM0NEMENECis6MTA3OTMwMDA0NUU5OURFMkRENkZGQjUwNDZGQkZFODZEMDI3QTk3ODI2Cis6MTA3OTQwMDA4RTc2Njc1RUM3NENGNDNGNTQyRDY1NDVCODdFRkRDODAyCis6MTA3OTUwMDBDOURGNUQ2QzEyRTkwODI3RjdDRjZDMkUzMjMwRUY2ODczCis6MTA3OTYwMDBGQzFEMUU2MzUwNDFCRkFCQ0I3QkY4NzJCNDQ3OUI0REVGCis6MTA3OTcwMDA2RTdBNDdFQ0VBNzhGOTdBMkExRjQ1RUZBMzMzMENCNTAzCis6MTA3OTgwMDAyMzExMUZBODRGRUY2QkRCOUJERjc1MkU4RUQwQzM2RENECis6MTA3OTkwMDA0RDc3MEZDMUZCQzVGNzFCQTJCRkVCMkQ3NTY4RUZEQjYxCis6MTA3OUEwMDBGOEZEOEUxMTVENzEwNjRBMUQ2MzI4MUVDMTlERDlEMDU4Cis6MTA3OUIwMDA0RjY1NzEyN0YxNTE5M0NCMDk4MkZFQ0Y5NTRFMjdGQzdECis6MTA3OUMwMDA5RTZDNTZEQ0U4QUY5QjY2QkNFMTA3QzMwMEJGNzE0NzA1Cis6MTA3OUQwMDA1NUFFQkZDNEJERUVEMUEyRkVEM0NDOTM4RUY4OEVCQjA0Cis6MTA3OUUwMDA5NDI5Mzg3RkM2QkRDMTNDMDEyNDcxNzUyOUREQTdGQkYwCis6MTA3OUYwMDA5RDczREEyMUU0RDc5NDY2OTAyNzlDMEY2N0VEMUVCQzM3Cis6MTA3QTAwMDAyQTNGQTY0NUJFMkY5NzM4QzU3NzAwRUYxNzVFNzI4Q0M4Cis6MTA3QTEwMDA5MTNFQkJFNDk4QUFCRjFGNjNDNEZERkVCODU2RjlGQkI0Cis6MTA3QTIwMDAwNERERkU3MzlEMjY3NzRFOTY4QTcyQjdFNTJCMjNFMTFGCis6MTA3QTMwMDBENURFQzEzQ0VCMDA2RUZCOTJCRTc0NkVEQkZFMDkyMzBCCis6MTA3QTQwMDAzQkIxRkQyQjYzNjFCNEZCMjU3NzNCQjhERkVCN0UzM0E1Cis6MTA3QTUwMDAyM0ZEN0Q3RkE5OURERTM5M0M1QjVBN0UwMURBMTc5RkFECis6MTA3QTYwMDBGREM0Nzc0MTM0M0Y2NTg0OUQ5NkMwREY5RjdCMTNEODZBCis6MTA3QTcwMDA1ODk0QzM1QjE1NEVFRkRBOENBMjI4RUI5NjI2Nzc5QUMyCis6MTA3QTgwMDAxQzZBRjI5NzUxMUFFNzhCNzY1RjMzRDlDOUVEQTM0OTg3Cis6MTA3QTkwMDBBNUI5OEExOUU1Njc5RkMyOTBBRTZERUIwMEFGRjNBQzU0Cis6MTA3QUEwMDBEQjAxQjYyRTEzRjFBOTZBRkE5OEVFNjE1OTlCOTVBOEVECis6MTA3QUIwMDBCRkNCRjM4NEMzQzlFRjAzQUUwQkFDQzVGQjE3MzdDMzExCis6MTA3QUMwMDAyNDQyM0Q5NTYxQUVDRDhBMDYzRkMwQjY5MDVERkE4MEY2Cis6MTA3QUQwMDBDM0NEREYwRDU4NDUxQzIxQjUzNjAzRUYyM0I0MzU0RDFBCis6MTA3QUUwMDBCRTcyMDNFMEY5MDBDQzA3RTRFRkZEMjYwRkUxMURBODBDCis6MTA3QUYwMDA2MDhDRUU5MzBBN0Y1REJGOTk2Q0RCRTYwOEZCNzdBRjg1Cis6MTA3QjAwMDBBM0UwMzBDQUVENjEwN0I3MUJGQkY4M0MwQUUyRURGOUQwCis6MTA3QjEwMDBGQjVGOUQwOEJGRkQ3MzBCRjFBRkFGQjAzN0I1NzYyN0E0Cis6MTA3QjIwMDAxRDlDM0UyNTRFRUYwMTZDQ0ZDQTkyNDlGOTc4N0M0RUUwCis6MTA3QjMwMDBGNzkyM0VFODM3MDc3QTQ3QjFBRkI0NzUzREM5QzdFODU5Cis6MTA3QjQwMDA3QzIyQzk2RTA4OTI3MkYyN0FERDJFRTlCRTc3ODBFNjU5Cis6MTA3QjUwMDA4RDM2MEY1ODQ4NjFGODVFNUZEMzZGNEFCMzEyNzI4MDVBCis6MTA3QjYwMDBEQzhGQjZEQTQzNzhGRjJDQTkwQ0M2OUQ4Q0YxM0NBQ0I3Cis6MTA3QjcwMDAxQzVFOEI3QTU2RjY2QjgxM0NFNkEzNzFDRkU4QkQzRjY1Cis6MTA3QjgwMDAzQTUyMTFCRUE2RjczNDdENzk2QjIyRDc0N0I3REVBNUVFCis6MTA3QjkwMDA1MjNDRDBBRDZBQUIwREZEQTk1OTVFRjcyNDBDNEQ5MzU0Cis6MTA3QkEwMDBBNEJBRTk1RTRBRkYzMjNFMEZFMzczN0U5OTE4QjYwMzJBCis6MTA3QkIwMDA2MDkyOEZGQ0RBQjgyMERBN0JBNjBDOTRBNzE0QTQ5NzA1Cis6MTA3QkMwMDBFRjQzMDdBNEMzMEY3NTNDOEJFNjgyQzdDNkZBRjBGQkYwCis6MTA3QkQwMDA1MzQyNEYwOEJCNjY5QTU4RUZDNkJENjdFMEVGMjg0MzkzCis6MTA3QkUwMDA5N0IzQzhGNzQ1N0EzRDAxNzJGRjI3RkNGRDlFRkJERjg2Cis6MTA3QkYwMDA1MzI5NEU2ODU4M0Y5NDRFQTNGNTg5MTk4NzFFNDAzOTgyCis6MTA3QzAwMDA5QkYwMjJFM0M3NTE0MjNGQjhFMDFGRDJFNzkyOTc3QzM2Cis6MTA3QzEwMDBFQjExOERFRkFBMTdGNEZDNjYyMTZCMzg4RjNGQ0QzNjQwCis6MTA3QzIwMDBFQTEwQ0NCN0M4NzVENjI5RDY3QkExNDc2RTJBMUVCOEY0Cis6MTA3QzMwMDAxRUU3OTcyNjQ3MTdEQ0UyMzFGQTIyRThBODZGMUZGNjA1Cis6MTA3QzQwMDA1MzJBRDZGMDc3NzcwRUVBOTE5NzhDNzgzRkFDQkQwMDM3Cis6MTA3QzUwMDBGODBENzQ3OTEyRTcwQkQwM0JGMTkzRTA5NUM4RjcyRDNFCis6MTA3QzYwMDBDRDU3RDg1MEJFNkYwRDRENzJDRDgwMzY4OUQ2MjI2MjY5Cis6MTA3QzcwMDA1RTIyRjM5MjNGMjcwRkE4ODM3MTIyRDY5MzUwQzA3RUQ1Cis6MTA3QzgwMDA1RDJEQ0E3MkE2RTAzREFFNDJDOURGQTNGRDJFMUUwQ0RCCis6MTA3QzkwMDA5NEY4MTJFNjAzQzg3MUU0M0Q1NjREM0VGNUYyQThDOUNBCis6MTA3Q0EwMDBFRjdBREM2MEUxRjkxRDdBQ0MyMTM1MkEwREM0MjAwQjc2Cis6MTA3Q0IwMDBEQkVBNDIzREFCRDk5N0VCQzNGNjVDMjJFRDMzNTYwQkMyCis6MTA3Q0MwMDBCQjY4QkQ3RDlBOTVENEMwRkU2NDVBQ0Y1N0UzRkEwNEQxCis6MTA3Q0QwMDBFMzVGOURDMjY4MUU2OEUzRDBDQjYzRDVFNzA2MTY4Q0QwCis6MTA3Q0UwMDBEODFGNTRBOTFENzQ4RkFGRUE3MzMzMEJGNkMxNzFGQjEzCis6MTA3Q0YwMDAyNkUxQjgzNUJBOEMxNDc0RDFEMzIxREIyOUY2OUI4MkU2Cis6MTA3RDAwMDAxRUIxRjFDQzc3RTFGREQ5NDRBQjk3NkQyNDNDMjdEMTZFCis6MTA3RDEwMDAzREU3ODY1MDlFMTVEN0RCREI3NDc4RjYwMkJGMzlEMTdDCis6MTA3RDIwMDBGMDUzRUQzMUYwMTNGMURCMjYzMERGRUY1QTQxNUVGMzEzCis6MTA3RDMwMDA2RkFBQ0JFMEVCMDU3QjM1M0Q4MjdGRkE3OTMzQjZBOTlDCis6MTA3RDQwMDBGQTgwMzk2MkJFNjg3RTVERkQzQzE5RDFDQ0FFNDFCQTg1Cis6MTA3RDUwMDA4RjBCQTkwQ0NGNUY3QjlBMkY5Rjg4RjE1NkM1NzM3QTQyCis6MTA3RDYwMDBCNUNGRTkxODhDRjJCOTQzRjU1NTNCQzlCRTY4MzU2MDBCCis6MTA3RDcwMDBEQ0RGRjZBNzE5Q0Q2N0NGRkU5MzRFOEE2RkQ0RDJCQjU2Cis6MTA3RDgwMDBGQkU5OUExREE1RDk0RkZBN0E5QUZEQTRFOTVERUQ3RTJCCis6MTA3RDkwMDBGODc2QTdDRjhGRkQyQjREMjA5RjMwRkVGNTJFQkUyRkZFCis6MTA3REEwMDBEQUVCRjBBREMzRUZGMTMwMDYzQzRBNjJCOUExMkNGRTJDCis6MTA3REIwMDBGRTU1OTZGRjU4RjIxRUFGOTNFNzA2QTAxM0ZENEUxNjMwCis6MTA3REMwMDBFOEZGNDE0QTc3M0NCNEZFQTczODEzRjk3OTBCQ0M2NjNCCis6MTA3REQwMDBENDQzRkRGMjE5RUZBQzkyRDFGREM5N0VDMzk5MEZENzAwCis6MTA3REUwMDBBNzdFNzlGQ0RFNUY1MEFDREJEQjg0QkVENUQyQkQ4RUQ2Cis6MTA3REYwMDBBMkZCMTE3RjkzQ0EwMjk2QkNFRjhFMzdBMjhBRjdCMTFECis6MTA3RTAwMDBCNzNCQkRGN0ExRkM1OTBCQkQzNDhFNEMxN0YzQTBGRDU5Cis6MTA3RTEwMDA5OUE5MzYyOEY4NkUzMjY5QTU1QkUxRjdCMDU5RDczQkNFCis6MTA3RTIwMDAyNjgwOTczOUMzNUQ4MDcyOTI4OUZCNjhBQ0RGMUMzRDY4Cis6MTA3RTMwMDA4RUQ2MTM0RTkzNjQ2NzdBNTgzODRFRDUxM0Q4MkZEODAwCis6MTA3RTQwMDA5OTA3Q0Q4MDc3OUYxOTVBREMyQkVERENDNkEzMjA5REM2Cis6MTA3RTUwMDBEQTFDNzMwOEU5QjY0RjE1NkU4RjI3NzI3QUU5RjcwM0JCCis6MTA3RTYwMDA0ODc4QzQ0RjE1RjlEQkNDNENCNTI1QjFBRURGRTEzNDExCis6MTA3RTcwMDA1OEM5OEU4RjY3OUUwNkQ0NEIyRjNCQjNDNUI5QThBN0IwCis6MTA3RTgwMDAwNkYzRkZBRTc2NTgxMzg3NzZDOUYxOUQxMzY3Nzk1NEQwCis6MTA3RTkwMDBBOEUyQkNCNDczMzhFRTk5NDA5RTBGMjNCRTZEMTMzQjJECis6MTA3RUEwMDAwN0RGNEFDNEU4MThDMEU1QzY2Qjk0RTJFMjY4RjQ2RkU1Cis6MTA3RUIwMDAzMjQ5RjRCN0UxM0UzQjUyMEYzQUNDQjQ4RjZDNTNFMkY3Cis6MTA3RUMwMDAzQzM4Q0ZEQTk2MkIxQzRGQzUyQUUyMDZBOUYyRkU1RjlBCis6MTA3RUQwMDBFODIzNERCRjc2M0FCMzA4RkY3ODE2QTA3RDAwQjM3QTQ5Cis6MTA3RUUwMDBBQzc0OEY1REUwOEY3MTE1QzlBRkIzMzczRUI4MURDRjRECis6MTA3RUYwMDBBMzc0NzExNEY1NzExNjI3MkZCNkQzQkQ4QjJEN0I2RDJFCis6MTA3RjAwMDBCNDJGRUQyQ0UyRTdGMzlEQ0QxNkQyQkZCMUU2NjkxQThFCis6MTA3RjEwMDAyQTgzRjNDNDBCMDRCQTc1MjBEREQyNENENTg5QThGN0E3Cis6MTA3RjIwMDBEMkU2RjNGOUFGQTc0NzNCMEUxNEY3M0I3RjMwMDVBMzJBCis6MTA3RjMwMDBCRDU3RDdEMkY0RjRCRUM1Njg5N0E1NjdBNDUzQUE3REYwCis6MTA3RjQwMDBBRkIzQUI1MUVGNjExQjEzMTQyOTRFREYxMEU4NTFFQ0I2Cis6MTA3RjUwMDA3MzhDMDlGMEZEOUNFRjhGQUY3OTU5RDdCREY2QkEzODE1Cis6MTA3RjYwMDA0RUJGNEVERkY4ODQ4NzUxQUU0MEUwRThGNzA0QjQ3M0FCCis6MTA3RjcwMDA0REIxOUZEN0UyMjc2OUZENkNGMTVCOEIzMUU0NjdERDgyCis6MTA3RjgwMDBBMkU5MzY1QzA3NTI5OEY3Q0E3OTM4MjlCNzk4RDg0RUQzCis6MTA3RjkwMDA2QTk3MkJERDc3QkRENzNGQjIxOERGMjc2NzI2RjA3QkM2Cis6MTA3RkEwMDBCNDlGNkM5OTRBRUY5OTUzRDkzQURCNjBBMDQzNjk5MTI5Cis6MTA3RkIwMDBDMTgzRkU4MDczOEJERTc0MUE0MDdFMTY2NUI2RTRBMzFGCis6MTA3RkMwMDA5QzI2OTg3Qzk5MDk2M0M4NzU0NUZCOEQ2NTI1RTY2MEZDCis6MTA3RkQwMDAwOEU4OTU1QzA3MEE4MUU4MThCODkyRThCOEQwMTBENThGCis6MTA3RkUwMDAzRjlDOURDMEY3OUQ2Rjg5RjUyNDNEN0Q0MEYxOTI1MUU2Cis6MTA3RkYwMDA5MUY5N0U0NDU3NEQ4RTYwRkU2NDJDMTlERDE1MEYxM0U4Cis6MTA4MDAwMDBGODc5NTE0Mjk0NzlEMDZFNjI0REY4NUU0MkQzNDdDOUY3Cis6MTA4MDEwMDA0MkNDMzQ3REE4Qzk3MTMyQ0UwRkI0RTM4QTQwM0Y0OUM3Cis6MTA4MDIwMDBFNzdENTAzNUI1RUJGNzBDOTVFNjE3QkU0MDNCRDY3OUFBCis6MTA4MDMwMDBFOTI0RDIzNzMwNkY2QjQ4Q0U3M0I5RkVCNEExM0U4QkMyCis6MTA4MDQwMDBGMDVCQjVFRjdEQkQzRkJFNjM3QUZCNjcxRjNCRjA1RDI0Cis6MTA4MDUwMDBDQjVGRDQwRTA3RUFBRkQzQjdGQ0M5ODE3MUMwREVCRUQ3Cis6MTA4MDYwMDA4NUVGOTM2RkQ0RDlGRjU3MDlGOTA4MjYxNDRENDFCQTBCCis6MTA4MDcwMDAyRUYwRkYzRDNGRDI1RTYzNkJCOEZGNzk3OTUwN0VCRjMzCis6MTA4MDgwMDA4QUY3QkYyM0ZEODAxNTBERkFGQjAwMDExRUE3NENGQ0VCCis6MTA4MDkwMDAzRUE3OUUwRkVCMDQxRjk2RUZEQTY2Q0U3NDYzRkZCRTE5Cis6MTA4MEEwMDAzOUQ4RkY2OUIxQkYzOURERThBMEY3MTQxQTNFOEI3NkU1Cis6MTA4MEIwMDA4RDM0QTNDREZGOTc2NjhCNzhBN0Q3NjJFMjdBRDkzQjQwCis6MTA4MEMwMDAwM0RGRTdGODA0RERGNDc4MUVEQzE3NEZGMDk2REVDMzFCCis6MTA4MEQwMDBERkFGMkU4NEJFRDY4MDVFRjQzNUYzMzg0QUZBNzEyQ0I5Cis6MTA4MEUwMDA3RERCM0QwREZERTg0QjM3MjlCNDhGQzNGQUI3QzAzQUFECis6MTA4MEYwMDBFMTVCQjM5MURFRjFFOEM3QjkzMDIwRkI3M0Y0RjExQTBDCis6MTA4MTAwMDBCNUZEQzAzMkMxRkYyNUY4NkJCQzM5NTFFMjM4MzZGM0ZBCis6MTA4MTEwMDBGNzc0Q0I3NEY2NDVFN0ExOUM3ODFDRkY5QTA0NjE2NzVECis6MTA4MTIwMDBFN0IzNEIzMDZFRTc5RTQzRDkwOUQxRTI2MTY4RTk1OTY0Cis6MTA4MTMwMDA3MURFOEZGN0ZBMzEzREVENjc5NDRFNDk3MEYzNzg1RDRCCis6MTA4MTQwMDBDRDQ3NkU0NkI5QUE2Q0RBNERGMTExRjcwNURGRUIzMzc2Cis6MTA4MTUwMDAxRUFBMTQzNDdGNjE0NEExMkExMEY2RDg3QzYxOEZFREU5Cis6MTA4MTYwMDA2MTVDNkVDMDhFREU4Q0YyN0ZGOUU3M0EzQjVBOENGMzhECis6MTA4MTcwMDAwNjRERUUwRjI1OTFEQ0RDODBFMzFBOEVERkQ1NEZBMjkxCis6MTA4MTgwMDA4REVCRUUwNEY5RkQ1NzZGQzdBNThENDcxQjlGNTY1RTFCCis6MTA4MTkwMDAyMURFOUZFQkRCNjk3MjNFNDVDOEREOTIxREM1MUJGQUVGCis6MTA4MUEwMDAwMjI5RDZFRjdEN0Y4MDg4MjM0NzcxQjYzNDM5RDJDQjQwCis6MTA4MUIwMDBDOTMyQzFCN0IwM0MzNERGNDFFM0QyRjgwNkYyOUUyRTlCCis6MTA4MUMwMDBERTI1QTVBMzNGQTMyN0I5RDBGM0JGQ0RENDNBMDBFNzVFCis6MTA4MUQwMDBBQjlFRkY2RDMxQ0U3REI2MjdGMDczOEQyNTZFRUYzNEVCCis6MTA4MUUwMDBGNEFGODA3OUI4QzExNTYxM0Y5QzU2NkIwRkZFMTRFNzYwCis6MTA4MUYwMDBEMTBFMkVDNzkxRUIyMjE5NEIyRjlBNjg5RDVERTU3MDI5Cis6MTA4MjAwMDBBNzI1REEwNURGQzZFMUZCNDU0QjAwRUI2OUZEOUNGMkQzCis6MTA4MjEwMDBEN0NDMUE0OEU3OERCNUIzMDYwRUE0NzcxQjk0NkFFNTUwCis6MTA4MjIwMDBBNUY3N0ZFQzQ0RkJCNDNEOTc5MTdGQTFDRDIxRTM3QjgzCis6MTA4MjMwMDAwNDE3OUIzMTk4NzJGQUFGNTQ1QkJFN0UwQjc1RDA4RURCCis6MTA4MjQwMDAxNjhBREY3QUVBMkJFMTlGRjhDQTUyMTg2RDlDNjcxM0YxCis6MTA4MjUwMDBCODFEQThERDNGQjk1MUNDQTMxQjlCRjk3QkJCNDU1Qjg3Cis6MTA4MjYwMDA4QkNERTQwNzU4MjNERkQ3Nzg0OTcxNERDQjg0QTZCRTY4Cis6MTA4MjcwMDA4NjkxNjZFNEIzOUUxRjRCM0Q1N0QwM0JGMDZFN0M2MTA4Cis6MTA4MjgwMDBCNzEzNUY5N0VBREZCNTg5N0I0QzBCODQ3Q0NDNzRCOTVDCis6MTA4MjkwMDA4NTlERTZBMzc3QzQ0QkVBOEM2NERGMkY3MzU3RDNGRTJBCis6MTA4MkEwMDA2Njg1MUFGRDNERDYxODk3RTFCQ0UzRDE4RjYzNjFBM0MzCis6MTA4MkIwMDA0MjdBNEY4RkZGQjIxRDZCMzdGNDY1Mzg3RTNFQkVFRUJCCis6MTA4MkMwMDBFMzA4RjUyMzNEMjNDNkM5NUEyRkU3RUYzMkM1QkFGREFGCis6MTA4MkQwMDA1Rjk5NUVFRDhDMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDlECis6MTA4MkUwMDAwMDAwMDAwMDAwMEJCNTdDMEQ3ODU0RDVCNUU4M0U3MzU2Cis6MTA4MkYwMDBDRUZDMjQzMzQ5MjZGRjIxNDEzQzIxMTExMjEyRTI5MDg5Cis6MTA4MzAwMDA4NDAwMDE3MUYyNEJDNDA4MDMwMTgyNjA3NTQwNTE4NEZFCis6MTA4MzEwMDA5MDIwN0E1QkVGQUJCNzk5OTA2ODJERkE3QUEzNThDQjhGCis6MTA4MzIwMDA2REVERkQwNjJCQUQwQTQ4ODBBMDgxMjZFOTA0MTQwM0ZCCis6MTA4MzMwMDAwNDBEODIwQTk2RDY4MDE0QjEwNTMyODBCNTU4N0Q4RjFGCis6MTA4MzQwMDBCN0Q2REFGQjY0NjY0RTkyNDI2RjVGODdENjlEN0RDRUNDCis6MTA4MzUwMDAzRUZCQUNCREZFRDdEQTZCOUY2NUVDRDk0QjcyMEU2MzZBCis6MTA4MzYwMDAwRkI3Q0I4Q0U1MzM1NkZCQUNFQzY1QTk4QzJENjNDQUZCCis6MTA4MzcwMDBFOUJFMEM0NkJGNkJBOUY4NUY2N0U1OTIwNEM2RUVDNTdGCis6MTA4MzgwMDAzRjU1NjhEQjU3NTUzMjc4QUU1Q0FFOTk4NUNGRjU2RkI3Cis6MTA4MzkwMDA5MDk5NTk4MkVCMUVFRjUzQzk3MUQwMzY0OThFNDYxODE5Cis6MTA4M0EwMDBDNzFFMzc5RUVFQjMzMDY2ODE3RkQ3NDZEMzNDOEMyNUZGCis6MTA4M0IwMDBFMEZDRkNENzIzQjFBNzUyNjBGRUIzOEFGRkJEMDg3ODZBCis6MTA4M0MwMDBFRTJDQzBFMTgxNzk5Njc4Rjg3M0Y0N0VGOEZGMzJDNzFECis6MTA4M0QwMDA4QzJGMjQ3OERGRkRFREYyMjk3MzBFNUU1RDZEMzJDMEM3Cis6MTA4M0UwMDBGOEE1MkY0OTZDMUQ4Q0JGRkY2OURENzhCMTJFRkQzQUQxCis6MTA4M0YwMDAxRURBRjBBM0I5RTkxOTgxNzEwRjdCOUYwQkU5QzNEQThCCis6MTA4NDAwMDA1NDU2QzBEODdEMDIzRUY2RUE3RjA1RUU3M0Y4NERBRUI1Cis6MTA4NDEwMDAwOEM2MzJFRDExNzE2N0IzQTA1QkMwMjY1RDRCNjNBQzNCCis6MTA4NDIwMDBDRTFBOTlDM0EyQTAzNTMzQzIyMzNCNjRGNDZFMDJCOEJFCis6MTA4NDMwMDBENjQ0QzA4MjAxQ0UzNTVCQTNCRDFFQzRFM0VBNjhDNjQ0Cis6MTA4NDQwMDA0NkMwQjhGNjhEMjZCNzBERTZDNERGRUQ4QzlEQUI2RjQ4Cis6MTA4NDUwMDA5RTlCOUUwRUVCQUY3RjdBNkVCQUMyRDgyQ0JCOURCMUFECis6MTA4NDYwMDA4OTQwOEZCNkU3Njg1Q0I3RTI5QTY0ODdGRTJBNEJERkUzCis6MTA4NDcwMDA4RkVGNTY4M0YwMzg5OUQzNjM5OTVDNjk2Mjg2QzA3QzJDCis6MTA4NDgwMDBGQTc2NTlCM0YxQ0JCRUEwNzUxNjIxRkM1NkY4NjMxMkVCCis6MTA4NDkwMDBDMDJGRkYzREY4RDVDNDY4NUIwMDZFRkRCQzdGQUFERjJFCis6MTA4NEEwMDAxMDAyRjc0QTg1Mzk1QjZDODFGNTY4RTMyNkRBMERCNDcyCis6MTA4NEIwMDAxRUZERjM3QTdBMzBFNkE1NzE3QUJBQUM0NDNBMDREMTVCCis6MTA4NEMwMDAxN0UxNTQwMEFGM0QxRDU2RUY1QTg5Rjg4OEUwRjY3NDY1Cis6MTA4NEQwMDA4NDExREMxNzkzRDZDRDNEOTNDN0Q4NjE3QzAwRTBBRTA0Cis6MTA4NEUwMDAxREYxMzJGNTVGNTE1QzZFN0IzQzVFRjQ4RjcyOERDNzdGCis6MTA4NEYwMDA2NzYyMTk5QjMyM0NERTYwNDZDNjYwN0MyRUNFMEZFMzdECis6MTA4NTAwMDA3Njg1MzlGMzk4OENENzVEQjFDODA3RDMxQkZBQUEyQ0FFCis6MTA4NTEwMDA0MEFBM0FGQkE0MEEwNURFMzNGREI5QkVBQTMwRTgzRjAzCis6MTA4NTIwMDA2MjlGQ0NGQjlCRkE4RTVBMUM4QzM1QjAyOTE1QTVGMEE2Cis6MTA4NTMwMDBGQzYzNzAwRkU3QkI1RTlCNkY3NjJENjZDMDU3MzU4MDdFCis6MTA4NTQwMDA1MzRCMENCNEM3QzZCQzhERjI1NkQzNUI1OTIxNDU0MjgwCis6MTA4NTUwMDBDQjk4NEZDQTA1N0U3MDQ2RkFBQzM5RDQ2Nzg1MzBBRUU5Cis6MTA4NTYwMDAzM0NBRkQxRkI4QkU1NTU3OUIyRUM5MzhFRTk4QzJFNUQ5Cis6MTA4NTcwMDBBNTNCOEVGMEEwMDBFQzYxRjA1QzUzQjg1M0I1MDNCRTkwCis6MTA4NTgwMDA5QTYyMkM4RUM2NTRCQUVFMDk4QkMxQkU1MzU1ODNBRTg3Cis6MTA4NTkwMDA2QkY0QzBFNzEwOEUyNjAzNzM0NjQzREI3NTYwNEM1NEMyCis6MTA4NUEwMDA1RkY2RjA3OEVCQUE1N0FCMTRBMEZGQkVGQTBDNkFGNUExCis6MTA4NUIwMDBGNzhCNENGNjc0MDczQzVGNjQ2MEVFMTZEQkUwRkJBRkI0Cis6MTA4NUMwMDAyMkJGMTA5REQ0MTRBNDczNkRCNzg5RTQxQzdGMTJGMEYwCis6MTA4NUQwMDBGRDJBQTE4NzZBODE0MDUxMDBDRkFBNjNDQzE3MUU4OTZBCis6MTA4NUUwMDBFM0NBQkY1MEIwNkQ5NUQ4RTkxMEJFNjI4MUJFM0MzQzc1Cis6MTA4NUYwMDBEQzM3REFENkUyN0M0QTMwOUY3MDNDMTUyQkE5NTU0QTBECis6MTA4NjAwMDBEMDdCNEI2RDk5MjE3RDM5RDE5MDgxRUI2MTcyQjg2MzNDCis6MTA4NjEwMDAxM0UwNTc0RTMxQUNERTAxRUI5NzZGODYxNkYwQTFEODEwCis6MTA4NjIwMDAxREYyMTI2ODlCNEJBNkNCNEJBMTZEMzRCMjg1MkREOEExCis6MTA4NjMwMDAxQUQ4RjI2MDNDNzUwODc5RDJEQTRCNzZENzZGOTBFRTkzCis6MTA4NjQwMDAxN0RFRUYyREIwOTI5RTFBNjkyN0Y5MTZFQjZEOTQxQzc4Cis6MTA4NjUwMDAzRUQ0NDM5RTJFRTZEODA0RDc5QTY0MTdFMzdDRENDMjRFCis6MTA4NjYwMDA5MDhGN0YyRkU2NzE5ODBEM0I1NUUwRDdGN0VDMEYxMkY2Cis6MTA4NjcwMDBGRjNBQTIwQzhGQTY0MkZGQTNFNjE1MTUwQUYwQUYyMzFFCis6MTA4NjgwMDBDNTcwMjUxNTc4RjQ3OEYzNEFERUNGMzI1QzE5MERGREZDCis6MTA4NjkwMDA0RjlBNkI3ODdGMkE0Qzk5Q0NEOEM5RTY1NTE1OUU2Q0I5Cis6MTA4NkEwMDA5Qzk3RUIzMUI2QzU5OTg1RUY1MTBDMTJDOUE5QjJENzg5Cis6MTA4NkIwMDBFNDZEODQzRjlCMjIzOTNGMzUxOTgxMkY2MzcwQkM0QTlBCis6MTA4NkMwMDBFMzlGNkEyOERFNkMwNUZFNTc4QTlERUE2QTFCQzczNTYwCis6MTA4NkQwMDBGMkMzRkZCNEQ1RjAyODVCMERBQjExOEZEODIyQkVDRjBCCis6MTA4NkUwMDA4ODc1NkI3NDYwQURDRUFDMzlBODE3NUE5QzU5NzMyMzRBCis6MTA4NkYwMDAxMEFGRUVDRjExQUY3OTNEQkREMzUxMEZCNzdFRjA0OTJBCis6MTA4NzAwMDA4MTNCOUJEMzBCRTdDOUVCNjEyQzEyRDY3M0UxQUQ5Qjg4Cis6MTA4NzEwMDAzNkNBNTI4MDNFOTdFQzQ1RTc1MTVGNEJBMEE2MUY4N0IzCis6MTA4NzIwMDA3NTQ5QUE5REREMDM3MkQ3RTg2NEFBMDlENjk1Qzg1RThCCis6MTA4NzMwMDBCMkEzRkQzMDIwN0Q0MDA1QjUzMkFFNUYzQUEzNUM1RjQ5Cis6MTA4NzQwMDBFMjczNkNBNDhGRUM0Q0I1RERGNTE1QkU1RkQzQ0ZBQ0Y2Cis6MTA4NzUwMDAzNzY2NDgzREFDRDc1N0E2OUNDNzY1MDY3QzEwOTNEMkI4Cis6MTA4NzYwMDA3NjdDMjlFQUYzREY5QTFEQjdBODA4OEY5MzNEMEU3MDM3Cis6MTA4NzcwMDA2QzMzMzA4NUM1MTA3QjY0Mjg3MERGQ0FDMjFERUI1MDk2Cis6MTA4NzgwMDBERTFEMkNDOTAzRjI4NTY4MjNFMEUwMTcwN0Y2RDAyODI4Cis6MTA4NzkwMDA2NDQ4NUIwNzNDNUZDQUEwOUQ4NDcwREQ0QUVCOTI5MTAwCis6MTA4N0EwMDA5RjI2MzA5NzhDN0FBQjgwNzlBREQ4RjY3N0JDOTU4NENDCis6MTA4N0IwMDBGODdBM0U4Q0RERTc4MkQ2RjIyQTczN0E4M0Y0NDY3RTFECis6MTA4N0MwMDBCNDQ0Rjg5RjE1NjNBNDM2RENEODMyMTdGOTM0RkMxMjkwCis6MTA4N0QwMDBCM0EzMUZEMEZGMEI5MzgyRjM4MzYwREM4OUQ3MURGQjBCCis6MTA4N0UwMDAwRDBDRTFGQ0I1RDE2QjhGODJCRTNGNTM1MTVGNjY4MUFBCis6MTA4N0YwMDBGOUZBMDU5REI1Nzk5RjM3QTk5OUQxRDBBRjhBOTEwODJCCis6MTA4ODAwMDAyRkJGMkVFMkY2RDhGRjg1QzlGQjcyMkFFMkM3QjJEQTgzCis6MTA4ODEwMDAxQjI0NTdFM0EzRjlCOEJBQjhFMkIxRDFGMDdDNEI0N0I3Cis6MTA4ODIwMDAzOEMzRjc0RkVBMEMzNzIwRkUzNzZGQzkwRDQzM0VEOEU3Cis6MTA4ODMwMDA4NkI4ODFGNUM3OThFRDhGRTA3QzMxNTcwMERFNTRCQUQ5Cis6MTA4ODQwMDBFRTI0QkMyQUVBODQyOEMwNkJFMTRDOUJCQTBFRjBGRUYxCis6MTA4ODUwMDBFQkIwOTY5OUM4RjdGRUFEMDZGNjMyQkM2MjlCQzkzMTAzCis6MTA4ODYwMDAwN0ZCREIyRUFCNzZENEIzQkY0RTZEMDlBN0Y1NkMzNTk1Cis6MTA4ODcwMDBEMDdBQjY4NUZCQzdBRDAxQjhENzY1MjgxNTA4OUY2MkM5Cis6MTA4ODgwMDA2NTBBRUE1RkM1NTBBQzNFMDJEN0E3NDU3M0ZEQThFOTZCCis6MTA4ODkwMDBFMzlBNjg5NUZBQ0Y0QkYwRkU1QzFDNTc0NDcyNTMyNjVFCis6MTA4OEEwMDBEQjQ4REVGQUZEQ0M2Qjg2RjdDNENGRUI5NTkxMUVFMTc5Cis6MTA4OEIwMDA3MzgwOTU5MERGMTU5RkNDNzAzRTE3MTIxQTVBOUJEMThBCis6MTA4OEMwMDBBQjkyOUU3NURBOTYwMEREQTcwQjNEM0JGRDY0NEQyNTBFCis6MTA4OEQwMDA4QkM0OEVFM0Q4NTQ5ODZGOUZDREM4NzA1REI3QjEzRUZFCis6MTA4OEUwMDBEOTAyRkREQkFFMzI4NzBGRjlFN0FBNDI3RTk4MURGRTYyCis6MTA4OEYwMDAwNUZCN0I2NTYyOUU1RjQ5NEM4OTgyNzE0NTVGQUEwQUQwCis6MTA4OTAwMDBGMjU3MTEwQkY1REJDQTM2OTQ3RjgxRjZBREM0QTJCQkRBCis6MTA4OTEwMDA4RUZFNUMyNEI2NEFFMDNBQ0NCMzI4NUFGODYxQTNEODVDCis6MTA4OTIwMDBBODZCQTRDRjYwRDYwNDYxNDc1NTVDN0ZGNjdGRTFCQTlGCis6MTA4OTMwMDBGQTJCNEMwRTVDRkY3NjlCRjNFM0E5QTgwNzdCOEQ2Q0FBCis6MTA4OTQwMDAxMzFCNUU4RTdFNTUwRjFBN0QwQzA4QzdENTcwRTY4RDAxCis6MTA4OTUwMDAyNTNFQjQyMUZEQzc2RDY4RjY4NEMxN0FDN0E1RjNGOTM5Cis6MTA4OTYwMDA5MURGNTA2RjhDRkQ0NTVDMkNFQUVEODg2OEFFNEZCNDBBCis6MTA4OTcwMDA1NkUzMkZFNDIzN0IxNEU3MjNGQkFEMDFGOUZCNUU3NDgwCis6MTA4OTgwMDAyQThERDNFNDA5RjkwQkU3RDk2M0Y0MkU3NjBENjExNzJDCis6MTA4OTkwMDA4MTJGQkY4NzdDQjlEREM2MkE5MENGOUYxOTYxNTk4ODg2Cis6MTA4OUEwMDBGMkE0QkQ2N0I3RTA3QjdERkI1NEMzOUEyRTIzQUVGQkQ4Cis6MTA4OUIwMDAyRkEwRkYwMUVFRDJFNEFCQTY2MEZCREQxNUM3RTEyREQxCis6MTA4OUMwMDA5M0JGMjVCRkZBNjJCQjQ0RkU3QzQyM0JEN0Q3QzE3QzM0Cis6MTA4OUQwMDAzMTYyNjhCRTc4MDFGMTdBM0RCRUQwQzcwMTFBNUZFQzAyCis6MTA4OUUwMDBCODFFNUY3NEZGNjM3Q0YxOEI2OEUxREYwRUNCMTdERjhECis6MTA4OUYwMDA0NkUyRkExRkVCMjg0OTY0N0ZDNzhGNjkxMzdDMzBEQzlECis6MTA4QTAwMDBGRDI5NTZBRUQ3RjREN0RCMDUzRTc3OUI5QUVGQ0M0MUQ0Cis6MTA4QTEwMDBCOUJGQ0JFMDQwQjkwNkFBQTdDQzA1RkJCMjNCOUMzRjRGCis6MTA4QTIwMDBDNzk0RDU2OUQ4REZBRTcwM0RCMkJEREQ0QzdBNjRCQjZBCis6MTA4QTMwMDBDREVEMjY3QjlENjQ2MUU4MjczMEM1RERGNzdERDQ3RkQxCis6MTA4QTQwMDBDOTE2NzU1RDEwREYzRTJFRjQ0MDhCRDEzN0U1NzNGNDA3Cis6MTA4QTUwMDA3RjBGNzBGQTRFQkUyQjU3MzZDMUI4MTEwRjcwQjlDRUNBCis6MTA4QTYwMDAzRjY3REEyOEMzM0NENTMxNDVCRTY4MThERjE3Q0RFRDI2Cis6MTA4QTcwMDA2MkREMTkxODA1N0M1OTdCQzY0NEZBRURBRENFMjNFNUJECis6MTA4QTgwMDA0RTFCRjkzNzRFRTRBRjQ5N0I4RTk0MTc2N0UzNzhDRURGCis6MTA4QTkwMDA0N0REQTJENUZBNTM3MDREMzE2NDc2OEUyNTAxN0U1RDk3Cis6MTA4QUEwMDBDMjRFNEM2MTVDMEZCOTkwM0Y3MjAyN0RFNjM0NTIzQzdECis6MTA4QUIwMDBBNkYxNDEzNTYzNTk2ODI3RTZGNjM5Q0E5MDhEQUEyQThFCis6MTA4QUMwMDA0MkU5NUJFRDlCNDk3MURGRkNFM0NFQjIwODU4RDc3Q0VECis6MTA4QUQwMDA5N0VFQkVBMDdGQjU4RUZFRTAwN0ZGMDFFNTY0RDVFNjA4Cis6MTA4QUUwMDBERTRFMUJGMkFEQ0FFRDY5OEI2OTc1MTZGNzdCNTZBNzkyCis6MTA4QUYwMDBBMUZGQUZDOTExRkQwMDRGMkRCRkNGNzg3OTVEOTAxRDRCCis6MTA4QjAwMDA1NzYzRjgzQTlGNzUyODc0REZEMzY3RjJERTAyOTdGRTQ5Cis6MTA4QjEwMDAzN0UzQ0ZCNTA4N0JGM0FEOTBFM0RDQzdERTU4OENGQ0MwCis6MTA4QjIwMDA5QkI3RENCOTBGRjFCRjI4NEVBNkVCRkZDOTdDOTYzNDhBCis6MTA4QjMwMDBBNDhGNDMyMUZGQUJDNUE4OTY3QzJFMDVDNjMxQzU5NUYxCis6MTA4QjQwMDA2MTgzRkI3QkUyQzNGM0YwRkRENTMxRUU2QjQ4MjdBNkQyCis6MTA4QjUwMDBGOEJCRjFCOTQ5ODVCOTc5Mjg1N0I2MDk0REIxNjg3Rjk1Cis6MTA4QjYwMDAzNEI4MDFBRThBNERCNjAwMUMxQTVDRTc4NUZFQTk4RUFBCis6MTA4QjcwMDA1OTcyMERGMTgwQ0ZBMTVFNjkzQjc1RDY4MkNGNkI3NEJGCis6MTA4QjgwMDA2RkU5QjhDNEU5MUQ0NDdGQTQ3NzgwRkVEMjdERDhEN0IxCis6MTA4QjkwMDBGMDYwMTFBREQ2RkZFN0U5RUYxQjg5RjQxODk2RkUxOEQ3Cis6MTA4QkEwMDBGNzQ3RkU4RkU4M0YyQTY2MDhGQTgzM0Y5NThFRDczNTUwCis6MTA4QkIwMDA3RkFBQzUwNDdFNzU3NkEwQUZEMUJEREE1RTQ0RTMxQzAyCis6MTA4QkMwMDAyNjU4MTlGQTRGOUQxMDU3QTIxQ0JBQTNEMUI5NjEzQjgwCis6MTA4QkQwMDBFREZDNURGREJGM0YzQjBBNUM0MDM2MjkyNjg2Q0I5MzBBCis6MTA4QkUwMDBDOTNGMDZGRDhEMDkzRTg5RkNCRTA5MjBGMEY3OTA5RjI0Cis6MTA4QkYwMDAzNTkyRjQ5RDQzRTA4NzlEOTVBNEIzMTlEQzA1QkY5NjlCCis6MTA4QzAwMDA4MkZFOUYyRjE2RTU2MDgyQjlEMjg3RkNCRUMzM0EzRDMzCis6MTA4QzEwMDAwNUZEQjc1Q0VCQjQzNEU0QTczNzMzMUUzQjg0MjZFNzhECis6MTA4QzIwMDBDREU0RTUzQjVGNTEwMzdFOEVBNkQ3RjY4OTY5QjVGN0EzCis6MTA4QzMwMDA5N0M3NzBGQURGMEU2QTE2RkQzRDc0MEQ4M0UxRDBGNDFDCis6MTA4QzQwMDAzNzkyMDVFMTkwN0NENTg2NkI1NkQyQzdFRDdEODBBRjFCCis6MTA4QzUwMDBEQjExMEVDMDZCOTdDNDVBNTE3RjE3MTk5QzcxMjVFODIwCis6MTA4QzYwMDA4RkM1RkIxNEVFRDc3RDNENEEwNUJFQTk2QzdGRjczODUyCis6MTA4QzcwMDBDMjVCNjlCMUY5MzBERkMyMUNDNkYzN0Q0MUY5MTJCRDk4Cis6MTA4QzgwMDA5RkFCRjkyNTlBREZBRkY5MkQ1QTdDODlGRTBEREVDRjE3Cis6MTA4QzkwMDBDN0VCMDBCRkREMEMwMEEyRkRGMTU5QkMwREYwRkVFN0YzCis6MTA4Q0EwMDAyRkFCOTk0RTIxQUYwQUFDQTM1MkFDNjMzNkVCMjVCODdCCis6MTA4Q0IwMDBEOEI3RDdBRTREMDNGQUNDMTJGOEE4RUM4NkI4MzAwNzc3Cis6MTA4Q0MwMDBFRjMzNzYxN0UwRTEyRTg1Qzc4Qjc3MzkyMDNFMENFMjMzCis6MTA4Q0QwMDBBM0Q5OTM0M0ZCRjg5QjlFMTA5OEU3N0FFM0Y1RkE3RkJDCis6MTA4Q0UwMDBBQUM4MTdGQ0IzNzFBNkQ2NzY4MzFEM0EwRDBDNzBCMEQ2Cis6MTA4Q0YwMDA5RUM3MzQ4NUEzNjU4RjgyRjE4MDNCRDM4MEZDNTgyN0MzCis6MTA4RDAwMDBFQzFBODRDOTQzREIyMzIxQUY4NTg2QkUxQzA3RTBCNzdDCis6MTA4RDEwMDA2QkNGMzc2NEZGRjZFRUY5RTYyM0Y0RTdBNjdDQTEzMENCCis6MTA4RDIwMDAzMzNDNUZGODQ1N0UxNEVBMDdFNjBBOURCN0VFOEZBRDQ3Cis6MTA4RDMwMDA1NkM2QUYxM0ZGRDQ4QUI1RUZBRkM3OEMxOEMyNjdBMTcwCis6MTA4RDQwMDBGNjM3RTc5RjVGOEZGMzdENzk0NkUxQkMyRERFNUY2RURFCis6MTA4RDUwMDA3MkE3REI2REQ4RjI3ODdGQkZDNEZEMURFREZFN0UyM0M4Cis6MTA4RDYwMDBDMDBERDczN0M1Njg3MTdGQUY0MkY5MTlGODk5ODNFODBDCis6MTA4RDcwMDA3QzE3QzZGQkI5MDFCQURFNzVBRUUyMEIyNTY3MzA3RDA0Cis6MTA4RDgwMDBGMEY3RkYyM0RFRDdFMkZDQjc0NEZDQzBGNjlEMzBBOTI0Cis6MTA4RDkwMDAwMEQ3OENENjQ3MTRGNEEzNjcyNEM5Q0MxOUY0REUzQjYyCis6MTA4REEwMDA1NDJCNzMwNkM1RkI2RkM0RThGQzkwN0RBRkFEOUYwNUU3Cis6MTA4REIwMDA3NkE0QUU0Nzc2ODRBMUJDQjY2RjNGOTQ4M0ZENUVEOTlFCis6MTA4REMwMDA2MTFEODI4RkY0Rjg5REQxRkU4ODgyRkM5RjEwQ0JFNTU3Cis6MTA4REQwMDBFNjdBRUYyRjFDMDc3QzcyMkJEMjlEOTExRjc3QjE0MDUyCis6MTA4REUwMDAyMjM5RDJEMzc3RUY5RTlGQzdGNjY1MEY4RkVGRTFFODY4Cis6MTA4REYwMDBBRkE3QzM2RkNFMTc0NzIxNUVBRTQ3MEYzRERGNzZDMkU4Cis6MTA4RTAwMDAzQTNEQjAzRTFGQUNEMzAzRkVENkRFN0EzQkY1REZBRTczCis6MTA4RTEwMDA0RkEyQkVDNkFGNzUxREJGOEM0NTdGNERFM0QzQjI1ODgwCis6MTA4RTIwMDBDRTM3NTM3NkFGOEY2NUI2MDBCRDM0N0M1RDE0NzRBQjFFCis6MTA4RTMwMDA2NjhFRjlCM0UwQ0Y1RDkyMjM4MkY0ODQ4N0Y1MjYxNTIwCis6MTA4RTQwMDAwNEVDNTVGNUIxNzJGMjMzMzQ3QjU1MkQ2NzFCNTFGRjlECis6MTA4RTUwMDA2QUY2MEFEM0MyQThDRkY0RjY2OTdFN0E5MTExRDVBQTMwCis6MTA4RTYwMDBERTJFQzEwMjhEQzhCRkQ1MEI0M0FGNTdGNDM0MkIxMTkyCis6MTA4RTcwMDBENDMzMTA5RDI0NDlFMDQzRjhENTFBM0MxRjMyMTdDMTYyCis6MTA4RTgwMDBBQkE3QTcwNjlGMUUyRUNEOUZBRTE2NzQ4Mzc1OTZFMUU1Cis6MTA4RTkwMDBEMkU3QUE0NUI0OEU0MTc2NTVBQ0Y3NDZFREE5MzkzNkVFCis6MTA4RUEwMDAzNENFQkE3MkFFRjRGRDlDMjFGODc1MzhCRUQ1REZENzRBCis6MTA4RUIwMDBGNDQwMzlCRTIwOTc1QTBGRkExMTA5QjEwOTQ0QUZGMkI0Cis6MTA4RUMwMDBBQjI2RTYwNDdCQzE0Njg2QjFDRjgyRjNFRkFGNjQ5MjU2Cis6MTA4RUQwMDBCRDdCNTREOERGRTFGOEE2RjZBQTgxQjk2MzAzRkM2MzMxCis6MTA4RUUwMDA2QzdCQ0U4QUZDQjM1QjY5QjY2MkRFRjEzNkRCOUNDNjc2Cis6MTA4RUYwMDAyOEMwNTNFOTFGOEJFN0ExNUY1N0Q3Njc2MDk4OUEyQTZDCis6MTA4RjAwMDA2QkJGQjQwRkUzRjZCQUUzQ0M4MUZBQjBCOEJEQUIwNEUzCis6MTA4RjEwMDBGOUVENkRBNTU3QTYzOEZBNEJDNjlFMEJGMjBGREJEQUJBCis6MTA4RjIwMDAxQkFERTgzRkI1QzVDOTE0QTdFRjhGRTZGQ0E4REQ2RjAwCis6MTA4RjMwMDA4OUU1RkNENzc2RTZGMjJDRTcxMEY3M0YxM0Y3NEI0RkE1Cis6MTA4RjQwMDBFNTFBRDE0OEY2Qzc0NzUwQkVBMUZDNjkwM0FEQkY1NDJFCis6MTA4RjUwMDBCMjU3NTVBMkZGNzE4NzkxRkM3QTg4NUJGRUYwN0RDQ0Y5Cis6MTA4RjYwMDAzN0I1OTlCNzYzQUFCRUFDRUQ4NzhGRDg4MTEwMkRGRkI2Cis6MTA4RjcwMDBFN0IzMDYzM0U2MEZFNjQ4OEU5NzYxNUNCOUVBRUZDMkM1Cis6MTA4RjgwMDA3RUY5QkM1NERBODc5OUY0N0Y2NUYyNUZGRDc3NEI5NEU0Cis6MTA4RjkwMDBGNzI4MDc3NkMxN0VGOTNEQTk1RUNDM0ZFQzkxNzhERkRBCis6MTA4RkEwMDBEM0MxRjNGRUNDRUU4OTlEMDVFRkY5QTAzMjc2QzIzQTJCCis6MTA4RkIwMDBFMjI5QUQ3RjRCRUUzQTI2MTgzODI4OUU3QTZDMTdERkVGCis6MTA4RkMwMDAzRjdBQUM0Q0EyRkRBMzMyN0IwQUYzMDRGMTU1RjlEM0VFCis6MTA4RkQwMDA0MENGM0NFMEM3RjZDNDYyRTRERkFBMEE5OTc5ODNGODdGCis6MTA4RkUwMDA3QUJFQ0JDQUJDNDFFM0Y3ODc3MTc4RkM5MkQ5OEJGOTgyCis6MTA4RkYwMDAxMjRENUU2NzBBRkVBRTVFMTgxQjMyN0UwRUUzN0VFMjA1Cis6MTA5MDAwMDA0MkQ2NkM0NEY5QUUxM0YwRDQxNTAxM0NGMEZDNEMxMTdGCis6MTA5MDEwMDBBN0RFRUQ0RTA5Nzk2RjI1NjY0MTYwNjg1NkRDNjhCMkJGCis6MTA5MDIwMDA4RkIzQkZFQzIzQjMzQTQ3M0U3OTZDMzFCQzg3NjU3MDkwCis6MTA5MDMwMDBGOUQwRTRBQzRDQUU2OTIyM0U0ODkyMUMxODFGQ0Y5NzgxCis6MTA5MDQwMDBDMEFCOTQ1MURGODVDQUQxRUNDOUExRkQzOTRFQkQ3RUJDCis6MTA5MDUwMDAwODk1NzdCRDFFRDdFNDdDN0U4NzZDQzQzODdBN0U5MUY0Cis6MTA5MDYwMDBFNDYwNDNFODAzQkQzRkFERDcwMzkzMEM4RTc3MzBBRTg5Cis6MTA5MDcwMDA5RTdCRDU0OUZDMzU0ODBGOUNBQ0Y4ODdGNEMwNUIyMDNCCis6MTA5MDgwMDA1QjkzNDE1RTdGQTRFOTgzOUJEODREQTgwRkNBRTQyRDcyCis6MTA5MDkwMDBFQjkxM0ZGQUMxQUU5OTg3RTAwRkNEMkU2OEYxNzYzOTlBCis6MTA5MEEwMDBDODI3RjIwMzNCQ0ZGNzI1Q0FBRTgyOUNDNjA2RTJFRDg1Cis6MTA5MEIwMDAwMUZEMDA3RTgzNjMwODdGRTY1N0IxNjkyMUZCNDkwMzA4Cis6MTA5MEMwMDBGQTIyQzg2RjMwMTZGQ0YzN0U0MzE5Rjg4QkE2NUM4NDM1Cis6MTA5MEQwMDA2RjI0RjNFNDkxOUVBMkZDMUVCNDNFQ0FCMzI1NURBMkE4Cis6MTA5MEUwMDAzQzRBMURDNEYxMTRDRkIzNUYxMjVDQThEN0E0OTgwMDBBCis6MTA5MEYwMDBERkVCRkQwOTJENEYzQjQyRTQwOUY0RkMzMDkwQjc5QkI4Cis6MTA5MTAwMDA2N0Y0MjI5RjY5RkM1MDZFRTc3MjUxM0U0RkE2RkNCOThFCis6MTA5MTEwMDA5RTNGQjRGNzVEOEYyRjdDMTJGMDg1RjQ3N0Y4NDJDODNDCis6MTA5MTIwMDBEMzhERjJDNTIxOEQxRkQyNTlGQThERjA4M0M2MDcxQTRGCis6MTA5MTMwMDA1RkU4RURDNTQxNURERTY1Mzg3QjcxRjIzQUY2RTI5RDkwCis6MTA5MTQwMDAwQzIzRTk2NUJEOUREMEVDQzI4MTM4QUU3RkM3QzdGMjY0Cis6MTA5MTUwMDA3RDhBOTk5OUYzNkRFODU3OEM0MDdEODBGRTlFQjAzN0VCCis6MTA5MTYwMDAwMzc5QTMwRDlDMEZERUU5NUJBQTQ4NjgzNzUwMEZBNDcyCis6MTA5MTcwMDAwNkUxNURFNDREMzVCRUFCN0Q5QTUxRkVCMDUyRTg5RkVECis6MTA5MTgwMDA4QjFEM0M5RjU2NTcyQTdCMkRGMDY3NDlGQjczRUI3OTZCCis6MTA5MTkwMDBERjQ4RjlCNjIyQTU0QkIxQzBCQ0IzMUQ5MjAzRjMzNTJECis6MTA5MUEwMDA0RTkxN0Y5Qjc1RDVFNDU1MjkzRjNGRjQ3RTdBOTVFMDNCCis6MTA5MUIwMDAxQjhDNzM3MEZDNkNBN0U0ODUxMDc0OTAxRUFBQkFDQTRECis6MTA5MUMwMDBFREJFNUUxRjU1ODlGREYyMkFERDdFQjkyOTRFRDBGNTMwCis6MTA5MUQwMDA2Njc2RjNCRkQyRUVDN0M3MjU3MEI5MTk4NjhFREFGMzZCCis6MTA5MUUwMDAxQTFEMzVGQTREQzBCMTI4M0ZGQkJFMzZBOTExREMzRjMwCis6MTA5MUYwMDA0NkZBQ0RCOEFBRDAzQ0EzRTI0MkZEOTYyRkNGRTdGRUI3Cis6MTA5MjAwMDAyN0M1NzQ2MjdDNURGQjI1OTM3QkZDRjBGMDVGQ0YyRjVDCis6MTA5MjEwMDBCRDU5RjNDMzg1NUZBRUJENzcyNkM4NzgwQTNBODYzQTUyCis6MTA5MjIwMDBGQkExQkRFN0JBRjY0MjNDQUZBN0QzRTRCOEQwNzg0MjgxCis6MTA5MjMwMDBBMzg3QTY0NzA3RTE1QkU4RDlFMUU4NzUzRDNEQUJFOUM3Cis6MTA5MjQwMDBCMzdGQjU5RUQ1RTZEN0VDODBGNjVFQkRGRTFEMkUzRTAzCis6MTA5MjUwMDBEM0Y0RTk1MzFCMEQ5NDE3Qjk0REM0QzFCNzg5M0NFQjQ2Cis6MTA5MjYwMDA4MzQyQ0U5NzBCN0REQkZGMTc4QjAxRkRBQzZEOUREQzQwCis6MTA5MjcwMDAxRjcxOThFRDg3RDA2RjA4RTRGMzM4NUQ5RjhDNjAxRUY2Cis6MTA5MjgwMDBEQzJGNjc0QUFGODVGNjJGOEI4MUE0Qjg3Rjk5Q0NGNzg2Cis6MTA5MjkwMDAyRkI3MjgzRTE3RTk2OTg3QzIxQTQwNUVGRTJBRjIxNkU4Cis6MTA5MkEwMDA0RkVFRjUyQzQ2M0RGREU0RTkzMTA2REE0NzU3N0NCRDJCCis6MTA5MkIwMDAxODE3NEZDQTU1NjgzRjI4REFBQzUyQkVGNzYyODdEOUYzCis6MTA5MkMwMDA4RUNGRjVFRkZFNUU5NzExRTdGOTBCNzM2MEE4RjY3Njg3Cis6MTA5MkQwMDA4Nzc5NjAzRjA2RjU0Mjk5REMyMzYzNUVCRURGMEZCRUVGCis6MTA5MkUwMDAzODhDOUZCNkQwNTc4MkYxQ0U2REFDQjcxMUUzRUE0MjBECis6MTA5MkYwMDBBNEUzMTBGNDdCNTU2NzVGRjQ3OUZCOTIwRUVFMjc5NTlCCis6MTA5MzAwMDA0NEYwQkE5RkU5ODA0NjdDRUZGNDM2MTNGOTg1RDdDQjU5Cis6MTA5MzEwMDBEQjE3N0RDOUM4NUYxQTk0QUY2RkUzN0EwNjA2MTE5RjA5Cis6MTA5MzIwMDBEQzY4REVCRTEwN0QzREUwRTM5RkU4RjQwRTFCMjY3Rjg3Cis6MTA5MzMwMDBCRkNEQzRGNzczRkM0NzhDMENGRDVFNzYyRTZFQzhCQ0E3Cis6MTA5MzQwMDBDQkY1RjJGOEJCM0JDMzlENkEyNEVFQkI3MUZGN0M3NzgzCis6MTA5MzUwMDA2N0IyNTNDRDE5N0U3QzRFOUZCRjE4RjM5NURCQjZDQzE4Cis6MTA5MzYwMDA1NTI4NEUxNEY5Q0Y0MUZCMjIzQUZDRUQ5MDU4OTMxNTQ1Cis6MTA5MzcwMDBGMzY5RUQ4RTUyOEMzRjg2REJFNzI4RjYzQjY5REUxQkY2Cis6MTA5MzgwMDBDNTFCNjNDRDlDQ0VBMjdFRTk3NjIxNjNEQkNFODYzQkY2Cis6MTA5MzkwMDA5MUJGQjc5RDRENzYyMjNDQkIwNTdGNkFGQ0JFRkJDQ0RFCis6MTA5M0EwMDBFNTcwREFDRjM0Mzk1NURDMDdGNjQ3NUIxQzJGMTNCRjY1Cis6MTA5M0IwMDA3MjNFNkYxOTMxQzY4QkZCQUREQjg1M0M2QzBCRjcxRjIyCis6MTA5M0MwMDBDQzhBMEJERUNGRTBGQjE3OURGNTlFQUEzM0U5QjRERjE0Cis6MTA5M0QwMDAyRDYxQkU1MURCMjdGNjgwQkM1MDVENEUwQzIzN0UzMkUyCis6MTA5M0UwMDBCMjE2ODZFRjZENzRCMjlGNjMzQjdEOUExQTg1RjhCRTA0Cis6MTA5M0YwMDAxQ0E3RUQ0N0FBNTE5NDY3RjhGNjRBODE2QkZDNjBCQzQ0Cis6MTA5NDAwMDBFRkE4Nzc1MTNENDk2QkZEQzIyQTA1NjA3Q0IzREU0RDY0Cis6MTA5NDEwMDA2RDVCRkQ3MjZBRjdENEFGQTZGQjZCMEY0NTNFOEU3NjhGCis6MTA5NDIwMDBCRkNFQjlBMDRBMDlEMjFCOUZDNUYzRkM1MjZFRDZFOTQ0Cis6MTA5NDMwMDAxMkU0NzNGNjBENjMxOEVGNEM3RkEyNEY0NjNENzFGQkFCCis6MTA5NDQwMDA1NTU4NDc0OEREODg3MjE5RjE0Q0Y5Q0JCNDQwM0Y1NTY3Cis6MTA5NDUwMDA1QTEyODY3Qzc5RkI1NUU4MDc4RDk3RTJBMzM5MUQ5QTRECis6MTA5NDYwMDA5NEE2NUIwQTQ4NUE4ODFGQzJFMjlEMTdFM0UwRkEwRkYwCis6MTA5NDcwMDBFRDJFN0Y1QzNDRjI0MUY1QkUwQjhDRkE5N0YxRkEwRUIzCis6MTA5NDgwMDBFOTZFRjkwMjhDQ0JGMzE1NTFERTM4MEZGM0M2QjkzNDBGCis6MTA5NDkwMDBFRDYyQzRERkM0MkUxM0VEN0I2QkY5REI1QzMxQUZGM0ZGCis6MTA5NEEwMDBBQkQwM0M3MjlFQzhEQkJFQzlGQTI4OUY5QzZGODFDMEJFCis6MTA5NEIwMDBDQTgwNzA3MUZBMzlBNUY5NDkxMkU2RkJFMjREMEVBQzhCCis6MTA5NEMwMDA1Nzk4OThFNkNBQzM3QzZCNTczQ0EzRkM2OTU3NTdDMkIwCis6MTA5NEQwMDA0ODE1RjBFMDU0Nzg1RUQ3QTlFNTc1RDlERkNGRUI3NjczCis6MTA5NEUwMDA3RjFBRTkyMTdEMDU3RTBBRUFBN0VFQTM5MTBFMUZFRDAyCis6MTA5NEYwMDBGRjU5QzhGRkRCODEwRjYyN0Q0MzM4QUYxNzYwRjNFNjg5Cis6MTA5NTAwMDA1MTFFRkQ3NjBCNUYwN0Q4OUZGODc4Q0FGQkY5RjYxRDUwCis6MTA5NTEwMDA4NkU3N0U3Qjk5RjE3REM0REU5M0I0M0Y1RDYyQzg0Q0UzCis6MTA5NTIwMDBFQzAzMzhGNzQ5NjNBM0IwN0RGMUQzQzg2QzZBOEY0NjZBCis6MTA5NTMwMDA5RTQ3RkM3NDFBQUMyQUJFRjdDMzdBNTY4NTc1NjdDRTZGCis6MTA5NTQwMDBGNzZEQjQ5RjMxRkQ3RDlCODJFREUxRkEzRUFBNDc3QjJBCis6MTA5NTUwMDBCRkZFMUNCNTQ3RUFGREQ0MUVBREJGNEFFRDNCNzAxREYyCis6MTA5NTYwMDBGOUU3MTAzQzhGNkRFRUUyMDg3QTZFQzdBMjA4MTNDMkNECis6MTA5NTcwMDBEQjE5QzlCNjY4RUZDMTdBMzM1RkI4QUYxNTkzRjlFRjVECis6MTA5NTgwMDBDNTdGQkVDRTcyMTNEODNCQjM3QkJDMzQ4MUIxMTNGMTFGCis6MTA5NTkwMDA5RkNGNTRBMDdGNjhDNkE4N0ZGRjBCRENGRkRENEYyRTU2Cis6MTA5NUEwMDBBQ0IzMDA1Q0YzOEVEQTVBN0JBMEZGRTk0RjJFQUVCMzZBCis6MTA5NUIwMDBBMTlFM0QxNDBFQ0EwRUY1NDZGRjQxOTA3NDk2ODczNjYzCis6MTA5NUMwMDAzRDk5NzEwNTNCMTlGQUIxQTJFRkU5OUY1OTBBMjQ1RjUxCis6MTA5NUQwMDA1MEQyOTdDNTgwQjVBNkZDQzQzRkQzMDI3ODVDNjA3NUI1Cis6MTA5NUUwMDBGRjFCRjY0RDlFOTc2Njk2REU4NDdERTZDMTdBMkVCRjAwCis6MTA5NUYwMDA2NEE0Rjg5RThEOTRFMkIwN0U2NTk5REQ3RDJDM0VDODEyCis6MTA5NjAwMDA3RTNCQTUzRkQyRkU1MTgxNTM2MkQxNzE0NDU3REFDRkUwCis6MTA5NjEwMDA2MkY2NTNCMUMxRjJCNkNDNUU3NjBDRTk3MTQ3M0NERjFECis6MTA5NjIwMDBCRjlBMzg0RDcyMDZENzQ5RThDNzREM0NBMzk2MjI5RDk0Cis6MTA5NjMwMDAwQUNFOTUzNzYxM0JCQjIyOUFGQUFFODU5MzlBNTA5RTJCCis6MTA5NjQwMDA0QjZEQzMzRDVGNDJDRjJGODgzNzEyN0YxNjJCNTI0ODk4Cis6MTA5NjUwMDA3RDg4N0U1QzFFMzAxM0ZBQzdGRTAzRTE5NDE3OTg3ODZDCis6MTA5NjYwMDBDQ0REODg3NUEzNjU0OUE5QjlCMkQwNzk4Q0ZBRDExQjM0Cis6MTA5NjcwMDA3MTFGNkQ2MkU1ODdBNUIxMjgzRjM2Qzk4MUU2QTE4MERCCis6MTA5NjgwMDBGNTM1QzVDNjYxRkQyMzE2NDRFMUJBOUUyQkMxRkE5RDhFCis6MTA5NjkwMDA4OUFBRTQ0MEI0MTUzOUJCNUFGMUY5MjI0Nzg0QTMwOERBCis6MTA5NkEwMDBGREYxNjM2QTI5OUE5Q0EzQ0E4NEMzRjkzMDZFNDZCQTU1Cis6MTA5NkIwMDBFQ0IwQzA0NDQ3N0Q3NzRDQkQwMEZEQTI4QzI4Q0FFM0M2Cis6MTA5NkMwMDAxNjI5QUJBRjFDQTY3RTg0QTM0MUM1NzU2Q0ZDNzkyRDExCis6MTA5NkQwMDBDRDYzMjY3QkJFNjM1NkM5N0YyMEZGMTRCQkEyMjhFNzVCCis6MTA5NkUwMDA1NzZBM0IzNTM3QjgyRTBDRDY0RDcwMTdEOTY1NkY5ODMxCis6MTA5NkYwMDA4NEZDRkQ4MzUyM0JGNDc3OEM5MjE4Q0FDRjUxNUZFNjBECis6MTA5NzAwMDA5RkU5N0U3N0I4MUEwNjgwRUUzMEQ5NEI3MUJFMUQyNkQwCis6MTA5NzEwMDBDOUJFOTZGQUFFMTIxQ0VGMTk2MzU0MzE0RjU0MUVGN0FFCis6MTA5NzIwMDA0NUM4RkMzMzRBQTUyOTY3MTBGRUVDQTgwOTc4QUQ2MjRDCis6MTA5NzMwMDBFNEE1OTBGQjNEOEJBQzY0MjcyQURGQ0YyNjdGQTg2NzhBCis6MTA5NzQwMDA1MTBBRDk4QkNBRjdBNzE1NjNEQjYzRTA3RTdBRTVGQjg0Cis6MTA5NzUwMDA5NTE1NzRERkMwRTNERkNBQzVERjcxOEEzRUM1QkI5NUNFCis6MTA5NzYwMDA4QjU3NTFCRjRCNEFGQzc3N0NERjk1RUNBODVDQ0NBM0IwCis6MTA5NzcwMDBDRDRDRkY3QUFFMTJFQ0ZGQURDRTI0RjlDRjE1NzlCQ0ZCCis6MTA5NzgwMDAyMjQzRTZGQTY5MDBGRkEzMDdGODNFNDQ2NUI2MTQ1Mjg3Cis6MTA5NzkwMDAzNzM3MkJGRjU0NDgzREE4NkJEQTE3MjFGREI5QTU5NzQxCis6MTA5N0EwMDA0MkVBNDNFNzU1N0UxREQyNUYzMDRGQUEwQTFFNUY3QTE4Cis6MTA5N0IwMDAyMDlGRUM2QkJFQTg1RkQyRjI0QjQ1ODI4NURFQTlDRjFECis6MTA5N0MwMDBBODJBMDVCOTNDMDBFRDAzQTAxRjhBN0E0NURFNTVFMUMxCis6MTA5N0QwMDA3MTc1MDZGQzQzM0Q1ODZBRDNFNTc3OTk0QUZCRDkxNTY0Cis6MTA5N0UwMDBERDdDREZCQTNDQ0U3ODNBRDgzRTU0Qzg0RjcwN0Y0MTFBCis6MTA5N0YwMDBCN0ZFREMwMzQ2QjI5M0I5RDEzMkU1QUIzNEY4MkE0NjYyCis6MTA5ODAwMDA4NjNFQUZGOTVGMTUwMkNFMUQwNjc3NTMwQ0U1Qzc5QzY3Cis6MTA5ODEwMDBCREU4N0Y2OEYwNkJFRkQ3RTBBRTkwRUYyOUE1RURCRjE0Cis6MTA5ODIwMDBFQkMwQUY4NzE3MDAyNUZGNEQwRkM3ODE3ODExODc4MEU4Cis6MTA5ODMwMDBCRjQxRkU1OTM3QUY0QjgzNUZEQzUwNzY1QkYzQ0YyQkQ0Cis6MTA5ODQwMDA0MTRGNDUwN0VCMjk5QjE0ODdGNTc2QzNFOTI5NkRERTY3Cis6MTA5ODUwMDBFMUZDMzA2RERFNjU3NjE3M0RFRkRDRkFEOUQxNDIzOTk3Cis6MTA5ODYwMDBBODlGN0EyQTM2MjZCOEZGREE2N0VCNDNFRUM3OUZBQThECis6MTA5ODcwMDA4QTBFRUU2RkZBQUMwQUVGNEY1N0Q0NDYxQkYwRTM0MTY1Cis6MTA5ODgwMDAyNjM5M0NDODlGM0RBQTgyRkJDRjI1Qzc5QzRERDg5NjYwCis6MTA5ODkwMDA5RDc0NjM5OTI5OUI3MUM2RDM4NEVERDRGM0RFMUUzMzg2Cis6MTA5OEEwMDBBQ0VCOEUwQzU5QzVCODVERjMzRkY0RjA5QTEzNzgxQ0ZECis6MTA5OEIwMDA3MkYwQUE2QUM1RkREMzFEMUVENThBRkVGQjhFMjc1NDAxCis6MTA5OEMwMDAyQkZBMUYzQjlDQUMwMkUzMzE2NzlBNjEzNUZBRjNDRTY5Cis6MTA5OEQwMDAyQzVFNjc3ODU1RThFMTZGRTJGOUYzNUE3QjVBNzE3RkE1Cis6MTA5OEUwMDA4MzdBMTFFQkMyRDEyN0E4RkREQTRGNzVFMDA3RDFBRjFCCis6MTA5OEYwMDBDQTFFRUM1NzFENTRCQzM2N0NERkMxMjdCQ0I2RTA3REM4Cis6MTA5OTAwMDBDMjFCRjVBQkZFOEMzNjNBMUVGOTZDNEU4ODdDOTY1ODFECis6MTA5OTEwMDBFRUFFMEE5NkVGMzJGQjkyOTBGQjlGQzZBOTA0RkY4QzM1Cis6MTA5OTIwMDBBNDg3NDNDNkREQTEzRTEyRDIwNzdGMzEwM0ZEOTE0NkQ1Cis6MTA5OTMwMDAxM0EzM0E1OThGODFEN0M5RUFGMUY4QThDMEEzQzM2NjI3Cis6MTA5OTQwMDA0NzM3ODYxOUUzNTRBQTZCRDM4RjczOTQ3MEZDRTlBRjQxCis6MTA5OTUwMDBBNzI3RjBCODY4MjNDODBDQjZGNzI0NzBGOEY0NzVCMURGCis6MTA5OTYwMDBGQTNFQzQ3QzBCNzEzRTk4MzkwOUY5REM2MTM1NUMwMTIzCis6MTA5OTcwMDA1Nzk3MzkxMzkyRUVBNDdBRDkzQ0MzQTM2OUQwQUY0RTVFCis6MTA5OTgwMDBDOEUyRkRBOTg2OUQ1ODFGN0I3NzQyMzZFRkRGNkFDODgzCis6MTA5OTkwMDAzMzgyMUZGMDJCMzZGRTRFQUMwN0FGMEQxMzc1OUQwRkIzCis6MTA5OUEwMDAyNEQyN0U5ODE2REYyODg2NTMyRjJFQzYzODczOEY5MUM3Cis6MTA5OUIwMDA2MUZFRkUxOTEzRDhCRERDQzBCRUI5RDVDQ0UzNTJBQkY1Cis6MTA5OUMwMDA4OUQ3NkQzRjk1N0FGNDI5RDQxQjZBOTg3QjdBMDJGOTdFCis6MTA5OUQwMDA1MUM1MkFFMkVGQkNERDQyNzU5RDhGRUQyRTRCNDRGQTU2Cis6MTA5OUUwMDBERjkzQzBGMzVDNTkzQkE3MjZBMTdFRjkxN0JDN0Y1NkQ1Cis6MTA5OUYwMDBDMkM0RTFERjhGNzVCRTM4Q0ZGOTFENTlFNDdGNjdERDQyCis6MTA5QTAwMDAwQ0U4OTUwMkY4ODdGMDk4QUU4NzQxOTg0MEU3MjU5OEQyCis6MTA5QTEwMDAzMzA5RjM2QzhERDEyNjlBRTc5RTA0Q0U3RjM3REEwRTk4Cis6MTA5QTIwMDBBQUZCOEQzMkFDREUwRUVERkQ4MkZFMEZFMDdCMDk1RkZFCis6MTA5QTMwMDBGRTUxNzM3MDYzQ0VFRTFGMzU3NzNDRUYyMzdENjUzOUExCis6MTA5QTQwMDBENzhGN0VBQ0ZGM0IxMUI0QUZDMjQ2RkE2OUZGRTVFM0E2Cis6MTA5QTUwMDA3QkIyMUNFODlGN0UxMkNFRjFCN0QwM0JCQUIxNEZDNUE2Cis6MTA5QTYwMDBGQTBERUY0RDU4MkY5MTkxRThBRTQ1M0MyQzMyN0I2RkFCCis6MTA5QTcwMDAyMUZFQjFBRDhFQzBGOTZGQjQxRTc4RjA3QjIxODAwNDU5Cis6MTA5QTgwMDBGQTU0NEZFMUY0RDFERTBCMzhCNUEwM0RGODU4OUMwM0YxCis6MTA5QTkwMDBEMUUwODBGN0ZGMDBGOTQwODM2NzAwMEU1RDVEQjg5NjY2Cis6MTA5QUEwMDA2N0FFRkJBMzgxRjIwQzc1MTJFODNERThFRjNDQzkxQ0UwCis6MTA5QUIwMDAxRTk4RTdBMkU2QUY4QkJDMjY2RTQ1RTE3QkE2MUM1RTM2Cis6MTA5QUMwMDA1QTYyODMzNkJGNkQyNThGNzM3Qjk1OTAzQ0Q3QTRFMzk0Cis6MTA5QUQwMDA4QTdFQkY4M0VDRDY1NEVENzk1RDlFNzFBQTg4NkJBNzEwCis6MTA5QUUwMDBFQUUyREExNzEzODQ5RDQ5NjZDOUMxNzk4MDM1MjI2RThFCis6MTA5QUYwMDBCOERDMzMzQTBBRkQ0Q0Q0NTEzMkUwRDVBNENBNkM3MkJBCis6MTA5QjAwMDA0QzQwQ0U1QjIxRUU2NzQxNzFCRkM2NjdFMzhGRDlFRjUyCis6MTA5QjEwMDA0N0I4QzcxRjYzRjc5MTVERDdFNjFEQzgyRjcwQkM1Q0JGCis6MTA5QjIwMDAzRUNFRjEzMkExMkZFM0E3RDNBMDZGRUMzNjMyQUYxQUFECis6MTA5QjMwMDA1ODRGMjEwNzk1NURDNkZGRTA3OEJCQzk4Qjc1Q0IwNUYzCis6MTA5QjQwMDAwNzdFOTlFNzgzNEJFNjI0MDM1MzgzRjAxMEE2ODYzMzAwCis6MTA5QjUwMDAzNTQ4MkY1QTMzNjI0MkZBQjI4NjZGNjFDRkYzQzRGQ0E0Cis6MTA5QjYwMDAxMThFRTQ5MDc5RjZDNDk0NzdBMzdEQ0ZCMzJEMjdGQkIzCis6MTA5QjcwMDAxRTM1Nzk3NEM4M0NBQzQ3MDlCMUYzQjAyOERBQkY5Q0Y0Cis6MTA5QjgwMDAwODQwRkQwQ0YwNUE3MDRDMDlCMUU3OTNFMjNDQjg2MjEyCis6MTA5QjkwMDAzNkY5QTRBMkIzRkZDRDMyQ0E0MUUxOTlEMEVCMDc4NkQyCis6MTA5QkEwMDBBM0NCNzBGODYzMzkzRjQ1RkZFRTFGQzU1RkI0MzMxNDk0Cis6MTA5QkIwMDA3RkIxMTVBMUY4OEI3Nzg1RTIyRjcxNjEyODlFNDZCODk5Cis6MTA5QkMwMDA0M0YxOTJCMjdDNUNDOEZEOUI1NkU3ODZGNDZGN0VCQzg1Cis6MTA5QkQwMDAzMDY0N0MyQTE4QTRFMDdFREFEMzMzNDNDNkRGRDIzQzVCCis6MTA5QkUwMDAzN0E0M0Y3NkMzQTI5MEYxOTlERUE1MjFGN0IzNUU1RDVECis6MTA5QkYwMDA3MTQzRjQxRURGQjIyNjY0OUM5RURFQjdCNkZEQUY5MEMzCis6MTA5QzAwMDA3OTM1N0E3QkUwREZCRjgyREVFNkM0NTA3QUE3MEFGREIxCis6MTA5QzEwMDAxQUVERTRGNTY1RkQ0NkRCRDMxMkU4MjM0QzEzQTE1RTkzCis6MTA5QzIwMDA4QjZFN0ZGNzZCQ0M0Mzc4OEE1NUFBOUZGM0NDNjRCNEQ0Cis6MTA5QzMwMDAwRkZEODJFQzkyNTAwRkE1QzAxNDg2MzRBQTVGQTdGQURDCis6MTA5QzQwMDBCQjFGMUIwQzIxRkJFMjg5ODlEQ0JFMjcyNkYyN0NDREUxCis6MTA5QzUwMDBDRjRERkNEQzUyMEFGODhGNjQ4NzBDMkMxMDJGMDMxRUFBCis6MTA5QzYwMDAyMjMxNUVBNjc4RkFDN0NGNjBCQ0RDMTRERDk3QTE0MjMyCis6MTA5QzcwMDA3QzZDQzZGRTREMDE3REI5QzhBQzM2RjYwMTNFMjZDOEU3Cis6MTA5QzgwMDA1QzFGODI5RTRDNEI4NEY5M0Y5MTlFMzA3MjNGQzI2M0IxCis6MTA5QzkwMDA0NDNGMjJDNUMyM0M5MUI5NjQzRjI4N0YxQ0NERTIyNEQ5Cis6MTA5Q0EwMDBBQ0M3OEYwQUU4NjlGNTFBMTA2QkRGOEEyQzNBMDdGNTAyCis6MTA5Q0IwMDAxRTQyODJGRUFGMjU4NkVDRThERDlBN0U1QTlFNDlGQTY2Cis6MTA5Q0MwMDBFOUIyMkRENDBGQkJGQzQwMUE1RDNGNzFBRjk5RjZGQjkyCis6MTA5Q0QwMDA0Rjg4M0E0NDZERkRFNzg0REVGQTUzQkQ4NURBRjNGNTJCCis6MTA5Q0UwMDBGNjEwM0RCNjdDRTNGQTA4RjQxRjRGNjQ3MDdGNTFCQjU5Cis6MTA5Q0YwMDA1RTgyNzg5Qjg4QUQyQ0VDOUFDNThFRjlBQzdCQzAzODFGCis6MTA5RDAwMDA0NzAxQkU1Nzc1Rjc0NTJFNjJFNDM3MTZFM0JBNkIzNzQ1Cis6MTA5RDEwMDA1RUI5Rjc0REU4RDcxOUZDMDlEQzNFNzg3OEJEQ0NDN0IxCis6MTA5RDIwMDA4Q0ZDQ0ZFQTZGNTg4OEZGMzQzNzkxQzdFOTczQzVGQ0M0Cis6MTA5RDMwMDAwQkEwQjEwMzlFMTYwMEZFQTNCMTdENzc1QTM5RjIyNzFFCis6MTA5RDQwMDA1Q0E3RjM2OUIzQkIxOUQ1OUZDQzcxQTdEMjNFRTM1MTkxCis6MTA5RDUwMDBFNkY4NzAxNzgwRjg5RDQ0OTVFMDlDQzc1Q0I0NUZGRkZGCis6MTA5RDYwMDBEMUJEQUIyMjcwRENDMDdDREEzQ0MwMjhFODZGN0MxQzIzCis6MTA5RDcwMDBFRDMxMjY2MERDN0YxQkFGNkY4MEY3NTlGMEJBRUI5RUE4Cis6MTA5RDgwMDA5NDI3RDEwRTY5RUZGQjg4QjkyRjdDODhGQkREQ0M0MThECis6MTA5RDkwMDBGMzZBRjMzMzE2MTNBMjlGNzYyQzVGRjk2OTJDQkM2RjFDCis6MTA5REEwMDBDRDAxMDNFNTEzRDY3NDk4MjlFRUVBNUZGMUQ3QUQyRjA0Cis6MTA5REIwMDBDMkZERkI1MkZBNkU0MkJCRkNDOThBNkZDNjIwM0ZEQzczCis6MTA5REMwMDBCRDAxRjQxMEFDQjEzMENBRkQ3MDYyNTA5QzcyRTI4MUVBCis6MTA5REQwMDAyQjExNzgxRkVDRUJBNjE3RDEzODZFMzY1MzdERUYyNzg5Cis6MTA5REUwMDAyQjM2OEYwOUY2NDcxRjREMkNBQUM1RTdEOEU0MUIzQjNECis6MTA5REYwMDA2RjU4RjI3QTY2MjJENTYzMDk3RTdBNThGMEQzOUFEN0UzCis6MTA5RTAwMDBDNjkyMUZCNTI2NjI4MDlGNzg3RjEzQUZFRkQwRDZGMTQwCis6MTA5RTEwMDBBMUUwQzcxNUFGN0Y1RDEwN0NDRTc0MDdGMDkxM0E4NjQ0Cis6MTA5RTIwMDBFRjZCQTkyMDUzM0I3QjJFRTdFMEZENTcxNDc3MTNDMjVECis6MTA5RTMwMDBENzc5RjU3NDI0RjY3N0JFRjczNzgyOUZDREJCMzE3ODlBCis6MTA5RTQwMDA1MTA2M0QwNTgxRkQ2NUVERENFNUMyRjZEODNDQTQzQjNECis6MTA5RTUwMDBDODU5MzNDRUJGRTgzN0FGNURGODFERTJBNzYzRjNBNjVDCis6MTA5RTYwMDBFRkUzOTgxQjNDN0ZDOTg0N0Q3MTA4M0M4MDdEQTFGODlECis6MTA5RTcwMDBBMDlGODVGMzczMUQ0MjhGMkFCODgzOUU4NkU3OTkxQ0E1Cis6MTA5RTgwMDAyQUYxQjM5MzFEQzI3RDk3QzYyRTAzQzNCQTk1NDhEQzUxCis6MTA5RTkwMDBCNDA5Q0FCMzQ1Q0EwNkNEMDgzOTJENDlBMDlGODU1RUNECis6MTA5RUEwMDA3OTI1RjFFNDlENERFNEU3ODdGQTNERjk2RkFGMDhGMUJDCis6MTA5RUIwMDA3NzVDRjA4RkZDOUQ5N0RDOEQ5ODA3QkFBRURGRTMzM0JCCis6MTA5RUMwMDAyQzMxNDVEREI4RkYwMzgxQjA1MzJBMTA1QjM4RjA2QkFECis6MTA5RUQwMDA0QjE0RkIyMjQyMEY3N0EyMUM2MUZEM0ZDRTg1Rjk3QTFECis6MTA5RUUwMDA1RjM4M0Y2NzBDQTYwMkY1RjgwRjYwNERGOEIwMjk0NUMyCis6MTA5RUYwMDBCNEQyQzUwQzBCRThDNUJEODk3Rjc4RTY2OUQwOTM5NkNFCis6MTA5RjAwMDA3NEJFNUVFQzM3RTJERkREOUNERjA2RkNBQkI3Qzc5MUM5Cis6MTA5RjEwMDA5RTYyREZDMkRCMTAwRjIyNUZBMUE3NTMzRUM4MDc4QkYyCis6MTA5RjIwMDAwRDkyMzNGMUJDNkZGRkRGMjIzMTRGQkIzNTQ2N0QxRkYxCis6MTA5RjMwMDBFOUUwM0YyMEQzM0U0RDk4RDI2NzhBMUUyMjJFN0IxMzQ0Cis6MTA5RjQwMDBGNTlFODlGQjRENTQ2RkRFQzZGMzgxMTZENUM5MzAwRUUwCis6MTA5RjUwMDAwOEIzREIyNzA0OUZCMzZCMTdGQTZFRDVGRTRGNDY5OTAzCis6MTA5RjYwMDA4MDBFMTcwQzNEOTFEOTMwN0ZDREFFMUQ5MUU4QzZERjM0Cis6MTA5RjcwMDA2Qjc0N0Y4QTdDQjdGMkM0MDcwNTc2M0FDRkI2NzExNDRBCis6MTA5RjgwMDA5RDAzRjA4REE2QkE4M0YxMEFGMzI4Qjk4M0UxQThEQjFCCis6MTA5RjkwMDA5MDRCQzZCODc2MDMyNUUzRDlGOEY2QkM4NzUwMUZENTk5Cis6MTA5RkEwMDBGOUY4M0E3MTZFMkNGQ0NCNkM2M0Q0QkZEOEQ2MTg4MzA5Cis6MTA5RkIwMDBGM0Q1RkRCNjIzMTlFNTY3NzMzQzhGMTM1RkJGM0E4RTY3Cis6MTA5RkMwMDAzRkFGMzAwNUM3N0Y5OTE4MkRGOEQ5NkJDMDM4NjNCMzAwCis6MTA5RkQwMDA4ODRGMkU1RTM1RDAzOEVERkRFM0RCOEE2NDNCRjA0M0RECis6MTA5RkUwMDBCNkFGNzkyRkM1NDNFRDY2MTVFOTFBRjYwQUUzNzg2ODJFCis6MTA5RkYwMDAwRjIzMzlBRkVCOUNDMTMwOUZERjFGQ0QxQzEyRENERjdDCis6MTBBMDAwMDAxQUVFRkYwMzlEMzNFQjMwQUI5ODFGMERCMzM3QjMxODM3Cis6MTBBMDEwMDA5ODdGQUJEODBGQ0QwNDhFQzJGMzRBREE3NUVEN0Q2MTFGCis6MTBBMDIwMDBFRDNGQzU1ODAyRjk4MUYyQjQ2MTRBMzNCQkNEMTY4Q0JECis6MTBBMDMwMDBFNzA4QzI3MzNDRjI1MzNDQkVDNzY3QzBGQzg4RkYxNkZBCis6MTBBMDQwMDBDNjVFMjZCODAyNzAzMjdBQUYwNjY3MjZGOTczNUI0RDlBCis6MTBBMDUwMDBGRUIzNzg3RTA1RTBCMjIzRkQzMzE5ODc5M0I1OEY1NUEzCis6MTBBMDYwMDAzMUJFMEZCMzNCNjkxRDYxNzZENUUxOTEwNkMzNTU5N0FCCis6MTBBMDcwMDBDM0JDNjhCRjdGQkM5NjBEQzgyQkNBNkY1RDc4QTA2RjRDCis6MTBBMDgwMDAwMTE5RDgzQTlBMDlGOUI2M0Y1QjNBMkRCODBGOEE2NDlDCis6MTBBMDkwMDA3MkUwRjk3MTFCNjI5RTZEMUE0OTcxODM0N0M2MzgxNkNBCis6MTBBMEEwMDBEQTg4MTg1Q0E3Q0FDRjNCNjM2QTI4OTdFMzAxRjdDNTMzCis6MTBBMEIwMDBBRDE2N0U3RjYwM0NGMEI3MERGQjM2M0VDRTExNjVCNzI2Cis6MTBBMEMwMDBDRTk0NDg0RTI4QUY1NzJCRTRGRDMxQzk3N0Y2NzY5MEYxCis6MTBBMEQwMDBEM0JGRjhGNkU2QTgwMDRCQ0RCQjdCODg0RjU3MUFEQTAyCis6MTBBMEUwMDA1RjFDMEZGNzM3NUFEQ0Y5NDk4MENGQjc0RTFBRTgxQ0NFCis6MTBBMEYwMDBFOTlGNUUwQkYzNTY2MkZDQjg3QjYzODI3MzA4RjlEMDZDCis6MTBBMTAwMDBDRkZGQzNFMzZCOUY0RjQxRkFFRjk2NTRDQzlCRjYxQkY2Cis6MTBBMTEwMDBGREEzMTBERURBRjZDRjRENTQ4RkQwNzY4QUVBOTM4RTA3Cis6MTBBMTIwMDAyNEI5OURGODlFQzk2RDBEQjQ2RjNDODUzNUQzQkU3MUMxCis6MTBBMTMwMDA5NjM4N0ZERDkyQzRGNUM3RTU2MzYzNUU2RTA4QzJGRkEzCis6MTBBMTQwMDA4MzQ5REMwRjYzN0VGN0NEMjgzN0VENDIzRTNCRDEyRkFDCis6MTBBMTUwMDA4MTc2OTdGMDhGNzY3NUREOURBNjA2RTVGRDFBRDhERTJGCis6MTBBMTYwMDAxNEM0Rjc1QUY2MzZCNURBRjU3RTJGM0ZDRjk4RjU5MTNECis6MTBBMTcwMDBFNTNFNjcxMEZGQjk5M0I4OUZFNzE2RUZGMzI3QjkxN0NECis6MTBBMTgwMDAyNEExREM3NjlEMzY0NUFBNzg1RUE1NjUxNERBOTExNjgxCis6MTBBMTkwMDBGMDlGRUM0M0UwNjU0MDZFNzU3MjU0QTdGODREMzhCRUYxCis6MTBBMUEwMDBFRTFDM0Y3NzBBNzQ2RUMyRkFGRkNEMUZCNThENUIwMkJECis6MTBBMUIwMDBENzc3MDFBRUIxREVEMzczQzI0Qzc1OEZCQjhDQUUxNEIyCis6MTBBMUMwMDAxQ0RGRjBFMTU3MzlBOEI3MkExMDY5RjBCRkFGM0E1NjQzCis6MTBBMUQwMDBERThDNzgwM0JFMkYwRTQ3RjlEQUNFNDg4RjY5RjI5OUVDCis6MTBBMUUwMDA4REYyMDlDRjY3MjNERkU3NjMzRjkzRjRGMDU2NTMyRkQ3Cis6MTBBMUYwMDAzRkY3Qjk4QjlGRkIwNEJFMjczOTAwQkVCN0EzOUY5MEUyCis6MTBBMjAwMDA2RDA3MzlBMEU3Qzc5MjdDNkZFRDM1RDBGOTU0MEZFOEEwCis6MTBBMjEwMDBGMTVCQTg1RjVDODVGREFEQkRBNTc2OTI2RkNDQzNFNzExCis6MTBBMjIwMDBBMjlDRkFGNkQyM0MyRDEwODMyMEU5MjRFNjBBRjYxRjAwCis6MTBBMjMwMDBEQjEzMjM4OThGMzVGRDc4MzA5MUVCRkY5NjBDMzUwQUJGCis6MTBBMjQwMDBFQkZGQURCMjFDMjIxNzQxNzY5MEY3ODU5REVDREQ1MEY3Cis6MTBBMjUwMDBGQ0VDMEJEM0QwREUwOUJCMjBGQzI3NzY5Q0VCRjk0NzQ2Cis6MTBBMjYwMDA4NUFENUFGMzRFRTFFQzJEQjBDRTM1ODdFNTgxN0E2RTlGCis6MTBBMjcwMDBGNDU3N0Q4MjRGRjYwQUZGMTVFRDg0OUFDN0VCNjdGMDFECis6MTBBMjgwMDBGQUM0MERCQ0NFQjVDMEI5QkEwNENCMzgyNjU3MzRFRkVBCis6MTBBMjkwMDBDM0I2RDBENTUyODI2NzhFQTcyREVDRERDN0NGMUVGMzkzCis6MTBBMkEwMDBGM0UzQUQ3QkVGQzhDMjdERUFGRTEzNjY4NkZCMjRBRDA3Cis6MTBBMkIwMDA3RkYzRkZFMTc1QzBDMzc3M0IwMUZGNDNEODI1NTgwRUZDCis6MTBBMkMwMDBGMTFGNThFQTE0OTYzNEY4N0VCRkE0RTk4RkY5OTUyODU3Cis6MTBBMkQwMDA2RjE3NUJFNTQwMUZFQzYxMkQzMDM4RjY3RjlENTRGNTFDCis6MTBBMkUwMDBBQzA3MDA0QjFCRTE3QzFENTlBMjMwRDk0RDZERkY5MThECis6MTBBMkYwMDBCRjI1QTAyREQ4NzU4Q0ZCNERBRDI2NjcxNkYyNEZFQjEwCis6MTBBMzAwMDBFOEQwRjNGQTVBRkI2MjEyM0ZFNzlDNkY2NjQzRTYyNUZBCis6MTBBMzEwMDAwRjA5QkIzN0M2QzM5RTQxM0VBQTZEOTVFRDVFQTBGQkZCCis6MTBBMzIwMDA4NTU2RDk2OTAyRkZFNkFDRDM5RDgwNjc2NUNFMzFDRkYzCis6MTBBMzMwMDA4MkE5NjhFNzQ1RENBODdENEY2NTE5RkEyNzYwQTcxRTRBCis6MTBBMzQwMDA3QzYxNTAxRURGODA3Q0Y0NTBCQkM0N0UwNjZCNUVGRUQ5Cis6MTBBMzUwMDBEMkQwRkIwQTM1NjI5RTg3REIzNkVFNEYwMTNBQUU3OEVCCis6MTBBMzYwMDAyNTc0NUM4REE4MTNBQkQxRjkyRjg3OTI0NDdDOThDNkQ1Cis6MTBBMzcwMDBEMkQwMkYwMUZFMjFCRDYwNTQ1OEI3MTlGOEY1QzE2NDQxCis6MTBBMzgwMDA3NzA3QzYxQjlCQzU3NzBDNDA3RjkyMUM3NjA4QkVEQzA2Cis6MTBBMzkwMDAyQUVBMDRGQzVCMjVEQUQ3Q0I3Q0Q1MkIxQkUwRjk0MkZCCis6MTBBM0EwMDBDNTJCQTM5RDYyRDBFMjNFQzE2NEE3QkIxQ0YxMEJFQkExCis6MTBBM0IwMDAzRTg2RkIzNUNCODUxRTVDQUVGOTY1NUVCRTlGMDFFNjMxCis6MTBBM0MwMDA5NkZDQjIyOUNDREIxODg5RUI3RTU1NzJGODU0RkM4RUQyCis6MTBBM0QwMDBDOEEwM0E1QzVBNzc5RDU4NzdDRDg2MjNGQjMxOEM1QkI5Cis6MTBBM0UwMDBENTEyM0FBRTRFQUNCQjRFQjc2RTZENUZGQkNGNDlCQURECis6MTBBM0YwMDA3M0M4MzdCODZGRjE2NzIzRjcxMzNFMTBGMzY4RjdDREQyCis6MTBBNDAwMDAyM0I4M0VBQzA1RjA5MDZFMzU1RUQ5RUJFNTdFOUQwRDMwCis6MTBBNDEwMDBCRkMzNzNCRjgwRjc3RTQxRUYzQUU2MzNBNUMwQjg1NTlFCis6MTBBNDIwMDAyRkYwNzVCMjY3NDNFQjNGMUY2QzdEQzQ4NEYxOTU5RTlFCis6MTBBNDMwMDAyRjk2NkYzMTkyM0YwQTg4MzNBMUJGQThFNzhCMTU2MjMwCis6MTBBNDQwMDBERDJCNzRFQkFFNzU0QjNBQjhCODlGM0MxOEFFOTYwNTUxCis6MTBBNDUwMDA0OEQ3NTU1QjhDMENFQjExRjU3MDJENkI1OTUyOEU3Q0U3Cis6MTBBNDYwMDAzNjk4NUYzOTVENTY4OEY5MDI3MEFFQTY3MzdDMzcwQTVDCis6MTBBNDcwMDBFN0E4MTE4MjJGQzdCMTcxNDQ5NzhBRDgxQkEyOEJERTNGCis6MTBBNDgwMDA4RkREQkU3RjlDMTVFNUZCNzJGNzY4OEFERjM1QkFFQjdFCis6MTBBNDkwMDA5RjJGMTc3RUYwOEMwRDhDREEwQjZEMjVENkYxMThBNzQ3Cis6MTBBNEEwMDBGNDE4MUM5MjRBRjE1NkU0NzhDMDQ3NUU4N0NDMkFBMTgyCis6MTBBNEIwMDBERkRGOUVCNkRFMDM3OENGM0Q5QzVGODVGMTdDREU2MUY5Cis6MTBBNEMwMDAwMzlENzdEQkQ5OUQ0RkZCQzA3OTA3RDI2M0QzMjgxRjRCCis6MTBBNEQwMDBFREEwRUZDREMwM0M2NDNGRkI3QjcyRDdFM0I5ODBGRUJCCis6MTBBNEUwMDA5RUQyN0M5QzU3ODI3MTY4RTc3Mzg1MUQ2OEU4QzlCNTY4Cis6MTBBNEYwMDAwNjlGRUYyRTE4QzFFM0Y1QTc5MjNFRkIzMUZBRTEzMzM4Cis6MTBBNTAwMDBCNjFCRTk3Q0MzMENBM0ZGM0RBQzlGREFEOUFERDBCRTJFCis6MTBBNTEwMDA3NUNERTFBNTZCQzM5MEFFQUY0OUI0NkZCREJGNzc0REFDCis6MTBBNTIwMDBEQzYyRTRBQjc2QTMxREY3QTFGQkRCRkY2RDJGREVGNzRBCis6MTBBNTMwMDA2QzkxRTg3QjEyNzUxRDY1NTk1QkExOUZCQjMxQ0YxMUYyCis6MTBBNTQwMDA3Q0RFMkIzNzVBMjVGOEQ4MDgyQkM1QzMzMzZFMzI5MkUwCis6MTBBNTUwMDA1RDNDOUY2Q0ZEMjVGQTM3MkI5QzFCNDk4RUNGRUZEOUI0Cis6MTBBNTYwMDA2OUEyRkFCOUFEMTI0M0QzQkYzRjY5REYxQjg4OEZGM0VECis6MTBBNTcwMDA2RjFFMzFBMTkzNUREMjdBQzRENEY3NzdFQ0ZEMDUyRjFECis6MTBBNTgwMDAwNEZFMTQwNzM3OUIzMDRFNTlCNTUxRUJGNzk5OTA0RUE2Cis6MTBBNTkwMDAyRUUxRkZENEJFNzI4QUZBMkJEQTI0RDIzMzJCNUU5MkRDCis6MTBBNUEwMDBFOTNDRkJCRThFQjc0Q0M4QzdCNTVCMjQ5Njk4MUE3NEJECis6MTBBNUIwMDA3RjgzMTRGMjFEODRBNThDRjNDMTUyQTE2NzU2MzJFRjNDCis6MTBBNUMwMDA1M0M5MzA2RTY1MzNBRjIzNjA0Rjg3RDZFNUFFREMzMkJBCis6MTBBNUQwMDA4N0JFREJCNEFDNzk2ODdERjNCMEUwRUI4NzMwMUVCQzlFCis6MTBBNUUwMDAxNUJGODMxNDNBRUU2MUVEQkI1QzNBN0U3RTVDRTNFNzE3Cis6MTBBNUYwMDA0Qzk2ODlGQ0ZDNTU5MTFBOTUwREQ3QkYzQUIyRTJFNjBDCis6MTBBNjAwMDBBMUNFQjFGNzA4M0JBQ0Q5QzFDQjNFMDNEOTExRkRCOEZGCis6MTBBNjEwMDA4QjZENTcwOERFQkE5RUNCMjZCNDgzRTVFRDk3MDhFRjI1Cis6MTBBNjIwMDA5NUVENUQ1NEM3NzExNzczRDcyMDlFRUU2QUI3REE1MTY2Cis6MTBBNjMwMDA4RTJCRkJCODVFOUFEOTZFRjY3QTI1QkNERkQyODRGNEY1Cis6MTBBNjQwMDBFQ0VGRTQ3NThCOUUzRDEyRjkyRjlBQkU3QTQ4RTBFRjRECis6MTBBNjUwMDAyMTgxQkY4NzQwNDFBN0U0QTIxRkNCRTNERTg3MzMzNkM5Cis6MTBBNjYwMDBFRThGODFGQkI1RTI3QUNEODE3RDkxRThFRkNENjQ5N0U1Cis6MTBBNjcwMDBFRTQ1N0FDMDdCMThCRTg3QkQxNDhBRTczQjE5ODdFMzk1Cis6MTBBNjgwMDBDRTJEQkNERTU5NkZBRkZBNDc2NENEQTZGQzIzQzQ5RDI2Cis6MTBBNjkwMDAwODRGQ0Q5NjUwM0NEN0VBRTJFRDc1MjNCODdEREVBNDk1Cis6MTBBNkEwMDBDMzczQTU5RjU5QjMxMTBFNTU3Njc4Njk3NEFGODJFRkM1Cis6MTBBNkIwMDBFRENFOTEyOEJGREFBREE2NDUwREI1RkZBOEI1RUYwOURGCis6MTBBNkMwMDBCRjU5RUJDRjE2RTdBQjVCRUNDREI2RTAzOEQ4OTRDQ0Y2Cis6MTBBNkQwMDBFREZGOEEyOUIyMDdFOTM0MTAzRkE0RUZDQjUxMEQ4MTc5Cis6MTBBNkUwMDBGODAxRTI4NkRGOEM4OEU3NzEwNDE2NzRCQzNCNTI2NjgxCis6MTBBNkYwMDA3MTcxODFGOEUxODc0OUVCMkI3M0ExNUZCNzg1Q0JGOUM1Cis6MTBBNzAwMDBDNUM5MzAxRjdFREY0QjYxRTQ1RkQ2NkQzMUQzMzlDMEUwCis6MTBBNzEwMDAzQUEwM0JDNTA5RURGQzFDODNBQjVEMkE0MzdBODNGRjVECis6MTBBNzIwMDBGREVFODg4OTc4QUU4NjE5RTM2MERENzNEQTM4OUZDRjU1Cis6MTBBNzMwMDAyOUJENDQ3QzcyMjA5REFGRjdCMkEyMjYwRUU1OEY2QjM3Cis6MTBBNzQwMDA3RTM4OUVDMzUyODNDRjNGODA1Q0UyRjhEQTc2NUUwRjlDCis6MTBBNzUwMDBENEJBRjdFQjUxQTlBOEQ3M0FGRTNBNkEwOUI0NTc0NkRBCis6MTBBNzYwMDBGMEY1NkI3RTlFMUZGQ0JDRDFEQ0NGMzk4NkZFRTc4MzAzCis6MTBBNzcwMDA5QURDRDhGOTNFREE4M0MyQ0UzMEE5ODlGOEJCRDZEOEE0Cis6MTBBNzgwMDBGMjc2MENGQTRENUJGOUJFM0REQjZEQzQ2RjlDQjE4NjcxCis6MTBBNzkwMDAwRjVFNkY4QTgxNzU1RjdDNURBMjdBMzQ3Q0ZFMDlFMDcyCis6MTBBN0EwMDBCMzhCNEI1QjRFQTMxRkZERDU1NjBCRjk4RjBGODI4RkRBCis6MTBBN0IwMDAzODNENzdCMDNDNkE3MkFCN0Q3N0FBODFBRDI1N0Y3MjU4Cis6MTBBN0MwMDAyRDZCQTI3Njk1RTBFMzhCNkQ4RDI2Q0E5Qjc5ODM5RUQ3Cis6MTBBN0QwMDAxRjNERDhFRjU4QTVFMzNCNTM3MjI4QkYzNTdDMTA0RTgwCis6MTBBN0UwMDBGRTVGRkYwMUQ5OEVGQjI3ODBBN0ZGNEUwRUM2ODdGMEM0Cis6MTBBN0YwMDAyRjVBRjc4NjExM0RGQjhGRDhDODVFRkM0OUYwRDk3OUY2Cis6MTBBODAwMDA5MTM3NkU5ODJDRDNGQTBENTM3ODlCRDVGOUQ2NjhBNDVFCis6MTBBODEwMDAxRkUyMUJFQkRFMzc3N0JFMzU4RTlGQTdGNjEyREU1N0ExCis6MTBBODIwMDBCRThBNDlGMTIwMzg1QkFDOTREQkQzRkEwRDFGMkNBMjExCis6MTBBODMwMDBFRkYwRDRFRDE5ODA2QjhDMjkyRTAwRDc3MEZDMkY0OUQ2Cis6MTBBODQwMDAzQzFFMzQ0OEExRjE2MERENkVEOTE1NUNFRjA1RUJCOTEzCis6MTBBODUwMDAwRkY1NEY5MjkwMDNBNkY4MTNEMDJGMTk5OUFDOTJGREUzCis6MTBBODYwMDA2QTY4RTdGNDM0NzRGMDE2REVCRjgwRTczQjhDRjRGRUQwCis6MTBBODcwMDA0MUY3OEIzRDM1NzhGRkFCNTQyQkRGNEZCRUVBQTlDNEJGCis6MTBBODgwMDBGRTc3NDdDQjU0NEZGOUREMEY1NjhDMERENjlCMENFMTZDCis6MTBBODkwMDAwNDdBRDYxOUZEMDkxNDM3MUUzMTEwN0M3NTQ3MkUyNzBFCis6MTBBOEEwMDBBNERCNTAxRjZEMkNCNTY3QTNERUUxRkE2RUZGNjhFQkU5Cis6MTBBOEIwMDA3MkU0NjMwRkJFMzczMTMwQ0Y2QkMyREUzMjVDNkYxMjkxCis6MTBBOEMwMDA3QTE1MkZGMDc5QzU3QUQ3QjJCOTIyM0VFNjdDOTQyRDVECis6MTBBOEQwMDBGQzNEODgyQjI2MjY0RjFDMUM1N0RDQTgzRjA5RjZFMEMwCis6MTBBOEUwMDBFODYyMDlFQjg5MTQwRkM2QjUzQjhGNzM3REQwRDBGMUI4Cis6MTBBOEYwMDBEMEE3QzhFNzc1OUY5OEE5QkVFQUJCOUQwRjhEQTUzQTYyCis6MTBBOTAwMDA1QkI3RkI1NkY0MkJCRUVBN0NGODU2Q0FGMzQ5NkIwOUQ5Cis6MTBBOTEwMDAyRTBGQzI5Nzg0RkVDQjg3MDk1ODBGQkFBQUUzQzMwNDRGCis6MTBBOTIwMDBCMkFGQkIyNkFFRjc0NEEwOUY5MjdCMjc1RTA3QkY4MUU0Cis6MTBBOTMwMDBGODBGRkMxN0UyQkY5RDNERjk5QUJGNjJDNTc5NTcxRDFDCis6MTBBOTQwMDA1MDVDODg5RjU1MDdGMjBGNTVBMjFGNzFCODM4MUZENTZDCis6MTBBOTUwMDBCODc0Mzg5RkZDOTUzQ0Y0NTc2QzAxRkY0NTVCNEY2NTFDCis6MTBBOTYwMDAzMkFGNzdFOUVGMEFBMzNDODFDNDQ2NzNGRTYxRTkyMTY3Cis6MTBBOTcwMDBGQzUzRDNGQTBFRDlGNTlBMzYzOUE0NkU1MDdCQ0U5RDhFCis6MTBBOTgwMDBBQ0YwN0Q3RThEN0Y1QTI0MjdGMUM3NzZERUQ2QjRFREZDCis6MTBBOTkwMDBBNEY1QUQzNEI2MTBCRDFCQjYxOEY5RkRBREJDRDVFQUIzCis6MTBBOUEwMDBBQTNEMkNDNjgzRjgzODg0OTc4MDBFMzM0RDVFRkE2RTJDCis6MTBBOUIwMDBDNUMxNTRFRUJGRUJFOUYxNTkzMkNGNjMxQzNDRTFCRTk3Cis6MTBBOUMwMDAxOUY5RTU2MDkxN0JBQzdEMDhGQkUwNjFDNTNDM0U5NUUzCis6MTBBOUQwMDAwNEJFNUJGOTc5MjVGREI4NTNDOTNDOEU4RjhDMEQzREMzCis6MTBBOUUwMDAzRjNBNjA1RjkyMzlGRkNDMzQwREZEM0RCRDlGNjlGMjY3Cis6MTBBOUYwMDBDNEQ4MzMwNkUwOEJBMzk1NDZGQjNBRTFCNzhGMDhGQTNCCis6MTBBQTAwMDA1RTQyRDU1RDQ2RjIwRjhFMzJGQjNCNTg2NzM4NEJEMzIyCis6MTBBQTEwMDBBRjkzQjk1REQ1RjJEREFFMEQyQURGRDcxOTdDQUU5MUNCCis6MTBBQTIwMDBGNEU0N0M2RDNFRkQ3OTY5RTFEN0NDRDdGOTM1RUIzNTlGCis6MTBBQTMwMDBGRDM3ODY4RDQxRkRENzIyQ0VCOUFEQzkwQ0YzMDZFN0FGCis6MTBBQTQwMDBBM0Y0RUQ3RUIxOEY4MUU3NzVCMDZEQzhGQzk4RjIzNjQ2Cis6MTBBQTUwMDAwN0JCNEVCQzQxNzU2NjI3QzJEODY4OUU5N0EzRkNGNTFDCis6MTBBQTYwMDBBQTYxRjJENzBEMDNGMjM4MkY4NEJGMzQ3QTVDMTBERjZECis6MTBBQTcwMDA1NUQxRDNFMzBEODE3NzZEOUYyRDVDRUNCMzlENTZEQ0YyCis6MTBBQTgwMDA2RjI0NTM1REQ2NzkxM0ZGOEU5QTlGRTJBQjg2NENFRTBFCis6MTBBQTkwMDAxRjVEMjg5MzY4NUYxQ0UwMUM2NTBFRDJFQjE3NDZGMDIzCis6MTBBQUEwMDBCOEVBQkIwQjI0Q0E5Qjc2RTE3ODhDOUY1QTI0QUFBQkU4Cis6MTBBQUIwMDA1RUU1RUIzNTIxMUY4RDY5NURGMjI0QzlBQjg3MUQ2MzBGCis6MTBBQUMwMDA0MURGQTk5ODZERTE3NjcxODA2RURBQkEwN0VDNTY4Qzk5Cis6MTBBQUQwMDA4N0VCRTEzODZBNzEzQ0RBQzE1OUMyRUVFOUNGMjE4RENBCis6MTBBQUUwMDA2NUJERTUxODU3NTYzQjI1MDdFRURCRUJFOTNENzdFMTAxCis6MTBBQUYwMDA4NDc3RTJGRjAxM0E5RjRCNzYxRjIxRkRENjdCNzkwMUQ3Cis6MTBBQjAwMDBFNjNGMEY2NjdFM0UwQUVENjVFRDMwN0NGQjNCQzFCNzRDCis6MTBBQjEwMDBEQUY3NTkxQzYzRDU0NkZDM0VDOThGMTJERDlGMjA3RUIzCis6MTBBQjIwMDBGQjBEREY0NjhFNjNGODdDREY3RkFGOTE5MDJFOENFOEMzCis6MTBBQjMwMDAzMTlDOUM5QzEyRjM5RDRBMTZERjI1OENFM0ZCMjRDQkIxCis6MTBBQjQwMDBCMThGRjI2QUY0OEVBNEZDNDJGNjhERUQ0QjM1RUM3RUFCCis6MTBBQjUwMDAzNzA3RjVENkM1QUUwMzM5QTYyMDNBOUU1RjAzRjI4RUJECis6MTBBQjYwMDBGNkEzNjM1RjgyNkEwQkU2MzMwM0YxOTcyNDY5RkNBNkMwCis6MTBBQjcwMDAwOEJCMThDQTc3RTc5MUVGQjJCMUZEMzAzMjFERjVFRTkwCis6MTBBQjgwMDBGNkEzOTFCN0UwN0NCQjc4M0JDMDlGRUQzMjhEODM3ODE0Cis6MTBBQjkwMDA2N0NDRkM4ODYwRjg5RTI0RjgyRUI0RjA3OTE4RUIxQjgzCis6MTBBQkEwMDA1MzM1M0VGODdFRTM3MDdDNkI0Q0UxRjU4NDIxN0NBQjQxCis6MTBBQkIwMDBBREI3MDVCRjg3ODNGRTdEQTc5OUJFODc4M0Y5RTZFODE5Cis6MTBBQkMwMDAyMEI5NDg0REUxRjIzMDQ5N0NGRjY2MEFGM0QwRjcwMDI2Cis6MTBBQkQwMDAyNzg5RUZFMDRDNTE5ODRGODlDMTdEMkU5RkNDRjc2NUI2Cis6MTBBQkUwMDBGOTc5ODYwMkMxQkY5MzE0NUYxN0Q2Mzk0QzExRkIzMjM1Cis6MTBBQkYwMDA4NUFDOTdDNjRENjc3RTZBOURDQzRFRTcxNDhBOTk4M0QzCis6MTBBQzAwMDBEQUM5MTZERjlEOTg3NkM5NkU2OUExRkEzRjVGODIxMjk0Cis6MTBBQzEwMDA3REQ2MjJDRTQzMEM0MUI3QzBGQTE1RkFFRTBERjFBNTUwCis6MTBBQzIwMDA4Q0U3NjE4NkZFNkU0QTY1MEE5NzczRkEzODA3RDJGNzk5Cis6MTBBQzMwMDAwMkEzRkMxNDdFREYwQzVGMzI1NTYxMTU1ODc3NzQ5QkJDCis6MTBBQzQwMDBDMjJDRTEwMEVGRjZCNzBEMjRCRjlEN0RBQTE3RUI0MEEzCis6MTBBQzUwMDAxREIxRTJCOTJGMThENUJCNEU3MjcyRjk0NEQzODI3NTdCCis6MTBBQzYwMDAxMkRBN0FGNTc4Mjg4NEY5MzAzRjM2NDk4MUM4OTJGMEIzCis6MTBBQzcwMDBFOEEzRjdERENFRjgzOThEMjJBNkQyMDc1NjZFQzc4RjJFCis6MTBBQzgwMDAyNzkzNUVGNzUzOUM1NDAyNzExMkVBNzU4M0M1NDNGODBCCis6MTBBQzkwMDAyOEMzRTRDQTQ0QkVCRjExMDlGMzE0MzY0QkVDMzhFRUE2Cis6MTBBQ0EwMDA1N0E0RjFGNTZBRjMxNzAyMjNFMEI5QkQzMkIxNUU0QzQ3Cis6MTBBQ0IwMDA4MTFFOEZFMUZCMUU5MTU0Mzg1QzZBRTdERjA5NEFBMEQwCis6MTBBQ0MwMDBFRjA0REQyODVFRkIxM0Y4NzcyMTIzRUZGNzVGRkM3RUFFCis6MTBBQ0QwMDA3RTYwRkZDNzgxREYwRDhBMEM3QzhGRDI4MUU3NEMzMDBDCis6MTBBQ0UwMDA3RkU3NTNDRTA3RkJDRDc3QTcyQ0FENEU5OTE4QTg5N0Q5Cis6MTBBQ0YwMDA2MzZFQTZBMjVGQTFBRjk3NDNGNDlEMEIzQURGQUNENTdDCis6MTBBRDAwMDA3QkJDRUE5REFCRTJCOUI5ODU3MTE2M0E0RjlCNkIxOUQyCis6MTBBRDEwMDA5NTg3NzYyQjIzRDE1RDlENDI3NTFGNUI2RUExNDkxNEVCCis6MTBBRDIwMDBFRjQ0NTc0NDgwQ0ZBRENDMzkxOUYxMUNBOEQ3RTNERkVECis6MTBBRDMwMDA0RjFBMzhDRjk0QzBFOEZDOUZENUNDRUIxOTlGMDFCOUNFCis6MTBBRDQwMDBDMEVGMTc4MTU0QTk1OEQ3QzI5RTI4QTFGQUM3QTdBMjVECis6MTBBRDUwMDAyRDBFM0M4NzYwNDY3OEFEMDE3ODFCMkRBMkVFNDc1NzNCCis6MTBBRDYwMDA3N0Q5NjgzM0QwRjczODFCNTkzODlERTc5RTE1RTZGRTMyCis6MTBBRDcwMDAxRUFFRkZCMTg4NjIzQTJGOURCNTZENUExMkY5ODNCMEFECis6MTBBRDgwMDBERTY5REE3QTBEODNFQjEwQjFGRTBGOUZEM0Q3RkY2OTJFCis6MTBBRDkwMDBFQkMyRTNFQkY4NUVCQkMwOTdCNjRFQkI3NkRFQzdBOTRECis6MTBBREEwMDA4NDlDRjdEMUQ2RkY0QzM4NUZBNzExNzdFMkQzRTg1OURFCis6MTBBREIwMDAxNUY1ODM3RTdEMUEzRkZDM0ZEREZCMzU2RDYwNUMwMDQxCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQxCis6MTBBREQwMDAwMDBCN0IyQUNCQzBGMEEzMUU4MTg1NjUxODE4MjZGMUQ1Cis6MTBBREUwMDBBMThBRDExMkNGRTA2NjYwNzgwNEM0MkMzQzBDMEM4NTlCCis6MTBBREYwMDA0MDdCMjM4MDc0MjQxMDFGMDFFMkEzNDBBQ0MyQ0JDMDZGCis6MTBBRTAwMDAxMDBCQzQ3MTQwM0MwN0M4OUYwQkM0QTU0MDlDMDU3NTNFCis6MTBBRTEwMDA2MzJCMEIwMzQzM0IxMDc3MDI3MTM3MTBFQjMwMzMzMDU5Cis6MTBBRTIwMDBFODMyMTM2RjdGQkUwODAzQzMxMzA5MDQ1RjUxMTI2ODMxCis6MTBBRTMwMDBBNzM0RkRGQzNGRDhGMDBBN0RGQURBMjc2REMwQzBCMDE4Cis6MTBBRTQwMDBENTAyQzE1NzAzQjJCNzU5QTBBQUQ5NkU4MURGOEMxREI0Cis6MTBBRTUwMDA2OEYyM0JEMUY4QkJGMEU4M0ZBQjg3Q0FCN0Q1NDBFNTE1Cis6MTBBRTYwMDA0QjY5MzEzMDc4MjI4NTg5OUQwNjdFQjdBMEUzMEFBMDIwCis6MTBBRTcwMDBERTRBMjAwNjAwRkI3MkRCNDM2ODAzMDAwMDAwMDAwMDhFCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDEwCis6MTBBRTkwMDAwMDBCRTU3RDBCNzg1NEQ1QjVGMDNFNzMxRUYzQzhDQzlFCis6MTBBRUEwMDA2NDEyNDIwODE4QzIwOTJGQTMwRDM4MjEyMTA1OEFFRDJBCis6MTBBRUIwMDA0MDAwOTFBMjA2QjUwQTE1NzVDMjIzMDk3OTREQzBDNzk1Cis6MTBBRUMwMDA4RkI1NkQwNjgyMTExMDM0NTgyQzUxQTM5RDIwMjg3ODFGCis6MTBBRUQwMDA4MzBFMzQ0ODkwODAwMzU4MUE3QTUxODNEN0ZBNjg3QkRFCis6MTBBRUUwMDBCRDQxMjkyMDA0MTJGMTg1REVCNkZFN0JBREJENEZFNkUzCis6MTBBRUYwMDA5QzkzMTlFMERFREJGRkJGRkRFRjFGQkZGNkIwQ0ZEOTlCCis6MTBBRjAwMDA4RkI1RDc2QkFGQjVGNkRBN0I2NDhCOEI0ODQzMDhGOTA2Cis6MTBBRjEwMDAxNkZFN0U0MEM4NzQ4OTEwRDIzRkZBNzRCRTRFNTQ5MjE5Cis6MTBBRjIwMDA0ODQ4NUQwRTJEQTcxMDkyM0U5Qzg0ODg0MEM4RTQ2QTc0Cis6MTBBRjMwMDA1QUNFMjNFNEQxM0I0OUM4OUE0OUM4RkUyMzE2RkNCRTI5Cis6MTBBRjQwMDBDQUNGQ0FCNDVERDg3MjBERkQzRTgyQkQ3RjMyOEJCNkNBCis6MTBBRjUwMDBBM0VGOUZCQzIwNjJCQkUwNEMxMkRBNENDQjQ5ODRGNkQ1Cis6MTBBRjYwMDAzNjhDRDAyMUZDRjg5Q0VDQURCNzhGQTJGNTFCRUZCNDZBCis6MTBBRjcwMDAxMEFCNEFDODEzNzQxODMyOUUxMDE3RjFEOTA5NkRCQTc0Cis6MTBBRjgwMDA2QTM4RUJFRkYxOTk5NkU3NDUwMTNFNDZEMkU2RDNGMkY3Cis6MTBBRjkwMDBFQTI5QzVGOUFCNjk2OThEQ0NFMDZBOTg1M0ZDN0M5MENECis6MTBBRkEwMDBGNkVGQjEwQ0MzNzlEMDdBNEYzQTY5QkRDN0RFMkYyMUQ1Cis6MTBBRkIwMDBBQjY5QkIwRDczMkQ0MjcxMzZBREQ3QTRDQzBFNjU0NzdFCis6MTBBRkMwMDBFN0FGM0RFNzEyODlCNzBCNUEyREUzRTBFOUUzQ0Y4OEZECis6MTBBRkQwMDAwMkNGNUY0Q0I0RTAzODZCQUIxOTNFNjgzREM1OTI0NjdBCis6MTBBRkUwMDA0ODRCQzcwMTlCOUZGNkI3QjZBMkU1RTgzNEZBRkQ5MTNFCis6MTBBRkYwMDBFMTE2MkZDNTIwNzlBNEUzODBGRDRBM0E3RTMwQ0ZFMkU2Cis6MTBCMDAwMDAxRDQxNkJBNzRCMTFDMUUzOEM4RTM3OUU1MEMwQzdEMjM4Cis6MTBCMDEwMDA3QURFMUQzNkQ1RDlCNzNFRUQ3NzEyQ0M3QjBEQzVCQjk4Cis6MTBCMDIwMDA5ODE5NkQzNzA2RTBBNEVERDY1MjkyODVFOUI4QkY5NDIxCis6MTBCMDMwMDBCRDg3NjFEQzVGREU5MDJDMDQ0OUI0REVGNTAwMjRENENBCis6MTBCMDQwMDA5QjZCMjExMTVBOEY0ODNEMzY0MkM3NTkzREYxNkREQjRDCis6MTBCMDUwMDAwODVBN0Y3NUExMDUyNjQxRDY3QUI1RUY1RTNCODFGRTgxCis6MTBCMDYwMDBBNjhFM0MzQzFDRTg3QTNERkQwRUYzQzg3RTdDMzZDQ0I3Cis6MTBCMDcwMDBGQkIxMjkwQTAxRkNGRjUyQTBGNTI4OEExQjhBOTQxRjA0Cis6MTBCMDgwMDAwMjdDQUU2QUUyODFGN0Y0RTk4Qjg1RDc1NkMxODY3MEZGCis6MTBCMDkwMDA5MDM1MUIwOEM5MjcwMDAyRkVBREY2ODU1NjBFMDVGRTQ5Cis6MTBCMEEwMDBDQTIzNUUyOEE3N0I2OTdCNjdERkY2OUQ4MjE1RTlEMkZDCis6MTBCMEIwMDAyMDA3MDcwMkZFRTJEMTZGMzhDN0U3RUFBQzI1NzZBMDg5Cis6MTBCMEMwMDAwNzIxRjU2OTg1QTMwODU5MEY3ODgyNDEyNUJGM0FDQjNFCis6MTBCMEQwMDAxNUFEQkY1MjYwRjg1OTI3MTM5RjQwRTc5NzkwQTc4NDlBCis6MTBCMEUwMDA5NjUxM0M1QkIyM0Q3MzYwQkU0RUJGNDJBRUEzRTU1NTg4Cis6MTBCMEYwMDA0MjcwQTAwODc0MTlBNTkwQ0QyQUYyODU3RDA0MkRBRjY5Cis6MTBCMTAwMDBCRDJBRDkwQkZDNTcyNzg0RDMyNEY4N0UwM0ZENEVCQjAwCis6MTBCMTEwMDAzQzUwMzg2NjBFRjA2N0EzNTc0MTdFQTZGQzczMThGMENBCis6MTBCMTIwMDBCREQ2OUY0QzU2QUJGOEJEMDNEQjNCODc3QkFDODgwOTkzCis6MTBCMTMwMDAwQTBGQzU0QjNGQ0E0QjgwRDc5QzlCRUFBRTFGMDZGNDUzCis6MTBCMTQwMDAxOTZCRjEwMDg1NTYwQjkzRDRGOTIwM0Y0OTM2MEY4Q0NCCis6MTBCMTUwMDAyRjhGQkQxOUU5MjdGNzRGMTY4ODhFREUzRjA3N0E1M0U4Cis6MTBCMTYwMDAzQzNEQUExNkZFMUM5RTRGRTc3RDk0MzQ4MkQ2NUY5MzI5Cis6MTBCMTcwMDBGMzRBMDNEMEU5OTlGQjZENDhCRjY3QzY3NjJDMDZCOTQwCis6MTBCMTgwMDA3QUYyNDJFRUZCN0U5NDRCQzVCQjk5RjZGMzZDQ0U4OTA2Cis6MTBCMTkwMDA0QzQyMDc3QzdDRkE0NzQ5ODBCRkMxQzNFQkVGMjE2RTZDCis6MTBCMUEwMDBGQTlDRDk1MzQzNDY1M0Y4NDg3REUxODI0Q0U0MTNFMUJECis6MTBCMUIwMDAxNjhBRDdDMTRCMTVBMkRBMTgyREJGMjVGMDlERjhDMjBCCis6MTBCMUMwMDBEOUFDRUNBNEYzMTlDQ0U5RENEMkYxQjZBRDA4RkE5QjBBCis6MTBCMUQwMDA0QjIyMjNEREY4REU5NjlBMUNENTMzODNGMzQ4MjQ5NTYxCis6MTBCMUUwMDBGNkZGRTRDMjQzMjhFN0NGNUM5REVBNjU3MjlFODZGQ0M5Cis6MTBCMUYwMDA5MkMxRkI0OTg3RkE1NEJGQTREOTQ4MzA4MTNFMDdCN0IyCis6MTBCMjAwMDBGN0RDMEM3MDBEQ0UzQTMxMTdFMERDRkZDNjIxMDFFODA3Cis6MTBCMjEwMDBGNkVDRTg1NDE1RjQ1MTkyQkY4Mzc0NTJCQTBGQ0U3RTA3Cis6MTBCMjIwMDBGNzQxQThFNzcyODZEMjBBQjNCMUZFNUZCMTlEMDlGRTZECis6MTBCMjMwMDA2NkQ1QjcwOUYwQjY0REE4M0UwQ0Y0MDlFNjU4QkM4Q0FCCis6MTBCMjQwMDBERTRDMEZBRUI5MzczNTA0N0E2NEIwRTM0RkIzQzRBMTE2Cis6MTBCMjUwMDBDODA3ODRBNDUyRjgzQzA0RTVBNDRFODhEODg2NDFCQkI0Cis6MTBCMjYwMDAwNzU4QkIyMTI0MjQwMDlFMDc2NzA1MTc4QjZFQThFRkEzCis6MTBCMjcwMDAxNzBBNUQ3REM3NkQwMThEMDhGMjQxMzkxREY4NzVCQjU4Cis6MTBCMjgwMDA0MkNBMEE2M0M4QzE2QjVDOUVFQjA0MzIxQkY5OTk0ODQxCis6MTBCMjkwMDA3RjAzQkUxOTkyQzRGODQ2MkIzRjBCRjBEMDcxQjdCRkE1Cis6MTBCMkEwMDA5RUZDQzM2QzBBQ0ZBRjk2MEVDRDExMjkzQzhGNDJCQkRBCis6MTBCMkIwMDAxODcyQjM5NkNCODFBMzlEMDQwNThBRDdGREJGRkI5RDcxCis6MTBCMkMwMDAxREYwQjZERDQyNEFBMUZFQTRBQ0IwQUQ5M0QzMTVFOEEzCis6MTBCMkQwMDBCMTkwQjBGRTFCQjMzN0RBNTA1RjA4NTlDODc3MEJDNzdGCis6MTBCMkUwMDAyOTNFRkI2ODkwQkZFNTgyOUZCNjRGRjMzMEJERUNGMjdDCis6MTBCMkYwMDAyQTIxRDBDQkFFQjRBMDYwQTFGMEE4RDlDNEIzMzE5M0I5Cis6MTBCMzAwMDA3NTE3QTRGODlCMDdGRjAwNDY5NzU4RkQzNTZCOTM0MkNECis6MTBCMzEwMDBBQkU5Rjc3OUQ5NTREMDAwNkYxNDU3MTYzQUVFMDJDMjUwCis6MTBCMzIwMDBFNjM5Q0Y1QkI3MThFODQ3NDhBMTA1RjBCOURBQzNFOEJBCis6MTBCMzMwMDBEMzA4RTNEMEE5MzRBNkIzN0VENkRFNDc0MkNCODE4RkIzCis6MTBCMzQwMDAzQ0FDRkQ3MDY4NDJFOTM2M0NFRjk1RkYyNUQwN0VEM0RBCis6MTBCMzUwMDA3OTNCOTA3QjY4OTc5MDE2QjI1OTY4M0JCNURBNDIxMEZBCis6MTBCMzYwMDAzRTI5NzI1ODAwQkE4RjRBNTUwMTlFQzYzNEVGQkZDQ0IxCis6MTBCMzcwMDAwNEY4Njc0QkRFOERGNEYzNzA4MDgzRjZEMzU4NkRGMURCCis6MTBCMzgwMDBBMUJFQzg1MzlBNDA0RkFGRjYzMTNEQUZFMTJCOTM4RjJBCis6MTBCMzkwMDA5QkVFOEQwODc0RUUyNDkzRUE0OUM0OTMyRjYyRjc0MDI0Cis6MTBCM0EwMDAzOTlCQzE5Mzk5QzdFNkQ1MEJGRjI4MjVCNDlDMzY0RTJGCis6MTBCM0IwMDBCNzQ1MDhENEQzRjA1MENDRkIyQkU2RjM3MEE2ODU1NkU2Cis6MTBCM0MwMDA0QTAwNzcxRTgzOUJBRUNCMDg0RjdBQjZEMjA0NzI5MEE4Cis6MTBCM0QwMDA5RUM2RkE1MzI5N0UzNEJDMDM1QzBFMERBRTNDNUExRjQ4Cis6MTBCM0UwMDBGNEIwNTc2OTAyNTY3MDcwRjg4QUIzMTkzQ0ZCOEZCQ0YxCis6MTBCM0YwMDBERDJFQjBGRTUwQUUxQzFDNUUwNzlGM0YwMTc4NTNCOTk2Cis6MTBCNDAwMDA1RUE3RkQzNUNCMTE0MUE0RjU0MzYzODlCQTkxOERBNkEyCis6MTBCNDEwMDA0QUY5RDFFRjhGNTc1MzNDRDA4MjkzOEY0M0Q2NUI1MTdCCis6MTBCNDIwMDAxRUU4QUJFMEI3OTQwRkU2RDdEMzcyNTY1NDNFNDZBQzU1Cis6MTBCNDMwMDBCNDFBRTRDNUM5RTc0REVBOTkxQzUxQjY4OTQwQkI0QzIyCis6MTBCNDQwMDBDMkNBMTYyOEQzNzkxNDY3MTlFNThDNzg3NTY1MEE4N0ZFCis6MTBCNDUwMDAwQkY4OURFQTlGNjVFMzE1QzYzRjU3MzEzQjg2MTA1REFCCis6MTBCNDYwMDAzREUwRjNCMUVBNzM2QkYwQkI4MkVCN0FDNjRGMTUwMzk0Cis6MTBCNDcwMDA3QzgzQUI1MzI3OEJBMDRGREE5RkJBRDkwMjdDNzUyRjAwCis6MTBCNDgwMDBCMTg4ODlDOENGNDJBRkZFQTJFM0VENTgxMkIxQzMyNDAwCis6MTBCNDkwMDAxREVEODVDOTgwQjc4Q0VBRTRDOTBBRTBCMUREOEY2NThFCis6MTBCNEEwMDA0NzdCQjUwRjlGQjAzNDhEMjE2NDEwRDE4RDkzMDlGQTdECis6MTBCNEIwMDBENTUzREU0Q0YxNEFBQTk1MzBFOEVCQjE3QTM4RTlGNzdBCis6MTBCNEMwMDA4Q0Q3RUI2NzAxQkQxRTVFN0M2ODIwQzg2RkFBQTlGRDAyCis6MTBCNEQwMDA2OENCNTA5NEQzQzFBRkQzNUEzOEZFODk5RjQxRkQ1NUY0Cis6MTBCNEUwMDA1QzlGMzgwMEUyMzFGODdDMUQ5RTgzOUQ1NENGNTIzRDE1Cis6MTBCNEYwMDA5RDQxMTFBQzhDODlFQThCRDU1N0JEOUJFMzc3NzJGRUQ5Cis6MTBCNTAwMDA0OUM2NjcwNDlFNjZCREEyQUI3RjE1QUYxRjE0MkU1QUI1Cis6MTBCNTEwMDBFRjA0RDZEM0UwMzE3RjNGMjc1ODUwNEZCOUMwQ0VBNEI3Cis6MTBCNTIwMDBGODdEOEM3OEU2RTBCQUVDQjVFMEJBOThDMERGODdCRDZDCis6MTBCNTMwMDAwNzI2MjMzREMzQzQyQjY0ODJCRUZEOUI1NUNGMDczRjI2Cis6MTBCNTQwMDA4MTk3QTA2RkE1MzBDQTg5OTJFMTQwRkI5MENBNzEwMjMxCis6MTBCNTUwMDBBQzdCOEQ1Mjc1MjlCQzBGQTczQjA4RTg4NTAzNTMwRkMwCis6MTBCNTYwMDAwOTgwQ0ZGNDU2RkYxMDkwNDNDRENFOURFQzBEQTdDMUJFCis6MTBCNTcwMDBGQjQ3MEVGQkFGNDRGOThDNjMzNzZBNzZBMjc5M0U1N0RFCis6MTBCNTgwMDA1Q0JCMUNGNUMxMTA3RjRGM0JBQ0Y3Q0UwQUM5N0IxRERECis6MTBCNTkwMDBGMDk3OUZDMkU1NDQzREE5OTJFRjUyRjhCREMxNjVBMDY2Cis6MTBCNUEwMDA2NzU1M0YyRDBGQTBDRjBBRkUyQzY1REY1N0Q1OTRFNkQ3Cis6MTBCNUIwMDAxRTk3QTJGREFFMUE0RUVENTFBQTE3RDc3N0FDQjdERDk0Cis6MTBCNUMwMDAwMDc2NDZCNTQ1MDVCRTVERUI3RERCRTY3MzQyNzk3MkRDCis6MTBCNUQwMDAzRkMwNzM0QkExNjZGNzQ1MDQxODJGRkQxRDFGREE3OTk0Cis6MTBCNUUwMDA2MzNEOEEwNzk0RDYyODZCNjRBMDQ3Qjc1RTM0NEU3RENFCis6MTBCNUYwMDA3NzBDQzA0MTZFQTU0NDFDMTg5RjhFNzRCRUM4NjdGMUJECis6MTBCNjAwMDBENjEzODBDNUEyNUI0N0Y2NjdFREMwRjVFNTBENzIxNTUwCis6MTBCNjEwMDBEMjQ1NUI1N0I0NzUwNDdCQTRGQTY1M0U5N0EzNDdENDIzCis6MTBCNjIwMDBCMDRENDA3RDQ1NjU5N0QyNjczRUQ3MjM0RUFFMzdBOUQyCis6MTBCNjMwMDAxRTY2N0E4RUFGMjc2QjE3QTdFMjdBQTJFOTRGQjBBREVDCis6MTBCNjQwMDA0MTQ5Q0NFN0ZBNzY2RENFRjM0OTM3NTA5ODlDQTA2NzE0Cis6MTBCNjUwMDA0MTJGQTU5MUM5QjBGRThFMDAzRDAzRkE0OTBBMEEzMDc4Cis6MTBCNjYwMDA1RUUzNTgwRjU5OERFQjk4NTE5RjhFQTg2NjdBRjA5MTQyCis6MTBCNjcwMDAzNDgyRkM0NEQ3QTEyNjU4RUYxQUQzQzM2OUQwNEY2MzU0Cis6MTBCNjgwMDBGNTAxQzFBRjVCM0ZCNUY1Q0U1NURENDE0MDBGQ0VDQkU3Cis6MTBCNjkwMDA2M0VCRENCQzZDMzZERTFGMDA0MTYzMTlCQ0EwNTdDREU4Cis6MTBCNkEwMDBFQkRFMkYyNkVFNDA2NTk5QzBFRDJEMzNGRTA1MEJCMzgyCis6MTBCNkIwMDAwMzFGOUJGOTM2RTI3MUVEODJDN0YxNDlFQTM3NjA3RkRCCis6MTBCNkMwMDA2OTM2NDY4MzU1NTkwN0YwRkQxQUJGNjUzQUQ4RERFQjU4Cis6MTBCNkQwMDBBNThFOTVDMzI5RkNFQkE3Q0Y1MzgyRjRGQjFBMkZGMzU5Cis6MTBCNkUwMDBCQjU2NEY5Q0Y3M0NBQzZCNTY4QkMyRTBBQTJFNDU3QkY5Cis6MTBCNkYwMDAzNTgxQzNCNTAxRkE0NjNGNTE0MUJGRThCRTNCMzdBRTg1Cis6MTBCNzAwMDAxQzRBRkI0OUEzN0U4Q0EwNDJBNTkwQ0Q0QUJGM0I4MTM5Cis6MTBCNzEwMDBBNkEwQkZGRDExMDZCRjk3NEMyNjMxRTBGRjU3QzFDMTVGCis6MTBCNzIwMDBGQzUwN0Y0N0ZCMDhBNEE3QzUwM0YwMjY3ODdCNkNFMDlDCis6MTBCNzMwMDAyN0FBRDQwRjUzNTU4MDU3QjU4RjQyNzgyRDlFNjU2QTNFCis6MTBCNzQwMDBCNEZERUZCOUJGNzAxNzJDRkM2MERGQ0Y3OTc3M0FDODMyCis6MTBCNzUwMDBEN0JBM0I5OTVGNjY4NkZGQkU0OUExNzYwQjhFNDNEMDcwCis6MTBCNzYwMDBBRDczQzVDMUVCNUNEMDYwQTA3RkJDMjE4NENCOTVDNTE3Cis6MTBCNzcwMDBFMDNBMkUzMDdBM0RENjMxRjk3QUY0OTMwQUU5N0JEQTUxCis6MTBCNzgwMDBEMUUzMUQ0M0VEMjBERjY2N0JFRjk5ODQwRjczRDBERTlDCis6MTBCNzkwMDAzMUFEMzM5NzJBMEYzNkU5RkI1MUQ2RjAwQ0U0Qjc2RDgzCis6MTBCN0EwMDAxNkQ0NTM4NDMwM0QyNzEwOEJGQUVEMzA1ODQ0MTg1QzgyCis6MTBCN0IwMDBDODdBNTQ3RkFGOTAyMzczMTZEMEZBMkI3NjNBMDlFMEZCCis6MTBCN0MwMDA0QkUzODc3NERFRTdFQTZBQ0EwNzMxRTZERDJFODhGMUNCCis6MTBCN0QwMDBFOENFRUMwQzRFRjcwRTE4QUZGRkE1RTk0RkE1RDkwRTM5Cis6MTBCN0UwMDA3NjVCMzg1NDM3QTgwQ0ZDOEY2QUU2RUY4NjIzMDc1MDQ3Cis6MTBCN0YwMDBGRkE0NEZCOTBERkQ5NDJENERBOTczMTYwMDVGNjVGOTk3Cis6MTBCODAwMDBCQzgwMEUwRDFFQjA0RjYyRjk4OTMzMkNCNjhCRkFFRjU3Cis6MTBCODEwMDBGMUY0NzA0M0M1MEFGNDdCMUIzQTYyQ0Y3RkEyODVGOTJECis6MTBCODIwMDBEQjYxQUEyN0JERDlGMUM3Q0ZCNzMwM0IzQUM5QzJGOTBFCis6MTBCODMwMDA2RUVBQTEzNEZEN0FBNkFEQUJEQTNBM0I1ODIyNDE1MTBCCis6MTBCODQwMDBCNzFFREVDQUYxNjc1RTM3ODk1NDZGMUJDOUY4MUNGRDRECis6MTBCODUwMDBDNzg2MDUyQzBFQjE2MUEyMDVFMzJCMUE5RkQzN0E2OTI2Cis6MTBCODYwMDA4MDU3M0EwRkI0RTcyODFGODZDMDlFN0I4Q0Q0QTNEQzk4Cis6MTBCODcwMDAwNDY5RkJDREE0MkZEQzc3MTJDQjY1Q0Q2RjAyOUY1RkVGCis6MTBCODgwMDBFRjc4RENCRkJFOEJFQkFCNzUzOUY3REJBMTJCM0E1RUYzCis6MTBCODkwMDAxQUYwNDdDMENERjQ2NEE1OEJEOUIxMDUzQkU1QzgwRkJDCis6MTBCOEEwMDAyODFDOTU0RDAyREE1OTk2N0Q3Njg0RjNEQzI2NUFBNjNCCis6MTBCOEIwMDA1RDQ3NUMwQUQ2M0ZFQkIxNjEzOTYwRUQ3OEY0N0JCNDRCCis6MTBCOEMwMDBEQ0IzNTMyNDY4NDc2NjM5MkNDMEFGMjczOEJGOTIzQzlECis6MTBCOEQwMDA1QTA2N0JEOENFOEE5NTRERkJFRjgyRkU0QTVCQURDNEZCCis6MTBCOEUwMDA0RUZCQUZEQzVENzJFM0Y3NjhCOUE0NUQyNjUwQTU3MjJDCis6MTBCOEYwMDBGMzMyNjUxMDJEMkYwQTA5NjEyODc3NEZBNjBCMTVFMDRBCis6MTBCOTAwMDAyNTU5MDk4MURGREVFREVFNDhGRDExOURGN0U5MUExQjhGCis6MTBCOTEwMDA1MTI5MjhCNUFFOEVENDVCMjkzRUNBNDJEQkE3NDFCQjc0Cis6MTBCOTIwMDBCMjY2MDEzNDIyOURDN0U2NDMwMzYxNUU1QjA1MkZGOEQyCis6MTBCOTMwMDBGN0U1NUIxMjBDRjZFMDA5M0E5NTFGRDBFRjRCRTgzQ0I3Cis6MTBCOTQwMDA0MTJFNEI0OEZEMzQ1OEU3MkEzN0FGNTM1NDVERkNFMTk0Cis6MTBCOTUwMDA3NDhEMDdDN0QxQ0E5NTVCRTkzOEI0NURENTRCODIxN0EyCis6MTBCOTYwMDBBNjU4NjUyMTdFRDA0M0U3NzZEQjY3M0ZFNzg0RjkyRDUzCis6MTBCOTcwMDA1MzQ2QkE2MDVFMEYyQjUwQUYyNDU0RjQ4QTVEMDVGODJECis6MTBCOTgwMDA5QTk0NjlGNDdCNTk2MzkzMDJGMUFEODA5NURDMEQ3RTQ2Cis6MTBCOTkwMDA2RUY5OTY3RTQ2QjgxQTQ0OTRENzI1NDlCNjhEQTBDRjQ1Cis6MTBCOUEwMDA4OUQzOTc3NkYzQThCRTc0M0U1RDQzNzVFQ0M4NjhCOTM5Cis6MTBCOUIwMDAwQ0Y0MjFGMjYxNDg5OUE1QUIzRjQ0NEM0MjdFMkRERjQ3Cis6MTBCOUMwMDAyMjFBRUQ2Q0JFRkUwNzhGMzJGQTA3RjdCQTMwRUVBN0U3Cis6MTBCOUQwMDBEMTZGMDlGNzk3MzVGQTJENDlFMkY0OTQ3QUYyNjNDMUYxCis6MTBCOUUwMDBGMzI4RDA4M0MyNTMwRkY4QTJDRjM1MUMzRUY3NDQzMjYwCis6MTBCOUYwMDAwOUUyMkU2RTFGRjEwODMxRjhEQUZDQUM5NzQ5MTFCMDVDCis6MTBCQTAwMDBFRTNGMkQ5RjM1NDkxQTg4RUVDMzYyODgzQzc5NTZDQ0FCCis6MTBCQTEwMDA5OTM0ODU5NjdGNkYyOURDNkM0MUZERTE1NTQxOEUzNDY4Cis6MTBCQTIwMDAzRkZCNTkwQjkzQ0JCQTgxMEFFMkFGN0U2QUZFNzMyQ0JGCis6MTBCQTMwMDAzRTQxNzBEREFCOUY1QUZDM0NEODA1QjRGRDM2MEJDQUM1Cis6MTBCQTQwMDAyMTZEM0YyQTdFN0JDRkI0NzE4NkY2OUU2OUE1NUFGQjk1Cis6MTBCQTUwMDA5REQ4REU3NkYxRjZGNUQzMjYxOEM3OUY1NkE2QjVERjNBCis6MTBCQTYwMDA4QkYwM0IyRjBFQkZFN0JBODlDNkYxQUZBQkMwRjYwMTMyCis6MTBCQTcwMDAyQkEzNTc0RjkyMERFRDlBMTU3NkFGNEY2Mjc2NTQwNDczCis6MTBCQTgwMDBERTRCQzkyMzM3NDIzRDUxRTMwN0QyRTEwM0ZCREJEOTRCCis6MTBCQTkwMDA5QzM0NjYzNUQxRjNDNUU0MzcwMDBFMTc5NTE2M0Q1RjJCCis6MTBCQUEwMDAyNDhFNzMxOEY4MzFDOTk3NkMyOEQzOUUzQzI3QkVDM0U3Cis6MTBCQUIwMDBDQjMwODhEQjg2RjAyODgzMTRENDE3OTMwNkQ5MTBERUE4Cis6MTBCQUMwMDBGQkY3RDlCMTdDRkYwNDA2RUZGRDgzOUMyODY3QjhCNjZECis6MTBCQUQwMDA1MDNBREVBRkY4QUZEMURCQURCMDMyNDEyOEU5NEREMUZECis6MTBCQUUwMDBGRjExRTAzN0ZBNUVCNUMwN0I4NzQ4QUE1MTNGNUIwOTdBCis6MTBCQUYwMDBFQUEzODczM0YzOUYwQkVBRjBCMzcyMzBBNTJGMkQ5RjkzCis6MTBCQjAwMDAwNUZCQTc3RjE0QUYwRjBGMkU0RTJCRDI4RDUzMzc1ODQ2Cis6MTBCQjEwMDA5OUJEMzE5QkJEOUZFRjg0RjEwQUJCMDEwRjAxQTU2NzYxCis6MTBCQjIwMDAyNEQ4OTVFNjcxQUM0M0M3MTlDNkIxNjU5NEUyMzhERkY1Cis6MTBCQjMwMDA5OEM2QjE2Njk0OUFDNkIxQ0RERUM4REZGMzcxRkUwMjM1Cis6MTBCQjQwMDBGMzhBMzdDRUMzNDMyNzE4RTc5MzUxODZFMzU4NDVEMzhBCis6MTBCQjUwMDA3QzMyQ0E0Q0UzMzhEODdDRTg3QjNFOEU1REJDRDg3QzE2Cis6MTBCQjYwMDA4NjREMzRDRTY3NDgwNThFOTMyMjJBODZCODk1NzU0ODRGCis6MTBCQjcwMDA4NTY5MUMyNzhFMDNFRjYxMUM5MkNFRkMxQkM1REE1MzJFCis6MTBCQjgwMDA4Q0Y0N0ZDRDRFQzA5RTU2QUNGRTE3QTA1RkYyNDczQkIzCis6MTBCQjkwMDA0MTdEQTJEMjcxMDc4MDVFNDlDNkZEODI3RkI1MjRFMzU0Cis6MTBCQkEwMDA3Q0JFNzQ1MEZBM0JGNTc0MEU2QTc2MDFEQTNCMEIzOUIxCis6MTBCQkIwMDA4ODI0NTQ4N0ZFNzkxNUU3RDEwNUNEQjMzMjk2QzFCM0Y5Cis6MTBCQkMwMDBCNTIwQUQwOEZDRUNGNTJFMkZDNDRGQ0ZCNTE2MjhGM0U5Cis6MTBCQkQwMDA2M0Q4MDUwQkVCRTUxMzlEMDZGRUU1N0E2RjMyQzlBQTIzCis6MTBCQkUwMDAwNjNGOEJEQjAxNUFGOTA0RDU1Rjg0RUFBRDhGQThGRUNFCis6MTBCQkYwMDA4MkU3NDk5OUVBNjlGQUZFMzhENTZGNDREMUMzQkIwQzk0Cis6MTBCQzAwMDBEQjlEOTAxODFFNEYzNEIyNzVFNENCNzU0NzY1OENGM0ZECis6MTBCQzEwMDAwNUM5M0I1OTc0MUVCN0YxNjkyQ0FDNEY2MEJFMDI4NzUxCis6MTBCQzIwMDAyM0MwRTlEMUIzREIxQURBODhGNEYwNUQwMTc2MEY2OTNECis6MTBCQzMwMDBFODQ3NzFDNUVCMEQwNTdDNTE3MTQ5QzZFMjE1NjAxRkRGCis6MTBCQzQwMDBGRDc4RTVGNkRGNDBCNTc3ODVBMkMxNEJFODdDNjdCN0E0Cis6MTBCQzUwMDBBQzkzQUZBMEU1NzM3MkU3NUQ1RUE3QUU5RkQ5RjI0N0U0Cis6MTBCQzYwMDAzMDZGMUJGRDBGRkE5OUUzQTc2NURERjg3Nzk0MUFDQkM3Cis6MTBCQzcwMDA3NzEyMjk1QUE2NzQ5QjJBMEVFNUY0RTBFM0FBMjExOTRCCis6MTBCQzgwMDBFODc1NUIyQTgzRTc0RTc4OEU4MUNGMUVBNEQ3NUQxRUIwCis6MTBCQzkwMDBENjU2ODMyN0YwQTA0QzIyQjgxRTc1RjY2N0M2NkQ3Rjc2Cis6MTBCQ0EwMDBBQ0U3RDdENjE1MTM3Qzc3QzkzNjVGMjFBNUU3NUQwRkMyCis6MTBCQ0IwMDA4ODg4NDczM0JDOURGQjEyN0MxNkVBNTc3NTM2N0MyNjc0Cis6MTBCQ0MwMDA4MzdGNzkyOUY4RUY1RTZBRkM0RTgyNkMzQzBEQUYxQUQ3Cis6MTBCQ0QwMDAxRkRDM0U3QjUyQkZFM0JBN0E3M0ZDRDdGNzNCQUVFMzdGCis6MTBCQ0UwMDA5NzNCNEE2NzE5Q0E3NzU2Q0YzMUQ0QkY3QjY5OTFFMTM4Cis6MTBCQ0YwMDA3QjUxNzA5MUUxRkJGQzk1OEIwREU1ODVGNTBGMThFQTAyCis6MTBCRDAwMDA5NzM0MkMzMzdDNUYxNDVBNjVGODVFQkU2NTlEQTE1QzQ4Cis6MTBCRDEwMDAxOTdFRDI1MDNGRDBEQTY0Rjg2RUQ5NzdENTREMjA4Rjk2Cis6MTBCRDIwMDBCNUJGMTcwOUQ4Njc1RjM4NEYzQzBBRjZENTE3NEUwOURCCis6MTBCRDMwMDBGREFBMkFFMDM1MkE4N0E3NkFEMjkwQkY0RkQ3QThGODc0Cis6MTBCRDQwMDAzQ0Q3OUE4QkZCNjMwMTA3OTU2N0JBRDY2RkE4M0RCQ0I5Cis6MTBCRDUwMDA2Q0U1NDREMDIzQjQzRUQ1RTE0RkQ3QkVCNTJDNDg3RDI5Cis6MTBCRDYwMDBGNzhEMTBBNEE2N0MyRjM2MjgyNEQyMEZGQzk4RTQ1RTExCis6MTBCRDcwMDBCRUVFMTE3NURGM0IyRkYxQkQ4MTJFNThCOTdEQkY4QjEzCis6MTBCRDgwMDA5REIxREY3NzBCM0QyM0MxQkUwQjdFNjBDNUZEOUI3ODY3Cis6MTBCRDkwMDBGNjAzRkRCQjgyQzRGMDFGQjQ2NzE3QzQzNzc0N0FFNzlCCis6MTBCREEwMDAzNTkxRDlENUQ3ODg5MzVGMTNFOUIzNDI2MUYyNUVCMTdCCis6MTBCREIwMDA2M0UwNjQ4ODE3NTQyODkxOTFENTMxRUNFQ0RFRjFDMjMwCis6MTBCREMwMDAxNDk4MDFEMDBGOTM5NzQ1QTEyQkEyRjI4QkY0MUI2NjE4Cis6MTBCREQwMDA5MEZCMUIyQ0ZFN0RBMDlGQkJGNjhCNkM3RjIwNzIzMEVFCis6MTBCREUwMDAwM0Y2NjlBRTExN0RBRkMxN0JEMkRBMUZEN0M3Nzc2QjdGCis6MTBCREYwMDA3Q0ZEOEUwRjI3RTRGRDlBRTlGOEZDNDM0RDYxM0Y4OEY2Cis6MTBCRTAwMDAxRkZEQTk2NjM2OTYzRkFDRjFFM0IzQjNBNjE0OUYxRjlFCis6MTBCRTEwMDBENTU0RTNGN0UzMzU0QkIxN0NBMjI2ODhDRjUzMzUyQkJECis6MTBCRTIwMDBGMTc5QkFBNjFFQkY3N0Q1MzQ2MEY5NUM0RDA4OUY5QUE4Cis6MTBCRTMwMDAxQzY4RjYyODQ5RTFGNjFGQjdEN0U5Q0E4MUU1RjM3QzBCCis6MTBCRTQwMDAwRTIyRkQ3NzA3Q0FCNTM3MERFNEZBQkNGM0NCOTE2MDNCCis6MTBCRTUwMDBFNzlFN0ZERjhBNDFGNDc4NzgzMkYzNUI3Q0ZBRjk3MEYxCis6MTBCRTYwMDBCRDJGMEU1MUZBRTdGNkZENkU3NzMwRkFEODJENjQzQTAxCis6MTBCRTcwMDBGODY3QUI0NjI4MDRFMkVBOEVEN0JFODNGNjMyN0QyRjAwCis6MTBCRTgwMDAxMUQ0OTcyMUFGN0UxRkIxQjc3Rjk4RjM4MDRCRDM0OTcwCis6MTBCRTkwMDBBQjdGRTJBOTdGQ0Y5Rjk3MERGNDYxRjQ3NTFDMTRBQkMzCis6MTBCRUEwMDAxOUREOUVGMzAyREQ3NEY4NjM3NkQ5NEVBRUNGNEQ3ODdFCis6MTBCRUIwMDA5NEI4REM5OUYxNzlCNkJGODZDRjhFMEM4OEI3NTQ4QUQ2Cis6MTBCRUMwMDA4NTE2ODlCRTNCREY2MkM1Nzk5RDZGNEI2MEZCRDg5RUFFCis6MTBCRUQwMDA5NENCOEFFNzk1NkZCMTdCRjRGQUExMzI5Q0U0MzFFQTA2Cis6MTBCRUUwMDA4QjgxMUVCREJFMzhERkZFOUMxQkU0N0U0OTlBQzU3MzY0Cis6MTBCRUYwMDAzQzE3RjhDM0M3Rjk4M0YxOURENjdGNjUzOEQzRTMzNDg3Cis6MTBCRjAwMDBGNDYzMkM5RkFGMTdBNkIzN0Q0NTM1RjFENjE4RkU4MTlCCis6MTBCRjEwMDBGNjVDOTJBNjc4OEU1M0JENzA3QUNCQjA0NDE4OTdGQTJGCis6MTBCRjIwMDA3MTFFMThBN0FCQzZFMzYxRTNBNjc5RjQ3QzU5QjFENEJFCis6MTBCRjMwMDA4MUY1MzVGOEUyRjVGQkY3ODYwRjc2RkMzRUI2QjE1ODkxCis6MTBCRjQwMDAxM0M0NjlFMkQ1OEY0QjBGRTk3MzA1RkMwM0QyMjY3RjNBCis6MTBCRjUwMDAwOUVCOEUyMzRCNUI3NzI0MkM2QkZEMDZDMjYyRDA3QUYzCis6MTBCRjYwMDAwREJDNkYzNjhDNDdEQkE5OUEwRjBERURFMkQzNUQyMjM1Cis6MTBCRjcwMDAyNzM0N0E1MjNENzkxRENGMEZBMUNDOEM3NEY2RDMxRTk1Cis6MTBCRjgwMDAxMzY5N0ZERDkyNzMyNUM0NzkzMzI1MTVGNTVEMDAwNkFECis6MTBCRjkwMDBBMkZDNTQ2OUVCNTRGQzJBQTJCQjAzRTM5RUUzMzRCOTMwCis6MTBCRkEwMDA1NzZGRkYyMzY1Qjk0RkZFNTlDNjc4MDZGOTBCRUQ5RDEzCis6MTBCRkIwMDA3RTk3RjlENzA1QTREMDBENEVDNkJDOTZGMjk5QTAyNzVFCis6MTBCRkMwMDAzRkIxNjhGNjQwN0QzRUNDRkIyQ0IxRTA3RUZFNTlGMkRECis6MTBCRkQwMDBCNjNCNTc2Nzk3OTU0QTNDM0VCOTkyQURDRjQxRkExRkExCis6MTBCRkUwMDBDQzhGREE2OTg2RjVCQUE0QzE1ODJFMjYzN0E3ODIzQ0QxCis6MTBCRkYwMDAxNEFGOTc2MUM3OTYyQzgyRjU1RUI3NkYzMjVCRjJFMEEzCis6MTBDMDAwMDBCQzRCNDg3NTFERDgyOUFCNjVCNjhGM0FDRjQzQTQyQkRFCis6MTBDMDEwMDAyODVDOTVCQjlFQzkwNzdCMzYyMDMxN0RBRkY5Q0Y4QjVECis6MTBDMDIwMDA5MjE5REM2NTI5MjFDNTQ3QkY3RkRDOTI3QkRCRjcwOENECis6MTBDMDMwMDBCNDBGRDU4MTVFMEJCQTg4Mzc1NjNDNjZGRTRBMjM3QzI2Cis6MTBDMDQwMDA5NzgyREYwQzJGMjFDQjBENzA2OEZENkE3MDg4NUI4NEFFCis6MTBDMDUwMDA5ODc5MUEzRjkzMDQxRUQ3NjFGMkIxNTYzMkRBQUY4RjQ2Cis6MTBDMDYwMDA3MzNDNjhFNTBEQTY3MkEzQTlCRUM2MjczMkU3OTM0Q0MwCis6MTBDMDcwMDBDOUZGMzhFODlGNEE1QkNGMzRCNEQzMDhFNThGRUM2ODNBCis6MTBDMDgwMDAzRDI1NUE2RkMzQzVFQTU5QTE5RTg4RjUxQUE1QjFGMTlECis6MTBDMDkwMDBFQkQ5QTNGRDM1QzVFQUFGNzJEN0I2NTc4Mjk0OUZDQUQ0Cis6MTBDMEEwMDA1RTdFQzIwRDQxREY0RkE0RkE1NDg4N0Y1NTZDN0VDODc2Cis6MTBDMEIwMDAwRDc4M0EyNTA1REQ0MEVGNEY0MjYyQ0NCOEUwN0JCREZDCis6MTBDMEMwMDBGOEYyMzkwNUYwMjM5MEI1MjlERTVGN0NFNDQ2RDBENzNECis6MTBDMEQwMDA1RjZFOTYzMTJGMjZCMEM1MUFCMTUyM0VBRTZBNTkzNDAyCis6MTBDMEUwMDAxM0UyRjdCNDdDOEM5NTFGRkUxNEY2MEQwM0FENDY3QTZGCis6MTBDMEYwMDA5NkJERjA0NDJBQzQ4OTI4MjY5OUJENEQyMjY4Nzc1NEZDCis6MTBDMTAwMDA2REZBRjMzNEQwRTMwMUQyODM3QzY4NkUwN0UzNUY0OEI1Cis6MTBDMTEwMDA0NkI5MkY1MjEyRkI3RUQ3RjIxNTAyNUNDRTAyMkQ4RjRDCis6MTBDMTIwMDA3QzBBNzkwOTAxMTNGRjk0RjZBRTI3OUQwQUM0MTFEQTNGCis6MTBDMTMwMDAyNTU3MEFGQUU1REYyNURGMDUzREEwRTE4Mzg0OTgzRDE4Cis6MTBDMTQwMDA1MUJCNzVDM0U4NjMxNDlFQUU0REZGRUMxNjBDN0UzN0YxCis6MTBDMTUwMDBFM0MzRjNFMUY5QkY3QTU1OERBRjY3Q0U3MTdGMjhEQTdCCis6MTBDMTYwMDAyRTg0RURENDU2NjZGRjkwMzZGNkFDOTAyMzZFQjAzNzMxCis6MTBDMTcwMDAyQjlBNjQyRkU1NTA1MkIxRURCOUU3OUYwMjNGRUQwM0QyCis6MTBDMTgwMDAyQkZBNjlFNURCN0VGM0VFMDQ1QTJFREYyRUE3Q0M2NDkyCis6MTBDMTkwMDBEMzcxMEFBOTUxQkEwNEU4RkY5NjhFODlEMkExRUNEN0NGCis6MTBDMUEwMDBCRjUxRDQ1MUVDRkQ0RjkzQTNGNDI4REZCRTVGMjFBMzEwCis6MTBDMUIwMDBGQUUyQUYyMEJDNUZFOTc0QzZBMDRCRjhEODM0QjA1N0EwCis6MTBDMUMwMDA2QUI3N0VBNTgwREZGNUM5M0U4MTBDQzhFQ0RCQkVCNDQyCis6MTBDMUQwMDBFOTM3QjgxRTAyOUU5MDhFOUM0RUJENzRFQjQzQUZDOEVCCis6MTBDMUUwMDA4REFGRTY2MTNEMEZFOEM5NzhGNDdBOTFFQkU1Q0E1RDYxCis6MTBDMUYwMDAyRTkyMDRGMUNGM0Y1ODQzMzM4MThFMkZEREUzODY3OUIxCis6MTBDMjAwMDA5Qzk0QUExOTVGM0ZGMzUwMkFFQ0ZGOTVDQUMxNTQwRkMyCis6MTBDMjEwMDAzRUQ5RkJEMjY3RUY0MzdFMkIxMUFBNTNEOTNFQTY2RkJFCis6MTBDMjIwMDAyMDhGOTcwRjg0RjkyRDZDRkMxMUNFQUY5OEY4OTFFRjA5Cis6MTBDMjMwMDA0QTlGMTEwQjIxM0VGQzg1NDRBNjZGOEYyMTE3MzdDOEZBCis6MTBDMjQwMDA2Q0ZGRTlFNDQ2MkIyNEY5OTE5MzYwRTc4MzdERkRCNjBBCis6MTBDMjUwMDA4ODcxNTY0MjE2RTMzRUQ4N0Q1QTFDOTcyQ0MxRjIxN0JFCis6MTBDMjYwMDA3QzVGNkFCODZDRDFGQzQzOUI4MTVGMzczRERDMDFGNDk1Cis6MTBDMjcwMDAzOTNERDgzNzAwRTBBNDc4MDg3MjdDMDlCMERGMkYxRTYyCis6MTBDMjgwMDA5RDNBODBEMTg3RTUxQjYwM0JBQUZGMEJFMDNERDRFRkQwCis6MTBDMjkwMDA5MDcxOUY1MEQ3OEVFQjRCMzZGRUJEN0M3QzBBQjcwMzY2Cis6MTBDMkEwMDBENkIzOTNBOTZDQkZEMjNDQkZBNTdDN0VGNEFGODNFODI0Cis6MTBDMkIwMDBGODRCMjdERjRDREUzN0FENjJGMkFEQzk3QjY4RDY3NDMwCis6MTBDMkMwMDBGOEZFRjkzQjRDN0VBMDFEQUMxRjE0QUVDODAwRkNCRUFFCis6MTBDMkQwMDBGRjU2MDFGNTgxOTU0NDYyQzlGNTI2OTlDQkI1RjE3QkVFCis6MTBDMkUwMDA4MENBMjlDNDA1MjhEQzEyRTQzMzQ0Rjk4NEY2OUY4QzAzCis6MTBDMkYwMDBGODQ3QkZBNDc4M0Q2REE3QjNDRjAyMzAxRUQ2NTNBMjM2Cis6MTBDMzAwMDBFRjc1RUI0NzA5RDcwM0QzNjVBM0ZDOTNDNkZFOTc2NThBCis6MTBDMzEwMDAyRjU2QzgyNDA4QTY2NUM1MDc1NkY0QkIyQkI2Qzk4NTk5Cis6MTBDMzIwMDAzMEVGMzNDRDA3REZGRDMxRTVFQjMzNjE0RDRFOERGQTU0Cis6MTBDMzMwMDBEMzJDQTdBNTNCMzYwQkMwOUY2NjM5M0Q1MzRBNTdFQjFDCis6MTBDMzQwMDA1ODcyNEFERkM3OTREM0QyQ0VGRjJCRkE1M0MzNUJDMEQ3Cis6MTBDMzUwMDA4NDM3QUEwNzg3MjQ1OUUyRTNDRkFDMDc1REIyMUE1M0FBCis6MTBDMzYwMDAwRkQyQkY3NzQ4N0U1RkJFRDNGODRERTMzMzZBQTEwRDhECis6MTBDMzcwMDAwMUZERERDQjhGMUFCRkY1RjJBM0M2NkZFNjc5MUFGMTg2Cis6MTBDMzgwMDA2NkZFM0UwMTBDMzUwQTU3RTE2RTE5RkQ5MjhBMzZCNkZCCis6MTBDMzkwMDA3RjQzREIxREJBMjIwRkYxRTNDM0U1OEJENDFGQkEyMjIyCis6MTBDM0EwMDA0NTVGMEU5OUNBNjE1MzdEOUZBOTVDNjhBQUVGMzc5NUQ2Cis6MTBDM0IwMDBBQjBERjUyQjVBMEYyQTJDQzkyODYyQTg2NzVERkExNDE5Cis6MTBDM0MwMDBGOTM4ODY3REFGQUQzMzgxOTY0Rjk1MjBGMDQzN0E4RjUzCis6MTBDM0QwMDAwMjdBNEU1RTRFNEQzMzg4OUZFRDE1RDFERkVBNTY3QkQzCis6MTBDM0UwMDBEQ0M5RjRGRDQzNzZFNkM3NzY3Qjc4Mzk4OTk1N0JGQTFDCis6MTBDM0YwMDAyQjc1QTBFN0I0RjczRDc2MTZFN0VDMkVFQzcxMjdFOTM0Cis6MTBDNDAwMDBGQ0ZCNjM2REEyMUJGNjgzM0I0MzJDMUZCNTJGM0NCNTkxCis6MTBDNDEwMDAyODM3OUQyNERFNzcxNjE3OUMyQTNBMzM5NjgyRkY1NkRBCis6MTBDNDIwMDAyRjdBQzEzNTVDQjBFQzc2MzdFQ0JCNzVCNzBEQkI2OUM0Cis6MTBDNDMwMDAzNjdEQkZGMEIwMDhFNjMzRTk3NkI4NDcwMzVDMjRFODAwCis6MTBDNDQwMDA5MzA2RTZGM0ZDMDlGQTc3OEEwNDdGMzkxMUYyMjZEQUJCCis6MTBDNDUwMDA5ODdEQkQ2MDhEQzkxRTc2REVBQjYwN0VEOTdBNUQ1QzRECis6MTBDNDYwMDA0QkM3RkY2NUJDOUZEMjQ2RTNGNzMyQjIwNkY5QUZDQ0FCCis6MTBDNDcwMDAyNDBGN0VFRTBGMUNENUU0MjE4N0U0QjBGRDZEQzJGQ0Q1Cis6MTBDNDgwMDA1OEFFNzdBNzhBRDkzN0NEQTY3OEVGNkUxNzMxNkZGNkY5Cis6MTBDNDkwMDA3QzlCNDhFQTYwOUVDRDAyRUU3MzkyNjA3Rjk0QUIyQTRCCis6MTBDNEEwMDBEMjgzRkE0RUMzNEIxN0M4OEQxMjVGMUY3NUVERkNEN0IwCis6MTBDNEIwMDBGQzA3ODEzRjVFRjlFM0U4QTdFOUIzRUI5NTBGNDZFRTkxCis6MTBDNEMwMDA4MUYyQUVGNzMyRkU0OEZBRDYyRkQ4RjczNUVFMjM3NjUyCis6MTBDNEQwMDBFRkIzNjI5Q0FCN0JERjZGMzMxRTg0RjJBQjU2OEM3MzgxCis6MTBDNEUwMDA3NTJGQjdFMjNFNEE3MDlGMkIzNDAyQkUwRjY2RkU0MEE2Cis6MTBDNEYwMDBFRERFQUY0NkIzM0NDOTE1NDhBN0JGQzhDQzFGMzlERjM2Cis6MTBDNTAwMDBGNkVGMUY0MkZFQzhGOTM2M0EyQkIwMEJGNjI1QTBEQzM5Cis6MTBDNTEwMDAwNDVFQjVBM0ZGRERCREY3QUI3Q0JGRjNFRjM3OUYyQTA5Cis6MTBDNTIwMDA4NUY4OTFGRjVDNjRGNjBFRTBENzI0MTYwRjBFRUMxOTI3Cis6MTBDNTMwMDBGRjFDRTQzNzU3QjZFQzU3MjBDRTVFRjBEQTVGNDc4MzM2Cis6MTBDNTQwMDA5RUVDREVDMUVDOUQ3MzcyRTdCM0IwMUY2NjU1M0U1RDk1Cis6MTBDNTUwMDAyRTUzM0M5RjAzRTExOTQ0Qzg3M0NBOTg4MjYwNzYyQzFECis6MTBDNTYwMDBCQzMwM0M3NDUzM0NDMEJDMjg1RTRBNDFCRkM3QzM0NzgzCis6MTBDNTcwMDA4NkYyOEY4QThGNEZFRjYyN0FFQ0JCOTg2NzFGQzU4QjZDCis6MTBDNTgwMDBFMDYzRUY1RDIxOUI4MEYzNjdFRkY3N0QzNTFBRjRDQzE0Cis6MTBDNTkwMDA5OUYwMzJCNDQ3MkUzNUVGNkIxNUI2Q0ZGMjNGNjdERTE4Cis6MTBDNUEwMDA0MkU0NzJFNjNERjcxRjk2REU4Q0ZGM0Y4MkY1QjU3RkQxCis6MTBDNUIwMDA1RjM5RThDQkU3QkJFRUM3RjI0QjJFMkZDMjdCOTlGMjc3Cis6MTBDNUMwMDBGRkQzRkY2OTc0REY0MUU5RUVCRTM0REQ5RkZFODc5RDM2Cis6MTBDNUQwMDBGN0E1RTg3RTk4RDNEREU1ODFGREU1RUVCRDdGQzVCODIyCis6MTBDNUUwMDBBOTM2RkY0QkNERkJENUZGNDdFN0FERDlFQjMzMkNENUIzCis6MTBDNUYwMDA0NzY2RDFGQTQ3NDg2NDdEMjE4NUYzRjVGNEE5RUZDQzZECis6MTBDNjAwMDBBMjVGN0YxQkM3MUUzOUFEQjBGOEM3NkYwOUNCMTMwQ0YzCis6MTBDNjEwMDBBNjA5MkNDRjgzRkI0NTA1ODRBREVCMDU1OTI1Njg2NzNBCis6MTBDNjIwMDAxNDY0M0Q4MkY2MDE5MUFBOEZFNDUwN0NDQ0M4NThFODhFCis6MTBDNjMwMDA2NUY5NjA2M0YwMUNDQTc1MDNBRkY1NjIzQ0QwRTQxRjc2Cis6MTBDNjQwMDAxNjVDN0Q3RDNCRjgyOTA3OTc1MUY4RTgzODA3MDc4QjgyCis6MTBDNjUwMDAxRTZBMjk5MTI5RTk3MkM0M0ExQTlGQzdFMDc5QzgzRDM4Cis6MTBDNjYwMDAxREVCNEQ3MTFBRkRBMzk5RTBERkU4RkNCREVCNTVFMzJFCis6MTBDNjcwMDBGNzY5QkNGRkU5RTQ0MDBBRTQ5MzRDRjdDQTI0MDRGNUU3Cis6MTBDNjgwMDA0OEZEMEFGRDNFRjIzNDUzM0Y4N0MwQUZENUM1Q0JGRTBGCis6MTBDNjkwMDBBM0Y4NEJCNzMyM0ZGMkI3NjRDOTkxMUNDMDVGQkE4Q0E0Cis6MTBDNkEwMDBGMUMwNEJFMjhGQjBGQ0FGRUIwNkU2RTA3OTE0MjI3OUUzCis6MTBDNkIwMDAxMTdGMzMwNjU1NzI3QzMyQkY1OUUyRUQyNTY3NUQwNzY1Cis6MTBDNkMwMDBDOEFENDRBOERGQ0JFQzMyRjQ5NzM1QkZGNzUyNzgyNkRCCis6MTBDNkQwMDBEQzlGOTZGOEQwMUFERUE1NzQxOUYzNTY3NUZEMjI1RTFDCis6MTBDNkUwMDAzNDdBRkM0N0U5QTBEMUVGM0Y0QjhGNzMyNjdBQTQ3RkMxCis6MTBDNkYwMDBFRTkxNDAzRTBCQjhGRDNGRTVGMzBFMTFDQkU5NUUwOTJDCis6MTBDNzAwMDBGN0EzQjhGRDNGQzk5OTI0ODFGRDdGQUQ3NDU0MDRCOUU2Cis6MTBDNzEwMDAyQ0IxQjVDRTgwMzhCRENEMkIyMDVGNUZEOTY1NDFGRkYwCis6MTBDNzIwMDBDNjk2MjcyMERFQjMxQTI0MkMxRkI1NzhDNjgyQTE3REI5Cis6MTBDNzMwMDBFM0Y3NzY5RDc5ODA0MDdDRDhBN0EwRTE0RDBBNTk3QzJCCis6MTBDNzQwMDBGRTJGREY3RTNCNTEzQkFGODFERjA5Qjk4MUZBNUYwQkUyCis6MTBDNzUwMDAxQTQ5QzQ0MUU3Qjc1MDIyQzFDNDY0ODhFRjBBRTQyM0YwCis6MTBDNzYwMDA0MzdDRDc1ODg2QkZFRkE3NDZGQkI5NTRGRDc4N0FFNERGCis6MTBDNzcwMDBFRkZEREM0NUY1RDY0Nzk0Mjk3NkMzMTNGNzU1MjgyQkYyCis6MTBDNzgwMDBFOEZDRTNFRkI2MzE3QzA1OEU5MEQwNTBENDBCM0VCMTdGCis6MTBDNzkwMDA1MEI3NkZGNjg4OTVFOThGNUQ3RkRBOTEwQjcxQjE0OURCCis6MTBDN0EwMDBEREQ5ODk0QzlGMEU0N0JGMjBDMEZEODJGMzQ0NEQ4NEU0Cis6MTBDN0IwMDBGQzgzRjM2REMzMTI3MTVGQjA1RDc0Rjk2M0M0NjVCNjM5Cis6MTBDN0MwMDA3MkZGRjk5RjIwOUY4MjNFQkIzNzkxN0EzODg3RDE0RDA3Cis6MTBDN0QwMDA3QTMwMUUxQkRDNjQ4QkI5QkY3QkJGNTU4QjM3NzFCQUI3Cis6MTBDN0UwMDBEMTNGNTEzQjZGQTQ2MkJFNDgzMDUxNEZCN0FFOTk5RkM1Cis6MTBDN0YwMDA0OEEzRkJEMjAxRkUzRUQyRUQ5N0ZDNTdGMTBCRkUzQTY3Cis6MTBDODAwMDBFMDc3QUJCRDczNUFBQ0YzNjAyQjM5RkU2RTNDRjAzNTZDCis6MTBDODEwMDBDNjMxQUY2RTZCQjIwMEZGNUVCREM5NjJEODZGMEM1QUY1Cis6MTBDODIwMDBCOURGMzU4NjhDMDFCODZFM0M2MDc3RTUwMTVEREE0NThECis6MTBDODMwMDAyRkU0MEYwNkRBM0U1NUZDMzFGNkFEQ0NGODg0RkUyMTJDCis6MTBDODQwMDAyRUJFQ0ZDQUUyRkM3QkU0RjA3Q0MwRUI5RUIzMzZDQ0JDCis6MTBDODUwMDBDRkQ5QURENDk3Qzc4MkYzNEEzQkQzNzMwQjQ5Rjg5RTI3Cis6MTBDODYwMDBEMTk5RkY3OEY4OURENEVEOEM0QzA2M0Y3MzEzRTE3MTlDCis6MTBDODcwMDAwQzMzRkYxMUU0RTNGMzVCMDg5RTBGMDVCRjE0RjRDMjExCis6MTBDODgwMDBGOTY2NzYwRTk4QTI2NDJERjhEMzU0REU3RkEwOEZDQjg0Cis6MTBDODkwMDA1Q0Q5QkFGRDlGQzAwRUE4NkExMzNDOTAzQTVCMjU3NTFGCis6MTBDOEEwMDAyQTEwNkYwREI0MjY4OUIwRUVFNkE4NUE1RUE1NjdENEFCCis6MTBDOEIwMDBBRDNBQjlEODY3NjVGOUM2MDcyN0VDQjkwM0M2RkRBQzMwCis6MTBDOEMwMDA0QjIxNjA4RkY4NUVFRjcxQzNCQUZENTk1QjZFNjJBQ0FECis6MTBDOEQwMDBCQzc5RURGOUVCMUEzMjYzOEEwNEZEMTBDNEJCOTkxRkQxCis6MTBDOEUwMDBCMjlCMUQ4NkYyRjc0NEZGMjA5MEFGMUJBRDlERjc3QUY3Cis6MTBDOEYwMDA2M0QwQ0Y2RjYzN0M3NkQ5RkEyREY0RkY5OTdFN0I0N0E2Cis6MTBDOTAwMDBEMzZGN0VCMTUwMjc0NzU5QjYzRUZBNkQ0MDJDRkRCNjI1Cis6MTBDOTEwMDA0NDUwMDcwMERFOTdFQzFEMzYwMEU4QkFFNEIwREMzRjc3Cis6MTBDOTIwMDA5NjdFREI1NkMzRjZGMzVFRTZGOUIwREQyRDU0QkY1REFGCis6MTBDOTMwMDBBM0QzNkYyRDM2Q0M4QjMzQjc0QkI2NTlGOEJBNzgwOUUxCis6MTBDOTQwMDBGRDE2RkFFRjkxQkY2REEwREY2MkNDNzc4NDhERTkwRDAzCis6MTBDOTUwMDA0REJGOEQ2RTNCODZGQTZENzQ4QkM1OTAzNzlBNkVCQjVBCis6MTBDOTYwMDA5NDdFMTNGQURGMEFGNjcwQkJFQzREODhDMTNGREJCODRBCis6MTBDOTcwMDBGREZEMzJDRkMzODM3MTQwQ0ZERDYxNjNGQjlCOTdBQjdECis6MTBDOTgwMDBFN0IyRUQ4Q0RFOTdENDczRkY0RDc4RDZGNERDOTI5RDQwCis6MTBDOTkwMDBEQTM5NDczMzFGMzIzREI3NjQzN0Q1NzMwMkYwMjNEM0ZBCis6MTBDOUEwMDA3MzRCRjZCMjdCMUNDQ0ZBMkRBQjhGN0UyMzU4QkYyQTdCCis6MTBDOUIwMDBDMkRBMDc1QTMzMzdDQ0E1RkQ4REYxQzk1RTFCQUQzRkY2Cis6MTBDOUMwMDAyNkFBRUZDNkVBRjVERDFEMzY3NkVGNDIxRjdERDc3RTNCCis6MTBDOUQwMDA3OUZBNkUyN0Q3Nzc1NDhGMEQwNUZENkFFNjBGNkY5QkE2Cis6MTBDOUUwMDAzMUVGNzhDRkY4OTNDREJGMDY3OTc5NDNDNDdEQzNBM0U3Cis6MTBDOUYwMDBGQzVDREE5QkUzNEZFNjAxN0YzNURCOThGRUFERTVGQzlFCis6MTBDQTAwMDA3N0FFMjY4OEZEMTdCQ0NFRTY1N0U5NjRGOUM4NTUyREU4Cis6MTBDQTEwMDBDQzNFQUM2QTE2NDIyQUZERTdCNDA5NUYyQjAwRkZBMkE4Cis6MTBDQTIwMDBCRDAyMTk0MENCQjNBQ0FDM0U3OTQxREJGNzIyMzM3Mzg2Cis6MTBDQTMwMDA3NEZDQjA2MDVDMzlDNkVEMTc0OEM0MDY3MUY5NzJFNzQyCis6MTBDQTQwMDBCNDRGMjAxRTVGM0U4RUM1RjFDQkY5RkI0NTg3M0JFQjEzCis6MTBDQTUwMDAyMDlFQkRFODQ5MDFGNzNEMDlDRjA3RDBGMjFCNEJEQTE0Cis6MTBDQTYwMDA5NjYxQkNENjlDMTdBMEU5RjM0NTIxRTNGQjcyNTMzRUM3Cis6MTBDQTcwMDA2MzEzOUZFNzJDQjExM0YxNDJERTEyNjNFNjI1MzQ5OTZDCis6MTBDQTgwMDBGMUQxQ0VGMUIxNDlDNDc1QjMxNzFGMTQzRjZBNjY1Rjg3Cis6MTBDQTkwMDA3QzUwOEFDRUNDNDk4RENFN0ZEMTFCNzQ1RTc5RDE3OTAyCis6MTBDQUEwMDA2OUY4MzBDRjRGOEIzQjk3RjM3NkYxRTZBQkUxQUZDRjMwCis6MTBDQUIwMDA3QzM1N0M5QUU2RkQxQ0U4MEQ1MDA4MzkyNDE3RjI2MjlCCis6MTBDQUMwMDAyODFGQTBERTA4RkU0RUM0RjNGQjg1OTM0NjBDRDBFQjc2Cis6MTBDQUQwMDBFMUFENUM5RkU3RDY0RjJBMTg0ODAwNUZBNDFBRjhBNjdDCis6MTBDQUUwMDBCODYxRjFBMTgxNzRERTYzREY1N0M3QzBGMkY4QkQwOUY4Cis6MTBDQUYwMDA1NjNGRUM4RjZFQjVGN0EwNUVEM0Y4RUExQkNFNTdFRjJBCis6MTBDQjAwMDA3MjNDRUUxOTU0OERFNzU0MDNBRDgyMDdFQzhBNDBDNEExCis6MTBDQjEwMDA4RUY4MEI1MEZDQzFGOTk1MDAzRkJGMThBMEZDMDVGMjQwCis6MTBDQjIwMDA3NEYwQzkyRjE5QkVGNjBBMkFDNEM3QTc2OUVCMEZFMDMzCis6MTBDQjMwMDA5RkQ2Q0Y2RDYzRjgwRjg0MDRDNDdGMUVFOUMxRkQ5MUI5Cis6MTBDQjQwMDBBQTA2QzExQkExRjVBQjVBMTc2M0RFODNBNjZGRTk5RjQ2Cis6MTBDQjUwMDA1MzRGMEYxRDNGNEFCMUY4MTEyQkU5RDZCRjcyNUVFRjVDCis6MTBDQjYwMDA0NjZCRkRCQkMwOUYzN0JFMjA5MzI2MUQ3RjY2RDFGRjVECis6MTBDQjcwMDBCRThENDEyNzBEOUY5N0UyQ0IwQjFDNEZEQjAwOEY0RUU0Cis6MTBDQjgwMDBDMDU3MEZCMzlGMjI1RkUzMzkxQUVEN0I0MDBBMUFGMEJBCis6MTBDQjkwMDA1OEYwRDQ4NThCRTI2OUFDODYyN0UwNTNEMDUzNkQ0NUJECis6MTBDQkEwMDAyMjk0OEI1QjA1RDIyRkIzRUYzQzYxN0Y1MjJGQjc4QjYyCis6MTBDQkIwMDBGNjFFNjNGRDNGMjNFMEJEMjU2NkJFRDVFNkREODc2RjJCCis6MTBDQkMwMDBFM0YwMkI5QzRCMDNCRkU4NzJGOUY2MUIxM0RGQkU2OTQxCis6MTBDQkQwMDBFRjM5OTIwQjdDQkI1NzYwRjE4M0I2MjRDM0ZFRTIyMDkxCis6MTBDQkUwMDAzQjVCRkZCN0RBMjk3RkMzQkVENjYxRDlCQjUxRUQyQkMyCis6MTBDQkYwMDBERjA5N0NGRDAyQkI1RjdGMkVFOTJBOTgwOEU0M0Q2RUM5Cis6MTBDQzAwMDBCMTYxMUUxOUMyMzE5NEQ5OTU3QUJEQkFDRDRFRkFERjAxCis6MTBDQzEwMDA5QTE3QkZGRjgxQkNGRjc4NzY4RDU2MUUwNUUzNDFCRTkzCis6MTBDQzIwMDA1NzJCMUQyRjJCM0E5RTU5QUY2QjdFRkVBNUU2MzVGMjkyCis6MTBDQzMwMDBCRjM4QUZERTNDNENEMjgxRkI0RTk5OTJGRjMxQUIyRTE4Cis6MTBDQzQwMDAwRkVFMzY5RTY3NDQyMTQwRkI0QTU3MkZEQjc2OTE3QUUwCis6MTBDQzUwMDAyNENEODNFNzlGRUVGMTY4N0NDNkYyREQwQjc5MUVGQkU1Cis6MTBDQzYwMDA1NDcxRTI3QkIwN0U3RUU2NjNGQjdDNzkxNkYyRkI4OTMxCis6MTBDQzcwMDBBMDlGMjdDQjc4OEVFRkIzMjMzMkM2NkIzRjlCQzJGMkM3Cis6MTBDQzgwMDAzODZGN0FFM0EwMDRGMTk5OUI0MDM5NTE3Q0RDMzQ1NjJCCis6MTBDQzkwMDA0MDdGMDU4RTYxQzFCRUQ5MkU2QURGRjg0NkUyN0M3MjA0Cis6MTBDQ0EwMDBFMTFDNTdDRUE2RkEwMjM4N0YzQzY2NEJBODE2OUVERUUyCis6MTBDQ0IwMDA4MjlFOTQzNzAxOEY5MzQ0MDI3OEVDRjBGNTJCODBGQjMxCis6MTBDQ0MwMDA5M0VFRjkzM0MxRkI0M0U4M0E4QkVEQzdCNDkzRkU1MEMyCis6MTBDQ0QwMDA2RjgyQUYzRkJBMDNFMzVCRDYxNzQwN0M3NEQ2NDFBNzlGCis6MTBDQ0UwMDAxM0VFNjdDOTZBQjQ1MDlGMjE4QUJGMDkyNDU0MEI3MTlGCis6MTBDQ0YwMDA5QkYxQzc3REI3MDBCQ0E1RDQ1RTgwQjg3MzY5NUI1MzU4Cis6MTBDRDAwMDBBRDFCQ0E4RDgyNTdBNUZEMDc4MkZFNjk2RTNBOEY2REY1Cis6MTBDRDEwMDAwRDlGNEVGQjBFQzgyM0FEMDdERDA0MUE1OUJEQzAyNjdBCis6MTBDRDIwMDBCODc4MDhERUFGQzMzQzlCRTI0RDAyMUVGQ0RBMTYxMjU3Cis6MTBDRDMwMDA4ODhERjUxQkIyRDE3RUI3MzVEMkY2NzlCMDRFRDBGNkRDCis6MTBDRDQwMDBEMEVGQTY0RkRGQjkwNUU0RkQ4OEM4REEzN0IzN0RFQTM2Cis6MTBDRDUwMDA2MkRBNEUwNUJFRERCNDE4RkI1QkQ0Mjg5MDM0REE1RjhFCis6MTBDRDYwMDA2OTMzNUIwNzRBOEZDODVFRjhERUIyRkY0OTVDQzc2NjZECis6MTBDRDcwMDBEMkYxMDY2NjgyREU4RjRDODEzMkM5MTUzQzE4RUZBQ0M5Cis6MTBDRDgwMDAxODg5NzRFQkU2NzI0RTI2OEU2MEZBNDNFMDY1RUUzNzQyCis6MTBDRDkwMDA2ODc2RDNCQjc2OTZFRjVCRUM1REE2RjRBM0ZEQkMzOTU5Cis6MTBDREEwMDBBRTdGMjZBNDA1MDQ1QTNGQzVGREU3RTMxNENGN0VEQTIzCis6MTBDREIwMDBFNTUxOUVCNzcxNzBEQ0M3NEFBNzZFMURGQUNDQ0VFRTY2Cis6MTBDREMwMDBCNzVBRDAzQTA5RjMxOTE2OTI0MkNDNjdCODcxM0NCM0ZFCis6MTBDREQwMDBEN0RFQkFENjFFODIyQjBFREU5MjdCRDJFMUZEQzE2QjZFCis6MTBDREUwMDBBRDY4RkY5RURCMjYyMzFGOUQxQkRDODlGMUU5OTM4RDM3Cis6MTBDREYwMDAzMjlFMUJBRTZENjRGNzczOUQ2QzY2RUJCOEY4MENEQjZFCis6MTBDRTAwMDBENzJGNzEyOTU4M0VEODc4Q0IzNDU4REY0RTZFNjJFNzYxCis6MTBDRTEwMDAxRDBCOUU5OUFBNDBCOUE0NDlGMEIyRkI4Qjk4N0VENDExCis6MTBDRTIwMDBGQ0I3NjIwRkNCNDdEMEY0NUYyNTlGNzc5RkJDNDU5MzNCCis6MTBDRTMwMDBCRUFCRDRENjFCOTNCRUFCODQ3RDY1MzczQzhERUYwMzcwCis6MTBDRTQwMDBDNEM5RjQyMEQ4RkQ0MEY3QzhEN0M4QkY1NTQ3NjQwMjBECis6MTBDRTUwMDA3NkJGRjA3MUQ3MzRDQ0M3REEyQjYwM0M3RjdDOUJFMDg3Cis6MTBDRTYwMDA4MzdERkREMkY3QUQyMUI0NTc0MzQ1NzdGRjA0RjRGODM1Cis6MTBDRTcwMDAwNzU2MjJBODkwRDc0RUYxNEVGNUMzMzg2QkNGOUY3RTUwCis6MTBDRTgwMDA0MURGN0Y3MkQ0MDY5OTMwOTQ0RjhBMTBDRjVBRkU2N0UzCis6MTBDRTkwMDBERTY2OTZDNzkyNzc3NDdEMkE5Q0I3MjQ1M0ZBQTFCRUFBCis6MTBDRUEwMDAyRDY5MTA4OTVGQTczNzNFMTE3Q0I3RkM5OEU5NjVCQ0Y2Cis6MTBDRUIwMDA5RjQyQTM1RjlFNTI1RjBDRUJEODMwMDdEMzRCRUE2NkNDCis6MTBDRUMwMDAxOTcyNDRDODYxMUUyN0ExRjYzNDlFQkY1REI0N0I1RDE0Cis6MTBDRUQwMDBBQTQyRUJENUYxRkM4RjQ1N0JEN0E1OEFGNDdEMkRBQzFBCis6MTBDRUUwMDA1RkI0RkUyMjg1RjVCRjY4OUZFMDY5RDJGNUFGQjVENzg0Cis6MTBDRUYwMDBGQUQzRkE1MTc2MUJGQjE5QjY5Nzk3MkZCMzFGMEQwRTc1Cis6MTBDRjAwMDA2REZDNzhGNkY4Qjg3RkI5QjAxRUVFOEIxOUY3OTY4OEVECis6MTBDRjEwMDA0OUM3RTMzRTlFMzk0Q0JGREZBMTNEQjVGODZCRkUzQkYwCis6MTBDRjIwMDAxNkUyRDNFMTZEREM5RjFDQzRBN0UzOEI5NkIxNTRCRTFGCis6MTBDRjMwMDAyOURENkU2ODE1NDIwMDRBQ0JEODYzNEE2NTFFOTYzRENFCis6MTBDRjQwMDAyMENGNTUzQzRFNUIzNTg1RUQ1QkI1RTQxQzVEMDFGMkIxCis6MTBDRjUwMDAzRDMzNEY0MDNFMjA0MUJGRDIyRjA1RUQyMDE1RjYxNzNGCis6MTBDRjYwMDA0QUYyNThGQjEyREExRUU0QUVFNTQ5MjY4NzU0MUZBOEEwCis6MTBDRjcwMDBBMDJGQUExQUQ3NERDM0ZBOUIwNDE1RkE2RjY5MkFDMkNCCis6MTBDRjgwMDBGNUJFNzQ5QzQ4RjBGQkE2NjM2ODdGOTRCNjFFNEIwMTA3Cis6MTBDRjkwMDA3OUE1RjJCOTFFRDZERkFBODk1NkJDQ0Y0QjkzM0I0RDdCCis6MTBDRkEwMDA4RURGOTJGOTdENEQzNkNGMjhDOEVCN0YxMDgwOEEyMTI1Cis6MTBDRkIwMDBCRkUyMTFDMkZDRDQ2NjE5RTUyQzMwOEVDOUU1NUJEQkZCCis6MTBDRkMwMDA0NDk0RTc4M0Q3REU4RTcyNzg2RUIzMTA0NzhFMEIxNENECis6MTBDRkQwMDAzODk3N0MzMkM0QkVGN0NBRjE1NjgxQ0IzMUQzMEYyN0M0Cis6MTBDRkUwMDA5RDRDQUUwQkUwM0JDOEYxNEU4MUZCODNDQzFFMzRDQjk1Cis6MTBDRkYwMDBCMTI2OTc5NzkyREZGMjJEMjY3OThFMjNCNzFENTJFNzNGCis6MTBEMDAwMDBBRDMwRUUzREQ3REExMUVFODJFRkVGN0VGNzFFRDQzRjYyCis6MTBEMDEwMDAzMkU2N0QxNDdDRkY4MTU0RDA3N0M1MTJDQjU3RDJGMDE1Cis6MTBEMDIwMDA1ODI5QjE3Q0I2M0U3MEFDNUZBNjBDQkMyQzc4OEM3MEQ1Cis6MTBEMDMwMDAzQzZENzc0NUY1ODcwODdDQ0VFRUUxMEE2RTkyOTFDRjg0Cis6MTBEMDQwMDBDRDcyRjg1Rjk1OUZCRjk3M0MxRkU2RkNBM0MxMjNFRTBFCis6MTBEMDUwMDA2NUVEMjE3RjJDNDJGMUY0REJFNkU3MzA0RkY1RUM4QkY4Cis6MTBEMDYwMDBDNzZFMDQzQzk3RUZBMTdDNEJFNzdCQUVEOUM1RUY3QjQ1Cis6MTBEMDcwMDAwOUUxM0E1M0Q2MjI2MjFFMzg5MTIyRjlCN0I4RjQ3MjA4Cis6MTBEMDgwMDBDOUYyOTBDQTVGNzYyMTdGOTRFRDYwRjlBNDY1QUY3QzA4Cis6MTBEMDkwMDAzQzFBRjM0NDk2Rjc2MDdFNTVGMDQ1NkU2RjA2M0I0N0E5Cis6MTBEMEEwMDAwMzVGOTc0OTJDMUZDQTJDRTdCNzNBOThGREQ5QjUzQkM3Cis6MTBEMEIwMDA2MTM2Q0M0M0Q4QzJDRUU5OTc4NTZGOTc4MTBGQjU3QTk4Cis6MTBEMEMwMDAzRjc0Qzg1QTNERENCRjBDNTJCRTg1RkQ3NTgwNEY3RjUyCis6MTBEMEQwMDBFRTVDQ0I4M0VBREFDQUU0QkVBQzU1NDY3RkE5NkM0QjYyCis6MTBEMEUwMDAxM0M2QjEwMzVCM0VDNTNDRjc4Mjk3Qjc2MUZDMjBEMDA1Cis6MTBEMEYwMDAyQTFBRjMxRUI3ODhCODdGNDU5RkI4NEY2NUNFM0ZBQzVDCis6MTBEMTAwMDA2QUE5QzRGREI2QUEzMENGRUYzM0U1QkY5NUJGQkNGNzFGCis6MTBEMTEwMDA5NTIwNDU0REY5QUY1RjcwODMxRTM4RERCMUQ5MERGODBDCis6MTBEMTIwMDBBNEZENjFERUUwRjczRjk3MEM3OTUxRjFGMzdCN0RDNkZBCis6MTBEMTMwMDA3Q0MyRjBBQTk4Rjk4NEE3RTExRjk0QzExRjcwNzA3RTg5Cis6MTBEMTQwMDBENUYyMzBCN0Y0RTM3OURBOTFGQ0MyMThGMUZCREU3MzYzCis6MTBEMTUwMDAzQkRCQkU3ODE2RjJEQ0JCNzY5Qzc5MTZFMEFFRjhEQkUyCis6MTBEMTYwMDA2N0NGNDIzRTEzRDk2N0M3NzUyOUYwRTJFRjMxNEY1OEI4Cis6MTBEMTcwMDA2QkY3MEIwN0Y3RjNCN0JFODBGOUQ1RTczRUIwQTI5Rjc4Cis6MTBEMTgwMDA3MzZFRUZDOTBDQzg1RjNCQjdGREVCNTQ4OEM3RERCQkJFCis6MTBEMTkwMDA3NzJBQzYyQkVGREQ1OTMwODBDNEQwRUZEQTEzRjgzMjhFCis6MTBEMUEwMDA3NDE5RjlERDY2M0ExQzZDMzk4ODc5NTc2N0RGQjdBMkM0Cis6MTBEMUIwMDAzRUVCQ0QwQjBENTdCMjNDNUI5NUU3ODMzNkM3Q0VBMzU0Cis6MTBEMUMwMDBEN0YyMThBQjVBNkVCOUU5NUFEMENGMkRDQzlFRUJDRDIxCis6MTBEMUQwMDA2QkJDNTQxRUU4M0I5NDlFRDc1QzA2REQ5QTc5OUVBRkVCCis6MTBEMUUwMDA4OTZFNjdFMTFGOTQzRTYxMTNEREJFNjg1OUY4QUJBN0Y1Cis6MTBEMUYwMDBFMDVCNEJCRkI4NzlBMDkxQ0JDMDk3OTZBN0ZGNzM4NzMwCis6MTBEMjAwMDA2RjhGMDNDRUZERUQ0ODA4QTYzMTdBODU2NjBBNjBFRjgwCis6MTBEMjEwMDA3RDkxMDFFNzFBNEVDOTNEOThFRkQxQjNEN0VBODE3Q0UxCis6MTBEMjIwMDBDNkIyQkRFRkExN0M5Q0RCNzkxNEUzQUE4NEU3Qzk5RjU5Cis6MTBEMjMwMDAyM0JEN0YyQ0FGNTlFMEYzREJFNDYyRjlBMzFDRUY5MDMwCis6MTBEMjQwMDA1RkFBQkFGMTNEQ0YyMzY1N0NBQkU1OTdDNkNCMkJFRDRBCis6MTBEMjUwMDA3MTBDNjU3MTY4N0U2RUEwOTJGQTQ5RkNERUFDREU3Q0QyCis6MTBEMjYwMDA1MzYxMUNEMEU5OTgyMTRGNTc5QkI3QjkzRjBGRDc5QjBCCis6MTBEMjcwMDBEMUZDRThEODc5QkI1QUJFNjA5NDRFNkMxREQxRjI5RkE4Cis6MTBEMjgwMDBDRjM1RjFCQzY5RkEzRTdEMENFNEMxQjFGNTNBMTAxMjFDCis6MTBEMjkwMDBERTIzMzFFNDUxQ0I4RjNFRTMzMEU1NDU4NzJFMkYyRjNGCis6MTBEMkEwMDBGQTUyRjBGRTY3RjFGMUExODNDNUFCMzVCQzc0RkQyNUUwCis6MTBEMkIwMDBCNjNFNTYxMjk4REQ0OUZENTMzOTAxRjcwNTk4N0Y3QTNECis6MTBEMkMwMDAzN0Y3NEYzNTdDNjlGMEQ2ODU5OURERDBCNTg1RjkwN0ZDCis6MTBEMkQwMDA2Njc5QUU4QTczNUY1MjBBMUZBN0FBNzVGRjY4RDAzQkIyCis6MTBEMkUwMDA1RDA3NzY3MzdFNjNGQzVDRDU3QzhDRTVERDUyRkQxQ0FFCis6MTBEMkYwMDBEMkVCNjc3RUJGODRCOUJGMENERTVGQTAyRDc2N0Y4MTQ1Cis6MTBEMzAwMDBFNjRGNjNGNjc3NUFGMkREMEVGMDlGRUU2MDc2RDJFOUQzCis6MTBEMzEwMDBCMDM4M0RENkZEMzZCNjA0RDk5MDNGNTBFNzYyRjc2NTg4Cis6MTBEMzIwMDA4ODZFMDdEQTQ3RjdCQUM2QkQ5Rjk4MDI0RjA1RjM3QUIxCis6MTBEMzMwMDA2QTk3RjEzQ0EwOUY3OUYxNUVEMTVBRDcwQzAyRjAzQzdDCis6MTBEMzQwMDAwNEY4RDFDNTE5NjQ4RjlGODA5RDI2QTcxNUU2ODk2QUM4Cis6MTBEMzUwMDAxNERFNUU3QUE0NTg0ODQ4NEY3RjI5OTIwRUZBRkNDMzI3Cis6MTBEMzYwMDA5QzkzMzJGNEY3NkZBNkY4QzhCRjQ5QTQ2RTAwODVFQjEyCis6MTBEMzcwMDBERjgyODI3Nzk5MUFERkFFRDZDQUZFOUY4QTg2Nzg0NjA4Cis6MTBEMzgwMDA5NUI1RTc0M0IwQ0ZDOTZCNzZEQzBGMTdGN0Q5ODMxODkzCis6MTBEMzkwMDAxRjdCOTZEREFCNzE3MEU3NTdDRkUzQkQzQ0JGQjIxMjg4Cis6MTBEM0EwMDA2RTE3MEFBMDBGNEE3ODlDRTJFNENFQUY5RUZENzdCMERDCis6MTBEM0IwMDAyM0ExMzExREJGRTQ1OTVBMUZFQ0U3RTYwNEI0RjdCQkMzCis6MTBEM0MwMDA3NzI0OEU4NjM4NDBDOTZCMEZERTA4RkFBMjA0NzQxRkRBCis6MTBEM0QwMDBEODk5MkYwRjA4RDVEMkZFNEVGNDY3RTUxM0RCMDZFMzhDCis6MTBEM0UwMDBCOTgwRjIxRDJFQ0MyNzNDQjg3MzU3MTVFOEZCNzMyRjdDCis6MTBEM0YwMDAyNzEwRDBGNzY3RTVDRUJGNDEzOUIwMjc5MTM0QTk2ODJGCis6MTBENDAwMDBGN0E5RkE3NTc1MTE5MTU0QkQzRDU3MEU2NTQzN0UwQjEyCis6MTBENDEwMDBDMUZDMTY4Q0JGNTE3RTJFNkY0REM0RjMxRkJBN0E1Q0NGCis6MTBENDIwMDA5RTgzODNGODNENTE4MzQwRUVBOEREQTgxQUYzOUVEOTcwCis6MTBENDMwMDBGNzA1MDk0QzdGMDVBQzNERjdCM0ZCMTA1OEZEODBEMkQyCis6MTBENDQwMDA1M0NDQ0FGNTgzOThEQzc2NjBGREM1MUFCRkYyRUY3RDM4Cis6MTBENDUwMDBGQjY1RjUwMzA5MkMxRTEwRUQ4N0I1QUZCMkIyRkIzNUE1Cis6MTBENDYwMDBDQ0Y0RkQ2OTgyQzBDRkUzRkVGNUNBNThGNzRGQzQ4MDAzCis6MTBENDcwMDA5RkREQ0IyNTkwMjBEQ0JGNEFCNkRCMzE0RkFCNDI4OTI0Cis6MTBENDgwMDA4Qzg0N0NGNTU3MTRCNkZGNTFFMThFOEM4NDdDRjUzRDdECis6MTBENDkwMDA1Q0ZGNTUzODY4OTlCRTFGQzRFMTgwRkE1MDI2QjZDRUFECis6MTBENEEwMDA5N0YwNUVBNzVENzZCQzBGQUZGMjM1OTcwRkZEODQ1N0ZFCis6MTBENEIwMDBCRTNBRjE3NDFFRTRBQjI1NjA5RTc0RTU2QkZGMEJFOTg4Cis6MTBENEMwMDA1RjY5OEREQzA1RkNERkIzREQ4QUY3OTM3NjZEM0Y5Q0U5Cis6MTBENEQwMDAwMTc2NDM5NzFDQzk0OEJFQzhCRTRFNjVEODZBRDhBNzE2Cis6MTBENEUwMDBENkU2NzFCQTY2RTkwNDM4QzdBQjlEMzMyQzhCQTMyRkZGCis6MTBENEYwMDBERTQ4NjA3OTFENEQwOUJFNUYzMTNENjdCQzVGRTY3NDUzCis6MTBENTAwMDBDRDZDQzNCRDg5NjVCNkQ4N0FBQzE5RjQ4MjJFOEUyNzRFCis6MTBENTEwMDA0NkNGMTUzNjQzQkY2NzQ5NjdERDIwNEE5MjRBQTEwN0M3Cis6MTBENTIwMDBGN0M3Q0JCNjY0QTY4M0JGN0JDMDdFMjVFRTVCMUQ5MDlDCis6MTBENTMwMDA1NUY0MDdFMUE5RDdDN0E3NkFCQ0I5MTI5RUE3Q0ZDQUZECis6MTBENTQwMDA5NTI4MUNERDREOUYxNjBGMjI5MDFGNjg5RjFENEIzRjk1Cis6MTBENTUwMDBFRDRENDg0MDdFMkFCMzU5NjM5RURGRkMxREU3Qjc2RDUxCis6MTBENTYwMDAyMDZGNjNEOTc4REVFQ0U4QjgwN0U0OTAwMjcwNEM3NDYxCis6MTBENTcwMDBBQTM4OUYzMkVBMDdCMDdCQTJFNkU0RUFDRjZEMkY5Mjg5Cis6MTBENTgwMDBFQUIxMUU5NTJGQzRDNzIyQjI1RUM5NzNGNkQ1MkI4QkE0Cis6MTBENTkwMDA5NkU2RTU0QUI5QThCMEJFRTlFNTM3MzE0QTI3MTI0QzBDCis6MTBENUEwMDA0MTNCNDlFMjM0MjRFQjA3MUFGMkZEMjVCOUQwMDZGOEQ1Cis6MTBENUIwMDA1MjQ4QTE0NzEyODFENEY1MjhBNzBFMTJDNkE3OTM5QTA0Cis6MTBENUMwMDAyMTZDMURBQTI2MTAxRjNGQzVGNzY3QUQ5MkZBMThERTIxCis6MTBENUQwMDAzN0QzMkVBMjNFQkYxNERFREU0QjcwMjNEQzU2QTk5QTUxCis6MTBENUUwMDA3OEQxREU5OEU5MDE3QjRDMDhGQUM5Qjc5NDFGNkE2QkMxCis6MTBENUYwMDBBNkU3QjI3M0UxQzQwNzc5NkU2RUMyRTA3MzdCMEU3RDVECis6MTBENjAwMDAwREY2MDFFNTMzNzY4RkQ1Rjc0OUE4OTY4RTA3Qzc4Q0JFCis6MTBENjEwMDAzMUZFMzc5OURENjc2RjFFRUYyRjlDMEUyNEI4REY3MDQ3Cis6MTBENjIwMDBERjM5RkNGNTY4RjdFNzgxQkY5RUY4Qjc3MUIwMUZFM0ZCCis6MTBENjMwMDBGNDkwMDhEODRCMDk0RTEyNDkxODBERjdFNDQ5QTdGNUE0Cis6MTBENjQwMDBGMkVCMjZBQzNDOTRCMjMzRTgzNUNGNDRFMzc3MzM1RjVBCis6MTBENjUwMDAxM0FGRjQ3OUFGNUUxNEIxRkRFN0E2RjY5RjVGQUNCREUyCis6MTBENjYwMDA4NjhGODA2REEzRjc3ODZFMTQyRjBFM0U4N0UwNjRFRkVGCis6MTBENjcwMDA4NTRFQzBDNzY4QjdCNzE2RThBOEY0N0NGODIwRTA2MzA5Cis6MTBENjgwMDBCNDkzRjk4MzI5MEQ0NEVGQUZFNTNBOTlCRTVBQzFFRjNGCis6MTBENjkwMDA5RkE2N0Y4NTRFNUQ3RkM0NjNDM0Y4RTgyQThFRjdERUMwCis6MTBENkEwMDBGQTVBRENBNDRGN0RCQjA0NzhFRDUzREYxRUFGQkUyM0Q2Cis6MTBENkIwMDA3NjdENTczQzc4MTI2MkMzOTMxNEE3RkY2MEVDRkE1NTRECis6MTBENkMwMDBBRkJERjc2NjQ0ODU5NzRDNkY0MDcwOUU5RjVCQ0U3NUVCCis6MTBENkQwMDA4MjdGOTVGODYxNkExMUUzMEFCNjFGNjBBMjlCMDNGODg2Cis6MTBENkUwMDA4RkYyODM2M0I4RUUzREZDNUZCNjhFN0U0MzYzRDA5RkJFCis6MTBENkYwMDA0NDkwRUY4QTM4M0NCNEVDMUM0OEUxRkIzMTA3NzdDQTEwCis6MTBENzAwMDAyNkI2NUYzOUY3NUUxNjI3RkFCMThERTU5NzFFRTNGNzY3Cis6MTBENzEwMDAwMUNENkQ2MDdFRjVEQ0E1NkMxRjkxOTRCMjczM0UxRTQ5Cis6MTBENzIwMDBGQTFGOEM3NzI3NzQ0MkU5N0Q2N0JEMTA4QTY0QzJCREY5Cis6MTBENzMwMDAzNTI2RkJCNUY3N0U5QzQ1MEFENDJGMzJDNTVEMzQ3RTc1Cis6MTBENzQwMDBEMkNFMjNDREU3RjY3NTI2RTdDRjg1QTRDNzA1NzI2RjQ1Cis6MTBENzUwMDAzRUY3RkUzQUQ3NkI5QURFMEZBRTIzNTk3MDZFNUZCNDc4Cis6MTBENzYwMDAzOEJDQjAzRjJBRjI3M0E2QzRDREVFRjMyM0JFQzFFQ0ExCis6MTBENzcwMDA3RTM5MkQ4RjJCNEI0RDg0RjU4RDg0Rjk3QkJFQ0ZCMjM2Cis6MTBENzgwMDBFNDdBNzU4MEZFOUM5Njc0QzE4MUY3ODNENENBREUzNDM2Cis6MTBENzkwMDBEMDgzRjIwNTZBRDc1MTU3NERCOTMwOTRBOEJBNzM2NDUzCis6MTBEN0EwMDBENDlFNDNFMTk2M0RFQ0JFNDRDOTUzNDg0QUMwMEVFNEMyCis6MTBEN0IwMDBGNzAzOTA5NDE5QkQ3NkQ3NUIxNDBGNEJENkE5Nzg2RUZBCis6MTBEN0MwMDA3NUExOTNEOTk5QkY3MDE1REVFMzFDMEJGNkU1MzgyRkQwCis6MTBEN0QwMDBCQkU3RDY0OEM3RTA0RTM2QkY1QTk4NUY2NjVGQjg2QjY2Cis6MTBEN0UwMDAxNUFGMTdFRENFMTlENDYyQzAzODhFMTc3RkRGNDFCNDY0Cis6MTBEN0YwMDBBQUVGQTkyMDhGRkYyQ0IzREYyQkU4ODMwNzQ2QkZGM0U2Cis6MTBEODAwMDAyOUM5NzgyRkZCMDJGN0VBMEY4MTRGRDdGMEZCMDg1N0ExCis6MTBEODEwMDBENjY0RTE3Mzc1NEQxQURBOUQ3NTM1NUU3QzZBNzhCMTEwCis6MTBEODIwMDA3OUVCRjFERTM3REI3MEQ2OUZDREUzNjc3NjA1QjU2NTIyCis6MTBEODMwMDAyMDlGNDJGMjU0NDdBMDZDNEJBRjI2NjBFRkRBN0JGMTk5Cis6MTBEODQwMDA1MzhGRjg1MTdBQ0I3RTJDNUIzREVDNzcyM0U0ODY5OTlECis6MTBEODUwMDA4ODY3REE5RTk0RDBFRjRCNUNGRUE3NDA0RUVDRUFENTg5Cis6MTBEODYwMDA4NjdCRTRBQzY5NjM0Q0Y3MEQ5QUYwQTZGMUM3MzY4NjY3Cis6MTBEODcwMDBCRkI1MDJFMzBGMzNGRUQ2Q0ExRDJBRUMyQkFGQkRCRUU3Cis6MTBEODgwMDBGN0RFMTlDNDFGMzVFRjE5RkU3RUM3RjZEOUUyRTJDRkU1Cis6MTBEODkwMDA5MzhDRjZFQjgyRkNCQUJCMjA0RkZBMTFCRUJGRjg3MDM2Cis6MTBEOEEwMDBDRDM4QzRENzJBN0U4RkU0NDMzNTNFN0M4QTgwM0YzQTA4Cis6MTBEOEIwMDAzRjZCNzY5MEMwRkRFOEVDQjcyMUU4RDM1OUU4ODNGQkQ1Cis6MTBEOEMwMDA2NzgxNzcwMTdGQTI5M0UxRDM5QTU2OERGQjZCMzYyNzUwCis6MTBEOEQwMDBDMzk3RTgwQzIyNUU2NDI3QzM5N0U4NjRGQ0E2RjBCMjA1Cis6MTBEOEUwMDAwNEY4Q0JDNUY2Rjg5RUUyRUYwMEYwOTcyRDdEODIwMTlCCis6MTBEOEYwMDA1RjRBQ0FFNENCQzNERjkzMTQ3RjE0OEUxNDJFNUY2Njk1Cis6MTBEOTAwMDAzQ0E0MjhFQzdFNEE0REFFRTJEOTcxNEZEMEY5QzNCQTlGCis6MTBEOTEwMDBCREExODZFMEIzN0YxQzdGNzFBODhCQUQ5QjI5OTZFQUUxCis6MTBEOTIwMDBGRDMyRTAyMzk5RjBGNTI0NDhEMkYzMDk0QjNEODRCRjQyCis6MTBEOTMwMDBCNDIwNTFBMTJDMzAzODQ4RkQ2MEMzQkQ5MkEyNDczMkJCCis6MTBEOTQwMDBERENCQTY2RTAwM0U1ODdGNThCNjQwQkVCQ0I4NzQ4NjhDCis6MTBEOTUwMDBFMTNDQTgzOERCOTdBNDIyM0VGRDc4NEZGMzIzMzUyQTFCCis6MTBEOTYwMDBEMjZGMUREMDExRUUwMUU1RkVENzQzOUM5RTBGRjM3QkQ1Cis6MTBEOTcwMDAyODU3NzFGOTU4Q0JFNUU1MzEyRTI3QjVGQ0RFRTQzNUEzCis6MTBEOTgwMDBEMzU5OUU1NTRBOEU4NURGNTcxNjIxRkEzQ0E2MjQ2RjNGCis6MTBEOTkwMDA5ODI4MTQyRUI0QTk1NTdDRTIzRDhCRTQ3RDZCNjgwNDc1Cis6MTBEOUEwMDA2RDk3OTA0RDdDQzAyNzQ5RUYzRjEwNjJGNzM1MTYwRUZBCis6MTBEOUIwMDAwNDNCMjg0OUJCN0Y3MUEyOUEzNDA3MEZDMjQ2MjRFNjc0Cis6MTBEOUMwMDA3NzUwNTU4ODdFNEM4NzI1RDYzRDU1QjVERTAzMzY4ODgxCis6MTBEOUQwMDA4N0M2ODMyN0MxRUJDQjdDODg4RTk3RDBFMDQyRkJCRDA2Cis6MTBEOUUwMDA5RkJGNzBDRTQyNUE3NjM2MjQ2MEZDMkY4MUZGM0U4QjVCCis6MTBEOUYwMDA5M0MyNURBMkEzNzdCQzdCQTgzN0JBQUU0Rjc0NTE3QUFECis6MTBEQTAwMDA3QTAwNDZGQTdDQkM2MTE4RkUyRUNCMTM3MjIxRkU4RTgyCis6MTBEQTEwMDBDQjEzN0MzREQ1RUUzOUQ3REE3REMzRjVBMzNCRUY2QTU2Cis6MTBEQTIwMDA4M0RGQkE1RUY2NjEzQkNGNDRBM0ZDQUZFN0ZBMzY3OUY5Cis6MTBEQTMwMDA4QTkxQ0YzNTdEN0JCQzU3REZGQTg3MDIzQ0E5MTdBNkI4Cis6MTBEQTQwMDBBMDFFNEJCOTM5QjZERUFEOTUxNUJDQjdCQzc2MTQ5M0E0Cis6MTBEQTUwMDBGMzYwOTFDMkNFQjVGNEQ1MDMxOEE3M0VFRjFGQjkxMUZDCis6MTBEQTYwMDBGNEE4QzY1N0NCMDlEMzNCNDFFMkYwRTIzQUM0RUZCNzgyCis6MTBEQTcwMDBEMUVDRTA5NTcwMEYyMEQ3QUZGMDE0ODdCM0RGMUY0OENCCis6MTBEQTgwMDA5RENCRUVGMzVEQzNFRkIxN0E5NEYyMTVDMTdCNEZCRDMwCis6MTBEQTkwMDBGODlDRTE2MkZCMTNDQjZENjNGMDNFQjU1QUE3MDVGNTI4Cis6MTBEQUEwMDA4NEY0ODEzNTA0MjY4N0I0N0ZCQzA3RTIwNTkyRUNFRDRGCis6MTBEQUIwMDBGMDQxQkNDRjI1ODVFMURFREM1QTY3MUVERUZCMkUyNDVCCis6MTBEQUMwMDBFNTc5ODBGRTVGQkExNjBDQjk1ODNFMUQ5RDI4REU5Nzk5Cis6MTBEQUQwMDBFOTQ5MjkyNDFGNjVFMzZFMDA5RTVGOTEzRDM3MTM4ODU1Cis6MTBEQUUwMDAxQjZFNDhBOUI2MDNERUM2QkI1ODVDQkZBMTI4MUZGMTU4Cis6MTBEQUYwMDA0OEYxN0I5M0FCN0ZCNDlGMDFCMzY3RjRERTgzMDVERDEwCis6MTBEQjAwMDA2RTg4NzMwRUU2MEUxN0IzOTc0ODdBOTAwQ0Q3Qzk3OUQyCis6MTBEQjEwMDA4M0Y2M0IyNzZBOTA2NEU5RTQ3REY5ODg2OTA0RjY4NzE3Cis6MTBEQjIwMDBGQUNBNzkxQzNEQjY5OUU5QjExNTQyNkMzREE2RDk5OTVFCis6MTBEQjMwMDA5QTFFOTM0REZBNDE3QkQ2MEQ5OTZFMzhBN0E1QTQ3ODBECis6MTBEQjQwMDA4MTc3RTExOUI0NzhDMUJFN0JBNUVFOEUyNEM0NDMzNTNDCis6MTBEQjUwMDBFMDgxQTRDREU4RjU1RjdGMzAxNEVDQzdGQzk4RkM2NjRCCis6MTBEQjYwMDBENjVGMEI3QUQ3NzM1RjJBRDBFOTk0QUMwRTk4MDNGQzhBCis6MTBEQjcwMDA3NDM4RjY3QTNFRTlGMUFCMUUwMzNFNThGMDNCNTFEMEMzCis6MTBEQjgwMDBFRkE3OTQ1QzU4ODlFQjY5RjE4NTcxRjgyQzZEOTg4RTNDCis6MTBEQjkwMDA3QzRGMjAwQUFFRjNDMzRFMzZERUU3MDZCODRFMzZGMEIxCis6MTBEQkEwMDAzQzgwNDYzOTA0RjkxOTI3MUJFRUMzRkI0QTIwQ0Y1QkEyCis6MTBEQkIwMDBENEVERUY5MzNDMTVFRDRCRUQ5RUIxOTNBMTdCRENGQUQ4Cis6MTBEQkMwMDBGRERERTI1RkQ4N0Q2MEI3QzZFM0FGRTJDNkQ4N0UzRDNCCis6MTBEQkQwMDA5RTM1ODI4RDNDRTJDRDAyN0I5OERBMzczRDExQjA3RkQ1Cis6MTBEQkUwMDAzNjVBQkQ0MTEyMkQwNzFGQjdDN0NDNEY1Q0UyOUFGQUQ3Cis6MTBEQkYwMDAwNEUwN0Q4OUNCRjcwQ0M4Mzk3MUIyN0I0MUUzRjMzOTdFCis6MTBEQzAwMDAxQkY3MDQ2QzAyQzM3RUQzNTMzQzRGNTNGMkJCRjVGN0IyCis6MTBEQzEwMDBCQkY1REVDN0M5RTMyNEM0MTZFN0JCNDNGQjdEODMzOEVECis6MTBEQzIwMDBERkREMkM5RjgzNzg2MjdGRDdGQzg0ODRBODlGRDAwQTk1Cis6MTBEQzMwMDBGM0E4NkMzODUzRjcwMUUyODlGQjA5MUNFRTUzMzI4M0Q5Cis6MTBEQzQwMDBGQkQ0RjM1NkY2M0IzNzI2QkUzOEM1RjM0NzE2MDkwQzBFCis6MTBEQzUwMDBBRjFBN0Y5RkVBQjU3N0ZDNzgwRjhEOTlGRjg0OEQ1N0I3Cis6MTBEQzYwMDA2RDE4NEZGQkZEQUM1REM2Mzg1QzA1RTUxRkUwMUI2MTIwCis6MTBEQzcwMDBFMzc4Q0M1RjE3MUUxRkZGMThFNDI1N0Q3RTQ0QzRFRkI4Cis6MTBEQzgwMDA2NTE3NkNGOEJERUI2N0RFMEQ3MzIxQ0VGMzg2OENGNzVDCis6MTBEQzkwMDA3NTdGREUzRTM1OTFDNTc5OEM3MUU4ODU2RUI2Q0U5Rjc1Cis6MTBEQ0EwMDBFNjcyNUY3QzYxMzVGMjY3MkY3RkQ0MkY1NDQwQUU4QUQ1Cis6MTBEQ0IwMDAyRjNDOEFGNjRDRjExNjAxRUY4OTI0QzE5RTQzOTMyNDMwCis6MTBEQ0MwMDBDRTg3MTNBMEZERDk2OUNCMDFERjEzRUI3MTdGQTM2NDZECis6MTBEQ0QwMDBCM0Q1QkI1QUU4NEJFN0QzMkVENTcwQUY3QTQ5RTcxQUQ0Cis6MTBEQ0UwMDBFQzk3NTA3QjJBNDVCN0RGN0Q4QUU3MDE5NzVDNjBGN0E4Cis6MTBEQ0YwMDAwMzEyNEY5MEE0MDFERjczQkQxM0U1NUZFM0JEQUY1RDc5Cis6MTBERDAwMDBGNkQ4NzFGNjZGQjgzRDUzN0M2MTgyQzE2Rjg4Q0VFRjUzCis6MTBERDEwMDBGQjRDM0VGOTdBNUVEMjM5OEVDMUQ1M0I5RjBERTM2MzUxCis6MTBERDIwMDBDRDI3M0E4Rjg5RDhCRTJCMjlGNkY4OTkxQ0NGMjc2QUMwCis6MTBERDMwMDA0QUUxRTQwNjI5NTU1OEJERTJGQUZCMTREMDI3QzU4RDA3Cis6MTBERDQwMDA0OUM5ODI2RTVFMjUwREU1ODYzQzhDOTJDNjIyNjU5RTkxCis6MTBERDUwMDBBRURGMjgxRDFDQkY5RDM0M0M0QTg3Q0M0N0U1RUI5NkJGCis6MTBERDYwMDAzQjYxQkQyRjc0Qjk2MUJDOEQ4QkYyN0ZBMjQyN0Y0Q0E5Cis6MTBERDcwMDBGRjdDMjJENzY3NTRBMzdFQjlDNzFERUI1QzQzQTY1QjJCCis6MTBERDgwMDAzNUM0OTU0QTFBMzg3REE4OUQ5Q0E3QTM4RjQ2MTc3MzYyCis6MTBERDkwMDBGQjEzNEQyNUY5M0Y4MTc4RjI5M0VDNTY5MEY4N0FDNzQyCis6MTBEREEwMDA0NEI3Q0NEODc4OUJEMDhCQjcyQ0NDMDdCQTM0REVCRTI2Cis6MTBEREIwMDA2M0M4RkJFOTgzMzc0RTVGMEQyRkRBN0I2QTFGRTUwMkVDCis6MTBEREMwMDBCRTI2NDBDMEE5M0ZGNEMzRTg3RjI5N0M0NUM3RTVGNERGCis6MTBEREQwMDA5RjE0N0IxRUZFREU3OTJDMjU0MTZBM0YyQ0I4RTQzQzYzCis6MTBEREUwMDAxRTI0NDFEQjQ1RTZBMUQxOUY1QzZEQTBCRkZGRDExMTkwCis6MTBEREYwMDBENzgxMUM2QUY0NUU3MEUwNDlFNERGMDU1NDFFNjE1RjYwCis6MTBERTAwMDBGRTY0RkQ3RDg2RjUyMTBBNUYxQ0JBMEYwRjkyRUNGQ0MzCis6MTBERTEwMDBGRjczNzRGRjQ0MEU2NjQwREU1NzcwMUQ1QjQ3NEU2RDA2Cis6MTBERTIwMDA3QzI0NDM4RkU3MjVBRTQ5MEI4MTJFNjQ1M0ZGQ0I1QUU4Cis6MTBERTMwMDAzRjgyOTNCREVEMkFBRTRCMzJDNkMzNzZCQkZDMDEzN0ExCis6MTBERTQwMDA3RDVGQ0FGREVBMTU0OUQzNDZDNjVBRjdBOTVGMzgxMTY2Cis6MTBERTUwMDBFMkNGQjUzNUQzMjc0MkJDNERFNjc2MjNGQ0IyMTZEOEM3Cis6MTBERTYwMDA5QjcwMDU3QUFDRkJCNUVBMzk1RDFGQUFBOUM2RjgzNUU3Cis6MTBERTcwMDBCMTA1ODk0NzdGREU5NzMwQkJFODFCQzJFMjJENUEzQkQ0Cis6MTBERTgwMDA0NUY2N0IyMEZFQTkwOEE0MTBFRDM5QzlCRjMyMzMwRjM3Cis6MTBERTkwMDBFMjE4MjkzOTQxMURGRTFFNzUzM0JCNkU0RERBMDEwRkE0Cis6MTBERUEwMDBFNDkzNUE2OUZGMTA4RkIxQTU0QkU3OERGQjk0QUM5Q0FFCis6MTBERUIwMDAyMzhDOTc2MTNFNzI0QTk4NjAzQzMzOUJCRUQ3RTE1QkVFCis6MTBERUMwMDA0OUExNzA1RUM0REY5NDZDNkVEQzJGOTIwOEIzRDNCNEFBCis6MTBERUQwMDBGOUQzMzdCODlFM0RDQ0Q3QTVFNTEwQzc0RDAxM0JDQzUzCis6MTBERUUwMDA4MkZFRDA3QTFFQTdGQzY1NEQyMUM3ODM4NEVCOTgzNTRFCis6MTBERUYwMDA4OUQ1NTcxMjE5REM3Njg4NUI4QkIwQUU0NkIwRUM4MkMwCis6MTBERjAwMDAxQjc2NDRCQzlBMEM3RjdGMzQ4OUE4RjgzQjdERkQ0ODgyCis6MTBERjEwMDBBNDBFRUYzMTk5RDQ3OTNGQkNGNzI1RjhCNzAwMUY3Q0U4Cis6MTBERjIwMDAzOUIwRTM0MzAxRTJEMDg1RkUyQjYxRkQ2RDEwODMzOUVBCis6MTBERjMwMDAyQUFERkYyQkIxMjcwN0VBQzFFRjdCQkQ5RkNDOUU0M0UzCis6MTBERjQwMDAyMDZGRDlBRkRCOTc2MkY3NzJBQUZBQjg5RUI5M0M2NDJBCis6MTBERjUwMDBBOTY0REFBRkY5Q0I5NUZBRUY0RDA5QkU1RDAwNDdDQTY3Cis6MTBERjYwMDBDNzAyRUVDM0Q0REFEOUJEM0VCNUFFREIxMjYxRkQzRUM5Cis6MTBERjcwMDBDQUU5ODVGNDA3RkU2OTY3NzZDQzc5NDk0RDRDQzZGODQ1Cis6MTBERjgwMDA2NjU2RUVFQjg2RjFCRDg2QjJDNEZEQjc0RDk0MUYyNUYzCis6MTBERjkwMDBEREJEQUNDMzI1OUYwNUY4NjU0NDNEN0RBRkE3NUY4QzEzCis6MTBERkEwMDBCODVBQjIxM0FGQkY4REI5MEZBM0MxNDdDNzI1ODAzRjgxCis6MTBERkIwMDBGMUMyMzRCNkJFOUFGODYwOEZDMEUwMEZCQUI4QkY0NTYwCis6MTBERkMwMDA4MjIyRDA3MzhFNzY1RkIwQjQ4Mjk1QjVERjhCMDAyQTQzCis6MTBERkQwMDA1MjM4M0VEMEY2MTdDODBBNTZFNkZCOTQ4MTc5NkMxRjdBCis6MTBERkUwMDBEMjBDQ0Y5Q0I2ODczQjIwQUUzRkE3NkRFMDdDRDg5RjdDCis6MTBERkYwMDA5QUUzMUNGOTY3NzhFRTkxN0IwRTI0ODAxRDc4OUY4MDUwCis6MTBFMDAwMDBFNzNGN0VGQ0ZCRDdFNTA0RkFEQ0Y5Q0U0NjNDNkY3Q0FCCis6MTBFMDEwMDA5NkNCREQ1REE0MDdFRjYxRjcxMzBGREYyNzBGRTFGQjYwCis6MTBFMDIwMDA3OUYwMDM3MzU4MEVDQkUwQTdDRjhEODQ3RTc0MDMyRDU3Cis6MTBFMDMwMDBEREY5N0FFODA2MzBEQkVFNkFFRkY5MERBODAxN0ZEODRBCis6MTBFMDQwMDAzMzBERjcwMEI0NzZBRERFNDNBQ0NDREE0NUYxNjBFM0Q2Cis6MTBFMDUwMDBGNkE4MERFNzE1OURCNzBERjFGMDQxNkZERTc4MTBFOUQ4Cis6MTBFMDYwMDBEMThCMjc3RUFGOTI4Njk3REU3OTI3REUzNjAzRTJCQzFFCis6MTBFMDcwMDBGMUY0RDkxQzY3RDY5RkQ5RTYwNzgzQ0I4Q0E3Q0ZFMUYzCis6MTBFMDgwMDAxM0I1MjMzRjc3RkJFQzg5NTRCRjdERUNGNjM5RTA1OTlCCis6MTBFMDkwMDA2MUVCQzk5MDg2QTJCQ0I4QTE1QzI1RkE4N0E0NTIzQzZBCis6MTBFMEEwMDA5QzFERUNCRkIyM0ZFMEEzQTNERjY1RTlEMTBGRUQ0Q0FGCis6MTBFMEIwMDAwRjkwQkMwQzlDOEY3NkVGRkJDMTA3NEVCQUMwRUVBQzQ0Cis6MTBFMEMwMDBEQkY5NUUwNjNDMkJDNUNFQjVCNzYzN0M1MzQ0N0ZFOEQ1Cis6MTBFMEQwMDA3Q0NCOTUxNzNEMUZGNjIxQzQ5REU4RkEzNzIyNTFFMzBBCis6MTBFMEUwMDA0MzM2QkZCQkY5Rjk5QUJCNUIxMkYwN0NDRERENEI0NUUzCis6MTBFMEYwMDBDM0JEQ0Q3NzJGNjU3OTc3NDRFQTE4N0RBQkMxNUU1RkVDCis6MTBFMTAwMDAxMUI3MUY4ODAzOThGQjk5QkY3NDMyRjlCODFGRUNCMzlECis6MTBFMTEwMDA3QTI2NjE1Q0UwNTlDNjVGRjNBN0Y4NDRDODQ3OUVCMDExCis6MTBFMTIwMDA1MkMwNzhDQkY4RTM2QTZCMjcyRENGMEYyNUUxRUYxREE2Cis6MTBFMTMwMDBDRDdGNjA0OTJFREM0MzUwRDVDMUUyN0IwM0M0QzUzOTk1Cis6MTBFMTQwMDAzRjgzRjhDOTAxQjY4RTQzNzkzMUM4QjdEM0E3M0E3NTcyCis6MTBFMTUwMDBGMUZFMkVCOTNBMDdFRUREMEJERUU5RjQwMUZGMTRERDI2Cis6MTBFMTYwMDBFQUZCMDA3RjJGOTFDNzIxQjQ3NTc1NTc0MzExRTZCMUMzCis6MTBFMTcwMDAxNkNENTVDNzAxREQ4QkMyNzZGQ0ZEQzEyMjFCOTExQzVCCis6MTBFMTgwMDA1NDhGMTU0OUM0MDZDRjAxMEE5MUVDRjA3NDEwMUIzQzYyCis6MTBFMTkwMDBGMzk3QjM3QkIyOEIxQjY2QTE3REUwMUU1N0E4QzBGRDMxCis6MTBFMUEwMDBCNzQ1NkQyRjdDMDFFRDRCQTRDODdFNzZBRTg1RTFBNzA3Cis6MTBFMUIwMDBBOEVERjBEN0MwM0YwQjdEODU5ODc3Rjg5RDJEOEFDMURCCis6MTBFMUMwMDBGRjFCMTUzNjk2QUY2OTM1OTY3MzIyQzY3MjZFQkJCMUNBCis6MTBFMUQwMDBCQzE1RUUzOEQzRDkxMTA3RjY1QTcxOUQyODNGQzNDRTJFCis6MTBFMUUwMDBFOUJEMkFDMERBMDRGMTYwMkJDQTUzNDE3OTVCM0VFQ0U5Cis6MTBFMUYwMDA0NzlGNzlDOTY1ODFFRjdCRkVDQUZDREU5RUFENzZCQzg4Cis6MTBFMjAwMDBFRjZERkYxRjFDQzQwMTc5ODUyRkRCMzdDMkY3MzM4RUZBCis6MTBFMjEwMDA3MDNFQzRFMTY4N0RGNjNCNUI4NUUxOTFFMEJGQkQ3Mjc1Cis6MTBFMjIwMDBCNUU2QTc4NzQ2QzNCQzVFRjkxQkNCOTNFOUQ5NkFDNTlGCis6MTBFMjMwMDBERjRGMzlCM0ZCODU5NzYwNUZFQ0NDRDYyQkQwQ0U3QTFECis6MTBFMjQwMDA1NTA4NUFBMERGRTAyQTQ2N0YzMzlGOTY2RjMxRkFDNTAyCis6MTBFMjUwMDBGNzI3MzI3REQzMkQzMDdDNUZEOTYwOUNGNzU1MjE2MzQxCis6MTBFMjYwMDBGOUU3ODlDQzlGOUE0Nzc0RUYzMzYxRkY1RUFENEI4MzJBCis6MTBFMjcwMDA3NUY1QjlEOEY3MEQzRkM0RTVFMkM1MTcxNThENkY0NUEzCis6MTBFMjgwMDA3RTNGMUI1MTc1RTc5N0Y2NDRGN0VGRUVCRDAyRjIyQTg5Cis6MTBFMjkwMDAwMDE3NDNBM0VGQ0I0REUzNkFGRDE3MjZCMjdERjgxNEI4Cis6MTBFMkEwMDBCRTNGRDNGMzg2ODhGODM5NkRGQUREQzI1RUJCQUVBNkY5Cis6MTBFMkIwMDA3QUUwMTRERDNBNTREQ0IwM0ZCNTA4RkNBM0M2RkRBOUYyCis6MTBFMkMwMDBGMzc0RUI0QkM1RDY4M0E5Nzc2MDVFOTI4NEJGQ0I1NEMxCis6MTBFMkQwMDAzMUU3Rjk0NzI3QTRDMDdCMzEwQ0YwQzI3Nzg4N0I3NTAyCis6MTBFMkUwMDA4NTdGRTM4NjdBRDRERTFEMjNFQUYwNUVEMjcwREZDMDNDCis6MTBFMkYwMDAyOTNBMzlGRDhGRjJBNTI2NEYxNURDM0VEOTM1QUU2MzlDCis6MTBFMzAwMDAxQUU0ODk5NzM3QjBERjZGMkEwRkZGRTgxNkY4RkQ0NTRBCis6MTBFMzEwMDBEMkM4Q0U5OUU2NEJBNDUwQTRGMjUzQjFGRDQ3M0Y4NDM2Cis6MTBFMzIwMDBERkUzMEEzQzMzRDYwQkYwRDAyRTZFODVGN0U1Q0Q5RkE4Cis6MTBFMzMwMDBFMjc5ODJENUE2REYxMUQwOUVGQjM4N0Q2OUZEODg4NTA0Cis6MTBFMzQwMDBENjVGN0Q5QkIzMTRGNDEzRURGNzc1MjgxRkM4REE4OEU4Cis6MTBFMzUwMDBGNzlCQjg0RkIxMzgyRDdERkYzRUZDMjRDQUE5QzlDMTM3Cis6MTBFMzYwMDAzN0VGQTA0RENGOTBGMEJCMzc2NEMyQkM4RDdDNDZGOTJGCis6MTBFMzcwMDA1NjAwQkJBQjY3QjM4MEJGNkI0QjJEQURGQzlCQzFBNEZDCis6MTBFMzgwMDBGNjJEQzNCQzVCRkFGREVFNThFNzlEMTc4NThDRkQ5ODEyCis6MTBFMzkwMDBFOUZGMDdDRUJGRjQyRjRCQ0Y0N0U2N0FGRDY2MDZGMUMzCis6MTBFM0EwMDA1QzYyQzU1MkFBRUY3NDc2N0VDNUYxN0FCQ0NGRDEzQ0NGCis6MTBFM0IwMDAwRTA2RTE3NEY5MDZCMDVFQUEyOERGNzZFREZFMjFDMUYzCis6MTBFM0MwMDA5NkNGRjM2Njg3QjEzMkRFNUIwOEZDNEExOUE1RkM2QTdBCis6MTBFM0QwMDAzMjQ1MDU3Q0RGNENBNkMzRjM1NTIxRjJBODI4MzIzRDE3Cis6MTBFM0UwMDA4MTcxQTA2RDA5QTgyN0JBM0M5RENGM0YwREZDRDUzQzlCCis6MTBFM0YwMDAwQUUzNEY4M0Y4NzlDRjJFMzU4MkY3M0M3NkYzRjg2NDQxCis6MTBFNDAwMDA5Nzg3OTVDQkRBRUM5ODA3NzNFNkFDODI3QTc0NTlGODYzCis6MTBFNDEwMDBBMDFCRThEMUY1OTJERDAyQkY0QjdBNjY3QkJGQzk5MEE1Cis6MTBFNDIwMDAyN0Q5MTU2NkY3RkY5RTBFRjdDM0RGN0Y4REI3NkU5OTZDCis6MTBFNDMwMDBGNTgxQjY0RTFFODM3RkMyN0E5QUU4RkIwNkQ2NUJCMkEwCis6MTBFNDQwMDA4MkU1OTEwRUU4NTc5RDEzRUJGNzI0QjQ3NjI5NEE3NUJGCis6MTBFNDUwMDAwRUY4MjlGRjFCNjNFQkI1RDQwMDgwMDAwMDAwMDAwMDFDCis6MTBFNDYwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwQjc4NTRENUU5Cis6MTBFNDcwMDBCNUYwM0U3M0NFQkM5Mjk5NjQ2NjMyNDkyNjIxOEYwOTZECis6MTBFNDgwMDA4NDEwMjBFMDI0ODYwODE0RUIyNDA0MEMxODc1NDJEMTczCis6MTBFNDkwMDBBMkI2Mzg4MDQwODBCQzQ0REI0NkE1NUYyNjI0NDI0MkI5Cis6MTBFNEEwMDA1MTQyOEQwODA4NzE0MEIxRjQ4QTZEQjBBOEMxMDZFRkUxCis6MTBFNEIwMDA4MEY4NkFCNTM3REFERTVFQjVGREI5MjM3MDI5NUExRUQ5Cis6MTBFNEMwMDAyM0Y0NTJEQkRCRDY3RkFEQjVGNzk5OTkzMzQ5QUFCRDZBCis6MTBFNEQwMDBGN0I2RkZGN0ZERTk0NzhGRkJFQ0M3NTk3QkFEQjVENzIyCis6MTBFNEUwMDA1QTdCQURCNUY3NDRCRTZFRjFFQzJENjBGMDE3Mjg1MEE1Cis6MTBFNEYwMDA5QzhDNURGMkJCM0M5QkEwQkM0NDgyNTczMzE4MzMzQUUyCis6MTBFNTAwMDA3QzQ2NUIzQTYzRDY3MkM2QkNGMENGRjE4NkJDNTc4NkI4Cis6MTBFNTEwMDBGQTUzQjJFNzlCQjY3MThDRERDNTdDMDY4NkNGNzJCRjFECis6MTBFNTIwMDA4MThEODUzRTlERDAzODhCQjE2NTBBMEIyOTBFNzgyRUUyCis6MTBFNTMwMDBGNEJFMkY0REE1MzI2M0QwN0ZEOTJFMjlEODAxRkRFRjJGCis6MTBFNTQwMDBEQTZDNjRDQ0M0RThFRjMzRjhCN0EyMTdDQUM1QjFGMkVECis6MTBFNTUwMDAyQTE2MzQzMDE5RkU2MzU3NUMzQjE4N0Y5NTEyM0EyQTBECis6MTBFNTYwMDBBNTMwQjZEQUM0NDJDOTMwRUVFQUE3QjRGREQ2QjAxMDgxCis6MTBFNTcwMDBDMUQzNzBFMDMzNjNGQ0Y4MzAzRkM2MDBCNEZGNjRFQUY3Cis6MTBFNTgwMDBCQ0JDNkVEQjM0QzY5QzA2MjhDM0JDMjM2RkVCODM4OEZGCis6MTBFNTkwMDA4N0ZGOTA3RDM0QUYzNUNDNEZFM0RDREU1QUM1NEVBNTA2Cis6MTBFNUEwMDAzMUQ2N0M1RjZCRDY1REYwQkNEODdBN0ZENjVENTc0M0ExCis6MTBFNUIwMDAzREMyMDFERkI3MzBERTlGQzFCQ0Y2MDFDRUQ2NTRCM0Y5Cis6MTBFNUMwMDA1MDJFQzBCNzFDRTY5QjU0MDZFNTQxMjkzNDA1Q0IyNkU2Cis6MTBFNUQwMDAxNjQ4MjlFM0VGNTNDQkY4N0NCRDcxRjBENUIzMUVGQTkyCis6MTBFNUUwMDA1RUZEMkVFRDdCRjY4QjM0QzI2NzAzMUJBMjdBRjY1NEQ4Cis6MTBFNUYwMDA1QzNERTBBMzQxRTBBMUUxMDBCQzhGQzNDM0NDMDM1MjZBCis6MTBFNjAwMDBDMDdBMTU5NjgyMUQxOTAwNUZEMzU5QzYzNjQxQTlFOTEzCis6MTBFNjEwMDBEMDY3NDZDREY4QUM4NzMxQzA0MzY2MTI2MzY2QTBENzk5Cis6MTBFNjIwMDBBMzEyNUJENDVGNDJGRDI2RDY0RDgxMzZGODc3MUQ5NjQ2Cis6MTBFNjMwMDBEQkE5REQwOTgxQkY0NzZGNTk5MUU1ODc3NjVCRUM1MDE3Cis6MTBFNjQwMDBDRTE2MDg5RTBFREZEMEUxQzdBOTFDMzJDMTc3OTJBRTZDCis6MTBFNjUwMDA4RTk2QTlCRTYyM0QyRkQ3RDk4QTZCQjZFNzMwQjY0REVDCis6MTBFNjYwMDBFRkNGQjIwMTEyOTdDOUJFRDc3NDgwQkYyNzFERkU1QkUyCis6MTBFNjcwMDA5MERGOTZFOUJDNzkwQUNFOTc3OThCN0MwMDA3NkJFNTMxCis6MTBFNjgwMDA3ODc4QUNBQzY1NjI0QjQ5MENBRTE4N0M5Q0JFREJBNEMwCis6MTBFNjkwMDBGRTkwMEVGODJDNzA1OEYyRUM3MzIzREY0NkY0N0U0QjlDCis6MTBFNkEwMDBBQzVEQjM0REEyNzlBNDFFMEJCRjM2MDZFOUZFQkNDNDE3Cis6MTBFNkIwMDBGNjQyQkIxREQyODdBRjhEODE3RTNCRTZCOTU5MDc5NEU4Cis6MTBFNkMwMDA1RDQwMjdCOTBDREZCMzRFMDlGMDUyN0VBOEVFRUU1NzNECis6MTBFNkQwMDA5MUNFRTU0OTlFRjFGMDY4M0M1NDI5Mzc1QTY4RkU3NzlGCis6MTBFNkUwMDBGQTAwOUVDQ0U0OTYzRDNBQThDRkJDQjNCODBDRjkxQjE3Cis6MTBFNkYwMDBFNjdERTcwMjc4N0ZBRkNENERERkNCQjI3MEJBQkJENkY3Cis6MTBFNzAwMDAwNzBBRDY5NkUwRjc3RDc3QkYwQURGOEI0QzQ5RjJFMDI3Cis6MTBFNzEwMDBGNzMzMDE1NzU2MDczREJCQ0NEODhFQjU0QkQ4RUVEMTU5Cis6MTBFNzIwMDAxNDNFN0VCQTRFQkVCMzBFQ0I2NUJDRUM1ODI3NzlGN0NCCis6MTBFNzMwMDAxMkYzNkRBNTc5NjcxQTU5MERDMjg5RUY4MzI1QjQ2NDY4Cis6MTBFNzQwMDBCQzA3QTkzRUM4RTkzQkJCQTUxNEM3Q0IxQ0M3OUY0RTVECis6MTBFNzUwMDA0MzI4MDdDNzc5NEJBNUY3NjA5NjhFNjUyMEJDRjBERjhDCis6MTBFNzYwMDAwMENGQkQwNzJCMzMxREQwRkZBRDczMjY0NTk3MEE0RjUxCis6MTBFNzcwMDAxNzYzNDNEODRFMDk1OTE4M0UwQjhCNzk3QjkzNjg1RjFBCis6MTBFNzgwMDAzQTNCMTMxNzgzMzM0RkRCRUVBMkRFOUI3QTM1RTAyNTRECis6MTBFNzkwMDBGMDhFQ0M5MDFFQkZCMzc4NTNFREQwRUU0QjA2M0U4RjdCCis6MTBFN0EwMDA0NDNBRjYyMTdENjAzRUNEOUYwMkU0Njk3MTc0NUI3NDRBCis6MTBFN0IwMDBDNTgwRTMzNTdGQUFCMEUwRDVCMUY3RTdEQTRDMkM1ODM1Cis6MTBFN0MwMDAxNDJCMzdENDFGOUI4QkVEMUFEOUQwMDZFNEFCQzZGRUIxCis6MTBFN0QwMDA2NDE2OENFM0Y3MkYyNThERkM1RDk1QkY5QjNGRDVCMTZCCis6MTBFN0UwMDA0MDFBQjE2RjhFQ0Y4QUY4ODk2QzU4OEVGMDFGOTFEODdECis6MTBFN0YwMDAzRTg2RjUwNjE2ODhGQjdFRjNBNzBFNkQzOTBBNjcwNjdFCis6MTBFODAwMDA4RDEzNkJDN0I0RUQwNjdFNEZFREQ4RjQ3MDBBN0VFNzJBCis6MTBFODEwMDA4MjJEOUNFMjEwRjNDMzdFRDkzMjZCNDFCQTVDMENFQUM0Cis6MTBFODIwMDAwMjdBNThDNzE3RENCQ0ZFMjI2MzM1RkQ5NjU4N0I3NTBCCis6MTBFODMwMDBCQzBCOEIwQzJDNDQ3ODhGRDBCODg4OTcwMEM4QjY5RDQxCis6MTBFODQwMDA4MzlGMThEQzUwNkUxODNDNEE3ODUxRjkyMTFFM0Y4MTk1Cis6MTBFODUwMDAzOEI5OTFEMTMxMTREMkMxOUFGRTg1NkQ1NTU3ODkxOUI1Cis6MTBFODYwMDA0ODcxNEM1REJGNkJCQUJDQjNBMDVFRDY2OUQ2NzM3MkZCCis6MTBFODcwMDA3OTc0N0Q5MzU4Nzk1NDI3MEI3OUQwRDA1NTNEMkJCRUIwCis6MTBFODgwMDBDQ0RCQzdGQTM3RDY1NEMzRkEyRjJGRTFGRDRGRDg5QTA1Cis6MTBFODkwMDBERTU4QUZDNEU0MTFDQzIzMEZGMTEyMkQ5QjEyQ0ExNjFGCis6MTBFOEEwMDAyODRGODkyQkRCMTJFQTlEMDlGNUFFODQ3MjBFNkY3RjJCCis6MTBFOEIwMDBDRTFBQ0E5MzNEOEM3RDY0NUI1QkEzODA3QzM5OTcxNTJGCis6MTBFOEMwMDA1QTJDNDE3OTczQzdCRDM1RDUyMEU3MUFDQjg3QkMzMkE2Cis6MTBFOEQwMDBDQUNGNDFDOTIzQjExOEZFOUEzQ0NDMUIwNEZDNTkzQzU5Cis6MTBFOEUwMDA2MUMzQjIxMkM0QzNEMDZCQjhGRTFCMDYyNDlCMDQ3QzY4Cis6MTBFOEYwMDA2RUU5M0YxOEEyMzJGNjczQzdGNUVCOTdBODVGNDNGRkE2Cis6MTBFOTAwMDA4N0Q0NkZENEYxOEI3NUI0OEUzNzE1OUZBNDc2ODAwMEIxCis6MTBFOTEwMDBEQjY5QTBEMzU3OTlDNDUyMDFBNTA1OEFGRjhGQThCRjEwCis6MTBFOTIwMDAxQUZCN0ZDM0Y1MkU4QjE4RjhGQ0I4MUNCQzkwRTU3RDU0Cis6MTBFOTMwMDA4NUU0RTAxMUM5ODZFQjJFQ0E3NzM4QUUyNUM2RUY2QUFBCis6MTBFOTQwMDBGQjVGNEQxOUZDNTcxQzI2RjlERTRGREExNTY4RkY3Rjc3Cis6MTBFOTUwMDAxQTdGMzM4RDAxQTk3RTg1NEQ2NkEwNUMwRDRFNDQ3REU2Cis6MTBFOTYwMDBCQzkzRjkyN0EyMUVGQTdBRTNGOEEzM0E2ODc3NDIxRjBDCis6MTBFOTcwMDBERUNEMDA1RkM1RjY0RDM1MEFCNDNCNjEwREU3NEEyMDk4Cis6MTBFOTgwMDA0MzI2NkRFREU1RTVGNEYwNkVDNDY3NjBFQkEzODRERjJDCis6MTBFOTkwMDAxM0I5RTE1QzFEOTRBN0RBNDNCQzNDM0VCQzFCQ0JCNzZBCis6MTBFOUEwMDA2RTdEODY5N0E3ODQ3MzY1RTgzRjM2NzBBMEE2MUFDQTY1Cis6MTBFOUIwMDBGQjZDMjNBRkQ3N0MzQjk3RTMyQTdDOTdDNzc5QjNFREY5Cis6MTBFOUMwMDBFOUM4NzY1QzRGRUNENjAzQzY0MDFFMkU1RUZERjFCMzVGCis6MTBFOUQwMDBGQjAwMEY4QkVGNEYyNjM5QjVFRkRDNTdFNkZCNjhGRUU3Cis6MTBFOUUwMDAwMTlGNTIwMUYyOTBCMzNFRDc2MzI0OEYxNUIyMDNCMjU4Cis6MTBFOUYwMDA1MDc3Mzk2MkY0QjBFNjBEQjk0OUNFNEY2QTM5ODhGQURBCis6MTBFQTAwMDAzRTczNzEwOUM5Rjk0RjUzQkRFREY2NjlCMUU3MjcxOTk2Cis6MTBFQTEwMDBGMDA0MzhEQUVEMzYyRTk3NjU5RDk3REEzRjYwMjVCQjE2Cis6MTBFQTIwMDA2NzhCOTlDRjA3RDYwREQxRDcyMkU4NTEyRUU2NTM2RUNBCis6MTBFQTMwMDBEN0QxMzNDRjM2ODdDNkZCNDBGMkVFMzBDOUY4NjQwMTM4Cis6MTBFQTQwMDAzM0QyNzM1NTEyRDkxOTc3RUMwMUI5MDA3MkI5NTdDMDk2Cis6MTBFQTUwMDBEREJCNzU2MjMwMDBFM0RGMjEzMTFGQ0E4RDVFQkIzNzNECis6MTBFQTYwMDAwQkU1QzMwQjdGOTFFRkM0RjlGNjk2NDIxOTlFM0YxNjUyCis6MTBFQTcwMDBGMkJFQjdDRTlCNjU4RkQzOEJCRDdCNzhCRDJBNzc3QUVDCis6MTBFQTgwMDAwQjc4N0Y1NURGNjQ3NkYwRUY2NDZFOTlCODE3RTc5MUU1Cis6MTBFQTkwMDBBQzMwMkY5Njk3MkYyQURBREI0RTdBN0IwMUNEOUI3OTBCCis6MTBFQUEwMDBCRDU5MTJDQ0Y3RjRBQUIxM0FCNDIzNTVGQUE0MTU3QTk5Cis6MTBFQUIwMDA2RkMyRjlEQzhFRTM1QjYyNzQ1MkJGREY4RUYzNDZCRDNBCis6MTBFQUMwMDAyRjgzREU4N0Y5M0VFMEYwRDNGQ0MxMEU5ODRBNzZBMDkyCis6MTBFQUQwMDBCMDAzREE3MUJFRDM2MkY4NjU0QTc4MUFCRUZGRkYwODQ4Cis6MTBFQUUwMDA0RkY3NjBGREZGMTQ0RjIzQzg4QjAwQjY2QjZDMDU3OUEwCis6MTBFQUYwMDBBMThCOTMxNzAyN0ZEQkE0OTAzRTkzQ0IwQjBGRUEzOUQ3Cis6MTBFQjAwMDA3Q0JGMDBFNEUzRUQzNkZGNDY4NDQ3RkRGRUUyMDcxQUQyCis6MTBFQjEwMDBDOUVFNTNFMTRBRkVENjhCMzU1RjY1QzNENzU5QTI1RDc2Cis6MTBFQjIwMDA3NkUyMDNEMzY2MDY3QUVDODRBMTlGRTRFMjg5RjlDQzBECis6MTBFQjMwMDBEMzhFRjI0M0M3RUExMThGQUE1RDU5NzFGRjlBQjcxOEI1Cis6MTBFQjQwMDBEOEIzOTdFRDMyRDFCOTVCRjI2NkUxQkNCQTgxQUUyNjlCCis6MTBFQjUwMDBENEMzNzU4NkUwQkU4Mjk4NUVFQ0I1MDc3N0FDNDBCQTQ4Cis6MTBFQjYwMDBERTUyRTIwOUI4NDkzRkQyN0EwQkI0MjY1M0JCNUU3QjMyCis6MTBFQjcwMDA5ODI5NTgzRkMzNkQwMzQ4OTBDRTQ0OEZDODZEODZFMEY2Cis6MTBFQjgwMDA1RTA5RTlDREY5QTU3N0Q1QTQ2MDQwMjJCQTA3QThGRkIwCis6MTBFQjkwMDA2RDlDN0Y3QUVCMThEOUY3QkRCN0I5ODg2RkNDMkM2ODFDCis6MTBFQkEwMDA0Njc4NDZFMzgzOEMwRTQ2N0NDNDE0RUZENDNBNkIwQzUzCis6MTBFQkIwMDAwRjNGMTNFQjNBQjkzQ0ZDRkNCRkExMURCOUQ5NEM3NjExCis6MTBFQkMwMDAyNEVBNENEQzc3QjE5RTRDODIxN0U4RjkwMkYxODdCQTRGCis6MTBFQkQwMDA1RjdBMjQyQkI4ODlGNjY3OUUwQUE0Qzc0NkFCNzcwOUVCCis6MTBFQkUwMDBDMUZGRUQ2NDM3QzJCRkNCQ0NCQTRDNjVCOEZENjA5REE4Cis6MTBFQkYwMDAyNEVGMDQzQ0FDRTczMTg2RjZEOTlEQzIzRUZCRjdGQTIwCis6MTBFQzAwMDA0QjU2QjQwMzVFQjU3M0ZCMEExOUM1MDRGMjZGMjlFM0QyCis6MTBFQzEwMDBGNTRCRDcyNTdGODhGQjk5QTVFQkU0OTAxMUY2MkJBQzNCCis6MTBFQzIwMDA2QjhFMzcxQ0I3Q0YyMDhFODJGMUZDNDI1RUIyRUQxMUE1Cis6MTBFQzMwMDAyQkYyOEQxRkZCQTVFMEY4N0ZCNEJBMkQ1ODg2RkU1MzRBCis6MTBFQzQwMDA5MUVDRDBCRjM4RDZGRjNEQjE2RTE3Q0IxQzdFRDY5NjY3Cis6MTBFQzUwMDBFQzQ2RkMyNkNBRjVGNzU0Rjg3QTFFRjNDNjdGNEZGRDQyCis6MTBFQzYwMDA0RUUyQjhCMDhGN0IxRkYxMDU3ODBGQTVBMjNERkY2RDc2Cis6MTBFQzcwMDA5OUU4OUEwOEFGRDMxMDc5QzgwQ0Y1OEJEQjY0RkI3QTVFCis6MTBFQzgwMDBDMEE3QkZENTRBRjM1NUUxQkQzMzMzNzIyREVEQUYxMkE2Cis6MTBFQzkwMDBDNjNGOTNEQzU0QTFFMEZDQzVGRTgzQUREM0VFQkYxOEE0Cis6MTBFQ0EwMDAzM0M0Q0FDMDE3Q0I1OTg0RjYzMUMzREU4QjdENkJFMjA3Cis6MTBFQ0IwMDBCRThGQjFCRjE4RTNEQkE5RUI4NUI5QTUwNEY4MDU1RkVBCis6MTBFQ0MwMDBCOTI1MDVFOUU2OTczOEREQTJGNDRFODA1QkM1QTdFQ0NGCis6MTBFQ0QwMDAxODE5OUY0RTQzMzgxN0U1OTVCRkQ1NDg3ODQ4RUNBRkQzCis6MTBFQ0UwMDBFQUJEQzdDQ0IwM0U4MEFGQjY0QjEyRjFFM0Y2RkI5MjYzCis6MTBFQ0YwMDA0OThGMzExM0E3NjNGM0VBMjQzN0YyRTc0RTQzRTQ2OUZGCis6MTBFRDAwMDA1QTM3MkYxOTE5RDJGNUEyMzlGMjAyQzlBMzQyRUUzN0E4Cis6MTBFRDEwMDBCOEY4MzM3OTBGQjZCQjkwQ0VGOUZBQzI2MTNEQUQyNzkyCis6MTBFRDIwMDAwRTBDRDgzQjNGOTNGNzUyQkRDNEM3QkREMDlFRUNDNjc2Cis6MTBFRDMwMDBGNUQ4OEM5ODg0RUYzNzA3RkVBQjhEMDFGRTRFRTlGOENECis6MTBFRDQwMDAzRUI4Nzk0MEJCREZCRDAwRkZFQUNCNjI3MkUxMjJFMzRGCis6MTBFRDUwMDBERjA5MEM3MDM5MDAzMzVENDVERkI5MjM4OTZEODI3MTlECis6MTBFRDYwMDA5Qjc0OTIxN0VEQTNBNkQ1OTM4MjFEOUM1RjRDQjg1RTUxCis6MTBFRDcwMDAxQTA0NDg0RDNBRDhGNzk1QzVENjc3OTNFRTY0MTFFRTRDCis6MTBFRDgwMDA5QjFBNEM5Qjg3RTQxNEFBM0Y4RUZCMkQ4NkZCMjVFODNCCis6MTBFRDkwMDBCNzFBM0IxNTBDRTdFN0E2Q0RCRkZEMzNDMkRENzQ0OEJCCis6MTBFREEwMDA0QkY3ODYxODdGNDg5RjQ5RDgzRjhFNUYwQTYyN0M0MEE4Cis6MTBFREIwMDBGNjM1Q0E4NzZBMTYxQzJGNzEzRjBDOTY5MzZCODY4MkI0Cis6MTBFREMwMDBFODg3NjkxNkZFODlGNDYzRTFCOUM4MUZENkYyN0VCNkZBCis6MTBFREQwMDAxNDlFQ0Q2N0I5N0QzMTczNzBDRjJCQjhDRkI1RDcwQ0VBCis6MTBFREUwMDBFNUUyMzQ5QjVCRDc1RTdERkFFQTE4N0Q1NTM4NjcwQzA3Cis6MTBFREYwMDA2RTk1NzFGRkE2REEyNTcxRkJDNzg5MEJBNkM0M0ZEN0I0Cis6MTBFRTAwMDA1MzNGREM4RkUyRjdDMkY4MEFENzg1QzJGNUQ5MzZBMUE1Cis6MTBFRTEwMDBDRjQwRUY5MURDNURERTMzODFGNDFFRUEyNTk0NUZFQTlBCis6MTBFRTIwMDA3RTE2RTUxOUNBOEYyNzFENTU4QjFDMzBDRjkyQjRBQUM4Cis6MTBFRTMwMDBBRjM4QTZGMUVGOTAxRDhGOUJBMDE5QzNGMTk5QTg1Nzg5Cis6MTBFRTQwMDBENDc2QjhBRjZEQjE4Q0RFMkVFQUU3RDk5MUNBRTU4M0VFCis6MTBFRTUwMDAyMjUxNzlDNTRGRjU3QjM2MTE3QzBBRjFDQkRBREQwNUZECis6MTBFRTYwMDAyNDZGNTU3RjRDODNGMDQzQUQxMEZFOUIxNUMyN0ZCM0RBCis6MTBFRTcwMDA3MkJCOTFCOUUzRkQ1NTQxNkRCOTQxQUNGNzQ2MTZFNjU5Cis6MTBFRTgwMDA3RUFDRkQ1MDFGRUZCN0E5NjYyMTJCRDZBM0ZGMDY5RkNFCis6MTBFRTkwMDBGRERBRkVDRDJDMzg1QjQxRkEwRTdDNjY4QzdGQ0Y3QTkyCis6MTBFRUEwMDBGOTdDRUYxNDc0REY2MUU2N0U5Qjk5RUJGNkM4REMxOTAwCis6MTBFRUIwMDBDNUU3OUI1QUU2MkQ3ODEwRjVDNDlCN0FGMjJGRkM4N0E0Cis6MTBFRUMwMDBBMDkzOEExN0EzQTNFQUVCODhFRjI0REM4RjYxQkIwNzJBCis6MTBFRUQwMDA4RDg0OTdEM0EwOEYwRjBBQkZDNjAyREM2N0I2RjlCMzQzCis6MTBFRUUwMDAwQTBCMTEzREI2QkMwNUQ2RTFGOERERjQ5MkI5MUVGOTY2Cis6MTBFRUYwMDA2NUIzNDNBN0UxQTcyQTg3OUVDQUU0RUY0MUJDQjcyN0MxCis6MTBFRjAwMDA5MzVEMEQ2ODlFOEE3QzU0MzE1NkQ1OTM2QzJBRkE5OThDCis6MTBFRjEwMDAzRUQ0ODNCRDA1RTVBNjVCMkQ3RTFDMkY4Qzc2MDE5NDI3Cis6MTBFRjIwMDA3NzA4RjlCNUMzNjFBMEYxRDQ3Mjc0MUYyN0Y4MDVCRTQ0Cis6MTBFRjMwMDA0M0UzQTFERkM1MTdDNzA3QzE2OEZCQURDMjVFRTQ3MjNBCis6MTBFRjQwMDA2MURCQUEyNDkyNDczMUJFRDUzMUUyREIxMjlGMDFGRDdECis6MTBFRjUwMDA0NTJGMDkzOUYyMTIyMDk0RjY1MUZENjYyRTQ3MTQyRUUyCis6MTBFRjYwMDA5RjVFM0EzQjg5RTRERTFCMUZBRjI2Qjk3MjY5NTExMkRFCis6MTBFRjcwMDAzMzRBRDRERTJCNjFGREYzQzZFMDdBMjhERjI1RkNBOEY2Cis6MTBFRjgwMDAyRjQ5REMwRTBDMUNCMUQyMzgwRDA2RkYwRUY0MkIzNEM5Cis6MTBFRjkwMDAzQzM3REUwMzE0NjMyRjE4ODJERjdGMUFFQjVGMzY5MzUyCis6MTBFRkEwMDBERkFBMjE4NUMzRDlGMEQyMTg5MjkzM0ZENjA3OUZGOUUzCis6MTBFRkIwMDAwMUY5MjE4QzY0OUYzNTI0Qjk1M0E5RkUyNzY5MENFQjE0Cis6MTBFRkMwMDBCQjkyRkQ4MzQ4Q0Y2QzIzQjcxQjFCMENBMTIyM0JFMEY3Cis6MTBFRkQwMDBGMTY0OTBEQkJGMjc1MUQwRTBGODgzNTZCMjZCMDBDQ0QwCis6MTBFRkUwMDAyQ0ZDRkVBOUVFNENDRjI2NzcwQzJGQTcxRTlBNENGQ0NBCis6MTBFRkYwMDBCRjREQ0ZFOTE2MzhDQ0ZEOUEyN0Y1QkVCOTU5NTAzRTIyCis6MTBGMDAwMDBGOTdDQTkwNzc2OEVFQ0EyQ0YxMDMyMDA4Q0NENUJCOENDCis6MTBGMDEwMDBCREI2NENFN0VFNkI0NUQ5RjQ3MkIyNDdCM0RGN0M3OEVFCis6MTBGMDIwMDA2NTJERDYzN0FGNUU3NzEzQ0FDMUQxRDYzM0NBRjM3ODEwCis6MTBGMDMwMDA3RkVEMDUxNkM5QTNGRDY2RkREOEZFMTA3Q0Y3QzJFMDgyCis6MTBGMDQwMDA0NDBGQTk0N0U2MDI2MjAzOUZEODc4REJEMzdBQzAzNzIyCis6MTBGMDUwMDBGMkQ3MTEzREYxRUYxNzFEMUZFNzhCRkIzRkQ0MkZGOEJGCis6MTBGMDYwMDA5RDY2OTBCRjUxM0YzMkM5REZCOEIyM0M1Mjk5RDNCM0NECis6MTBGMDcwMDBGOUE1NEM2MTlGNjlFQkVGNDhGNTVGNDBCOUQ2RjRERDI3Cis6MTBGMDgwMDBERjlGNjgyNUZDNDY0OEZFQjExRUVFMUYzRkFERjcyRTAwCis6MTBGMDkwMDA0NjNFQjU1Nzg3MEM0QkUzRjZCNzg2MzRCRThFOTYxOUJECis6MTBGMEEwMDA4NTVFNjcyMTQzRkNCQTUzRUIyQkFBQjQ3Q0FFM0VGNUQ4Cis6MTBGMEIwMDA2OTdDMUY2OTFERTI3MjdDNzhCRDRFQUM5QkFGMTg1MTE0Cis6MTBGMEMwMDA2RjcxRDcwREVDQTdDRjcyN0Y4NjIxQ0Q0REY1MzNDRjcxCis6MTBGMEQwMDA4NjBDQ0JBMDlDQkYyRTY0NTgyMTlFQjgyRTAwREYyMTQ5Cis6MTBGMEUwMDAxM0NDRkJGNDBFMkI1RkNGODAwNjFDNjdDNTc0NDZGNjZECis6MTBGMEYwMDBDODBBMTlFQ0QwMzI3Q0VGMUUwODAzNURDRTNDNkZFN0U2Cis6MTBGMTAwMDBGQ0Y1MjdDMDBBRTA3QjA5MTNFRDhDNjBCNzgyREM3QTNFCis6MTBGMTEwMDBCMTUzMEFBMTVEQkY2NEJCNzFBRkI5MDBEN0IxNTdCNjk3Cis6MTBGMTIwMDAyMjNENzc0QjI0Qjc5Njc0NTYxNkVEODBGMkVBNDM1MzhFCis6MTBGMTMwMDA4OEZFMjlEMzM5NUZBRTBFREE0OUZGQ0QxNDcyNzA5OTdCCis6MTBGMTQwMDAzMTY4MjAzQkZBMTlFRUE3ODNGMUM5MUU2RTgwNEU1OTMzCis6MTBGMTUwMDA2NUMzRjE4MEYyNUJDMzBGNDE2RDlDNjE2NkJGOTBBN0YwCis6MTBGMTYwMDBGQkUzRTIwQjYzRTNFNDdBN0Y0MjdGQjBFM0I0RkMxMTlDCis6MTBGMTcwMDA1MEY1MEU5NzczQ0M5RDg5NzI0RTk1QzM0Njg3QUYzNDc4Cis6MTBGMTgwMDA4REU0NTI2MTI2RDIxN0U4QzlFNUU0NDE4OUYwREFDODc2Cis6MTBGMTkwMDA1QUI4REUxMEYyM0VGQTVEQTEyRkNFQzgwMUFFOTc4Q0IwCis6MTBGMUEwMDA1QkU5MzkzN0FEODBFOEI2MUFGNTBERjlDREY5RkU2RTk5Cis6MTBGMUIwMDAzNDNFOTg5QkE2MTM3MjcxNjQzRUI4NUVGMDQxQzM1OTA5Cis6MTBGMUMwMDAxNkJBMTZCRUQ3QjA4RTg1MUFBN0YyQTc3NTJBRTk0MURFCis6MTBGMUQwMDBBRTBGNEQyMjlFNjFFMkYxOEVDRkQzOEI4OTdBNzA5ODZCCis6MTBGMUUwMDBERTRCRDA3Nzk5MDZBMURGMDQ5REUzRkREOUE4RUY2NzM4Cis6MTBGMUYwMDBBRTBCQ0FFOEQ3Q0NCMzc5QUZDRDRDOEZEOTJGQ0RFRkJBCis6MTBGMjAwMDA5OTRDRUVBQkIwRUM2MzYzMkRFODlGQTk3Q0M2ODVGRUZDCis6MTBGMjEwMDA1REQ4OEZFM0JBNEEwNkJDRUM4MUY3QkI1NUZCRDZDNTc3Cis6MTBGMjIwMDBFN0VCMzI3MEZFRDUyQjNFNTY2QTQxQkEwQ0QxN0UzNUUzCis6MTBGMjMwMDA5MkNFNkNDODhGMkEzRTc3NUJBMTVGMTlGNkUzRUIyRDY3Cis6MTBGMjQwMDBEQURGQzQzQTkzRTJGQTU3QkQ2NDI2Qjk3QUU1QjAzNUZECis6MTBGMjUwMDA2ODI0QkJDMzlGNkY4N0YxMzI3RTY1MjQzQkY0QzI0QkE5Cis6MTBGMjYwMDA1NkQyOUYxNzg0RkU3M0FBRkI3RUI2ODFFOEQzOEE3NEI4Cis6MTBGMjcwMDA0RDQ3NkVBQTFBODNGRTUzMjZDRDFGODMyMjUwQjVDMzc1Cis6MTBGMjgwMDAxQUVEQTNGOUIzNDU3REMxRDBBRDlDQUY4Q0I0NUZCQzgyCis6MTBGMjkwMDA2MjBGN0YxM0NCMDAwRjQzRkJCQTA1RTk4Q0ZFRjY0M0U4Cis6MTBGMkEwMDBCMzRCMUY4MEY3Q0QzRThCODc2M0RGNUY4QUZDNkE5NDg4Cis6MTBGMkIwMDBFRkJEMTVGRDJBNzNFNTc1OTFGQjYwMUU4REI5MTY5Qjk4Cis6MTBGMkMwMDAxMUJBNTRFN0ZGRkE5N0I3NDFGOUEzNDM3QTY2NDQzQTczCis6MTBGMkQwMDBFRjlCQkQ4ODhEMUQ1REZFQUUwQUVBNEY4NkUzRDZDQjVGCis6MTBGMkUwMDA5QUZEREE3MjYzQkZCNkRDQ0M5NDkzRTEzODc5RkM1OEFFCis6MTBGMkYwMDA5QUQ1Nzk2NjMyQzkwRUNGNjdDMERGNDY2M0NCRDkzRDU4Cis6MTBGMzAwMDAwMEFGRjFDNzQ2RDI0NzBENjlGRTVENjlFODM3RDU0NUM0Cis6MTBGMzEwMDA1RTQzM0MxQkYzQ0Y0RDQ1M0Y0NTU1RkU5RjI4QUU3M0UyCis6MTBGMzIwMDBFNURCQ0M4MzcwNUYzMTU3OTJGRUJFQjJDM0VDMEVDNEY2Cis6MTBGMzMwMDBDOUFGNjZDMUZGQkQ3OUI1NTRERkJCRDNFODk2Nzg3RDEwCis6MTBGMzQwMDBFREI0MEFCNDA3RTlEQkY4NjdEMjAxRkU5QkI3Q0ZGQjQ3Cis6MTBGMzUwMDA4OEY2NEQ2OEI1NDNCOTE3RUQ0QkVDRjc5QzE0NkM0NzM0Cis6MTBGMzYwMDBGQjcxM0JENzdCRTdDMTdFMzRBMUZFMTRFQkE5NTkxRThDCis6MTBGMzcwMDA5QzZCODJGRkVDNzVENDRDNDRGOUEyRkM1OUYxMjFGRDQxCis6MTBGMzgwMDAzN0UyNTA3MUY2RUVFMUU4RkFFNDdFOUMxQkQwOEYzMzUxCis6MTBGMzkwMDA4RUZDMzg4NzUxNkUzNDlBQzI4NjRBMThFN0JBM0ZGRjBFCis6MTBGM0EwMDA4RUU0RjJDQUQ2QTU2NEQ3QzdFQzVDMjNDOTkxOTVGNzYxCis6MTBGM0IwMDBGOUU5RkQyQjNCQUVBNzc5OUQ4MTc5MjM3RUNFRUNFNjYyCis6MTBGM0MwMDBGQkI5OTUzOTk2MjBDMjc3OUQ5RERCQkYyQkExOUYyNDY5Cis6MTBGM0QwMDAwREM3NEIyMjFFN0VCM0VCN0ExN0QyRkIzNzhDN0YyRkUzCis6MTBGM0UwMDBEMENGRUQ4NERGRDg4NjUyNDhGRUI4NUI1MkQwQ0U2QkNBCis6MTBGM0YwMDBERTdFRkQ0NzI4Qjc1NkVFOTYzREE4QzdEOTExMkJGOUZBCis6MTBGNDAwMDAzRDU2RUU5RTMzNzFCOTA1QzdCOTlDNTY4OTc4RUI5QjgyCis6MTBGNDEwMDA2MzkzRTlCREVDMEI3MkZGQzlEMDc1RjA1RUU5QkJDNjIyCis6MTBGNDIwMDA4REVCRTRGODZFMjM4N0NGNkU3QTFBRTFCRkVFQ0YzMjEwCis6MTBGNDMwMDBGMUJEQTI2MzdFQjQ1NzdCMERERTg5QjhERURDQkJGNjdFCis6MTBGNDQwMDBDRDQ1QkNGRUE2MkU1QjQ3RUQ5Rjk1OTgwREYxNjA2RkY0Cis6MTBGNDUwMDBDREMwRjcyQjI1QzU4N0VCQUI3RUZCQUFEQTc4N0JBNDYyCis6MTBGNDYwMDAzMzREMjY3QzU3RTZBRkNCMDg1Qjg4REY2RjQ1M0RENzMxCis6MTBGNDcwMDBCODVCNEY3NkRERjEwNTFGRkNGMjM2Njc4Q0RGNTdDQUFCCis6MTBGNDgwMDAzREI3Q0U4Q0IzMzc5QTc3REQyOEY4MDEzNDM2RTA2OTgyCis6MTBGNDkwMDBBNUMwOTMzMTdGNUQxMTdFRjdGM0Y4N0ZFNUZBOTYyMkUwCis6MTBGNEEwMDAxRThGRjlFQkVCMjBCQUJFNzdGMUY1RjAwN0QwRjdCNDc5Cis6MTBGNEIwMDA1RkNGNzE2OEVDRkJEMUY2NDFBQUJGRDlFNDYxREU3RDc0Cis6MTBGNEMwMDAxNjhBMUI3QTcxOUY5QkU3NTRBODNFQ0ZDOUVENkNFNTY1Cis6MTBGNEQwMDAwRjZCRjdCRjBERjBGN0E3Rjk4RDRFNzg5RkNGQkNBNTQ2Cis6MTBGNEUwMDA0ODU3NzdDNDU2MDVFNjI0NEU4OUVDMUZCNkNCQzhFREM1Cis6MTBGNEYwMDA0OTg1RkJEREI2QTVCM0E3MzdDNUMxOTk4REUzQTVEMzczCis6MTBGNTAwMDBGQUI0Mzk2MURDMEJFRkZGRTkzNUM0NUY1M0RFQjlBOTBBCis6MTBGNTEwMDAzQzlFRjYzQjhBNEY1OTA2NzlEQ0QyRTJGMTMxRTQ4QjBFCis6MTBGNTIwMDBFNkMxM0E3NjU3NDk0QzFFMzY3QkI4QkM0RTlDRDc3MjIyCis6MTBGNTMwMDAyN0RGNjczNDNCMjMzNDRFNzUzQTVGNjdBQUJGNzc2NzhFCis6MTBGNTQwMDA2QjEyRjlGNTc2M0E4MzY2QkVCRjBEMzA5NEU3Mzc5NUI2Cis6MTBGNTUwMDBDQjNDREUyMkVDMTI5RkYwOTM5OUJDQUYzMDhDQzczMENECis6MTBGNTYwMDA4RkVDMTkwRkU1MjFFRkE5Q0UzNDI4QkY1RDNFQzcyM0VDCis6MTBGNTcwMDA0M0Q5RTI3REIyNkIyQ0NFREJBMzE3RjVFM0M4NUZGODZECis6MTBGNTgwMDBENkFDNEFCMjRGNkVGMkNBRjQ1RDU2OUY0MkZCRjUyMUVCCis6MTBGNTkwMDBFRkNGOUQ3N0MxNzc2RjY2REVCNEQzRjA4RDFBNTBENjZBCis6MTBGNUEwMDA0OEM3MjFGQzM2REEwMThBQkZEQzE5RTc1RkJERDEzM0Q5Cis6MTBGNUIwMDAyRkVENzRCQ0JFRjQ3MkZEOEZGQkYxN0UxMTM3MTgwOTdDCis6MTBGNUMwMDAwRjI1Njk5NTMzMTFCRkQ3N0Q5OUQzRTFFMzY3RjlGRTI0Cis6MTBGNUQwMDBFMzYzMzNGNzYzQUJFRDNFQjY3MjNENTNFQjk0ODQxREFBCis6MTBGNUUwMDBEODlGODc3MjNFNUFGRTVBQjEyNjBFRUMzNEY0RTdFMUZBCis6MTBGNUYwMDAzQUZCQURBNDFENjc3NTk3OEVFMkIzQUJCQTE4QzU2MzJECis6MTBGNjAwMDAzRkZFRkU4Qjc5Mjg2RjNGREFGNzYyREVEMjM4RjgxMkMwCis6MTBGNjEwMDBGQkE5Q0Y1QjlENUFCRjk0RUE4Nzc0OEFCOEY0NTI4RkQ2Cis6MTBGNjIwMDA5MUZCRkI0NkYxNDNBQUVERDk3NkJFMUZCQjA4RDIxRDY0Cis6MTBGNjMwMDBGOTRFRUQ3N0IxM0VDOThCNzZFNTQ1NjYyMjc5QjY3NDExCis6MTBGNjQwMDA1MEY4MzVCRERFNDIyN0VFMUZENEZFMDlFMzZGNDFGRUMwCis6MTBGNjUwMDAwMUI4QTQwMTg5RjZFN0M5MjUxMTkyQUZBQjRDQkVENzFBCis6MTBGNjYwMDBDNkI4MzEyRkM1NEJGNDk5ODc3NDk0OTA1RkJEMDY5QzQyCis6MTBGNjcwMDBCNzIyRjY3OTQ2QzVENzg4RjQ1Q0RFQTNBNTYzOTZEMzk2Cis6MTBGNjgwMDAyNkUyOTQ0RUEyQkJBMUM5QTJBMDdFQzhFODEwRjJGQTVECis6MTBGNjkwMDAxQjNBREFCRjE4QjI1RDE2OTQ0QkQ3MTUyNTc1NjJEQzlDCis6MTBGNkEwMDBERDk5OTQzMjE1RkRFNkI5RDlDNUQ0M0U1MEM1RjkzQTc1Cis6MTBGNkIwMDA5MEMxQzg2Rjk1QzU1QTI0OTJCNzM2RUVFN0NFOTlDRTYxCis6MTBGNkMwMDA2Qzk4RTdGMUEyOTNEQjgzMkVFNkQ5MkU5MzNERDgyRkQ5Cis6MTBGNkQwMDA5MUJGNUZDQzVGOTVFQkM4MkYyOEU3M0U5NjRDQzQyRkI3Cis6MTBGNkUwMDBEMkEwNDRGNjlEQUNFQjVGOENFMzhFQzYzRkJEMDlGQzE3Cis6MTBGNkYwMDBEM0ZCMEZFNjlGM0VGNTdCQzNGOEM3NEY3MUJBQTUyRTJCCis6MTBGNzAwMDBEM0M4RkMyM0ZDQUE1RkI4RkQ2ODcxQzI2Rjk4NTQzRjUwCis6MTBGNzEwMDBCMzg0RjNBRDE1RTNENTlBMkMyMTc5MkFDOTg3NzNGMTA3Cis6MTBGNzIwMDBGRUQ0NUQ2MDY3RTI3RTQ0OEQyQjhFRTk1OEUyRTY3NjdBCis6MTBGNzMwMDBGQTUwMThGN0U1QzlENzk4NDhDRjdENDczNzU0ODBGNjc3Cis6MTBGNzQwMDA3QzYyOUMxMTI4NkI0Nzc5OEYzMjg2RkM4QUFENTVCRTRFCis6MTBGNzUwMDBEMzY5NzFGQUZFMDhERjM3MzREREU3QTVGN0IzMDdCOURGCis6MTBGNzYwMDA3RTZGMkUzNDkwREREOTNDMjAwNTkwQ0U0RDNFNDNEMEE3Cis6MTBGNzcwMDA1NDQwNzE5NTI1QTRCNzFGMzJCQjc5OUNDNERENEU3MUVFCis6MTBGNzgwMDA5MjZGQkI3OTFDMjVFQTQ3MERGNzNEODBGQzU2NkYyMTJGCis6MTBGNzkwMDBCRjQzNjJCQ0U1ODVCRkM4RkNGQkUzMTk3REJGQjc5NERFCis6MTBGN0EwMDBDNzc3N0FFN0I5QzlBRjkxMTg0NzYzNUREQUY1QUJDNjk5Cis6MTBGN0IwMDA1MTJFNUEwMTMxRjBCREE1OUJDRDQ0ODc2Qzk5RTM5OTM4Cis6MTBGN0MwMDBBNTlBQjg3RTE5MkUwN0M4NUY5QjMxNUQxMDQ2QzQzQkQxCis6MTBGN0QwMDBBMkVCMUEyNDAzOTZCMzQ1QkQxQTlGQjE5NkY4MEFEMDNFCis6MTBGN0UwMDBDMkJEM0RFREI5Mzc5M0QyRkY5NjdDODZENkVGRkNENUVFCis6MTBGN0YwMDA3Qzg2ODBCMTE2RjMxOTRDNjgzRDhCN0EwNDFCRjRBREZFCis6MTBGODAwMDA1QUY2OUFERDE4QkY4OUQ1MkI2MDM3OUEwNjI0RjFCREM4Cis6MTBGODEwMDBFNzZGOTg1MzA4Nzg5MEQ0RUZBRkRGRTRCNTUwQkM1ODQ5Cis6MTBGODIwMDBGM0JENzhGODk0ODRGMUY1MzBCRUM1MkREQTA3MEVDQzFGCis6MTBGODMwMDA5QkEzNTA1QzUyRDQ3RkQ2OERGOTFCNUJGNERBRjEwOEEwCis6MTBGODQwMDBBNUEyM0YxNkQ0RUYxRENGOUNGQjlEQ0QzOTMxQkQwRjM2Cis6MTBGODUwMDA3NjgwMjk3RDVBNENGRjZGRkNBMEI2RTcyQUY4NTZCMjk1Cis6MTBGODYwMDBFREIyMDFGNUFBQUFDNzlCOUQzQ0JGMjE3MUJEM0FEMjVBCis6MTBGODcwMDBGOTdBMDVGQkQ1OTE0RTcyODNEQkI1QjUyMjNFMDlGNkM4Cis6MTBGODgwMDBFQzVDNUM1QUNERUI3QzBDRTM5MzYwMkY2NEE0NjMxRUFDCis6MTBGODkwMDBDM0ZCRTdDRTFDNDVGQTJERjg5OEVDRjlFNjRGMTVFRUMwCis6MTBGOEEwMDA3NzAxQkIwM0VENzM5M0UwNzMzNkEwMjc3REFCRjJDMTA0Cis6MTBGOEIwMDA2QTIxN0Y3QUVEQTBFRjkxNUY4RjQ4RDMwMkM0MTcyREE0Cis6MTBGOEMwMDA3OUI3MDAwREVFNEZGN0JBNjk3Q0IxRUY0QTg0Nzc0NkZECis6MTBGOEQwMDAzQUY3OTMzNDE3NTdFRDI4QzJGMTlGOTIxOEVBRkI0RDdGCis6MTBGOEUwMDBDNTI3MzNEMDJFNjkxRUZDMzA2Mzc5NUNCRjU1MDM4RjZBCis6MTBGOEYwMDAxMjFFNTZFREQ3OEYzOEZGMTlFOURDQkU2QzNBRkMzQzdFCis6MTBGOTAwMDBGOTA3M0YwRTRBQjQ5NkVCOTU2MEY3NEMyOEQ3RDdFQjMyCis6MTBGOTEwMDBEMDQyNjNFNUMxMjVCNzkxQkY3RjkxODE4RDg3RjlFNTFECis6MTBGOTIwMDAwQjdERDRCQ0ZGMkI4MTk5QjgzRjgzN0YxMkJDREFFOUYxCis6MTBGOTMwMDA1QjQxN0E2RkU3MjI5MzA1RTMwRUNEQzU0QkVGMjYzQzgyCis6MTBGOTQwMDBEODkyQkM4ODg3NERDNTU1NTlGODlEQTZCQUI5MzY4QTU0Cis6MTBGOTUwMDAxMzgwN0Q4NUY1NERGN0RENEU3RTEzMTVBRTREMDNGQTEwCis6MTBGOTYwMDAxQUI0QkIyQUMwQ0VGQTExQzA5REVCOTg1RkUzODFGNUIzCis6MTBGOTcwMDAzNzQ2M0U1ODdBOEYwNUUzQzIyM0NCREY3RkM5RTBGNEQ4Cis6MTBGOTgwMDBFQzk0N0M4MTlCQ0JDOTRGQzhFMkZEN0VGOTAzREM5RUUxCis6MTBGOTkwMDBBQjRCMzc2OEZDQzI3NUU5RENDRTlDMTUxODlBOERCQzYwCis6MTBGOUEwMDBGN0IyMTI0RTQ2QkJCNzk5NzkzRkMxRkQyNUYzNTlEQzNBCis6MTBGOUIwMDBGQjg4NEU1QzhFMzhEQkRDRTQzRjMyMzlDM0RGQjkwQUFBCis6MTBGOUMwMDBFQjY3MjlCNDdGNjA0QUY4MTFGQ0VFODU2RUE3NjcxM0Q4Cis6MTBGOUQwMDAxM0ZDOEJFNUZCNEE4MjI4NDdGRjM5RERCRjE4RjlBQ0UxCis6MTBGOUUwMDA0MkQ4OEYxNzBFNUY1RjhBN0UzNkQ1M0VFQURFNjMwRTAxCis6MTBGOUYwMDA2MjFDQjBEQkVBRkU2RTBEQ0FDMTNGMjgzQ0VFNkQ4QTg4Cis6MTBGQTAwMDAwQ0NENDY3QUZDRDE0MUUzNzY5QjgzREQ0OEZGQzA1NjlFCis6MTBGQTEwMDAzREQ1MUZCNkZBNTcyMURGOUNBREFCMjlBMkJDMUI0QkNECis6MTBGQTIwMDBBMDA4RTNCQzdBNjcwRjQzM0IwMUI2MEJFNDRGMzAzOUMzCis6MTBGQTMwMDA3RDBDRTNBMUIzMDM0QjE0MDlFNTdDODJERDMxNUJFNDZCCis6MTBGQTQwMDA4RjkyRjA4NEY3NTU0MjhDOEQwNzJFMzg2M0EyMjVEMDEzCis6MTBGQTUwMDBGOTU5NUFDQzBFNzlFMzRGMEIxNTdDQTlEQTI3M0ExM0UyCis6MTBGQTYwMDA4RjY3NTUyRjRBNjIzMkYyRkQ4NkM4NkIzQUY0NUYzQkNFCis6MTBGQTcwMDA4N0M4N0U2REVDOTdFODNCOERDNUNGNTEzRUQ4MUE5MTczCis6MTBGQTgwMDA3NzE0Q0RGRjUxQzI5NDBGQjUzRTNENTlFOEYxNEVDRUVCCis6MTBGQTkwMDBFRjZDODhGNkNCRUMwMEE3Mjc2MzYxQ0E5MzhBRUQyMzRECis6MTBGQUEwMDBEQUE5OUQzQTlFNDFGOEREMUI4NURGMDUzNDE4RDUzRjY0Cis6MTBGQUIwMDA5NEFFREEwN0VCQzU1M0NERUJFMkRGREQyNjBENzk2NUI5Cis6MTBGQUMwMDBDNDZCQTlBNEYxMTdBQkNGQTdEMkI5N0Q5ODdBMkMzMjE5Cis6MTBGQUQwMDAxN0Q3NkZFNEIwOUFBN0M5RjMzMDc3NEM5QkU0NDFEM0IyCis6MTBGQUUwMDA2OTU4OUVFNkMwMjc3MzkxNkZDMEQwQTZGNURBMzRGMDRFCis6MTBGQUYwMDBDNUYyMzRCRjJGRjYwREZGRUI3OTlBMUVDOUJCMTc5RUQ2Cis6MTBGQjAwMDAzRjRBQjc3M0JGOTU5QUE3RTlFMUY4NTNFMzZDODlGOUM3Cis6MTBGQjEwMDA5OTE3QjI0MjBBQ0ZCNzBBRjdFRDQzRkUxQzMwNTIxRUM2Cis6MTBGQjIwMDA1N0VEQzBFQkVGQTE3RUFDMzVCMTdFOEM0MzI2REExOUUwCis6MTBGQjMwMDA2REI2QUYwQzIyREY1RjNDN0ZBNkVGNDE4Njc5QkEyRjBFCis6MTBGQjQwMDA3ODI4NUYyM0MxN0U0OERDMjdFQ0M1MjY1OUEzREI3QkUwCis6MTBGQjUwMDBFRjQ2RTlDOUVEQkQ2OEY5N0ZERERFRTNGNjdDNjAxRkE1Cis6MTBGQjYwMDBDRjBGNTBFNTc5QjNEODlGNURBQ0JGOTQ4MjdBRTY0NDVECis6MTBGQjcwMDAxNDlFODQzQzg2QTc0NDFFQzNFMEM4NzkwQzhBQzgwNzNCCis6MTBGQjgwMDAwMjdCM0Q0MDdDNzI5MEM3NzVERTc4M0E5OUU0QzcyNUM4Cis6MTBGQjkwMDA5QkIyMTdFREE1RjNENkM4MzcxMTU5OEFCMDkzM0E4RkE3Cis6MTBGQkEwMDAxOEREMjgyRjQwREU5MUZDMEUxQ0Q0RjMzODBEQzY2REY1Cis6MTBGQkIwMDAzMDhFRjNGMjQ0MTFDNzExRjFBMjk3OTJDOTZFNjk0OEQxCis6MTBGQkMwMDA3MUE3NjI3RjM1NEVGMzYzQTE2RjFBOTI3ODdDQTYyQkUyCis6MTBGQkQwMDBEOTdGMzk3RDg0QjhDRDFFNjE3RkVEODFBMTZDMzhERTdGCis6MTBGQkUwMDA3QjQ2MTFDNzA2MDE4MUZCOUQ4NzcyNzlEQzQxQzQ2RDlDCis6MTBGQkYwMDAyRThBQjhDREE5NjI1REM4QzBGRDEwRTRBNzcyNzcyOTJFCis6MTBGQzAwMDAyQzBCRUFEREVGOTk4MzZFRUVDRjMyRTk0MEVGMkY1M0Y0Cis6MTBGQzEwMDBFMzM2MkY3MzNGRDUzMjExOUYzOUI1NjAyRUU1MDcyRDlFCis6MTBGQzIwMDBDN0ZDNzcxOUZEMThEQ0NGMUNDREM3NjczNjFEQ0U2NzIyCis6MTBGQzMwMDAwRDg4OEI5RDI4NjIwMjgwRjU2QkUwQjVBNDkzRDA5RTYxCis6MTBGQzQwMDA3MDc3NDI5OThDNjU2RjRGMEQ3Qzc3NjlBNzhFRjYyMzhDCis6MTBGQzUwMDBDQkJBQjRGRUYyMkI5QkVFQUU0MUZEQkRCMTkzQzcxRkY0Cis6MTBGQzYwMDAwMzVEMTJFOUVGNjVDQ0VCNDI3QjQzRTU4NzgyOEMzNDgwCis6MTBGQzcwMDBBMjczQTA1M0U3QzVFRkNDQzhFMEZFMDQ0MDdEOTBFNjM4Cis6MTBGQzgwMDAyNzlFOUQ3QUUxNjcxNzcwQjQzMzVEMDg5RjNBODkzRkRDCis6MTBGQzkwMDAzN0RBOTQ5QTExRjVCMjE4QUY1M0RGNjJBQTQ0M0IzNkIzCis6MTBGQ0EwMDA1NzQ3N0VERTJCMDZFRjIyRjI5MzNBOEE4ODZFOURENjY2Cis6MTBGQ0IwMDA5NkFFMUE1RTRGNkJFNThBMzlFMkEzRkE2QjE1NkVFOEQxCis6MTBGQ0MwMDAzMUI3MDNFNTY0NjY4Njg4REYyNENDNzc3OThGQjY5Q0VDCis6MTBGQ0QwMDAxODdGNTgxNUQ0OTY5NzMxRkY4NDJDM0M4N0IwNUZGQjcyCis6MTBGQ0UwMDAzRTMzODNDQkE5MkI5QjBBODQ5RkRGNDM3RUZFNEVCRDEwCis6MTBGQ0YwMDBGQkREMDI5NDUzREQwQUM5QzlGNjFDOEUyRjVEMkU3RkYxCis6MTBGRDAwMDA4RUI1NTcyRjIyRkJDMDBFNzYwNUMxQ0JFMTFGN0JBRDEwCis6MTBGRDEwMDA1MzQyN0REOTY5RTc3Q0Y5M0Y4NTNCMTFERUNBOEMyMkNECis6MTBGRDIwMDA2RTI3QTA3MTg3RUJBODVCMEE3MjdDNzFCOEJGQThCRjcxCis6MTBGRDMwMDA2MjY5ODZGMDE3MDhGOTEzMkRGRkVGRUYzNzM5M0Y3NjI4Cis6MTBGRDQwMDBDQjYyQkREOTQ4RkUyQzE1RjFDNjUzOTJFN0U5MTBCRTJGCis6MTBGRDUwMDBCNzgwNUQwMDcwMkZFQjk2Q0JEMDNFOTlGRDE1MEJDRDkzCis6MTBGRDYwMDBBM0U5NjU3M0QwMDhGNThERUJDMjc5Qjg4RTlBQUFDMjYzCis6MTBGRDcwMDA0NTJEMjNFMDE1QTE1NTU0QjkwNUVEOTYzQTYxN0Y4MEQ0Cis6MTBGRDgwMDBFQkI2NEIxQjg3MUExRTU3RjQ3RTJCMjMxREY3MjFBN0JBCis6MTBGRDkwMDAwRUJFOEVGNDNFNjgyNkJEMDRGRjc1RDQ4OEZFOEVDMzY5Cis6MTBGREEwMDAwNTY0MkY0RDRERjVCNzY1QTAzRTRGMEFGNTdEQUYwMEI4Cis6MTBGREIwMDBFRDEzNkUxRjM1MEUxQUY3QTBGREI3QjQ1MzdCNkU4Njk4Cis6MTBGREMwMDA2REQ2QzZCOTU4OTc4M0ZDMTlBQzU3RkIxRUNGQTc2OEYwCis6MTBGREQwMDBGQTBEOEI3QjcxM0RCRkNERTA5Rjg4NzZERDc1NUZFNkM4Cis6MTBGREUwMDBGMUY1RjNBQjc0MENFOUJCNENGNkFDNDAzOTcyREVBQzA4Cis6MTBGREYwMDBCNUJCQ0Y1QjM5QkRGQUEyNzRGNjE0MjE5REZCNDZBNUI1Cis6MTBGRTAwMDBCM0E3MDhFOUJDNENDN0ZDRjFFMzM0MjI5REFGQzZFQ0I0Cis6MTBGRTEwMDA3MzRFRTdGM0NGNUY1Mzg0NzQzRTc3RjA5QTIyQTRGM0Q2Cis6MTBGRTIwMDAzNjdEOEYxN0Q3Q0Q5MzBFRkY1RUM0Q0ZFOTM5M0VCMjMyCis6MTBGRTMwMDA5QkQ0QkNDOTJGQ0E4Rjg3MzJCNEZBMzA1QUZFM0JGOTIzCis6MTBGRTQwMDAzRjQ2RDM4M0ExMjgxQzVBM0RFODM0Qjg3MzUwMUUyRTc4Cis6MTBGRTUwMDAzNTE5RkZBQTNFQzRCRjExRkQ2OTI2MjNGOTIzNUVGRUIyCis6MTBGRTYwMDBEM0U1ODc1MUJGMDUwNjY1QjIzRkQ0RjE1RTU2RkNFMzhBCis6MTBGRTcwMDBEMDVGRjBGMjdCMkU0RjQwMUE3REZDMDY2MTU3Qjk0Q0UzCis6MTBGRTgwMDAyQzgwN0UwRkQ1REU1N0VEQzY0NDc5RkMwQjMxOUZEMzE1Cis6MTBGRTkwMDAxOURFMUFCNEIzNTVGRjZDQkQxOEQzMTRCQ0NDRUREMzI2Cis6MTBGRUEwMDBBNzI0RjJCRjlBRENGRDNDN0ZGRUM4MTIxQkZBNjdDRjg1Cis6MTBGRUIwMDAwNkI5M0ZCNkU5Rjk1MkYyRDdBRTBBQkUxMkMyRkMyNzI0Cis6MTBGRUMwMDAzNjI4RDk3MERGQjBFQUE5MEY1MzMwOUUwREZCRDA1MzBFCis6MTBGRUQwMDAxOTcxRjE5NTM5NjIxRjdBMzY3ODJBMDVFM0RFRjBGRDUzCis6MTBGRUUwMDA2QUZDN0VCMjMzNjI0MEZFNkQ4MkZEMTkzNDYxNEQ0QTc4Cis6MTBGRUYwMDA4NENFMEQzNTM5MTlFOUZCRjIwMUVEN0U0RDhENEZFRUMzCis6MTBGRjAwMDBGNDE5NDhERUVEMUM5NDgyQjgzRkNCMzBGODBCNzI1MEU4Cis6MTBGRjEwMDAzRkIxMUNEQjk5RTREODdBRjkyNEMzNkJDQjlDMTYxRjQ0Cis6MTBGRjIwMDAxN0Y2NUVDRTg4Q0I1NzBBRUY0ODI1M0UwQ0VCOTk5NzIzCis6MTBGRjMwMDBFQzgwMUQ1NjIxOTc3OEJDRTYzRjc3RDk4MzNDN0Y4OUJBCis6MTBGRjQwMDBCN0ZGQ0Y2MDAxOTU1NTdEQkQ0MjlDQzM1QjIxQ0VFMURCCis6MTBGRjUwMDBBMUZDMEUyNUM4RUZGODcyMzRERUFDOUUzNzAzNzkxRTgzCis6MTBGRjYwMDAxQTI5RkUxRDk3QjcxNERGQkY4OTQ1NDQ3RURFNjc0NjE4Cis6MTBGRjcwMDBDREI4RDE3QzlEOTY1MjM3QzBCREU2NkIxNjNBNjdEODk2Cis6MTBGRjgwMDAwQzdDREQ1QTE2RTNDMzA2MzExNTk1MEY5Qjg0NUZCN0QxCis6MTBGRjkwMDBCOUZFMjRFRDAzOUFGMTdDMDVEQTU1MUVDRTg3MERCMDJCCis6MTBGRkEwMDAzRkMyRkNDREM0NzVDQkZBQjVGOThDQTNBREUzMjk5OTVBCis6MTBGRkIwMDA1QUJEMTIyREZGODNGQzk4RDMzM0I1RUI1NzlEQkZFQTkyCis6MTBGRkMwMDAwNzhGQ0U3MzUwRTJFQjJCNjE1RTg5RkJDQTQ0RkZCNTBECis6MTBGRkQwMDBCQTJGRkNBMjcyRURFNjRDQUQ1QzhCOTZGRkMxNzJFREMwCis6MTBGRkUwMDA4RUNDRDFFNDlBMzYzRUYwMzdDQkI1QzQzODQxMjFGN0Y4Cis6MTBGRkYwMDA3RjYzOUMwMEUzQjZGRkQzMzhDMTQ3RUU5RTBDMURDRjU0Cis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMEMzRDdDNDRGQkJBNDk2OUI0Q0UzMzBBRUM4RTNDQjhEQTMKKzoxMDAwMTAwMDU2MjNDNTYxMTNFM0FBQ0RFRUI5MjI4RTM4RjRDQjE5NkQKKzoxMDAwMjAwMEE4MzcwRkU5MTlFQUYzN0FDQjRBOEE1NzM2Q0IwNzBDN0YKKzoxMDAwMzAwMDc4QTQ3MDU4M0M1MTM5NEE3NkZCREYxQTU3NUY5RjE5RjQKKzoxMDAwNDAwMDhEQUIxNzYwNUNGRDE1Q0JFNTM0N0YxQzNEQUI0QUMwMjIKKzoxMDAwNTAwMEMwMkYxOTNEREY2OEIzQTA1M0IyQzg4QjMwMjkwMTY2QTkKKzoxMDAwNjAwMDhGRUIzRjVBQkZERTRDNkUyN0JGMjJGMjYzNUMwNjlFQzkKKzoxMDAwNzAwMEM3QkVDNTBBRkIzMDk4QkY0QkM3RjM3N0VFNEZGNzZEOEQKKzoxMDAwODAwMDQzRjk2ODcyNzNGQzNFNzFGOEFCMENDRjFEM0RBMUVGRDQKKzoxMDAwOTAwMDI3MzkxMjY4QjQ3ODUwMUVBQTdFMTc3NTdDNDVGODBGNzAKKzoxMDAwQTAwMEJFMjhERkZGMjA4MUVGN0ZGMDc3RTZGQjQ0N0MwQ0E4QzEKKzoxMDAwQjAwMDcyRTc2RjhEODc2RDA3REM2OEQ2MDdBM0I4RDc1QjE4MkEKKzoxMDAwQzAwMENGMjkxOENFQzdBMzhEMzMxQTNGRkYzNEQzRjc1QTI2NTIKKzoxMDAwRDAwMEM5NDdFRjU0Q0FDQkZEODJGMjI2QjkzQzcyMEFGRDNCRjgKKzoxMDAwRTAwMEVDOTBEMThERkIwRDkzMzg5N0MxMzY2Nzg5M0M0QTRGMTAKKzoxMDAwRjAwMDQ1MURFNTEzRjM3MzBERUFGOThGRDFFQ0MyMEZBMzcyMUUKKzoxMDAxMDAwMDlBREI4NTFGOEUyQUE3RkY3Qjc2RTEwMzBFREYyOTlDRjEKKzoxMDAxMTAwMEU3RTk0QTZGMTFFQUNEOEQ1NjgwMUZGNzdCREYzNzhFRjYKKzoxMDAxMjAwMDc4Q0U0MjNEMEYwMEZDQzRDRjlCM0NDQkUzRTA4OTdDMDIKKzoxMDAxMzAwMEY1ODcwNEZERjI4N0JGQjM3RTE5NEQ5RUVBNUQyQTFDNDgKKzoxMDAxNDAwMDdGNjc3OTVBRkZDNzE0RjQ3QjhFM0U0RTgwRTBBOEE4RTMKKzoxMDAxNTAwMDFBRjI4QUI4MTVDM0I4OTEzQThGRTYyMTlFN0Y5NjIxOEMKKzoxMDAxNjAwMEYyQUFENEY3MTE2MTE3REVFOUYyNjZCQUEwRkZCOUY3NzcKKzoxMDAxNzAwMDREMjY5NjBBMjYxMEYyMThEQTYzM0UwQkM1MDM5QUZBNEEKKzoxMDAxODAwMDc5OUU0OEQzM0E0NjcxNUZGNTFDNjVEMzQwMUQ0M0JCNDkKKzoxMDAxOTAwMEFGM0ZDRDVGODA3OTYwMUIzRkIwMDRFNDU0RjQ5MzJGRjAKKzoxMDAxQTAwMDYwNjhFRjVENzg5Rjk3MUJEMkZDRTMyOTRGNkM1RDU4MjgKKzoxMDAxQjAwMDEzNzdBOEY4RUNGMjA2RjQ2NzAwQkNFNDFGNzA4QUZDMjEKKzoxMDAxQzAwMDRDMTVCRTNBMTc5NzY3RUFGMzI2ODFFRkU4QkM5QzFDRjIKKzoxMDAxRDAwMDRFRDYyRjA3RDE0RTRDNzYwRjkxMUZBOUU5MTAzN0RFNkUKKzoxMDAxRTAwMDJBNjQyRkY5RUJEOTFBMDc5RDlGNjgzQTU0NTk0QUU3QjgKKzoxMDAxRjAwMENERkJDREE1NjhFNzU2RkNBQUQ2ODZGRTg5NzNENzNBMTMKKzoxMDAyMDAwMDI5Q0YyMDRGMEVBRjQyM0JFQjlGRDNGREIzMTA1RTZCNjcKKzoxMDAyMTAwMDc5NzAxRURBQTlGOTYwQTdBMkREN0JFRUUwQkM1MjdGRkYKKzoxMDAyMjAwMDlDQkY3QjFCRkFCQjYxREM2RDU2QUQzRjlCOTk3ODlFRjIKKzoxMDAyMzAwMDc4RkQ1RTlFMDc3Q0Q4RUE5RjhCRjhERDY2RTZGMDA2QzcKKzoxMDAyNDAwMEI2OEFCQzY3RTFFNzRFNUNGRkVBQkE4RjlFNzNCQ0MzMTcKKzoxMDAyNTAwMDQ0NzE2OTU1MkU2Q0QzMzMzRkVBM0Q1NTlFOTQ4ODNDREEKKzoxMDAyNjAwMDM5QzAwN0NGRDMxQkFDRTNGOTFFQTI2QzcxNkFGMzE1M0EKKzoxMDAyNzAwMDRGNjdDQzI5NDE3ODRBRDBEMTNCMERFRjUxODg0OEU4RUYKKzoxMDAyODAwMDc3NUYyRUUyRjBENzhCN0MwQTM1N0ZDQUE4RjhCRThFNDYKKzoxMDAyOTAwMEVERDlCQTlBNThGQzdEMkNGNjE3RjE3NzkxMjc5M0ZDOEIKKzoxMDAyQTAwMDI5Qjc5RkM3REEwQ0M0Mzc1NjU4NUZFNDFGMDFCRTQxMTcKKzoxMDAyQjAwMEZBQ0M4QTBDQ0RDNkYzNDQ4NUJEQTE1OTg4Q0Y5NzNGQUYKKzoxMDAyQzAwMEQ1MTEzRTk0QkFCNzI4N0U5MjhBNjQ4MzcxQzY2RDBFQUEKKzoxMDAyRDAwMDc3NEY0MDNGOEFFRDE3RDcyMjVEREMzREI2MkE0NDVENUIKKzoxMDAyRTAwMDdGOUFBRjkxRTA1MDVBOEE3MTVGNTlGNUFGN0E5RTA3QjUKKzoxMDAyRjAwMDc4MjQ5OUZDMDNCRDc5MEQ5NDA3NzhFMTAzRTM4OEU3M0UKKzoxMDAzMDAwMDQ2RDQ2NzgwQURBN0JDQkZCMTAzM0YyNzNGQkVGNTkwODEKKzoxMDAzMTAwMDM0NjIzRTY3OTdDQkMyQ0YwRDA3ODYyOEJGOENDRDcyNjMKKzoxMDAzMjAwMDEyM0U5NDIzQkZBMkI4QUZEMkFEOTAwN0EzNTNFRkQ1MkUKKzoxMDAzMzAwMEUxMzlBODQwM0IyM0ZGRTVGODVFOUIwRUU5OTIyRkYyREUKKzoxMDAzNDAwMDRCMkVCRUZDNUY1M0ZEQjQ0RjUxRkRGNjQxOUUwRkE0RjIKKzoxMDAzNTAwMDBGNkZDMDdEOTdEMjFFRkUzMkFDNjBENjc4QzhBRTZCRjAKKzoxMDAzNjAwMDJBQzFGMTIyNEQzQ0FGM0Q5OTIxOUZFNDBGOEM1QkZGRTgKKzoxMDAzNzAwMDI1MjhFNzc3RDk5ODg0RjJFN0E1MzVGOUU0MkY4NTc5MjAKKzoxMDAzODAwMDhFMUY2MTlFNzdCQjc4RkU4RTcyMjQ1OTg3N0E0QkQ5NzcKKzoxMDAzOTAwMENBMjhGRjUwQjE2NzU0MTFEQzhGNDIxOUM2NTkyM0Y4OUYKKzoxMDAzQTAwMDQ2OEQ0NzAyQjgyRUQ0NDc3N0JBRkNCQjExQ0ZEMTczMjQKKzoxMDAzQjAwMDMyQUQ0OUZDOUM4QzM4Nzc2OTZERkRFMDU5M0M3RkQyQTkKKzoxMDAzQzAwMDY3RTBFNzBDOEZCRDNDNzkwMUY5RURCQTE1MDlFOTcwREEKKzoxMDAzRDAwMEM1QkUyNERGMDZFRkY3OEI3NTZCNTU4Njk4Q0QxMjhGNUYKKzoxMDAzRTAwMEZGNjM5NDZGMzlGNjA4Q0Y0QjUzRjQ5QzRGOTQ2RUU3M0MKKzoxMDAzRjAwMDFFRjQwQjdFOUFFQUE3QkNEMjZCM0I0MzMyQzVCMzZDQUEKKzoxMDA0MDAwMEE3MUZBOTcxQzdFRDZCQjY3MzNERDJCNDlGRUZBNzEzQjkKKzoxMDA0MTAwMEY3MzE5RkE3M0Y4RUJBQjQ3NjQ5QjRGQzBGQjI0QkRFREEKKzoxMDA0MjAwMDRBRDAxQjdGRjNGRTg0NjlGNzc1ODlGNjQ5RTIzRTZFNzgKKzoxMDA0MzAwMDk4REQ5RDMwREU2ODc2OEE5QUQ3NTExNUZCMEVGMUMzQTAKKzoxMDA0NDAwMDJCNTZENTBFMEE2OEYyNUVBQTJDRTJEQzlCNDkzQkZFRDUKKzoxMDA0NTAwMDUzMjI0RjQ3Q0Q4M0M5RTg3MEI3NjM1RTc5RTREQjhDRTQKKzoxMDA0NjAwMEZDNkM2QTNFNEVBMDhBRUYxQjAyM0ExMzlEODc3M0IxNjMKKzoxMDA0NzAwMDFFQ0FDMzE5QzM0MjkyNDRGNjdGOThDRTc1NjY2MjNFODcKKzoxMDA0ODAwMDBFRjQ3QkRGMzU5NkUwREVDRDNDNUQzMkM5NDNCNzg0QTgKKzoxMDA0OTAwMDcwOUIzMThGODNGMjM2ODMzQjU2RTA3NzZFQjFEMDc3MTUKKzoxMDA0QTAwMENDOThDNzcxMzU4NkUyQkQzQjUwN0VDRUFFRTc3MTg4RjEKKzoxMDA0QjAwMDZDRDBCN0M4QjdEOTg1OUMwRkNEOEI3ODNFODc5QUFGRTMKKzoxMDA0QzAwMEExRTY1N0E4NzhBODEyRjhDRDlFQjBBMjAwRjcwN0RERTQKKzoxMDA0RDAwMDkyRkZGQkVBNzlEQUY4NzNEMkQxRjNEMUFCQzZEMjc5QzUKKzoxMDA0RTAwMDkzRThGOUI5NDIyNkVBQkZEODM5RTk0NDdDQUFGOTFENTQKKzoxMDA0RjAwMDU1MzZCRjJEMkI3REY4Nzk1OTk1M0ZFMkU4NDY3MEVERDIKKzoxMDA1MDAwMDNDQzJFREY1QUE3QTAzQzE3RjcxRDU3Q0YyMjM1RTVDMTMKKzoxMDA1MTAwMEE1NjNCODZFQUEwNjhEOUNERjEyQkVCNzMzN0EwRjQ2NkMKKzoxMDA1MjAwMEQwNENGNzVEMDhCQTdGOUVCRDBBRjQyQzQ2M0ZFREIxNzIKKzoxMDA1MzAwMEI2OUFBQjRGMDM2RThGQjdGOUU4NzlEMTJDRjVDQjU3NEMKKzoxMDA1NDAwMEQxNzlDNkM1Mjg5OTJFNjdFREFDQzU3QjBBMkU1QTIzRjIKKzoxMDA1NTAwMDc5NzhDRkMxRTVFQzA3NkZBNDcyN0FFNDA0OTY1Mzc2RkMKKzoxMDA1NjAwMDFFQkExMUVGM0RCODM4M0VEMjg3RjcxRTE0RUVBQ0U0NDgKKzoxMDA1NzAwMEY1Qzg4M0Q5OEM1RDk1NTU3MTYzODBFNkNERkQ0RUIzOEEKKzoxMDA1ODAwMDYzRTdCM0NCMTEzRjhEMkNCQzYxODhGQzNCM0M3RjFGRTQKKzoxMDA1OTAwMEYzRkQ5MDBFMkU4QjgxRUMxOTk3QzhCMzY0RDUyMkVGMzIKKzoxMDA1QTAwMDEyMjMzMDUwRUVDODJBQTU3OEI1ODVCOTBGMEQ2MTdEQUMKKzoxMDA1QjAwMDBFM0YyNzA0RjVDNEJGMURFM0I5NUZEODI0RThDQTcyMTMKKzoxMDA1QzAwMDU0M0Y1MjM4ODBGMkE5QTNDMDRFRkRBMzcyRjQ5MDMxN0IKKzoxMDA1RDAwMEM4RkQ1OUZDRkJFRjNDM0Y4NUUyNEI2QUZFMjg2M0I2NDEKKzoxMDA1RTAwMERDODU1MzI4REY0NDUzNTZFRjM3NjA4QTJEMTdFRDg1OUQKKzoxMDA1RjAwMDBFQkRCMDRCNDUzOTJERDU1Rjk3MTU2NzE3QkQzM0U3NTUKKzoxMDA2MDAwMDVCMjVCODBFQ0VCRkYwNDAyMUNBQTVFQjBENjBCNzhGQjkKKzoxMDA2MTAwMDIwODc3RTlEQ0RFNUQwNDVCREE1NEIwMjNCRURFNzI5NkEKKzoxMDA2MjAwMEZFREI3MTlDRjc5MjE3Q0ZCNUMzQkMxNkE1NTUxQUVDMkIKKzoxMDA2MzAwMDA4NkZFMEZCMzJDQUM1NzQ0MTZGRkI0MjBFOUZCRERBMDIKKzoxMDA2NDAwMDI3MkQ4NzcxM0JDQ0IwN0VBMTdGQkE1RkYxNTI5RUJENTIKKzoxMDA2NTAwMDdGQTE3NDBCQzBERDIxNzE3OTBCOUQ1MjY5NUY1MkVDNTMKKzoxMDA2NjAwMDRFQzVGQ0U1MDY3MTVFNTIxNkVCN0U0NkZGNTYxOUVENEYKKzoxMDA2NzAwMEU5NzdEQjA2NjYyQTg1MzFGODdFMkVFMkNCM0YyRjYwRDQKKzoxMDA2ODAwMDc3RDY4REIwREY2RENERTI3MjdCODFFQzlFODI3Q0I0M0IKKzoxMDA2OTAwMDQxMUE3OEFCMzYwQkRGQkJFOUZEOUM5NEQ2NzJDQzNCOUMKKzoxMDA2QTAwMEJFM0VCOUE1MUNGNUNGQjBGN0E5RjBCRTI0QUU2Q0U0RjAKKzoxMDA2QjAwMEVEMUE0QzkxM0MzQzlGRUM0REY2QUZDQkMyQjhEMDkyQkEKKzoxMDA2QzAwMDBGMjk2RUY5Q0RFQzc3NEU2MERFQzEzQkZBOUVEOTI5MzkKKzoxMDA2RDAwMEE4NUYwQUM0Qjk3RUUxMzc3QzZEODJFQTM3MzRGMUYyNTMKKzoxMDA2RTAwMDY0RUUzNzhDRTY3MzRERTFGOTY0QjUwQkY5MzlDNTVBMDAKKzoxMDA2RjAwMDkxQUYzMEQ3QzZDRkY1Q0MyRDJGRjA3NDAwODgzN0IxMkQKKzoxMDA3MDAwMDg4ODI3MjZGRUU3QkJFMTREQ0I3QjM4NUZFNzJERjk0MTUKKzoxMDA3MTAwMEQxRUQxOUU2RDJCQkUzRDdFQjNDNzc1QzE5RkVERDUwOTcKKzoxMDA3MjAwMEFDMkRERkU4RDE5NjZGOUVGRUU3MDlGMUU1M0RDOURFMEQKKzoxMDA3MzAwMDFEMzhFRjFGNEIzQ0ZGMzEzMDgzRDk2ODlFNEUyOTgwMTYKKzoxMDA3NDAwMDc2QzdFNDE3QjNDNUY5NEU5RUE3Rjc0RjYyNUZGNEUyOTAKKzoxMDA3NTAwMDc0NDZGNTE5RkI0RDdCMzFGRjVERjUzM0NCQTI3RUIyQkMKKzoxMDA3NjAwMDhCOTlGMjFERkNCRTAwRDQ1NzExNDlFNEZCMzkyOTk2NDAKKzoxMDA3NzAwMEMyNUVCOERCQzZGMTA3NkQwRDMwQ0UwQjRCRENCNDNFNkMKKzoxMDA3ODAwMDMyMkMzQUY2NjU1QzQzRTUyNkIyNDMyQUM2OTg5MjkwMkQKKzoxMDA3OTAwMDZGOEUwOUJFNTNDRkVCQUE3QzU4QTEzMDFGRTYyRkMwNDUKKzoxMDA3QTAwMEE3MTdFMkYzMURCREVEMjhGQTk3MDMxRjMxQzZFOTU1REYKKzoxMDA3QjAwMEE5NTBGRUExRjgxNjYzRUQ1NDdFNENGMEY3MzEwMTUzQjkKKzoxMDA3QzAwMEUwREIwQUFERTc1N0FEMDZBMkE3RkMxMzc5MEZFQTA5RjMKKzoxMDA3RDAwMDhDQ0RBMERGRjhEMkU2NDkwNDlGQkE3RTYwNTUxNzNBNjcKKzoxMDA3RTAwMDMzQzhBNTJEQzY1NTc0MDg0NEIxQjAyNzU0RkU0NjBCMzYKKzoxMDA3RjAwMDA4REI4REMxRkYyQzIwM0UyNzc5MTM5OUM2RUY0RkY4RjcKKzoxMDA4MDAwMDc5MDE5NzI3OTFBRDBFNzExRThDQzdDQjcyNEREMTcxQjYKKzoxMDA4MTAwMEJEMzg2RTU2RjQzQkZDQkM1MTg2Mjg0MzU1NDgwN0YzNUYKKzoxMDA4MjAwMEZFNEQ1NjAxOTdDQjgzQUZGRjgxRjRCMkM1RTNDN0VGMEUKKzoxMDA4MzAwMDE4NTI0Qzc0NEU0NjVEMzdCNkNFREZCRTU1M0IwM0U3Q0IKKzoxMDA4NDAwMDU5RjQwRDlBRTc3Q0FCMERFNzU5MEM2Q0JEQzg0MTRGQ0MKKzoxMDA4NTAwMDZGMUE4REM3RDc4RjlDRTQ3MUUzM0FGOTRBQ0RFMTk5QkQKKzoxMDA4NjAwMDRBMUNERjQwRkY0NkRFM0Y1OURCREYwNUZEMUQ3MUZEMDEKKzoxMDA4NzAwMDUzQTA3RkM5RjBGRTRGNTk0RDIxREQ1NDFDQTdDMjFENjYKKzoxMDA4ODAwMDI2NzkxRUEyQzlDQzE3RjM5MjMzNzhCRkY5MjIxRkI0ODAKKzoxMDA4OTAwMDMwMDVEQUEzQkUyOUQ2RTY2QkIwRTkxRTEzQkZBRjQzMUQKKzoxMDA4QTAwMDlCOUY3MUJEQjQyRTBCRDdENTNDNTNFMzYwMThDNjdCMUMKKzoxMDA4QjAwMDVERDBFRDdBOURGRjc3NzgzRkRERUI4QjhCOEVFMzdBMTEKKzoxMDA4QzAwMEFCMzEwNTE1REMwRkREQzA0MjFCOTA5ODE3MkJGRDRGOTcKKzoxMDA4RDAwMEQ4Qzc5MTNDRjgwQkFFOEIyNkQ5M0ZDMTAxRTVGM0ZBOUUKKzoxMDA4RTAwMDlFQzJCQjBCNjhCRDdDOTYzNTZEMzhCQzJBNUZBOEYwRjQKKzoxMDA4RjAwMDIyN0YyMDlGNDVGOTIzMDFFRTI4OUQ2RUVBQTc0NEI2OEEKKzoxMDA5MDAwMERENjBGN0UwNTNCNTgzMTg2QkUxRjlDNkVFRENEOEJDQzcKKzoxMDA5MTAwMDgwODlFNjlBNUEwQUQxMEU3OUJEM0Q0MDcyRTM3QUZCOEUKKzoxMDA5MjAwMDIzOTREN0Y0RTczMTdFNjczNkMwQjVFOEFBNEZFODVFNzYKKzoxMDA5MzAwMDEzRTY1QTMyMDFFRDdCODAzNzNEM0JGREZGMURCQ0FBMUIKKzoxMDA5NDAwMEJEMzcyQ0RGRjYyMzgzMjZERjc2QjQ3NUE1N0VCNzk5RjUKKzoxMDA5NTAwMEYxRkI2OTY2MEZFRUExRkNEOUU2ODUxNjBGOUU4MzY4NTAKKzoxMDA5NjAwMEM2RkNDRjcyOEEyRjkxMUQ4N0U3ODRFOTlFMTNDOTI0QTQKKzoxMDA5NzAwMEVDQUUyRjlBOTdDQkQ3NjE2RkEzOUJFQ0I3QTgxQzE3NEYKKzoxMDA5ODAwMDc5RTVCREE1MUNFRURFQkJEREVBM0QyN0RDQkU1QkMyMjIKKzoxMDA5OTAwMEY4M0QyOUVBM0QyN0NCNkQ1NEFGRTY5RkY3RUVFMTdFQTcKKzoxMDA5QTAwMEJDREVFNzI3RDA3OTI5QjBERkM4NUU2MEE5M0EwRTVGQzgKKzoxMDA5QjAwMDgxRjY3RTE1RkM5MzMyNjJGOUQyREJGNERDREVEQ0E5MzEKKzoxMDA5QzAwMEYzNTQyMDlFNzc2MjFDRThBRkM0N0ZCRjlBQURGNTlCQkQKKzoxMDA5RDAwMEE4RTU0NEJGREU5MzBFRkZFREM4MTdDQjRCQkM3OTEyRTAKKzoxMDA5RTAwMEYwQ0YzMjAzRjdEQjAxN0ZFREMyQjMxNTM1QUNFNTI5NUIKKzoxMDA5RjAwMEJDM0Y3MDFFNkJGOTg1NkUxQ0YxOTc5RkY4NkJGMjI3NTgKKzoxMDBBMDAwMEZDNUVDMTE4N0YyREUxRkMxNTIwQTFBNEYyNTc5NEFGMjQKKzoxMDBBMTAwMDhBMTNGM0FCRkNBQkIxN0RBRkJERkY1NzRENjhBNzBFOUEKKzoxMDBBMjAwMDFBODkyRTZBOUU1Q0UyM0E4RTgzRTdCNDlFQzNFMzk0RjEKKzoxMDBBMzAwMDY1ODI2N0VENDhGMDdDMTEzRThGRTdBRjRDQzZGOTc5Q0YKKzoxMDBBNDAwMDM0N0VDRjU0NThDMDVBMTZFM0Y3M0RDOUZFNzY4NDNGMzIKKzoxMDBBNTAwMENBRjcxQkY4N0U2NDE4RENCMjg1RjhFM0Q2REI2NDlFMjcKKzoxMDBBNjAwMDNGOUVDQ0Y1MTVDNjJCQjJFMEZCNzVFMkZCQjc3NjczNjMKKzoxMDBBNzAwMDNFQkFENTZBMjBCRUFCMUI2Q0E0N0MyMjU2Q0RFMzBFRDkKKzoxMDBBODAwMDFFRjgxRkRGMDc3QTA5QkY4QjQ0QkY4NUNFNTIzREIyRTcKKzoxMDBBOTAwMEVDQzI1QTZEN0M2MjkxNDU4RDdGRjhGNEI4MUU2RjVEOTMKKzoxMDBBQTAwMEE4M0YxOUFGRUYxN0IxQ0Q5RjYwREVEQjIyOEM2M0E4QTIKKzoxMDBBQjAwMEZERTBCQjhGNjc0N0UzMTgxMzMwOEU3MTVDRUNEMzJGREEKKzoxMDBBQzAwMDAyN0YyM0ZGQkY5QUJFNzJEN0REQzBCNzEzMUUyRjI5NDYKKzoxMDBBRDAwMDQzN0ZDRTlDOEM1NTRGNkQ4NUYyRjc3NjRFQTJGMkFCREMKKzoxMDBBRTAwMDE5NzdEQ0ZCMEVENkY3MTU1MUI5MUEyRjcxQzFGRDQ2RTcKKzoxMDBBRjAwMDIzRUY1RjVDNzFEQkZDMDJGOEVFNzFCMzE4MTdENzE1QkEKKzoxMDBCMDAwMEVFRkI5MkZDQkQ3NUQwQ0UzNTc1NkMxOUU2MjM1NjBCMDUKKzoxMDBCMTAwMEY5NzBGMTZFOUUwRjdGQzM1NTU2OUVFMkI5RDI0RDdFOUQKKzoxMDBCMjAwMEEzRUEyNDUxRkY3NTNFRUU1QkE1RkY1Njg2NzlBOUQ1NTEKKzoxMDBCMzAwMDYzMjM4QkU5M0VDNkIyMUY0RkMyRjI3MUU5OTNDNTIzMEUKKzoxMDBCNDAwMEM1NEQyNjE3NEJBMTg5ODA5RjZBMDc2RjVGNUJGNkZEMzUKKzoxMDBCNTAwMDZDRENDNzU3NTdGMUYyNjQ0RjY1RjczOEFDRDc1RDVBNzQKKzoxMDBCNjAwMDNDRDJCOUQwOUY4QUY1MTQzREY3MjRENkU5OEJERTBGMkQKKzoxMDBCNzAwMEU5OUM5M0NGMjQ3OTcwOEFCRUU5MUZGMjdCODkyQzkyN0QKKzoxMDBCODAwMDBERkQ4RjNFNkY4MTgyN0VEMkQ5NUU5RUI3NTg2NTZBMTkKKzoxMDBCOTAwMENGQzJGREVGNEQ3RTQzMzlFNjlGREE0Q0E1QzdEMUNFREIKKzoxMDBCQTAwMDQ4OUQ1RTM5MERFOTNCREJDNEY0QTg5NzgwQ0ZGRjg1RjMKKzoxMDBCQjAwMEY4RkM5QTRGRjI1MjkwQjkyQzVBM0U1N0Y5QTg0RUU1REMKKzoxMDBCQzAwMEVGNkEyRDFGQzNGQUZDRDdFQ0Y0Q0Y5N0FGQTNGMTMxMzYKKzoxMDBCRDAwMDdDRkZERkIxRkZBMjJGNjlGNTRBNzRCQzg0RjU5NjM4MUIKKzoxMDBCRTAwMEZFNjg3MjAwRkZFMkU1NUMwQzhFN0U1QTU3Mzk5ODE1NUMKKzoxMDBCRjAwMDM2MEVENzVEOEZCQUVFMjIwODg3NDEzNzQ0RTczRUYyQzIKKzoxMDBDMDAwMDI1Q0YyNDNBRjAzODhBRkU1N0UxQ0IwNUQ5QzZDQTg2RUIKKzoxMDBDMTAwMEMzODU3RjhBNkE5NzcxMDg2Q0I2MENGQzJFQUY4NzdFRkQKKzoxMDBDMjAwMDVFRTY4OEMxMDVERjY3NjM1MEVGNkZFMEYwRUM5NjVBMkYKKzoxMDBDMzAwMEI4REMxMDc2QjFCQTNGNkU1MkU3M0JBMDlENkY0NTEyMEIKKzoxMDBDNDAwMDNGRUZFQzQyRkYwNUY2NzM5NjRFRkE2QjcwMzcwQkJEMjMKKzoxMDBDNTAwMEI5RDBFNDdCQzgwODczQjhDNUJFOENGOEUxQUIyQ0YwMDIKKzoxMDBDNjAwMDNDREEyN0M2NTRCRjYzNEMzQUVFQkIwMjQ3QzIwNUU0RTgKKzoxMDBDNzAwMENGQTVCQzAxQTA3N0RBOTgzOEZCNDQ4NTJCMTExRjREMTYKKzoxMDBDODAwMEEzQzhDMzQ0QjgxM0YxMTBBM0NGMTBEOTU3RUFGOUE5RTgKKzoxMDBDOTAwMEU4QkMxMkU2RDM2MUU1RUIzNTMyQ0RBOERFNUY1MjhDQkQKKzoxMDBDQTAwMEVCRTI2RDY5OTIyN0RFOUU3RTNCNDE2RjI3QzJBNURBOUIKKzoxMDBDQjAwMDExQUE1RTU1RTE0MTdGMTFGRjdFQTQxRENGOTBERDM4NjIKKzoxMDBDQzAwMDY2MkNEOTlEMkFERjY0MEFCODBDM0E2OUM0MzhFQThEQ0IKKzoxMDBDRDAwMDYzNzRBQTdGNEU0M0M3QzQ3MzRFMkFCRUQ0QkNBMDQ0REIKKzoxMDBDRTAwMDNDQTk3OTNEQzNFMjM1MDlGMUM4RDFEQTQ5NjAzRjhGQUIKKzoxMDBDRjAwMDcxMENDNzlGMUFFRjcxNDRGRDVDMDI5RkE1MTJDOTNGOUEKKzoxMDBEMDAwMDg3RjA3M0NERjZGMEYzMDlCNUFERkM5QzdDNkQwRDRDMEUKKzoxMDBEMTAwMDAwNzBGRkI2RjAxRkE4Nzg3RUM4RUVCRjhERjM0Nzc4NEQKKzoxMDBEMjAwMDFBRUVEM0JGM0JFRjY5OEE3M0E4RjdDODI1RTI2N0Y5Q0IKKzoxMDBEMzAwMDI4RjgxOThEQ0Y0NzgzM0YyREQ1QjcxMkJGN0I1RTFBOTgKKzoxMDBENDAwMEFBQzBDQTJERTlFMkZFNDFFNjJGQzA3NTYwQjcxNTU0NkUKKzoxMDBENTAwMEEyMUYwMkU0RUE2NzlGRTE2NjBFQUI4MEFFRTUwRTdGNUMKKzoxMDBENjAwMDMzRjJGOTU3OTk2RjBFRDJENzUxRTNENzczRkYzQTIzNzUKKzoxMDBENzAwMEZGRUQ1QUIxREY5QTIzRjRFREE1NUQzMkM1MDdBQUJEOTgKKzoxMDBEODAwMDEzMUY5Qjg1NzZFMjFCN0ExNkE0RjVFRTI1RkRCOTQ2NjYKKzoxMDBEOTAwMEMwN0YwOTlGRDhERUMyRjVFRUNBMzc3RjU0MDEyQjg2OEIKKzoxMDBEQTAwMDRERDhBRThCRERBRjAwRkYyNjA2OTMzNEY3MkI0Q0RFMUIKKzoxMDBEQjAwMEVGRDA5NEE3RjQ2NzZCREE1RjM1MzA1NjUzNUYxQTlBMTkKKzoxMDBEQzAwMEE0QTlCRkZBOEQzMjRENzlEQUQwNEM0REZCNkJERUFCNjYKKzoxMDBERDAwMEQyOTQ2Nzg0RTc2QkRBN0ZFOUVDMDI0REY5REFDOEVENkIKKzoxMDBERTAwMDlBRjZBN0M0QkU5ODA1QkM0M0M1MTk3OEJGMzg5RkVGRDMKKzoxMDBERjAwMDc1OUYyRUQ1RjRGQjZEQ0FEQzM3OTAwRkVGREFDQ0YzN0MKKzoxMDBFMDAwMDk3MkIwMTMzOUE3QjI2N0FCODVERDEwMkZGRTM3NEY1MDQKKzoxMDBFMTAwMDI5ODhBRjE1NjA2RjYzREVGMkNBRUQ1QUJCQTM3RTcwRkUKKzoxMDBFMjAwMEVCMDY5NEE1ODk3OTE1QUI1OTRCMTU1RTQ5OTc5ODU3RjAKKzoxMDBFMzAwMDUxNkQ1QkEyNDNCRUZCQTczMUMyRUVCODg2NUQyM0VFQzcKKzoxMDBFNDAwMDg1RjlBQjc0MkQ2MkUzRkY1Qjc0MzVCQUI0NzQzNUJCQkUKKzoxMDBFNTAwMEI1NzQ0RDJFRDZEMkQ1RUFEMUQyMzU3NUJBOTZBRTc2QzYKKzoxMDBFNjAwMEFGOTZBRTY5MzU1QUJBQTZGQkI0NzRDRDVDQTRBNTZCMzcKKzoxMDBFNzAwMDk2NUY0QkQ3MzFGNTVBQkFFNkI2NjhFOTlBREZBQUE1NkMKKzoxMDBFODAwMDVGNDE2MEI1OTY1RTA5RjQ1NkU1RTVCOEFFQjU5QTc2NzEKKzoxMDBFOTAwMDUxQkFGQkVBMjkxRjY2N0NDRkZEOUE3MTU1QkEwN0UwNkIKKzoxMDBFQTAwMDdGOUNFRTJEOTRBRkZFQjdEMjlEQjEyMEY5NUYxM0U5ODAKKzoxMDBFQjAwMDdFMzY4MURFQTBBRjNFNDJCOTAwNzZDNjM5N0MyRTlBREUKKzoxMDBFQzAwMDIwRUM3OURGQzg3Njg2MkE3RkUyRjU3QUZDQkU3NTM0OUQKKzoxMDBFRDAwMEI5MzQ0QzhGODk3REVDQTg3QTJDNjExRkZCM0U2NkYxRkEKKzoxMDBFRTAwMDkwN0RCNDk5RkMzQ0I3MDlGRUJDOENBRjY2QTAxRkY1QTEKKzoxMDBFRjAwMDA3QTQ5RkRGMDc0MEE2MDM1Q0VGMjNEQ0YwOURGNzkzNzgKKzoxMDBGMDAwMDI2OTM5RkUxMEUxNkQyRDNCREJGOTg4OTA4ODNERTg5NTAKKzoxMDBGMTAwMDg5QzkzMkRFRTdFM0E2RTczMkExQkY5NzBCM0Y4NDM3RUEKKzoxMDBGMjAwMEQ5OUY5MkMzRkQwRkY5MTlGOEREOUMyMTdFRkZGMjVCN0EKKzoxMDBGMzAwMDY5NUZFODlFODI5M0U4ODcwNzlENzIxQUZERjBGMEJDMTYKKzoxMDBGNDAwMDYwRTZGQzcwNDY5NTBGNUVFNjc2QzZFMTZERTk2Qzg5NTkKKzoxMDBGNTAwMEY0MzIzQTdDNzAzRkJCRjRBQjEyQzUxOTk2RkU5RTNGNEIKKzoxMDBGNjAwMEM3RTc3MEJCMzdGMUQ5RDFBQUUyOERFRjg3NkVDODcxQTAKKzoxMDBGNzAwMDkzRkVDRDYxRkRDMjdFNjM3RUNCMzgxQTg3RkJDRDlGODkKKzoxMDBGODAwMEU0Rjc4RjNFMkIzMTY1QkE4MzhFNDkxMTFEMzM0RDFDMUEKKzoxMDBGOTAwMEFFNjdGNUNDODRGODdCODZGOUREODg5N0VGMjgyMDlBMzgKKzoxMDBGQTAwMDc4OUVGRTI0RTQ4N0E1QkY3RjY3MkNGQUIxNjREOTc1Q0IKKzoxMDBGQjAwMDEzREUyRjNEMURCRjA3NzBDQ0Y5NUE4Qjg0N0VERDRDQUMKKzoxMDBGQzAwMDU3OEI4NDdFQTM2MUVGMEZERDJGRTFGOUMyNjg5OUYxQTEKKzoxMDBGRDAwMDc2Rjg4Nzc4NTBGRDczQzUzQTFFQTc4RURDQ0RGNzE3REIKKzoxMDBGRTAwMDRGN0Q5RDkxREZBOUEzMzU1MDE5QzBGODk0MEMwNjA3RDkKKzoxMDBGRjAwMEU2QjFFOEY5NzlFNDFCNzJCOERGMkQ4QjBERDFCREE2RkYKKzoxMDEwMDAwMEVDMzU2MTE3OEFGQkUwNEI0NERFRkIwNTExRTc1OUIxNzMKKzoxMDEwMTAwMEM3QzQzMDRGQTJFNEUwNTEwN0M2NzU1NjAwMkQ4NzUwNzMKKzoxMDEwMjAwMDlGMjk3RUJBNUZBMzY0QzdBQjBFN0VDRkI4REU4RUU3ODIKKzoxMDEwMzAwMEQ4NTQzRDNBM0FCRDE1NzYyNjJFN0YxQ0U4RDgzMjkyMTgKKzoxMDEwNDAwMDFFNUY5M0NCRTNCMzFENkQzNUIzMzAyRUEzQzJGMzYwQTcKKzoxMDEwNTAwMDlCNzcxNkYyODdBQzc4MThDNjkzRjBERTlERjhGQzMzQzgKKzoxMDEwNjAwMDgzMTNFQUUzRDZBRjYyQTlEMTk0RjUxNjFGNUQ2NkIxOEEKKzoxMDEwNzAwMEExQUQ4NUY4NEMyRkVFMDdEQTk4QjNENjE2RkZCQjAxNjkKKzoxMDEwODAwMEFCNzM3NEUyMUVGMjAwNDMzQjlCOEI3QTdDMkE2NzUwNjEKKzoxMDEwOTAwMDNFRkM5MUYxN0RBOEQxMDVFM0M0Q0JCNTdCRjM1OEJDRjAKKzoxMDEwQTAwMDVGQjlBQkNENDdGMDZFOTBGQzdFMUNDNDU4Qzg0MkU2RDkKKzoxMDEwQjAwMDE0Q0M1QkMwQjM5N0YwN0VDN0Y1NkY2MDFFOERDMUJBQ0MKKzoxMDEwQzAwMEQ2MTM3MjhGOEUzN0EzNEJCOTEyMkY5NzFFQzgwMUI5NTIKKzoxMDEwRDAwMDk0MUM5MzRCREY2RDNCNEI3OEVBNjg1QjQ0REYwMzdDRTkKKzoxMDEwRTAwMDMxOEM5RjA1QjJCODdEREFEMUI2ODRERUVCQzBDRTQyM0EKKzoxMDEwRjAwMDdFN0E2NUM3ODRBMzZFQTgzRjAxRkZGMDlFMUNBMzkzNzAKKzoxMDExMDAwMEMzQzVDQUYzNDgzRjJEMTY3QzgwM0VBQjVDRTA5RjEzRkQKKzoxMDExMTAwMEFEN0FFMkIzN0I3MjJENDE1Qzg0RjdCQzNERkUyOERFRTQKKzoxMDExMjAwMEYzNjkwMDVFOTJGRjA2QjhBM0RGMTE3ODMyMDhCOTA0QjQKKzoxMDExMzAwMEZDRTRDM0Y1NjZDODU2QzhGRkVCQjAyRDIwM0FGRDc3MzYKKzoxMDExNDAwMEM3NTNGMTZCMzAzM0JBODdDNjkwNkIyMUJGQ0QxNzg1N0IKKzoxMDExNTAwMEYzN0IzOTA5N0FCRTNDOEZFNEU4M0QwMjJGQUZFQ0UwMjcKKzoxMDExNjAwMDc5NDcyN0VFNjU2NEJGREU3MzFGRjdCRkRERDNDODI4NUMKKzoxMDExNzAwMEZGOUJCNUMyNUY0NThDNkY1NDc5OUQ4RTM3ODFDMENCODQKKzoxMDExODAwMDlFMzYxMDM0NDU4QzNEREM2NkMyOTM1NzJDMTlGRDY0QTUKKzoxMDExOTAwMEUzNjI3NEVDRjEyQTc2NzRDNzZGQUQ3NkQ2RTFGM0UxQzEKKzoxMDExQTAwMEU5QTc3QjUwQUM2Qzk5RjVCQjIxN0NBMjhGMUJCRjZGNkMKKzoxMDExQjAwMDZCNjE0MUI0MzMyOTE2MEJERkI3RDc0MzE5QkU5RjIyQTkKKzoxMDExQzAwMEVBNTNGQ0JDOUMyQUVBNTMxN0YxNzJBRUY3MzlBOTFBMEMKKzoxMDExRDAwMDAxNEI4ODgzRTQ1QTFDRjMwQTUxRUVEREM1RjhCOTVCNzQKKzoxMDExRTAwMDcxRUU3RUI3OTBCQjYzMkM4RUJBNkFBQ0ZGMUFBMzdDRkIKKzoxMDExRjAwMDdDQjVGRTcxNTE5RjY1MzlEOTM1MEVFNUYyNDI2REZGMjAKKzoxMDEyMDAwMDFEMDIwRjk5OTY5MzNEQjMyOTVFQTJBRDU3RTMxQkU5RUEKKzoxMDEyMTAwMDk2NEI2RjUwRkYxMjZERkRBM0EyQkZENTcyNjk2ODM2NjEKKzoxMDEyMjAwMEQ2MTc2QUJGRkY5MEE4NEZCNjcwNzlDODdDRkNGRTU0RjEKKzoxMDEyMzAwMEI1RkUzQkEyREU4Q0Y1Rjg3RDhGQjZCRTVCN0NCRjQzNkUKKzoxMDEyNDAwMDBBMTI3REU4OEU1ODVDM0ZFOURDNUZEQUQ3QzZBRUM1OEUKKzoxMDEyNTAwMEY1RDNEMzE2QTE3NUY0NzBEQkE3NDQyNzA5OTkyQzNENkIKKzoxMDEyNjAwMEI2QUU2Q0FENkNDNEYzRTA5MjkwNjcyOUVFQjBENzNCOUMKKzoxMDEyNzAwMDgyQkM1M0VCMUQzNjdFREU1RDc2MTk4ODhGOEMxNjIxN0QKKzoxMDEyODAwMDJGQzQzQThDQ0EwQkE5QzVDMzk5OEJGQkIxM0Y4RjlGNjIKKzoxMDEyOTAwMDYxODE1RDQxRkIyMjBGRkU5MDlGNzNFRUQ1MzE3RjlDRjMKKzoxMDEyQTAwMERDQ0E2RTQ4NjJGRUI4RjZBRUJCMUM5QTcyQzZEN0IyRjQKKzoxMDEyQjAwMDM1RUQ5RDBCQzc2QUVBMkRFNTkzMzRGNUNDOUI0QkVCREUKKzoxMDEyQzAwMDY1QURFMEFCQTQ5MjMyNERCRDdBMEU5RkY1RTQ2QUVDQjkKKzoxMDEyRDAwMDY3N0RFMTRDNERCQjRCQzU2RUZBRkQ5MDMzRjNENERGMTcKKzoxMDEyRTAwMDE5RjE5ODUwMkVBQ0I1OEVDRDQ0QkRGMzRDREI3NDM0NUYKKzoxMDEyRjAwMEIyRDlCM0IwOUVGMEU4RDQwMTNCQ0YyRjNFODA3MTU5RjQKKzoxMDEzMDAwMEI0RDdEQkJDRjQ3RTFGRDQ4M0U1QzI5RTg0RjVFNjg2QTkKKzoxMDEzMTAwMEY2N0JEQTZDNTQ3RUEyQ0Q0NUNGREQ2RDZFN0EzRURFNzMKKzoxMDEzMjAwMDU2NENGNTNCREEzQzU0N0UwQ0M2QzdFN0EzMzAwRUJFRTQKKzoxMDEzMzAwMDdGQTRBRDg2Q0E1QkRCN0M1NERFRDJCNjg4Q0EwRkI1MEIKKzoxMDEzNDAwMEY5RTlGOTlEQjY3QTdBREZEREQ2NDJFNThENkRBREY0MjcKKzoxMDEzNTAwMDdDQjAyRDQwQ0Y4RUI2MkVBQUJGNDZEMEZCODAzOEM3QkEKKzoxMDEzNjAwMDc4QTA5MjlGNEI0RUE0RTNBQzVDNDk3MzJGOTgzNTk2QkUKKzoxMDEzNzAwMDNGMzAyQjE3RjMwN0ZBQzM5QUZCREQ3MURFMzQ5RTk5RDkKKzoxMDEzODAwMENGM0Y3MUJDM0ExQzBGQkUzQjg5MERCNTI3RjM3NTRDOUUKKzoxMDEzOTAwMDcxQzdGMTAzOUVGNUM5QzBFRjYzNUEzODFEMEEwNjIyRDIKKzoxMDEzQTAwMDU0OUY1NUNGNjk1MTI3RTA2NUNFMDBDQkE5RTBDNzUwQzcKKzoxMDEzQjAwMEIxREQwNTY5QTgyQTk5Qzc2MTI5QkY4Q0I5NjA5RTE1NUUKKzoxMDEzQzAwMEUyN0UxQzYyQkJBMDBFRTE1MkE2NzNCREE5RDIzNTNBRTMKKzoxMDEzRDAwMDZGM0I4NzEzRTczRjEyQkM1RjEzRjM5N0NCRkJGOUZEMUQKKzoxMDEzRTAwMDE3MzUzRDIxNjRGQjI0NkYwQkREN0Y2MTVBRTQwQkUxNkYKKzoxMDEzRjAwMEVGNTczODdEN0UzQThGM0ZFOUQzQjlCMEI5MDEzOUYzNjEKKzoxMDE0MDAwMEU5OTc5OTFCOUUzOTBEREE3RDRGRjY1RDY1OUFGRDg1NEEKKzoxMDE0MTAwMEZDRTlDM0NDN0QzNThDNUJBMkREOUYyNDE1QUVENUY0RjEKKzoxMDE0MjAwMDMzRTVEQ0FGQTkzNzM4RDc2QkVBOTdBRTI5RDhFMDQyNkQKKzoxMDE0MzAwMDdDOEU2MTE0OUYzMTZFNkU2NzE4NTI1Q0RFQkI5NUUwNDYKKzoxMDE0NDAwMERBMjRGMDdFNDE3MkQzNzlERUMwNDEzNTNFQ0ZFREYzMzAKKzoxMDE0NTAwMEVGMDlCREMyNEM5QjY5M0Q0Q0IwRjM2MjUxNkE0MDg3QjUKKzoxMDE0NjAwMDdBRTFEQzhGNTI0OTFFM0RGRDg0MkU4OEZFRDc4OTJDRkYKKzoxMDE0NzAwMEE4QzNGNTNGMTlDQzNEQUM5RjgyMzdFOENBNzRBNThBNTIKKzoxMDE0ODAwMDhDRTU1MkU2OTZCMTdDMzU4QkQwRkUwNEVDRjNGNUI5RDEKKzoxMDE0OTAwMERDM0U3RkMyOENGMUMxNUNGRkY3NzhERTUyODhGNDY2RDcKKzoxMDE0QTAwMDkxQTA2NzkxQkExRkQ5QUUyNEZBNjVCQjcyODkwRkI1QjYKKzoxMDE0QjAwMEU3OTkzQTg1OURERTZFQUZDOEM0QjhFODg1NTFGMkNBOTcKKzoxMDE0QzAwMEFDQUU5OTMzRjE3N0I0QUM1OUQzRTlBOUJFN0ZDOEFEQkUKKzoxMDE0RDAwMDFCRjE5Q0VFRTMwMjVGMkFERjRGMDQyNjE3N0NGRjM4RTYKKzoxMDE0RTAwMENFRTM3Q0Y5QkIxOUI4REQ2QjJBOEMxMEZGNUY5MEJDOTIKKzoxMDE0RjAwMEFFMjU4OEQ3Mzc2NUNFODc4MzU5MzQyRjQ1RTA1NTM5RDcKKzoxMDE1MDAwMDU4RTk1QTAyRjg1M0RFMUVFNzA5QjBEODc3OUU2RUYzMDkKKzoxMDE1MTAwMENFNTQ5NDU4Qjk0OEU0NDVFRTZGQUI5QjU5MURGN0ZFODUKKzoxMDE1MjAwMDc1MDE0RjMxMUJBQTQxRkQ1NDVDQTJGMzA0Njk2NDk3MTUKKzoxMDE1MzAwMDQ2N0U5OTBCN0JCQzc4Q0U1QzI5NjMxRTE0NkYxMzU5RDEKKzoxMDE1NDAwMENGN0FENEQ1Q0E1RjY0Q0E3MzUxOEVDRDYwNkVEODE3NzYKKzoxMDE1NTAwMDU4MkMyMTg2Nzk0MUFGNDdFN0M5MzRCRkFGRjQzQjVCRDQKKzoxMDE1NjAwMDc1MkFERDE3OTgxRDk1N0JBODEzRjFGNzk0ODY5MDdGNTcKKzoxMDE1NzAwMDdFRDdBQkU3RjMzQUE2QUQyRkI2RjBGQzlEMTVDNTg2MzYKKzoxMDE1ODAwMEEwNUJDMkIwN0EwRkREOEJBN0Y0NDkwQzREN0ZFNTJGMkQKKzoxMDE1OTAwMEIzMDkwRkVDODU2NEUyQkZFNEVENTNFOTRBRUQ5QjE0MTcKKzoxMDE1QTAwMEZGMEY5MUJFRTc0M0VFMTc3NEUzMDQyRjQyQkJDNkM5OTkKKzoxMDE1QjAwMDg2QkQ2ODhGNEQ0MEJDRTA4NDBBOEIwOUFGQ0JDNTdDRUIKKzoxMDE1QzAwMEY3QjcyRDIxM0NGRDVBQ0NBMzMzMzcwMTFFRTZGMUUyREIKKzoxMDE1RDAwMEJEOTEyQjdBNTVGRjg3NzY5RTBGOTU1N0REOENGN0VDRTIKKzoxMDE1RTAwMDc1MENDOUMyNTZEMkUyNzM5MzdFNjgyQUZFMzZEREY5QzUKKzoxMDE1RjAwMDMwQzAyNTEzOUNCRjQ2RkFDQkRCMkJFOEY3OTU0MDgxMjIKKzoxMDE2MDAwMEQwRkMxQTlGODBGRDdFMDFDOUEzMUFEMkRCRDM3NDk0NEIKKzoxMDE2MTAwMDlGOUFDODU3QTc4NDFDNkJDOUU1Nzk3RjU2RDc5NzY3RUYKKzoxMDE2MjAwMEUyRUZCQ0M1Q0FCMzg4M0Y5RkQxQjE2MkNBMkZEMUYxRTYKKzoxMDE2MzAwMEZEQTU5QUJGMDE4NjgzMUJGNzc1QTU3OUJBRTgzRDFBMDcKKzoxMDE2NDAwMEYzNTE1RkRCNzU5NEY3MjdFRjQ5QTJGMzg5QjI1REExRUYKKzoxMDE2NTAwMDNDRTM0RTRCQjU2RDM1OEU2MzUzMjhBRTMyNTc5RTM1MDUKKzoxMDE2NjAwMDg0NzZCM0QxQUVCQjFBRURFRUUzN0JFRjFGQzJGQzEyNjIKKzoxMDE2NzAwMDM5NTc2MUU4MkZFQUI0MjlEQ0VFQzhEMTUxM0U5NjYyQjEKKzoxMDE2ODAwMEFGMzY2MTFDQTZDODcyQkExMkYxNzk3NENGMzdDOUJGRTAKKzoxMDE2OTAwMDIxN0Y0M0U0ODgwODdGOTI1RTkwQUM5M0I1RDBGODgxQjcKKzoxMDE2QTAwMDFDNDVEQ0U3RTFBRDJEQ0QxMDIxMDQzN0VFN0Y2QTNFMEQKKzoxMDE2QjAwMDQyM0ZDQTcxREIyNTMzREEyQjZFQ0IwQUYyQTcxNUU2NUYKKzoxMDE2QzAwMDE1RDA3Q0Y0MTg2RjgzRjIxM0VCMkVEOTUxNkVCREI5OEYKKzoxMDE2RDAwMDY3ODNBMzAwRURFN0EwNDIzNjQ4RjE5RjNCQjJFOURDMDcKKzoxMDE2RTAwMEY5MUUwMzlEOEI1N0YxOUExRjUwMzQ3MUJCREM1NjZENjgKKzoxMDE2RjAwMEQ5OTgxMEJGRDMyNzlDNEJDQUNBMkIxMDdBNkUxMTBCRjYKKzoxMDE3MDAwMEM1Q0Q0N0VGRTJGQjM1RTZCNEQwN0VBNzMwNEY2MjlGRjAKKzoxMDE3MTAwMEU5NjJFNTMxQTJCQzVGMUZDOEY2MDA3RThFRUQ1OTkxRUIKKzoxMDE3MjAwMDhGRjNCQTcyRDg0Rjc5QkVBM0Q5RkIxRkU3QkFENURGQzIKKzoxMDE3MzAwMDQzMzJFQkU4N0VENTkwMTlGMzdFOUY2QTYzRTk2OERGNTgKKzoxMDE3NDAwMDk5ODIwQUU1NURFRjEzRjJBQ0QwQzJGOURGOTBDRkY5RDAKKzoxMDE3NTAwMDNDRjE1OUQ4QzNENzlENzIyMDI5OTg4Qzc0QjNGNTk3NjIKKzoxMDE3NjAwMDA1ODA0RjI2QkYzMjhGQjk0MUZGMTVEQUJDRTQzRjJDMEMKKzoxMDE3NzAwMDZDMzVBNDYzRkVDMERDMUY1QTg4NEYyRTU5OTJDODRGQTcKKzoxMDE3ODAwMEE4QjQyNjc5RjA3REM3REU4QTYyNzcxQ0RDQzEzNjVCOUYKKzoxMDE3OTAwMDNBRTZFNUVDNkQzM0E1QTM5QzBBOEUyMjVGQzdEOTc1QTYKKzoxMDE3QTAwMDk0QUZFQ0Q2RjE3Q0JBRjk3OTFDQUVGOTc5RkNCRTk3MEUKKzoxMDE3QjAwMDc5QTJGQ0E0MTI1ODgwNzAzRTA5RjRDNDNDRTlBMzlCQjIKKzoxMDE3QzAwMEI5M0RCQ0I2REQ0NDcwQUM3RDczMUNEOTU1QTNFMUVEQzkKKzoxMDE3RDAwMEU5MzY1NzNBREUwRkJGNzdCMzJFMUJGRDQ3OTVERDg1RkYKKzoxMDE3RTAwMDlCRjA5RTg0QjU1NjdFNEZBQzlDM0FFOTMxNEM0NTY3RTAKKzoxMDE3RjAwMDNGRDUzM0I0REYzQjUyNjY3QTk2QzVDOTc3Mzk3NTU2MDMKKzoxMDE4MDAwMDMxRjI5NTJDMDdCMkQxMkY3MjY3REVGQzlCMzE1RjEyNEIKKzoxMDE4MTAwMEU4QjcxM0NCMkJGQjRBNzlEOTFBQzhDNkZDQ0FFNkJFNzcKKzoxMDE4MjAwMDY5QkM5QzFFRDg4OUY5OTVERkVBOUJDMUNCQjk4MTZDNTQKKzoxMDE4MzAwMEZDMURBOUI2QkU2Qjc5Nzk3QzYwMjc5NjM3RjY1NUYyMDgKKzoxMDE4NDAwMDMyRkE5RTQwNzY2RUU5OUI3MzMzQ0FEOTBFODNBNzFFODcKKzoxMDE4NTAwMDA1RjIwRjAwRkUxMjgwQkY1RjNDQjcwQUJDQThGNUNGQUYKKzoxMDE4NjAwMEUxN0JDMEYzMjFGMTRDQUM3RjQxRjQxQjE4QTVGRTI1QjAKKzoxMDE4NzAwMDUxM0YzOENBRjgyRjhCN0VBMTUxRkExRjEzRkQ4RThGNkUKKzoxMDE4ODAwMEQyRkYzNUQxRUY4RDUxRUE3RjIyRUFERjFBNjVGQzlGNDYKKzoxMDE4OTAwMDg5N0U0M0EzRjQ3RjU3RjRGQkM1MjhGRDdGMjlGQUJENTkKKzoxMDE4QTAwMDM3NEFGRDA3QTJGRUQ3MDlFMzlGMTBFREMzRTJGRDU4QkEKKzoxMDE4QjAwMEVCRTYwRjQyQzA3NzYzNDE4RUEwNUMyQUI2NkU3NkUwRkQKKzoxMDE4QzAwMDNBREZEQjU1NEVGQ0RGNTFDMUUzM0IyQUJGOEZDNURGNUEKKzoxMDE4RDAwMDZGODI3QTVEM0VCRjRGNEE5N0NGRTMzQ0NGODhGMTgxNUMKKzoxMDE4RTAwMDBGQjcyMERGQUQ3RDVCQTYzQzlCMEU5REU3NkMxMEU1M0UKKzoxMDE4RjAwMEU4MjYxREQ5MDM2QkRGRTRGQkYzQjVERDRBMzBGRUZDQkYKKzoxMDE5MDAwMEM1MzMwOUYwNkYxMEYwNzUwQTc4OUZDQ0UzRjEzOUEzNjUKKzoxMDE5MTAwMENCOTU1RTFCRUY0N0IyNjlDQjk4OTY4NTcyMTdFNDM3N0IKKzoxMDE5MjAwMEU1RUQxNjc3NTc3NTE1OTc2MzhDNEM0NzE2ODhEMjY4ODYKKzoxMDE5MzAwMDBBRTE3RDBEOEE1NUU4MDU1Qjc5NEYzMUMyNjc1MUU4QjAKKzoxMDE5NDAwMDlDQkE2MjU3NDJGQkIxQkZBQjlDRUMzQjE1QkU0RThCQzEKKzoxMDE5NTAwMDQyRjc3NUM5NTZBRTA3RTZGRTcwOTYwREVEQUM0RUU2NDEKKzoxMDE5NjAwMDFGRjI2MjdGOTc0MkY2RkJEMUFFMzIxQkNBM0Q4M0Y1NzAKKzoxMDE5NzAwMDJFMUJBRURGNzYzNzlGNTc3NTUzNzExMkNBNkJGOTIxNTQKKzoxMDE5ODAwMDFEQzlFRkUzMzZCRURFRkI1QzNBRjI1QjgwNUVBMUYzN0QKKzoxMDE5OTAwMDJDMjBBRjNEQTgyMzI2QjA1MDNCOUQ4Rjc4Rjg4NTI1OUQKKzoxMDE5QTAwMERDQUZDN0FDQTUxNTc0NUU0NDhENDM0QjRBOUNGRDdGRUMKKzoxMDE5QjAwMDU5RTAyNzVGRTgxMTA1RjUwQjNDOUYyQzE3RTcxQzAyNDcKKzoxMDE5QzAwMERDRkYwNDY0NzM4RDg5M0JBRjc5Mzk0RkU2RTc0MEQ0N0YKKzoxMDE5RDAwMDM4QTI1QzRCRjcxNkU1QUQ1MzM0RkVGNzlDN0JCNTY1M0EKKzoxMDE5RTAwMDQzODJERTUwMTJGNENBQjgyRTkwOTM3MTdBQTcyMDYwMTkKKzoxMDE5RjAwMEQzOTQ0RkU2MDlCRjhFODc3OUQwN0U5REZCQzNDRDI0NUIKKzoxMDFBMDAwMDBGMkZBMTdFOTM0Njk3N0I1MUY5MkJFNEYxOTNFMjFFQjEKKzoxMDFBMTAwMDlFMjcwM0ZDMUNGMUQxQ0Q2NTNGNDE3QUFGRURENkQxQjUKKzoxMDFBMjAwMEJERDM1RjU0OEUzRTkzQzdCODdGREEwRjdBMDdFRDE5QTYKKzoxMDFBMzAwMDg1NjVFMzdFRTlGM0YwMzA1RUVGNzNEMEJEMEE5RjgzRTYKKzoxMDFBNDAwMDhGRjE4Rjk2M0I1MERFOEVGNzJCQTQ3Nzg2RTk4RENGRjIKKzoxMDFBNTAwMEMxRDdCMzkyRTczRDNGRDJEMTlFQzRFRDZBMUI5Rjc3QjkKKzoxMDFBNjAwMDY3ODY5M0RGNDcyNENFMUZDQUMyNUU3QjUwRjhDMTk1QkMKKzoxMDFBNzAwMEQ0Qjk2RUZDODk5MDRFN0IwQjk1Mzc0ODlFQ0MxQkEwNDkKKzoxMDFBODAwMEZENDZDOTZGQzNGMjFCOEUyNEFFNzc3MjkzODgwRkY3QTEKKzoxMDFBOTAwMEEzMkQ0M0Y3MUMxNkY4RDAzRkQyMUYzNEE4RjcxNDg2QTUKKzoxMDFBQTAwMEYwRkYwRTYyN0U4RTdBMEZBMjhCRUMzMzcxMEY2M0VGMjQKKzoxMDFBQjAwMENERDVEODVFQjE0RDQ2OTM3M0RBMTM4RjZERDE4MzBEQkEKKzoxMDFBQzAwMDdBRDBDMEEyRURGMTNDRDUzM0M3NzVFMjlFQzRERDVCOTAKKzoxMDFBRDAwMEQwNUUzRDk4QzQzNEY3NDAxRTQ0M0YzQThEMTdEQzgyRjcKKzoxMDFBRTAwMEY3M0VDMkY3NkU5MDYxMEY3NjdERkVGN0I2NThCMjYyOTAKKzoxMDFBRjAwMEYwNTRCOTBGNkM2OUE3M0M1OUJFMkZCMTMzN0U0RkY3MzQKKzoxMDFCMDAwMDc5NzczODA1OTcwQkVDNEZBRUNBQzc3REY5OUVEMzE5OEMKKzoxMDFCMTAwMDlBREY1RDEzRUQ1MzQ1RkJBNkMxNDhEMzAxMzdCNTlGNEUKKzoxMDFCMjAwMDk2MEZFQkEwNzEyMDkyNTI0MkVCMkI1MjExREYzRTQ1RjMKKzoxMDFCMzAwMEVDRjdFM0RBN0Y4OUM2MUZBNTdEQjEwQUNGODE3NzZGMDUKKzoxMDFCNDAwMDJERTFFRDJCNzFGQzBCRUU3MDA2RTVCQzI0QzA5MzM2NDUKKzoxMDFCNTAwMDdDRkNFQkZGMUEzQzkzNDRGQkYzQTE3N0E5RkQwNTE2MkYKKzoxMDFCNjAwMENFOTg1MjQwRkQ2RUMyN0UxN0RGN0FCNzQyQ0MzQjAzNUYKKzoxMDFCNzAwMEVENjQ5MDhBMzdFMzdCMzRCN0Y4RUZCMUI0OTBGRERDQzUKKzoxMDFCODAwMDZGRUFCMUExQkQ2NkQ2RjdGODUwRUUxNkUyQkQ0RUQzQUUKKzoxMDFCOTAwMDYzQ0YwNUY5ODVEQ0FFNEE3OERGNkY2MjY5QjVDODhGMUYKKzoxMDFCQTAwMEFEM0FEQUJGRjQ5Qjg2Q0E0QUQwOUU3RUQxMDIzMjBGOEMKKzoxMDFCQjAwMEY1QzIzQTBGQ0FDMTgxRjA1QTRGMDlCNEVCQ0I5OTQ1MkYKKzoxMDFCQzAwMEZCOEE4Mzg2OTY3RTNBREZCQkM0NDJFNzRGRkI2QzNEQkYKKzoxMDFCRDAwMDM2NUMzRjY2N0I4RjBERTMwOEYyN0REQzdFNTI5NjVBQzEKKzoxMDFCRTAwMEZDNEYyMTNGODVENjE2MkY4RjVCQkY1NTZFM0RDMURGNjEKKzoxMDFCRjAwMEZEQUE2NTMzRUUwM0JBRjU5RTlFMDk2ODY3NUIxNUNBQjgKKzoxMDFDMDAwMDNGNTc5NjBFQ0VBN0YzODIzRkQwMzE5MkVGMzBBRjJBRTYKKzoxMDFDMTAwMDI4NzczNkVBRThCRUZBODdERDRCRUY0MTNDMzBDNUU3NkUKKzoxMDFDMjAwMEFCODI3RTc5RTk4QTg0RTcyRjFFNTQ3QzI2OEM1RjE4NkMKKzoxMDFDMzAwMDg1RERENkU3RTFCRkY3QUE3RTc3ODdCMDJGNzdFNEYzOUIKKzoxMDFDNDAwMDdCQUJCQTk3MUMyODdFMERGQUY1QjVBRUVEQzdFRjk5QzAKKzoxMDFDNTAwMDI3OUExOEU2OTlGNUU1OUNFOUM2RjNBMjhGQkI2MEM3MDEKKzoxMDFDNjAwMDBCNzhCMDM0RThFOEY3NUExRUFGODUzNkE5RThDRjMwRDQKKzoxMDFDNzAwMDY4RkMxNUNGNEFGREQ0M0VEMEE4QTM3RDgyQTVDNEEwQTAKKzoxMDFDODAwMEYxNkZBNDM1RThCQ0U4NzczQ0UwRjY2RjQyN0VCQkZBMjIKKzoxMDFDOTAwMDZERTUwNkZDOUU2QkJDNjI0M0ZERjQ5MEVCMTcyNjFEQzAKKzoxMDFDQTAwMEMwOTk1MkFFMURENzM2NEIzQjhFQTM1QTVCRUZBQ0Q1RDUKKzoxMDFDQjAwMEQ2NjcyQ0Q0RDZCQkJFNjY0OEYwRDc2OENCMjlDODQ3QjgKKzoxMDFDQzAwMDg4NDc5MDAxMTZEMDQzNDlCQzhBMjU1OUFFRDBFRjg1OEMKKzoxMDFDRDAwMDc1RkI3N0Y1NEM4MDM2QzZFNDQwRTk2QjAwNkZEMkE0MDMKKzoxMDFDRTAwMDI0REFFRjZGN0MzNTA5MTcxRkM4MUY0NjcyNjdFMzE0QUIKKzoxMDFDRjAwMDQ2NzlBRkM3NzJCRkU5NDI3RDlBODg5RkJFMUMwM0NENkIKKzoxMDFEMDAwMEQ3NTIwOEY4MkNDMEZERkE1OUZBNUQyRjBCOEI2QjU3OTAKKzoxMDFEMTAwMDgwRjhGMTNFOTNDRkY3RUZDQzU1ODFGRTM5NDY3MkYwNTMKKzoxMDFEMjAwMDU5RDU3RjdDMEIzRjRGRDVEN0NBRkREMjBGMkRFMjc5MTUKKzoxMDFEMzAwMDgxMzQ4MzBBNUNERkJDN0QwQUZFQ0VEODU0RjREQjc3QTUKKzoxMDFENDAwMEREOERGOThFODk3OENEQzRGQzMyMzlDNjFGMUJENEYzRTIKKzoxMDFENTAwMDJCNzg3QUIyODI4QjY1NUM3Nzk3RENGQ0ZFQ0Q5NzA1OTkKKzoxMDFENjAwMERGMUMxNEY3MkQ0NERCMjNGRTMyMThERkNBQzI3ODZGNjQKKzoxMDFENzAwMEU2QUJGRTA3N0UxRTYwOUIxQThGMTE2NUJDQzYxMENCQkEKKzoxMDFEODAwMDA3OEYzQjZFQzBGNUI0NkRBMUEzMENEN0QzNDY2MTk3MDYKKzoxMDFEOTAwMEE1RTYxOEJDMTMwMURFNDdERTMwMDRBNEFCQTBBQ0IwNEUKKzoxMDFEQTAwMEUzN0FEMEU3MDcxREZDQkI4NjM3OTMwMjc4OUVFQTExRTEKKzoxMDFEQjAwMDU3Mzk5RENGRkEzODlGRkJGMzlFQUJGNEZDQkM5NkQ2MDcKKzoxMDFEQzAwMEEzNDJFN0RGMUU3MTdBQ0M2NURDREVDMEJCQUUxOUE1OEQKKzoxMDFERDAwMDE2ODE2OTcxQjRCNjhDRjZBOThGNzgzRDY2NUNBRjhGQjkKKzoxMDFERTAwMEU0NzhDQzk4OUY2Q0NFNTI2Q0I4OEUxRDJFODVFRUQxQzcKKzoxMDFERjAwMDdBQzRFNEI3QTFEREUyMDAwNTg4QkYxRjY3QzhFRDk5OEEKKzoxMDFFMDAwMDQ3RTc5MjAwODdCQTBBMUUxMjYwMjI4RjBGRjNFOEQyQ0EKKzoxMDFFMTAwMDA0QkVGQTVDNzdEOUYwRkNCQUIzRjBEMEI3RDBBRjlFNkQKKzoxMDFFMjAwMDg2RTNBNUYwN0U4ODI3QkJDMEQzQTU3QzM3Q0Y0QjE2QjEKKzoxMDFFMzAwMEUzQTdEREY1MUNCNUM3QkZDRThBQjhGMTNDOUNCRjBDNEIKKzoxMDFFNDAwMEYzNTg5MDdFMDc0RDdDNUYxRDI3M0EzRUYzOTJERjdFNkMKKzoxMDFFNTAwMEMzNEYzOERFREE3M0Y5RkQ0MTg2MzU4Q0Y2NjFDRjU1MTQKKzoxMDFFNjAwMEZBRjcxRjQ1RkM2NDI1RDEzRTNCREI5NTVEODVGQzkxNkYKKzoxMDFFNzAwMEZEQzZDRTA1NzgwRTYxQzM0RkI4RkUzNDJDRTdGMUE2M0YKKzoxMDFFODAwMDZDODU5OUJFOENGMzRFRjdEQjEwOEY4OUVCMzBFQjc4QzUKKzoxMDFFOTAwMDRGMUQzMkRCRkYwNTQ2NThENEM2MDA4MDAwMDAwMDAwMEQKKzoxMDFFQTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3RDBCN0NENEM1MDMKKzoxMDFFQjAwMEI1RkZGQ0Y2OTU0REIyNDkzNjBGNDI0MjQ4RDhDRDhCNUUKKzoxMDFFQzAwMDQwMUU2Q0MyNDM0NEQ0RTUxMTQ0NDVCQTkxMzcyMkZFMEEKKzoxMDFFRDAwMDQyMDIwNDQ4MjA4MEY2QTZENjlBQzUwNDQ1QzUxQTJBQUYKKzoxMDFFRTAwMDJBNUFENDhEMDJDNThBQkE1NDQwQUNFODVEMUU1QUFBNUIKKzoxMDFFRjAwMDU2RDNBQUI3NTQyQjREODQyQUM4MkI4NkY2NUVEQTdBQkQKKzoxMDFGMDAwMEVEN0ZCRTY3NjY5MkZEMkQ4OUQyREVEQkNGRTdGRUUzNzMKKzoxMDFGMTAwMEE3MURFNjM3QUYzM0U3OUMzOTczRTY5QzMzQjMzQjkzOTkKKzoxMDFGMjAwMEQ4MkQzRTA3NjM0OTEzNkRDQzY1NjdGNEY3NzdGRUJGODQKKzoxMDFGMzAwMDc0MEI1QjY3NEU2MjJDNjUwQUZGNUUxMEY2M0QyRDY1RTMKKzoxMDFGNDAwMDdDN0UwOTYzQTlEMzhERjVEMzU4NThERUNERUIxREVFMDkKKzoxMDFGNTAwMEJDOERDNTMzMzZBMERBNThFRjg5RDhBM0E1Q0M4NDVDRjQKKzoxMDFGNjAwMEQ4NzdGM0I3RTc5QkI1RjY3QjA3OEY2MENDOUY2RUYxMTAKKzoxMDFGNzAwMDZDNzUzMTk2MTkzMTFFNjM1RjQ3MjFBRjMxOTNFQkVGREEKKzoxMDFGODAwMDM5OEM4RDc3MjUzMkQ2MEZERkVCNURCRTYyQzY3NkRBRUYKKzoxMDFGOTAwMDlDMTMxQzI5OEM3NUFFNjQ5RUE3NzlGQkYxMkZBRjlGMTMKKzoxMDFGQTAwMEZCMzZDRkZGNjdBNkMzMTlDNTZCNjUxQzZFNjkyQkUyQjQKKzoxMDFGQjAwMERGRDk1RTdEMzBFQTZGQjZFODRGQzVGMkYyQ0Q0N0ZBNjEKKzoxMDFGQzAwMDMzQkZDNjU4NTQyQ0FCMEY3MjNDRDk0QzRDNDdGQTc3RjAKKzoxMDFGRDAwMEZDNUQ4RDcxQUMzNENFNzgxNzlGRDQ0OEM2NzgxNzAxNUMKKzoxMDFGRTAwMDUzREEzRjlGMDYwNzBFMkM3NDdBRDA5RkJCQ0RDRUZCRjEKKzoxMDFGRjAwMDBENUE5Qzg1MTY5RTFGRjlENEEzMEY1QTMzMzEwRjBFMkMKKzoxMDIwMDAwMEUzMTg5QUI2OTc4RDY2RUNCOTQzN0NEQzAxM0NFNzdGMTgKKzoxMDIwMTAwMEUyQzE4OTE2NUUxRUQzNURFRTQ3Rjk0RTkzNDlFNEZEOTkKKzoxMDIwMjAwMDgxMDcyNzhFNjU2Q0UwQTFFMDFBODc5M0IxOEFBN0I2NzUKKzoxMDIwMzAwMDNGNjhFNzc4OEJGRTk1MjhGN0YxQkNERjAyQkNENDBFMzEKKzoxMDIwNDAwMDZBRTdGMzNCOTBCNTk0RTZERkY0QkIyODE2QzVFQjE1QzEKKzoxMDIwNTAwMDlCM0Q5QjkwNjcxRjQ3QjNBRDNDQkY3REY3RDhEOTJFMDIKKzoxMDIwNjAwMDVFQUYyOTZFOTQ0QjJGNjI2QzlBNEJBM0Y5NTcyMEVEMEIKKzoxMDIwNzAwMDc3RjFCQ0NDMzY4RkVFNzE1Q0ZDRkQ3QTg5MzdDNjNDQkIKKzoxMDIwODAwMDQ3NUEzOTdEOEI5RkIxQjFGQjc4NjEwMUUwMDZCRDVBOUIKKzoxMDIwOTAwMEEzMDM0RjgzQkUyRDhGNzJBNjYzQUNEQTI5Njg1RUJEQTEKKzoxMDIwQTAwMEU3QkVBQ0ZEM0M3RDI1QUVBMkNBQzVEQjU3Qzc0RDRDOTMKKzoxMDIwQjAwMDA1M0MxOTE3MThEMzkzMzlERDFBRUQ0Q0U3QjhDQTQ4MTcKKzoxMDIwQzAwMEY5OTlDNjM4N0MwMzUzMEU4RDYzMEVGMDREREIxQTI3NDkKKzoxMDIwRDAwMEQyRkExOEE2ODdGMTY1QzYwNTBCRDM4N0EzM0YyRkY1NjMKKzoxMDIwRTAwMDg3M0Y3QjJBQjg1MEZDMzUyN0U5NkMwRDg3QzdDRjcxMzUKKzoxMDIwRjAwMEJEMTVEQ0U5OENFOUQwNEFDMEY4MTNCREVENkE3RDY0RkEKKzoxMDIxMDAwMDgzNEZEOUVDNjAxMUI4NEVFMEMxQzY3MTZBMkRFM0E5QzYKKzoxMDIxMTAwMEMzMTI4QUVBQTVGRTZEQjI5RUQ5RUUwODk5ODdGMUQ0NjIKKzoxMDIxMjAwMEY5RTYxMUVBRDc2MTM5REQ2RUVGQTk2NzBGNTgwODFGOEMKKzoxMDIxMzAwMEFDOTYwNUYyMzRDMjkzM0YwQUY5ODQyNENBMzNBRkQ3NzAKKzoxMDIxNDAwMDk1OTIwQUZFNjc4NERDMEMwQjNCMTRDNUM3MjVFRUU1QUYKKzoxMDIxNTAwMEVCMjc5RDg1Mjg3RDgyQTNDNzkxODM0QTk5ODk5RkM1RDYKKzoxMDIxNjAwMDMyN0M2MkUwRTNBNzE5OUIxQ0NFRDcyQTM1MEQzMjExRDEKKzoxMDIxNzAwMDdDQjkwREE2N0VDNzM5N0UwQTBGNDYxMzFDOTY3NTJDQjYKKzoxMDIxODAwMDEwQ0QwN0NCMDUzRDM4REQ3MkQ3QjM4MEM1OEQ3QUI2NEIKKzoxMDIxOTAwMDdFQzc5M0QxQ0UyNUY5QzA2OTYyMzQ1RTcwMjhENkQ1NEEKKzoxMDIxQTAwMEE2MzcxREVCNTkwMkQxOTdFNENFQTYxODU2MDM3Q0E5OTkKKzoxMDIxQjAwMEYxMTg1QjQzRkMxMDkwN0NCMUI5RDE0OTc0NTRFNTAzMkMKKzoxMDIxQzAwMDZCMEY0NEQwMzFDOTQwNDc1NTJGRTNDMjAwQTI2NzRGN0YKKzoxMDIxRDAwMEJGMDFFQTJGQTM2MTE3RjE0M0M2ODUyQ0M5MjdBRTZGNTMKKzoxMDIxRTAwMEU5M0ZCQjhGRkVEM0E4N0RERkZEMEZBNEYxOUYwODdERTMKKzoxMDIxRjAwMDkwMzg5NUEzRTJDNzlEQkIxMjdEM0M4REI2QjZGODNDRTYKKzoxMDIyMDAwMEJERTAzOUUzNTZBMzlDMUNCNkQ3Mjg3NzE1NUVBMkFENzYKKzoxMDIyMTAwMERFOTQwQThFRkZFOERCNEM5RTU2REVERjY1NDc4Q0Y1QzgKKzoxMDIyMjAwMDI2QkIzRjRDQzQ3QUVDQTkxRjRBOTk4NkZBNzVBMkZFRDgKKzoxMDIyMzAwMDE1Mjc4Q0Y1N0RFMzc2NDdENDE3RjA1RDdEQzE1ODJGQzcKKzoxMDIyNDAwMDkyM0U5MUYwNzJCOEZBQ0QwODgzNkI4MjNEQ0FEMDdFN0YKKzoxMDIyNTAwMDc2RTU0NTcwRjU5QjE1MDZENzM1NjlDNkZBRkE5QURFMUMKKzoxMDIyNjAwMEUxQkFCRTIwRUExQkUxNTJGNUJFMzNGQUQyRUE0NUNFMEUKKzoxMDIyNzAwMDYzREFFNEE4M0VGMDJFRUFDRjlBN0Q2OUZEREU1NEYzREUKKzoxMDIyODAwMENERjU2RTY5ODgxQ0M3MkZGNzJCQkVCNkY4M0E0RUM2M0YKKzoxMDIyOTAwMDNGRjgxMjQ4NkUzMDc5QTNGOTNFRUE2NDlEMENFQkE4MzIKKzoxMDIyQTAwMDRCQUVBQjI0RTZBNEY1Q0MxN0JFODY3NUY1M0VGRTk5ODEKKzoxMDIyQjAwMENFRDgxMEI3RUYyQkM4QUYwOTc2RUZCQzg3NzlENTg5OTgKKzoxMDIyQzAwMDcyQkY2MjUzNzg4Rjk3QTM3MzVGRjE4REM1MTdGMzFGQTkKKzoxMDIyRDAwMDYzNzcxMTVDQUY2QUJBQ0U2ODlGQjU3QkI2RjJGNTVERTUKKzoxMDIyRTAwMDk4QzFFQ0U5NUMwRjYwNjk4MUVDMUJFMzE4OEI3NTJCREUKKzoxMDIyRjAwMDc5Q0Q0NTBEODc3M0E4QzREREYzMDM4MkFCMTI2OTlEQzgKKzoxMDIzMDAwMDA3OTIwMENGM0YzQTZFN0ZCNzM3QzlEREFGQTc3RTY0MzMKKzoxMDIzMTAwMEJEOUVGQTAyNEYzNjVCNzAyNUUwRUNBQzczNzhCMDNGOUYKKzoxMDIzMjAwMDdDODAyMkRFRUU5OTk5NTEyMTMzQzdENzM5QUI2MzlENkEKKzoxMDIzMzAwMEM2RTVDQzkxRDhGOTZGRjZFMzc4NzgzRjVFNzdBMUZGRDgKKzoxMDIzNDAwMEQ5QjNBRUJEMUI3OUVENDBCMjZCMTU4N0VGNUM2NUZCNzEKKzoxMDIzNTAwMDI4RTBENTFCQUJFN0JBMzkxQ0I1NzY3RDUwMkE5RkUyNDEKKzoxMDIzNjAwMDk5NEM3RDcwMDJGMEVCNEIyNkJDRjI3RjE0RkI3QTg1MTIKKzoxMDIzNzAwMDVGQzAzMzUxMTNGODRGNEVEMDhCMzFDRTQ0NTNEQjkzQjMKKzoxMDIzODAwMDNFN0NCM0I0OEQ0MjNCRTZFQzQ3RjA5REIxNzE3OUQ3MEEKKzoxMDIzOTAwMENCRkE1Nzc4MTgyRkZCRDk2RkY1N0NENUM5RTdCNzdGRjMKKzoxMDIzQTAwMDQzODJBNzg5QzM1QjlEM0M2QkZFMEE1RUI0RDBFNDRCQkQKKzoxMDIzQjAwMDBEOTkwRDcwNUY4MUYxNkExRDk1ODNEMjAxQjc1NUMyRTkKKzoxMDIzQzAwMDZERUYyN0YxRUVDREZEMjZCODlCMzAxRUY2QjUxRjY4RTgKKzoxMDIzRDAwMDgxQUQ2RTQxNEJFNDVGRjYyNzA2RUVFM0Y5MjhEM0Y5QjEKKzoxMDIzRTAwMDBGMjAzRjNBOEI0RDFFQkU0N0IwQ0Q1Q0JGQjBGMzdEOTIKKzoxMDIzRjAwMEU1M0Q4OUVGMjdCOEZBNjM0RkEyRUZFQkYwM0QyRDQ2OUMKKzoxMDI0MDAwMEI0NEY3QkM0MTQ2OEUyRUQ3REUzNUYyMTNBM0RCM0RDNTkKKzoxMDI0MTAwMEUxMzFGM0IxMkE5OUNCMDZCRUFENjI1RTFCRTBGRkUzNkEKKzoxMDI0MjAwMEI4QkZCREQ2Q0VFNzM3QzdBRDRGQzczQzZFNDkzNjY1OUUKKzoxMDI0MzAwMDdENDA3MEU4ODUxNTlDREZEODU4ODFGRjZGRTMwN0M2QTMKKzoxMDI0NDAwMEQ2OUJEODI4QzY2RTk0RkFDMTQyODlDNzY5Q0M2QkM1QTEKKzoxMDI0NTAwMDM4MzM5ODZFQzVCOEJGMzk2QkYzNDIyRkZEMEQ3NDUwRjkKKzoxMDI0NjAwMDBFRUYyQ0U2QTdFRjczNTg4MEQyOUI1ODg4RUFERkNDOUEKKzoxMDI0NzAwMERBMjlGRkVCRDg5MkNDMDYwRTVGQzVBMzgzRjNCMDFFMUEKKzoxMDI0ODAwMEMzRjBCRTU0RjJDQjJEMjk4MjVGM0VFRjBGQkM2RkVDNDAKKzoxMDI0OTAwMDc3NDlGQzVCQTEwOUZDMEQ3MUVCQUJEREI0NUU1RDI5RjYKKzoxMDI0QTAwMDFFQzBFNDlDMzBEMDE3MTdCNjdFMjZGNjEzRkM2NzcxNjkKKzoxMDI0QjAwMEU2N0REM0ZBNjlFQjhBMkY2MUMzNDgxRTM4RDIzOTFFRjQKKzoxMDI0QzAwMEFFOTFBNEJDQzZCQjZDMEFFNjBCMDk4MkY1RkExREI5MzUKKzoxMDI0RDAwMDVFQ0JDRDBFOTZDMkU5RDJFNjMyMDdBMjM4MkM5M0M3NjYKKzoxMDI0RTAwMEFENENDMzdDN0ZCMTg2RkQ2QTM4QTdERjJGQzY5OTU5RjIKKzoxMDI0RjAwMDEzRDVGNDUyQkJBOUIyQkZBOTAzMjc5RDg0N0VGMjBFNjcKKzoxMDI1MDAwMDBCQTU4Q0UwRURDQTJGRTg4NzEyMzg3RUE2OUE3NzM0QTcKKzoxMDI1MTAwMDczOEQ5QjREMUU2OEZEQjQzRDRDQUU1RDlCQjJEM0MyMjYKKzoxMDI1MjAwMEI4RkU3MjVEQUVGMUZCOTQyMjlFMEY5M0JCNTM5OUE1NEEKKzoxMDI1MzAwMEE3OUNEMzdGM0ZGMDAzQjlDMzVBQ0NFMERGNDdERDcxREUKKzoxMDI1NDAwMDI5RDA1N0Q4NTAzNjU0OUMwRjM4MzVDMkU2RDM2NUZGOTIKKzoxMDI1NTAwMERBNzY4RUI3N0JDQkFEM0YwOTNFNUE5NTc4NzYzRUU5NjkKKzoxMDI1NjAwMDFEMTYzMTlGRTVFRjlBNDlBRkZDQjQ5MTgxRjNEODcxMDQKKzoxMDI1NzAwMEFFMUY3QUYzMTlGQjhDRUIxN0M4OUY2ODRDQTNGNDBCQzIKKzoxMDI1ODAwMEFFMEYyMDNEREQ1ODQwRTU2NzFCM0Q5NEZGRDJFREZCQ0IKKzoxMDI1OTAwMDA5RThCNDYwREQ5NzE2RUM0QkY3NDQyQjdDMEIzODU2RkEKKzoxMDI1QTAwMDRCQkVCQjI3NzNENEEzN0ZFNTc4QkRFNzFEQkUzMDM4OTMKKzoxMDI1QjAwMDNDMzVDMTk2NDkwMDdCNzVFNkE3Nzc0MTdGNUVGREFDNEYKKzoxMDI1QzAwMEU2NDFCRDY1RkJCQzM2MDc4NzY3RTEyMUZENkU5MDc5NkEKKzoxMDI1RDAwMEYxM0JFRDUzMjEyNkVBQTBCRjcyQkRFMTVFQUI2RjM3NDAKKzoxMDI1RTAwMEM2MUJGOUUxRjE1NDlENTdGMEVFRUI3ODMzOTlEN0ZGMTQKKzoxMDI1RjAwMEJDNzEzNEMxNzVCMkQxNEI3MDlENkE5QzRDNjk0Q0I2QUMKKzoxMDI2MDAwMEVGNTVENEY3QjIyRjZEQTg3RkMzOEUwRTRCMDZBRjVGODgKKzoxMDI2MTAwMEVFRDVCQzU4OEY1Nzc5NTkyMEMwRTFEOTY0MTVGMjdEQTkKKzoxMDI2MjAwMDEzOTdFRjU4OUZFMzhBNkY3Q0UyNTYwNkY5QUJCRjgxQTAKKzoxMDI2MzAwMEY2MzM5MkFBQ0E5M0Y5RjdBOUEzMkIyREE4MzdFQjJCNEYKKzoxMDI2NDAwMDJFRDNEQzNEN0NGOEVERUI1MEUwQTM0RUQyRTVDQ0VCOTUKKzoxMDI2NTAwMDFBRTFFOUNDOUVDMkVGNUNDMUZCN0JGREIwOTk5OTM5RDAKKzoxMDI2NjAwMDVDNUQxNzRDMDQ1N0Q3OTE5ODAwOTQ1NjU1NkZENTZFMDIKKzoxMDI2NzAwMDMzRTk5M0FCMzI2RDAxRTA2RkQ1RUVDMkZFRDBBNzRFQzkKKzoxMDI2ODAwMDcxQkFCMUZDOUVGMTRFM0RGRjZGMkUzRDRDOEU5RTRBQkQKKzoxMDI2OTAwMDBBRkVFNzQ3OTA1MzlGMDgzOUM1RjVDRENGMUU4NzFDMkEKKzoxMDI2QTAwMDFCMzhDMDAzQkE5RkI1NzJCRDFDODg2NkY1QjFEOEM3ODgKKzoxMDI2QjAwMDk2REJFNEZBRTI3MjA2Rjk1MzMxRTIxQzNDRUE4NThDQkYKKzoxMDI2QzAwMEYxNTgyRjE4Q0Y2NUVCOTE0M0Y5MkYzQzlBRkQ3RDU3QjgKKzoxMDI2RDAwMENGNzhEQjgzMEIzRjdBOUNFN0NGMDQ0QzdFMkJERjY3MDAKKzoxMDI2RTAwMENFQjBFMEQ5OUY0MzhFNkU3MTc4NzAzRUI4NDdFM0YwNkMKKzoxMDI2RjAwMDYwMUZERDNBODBGMjA1OUEyNUE2ODFGODM5NDBFQkI1RDYKKzoxMDI3MDAwMDQwNzM1OTFBQjhGQ0E5RkREOTYzMDNDMDRGQUY3MjFDQkUKKzoxMDI3MTAwMDhDRTZFNUFGNkU4ODI1RjlGNEFBRDU3M0I0MDFGRDNEQ0EKKzoxMDI3MjAwMDIxRkFGQkM5MEZCRkY3RTk1RUE0MEZENDk1N0QwRjQ4Q0UKKzoxMDI3MzAwMENFNEUyMjdDNTdGRjY4Qzk1MEI0RTdGQjM0NEJFN0ZEMEYKKzoxMDI3NDAwMDNERjdCMjE2OEFFNkVCQjM3OEUzRkVCQkQyMzk3Q0MzMjEKKzoxMDI3NTAwMDM2Nzc5ODA2RjBCNDc0OEJENjg0QjQzMEYzQkFDMzY2NzcKKzoxMDI3NjAwMDVFNkVDRjc2MTExQ0MzNzdCOENEMTk1ODU2MDMwMjFGODEKKzoxMDI3NzAwMDVENERGQkI3NzE1RjJGREFGOEU1NzgxQzJGRDVGRTNFNzMKKzoxMDI3ODAwMDU0MEI3RUQxOEFGMzcwRDY5MTMyOURGMEQ3NDJGREVDODYKKzoxMDI3OTAwMERFMzdFREZEOUIxOEU2QzEzNTA3QzA1RDY5RjNEMDdFREQKKzoxMDI3QTAwMDEyRjBCNzgyQ0U2N0Y0MDJDRjdENThEMzNFRkY2M0EwMEMKKzoxMDI3QjAwMEVGMTkzREQ1ODNGRDY1OEZDOTFGM0YwNkY1OEY1QTY4MTgKKzoxMDI3QzAwMDlFMkY2RkY5NzVCQzk1RTcxMzc2NTk1OTM0MkZBRjJCQUYKKzoxMDI3RDAwMEVEOUM4NEZBNzU5OTJFM0E4NzY3M0U3OUNENjRFMDY3NUYKKzoxMDI3RTAwMEY5QUVEREFERDQ0RkFERERBMzYxOURFRDNFRkY2NjA2RDQKKzoxMDI3RjAwMENFNDNENzMyNEYxRUY4NkU5N0M4REYzRkQxRUIwMUJGRjMKKzoxMDI4MDAwMEQ1QjRGRTU5RTREQjdDOTRGNzk5RkQ2RTBCRUE1NzA5QzkKKzoxMDI4MTAwMDNERTc1MUI5OEZCMUY2MTI5Mjc3QzRDQUFFMUU3QUREODgKKzoxMDI4MjAwMENGOEI1MUJFQzlFRDRGQUY3N0Y0RUM3RjdDREYyQUNDNjQKKzoxMDI4MzAwMEU2RTVFOTM2RDlERTM5MkRDQkY3MEZFQzVCMzZCOTBGN0IKKzoxMDI4NDAwMEE5RkUxRUI1MzE3RjM0RUYyNzkzN0ZEN0IwQUZEQUM0MkUKKzoxMDI4NTAwMDdFQkI5NUNCMTdGMDhCREE2RkY5Qjg1NzY0OEJGNjVFQjkKKzoxMDI4NjAwMEM4QzkwQ0JFQjk5NkYyRjk2NDNDMUExNUEwM0RGRDEyMTgKKzoxMDI4NzAwMEM3NTc3QUQyOEExODIxQ0Y5NEZFMzEzQkI5RTlCNTc2OTEKKzoxMDI4ODAwMDhFRDczRkM1RUJENzYwN0UwQkU1N0VDRDJDOUUzNENDM0EKKzoxMDI4OTAwMEVGNThCQzc3MzJDNkFGQjU3NzY2NjEwRTdDM0Y5QzgyM0QKKzoxMDI4QTAwMEZDNzIzM0Q3OUY3MkMyRjQyN0ZCQTVFRDg3NTEwOURFNzYKKzoxMDI4QjAwMDFCRDFGRTUyRUI4RjhERTk1REZFOEVFRDFBNERGMkY3QzYKKzoxMDI4QzAwMDM1Mjk3RjU3RkZEOUM0NEE3OTdFRjVDMzUxMjQ0RjY4MTMKKzoxMDI4RDAwMDRGRUIwNTJGQUZGMUY1QUU3M0Y5RjJFRkIwMUJGMEY0NEIKKzoxMDI4RTAwMENBM0ZCNTlCRTlGQzcxQzg1NEZCMjZERjRGNjlFODZDMTEKKzoxMDI4RjAwMEZDNUY2NzUzQzIwOENBN0I0MUU2QUJGRTY0RUFGNTdDMjUKKzoxMDI5MDAwMEE4NTI0RUE3N0FDQ0NCRkI5NUQxREU3MEY1NTc0RTFCNjMKKzoxMDI5MTAwMEY1RUY0OEJBQTRGOTlBRkI5OEFGMzk1RUNDNzcxRkU2NzkKKzoxMDI5MjAwMENCNjlCN0ZBQ0IzMjkyOTdGQjJFNzE5RTk5NTFERTM1NjcKKzoxMDI5MzAwMEEwNkZFNDNDMzhEQ0Y3RTA3QjI0RENEREZDREQ3OTY5NkEKKzoxMDI5NDAwMDcwREZBNjMxQkYwOUVCRUM0QjVCMDBFQjZDMUYwNzEzOEMKKzoxMDI5NTAwMEVCNzZERjkyQTIwMEQ2RjMxRTlCQzhGQkUzNkRBNDdGNEIKKzoxMDI5NjAwMEVFOEI2MzdFQzg4RjdEMTVBOTAxQkYxQjcyOTAwOUZEOTgKKzoxMDI5NzAwMEI0MUYxM0U1RDFCMkZEOUM1NDZBM0YyMDhBRjMzRkNGQzgKKzoxMDI5ODAwMEIzOUI2MjY0RkZGNTZGMTdBMzdDNEQ4Njg3NDNDMEY1NDgKKzoxMDI5OTAwMERCQzBCQTZDRDI2RkNENjQzNzNDMjJFNUY1QzZDNEQwM0IKKzoxMDI5QTAwMDRENjZGRTdERTM5N0Y5MENFMzFDNjFBMThDMTVBODU3RDkKKzoxMDI5QjAwMDEzNDM3MjY4NjNBMjM3M0Q4OUUzNzFDRkQ3NjZEQTE3OTQKKzoxMDI5QzAwMDM2OTZGMkJDODNFNDM0RDk3NzM2NTY3OEQzMTM3OTdFQzEKKzoxMDI5RDAwMEFFQTRDQkM2RDZDMEQ2NDdEMDVGNDU4MUM3Q0ZDNzE5RjYKKzoxMDI5RTAwMDYwNjZGNTU0Q0YyREZBRjlDODJBREFGRDRFRDI4NUFGQ0MKKzoxMDI5RjAwMDYzNUFFN0VGNjcyRjA4MDFDRkZBRDQ1ODBCRUMyMjFDN0IKKzoxMDJBMDAwMEUzRTkxQTg3RkZGMUVBM0M0NkYyNTJEQUJENjY0QjFBNTcKKzoxMDJBMTAwMENDRURFMTAzQUY3RDE0RjQ1QUYxMzc2N0UxRDY2OEM4MTUKKzoxMDJBMjAwMEUzMTkzNUQxNjQ5NzNBNTI3MzU3OUM4QjhGMzc0MzM3RUMKKzoxMDJBMzAwMDg3QTJBMEZGNEQyRjM3RDg5RERFQ0ZGNkQyQjhGQzYwMUQKKzoxMDJBNDAwMDIxQ0YwOUExMkFFMEYxRjU0RTNCODM1Q0VFOEI5RTc1MDgKKzoxMDJBNTAwMEMxNzFDOUM3QzNGOEExQzYyNkU0QzcwOUE5MEZCRDEyMzEKKzoxMDJBNjAwMEE3QkYwQjdFNUZCMUY3REFFNEUzNjFGQTVFRjVDMkYyNkQKKzoxMDJBNzAwMDdDQjJGQjU2NUZEQUY5QUUwOTc0MUE0NkVCRDU2RjAyRTkKKzoxMDJBODAwMDdGMDRBMzg5RkU5MzZGQjQxM0JEQkIxQ0E2QTc2MTk3RjcKKzoxMDJBOTAwMEJDNDVDQUFCMjYxQzg0RjlGN0E2REQ1MTgxQkJGOEI3NEIKKzoxMDJBQTAwMDE1NTFBMTk5OTA1NzlDRkVDRjZFMDM1RDVGOEIyNkZBNUUKKzoxMDJBQjAwMEQ3REEwNDNGRDVGRUJDOTBGODZCOEZDREVCNUU4QkZFNzIKKzoxMDJBQzAwMDVGOEYyMkJBRDdDNkJCMTJBOEZDQUQ2NDI2Rjk4RkY0N0IKKzoxMDJBRDAwMDg2REE5ODUwN0UyMkM3RTdCQTU4RkQyNEYwQzZGOThFRjAKKzoxMDJBRTAwMEVDQzFCNTM2RjFGREE4RTRBQkEzQkMwRkMwRTFBRjhGREMKKzoxMDJBRjAwMDIzN0U2NDMyQUY3RjNGOTlDRTUzNUMxRjI1RkVENTFGRTYKKzoxMDJCMDAwMDJDQTRCQzZFRjNBNjJGQzRGQTU4MTU0QkYwMUQ5NUY2RjUKKzoxMDJCMTAwMEI0QTNCNTg5QzRERkYzMUU1Q0Y2MEVFM0Y0M0NFQURCMzQKKzoxMDJCMjAwMDc2NkYzRUFGNzc3NDlGRDU4MzdERTlGNzBERTY5MDhEODQKKzoxMDJCMzAwMEQzRjVFQzFEQzc0NjZERTJGOUY2QkIzRUNFRDJDM0VDMzEKKzoxMDJCNDAwMDY4RjNFRUFBOUI4Mjc2RjM5NkRFMzExNUZCNjU1RkY4OUIKKzoxMDJCNTAwMDlFNTcxQkM1NjU2RTBGOUQ1MjcyQkNFNjFDOEU3RjRGNDMKKzoxMDJCNjAwMDhFNkVDQkUxRjM1QzUxRDRCRTA4NzJFRkFDQURFRDQ5OTMKKzoxMDJCNzAwMDlDMEYzRTRBRDBBM0YxRkREQzJCOUY2RjIzNzk2OEU5QkYKKzoxMDJCODAwMENDODc3RUJFRENDMkY5MDA3QzI5RjdDRjE1OTIyRjVGN0YKKzoxMDJCOTAwMENDRDExMzUwOUZFMzhGRjRGMUQ4QTIzNjIxRjdFRUI4RDEKKzoxMDJCQTAwMDM0MzlGRkM1QkVBRDdCMzQzRUNFQjI5ODdEQ0IyOTM1REUKKzoxMDJCQjAwMDA3NEFEMENGMjkyRDE0QUZFNTAwN0Y1QzhGRTNGRDlENDAKKzoxMDJCQzAwMDc2ODZFMjQxMDc1RDlFOUI5NjZEMzdDRTBCN0ZCMEFCNUMKKzoxMDJCRDAwMDJDQzMzRjc4QkI2NTQxMzNEOTU1RjhGRTZFMDNGQ0NCNUYKKzoxMDJCRTAwMDYwRTkzNUY4MTM4NDVDRTFGRDNDNERFQkQwRjFGQkY5NzUKKzoxMDJCRjAwMERGRTdGODVGRkFFQzkwMzJFODkzQ0IxMkY3RkVGMDBBQzkKKzoxMDJDMDAwMEFBQzdEQjI5M0UzNzVGOUM1N0YzQjkxODFFMzFCRkQzRTMKKzoxMDJDMTAwMDkyQ0Y0RjMzMjkwNzY3REJCQUNGRTFEMDgzQ0UzRURGQjcKKzoxMDJDMjAwMERGQzAzNzY3OUYxRDQyRjkyRkI0NEUyRDg2QzM3NTU2RkUKKzoxMDJDMzAwMENBMjNFNjA5OEVBQUMwMDFDMjFCMUMwNTdERjYxMUY5NDQKKzoxMDJDNDAwMDdENTk3MjcwMTRFNDhGOTI0N0NDMUUyQ0ExNzM3NTQxOEMKKzoxMDJDNTAwMEIwMDRFNzQ5MjVDRjk4MkY5ODRGREYwM0MxN0NCNERGM0MKKzoxMDJDNjAwMDYzMTI3NjBBRkFDM0JDOUZDQjY4MjUzQ0Q4QzU3QTVDNTAKKzoxMDJDNzAwMEZBNUMyMUUxNDU4RDEzNDlCRkM4Rjk0RUNEMTFGRTAxMjMKKzoxMDJDODAwMDBFRUYyRDNFNUU3RkYwMjY5QkExN0M0OEMwOTg5RjI5QzkKKzoxMDJDOTAwMEVCMEY4QUEwQ0IwMDczRTdGRTI4QzhGQjY3MThBREQ3RkYKKzoxMDJDQTAwMEM4NzE2RkNFMTFGNkY0OUZGRUI0OUIwRTY2Nzk1RTY0MTgKKzoxMDJDQjAwMDJFNDU3Rjk3RDBCN0FEQzBGN0VGQkFGMTdENkIwNjk3ODEKKzoxMDJDQzAwMEE3Q0IzMEM3RUM5RUY5RUYyOUQ1MzMyMEY3Q0Y5QTg0RjQKKzoxMDJDRDAwMDlEN0E0RjIyQ0YxNzQxQ0YxMUY4NTQ3OTg1Qzc0ODNFQ0UKKzoxMDJDRTAwMEJBRUI3NzhCMzJFMDRGNTk5N0QzRURFN0U4MEY3RTZCNjUKKzoxMDJDRjAwMDgyQkNFNEYyQTJDOTJBRjBGMTQ1NjNDREYwRTMxNjlDNTAKKzoxMDJEMDAwMDQ3RUJEM0FCMkQzREYzNTlCNEE5RDQ4RUY1QjI3ODczMEMKKzoxMDJEMTAwMEE5N0Q0MUQ4NzlBNzY5RkJGMEMzMkU0RTk3RDNEQjJENEYKKzoxMDJEMjAwMDY0MzY2OEIyMDQ3RTA4M0RCQTY5QkIzOUU4Njc1NDZFMDAKKzoxMDJEMzAwMEY3RjJGQUE3MUQwN0RFNDVCRDQ1OUIxM0NCQTBGN0FBMDYKKzoxMDJENDAwMEY2OEIzN0REOTY1RTFEODZFRkMyRUQ0NkZDMTcwNzhEQ0MKKzoxMDJENTAwMDc5RDhBM0MzRjMzRjgyMkUzOEYyMUY2RjU3MUEzMkU2OTkKKzoxMDJENjAwMDg3MUYzNkU2M0ZGRkUwRDY5OTYwRTM5NzQ3MEI3RTNGMkIKKzoxMDJENzAwMDExODgwQkMwNEY1NUYzRjFBNEMzRDhENzRFRUM3OTM5NjUKKzoxMDJEODAwMDFFRjQ1OUY2NDlGNTlCMzhCNzJDREU2NEU0MzM0RTM3MTAKKzoxMDJEOTAwMDBEN0FCRDdGOUI0NkZDQjEyNDEwQjlFRUU0N0FCRjY4ODIKKzoxMDJEQTAwMDNEQUU1MTc2Q0Q4MjcwM0U4OUE0RTcyOTE2OUNFOUU1QjcKKzoxMDJEQjAwMEZDNTREQkIwNkEzOEZDMjEzNTUzMzhFMzcyNzgyRTBGQUYKKzoxMDJEQzAwMDZFQjBDMTZGMTAzOTVFNUZFQjlFMzlCQzJFRDhBQjJBNTYKKzoxMDJERDAwMDQ3OEJCMjMxMERFM0Q5MzExODdERDdGRjdBMTJENjVCMUMKKzoxMDJERTAwMEU1RkQxQUVERkY5NTJGMEQzRTA0RjlEREIxNzNDRTc1QUIKKzoxMDJERjAwMDk0Q0U5QzRDNzg1MEY2QjNDNUZCQjQ1MDFDQ0YzQjQ3RTcKKzoxMDJFMDAwMEJCRjZCNkYzNzYwQjAzMUFFRDBGMEI5QUEzN0FFNDEwMTgKKzoxMDJFMTAwMEZGNUZGNUZBMDgzODM2ODY5NTczRjgxN0VGRERGRjE3NzAKKzoxMDJFMjAwMDhERjc1RkIzRDlEODZFMDlDNzE3RTRGRUQyMkQ3RjhGMTcKKzoxMDJFMzAwMDBBRkZBRUNFN0Q2M0Y2QjU5QTMxRUY4NTBBN0VGRjU1NjcKKzoxMDJFNDAwMDBDRjMxMjJFNDgyRTNBQTRCRTcyMUMxOTJFRUZBMzkyMzgKKzoxMDJFNTAwMDdDNkREODVGQzY2QzE0RURCOEMwQUFDNDdDRUIxQzM2ODAKKzoxMDJFNjAwMDE3RTY1QjY3NjdBMTU4MEVDN0UxMzg5QkQ3QzlCRjlGQkMKKzoxMDJFNzAwMERGMTQ0N0Y2QTk0NTUxNUMyRjJDQTM5NDQ1OTdBMTlEREIKKzoxMDJFODAwMDg3RjZFOUNGREUzMzkzQkU1Mjg3QjFEMUNGNTMxQTlENzcKKzoxMDJFOTAwMDdGRUE2MDZDNDRGRTE5OTE1RkMyNDIzNDBGRjA4QjM3QjkKKzoxMDJFQTAwMDdDN0UwMTYzOUVCNTg4NzM1M0FEMjVCNDFGRjg1OENBNjQKKzoxMDJFQjAwMERBQzVCOTg3RDNEMTFCRTY4RkFCRTVGMzNDOTIwNDdEMkQKKzoxMDJFQzAwMEM4RDg3RTA1MEI1MkZEMTU3QkZGMUUxNUZFM0RDQzRFNkUKKzoxMDJFRDAwMDRBRTczOTc1QUUzNERCOTgxN0ZBQjFGOUNFMThEQUVGNTQKKzoxMDJFRTAwMEI5MjA4RTAxN0ZBRUQ1QkM4RkQ5Q0Q0OEM1QkNGQzFCQTcKKzoxMDJFRjAwMDg0RkUzM0I3NTVFQzE3NUMzRkNEMDc3RTM2NkUxOEUyODMKKzoxMDJGMDAwMDgxOUUzMjk3RUJEOUQxRDAyMzk2QzQ1MEJEOEQ4OThDNDgKKzoxMDJGMTAwMEVDMkIxQkU3RTQwQjNERkJFQjk3NDIxOEE3RjM2MThEMEQKKzoxMDJGMjAwMEVDMjMxQjRCNDVCRjFCMUYxODQyRTU5MDg3MUE4RDEzREUKKzoxMDJGMzAwMDQ1N0FDQkM2MEE1NTlFNDk3QUQyNDcwMDJEMUQ3QUFFRjYKKzoxMDJGNDAwMEZDREVDRjQ1REYwNzk4QkRGOUQwRDdEOTQzRDE3NERFNzkKKzoxMDJGNTAwMDU3N0FFRDMzNDk3QTdDNkVCRjlFRjkyQTNEOThENTVDNEQKKzoxMDJGNjAwMDlBRkVCNzU1RUU3NzlEMUI4NEZGRjdCOEU2N0JEMzE0MjYKKzoxMDJGNzAwMEE2OTcwRUNBMTVGQkMzQThGMURFNkRCMjFFRjkwMUFBMTEKKzoxMDJGODAwMDREMTVGNzVEQ0RFMUE5N0VDNEU0NkE3MkY3RTA5RDc5NDUKKzoxMDJGOTAwMEJERjk5OEZGRjEwREQxNjVFMEIzNTFFMzg1QkRFNzY4NTgKKzoxMDJGQTAwMEE5OTBEQkIxMjM5ODM3QzBEMzgyNUNCMTdGMTRFNDlBMzcKKzoxMDJGQjAwMDBDNjk1QTBDRTczRkRFQ0ZGMTcyNjExRjhFMUJFMTIzRDMKKzoxMDJGQzAwMDNCMUJEN0Q5NDg3RTQ3Q0U2Mzg0ODRBRkRBRTY3QkVCRTAKKzoxMDJGRDAwMENBNUVFMEU5RTY4Mzg5NDJDRjM4QkU1MjdCNUFDMEM1NUIKKzoxMDJGRTAwMEU5Q0FGM0EzN0UxNDRERjZCOUUzNzI1RjUxRjhFNzdDQUEKKzoxMDJGRjAwMDMzOTJGNjY5MjlBRjM2NDgzRUQ5MDBGQTYzM0Y1QjIyMjcKKzoxMDMwMDAwMENFNDEzRDdDNjJFNDgzQjk5QUMwMkI3QjQwRThBNzFCOEMKKzoxMDMwMTAwMDEzNDU1RUYxMDEzRkVGQjBCRjgyNEZDQTE5RTFCREFGNkEKKzoxMDMwMjAwMDczOEY5QUU3QzY1NjUxQ0VFOTNEMDVGNDhFM0NGNzI4REEKKzoxMDMwMzAwMDdBMzM0QjYwMjRDRThEN0REMTdCQzFFOEM0NTE5QTg5MEYKKzoxMDMwNDAwMEZDRDY3RUY4QURCMUQ3MTE1RUVFQjUwNEVFRTI3MDBDQTEKKzoxMDMwNTAwMEI0MDhGQzY3NUEwNDdGNzFBOUVDOEYyOUEzRkE1RTFCQTAKKzoxMDMwNjAwMENGNTczRUI0OTg3OTc5RkRDQTBDNDZGNjIwNUU5RjI1NkQKKzoxMDMwNzAwMEEwM0VFRjA2NzEyQ0Q4MkJEMEFFMzI0MUY0NUJEOTlGMjUKKzoxMDMwODAwMEQxMzk4MUZFQjhCQ0NBNDU5QTRERkQ3QTRENDlBMjdEMjEKKzoxMDMwOTAwMDdDMTlCNUY3OUI0NDdCQUY4NUE3ODM3Mjg0M0VERkI5NkIKKzoxMDMwQTAwMDM2MkFGMDM0RTRGMzNEOTlGOUUwODMyOUUzOEQ3Q0YwOEUKKzoxMDMwQjAwMEVGQjk2MkJGNTdFOUQwM0M5NzM0MkE3OUQyQjBCRTE3MzYKKzoxMDMwQzAwMDM0MEZBMUZEQTIyOURBNTdCNzFCNzQ3QjVFRThGRjk1ODgKKzoxMDMwRDAwMDc3REY3Q0MzNDhDMEY3NDJCMjA3RTA3RDMxNzUyN0Y5M0UKKzoxMDMwRTAwMDFCMTYzNENGQjlFRDQzOUMxQkI2NDdEM0Y3NkJGMkY0RjQKKzoxMDMwRjAwMERCNzM0NzQyMEY3NENEREZDRDNGMkM5ODcxRDA5NkM2NUQKKzoxMDMxMDAwMERCRUJDMThBMzMzRkU3RTk1NEZGQ0U3N0ExMEY0QzlEM0IKKzoxMDMxMTAwMDZFQTZGQTUzOTlCMDhGQjI2NjMxQ0UwREZFMkYyRDY5OEYKKzoxMDMxMjAwMEJDQkYxQkM2NkExNDMzRDAxMUVEQ0M1QUM5RTFBRjk0QjEKKzoxMDMxMzAwMEY0QkI1QkYyNkY1MzM0OUJGRDMzMDdFMENBQ0NDRkU2QTAKKzoxMDMxNDAwMERGNkY4MDg2RDk4QkZGRUE5MEFBM0Y0RURCMENCRDY2MEQKKzoxMDMxNTAwMEQwMDRCMUJFNTQ3REY0ODM3RURGOTJFQjY5ODNDNDhCQ0YKKzoxMDMxNjAwMENBNzNCQzUyRkRFQTc1NTExRDM5RjE0OEFEQTFDMTNDOEQKKzoxMDMxNzAwMEVEQ0MxRkZGMzBGODZBNEEzNjlCQjQwOTc4RkY5RTE5RTAKKzoxMDMxODAwMEIxMEExQ0RFQ0U0QTVBRjc3MUY5MkVGMEE5Q0U1ODg4NDIKKzoxMDMxOTAwMEUyMjMwMjQzODhBRjNCQzY3NTc2RENDM0YzMURBRDgzRTMKKzoxMDMxQTAwMDNENjRGMzkxRTdFODg1Mzg1RkI5NTAyRUU0OTg5MjJGOUIKKzoxMDMxQjAwMDQ3OURFRDcxQzRBRkYyNUM1RDI1NTlFMzhGMEQxMzFFODEKKzoxMDMxQzAwMEI5OENEN0FGNzJEODNBQjAxRjJDN0M3ODVBM0NFMjRDRkQKKzoxMDMxRDAwMEFBMzY5QTQ1M0NDNzdBRTNCOTlBOUY3RjVGMDQ1RDIyN0QKKzoxMDMxRTAwMENGQzk5MUU3NjFGMDBDRjhBODdBQkQ0NjdDMzhBOEM5MzAKKzoxMDMxRjAwMDYzNEIyNzM5QTYzOTMxQkY2QTQ3MjgxN0YyQkREQTEzNjYKKzoxMDMyMDAwMEVENDFGOUU5NDY2RkYyRjE1Q0Y4MjMyNjUzQ0FCRUUyQkMKKzoxMDMyMTAwMDc4MUYwNTdCMkNBMzIwOEUwMzc5RkEzRUUwQTlCMkE1ODYKKzoxMDMyMjAwMDkyQ0U4QkIxNDUzQUM5QTdCRkU1QkEwOENGNTM2MDRGREMKKzoxMDMyMzAwMDg0QkNCMUI0QTc2MzFERDZBOUVGNDlDRTdDMDdGMTczNTYKKzoxMDMyNDAwMDM0MDMxRTNBQUNDRTdDQzBENUIxMzZEQTg0N0Q3M0NBNjUKKzoxMDMyNTAwMDVEODJBRkY5M0FCMzVCNzhGQjdCMkQyQzA2RUJGRDNFMkMKKzoxMDMyNjAwMEQ5N0VERTFBOEJBRjk1RTcwN0RBOTkyNTJFMDk3QzU1QjIKKzoxMDMyNzAwMDRBN0M1RDM2NThERjAwM0M5Q0Y4MDExQjhERkRCRjZBMUYKKzoxMDMyODAwMEZEMDY4MjQ3RjEwNUIzQjQ0RDRDODY3RUI3RDU1RDc2MTkKKzoxMDMyOTAwMDFGRUJFMUEzQjJDMUUzREY0N0JCNkU3RTk4QUUxMTFGMDcKKzoxMDMyQTAwMEYwNzQ3RjBFRjFDMzhENDc1MDNFNjU3QzI4Nzc1NTExMzEKKzoxMDMyQjAwMEZDNThCNUNDMEIzRjQyMUFGM0MwMUVEMEM1M0E0OTlGMEIKKzoxMDMyQzAwMEU4RTJGQTA0RTQ5OTkyMjc0QTZFNzAzRUYwMjJBRTQ3OTMKKzoxMDMyRDAwMEQxNTdDOThGNkQ4RDFDMjQ4RUQ3RUQ4RDc2NEE3RkRBM0MKKzoxMDMyRTAwMEU4NjQxNjJFMDM3NjM0QTY1MUZFODU0NjE3QTVDMUM2OUUKKzoxMDMyRjAwMDAyRkFGRUIzNDYwRkU1NzczNThFQTZGQzlFNDYyRkU1MTMKKzoxMDMzMDAwMEY3MzY0RUE2RjRFNzhEM0VGQUNFRjE0MjcyNDhDOTE1NjMKKzoxMDMzMTAwMDI1OEYxNDNGMjlCOTE0Qzk0N0YzMzk3QUFGMkFBM0Y2ODgKKzoxMDMzMjAwMDI0Rjc5NEJDQzMzQzRDNjUzREYyNDhEMTM3NUJGM0Y5QkMKKzoxMDMzMzAwMEQzREM5MDYzRUQ3MzIwMkZDQUNEQTc5RjdGMTk3NjkyQkYKKzoxMDMzNDAwMDFBODcyN0NBMDVCQzA4QjlEN0U1QjA5MzlDQ0ZCMkIxOUMKKzoxMDMzNTAwMEJEMzhBRjM3QURGNDc2REMxM0I2QUZERTU0QTMzMTRCRDYKKzoxMDMzNjAwMDE4OUZERTVDMUZDRDJDNjE3QzdDNEI0M0EyMjEzRkFGQkMKKzoxMDMzNzAwMEUxRkQzN0ZBRjNGRUI1NDRERDkxQzdFMTM4N0FFNzY3M0UKKzoxMDMzODAwMDRGRkM5NjdGN0ZFQUNFMkZGMjQwNkYwRUM3RDY0NzMxQjMKKzoxMDMzOTAwMEVFMUQzMURENzAyNDIxREY2QzI1RkQ2MTUwOEMzODA3NzYKKzoxMDMzQTAwMEUxMEY3NDU5QzBDNEZBN0NFQUNFQkZEMkZBRUU2ODg4NDUKKzoxMDMzQjAwMDcyOTk3OUJEMDUwRDUxODRBRjhGNDAyNzhFRDdERjRCQjEKKzoxMDMzQzAwMDNBNTVBRTNERjZGQ0NCNThFNzc3RDg0OENFMkQ2ODk2RjcKKzoxMDMzRDAwMEVCNzIxREM3Njc5OEJFRjY2OTNBMjNCRDRDRjMzMjA2RkYKKzoxMDMzRTAwMDNGQ0NBNzNGQjA4NUY4OUVDRjNFRDVFQzAxMERCQTBGN0MKKzoxMDMzRjAwMDNGMjRDREUzREZGNTc1QkZBMEY4MkJBREUxMzBFOUMzODUKKzoxMDM0MDAwMDNBRTJCMjYwMjdGMDVCMERGMTU4NUE4MzhDRDM2QTFGMDEKKzoxMDM0MTAwMDY4ODhBMzhBMURFMUI1NDEzRTgwQTc0MUI3MDUwNTA3MkQKKzoxMDM0MjAwMDE4RDYzNTZCRDE5Q0Q4MDJBQUU1RjdFQTc1MUFFOTFCQzQKKzoxMDM0MzAwMERERkE0MjlFOTlFODU4OUY2QkExRjQ1REFDNzFEQTJGREEKKzoxMDM0NDAwMDVBNjg3RjUyRkNDQUU1ODUzNzgwNzVEMTUyNkE1QjE0OTEKKzoxMDM0NTAwMDI2ODcxN0M4RUY1NTA1MjY0QUQ1RjdGQTVDMUJGNUYzMDIKKzoxMDM0NjAwMDJFODQwM0VGRjdCRTgyNkNEQjQyOTI3MzJFMUJFNDgwNDYKKzoxMDM0NzAwMEFBQkZBMEEwRUNFRUVDMTFFODY3NUMwQTBCNUI4RkRFNDQKKzoxMDM0ODAwMDNDMEJCNUFGNDdBMDE3Q0U0Nzc2NjFGRkFGRUQ2MzFGOEEKKzoxMDM0OTAwMDUwN0FDOTA5RkNGMzcyODI5RkNFNUI0QjVGNzhFRTA1RDAKKzoxMDM0QTAwMEY4Qzc5NjdFMUM0NTc0NUEzQTRDREEyMzhBMDJBM0E2QzIKKzoxMDM0QjAwMDkxM0VFMzc1Njg3QzlFQ0IyNUZEMjczRUY3NDk3QzNCMUEKKzoxMDM0QzAwMDJGNUZCMTRCRDgyRjc5REE4MTc0RjkxRDM1NjRENzVBNDMKKzoxMDM0RDAwMEVFRTFFQjIzMDk3MkQ1RTg0NzNFRjRDMkM3RjFFRDc0ODMKKzoxMDM0RTAwMEFFRjA2NzIwQkU5MDZGMEIxOTJDMERGRUEyNjM5MzYwQTcKKzoxMDM0RjAwMDE3NUZDMTNBRUY0NjVDNTc2NEJCMTVEQTU3RjFDMkJFOUQKKzoxMDM1MDAwMDJGRkNFNENBN0Y1OUZFREE5RjUzMDk4RURERTc1MzIxNzEKKzoxMDM1MTAwMEQ3NTZCQ0I2MzY1NUVGNjVERTJCMjJGQ0Q3Q0E2RkFFNDgKKzoxMDM1MjAwMEVDNjAyQkQ4RkEyRkUxNzc4QkFDQjcyQTRGRkFCNTJGODYKKzoxMDM1MzAwMDYzOTc5MTlEQzJDMjI4OEU2MTk1NURFMEExMkI5MDk3MDMKKzoxMDM1NDAwMEMwN0ExOUFGN0JEQzRENUNCMEYzNzM2ODk3QzU5NUUwMkEKKzoxMDM1NTAwMEUxNzA5RUVCMjM4RUVGRTUzQ0IxM0Y5RjkxN0VENDczRUIKKzoxMDM1NjAwMDNCQ0NBNDE3OUVEQjExNDdGQ0JGN0NDNzQzNkY1RUMxRjkKKzoxMDM1NzAwMEYzQ0JCNzY4MTg5NkQ1QjEzNkMyRDNGMjVENjY2NjBGNDUKKzoxMDM1ODAwMDNGREZDMDZFOTNEQzM3OUNDQjlFOEJBQjA3M0YyRDA5OTIKKzoxMDM1OTAwMDZBREVBRDQ1RjBDQkJCMTJGQTg1RUI4QjkyOUY5NjQ1NjgKKzoxMDM1QTAwMDA1NDcxMTFEMjRGQ0Y3NDlGRDQ4RDU1QkIyRUYyMTFCRUYKKzoxMDM1QjAwMEU4QzVFQjlEMjVCREU1QzU1OEU4REFGQ0FGRjM1REMwNzUKKzoxMDM1QzAwMDc5NkFGMzcwRjJFQjJFMDlFRTVDNEVGQkZFOEU1ODI3MDMKKzoxMDM1RDAwMEE2Rjg4NUQ1Njg4RjBBRTQ4OUY1MTRDODEzRkFDNjI5QjgKKzoxMDM1RTAwMDY5RkYzREY1ODI5OUU0MEZFMEM0M0FGQzQyMTM3NjVFMzAKKzoxMDM1RjAwMEQ1NkU5QjZDQjc0REUyRUQ4NjNDQjExRTU1RkQyNUMxRTUKKzoxMDM2MDAwMDhFRjg1QzVFRkZGM0JERUY1MzFBOTRGMzVBRTI2ODJCMTkKKzoxMDM2MTAwMEMxN0VGOUY5QUVEOEM5MDE0QTdGM0NFOTU1M0VERTk5MzEKKzoxMDM2MjAwMEUwQjgxNDJENkM1REJEOTYyN0UyODZDRjZDMzY0RjA2NTAKKzoxMDM2MzAwMEJFNTg0MEM1MTkwNTY5M0VBNzc2NjQ2ODc0QUUwNUJFREMKKzoxMDM2NDAwMDM5N0U0RUVEN0EyOURFNDRFQkQ2MkZEQTQ5M0E5QUVDRjAKKzoxMDM2NTAwMEMyOUVFQUI2QjhBNEZEQzJFRTg0OUUzMTk3NkI3NTA5OEUKKzoxMDM2NjAwMDVDREVENUVEMTJGMTAwOTFERjU1N0Q1QTZGRTlFMEY3OTAKKzoxMDM2NzAwMDRFOUJFMDdGRTlCRjk3RkUyNUM0ODk5MDNGM0VDRTE2NjIKKzoxMDM2ODAwMEMwRkUzQTdGOTg2QkQ2NEQ5MDY3NkY1QjA1M0QwNkJBREEKKzoxMDM2OTAwMDFFQzVCOTZBRkU3QkM5NjRBRjU4NjU3NUY1NDdGRTRGMTQKKzoxMDM2QTAwMEVGNThDOTdFM0U3RkI4NUNFNzY5RUQyMzYxOUZFQzcwRkYKKzoxMDM2QjAwMDhCN0RCRDc2MUQ1RjIxN0NDQTAzMzhGREZEN0M3RUI1MDgKKzoxMDM2QzAwMDAxMTNDNTUzMUVDQkNCMjZCODFFQUYzMTc5NkRFNEU3OEQKKzoxMDM2RDAwMDA4RTVDMzRFNzlENEM2RkM2NkU4QzkzRjhCMjZGREFFMkIKKzoxMDM2RTAwMDM2NUJEOEREMUYwN0JGRjNCNDM2Mjk5NDlGMEM3Qjk3NTgKKzoxMDM2RjAwMEE0NjNFRDhEQkMzQzhDOUVCNTRGODdGMkExQjc5Q0I2MDAKKzoxMDM3MDAwMDA5M0IxRUNBOUQ0OENCNDRCRDI2QzkzN0U4MDdGRDc2NTQKKzoxMDM3MTAwMEI4OUQ2NzQ5QkZEQzFEQzdBMEU3OUI1RThFMTNGNjg0OEEKKzoxMDM3MjAwMDlGNDQ5M0RGNDFGNTdCNUVGMjU1OTNGNDczRjlCNzBBM0EKKzoxMDM3MzAwMEY4MDAxN0Y0RTYyNUI2OTY3Q0U4OTU2QURDMjVGMTJEQUQKKzoxMDM3NDAwMDM0REU2OTM5REU5Mjk4MTZFMTNGOTA3MTYxQTg0RkUzNEIKKzoxMDM3NTAwMDVCOTkxN0U3RjFDRTY3QTM0ODNGRkQyMkJENkQwRkM2MDkKKzoxMDM3NjAwMEZGRTJEOTIxRTQwN0VGNzAwNzE2RURBNTcyQUVCNzcxM0QKKzoxMDM3NzAwMDNBMkNGRDY5NTQwOEYwOUU3QzM2OEVGQzlDMjdBRDQyQTUKKzoxMDM3ODAwMDBGM0ExOTk3NEE3QUQwRTFCODQ3RTZBM0JGQUUyRDUxNTgKKzoxMDM3OTAwMDFBRUMyOTI3MzU2NjRCNDNGOUQ2N0VFNEFGNUFEQUQ4QkUKKzoxMDM3QTAwMDQwN0U4MkE1N0NCOUMzMUZDREQzQzlGMDJCOUZEQzNBRTQKKzoxMDM3QjAwMDg0RUMyQzI3N0Y2OTI2RkYyMkZGQkUwRURGNzVENjMyRjAKKzoxMDM3QzAwMEZGNzZBQ0JCRURCMTY0NjdGQkUyQTc3RjFCMTJFRTdGMTcKKzoxMDM3RDAwMDUwRTlEMjJENDY3QjkyQTJCRjJBNEZDOTE3RUIyQjI1NjkKKzoxMDM3RTAwMDVGRTAzMTJENUZFQzMzNzVCMUMxNDdCMjY5OUU2MkJEQjgKKzoxMDM3RjAwMDcyM0FEMDc5OEJBRjhGNTREOEE3OEYwNjVGNDlENTFDMEEKKzoxMDM4MDAwMEMwNzMyOEZGQzdDMEZCNzY3MUFFRjk2Mjg3OTVGQzIyQjIKKzoxMDM4MTAwMDRCNUY4RUYzOTJGREU2OUVDQjRDRDgyRjk2OUE4NUZFOTkKKzoxMDM4MjAwMEJCOTRCMzlCNDg4NTdENjg2OTdDM0VEOTg3MzhCRUU5RTcKKzoxMDM4MzAwMEZDRDhCOUQ1MkNDNzExRTM5RURDOTYyOUVDRUYyMTk5NzEKKzoxMDM4NDAwMERGNTMxQzAwOUY0RjQ5NjJCN0RDNDhGQUNERTYxMkUwMTcKKzoxMDM4NTAwMEY1RkM5NjU4MTNGODgyOEZFMzg1REY3RUU5RURERjE3REMKKzoxMDM4NjAwMEY4NEM1ODQ0RkEzODQzMUNGNDI4RjhDQjg1QkNBQ0JCNjAKKzoxMDM4NzAwMEU3OEEwNEM0QzNCMEY3Q0MwQ0EyRUZCQ0M1RDMxRkYyRDcKKzoxMDM4ODAwMDMwMTI1RjhCRjNBNUJDRENGMzg0MERGRUIzNUFCRTVFMzEKKzoxMDM4OTAwMDEwMUZCNDRDRkE0RDk3RkQ1NDIzN0Q2RUQ5REQ1NzNDNzMKKzoxMDM4QTAwMDRBNzJGMDVEMkJDQkUzNzA5QzBFM0UxNDFGNEU4RjBBQzQKKzoxMDM4QjAwMEQ5NEY0RjdCMEZENTVGQzZFQjhCRjY2RkM3MTMzQ0RCNDEKKzoxMDM4QzAwMEFDMUVDMDEzNDlDNzRCNkVGRjUzRjMyNUI1RUZFNjhGMEYKKzoxMDM4RDAwMDIwREZENzRCMkU5RUY3NzlENkY2REQ4RjIxNDc3NjQ0MzEKKzoxMDM4RTAwMDdCRkNGNDM1NDg3RUU3NTNENkUwMjJDQ0ZCRDRGM0QxMDEKKzoxMDM4RjAwMDI0NUY0RTI1OEFGNUZFMzk5Nzg3N0UxQkUwQjhGRTQxOEUKKzoxMDM5MDAwMEIyNkZGQzY2MUE4M0U4NUUxQzMwRjZBQkM2OUQ5OTJGMzkKKzoxMDM5MTAwMEU0NkY1REIyMjcwMUZFOEMzQTRFMDdGNEM3RTlGMjFENTEKKzoxMDM5MjAwMDZBRkY5RTk1REE0N0NFNjNBNDZDRDdCRDNFOUY4RjI1NzQKKzoxMDM5MzAwMDdFMzkzNTQwRDBFM0Q0MEI4MzY5NUZFOTQ4MTQ3Q0NFRUYKKzoxMDM5NDAwMEUxQ0RDMjM5RTU1NEEyNDg3MTUzMDY3Q0IwNTQ5RTQzODAKKzoxMDM5NTAwMDRGOEQwQkQyQjlGQjk0QjY5M0QyMEVBQjY4QjdCNDQxN0UKKzoxMDM5NjAwMEZBNkQzOURGQTU4MTZGQzA5M0YwNUJEOUQ3Qjc0MThGNkUKKzoxMDM5NzAwMDgwN0Q3QTU0MTlBNUExQThBNDhCRURDQ0UwNEZFQzQzMkYKKzoxMDM5ODAwMDJGRTQwQjdCMTZENDFBQzg3NUYyNkY5MDdFMTJCNDQxRTcKKzoxMDM5OTAwMDFFRUI1MjhGQUJERDcxQjFCRjhDRkNBMDNCMzRGMkZCNTAKKzoxMDM5QTAwMDNDMjBENzI5QTA0RTUxRjY3MUNFOEZDQkZDOUExN0YxNEYKKzoxMDM5QjAwMDQ2Q0I5QTU3MkUwMUJGMkZBQkRGNzAxM0Y4NURDRDYzNTYKKzoxMDM5QzAwMDk5ODU0REM2RjlBQTQzMzMxMzNDMUREMTdDREQwMDBGMDgKKzoxMDM5RDAwMEUxRTM2NUY3RTA3NzkzODIxNzIwQTc5MjlFNDlDQUY1NDUKKzoxMDM5RTAwMEU2N0NCMTVGMjFERkMyRkJBQjZERDZENkQzMzg2RTc1RjYKKzoxMDM5RjAwMDlFMTRGMzUzNzhFMjY4QjFDMTRFQzZDRkY5QTJCQzhGRDIKKzoxMDNBMDAwMEY5MkIzODIzRTdBRkUwMDlFNjBCRkI0NDg3REJGNUUwNTEKKzoxMDNBMTAwMDU4RDBGQjU3NjZCMjlGOUVGRjZBNzg0MkQyMzdFODY1NUUKKzoxMDNBMjAwMDM4QjE3NURCOEIzOUZDQUZGMUJEMUFGREY4MjFERkIwODEKKzoxMDNBMzAwMDlFNjE4RkU2NzBFNjZGMzZGQTNGMEFCNjE4RjM0Mzc3NTkKKzoxMDNBNDAwMDE4RjM0NUJCOENGOTkyN0RDNkJDRTc5MDMxQkY1NThFMEIKKzoxMDNBNTAwMEFCRjA4NDczMkVFMkRBNzBDRTQ1OEE3M0FFMkI1RjlDOTYKKzoxMDNBNjAwMDczOTFDNzM5MTcyOUNFQjlGODhFNzMyRUYyMzhFNzIyMzEKKzoxMDNBNzAwMDhGNzMyRUYyMzhFNzIyQzUzOTE3REZDRjRBRjk1RDJCNTUKKzoxMDNBODAwMEVEOEVBMDAzQzU1N0JEMTJBREZDRTBCNDVFQ0VDRDQ5QUUKKzoxMDNBOTAwMDI1RjlBOUZDOTlFNzk2MTQ1MUJFREI5RTUzNjEyNzdCNUIKKzoxMDNBQTAwMDhFOEFEM0I5Mjk0MTNGOTI0RjdFQzNCNkJCRDM0MTM3RUIKKzoxMDNBQjAwMDRCM0JEOTcxNTdGQzVDRDg3MTZCQ0JBMjFEQjAyRkI0QjYKKzoxMDNBQzAwMEFGRkRGQzZFQTg0RjI1MDlGQTI3RjkxNEQ3RDRCOTREREMKKzoxMDNBRDAwMEM0MkI4NTQ4NkVCNEFGNzFCRDc3QjVBMDFGRDkzOTU0REEKKzoxMDNBRTAwMERDNEQyNUY2QkJBNEJFRTkxOEU5NDc2MUVCOEQ3RTkzNUEKKzoxMDNBRjAwMDQ4M0Y0QUE0RkYyNDkyMEY5NERGRTQyOTZCNjczQUU0MUQKKzoxMDNCMDAwMEZEQjE2N0VERUIwMUZGMzE2OTFGNjNCMzlEQTQ3RjI5MTAKKzoxMDNCMTAwMEJEQkE1QkZGN0E0MDdCMUFGQkY2RDdGOTQ5RDRCRUVCRkUKKzoxMDNCMjAwMDMwRDdCNzdCRDk2RjU1NUE3NUExOENGNEM2RUVGQzdBQTUKKzoxMDNCMzAwMENENDQ3MTIzNjlGMUI0MEZBRDk2MzA2NTY5OUQxREY3RDEKKzoxMDNCNDAwMDQwREVDNTk5NjgxRjNGRUYzMEQxQjlFMEZDMDc2NkQyNkYKKzoxMDNCNTAwMDIzMDY0MzNGMEY5QkNGOTA0MDhDODFCRjBBQjcyNzQ1NzgKKzoxMDNCNjAwMEY4RkYwNjE4RUEwRkRCOUIxREUxRkYxQjZBRjQ0QjREQzMKKzoxMDNCNzAwMDVGQjMxRkU3RUI2OUVCODcxQkVBNTVGQkFFODhDMEEzNzkKKzoxMDNCODAwMDg0NUJFQUE1NEQ3NzZDQ0E4MkZDNTkxREQ3NDVGMEFGMUUKKzoxMDNCOTAwMERFMUQ0RDcxQjVENTFDNUUyRkZDNzJDODcwMTRENEQ4RDMKKzoxMDNCQTAwMEJENTM4MUJGOUFBMDM1MTFGQjdDOTVEQzdGNTg4MzcxOTIKKzoxMDNCQjAwMDNGQUVCMTMwQkYzM0E5ODdFRjZBOUNDQzlCQzhEQjlGNzcKKzoxMDNCQzAwMDI5NkREOTY2RTI3NDNCNjNEQUZDQzg1ODE3RkM0QUFEMkMKKzoxMDNCRDAwMDU5NEVDRTU3Qjc2QUMxRDRDQjc5N0Y3RkIzRTg0NTgzQkUKKzoxMDNCRTAwMDM5QkY2NTU5NDMzRjlDMDc3OUI5MzM4N0FERTFGNThFRkQKKzoxMDNCRjAwMEFEN0YyOTlFRjQ2RUM5Njc1OTU2NjcwQ0U4REREQTYyMUQKKzoxMDNDMDAwMEE2NzMwMUVDNTJFNkE0MUU3RTY4NkQ0OThFQzk3NUY0NTgKKzoxMDNDMTAwMENDQjM4N0ZFNUZEMUZDMzg1RDNDQjhBN0Q4RTUzODMwMUYKKzoxMDNDMjAwMDcwMzVGNEI4QTA5ODZGQ0QzOENENEY3QUIyOUNDRjJBQkEKKzoxMDNDMzAwMEI5QUZCMDVDRDFDRkFEMzI3RjVDOUUxN0Q0RkM0RTBGRDQKKzoxMDNDNDAwMEQ5NUZFMjgyMUZCMzcxNkY5NjE5NzJEQ0I0NjMxQkVFMDkKKzoxMDNDNTAwMDBGREMxOUEzNUYzMzc4MjRFMjI1RjM3RTNCOTY4RkJCRkMKKzoxMDNDNjAwMEY0NDMxMUFGRkJDNzhEMTNFMjJGODdGRUY5QkNENTMzQTgKKzoxMDNDNzAwMDg1RTdFRjY5NzlDNjg2NzNGMTUyNEJDMDg2NzM2N0NEQ0QKKzoxMDNDODAwMEIzQUQzNjJGNEZBRkQ5REU0QURGMTc2REFGQTRGM0Y2RDEKKzoxMDNDOTAwMDYyNTY0RkU3QzgxMzJBRkU1NkUyQTM2NkJDQjZEOUM5REUKKzoxMDNDQTAwMEUxN0U2MUIwOTAxQjM1MzEyMjZFQTNEQzNDRjYwREM0ODEKKzoxMDNDQjAwMEE1OUZERkFFOTU2MkJFRDM3RDNCNkQ5NUIwM0ZDQjdBQkQKKzoxMDNDQzAwMDkxRUJBM0VCOUQ2OUU1RkQ2MDRGMEEwQUJGNjc1RkVCQ0YKKzoxMDNDRDAwMDYxNDZBODgwRDZDM0I0MEIyRTRBQTc1RjE4NEFFN0Q4MUUKKzoxMDNDRTAwMDBGOTlBRjk4RTQ0NDUxQzQ3OUY2MUQxMTg3RENCNTRGQTQKKzoxMDNDRjAwMEFDODMxQTVCMjg2NTFBRDZDOUVCNTY1QTI3NzU1QzdFQzkKKzoxMDNEMDAwMDhEMkVDMzM5OTlCMTMxM0NGNThEMzUxQkY4NzVDNUM0N0QKKzoxMDNEMTAwMDU4MDMzRkNGNjY0OTA2M0ZGMjRDNUNEQTBDQ0I0RjlGMEQKKzoxMDNEMjAwMDkyNjNBODNGNkI3QTYxMDRGRjk3RjU5NDkzMUMxOTYzMjMKKzoxMDNEMzAwMDg4MzNBOUJCQzNFRkQyMjg5RTY1QkNGMTNCNEZFRjIwNkYKKzoxMDNENDAwMDNFQkJDRUQwQkU4RURERDg1MzBGRTdFMDJEQkYyNjNDNjQKKzoxMDNENTAwMDMzRDY2NkMzNzlBQkM2MjRFMjZBNjZFQjFERjI3QjNCQzEKKzoxMDNENjAwMDdERTcxMzMxQUNDMzQxMzk5RURGOEE3REQxNEE3Njc5MzQKKzoxMDNENzAwMDY1OTc5RThEN0ZFN0Y0QjYyRjcyNDJDQjcxMTExRjBBQjMKKzoxMDNEODAwMEZCODIyMUJFOTAwMzQwRTc0RjI2RTg1MDI3RUQzRDc1QUEKKzoxMDNEOTAwMDA1QzJERTUzRTc2RkIzMjFGRTk2RTNERjkyQzE1MUIyNTUKKzoxMDNEQTAwMEJDNDUyMzdCMUVBRjZGQ0Y0ODEyRjkzQkYwN0Q5N0YxRTYKKzoxMDNEQjAwMEJFMDFGQUJCODBGMkMzRTY0QUFDOTdDOEYyRTU3Q0RFRUUKKzoxMDNEQzAwMEQwMzM5NkMzNEUwMzNCOTNFQTVGRjZBQkY4NzNGMTI2MEMKKzoxMDNERDAwMEEzREQ2ODM5RUMzOTYxNzRGQzcyQjA4QkY4NzRFOUY2RDQKKzoxMDNERTAwMDlENkYwRUUwNzg5OUU2NEIyQ0M1RkFBOTBENTY1ODJCMUQKKzoxMDNERjAwMDhCMkVFNjMzMjVERkNGRDc5OEM4Q0ZEREY1Q0U0MUUyNTUKKzoxMDNFMDAwMEIzQUUxQTBCRjFGM0I3RTE2M0I5NTdEODMzMjNGOTZGQTcKKzoxMDNFMTAwMDExOUYwRkZDQjI4Qjc2Njk5RTgwMjZFQTAxMkYwM0MwQUEKKzoxMDNFMjAwMDk3MTE3OEM5RTgwNTVGMEE0RkRENzg4QjI4NUY4QzdGOTIKKzoxMDNFMzAwMDhDNDBEQzgwMTYwOEI5N0JDMzhCQzRBM0VBM0YwMjRGRDkKKzoxMDNFNDAwMDZDQjQxMTBGOEI3NEQ3N0I5MDM3OEIwRTlCNTlFMDEyOUIKKzoxMDNFNTAwMEU2QkQxOEYzQzNGODdDN0UxOEZGQzYwQkMyNEVBMkZDNjkKKzoxMDNFNjAwMDA2MzMyRjU4MjhERkNEMjczRTExM0YzRDdEOEE3MTVERjcKKzoxMDNFNzAwMDc2RjM4RDRGQUM5MzE5MTc1MkE5RERGRjM2RkY3QzFCRUIKKzoxMDNFODAwMERGMjhCODIzRTM5M0Q1RkQ5RUZGMUEyQ0VEODQyM0Q5QjgKKzoxMDNFOTAwMDQ4NUFGRjk3MTgzN0FDRjY3Qjg1RTc0MTc3OEVBNjc4QUUKKzoxMDNFQTAwMEEyMkU0NzM2RTkwRkRERkI4REQzNThCRTJBMkU5QkUyQUEKKzoxMDNFQjAwMDg4NzU2OTlGNTM3MjU3OTdGNUQ0Mzg5NUJDREMzNTFDQ0IKKzoxMDNFQzAwMDdDM0MzMDE1NzZEN0JCOUI3M0IyREFDM0Y0MTI3REFENjAKKzoxMDNFRDAwMDk1RUNBNjU5NkI5MjI5QUQ4Qzc2QTY2MkJGQTg1QzYzNUYKKzoxMDNFRTAwMEY2NjExRkZDRjRERUZFQTlBMzYxODc1RjZCNEQ5OUMyRUEKKzoxMDNFRjAwMEJCRkVGNDdCMjNCMjU4MzFGMkU1OTQxRURCMTAzNTNCNTgKKzoxMDNGMDAwMERDOUVBRDUyNTc4MUQ4MEZFQUVFM0M0MkZCRDcxOUQzNjUKKzoxMDNGMTAwMDNCRjFCM0IxQ0VENkVFOEU0NzQ4Q0RCMkI1RUY4RjcyM0UKKzoxMDNGMjAwMDcyRDVBM0Q1QTIwRjJBNDAxQ0ExRDZCQUNEMDlCQzM5OUYKKzoxMDNGMzAwMDVCNEI2MDhGMUUwNkRBRjVFQkQxMTM5NkFFMkRFRjBGQkIKKzoxMDNGNDAwMEZCNTdFREQ3MDc5RkM0RkVBRUFGQjFBNjQyQ0YzQ0Y5RjkKKzoxMDNGNTAwMDAxREZGRjM0REFCRjQ4M0YzODgxRjhFMzE0RjhBRDYyN0YKKzoxMDNGNjAwMEU5N0VEQjA5OEQ3OUUxQkY1OTYyREU1RkUyMzRFQ0E3QkYKKzoxMDNGNzAwMEZCNjYwMjhFNTc2MkY0NjEwNUU0QTcwRDZDNEJDM0Y4MzMKKzoxMDNGODAwMDFFM0ZDNTRCRUE2QkYyMTI3QUIzOTdBODc0QzUyNkExRkYKKzoxMDNGOTAwMEJGNkQ1M0Y2NUE2OUQ3ODVERThFM0NGNDc2Mzg4NUEwMUUKKzoxMDNGQTAwMEI3MjMwRkJEMUQyOUY0NzY3Q0FGOTBGNkZBNDE0RDlERTUKKzoxMDNGQjAwMEE1Mzg3N0ZBQzdCMzgyN0FEQTVGMUQwNUQwQ0I1NzZCODUKKzoxMDNGQzAwMDMxMUVDODlCRDU5QUE3M0ZFQzYwNkM0QkJBRDg1NzIzREIKKzoxMDNGRDAwMEU4QUJEMjJCM0JCOTZFMTVDNkVGNTc1RkIwQjNGMEY4MjQKKzoxMDNGRTAwMEIxNzEyQ0QxOTA5RjYwNEYzN0Q0MkY3N0JBMERFNUQ3QTAKKzoxMDNGRjAwMEE0MEQzMTk0NUZFQjJBMzVFNEFGMkZCOERDNTBGRjA2RjcKKzoxMDQwMDAwMENGMzg0M0ZFM0JBM0FGMzVENEFGRjA1NjE4RjJEMzI2REEKKzoxMDQwMTAwMENGMzFENDlGRTFBQjM0OTRDRjlBQkRDNDUwM0U0NzVGQkIKKzoxMDQwMjAwMDY5QzhERjU0RjMzRDQzRkQ5QkVCRDcxOENBQkRDQzY5OEIKKzoxMDQwMzAwMEMxRkVCNjBGRTcyOThFRjdENzcxOUVFMkU5RUE1RkU1ODgKKzoxMDQwNDAwMDM5QzJFOTNBNzY4MkE5QkUzNzdCRkM3NzI1RkY2RTFBMjIKKzoxMDQwNTAwMEUyNUQwOUZFQ0M5NEY3NDAzMkU1N0Q4RUU2MDIxN0YxNzEKKzoxMDQwNjAwMDY3MDZFRUVERDM3OUI2MkQxRDdDMTM1OTJGQjI3QzZDMEIKKzoxMDQwNzAwMEVDODFGMzJFNEVDMzNGNkM5RjM5RERDMkU1QzNEOENCMzQKKzoxMDQwODAwMDBFMENDRkUxRjlBNDIxRjc0RkI3NzBCOTMyRjY4QTAzQ0QKKzoxMDQwOTAwMDJGNjVGM0ZDODAyMTZGODhGMjYxMDdDRUEzRkNGRTIxMUYKKzoxMDQwQTAwMDBGOEFGQzM0NDZBQTQ1RjY5MEYxRDNGRDdDMUU2M0FGMUYKKzoxMDQwQjAwMENFNUVFRjExRjY5MDVFRTMyRDU1MEEzQzIwNkUxMTc4MkUKKzoxMDQwQzAwMDQwMUFFMkZDODlGNDAwRTc0RkE0ODczODdGNTZFNzMyQjQKKzoxMDQwRDAwMEY2MjZFNzRGQTQ4N0Y5QjkxMkRGREZFMkU3NEFBNEVGM0IKKzoxMDQwRTAwMEYwNzMyNUQyNzdGOUI5MTI2OTFCM0Y1NzIyRkQ0REUzRDIKKzoxMDQwRjAwMDZDNEEzRjY4RDRBOUREN0YzNEQ2NTA3QUE0QjE5RUJFMDUKKzoxMDQxMDAwMDdGRDREODQwRTlFRjFCRkRGNDNENTBBMEVDMDcyMUIyNkQKKzoxMDQxMTAwMEIzMjg3RkQyNzJGOEYxNjA4N0RCNkIzRDFERUU2NzU1RTcKKzoxMDQxMjAwMEZFNDBFNUZGNkJBQTY3RURCMTU4QTdFRDk2QzRDRkVDNTIKKzoxMDQxMzAwMDNEN0VCREJFRTVBQzg1N0QxNkE2NkZCNUM2N0E5RjJCQ0MKKzoxMDQxNDAwMDIwM0JDOTQwMjdDOTZCRjk3REJDMzYyREIzOENBNzdGQjYKKzoxMDQxNTAwMDcxRTkzQjQxRUYxOTY1NTU2QjEzRENCODA3NTI2RjA1RTgKKzoxMDQxNjAwMEJGN0M2OEVBRkQ1RTcwNzM4MUIwM0ZBQzFBRTJERDQzNEMKKzoxMDQxNzAwMDdDMjJGREQ4Q0E4RkRDMUQ5RjEyRTZFNzM2ODVDNUM1QjcKKzoxMDQxODAwMEQwNUY1ODdDOEJGMjM3QUI3ODlBQUJFQzIyM0U0RkY5N0MKKzoxMDQxOTAwMDkzNTVEQzhDRUFBRkZDMDIyMzc5NzdFNTNBMEJFOTI3RUIKKzoxMDQxQTAwMDcxMTYxNjQyRkYyQTNFRTY0QTdCQjAxNEYxMDI1N0Q2M0EKKzoxMDQxQjAwMDNBMjgwRUFEM0ZGRjZFMkJBMzdBNUUzMzRGQjdGQzk5QzIKKzoxMDQxQzAwMEQ3MkZFOUYxNUZGNzk3RjBGMzcyODJCRkZDODI0RTc2NEEKKzoxMDQxRDAwMEQ3MkJBNUZGMUVFREVEQTJEQzhGRjY4ODlEODI5RUMxMzgKKzoxMDQxRTAwMDUzQjJBQjNEODEzOEE3QjIxRTdGM0FFQUM3OEFGQTIxQTMKKzoxMDQxRjAwMEY0OTdGQjlGN0NCQ0Y4OUVGNTkzOTkxNDJDNDUzQzU1OTUKKzoxMDQyMDAwMEU2NzIwN0M1NTM2RDFFMTdBMkZCNUIyQkRDRkFBN0EwNTUKKzoxMDQyMTAwMDkzMkZDQUY5NDkyQ0FEOUY5QzRDRDgwOTJBQTRERUZCRTgKKzoxMDQyMjAwMDBENzRGODFDRUQxNDdFMTQ5RTE1NUQxNDdFQzNFMjhFOTEKKzoxMDQyMzAwMDA4QUY3REQxMjk5MjNFOTE3NDUxRjQyOEJGRDA4MzY3OTUKKzoxMDQyNDAwMEUwRTk2MjNBRjREMDA5RjZEOEZGMkI3NDE4NjEwOUQyN0MKKzoxMDQyNTAwMEZEQkZBODVBQkIwNzcwN0QxQjVENkVFOTY0OTM3MDlGMUMKKzoxMDQyNjAwMDc4NzBCNkRFMEMzQzU3NUU3MEJEODk3QzE1MUIzNzA5MzMKKzoxMDQyNzAwMDVCOTMyQUY3N0M0QkY5MkM5NEY3RUJCQkZDQjYzRUNBNTgKKzoxMDQyODAwMERGOEU1NkYxMDg1RTQ3MjlBN0NCMDQyOTNGNTY5NzBCQ0UKKzoxMDQyOTAwMEZDNEU3NjlCMDlCRjEzOEExNjkzM0VDQTFDNDJBRjczMkQKKzoxMDQyQTAwMEYxRkYyMDRGMjY3REU1NkI0NjdGOTM1MjhDRkFBMUYyRjkKKzoxMDQyQjAwMDA3NUYyN0ZCOUIxQ0UxMDdCRTRFRUE4REQ3NDVFODg1Q0IKKzoxMDQyQzAwMEEzODY0OEJEQ0ZDRERDRTJEQzI3RUVCOTRGOTRGQjc0NkEKKzoxMDQyRDAwMDg2QTQ3MzBFM0ZDQzhGMDUxRDk5NkU4MUQwM0E4NDdCRTYKKzoxMDQyRTAwMEVFMjVCODA3RUVBN0ZDQjUyQzQwRTlGNTJDNDRGQkQ2MkIKKzoxMDQyRjAwMDBENUNDMDIxRkYxREM2Mjg5RUYxNjBFQ0Q0NzkyQjc4OUYKKzoxMDQzMDAwMDdGMTM4NjRGQzhDNUY3QjA3QjdERDcwQ0U5NDdGN0ZBMTYKKzoxMDQzMTAwMEZFRTAwQ0JCRDc3NzYwQTI4QkY0ODYwM0Y2MUNEMjYzNTkKKzoxMDQzMjAwMEIwMEVBQzYxNzZCNDVGNzJCOThGNTA4NjgzN0M1RjQwMEIKKzoxMDQzMzAwMEZBMDZERjE3NzIzOTkzRkY4MkVGMEJDODVGNTdCMDg2MUEKKzoxMDQzNDAwMEExREQyNDk3MzFERTQ0QjVCRkRFMzk5RTU5ODZGNzJEQjUKKzoxMDQzNTAwMDc3QUYyRjc5NjUyMEVDMkI2RjI3MEU5RTA4QkJGM0RCMjAKKzoxMDQzNjAwMDg5OTc0REM0N0NERjRFRUM2RjEyNjk5NDhERDJFMjk3MzEKKzoxMDQzNzAwMDczN0JEM0IzMTQxRkY2OEMzNzg5NTk5MjJGQzZBRkMyMDMKKzoxMDQzODAwMDY3MjQxRTE1N0VGRjA5N0NBRUVDMEQ5RkNEQzAwMUVDQUQKKzoxMDQzOTAwMDdBRjZGN0UzRDNCMkUxRkYxMkVCQkZFRUU1RTJGRTgwN0YKKzoxMDQzQTAwMEZGMjQ0MDQzNUNCMjVERTAyNUQyQkVGMzc5MjMxQjA4QjUKKzoxMDQzQjAwMEZDQjIyRDA5RjRGRDM2Qzk0MzU3MzY4Q0ExRkE1NzM1QTYKKzoxMDQzQzAwMDhDQTZGOTVEMTFBM0RGMzU4NDhGNzNCQTJDOTRDRjM1OTkKKzoxMDQzRDAwMDA3RjZGOUU2MjZCQTdGN0JFNjA1QjMwN0ZBNzdBREQ5OEIKKzoxMDQzRTAwMEI1REU4M0I1RkVCNkI4MkZDN0JFM0E5ODA1N0YxQkRCOTYKKzoxMDQzRjAwMEQyN0JEQzZFQUQ1REUxQ0Q0RkY4RjQ2NjdCOUJDNUZFRjQKKzoxMDQ0MDAwMDI3RUUxMUFCRkQ3NzYwOTQ4ODc3NTVGNzU5RkJEQThGNkIKKzoxMDQ0MTAwMDQ3QzUwOEI5MzIzMDRBQzg0MTQ1MjdERThFRjIxOUJDN0IKKzoxMDQ0MjAwMDlGNTE1QzZFNjQzQzE4NDNGQUY3ODgyNEVGNjNDMEE3ODEKKzoxMDQ0MzAwMDNBNDcyM0JFMDlGQkQ0NTVBMUMyMDRFNDI3RTMzQ0M5OTMKKzoxMDQ0NDAwMEYzNkZDOUZCNjk2RjBEQUQ0RkM5RTZGODNFNjhEMzlGQTYKKzoxMDQ0NTAwMDQxM0I2NkZFQ0E4Qzc1REQ5NEE3RDEzREY3QUVDMzM5RUEKKzoxMDQ0NjAwMDI5QzBGNzU2QjVFRTRBNTg0OUY4N0IwMzRBM0ZFRTFFN0QKKzoxMDQ0NzAwMDJGQzU0QzdFRjE1NUYwOEZBNkUwREM2NDI3N0JEMTU1MkIKKzoxMDQ0ODAwMDJDOUZGQ0E2MTNFNUY4RTVCRkFDQTI3NzEwRDRCRDhGMzYKKzoxMDQ0OTAwMEE4MzQ5M0YxRkQxQzU3OENFMTNEOThEODgyMjQ0MzNFMEIKKzoxMDQ0QTAwMENFMzNDMDUwM0Y2MTc0QjZBMTNDRDEzQkQ0NTA5RTNDNEEKKzoxMDQ0QjAwMEI5Q0M5MEVGRTcxQjYzQThERjdGRjY3OEUzQkI2RUZBMTkKKzoxMDQ0QzAwMDc1ODZGQTE5MzUzNzFBRjI0QTdFNjU4ODRGMkNCMzdFMDUKKzoxMDQ0RDAwMEFFQTFGREEwODYwNTg2RkE2RUZGNTJFM0ZCMzY3RTZGMjUKKzoxMDQ0RTAwMDVCNDEyQUU0OUVGOENCNTlCN0NBNTBGRUUzNzg3MUFGMUUKKzoxMDQ0RjAwMDYxQjI2MzExQkQ1NzkxRDc3MkJCNzE3QzQ5QTc4QzA0MUYKKzoxMDQ1MDAwMDQxMjdFNjEyRjJENUNGRkYwM0RGOTRBNzE5RTVFRDA0QUEKKzoxMDQ1MTAwMEE3RjFCQ0NERjU0MTBERkI3QjQ2QkRDNUYwRkREM0ZGM0EKKzoxMDQ1MjAwMDIxOUQyM0YxRDJDNUI3QTYxMEVBNDMxRkUyRjlBQkY0RUYKKzoxMDQ1MzAwMEExMEZDMkFFMzEzMUM1RUEwOTMwNjE0RjBGOUYxN0VDQjAKKzoxMDQ1NDAwMEU5RTE3ODgwM0QzRDNDMEY3QkJBRjE1RDI4MjNERDYxRDgKKzoxMDQ1NTAwMDRGMEYyRjFGN0VEODQ4Rjc5MTZENDZCQTVGNzZDNDQ4M0IKKzoxMDQ1NjAwMDc3QzU4RjkxRjRCOUJDRERDODBGOTFGNEI5RTI0NDA0NkEKKzoxMDQ1NzAwMDdGNDg3QUNDRTZGRkZENUREQzkzMjY3QTRENzI2OEVDQ0QKKzoxMDQ1ODAwMDcxRjczRjRGOUZENEExOUMzRTg1M0RGNEY5RUYwQzNENjAKKzoxMDQ1OTAwMDdENjgzRkRDNEYzRjlGNjUwM0JEM0FDNTdCN0QyQkE1MDIKKzoxMDQ1QTAwMEZDNTRGMTg0RkNCQzJCRUVEM0RENkUyNkZGRkU1MTUzOTAKKzoxMDQ1QjAwMDBCQkQ5Nzc0QzBBOUJCRDFGRTk2QTI3QTBERkU4MzM0QzEKKzoxMDQ1QzAwMEU2REJCOTg4QzMzN0ZGREZBM0M4OUYzMDdGOTBCOEQ3MzkKKzoxMDQ1RDAwMEM5OEFEQTI5Q0U1RUM5QjlGOTE5MjI4RTY1Qzg1MDc5MUYKKzoxMDQ1RTAwMEJFRjA4ODc4OTZBMkExNDIyRjhDRjMzODI5RUVCNUIyOUUKKzoxMDQ1RjAwMDQ4REMyM0UwQzc4MkFDRjlDNUUwOUY3N0EyRjE2RTYxODkKKzoxMDQ2MDAwMEQ3NDY2MUJGNkZCNzhBRkJBNTdFQ0U0N0YwOEI0MTRGN0YKKzoxMDQ2MTAwMDg0MUU5NzI5RjVBOEE2REZEOUVEODA3RkYwMjY2NkQ4RkQKKzoxMDQ2MjAwMDE3ODcwNEVDODZCOENCQzJFRDRFNDNCRTM4OTg2NkE4MTcKKzoxMDQ2MzAwMDNGNkNBRkNCNTA1RTFBMkEzMDk0MEYzRkVDMzFFNDQ3MDkKKzoxMDQ2NDAwMEI2OEQzNkQ0QkZFQzg4RDc5MEJGQkM3REIyQTFGRTE1MjUKKzoxMDQ2NTAwMDI3N0M4NjdDMDZFQjdDMENGODFEQTQ4OUYzNjhGNTUwNUEKKzoxMDQ2NjAwMDExQzdDM0Q3MTBGOTkzRTZERjkzMjhFRTBGQ0E3M0FBRDgKKzoxMDQ2NzAwMEQyODM1NTNDQUUyRUY5MkU1MjlGMUU2NEQzMjlCRUI3NkQKKzoxMDQ2ODAwMDI5OUQ3OUU4MUU4MDVEOUU0Rjk4NTFDRkQ2NjUzQ0FEM0YKKzoxMDQ2OTAwMEQyNDc5OURGMTg0RkFCRTI2OEJCRjU3MUE5N0YyQjdEM0MKKzoxMDQ2QTAwMDM4MkM4RUQ2MUIxRTQ3M0I1RkRFRjM4RERDRjdFQTI1RTgKKzoxMDQ2QjAwMEREMjNFMTFGNjQxM0YzNkRGQTlFOERFRTJEMjhCODIyRTEKKzoxMDQ2QzAwMEUxRjk5QjhDRUZEQzZBRUZGREZFQzg5RDQzODVCRkZERTEKKzoxMDQ2RDAwMDk3MzlCRUVGODI1RjlGODRGOEM4RTk2RDNDNEZCQjlGNUUKKzoxMDQ2RTAwMEYzNTdEMzBGNkM5RUJCNUNERjNFREVGQzYxNjIzRUYzOTIKKzoxMDQ2RjAwMDRDQTY1QjJBOEEyODZFNjlGNkNGQzJDNkZGQTExQzc3M0EKKzoxMDQ3MDAwMDc1OTFENkVCRkNFNjI3ODhCODIyOTY2MDczODE3RkZCMTMKKzoxMDQ3MTAwMDFFNEZFMDMzQ0RDNjlBRTk5RThCOEMzQkJGNzk3REYwNkUKKzoxMDQ3MjAwMDAxOThDOEU3RDk1QUFDRTJGREIyODAxNUZDMzA2NTNDNkYKKzoxMDQ3MzAwMEQ3OUY0QTYxQjdGQUZBMjEwN0Q3MzM5RTZDQjA5MDFEMTQKKzoxMDQ3NDAwMEUyRTFBMTM3Q0NGMEU3RjZEQzIzMThDNENGMTdFMDBGODUKKzoxMDQ3NTAwMEU4MkEzODk3RDg4QjQ0RENFQzlFQTE2MkZEOTc5QkJGN0EKKzoxMDQ3NjAwMEVBOEVGRjI2N0IzQTYzNTI3RThCNzM0QjJGRkM0NjdDOEUKKzoxMDQ3NzAwMEE4RTZGMUFGOEUwMzhGQzQ5MzNBMTczMkI5RUZFNDRBM0IKKzoxMDQ3ODAwMEI4MTRGRUJBQ0ZGMTEyN0YyQTFFREZCNUQyRUE3QkRBNjcKKzoxMDQ3OTAwMDQxNzFGRDkzMTFDRkE0RTgzN0IwNDhGMEU1ODlBMTgyQkIKKzoxMDQ3QTAwMERFQTgwNzc5RDQ1N0JENzI3MzUxMDJFQ0I1NURDQzk1ODQKKzoxMDQ3QjAwMEUwRkMwNjdCRTRCRjBBMkYwQUZGN0REREVGRTk0QjNFRkMKKzoxMDQ3QzAwMDVDMjQxN0ZBQjhFRkQzMTc3RkQyREYzRjcwRUYyNzRDODYKKzoxMDQ3RDAwMDNFODhGODEyNDk4RjQwQUU4OUZDQjlGN0M0MTlENzcxRTkKKzoxMDQ3RTAwMEZGNDI4MURGN0Q2QUJGRjBGM0YzQTQ1MTRFMzBEODk3Q0EKKzoxMDQ3RjAwMDlCRDY5QUE1OUMxMEZCMkFGNDBEN0M1RkI4RDY0QUZBOEEKKzoxMDQ4MDAwMDA2NkIxMEYxQzgzNTUyMTYzM0U2NEIxRDMzMDJGRTU4QzUKKzoxMDQ4MTAwMDJCQkQ2Nzc1OTU5NzkxM0VCMkMwNjEwQkI0RjJGQTk1QzYKKzoxMDQ4MjAwMEZFQzg3REQ1NEJFREM5NUZFM0MyQkIyNTlFQkI2MTdGNTIKKzoxMDQ4MzAwMEFGNUE2N0FDQjdEODIxREVGNTVBMTg3MTJFNUQyQ0NGNzAKKzoxMDQ4NDAwMEE1OEIyM0NFQTVEMTg1NzI1RkY2MzAwRkU5NEREMkZGM0YKKzoxMDQ4NTAwMEFDRTBFQ0U2QUI0MDBFQzUwNUUzOUM2QTE2RjYxMjhBQTYKKzoxMDQ4NjAwMDU3RUFCNkUzQzNCRjEwRjY4RTI2Qzc2NzRDMDFGNkVERDQKKzoxMDQ4NzAwMDY2NEJBRjcxNjREREY4RUNDMzRGN0UxQTdFNzIxN0Q2QkIKKzoxMDQ4ODAwMDdGMTdEREZGRTlEQTE1MkRGQzY4Q0E3RjIxRUI5RkY2NjMKKzoxMDQ4OTAwMDlGQTc3MkQ0NDc2RjY3NEFEQjRBRTA0N0VBRjY3NzQ0M0UKKzoxMDQ4QTAwMEY4NERCQTFDQTZGOEQxRTg2Rjg3Nzg3RjQxQzUwMTJDNzYKKzoxMDQ4QjAwMEZENkJBMEM0MTlFNkU3RDREQjREODZCODhCQzg1NDVGMDYKKzoxMDQ4QzAwMEIzOUJFMjAyNUEyRDdBNTkyMTlGQzcyOThCQzc4RUY3RDUKKzoxMDQ4RDAwMDIyRUY3NTFDNDhDNTdERUQyOUQyNUUxMzA5NkZCNzFFMDYKKzoxMDQ4RTAwMDNBNTYxMzdFNDJCRkQwNDNCQjI2NkJBNDg3NzJCOUM4MjkKKzoxMDQ4RjAwMEIwOEU5NDNGQkI4Mjg1NTI5MDJBRkY4MUJFNkUzNEUxMTgKKzoxMDQ5MDAwMDU5RjkwRjJBNDNBMzA5Q0UxOTREOEJBRDc4QjJBRkZERUIKKzoxMDQ5MTAwMEIxM0JDQTYzNUMzRDdFODVGNjRDMTE4RkQyOTc3RjYxQjcKKzoxMDQ5MjAwMERBMDUwRkY1MzdGREMyMThFQUE3QTJEMDJERUU3MTM1RDIKKzoxMDQ5MzAwMDNGQjAxMjdDMzQ3NDNCQjM2MjlFRUQxMUYxRDgyQUREOTYKKzoxMDQ5NDAwMDVGMjhFQ0RGNDcwQjk1REM5NjcxMkU2QjM0QTE2NzZCMEIKKzoxMDQ5NTAwMDRDQzVCRDkwREM1NkY5RjMyRDMyNUYyRUYyQUJENzhBRjEKKzoxMDQ5NjAwMDdDQkI3Q0M3Njg5QkI0Mzc2MDlFNDgzMTFGOUM4Qjc3QUIKKzoxMDQ5NzAwMDQ4N0IwNEU2ODExNEYzQzA3N0M4MjlFNDIxQTc5MDg3MTcKKzoxMDQ5ODAwMDlDNDIxRTcyMEEyOUU0MTRCRTJGNjBCRUFDNTJCM0YwRTIKKzoxMDQ5OTAwMDgzNEMwQzVCMzdGMDgzNEMwQ0QzODNFMDA3MDlDRkMzMDcKKzoxMDQ5QTAwMDBGMTI1RTFGN0U5MEYwNzJGODQxQzJDQkUxMDcwOUNGNzMKKzoxMDQ5QjAwMEMzMEYxMjVFMUY3RTkwRjAzQzFCN0Q2RDRGMUU3MkNEQUIKKzoxMDQ5QzAwMDVCNjFDODRGRTNGQUY4QzRCMDc1MEIzRjQ4NzhGRkYwNUQKKzoxMDQ5RDAwMDgzMThGQUQzNTcxQURBREZDNDFBMENFREUxMDcwOUFGQ0UKKzoxMDQ5RTAwMDdGNEI4MzY2RjA5M0RDMjJFRkE1NTc2RDRBMjJGRTk4MzkKKzoxMDQ5RjAwMEUzRjZGREIwOTBEM0Y3MEZCMTVGREY2NkM1MzlDREJDRUMKKzoxMDRBMDAwMDZGMDk5RDlGRUE2MjNDODJDRTJEOTMwNURENEQ0Q0QwMEYKKzoxMDRBMTAwMEI5NzMwRUQxRjkwRTlCQzg5NzhCQjhEOERFRkMwRDEzNzUKKzoxMDRBMjAwMDczODVCRjAxMjlGQzBENDhFMTZGNDAwQTdGMDNERUMzOTcKKzoxMDRBMzAwMDg2QkYwMTI5RkMwREY4MEU3RjAzNTJGODFCOTBDMkRGRTAKKzoxMDRBNDAwMDgwMTRGRTA2QTRGMDM3MjA4NUJGMDFFREUwNkY0MDBBMTgKKzoxMDRBNTAwMDdGMDNCRUMzREY4MDE0RkUwNjdDM0YwQUJGNDc2RTBGOTQKKzoxMDRBNjAwMDVDRDBEQjczMERFNzNCQ0U4Nzg2RjM5REQzOTA4N0RFNkEKKzoxMDRBNzAwMDFFNUUxRjdBN0I3ODM5RjRGNkYwNzJFOEVERTE3OUU4OTIKKzoxMDRBODAwMEVERTFGNUExQjc4N0U3REI4NkJBNjg1RDQyN0YwRjZGN0UKKzoxMDRBOTAwMDA3RkQzRDNDNUZEQ0UyN0YwMzM2QTYxQjM2OUYzRDg0NkQKKzoxMDRBQTAwMEI0M0Q0RTdCNTJFM0EyRTBCREU3OEVDRDgwREZBODNENTIKKzoxMDRBQjAwMDVBQ0I0QUU0NEJERUFBOUQ5QzMxOTFFQjY3QkE4QzJGMEUKKzoxMDRBQzAwMDJCNjE5REY0QkVCMzJFREZBREQxNDM4Q0UyNjE4QkZGMzEKKzoxMDRBRDAwMDkyMjZFNDgyQkEzNzg0M0Y0RUY3RDI1RDhDQ0UwMTE1MjAKKzoxMDRBRTAwMDcyM0Y1NUVEM0RDQzY5MjZCOTI1RUJGN0U0N0JBRjE3NTYKKzoxMDRBRjAwMDM5QkVBQTQ3RjIzMjBDMEU3RTQwMkM0NTFDNDRFOTFERkIKKzoxMDRCMDAwMDhFMzJDNDcxNkYzMzY5MjIwRUYyMkUxMTg3MUFDOTU3ODMKKzoxMDRCMTAwMEU2MjIyMTk3QjY5OTc2MUU4ODQxNUM0QkE1NDZFRkM1RTMKKzoxMDRCMjAwMEU3NUJEODYxQkNFMzVEREM1MjVGMDY3REUxNTQ2MUEyQzYKKzoxMDRCMzAwMDlDNTdGRDE4QzRDNTI4Qjg5NTFEOTBDQjA5QkE1NzM1QTgKKzoxMDRCNDAwMEI2OTNEOUFBOEJGMDlFMThCMzJEODQ3Q0I3MDkzRDAxOEEKKzoxMDRCNTAwMEVENzA3RTJDRjQ2QkRFQTdDM0Y4RkJDRjg1NjI3RkQzQUMKKzoxMDRCNjAwMEZEMkJDNzU0RjNFRjg1M0JFQUM3RTBCRUQ2OTQxOEQxQkUKKzoxMDRCNzAwMEVFMjc0RkM1MTMxRUE3MzY2QjRGRTM1RURDRDgxRENDNjYKKzoxMDRCODAwMDhCRkI5NzVGNEI3OTVBQjhDMzY5QUJBNjcxOUQ3NENGMDUKKzoxMDRCOTAwMDRCRjU1QkI5Mzk4QkVFQTU1NUIyRjY4OTY5NjRDQkQ3NzUKKzoxMDRCQTAwMEU4MUQ3Mzg1MzczRUJGNDM5ODFGMTdGMTg3QURBNDhGNkIKKzoxMDRCQjAwMDhBRkIyMjMxRjJCRTg4QkEyN0UyQjZGODQyNDM0N0Y2QjIKKzoxMDRCQzAwMERDMTdCOTcyNDQ2MjM5RTJCNUQ4M0VGMUVFREUwRDIzNEUKKzoxMDRCRDAwMDJBRDdGNkUzRkRFQjAxRjFFRURFOTU3RkFBN0Y4M0YyQTMKKzoxMDRCRTAwMDVCQzRCQjdCQzQwNkEzNjgxQ0RBRDcwNkZCMzU3QUVGMkYKKzoxMDRCRjAwMDYxQUFCRkQ1OTRFMkMyRkREMTM1RDY1NEQ0REZDMTNDMDEKKzoxMDRDMDAwMDUwN0YwNjMzNzEwRjUyQzE1N0M0REE0Qzc4Nzc5QzZGQ0UKKzoxMDRDMTAwMDMxMDc5M0MzRjg4ODRCODBFOUEwN0JBOUM3NEFFRjQxQ0QKKzoxMDRDMjAwMDU0NTg5QzU2Qzg4REM4N0RGQ0UyNzhCQTA4M0QyMTIyQjQKKzoxMDRDMzAwMDFFQTJFOThFMjM1OUU2NkNEODdCNEM5RTEwRTRENkVFN0EKKzoxMDRDNDAwMDU4RDIxNzk0QkU1MzI5RTNBMENFMzdCRjQxRUY1OTU3MkUKKzoxMDRDNTAwMEVFMTRGQTgxQ0VFNTAwRTQ5RjhBOEZBOENCMDk2NDk5MEYKKzoxMDRDNjAwMEEwMkYwQzY4MkQ0OTMyOEJGREJGMDhGNzkxRkMyRkNEOEEKKzoxMDRDNzAwMDFDRURDMjNEQzYzNzI4NUVCRjcyRURDODA0NzE1RjQ3QTgKKzoxMDRDODAwMEY4MUZBQTI1OUVBQTY1RkMwQjJCNzJBNjQyRUY1NEVGRDMKKzoxMDRDOTAwMDk4OTY5QkM3MjZEMDdEQjcxNkExQ0YyOUZCNEJFNUFGRDEKKzoxMDRDQTAwMDg2QkYwOTNBNTczRTIxREYwMzU5NTc0OUY3ODAyMkUzNkYKKzoxMDRDQjAwMDUwOTQ3RUE4REUzQjU5RDI2Q0E1Rjg5NjI1MTE3QUUwNzcKKzoxMDRDQzAwMDMyQTkwNzJFOEJEMDAzQUYyQjhBRDAwM0Q1RkI3NEIyNDkKKzoxMDRDRDAwMDRFRTVBRjBFQ0UyMDNEQTU1RUJDQzczNzZGOEREMDVCRDUKKzoxMDRDRTAwMEQ4NEVGMThFRkRCQzM1MTM0Qzc4Qjc2MkRFNkVBRjQ3RkYKKzoxMDRDRjAwMEVCODUzRkRFOTNGQUNCMTQwQzlBOEMzODlGMDE5NENFNEYKKzoxMDREMDAwMEJDOTA0NkU5QUMwQjA1MjQwNzcwMTcwM0Y0NkY3Rjg1NTAKKzoxMDREMTAwMDkxM0VGREJFRDQ1NzY2MjBDRTBGRjdFM0ZDNTEzMjlFODQKKzoxMDREMjAwMDhGOTFCRTU0Q0E5Q0U1OTAxQjQzQkREQTQxOThBRkE3NTIKKzoxMDREMzAwMDU4RjVCNTg4MjM5Q0QyQ0FFODNFQ0MwREQwNkI3OEMxMUIKKzoxMDRENDAwMDZDRTgzOUMzQzFFN0VFNzJCQTE3MzA1OUEzRkIxNTM3QzcKKzoxMDRENTAwMDhDNTgyOUY5OUFGMzM5MDM5RkZCMjVERkZBMjhERkJEMjgKKzoxMDRENjAwMDFGNDhGRUQ2RkQxRDE2N0E5N0Q1QUZEOUYwMkU5QjJFODMKKzoxMDRENzAwMENGQjM4QTdGMjNGOTdDQkVGQ0JEMDlFNjEwNzZBNjZFMTAKKzoxMDREODAwMDNCMTQ4MEE1Qzc1NUFFOUEwOTdENzEzRTZDNzcwMzI0MEMKKzoxMDREOTAwMDIxMzk4QUUyOEE0NDc5NzNEMTU1MzM5QjcxQjhGOTFGNUUKKzoxMDREQTAwMERBMjdFNkE5REY2MUUwN0ExNkU0RTlDREI3OTZEQTE2RUMKKzoxMDREQjAwMDg0Qzk5NThBOTJGMUNGMTRGN0VCQTFGQjgyRUU3QjYzNTUKKzoxMDREQzAwMDQ1RkRBMUZGQUZCQTM3QUZGRjM3REQ1RkFDRTI3OEM2NzQKKzoxMDRERDAwMEZBOTg5RkQwN0UxQjVFQzZERDUyQzRCQzEzNDdFMzNERUMKKzoxMDRERTAwMDY2MzU0RjE2NDJCQ0RBNUM5OUZGNzVEMUUyRkY1ODU3MjEKKzoxMDRERjAwMDQ0RjhBMTdDNjBDNzk0OTk3RTVBMkY0MjVFREQwNDc5MDUKKzoxMDRFMDAwMDY1ODY5Q0QyOUYyQ0MyRkQwRTdCRkIyNEQwMjNCNkE4QzYKKzoxMDRFMTAwMDUzREU4Nzk3RkI1MTg0M0RFMkQ3NDU4MjBFOTE3Njg5MTgKKzoxMDRFMjAwMEFBMjIyMUM3OTlDNTk1NzUxM0RENTM3NTkxNUQ0RkMxQjAKKzoxMDRFMzAwMEZGQTlENTc4NkY1MEE1QkY1NEZCNDhFM0JGMjZERUZFMUYKKzoxMDRFNDAwMENCNTRGREU3OTAxRjhGOThDNEZERUQwMUU2MTYyNkVEQ0IKKzoxMDRFNTAwMDQzRTI3NzMyRTRGQTYxRjIzRDgzMUVGQTczQTkwMUZBNjQKKzoxMDRFNjAwMERGQUIzOUMzRTlBRkFGRDNDNEJERTkzRUVDMzhBQ0EwOEEKKzoxMDRFNzAwMEYzQjFBREIwRTMzNThBREZFNzc4MkE1RkYwRDE1M0I3RkQKKzoxMDRFODAwMERCNDhGRjlFNjc2QjdCMDNFRjM0MjkzQzdFRENGMDIzMUQKKzoxMDRFOTAwMEFCRjg5RDk3NTAxRURFOUY5QTVCMUY0REVGQkQ1Njk0NTkKKzoxMDRFQTAwMEY4REE0MDk3RDgyMjBGRDFFMzE5QzQ5NEYyRkFFRDRFMDQKKzoxMDRFQjAwMERGRkI5ODRGRERGQUZENEZFMkZFRjg4QTdENkVCQUQ3MzAKKzoxMDRFQzAwMDU4QjlCN0Y0NkVCQzZCNTE1MUEyMUY0MTc5QTVDMzY5QTMKKzoxMDRFRDAwMEMzRkVCREJDMzk5MUY2QjNGOUZERTVGRDQyRDY0OTdFNkUKKzoxMDRFRTAwMDJBODVGRkNFMjI2MUM3REE1NjIyRkEzRjI3Q0YyMTEwNEEKKzoxMDRFRjAwMDk0MTU4NjdBMzJBRTM4NjI5RDI4RkI2MEE0OUQyMUYyMUIKKzoxMDRGMDAwMDNEODFCRUQ2OEZCMjI3QzA3RTYwMEJCMzJGMkFGQjg0QjMKKzoxMDRGMTAwMEI1RTBEMzM5RDgzRkU3RDk4Q0Y3RTE1NEVBMkU5NkU3Q0MKKzoxMDRGMjAwMDVDNzkwRTVDRDhCRDdGMTU0REVBMEY3RDc5ODM0NkJGNTUKKzoxMDRGMzAwMDVCNTNFRDcwQ0RCQTlDRTdBQjBGNUIxMTI5QzhBNjI0N0IKKzoxMDRGNDAwMEI5QzQzQjEyRjc4QTc3MjQxNkYwRjUwQTc5MzM0RkM2QjUKKzoxMDRGNTAwMDBENTU2RjFBNERFQkFEM0FDMEQzRTRCRUQ3RTU0RDFCRUUKKzoxMDRGNjAwMDBFNjZCRTAyRkUwOTc5RTk5RTc4QjVEMzZCNEIwQTVCRUIKKzoxMDRGNzAwMEY3NTUyRDlBRTE5RUI5Q0EyNzE2MEI3QkRDM0MzQzYxQTQKKzoxMDRGODAwMDVFMDY3OUUxQjZFMTJEOTc3OTVDQUQ0MDFDOUFCQkQ4RkQKKzoxMDRGOTAwMDY1RjBCQkYyN0ExNEM3MzAyNTlCQkQyOURFRjFFMTcwQzQKKzoxMDRGQTAwMEJCQzU3ODY1NjFGRDJGNjgzMURFOTdFN0Y1QzVCQjE0OTkKKzoxMDRGQjAwMEM1NzFENDVGQTU5M0NGMUJGNjBGQTc5M0UwRTQ3ODIwQ0IKKzoxMDRGQzAwMDNDNzUzRUMwRkI3M0QxMzg0NDhGQUE1MEMwOEFGM0Y2QkIKKzoxMDRGRDAwMDNDQzQ0RkYwRkM1QzY3QzA4QTcxMTYzNDhCNzcyQkY0QUQKKzoxMDRGRTAwMEY1NjIxQzdENURBMkFEMThGQTkyQzU2OUNCMDRGRUU0QTIKKzoxMDRGRjAwMEJCRjYxQzNFOTI4M0Q1MUMyRkI4RkZBM0VFMDE0NkUyMDAKKzoxMDUwMDAwMEE3NTJDMjVCREQ5MjY4RDRDMzVBMzY1ODQxOEYzOTdEQUUKKzoxMDUwMTAwMERDOUZCRjQxRDI3RDQxRjMzOEJBRkY1QzZERjE1MjdDMTkKKzoxMDUwMjAwMEJEMkVGMUZCQzc5NUQxRjdDMTNGMzA2N0UzQTM1NjM3REIKKzoxMDUwMzAwMENGNUY1OTJDRjhGNzA2ODlENzI5RDlBMTNDN0E5RjY2MEEKKzoxMDUwNDAwMDY1QjQwNzcwQ0U3MUI2RDBGQ0JBRjFGQjMwQzc4Nzg2NjUKKzoxMDUwNTAwMDc3NTA3Qzg0NUZDRTE3N0VDNDkxNTU2RjM0RDJCMzA3RUUKKzoxMDUwNjAwMDFFODFERkVBOEQ5NUI0REUxNjU5NzQ5QjMzMUM4RTREN0MKKzoxMDUwNzAwMEZCRjM3MEFGNjcwRTVGREY3ODc3ODczOTc1QkE2RkYzMzAKKzoxMDUwODAwMEQ5QzNCM0IyNjg5RTFDNEVFMDM1Q0VFMzlBODRGNzY2NkUKKzoxMDUwOTAwMDM4OUYxMDFGMkI3RTUxRjc4M0Q1NzgwQjhCQzUzREMxRjAKKzoxMDUwQTAwMDg1QzVCRERCRDc3QkQ2QTU5N0Y0OUIyNjRFNUZEOEJEQzMKKzoxMDUwQjAwMEZCNUE5NzM2NUMzNEUyRTNEQUFBQzUzQjYwOTFFQjU0QzUKKzoxMDUwQzAwMEFENEZCNTJFRDUzQTU1RUJGNzQ5QUIyRjk0QTZGNUM4QTEKKzoxMDUwRDAwMDE5QkVERkQ2RkZBQzE3M0MzRDIzRTE5RDJCRTlDQUYxOTkKKzoxMDUwRTAwMDdBMjhGQzVFRDFGQTYyMjE4RkU2NjUxQkQ3M0JGQTQzMzIKKzoxMDUwRjAwMEJGQjdBQkYyRjFBMTNDREMwMzU0RjVENUI4RjNFNEVGNTQKKzoxMDUxMDAwMDc0ODFFRkMxNkZCNzRCQkFBM0ZFMkFBQTZGQkMxRjUxQkYKKzoxMDUxMTAwMEQ1MkQyRjc2QUM0RDg1QkNEOEE5OTFCRUJCRUE4MTgzMzUKKzoxMDUxMjAwMDk5RkYwNjNERjY3OUExQzc5RUFBRERCQTNDMUQ3NjAzMUMKKzoxMDUxMzAwMDRCMjAyQkZDN0RBNkVBOTA5MDBGMEJCOUZFMDM3OUIxQjIKKzoxMDUxNDAwMDQ4RUVEM0Q3RTRFOUY3MTY4RjBDQUJGN0QwRjNGOUJBRjIKKzoxMDUxNTAwMDkwMkYyMUM4OTdERjNGRkZFQTg3NjM1QzNERkJBNzgyNjIKKzoxMDUxNjAwMDdGQzFCQTVGNUIyQjFERTFGODEyN0M3RTVGNDExN0REQ0EKKzoxMDUxNzAwMEZCQUE3MkQ4NUM4OEIzQUQ2QUFFMjQ3OUNCRDJGODc5MzkKKzoxMDUxODAwMDQyMEI4QjkzOEFFMDgzQ0E2NjhEREVDREFBNkExODE1MUUKKzoxMDUxOTAwMDMwRkYyRkNBRTVBQUY1MTVGNDM2OEZBMjkzN0E3RjQzMjQKKzoxMDUxQTAwMEVEQTcwQUZFMUQxMkZFQjk5MjhGNUY5NEVCNkY2RThEMTQKKzoxMDUxQjAwMERCQjY4OEQ2QkREQjU2MDVGRTk3RTU3M0FBOERERkJCNEYKKzoxMDUxQzAwMEU5RDRFRDY3MkVCQTNCNERERTYzQTE3M0M5N0FBQkIwNkIKKzoxMDUxRDAwMEVGRUQ4ODIzN0RGNUQ0QUE5N0RGOURDOUVCN0RGMTQ4REIKKzoxMDUxRTAwMDZCMTZGNDEzMDVDNzYyNjlDNzVCMjhFRDcxOEJBNERFRUIKKzoxMDUxRjAwMENBRTlGNDdBNzE5ODlDNURGQzk0QTA1M0Q1MEJCRkZBNzAKKzoxMDUyMDAwMDA0RUY0M0NEQ0I5NkYyRUMwMTcxQkY3QzQxNzAyN0QxMDYKKzoxMDUyMTAwMDZEQ0VCQTBENTYzN0FGRjc2RUIxREIyMEE3QUJFQTRCQjgKKzoxMDUyMjAwMDlEQjA0RkNGNURENzZBODUxQzc4Qjc1OEUwMkQ5MkRGQ0YKKzoxMDUyMzAwMEU3QzlCODU0ODU1N0VDM0I1QTk4RkY0MkQ1ODdGQ0RCNDkKKzoxMDUyNDAwMEM5QzdCOTc1NjU3NDNDRTIzMkQ0MzhGRjI1RjlCOEFBRUMKKzoxMDUyNTAwMDNFMzEwOUUzNTVENTU3RkUxMEU3MUUyNUVGMjNEN0RENzQKKzoxMDUyNjAwMEIxNjhCMTFFMTZGMEZFQjAyRThGOERGM0QwM0REQjc5MDQKKzoxMDUyNzAwMEYyRjdBNTIyRUI5Rjk1NzRGQkIxNTVCQzIzOTgxMTFCNDcKKzoxMDUyODAwMDdDOTZFMjBBNTZDNDc4MjAxRjcyNzNEQjAzMTgxN0ZDNjEKKzoxMDUyOTAwMDBDQjg2RDI2RjFFRTYwNkU2REZCOTc4MDgzQUJDNTE0ODQKKzoxMDUyQTAwMDlGODIxNEVGMUQ0MTRENEVFNUY5QTc0REUyM0UxMDYyN0QKKzoxMDUyQjAwMDRCOTBBNjk0MDg3RTgwNjkwQUU1MkNBNTlEREUzRjBCRTUKKzoxMDUyQzAwMDhCQ0YzNEYwQUI4RDZENTk4N0Y3NTc2QzI5OEM3RUVGRkYKKzoxMDUyRDAwMDQ1RjFBN0VBNDdGMUE3RTJERkJFRTZFNzI4QjlCNEY5NEUKKzoxMDUyRTAwMDFENzM0QjNCNDQ4MTI3MEJGNzI4RTYzRjM4OThERUU3RDgKKzoxMDUyRjAwMEZGQjY3OURBRTQzQjc4RERGMzhEMTJCRjVCNzBEMTdDQzkKKzoxMDUzMDAwMDczQzVCOUE1RUZGOTZFMkM0RkVENjVCRTkxRjM1NEVCNjMKKzoxMDUzMTAwMDQ0QzU1RTc3RkIxNTVBODQ1RkUxOThDNkY3MkZERUVFMzEKKzoxMDUzMjAwMEQ4Q0E2ODhBRkI1MkYzNTI3NkVGNEI4RDk3Rjc5NDI0RDQKKzoxMDUzMzAwMDQ5M0I0MjdCMUNGNEM4NzlGMkY3MjA1ODQ4RTRGMUJEQTAKKzoxMDUzNDAwMDIyRUNCQkRBRjdENUJCNjE0QTNFMUZBRjk3RkIyMjZCNUQKKzoxMDUzNTAwMDdGMDBFQjk5MzVFNEQwM0IxOTQ3NUI4RUM1RTFGRDhFQUMKKzoxMDUzNjAwMDYzRTMwNDdDQUFEREFENTY3MUVGOTVDNUQ5NUM3ODNGNDcKKzoxMDUzNzAwMDkxOUZBRkU4NzcxRjE2MzZGN0E3NzNFNENEMEQzOTI0NTgKKzoxMDUzODAwMDE3NkVGNjI3MEFCQjgzRDRFRjE3NDkzOTE4N0I2QkU1RjQKKzoxMDUzOTAwMEREOTdBMUZFMjZCNzUzRTNFMzJDNzQ3ODNFREI0NEVEQTIKKzoxMDUzQTAwMDBCM0REMDA3NjMzNzU2RDhCMjQ5RUYxNUU3MDBFNTA3NDQKKzoxMDUzQjAwMEJBNTU2MzNFQkFDRjA0Mzk4OUY1NjVEQTlGOEI3RDY3QUMKKzoxMDUzQzAwMEYxMjY3MTBFOTg2MjYyRUJFMDJGMUNENEU0OUI5NDBFRTAKKzoxMDUzRDAwMDM5RjE5ODc4Mzc5MjZEMzZCRUFCNzQyMENGNzc3RDA5NUUKKzoxMDUzRTAwMEYwMTZGMTFFRDlBREQ2QTBCNzNGRTQzOEQ3Mzc2MDY3QzUKKzoxMDUzRjAwMDVBRThGMDkxREVGRTk2OTQ5MzQ3Mzc3NkQwRkJFNDBBQTQKKzoxMDU0MDAwMEFGMTdERDUzQjE4OTdCQTk5RDcxMjZCMkJGNURFQTdEREYKKzoxMDU0MTAwMDk1NkFFOTRGNTI3Q0EzRkM1MThGRTNGRjJFMDc5RTRDMDcKKzoxMDU0MjAwMEI0QUY5NTlCRTdEMUJCM0U3NzZGOUM0MDY5RjU4NkYyQTAKKzoxMDU0MzAwMDQ3RkNDNUI4MEZFQjRCMUQ0MzcwNUJDOTNFNTY1RDM3NEIKKzoxMDU0NDAwMDQxREMxRjdEM0EyQTExRTc5QjJDQUIzRjJCNUMyRkFEMzMKKzoxMDU0NTAwMDZFQkQ4N0VFQTk5QzY4OERBNjdCMkExMzlEMTUxMzEzM0MKKzoxMDU0NjAwMDUzRThCRDVEQkFGN0E1RUE3RDVGQUVDQkE1NzUxMzBDMTkKKzoxMDU0NzAwMEY3NEMxNkYyM0UxMTA3RkJFNzYwMkNDNTk1QUFGQjIzRkIKKzoxMDU0ODAwMDc3QzZFOERGMkRFOTI3RUU5MTVDRUUxMkY3NDdEMkE5NDcKKzoxMDU0OTAwMEJFQUI1NzdCQjg0QTNGNkIxNEY3MTFDMkVFQzU0QzlEQUIKKzoxMDU0QTAwMEMzREJEN0Q2QkQxNDhGN0U5NjNERkNGRTI4OEUxOUQ4NUYKKzoxMDU0QjAwMDlGRUUwMkREQkFFRkM1NkMxMkY3NjI5QTcwNUU4MjFFMzMKKzoxMDU0QzAwMDk5RTQ5QjM5MDdGOEZGQTU5OUYwREZENzc4MzVGODUxQjMKKzoxMDU0RDAwMDkyQjA3M0M0Q0Q4MTA0RDI1QkY1MTBCM0MxOUZBQzNCRDUKKzoxMDU0RTAwMDE5RTlDNTI3Q0NBQzAxN0E4MEQyNUZENEY3NDcyNDVFOTYKKzoxMDU0RjAwMDRFMjRCNDY0ODEzRjk2NkM3QjM0MEJGQkNCQzkzODkxNEUKKzoxMDU1MDAwMDlGQjc2REQ2NUI5MDU3RkE5NjI4QTE5RjVCMThFOUMzQTkKKzoxMDU1MTAwMDU1N0VBMTVGQjM5QTI0RjUyRTY2RjQ3Q0Y4NjM0QjYyNDYKKzoxMDU1MjAwMEM1M0IzQ0YyRkU4QzgyNEJCREI3N0FEMjIyREU4QkMxRUEKKzoxMDU1MzAwMEJEMThGMEZCQzc5NkQwNDJEMEY3NjNBRUJGRTIxQ0ZCQUMKKzoxMDU1NDAwMDdEMjlDNzNFNkUzMUQzRUY4RUY4Rjk0MjgxMUVGMjcxOEMKKzoxMDU1NTAwMENCNEI3MUI4OUZBQkY0QjU3MkYzRUZCRDc4OEY2NkQ1QzYKKzoxMDU1NjAwMDZFNzE0RjE1RUY5QUQzOUI5NUQyMEVCMjVDREE0MTU2MEQKKzoxMDU1NzAwMEJENjI5RDg0REYxREUxRkExNzdEQTlCNTg0NkNCREQxQTQKKzoxMDU1ODAwMDZGQTlENEFGQkFGM0JCNzZEMkI5QUQ3Njg3RDAxRjZBMTQKKzoxMDU1OTAwMDgzMURBNDNGMjg3RDQ0REQ4QjVCQjZBMzgzRjQwOUQ1MkUKKzoxMDU1QTAwMDZFRjkyRTgxOTdCQTVERTI3QjI1RTJENkU1RUY4NTZBM0EKKzoxMDU1QjAwMEI5Mzg0RjZCOTRGRkE0NjhDMUFDMzU5NkYwN0MyNUU1RjMKKzoxMDU1QzAwMDNGMjk1MkY2OTE0RUQyMDdFRjJCRjgwRDlEQzNFQjlBNkYKKzoxMDU1RDAwMDY1QkYzQzZGMEQxQkVGMEQzMDY5M0ZGMTNEQzc4MUY2OTQKKzoxMDU1RTAwMDYyREY1N0U1NzVCQjEyQTk3REE4MkU2NjFERjY3OUVGMUYKKzoxMDU1RjAwMDcyODcwNTY5NTM5RDgzRjZGRENERjVBNjAyQ0IwODAwQTEKKzoxMDU2MDAwMDE3RTM4MTFFQjc0RkM2NkZGNTVCRjYxRkQxQjAxRkE0MUQKKzoxMDU2MTAwMEIzQ0U4Mzc4RjdGNTgwNTMzRjAyN0U1NUJGNjdBOUVFN0UKKzoxMDU2MjAwMEJEOUM3QkVERjNFMUU4RkZBQTQxRURFN0YxQzY4Mzc1OTAKKzoxMDU2MzAwMDREREQyQ0Y4MjdEQTRCRTQzQzhBREE4NzgzQUZGQjFEN0IKKzoxMDU2NDAwMDEwRjJGOTA5MkI1QjQ3RUYwNzVCN0MwQzc2RkI5MEY0QkIKKzoxMDU2NTAwMDJCRkFGRjYyMTJCRjJGQTE4NTlFMDlEN0FGNTI4NjA5OTAKKzoxMDU2NjAwMDNEREMxNzI1RkM4QjVFQjc3RTEyNzA3QzQ3QjMxNjk3MjYKKzoxMDU2NzAwMEUyNENFRDMyRTdBMTdGRjUzQjJBNEE0RjFEMkZFNTczM0YKKzoxMDU2ODAwMEE2M0M1RkQ5MDZBNDM5QzBDNzlBRDc0QkY3MTBFRjJBQkEKKzoxMDU2OTAwMDNBNTA4NTdERjlGRTRFM0JGREJFQUE4QUMzMUJERjE5MzkKKzoxMDU2QTAwMDQzN0E2QkU2ODBDOUI0OUZBOTdCMjkwNzhBNEM3RUJDRUMKKzoxMDU2QjAwMDdCN0UzRkIzOEJCODAwN0I4NDVFNkI4QUE2Nzg2NDZEN0IKKzoxMDU2QzAwMERGMkZGRTAyNzk5RTYxRkVGMjIwN0VBNzI0RTNERjM0MDUKKzoxMDU2RDAwMDdBRkY3MjdFRDc2NzRGRTAzNzY2RTZCMTQwMjlCRDgzMTcKKzoxMDU2RTAwMDk3QTg5Qjg2NDEwRTc3NERFRUQwMzlDOUVFNzcwNkVEMkYKKzoxMDU2RjAwMDFFQjE0RkIwNzBGOEY3N0RFRjJGRjE0OUE2MUVCOENFNUUKKzoxMDU3MDAwMDc1N0U0NkVGMEE5RUVCQjQ5M0JENzZGQzNFRjlERTVFRjUKKzoxMDU3MTAwMDA0M0NFN0QyNUMxNDE3Q0RFQjg1RjBCRUNBMzk4Nzg5MEIKKzoxMDU3MjAwMERFMTkxQkJGRUYyMEJEOUIzNzVFQkRBQjY3MzdCRUFCM0QKKzoxMDU3MzAwMEM3REEzMjEzNjE0RjI2MUIyQTU3MEE1MjlCMDREREFFOEIKKzoxMDU3NDAwMDRBMzA5RTEzRjM4Njg5RjM1NkRFMzAyMTNGMTRGRUJBQTkKKzoxMDU3NTAwMEVDNjdERkQ2QjU5RTc1Qjg0MkY5RUZENUVGNERENTQ0NkQKKzoxMDU3NjAwMEQxRUY0RDc1RURDQkY5QzZGNzEzREU4N0ZFQzBGNTgyOUMKKzoxMDU3NzAwMEY1RDlERUUyNjFGRDdBRjZDRjE5MTIyRjZBMUYzNkNCMUEKKzoxMDU3ODAwMEZFNjc0OEZDQ0M3MDk4MDQzRTIyN0U2RjQzRjE4N0EyRUUKKzoxMDU3OTAwMEJGODI1N0QxNTdEMThERERERUY2MDZFRTA1NzE3QTE1NDEKKzoxMDU3QTAwMDNGQzg4ODRFOTcxMTlERkVGMkNFNUE1Q0YzMUY2MEY2RkIKKzoxMDU3QjAwMDc2RThFRUZGOEI3NDBBNDUwRjg2OUVGMEIwRjhGREFEREIKKzoxMDU3QzAwMEM4Qjg0NjU2QzA2ODlEQ0YzN0M3OTAxRDUwOTdFRjgyMjYKKzoxMDU3RDAwMEYzRjVGRDA2RDZCNzVBRDc4MzI2QjcxNzYzN0YzQ0NBQzEKKzoxMDU3RTAwMDhGREU4MEFCREQxNEE0RUZERjFEMjZFMjA5MDdCMkI2MjEKKzoxMDU3RjAwMDc0MTk3RjMzMTI3QTU5OTM3Q0ZGQjhGQjc3MEM5NzM4NzIKKzoxMDU4MDAwMEU4QkQ5MTczMDFGNUZFNzFFMEIxNDU3Q0RDOEQzMzhBMTIKKzoxMDU4MTAwMEM4QUU3RjhFQzlGNTVFRDNGRDRFQjY3OEZGQjhGQjlENEUKKzoxMDU4MjAwMDZDQjM5RkVDMjQ3MzYyQzhDRUQzRkQ0RTc2OUU3OEVGQTYKKzoxMDU4MzAwMEZBNTU4REU1RTMxRDVBN0Y4NTlERTJFMzIzREZDOUU2MzYKKzoxMDU4NDAwMEZCQ0NCM0YwNjczQzVFMTM0MzdFMjhGNTNFRjI3OEE3QUQKKzoxMDU4NTAwMDVFMEYzQTQ2QkU4RkZDODhFNjlCQjMxMEZEMTUzQkE4NTEKKzoxMDU4NjAwMEJGRjYzOTMxMkY2QzEzNjgwRUMxOEU3M0I0MjE4RURFRjIKKzoxMDU4NzAwMDg1NTY3Q0E5RUNENzgzRkMxRDhGMDE0RkVBNUVFNzFGOUMKKzoxMDU4ODAwMDI0N0YyOUJDQUI3QjZEMEFGRjhBQ0ZGQzU2NDZGNzNGQ0QKKzoxMDU4OTAwMDQxMDdCQzJCQUJERTY3RDdFRTkwNzI0M0REMjc3Q0REODIKKzoxMDU4QTAwMEUzNDJGQTQwQTJCRTBFNzAzN0FERTQ3MjgzRUNFMkVENDMKKzoxMDU4QjAwMEI3NjFCRTRGN0MyRkNFMEJCODhFOUE4Q0JGREZBQkQyQjgKKzoxMDU4QzAwMDg3ODY5OTBDQkYxMzNBNUZFRTU3RjM1NURDN0Y4MzMxMUYKKzoxMDU4RDAwMEVFM0ZGMjFEQ0RFNDA0REZDM0MzNzhGQjMzREFGQkEzNTQKKzoxMDU4RTAwMEYwRjE5REZGMzZGNzFBNDdGMkE0NUNGRjIzNjJGNTI3MUIKKzoxMDU4RjAwMDUwNUZERDdGNTBGQUUxM0JBNTlGNjdEMkVGOEQ3Qzc1NEQKKzoxMDU5MDAwMDkwN0U1NzcxQUVEMzE3NDBCREU4NUNFMTBGRjg0MzdBNDMKKzoxMDU5MTAwMDNCREREN0Y4QzM5Q0JGNjY5MjNERjkwRUYxRkVFN0E1Q0IKKzoxMDU5MjAwMEMyNzlGMTdENUFDMTBGQUIxNzhBNzhDMzBDNTY0RkZDNzAKKzoxMDU5MzAwMDlCRDY3MzRGMzMxQTcwRkNGRjc2OUZCNkU3QkVFQkU0M0QKKzoxMDU5NDAwMEUxQzcyOUVFQzI0N0JGNTcxMTQ5OEZCMTUxMDc1RTcyQjcKKzoxMDU5NTAwMEYxOTNDQTZGODc3RDMxOEJFRTkzMjYxQzU4RURFNkY5RTMKKzoxMDU5NjAwMEEzMkY5RTE1Rjk4QzAzRTdERDlDMzZFRDJGOUUxM0Y5Q0UKKzoxMDU5NzAwMEMyMDNFNzcxMUZGNUQzMTczQjQ1RkUwQTQ2RkVBQ0UzQjEKKzoxMDU5ODAwMDJGN0UzOTBCRjc0RkZCQkJGNTNGODI1RTMzMkZENEJGMjEKKzoxMDU5OTAwMDgxRURGNUMzMzUzNzJFNzREMzdEQ0E4QUNDMDI3MTlGNTEKKzoxMDU5QTAwMEYyNjM5NENGNDg1REIwMzY0MUVCQjk0RjY5RjJGOEZFMkYKKzoxMDU5QjAwMDA4QkUzREY3QTVFMDZGMzc4NzE1N0NGMkNGQTZFQTNFMUIKKzoxMDU5QzAwMEE5OTJCNzdEQzk0NUI1RUVGRTU1Rjc2MUQ1M0E2NkRCQkMKKzoxMDU5RDAwMDNDRUJBQzYwNDJGRjNGN0Q0Rjk1NzlGOEJDRkUxRjlCQ0UKKzoxMDU5RTAwMDRBMDE3MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQ0EKKzoxMDU5RjAwMDAwMEJCNTdDMEI3ODU0RDVCNUYwM0U3M0U2OTk0QzkyMEMKKzoxMDVBMDAwMDQ5QzgwQjAyRTEwNDQyMEMxOEQyOTlCQ0MwNUJFQTFERTQKKzoxMDVBMTAwMDIwODkwMTVBMUI2Q0I1MjAxODA2OEQ5MEQ3NjQ0MkE4QzYKKzoxMDVBMjAwMDJEQjVEODBDMDYxMUE4REUwQjU3NTRCMDY4Mjc0MDAwREUKKzoxMDVBMzAwMDM1RThBMDAxMjcxOEVBMDA5MjIyNTJCRjk4RkIzN0YyRkUKKzoxMDVBNDAwMEZENUZFMTBCM0U5MDk3OTMxMEI1NTdFRjU1Qjk2QkFERTUKKzoxMDVBNTAwMEJENEZFNjQxMjJEQUZFN0ZGOERBRUREQUVGQkRENzdCMDMKKzoxMDVBNjAwMEFEN0Q4NkIxQjE5NkYzRDE4Q0ZFQUVDOThDMUQzRkZDRTUKKzoxMDVBNzAwMDlFQTI0OTY0NkM0NjgxRDE2QTkwQTAzNDc3MkJDNjAyRkQKKzoxMDVBODAwMDBFQkIwMURFNzU5NUY5MzVCMUJDOUYzNkI0NUZBMkQ3NjgKKzoxMDVBOTAwMDY2QzE3RTc1NjZFQTk3MzkwOEZENzJCMURGOUY0NzZCNzQKKzoxMDVBQTAwMEIxQkU0MTZGMzU2NDMwRjZCNDhFQjk0RDA5OENDNTY4MEUKKzoxMDVBQjAwMDhFQzhCODRFQ0MyMDYzQ0REMDdGQUM4MTMxNjMxRTYzREQKKzoxMDVBQzAwMDI5N0FDNkIwMURGQTMxMjM5NEJCMDZGOTdBRTMxMjFBN0IKKzoxMDVBRDAwMDU2MzA5ODY3NUM4NUQ5REE5QzgxQkJGNTMwNTZDODU4M0EKKzoxMDVBRTAwMERBMjhGRjY4REM1RkRBNEEzREQ1Qzc2ODdBOTQwNjMzNjYKKzoxMDVBRjAwMDYzODEyNkZGREMwRjMzMTkyQjhFOEFDRDY1M0Y4MDUyRTAKKzoxMDVCMDAwMENGQjI3MTFGNEMxMzY1NkQ4NUY1NEFFNEFGQkFEMjAwNzAKKzoxMDVCMTAwMDZFRUM5MDZDQjAzNDJCMzY5NDZGNjcxMzE5QUJENzAyRDAKKzoxMDVCMjAwMDkwODhGRjMzNzk1QTcxMUQ2RDc3RjUxRUU4RDc5MzlDRTUKKzoxMDVCMzAwMDY2REQwOEUwRDhENDgzMkMzMzFGQzZCQkNBNzJEODA0RjQKKzoxMDVCNDAwMEM2OEU1QTFDMzlENjI0Njg2NzlCMjQxQzFGOURDM0M3NjgKKzoxMDVCNTAwMEZGQUMyQzdBODcwQ0UzRkIwRkRGNTRFODgwQkEzQjBDRDgKKzoxMDVCNjAwMENBMDE2NjY1MkNERjNCN0E4MUY2MTY4MEUzOTQ0MkM5NTAKKzoxMDVCNzAwMDAyQjA3NUVDMDJFRDY4ODA1Mzk0MDMxMkI0MUJEREEzRjAKKzoxMDVCODAwMDE3MTRERjgyRTczMzVBM0VDQzY2RUMxNzRDNjI3MTgwMDMKKzoxMDVCOTAwMDk3MENBRDYzQkExNUNFRUIyQ0ZCNDRDRjM0RDgzRUEwQTYKKzoxMDVCQTAwMDJGOUYwQUY3NkE4NTQ5NjBGREE0QTM3MDRGQjBDRjgxOEIKKzoxMDVCQjAwMDM5MzE5RTFENzAzRTk2QTMxNDYyN0JCQTZFMjBENjAyQzgKKzoxMDVCQzAwMEY3RDFGRjk1QjZDQzYzQTY3MUIxM0Y4N0ZBNkJGOEY3QjIKKzoxMDVCRDAwMEFGOEMzREQ3Mjk1M0JEMEFBQkU1Mzc1Njg5RUVENzk1MzMKKzoxMDVCRTAwMDY5N0UwQ0VGQUYzRUQ1NjhBNEIyRjM2QTI5QzM3OUI0REQKKzoxMDVCRjAwMEU1OTk3N0MwM0M3NjNENUI1MjlFNzNGREY4MDFBQjg2MUMKKzoxMDVDMDAwMEY2OTVCMTBFMTAzQTg2QzhDQkNFMTRGOEJGMjhBNkMyQkUKKzoxMDVDMTAwMDZFMzY5REIxOTY1RjQxQzVCRkYwNzYzODA5RDM0RkQyM0QKKzoxMDVDMjAwMDA4Rjg5NkFEQzVEQUIwRkU3NkVDMUY2QzY3NzYyMzBCRUMKKzoxMDVDMzAwMDhFNzc1QUE3NkU1RDlCMjlENjQzM0MyRjYzOUU0OTcwOTEKKzoxMDVDNDAwMDg0MzRENjIwMzFCOEJGNTRFNjI3RkNCQzY0NEJBMDczMjMKKzoxMDVDNTAwMEQxMUZFMEU5RDk0NDUzQ0I0NkE0NTcxOUU4MzI4RjRBMDMKKzoxMDVDNjAwMDY2ODEzMjJEMUFENjgzRjZCNDM3NEMxRUE0QUI1RDI2NUUKKzoxMDVDNzAwMDRFQjc5OTFBNUVFRUQyRjBGRUZBMjhFNjQ2M0ExRDA3QjQKKzoxMDVDODAwMDMwODNGMjZEOUJFMzc3QjYyNDlBQzc0RkYzQzhGQjZENjAKKzoxMDVDOTAwMDQ4OEZBMzk5OTdENjRGNjE2RURBOEZEQTZGMkNFQjM2NjcKKzoxMDVDQTAwMDIxQ0NCNDAzNTk4NDRGNTkzM0VDN0QyNkQ5NjY2RTQ2MTYKKzoxMDVDQjAwMDNBMEIzNEQ5RDk0N0RBNjA3RDIwM0E3NjU1MjhGRUVBODYKKzoxMDVDQzAwMDcxQkMzOTc0REMyQzFBQTc4RTc3QUVEMkIwOEY0NkUxNDYKKzoxMDVDRDAwMEUxRkQ0NDNGQ0U0QzhEREQ5MzgzRTNEODlCNTIxRUQ2MkQKKzoxMDVDRTAwMDc3RUJDQjYzODJFMzdBOUI4Q0VDMjNCOEQ3RkZEM0M0RUEKKzoxMDVDRjAwMEE4M0NERDY0QTFGNUZGNkY1MzJBOTU3RjZCNTJBOEZFODcKKzoxMDVEMDAwMDZDNTMzNjk1N0Q0RDU2QUE3RkJGNjkzQTk1NzcyRDhBOUIKKzoxMDVEMTAwMDI5NDBGQTc3Rjk2NkIyOEY4QzQyQ0VDMEZGOUM1RTlEMTcKKzoxMDVEMjAwMEEzMkYwNEVFOUQzOTNDMURCRDI2RThBODM3NjNGOEY2ODUKKzoxMDVEMzAwMDZFNkMwNzdDRjZERUNBRjFEOTdGM0ZGM0VDQzgyMEJBNUYKKzoxMDVENDAwMDVDNkI0OUI4MUVGRjMwQzI4NEU3RUI4RjYxMEJCQzcwRkYKKzoxMDVENTAwMDRGNkYxNzQ4MzQ3RkZGNjgwRUVGQjdFQTY4M0VCQjg2ODcKKzoxMDVENjAwMDZEQzVGMTZGMTdFOEY5RkMxMzM0NTVEODZFNEZFMEYzQTkKKzoxMDVENzAwMEY2NjYwMTBDRkI1OTMwN0RFNkNCQzg5N0Y2NjRBOENGRDgKKzoxMDVEODAwMDBCQzJCRDUzNzhCQjdEMENBRjU3RjdBQkI2RkZDRTY2RTkKKzoxMDVEOTAwMEUxNzQyOEYwREVBRjgzRjU3Mzg4REU2OTdFQjVGRkQ3NDYKKzoxMDVEQTAwMDQ1OUMwRjIzRkI3QjMyMzU2NTlFNjFFRTIzQzFDNkZCMEMKKzoxMDVEQjAwMDEzNUZDMDdEQjg5MTBGMzI0MkY4QTI1RTIxQkU1MEU5NTgKKzoxMDVEQzAwMDUwQTVCRjk3NkNGQzlFMzMwRDgyQ0U0MTI3RDBGREExMUMKKzoxMDVERDAwMDZFNDBGOTlBMDI3QzIwRDFCREQ4MTk5QzY3OTcyNEY4QUYKKzoxMDVERTAwMDI1OTIxRkEwNDQzOUFFRjI4M0NBMDcyQUJEQTcwMTlGOUUKKzoxMDVERjAwMDQ5MDlDMTczRkMyODgyNUVENUYyQjQ5NUUzQTUzQjM5MEQKKzoxMDVFMDAwMEU2MDFDMjZCQTdDRTAyQTIxMEZBMDMyMjEzMTBCRUIzQTIKKzoxMDVFMTAwMEMwMEVFMzRBMUUzNTM3MEMyN0JGRTJGRUQ5N0I1MEU1QTIKKzoxMDVFMjAwMEMxMDhGNzcwRERGOUY1QkNGQ0JFRTcyN0Y5ODY3MjFCRTcKKzoxMDVFMzAwMEU5NzYxODc5RjVCNTM1ODFGNkEzRDI2RDkyQ0RGRTVGN0UKKzoxMDVFNDAwMDQ4M0ZGRDkyNDkyQkM1NDE2OUUyNzQxMzc5RkVCNzBCQjcKKzoxMDVFNTAwMEY4Mzk1NEZBNzlDOUM2QjhCRUM0NzM0RUJDNUVERUE5MUYKKzoxMDVFNjAwMEU3MTkzQUU3NzI0NjcyMkYzMzhBRDc0N0UyNTczRDU3MTAKKzoxMDVFNzAwMDg4REM4QkIxMTUwNkVGOTMzMTZFMEY4QzA1N0I2MDYzNjgKKzoxMDVFODAwMDQ2OTA3RTAzNDk1RjJFNDNGREI1Q0RBQUQwRkVGRUEwMEQKKzoxMDVFOTAwMDkxMDlGRkFBM0UxOUFBOTdFNDI1RjM3M0MyRjQwQ0IzNDMKKzoxMDVFQTAwMDAwMUUwNzBFMUI4OEJGRkQxQTU2RjUwQThDNkIyNTU1ODAKKzoxMDVFQjAwMDExM0NGNzZEMzYyRTBGMDYxNzRDRDJBQzgyN0QwNUZFRDUKKzoxMDVFQzAwMDZFNzZBM0RFMEE4QzE5MzgyQkMxRjhDMDU2MzA0MEM4NTQKKzoxMDVFRDAwMDdFQjBGRjU4NEE2NkVDN0VEMDI5QTg5N0FFODA5QzYzQkUKKzoxMDVFRTAwMDU5OENDOURCM0UzRjJCQzFCRTk3NkQ5MzE5REEzNTAxNDIKKzoxMDVFRjAwMDEwREIzMjhDNzMzRDE5RTMzMUYyNzE4Q0MxQjgzQTMxNDkKKzoxMDVGMDAwMEFFNzlFQkE3NzcyMTdEOUQwN0ZBNDRGQkU2MjM1M0ZEOEQKKzoxMDVGMTAwMDA0MDY3NkNGRUM2RDNBQkFDNzY1MzE3QTBGRDYxRkRCMkYKKzoxMDVGMjAwMEZBQzQ4OTQ1MDA5RjZGOTcxNEI0Mzc0QTY1MzNCNUQ3RDMKKzoxMDVGMzAwMDNDMkY3QjcwOUQzQTczRTk0NTA5RUM5QzQwN0JDQjUzMjkKKzoxMDVGNDAwMDUxNTBFRkRDQUI2MzI2MTg1N0RBMkU1OUZEMzBGRjcyNDMKKzoxMDVGNTAwMDZGMENERTBDNUJCNjQ1Rjc3RTVGNzY1MDZFREUyNkY0ODYKKzoxMDVGNjAwMDU4RDUyRUM5MDMxNEMzQUFCNjg3QjdEN0VDMEE4N0VCNTYKKzoxMDVGNzAwMDk4MzYwOEMzRkNCMzZDMzE4OTY0RkY0RDY2MzZCNEZGQjQKKzoxMDVGODAwMEQ4OTYwNDU0NTY0MzcyM0I5MkFFNTA2RDIzN0VFQzhERUUKKzoxMDVGOTAwMDVDMUUzM0Y2NTlGMjFENDA5N0YyRTFDRkQzREYzNzczMjEKKzoxMDVGQTAwMDc4QkU4MENGMDFGQ0M5RTdGQ0ZFRDU3QkFCMTczMkZGODIKKzoxMDVGQjAwMDkzRDFBQ0MwMEJFN0FDM0Y2Q0IyQjhFMTYwRjUxRDMyRDkKKzoxMDVGQzAwMDlEMjNFMDhEQTM3Qjc2NDVGNURENEU3QzdBNDhCNkEwMTcKKzoxMDVGRDAwMDFEQjZDMTI3QkJCMURERDk2OURBQTk4MTczRDYxRjkwN0YKKzoxMDVGRTAwMDE4REE5RjRFOUZDMUMzRUZFOUVBMzI2QzVGRUUzMzU5NzYKKzoxMDVGRjAwMDE0NkMzRjY0NjAzMjhDMEYwMERFNEM4OEM3NzE3RDg0NjYKKzoxMDYwMDAwMDdGQzQyQkRBQTdGMEY3NjNBOTI4ODg3RjE5RjE5NTE4QzgKKzoxMDYwMTAwMEM0NTdGMzU2QkU5RkYzN0IzOTdFNEFFNUQ1NUFDMjU3MjMKKzoxMDYwMjAwMDhCQzQ1MjQyRjBGQzY3Q0Q4QjQzRjhDMjdFQjNCN0ZEMDAKKzoxMDYwMzAwMEI1MEJGMUJDMENGNjY3NTAxMEVGMzJFMUY5M0NFMDA3MEMKKzoxMDYwNDAwMEU3RDUxRkZFMjhCRENGMUNDNEI3MENGOEZFQUQzQTFFMjUKKzoxMDYwNTAwMEZBMkZCRjAxQkVBQjk4N0IxRERBNzNERjE3Q0Y2OUM4N0IKKzoxMDYwNjAwMEZGNDk2NEY3OUVGRjAzREFCRDMxNjA4RjIzRTkwOEZCMjcKKzoxMDYwNzAwMDM4QTlCNkY3NzgyMjJDNTg5MTcwRDlCOTAyRUEyN0E1MjkKKzoxMDYwODAwMEJFQzIzMkMxNEU5MEUyMUQ4RjIyNUY5RjlERjM5NzQ3QTMKKzoxMDYwOTAwMDEwMUQzRDczNUZCNDIxNUQzNEVCRkE1QTlGODYwQTc3NzkKKzoxMDYwQTAwMDdDQjQxNTc5QjAzRjYzRkVGNkQ3NjA5REUyODQyRkQzQjAKKzoxMDYwQjAwMEY3MjNCRkZDQzk2MDQxNzI3QTQyRjAyM0ZFMTkwMUZGNDkKKzoxMDYwQzAwMDRFQzZFRjFCRjA3ODBFQ0ZFRkVDMzRGODBENzA4RkFDQUUKKzoxMDYwRDAwMEJEQzQzRTY0MEY0QzQwN0RFQ0Q1QTM5QzJBRDEwRjU0MjcKKzoxMDYwRTAwMEFDNDA3QjFDRTZDMzc1MjQyMDIzRTRFQkRBQ0UzRjlGNTMKKzoxMDYwRjAwMDk2NjA5Q0E0MjRCMkM1MDgxQkNEN0UxOUU3NjlEMzVEQzgKKzoxMDYxMDAwMDE5M0EzN0NDMjM1OUZFNDJGRERBNkMxM0U4RkMxMzUzREQKKzoxMDYxMTAwMDdFQTRBMEZDNjk1RUM4MUM1MTEzQkY0RENFMzM5MkYzMjAKKzoxMDYxMjAwMENGMEE3RjY1NDRGQjZGMDQ3OUFGREE3RENDM0QzNjFFMjQKKzoxMDYxMzAwMEY5MEJFRjgyRjMwRjk3M0JDQkE3MzNGMTI3Rjg0MkMwNUYKKzoxMDYxNDAwMDU1NkJEQ0IxNDZFOEJDRkM2NjZCMkE5RUZGNjNBNEIzQ0EKKzoxMDYxNTAwMDU4QTRCRjUzREE1MUIwQUZCQTU2ODlGMDU2OEZGNDgzQzIKKzoxMDYxNjAwMEZFMTVFQTM3QThFRkY3MEEzOUYyN0M3N0YxQTg0NDJDM0MKKzoxMDYxNzAwMDI1MkI3MDJBQUJFRTk0QUQ3RTY4QUZGNjcxN0FCQThFOUQKKzoxMDYxODAwMDZFODRGQ0E4NjlFM0YyRTMzQTNBNkEwMzM4QzQ0RUFCODIKKzoxMDYxOTAwMDQ3QkE1MjYxQzBGN0M5QTBGQzk4N0EwREY2RkJGMjM0RjkKKzoxMDYxQTAwMDI2RjQ5NTVCRDA1QjRFNUMxRkQwQ0IyMDUzRTIyQzM5OUMKKzoxMDYxQjAwMDIxN0E0QkUyRjY5NjJBNTc2RURBMEFBMjNFNjREREM5Q0UKKzoxMDYxQzAwMDFFMjNEMzg2QUM3QkYzNUU0QjE4M0NENTlCMUFENkZGQkYKKzoxMDYxRDAwMDA3M0UyNUFDRERFNkNGMEU2QkNGM0Y2MTBEODMwQkJCRDkKKzoxMDYxRTAwMEE3ODdGNTlGNzZEQTFFMDZERkQyNTcxNkQ2RkY4NzE3RTgKKzoxMDYxRjAwMENBQzNFMEMxMUMzOENGMzA3NkM3OTAxRTRBOTVDMkZBOTgKKzoxMDYyMDAwMENGNTE0QzYxRjNDRkNCOEUwRjgzMDdDREUyN0U4NDFEM0YKKzoxMDYyMTAwMEE4REFBNzVGRDhCODFEMTQ1OUFBRjdGQjEzNkJGODNBOTAKKzoxMDYyMjAwMEFBNUZGQ0QzRTlFMUVCQ0RCNzg3QUZGNzVERjFCMjFCMTUKKzoxMDYyMzAwMEVDN0UyREQ4RjU3QjQxM0Y2MkY5MDJEOEZGNUFCMEVCRDYKKzoxMDYyNDAwMERCQzBGRTQ3RjgyNUIwRkZCMUY0ODJGRDhGRjVBRjgwQ0IKKzoxMDYyNTAwMEZEOEY3MDNCRDhGRjA4MUYwNDdGMDU2MTVGNTMxOTk1QzAKKzoxMDYyNjAwMDg3OUFDQUE5RkU0NkY3RDcyNUQ2M0QyMUQ2M0QyOUQ2MUQKKzoxMDYyNzAwMEZENDdFRjQ5MkQ5RDY1OTMzNDVGMDA5RkNFNENCOEE4MzQKKzoxMDYyODAwMDQ3Mzk2QzZGRUMyQkM1MzhDMEMwNUIzMkRCODEwQ0UyNDgKKzoxMDYyOTAwMEYwOUM2ODRBNDQ3RDM0OEFBMUREQzJDQTA3REVDNjM4NTQKKzoxMDYyQTAwMDQ1RkQ4MTg5OTY4RDBBRUFBMUZGN0MwN0RCMDNFREIyRUIKKzoxMDYyQjAwMDgyRjJGQ0E4RUY4MzU4OUNFN0NBMTdDMDg3RjkzOEVFMzIKKzoxMDYyQzAwMDgzNThGNDhGRUJCRTY0MDQ2Rjg0NzYwNUUwMzlGQjQxOUMKKzoxMDYyRDAwMDMwOTAzRDAzNzIwREZCNjdBQUIwNDdDRkEwMkM2RkRCNTcKKzoxMDYyRTAwMEFGNDc3Q0Q0RUVERDRGRUQ2Rjc5NzVFMUVEN0I1QkMyOUUKKzoxMDYyRjAwMERBMkREODFGQ0E1QUFEODdGQ0ZCNEIzRTc1M0UzRkY1RTEKKzoxMDYzMDAwMEFGQ0I5NEVDNjgxNzVGREFGQjlGQzlDQkIwNUZEQkJCMDgKKzoxMDYzMTAwMEM5Rjc3RENCN0Q3RjcyRjBDNTFDOTRFQjRFRDBDMzdFNTgKKzoxMDYzMjAwMDczNzAxRTY3ODc0RUMwN0NERjc1OTlGQjRCMTM1MDExNEQKKzoxMDYzMzAwMEI0NDk2QzEyMTQ1N0Q4MjZCNjBBRTQ1REFEQUZCNTBFNTkKKzoxMDYzNDAwMEU1NTA2REY2MjIxRENCMjA3OTI0RTIwRDIwNkREMTVFNDMKKzoxMDYzNTAwMDQyRTcxRUVFRUY4QUY3RDNEOEZCNjBERTM3QkNDNzZGOEIKKzoxMDYzNjAwMEI3MjNGRTNBOEZDNUUyQkFGREVENzI5ODNGNzM3NzFFRjAKKzoxMDYzNzAwMEI3NUJFRkNFRDMxM0RFQUVCNDFGOEI1NUEwN0Q4M0Y3OTIKKzoxMDYzODAwMDE4QkY2RkFEOUZDRTdENTRDMEZENTBEMjNERkI2NDNBMjcKKzoxMDYzOTAwMDc3RjUxNzFBQkE3Rjc1QkVGQkYzNjQ5QTY3OEU2RjUyNTIKKzoxMDYzQTAwMDBDOUVBQkM3Q0JENzczRTUyOUI0Q0U5Q0NDQTU5NUI4RDIKKzoxMDYzQjAwMEZGOTNBOTBCMEI2NUIyRjM0MDMwQTM1QzlEMzJBRjE1ODAKKzoxMDYzQzAwMEUzMDNCNTVFRDkzRTlDQkZCNTQ2Q0NEQkE1RTM3NEY4Q0MKKzoxMDYzRDAwMDU2RTZBQjVENjM4MDNFNEU5NjhEQjI5MUNDMTdGRDdFNDYKKzoxMDYzRTAwMDkzQzdFREYxNTJCRDIzMTNGNTQyOEY1OTg5NDEzQTdFOEYKKzoxMDYzRjAwMEI4NkM2MjBDRTJGNTI4OTY1ODVGQjY1M0VGODBCMkE2RUYKKzoxMDY0MDAwMDlEQUZENzYzRTk4RTQ1N0FFQjY5Q0Y5N0QxNkU1MUU3OUYKKzoxMDY0MTAwMDVCODlFQjE2ODZEMEY1MTBERURDODRBNzJBNEY4QjE5M0EKKzoxMDY0MjAwMEU3MDlFMjhGRDdCQkYyQjgxRDdFRDJGM0VFNUQ2OEE3MTUKKzoxMDY0MzAwMEY0NjQ0NzVCMTEyRjVEN0E0NkZFNkQyREUwMTVGNTQxNDIKKzoxMDY0NDAwMDRGNjc1QTBCREU4M0JBOUU0QkUwQTMzRjVCNDM3ODBENDgKKzoxMDY0NTAwMEY4NzRBMkRGQTI1NjE2RDY0RkM3RjFCNTJCN0MzRjE2QjMKKzoxMDY0NjAwMENGQjk3RjVCODQ3QUU5NTlCMEFCQTFCQTRFRDc5MDhDOTMKKzoxMDY0NzAwMEU3RkY3ODdCRjhGRUFBQzQzREQ3RTlGQ0M5QzkyMUY0M0YKKzoxMDY0ODAwMDVBRDczMUM0MkY2NkEyRUYwRTk1M0YxNEMyQTc4QUM3MTAKKzoxMDY0OTAwMDlFNkM2RUI3RjVBNDFBM0NFODJGRDZFRDZGMjVCQUJFRjgKKzoxMDY0QTAwMDNFQkVEMzlEODE3NjdFREFBRjhEMTQzN0JDOTEzRkFCNzMKKzoxMDY0QjAwMERBMDEyMTdFMEY0MzNGNEU1NzM2QjE1MDMzMjFBOEVGMEEKKzoxMDY0QzAwMEFGRDlFQzJGRTYxNUEyM0Y1NDRFRkU1RTBGMUI1ODg2NDcKKzoxMDY0RDAwMENBREY4OTc2NzAxQ0NBRERCRjNEODVFQjBFQjY4M0JENzEKKzoxMDY0RTAwMDA3RUIzQThEQkVCOTFGODI5RDM1NjgwNTQ2ODE3RDBGNDkKKzoxMDY0RjAwMDZFRDc3OTg0N0Y2MjQ2RkI3NDk5QjA0RjNGNTYxQzQ1MzYKKzoxMDY1MDAwMDMyRTg1N0U3MUEwRDlEQUYyRTI3OEFEQkI1NDI0RTdFNDMKKzoxMDY1MTAwMEIyM0ZFM0E3NDhBRjc1Mjc2NDhCMTFFRDUwRjA1QjA4REQKKzoxMDY1MjAwMDZFRTM3NjQxQkQzN0UzREY2N0EwQkREREE2MjMzQjQwQzgKKzoxMDY1MzAwMEI1M0I5Q0MyRUUzODJGRUNEOUYzNkIwNkY0NjRBRjFFNkEKKzoxMDY1NDAwMDk2RDgxM0IwOEYyQURGRTZBRTM0Njg3N0U2Q0MyNTdCODkKKzoxMDY1NTAwMEQ1MjlCNzUxRkM3MUY5RDY3MEJCQTBEQTEzMEVEN0VFNkUKKzoxMDY1NjAwMDBEODc5RDExNzY4M0VBQjdGNUU0MEREOTBGOTNEMUZGMUUKKzoxMDY1NzAwMDI4OTE2N0E0MjAxRjdDMkNGMEE5RkEyMzJCQTc1QTUzM0IKKzoxMDY1ODAwMDkwREYzNzY4OTVCOTZBM0MwMEVGQzk3NUY4RDU2QURDQzkKKzoxMDY1OTAwMEFGQTcyRUNBNEE3RUMxQUE0Mzc0OUZGRDlGNzFCRkEzQjUKKzoxMDY1QTAwMDNGOTU3MUZCODhGMTdCRURGNzcxRkE3NkU5MjRFRTY3OTAKKzoxMDY1QjAwMDAwQjlEMjdDNDZDOUIzMDY5QUZBREQ4M0IxMjQ5NzE4OTQKKzoxMDY1QzAwMDJCNDM3RTY4NUNDOEZENDgzQkM2NUNBMURDOTcyN0UyOTQKKzoxMDY1RDAwMDQ1MTFGQUYyNTY2RDlGMUMxRjIyMUYzRUNCOUI0MEZCQkMKKzoxMDY1RTAwMDJGRDYzMzA3RUFBOTk1MzE1NkQyNUJFMzhERENERTJFMzgKKzoxMDY1RjAwMDU5RURCNTIxMUQ4QzA3RkZEODEwMTJDRjFFNkYxRTkwQ0MKKzoxMDY2MDAwMEIwREZBRTg3NzhGQzVDRjVFRkU3NkIyREJBRjgxMEJEMTQKKzoxMDY2MTAwMDA3OTIyNzZDN0U5MDI0N0NGQzhERTZCN0MwRkNFNkUwRjgKKzoxMDY2MjAwMEZDNzBERjcxNzhERjlGMTY1ODQ5MUZBN0NGNjdBQzlCQkUKKzoxMDY2MzAwMEY4QjE4MUY4NTEzRENGMTVBMEIzNjJBMDMzOEM5OTIwRjkKKzoxMDY2NDAwMERFRUFCNjFGQTEzOEIwOTM3NTkzM0Y1MjFBQ0JGNzUxQ0IKKzoxMDY2NTAwMDhBRkI0MTM4OEE5Nzk2N0MyRTM3Q0FGM0Y5QkQzNTBCRjEKKzoxMDY2NjAwMDU4OTU1QjZGRTVEQkUzRjNBMURDOUJFRjQ4Q0FBNzdBQTMKKzoxMDY2NzAwMDBCRDFFNTRBNDEyQjYwQTdBNEY0MEQyMzc3MUJGRkMyODEKKzoxMDY2ODAwMEZEQUE0RjgxMEY5MENGRUY2OTkwOTRDQzMwM0I4OEQzMTcKKzoxMDY2OTAwMEI3OEI1N0IxQ0JDQ0RCM0IwM0VGQzE2REVGQ0U0RTQ2OTIKKzoxMDY2QTAwMDNGOEFGM0Q1OTI1NTI2MjUzMzg0NEU1RDQ4RTc3MDJGRjcKKzoxMDY2QjAwMDU1OTZFQTFGQTNEREVENTg5NUFDNjBCQ0RGODU3NDNGQUQKKzoxMDY2QzAwMDAxQUY5MUQzNzUyMkZDNDNGRkUyM0EzQUY3ODZDM0YwNUIKKzoxMDY2RDAwMEI3MURFOUFCOUUxOUFDQTg0NzVDQkVDODc2QUIxNkUzMDQKKzoxMDY2RTAwMDNBRjlGOUMwMDczNzA3RjkyMDVERDA2NThCNDNGMkEwNkUKKzoxMDY2RjAwMERDNkZGOTRBQ0JFMzU4OEIyNThBNUJERDA5OTU0ODk3MTcKKzoxMDY3MDAwMEY0ODdGREFBNjY3QTcwRkUzQjAxNDQ3Rjg4NkQ0OTI0QjgKKzoxMDY3MTAwMEJFQTE0NjkwMjMzRjE3RTdCRDUzRUIzRjgyN0M3QzVDRDQKKzoxMDY3MjAwMEU3Q0RDMDc4Q0E3MTI3Q0ZFQjJDNjQ2MDcwODA3QzU5QUMKKzoxMDY3MzAwMENDQkFBOUVDOERBRTNGRTBBN0M5RERFM0QwNkY3RUNGMjgKKzoxMDY3NDAwMDYxQTAzODRFQ0JEQTFEMzEyODRGNzNEOTVBQ0JGOTZDODIKKzoxMDY3NTAwMDU0RUU2Q0VGQjVGQzkxRUQwQTIwMjQ3NjVFQzUwQkM1QjYKKzoxMDY3NjAwMDg1MzYxMUZFNTVCQ0VFQ0RCN0NGNDdGQzhGMzRCRUY2NTMKKzoxMDY3NzAwMEFGMDc2RTQ3OTdBMkY2ODE1NjdEMEEyNzlCRUVFQ0EyRTMKKzoxMDY3ODAwMDIwRkU1Q0NDOUI4REZCNTVGMTM1ODQzRkQ4RjM1OEI4ODcKKzoxMDY3OTAwMDg3MDU2Q0EwMDhGRDFBMTU2RjQ2RjgzNzFDREVENEZCODAKKzoxMDY3QTAwMDRDRDcwREZDMENBRjBDRjQxMkM5OTc0ODdDQUFGNzVCRDAKKzoxMDY3QjAwMENGMUE3NDNDQ0VENUYwQ0U0MkU4N0ZGNzVBOEQ4MkY2RTAKKzoxMDY3QzAwMEUxNzVGOEJEMDExRUZDMjZERUU0OEY5MUM4REYxQzA5Q0YKKzoxMDY3RDAwMDJGMkEzRTU0RkM5QzhFRTdFMzRFREYyMzUzOUNFRUZGQjIKKzoxMDY3RTAwMDM1NUVERUNBNzczQ0ZBNkRGQzE4Qzk3RjIzRjFEQjkyNzcKKzoxMDY3RjAwMDU1MTE3QzE5QzE3RjJBQkUxQ0FCNjI4OUNGNTQzQ0Q2OEYKKzoxMDY4MDAwMDI5OENGQ0Q2QkFDRTE4QUI4NzA1RjE2Nzg2N0Y4ODNGMDYKKzoxMDY4MTAwMENDNTM1MDNDQTY1RDYyQ0Y0OERGODUwRkZCMjhBRjExRkIKKzoxMDY4MjAwMDg5MUZBMDBEM0JDQUY1OUQxMUZDQTdFMjZEMjRGOUEzQjkKKzoxMDY4MzAwMENBQUYzM0NDN0ZEQzIyNTE3RTgwRjNFN0FGMEMxRUNDOTUKKzoxMDY4NDAwMDJGQUFGOTAxMzUwRjcwNENDOEJGQzhGMjBDRDgxRDk4OUIKKzoxMDY4NTAwMDc3RDk5OEREOTM4NEY2NUFBRjVFOUQ4N0U3MUZDRkFDNUEKKzoxMDY4NjAwMEU5MUVCNzAyQzY5Rjk5QzlDQjVFQjREMzQyNjA3QjE0QzAKKzoxMDY4NzAwMDhGQzM5RDE5NkQ3MEUzQkQ5RDkxMjZDRjQyM0Q3RTQ2MkQKKzoxMDY4ODAwMEZBRjVFRDFDNEVEMTJCMDgyRjRDOTk2NTAxQjg1N0E3OEUKKzoxMDY4OTAwMEM2RUQxRTE2NzJEODQzRTU5OTg1RDM4QUE5OUZDNERFM0EKKzoxMDY4QTAwMEM0RkI1MDI0NTY0RUVCNDg1MjQyMTlFQ0U3Q0MwMzkzRkMKKzoxMDY4QjAwMEYyOUE1OUYwRkNBRkU0NzM3QkQ2MkJFNEY5NTAxQ0ZCNDEKKzoxMDY4QzAwMDM3MTJDNUIxOTc4MDBBQjA2MEJDN0RENkQzNjUxM0EwREUKKzoxMDY4RDAwMEZFRUM4MzEzNkQ5NEZGNkIwQzVGMUZGNTY4MDZDNTA3MTQKKzoxMDY4RTAwMDM3RDM3Q0I3N0UzMUEwNUI5QTEzRENENzkwRkUyQkJFRUEKKzoxMDY4RjAwMENBRUIyQjI3OTEzRjUxMjU3MDY4NEY5OENDRkQ1OENGOUMKKzoxMDY5MDAwMEM0MzhENDQ3QUE3RTFBM0NGMUFBMzkzNDdFNzkxMUY0RUUKKzoxMDY5MTAwMDE3RDM4N0MwOTMxRjRGMEZENTZGNDc3NkZGM0UwQkU3MDYKKzoxMDY5MjAwMEE5RDJCQjczQUQ1MDdGQTFFNTBGRTk2ODA3NTRFRDdFOTYKKzoxMDY5MzAwMDM0OEJFQ0QyREQxQkIyRDBCRkE4REFGMUZCMkMzQkMxMEIKKzoxMDY5NDAwMEQxMEVGMjZGQjRGQ0RDOTdGN0REQjI3MzYzODgxREZDRTcKKzoxMDY5NTAwMDYwMjFGNzBCMTYxQjhGOTRBMDdEM0FGN0U2NEYxRUMxRkUKKzoxMDY5NjAwMDc4RjhBNDA3MjU4QThCRERDM0JBMUY0MUJENTk5MUNEQTQKKzoxMDY5NzAwMEY5ODg2RDMxOTI1Qzg3RjkyOEVGRDgzQUY5MjdCQjUwMzYKKzoxMDY5ODAwMDlFOUZDQ0ZFNDA1NzA5RkQ0QzA1NUFCQThGMEFFNjc5MDYKKzoxMDY5OTAwMDJDMDVFMzYxRUIyNThBODcwNUZCOEZBMzNDRTZEMkI1ODYKKzoxMDY5QTAwMDkyM0UzNTExRjU2MUJDNEQ1NjcwNUMzQ0VERTNERUY1NzEKKzoxMDY5QjAwMEI2MkVBQ0FGNThDREVCRTcxQTNDRUQzRDM4Q0ZEMzdBQ0QKKzoxMDY5QzAwMDZCQUI4MjEzOTU0RjI4MEZDOTBCOUIwQUI4REZCNUU0NTgKKzoxMDY5RDAwMDMxODlFQzcxNzU5RDQ5NEYyNUI3ODQ5RUQzNTQyMEY0QkQKKzoxMDY5RTAwMEY5OEM2RUUyRkY5RjBBQkNGQzc4RjVCQjZGQTYyQTk4NzMKKzoxMDY5RjAwMDRGNzJDNDE1NDBGQjNCNEY5RUNGNDRGOTU1OUM3MDMxRkMKKzoxMDZBMDAwMDA3RTk3QzkyREVGMTRDMzU5RTdCODc4MUUyODcwNUI5RjAKKzoxMDZBMTAwMDY5NzIwQUY0Q0ZGQkU1Q0MyN0IwNUNCMjdBRTkzM0Q1RDIKKzoxMDZBMjAwMDE4MDdERDZBMjQzRjRBREQ1RkEzQTQ2OEQwREYzQ0Q2QTcKKzoxMDZBMzAwMEYyOEI3QkYxREUyRTNDNjkyNDNCQkFCMUU1QTYxNDM2MUQKKzoxMDZBNDAwMDBDOUZBQUU1MUVDMEJGOTJDNUQ4RjM0RDQ2MkE1RjZDQzUKKzoxMDZBNTAwMEIyMzAwNThFQjhBRjI5OTVFMDk3OUIxNDJBRDkwMjRFMjMKKzoxMDZBNjAwMDVGOERDMjVGMUQ2OUJFN0NGMEY3MTU5MDU3MDVFQjYxMjUKKzoxMDZBNzAwMDNFQjAzNzZEMjZGQjE0M0NFN0E0MjlDRTFEMUJDNEI5REMKKzoxMDZBODAwMDI2QzE3ODlCM0I2MzM2REU0M0MxODYxNTVENjg4QTI2NDYKKzoxMDZBOTAwMDE3RjBGQ0UyREIzREVCRDNDOThFNUU3REVFQjk2QTY4OTAKKzoxMDZBQTAwMDVGNUE1MDlFNUYwMEY3NkREQzdFOTVGQ0ZDNjMxRDhGODYKKzoxMDZBQjAwMDU2NTA1QzdGODc4MTlGNEY5Q0ZCQzI5MzU5MjlDRjYwQzIKKzoxMDZBQzAwMERDRjUyRDFERjlERkFFRURFNzlFREIwMEU1N0Q4RkFEM0EKKzoxMDZBRDAwMEQwODdEMkZCNzczREFGNERFQ0U3NDY3QzM1RDIzRDdDOEQKKzoxMDZBRTAwMDdGQkVGQTdEM0FGMUNGMEVFMEFCOUM3RjlDQUY1Q0FCRjIKKzoxMDZBRjAwMEQ3RDBGRDNENUE1MDdFMzdERUZCMDU5RDNCMURGOUU5QTEKKzoxMDZCMDAwMEMyRTQxRjExOURCQjBGNEI3NEZGQUExQzU3QzcyRjEwNjcKKzoxMDZCMTAwMEU3QURENTc4MUYyMzdCNTBDOEYxQ0ZDMUYzQzNGQjNENTAKKzoxMDZCMjAwMEQyRjE3MTE2REFDMzlGRkIxNjdFRUJCOTBGMzY2MTA2MDAKKzoxMDZCMzAwMDFERTM1QTQ2MkEyM0RCOEJGNDhFODk1NjM4NUY5MTg2RjMKKzoxMDZCNDAwMERCQzE5MUVEMEYxN0E4NzE3MTlFNkZDNzNGOEMwQkQ3RkEKKzoxMDZCNTAwMDA5RkRFOTg0OERDNTI1QTBGRTkzRkM1MUI5OThFN0I4REQKKzoxMDZCNjAwMEVEQTIxNkZEMkZGMEVCREUwRkI3MkZEOUZCMjE3QTdDQkIKKzoxMDZCNzAwMEE0RkRERUE4QUNDNzc5QjQ0MUI5M0JFREI0ODZGOTQzQjYKKzoxMDZCODAwMEY0RjYyRDdENTFDQzFGQjJFRTkwREYwMTc1N0FDQ0IzQjcKKzoxMDZCOTAwMDc0OEMyNkI5ODA3OEMzQkM0Q0EwNjNGMjBFODQyRkVBQjMKKzoxMDZCQTAwMDM5MUUwMzA3QzFCRkUyNzExNTI2MTcwNUNGNzlCMUUzN0UKKzoxMDZCQjAwMDcyMkVDQUQ5QzhGM0Q2MUZCQTRDRjQ1MUU3N0JGNEFBOTcKKzoxMDZCQzAwMDQ0RTc5RjczNTE5QjdCRTNGMzFGRDk3RDM5MTdGMTc3MUUKKzoxMDZCRDAwMDUxRDc1Nzg0N0U1NDQwREY5NzhCNzhBODdGOURDQkYzQTUKKzoxMDZCRTAwMEVGN0IwRjZBN0RGNTdBM0Q4RkVGNDkxNkYyMDc0QkU0OTQKKzoxMDZCRjAwMDJCRTRDNzA3NEU3MDNGQkVCRTYzMjdDOUQzQzE0RTFFRUMKKzoxMDZDMDAwMDRGNzE2OUJBNEI1MzMwRkVEMDcwQUUwQkU1RDk2MDJBOTQKKzoxMDZDMTAwMEY3QUY2MDdFM0JERURCOEM4OTQyMEY2QTA3RDJFNzgzRTkKKzoxMDZDMjAwMDVDM0IyQUYyQjVBQTVGNzcwMUY5NTc4RkYzNzhFQkU4NUUKKzoxMDZDMzAwMDNENTI2RTM0NDNCQkUyMTJGMjMzRDQ1N0FDQ0E1ODg3OEMKKzoxMDZDNDAwMDc0N0VDMTkzODQ5MTIwRjY3NkVFRkZENDUzRkNFRDhERDMKKzoxMDZDNTAwMDY4OEI0Qzc2MkJENDg2RTA2RkU4MUMxRTk5M0Y5QzYxQjQKKzoxMDZDNjAwMEFBOUYxRUNERUMyMUZENUM3QUU1QTdFNDFGOUZFNDc5ODUKKzoxMDZDNzAwMDMyRDcxNENFNEZFQzEwRTcyN0U3REEyM0ZBRDQ5MEY5OTUKKzoxMDZDODAwMDVFNTJFNTg3QjAxRkU3QkVGMTNGQzQ5N0E3NkNGNjUzOEQKKzoxMDZDOTAwMDI4Q0ZBMjUxMTZFMjdDQTk3MTFFNDkxMkZEOEE4Mjc5ODEKKzoxMDZDQTAwMDQwNzNBN0YwQzdDQjY0NkE3N0Y5NjQzNjFBQzdBNEM2RTUKKzoxMDZDQjAwMDUwQkVCRThDNkREMkEyQkQzQjk3Nzk2N0YwNzczMjdEMTYKKzoxMDZDQzAwMEZGRjY0MzY4OUZGNzg2OUM4RkVGQjFDMDdFQTZGQzcxRUMKKzoxMDZDRDAwMDY5OTQyM0IzMTFFRDIzOEQyNEVFRDU1QjMwM0Y1NDlGOEYKKzoxMDZDRTAwMDE1NzI3QjZCODYyQzkxMUUxQjE4MUQ0RDc2Q0E5QzA1NTgKKzoxMDZDRjAwMENFQzVCODVGQjU1Rjk5OTZFQjMzOTg4N0VDMkNFNjE5NTMKKzoxMDZEMDAwMEM4QzU3QzI2RjMwRkU0NjI5RTUzRUQ3N0Q3MUJEMTBERTcKKzoxMDZEMTAwMEE0MTc5OUI3RTBBRTkwNzVDNjE0NzJCREY5MjlFNjlGMjUKKzoxMDZEMjAwMDQxOUVCODQ0RkVCMzQ0RkVFQTI5RjRBMzFBMEZGMzNDOTMKKzoxMDZEMzAwMDYxQUYyNkUzM0Q3Q0FGRTU4NjdCNDZCQzVFMDZCQ0RBRjAKKzoxMDZENDAwMDUxRkYzODk4REQ4RUZDMzMzNUM5ODNGQ0UzREEyNzMxRjcKKzoxMDZENTAwMDdDQjc1NkRGNjFEODgxNzE5RDdBNUQ1RjMyRDJGMzA2RDAKKzoxMDZENjAwMERGNUZGNTQ4Q0ZBRTAzRUZFQTk1QTkzODlFQzc4MUMwMzMKKzoxMDZENzAwMDVFRDdFMEZEQkE4NEZFNzJGQTZFN0EwRkUzNkVDRTEzMzAKKzoxMDZEODAwMDVDOEIzQUI1RUY5MjVGNUZEQkJFOUZGQ0Y3M0FFNjI3N0MKKzoxMDZEOTAwMEZGQkRBRTJEOUM1RTA2NTM3OTlDM0Q5MjNGQzYxNDJBRTIKKzoxMDZEQTAwMDYxN0MzMTY3MkJFNzhCQkI2NEQ2ODA3MjhFODlCOEU5MzIKKzoxMDZEQjAwMDlDRDQxNEIyNDc4MkUzODQ5RDI4NUY3RTA0RUQ5N0ZFNDUKKzoxMDZEQzAwMDA5OTI1NTgyQTlGQUEzREM2QkQxMkU3MjY3NzE3QkE2NUEKKzoxMDZERDAwMEZGNEYyRjE2MkMyM0I5RTIyOUY4MTlCRThCMTFGNkVFQkUKKzoxMDZERTAwMDlDRjU5QkI1NzJDODdFRTY3NEYyMzg2MTdGMTRBQjNBQUQKKzoxMDZERjAwMDQ4Rjg3NjhDNDUzQ0E0RTc5NThGMkRFNEVGNjQ3MkU5NjIKKzoxMDZFMDAwMDlEOEY4NkM3MzUyM0NGRjFBQzg4RTM5Q0M0Mzg0RjRFQTUKKzoxMDZFMTAwMDcwREZGM0QyRDJCODFDNjMxRUEyOUYyRTBENUY1RjdEODAKKzoxMDZFMjAwMEY3QTI4RTVGMjFFODY5QzgxRjkyNzg3QzZBMjRCOTgyMzQKKzoxMDZFMzAwMDc5OTQ0QTkxNDdBOTE0Nzk5NDRBOTE0N0E5MTQ3OTk0NkQKKzoxMDZFNDAwMDRBOTE0N0E5MTQ3OTk0NEE5MTQ3QTkxNDc5OTQ0QTkxOEYKKzoxMDZFNTAwMDQ3QTkxNDc5MTRBQzNGODk1QkE1Rjc3MDNCOUY0MTdBMzEKKzoxMDZFNjAwMEU4NDIxRTFCMTM4NDdCMTMyMkUwMzFFMUZEN0IxM0E0NTcKKzoxMDZFNzAwMDcwNzg4QzQ0RkQ4QjBCNzczRUUzQ0VDMTM4QTY0NUM4QjUKKzoxMDZFODAwMDI1MjUwNkVEQUYwQjI2MUU1RkVBODg3MUNDMkQ4NEZBMEUKKzoxMDZFOTAwMENBMzlDREJCRjk3QjQ0M0JCRDY3Mjk0RTU4QjgxOEY5QjgKKzoxMDZFQTAwMDZCMzBEMUMwNTAwRUI5MEIxREYzMTExRjI3NEVDQ0NFNDUKKzoxMDZFQjAwMERDNENGMkQxNjRDNTNDNzdFRkREMzdDNzUxNUNFRTJENzkKKzoxMDZFQzAwMDk5QzlCMEU0Q0NFQ0ZDQjUwNTAwQ0YzNDRCNDRCNzIwRjUKKzoxMDZFRDAwMDI3N0U1MEFFRkE5MzMwQ0ZFQzRFOUVDRjI4OTFFQjJBMEUKKzoxMDZFRTAwMDcxRkVDNkQxQTY3QzhBNkJFNTNCMTYxNTg2QzQwRjRBOTcKKzoxMDZFRjAwMEM3MkNDRjQ0M0JBODRCQTdCQzg3RjE1NEY3NUY3NDBDNTkKKzoxMDZGMDAwMEZEMjgzNUZFQTZGNkVCQ0Q5QjU5OERGQjlBOTMzRDcxN0UKKzoxMDZGMTAwMDZEMUVDQTFCNjAyRTk0NkY3NjNENkJDMzdERDkzNUQxMzMKKzoxMDZGMjAwMDUyMzNDOTJCNDU4QkZDNUYyREYwM0Q0QkUxRjZCMDVGMzIKKzoxMDZGMzAwMEFGNjgxM0QwNkY4RjlBOTlFODU2NzhCRUFBNTJFNEFCMjcKKzoxMDZGNDAwMDJBNDVCRTBBRjE3MzBBRTM2NjUwQkUwM0Y1NTg3NjQzM0MKKzoxMDZGNTAwMDNEOTY5MUVGQjk3NjE3OTRBRjI0QkE2NTAzRTlBMUVGOTYKKzoxMDZGNjAwMEMxRTYyMjVGNzEzOTkzOEVGNEZDODI4OEMzNjcxNzhBNjkKKzoxMDZGNzAwMDc3NjlGOUU1MEZGMjcxNUU5QUE3NTZDNERGMkVFQkMyNkUKKzoxMDZGODAwMEYzNzhFQUI4RTA3ODQ2RTUxRDNGRTBGMjk5QzVFOUY5MDMKKzoxMDZGOTAwMDdCRDdCMUNDOERFRjY5RUY3ODZEMzRDNTkzMDIxRThEMzAKKzoxMDZGQTAwMDVCMTcwNzMwRjAzOENBMkZGNjFBRjc2RjU5MkFFNzk3QTAKKzoxMDZGQjAwMDNCNUU0REExN0VDRDIyMEVFQTRDRThDRTRBNDBCRDJCNzEKKzoxMDZGQzAwMEY4NEE4NTBGN0VDM0RGRjkzOEYzMDA4NkYyNzU4OTlGOTIKKzoxMDZGRDAwMENGNzk0Nzc3NTYzQ0MwMDFDOUE0QzFGOEI4NzMwNzZGOTEKKzoxMDZGRTAwMEVGMTE3Q0U3OUMyMEU2MTNFNzYxNDY2RjNBRTJBM0ZGQ0UKKzoxMDZGRjAwMEYwNkJFOUY3MDJCQ0QxRUM1RkM2RTVCRDNGOEJFNDM0MzIKKzoxMDcwMDAwMEYzNjdFMTdCQTFDQjkyRjcyQ0JFQjdGREY1QzE3RjU5QTkKKzoxMDcwMTAwMDg0RUY2QjJGRUJCQ0NGMjFGQ0RCODMzMzM4MkNFRDNGQUYKKzoxMDcwMjAwMDZCMDk2RDRGRjJBNkUzN0JEQzVGMUZGQ0UxMjI3QzlGQzYKKzoxMDcwMzAwMDdCMzk2OUZGNzNGMUQ2MTA1OEY3Q0E1OTZDRDczRjNDQkEKKzoxMDcwNDAwMDYzNTEzMUY0OUY2N0YwOUM2ODQyQkE3OTk5RDM5NzY5OEMKKzoxMDcwNTAwMERGODFGMzc4M0ZCNTFEREM1RTlGQjVFRkMwOTU1NzUwREIKKzoxMDcwNjAwMDFGMUY4OEExN0NCREFGMzA4M0VFQkJCOTYzQ0Y2MzQ4REYKKzoxMDcwNzAwMDZGODFGRDNBRTI4MzhENkQ3RjdERUVCN0Q0Q0Y0MDYxQTUKKzoxMDcwODAwMDk0NzkwNjZGMDE4NjVDREM0NTdGQkIxQkY3MzUyRkRBRjAKKzoxMDcwOTAwMEZCMTlDMjlCOEI2RUEzN0RDRTFCQzVGOUY5QTlBMkI5QzIKKzoxMDcwQTAwMDhCOTAzRjAzMDdGNkZEMEFGOTZGNUUxQzE4QjJCODlGN0MKKzoxMDcwQjAwMDE3NEQ4NDlGOUE1NzI3MTc2MzFDMjAxMEQzNUQ4MUYzQzcKKzoxMDcwQzAwMEQ3QkY2MEIwMjI5REQ2QkM5QTMyMEJFMzAyQzcwQjc5QzIKKzoxMDcwRDAwMDdDQkE3QUNBQTY3NEQ0QUY5QTQzQ0ZFRkZFMkRDNjI5RTQKKzoxMDcwRTAwMDVGMzA1MTdFQzY5NUMwRURCQjFBQjlBNTY4MDVFMTZGNEEKKzoxMDcwRjAwMEU3NkU3QzM3MTI3OERFNDQ3OUQyNkE5ODAzRDdBQkRFMkMKKzoxMDcxMDAwMDNEODlFMkVBQUY3RkZENDEwNUUyQTE0NERFQkUxQkVCMTMKKzoxMDcxMTAwMDNGREI2NUQyRTAzREY0RThFRDcxM0Y0MjNFRUNEMTkxQkEKKzoxMDcxMjAwMDlGNTkyREUwRUFERTUxN0MzRkQxN0RBNTg0QkZDNDREM0YKKzoxMDcxMzAwMEU5QTg1RjZCNDZGREU2NzZEQ0Y3M0M3OUQzNzNFOEU3QjgKKzoxMDcxNDAwMEIwM0QwNkNBMTU1QzdDMUVFRTBEQzY1RDZDRDVEMTJCMUMKKzoxMDcxNTAwMEQ1QzBGMzMxNUFBNDk3Q0JEMkE2OEE2NzcwRkU1NkRFMEIKKzoxMDcxNjAwMEVGQjI2OTEzRERBN0JCRjUyNjg2RUI0MTNGODZGMkVBNTUKKzoxMDcxNzAwMEIyQjQzOUFDRkU2MkVCOUU1Q0Y0NDMyRkJEMzA4RkZDQTEKKzoxMDcxODAwMDUxOTVDRTU1N0VBOUQ5NjUwOEQzODcyNDA5OTJDNTdCMzAKKzoxMDcxOTAwMDA5NTJCMzZFNjYwNjNENUIyREMwNEIwN0I3MDU5RTYxNzUKKzoxMDcxQTAwMEMxRjE5N0RBNzQ3RTNEREM1MUI1ODFBREM1RjdDMTJBRDYKKzoxMDcxQjAwMDNGRDRBNERENTY4NkU3QUJEMUI0NjRBMUJENTI5RERGQjgKKzoxMDcxQzAwMDU3ODE3QzcxRDFDNDhDQTlGODhFNEVFOEFCOUFGNjM1MDQKKzoxMDcxRDAwMEYzRDFFRTFENjkzRkIxRTI1RERGRTc4MjBGM0ZGNzk5MjIKKzoxMDcxRTAwMDNDQTFGOUMxQzhGMjZGNEQ0QzM5MTVGMjZFRjg5RTA2RkMKKzoxMDcxRjAwMDAzRDlFRUVBN0M2RkVCQkQ3NUU4OUZENTI3NzBGOTcxNzYKKzoxMDcyMDAwMDE2RkFCNzgxMUMzMzE3NzFCOUI3NjQ1NTc4N0ZBOTg4MEUKKzoxMDcyMTAwMEJGNEJBQ0Q3Rjc2NUExREU1M0U3RkZBNjUwOTU2QjdENUEKKzoxMDcyMjAwMDU5MjhBRjIyQzdDRDkzODVCQzc5NTEyMjc5NTNEMzJFRUIKKzoxMDcyMzAwMDlEOTNFMTlFNkE4QzZFMEZCRURGQTk0MTY3OTI5RjUzQkEKKzoxMDcyNDAwMDdCNERFMkUzNTI4QkM0QkRDM0Q4QTc4QjMyNjhERDlBNzUKKzoxMDcyNTAwMDM2OTNERDA0RTM2QUEzRkE2MkQxMUVBQThCRTk4QjQ1NUIKKzoxMDcyNjAwMDNCMjc3MDQ4NjYzQjA0QkExMjkzMDU3RTI2MDg5NDg1MzYKKzoxMDcyNzAwMEM0MURBQkJEM0FCQjI5NzcxODNDQTNERDg0RUY3M0YwODYKKzoxMDcyODAwMEJGNjFGREI2MjJDRTI3NTVCRTY4NUE4RjU5RkE4QTkwNDMKKzoxMDcyOTAwMDRFQUJCNjg3OEZDMzczNTk0MkY4MkZFMERCOTkxQ0VBRDcKKzoxMDcyQTAwMDhGREJDNEJFRkJBNTczQzQyN0ZENUZCRjlGOEU3OEFGODUKKzoxMDcyQjAwMEQxQjBCNTk4NDdCQzI0RjFFRjFFMDBBNkVGMUUyRTg5NzEKKzoxMDcyQzAwMDdDNjRDRERGQ0Q1MTQ4MkY5NzNFQUYyM0JFMEQ0ODdENjYKKzoxMDcyRDAwMDI0RDdDRTFDNUM0MDcyMjlBMEVCMjNCOUQ2NTM1NDQxNkQKKzoxMDcyRTAwMEYyMjExMERGNTc4MTcyRUFDQ0MxN0FERTNFQkFBRjQyOUEKKzoxMDcyRjAwMDgxRjY0RTg0QjE3RDFDMjM3RDdGQjlFODAxOTIxRkYzOTYKKzoxMDczMDAwMDY0RkVCRTgxRURENDU5NzgxQzY4N0Q2RjEzRjkxNTNBN0YKKzoxMDczMTAwMDI1RDRFRkJFNTJBNEU2NkRGNEMxNzNDQjQxQkUwOTMwNTMKKzoxMDczMjAwMDY1NUYzQkYyNjE5NTk5RTIzOTYwM0ZCNUJEODI3NkRFREIKKzoxMDczMzAwMEMyNjQyQkM2QzVBQjcwMUNBNzAzN0Q2OEZFMkYzMUUxNkMKKzoxMDczNDAwMENCNjU4ODlGNDU3MThFM0I4QjMwOEY5REQzNDdGRTAzNjUKKzoxMDczNTAwMDUwMzVEOUU5RjU3RjMyOTAxRkQ5QUYxQkQ4OEQ3MjJBRUQKKzoxMDczNjAwMDM3Q0VCMUIwMDhGNjUxQTdFRjVFODdBMUE3MkJCQUJFMDIKKzoxMDczNzAwMDJFQ0NGQkNEOTVCOTNDNjI3QjM4NUQwNTcyNzZGMkVGODEKKzoxMDczODAwMDI0NDRGRUIwQkE4OENCNUZEMDVCQUMwNUU5NDJFMkY4OUEKKzoxMDczOTAwMDNERTY3QkY1MTRDQTk1NDBGNzQ0OTJDNzkxN0M3M0QxQzIKKzoxMDczQTAwMEY3NDQyQ0NBODdEM0EwQzdERDIxN0VGRUU5QTU3QjI4NDAKKzoxMDczQjAwMDRGQkYwMERGNjU0MDc5RUZEQTcwN0ExOEZDRUE2N0U0QzYKKzoxMDczQzAwMEVGQjFDNzQyRUE5MTBFQjc4NEMzOTE3NDg0RjRFODBGMTkKKzoxMDczRDAwMDkzM0I2RUEyOUIzRDgyQUY2QTY3NzVEN0UzM0QwQ0MxQkMKKzoxMDczRTAwMDc3MDAyQzg3QzA0NzIzRTA4OEZFQUM5Q0RCMDk3QkYwNEMKKzoxMDczRjAwMEJGNjFERUJBNzFGRTVFRjJDRkY3RjE3N0IxQ0RBMEJGMEIKKzoxMDc0MDAwMDA4M0UxMDRENzk2M0NEM0VEMDRGODk1QzNGQTE1RUE4MDgKKzoxMDc0MTAwMDhERURBNkI4NTRFMDgwODFGMjIzMEY3NzdDNENFRjE5RjQKKzoxMDc0MjAwMDgxMEUyOUZFNTJEQkYxNUEzMkZBRUQzRUY0MTM5MjQ4RjYKKzoxMDc0MzAwMDBGMjZEMzNCOTUwMzFEQzlFODZGQThGNTc1MUE2Rjk2MDMKKzoxMDc0NDAwMDc4OEY0Rjc2QkE1QUVGOTRGRDU5QjhGRjVBQTkzQjE3NzcKKzoxMDc0NTAwMERCN0Q4NTE2RDExRjYwMTk2MTQ2RTdBODkzMzhCRkIzNUQKKzoxMDc0NjAwMDBFOTlFNDc5MjRERUY2MEE3QTA1Qjk5MDRCRUYyQzBFREEKKzoxMDc0NzAwMEYxQjg4MDJBMDdBQTg1M0MzOThBRjUzOTlDRUYyRDZBMzQKKzoxMDc0ODAwMDVFNDlDMkY3NzJEMUMzQ0E4NzlCOEE1NDdCQjg4MUUyMzYKKzoxMDc0OTAwMDM2QkI4QTE0N0VBRjYyM0NDRENCRTM0QUQ0NUVGRkZBQTIKKzoxMDc0QTAwMEU1REMwOTM5Mzg0RTExRTM0MkU0RDBDNEEwNUM0MUZFNkEKKzoxMDc0QjAwMDRGMjVGRTdGNTg5NzBDRTdBQTc5NEVCMjM2QTM5QzVBMDcKKzoxMDc0QzAwMEJDQTYxNEJBQjNFNURBMTVBNTE0MkYxM0VGM0YyM0Y3QzIKKzoxMDc0RDAwMDE1NDk0N0Y2MjI4RURGMUE0RDdDNDk2MkM4N0M5N0MwNTkKKzoxMDc0RTAwMDVENEZDRDIzMzk0M0VGRThFRjRGN0NCQzE0RTMxM0JGNkUKKzoxMDc0RjAwMDU4QkM5OUU4Nzk0OERGODRGMjM5OUU2NzNCOTdFM0M4MjYKKzoxMDc1MDAwMDM2RDczNEQ3RDNGMUYyODY5Njc1MjlDM0VDMjM3MjlGMTAKKzoxMDc1MTAwMEQ1OEU5NkQyNjRFNUZBN0E3NUJGOTc0Q0VBRkU2NkU5OTUKKzoxMDc1MjAwMDkyNDJFRjYxQzE5QUQyMjQyODk3MUJGRkQxN0JFMEU3RkEKKzoxMDc1MzAwMEJERDQ2MUYwQTM1RUFENUVCQzYyNUREQzMwNzQ3MzlENTIKKzoxMDc1NDAwMDNFRDgxRUEyQkYyNjIwN0UzRDk0RDcxODY5RkY5MTY1QzQKKzoxMDc1NTAwMDlERTRFRkM1MzgxMTAzQkU2QTI1RkUwMjdFMDlEMTBCRkEKKzoxMDc1NjAwMDY1NDJCRjBFQzUxQkFBOTY4RTQ3QkY5MzM5OTY4RTQ3QkMKKzoxMDc1NzAwMDNEMDM3QzU1NjExREM2QUZDNDJGNEIzNEY0NzZDMzREMUIKKzoxMDc1ODAwMDY1RTQ3RTNFMkJFMjcxRDJCMjIyQ0UyRkE3NkNGNjZGNUQKKzoxMDc1OTAwMDUwQkU4RUY0QkQ4NTYxOUFGNEFEREY1QkE0NjkwNkRGNTEKKzoxMDc1QTAwMDQxN0U0QjRCOEU1MTMwMEY1NDMyM0I5QUY3M0I2Q0IyQkQKKzoxMDc1QjAwMDYwRENBNkZGRjA5NzE0RDdFRDdGQzRCQzgwRTcwQkNDNEUKKzoxMDc1QzAwMDZDMzRCNDc3QTU0RUREMTFBQTQ3M0NEMzM4NUY0NjE3MUIKKzoxMDc1RDAwMDcwQkJDNTk1QURGQkY2Qjg1MDRFQ0M1MDVDODhFQzg2QzAKKzoxMDc1RTAwMDlDNjhDQTkzMDQ3QzlGOTJERUVBRUYyQ0I0NjAzRTIzMzEKKzoxMDc1RjAwMEQwMERERTIxRjA5M0VCRUJGRjRBNDZGRDFBRThGQzg4NDQKKzoxMDc2MDAwMERFODMwNUJFRkE5OERFODk2RDEwRUZGNDhFRkFDNDNCNzYKKzoxMDc2MTAwMEFCNkUyNTg2QkU4QjJCRkJBMDE0RkI2RDE0NjUzMDNFMzQKKzoxMDc2MjAwMEMwRTM1QTZBQTlGQUZGMjFGRUVGOTQ2OTg1QzNGQUJGNDUKKzoxMDc2MzAwMDA5MEU3MzY4NUM0MDQ5MTkyRThFMTIxQTE3QzhENEYyQ0QKKzoxMDc2NDAwMEI4MDA5NjE4MTdDOENDRTQ3MTAxODQzMTJFODAyNUM2ODUKKzoxMDc2NTAwMDA1QjAxRUUzMDIwODYzNUMwMDYxOEMwQjIwOEM3MTAxOTUKKzoxMDc2NjAwMDJDMzEyRTgwRjU5Rjg5RUYxRkZBNDEzMEYxNzhBNTk5RDIKKzoxMDc2NzAwMEU0RkE0QTdDREYwRUY3QjdGMjMwQ0YzQkFENkM5NTI5QzgKKzoxMDc2ODAwMDdGOEJERjNGQTA3RUJCRUVERDRDQkI3ODM3RTNERDRDNkMKKzoxMDc2OTAwMDc5M0NENzAxRDk4QTI4NzJFOTA2OEU2MzFDQzdCNTVGODkKKzoxMDc2QTAwMEIyQUU0MUI5RDJCNDgwRDZERkQwNTlGOERFNjJBQzZGNDkKKzoxMDc2QjAwMEQ1NTkzNTBBRDExMUM3NjM4QjQ0RUZGNDZCM0E1QjI5NzYKKzoxMDc2QzAwMEVFNTQ5QzcyNTg0RkY1NkQxMkMzMzhFOTVEMDZFRUU3MzMKKzoxMDc2RDAwMDNBNjVBOENEQTMzQzI4RDlDMTRFNDMzN0Y5MUZCNTdCRTUKKzoxMDc2RTAwMDI1QTUzMkY0OURDNkY0QUIyNDA3RDQ3Q0YyMzJERUM0NjcKKzoxMDc2RjAwMDlDNUU5MzUyMzlDQzNCOTBBMTc3RTdFMkRERjQzMkNDMkIKKzoxMDc3MDAwMDMzRTM3QjcxRjkyQjdBRDdFRjA0ODc3NDE0RDJFMTU2RjcKKzoxMDc3MTAwMEZFRkVEOTAyRkY4OERGMjNERTM1RDU3NEVFNUY4N0VGRUEKKzoxMDc3MjAwMEExMjJGM0NENDNERkQzNDVFNDlERUJBNzg5QkNCMjhEMDUKKzoxMDc3MzAwMDdGNUY1MUY2NjRFNUJFMDNCMERFRTAyNjAzRDkxQkVFQTEKKzoxMDc3NDAwMDQyQzcwM0QzOTIzMEVGNkZBN0Y4QzhGMUMzMjZGMjhCN0MKKzoxMDc3NTAwMDNFREM3QzUzNTg3Qzg0RTUzQjFFOUM0NkY5RjlCMTE0MTEKKzoxMDc3NjAwMEFGNjhENDQ5QTQ4RjY3OTc0RDRDQzE3QjlDN0Q0MjQ3M0QKKzoxMDc3NzAwMDdBQTczN0FGN0MzNUY2NkI5Q0FBNTAzQ0FBQzRDMDFFRDIKKzoxMDc3ODAwMEEwNzlDNDdCMjkxNTFGMjVDRDkyNDcwM0YwNTI2NkE1MjkKKzoxMDc3OTAwMDc3RjY0QkUwOUEzMDVFRDlBRjMzQUZDNzc3NEQ0QjE4RDEKKzoxMDc3QTAwMDdGRTdBMEQyNERFMzY2ODlFODA2MDMwNDc4OUYxNUUyREYKKzoxMDc3QjAwMDNFOTc3NEZFRjk0QjdDQzc3MDlGODFEQkFENjkxQTlFQzIKKzoxMDc3QzAwMEJGNEVEQkM4REYzM0RDQ0YxQzdBRDRCM0NCOTFCQTY0QjUKKzoxMDc3RDAwMEQyOEY3RkVBODM3QTQ3RjREODc0NkU5NzJCMjkzOEZGQ0IKKzoxMDc3RTAwMEQyOTMzQTdBNkY1QjkyRjI5MzJDMDdFOUU5NjI3QUM3RjcKKzoxMDc3RjAwMDIwRjkxN0M5RDc2RTFFOTk3RjIyREYzMTFDRDc3MUI5QzYKKzoxMDc4MDAwMDAyRjc0OEZFNTAxN0QyMjVDNTY1MUM1NDlFNkNBQUEyRUIKKzoxMDc4MTAwMEYyNzdFMjdCODhFQkRGRkYwRjlDNDUzRjMxMkQyNUM2RDkKKzoxMDc4MjAwMDhBNzI2RUM0RUZEREEyQkVGRDdCQUYxN0M0RkJCNTM0MTgKKzoxMDc4MzAwMDRENEZCRTgyRjdGMTc3QjMxNUVGNDM3RDI3NzhDQTU2RDcKKzoxMDc4NDAwMEJFMUZGMTY0OEY2NTZFMEI3RDBGMDYxMjEwRUVCNTE0MkUKKzoxMDc4NTAwMDBGMjI2MTVDREI2QkM3RUY4RTA2MEU0QjE2N0E5NzdDQUUKKzoxMDc4NjAwMDlEN0NEQ0ZDMDhCRTEzNzE2NTRBMTY0OUMxRjhGN0E2NzkKKzoxMDc4NzAwMDkyNjREODc3RTk4NDBDREFCN0NCQzdFM0EzNzQ0M0M5MjEKKzoxMDc4ODAwMDE4M0ZFN0Y4NEFDRjczMUM5QjU2MThBQzlGMjdGODI2ODEKKzoxMDc4OTAwMDAwRkQzOTlERkNEMDgzRjRGNjFERTJBNkJCQjBCRjlCNzIKKzoxMDc4QTAwMDk5RTg3QjZBRkE4M0ZEQ0NCQjc5MUNDNTRGNTVCQTE5QTAKKzoxMDc4QjAwMDZDNEJEOTgxNzRGMzlFOTBGQjhCMTdCRkFCNDNGRERGRkMKKzoxMDc4QzAwMDlCRUZFOEMxN0Q1NDU0NUU3RDI0OTlDRTM3N0NGQzRBMDEKKzoxMDc4RDAwMDdEQTcxRTE5QkYwQTk1OUZGRjNGREVBNzlGNkE2QUEwN0EKKzoxMDc4RTAwMEYyOURBNjU1NTQ3NjM3QjlBOTNENDRGRTVGMUE0MUZFNzQKKzoxMDc4RjAwMDQ3QzYzRkFGMjI3RjQ3QzYzRjk5NTE4OTIzRkQwOUZDMDgKKzoxMDc5MDAwMENERTNDRDExRjFDRUIyNTFGN0FFODdGQjlCQkQ0NTZGRjQKKzoxMDc5MTAwMEM1MkEzNUZFODlFRjg3NTc5QTQ5MUVGQ0Y3QjQ2MUUzMDMKKzoxMDc5MjAwMDlFRUFCRDk5Mjk0RTNBQzg0Qzc5NzhGRkIzQjIyNzZBQ0UKKzoxMDc5MzAwMDM1RDBBRTlEQ0VGMUE3QzYxRDkxM0ZGMDdDQzgxRjU4MzMKKzoxMDc5NDAwMDIyN0Y2OEI1NDFGRTc4NTYwRjJDNUNDMEY1QkM5QkY0RDUKKzoxMDc5NTAwMEJDODlGMEJBNkUwREM4MEY4MEVGNjM5NjMwRjk3MTI1QkYKKzoxMDc5NjAwMDQyN0U4MEMzNzEzNzdENTdENTY5NjAxODI3NTRERjUxMzcKKzoxMDc5NzAwMENFODJFMjhCQkM2MUU0ODk5N0NCOTM3MTUxREVFN0U5NUIKKzoxMDc5ODAwMDdCRkZGQTI4N0E5RjdCNUNCQzg3M0JCRTgxQkY4N0FCQkQKKzoxMDc5OTAwMDY0RTVCNEVFMzA3MjI1MTZGMTcxREZBODgxQjM3RjgwMDMKKzoxMDc5QTAwMEZFRjdGRERFNENGNkNBQkFEMUNCOEFGRTE5Qjk3MjREOEMKKzoxMDc5QjAwMDdDRDdGMjM0RkVBRTgwRjZEQjdFNTdFMDMxMDlGM0ExQ0UKKzoxMDc5QzAwMDhERjczMDFCRTI1OUZENUQ4MTE0OTFDRkZFMUVCRjJCNTgKKzoxMDc5RDAwMDMwNkQ3QUUxNzdGRjVEODE1QkE3OEY1RjFDRkFCQjAyOTgKKzoxMDc5RTAwMEI3RkEzMjM4QUNGRUFFMDAxQkJGNzg4NERGMTU5ODNEODUKKzoxMDc5RjAwMDNERTlGQURGMTVCODZEM0FGNzE3NDdGQTVEMDFCMDI3OTAKKzoxMDdBMDAwMENCNzA1QzkyQ0QzRTA3Q0IzNEIxQ0ZDOEVGNjk0RjhBQzMKKzoxMDdBMTAwMEZDNUQ5N0M2QjExOENCRDI1OEI3OTZFQTM1OUUwMkZBRUMKKzoxMDdBMjAwMDBFNUVFM0ZEMjVGOTgxRjk4RTlGRTM3OTRCOUZCMDREMDIKKzoxMDdBMzAwMEM5MDYzOENERTAyNTM5RDk5QjY3QkYxM0VCQUZEOUVDMjgKKzoxMDdBNDAwMDc3RTEzQTkxNzE3M0M0MkRGQUY3QjA5RkJCQjEzREYyNjMKKzoxMDdBNTAwMEREOTU4QUNGMTVEM0I5REM2ODE0RTU4Q0U2RTFCRjI3NDQKKzoxMDdBNjAwMDZGOUNDRUYzRjIzN0RBMzdFQ0I3MDZENzFCREFGRkE2RjYKKzoxMDdBNzAwMEE1MDVCODFGRDg2RjJERDZDMzdFRUJCMDY0RTY4NEIwRTEKKzoxMDdBODAwMEVGNTNBRkE3MzMzN0QxNTVFMzc0NEU1RjIwQ0ZFNjdENzgKKzoxMDdBOTAwMEM4RUQ0MTJBQjNCNDlFNzhCNDFGQzczQ0U0ODlDN0ZENDIKKzoxMDdBQTAwMDhFNjkxOTMwRTE3NzEwN0Y3NDBGOTg1MEJGRkY3MUY1MjAKKzoxMDdBQjAwMDgwMDlFQkZGNjhFN0VGOTUyM0U3N0Y3OTNBRjcwM0IyOTgKKzoxMDdBQzAwMDY2MENEMEY4RjE2OEUzOTM3RDNFMTA4RkY2NTM1NkQ1REYKKzoxMDdBRDAwMDg3RUIyOERGQjI3NzMyRTk5N0YxNDJCRjhDN0Y2ODgyNkIKKzoxMDdBRTAwMEFGMEZFODZERkNCNjM4Q0E2N0IzRTI0NDZBQUYzMTcyRDMKKzoxMDdBRjAwMDNFQUQ3OUE4RjJFMDAxODVCRURCOUFGNzYxODhCRDMzMUYKKzoxMDdCMDAwMEQ5MDNGQjBFQjNCRkI0ODNGQ0REMjVDMDc4NEY3Qjc1NzIKKzoxMDdCMTAwMDA0MjNDREEyN0RFNTY0RkNEREU1MTgyMTM3RDA0RTVCNjIKKzoxMDdCMjAwMDBDNzJDMTU5RjVFNjk3OTRGN0M3RjEzODFGRTY2ODkxRDIKKzoxMDdCMzAwMEZFN0NCQTQxRjE3RDlBMDVGREQwRTUwQkQ2NzQ5MTVGQ0MKKzoxMDdCNDAwMEI4NzVBODVFRjg5OUZCRDdBMURGMENGNjVCNTg3RDREQTAKKzoxMDdCNTAwMEU1OTEyRUQ0MzdCNTdCQzNFQjlEMEQ1N0M5N0YwNUZCNEYKKzoxMDdCNjAwMDJEQUNGRTlFNUY5RUQzRjNERjJGMDhBRjA3RkNFRTQ1RTIKKzoxMDdCNzAwMEJBNTRGMTdCNUNFNzlEOEM3RURFNzE2Nzk0OTVCRkRGMjQKKzoxMDdCODAwMEY3RDJFRjk1RUMxMERGM0ZFRkZDOEY1OTlDNkUwNEJFRUYKKzoxMDdCOTAwMDYxQkMzNzc0RkNDOEY0RDE0Q0ZERERCMzU4MzZGMkMzNzgKKzoxMDdCQTAwMDhENEE1NTJFMERGREZFODk5RUI5MjlCRTM3Mzc4NkU0RDQKKzoxMDdCQjAwMDhFNEJGODU1RjU5NTE2RDJGMzY5RjU0NjkyNUYyNTcyMEUKKzoxMDdCQzAwMDk0MTVFMUExREYzRjI5OTM4NTlDRjIxMkZGRjdEQzFFOUIKKzoxMDdCRDAwMDRGNzEzQzNBMDBDMjA5NTMyOUVGOTNEQ0NDRTE4MTI0NzgKKzoxMDdCRTAwMDAzQzk4NzEyNEQ3OUREMUUyOERGRDQ4NDdGQzdGRTJDQTAKKzoxMDdCRjAwMENBMDcxOUY5OTc3Rjg3RTlEMjdCRjk3N0UyNUFBNTEwNkUKKzoxMDdDMDAwMEZEREM2NkM5QkUwREJGN0I2Qzk2NDQxQ0IxREE0Q0Y5MzUKKzoxMDdDMTAwMDgyN0U4QzJGQzI3OUI2QzQ3QkI2MkQ4Mzc1QjZEQzk5NzMKKzoxMDdDMjAwMDQzRjY3MTNGRTNGMkQ0QkQ4MEU3QURCNkM0OTcyRjVFNTMKKzoxMDdDMzAwMDgxRUQwQkE3NTBGQkMxNkYyNjNFNUU4MEY2NTM3NTk0MTUKKzoxMDdDNDAwMDE1RURBNzJEMzY2RTVGNkY5OTlGNERFREFGNEJDQTFBOUMKKzoxMDdDNTAwMDNDQjdGQjIxNDZFQjZDOTlDRkNGQkRFNUYxNzFFMkZCNjAKKzoxMDdDNjAwMDBCOEYwOUY5Nzk0QjhCN0QzNEU2QTM2NjU5MUMxNzEwRUQKKzoxMDdDNzAwMDVGNjM0NDNFNkU0QjA2RDQ0M0Y5OTQ1NEJFRjA3RTlDNDEKKzoxMDdDODAwMDY3MkFERkVGRUY2QzBBQzk4RkUzMEJBNzNDQkU1QjIxQ0QKKzoxMDdDOTAwMDM1RTJDN0JDOTA2QjZFMENGOUMxRkYwQkI4MUY3NDk0MzIKKzoxMDdDQTAwMDcwNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzowODdDQjAwMDA1MDIwRDAwMDAwMDAwMDBCOAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4LWUxaC01LjIuMTMuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngtZTFoLTUuMi4xMy4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4LWUxaC01LjIuMTMuMC5mdy5paGV4CkBAIC0wLDAgKzEsMTI4NDkgQEAKKzoxMDAwMDAwMDAwMDAzQkU4MDAwMDAwNjAwMDAwMDY4ODAwMDAzQzUwNTMKKzoxMDAwMTAwMDAwMDAxOTY4MDAwMDQyRTAwMDAwMDBBQzAwMDA1QzUwRTUKKzoxMDAwMjAwMDAwMDA4REY4MDAwMDVEMDAwMDAwMDBFODAwMDBFQjAwMUIKKzoxMDAwMzAwMDAwMDBFMzE0MDAwMEVCRjAwMDAwMDA5NDAwMDFDRjA4ODIKKzoxMDAwNDAwMDAwMDA1OEU4MDAwMUNGQTAwMDAwMDBDNDAwMDIyODkwODIKKzoxMDAwNTAwMDAwMDBGOTY0MDAwMjI5NTgwMDAwMDAwNDAwMDMyMkMwRDcKKzoxMDAwNjAwMDAyMDQwMDQ4MDAwMDAwMEYwMjA0MDA1NDAwMDAwMDQ1OTQKKzoxMDAwNzAwMDAyMDQwMDU4MDAwMDAwODQwMjA0MDA1QzAwMDAwMDA2MzYKKzoxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKKzoxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKKzoxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKKzoxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKKzoxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKKzoxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKKzoxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKKzoxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKKzoxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKKzoxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKKzoxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKKzoxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKKzoxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKKzoxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKKzoxMDAxNjAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNzkKKzoxMDAxNzAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGNTkKKzoxMDAxODAwMDAyMDQwMDE0MDAwMDAwRkYwMjA0MDAxODAwMDAwMEZGMzkKKzoxMDAxOTAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGMTkKKzoxMDAxQTAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwQjkKKzoxMDAxQjAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGNTkKKzoxMDAxQzAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMzkKKzoxMDAxRDAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGMTkKKzoxMDAxRTAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxQUYKKzoxMDAxRjAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwOEEKKzoxMDAyMDAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5NUQKKzoxMDAyMTAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGNUEKKzoxMDAyMjAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGM0EKKzoxMDAyMzAwMDAyMDQyMDM4MDAwMDAwMjAwMjA0MjAzQzAwMDAwMDAwREUKKzoxMDAyNDAwMDAyMDQyMDQwMDAwMDAwMzQwMjA0MjA0NDAwMDAwMDM1NzUKKzoxMDAyNTAwMDA2MDQyMDQ4MDAwMDAwMUMwMjA0MjBCODAwMDAwMDAxMzEKKzoxMDAyNjAwMDA2MDQyMEJDMDAwMDAwNUYwMjA0MjIzODA3RkZGRkZGRTUKKzoxMDAyNzAwMDAyMDQyMjNDMDAwMDAwM0YwMjA0MjI0MDA3RkZGRkZGNkYKKzoxMDAyODAwMDAyMDQyMjQ0MDAwMDAwMEYwMTA0MjI0ODAwMDAwMDAwODQKKzoxMDAyOTAwMDAxMDQyMjRDMDAwMDAwMDAwMTA0MjI1MDAwMDAwMDAwNzQKKzoxMDAyQTAwMDAxMDQyMjU0MDAwMDAwMDAwMTA0MjI1ODAwMDAwMDAwNTQKKzoxMDAyQjAwMDAxMDQyMjVDMDAwMDAwMDAwMTA0MjI2MDAwMDAwMDAwMzQKKzoxMDAyQzAwMDAxMDQyMjY0MDAwMDAwMDAwMTA0MjI2ODAwMDAwMDAwMTQKKzoxMDAyRDAwMDAxMDQyMjZDMDAwMDAwMDAwMTA0MjI3MDAwMDAwMDAwRjQKKzoxMDAyRTAwMDAxMDQyMjc0MDAwMDAwMDAwMTA0MjI3ODAwMDAwMDAwRDQKKzoxMDAyRjAwMDAxMDQyMjdDMDAwMDAwMDAwQzA0MjAwMDAwMDAwM0U4NDAKKzoxMDAzMDAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBODUKKzoxMDAzMTAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyRjEKKzoxMDAzMjAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwMkQKKzoxMDAzMzAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwMzMKKzoxMDAzNDAwMDAyMDUwMEEwMDAwMDAwMzMwMjA1MDBBNDAwMDAwMDMwRjgKKzoxMDAzNTAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBBQzAwMDAwMDAyMDgKKzoxMDAzNjAwMDAyMDUwMEIwMDAwMDAwMDUwMjA1MDBCNDAwMDAwMDA2MTAKKzoxMDAzNzAwMDAyMDUwMEI4MDAwMDAwMDIwMjA1MDBCQzAwMDAwMDAyRjcKKzoxMDAzODAwMDAyMDUwMEMwMDAwMDAwMDAwMjA1MDBDNDAwMDAwMDA1RDYKKzoxMDAzOTAwMDAyMDUwMEM4MDAwMDAwMDIwMjA1MDBDQzAwMDAwMDAyQjcKKzoxMDAzQTAwMDAyMDUwMEQwMDAwMDAwMDIwMjA1MDBENDAwMDAwMDAxOTgKKzoxMDAzQjAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxRkIKKzoxMDAzQzAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxRjUKKzoxMDAzRDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwNkYKKzoxMDAzRTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDEzOEMKKzoxMDAzRjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBNTkKKzoxMDA0MDAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3RTMKKzoxMDA0MTAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDA4MTMKKzoxMDA0MjAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxRjkKKzoxMDA0MzAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2NjUKKzoxMDA0NDAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxOTAKKzoxMDA0NTAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNzAKKzoxMDA0NjAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxNTAKKzoxMDA0NzAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMzAKKzoxMDA0ODAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxMTAKKzoxMDA0OTAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxRjAKKzoxMDA0QTAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxRDAKKzoxMDA0QjAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxQjAKKzoxMDA0QzAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDA3NDIKKzoxMDA0RDAwMDAyMDUwMEYwMDAwMDAwMDcwMjA1MDBGODAwMDAwMDA3MTgKKzoxMDA0RTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDI3REEKKzoxMDA0RjAwMDAyMDUwMEY0MDAwMDAwMjcwMjA1MDBGQzAwMDAwMDI3QjAKKzoxMDA1MDAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDE3RTEKKzoxMDA1MTAwMDAyMDUwMEYwMDAwMDAwMTcwMjA1MDBGODAwMDAwMDE3QjcKKzoxMDA1MjAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDM3NzkKKzoxMDA1MzAwMDAyMDUwMEY0MDAwMDAwMzcwMjA1MDBGQzAwMDAwMDM3NEYKKzoxMDA1NDAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQ3NDEKKzoxMDA1NTAwMDAyMDUwMEYwMDAwMDAwNDcwMjA1MDBGODAwMDAwMDQ3MTcKKzoxMDA1NjAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDY3RDkKKzoxMDA1NzAwMDAyMDUwMEY0MDAwMDAwNjcwMjA1MDBGQzAwMDAwMDY3QUYKKzoxMDA1ODAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDU3RTEKKzoxMDA1OTAwMDAyMDUwMEYwMDAwMDAwNTcwMjA1MDBGODAwMDAwMDU3QjcKKzoxMDA1QTAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDc3NzkKKzoxMDA1QjAwMDAyMDUwMEY0MDAwMDAwNzcwMjA1MDBGQzAwMDAwMDc3NEYKKzoxMDA1QzAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxMEEKKzoxMDA1RDAwMDAxMDYwMEQ4MDAwMDAwMDAwNDA2MDIwMDAwMDMwMjIwMEIKKzoxMDA1RTAwMDAyMDYwMERDMDAwMDAwMDAwMTA2MDBCODAwMDAwMDAwNjgKKzoxMDA1RjAwMDAxMDYwMEM4MDAwMDAwMDAwMTA2MDBCQzAwMDAwMDAwNjkKKzoxMDA2MDAwMDAxMDYwMENDMDAwMDAwMDAwNzE4MDQwMDAwQTkwMDAwNEIKKzoxMDA2MTAwMDA4MTgwN0M4MDAwNzAyMjMwNzFDMDAwMDJDMkMwMDAwNDQKKzoxMDA2MjAwMDA3MUM4MDAwMzg5MzBCMEMwNzFEMDAwMDI5MzExOTMxN0QKKzoxMDA2MzAwMDA4MUQ2ODYwNTJGNDAyMjUwMTE4MDAwMDAwMDAwMDAwNDcKKzoxMDA2NDAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNkMKKzoxMDA2NTAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwNEMKKzoxMDA2NjAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMjIKKzoxMDA2NzAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRjUKKzoxMDA2ODAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0RDYKKzoxMDA2OTAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwQjkKKzoxMDA2QTAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0OTUKKzoxMDA2QjAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNzkKKzoxMDA2QzAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwNTcKKzoxMDA2RDAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MzUKKzoxMDA2RTAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxMTkKKzoxMDA2RjAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRjcKKzoxMDA3MDAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0RDQKKzoxMDA3MTAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0QjUKKzoxMDA3MjAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyOTAKKzoxMDA3MzAwMDAyMTgwMEE0MDAwMDNGRkYwMjE4MDBBODAwMDAwM0ZGRjkKKzoxMDA3NDAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwMTkKKzoxMDA3NTAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMzIKKzoxMDA3NjAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxRUUKKzoxMDA3NzAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4QjMKKzoxMDA3ODAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQzMKKzoxMDA3OTAwMDBDMUI4MzAwMDAwN0ExMjAwQTFCODMwMDAwMDAwMTM4MDYKKzoxMDA3QTAwMDBCMUI4MzAwMDAwMDEzODgwMjFCODNDMDAwMDAwMUY0QjAKKzoxMDA3QjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwQ0UKKzoxMDA3QzAwMDA2MUExMDAwMDAwMDAzQjMwNDFBMUVDQzAwMDEwMjI3MTEKKzoxMDA3RDAwMDA2MUFBMDIwMDAwMDAwQzgwNjFBQTAwMDAwMDAwMDAyQUYKKzoxMDA3RTAwMDAyMUExRUQwMDAwMDAwMDAwNjFBMUVEODAwMDAwMDA2RTMKKzoxMDA3RjAwMDA2MUEzNkU4MDAwMDAwMDQwNjFBMzZFMDAwMDAwMDAyN0YKKzoxMDA4MDAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0RkEKKzoxMDA4MTAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0QjAKKzoxMDA4MjAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0NjAKKzoxMDA4MzAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0MTAKKzoxMDA4NDAwMDA2MUE1MDc4MDAwMDAwMDIwNDFBNDA0MDAwMDIwMjI4RjQKKzoxMDA4NTAwMDA2MUE0MDAwMDAwMDAwMDIwNjFBNDAwODAwMDAwMDAyQ0MKKzoxMDA4NjAwMDA0MUE2MkMwMDAyMDAyMkEwNjFBRDEwMDAwMDAwMDAyMDkKKzoxMDA4NzAwMDA2MUEyMDAwMDAwMDAxMjQwNjFBQjAwMDAwMDAwMDI4MUIKKzoxMDA4ODAwMDA2MUFCMTQwMDAwMDAwMEMwNjFBMzMwMDAwMDAwMDE0RTQKKzoxMDA4OTAwMDA2MUEzM0EwMDAwMDAwNjgwNjFBODEwODAwMDAwMDAyNTIKKzoxMDA4QTAwMDA2MUFEMUM4MDAwMDAwMDIwNjFBRDFEODAwMDAwMDIwQTQKKzoxMDA4QjAwMDA2MUEyNDkwMDAwMDAxMjQwNjFBQjBBMDAwMDAwMDI4QTcKKzoxMDA4QzAwMDA2MUFCMTcwMDAwMDAwMEMwNjFBMzM1MDAwMDAwMDE0MjQKKzoxMDA4RDAwMDA2MUEzNTQwMDAwMDAwNjgwNjFBODExMDAwMDAwMDAyNjgKKzoxMDA4RTAwMDA2MUFEMUQwMDAwMDAwMDIwNjFBRDI1ODAwMDAwMDIwREIKKzoxMDA4RjAwMDAyMUEyOTIwMDAwMDAwMDAwNjFBMzAwMDAwMDAwMDAyNDEKKzoxMDA5MDAwMDA0MUEzMDA4MDAwNTAyNEEwNjFBMzAxQzAwMDAwMDA5Q0IKKzoxMDA5MTAwMDA2MUEzMjAwMDAwMDAwMDgwNjFBNTAwMDAwMDAwMDAyMEIKKzoxMDA5MjAwMDA2MUE1MDgwMDAwMDAwMTIwNjFBNDAwMDAwMDAwMDAyNjMKKzoxMDA5MzAwMDA2MUFEMEMwMDAwMDAwMDIwMjFBMjkyNDAwMDAwMDAwOUMKKzoxMDA5NDAwMDA2MUEzMDQwMDAwMDAwMDIwNDFBMzA0ODAwMDUwMjRGMjkKKzoxMDA5NTAwMDA2MUEzMDVDMDAwMDAwMDkwNjFBMzIyMDAwMDAwMDA4NjgKKzoxMDA5NjAwMDA2MUE1MDEwMDAwMDAwMDIwNjFBNTBDODAwMDAwMDEyQkIKKzoxMDA5NzAwMDA2MUE0MDA4MDAwMDAwMDIwNjFBRDBDODAwMDAwMDAyNTMKKzoxMDA5ODAwMDAyMUEyOTI4MDAwMDAwMDAwNjFBMzA4MDAwMDAwMDAyMjgKKzoxMDA5OTAwMDA0MUEzMDg4MDAwNTAyNTQwNjFBMzA5QzAwMDAwMDA5MzEKKzoxMDA5QTAwMDA2MUEzMjQwMDAwMDAwMDgwNjFBNTAyMDAwMDAwMDAyMUIKKzoxMDA5QjAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwMjU5RDkKKzoxMDA5QzAwMDA2MUFEMEQwMDAwMDAwMDIwMjFBMjkyQzAwMDAwMDAwRjQKKzoxMDA5RDAwMDA2MUEzMEMwMDAwMDAwMDIwNDFBMzBDODAwMDUwMjVCOEQKKzoxMDA5RTAwMDA2MUEzMERDMDAwMDAwMDkwNjFBMzI2MDAwMDAwMDA4MTgKKzoxMDA5RjAwMDA2MUE1MDMwMDAwMDAwMDIwNjFBNTE1ODAwMDAwMDEyN0EKKzoxMDBBMDAwMDA0MUE0MDE4MDAwMjAyNjAwNjFBRDBEODAwMDAwMDAyNDIKKzoxMDBBMTAwMDAyMUEyOTMwMDAwMDAwMDAwNjFBMzEwMDAwMDAwMDAyMEUKKzoxMDBBMjAwMDA0MUEzMTA4MDAwNTAyNjIwNjFBMzExQzAwMDAwMDA5OTAKKzoxMDBBMzAwMDA2MUEzMjgwMDAwMDAwMDgwNjFBNTA0MDAwMDAwMDAyMkEKKzoxMDBBNDAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwMjY3OUEKKzoxMDBBNTAwMDA2MUFEMEUwMDAwMDAwMDIwMjFBMjkzNDAwMDAwMDAwNEIKKzoxMDBBNjAwMDA2MUEzMTQwMDAwMDAwMDIwNDFBMzE0ODAwMDUwMjY5RUMKKzoxMDBBNzAwMDA2MUEzMTVDMDAwMDAwMDkwNjFBMzJBMDAwMDAwMDA4QzYKKzoxMDBBODAwMDA2MUE1MDUwMDAwMDAwMDIwNjFBNTFFODAwMDAwMDEyMzkKKzoxMDBBOTAwMDA0MUE0MDI4MDAwMjAyNkUwNjFBRDBFODAwMDAwMDAyODQKKzoxMDBBQTAwMDAyMUEyOTM4MDAwMDAwMDAwNjFBMzE4MDAwMDAwMDAyRjYKKzoxMDBBQjAwMDA0MUEzMTg4MDAwNTAyNzAwNjFBMzE5QzAwMDAwMDA5RjIKKzoxMDBBQzAwMDA2MUEzMkMwMDAwMDAwMDgwNjFBNTA2MDAwMDAwMDAyM0EKKzoxMDBBRDAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwMjc1NUIKKzoxMDBBRTAwMDA2MUFEMEYwMDAwMDAwMDIwMjFBMjkzQzAwMDAwMDAwQTMKKzoxMDBBRjAwMDA2MUEzMUMwMDAwMDAwMDIwNDFBMzFDODAwMDUwMjc3NEUKKzoxMDBCMDAwMDA2MUEzMURDMDAwMDAwMDkwNjFBMzJFMDAwMDAwMDA4NzUKKzoxMDBCMTAwMDA2MUE1MDcwMDAwMDAwMDIwNjFBNTI3ODAwMDAwMDEyRjcKKzoxMDBCMjAwMDA0MUE0MDM4MDAwMjAyN0MwNjFBRDBGODAwMDAwMDAyQzUKKzoxMDBCMzAwMDAyMDBBMjk0MDcxRDI5MTEwMjAwQTI5ODAwMDAwMDAwRTMKKzoxMDBCNDAwMDAyMDBBMjlDMDA5QzA0MjQwMjAwQTJBMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwMkUKKzoxMDBCNjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNTkKKzoxMDBCNzAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNDkKKzoxMDBCODAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMzkKKzoxMDBCOTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxODUKKzoxMDBCQTAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxQTkKKzoxMDBCQjAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxMjcKKzoxMDBCQzAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4QzcKKzoxMDBCRDAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0NEUKKzoxMDBCRTAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwNzUKKzoxMDBCRjAwMDAyMDE2MDcwMDAwMDAwMDcwMjAxNjA4MDAwMDAwMDAxMzcKKzoxMDBDMDAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxOTAKKzoxMDBDMTAwMDAyMDEwMENDMDAwMDAwMDEwMjAxMDBGODAwMDAwMDAxMDgKKzoxMDBDMjAwMDAyMDEwMEYwMDAwMDAwMDEwMjAxMDA4MDAwMzAwMDAwMUQKKzoxMDBDMzAwMDAyMDEwMDg4MDAwMDAwMjgwMjAxMDA5MDAwMDAwMDAwNkUKKzoxMDBDNDAwMDAyMDEwMTM0MDAwMDAwMDQwMjAxMDJEQzAwMDAwMDAxODYKKzoxMDBDNTAwMDAyMDEwMzJDMDAwMDAwMDAwMjAxNjA3NDAwMDAwMDA3ODQKKzoxMDBDNjAwMDAyMDE2MDg0MDAwMDAwMDEwMjAxMDU2NDAwMDAwMDMwMDAKKzoxMDBDNzAwMDAyMDEwMEM4MDAwMDAwMDEwMjAxMDBEMDAwMDAwMDAxRDQKKzoxMDBDODAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxNkMKKzoxMDBDOTAwMDAyMEMxMDAwMDAwMDAwMjAwMjBDMjAwODAwMDAwMjExQ0QKKzoxMDBDQTAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0QzQKKzoxMDBDQjAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGQTAKKzoxMDBDQzAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGODAKKzoxMDBDRDAwMDA2MEMyMDM4MDAwMDAwMDIwMjBDMjA0MDAwMDAwMDM0MDYKKzoxMDBDRTAwMDAyMEMyMDQ0MDAwMDAwMzUwMjBDMjA0ODAwMDAwMDIwQzcKKzoxMDBDRjAwMDAyMEMyMDRDMDAwMDAwMjEwMjBDMjA1MDAwMDAwMDIyQjkKKzoxMDBEMDAwMDAyMEMyMDU0MDAwMDAwMjMwMjBDMjA1ODAwMDAwMDI0OTQKKzoxMDBEMTAwMDAyMEMyMDVDMDAwMDAwMjUwMjBDMjA2MDAwMDAwMDI2NzAKKzoxMDBEMjAwMDAyMEMyMDY0MDAwMDAwMjcwMjBDMjA2ODAwMDAwMDI4NEMKKzoxMDBEMzAwMDAyMEMyMDZDMDAwMDAwMjkwMjBDMjA3MDAwMDAwMDJBMjgKKzoxMDBENDAwMDAyMEMyMDc0MDAwMDAwMkIwNjBDMjA3ODAwMDAwMDU2RDYKKzoxMDBENTAwMDAyMEMyMUQwMDAwMDAwMDEwMjBDMjFENDAwMDAwMDAxOEYKKzoxMDBENjAwMDAyMEMyMUQ4MDAwMDAwMDEwMjBDMjFEQzAwMDAwMDAxNkYKKzoxMDBENzAwMDAyMEMyMUUwMDAwMDAwMDEwMjBDMjFFNDAwMDAwMDAxNEYKKzoxMDBEODAwMDAyMEMyMUU4MDAwMDAwMDEwMjBDMjFFQzAwMDAwMDAxMkYKKzoxMDBEOTAwMDAyMEMyMUYwMDAwMDAwMDEwMjBDMjFGNDAwMDAwMDAxMEYKKzoxMDBEQTAwMDA2MEMyMUY4MDAwMDAwMTAwMjBDMjIzODA3RkZGRkZGOUMKKzoxMDBEQjAwMDAyMEMyMjNDMDAwMDAwM0YwMjBDMjI0MDA3RkZGRkZGMTQKKzoxMDBEQzAwMDAyMEMyMjQ0MDAwMDAwMEYwMTBDMjI0ODAwMDAwMDAwMjkKKzoxMDBERDAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwMTkKKzoxMDBERTAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwRjkKKzoxMDBERjAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwRDkKKzoxMDBFMDAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwQjgKKzoxMDBFMTAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwOTgKKzoxMDBFMjAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwNzgKKzoxMDBFMzAwMDAxMEMyMjdDMDAwMDAwMDAwQzBDMjAwMDAwMDAwM0U4RTQKKzoxMDBFNDAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBMkEKKzoxMDBFNTAwMDAyMEM0MDA4MDAwMDA0MTEwMjBDNDAwQzAwMDAwNDAwQzkKKzoxMDBFNjAwMDAyMEM0MDEwMDAwMDA0MDQwMjBDNDAxNDAwMDAwNDIxOTUKKzoxMDBFNzAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGOUUKKzoxMDBFODAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGN0UKKzoxMDBFOTAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDA1RjcKKzoxMDBFQTAwMDA2MEM0MDQwMDAwMDAwMDIwMjBDNDA0ODAwMDAwMDBBMEUKKzoxMDBFQjAwMDAyMEM0MDRDMDAwMDAwRjAwNjBDNDA1MDAwMDAwMDFGRTcKKzoxMDBFQzAwMDAyMEM0MENDMDAwMDAwMDEwNjBDNDBEMDAwMDAwMDNBQUIKKzoxMDBFRDAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzRjgKKzoxMDBFRTAwMDAyMEM0MUM4MDAwMDAwMDEwMjBDNDFDQzAwMDAwMDAxQ0UKKzoxMDBFRjAwMDA2MEM0MUQwMDAwMDAwMUEwMjBDNDIzODA3RkZGRkZGMjkKKzoxMDBGMDAwMDAyMEM0MjNDMDAwMDAwM0YwMjBDNDI0MDA3RkZGRkZGODIKKzoxMDBGMTAwMDAyMEM0MjQ0MDAwMDAwMEYwMTBDNDI0ODAwMDAwMDAwOTcKKzoxMDBGMjAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwODcKKzoxMDBGMzAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwNjcKKzoxMDBGNDAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwNDcKKzoxMDBGNTAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwMjcKKzoxMDBGNjAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwMDcKKzoxMDBGNzAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwRTcKKzoxMDBGODAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwQzcKKzoxMDBGOTAwMDBDMEM0MDAwMDAwMDAzRTgwQTBDNDAwMDAwMDAwMDAxQjcKKzoxMDBGQTAwMDBCMEM0MDAwMDAwMDAwMEEwMjBEMDA0NDAwMDAwMDMyNUIKKzoxMDBGQjAwMDAyMEQwMDhDMDIxNTAwMjAwMjBEMDA5MDAyMTUwMDIwODkKKzoxMDBGQzAwMDAyMEQwMDk0MDgxMDAwMDAwMjBEMDA5ODAwMDAwMDMzOEMKKzoxMDBGRDAwMDAyMEQwMDlDMDAwMDAwMDIwMjBEMDBBMDAwMDAwMDAwQjUKKzoxMDBGRTAwMDAyMEQwMEE0MDAwMDAwMDUwMjBEMDBBODAwMDAwMDA1OEQKKzoxMDBGRjAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCNDAwMDAwMDAyNkIKKzoxMDEwMDAwMDAyMEQwMEI4MDAwMDAwMDMwMjBEMDBCQzAwMDAwMDAyNDkKKzoxMDEwMTAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyMjcKKzoxMDEwMjAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDEwODAwMDAwMDAxQ0EKKzoxMDEwMzAwMDAyMEQwMTVDMDAwMDAwMDEwMjBEMDE2NDAwMDAwMDAxQ0UKKzoxMDEwNDAwMDAyMEQwMTY4MDAwMDAwMDIwMjBEMDIwNDAwMDAwMDAxMTAKKzoxMDEwNTAwMDAyMEQwMjBDMDAwMDAwMjAwMjBEMDIxMDAwMDAwMDQwRjIKKzoxMDEwNjAwMDAyMEQwMjE0MDAwMDAwNDAwMjBEMDIyMDAwMDAwMDAzRTcKKzoxMDEwNzAwMDAyMEQwMjI0MDAwMDAwMTgwNjBEMDI4MDAwMDAwMDEyN0MKKzoxMDEwODAwMDA0MEQwMzAwMDAyNDAyN0UwMjBEMDA0QzAwMDAwMDAxNEMKKzoxMDEwOTAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDA4ODQKKzoxMDEwQTAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0NUUKKzoxMDEwQjAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDAwNDAwMDAwMDAxNDUKKzoxMDEwQzAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxRUMKKzoxMDEwRDAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxQ0MKKzoxMDEwRTAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxQUMKKzoxMDEwRjAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxOEMKKzoxMDExMDAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxNkIKKzoxMDExMTAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxNEIKKzoxMDExMjAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxMkIKKzoxMDExMzAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExQzAwMDAwMDBBNEMKKzoxMDExNDAwMDAyMEQwMTI0MDAwMDAwMDcwMjBEMDEyQzAwMDAwMDA3MjEKKzoxMDExNTAwMDAyMEQwMTM0MDAwMDAwMEMwMjBEMDEzQzAwMDAwMDBCRTgKKzoxMDExNjAwMDAyMEQwMTQ0MDAwMDAwMDcwMjBEMDExODAwMDAwMDI5RDMKKzoxMDExNzAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyODAwMDAwMDI3QjYKKzoxMDExODAwMDAyMEQwMTMwMDAwMDAwMjcwMjBEMDEzODAwMDAwMDJDODQKKzoxMDExOTAwMDAyMEQwMTQwMDAwMDAwMkIwMjBEMDE0ODAwMDAwMDI3NTUKKzoxMDExQTAwMDAyMEQwMTE0MDAwMDAwMTkwMjBEMDExQzAwMDAwMDFBQkMKKzoxMDExQjAwMDAyMEQwMTI0MDAwMDAwMTcwMjBEMDEyQzAwMDAwMDE3OTEKKzoxMDExQzAwMDAyMEQwMTM0MDAwMDAwMUMwMjBEMDEzQzAwMDAwMDFCNTgKKzoxMDExRDAwMDAyMEQwMTQ0MDAwMDAwMTcwMjBEMDExODAwMDAwMDM5NDMKKzoxMDExRTAwMDAyMEQwMTIwMDAwMDAwM0EwMjBEMDEyODAwMDAwMDM3MjYKKzoxMDExRjAwMDAyMEQwMTMwMDAwMDAwMzcwMjBEMDEzODAwMDAwMDNDRjQKKzoxMDEyMDAwMDAyMEQwMTQwMDAwMDAwM0IwMjBEMDE0ODAwMDAwMDM3QzQKKzoxMDEyMTAwMDAyMEQwMTE0MDAwMDAwNDkwMjBEMDExQzAwMDAwMDRBRUIKKzoxMDEyMjAwMDAyMEQwMTI0MDAwMDAwNDcwMjBEMDEyQzAwMDAwMDQ3QzAKKzoxMDEyMzAwMDAyMEQwMTM0MDAwMDAwNEMwMjBEMDEzQzAwMDAwMDRCODcKKzoxMDEyNDAwMDAyMEQwMTQ0MDAwMDAwNDcwMjBEMDExODAwMDAwMDY5NzIKKzoxMDEyNTAwMDAyMEQwMTIwMDAwMDAwNkEwMjBEMDEyODAwMDAwMDY3NTUKKzoxMDEyNjAwMDAyMEQwMTMwMDAwMDAwNjcwMjBEMDEzODAwMDAwMDZDMjMKKzoxMDEyNzAwMDAyMEQwMTQwMDAwMDAwNkIwMjBEMDE0ODAwMDAwMDY3RjQKKzoxMDEyODAwMDAyMEQwMTE0MDAwMDAwNTkwMjBEMDExQzAwMDAwMDVBNUIKKzoxMDEyOTAwMDAyMEQwMTI0MDAwMDAwNTcwMjBEMDEyQzAwMDAwMDU3MzAKKzoxMDEyQTAwMDAyMEQwMTM0MDAwMDAwNUMwMjBEMDEzQzAwMDAwMDVCRjcKKzoxMDEyQjAwMDAyMEQwMTQ0MDAwMDAwNTcwMjBEMDExODAwMDAwMDc5RTIKKzoxMDEyQzAwMDAyMEQwMTIwMDAwMDAwN0EwMjBEMDEyODAwMDAwMDc3QzUKKzoxMDEyRDAwMDAyMEQwMTMwMDAwMDAwNzcwMjBEMDEzODAwMDAwMDdDOTMKKzoxMDEyRTAwMDAyMEQwMTQwMDAwMDAwN0IwMjBEMDE0ODAwMDAwMDc3NjQKKzoxMDEyRjAwMDAyMEUwMDRDMDAwMDAwMzIwMjBFMDA5NDAyMTUwMDIwODUKKzoxMDEzMDAwMDAyMEUwMDk4MDIxNTAwMjAwMjBFMDA5QzAwMDAwMDMwMjIKKzoxMDEzMTAwMDAyMEUwMEEwMDgxMDAwMDAwMjBFMDBBNDAwMDAwMDMzMUUKKzoxMDEzMjAwMDAyMEUwMEE4MDAwMDAwMzAwMjBFMDBBQzAwMDAwMDMxRTgKKzoxMDEzMzAwMDAyMEUwMEIwMDAwMDAwMDIwMjBFMDBCNDAwMDAwMDA0MjMKKzoxMDEzNDAwMDAyMEUwMEI4MDAwMDAwMDAwMjBFMDBCQzAwMDAwMDAyMDcKKzoxMDEzNTAwMDAyMEUwMEMwMDAwMDAwMDIwMjBFMDBDNDAwMDAwMDAwRTcKKzoxMDEzNjAwMDAyMEUwMEM4MDAwMDAwMDIwMjBFMDBDQzAwMDAwMDA3QzAKKzoxMDEzNzAwMDAyMEUwMEQwMDAwMDAwMDIwMjBFMDBENDAwMDAwMDAyQTUKKzoxMDEzODAwMDAyMEUwMEQ4MDAwMDAwMDEwMjBFMDBFNDAwMDAwMDAxN0YKKzoxMDEzOTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxOTkKKzoxMDEzQTAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxQzMKKzoxMDEzQjAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwNkQKKzoxMDEzQzAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwOTkKKzoxMDEzRDAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCNzQKKzoxMDEzRTAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwMkEyODEKKzoxMDEzRjAwMDAyMEUwMDU0MDAwMDAwMEMwMjBFMDA1ODAwMDAwMDA5MEMKKzoxMDE0MDAwMDAyMEUwMDVDMDAwMDAwMEYwMjBFMDA2MDAwMDAwMDEwRTEKKzoxMDE0MTAwMDAyMEUwMDY0MDAwMDAwMEIwNjBFMDA2ODAwMDAwMDAzQ0UKKzoxMDE0MjAwMDAyMEUwMERDMDAwMDAwMDMwMjBFMDAwNDAwMDAwMDAxQjgKKzoxMDE0MzAwMDAyMEUwMDA4MDAwMDAwMDEwMjBFMDAwQzAwMDAwMDAxNzYKKzoxMDE0NDAwMDAyMEUwMDEwMDAwMDAwMDEwMjBFMDAxNDAwMDAwMDAxNTYKKzoxMDE0NTAwMDAyMEUwMDE4MDAwMDAwMDEwMjBFMDAxQzAwMDAwMDAxMzYKKzoxMDE0NjAwMDAyMEUwMDIwMDAwMDAwMDEwMjBFMDAyNDAwMDAwMDAxMTYKKzoxMDE0NzAwMDAyMEUwMDI4MDAwMDAwMDEwMjBFMDAyQzAwMDAwMDAxRjYKKzoxMDE0ODAwMDAyMEUwMDMwMDAwMDAwMDEwMjBFMDAzNDAwMDAwMDAxRDYKKzoxMDE0OTAwMDAyMEUwMDM4MDAwMDAwMDEwMjBFMDAzQzAwMDAwMDAxQjYKKzoxMDE0QTAwMDAyMEUwMDQwMDAwMDAwMDEwMjBFMDA0NDAwMDAwMDAxOTYKKzoxMDE0QjAwMDAyMEUwMTEwMDAwMDAwMEYwMjBFMDExODAwMDAwMDBFQzUKKzoxMDE0QzAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwQjIKKzoxMDE0RDAwMDAyMEUwMTE0MDAwMDAwMkYwMjBFMDExQzAwMDAwMDJFNUQKKzoxMDE0RTAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwOEEKKzoxMDE0RjAwMDAyMEUwMTEwMDAwMDAwMUYwMjBFMDExODAwMDAwMDFFNjUKKzoxMDE1MDAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwNzEKKzoxMDE1MTAwMDAyMEUwMTE0MDAwMDAwM0YwMjBFMDExQzAwMDAwMDNFRkMKKzoxMDE1MjAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwNDkKKzoxMDE1MzAwMDAyMEUwMTEwMDAwMDAwNEYwMjBFMDExODAwMDAwMDRFQzQKKzoxMDE1NDAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwMzEKKzoxMDE1NTAwMDAyMEUwMTE0MDAwMDAwNkYwMjBFMDExQzAwMDAwMDZFNUMKKzoxMDE1NjAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwMDkKKzoxMDE1NzAwMDAyMEUwMTEwMDAwMDAwNUYwMjBFMDExODAwMDAwMDVFNjQKKzoxMDE1ODAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwRjEKKzoxMDE1OTAwMDAyMEUwMTE0MDAwMDAwN0YwMjBFMDExQzAwMDAwMDdFRkMKKzoxMDE1QTAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwQzkKKzoxMDE1QjAwMDA3MzAwNDAwMDBFNTAwMDAwODMwMDdEODAwMDUwMkJEMzAKKzoxMDE1QzAwMDA3MzQwMDAwMkVGNzAwMDAwNzM0ODAwMDMxMUEwQkJFRUMKKzoxMDE1RDAwMDA3MzUwMDAwMzU2RjE4MDUwNzM1ODAwMDM4QzQyNTYxRDAKKzoxMDE1RTAwMDA3MzYwMDAwMTRDNTMzOTMwODM2MzQwMDM5ODAwMkJGMzMKKzoxMDE1RjAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwODUKKzoxMDE2MDAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwNjQKKzoxMDE2MTAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwNDQKKzoxMDE2MjAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyMEYKKzoxMDE2MzAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwRUYKKzoxMDE2NDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxQ0QKKzoxMDE2NTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxQjEKKzoxMDE2NjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwOEUKKzoxMDE2NzAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzNkUKKzoxMDE2ODAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxNTEKKzoxMDE2OTAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwMkUKKzoxMDE2QTAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzMEUKKzoxMDE2QjAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxRjEKKzoxMDE2QzAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwQ0UKKzoxMDE2RDAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzQUIKKzoxMDE2RTAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGMkUKKzoxMDE2RjAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwQjYKKzoxMDE3MDAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwRjEKKzoxMDE3MTAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwNTUKKzoxMDE3MjAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBNjkKKzoxMDE3MzAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwMjEKKzoxMDE3NDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwN0EKKzoxMDE3NTAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4MzQKKzoxMDE3NjAwMDAyMzM4M0MwMDAwMDAxRjQwQzMzODM4MDFEQ0Q2NTAwN0IKKzoxMDE3NzAwMDBBMzM4MzgwMDAwNEM0QjQwQjMzODM4MDAwNEM0QjQwOTUKKzoxMDE3ODAwMDBBMzMxNDgwMDAwMDAwMDAwMjMzMTQ4MDAwMDAwMDAxQkUKKzoxMDE3OTAwMDA2MzIyMDAwMDAwMDAxMDIwNjMyODAyMDAwMDAwMEM4NEUKKzoxMDE3QTAwMDA2MzI4MDAwMDAwMDAwMDIwNjMyM0RBODAwMDAwMDA0NUUKKzoxMDE3QjAwMDA2MzIzRDgwMDAwMDAwMDkwNDMyM0RBNDAwMDEwMkMxNTAKKzoxMDE3QzAwMDA2MzIzRDAwMDAwMDAwMjAwNjMyNTAwMDAwMDAwNDAwRjgKKzoxMDE3RDAwMDA2MzI0MDAwMDAwMDAwMDQwNjMyNDBEMDAwMDAwMDAyNDMKKzoxMDE3RTAwMDA2MzI2QjY4MDAwMDAwMDIwNDMyNkI3MDAwMDIwMkMyMTUKKzoxMDE3RjAwMDA2MzI2QjEwMDAwMDAwMDIwNDMyNzRDMDAwMDIwMkM0MDIKKzoxMDE4MDAwMDA2MzJEQTQwMDAwMDAwMDIwNjMyRTAwMDAwMDAwODAwNjQKKzoxMDE4MTAwMDAyMzMwODAwMDEwMDAwMDAwNDMzMEMwMDAwMTAwMkM2NkYKKzoxMDE4MjAwMDAyMzMwODAwMDAwMDAwMDAwNDMzMEM0MDAwMTAwMkQ2MTAKKzoxMDE4MzAwMDA2MzIyNDUwMDAwMDAwQjQwNjMyMkFEMDAwMDAwMDAyMTQKKzoxMDE4NDAwMDA2MzIxMDAwMDAwMDAxQTAwMjMyM0RCODAwMDAwMDAwODYKKzoxMDE4NTAwMDA2MzI1MDAwMDAwMDAwMjAwNjMyNTEwMDAwMDAwMDIwMzcKKzoxMDE4NjAwMDA2MzI1MjAwMDAwMDAwMjAwNjMyNTMwMDAwMDAwMDIwMjMKKzoxMDE4NzAwMDA2MzI1NDAwMDAwMDAwMjAwNjMyNTUwMDAwMDAwMDIwMEYKKzoxMDE4ODAwMDA2MzI1NjAwMDAwMDAwMjAwNjMyNTcwMDAwMDAwMDIwRkIKKzoxMDE4OTAwMDA2MzI1ODAwMDAwMDAwMjAwNjMyNTkwMDAwMDAwMDIwRTcKKzoxMDE4QTAwMDA2MzI1QTAwMDAwMDAwMjAwNjMyNUIwMDAwMDAwMDIwRDMKKzoxMDE4QjAwMDA2MzI1QzAwMDAwMDAwMjAwNjMyNUQwMDAwMDAwMDIwQkYKKzoxMDE4QzAwMDA2MzI1RTAwMDAwMDAwMjAwNjMyNUYwMDAwMDAwMDIwQUIKKzoxMDE4RDAwMDA2MzI2Qjc4MDAwMDAwNTIwNjMyNkUwODAwMDAwMDBDRTEKKzoxMDE4RTAwMDA2MzJEQTg4MDAwMDAwMDIwNjMyMjcyMDAwMDAwMEI0MjkKKzoxMDE4RjAwMDA2MzIyQUQ4MDAwMDAwMDIwNjMyMTY4MDAwMDAwMUEwM0QKKzoxMDE5MDAwMDAyMzIzREJDMDAwMDAwMDAwNjMyNTA4MDAwMDAwMDIwODIKKzoxMDE5MTAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwNzQKKzoxMDE5MjAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwNjAKKzoxMDE5MzAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwNEMKKzoxMDE5NDAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwMzgKKzoxMDE5NTAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwMjQKKzoxMDE5NjAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwMTAKKzoxMDE5NzAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwRkMKKzoxMDE5ODAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyNkNDMDAwMDAwMDUyNkEKKzoxMDE5OTAwMDA2MzI2RTM4MDAwMDAwMEMwNjMyREE5MDAwMDAwMDAyQjkKKzoxMDE5QTAwMDAyMzIyQTMwMDAwMDAwMDAwNjMyNDAxMDAwMDAwMDAyMUYKKzoxMDE5QjAwMDA2MzJEMDAwMDAwMDAwMDYwMjMyMkEzNDAwMDAwMDAwODcKKzoxMDE5QzAwMDA2MzI0MDIwMDAwMDAwMDIwNjMyRDAxODAwMDAwMDA2NTcKKzoxMDE5RDAwMDAyMzIyQTM4MDAwMDAwMDAwNjMyNDAzMDAwMDAwMDAyQzcKKzoxMDE5RTAwMDA2MzJEMDMwMDAwMDAwMDYwMjMyMkEzQzAwMDAwMDAwMUYKKzoxMDE5RjAwMDA2MzI0MDQwMDAwMDAwMDIwNjMyRDA0ODAwMDAwMDA2RDcKKzoxMDFBMDAwMDAyMzIyQTQwMDAwMDAwMDAwNjMyNDA1MDAwMDAwMDAyNkUKKzoxMDFBMTAwMDA2MzJEMDYwMDAwMDAwMDYwMjMyMkE0NDAwMDAwMDAwQjYKKzoxMDFBMjAwMDA2MzI0MDYwMDAwMDAwMDIwNjMyRDA3ODAwMDAwMDA2NTYKKzoxMDFBMzAwMDAyMzIyQTQ4MDAwMDAwMDAwNjMyNDA3MDAwMDAwMDAyMTYKKzoxMDFBNDAwMDA2MzJEMDkwMDAwMDAwMDYwMjMyMkE0QzAwMDAwMDAwNEUKKzoxMDFBNTAwMDA2MzI0MDgwMDAwMDAwMDIwNjMyRDBBODAwMDAwMDA2RDYKKzoxMDFBNjAwMDA3MjAwNDAwMDA5MzAwMDAwODIwMDc4MDAwMTAwMkU2MTEKKzoxMDFBNzAwMDA3MjQwMDAwMkFERTAwMDAwNzI0ODAwMDJFMDUwQUI4OTMKKzoxMDFBODAwMDA4MjRFNEEwNjFEMjAyRTgwMTIwMDAwMDAwMDAwMDAwNjgKKzoxMDFBOTAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwRjgKKzoxMDFBQTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwRDgKKzoxMDFBQjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxQUUKKzoxMDFBQzAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzODEKKzoxMDFBRDAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0NjIKKzoxMDFBRTAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwNDUKKzoxMDFBRjAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0MjEKKzoxMDFCMDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxMDQKKzoxMDFCMTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwRTIKKzoxMDFCMjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0QzAKKzoxMDFCMzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxQTQKKzoxMDFCNDAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwODIKKzoxMDFCNTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0NjAKKzoxMDFCNjAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0NDEKKzoxMDFCNzAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyMUMKKzoxMDFCODAwMDAyMjAwMEE0MDAwMDNGRkYwMjIwMDBBODAwMDAwM0ZGODUKKzoxMDFCOTAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwQTUKKzoxMDFCQTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGQkYKKzoxMDFCQjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxNjYKKzoxMDFCQzAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyNjkKKzoxMDFCRDAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFM0QKKzoxMDFCRTAwMDAyMjM4M0MwMDAwMDAxRjQwMjIzMTQ4MDAwMDAwMDAxREUKKzoxMDFCRjAwMDBBMjMxNDgwMDAwMDAwMDAwNjIyMTAwMDAwMDAwMDQyQUEKKzoxMDFDMDAwMDA2MjI3MDIwMDAwMDAwQzgwNjIyNzAwMDAwMDAwMDAyQkEKKzoxMDFDMTAwMDAyMjIxMUU4MDAwMDAwMDAwNjIyMzAwMDAwMDAwMEMwOEYKKzoxMDFDMjAwMDA2MjI0MDcwMDAwMDAwODAwNjIyNTI4MDAwMDAwMDA0NUUKKzoxMDFDMzAwMDA2MjI2NzAwMDAwMDAxMDAwNjIyOTAwMDAwMDAwNDAwNTgKKzoxMDFDNDAwMDA0MjI2QjA4MDAyMDAyRUEwMjIzMDgwMDAxM0ZGRkZGODQKKzoxMDFDNTAwMDA0MjMwQzAwMDAxMDAzMEEwMjIzMDgwMDAwMDAwMDAwMDcKKzoxMDFDNjAwMDA0MjMwQzQwMDAxMDAzMUEwNjIyODEwMDAwMDAwMEEwOEIKKzoxMDFDNzAwMDA2MjI4NjAwMDAwMDAwNDAwNjIyOEMwMDAwMDAwMDNDODYKKzoxMDFDODAwMDA2MjJCMDAwMDAwMDAyMDAwNjIyODgwMDAwMDAwMDgwNEEKKzoxMDFDOTAwMDA2MjI4REUwMDAwMDAwM0MwNjIyNDA0MDAwMDAwMDA2QzUKKzoxMDFDQTAwMDA2MjI4MzgwMDAwMDAwQTAwNjIyODcwMDAwMDAwMDQwN0EKKzoxMDFDQjAwMDA2MjI4Q0YwMDAwMDAwM0MwNjIyQjgwMDAwMDAwMjAwNjIKKzoxMDFDQzAwMDA2MjI4QTAwMDAwMDAwODAwNjIyOEVEMDAwMDAwMDNDMjAKKzoxMDFDRDAwMDA2MjI0MDU4MDAwMDAwMDYwNjIyODAwMDAwMDAwMDA4OEUKKzoxMDFDRTAwMDAyMjIxMTQ4MDAwMDAwMDAwNjIyMzMwMDAwMDAwMDAyMUEKKzoxMDFDRjAwMDA2MjI2MDQwMDAwMDAwMzAwNjIyODAyMDAwMDAwMDA4MUMKKzoxMDFEMDAwMDAyMjIxMTRDMDAwMDAwMDAwNjIyMzMwODAwMDAwMDAyRUQKKzoxMDFEMTAwMDA2MjI2MTAwMDAwMDAwMzAwNjIyODA0MDAwMDAwMDA4MUEKKzoxMDFEMjAwMDAyMjIxMTUwMDAwMDAwMDAwNjIyMzMxMDAwMDAwMDAyQzEKKzoxMDFEMzAwMDA2MjI2MUMwMDAwMDAwMzAwNjIyODA2MDAwMDAwMDA4MUEKKzoxMDFENDAwMDAyMjIxMTU0MDAwMDAwMDAwNjIyMzMxODAwMDAwMDAyOTUKKzoxMDFENTAwMDA2MjI2MjgwMDAwMDAwMzAwNjIyODA4MDAwMDAwMDA4MTkKKzoxMDFENjAwMDAyMjIxMTU4MDAwMDAwMDAwNjIyMzMyMDAwMDAwMDAyNjkKKzoxMDFENzAwMDA2MjI2MzQwMDAwMDAwMzAwNjIyODBBMDAwMDAwMDA4MTgKKzoxMDFEODAwMDAyMjIxMTVDMDAwMDAwMDAwNjIyMzMyODAwMDAwMDAyM0QKKzoxMDFEOTAwMDA2MjI2NDAwMDAwMDAwMzAwNjIyODBDMDAwMDAwMDA4MTcKKzoxMDFEQTAwMDAyMjIxMTYwMDAwMDAwMDAwNjIyMzMzMDAwMDAwMDAyMTEKKzoxMDFEQjAwMDA2MjI2NEMwMDAwMDAwMzAwNjIyODBFMDAwMDAwMDA4MTcKKzoxMDFEQzAwMDAyMjIxMTY0MDAwMDAwMDAwNjIyMzMzODAwMDAwMDAyRTUKKzoxMDFERDAwMDA2MjI2NTgwMDAwMDAwMzAwMjE2MTAwMDAwMDAwMDI4NzYKKzoxMDFERTAwMDAyMTcwMDA4MDAwMDAwMDIwMjE3MDAyQzAwMDAwMDAzODgKKzoxMDFERjAwMDAyMTcwMDNDMDAwMDAwMDQwMjE3MDA0NDAwMDAwMDA4MjUKKzoxMDFFMDAwMDAyMTcwMDQ4MDAwMDAwMDIwMjE3MDA0QzAwMDAwMDkwN0EKKzoxMDFFMTAwMDAyMTcwMDUwMDAwMDAwOTAwMjE3MDA1NDAwODAwMDkwNEMKKzoxMDFFMjAwMDAyMTcwMDU4MDgxNDAwMDAwMjE3MDA2MDAwMDAwMDhBMjIKKzoxMDFFMzAwMDAyMTcwMDY0MDAwMDAwODAwMjE3MDA2ODAwMDAwMDgxQTMKKzoxMDFFNDAwMDAyMTcwMDZDMDAwMDAwODAwMjE3MDA3MDAwMDAwMDA2RkUKKzoxMDFFNTAwMDAyMTcwMDc4MDAwMDA3RDAwMjE3MDA3QzAwMDAwNzZDMTIKKzoxMDFFNjAwMDAyMTcwMDM4MDA3QzEwMDQwMjE3MDAwNDAwMDAwMDBGNjUKKzoxMDFFNzAwMDA2MTY0MDI0MDAwMDAwMDIwMjE2NDA3MDAwMDAwMDFDRkMKKzoxMDFFODAwMDAyMTY0MjA4MDAwMDAwMDEwMjE2NDIxMDAwMDAwMDAxODQKKzoxMDFFOTAwMDAyMTY0MjIwMDAwMDAwMDEwMjE2NDIyODAwMDAwMDAxNDQKKzoxMDFFQTAwMDAyMTY0MjMwMDAwMDAwMDEwMjE2NDIzODAwMDAwMDAxMTQKKzoxMDFFQjAwMDAyMTY0MjYwMDAwMDAwMDIwQzE2NDAxQzAwMDNEMDkwODUKKzoxMDFFQzAwMDBBMTY0MDFDMDAwMDAwOUMwQjE2NDAxQzAwMDAwOUM0QjAKKzoxMDFFRDAwMDAyMTY0MDMwMDAwMDAwMDgwMjE2NDAzNDAwMDAwMDBDREEKKzoxMDFFRTAwMDAyMTY0MDM4MDAwMDAwMTAwMjE2NDA0NDAwMDAwMDIwOTYKKzoxMDFFRjAwMDAyMTY0MDAwMDAwMDAwMDEwMjE2NDBEODAwMDAwMDAxNTgKKzoxMDFGMDAwMDAyMTY0MDA4MDAwMDAwMDEwMjE2NDAwQzAwMDAwMDAxMEIKKzoxMDFGMTAwMDAyMTY0MDEwMDAwMDAwMDEwMjE2NDI0MDAwMDAwMDAwQkUKKzoxMDFGMjAwMDAyMTY0MjQ4MDAwMDAwMDAwNjE2NDI3MDAwMDAwMDAyM0YKKzoxMDFGMzAwMDAyMTY0MjUwMDAwMDAwMDAwMjE2NDI1ODAwMDAwMDAwNDUKKzoxMDFGNDAwMDA2MTY0MjgwMDAwMDAwMDIwMjE2NjAwODAwMDAwNDI0MDkKKzoxMDFGNTAwMDAyMTY2MDBDMDAwMDA0MTAwMjE2NjAxMDAwMDAwNDE0NDkKKzoxMDFGNjAwMDAyMTY2MDFDMDAwMEZGRkYwMjE2NjAyMDAwMDBGRkZGNDkKKzoxMDFGNzAwMDAyMTY2MDI0MDAwMEZGRkYwMjE2NjAyODAwMDBGRkZGMjkKKzoxMDFGODAwMDAyMTY2MDM4MDAwMDAwMjAwMjE2NjAzQzAwMDAwMDIwQUQKKzoxMDFGOTAwMDAyMTY2MDQwMDAwMDAwMzQwMjE2NjA0NDAwMDAwMDM1NjQKKzoxMDFGQTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0NjYKKzoxMDFGQjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2NDIKKzoxMDFGQzAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDI5MUQKKzoxMDFGRDAwMDAyMTY2MDYwMDAwMDAwMkEwMjE2NjA2NDAwMDAwMDJCRjgKKzoxMDFGRTAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJERDQKKzoxMDFGRjAwMDA2MTY2MDcwMDAwMDAwNTIwMjE2NjFCODAwMDAwMDAxNzEKKzoxMDIwMDAwMDA2MTY2MUJDMDAwMDAwMUYwMjE2NjIzODA3RkZGRkZGQzIKKzoxMDIwMTAwMDAyMTY2MjNDMDAwMDAwM0YwMjE2NjI0MDA3RkZGRkZGMEQKKzoxMDIwMjAwMDAyMTY2MjQ0MDAwMDAwMEYwMTE2NjI0ODAwMDAwMDAwMjIKKzoxMDIwMzAwMDAxMTY2MjRDMDAwMDAwMDAwMTE2NjI1MDAwMDAwMDAwMTIKKzoxMDIwNDAwMDAxMTY2MjU0MDAwMDAwMDAwMTE2NjI1ODAwMDAwMDAwRjIKKzoxMDIwNTAwMDAxMTY2MjVDMDAwMDAwMDAwMTE2NjI2MDAwMDAwMDAwRDIKKzoxMDIwNjAwMDAxMTY2MjY0MDAwMDAwMDAwMTE2NjI2ODAwMDAwMDAwQjIKKzoxMDIwNzAwMDAxMTY2MjZDMDAwMDAwMDAwMTE2NjI3MDAwMDAwMDAwOTIKKzoxMDIwODAwMDAxMTY2Mjc0MDAwMDAwMDAwMTE2NjI3ODAwMDAwMDAwNzIKKzoxMDIwOTAwMDAxMTY2MjdDMDAwMDAwMDAwQzE2NjAwMDAwMDAwM0U4REUKKzoxMDIwQTAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDBBMjQKKzoxMDIwQjAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1NjEKKzoxMDIwQzAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1M0QKKzoxMDIwRDAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0QUEKKzoxMDIwRTAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0MTQKKzoxMDIwRjAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0RjQKKzoxMDIxMDAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0RDMKKzoxMDIxMTAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA0OTMKKzoxMDIxMjAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNENjIKKzoxMDIxMzAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDMjAKKzoxMDIxNDAwMDAyMTY4MEYwMDAwMDAwMDcwNjE2ODBGNDAwMDAwMDA1NkIKKzoxMDIxNTAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODEwODAwMDAwMDAwMkUKKzoxMDIxNjAwMDAyMTY4MTBDMDAwMDAwMDQwMjE2ODExMDAwMDAwMDA0MTkKKzoxMDIxNzAwMDAyMTY4MTE0MDAwMDAwMDIwMjE2ODgxMDA4MDEyMDA0RDMKKzoxMDIxODAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODExQzAwMDAwMDA1REYKKzoxMDIxOTAwMDAyMTY4MTIwMDAwMDAwMDUwMjE2ODEyNDAwMDAwMDA1QkYKKzoxMDIxQTAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODEyODAwMDAwMDA4NjEKKzoxMDIxQjAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3ODQKKzoxMDIxQzAwMDAyMTY4MTM0MDAwMDAwMDAwMjE2ODgzMDAxMDEwMTIwNEYKKzoxMDIxRDAwMDA2MTY4MTM4MDAwMDAwMDQwMjE2ODgzNDAxMDEwMTAxNEUKKzoxMDIxRTAwMDAyMTY4MTQ4MDAwMDAwMDAwMjE2ODE0QzAwMDAwMDA0MjUKKzoxMDIxRjAwMDAyMTY4MTUwMDAwMDAwMDQwMjE2ODE1NDAwMDAwMDAyMDMKKzoxMDIyMDAwMDAyMTY4ODM4MDgwMTIwMDQwMjE2ODE1ODAwMDAwMDA1RDMKKzoxMDIyMTAwMDAyMTY4MTVDMDAwMDAwMDUwMjE2ODE2MDAwMDAwMDA1QzYKKzoxMDIyMjAwMDAyMTY4MTY0MDAwMDAwMDUwMjE2ODgzQzIwMDgxMDAxOTcKKzoxMDIyMzAwMDAyMTY4MTY4MDAwMDAwMDgwMjE2ODE2QzAwMDAwMDA2OEEKKzoxMDIyNDAwMDAyMTY4MTcwMDAwMDAwMDcwMjE2ODE3NDAwMDAwMDAxNzAKKzoxMDIyNTAwMDAyMTY4ODQwMDEwMTAxMjAwMjE2ODE3ODAwMDAwMDAxNjkKKzoxMDIyNjAwMDAyMTY4MTdDMDAwMDAwMDEwMjE2ODE4MDAwMDAwMDAxM0UKKzoxMDIyNzAwMDAyMTY4MTg0MDAwMDAwMDEwMjE2ODg0NDAxMDEwMTAxNTgKKzoxMDIyODAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODE4QzAwMDAwMDA0MDMKKzoxMDIyOTAwMDAyMTY4MTkwMDAwMDAwMDQwMjE2ODE5NDAwMDAwMDAyRTIKKzoxMDIyQTAwMDAyMTY4ODQ4MDgwMTIwMDQwMjE2ODE5ODAwMDAwMDA1RTMKKzoxMDIyQjAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1QTYKKzoxMDIyQzAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODgxNDIwMDgxMDAxREYKKzoxMDIyRDAwMDAyMTY4MUE4MDAwMDAwMDgwMjE2ODFBQzAwMDAwMDA2NkEKKzoxMDIyRTAwMDAyMTY4MUIwMDAwMDAwMDcwMjE2ODFCNDAwMDAwMDAxNTAKKzoxMDIyRjAwMDAyMTY4ODE4MDEwMTAxMjAwMjE2ODFCODAwMDAwMDAxQjEKKzoxMDIzMDAwMDAyMTY4MUJDMDAwMDAwMDEwMjE2ODFDMDAwMDAwMDAxMUQKKzoxMDIzMTAwMDAyMTY4MUM0MDAwMDAwMDEwMjE2ODgxQzAxMDEwMTAxOUYKKzoxMDIzMjAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODFDQzAwMDAwMDA0RTIKKzoxMDIzMzAwMDAyMTY4MUQwMDAwMDAwMDQwMjE2ODFENDAwMDAwMDAyQzEKKzoxMDIzNDAwMDAyMTY4ODIwMDgwMTIwMDQwMjE2ODFEODAwMDAwMDA1MkEKKzoxMDIzNTAwMDAyMTY4MURDMDAwMDAwMDUwMjE2ODFFMDAwMDAwMDA1ODUKKzoxMDIzNjAwMDAyMTY4MUU0MDAwMDAwMDUwMjE2ODgyNDIwMDgxMDAxRUUKKzoxMDIzNzAwMDAyMTY4MUU4MDAwMDAwMDgwMjE2ODFFQzAwMDAwMDA2NDkKKzoxMDIzODAwMDAyMTY4MUYwMDAwMDAwMDcwMjE2RTQwQzAwMDAwMDAwQjUKKzoxMDIzOTAwMDAyMTY4ODI4MDEwMTAxMjAwNjE2RTQxMDAwMDAwMDA0M0UKKzoxMDIzQTAwMDAyMTZFMDAwMDEwMTAxMDEwMjE2RTQyMDAwMDAwMDAwMTUKKzoxMDIzQjAwMDAyMTZFNDI0MDAwMDAwMDQwMjE2RTQyODAwMDAwMDA0RDEKKzoxMDIzQzAwMDAyMTZFNDJDMDAwMDAwMDIwMjE2RTAwNDA4MDEyMDA0QkEKKzoxMDIzRDAwMDAyMTZFNDMwMDAwMDAwMDUwMjE2RTQzNDAwMDAwMDA1OTcKKzoxMDIzRTAwMDAyMTZFNDM4MDAwMDAwMDUwMjE2RTQzQzAwMDAwMDA1NzcKKzoxMDIzRjAwMDAyMTZFMDA4MjAwODEwMDEwMjE2RTQ0MDAwMDAwMDA4NjAKKzoxMDI0MDAwMDAyMTZFNDQ0MDAwMDAwMDYwMjE2RTQ0ODAwMDAwMDA3M0IKKzoxMDI0MTAwMDAyMTZFNDRDMDAwMDAwMDAwMjE2RTAwQzAxMDEwMTIwNEQKKzoxMDI0MjAwMDA2MTZFNDUwMDAwMDAwMDQwMjE2RTAxMDAxMDEwMTAxNEMKKzoxMDI0MzAwMDAyMTZFNDYwMDAwMDAwMDAwMjE2RTQ2NDAwMDAwMDA0REMKKzoxMDI0NDAwMDAyMTZFNDY4MDAwMDAwMDQwMjE2RTQ2QzAwMDAwMDAyQkEKKzoxMDI0NTAwMDAyMTZFMDE0MDgwMTIwMDQwMjE2RTQ3MDAwMDAwMDA1RDIKKzoxMDI0NjAwMDAyMTZFNDc0MDAwMDAwMDUwMjE2RTQ3ODAwMDAwMDA1N0UKKzoxMDI0NzAwMDAyMTZFNDdDMDAwMDAwMDUwMjE2RTAxODIwMDgxMDAxOTYKKzoxMDI0ODAwMDAyMTZFNDgwMDAwMDAwMDgwMjE2RTQ4NDAwMDAwMDA2NDIKKzoxMDI0OTAwMDAyMTZFNDg4MDAwMDAwMDcwMjE2RTQ4QzAwMDAwMDAxMjgKKzoxMDI0QTAwMDAyMTZFMDFDMDEwMTAxMjAwMjE2RTQ5MDAwMDAwMDAxNjgKKzoxMDI0QjAwMDAyMTZFNDk0MDAwMDAwMDEwMjE2RTQ5ODAwMDAwMDAxRjYKKzoxMDI0QzAwMDAyMTZFNDlDMDAwMDAwMDEwMjE2RTAyMDAxMDEwMTAxNTcKKzoxMDI0RDAwMDAyMTZFNEEwMDAwMDAwMDEwMjE2RTRBNDAwMDAwMDA0QkIKKzoxMDI0RTAwMDAyMTZFNEE4MDAwMDAwMDQwMjE2RTRBQzAwMDAwMDAyOUEKKzoxMDI0RjAwMDAyMTZFMDI0MDgwMTIwMDQwMjE2RTRCMDAwMDAwMDA1RTIKKzoxMDI1MDAwMDAyMTZFNEI0MDAwMDAwMDUwMjE2RTRCODAwMDAwMDA1NUQKKzoxMDI1MTAwMDAyMTZFNEJDMDAwMDAwMDUwMjE2RTAyODIwMDgxMDAxQTUKKzoxMDI1MjAwMDAyMTZFNEMwMDAwMDAwMDgwMjE2RTRDNDAwMDAwMDA2MjEKKzoxMDI1MzAwMDAyMTZFNEM4MDAwMDAwMDcwMjE2RTRDQzAwMDAwMDAxMDcKKzoxMDI1NDAwMDAyMTZFMDJDMDEwMTAxMjAwMjE2RTREMDAwMDAwMDAxNzcKKzoxMDI1NTAwMDAyMTZFNEQ0MDAwMDAwMDEwMjE2RTREODAwMDAwMDAxRDUKKzoxMDI1NjAwMDAyMTZFNERDMDAwMDAwMDEwMjE2RTAzMDAxMDEwMTAxNjYKKzoxMDI1NzAwMDAyMTZFNEUwMDAwMDAwMDEwMjE2RTRFNDAwMDAwMDA0OUEKKzoxMDI1ODAwMDAyMTZFNEU4MDAwMDAwMDQwMjE2RTRFQzAwMDAwMDAyNzkKKzoxMDI1OTAwMDAyMTZFMDM0MDgwMTIwMDQwMjE2RTRGMDAwMDAwMDA1RjEKKzoxMDI1QTAwMDAyMTZFNEY0MDAwMDAwMDUwMjE2RTRGODAwMDAwMDA1M0QKKzoxMDI1QjAwMDAyMTZFNEZDMDAwMDAwMDUwMjE2RTAzODIwMDgxMDAxQjUKKzoxMDI1QzAwMDAyMTZFNTAwMDAwMDAwMDgwMjE2RTUwNDAwMDAwMDA2RkYKKzoxMDI1RDAwMDAyMTZFNTA4MDAwMDAwMDcwMjE2RTAzQzAxMDEwMTIwOTgKKzoxMDI1RTAwMDAyMTY4MjQwMDAzRjAwM0YwMjE2ODI0NDAwMDAwMDAwQjUKKzoxMDI1RjAwMDAyMTZFNTI0MDAzRjAwM0YwMjE2RTUyODAwMDAwMDAwMTcKKzoxMDI2MDAwMDAyMTY4MjQ4MDAwMDAwMDAwMjE2ODI0QzAwM0YwMDNGODQKKzoxMDI2MTAwMDAyMTZFNTJDMDAwMDAwMDAwMjE2RTUzMDAwM0YwMDNGRTYKKzoxMDI2MjAwMDAyMTY4MjUwMDEwMDAxMDAwMjE2ODI1NDAxMDAwMTAwQ0UKKzoxMDI2MzAwMDAyMTZFNTM0MDEwMDAxMDAwMjE2RTUzODAxMDAwMTAwMzAKKzoxMDI2NDAwMDA2MTY4MjU4MDAwMDAwMDIwMjE2RTUzQzAwMDAwMDAwNTkKKzoxMDI2NTAwMDAyMTZFNTQwMDAwMDAwMDAwMjE2ODI2MDAwQzAwMEMwQzMKKzoxMDI2NjAwMDAyMTY4MjY0MDBDMDAwQzAwMjE2RTU0NDAwQzAwMEMwMkIKKzoxMDI2NzAwMDAyMTZFNTQ4MDBDMDAwQzAwMjE2ODI2ODFFMDAxRTAwNTcKKzoxMDI2ODAwMDAyMTY4MjZDMUUwMDFFMDAwMjE2RTU0QzFFMDAxRTAwODMKKzoxMDI2OTAwMDAyMTZFNTUwMUUwMDFFMDAwMjE2ODI3MDQwMDA0MDAwMjcKKzoxMDI2QTAwMDAyMTY4Mjc0NDAwMDQwMDAwMjE2RTU1NDQwMDA0MDAwQ0IKKzoxMDI2QjAwMDAyMTZFNTU4NDAwMDQwMDAwMjE2ODI3ODgwMDA4MDAwMzMKKzoxMDI2QzAwMDAyMTY4MjdDODAwMDgwMDAwMjE2RTU1QzgwMDA4MDAwOUIKKzoxMDI2RDAwMDAyMTZFNTYwODAwMDgwMDAwMjE2ODI4MDIwMDAyMDAwNDMKKzoxMDI2RTAwMDAyMTY4Mjg0MjAwMDIwMDAwMjE2RTU2NDIwMDAyMDAwRUIKKzoxMDI2RjAwMDAyMTZFNTY4MjAwMDIwMDAwNjE2ODI4ODAwMDAwMDAyMEQKKzoxMDI3MDAwMDAyMTZFNTZDMDAwMDAwMDAwMjE2RTU3MDAwMDAwMDAwRjMKKzoxMDI3MTAwMDAyMTY4MjkwMDAwMDAwMDAwMjE2ODI5NDAwMDAwMDAwNjEKKzoxMDI3MjAwMDAyMTZFNTc0MDAwMDAwMDAwMjE2RTU3ODAwMDAwMDAwQzMKKzoxMDI3MzAwMDAyMTY4Mjk4MDAwMDAwMDAwMjE2ODI5QzAwMDAwMDAwMzEKKzoxMDI3NDAwMDAyMTZFNTdDMDAwMDAwMDAwMjE2RTU4MDAwMDAwMDAwOTMKKzoxMDI3NTAwMDAyMTY4MkEwMDAwMDAwMDAwMjE2ODJBNDAwMDAwMDAxMDAKKzoxMDI3NjAwMDA2MTY4MkE4MDAwMDAwMEEwMjE2ODFGNDAwMDAwQzA4NzgKKzoxMDI3NzAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwRjIKKzoxMDI3ODAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3REEKKzoxMDI3OTAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwNkYKKzoxMDI3QTAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIxODAxRkYwMUZGQ0QKKzoxMDI3QjAwMDAyMTY4MjE0MDFGRjAxRkYwMjE2RTUxMDAxRkYwMUZGNUUKKzoxMDI3QzAwMDAyMTZFNTBDMDFGRjAxRkYwMjE2ODIzQzAwMDAwMDEzMTcKKzoxMDI3RDAwMDAyMTY4MDkwMDAwMDAxM0YwMjE2ODA2MDAwMDAwMTQwNTgKKzoxMDI3RTAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA2ODAwMDAwMDAyQTYKKzoxMDI3RjAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA3RkEKKzoxMDI4MDAwMDAyMTY4MDlDMDAwMDAwNDgwMjE2ODBBMDAwMDAwMDQ4Q0MKKzoxMDI4MTAwMDA2MTY4MEE0MDAwMDAwMDIwMjE2ODBBQzAwMDAwMDQ4RUEKKzoxMDI4MjAwMDA2MTY4MEIwMDAwMDAwMDcwMjE2ODIzODAwMDA4MDAwMDMKKzoxMDI4MzAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODA5NDAwMDA3RkZGMTcKKzoxMDI4NDAwMDAyMTY4MjIwMDAwRjAwMEYwMjE2ODIxQzAwMEYwMDBGREMKKzoxMDI4NTAwMDAyMTZFNTE4MDAwRjAwMEYwMjE2RTUxNDAwMEYwMDBGMTYKKzoxMDI4NjAwMDAyMTY4MjI4MDAwMDAwMDAwMjE2ODIyNEZGRkZGRkZGRUMKKzoxMDI4NzAwMDAyMTZFNTIwMDAwMDAwMDAwMjE2RTUxQ0ZGRkZGRkZGMjYKKzoxMDI4ODAwMDAyMTZFNkJDMDAwMDAwMDAwMjE2RTZDMDAwMDAwMDAyQ0UKKzoxMDI4OTAwMDAyMTZFNkM0MDAwMDAwMDEwMjE2RTZDODAwMDAwMDAzQUMKKzoxMDI4QTAwMDAyMTZFNkNDMDAwMDAwMDQwMjE2RTZEMDAwMDAwMDA2ODYKKzoxMDI4QjAwMDAyMTZFNkQ0MDAwMDAwMDUwMjE2RTZEODAwMDAwMDA3NjQKKzoxMDI4QzAwMDAyMTY4MEVDMDAwMDAwRkYwMjE0MDAwMDAwMDAwMDAxNkUKKzoxMDI4RDAwMDAyMTQwMDBDMDAwMDAwMDEwMjE0MDA0MDAwMDAwMDAxN0UKKzoxMDI4RTAwMDAyMTQwMDQ0MDAwMDdGRkYwMjE0MDAwQzAwMDAwMDAwRUUKKzoxMDI4RjAwMDAyMTQwMDAwMDAwMDAwMDAwMjE0MDA2QzAwMDAwMDAwNDAKKzoxMDI5MDAwMDAyMTQwMDA0MDAwMDAwMDEwMjE0MDAzMDAwMDAwMDAxNjUKKzoxMDI5MTAwMDAyMTQwMDA0MDAwMDAwMDAwMjE0MDA1QzAwMDAwMDAwMkIKKzoxMDI5MjAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxM0QKKzoxMDI5MzAwMDAyMTQwMDA4MDAwMDAwMDAwMjE0MDA2MDAwMDAwMDAwMDMKKzoxMDI5NDAwMDAyMDIwMDU4MDAwMDAwMzIwMjAyMDBBMDAzMTUwMDIwMUQKKzoxMDI5NTAwMDAyMDIwMEE0MDMxNTAwMjAwMjAyMDBBODAxMDAwMDMwQkEKKzoxMDI5NjAwMDAyMDIwMEFDMDgxMDAwMDAwMjAyMDBCMDAwMDAwMDMzQjgKKzoxMDI5NzAwMDAyMDIwMEI0MDAwMDAwMzAwMjAyMDBCODAwMDAwMDMxODIKKzoxMDI5ODAwMDAyMDIwMEJDMDAwMDAwMDMwMjAyMDBDMDAwMDAwMDA2QkEKKzoxMDI5OTAwMDAyMDIwMEM0MDAwMDAwMDMwMjAyMDBDODAwMDAwMDAzOUQKKzoxMDI5QTAwMDAyMDIwMENDMDAwMDAwMDIwMjAyMDBEMDAwMDAwMDAwODEKKzoxMDI5QjAwMDAyMDIwMEQ0MDAwMDAwMDIwMjAyMDBEQzAwMDAwMDAwNUQKKzoxMDI5QzAwMDAyMDIwMEUwMDAwMDAwMDYwMjAyMDBFNDAwMDAwMDA0MzEKKzoxMDI5RDAwMDAyMDIwMEU4MDAwMDAwMDIwMjAyMDBFQzAwMDAwMDAyMTcKKzoxMDI5RTAwMDAyMDIwMEYwMDAwMDAwMDEwMjAyMDBGQzAwMDAwMDA2RUMKKzoxMDI5RjAwMDAyMDIwMTIwMDAwMDAwMDAwMjAyMDEzNDAwMDAwMDAyNzcKKzoxMDJBMDAwMDAyMDIwMUIwMDAwMDAwMDEwMjAyMDIwQzAwMDAwMDAxRkQKKzoxMDJBMTAwMDAyMDIwMjE0MDAwMDAwMDEwMjAyMDIxODAwMDAwMDAyN0IKKzoxMDJBMjAwMDAyMDIwNDA0MDAwMDAwMDEwMjAyMDQwQzAwMDAwMDQwNDUKKzoxMDJBMzAwMDAyMDIwNDEwMDAwMDAwNDAwMjAyMDQxQzAwMDAwMDA0MTYKKzoxMDJBNDAwMDAyMDIwNDIwMDAwMDAwMjAwMjAyMDQyNDAwMDAwMDAyMTAKKzoxMDJBNTAwMDAyMDIwNDI4MDAwMDAwMjAwNjAyMDUwMDAwMDAwMDEyMDcKKzoxMDJBNjAwMDA0MDIwNDgwMDAxRjAzMkEwMjAyMDA2MDAwMDAwMDBGMUQKKzoxMDJBNzAwMDAyMDIwMDY0MDAwMDAwMDcwMjAyMDA2ODAwMDAwMDBCNzAKKzoxMDJBODAwMDAyMDIwMDZDMDAwMDAwMEUwMjAyMDA3MDAwMDAwMDBFNDYKKzoxMDJBOTAwMDA2MDIwMDc0MDAwMDAwMDMwMjAyMDBGNDAwMDAwMDA0QkIKKzoxMDJBQTAwMDAyMDIwMDA0MDAwMDAwMDEwMjAyMDAwODAwMDAwMDAxMTAKKzoxMDJBQjAwMDAyMDIwMDBDMDAwMDAwMDEwMjAyMDAxMDAwMDAwMDAxRjAKKzoxMDJBQzAwMDAyMDIwMDE0MDAwMDAwMDEwMjAyMDAxODAwMDAwMDAxRDAKKzoxMDJBRDAwMDAyMDIwMDFDMDAwMDAwMDEwMjAyMDAyMDAwMDAwMDAxQjAKKzoxMDJBRTAwMDAyMDIwMDI0MDAwMDAwMDEwMjAyMDAyODAwMDAwMDAxOTAKKzoxMDJBRjAwMDAyMDIwMDJDMDAwMDAwMDEwMjAyMDAzMDAwMDAwMDAxNzAKKzoxMDJCMDAwMDAyMDIwMDM0MDAwMDAwMDEwMjAyMDAzODAwMDAwMDAxNEYKKzoxMDJCMTAwMDAyMDIwMDNDMDAwMDAwMDEwMjAyMDA0MDAwMDAwMDAxMkYKKzoxMDJCMjAwMDAyMDIwMDQ0MDAwMDAwMDEwMjAyMDA0ODAwMDAwMDAxMEYKKzoxMDJCMzAwMDAyMDIwMDRDMDAwMDAwMDEwMjAyMDA1MDAwMDAwMDAxRUYKKzoxMDJCNDAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyOTEKKzoxMDJCNTAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwREIKKzoxMDJCNjAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyQTcKKzoxMDJCNzAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGN0QKKzoxMDJCODAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4NjcKKzoxMDJCOTAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwNDUKKzoxMDJCQTAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyNzEKKzoxMDJCQjAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGNDIKKzoxMDJCQzAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwMDgKKzoxMDJCRDAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyMDEKKzoxMDJCRTAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwNEIKKzoxMDJCRjAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyMTcKKzoxMDJDMDAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGRUMKKzoxMDJDMTAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4RDYKKzoxMDJDMjAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwQjQKKzoxMDJDMzAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyRTAKKzoxMDJDNDAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGQjEKKzoxMDJDNTAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwNzcKKzoxMDJDNjAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyNzAKKzoxMDJDNzAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwQkEKKzoxMDJDODAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyODYKKzoxMDJDOTAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGNUMKKzoxMDJDQTAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4NDYKKzoxMDJDQjAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwMjQKKzoxMDJDQzAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyNTAKKzoxMDJDRDAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGMjEKKzoxMDJDRTAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwRTcKKzoxMDJDRjAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyRTAKKzoxMDJEMDAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwMjkKKzoxMDJEMTAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyRjUKKzoxMDJEMjAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGQ0IKKzoxMDJEMzAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4QjUKKzoxMDJENDAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwOTMKKzoxMDJENTAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyQkYKKzoxMDJENjAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGOTAKKzoxMDJENzAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwNTYKKzoxMDJEODAwMDA3MjgwNDAwMDBDMDAwMDAwODI4MDdBODAwMEIwMzQ5MUEKKzoxMDJEOTAwMDA3MkMwMDAwMzJGQzAwMDAwNzJDODAwMDM1NzgwQ0MwQTYKKzoxMDJEQTAwMDA3MkQwMDAwM0FDMTFBMUYwNzJEODAwMDM5RTIyOEQwRjQKKzoxMDJEQjAwMDA3MkUwMDAwMUMzRTM3NDkwODJFMzcxMDM5MUUwMzRCRTIKKzoxMDJEQzAwMDAxMjgwMDAwMDAwMDAwMDAwMTI4MDAwNDAwMDAwMDAwQUQKKzoxMDJERDAwMDAxMjgwMDA4MDAwMDAwMDAwMTI4MDAwQzAwMDAwMDAwOEQKKzoxMDJERTAwMDAxMjgwMDEwMDAwMDAwMDAwMTI4MDAxNDAwMDAwMDAwNkQKKzoxMDJERjAwMDAyMjgwMDIwMDAwMDAwMDEwMjI4MDAyNDAwMDAwMDAyMzgKKzoxMDJFMDAwMDAyMjgwMDI4MDAwMDAwMDMwMjI4MDAyQzAwMDAwMDAwMTcKKzoxMDJFMTAwMDAyMjgwMDMwMDAwMDAwMDQwMjI4MDAzNDAwMDAwMDAxRjUKKzoxMDJFMjAwMDAyMjgwMDM4MDAwMDAwMDAwMjI4MDAzQzAwMDAwMDAxRDkKKzoxMDJFMzAwMDAyMjgwMDQwMDAwMDAwMDQwMjI4MDA0NDAwMDAwMDAwQjYKKzoxMDJFNDAwMDAyMjgwMDQ4MDAwMDAwMDEwMjI4MDA0QzAwMDAwMDAzOTYKKzoxMDJFNTAwMDAyMjgwMDUwMDAwMDAwMDAwMjI4MDA1NDAwMDAwMDAxNzkKKzoxMDJFNjAwMDAyMjgwMDU4MDAwMDAwMDQwMjI4MDA1QzAwMDAwMDAwNTYKKzoxMDJFNzAwMDAyMjgwMDYwMDAwMDAwMDEwMjI4MDA2NDAwMDAwMDAzMzYKKzoxMDJFODAwMDAyMjgwMDY4MDAwMDAwMDAwMjI4MDA2QzAwMDAwMDAxMTkKKzoxMDJFOTAwMDAyMjgwMDcwMDAwMDAwMDQwMjI4MDA3NDAwMDAwMDAwRjYKKzoxMDJFQTAwMDAyMjgwMDc4MDAwMDAwMDQwMjI4MDA3QzAwMDAwMDAzRDMKKzoxMDJFQjAwMDA2MjgwMDgwMDAwMDAwMDIwMjI4MDBBNDAwMDAzRkZGNTYKKzoxMDJFQzAwMDAyMjgwMEE4MDAwMDAzRkYwMjI4MDIyNDAwMDAwMDAwREUKKzoxMDJFRDAwMDAyMjgwMjM0MDAwMDAwMDAwMjI4MDI0QzAwMDAwMDAwMUEKKzoxMDJFRTAwMDAyMjgwMkU0MDAwMEZGRkYwNjI4MjAwMDAwMDAwODAwN0UKKzoxMDJFRjAwMDAyMkI4QkMwMDAwMDAwMDEwMjJCODAwMDAwMDAwMDAwQUMKKzoxMDJGMDAwMDAyMkI4MDQwMDAwMDAwMTgwMjJCODA4MDAwMDAwMDBDODMKKzoxMDJGMTAwMDAyMkI4MEMwMDAwMDAwNjYwQzJCODMwMDAwMDdBMTIwNUMKKzoxMDJGMjAwMDBBMkI4MzAwMDAwMDAxMzgwQjJCODMwMDAwMDAxMzg4NUMKKzoxMDJGMzAwMDAyMkI4M0MwMDAwMDAxRjQwQzJCODM0MDAwMDAwMUY0M0QKKzoxMDJGNDAwMDBBMkI4MzQwMDAwMDAwMDAwQjJCODM0MDAwMDAwMDA1OEIKKzoxMDJGNTAwMDBBMkI4MzgwMDAwNEM0QjQwQzJCODM4MDFEQ0Q2NTAwMzQKKzoxMDJGNjAwMDBBMkIxNDgwMDAwMDAwMDAwQjJCODM4MDAwNEM0QjQwODgKKzoxMDJGNzAwMDAyMkIxNDgwMDAwMDAwMDEwNjJBMjlDODAwMDAwMDA0NkEKKzoxMDJGODAwMDA0MkEyOUQ4MDAwMjAzNEQwNjJBMjA4MDAwMDAwMDQ4QTgKKzoxMDJGOTAwMDA2MkE5MDIwMDAwMDAwQzgwNjJBOTAwMDAwMDAwMDAyQzcKKzoxMDJGQTAwMDA2MkEyMUE4MDAwMDAwODYwNjJBMjAwMDAwMDAwMDIwMzIKKzoxMDJGQjAwMDAyMkEyM0M4MDAwMDAwMDAwNDJBMjNEMDAwMDIwMzRGODUKKzoxMDJGQzAwMDA0MkEyNDk4MDAwNDAzNTEwMjJBMkM1MDAwMDAwMDAwMTcKKzoxMDJGRDAwMDAyMkEyQzEwMDAwMDAwMDAwNDJBMkMwODAwMDIwMzU1Q0QKKzoxMDJGRTAwMDA0MkEzMDAwMDAwMjAzNTcwNjJBMzAwODAwMDAwMTAwQkUKKzoxMDJGRjAwMDA2MkE0MDQwMDAwMDAwMTAwNDJBNDAwMDAwMTAwMzU5MzcKKzoxMDMwMDAwMDA2MkE2QUMwMDAwMDAwMDIwNjJBNkIwMDAwMDAwMDA0QzUKKzoxMDMwMTAwMDA0MkE4NDA4MDAwMjAzNjkwMjJCMDgwMDAwMDAwMDAwNTMKKzoxMDMwMjAwMDA0MkIwQzAwMDAxMDAzNkIwMjJCMDgwMDAxMDAwMDAwQjEKKzoxMDMwMzAwMDA0MkIwQzQwMDAwODAzN0IwMjJCMDgwMDAyMDAwMDAwNTgKKzoxMDMwNDAwMDA0MkIwQzYwMDAwODAzODMwNjJBQzAwMDAwMDAwMEQ4OEYKKzoxMDMwNTAwMDA2MkEyNEE4MDAwMDAwMTQwNjJBMjU0ODAwMDAwMDIyQTEKKzoxMDMwNjAwMDA0MkEyNUQwMDAwMjAzOEIwNjJBMjY2ODAwMDAwMDIyQ0QKKzoxMDMwNzAwMDA0MkEyNkYwMDAwMjAzOEQwNjJBMjc4ODAwMDAwMDIyNzkKKzoxMDMwODAwMDA0MkEyODEwMDAwMjAzOEYwNjJBMjhBODAwMDAwMDIyMjQKKzoxMDMwOTAwMDA0MkEyOTMwMDAwMjAzOTEwNjJBQTAwMDAwMDAwMDI4MUIKKzoxMDMwQTAwMDA2MkFBMTQwMDAwMDAwMEMwNDJBMjlFMDAwMDIwMzkzMzQKKzoxMDMwQjAwMDA2MkE1MDIwMDAwMDAwMDIwNjJBNTAzMDAwMDAwMDAyQkMKKzoxMDMwQzAwMDA2MkE1MDAwMDAwMDAwMDIwNjJBNTAxMDAwMDAwMDAyRUMKKzoxMDMwRDAwMDAyMkE1MjA4MDAwMDAwMDEwNDJBNkFDODAwMDIwMzk1NkYKKzoxMDMwRTAwMDA2MkE2QjEwMDAwMDAwNDIwNjJBNkQyMDAwMDAwMDA0MzIKKzoxMDMwRjAwMDA2MkFCQ0QwMDAwMDAwMDIwNjJBQzM2MDAwMDAwMEQ4RTcKKzoxMDMxMDAwMDA2MkEyNEY4MDAwMDAwMTQwNjJBMjVEODAwMDAwMDIyMTAKKzoxMDMxMTAwMDA0MkEyNjYwMDAwMjAzOTcwNjJBMjZGODAwMDAwMDIyRUYKKzoxMDMxMjAwMDA0MkEyNzgwMDAwMjAzOTkwNjJBMjgxODAwMDAwMDIyOUEKKzoxMDMxMzAwMDA0MkEyOEEwMDAwMjAzOUIwNjJBMjkzODAwMDAwMDIyNDYKKzoxMDMxNDAwMDA0MkEyOUMwMDAwMjAzOUQwNjJBQTBBMDAwMDAwMDI4MkUKKzoxMDMxNTAwMDA2MkFBMTcwMDAwMDAwMEMwNDJBMjlFODAwMDIwMzlGM0YKKzoxMDMxNjAwMDA2MkE1MDI4MDAwMDAwMDIwNjJBNTAzODAwMDAwMDAyRkIKKzoxMDMxNzAwMDA2MkE1MDA4MDAwMDAwMDIwNjJBNTAxODAwMDAwMDAyMkIKKzoxMDMxODAwMDAyMkE1MjBDMDAwMDAwMDEwNDJBNkFEMDAwMDIwM0ExQTYKKzoxMDMxOTAwMDA2MkE2QzE4MDAwMDAwNDIwNjJBNkQzMDAwMDAwMDA0NjgKKzoxMDMxQTAwMDA2MkFCQ0Q4MDAwMDAwMDIwMjJBQzZDMDAwMDAwMDAwQTcKKzoxMDMxQjAwMDA0MkEyOUYwMDAxMDAzQTMwNjJBNTA0ODAwMDAwMDBFM0MKKzoxMDMxQzAwMDA2MkFCMDAwMDAwMDAwMDYwMjJBQzZDNDAwMDAwMDAwNjMKKzoxMDMxRDAwMDA0MkEyQTMwMDAxMDAzQjMwNjJBNTA4MDAwMDAwMDBFOTMKKzoxMDMxRTAwMDA2MkFCMDE4MDAwMDAwMDYwMjJBQzZDODAwMDAwMDAwMjcKKzoxMDMxRjAwMDA0MkEyQTcwMDAxMDAzQzMwNjJBNTBCODAwMDAwMDBFRUIKKzoxMDMyMDAwMDA2MkFCMDMwMDAwMDAwMDYwMjJBQzZDQzAwMDAwMDAwRUEKKzoxMDMyMTAwMDA0MkEyQUIwMDAxMDAzRDMwNjJBNTBGMDAwMDAwMDBFNDIKKzoxMDMyMjAwMDA2MkFCMDQ4MDAwMDAwMDYwMjJBQzZEMDAwMDAwMDAwQUUKKzoxMDMyMzAwMDA0MkEyQUYwMDAxMDAzRTMwNjJBNTEyODAwMDAwMDBFOTkKKzoxMDMyNDAwMDA2MkFCMDYwMDAwMDAwMDYwMjJBQzZENDAwMDAwMDAwNzIKKzoxMDMyNTAwMDA0MkEyQjMwMDAxMDAzRjMwNjJBNTE2MDAwMDAwMDBFRjAKKzoxMDMyNjAwMDA2MkFCMDc4MDAwMDAwMDYwMjJBQzZEODAwMDAwMDAwMzYKKzoxMDMyNzAwMDA0MkEyQjcwMDAxMDA0MDMwNjJBNTE5ODAwMDAwMDBFNDcKKzoxMDMyODAwMDA2MkFCMDkwMDAwMDAwMDYwMjJBQzZEQzAwMDAwMDAwRkEKKzoxMDMyOTAwMDA0MkEyQkIwMDAxMDA0MTMwNjJBNTFEMDAwMDAwMDBFOUYKKzoxMDMyQTAwMDA2MkFCMEE4MDAwMDAwMDYwMjEwMTAwODAwMDAwMDAxNjUKKzoxMDMyQjAwMDAyMTAxMDUwMDAwMDAwMDEwMjEwMTAwMDAwMDNEMDAwQTYKKzoxMDMyQzAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwNDIzNDEKKzoxMDMyRDAwMDA5MTAxMTAwMDAyODA2MjMwNjEwMTFBMDAwMDAwMDE4OTQKKzoxMDMyRTAwMDA2MTAyNDAwMDAwMDAwRTAwMjEwMjAxQzAwMDAwMDAwNzYKKzoxMDMyRjAwMDAyMTAyMDIwMDAwMDAwMDEwMjEwMjBDMDAwMDAwMDAyODcKKzoxMDMzMDAwMDAyMTAyMDA0MDAwMDAwMDEwMjEwMjAwODAwMDAwMDAxNEIKKzoxMDMzMTAwMDA5MTAzQzAwMDAwNTA2NEIwOTEwMzgwMDAwMDUwNjUwNTYKKzoxMDMzMjAwMDA5MTAzODIwMDAwNTA2NTUwNjEwNEMwMDAwMDAwMTAwNjkKKzoxMDMzMzAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGMkYKKzoxMDMzNDAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBNzUKKzoxMDMzNTAwMDAyMTA0MDU4MDAwMDAwMDAwMjEwODAwMDAwMDAxMDgwQTEKKzoxMDMzNjAwMDAyMTA4MEFDMDAwMDAwMDAwMjEwODAzODAwMDAwMDEwNDUKKzoxMDMzNzAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMDEKKzoxMDMzODAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNEEKKzoxMDMzOTAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQjEKKzoxMDMzQTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMTgKKzoxMDMzQjAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBMzIKKzoxMDMzQzAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRTUKKzoxMDMzRDAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAxODQKKzoxMDMzRTAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwNjgKKzoxMDMzRjAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1QjcKKzoxMDM0MDAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBMzIKKzoxMDM0MTAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyMkQKKzoxMDM0MjAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MTIKKzoxMDM0MzAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBQzYKKzoxMDM0NDAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwN0MKKzoxMDM0NTAwMDAyMTA4MEFDMDAwMDAwMDIwMjEwODAzODAwMDAwMDEwNTIKKzoxMDM0NjAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMTAKKzoxMDM0NzAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNTkKKzoxMDM0ODAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQzAKKzoxMDM0OTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMjcKKzoxMDM0QTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNDEKKzoxMDM0QjAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRjQKKzoxMDM0QzAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAzOTEKKzoxMDM0RDAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwNzcKKzoxMDM0RTAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1QzYKKzoxMDM0RjAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNDIKKzoxMDM1MDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyM0MKKzoxMDM1MTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MjEKKzoxMDM1MjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRDUKKzoxMDM1MzAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOEIKKzoxMDM1NDAwMDAyMTA4MEFDMDAwMDAwMDQwMjEwODAzODAwMDAwMDEwNUYKKzoxMDM1NTAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMUYKKzoxMDM1NjAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNjgKKzoxMDM1NzAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQ0YKKzoxMDM1ODAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMzYKKzoxMDM1OTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNTAKKzoxMDM1QTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMDMKKzoxMDM1QjAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA1OUUKKzoxMDM1QzAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwODYKKzoxMDM1RDAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RDUKKzoxMDM1RTAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNTEKKzoxMDM1RjAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNEMKKzoxMDM2MDAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MzAKKzoxMDM2MTAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRTQKKzoxMDM2MjAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOUEKKzoxMDM2MzAwMDAyMTA4MEFDMDAwMDAwMDYwMjEwODAzODAwMDAwMDEwNkMKKzoxMDM2NDAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMkUKKzoxMDM2NTAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNzcKKzoxMDM2NjAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGREUKKzoxMDM2NzAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwNDUKKzoxMDM2ODAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNUYKKzoxMDM2OTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMTIKKzoxMDM2QTAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA3QUIKKzoxMDM2QjAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwOTUKKzoxMDM2QzAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RTQKKzoxMDM2RDAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNjAKKzoxMDM2RTAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNUIKKzoxMDM2RjAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0NDAKKzoxMDM3MDAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRjMKKzoxMDM3MTAwMDA2MTA5NkU4MDAwMDAwNEEwMjEyMDVCMDAwMDAwMDAxMDEKKzoxMDM3MjAwMDAyMTIwNDkwMDBFMzgzNDAwMjEyMDUxNDAwMDAzQzEwRDIKKzoxMDM3MzAwMDAyMTIwNjZDMDAwMDAwMDEwMjEyMDY3MDAwMDAwMDAwNzgKKzoxMDM3NDAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMjUKKzoxMDM3NTAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGMDUKKzoxMDM3NjAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGRTUKKzoxMDM3NzAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGQzUKKzoxMDM3ODAwMDAyMTIwNEJDRkZGRkZGRkYwMjEyMDRDMEZGRkZGRkZGOTUKKzoxMDM3OTAwMDAyMTIwNEM0RkZGRkZGRkYwMjEyMDRDOEZGRkZGRkZGNzUKKzoxMDM3QTAwMDAyMTIwNENDRkZGRkZGRkYwMjEyMDREMEZGRkZGRkZGNTUKKzoxMDM3QjAwMDAyMTIwNEQ4RkZGRkZGRkYwMjEyMDREQ0ZGRkZGRkZGMkQKKzoxMDM3QzAwMDAyMTIwNEUwRkZGRkZGRkYwMjEyMDRFNEZGRkZGRkZGMEQKKzoxMDM3RDAwMDAyMTIwNEU4RkZGRkZGRkYwMjEyMDRFQ0ZGRkZGRkZGRUQKKzoxMDM3RTAwMDAyMTIwNEYwRkZGRkZGRkYwMjEyMDRGNEZGRkZGRkZGQ0QKKzoxMDM3RjAwMDAyMTIwNEY4RkZGRkZGRkYwMjEyMDRGQ0ZGRkZGRkZGQUQKKzoxMDM4MDAwMDAyMTIwNTAwRkZGRkZGRkYwMjEyMDUwNEZGRkZGRkZGOEEKKzoxMDM4MTAwMDAyMTIwNTA4RkZGRkZGRkYwMjEyMDUwQ0ZGRkZGRkZGNkEKKzoxMDM4MjAwMDAyMTIwNTEwRkZGRkZGRkYwMjEyMDRENEZGODAyMDAwRTgKKzoxMDM4MzAwMDAyMTIwNEI0RjAwMDUwMDAwMjEyMDRCOEYwMDAxMDAwQUMKKzoxMDM4NDAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4MEUKKzoxMDM4NTAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyRUMKKzoxMDM4NjAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1QTUKKzoxMDM4NzAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwODIKKzoxMDM4ODAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDM2ODAwMDAwMDNGRjYKKzoxMDM4OTAwMDAyMTIwMUJDMDAwMDAwNDAwMjEyMDFDMDAwMDAxODA4MjIKKzoxMDM4QTAwMDAyMTIwMUM0MDAwMDA4MDMwMjEyMDFDODAwMDAwODAzNEMKKzoxMDM4QjAwMDAyMTIwMUNDMDAwMDAwNDAwMjEyMDFEMDAwMDAwMDAzRkYKKzoxMDM4QzAwMDAyMTIwMUQ0MDAwMDA4MDMwMjEyMDFEODAwMDAwODAzMEMKKzoxMDM4RDAwMDAyMTIwMURDMDAwMDA4MDMwMjEyMDFFMDAwMDEwMDAzRjMKKzoxMDM4RTAwMDAyMTIwMUU0MDAwMDA4MDMwMjEyMDFFODAwMDAwODAzQ0MKKzoxMDM4RjAwMDAyMTIwMUVDMDAwMDAwMDMwMjEyMDFGMDAwMDAwMDAzQkMKKzoxMDM5MDAwMDAyMTIwMUY0MDAwMDAwMDMwMjEyMDFGODAwMDAwMDAzOUIKKzoxMDM5MTAwMDAyMTIwMUZDMDAwMDAwMDMwMjEyMDIwMDAwMDAwMDAzN0EKKzoxMDM5MjAwMDAyMTIwMjA0MDAwMDAwMDMwMjEyMDIwODAwMDAwMDAzNTkKKzoxMDM5MzAwMDAyMTIwMjBDMDAwMDAwMDMwMjEyMDIxMDAwMDAwMDAzMzkKKzoxMDM5NDAwMDAyMTIwMjE0MDAwMDAwMDMwMjEyMDIxODAwMDAwMDAzMTkKKzoxMDM5NTAwMDAyMTIwMjFDMDAwMDAwMDMwMjEyMDIyMDAwMDAwMDAzRjkKKzoxMDM5NjAwMDAyMTIwMjI0MDAwMDAwMDMwMjEyMDIyODAwMDAyNDAzQjUKKzoxMDM5NzAwMDAyMTIwMjJDMDAwMDAwMkYwMjEyMDIzMDAwMDAwMDA5ODcKKzoxMDM5ODAwMDAyMTIwMjM0MDAwMDAwMTkwMjEyMDIzODAwMDAwMTg0MDEKKzoxMDM5OTAwMDAyMTIwMjNDMDAwMDAxODMwMjEyMDI0MDAwMDAwMzA2RjIKKzoxMDM5QTAwMDAyMTIwMjQ0MDAwMDAwMTkwMjEyMDI0ODAwMDAwMDA2NDAKKzoxMDM5QjAwMDAyMTIwMjRDMDAwMDAzMDYwMjEyMDI1MDAwMDAwMzA2MkQKKzoxMDM5QzAwMDAyMTIwMjU0MDAwMDAzMDYwMjEyMDI1ODAwMDAwQzg2ODQKKzoxMDM5RDAwMDAyMTIwMjVDMDAwMDAzMDYwMjEyMDI2MDAwMDAwMzA2RUQKKzoxMDM5RTAwMDAyMTIwMjY0MDAwMDAwMDYwMjEyMDI2ODAwMDAwMDA2RDMKKzoxMDM5RjAwMDAyMTIwMjZDMDAwMDAwMDYwMjEyMDI3MDAwMDAwMDA2QjMKKzoxMDNBMDAwMDAyMTIwMjc0MDAwMDAwMDYwMjEyMDI3ODAwMDAwMDA2OTIKKzoxMDNBMTAwMDAyMTIwMjdDMDAwMDAwMDYwMjEyMDI4MDAwMDAwMDA2NzIKKzoxMDNBMjAwMDAyMTIwMjg0MDAwMDAwMDYwMjEyMDI4ODAwMDAwMDA2NTIKKzoxMDNBMzAwMDAyMTIwMjhDMDAwMDAwMDYwMjEyMDI5MDAwMDAwMDA2MzIKKzoxMDNBNDAwMDAyMTIwMjk0MDAwMDAwMDYwMjEyMDI5ODAwMDAwMDA2MTIKKzoxMDNBNTAwMDAyMTIwMjlDMDAwMDAwMDYwMjEyMDJBMDAwMDAwMzA2RUYKKzoxMDNBNjAwMDAyMTIwMkE0MDAwMDAwMTMwMjEyMDJBODAwMDAwMDA2QzUKKzoxMDNBNzAwMDAyMTIwMkIwMDAwMDEwMDQwMjEyMDJCNDAwMDAxMDA0OEUKKzoxMDNBODAwMDAyMTIwMzI0MDAxMDY0NDAwMjEyMDMyODAwMTA2NDQwNTQKKzoxMDNBOTAwMDAyMTIwNUI0MDAwMDAwMDEwMjEyMDFCMDAwMDAwMDAxOTIKKzoxMDNBQTAwMDA2MDBBMDAwMDAwMDAwMTYwMjAwQTBFQzU1NTQwMDAwMjMKKzoxMDNBQjAwMDAyMDBBMEYwNTU1NTU1NTUwMjAwQTBGNDAwMDA1NTU1RTAKKzoxMDNBQzAwMDAyMDBBMEY4RjAwMDAwMDAwMjAwQTBGQzU1NTQwMDAwMjUKKzoxMDNBRDAwMDAyMDBBMTAwNTU1NTU1NTUwMjAwQTEwNDAwMDA1NTU1OUUKKzoxMDNBRTAwMDAyMDBBMTA4RjAwMDAwMDAwMjAwQTE4QzU1NTQwMDAwNjMKKzoxMDNBRjAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1NUUKKzoxMDNCMDAwMDAyMDBBMTk4RjAwMDAwMDAwMjAwQTE5QzAwMDAwMDAwNEIKKzoxMDNCMTAwMDAyMDBBMUEwMDAwMTAwMDAwMjAwQTFBNDAwMDA1MDE0QjYKKzoxMDNCMjAwMDAyMDBBMUE4MDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwM0MKKzoxMDNCMzAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA2Q0ZGNUMwMDAwNTUKKzoxMDNCNDAwMDAyMDBBMDcwRkZGNTVGRkYwMjAwQTA3NDAwMDBGRkZGRkQKKzoxMDNCNTAwMDAyMDBBMDc4RjAwMDAzRTAwMjAwQTA3QzAwMDAwMDAwNUEKKzoxMDNCNjAwMDAyMDBBMDgwMDAwMEEwMDAwNjAwQTA4NDAwMDAwMDA1NjQKKzoxMDNCNzAwMDAyMDBBMDk4MEZFMDAwMDAwNjAwQTA5QzAwMDAwMDA3RDMKKzoxMDNCODAwMDAyMDBBMEI4MDAwMDA0MDAwNjAwQTBCQzAwMDAwMDAzNzIKKzoxMDNCOTAwMDAyMDBBMEM4MDAwMDEwMDAwNjAwQTBDQzAwMDAwMDAzMzYKKzoxMDNCQTAwMDAyMDBBMEQ4MDAwMDQwMDAwNjAwQTBEQzAwMDAwMDAzRDYKKzoxMDNCQjAwMDAyMDBBMEU4MDAwMTAwMDAwNjAwQTIyQzAwMDAwMDA0QTIKKzoxMDNCQzAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGRTYKKzoxMDNCRDAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwQTIKKzoxMDNCRTAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwQjMKKzoxMDNCRjAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwMkIKKzoxMDNDMDAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwQzcKKzoxMDNDMTAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwNzMKKzoxMDNDMjAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwRTMKKzoxMDNDMzAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwMzEKKzoxMDNDNDAwMDA2MDBBMjNDMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDNDNTAwMDAwMDAwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDNDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDNDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEwMDMyRTEKKzoxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDNDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDNDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMDA1NjAwMDAwMDAwOEMKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDNDRDAwMDAwMDAwMDAwMDA1NjAwOEMwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDNDRTAwMDAwOEMwMDkwMDA5MDAwOTQwMDk0MDA5ODAwOTgwMDlDMzQKKzoxMDNDRjAwMDAwOUMwMEEwMDBBMDAwQTQwMEE0MDBBODAwQTgwMEFDQTQKKzoxMDNEMDAwMDAwQUMwMEIxMDBCMTAwQjMwMEIzMDBCNTAwMDAwMDAwOEEKKzoxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDNEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMTAyREIKKzoxMDNEMzAwMDAxMDIwMTBBMDEwQTAxMTIwMTEyMDExQjAxMUIwMTI0RTcKKzoxMDNENDAwMDAxMjQwMTJEMDEyRDAxMzYwMTM2MDEzRjAxM0YwMTQ4QkIKKzoxMDNENTAwMDAxNDgwMTUxMDE1MTAxNUEwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDNENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDNEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDNEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDNEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDNEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDNERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTVBMDE1RjAwMDAwMDAwRjcKKzoxMDNFMTAwMDAwMDAwMDAwMDE1RjAxNjAwMTYwMDE2MTAxNjEwMTYyNTkKKzoxMDNFMjAwMDAxNjIwMTYzMDE2MzAxNjQwMTY0MDE2NTAxNjUwMTY2NkEKKzoxMDNFMzAwMDAxNjYwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDNFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDNFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDNFNjAwMDAxNjcwMTZDMDE2QzAxNzkwMTc5MDE4NjAwMDAwMDAwOTUKKzoxMDNFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDNFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDNFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDNFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMTg2MDE4NzAwMDAwMDAwRjMKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDNFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNFRTAwMDAwMDAwMDAwMDE4NzAxQkUwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDNGMTAwMDAxQkUwMUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDNGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRTkwMjFBN0IKKzoxMDNGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMjFBMDIyMTAyMjEwMjI4RTUKKzoxMDNGNTAwMDAyMjgwMjJGMDIyRjAyMzYwMjM2MDIzRDAyM0QwMjQ0QTEKKzoxMDNGNjAwMDAyNDQwMjRCMDI0QjAyNTIwMjUyMDI4QTAwMDAwMDAwM0QKKzoxMDNGNzAwMDAwMDAwMDAwMDI4QTAyOEUwMjhFMDI5MjAyOTIwMjk2RDUKKzoxMDNGODAwMDAyOTYwMjlBMDI5QTAyOUUwMjlFMDJBMjAyQTIwMkE2MzEKKzoxMDNGOTAwMDAyQTYwMkFBMDJBQTAyRkEwMkZBMDMxMTAzMTEwMzI4RDYKKzoxMDNGQTAwMDAzMjgwMzJCMDMyQjAzMkUwMzJFMDMzMTAzMzEwMzM0ODkKKzoxMDNGQjAwMDAzMzQwMzM3MDMzNzAzM0EwMzNBMDMzRDAzM0QwMzQwMTkKKzoxMDNGQzAwMDAzNDAwMzgxMDM4MTAzODgwMzg4MDM4RjAzOEYwMzkzRDYKKzoxMDNGRDAwMDAzOTMwMzk3MDM5NzAzOUIwMzlCMDM5RjAzOUYwM0EzRjEKKzoxMDNGRTAwMDAzQTMwM0E3MDNBNzAzQUIwM0FCMDNBRjAzQUYwM0IwNjQKKzoxMDNGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwM0IwMDNDMjAwMDAwMDAwMjgKKzoxMDQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDQwNDAwMDAwMDAwMDAwMDNDMjAzRDcwM0Q3MDNEQTAzREEwM0RENUQKKzoxMDQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDQwNzAwMDAzREQwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MEEwNTBEMDAKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwNTBEMDUxNDA1MTQwNTE4OEYKKzoxMDQwRDAwMDA1MTgwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDQwRjAwMDAwMDAwMDAwMDUxQzA1NUMwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQxMDAwMDA1NUMwNTY1MDU2NTA1NkUwNTZFMDU3NzA1NzcwNTgwMTcKKzoxMDQxMTAwMDA1ODAwNTg5MDU4OTA1OTIwNTkyMDU5QjA1OUIwNUE0RTcKKzoxMDQxMjAwMDA1QTQwNUZEMDVGRDA2MTMwNjEzMDYyOTA2MjkwNjJEMUYKKzoxMDQxMzAwMDA2MkQwNjMxMDYzMTA2MzUwNjM1MDYzOTA2MzkwNjNEQTcKKzoxMDQxNDAwMDA2M0QwNjQxMDY0MTA2NDUwNjQ1MDY0OTA2NDkwNjUwMTQKKzoxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwNjUwMDY1NjAwMDAwMDAwOEQKKzoxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDQxQTAwMDAwMDAwMDAwMDY1NjA2NTkwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDQxRDAwMDA2NTkwNjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjVGMDY2RTA2NkUwNjdEREUKKzoxMDQyMTAwMDA2N0QwNjhDMDY4QzA2OUIwNjlCMDZBQTA2QUEwNkI5OTYKKzoxMDQyMjAwMDA2QjkwNkM4MDZDODA2RDcwNkQ3MDc0ODAwMDAwMDAwMkEKKzoxMDQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDQyNTAwMDAwMDAwMDAwMDc0ODA3NUIwNzVCMDc2QzA3NkMwNzdERTEKKzoxMDQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDQyRTAwMDAwMDEwMDAwMDAwMjA0QzAwMDAzMDk4MDAwMDQwRTQwMjkKKzoxMDQyRjAwMDAwMDUxMzAwMDAwNjE3QzAwMDA3MUM4MDAwMDgyMTQwQkQKKzoxMDQzMDAwMDAwMDkyNjAwMDAwQTJBQzAwMDBCMkY4MDAwMEMzNDQwNTAKKzoxMDQzMTAwMDAwMEQzOTAwMDAwRTNEQzAwMDBGNDI4MDAwMTA0NzQwRTQKKzoxMDQzMjAwMDAwMTE0QzAwMDAxMjUwQzAwMDEzNTU4MDAwMTQ1QTQwNzgKKzoxMDQzMzAwMDAwMTU1RjAwMDAxNjYzQzAwMDE3Njg4MDAwMTg2RDQwMEMKKzoxMDQzNDAwMDAwMTk3MjAwMDAxQTc2QzAwMDFCN0I4MDAwMUM4MDQwQTAKKzoxMDQzNTAwMDAwMUQ4NTAwMDAxRTg5QzAwMDFGOEU4MDAwMjA5MzQwMzQKKzoxMDQzNjAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwMEQKKzoxMDQzNzAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwRkMKKzoxMDQzODAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwRTkKKzoxMDQzOTAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwRDgKKzoxMDQzQTAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwQzUKKzoxMDQzQjAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwQjQKKzoxMDQzQzAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwQTEKKzoxMDQzRDAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwOTAKKzoxMDQzRTAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwN0QKKzoxMDQzRjAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwNkMKKzoxMDQ0MDAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwNTgKKzoxMDQ0MTAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwNDcKKzoxMDQ0MjAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwMzQKKzoxMDQ0MzAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwMjMKKzoxMDQ0NDAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwMTAKKzoxMDQ0NTAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwRkYKKzoxMDQ0NjAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwRUMKKzoxMDQ0NzAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwREIKKzoxMDQ0ODAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwQzgKKzoxMDQ0OTAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwQjcKKzoxMDQ0QTAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwQTQKKzoxMDQ0QjAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwOTMKKzoxMDQ0QzAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwODAKKzoxMDQ0RDAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwNkYKKzoxMDQ0RTAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwNUMKKzoxMDQ0RjAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwNEIKKzoxMDQ1MDAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwMzcKKzoxMDQ1MTAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwMjYKKzoxMDQ1MjAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwMTMKKzoxMDQ1MzAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwMDIKKzoxMDQ1NDAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwRUYKKzoxMDQ1NTAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwREUKKzoxMDQ1NjAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwQ0IKKzoxMDQ1NzAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwQkEKKzoxMDQ1ODAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwQTcKKzoxMDQ1OTAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwOTYKKzoxMDQ1QTAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwODMKKzoxMDQ1QjAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwNzIKKzoxMDQ1QzAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwNUYKKzoxMDQ1RDAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwNEUKKzoxMDQ1RTAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwM0IKKzoxMDQ1RjAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwMkEKKzoxMDQ2MDAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwMTYKKzoxMDQ2MTAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwMDUKKzoxMDQ2MjAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwRjIKKzoxMDQ2MzAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwRTEKKzoxMDQ2NDAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwQ0UKKzoxMDQ2NTAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwQkQKKzoxMDQ2NjAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwQUEKKzoxMDQ2NzAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwOTkKKzoxMDQ2ODAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwODYKKzoxMDQ2OTAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwNzUKKzoxMDQ2QTAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwNjIKKzoxMDQ2QjAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwNTEKKzoxMDQ2QzAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwM0UKKzoxMDQ2RDAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwMkQKKzoxMDQ2RTAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwMUEKKzoxMDQ2RjAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwMDkKKzoxMDQ3MDAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwRjUKKzoxMDQ3MTAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwRTQKKzoxMDQ3MjAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwRDEKKzoxMDQ3MzAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwQzAKKzoxMDQ3NDAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwQUQKKzoxMDQ3NTAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwOUMKKzoxMDQ3NjAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwODkKKzoxMDQ3NzAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwNzgKKzoxMDQ3ODAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwNjUKKzoxMDQ3OTAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwNTQKKzoxMDQ3QTAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwNDEKKzoxMDQ3QjAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwMzAKKzoxMDQ3QzAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwMUQKKzoxMDQ3RDAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwMEMKKzoxMDQ3RTAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwRjkKKzoxMDQ3RjAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwRTgKKzoxMDQ4MDAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwRDQKKzoxMDQ4MTAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwQzMKKzoxMDQ4MjAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwQjAKKzoxMDQ4MzAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwOUYKKzoxMDQ4NDAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwOEMKKzoxMDQ4NTAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwN0IKKzoxMDQ4NjAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwNjgKKzoxMDQ4NzAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwNTcKKzoxMDQ4ODAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwNDQKKzoxMDQ4OTAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwMzMKKzoxMDQ4QTAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwMjAKKzoxMDQ4QjAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwMEYKKzoxMDQ4QzAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwRkMKKzoxMDQ4RDAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwRUIKKzoxMDQ4RTAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwRDgKKzoxMDQ4RjAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwQzcKKzoxMDQ5MDAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwQjMKKzoxMDQ5MTAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwQTIKKzoxMDQ5MjAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwOEYKKzoxMDQ5MzAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwN0UKKzoxMDQ5NDAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwNkIKKzoxMDQ5NTAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwNUEKKzoxMDQ5NjAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwNDcKKzoxMDQ5NzAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwMzYKKzoxMDQ5ODAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwMjMKKzoxMDQ5OTAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwMTIKKzoxMDQ5QTAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwRkYKKzoxMDQ5QjAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwRUUKKzoxMDQ5QzAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwREIKKzoxMDQ5RDAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwQ0EKKzoxMDQ5RTAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwQjcKKzoxMDQ5RjAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwQTYKKzoxMDRBMDAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwOTIKKzoxMDRBMTAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwODEKKzoxMDRBMjAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwNkUKKzoxMDRBMzAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwNUQKKzoxMDRBNDAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwNEEKKzoxMDRBNTAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwMzkKKzoxMDRBNjAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwMjYKKzoxMDRBNzAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwMTUKKzoxMDRBODAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwMDIKKzoxMDRBOTAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwRjEKKzoxMDRBQTAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwREUKKzoxMDRBQjAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwQ0QKKzoxMDRBQzAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwQkEKKzoxMDRBRDAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwQTkKKzoxMDRBRTAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwOTYKKzoxMDRBRjAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwODUKKzoxMDRCMDAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwNzEKKzoxMDRCMTAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwNjAKKzoxMDRCMjAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwNEQKKzoxMDRCMzAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwM0MKKzoxMDRCNDAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwMjkKKzoxMDRCNTAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxMzgKKzoxMDRCNjAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4Q0MKKzoxMDRCNzAwMDAwMDA3RkY4MDAwMDBDREYwMDAwMTUwMDAwMDAwMDAxQkQKKzoxMDRCODAwMDAwMDAwMDAxMDAwMDAwMDFGRkZGRkZGRkZGRkZGRkZGMkIKKzoxMDRCOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjUKKzoxMDRCQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTUKKzoxMDRCQjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDUKKzoxMDRCQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjUKKzoxMDRCRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTUKKzoxMDRCRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDUKKzoxMDRCRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzUKKzoxMDRDMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwQjAKKzoxMDRDMTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQTAKKzoxMDRDMjAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGOEMKKzoxMDRDMzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwN0MKKzoxMDRDNDAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGQ0YKKzoxMDRDNTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGNUMKKzoxMDRDNjAwMDAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwQUIKKzoxMDRDNzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzMzkKKzoxMDRDODAwMDAwQkVCQzIwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGOTIKKzoxMDRDOTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwN0IKKzoxMDRDQTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwMEMKKzoxMDRDQjAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGNUYKKzoxMDRDQzAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRUMKKzoxMDRDRDAwMDAwMDAwMDAzMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwMTcKKzoxMDRDRTAwMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwRkIKKzoxMDRDRjAwMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwREMKKzoxMDREMDAwMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwQkUKKzoxMDREMTAwMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwOUYKKzoxMDREMjAwMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwODIKKzoxMDREMzAwMDAwMDJGMDgwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwNjMKKzoxMDRENDAwMDAwMDM3MzgwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwNDYKKzoxMDRENTAwMDAwMDNGNjgwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwMjcKKzoxMDRENjAwMDAwMDQ3OTgwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwNjQKKzoxMDRENzAwMDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwRkIKKzoxMDREODAwMDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwQUIKKzoxMDREOTAwMDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwNUIKKzoxMDREQTAwMDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMEIKKzoxMDREQjAwMDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwQkIKKzoxMDREQzAwMDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwNkIKKzoxMDRERDAwMDAwMEREQjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAxOTJBQkEKKzoxMDRERTAwMDAwMDAzNTAwMDAwMDE5MDAwMDEwMDAwMDAwMDAwMDAwNjUKKzoxMDRERjAwMDAwMDAwMDAwRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwMzcKKzoxMDRFMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQTIKKzoxMDRFMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTIKKzoxMDRFMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODIKKzoxMDRFMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNzIKKzoxMDRFNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNjIKKzoxMDRFNTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNTIKKzoxMDRFNjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDIKKzoxMDRFNzAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwN0ZGODAwMDA3RkY4QzQKKzoxMDRFODAwMDAwMDAwNUM3MDAwMDE1MDBGRkZGRkZGRkZGRkZGRkZGNDkKKzoxMDRFOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjIKKzoxMDRFQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTIKKzoxMDRFQjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDIKKzoxMDRFQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIKKzoxMDRFRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTIKKzoxMDRFRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDIKKzoxMDRFRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzIKKzoxMDRGMDAwMEZGRkZGRkZGRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwMjkKKzoxMDRGMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTEKKzoxMDRGMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODEKKzoxMDRGMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNzEKKzoxMDRGNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNjEKKzoxMDRGNTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNTEKKzoxMDRGNjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDEKKzoxMDRGNzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMzEKKzoxMDRGODAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMTAwMDAwMDAyMDgwRjEKKzoxMDRGOTAwMDAwMDAzMTAwMDAwMDQxODAwMDAwNTIwMDAwMDA2MjgwRUIKKzoxMDRGQTAwMDAwMDA3MzAwMDAwMDgzODAwMDAwOTQwMDAwMDBBNDgwRDMKKzoxMDRGQjAwMDAwMDBCNTAwMDAwMEM1ODAwMDAwRDYwMDAwMDBFNjgwQkIKKzoxMDRGQzAwMDAwMDBGNzAwMDAwMTA3ODAwMDAxMTgwMDAwMDEyODgwQTAKKzoxMDRGRDAwMDAwMDEzOTAwMDAwMTQ5ODAwMDAxNUEwMDAwMDE2QTgwODcKKzoxMDRGRTAwMDAwMDE3QjAwMDAwMThCODAwMDAxOUMwMDAwMDFBQzgwNkYKKzoxMDRGRjAwMDAwMDFCRDAwMDAwMUNEODAwMDAxREUwMDAwMDFFRTgwNTcKKzoxMDUwMDAwMDAwMDFGRjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAxMTJFNzMKKzoxMDUwMTAwMDAwMDAzNTAwMTAwMDAwMDAwMDAwMjhBRDAwMDAwMDAwNzYKKzoxMDUwMjAwMDAwMDEwMDAxMDAwRDAyMDVDQ0NDQ0NDNUZGRkZGRkZGNDUKKzoxMDUwMzAwMEZGRkZGRkZGNzA1ODEwM0MwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxRjkKKzoxMDUwNTAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQkEKKzoxMDUwNjAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQUEKKzoxMDUwNzAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxOUEKKzoxMDUwODAwMENDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwQjQKKzoxMDUwOTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMTAKKzoxMDUwQTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAKKzoxMDUwQjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRjAKKzoxMDUwQzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTAKKzoxMDUwRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDAKKzoxMDUwRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzAKKzoxMDUwRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjAKKzoxMDUxMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMjYyNUEwRjQKKzoxMDUxMTAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMjYyNUEwQjkKKzoxMDUxMjAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMEUwMjMyNTIKKzoxMDUxMzAwMDAxMTYwMEQ2MDAxMDAwMDAwMDAwMDAwMDAwMjYyNUEwODcKKzoxMDUxNDAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMjYyNUEwODkKKzoxMDUxNTAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwNzIwMjM2QkEKKzoxMDUxNjAwMDAxMjMwMEYzMDAxMDAwMDAwMDAwMDAwMDAwMDBGRkZGMUEKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMzMKKzoxMDUxODAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMTMKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDMKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRjMKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRTMKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRDMKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzMKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjMKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQTIKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOTIKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGODIKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNzIKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNjIKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNTIKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNDIKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMzIKKzoxMDUyODAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMjIKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMTIKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDIKKzoxMDUyQjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRjIKKzoxMDUyQzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRTIKKzoxMDUyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRDIKKzoxMDUyRTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzIKKzoxMDUyRjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjIKKzoxMDUzMDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQTEKKzoxMDUzMTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOTEKKzoxMDUzMjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGODEKKzoxMDUzMzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNzEKKzoxMDUzNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNjEKKzoxMDUzNTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNTEKKzoxMDUzNjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEZGRkZGRkYzNEYKKzoxMDUzNzAwMDMxOEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQTQKKzoxMDUzODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkYKKzoxMDUzOTAwMDMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjUKKzoxMDUzQTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDkKKzoxMDUzQjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTUKKzoxMDUzQzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjMKKzoxMDUzRDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MUIKKzoxMDUzRTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOUEKKzoxMDUzRjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjUKKzoxMDU0MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkQKKzoxMDU0MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjQKKzoxMDU0MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDgKKzoxMDU0MzAwMDMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwODMKKzoxMDU0NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MUEKKzoxMDU0NTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjQKKzoxMDU0NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREMKKzoxMDU0NzAwMDMxOEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQTMKKzoxMDU0ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkUKKzoxMDU0OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDMKKzoxMDU0QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDgKKzoxMDU0QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTQKKzoxMDU0QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjIKKzoxMDU0RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MUEKKzoxMDU0RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTkKKzoxMDU0RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjQKKzoxMDU1MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkMKKzoxMDU1MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjMKKzoxMDU1MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDcKKzoxMDU1MzAwMDMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwODMKKzoxMDU1NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTkKKzoxMDU1NTAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDMKKzoxMDU1NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREIKKzoxMDU1NzAwMDMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDIKKzoxMDU1ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkQKKzoxMDU1OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDIKKzoxMDU1QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDcKKzoxMDU1QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTMKKzoxMDU1QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjEKKzoxMDU1RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MTkKKzoxMDU1RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTgKKzoxMDU1RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjMKKzoxMDU2MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkIKKzoxMDU2MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjIKKzoxMDU2MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3QTYKKzoxMDU2MzAwMDA1NkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwNjAKKzoxMDU2NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTgKKzoxMDU2NTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDEKKzoxMDU2NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREEKKzoxMDU2NzAwMDMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjAKKzoxMDU2ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkMKKzoxMDU2OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDEKKzoxMDU2QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDYKKzoxMDU2QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTIKKzoxMDU2QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjAKKzoxMDU2RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MTgKKzoxMDU2RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTcKKzoxMDU2RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjIKKzoxMDU3MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBREEKKzoxMDU3MTAwMDA0MkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwQzAKKzoxMDU3MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3QTUKKzoxMDU3MzAwMDA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRkYKKzoxMDU3NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTcKKzoxMDU3NTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDAKKzoxMDU3NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzRDkKKzoxMDU3NzAwMDMxNkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQzAKKzoxMDU3ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkIKKzoxMDU3OTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRTEKKzoxMDU3QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDUKKzoxMDU3QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTEKKzoxMDU3QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkY2QjQKKzoxMDU3RDAwMDMwQkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzE0RkQKKzoxMDU3RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTYKKzoxMDU3RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjEKKzoxMDU4MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNjkKKzoxMDU4MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjAKKzoxMDU4MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDQKKzoxMDU4MzAwMDMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOUYKKzoxMDU4NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkYwMUIKKzoxMDU4NTAwMDMwN0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRDAKKzoxMDU4NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0MKKzoxMDU4NzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTQKKzoxMDU4ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUMKKzoxMDU4OTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzQKKzoxMDU4QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQ0IKKzoxMDU4QjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTQKKzoxMDU4QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQUEKKzoxMDU4RDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzQKKzoxMDU4RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODgKKzoxMDU4RjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTQKKzoxMDU5MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjMKKzoxMDU5MTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjMKKzoxMDU5MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGM0IKKzoxMDU5MzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDMKKzoxMDU5NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMEIKKzoxMDU5NTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjMKKzoxMDU5NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0IKKzoxMDU5NzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTMKKzoxMDU5ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUIKKzoxMDU5OTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzMKKzoxMDU5QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQ0EKKzoxMDU5QjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTMKKzoxMDU5QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQTkKKzoxMDU5RDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzMKKzoxMDU5RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODcKKzoxMDU5RjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTMKKzoxMDVBMDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjIKKzoxMDVBMTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjIKKzoxMDVBMjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGM0EKKzoxMDVBMzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDIKKzoxMDVBNDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMEEKKzoxMDVBNTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjIKKzoxMDVBNjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0EKKzoxMDVBNzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTIKKzoxMDVBODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUEKKzoxMDVBOTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzIKKzoxMDVBQTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQzkKKzoxMDVBQjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTIKKzoxMDVBQzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQTgKKzoxMDVBRDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzIKKzoxMDVBRTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODYKKzoxMDVBRjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTIKKzoxMDVCMDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjEKKzoxMDVCMTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjEKKzoxMDVCMjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzkKKzoxMDVCMzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDEKKzoxMDVCNDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMDkKKzoxMDVCNTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjEKKzoxMDVCNjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwQjkKKzoxMDVCNzAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwQjMKKzoxMDVCODAwMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMDAwMEMwMDAwNTEKKzoxMDVCOTAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2ODAwMDIwMjIwNjIKKzoxMDVCQTAwMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMDAwMEYwMDAwODYKKzoxMDVCQjAwMDAwMDgwMEYwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwODIKKzoxMDVCQzAwMDAwMDEwMjcwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDIKKzoxMDVCRDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMjEKKzoxMDVCRTAwMDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDAwMEIwMDAwRjQKKzoxMDVCRjAwMDAwMDEwMEIwMDAwMjgwQzAwMDA1ODBFODAwMDIwMTQwMDIKKzoxMDVDMDAwMDAwMDEwMTYwMDAwRTAxNzAwMDAzODI1MENDQ0NDQ0NDQUUKKzoxMDVDMTAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwRDQKKzoxMDVDMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQjQKKzoxMDVDMzAwMDAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQjQKKzoxMDVDNDAwMENDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDVDNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzQjkKKzoxMDVDNjAwMDhBNTkwNTE5MThBQzg0MTE3QzdBNjA3RTRFQ0FGNDNCQkYKKzoxMDVDNzAwMEYyMzIzMDM4MDNCMTJCMTAzNzAwRjE2MTZFMDY4NjIzMDMKKzoxMDVDODAwMERDQzRFQjNGMjk4RjYwN0JDQjMyMzA5NDAzRjE3NjY5MjMKKzoxMDVDOTAwMDA2MDYxMzM5ODRCOEFFMDIwM0MzM0MyMDNGMDEyQUY2M0UKKzoxMDVDQTAwMDE0NDg2N0NCNTNFNkVFQzE4MjE1NTQzMUM1NjQ5NTExOTMKKzoxMDVDQjAwMDZDNDUyQ0YyQzg1ODA5NERCRTQ2MTk5NUFGNEM0MEZGQjMKKzoxMDVDQzAwMDQwRTM3ODFENTQ3RThGMTY4NDdFQUQwREExMTNEMEU0ODEKKzoxMDVDRDAwMDdCQTFGMjhFNTA3RjI1RUE2MDM3RDc4OTQ4N0ZBN0IyMzMKKzoxMDVDRTAwMEEwQjkwNzhEREZDQTg4Q0EzN0UzNDBFNTI3NDFENTAzNEQKKzoxMDVDRjAwMDAwMDc0OTMwMEFDODAzMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDVEMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBENzg1NEQ1QkUKKzoxMDVEMTAwMEI1RTgzRTczQ0U5Qzk5NDlDRTRDMjZCRjRDMjBDMDQ5NzUKKzoxMDVEMjAwMDA4MjE2OEE0QzcwMDY5QjA1ODRGMjA2MEE4RDQwRTE0OTkKKzoxMDVEMzAwMDY5QUM4QTAzMjI0NDA4MjQ1MkVCQzNBQkZEMzI4MTAwRDQKKzoxMDVENDAwMDAxMDIwNEIxMzQxNEE0NDMwMEE1QjdCNDM3NTJCNEQ0NEIKKzoxMDVENTAwMDUyM0FFMEE3QzVENkY3QkRFMEIzNTZBRkI2NkZCNDE0NUMKKzoxMDVENjAwMDdGOEExMkYzQUVENkJFNkJFQkRCNkJFREJEOTM3MzRFNDkKKzoxMDVENzAwMDY2NDgxMEJERUQ3REVGQzZDRkVGQjBDRkQ5M0Y2QkFGMUEKKzoxMDVEODAwMEJGQkRENkRBNkJFRjcxQkJGQzI0NkYzNDIxMUZDM0RGQkMKKzoxMDVEOTAwMDc1ODRGQzJGOEQxMDkyREJGRjc0N0I0OTM0RkQ3Mzg0NzYKKzoxMDVEQTAwMDY0RTY5OEQxNDQxOTIxQzM3MkNDMzg5OTQ0REYwNzU1NzEKKzoxMDVEQjAwMEREMjNGNUI3MTNDRjkzOTkzMzQzNTBBRjI1RDcwQzExOUIKKzoxMDVEQzAwMERBNDc0QkU2N0MxMjgxQkUyMjc1ODRFNDExQTI3ODA5ODEKKzoxMDVERDAwMEZFODlGQUVFRTA1QzJGMjlDMzU3N0ZGQjU4N0M5NzA5QjgKKzoxMDVERTAwMDU5MTcyQ0NBODA3NkNFRkUwOTg5MTEzMkQ5NUE3NjExRkMKKzoxMDVERjAwMDIyRkFBNEVEQkMwMDZGMDY4NTU3QTcyRjI4OUM2OTkzNTMKKzoxMDVFMDAwMDVDQjFFQjBCMjlEQzdBMENFMTRFMkZBMDcwRDNGMkM5MDgKKzoxMDVFMTAwMDkxQ0Y3OEM3RDBGMkE2NkI1RDg2MDc1QkRGNEQ0ODA1NTIKKzoxMDVFMjAwMDIxQUJBMDJGREE3NkQzNTU3MUZFNUQzMUEwM0M0MzNFMDUKKzoxMDVFMzAwMERDQUM0MjdCOUQxODFFNUFGNjVGRDUxODU3QjE5REE5NjAKKzoxMDVFNDAwMEU1RDM3NjQxQzJEQTA1NEI5N0NDMjYxMzA4QzkzMEQ1ODUKKzoxMDVFNTAwMDdFQjg1ODNEOUM3RjNBQUZFN0QxRTlGN0QyRkVFRkU5MzMKKzoxMDVFNjAwMEE0RUQzRDM5MDBBNTA0MDlGQjY5RkY5NThFRUZBNTMzMkMKKzoxMDVFNzAwMERGODA3RUQzODlBNTVGM0E4RkVERjA4RjdDNDJCRTQwRjQKKzoxMDVFODAwMEZDMzlFN0EwRjNDRjkzQ0YwMzFFNDg3NTE2MjE1MzA2QzQKKzoxMDVFOTAwMEUyQUYxRjZGNTFBNDJGMjE3NTM2QjgwNDFEMzQxODYzNkIKKzoxMDVFQTAwMDBDMjFEN0I3MjY1RTcyRTU1MDc4NEMxNzAxM0NDRDk0OTMKKzoxMDVFQjAwMDM1REYxODVBREU3NjVBNDYzQzZDQUJFREYxMDYzNTlDNjAKKzoxMDVFQzAwMERGRUM3Q0RBNkUzNEVGNjc3NDI1QzUwMzlEQ0Y5RTI2MjgKKzoxMDVFRDAwMDVBRjYwQ0M0NkZDMUE0NkUxM0Y4QzMzRkE5NUIyMkI0NzkKKzoxMDVFRTAwMEJGMDI4MzkwNkMzQTlGNjAyMzJEMTdEMTc2MjQ3RTY2ODMKKzoxMDVFRjAwMDBDRTUyRkYyMDA5QjZGOTRGRUY3NzE1MTNGMUUzMzE5OTIKKzoxMDVGMDAwMDBBODhFNkMwNzMyNkUwOTFFMkE5RTAxRUM3RkI0QTg2MzQKKzoxMDVGMTAwMEJGNEM2MkMxNkIyMTcyMTNFMkU5MEVDMERGOTVDOEYzN0EKKzoxMDVGMjAwMDYzMTE3RkQxMkNDNEVCNTBGMTI3RTAxMUY4MEI3MjNFQzYKKzoxMDVGMzAwMEJFQkUyNjUxQUIwMERGNENBNUY4MDM3QzUxM0NBNkQzNzYKKzoxMDVGNDAwMEY5RjZCRUU0ODlDOTg1RDA4REQ5MUQwMjdDOEJGOTU0NDAKKzoxMDVGNTAwMDMyRkVEOUMyRTFEQTA4RjgxQjg3OUY1Q0FFMTAyMUJFODEKKzoxMDVGNjAwMEIyMkU5M0M5NEI1QzgyNzI3QTE5OUQwMUVEQ0Y2NzMyRDQKKzoxMDVGNzAwMEZDQ0Q5MDM1MDlDNkRCNUNDQUY4OTQwRTIwQjkyQTA3MUYKKzoxMDVGODAwMEMyNDVGRkIwRkQ2NjBBOEY2NjgxNjdCM0I3Q0IyQkQxRTAKKzoxMDVGOTAwMEYyNzYwQTZGMTRGMDRGOEUwNDgxMUZDNUJDM0RCQUNCNTgKKzoxMDVGQTAwMDg2NTcyNTk0RTZFMDczMDZBNzgwNkZCQkM5RTREODAyNDQKKzoxMDVGQjAwMDA3QkUyN0RENURBRDEyODVGMzgzMTkyRUIyNDkxQUJDRTkKKzoxMDVGQzAwMERGNkQ3REZERDhGQjc3RjYzQjI4N0M4OUEwQUY5OENFQUUKKzoxMDVGRDAwMEVGODM2NzY1NjMxM0M1Q0Y2NkJEQUJENTQ1RTFEODU2ODIKKzoxMDVGRTAwMENERTYzQjkwQ0U5NzM5NUU0RjhGQjc3ODkyNjUzQzgzNzQKKzoxMDVGRjAwMEM5Q0JBNzNFMEVDOUI0Q0ZBQjMyRTgwQjk2NURGRTM4RDUKKzoxMDYwMDAwMDI0Qjg3MDM0RDAzRjE1M0QzRTM1Rjg3NTBBQkYwNTRGQjIKKzoxMDYwMTAwMEJFRTJBMDA0RkRGQkFFN0FEMDRCNTBFRThGNzgwMTBFQUQKKzoxMDYwMjAwMEU3MzgwM0UwNzU4Q0VCMUM0NzI5OEQ5QTBBOTZFQ0ZBNDkKKzoxMDYwMzAwMEM4MTM4QzExNjJEMTJGNTg0Nzg3MjdEM0NCRTk4NjVEQ0YKKzoxMDYwNDAwMDlGRjg0QUVERkFEOUE5Q0YxNUQwMzcwMTY4NkZEN0Q3OTUKKzoxMDYwNTAwMDNENDJDRjA4M0QzRDY5ODg3QUM2QUM0Mzc4OEI0OERGMjYKKzoxMDYwNjAwMDFGQ0FGMzE4MkVDRkQzMEYyNTNBQkMxNDdGQzU3Qjg0RUIKKzoxMDYwNzAwMDlFN0VFMDU3QTU5NDFGMEU4MjlFQTZFNTgzMUQwNEQ3NDEKKzoxMDYwODAwMEMzODM0NzQ5OENDOTM1RDNENzEzNzg2NzEzQjhERUY5NzIKKzoxMDYwOTAwMDQxOUZCRUIxRTNFN0NBNzY3MzFBRTg5RDMyNjJCQTdDQ0IKKzoxMDYwQTAwMEI0OUYzMTg3ODkxMUE3RUYwRjkzRjhEQ0YxQTBDNzhFNTkKKzoxMDYwQjAwMEIxRjk3QkU5N0Y1NjNEN0QwNUM3RTM5NTg3MUI1RDQwQzAKKzoxMDYwQzAwMENGMzE3QkVDNzhCQzgyRTNCN0VDQThFMzNEQzdERjE1QUEKKzoxMDYwRDAwMDBFRkM2RDgzN0Y1MDdDRTU0QjFDOEY2MzQ5MDlFMjcxOTgKKzoxMDYwRTAwMEVBMTBENzNCOEU0N0E3QkVFRUMzRTMxRUFBQUYyOURFNTgKKzoxMDYwRjAwMEIyODMwQzhGMkQ2RDJFMDJGQUExMzdFNjQyRkQ1ODVBNUQKKzoxMDYxMDAwMEQ4RTg0MkZEQzlGNUY2NzgzRUJGRjE3Q0JEM0JDMEYxNTEKKzoxMDYxMTAwMDI3RTAyQzlFNkQ1NDAxREVDNjEyRTMyNEU4RTVDQzc2MjAKKzoxMDYxMjAwMDhBMzcwMjdBQkFBMDBBQ0EzQjFFMjI0ODlGQjEwRkU5RjkKKzoxMDYxMzAwMDJFQUVERjEwOUU0Q0JFRkVFRUE4MkU3RjE2RTRBMkY3MTgKKzoxMDYxNDAwMDIxQzU5MEU5MzgwNzg5QjFDNjJCRjVFMzM3OUI4RjlGQUUKKzoxMDYxNTAwMENERjFGODY1NDNCNkYxQTE5MzhFRDkxQ0FGNEVGQzk0RjYKKzoxMDYxNjAwMDFFQjBFMzdGQUM4MzRFNjNEQUVERTU2QzA3NUQ2RTkwQTUKKzoxMDYxNzAwMDFDRjZDNzEwRTlFMTUxNDhENDkzMDVFNTE4REE3NTVFQkQKKzoxMDYxODAwMDhBRkI1QzVBOTY3RkZDOTQwOTc4RDYzQUQ4QkJDQzM2MDkKKzoxMDYxOTAwMDU3QUM5MDhFRTM2RjYxNjVBNTREODk1NTUxM0NEQzA2ODcKKzoxMDYxQTAwMDg2MTcyRDhGNkIyNTMxQjA0N0U1NkE5MzI0MjgxRUM3Q0IKKzoxMDYxQjAwMDA1RTM0NEE2NzhDQkFFMjY4ODM3RTJCMDJGMDVGRDhBRUEKKzoxMDYxQzAwMDM5MTMxNDczRkVDRkY4NzJCOTBGRThCNTIzNDhGMTBFRjYKKzoxMDYxRDAwMEVCRTI2Qzg1QjczNzdDRTFBQkZBRjFFRUQ0MEY1RkFCNDUKKzoxMDYxRTAwMEI1RTNGREE2NzBCQTBENUZCM0Y0NkM1Qjc5RTJFOUUxNEIKKzoxMDYxRjAwMDE3QTU5M0QwMUY4MjhGMDRERTA2RDBBMUQ1NUVGNjU3NzcKKzoxMDYyMDAwMERCQ0I0RUZEMTM5NTFDRkE2Nzg4NzQ1MjRGOTE1MjkwNjgKKzoxMDYyMTAwMDhCNzFBRTM0QTNCMzcwNjBCREVEOTI4QkRCNDNERUQ4REYKKzoxMDYyMjAwMDU5M0FERTQyMjI5MTBDREFGRjBBOTIxODA1RjgzRUE2OEUKKzoxMDYyMzAwMEU5Rjg3REE1MkI5MTA3RTUwQkE0NjdFN0M4MzFGREZEQzMKKzoxMDYyNDAwMDhGNTJDODMxODlEQUVEMTI0NUVGNkEwQUQyNzAyRjg5NzAKKzoxMDYyNTAwMEE3QTMzRDRDQzJERTNDNDQwMUUyNDVBMkZGREY4QUZDMUQKKzoxMDYyNjAwMEEyQjgwMDVGMjM4MkVDM0Q4OTY2Mjg1MDBFMTFGMUE3ODkKKzoxMDYyNzAwMDIzOUQzQ0ZDOUZGOUFCOUZGOThCNDRFOTJCRjFBNzBDQzQKKzoxMDYyODAwMDc0QTRFM0JCNDkwNEY5QzE0QkRBQjE5QzQ2QkFGMEE5NDYKKzoxMDYyOTAwMDkxNkU3QzA2QThDNjg2Njc5MDA0MjU3ODY2MTEwMzlGRDgKKzoxMDYyQTAwMEU0OEFEODYzNzE5NEMzMDc4MkM4RjdCRTNGOTA4RkQzNDYKKzoxMDYyQjAwMEZCRTdCMzhFRDM2RDM4MDlGRjQ4Q0EwNTNBQzQ4OTU3NDYKKzoxMDYyQzAwMEVFRTc0MzNGRTc0MzZBQUZBMTVFRDY0QTE5RkY2QTkzMDAKKzoxMDYyRDAwMEU4QkE1QTg2RjI4RjdFMTdGOTg4RTJCNzAyQzY2NUY1RUEKKzoxMDYyRTAwMDA1QkVCNzcyQkI3QTRCOTMxN0Y1Q0RFNkE2MjAzRUQ1MTcKKzoxMDYyRjAwMEE5OEQ2MTAwMkZCMzNBRDE3MTA3QTU1Nzg2QUUxQUQ3ODEKKzoxMDYzMDAwMEQzRjkwRkFCRUU4OTgzOUNGODVCOTlERjk2NjYzMEZDN0UKKzoxMDYzMTAwMDlFRENGOEM0NEI4QkU4RkJCNjQyOERGOTQxMkRDQzlFMzgKKzoxMDYzMjAwMENERTA1ODZDOUI5Qzg4QURBNUYwNkQyREY0MUE1NkZGRkUKKzoxMDYzMzAwMDQwRThBN0FERDcyNjBFRURBN0RGM0I3NURBMjNGREVCQ0UKKzoxMDYzNDAwMEFDM0U5MjU4MDM3MjUzQTA4MjI2MjI5QjI3RkM5MzBFRTgKKzoxMDYzNTAwMDdBMkRBREI4QTdDOUFBNzdCNDBGNjVBNkJDMEFBMjUxMTkKKzoxMDYzNjAwMEUwMkIzQUJGMjgyQ0VGNEVCRTZBMkJCRjAyRjU2MkRCNTIKKzoxMDYzNzAwMEE5Njc4OTRFMkIxNEQ1QzQ0REMwOTc3RjJBMzU2NUU5OEUKKzoxMDYzODAwMDNDRkMzNUJBMkJBQTgxNTQ0NjVFMDUzQzY3QjQwNjI1MTEKKzoxMDYzOTAwMDkzRTIyRkFCNUE5RjA2MzJBQTExOURFOTZCQTUzQjA0RUQKKzoxMDYzQTAwMEYyM0JBMEZGOTFGMUQwMURCNEJGRThCNUFBNzExMEQ5OUUKKzoxMDYzQjAwMDRBNzdDREY3QTc5Njg3MkQxQkVGRkRCQTk5QzRBRTBBOTEKKzoxMDYzQzAwMEJBMjRBNEZCQTk2QkYzRjJDMUZGRjU5MTYwN0VGQTI0MTUKKzoxMDYzRDAwMDkwMkY5NTFDODQ3NUVCREEyNUEzMjM0OURBRjVDQjU5NjgKKzoxMDYzRTAwMDVDRDgzNTQ5OUZBOURBQTVDQkE0QjFDQkQyNkY4OThCRjQKKzoxMDYzRjAwMEM5QTFDQkU1QzU2NzY2MTlFM0EzQTI1MkVFMTdCNzEyOTAKKzoxMDY0MDAwMDMzOTYwNDBFOTNDM0FGMjk3MUMyRkMzOURERjU1OUUyMEUKKzoxMDY0MTAwMEVCNkRBRTJGQjY0OEE0QjYyQkM5Rjc0RTBFQ0YwQzc5NTQKKzoxMDY0MjAwMDhGMDlFQjZGQzY0NkI2NEVGQTI4QTg1RDE0QkUyMjg1Q0EKKzoxMDY0MzAwMDNFMkRFRDY2RjFGQTg3RjhGMzEyRjQ1MERFNDMyMDMwN0EKKzoxMDY0NDAwMDM5NDNEMzgzM0VDN0I4RTI1OUZFMDlDNkRENDZDNzk1MzYKKzoxMDY0NTAwMDVENDE1Q0Y3MDRERTlERjQxNDRGOTdDQjg3RjUzRUI4QTEKKzoxMDY0NjAwMEY2QzUxMDE4ODFBOUUwRDQ0MTQ2ODdEMTY3MDE3Rjg2MUYKKzoxMDY0NzAwMDUwRDcxM0JEOTQzRDlERTM1RDZBN0Y1Rjc0QjE3OTM4NTkKKzoxMDY0ODAwMEZCMjUwNzk4NUQ5NUMxRDdBRjkzNTM0QTlBRDFFRjlERUQKKzoxMDY0OTAwMDJERkM1MEJCREUwMDdGMThGNDUxRTcwMUJBRjAxNzgyRTMKKzoxMDY0QTAwMERFNjBFNUNEMzE4Mjc2NTY2RjE5NjVFNDIyODgyNzc0NjcKKzoxMDY0QjAwMEEzQkUyRDIwMTE5NDYzRkEwOUNCQUQ1Q0ZGQUQwN0ZEOUYKKzoxMDY0QzAwMDQ3OUZFRjkzRjAyREFFQzlBMDQ3NjJBNzE0NUE2OUY2MTMKKzoxMDY0RDAwMEE0QkJBNzI1OEIxRkREMDlGMjMxRjlEMkQ2QTkyRkQyOTMKKzoxMDY0RTAwMEU3NDI2Rjc4MjlGNEFGMTk2NzRDNTA1Qjk5RjMyNDk0MTUKKzoxMDY0RjAwMDI3QTc1QzUxRjYwQ0NEQjVDODBEOTEwNTVGMzA3OTZBQzAKKzoxMDY1MDAwMEUxRkMwRTcyMzM4Nzk2NkI4QTkzQzNEOUI5QjEyMjNGRUYKKzoxMDY1MTAwMDgyRkRFOUMzRDFFRTUwRjRFMUQ2N0UzQkJGQ0NFNDZBMDQKKzoxMDY1MjAwMDg3NDM3RTNBQjhGQ0FGMDE3RUJDQjQ3OUU2RDVEMDY3MkMKKzoxMDY1MzAwMEQwODg5OUEwMkVFNzQ3MUI5RjA2QkFDRDkzMjIxQjVDRkIKKzoxMDY1NDAwMEI0REVCQzdCQzI2RTkwM0ZFRDQwMzc1RDIzRjFGRDI2OEIKKzoxMDY1NTAwMEMwNDc4RERFMEU5NDIzOUFEOTFEODVFN0U2QjI0NUE4ODMKKzoxMDY1NjAwMDlGN0I0MzZDRUFBOUY4MkFDRDc0RDlGRDI3QTczRjM4NTEKKzoxMDY1NzAwMDQ0NzkxQzZGNDRBNzAxQkM3QUVEN0IyNzczNzVBMDUzNDcKKzoxMDY1ODAwMEU0NjE4MDZCNjRGODY0MTVBMDVERDNDRjk4NTkxNjdBRTYKKzoxMDY1OTAwMDY1OTczMjdEQjg4MkYzNzFFNjZDNEEzN0QwNzc4QTE5RjUKKzoxMDY1QTAwMDlBRTM4NzY4OEVCOTFGRTYzQkQ0RjE1M0YxM0REODlEM0QKKzoxMDY1QjAwMDgwQUY2Q0NFRTcyRDA2RTM3MzIxMDcxOTVDMEU1QUUwMUQKKzoxMDY1QzAwMDNCRTA2QjEyRTNGQjk2NjA3OTMwRDkzQUIxODdBRkYzQzkKKzoxMDY1RDAwMERGRTM3QzVGNDA5MkVCQTE5M0FFNEJCN0MzQzZEMzY3QkEKKzoxMDY1RTAwMDA5NURDMTAwOUVGNzQ5RTQ2OTk4N0YxNjk3QjNDQ0VBMkMKKzoxMDY1RjAwMDk4MEJFMDExRjIzNERCMzg1MzlEOUQwMzc2OEE1RTBFRDIKKzoxMDY2MDAwMDc2QjExOEY3MURDRTZGMEJCREU2QUZBMTdENEQ3MUIzMEUKKzoxMDY2MTAwMDkyNDVFNzM1QUU4QzE4QTA1RTY3MTU2NzRBNTYzRUZGNzcKKzoxMDY2MjAwMDZENUZGREYwRjM1MDVGMkJFQjQ2QkY3Q0IwNzZERDdDRjkKKzoxMDY2MzAwMDdFRjNBNEYwQ0JDODdGMEZCNDJCNUVBNDdCRjgxNUVDREYKKzoxMDY2NDAwMEU3ODE2RUUyQjVFODlCMjI4RTY3NzlFM0E5MkFBMDQzMzEKKzoxMDY2NTAwMDZGMjMwOTAyNUZDRUQ3MUI5Rjk2ODBCRjQzRTE3NTJFNDMKKzoxMDY2NjAwMENCM0M2NkU5NzYzQjlFRjJGOTlCRDBFRkM4NDYzQjdGNzgKKzoxMDY2NzAwMEQ2OTA3Njg1NUNDMkJBMzE0QThBRjQwMEJDQjMxRkU4NzIKKzoxMDY2ODAwMDQ2NzgzM0FCOTkzRjRDRTFFRTQ1QkRGMkU5QzNGREYxRUQKKzoxMDY2OTAwMEM1RTA3RTEzODQzNTE3RTQ3RDFGRUEzMzBBOUYyMjUzMzkKKzoxMDY2QTAwMDM4QzZDRDhFMkI1OTg4RjczMzBBQzA0N0YxQUNDQTE2Q0QKKzoxMDY2QjAwMDM5MUZBQTdDRUYwMEUwMjYwRjJFRTcyREYwOEYyOTYwMEUKKzoxMDY2QzAwMDI3NDc3MjY0RTAzQjYxRjcyNjRFMTJFNjZGRDlFMzk2RTYKKzoxMDY2RDAwMEMyNUUwRTg0QThCRDRDRTUyNUIzMjY0MUMwM0ZDRTNFMjgKKzoxMDY2RTAwMDJEMUJEN0QzMkFDMzZBODgwNEZFOUZCMDYzQjNCODVDNUUKKzoxMDY2RjAwMDBBQjhCNjcyM0I3OTRCNTMwOEU1Mjg1QkVCMzkwRDcxNEMKKzoxMDY3MDAwMEZFQURGOTJFNjMwRDAxRjlBRDQwRkI2RDQ3NTUyMjA0MzYKKzoxMDY3MTAwMDdFNjBCMEIyNjJFMzFEQjQ3RDVCOTM4RUY1MzczNjE5QUYKKzoxMDY3MjAwMEQ4N0U0MzUzMjUzRURCNkI1RTQ3RkI3NzZCODhEOUJGMzIKKzoxMDY3MzAwMDlCOUI0QUI5RDNDMUUwQ0UxMjc2NzI4RDg4NUZEQUUxQjUKKzoxMDY3NDAwMEEyRUQ2REZCMUZBMjNFMDk1OUUyNUE0NTk2RjYzQUQzRDcKKzoxMDY3NTAwMDM3ODNCNTRGOUY2NDhGOEJGNUI1Mzc4N0Q2REU2N0Q4MDMKKzoxMDY3NjAwMERCNTc5OTg5NTZGMDg3ODMzQ0VFMkZGNDVFODBENzA5N0EKKzoxMDY3NzAwMDU2QkFEMDZGMTY3OEY2OTREQUU5REU1RTkzN0MzRjQ3MUUKKzoxMDY3ODAwMDNDOURFMzExM0RDRDM2N0YxMkFENDNGODU2NzFGODUyNzIKKzoxMDY3OTAwMEY1QjM4RUM3NUY0NEQ5Q0RFRDQ1NjdCRDE1MzI1RjFGOTgKKzoxMDY3QTAwMEY5QkU1NDkwOEZCNUMzQTRGOEIwQzQ2MUIyMzlERjZEOUYKKzoxMDY3QjAwMDlEQ0RGQzMyMTI2NEYxM0FFMTk3QjkwOUIxRjk2NTZFRTkKKzoxMDY3QzAwMEJFMUY4NTY1RDRGNzUxQTY4RjFERjA4QkY2MkE2RjlGRUIKKzoxMDY3RDAwMDBBMEVENUQ5REY1OURBNEY4NUE1MUYwNzlDQTlFMDczQUEKKzoxMDY3RTAwMEVFOTM5MTM3RURGREE0RDY1RjhFNzZFNzg3NDY4NzAxNUQKKzoxMDY3RjAwMEVEQzA2QTI4QjU5NkIzMUNFNUUxOEVGQTQ1OEVFRjU3RDkKKzoxMDY4MDAwMDM4QkU5NzNCQ0FENzM4RUE0RjczOTRCRkU0QTgzRkQ3NDYKKzoxMDY4MTAwMDUxRkVCQUEzRkUyMkM3Rjc2NThFRUZBQjFDRTU3RkIyMkYKKzoxMDY4MjAwMEQ3MkZCQkVCOTNFMUY3RkYzMzNDMDlCOTFBODg5Nzk4NTAKKzoxMDY4MzAwMDZEOUZENzI5NTc0NTI0M0UyQTBFN0U0M0U2NzM0QkUwRDEKKzoxMDY4NDAwMDUzNDI5Njk0NzNDQzE3NjE3MTJEMTI5RjYwRjU1RkZGRDAKKzoxMDY4NTAwMEE4NDVGRTAwRUI1OEU3NDc2NjVBOThDQUQ1ODFGNkU3ODcKKzoxMDY4NjAwMDAzQTA4RkM0RkJGM0QyQUI4MUYxM0EyMUY1NkE3QzI1RkEKKzoxMDY4NzAwMDhCMDNCNUEzRENBNDExRTVGNTQ0Mjk1MDQ5QzJGODk5NkUKKzoxMDY4ODAwMDU3NUI4QzI4RjcxNkQzRjc1NjdERDVDRUU0QUQxOEZDQjAKKzoxMDY4OTAwMDIyREEyRUJBNUQ0NUJCMkYzQTkyQzRDNkQyNzY2QTgxRkYKKzoxMDY4QTAwMEJEQkU5QkY3NEY3MjU4RkZGODlFRjY1QkFFMzA3RjIxNUUKKzoxMDY4QjAwMDE0NkVBRjAyRDkxRDVFREI3NTEyOUU0RUZDODRBNjQ3OTYKKzoxMDY4QzAwMEFGN0UwNkUyMEIzQjk4MUY3RTYwMDZGNTAzMkM3QUVFNDYKKzoxMDY4RDAwMDY2ODVFOUI3REI5NDRCRjY0QjVGOUMyOEY3Rjc3RkUwQzIKKzoxMDY4RTAwMDVCOUFEMTRDQUIxQzAwMjBDMEVGRkY5NjM3MDZGMThDQjEKKzoxMDY4RjAwMDUxMTA5RjYzOUIwNzE4OUYxQjQ5RjgxRjhGQzM4MUJCRDMKKzoxMDY5MDAwMDA4RUJDQjQ4RUQzNEM2REJGNEJBRTAyOUQwNzU3Mzk1QkIKKzoxMDY5MTAwMDEyMUNFRjdCNTJDRjc4MThDRjk1N0VGRTZBQjYyRUZFMDIKKzoxMDY5MjAwMEVENjNCNDdCMzhGRTQyOUIyQjEyNTE4QTNGQjI0RDM1NEEKKzoxMDY5MzAwMEM2MTI1ODUyMEQ5NDIzOEY0MjVBM0NFNUMwMUUwQ0RGRkMKKzoxMDY5NDAwMDZCNjFENTY1RUYxNTdGMTZDNEQ5QzI1ODU2NDFFRkMyQTkKKzoxMDY5NTAwMDNBMDY3QzI0QzNGRTc2MUNDQjdFOTJDMDcyMDZCNzZGQ0IKKzoxMDY5NjAwMEM3ODFCMzA4N0UwMEQxMjVBNjI3MEQwOUY2OTk0MjM3QzUKKzoxMDY5NzAwMDUwM0YzQ0M5QkExMTk2QUFDNjI5OTNGQkUzOTQ5MkNFMjQKKzoxMDY5ODAwMEUyOTE1MkRCMzM3RjkxMjA1RTU5NEE3NEI2NEZDNUUzRTIKKzoxMDY5OTAwMDgyMUI2NUU5NjM4OEI3MDY4N0I2Q0YxM0JBQzU0RTU3MjEKKzoxMDY5QTAwMEEyQjQ5MzM5MTYzRUJFQTU4RjlFMEM1RjYzNDI2Q0ZFNjcKKzoxMDY5QjAwMEExNkQ2QTIzRjgzMTA3NjZEOUY5NDBENDk3OTU0QkY2NTMKKzoxMDY5QzAwMDA3Nzc0RTE4RjNEOUYxNDFBNjMyMDZFMTE5QzgwN0I3ODcKKzoxMDY5RDAwMDA2MjEzRTJENDUyOURFRDI4NzhFQjdBMDZDN0U1REMxOTMKKzoxMDY5RTAwMDc5MTIyQ0ZGNDAzMjZGMDUzQTg5QjI0MkNDMDVENkYyQkIKKzoxMDY5RjAwMDZGRTVGMDQyMjg0N0E3OTFEMjQ2QURCRjFGRkE3RTcxREUKKzoxMDZBMDAwMDhBRjc0QjkzQkQxRjI3RUNENUIzNkNGRDJFRTEzMjNFQzgKKzoxMDZBMTAwMDZDNEZEMDA1NzY2NDYxQzdBQTM0QUI3RDU1QzJEN0U5MDcKKzoxMDZBMjAwMDQ3M0I4RUY4NjBCRUJCRUI5M0VCM0ZGMURDQzJGREJEOTQKKzoxMDZBMzAwMDU0RjUwMjUyNzcxOEU4NDEyNjJCRTQ2MDEyN0JGQzQ5OUEKKzoxMDZBNDAwMEUwNkY4QjFFMEQzOEVDQzJFQTk2NjgxNUI0Q0ZBQTc1QkMKKzoxMDZBNTAwMDExODgwQkQzRjUxREVEQkE0MjZFMUZFRTlDMUE5NTU0QUEKKzoxMDZBNjAwMDJBODczQjc2MTFCNDhGQjM1QTE2RjlBQ0YzQzlFN0YzMTIKKzoxMDZBNzAwMEQ5MzkzQjJGMERFQzk1N0Q4QjE3N0QwOUZEMTU2QUY3RjQKKzoxMDZBODAwMENCMTgxRjhGNkM4MkZFRjM2QkQ4M0VCRjEzQkVDRDdDM0MKKzoxMDZBOTAwMDdFRUQ4QjE5OUU5Q0RGRDM1NTEyNDkyNjg3NEYyQURDNDkKKzoxMDZBQTAwMENGNTVBMjEyQzlFQkRGMzdEOTdDRjJCRTVGOERBN0UzQzkKKzoxMDZBQjAwMDk1NTRCQTBDOUZERTBGRTdCODNFN0IyOTgxRjg0QUJGOTgKKzoxMDZBQzAwMDQ2MDk2RTAyN0JBQTQzQjVEOTk5RkJGNjNDQjg2QjMxRjcKKzoxMDZBRDAwMEY4MzdGNDNEQTg4MzQ3QUU2RDFDMUVBNjcwM0RGQUU1NUQKKzoxMDZBRTAwMDI1Q0ZERTA1N0NCRkNFNDU0MDFGMDkzOEI0MzJCQjlEQTMKKzoxMDZBRjAwMDdCQjI0RjNFRURFM0QyN0U5OTFGNDc5NzBGMzlDOUZFMTcKKzoxMDZCMDAwMEM5RTVFMkEzODM4RjlCOEE0RjlDRUJBOTkzMEYyRTY1NjcKKzoxMDZCMTAwMDdEQjg1MUJFRkNGOUZEMThFNDkwQzI5M0M3RjNCNTg2NjkKKzoxMDZCMjAwMEQ1RUFDQzZGRTM3Mjk0RUQxNThBODQ4RDkzQzdGOTJDNjYKKzoxMDZCMzAwMDZCRjY4MzNFRTBCMzVEQjVFNTI4M0ZCREIzMTc0OUEwRDIKKzoxMDZCNDAwMDRGNDQxRTU0QUFGMTUyQzE5M0VFNkVGNzQxMUM3NEQ3MDQKKzoxMDZCNTAwMEUyMDdBNTY0NzhDQjhGQjBGODkwRjNCREU5NjZGQUI0OEMKKzoxMDZCNjAwMDRENjk5N0EwN0RBQTdBQTNEQzlDMUZCODVDRTVGMzc5RjgKKzoxMDZCNzAwMDg1QTZDNkMzODBBRjNDNDMyMTZCMjhCRTc2Q0M1RTU0NEQKKzoxMDZCODAwMDU1MDI3QzQ3RTUxMEUyMkFENTM1MDRFRDg3N0M5M0VENkMKKzoxMDZCOTAwMDBCMDUyOUJFOUVBNEVCREVDRUM1QzQ4OEQzN0EzQjREM0YKKzoxMDZCQTAwMEQ1QjYxRjIzRTREMEM5OEYzQjE3NUY1Q0JGMTBBQjdGMDYKKzoxMDZCQjAwMDRFRjk1RjcxNkI2QzdGQjA5ODE0ODMxREI1MjM4NTdEOTIKKzoxMDZCQzAwMDc2QTlGODBEMkQ3NkIxRjg2ODc1RjkyMEZBQkNGOTUyNUUKKzoxMDZCRDAwMEQ3QTlGOUQ3MDIzRjBFMzVERkNEQTEyRkM4NTNCQjY2MjkKKzoxMDZCRTAwMDk1ODA1RjZCNTA3RDQxOTJFMUM3QUUxRjA2QzM4NzEzNEUKKzoxMDZCRjAwMEZGMTMwMDlGRTk5RjFEM0U5RERGQjNERDNDQkUzRDQ0N0EKKzoxMDZDMDAwMDdDQjRENTE2RkQwRkRDMDM0RjUxREYzOTFGRDE0RUU0QTQKKzoxMDZDMTAwMEE3N0Q5MUY0QzgyMEZGMjY3MEU4MThGMDI2MEM3QzU2NUEKKzoxMDZDMjAwMDkzMzAzRUJCOTVDODU3RENCNEZFNENEMjg4NjUxMTdGQ0IKKzoxMDZDMzAwMEFBNTM4MjhDMUUzQ0ZGNDVFQzczMkJEMzE5REY4RjlCMkMKKzoxMDZDNDAwMDQ4NjI5REIwN0U0QzlEQ0IzNzdGMTVGMzlDMTc4QzM2RTgKKzoxMDZDNTAwMDBBNDcxMjdGOEE5MDM1MzhFRjExOEVGNTU4QzQyNzg2N0YKKzoxMDZDNjAwMEQ1QjdDRjJFQTdGRDhFOThFREMyRjhDNTg4Q0EyM0I2M0EKKzoxMDZDNzAwMDc1MkNDMEU1NDdGNEI3QkI3MjY4RUJGMzIzOEVGNUY5Q0EKKzoxMDZDODAwMDExMjU4MUY5NUQ4RjU0QUU2OTg2RTU0NkM5N0EzMzk0NDIKKzoxMDZDOTAwMEFDRkRCODBFM0I1RUI3N0VENEU1MEIyNzgxNjdGN0UyMEIKKzoxMDZDQTAwMDYzOThDN0I1QkJGMkUyRjE5MzQ3MDZFMTlCNzE3MjcyM0MKKzoxMDZDQjAwMDdCRjY4QjFFQjZBRkI0M0JEMzdCMzM0QjJFNUE2RENCREEKKzoxMDZDQzAwMDQzMjBCMjU2NjgxRDc3Rjc0NzI0MzM3QzUxN0Q2Mjk3ODUKKzoxMDZDRDAwMDk3QUQ2RTlFNkZFMDI3N0VFMEZGNTRGODEwQ0ZDRjFBN0QKKzoxMDZDRTAwMDBGOEY0RTZCNUMxNjRFRDJCRUM0QzNFQzg5NzU5OTI0Q0YKKzoxMDZDRjAwMDJBNTMzRTc5RjQ2NTI1MDY3OTBFODRFQkUxOEE5QkY1RUIKKzoxMDZEMDAwMDE4RDgwQkVCNDA0OTUwRkRGQjY4MTVDMUVGMTU5OUZDRjUKKzoxMDZEMTAwMEZCQzMzQUU2NTU4REU4MjA1MTk1QUU2NzIzNUU1QUJDMTkKKzoxMDZEMjAwMDIzOTNENjZCNUI0QzNEQzdDMkZFRjc2REM2QTk1NkQ4MDAKKzoxMDZEMzAwMDE3N0VFMjA1MTdDNjczMkI3QzcxQUY0MUU3NTVDOUQ3QTMKKzoxMDZENDAwMEMxREQ4QjRGNjFERTcxNzQ4RjYyOEM0NUZEMkUxMUE5MDAKKzoxMDZENTAwMDAyQkQ3ODVCMUNGMzg0NUI2MUVCQkRGMUEwNEZBN0VEMzYKKzoxMDZENjAwMDc3RTkwOUVDRTc5QjUzNEU3OTc1RDgyRjJGRThGNkMyRTcKKzoxMDZENzAwMDNDQjc1NEIyRjVGMkM4RTJBMkFGOTYyMDVBRUQ3OTI2OUMKKzoxMDZEODAwMDMzRTVBOUREMjYxRDZGQ0I2MkI2NUY5MTk5RThGNjdBRUYKKzoxMDZEOTAwMEU4N0MwMkI1MEFCOTlFQzIxN0QwRDg3Q0RCRDY5MTE4MjAKKzoxMDZEQTAwMEFDNTNFNTNDOUY0NDIyNzNEMDFGQ0U3N0U0MDlFNTM5MEMKKzoxMDZEQjAwMEYyNEQ4MkM2Q0NCNzYwREYzRjA4RkJGQjMwMDlCOTdFREQKKzoxMDZEQzAwMEM3NTVBMDZGMUI1QzNDMERENTQ0MzlGNUYzRjlGOTBEOUYKKzoxMDZERDAwMDEzRUJDRjk0OEZGQjYwREY3NzU3OEIxMkM0RjVDRkQxQzUKKzoxMDZERTAwMEFGNzMxRTQxMTIzOTY5NEFEODBGOEVCM0VCMjFCNjRFRUMKKzoxMDZERjAwMDA2Mjc2QjA2RDU1OEI0Mjk4NzNCNDhFMUNFQTY0M0I2OTMKKzoxMDZFMDAwMEQ4RTExNjc4NzU4RUUzNzc5NERGMTRGQzNDODI4QzA1MEMKKzoxMDZFMTAwMDNEMjRFMkNDMDI3RTI3REZFNjU0QzQ4RTNFNEZFN0JCMjIKKzoxMDZFMjAwMEZCMDUwREQ3RUJERDk1Q0ZERkQyMDBFQjdDQTkwN0YzOTcKKzoxMDZFMzAwMDIzQkVGNEMxQTFGQTdGQTFDRjVGQkY3N0FDMTg5RTM3MDQKKzoxMDZFNDAwMEU0MUY5OEQ0MDA3ODgwRkM4ODg5QTQyRjhFOTcwNzNEOTIKKzoxMDZFNTAwMEEzRkRDQUY1OUExOEFGNkM1RjhCM0IwNzVGNDVGREI0ODUKKzoxMDZFNjAwMEJDRTVENENCNzUxMDhGQ0VBRjI3NjhGRkU2MkI4QzNGRTcKKzoxMDZFNzAwMEZEMkRBRTU4MzM4NTNGRTc5QTc2RTQ4NzExQjU3MTA0NEUKKzoxMDZFODAwMDVBQUJFRDkyQTI5Njc4QTdDOEZCRjZENzQ3MzA4RkUyQUYKKzoxMDZFOTAwMEZBREE3NkNDRjdGNkYzQjhBRjdGNTIzQkRBNDkzM0U0NEYKKzoxMDZFQTAwMDU3QkQ2OEFGNzFGQTg5RkM3NzIxN0Y0RUZBOTQyQ0VFQkEKKzoxMDZFQjAwMEFFODE3RTQ2QjQyODA2ODAzREEyQkVEMTA1NzA5NTU0QjEKKzoxMDZFQzAwMEQyMzU4QkQyQURBNEEzNEI2MkZFMUZDQkE3NjcyOUNGQ0YKKzoxMDZFRDAwMEY0MTlBRUMzQkMyQ0IyODdFNTE3OEEzQ0YwNDBCRDlEQzcKKzoxMDZFRTAwMDdFQzFCRUZDRjk4ODBCRkNFRkMyMEVDN0Y3NzBDRDFCNEMKKzoxMDZFRjAwMDhDMEZFREY0MkM1MjM5M0Q0Qjc4MUUyMUM3QzMwODhFMDAKKzoxMDZGMDAwMDg3MkRGNTdDN0Y0RUYzQzYyRTY2RDdCRUMwRjdFNzVFQjEKKzoxMDZGMTAwMDg0Rjk4RjFCRjhGREE2MTRGQUY3NDZEMEJGRTBCN0JBODQKKzoxMDZGMjAwMEJBNUIwMTFGRTQxQTE3RkE3MTRFMzhCNkQ2MzNCRDc3MzMKKzoxMDZGMzAwMDQwNzVEOUVDRjhDQjFERkYzNkFFRkY2NTU3RTJFRjMyNTYKKzoxMDZGNDAwMDdFN0RERkZDRkYzRUUzREZGRjc3MUU3RkQzREYxOUZGOEYKKzoxMDZGNTAwMEJCRkVDRUYzM0ZGNDFGM0NGRkY5QTU5MkNENEZFQjU0OUYKKzoxMDZGNjAwMEJERDhERjRGM0MyMjNFNjZEN0RGQjIyQkI5QkZGREJBOUEKKzoxMDZGNzAwMEVBQjJFNTEzOEJGQ0M0RTlCNUU2NDI4ODk3RjgwRDc2RDIKKzoxMDZGODAwMERFQzNEOURGMENGOUI5NTZEMDgzQkI3ODVFMzZENUEzMDIKKzoxMDZGOTAwMDI2RTRBOTY2NEMxMTc5MzI0Q0ZGRDU3MEZENTdDM0Y1MzQKKzoxMDZGQTAwMERGOTExNDdBQjVCQzkyRTk3NzZBNUZDNEY0NDI1ODMyMzMKKzoxMDZGQjAwMERBRDE5RjA5OUM1NjMwM0ZGQjA4QTFDQjBDRTgzNUREQTgKKzoxMDZGQzAwMDkzMzQzRjNCOEZDM0VERDRBNzc5NUM5Rjk2M0ZFNzc4MUUKKzoxMDZGRDAwMENGRjVBODczOUQyRkVDOEI5RjEyOEM5RkZFNzc5NUU3QzIKKzoxMDZGRTAwMDAzM0JGNEFBQzBDM0FFNEE2NjJGRTdDQzRENkUwRkI2ODIKKzoxMDZGRjAwMDM5RThBODRENkFDNEZDMDMyNzNENUU1Nzk5N0YyREU4MDgKKzoxMDcwMDAwMEIxRDA2QkJFQTJFNkE2QTY3NzgyRDNGQjNBNEVFRkRGRTUKKzoxMDcwMTAwMEE4M0MxRjhBRTc4OUE0QTI3N0E1ODc4REYzNzlGRkQ5QjkKKzoxMDcwMjAwMDUwMzNDQzI2NUM4NTc0OTAzOTlENjREMkQ2OERGMTVGNDcKKzoxMDcwMzAwMEYyNEQ2MkY1MkZCNzdFNDRFRDEwNThGRjM1Q0Q1ODQzMjEKKzoxMDcwNDAwMENCOUZDRjIxMkU5MTc0RkY5MUQ4OUZBMzdGRUU2RTE2MTgKKzoxMDcwNTAwMDQ3OTU3MzU0ODdCRkU1QjQ4M0JENTEzODM3QjNEQjc0QUMKKzoxMDcwNjAwMEM1QTI4NTYwNEY3NEVFNUUwOUVCRDMwQjY5OThBN0JDOEYKKzoxMDcwNzAwMDNCQjNFMzM5RjRFN0RBMjcyQTAwODdCMDFCMDk4RkNGNDcKKzoxMDcwODAwMDgyNDlDMUYyNTA5Q0ZCNEU3NkJCN0ZGNzQ3NUQ3MUIwRTEKKzoxMDcwOTAwMEJGODI4NTEyQzZGRDVBRjUwNzczOTI5RUM3NzNEOEZCNEYKKzoxMDcwQTAwMDlBQzc2RkYzNzdDOUY1NDNCM0RCRDc3MjdBNTM3RjMxNTEKKzoxMDcwQjAwMEQ3NjM5MUVGQjVGRTk5MTM1OTFFNTQ3NTEwRjY3NzI0RDYKKzoxMDcwQzAwMDczQTYwQkUyRTlBOUZBODE0OEVGMzlDQjdFNTM5RDYyQTIKKzoxMDcwRDAwMDhFODRGRTI0RjAxRjRCRkJGRDQ3NDIwQTU4N0M1RUNDOTkKKzoxMDcwRTAwMDdGQThFNzA3RUFFRjYyRkJERTFDQUYzOUQ3NzQ3RDJBODEKKzoxMDcwRjAwMDdFQTRGMEZCNDUzRDkxOUZFN0FDRTdGNEM3QUY3NzlCREIKKzoxMDcxMDAwMDUzNjA3RTQzODU3RjJGMzAxQ0M0QjNDQkU0OUE2NEYxNzcKKzoxMDcxMTAwMDgzMDREN0FGNUFGOEIxNjc2RkEyNTUyN0NEOTM1ODdDMzcKKzoxMDcxMjAwMDlGOUE2REQ2RkRCNEI2MUNBNTI2NTlCQ0VCOTc1QzRFNTQKKzoxMDcxMzAwMDdFQTNFQTVDQUZDNzQ5OTY4NEY5MjQwNEU2MjVFNEQxMkUKKzoxMDcxNDAwMDM5RkVENTdDRENBQjJGNzNGQzE3Qjg1QzVGQ0RFNTlBQkMKKzoxMDcxNTAwMDEwMDNGNzYzNTI4RDVCQzVGNTg2Nzg3RUQyNzExMzdDODAKKzoxMDcxNjAwMERFNTUyQThGNkIwQzMyRUUxQzNFQ0YzOTk3MzlERkYzOTgKKzoxMDcxNzAwMDdDREMzOTQzOUNFRjQyM0VERUMyQ0IxQ0Y3NDMzRUVFNDMKKzoxMDcxODAwMEMyMjE4RTdCMzdDN0VGREQ5Nzg5NjdDNTJCRjE3RTg2REQKKzoxMDcxOTAwMDg2RTc2NjNFNUVGMzY1OEUxQkU0RTMzNjBGNzFEQ0VEMzkKKzoxMDcxQTAwMDFDQkZEQjJGMTNDRjA1N0NEQ0VEMEUzQ0E3OTJERkNFOUUKKzoxMDcxQjAwMENCMUNBRkQ0Q0JFNEU3MDA5NzVGQTc1RTEzRTM2QkY5N0EKKzoxMDcxQzAwMEFFMzBCNERGMURCMkY3NzM4Mzg3OEQyRjlFMjRGRTMxNUUKKzoxMDcxRDAwMEZBQUYyM0Y4QkVFRTk0OTVGNzJFMzI5MzhDMkJFQTNCNTAKKzoxMDcxRTAwMEQ3RTM1NEUzRENDMkUzMzVFMjI5QzYwOUYwRkREMDI5MzgKKzoxMDcxRjAwMEQ3RDA3MTkyRTA0N0Q0QkY1QTY1N0EzMDU1RkZDQjM4NkIKKzoxMDcyMDAwMDNDQ0IyRTcxMUVBMjdFMTVGNDNGMzk3NUZGRjc3MTM4MDUKKzoxMDcyMTAwMEVFNzNDMDNGNThGRkEyRkU5QzQxRTA2RkU1NzBCNDVFODQKKzoxMDcyMjAwMDIyRkNBMkZFQzI0MUZBRkYwRTg3RTMzQjk3MDhCRkE4RUIKKzoxMDcyMzAwMDdGRjcyMEY4Nzk4NEMzRjFDODI1QzIyRkVBMzcwRkQyMkYKKzoxMDcyNDAwMEZGRTMxQzhFQzcyRjExN0U1MTdGRkIyMEY4Nzk4QUMzODQKKzoxMDcyNTAwMEYxRDQyNUMyMkZFQTFGRTg5Mzc3QkJGQzY5RTIzRTA2MTIKKzoxMDcyNjAwMDgzOTQ0MjlFRjEyODkyNjZFMEZEMDY0NkUyMjRGODAxRUUKKzoxMDcyNzAwMERBNkE3NkJGMDFFOTcyOUU4N0IyOUNBM0EyMjI3RUYyRUYKKzoxMDcyODAwMEJFOTIyOEQ0REY3QjE3OEJGQkVEQkQ5QUEwMUZCMTM3RDAKKzoxMDcyOTAwMDk3RTcyOUYzQjg5NkM2RURDMUJENTdCMzM4QzhERTEwREQKKzoxMDcyQTAwMEZENkVGMUNGNDRCQzY4QUZDMUYyOUM3QjBCNTgxRUIzOUUKKzoxMDcyQjAwMDU2RDY4RTI2MjYwRTk3Qzc0RDQ0MURGMjY5RDhCOTJBOTgKKzoxMDcyQzAwMDYxRUY4OUYzNTU2Qjc5OUM2QUFGNDkzMDRFQjVCNzhDNDUKKzoxMDcyRDAwMDk1Nzc1NzkzOThBQkQwNzJFRUFBMzQ4RUY5QTc2MEQ4MDEKKzoxMDcyRTAwMDQyM0NCNkZGREM5ODQ5NTY5NzVCRjIzMTU2QzczMURGMTYKKzoxMDcyRjAwMDQwRTE3OTIzMTQyMUM0OTY5N0UxMzhBRjI1RjYwRjZGNEEKKzoxMDczMDAwMDMyQ0MxOUEwRTYwQTI3QjFGREJDQzJCMEREN0ZBODg3NDgKKzoxMDczMTAwMDQzNUNCNEZFRUZCOTlFMEM0RTRBN0U5RUU2QjA1NzYxQzgKKzoxMDczMjAwMEY0RTNGOTlBRjNGOEZDMDVERUNBMzkzREI3Q0U3OUFGM0MKKzoxMDczMzAwMDdCM0E5REU3QjM1M0REOTgzRkZBRUM2OThFQzdBOTcyOUIKKzoxMDczNDAwMDhDRUQ5RjEzNzdCMjczMzhBOUUyNkM1QTQ3RTMyOTM4NjIKKzoxMDczNTAwMDlGN0JEMzczQzQwMDMyRkFGNzk4RUI3NDhDQUI3RDg0QjcKKzoxMDczNjAwMEZDODc3MTM1M0FFRTREN0JEQTE1RTBCRjU5MURGQTc0OTIKKzoxMDczNzAwMDg4MDdDRTdCNEU1RkFCNDFERTc1MDczMTRDNDBFRjQ3NEYKKzoxMDczODAwMERGQzA3RUIyNUE4ODExNjNBNDZBMEVBMjlERUI4OENGM0IKKzoxMDczOTAwMEYxNzM5MzIyM0UwN0UxNkFBQjdGMzk4QkNGQkJCQzI1RUIKKzoxMDczQTAwMEI4MEVCNkVFQ0FBQjNEMzZGQjc1MTZGNzMzQkY2MjdBNDAKKzoxMDczQjAwMEVDRTcyNUY5RjlDNzU5MEUzRkIzQzM2QjhGRDc2OTFEQTkKKzoxMDczQzAwMEUxMTkxMEZGOTZFNzlEMzFFMUZDRjNCOEIwMTQxQzQ2QkIKKzoxMDczRDAwMDNGREYxNkRFQUU0MDdDNzJENjlFNDZDQzVGNEZCNUJGMTcKKzoxMDczRTAwMDk1RjFGMDVDQkZENTdFMTdGQkQ5QkZEOTczNzE3QjVEN0EKKzoxMDczRjAwMEM0MTk0NERDRTEzNEU0MTU3QkMwNEYwRjcxQkEzMEJFRDAKKzoxMDc0MDAwMDEyRkM5MTM1NEZCMkYxNDk4Nzk3RTk5MTBFMkY4QkUzMkEKKzoxMDc0MTAwMEZGMTc5RjdDQkE3Q0YyM0JBRjNERkVEMDAxREZBODNDNUEKKzoxMDc0MjAwMDk2MThDOUY3RTlFQkJDRUE3RkM5RUI2NzQwODc4MDJGNjQKKzoxMDc0MzAwMDM5MUQ0ODdEODYyRDhGNThFNDU1MzlGMUI2ODFFMzREQ0QKKzoxMDc0NDAwMDk0QkQyOUNFQkQxNEY4RjgzQUVCRjRFQjVGOEQ1NEMxMkUKKzoxMDc0NTAwMEJDNDQ5Qzg2OTBGQjFERkI5QjUzOEQ4QkM1MjU2NDcxQTIKKzoxMDc0NjAwMDVGOENFQjU1MTlFNjUzRUFFM0ZBNDcyMTBBRjZFRjk4RTkKKzoxMDc0NzAwMDA3Q0E3RDFFOUU1MzY0MzAzOEZBNUJDN0NGQUI4OTc5NEIKKzoxMDc0ODAwMEI5OEJDMzI2RENCNzQyQzdDMEZEM0VDODU3M0Y1MjA2ODIKKzoxMDc0OTAwMEVCNjNEMDM2NkZEM0M3RDY5QjREQTU4Q0RGMzY5NTJBQ0MKKzoxMDc0QTAwMEIxNzQ5NjVGNjVCRkI3QThCOEQzOUJDQ0FFMTA0RjYyREUKKzoxMDc0QjAwMEJEQjdBMjY4MjBCQzZBNzEyNDZBODU0N0U1RjAzOEZCMzUKKzoxMDc0QzAwMDk5OUIxMjlFM0E1QkZDRUI1MkUxRjE4QzI3QTQxQkY4Q0UKKzoxMDc0RDAwMDU2ODkxMUE2OTdCRjYxRUJDRjU1MUFDM0YzRkRBOUZBRTAKKzoxMDc0RTAwMDUxNzQzRTJGMDc1RDUyOERFRjJEQjBFNzQxQTkzOTY5RTgKKzoxMDc0RjAwMDM2N0U1N0I0MkM0NzlFOTQ4M0JGRkFFMjQyNDMxQkNGOUIKKzoxMDc1MDAwMDc5NkVCMTg1OUY0NzcxQjZGNzI5RURDNDQ4ODI3NzlGQTAKKzoxMDc1MTAwMEVFQ0NDNzg4MjExRDlDRTc2QURDNDEwN0RDOEVGRURCRDAKKzoxMDc1MjAwMEUwNUQ5MjNDMUM3MURGRDAwNkJFQUU2RDU0NjI2ODZGQTgKKzoxMDc1MzAwMDQ1Mjk5ODkwRUZCOThFRjNBNTEyOENFMUJENUVERkY2NzgKKzoxMDc1NDAwMDQ5NDlFNzRGOENFNEVCQUQ1MjlDMUM3RTZGODExREVGRTcKKzoxMDc1NTAwMDZBNEU5NjlEMEU0QUYyNzMxQzFCODVEQzA3MEY5OEY2NDcKKzoxMDc1NjAwMDdCQUM5QzcyN0VEQ0I4RDg3QURFNzdBRjk2RjQzQkY5QzAKKzoxMDc1NzAwMDYzM0FBNTgzM0VDNzNEMDk0M0E0QUZGMjYxMzY5RTZCRDMKKzoxMDc1ODAwMEVGMkI1M0JEMEFGMTVBMkEyMzk4Q0ZFQkFDN0Y0NkUwOEMKKzoxMDc1OTAwMEVGRDU0RTg0NUZFOEU5RjQzRDIyQUZGNjkzQ0Q0MzkyRjgKKzoxMDc1QTAwMDA4REYyN0I3Qjc0RjI5ODc1Q0NGQzk5Q0FGOUYxRTY0MDAKKzoxMDc1QjAwMEZFQTlFODlCNTZFQ0NDMkIxQzFBN0Q3RDIwRjdCMEVFODMKKzoxMDc1QzAwMDI5MjZCRjBDQ0IyRUY3QTlDNjIzNDEzNkRGNEI5NUZCRUUKKzoxMDc1RDAwMDRGMEE2Nzc2NEQ4NDgwM0U1MzQzMTExMkExRUI3QzdFQTcKKzoxMDc1RTAwMEE4MURGN0M5MzVBOTI3MEFGRTE4OTUyOTFERThCQzNCMzcKKzoxMDc1RjAwMDVCNjdGNzY2NThFQTREQTNFRERDODVBRUE4MUJGMjQwNDkKKzoxMDc2MDAwMEY4N0QzMEQxMTBFOTgyRkExMDhGRTkyQ0VCQUZBNzQ5NTEKKzoxMDc2MTAwMDI0MENGQ0FFRTUyQTYxNzgyRkZBQ0I5ODZBRUY4RjlBOUEKKzoxMDc2MjAwMDA5QjJGNTFDOTZDODE3NDA1Nzg3Q0VERjNEODVGQUE3RUIKKzoxMDc2MzAwMEI0QkQ0QUVERDA3REM5RjQ0OTFBQjM0M0QzOUZGMjk5NDIKKzoxMDc2NDAwMDk4MjcxMEQ2NjJDMDkyRjk5MzYyOThDRjk5NUY0NzBDNDEKKzoxMDc2NTAwMEYwRTc0QTNBQkE0OTg0NzZGQTZEODA2MzMyN0NBN0YzNDAKKzoxMDc2NjAwMEQ2MjBGRkEzMURGN0VENzMzQ0VDREM3QTdFN0RCQkI0MjYKKzoxMDc2NzAwMEQwMzI0RTY5MUFFM0VGNjk3M0JEQjg0RTdDQTM4QTlEODAKKzoxMDc2ODAwMERCRUIwRTJENkFBRjgyRjEyQUY5N0Q3QTM5MEExOTRFQTkKKzoxMDc2OTAwMEYxRTE3RkM5QzNGQ0NGNDkwOTAyRjgwOUYyQkM4NjM3ODIKKzoxMDc2QTAwMDlCNDhGOUUyQjE4NEJDRERFNEM1RTdGOUE2MjAzRTgzM0UKKzoxMDc2QjAwMDFGRkRDRjEwRTRCOUFDOUI1Q0ExNDNCRUY1MDdGRUJBMzkKKzoxMDc2QzAwMEQxQjA2RUJDREIxNEMyRUY1QkJFNjVFODkwNEYyNDlGNjcKKzoxMDc2RDAwMDdBMTlFRjhGRThFN0Y3QTg0QzJBMjEwRjM2NjEwMkZERUYKKzoxMDc2RTAwMDJDRjNFRkY0NTlGNkY5RkJFNjQ1RTdCQjkwOEVCMzU5NUUKKzoxMDc2RjAwMDcyREQwRUUzNDE3OTExRjJBOTU3NTYyREY5MUYyQUY3RDEKKzoxMDc3MDAwMDFCRERFQjQ4RjhCMTMyQjhDNzI0MjZERDVENjY3OUVGQTIKKzoxMDc3MTAwMEEzNzYxQkFDQUY5MzgzNDhGNzdFN0NDNjlBMzlCRUFGODUKKzoxMDc3MjAwMDA2N0YzN0ZGMzk4RUQ3Qjk5NTE3REQzNzY5NkI4QTc3QjIKKzoxMDc3MzAwMDU3OEZFRDJGNkIyOUNFQkJDRDcxNEZCQjJFMERFMjQ2N0YKKzoxMDc3NDAwMDcwRDg5MzhFMzc3RDZFRTkzMEMwRDc0M0VFRTRGNzJGQzMKKzoxMDc3NTAwMEM4QzE4OTQ2MzFENDhERTZCQjUwMEVGOTNEMkJBQkM2NkUKKzoxMDc3NjAwMEVCQzMzMjJERkRDRkUxN0MyOTlGRkEyOUUyMzdCRDhDOTYKKzoxMDc3NzAwMEU1ODdEMEJGRDlGOTk2RkNGRjgyNDgxRERFOEY0NDFBRjkKKzoxMDc3ODAwMEQ5MzkxOEIxMEYzOUZBRDY0NDMzNkM0OThDNUU2RDNGNDQKKzoxMDc3OTAwMDFGMzM5MzlGRjMyQzVDRTdDMkZDRDdDMjI5QTg0MzQ5NEYKKzoxMDc3QTAwMDYxMzNCQkJGNkFCRjZDOTQwMzdGM0Y0QzVFQzg4NDAzRTgKKzoxMDc3QjAwMEVCMDUxNEJFOTE1NDU0MEJBM0Y2N0VGNjJGOTlGRDBDRTUKKzoxMDc3QzAwMEM0MDFDNEI5RDFCNTJEQUNCRjUxQkE3MTVBODdGODQ5QkIKKzoxMDc3RDAwMDk5MEJFREU1RDFDNEYwNDJGRkEzMzUxNzgxNzM0NTYzRTIKKzoxMDc3RTAwMDg4QTU5RjQyMzg0NzZCRUZENzA5NkZBMURGRTU4Mjc4MDQKKzoxMDc3RjAwMDg3ODA2NzE0MzlFQTM1NzNCMDdGMTJBM0VEMEJBODlCMUQKKzoxMDc4MDAwMDM3MjIwOTdDQ0U3MUM2ODg3QTU3OTU5N0M3NDk5MjcxRkQKKzoxMDc4MTAwMDQ5NEYzM0VDMEIwRDE4N0Y5MDdFOUJEMkI4MURFRTI3OUQKKzoxMDc4MjAwMDAxRDBFNzdCMjQzNkZGRThCM0IyNzExMEU4N0FGNzIxODQKKzoxMDc4MzAwMDhDRDcxNEFDRUFDMDc1QkQyMzhERDk3N0VCQTkzREEwRDgKKzoxMDc4NDAwMEI5QzE0RUExQ0ZCMUE5Rjk1MDBFNTJDNDY1RTBGQTkxNjkKKzoxMDc4NTAwMDk0RkYxRTREQUJEQTk2MDZGMUIwQjQ2OURCODAwRkQzMEUKKzoxMDc4NjAwMDE0RkQ2Qjc4M0ZFNzY5Mzc4MTdEQ0MzNEIzMURFNTBGOUMKKzoxMDc4NzAwMDJFNjQwMjNCNjM3MzU5NTEwNkM4NUI1QUEzOUFENDVGQzYKKzoxMDc4ODAwMDZCNDk3MzIzN0M3QkQyMjQwNUYyNDIyOTZGRTFCQzk0QkYKKzoxMDc4OTAwMDdBRkQzQjMzNjlCMTNCRDdGQzFFOENGMzk3REMwODNFODUKKzoxMDc4QTAwMEM1RkJEMEEyNUExREY4NzNGQUQyMzI4QzdGRjU3NjQ4MDgKKzoxMDc4QjAwMDE4RkY3QTQzOEFBOTkwQUFCRDdDNUVFMzA0QjgyRjY3QkIKKzoxMDc4QzAwMDRFNjZFNDExNjhCNzU0OEVBRjc3NTM3ODU2RENEQTU4QjkKKzoxMDc4RDAwMDAyRjg5OTBERjk3RUI5MzA1Qzk0Rjk4MzA1QUYxQjBBNjMKKzoxMDc4RTAwMDlDMDcyQjUwRTI2RUNBREZERUUwQTk5N0Q4MzM1QTA1MTkKKzoxMDc4RjAwMEZDRUU4NTkzMzA5NDlFODE2MkYzMkRGMDlCRkNGQzFDODIKKzoxMDc5MDAwMDkyNEM3QUEyOTAxNzE4OTg0QUM4RUIxNkJBODE0RjY3MjIKKzoxMDc5MTAwMDJEQzM5RUFFQjU5QzBBRkY4MzNEMTdEM0I2QUY4Rjg1QUUKKzoxMDc5MjAwMDU1REUzMDI1QjQwQjYyODgzRjM1Njg0QzAwMzhFNUQwMTEKKzoxMDc5MzAwMEU5QkM2MkNCM0FFN0UxRjNGMzRDNUZDNEVGNDkzMkI5RkIKKzoxMDc5NDAwMDdGNjMxMEFCN0ZFQkUxRjMwMjFERkVCQUE1QkQzQjY0ODQKKzoxMDc5NTAwMDJGQ0JDMTRGNzcxRUMyRUU5NjdFRjFENzczNDBDN0I1Q0QKKzoxMDc5NjAwMDhGQkIzMUVFMzlGRDcxNzdGQzNBNUE1RUIxNEZDMjc1NkIKKzoxMDc5NzAwMEM2NzU4MkU5RjU3NzBGNDgyOEY3NzFCRjhBN0FFMDlEQ0UKKzoxMDc5ODAwMEEwMTdDQjBEOUVFRUFENUZBMEU1OUVDNzY1RDI4OTY4QkUKKzoxMDc5OTAwMEE5QzU3QkE1Q0U4OUY1RjQxODJCMkZFMTBFRDI4QTdEREYKKzoxMDc5QTAwMDI3MTc0MDdGNzVDNzNDMDRENjg5MTUzRjVEN0FFMzE3REEKKzoxMDc5QjAwMDY4NzkyOUU1NjNBOEIyRTI2MEIzM0E5Qzk2RUY4QTQ5RjgKKzoxMDc5QzAwMDVENTBCRTMwOEQyMDlGNDVCM0Q0MThFNEI1NUMwODc0N0IKKzoxMDc5RDAwMEU3RERBNEUxM0E0NkY0NzFCMEJGREQ5RDM3OEZGMkUzRjUKKzoxMDc5RTAwMEIyRDg2MzMzQTFEREIyQzMxMjQ0NTJFOTNDMEUzRTkzRDgKKzoxMDc5RjAwMDRGRTE1QUYxN0QwOUQ3QzdFNTg3RDJEOTVEMkIxQzdGQUUKKzoxMDdBMDAwMEU3RTg1NEFFQTNERjU3RDE3OTgyM0U1QzRBREE2NzAyRDkKKzoxMDdBMTAwMEJENTYxQ0RDQUU1QUQ3QjlCNzlCNEEzMUY1NDM5NDU3RDMKKzoxMDdBMjAwMDdDOUY4RTQzREJBREZDOTE2NEMwMTQ1NzQyQkUwM0FDMTcKKzoxMDdBMzAwMDk3M0ZGNUQ1RUVENzYwN0VDRDZBODkxRkU2QjU0MTg1QzMKKzoxMDdBNDAwMDdBNEI2MzBCOUZGMEU5MDBERjNFNzUyNkZEQkU2Q0NGREQKKzoxMDdBNTAwMDNFNzU0OTE5RTA4RERDMEVFQkVBRjI0MzU3MTJERDQyMjgKKzoxMDdBNjAwMEQ3NzMxRDMyRkEwQkFCMzJCRDlENzhCRkE5NjZCRjBGMkQKKzoxMDdBNzAwMEE1MUYyRTYyODM2QjE5RDcxQkQ0RUY1M0FERTdERDlFOTQKKzoxMDdBODAwMDQ4Q0Y0NDNFNUQ3RTQ4QjY4RDIzRTgxRjNENDNEODc5RkMKKzoxMDdBOTAwMEI0OUZGQkYxM0M5QUEwOUY1OEFGMDRGRDU2ODkwQkZGQTEKKzoxMDdBQTAwMDk0OUU4QTY0RjA2QzA1N0FDMEI5MUJFQURGQzBGM0MxMEEKKzoxMDdBQjAwMEE2MTAzRTFGNkFEMjkxNEUzQjAxOEZFMzU4NUUwQUJDNkUKKzoxMDdBQzAwMEE3NzI1QjA1Rjc1NjA1NENCODE4MENDRUE1OTg1NTkwRDMKKzoxMDdBRDAwMDg3OTkxNTY2RTVCQzVCMjM5MjdFMTEzQjVEM0M3N0JBQzYKKzoxMDdBRTAwMDIzMEJDMUM4OTk5QUZFREQxOTBBRjVDNzc2QUE5MUJCODYKKzoxMDdBRjAwMDIxNjQxRDU0M0E2NzU0RDMzNUFGM0UzRDVDOTE2RUQ5MzUKKzoxMDdCMDAwMEY3NUIyRkIxRjM3RDlGNEJENzcxRkVFQkYzNTVDNEY3QjUKKzoxMDdCMTAwMENFREIyQUY2RjNGODEzQUU5MzNCNkY1QkYyMDhDNEM3RDMKKzoxMDdCMjAwMDY5RkIyRkE2ODM3RkMxRjdGRjUyQjVDRjVCNTA2OTZCMEUKKzoxMDdCMzAwMDlGQjdBMDRFQjQ5Rjg5RURCRDE3NkZCRjczQzEzNUY2RDcKKzoxMDdCNDAwMEYxMTcyQzEzRUQ2RjQ0RjhCNThCQzM5Rjc3RkI1NEZCRjMKKzoxMDdCNTAwMEY4QjdENzYzRkIwNjBGQTM2RjRGQTYxN0YzQUQ1QjdDOTcKKzoxMDdCNjAwMDQ2MUNGNDMxNUVBODM2MDlGMkM5NEIzQUExOUU1ODc3RkIKKzoxMDdCNzAwMEE4RTYzNzIxN0Y1QjNCOUM1OUJFODk1OEY5NjhEQTAyMzkKKzoxMDdCODAwMDgwMDNGMkIyQUM3Qzk0NTE5OTY2OTNBQjRDMzNDQjU2RTQKKzoxMDdCOTAwMENFQUUxOTZFQUI5RjFCMkVCMjdEMUY1NjdCODU4MzJGRjkKKzoxMDdCQTAwMDM1M0NCRjg4NjUwMDBBMEM3MzBBQTczQTVDNDU3RDU0RDIKKzoxMDdCQjAwMDM1OUNEOUMxRjc5RUYwNjFGOURFNkJEOEZDRUUxREFFQTUKKzoxMDdCQzAwMEExMUMwM0NDRTA5N0RGQUI0NjNFNjdCREJGOTVDMDNEMkYKKzoxMDdCRDAwMDQ4NTRBN0RFQTk0NUVFODM3OUY0QkZENzVERjAzRThEMEEKKzoxMDdCRTAwMEU3M0JBNTc5MDhFQUJCMEQ4NTE1RkJBMzE2N0NCNjhFOEQKKzoxMDdCRjAwMEE0RkM0MENCMkRFOTJBQzMzQkE3QzM4NjkxNEI0MjU2MzgKKzoxMDdDMDAwMDdCN0RGRDQ4QjUxNkZDMEQ3ODdGODcwNkUzODVEN0MzREQKKzoxMDdDMTAwMDc4MEQ2QTRGMDlEODFEQ0U3MTNDNDU5NUI2NzFCQ0EzNEQKKzoxMDdDMjAwMEVBNzA5Q0VERTkyQzlFMkFDNkYxOENBQTczOENFM0FEMTgKKzoxMDdDMzAwMEVERTRFRkY5MzgzQjgwQ0Y1MjhEQjNBMUU4MUFGQjdDMUQKKzoxMDdDNDAwMDQ2MkRDMzcxRjYzQUM2RDkzMDZBOTk2MzlDMzQzNjFGMDMKKzoxMDdDNTAwMEZBOUU4RjEzQkJEODM4OUUzMTUzRURGMzE5NUQ4RkUzMzUKKzoxMDdDNjAwMEZDQzAzOTlGRDFGNThFNzEzNDFDMDdERUMzMzhENEYwQzcKKzoxMDdDNzAwMEQ1RTFCRTJDRDVEM0IzMDRFOUZGMEIxRkRBMzlBQTI3MEYKKzoxMDdDODAwMEYyMjhEQTM5QUZGOEQwQ0VBMUI1NENBODQ3NEE5OTdGOEYKKzoxMDdDOTAwMDdCNEY3QTE2RDJFNzgzMzQ0QTdGQ0Q0QUU3MjhDRjNCMjEKKzoxMDdDQTAwMDg4QTI1RjdDMjcwNzkxQzQyODQ0NTRCRkFERTQzQ0I4NDgKKzoxMDdDQjAwMEY4RjA5QzUxQ0RGMDNDMzYzREI0MTBGQ0QxODdGQzE4NTcKKzoxMDdDQzAwMEM3N0JGN0Q4NzRGNThFMjRGQUU4Q0U3NkY3Qjk4NDg1QTkKKzoxMDdDRDAwMDlGRkJGNDJBOEZDNzg2RDJEOTNFQTQyODlGRTNGMTlGNDkKKzoxMDdDRTAwMEQ3MjE0RTQ0OUY2RkI4MDlGQTQzNjc3OUJDQTgxRkRFQkQKKzoxMDdDRjAwMDY2NkM3NzhFRUZFQjlEREJDM0Q2QTkwRkI2OUY3MUEzQTEKKzoxMDdEMDAwMDFEMTEyNTJGOTQ1MUI4RTdGMzY5RENEOTZFQkYyRkIzNEQKKzoxMDdEMTAwMDgxRDNBM0U3QTcxRTc2MEU4ODk4MjNGMDNFQkM4RTZDMTUKKzoxMDdEMjAwMDVCQkNGMDc3MjdCRUZDMENDQkJCMjMyM0UwREVERkFGRDAKKzoxMDdEMzAwMEI3M0VGNjM0NTQ3QjUxNUEzODcyMTU5RDZGRUREMUVEMzQKKzoxMDdENDAwMEVFMTFCNEZDQUUzQkIxQzBEMDJDRkRENEJBRjFEQ0JEMTkKKzoxMDdENTAwMEYwNDM2RThFQjg2REY2RjMyRDc1RjZGMjZEMEU3QkZBNkMKKzoxMDdENjAwMEQ1RjQyMkIxM0ZDQkM2RDU2MzZFQTBENzdDRDg2M0E1MkUKKzoxMDdENzAwMDI0QkMwRDlFOTg3QzE3NDQ3QTJEMDhCMkI2MDI5RTg2Q0MKKzoxMDdEODAwMEZCREQyNDhFRUI1RDIyMTdFMzlDRDE1QzhDRDM0NEM0RDUKKzoxMDdEOTAwMEJBRTU4MDZGODFEQjZCODYyOTNEMTdEQzI3MjMxRTlEQUEKKzoxMDdEQTAwMEYwMjY0RUE0OUIyRUVBRTcyNDNBRkVCNzFCQ0VGMTBDMzgKKzoxMDdEQjAwMDA2RkZFREFCRURERjQ5RDQ2REJCODc0MEYwQzFENzZBNUMKKzoxMDdEQzAwMEFCRjY5RkI1RjBDN0NEOTE1OUZCQ0ZEQUYwMzRDNzU2NkIKKzoxMDdERDAwMEJFQURGMTY2NUJGRERCNTcyRkI0N0Q1RjE4QkRDQkY2MDIKKzoxMDdERTAwMEZEOEVENkJCNkRFNTNCREJFRkIzRDU1RkRBRDE2Q0ZCMjcKKzoxMDdERjAwMDdFNTc2Q0EzRURGQkYyNDNEQjZERTUxNTVEQkI2Q0Y1QzcKKzoxMDdFMDAwMDFCOEVFREIzN0Q3NzlEMThGRjE1RjQwMzdGMjNFMzc5NzcKKzoxMDdFMTAwMEU3RjdCNTczNUJDMTdFN0IzRkE4RTA3RUNFOUI3Q0ZGMUUKKzoxMDdFMjAwMEVFNkQ3RURGQ0Y0QUUwQkQyOTIwM0YxM0JERTAzNzM0NDEKKzoxMDdFMzAwMEE0NTE3OUE2QjZDNDA0MkQ3NzdERUI1NEQwMjMwNEFGQUEKKzoxMDdFNDAwMEQ0MjhENzQ2QUM4RjUyNjc3NzBBM0Y5RjI4NzdBODI0NUIKKzoxMDdFNTAwMDlFMEREQjJCRkQ3MUQ4MUVCOUZGQkI5MkEwREYyN0E2QkMKKzoxMDdFNjAwMEZFMkU3NzI4NDlCRjJCMDkyNTY5QkYxN0E0OUUxMkIwQTMKKzoxMDdFNzAwMDFGQTMyRjdCOTI5RTAzRUY5NzRCMzI4MjVDRTQzRUM5OTcKKzoxMDdFODAwMEYzMkU1MjY3RjVERkU2NkIyQzNFRjQ0Q0ZBQjRGOTVBNDgKKzoxMDdFOTAwMDJFREM4RkMxRTRCREZFNDhGRTM0RjAxQkVBRDU3ODQ5RTQKKzoxMDdFQTAwMEIyN0Q5QkJFRjFCQTI0QkMzNzcwQkVDNkU0RTVBRUQ4NDUKKzoxMDdFQjAwMDA4NUIzQzZERjlBMTMxMzZCOTdGMjkyRDcyOTM0NkVCRjEKKzoxMDdFQzAwMDlEM0YyOUEzOUUyNUYxQTc0NjdERjUyQTE4REY5QzBGMkIKKzoxMDdFRDAwMEVGQzlCMTVDNUMxRjVGNkMzMkY3OUZBNTdFQzA0QjRENTQKKzoxMDdFRTAwMDM1RjhGQ0Q3QTZGMEZFQjNENDI1N0NCNUE5MTZDQkJGRDgKKzoxMDdFRjAwMDZGOEFFMDMzRDE1NDg3Q0ZENzlCMUFGMUZCRDlBNkQ1MkYKKzoxMDdGMDAwMDU4M0VENzE0QzVFNzlCNERBREY4N0NCQkE5MURCRjlGNUMKKzoxMDdGMTAwMDZGRUFDMEYyQkI0RDMxN0MwQTM5MTBGNjJFMDk3MzdCMzMKKzoxMDdGMjAwMDUyNkM5ODEwNTZFRUU1NzM5MEYzNDQxQ0QzQzBGQkEzM0IKKzoxMDdGMzAwMDdBQjUwRjRBQzA4RUVFN0RDOTgzNzlCN0E5RjBFNEU0MjMKKzoxMDdGNDAwMEJCRDRGNDMzNzFCRDVGMTJCM0M3OTlDNUQzOTdDNkU4RUMKKzoxMDdGNTAwMEUzNzM5MTFBQzg5MUQ4Mzg1NkM1Mzg1QURBMkZBRTQ0MEYKKzoxMDdGNjAwMDdCOUNCRTU3RDg2NUIyMzE2MzRFOTI3QjNCRjE0MkU0QjUKKzoxMDdGNzAwMDYxODNEMzQ5RDQzRkY3REQ3RkFGNTg1NDA2RjQyOTQyREIKKzoxMDdGODAwMDNDQTUzRDI1MzczMkJBRUQzN0JFN0FENUUwRjg0MzlCQTQKKzoxMDdGOTAwMDJGN0YyMDFFQTU1RkZDNkUxNEM0QTdERUM5MTVGOEVDNjgKKzoxMDdGQTAwMDFFMDVDMTJENDUwQkVGMDIzRUVDM0RFQUMxNzlGNTFFRTEKKzoxMDdGQjAwMDRGNjdGOTI4MTA1NDFCNDJGRUVCRjI0M0JFOTg1NTNGMjEKKzoxMDdGQzAwMEFDRThDQThDRDlGNTQ1N0VDQ0FBMkY3QTRGRUYwRjgwNEEKKzoxMDdGRDAwMERDQUYwQUM5QjFCMzEzODEzRjRDQ0UxRjhDRUY0NEZGMTUKKzoxMDdGRTAwMDJCQkEwQTYzOUFBRDFGN0JCOUI3NURBQUMxN0IxRjg5MDMKKzoxMDdGRjAwMDlFMzEyRjg5RkYyMTlFQUI0MjJBOEVGM0Y2QTEzMTk4NDQKKzoxMDgwMDAwMDdGNDBGREM0RDg1OTE2RUY4Q0IxNzE0MzMxMkI1RkQ2MzgKKzoxMDgwMTAwMEFGNEU4RjlEQ0RFRTg3MkY1NUJGOUYzNjdDODQxQzI1OUMKKzoxMDgwMjAwMDdGRjBBNjNFOEYzQkQ4OTMyOEZGQTZFMkZENkVDN0REMEEKKzoxMDgwMzAwMDFGQzBCQUUzQTFGRjdGOENGOTQyMEE5NjQ1QkYwRDVERDAKKzoxMDgwNDAwMDcyRDQwM0U3NzlDOTYxREI3OEI0OUQyRTdDNzQ1OEFGOTQKKzoxMDgwNTAwMDUyRDNERDlFMEZGRTdCRTAyNTVDQjdEOUY5RjIwODlDNzgKKzoxMDgwNjAwMDJGQTdGRDVENTBCNDU2RTk3M0ZERTdDQjFCMzg1RkFFMUIKKzoxMDgwNzAwMEYwMjZENDA4N0RGNUNFRDEzMTE3Q0QwNzc5QkJFOTc0NTAKKzoxMDgwODAwMDUwMTkwQjc5MDRFRDc4NzE0NDVERDdGODZBRDA4RkVGMDEKKzoxMDgwOTAwMDFDNUQ5QjA3RjFCNEU1NzJFRkJEQzlDRUNEN0VBOEIxRTIKKzoxMDgwQTAwMDM4MUI4OUI5N0IxMjk2Rjk4OEY4MEMyMUI0NUY2RjNGQjEKKzoxMDgwQjAwMEZDQzBFOUU3MkM2NUE3QkUxNjRGOTc5RkM1REQ1NzFFOEMKKzoxMDgwQzAwMDNFMzNGMzBCMTRGRTk1QzdERTUzMDE4RTYzNUFDNEU1QUQKKzoxMDgwRDAwMEI3Q0M1RkUyRTdFQjk3MUQ3QTREODVGOUJERTk4RTk2NDcKKzoxMDgwRTAwMERDN0YxMTNEMzUxMDRFMkQ2NERCMEY4RDkyNkU5MEUzRDkKKzoxMDgwRjAwMDQ1RUMzNzE4ODA5RkJFRjYwQTE1Q0RCNzdFRUQyNkYwMDkKKzoxMDgxMDAwMEJCMEU2MkJGNDI5QzdCNTg0Q0MyMDFDMEQ3QTJBM0NCMUUKKzoxMDgxMTAwMDMxM0VGQ0Q2MTMzNzcwN0JBRUJEMDJGOEUzMURFMkFBRjgKKzoxMDgxMjAwMDgxRjlCRDQzOUUwRjRDQjRFMEFGRDhDRkZDMThEMkNBNDIKKzoxMDgxMzAwMEVDMTg3MTJFOTBEQUIzMzZCQjY2Njk4N0JEQkM4NENDNkYKKzoxMDgxNDAwMENEMDNCREIxRTQyMTM3ODk1MTE0REQ0NTJDRjcyRkQxODIKKzoxMDgxNTAwMDc5RTdGODk5QkRCQjk0MzRBRTA3N0I0RUYxMzBGRjYwRjAKKzoxMDgxNjAwMDUxOTAyODIzQTgzRTVERjE5Mzg3MkJDMEVFQkZEMkNGNUMKKzoxMDgxNzAwMEY2MUQ0NTFDRTNBRTJDNjZFRjJEQ0I4OUE5QjA5RkYwMTAKKzoxMDgxODAwMDg3QTMxM0U3N0YwMUI4Q0YxMzVCMEZFQjMyQzk0OEJFNUIKKzoxMDgxOTAwMEZGNzc0N0FCMURCRUMxRTA3N0MyMkJDRUJEMEY4OEE3Q0UKKzoxMDgxQTAwMDcwMzhFNDQzNTJEMkZDQjQyOTdFQ0U3NzVDOEZBQ0YxQjgKKzoxMDgxQjAwMERCRURGQzBEOEVGMjZDM0Y4RkIzQ0E0NDA2M0FCRjEzNjEKKzoxMDgxQzAwMEY0NDY1RDE5RjgxRENGRDk0NjhGNzg4Q0I1M0FEQ0E3RjcKKzoxMDgxRDAwMDE1MEUwMzdGNTFCQjYwMDJCMUQ0RkJBMzE2QzFGN0U3QjQKKzoxMDgxRTAwMEE1RTc5NkUwMzk3MzI1M0UwMUYzRjFCQzA0RjMxNDU1N0QKKzoxMDgxRjAwMENFMEY3MjVBNjAwMkY5MUNDNDQ5MUJEMUE5NUZFQjBCNjgKKzoxMDgyMDAwMDc0NDI3OUJEOUY5RDgzNkEwMDM5QTVGRDZEMDlDQzNDMDAKKzoxMDgyMTAwMDBENzE3RDJGNjk4RjlCODVCMEZGNkQ4RjdGRkI3NDdCMDgKKzoxMDgyMjAwMDM5MURFNDA5RjQwOUJDMDA3QTE4MDRFMzQ1RTlBNUY2MTAKKzoxMDgyMzAwMDdBN0VDMzVFNUVENjg3QTdCODZDM0RGNzExRjA2QTcxOEYKKzoxMDgyNDAwMEY4OUQyMTUyQTk5Q0I3REFDRDJCQkQwQzdFQjgxMTFDMkMKKzoxMDgyNTAwMEVBREZDM0VERjk5NTQ0OEY2MkRFNjI4OEYxQzEzREIzNzgKKzoxMDgyNjAwMDU4REVDNDNEN0VERDg4RDJFRjkyNjJFMkY5ODgwREQwRkYKKzoxMDgyNzAwMEQ0QjI4RTM1N0MyODkxOTg0NUFGMzcyODNEMkFGMDY1RDkKKzoxMDgyODAwMEMzODcwQUJFREZBQjQ1QkUwNTc4NTU4OTg5NzZBRTk3QjAKKzoxMDgyOTAwMDIyMERGNkFGMTVBREM2NjZGNzkyMDI3RTJGQTAyMzdGQTIKKzoxMDgyQTAwMEExQ0QxRkI0Rjk3QjQyMkZCOEI5NUVBNEZBNjI4MzNGMTcKKzoxMDgyQjAwMDE3RjQ2MENGNENCNkFGOUU1MEQ5RkUwRUFCQTdGNkQ3RTEKKzoxMDgyQzAwMDZCMDMzODUyRDVGM0Y1RDdEQjlFQUNERThBOUZGQ0YwMEEKKzoxMDgyRDAwMDg5Mjg5NUY3NjVGRkYyRUQwMDZDQTZCREE1QjRFNzQxQ0UKKzoxMDgyRTAwMEZFNDNGREMxNzUwMUUwRTMzNzk1NjgwMEU2RkQ1NjJDQkQKKzoxMDgyRjAwMDc5REVGQjJGQjlCRTgzN0MyNzM4MkZCRjkyRDNFOUVERkYKKzoxMDgzMDAwMDdGREU3QzIzRTBGRDgzODM2RTNDNkZERjcwQzgxM0Y3NTQKKzoxMDgzMTAwMDUwMjJBRTNDN0ExN0UzQTc0MzlFRDc1ODc5MDNGRTZFRUUKKzoxMDgzMjAwMDU0QzMzMUJCQkMyRDdCRjREQjc5M0E2RUVFNDU0N0YwOEMKKzoxMDgzMzAwMEZCRDhEMTdFNUU3OUUwOEYzM0MxMUU2OTIwM0RBODI3MkUKKzoxMDgzNDAwMDlDRUQ2MEZDMEZCMzcwRkQ1QTA4RTdGRTlEREY0NUJFNTMKKzoxMDgzNTAwMDU1MDNFN0ZCODZBMzlCMzFBRkFBRTFFODJDQ0NBMzZBQzcKKzoxMDgzNjAwMDcwQzg3OTFERjc0MzhFRjlFREJGQjMyMUYwNDE2MkNDOUYKKzoxMDgzNzAwMDJFNUVGQkZERUY0Qzc4OERDMjczRkVDMEFGMDM5MjJERDUKKzoxMDgzODAwMDdFQzRGNDQ0NkZENzFEREY3QjUyNEZBRERGREZFNTdFNDcKKzoxMDgzOTAwMDdEN0ZCQjE4QjZEMzhGMzEzQjlFMUM2N0NGN0E3NzNDNkQKKzoxMDgzQTAwMDAwN0U1M0ZEM0VCNzQxMzUwOEE5RkZFMUZFNDdCRTBCRjUKKzoxMDgzQjAwMEZDRkRCMjA3RTMwRENCN0ZGOEY0OEJEN0QwRjJGMkM3MDgKKzoxMDgzQzAwMERDMzlCM0Q5MzQzNEM4MDMxNjc0ODEzM0VFOTBBRjJCNDMKKzoxMDgzRDAwMEU4QjBFQ0M3NEZBQkZBNTVFQ0ZEMDM1OUZERjQ1OEZFN0QKKzoxMDgzRTAwMEQ4NDk5NTVDMzUxMDdGRDNCQjRFQUFFQ0ZDQjk4MzJFREYKKzoxMDgzRjAwMDVEQUZDRDA0QkI3QkVERjdGRkFDODI3Q0JENzU0MjIyNDcKKzoxMDg0MDAwMEMzMEEwN0I2QUZEQkY3MzREQTc1ODAyN0E0MjNBNzUzNzYKKzoxMDg0MTAwMDFGREQwNkQwMkI3RUUzOTM5M0IwNUUxMEQ2QjFDMUU4OEEKKzoxMDg0MjAwMEY1NURFMDk5NUNFNEVCMUYzRDA5RkIwNUZGRUEzMTAwRDcKKzoxMDg0MzAwMDBGNzUzRkZBNDYwMEU2RjM4NkQyQzhGOEZCRTE3NTc5N0UKKzoxMDg0NDAwMEIwOEY1RUU3OEVFNjA1RjFDOURFRDdFREZEMjZGMkRERTEKKzoxMDg0NTAwMEQyMzNERkNDNjM3OTUwNjYzRUZCNURBMzY4M0VDNjAxMzQKKzoxMDg0NjAwMEY3REM4NEYzNUM0MjIyQzg3Rjc1MEZDQjk4ODdGRUJFOTEKKzoxMDg0NzAwMDQyNkExRTRCMjIxRkQ3MDU5ODFFN0JBM0QzODM5N0RGMkEKKzoxMDg0ODAwMEJEMDEwQTE3RkNDNUU3RTUxODNCNkZDQkYyMTJCRjI5MDcKKzoxMDg0OTAwMEY2M0RFMERFNDY1QTdFREZDQkU4OTUxQjcwODk3QkFENkEKKzoxMDg0QTAwMEJDMzZCRTNEQjBBMTFCRThGNEY2NDg3MzE4QzQyQjI5QjYKKzoxMDg0QjAwMDFFQTIxQzZGMTJFODIxRjlDQzhDNjE4QzRFNDQ1NzJBMDUKKzoxMDg0QzAwMDc4M0JBQTI3QTdDMzdCQThERkVEMzY3RDEzNkNFREY4QjgKKzoxMDg0RDAwMEJBQzZDNkJGODc4RjRGRTE0RTAzRkJFQzhEM0M2QUVGRjcKKzoxMDg0RTAwMDI0OTlERkYyODA5MDdGNkE3RjU4RjhDQzIyRTc0Q0VFMjcKKzoxMDg0RjAwMDBGNkM2NDcyMkVFNDNFMzZBNzA2QkVGRkRCMEI0QzhFN0IKKzoxMDg1MDAwMEEwMURBQ0YzMTRBRUY4MzBGQzdFNzI5RTg0N0FDMTQzOTkKKzoxMDg1MTAwMEUyQzlFNEZCODA5QkNCQjdGRDNCRjVDQUQxQkUxNTdDMUQKKzoxMDg1MjAwMDQyRTE1NzYwRERFQUU3MTdCNkNGNEJFOTgwRjZEQjkyMTAKKzoxMDg1MzAwMDg3Njg3QkFCN0QwRUUzNjIzREI1RkZCRDY1QkQ1RkNBNUQKKzoxMDg1NDAwMEY1QzEzNTAxQzdFRkVFRUNDOTFERDI3RDc5RjVFRUQ4NDYKKzoxMDg1NTAwMDIzREYwNUY5QTVGMjBBRUI0RkZEMEZERDk4MjdGMkE3RkYKKzoxMDg1NjAwMEMzNEZCREY4NzVDQUU3N0ZFQTEyNzI2QkQ3QTc0RUI5NDEKKzoxMDg1NzAwMEFEM0IzMjk5MjQ5M0RCM0Y2OTA2NDkyQUI3RjQ3RDUyMUIKKzoxMDg1ODAwMEI5RDUxMkM4Q0ZGRjUxRkE1NEUwNkY1MUMwOUVFNzI0MEQKKzoxMDg1OTAwMEY0NjMyQTNDM0FGNUUzREZGQzNBRTJEM0E5MUZFOURGQjIKKzoxMDg1QTAwMDBCQTQ2MjIwMUYwQUZFMTM3Q0I3RUMwNzJCRjA3NzQxNjcKKzoxMDg1QjAwMEZBRjg1M0YwNUYxRjdGMEFGRTczQ0VENzhFM0ZFN0Y3QkUKKzoxMDg1QzAwMDJCQzE1MDExRjE2MkZBNzRBRjIxNTEzRkM0NTM3RjJFNzkKKzoxMDg1RDAwMDYzM0NGNTAyODU2OTNEQTVGMzg1QzM4NTc4OEU3ODlENUEKKzoxMDg1RTAwMDhGRjlFNzE3ODIzRDgxQUMzMkJDMDcwN0NCM0RCOUVBNzIKKzoxMDg1RjAwMDdBRDAxN0UyN0Q4RjhGQzVCRjJGODQ3QjAyRDYzQzkwNDcKKzoxMDg2MDAwMEQ3OEVDQjAxRDhFRjRBQzQ0ODREMzI3Rjg0NkE2NDg0NDgKKzoxMDg2MTAwMDIzNDE1MjdENjdGMUUyMEI2MEZGQzE3ODY5QTM2MjQwOUMKKzoxMDg2MjAwMEI3MTlCMjM2NkEzNUY4RjlFREVDQkNGQ0UyRTZBRjA1RjUKKzoxMDg2MzAwMDYwMUZGRUMyRjEzMURCNDA3RkRERjlBQzRDRjhFRjI4NjIKKzoxMDg2NDAwMDJBOTA2RjcyMDdBN0ZGOUIyNEJBNzMyQTlERTcxREM3NjQKKzoxMDg2NTAwMDk5NUZCMUI4MkQzOUJGMkNFM0Y1OTc2OEY3QThBMDk3QkIKKzoxMDg2NjAwMEE4NUZGMEJBMzUxRUJFOENGRjlFNjRERDFFQzdGQkUzMUIKKzoxMDg2NzAwMDM3MjA1RjJENzNGMDU1ODRGQjhEM0YxNDdDNzUzNUI5MjEKKzoxMDg2ODAwMDlBRkI2RDJFNkIzRURCMENCOTZDMUJEODI1MTc0RUIzRDUKKzoxMDg2OTAwMDM4NjRFRjcxMTlFOUQxN0I1ODYyRjk0RjEwMEY5RTAyQ0YKKzoxMDg2QTAwMEZDRDBBMzVBRjNEOENFMDNGRjI1QjlERkEwRUZGQkUzM0MKKzoxMDg2QjAwMEJGQUJCODlGNTZBOTdGRTI5NTA5QkJFOUYzRkMxMzJGMjYKKzoxMDg2QzAwMDk3RkMwQ0NBM0ZGOUVEQTg1N0M4QzBGQUQzNEZGQzA1NzgKKzoxMDg2RDAwMEY3QjMyRjlDRjAyMDFDMTc0RUZDNzJENEZENTA3RUQyQjUKKzoxMDg2RTAwMDgzRjdENTVDNThFMzYxRjk5RjI3RkNCMUIxRjA3RDI0OTUKKzoxMDg2RjAwMENCMTc1QUZCRjMzRjRGNDhFMEJBRDQ4Mjc0N0IyOUMwQjIKKzoxMDg3MDAwMEZDQjFERUUzRkZGRTdCQzgxRkVFM0RFRUQxNjExRTBEMjYKKzoxMDg3MTAwMDI3RDI3MTdGQUJFMTQ5MUZDNjY5MkVGQ0ZDQ0YxNUQ2NkQKKzoxMDg3MjAwMDdDQTZDQjlEQ0Y0QTdFMUZFMjA1M0ZBOTg1M0NFNTBCODkKKzoxMDg3MzAwMDk5NkNERkEwRTE2NzUzRjZDMzM5QTIxNTQ3NEZBQUIwODEKKzoxMDg3NDAwMDFGMzNGRDE3N0Y5RDAwN0FFN0MyMTE2NjRGQkNFQjRFQzkKKzoxMDg3NTAwMEVDODU3REQ2M0YwNDZFREZFMDg2RjgyRUFDRDdDMzA5RUEKKzoxMDg3NjAwMDY5Q0E4ODVEMEZGN0UxMENDNDBCQzNDMzA1OEEwNzk4N0IKKzoxMDg3NzAwMDE3QzU0QjFERThDQjU0RjhGODNGRkZCMEY4Nzg2RjAxRjAKKzoxMDg3ODAwMDhDNUY3RkZDRjMyODM3RkQ3ODkxNENGNkRFMUY4M0EzQzYKKzoxMDg3OTAwMDRENzRGRUVDRkQ4OTNGNEYwMEZCRTg0RjVEQ0RCOENFMzgKKzoxMDg3QTAwMDBGMzZFRkZDOENGRkQ3RTYyREM1ODczMkVGQ0E3RkQ4OTYKKzoxMDg3QjAwMDc5MzNGRTNGMTFEMDU5REU5RjQzMEUwNkYyRjk0RkVFOUEKKzoxMDg3QzAwMEM1RjI4RkZDMDZDMjNCNDRGOUFGRkQ4NzlERkYyN0E0OEQKKzoxMDg3RDAwMEZCMTE0QUY3QzBFMDc0RkY2RjE5NkM1RkY4MUY2RkRFODIKKzoxMDg3RTAwMDgzRDFGRDU5NEU3NzdGMTBGMjEwMkVGQ0ZDQUYxODVGM0QKKzoxMDg3RjAwMDE3RjMxRjZDREUzQkZGOTNDRTVCRDg0MzlCNUM0NjdCM0QKKzoxMDg4MDAwMDUxMjFFNDYxQzdCQjc1MEFFN0JBRDJCOUVEMTA5NjkyNUYKKzoxMDg4MTAwMDc5REVCNTEzQUU2NzMyOTg3RjIxNEIyQzZFNDM0NkIyOUEKKzoxMDg4MjAwMEY4MTFFMUZFNDZERkVGNDE2QUVDN0M5NUEyQUQ2N0Y3RjcKKzoxMDg4MzAwMDkxMjkwNkRFQUZCN0U5OEE0NTA2RTY3NjkwRjI5NzIyREYKKzoxMDg4NDAwMDUwMkU5ODhBQkY3M0VCRjRCQjk0MkJCRTc0MUFFQ0ZFQzcKKzoxMDg4NTAwMDk2NjYwQTFGMURBN0M1QUYwNEE5RTU0NERDQTVBRUI4RkUKKzoxMDg4NjAwMDY3MDIzRTVGODNFNzA2MUVGRjcyMDc1NTlCREZBMTM5NTMKKzoxMDg4NzAwMEZDMDU5RjZFRkZFRUUxRkQ3QkM5QTkyMEU0MkY3OTBENzkKKzoxMDg4ODAwMDA1RjM1MzdEQTQzRDZBQ0QzN0YwMTA0QjNCRkFCRDEzODEKKzoxMDg4OTAwMDdFMTBEMDYyNEY1RTJBRkVGRTlDQzFGQzRGNTkyQUVGMkIKKzoxMDg4QTAwMDg2QkM1ODMyREVDNUVFMzcyN0VDNUNGMUE2MDIyM0I2NTMKKzoxMDg4QjAwMDg5RTU1RDc4RURGODVDREYwRDc4NTQwOEY1MEZEOUJDREIKKzoxMDg4QzAwMEQwQUYyNERDOUY1NDc4MTc0QUE5Q0JGNEQ5RUI3MTdGNDEKKzoxMDg4RDAwMDY5NTBGQTMwN0E4Q0FBRTdGNDU5NjVBMzg3QzBGQjQ1NDIKKzoxMDg4RTAwMEU4NjJBMzg3QzBFRkE1RDJDNTQ5MEYyN0ZFN0Y5NUMxRDcKKzoxMDg4RjAwMEUyNzQ4MjRFQjY3QzkwNUNFNjk3QzRBOTgxRkNDQkMzM0YKKzoxMDg5MDAwMEZCMzEyRUYyQ0UzRkJGNzYyM0YwRTlGMjlGQzlDNDRCNzQKKzoxMDg5MTAwMERCQkY3QkQ4NEZFMjIwQkY0QTRDMDUzRjZCRDk1MTE5RDIKKzoxMDg5MjAwMEUzQzJGRjE3NEJFRTQ5QTcwMDgwMDAwMDAwMDAwMDAwRTMKKzoxMDg5MzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDdCN0M1NEQ1RjAKKzoxMDg5NDAwMEI1RjAzRTMzNjcyNjMzOTk5OTY0RjI5QUNDRTRDNTI0OTYKKzoxMDg5NTAwMDgxMTgzNEUwMjQ4NDgwODIzQTIxODAyMEY0M0FBMDA4RUYKKzoxMDg5NjAwMDdBQTM4RTEwMjA5ODI3NDg1QkRBRUE4RjA5NDExQTFFRjUKKzoxMDg5NzAwMEI2NDFFNUExNDUzQTIwMjhBREQ4MDYxQUI5QTBBODgzOEEKKzoxMDg5ODAwMDNDQzQ1NjZGQTNFNURFQTI0NTBEOEE4MkM4MjNBNTE3MTUKKzoxMDg5OTAwMDNGREFDRjVCQkVCNUQ2REUzQjczQ0U2NDAyREFBRkJGNDMKKzoxMDg5QTAwMEZCRkRGM0U1OUY5MzdEMUU3QkFGQkRERTZCRURCNUY3NjEKKzoxMDg5QjAwMDVDQkUwQzdGQjczMDc2NTk1QzE5NkI2NTJDODNCMUJBRkQKKzoxMDg5QzAwMDVGM0IxODRCNjdFQ0MxOUQwOUUxQzlGOTcwRERGNUU5MjIKKzoxMDg5RDAwMDUwMzY4NEIxNzM0QjdBMEU2NUMzRkREMDJGMTVERjU2MjgKKzoxMDg5RTAwMDdDM0RENDNERjQwRUI4RkZBMENBRUUwRjk0NDRGQjkxMzkKKzoxMDg5RjAwMEQ3NTRBNzgxQjFFMThDOUREOTYzOUIxMUI2MzNBNjZDODYKKzoxMDhBMDAwMERCNzcxRkY1REIzMUREOTRBMDQ0REZCMzNBNEQzNDJFMjQKKzoxMDhBMTAwMEJDRTdDN0U3QTE1RjI4RTE0MTRBREZGRTE4NkJFMUZEMzMKKzoxMDhBMjAwMEZENDJFMUYwRUQzNjg1QUQwOERGQjY0REU2MjBDMEQxNjAKKzoxMDhBMzAwMEI0RURDRjY2M0ZDMDUxRjVFQjE3OTNCQTYxQkNBNkREMkMKKzoxMDhBNDAwMDQ2MTYyOTY2RjQ3Nzk5RTE3MzYzMjQ2MTI4NUQ4RkUzMDQKKzoxMDhBNTAwMDk1MzFCRjVEQTk2MEFDMTFGRkY1QzJCNUIzNjEzMjRCNzIKKzoxMDhBNjAwMDgyNkJDN0NBM0YxQjkzRjA3QkQzMjdERDk2RThGNzc1NkYKKzoxMDhBNzAwMEJGN0U3NTU3MDg1MDUzRjc5QkU3OTNCQzcwM0REREI1M0IKKzoxMDhBODAwMDM1ODk5NTUwN0YwRjk4OTMxOTUzRURBQUVFN0RFQ0Y3MzkKKzoxMDhBOTAwMDUyNkFERjdFNjA1Q0M2NUM3MDlGREY2MjREMURDQkY5NjEKKzoxMDhBQTAwMDc4OURERjM5QzkxMDNFMDZGRDQ4Qjg2MTdFQTdGMTFGRTkKKzoxMDhBQjAwMDBGNjMyMzlEOEVGNENGQUY4M0ZGNDdCMDExOTc4RDcwNjYKKzoxMDhBQzAwMEREOTZDNkQ4MEQ3REYxMTRDNTU3ODhEM0YzQzU4QjFCMzEKKzoxMDhBRDAwMDQzODA5RjMzM0JCRkRDODhGMEQ3RkZGRDJGMUI3RjA0MTMKKzoxMDhBRTAwMEY4NjNBRjU5OUQ1QjYxREU0REJGRkM4RjI0QTRBRkZDRTIKKzoxMDhBRjAwMDZFQUE1M0ExRUZDRUU1QjI5MDA3REUzQkY3N0U0MjM4NzcKKzoxMDhCMDAwMDA0QjdDRUJEN0EzMkNGMEJGMzNEQjdFM0FGMkUyRkJDMDcKKzoxMDhCMTAwMEJGRjBENTcxOTkzOEZGODUyRjU1NjUzMjdCRkY3MDlDNkEKKzoxMDhCMjAwMDVCQ0M1ODM4NDEwQjU3OThFOEU4REQwRDlENjY0MjczRTEKKzoxMDhCMzAwMEFGQjhDNkQwNjM3RkU3RkUzQzg0RjNFQ0QxMDQ1RjAyOUMKKzoxMDhCNDAwMEUyMDlFRTJEMkE0M0ZBMDA5RDg2RjJGNkMzODBERkM2QzUKKzoxMDhCNTAwMEVEM0ZGRUIzNzE2ODNDM0M4N0IyMEQ2RUE0RUJBN0UzMUEKKzoxMDhCNjAwMDExNEVDNjIyRDlDQzhERjhFRDU5RTZCNEY3N0RCRjk3RUEKKzoxMDhCNzAwMDVFNDc4MDlFRDc3RjAzQkE2RDVGQ0VDN0VEMDBCQTI1RjIKKzoxMDhCODAwMEY1QTVEQjU5RkMwN0U4RDM4NDc0QjM0NUU5NzY5MTA1NzQKKzoxMDhCOTAwMDdGRUUyOTg0NzY2NzFBRDEzNTFFQkUyMkRGMDA1RkI1Q0QKKzoxMDhCQTAwMDBBRUZGRjI2QTdGRjg3NEU5NDlGOURCNjVFN0E0RDQ2M0IKKzoxMDhCQjAwMDdBQkQ3ODMxOEYwMUJENEY5OTdBRUU2M0U1OENGNUJDQjMKKzoxMDhCQzAwMDlBRTBEQzBDRjcxRjdDRjU4RjI0MjdFNzVFN0FENzhDQzAKKzoxMDhCRDAwMDc0ODQzRkJCMDJGMzNBQzc3QUZGQkE3MDlFOEQ4QTk4QkQKKzoxMDhCRTAwMEU3MTY0NzI0MjEyOThBRjdDNkYwOTQwOURFMjRCQTdGQzQKKzoxMDhCRjAwMDlDRUU4NzM5RkYyMkZFQjI5MTNFRTE3RDc3MkE3MUU4MzMKKzoxMDhDMDAwMEQxRTEyQ0EwNzlCMDcwMDZDREJCNjFDQjlGQ0NDODM3MjkKKzoxMDhDMTAwMDkyNEU0ODFGNjUyNEQyRUJGODc4QkMyRkU5MjRFNzFENUIKKzoxMDhDMjAwMERCOUYxM0YxMzA0MjQzQjcyRDVDMEVGQkQyQjVDN0NDQUUKKzoxMDhDMzAwMDBBRTNEMTBCRTBDNUVGMTA1RTY4OUZEQjk0QTAyQUM5NjAKKzoxMDhDNDAwMEZDN0UwRUNDRTM5Qzg5Q0RFODQwMzhDMkNBMUZFM0QxM0MKKzoxMDhDNTAwMDk3QjEyNTM0OUYxNzYyRTU1MkNDRUY2QTcyNzkzNUI4MjcKKzoxMDhDNjAwMEZGNTFCQzNDRTM3NDUyRkYxMjNGNjdCRThFQUY5RjBGQjMKKzoxMDhDNzAwMEExOUMwM0ZDQkJFREMxODNDODNGOEM1OUMyMjdBMDlGQjgKKzoxMDhDODAwMEZCOTlDMjkyMEJBMzc4OTNGMDlFNTExOUU5REQzM0JGOTMKKzoxMDhDOTAwMDM0ODY0MzMwRkY2NTFERkI0OUNGQzZDQTM3Q0NDQkRGRDYKKzoxMDhDQTAwMDExNjdCQzNGOEFGMTFBNzdFRjFCOEE3QUU4Q0MxQjdCRUQKKzoxMDhDQjAwMDg4RkYxQUI3MUYzNzg3QTA5RjQzREI3RTYzRUUyRTg5OUMKKzoxMDhDQzAwMEYyM0JFQUVGQjA0NjdGOUZGOUQ1QkVBMUE0NkZCMUZGOUEKKzoxMDhDRDAwMDM4RkFFNjg0RThCRjY5QUZCRUZGQTZFRDdGRDZGNTVGNDAKKzoxMDhDRTAwMDE3RUEzMDNCRUQ1NzFGRTdCNEVBOUY4RUYzM0RERDY1OTEKKzoxMDhDRjAwMDYyQThGRjRFNzcxODI3ODRFMzhDRkI5NkIwNUYxMjRGNzMKKzoxMDhEMDAwMENCREUzNTkzMUQyQjdGMkYzMTlDMDA3ODVBRjhFRTg0RjMKKzoxMDhEMTAwMDNGMjVBN0UzRDVFQzA1RDRCMkNFMTZDRTU3OUQ4RkY4RUMKKzoxMDhEMjAwMEIzOTEyRTlERUZERTYzNDQ3QkIyMEJGMTc4NERCNERGM0YKKzoxMDhEMzAwMDhBMjNDRDU1MEU5MERCOEE2MzgxNzI2NEFCNTg3RDMwRjcKKzoxMDhENDAwMEUyQTg0MTA3Mzc4QzkzODlGQTc5MjlGNEUzODU3RTk4NjQKKzoxMDhENTAwMEVBNzMwN0EwNUY2M0QyRjgwOTA4OEZEMTY5NzA1QUUzRkMKKzoxMDhENjAwMERBNTVERTlGQzkxRTYwNDE4MENCMDQ3NkRCQUJFMTI3N0MKKzoxMDhENzAwMEY3RDRBNEExMkMxOUE3RTczMUEwNUU1ODAwRUM4NUZBMUUKKzoxMDhEODAwMEQ5NkQ2NkM1MkFDMEM3MEM4OUJFQUREMEVGODJDMUZFQzEKKzoxMDhEOTAwMEQyODNEMDVFMzBEQkVEMEJDMTczQ0YxREZDQkJCMzRFNzUKKzoxMDhEQTAwMDdCQzg3MDNEQjZGM0MyMjg0N0I2NEI0NkU2MDVENTc3N0IKKzoxMDhEQjAwMDQ2Nzk3QjBFMDM5NTYwMTM3Qzk1REQ2MTIzM0I2MzUzRkQKKzoxMDhEQzAwMEJERUJBQUExNkRBQjU1N0Q4MDUxRjY5OTNEOTg5QjkyNjQKKzoxMDhERDAwMDgxREY5OUU5M0I0RjhBQTI3RThFRjM0RTYyNDkyODZGNkMKKzoxMDhERTAwMEIyN0ZGOTlFRUM5N0E5OTFBMTM4N0Y2NjYxMkEwM0JCRjcKKzoxMDhERjAwMDkyQzMzOERDNDYzMTlGNDJENkE1MjA3RkI3NEU0OURBNzAKKzoxMDhFMDAwMDhDRUQwRDhFNUFCMkZGNzlBQzY3OUYxRkU4RjY2Q0QyREQKKzoxMDhFMTAwMEY4QzNBOEM3RTA1RjAzQkU5N0RCQUNCN0VGMDMxNkU5NjIKKzoxMDhFMjAwMERCRjkyMTM1NDY3RUJEODYwMEYwNUY2MTlCRkU3RTdBRDAKKzoxMDhFMzAwMDU1RTVGQzAxM0VDNkVFNEJFOTlDQTA4MkZFNEU5RjVFQ0UKKzoxMDhFNDAwMEI5MjMxQjcwM0E2OUM1N0JCQ0ZEN0M2NUE5MDdEQUZGQjUKKzoxMDhFNTAwMEIxQkE2MUEyMEE3QTI0RkRGNzk1QTU3OUQwQkU5MEZBM0QKKzoxMDhFNjAwMDgzODlGNEJDMEU5MDc0MjNBOEZFRDU0MzI3ODY0QUEyQkEKKzoxMDhFNzAwMDcyOUIwMTYwMjYxQjQ5OUU2RjQ2M0M5QzBEOUM1OTg2NDcKKzoxMDhFODAwMDRGMUJBNjdENjU4NjQ3RjgxNzQwM0NFNDhFRTQ3OEM4MDIKKzoxMDhFOTAwMEIxMUZEQkMxRTBGRDAxODZFRTE2RTRDQjlGQkZGQUJGMzgKKzoxMDhFQTAwMDUyRjAzRDJGNzNEMjdDOUQ2Q0E5RjM3MzBCNEU5RThEQjcKKzoxMDhFQjAwMEJDM0NFQzRBRkE0QzY1OUY0QjNFMzQ0NkU1MjBEOTE1NDQKKzoxMDhFQzAwMEJDM0QwNUY4NkFEOUNDRTI3NUUzNTFEN0Q2RkI4OEJGMjMKKzoxMDhFRDAwMDYwNjQyN0Q5NDNGOUJFMzM5REU4NTMyM0U4ODM3MDVBNzEKKzoxMDhFRTAwMDgwQ0Y2NkYzNTc1ODJENkIxNzdBNjhBQzEzQzc1MTQyODEKKzoxMDhFRjAwMEY1QzZDQkQ3N0Q3Qjc4NjY0QUJFNzEzMDA3REU1N0VCNkYKKzoxMDhGMDAwMEJEMDQ1NzU3ODY3RjM2RTJFQkFGMTk0MUJBQ0FGQkVFNzQKKzoxMDhGMTAwMDk5MzNCQzQxQzBFRkNEMjk4MUI5MzgwRkNGOUM0Qjc5MzMKKzoxMDhGMjAwMDA4RkZFNDE0NDZGRDU1Q0RCNUZCRDFBRTVFRDgwQkVBODMKKzoxMDhGMzAwMDJGOEU1Q0M5RUJFNkM1Q0NBNzBFRUFGRkY5RDRENEUwQ0UKKzoxMDhGNDAwMDc3QjFGRjgyRDdCRDNCMEY0MzdGRDdENzk4N0Q1NjE4QTcKKzoxMDhGNTAwMEUyRkE0NUU1M0UzNThERjEwOUExREYyMUU4RTY0NjVBMDIKKzoxMDhGNjAwMEEyREM3RDhGODU1MUVFQ0UyNzI4N0UzRkI0Q0YzRkU0MzMKKzoxMDhGNzAwMDI0QkQ5QzUzMzNGOTMwREFCM0YzQjZGQzhFMDhERUZGMjAKKzoxMDhGODAwMDkxOTdFNDExM0MwMDA1RTUyMTc3NkY3MkM0OUE0NEZDODcKKzoxMDhGOTAwMEZDNTUwQzNGN0ZBNUU3NUZGREI4RTcyRjdCNzc3NzUzNDQKKzoxMDhGQTAwMDdGNEVEMTFGMzg0NEYwM0M1N0QwRTlCQzkxRkJFNUU3MzgKKzoxMDhGQjAwMDE3N0IwOTBFNzAxRkY3QTFCREZEQTZFMzNEOTkyMkZDQUEKKzoxMDhGQzAwMDI0NDE5RjQ3QUNGRTM1NDgwRkMwRkYzQTJERkU3RkQ2QTcKKzoxMDhGRDAwMDNGMUQzN0UyN0I0MDQ3QkFDNkQyNzE4RUE1MzkwRkY1RTcKKzoxMDhGRTAwMEMyODM4MThFRjFBMEIxRDlDOTM5REZBQjQwRTY5RTkyMzAKKzoxMDhGRjAwMDEyREM4MkVGRDdDRkU4M0E2NDIyNjg5QThCNTA2RUZCN0UKKzoxMDkwMDAwMEQyNTkyMTdERUVEQUZCNDA4QjA5REE0RDQ4Mjc2RjVGOUMKKzoxMDkwMTAwMDdBNUVCRkE4OTRFOEE2QTE2RjA3RjY3RkZEREUzRjFCMkUKKzoxMDkwMjAwMDEwN0U0OUQ3NzUwQUI3MDNCMURGQkY5MkEyODg3MUVCRjIKKzoxMDkwMzAwMDVCNEM4MENGMEJCQkNERTRGRkM2QkU3NzMwQzU0QkVGOUEKKzoxMDkwNDAwMEM5RjY1MDRCODU0RjA1MzlDRDM0QjA2MEJDN0UwRkY2NjQKKzoxMDkwNTAwMEU5RDdFMjRCODgwMzdGNkY3RjRFREUxRkUwRkY0RDJEODcKKzoxMDkwNjAwMEZFN0ZENzNGRkVGRjVERTBGRkRGQkYyNUZFOEYyMDlEMjcKKzoxMDkwNzAwMEZCQzNCRkY0QkJFQjg0N0VBODYzQUJDOERGRkNDQzNGNzMKKzoxMDkwODAwMEQ1MzUxMEM2MUY2RkI0OTMzQ0NDREI2QTI0Mzk4NEY3MDYKKzoxMDkwOTAwMDI3N0I1QzUxN0QzMkVGODZFNjdEMzhERjc5Q0YyOEM0QUYKKzoxMDkwQTAwMEI3MzU0MUFFRTdCRjlDMzNGOTEwRUFGN0Q5RUQ3QUZGNDcKKzoxMDkwQjAwMDY5Q0U4QzkwMTlFMTlDQkI1RTdGN0Y1RTM4MjYxRTY0NzIKKzoxMDkwQzAwMDFBQkQwRTdDNzEyNkNBQkYwM0I4REU3MTkzQkQzNDBBODcKKzoxMDkwRDAwMEY5QTg5QTVCOTI4Q0ZFRDI2QjI2RUZFRkM5MUY3RkNCNkIKKzoxMDkwRTAwMEM4MzZDN0MxN0Y1RTZBM0VEOTYzRDlDRTZEMDYyNDY5OTIKKzoxMDkwRjAwMEVDM0NBQkIxMUE1MDVGQ0E3RUM3Q0UyREM5NDRCRjY2RTcKKzoxMDkxMDAwMDgxQzM3QkM1Mzg2Q0MwMjJCRDVEQ0YwRjI1MzJBRkE2QjEKKzoxMDkxMTAwMERGQzJCNjU0NUQ3QjUwN0I5NkVFRkQ2QkQ2MTdFODlFQTIKKzoxMDkxMjAwMDBGMEU1RkFCN0I3RUREQjYzMjVEN0I0OEM3OERCQUY3MzUKKzoxMDkxMzAwMEFGREYzRDQ2RDcyRThERENBNjdCN0ZEOEUxQTlCQUY2RkUKKzoxMDkxNDAwMEYwQUU3Qjc0RUY4RjM4M0E1M0Y3RkM4NkVFMDc3NUNGOUQKKzoxMDkxNTAwMDQ3OUQ1QUEwNkJERkQ0RjM0M0JEMUY2MzYwQTQyNzU5MUEKKzoxMDkxNjAwMEEyNDI3QUYzQzBFMjUzMTUyNzkwRTFDQTk1QjE4OENGQTUKKzoxMDkxNzAwMEFBOTFGQ0REMDNGM0NEMDY2NzEyNUU4QjBDNEVFMDhGRTcKKzoxMDkxODAwMDM3NjY0RjI2M0ZFMEMwN0M5N0RGNEJENzBBM0ZDNjNGOEMKKzoxMDkxOTAwMENDMzhCQTNDMThDN0NGMURFN0ZDQTJFMjg0NjZEQzJBQjMKKzoxMDkxQTAwMDhCNDlBN0U3QzYzOUY1RUQ2MUE5MjI3RTE4QzBGOTY2OUIKKzoxMDkxQjAwMDY0QUE1RUJFOENDRDkzMjM2NjY4NjZDRDFCOTg4OUUzNTYKKzoxMDkxQzAwMDgxOUM4RDRBRTU3MjQ2RDdBQkNBNTk1MjczMDVCNjQxQTgKKzoxMDkxRDAwMENFMkE1M0UzQzgxOTEzRjZCNjUyRjAxMzVDRkRFNjMyRkIKKzoxMDkxRTAwMDY0MkMwN0Q5NjUzRkRFRjREMkZEOTAwQUYxQ0ExODhCRDIKKzoxMDkxRjAwMDJGRTcyMENFQ0JFMDRCNDcyNjFDM0IyMzcwODBGNzI3ODAKKzoxMDkyMDAwMEVDMzMyQjM2N0MxQkZCMkNFNURDNkRGMDg2QzhBRUE1NjEKKzoxMDkyMTAwMDMyQ0EyRjNEMzVCQjI4OTk2OUYwN0I0RkFBNDFFODgzQkMKKzoxMDkyMjAwMDc2MUU0NzNBQjcwRDUzMjUxRTBCQjRGNzI3MEM1NzhCMDQKKzoxMDkyMzAwMEEzRjc5NUI5OTMzMzUxRUVEQ0ZERTg0NUIzQkI3MEYwNkQKKzoxMDkyNDAwMDE2RDBDNzY2NEYzRTVERTVGRDY1MzMwQzEzQzI3MUU4NkQKKzoxMDkyNTAwMERCOTBDQUUzMENFOTc3MEQ4RUZBNUQwRDg4REZCM0VFODMKKzoxMDkyNjAwMEY3RDYwRTAyN0MzNTU2Rjc5MERGRTUzNkI0Q0YzRjg0NTMKKzoxMDkyNzAwMEYzRkFBRDkxRTdDREMwQjM0MkJEMzA1QkY4RDFCMzI3NkYKKzoxMDkyODAwMDNFM0VGRjEwRThBN0Q5RUYwQzIyRkQyNEM3RDlCMDM4MjUKKzoxMDkyOTAwMDMyNThFQjM3RTRGNDEzNTc2RDEzRjA2QzVDRUMxRjVDNDEKKzoxMDkyQTAwMDMzODhFMDIyRkQyMEZERjRCQzUwQzM3ODhDNzcwNkIwRjMKKzoxMDkyQjAwMDY2OEExQkQ3MUE1ODZEQkM3RTk2OEI3RTMyOTFFNDA4NjUKKzoxMDkyQzAwMEFGRDM0RTcyNzI3NkNFQjEyNDE1RTY5MUU4MDgyRTQ3RTAKKzoxMDkyRDAwMDdFOUI3OTdENTcwNUY3QzdGQ0JFQTlDMDNGNzk5MTdCN0UKKzoxMDkyRTAwMEQ3RTJGQjc5NkU5NTg1OTVCRUUzNjc1NjA3REJGMjYxQTEKKzoxMDkyRjAwMDdFNEI1MzBEM0UzQkI1N0IxNDdDM0ZFMTYxQzZEMkUwMTMKKzoxMDkzMDAwMEZEQTU3RjM3MTIzQzRCREZCODgxNjFCQzk2NjA2RjY2NkMKKzoxMDkzMTAwMEU4RDdDQTc5RUQ0RjdEOUFGMDYzRUNCNDkxMUQ2NEU4MEIKKzoxMDkzMjAwMDkyMDJGRUJFMkI2ODdGRDE1REQzODU3RUM3QzUyNzRERDcKKzoxMDkzMzAwMDM0REU0NTk4QTMxM0ZBQkZEODY5MENBM0YzN0UyODM1MTEKKzoxMDkzNDAwMDMxNjI4MEI2QjFDRDQxRjYzQjBGN0Q1MDc4N0Y0RUE3OUMKKzoxMDkzNTAwMDIzRUNDRDhGRTI0NTVEM0Y5QTQ1QzBERTI1RTRGMEY5NzAKKzoxMDkzNjAwMDJGNERCNTg3RURGOTM0RUZENTM4NkYwOUE3OUM3NzZFOEYKKzoxMDkzNzAwMDNGNzE2ODI0OTVEQjU5RTYyRkQ2RDFEOTAzMzE1OTE3QUYKKzoxMDkzODAwMDhFQUQ4MkYzMEZGRDE4OUYzNDUxOUMzODNCQzU0RTcwNTMKKzoxMDkzOTAwMDg2MTc4NzA2RDc5OEZBQ0U2Rjk5N0JFQUVENzcwMzNDNUMKKzoxMDkzQTAwMEFENDc4Q0NDMDhGRDc4QkJEQjA5MUY3MzAwMUY2MTZGRDQKKzoxMDkzQjAwMDVGN0M5RkY1RTY3RjY1MzAxMkRDMTFFNDQ3RTNGQUYxNEMKKzoxMDkzQzAwMDM0MkY4NjdFM0Q3Q0Q3RjA3Mzg1M0Q5RDhGN0MxOTlDMjQKKzoxMDkzRDAwMDQwNzRDRTMyQjBBREY5N0RFN0YxNjYyQUNGREYxRTRFODQKKzoxMDkzRTAwMDc1RDJENUVDMkVFMjcyRTIxRTM4NzgwQkY0RjczNkVBMkQKKzoxMDkzRjAwMDI5MEI4QkU3MDdGQzNFOTVGQkQzNzQ4REQ1NEY2MDA3OTcKKzoxMDk0MDAwMDQzMDhDNzg1RjUwQUQxRjNBNDEyMzY5QjAwNjU3NTc3MkEKKzoxMDk0MTAwMDM2OTMzRjIwRjU5M0QxNkYyNEZGNDNFQTI5MDkxN0U4REIKKzoxMDk0MjAwMEIxMEY1MjM1RjZEMTk4RkNGMDUwRUNCNzdGN0Y2REM3ODUKKzoxMDk0MzAwMDNFMzNGQTZCNEU0NkZFOUFENEEzRkRGOTZCRThBNzIxQTIKKzoxMDk0NDAwMEZGNDkzRkVENTRDQzNDNjE3RTVGOEFGOTdEMTk2RjdFMDgKKzoxMDk0NTAwMDdERjRFRjNEQ0REMkNGRjk3M0VBMTVGQ0NDMEM3MzdDRDMKKzoxMDk0NjAwMEZENzQ0RDFBQTc0MzkzRDNDQzI4M0Y4NUYxMzJGQTBGRjAKKzoxMDk0NzAwMEYzMENFMUNEOTg4NzUyQzNENjI5MUFGQzY0QTU0OTNGNjUKKzoxMDk0ODAwMDhGRkIxQkZERTlCREFCQzUyNTA1MkI0QjQ4RkY1RUU4RjcKKzoxMDk0OTAwMEYyMjZBN0MyMzVGRDUzQTUzOTVFM0ZDNjQ1MkYwQzQzQzIKKzoxMDk0QTAwMDNBQ0RCMzU2REFEMjAwNEU2NzlBMUU1RjRGMkRFRjYzNjYKKzoxMDk0QjAwMEJGRDJEMjM4RkVFOERBMDc3Rjc2QzA5RjQxRTcyN0VFQjkKKzoxMDk0QzAwMDJBRjIxMkZFM0M2OTU3RjAxM0NGREVGMTUxMDVEQUE1RkUKKzoxMDk0RDAwMDczMDI0RjhEQkQ3MTJGRDdEMzU5NjBBQzMwQUZENUMwNUIKKzoxMDk0RTAwMEZDQ0Y5RTI4RTZFRENCMEFBRDdBNTBCRTZFQTMzRDMwOTAKKzoxMDk0RjAwMDA4RkI2RkRBM0RGMTU5QURGREZFM0E5NUU3RDM5ODNEOTMKKzoxMDk1MDAwMDk1RjJBREIyM0Y5N0QwRkIxMDY3REZGQzk5OTdGNEZGNUYKKzoxMDk1MTAwMDU3NDhERjY4QkNERDVEODFGMTU2RUI0QkQ3MjRBMzdGNTQKKzoxMDk1MjAwMDM2NzZEN0RENEVCQzVFNDgxRjQ4NzgzREJCMkJDMThGRDkKKzoxMDk1MzAwMDcwOUU0RDA1N0Q2Q0M3RjY4ODQzOTg4N0Y4NzJGMUUxRkYKKzoxMDk1NDAwMDU0MkQ1RENFRkVFQUREMEExM0Y0NzM3NkU3QkIxNTJBQ0YKKzoxMDk1NTAwMEU2MzM0NEJFQTZENzFFNURGRTQzNDUwMEJFMEY4RDYxQjcKKzoxMDk1NjAwMEM1Q0Q3NjBEOUY1OEI4QkQ3OEQyQ0FGMzFEMTkyRUYzMUMKKzoxMDk1NzAwMDMyNzYzREM0MjMxOTI5RjRGRDFBOTdFMTI3NzhERjY4NzQKKzoxMDk1ODAwMEY5NDNERTA5OTRCMzk4RkNDRTkzMjY2RkFCMURGODBDMUIKKzoxMDk1OTAwMDYyMzkxRkFFMTMyQzE4RUNGN0NDQzZGQ0NFMTQzN0U1OUQKKzoxMDk1QTAwMDY1NUExNUFFNDc0M0IzNzkxQzlBNUVDMDhBRjNBMTNGNTIKKzoxMDk1QjAwMDkzQzE2OEM0RUY3QTNDQ0NCNzE5NUU0OTM4RDAxRTQxREMKKzoxMDk1QzAwMEI1OTdEOEQ1RTE0N0YwQ0IxMzUzMDk5RkEzQ0UzODE1RjMKKzoxMDk1RDAwMDhDMjc2NDNFNDhBREUyRkRGNTRDMzM4NzM3NkJGMjQwOTMKKzoxMDk1RTAwMEVFMTkyQUQ5NDU5QkRBQzE1MDRGM0Y5MDkxNEFGMENCRjIKKzoxMDk1RjAwMDdDNTBENUQ0MTk4MTRBODRFQjUxMDNDNTMzQTA3ODE1MkEKKzoxMDk2MDAwMEQ0ODdEOTYyMUVGOTlFOURDQkE1NkZBM0JBOTAyRDE5NjAKKzoxMDk2MTAwMDI2N0ZEODRBRTBGRjgxODBFNzI0QUZDMThGRjlEN0E0MjUKKzoxMDk2MjAwMDlDQzg1MTEzRjg3N0Q5NEIxOUZCNDRFMzQ3REFDQzQyNzUKKzoxMDk2MzAwMERFREUzMTkyQkMzOUJFQkVDNTMyMDNGQzIzNUIyMkNGRDUKKzoxMDk2NDAwMEFCMjYwNTk2Q0RDN0JDMzhERUZGRDczMkE0MEJGRjlFRjQKKzoxMDk2NTAwMEU4NjNDNDM0MTUwQjI1MDNDODhFOTFGQTdFMjVGRDNBQzQKKzoxMDk2NjAwMDE3NUI3QzAzODFBMTc3MkU3NkQyRjVCOUM1NkU4MkVCQUMKKzoxMDk2NzAwMEYxQzU1RUJBRkU3NDcxMzFEREVGNEY0RUFGNzY3RDZDOTEKKzoxMDk2ODAwMDMxOENBQkUxQTdGNDExODAxNTk4NkZCQTkxOTEzQzNGRjIKKzoxMDk2OTAwMDM2QkMyMjc5NjYxQzdGNDA1RTlGNUU3Q0Q4MzU3NjkwMTIKKzoxMDk2QTAwMDQwMjBEMDIzQUJERUI5Njk0NTNFRDExOTg1MDg2NkY3NjUKKzoxMDk2QjAwMENFNzJGRjY4QzYxRTM1RjlFNzMzNjBBREQ1Njk1RjhGOUUKKzoxMDk2QzAwMEM1QkNENTRBQzU0MDc5QUFDN0QzREU1QzFFQ0FDMUFCQUEKKzoxMDk2RDAwMDk3RTg2RURCRkYzRUMzN0NBN0E3QkM1RDQxNzlGN0Q0NUEKKzoxMDk2RTAwMEI3MTMxRjk0Nzc3NUIxQTBCOEVGODdCNkU3MDhCRkZGMkYKKzoxMDk2RjAwMEE4OTVFMzc5MTU2MzEzMTA1RUJCQzIwMjc4M0Q2N0U1NTgKKzoxMDk3MDAwMEZFRTBFNzU2QUUxRkJGMTBENzIxNjlDMThEMjhDN0ZGMDUKKzoxMDk3MTAwMEU1M0M1QUY0Mjg4MDY3MkRGOTIwMEZENzNCNkNGQkZGRkUKKzoxMDk3MjAwMDRBRjk2MEUzNTBCMzA1RTVDM0IzRjczOEFEODMxODBEQ0MKKzoxMDk3MzAwMERENjYwNjI2RjlGNTI3M0VBNkZDOUFEMTFDQzhFN0VEQTIKKzoxMDk3NDAwMDk3NTY2MDNCMjMyOUIwMDk1RDM2MTZGQTc4RTIwMTM3NTcKKzoxMDk3NTAwMEM4MERGMkMzOEQ4NDhEMTBDQUYxNEFBQjY4ODc4RTExOTMKKzoxMDk3NjAwMDFFNTY5QTc4RkJGNTI3RkU0NEYzNUU2OTBBQ0M0M0JDOEIKKzoxMDk3NzAwMDYwN0IyOUY0QjczMkE1QzM2RDgwQjZCREU1RkRFNTg3RjIKKzoxMDk3ODAwMDZGQzJCNjdDRkZGREU1MjFGOEZFRTUzNEE5NkYwMjFFMkQKKzoxMDk3OTAwMEQ0MUZCRDZEMjdCNDg3NjhEQTJBNkYzMzBCQkZDQUY5QUYKKzoxMDk3QTAwMDM1RUNGRkVCQTE2Q0UwRDdDNkJENEEwNzgyRTZEOUJCMUEKKzoxMDk3QjAwMDVBQzE3OTdBNzZBRjI2N0NEMzFGQzgwNzRFODNGMkE0QUMKKzoxMDk3QzAwMDk2OTAxOUJGN0Y2RUYxNjFFNzUyQTBCMzlBREFFNjQyMzQKKzoxMDk3RDAwMEJDNUZFMzBFRkFGREYxRjIxMzE5RDJGRjg1RjdCNTc5RkMKKzoxMDk3RTAwMEI2QjBBOUE3NUJFMzhGN0IxODk3MUJCNjE0RjQ0MzFDOTQKKzoxMDk3RjAwMEZGNjI2ODQ2RTUxN0U5RDBDRjkzNEE3MDg1MTFGNUNDMzIKKzoxMDk4MDAwMDhCMjYyN0VBMTFENkM1RjVEMDE5RDExNzBCNjc5MTdGQTIKKzoxMDk4MTAwMDUzNkZFNTRERDM5MkUwOEFDMUE4MjdFRTU1N0QxODNGREUKKzoxMDk4MjAwMEQ3RTVCNzU3QTI3REFGREI5M0VGNkI2MTUxN0VBOTRCQjQKKzoxMDk4MzAwMEU5NzA5NTIxRkZBNEU4REJBRDIyRUY5Mjk5RDI5QzkyQ0EKKzoxMDk4NDAwMDUyODJFQjExQUJGMzcwQkRBMDkxQjVERkY3NDM4NEY3MDMKKzoxMDk4NTAwMDZEMjM0MzNGRkQ4QjdEMzcyNDhGODI3NjAzQjREMTZGMTgKKzoxMDk4NjAwMDY4RTg3Q0Q3OENGQ0Y5NDQzQUQ3OUY4RDlEQzAzRkQwRTcKKzoxMDk4NzAwMENGMkE5MDJGM0YzODMyOUI1NDY3MjJFQUE3RTdGQ0NEQ0UKKzoxMDk4ODAwMEQ3QTI4QkY3RjUxMzdGOUI2ODA1RkEzRTVGRTA3NzIyM0UKKzoxMDk4OTAwMEJERERFOUE2MTUxNjcwMUE5RjM3M0IwN0IzNTI2Q0RCODYKKzoxMDk4QTAwMDg5QkZFQTRBMEQ1QzhFOThGREI3N0U1NUFDN0Y0MkZCQkUKKzoxMDk4QjAwMEY4MTMxMzZGRDNFNjc3M0RCODJFMDM3ODZFREE2MDBGOTYKKzoxMDk4QzAwMDE5OTJDOURFRkM2RkI0Qjc4REVCMEQyMUQ0NUYwNjRCNDYKKzoxMDk4RDAwMDk3MTlFOUVCQzZCNTVEQTI4RjkzRjBCNjUwRUFGMzE4N0QKKzoxMDk4RTAwMDdEQkQ3MDYyRUE2REQ4NUVGODY4ODEzMzc0ODVGQzY1NzEKKzoxMDk4RjAwMEVEMjUxQjBCNkJGQ0EzMjdEMkI5MUNEN0FBMjE1QTQ3MTUKKzoxMDk5MDAwMEE5QkQ5NDQ0Q0ZGRjc5RTM1OTU5NzhEODk1QzZCM0QzMEMKKzoxMDk5MTAwMDczMzk1RTdENzQzQ0EyRUJGRUIyREZBRTFEMDg3NDVCNTIKKzoxMDk5MjAwMEI4QzM2NDQ4RDBGMEREQzIxRDYyQkREQUVBQ0ZDNDdFQTAKKzoxMDk5MzAwMDMyQ0M0Q0UwMURGQzdEQzBBRjlBREZEQjBFQTkyMEU3RTYKKzoxMDk5NDAwMDhGRjVDQUY5ODAxNTYzNDcyM0REQTJDRkQ5NDg5RDFFNDQKKzoxMDk5NTAwMEYwNjNCQ0Y5NThBMkQ0MDNEN0M0N0YzRjMxRTZGRDAyQkYKKzoxMDk5NjAwMEQ5RjZBRDE4OUJEMzE3OUU4Q0M0NjhEQjAyRUZBQkZGMTIKKzoxMDk5NzAwMDlERDBEQjQ2Rjg1NjFCNjJGQTRCOTVFMzhGQTRGRTI0N0MKKzoxMDk5ODAwMDVGMUQ0RkFCRkM2RDY4MjAzQzRGNjlBRkM0RkE4RDlFRTQKKzoxMDk5OTAwMEQ5Q0M4Qjc2MTlGOUQ1QTdEMUZCQzdEM0I4NUNENzVFRTQKKzoxMDk5QTAwMDJBRDREMTNCOEFGNzIyRERGRDkzOEJEREJBNzVCRkI5OEUKKzoxMDk5QjAwMEQ1MEI2OTdERjIzOEVBNzlFQzg3ODUyOEFFQUFERDkwNkYKKzoxMDk5QzAwMENEQzIxQTdGRUFGRkMzRjE4RkMyMzFBQTFGMzg2RUZFRTMKKzoxMDk5RDAwMDFGODYyMzVGMjc5RjUxMzgwNkVBRUVGRkEzNzA2Q0JFRjcKKzoxMDk5RTAwMEFCRThCNjdDNzg2NThEMTJCMjE0QTA1RDc4QzQ0MDc5N0UKKzoxMDk5RjAwMDEzNjNDQTU4NkYwQkFFM0YzQ0EyOTI5Rjg3MkUwOUQ2QzUKKzoxMDlBMDAwMDdGMTRBOEVDQjA1QTg2RjJEM0VFQzczODlGMkRFMUY5NDcKKzoxMDlBMTAwMDIzQjhERjY2MkEyMzNCNDQ3RTcwRTFERTg0MDdEMDRGMDMKKzoxMDlBMjAwMDJCQThGNUNGQzMyQkNCMjlBMUY1MERCOTJFQzg0NDFFMDkKKzoxMDlBMzAwMDRDQUU2NzBDNzJCMjRBMTU5Q0I3NTExOTBGOTA5RDJBMTMKKzoxMDlBNDAwMDA4NTREN0ExMzM2Nzc0OTQyN0EyN0Q1QzYzMDg4NzcwOUMKKzoxMDlBNTAwMEJDRDBFMzdDQkMwQzQzQjhDMzgyQkEzNzY5QTAxM0VEMTkKKzoxMDlBNjAwMDVENDYxMkQ3N0Y2QzQ1MDlEOUJGQ0Q4NjgyNkJFNzAzNkYKKzoxMDlBNzAwMDFDOEYyQTk1ODk2RjIxOUU1MzBBMjhGRjhCRjcxN0MwRTgKKzoxMDlBODAwMEZEQ0RDMjZFMTk1MzdDNEVCNDUzOUI4NURENkExNUZBMjkKKzoxMDlBOTAwMDVEREVCN0E1MDYxRTQwN0ZFMjU0RkFDMkRCMkMzN0EwN0MKKzoxMDlBQTAwMDFFRjJCN0E1ODFCRDM5OTlCRTcwODVEQjgzRjZDNjVCMTIKKzoxMDlBQjAwMDYwMDFGQjcyRjJDOTg3QzhERTZDNkVGMTY2Mzk1M0EyOTEKKzoxMDlBQzAwMEVENDFGRjBERDY5QUY0QzQ0MzJCRDA1RjU5NkE1RkYwODUKKzoxMDlBRDAwMDIwRkEzQkYwRkNCNzE2RDBCM0NGQTcwQUJEMjM5RTE3RTAKKzoxMDlBRTAwMEY0RUEyOUQwNEJBMEM3OEMyREJERUQxMEVBQTU4MjVFMEIKKzoxMDlBRjAwMEJERjMxMEU5OUQyRDFCOERENDdFMDdDNjQzRkYwN0U2RkQKKzoxMDlCMDAwMDExMzJFMjdDMDdBOUU0RDc1QjAxOTY0NDY4NUIwNzE3MzIKKzoxMDlCMTAwMEQwM0ExMUNDOUIyNUEyN0YzRDk4M0Y5N0Y5N0NGMzIwNEEKKzoxMDlCMjAwMDAzRTVGM0YxN0RDNEEzRDVDM0RGMzc0RjYxM0U1Q0Q3QjYKKzoxMDlCMzAwMDMyM0JFQzE0ODdDOEY1MDFBMzU4QTc0QTE0NzUxQThBNUEKKzoxMDlCNDAwMDczMEFDNTc3OTY1NTY1MEIzMDFFQjMwQ0Q0QUZDMzlBMTQKKzoxMDlCNTAwMDYzRUEzOThDQjFGNTFERjYwOEY5NUY1RkE0OEJCQzdFMTIKKzoxMDlCNjAwMDFBNzM1RjJFOENERTA3QkQ1RDg2NTdEN0RENEIyQjExMzgKKzoxMDlCNzAwMERFMDUwRUU2MzQ2MjVFMjUxOEExNzVDRTU4QkI2NjAxN0YKKzoxMDlCODAwMDNCRUFENUM4ODdDNUNFRkNGMUVBMDkwRTY1NzAzRkQ2MjEKKzoxMDlCOTAwMDdFNDlBNUY4RTY0OTA1RkMxQkI0QTMwRUNFNjdEMjNGNkIKKzoxMDlCQTAwMDMyMzkyNURGRUFFREFFRjQ5NzRDMjk3QzJFMEIyNzhFNTcKKzoxMDlCQjAwMEM5QzRGOERENjhGNzVCRDBDRkQ5RTcyQ0EzQkM4MDkxOEUKKzoxMDlCQzAwMEY5NkVBRkQ0RjgzQjRCMjMxMzI5RkZBNjNBRkRFNDg3ODcKKzoxMDlCRDAwMDE3OEEzOEQxRThGNDMxQUQ5RkIzNkMzMTA0OTZENzMwOTEKKzoxMDlCRTAwMEY2NkM0NUQxMTg5NDg3QTdBRDExNEIyMUQyNzc4RDgxQTIKKzoxMDlCRjAwMEUyQkRGRDY1MEY4NjE0Q0NCRjJENjIyNEE3Q0Y1NkI4RjkKKzoxMDlDMDAwMEM2NjAxRTdEOTMxQTQ4QkUxN0U1RTUwODhDRTdFNTc0MkIKKzoxMDlDMTAwMEUzRUJCOUFEMEFFNjhCMkY1QTAyQzlBODBGMUU0M0JFNkIKKzoxMDlDMjAwMEQ3RTBFNUQ3MDIxRjdGNEZFN0ZBRTc1MTEzOTc4QjY1MUYKKzoxMDlDMzAwMDAwNEYwNEUwNTAyRjVENDdGOUFERDUxOTNDRUY2MUFFMDAKKzoxMDlDNDAwMDFFNEJGOTFGMzNFMDAzRjM3QjA5QUMzOUU0QTRGOUYyQUUKKzoxMDlDNTAwMDdDNUQ4MkRCQTBBQjBCNTQyRjBEQTVFRkZGOUU2RUQwNzkKKzoxMDlDNjAwMEM1RDU2RDMwNEZBRjQ2N0Y1OTU5ODhGMjc1ODhFM0FENDEKKzoxMDlDNzAwMDcxRkM5Nzc3MzI3ODNDNjIwMTdGQzg0QkZFNDlDQzNBNDEKKzoxMDlDODAwMDc3NUZGRjg4RkMxNTQ5OUY1RTNGNDUwMUZGRTQwQUYxQkQKKzoxMDlDOTAwMDU4MTNDNENCNUE3RERGQTRGNjkwRkU2RDgyNzgxOEVGN0UKKzoxMDlDQTAwMDlGNzM1QUM4M0Y5NDc1MEY3NkExQ0Y5NkI5ODNFREEzRTEKKzoxMDlDQjAwMDkwQ0YxMzkzODY2MjFFNDA2NTFEODQ5NDU1NThGNzgwOUIKKzoxMDlDQzAwMEZBRDBBREY2RjRGMjNGQzg3Q0FCMzU2OTMzQkVCNzU0NzkKKzoxMDlDRDAwMEQ0NDFEODdDN0FGOTQ5NjRFRDExM0ZDQTY3QjE0NjZFMjgKKzoxMDlDRTAwMDE4RTIzQjQ0RkQyNjc4RjVGNzE5MEIzMjhDMzM1NDc3OTQKKzoxMDlDRjAwMDZDOUQ0NEE4QjcxRThBRUFGOTU0RjYxNEFFNUY0QkJGQjgKKzoxMDlEMDAwMDM3NUJENDIzOURCNTdENDQ3OTM0RjA3QjJCRDM2ODFEMUMKKzoxMDlEMTAwMEEwODdFMjE2OTlFRkY5QjY3RTcyMjFGNjgxNzk4NDQ1MjMKKzoxMDlEMjAwMDdGQTkzODgxNzIzNjY1N0MzRURFQjdBOTlDNEZDMDE1OEQKKzoxMDlEMzAwMDU3MTNDQTMwQkMxQTNGMkYwNUU2N0ZCN0IwN0ZFOUM2N0MKKzoxMDlENDAwMDc2QUExQjc5NURDNEIzRkZFNTlDRTFBMTM4MEFGMDQ5MEUKKzoxMDlENTAwMEY1MzY4OUJFNkU4QTE3ODU5RjY2RUNENThGMUYyRkY3NjMKKzoxMDlENjAwMEVCRkRDRTkwRDZDRjVCQjlFNkUzRTU0Qjc5QkM0MkVEOTcKKzoxMDlENzAwMEQ3OUY4ODkwRkU3Q0Q0MkFEQkFGNTAxQkVDNUMwNEUzQjkKKzoxMDlEODAwMDI1QjYyQkMxOEI3QzA4REZGQjUxREVEODVENDVFNDY3MkYKKzoxMDlEOTAwMDFCMEI1ODE2RTI2MzZDOTI4NUY0QTY3MTU3QzI2NkY0RTkKKzoxMDlEQTAwMDgzMjEyRTdFMzk0REIzNUU3Q0Q2NzEzNDBGRkRFMTM4QjAKKzoxMDlEQjAwMEZEODU3NEZERTU3REJCRkU2MEZDNEVBQ0M3OTFDRkM3NTEKKzoxMDlEQzAwMDI2QUQ4RjE4Rjk3NzVFRkM4RUU1NzQ3RDE0ODJGRUQ3ODAKKzoxMDlERDAwMEJDOTRDMDU2MDAwQTlGMzZFOUU1NUQ1RTM3MEI3OTQ2QjQKKzoxMDlERTAwMDdEQTNBRDg3MzQ1N0Q3Rjg5MUE5QTU1QzI3QjgxMzU5M0YKKzoxMDlERjAwMDQ0QzM0RjUyQ0VENTRCODM1OTQ0MjMyNzg1MTk3QzVERUMKKzoxMDlFMDAwMDU1NTVGRDk0NDc1MjJGOTVEMEYzQkZBMzRDRDMzOENFNzAKKzoxMDlFMTAwMEFCOEM5M0RBQ0YzOEMzNDg3RkY0M0Y0RTg1RDAyRjRDQkMKKzoxMDlFMjAwMEFDNUZBOTU0NTcyM0Y1NDI3RjcyMUVCQjRFMTZBQjE3ODkKKzoxMDlFMzAwMEU1NTVFQUM1Q0MwQ0RFRkZCRTBDN0RGRUY1QzFGNTFENzcKKzoxMDlFNDAwMDg3OTA4NTRFREI4MzA3MzJBODNFRUE1ODEyOUFGMDdBNTMKKzoxMDlFNTAwMDQzNjQyOEYyRjE2NzdERUYzN0UyRTRERTRFRTM3OUZGRjkKKzoxMDlFNjAwMEEyNkRGM0RGNDA3NkVEQ0EwODVFNDQzRkU4QjcxOTYyQTEKKzoxMDlFNzAwMDdERDIwREY2RDA4OEY2MEVFQzQ1MDlFNTczMkZBNjYzNkEKKzoxMDlFODAwMDNFMzdFODVEMzc4RUExM0NERDQ1RjlEQzY0NTdBMDA0MjAKKzoxMDlFOTAwMEZCNUYzNkI1ODI3MjBFMTJFRTk1OEI3OTlEOUFENEIzMjQKKzoxMDlFQTAwMDc2MzU0OEY4QjJBODIxN0U3NTA2QzE4NjMzNzYyMUMzN0YKKzoxMDlFQjAwMDM0NDk1NTEwOUY1QzhFOEVBRUI5NDA3MjYwNTVGREM0MUEKKzoxMDlFQzAwMDU3NTZBN0MxOEI3RTgxMTVFMjQyRDRCQjJENEUwMzVGNEUKKzoxMDlFRDAwMEJGNzE1QjI4RkZCRjRDODEwODExRjRDNjgyOTQ4MjJCQUUKKzoxMDlFRTAwMEFFOEY5QjJGQjlDOERFMDIyNDZFQURERUZFRTc4RjkzRTYKKzoxMDlFRjAwMDJFRUM4MzdFMUNENUM5RkQwNkI2OUZEQjYxNDRDMkE3NEMKKzoxMDlGMDAwMDFBN0QyQ0ZEODFEOEVGNjJGQjk3Rjg5NEY4QjUyMDVFOUUKKzoxMDlGMTAwMDRCQzgxRUM2RjUzN0FDMkVGRDdBNjZBNkQ0QjcxOTQ3RDYKKzoxMDlGMjAwMDhCMjI3MEI3NDFFOTRFNDJCRjA2RjRBOEQ1ODU3QTdBRjQKKzoxMDlGMzAwMDQ4NEY5MkMxNEJGQUQ3QzVGREEwOTBFMDZCNjZEN0YyQUYKKzoxMDlGNDAwMEI1Q0M1M0NCNzk0OUY4MTdCQzM1REJBMjVEN0Y4OTg1NDkKKzoxMDlGNTAwMDM3RDZDRURBNEJGNDc1MEI1NkFGQkU2RTQxRUUwQjMwRjIKKzoxMDlGNjAwMEFBMDFFMjFCRDM2OEJGMDVFNUE0QzU1OUU2NDQzRjY3RDMKKzoxMDlGNzAwMEE5RUFGREEzOUZFQTJENENFNDZGODNGRkFFMUI1RjVFNTEKKzoxMDlGODAwMDFGMDNGOTQ3Mzg0QTVEMDY1RDVEOERCQzNBNzAxRDI1OUIKKzoxMDlGOTAwMENFNzc1MzVDNUM0RjNEQjZFRjZFRDJDM0FBOEZBRjMzMjIKKzoxMDlGQTAwMEM1RDI4RkIxNzZFMjE3NDcxMTczNTJGRTU0QzA5Qjc0MkQKKzoxMDlGQjAwMDk1N0VGQkUzQTM5RkVDQjM5MjlGQUM4RUI0ODRCMUFFQ0QKKzoxMDlGQzAwMDMzNzYzQ0EzMjlFMDU3NTBFRjk2MzJGMjkzOERCOTdDNUIKKzoxMDlGRDAwMDdDRTMyMDQ2NzVFMDQ5RTVBOUFDNTg4M0M3NjVFRUE5NDYKKzoxMDlGRTAwMEY0N0M0MTg2OTMyMUJEOEQwRTQzMjAxRUJGNDgzQzBENUQKKzoxMDlGRjAwMDc0MTk3NDdDRTM5NjdDRTNGOUEwMDhFNTQwQzMzNzgxQ0IKKzoxMEEwMDAwMDc4N0MzM0QwQzVGNTE1QzJBMUE1RUYzMjc3NDE2NjNDMDcKKzoxMEEwMTAwMEZBNDRGNTIyRTdBQkFCRjFDNTRDMUJGNzczM0FDRDVDQzQKKzoxMEEwMjAwMDZGMzYyMDhFMjA1RUFBQ0YzMDJGQzNGQ0Y3MTkwQjdGMkUKKzoxMEEwMzAwMENFRkNDNURDMkZCMzcwOUU5QjY5Q0IwQkEzM0ZENEE5OEMKKzoxMEEwNDAwMEZBNkRFODk3Q0RFQzVEQjdGNUQzN0U4RjdBQUIzRkY5MkIKKzoxMEEwNTAwMDA2QjQ4RkVGNzJCRkY5NjRBNUJENEQ4MTdFNEU5QUZDQTgKKzoxMEEwNjAwMEM5ODhFRjkzRUYxQTk1MTY1QTA3RTdGNTczQjIwRUU5MTAKKzoxMEEwNzAwMEE0QzlCQkYyNUE3ODNFRUI2NzQ2N0YwQjNERDZGQjgzMDMKKzoxMEEwODAwMDY3OTg3RkQ4M0JFODFGRUYzNkQyN0E0QkZFRTMwRjE4NzQKKzoxMEEwOTAwMDg3QzBGQjM1RTAyODIyM0ZDREFDQjI4N0QwMEU3NzdFNUIKKzoxMEEwQTAwMEQwRkMxMUVBQTM1OTFCMTNCQzRCQjA4RTY1RkRCMEFGQjkKKzoxMEEwQjAwMEIwRkRGOTJBODczNzgxRjI2QzA1OEEwN0YzNUZBQkYzQUQKKzoxMEEwQzAwMDlEQjQ2RUIyODg4OTc4RUVDRTQ5NTVBMDQzN0Y4OTQzMEUKKzoxMEEwRDAwMENCRkMzNUNDRjk3MzI2OUY4NzU2OEU4NTc5NUU5QkQxNTQKKzoxMEEwRTAwMDY5QjAwMzRDQ0FCQUQwNEEwQkQwRUZEMTk2ODAxQkUzQkIKKzoxMEEwRjAwMEM3MEVEN0Y0OTUxODNGQkE1Q0ZFQUU1QjIwNUUzQ0UxMUMKKzoxMEExMDAwMEJBN0IxMkI2M0I5Rjk2RkREREIzRDIwRjdBRjkxNTQzQTkKKzoxMEExMTAwMDMwNUY4MUU3QjZDQzg3MjY1MUZENkFBMUVDN0YxOTNERkYKKzoxMEExMjAwMDlGRjlGMzZCQkUzQTBBRkQ5N0FFNUIzRjA5NzM2RTE1NUMKKzoxMEExMzAwMEQ1RTJGQkQwMzMwNERGRUNEMUIyQkREOTU2MzUxMEJFMjkKKzoxMEExNDAwMEI3MzE1RDFFQ0QxNDhENDcyOTRGRDdEOUVCNUYzRDM3MTEKKzoxMEExNTAwMDA5RTNDRjU5NjM5QUFCNTRFODdGQzlCQUVEMkI0QjQwNjIKKzoxMEExNjAwMDQ0NDZCNDU3M0FGREQwRkVGMUJBMzcyNkQ5ODBERjNBREIKKzoxMEExNzAwMDk5QkYwRUUzREQ5NUVCMEU0Q0IyREMwNEZEQTdFOUZCQzUKKzoxMEExODAwMDRGMzc4QTdDNkNFOEYwNEFDQ0UzRjVDMkM3REU1RkU5NjIKKzoxMEExOTAwMDFGMTg3RDdGOTgzQjYxNTUyODI3Q0FGRkZGMjJGODFGQjMKKzoxMEExQTAwMEY4RkQ1NzJFNUMwN0I0NzQxRkMyMTQ1RERFQTIxRTMzODcKKzoxMEExQjAwMEFGN0IxNUY1MjkzOURENDM3OUREOEQ2ODE3NzdGMzNBRTMKKzoxMEExQzAwMDY1RDk3NkYzNzZFNzkyRjhGNkZFQ0Y2RTJFNzc5RDg5MDUKKzoxMEExRDAwMEYxOUY3RjI0RjQzOUMwRURDN0ZBOTVFNEEzQ0NCRjNEQ0QKKzoxMEExRTAwMDhFM0MxRDc0RDk0OUZFMEU4MkJGNjc0OThEQ0FENUVEREMKKzoxMEExRjAwMDIwREIyM0IxRkVDN0MyRTE5NEZEQzQ3RTdGNENFODI3N0IKKzoxMEEyMDAwMDE2QkEzRDE1Rjk3OEIyRTBGMzQyOUZDMkVCNzg3NkRCREYKKzoxMEEyMTAwMEMyODNEMERGNjMxMUY1MEU5OENGMzY5MUNGRDg2NjY1MzMKKzoxMEEyMjAwMEY3NEY4MUExNUQ4OTJDQjgwM0ZEQ0YzNDY4OTdEMEY3MzMKKzoxMEEyMzAwMEZFMURGNjY4N0Y2RjczNTE2NkUzMEEwMzVCQjBCRjcxNjIKKzoxMEEyNDAwMDk5OUVEMkQ2RkM2ODNGMDBGNzUyNEI5OTBFNkU3NTY0MEEKKzoxMEEyNTAwMDJBM0UwRjY1Q0QyRkQxRTBCMzg0Q0YwM0Y4ODRGMDA1RkIKKzoxMEEyNjAwMEMzQkM3MDBCQzg0QjY3RDdCNTA1MkI2MDBBMkI1RDVFNkUKKzoxMEEyNzAwMDVEREM1N0QxMzU5NUY2QTVGQ0E3OUJGQjNGQ0NDQkJGNEEKKzoxMEEyODAwMENGQThFMjc1MjEzRDdCNkM5NEE3NjA5NkFFMjJBNDkzODMKKzoxMEEyOTAwMEZDRUU5MkMwNDdENThGMjdBRkMzRjdFQUJCNEM4Q0VBRTAKKzoxMEEyQTAwMEZGNzc1NDVFRDExRkE4QzdCQzlFQzY3RkFDNTcyMzE0NEUKKzoxMEEyQjAwMENGRDU2MzVFNkYxOEY2RjdCNjE5RUQxOEY2RTMxNUY5MEEKKzoxMEEyQzAwMDZCQ0NDQjY1QjRDNkE3QkZCNDg3RjU5NzUyNTg2ODU4MTYKKzoxMEEyRDAwMDVGQkQxOUVEM0Y5RDlFNUY2RDVFRDFGRUY0NzE2N0RGM0UKKzoxMEEyRTAwMEZFQ0M2MjFENDBFMDVEMTU3ODM3Qzc4NzczNDBBNkUwNUQKKzoxMEEyRjAwMDUzQzBCNzQxQzM1RkIzMDVCRjgxRjYyNDNGRTBEQ0FFNzYKKzoxMEEzMDAwMEMxOUI1N0U0NkJDN0U1RkI2RTQwM0ZCRjcwMEJFQUNCQzgKKzoxMEEzMTAwMEFFNDQ4QTVCMkE1NEZGMjQ3Q0JGQTIyQjk1RDYxNzI0MTcKKzoxMEEzMjAwMDdGNDhCRTkwNzRFRDRDNkRBNjdDNERDRjUzMEFEOUMxQzkKKzoxMEEzMzAwMDU4Qjg4QTI0NUNFQjE1ODIyM0IzM0E2ODdDNDAwMzlGQUIKKzoxMEEzNDAwMDk0MDdFOEJGNTNGNDVGM0U5MkU0RTcxOTJFMEYyMDM3REQKKzoxMEEzNTAwMEY3QTJGQ0UyN0EyNUNFQzNENzNENzRFQTkwQkVGMEZGQTcKKzoxMEEzNjAwMDE0RURERjcwQTIyM0M3RkY0QjU2NTFDRkMxRjFENjE3QjIKKzoxMEEzNzAwMEZGRDk1N0ExNjcxRTNEQUZFODdBODNFNjU5REY4RkRDMkUKKzoxMEEzODAwMEJFRUQ0RTIyMzgzMzhGNDY5MkJDRjBERTEzODJGRjNCODcKKzoxMEEzOTAwMDNCM0U0RDFBODU3MkIxREJDODE0MkY5RjM3RUFBRDBBRDgKKzoxMEEzQTAwMEE5OEZEOTlDQjdDNzgwRkVDQkVDNkQ4M0JFRjQyMjFENkMKKzoxMEEzQjAwMDdBRjU2N0M0NjI4OUJFRkZBQTdCQ0VFNEE1RjAyQzNEODYKKzoxMEEzQzAwMDgxQ0I2QkJBMTFBQzRENTkxNDhFNjk5OURDQ0YxQTE5MzcKKzoxMEEzRDAwMDhDRUY5N0JFRTc3NkQwNzM4OUVGQTcxNjU1QjE0RjYxMjIKKzoxMEEzRTAwMDdFM0Y3M0YxRjVDRjkxREQyMTA1RTkyMkU1M0E1NjRGMjUKKzoxMEEzRjAwMDJEQ0NFNEYyMzgzRkYzRkY5MTlFQjI1RTQ1NEY1OUE1NTQKKzoxMEE0MDAwMDlFRTJGNzBGNDI3MDg0RUZCOTVDREQ0MzE1RjA5RjZCNUQKKzoxMEE0MTAwMDBDN0UxN0M2NjEyN0RFRkQyMUVERTM5ODJCRUE1Njg2RjgKKzoxMEE0MjAwMDYwREQwQURBQ0RBMzAxQjIyQjVGRTA0MzVFQkZGMjA4MjQKKzoxMEE0MzAwMEM2ODBCM0RCRjVGNTJCNkMwQkRGMjcxQUNCNTc1MTNFRUIKKzoxMEE0NDAwMDBBMDlGRjVEQzAyMUVDQzFFRDA5RERCRkUyNDVDNjdBMTYKKzoxMEE0NTAwMDc5OTY2RDgwQjNEMTUwQTg3OTZFRTc3NjRCRDIwMUU4M0EKKzoxMEE0NjAwMEJEOTRBNTQ2RTVGODkzNUQ5OTlCNTBERjBFNzNGM0JDNTAKKzoxMEE0NzAwMDYyN0FBMUJGMTRFNzJGRTUxMkVDQUFFMDEzQzNGRDUzRTMKKzoxMEE0ODAwMEVENUM2RjRDOERDM0JGQ0YwOEY5OUNCRDlFRjM0REU3Q0IKKzoxMEE0OTAwMERGQUEyNjIxREUzQkRGNEI0RDU5QTJEMTEzNUI4NTFEODAKKzoxMEE0QTAwMDk0RkQ0QTNEMjRCRjkzQ0Y5RjE1RkNCMTJEMzM4OURBMkIKKzoxMEE0QjAwMDVCNUQwRTkxRTczMUM0REQzN0I3NTU2MzVGODk3RkRBQTUKKzoxMEE0QzAwMDM4RkZDMDdDNDM1QUZFMUVFNjU2NzRGNkI1RDdBRTBBNzYKKzoxMEE0RDAwMDNDMzc5ODAxQkY4MEJGNkRBNjUwMTZENkVENTQ3NDE5NTUKKzoxMEE0RTAwMEE4QkY5QUREMEVBQTA3QUNFOUUwNzhBQzY5REY2N0E4REYKKzoxMEE0RjAwMEQzRTAyN0I2QkZGRkM4RTRGRUMwMjYwM0FGMjMzQTY4MDcKKzoxMEE1MDAwMDAwN0U0M0JDREIzOTdDRTc3Njc5NDg3RjFFMTZFRjVEMjEKKzoxMEE1MTAwMERENkU3QzMzM0RCM0M5Q0NFQjQ4ODFCRTU0Q0ZEN0YwNjAKKzoxMEE1MjAwMDcyRjYyNkJEOUU2RTExRjgwRkI2RTIzRUI2RjQ3NUNDRkIKKzoxMEE1MzAwMDg3QjU1NjgwQTc4ODAyNzA0Rjc3MEJCRDYzRjY5QjcxNzUKKzoxMEE1NDAwMERGNkFDRjUzOENENkYzMDc1NUZCNEJCREQwNkUwQUQ4Q0MKKzoxMEE1NTAwMENCMTRFOEFGQTg5REVCRTE4QTI3QzE4RjQxQjlCMzQ4N0UKKzoxMEE1NjAwMEJCRjBENjc2RUQ3OEM3MzIxRDIyMUVFMUZDNUNCMzlFQUYKKzoxMEE1NzAwMEUzNkYxMEY4M0YyRkUwMTVGQUY5MTVGOUYxMUM5RTRGMjMKKzoxMEE1ODAwMEQ2NzY4Q0MyRkM5M0ZDRkUwQjQxRkZBQkMxNTc4MUYwMjkKKzoxMEE1OTAwMDk1NDdFMUMzRkU5MTlGOTgzREIwMDRGQjZERkNDM0NFOEYKKzoxMEE1QTAwMDZDNkRCRjVGNjU3MjdEOUI2RTlDMzlDNjhBN0E3RTM1MDUKKzoxMEE1QjAwMEQ4MUQ5MkNFRTA3RURDOTc1MEIzMzdDNUI5ODI5MTNDNkUKKzoxMEE1QzAwMDFCMzBFRTkxRTNENjg4M0MyNEM4NURDNTE0OTg1QTUxREYKKzoxMEE1RDAwMEVGMzg5MkFFRUZCRkE4OURCRkVBRTZGRURDM0Y4QkJFMzAKKzoxMEE1RTAwMDlERTYyMENEQTc2NzA3QzBFQjhERTJBNUIzRTM4MTI1RUIKKzoxMEE1RjAwMDU2QjQxMzQ3OTkwRkVEODQ4NDc3NTA3NTc3MTJENjlEMjIKKzoxMEE2MDAwMDM0MDlGQjAxRjMzNTYwRkM5MkZFMzMyRjZCNDVCQzc1QkEKKzoxMEE2MTAwMDhEMzE2M0ZDMTRDQkQ3OTI0RUM1OENDQjhGOENEMzhBRjMKKzoxMEE2MjAwMDcxODEwMERBQjlFRUExNDJGRjMwOEE3NzNGNzlGOUQ1MUUKKzoxMEE2MzAwMDE3NTY1MDdDQzVFOUQyNTRDREU5NThFOTBFNEU3NzY3REMKKzoxMEE2NDAwMDQ0RTUxMEY0NzkwNUVBQUI5QTI3N0JGNTUxMDdCRkRGQTMKKzoxMEE2NTAwMDk1NTcwREY4QkNERTJERTU1QzRGOTdGNDQwODcxNUQ3NzQKKzoxMEE2NjAwMDM1MjQ1RjlGREQzMzI0QkM4MkQzOTlDNkVGRUM3MDg0MjAKKzoxMEE2NzAwMDE1MDVGN0ExMzZCNzYwREMyREY1MDRDMkEzQURDMzk0NzAKKzoxMEE2ODAwMEYwRjREMjkxMDExRDg3NDRFRjBGQUFFNkZEMzU4MUJDOUQKKzoxMEE2OTAwMDIzMUZENTFCOUIxNThGNDI3QTgwRjJBQzk5QTgwN0EwODcKKzoxMEE2QTAwMDlERDlDMURGNjM3QkY5QjkwODEyNEZGNUQzQTE1Mzg4NTcKKzoxMEE2QjAwMDNCRkRFRTEyOUE4N0M0NTc2Njc1QzQ1MDBGQjcyNjU4RjMKKzoxMEE2QzAwMEFBRkMyNzM0RkVEQTYxQjFERTgwNzg5OTRBRjEwNkQ3MTgKKzoxMEE2RDAwMEQ3RjVDNjQwMEVDNkFEMkMzMzgxRjY3MTgyMUQyMkZEMjIKKzoxMEE2RTAwMDcyRDBDQTU0MkJGNEY3MjY1Q0QxMkU4RDMzQ0VBNzdEQzEKKzoxMEE2RjAwMDM0RTMwQTE1OTI2M0QwMDAzMkVGMTM0MTdGRkFGNjVCMjAKKzoxMEE3MDAwMDZDMjRGRkVDRUI4NzA2RTIzQzMzNkM5QzBGQTExRjhCQTMKKzoxMEE3MTAwMEU4Qzc0Mjc2NTBEODgzREZFNzgxNUZBNzQ0RjVGMjQxNkUKKzoxMEE3MjAwMDQ1QTE3RTBFREU3NERENjZBQTJEMTQ3Qzg5RkRBMUZGOTUKKzoxMEE3MzAwMDc0NTA5OTkyNDNGNkIyMzM0MzE0MTc3MUY4RkJCNzY3MUMKKzoxMEE3NDAwMERENzlGODVDMUIyRjYyN0MxNzhEMzc0QjU3REQwQTNDOTcKKzoxMEE3NTAwMDM1NjI0MjQ3QzRFMDQ0RTkyODlGRkM3RDgwN0YxQ0M0RTkKKzoxMEE3NjAwMDlCNTY5OEZGMDM4MkFGMEZFNjg3OEM0OTA4RDcyMDk4NDUKKzoxMEE3NzAwMDM3REMzQTk0MTgyQzY5QjY0N0M3NzE4OUZDOEQ0QkQ0RTUKKzoxMEE3ODAwMEVGQTJCRjgwNTc4Mzg3RUJGRjlGNzhCOEJERjg1MDVDN0UKKzoxMEE3OTAwMDVENDlGMUYzM0QxN0M1RjM4RkVENUM0RkFGQTg4Q0JGNUEKKzoxMEE3QTAwMDZGRkIxMTYxNTc2NERDNzlCQjU4RUY4MEI4RjMxMTM3NDgKKzoxMEE3QjAwMDhGM0I0NUZEMjk1RjFGMDFGRjlFRjA1QkY1RTM2QTVBNjEKKzoxMEE3QzAwMEY3QkJEODM1MkQ5OTlGODdDMEY1QzEyQzUxRkY3OUZGNzQKKzoxMEE3RDAwMDIzRDM3RThBN0M3NjAyRUJDQzAxMEY5RjBBN0UzOUUxN0YKKzoxMEE3RTAwMEY0Mjc2MTlENTQ0MzYyRkMzQUUyNjcwNTNDMEQwMjBGNzkKKzoxMEE3RjAwMDI3MTdGM0YzMEI2NkUxQkExQ0YwREYxQTM3RjdGM0U2MUQKKzoxMEE4MDAwMEI2MEYxQjhGNzQ5RkJCNEFBMTc1MzlCOUZFMkZFOTVDNDcKKzoxMEE4MTAwMEJCQzFBOENCQUZDRkMyNzVCOUI0N0YyNDlFMkFFRDI3QTgKKzoxMEE4MjAwMDlFMkFEN0M1NTM3MkRDRDhCOEVBOTNDNTZFREQzQUMwMEMKKzoxMEE4MzAwMENDRjY0MjcxN0UwNDdGN0YxNkYzMTFEQ0IzREFCMjc1NzkKKzoxMEE4NDAwMEVCODhBQzJERTMxQkVERkJDNzM4MkExNDE3M0VCM0VFQTMKKzoxMEE4NTAwMEZFMjc4QjJEMkNBNDg1RTNENDQwQUE5Rjc4QzQxRDdDQjEKKzoxMEE4NjAwMEM1QUQ4M0MzQzY0MkJBN0NFODY4MjdFRDI3QjJGMjNDODcKKzoxMEE4NzAwMDJDRjhFMzNDOEU4MUVCMjYzQkY5RUIxM0QwOUZFRENEMUEKKzoxMEE4ODAwMDg3ODExRTcxMjZBMzVFQUFEQ0VGMUUxRThEMUZBNDlDNkQKKzoxMEE4OTAwMEQ1OEY4RTFGNDdBQzExN0VEMDFBMTc4RjkzOTM4RkNBMTYKKzoxMEE4QTAwMEI4M0FEMThCRkE1MUZBRTVCMURGQkREN0NCQkY3QUJGNDkKKzoxMEE4QjAwMEYyNkE3OTA4RTBFMzkwMzY0RThBRURGNzk0RkIxRjhEM0IKKzoxMEE4QzAwMEJGMEJGQkUxOTdBMkZGOTFGOEJCNjI3NDkwRjI3Q0FDRTYKKzoxMEE4RDAwMDVEQTE5QTk2MTE2M0Y1RjFEMEQ3NjhENzg3RTNENUE2MjUKKzoxMEE4RTAwMDhCODc2QUFBRjVFRjMxMEZCN0ZGQ0M2M0QzRjlGMUZEN0YKKzoxMEE4RjAwMEUxNTNFQkM3MkI4NUE4MDc3OTdGOEQ4MjJGRjI0RkJGREQKKzoxMEE5MDAwMDQ3RjVBNEEzM0REQzJGRjI2NUY5MTMzQzcwNUQyNUVBMDEKKzoxMEE5MTAwMEM5NTc1OUY5N0VGRTRERkZCRERGM0QwQkZEQTM3NzRDQjYKKzoxMEE5MjAwMEI0RkVDRjc2NzNCRUE5N0M2NjYxMkI5RTBGNjBFRjUwOUMKKzoxMEE5MzAwMDlDREFGREFCREY1OUE0Rjg2QjQwQUVEMzg0N0VBQ0Y3NTQKKzoxMEE5NDAwMEYxRjlENEZCMjJFNjgxNzZBQzJGRTY3MEU0NzRFQzUzODcKKzoxMEE5NTAwMDU0MERERkU1RDRGMkY3NzIzRDI2NUQ1RTNDNUZCNDA3MkYKKzoxMEE5NjAwMDc4OUMzMjhFRDkzNzMxMURERkY3QUJFODE3NjQ3NTI4MzQKKzoxMEE5NzAwMDY0M0ZCMzlBMTlGOUQ1NTlFNTBBRjVGRjlERjI0RENBMUUKKzoxMEE5ODAwMEFDOTJFODdDREIwQzUzNEE5Q0YwNUQ5QkNCRTY0M0ZCMkUKKzoxMEE5OTAwMEYzQzNBQ0UwMzUxRTg0RUY1ODI0ODJFNjcyQzRCMTJFQjYKKzoxMEE5QTAwMDE1RTNBRDU1NTlGRTYyQzQ4MzlDQTdEN0U4Q0M0MjNGNUUKKzoxMEE5QjAwMERFNzY4Q0MzRDdERTlCNjdFMkY2ODdCMTk1QzIyRkREQ0EKKzoxMEE5QzAwMENDRkQzMzIzM0JDQ0I4N0Y0RTc2REVCNUE0OThFQ0EwMEIKKzoxMEE5RDAwMDlDOEYyQjU1RDgxMTE3MEJFRUI0RDNGQjZERTRCNzU4RjEKKzoxMEE5RTAwMEI4MUZFMDVBNTI0NEZFQkNBNDZCMzRFRTFDNUM4NjcxNjYKKzoxMEE5RjAwMDY3RTFBQTg4M0ExM0JFN0I3OTgzMjFFRTc5MTVFMzA1RDYKKzoxMEFBMDAwMERFNjExRTk1REE3OTVDNEQ2RkM5Rjc0Q0ZERTQxRDI1QkEKKzoxMEFBMTAwMERGREIyNkM0OEZFN0MxMTJEMkYzQ0E2N0QyRUYyMUY5NzgKKzoxMEFBMjAwMDVDNkE2Njk4QUY5NkY4NUY5NTE1QjgxM0UxQzlFQUQ4RTUKKzoxMEFBMzAwMEE0MjA2RTNFMTE3NTBBOUYyNEYyN0NGQzI3MkI1RTUwRTkKKzoxMEFBNDAwMEQwQkY3QzY4MUU3MzFBNTlGRjcwRDcyRjMyRkE2QkI0Q0YKKzoxMEFBNTAwMEYyQkNENDRDNzQ5MUYxNEExNDFFOUU4NzY5RjA3MEZCQ0QKKzoxMEFBNjAwMEI0MkYyQjUwODNFMzM3RUU1RTRENzFGNUJDMkRDN0NENkYKKzoxMEFBNzAwMDU3NUM4N0Y4ODY3ODUzNkFCOUJGNUUzRkMzNDJGNTRDOEUKKzoxMEFBODAwMDk1Q0ZBODQ0RjdCQUE1NjY1QTM3QUNERkJFODNGNkE3QzAKKzoxMEFBOTAwMEIxODc5OTBGRTVCRkJFNjM4NzUyMDNFM0Q2NkRERkExOEYKKzoxMEFBQTAwMENDRDZFMDMxQkIzRTRDRjVEQkQ3MzhFNDdBNDQ4NEZDQUQKKzoxMEFBQjAwMEU5NThGRUM2M0MwMkZBMkY4N0FDNUNGRUNGNTREQTQzNUQKKzoxMEFBQzAwMEI4M0U3MUM2MTRBQ0M3RjdDRTc4NkMzRTVDQzc5NDc4QkMKKzoxMEFBRDAwMDdGNzNDN0FENzQ1RTgwNjM2NzQyMDRBRjZEODZDRDZFRDEKKzoxMEFBRTAwMDBCQkNENzc2QUREOTg3RkNCNDJBMkJCODFDRjE5MkFBM0YKKzoxMEFBRjAwMDA2M0FGMUZCOTQ3NDg3MEZENzM3QkMwOUFDOENFQ0Y3OUUKKzoxMEFCMDAwMDM3QzRDMzg4MThCRTE4RjEzMDk3OTc1Nzg0N0U4MTNGQTkKKzoxMEFCMTAwMEFBQTc3QUQ2QzNGRDcyNUM1RTQyN0Q3NUM4QzRFN0IxNTAKKzoxMEFCMjAwMDkzNzE3ODBEMUVGRjdBOTQ0Qjc2Mzg5NUM2Q0RBQThGMTcKKzoxMEFCMzAwMDI4NTg3RjExM0I2RTk0QUZGQzFCM0QxOURGMDZDRTBFRUIKKzoxMEFCNDAwMDMzRUFGOTNBQTE2RjJBOUZEOUEyN0NBQTgxRkI0NThGRUIKKzoxMEFCNTAwMDkxRTBDQkRBQkU0OUMxRkMxOTNDMjc3RDAzRUYzM0FDNTEKKzoxMEFCNjAwMDc3Q0FEQUNFRTNENTNBNzgzRTVCQTM1RkU0M0NFMkU4MEQKKzoxMEFCNzAwMDk5NEU4NENGN0VBQ0VCMDBENzMzMTFCRTVFMjBFMDhEQzIKKzoxMEFCODAwMEE1NjdDNEUzQTVGMUM3ODNCQjQwRjdDREExNjI4Qzk3NEQKKzoxMEFCOTAwMDBGMTUyNDUyN0Y1MkVFNjNFNTM0RTJFMTdFNjVENjg2REUKKzoxMEFCQTAwMDJEOEFDMTRFRUIyQUU0NUY0QUY4RTQ3QkJFQUMzMTA3NDQKKzoxMEFCQjAwMDNDODQ4NzJFQzI0M0MzMDY5NUU2MzNDRTFDMTgzODVGMEIKKzoxMEFCQzAwMDIzMEZFRjg5RkVERTk4RkUxMTlEQUJGM0U0QkZCRDRCNzIKKzoxMEFCRDAwMEZDRDgwMDcxMzZDNTE5RURFRjlBQTdBMTlEMDlGREMyRjkKKzoxMEFCRTAwMDg4RUI2MDkzQjg4QkMyRDY4QTczQTcyNjc1NzIzRERDNUEKKzoxMEFCRjAwMEQwQjk0MzlENjU4RkYyNjlGRUU5MzdFOEJDQUE4NjhFMUQKKzoxMEFDMDAwMDA0ODZGMTE1RjBERjUxODQyNzk2NEZCRjI5M0Q0MTFGN0YKKzoxMEFDMTAwMEYxRjgyOTY0MTY3OUJFNjAzRUM2M0Y1MjRGMUI4NEZDOTIKKzoxMEFDMjAwMDMzM0JCRjdGNDFCNEEzRkMxMzNDRUREMUU5NTkyQkM5QTEKKzoxMEFDMzAwMDQ1RkVFOUIyMzdCMERFQjNDMUE3RDA3OTFEMTI5RUY0NEMKKzoxMEFDNDAwMEFBRjg3RUJCRDQ4RjUyNkY2MzNFMzFBMEQxRUYxNzA1QjcKKzoxMEFDNTAwMDVEQTExREUxNzEyQTJCNDAzQjJERTE4Q0E1RDM4MDJDRjkKKzoxMEFDNjAwMEFFQzdFM0YwRDNERjExREU1OEJCMjVFRDc5RkVDNjlERkMKKzoxMEFDNzAwMDJBRUVCRjkxN0MzMjA5RTlBQkUxMTM0Nzk2OTlFMDcwNjcKKzoxMEFDODAwMDY0QTlENEZGREE0QUJFRUVCOEQ2QzRFREQ1REExNjBCMDUKKzoxMEFDOTAwMEQ1NjFCRTc5MzdBRjBCNzNEQzYzOEVFMEY1QTA2MTY2REEKKzoxMEFDQTAwMDNEM0UzRjk4QzVFMTY4MzMyQ0ExRkQ2ODIwN0Y0OTU5OUUKKzoxMEFDQjAwMDE5QzgyNzQ5OENFQjQxQUVGNzlFRkMwREQ3NUJGNTIxRjcKKzoxMEFDQzAwMDNCQzVCOUY1QzEzQjZCNjhERDNGRERFQUMzN0E1OTE2NzgKKzoxMEFDRDAwMDNDNjA5RUU2ODhFMjM1OTY4RkJDM0JGNzk5NzExRTkzRTcKKzoxMEFDRTAwMDNBQjhCQzgxREUyNDNFOEFFMjJGQUM5MzEzMjkwRjg2NEEKKzoxMEFDRjAwMDVFM0YyMTk4Q0ZGRDIwMUU0Nzk1ODhGRDgxQjUxNjFGMjgKKzoxMEFEMDAwMEVEMkZBQzE1RjlENjEyQjE0RkIwRTJBODlGRUNDMTRDQjMKKzoxMEFEMTAwMDQxODc4REY2QzA3NTU5OThBNzU5MTU5MzZGRkQ4NjcxQjcKKzoxMEFEMjAwMDQwRERBMkRGNTFEQ0Y1QTBGQjJEQkE0QTc5ODQ3ODU1Q0QKKzoxMEFEMzAwMDI3QjczNzY2NzEzRjNCNUY1QzJCQjMzODlGRDQ5NTc3NUQKKzoxMEFENDAwMDkwQkNENTlENjgyNjM5QjU0RkUwRkFDQTdFMkNDNjJGMzcKKzoxMEFENTAwMDY0OEYwOUJFNUI0NUUzOEVCMzc1OENDN0Y1RTI3MTNGMjYKKzoxMEFENjAwMDU3OUNBREFDN0YzOEU3RTIzRTJCOENFNzM2RUM0RjdBNTAKKzoxMEFENzAwMDAwRTVGOTZCODgyNjM0RkI3MEE2NjY3MTM5MzlCMzBEOEUKKzoxMEFEODAwMDEwNEVGNkE4RDk3QzI1M0ZGQjZBRkRCMUM4MTE4NUNFQ0YKKzoxMEFEOTAwMEY5MTBCODNDQjNCREVBODZDRjcwN0Q2NzVCQjIwRkY3QTAKKzoxMEFEQTAwMEQzN0ZCOUZEOEUxRjdDMDY3MDlGRDk3MjhCMEZFRDdGMEMKKzoxMEFEQjAwMDdBNkI4MEY4QTUyN0MzRUFEQkNDRjNBRjEzMzAzRkQ1MUQKKzoxMEFEQzAwMEQyQjEzRjA5RjdFRDdDRjFDMkY1NjVBODhGRTc2NTcxNTcKKzoxMEFERDAwMDNENzVGQTM3QzY0NTg4OTcyNUNGRkZGQTY2N0M1RTE3MjIKKzoxMEFERTAwMDU2RDJEMDJGM0RCM0VERTc3RkNGODI3RTZBQjczNEUxRjQKKzoxMEFERjAwMDA5NjJBQ0Y1ODVEN0M5REYzNzg0MzdGMUZCREI5MkM5MkYKKzoxMEFFMDAwMDdGRkRFMkQ5RDUzNzIzQkU1QjNCNUFFOUY5RTk2NzM3QzUKKzoxMEFFMTAwMDUxRkI4REU3N0ZGRERBREZFMEJERkE0MDEyRUQ2NzNFQzIKKzoxMEFFMjAwMEZEOUI3RDQ0OTdGQUEwNEE3NUU3QkQ3QzFDQUIwNzc3NzQKKzoxMEFFMzAwMEVDRTM3QTEwRUQzN0YyRkQwQ0FFOUYyNDFGNEJGRUZEQzQKKzoxMEFFNDAwMEUyRjlGQjZGRDBEQTAzNzlCRjRERTQ2OURBMTJCOTdEMUMKKzoxMEFFNTAwMEY4NTJDODY5REQxODdCMUI1RUJGN0NEMTRBRTc2RTM2QUQKKzoxMEFFNjAwMDlBQkI4QjMwN0VBRjJGRTE3Q0YxN0Q4MThGRkE4RUY5MUEKKzoxMEFFNzAwMEE2NDYzQjdENEZGREZDMjczMDNENUU4NzAwN0Y2MjdEMEYKKzoxMEFFODAwMDE3QkNCNUU1MzJENTI5RkQ4QUVCOTk0NDM2MTJGMzM4NjMKKzoxMEFFOTAwMEQzQUI4RkYzN0Q5QjI1Q0RBNjNBODJGMzA1RkUxQzY2Q0UKKzoxMEFFQTAwMEFEN0Q1RUIxMzA3RURDQjgzQUNCQUVDQkQzNjY3NTRFQUQKKzoxMEFFQjAwMEM5RjE5MkRDMjdGODA2NjlGQ0RBQUNEQTYwQUIwM0VFODQKKzoxMEFFQzAwMERGQjYzMEU4QzM3REVGMkY5RjdBNkYzQ0VFNEY3OEJFNDAKKzoxMEFFRDAwMDU4MTk0NkY0MzcyQURDN0U4NUVDMzQ0RTAzQUUwRjQxMTgKKzoxMEFFRTAwMDVDRjFBQzkwMTMwODRCRDM2Rjg0Rjk4QzUzNTkzQTZFRDQKKzoxMEFFRjAwMEREMURDN0Q4MTExM0U5ODVBREY0MUNGQzE3RjJDQkJDREUKKzoxMEFGMDAwMEFGNEZERjhBRkVDQzVBNTNEMDMzMUNGQjY5MTM3NjZGRTgKKzoxMEFGMTAwMDBCODcxRkJFNzdEQUNCQTgzRkU3OEREQzBGNUY4MERGQTIKKzoxMEFGMjAwMDlENkY5OTlDOEU3RTNCRjREQjY1RDJDNDU5QzA5MTc5QUMKKzoxMEFGMzAwMDY4RjdCMEJGNzJDNEQzODREMDBDQjIzRjVFMzNDRDRGM0MKKzoxMEFGNDAwMDlFRTcwOUYzMUY3QUVGOTBBODdDQzZFNjkxNTAzRjYxMTcKKzoxMEFGNTAwMERFNzc1RjU2RTU1RUQ0MzNGMkVBRUEyNzBGQzNCMkY5MzMKKzoxMEFGNjAwMDczN0ZCNjlGQUVERkY0N0NEMDM3QTY5RkUzRjZGQjk1RTgKKzoxMEFGNzAwMEUzQzRCNzhEQzhCNzM4N0VGMDg0Q0U3RUNGOTI3Q0JCNTkKKzoxMEFGODAwMEU3MzhGMUVEQUNERERDN0UzN0VFMkUzNTIzQkY3RUI5NDAKKzoxMEFGOTAwMEQ4Q0YzRTA1MDdCNjUxRjBERjVBQTU3QjBFRURGRkRBOUMKKzoxMEFGQTAwMDYzQTU3RDdERTcyNDdGQUUzQUZFMzlENjlCMTZFQ0Y2OEQKKzoxMEFGQjAwMDUwOUVFMERDMUVDRUE3MDcwRDA2OEFFRjBGNkVCRTZFMTgKKzoxMEFGQzAwMDUzQUJEMkQ3NkU4MjFGNEQ3MkQyRDhDQzg0MUZCREYwNDYKKzoxMEFGRDAwMDNERjRCQjFBNkE3OTlENzk2MzBDMUZFNTZGRkM2NDE5MTcKKzoxMEFGRTAwMEYyNEIwQTc4QkQ1ODNGMDM3RUNBNzhEQTE3NTlDRjg2RUMKKzoxMEFGRjAwMEEzOUM2NjhERjVFRkM5QTZGNTNGMUU3NzY3RDU4MjNFMDcKKzoxMEIwMDAwMDgxRjY2REU5RjM3Qzc4OTQ1NUNBNThGMDc3OTFGRkQyQjgKKzoxMEIwMTAwMDZGRjI2MTNFNkM2RDZFQzczMkY0OEI0M0UzMTg5RDlCRkIKKzoxMEIwMjAwMEJBRDZENDNFMDZFM0RCQjVFM0JDNEVDMDI0RTA2RDBCREMKKzoxMEIwMzAwMEY5Q0RBQ0Q4MkNFQzU3MERGOURCOERFRTdGRjU1MUJFNzgKKzoxMEIwNDAwMDNBNTZGRUY3QjQ5MERGRDZFODRERjRFMTM5QjY5Mzc2ODAKKzoxMEIwNTAwMDJCMEJCODlGNjI2NzA4N0YyM0UwMTdEQjkzQzJBM0MyNjQKKzoxMEIwNjAwMDA4Q0Y1OTgxM0Y4OUM3NzNBNjJFM0E0RkY3REM0QjA5QTkKKzoxMEIwNzAwMDc0M0VFMUE0QjE5QzVGNTNDNjc2OTBGRTc4NzNDRkFENjkKKzoxMEIwODAwMDY0OUYyNTVGM0E3NjI1OTA5RDRFNTU5RDBBRTYyRjE4QzAKKzoxMEIwOTAwMEJCMjM0MTRCRDc3NjUxODc5QjIyRUM0OEUxMkE0RURGRjgKKzoxMEIwQTAwMEM0NkNFRTY3MjQ2NjFCQzRENTJDRjg1QzlFQjcxMkEyNTQKKzoxMEIwQjAwMDdDQzI1OTQxN0ZGQ0YzNkFDRTZCNkFBODg5OTAzQ0Q1NkIKKzoxMEIwQzAwMDZGRTdGREE1MjdGODRCMUZEMkYwQUZGNDk3RTQ3QTJCN0EKKzoxMEIwRDAwMEFFQkY0RTg5QzNERjNFMDE0N0ZFQzYwNTQ0Rjc1OUI1RjIKKzoxMEIwRTAwMEUyM0M4NzU1REM4RjYwQzAxNzg4MzdBMDIzRjFDMTZEMjMKKzoxMEIwRjAwMEU5NzM4OTZFQjM1NjI5RjcxMDFENDMxNTk0RDc5NDdFRDIKKzoxMEIxMDAwMDU3NkNGRkU1RDk1QzJGNkVCMzA2Q0FCMThFQUYyN0MzNkIKKzoxMEIxMTAwMEUxQzNGQTgwNkQyOTdFMDNBRDBGOTRBNjUwN0UyMzIzRjAKKzoxMEIxMjAwMDhERkI4MTE5QzIwRjhDQ0E3REEwREMwMEUzOUM3MjM5QjMKKzoxMEIxMzAwMDM4QkRDM0JGNTczMTZGRURDRkY2QzZGNUVCRkFDNkVGOUEKKzoxMEIxNDAwMEJDQkZDOUVEQTFBMTE4Q0ZDOEY1NjM4OThGNzA0QkUyRDAKKzoxMEIxNTAwMDBDQUQzRUJENTFFMDIzM0M5OENENDBCRDAxNzE4MjlEQjgKKzoxMEIxNjAwMEYyRUI0RTE4MDdGMzA0OUI0NzNEQ0JGMzA0RkM1Q0U3N0UKKzoxMEIxNzAwMEMyNkM5RUE3MUI5NzE2Mjg0N0JGMkNBMzMwQjA5MERCNEMKKzoxMEIxODAwMDRGM0VDRjU4N0NFQzEzRjZGRDhERTlGNzk1NjI3Q0RBRTMKKzoxMEIxOTAwMDc4QTdERDg3NzJGN0U0MkJDQTRDRTJFQjkwMDUwRkZCMzIKKzoxMEIxQTAwMDAxQkVFNzcyMDgwRTEzRDVBREIxQTA0QUY0Njg2QzBFNkIKKzoxMEIxQjAwMDg0RTNGM0ZEMTQ5MkIzNDZGMEYzRDBCRjlGODQ3QzlFRUEKKzoxMEIxQzAwMDRFN0MxRkU2N0NDRkVEOUZDQzIzQTA5RUQ0QUVBQjQ4MzcKKzoxMEIxRDAwMDdEMjBGNTBDREEzN0U0NjcyOTE3OEQzNzc3MTcyMTdENDUKKzoxMEIxRTAwMEJGQTk1RTM5NjdFMjcyN0UwRUYwODA3MjI0RTVDNkYxNzcKKzoxMEIxRjAwMDMyOTc5NzE1MkRERTRBN0NCRTAyRTQ1RTRCRUZEOEI4M0QKKzoxMEIyMDAwMDBCRTFDNEY4NTVFQUY3MUY2NjA1MUFCMzMxOEUzMDQ0RDYKKzoxMEIyMTAwMDk2RDFERTUyQTE4RjFCNUY1RTVFMTQ2RjdGOTBENEM3MDQKKzoxMEIyMjAwMDE2NzExRUE2MjU2QzBCNkJENzQxQjBCNkMyNTE0NkQ3MUUKKzoxMEIyMzAwMDEwREEyM0RCQTJGODc5OTY5NjZDNjk1RkZCRDRBNUI1OEEKKzoxMEIyNDAwMDY0MEZFRjVCOTdFNjQyREI4NUYyQjNEOTQ2RkJENDY0MkIKKzoxMEIyNTAwMERFMjlCNkRGODdCMjE1NUQ3RTQ3QzYyNUI4OUU4MUVGMzEKKzoxMEIyNjAwMDNGMjNFNEE3NURGMEU1NzNEOTMyQ0YxQkQ2RjFCRkQ3RkEKKzoxMEIyNzAwMDEwM0M4RTc1MDVGREQ5MzFGOUREM0YyQjBGMjZDNzkxQTYKKzoxMEIyODAwMEY2MzQ5NkZFNzIzRDA2RTczM0E1QTRGRkY3REFGNzMxRjAKKzoxMEIyOTAwMEIxQ0VBN0U3QzcxNzg1OUNENDY1MzNCQUI2OUIyMjE3RjIKKzoxMEIyQTAwMDQ5QUVFNjNCMThENUYzQUM2N0ZFMzQ1Q0U3N0JFRDFBOUMKKzoxMEIyQjAwMDJFMEZGRTlFMjJFQzdGNjA2RUQwOUE5MzExQ0RGN0UyQTYKKzoxMEIyQzAwMDdEOEMzRkVCNTQxNjRBMDA5QUQ0NkQzMzg1QjVGQjY0RjAKKzoxMEIyRDAwMDdFODZCNTg2MDBDNzc5ODcyNTY0MDQzRUFGQzgwREVFMkIKKzoxMEIyRTAwMDQ1RkUwQThERTFGQkUxNDIzRkI0RDJGQTE0MzhEMkMzRTUKKzoxMEIyRjAwMDUxQkYzNEIxRUUyNEM0NzNBM0IxQUIwOEYzOTNENUFFMDAKKzoxMEIzMDAwMEUwM0VBNEZGMjc4NkFFM0M1RUQ3QzFEN0NGOEU4OTdDQjYKKzoxMEIzMTAwMEVFMzE5MUNGRUQzNDQ3NzJCRjlGMUUzRDlGRUUwMkUzQTkKKzoxMEIzMjAwMDc1NTUxN0JBMENBOTE4Rjc3REI4RkIwRjJGQkUwMjVGMzEKKzoxMEIzMzAwMERGRkJDQUQ5N0I3Rjg0RDg1QTYxQkJFRjY3NzBBREI2OUIKKzoxMEIzNDAwMDE4MDNBQTI2RUY3NkNDMTE1RkNGN0UyMEY4QThCN0VFQkYKKzoxMEIzNTAwMEE5MjUyMTZFM0U3RjZCMEU3RkFGMjk2NkJEN0E2QjBFRUQKKzoxMEIzNjAwMEQ3QTdEMTdENEY3Q0JERkFDMzdFQ0VCNUJBMjE0N0Q0RDUKKzoxMEIzNzAwMDRCOEE3QUFDRDhFNzM3RTc3MDdFREI2NjYyNDVFQjExMjMKKzoxMEIzODAwMDlFNEQwRTVBRTc2NzJBM0Y4RkFDRjY4OTdDMUZBRUNGRTEKKzoxMEIzOTAwMDc3MTZGMEYzRUY3QkQ2Mjg2NDA3OEU5OUI4RkU4MUJGNEQKKzoxMEIzQTAwMDNCMkQxNTUxM0I4QTZFMEFGQTg5QjVDRTUwQzQwMEZBN0UKKzoxMEIzQjAwMEEzNzZBMTIzODJFNzYwQzI3RDc1MzRDQTVBQzg0OTc1NTUKKzoxMEIzQzAwMEMxMzM4NTdEOUNENUZDRTY1RjMxOUY1MUFCMzJDQjY4QTQKKzoxMEIzRDAwMEY4RUVBNEJEMjYwOUNEQzM5Q0VGM0U4NDQ3Q0NCMENDOEIKKzoxMEIzRTAwMEVBNzY1MTNGMkFDRTU3RjM0RjM2NUVCNjVEQzlBRkQzRUEKKzoxMEIzRjAwMEVGMUJGOTQ1NEU4MEU1QzBGQ0FCOTMzOUJFQUIxRkUyQjUKKzoxMEI0MDAwMEU3RUNDQUY3N0YyM0U0MzY5NkRGQjYyMUFGMDJCQzFGMTQKKzoxMEI0MTAwMDI5RENCRUM0OEVFM0NDMURGMzAyRjI1M0I1M0I2MEEzMUUKKzoxMEI0MjAwMEZFMUYzQTRCN0FBREZBMTUyQjlEN0Y1NDg3RUI1Q0EwM0IKKzoxMEI0MzAwMEYyQ0U5Nzc2MTUyRENBNDdCRUVFQzlGQjIzRTZDOUY2QjQKKzoxMEI0NDAwMDI2NTA1RDcyMURBRTc3NjlENkE3RkI1QkVGRUE3RjlENDQKKzoxMEI0NTAwMENCNkI0NkZFNkRCQ0E0MTBGRDY3RUU3REYzMjhFQUVCRDYKKzoxMEI0NjAwMDQ2QjU5QkY4NjJBNkM1NEU3ODZGQkNBNEQyNzNENjY2NkIKKzoxMEI0NzAwMDNBQTNERERGQjZEMEVEQ0Y0N0I4NDMzRjFFOUQ0MkVCODgKKzoxMEI0ODAwMDY1OTk3MDlGRjA1NzRDRTc2MzJDMTBGNUUwQ0VEQzYwQjcKKzoxMEI0OTAwMDMxQkVCN0NFOTY3NDNGQzY3RDE3MkNGQzNDQTQyNjMzMzQKKzoxMEI0QTAwMEFGRkI2NjYyREZCMEE0M0ZDQjcxRThFOUJCRjdBREJGOEQKKzoxMEI0QjAwMDIyNUMzNTk2MjA5RDJCMzk3QjA2QzRDOTQ2QTQ0NzY0N0YKKzoxMEI0QzAwMEI4QjM0NDRCRDdEMURGRUE1QzVCN0IwRUQ3MzcxRjlBMEEKKzoxMEI0RDAwMDc5REQ0RjVGQkVFNjdBNjlBQjdDMkY4QkNCQzc4Nzc5NkUKKzoxMEI0RTAwMEFDNzYyNzVFQUY4NTJCN0NGNzYxODE2ODk3RjE3NjZDMkYKKzoxMEI0RjAwMDNGMzM4NTdDN0MzODk0REJBNUQwMDI1QkRDRjMzQ0VFRUIKKzoxMEI1MDAwMDE0RTNGRDIyQzczRjE5RjEyNUVGM0YyNUU0Q0Y5OUVCNjYKKzoxMEI1MTAwMEJGMURFRjgzREVCQjAzRjUxRUYwNjMyNDA1RkFBQjdFOEYKKzoxMEI1MjAwMDlERkZCRTAwNUJEQTQzNzVBN0JERjMyQTEyRjBCQUUyQjUKKzoxMEI1MzAwMEMzRjVGRDY4QkZGNzYwN0ZGMDlFOUZGQ0YzRDdBQ0I0MDYKKzoxMEI1NDAwMDZGOEQ0RDA2M0Q4QzdBNzc0MTJFNDNCRDBCRTNDRUM0MDMKKzoxMEI1NTAwMEYxQTFERjQ4MEFCRDk3NDBGMzYwNkRBMDhGNDFFMENFQjYKKzoxMEI1NjAwMDBGRjcxMjVENTY1NDAyOUY5NjhCRjNGMkJENTFCRTkyQjcKKzoxMEI1NzAwMEZDMTRDQjQ3NEQ0MjRGQzU1OThGNkY0MkI4NjJEN0UzOTkKKzoxMEI1ODAwMDAxMTJBMjM3RjFEQkI3RDhGRjM1MkE4REVCN0Y5MEU3QTgKKzoxMEI1OTAwMDFGRTQ5MDVEOEQwQ0QxRDZGMzQ5M0M0QjNERjg2MUEyODAKKzoxMEI1QTAwMDlFMkY0QzAyQ0UxNkYxNUUyRjlFQzVGOTUzRTk4NURDMjUKKzoxMEI1QjAwMEJFQzkzODYwQjVBMEJCNTU3QzI3QUZEMjVFQzVFNkYzRTcKKzoxMEI1QzAwMEFEQTI1RjZCNEU5MkE0Q0I2MzA4QTdCNDczN0RFOEJEQjgKKzoxMEI1RDAwMDgxRDMxQkRFN0I5Q0Y0NDc0MkNGN0Q2OTYwQTdFRTAyREUKKzoxMEI1RTAwMEZGMDdDRjlGODRFRkVDRjg1RDlGN0NDNDU4NkU1RjlCOTQKKzoxMEI1RjAwMDE2MzgxOERBRkYwRDM5QTI0RUJCQkM4N0FGQjcxNUMzOUEKKzoxMEI2MDAwMDc1MDhDQTFGRTgxREU1RUFGNEMzRDhERjAzN0FFRUQ3NTAKKzoxMEI2MTAwMDU4RUYwMUUzMjk1ODNGOTQ0QTZBQzA4QkZEMDFCRTlGNTEKKzoxMEI2MjAwMEQ3RTIzQjc2QkM2M0Y4MDhGQ0JEMUQzOTYyNUY1QzI5M0MKKzoxMEI2MzAwMDJCNDU3QURERjdFRTVGMUNGNzdBRjE3QzcyQkUxRkY3QkYKKzoxMEI2NDAwMDMzN0JGMDI1RUNFN0NDMEZERTIyRkZGRTk4Mzk1MkQ0OTUKKzoxMEI2NTAwMDZFOEZGM0RDMUNEOUI4NEU4OTNFQkZGRjE3QzYxMEZFQjMKKzoxMEI2NjAwMDFFNDU2N0Q3OTkzNUQzODEyRjY3NzYxOTdEMzhFNENDOEQKKzoxMEI2NzAwMDg3MkZCRTMzMDJGREU2MkUxM0FEMUI4MURGQjAwQUNGNEMKKzoxMEI2ODAwMEU3M0MyNkVBMDA1OUIzM0VGRTdGNTdEMDQ3RUUwQjk2QzMKKzoxMEI2OTAwMEZBNDlEQUZGNzlDQ0M3RjU1MjIyM0YwRkZEOTNGOTczQ0YKKzoxMEI2QTAwMDY5NUY3MDBEMEIxQ0MyRjNEMEJGNTgzMDkxRkNFMkI5M0EKKzoxMEI2QjAwMDJDNDhFNzcxQ0Y2QUQzOUY4NzFCN0I4RTZFRUNGOUI5NUMKKzoxMEI2QzAwMDk4ODA0NzdDQzU5RUEzRkJFNUY3QUU5QzJGOTdGNTJCOTIKKzoxMEI2RDAwMEIxQ0ZGRjI2RjhGMUNCN0VFQUNCNEYwQkZFOTVGNTAwRkMKKzoxMEI2RTAwMDREQjIxRUUwRDUyQkQ3MDMzNEM1RDQwMzQ0RkQwQzU5MEQKKzoxMEI2RjAwMDBGRjAzNUFGMDc3ODU1NUYwRkYwRTU5OEY4NzA1QzEwRTQKKzoxMEI3MDAwMDcwMzRFMTM5M0E3MUZCNERBMkZCNUYxNjVDNzk5RTREQjYKKzoxMEI3MTAwMDc4MkU0RURDN0RERjc2QkFERjVGM0Q4MjJENTdFMEE5QzMKKzoxMEI3MjAwMDlGN0E4Qzg0NUNEOUJGNDc2NzhGNkRCOURFMTgzRjJCMzkKKzoxMEI3MzAwMDg3OUUzN0M1RDQzNTQ0OUZGMzdBMDY5OTE3MDBCQTUyQ0QKKzoxMEI3NDAwMEZEOUNGNEVGNjJGN0MzQ0I3Q0JDOTQ5RjRGMTU2NkYxNzAKKzoxMEI3NTAwMDUwMUU2REI1ODgxQjdDNDNEMTFGRkUxNEZEMkM5NERGNTkKKzoxMEI3NjAwMDVCQkRBRjc1MDNBOEIzN0U3NDQzOTE1QTEwOTVBRkQ4RjMKKzoxMEI3NzAwMEY5MDA1RjlFRDZFRTNCMUY5MDJCQ0U2RkYwMzExRkVEOTAKKzoxMEI3ODAwMDRCMTQ3MjcxREYwRkM2MjU2MzNFRkZFMzg3QUI3NEZCN0EKKzoxMEI3OTAwMENEN0FGN0EzOUJBNTdGNjdEN0Q5NzMxNjYzRUY2N0VEQzMKKzoxMEI3QTAwMDdFOEJGQ0I3MUE0QjgwRjZCRDdERjZFQTBGQzhDRUNGNzQKKzoxMEI3QjAwMDYxMDExN0NBQzlGOTU3QUZDOTBCRkU1RkQ4NzkwOUNGMjQKKzoxMEI3QzAwMDFEQTEwNzRDREM2RjRGMjdGRjY0QUE4MEU3OEVCRERDMEMKKzoxMEI3RDAwMDdGMzQ1OEZDMjYxQUM3Q0ZCQzRFMTc4NUU2MUM1RTUwMzYKKzoxMEI3RTAwMEI2NzhFRURENERCREYwOTdEMDc5MTlBMzA1RkMwQTdFNDEKKzoxMEI3RjAwMDBGRjhCRDQ5NUNEOUNDQTAxQkUxOTZGQkY4ODFFQkRDQ0UKKzoxMEI4MDAwMDc4NkRCREMxRTdDNUVCMkQ0QTQwNjU5QUZEOURFMzU5QjIKKzoxMEI4MTAwMDczMEVCRTZGQjA3NDFCQzVGOTYyNzQyRTdDNDIxNDVGNDgKKzoxMEI4MjAwMEQ0NzY4OEY2RDIzQjJGREMzNzFCRUZEQkY5RjlDMjY2MDIKKzoxMEI4MzAwMDAxNDczMDU3RUM1QkI2MzAwQkNFM0JDMTFFRjk4MkQ2QzgKKzoxMEI4NDAwMEZCQzQzNTM0ODZGQkUzQTEwMjVFNDc5Qzg4RTcxN0MwNDIKKzoxMEI4NTAwMEI4NzZGQkQ5MTA0RUQ2Qzk5Q0I0MkZERkVBQkMxMEMxMTQKKzoxMEI4NjAwMEI4NDRGM0JCMTAzNUI5QzMzNUJGMEJDMTIyM0M1RkQ1MUIKKzoxMEI4NzAwMERGRjM5OERGOEQ0ODE1RjBCNTBBM0RFOUMxRjMwNTBCRkMKKzoxMEI4ODAwMEU5MUMwNUQyOTM4RjNCRTZEMDc5RTIxOUY2ODVCNDBFMTgKKzoxMEI4OTAwMEZENTREMjA0NUFBNzc0MjFFMkIxM0U3RTgyRTYxQzA0MTQKKzoxMEI4QTAwMDc4OUUxMUQwOUY3RjkwMzk0M0RGRjYwNEY1NkQwQjNCRjYKKzoxMEI4QjAwMDQ2RjU1QzRBMjRFMEJFOUMxNjNERTdEMTI0RjRDRDlEQkMKKzoxMEI4QzAwMDg5MUNBRTNCMTM3OUZDRDY5QUFCREY5NzE5OTBCRkU3ODIKKzoxMEI4RDAwMDkyQ0FDRjQ5MzhFN0IyNThCMEFFMDJGQzkzRDY1Q0VFQkMKKzoxMEI4RTAwMDlGN0MwNDk0ODYzODkxRkZERTRCRTkyREZFNDE2QkNBQTQKKzoxMEI4RjAwMEYxNzc0QzhDQkUyNTQwQTc2NTBFNkY4QjhBN0VERkREMEQKKzoxMEI5MDAwMEUyNzdCRkQ0MEVBQTU3RDg3NDVGOEEwRkVCNkI5NjU5QjMKKzoxMEI5MTAwMDlEOTU5ODA3MERFNUYyRkM0RjkzRDhBNzAxMTRBOURCN0MKKzoxMEI5MjAwMDBFREY2RDlBOUE0REVGQTU1N0Y1NTBGRUI0NjczOTIzOTcKKzoxMEI5MzAwMEJGQUEwRjlGN0UwREZDMEZGODdFMTZEQjc4N0U0MzhEMkQKKzoxMEI5NDAwMEFGMEJGN0VEN0FGQzQ2QUEzMzk2Q0ZCN0UwNzM4MDUzN0UKKzoxMEI5NTAwMDExN0M4MUY3NkZBOTg4RkUyRTUzRTFERUQyRkQ3OEZFQkYKKzoxMEI5NjAwMDI0MEIyQTNFOUU4RUY0MTJCRjRGMTNGRTdDRDNERUNBRjgKKzoxMEI5NzAwMERCODcwMzVDODU1REMzODg4RDA3RUUxNUVCMkZFOTA5MzYKKzoxMEI5ODAwMDYyN0Q5ODlGQkYxQkZCRkU0MDdDMUZEQUI2QzNERTdGNDMKKzoxMEI5OTAwMEFEQzc0NzA2ODhCQkYxQkIzMTM2OUFGNzExOTE3RjYyN0MKKzoxMEI5QTAwMDQyM0Y4Qzg4OTFCRjUxNTE3OUEwRTdBNUEyREQyNEVBREUKKzoxMEI5QjAwMDAxRjFDQzA4N0YwNTRGNkZEMDdCRTk1QzNFN0M0Q0ZFRUIKKzoxMEI5QzAwMDcxQjlCRDkxNDVGRkIwOUZBQTY4QkZBNEE3QzY0NjFGMjUKKzoxMEI5RDAwMDQ3RTUxMEE2NTg2NkYxQjVENkMzN0IwN0E3RjA3NUY0MDYKKzoxMEI5RTAwMDExNkE2NDFGQ0FGQjI4NzEyRDE1NTczNkIzOURGMEJCMzEKKzoxMEI5RjAwMEEyMjVGMjg2MjkxRjUzMkQwMTIzQjYyQjlDQ0I1QkIxQzgKKzoxMEJBMDAwMDlGOUI5NDA4NURGMzY2QUM2RTQ1MzVFRENEMkIxNEZDMjEKKzoxMEJBMTAwMDE2MUM4N0YyQjk2QzFDREZERkRDM0FEMkU3NzNDMkEzRDUKKzoxMEJBMjAwMEU5MzM3ODdFNzZEQTBDMEJENTRENEY1M0Y5Nzk0QzRDQ0YKKzoxMEJBMzAwMDBERTZERjA1NzI3NjU3MzVDRjBCNjNCQjVBOTM3NzkxQ0UKKzoxMEJBNDAwMEVCMjA0NzIwQkVEOTExQzczRkYwRTY3MUJCMjVCRjZGODEKKzoxMEJBNTAwMDEyNzUzRUYyNzkwRTFFRjQwQzAwMUFGMkM2N0Y5QzRCNTIKKzoxMEJBNjAwMEY2ODRBRkY3N0U5NjJCRkNCNDYyNTYxQ0YzRkIzMTVGNzUKKzoxMEJBNzAwMDkwMUVBOEZDNUQ3RjdBNDJGRjVDRTg4OTY5RkUyNzRDMzYKKzoxMEJBODAwMEU0REYwQjdEMjFGNTcyNDBENDJGNzU4OTczNTRERTFGREUKKzoxMEJBOTAwMEMzRjFGRTVFRTUzQ0QyMTc3N0IyNjZEMkU3NzdCMTkwOEMKKzoxMEJBQTAwMDA5RjFEQkFCRkYyNzY4RkMyMzE4Njc1QTQwRUYyRjRERTUKKzoxMEJBQjAwMDlGMTFFQjU3NzE3RTk1RTNERTFERDQzRjlGMkFGRERFN0IKKzoxMEJBQzAwMDA5N0FCRkI3RkFGQjVGQTc5MDVEQ0M3Q0FFRTFGMjgwNEMKKzoxMEJBRDAwMDY4OUQ1MjUzNEM5RDUyQTNBODUzNkFEQTNERkY2MDg2N0QKKzoxMEJBRTAwMEE2NEVBOTY5MkZBRjUzNkFEQzdEQjUzQUE1MUU1QTU3RjkKKzoxMEJBRjAwMDNBNjIwQUVGQzNGNTk2MjNGMzQwMjQwMENFRkRBMkFFQ0UKKzoxMEJCMDAwMEU1MDBENkI1OTQ0NUY5RDIzMTk1RTc1RDgxN0Q2OUZEQjMKKzoxMEJCMTAwMDI0Qzc2OUYzMjEzRkI1MTlDQTI4NEZEQjk2RTRGMDY5QzEKKzoxMEJCMjAwMEYzQTIyQjVBODBFRjM0Rjk1OTU5OTc3NEE0OUZCOEI4RUYKKzoxMEJCMzAwMDM4OEZDN0E5NkIxNTlFMjcwRkRENkRBMTM4MzBBMzMwNTQKKzoxMEJCNDAwMEEwNUI5N0M4MzBCMkEzOTg2RkZDNThGODQxNkI0NTFFQjQKKzoxMEJCNTAwMDA0RDdGNTg2QzEzNUFDNzBGRkE2Rjc3QkRDRUY4NEY5MUUKKzoxMEJCNjAwMEM5MTg3RDk0OTFFNkEzNzU4MThDRTQyMTk0REY5RkIxN0YKKzoxMEJCNzAwMEI3NzQwQkU5MUJCQkQ1ODdGNUZDQjJGRjE5QzE0RDJBODEKKzoxMEJCODAwMEQ2MEIzNUVERERBNEQ2RDhBMzdDMzcyQTRGRjBBQjhEOEMKKzoxMEJCOTAwMEQ5OTA1RjdCRjM3RDNCMTMyOERGRjc5OTNENzA0QjFFRjcKKzoxMEJCQTAwMENDQTdERTFDMTlDQUY0RkM0Q0Y3RkJCMzZCNzMwNUJGQzIKKzoxMEJCQjAwMDk4QzYwNEVFOUUwREYwOUM3RkM3Q0NGMzVFMEYzMzkyQzcKKzoxMEJCQzAwMEQ3REZFQzQ5QTE3Q0E1M0E5NTkxN0Q1OTVBQzlGOEVGODgKKzoxMEJCRDAwMEJCNkM1MkM4OUYzQjk5QzJDRjBENUEzQTg1OTExRDNDMTAKKzoxMEJCRTAwMDk3M0E5RUU4Mzc4Rjg1MEZFMUI5NDBCNTFCNENCQUYzMDEKKzoxMEJCRjAwMDdGMUVEQ0EyNkZEN0IzMEVCMjM3RjVEQkZCRjAzM0U5NjMKKzoxMEJDMDAwMDJEQTkxRjFCOThENzg4N0FBOEIxNTNGRjNEMUJBOEQ3MzEKKzoxMEJDMTAwMDhGQTVDMjFFMEM5QjM2QjZENTA0REYwRDMzNzBCREM1OTMKKzoxMEJDMjAwMDFFRjY2NTRGQTVCOEJCOUFEQjUxRjYxQzlEMzc3NURFMzUKKzoxMEJDMzAwMDcxQ0FDOEU1OUNFQkUzRTE1MUFEQTlCMzRCQzM4NTdGNjUKKzoxMEJDNDAwMDc1QjNDQTdGMTc0MUZBNEJDM0M1RUYyNDFDMzBFQzM1REUKKzoxMEJDNTAwMEQyNkZGMjA4NzhDQUM1NzdEMjRGOTNGQTVBRDJBNTcyM0EKKzoxMEJDNjAwMDI0RkVDNjAzNDQzNzc5QzJERjI5NjAwNTQ4NTdFODlGQTAKKzoxMEJDNzAwMEU0NDFDMTQwODkxRjcxNENCRkI3MzA0QThDMDc3NEU3NUIKKzoxMEJDODAwMEU3Q0QxOTJDNjFFNEEzNjU0QTMzRTk2OTBCMTNGQTVBMkQKKzoxMEJDOTAwMDA5OTI1RUZFQjc1MEM4ODg3QzcwMDM2QkJFMDM3RkJGRkQKKzoxMEJDQTAwMDczQjRBNUNCNDY3RUE5M0RGODY4REVGMDI4OUZCNEIyRjgKKzoxMEJDQjAwMDQ4REUwRTQ1QzcyRkY0RkM0Q0NBRUZFMkYyOEJCNDJCRTIKKzoxMEJDQzAwMDkxRjdCOUJGMzE4OTgxMUYwOEUzRkEzRkUwN0VEMDAxQzcKKzoxMEJDRDAwMDg1Qzc4QkUwMEYxRUMwNzhGMTc3ODY4OUM0MEYxMzYxOEEKKzoxMEJDRTAwMDFBRjhERTM4QTc5RUNFQjdCQUY1RUQ4OURFM0U3QzYwNDUKKzoxMEJDRjAwMEQ0RkVGRTA0NDg5QzhBRjA0QzJBRDZCRkU3OTdGQThEMDIKKzoxMEJEMDAwMEU5RjU1QjNFRkI5QUQ3QzEyRjNGRjQ1RENDMUJEODE2RkIKKzoxMEJEMTAwMEIxNjJGNDYzQzA3M0Y0QzVGQjdERDE2REMyNUVDNDU5REEKKzoxMEJEMjAwMDM3RDk5Njk3RDE3N0RERTRCQ0M4RkZERUM4QkFFNzZDOTcKKzoxMEJEMzAwMDU3RkFGMkNEQjk4MzhCOEM2RTBEN0Y0OTdFN0U1OUQ0MzQKKzoxMEJENDAwMDU5MjhBRjhCRjVEOTcyOUUyRjhDREE3OUNFMzcxNUEyOTAKKzoxMEJENTAwMDc1MjNGMjFEQkNGRjk2RTQxN0YxM0IyMTM3RURCNjQ2ODMKKzoxMEJENjAwMEYwNzc3MDRBNDUzRjM3MjJGRjk0NDVFRDdBQzQ2MEY3N0IKKzoxMEJENzAwMDlBMEI5MDRGN0M2RDQ2NjM1RjdGREU5NUVBMjU3RTE5QjYKKzoxMEJEODAwMDY2RjAxM0JGMEM2N0JFMzRBNEQzNDg0QjQ3QUI4QUYwQjAKKzoxMEJEOTAwMEVGMTk5MTFEQjRFQkY4RTMxREUyMEYwNUY4ODNGMjU5OUEKKzoxMEJEQTAwMDdERUNBM0ZFNzkwQ0ZGNDgzQTFFMTY3RUY0QURDQzRCMTkKKzoxMEJEQjAwMDcxQzQwNEUxNDc0N0YyMzlGRjU0RDlFRjU0RjFGQjM3MUUKKzoxMEJEQzAwMDBCNzhCRTYxMkMyRTI4RDIzRTUzQkQ1REFDQjJFOEY5OTMKKzoxMEJERDAwMDIwOTZCRjYwNDQ4Mzc2REM1ODdFRUI4RjZGMDYyMERGQjEKKzoxMEJERTAwMDQ4QkI5ODc2NzVCRTM5REYzRkRGOUNCRjEyREZDNEYyRDcKKzoxMEJERjAwMDhCRDQyQjNCQUNDRTJBM0JFNkI3NkExNUQyQzdDM0RFNDkKKzoxMEJFMDAwMDE5RDg4QUVENkIxQUYyQTkwRTY2NDc4QTZGM0YzRDZGMEIKKzoxMEJFMTAwMEU2Q0ZDQkJCRkM0NkFDOTMyOTVDMjg5RUU3MDdBQUIwRDMKKzoxMEJFMjAwMEREQjQ4OEFGNTMwQzNGQzJFQjY4MDYzRUNDOUY5NzJFMjMKKzoxMEJFMzAwMDY5REU4RkZCRkE5QTQyRkNGQjk3QkY1ODQ2RkI5QkMyMTgKKzoxMEJFNDAwMENCQzRGNzk1RUQ1NUQ4NkU2QUUzREY5RkM0RjVBNkVCM0EKKzoxMEJFNTAwMEIxRkUyRERDOEFGNzA3QUZDQUY3RjFCMDk0RkJCNUI3OTYKKzoxMEJFNjAwMDA4M0VEREExRUNEQzRGREZCNUYzRUZFNjFFQjIyNEQyRDUKKzoxMEJFNzAwMEVGMDYwQUJGRjU2NjMxQ0Y1QjM2RjA3OUE2N0Y3QTFCRjUKKzoxMEJFODAwMEZEOEVFOEVDOUUxMEY5NEY5RjFCRUFFOTc3NkFGQThCNkEKKzoxMEJFOTAwMDNGMkI5NUY2MUNCQ0RFOEFGQTA0MEZERkIyMDA1RjE3NTkKKzoxMEJFQTAwMEYwRjVDOENEMzBDNDc1MDNCODNGMjhEN0YxQjBBRTQwMjcKKzoxMEJFQjAwMDVCNDc3MEREMDAxRTE3QzlGNzVDQTk3QzFGMUE3QkRBOEYKKzoxMEJFQzAwMDQxRjk2MkI5Q0UxODU5QzcxNDk0MzM5Q0EzRjAwM0UyMjgKKzoxMEJFRDAwMEFFM0JERTVBRDg0Q0VCOERCNzBFOTBFQjhEREQyQTlFMzMKKzoxMEJFRTAwMEEzNUU3QUY5MkZFM0UzRTU1OUNBMDZGMDNDRDAyOTUxNjUKKzoxMEJFRjAwMDI3MjFFRkQ3ODZGM0U5NzdDMTc2MjA5M0QwM0VGQUYwNzkKKzoxMEJGMDAwMEVGQTkyRENFMDU2NzYyREZEQThFN0NERUY2MEZEOEYwNjIKKzoxMEJGMTAwMEQzQjYxQ0MwQUZBMTU5QzU3M0Q0NTg5RTQyRkJGNkZFRTAKKzoxMEJGMjAwMEE1OEI0NTkyOTNGQUMyN0ZBQkNBMjI2NkJFRUY4RUUwMjQKKzoxMEJGMzAwMDlGRDM2QURFQ0NGNzRGNzJCRDM0NERBQTlERDE4MzQ4QTIKKzoxMEJGNDAwMDRFRUYxNDc0RkFDRTAwRTE3NzBDNjNDMzUwREY0QzEzNEMKKzoxMEJGNTAwMDc0QkJDQjAyN0UyQkU5QjU3NjUzOENGQzRGMTk4MEZFNjcKKzoxMEJGNjAwMEM2NTNGREZBQ0ZGQUU3MzFGQUExNTY4QzNCNDdGOENEMUMKKzoxMEJGNzAwMEYzRjBGNzQ3OEQ3OEJFM0JGNzlGNEYzREM1RkRFNjA3RDEKKzoxMEJGODAwMDU5MDdFNTIzQ0YzRkNERkRDNTA2OTgxRUYyNEI5RkRGMzUKKzoxMEJGOTAwMEU3REFBNjZGMzc3NEM0RkUyRTZDODhGQUVGRjNCQkFCRkEKKzoxMEJGQTAwMDI1M0NBRjdCRkVBOTg2MEFDQ0VGRDVBRTdGODdGMkM3RDIKKzoxMEJGQjAwMEI1NTI1Rjg0RjVGQTAyMUMwQ0FFMkZENjVENEI3OTFEOEQKKzoxMEJGQzAwMDgzODVGRjJFRTYzMEQwMTc1ODZGMzIwQ0VCNDhBMUZGNjcKKzoxMEJGRDAwMEExNjJERkZFNzJGQzg0RUZENzdGNjgwMEU5OEQwOTU0MEYKKzoxMEJGRTAwMDY3NEFGRDE5Njk3REY3MURCRjM3NEExRjY5Mzc2MkY1M0EKKzoxMEJGRjAwMDQ1QTlDQ0Q3MEM0Q0E1N0M5NkQ0MUZBNUMyNEY2MTEzODQKKzoxMEMwMDAwMDYyRTNDNzI3NDkwRTg3ODlENjRGMDZFOEUzMjBFOTc3MjAKKzoxMEMwMTAwMEMwRjdFNDc3NzQxOUVDNjE4MzQxRUI2Nzg0NDkyRUNCNTgKKzoxMEMwMjAwMDJDNjAyRjQ4OTQ3QzE2MjZGNkZGQzdEMEY5NzFBMjczQjYKKzoxMEMwMzAwMEZGNzE5NEZFNzkwQzFGQzgzOEE2NDJGMEMxRERDQzRGQzkKKzoxMEMwNDAwMEYxRDEyRUMxMDdFRkJEQ0Y3RkJGNkQ5QTdEMjFGMUUxMDgKKzoxMEMwNTAwMEZCMUY3MEJGNTNDNjUxREYzRTdFOEFGQzQzRjE1MzJGNTYKKzoxMEMwNjAwMEREQURFMDRGREFGMDc3MjgyNjBFNUE4M0VCRTQ5RDU2REIKKzoxMEMwNzAwMEZFN0JENTBBQTdCM0VCRUUyMzc5REFGQ0UyN0JGOEJCQjMKKzoxMEMwODAwMDJCOUFERjczNjg5RDk4NjBDMTc1QzQ1NjEzOEYyRkE2RDUKKzoxMEMwOTAwMDRFRkFCMDYyQTY0NjdGMEM0OUFCREM4NUY4NUFBNjc0MEUKKzoxMEMwQTAwMDdERUY0RjE4NkZCQzI1Q0U0RkREOUI0MTc0QkZEMEM1Q0YKKzoxMEMwQjAwMEVGNUZEODcwOUQyRjA0QjdCRjM0ODlGM0E4OTRFNjM5OTkKKzoxMEMwQzAwMDU4MUEyNUUxOTgyMzdFQTc2NUFFMzFGQzVBMzdBRUM3RDIKKzoxMEMwRDAwMDJBRTE1REY1MEFGREFFQ0EwMUVDQkZDRTEwMzFGM0JDMUEKKzoxMEMwRTAwMDVFMTdFNUU5NjVGRkZERTcyOTQzQTRDRkNDNkY3MEZCNDAKKzoxMEMwRjAwMEQ4QTMyNEZBNzg5RTM3QTRGQkJEOUUwMzVFMUU2RjU1MUQKKzoxMEMxMDAwMEU0MDZCQTA2MEM4RkRBQkZEOEJBODM2M0YzNkZBNTdENTUKKzoxMEMxMTAwMEE5RkZDNUZDQzlCODJFQUFBOEZDRjc5OTYzQzdDNTNBMDAKKzoxMEMxMjAwMDgzQTU5QTNDRjUzMTZCRkNGNTgzOEY4NDlFQ0Y0MzVDRUQKKzoxMEMxMzAwMEMxRjg4QkIyRkQxRkUzM0M0Rjg5QjhGMDk0NTgxRjNCMDgKKzoxMEMxNDAwMDk1QzREN0NCNEUwQkZEOUNFNzE1RUI3OUUyN0E0QUFDNTAKKzoxMEMxNTAwMEE3OUQ0QUQ1Qzc5M0YyM0Q4Mzk3N0Y3NzYyQjEyNUIwRkIKKzoxMEMxNjAwMDU0NDM1N0VGQkE4NDY2Q0M0QjY0MTQ4QUJBOTI4NThDRDgKKzoxMEMxNzAwMEM3NEY3QjUyNzRFNzI0MzhCQzk1NzlERTBDN0M0RjlDMEEKKzoxMEMxODAwMDMzQjA4N0RCNjU1Q0M3QzY3NUU2RjU1OUMxNEI4OEI3MjgKKzoxMEMxOTAwMDQ2MkZGM0UzM0EyREYzNzY5QkVGQzBGNTRBQjEzRkY3MTQKKzoxMEMxQTAwMEJDRTA5QkYzNTY3RTk1NzAzOUJDNTNGMkJDODhFRkY5MjYKKzoxMEMxQjAwMERENDREN0RFRjY5NDZFRDI5N0ZGMDcyRUU0MkM5NzAwNkQKKzoxMEMxQzAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJENTdERTAKKzoxMEMxRDAwMDA5N0M1NEQ1RjlFOEI5NzM2NzBCOTkwOTkzOTA0MDEwMUQKKzoxMEMxRTAwMDg4OTM4RDI0NjQ2MUIyNjFEODY0OTI4MDhBMjIyNjJDNUYKKzoxMEMxRjAwMDE1NjUxQjUwQzI5NjREQTBGREE1RDVCRTBDMDYxMTc5NDQKKzoxMEMyMDAwMERBNDI2QjVCRkNCQkJDMDFDMTZBQjUyNTYyQjBCMTI2RUEKKzoxMEMyMTAwMDc2NTQ0QUExRDUzQTIyMjg2QTZBNDc1NEQ2OTA0NEEwNTcKKzoxMEMyMjAwMDU2N0ZGMkZCRkJCRUVGM0JFNzY0RTZERTRDRDg5RUZBOUUKKzoxMEMyMzAwMERFNEJGQzc5NzJFRUI5RjcyQ0RGRjlGNkYzN0QwN0JCMjQKKzoxMEMyNDAwMEIzMjJDOTk5QzA1OEY3RUNBMDk5QTk4Q0Q5NjVGRDIxRjIKKzoxMEMyNTAwMDVFODcxRjAzMUJDQ0Q4NjJGQ0NCMDlBNUQ1RTY1N0YzM0MKKzoxMEMyNjAwMEUwRUYwREE2Q0U2MDI2QjVCMzZGNTIxODUzNTRFNjY1QzUKKzoxMEMyNzAwMDcxNTBDOTY0Q0UwQTNCM0U5REUwMzg5QTBENDUxNEI0MTYKKzoxMEMyODAwMDQzM0Y3NTY2REIwNjY1MzRCRDVFNjE4NUZFRTY4QkZFNjkKKzoxMEMyOTAwMEQ4NzBCQjExRkI5RkM3QkI2MkYzREJGNjdGQTVDNDMwMzAKKzoxMEMyQTAwMEI2QzBDQUQ2MEY4M0Y2ODU2RDQzQ0MzMDAzQjYyQ0M2MTQKKzoxMEMyQjAwMDNCRDI5MTgzNkY0Qzc2MUM4NTcxMTU2RkI0RkE0RDM0NjcKKzoxMEMyQzAwMEY0OEQzRjkzRkE5NjhDMTlEOTUxMzkzRjVBODc5NzMxOUIKKzoxMEMyRDAwMDVDRDc4ODAwQUQ2QjYzNjk0RkQyN0YxNTMxRDZEMzZFQzIKKzoxMEMyRTAwMDcxNkM4MzcxNkFEQUZFN0E1ODgxNzVENUM4RjVCNTY4QzQKKzoxMEMyRjAwMEQ3OTdFRDU0MTgyQkM2OUFENUY3QTk5NUIxNUI5OEMyN0MKKzoxMEMzMDAwMDA2NDIzRkFEMzY0RjM2QzJBQkM2MUFBNDc5NDI4RkU2MUQKKzoxMEMzMTAwMDhBNUMxOEVERkUwOUIxQjRGRTIxRjAzRENDRTdDNTQ2QkMKKzoxMEMzMjAwMDM3RkJDNDE0ODJFNzJBMDc1RkZGMTRCNUJBREMxQ0NGQzEKKzoxMEMzMzAwMEQ4OTkzQjk5QzMwMjhGNTZFREJGQTNDOTBBRjU1NTBGOTMKKzoxMEMzNDAwMDMwMDcxRkRENkQ2MDYzQTA3RjAxQUZGRUU2OTc1MDYxOEYKKzoxMEMzNTAwMDYwNEVBQkE4RTNCMDczMDYzMDY3NjZBODNFRDQxM0E3NUYKKzoxMEMzNjAwMEE5NDNCRjBDRTdCMTUyRjQzQjZDRDk1NTlBRUY0N0Q0QkYKKzoxMEMzNzAwMEE3NjhERUJGQkE2MTk0QTYzREQ5NUJBMEE5QTc2RTE4RDUKKzoxMEMzODAwMEE3NzkzRjdENTM5OUE2OUVCMUU1NDZDREZCRjkyQzc1NjMKKzoxMEMzOTAwMDIwODM3NUQ2RUQ1Mzk5MEY0MDlCRTU5QkExNjlDRjdFMTUKKzoxMEMzQTAwMEZBNzZDREY3Qzc1OEZEQUYyN0MwN0IyRDUxMzE3OTBDRjgKKzoxMEMzQjAwMEYwQTgyOTJBNjYxQjk2Q0NFQjBFRTQwMDdDRUUxNEVCNjkKKzoxMEMzQzAwMEM4NkQ1RUFDRTlFNzU0Q0M3NUZCNzA1RkVGMEM1NDRENjMKKzoxMEMzRDAwMDYzODA1N0EzNUI1NzY4RkE1REE5NTZGMzdEREI2NDNBMjcKKzoxMEMzRTAwMDEyODRFRkVBRTExN0UxNTlDMDdBRjYwRTAzRkNBOEY1RDIKKzoxMEMzRjAwMDI5MkUzRjM0MkZEREMyREJFNTc3Q0I1QkI3RDI3N0NCN0QKKzoxMEM0MDAwMDdEREFFNzJCOUZENkQ2QkQ2NTJDQjNERTA2RUI3NERBNUEKKzoxMEM0MTAwMEUzOEYwMkJFQjJBQkQ4NTVERjg0RDE1NTA4MEZFMDI1QkIKKzoxMEM0MjAwMDE4RUZDQzYzQUFDRjkyOENGMEM5RjhDRDA0ODI4Rjg5MjMKKzoxMEM0MzAwMEY5OUM3REY3RUIwQzYzMkUzRkJFRkY5Q0RERTU4NUZBOTIKKzoxMEM0NDAwMEQyRkQ3N0QwN0MyQzg5NUEzQzg4NzI2QUYxMjAzQTUzMEQKKzoxMEM0NTAwMDhCMDc3Njk3NzZERjA3OTY2OEY3NUQwRkRGNThGN0E4QUEKKzoxMEM0NjAwMDBCQzI3N0QwMEQ1QUJDOTA3MDJEODFERjZGMTNBRThGNDkKKzoxMEM0NzAwMEU4RTA1OUI4QzdERDY0MjMzOEIxNTlENjMxMDgzRjNFRUEKKzoxMEM0ODAwMDVGMEJBQjUwNTkyQUZDMUQwRjdDMDY5RUJCNzgxN0VDNDYKKzoxMEM0OTAwMEI0QzNFNjM1MDBGRTNDRTM1NDhDQzQyNzQ0M0ZGOTQ2NjAKKzoxMEM0QTAwMEZGQUJCODlFRjU4QTk3RTE3NzUxQ0M5Nzg4RkNBMkE5OUIKKzoxMEM0QjAwMEM0OUZFNDg3N0QyOUIwRDZFM0NFQjFDRjZDMTVCRjQ3Q0EKKzoxMEM0QzAwMEJBQUYzNkZCRjNCMDVERjZGNzk5Q0Q0M0NGM0I5NTM3NjYKKzoxMEM0RDAwMEFBMThBQzk3MTlGRDc5QzQwRkFEOENDNjk3NzAxQzMzQTAKKzoxMEM0RTAwMDgwRTNGMTRBNTY2MUM2NzE1RTE0RjhGQ0U5RkJDQjA4QTMKKzoxMEM0RjAwMDhFNTVBQzdFQUYxQkM2M0JGNTAxODdFRjcyRTZBNUY3MDQKKzoxMEM1MDAwMDk2NkNEMkMyQTEwRkZDNzQ3MDAzQjQ3MUUyQjg3NTYyNkMKKzoxMEM1MTAwMEREMkIxOEYzMTk1MkZCQzI1MzY5NTNGQ0Y2M0MwNDQzNUMKKzoxMEM1MjAwMDlCRTREQjlFNkYwQTM5REEyMTNDQzdCMURFMUZFMkRGRjQKKzoxMEM1MzAwMDEyQkVGMDgyMTJDRTlGNzAzQ0M3RTBEMDc4MTI5RTkyNUQKKzoxMEM1NDAwMDZGQzk3MTJDQUM1RTRENDQzQUQwRjEzMTk2QTlERDI3MEMKKzoxMEM1NTAwMDg2NEM2MjBDRkQ0NzNGN0YwMjFFNkE4RDEzODMwREM2MTkKKzoxMEM1NjAwMDdFNzBGMjhDNUQyM0M2NjE4QjNEODkwODI3MkJEQjQ0RUUKKzoxMEM1NzAwMEZCQjc1MTcxNkQ1MDYxMUNGNUVBRTQyNjA2RjAyQzc0OEUKKzoxMEM1ODAwMEI4NTVEQ0FGNjIxNjk4OEJDRjRCQUNDRDRENDZFOEVBODAKKzoxMEM1OTAwMDZBNzZERTQxRjgzNEU0QTk5QTZGMDY4NUQ2QTFDODc1OUIKKzoxMEM1QTAwMDc5MTU2Njg0RkE0NDUxOUZFOTU1ODI4RjI2RTM3QUZFMTUKKzoxMEM1QjAwMEZBMTU4RTNCNTE5NDMzQjE4NEZEODM2NTdFRjIyMTdDNjQKKzoxMEM1QzAwMDNDNDE3MThFQzBGMTY2RkMyOTIzMDFGMTY2QkQ1MkNGNUEKKzoxMEM1RDAwMDc0RjMzQkZDMzJGNEEzMUE3QTA2RTE3QjUzOThDN0M4ODQKKzoxMEM1RTAwMEU1QUU4RkU0Q0Q1Rjk1MjBDREZCMDdDQzdEMUY5NjUyNDUKKzoxMEM1RjAwMEJFRDVCMkU2RUJFNjQyQkRCNjA1RTQ1NjBDOTY1MTdFREEKKzoxMEM2MDAwMDE1NEFENkFBODMyNzMzMUVDMUJBMDE1NjgyRjhCRDEyMzUKKzoxMEM2MTAwMEVCNzJERjkzNDNFRDU0NTdGQkQ2RDdDMjFBODZDNjVENDMKKzoxMEM2MjAwMDVDQkUzRjk4RUMxMEYyQjE2NzI0NkZFN0ZDNkQ5OTgwMTcKKzoxMEM2MzAwMEQ3MzIyOUI3N0NEQUY5NzVFMDFGNDMxOUZCOEIxOTYwRjMKKzoxMEM2NDAwMDUyODA3NDY0RjUxQTA2MzI5Njk4MEM3NDg5RjNDQzYzQTAKKzoxMEM2NTAwMDc5RDgzRkQwRDVGMDY0RTg3RjcwMUNEMEExMTI0RTc3MTYKKzoxMEM2NjAwMEZDN0REOURFODdFRTc0RUI2N0Y1QjBCOTYzMDFERUY2QzkKKzoxMEM2NzAwMDIyQjMwNzU4RUUxREUxRUJCRDA0Nzg0ODNENjIyMUJFQjAKKzoxMEM2ODAwMDBCRTM3REUxNzQ1MjU5MzNBMEUzNUQzNzM2MTcwNTkyMTEKKzoxMEM2OTAwMDUwRkVDQjdEQUEzMzMzNEYzM0VBMkRDRDA5MzRBRTdDMjcKKzoxMEM2QTAwMEVFNEUzNjA4NzgwMTNFNUUwMjlDRkFERjg3MzREMjg3NzAKKzoxMEM2QjAwMEU0M0U1Q0FBM0UzNDdFMTA5RkJGODRERjc1Qzk4MjBGQzIKKzoxMEM2QzAwMDg2RTA3REEzMDY5RTBDRTA5OUFCODFGNzhEOTFFMDJENkQKKzoxMEM2RDAwMEUxNzFCQTM4RjAxNEVFOTM2QTNGMzgxOEUxM0MyRkIxOUIKKzoxMEM2RTAwMEUyOTY2NDAwQzE4OEMzQzFBMzhBMDFFNTVERTc1MzhGNjgKKzoxMEM2RjAwMEEyRkM2QTU1NUQ0OEMzQjUxMzM5N0ZBQjdENDkyNTkyQ0QKKzoxMEM3MDAwMEVGNkFCM0Y4MTRGODdFNTlFQkVCQTQ5Nzc1MzYwMjAzODEKKzoxMEM3MTAwMDM1RjUwRjlGREU3NUVBRTBEQzE3MEU3Q0ZGRTQzQUFBRTAKKzoxMEM3MjAwMDc0NzhCNkUwRURCM0Y2Rjk0RTVBREY4QUU0ODQwQkFFQzYKKzoxMEM3MzAwMDVGREIyRUQ2N0ZFQTQ3NkM2MTQ1MEVBRTJGNjc2MDMwMTcKKzoxMEM3NDAwMDI3MzQ2RTI2RUUzN0JDRkZEMzk4OEE3QTg0NUJEMTNCQzAKKzoxMEM3NTAwMEMzNjMxMDJFNTNENEI2QkQ1NzIxMUNENjI4MkUwQjhDODQKKzoxMEM3NjAwMDNCQzlDMkJDNTFCMEJGNDMxQkNBRDkyN0IwNDcyNUMxODIKKzoxMEM3NzAwMDdBOTcwM0UwOTEzOERDRTY1MjAxMUUxOTNGNTQyQjdDNzYKKzoxMEM3ODAwMEQwRUYzRkQ3QUM4RUJCMDNDQTkzOEQzMDc0M0EzQzU3ODEKKzoxMEM3OTAwMDBDMTU4NDY3NkNENzQ3M0Y4MUZFMzJFQ0YzNUMxQkExMUMKKzoxMEM3QTAwMDM2REYwMkYzODE3MTkyN0YxNEVENEYwNUZFRjA2NzMzOUYKKzoxMEM3QjAwMEIzMjI5RDk5NTJFQTBGNEM4NTdFN0I2MjU1MTdFQUJGRTIKKzoxMEM3QzAwMEYxMkE5QjhDNzgyNUUxMUMxRkNERDcyMTlGOTczRUJFNzcKKzoxMEM3RDAwMDVEMDlEQTQyQ0YyNzM1RjUxNEFFODJGMkU2NjQyN0FENjMKKzoxMEM3RTAwMDRCQUU3MzUyNzk0RjIxRUEzQjEyQ0VGMUE5RkM3RDY2MjQKKzoxMEM3RjAwMEVDNDk5QTExNDYxN0Q5MDIxRTFEQThDRjAxM0M2QjEzQjQKKzoxMEM4MDAwMENDRUI1MUZFNzU1OTc5OURCOTMzNDlFRjVENjNFNTc0MDEKKzoxMEM4MTAwMEQxMTE5NUU0NDNCOUQ4MDE2QjBENTA3RjdFM0JCMzg1QjAKKzoxMEM4MjAwMEYxQzMyOEY3QzA2QjYwRERFQzZEOTVFRDgwRTI5Q0MzMzEKKzoxMEM4MzAwMDNEMzA5NkUwRTFFMEZEMDgzREFCOEJCMTFCMTA0RTZCNDcKKzoxMEM4NDAwMEE2OTYwRDg5ODMzMkExODlDMzQ3OEYyNzNCOTMxNTlBRkEKKzoxMEM4NTAwMDVGRjU5NzQwNzA4NUExRTdENTQ2QkZEOTYxQzNFNzY2MEMKKzoxMEM4NjAwMENERjMyMzAwMzdBRjI1NTQ1RjdDM0NFRDNBNDZGQ0M1NDEKKzoxMEM4NzAwMEI1MUVERkJGNjM0MzM0RjM4NkU5NTUyRDYyMUVGREMxNEIKKzoxMEM4ODAwMEE1MzZENkM4OEMwMDhGNUE4NTU1NUNFOEJEOTdGRjVCRUUKKzoxMEM4OTAwMDI1RjhFQUU3RkZBRUUwMkYwOUU1OTFEN0Y3NjYzMkI3NTIKKzoxMEM4QTAwMDY3Q0FFRjlGRjYxQkQ0M0I2QjAzMjY2NjgxNDc2QjVFMUUKKzoxMEM4QjAwMDJBMURDMjIyRjRENzBCRTcyRkM3MzNERkEwQjBCQTMxNEQKKzoxMEM4QzAwMDQ4RjBBOEZERjI1QTdBNUU3RTdGQTcxOUYxMUVGQjcxMkYKKzoxMEM4RDAwMEMyRjMzNTUxRUUyMUFFMEJDMDM5NUJDMEI5RjZDQjU4NkYKKzoxMEM4RTAwMEU2MUQxNEZFOUNFMzU1QThGRjc4NkFGRjFEMDIxMEYwQjgKKzoxMEM4RjAwMEQ2REJBQUZBNzZDMEE3QkZEQjY3Qjg2MTVCODRGOTdFOTYKKzoxMEM5MDAwMDJERDYzRjJBQzE0OEY0OTJFRDY3RUVBRDExQzY5N0VGRTAKKzoxMEM5MTAwMDBEOEUwMzNFNkRFMzcwQUVDQ0VEM0JCRjk2QjJFMDAyRjAKKzoxMEM5MjAwMDlDRkYzNTkzOTkzQkQyNzhBN0M1N0I3MkRFMkQ3MUMxRjAKKzoxMEM5MzAwMDJBODFGNzIzMkJFRDYxNzU4Nzc2MUZBM0M1RjgyRDM3NjQKKzoxMEM5NDAwMDA2OTNCMEZGQUVBOTZDNEU3Mzg0RkVFNTdFOEYzMUQ2QTAKKzoxMEM5NTAwMDJCMDg4RkQyNDQ0RjA2RjI5MUVBNUJBMTAyNzgzMjY0MzEKKzoxMEM5NjAwMDlFREZFMEM5MDlEMTVEN0ZGQjFFODIzN0Q4NUQ4NTE3NDgKKzoxMEM5NzAwMDgyQjc5OURBNjU3RjI3MEUwOEJBNjQ2RTlCMDJGNEI0MTkKKzoxMEM5ODAwMDQ4QzhBQjQ1REI1NzRFMDNERUQ5NkJCRjlDRDgwMkY2RDcKKzoxMEM5OTAwMDBCMEM3MTgyRDVCRjZFQzdGQTI2ODVFQzkzQzUxRUM2RjcKKzoxMEM5QTAwMDFBODBFRjU0RUQyODVDOEY2MjZCNTEyMjYzRDdDNkYxNzkKKzoxMEM5QjAwMEU3Rjc2MEI5Q0UxNDkyQjNGNDdGMzcwQjk3OEI3MkZDMTQKKzoxMEM5QzAwMDNCMUZENEVBQURDQkQ4ODM5RkEzREU3M0UyMDBFNzBGMTEKKzoxMEM5RDAwMEEwOUU5MkZENURGNUIwQjZCRjY1REI2RjNBODZGMzVDNTUKKzoxMEM5RTAwMEE2RDM3RjMyNTBDMTAzRkQyMzM1NDVEODEzNjNEODE4MzEKKzoxMEM5RjAwMDk0MDNBQjc2OUMzNUM3MzhGQkE3ODM5MzQwRUY2OUU5NzYKKzoxMENBMDAwMEM4MkYxRDU0OEU0OTcxOEY0QTgxRkRFODdFOUJDRjczREMKKzoxMENBMTAwMDRBOEEyNzJGMDVGRDBENkZGMzc5OURBOTNFQzNFNUM0MTIKKzoxMENBMjAwMDYzRjEyNDlGMkNDOENDRTE0RkNCNUNBQkFGMDlFNjcxMUUKKzoxMENBMzAwMDNGQjA5MzI4ODA4RkM1QzJGNTIwQTlGRkE5RUE2QTM1QzcKKzoxMENBNDAwMDA2REFDNzdFQjYyNjBFRjczN0ZFRDlFQjZGQzBGRTEyQTgKKzoxMENBNTAwMDlFOEQ3NkUzN0EzNjk2QkFGM0QxNUZCMEIxRDJFNjZBQUMKKzoxMENBNjAwMDgyMkVBREYwM0RDQTBGREZFRkM2QkU3NjE1NkEwN0NENDgKKzoxMENBNzAwMDlCQ0I4NjIxREFCNUJERUE0NzdGQ0EwNkMzRTc3Qjg3MzEKKzoxMENBODAwMEMxRkIxQkFFNjVBRTI2MTYxQUE3QUVBREYyNzk5QzRGNjAKKzoxMENBOTAwMEQyMkMyRTY3MzYyNkJCRjMxRDYxRkQzMkExQ0ZENTBBRkQKKzoxMENBQTAwMEQ4NzVCNzY3RkM3QzNDRUNFRkEzRkI0ODlEODZGNUE1RTkKKzoxMENBQjAwMDBDNDRCRTMxOEFGMTdENjZFNzAxNEU4MDI3Mzg3NkI4OTYKKzoxMENBQzAwMERFREEwOUYyOEE2NTg0RUFBMzlBMTVCRjA5RDY1M0QzNDAKKzoxMENBRDAwMEYyQkMwMUU1NjFGNUJERkVDMTczNTEyRTNENjM3NDZEN0QKKzoxMENBRTAwMDBCOUI1RkZDOUY4Nzk2Mzk2MzQyRjI2OEFFRTIyMDdEMjQKKzoxMENBRjAwMDQxRUFFNUI3MzFGOTkzNDM3ODMzNDdFMENENkQ0MjFGMDIKKzoxMENCMDAwMDlGMUJDREUxQkI5OEI5OTJGMEJCREJBRDJDQzYwMDI0RDYKKzoxMENCMTAwMDM1QjdCQ0I5OThFNEQ1NEE1MzJDRUEzRkI4OTY0OEZCRTAKKzoxMENCMjAwMDJEQ0JGRUZDNEFCNTRGRDlCRDBBRUM3Qjk3RDIzMzEyMTAKKzoxMENCMzAwMDNCMzk4OUJFMUVFRTVGRjI2RDRCRUVEQkNGREQyOTgyMDUKKzoxMENCNDAwMDBFNDcwQUZEMzA4REI5RURCMEVFREE1NzMyQjY2RTg0N0QKKzoxMENCNTAwMDI2Q0IwMEQ4QzcwMkUyNEJENjkyMDJEMjhGQUQ2OEY3M0YKKzoxMENCNjAwMDJDN0YzOUNBQUZDNDg0RTBDMjFDRUU3QzAzRkEwOTY2OEMKKzoxMENCNzAwMDBDMkZEODg4M0FFOTYxRTAyRjQwNjA1REE2NjAxMkQxQTEKKzoxMENCODAwMDMxRjAxRDA1NjRERkMzMjk5MzJCOEQ4MEU3QjU1NzgxRjQKKzoxMENCOTAwMEZFMDVGNUQ3QjY1NUYyN0E0QUIwQ0EwMEY1OTMyOTJCQUYKKzoxMENCQTAwMDJCOEQ4MDk3QjVBMzgyNDdCMTdFMkVFNTQ3QkM1RTEwRTIKKzoxMENCQjAwMEFDNTJBMTNFMzA3NTFEN0YxRjBENDE0MEFDRTFBOUZGNzUKKzoxMENCQzAwMEIzRDIwQkZEOUY4QzE1RjJERDE1NUM4MEY4NTNGQkE3RUIKKzoxMENCRDAwMDBDQzNDNkIwRjU1QTUzMzlERjNBMTlDNURGM0I5OUNDQkYKKzoxMENCRTAwMDE2Q0U0MDc4NjcwNjQ3RTIzQzdCRjEyMjQ1RUFDMzlCQkMKKzoxMENCRjAwMEE4OTRFQjk0REZCMUM0QzhGRDNGOTlDMkZCNUY1RTJFRTEKKzoxMENDMDAwMEY0OTI2OEI2MDFFMTA2REJFNDhEMDFGOEVGNjlDQkQ4NTgKKzoxMENDMTAwMDg2RUY2RjQ4ODkxM0YwODI3RThBNDJGRDQ4MzhDQUZFNEIKKzoxMENDMjAwMEU0QjgyQjUwRUUyMjNGMzYwMTNGMEVFM0EzQ0QyOTVDNDIKKzoxMENDMzAwMDZFQzIzOEVCNjg5QzFDMEVGRkRBMTlDM0YzNzFERjYwMUIKKzoxMENDNDAwMEJGOEM2MkJGOENEQzRFRERDQUU3MDdGREM2RTYxMUZGNzQKKzoxMENDNTAwMDJGMzRDMkZCN0JDRUMzRkJDOUExNzlFQkYxQTM1REUwMEUKKzoxMENDNjAwMEM3RjIyNjYwODRBNEE3QTUxMjFFNEQ4QUU2RkEyMTJCREUKKzoxMENDNzAwMEQyQUU2MzYwMkE4NzlGMzUzNTk2QUZCMzc3M0Y4NjI4NUIKKzoxMENDODAwMDM0NEU5MzgwRTM3MDgwN0JFRUU1QUZGQjJEMzE5RjZGRDgKKzoxMENDOTAwMDdCREQ2MUZCRTU1NkIxQkQzNTZCNUJGODdBMThEQkFDMkIKKzoxMENDQTAwMEU5RTdFNDVBREQ3NzI1NDA4MDM4OEZCODU0RkFFRUZFODQKKzoxMENDQjAwMDI4NjZBNUU3NkM1QkVGNzdDOTc5NUMyRjQ1N0RCNTQ2QTMKKzoxMENDQzAwMEU4RDVDQzdCMkQzOTE1QUEwNUQ3QThEOTEwMzAzQkIxQjIKKzoxMENDRDAwMEJENTk3MUZCMTAzRkQzNjA3RDA4REYxOUQzOEFDNEZBQjgKKzoxMENDRTAwMDFDNjI3RDBFQkUzRTlGMDY0RkQ5QzE5RUE0NTlGNkJFNjIKKzoxMENDRjAwMEY4REIwQkY3REVGRTcyMEE0NDdGMUFCQThFRDQxRkQyMUQKKzoxMENEMDAwMDQ3N0ZGQkExQTQ3RUNCRkIyMUU3QTk4MzY3MkY5Qzc1RkUKKzoxMENEMTAwMEYzOTNGMDQ0N0FBNkVGNzJCNEY4MjhFNzc5QUUzRkJBRkQKKzoxMENEMjAwMDRFQkVDMkYxNEFGOTc3MzUzRjg2N0Q0NEZEQzRBOUM1QTAKKzoxMENEMzAwMEU3OUE5NjY0QzNFMjlDRDA3N0FEQjg5N0M1MjFGRjVDQjMKKzoxMENENDAwMDVBQUFCMDczODdCM0UxQzhCRkJENjVEQzhGRUFERDY1NjEKKzoxMENENTAwMDcxMzUzOUM5QUY5Nzk5NUExQ0QxQUY0N0NGRjVGNjVFRjcKKzoxMENENjAwMDc3QUM5OTI5QTQxNzY5RkQwQ0REMDlBRTgwMUJGNUQ0QjkKKzoxMENENzAwMEQzQ0NCNTAzRkExREFGRDMzQkJBNjEzRjc3RDk0MkRGQkQKKzoxMENEODAwMDg1RTQ4OUI2RkU0M0MxM0ZGQkZBOEQ3QTkyNzA3RTQ1RjkKKzoxMENEOTAwMDk2QjIxNzlDMkVDNkNBNTJCNzEyQkYyRTFBNThCNjNBNzAKKzoxMENEQTAwMDE5RUFEN0E3M0U0OUZDQkE2ODU4RDk1OTc0Q0Q0QzRERjkKKzoxMENEQjAwMEREQ0VFQkQ5NjU2NzUzQjBGRUU0NzZGRUZFMjRGNzBCQkIKKzoxMENEQzAwMEM4REY5OTc3N0JFNUU0QTEyMUZERTFDNjU0Mjc4REFCNEYKKzoxMENERDAwMDk2MUIxOEUyOTE0NUJEQ0I4NTcyNTJDMkIzQkZCMkM4NTMKKzoxMENERTAwMDYyQTg4RkE0QkZDRUVDQTU2NzdFOUU1MTIyRTQ3Mzg5MTIKKzoxMENERjAwMEI0RTc4MzQ2OEQzRERGMUQ2M0Y1QUEwMEQ3NkU5NEE3ODcKKzoxMENFMDAwMEIwREUwNUE5OUUzOTA4RkZCQUU4Q0UwNUE4MEFERjFCRTcKKzoxMENFMTAwMEZEOTExOUY1MjFDNTBERkEwNkZBNDU5QzBFMzYwRkU2NkYKKzoxMENFMjAwMEE5NzQ2RUFDMjAzRDcwODVDQjZBMjQ3ODBBM0YxNUFDOUUKKzoxMENFMzAwMEVEMUJFOEU3RTU1NzlFQjk3QjE4MUZBNjAyRTczMTU2QzAKKzoxMENFNDAwMEQwN0ZERDJCNUY3REYxMjFDQUQxOTMzNjE3QUE4MTYzOTQKKzoxMENFNTAwMERCMUU1OThERkFENUQ4QjZCRjdGQzVFNUFEOERDRUE5RkQKKzoxMENFNjAwMEU0QkNDN0EyQkYxMTlFOTdCNDVBNjhGRTYzREJCMjk2QkEKKzoxMENFNzAwMEUwRkJFM0RGNjk0QjQ1RkM5OEQ4RTE2RjQyNzZEMERERkIKKzoxMENFODAwMEZFQzc2MTlFRjA3MzJCNzY0Q0Y5MjZGQkYyRjU4QjVFQTQKKzoxMENFOTAwMDc4N0M2NjY2QTg1RjAyM0M3RUMyRTE3MUJFMEFGRDhBQUMKKzoxMENFQTAwMDVEMDkwN0Q2MDc0OTRGMUJDRUZEOThFMjdCRDBDQjMzRjcKKzoxMENFQjAwMDkxQ0VDRkIwMDEyRTNDNTdFOEI2RjM3RUY0RkVDREMzNDEKKzoxMENFQzAwMDk1QjAzRTc4M0VCMTA3NjYxMEE2Mzc0RkZBRDIwQTBDRUQKKzoxMENFRDAwMDI0NTQyRjY1QjE5QTdBQjk3NUE4RTZGRDI5OEU2NDRENjAKKzoxMENFRTAwMEZCRjU4OTU5OUFGNkE5Q0U3QzRERkRBNkNDQjE5QUY3RUYKKzoxMENFRjAwMDZGNzY5NTZBRUFCNzk0NENENUJDNUZFOUFFRDRENEYzQUIKKzoxMENGMDAwMEZEQ0Q5QUY3MEJGN0I1NkFEQjBGM0E2OTFGMEEzQjJBOEEKKzoxMENGMTAwMENBNTE5Rjc3MDUzQzRENTg1RUQzQjlBOTdDQTA5M0Y1QzMKKzoxMENGMjAwMEYxRUIxNjA1N0Q0REY4N0NGQ0Y5RkE2MjNGRUJFQkRGODcKKzoxMENGMzAwMDY1MkIzQzc0MUU2MEMxN0Q1MUMzQ0UwNzRBMDM0NDhGRUMKKzoxMENGNDAwMDVEMDY5NzMzREM4RjNCNkZCMDY3NjcyQUY5NzEwMUVDQTAKKzoxMENGNTAwMDAwRUM2QkFEM0Q4MzcwQkZBNjJDN0M0ODhEQzE3REU5OTQKKzoxMENGNjAwMDYxRTRGRjZBMzEwNzdGMzYxRUU1RkM3Qzk1RjRERTE2MkUKKzoxMENGNzAwMDIzMjNGREIxNjU0RUFFMEY3RDdGODc5NUUwOEIxRjIyODkKKzoxMENGODAwMDlGOUExRjRERkM2NDIyNjhCOEI0NkUzQzAzNTU3MDlGOTUKKzoxMENGOTAwMDNDOUE3NTk3QjJFNUJBN0RCQTRCNTM5RkUyRjhCMUU2NzkKKzoxMENGQTAwMEZERUIxM0Q3NkFEQUE3M0ExRkQwRUREMzY2NERGRDY2QzUKKzoxMENGQjAwMEQ3MjNCQTdEREFBQURCQTc2NzM0RUQxMzNGMEQzNjIxRkMKKzoxMENGQzAwMDE5NERFQUY0QUE3Njk4RkZCOEMzOUJDQTcxNUZDNjc3NzkKKzoxMENGRDAwMDc4RTcyM0JEMTRGOTNENERDNDQyRjZENEJGOEVBNTFGOUEKKzoxMENGRTAwMEVDMkFGNDZCQkRENjk4NDhFNTlFNDYyN0Y5QTVGNjM2OUYKKzoxMENGRjAwMDY2NTJCOUFGRDE0NUNGRkZENjU4NDJFNTFCOEQ2RTJBOTgKKzoxMEQwMDAwMEZGRDE3ODAzOTU4MUM2MEEyQTlCMUI5QkU5RkQ1RDhEQTQKKzoxMEQwMTAwMEFENTQwMjA0NDdBMEJDODgxRjI0RTQwRkQ0RDFERUVGMzYKKzoxMEQwMjAwMDMyMDQ2QkYxQzRGNUIzMjdDRjExNUZFQzFBMTBFQ0MyRDgKKzoxMEQwMzAwMEZBQkRFQzJDRjFDNTQwMUEyMzNBQjRBNjMzRTI2MzVEODUKKzoxMEQwNDAwMDY5RUU2NTY5NTA5RTRCRTVGNTZFOTM2RDAzQ0E4MTY2ODYKKzoxMEQwNTAwMDgzM0IxRkY1RUJBRjlFM0NCRkQ5Mzg4MkIxRkJENjU2NjAKKzoxMEQwNjAwMDI0M0E2Mjc5REQwQTc1REE2QzM0Q0NCQ0U3MzdCQjg3QzkKKzoxMEQwNzAwMDMzRjY3QjE0MTlFM0E4NUU4OUY1RUUyOERFN0VFRUM5NEYKKzoxMEQwODAwMEYzOTU1RTlBMUYzRjZGOUUxNTNBNkZGRTJBMzVDMjc5NUYKKzoxMEQwOTAwMEYzRUY4RjNCRURFODZGMzk3MDNFQzM4RUVCM0EyMEZDMjcKKzoxMEQwQTAwMDRCNkU5NjZGNUEwNDY1QTkzMURGODQ3MkYxQjA0RThGRDIKKzoxMEQwQjAwMDkwRTVCRjZDQTUwNjVDNEZCM0MxMzUxQkY1MTRFRjhEMzEKKzoxMEQwQzAwMDI2QjYwM0Y4QzUwQzg1REJBM0JEN0E2MDFBOTc0N0RENDkKKzoxMEQwRDAwMDM3NUJDOERFMzk2ODcwMkY0MTNDMDczRUZEMDRDMkVCNjgKKzoxMEQwRTAwMEFBMzRGQjBDODQ1RkI3QkQyNzA5RTE5MDk4NjZFM0Y1OEQKKzoxMEQwRjAwMDg0OUUyNzE0NTc1OEREQzRENzE5OUIxNjNEQTM5Rjc1RUUKKzoxMEQxMDAwMDBFNEU4QkIwQ0U2MTY5MEUxQTlGRjlERDIzNTBGRUNBMTgKKzoxMEQxMTAwMEZBQzE0QTc3MERDQTg5ODNBNUVFNzQ5Q0NGODEwQTBCQTgKKzoxMEQxMjAwMEQxOEZCN0MyRUU0QjQ3MjY2Nzc0MTdDRjBFRjNCQkZDMDcKKzoxMEQxMzAwMDJBQ0Q0NEZCMzZDQkNDRTk4Q0REQUVGQTc2NDRCMEQzQjUKKzoxMEQxNDAwMDVFNDhFM0ZBM0VFRDFCREE3M0I3NDU5MzFFN0VEMEMwMEUKKzoxMEQxNTAwMDk2RUQ4QTAwQzdCRkE3NzEzOTc3NkE0MDY0RkZDQjFCODEKKzoxMEQxNjAwMDAyN0U2NTMzRURENDVGRjc5QTI4M0FFRkVEQUVDODIwMjIKKzoxMEQxNzAwMDNEQThCQjFFQTAwNEY0RDE3REJDRkVGNDZFNkFCN0M4MDYKKzoxMEQxODAwMEEzMzAzQUQ3OUMyQkY4RDRFRkRCNTZGRkZCMTBCQ0ZGNDMKKzoxMEQxOTAwMEQxOUE2ODE3RjE3MEM3Mjg5MjRGQjc4Qjk3RTcwRkIyRjMKKzoxMEQxQTAwMDkyREUzMjdGQzY4ODMyOTQ0QjczQzVGOUQ4MDJCQjcxQzgKKzoxMEQxQjAwMDMwMUQ5MzE5NjNDRDBFRThFNzRFNUJGRTdBMTRGRjU1RTAKKzoxMEQxQzAwMEYxOTVFNjU4QTgyRjFCN0VENzdBMkM1N0E0NkQzNkM3NDkKKzoxMEQxRDAwMDQxNTk5REYzRkM3QTU0MUY2QjgwQjQ4QUM5NUUwQUJFMjQKKzoxMEQxRTAwMEQ5MDhGMzVBRDhBMDNBQjlGRDI0RTQ5QTdCRTU2NUM1N0QKKzoxMEQxRjAwMDYzNDgzQzQ0MzgyMjlFMDI3Q0M5MkU3QzUzQzA1QjdFMkYKKzoxMEQyMDAwMEY3QTY4MEU3REMzNEExQjdFNUIyREM2RkI0RTczRTBCRUMKKzoxMEQyMTAwMDExNEYzQUU3QkYzOUIyMUYzRkJEQjY1REU4NkRFRjlBRDcKKzoxMEQyMjAwMEY5QjgyQjlGMzZGOUMyRkQ0OTcyREM3Rjg4NzkxQzM0MkUKKzoxMEQyMzAwMDMzQjc4MjdBRENFRDc2QzI4RkJDMzk2N0VGMkQ4NkY1ODUKKzoxMEQyNDAwMEU3QjUzOTBDNzQ2RTJGRjk3ODgwOTFGRkJFRjg1MzBGNTMKKzoxMEQyNTAwMEYxQjk2QjNBODM0RjFENjI4NEU3QUQ0ODI3MTc5MzUzQUEKKzoxMEQyNjAwMDMzQkQ2QjQ5M0U4QzNEMDdGMjA3RjlFMjc5Q0Y0Nzg3MjIKKzoxMEQyNzAwMDg4MEYyRTEzN0NCMDlFRjhENzlFQzYwNkFBRUY2REY0RDkKKzoxMEQyODAwMDUyQjlBRjcxODNFMDgzOUJBOEZEOERDNjJEODIwRkZBNDIKKzoxMEQyOTAwMDA0MUY3QzlBOUVCNzM1Q0VBMUYyOTU0NjhGRTA4M0ZDQTEKKzoxMEQyQTAwMDVDNzU4NkMwQTc3OTg5OUU3NTQ4RkZGMkZDNzI5NkQ1OTkKKzoxMEQyQjAwMDYzNDI3OEZERTUxMTBCNTNGMTdDQTJDRDQyNzgwQTE0NEMKKzoxMEQyQzAwMEYwQzRBM0YxMTgyRjYzNzE2Qzc0RjY4RDlCRDFGM0RCNUUKKzoxMEQyRDAwMERFRkRENzlERjNBRTQ5NzQ2RkMyN0RFOThEOTM0MUZEQUMKKzoxMEQyRTAwMEVDRUFGRUYxRTcwMDczREE5MTlGM0NCREJEODJGOEM3MUUKKzoxMEQyRjAwMDAxQTdEMzhFN0FFQjMzNjk5NTMzNTBBRjNERTA3NkRBRjAKKzoxMEQzMDAwMDRENTBGRkRERjY0QURFRUU3MURBMkQ1MDdGMzY2RDA2QTgKKzoxMEQzMTAwMEFGN0I5REY2MjhBODNGQjc1REQ0N0Q4QzBFQjU5RkRGMEYKKzoxMEQzMjAwMDdFRUIwQ0Y0NjM5NDMyNjUwRkQyNDNCOTM1NzkzMkIwOTkKKzoxMEQzMzAwMDZCOTA4RkE1N0I5MDBFQUU0RjVDMzQxOUU5QzA5OUU2RDcKKzoxMEQzNDAwMDI0N0M5OEVBNUNCQjA3RUIzNzY1NkUzNTBFNzJBMjM3MUEKKzoxMEQzNTAwMDM0N0YxRDdFNTcxNjVGNjlDNEVGMjYwRkJGNkIxRDdFOUQKKzoxMEQzNjAwMDc3NUREQTY2NjNGODc3MzdFNDNDQkYwRUVCRDM1QzVCM0UKKzoxMEQzNzAwMDhEQTgwRjNBRDNGODc5QTlFQzQ3RDY2NUJCRTRBRjY4MUUKKzoxMEQzODAwMDI3MjA5RThFNkVBQjIwM0U5RUQ3NUE0MTdDNUNDMkE1NjQKKzoxMEQzOTAwMDZDNTZFNTdERThBN0FCNkI1NTFDMEFDRTYzOTZEMjdCMzUKKzoxMEQzQTAwMDU4QUY4MDBFNTE3QjFFQTgwNUY4QUM3RkZCRTJCOEI1RTQKKzoxMEQzQjAwMDE4ODc4MkY1NzE1NEZGQzVEQUM4N0NGNzJGODgwNzdBODEKKzoxMEQzQzAwMEJFRkI5RUEwNTM5NDlCOTVEMENGN0I0MDNGQkJBMDlFQkQKKzoxMEQzRDAwMDJFRDY1N0Q3QjZDOEJFODhFQzE5OEYxREU1NkI3NjFBQzYKKzoxMEQzRTAwMDk3OEJBMzg1REM1QzI4RUE3NzhBRkFCRjZDRUVCNzcwNkUKKzoxMEQzRjAwMDlDNzdGQkE3RUIwRkIwMURFOEI2OEFDRkEzMEY1RDZCNDAKKzoxMEQ0MDAwMERCMDU1RDc3MDgzOEIyQTI5RTI0QUNEN0IwNERFNDI3ODcKKzoxMEQ0MTAwMEJDNTg3Q0Q3RjI3MEZCMkQxOUUzMjQ5QTI5RkU0MjFGRDkKKzoxMEQ0MjAwMDI3NTFDRDAyQkNCRjY2NUQ5QzA1MEI5QUU5M0NCNjM1MjEKKzoxMEQ0MzAwMEVDMzlGMTIzNjE3RjBDRTA3QzZGMEUzMjZCQzBCRjdGNTMKKzoxMEQ0NDAwMEE3ODk3M0M3QkVFQkZFNEFGMEFCRkVENkFENkQxN0VCRjYKKzoxMEQ0NTAwMDVFQ0U3QzE0RDdBNjVGMDdGMzI0MTA2REFEQjQxREE0NzcKKzoxMEQ0NjAwMEZERUNCQjlFNjBFNEY1RjQ1OTA3QjdERjY1MUM4QkY0NTcKKzoxMEQ0NzAwMENCODMxRTE0OTU1RThDN0NEMENFRDA3RjEzQ0UyNzBFMkUKKzoxMEQ0ODAwMDVEODA0RkU4RjlEMUI3QzVFNzJFQzA2RjkyNzA5RTdBRTQKKzoxMEQ0OTAwMDdFMjNFM0IzRjRBNUQ0RTdBMEVFQzVGODNDRUYyQjUxMEYKKzoxMEQ0QTAwMEU0QTdGRkM0RTlDOUMyN0VCQUNCN0FCRTMwQTA3RDE2MUMKKzoxMEQ0QjAwMDFGMjQzQzZCMDAyQjBGOUYyQjY2N0U0RTBGNUY4Q0M0OEUKKzoxMEQ0QzAwMDdEM0I2RUYwRkUwMUY1QTI5MjFEOEYxMTlGRUE0MkUxQjUKKzoxMEQ0RDAwMDAwRjRFODgyM0FGMjlEMkQ1NzU1MTRFMDc3MkM5M0UzM0YKKzoxMEQ0RTAwMDRGQjdDMkU1QTJBNDdCRDAwN0E5MUM5QkNFRTU1MURGQjQKKzoxMEQ0RjAwMDkyNjlFMjFBQkJCNzdFOTU0NDdFQUM4QkUwN0I3RjcwNkQKKzoxMEQ1MDAwMDk4QTI0RTA4N0E5MURGOTc0NDkzQ0FEM0E5MzBCRjAyRkMKKzoxMEQ1MTAwMEZBNUY2N0U5NjBEMjIzM0E0Nzk4OEQ1ODdFREI3NjYyREUKKzoxMEQ1MjAwMEU3ODg5MUQ0QkZERTVFRUMxQzVBNjJFNUUzNUU3NzAzQzgKKzoxMEQ1MzAwMDk2QUQ2NkNGOTY0NTY4Mjc4REI1OTA5REY0OTY4ODA3ODEKKzoxMEQ1NDAwMDlDMUVDREUzQTdERUMyNzM2Mjc4NkZGQTkxRjNGMTI4RDcKKzoxMEQ1NTAwMEJGRjRGNjY2RTdGRTc5NjVDRUJDQkU3NjI3QUM3MzMyQzMKKzoxMEQ1NjAwMEFFQjNGQTYzQzM3REY4RUM3MkVERDBFQTg2MkY5ODcxMDIKKzoxMEQ1NzAwMDEwQzhFRDg2RjNDQzU4NzgyOTc2Mjk1MzkxNUQxNDFDOTgKKzoxMEQ1ODAwMDc2QkQ4RTY1RjFBNzgxQjgzQzI3REE5RjUyN0YxMEY2RjEKKzoxMEQ1OTAwMEU5NDVFMjkwNEE3QUI4QkUzMEU5M0NDQjM0MTZBMTlGMDcKKzoxMEQ1QTAwMDY5MDA5RERGMjgyNTdGRTc3NkFCMjhFNUI5QzgwNDNFRjIKKzoxMEQ1QjAwMDA1QjZDMDYwRjM5OTUzMzQ3MTQ4ODk0NjI4RTdBOUMxN0MKKzoxMEQ1QzAwMDMxNThFRjYyMDEzQTI3RDFEQkIzN0YxNTdFMjhCMDZCNkIKKzoxMEQ1RDAwMDM3QTY5MzVGOEFDNzI3QzE4RTBDNDJGQzlERjI5M0Y3NTIKKzoxMEQ1RTAwMDE3REM0RDdDMjA4QUY0QTE1RUJCNzZCNzgxRTIwQzVBMzEKKzoxMEQ1RjAwMDhDRUU4MTEzRDFBRTZENDg3N0FEODVGQUJGMDIwOUJGQkQKKzoxMEQ2MDAwMDdBMTlDQTNBQzcxNzA0Mzc0OUJGRDUwRDY3MDk5RUJEQjUKKzoxMEQ2MTAwMEU3MDNDMkVGQkJDOTA0RjIwN0NBRUFGRjU2NDkwRTU1MzkKKzoxMEQ2MjAwMDMzQjY4MUY2OERCRDY2NUUxNTI2MTc1OUYzRTdCREYwNUEKKzoxMEQ2MzAwMDFGMEQ3Q0FGMTIwMTQ4NzZENjg0OTk2RUY4QUU1MkQ4OTEKKzoxMEQ2NDAwMDFGQ0NEQkNFRUJDMkVFNjI2Q0M0NEMzN0Y0NTM5OTIwOTYKKzoxMEQ2NTAwMERFNjc5Qjc5RkIwOEQ5RkUwQjVFNEY5N0ZEN0QzRTgzMEQKKzoxMEQ2NjAwMEVBNDM2NTVERjQ5NzI1RUJGQjc5M0Q1OThFNzc5MkY3OTgKKzoxMEQ2NzAwMDlGMkJFQjE2NUVCN0YzRjc1RjQ4RkZDMzRDRTQwQjkyQUEKKzoxMEQ2ODAwMERGQkY5NDJFRTQ0NDNFQ0IxNzcxMzlFREU5QzUxNzhDMEEKKzoxMEQ2OTAwMDRCRDFCNjBCRjlCMEYwMTlENTZCMUU4REZCMzMzNUZBQjMKKzoxMEQ2QTAwMDREQTRFRjY2ODU2MkU3QUFFRjMxOTFCRkZCNTQ1QzczMkUKKzoxMEQ2QjAwMERFRUEzMDdCNDVDNkIxNTQ5NERCRERBOEZGRDVCQzk4Q0IKKzoxMEQ2QzAwMEIxNEQxNUYxM0NBODdGN0NFMUU0N0FGOTE0RDU0NkU3MjkKKzoxMEQ2RDAwMDEzNjcxRUU0N0NCRjNGRkRBREFBRTE2NUNEN0VGNjY5MTAKKzoxMEQ2RTAwMDU3MTU2RThGRTNDMTFEOEM3N0ZBQTEyMTVCQzlCRTQ4MjcKKzoxMEQ2RjAwMDBCRDBGOUY5ODc4MkRGMEQwNkRFNUExMjE3OEExNzhCRDUKKzoxMEQ3MDAwMDRGNjU2RUI0NTdFM0ZGMDhGQzE5RjdGOEQzMDBGMUUzNTcKKzoxMEQ3MTAwMEFBM0Y3MkZGNkZDRDIzQUY5M0RDNUJBQzNBQzk5RjVCMkUKKzoxMEQ3MjAwMDk2RTNGOTE4RTFEMzY1MEY5MDVGQjFBQUUxMTU5QUQ3OTYKKzoxMEQ3MzAwMDk5MkM2MTU3M0E3QTcyQzJFMTc5QTIyRkZDNEY1RjA0QUIKKzoxMEQ3NDAwMEZFQTdCRjRGRjhFQkZEQ0UyQjZDN0I2OEJEMkIyRTMzQjUKKzoxMEQ3NTAwMEFFQURDQkNFQ0Y0NTVENjI5RjhFMTg5QzYzMDRCQzJDRDIKKzoxMEQ3NjAwMDIzMDEyRUE3OTcwNDQ2QzZBQTE4NzQxQzE4Q0NFMzk2NkEKKzoxMEQ3NzAwMERFMjg0NkJCRTg0Q0JEOURFMUJFQ0Y1QkZEQ0YzQzRGRjQKKzoxMEQ3ODAwMDA0QkZBRkRFMUVCODBEQzcyQzBFQzEyQjYxNjQxRkY4OUQKKzoxMEQ3OTAwMDBFQzVGMTJFMDA1RjZERkI3NzBDREYyMUM2QTBEOTg1ODkKKzoxMEQ3QTAwMEU3QTg4NzE5RjUzMzI2NzBDNDFDMUUxRjMzNzYyNEM3REIKKzoxMEQ3QjAwMENCODFBREZDREM0ODFGRjczNTc2QTQ5REVGOTMzODlGRjUKKzoxMEQ3QzAwMEE5OTlGMUM2MDQzQzlGOTFGNDMwMjk5QTM1QTNCRjFENTUKKzoxMEQ3RDAwMEYwREEyNUYwREE4NTc4MkRGMTM3NzQ0RTAzREY0NUEwQjUKKzoxMEQ3RTAwMEFGMTBGRTZBRTFFQUVFMEJEN0M5MjMyRjhDQjdEQUY2NDkKKzoxMEQ3RjAwMEVGMThBRTJEQTAwRkQzQjlFNkVFMjhGMkE3RThFMUJDRjIKKzoxMEQ4MDAwMDc0MjQzRkRGOTJGMDZFQjgwODlDMUJCRTIzMzgzNzhDMUYKKzoxMEQ4MTAwMDc0NkFGQzExMTJERUZEQzkyN0ZERkVDODc5NDdBMEQzNEEKKzoxMEQ4MjAwMEUyMkJBMUQzQUYzMzg0N0Q2MzBDNTI5Q0E5N0VERjFCMTYKKzoxMEQ4MzAwMEZCRUU3QkQzNDVFOEE5RTlGQkE0MjczRERDRjQ2NUI1MDUKKzoxMEQ4NDAwMDM4RUZENDNGREYzQTkyRkJDREJFMkIzOEZFRkZFNjRGRDgKKzoxMEQ4NTAwMDlGNUZGRkFBQTY3RDYxQzM3RTRERkIyMkVGREI5QUZBOTQKKzoxMEQ4NjAwMDg0NjBBMDFDRDE1Q0ZBQzdBRjNEREVGMzNBRDZBRkQ0REEKKzoxMEQ4NzAwMENGREU5RjdGN0RGQTBCNEIwRDc4RkU1NjEyRTBGRUZENEEKKzoxMEQ4ODAwMEM1OTk5RTJGOTBBRkJDNjVGMDM1RDkwMUFFRDc3NDM0RTEKKzoxMEQ4OTAwMEFCNzQxRUU2Q0JBNzczQzBENTYyOEU2NzI3RkNFN0EzRTcKKzoxMEQ4QTAwMEJCMDE2RkNFMzIwQkY5M0ZGREFGNjYxOTlEQjk3REYxMUIKKzoxMEQ4QjAwMEEwRjQ0Qjk1QjlDM0Y0QzQ1MjZCQUMxMUY1QTc1MjYwRjgKKzoxMEQ4QzAwMDc5OTFGMEU2NkI4MTM3MTQwRjA0RjQzRUM3Q0E0Q0YxMkUKKzoxMEQ4RDAwMDQwRTc3M0U2MjgxNEZGMzQ4N0YxNzg2QTI4RkQxRTY4NTQKKzoxMEQ4RTAwMDlGNkU2NDdFMEJENDJCNkQ0NkJGODVDRUZENzhCRUMzODQKKzoxMEQ4RjAwMDZDM0U0RDY2MzE4MkM2ODZGNjVERkMyMEIyODM2N0UxRTAKKzoxMEQ5MDAwMDQzOThBRkVBNTYyOTlFNkQ3NjA5M0YyRkJDRERENjZDNTEKKzoxMEQ5MTAwMDQyNzk3QURCQkU3QjRGREYwREVENkM5REI3OThDNzZCMEMKKzoxMEQ5MjAwMENCRkNCNTBGMEM5NzczMEVGOEY1NDg0RUU3REQ4QTM4M0YKKzoxMEQ5MzAwMDU3NTY0QzJFOEM3M0Q1N0ZGN0Q2NDg0RTY3RDNENUI1NDYKKzoxMEQ5NDAwMDJBQzZCRkY0QkNDRDQ4RUY5Njc0MDdFQkRCNjcyOUUwMkQKKzoxMEQ5NTAwMEY5MTlFMzcwOURDQ0U0Q0Y4ODQxRkQ3OTczMzlCRTVGM0UKKzoxMEQ5NjAwMDdERDA0OTcwQTkyQjU5OUI4N0ZCNTgzNzU5RjlEODkyMUMKKzoxMEQ5NzAwMDE3QjI2RkVBMUFDRTkxOUUzRTQ1N0RBRTA5REYzRjczMjYKKzoxMEQ5ODAwMDk4QkJDNkFGRTlGNEFBNjhBRjg0RkM5N0MxMDU0ODk3NzUKKzoxMEQ5OTAwMDE3QjM4M0U0QkMzQjFBRkQ4NDRGMUYzNUVFQTNGMkFERjEKKzoxMEQ5QTAwMDZCRkY1RThDN0E0NkIwMzExMEQxN0Y3OUE1RkUwMkU5MUIKKzoxMEQ5QjAwMDI3OTA3RTAzQzkwN0ZFNzU0RkY5MTBDNENCNzRDOTE3QjEKKzoxMEQ5QzAwMEFDQ0EzMEU0MEJDQ0M4NEJDOTJGQjMzM0ZBRjBEN0QxNzMKKzoxMEQ5RDAwMDE5MTc5NkFCREFGNkVGOThCRjVFMkE5RTU3Mjc3MkI5RjEKKzoxMEQ5RTAwMEE4Qzc2RjNENUU0QjdDODZDRjhBMTUxOEY3NzZEMEY3QjcKKzoxMEQ5RjAwMDUwQUVDRTY1REVEQzZBRTBCMzczOTY2RTMyOEQ1N0FFMDQKKzoxMERBMDAwMDFDQUY1N0Q4M0U0RDYyMTFGMjU0MkU5RjlGM0I3OUJDRkMKKzoxMERBMTAwMDY0Qjk0QUY2ODE4QzU3OTBGQkIwMzg0M0Y4MTk0M0ZCNDAKKzoxMERBMjAwMDU2OTU3MTYxQjlBODZERkZERUY1Rjg0RjE3NUM5OTVDRUEKKzoxMERBMzAwMDYzOUFGQzg2QjU3REYxRjVCRThCRTBFQjdEREYyN0JFRkEKKzoxMERBNDAwMDg2RTVDRjJDNTAwREExN0MxMThDMjc0NjNEQUVEQkM3NUYKKzoxMERBNTAwMEYzMjE5NzI1NkY4QUExRTBDQzkyOUUxOEQ0MUI5N0I3MkIKKzoxMERBNjAwMEFCODQ4N0NDRTgzNjBFMDU3QzVEMkFGMEI1OTNGOURGRjAKKzoxMERBNzAwMDQ1N0M1QzNBNjEyOUU1RDEyRDdCMkM3MjVDNzFBRDc4RDcKKzoxMERBODAwMDdGODVBREM1OENFQjVDQjE1REZCNUVBRDg4MkJBRTdFNUEKKzoxMERBOTAwMDRFRUIxN0FEOUQ3MEZEMzFFQ0I3NTYxN0NGRjM2Qzg2OEEKKzoxMERBQTAwMDg4MUYyRTYwMDUzQ0VFNDJBQjlGRUFDQkFFNDZBNkYxNDYKKzoxMERBQjAwMDU3NzY5RDZGMjQ3RkMwMEJCRjNERjk0QkVGODQzMEZCNDEKKzoxMERBQzAwMEJGMkZERUI2NUYwNDZGREJGRjZGRTJBRDZBREY0RTc5MUEKKzoxMERBRDAwMDU1OTc4QkI3M0YxQUU1M0U4MEYzOTZGQzc4MUVGMjI2RTkKKzoxMERBRTAwMDE4NzdERUNCMTY5RjE3Q0Y0NzhCOUREQ0JGQTlGODlBMUUKKzoxMERBRjAwMEYwQkNBREZCMkI0NkZFQTNDNUMyQ0ZEOTVGNUVCQThDOEUKKzoxMERCMDAwMDM3MTg3QkQwRDdDNEUzMEREQzJBRTY4OThFRDk1NzUxNkMKKzoxMERCMTAwMDhFQzcxNTg1NkZENDkzM0VEMkVGQjk5NUNDQUYxMkYxNzUKKzoxMERCMjAwMDQzOTdDQUQ3QTQ1RjZGQ0NGMTdBRDJCMzVDMDEwN0U5RkYKKzoxMERCMzAwMDQzRTNCRTZDN0UxREU1RTNCN0U1RUY5NkYyNzBGQzIwOTMKKzoxMERCNDAwMEVFQkYyODBBNTY5MDlFRDc2NUYyMTdCRjg3N0FDMjRCNjAKKzoxMERCNTAwMDUxMTFGNTA0NzMyNkQ3OEI2NjdBMTc5OTc4QkU2MTlGQTkKKzoxMERCNjAwMEYzNDA3MzI2OUUwNzBBRkU2RkIwQkE0RDA4QTcyOTZBRDQKKzoxMERCNzAwMEU3QUY2RTQ1RkMwOUE4RTRERjVCRjNEMzc3RkVGMEE4QkUKKzoxMERCODAwMEYzRTI3NjdGOURFMzJDRTkwREZERTlGRjc1MDY5RTdGQUMKKzoxMERCOTAwMDUxNTBFRUE0MzgzRkI0QTdEMEJGMjdGRDdERkFGNzhCRDQKKzoxMERCQTAwMDQ2OTUyNTY2OTJGRjY5NDJDMDhERjNEOUMyRTdEM0RGNUYKKzoxMERCQjAwMEZFRDQzNTdDQUVGMTJGRjYzNzdFNUQ3QkIxNjM3MTE4RjQKKzoxMERCQzAwMDFEREM5NkE5NDhCQkMzNzFENDFBREFERjRCQzU4Mzg5MjMKKzoxMERCRDAwMDNENzMzNEZBQ0ZGRkVCNzZDNTc0MTU1NDRCOTA5RkI5NjMKKzoxMERCRTAwMDhBOEZFQkFGOENFQkIxRjM1ODgwQ0EwNUFDODc0QTBGMzQKKzoxMERCRjAwMEUzRjFGNzhCOTk4QkNBM0I0NTFFRjNERTJDQ0ZDRDk5MTEKKzoxMERDMDAwMDc4MUU2MUVBMTk0Q0YxOTMyRjdFOUQ4Mzc4NzNGQURBQkUKKzoxMERDMTAwMEYxOUIzMEQ2RUVCQkQyRTNCQUYzOUQzNDdFRjdFRUFGODQKKzoxMERDMjAwMDkzMzAwRUU2NjI3QzYxNERBMkRCOTMxOUUxRkNGOTFGOTMKKzoxMERDMzAwMEE1MkE5REI3QjBDMzhGOTI5Q0E4MTRCNzMwQjBDOUZDNzkKKzoxMERDNDAwMDFDRUQwQjY3MzJFMTQzODgyRjBFRDkyQUY5MjI5RUNGQjMKKzoxMERDNTAwMEU2N0U2Q0UwRjEyNENCMTU1RjNBQkNEQTFBMzQxMDY5MjkKKzoxMERDNjAwMEU1MkU0OUY2QTk1ODZGRTFFREI5MzVCMTNFMDVFQUI5OUYKKzoxMERDNzAwMDYzQTM3OEZCNURCMTNFRjRBM0NGNjc0MUEyQzc4NTQwQTMKKzoxMERDODAwMEEyNTgyRTYyOUNFRkREQzFEQzNDREY4MUY1QTRBMDFFMTIKKzoxMERDOTAwMEI2QTRDRENBRTNGRDU5MzAwREY5N0I1RTNGRjY0RjVCNkMKKzoxMERDQTAwMDI2RTdEM0EzNTMzODNGMUY1REE2RjU1M0RDMkJGOEMwRkUKKzoxMERDQjAwMDI3NTk2NUZGNDQ3QTNBOTZFOTZFQzI3Mjc0NUM2MEUzNTQKKzoxMERDQzAwMDJGOEJDODZGQ0ZEMDdFMzgzNkY2Qzc3NERFMjhCRjFCQzcKKzoxMERDRDAwMDMwQUE2QzAzQzI2RkE3QzJFM0QzQkRFRDE2OEE4RjgwNTIKKzoxMERDRTAwMDJGMDY1Nzg0QzVGNUVGQ0QyQUZGMTlGNkY3MkJFMUY3N0MKKzoxMERDRjAwMEVCMEZBRUYwOUQyNjZGMzY0NDRGNUU5QURGNjhCNEI5RTUKKzoxMEREMDAwMEM4RkYwRTBGNEE2ODVDQUEzRkY1RjRCNDU5RUI3MkM4MUQKKzoxMEREMTAwMEM3RUY0NUJENzdDMDI4Q0ZGRkMyNzk4RDM2MzM2NkMzQzQKKzoxMEREMjAwMEY5M0Y2RUYxNkQyM0ZEQjQzRTA5RkQ5NTRCOUZCMDE4OTAKKzoxMEREMzAwMDUwNkY3ODFGQzQyREU2QTE3Q0Q4NjhBNUYyOUY2MDA3QkMKKzoxMERENDAwMDYzRjkyRkIwODNCMUZDMThFQzYwMkMzRjAxM0IxOENCN0EKKzoxMERENTAwMDI1NUZFNjgzQjA2MEFDMkNDQkREOUE1OTFDM0E5RkQzOEIKKzoxMERENjAwMENGRjc3OTAxQ0ZERUYxREJDRDM0RkUyNzU5MUU4MjZGNkMKKzoxMERENzAwMEVGN0VCRkM0N0M3OEE4QjMzM0I2RTdBQUI4MEJFMDVCRUMKKzoxMEREODAwMEZGN0M4NkMzNDU5RTE3RUFEQjdGMkJGNjNEQUZDNTQ4NzcKKzoxMEREOTAwMEYyM0RBRjM1MTg1MzE1RjZERURFNEMzM0I1RTdFRUZFMzcKKzoxMEREQTAwMDk0RjI1MEJCMUNCREYwNzUyQkIwRTRFOTA2NUVERkZCQkUKKzoxMEREQjAwMEY0NjI4MkVGMjc1OUVFN0YyMjVDODFCRUZGODY2NTVFQUEKKzoxMEREQzAwMEVCM0JCRkMwRkMxRkU4OUZFMjBFQkE5NTlFNUY5MzFEMjAKKzoxMERERDAwMEEwNUI4NzFFMEU3MjVEM0I2MzAzMUJGMUZCOURCQjUzNzMKKzoxMERERTAwMDcwMjVDMDZGMThBNzFCQzQyMzI1RDI3QUQ3RDI3QzZGQTkKKzoxMERERjAwMEIxRjQxNDYxNUVDQjJEREZBODExRTM4QzNGQzkyQTI1NTUKKzoxMERFMDAwMDM4RkYxOEYxMkQyMTBDNEU2MkJGQUU5NEFFN0JDRkJGMTAKKzoxMERFMTAwMDA1OUUzMjc5N0YwN0YyNEUyN0NBQTFGMzMxQThFRjU1NEMKKzoxMERFMjAwMDhBRjNGREQ2OTZCNEI3NzA3RERFN0QyQTRCNzcxMkZFNUQKKzoxMERFMzAwMDZBRThDRTkxQzVGMTQ0OTZCOUVERTYwQURDQTc5REVERkUKKzoxMERFNDAwMDQ3RDNFRUI0RDFCRUE0MkRDMTcxQjNEMjM1RkVDN0RDMjkKKzoxMERFNTAwMEIxNUZGREQ3MkZFM0U5N0QwNzBFNzUxQkRCM0EwNUUzQzQKKzoxMERFNjAwMDRGRTY1QTVGRkQwQjJFNjlCRUUzRTMyOTE4N0ZCMjMwRkYKKzoxMERFNzAwMDUxRDk4QkU1MjI2N0YyNzUxODc3MjJFM0UzRUZDODJDQkUKKzoxMERFODAwMEREOEJBNDM0Q0Q1NTQ5N0E1QTI5MzI5NzMwNzk1MDZFQkEKKzoxMERFOTAwMDhEQzY0M0MxREVGQTE0QzcyMDRERkRGQUM0NjE5QUY3NUUKKzoxMERFQTAwMEE3M0E1MzM1RUQzNzY1NjY2QkRBRTVCOEQzNUM4NTlBRUEKKzoxMERFQjAwMEY3NDZDN0Y1QTRBMDdEMDZFQjIwN0E2MDNCNTQ4QUQzRDEKKzoxMERFQzAwMENCREQ3REYwQzY2Q0E4NEY3RjZBQjYwQkQ1OTI5REEyQzQKKzoxMERFRDAwMDdERkFBRTcyMUZFRTQ3MzdDMEQzMEMwQUQ0RjE5MjA3MTkKKzoxMERFRTAwMDdFRkQ0QkVDNENBN0ZGNTdCNzNGQjlEN0VEQkMwQ0ZERkYKKzoxMERFRjAwMEJGMUZCRDVGRjJEOTk1NkRENjYyRTRCMzk3NkEwN0U4OUMKKzoxMERGMDAwMEY3MjcyRjRCNkIxN0Y0ODczN0JENzRBMTM4MzlERUVDMzgKKzoxMERGMTAwMDU3RDk4RTA4Nzg4MzExQTkxQzBGNzkzOUZEMDBDRjFGQkUKKzoxMERGMjAwMEJCNUM3RUY2MTlGMkIzNDEyMUZBRTgyRDc1N0VCOUQxQkEKKzoxMERGMzAwMDY2RDc1QkFCRDE0RkZGQTZDQTI4MUY0RkU0RjU1NUUxNkEKKzoxMERGNDAwMERGNkEwOERGRDk5RDVCRUYxQjFBNEZDRkJEQThFNzYyRTAKKzoxMERGNTAwMDdFQTkxQkZBQUZDQTEyRkVFRkVBNTdFRjFCNUExNDZBRUEKKzoxMERGNjAwMDY3NkIzRUQ2QkNDRkVFNTFENjZCRUFFQjkyQjVGNTA3QTgKKzoxMERGNzAwMDRCRDc4NzdGREYxRjVGQUNEQUIyQzhFQ0ExRkM0RkM1N0YKKzoxMERGODAwMEVEOEJDMDFGRTQ3Q0E2QkMxNjQ1NzE3RDM3NjNCQzBBQ0YKKzoxMERGOTAwMDNDQUEyRDdBREI4OEU3QjQzN0Y3MjM0NzI1RkZCOTREMzQKKzoxMERGQTAwMDY1RjU5MURBRUYxMkZENEU3QjJEOEFFMjYwMkVCN0RGMjgKKzoxMERGQjAwMEY3MDE5NjE0NjdGODQ3MkU0N0RGMUYxODMwODZFRkZCRUUKKzoxMERGQzAwMDNENTk1QzBGM0Q1REJDRjlBNzVGRTBGOUU4NEI4Q0UyODEKKzoxMERGRDAwMDNFNEZDNzcyRkU5RkQ3NzJDQzYwODA3MkY0MDA4RTJGQzYKKzoxMERGRTAwMDc5OEVBMDAxRTU0QUY3QjI2ODJGQzZGNUQ3MkRCNzUzNTEKKzoxMERGRjAwMDNDRThFODk0OUU3N0FEQjBGNUVCOUVEOUZCQjAxNUY2MDIKKzoxMEUwMDAwMEVEMDM0QzgyMEM5M0FCREQ2ODE0NDFGREExQUNCREIzQjQKKzoxMEUwMTAwMEQ2QzFERjM3QkQxNkU1Mzc1Q0MxN0ExRUMyNzMwOTk0REQKKzoxMEUwMjAwMDgzNjU5Q0NFMTcyMERFMDhGOTgyM0VGNkJBRkI1OEFGMTYKKzoxMEUwMzAwMEJDNDFCRTgwRUJDN0ZBOUU2N0Y2MUY3QzE4RjVGMEZENjkKKzoxMEUwNDAwMDlDQ0UzMUMyNEU2RkRGQ0YwREIzRUZEOTYzOUMyRUFEQTYKKzoxMEUwNTAwMEYwQ0JFMzk0NzRGNEJENjc5M0Q5NzY0MTNBNkZBNkI4RDgKKzoxMEUwNjAwMDlCNEJBNUVGQTc5MTlFQjMyRjQ4Q0YwNzZFODJGREE5Q0EKKzoxMEUwNzAwMDdCODlERjZCNzFBNjJEOURGMjYyRkI5M0U3NzU1QjU0ODQKKzoxMEUwODAwMEEyNDM1OUVGNkE1MzZGNDBCQ0Q1RTdBMTRCQjgzMkI3RjIKKzoxMEUwOTAwMDhCRTg1M0RFMUJCNTZBRTI3RjY2QTBEQzVDRDU2RUU0REMKKzoxMEUwQTAwMDQxMjJGRDhEQjM0MTY1Q0VCMDcxNzZCRTYyNTk0Njc5OEQKKzoxMEUwQjAwMDZFNjJGRURENTI1RUI3RkYzQkFFMzQ4Nzk3NkIyM0M4QkUKKzoxMEUwQzAwMDNEOTBEM0E2Nzg5NEQzOTUwQUQ5OTU4N0RBODc5NDIxODEKKzoxMEUwRDAwMDlDMEUyOUNDRUZBNEJDMkQxRUE3M0M5Mzc3ODdDRjZENTcKKzoxMEUwRTAwMDc0NUY0OTYyMjZDNTI3NEJGQjUyREE5NUIzREI2N0E3RkQKKzoxMEUwRjAwMEEzNUVGOTZFQ0JFMjQzQjA3M0VDQzNBQzU0MUFFRjU2OTcKKzoxMEUxMDAwMEU2MjUzREY4NTA2Q0M1MDhGNDRCNEMxN0YxMDE4NzYyQzkKKzoxMEUxMTAwMDdCM0E5MTJGMUY5QTE4QURFMDc5M0ZGNEJGMEVGQjk3MjEKKzoxMEUxMjAwMEVCM0E2NEFBMThDMUVGOUY5MDcxQzlBM0FFRTg5RUI4RkMKKzoxMEUxMzAwMDI5RUEzREE1MzdFMUY5RjYzQ0U2NDBCQkYyMTY5NUVCM0UKKzoxMEUxNDAwMEI5RUNDRjlDM0UyNURGQUI1MzAyNzEzOENGQkQ1OTMzQkMKKzoxMEUxNTAwMDRFNjdDMTc3NDMxQTdFMjZGQ0FBMDI2RTQ2MUU4Nzc4NTgKKzoxMEUxNjAwMEE5N0E2RUFGM0RGQkI0QzJFRjQ1NzE3MUZEQkY3NkMyQjcKKzoxMEUxNzAwMEE5NUZERDhBNzk3MjYwNzcyQjMwOUZDNUFEQUZEMkJEQzQKKzoxMEUxODAwMDNGN0EzQkJCRDdERUY5M0ZGNEE3RjZCNTk3MkEyQ0EzMUQKKzoxMEUxOTAwMEMyRkNFNDdBQkJBOTU3NEY5N0ZBREUwRTFFMjdGRkZBOUUKKzoxMEUxQTAwMEM0REY3NEFEODRGQTlBMUREMTA0QzcxMzRGNThCQ0M4OUMKKzoxMEUxQjAwMEM3NEY2Q0IzOTBGRDczMjJBRUE3NjMzNUQ2NzdFNUJBMkYKKzoxMEUxQzAwMEJDMzQ5QTRCNzMyRkRBNTI4M0YzM0Q5NDNGRUM2RjI2QTUKKzoxMEUxRDAwMEJBRDdFM0Q4RTMxNjNGQzY3QjJDN0YzMjZCMUJEQTUzRUEKKzoxMEUxRTAwMEM3NDYzODlGN0QwRUZEODFDRjI2RDAzRDAzQ0NDM0JGRUYKKzoxMEUxRjAwMEJGNTlEMDIzRDI5NzEzNTQwRkY1Qjc3NkQyMjM5NkJGQzkKKzoxMEUyMDAwMDMwOTRGODk4RENCRkUzOEY0NzUxMUVGRDg5N0QzMzA3QkEKKzoxMEUyMTAwMEEyQkZBQ0QzRjAzQ0U1RjEzMEQ1RTY0NTdFQkM3MjVCRTUKKzoxMEUyMjAwMDE0RTk4MTBEMEU0RkQ2Mjg1ODVGRjk2RjZGQkVCNTEwRjcKKzoxMEUyMzAwMEM3N0YyNzgxRTE3QUJBREI1RTIwN0Y2NTY4N0YyM0NCQzkKKzoxMEUyNDAwMEY3MzM2REE5OUMwRkY0Q0E1QjFFNzdCQjEwRTM2RTUzQzYKKzoxMEUyNTAwMDI5RUU3NjM0QzJCNzg2Qzk3QjE3NzlEQzZEODFBQUI4RkUKKzoxMEUyNjAwMDI5RUZFMEExQzg3OUU0RUU1MTVDN0ZBQzk2RkU5MzQxQzIKKzoxMEUyNzAwMENDOUE4ODc0RTg2MUI0REVFRTg3MzJCNkExQkQzMzY3MEMKKzoxMEUyODAwMDU0NUNFRkZENEMzQzVGNTJFMjVCNDdFRENCRTQzRkIxQTkKKzoxMEUyOTAwMEYwNzhCRkE4QzhFN0Q4RDM0NkYxQkNFMjJBRUIzOThEQTUKKzoxMEUyQTAwMEZGQTZCNkUxMkI4RDVGQTUzNjg3OTFEQzJENjg3MjE2MkYKKzoxMEUyQjAwMERFMDVFNTZBMDFFN0U1MjkxNUI3RTBGQTU2MzQ2RjdFMTkKKzoxMEUyQzAwMEYxMEQ4MkNCNjMzRkZBMDBDN0RENjcyM0JGMEQ3QjgzNkYKKzoxMEUyRDAwMEMzNEY2RkNGNTQ1OTNGMTdGNEI0NTU3M0NGQ0NEMTQ3QzgKKzoxMEUyRTAwMERFQTM3ODkzQTNCQkIzRjM3MERGMTZBQjgxQTM3ODFGRDMKKzoxMEUyRjAwMDU3OTczREYwRDFERDUwRUVEQTc3ODBGNjQ1M0ZERjNFQUYKKzoxMEUzMDAwMEU3RjYwQUU3MkJENUI4OEU0MTE4RUY1MkIxNjQxNEQxNjUKKzoxMEUzMTAwMDJEQTdGNzIzMUI3MzA5N0VEMjlGREI3RDIyQjJCRDI1N0IKKzoxMEUzMjAwMEU3MjlGQjk3RjM5M0ZEQ0JGNzU2OEJGRDNBNkQwRUU0OEYKKzoxMEUzMzAwMEExN0M0RUNDNzQ2QUQ2NzUzQTI2OTAxNzZCQzNFN0RDODUKKzoxMEUzNDAwMDlGNzczQTBFRUE2MTc4RjM1RDlERUZEQzJFRkMzQzg3MDcKKzoxMEUzNTAwMDBENkI3RjY4MDZGQ0VCNkNGRUE1QzkxM0NFNDcyRkYzNEYKKzoxMEUzNjAwMDVDNDdDRTU3QzY5NUNBM0NEQTg3NDc4OUYzODgxMTZDNUIKKzoxMEUzNzAwMDQ0M0ZGOUI3NUI5MENFQUFGQkU2REZEMkYzRkVGMjZGMjMKKzoxMEUzODAwMDdCRjM2REZGQ0RGMzZENjU3RTZENTFCOUExM0UzQ0NGNDIKKzoxMEUzOTAwMDU2RjJDM0EyNkM3ODlFODNFN0ZFNUFGOTVFMzQ1QUZCQUMKKzoxMEUzQTAwMDdFN0ZGQ0IxMjA5QkRCRDc0NTgzMjJFN0JCRUUxRkM1RjgKKzoxMEUzQjAwMERCOUI5ODlGREYzRjI4RTRFMjc4MDE3Nzc5RUY5N0Q0RTEKKzoxMEUzQzAwMDUzNkEwNURGOTY3OTlFRTNEQjc4RENFNjc4OTFCNzAzNDQKKzoxMEUzRDAwMDVDODBGMjVDRkJEQ0VGOTY5ODRENzI1NURFQ0ZBNzQwNzcKKzoxMEUzRTAwMDVGRjNFMjIyRTUwQjA3NjgxRUQ3QjIxRTJBRERDQzYxN0YKKzoxMEUzRjAwMEM0MTJDMDRGRTU2NDU2NDFFNTc1QUM5RUNBMUJEODI2RDEKKzoxMEU0MDAwMDJBNkY2NENENTQ0RTYzMDEyQUQ5MjhCRjg4RjdCQzg3OTAKKzoxMEU0MTAwMEU3OTk0RTVENkE0MEY5NUE3NDZCNjRCREY4RDQ0NUUxRTIKKzoxMEU0MjAwMEUwQTVGQjAzMkYxNzBFRDczMTdFQ0Y1RjFGNzgwQ0NGRUYKKzoxMEU0MzAwMDI0RkNENkMzNDM5RkFGMzk5MTA1RTlFMjkyNDk4OEI4REQKKzoxMEU0NDAwMEE5NjgwNzNCMjlCRUI1OUNCOUE5M0VFNTEyRTE1MDEyNjcKKzoxMEU0NTAwMEY0MTg3OTdFQUYwRTFFRTU5MUYxRTI5Q0EwRkY5RkEyMTkKKzoxMEU0NjAwMEVDMkMwRUVENTM1NkI2OTNERkRGMjBGNjBCMENCMTQ0QzcKKzoxMEU0NzAwMEU0RkZGQTdEOTRDRjhCQTJDQkNFM0E4MTQ1Mzg5RTZERDYKKzoxMEU0ODAwMDlDNEQ3OURDODU2NUFCNTNBMTlFOTJCRDY5MzZFNTc5REIKKzoxMEU0OTAwMDhGMkY3QjAxRjNCQ0QzOUVERENDRUJBM0NCMEE0RDJFOUIKKzoxMEU0QTAwMEQwMjJEN0ZFNjIzNkU2MzM3QTQ0RENCNDQ3QzQ0QjMzMUQKKzoxMEU0QjAwMDRGQkVFNjlFMkNDRkRBMUZEMkJENjM5RTExMzYxN0FFM0IKKzoxMEU0QzAwMDUzRTY4NUFCQTlGQzdDMzVFOTA2RkY2QjI2NzhBRkREMEEKKzoxMEU0RDAwMEUxODlDRTQ2Qjk2NUY1QzczODUxNEY1ODNCODVFRThGNzcKKzoxMEU0RTAwMEJBREZDQ0RGOTdGN0Q5QzhGNUM5N0I2RTc2RURDQTVFODcKKzoxMEU0RjAwMEFEQTQ1QzdDMUVEMEZGNTBFQ0RGQjMzNjlERjJFMzNDNTQKKzoxMEU1MDAwMEJCMTU5MTBGNTczNjY0MEVGMDhEQ0U4MDg5NjE3RTgxRTgKKzoxMEU1MTAwMDFDQ0Y5NEUyNDlDMkY3MTkyNkM1MDM1RDBDMTM3MkI4RUIKKzoxMEU1MjAwMDczNTc3NjM2RUU1MzU2QjYzOERGOEY0RjJFNDQzOERFQUIKKzoxMEU1MzAwMDlBNTI5MTg1RUZDQkJDRTgyQ0RDOTc4NEZFQ0JDQTZDNTkKKzoxMEU1NDAwMDc3MDZCRUFGN0YyRUYzQjJDNzY1N0I3MkIxQkQyRUZBRTAKKzoxMEU1NTAwMDNDRTU5Qjc1RTVCRkIzM0U5OERDMzc0RkJEQzlDRDdDMkMKKzoxMEU1NjAwMDY2RTIyQkRBRkNGNEVFMjU2NkJBQ0ZBOUE4QzJEMzg0MDIKKzoxMEU1NzAwMDIxQ0FEN0NDRUIxOTgzRkEzMUY0NUI5MjlEODBGNzA5NUQKKzoxMEU1ODAwMDA2OTNGMkUxQkI4NzY3RjJGQzc3N0RCRTc3RkIyQkZCM0UKKzoxMEU1OTAwMDM1RjlFRDkyQ0U3QUYzREJDRkYwRkNGNjEwN0QzREIyOEIKKzoxMEU1QTAwMDlBODVFNUI3NEJCQTkxNzQzNzBFRjNEQjYzQjA5RUI1MkQKKzoxMEU1QjAwMDA0REY5QkY4NEUwN0U1Qjc0RkVBMDg4QUZDRjZGN0I0OEMKKzoxMEU1QzAwMEY5RURFRUZGNUM1MTdFRkIzMTcxRUZEQjMxMkJCRjJGOUMKKzoxMEU1RDAwMDQ5REUyN0I1NkEzNzNGRkY1REE1RjBGQkE0NTZGRDlFRDcKKzoxMEU1RTAwMERGMjcyNUVEQzI2NTYyN0QzNUZCNzdBQ0M3NzNCRTY1NUQKKzoxMEU1RjAwMDhGREQ0MUY3NTEzMTcxMEZBQTEzN0VDM0VENDI3OTJGQTAKKzoxMEU2MDAwMEE5M0UwRkE2MEVFRDQxRDI5QkZEQTQ3N0U5RjM2MUVBODYKKzoxMEU2MTAwMDFFMkIyNzdCQjA0RUE3NDdBRkM4MTZGNkEwOTA2NzRDQkQKKzoxMEU2MjAwMEU4N0Y0QkM1QjdCODBFMUJEOTY3NjZEMjNCNTczREJFRDYKKzoxMEU2MzAwMERBRTVDMEJBQTAyQkY2RDg3Mzc0RUUyNkRGNjc4RjBEMkIKKzoxMEU2NDAwMDIyNUM5MDc0QjY3QzgzNDJGQUFCODRERkU4QTcyQzZFMjAKKzoxMEU2NTAwMEJBQzdGOEE5MjFBNEI3ODJCRTJERjI5ODdERENDRjBGRUUKKzoxMEU2NjAwMEI4ODJGMUYwM0I2MzdCNTI1MDRGREVEOTlFRTkwMjBFMzcKKzoxMEU2NzAwMENCRkVENEVGRkREM0NGRTlFRTlGN0U1MjczRkZGNDE5QUEKKzoxMEU2ODAwMEZDMUZFQTY5QzcwRDNFRUM2NzBDQ0JGQ0Y5MDRBODE3MjgKKzoxMEU2OTAwMDFGMzdCQTdDQ0VEMDdEQ0MxN0JCNzc1OEMyREYyMkY2QUQKKzoxMEU2QTAwMEVCNzJFRjIxRDZERkY3MkNGMzFGRjRGNzExREYyRkVFMUIKKzoxMEU2QjAwMDIzOUVEOENGN0RDNDE2QjU0RDI1RkRFMTlDNTE3MzJGMDcKKzoxMEU2QzAwMEYxMzU2MjlEMjU0RUU2QzM3QjdFQzc3NTFBMzVGQjVGMkIKKzoxMEU2RDAwMDEyRENDNDUwMUY4QTNBNjhENEY4MTEyQzRFNkRGRDM5RjMKKzoxMEU2RTAwMDg5MEZFMjdFOTFCRUYwQjZGNUMyRDM0MkYwNENGQjBEMkQKKzoxMEU2RjAwMEMxNTM3N0NGQjM4NDUzRUYzRENGQzM2RDg0RjdFM0Y2QjcKKzoxMEU3MDAwMEJGQTAyMjNGQjhEQ0ZCQkVCRkVGRkJCRDJGNzY5RkI3OUIKKzoxMEU3MTAwMEZFOUU2RUZEQkREQ0ZERERGMzJERjczRERGQkY0QUYzNTAKKzoxMEU3MjAwMEJFN0VERjBCRjdGRDQ0N0IwRkI1RDg2RjJGRkM3RTlCQzEKKzoxMEU3MzAwMEZCN0QzMjVCRjg3N0M1N0VGN0UwMDU2OEMwQ0ZGRTExNDAKKzoxMEU3NDAwMDczRkM0MTI0Q0JFOUQxRTIzRTM4NjlENzRGMzA5MTlEMkIKKzoxMEU3NTAwMEY1OTY3MzUwQjkxREU5NUZDOEE5MEEyMUE3NTg0NTMzM0EKKzoxMEU3NjAwMEFGMEI3QzcxMDU3ODFDNDFDMTYxN0U3RjQ1NTE5MEM3MUMKKzoxMEU3NzAwMDEzOEMzOTFFMzkzRkU4OTYxMjQ1NzNCRURCRjdERTYyMTMKKzoxMEU3ODAwMDlFNjczQ0ZFM0M4RkQzRDM5RkZCQ0JCQ0ExNEE3Nzk0QzIKKzoxMEU3OTAwMEY2RkU4NjdFRjI4OEE0MUYwN0Y0Nzg2NjQ2M0RERUMwNEEKKzoxMEU3QTAwMEVGQjM4QjcwQ0ZGMTE2MzUzNTNDOEZDODQzRkU5RDU5QzIKKzoxMEU3QjAwMEQ2NDAxMkUyNzM1NEIyMjczRTI3MjE5NDZGMzQwOUYzRjYKKzoxMEU3QzAwMDhBMTRCMjA3ODU1MDFBRjgwMzhDRjNFQ0M2MjREQkFCMkQKKzoxMEU3RDAwMDMwN0ZENEY2MDNDQzkzODFFOTNCODI2M0I4Qjk4QjNGOTkKKzoxMEU3RTAwMEM5Mzk5RTExMzlDMDA3OEYyODhFRjU4NUYwRUQzRkM2RDcKKzoxMEU3RjAwMDlENEE0MkY5NjRDMTczRUQwMjNBRjdCRDNBMjdGQ0RDNDkKKzoxMEU4MDAwMDU3RENDRjFGMzQzODQ5QkZGMEZFNDQyMUZCRTExNDc2QkEKKzoxMEU4MTAwMDM2MzY4QzVFMzc5ODQ0NUVBM0VFREYyRjEwRjY5NEZDRkMKKzoxMEU4MjAwMEY3MEI4RTQwMTdDQjgwNkZDRjZGRTU3OUQ0MkIxMzNCNUUKKzoxMEU4MzAwMDg1MURDNkVGNzFCRDYzQjg4REVFN0Y2MkVFNDIxN0I3REUKKzoxMEU4NDAwMEMzQTU3RDM1NENCRDFDQjk3OUIxRjhBMjk1ODkyNzM0OTMKKzoxMEU4NTAwMDc2MkU3QjZFRDAyNTlEMjc4NkQ2Q0RGQjNGRjI0MDM0QTkKKzoxMEU4NjAwMEM5OUIyMzBGOEMyMDNGNUZBOEZGMkVCMkZCRTdENzZCMUQKKzoxMEU4NzAwMEUzOEMxNzM2QkNBRkMxQkY0NURFOEYzNUVEQzFGODFFNDYKKzoxMEU4ODAwMEQzMzA1ODdGRjBDNUExRDdDRDA1Rjg5RERFNkQxOTgzMzMKKzoxMEU4OTAwMDc0MDZGQjM2MkIyN0NDMEUwRTNFOTQzMTk5RUIwMTE3RjQKKzoxMEU4QTAwMDVCRTcyOTlBNDc4Nzg4MTM5NUVCRkNBOEYxMzBENTgzNUQKKzoxMEU4QjAwMDhENDE1RDNDOEY1NzYzOTdDQUQyRkMxQUEzN0I3MjdBNTUKKzoxMEU4QzAwMDk0MDFBRTQ4N0U5NjkzMzk1QzZGRUYxMDc5OTAxRDIyQ0IKKzoxMEU4RDAwMDBGQjI0M0U0MkQ3Njg4M0NDNTBFOTFBNzI4RjM0NzNCNDEKKzoxMEU4RTAwMDE0RTZDNjc4OEE3OThBRkI4OTQ1Qzk5NDNGN0ExN0FFQkYKKzoxMEU4RjAwMEIzNkU0NTRGMUVFNkRCRDU4RDBFMkU1MDU0Q0ExRjVERkMKKzoxMEU5MDAwMDgzQ0YyM0U0OEZFNjYxREVGQjFGNzI2RUZEMDFFQUY5MUYKKzoxMEU5MTAwMEM3MDc3OEU5NUU5MkE3OUU5QkMxRUI2NjRFMUYyRkU2NjQKKzoxMEU5MjAwMDRDRkMwMUNGMjdGNUZDMEZFQ0U3NTM0NUY1RDNGRDE3NjEKKzoxMEU5MzAwMDJGMjk3NDlFQ0FEQzQxRjM4QzBCRTQ5N0RFOTdDM0NGN0EKKzoxMEU5NDAwMDE3RDZFQjRBRjI0NTI3NjBGRjRDRTQ3QjNEMzg5MkYyNDQKKzoxMEU5NTAwMDdFQjY1ODI4RUYwN0M2QTFGQzJCNzlGRUFGQ0ZDRjJBOTEKKzoxMEU5NjAwMEY4QjNDNThGN0M0M0ZBNjExRUM5NDk5NkY3MDI5MzdGQkQKKzoxMEU5NzAwMDI1RkVFNzE2OUVCNzE1MEMyNDYxOUUxN0M2RkJFMEJENjkKKzoxMEU5ODAwMDE5RUMyMDczRjMzQzMwN0U3RjlGREM4NzQ3NzI0NERDQjgKKzoxMEU5OTAwMDE5NUVBNDVGMTRDQTEzQUJEOTdGRTQyM0U0MjM2NTM5NUQKKzoxMEU5QTAwMDlFQzc3MUZEMzI3RkE5MjZFNjU1OEE5QkQ4OTlFM0E0QkMKKzoxMEU5QjAwMEVGNjBCRUI0NUVFMDA3RUIxNDgyNzMxRjNGREMwRUZDMTkKKzoxMEU5QzAwMDVFOUZGRkRFREZGQTRGMkYwOUZDM0EyNzM5OTQzRjE1OEYKKzoxMEU5RDAwMDk2MzdCNTMzMjdDQzVGMjZFNzExRUFFN0MyNzgyREZEREQKKzoxMEU5RTAwMDQ5MjE3RkQ3RkQyMzkxNEUwQUQwMEYxRUMxQ0VERTJCQzkKKzoxMEU5RjAwMEUwRDI2MThBRUNCRkZCMzg0Nzg5OTgzRjU3OTBDMTE4MzUKKzoxMEVBMDAwMEZBMEJFNTdEOTNFRjIwOUNEMEVGNzQ5QjhCRkI0MTE5QjMKKzoxMEVBMTAwMEJGQjdBRTY2ODZDRDg1N0M0QkY2OEZGN0U1M0U3RjgxMkUKKzoxMEVBMjAwMDcxOTZBNzU0QkM4OUVCNUY1MUNGRkQ3REIyQkQ1QkUxMTAKKzoxMEVBMzAwMEZCRUE3RDg4RTM0QkNEMkJFRjdGNzQzNzhDQjJGQ0I3QkMKKzoxMEVBNDAwMEI5ODVDOEE3RTVGNzdBMzg3N0Q5NzlGRURFNjJENTRGNjAKKzoxMEVBNTAwMDcwMDRGODdFODBGQkE0RjdGMzVEMjk1QzJGMzc3RjFBRTIKKzoxMEVBNjAwMEUwNDVGNzMwRjZGNTgzMDMyMjg1RTk2RjE2RjlGRDcwNkUKKzoxMEVBNzAwMEVERkQ2NjE2RkM3NzE4NjBCQzE2NjFGN0I0MDhCQkE3RkQKKzoxMEVBODAwMEQ1MjRGRTlEMUM5RDFEREMxMkUwNzE0NDJEODk2NjhBRjMKKzoxMEVBOTAwMDEzNjJFMkRGNzU5MDcyN0ZDRERCM0NBRTY4NEQzMkEzMkUKKzoxMEVBQTAwMDc2OUMxRkVFQUYxMkRDNEI3MkE4Rjc5RTJBMDVFNDJCNzIKKzoxMEVBQjAwMEMwRUY5NEMzQTNFNkEyMUZEQUIzOUFFNDkyN0EzNUVDQ0UKKzoxMEVBQzAwMDJGRkE0REZGNzZBM0IwRTdCODlDMkIxNjcyQUQxOEZCNUEKKzoxMEVBRDAwMEMxNzVFNDBDMjQ3OTU3MjRDNjFENjNBRDI3N0Q3QTJDQkIKKzoxMEVBRTAwMEYzMEFGRjhFRjA4MzNDQjA5N0VDQzBGRjBEOUY0RDYxQTEKKzoxMEVBRjAwMDc3NjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMEVCMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzN0EKKzoxMEVCMTAwMDhBRjkyQzE4MTg1NjU5MzEzMERDQjA2NjYwNzBCNDYxMkYKKzoxMEVCMjAwMDYwRDg2QzhFOTBCQjIxOEU2MDUzMTMzRjk3QTc0Q0ZGMkIKKzoxMEVCMzAwMDNDNDkwNjg2MDU0MEJDMDg4ODk3NDg5MkFFRkZCNzE2NDgKKzoxMEVCNDAwMDgyNURBQ0NBQzBGMDA3Qzg3NzAxRDI1RkQ1MTkxODZFRDQKKzoxMEVCNTAwMDAzRDk3RjgxQjgwM0M4NUYwM0M0M0I4MDU4MDRDOEJGOTIKKzoxMEVCNjAwMDA5QTQ5OUQ1MTgxODlFMDBFOTdGNDBCRTM0OTA3RDQ0RDEKKzoxMEVCNzAwMDBEQkJGOUZGQjVGMERCQkY1RDAzOTVGRjEyOEQ3RjQxNDMKKzoxMEVCODAwMDFEQkZGRTI4NERGQ0YyQUYwOUM4NjNDMzVFRjZFNEM3QTMKKzoxMEVCOTAwMDQ3MUYwNTdBMDcwMkFGNDc0QkQ3RTJBNjBDMEM3QTY2RUYKKzoxMEVCQTAwMDBDMEM4NUQwQjRCRjA2NDlCRTE5MjgyNjYxMEE2MTdGQzYKKzoxMEVCQjAwMEQxMDNFNjE3MjA3RjI1OEU3Q0YxMTUyOENGMEY5NEVGMjcKKzoxMEVCQzAwMDM3Qzc2RkJGMzgzMzVBN0FFMUMxNTRGMzk2MDlDMUFFRTMKKzoxMEVCRDAwMDE3NDI5NURCMjQ4Q0E5RkVBNzA4MDMwMzAwRTkyODUwRkYKKzoxMEVCRTAwMDc4RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEVCRjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBGNzQ1NEQ1NEEKKzoxMEVDMDAwMEI1RjdCOTczRUZEQzk5MjQ3NzI2OTMxMDYwNDIwMjRFNzIKKzoxMEVDMTAwMDEyRDQ1ODAzOEMxODMwMjYxM0I4MjEwOTg0MjRFMDAwM0MKKzoxMEVDMjAwMDdFMzQ1NjVBMDdFNDIxQjY0MEEzQjVBREVERjM5NUUxMjUKKzoxMEVDMzAwMDhGMzE1QUFDRDBGMkZBRDQ3NjdEREY0MEQ1RDVGNkI5MTMKKzoxMEVDNDAwMERFMEE4QTRBNDM0MjI3OTA1MDI0ODgxMTJERDY2QUZCNTcKKzoxMEVDNTAwMEEyNzZEOUY4MUFFRDgwQzFDNkVGQTM4RkVGRUM3RENFNzYKKzoxMEVDNjAwMEM5Q0MzRDk5NDk0MkY1QUQ3RTdGNjRCNTM3RjdERTczNzcKKzoxMEVDNzAwMENGRDk2NzlGQkRGN0Y5RUQ3REY2Mzk2M0I3Qjk4OEU3NUUKKzoxMEVDODAwMDBBNDIyRUMxN0YwQjA5Rjk1QzJFMjE2NDVFRkMyQTlFOEMKKzoxMEVDOTAwMDJGNzI5MjcwQzYxQzQyQjI5QzA3N0E2N0U3MTBCMkQ4RjYKKzoxMEVDQTAwMDUwRkQ0QjdDODQ0Qzc1QUVFRDI2QTU4NDA0ODhDM0U3RUIKKzoxMEVDQjAwMDUwMDhFOTUyNUVFODlENERFRjhGQkJFQzdFMDc4MUZGNjcKKzoxMEVDQzAwMEVFMjI2NDNFMjE3NzNCRTk5RkI0RkNGMTczRjQwQUVGMzYKKzoxMEVDRDAwMDNGQjE0NTA4MkQ1RkFCMzYxMjA1QkU3NzJBN0U4NzBGMDAKKzoxMEVDRTAwMENBOUJDNkIyMjk4NEQ0MTBGNkRGODI3M0E0NDZBMUNGOTIKKzoxMEVDRjAwMDZCQkM3NzM0OTJEOTg0NTQ3QjY4QUQ0RUY2RUUxMkZFMkQKKzoxMEVEMDAwMEJGNDkwODJENUY0MTU4RkRBNkQzRkFCRTgyRUMzQUE3NTEKKzoxMEVEMTAwMEJBRTEyRUE2MDY2N0QxRkEyRUVBRDZGN0RFMjU3RjI0QzEKKzoxMEVEMjAwMDZFMjg5N0YwQkM4MEY2MDNGRUEwM0NCODhBQjg3MkRFNkQKKzoxMEVEMzAwMENCQTA3RkRGNDA2RUI4QTREMkFCMzY4OTkwMUJFMzdDQkEKKzoxMEVENDAwMDkxQUY4NDg0MDk5OTRDNDgzQkZGNUUyM0MxRDk3MDRGMzEKKzoxMEVENTAwMEM4MzNEODdFQjZFMDYzNUQzRkYxRDI3RUU3OTQxMUZGMDEKKzoxMEVENjAwMDEyQ0E4N0E5NzU2NjE3QTE3Q0FEQThEMTE5MUY2QkU3RDgKKzoxMEVENzAwMEU3RjYxQjg0RkNFMDgzQjYzQzUyNDIzRjhGNkM0MjNFNzgKKzoxMEVEODAwMEU2NzAzRTc2N0RGMEZDOUI1QjgwNkY3NTA0Rjk3NkQ4NkIKKzoxMEVEOTAwMEVFQ0YwRDk2OENBNjI3NTA5NzlENDY2ODNEN0I4MjQ3MDcKKzoxMEVEQTAwMDMzQjAxRTQyRkVGM0QyMTQ1RTRGMTEyMTFEQzFDMkNDRkUKKzoxMEVEQjAwMDUwOTJFRkM0RjU5MUFEMUU0MjFDRjFGQkREMjZBOTZCMEMKKzoxMEVEQzAwMDMzNDY5NzdCMUUwNjczMUU1NEJGMDZFOUFDRTBCQ0ZDQkQKKzoxMEVERDAwMDgxNDI5QURBQjBERDI2MUNBN0MzOUNGRTZFRjM2ODQ2MUEKKzoxMEVERTAwMDdGMDlCQzhGNjZEODY4M0ZDMkU3NkNFNDQ5NUE0NUM3QzMKKzoxMEVERjAwMEUwQTI3NEEwNzdCQjY5OEJDMkYzOEU0MTNEMDJGQzIwNzgKKzoxMEVFMDAwMERFQjZCQzE1QjM0NkQzN0ZGOERDQkFCOUQ4QUZEMDI2OEUKKzoxMEVFMTAwMDRCQkJERjFGQTRGRDM1QTA3RkNGNjQyQ0E2RjU5QzFGNDQKKzoxMEVFMjAwMEI0Nzk1NDNBQUU3QkY4RjNDM0ExQjYwQzBGN0MzNzkwOUIKKzoxMEVFMzAwMDhERTNGOUM4NTZGQUY3RDVBOUY5RjFDODgyMkYxNzg2REMKKzoxMEVFNDAwMDBDMjhFN0I0RjI2M0YwRkM4OTIyM0E2RTFEN0IzNTNGNTMKKzoxMEVFNTAwMEY0NkIzQzdFN0U5RkI3MjNFRUIzRkREMTZBMEZBRDM3RDYKKzoxMEVFNjAwMDEwRjMyQkEwMTdEOTgzODQ0QzJBMDBCREU4MzhFNjg2MUUKKzoxMEVFNzAwMEYxNkQyNEE4NDc4MUUwQTJCNDJCNTkzRkZDQUEwRkRFMTQKKzoxMEVFODAwMDlGNTI0MTNFMDI5RTI4RjY2Mzg0MUVBMEVGNkFBMEQzRTMKKzoxMEVFOTAwMDhCRDc0Nzc5N0IzRjg0NzFDNEZFNkQ0RkJCOEFEMjdCOTEKKzoxMEVFQTAwMEJFNENDMzdBRjY5QkRCQUIzNEFDRUY2MjU0MDU3OURDMjUKKzoxMEVFQjAwMEM0RTQyOUM3MTdEQTY2MDdGRUFGMjdGRUIwMEZFQTI1QkMKKzoxMEVFQzAwMEQ4RUZGRkNFRkJGRjYzNUU5RjY4QTc2MzMwQkI0QTAzQUEKKzoxMEVFRDAwMEZBOUE4ODFGRDRBNDU2QkRBRjBCQkUwRjZDNjRGNENGNTIKKzoxMEVFRTAwMEI4Qjc1OTAxRkU1RDcxNUYzRjVFMjM5Q0NFRERGMDNERkEKKzoxMEVFRjAwMDJEOTBERjFDNTM4MDZGRDNFRjg5RTI3NUVGQjZCN0JBNjAKKzoxMEVGMDAwMDgwQkVDQzlEMjQwRDZDQzE5RTFBNUIxNjdDQjc2N0YxNDgKKzoxMEVGMTAwMEI0MzQ3OEVGMEU1MkM1QTdGNjIwRTBGN0RDRDU0REZCRjAKKzoxMEVGMjAwMEIzQjc0NjQzM0FGNzBFNTJGRUQzNzJFRUIwQzcwRjdBMkMKKzoxMEVGMzAwMEVEMEVGQkY4RDVFRjg3RjJCRkU0RkMzOENDREJFREU0NTcKKzoxMEVGNDAwMDc0QjhDMzI2MkZENzVDMDJFNURDRTEzMDVFMjNCQzlGOUEKKzoxMEVGNTAwMEM0QjcxOUU1RUU2RTJFNzdCRkI0ODczRTA3N0NDRjE5OTQKKzoxMEVGNjAwMDI0NUU0MkY1RjlGMDg3RjVCOUQwQUVBODVGMkVGRkQ0NDQKKzoxMEVGNzAwMEUzRkZGMzdBNzgzRjc5OTBCQzZEOUYwREQ3RTg1QTY4MkMKKzoxMEVGODAwMEVGNkFFODg3MUJFRUZCRDYyQTY4QTcyMkE4NDdFNjQ1NkEKKzoxMEVGOTAwMDFCMjFDNTcxM0I5NTMzMUM1QzdBMTNEQUM3NUFENDIzMDUKKzoxMEVGQTAwMDYxMDcyQTA2NzU5QjkyOTlBODY3MzVBODA3N0JCOTFFNDkKKzoxMEVGQjAwMEQ0MEM0NjUxNEVBODlFMURCMzUxM0U4NTNGQTA3QTQ2QzMKKzoxMEVGQzAwMEU1RUI3MEQwODZFM0ZENDQ0QzQ3M0I0QzhBQTM3OTJCOUMKKzoxMEVGRDAwMDVDQTNGNUE4RTNEQzg2QjlDMDZGQTE0RkEzRURDN0ZGMjIKKzoxMEVGRTAwMDFCRkFCNTk3RjYyMzk0QzRBRTg5RjY4NEJFQzlFRkM3NjEKKzoxMEVGRjAwMEQ1Mzc0RjE4RjVBRDgzRUE1QjE4RjgxOUI0QTVDRDA0RTEKKzoxMEYwMDAwMEZENkJCNUExOUU3ODZCREFCQTk4QkU2QzQyN0RDQjU5ODgKKzoxMEYwMTAwMENGRTg5OUJBMjY4MjdBMzA5RURFRURGNTc5QUEzNEE4MzcKKzoxMEYwMjAwMEJGODlFOTY5QzdFMDNCREIxQzMwMUU2QjA4QjcxMzE3Q0IKKzoxMEYwMzAwMEJCRTAzRTcwMkZEMzZCNTlDRjY0M0RDQzBDRjRBMTdFNjYKKzoxMEYwNDAwMDE2RUM4QzExQjhGQTc2MzRBMjVDRDM1NkQyNTBGRjUyMkIKKzoxMEYwNTAwMEU4NjEwN0U4NjFFOUZGM0Y3QTU4MjNFNjcxQ0E5ODJDMTYKKzoxMEYwNjAwMENBRkZGQTE4NjE3OEM4QjMwRkYxNTBBRDhGRTNBMTgyREYKKzoxMEYwNzAwMEQ3NkZGRDJBN0RGRkEyM0QwM0M3RjVDNUM5RjQyMURFODgKKzoxMEYwODAwMEFCMTEwMjM4RTNDQTdGNTk3MzM3MkQ1RjlGMjNGMENGNEUKKzoxMEYwOTAwMDQ2RDRFRjNBQUVERkM3RTAxMUQ1OUZBQTdFODVDQ0NGMkMKKzoxMEYwQTAwMDg2NzJFRkVFQUVBNkU1NEYwRTEwM0ZCQzNBRTk1MzExNjMKKzoxMEYwQjAwMDRGNzUwRjEyQUM0RkU4NjcxREVGNkYzN0JDMDc3OTFCMTgKKzoxMEYwQzAwMDI2MTFEMDRGODEyMzZBQjk3RTlGQ0M2MUVGQkIyRjEyRUUKKzoxMEYwRDAwMEI0MDNBMkZDNDlBMjQ0NTQ3QTdGOUNDQkRGRjlFMkRCNjMKKzoxMEYwRTAwMEZGODdCQjkwOTAzRjZGOEJDRDhFRDJFN0ZGNkU4QjdERkQKKzoxMEYwRjAwMERENDY4QkZFN0U5OUVGNjlCODFGRTBFNUZFODNDQkU5MjQKKzoxMEYxMDAwMDIwQzcwRDI3QUUwREREQTQ1MEZDNTM0OTYyMUJFRTg2Q0YKKzoxMEYxMTAwMEVGQkM0NThGQ0MyNTUwREY0NzMzMDg2NUVENTdBRkZFNzgKKzoxMEYxMjAwMENCN0JBNDEwMjg2OUQzODNBRUI4NUU4OUZBNDQzRDJGMDcKKzoxMEYxMzAwMDc4NDM0RDBBMUQ4RjgxQzhCQjZFMThCRjBGMEU3RTM0RjkKKzoxMEYxNDAwMDFCQUVDNDk4ODQzODZCM0MzQzE2MTBFMzE1RUJEQjAxMTYKKzoxMEYxNTAwMEI4ODNENDUwQjk5ODFGOTc4QkE5QjFCRTYzODg2Mzg3RDEKKzoxMEYxNjAwMDE4RkUyMjc1OUI3MTFDMkEzRDhDNEY1RDE3Q0VFNkMxOUYKKzoxMEYxNzAwMDc3NDczODVEOURFN0ZBRjJEMDFFRDY1OUVCRTlCNEY3MzAKKzoxMEYxODAwMEFGMDlCMkZBRjFGQjgwODc4REEzQTBBNzVERDgwNzQ1MzAKKzoxMEYxOTAwMEUwMjUzNjVFMDFGRTdEQjlENjM3NjkwRUU1N0ZGOTA5QjcKKzoxMEYxQTAwMEQ1QkY4RDdFNTczRURDNUY0MzkyRDg5RDg4OTI4NUZEMEEKKzoxMEYxQjAwMEFBMThCMENBNjdFNzg1RTMyQUYwODVEMkFCMDJCRDk1RUQKKzoxMEYxQzAwMEIxM0U5NUQ5NkQyNjU3MDEyRTU3OTVCMTMzMTY3QjJFM0EKKzoxMEYxRDAwMERBRUY4QzlENjk5ODAzRjY2MzgwRDlBNzU0N0NFREU2M0QKKzoxMEYxRTAwMEZEMzhDQUM3RkI4OEQwNEYxMkM5MDBGQTdCMjhGRDBGMzMKKzoxMEYxRjAwMDhERjE3REFENDdCNUQwMkRGNEFEREE5OTYxQzFFNzBCNDYKKzoxMEYyMDAwMDg3QjMyNUJDNkZBNTc3ODExNjQ1N0UyRDAwN0U5MUQ0RUUKKzoxMEYyMTAwMEZDRkFCNjkyOERGNTJGMUNGRURCRjgyNURCMTE1MTZGNDEKKzoxMEYyMjAwMDI3RjBCMTY0MzQ1RDA0ODQ1QkQwQURGRTlGQ0ZENzRFMzAKKzoxMEYyMzAwMDZFNjdBOEJGRDIwREZBNEFGQTBGQThBMDhGQjVBQTgxQUYKKzoxMEYyNDAwMEY2QTVFMjY2MjVFMjQ4QjAyRkEyOUYwQkI5NUU0REJENDAKKzoxMEYyNTAwMDQ4RDA2RTk4MDMwNENCMUQ4RTMxRkI5RjhBQ0VBMzVCRjIKKzoxMEYyNjAwMDRERUM1RkQ2NDVERjRFOTg1NzE3MTlDMTdDRDA5QkFFNDkKKzoxMEYyNzAwMEM5N0Y2NDdBQTY5QzQzRkQzMjJGQkVEN0ZCNTVDQUZGRDcKKzoxMEYyODAwMDUzNUNFRjBFNkZBREMzRUJDQjVCOUI5MTJGMDE0MzcxRDIKKzoxMEYyOTAwMDVEMEY1NENENjRGQTU2MkRFQzFBOUY0RjRFNzBGQjcxRTIKKzoxMEYyQTAwMDlDQ0YzM0FGNkUwREUxRjM1N0I2NkVFNDdDNjVGRDU5MkMKKzoxMEYyQjAwMEM0RkIxMzM1QUEwRDE4Q0Y2RTY3MTFDRUZCMEIzNTUzNjcKKzoxMEYyQzAwMDRCRTY1NzU1QzRBQzcyNzRDQzQ3RjE4RTAxNzhFQkE4NkQKKzoxMEYyRDAwMDcxM0RDQ0M3RDQzRjQ2QkNDMkVCMTlGOTJFNUY2OTUzRDAKKzoxMEYyRTAwMEU2QzRFRkNGMEE1Q0M0Q0JGRENBRkYyQ0YzRUI2RUNFQjUKKzoxMEYyRjAwMEMwRjlBMDIyMTZBQTA1QkVENjM2MjlDNDA5N0M5RDNFQjcKKzoxMEYzMDAwMEFCMzE4QjNFRkY3QzkzNzU5QzQ1N0QzRDM5RUY0RTAyQzIKKzoxMEYzMTAwMEJFNTcwNDgyNUE5MDVFNkJBM0I3NjgzRTU3RUE3MUU4MDUKKzoxMEYzMjAwMEQxODI4REQ3RTFGODMyRkRBOTg4RjVENzk4OTQ4RTI1NDIKKzoxMEYzMzAwMDlFODI0NkY0NDc4NzM1MUJEOEMzNDYzQUNGRjVBMzVFNzUKKzoxMEYzNDAwMDc4OTBDRjYyRkUzODk1QTNENjQ1MDBFRjBERUVDRjAwNDIKKzoxMEYzNTAwMEZBQkIzREVBNjRCODZFODdDOTgxQ0E1MUVENDU4QTRGNTAKKzoxMEYzNjAwMEU3OENEMUZFQjA0Njc5NEUyQkQyQTJDQzVGQTNGNUMwN0MKKzoxMEYzNzAwMEI1Qzc1MEY5RjMyMDhFNDcwRkFEMTc5RTc3RkRGNTg3N0YKKzoxMEYzODAwMDhENzM3MzAwRjdBQkM4OUYwMEY5REFBOUVCNjBGRUYyNEEKKzoxMEYzOTAwMERCOTFERjQyNkY4NTFDNzQxQjZDN0VFQzg5NTlFNzQ3NUIKKzoxMEYzQTAwMEM0QjdGNDU1Q0ZFMEY3NkY1RTA5RjMyM0IxMjM1RTEyQzMKKzoxMEYzQjAwMEY4NTc3QzdGQzRCODdERUYwQUQwM0JBMkZBMDkxOUZENEIKKzoxMEYzQzAwMDdERjA2NkQ1QTI0N0U1N0VBQjlFRDU5NzRFQjJEQ0Y3QzEKKzoxMEYzRDAwMDBDQUVGQkYxNUREMDVFMkM5REI1MTdERTY0QTFGNzg4MDUKKzoxMEYzRTAwMEMxRTZERjlFMDhDMzA3NjJCRTE2RUYwMzQ0RDY2RkI5QkQKKzoxMEYzRjAwMDNGOEI0RUY5QzFDRTUwRjkwNDNCNTNGRDQ5QTk1MTQzMEYKKzoxMEY0MDAwMEVCQUJDOTUxM0RBMDk3QzczQ0RCQ0U4MkJFN0MxMEY4NjgKKzoxMEY0MTAwMEY1Mzc2MERFQUQyQkIxRDJERjMxMzg5NzdERUY1NTkxRjYKKzoxMEY0MjAwMEJFRjY5Q0VCRjFGRUIwRDcyRUZBNkYyQzAzN0FFMDJGREMKKzoxMEY0MzAwMEZBRkUwOEU5N0Y3NTM2QUQ3NzU1QzQ0QUQ3OEE2MDg2RUIKKzoxMEY0NDAwMEU1N0U3M0REMjQ4OTZFNkI1Q0E4RkFFMjA2OENFRjJDRjYKKzoxMEY0NTAwMDJBRUREQTkxNERFRkNCQzExNDE1NDE5Q0M5NjFGOTJFMEIKKzoxMEY0NjAwMEUwQjRERTk3NDM3Qzg3N0VCNzgwNDhDRjJGMkVDNkI4QTYKKzoxMEY0NzAwMDRFMzlDNDc1QzQ3M0UwQTc2NEM3RTkzREQyMjFFNjc5NkIKKzoxMEY0ODAwMDU5M0VDNTdDOUQ0QTdFREI2RDY0MjNDNDQzQzhEMENBMDcKKzoxMEY0OTAwMDcxRTI0MkRCOTNDRUY3NDREQkFCQzBGODk3NzM5Q0QwQUMKKzoxMEY0QTAwMDZFNkZDQjgwRTc5NUU3OThGRDI0NDNEOTQ5RjE4RDNDRjkKKzoxMEY0QjAwMEVGMTNGMjM1OTQyM0MxNEZFMjA5OTM5Q0Y5QzhDN0E0MTYKKzoxMEY0QzAwMEZEMTI3QzY5QTVDMzcyMDlGMDBFQzc0OUY4NzExMkZEREYKKzoxMEY0RDAwMDk2QkY5RjAyRkE0REZCQjNCOEU5NDA4Njg3Q0E1Nzc1QkQKKzoxMEY0RTAwMENDODZGMkQ1NjFFQzQxRkQ2Q0Y3QUI1QzFGRkIyRjI1QTAKKzoxMEY0RjAwMENBNjc0MzUzRDUyOTg4MEZEMkYyMDRGNEI3QzNCODBCQjcKKzoxMEY1MDAwMEY1Mzc3ODFERDM1RkFBREZBODhGMDFBQThGODk3ODU4QjUKKzoxMEY1MTAwMEM4QkYyQ0VGMDMyNDdDRjY3QTY4OTc3Q0Y0REEyQUMwMDMKKzoxMEY1MjAwMEMxMDc1OUJCQjJERTUzQkQ0MzNEM0U0RkQ0NTQ3QThFMjIKKzoxMEY1MzAwMDdBRDk0M0Y1MzI1OTNCOTdBRkU3MzYxM0RBM0Y3RkQwOUMKKzoxMEY1NDAwMEM1NzBGNzI4M0Q3RkI1NjYxMkI0RTc1NDU4N0I5RkIxNkMKKzoxMEY1NTAwMDlFMUZFMUZBMjNDQkY3Njg3RDVGNjQ4MEZEM0Y2RkM4OTMKKzoxMEY1NjAwMEZBQ0VFQ0RENjJEN0JCQUZDRTY2QzUyRDdBRkY1OUU5ODYKKzoxMEY1NzAwMDdCQTA3ODlGMEE1MDQ5RThGMTc4RkFGRUI3RUE3OTRBMDkKKzoxMEY1ODAwMEZEOURBMDdFQ0JDRkI3RDgxNEE2MkYyOUY0MzNBRUY3QkMKKzoxMEY1OTAwMDYxMkNCN0MzNDU4QTIxM0VENkFFQTRGQkI3MTc4MDlFMjcKKzoxMEY1QTAwMEIzNzg4RDVDM0U1REU1RjUxMjY3RjgwRkI0M0Y2QkE5NEIKKzoxMEY1QjAwMDUzOTY0OTU5QkQ5OUY0Q0Y4MDgxNTY3MzdEQTg3NzVCRTYKKzoxMEY1QzAwMDZDRkQ1M0UwRkVDRjI0MzZFNTVBMTVGQzA2NzIwOEUyQzYKKzoxMEY1RDAwMDQwOEE0OUM4QkQ5NDI0QzVFNzIxNkJBOEEzRDVBMjg2NUIKKzoxMEY1RTAwMDJFRDk2ODc5NjUyMEZBODkwMjAzNzkwRkYxMDFBRUJCNDMKKzoxMEY1RjAwMDVBMDlEOTU0RkFEQzQxRjk2M0QwRjI0NDNCODM3ODhGM0QKKzoxMEY2MDAwMDIyMjAxQ0E3RTU1QzA5OTYzQjhEMjhDNkNGQ0JFQzgzNTYKKzoxMEY2MTAwMEZENDI2RUQwNUY1QkUzNzlFRjVBNUEyRjg5MkE5N0FFOEQKKzoxMEY2MjAwMDhERjdGMzI5N0IyNENGNkY0MDNGMjMzRkRBMDJGMUE2MDkKKzoxMEY2MzAwMEM3NzRGRjkzQkVEMUZERkNDNDI2RkM5RkNCRUJFNzI3MkMKKzoxMEY2NDAwMDU0NTY5MDlGMzZDNkNGQjAyREREMEZGMTJDQjk3RTUzQTYKKzoxMEY2NTAwMEJERUNGQUNGQTZEMzZCMDVGMDcxQ0U2ODNFMkE4Mzk0MzkKKzoxMEY2NjAwMDdGQzAwN0VEM0YyRjgxQkY1N0UxNjU3MkE1RkU1OTM3NzcKKzoxMEY2NzAwMDIxQkU0MjU0NjdFNENBMjQ3NEFDRTc3NEI0QThFNjZDQjMKKzoxMEY2ODAwMEUwQjc1QUREODZGQzM5MENFMzZGMDBGRjcyQzgzNzEyMTEKKzoxMEY2OTAwMEU0QUI1MkQ1QjE3RjZBMDM2OUM2Nzk4NTQ0NkQ2MDM3QTIKKzoxMEY2QTAwMEM2MUIwRkJCNDYzNDE1QzZCMUVGMTJEQURCMTY0RTlGRjAKKzoxMEY2QjAwMDgzM0UzN0U2QTYxRTJGQjVDMTFGOEJEMjcxMjI3RjY2MEYKKzoxMEY2QzAwMEUzNzQ3OEE5NTUyRUJGQzZFOUZGMzJEMDM1OEY5OTIxNTIKKzoxMEY2RDAwMEE4QkZEQ0NCRUM5MEZBMjdCRDM5OTI0NDhFNzcwOEZFQTgKKzoxMEY2RTAwMDczN0VDOUU1MEZERkMyRkEyRkNBN0Y4N0NCRkQzNzJGQTQKKzoxMEY2RjAwMDVGRkU1NzRGMkQ0QTNENkU0MkRFOTVDMUUzQTlDNkFGNkUKKzoxMEY3MDAwMDM5RDlGQzM2NEJCNTcxM0FDMkNBNDRGNEExNTI2NTcyN0MKKzoxMEY3MTAwMEE5NTZEMzcxODNGRUQ1NUFGOUY4NkRDRThGNTVCQ0RFNEMKKzoxMEY3MjAwMDJGMkE2NjMzQzhDM0Q1NEFGMDZFMTVEQUE5RTk0M0ZEMUUKKzoxMEY3MzAwMDJCODQ3QUU4RjM2Qjg5NzkwRjNDQTdFRkJGMDFFNTQ4OEEKKzoxMEY3NDAwMDlERjUzRDdERkUyRDdDREVENDg3RUI0QUUyNzk5NzYyMDQKKzoxMEY3NTAwMEZFMjNGRkVFOUZCMDVFRDNGQTlFQ0FFMTU2Nzg0RUU1RDcKKzoxMEY3NjAwMDg1QTg3M0UxQjkwRkU5QTE3MjQyOUM2MDJGRjZEREZFMTYKKzoxMEY3NzAwMDA1RTAyQkZERkU3RUFDOUY5Q0IxN0M2RjA3MDM5MUNEMTUKKzoxMEY3ODAwMEFFQ0E1Qzc2N0QxQ0U0OEVGQjk5M0I5QTRDRTRBQjRFOTIKKzoxMEY3OTAwMDlBQjkxRkNDRTZBRDA1N0NERTcyODIwMkMzM0NFQ0QxODcKKzoxMEY3QTAwMDcxNUVENEQyQ0M0ODk0NUVCMzNENTExM0UyNzg5MzQ4NTUKKzoxMEY3QjAwMDVGMThGQ0E4RDVEMjdDREJCNEM2M0FCRjdDNjFCRDc1QUUKKzoxMEY3QzAwMDdFNTlCMzI5Q0Y3MkZGQTU3QjhBMkNGN0ExRkJBRUI1N0EKKzoxMEY3RDAwMEQ0Qjc2RUU3RjU5NkZCRjVCQjJBMkNGNzFCRjY1NjVCMDQKKzoxMEY3RTAwMEJFREZGOEUzMDZDQkZCMkYzRkIxQ0E3MkJGRTlFOTVCOEUKKzoxMEY3RjAwMDkzQUU0QjhBRjlFRTQxREJEQjlCQzAxRkRCMDFBRjEyRkUKKzoxMEY4MDAwMEU2MEIyREJFRUU2ODYzMzhDQ0ZBMUQxNTNGOUYzNjFGMDAKKzoxMEY4MTAwMENBMTEwQzI5Qzg3MkFBNDlFQjk2QUY4RkU4Q0ZERDk2QzIKKzoxMEY4MjAwMEY5RjY2OEI4MjBDNzRCNTk2QTE2NjgwNkM2REJDMjY2ODcKKzoxMEY4MzAwMERGQ0MyOUYxRjlCQ0RBNDdFNzYzMzdGOEUxQzlENzU3REMKKzoxMEY4NDAwMDM1NUVBRThBRjQ1N0MzQjg5OTlBQjU5Q0M2RDc1OTBEQTAKKzoxMEY4NTAwMDdGMENFMzI5RjIzQUFCRTY2M0YzQjQ0Q0VGMTlENTk1OEMKKzoxMEY4NjAwMDAzNzY4OUQ2RURDM0Y1NTUyMzdCNDJFQkFCRTNGNjhGRTgKKzoxMEY4NzAwMDVBQzIwOUY1OEZCNzU3MDVGRDJDNEFEREFGMDVBNTMxRjIKKzoxMEY4ODAwMDE1Qzg5QjY4QkZFMjc0NUE3MThGNThERjVFQzY4QTkyQjIKKzoxMEY4OTAwMEYyODIyNzMyODBERTY1M0U4Njg3NDgyOUMzMzc0RUZBREEKKzoxMEY4QTAwMDhGQ0RCMzhDRkYwREJDN0NGMDFFOEYxREUyQzhDMTFBM0EKKzoxMEY4QjAwMDJCOUQwRDFDM0Y1MTNERDRDMDRFOTQxNzRCRUY4MUNFNzQKKzoxMEY4QzAwMEQ5NTBDRThBOTNCQUI5M0NBQTFBNUZFNzlFNEZFNkUzQjUKKzoxMEY4RDAwMDM4NzBCRDVEMjFGNEI2OTZDNTI3ODgyN0Y5RkE3N0ZEMDMKKzoxMEY4RTAwMDMwMkQ4NDgxOTg4ODI1NkZFMDY0NzE1MTNBN0NCN0FDRTMKKzoxMEY4RjAwMDk1RjgxQzE0OUYzQzM4NkY5QjY3MTFENUZGNDZEM0VFREIKKzoxMEY5MDAwMEFGQTNBNUFCRkQyQzFFNUU2RkFBQjhDRTdCNDUzMUJCNjUKKzoxMEY5MTAwMDZGQUM1MTIyNEIyODdERjVBMTNFOENFNzM1QUU4RjZDNDQKKzoxMEY5MjAwMDgzRUJCNDhENTEwREU5OTBGOEZBQjgyRjkyNjU1M0UzNEIKKzoxMEY5MzAwMEZDQ0RFM0ZDQ0ExMzdDRTU3QzE0NzY3Q0RBMjZFQjM4M0MKKzoxMEY5NDAwMDM2OTY1QUY5QjU5Q0YzNTNFNkYzNzJDRUM3RTUxMjFGMEIKKzoxMEY5NTAwMDQ1RkNBQzQ0RTNGMjJDRjE3MTE5QzdBMUNFNzk0NTYzQTMKKzoxMEY5NjAwMEZBNzU4RkYzMzg5NzkwMUY0RDlBRDc4NEZEMTg5OURGNTkKKzoxMEY5NzAwMEI4RkNCNjgwMUQwNzlDRTdFMTM4ODVDRjdCNTUzMzE1NzEKKzoxMEY5ODAwMEY0ODM2QUJEMEFGMkI3NzZFNjNFNEI3QzczQzk4ODVDQTUKKzoxMEY5OTAwMDMyM0E2QkY5Nzg5N0U3QkY4QTcxQ0RDRTFDM0VFRTk0NzAKKzoxMEY5QTAwMEFGQjVGM0UzNzJEODMwOTNFNTYzRUNFNEZERUVFMDM4RjUKKzoxMEY5QjAwMEJBOURDNzJENUJCQzY3RDRDNEI4NTdDNzhDQkU3QzNGMEIKKzoxMEY5QzAwMEJEN0ZFOTQyREY5QUFGNTE3QTFBRjMxNTdGMURCNDFCNTAKKzoxMEY5RDAwMEUyNzE1NjVFRUZFMUVCQjZFNTAzN0QyN0NFRjU2MURDMjMKKzoxMEY5RTAwMEU3QTU5Q0EyMzFFMzg4MDJCRkNCRjI1MEVFMEZENkMwNTAKKzoxMEY5RjAwMDdDQjIyNEZBMEIxNUZBNUYxRUEzNkM1MzAwMjc0NzM1MUYKKzoxMEZBMDAwMEMwNUY4RERFQkIzNThDNzNFNURGQTU0MUJDQjEzNjdGQjEKKzoxMEZBMTAwMDVGMzVCNDFCMjBBMURENTUxMEY3Q0FCMUZCQTMzRTg4QUEKKzoxMEZBMjAwMEZCODQ3N0JBNDE5RjRCOTg1RTZFQTRGRjEyRjU1MkQwQ0IKKzoxMEZBMzAwMDVEMzFEOEFDMDE5RDRCN0M5MkZGQzJFNUE4RDYyQjNEMzEKKzoxMEZBNDAwMDlGQjkwNEU1MjgyMEM5RDEzRDQyMEZBRjI0NTcyNkNBRUIKKzoxMEZBNTAwMDhGODgxN0U4RTcwQUI5MUUyNjk3MUYzMTBFRkZDRUM3MTkKKzoxMEZBNjAwMEUxNzczQzdFRkMyNjhGN0ZCRUIxRDU4N0Q3NUY2RDJEQjkKKzoxMEZBNzAwMEM2RTczRDVCRkQ3OEZGRkFENjMyQkNGRjM1OEZDQkJFQzMKKzoxMEZBODAwMDBBNzE1NjhDOTMwNjc5QkNCNTA5RUY3Qjc5RkM1NEM4OTIKKzoxMEZBOTAwMEU3MDM3Q0JEQTM1NkVEQzBGODYwODMzRkU0RjQyNEFDREIKKzoxMEZBQTAwMDJCMzQ3MEJBNTFBNDAxNUY5NDE0MjU1REJGNzVDQzM4MTYKKzoxMEZBQjAwMDg0RkMzQjMzMjJGRjA0RURDMENBQzY4MkZEMEY1MUJFNTkKKzoxMEZBQzAwMDM4QkU0MzQyODAxNzFENDc3RkExNUQ0NUU1QkFBMUFFMTAKKzoxMEZBRDAwMEMwQkUwMURBMEJCNzY5RDdEM0ZBMUFBMkJGRDA4QUUwNDkKKzoxMEZBRTAwMDc5RTM3NUY2REI5M0I0MkZEQTQ5RDVCRTZDQjc1NkQ1RkEKKzoxMEZBRjAwMEE5OTIxRjJBRDY4RjQyNjFFOEU3RDQ1ODI4MEFGNDA1NTQKKzoxMEZCMDAwMEJDQkFDRjkxMDRGNzc3RTU2RUYwODI1Q0I1OUMwQjc5QjcKKzoxMEZCMTAwMDQxQUU1QTcyRDkzQTAzMjA1OTkwMUI5RENCQTkyODFGOTgKKzoxMEZCMjAwMEYwNUFEN0Q3NzU0RTc3MDc3RDBFRjQ3NkM0QzY1RUY3QzgKKzoxMEZCMzAwMDE2N0EyMENBNTU2ODZEQUFDNzQ4REQzRjM5N0VCNDUzOEUKKzoxMEZCNDAwMDQ5RUU4RjVFRDQ2Q0Y4OUQxQkZBNEZFRDM3QjU4NTFBRTAKKzoxMEZCNTAwMEU4MTk4ODI4RDAzRjk1OEEwREU4OTc2MTEwQjQyRjE5Q0QKKzoxMEZCNjAwMEZFMTBCN0I3RDZGOTM5QUIyQzE4QUM4MjcyMzlDNEJGQzYKKzoxMEZCNzAwMDA0Q0M5NkQxRUYwNUI5NTFDQjE2QkYwRkYzMjcyOTQ5MTUKKzoxMEZCODAwMEIwQzdFMENGQzhGRTdDRTJCRDhBMjYyQUVDQ0E4NkFCQUQKKzoxMEZCOTAwMDVDOEVGMUQ3RTAyMkQ0N0ExREEzRUY3QjAzRDZGOEFGQjkKKzoxMEZCQTAwMEMxRjk1QkVFM0JGMTFCQjA5N0RGRjNEQjU4QjkxQ0I2MzQKKzoxMEZCQjAwMDRFN0FCRTZDMURFMkFENzI4RUY3MUQ2NDM3OTY0RjI3RUMKKzoxMEZCQzAwMDZENzhEREMxRjk3REJFRUMwQzgxRjk1QkQ1MjgxRUNFQzgKKzoxMEZCRDAwMDAxN0E5QzkxMzBGRERFMkREOTZEQ0RCMEYyNUJBMTNDNTgKKzoxMEZCRTAwMDU5MDNCODc5NDBCM0Y4MTE0QTE5QjNERjRFRjBDM0MxRDUKKzoxMEZCRjAwMDNGRTFCODI0RUVCRjg1QzgyNTYwRkUwNDcxRDI0RUJCM0MKKzoxMEZDMDAwMEQ1Q0YxMkQ3REY2QUNDMEZCMUQ5QTVGQ0I2RkZFQkY5N0YKKzoxMEZDMTAwMDc3RkMzM0U1OUZGMEZGNDZGMERCQjEzQjA5QUNBNzg4RUEKKzoxMEZDMjAwMEZDM0U1MUZFNTc1MjFDNDlDRjdGQkJDNjRDQzJGNzJBM0YKKzoxMEZDMzAwMDNCRTNGQjc1NzYwOTZGMDVFNDc2RDJDMkMwNEY5REZBQUYKKzoxMEZDNDAwMDQ5NjlDQUU4N0E1MkI1NDcwNkU2OEUxMzhGREFDNkZDRDAKKzoxMEZDNTAwMDQ0Q0RDM0ZBQzdGMzczQThCQkFENThGQzBFQTdFOTA1QTIKKzoxMEZDNjAwMEJGNkZENEY3NUU5QjQ1NEY0N0QzQ0RGOEYzNTlEM0JCNTUKKzoxMEZDNzAwMDkwM0E5QTcwNUQyRUVDNzAxOUMzODkyQjdDMTQyN0QyQjAKKzoxMEZDODAwMDNGNTcxODRDNEU0RjU3Mjk5MUVEMjhBN0E2QzU4RkFBNkMKKzoxMEZDOTAwMDJCNUJGMjNFREEyNUVBNjdFOEYzMzlGRUE2RjRCNzQyQjkKKzoxMEZDQTAwMEJEQjQ5RTU3NzJDNTc3MjNGNkM0NzY2OUNFRTg3QTgyRDIKKzoxMEZDQjAwMDM1MENGNzkwRjBDRjk3MjZDNjA1ODI1NDVDOEFFNzQyNTAKKzoxMEZDQzAwMEJERUM3QjVBQjRFQjUyMzIzQUI4REQwQTk2RERCNURDQjYKKzoxMEZDRDAwMDcwQzNCREE5M0MwQTM4QUUyNDAxMUYwMDVGNjczQUFDNkYKKzoxMEZDRTAwMDdDOTZFQzVGQ0QyOEJCNjdCNUI3OEJBOUZDMUVBMkVENTcKKzoxMEZDRjAwMEQ0QTlDRDhEMzVCNEZDOTIzREVCMEVCRTg4RTQwOEZGNEYKKzoxMEZEMDAwMEMyOTdCNERFNTNGMEM3OEQ4MEY2QUM3ODg1Rjg1OTlFNjMKKzoxMEZEMTAwMDQ1NzVEODg3RUI4MjJCNzIxNDEyMjkwMEZBQUQ3NDJDMkEKKzoxMEZEMjAwMENFOTdGQ0FCMUNCOTFGQkI3MTFDOEY2QTc0MUVBMUUzN0MKKzoxMEZEMzAwMDc1OTQ4RUUzNkVGNDdCOTNGQjQ5QzI3RjVCNTgzMDg0RUQKKzoxMEZENDAwMDdFOTJGMEUzMDhGN0UzM0NGNDVGMjIxRUFCRTRFNUFCMDAKKzoxMEZENTAwMEVFRjE2OUIwN0U1MDI1QzU4RjJCNDdGMjgxMDlGQTQ5MzMKKzoxMEZENjAwMDBCODk5NURFNEFFRUNGNTU0QUZFOUNEMEY3OUYwQUJEMUYKKzoxMEZENzAwMDE1RkUyQUI3ODczNzA5M0ZBOTMyMzlCRTEwRDcwRTI5OTkKKzoxMEZEODAwMEJGOERFMjQ3QjNFRDMyRjQ4MDAwNTVCNEJENDYzMkMyQjgKKzoxMEZEOTAwMDI3OEI3Qzc1MTU1Q0Q1MTZBNTdDQkRDOTlGQzZGMkFGQjcKKzoxMEZEQTAwMDI5OUQ5QUIwRTdDODI3ODZCNzk3RjNGMjM3Rjk3NDk0N0MKKzoxMEZEQjAwMEZGODA0NzQxRkJERTM4NEUzQzIyNTBDNkQ2NTU1RTM2QUEKKzoxMEZEQzAwMDE0OTYzNzE4MjZBRkUxN0ExMUE3QTc4NkZFRUZERUI5QTEKKzoxMEZERDAwMEQwOUU1NTJFRjI3RDdERDU5OTM5MzA2RjI4RkUwODE5QjkKKzoxMEZERTAwMDJEQUZCNTdDNUNFMUZCRkJCMkMxNEZBMUJFNzYzNkFDNUEKKzoxMEZERjAwMDY3QzhGMTg4M0UwODk5NTI3RjlDRkE0QTA1QTNGREY5MkQKKzoxMEZFMDAwMDA1N0M3Q0FCRkMwNEM0N0U5NDNGQkY4MDhGRUY4MjUxQTUKKzoxMEZFMTAwMEZFQkExNTY3QkYxQzdCMDdGM0FDQ0U5NzI4QjgyRUQyNkQKKzoxMEZFMjAwMDU1RjAzMUZBMDk2MjlEMjZDRUJGRTNFODRGMDVDQTNFODAKKzoxMEZFMzAwMDYyNzkwMzIzRkUwOEFCNkZCOUE4QUZFQzE4RTYxN0RFQjIKKzoxMEZFNDAwMEVGMzk4Njc5MUNBNzRGQjBGNUVCRDM1QUNDMDA3RjY0MEQKKzoxMEZFNTAwMEE5QzA1Nzk0QTM1MTkxRkY1RTAwNzkxMkFDQkUyOENGODAKKzoxMEZFNjAwMDY3NzhEOUY5NkEwNkQ4NEQ5MTE3RDIxOTQ4QkUzRUI3QkUKKzoxMEZFNzAwMDUwNjVGMTYzNzFDREQ3MTk4RTJCRDZEOUZDMjNFRUM1MTEKKzoxMEZFODAwMEY4OEVDODkzN0FBQTk0Rjk3QkRGQjY4Q0JCNUMzRjk0NUEKKzoxMEZFOTAwMDZGQzJCODVGQjQyNDM4NDY3RTQxQTNDNDY3OEY2RUM1NzUKKzoxMEZFQTAwMDFCRTNFMTVBRDE0Rjk5MEY3MjNGNDdFOThCQ0VFMjYwRDUKKzoxMEZFQjAwMEFCRURFNjc0N0Q3MkJDMUQzMURGQzlFNTU3Mzg5M0U3QzEKKzoxMEZFQzAwMENENTQ5NTU5RTM4RTcyREVDQzZBN0JBODA0RUFBRkQ2OTYKKzoxMEZFRDAwMDk0OUQ5OTNFQjQ2QkE4NEY0NzJGMUE4ODYzQ0VDNzhFNjYKKzoxMEZFRTAwMEVFODQ2MUVEMTk2MjcxQ0Y0QUEyRjIzQzFBQjMxMUQ2QzkKKzoxMEZFRjAwMEQzQzQzRTg3MUExRUE3OTBFOTE4QUZGRENBQTE3RUY0QUQKKzoxMEZGMDAwMEIzQUI4NjYzMzUyMDdGMzcwNUJBRDBBRTJFQTM3Njc1QTYKKzoxMEZGMTAwMDUyMTJCQkJBNTgxRERDMzkwOUY0RDdBRkEwN0Q3OEY5NkQKKzoxMEZGMjAwMEFEQkU5QTQ5NEM5RjMxM0ZENUFDMkNEMjI2ODExQzc4NkUKKzoxMEZGMzAwMDkyQzdBMTE2NzAzOTQ5QTU3N0Y0NDMwRDcwQzM0NEY1RjMKKzoxMEZGNDAwMDZFQTUzRTgyODM2RUI4NTQzNEZFMzhBNTkyODdGM0IxMTUKKzoxMEZGNTAwMEYzNUY0QjE2MUYxNUQ3RUExNEUzQkI4NTQ4RkNFREIwRTEKKzoxMEZGNjAwMEM2OTVFNTdBNDQ5Qzg3QTgxREY5QTBDRkMyRkY5NUNCMjIKKzoxMEZGNzAwMDdENUI2N0YxRkU5RTU5Nzc5MEZFMDRCRjRFRDgwM0JEQUUKKzoxMEZGODAwMEFDQ0Q4MEY4NDQ2RkQ5RDhGMzg1OUNBRjU2NDVBQ0VCMjcKKzoxMEZGOTAwMENFRDU0RUVCQkE3M0FCNjZGRUEzNkVDMTQ5NkI5OUJGNkIKKzoxMEZGQTAwMDVBQjYxNkZERDVFNTI1MEVGNDU3QkI2NkREODFGRUE5RDAKKzoxMEZGQjAwMEYwQUI1QjZFM0M4MDcxMTc5MTQ3MjVGQzUzOTlFRURFRTgKKzoxMEZGQzAwMERDNjcwQzI4MzcxRUREQzI4RkVGNzRCMDNDMjBGMERCRkQKKzoxMEZGRDAwMDdERThCN0JGOERGOTQ1NzJGOTQzMEVDNkFGMjczNUYzRkIKKzoxMEZGRTAwMDA3NDBGRjRFQkJFOTVEMEJFQjg3QjMxQ0ZFMjc5MzhDRUMKKzoxMEZGRjAwMEMzMUIwRUE2REZCRDI5RDY1MTRGQzM4MkM2NjRFQzA3RDIKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwRjI0MTlFNkY4NDFGMkJGNjBENERGNTMyQkQ2REUwN0VFMworOjEwMDAxMDAwNkM0NUM5NUFENEM3MkMyRkY1NUI4MTZGN0VFNkI3OTIyOQorOjEwMDAyMDAwNDFBQjlGQkFEQ0U4Q0I4M0YxOTdFNzNCNzU4OEZCQjUyMgorOjEwMDAzMDAwMTNGNDVCMUY0ODYzNzIxNEYyMTBBNzk3QkU0RkQzMjhDNgorOjEwMDA0MDAwMzRBNUYzRTgyRTc1RDE3M0MwOEYwN0IyMDhGQTAzQTc2MQorOjEwMDA1MDAwQjNGNEM4RkUyNEYxODYxN0I5QkRBQjU1Mzc1OUU0QURFQQorOjEwMDA2MDAwOTJFMzEyQkRBNkRGODA3OEMwRTlBMUIxRjNGMjFFOTIzRgorOjEwMDA3MDAwNzA3QTYxMzFBOTcyQjhFMTFBQUIwMjdFRDA3QkQzODE2QworOjEwMDA4MDAwRDcxOEU2NEI3Rjc3RDY4NkMyNjRGNUVENkZENTkyQ0U1MgorOjEwMDA5MDAwNEI2RkYxNzE1QkM5RTdCQkFDM0ExNjlGREM1MkEyNjNCMAorOjEwMDBBMDAwQkM3NzZBREREQkM3NTE0RTFCQjk5QzJFNzM2MEJGN0JFQQorOjEwMDBCMDAwNjc2OTM4MkVCRDM3MTZCNEMxN0E2NUVGMkMyN0U2Mjc1RAorOjEwMDBDMDAwNzRDRDdBRTFBREJCQzFBRTk2Mjk3Q0JGRDk0NjhCRkMxRAorOjEwMDBEMDAwNTY1MjVDOUQwRUY1N0I1NUM0MkI1QkE4RkY5MjBFREYzQworOjEwMDBFMDAwN0JFRDBDQkZGMDNDOTBDRDdDNEM0RjFGNjRGOEU2NDM5OQorOjEwMDBGMDAwODE2RjM4MUY1NzA5Rjk2RjE0RjE1MDJCOEVBMkU2QzQ5NworOjEwMDEwMDAwQjI0RTQzRjhGQUMzMTI1NjJEQjU1MzRDMUYzRTZDNjRFMQorOjEwMDExMDAwRjFDQzJEQTJGRjg3MEVFQzA0M0Q2Q0UwNzJENDc1NjEyQQorOjEwMDEyMDAwODMxN0Y1RjVEMDAxOENBN0I1Q0M1QThCRjFBM0FFRENDMworOjEwMDEzMDAwQjMzQURDNkZGNkJFQTdDM0JEOEMzM0M0Mzg2RjI5N0JERQorOjEwMDE0MDAwMTY3MTQ4MkYxRkU3Q0QxMDc3QTdGMkJGQzRDQkYwNTUyQgorOjEwMDE1MDAwNzRDQUI1NzY5RjExQ0Y2Mzk2RjFERENBNjgxQUY2N0YyRgorOjEwMDE2MDAwRDU0NTFCRkE5RDJCRjlGNzQ3QTZGQzQ5ODdFRkI2NDQwNgorOjEwMDE3MDAwQTkxRTUzRkJERUEwRjVDRjAwREM5MjIxRTFDNTBGOUY0NQorOjEwMDE4MDAwM0I5MDBGRkFERDMzRkI4RjU4RUU4QUIyQjc1QjgwRUVGRgorOjEwMDE5MDAwNjk2NTA3MzA4RTlGNzdFODQwNzczNkFEN0Y3OTMxRjExQQorOjEwMDFBMDAwOUJCRUQxRUREN0YyRjk2OTRCMEVEQjA3QjFDNTFGMDkzNAorOjEwMDFCMDAwQzMzRUIwMEY4NjA4Q0U0RjBCOUYzQjU2QURGODkyQURCNQorOjEwMDFDMDAwQjc5ODA0NzA4ODU4QUZEMUJDN0NCRDgzQUYzQjkwOEI4RgorOjEwMDFEMDAwOTc5NEM0RjE2QUQwNDI0RUIwQkYyRDY1QUZCQTgxREVBQworOjEwMDFFMDAwQzI4M0VBNUE5MEVCOUFFN0FFRkYyMkM4MUZCOUQxRTE2OQorOjEwMDFGMDAwQjk5MkY2RTcwM0NGQUZERDU3MTlFQ0ZEMURBQ0JFMDU5NAorOjEwMDIwMDAwMjFDQThGODY5MjAzRjkxQjY2OERCNjJCMjM3QTUzRjI4RgorOjEwMDIxMDAwOTdBRDIxNEFDN0U5QTUyRkU0MDM1RTdCOTVEQTVCMUYwMgorOjEwMDIyMDAwQjRDN0VEOTVFQzI3MkQ5NEU2RDNDMDkwQjRDRTI0RjU1OQorOjEwMDIzMDAwRDdBNUFEQjhEMTMxMEZDNkYzNDdERTgyMDQ3OUEyRkE1MworOjEwMDI0MDAwQkYwRUU4REZGQ0E4RDMwM0ZBOTI3NUU4MTU1RDA1QkI4NQorOjEwMDI1MDAwNDY3MUZCOTIwNDc5REVDQ0U1QTVDMTYwNzZBRjY1MTZFOAorOjEwMDI2MDAwODk2QzU3NDBDRURFNkJBQzAwN0Q3QjUxNjVGQjUwMEUzOAorOjEwMDI3MDAwQkRDREYyM0VBNTc5QTE5N0NGMTc0MkFFN0I3M0RGNzE1QQorOjEwMDI4MDAwODNEQzdENzg5MEVCNDdEOEE2MjRDNjkxOENCMkQ4Q0Q3QworOjEwMDI5MDAwMzAxRTgyM0YxRDkyOUQwOTkwRTRGM0MyMjkwN0MzQTkzNQorOjEwMDJBMDAwOTUxQTdCNkY1MEJCMERFQkQ0RjI3QjEzRkMyOEMwNDEzOQorOjEwMDJCMDAwREM5RjEyRUZENzNCMThERTE1RDdDQkM4MkJGOEUxNzdDMAorOjEwMDJDMDAwQThCRTc3RUQzQUVBQkQxREVEOTM4MTc4N0RGM0ExMDNEOQorOjEwMDJEMDAwQzVCMDA2MzNFNUUwODExQTlFRjc4REZFOThDQUZCMzk1QQorOjEwMDJFMDAwOTVGOEQwM0UyRDM3OUNCODdFMjBDQkI3QkQ2QzVGMTRGRgorOjEwMDJGMDAwNjBCMzk4OUZDMTExRDdBNkM0RUQ4NjlBMTg3RjQ4RTJEMworOjEwMDMwMDAwN0Y5MUIwRjlEQUNDODQzQzJDM0FBRjEzQjAxRkQ1NUVBNAorOjEwMDMxMDAwMTY3Nzk1RTUyNEFCRUNDMDRFMzYxRjUwMjk0QzU4QzdENAorOjEwMDMyMDAwOTVFNUI2QzEwODc5NjE3RDlBRUFDREZCNkMzRDkzQ0UyNworOjEwMDMzMDAwNTMxMDk3NTAxQkZEMzg5RTVDM0U2REY0MUZDQzdCMTkwQgorOjEwMDM0MDAwN0VBQjdDREE4Qjc1MEI0RTkxRTk3OEM0QzFEN0M1Mzg4QQorOjEwMDM1MDAwRUUxN0YzNzI5NkI3MUZFOTVCNkVCNEU1NDNGQjUzQkQyRQorOjEwMDM2MDAwRkRFODY3NTFCQjlFMEY1NzIxNjdDMjRFOEZDOERGQUNCNworOjEwMDM3MDAwMUJFQUMxNEU4MTVDQzM5MkY3RTlCMkVCRDNDMURFMzUxMworOjEwMDM4MDAwNzgxOTNFMjE1MjFDQkRENzNCQjY5RkQxMkRDOUUzNjlEOAorOjEwMDM5MDAwMEZGM0FCMUFDQTQ4QkEyNzEzRjQ5REM1OUI3QTFGQ0UzOAorOjEwMDNBMDAwREU5NzkxMTA4RkRCNjMwRkZEQUI2MzcyRkNERTVERjJCNQorOjEwMDNCMDAwRjk3QThGMUJFQzBCQ0JDNzJBQTc2NkNCNUUxNDhGNjMzMQorOjEwMDNDMDAwOEE3OEE5NThCRjEzRjFEMTUxNzFDQzkyMkVDQ0Q3QjJGMworOjEwMDNEMDAwOEIzQzBBQkU5RTM3MkE4RjY3ODJGOTY3OEVFRDZEOUEzNQorOjEwMDNFMDAwOUZBRjkzMjAwRTZCRTRGMUI3QTFCOUUzQzQ0MUI3MDkwNQorOjEwMDNGMDAwNUM3NkRDMzE3OTdDNUNGNjI4RjcyQkRGMDBFMzQxQUZEQgorOjEwMDQwMDAwQjczODNDNzgzNTIwQkY4NDkyREE5Qjk2MUNBRjFERTA0QworOjEwMDQxMDAwRjhFNTcyRjRGMzg0MEFERkIxNzZERTc0NThGRDRBRjEzMAorOjEwMDQyMDAwM0M4RTgzOTkxRTRDMkQzQkQwOUQ4ODgzMkI1QjI5NkY3RQorOjEwMDQzMDAwRTgzOEU5QUQ2NDA2Qzk0QzJENzdDQjQ3RUNERUIzMTYzRQorOjEwMDQ0MDAwRjkxQUMxQzVFM0UwNjEyMTVGODNBQUY5NjdDN0JDRDQ4QgorOjEwMDQ1MDAwRTUxQTM4MURBOURFQjdDQzcyMzQ0MUZFMTQyRDQ3QTYyQgorOjEwMDQ2MDAwNjZCMkVCRDVGNERBM0RGQjQwQkU4RDNFM0YwOUI4MkJCQQorOjEwMDQ3MDAwODE4RURFQzcwRTYxM0Y1RUQ2RDlGRTk3REUwQjFCMEE2QQorOjEwMDQ4MDAwNjExRUVGRDI0Q0UyOUMzNzcxRjk5MUY1QzkzOUNGRjQ3NgorOjEwMDQ5MDAwNkRBM0ZBRDc5OUVGQzRGRDdFOUQ1RTg2Mzc1RTgxOTI4QgorOjEwMDRBMDAwMDlGMkI0NUUwRjc5OUM5MzcxOEEzMDQ5MzYzNzcyNDJGMworOjEwMDRCMDAwQ0VDMTY4RDY0QzZDRkZENjZEMTlGREY3MDQxM0VDRkE2QgorOjEwMDRDMDAwMkU3ODk1OEJFNzA2NjBCRjFFRDRGQjMxQkZFNjM2NUEwNworOjEwMDREMDAwQkI4M0I2NzNDQzUwQTdBQ0EzRjc0NTRFNjZGNzhGODVBOAorOjEwMDRFMDAwRUQxNkJFODg2QjkxOTNDOUREN0EzRDU4MDQ3NDkyQjZCRgorOjEwMDRGMDAwNjZENEIzQjU4QTFBMDRGRDI3RkU4OUM1RTU3NkI0MjcwQworOjEwMDUwMDAwQ0YxMzJEOERENzNGMDdFQjNGNDhFQjA3RENFMEU3NzFCQQorOjEwMDUxMDAwNzdFMjk5OTIzNENFQ0VGQjFEMjVBNDBFRjRFNTdCNTlFQgorOjEwMDUyMDAwNTYzRjczOTY5M0U5RDk5Qzc4RkQxNTg5RjVDRjcxMzJDMgorOjEwMDUzMDAwRjlBN0NGMTdFMEYzQTdEOUYzNUNGRUJDQUE4OEU1QTkxOQorOjEwMDU0MDAwMDkzRThBN0E2QkUzRjVENUUyNzc4N0Q4Nzc5MzlEN0M2RAorOjEwMDU1MDAwQkQ4MEQzMkRGMEJEOUNDRjc0NDMxQTFCOEYyQUExNzc4OQorOjEwMDU2MDAwOUE4Mjc4QkI5Q0UyNkZDNEY3REFCRTYzMThCRjczRjI1RAorOjEwMDU3MDAwRkQ5MTY5MEU3Q0RGOTE2QjQ3N0NERkYxMDk0MUZDRDk2RAorOjEwMDU4MDAwRTk2MkYxQzhBRTBCNjc2RkZEMkFCREQ3ODY4OTI1MUZDQQorOjEwMDU5MDAwRENDMTY1NDgxQjdBMEFFMzZGRTVGOTdDM0YxQkQ3NTczRQorOjEwMDVBMDAwQjE2RkVCNDg2Q0JGNjU1RDU1RUNGM0U5NzRGMjNDMEM0MAorOjEwMDVCMDAwNUVERjAyNUUxRjkxNzBCQkU4OTdDMDM5RUQ3QzlGNEVGNQorOjEwMDVDMDAwQjlFOERGNDA3NDA3REE5NTgxMjhGNkFCRDJDM0Q2ODM0OQorOjEwMDVEMDAwQkJCMkJFODFGRUY1MDMxNzlBQkQ4OTcxQzFBRUU5QzdGMgorOjEwMDVFMDAwRDlCRUZEN0M0QTc3NDk5QzJFOERFM0IxRjI2MURCQTYzMgorOjEwMDVGMDAwMDNDMDBGNERDMThDRURBQUU4OEIxOTA1QjRGRjhCNEVEQgorOjEwMDYwMDAwQThGRTM0RThCRkU0NjcyQ0M5RTc3OUQ0MUNFN0E2QzI4QQorOjEwMDYxMDAwRjVCRjU0NjIzRjgwRkE2RDE5MTc4QjgwRkUyMzUzRkU5RAorOjEwMDYyMDAwNTUwNTNDNUExRTdENDMwNTlDNUVBOUIxQkNERDg1MTI3MworOjEwMDYzMDAwRkU2ODg3RjMzQTgwOUVCRkRBMjIzNkRBQUY5RUYzRUY4OAorOjEwMDY0MDAwQTkzMDdGNUMzMTFDQzE3RTRGMUJFRUMzQkM4OUJDMDE0RAorOjEwMDY1MDAwMTZERjVEMzA1MzQ5ODVFQjc3NjQ0MjFFODY4RkVENzM1QworOjEwMDY2MDAwMkRGN0VGQUVDOTg2N0E4N0Y4QkVFNUQ4Rjk0OTQwRDdBRAorOjEwMDY3MDAwNjg1QzZGQzUyOTAxNUYxNUY2N0IwNEU3RTdCM0I4RDI2NAorOjEwMDY4MDAwRTVFMkU5NEFFRUQ3MDhCRjQwOEMzRkU1MDNFRUUzNkFCNgorOjEwMDY5MDAwMUZCRURCMDlGMzYzMTVFNzZCNjFCRThERjkwN0QzMEI1MgorOjEwMDZBMDAwRDdBMDdGRjA4OUVFODE3Q0RGMDczQzVGNzdBMjdGNDA5NworOjEwMDZCMDAwREY4MzdGNTAwOUZFNDEyNkM0RTVGQUYyMzZCODQ2RjdEQgorOjEwMDZDMDAwNDdDODUzRTFEMEM3NUI0M0I0RkMxMUZCRUI3OTgwNkJBNworOjEwMDZEMDAwOEY1RTc4MkEwRkVDQjJDODBCMTdCODVFOTQ3NzY5NTUxNQorOjEwMDZFMDAwQ0Y4M0JEMTY3OTA4MDJFNzNCMDRDRThGMzUxM0Q4Q0ZGMAorOjEwMDZGMDAwNUYzOTZDQjNFMDdDMDc5N0FCNEE4M0U5NTVGQjVGMDkzMAorOjEwMDcwMDAwQUU3Mzc1QkRGRjVFNkYwMUZEQkVGMzQ1MTY4NzlFMUE4MQorOjEwMDcxMDAwRUI1NzEzNzE3RTM5RTc3N0U3Mjc3RDc4RkU4ODkwRkZFNgorOjEwMDcyMDAwQ0VGN0Q5MzkyMjFERjk3QzdGMEFDN0Y5OEIwOTJCQkY3NworOjEwMDczMDAwMTg3MEJFRkJGMjcxRkVFQzM0NjY3NzRDOEVFMzE3RjM1MworOjEwMDc0MDAwN0M1NEYxQkU5RkRCNzExOURGQ0JFRjJGMTdERjEzOEVDNworOjEwMDc1MDAwREZFM0I4RDgyQUI3NURCQjBBNzEzREE1RENFMzY0RkJEMworOjEwMDc2MDAwQ0QwNjYyQ0ZERTQ1QUY1MzYyQTEyN0Y2MDBCRjJGQTZBQworOjEwMDc3MDAwRkJFMTMzMDdGN0JGQzZDREU3OTRGMEZFNTQxMkQ3OUJEOQorOjEwMDc4MDAwMjg3RDk0OTVERjhGN0E1MjQ5RjUwNEY2OTM4RkQyMDcyRQorOjEwMDc5MDAwMTlGRkU3Qzc4RTQxRjkwNTg0RTk1NUY1NzA4OEFEOEZEQgorOjEwMDdBMDAwOEQ4M0Y3MkI4REZFM0NDNEZCQzM4QkRGNjc3RUMzRDhFNAorOjEwMDdCMDAwNzhERjk0RjI5N0VBNjYzQUM2RjY0RkQzQUM3ODZDODE0QworOjEwMDdDMDAwODg3NzBDMzdCMzc4RTQ3MDMzQzYyMzE3MEM3MTdCNzlDNAorOjEwMDdEMDAwODFEOTRCMzE5RTBGNzBCOTEzRjY1Q0U4NjdFNzg1QjM5QQorOjEwMDdFMDAwNkEyOEMxNkU4RUM4RjczMERCODcyQkJFRUZDQzY3NzhFNgorOjEwMDdGMDAwRkYyNzVBMUZFQTczRTdEMERDRjRDNDM4OTU4Q0Y3M0IyNworOjEwMDgwMDAwMDFFRjk3NDAxQzg5RTJGRDM5QTBCRjA0RUQ1RTI3RTBBRgorOjEwMDgxMDAwRkQwNEJEQTU3OEZGOUFCNDA0RkNFNjFFNUE1REVGODE4NQorOjEwMDgyMDAwRjVFMDA5RTYxMzA4M0Y3NjMxRjhCMUQ5MDlGMTUyQTc4RQorOjEwMDgzMDAwRDU4RjREMjVERjY3RjlGQzFERTc2NzFGOUI3Rjg2RkI4MgorOjEwMDg0MDAwOEUyNUYyNTNFM0I4RDYwMTc4NzI0RTdDRkY3QTY3MkE4MAorOjEwMDg1MDAwQkU3RTYyRERDNzJDRjJCNTNCODcyN0U2Mzc1MTVDNUI3NQorOjEwMDg2MDAwOUYzNjM5NzVCOTRBNEU0N0FBRjcwRjVDRDAxMUQ3MDJBNworOjEwMDg3MDAwMUU5RjNBODc1REFGQTZEN0VFOEZGQkYyMTI3MTJEMzEyNgorOjEwMDg4MDAwMTgxRUVCN0NFQzM3QjgzRkI4MzM4QkUyRDk5MjQ0M0U2QworOjEwMDg5MDAwNkYxQjA3N0ZCMEZCMDU1RTNCNUY4N0IxRTIwOTIyQ0Q4RQorOjEwMDhBMDAwRkZFRDJFMjYwNzQ3MjkxRUMxRjg0OERBQUY5MDhGMURBRAorOjEwMDhCMDAwOUY5Q0M1RjY2NTdDMjJGMDg4OEM0Mzg4ODQzRjA0QkRFQworOjEwMDhDMDAwRURGOThDRUY0NzYyNjdCRUVCODc3RDczMjdDNDNFNTMxQgorOjEwMDhEMDAwMkIyRTkxRjkzNTNFMUVFOTQzN0IyRUNCNzk4N0NCQzQ3NQorOjEwMDhFMDAwQkNBQjM4M0VEMTExNkYzQzYwNjc3ODQzRTAxMzhBM0I2NAorOjEwMDhGMDAwOEVBRDA1REMzMTQwNDgxQTg5RDMyRjcwOEFDMDFENjI0NQorOjEwMDkwMDAwN0U2QzFGRTZFNzJENzlGOEJDMjBFMTk0MTFGQkZGMjlFRQorOjEwMDkxMDAwNzE4QUE4NDdDNjI5NzIzRDlEM0NBRkEzOURFMjk2NkRBMgorOjEwMDkyMDAwODg2MzhFRTMzQzNCNTFGQzIyRTM5NUYxNzA0OUU1NEMzMgorOjEwMDkzMDAwODY0QkRBRkRFQzNDMjY4MTY3NjQ1QzUyRTdFQkMyM0NGNworOjEwMDk0MDAwNDA4MTVGMjY4QTUzMDRDRTkxRjE4QTRDNTcyN0UwOTc2NQorOjEwMDk1MDAwOTIzODdFOTFGMThBMkM0Nzg1Rjk2NDJEQzRGNzA1OEU3MworOjEwMDk2MDAwNDlBNTlGNTBFRTBFNzcxQ0RGQTQyQTQ3RUQzM0UyOUU4NworOjEwMDk3MDAwOTRGNTBDQzUyRTE3RjdGQzFBRUM0QTZBRENDM0M2QjkwRAorOjEwMDk4MDAwRjIyMkMxM0NBMDU0NzhFNDAxN0YzRjNCOEY0ODlBMzc2NAorOjEwMDk5MDAwOEVFNDlGNzkxM0Y3NjkwRUU4M0UxNTcxMTFCNTkzNDYwMQorOjEwMDlBMDAwNkEzQzI0RjQ2RUE0QkY2MDA3NEFFMkYzNTI0QUJFMENDQworOjEwMDlCMDAwNzBGREM4MUY3QkZENjVBMjc4NDlDQzE3QjNEM0Q4N0NFNgorOjEwMDlDMDAwOTA2QTFEMzIzRDlERTFBQTA3MEI5OTdGMkNCRjhGRTdFRQorOjEwMDlEMDAwOTU1ODcxMTNDOTk5ODVGMkZENTVCRTJGMzkxNThFMjI5MAorOjEwMDlFMDAwMjRFNjY2NzFBOTMwQjY4M0Y5RTQ4MEMzNDAzN0U3RjNBMworOjEwMDlGMDAwQkMwMjRBNkE3MDI2OTkwOTcxOEQyMEJDODc3NUFDNzk1MgorOjEwMEEwMDAwNEEyNDRDNDk1QjAxQ0ZFOUI4NTZENUIwNzVBMDMzQjM0MQorOjEwMEExMDAwRDgzOTEzQTdBQjFDMzhBRUE3M0U2NDc5ODc1RDJFMTY3NAorOjEwMEEyMDAwNTczRDdENUQ5QTdGM0YyNUUxNDNBODk3Q0VCNzY3RDJCQQorOjEwMEEzMDAwRkE0QTYxNUNBNzhCN0U2NkIzN0UyRUNCODg2RUMyNzU0OAorOjEwMEE0MDAwRjBFQkFGQjU4NTBCNDZEQjg3MDdEMzM5MUREOTA2QUU3MgorOjEwMEE1MDAwQTczNUYwRjgxNEFDMDdFNkNEMURCRDFGQTAzNUJEMDBDRAorOjEwMEE2MDAwRkIwREY5RUY3OUI0REM0RTVCREY3NzBCRTlBMzM0MUJBOAorOjEwMEE3MDAwNUIzRjk1RjlGQURCNzQ0NUU0RUI4NDFEMDk3QzY4OUNDNworOjEwMEE4MDAwRTkzNEQzQTgzQ0E2N0Q4RUU1MDM3NEQ2Mzg3MDlEMjk0MQorOjEwMEE5MDAwMEQ5NkNDNjlCRDBGMTUxN0JBOTJDOTg3RTg5N0ZDRkM3MworOjEwMEFBMDAwNjFERUVGMzNEMzYzNzg3RUM2Q0IzQzhGNzdCM0E2ODQwOQorOjEwMEFCMDAwODFERjY4ODA2MTdFOUEzNDZEREY0M0I0RThEMjc0NzY1QQorOjEwMEFDMDAwNkVDQ0NCQ0ZCRDgyNzFBMTk3QjIzODFGNEMwNUYzMTUwOAorOjEwMEFEMDAwNEVGQjk4M0U4NTNENDYwNEY2NTVEMkVGRURBQkM3RDBCMAorOjEwMEFFMDAwRTdCRUFBMjVDNTFDOEYxMTA1RDZDOUUwOEZDMkQxRkM2RgorOjEwMEFGMDAwNUU1NUE3NjJCRjU3Nzk3NkREMDVGM0M2OTlCQTU3MzNCRAorOjEwMEIwMDAwRTBEQ0M3RTU0MzM2MDI3QUI3Q0E1MzdFMDczQ0VGNzI5MgorOjEwMEIxMDAwMzEzOTA2M0UwM0ZFNUY1NUYzRjlBRkMwRjNDNjQ2RUIyRAorOjEwMEIyMDAwNzgxQzRDMkY0NEZFNTY2ODZDM0M2MEZDRjJFNjhFNkVERQorOjEwMEIzMDAwOTc3ODQ4NDg5RjkyQzBGRkMwMEJERjU0MTJENjIxNDREQgorOjEwMEI0MDAwN0U4QTMzNDVCRTVFQUE3RTJCODk3NjU3OERDNzE5QTc0QworOjEwMEI1MDAwOTZFRERCMERGQjVCODJBNUVDRkNDQjA2MUYwOUMzN0E4RgorOjEwMEI2MDAwNkU4MzlGNDQwQkI4N0M2MURFNENGNzRDQjZBRjg3RUJDRAorOjEwMEI3MDAwNTc1NkQ5QkVENjQyODg0QjBFNjk2QzlENTk5QTVGMkE0QQorOjEwMEI4MDAwRTg1OEU1Njc0MzlDOUM4RENGRTk3OTJBRTI5MTBBQzgzMQorOjEwMEI5MDAwNkJDNEYzMkIxOTdFNkYzMEQ3MjJGRTZGN0NCODdCNTc2NgorOjEwMEJBMDAwMjFCQzU3RjM2QkFCN0M2QzFERDQ5MjQ3NzU4OEM1RERCNworOjEwMEJCMDAwNTY0ODcyRUU5MkUyRkExNTdFMjkwRjkwRTdFRjc1MTYwRAorOjEwMEJDMDAwM0ZFMTAxRjk3OTMwOUJDQkNGNUMwNUY1RTgxNUM1RjcxRQorOjEwMEJEMDAwNzA2MUMyM0M3MzYzQkFGMENCODhDRjlFMjAxRjIzRjJCMgorOjEwMEJFMDAwQzBDNzU3RTY3QjJBN0VDQTdDOTJFNTQyRTZGNzY5OTc0MgorOjEwMEJGMDAwQzRBRjE0RkM0RkM1RUY4QUIyQUFCRjJCN0YzRkIwM0JGNgorOjEwMEMwMDAwRUMyMEI3NURGNjNGRTZCMzc4MTVCNUMxMDlGNjQ0RTZDQQorOjEwMEMxMDAwREIwNzg2Q0YwNTc2RTJDQzEwOEI4N0JEMzREREY3NDU0OAorOjEwMEMyMDAwM0M4RjhBRUEzMTlFOUZDOUY1MjEzRTBFNTQxRkRDODkxNAorOjEwMEMzMDAwRkFGQ0ZBMENEMDY3MkE2Nzc2QThBN0QxNTRDQzM0RDAzNgorOjEwMEM0MDAwQkY4MzBGREM4NUZEMDYzRDc1QzdGNTQ4RTZGRjI4RkQyRgorOjEwMEM1MDAwQTNGRkQzMDRCRDQ1QTNGNTQ4Q0UwRkZCNUJGNUVGNEVENAorOjEwMEM2MDAwQjBFNzk0NkY3M0QzN0Q3ODE1RjZCNDkxNzhCRTk4QjhEOQorOjEwMEM3MDAwMEY1NUFDOTM3NzE1QjQwNDYxRkY3OEMzODA4REMwN0NBOQorOjEwMEM4MDAwRDMzRUY0OENCNjBFRjZBNUQ2MjkzOEFEMTlBNDBGRTlEQgorOjEwMEM5MDAwMzU1QTU5RkVDMzU1OEZERjRCMjAzRkZERTFFOUM0MEZBNAorOjEwMENBMDAwRjZDQTY4NjVGOTEwRjQzREU2NDMwOEJDMkVDRTREQTRBMworOjEwMENCMDAwRUY0REU2ODdCMzc2RUI3OUJCMkVCRjM1OUY2N0U1RTA1NgorOjEwMENDMDAwMjI1QzRGRTgyRUU2RjE0OEVFMzc4ODNDNTYyMkVENjM3MQorOjEwMENEMDAwNjk4MTI3QjlGMUZEMUVBRDE3MjJFODNGQjRBN0Q4RDcyNworOjEwMENFMDAwMjJBRUIyMUYyMDVGN0I4RUZFRUMyQkUwMDc1NENFRDRFOQorOjEwMENGMDAwM0QwMDI5MkE4N0EyNEVBOEVGQkIyNTQ3RUIxMDVGRDUwMAorOjEwMEQwMDAwMjkxRTU4NjdFQkY5Qjg2RDA3QTE3MkI0QjJFNDlEQTQyRgorOjEwMEQxMDAwQjhFNEYwMDczRkY0NDMzRjBFREI3N0ZCQjNDMTNFNkMxMgorOjEwMEQyMDAwNjdGMzU2REFENTI1RDNENzhEODE3QjQyNzU1NTc1MDU4NgorOjEwMEQzMDAwQjM1M0U3OEREQzlBQzFFN0Y3QUUzQkY3M0YwOEVCRDkzOQorOjEwMEQ0MDAwODMzQUM2NDNFQjM5M0U2RUQwNzYzN0FEQTNFM0Q5QkRDNworOjEwMEQ1MDAwNTRGMTZGQTNDRkJCQUZEOUQzN0MxNEUyQzhFRkVCQzA4MworOjEwMEQ2MDAwNzFEMjdCRTFBOTdDRjAyMzRFM0VFNjZDODJGQTdCM0U5OQorOjEwMEQ3MDAwN0VFQUM3OTgzNzMyQThDRjg3RkU4RUQwN0ZBNUMxREUyNgorOjEwMEQ4MDAwN0ZGOEZDMDlCMDMzMkI4QjU3OTY0MjNCNjkxQUQ5MEQ3QgorOjEwMEQ5MDAwRjI3NEM1NTBEQjlCNzBBRTQxQzM4MDNFMEZFQ0NGQ0FFRQorOjEwMERBMDAwQkE3RENFN0YwMDNFRDUzREVCQkM5MjVFQTcwREY5NkFDMQorOjEwMERCMDAwNjEzQzMzRDI0MzczMzIyOEJENzkyNTA1RjdFNzQwM0JDOAorOjEwMERDMDAwN0VFMjM3OTFBRjdEMDRGOEJBNTI4QTNGNTY3MkI5NjkxNAorOjEwMEREMDAwNUY1QUUwNEE4QzYzOUMxOTJBNzQ2MTdFNDIxRENGNEY5MgorOjEwMERFMDAwNThBQTA2QzEwRjNFRTNCOUQyODU3MUM3M0E5Njk3MjAzQgorOjEwMERGMDAwRjM2QjI1QzdFOTJCRUIwQUE2MjdDM0UzODU3NTdGNDE3MworOjEwMEUwMDAwMUNERTdFOERBMzI5MTlCRjZGRTJGQzRFRkJEMzg2RkQ0RAorOjEwMEUxMDAwRDBERkI0MUYzOTNEMDBBRkQzNTJFNDVCNjY2N0YwN0M4RQorOjEwMEUyMDAwNTJFRkM0RTIyMDAyQ0Y1MEJFM0FFRDA5NzExMDhBRjdBQQorOjEwMEUzMDAwNkZDRTQ4ODhBRjVDNkVGQkY1MTlDQzBFMENBQUExMkZDMworOjEwMEU0MDAwMDFGRjJCNzgxQzY0QkNGODQzRjkzOEVCNkU1NDhFOTA4QworOjEwMEU1MDAwNEYyQjc5N0M2MkE1ODg0RkQ0MTc0Q0I3QzQyNzg4RTlGQgorOjEwMEU2MDAwMDUzQjdCMDZENkREQzBDRkQ2NTY2QzAxM0E3QTNGNjA5MworOjEwMEU3MDAwRUI2RUE5RTQ3N0U1Q0NBNzZFM0Q5QTYwRUY3QUVEMjY5QworOjEwMEU4MDAwRUU5N0VDQkU4NkY5NDlGRjU1RjIzQjIyNjc3NUNGQjY2NworOjEwMEU5MDAwOTZEMkU3MEY5NUFDOUMwQ0Y2MkY0MThFNUI2MTNDMkVGMQorOjEwMEVBMDAwNTc4RTY1RkVCNTJGMkQ3MjExMjMyRUNGNDI4RTQ3Q0I2NAorOjEwMEVCMDAwQTU4MkZFQTg5MEVGNTRFMzAxRTVDMDFGNUQzOThFM0Y4NworOjEwMEVDMDAwN0E2NkU5RDU0OUU1M0Y1RUNGQjkzMUY1QTA4NkNCRDU0NQorOjEwMEVEMDAwNEQ1Q0FFMkE4OUU5QzE3M0E5RjJERTQ0QkZGNTU3REM0NworOjEwMEVFMDAwMUU4RkM4ODlBQjBGRTM0MUUxMjc5REI4M0VERTc5NDFGMworOjEwMEVGMDAwQzdGM0NEM0I5RkQ4RjgxMzk4MzdCQTg3MTY3OURFQzM2RQorOjEwMEYwMDAwNzlCQ0NBQjM4QUQyNzUwREY4MEYyNTM4M0VERDVBNDIzNgorOjEwMEYxMDAwQkNGQjhEMENCMTFFNkVDRERGRkQzN0NGMUZCMkFCRDg0MQorOjEwMEYyMDAwM0M2QjU0NTE3RUNGRTFGM0M0RTcwQTlFNDg4N0Y5N0NCRAorOjEwMEYzMDAwMEVDRkEzOUZEREExMjc5RDk3Mzk4NDIwMjUzOUFGRDhGNworOjEwMEY0MDAwMDBGQTk3MUNCNDk2MzM0NkY2OTFCN0Q5NjBEREVGNzM3QgorOjEwMEY1MDAwNEY0QkVGRjlGRTY3MzlERkIxMzcyM0Y5QkU2NzMxREY1OQorOjEwMEY2MDAwM0EyRjhDMUQ0N0ZDMzlGN0FCOUZFNkY5QkNGRkM2Q0Y4MworOjEwMEY3MDAwRUQ2QkUzRTdEQzNFMDNGQjU2RTlGNTIwRUM1QkE1Q0YyOAorOjEwMEY4MDAwOUY4NzdEQUJGNEZFMTBERkI3NEFGMjI3NzYyRUJCMzg4MQorOjEwMEY5MDAwODc0OUU3N0M2OENEOEQ1OEQ2MDdDNTNFRURGNjUyOTU1QQorOjEwMEZBMDAwOUQ1M0UxRDVGMTFDNTQ4QTlCNkM5ODdGQzJGMUEyMkQxMAorOjEwMEZCMDAwMjNFMEQ0RTlCOEVBRkY0MTMwRkZFNEVCRUZGN0ExM0NDRQorOjEwMEZDMDAwRUNFMkYzQUM4QzYzM0EyNDM5MTE1NzNEQ0U0NzBERTI4NQorOjEwMEZEMDAwNTg5REQzNDM0REMxMTIzRTYwMjAzN0YzQTZFRTdCMjhDNworOjEwMEZFMDAwMDE0RkZGMkYyRTE3MkREQzZGMEI1RjIwOTEyNzk1Nzg3NworOjEwMEZGMDAwRjk5NzJFOTBBNzFFNDIxQzQ1QzIyQUUwMEVGODhCOEE1NAorOjEwMTAwMDAwNzBGRDAwNDExQzU3NUZGQTAwRkE1RjgwMDMwMTk3RTExMQorOjEwMTAxMDAwRjk2MDg1MTAxRjdEMUVGMTVDRkREMEZDM0JGOEZBQzEyNAorOjEwMTAyMDAwMjgxQzM3QzIzNzE1RjlDNEYwNzlFOTJCMTgyN0E5MUZGNgorOjEwMTAzMDAwNDgyRTZGRjFCQ0E1QTZFRTk5MDlGQjBDMUE4N0M0M0E5RAorOjEwMTA0MDAwMDVBNTY0NEE3QzVGQjkyRUM5OTU1QzRGNTZBOTgyRTMxOQorOjEwMTA1MDAwQjJBQzk4RURGQjEyRUIxQzYyM0M3NzM0Rjc2MTdFNDczMworOjEwMTA2MDAwNkZBOUMzMDdGMTA1MTkyN0NBMzg1RjJGNjVGQkMyQjQwMgorOjEwMTA3MDAwMUJEOUZFRDRGQTBCMkNDRjEwMDU2NjRBRkNGQzM0OUQxQworOjEwMTA4MDAwRTdFREI2N0I0MjdFMzhBRkE0QzEyRkUxREUxODlCRjdCNworOjEwMTA5MDAwMkE4QkFENzg1RUM2RkJGQTgwMkVFMUZEMzA5QjBGQjc0MAorOjEwMTBBMDAwQjNGMTNDRkQyMTQxM0ZFQUM5QkQyQzNFNzBEOEVCNjM1MgorOjEwMTBCMDAwRjI0NzIyRThGNzJDRjREQUFFN0JDODA3RUI1MjZDQkY5QworOjEwMTBDMDAwNjVGOTEwM0I2RkIzN0NDMDg3RkJBNzE3MEU5MkU4NTVGQworOjEwMTBEMDAwQjMyMTNFNEE1QUYxM0MyMDg5N0YwQjA5NUI3NzU4RThERgorOjEwMTBFMDAwRjU3NTRGODZGOEEzNDY3NkMyMzkzMDUzOUM2QjRERDBDOAorOjEwMTBGMDAwMDNERERCOENGQjZCQUE5RDBBOUU5MzRERjhGQTk4RTAwQQorOjEwMTEwMDAwQUY5RTdFNkEwN0E4QzA0MjlFQ0YyNzdFMTc2MkFBRjNEMQorOjEwMTExMDAwMDBDQTgxM0U0RTVDNTZBQzdGRTk1Q0VFQzQ3QTU2MTUzRgorOjEwMTEyMDAwQUZCRjZBOTBFNUIxQzk3MjkwRTUzQ0Y3MjY5Q0EzQkNCRAorOjEwMTEzMDAwNjhDOEMwNzUzMTc5RENFNTcxNUQ2NEM0REU3RDA0RTJBOAorOjEwMTE0MDAwRjYxN0QyRkREQjYxOUM5RDZDOUNDNTM4RUE2QTg3MEE2NAorOjEwMTE1MDAwRkIzNTg4QzZDNjRCQUM3MzU1Q0FCRjBGMjFFRDgzOTNEMAorOjEwMTE2MDAwRTkxMkU3MUY3Q0M1OTBGNjg1NzExQ0JGODg1M0Q3OUE5QQorOjEwMTE3MDAwNzZDMEIyQkUyMkFGMDMxQ0U2RjkwODNGRDFEODM5QTIyRgorOjEwMTE4MDAwODcwN0M3NUVBRjNBQ0NEN0FCODg2NzgyRTcwRUYyRjMyQQorOjEwMTE5MDAwMDIyQUNBNDgzQUUwOUM4QTQxQzJFNEVCNjE1QjI0NzFBRQorOjEwMTFBMDAwN0Q0QkRFMjdFRTFFNUM1RDhGRTdBQjc5M0M3ODlFNDI3RgorOjEwMTFCMDAwMDVBMUQ3NTIzQ0U3MTVGMzFCNEQ3MkMwQjIxRTY3NzJGMgorOjEwMTFDMDAwN0JBRkYzQjg5OEFFQjA3RTA5M0VDOUY0REQzNjY0RjU2NgorOjEwMTFEMDAwODdCRTE4QjZFRTZGQjhGNTVFRUI3RThDNUI5QUYzMkM4QgorOjEwMTFFMDAwRUY5NzZDMkNCMkJDQUZGNTVENkJCOUZGQkNENzdBQ0U3NAorOjEwMTFGMDAwQ0Y3RjBCNTlDRkY5NTlENTU0MkQ5RDYzNjczREU3RTc1NAorOjEwMTIwMDAwQTYzQUVCMzkzRjBERTZBRDkyRkU5QUQ2NzUwN0E1OEY0QgorOjEwMTIxMDAwQUY1RkJDNTUzNDU2OUMzNzYxN0ZFMTk4RTdGRUEwMUY1NQorOjEwMTIyMDAwOTg2NDVGOEJCQzNGRjFBQzIxRTI4RDU2M0RFODBFNTdEMAorOjEwMTIzMDAwQjE3MzcxMDY3QzdCQUJFOEZENTFFMkQ3RDBDMUU1RTcyNQorOjEwMTI0MDAwRkY4ODdEN0JCNTVFQjY5RTMzN0FCRjFEQTM0QkQ4NDEyOAorOjEwMTI1MDAwNzlERjhGMzhCN0FGNjJCMDBGRTVBMDUyM0U5RkNGOUJDQQorOjEwMTI2MDAwRkM3Q0JFNTcwQzhFMTdDNDM5MTcyOUNFQjMxODM1N0ZCNgorOjEwMTI3MDAwNEZCNDdGN0MxRDZGRENGRUYxNzZDQjQ5REYzMTM4RTc2MAorOjEwMTI4MDAwMjM1NUZGMjZEQUFGOTFCQzJEMzgzNzkwRjJBMzBGMUVGRAorOjEwMTI5MDAwRTVCMkY3MDZENUI3OUQ1OUM1Nzg5RTg1RERCOTI4NjZCNAorOjEwMTJBMDAwNEM4RUM3M0I4OTc5RkRDNEY2NkRGMzM4M0UzMTU3OERCRQorOjEwMTJCMDAwNTM5RUU5QkREREU5NjM3MjYxMzI3Q0I0NTMzMTIzNzAyMgorOjEwMTJDMDAwQ0U1REZDM0MwQjgyNzY0MEU3RjNBOTdDQUU0NURBNEU1RQorOjEwMTJEMDAwNjI5NjUwMTY4NTE3OTEyOEUyOEQ0MjY3NjQwN0FDODNBOQorOjEwMTJFMDAwRTZCMjdEQTMyREQ3RDg3MEZFNjkzOTY3RUU4NkZDOTNGMAorOjEwMTJGMDAwRDY2QjM0RENCNzU4QUIxQTU4NUVDRjY3RjM1MzAwRDZDMQorOjEwMTMwMDAwQTAyMDNGRTJBNEQ5NjQzOThGQzNCQkREMDM3QUEyRkZEQQorOjEwMTMxMDAwOThCRDRGRDU5RjhFNUNCNjNFMkMzRjJGNzIzMTNDRDQ4QQorOjEwMTMyMDAwQTUwNUYzNUMyODFGQTY5N0FENDc0NEYwREMzMjkxNkYwQQorOjEwMTMzMDAwOUIyQUNGOTYwMjQ3MEZEQTZEMjJGMDAxMUJCRkZCNjE5QgorOjEwMTM0MDAwM0QyNTg5RkVGQTVENENDRjAyMjU0QUM0MEU3OUEzMzdBQworOjEwMTM1MDAwOTM4ODdEMENCRkIyQzM2QjRCMUFDRkM4NzVGMUI4RTg0OAorOjEwMTM2MDAwQzU0Qjc4MUU5RDJFQ0VDN0NCNjNFN0UzNzU0OUU3NEU4QworOjEwMTM3MDAwRTZGMjdFMUU3MDM5OTkxQzE0M0NDNUY2QTM0QUU3OTQyOAorOjEwMTM4MDAwRDdGQjM2OTA0NDNDNUJDRUU3MTkzREY2MEVDNjk5NEUyRQorOjEwMTM5MDAwMEY4QzhEQzNDNUZBRDMyRUJFNEZCOUZBODIyRDk4OEMwRgorOjEwMTNBMDAwRkVERkJCMzQ5NjE3NkNEODkzRjY2RjNEQTdCNzYzODYwNAorOjEwMTNCMDAwRkZCNTIwOTU4Mzk2N0ZCNkUxRjlEMjAxNkZDQjM0REM3RgorOjEwMTNDMDAwQzdFREZBMDdDMkUyNUQ4Q0ZFN0FBRUE3MDE2RjY0MDczMworOjEwMTNEMDAwQTFFMzE3ODhCRUYxMjhGQzNFODc1RUU2QzBGNUU3RDM5RgorOjEwMTNFMDAwRDc1MDdDNDI2NTY4NTc4Q0UyQzU4Mjc4RkY1QzdDQkUzMgorOjEwMTNGMDAwMDlFQzNENUE1NzU0Q0FDRUNEODc3OENGOTIwMTk2NDcxMworOjEwMTQwMDAwQkVCQzZDMUYzRjc3QTUxRkY3MjVDQUJGMEY1MjVFMTdFMgorOjEwMTQxMDAwMzI2MTVFNUVERTE4REQ4MUY4QzdFRkFCQzJERjBCMjEwMworOjEwMTQyMDAwRkU2RDZDQkQ1MERFM0Y2OTIwRUVFQTE4NjI3MkRGRjE5RQorOjEwMTQzMDAwNTM3RjE3RkVGRTg2NTdFMDQ2QjNCMTc2NEFGQzdDQUY3OQorOjEwMTQ0MDAwQ0E3MzQ3NzdDMjEyOEM3Q0JFOTc3QzhFOTBGMENCNzRBNworOjEwMTQ1MDAwMDk1NzBBN0ZBQzgxNDQ4RTY5Q0FFODM4NzMyQTdGRUM0OQorOjEwMTQ2MDAwOUY1QzFDOEY1QzQzRkQzMTNBRkVCNzM5NThGRTZDRTAzRgorOjEwMTQ3MDAwM0VBNTBDOUNDNkI0RkI5NDVDQjA1RjJEN0M5QzVFQUIxRgorOjEwMTQ4MDAwMEM2MTVFNDA0QjhBRkQ3NDdGRTQ3MkZGNUE2NTE0Rjc2RAorOjEwMTQ5MDAwMjk3NTE0ODRCQ0ZFMzFDQUU3QkE1NDJDQUY1RjY0RTdFNworOjEwMTRBMDAwNzhFODRFOTZENzMyNzJFNTc5NUM0MkFFMEJERDBFNzY2NworOjEwMTRCMDAwQUVBMTlCRjlEQjBCMkYzRDlEMzdENkZDNTkxRTA4MTFDMQorOjEwMTRDMDAwRTgwRkI1MkY0OUYzNjVGNjg5RjZBM0VDM0MwQUJERjVBNAorOjEwMTREMDAwOUQ5QTY0RkEyQ0Y0NzBCRDFFRkM4OTBCRjYxRDJBQ0Q3MgorOjEwMTRFMDAwOTEzNEI0MDMxMzNGN0Y3MjhFRkFFOUVEQ0Q5RjBDRjM3NAorOjEwMTRGMDAwMTk2OEZGQTRGRDVGN0NBMDFGM0I0MkQ2REY3NTEyRDdBMQorOjEwMTUwMDAwOTM0NkM4ODlGQ0Y3MUVDRDAwN0ZGMzc3RTlBMUMzNjAzRAorOjEwMTUxMDAwRjcyMERFMERGQjA1M0I2MkNGMzhEMTlFNEE3Qzk3RUI2RQorOjEwMTUyMDAwQjlDRENEQzY1M0Y3QjFGN0U0MzdBNjZGNjU0MjlDRTQ1OQorOjEwMTUzMDAwMDYzNzFCMTdCQkQzRUM4MUZBNjdEQUNERTM0MERGODNCNAorOjEwMTU0MDAwOEI5MkFGNDNCQUI0NDUyN0ExREM3NTQ2RjAxNDk0RUJGNworOjEwMTU1MDAwODhFREM3RjhGMTI3NjlFNjRCRjBCQzU0MzM0RkMzNzVFQgorOjEwMTU2MDAwOEZERDdDOTlEOUU5MUFDRjdCQzVGMTdEMENBOUM2MTkwRAorOjEwMTU3MDAwMTYyRURFMkI0RUU0RDdBN0UzQjNERDE5RUM4N0Y2RTk5MAorOjEwMTU4MDAwM0MxODMyMkU3MzlDRERGNDVBMDc3MzBCRkRCRUJGMzIzQworOjEwMTU5MDAwRjk3QTdCMEI5NzI3QUE2Nzk4OUYyNUY2QjkwNEJDQzRGNAorOjEwMTVBMDAwNEMzNjdGODlGMjc0RkNDRjAzNUQwRkVBRTEyMEVDRDc2MworOjEwMTVCMDAwM0EzRENENDZGNjI3RDgzOTcxMkU0MTRCOENGOTg1RTc1NworOjEwMTVDMDAwRUY1MUY2MzNCRjkwRTBGRDRGRUYyQ0Q4MEZFQkJCMzc1OAorOjEwMTVEMDAwQ0ZFMDdBQ0NGNzU5REM3RThGNzVERkIzNjhGN0NBNEM2MQorOjEwMTVFMDAwNjU0MkZBRjlDRDRDMjYwNzc3NjczQUYwQkEyRDkzRDFDOAorOjEwMTVGMDAwM0I2MUZEQ0M2MUY1MDgzREQ1MzU3NjVERUU2MUVEOUYzMworOjEwMTYwMDAwRTFGNTdGQ0NFRkE5MUVFNkI4OTkxRUY2QkIyRTZGN0NFNAorOjEwMTYxMDAwN0VCOEFBRThEM0NCODdEMDA3REQ2RkNEMzNGRDE2RDdEMAorOjEwMTYyMDAwMDc2MUFGMjg5REQ3Qjg1MThFOUE0M0U5OTc0N0U3OTQ1MQorOjEwMTYzMDAwRjJDRjQwOEVDNTdFMDMzNTQzQjFDNEMzMDNEQzdFREVFQQorOjEwMTY0MDAwRTQxNkI4QzhBQzc0MzNGRDVEMDBENzMxRjQ3NzkxOUJENAorOjEwMTY1MDAwRTk2RjhEREJBQUJGQjU2RUE2QkY4QkRENEM3Rjk3Qjg1NworOjEwMTY2MDAwM0Y4NUZFOUUwNUZEODFGQzNDMUVDNzI3QTdBQzc2ODcwMworOjEwMTY3MDAwRTJFMjU1RDA3RUJEQTZGMDdEREJFNDBGNEE4MkZGNTE0OQorOjEwMTY4MDAwM0YxMDIyMjY5QjJDOUY0OEM0MEQxNEJGOUFCODVGRTNERAorOjEwMTY5MDAwMzU2QjdEM0Q3Q0RFQTI3NkVDNEI1MDZGMEZEN0RGMURBNgorOjEwMTZBMDAwQkY2NUZDMDMzRTNFOTM0NDJGMDUxRjU1Qzc1QTJGRTRFOAorOjEwMTZCMDAwQzVBNzlBRTcwMjZFQjZCRkJEQ0FDMUY2NTM5MDEzQjQ3MAorOjEwMTZDMDAwRkQ1OTk2RkU2QzA2N0U4REY0Mjc0QzNEQkJFNEZEMDk2QQorOjEwMTZEMDAwMjdFRDRGOUZCNUJFODRGRURDMEJGNThBRkUyQ0JDNzQ1MworOjEwMTZFMDAwNkE0QzdEMEMwODdERjQ0NDU1OThCNzAzNUFGMjc5QTFGMQorOjEwMTZGMDAwRERDREU2Q0RERjY3OTgzQkExN0U1OUJFQzQ3NTE3OTc1NworOjEwMTcwMDAwQUY1NEZCNUVCQUI0NDVCQjgwREZFNTFBQjM4M0M0ODgyRgorOjEwMTcxMDAwRjZBQjA5RkQyQjJGNUUyQkZBMURCMjI1QzZEOTA2OTIxQQorOjEwMTcyMDAwREJDOTQ3REQyMzdBRjcyOENBREY1RUI2NEY4N0NBRjVFMworOjEwMTczMDAwNjNEMENFNkQ5MzNDQUI3MTVGRDc0N0NDNkU5RUZERUIxMworOjEwMTc0MDAwN0Q3NkY4OUQ5NEE2OUMzREY3QzNGNUE0OUJFNUJEQUNDMgorOjEwMTc1MDAwM0Q1N0U4ODY2MUU4QUY2NEZCMUQ1QjcyRDlGOTY4MkRERgorOjEwMTc2MDAwOEFGNTlDQjQ5MzdDN0VDQ0NEMTQ3RUY1QzRDRjExQzc5MgorOjEwMTc3MDAwQjM5MkZGNEVGMzFCRTU0RjA3Qjc0QkZENjk0NTk3NjdFMworOjEwMTc4MDAwOTdFNjdEMDZFRERGM0M4MzIwM0U2RUQ5QTdFMzNFMDM1RQorOjEwMTc5MDAwQTEzN0I3QzFEOEIyNzMwRDRDQzhBM0Y4MTJCREI3RDFFOQorOjEwMTdBMDAwRkI3RTcwQkEyOTFEQTE3QzQyQkM3M0IxNUM1OEM3NzMyMworOjEwMTdCMDAwMEZDQ0Q3OTgzRDMyN0YwREUzNEJFREQwNTk2RTg3NUU0RAorOjEwMTdDMDAwODc3QjZBODc3RUYzNjlFQ0QwMzM2RUE2MzdBRDU0ODY4QgorOjEwMTdEMDAwRkE0MDBFQjUwOERGOEZDM0ZEMTFERUQ3RjJFMjYzOTY0MworOjEwMTdFMDAwQjg5REYwQTczQTA2RjYxQjYxQzgxQjJDNjZGQjRGNTM0OQorOjEwMTdGMDAwQjUyQkYyMDVDN0ZCM0Q4MkFBN0Y1RUU3MDQyNzYwMDc5MQorOjEwMTgwMDAwQzU3NTEwNDcxNUJGNUZENzAxRUQxQkQwOUVBRDExRjgxMAorOjEwMTgxMDAwN0E5MkE4QjgwRTJGRDdENzMyOURDRkZCMkUyRUNGQjlGNAorOjEwMTgyMDAwMUJEMEJGOTI3RkJGQUVEQTFCRDkzNTk3RDYxMzM4NzE2NAorOjEwMTgzMDAwM0IzQjJGRTFFMkVENjRGNTJDQzAyNzIxMDJFNzZBRUE4OQorOjEwMTg0MDAwRjQwQUZCREEwNUREQUVDQ0FCMkNGMTQwOUQyOERBRTJFMAorOjEwMTg1MDAwOTJCODFEQTk4RTkxRThDMjUyQzQzN0I4N0YwQkVBRjE0NQorOjEwMTg2MDAwRjE3QTQyQjM2MEJFQ0ZDMjczNTY0RjE2MjdDRjRGRDgxRQorOjEwMTg3MDAwQTU4NjcyMzIyNzI3RjA0MUZBREQwQjNBRkU5M0UxM0Q0RgorOjEwMTg4MDAwMURGRjI5OTlGMzcwRkNBNzY2QjI3OUM4MEJGN0JGRTE3OQorOjEwMTg5MDAwRTNCODRCMERFNkMxRjM1MDBFNUI4MkE2RTVGMzc5Rjk5MAorOjEwMThBMDAwRTk5OTlGODE5Q0VDMjBFQzc3NkY0MTdFMTNEN0FCRjdEMQorOjEwMThCMDAwNzBGQkYwQjNDOUExMTI2OEFGRTZBNzJCQkFBN0QxNEY0RQorOjEwMThDMDAwMzZCNUFEQzU3MzhBMTc1RTExRkJFODY1Q0ExRjkyQTdDRQorOjEwMThEMDAwRTM3QTYwQ0JDM0Q2NzlFNDA3MUNGRkZDM0M1M0FDRjczQQorOjEwMThFMDAwNUQxRThFQTBGNkVGQzY0Q0E0OEZEOUJGQjA5N0ZEQkU4QgorOjEwMThGMDAwRTdEQURDQzJFRjMxRjg0ODFEQ0MyOUYxNzM2QTZCM0NBMgorOjEwMTkwMDAwMkI2QUUwRjcwQUJGRkM3NEMxNUMzOEQ3NEFFN0Y2Nzk2NgorOjEwMTkxMDAwQjFCNzRCNUYwN0UzMEFCRkZGOTRDNDlFMzc4RUQ4NDEyRgorOjEwMTkyMDAwNkFCRDJERjM1NEYyRkNENDJGNjVCMkY5OTNFQUYxQjJGQgorOjEwMTkzMDAwNENBNkJGQ0I4MUNFN0Q5M0NEOUIzMkU3RkRGREVDQTNDMgorOjEwMTk0MDAwQjA0MzIxOEREOTFCRUEzNzg1QzE2RjVBM0REQ0RDMDNEQQorOjEwMTk1MDAwRDM1NDEzRDk1MzBCRUIxQjU0MkUzNzAwQkQ1RjcwMUVBRAorOjEwMTk2MDAwRTg2MTNGOUQxMjlFMDZFRDUyNzlCQzgzQ0JFMzQ2MkU4MworOjEwMTk3MDAwNUY3NzcyNzlGQ0YyQTdFOUQ3NkE2ODdDNUU2QUZDMjkxNgorOjEwMTk4MDAwNzBCOEMwREZENENFN0YyQjkzRTE2NDlGRkJCMzk5Mzc0RgorOjEwMTk5MDAwNzZGMEZBNDJFRUNCOUMzNzZFRjkwQ0RBQTc3OEUzRkJDRgorOjEwMTlBMDAwQzBDNzkyNEMzMjI2QkU3RDk0Q0JENTYzOTkyM0Y4RjZGRQorOjEwMTlCMDAwMzFGODZFQTFEMzdDM0MzMzExNkY5NDlDRjgwM0U0QzlEOQorOjEwMTlDMDAwQzVGMTQ2OTdDQUYxODY5NjE4Q0YwRTUwRkNDNUYzRUFDQQorOjEwMTlEMDAwRDZEQkU2QzdGNTQ0OEYyNUM3MjE2NTk5MjM3RUNBQ0Y5QworOjEwMTlFMDAwRDBBRUVDNjIzOEE0NkM4NDZFRkY0MDA0RjQ3MDFBRDc1OQorOjEwMTlGMDAwRjczNzk4M0Q1RUFCRjdBRjA3RkI3QzNFOEI3RDFGQ0I4NworOjEwMUEwMDAwNjJFM0Y4MUNBRkVGNkRDNTk1MzRCRUY5NDJFNjA4RUUwRgorOjEwMUExMDAwNzkwMURCQkI4RkI1QTc2NjVDQzc3RUI3NDNEODE1QkIyMgorOjEwMUEyMDAwODJFRDg4Rjg3MDU5QjZCNTlENzlEOTM2MEI0RTk1REJBNQorOjEwMUEzMDAwRTk4RUY3QUIxQkU1RjgxRUIxRUZEN0VDODE3NjAzNzFBOQorOjEwMUE0MDAwQkU0NjEzRjkwQUY2QzUzNjNGODE5RjFDRDdBNUMyNzE2MQorOjEwMUE1MDAwMDlGQzdCMDVGQkQzQ0FEQTE5RTE1RjI4Qjk5REM1REYxNAorOjEwMUE2MDAwMzU2NEI4RjQ3NUEwMkY5NTdDQkNDNUU1RTM3NzcxRjlCMgorOjEwMUE3MDAwRjgxRDk3OEZERkMzNzczN0NGNjBFMzcwREIyNEVCN0VGMQorOjEwMUE4MDAwRjI3N0Y5NzdGNzcyM0U4OUYxOTJFOUZGN0EzNjJCMzdEMAorOjEwMUE5MDAwQzIwRkRGODkyNzEyNzE2REEwMzg2Qjc1MTNDNDJENUJERgorOjEwMUFBMDAwNTVCRkNEMzc1QURFRTg3RjMzNkQwOUY2NTgxRjg4RTAwMQorOjEwMUFCMDAwM0M1MTBGRjI5NkM0RUVGRTI1Q0VBRkJGRTBCOEQ0MzA1NQorOjEwMUFDMDAwN0U3NUE1RjBFM0VFQ0M2NkZEQkUyNTdGNUZDRDY0NjgzNAorOjEwMUFEMDAwM0Y3Q0M5RjI3QjJENUZEOEQ4QTUyNkZBMDlGRjFCQkUzMworOjEwMUFFMDAwNUYwQjU0MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwNgorOjEwMUFGMDAwMDAwQkU1N0QwQjYwMTRENUQ1RjA5RDlERDlEOTREQjI3NQorOjEwMUIwMDAwOUI0Q0RFMUI0OEMyMjQwNDBEMUE3MDgxMTBBMzA0OTk1QgorOjEwMUIxMDAwQkM3ODA2ODhCQzQ0NDU1OTFFODZGMDRBMjI2MjRCQUIwRAorOjEwMUIyMDAwRkUyQzI2ODRBNzZEQjQzRUIwNDVCQjIwNTRBQzY4MjM4MAorOjEwMUIzMDAwQTY0QTMxRDAwRDA4RTJCM0ExQURBMkI1OEYyMDA4QTgwNgorOjEwMUI0MDAwMDgyMTZBNURBQjdFRkNGNzlDN0IyNzNCQjNEOTA1RDRBQgorOjEwMUI1MDAwQjY1RkZCRkZGMUVCNzdCOTc3RUVEQ0M3Nzk5RjczQ0YwOAorOjEwMUI2MDAwOURCREZFQzNFMzczMzUwNzIxRTdFMDZGNDRCMEFDNEE4NworOjEwMUI3MDAwQjAxMDkyNEM0OEZEMENGNzQxMzU5RjEwQUZDQkUyREUyMAorOjEwMUI4MDAwNEE3QUY2NUIxRTJGNjNCRjUxRDkzRTI5OEVGNjdCRTM1RQorOjEwMUI5MDAwMkM1MTM2RDM3RTM3NEMxMTM0NUYxRTIxMjMzQjg5RTYwRQorOjEwMUJBMDAwQTNFMzdGMTkyRjEwMzI5NDEwNDU5MUIwRkYxNTA5QUNCMworOjEwMUJCMDAwM0U0QUVFOTg1QjE5NjZGRUJFRkNGOTY4OTU2OENENzRFNgorOjEwMUJDMDAwOUNEMTBBRDE3Njg0RTk3NzI5NUZFN0E4RThGMEUzOEMxNQorOjEwMUJEMDAwODI3MUU4RjMzMTg0OEQxM0ZBN0MxQzdGM0VBQTI0RkNDOQorOjEwMUJFMDAwRkI5N0MxRjg3NDFERDM1RENGOTQyNzEwNThDRjI2QUI1NworOjEwMUJGMDAwODdGNkNCQjE2QUI5MEE2RDVGNTNEMkIxMjhEQzdCNEU1MAorOjEwMUMwMDAwQTkyNDBGOUU0NzUxRDA1OTA3MTM3MjMzN0RENzQyMDczRAorOjEwMUMxMDAwOTg0OTRCOTk5NkVCNDVDRjYwODVDRUVCQTFFMDcwRDEwQQorOjEwMUMyMDAwRTdCNDVCQUZDQTAxODQwQzcyNjg0M0EwRkQ4QjI4MkQxQQorOjEwMUMzMDAwMUZDQTdDNDkxQjBBRTNEQzZCRDUwQUEwNEU4ODlGOTAyMworOjEwMUM0MDAwMDI0MjI2MTBGNjM3QzFFRUYwOEJCMUY0MUY4NUQ2NTM1MQorOjEwMUM1MDAwMUQ3NkQ2NzYyRTFCRkVGRjBDRTVGOEU1ODQwOEM0MkYxMgorOjEwMUM2MDAwOUNCQjFDRUEzRTExQzZCRjVBM0RGOEI2NDBGQjVGQURCNworOjEwMUM3MDAwQkY3NzUyMEE3OTJGNUQzOTFFQzNFQjIyQUUwQkUxQjM1OQorOjEwMUM4MDAwQ0JGQTkwRUFCMEY0RENBNzVFRUU3Mjc4RUMwMDg3QkY4NgorOjEwMUM5MDAwNDQ3QkM2QzMzQUVCNUQ5QjFEMkE4NUY3MkI5RTY2QkIzMgorOjEwMUNBMDAwOUJCNjFGOEUyMzA4QzdCRkM2NjgxMzYxM0ZGNUJCNDhBQworOjEwMUNCMDAwNzUzMzZEMTc2Mzg0QkE2NjAzRkNBNjI4MEM5RjUzMTUxMQorOjEwMUNDMDAwODZGRjM2NDk5QjBBRkQ0N0Q4QjU2OTMwRUU5NDRDOEFBOQorOjEwMUNEMDAwMjczQUVFQ0NDNDhFQTU0NkI4Q0ZFNDc0MzA5REUzRUIzMgorOjEwMUNFMDAwNjY5OUY1MEI1REU3NTRERUFGNDgxMkJDMzFCMDI2QzdFQworOjEwMUNGMDAwQzE2MzYyMEE4NTA3RTlGRUNCQjFEMEZBNThGODk3NEE2QQorOjEwMUQwMDAwRkI5RDU0QTY0RDRGQTIzODVCMkRCQTJEQjQyRUU3MEE4OQorOjEwMUQxMDAwNDhDRkExRTMyRUUyRUI5RDJCNTcyRTgyRjUxMkI1NEU1NAorOjEwMUQyMDAwQUQ3NDUyRkE5MEMzRDNDNzMxREVCRjNDMDI1RDY2RjE5OQorOjEwMUQzMDAwNzU5NkMxRjMzMEVGQTc3MUZFMjg0QjZBMTMwOTdEQkY3QQorOjEwMUQ0MDAwODhGMzVCNjhCRjQ5MDkyMkUzNjMzNzE5MUQ2RTlDN0FFQgorOjEwMUQ1MDAwODVEMTNGNUQ3NzNERDI5N0MyRDY5RDYzQUQ1QzA5RkJDRgorOjEwMUQ2MDAwOThBMTFDMkE4RkE3Q0RDNUY3MjQ0RDIzNDkwMDBGMEIzRQorOjEwMUQ3MDAwQjE2NTIxOUNFQzg0QzI0OUUyNzBBMkNCMjQ1MDVGNjIyMQorOjEwMUQ4MDAwNjc3NTI5N0ExMTg5QTM2NUE2Q0JCNzZFMjBDMEFGQzE0QworOjEwMUQ5MDAwRUE1NjY5RkRCRDkzRUY4OTg0RDJEOUQ2RkJCQjA0NDJENAorOjEwMURBMDAwRTVDNUFFNEU0MjEyQjM2MDFDMTk0Njg0M0ZDQjM5QTE0MworOjEwMURCMDAwRTc3OEY0OTkyQUU5RjM1MUQwNUM3MzkyNjgzNjRBQkYwOAorOjEwMURDMDAwRDcxNDc2NEUyMkIxQTZGN0M5MzkzQTlFQTNCM0REMkJCQworOjEwMUREMDAwMDBGRUVDQzQxQjczMDU5MkYxMUY3MzUyNzA1NDFDMkY0QworOjEwMURFMDAwOTVDRTBCRkI5MTNGMjUzRUQ4OEZFNkYyNTQ5MDgxODQyRgorOjEwMURGMDAwQzQ3Nzc2RkNBQzE2REIxREVFNTFCODJGRTIwMDdFMEJFQgorOjEwMUUwMDAwRUU3MzA5RjI5RkJFMkVEOUQxRjFEODhGNjlGRkQ2Q0ZEQworOjEwMUUxMDAwQTJERDc3QzNCRTNCNDc3RUMwRDY0M0JDNEVFMDZCQjE2QworOjEwMUUyMDAwQzJFREM5ODNGNzZDQjgzRTBCRkQwRkY4NkM3ODgwQUUzRAorOjEwMUUzMDAwMzc5N0FGMTcyNkM5MzdBQzlGRjREQ0NGN0FCMUYyNzk2OAorOjEwMUU0MDAwQzBDNzRDM0JEMTYyMDdBMzdDRDgwOUY1QkU1NkRBODFFNgorOjEwMUU1MDAwQzJCMTUxMTE3QzVFREFBRkYxRkVCOUFCQjM0MDVFQUZGNworOjEwMUU2MDAwOTdEQ0ZEMDhEMDM5RDkyOTUwM0ExRjQ2RTc1RDQ2RTU5MQorOjEwMUU3MDAwOEU1QzQ4MUMwQUFEQ0IyRUI2RkZDNjdCOTIzNkM1MDhEOQorOjEwMUU4MDAwRjA1QzIyMzNFOEYzNjE5REZFMkYwNDBBODc1ODU3NTUxMgorOjEwMUU5MDAwODU0MkY3MjFGM0Y3MDUwQTM4Nzg1RjUwMTUzMjYzMzAzMQorOjEwMUVBMDAwRDA2REJCNDg1MDNFQjgxMDFFM0FGRjY4OTcxMkUxMzgxQgorOjEwMUVCMDAwNUQzNzNDMDJGQTJBOTM4OEQ3NEVGQjBCMkUzNkVFMzU1RgorOjEwMUVDMDAwQTQ1MzI0N0QwMTBGNTQxMUQwQjI4NEI4QjE2QzE0M0REOQorOjEwMUVEMDAwNkYwMkZERDk2NThBNTdCQTdFQkJDNUVFNUIyMTAwRkU1NQorOjEwMUVFMDAwMkE1RjFCOEQ3MDJGNTM4RUU3MDZFNTU5MjQzOTA0OTAyNQorOjEwMUVGMDAwM0JBRUMzNTVGQ0VFNzJBRjdDNjk3OEJFRkEzMEM4Mzc5MgorOjEwMUYwMDAwMUYzMkI5NENGOTg2Q0UzMzI1OUJDOTlERkRDRThFMTk2MworOjEwMUYxMDAwNDZCRTVGQUEzMEI5QjQ5NEYzM0Q5MTE4OUZDRDk1QjVGNAorOjEwMUYyMDAwQjM4MEM3NDg3Q0JFOENCRjk3MDZDQTA3Rjg5ODg0RTc4MQorOjEwMUYzMDAwRTM5RkM3QjNGNTRDQjlEQkQ3RDg4QkMyNkY0MjgyRTBDMQorOjEwMUY0MDAwMDYzRDVDQkU3RDk2RDQ1QjBERjY5M0I5QkUzQjk3QUM2NworOjEwMUY1MDAwOTE3ODk0QzNFRTkzQkUyNEQwM0UzMkVBRjdDNjc3Qzg5OAorOjEwMUY2MDAwNzQxODdGMTY5NzlGMjdGOEI4RUZDN0IzNzVDNDcwM0RGNAorOjEwMUY3MDAwN0U0NDcwNEUwRjA3MTc2NzdDQjcxQzc0QzJGOEM0QzM0OQorOjEwMUY4MDAwRTAyMkM2MENFQUY0RDM3OTQ4NkYzRThGNTVDMDc5REE2NworOjEwMUY5MDAwQjI5OTdDOEM0RjMwQ0YxM0NCRTUzODk1RkJDOUYxMjgzMworOjEwMUZBMDAwRjc3REU5RDBFRjE1MkI1QjVGRThCQ0U5QzE3OUQzNzExMAorOjEwMUZCMDAwREU0NTZDREVCMTIwRTc4MUZGRDU4MzJGODI5QzJGRTJDNgorOjEwMUZDMDAwNzQzQUI2RDM0M0MwRUUwMTFFQjYxNDA0RTVCREFDRkFCNAorOjEwMUZEMDAwQzUzQURBNUUxNDQxQ0VGNzBGQ0VEMzFGRTdBOTYzNzg3NgorOjEwMUZFMDAwREM5RUEyNUQwNkVCQTQ3NkMxRTU1MEI2NjUyQjI4MkZEQQorOjEwMUZGMDAwREZFODY1MjE5QjI5NUZDRTRBQ0JGRTExODg0RDdEOUM5MQorOjEwMjAwMDAwNEQ3QzlGNkQ1OThEQUVEOTE0NUY3MjI3NzFEQjkwQ0VEOAorOjEwMjAxMDAwQUI1MUVFMTU3MUY5NTJCRkNCNDNFMEI5QjcxNzk1OTlBMworOjEwMjAyMDAwODZGN0U1Q0VEOTc2RTJDMEFERkNDRjM5QkQzRkYwNTFBMQorOjEwMjAzMDAwNjc3NjlDMjcwQzVFRjQ3MkRENzIyNjhBODhCQTE4REZGOAorOjEwMjA0MDAwNUJDMkRGMEJFREU3Nzg2MDZGMEM4Q0JGMTZGQTVGNEE1RQorOjEwMjA1MDAwRjk5NkVCMUJCQTYxNUNERjU4Q0UzQkY1OUQ5QjYzM0E2QQorOjEwMjA2MDAwNjhCRjVEQjk3MzRDRUJDMUU3OTQ4RjFBNzMxRjhCMDE4NgorOjEwMjA3MDAwN0JBOTM1ODNFQTAxOTA1MzJGOEIyODI3MUI5RDBDOEY1QQorOjEwMjA4MDAwOEQ2OTU1QzQ2MzgwNzNBOUNCMkYxRTg3NzFCRTlBNDM5NworOjEwMjA5MDAwQTY1MUZDMTVCOTNDRTQxMjY3NzBERDQ1Qjk1NTVFMjFDNworOjEwMjBBMDAwMDlEQjlGOEJBMkUzQ0M4OUJGMDRFOTQ2Q0VGMzkwOTE3NAorOjEwMjBCMDAwMEU4MDRCMzNBOUEyRkI5NzE1QkZFOEE2NjU2OTI3RjFFRgorOjEwMjBDMDAwOEZDODg3RkU1NENFMEI2QzNDRDU2OTFDODczNEMzMzg0RgorOjEwMjBEMDAwQjI5QkQyMDNCQ0Q3RTlDN0Y1RUMzQTc5N0UzODNBRjIyNQorOjEwMjBFMDAwMkMyNkY5QURGMzI1QjVFQjZBODAyRUNBOTQ2QkNCRTJCMgorOjEwMjBGMDAwRTlGODBCQjY2NzBEMTZFOUY4MjM1RDZERjJFQzNDOTQzOAorOjEwMjEwMDAwREJCNTQwMUY5QjkyQjUzQUE0OUZGRjI1N0I2RTNBRjE0OQorOjEwMjExMDAwNTkwMUVGQTMzMjk5MUU5ODUwMjNGODM2NTNGODM0ODZBQworOjEwMjEyMDAwRDgwOThEOUM0RTJGMEREQTM3QUI2MUZEQTQ1MEI3MTM0MworOjEwMjEzMDAwQjQzNUYxRTdCNzgzRUY4OTNGQkYxREZDOTNGOEYwNzYyNAorOjEwMjE0MDAwRjBGREYxQ0MwRTdFMjA5RUQ5QzEwRjQyNDlFREUwODcxMworOjEwMjE1MDAwRTJCRjgzMUQzQzVDMjFCQTFERUE0M0Y4QzdCMzdBRkQ5OAorOjEwMjE2MDAwOUY5ODNEMUFCQUZFRjlGMUNDMEU1QjRERjdEQTBFNzQ2QQorOjEwMjE3MDAwMjlGOTI0NDZFNzhDNEZBRkU2N0MzQUY2MjRFNTk3QkM3NAorOjEwMjE4MDAwOUVGNERGNEFFOURGNEJFOUFGOEJEQTRENjI1NjY0N0FBMQorOjEwMjE5MDAwRjI1RjI0NUYxNjNGQzBGOEJFREVCNTE3RjlFRUI3OUNCQworOjEwMjFBMDAwM0Y1QkY5RkNBREI5NjIwNUUwRjMxNTIyMkFBMkQwNzNCQQorOjEwMjFCMDAwQkNDNjBDOEYwQkU0N0EyOEZGNjk1Rjk5RTlCOUQ0RTVCNgorOjEwMjFDMDAwNUIzRjE4RjhFNkUwMUMzNzJDMkI5NDFGNjU1QTU2MEQyMAorOjEwMjFEMDAwMDhBRUZCRjc5QzBGQkJFNTEzMTFBNDkxMTdDMTg3MzAyNAorOjEwMjFFMDAwOEU2NzAwRDgxOUYxMTJGMDVGM0Q2MUYzN0EwRjhBQTg2QgorOjEwMjFGMDAwMjcyMkYxMTFBNTlCNzdFMzBERjMxNTAzQjAwREVCQTc5MworOjEwMjIwMDAwNzRGMzY3QzAyRkU1QjNCRjdDMTc3QUY5M0VBNzBGRUFENgorOjEwMjIxMDAwODcxQzg3RjE5Mjc4N0Q1NjA0RkZFMkUzRjg2RUJCRTBGRAorOjEwMjIyMDAwNjM5Qzc3MDZEMzQzQ0U3ODk1QkQ0NzkyNjREMDJGOUFBRQorOjEwMjIzMDAwOTg5MTA5RjI4NThFN0IxNkM2REQxMzc3RkU3MTAzNDFGNgorOjEwMjI0MDAwQkQxMzQwQkE1REM2QzY3RDFFOENFQ0U0OUVFMzhFNEE4QgorOjEwMjI1MDAwQTBGNjQ3OTg3MUVDNUM4RURGMTBDMTVGNTBCODVENDMwQgorOjEwMjI2MDAwRjJCQUVEMTM2QjAyRkFFRDZDN0Q0RjI0NkJCNjg0RTQ4OQorOjEwMjI3MDAwMjBERjE0NzFCQkU1MjVDMUFDOTc1M0I5M0U1N0I4M0Y3OQorOjEwMjI4MDAwMjcyNkIwRkU2NDZFRjdCODBBOENBM0MzNTNCNzAzNjY2MworOjEwMjI5MDAwNzFGOUEwOEY5M0M0RjkyRjJFNDE2MUVCQUE2NkVGMTM1OQorOjEwMjJBMDAwNUUxRkM5RkQyNzBBOTdERUI4MkUzQjdCN0UyMUJGRTg2MworOjEwMjJCMDAwMkU4NUM1MkQyNjcxQkJBQTEzMzZDOEY0MUJDMjc1NzRCMgorOjEwMjJDMDAwMjRCRjJCNjhGN0Y1MDdCODEwMzdFQjlGQzZFMTQzREI1NworOjEwMjJEMDAwRjNCMEJEODJBREUzNTI0NTBEMUIzRjg4ODQxRjFERkU0OAorOjEwMjJFMDAwNTIwMjVGNEYyRTFCOUY3OEJCRTE3NjI1RUM1M0E3OTdEOAorOjEwMjJGMDAwNDg3MERCMTNDN0UwNTZBMEMzQUQ4MThGMTMyMjBGRDYwMQorOjEwMjMwMDAwNDlDRDc2MjVDQzNFNDc3MjdBRDVFQjMxQjk2NkY5MTBDNgorOjEwMjMxMDAwMjk5RTkyMTVENDEzRTMxMTFGRjk2Q0REOTFFMjJCRkQ3OAorOjEwMjMyMDAwRjg3RTJGRTM3OEEwRUY0RDQxRjgzOUQ4N0FFRjUyQkExMgorOjEwMjMzMDAwREJBRkMzRjY3NDM2REVDQzYwRkIwRDM4OEY4QkY1OEZDOAorOjEwMjM0MDAwRTRGN0NGRTRFQjlBOUFEMDhEQTc1OTM4NUUxMjdCMkYzMQorOjEwMjM1MDAwMzQ5RUEwOTczN0YyRjU0RDBGQUVBRjFBREZDQjYxRUY4OQorOjEwMjM2MDAwNDk0MUJDMkZDNEY2RDFBQ0ZERkFGNDRENjVDOTJBRTA1MQorOjEwMjM3MDAwOEQ4RTAzN0FDMkM1RjRDMTBERDU2REEyRDFERUI5M0VGMgorOjEwMjM4MDAwNDJGQzRERTJGMzU2MDVEN0ZCN0REQ0E3QzZGNjdGMjI2MworOjEwMjM5MDAwQUVCQkZEODczODZGMTE5QjM3OTJGQzM4MTFDN0M2QkJBNworOjEwMjNBMDAwOURFRkUzMUFGMDhCRTkxOEYxMDE5MjJCMjU4MUQ3MTRFOAorOjEwMjNCMDAwRUQxRTQ1QkJBNDA2MzQzRkU4OEY5MjRGNjUxNUU0NzRDQgorOjEwMjNDMDAwQjlFOEYwMEE1NDFFNEJBQTFERkRFNDI4ODk2OEUwRDczRAorOjEwMjNEMDAwQjY3REY2M0Q1NzQ3MUVENkZEQTBENzU3NDUxNURCQzE0NAorOjEwMjNFMDAwRUY1QzlEMjVCOTQxMUYxNkRGMkIzMUZGRkE5NDA1RTVGRgorOjEwMjNGMDAwRkQ0ODcxMTE4RUIzNTdEMUVEREM1QjREN0VCNEFBQThCOAorOjEwMjQwMDAwMTU1MUIwMEVCQjQ4NTRFNkZGNTc4Q0E3Q0Y0NzcwNzlFMworOjEwMjQxMDAwQkRENzlFNjg4MUYxODY2NUIwNzhDMTA4QjUwQUZENzVBMworOjEwMjQyMDAwRjIxNUYzQTMzNUZBMUY5M0RGMUFFQTY1OTlCRjI3QTVDMgorOjEwMjQzMDAwRDcxMTAxNEJCM0JGMkQ5M0Y1NjdDNTgxQTgxN0QwOEU3NworOjEwMjQ0MDAwMUFENjY5RjZCRjY1NzVFNDA5MTg1RjI2ODZGN0U4QkNGOQorOjEwMjQ1MDAwREIxMjlDNDk2ODRGRTU5MDdFRTcyOEZGRDg3MjA1NjI0MQorOjEwMjQ2MDAwQkIwMkZDNkNDRjc2QzBDRjE4QjU0QTI5QTFGQkIxQTU0MQorOjEwMjQ3MDAwN0JFQzIwODc3M0FDRkVERTEwNEY2ODQ4OTdERDVFNjAxMgorOjEwMjQ4MDAwQzNGQkNCRUM1OUUwNkYzNTUxRkYxQ0UxQTAyNTVDM0I1MQorOjEwMjQ5MDAwMjA4ODI3NUI5MTQ2ODAwRTI5NEU5MEJGQkE0QjA3MkJCMAorOjEwMjRBMDAwODU0NDg2QzdCNzEzNkM1ODBFRTI3NUZENzkyOERFQjNGNAorOjEwMjRCMDAwMTNBMzE5RkYxM0JCRjc1ODJFQzgwOTgxQzQ1MTNBNUMwNgorOjEwMjRDMDAwNEMzQTMyODExRUM1MzRDNkU3MzU5NjhFMTRBODlGMjEzQQorOjEwMjREMDAwOUQyOTQ5QjRBQzZGOTI0Njg3RjM3RkQ2RjFCOEQ0MUFFMAorOjEwMjRFMDAwNEI3ODdCRTk1RUVCOTg1NzAxMEUxMkM0MERBRUMwQjg3NQorOjEwMjRGMDAwODBDN0Q2MzcxODNGRDBFRDU1M0Q4RTEwQzk2RTZEMTQ4QworOjEwMjUwMDAwMkJERjA0QkExNjE0RkYxN0QwQkZBN0ZERUI2NUZCNEVGNworOjEwMjUxMDAwNjc3MjVBMkZGNTc1OEM0RjY0RkM2RTRCQjQ2M0JGM0RFOAorOjEwMjUyMDAwNzc5NjkyRDkyQUUyRTkwOEM3RDNDMTJCMDEyQTU5NzNCOQorOjEwMjUzMDAwMTVDMEQzQ0I1OTBGRTY0MDVDQ0E5RTc1N0YxMkYwRTdGOQorOjEwMjU0MDAwNjhDMkVDRDM3MkZBOEU4Qjk2MkIxRDlFOTMwOTA2N0I4NAorOjEwMjU1MDAwNjM0Q0NFMkNCNDlCOEEzMkVCRDA5RTVBMTVDMTJGQkQ1MgorOjEwMjU2MDAwODVBRjQzRTI3NDMyQzhFMTM5MEJGQkRBN0FGRjEyM0JFNAorOjEwMjU3MDAwQkMyRjI5OTVEMTUwRUUwOTRDQzI5MkRBQkQ5RkMwRjMxMQorOjEwMjU4MDAwNTVFOUFDN0UyMTNDQkNDNEY5MzlEMkZBNDc4MTVFODA2MgorOjEwMjU5MDAwNzg0RDdBRjczRTg0QzQ2NDdDRUU5NTA3MDdGNzYxNTg1RQorOjEwMjVBMDAwOUYzNTMxQ0NGQTNFRTVGQTQ4NUY5Nzk0QzNFOTMyRDdCQworOjEwMjVCMDAwNEM3NzQ1N0NCRkE5ODlCQUJGNzhEMTc0RjdENkM1RDAwRQorOjEwMjVDMDAwNURFODdFQzc2NDJEMURERDlGMDREN0FGRUY1N0RGM0Y2OQorOjEwMjVEMDAwREQ2RjFGRDg2RkI5QzRGNkJGNTVGMTY4MzAwNDg1QjNGRAorOjEwMjVFMDAwMEFGQkVDQjEyRjdCNzhCREVGNDhCNDdDRDNGRDNDOTg1RgorOjEwMjVGMDAwRDBGN0UyRjdGMzBEQzY5RDk2RjgwREUwQjQ3RkI4RTY4QworOjEwMjYwMDAwMDI3OUQyOTA0Q0U5OTNFMkE5NDE2MEE1REVGRjBCNkVGRQorOjEwMjYxMDAwQTdGREZDOUJFMzJCQTVERjM3RDg1RkIxNEI3ODExRjQwNgorOjEwMjYyMDAwRTEwOENGOTE1MkQ4NkU1OUQxMjA1MDNCQzA4RjkzMDExMQorOjEwMjYzMDAwMEYyNTc5Rjc0QUIzNjlCREYxQ0UzOTI4M0ZGNzBGQUZCRgorOjEwMjY0MDAwQzM3NUFGNzI5QUQ3QUI5NzQyMjI4RkUzNjc2QUM4N0Y5MAorOjEwMjY1MDAwMEQ5Q0ZGQ0EwOUYzMjNGNTdFNEY3MkY5MThDQTFGQTExQQorOjEwMjY2MDAwRTM4NUYyRjU0QTg3MzYxN0Q2MjUyNDMyM0QxQkY0RkY2MQorOjEwMjY3MDAwREE0NUEzRkY1N0MyRjVENzcwRkI2REE2RjhDNzcwRUUxOQorOjEwMjY4MDAwRkZBREZBMzREQkUxQTUxQkVEQTI3QUVEOUZFMkZGN0QwMQorOjEwMjY5MDAwNDE5RjgwOUY5NDVFNjIzN0ZBN0YwREY2NTI2QzVGOTU4MgorOjEwMjZBMDAwQTE4REJFMjIwOUY0QjFFOEJFOUIyMEZDRDAxRkY0MEEyNAorOjEwMjZCMDAwQTJCMjM1OEMzRkI4MkE0M0Y2OEZBMENGNkQwQUY5MDUzOAorOjEwMjZDMDAwQUNBRjk0RUE0Qjg4QkZEODE0OEQ1QzMyQTBBNzVGQjgzQQorOjEwMjZEMDAwRDc1RTRBMjA2RUQyQTU5MEU3QzAxRkJCRDA3RTFFNDhCMQorOjEwMjZFMDAwQkNDNDY0NDc0QUUwMTdGMkYxRDEyRjU0RUE0ODA3QzY0OAorOjEwMjZGMDAwN0I0QTA5RDgzNUQwQUVBMjVEQTUxMThGMTNGNDA4RjUzOQorOjEwMjcwMDAwMEIwREYyQTlDQjdFMUJGMjdCRTg3QzU0NkUzRDAyN0M2NAorOjEwMjcxMDAwREVBMDMwM0UwRUY1MDdCQjM4OUZFQjcyMzY5NDFFQ0EyMgorOjEwMjcyMDAwNUQ4QzZFQTJFOEQyQUQ0QzZFRkMyMjcxNjg0RkJBRjg5NworOjEwMjczMDAwRTZGMjY5NkUxOUI4MDBENzkxMTVGQkMxNTU5QjFBRThFRQorOjEwMjc0MDAwOTRDMEU1OTk5M0M4RjhBOUQyRjE0QzAzM0NEN0M3MEZDMAorOjEwMjc1MDAwQzUwRkREQjkwNkYxNzRCMDY3NThGQzg2REE2QkQ0OEUwQworOjEwMjc2MDAwQjI1MjdCNkRBRDEwOUM3RjBEQTc4MzQ4Rjg4OEE0QUY1MworOjEwMjc3MDAwRjc3NUNCQjVEMDM4RDE2REU2RjMxN0M1NEI5MjBBNTgzMworOjEwMjc4MDAwNUM5Rjg0ODFCRkM4RURBNEQ1OTQ1RkUwRkM2NjhERDVDNQorOjEwMjc5MDAwRUQwMkJGQTJCRTVGRDFEQjFFQTBCRjdFMzJCMzc3QTQyNQorOjEwMjdBMDAwMjZEN0I1NjFGQzkwQjUxMUUyREFFRjI1MjYyMDNDQTNDRgorOjEwMjdCMDAwNzMyQzI2RkI4QzdBMDYyNkZCMzFEMkJFMDk1Rjk3OTVENworOjEwMjdDMDAwRUY0QjAwNzhFNjFBRTExOUIyRUYzMjA1RjcwRDY2M0RERQorOjEwMjdEMDAwOEMxQjZCNzExMzNGRTU4QkQ4NENFMjQ2ODExNTZCQzFBNgorOjEwMjdFMDAwMzhBQ0NFRTcwQUU3NzM1RDFFMzgxNEY2REVCMEE0QkUzRgorOjEwMjdGMDAwRUM3QzRGNzQ3NDhBMTQ1RkVCOTJBODNENERDN0E5RDc0NworOjEwMjgwMDAwRjZBMjVFRDVERjhGRTNGQjc3MEM2N0YxNDY4N0QzQUY4NworOjEwMjgxMDAwMjg2MUU0REQ4RjJGODBERjI2NEQ4QTJGQTNFQkZCQjFFQgorOjEwMjgyMDAwQzJFQzZGNjlCOEE1RDI4N0YxMjgxNkFGNTUzOEVDQzQ1MQorOjEwMjgzMDAwRTI3QzNCRDhFRDA1RTA3ODBGODVGNUVDNTA4QzcxMkJGMAorOjEwMjg0MDAwOTFBRjI3QzY0OUQ3NzMxRTM5Qjk4QUYzQjc1RUI3QTlDNgorOjEwMjg1MDAwMUQ2NUIwN0UyOTRCNTNFMjBERUIxRjk0QTRFQjk1NzZEQQorOjEwMjg2MDAwRTRFRjQ4RTNEREMzRTVCQzJEREQ0REFBRThCQzc2ODc4NworOjEwMjg3MDAwREIwRkU3NUEzNkFEQUEwMEZDMDVCQkVBMjY3MzBDRUQ2OAorOjEwMjg4MDAwNzZBRDYwODhDRDgwRjdBNjdFRjJGNDcwN0NCOTIwODlBMQorOjEwMjg5MDAwQzk3RkE3QTQ1NUMyN0I0RTQ1MjI3MDRFRTZFNEY2NzI2RQorOjEwMjhBMDAwQTQ3MTIzQURFMzQyRjM4RDhBMzQ5RjFBREVBRTg4NERDNgorOjEwMjhCMDAwNjJGQzI3MERERjUxMDk3MjlBMEM5MDQ4QkYzMDdBNDJCMgorOjEwMjhDMDAwRTBGRDYyRTUwRTE1Rjg4QUQyQTMyN0RDNzg2NzEyNjU3MQorOjEwMjhEMDAwMEVFRjdGMTE3RkU4NzY3NzcxQ0JDMTZDQkFERTdBODcxNQorOjEwMjhFMDAwRTQxNjQwN0UxNTlFNkM1NzBENzI4MUVBRjUwOTQ5MDY4MworOjEwMjhGMDAwN0I1OTc0Nzg1MEJFODkyQTNCNzcxRjZENjNGRUY2RkVDNAorOjEwMjkwMDAwRTFFNjczQjIyOTlDNUU1RUU1NjUyNEI5NzA3OTkyODUzMworOjEwMjkxMDAwREI0REZGOUE3RDdFNTNGQzBENEEyMjI2QjgzNDAxNUNDNAorOjEwMjkyMDAwMDhGMEQ3N0QwREY1NjFFNDI1ODVDRjkyNkYwMzlGNjU5MworOjEwMjkzMDAwOUNCRTFFQjkwMDdDMzJGRUNERjBCOTEwNUYwN0Y5Q0MwOQorOjEwMjk0MDAwNEI4RTg2OTE2RkY1NEUzOTZEOEU4OUZGQTkxRDEyQTFCMAorOjEwMjk1MDAwNUY5NUExM0QxMjFGRUFGNDMxMEFGMDAyRkNEMEE0OTk2MAorOjEwMjk2MDAwRTIwMjcyOTJCNzlERjk5NUI3OUJGNTlDQjhDOENERTU4OAorOjEwMjk3MDAwMzNGOUFBODA4NTM5RTEyRkRFNDFGQzMxQjFDMUYxRTU5RgorOjEwMjk4MDAwMzI3MzNDRTFDOTI0MUUxNzg4MjI1MTAwOUYyRUY3MjQ4MAorOjEwMjk5MDAwMDFGMjE0QTIyQzMzMDY0MTA4MzQ4NTM0MDlBMDI3NTJEMQorOjEwMjlBMDAwNjA5QzgxRDQ0RkU2RjIzQzU0MEYyNjZCQ0M0RkVFNEQyOQorOjEwMjlCMDAwRUEwNEE2NTdEMjcxN0Q0OTdDMURBMTdBMzA4REZBMzU4MworOjEwMjlDMDAwMTA4RjAxNTQ4MzNGREQ1QjgyMTgyRjNDRDVGMDFDNUNENworOjEwMjlEMDAwRjA1QUQwNUY3NjExOUYwMEUzQTc5MzBFMkNGQjQwMkE5QworOjEwMjlFMDAwMDIxRDNGOEJCNDBCMzkxNDdGRjc5NjU3MEQwMkY5RkQ4QQorOjEwMjlGMDAwNjJDODNFMkU2NDhGRUFBNTZFN0YyQ0ZCMzdDMUZCOUQxQgorOjEwMkEwMDAwRkY1RTc4QUYyODM1QzBCQkVCM0JDMjdCMEE5NzNCQTE4QQorOjEwMkExMDAwRjFCQzMxRERGMUJDQTYxNzMxMEVGNzE1QjMzRkRBQkVCQworOjEwMkEyMDAwOTYzMUJFRDc5MEM1RTI3OUU1NjJDNTA2QjBFN0M3QTg4MgorOjEwMkEzMDAwMzIwMUZEMjZFNTc2QUM4MzNDMjdEREVFMDQ5NzA0RTIwNworOjEwMkE0MDAwNUM3QURDQ0ZERTZGNEVFNTYwNzgyRTlENDQzOEUxRDlBQworOjEwMkE1MDAwOTA4QUYyQ0M5OThDRjI4NkQ5MTEyM0Y4RkFDN0E4NTUzRQorOjEwMkE2MDAwRjYyQ0Q1RTgzRjM1OTlDRUNGNjQ0RTA3NjM1QzI1RTg1OAorOjEwMkE3MDAwM0YzNTdDNzU3RUJCRTM2MkZEQTQzREQyMDMwRUIwNkI5NworOjEwMkE4MDAwNzRGRkE4M0U2NzBFREEzREExRUZGOUE1QTYzRjQzNUNBRgorOjEwMkE5MDAwRDI5RjYzNTM1NzUwNzhCQ0NDRTVENUNCRkQxRTkyOENBQQorOjEwMkFBMDAwRTdCRkExN0U5MDZFNTc4REUwRUIyRkNEOTk3NTEwRkM5RQorOjEwMkFCMDAwQUUzMUNBNkMwNjEzMEUwNzk5Q0ZEM0UwRUFDMjczRjBBOQorOjEwMkFDMDAwREY3RTY1NDE3RkFCOEJGQjVCNjNCODlGMDVGRTRFOTU1OAorOjEwMkFEMDAwQjNFNzNFODcyNzlCQ0ZENTc0RkY2OTRDQjdGRkQ0MjQ1QgorOjEwMkFFMDAwMTlGREE3MzExMUZDQTdEMUI2Q0U1N0FGODBCQzkwNTdDNgorOjEwMkFGMDAwNDVDQzBCODkwNERGNTBCRjI5NTRGRjhDNEU2NjdBNjdBMgorOjEwMkIwMDAwNzYzMjNGMjcwQTgxQTcxRUVGMEIzRDk3NkVENEY5NEYwRgorOjEwMkIxMDAwRjIwQTQ2RkUwRjlENUZERTNCMDZDRjA1ODk2Mjg4QzczRAorOjEwMkIyMDAwNjYwN0UzODk4MkU2MjVDQjA2MDdFMzg3NjFFMjg2MzMwMQorOjEwMkIzMDAwOTIwRDcxNDM1RDhGRTk3NDZDQTM3REVENzhDRTFDM0VFMAorOjEwMkI0MDAwOUVEODlBNzVBMDJGRjMwQjVGNEMwNEZDOTcyQjJDNkUyQworOjEwMkI1MDAwQTRBRjhGRkE4NUYzOTMwRDdFNjE1MTI3RDNEQkI2RkZDNworOjEwMkI2MDAwNTNEN0IxODJDMjk3MjQxMDM3RjMwRkVBNTQ3QjNFQkE5MQorOjEwMkI3MDAwMTM4OTZCNTkxQzFERjNCNEM2MzgwNDhDODc0QkZFMjg4RgorOjEwMkI4MDAwQUM5NzlENzJGQkEyNjhEREI2Rjc2MTA5RkM4NDUyNEFERQorOjEwMkI5MDAwM0Y1MTQyOTA3RUM2NzBGRkEyMjFFN0U4M0FBMEFGQUU1NworOjEwMkJBMDAwNTM5MkZCN0M3RTc3OTk0MzBDQTFEM0U4NjAxREU1NUJEMworOjEwMkJCMDAwODJBOUJFNUFGMkFDNjQ3Q0RCMkIwODZGMTFGMkMxQjI2MQorOjEwMkJDMDAwNERGOTY3NUIyNUFEMTFGNjNEQ0FBRUFENEFGRUNGQzRFNworOjEwMkJEMDAwRkJDRjYwNUQ4MjcyRTA1QkUxM0QzODBGRDMwNzYwQjNFRAorOjEwMkJFMDAwOTEzNEMzN0MwRURBNzgxNUNDQTMyMkZENzdDN0E1OTc2NAorOjEwMkJGMDAwMTIzQzhGRDkwNjM4MDMzRkY3NjNFMjgzMzhDQjBCRDZGQworOjEwMkMwMDAwOTc0NEQwNDc4RDdDOUNBQjQ5OTMyQUY3NjVFQjg1N0UzMgorOjEwMkMxMDAwNEY2Qzc1NkQ1QTBCRjIzODM5MEJDNzdCQzFFMTU5MEZGOAorOjEwMkMyMDAwMzZFNEMxMkREMjIwODhEQkQ0QUJDRkRBMjE3Rjc2RUYxQQorOjEwMkMzMDAwRDZDNkY0MEUwM0ZGMUQ3Q0MyRDMyNzlDN0ZBODk3RjQ1MQorOjEwMkM0MDAwMkZDRTUyODhGQjhBNjVBNTI2NUE1Q0Q4MkU0MkJEODdCNgorOjEwMkM1MDAwN0RCNkE1NDU4MTc5OUVEODZBMEY2QjQ3NzU3MTNFQkZEOQorOjEwMkM2MDAwN0EwQkIzNkI0N0U3NUFEQzE0MDJBNDg4NzhBNTA0MzhDMgorOjEwMkM3MDAwOEY3MTEzQjc5RjM2QzQwQ0Q4RDE1RTAyQkEyODRCNDQ2QgorOjEwMkM4MDAwM0Y5RkQ2RjdDNUQyN0FDQzUwMERGRDgzRkUwMzc2RTA4OAorOjEwMkM5MDAwRkJGRDNGMkU3MUIzM0M0QUFGNjMzMEFEQUZDQjJEMTk3NgorOjEwMkNBMDAwQkExNkZBNDc3QkRFMDRGQzUxM0REMzI0QTEzRTZEOEU1QgorOjEwMkNCMDAwODEzQzgwOTgwMTkzOTJBOThENEI2MjA0NTIxOTJFMEU4QgorOjEwMkNDMDAwRjg0MTMyQjNGMzlFQjBFQTcwOTUzMDBGNzJFRjU2MTlBNworOjEwMkNEMDAwRjlFQjYwOUE4OEZDNDZFMUI2MDhFQTdGNEY4QjIxOTRCNQorOjEwMkNFMDAwMTI0OTk5RTYyRDAzMzg5NjkzRTY3QUYwQTdDQUQ0NkI3OQorOjEwMkNGMDAwNUY4QzI1REYwMjdFRjkzQjE0RTBGRjc1NjA4Nzg3NTkwMgorOjEwMkQwMDAwNUYxQjVGMUYwQTExNEEzRjA3QjYzNERDNDBDMkU0NTEyMworOjEwMkQxMDAwRUI3NEY4OEIxOEVEMTM4MEMzMUE3RUFFNEI1QzkzOTA2NgorOjEwMkQyMDAwN0UyMkUzRkI2RUE0MUY2N0IzQkYzRTlBQzJGMUVBRURCOQorOjEwMkQzMDAwNERCRDhDRTNFRjRGNTY0REYxMzcxRERGOTBGRjRDQUU4QworOjEwMkQ0MDAwODBGQzVCMEZFNkQzRDY5RkI0MjBGQzVFQzkxMzdDMDJFNworOjEwMkQ1MDAwODVDRjgxNUM5MURBNkM3NDU1Mzk3NjVGM0Y1QTVGQ0ZDRAorOjEwMkQ2MDAwRTlCODYyRkJBMTg2NUUwMEE0OTQyNDVDRUYyQkI5OEZDNgorOjEwMkQ3MDAwRDk1OTdFRUJDNUM3QUY4NzUwM0U1ODAwRTdDOTE0MUYyRAorOjEwMkQ4MDAwQTM5NDY4OUY0QUYxQjUxMDg2Qzg4N0ZDMUNCQkNGNEYzRgorOjEwMkQ5MDAwRTc2QjczQjY5N0M2RDEyOTVFNDgxNkRDOUI4MTVFNzJERAorOjEwMkRBMDAwODkwMkYyMDM1RDEwMEI0Mzk0NDJFQjIwMzI5MDlFOTIxNQorOjEwMkRCMDAwMDhFNjczQUQyQkM4REIwQ0YyNzY2REJBREEwQ0Y5ODYzNworOjEwMkRDMDAwQkIwN0Q4MzFERjJDMzQ5Rjc4Qjc1MEY3NjIzQ0U0OTlDOQorOjEwMkREMDAwQzQwQjI4QUYwRkU0RkUxRUNGRTkwRUE0REIwOEQwMkJGNgorOjEwMkRFMDAwMjZGQ0QyRTcwRDA5OEM0RjYzRjJDREY2Njc3RTRBMTZCQQorOjEwMkRGMDAwRjdCMzg5RDc1NjEwNUM1NzRDOEU1RDhCQTI4NEY0NTI4MgorOjEwMkUwMDAwM0M3QkZGNjA4RUUwMDM3QTNCQTg3MkY5NDBGN0JCMTU2QworOjEwMkUxMDAwMTIwMUE5MUQzNDZENDA2NEJDQkVEQzZGOTRBQURCQzVGMQorOjEwMkUyMDAwODJCRTRGNEJDRjdEQkMyMEY4NTY2N0MzM0VGQUQzN0RBMAorOjEwMkUzMDAwRDBCQTMzNTdDMEY5OURDQURBNUIwOTk2ODVGM0UwMUMxNgorOjEwMkU0MDAwMzM3NEZEMzUyOThDMkU2NTRBNzZCOTIwREY5QTU3OEY2OQorOjEwMkU1MDAwMzFFNkM3Qzg4NUI3NEU3MEM0NjIxRTEzREE5NUE5QjlBQQorOjEwMkU2MDAwMDJEMzVGMjdEOTc5NkU4RkZDNkM4NTc4NjQxMzdFQThCNgorOjEwMkU3MDAwRDU5MTEyMUMyRkU2RDNFN0JFMEZGOUJGRTMwQTA1N0ZGOQorOjEwMkU4MDAwMTRBQzg3RTczN0QzRkY2QjAzRkQyMkU3Q0M2MkY5RDc5OQorOjEwMkU5MDAwQjk5QjcwM0Y2MzBCQUQ2RTM4Q0IxOUVCRjAzNTk1RDAxNQorOjEwMkVBMDAwRkFDQjFGNDgxOENGMUU5NzMzMEFGM0FCNDNFNzVGQUI0QgorOjEwMkVCMDAwMTBGRjY4MEFERjk3RjMyNDg0NzdENDI1OEZFMTM4NkZGOQorOjEwMkVDMDAwRTQ1OTUwREU4QzgzN0M2Q0M4NUYzNkU2NTVBMzNFMzRGMworOjEwMkVEMDAwRTc3MzhGMTNGRkFDMTU0M0IzOUJGMTJCOTFCQ0JENDAzRgorOjEwMkVFMDAwQkU0RjcwOTlFMUU3M0M2OTNFMkZBRUM4Qjc5OUVBRTM1RgorOjEwMkVGMDAwRjJFNDkwNzhBNTk3QzU4NzMzMTg1REJDRDQ1RkYwNkQ3OAorOjEwMkYwMDAwQ0UwQUQyRDlEODkzMDkzRUEwMzNGODEzMEI0QzcwMzRCMworOjEwMkYxMDAwRUQzM0E2NTNENjAwN0UwN0ZCM0ZGRTEzMzgyNzg5NTFCOQorOjEwMkYyMDAwNTdERDhBRTdFMDFDRkUzQTlEQzQ3MEJDM0JEMzlGRkY4RgorOjEwMkYzMDAwM0VFODI5MURGRUExNzQ3MEYxRjhCRkI2QjIxOEYwOUZFQgorOjEwMkY0MDAwQUY5RkRGODdFMDNGMDRERjE4ODNENEY3RDFCNzI3REVEOAorOjEwMkY1MDAwNzFGRUFDOUVGOEQ2RTlBMEM3QkVFRjY5NTk5RDRERjE1MAorOjEwMkY2MDAwRkE4QTkzM0UwMDNDNkY5MjdENzcwQjQxM0M1RDEwQUYzNworOjEwMkY3MDAwMzlDNTQ4Mzc2Qjk1MjYwN0M4RkRBODRCOEUzQUMwREY4OAorOjEwMkY4MDAwRDBFOTgyODhBREY5NDZCRkUzOUY4NUVGOTJGNTAyNzNFMQorOjEwMkY5MDAwMjZERDgyMEZFMjdBQkY4MzQ3NTcwNUU3NzkzNkE1M0JFNgorOjEwMkZBMDAwOUZFOEQ5MTREMDEzOTUyQzhGQTM1RTFCQ0NFRTVERTU2MgorOjEwMkZCMDAwMzM3RERBNDMzRUE0QjA3QjFENkRENjk3RDJDRjk3QTc2MQorOjEwMkZDMDAwNUFFMUYwMTAzODFGQUI4NzdDM0JCQTNGNzlGRDJDQjgzMworOjEwMkZEMDAwRDE0MEU0MjlCMzUwNUU5MkY1MDI4QkNCMTdGRDAxRTU5OQorOjEwMkZFMDAwRkI1Qzk3NkZBNTEwNjYzRUI0NjQ3MDlEMkE5MzdCNDU4OQorOjEwMkZGMDAwODlEODlGNENEN0YzOTIyQTVGQzVGNTRGNjFGNThCNUQ1OQorOjEwMzAwMDAwRDdFQkZGQTQ3NTFEQTBCNDQyMENGRUU3NDQ2RTM3RUI2RQorOjEwMzAxMDAwNzZGNzA0MDdDQjNCOUM1MDI0MjIzRURFRDgyMkY4MzBDMgorOjEwMzAyMDAwM0Y5MkY2RjM1MjNBNTlDMEM5NzYyMkI3MDNCQjBBOUZDMgorOjEwMzAzMDAwNkQxQ0E0ODIzREE4OTlFQzRFQTFBODBERURCRUI4NDIyRQorOjEwMzA0MDAwQjMzRjE4QUY0NTlCRjA5RjM4M0FDMTU0NEZBRUVDNjU4MworOjEwMzA1MDAwRUE5RjNBM0REQjFDNTdGMDVDNjY3QURFQkI3QUIwQTk4QQorOjEwMzA2MDAwOUU1MTc3QjVBOTdGOUY2NTI1QTY3QTk2NzdBQ0E5N0ZGMworOjEwMzA3MDAwREZENTkzNENGNTdFNEQzNzk4RkE1RkJBNjFCNkU5NzlBMgorOjEwMzA4MDAwN0ZERjAyRDNGM0NCQjcyRDMxRDUwNzM0RkZEMEQ0RkY4OAorOjEwMzA5MDAwOEE5RDc3OUI5RTBGRjJBRjM1M0QxRjcyRjAzRTUzN0RBOAorOjEwMzBBMDAwNjhGQjRGNERGREFGN0M3QkIzRTlGOTU1MURCRjM0M0Q0NworOjEwMzBCMDAwMUY3NjcyODdBOTNFQkM3Mzk3QTlGRjg4QzA1RTUzQkQ3NworOjEwMzBDMDAwOThCQzZBRUE1RjZBRkY4M0E5NUVBRUJDNkJFQTNGQ0EzRQorOjEwMzBEMDAwNzVENEY0N0M4Q0ZBOTFFOUI5NEUwN0UzNzIzRjMxQjVBRgorOjEwMzBFMDAwOEY3NzdGMTk3MjRGQTcxMkU1OUIwQ0YxODBCRUYwQTg3NQorOjEwMzBGMDAwMDlDQjY4RDJDQ0NFNzU0ODNCOTYyRjE1NzhEQ0E5NDAxOQorOjEwMzEwMDAwOUY4RjdBMUIyMTIxQTlERURCRjk1NzM4OUE3RUEzQjA2NQorOjEwMzExMDAwNkYxQ0IzOUYzNDYyOTQ5RjdBN0UyQUY1NUJCQzUxOTRGNgorOjEwMzEyMDAwMTQ2MjAzOTQ2RTg3NTBCQTBCMDg1ODJBMDEyQTU5MTM2NworOjEwMzEzMDAwMjFERTEzODU2NTQyMjAxMURCMTMwM0YxNTgyNjA1N0E0MQorOjEwMzE0MDAwNjM3QjcyMjAwRENCOTQ0MDVGMkM1MzAzNTk1OEJBMDIxNQorOjEwMzE1MDAwOTc2Mzk5MTZFODhGNjVBRkMwMTA3Q0FGNzc2MDEwOTZDMworOjEwMzE2MDAwRTk4MTYxRDg5RTExQjgwQUNCQ0M0MDI5QjZGNzA5MTQ4MQorOjEwMzE3MDAwNjNBOTA2QzY2MTk5MTUxODgzNjU3NjYwMzJGNkVCMUI2NAorOjEwMzE4MDAwQjgxNkNCOUNDMDhERDhERTJGNzAzRDk2OTcwNEU2NjBCNAorOjEwMzE5MDAwNzk2OTYwMTY5NkI5ODE4NTU4RjYwRkNDQzdGMkIyQzAyRQorOjEwMzFBMDAwNkRGOERFRTU4MTVCQjFDQzBCREM4MUVEMDMwMjNGQzA0NQorOjEwMzFCMDAwNzI2MEEwMUVDQjJCMDIyQkIwNzQwN0Q2NjFCRjQxODE3OQorOjEwMzFDMDAwMzU1ODBFMEVGQzA0REI4NzA0RUVDNTMyM0ZGMDMzNkMzRAorOjEwMzFEMDAwMUYxQTc4MThDQjgyQzA2MzU4NUUxOUQ4ODQ2NTYxRTBFNQorOjEwMzFFMDAwNDkyQ0FGMEEzQzgxRTVENTgxNjdGMUJENjE4MTY3QjBBQgorOjEwMzFGMDAwMkMwQUJDODBFREMzMDNCRkMxRjI5QUMwM0U2QzFGMTEwNAorOjEwMzIwMDAwNjhDMzUyMEJCQzhBRURDNTgxOTdCMTJDMDlGQzAxREI2OAorOjEwMzIxMDAwNEIwMzg3QjAyQzBCQkM4QkVERTU4MTc3QjAxQzE5MzhDNAorOjEwMzIyMDAwOEFFNUE4QzAxMTJDNDcwNzNFQzI3MjRDRTAwMzJDQzdBOAorOjEwMzIzMDAwMDYzRUMxRjdDNjA1Q0U2MjU5MTFGODEyREJDNzA3QkVCQworOjEwMzI0MDAwQzBCMjVCREU0NUNDNTdGNjU4RDA5RkU1N0U2QTY0N0ZGRQorOjEwMzI1MDAwQzE4QjcyRDJDQUVGQzU0MTZFMzVFNkZGRDcwOUJFNTFBOAorOjEwMzI2MDAwOTQzNDUyOTMzQTMwNUU2ODJEQjQ2MUJDRjAyNkQyNjkzMgorOjEwMzI3MDAwNjVFN0QwRUQ0RUQwNEI2RDU3OUQ0ODg3MzhEQTFCQzlCNgorOjEwMzI4MDAwRkUwQzYzQkU4Mzk1QzcwMUNBQzU1MzE4OEY5QTkwQjRDQworOjEwMzI5MDAwMzcxOUY0RTk0REI0MTlGMjhDODg3NjBFRjMyMDI3RjAzMworOjEwMzJBMDAwM0NDODlCMjRFQTYwRDFBNTFFODIxMUFFQzI3RTdFMUI2MworOjEwMzJCMDAwQURDRkE4MjBEQTYwREFCRkYxMkExQkRFMkY2QTFDNENFMgorOjEwMzJDMDAwRkQyMDVBREU5M0M1RjI2NTdEQTk0QzVGM0VDQ0NCQzc4RAorOjEwMzJEMDAwNTNEOUY5Q0I1RjBCNTg5RUVCOEM1QkZCMzE3RTJBNEJBRAorOjEwMzJFMDAwQkM4MERGQzRFMDMwNzQyMENGOEY3NTc0NjY2MjdFRUNFMgorOjEwMzJGMDAwNDVCRUY3QTcxNEZFMUVFRkJGM0NCNUYyQzk1NEJBMEU4NworOjEwMzMwMDAwNkYwOUM5QUQ3MzA0RkJEMUY2QTcyM0I0M0YwM0YyMjBDNAorOjEwMzMxMDAwQjQ3REFGODVFMUMzRkI5NkM4RkQ4NENBQjg0OUU3RjEyNworOjEwMzMyMDAwMTNERTU4REU3RUQ5OEJGRDgyRjVERjQ1RjA0MzA5NTk2NworOjEwMzMzMDAwQzFDRTBGRjc3RTUwNzExREQ1ODcxMzBCNDUzNzk1MUNGNQorOjEwMzM0MDAwRTRDRkNCNzcwRTNGRDY4RkNEMEI3MTUwNkY4OTg4RjFDQworOjEwMzM1MDAwOEIxOTQ1ODdGNjI3RDJGQThDQTVGMTk4NzdERkJEQUU5OQorOjEwMzM2MDAwMTIyQjNFOUZFMDdBRUJCMjE3RTlENjZGQUFGQkNERjBBNQorOjEwMzM3MDAwNjNBNjc4OTMwN0VEQUVEQjM4OEQxMkNERkE4RjBFRkQ4NAorOjEwMzM4MDAwMzlEMjJCOEJGQkRFMDY5M0FCMjBGRkFDMzg2RUJCNjZDRAorOjEwMzM5MDAwRjU5RDJGM0Y4NjY4MzZBMjk5RTg5RUMxNkIxREFDMUYzNAorOjEwMzNBMDAwN0M3RjYyQjdDMEJDQjFCQzBGODUyQkVBN0Q2RkFDRUNGMworOjEwMzNCMDAwQUIxN0MwNzk1N0UzODBFRTYyRjIzQUM5RjlFMkNCMDA2RAorOjEwMzNDMDAwNEYwOTJFNEU5MjBFMDdEODMxOTFFMDI5Qjg1ODFDMzQ3RgorOjEwMzNEMDAwQUU0ODczNzkyOTdFMUFCRTE2MzE2RUJDMkZCRTQwMDFFRAorOjEwMzNFMDAwRkFGRjkxMjMyNzE1Rjg0M0UyRkQxQURBREVDMUY4NTZGOQorOjEwMzNGMDAwNUM3RTI3RjEzQTU4RkM1RUI1QzEzOUJBMURDQjk1Q0IzRQorOjEwMzQwMDAwREQ1ODM2MkMyRkM0NzI2REZBN0Q3Njg4OTc4OEM5OTg1RQorOjEwMzQxMDAwMDk0Q0EyMzJFNjYyM0M0ODlGREYxQTNGREI1RUVDMjY5NQorOjEwMzQyMDAwRTRDQjg3QkUxRTA3MjEyNDExRTIwQ0Q0NDRGODlBRDZCRgorOjEwMzQzMDAwNTc1MDlGRTI2NDJBQTNDRjM3NUNDNzFDQzAwRjI3NTNBNQorOjEwMzQ0MDAwNTU5Njg3NkY2MUU3QzYzMUY5N0UwREUyOEQzMTZFQTUyNQorOjEwMzQ1MDAwNDQ1MjgzRURGODk3ODRFRDlCQzExRjc5ODM3NEFDOUYzMAorOjEwMzQ2MDAwMEM3MEQ0RDg3RDhDN0E3RURGQjRCRUI4MUY4N0FCRkVEQgorOjEwMzQ3MDAwNUUwOERFNDNGMDJDQ0E2RTNDQjcxNkEzNjlGRkJDQzhEOQorOjEwMzQ4MDAwNzg3NUI5NTg1RTAyRDA5NzQ0RTlFQjZGQjA2RUIwMzdFQgorOjEwMzQ5MDAwQjUxODBCOENBN0UzQjc0QkVBQzQ3Q0FBN0EyMTdDREU3MworOjEwMzRBMDAwNjVCNjhCQzk4NzA2NDU1M0NFNzc4RTQyMTRFOTFGNDYxMQorOjEwMzRCMDAwNzlFQUM4REIxOTQyQ0YwRTk0QUY1ODg3N0MyRTJFQUYyNQorOjEwMzRDMDAwNzZBNDZBQjkyRTNBN0VGMzM1NUMwRUE0MjdBMDFDQTAyMAorOjEwMzREMDAwRURGNzVENEREN0JCRDNDMkZDMTQ2RjgyOENGQzQyODFFQgorOjEwMzRFMDAwMTA4Nzc5MkY3NjM1NkVEMjc5RjIyMDU2MkQ1NzM0Qzk1MAorOjEwMzRGMDAwMEFFNzAzNkExQ0MwNkIxNUNGRDc4MzFCQ0E0NjM5RjA5NQorOjEwMzUwMDAwQUZFQTE3OTQxNzNFOTYxNzE5RDI3RkE3ODVGMzU1NzQyMworOjEwMzUxMDAwMTRFRTRCRTRGMEQwREY5QkVFNjJGMkY4QzFBQ0NBRjFERQorOjEwMzUyMDAwMkU4QzhGQThFOTIwNTc2OTdEMjJDMDhCRUUzRjFERjhCNQorOjEwMzUzMDAwOEFENkFGQzVCQUQyNUQ5RjhDRkQ1REFDM0YyNkQyNUMwQQorOjEwMzU0MDAwODQxQ0E2RUZERDgwRUY0OURERTNDQ0MwQkFBMzdCREVBRgorOjEwMzU1MDAwOUI3MTlFQTRFRUJBMDc5RkE3QjNGRTE3M0I4RjVFNzZDMgorOjEwMzU2MDAwRUZGRkY3NEM0RTdFMkE2OTcxMDkxNDNFOTVDQkU2NTQ2NQorOjEwMzU3MDAwOTY1MUJEM0Q3OUQ5N0MyQ0RGNUJERUFFODE1QzNENEU0MgorOjEwMzU4MDAwRTU0OTAzODU2QjY1NzFERjI0RjA3MzI2OEZFRkVCNTBGRgorOjEwMzU5MDAwMERGNDNBOEZDNzM1RjdBRUI2OEUwNjdENTdCMjQ2QUNGRQorOjEwMzVBMDAwREM4MkZDQjRDMjE0QjdGQkJFQ0JDQUUzNEQ2QzFENTUyNAorOjEwMzVCMDAwOTRDN0VGQTQyNDM3NkZDM0ExQ0IxQTBDRjZFODZDRTJEMgorOjEwMzVDMDAwOTY4MURFRTdBQ0I2MDZFOTlBMThGODUzNjE2RDNCMkQ5QgorOjEwMzVEMDAwOUUxRjVEMEZGQjU4MkJGMkYzMEFDRUFGRjE4NEZCRjM3NQorOjEwMzVFMDAwNkE0QUU1NzlGNDBFNTk2RDIzOUUzMEYyQjgyNzdDMDhCQgorOjEwMzVGMDAwRjkwN0U1ODM0RjFEMzkxODk3QTU5NjlBM0REQ0I4M0EyRgorOjEwMzYwMDAwOUMyMkNEMzcyRjQyRkM1Nzg3OTMwRTZGQkRGREU4RkEwMQorOjEwMzYxMDAwMjEwQUIzQUI3RDI2MzhDRUI5NjcyOEM2MkJFN0YxNzhFRgorOjEwMzYyMDAwM0Q4OUI3NzNGRTY0RkRBQUU4M0MzQkUwM0Q0OTUzODEwOAorOjEwMzYzMDAwREVBMTFFNEVCRUU4RjM1NkQxN0ZERDM5MzgxQzdDMzk0MQorOjEwMzY0MDAwMUNENjVBOTkxRTBGODFFRkYxMERGRDYyNDEwRjg1RTJFNAorOjEwMzY1MDAwRUY2MkUxNUM2QjIzNzg5RkEyNzNBQjkzQzU5MTkyQTY1NgorOjEwMzY2MDAwRTNGOEQ1N0M3RTkyMzQwM0Q3NTNDREU3N0I3MTRGOEM0MgorOjEwMzY3MDAwREY0MkZCOTc2Qzc1NkUwNjNGRjg0Qzg5RjdDMTRBOTBBNAorOjEwMzY4MDAwNEY5QkFEOThDRjc2Rjc5RTc1NkZGRDBDRUU3RDZDQjJCQgorOjEwMzY5MDAwRTI5OUM5RkM5ODA3MEFFMEZDRjQyRjVDOEU1MjA1RDAzMQorOjEwMzZBMDAwMDZERjRGRjAxMEZENEYxMzYwRkM3OTg0OEQ3RjQ2M0Y5RAorOjEwMzZCMDAwRkZEODFBODdGMDNDNTlCNkE1NzExODJEM0I3NjJGQUU2RQorOjEwMzZDMDAwODBCOENCODkzREUzMEY4MERGM0MzRjlBNDg3ODk3OURENworOjEwMzZEMDAwMjgzMkYyOUZENzdBQ0M2QzFGNDhDMUJBRDhCMzNFMEZCQworOjEwMzZFMDAwRUE4NkY4RDE3QzlGRjU5ODkxQ0UxNzZFMzNENzhERjA4RQorOjEwMzZGMDAwQjIxOEUxQTU5Njk5RTFBNTk2OUJFMDI1RkNENkU5MTdCRAorOjEwMzcwMDAwMERGMDJBOEJFQTk3MDQ3QTdEQkY0QkM1RjFBQUEzNTYyOAorOjEwMzcxMDAwQTYwMDdDQUE3N0FGQzE3MkUxQjYyOEVGMzFDM0JDOEI5QgorOjEwMzcyMDAwOUJFMzRERjVEQTlENjk1RUEzNUVFOTNBRjg1ODJDRDAyQgorOjEwMzczMDAwRTExMjk3RTgzRDQ2RjVEQ0E5RTU1QTNERDgzMUE3OTc1NworOjEwMzc0MDAwOEZDNjUyQzdGRkUyRTYyQ0FGQzMzNDhFQjlERUQ1MjQ1NAorOjEwMzc1MDAwOEM2NkYyNTk4RDlCNzIxRTdFNURFMjkyNzE5RTBGQjc1MAorOjEwMzc2MDAwMzE3RkYzQzNFNTc2MkZDQzczNkFCOUUyNjVGM0JBQkM1NworOjEwMzc3MDAwQ0M4RTYyRjA1QUI0MkNDNjdCNkM0ODcwN0Q5MUM2RkQyRAorOjEwMzc4MDAwNjdBRjhGOTAxNjcyRDQ0RUYwQ0VDRUI5RjNFOEVEODhDNQorOjEwMzc5MDAwNzI0OUZBNTQ0NkZERDE2QUZEM0JEMDhEOURGRUVGMUM2NworOjEwMzdBMDAwQzY1MTI1QUNFQkUzRDYzNjhCNUVDODI3MjY2NEJCNjlEMQorOjEwMzdCMDAwM0VGQTlFN0FEQ0MwNkY5MUY1ODJGOTNCMTNGRDIxMTYyQgorOjEwMzdDMDAwODZGMjk5OUQ4Mzc4RTAxQzg0OEU3NzQ2NzJBQzg2MzhBOQorOjEwMzdEMDAwODI3RTBFNTIwQjEzRDFCRThCRUQxREIyODczNjdEREM3RgorOjEwMzdFMDAwRDJGN0JDRjdDQzI5OUVCMjQwMkY1N0RCOUI2NDUwQjY3MgorOjEwMzdGMDAwRDVDREZEQ0I4MDlGM0U2RUE5NEYwMUY5QjE1MEVDRkFCQgorOjEwMzgwMDAwNUVCOEZCNUVBNTY5OUM2RjdERDY0RUIzQkZFOEQzRDc4QgorOjEwMzgxMDAwOTkyNTk5Rjg4QzM4QkFGNzRERUJBNzIyRTQwQjhGNEYxNgorOjEwMzgyMDAwNjNGNjZDQ0RGNjQzMjM4N0QxRjVEN0VDM0MyQjYzREVGMgorOjEwMzgzMDAwNUE5QTY3N0M5QTYxRkYwMjNGMDc1QUIwRUQ4ODhDRjY2RQorOjEwMzg0MDAwQTdENTdCQzkxREU3QjNFRjdCQUNEM0UxMzJFNTFEN0E4OQorOjEwMzg1MDAwNDkzQkYwRTdFQzQyQTIzM0VDNzVFRjUyNzlGM0MxQUI5MAorOjEwMzg2MDAwNTYwMkU3ODdFNDJCREE4QjNFQ0ZFNDRGRTc5MkNBNTg0MworOjEwMzg3MDAwODBEN0VDOTY4NTI4N0YzRTc4NkVEQzAxOTY3RkQ0NTQwNQorOjEwMzg4MDAwMDBGNEYxMzFCMTYwREVEQ0M3RTRGN0IxNDMwQ0YwNUI2QQorOjEwMzg5MDAwOTYyNkVCNzE0NEJCMzFCRjg1MkUzMDBERjNEM0FCMUJBNQorOjEwMzhBMDAwREJFMURFOTg4RDQ4NUUyRTk3MDRGNkJEMUE5RjgwRjIwQworOjEwMzhCMDAwQUM5QUI1N0I4OTdEMDVFRTYzMzU5MzQ3NUVGQTFGRDREQworOjEwMzhDMDAwNkY2OTMyQ0JBNzc5MUJDQ0Y1MkEzMjI5MDVGMkJCQUI0NQorOjEwMzhEMDAwRUVCNzQyMDYxMTk5NkY5NDdGMTQ3RTMzRDM1ODFFRkJDNgorOjEwMzhFMDAwM0M1MkQ3MDhGNkRDMjMzMkM1MTM1REZGNkM4NTQ4QkQxQQorOjEwMzhGMDAwQTkxRTVBRkNGQzIzMDVCMzY4N0Q3OTFBM0JERkY5OTBCOQorOjEwMzkwMDAwRkIxOUYzQzEzQ0E1Q0YxNzJDRjNDOTVBNUVDRkZEMUQ5RgorOjEwMzkxMDAwNkQxOTMyNkQxOEMxRjE5OERFNUFBMERCQUQ0NDg1MzhCRgorOjEwMzkyMDAwN0U2RkY4NTc3NkU0RkRGNzZFMTFGMURDQTkzN0I0MUIxMgorOjEwMzkzMDAwRTRGMzlDRDVFNkZENUQ2OEZGQTFGQjI1RTQzRURDQzcxMgorOjEwMzk0MDAwODI2REQ3QTJERkE2RUY0N0M3OTdCRTFGRUJCNkYwRjc5MQorOjEwMzk1MDAwN0MxRkU0RjREQTdEQkVDQUUxQTdGQkRENEZBNjMxRkI5NAorOjEwMzk2MDAwNURBRjM3ODdENDdGMUQ1MkQ3RTlEQkNBRjk5QkQyRkQwMworOjEwMzk3MDAwOTM2OUM5QzBDRjlEMjMxOTlENzRDOEM2RjM1MDM5RDgyNworOjEwMzk4MDAwQUZGOTdDRkQ2QzlDNUY2OEJGNUY5RkFGNUY1NDcwQkNGQworOjEwMzk5MDAwNURFMUZBMkQ3RUZFQTlFN0MwMUY1REYwQUIwNzYyRTE5NQorOjEwMzlBMDAwMzBFODAzQTkyOTA1RjI4NDE2NkQ1RDE5MEI3MDNBMjlEOAorOjEwMzlCMDAwNzk2MzgxNkUzRUYwODlBM0MzQzFBQkIzMUI1RTlBNDNBQQorOjEwMzlDMDAwQTA3OEFGRDFFOUJGNjhDNTA0RDBFRjdGREY2QTU1QzBFQQorOjEwMzlEMDAwMkZBQ0RENjZGM0MzRjc5NzZBNUFFNkUzNzkwREFEMUZBNgorOjEwMzlFMDAwNjFGNTU1NzhBRkIyNzZBN0Y1M0QyMzVFMTczQ0ZFNDBGMgorOjEwMzlGMDAwMEFFNjc3MTA2RjZGNzY5RUVFRUYwRDlGMEVBQUQ5RjI1MgorOjEwM0EwMDAwRkU0OEYwOTM2QjQ5MjdEMjczRTg3QjMwN0YyMDAxRTVCNQorOjEwM0ExMDAwRjUyQzM5QUVFNzczM0Q2RTVBQ0I5QTQ4NkRDQkJBQjNFRAorOjEwM0EyMDAwMTAzN0FENkQxOTczMDJGOEJFOTY0OEVGMTlFOUE5MUE1RgorOjEwM0EzMDAwNjg5QUZBMkI0N0QyNzhERUREOTVFNDRBOTAyRjNBM0MxQgorOjEwM0E0MDAwODgyRjE5RTU3M0ZEMTMwRjBEM0M0MkQ3NzM2QUNCQUI3QQorOjEwM0E1MDAwQjE4MkQxNUZFNUU3RUQ1RENENzNGRTk2NzgxRUZENzAxNgorOjEwM0E2MDAwOUFEMkE5MzEzRjVFOTdCQkVBNEVCQTgwNTQ1QTZENjUyRgorOjEwM0E3MDAwRTUyMkFCM0Y3NjE4ODVFQkEyNEQ1NkJDMUZCQUU4QTlFQworOjEwM0E4MDAwQzc3RUYxNTNDODIzN0FDNzg2RTcxRjBCOUZEQUZGRDY5QworOjEwM0E5MDAwRDVCNEJFRjAxOTZCNTIwNURCODYwM0NFODM3NUJDRDQ1QQorOjEwM0FBMDAwRDJGRkMxRjk4NDhFODcwNUNGRUU5NzIxRkYwQkRBQzFEMworOjEwM0FCMDAwM0ZEMEYxQjFGMDk5MzY5OTBDRTgwOUJGRDJFNjM2Qjk5QQorOjEwM0FDMDAwQzMxMTA2MkZDRDQ3NDZFMjNEQTMyNzNFOTcwMUVGMUZDNgorOjEwM0FEMDAwRUMxMTQ4NkE1NkNGRjdBQjM3RUQ0NzNCMDZFMDg0NzhFOAorOjEwM0FFMDAwRTQ3OEVBQzY1QjBGN0NGOTI3RUNDQUM3N0UwQUM4RUQwQQorOjEwM0FGMDAwMEJFMTZCMUZFOEQ1NjRBNEVCQTc3N0QxNzU1NEZGQzkyMAorOjEwM0IwMDAwRTYwNjM4NTQzRjdENUIyQ0VDRTc4NDU0QzdFOEZCOTExNAorOjEwM0IxMDAwOTUyOTkwRTc1NjZERjVBNjI4NThCMkY2RUE0NzZGNDcwMworOjEwM0IyMDAwQkE5Qjc3RThGNjE0NzZDRjQxNEJFM0Y5MUQ2OUIwQ0YyNQorOjEwM0IzMDAwNUIzNjRFQzU3RDU2MTEwRkQyNUZGNTIzNjIyNUU0QzE3OQorOjEwM0I0MDAwN0MyNjkxRDFDRjg0RTE4RkVBNUU0Q0FGOUVEODRDOTExOAorOjEwM0I1MDAwNEJGNzc5MDJFNDY1NTJEMERGRDFFRjM1REZERTFEMDc4OAorOjEwM0I2MDAwNjFFNzkwOUZGMTczQzg2QjdBNTk0Q0ZBQTU5QjZFQjdDOQorOjEwM0I3MDAwQUM0MkI5RkE2MTg2OTYwQUU3OTMxNDBFQkExQzQ1Rjk2RAorOjEwM0I4MDAwMkExRTJBNEY2NTc4NjJGMjE4REZBM0Y0NTcwQUVERDA5NworOjEwM0I5MDAwQkZERDhBRTdDMjg2RjdCOEZDNjRGMzJGRTVGM0QzNzU3RgorOjEwM0JBMDAwNDc4MzNENzIyMjg1RTk4REQwRkRERENGRjc0N0UwQzIyNgorOjEwM0JCMDAwODY4MUNFMEM3Q0NFRjg3RUNCMUFDNkU3M0FERkZCQUUxMAorOjEwM0JDMDAwMUQwRENGM0ZGRDIzRTMyMzc4MEZGNDExNUQ5NzNGMTVDMworOjEwM0JEMDAwOUZCNzREMTE1MDJFRDg4ODNGMUM3RjZGQjE3MkZFMzZCMworOjEwM0JFMDAwM0ZBNzEyMDlFRDM5OUQ0RUU4RkEyNUY4MUU1OTkwNUU1RgorOjEwM0JGMDAwRTgzQzA5ODgwN0I0NTdBQUVFQTdFRjFCRUNFQzVBOThFQgorOjEwM0MwMDAwMTdGQkM5QzFGNkFDMjAxRkNGRTNGMjYwNEUyRkIzM0NDNworOjEwM0MxMDAwMjAxQjkzMkYyQTJFQjBDOEVBRkJDNTRGODE3RjI5QkZGNgorOjEwM0MyMDAwN0E1NUUwNUYyQkRFQkJGOTY4RkJCRUI3NkVBMDc0RkU3MQorOjEwM0MzMDAwNTFCM0NFQjc2Njc5MUFDQUI3RDUzQjZFQzdGODYwMjhCQworOjEwM0M0MDAwREY3RTk0NUU0N0MyRjI2RDNBQkYzNzE3Q0FCN0U5MURFRgorOjEwM0M1MDAwRkY1Njc5QUFDMzZGNUQwOEZDQTg3Q0ZDRjkyRTM1MzJBQgorOjEwM0M2MDAwMUM0M0U1RTNBNUJERDRCMEYyOTFGRUZEOTExNEY0QTQ4QworOjEwM0M3MDAwNDM5REZFNzRCQTVCRjBFNEUyM0UyMDg3QkFFOTUzQTdBNQorOjEwM0M4MDAwQkY2RUZBRDRFOTJGNzRCRjY2Rjg4NTNFOUYwMkM5NEUxNQorOjEwM0M5MDAwMDZGQkMxN0EzN0YxM0EyOUJFM0I3NzhCRjhCREE0MzNENgorOjEwM0NBMDAwNkE2NzJDQzQ3RjU2NDY5MTk5NjA4NzlGNTE3ODNEOUVFNAorOjEwM0NCMDAwRDUzQjkzRTU0NjkwMTM3QTdCNjcxNDhCNTc5RUE5RUMwRQorOjEwM0NDMDAwOEM4RDM3RDhENzQ3NUFDNTU4ODhFRjc2RjhDMkRGRTdDQQorOjEwM0NEMDAwQzA4QzQ0M0E3RjQ3ODRGQjFFN0EzQ0UyNEM3NEVDNDAzMworOjEwM0NFMDAwOUMyRjNBRDMwN0Y4MkExNzFEOTlDQkYyQzEwRjEzRjE3NQorOjEwM0NGMDAwM0IzRTczNTc1QzE3MEJGOTIxNjc1QUZCNEU5QzRFREIxQQorOjEwM0QwMDAwNkY3OTk5N0ZDNkNGQUI0OTY5MTRDRTczMzhERTRGMTJGNQorOjEwM0QxMDAwRUY4MzQ1NzQ3RjczNUE5OUZEM0M3NzdENzgzQUQxQ0YxNAorOjEwM0QyMDAwQ0RBQjFDNEI2NTkwNDdENDZFMEREMjA3ODFFN0VDM0JDMQorOjEwM0QzMDAwMEJENTFCNDNEQTVCQzcyMTNEMkQwOEExMjcwRkY3OEY1OQorOjEwM0Q0MDAwREUwNDdBODJCOEVCMjAzMjg4RkIyNzE2NjMzRTQ4QjkzRQorOjEwM0Q1MDAwOTgzNzExQkVDQjc5RTZBMDg4NzlFQjVEQUQyMjY5ODRGNgorOjEwM0Q2MDAwN0Q2RTE3N0MwNEY4REI5QjhDNzQ1OTQzRTU4NzMxRkUyQworOjEwM0Q3MDAwN0IwQUU4RUUzQ0Y3RTg0RUZERkEyRjA1NzdEMDJFOEI1NAorOjEwM0Q4MDAwOUU3Qjc3RTBDRjY4NzlFQUI5NzcyRTc5MDFFQUNGMUY3OQorOjEwM0Q5MDAwQ0U3Qzk3ODRGMUIzRjY3QzcxMzNDOEZGMzM3QjZDMDQxRgorOjEwM0RBMDAwRTMyQTdCNUVDQUJDMDNFQUJCNkM5ODc3NzRFNjZFOUIyMQorOjEwM0RCMDAwODZGNkY0MUUyN0U2RDE5REM5NjBGMUQ0RkFERDlGMEY4NworOjEwM0RDMDAwQzQ3Qzc0RDJDMEU4QUIzN0JCQjdENUQ1RkFFNTVGRjE5OAorOjEwM0REMDAwN0U2RDJCREQxNUU4REIzRDMxNjg4RkQ3RUU4QUYyODFGMQorOjEwM0RFMDAwOTM3QTY2RjdFNzA1QzZGMzhCRUZCQTlGMUE5OUM1RUY4QQorOjEwM0RGMDAwQ0YzOEM5NzQ4ODdCOUQ4OTY3NzFFQkRBMTdBRTdBMEM2RQorOjEwM0UwMDAwRjJFMTE3QjdCNEM5NzA2RkE3RjRCNzVGMEYwNDc5NzMwNQorOjEwM0UxMDAwNjYwN0IzMjM0RTVCM0IxRTI1NkU0MjYyN0FERjc2OEZDOAorOjEwM0UyMDAwOTVDMkY5MzREODc2OTQ1NzFFRUZERDMyMUVDRTM3N0ExQworOjEwM0UzMDAwQzI4NUMxRTEwQzg1MDNFQzhCQzJBNTFBRTQ2NDI0NzgyOQorOjEwM0U0MDAwNjRGRkM3QzJFM0VDQ0QzMEZGQTJENjJCRjFGQzIxMDgwMgorOjEwM0U1MDAwMTc0MTYzRUQ0RTlGNURDMEZEQjNGNjNEOUYwRjA0NzlBMgorOjEwM0U2MDAwRkM1MUYzMEFENEVGMTdEQTc3RjFGRjczRkIxNkZDMTc1NgorOjEwM0U3MDAwQjM2RkNGN0ZFQ0JFMTlGRDFGMDdGRDk0REM5MzBGN0E2MworOjEwM0U4MDAwRDJGOUYzREZDM0ZBRDM0RTM3QUVGNzIyRjlERkRCOUI2QgorOjEwM0U5MDAwQzUxREZFRjNGNkZGMkRGMUJFNDNDMEZDOTUwQkUxRkQwMQorOjEwM0VBMDAwRTdGRkI1Nzg3Rjk5RTNEREE5NDA5RUM0OTlERDVGNjdBMAorOjEwM0VCMDAwMTJDM0ZFMkZCNEVGM0RGRkE1RkJENkVEQTA3NjRCOURDMAorOjEwM0VDMDAwOTI0RkQ3RjcwRTY5OUE5QTQ1Q0JERjY5OUYyNDgxREIyMQorOjEwM0VEMDAwNkE4QjcwNEU3M0JBMzdGMzJCNkMwMkNCRkIyNjUzMDVGQgorOjEwM0VFMDAwM0RCRUQ0NkVDQTdCNEFBRjQ2N0I2MzgyNzYwRkZCM0VGMworOjEwM0VGMDAwOTM1NEQ3MEU3OUE3RUQyNTczREM2QkIxQzdFMEI3M0RCRQorOjEwM0YwMDAwNTA5RjMyOUNEN0NERkVENjg0OTI3MTA3QzFDRTdCNjM4MQorOjEwM0YxMDAwMDU1RDFGRTRGOTY1NDgwQURDRTU5OEE4ODk2ODE3RDJCMQorOjEwM0YyMDAwMTJFREMxMzczMzQ3NjJCRjg5ODU2NjdGRTNGQTEwM0ZFMAorOjEwM0YzMDAwRTFCQUU5RTZFNzUzRjlGOEQzQzg3REM5MTBBNzlCMzY4MworOjEwM0Y0MDAwOTdDNUU5QUUyMzc1MkI4RERGNTE5QjFBMzJDRTJCMTAwRQorOjEwM0Y1MDAwNDAzM0Q4OTFERjE0N0U2QUJBMEVCRjI1MDgwRjUyQUNFOQorOjEwM0Y2MDAwOUZEQjVEMDA3RTg0QzFCQjdEQ0EyMDk2NUYyQ0I5MTlBMgorOjEwM0Y3MDAwRkNBNjJENzY2M0RDOTRGQkExNTZGRUJFRDVCMUJBMUQxRQorOjEwM0Y4MDAwRjhENjRBQ0NGRUE3RUU0NzVFMDhDRTg0RkJBNzM4NUU4MworOjEwM0Y5MDAwNzYxMEVFNTY0RDQ0RkZENDMwMkVDMjQ1QzdDNzM3QzUwNAorOjEwM0ZBMDAwODM4RUJGNkY4QjhGMkVDMDg3RTE1QzU3MkZFN0RCNjc1NworOjEwM0ZCMDAwMkQ4NDczMDgzQkU0QkJEMzdENEQ1Q0NGRUU4RkQ4RjNFQgorOjEwM0ZDMDAwMDQ4NDYzNjVBMTE1RUY0REJFNkZBOTJDMDBDM0I5NjJDRgorOjEwM0ZEMDAwQzg5NTM1M0Y2NEMzQkEwMTNFRjMzOTFDQUI0ODFEREFCRQorOjEwM0ZFMDAwOURFNEFCNzNFNzhBMEFGMEY0MEZFREQ2RjkxQTIxRTNFQQorOjEwM0ZGMDAwQTk1RjUyNTUyNEY4QTNFOUJFRTc0OUM0MUIzNzE4RTI2QworOjEwNDAwMDAwQTAwMjc5Q0YxODA3RjU5OUVCRjA3NzRENEE3MDlDMEIxOQorOjEwNDAxMDAwRjU4RjI0MUZGRUQ5RTVERkE4M0M3QThGMjJGQjA4OTQ5OAorOjEwNDAyMDAwOTgzNzQzMjRBM0ZGMzhCMzk1QzFCMTc2OTFFMENCNDZDRQorOjEwNDAzMDAwM0FGMjVCOERFN0JGMEZBNEIzNzhFM0RGRUUxQzgyNzIyOAorOjEwNDA0MDAwQUVGOEM3MDNFMjk4NUY5QjhGRjkzQ0I1RENERUVGRjI3OAorOjEwNDA1MDAwQUE3MTEwQ0ZFOTZBRUQxQjA3RjE5QUFFODNBNUIxRTExMQorOjEwNDA2MDAwRjI3ODBFNzFCRkYyMEZDQkVENTg5RTI5MTM5QUM0MzgyNworOjEwNDA3MDAwQkM3NzMyMDFGNTcwNTkxNDAxQjkxM0ZBREVFREU5N0ExMworOjEwNDA4MDAwNUNBNjhFOUQ0QjEyOTY4NzVGQzVGNzMxOEZCRTFBOTczRgorOjEwNDA5MDAwNjBDMERCRkFGMTFGNDgwMzdCRTIwMUZFREUzMzlDQUIxQworOjEwNDBBMDAwN0M1N0Y4ODIxRjBCNzAzRDE0RDUzMTMyRENGNzA5NTc2RAorOjEwNDBCMDAwNzFGODU1RUNGRDQyODZGOEMxQTRENjJDRkNCRUU0QTRGMAorOjEwNDBDMDAwMzJEMTk0QTdCQTNDOURGQjUzNDNDODEwNTg1N0M1REU2NAorOjEwNDBEMDAwMzFCMTU3MDE1RTBFOEFFRTI4MEFERkRBRDZCM0IyMjc3NQorOjEwNDBFMDAwQ0NGOTVDMjgzQzYxN0M4ODIzMUZCNUJBQUIwMDlFNDdBNQorOjEwNDBGMDAwRUY4OUMyRkJGRkFGRjNGM0EyM0NGRTVENDhGODc0MTBGQQorOjEwNDEwMDAwQzRDRjlBRDI1OTNFQzhGQkU5MkM4RTNFQjlBMkQ4OUFBOAorOjEwNDExMDAwNENFN0NENkI1MTA2NDE1RTU5MkZERUZGRkQ3NDE1OUZCNAorOjEwNDEyMDAwRjdFNkVGRTlGRDdBMkQ2MkZEOEVDODRBNERCOEZEQzc2RQorOjEwNDEzMDAwNjQwQUZDM0NDNEZEQkQ0MkUxM0YwRjZGQzUzRjc2RkEwNworOjEwNDE0MDAwRTE1RTVDNTc5OUMwRUZDRDg0RDIzNTQxRkVFODFBMkQ2RgorOjEwNDE1MDAwRjg0MEZGODIxRjhCRjUwQTAxRjVGRkVCN0FERUREMjRDNAorOjEwNDE2MDAwQTYyRjc1QkEwRjg1RjM2RTBFNjc3REZFQkZGMEZBNUU1RgorOjEwNDE3MDAwQUUzNzc0MzhFQkYwMEQ1REFGREU5RkNBQUIxMUM2Nzg3OQorOjEwNDE4MDAwQ0JDNDlEODM5RTA2RkJBNEE2NTU1MDJDNzRBODFBQTlFNworOjEwNDE5MDAwNDMwNjNFQUNERDc5QUYxNUNFMTdBRUU3QkZDRjQyQTRFNAorOjEwNDFBMDAwQ0E4MUM2RjNEREY3RDNEOUVGQkNFQzFCM0MwQ0VEQzdERAorOjEwNDFCMDAwNEZENjMzRkI1ODlCN0IzNjE2RUNBMEQ3MkRFRURGMEQ4OAorOjEwNDFDMDAwMDM3RTdDNDMzNDdERDczQ0I0N0M3N0I5QjJBMENDNkEwMworOjEwNDFEMDAwMUMzNzBCRDczOTc5NTFCMTE1QzI0MzM3MkU2QUIzQTZCNAorOjEwNDFFMDAwMUFFOEU5N0RDOEMzMUExQTZDRUZCNTQ4QzVGQzQ1M0ExMAorOjEwNDFGMDAwMUZBRUMzRkIyMzFCODE3QzhDQkNFNkY2OTIxOEZBRkMzNQorOjEwNDIwMDAwQzZCQTc4NDY4N0Q1Q0Q2RDMyRDZEOTc3ODZGNUY5RjQxQQorOjEwNDIxMDAwNzk0MkY5Njk0QTQ1OENBOTNFQTdCNDIzMURFMDUyNjE1MQorOjEwNDIyMDAwRjMyRjc1ODdBMTUzNkY4NjdFQUVGMjBERjU4NDQ2RTlCNAorOjEwNDIzMDAwNzZFMEZGMEY3QUUyRUNDODcwREY0MTlEOThEMTQzM0ZGMgorOjEwNDI0MDAwQTQ4NkQzMEY0QjU2QThBOTAwRkYyNUJCRkJBNjAyNzM3QgorOjEwNDI1MDAwMkM3OUI5M0MyNTlDN0U3ODczMzkzQjNGM0NDQ0YzMkVCRQorOjEwNDI2MDAwQ0Y0Q0ExRkFFMTBBODM3RTk4MTI4NUY0MTFGQURFNTU0QgorOjEwNDI3MDAwMTkxN0E5MUY3NDdDRkQ5QkU1Q0M5QkEwMUZDMkYwNzU4QworOjEwNDI4MDAwNDU4NjU5M0Y0QzZCOUQ4NUZBNjFEQTE0OTFBODg2Nzg3MgorOjEwNDI5MDAwNUM2OTA2OEZERjQ2RDQwRkM1MjlENzYzRERFQThFMDkzNgorOjEwNDJBMDAwNDMzNzZGNzJCRjA0RTAwQTI1Q0MwMzdBRTI4RTBDMjZGNgorOjEwNDJCMDAwRjc0M0Y1NDUyNDc5QUU1Q0FDM0NGRjVGODJCMzJFQ0Y2QgorOjEwNDJDMDAwOTc1MEZGODVGRDBFNEUyODFEMTI5NEQ3NEJBRTE3RjA2OAorOjEwNDJEMDAwRjc0Qjk2RUM2NkYyN0NDOTREM0MyRTE5MjI1RjJCNDFDMAorOjEwNDJFMDAwQkVFNjFCRTUyQjdCQkZDNkMzRjQ0MUVEQ0VBQzg3NjZCMworOjEwNDJGMDAwRDBFNzM3MzQ1OURENzZEQUZGODZBMEJDMkQzMENBREIzMworOjEwNDMwMDAwM0IzMjI0MURDRTk5NEExOEZDNEU5RjExNDM1NEIzQkMzNgorOjEwNDMxMDAwQ0EwMTM5NzU3NEQwNEI3OUNGMDJEREJGQ0VFRTk5QkQ5RAorOjEwNDMyMDAwQ0ZGNUY4NkI4MzVFQ0E4Nzc4RkFFRkY5Qjg5QjM5MUQzMQorOjEwNDMzMDAwOUQ1RTRFMTY5NDUxMzg5NENFNjVGNkYwRTJFRDIyQzJBMQorOjEwNDM0MDAwQTFBNjg1RDk3OTM1REIwNEJDQ0YzQjcyRjAxNzc4NkUxNgorOjEwNDM1MDAwQjg3MDM3M0IzNzg0RUZGOTE2MUJGMEI4RjBGNThFQzYwRQorOjEwNDM2MDAwREVGMDdDOTM4MEU3OUU1NUVFODVFQ0RFREYwNjE2MjdCNworOjEwNDM3MDAwQjZEM0ZGMjA1RjYyNEQ3NEVDNjY4Mjc5M0ExQUM2OUIxMQorOjEwNDM4MDAwMTc3M0I4NTVEODNBMEZDMEZCMTU4RjBCRUU0RDI4RDdEMQorOjEwNDM5MDAwQ0NGMUU5QzUzOTYzM0YwMEJGNjBFMUI2OTA3NkY3MUEwQQorOjEwNDNBMDAwM0NDRjU4MEM3MTY3ODMxRkQyQzZGNzc3OEJFOENGN0I2MQorOjEwNDNCMDAwMTZGMjAyN0YyNzg2RkRCREIzQjY1MDM4NTQ3RjQ3MzhDQQorOjEwNDNDMDAwMUNBMjcwQzhGRkY2NzBBODZEQkQxN0YzNkZCRUVCRkVBMAorOjEwNDNEMDAwRjc2NTcwRkI3MDMwQzkwNzdFNzlERkEyMjFGRjdCNUYzNAorOjEwNDNFMDAwMTFGMTVFRjFEQzdCRkJBNTFBRjM5NDBFNjUzMEJCRTJBNAorOjEwNDNGMDAwNzU4QkE3MzEwREZBRDVCMEZCQzdGMzM2M0VCMzFGQUVCMAorOjEwNDQwMDAwODZDRjY4MjY4MzIwNkMzRjZGODM1OTRGNzZFQkU1MTY4NQorOjEwNDQxMDAwMTVGNUVFOENCQTY3MDRGODlFRkYyRDIyQzFERjAxOUJEMworOjEwNDQyMDAwMzNEOEU2ODFGM0Q3NDM1MTlEMjhDRjc0M0FGQzEyRTg4NAorOjEwNDQzMDAwOTBDMkZEMEIzRUVGRDE1RTlENjVFODU3RUMxNDE0RTQ4RAorOjEwNDQ0MDAwMTNGODlFMDZENDI5MUVBMjYwM0Y1NzdEM0U5MkMzMURERAorOjEwNDQ1MDAwRTMzM0I1M0IxOTlFNkEyOTVFODBDRjQ2NTI3QjE3RjQ0MQorOjEwNDQ2MDAwQzg4RDU0RUZFMDc5NTk2QjlCMTVGQTU3RDM3RTg5Mjg5NAorOjEwNDQ3MDAwNzdEQ0U4RUZFQUZBMDlDRUVGOEE1MzBDNzhEQjdEODQyQgorOjEwNDQ4MDAwRDFFRjU2QzE0REMyRTAyRDk3RkU3NzNFQkM0NUMyOTc5NQorOjEwNDQ5MDAwNkUzRjVDMkNERTc0Nzg3Q0E5Q0I2RjhFQkY0MzUxRURGMAorOjEwNDRBMDAwMTU0M0YwOUM4QUZEMEUxMDY5OERDNzczOTU2MzREN0Q5MQorOjEwNDRCMDAwMTE4RjUxOTk4MkU5QkIzMkRENzgwNUZENjg4ODJGNUQ0NworOjEwNDRDMDAwMEIwQkM3MEZENzQ3NjE5RTFDQ0U5QkNERUMyMUEzN0M2NQorOjEwNDREMDAwMDlGNUEzNkI0OTNCREEzNTYyOUFFN0UxNzQ0MzVFRDg4QworOjEwNDRFMDAwMzQ5RUJGRDI3REFFMUJFQzM3MzkyMzM5NzIzRkUyMkFBRQorOjEwNDRGMDAwQzFGMzFGM0RCRjE2N0UzOTBBRjNDMTc4N0Q1RjQ2QzEwNworOjEwNDUwMDAwRTExOTc0QkY5RkFDMTZGMTdFRjI3NTE2RjVBRDIyRTA4RAorOjEwNDUxMDAwRTNCNTU2MDI3NEY5Qzk2QjU2OEREOUExMzEyODg3Njc2NgorOjEwNDUyMDAwQkQ3RUQ0MEFBMTkxNTk5MDVGNDBGQkNEQkE4QkM5REIwNworOjEwNDUzMDAwQTMzMDE4NkRGQjEzRDU2MzFBN0NCNzg0MzQwRjg1QkM4OAorOjEwNDU0MDAwRkQyOUVFQjY3MkM4REI5RTlBN0Y2ODI1OUNEMzREMkU1RQorOjEwNDU1MDAwNTVERTdBMEJFMEJCNDYyNDAwREZGNzU2OTdBMkJGNzIwOAorOjEwNDU2MDAwREJBRDAyRDJGNURCQ0JGMUI3QjBDOEQ0Mjk1OTZGQkRCMgorOjEwNDU3MDAwNDVFN0JENjk3NTMyOUVCM0NERDBGNjk3MDNCRENEOTlBMQorOjEwNDU4MDAwRTg3NEMwMzlEREI4NUM5MTc4MEM3MEJDODlCNDYzREMyOAorOjEwNDU5MDAwNjI0NkREQUQ1MzYxQkRENTU0MkY0MERDQjVCQUY1NTA1MAorOjEwNDVBMDAwNzkyQUQ0MzcwQUY4M0I2QUI1NUU4RjBDNTdBMERBMzcwMAorOjEwNDVCMDAwOUM5NTIxRkU1MjQ1RkIwMTdBNkEzN0IyN0VCNTVCMDRCOQorOjEwNDVDMDAwQkNERjUzNDVFNTAzRUNBRjZBOEI0MEUwMjI0OTNCQjVDNQorOjEwNDVEMDAwRkZFQzZDNUM5RjlEOEVEQkJFOTFCRTRGRUJGM0UwN0RFQworOjEwNDVFMDAwMTg3NzRCM0NGRURFNURFRDZCRUM3RTUwNTVFMThBMDNBNworOjEwNDVGMDAwMjA5RkFBRTg3QkY0MzE2OURGNzIyQjhFMzc3RkEzNDBCRQorOjEwNDYwMDAwMjAzNUI4QkEzMEVCNDc4NTMwREU2QjU2RkMyRUM4RTE1QQorOjEwNDYxMDAwQjY4NzY1NThGN0NENzRCRTM0M0FGRTFDQjFBMzFDRjNCRgorOjEwNDYyMDAwQUNFRjEwMTRDQzgzRkVFQTA3QzgwNzY3MzgxRjkwRDc5OQorOjEwNDYzMDAwOTYzMTNFMTM3ODlEREI4NUJBN0VCQzM3MzM5QkU1QkI1NAorOjEwNDY0MDAwMkY1QkQxMDhGQkVBRjAyNjY3ODE0QjU0QkJGM0FDMEMxRgorOjEwNDY1MDAwNzZERUIxRTVGMEUxMTk4QTM3OUUwN0I3Q0Y3QjU0RUVERAorOjEwNDY2MDAwMzBDOEE5QTczM0ZCQjJFRkU0RUYyQzQ2M0VCRjg1NTQxOAorOjEwNDY3MDAwRTJCOUI4NjcwNUQzQ0I0NzU2NDZGOTA0QjA0N0FDMEE1MAorOjEwNDY4MDAwRUFDRDdEMkIyRjdEMTBGNjdGRkEyOTJCOUU5NzlFQ0VBQgorOjEwNDY5MDAwRThDMEY4RUM4OThENTZGQzZFNDhGRDQ2MTFFNUM4ODlFNgorOjEwNDZBMDAwRUQyQzJFMjQzRTMyNzU2NDFBQzA4RkNBMDFBMEJCN0Q0QQorOjEwNDZCMDAwMUI0QjY1OTA4NzI3N0MwMkJFNUZGQUM4RUQyOTJDRUU2NAorOjEwNDZDMDAwNkI5NjFGNTVFQTAyOTQxNzhGNDQzMUY5MzA2RjQzRjgwNworOjEwNDZEMDAwRjNENTg4RjI2MkU5NDgyNkRGNDNFNEMxRTJGNDQ2OEM3MAorOjEwNDZFMDAwRkI4NUNBODk1QUUyRDBFNUMzNjBBOEI3RkJEMzkwN0VBOAorOjEwNDZGMDAwNkI1RUIzMTJCMEVGNkEyNEU1RTYwRDQwMzczM0EyRTBGQgorOjEwNDcwMDAwMjQ5OUYyODU3RjNGQzhCNzRGN0M4MkVBQTVDRjZGOUM4MgorOjEwNDcxMDAwRjk5QkExMDBCRkUzMDA2RkUwOEJGNTg5NzhCRTVBRTVGNQorOjEwNDcyMDAwOUI4NTcwRDVGMzExRTc2RDMwRDNCMzlFRjc3NEJENDcwOQorOjEwNDczMDAwMENERUYzQTFGRkJCQjEzQTg2Njg4NjdFODdFRkEyNzREOAorOjEwNDc0MDAwNDlFNzlCQjk1M0MwRUYyMTFEQkVFQkM4ODFEQkYzQjEzNAorOjEwNDc1MDAwQUUwMDFERDYyQ0UzN0E3NUJEMTNFOUY2RjAwRkNFQUU5MAorOjEwNDc2MDAwMDRCQUJDRjk0RTAxRDc0RkJDOUU0NkQwMkIzNTFCMDQ3MgorOjEwNDc3MDAwMTVFMjlBRjNFRTY0RUZDRkEzRUYwM0JEMUM3RTk4RDE1MAorOjEwNDc4MDAwMEZBNTYzMTVFOEJDNjZFM0JEMDdCMEZGMTY0MTg1RjFEMAorOjEwNDc5MDAwMEY2RjlBODU3QUI4REEyQjEyN0NCRUU1MDhEQUNCNTQxMworOjEwNDdBMDAwMUY2MERFRDAzRUFGOTgwMjc0NUVEMzYwNTMwMEFGM0ExNAorOjEwNDdCMDAwQkRFOEY0Nzc4NDdGN0Y5QUQ4REQwMzI3QzNFRjUzNjQ4NQorOjEwNDdDMDAwQUFFQ0JFN0MwOEREODlEM0IzOTBCRTZBQjc1QjkxNUU2QworOjEwNDdEMDAwNkFCRDhDOUU4RTNDMjUyMjFERUU1Qjc5REQ0OEEwOUYzNAorOjEwNDdFMDAwRDM1Qjg1MDhGNDQ3RTkyQjNGNDg1RkUyMjM1NjdDN0Y4MworOjEwNDdGMDAwREUxMzJDQkVCMDZGMjNBM0VCMTMyRENDM0UyRDdEQTQ3NgorOjEwNDgwMDAwMUZGQTM1RjM1RUI3MTIxNjdGMjAwRUEzRkQ3MTIxM0ExMQorOjEwNDgxMDAwMENBNUJCMUU3QTg5RDM2MTI0QkFGMzU4OUJBNzQxRkUyRAorOjEwNDgyMDAwQzFBQ0E3RTlGQUQ1MjBCQzRBMUI3RjgwNzE4MEQyQzZGMworOjEwNDgzMDAwRUI3MUJGM0FGRkMwQkQxNkM4REI5OERCQjQ4MkU1MzMyRAorOjEwNDg0MDAwNEEyQ0JGRTcxQkFGMkI2NDFEQ0IzMzlENDFGQTE3NTk5MAorOjEwNDg1MDAwRkU4OTlGQUVFM0E1RUQ4RkExMURGMEYxMkY4RjYwN0U0NQorOjEwNDg2MDAwRTNDMjE3MjhGRTY5RkZEM0RCOURDNDhGNzZCNjBGRTU0MAorOjEwNDg3MDAwQ0M4MjE2MTFGMzRCODlFNDJGOTg2Q0I4QkZBNUU3NjU3RAorOjEwNDg4MDAwMkNGQzk1MTNFMUJFNjA4N0NENTc0MURGNUZGMERDRDE5MgorOjEwNDg5MDAwODE3ODRFN0UzN0IzNTNCREJGNjRERjk5MjFERThFODFCMAorOjEwNDhBMDAwOTMyMTNGNTM2MkY5MjFBMUZBMzc5MEM5RTIzMEE3N0VFNAorOjEwNDhCMDAwMTM4M0RGNjMxMkI2QjVFMTM5RDM4MkU2RUJBQzM2NDMzRQorOjEwNDhDMDAwRENGMjRDQTYxNUU3QTVGREQ4M0QzMzhBN0YzODVGODQxRQorOjEwNDhEMDAwRjUxOTdGNEY0MkNGMEIzOUY1MDRFMzlGMDUzQkFENjhENworOjEwNDhFMDAwMUYyREQ4QjYwOUUzN0RCNURCQ0U2MkZFNkNFOUFGOUUyNQorOjEwNDhGMDAwOEEwNTM4RDRFRTE0Q0RGOTUzREI0NEJGMERGM0JDQzRBNAorOjEwNDkwMDAwMjMzNkY2NUQwRTUzMUU1MzREMEJCQkRGNTFEM0NDRjM1NAorOjEwNDkxMDAwODQ0MkYyNjcxNkZFNkFGNzczNUUwQTlBODVDRjNFMUVERQorOjEwNDkyMDAwMEJGQ0Y0NjFGQkQ2NTg4MDI3MUQwRkYzOEYyNjE2NDYyQgorOjEwNDkzMDAwQzg0RkJBNTA1RTUyRjMxQTlFOTczNDFFN0ZBNzIzMzQ5NQorOjEwNDk0MDAwMkZFOTQzRjgwN0Q1RTM5OTdENDJGMkJBQjYzMUI5NDU2QworOjEwNDk1MDAwQjE1RjEwRUUxRTkyNkVCRjJDN0NFQUIzNDcyMThGRjYzQQorOjEwNDk2MDAwRDQ4RThGMUU4NUY1MkZGQTlGNEYxRTg1QkMwRUIyMjc2MQorOjEwNDk3MDAwNEEwMTdCQTJGNjk3NkY2MkZFQTFGRTVFNjExRjY2NEY0MQorOjEwNDk4MDAwOUQ3RUUyNzFDQ0RGM0NGRDhFMERFREMyRDNCQjRGNjQ0QQorOjEwNDk5MDAwODJCRDcwRkE5OTJGNTIyMDJGNzNFOUVFNzI4QzRGMkM0MgorOjEwNDlBMDAwRkQ3NTI5REUwRjhERTQ2RjAyN0RGQTJFMjI3RjM0MTQwRgorOjEwNDlCMDAwMUZGQjVBNDRCRjgzQUVGM0UzQjc2REM4RkZERDc5NjZEMgorOjEwNDlDMDAwQ0Q4QjU5RkU5RUNBRjNDQkI2ODdDRkQzRDVGM0ExNkE2MAorOjEwNDlEMDAwNUEyNjRGMUMwRUYyQUU4NUU5RjVFRUZDQTgwQkU1OTVDNAorOjEwNDlFMDAwRkQ5MUUyRjU4QThCQzBERjc2OUUzRkQ4M0MzRTZDNUUzRgorOjEwNDlGMDAwRDlDN0YwMEY4QUE3NjkyMUY4RkJBQ0U1OTY5RkZGMTQ5MQorOjEwNEEwMDAwOUVCNTg0QkZBN0FERjNGNTg1RTBBNkU3MDFGN0VEQTM1QQorOjEwNEExMDAwQ0RFQTAzN0NCNEUzNDlDQ0UzMDNCQzU1QThBMEZGM0YzNworOjEwNEEyMDAwQ0I4NEY4RTY0OTZCMjdDNjBEM0I3N0RCMTRDOEY3NUFGMQorOjEwNEEzMDAwQjBGQjMwRjJDQkU5NUYxRkMyM0M1QkMyRjM3MTRGOTMxNgorOjEwNEE0MDAwRUUzRjk2MzdDOTYzMTdCNTVCOUMyQzFGOERDMzFGRjJEMQorOjEwNEE1MDAwRDVENDU4NkNFNzc5Njk4QzhFRjU3Q0I1NDg3OTZBMEZBNgorOjEwNEE2MDAwRjVDOTY2RjE0MzlFOUZCQzU4NkQ5NzE1NDcxMDVGODA0RQorOjEwNEE3MDAwMUZBMTEwRjA3NUM0OTRGRkE3RUYzQjc0M0MwNUUwNzBENAorOjEwNEE4MDAwQTUzMUZGMzI1MjNFMjBCN0QzN0JFMDhCQzlFNUQzOUJFMworOjEwNEE5MDAwNzgzRTY2Nzc5RTI1MjFFOTgzMjEzRjg4RTlDMzVBOUZBNgorOjEwNEFBMDAwNzAzODFDN0VGNUZDQ0JGQkZBNzBCRjUzRTc0RkRGQzVCNworOjEwNEFCMDAwRTU1RDVFNzhERERGMEUyRTBEN0REOEZEMDAxRDNFQTc4NQorOjEwNEFDMDAwQkUwQTJGQTc5RkUyRkM0RUZEOTZFRDdEMENGRUNENEM1RAorOjEwNEFEMDAwRUVCN0U4Nzk2N0ZBN0ExQjlCOTk1RTNFQjU4REQ5OEQ2MgorOjEwNEFFMDAwQTFGQzVEMTNFMUY3QjQ1RUU4QzNFMjBEMzUzQkRCMDZFNAorOjEwNEFGMDAwODIxQzNBQjVGNzM3OUNFRTdDRkMxRUNFMTFEOUNCRTU3MworOjEwNEIwMDAwQjZDRjI4QjcyM0ZDN0VEOTdFM0UxRUY1NzdDMzhFNTdERAorOjEwNEIxMDAwQkJGRDZDRDhGMTNFOTRCNEVCNjBGRDFGQjYzMzNCRTRCMworOjEwNEIyMDAwQzM2NjMxRUNFRjIwRkNBQThGRDVFNDA3MzYzQTY1RjQ3MgorOjEwNEIzMDAwQkJDNEQ4Njg5NDQ3NEI5RDg1NkZDMzc3REQ5NjNBNjVCMworOjEwNEI0MDAwQ0M3N0E4NUZDMUYzMjNFRTcyRTNFRjc4RDQzQkM3RTJFMgorOjEwNEI1MDAwRjc0QjU3MDI3QzBDN0VBODU1RjFFMEVGNEU1ODVEOTU1RgorOjEwNEI2MDAwRjlFMDVGODVERUVCOTQ5MzJDQzQ2N0M0QkZFNEM1RkIxQQorOjEwNEI3MDAwQkQxM0IyM0Y5NzQwRUZCNDJGMzdERjFCNjk5Nzk0RkQwOQorOjEwNEI4MDAwODk3NEJDRjYzMkMxMERGNjZFNEYzQTMzOEY3RkFEMjY3NQorOjEwNEI5MDAwOUFFMjY3MTBBQjg2N0Q3NUI5RDlGN0QwOUMxNkJGNDJGMworOjEwNEJBMDAwQkIxMDY3NTRCQjBCMUQzRDk1RkQ1RTM1RkM0QzE3OUMzRgorOjEwNEJCMDAwODNBRjVENkVDRjgxN0I1Q0IxQzQ4RERGMTk3NkJBQkJFQworOjEwNEJDMDAwRUZDRkUwNzg3MTI0MjQ2RjlCRkY1RUI1ODMwQjk1Mzg5RgorOjEwNEJEMDAwQTJCNDQxREMyMjNBOTdGREZFODM0MkEyRERGMEZEQTJBMQorOjEwNEJFMDAwOUZDNDZBNzhBRjY5QkREMzgzN0EzODIyREZCOEQ5QkQ1NAorOjEwNEJGMDAwMUEzRDlFMTQ1N0M4RUU1MUZFNUZCQkVCQzQxNjAwODBGMQorOjEwNEMwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1N0RCNQorOjEwNEMxMDAwMEI3ODU0QzVGNUY4RENCRDc3Mzc5QjY0MzdEOTkwMDQyMQorOjEwNEMyMDAwQzJGQjZFREUwOTIxNTkxRTA5QTgyODM3RTE2MTEwRDBBOAorOjEwNEMzMDAwMDUxMTUwNTEzN0UxRkQ0QUUyQTM5NkFBOTUwNTYyMUE4MworOjEwNEM0MDAwMjk2RDgzODA1MjhCQkFEMDUwRkQ1QUI0ODBCNDgyOERDNgorOjEwNEM1MDAwNzYwM0QxNjJBQjM2QTA1NjZERDUyRTEwMTE5NEM3MEFEQgorOjEwNEM2MDAwOTQ4RkZBQzNGMjlGNzM2NjI2N0JFRkNERTY4MUVEM0YwQQorOjEwNEM3MDAwRkRFQTMwRjdDRTlEQzc3OUNGMzk2NzY2MDkyMUU0MEE4RQorOjEwNEM4MDAwRkQ3RjkyQTZCNDg1RUMwNEZGQTA5RTRDNzQ3NTM3RkNBMgorOjEwNEM5MDAwNTcyM0E0MzczQ0E3N0YyQTIxMTM2NTA3MjEyM0U5NzdFRgorOjEwNENBMDAwMTMyQzgxMTgwOURGNEZDOUEyRUYxREVDMTM5Mjk0NEEwRgorOjEwNENCMDAwM0M0MTc4M0ZENUUxRjFEM0Y2MEU4NzZGMEE0OTIwNjQ3NQorOjEwNENDMDAwNDM4MkY2QTY0NDRCRTI1MThFODY3MkExMkI5NTVDNDkzNQorOjEwNENEMDAwMjcyNEIxMjBFNEI3RDBDNzg5QTNFOTczREQzQ0U4OUY1RQorOjEwNENFMDAwRTQ3NUUyRkM4RTlBRTY3NzU0M0ZCRkZFQUEzM0U1Nzg3RQorOjEwNENGMDAwM0NBRDI4NDRCOTIyRDNGMUVDQUQ4NEQwRDJFOTUxQ0VGOQorOjEwNEQwMDAwQzEzODkxRkVGQzQ0MjlBMUUzRjA3OTI2MTJGQTlFRjZGRgorOjEwNEQxMDAwRTM5NjM2MkE1N0U4M0E1Q0M0MjU5MTBDMUNDRkY0RERBMworOjEwNEQyMDAwMDAxN0Y2MEY3NURBRUY1RUY4QzczNTg0RjQ1QkE2QjZBOAorOjEwNEQzMDAwRDhFODNBQkQ3NkM5MDU2MEU4NDNFN0RBMEE0MDUwNUEzOAorOjEwNEQ0MDAwNkQwMDhDQTcxQ0EyMUVCNDkxMDJEQTZFQ0YyMTVCODg4NQorOjEwNEQ1MDAwOTZDQjc3MUVDMkY3MTZBOEQzMzIzOTVFMURERjdGMThCNworOjEwNEQ2MDAwMjE5MzAzNTlERUI0M0M2ODU3OTE2NkYxNjBCRDU1NDkwMworOjEwNEQ3MDAwMjVBNDZFOUEyRkNEMzIwQ0E2OUZENUQwMzI4MDkwRTcxNQorOjEwNEQ4MDAwNDk0REJFNDRERkRCNkJEREFEMDdBRjI3MDA1QTNBMTk1MgorOjEwNEQ5MDAwNzhFRjZFRDUwQUUwM0RBRjEzMTIyNDc0MURDRkM3QjU2RQorOjEwNERBMDAwRDczNTdCMUFBREE3QjdEN0ZENTA2RjA0RTA1RjBCRTM5MworOjEwNERCMDAwQjk1QjZCRTlGN0JCNTRFRjQ0OTU4RTNCRUQxOTBCOTE1MgorOjEwNERDMDAwNTIwODE5N0JDOTExOTA4MDBFNDJCRDA4RTkwQjlGRDU4RQorOjEwNEREMDAwQzQwMTVFQUVDMERGRDg0ODA5RjAyNUE5OTE3NkU2Rjc5OAorOjEwNERFMDAwRTY3Njc0OUVFNTNCRTlGQUE3RjkyQUJDRTM0NzEwMzI2MAorOjEwNERGMDAwNEE2MjcwMjVBRUQwODhFOTRFOTg0N0U1NkNCNTM4RjIyNgorOjEwNEUwMDAwRERCNDY3Q0VDOUU5NzQ3RUIzMjk0RDExRkEzQ0IxREMzQgorOjEwNEUxMDAwNzU1MzJFOUQ1RkUyMTYwQTJEMTVEQUZCRUU4Mjc5NjczNworOjEwNEUyMDAwM0RFMkIzMDA3OThDMjVBMUZCMjU4QTRGRjI0OTBBQ0VEOQorOjEwNEUzMDAwNDc4QzUzRjc5QThDRjQ1QkY3OTgyNUIwMUFFOTU3OTU4RAorOjEwNEU0MDAwQkM0M0Y1RjgwQjk5RjAxNzY2RjhEQjdCMDRGMTU3RDVGNgorOjEwNEU1MDAwNzQ4NEUxNkZFRkQ2NjZDMDdGNTU5M0U0OEE1MTYxM0Q1QgorOjEwNEU2MDAwOUU1RDk0ODhDOEZEODE2QkJDQ0E0MDhBRDc5ODcwMUQyRQorOjEwNEU3MDAwRTBENTRBNDY3OUE3QzQyMjVDRUY4NUY1NzQ4MDJCOUY2NAorOjEwNEU4MDAwNUY3NzcwN0RGRUM0QjYxRjE3RDJBNkZFNTMxNjRGMTY2RAorOjEwNEU5MDAwODlDMDRCQjREQkFDREExMDJFN0REMjdEOEYwMjFDQUEwOAorOjEwNEVBMDAwMzc4NkVBNjJFOUJDNUUzRDcxMzhDMTQ3RTc5Qjc1RUEyNworOjEwNEVCMDAwNUNCMDkwQ0UzNzZCMENCMjcxRkJCOENGOUZEQUQ2NkM3QQorOjEwNEVDMDAwQTNGRjdDMUVFODk4QkVDODI2QkVENTJFNDc1N0YwNjBDQgorOjEwNEVEMDAwRjRERDBFOEYzRDQ3MTAzRTE2QThEM0U3QkI2RDY0MTE3RAorOjEwNEVFMDAwRTBCNTZDQUZBNDA1ODBCRTYzQzgzRDVFNUFBRTU3MkREOQorOjEwNEVGMDAwQjg4RUVEQUFDQzRCODlFMUYxNTRCQUEyRDJFRkNCNjZDMQorOjEwNEYwMDAwNThCNDAwMkQxMzc5MTk1OTdGMkRCNkRCQUUyQTU4MEFGMworOjEwNEYxMDAwNzgwODdDMEEzQTIyQTQyMTdFMUFDNTYzNUE4RUVGNTk3QQorOjEwNEYyMDAwMjNERDNDMTE5RjRFREY4RjZEM0I3QTNGQjE0NEJFREJFQQorOjEwNEYzMDAwQkU5Mjc4RTc1OTIzRUQyOEZEM0M2Q0Y4NkVDMkY3RTI4QgorOjEwNEY0MDAwN0MwNTkxRjY0MDk3NDAyNzY2RkNEMEVGNzYzMEJDM0U1QQorOjEwNEY1MDAwMTEwRkVCRDhENzc2NEUwNjc4RjcxNEFGRTZFN0FEMkJGNgorOjEwNEY2MDAwN0RERUYxRDZDRUY5Qzc1QjJBN0IwMUFFRTZFNzQxODA1NAorOjEwNEY3MDAwMkZDMkM3RUU2RkNCMDVBOTJEOTE0NDBBNkFCOUFGMkY5NgorOjEwNEY4MDAwMDhGMzVCNkUwRjI1Q0NBMEY4QUQyQTNENkYwMzM4QUM1QgorOjEwNEY5MDAwOEUzRjczOUQyRjRBM0Y5RENEQTNGNTcyOEVDMzRCRDc5NQorOjEwNEZBMDAwQjdGRjUyMENDMkRCRENGRTJCOEVDRjc3NTdDRUY2OEVDRQorOjEwNEZCMDAwQTcwNEZBNzg1QzQyMjEwQTVCM0Y3OTNGOTNFQTg3RjFDNAorOjEwNEZDMDAwNUNFRThFQ0Y1QzMyODUwOTJEQzVDRkU1Qjg3NDI1ODZBMQorOjEwNEZEMDAwQTA0MjUwNjhCQjA5RjA4NENFQUY3Q0Y0MkU4NUE0NDM3OAorOjEwNEZFMDAwOURCNjEzRjJEODhERkQ2RTIzNDU4MDBGNkIxQjNDQjcyOQorOjEwNEZGMDAwRDNGRjgxMUU5OTlDNzlEMzQ5RDAyRkFENEE2ODREMjJBOQorOjEwNTAwMDAwMDU3RDZCOUE4NEZBRTdDNkNCMEQyREEwQkI2RTRDQjMyMQorOjEwNTAxMDAwMUFGNERDMjRENTU4OUYwQzdBNEYzN0NFMzQ4REUyOUQ5QworOjEwNTAyMDAwQkYzRjhGRkYwREUwRkE2RTU2Mjk2ODY5RkYzNzY3QzZFQworOjEwNTAzMDAwMDVGQzc0QzlCNzhDQkVERDNCNUVBNzJGMEU3RDJCREY1MAorOjEwNTA0MDAwRTMyREU4MDg5RkQxNkUwMTFGMkZDMkY1OTU1ODBBOUZFNgorOjEwNTA1MDAwMjI1ODY3NDUyREQzNDk1REMzQzMwQzQ3MzM1Q0M2N0ZENworOjEwNTA2MDAwQjI2MDBBMjlFQzA4OTc5RUFFQkYxREFFODRGQzA0RDY0MAorOjEwNTA3MDAwMzc1OTkzQzk1QTc3MDRBRTY2RjhEMEJGQTlEMEVFNTAxRAorOjEwNTA4MDAwMjk2RDI3ODE1RDcwNEFCMUQwRkFBNDZCMjQyMkVDODI4RAorOjEwNTA5MDAwMDk3QUJDRjNGOTk5RTE2QTg2OUZCMDM3MjZGM0VGREUwRgorOjEwNTBBMDAwMDY3ODUxN0E5QTJDNkY3MTAwM0Q0Q0ZBNjFFQkY4NjRFNgorOjEwNTBCMDAwMkFDNzI2MEQ2NEY4MjU0MTBBNUNBQUQ3NkYyMDA4MzM1OQorOjEwNTBDMDAwODBFQjM2QTQzQjk3MTVFRDBDQUFENzE5N0Q3QzMyRjEwNQorOjEwNTBEMDAwQTQ0NEM3OUY3Mjg5QkVBM0YzOUNBODRBMDFDQTIyMDBCOAorOjEwNTBFMDAwOTdBMzI2QjgxQzM1RDFDNTUxRkRCQUNERjM3RDA1RkU3OQorOjEwNTBGMDAwNzE0RDE0N0E1MTFBNzI4MUVGOEJEQ0RDM0UxOTQ0RDQ2NQorOjEwNTEwMDAwMkI1NDFGOTU3QzNDMzI5MUM5ODdFODdBNzJFQzI1NkY0RAorOjEwNTExMDAwN0IzRjBDMUUwRDQ4MzcxMkYxQjUzRjc3RDE3RTgyOUE0NgorOjEwNTEyMDAwMzU4NTgyODE4Q0IzQkI5MDRGQzYxMTZENEQ5QjFENDA2MAorOjEwNTEzMDAwMjFFMzNDQzVCQzRFQTY3OTM1MzdGREJFOTQ0QzVBRDMwRAorOjEwNTE0MDAwQTY4N0YzMjc0MjlGMzM3ODhGRTNGMDFCNDdGQ0NENzI4RAorOjEwNTE1MDAwMDI5NENBMDVGREJBNDU3RjkzQzQ3QTA2OTNDMTYwMEZENQorOjEwNTE2MDAwMzVBQjJBRDNGQkJDM0ZCMUJFRTQ2NDEyOTRFODA0QzM2MAorOjEwNTE3MDAwOTIzREIwNEQ4MkY5MTNCRkFENTc2NDNDMkJDN0VGQzdDQQorOjEwNTE4MDAwOTlEMzZGNzVBM0RDQUEyMTAwMkYzMDVCMDA5RjY1RkNDQgorOjEwNTE5MDAwN0Q5OUREMTE4NEY5MTBCQkY1NTQzQjVFQzA4NjIxNzMwNworOjEwNTFBMDAwNUNDNzg3MjA1Q0M4OTVGOEM4RkMyQURDOTI3MjNDMzc0MworOjEwNTFCMDAwMzJCRkQzMDdFRDdFOTlEMkI1QTdBRjZGQkU5QkNFRjNCQQorOjEwNTFDMDAwOTRGNDc2MjFDMDhCREE2NUQ5MjBDRkNERUZDRjdGRDQ5MAorOjEwNTFEMDAwNTIwNUVGNjlCQjA1RDg4RUFGNkJBOTJDMjFERDg0NUYyQQorOjEwNTFFMDAwOEIwOTZDNzM0NzkzRTdBQjk4RkNCNTUzNEJCNDI0NDJERgorOjEwNTFGMDAwRjc2NTcxOENDRjI3MTNBRjAyRjZFNUZFNThDNjY3MkQxMQorOjEwNTIwMDAwQjE4QjkxMUYyNjkyOUFEQUExQjRCRkJGQzRERDc4MTA4QQorOjEwNTIxMDAwRjg2QzEyRjE2M0JCMDkyRTIzMUQ3NjQ3QTczNzkxRjA3NgorOjEwNTIyMDAwREQ2MEY3NEVDRUI1OUFFQzY4M0ZFMjY3N0Y2QzRFMjZBNAorOjEwNTIzMDAwRThCM0ZEQjE0QzJFMEJGQkUxNDlCNzc3OEQxQkRGMEZCNworOjEwNTI0MDAwMEE4MDVDM0VBQTE1QkYwQjdBQTJCMjc0QzRERjQ2RDJCNAorOjEwNTI1MDAwRDI2MkY3REEwMDlGRjM4MUJFMjg1QzQ3MDM3REQxNkZFRAorOjEwNTI2MDAwRjc0M0Q3N0Q5MUJFRDYwMUZFRTZENjlCRThDQjlFOEM1OAorOjEwNTI3MDAwRkQ3QkE5MTg4Mzc5OTU2OUQ2NkZGNDc2NzUzQkRDQjgwOAorOjEwNTI4MDAwOUVFQ0NFNUUyNDJEMEFDOUE1NzA5REM3RTk3NDdGNkM4MworOjEwNTI5MDAwOEMxRkVDQjhCMkM3MjkxRjUzRjhDRDI1QkU2NzFCMjQ1RAorOjEwNTJBMDAwOTg4N0Q1NjBCRkNGOEJCNUEyQkQzN0VGRTdCMUM4RUYwOAorOjEwNTJCMDAwRjRFMzJEMzU3NEM4MDVGNEY5NUFEQTBGQzk1NTA3RTgzNworOjEwNTJDMDAwRjUzQTY5RDA3RDBGRjhCN0FCNDg4RkYzNUNFQzU5MUIwQQorOjEwNTJEMDAwRURBMzZGMkZFODk3NEEzNzBBNEZCMkQ5N0E0RTRGOTcwRQorOjEwNTJFMDAwRTZGMTNCRUREN0Y0REQ3RTg5Q0MwNkJEQkFERkFBMEUzMAorOjEwNTJGMDAwRjBFOEY0Qzc2RTM3QjM5QkNFRDlCM0I2NThEMjNCODcyQworOjEwNTMwMDAwRDMwMjdCQjJBNjhDODhENDhGQzdDNkNFOEU2NjI3ODg4MAorOjEwNTMxMDAwRkUwNDVDMjNGQjhCMTMwRDJENjMyMkZCMEJDQkFBMkYwQQorOjEwNTMyMDAwNENGQjhCMkZGRUFCRkRDNUExQUQ1RkI0RDZEMkY5MzREQgorOjEwNTMzMDAwNjQ3QUZGMEVGNDQ2MTQ2RjFFQzA3RDEzQjcxNzI5QTVCQgorOjEwNTM0MDAwRTQ0REQzRTFFMUVGNkU2NkNGRjQ1RTMxOEUxQ0EzQTQ5MQorOjEwNTM1MDAwMTQ2MzI3RkVEOEUxOTRERjE1RTJCNzBFODdGNkJFNTUzOQorOjEwNTM2MDAwMTY4QTU3NjUzNjQxRkQ0M0U1MEREQTk5RTZGNTdFOUNEMAorOjEwNTM3MDAwNTlGNjE5OEMyN0Y4QjAyQzhFRDIzOUU1QkJDNzJENkFBNworOjEwNTM4MDAwNjMwM0Q4RDM3Rjk2QTk2RDQ5NDc1RjMxMTdFREJDNUJBNgorOjEwNTM5MDAwNTcyQ0M2RjJFQ0QxQ0JEOUMwRkY2NTFDQUVBNzQxN0YxQworOjEwNTNBMDAwODM1RDFEQ0ZGOEE3M0E5RUYxQ0IyQjY5QkVEMzQwRkY5QQorOjEwNTNCMDAwQUQ5QUVDMUM0OUZCNUJCQTU3RjZDNEUwRjJDMzgzNjBCQworOjEwNTNDMDAwN0RCNzRFOTU1M0UxRjkzMUJCMTVGNzg5RkI5RDBDQ0ZBNQorOjEwNTNEMDAwQzc4ODU0QkUxM0VDREU0MzMxREUzREI0NUM5MDU2RUEyMAorOjEwNTNFMDAwNEFEN0Q5ODMwQkQyQzY2MzlEOTQ1M0MzOEVEMkRGN0QzNworOjEwNTNGMDAwNzY0NkY3Qzc4ODlCQ0RCQjVFRjI2Q0E3OEZDRUQ1QkIzOAorOjEwNTQwMDAwMTM4MTBFRjc1Qjg5QzFFRUIwQTQzMzdCRDk5MkNFRTA1NQorOjEwNTQxMDAwNTg3OTg5MzJFMTA4NDY1RjM1NzRGQzRBNDVCNTgxOUQ2QgorOjEwNTQyMDAwNUY3OUM5ODZDRjYxMUU0ODdGQjFDNjdFRTI3OTNGRjFDMAorOjEwNTQzMDAwRURGRDQ4RTgwQ0Q4MUY2QkVFNDc2MUNGMzkxRDlCRjE5RAorOjEwNTQ0MDAwRjBBODdCNUMyMkFDNjc0MTlBRTY0QTQ3NzlBRjJBMDAxNAorOjEwNTQ1MDAwOUZCMjkxMkQxRjgxRENFQjVFQ0VGQjI1OTBGM0Q1OTc5QgorOjEwNTQ2MDAwQTVFMDYwQkFGRTUzN0JBQ0I4N0YzQkM1RURGRkQzN0JCNAorOjEwNTQ3MDAwMEVGNEFFQTRFNUYyNURFRjI1QzAzRUQxOURDRUYwNzVGMQorOjEwNTQ4MDAwNUE2OTREODBGOTJERkIxREI1OUIwQjkwNkM3QkRGODkxNAorOjEwNTQ5MDAwREZDRjJENTlDQjg2QjFFQkY1REZCNURGNjYwQ0YwNjJCRgorOjEwNTRBMDAwM0IzQUMxOTI4OEZEMzVDRUVFMEZDMEZDRjZBRjkyNjc1NQorOjEwNTRCMDAwMDNERUE4N0UxNEY2OTcwNEYyNzBDMjFFNTk4QjJERUMwMQorOjEwNTRDMDAwNjg5NzhENEFCNzcyN0U2Mzc4N0NDMEM1QzZFOThDOEZCOQorOjEwNTREMDAwQ0IyRUM1OTM4MDhFOEZDQjE0NTU4MUY5OTc1RDRBQzAzMgorOjEwNTRFMDAwRTdBNzRGNkNEQjcwMzNBNTdCN0Y5QTE1Rjc4MTc0N0I0MAorOjEwNTRGMDAwRDQ4Mjc2QTFDNEZBQTU2Q0REOTI0OUM3NjlFMUVCNzk0MworOjEwNTUwMDAwNjNDRkFEMzNBRUEzRkY3QzEzRjQwQzZEMzMzRUU0NEI5RAorOjEwNTUxMDAwNjE0QzRENzc3MTI1MTEzQjZCODJDQjY4MEY5QUVENDUzRAorOjEwNTUyMDAwQTFCN0NBOUJENkQ3RjYyNzAwRjdDMEFERDcwMTFEOUVGRAorOjEwNTUzMDAwNTAwOEQwNjEwNzdCREE3RTYzMjc3NkUzN0E4NEM3QUJCNQorOjEwNTU0MDAwN0I3RTg5RkJBNTNFRTkyQUUzQUIzREU3MjcwMjFENTc5OQorOjEwNTU1MDAwOTFFMDRDRThCNzZBOEZFQzBBRDJENjZGOTAzRDQzNDA5OQorOjEwNTU2MDAwN0YwOEZEREVCRURGQjk3Q0MwRUUwMUY5MUYyQkJCNTYwNAorOjEwNTU3MDAwQzMzQUVEQjczOTU0MEFBN0VCQ0UxNkE0QTA5RUIzNUI4RAorOjEwNTU4MDAwQ0I0MUZFOTVDNTY2MzlFNkVBRTg3OTdGOEE1QzBFNzQwMAorOjEwNTU5MDAwRjA0NjRBODZGMUI5N0RDMzEwRDA3M0ZCMkM0QzFFQjU4MgorOjEwNTVBMDAwMUNCRkMzMTFDMjc2QjdBNkEwQkQyNkY0QkJDOTNFMTU2OQorOjEwNTVCMDAwRkVCMDQ5NTk3MjIwOUFERDRCRTQyRDFCNjNFOUZCQzkwQgorOjEwNTVDMDAwMzk1NjIyODM5RDFFNUE4MjdBQkY4MzdFQkZFQ0MzN0RFQgorOjEwNTVEMDAwODA1OUNGMEJCODUzNDgyM0JGNzRCMDRGMjM3MDM2RDhDRgorOjEwNTVFMDAwQTk4RkE2NTMzQjZEMDhEMkMwNTBCMDNCODM5NzM3MkM5MAorOjEwNTVGMDAwODU3OTlFNkQ4QTc3QUQ0NkJGMDNCMzZCQ0VCNjJERDk0NAorOjEwNTYwMDAwMzAxNTlFQkYyREEzMUZFNUVDNjUxOUY5NjlGRkVCNEIyMworOjEwNTYxMDAwMDc4Nzc0N0M0QzM1MDVFMkU5RTJCMEFGQ0ZGQzgxRTI0QworOjEwNTYyMDAwRTdFMkU3NzExRTNGM0M1Njc2MEU4OUI2MkYxNkZCMjU0MgorOjEwNTYzMDAwM0E3MjNGNEIxQUNFQkY5RjY1MzRCMjFCRUU0RjZGODg1NAorOjEwNTY0MDAwRUM0RjM3QTZFM0ZFMzQzQzExRDQ0NkRBOTYyMzM2QTA1RAorOjEwNTY1MDAwOEJEM0Q0NTQ4N0Y5RkEyOUYyQjc1M0I4REVBMDg1NjQwNgorOjEwNTY2MDAwOTc2RTNFMkZBNDRCRENERkExM0QwRDcyQzU0RkNBRkFFOQorOjEwNTY3MDAwNTNFMzg0MkM4QUQzNEFBRjAzQkI3MzFBNzE2REEzRUIzNworOjEwNTY4MDAwNzlFRDQ0OTk2NEE1RjUzMURCREQxRTg5RDY3NzgzRTE5OAorOjEwNTY5MDAwMDk3NEZCM0IzOUIwOURDMjYxMzc5NUM3QkI2OUJGOEJBRAorOjEwNTZBMDAwNUIxQjZDNkUzQUFFN0YwRjlERDQyODVBQTc4ODA0MzhENgorOjEwNTZCMDAwOUNCMEZBMDcyNUU5RTg2NDU2MDY5MzJCMjdBQ0JFRTdCMQorOjEwNTZDMDAwQTA5RjEzMUZDNzEwRDgwNzlFRjgzQzJFQUFCRTFEOUM5MgorOjEwNTZEMDAwQzFGNEVEMUZCODlFRkIzN0E3RjdFMEE5NTdERkVDNDdGMQorOjEwNTZFMDAwRTcxNUJDRTQxQTA2NzA1RkYyQzJENzcyMDUxREU3N0FBRgorOjEwNTZGMDAwNkU5NzRERDlEODVBMEJGRTlCOUJCNzg0MTU5MDNGREUxMQorOjEwNTcwMDAwODA2QjAyQThEQUU5MkY3OEFDQTA5NzY2RUNGMDVBQzE1QQorOjEwNTcxMDAwMEM5RkI5QTdDNjBBRUY2N0VGNkQ3ODAzRUE3NzA0NzdBNQorOjEwNTcyMDAwNjJGRDdDQkFFRjhGMDA5NzFCRUFDMzA3ODA1QzMyMUJENworOjEwNTczMDAwODgwMjdDNDEyRTMwN0JFQjUzM0U4RkY0NEI5RUZEODlEQgorOjEwNTc0MDAwNDhENUE1MTZBMEYzRjZGMTFGNjk1NUMwRjRCOUI5OTY2RQorOjEwNTc1MDAwOEQ0RkZCN0IwQkYwNzQ0MzRENzgxQ0U4Qjc0MTJCNTgwMQorOjEwNTc2MDAwN0Y4MzQ4RjNBQTQ0MzVEMkVGRDhDQkFEOTJERUFGRjBCOQorOjEwNTc3MDAwRUM0MzhFNDU0Q0VFMzJCODBGN0FCOERGRDZCNUM4Mjc2OQorOjEwNTc4MDAwQUUzOEQwRjc4MkFGQ0ExRTc2Njg4MEVGOEIzRjg4MEJBOQorOjEwNTc5MDAwQzRCODgxQ0U5OEJEN0RGMTA3OEU4MDNGOEFCRDFEQTEyMgorOjEwNTdBMDAwQjM2MDBDQTMyRjQxNkZDNENFRUE5QTFERThFREMxMjc2OAorOjEwNTdCMDAwNkJFMjQwN0VBNDc4NTU5QjRGODdDN0IyMEQ1M0YyREY1MgorOjEwNTdDMDAwODJGRTYzNjNEMDdGRDczRURFN0EzNjFFRkQzRTFGRTg0MQorOjEwNTdEMDAwNUFFOEIzNEFBMDA3ODM1RjRBQzgwM0M2MTdCNDhCMDBEMAorOjEwNTdFMDAwOEMyQjRBMjJBRDc2MTE3RDlEMDREMzYwM0U5RjAzREM1NQorOjEwNTdGMDAwRTk3NzhEMzY3NTBFOENENzE4MTdFMzgyRjEyQUVENTlBQgorOjEwNTgwMDAwMzY5MDVGRUQ3RTUwNzAyNjUyMzk3MjFEQjczQjVGM0I3QworOjEwNTgxMDAwQjEzRjE5RjA3RTcxRDhBQTQxQjAzRjA4NUE3RTgxRjI5QgorOjEwNTgyMDAwQUEzQkJBQkIyRDVERkIwRkQzQjdGRTQxQjBCRjEyRUQ1MworOjEwNTgzMDAwRjcxRDhGMkIwMDdERjkwNzkwNzc4MDFGNEZDNTYwNThBQgorOjEwNTg0MDAwQUZGOEFFN0YwNkQzRjc5NDVGNzBGRDgyNEY1MjVBODk0RQorOjEwNTg1MDAwQjZCNTAwNDFBNUVERDZDMUEzMzdFNzBCNTFFRUI2QUEwOAorOjEwNTg2MDAwN0VDNjY3RDQ0RTAxQkU3MzA2RUQxOUMwQ0ZGQjMyQjBDMQorOjEwNTg3MDAwOUVFMjI1MEUwRjdENUZCRDM3Q0IyM0FCMjgwNzdBNjdFRAorOjEwNTg4MDAwQTQ0NkU0QzNGNTVDM0VBNEI0ODY5MTJGN0JCQTRGRjhERQorOjEwNTg5MDAwOTZDMzM3QThFQ0U0RkM0NTUwNEUwMTdGMzEzOTFFRUMyRAorOjEwNThBMDAwQ0ZFNDkwQkYzRkUwMDVFNDA2Qzc0RjVGODk5NjBCMzkxMAorOjEwNThCMDAwOUVDNUJBNTNCODVDQjg0RUFDMEJFQzM3NUEyRkM5NjBEMgorOjEwNThDMDAwRjI0N0JDMUZDOUUxMzY0MTJFNDgwQzQ1RjFGRkI0RDM2NQorOjEwNThEMDAwREQ4QUJFMDRFQ0M5MDkyQkZBNjM1OTkyQzFFNkJCRDgzNAorOjEwNThFMDAwQkUxRUZEQUE4QjUzRDZBMzNGMzU0NTZCQzA3MkYxRjg5RgorOjEwNThGMDAwMDY3QzlFQjZBNTAyRTk2M0YxNjZDOUUwMUYxNUU1Q0ZGNworOjEwNTkwMDAwQjg3RDc2RkE4NDA1RjUxQkIxQzRGNTAzRkExM0VGMzdCOQorOjEwNTkxMDAwNzIzQkE0NEZCQUFGMENFMDdDNzJDRjg2MjcwQkQ1ODhDMAorOjEwNTkyMDAwN0ZGODYyNkNDM0NENzcwMEZENkY5NzVEQUIwMDNGOEQ1NAorOjEwNTkzMDAwMTMyNDM1MEE1REU5RTEwN0YwQUE2RUZDRDc0NDk4NUZBRAorOjEwNTk0MDAwMTUwOUQ1ODE3QzU2OUIyNDk0OUZFQTVFNUFGNkExQzQyMgorOjEwNTk1MDAwREZDOEU0RTk0OTZFQTcyRDhBMzNEQTk3QjMzOERDNEUwNQorOjEwNTk2MDAwNTg1QjI3MTdEMUYxODNFNzMyODc4MzVGMjdBODg0NjRDOAorOjEwNTk3MDAwODVFMThGMDA3RjgwMUM3NjIxQkRBRjFERjQxMEQwOTE5MgorOjEwNTk4MDAwRTQ0NEZCMDdFNEVBMkUxRDdEMkNEREIxQjVBRTFGRkQxRQorOjEwNTk5MDAwRTcwRDk3NURDMzY0RUM4NzM4RjRGMjVCRDA4OTkwQzc1QworOjEwNTlBMDAwRTZGNTJERTY3ODE1NzQ3ODVENDQ0RjJEQ0VFMDdFNTRGMworOjEwNTlCMDAwNDA1OUQ1RkE3M0U4NDc3RDk0RTNBRjExRTgwREY4Qjk4MworOjEwNTlDMDAwNUVEMERCMzAwQkNBNUIxMzFGOEZGQTFGQzlGNzdENEYwOAorOjEwNTlEMDAwM0MzRDA4RkQxM0EzMjlERjUyQkUzRTA5N0MxRDg1MkVFOAorOjEwNTlFMDAwRUFEQUU1ODA2RjU1NDYxNDdENzA1MkYyM0Q5NzlDMTFCRQorOjEwNTlGMDAwRjk3RURGRjE5QkYyMkI3NUZERjgzODNDMkU1QTdEODM0MgorOjEwNUEwMDAwNUQ1MUUwMTU4MTJCRTkwN0Y0QjA4ODYyMDZFMDQwQjZFRAorOjEwNUExMDAwNDgyRUIwMEJDNUZCOTQyRDJDMUVGMDE0RTcyM0YxNUMyRgorOjEwNUEyMDAwRDQwNUJDQzcwMkJDMzMxMERFNEZDMTdDQTk1RDYwMDM0NgorOjEwNUEzMDAwOTU5RDE2NjA3NjAxQjFEQ0Q0MEZGNEZDRTIzOEVEMjZCQQorOjEwNUE0MDAwRjRDN0FDQjcxMEYwMkYxMUE5MENFOTNEQTU3MUQzRjE0MworOjEwNUE1MDAwNkY0NzQyMTk5QjhFRjExNTZBNzcwMzFEMkQ3RTVDQzUzOQorOjEwNUE2MDAwN0RFMkVBNUZDNTIyNURCRTk4OTE4RUVCNUFERDY4NjVFNgorOjEwNUE3MDAwRjQ2OTZENDBGQTNBRjlGOTkyQzExMDlGRjE1M0JEOUU1NQorOjEwNUE4MDAwMTU0NUVGRDQ5OUY0Rjk0MzE5NEM4RjBBQkE0QjVGQzcwNworOjEwNUE5MDAwRThBRTUxRDFFMjkyNzQ3NEY5M0NEMTg2ODNEQzE2N0E3NworOjEwNUFBMDAwQTUzMzdBOENEMDkxNkI5OEEwQTMwQUZBM0NCRDNFMjQxMgorOjEwNUFCMDAwMDNCRTI4MUU1RjA1M0FDQzU4MTc0Njc5RDYxOTFFNDVGNQorOjEwNUFDMDAwMUM0RUUwNTNDOEY5RkZGMEY5OEJGMURGRTY3MjNFODUxQQorOjEwNUFEMDAwREIzQjFERjFCQUNBQzAwRkQ3NDdGOEUxMkYwQzNGMTFDRAorOjEwNUFFMDAwN0VCMEFBOTFGNUZDOUVDM0E1MzNCRUM4Q0Y3NDYxQkYzQQorOjEwNUFGMDAwNzU5RjZFQjgxQkY4Qjk2RTdEOUM2NzM1ODlDNDczNDQ3OQorOjEwNUIwMDAwOUM1NUNDRTMzMzRFODc5REM1NjM3NkE5QkU0RjMzNEM3RAorOjEwNUIxMDAwRjE0MjE1RTUzRDhCQkY0Q0UwNzZGQTdEREI2M0QwQkVFQworOjEwNUIyMDAwRDgwN0FGNDA4RUI0QzUwNUMwQkUxNERGRTUyODQ0NTM4NgorOjEwNUIzMDAwODYxM0YyNTU4NjFCRTc5RjAzMjI4NEQ2NTM1NkQ4NDgxNgorOjEwNUI0MDAwMjYxREY3RTIzNUNEMkQwOUI0RkRENDcwNjg0QTExNURFQworOjEwNUI1MDAwRTIzRTVCNjhDNjJERTAxNzI2REExMkIwMzNEMDk3MEYwRAorOjEwNUI2MDAwRjQ3RjhBRjU0QjVDM0IwREYzRkMxNzg3QjdDMDRGREQyNAorOjEwNUI3MDAwQTc3M0QzQTJDNTBCMDQxQzNCQzM0QjdFMjY4RjlGRjE5QQorOjEwNUI4MDAwRjc2NkZFNkYxNUZBQUFDN0ZDRUI0RjA0RkVCRDgxRjg1RAorOjEwNUI5MDAwNTc0MUZDODQ1QzI2MkVEMEQzRURGQzdCOTlCMEY4NUM5OQorOjEwNUJBMDAwQTY5MTdGNDUzRDBBRkYyNjY2RUFGOUY3NTI4OEYxMkY1NAorOjEwNUJCMDAwRTdEM0M0NDZBQjE2Q0Q2RTE5OTg2OTY1RUI2QTlDNTA2NQorOjEwNUJDMDAwMEFGQTI4RDE0QkQwNkY0Mjk3ODlGQ0JFOThGMjNCRjA3RAorOjEwNUJEMDAwQjExRkY4QjYwRkMwOTNDOURGNzRBREUxNkU3ODlGREVEOAorOjEwNUJFMDAwQzhFQ0YxOEI0OTZDQkQ4QkFGRDc5QTY1RTA3RkJBMUZDQgorOjEwNUJGMDAwOTA2OEQzMDZDRUVGOURDMzNEOTgyODMxRkQ5NjA4NzI3QworOjEwNUMwMDAwRTY4NjMxQTE3MUEwODc1NTg4MUJGNDgxRjUzMUZDOEVBMQorOjEwNUMxMDAwMUQ0MzAyNDE4QTc3RjUzMjYxRjJFM0YzQTdFRjdFMDg3NAorOjEwNUMyMDAwRTRDNjdBODcyNzRCOERFOEE1NEZEMzdEQzMzMjUzM0IxQgorOjEwNUMzMDAwRTc2QjRBOTcxQUY4QjFFRUZCQjc4M0VEMUYzQjg5OUZEQworOjEwNUM0MDAwOEY1RDIxMjNGRDUxM0FCRjM2NTMwN0ZGQjFERUIwMEMwMworOjEwNUM1MDAwNzA0RDhFRjdBNTU5OTNFODNFQjAzMTZCQkE3RDIwNUQ0QgorOjEwNUM2MDAwOUY5QkRBQkRCNDVFNEVFQkVCQzAyRkQ3MkI0NDc4RkQ4MworOjEwNUM3MDAwMDk0N0RGRkYyMjRGMjAzM0YzMzBGOEYxOTY2NzY4OTMyRQorOjEwNUM4MDAwMzI4QjMxQUUzRDE5RTY3MzQzRkZCMDhDRjJBRDg3RjEzNAorOjEwNUM5MDAwRkY2QUYwRUJEMUY1MUNCRDJERkY1NzE1RjQ2OUU1RUQ1QQorOjEwNUNBMDAwREUzQTc4MkJGQ0NDQTNCODlGQjlCQTY5MThGQTlGNzU3NQorOjEwNUNCMDAwRkVFNjNCNjBCQ0NFRkNDREREOEQ5QkMwRjk5RUQyMzdBRAorOjEwNUNDMDAwRUVGRjEyNDY4NzY1OTA4RjQyQUUyQ0NBRUNDNUU5MzlDQgorOjEwNUNEMDAwNDRBNjBGOERGMDE3QzgyNUIwNzc0NTFFMDJGODIzOUQwNgorOjEwNUNFMDAwMThDRjA4MjBGRDQxM0Q3MTc4NDRERUFDNkJCMDk0NDc3RAorOjEwNUNGMDAwQTNFRkVGNjczQUEyQ0E1M0QyRjQ3RkJGN0ZBODg0QUU2NgorOjEwNUQwMDAwMTc1RTMxRjlGQUZENEM5RDdDNkQ2QzM4REE5QkQ5QUY4QQorOjEwNUQxMDAwNTRGQjUzN0JFMjdFRUUwM0Q4QjBEQUYzRDc0Q0EwQkI0MgorOjEwNUQyMDAwNzc2NUY0QzM1QzEzNjNGMzRCRTAyRkQwODhFQUVBQ0RDOAorOjEwNUQzMDAwRkIwM0I2NkI5MjgyQ0U0MjVBRkY0NjIyMUFGODM3QkY1NworOjEwNUQ0MDAwOTFCMURDRjBBOEI3REMwREZFOTY4RjJDMjg3RkFCQzA5QworOjEwNUQ1MDAwN0VBM0YwMTkzRDk4MDRFQ0Y0OUY3QkI5REZCNEY0OTg2RQorOjEwNUQ2MDAwNDM4MzNDODFCMzkyMURFNUU3RDkyMzcxN0VEMEFCNjdCNQorOjEwNUQ3MDAwOUQxNkY0QUJCN0JDMTY4MzdDNzEzRTMzOEVGQjQxMDI5QgorOjEwNUQ4MDAwMDY3Rjg5ODhGNzlDN0Y3QjZFMzJDOEZGMjc3OUZDRjNGQQorOjEwNUQ5MDAwQzk1OEU2OEY3REYyRjY2Q0Y0NjMwQTdGQUZBMjUwRDg0MworOjEwNURBMDAwRjc4MkI0MUUwQUQ3NUU2MDM3Rjc0NzNGQUNGMEZGRjZDNAorOjEwNURCMDAwQjY1NzQ4MkNFOTg4OERBM0Q4RDlGQTdBMkIzRTA5RkMyRQorOjEwNURDMDAwRTc1QkJCQzk5N0Y4NERBNjRERDhDMzhEMDBFN0VBNDdGRQorOjEwNUREMDAwNDIzNkQ4RUYwQTdCNThFOEVEQzFBN0QyOUIyMTZGNjIwQgorOjEwNURFMDAwNzAzOTczQUY2RDNENjVCMUMwM0FCNzUyNzI0QTcyNzc4MAorOjEwNURGMDAwQTQyRjQxNDc1QjNCRTYyNUVDQ0FENEVCQTdDNzU4NUUwRQorOjEwNUUwMDAwNDI3QjlEN0ZGNzFDQ0Y0QjE4REI3NkY0NjVCMEYzMjhGRgorOjEwNUUxMDAwQkY2RjM1N0MzNzIxMzVDRTE3NDU2RUNENUNGMTMwN0VCNgorOjEwNUUyMDAwREYxOUZEQ0ZCNDEwNUYzNDNERjIxRUQ3MjM0NEE5RTkzQQorOjEwNUUzMDAwMEY3QThBRkNGM0MxNzgzNThBM0Y2N0U2QTc5NUE5MDBGNworOjEwNUU0MDAwMTdCMzFGMkUzMkZFQTMzOEZFM0I5OUVERjFDRTQxMTA2MQorOjEwNUU1MDAwN0ZFQjJFREU2OTlFRjdERkFDQkU4MUQxRjQ5NEMwQjMzOAorOjEwNUU2MDAwNzlCQzhFREZCM0ZENTk3QjNCMUJGMUVENzJCMDdFODdCMQorOjEwNUU3MDAwRUJGQTU1QjI5ODFEMzQ1MzYyRjE3Q0YyMkQ0MTdEMkQyMQorOjEwNUU4MDAwRTg4NEMyRkQwQkEwOEI5Mjc3OEU4RDg4QzMzODUwNTg2MgorOjEwNUU5MDAwMDY3OTcwRkVBM0NDMDExODhGRUY2NDNGMkFFNjQzMkRFQworOjEwNUVBMDAwRTdBQzY4NzkxRjc0M0M2RjM0M0M0ODU5NEM4RkNFQjREMgorOjEwNUVCMDAwQjIzODg2NzQ3QjE2RkEwNzY2QzZDNjQ4MzEzQUZCRTRFOAorOjEwNUVDMDAwNzRCQkJFRDUwQzcxREJGREIxQTM0NkEyREZEM0FBMEUxNQorOjEwNUVEMDAwODgwNjNGNzMzQ0Y3NzQyNjQxNzgwMjVDM0M1MUU4NDlFMAorOjEwNUVFMDAwQzQ5RDA1OUNFQjRBQjU1Mjg1RjlENUM4MzY1MDgxMUEzOAorOjEwNUVGMDAwOTNBMzI5RTUwNEUzNkZBMzI0MERFMTkxMEM0NjczMzFDQworOjEwNUYwMDAwRDAzRkNCQTczQkZGQjY4QzcyQTFBNDU0MEQ0MDA4OTU5RgorOjEwNUYxMDAwRUE4QkE0QUM2MkNDQ0Y3QUQ5QTJDQkNGMTI3NDUyRjc2MQorOjEwNUYyMDAwMjJENUNCMDZCRkEzREZCMEFGNEVFMkYyOTg1QThGREE4QworOjEwNUYzMDAwMkU1RDNCRjUxMTkwMDExMTdEMzBBMEQ2NkVBODBGN0EzMQorOjEwNUY0MDAwQzA0NTE0OURCRTQ4RDJEMjBDRjUwMTVFNTcxQ0VDQTc4QgorOjEwNUY1MDAwMDY5NEFCODZFRjA0REQ4OUZDNDBGQzRCODE3NUJCMDJFNworOjEwNUY2MDAwOTAxRkQxOEJDRjY3OTRFNDQzQkEwMUY5MDY3RUU1NjFCNworOjEwNUY3MDAwMUM5Rjc0QkQ0NTU5QjQxQzVCMUUzQUFGQTcxQkIxREUxNAorOjEwNUY4MDAwRUVENjc1NzQyNTlEMEYxNTYwNkQyQkU5N0NBOTVDOTg4NAorOjEwNUY5MDAwQkJDRUJEMkEwREUxRUUyMkIwQ0YzOEJFRDI4RUNGRTcwOAorOjEwNUZBMDAwRjNFRjkzMzY1NkQ0RjVBNTQzMjRENUFBRThDRjRERDJDNgorOjEwNUZCMDAwNkFERUVDMEJGOTk4MzVCNDRFRkZFNjM1NDgxMkY4N0RGMQorOjEwNUZDMDAwQTg5Q0MxRUY5RTU5RTlDMjUyRTBEQjQ1REY0QkY0QkQwRQorOjEwNUZEMDAwQkY4Q0U0NDI3Q0E3MzMzREU2Q0Q3MjE4RUNCRTJFRjRCNAorOjEwNUZFMDAwOTgzN0FCQjhBMzFFQjNEODNENkY0MTdFQzBGMjI2NTk5NworOjEwNUZGMDAwMDVCQTU4MzNBNTE3RkFGRjM2RUM5NDNDRTA4RjNCRDAzNgorOjEwNjAwMDAwQzRGMkY0MzZDQzY0RkE0NDhDN0JFNjc3ODlBODM3Q0VBOAorOjEwNjAxMDAwNDg4Q0NGNDk0QjEyRjI0MTc1MTJDNzRENkQxMkM2NkJCOQorOjEwNjAyMDAwQ0ZGMkZERjZCMjRDOUYyRjRCNjcyRjZENjgyQThFQzVCRAorOjEwNjAzMDAwQjhBRDQ5MkZEMTNGOTc0NEJGQzNEODlEMDRGNkQzQjAyNAorOjEwNjA0MDAwN0EyNTAzRTVDMDIyRjg5RTJDMDg4RDg4Q0QwMEJBRjU4QworOjEwNjA1MDAwQkQzNzQ2MDIzOTcwNjExMEUwRDMxQzBGMTQ3MTQzMTEzMworOjEwNjA2MDAwNEY3QzI1Q0Q3N0FGN0VGQzhFNzE0MjYzN0M0QjRFQjA2QQorOjEwNjA3MDAwRTcwMjlGOEQ5NkUzM0NCMjUxRkYxMkMwRUIxQUIwMTNCQQorOjEwNjA4MDAwMjlEREFEMzkxMjg3RjA1OUYzMkRFMzNGM0FDRjFGMDJENgorOjEwNjA5MDAwOUM1QjlDMjU0ODRGNDJDRkQyNzkxNkJFNEIzQUNFQjM3QgorOjEwNjBBMDAwREExMjQ2M0ZBMjZFOUU3NTU5QzU1RENERDM5NDA3Q0JEQgorOjEwNjBCMDAwRTdENTBFN0YxRUQ3OTI5RDBBQ0VGRjJDODlGM0MwM0NGOAorOjEwNjBDMDAwRjdEQTNDMUZGOTQwMEY5Rjg5NDNCRjlGQzA0RjE1RTc4OAorOjEwNjBEMDAwQjFCMzE0MUYxMjlERTdEOUJEMjM2MjJEMEVCMDhGN0M4MgorOjEwNjBFMDAwNEYwMkJDRTQ4MUUxMDRCMENGMEYzNDhEQzg4M0Y1NzQ1NgorOjEwNjBGMDAwMTZERkREOUI1OUY2NzQxNkYyOTlFRjE5RTQzMzU3RTg3MQorOjEwNjEwMDAwRkM0QjZBNjRGRDVEQzQ4NUI3NDJGQkFCODBDRkFGQkI3RgorOjEwNjExMDAwQzZBMzExM0VENThBQTM1RTYyOEU3NUI0QzMyNDJFQTc5MgorOjEwNjEyMDAwQ0Q3NDI3MzUzNUZGMUJGMjkyMjhCRjYxNUVBODdGMTAyMgorOjEwNjEzMDAwMDlBQ0ExNzBBQjFCQ0FFODhGQ0MyMzJBRUE2NTEzOUQ3QQorOjEwNjE0MDAwMkNDQkY0QkUwQUY4MTI3Q0RBMDU3QzVFODc3OURGOTNFQgorOjEwNjE1MDAwRTkwRDQyMDlGM0U4M0YxQ0U1RDJGRTJDQTZERjVFQjY0RQorOjEwNjE2MDAwNTlGMDdCOTZERjkyNDQzMDVGQzcxQzc3RkYzOEIzRjI1QgorOjEwNjE3MDAwMkRGQzVFRDg1RkI5M0VDOTU1NzA1NTdDNzBCODZCRjg4MAorOjEwNjE4MDAwMDU5MTJFOTY3MzM4MkQ4Nzc4MzBFNEIzRURCMTlFMzJBOQorOjEwNjE5MDAwRTQ0RDk4RTBGMEZENENFRjI3MEMwRTk0Q0U0NjMyM0FEOQorOjEwNjFBMDAwNUI0M0JBODQ0NzA4REFERjkzRTkzQjA2QTVEMzRBRTlBMworOjEwNjFCMDAwMDU4MDMyQkEyMjBERTBCQzRCRDUzMDNGNjFGNzJBMDY4QworOjEwNjFDMDAwOEZCM0VGMzA3OEVDNkJCMzIwNUQ2RjIyRjlDODk3QzNDMworOjEwNjFEMDAwMkRFN0VFODZGRUE5N0MzOTBERUIxQTEzREUyOUMxQkUzMAorOjEwNjFFMDAwQjlDRjIyRDUwMjcyQjk3RkQ4MjM1QkJBQTZEQkFGQjM5MQorOjEwNjFGMDAwNzBGRkU0QkJDMEYxNzAzRkUwNjFDNERCQ0NBRkQzMDVGRQorOjEwNjIwMDAwREQ1RUUyNzREQjUzQjg0QkQ5NURGMjc1MDdCQUIyNjY1NgorOjEwNjIxMDAwQTc0NkU4QUFBN0Y5NTg5NDJFNDhGRjVFMURGQkEzRkJFQQorOjEwNjIyMDAwMjg4QzNCMzRFRjhCNDE3OTU1QjU1QjQyNzk1RUY1RkFBQQorOjEwNjIzMDAwMTdCODVGQUY3QTM1MDY4OTcyRkNBQkIxRjhGRURDMUU4OQorOjEwNjI0MDAwRjZGRTRDNjlGNDNDODI4NEVDNUVBOEE3OTZFRkJDRDdCRQorOjEwNjI1MDAwNkJENEQzN0VENDQ3M0ZEM0NFQjkzMkU1NDg1QzM2Nzk5MAorOjEwNjI2MDAwMkEzQkE3QjA4NkU3M0Q4OUY4NkMwMkE3QjNFNDgxNUVCQworOjEwNjI3MDAwMERGNDUwRjIwNDgyRjk4NDA5MEU5NkE3RDhGMTNDMDI3RAorOjEwNjI4MDAwRTNEQjU0RkU5RENCQTU0QTAwNjdGM0Y5MDQzOThFRTVBNAorOjEwNjI5MDAwMUZBNjkyNzU1RjAzOUM5MkNCOERFRjUzMURFNTE4QUYzRgorOjEwNjJBMDAwNEQzNTlENjMxMEYwMkVDRUU2RjZCMzhEQTQ4MTFDRDkzQQorOjEwNjJCMDAwNjlDQUM3MTBFNUZFNkM2RTA3RDYyNkUxN0U1MEUxRjM5MQorOjEwNjJDMDAwNkE3MURBOTA2RUVGNzNEQTcxRERGNzI1OTFFNDI5NTg3RgorOjEwNjJEMDAwNTc1MEZGOUJGQjExNjU5MjY2MjFBQUZFOUM0NTc5MUNENQorOjEwNjJFMDAwNTE3NUY2NTFBQUI3OTdBMURFNjc3NjNGNDNGQkJFQkU1NAorOjEwNjJGMDAwNzRDM0ZCRkU4QkYyMERFRjA3RDYwQzM3RDQwN0FGQjg5MworOjEwNjMwMDAwRDZEMERFNEQwMUEwQUY2N0Q0REY2NDY4OUZENTMwREQwNQorOjEwNjMxMDAwNTBDRkQ5N0M4N0ExN0Q1RUEwRDJGMDdFQzgwQjRCMENGQworOjEwNjMyMDAwRUY4N0VFQkNDRjUwMkZEQUZCOTBBMUJEREM4OTVERkU3QworOjEwNjMzMDAwQTM2Q0I2M0Y5Mjg1NURFRTFDRTkwM0JBOTI5RDc2Mjk2NworOjEwNjM0MDAwNDZCN0ZGQUJFNEY4Mjg0RDI4NEY4M0I4NzlBRDczNjJBOAorOjEwNjM1MDAwMUFFQzRGNUI5MkE4M0VFRUMyRUZGNjVERjc2RDdFODFDMAorOjEwNjM2MDAwN0Y2RTdGOTU3MUJGREI5OUZENTQ4QTUwRkFBQjNBNDAzRQorOjEwNjM3MDAwRTlBMDA4RUQyRjdGMzZGNzIzNTRBOEQwM0U2QzQzN0Q2QgorOjEwNjM4MDAwQTI3ODcwMUQzMzEzRUNFODRGMzNGNzVGOTlBRDFBRkMxOAorOjEwNjM5MDAwN0M2MjFGMjA1QjNDQUUyOTUyRTdGMDEyNzREOTFEQkMxMQorOjEwNjNBMDAwRUEzOTVDRkY1Qjc4RkRDRDk0NkYyNEY2N0JFNkVGRkU2NworOjEwNjNCMDAwOTg2REUxRjZCODZGNUJCNjdFNUY0N0MyQjIxN0Y3NzVBRQorOjEwNjNDMDAwMTdDRUY4MDlDODUxODI3NjRENzVCQzBCRkQxMjY2M0I5RAorOjEwNjNEMDAwNDA4Q0ZGNEE5QUY3MzcyMDU3Q0RGMkQ0QkI2MjAxNkI0RAorOjEwNjNFMDAwNjdBMTFCMENCOUYzRkRERTFGQjNDREZCQkQwOUIzMTFEMworOjEwNjNGMDAwMUY0OTM2MDM5QzVFNkNDN0IzNjZEOEVGRDUyNjk1RTA3RgorOjEwNjQwMDAwN0VBRkQ2QUFBNUY1NjRCRkY3NjIzNjQxNzhENzAzNUVBMgorOjEwNjQxMDAwNzVGQjNBRDlFNjUxNUQyOEU3OERGNjRCNDdGQjlDRUFDMAorOjEwNjQyMDAwM0ZCQUNFMEQ2MEQ3NDk2MDk3MjUzMzdCN0RCNzg0RUJBQgorOjEwNjQzMDAwMTZFMzdFMDdGQkZDRkRFQzFFRDhFNzMxQzQ1M0FGQzg2MgorOjEwNjQ0MDAwODhCRkJGNjczMzdCRkNGRTU4RjkzQkQ5RTNDN0FFNDYzNAorOjEwNjQ1MDAwMUYxRUI2N0EzMENGRkRGMDU0OTlBQ0EyNzAzQzVGM0U1RgorOjEwNjQ2MDAwQUEwRjg5MjI4RjQ1RjkzRUY3REY2Q0NCMjE4OEI3RUU2MgorOjEwNjQ3MDAwRkMxRjg3NTcyRUVBRjJCQ0M3RTE0OTJDOEY3MzNBRDAzNAorOjEwNjQ4MDAwOTE2RURDRDgxQzQ2MTcxOTM5REM3RjEzQzNGQzE4QTdBMgorOjEwNjQ5MDAwN0ZFRkM0NzMwOUE3NkZGQTIwODEzODIxMkY2RUM0NDg5QgorOjEwNjRBMDAwM0ZFNDM5MTNDRjAzOTBCN0UzNzczOEQxNEYzODdENTJBQgorOjEwNjRCMDAwRjFDODU1NEUxRDVEOEQ2NjcwMUVGN0NBM0IwOUUwRkZBMQorOjEwNjRDMDAwOTlCRTJCMjNENUVGRTg5QzlFMzJGOEZBODgxMkNBQzZGMworOjEwNjREMDAwQkNFRDNGOUNFQ0FERDI3MkZBQkVBQzU0RTZBNzM0RTZGQworOjEwNjRFMDAwQkI5OUZENDZEMzU3NTQxOUY4NzhGOTI1ODkwNDkyNzU1QworOjEwNjRGMDAwNzVBNTE1RjMwQTk3NUY1MkYwRjlFOTZDQTM1RkE5NTNFQworOjEwNjUwMDAwNzhGNTEwOUVFNkU3MDI5RTg3Mjc5RDFDMDRGRUY0MzM3MworOjEwNjUxMDAwQjFEMUVEOEY1QjM4QkNEQkU5Qzc3NDRFQTZCM0YzMUY3NgorOjEwNjUyMDAwMjVCQ0ZGRjNFNUQ3RjQwMTM5MzdEREE2NjZGNUM0Q0YwNgorOjEwNjUzMDAwMjVFMEQ0N0FGOThCNzg5MDEzQUZDM0Y5OUIyOEZEMTcyNworOjEwNjU0MDAwRTVCMEI4RDJFQkRBRTc3MDNDODI5NERBQzNFMzgwRUVEMAorOjEwNjU1MDAwNEJCOTNGM0RDQUI5ODA3MTM5RTA4N0I5NTRGRTNGMzkyNAorOjEwNjU2MDAwMTczMDI1Qzc3ODJFMjAyRDQ3OEQ3QTJFQTBCQkYzNERFRQorOjEwNjU3MDAwRDM2Q0QxRjU1RDZFMDQ3RTFGMDBCRkRFRkY4Q0Q1MDVBOAorOjEwNjU4MDAwRjM1QTA4QjYxM0Y4RUZCNjVBRDE3RkY3REVFNTE4MDJEMgorOjEwNjU5MDAwRjE5NDJGQjY1ODdGMDk3OTZFOEI5RUM5Nzg2NjIzQUQyQQorOjEwNjVBMDAwMkY5QTE0ODNGMTlGODU1QkFEMkMzRTM3MjkzNjAwQUVDMAorOjEwNjVCMDAwQUE0NTVCQkZENzdCMkUxREVGMkJDQUI3Q0JCMkU4RkIzQQorOjEwNjVDMDAwNjczNjYxNUVDRDdCNkQ2QjMxQkZGQjI0RjAzMzdEQkVFMgorOjEwNjVEMDAwRThEQjFGQ0QwNEY4RUZCMzM1MEMxOTA2NzZGRjBFQzlDMgorOjEwNjVFMDAwNzA0RTYzNDk2M0FDQTEyRUYyMDgwNUZFODgxNDM5QkZEMgorOjEwNjVGMDAwQTE1MjdERjI2MDhFRjFCQ0Q2ODg0OERDRUNDMTFDRTY2RAorOjEwNjYwMDAwMkZDMTNDRkNBQUE5RUNCQ0Q2ODFFMzZDQkZGRjQ2MjY5NworOjEwNjYxMDAwQ0IzMzBDNEU5QTM1NjUxODVEQzdBNDU0MkJGQTRCQ0M3RQorOjEwNjYyMDAwNzk4OTg0MjBEMkM5MDI5RTM3M0NFOTYzMDVDRkU1NEVDMworOjEwNjYzMDAwMUFFQTQ0M0JGMENEOTUzNTg4MDdGQTlENjM4MkVFQkM5QgorOjEwNjY0MDAwQzJBNDlGMzNCRkNCMjQzN0NCQUJFRjM0NUZEMTk0QTcyOQorOjEwNjY1MDAwMjhDRTBGNzVDODRGOEM5QzFGM0ExQThENkUzNkU0RjAwOQorOjEwNjY2MDAwM0M0NUNFRDcwNzhFQjM3Q0M0MDU2RkNCNkM1REREQzhDRgorOjEwNjY3MDAwQ0RGN0Y5M0FERTZCQ0JCRkVCMjUwQThGRjdDQTk5MTQzOQorOjEwNjY4MDAwN0ZFRkYyOEQ4RjgxREZFQjBCQUY0NDIwM0ZGNDhCQ0I5QworOjEwNjY5MDAwRDFDRkFEN0RERUFFNUY3REVERTc3QTAwM0ZCNzk2MkZCRgorOjEwNjZBMDAwNkVBRjAzNUJERUU2QkRENzcwRUVBN0U3RjJBNjZCNzlBRgorOjEwNjZCMDAwMzIyQjg3QzUyMUNDRjJERDRDRjdGRkJGRTRGQkY0NDk1OAorOjEwNjZDMDAwNkYwQ0YyM0JCMUZDMTU5NEE3NzYzMUY5NjhFNjczQjMxMQorOjEwNjZEMDAwM0MxN0YzMzJDRjc3RjkyNUQ5OTBCRjlDQ0JFNTQwNDRFNgorOjEwNjZFMDAwOUVEQkYwM0QzNUY3NzEzREZFMTIyNUIwNDY0MjNCRTBBMgorOjEwNjZGMDAwODMxQ0RBNkVBNDIzOTA1QzRBODdBODc1NkQ4QkVGQ0E2MQorOjEwNjcwMDAwN0Y0M0Y3Q0YxRjQzRkIzQkRDQkU0RkEwNENGRTRCQkY4QworOjEwNjcxMDAwMzJEMEY3MjNERURFODlGOTg3NjczQkM5NDM2Rjc2OUI2QQorOjEwNjcyMDAwRjJEQTI0NjNCQ0UwQ0I5Q0QyNjZDOEU3N0Y1MEE1QTUxMworOjEwNjczMDAwQ0VCRTFFNDk5OTkwRTczRDdDQzlGOUYzQTcxMEI3QUNDRQorOjEwNjc0MDAwN0FFQjIyRjJFNzI2OUIyRjBERkMwM0ZFN0UzNkNGRjY3NgorOjEwNjc1MDAwMjg3OTIzMTc3MkFFRUUzQ0MzMTZFRTlGMjdCOUI5ODY4RgorOjEwNjc2MDAwNzgxRkY4ODkzMDZGRTE2ODFDRkE4OUQ2QTY2OURGQzAwNgorOjEwNjc3MDAwN0M5RTRCRDNGRTBGQ0EyMTY5REFFNTFDMUQ1RTZBRjlDNworOjEwNjc4MDAwM0ExNTRCNzRCQkI4Mzg1N0QwQkYxN0Y1RjhGQzMyMkEwRQorOjEwNjc5MDAwN0ZBM0QwQTE5QUNCQ0UwMTk0M0U3OUZCMjBGMEM3N0Q5OAorOjEwNjdBMDAwN0VFNDhFNDEyMDFGNUIzNjhERUEzMkRGRUQ2N0MwOUZBRAorOjEwNjdCMDAwNTQ3RUZFMThFNDdFNTYyNDlFRkExM0NFMzdDMkRGM0Q4NworOjEwNjdDMDAwREZFNkNERDZFNzY5QzlCOTQ5Mzg1RUMyMzVCQjVCRDNEMAorOjEwNjdEMDAwMjk5REI0QUQ5MzUxN0VCNzM5NTg3RURCMzE4NzUyREVBNworOjEwNjdFMDAwNThDMEJFNEIzMTdDQTdCMEZEMDdEMDNERTU2M0M1QTFDNQorOjEwNjdGMDAwN0NBMzk3NDdDNUI5MENBRTlEQURCMzM4OTdFRDEzNkMyQworOjEwNjgwMDAwQzQ2Mzg3RUY2RDQ3NkZCMjgzMUU5NTI1Q0RDNUZDRkYyRQorOjEwNjgxMDAwOEMxRUFFQTEyMzAwM0RGQzg4Q0JCMTkzNjlCRUEyRENFNworOjEwNjgyMDAwNjJGODhFRTlEQjZCQjhCRTU1MUMyNkZEM0FBMEVCRjg4QQorOjEwNjgzMDAwNzg2MzlBMzYzMjk3OEUzRjMxNEQyQjg2RkVGNkRBRkMxRQorOjEwNjg0MDAwNDM4MDZGRjZDNjQ1Q0Y1N0JCMkU5N0Q5MjNGRkNFRTFDNQorOjEwNjg1MDAwRjQ0MjFDNjhCRkUyNzgzMkM2RTk2RkM4NjU3MTdBMERGMAorOjEwNjg2MDAwQ0ExQkZBODdENzQwMUU3QUIzREJDNURCODdGMERDMUQ3NQorOjEwNjg3MDAwN0QzRjAxREU5M0I0MTBCOTA1RjJFN0U4NjRFMTdDQzQyMgorOjEwNjg4MDAwMUY0RTFDMjUyMEJGMTJDMjZEMDRGMjY5MTI0Qzc5QjA1NAorOjEwNjg5MDAwQTJGQzA3ODdEQkFCM0NFRUQ5OTFFRkQ4M0NCRDFDRkVEOAorOjEwNjhBMDAwOEQ5NDVGRTBCQ0E4RTAxNzg4QUY0M0JFQzQ4M0FBOEY3NQorOjEwNjhCMDAwRjMxRENCRjc2ODdDQTI5NzA0NzE5Njc0NERCNTAwN0RFQgorOjEwNjhDMDAwNDBGRTI5QzgyNzczN0VEMDhFNUM3NkZFMURGODUwRUEwNAorOjEwNjhEMDAwODIwRkU3RjM3OUY2OTQwRjFCOUY5ODYyODk4NTc5M0VDMgorOjEwNjhFMDAwNDQzMEFGODM3MkMyNkEzQkFEM0Y3QjlGQ0IwM0U3QzdBNworOjEwNjhGMDAwMzJENjExREMwNzBENUMxMUI3MERGNjQ5MzUxQzFGODMyQworOjEwNjkwMDAwMzc5MkQ1QjFCNEI1OUJFN0Y3ODk3QzZBNzc2RDQ4QzFGQQorOjEwNjkxMDAwNzMwNjBGQjFGQ0JEOTM5RkRGMjQzQkExRkZBRjQ1RkY4MgorOjEwNjkyMDAwQzY3QzQxOTFERkU3Q0ZCNTE4RUNDMkRCRDI3RDBGMjNFNworOjEwNjkzMDAwM0U0REY5RDg5REU3ODE3RDk5MDc3OTBFM0YxMUZDQ0UzOAorOjEwNjk0MDAwRjM3MEM2RjAzQzlDMzE4RDlCRDAxRjM3QTZGMTQ2NDVCNQorOjEwNjk1MDAwQTI0RDlFNTU4MjEyRUNGNzlFQUREMTE0RDAzN0NGRTVGMworOjEwNjk2MDAwQjJCQzlDRUVGMkUzOUVFNkZERkIwMUNGQTk5REU3NTk4OAorOjEwNjk3MDAwM0VEOTJFNzczQUU0NTkzRTk5OUJBQUNCMkJGQjAxQ0IwQgorOjEwNjk4MDAwQjNGQzdFMkVEMzIzQ0ZGMjNDOUE2NzZCOThCRjZFQzlCRgorOjEwNjk5MDAwMEI4NzUwREU4QjcxNDQzQjkxOEYzN0UwMDE5NjhGRjc2OAorOjEwNjlBMDAwQUMxMjhBMDVGQUI5MTg0QkRBRjNDQzU3QTE1MzNFMzQyRQorOjEwNjlCMDAwMkNGQUY5MDU5MTU3NkVDQzI3MUYxQzBFOTc2MjNFMTBEQQorOjEwNjlDMDAwMjE3ODRGNDJCRjNDRDVBMDA3Qjc4NjVENzFDMDJGREQ0RgorOjEwNjlEMDAwRTk4M0RGRTc1RTlEM0U3ODJBOEZGMTREMTRCREQ5OTQ5RgorOjEwNjlFMDAwN0I3NTdBMzMwODc0NDNGNUU2MDEyOEFGNUE2RjcyN0RFMAorOjEwNjlGMDAwMjlGNEE3Nzg3Rjg4RTM3MzU2MkVEMzlGNTFGNEU2MjFCQworOjEwNkEwMDAwOEU1NzgzREU0QzIxMDFDQ0QzMjBBNzJDMUU3REJFQTgzRgorOjEwNkExMDAwMjhCREJDREY5N0QzQjUwRjYxQkU2M0I4M0YyNUUxRDQ3NQorOjEwNkEyMDAwNTEyMkU5RTQ1MDE5RTc2QjcxRkZDNEYzQkRDODNERDNBRgorOjEwNkEzMDAwQTJBQ0UzN0FDRTlGOTYzOTYxQkNBRjIyQTE0OThBOUE3MworOjEwNkE0MDAwODdENkVDQjY4OUY4RUQxNzMwRUYxQjA2NTNCOTI5NzVEOAorOjEwNkE1MDAwOTQ5QjUxRjA3MTA2RTZEOUZGNkRFRDAwMTBDOUI1NDk2MAorOjEwNkE2MDAwOERGMTYwM0U3NTgxOEY3M0I5NjhDNzY4RTdBMTE0RjAzNgorOjEwNkE3MDAwMUY3RUM1Qjg4RjE0RjBGRjg2QzNDMzk2QTVGRDFCQzY0NQorOjEwNkE4MDAwRjkxM0U3QjNDRUYwMTI5QkM3RjBEMTJGOEZEOTMzMjI4MQorOjEwNkE5MDAwN0Y3REI3QzkxRTFEOTFDN0UwMzIyQUNGQzg5NzNBRkM0NworOjEwNkFBMDAwQzVFNjQ1QjE3Qjg0MUM3RTM5RERFQjgwRjdBRjlFRDgwRgorOjEwNkFCMDAwMUQwRjc0MjRGMDI0RTQ4RjE5NUYxMTNFNUI4NUUzNTJBRgorOjEwNkFDMDAwMzhBN0U2QTU3NkQ0M0ZFMjdCQjMxRThBN0NFRkM3RjlGMAorOjEwNkFEMDAwNkUwNTNBMUFDOUYyN0RGMDdDMDEzRkE3MjBFNjI3RTg0RgorOjEwNkFFMDAwRENDM0Q3NzkyMDVENzNFNzE1Nzc5Q0E3RUI5NDQ1RUE2MworOjEwNkFGMDAwNkE5RTQ5RTExNDA5RjgzRjQ5NzM2MUY5ODcxMzE2MDk0MQorOjEwNkIwMDAwRTZFNTBBMkI5ODJGRUZFMkZBRDFBQzA3QTlCOEUwNzRCQQorOjEwNkIxMDAwQzNGQTc5OEFDQjhEQkFEMzJDMEZCMUFFRDQ5NzA2RkVDNworOjEwNkIyMDAwRkZERTU5REFDODNDRTQyM0FEMThDQUJDMkNBRDA0RTYzQworOjEwNkIzMDAwRDlFQzY2Nzg4RUNERDM0NjQzNURFNDBCOThFN0E5RTVBMgorOjEwNkI0MDAwQjVFNzFEOEM4NTc2MDlFMzg5MUZGNDIxREMzNzAzNzFENQorOjEwNkI1MDAwOTYwNDlFQzc5MEEwQjlDQTQwOEYyNTZDMjE5ODI3OTBCMworOjEwNkI2MDAwMUMxRjZFOEU4MUY4REYyNkUyODE3MzUzRDk3RUQ1MDIxOQorOjEwNkI3MDAwRkJBRjhDMDdCNEQ1NTBENjlERTZGN0U2OTQxMjNDNzc3MAorOjEwNkI4MDAwRDk5RTQ3NTc5QjhFNzk3NEMwNkY3QTdBOURDRUU3MzEzNAorOjEwNkI5MDAwM0Q4RkYxMjVCNTQzNkVDOTYzRjM5QTA2QTVCMDQzMDQ1MgorOjEwNkJBMDAwMUY3NTY2NTdFOEY4NzA3NkRFRDVGMUUxM0REMEZFMkExNAorOjEwNkJCMDAwRjg3MDZFMUVFM0MzNzk3OTNERTBDM0E1NzlFRDdDQjgyQQorOjEwNkJDMDAwMDREQTc3Qzc4NzBGNzFGRTdCQUExQjNFRkMzOUE3Q0Y3QgorOjEwNkJEMDAwRTdGMjNBOTVBMzBGRTU0NTk1QTM4QzFFMDRCRDAzMUY2QworOjEwNkJFMDAwODJCRTZGRTBGRDUxRjlCOTMyMUFCREY3ODAyRkVCRjM4OQorOjEwNkJGMDAwN0E2MDE3QjZGN0Q3NDNGQUVGQ0NGRThCQ0ZFRkRBRkUwOQorOjEwNkMwMDAwREIwMjc5RTNCQUZEMUVFNTk3QTc2MTdFOTQ1RjdFMDEwMgorOjEwNkMxMDAwMjVFNTk3MkQ4QzVGNTQ5NjVGNkVFMkFGNzY3RDEzNjYwNworOjEwNkMyMDAwNzIwMkYyRjNGNDc5NUFCRkNCNkJENzM3REIwMUNFRTZCMQorOjEwNkMzMDAwQkM5QzMxMjY3RkZFM0I5Q0JFOUI3ODk5MTAzRTRBNDAwRgorOjEwNkM0MDAwMkU1MEI4QkRBNEE3RDdFNzM5QkZGODQ3QjNCQzUzQUFBNQorOjEwNkM1MDAwRDlDQUMwQUVEQzc3OEFEQTkxMDAzRTJFMEZDNjZDNkVDMAorOjEwNkM2MDAwM0QwMDc2MjM1MTFBRTJFMTFFQUNDRUUwRDQyQjVGMTUzNQorOjEwNkM3MDAwRjk5NTUxRTE0NEM3RkY2MzM0NzlEQTA0Nzg3Mzc0QjQ0OQorOjEwNkM4MDAwRTdDREY4REE5MUM3RTgzQ0M0RTFGMTVERTcyMUUwMDcyMAorOjEwNkM5MDAwRjMyOEMyNzlBODk2QjUzQTNERkY0MTQ0NUVCRDBGNzgwRQorOjEwNkNBMDAwMUIzQjNFMkMxMzlDNTczMDFFRTIyNzQyOUU5MjAxRjQ2MAorOjEwNkNCMDAwRkI5MTFEQkZGRjI0RjJGRDI3QjBERUIxMUFGREJFMjBGRgorOjEwNkNDMDAwRjI3RDEyQjhGMjMzNDA4RTUxNzk4Njc2QjI4NkU3MUM5NworOjEwNkNEMDAwRUJEQzhDMUVDQzc0REY2ODYzRTcyNERBRjFENUQwMEZDRgorOjEwNkNFMDAwRjFFNTU1N0Q1RjQyRkY4RDBBM0I0RkQyNThFRjkyRDhCOAorOjEwNkNGMDAwMzk0MTk2RUZGQjVFODY4NkZDMUE0NTBFODVBRjUyMEUzMworOjEwNkQwMDAwNURDODQzRkI0Q0ZCMTc5NEREQzlBMUNCOUNCRkE5MUNGQworOjEwNkQxMDAwRkEzRjY4MUZDQUU5NUEwRUM1RTczMzc4MzlGMjk5N0MwMQorOjEwNkQyMDAwRTk0QzBFMjVGMDc2QkRGMjI1ODM5RjUyMjc4N0UyRjNDQQorOjEwNkQzMDAwQTNDOEExMDc1NTA2ODcyODdDOUE5ODVGMENGRTE1Q0QzRAorOjEwNkQ0MDAwOTVDRkY4MzQyOTVGQTdEN0U4NzdDOUQwOUYxN0JFNEZGMgorOjEwNkQ1MDAwQzVCQzMzQ0NCN0YwOTMzODRGQjQ3RDg2OUFFRkU4Njk2MQorOjEwNkQ2MDAwMUVCNTlBOUZEQTMxRkY4Qzc0OTM0N0JERTFEMTkwMEQyNworOjEwNkQ3MDAwRTAyREYyOUNDNEI4RTZGQzY5ODFDN0FBQTY1NTIzQzhEOQorOjEwNkQ4MDAwNTBDOEQzQkEzQzA4RUNDQUIzNDdCRTQxRkZDOERFQ0NGQQorOjEwNkQ5MDAwNEEwRkFDQjNFNUI1NTE4NkJDMkMzMUZFN0REQzlGMzY4NQorOjEwNkRBMDAwNDEyRUQ4MDlGRUQ5NzMwNzZERThGNzk0ODlGQUQ0MThGMworOjEwNkRCMDAwM0E5RkVBODM1NjEyNDAzOUM1RUUyOTEwRjEzMEVCQzFGMworOjEwNkRDMDAwQkE1NkYwQzc1Qjg5RUVERTI4RENDRkE4ODk0MEI3RDY3QgorOjEwNkREMDAwODNFQ0ZFMjY5MkMyREVGQjg5N0QxNURFQjczOERBMTgxOQorOjEwNkRFMDAwRTc0RkQyOEM3MUZFRTRGMjVFQTZCOEJGMzFDRURGNjcwQQorOjEwNkRGMDAwQjYzMUNFREZENzY3OENGM0Y3NUYzNERDMTRGNzM3QzZENAorOjEwNkUwMDAwRjkwN0FGMjgzM0M1RkQ4RDcxRkU4Q0ZBRTlBNkI4QkYyRQorOjEwNkUxMDAwMzFDRTlGQjNEOTE4RTdDRjBCMThFM0ZDMEJERjdBRDkzQgorOjEwNkUyMDAwMDZGQkVBMjEyRkRDNjc4QUZGMUJFM0ZEMTQyMEFEOTlFNgorOjEwNkUzMDAwQkFGQjY0OEFGNkFFMzZCNDlGMTc2MkY3OTQwRDBCQUVCOAorOjEwNkU0MDAwMzU3RUQ3QzBFRTM5RjBEM0ZGMDEzQ0JGMjAzRTFCRDBDQQorOjEwNkU1MDAwOTk0MkMyNkZGNjg3RkM5NjgwRTQwOUQyNjY4QkY3RUUwMgorOjEwNkU2MDAwMkE4MTcyMzhGNzhCMkZEQzZDQkMxRjYxNzFDMDU4RkYxMAorOjEwNkU3MDAwRUFDRkU1MDcyMTBGQUMxQTk4ODhGNjUzRkQ4MjE0MDg3MworOjEwNkU4MDAwQjgzQkM3RkJEMjE3OENERjBCM0ZFRjUyQkU5RTczRENDMworOjEwNkU5MDAwMjgzOEI3NDVDNkYzQ0M2NjNBNTlGOEQ2QURGQzVFMzExMgorOjEwNkVBMDAwQUQxNUVFOEYxMDcwMTBGNEUyRTJGNDIyRTYyNUUwQjFBOQorOjEwNkVCMDAwNTQ1RTg2N0MyRUUwMjBFRUQ3QUEzMkFEQkZDMzdBRjdBRgorOjEwNkVDMDAwNkVDNUVGQ0NFQjM2QUY2MzUzQkUzMUNFNDczQUYwODk5NworOjEwNkVEMDAwODNFNTA5RDE3NTQxOUM1Q0Y2RTc5QUY4QzQwODg3Q0UzMgorOjEwNkVFMDAwRTBENzUzQkU1MTM5MUM2MkQyOEM3QzEzQUJDNjk5RTlGMgorOjEwNkVGMDAwMEVGMTZEODY2NzdDQUU5MTlGQ0NGMDc0N0FGQTQ1QTU1MQorOjEwNkYwMDAwMkY3MTNGMkFBRTA3RTIyMTdCMjVGMkI0RDQxMUFFOEI1QworOjEwNkYxMDAwOUFENkQ3RjU4RjQyNEY4NDA0MzBDRkMzMENERkU2N0M3RQorOjEwNkYyMDAwNjNCQzY1OTdFQTZCMDFGOTc4RkVBMzBCMzJFMkQ1MTdEMworOjEwNkYzMDAwMUEwMUZBQUM4QkZDQjM4M0JDN0Q0RkUzRUQ4N0YyNzU4RAorOjEwNkY0MDAwRkUxMTczQkNGRDJDRTQ0OUVBQ0VBQjQ4RUQ3OEQzNEM3RQorOjEwNkY1MDAwNzk5MjA3RkUwRDcxMjRGQThEQ0YwNjdFRDg3MjhGOUQyRgorOjEwNkY2MDAwREQxNzY2Q0U1RkYzRkQzMzFGRjVCMDQ2RDAwRjc4OEU4OAorOjEwNkY3MDAwNzhENkQwRkVENjM4N0YzRkE0MUJCRkM4QjFGQzYyOTYzRQorOjEwNkY4MDAwNUYwMEZBNkI2QzM4NzRGRTI1RTg1RTY5NzVDMTM4RDExNAorOjEwNkY5MDAwRUUyOTM1OUQzRjNDMERERjc3NzYwRkU0RjNDNDlCNDcyOAorOjEwNkZBMDAwQTJDNEFEQzVGRTU1RDhFRDc0OUY3NDIxOUZEOTMzMTc4NworOjEwNkZCMDAwQTFCRkY2N0Q1MkJCN0RERDc1M0YyMjhGQUNCMzUyREFBNworOjEwNkZDMDAwMkZBMzVFMEQ0QjcxOUU2OEY3OThDNTBFMzFFRUZGNzVDRAorOjEwNkZEMDAwRTczRDYzODdFOEY0NjhENUY3Q0VCRjA5RjNBMEYwNzYwNAorOjEwNkZFMDAwMENBMUYzNzQzQUE5N0QyM0Y1QzhCRTcxNDEzRjRGQzU4QQorOjEwNkZGMDAwMjcyMDVEODdERjkyMDMzOTZFQjhERjRBNERFQzU1RDAwQworOjEwNzAwMDAwRjE5RTI2OTE1NzU4MDNGNzMwMjVDM0YzQkNDNEFFRjI2NgorOjEwNzAxMDAwMkZDQTRDRjc2MDk5RUYzM0FBMUJDRUU2OTVDRUQ3MzkyRAorOjEwNzAyMDAwODVEQjUxMjVCQzJFQ0VBNTA5N0Y1Q0Y1NkNFNjZGREVCNQorOjEwNzAzMDAwNjRGMjYzOTYwQzcxNjI3QjZGNjY1OTA5QUNCRkNFMkQwQQorOjEwNzA0MDAwQTFGRDU0Mjc0OTg2NzhEMkYxRkM1MjdDRUZFMUZEOTdFRgorOjEwNzA1MDAwMDBFRjE1RTNGOTNBOUM1NzhBNjkxRjdGOEVCNzNGOTc3NworOjEwNzA2MDAwQ0ZGQTg1N0JCMTgwRkU2Q0IyMUMxNTlFRDcwRDYxRjMwMworOjEwNzA3MDAwRkYzQkI3QTNCRUMzRkQzNEVGQzc4Q0VDNzgzRjhERjk1RgorOjEwNzA4MDAwRkVDNDg5QjkzNTJEMjAxRUNDNzFERkRGNzU3NzNGQ0Q2OQorOjEwNzA5MDAwRkIxM0EzQzY3RjAxQkVGMUJEMjI3NDNGNjM4OEYxOUUzRQorOjEwNzBBMDAwQzQ2MDlDNkZDMzU0RjA0N0JDMjM3QkI2RTE1N0FEMjM0QgorOjEwNzBCMDAwRjRGQkI0OEEyMUNDMkU1REM3RjcyRDEwNTdDMkZEMDgxMgorOjEwNzBDMDAwMkZDRDcwQUFFMDcwNkFDOEY0NTYwMEZENkRCMkI1REUyRgorOjEwNzBEMDAwMEZGNDFCQjRCMUZCNDJDMzFGMTAxQ0E3REYyMkFEMTk3NAorOjEwNzBFMDAwRUFDNTVFMTVDRjU3RDRCOTg5MDNFRTE5MEEwRkIzQTBDQworOjEwNzBGMDAwNUYyNEM1RTcxQTBGRjdGRUE2NkM5MTdBMDEzODg1NUMwQworOjEwNzEwMDAwQjAyQUM0RUZBNEY0QjI3Njg4MUJGMUIwOEVBQzY5ODZDNQorOjEwNzExMDAwN0I1MTEyQjc3QzRERDI3MTNGRTExQUVGMDI3OTM0OEY2NworOjEwNzEyMDAwNDRGNTczM0VDQ0U5NjNEQTMzRTkwQUVDQ0IxMkVERDFENgorOjEwNzEzMDAwRUY3OTc4Nzg4OEM4NjNGMzNFMDRGNDMxRDY3RTY0ODRBRQorOjEwNzE0MDAwODQ3QTgyRUQ0MzYwNkI4QkZGNjlCMzE4Q0UzNThCRjI4NgorOjEwNzE1MDAwQkQ4QzcxN0VGODRFRDBGM0Y1MzJBOUQ5RTU2MDc0QTZFNgorOjEwNzE2MDAwQkY3RjZERUQ5MEFCRjM0RjE3MkYyMjUxRkRBOERCRjlEOAorOjEwNzE3MDAwQkE3MjU0NkYwM0MwQkRGODdEMTVFMzFGMEI4NURDOUYwOQorOjEwNzE4MDAwNjcyMTcwQ0ZFOUVEOUMxQzZGREZDMkYyRTFDOUU1MkJFRQorOjEwNzE5MDAwNTc2NDYxQzcxM0VDOUY0MDNDNjJFMTMyNjcwMEUyMTMyMQorOjEwNzFBMDAwMEI5QkRDNzhGRjFGNTkyNDYxRENBNEJBRTk5MDE3RUEzNQorOjEwNzFCMDAwMEI0NzhFNzRBMUJDOEM5NzI0QjgwNzEyNEMwODI2MUY2RAorOjEwNzFDMDAwMTU3MjVDRDA5RkNDODE0NEZCOUZDREY1MERENTJCRUI4OAorOjEwNzFEMDAwRTJFOUJBMTY2RUQ5REEwQ0U3MkNGRTQxMEQwOEMwRkZDMQorOjEwNzFFMDAwMjY3RTZFREVCQzJFNzEzRjVERTRGRUJDNEYzNkU5RUZCRAorOjEwNzFGMDAwRTdCNkFDRkFDNzA3QzZGQkYzRkVGMUMxN0Y3MzdGREVDQgorOjEwNzIwMDAwQkVERkZDRTMwM0I4OUZEQjdDN0Y5RUUwRkI4RjY0REY4NworOjEwNzIxMDAwNDcwRkQzN0ZERjQ2OTVGMjhBRTE1MDJBNjQwRUUyMjlCOAorOjEwNzIyMDAwMERENzM5ODNBRkQzRkYwRDkxOEVEQjIzNzBCOUFERTk1NAorOjEwNzIzMDAwMkQ4NEY3NDc1NjNBMUU2NTFFNkIxOTAzOERGNUExNDQ0MAorOjEwNzI0MDAwOEMyRjhCN0NBNDk5RjY4NjA5QTBEN0NGREFDMjg1NzBFMworOjEwNzI1MDAwNUVFQ0VDNkIxRjBFODRCQzgzNEY3Rjc4REUwOTc5MDhFRgorOjEwNzI2MDAwRkY1NEMyNEU3ODdFRTI5MUY3OUMxQUM1RUZBNzhGQjAwQgorOjEwNzI3MDAwN0JCNkVFRTZGQTUyQzBFRDFGOUMxRTBBMEJCQzg3ODE1RQorOjEwNzI4MDAwMUVFRTU5Rjk2RDg5RkVCRTIwQjIyMjE1RjVEQ0UyODBCMgorOjEwNzI5MDAwOEMyOTJDNDI4RTJDN0QyMTFFMkNCOUY2RkFGMjlEQzkyOAorOjEwNzJBMDAwODZCQUQwN0ZDQjYzNDg0RDM0QkZBOEFCODBGMUNERTIyNgorOjEwNzJCMDAwMUQ1QjZERkQ1NTE4REZENzA2RTM5RjgwQzQ2OTRBMzcxMworOjEwNzJDMDAwMjdGNjM4RDE0RTE2RjNBOURDMzFDQzA2NzZENTNGOUI5NAorOjEwNzJEMDAwNjI0ODEwRjY2QjRBQUI5NTlEMzdENUE2NDg5NDVFN0QwMworOjEwNzJFMDAwOUMyRUNERjM3Q0YzRjU3OEVDNkZGRTI2MjY2RjJCRTgxMQorOjEwNzJGMDAwNTgyQjI4NUM3RDRERUNCRTRGRjMzQUU2N0ZBQTRFRUM0RQorOjEwNzMwMDAwNDNFMTNERkY3MTZBQzFBOEFDRkQyMzE0NkZCRTE1M0Y3OAorOjEwNzMxMDAwQzJGQzcxRjMzQTJCRkNFNkZCM0QzNTk0RjcwQjM5N0U0QQorOjEwNzMyMDAwRTdENjFCREYyRjZDRkEzMUY2MzM4RkE4RUIyMDRGNzJCNAorOjEwNzMzMDAwN0U4M0Y5RkRBNDJGODA0ODE3OUFGMkQxNkQwNTVDMUU1QgorOjEwNzM0MDAwOTc5MDUxMjA4RkY3REIzMzEyQTM5RDNCMTVFNUE5OTU0QworOjEwNzM1MDAwMkU2NEEyMkY1N0RBQjEzQ0IxOTI2MDc5Nzg4ODhBNzA5NgorOjEwNzM2MDAwNUZENjc0RTg0MUEwOUZBQUJEQkJGMDFFQTY5NkMwODQ1QworOjEwNzM3MDAwMTQ0QUQ2RTRDNkE2REJGMUZFREExQjc5RENGQ0FFOEUzRAorOjEwNzM4MDAwRjc4QkE2MTUxNDQzRkU5MUU5QkMzNzVGRjcxQzhFMDdGNworOjEwNzM5MDAwNzFGRTdCMEVBQ0I3MTA5RTJCMTdGNEVCMzk3NzMwQzMyMAorOjEwNzNBMDAwMDFFM0JBQzVCQTQ2RDE3NUM5M0Q1Rjk3NTg4RjU4OUY1QQorOjEwNzNCMDAwNzhCRjlDQ0FDRkE4RjE3MDRFRTc4N0I5QkM5RUQ3Mzg3QQorOjEwNzNDMDAwQURBRTFGMDVDNTlBRDdCRTQwRkYwMEUxRkI5MkY2RkJBQworOjEwNzNEMDAwOTFFRDNGNkU4NTc5OEYyN0E2N0Q4OTlGQkM0Rjc0RjQxMAorOjEwNzNFMDAwQjY5MDY4NzgzRkFDOTlBRTA0OUVBOURFQzZFRkVEN0NGRQorOjEwNzNGMDAwREZEMjRFNEY0RDNGNDFCODA4N0NDMzBEODJGQTdCQTlDNgorOjEwNzQwMDAwMjg1RDE5RjYwOTk0OEUwQ0Y1RjkwREM2RkExOTZCNjgwQQorOjEwNzQxMDAwMTBGMEZCNDJEM0VGNDU5QzMxRTVEMzg4RDI1MzkwQ0U5OAorOjEwNzQyMDAwRTBBMDZBMTNFMURDRDA3Q0UyQUQ2Mzc5QzdFQ0RDRTE3QgorOjEwNzQzMDAwMDlBNUUxQ0Q4NzgxMEYxQjE5MUZGQzkzRTM3RjY3ODFBRAorOjEwNzQ0MDAwNzcxNkUwOUYyODVBMjFERTE3QjlCQUFGMEMxNzFGNTdERAorOjEwNzQ1MDAwQUM5MzVDQzA1RjczNkI4N0UxRkQ0M0MzODk4NkZEREQ0MAorOjEwNzQ2MDAwRDU4OURERjkxMEU3RkZDQTFBMkJCMTUxNjNBMTkyOEVCRAorOjEwNzQ3MDAwMDE3MkFFNzI4RjJDRUVGQjcyNENFRDBERjdENzMwM0VFMQorOjEwNzQ4MDAwNUFGRUY4MkU1QjVGNUEyRUFBNTlDOEVDQTEwMEUzMUJFNgorOjEwNzQ5MDAwNzFBRkI2QTAzRkExOUY5NkFDNkI0NkJGMDNERDZGMTlERAorOjEwNzRBMDAwRjhBQjFBQ0U4MTE0MDIxRjlCOUVEN0RDODg3OEE4MzZEMQorOjEwNzRCMDAwRDk0NURGMkJFMEZCMzMwRkYxMDA3REZBMUU3NERBRTFEMgorOjEwNzRDMDAwMUM1OTc3RUIyNjFERkQ0OUU4NkYzQTc3MzAwQkVERTU0NworOjEwNzREMDAwNzNBQURBMDdEQUY5MTJEODNERkU5MkUyMUIwNUNGMjkyQQorOjEwNzRFMDAwQkM1MDhGODY1N0M1RTNCREM2NDcyRUM5NDRDNUZCNTU2MgorOjEwNzRGMDAwN0NBM0UwQkM3RkU4RUYwMzA5QkJBRjhERDFBQjU4NkYzNQorOjEwNzUwMDAwQjU3RDFERUVBM0FCNERGNDVBNDEzNzZDRTAyN0FFRDhFNAorOjEwNzUxMDAwOUU4Qzc5NkFCNEZGQzJCRDYwNUY2REI3QTJGREU0Mjc5RgorOjEwNzUyMDAwRjdBNUMxQkQxQURFQzdEOEJEQkM5NTdCOTM3MDFGNUZBMAorOjEwNzUzMDAwNTlDQkUyNEI5NTNCOTJGMDlDMzBERDQ3QkYwRkZFMTlEMworOjEwNzU0MDAwODE4RjIzQjVFMzZDN0QxMTVGNkVCQzJGOENFQ0I1RkE5NworOjEwNzU1MDAwRjkzREU3NDhFNzAyNEYxREY3QzEyNjNDRDUzN0JGOTlGMworOjEwNzU2MDAwQTY3NkRDMTdFQkYwRDRENjA5OUUwQ0Y3NThGRTVBQzg2NQorOjEwNzU3MDAwMTE4RTI3RjIwODk3M0ZGN0JFOTEwNTcxQjU3MzM1QjFBQgorOjEwNzU4MDAwMUUzOUNBRkVBQUZEM0VFMzc5RDc2MjNFOURGMDNGOTZDMgorOjEwNzU5MDAwRjcxM0JGQUZFMEU5MEQ3ODNEQkZBRTE4RjE2NkM2NTdFRgorOjEwNzVBMDAwRjk3RkU2MjI1RUM4REY5RDA0RkNEMjc3NjU5MDdCQTY1QQorOjEwNzVCMDAwRDNFN0Y3NDg4QzVGRUU1QTMzQTkxQ0Y0Rjk4MTAyNjZEMQorOjEwNzVDMDAwMUZGRjk1Q0EyRDJEODc5MDQzNTQ2RTY5NTQ2RUJENDc5OQorOjEwNzVEMDAwRTUxOUQ0M0Y1ODk5ODZGNTBGNTdBQTU4N0VCQzMyMTc0MworOjEwNzVFMDAwQ0IzNjZFMTcwQTNFQTI4NDYwMDNCQkYyQUQwMjY2RUY5MworOjEwNzVGMDAwQkM1NTIwRkNDMTBGQTQ4MTY5NTFGRTlGRjc4QTJERTA4NAorOjEwNzYwMDAwRUFGNUNGOUYzOTgxREEzQkI3Njg0NjdEMzg3Qjg2NTFGMgorOjEwNzYxMDAwREY4NUFDQUU4OTcwN0VEOUZGMzhCQjE3QUVEMjdCOURCQgorOjEwNzYyMDAwQTEzRDUxNTREQjM0RDhEN0U3OEU4ODNDNDc3RTUzNkQ1QgorOjEwNzYzMDAwNzBGRUZFRjYyOUM5ODZGNjMzRUJGQjFCRUE0NzBBNTRCNworOjEwNzY0MDAwNzY0RjUwNzk4NkUxRjkxRDczODYxOEVBMTVGQ0RFNUJFQQorOjEwNzY1MDAwQTI4RTQ2QkU3OTgwRTdDOTEyMzI5QUUxODVFN0RGNUNFNworOjEwNzY2MDAwQTgxOUQ1RTdGQjc0QkUxN0RFQjZFMjdCMzMzRTA0NUU5NQorOjEwNzY3MDAwRTc2RDk2ODk4RkY2Mzc3NzMzOTU1Rjc0OEE2RDBEMTRCMQorOjEwNzY4MDAwNEZGNEJCQUYzRTcyQzI1OTE5NTJCNzYzQzRCQkEzNjk3MgorOjEwNzY5MDAwRkRDODBFOTZBRjdCQTQzNkY5QTc2MDNGMUREOTkxOUExRAorOjEwNzZBMDAwMDA3RTYzNUY5RENDRUQwQzE3REVGNzI2RkExRDU3QkJGRAorOjEwNzZCMDAwMEFGMzcyMkEwMjMxNzhFRUEyQTJDNUZGQUNBOEMzNEYyQQorOjEwNzZDMDAwMkVBMDg5MDc3Q0YzQkUxQzA4NEE4ODNGRTZGN0Y4NzVCMAorOjEwNzZEMDAwMENDNjJENEU1MEJCQ0U0NUY1QzQwOTg5RDQ0MjA5MDdDRQorOjEwNzZFMDAwQzUxMkU5RkI3RkI1QTYwNjgwQUZDQkZGMjM2QjY5NDBDRgorOjEwNzZGMDAwNEZCRjhFRTU3MTI5MDlGQkZCRjI1MEQ2QjZCNTQ4NUY0NgorOjEwNzcwMDAwRUFDRTIwRjI2RjBDRUU4RkU2ODZEOEZBODgzNEJDM0ZDMgorOjEwNzcxMDAwRTBGRjQ0MTJEMTkyRTgyNDk2REZGN0UxNjcwQUM1RDM2RgorOjEwNzcyMDAwRTJFQ0Q2NDJCODE3Njc4RTNCOTgzQThCN0U3N0FBRDFBNworOjEwNzczMDAwQ0FFRUU5QTdGREJBNjg3REY5NkY2MkY4RkQ4RjVBMUY5RQorOjEwNzc0MDAwRDg2RjQ0RTAxOTI4ODQ3NUE3RjZGM0E2MEVBNUZDRjFCRQorOjEwNzc1MDAwRTU4MjQwMjFDQUI1NDc1MjkxQUZDQzcwNkZCM0Y5MTBBMgorOjEwNzc2MDAwQkU3RUUwMDMyOTIyMjcyMzdDQzZFMjhENTRCOEY1MDVBRQorOjEwNzc3MDAwNzkzM0Q3RUFFOTBERkFBQTZEOUQ5NUREOEZBNzY4MDlERgorOjEwNzc4MDAwRUNGRUM5REQ0OEM3NkQ4QTNBMTFENkRENTZFRkM2RkI1RgorOjEwNzc5MDAwODNDNEI4OTVFQjY0OERERDVGNDlFOTEyREFBRjk3N0Q1QworOjEwNzdBMDAwNzBERjhGRDA1QkZFN0FDOTA3RjcwMjk5RTlFNkZFN0JBRQorOjEwNzdCMDAwNDc2MTlFQkZEOUZFMTVFNTE5Q0FBQjNFOUQxREIxRTREOAorOjEwNzdDMDAwMzUxOTdGRDc4MzhDMEMyOTMzMENGNzgzQjFERjNGMjEyOAorOjEwNzdEMDAwQkVEMTg2RkNEQjY1RTk3RkZBQ0M2MTQxQkIyNjExRjZBMAorOjEwNzdFMDAwNDUyN0RGOTc5MUNFNEVBNjM3OTRBNDY1NDAzQUNERkU0QgorOjEwNzdGMDAwOTJFRkQzRkE1NzUzRkRDN0UxMUNGMTNEODM3RDY1MDAzRAorOjEwNzgwMDAwRDdBNTk2NzVDRjRBMTYzODc3N0RFQ0E3NzBDRkVFOTczRgorOjEwNzgxMDAwMkY1QTNEMzBFQzkyNUYyRjFFOEM3MTA5NkU3Rjc3OTQ0QQorOjEwNzgyMDAwNUI5QUIwMTc3QUMzM0Q1MTE1QUEwQkY1Qjg1QTJCMTFDNAorOjEwNzgzMDAwQjZGRTAwQ0VGMzRFQjJGMzMxQzA5QjZCMTk3QjdFQUMyQgorOjEwNzg0MDAwRDhCOTE2RkMwMzczNERFN0Q4OEVGMTdCM0E2NjBDNjUwOAorOjEwNzg1MDAwRjI0NEU4RkIwRDQzOTlERDM0RDdDMkU4OUFCQzJFQjE1RgorOjEwNzg2MDAwN0JCNEY4RUY1RjA4N0QyMEU0QjU5MEZCRjM4NjMyRkIzNAorOjEwNzg3MDAwNDJDODZCNkEzOUEwREM1QTAwQjc0N0QxNzUyRTdCMjEwQworOjEwNzg4MDAwODZGOUQzNTVFMjAyMzgyRTY2NjgyMjVCODczMjc5QjFEOQorOjEwNzg5MDAwQzRGNkUyOTNDMDRCMEI0OTJCRUFEMzJGQUQ4MTA1QUQ2MworOjEwNzhBMDAwNkVGODdFNkI2RDJGRkNERUVBNDFGRjMyRDcyRjcwQ0Q3NAorOjEwNzhCMDAwM0ZDOEE1ODU5Q0ZGOTYzNzQ4NzgxRjE0RTE3QTcyM0UzMQorOjEwNzhDMDAwRUY5RkJDNjA4REU4OERGNDI4RkFDNUE0NTdFNjczQkQyMAorOjEwNzhEMDAwM0E5Rjk4RUNDMDA2QTNCRUYzQzZCM0NERkUxMjNBMkU3MworOjEwNzhFMDAwRThDRkM4QkNBOEZENEM2MUI3QzAxNzc4RjM2NjlDQjc1OQorOjEwNzhGMDAwRTQwOTQ0OTlDNzQyMTIwRUMyQkQ1OENCNzczMDdGQkQxMAorOjEwNzkwMDAwNzk1RUU2NzVGNDc0OUUwQjNDRDNDNjI3OERENDhENkJERgorOjEwNzkxMDAwOUFCNzgwMzczQUI4NzU3ODEwNzA1RkUwNjdGMDVDRDAzRQorOjEwNzkyMDAwQzRFMjFGOUY3MzdCNERDNDZCQ0NGODVGNDhCQzM3NDNFOAorOjEwNzkzMDAwM0VFMkMyOEQ1NDdFQkEyM0Y0MjBFODYwRjFBRTAwQzY2OAorOjEwNzk0MDAwNjdCRTIyMEQwOTBFQ0EwN0NCMzZFRjlBNzk4RDBBRkI2NgorOjEwNzk1MDAwRkM0M0I4MEY5OUQzMkI5ODY1NDkyMjI0RDk3RkU4QzlGNQorOjEwNzk2MDAwRjI4MUREQzcyN0ZFNTc3MDIyRkM3RTcxRkM4RUMyNjU1NgorOjEwNzk3MDAwN0UyM0JCM0Y1Q0Q3OEVFN0RERkI5MUFFMTdGOUZEMzY2QQorOjEwNzk4MDAwRjBERjJFRTJGRUQwRUVFNjU5QURCMDczRkVERENGOTcwQworOjEwNzk5MDAwQzFGMTdGM0RFRjc3ODc3NjY2MUY2NTQ1REQ2RkI1REIwQgorOjEwNzlBMDAwNDVEREU4RTM0RkFDQzE4MUEwOEZDMzAzMTVENDQ3MTc3MQorOjEwNzlCMDAwMTRDRjg3QTUyOUEwOUZCMzcwREZEMDk5QkM1REMwRjUxNworOjEwNzlDMDAwRjI3Q0QwRDNCNDNDQkVGOTY1QkNFN0U5RjM4RDJGNjNGQworOjEwNzlEMDAwM0NEOEY2RTJGQzA0QjA5NzhGNkY5RUZCNTMzODA3NzFEQQorOjEwNzlFMDAwN0NDNzVDRDRDQjBCOUYxNjdBRDk2N0QzRUJGQjcxOUIxQQorOjEwNzlGMDAwMkI5RUZCMjFEMEU5MEJCMTE4Qzc1OEQwRTJFM0Y2MzgzMworOjEwN0EwMDAwRERENzgwNUNBNEUzQTE5RUQ4QzhFNEUwNDJEMDVGMDU0NgorOjEwN0ExMDAwQThCRjcyQTBERDgzMEI3QzM5NDBFRkJBRTdBOEQ3MUU2MAorOjEwN0EyMDAwOUNFQjFCODVERjEzNTc5MEREQjNFQTBBODJGRTEyRkE0NgorOjEwN0EzMDAwNTVFOERENTdGQkZBMkUwRjA1M0U5MkRGRkVFMDA3NzQ5NgorOjEwN0E0MDAwRkRBNzc3Q0JFOEQzNTkyRTZGMUQwNEJGMEZEMzk5MUMyOAorOjEwN0E1MDAwRkZFRUYwQjZCNEMzREJERDAzNzg1NzAyQkNEMTFFNjI4MworOjEwN0E2MDAwRjAzRTVBQ0ZFMDdDNkMxRDgzN0JERDhFOEMwNEQ4MDcwMgorOjEwN0E3MDAwMUZBRENGNDAzQkU4RTg4RTJDODRGN0JDQjUxNERFNjgyMAorOjEwN0E4MDAwMDdBQjQ2M0JBODlFQzIxQkVDN0Y4MDM3MURCN0IyNDVCMworOjEwN0E5MDAwRTVGMEY2MzA3OEQ3NzMzREI0OEU5NUYzM0FDMEQ1N0ZENAorOjEwN0FBMDAwMzdDODk1MDc3RjE5RTNDMUZCQkE2MzgzQTlCMDRGMzk4MworOjEwN0FCMDAwQjE0QjI2OTBBN0QxNkUyNzcxN0I0NkMwRjk1RkE0RTEzOAorOjEwN0FDMDAwNTlCMEFCM0FEODM3RUI2MzA4Rjg3MzE3RkZDRTg5RTdBNAorOjEwN0FEMDAwQTRCRTk0NEFGQjAwMDI0RTM1RkMyOTAxQzY4QjhDREYwNAorOjEwN0FFMDAwNkVENzc4MEE4Qjc1NzY0RDBGRjE1MzQ1QkM3ODhFQTExMQorOjEwN0FGMDAwQUFFOTRGMUY4MTVEMEZENzJDQzFCRUJGNEFEQzhGQjFGMQorOjEwN0IwMDAwRDc3ODNGODZBNDgyNENDM0YzQjI3NjNCRDBDMTAwRjM1MgorOjEwN0IxMDAwRkQyMTNFRkNCRDlDOEI1OTVGREY3RDFGRjI3MzM4NUJGRQorOjEwN0IyMDAwRUY1N0FGOEUwQjVBQzExRjE1REUyNTIxQkU5NzNGNTA3MAorOjEwN0IzMDAwOUE1MDRBMjAwRTU3ODNGMzk4NUFDOEY0QjNBNDY5RThDMAorOjEwN0I0MDAwNjc4Q0ExNzQxMzQ3QzdGM0MyNjVDMkYwNUM3NTMxQkY3RgorOjEwN0I1MDAwRTMxNjNBQUUzMzMyNUZGM0YzOUI0MTEwODE3RTc3NDRGNAorOjEwN0I2MDAwRjc1M0ZGOTA4RkIzNUNCNkUwM0U2NDk5OERFRDQ3NDRDOAorOjEwN0I3MDAwM0VDQzVEODVDQzZFQjhBQjkwRUQ0QkU2MTZCMjdDOTNGNworOjEwN0I4MDAwQjM5MDNDNDVGQjNEN0I3RDBDQ0ZFRjFFOEZGRTRGNzFDQworOjEwN0I5MDAwM0Y4MjIyRTBFNjUyQ0UxODdFNjc0MjA5RTNFRkMwN0NDNgorOjEwN0JBMDAwNzZFRDIxQkM3RkY3MzNGODE2OEQ2QjhBODAxMkIwNkJBRgorOjEwN0JCMDAwRDhGN0VGNUFEOUJEMkU3NzhFRkUxM0ZBNEQzRjhCRjVDRAorOjEwN0JDMDAwQUE2MDdGN0Q5NjZBRjcwMDFERjlFMTFFM0M0QTdGM0Y1RgorOjEwN0JEMDAwOEE2M0ZFNzI5MjkyQTgwMDdGRERDMUU1RUQ1RDYzNjI2QgorOjEwN0JFMDAwMzREMDRCNzc4RUY5OTExNzRBM0E4RTFGODIxNjc1QTVCRAorOjEwN0JGMDAwMDcxRTAzM0FCQTI3RUREOEY3RUM3NDQ5QUIyQ0NDNkVDQworOjEwN0MwMDAwNTlENThCNjAxRTUxMTEzNURGQzE2RjRCNUZFREI5OTJCNQorOjEwN0MxMDAwREMxNUREMThGRERDQ0JDMDlGN0IyRDYxMDQzNTFBRTEzRQorOjEwN0MyMDAwNjlBODUzQjg2MjdEQzM0QkE1QjMzNjBFMjBFNDMwNTEyQQorOjEwN0MzMDAwODcwMjlFOTcwMTRDODAwRTJBMTJEMTJGNzAwQkY4OTU2NworOjEwN0M0MDAwN0I0MUE5MjA3RDRENTc4OERGQzJDQTdBMDdERUZCQzE4MAorOjEwN0M1MDAwRkNDQzM3RjM3NURFMzY5QTA0MTNFOUZBODI2RjExODM5MAorOjEwN0M2MDAwMUY3RTU2RDAxMkNDQTE3MEJCNDUwOTM2MDNGQzJDNzY4MgorOjEwN0M3MDAwRDUwQUZCMDI2RkI5MzQxQ0Y2Q0JDQjU2Rjc2Q0JFQkZFRQorOjEwN0M4MDAwN0E2OUNBQUM4RDYzNjhEREMyRjIxQ0MyM0Y5MEYwOUU3NworOjEwN0M5MDAwOTYzQjI5NzMwMzVEREVBRDkwMTY3OTM4QzMxQkQwNUQyQQorOjEwN0NBMDAwNzUyRjc2MUY3OUY4NUU4OUM3OTM5OEZGNUZFMDY1MTg5NgorOjEwN0NCMDAwRUQ1RTBGREYzQkY5RkM2ODNGRjUwOUYwQkQyREJBNUZDMworOjEwN0NDMDAwNjkzN0E3NTM2MTZGMkVFNTdDQkE1NEQwRDkwRTIzN0Y1NAorOjEwN0NEMDAwMUUxNjdDMDJGNjJEODVEQjlEQkNFQzhDQ0VGRkNBRkIwQworOjEwN0NFMDAwRkY2QjIxRjM1RkJENzY5NUUzMkQ4RjIxNDFGREVGNTZBQworOjEwN0NGMDAwODk3MTZGRTFFNTNCODVDQzZFMTZGMzEwRjQ0QkI4NUZFQworOjEwN0QwMDAwQ0E0MjI1MDZEMDUxNUJDMzFBQjQ5NzE2OTlGQ0M0NDRFNQorOjEwN0QxMDAwRUZCRjkyQTNENURCRTU4RUU1MEE5NEI2RjAzQzk4OEZEMQorOjEwN0QyMDAwNzQ0MzJDRjJDQjlEQjY5RDU5RUM5RTE5NjNCQkU1MERCNworOjEwN0QzMDAwOENGRTk3M0JFQzY4MDc4QUZCQzVDNTNFNDBEODhEOEIwRgorOjEwN0Q0MDAwQzFERTAzN0JCRjkxRDlCNzBBQjdDQjJCRTg3RTBEODg4NAorOjEwN0Q1MDAwQ0U0QTQyQjVGRDYxREY1Q0FGQjM3RjUxOUU3MTdGQ0ZFQworOjEwN0Q2MDAwOUU2MTNFMThFNzRFODcxREUzOUYzNzJGMzNEQTRCNTY0RgorOjEwN0Q3MDAwNkU0NzVBM0JGRUZFOUQzMUFGODREQjRCRTZCQzEyOTk0OQorOjEwN0Q4MDAwRjMzMTZEQ0JGNjMxM0NBRjQ0RTFGNkIwQTBBMzBGMEI1RAorOjEwN0Q5MDAwQUREQ0FGRTIzN0M0RjFFNzkwNTYyQkJGNzc4RUY5RjczMQorOjEwN0RBMDAwQjg5RTlFMjAzQkYwM0U4NjM5MTJCQjY3RUI2Q0E5RDM5MAorOjEwN0RCMDAwNkZBMTcyRTkxMzdFQ0ZDREI5MUE3NkNFNzlDRTBGRDhFNgorOjEwN0RDMDAwMzlERUJCMTIxRkJDMTlFQ0UyMzkwOTM2MDVDQTRGRjg3RgorOjEwN0REMDAwRUY3RDdERUE0QTRGOUM0NTQwRkVDODNDRUVGNDkzNTk0NgorOjEwN0RFMDAwMTBCRjU5MDM3Mjk0RDU5RkQyQzZBMDE3OERENzlGRjhBNAorOjEwN0RGMDAwMTBERUNGQjg0Q0U3OERGNTBEQjMzNDNBREVEOTM3Rjg0NQorOjEwN0UwMDAwN0IzRkFENDM3Q0U4MzFDMUM3OUI1OTdEOTM3OEJGODVFQgorOjEwN0UxMDAwRDUxRjE3RUZCN0IyRkE0RjQ0RkZCQ0JFREVGNDdFOTUxNAorOjEwN0UyMDAwRTlGRENGNTk3RDcwRDFENjU5N0VCMEUzNzlEQzZBQ0VCOQorOjEwN0UzMDAwQjUxMkM2QUQzNEUwMzMwQUNGMzlBQjgzNDg1RjczMkMzQgorOjEwN0U0MDAwRkI1OTU5NDY4MjEwQjdFQ0FFRERFNDIyQUYwNkZBNUE3MAorOjEwN0U1MDAwNzZCNjM5QzE1RTk5MzE0Q0MzN0FGRTUwNUY3RTExQzU0QQorOjEwN0U2MDAwQ0Y5MjY5OTJERjA2RjFDQkY3MDNEOTVDOUY0NUNGQzc2QworOjEwN0U3MDAwRTdGQTY5OTI4N0Y1MjdFQzVGREFDRjg4QTJFMkFCRUZFOQorOjEwN0U4MDAwRTdBM0EyMEVGRDhDRjkyRUZEMzQ3NjlDQ0Y4NEVGQjJEMQorOjEwN0U5MDAwQUVEODYxQzY3RTg0M0RCODZEQjhFNjgzNzk5MUYxRDdERQorOjEwN0VBMDAwMTlGQzlDNEIxRkY1MjQ4MjNENDlERTY1QkZCQkI1NzRCMAorOjEwN0VCMDAwRjVDRTQxMjM2OEZGNEI1RkRBMzc2ODgxQ0VGRjUwNzVGRQorOjEwN0VDMDAwNDkyNjFBOTVDM0Q1OTcyNDJDQkY2QUZFRDgwNkY3NEJDRQorOjEwN0VEMDAwNTRFRDY5QjY0RDJDODBERjBCNkFCNjhERDNDRDZCOTkwRQorOjEwN0VFMDAwQzgzMzI2MjE2NUJBQ0U5RTk5NUY2NEUxN0NDNTdFNzc1MgorOjEwN0VGMDAwNjhFOTRCMjczMUZFQkNENEIyRjNGOEQzQzA5N0Q3MzIzMAorOjEwN0YwMDAwM0ZBNDc5N0Q1M0Y5Nzc5RjQxN0U0MTk0RkRDQUQyMjJFNworOjEwN0YxMDAwMjY4NzlGMUVBOTJEMDFCODREMDE5OEQxRjZFM0Q2NDRCRQorOjEwN0YyMDAwQ0ZEM0Q4QzNGQjlCMTNDN0U0RkJEQzEyQTc1RDJEODIyNAorOjEwN0YzMDAwNzhCODZGMEQ5Q0ZGNUJCMEM1M0QxQ0ZDREE1Mzg3OTY4QgorOjEwN0Y0MDAwM0Q1MEQ0QTU3RjM4Q0NGQ0MzNERDQzNGM0NBNzU3RUI2QworOjEwN0Y1MDAwMDM1NDc5OTFERkZFMzZGODE0RENGQjNDRjkyOUQyMUU3QworOjEwN0Y2MDAwNEYwNkJGMkIxRTg3NDdCRUZCNzBENkY4MzFFOEVGQzMyNAorOjEwN0Y3MDAwRkExMzQ1ODc5RTgyRjNERjA3RjlFRjMxREMzNTZBNjgzMworOjEwN0Y4MDAwMUNDODg1OTAzQkRFRTJBMkZDM0NBM0EwRTJCNzgwQkYwOAorOjEwN0Y5MDAwQkI0NjVEM0YxMTlFOTdDNjM4QjMyQjU4OUMwMUU5NjJFMgorOjEwN0ZBMDAwNDY4MTc3MkRCQzg3RjZFMERGRjFEOTk4QkZDRkY3NjcyMAorOjEwN0ZCMDAwMTlGRDdEQkVDMjc4NUZCNEZDODU3QTBFODdERjE2QjFFRAorOjEwN0ZDMDAwRjMxQjA3MkQ3NDlFQzMyM0YzMTBFMzUzMDNFRDgxNTY3NworOjEwN0ZEMDAwREE1RkRCRUFCRUMzRTA5Q0U1Q0U4MkQyOTc5MDlFRjhFMgorOjEwN0ZFMDAwRjgzQjBCN0NCRkQwOEYwRjE0MDlDRjdCM0E4RkNENDU2OAorOjEwN0ZGMDAwNEM5RkJFQzRGMUU2MUQ0M0U5NEQyN0Y3QTc4RjhGMzc4RAorOjEwODAwMDAwRDQ2NzRDNDkyNjlBREVFRjNDQTNCRkExM0U3QjRFODY0NworOjEwODAxMDAwQTFGRDFERjM4NjE4REU0RjhENjkxRDU5NzMxNTc2N0ZGRQorOjEwODAyMDAwQjVEMzE5MDdGOTExOUYzNkZERUI2Rjc3ODIzRERCMjgzOQorOjEwODAzMDAwRTNFRjE3MkQ3RTZERkJERkUwRjdCQ0NFRDEwNTI3QTM2NAorOjEwODA0MDAwN0RBQUEyRkZFRkNCODNFQzc3NTg4OUEyMjlGQTM4RDYxNAorOjEwODA1MDAwNjlEMkZBMjRDNDdENzVGMTkxQThGMTYzMTExRjU5RUEyMAorOjEwODA2MDAwNkFDMTNDQ0RGRjM2OEVGNTZFMTE4RjYzMEQ4N0Q0NzVENgorOjEwODA3MDAwRDA0NzFGMEM4MjNDOTUyQTA3NUJEN0U5N0Q0N0YwRjc3NAorOjEwODA4MDAwNEMyMENGRTM0QTA5QzQ3RjA5MUE4OUQ1OTc1NkUxRUZGRQorOjEwODA5MDAwQzg4REUzQkYyNzVENURDNEU0NzNENTgwN0IxNUI4Qjc5OQorOjEwODBBMDAwQTA5QTk2MjBGRjI3NTIzOTk1NDhFOUE0QjU5OTBDREQ4RQorOjEwODBCMDAwMDM3OURCNkUyN0U2RDUyQ0JGNzQyQkZBRjUwRkM2RjlEMgorOjEwODBDMDAwMEJFRUE1RUQ5NkQ2NEZDMjdBRDVBNTc4RUNGN0FGNzIzOAorOjEwODBEMDAwRUI0NENDQ0Y3RjQ1QzJGOEM5RDRGRTc3QUQ4NkY5NDNENworOjEwODBFMDAwRkJGQkU5Nzg1MzdGN0I2MzM5QzBBOTZBMEZDQkJGOTk0QgorOjEwODBGMDAwMkExRjFFMDlGRDJDNkI5ODg0REY0Rjk1Qzk0MTg5REEzMAorOjEwODEwMDAwNDk4OTk3RUVDNDdFQTc4MjhENDNFQjcyODk3MzJERTg2RgorOjEwODExMDAwNUREOTE2Q0NGRTA1QzgxNTlCMTNFNTRBRjVBNTU4RkM5QworOjEwODEyMDAwNkVGMjM4QTY5RjJGMTZCMTdEOEIzNUM0RTYzNUUxRDJBRAorOjEwODEzMDAwMzQ3QzJGRjA3RkI5MjhERDcwOUVENDlBREFBOEMwN0RGOAorOjEwODE0MDAwQURENjkwODRFRDZGQkEzNDA0NEJCMUNFM0ZFN0ZFMTI0QQorOjEwODE1MDAwN0Y5RkNDOUE3QTYxMjJFNERGRkUzOTQ1NzJBMUQ5NjUwRQorOjEwODE2MDAwOTJCQkU3NkI0NjI1RUFGN0QzRkYwRjc2MkJEMDk3MDAzQgorOjEwODE3MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0Q3OAorOjEwODE4MDAwMEI3ODU0RDVCNUYwM0U3M0NFQkM5Mjk5QzlFNEM5ODQzRQorOjEwODE5MDAwMjQ3MDAyNDkwODEwNjAzMjc5MTA0MjIwOTMxMDEwOTEyNworOjEwODFBMDAwQzAwMDU1MDkwNjE5OTA0NzQwMUUyMUJFRTI5NUZCNjdBNQorOjEwODFCMDAwNDIxMjA4ODIxNkI1QkY0NTQ1M0EyMDVBQjRCNjM3MjI1NgorOjEwODFDMDAwNTZEQTIyNEUwMDZEQUNGRTM2NkExRjc4NkI2RDUwMkY2QQorOjEwODFEMDAwODI0NThERTBCNUY0MTZFNUFFQjVGNkQ5OTkzOTQzODJGRQorOjEwODFFMDAwRDBERUZFRkYxRjNFQkU5RDc1RjYzRUZCQjFENkRBRUIzQworOjEwODFGMDAwQjVENzNFQjk3ODExN0VDQTE5QkJBODk1RTZGMzMyRjMxQworOjEwODIwMDAwMjYzMjc2RDM3OTg5NzkwQjE4RkIzQURGOUJFMDRFNjZFQworOjEwODIxMDAwNkNENjg2MUVDNTkyQzQxOEIzNTk5QzRGNjYwMjVDOTJGOAorOjEwODIyMDAwQUYyRUNGMEJCRjI3MUZBOTYxRUExODc4M0ZBOUQ3RTg2NworOjEwODIzMDAwQjVDMUZCNTA0RUIxODVFQjE3MzFFNkVEMDA5OEIxMUU4QworOjEwODI0MDAwNjVBRTNERkNEQ0U1MzYzMDk2OENDRjlCMTkyQjgyN0VFQgorOjEwODI1MDAwRkJEQUZEOENCMTE0QzY2RTc2MzJGRUQzMDg4RDUyMTk0RQorOjEwODI2MDAwMzM2QUVEQzVGQkREMTJENEMxQkMwMjJGOTg4MzRGQzIyNworOjEwODI3MDAwRUYyOTFFRkY2ODM3RjREMzVEQzFFNkVGQzc3RTk0RUVBOQorOjEwODI4MDAwMjE3M0VDRkY3M0YzQUY5Njk5NDU0QUEwNzU3ODcxRENDMgorOjEwODI5MDAwNTkyNUFBRTE1RUU4Q0ZEREI3OEUwMDk1REZCNjhFMENEQQorOjEwODJBMDAwQURGREFGNjVENkQ4MDFGM0Y4NzU3OTc5QjcxN0ZBRUI1QworOjEwODJCMDAwQkNBN0EwNDA1NkMzRTM1NkI4NEQ4NDE3RTZFQ0JEQzAzQQorOjEwODJDMDAwMEExOTVCNzczODU2QkQxN0Q2NTkwRDM0NDJCOEY3MjVEMQorOjEwODJEMDAwNzM3MDRGMjYzRDY3NTIxMjk2RTYzRDEyRDRBRjczRjQ4OQorOjEwODJFMDAwRTZGODYwRkMyOTJGNUI0MzZDMkNGNEZCQjI1NTYxMzAzRgorOjEwODJGMDAwQ0UxQjg1RkUwQUE0RTc5NDk3NDc1NDQ5MEU5OEU0MjFDMworOjEwODMwMDAwQjNDMkEwREQ3NUUzQkM5NTg4Qjc4MUU2N0IzMThBNEZBNworOjEwODMxMDAwNDQyOUQ2Q0JBQTI2MUE1ODMxNjNCNzU5Rjg2QkQzRTY0RAorOjEwODMyMDAwNDg4MUI4MzhDNkZDRURENzMyMDY3MzVEN0M3RTFFNjM4QgorOjEwODMzMDAwQzA0RjRCQ0VDNzEyRUNERkNFOUY5RkFCMUYzNDBERjE2OQorOjEwODM0MDAwNzg2RTAzNEMxQUQ2QjE2NDgzMzRFNjAwQUM4QkE5NzYwMAorOjEwODM1MDAwNzczNkUwQTEzQTZERTE0NkU2NDBCQzFCNjhCREQ1QTM4NworOjEwODM2MDAwRTM4MzJERDBGNEJBMjlGNjgwMjE4RUU4RDE4NUY0NTgyNAorOjEwODM3MDAwN0QzRTlFRkE1QjczM0U5M0M2NTk3QjNFOTFFMDc1RTc2NgorOjEwODM4MDAwQUQ1NDJFMzkzRjlBOUUwQkZFRjYyMTdGNDM3OTgzQzc2OQorOjEwODM5MDAwQkYxRUYxNTFERDcyQ0Q3NDFDQzdCRjMxQjVEMDZGOEJEQworOjEwODNBMDAwRTQxNzkzMTNGOTBBRjhDNUI1M0M4MjFGNUEzQTgxNUY2NgorOjEwODNCMDAwRUNDNDJGOEExN0YwRUE4MzMyOTI1RjY2MjNGREYzMTAzNAorOjEwODNDMDAwMTNDRTY5MjkzMEVGNTlBRDk5ODY3QjU5QjhGRTRFQTQ3QQorOjEwODNEMDAwN0ZEMTk1RjNGRDJEMUFCRjJDQjE4NUIyMEREMDlGQjE4MQorOjEwODNFMDAwREVFQURFMDhGMzNBOUJBNDRFNDNCQzM0NkNFMUY4NkI0MgorOjEwODNGMDAwMzBGQUE2RDg2MURFMEQ4RjQ4NkVBMDBDQkJBNUQ4NkVGMgorOjEwODQwMDAwNjE4MEE3RTJFM0Y1MjY3RjA0QkZENzlDMUZDQjU0QzA1MQorOjEwODQxMDAwQzdCQ0YzNTk1NDU2OEZGMUI3MjJGRDE3OUZCRjQxQTMzNAorOjEwODQyMDAwRDM1ODJBOTk1QTYyQzBGOURDOEU3NDU1NzE0MjI1OUM0MgorOjEwODQzMDAwQ0VEQUZDQkVBQzFGM0ZFODJFMThGRkNCMzc4QzU0NUY2MgorOjEwODQ0MDAwRTQwRERDOENGMzMxMDZDREVFREQzMDlGNTM1NkJGOEM0RQorOjEwODQ1MDAwRjQzRDk1QzE5QzBGQzExNDRGMTk1OUMwMDlGNEJBNjU3OAorOjEwODQ2MDAwODdDQzAyRDBGRjUyMjhGRDUwOUU4QTY3REU3ODBGRTI0QgorOjEwODQ3MDAwMTNENjk5Q0JGQkJFMDhGRkZGNTNEOTNFODQwRDA3QkEzNAorOjEwODQ4MDAwMzZGQ0ZFN0Q2NTE4NjMyQjczQkFDNzg2QTBERkRBOEFENworOjEwODQ5MDAwNTBGMjhERDBFRjk5QkQ0Njc3MDBDNjVERERGOTc2QjExQgorOjEwODRBMDAwMDFFQTNGQzlGNDBFNjIzMkEwNkFCMDdGMTdEMjc1RDVENworOjEwODRCMDAwRENFMDRGOEMwMERGN0FERkYzOEUwOTZBMTg5RjFENEFEQgorOjEwODRDMDAwMjg1QjgxRjczQjAwOEYwMTk4NTdDNzM2Nzk3QTkwRjA4NworOjEwODREMDAwQ0Y2MkU3OEMwOUYzQjVFMEUzNjhGRTVFNzU3RTM4RTFCNAorOjEwODRFMDAwRTc1Q0JENzlDQzAxRTQ1RkUwNTc3Q0JFNDZFM0YzNUIxQgorOjEwODRGMDAwOTFFRjg5MEYzOUJGMEIzRTVFQTM3MDc5QjVDNjE2MTc5MQorOjEwODUwMDAwMENDMDNBOEMzREJDNURGNUJGMDFGRjAxQ0FENzFFRDgzNworOjEwODUxMDAwN0Q3RjI5RjJERDE5ODVGODdGQjVCNjRGQUFFNUI5QkU5MgorOjEwODUyMDAwMEFDRUZGRUUxNjc4RkU2MjkzMEI5MDE1RTZGRkE5RTdFMAorOjEwODUzMDAwRTc1MEJCQjhGMzM3NTE3RjgyRUZBM0U1NzlDNEJFNjE0MgorOjEwODU0MDAwMENERTdCMzFERkZGMTZFMkE5RjI0NzdGN0JGRURGRTEyNQorOjEwODU1MDAwRDEwQzI1OTRGMzU4MTI5Njc2RTI5RjdGOTZEQ0ZGRERDRQorOjEwODU2MDAwNTVGMkZGMzFBREZENzQzMzVCRTRDQkUzNzIzREIyQkYzNgorOjEwODU3MDAwMTQ0RkU1Njk1Q0M3Njc2RTg5Q0JERjdGQjJCQ0ZGRUM0NworOjEwODU4MDAwMkFFNUZEMUZBRTUwREU0QkY5NUNERTQ3Q0I3NzA2RkREQQorOjEwODU5MDAwQTE3Q0ZGRkNBNTkxNDE5NEZGRUYzM0QwMDdBOEY3MEUxMworOjEwODVBMDAwQzVBQTRGNkFGMjlGRjQ0MzRDNUNGMDcyRjJGRkQxQzI0RAorOjEwODVCMDAwNUJBNEZDRkVFNUJGMjFGRjFGOTBGRjdGRUYzRTExRkM5NworOjEwODVDMDAwMThCRDVGQUVEQkRBNEQ3QTgxQkQyODMxOTRCRjYyRkYwMgorOjEwODVEMDAwNzRDNTcwQkM3NDhERTI3QTIwQkM2RjI0REE1NzBDRjYzNworOjEwODVFMDAwNTVCNjE0Qjk2RkY2REM1RjhBRkJFNkYzMjQ3NzBCMUJGNAorOjEwODVGMDAwNzhERkRDQTRFRDkzNDU5QTVFMTBGQkUzRDE3QzdGNjFDQworOjEwODYwMDAwN0VDNEZFNThCRDNGNUEzRjVDOUVCRjZFNEFBQTY3QTgxMworOjEwODYxMDAwMUYxNjQxMTlDOTVGRTYzRUZEQTBERjE3MTNGMkFGNkVDQQorOjEwODYyMDAwNUY4Q0QwREE3RjFCNUZDREZDRTdGM0Q1Q0MwMUY4QUFENQorOjEwODYzMDAwM0EzRkY5RUZFN0FCNjg3RTNBNTdGRkZCNDIxNUU2NzMyNgorOjEwODY0MDAwQUUxMEY4MjgzM0NDM0ZEN0JEQ0VCOEREMzBEQ0VFN0U5RgorOjEwODY1MDAwOTI0NUYwODkyOTIzRDg4MkVEMkVCMjdBQzQ2M0I0M0NDNgorOjEwODY2MDAwMTQ3Q0JCMDVFQzAwOUNBN0EwN0I1NzRDMjA2RjdEREVFMworOjEwODY3MDAwM0Y0RkZFREQ5OTdGNzU3NkVGRDJGQzJCOTMxRjlCOTFDOAorOjEwODY4MDAwQ0VEOEVGRkY5Q0JERjg2MDdGNzQ2NTVFNkUxNzg0RTlGRAorOjEwODY5MDAwNjI5RTQ3NzY1QzA4MTQ5QzM0MzA1RDhEM0JGOEZFMTI3OAorOjEwODZBMDAwNzA1QjQ4MTE3QTM3MTFGNTJFRjBDQjQzRkYwOEJGNTRBOQorOjEwODZCMDAwNEY4MTVGMDcyM0ZDQkJGOURFNzRFOEVGQkIxQTFDNzgxRgorOjEwODZDMDAwNzczRUQyRTc4NjEyNTFGRkZCMURERTJDOTQzM0YwNkIxMAorOjEwODZEMDAwMjk4REUwNjUxNkMyQUYwNjFGM0Y1RTg1RkNGQjUwNUYyQgorOjEwODZFMDAwN0QwMEVCQTc5NkM1NjlFRjMzMkZCQTFFQTJGREZFRkNGNQorOjEwODZGMDAwREYxRURGNDZGQjc5M0JERkJGRkUxRUM1MzcyNjAyMkU5RAorOjEwODcwMDAwMDREODFFMDE5NzQ0QzEzQjc5N0I4N0QyQzM5Qzg0OEZEOAorOjEwODcxMDAwMjBERkFGRDBCRkU0RTFGQ0UzOEJCMDRCODA5MkQzRTIyQgorOjEwODcyMDAwRDFBRTNDMjAzOUVGMDVGQTJGMjhGQkRDODRGNDBBQUZFOAorOjEwODczMDAwQkY4N0Q2QkZGNjkwQTRDMTFGMURGNzAyNjkxNjFDRTBDMworOjEwODc0MDAwRjBGMUZDNTMzQjAyOEFENjFGRTA3OUI1ODY2NjczODc0OQorOjEwODc1MDAwRTQ5NTgxOEVBQjRCQTRFMEIwQ0M0QkYxN0NCQzRGM0U5QQorOjEwODc2MDAwODk3OTgwMkFENkJGQ0Y0Qzg1NTdGNzNFRUU2RjdBN0Y0NgorOjEwODc3MDAwMThCRDFGMzI1RkM1RjgzNzk2MzE2RkQwNzY2OUJCNTM4RAorOjEwODc4MDAwQTJERDA1ODA0NUZGODBDQjc5QjBCRTYwREVBNUVEN0IyNAorOjEwODc5MDAwQjVGNkREMDY4Mzg2QUZBRjc3MjBGRUJBNEQwMjlGMTc5MAorOjEwODdBMDAwNzY3OENCODBGRThDQzNGRjk1N0Y2MTdFMjA4RjRGREY3NAorOjEwODdCMDAwMUJCNUZFQ0JDREZGQkQ3Q0JEREQ4MDNGQUFGRUZERDA0RAorOjEwODdDMDAwRTVGMEY3QzEyNUY4RDNGOEE3NEVDRjRGNzE4QUVGRDg1RgorOjEwODdEMDAwMzk5ODQ3NUM5MkU0NDRGQjc4QURDRkJBMERGRDgwMzAwOAorOjEwODdFMDAwN0Y5ODZCNzAzRERENTZENkM3Q0Y3QUZFQjdENDU0QzFBMworOjEwODdGMDAwRkFENjMyNTExRkYzMDhGOTM5ODZCRUY2N0MzRkY0RjEwMAorOjEwODgwMDAwMTdGM0U2MDIzRkExMDk4MEVGMjc3OUFDOEYwNDZDNDQ4RgorOjEwODgxMDAwMUZBQTI3MzhFQjMyRkJBMTIzMEEyRThCREEzRjFBRkY1RgorOjEwODgyMDAwRDNGRTQ1MzkwRkY4QzlFRTQ3Q0UxNDc4Mzg3RTNFOTUxMQorOjEwODgzMDAwRDg3Qzk0OTNERDk1REM1RUVDMUVDNkNCNzkxRTg5RUE2QworOjEwODg0MDAwMjc3QTM4MURBNjY4NjU3NzRDMDQxRUQyQzM3NDg2OUZBQworOjEwODg1MDAwMTBGQTIzMTFFQjI2M0NENTI0NjlFQjBFOENBQzk5MDk1OAorOjEwODg2MDAwRUJFRTRFRTBGNUQ1RkJCMzFGMDk5NDg1RTFFOEZFNjYxQgorOjEwODg3MDAwRUYxRjU5ODM3Q0QzRDc3RjYwQzRCQjg4RDcxQTBENkY5NQorOjEwODg4MDAwRjNGNkU3QkUxQkUwRjI1MEMyN0RCOTg2MTgwNEE4NzU2NgorOjEwODg5MDAwNDAwQUM4QjBFRTM1QzgxN0ZEQUMzQkNENzNDOUJFMEE1RgorOjEwODhBMDAwNDRCREVGMzU1RUU2RkRDQzRCREZGNzQ2QkRDRjhDNDlDRQorOjEwODhCMDAwNTdGM0JFNDZCNzk5NTE3NDlEMUU0NUQ3QUEyOEI4NTY5RQorOjEwODhDMDAwQzA0MTlERkMxMzcyNzFDOUMxMDdEQTUyNjAxRUI3RUUzOAorOjEwODhEMDAwOTM1MENENDRGMDczMDlGMUYzQUQ0RUMxQkYxM0RFNDVBMworOjEwODhFMDAwNzkxRkU2RTc1MjgyRTc3NjA4N0U5REY4MDhDQUZGMzlDRAorOjEwODhGMDAwMjgwRjRCQzNGMDNDOTQxNzA0OTdENTc4Qzc0NUVBOEJGMworOjEwODkwMDAwNDk1NDdGNjNCQjY4M0Y5OUUwMDVBREEyQkZGMjQ3NTA3MQorOjEwODkxMDAwQkUwQTNBMDJGQTZBNzBCQzlBNDJBMTJGMkFERUM1RjY1NAorOjEwODkyMDAwQUIwRUYxRjczNzc5MkFERkJERUM3RUQ4MUU4NTk3OUQxNworOjEwODkzMDAwNTE3MDIwQUFGREY3QkU0NUJGQjQ0NkJEQkYyMUFBN0UzNworOjEwODk0MDAwNUIxNEJDMjMwQTZFRDdCRkJGNzhBOTQ0RkI3MDMxRjAxQgorOjEwODk1MDAwMDMxMkUyREJGNkU1QzM5RTNFM0JCNTRGOUY0QTM2QjJCQgorOjEwODk2MDAwREI3NEZCRUFCQTE2MEUwNzNEQjM2QkRBNkQxMUYwN0VDRAorOjEwODk3MDAwNUY4RDI2NkY2OTVGMTgxOUZGMDE1OTFCNDA3RDY1MUNDQgorOjEwODk4MDAwNDA1RURFM0YxMDVGRTY0NkVCNUI1RUZGMjdGQzM1MTU4MQorOjEwODk5MDAwRUQ2MEE2QjMwQjhFQ0E3QUI4NTNENkU2MURCOEY5RERFMgorOjEwODlBMDAwREJGM0YwQTE4MDE3RDZBMDdGNzBEREY3RjVFQjAyQkZGNworOjEwODlCMDAwNTVBQkJGQTlBNkFBMkNDMjJFNjEzNzExOUY4ODc1OEExNAorOjEwODlDMDAwRjZEM0JFQkUyOEUzNzgzRkREQkZBMDY2MkZENEQ3NTZDRQorOjEwODlEMDAwODZCMkVCQjE0Q0UwMjVFODM1MTlGNUU2M0EyRDJFMzM5OQorOjEwODlFMDAwRUQyNUQ5ODc3QUFEMzYyNjk0REQxMDY5ODdCMDhFMUNDNworOjEwODlGMDAwNUM2N0U3M0QzMkQxMjdEMDAyRjRDMTM4MUI3MzlCMzA0RQorOjEwOEEwMDAwQUVEMjE5MTdEN0Y4MTRCNDNGN0E4RkRDODg3QUY0RkQwOAorOjEwOEExMDAwQzZDNDE0OUM3RjZBMDFCNzIzOEZDNjBENEQ1OTA2NzBEQQorOjEwOEEyMDAwNjdFQzIyOTMwQUVEM0EzNzRGQTVGMjg4RUNEREQ0MEJDMAorOjEwOEEzMDAwN0JFRDM3OUU1NTM1QjY5MTU4MUY0N0Y4RTlERUJGQUM0MAorOjEwOEE0MDAwQTYxOUY2QzEzQjFFOTVERUY3MjczODUzMEVBMkZEN0MxMgorOjEwOEE1MDAwQUY5MTNEQTlFMjdDRENCQjg4NkZFRTMzRTdBMzFGQkQ3RAorOjEwOEE2MDAwQjg3OTc0MEFEQTkzNEJGRUY3OUM2OUE5RDA2RTQ5OUJEQQorOjEwOEE3MDAwRDEyRDUxM0IzNjE2RTdFREJGNzdBQTA5RUI5N0I2NkFDMQorOjEwOEE4MDAwNjVFMDFBMkE1RkZFRTY4OTE2MDdCNEVGN0Q1QzcyRUY5NworOjEwOEE5MDAwODFGNjkzQkVFQzc4N0QyQ0MwMkJEQTg3QkI5MTM0ODdBRQorOjEwOEFBMDAwQ0YxQjk4MTNDNkY5NjBDNzg4QTAwQ0ZDRjhBMUI1RkVDRgorOjEwOEFCMDAwRDU1OUJDM0RDM0Y2MkIyRUE4NkZDRTJBQzRGNkIyNzM4RgorOjEwOEFDMDAwMjNCNDNGMDlDRkQxMUUzRUI5NDVERTIzRTFCQzFDRjZERAorOjEwOEFEMDAwMTgwOTk2NzRGMjZCRjU0REI0NkJBMURFQjkxMTlFOUYyNworOjEwOEFFMDAwNkM1Qjk5ODI3NkQ2NDk0OTc1NDhCMEZFNUU0RjYzOERCRQorOjEwOEFGMDAwMEJGODY1QzUwRUIzNDZCRkM2RDRDNUIwQUYxNzFCRkE5OQorOjEwOEIwMDAwRjg4NUY0QzdGMjc4MEVGN0VFQkZBQkU2NDk5OEZGQzlENworOjEwOEIxMDAwNDc0NjM4MTBDRjZCMEJCQzVGNzg1MDFGMTU3QUNGN0E2MQorOjEwOEIyMDAwOTI3MTlFNUM0RkJERkM4REJDMDhFREYxNUY5QzU5OTIyQgorOjEwOEIzMDAwODI3MUJCMEIxQTFGMUYzRUJGMjQ2NTQ5ODRCREIzRkM2NQorOjEwOEI0MDAwNTM4NUU4RkVCMjQ5QkQxREU3Rjk3MjRDODY4NEYxMkNDRAorOjEwOEI1MDAwQTA3QjIyQzZCRDk3NkE3RTI2RjA2RkUzRjNGREQ4M0Q2OQorOjEwOEI2MDAwQkZGN0M4NDRBNzhGQ0M4REVDNDNEODU0OUQ1QkFGOUYxMworOjEwOEI3MDAwNjIwN0JDNzRCRTI4MTExRDk2MzI3RjBCQzJFQ0EwRTRDNAorOjEwOEI4MDAwNDZGQTQ1QkZGRjlCQjE5NUQ2ODJBMjQ4RkVERjQyNzJFRQorOjEwOEI5MDAwOTZGQzBEODAxMzlGREY0NEZBOTA2RDgwMDcxM0EwM0M3NAorOjEwOEJBMDAwNkEyNTNGRERGOEFDMzU2ODA1N0MyRTRERjI0RUMzRjZFNAorOjEwOEJCMDAwQ0NENTkxMzNENzFFQjE0RkI1RjY3RjBDRDhBOUZEMUY4OAorOjEwOEJDMDAwQTEzREZBN0I3RjBDRkNDMUNFNkM5N0RBRkQyQjFDRjYyNQorOjEwOEJEMDAwMDAxQTFGMUZEQkVEMEFEMkVEN0RBNUU5RTREREYwREUxMgorOjEwOEJFMDAwRjJDNzhEQTQyNzk2M0Y5RUJDQTExN0Q3MDFGQzk1Q0Q1NworOjEwOEJGMDAwMkU1RDg3QkZDMDQ4RjgxRDcwREZCMkVGRDc1NEU5RkM4NworOjEwOEMwMDAwODk4NzJGQkI2RkM3MTQzQzVDQjMzNzZGRTA3REJCNDJENQorOjEwOEMxMDAwRjM2QkE2M0Q2RUY0RTFCRTVCNTE2NDU3MThFODlCQ0E0NgorOjEwOEMyMDAwQzc1Rjc5MTJGN0M3OEFGNTU2OEYxOTI2QkVFMjcxMzNFRQorOjEwOEMzMDAwRDFCN0M3NkUwRjM4QTFERUVGQjAyQkYxNTA0RTJDRTA0QworOjEwOEM0MDAwRkNCMEIwNDBBNTcyOEFDQzE0OEI4N0NBNTY4Q0FGOUVGQworOjEwOEM1MDAwODVGOTI0MDI3Q0JBRjFBMTg3QzdDMzM4OUZCMEUwMEQyMworOjEwOEM2MDAwRTMwMTdGNjc5MTUwODA5N0IzMDc2NDhBM0YzMkM1QUJCOQorOjEwOEM3MDAwNTQ4MzNDQUQ2MzVDOEVBQzc5RUQ3OTUzMDVGQzVBNTc1NworOjEwOEM4MDAwQkY2MjI2RkE4MTJCODNDNjBGN0EzNDFGRUZBMkI2NEMzRgorOjEwOEM5MDAwOTRCRkVCRjgyM0QwQzNGQUZBNzU2Q0RCMTdGMjU4NjI3NQorOjEwOENBMDAwN0IxM0VFREYzNTFENTFGNUY1RDc3QzhDNzE5Qzc1NEMyRgorOjEwOENCMDAwRjlBMDQ3QzQ3OTYxMUVGMzBBRUM0OTI3NDcwM0UwNjEzNAorOjEwOENDMDAwMUVDMDEwM0I1QjZGQ0M2MUIwQzQxNTM2RDg4N0IwREVEOAorOjEwOENEMDAwMjkzQjc5N0M2NzQ1QTMxQzM0NDNGQjI5ODkzQzVFRkMxNgorOjEwOENFMDAwNTExM0QwN0YwNEFEM0JFMDA0NzhDNUY3Qjg1RTVBQzE5QworOjEwOENGMDAwQTRBMDA1N0VCRDY2RTc3QTA1RjdDRjJCMUU4RUE3QzUxQgorOjEwOEQwMDAwMTJGM0UxN0VGOEQwRUExRTgyRkVGREYyQzdBRDg0REZFOQorOjEwOEQxMDAwMTVCQjU2RkVFRTExNzhBRkE3QjkzQTI5RDI5RjVFQTlDRQorOjEwOEQyMDAwRjEwNUY0Q0YyQzA5RTE3RTNFNkVGRUQ3MjEyODA3QTc3RQorOjEwOEQzMDAwRkMwMEZDNjI1OEVGOEE3OEY2OTM5QTRDQTQ1N0VBMTAyQworOjEwOEQ0MDAwRDUxNjZFQjc2MkUzM0QzOUJDMURGOEQ1QjBFRUM1NUJGNAorOjEwOEQ1MDAwNjQxRUE3N0FDMTRDN0ExMjY0ODM4QkU0Qjg4NkNGQTVDRgorOjEwOEQ2MDAwQURBRjk5NEM3OTI4RDdCNzc1Q0JEMEZFMDM4MDY1MUI4MgorOjEwOEQ3MDAwRTEyQkEwRTFEMTg0Rjg1QTg0RUZBNkYyNzc1Q0M1OUE4MgorOjEwOEQ4MDAwOURBRTkyRENGMUUzRkE2QTBERDJBMkI5QTQwNzdBNEQ0NgorOjEwOEQ5MDAwMjgwN0JFNUZDMEVEREU2RDVBQjk3ODg4RkI2NjhBNDM0RQorOjEwOERBMDAwREY2Rjc2QTM1Q0MzMUY1OUNDMDNGQ0IwMzU4NkVFRTVCQworOjEwOERCMDAwMTgwNzY2M0YzNTUzM0M2NTVEQUJENTZCNzU5MDlGRTJGOAorOjEwOERDMDAwREQ4RkYzNTM5ODYyQzI3MzE3OTVDQjk3RUY2QjdDQjgyNgorOjEwOEREMDAwNEU5RDczMERGMjBERDQxRjU3QTA3RThEOURDQkQxMzVDNgorOjEwOERFMDAwRjE4MDc3NkVENzdBMEQzMENFRTdGOERCNzBERTZGRUE3MAorOjEwOERGMDAwRDg4OEYxMjVFRDM5RjRBMzNBQzJGRDc2MTk1ODNCQzY1RgorOjEwOEUwMDAwNjVCMEZEQzhCMTg4QzdDNDFCRTZFM0ZDN0UyQ0QzN0VFOQorOjEwOEUxMDAwODZDNURGNUY4Mjc2RTE4RkU1MDJGNDg3MTc2RjM5M0EwNgorOjEwOEUyMDAwNkQwN0MyQ0ZFNTNCQjFDQkM1M0Y3OTg3RjRDQ0FEMUExNgorOjEwOEUzMDAwRkQ3QkQwM0Y0MEJEMDNGMDczNTA3NjY4RkJDOTJGRjMzNAorOjEwOEU0MDAwMzg1MTg3ODYyN0MxMDdBMjdFQ0QxNjIzOEZERkI3OTlCOQorOjEwOEU1MDAwQzlFRTU5RDNGQzdCRUE3NzhEQkQzQjA1RTVGNTlBMTc0MgorOjEwOEU2MDAwOENDNTI4RDc5RkQ3RTZCREE0MzlBM0VDMzhGMEQ1MTIxRQorOjEwOEU3MDAwNjM5QzUzODI0N0FCMDNENTI2ODQ1NzZGOTcwODBFQkY3OAorOjEwOEU4MDAwOTczQzA0RjlGNENGQUQyRjNBOTA3RjNFQjQ4NkIyNTFBRgorOjEwOEU5MDAwN0ZGNUFFQjdCQUY3RTAwMkI0MzhERDlGNUJCM0Y3NjA5OQorOjEwOEVBMDAwM0M2N0E5QjNEQjJFNDFGREQyREI4NzI3QTBCQzdGREY2NworOjEwOEVCMDAwMTkzMjYxRkRGQjFEOTkwNjg0QkQ0RTY3MTlDMjVFNjVCRQorOjEwOEVDMDAwMUNDMTdGMDY1MUQ2QTFGOUFCQzg2RjZCMjU0RUU3RDUwMworOjEwOEVEMDAwQ0YxRTM1MEQ4M0YxOEUxN0YwQjhGOUE3M0Y3RTI3MDcxNworOjEwOEVFMDAwRjVEQjlBMjFERDM5QTg4NzgwMEY3MkQyMTBDRkNGNDhFOQorOjEwOEVGMDAwQTRCRkQ3M0UyQjdCQUQ2M0MzN0NCMDE2RjkwMEY2REQ3MworOjEwOEYwMDAwMkE4RDBGRDYxRTc4RjEyRURDMEY2QjkxRkU5RTRCRjk0OQorOjEwOEYxMDAwMDhGOEY0MTgzRERGQkY3QjFBRTNFRjFGNDMzRTExN0FEOAorOjEwOEYyMDAwMEZFMDU2MjNDNkRGNEMxQTBDRTMyMEZDQUU4NjRGQTg5OAorOjEwOEYzMDAwQUZFMkY1ODFCQzdBMUU1NzMzQTE5REJBRUVBMDMxRDBDNQorOjEwOEY0MDAwMTM3MTZFMzQxMDlEQkYyQUQwQ0VEMTlBQ0QyNDc3QkYzNQorOjEwOEY1MDAwRDJENkREQjNFNTA1MDdEMkYxRDMxRjFGN0QxNUUzQzVEQQorOjEwOEY2MDAwNkJGNjgzNzY1N0ZCRDkxNzFBNUVENjIxMUUxQ0I0MEVGQQorOjEwOEY3MDAwQjI0N0Q2RTFCQTFENjEzQ0Y0RjFCRkI2MUZENzMxQkU4RQorOjEwOEY4MDAwNEVCMUVFNzU4QTg2MDc1MUFGQkRGRjE3NkQ5REFCOTk0NworOjEwOEY5MDAwODZCNzAzMjNGOEZFRDNGNjFCRUU2Nzk0QUI2MjdERkUyMworOjEwOEZBMDAwMDRGRUJFRTBEM0Y0NDJCRTNFNjMyMUU3RDdENUMwMTcyRQorOjEwOEZCMDAwRUUzQ0UyMUZBRjQ5QzgwOUE4RkFGNEI5REQxNDJGMTIzQworOjEwOEZDMDAwRjQxMkYzMUU1QkE4MEE3OUU3OEQ0RjA4RDNCMUM3QzAyRQorOjEwOEZEMDAwRUEzQUZBODlCMzI0MTc3MkZDOUQ2ODFCMzRFNDIwRTA1NgorOjEwOEZFMDAwRURDRkUwOTdBMUZEODVGQ0FBNDQ4QzI3Rjg0NjhDMzc4RAorOjEwOEZGMDAwRTU0NzczNjZFMDdBQTFGRjEwRjYyRkM2N0QzRjEwQUIwMAorOjEwOTAwMDAwNjAzRkVGMzNCRTNGOTAzRjUxN0U4QTdEMzlBNTY1RTFEOQorOjEwOTAxMDAwOEM3QzA3QjZGQkQ0M0UzQzBGRDdDQkM3MUY1QkU4QTRDNAorOjEwOTAyMDAwRjdCRDY4MkZDMEZCREU4MzEyQzVBQjRGNjg3MTgwMTM5QworOjEwOTAzMDAwNkQyRjNBOTY0NEUwMjk0RjdCNEZGMDE5RkU2MDFDNEI5MAorOjEwOTA0MDAwQ0NCNzJCODFDNzdGQTNFNzJERTQ5MDk4Rjc5NENEMzc1OQorOjEwOTA1MDAwQ0VDMEU3NjJGRTgyNUYwNTdGMEEzQzBBM0U2NTFCOTIzNgorOjEwOTA2MDAwQzlBRTg5RTY1N0UyMzVBMTU3NjU5REJDMjdGRDc4NEQwRAorOjEwOTA3MDAwRkExNzI2QkZFREQyRTdEMTcwOUZGREQ0RUEzQTk2MTVENAorOjEwOTA4MDAwQTFENzNGQzQzODBGQ0E5M0E3RTUyMEM5MTMwNjVDMUJCQworOjEwOTA5MDAwQTE3Nzg0QkU2RjVFN0Y4RDEzQ0YxOThEQ0Y0QTZFMzQ1QQorOjEwOTBBMDAwN0QyMkY0Q0MzNjI1NDJDRkQ0MTVBRUNGNDE3REY2NjA3QgorOjEwOTBCMDAwRTEzMDJFRjc5M0JDQTc5MTlFQUI0Rjc1NEY3M0E4NjExQgorOjEwOTBDMDAwRkI3NUQyOTcyMTM5MEVFMzYxMDczMjNEOTE3QTc1RjUzMAorOjEwOTBEMDAwOTk2M0I0MEZENkIwRUU0REU4N0YyRERFRjI0RUY1NzhGMQorOjEwOTBFMDAwRTRGN0E3OEQ3NEVFQjlCODZEQUEwOUZEODE5NTRGREUzRQorOjEwOTBGMDAwNTI4Q0ZDRjQ0MUZCNzA5MkVGQTdGNzE2MTUxMDdGMzFFQworOjEwOTEwMDAwNjdDQTBEQjAwRjk2RUU3REU4ODYwNUYwN0NFOTQxRDk3RgorOjEwOTExMDAwNEQ3MjFFRkFDMUZEQkJGODhFMDIyNkQxQkE3QkFBRjFCMAorOjEwOTEyMDAwM0NCNUY3NkVEOTg5NzZGRkM0Mjc4QjM2NjBGQjg5RjY4QworOjEwOTEzMDAwQTFGMUI4MEVFRkRFNDQ4MkJENEExQ0U5MDk2MTJGQkZFMAorOjEwOTE0MDAwQUZDOUNCMTYyM0U3OEYwRERBQkVCQUFEQUZFNEZDMzM1RgorOjEwOTE1MDAwQTVBNTI1MDdDRkUzN0I3NzgzOUNDNjczNjk5M0RBMTFCNgorOjEwOTE2MDAwQzJGMTVFMUE0NDdFQzkzQTcwQTM1QzQwRkY1MzEyQjc0NQorOjEwOTE3MDAwQ0ZFQTRDQ0M5MkVBQTFFNzk2NTQ3OEZFOUFCMUZCMEU2NgorOjEwOTE4MDAwRDQyN0FGREQ2MUNGNkZDNjA5QzgxNzhBOTc3MDdGOTI2OQorOjEwOTE5MDAwRTYwMTc2MzQ4RDJGRjAyNkU2NzE0RjIxRDc0RkQxRkRCMQorOjEwOTFBMDAwODlGN0JCRDBGRjQwQjlBQUNERkY3NEVCRDMzN0EwM0VGRgorOjEwOTFCMDAwM0NCRDJGM0IwMUQ3RkRGMTRCRDY3NkI0QUIzRTM2NzJBQQorOjEwOTFDMDAwRjlEODY3RUYwNDhEMUY0NURBNkI2MERGRTk2MEIwRTcxRgorOjEwOTFEMDAwNzQzMEYwRjE0NzdBRkI3MDIzQ0RFQkJFNDI5QkNFOUVGQworOjEwOTFFMDAwMTM3QzVGQkIzRTNCMkUzMjBGMjFEQThFNjc1OUQxRTdFRAorOjEwOTFGMDAwM0RFM0UzNTgzRjcyNDc5NDY3OUEwMDUxQzBBODczRDA4QgorOjEwOTIwMDAwQjY4NzcxQUI2MkJGN0VCRTFCRURGRUVENjZBNzE5RDZCOQorOjEwOTIxMDAwRjkxMUYyM0Q5RTY3QkQyMDA3RjFGQzA2NkQ3NERDMDc3NQorOjEwOTIyMDAwMUYzRDk3MUY0NEZGNzNGOTdCRkU2OUQ4RkZCMTA3MzZENgorOjEwOTIzMDAwNTM5RUMyMzJCMDMzMDc0OTExRjZGM0Y3MUVCODAxRDk3NQorOjEwOTI0MDAwRkZBQ0RCQkYyOTE1REUzQkJCOEZFNzU1NDBCNTJEQ0ExMAorOjEwOTI1MDAwNkU3RTM1NTVGREM3RURFNjJCQjU5NzQ1OUNFMkU3ODU1QgorOjEwOTI2MDAwOUFEREVDNjY2RUM0QjNDMEFGRjA5RjVFMDYzRTI4RjE5NworOjEwOTI3MDAwODRGMUY1NTk1MzFERDlDQjY3OUFGQzU0N0UyRTlEQjhDNQorOjEwOTI4MDAwN0YyMkYyQUYzRENFQkQwNzVFRkJDNUMxODdFNDM0QTRBQgorOjEwOTI5MDAwRjM4MUZDMEJFODJGOTdEQUUyOUNCODZGM0Y2QjZBQTQ2RQorOjEwOTJBMDAwNDNDQjMzNERGNTU0MEEzQThCMzhEREE0MDM5REY0REVFRAorOjEwOTJCMDAwNjcwNzBCMEU0RDg0RjcwRURCRTJCODFFQjhFNDlDODhGRQorOjEwOTJDMDAwRDMzMzNBOEZFNEI2RjVFMzA3RTE3M0IxQUU0RkVFRTY4MAorOjEwOTJEMDAwNzQxNUYzRkU2NERGMkQwRTVDNTdFNzYzODk4NzI2MjA0MworOjEwOTJFMDAwM0Q2M0UzOUM2OEY3QUREMEYyNDc0RUVFRTA3NkY1Mjk5QQorOjEwOTJGMDAwNEJEQzUzMzMzMUVGNjRFN0JDMTQwNkYyNzY1OUU3Nzc2MQorOjEwOTMwMDAwNkVDMEU3Q0I1RjkyOUNFODBGQjg1RjlBRTNDMDc4RUI0MgorOjEwOTMxMDAwN0YyODNEMEUyNzk2RjA1RTA4RTdBMzA0NjU5NDQ3QTVENQorOjEwOTMyMDAwRDMxOTlENjM5NTg2MTRBNjY2RDJEMTMwRjFDQjg0MzNEMAorOjEwOTMzMDAwNEExMEYzNEVGRThDRTc1QjE4NDdCOTEwNDM3MTE0QTYzMAorOjEwOTM0MDAwOUQ1QjJERkIxOThGQkZGNEY5Qjk5QTlGMzc1MTVCNzc1RAorOjEwOTM1MDAwNEE1MTAyRTc2RkVERjk5NDEyRkVGQ0UzOURDRkNGQzJCNAorOjEwOTM2MDAwRkU0RUVGMzUzQTcxREU5RkVEMzU1MkZGQUJDMDNGMzMxNQorOjEwOTM3MDAwQzA3QzRGRURFMzdFQ0ZBQTBFODlGQ0U1RDNGQjQwNkZBNgorOjEwOTM4MDAwQzNCQUQ2QUMzNzdBNEQ3MTk3RjJFMTE0QThFRkIxODUyNAorOjEwOTM5MDAwRjk3MDk1Mzc0OEZDQ0QzNDdFQjRDMEJGOEJDMzJFRTU0MQorOjEwOTNBMDAwQzc3OEQ2QjEwOUYxRjE4RkYyQTVBRDQ4RUZDN0Y1RjE1NQorOjEwOTNCMDAwRTM0MDdDQTBFMTBCRjczMUYyQTNBMEY3MkFBMDBCOUVCQgorOjEwOTNDMDAwQ0YyNjc0RTQ1NzIwNUYwOUZBMEIzOTExQTg2NEI5QThCNQorOjEwOTNEMDAwNUY1QjRDMkMxN0YzNzgwMjg2MTgzN0VFRUYzOTM2RDVFMQorOjEwOTNFMDAwMjgwMTFFRTYyNUY1NTRBMTM4QkRCQjg4Q0I0OTc5OEFGMgorOjEwOTNGMDAwQzE2QjQwRkREMjYyMjYzOTEwMkQ0N0IyOEJCOEJERjQ0NworOjEwOTQwMDAwMkNGMjM0RkNBRjI4NzI3MjNCOEFENTkzM0YyMjRBRDBBQgorOjEwOTQxMDAwM0IxOUE4QzdFN0M0MjZGQ0E3MEE0RDNDMkY3QzdGODFENworOjEwOTQyMDAwMDJGMzlGMzMzMUUxOEVFMTZFRTA5QjE3MUU1RkEwMDBENworOjEwOTQzMDAwRkZDRTI5NDg3ODYxMThDMDY1NDUzQjM5M0MyRUExQzg0QworOjEwOTQ0MDAwMDg3MDczRjNBRTA1NTUwMEQ3MTQ3OURENDVDOUUxNzE5NQorOjEwOTQ1MDAwNDRCRkYwQkMwMDlGRkY3Q0I0QkYxOENCNzUyNjFCQzk2RQorOjEwOTQ2MDAwRTlDRkE1REVCMThEOTlFMUY2NkY0OUVDRkQ1RjQ4NjE2QQorOjEwOTQ3MDAwQjhDN0M4ODZBMDlENTdEMTM3RkZGRUNCOEQ0NURFNzI5OQorOjEwOTQ4MDAwM0VBRUZFRjkxMkM2REEyOEZGMkVGMENCRTMxMkY3Qzc4NAorOjEwOTQ5MDAwN0M5NjE0Q0E2MzIzQkU1QTYyQjE4NUM4QUY2RjM3OUVFQgorOjEwOTRBMDAwRTlBMzM3RjI5MTNCNEU0MUJBQ0VEMkY4NjhCNjEyRUE0MAorOjEwOTRCMDAwQzRGNzQ3QjI1NkU3NDkwQjk5NTIzQjJGMjYwRTJDQkZGMworOjEwOTRDMDAwNjFFM0IxOTNBMjNGRTA5N0NGOERCMDVFRTA2QjA5RDgyNgorOjEwOTREMDAwQjMxMUI2OEMwNDQ4QUUwNUY5MjUxREZBRTU1RkIxREY3RQorOjEwOTRFMDAwOTYwMEVCQjExMjFENkE5REM4NjcxMkYzMUIyRTQyQjk5QworOjEwOTRGMDAwMjZENjMxMTZFMzI3NkI2Mjg3MDQ5MUVGMUI1RUY4RjRFMgorOjEwOTUwMDAwMThCMkQ3NEE2MUJGRjg0Qjg4REY2Rjc3RjJGNTMwN0YyQQorOjEwOTUxMDAwMjlGMUUzMUQxQTNGN0VEQ0M0RUFCMzYwRUJDREVFRUUyOQorOjEwOTUyMDAwNzZBODMwRTkzM0IzNDIzOUI4REZGRjM0QzQ1RjU3ODREQgorOjEwOTUzMDAwRkVGRUNFOTZGNDA2RTA5RjRGRjc5QkREMzNBMUZEQTkxQQorOjEwOTU0MDAwRTBGMzE0QkY1QkFERDlBNTZDNkZCMkI2RUZFNTUwMzk0RgorOjEwOTU1MDAwQjRFQkNBMUNCOTA3RjU0QjQzMTFEN0Q3NjczMjQzNDM2NQorOjEwOTU2MDAwRUU0MUI5OTFDOUZEMjA2ODQ3Nzk3MkQzMzc1RTkzOEM3QgorOjEwOTU3MDAwRURDRTNDQjczOTZCMTlEMENGQUNCMDgwM0Q4MTRBRTYxNworOjEwOTU4MDAwODA3NTVGMEI3RDk3MDA2QzA0NThBNjczRTAyMEQxMEJBQgorOjEwOTU5MDAwREIzOTUwREZBQkI3Qjg3ODlDOUVGOTUwQUUwODdBMDkzQQorOjEwOTVBMDAwM0E1QzQyMUY5ODAyREFBRDA2MEIzM0UyRkM0N0IyOURFQgorOjEwOTVCMDAwQ0U5M0IxNjEzQTdENkMwMTNDNjIxQ0NEMDI3ODg0RkQ5MgorOjEwOTVDMDAwM0QxNTgzMEY4NTg4NEYxRTc3Njk5MDdBNUExMzExRkVENworOjEwOTVEMDAwQjE0NDc5Nzc5N0VBQzEyNzREODhGMkJBOURCNzkwRkNEQworOjEwOTVFMDAwMTE3MjQ3ODU3RkZEQzk5REFCOEUxRkVEOUNEMkFGREMwQworOjEwOTVGMDAwNzkwQ0U1MEVBQzgzRTVCM0ZDOEJEQzQwMjRGQUFFRDBFRAorOjEwOTYwMDAwREU5RDJBRDdBQTBBQ0UzQkQ5RTJDNkI4NUFDM0UzQzMyNQorOjEwOTYxMDAwNDlERkIwMEJCRjIxN0Y1OEI0NjMzQjEzODk1RjM2NjVDOAorOjEwOTYyMDAwQ0E4NEY3OTUwNzI1OUUxRjc5MzA4REE5NTAzNUYzNjBDMAorOjEwOTYzMDAwMjI5NThFRjNBOUY0RkNGNDUzQUYxNzcyQjlDNEU5NTIyMgorOjEwOTY0MDAwRkRDMzQxOTU5NEFGRkFDMzExNTQ4QTc5MzQ2ODdDMzdDRAorOjEwOTY1MDAwNTVDRUVCMDhBMTFENjE4Mzc5MDBEQ0YwMUFENzVCMERCNAorOjEwOTY2MDAwRDdDQjE0REY2NDI4QTI1MzkwOThGQ0M3Njc2QkE3Mzg0OAorOjEwOTY3MDAwOTA4RkY1RDlGOUQyNDVCMkRGRDUzOEE0OEJBRjRCNjZDMAorOjEwOTY4MDAwQzgzRkUwNzUwNDM4OUUyRENEODg2N0IzQ0JDMEQ0N0UyQgorOjEwOTY5MDAwRUMwRkIzNDYyN0FCMUFDM0Q0MDhGRjQzMDk4Q0ZDNkUwQQorOjEwOTZBMDAwMTlDNjY1QkY2Mzc0MDdBMUJFQzVFQUQ4ODNGQjg5MDVFNworOjEwOTZCMDAwQkNEREU4NDdDQ0Q3REVFQkI2NzJGRTg4Q0Q0REQwQkQyMQorOjEwOTZDMDAwQkZEOTMxQUQwQkY5NkRCRTk3RUIxREJCN0JCMDZFN0M4NgorOjEwOTZEMDAwQjNCQ0RBODg0Q0M2RkNEQzVFMTRGQzQwN0MwOUUzQ0VFQgorOjEwOTZFMDAwRjY0OUE0NUZBRjlGMEZGNTExRkQxQUNCQkUyMDM5NkU2RQorOjEwOTZGMDAwMkNEM0RCOTk2NjlGQkVERDFGODRERTE5Qzk0NjQ2RDI5NgorOjEwOTcwMDAwM0Y4Qzc3OUIxN0VERjRCMzVFM0JGMTMxNjhGN0VGOTczMQorOjEwOTcxMDAwMDE3QzQzOTc5MUUxN0FDRDMxN0M1RDY3MTE1MzE4MUYyRAorOjEwOTcyMDAwRjVDQTQxOEM5QjZDNDYzQ0MwRjNCODEyM0QzRUUzQkQ4QworOjEwOTczMDAwN0FGQzI1NEVEN0UzMjNEOUE3NUZGRkEwRjlDMzc0RjVDMAorOjEwOTc0MDAwQTlGRTUxQkFGQUI0M0E4RjBFQ0VBODJGRDVCNTFGREFCQQorOjEwOTc1MDAwNThBOTgzMzMwMzMzNzRFRDg3QjdDRkQ1QzFEOURCMTc0RAorOjEwOTc2MDAwRThEQThGRDhCMTQ0NTczRjMyQjg0QTU3M0Y3QTVGODMxRgorOjEwOTc3MDAwMEUxRUQzRjEyRkJBRjZFMzBFNkVENEQ1RTc4N0VFRDVFMQorOjEwOTc4MDAwRDUxNzc0M0RBODgzOEJCQTFGRDVCNTFGN0Y3QzhGQUVDQworOjEwOTc5MDAwN0U0MkNGMzNCQUZBODlBN0Y2RUJFMDQ5QkQzRkQ3QjU5MQorOjEwOTdBMDAwMkYzRjdGNDQwNzU3QjBENzc1RURBNzU4REVEMUMxNTM3RgorOjEwOTdCMDAwOUQ3RkQwQjVCRkM2RjVBMUFFRkU1QUY1Q0ZCQUZBRUI4NAorOjEwOTdDMDAwNzJDRkU5RjkzNTg2Q0JCRjZBRjdERjc0RUY3RDlFRTY4RAorOjEwOTdEMDAwMUY1NThDM0E1MzNFQTMyMERGQjYyQzk0NTgyMkM2RDU5MQorOjEwOTdFMDAwQkJFNjU5NTAwRUU0MTU2QjcyNDhFM0MzRTE0NTNDMkVDRAorOjEwOTdGMDAwQzFCMkQ4MTA5NDY3NTNFNTk5MENFMzc2NjczQkI4N0YwNAorOjEwOTgwMDAwM0Q5MEJFOEIwMzc1QTU0NDhDMUJFRkI1ODAwMzE5ODY3NAorOjEwOTgxMDAwMTNBNzNCNzU3MEIyQ0ZBNTZCM0Y2OEJFQUFBQjRGRjVERgorOjEwOTgyMDAwRTdFQUVBRDNFQURDM0EzOEEzQkU0NEQ3N0U2OEEzNTcxNgorOjEwOTgzMDAwMDc2NzA2QTZFQkRBMEY2RkY3RTlFMEVDRURGMzc1RURERAorOjEwOTg0MDAwNDdFQ0YwRUJFQTQ3MDZFQjc0RjVBM0Y3RDVFQkUwMzExNAorOjEwOTg1MDAwMUQ4REJBRjZFMzBFMDY3NEY1RjlBMTc2NUQ3RDQxRDc0QworOjEwOTg2MDAwNzYxRDVDRDRCRDQzRDc3RUZDRjFBMEFFN0U0MkNGM0VEOAorOjEwOTg3MDAwNURGREM0NTMxRDNBNzg1MkVGNDE1REZCRjJGMzIxMURBQgorOjEwOTg4MDAwNUNDMTVFRDNCNTlGNjI3OTRCMDc0Rjc1QkVBQjZCN0ZGMgorOjEwOTg5MDAwOERFQjg0QUVGRTVBRjVCNEFFN0VGNTlGREQyMTNBMDcxRQorOjEwOThBMDAwRjgwNTNGNTdCQjJFRjcwQjVEQkQzMTA5RUM1QThDNDNEMQorOjEwOThCMDAwQjIxODM3OUU1RjBBRkJBN0RBRkQ1NzVEQkZGNzE2MEY5OAorOjEwOThDMDAwMjNGQjAyNzhBOUM3MkFBMzdERTRBM0Y4NTEwMjI2MTYzOAorOjEwOThEMDAwMDI1RkM2ODExMDQzQkU0MjU3QTE5NkUyNTA0OUE0RUZGMQorOjEwOThFMDAwNDgzNUE5OTgyNzA0NzYwMjAwMDk4NkNDNENCNEE3NjNCMgorOjEwOThGMDAwQzM3NjVCRkFDNTgyMkJCN0RCNzY0MDlGMzg4RjVGMTY0NQorOjEwOTkwMDAwRkJFRjJCNEU0NjdGRTVCOTY5NjhCN0FGNjQ4MTREMzhGMAorOjEwOTkxMDAwMEZEMDdCNzEzREIwM0ZERUI0RUFFMzE5QTJCQ0Q2MDJBMgorOjEwOTkyMDAwRjg4OTE4RUYzNUVCRjY3NENGNjVGQ0ZFNkIyRDY3QTg1MAorOjEwOTkzMDAwN0Q1RkJGNUE5QzQzODJGNTM1NDRGNDdGM0ZGODE1MEE5QQorOjEwOTk0MDAwRDg3NURCOUI2MEZGODBDM0Y4NjA5MzkzRTBFRjM1Qjk3NworOjEwOTk1MDAwMDg3RUI4NDlBNTcyNDc1MzJFOTU4RjM2QjlBOTdFNjcwMAorOjEwOTk2MDAwNTMwOUMxQkI5QUJDMDQwNzlCQTY1M0I5QTdDOTQ3Q0ZFQgorOjEwOTk3MDAwRjczNkNEMjdGODI5RjBBM0IxREMwNzdFMzU5NkNGODBFNgorOjEwOTk4MDAwN0Y4Q0Y1Q0Y4MkJGOENGMDRGOUEwMjU0NzYzNEI1RDNEQQorOjEwOTk5MDAwRjNGRDREREIwOTNFRDBCNDgzRTA5RjM2MDVBOTNDRDhFQQorOjEwOTlBMDAwQjQ4RkNBOUYzNzc1NTBGREExQTY4MzA0MUY2RTBBMTE5QworOjEwOTlCMDAwMUM2QUVBMjJGODQ4NTMzN0MxQzc5QThFMTNGQzZBNTNDRgorOjEwOTlDMDAwMEY5NTVENERBN0E4RkM1NTUzMkZENUJGRDE3NDlFRTBEMAorOjEwOTlEMDAwMzM1QURDRjY5NTYyNDk3NzZGNEFDMDhDNTUxMTNGMDhCRgorOjEwOTlFMDAwRkI3MDE2REFGOUM4MUMyNUM2Q0Y3NDc2N0U5NEJEMURBRgorOjEwOTlGMDAwNEQ4RjRGQjQ3MThDOTU2MDJFNjJGQzcwNzBDRTlFOTYyOAorOjEwOUEwMDAwMDgzRkVCMkQ2REJDQ0QzMTJDNjAwNUY5RDY2Q0UwN0VBNgorOjEwOUExMDAwNkQ3MzAyQTMzQzZFQTZEOUFGMkIzNEJFNjQ0OURDNkVENQorOjEwOUEyMDAwNURBRUNENkI4NUM2RkY0NUM4OUZCOUM0OUY2RjVDOEQ4OQorOjEwOUEzMDAwNUYyMUZDQzY1MTYzRkMyNzg4M0YzMzBDMDFGMjlGNkQwOAorOjEwOUE0MDAwQzExQ0I0OUZBQkM3RjgzRjQyQjk3RUI2N0VEOUFCMzREOAorOjEwOUE1MDAwOUVEMzRERTc4RkQ1RTY1MEYyOEQxODFGNzk0REE2NzgyRAorOjEwOUE2MDAwREU0MEUzQUREM0YyQ0QwN0FDM0Y3QzNBMURFREVERTkyRQorOjEwOUE3MDAwREZDODdFQzREMzlCNDZGQjdDOEMxN0ZDQTU5OEZCQTc1NAorOjEwOUE4MDAwN0YyOTM2RThDQTc3QzZGOEJGQzI3OTdFNjVBRkJGRDlFRAorOjEwOUE5MDAwMDBGM0ZGNkFGMkZBQTc2RUNCMENGQkQzQjNEMTI1MDUxNgorOjEwOUFBMDAwM0Y2ODBFNTM4RDk0RDdDOEJDQUY2NDQyNTdENzgzODFBQgorOjEwOUFCMDAwODVGMDhEMkM0MEU1NzdGMkZDMTc3MTVEMzU2MDg4MjNDOQorOjEwOUFDMDAwRUMyRjM1MEZFOTZGNUREMUYzOEExOUNGRTcxNTMzREUzRgorOjEwOUFEMDAwQTAyQkE1QjE3RUVCRjgyMjlDOTc5N0U2RjVFNjg0NkI2OAorOjEwOUFFMDAwNzI3MDVENjI1RTk1NjM1NUVEM0U0NEVGMkU5Q0RGNTdDQworOjEwOUFGMDAwMkY3RDcxNTIxQTFFQzZCRkYwREIzNzU1NjhGOTI4RUI2RgorOjEwOUIwMDAwMjUxRTk3MTNGNjlBOTZDRjIyRkM4RURBM0JBNDIwREExNAorOjEwOUIxMDAwRUIwQkMxREZDMTczQTZGNzM0RkJGMzNEMkJEN0NGNjc0NworOjEwOUIyMDAwRUI4RDI0Mjc2QkE1MTgzNzlFQzc5REFERkYwRjFCQjI4OQorOjEwOUIzMDAwMzVCNDY3Nzg1RUQyODI4OTQyNTBERkYyQUYxMkYxNTlCNAorOjEwOUI0MDAwMkRGNDYzODA3RThBQzY2NkQyN0E2QTk5QzU4QkZBQjg4QworOjEwOUI1MDAwRjY5MDc5MzdGMjZCMkQ5ODdGRTg2NzAxOUZFNDhDNDc4OAorOjEwOUI2MDAwM0U5OTIwMDc0QzYwMDdCRjY5MDhFNjQ4NzQyRUJEQ0NCQgorOjEwOUI3MDAwMjRDMUZDNTYyNDAxN0YwQzFCOTgwRkQ2NkFGNzE5QzQyOAorOjEwOUI4MDAwNzNFMDJGMzdGNkY3RDlDRkM2RTc1MjFDRkZGMDA0MTU2NAorOjEwOUI5MDAwRjFENTYyRTBGNzk4MDJCRjkyREQzQzNGODY4QjY4Nzk5MQorOjEwOUJBMDAwRTIxODhBNEYzMkM1RURDNkY4NTJCNTc2RUZBNTUzNjY3NgorOjEwOUJCMDAwOERDRkY1MjMzRkU3OEVFN0ZCRUI0RDk3NzE3QTkwRkE1NworOjEwOUJDMDAwRDU5RkQ3Q0MxOENGRkREMDE5NUFCQkVBMjNBRjY1RTA5QgorOjEwOUJEMDAwQkRBREI1NUQ0NkYyNDM1ODYxNEY5RUNGREVDRjdBMUFEOAorOjEwOUJFMDAwQjdERTk5MTVDMUQ3RUIwRTlFRTBGOTFBQUMyNzJGMzJEQworOjEwOUJGMDAwOUZGRDU2QUQ1RkMxNDdCMkM5RUVERjZEOEI5QzFGMUY0NQorOjEwOUMwMDAwMUZGODdBMEVFMkUxQUI3OEUwRUJFMUM0RDcyN0QxQ0VDMgorOjEwOUMxMDAwOUU2NTU2RTM2RTg0QjIwNzUwMTQ4MkQyRkYwMzI3RTU5NworOjEwOUMyMDAwMjc4OTNDQTVBNUNDNDdFNTBBNjAwM0U0NjM1RkUwMDExMgorOjEwOUMzMDAwMTNFMjdGMTVFQkEwRTc2QjRCNkUxOTgyRjAzQUQ2NUIwRgorOjEwOUM0MDAwRTU0MjNGQTJCREY5MTUxN0NDNzJERUY2MDdBNjYyNUNBRAorOjEwOUM1MDAwNzY2RTcwRjEyQjU4Q0VEOTJCOUQ0NEJGMTVGNkM1MTJFOAorOjEwOUM2MDAwRTRFMzFFQTlCRTZEMzA4Q0I3RTBEOThBQjYzNDc4M0VFNQorOjEwOUM3MDAwNEJFNkY0NjBBRjczN0EwMEJGNzhFNTg0NEJENzA5RkJGRAorOjEwOUM4MDAwNjAxNUVEODM3ODJGQUQ0Mzc2NENEN0VEODNEQThEQ0MxQworOjEwOUM5MDAwMkIyNTg1RjNFREZCRjY0NUM5QUQ3RjRBNDMzRjQ4RTlFNworOjEwOUNBMDAwQTVGM0Y3NzU4N0NEMDk0OEU3NTU4Q0VCRURCMDFEMjg3NgorOjEwOUNCMDAwRjQzNUI3MDM2RTA1M0IwMERCN0RBMkYxRjMyNzE5OEM2OQorOjEwOUNDMDAwRUUzNTdDMjI4MTYzRTcwOURCOTE2Qzg4REZFNTE5MUVBNAorOjEwOUNEMDAwRDZCQjlGMTg4MkM1OEVFMUE0OTc5QjcxQkVBRkJBRTYzMgorOjEwOUNFMDAwQTkxODJGQkIzNUM5RTI5NkIxM0UzRTM4ODQ5RkEzRjYzMgorOjEwOUNGMDAwQzk3Nzc2MzEzNjFDRUZCQURGQzhFMzRGRDFGMzkyNEEwOQorOjEwOUQwMDAwNUVGRDJCREEwRDY2MTMwQkUwQjkwNkVDNkI1NjhDRkI4RgorOjEwOUQxMDAwNzlCMDg5RjY1OTBCQTIxNkUzNjY5NTNFQjVCRkZFNUI5NgorOjEwOUQyMDAwQjU3RUJCQkVFNkZFNkYwMEQ2ODNGNzdDMkUxOUM3QTlCMQorOjEwOUQzMDAwOEQxM0MzQzcxMUZBMDNDNzIzRjk5MUMyNzRFM0VEMTk1OAorOjEwOUQ0MDAwQ0ZGN0Y1OUI3NjJGQ0RCRkQ5MTA0RkYyRTYwRjQzRkQyRAorOjEwOUQ1MDAwQkI5MUVGNDREQzQ3Rjg4NTVEOTkxRjY3OTFGRjdFQTFCOQorOjEwOUQ2MDAwMjUxREVENzNFMDVGOUVDNzM4OTlDQkE1Mzc4RDZBMDAzRQorOjEwOUQ3MDAwRTEzNzJCMzIyOUVFMkZFNEVERUMxMjFFMjc5QjJERTI2QQorOjEwOUQ4MDAwNjI2NTUxNzFCMUE4NzgwQzJCRUIzRjRFQzY5OERCODgwOQorOjEwOUQ5MDAwRTM4RTY0RUYwOUZDNTAxQ0U2NDg5OTQyNzQwRjAwREQyNQorOjEwOURBMDAwMzFDRTdDNDRGMzRGMkI2MkI5NUY5RTUwOTI0OEVCNEMwRQorOjEwOURCMDAwQjgzNjhCRjhDRDkxQzg0Mjc0MEU2NTk3ODlERjhFQjJBNAorOjEwOURDMDAwN0M1QjQyODQ5Q0I4NTc4QkFGNkUwMzNCODg0NUM0RDVGRgorOjEwOUREMDAwRUYyRDZDQjA2MEJFQzE2NjFCQkZGRjc4NUY2NTRDNUQ0OAorOjEwOURFMDAwNjQ3RTdDRTI2NDlFRkZGMkMzQzkxNUFDMDRGMDk3NjcwMQorOjEwOURGMDAwMEI1NjkyQkFGNjJBMkFBRTQ3RDJENjM3REEwOUY4Mzc4NgorOjEwOUUwMDAwNjBENzNFMkQ0RUVBQjZGMEI4NTQxNUU5NkI0MUY3MkJGQQorOjEwOUUxMDAwRDVEN0NGMjhDMThEMzFCOEZFMjQ0NkZCRDBCRUMzNEE2QQorOjEwOUUyMDAwRjI1NEVFRjA4NjMwNTU3QkQ5RTRCOUVGMjIzRjMzQzVDQQorOjEwOUUzMDAwOTc4QkUzNzQxNkM3MzAxQkI0RkZBQUQzNDRGRUZENjFCMQorOjEwOUU0MDAwQzM5MjFGOTg3MEZGQkQ2QjY2NzhERUQ5NjE0RjUzNTA4NworOjEwOUU1MDAwNUY3NDdDM0RBQThBNEFGQkM0Njk4Q0M3Mzk2MzBEMjBCNAorOjEwOUU2MDAwMjhGMjlERUM4OTdGNDNBMjY5RjdENTRDQUVBMzkzM0VCRgorOjEwOUU3MDAwMDIxNDc3NDhBQzhCNTFEQ0NEMUI2QjAwOUZBQ0MzQzA4OAorOjEwOUU4MDAwQ0U5NUMzRkNGNkRCM0MwRjhEMjMxNkY0QzlCOERFQTFEQQorOjEwOUU5MDAwOTNGQzlGMjI3RjE1QjM3QTgyRUYzM0Y5RUE3NkMzRjhGOQorOjEwOUVBMDAwRjcyNTU4ODg2RjNDQTkwNkJBM0ZDOEZFNkFBM0JDMUZCNQorOjEwOUVCMDAwNUY5NzYyNDQxNUY3NjI5OUZGRENGODA4QkJDQ0U3MzI4NAorOjEwOUVDMDAwMTgzMUZGQTdDRDA0RjIzQjBGRTMyODMxRkNDQzhBNzE5NworOjEwOUVEMDAwN0JERjc3M0U4N0U2Rjc4RDI2NEY1QjVEREU2RUJDODhDNQorOjEwOUVFMDAwMzIyMDVFOUQ0QTZGNUZEQzg0RjgzMjlERTI3RDAyQ0ZCNgorOjEwOUVGMDAwOTFGNDc0MTZFQkU4RTkzNzQ2RDJCMzA0RTgzOTI2OTJCOAorOjEwOUYwMDAwOUU1RUU5NkFFOEY5MEUyNkExMTU1RENBQzc4MTRBRjU4OQorOjEwOUYxMDAwODFBQTQyQUVGRjMwOTUyRTlBOEYyQkNDOTM2Qzk4MDc3NgorOjEwOUYyMDAwRDNFOTkwMEQ0OEQ3Q0U5OEI0M0M4Q0RCMDkzRTE2N0MyMworOjEwOUYzMDAwREQwRjNGQUYzRjhBNzIyNTVENzFFMjc5QjJCOTNBODY5MworOjEwOUY0MDAwQ0U2NzA0N0YwQkJFOUU1RURBQzdERjhGOTUwMjNFMTc5OQorOjEwOUY1MDAwREE3QzUzNTFGNjQ0RjMzN0M2Q0YyMkY5Qjg3NjQwN0UwNworOjEwOUY2MDAwNjdDRUM4N0QzRTBCRUM4REI4MDRCNDkzNEVFREVEODgwMgorOjEwOUY3MDAwRTBFM0RBRkEyRjE0MkU3NzJFOTZDNzE0ODdFMzdEQjMyOQorOjEwOUY4MDAwQ0EyNEY2NDEyNEJERTFGRjA3QjlEQUZBQzg0RTUyQzgyNworOjEwOUY5MDAwM0YxMzc4QkQ1MkZDMUJCRkQzOUM4Qjc2REYyNkJDRkZFMgorOjEwOUZBMDAwMDhGODZBOTdEQ0RFNDExODA3QUIzRjcxMUIzRTZGRDNBMAorOjEwOUZCMDAwRUUyNTA3RjI0Q0RDMUVEM0Y2OTVFODZGRDlFNENBNjlBQQorOjEwOUZDMDAwQjhGRkVERTNDRkM0MkU4Nzc2NUZBNTE4NTQ0NDRFOUJBRgorOjEwOUZEMDAwQkFFNERGNjg5RjFFOEY2NUY4OUUyM0IxQkJFRTA5REFGNQorOjEwOUZFMDAwNzcyMzE4OUUyNzdFQjVEMjNGMTRDRkY3QjcwMDlEM0U0QQorOjEwOUZGMDAwQTBBNEVERTAyMDAzOUQ3REY1MENDMjdEMDdDODc1RjE5RQorOjEwQTAwMDAwRDJFRkUyQ0Y5OTU2MUYyNEY4MEYxMzg2NjlFNzhDNUVEMgorOjEwQTAxMDAwQUQ3RDBGQjVERjYyREE2RTg5QzE3MTMyMkRDRTNEMTE5MworOjEwQTAyMDAwRkM1RkFFQzVFMzVCNEJDNEZEOUYxNjE1RjNERjVBNEJENworOjEwQTAzMDAwQjgzREZCNTBEM0JFNDkxRjY1RTM3QzNBMjY3RDA0RjM0RgorOjEwQTA0MDAwNDk5QzE5NjQ3RUUwRUI5OERDODA4QUE5MjM5NjZGQTY3MAorOjEwQTA1MDAwNDg3OENGODE4RDYyMUQxOEE3QzdFN0NENjNDMkZEQUZEOQorOjEwQTA2MDAwRDRGQUI1QTA5RDAzRjRCMzZDMENBODkxNzJENjYyOTA5QgorOjEwQTA3MDAwRkNGREU1QzlGQzcxODI0MkZCRDVCMjkxNTFCREU1QzgzQQorOjEwQTA4MDAwMjNGNEZEODBDNDJDQjc4NEY5RDU5NjhEREIxOTlFREZBRgorOjEwQTA5MDAwNTg0M0ZDNzk1Mjk2NTc1QTFBRDE2RkQyNEM5ODc3MDQ4QworOjEwQTBBMDAwNUYwMDdGMDVFMjQwMkU1OUY2MDA2MzE2MjIxRDYyMjhFQworOjEwQTBCMDAwNUUxOTNERUVBQ0U0Q0EyRUM1MzEzMDlGNDRGMzFCRDM4QworOjEwQTBDMDAwRjg0REYwOEQ1ODI3REQ4MDg5RjgwRTQwRDUzMDBCRTkyQQorOjEwQTBEMDAwQzlCNjQ2RDM2RUI0Q0Y3Nzk1QzQxMzVFQkU0Q0FBOEM3NgorOjEwQTBFMDAwNjNGREQ4QTdBMkRDMDU3QzEwMzBBMzNGNkRBMTcyMEZFMQorOjEwQTBGMDAwRjhFMzgxMTFFODRGQkIwODdFMEFGQzcxMkNGNzgxM0YyMQorOjEwQTEwMDAwOEVFNTMzRTA4RjYzRkRCM0UwOEYyM0ZDMTNGMEM3MTFCRQorOjEwQTExMDAwRUUwMDdGMUNFMUZERTA4RjIzN0MwMEZDNzE4NDdGMEE1MAorOjEwQTEyMDAwRkUzODk2MDdDMTFGQzdGMkU3RTA4RjYzRkQyMUYwQzczNQorOjEwQTEzMDAwMTEyRTM3MDM3RkUwN0E3MjAzQUVCOTQwRDdGNkJCNEREQworOjEwQTE0MDAwNUVDQzMzRkM2RDA5OTdBNzQ3QkRDMzEyREQ0MDdGNkIyMgorOjEwQTE1MDAwQUU4MTYyRTVENjM3MUU2NEI4MUVBQkNCNDBGN0NDMzY3NQorOjEwQTE2MDAwQjkxRTY0QjdBMDlGNUI2QzI3N0JBQkVEQzdEQzhFQjFEQgorOjEwQTE3MDAwMkEwRjMxOTQzQkJCQTQ0MDFENzNDMzc4MjUzN0Q1RTIyOQorOjEwQTE4MDAwQjk2MDk2NkI3RDY1MDJDMDQ3NEExNkVGQjRDMEZFQzg0MQorOjEwQTE5MDAwNTFFN0NDNkY4RTgwNTVCQjY3RDU3M0NFMzAzQzM0NkZBMgorOjEwQTFBMDAwQjcwMjlFMENGQkU1QzE1Qjc2RTIxNTIzOUMwN0U2MTcyMAorOjEwQTFCMDAwQkY1NUIyQkMxNkYzRUE0M0MzMThEOTIzQkQ5OTI2Q0FDQQorOjEwQTFDMDAwRTM1OThBRjRDQUM2RjlGMzczQzBFQjU4OEIwQkNGMzk0NQorOjEwQTFEMDAwODdBQUUwMkQ0OUQ0OUVFMjRDNTdEQUZFQjcyNTJBM0RFNgorOjEwQTFFMDAwOEY3RUVGNzJFRDBDODU1N0Q0OEVDOTk3RTkwRkVCQTVFMgorOjEwQTFGMDAwQ0JGNDYzOTFFNjU5QkE2MUVFNUI4RDlBOUM0QUI2OTFCNQorOjEwQTIwMDAwOUM2QUM3QjgwRkUwQkRERENBQ0JGQzUyQkVDRjhEQTU5RQorOjEwQTIxMDAwOTUwRjRGODBGMkUxMDk5Q0FFRURENjgwQjMxMkM3MUZCNworOjEwQTIyMDAwNjNBMDNDMDdENjk4RjlDRTMwMThFRkNFNUYyOTBDRjMyNworOjEwQTIzMDAwNDUwNTdGOUVEMUY4MjA3QkE4OURFQkVCN0IyQzc0Q0U0RgorOjEwQTI0MDAwN0ZDREQwMUZCNzI2MDA5Q0ZEODREQjhERjkxMDVCOTk3NAorOjEwQTI1MDAwM0IwNkY5MjRCMENENDA3OTkxM0YyQTFDOUUzMDA3OUFFNQorOjEwQTI2MDAwOEYyRTdBMjEwMUU1RkE4QzA5N0MxRTQxMkQ4RkE4QjkyOQorOjEwQTI3MDAwNkRGOTUwOEM1MzdERjUxNjk3ODc3RkQzQzZEOTZERUM1OQorOjEwQTI4MDAwQUUyNzdBMTZEOTE4Q0ZDQkRBNEVGNjQ4QjMwQjg4MEQyNQorOjEwQTI5MDAwM0FEMzkwQ0E0QjkzRDFCOTAwREI5OUMwMzBDMEJDNkRBMgorOjEwQTJBMDAwRDNEN0UzMkRFODBGQjY5QzM3NEZFNzc5QjVERDY0OUYzMAorOjEwQTJCMDAwOThBQzdFNjczQzNDREYxRTMwOTA1QzY4NTE2RDk0MDcyMworOjEwQTJDMDAwQjdENUU2RTlDMjdCRDMwMUE3ODFGMjY1QjdFNjE5MDhFNQorOjEwQTJEMDAwOEZBREI2MUI4MkU4MDcyODUyNzMxREVBQjFBMDczQkY4OQorOjEwQTJFMDAwMjUxMzlFMDdGMzBDOTRGRjE4RjRDRTlEOEU3MEMwQ0ZGQgorOjEwQTJGMDAwQkY0NzQxM0Y1OEVGNEZBMEZCRTI1QjU5RUZFQkUzQjBBNAorOjEwQTMwMDAwQkU5NkRCNjk2RDI5RkY3NTI0MTZFM0UyRDczQkRERkNDMQorOjEwQTMxMDAwMTg4NkE5OTgzNzQ2Mjk2NDA2RjRDNzdCMzZDNkUyM0NGRQorOjEwQTMyMDAwNkE5OEU2RUYwNkM4QkY3NTk4MzlGREJFREI3OUFENzM1NAorOjEwQTMzMDAwMThEOTE5MTFFNzVENjY4Q0UxQjkyRDZFQTgxRjZCRjM3MgorOjEwQTM0MDAwNEM0N0ZGNTNCMTdCMkM5ODE3RDhFQUY0NTgxNkQzRkEzMAorOjEwQTM1MDAwNzkzRTFCRTU2QjQwQkYyRDRFMDNGOUMxNTg3RjBCRUVENAorOjEwQTM2MDAwRjc1NjQ2Rjk3MDgzQjVGQTU2REI4MzlEODgwRjY1MTk1OQorOjEwQTM3MDAwNjM5OTJBQ0U0RjA5NDQ5RTI3NUE4Njk3NzVBOUIwOEVCNQorOjEwQTM4MDAwRjZFNTA5QjQwRTQ1NzIxM0NDOTYyOTM0RUZDMTZBMEM3OAorOjEwQTM5MDAwREQ5MzdFQzg1NEREODVGNkU0NjBDQkFENzRFRTk1NUE0RQorOjEwQTNBMDAwQTdFOENFQTUwNkY5RjU3MEYyN0MzRDlDQzg5NEYwQjlGQgorOjEwQTNCMDAwMTZGMkQ5MDQxMTk3RDNFMzJEMUExRkE5Q0VENkI3NzA4MAorOjEwQTNDMDAwRkVBOTdFQkFDNDdCQzlGQzFGNzE3RTJGQkU4MkUxM0MxMAorOjEwQTNEMDAwNkQzNENGMTREQjkyMEFCNDlCOTI5OUFGMTlGOUVGMUYzOQorOjEwQTNFMDAwOURFNzU4RTc1QzRCMjY4QzNGMzZDOTQwRTZEMTM4RDYwRQorOjEwQTNGMDAwQkIxMUZCRERBQUYxN0I3QjI2QTc2Nzc4NUZDOTYyNUY5MworOjEwQTQwMDAwMzY0RDQ4QzZGMzA1MDMzODc0RTFGRTMzMDNFMEQ4RTk1RQorOjEwQTQxMDAwQ0UxNzEyNzQ3MEY2RjZDMUJBRjYyMzc2MENEM0Q1OEYyOAorOjEwQTQyMDAwMEM4RUQyRDU4RkRFRTdEMUMxNjMzQTRBNzVFREM3MUREOAorOjEwQTQzMDAwQUNENEMxRjlBMTE5QkFGNjA1NUQ3Mzc1NzA1MUY3MDI3NAorOjEwQTQ0MDAwNURGQkYxQzc5N0U4RUEyN0Y0QUNEMkQ1NEYzQ0Q1QTAyNQorOjEwQTQ1MDAwODMyN0Y1RkU4QkFFQkRCMEVGQTNGNUUzREQxM0I4N0QyQQorOjEwQTQ2MDAwNzFCNTc2QkREOTM1NThGN0REOUM2OEJGMjFEQUVFQjdGNgorOjEwQTQ3MDAwN0NEM0EyNkU0NDdFNzY5ODg4OUYxNUQ0RTc3ODBFN0RCMworOjEwQTQ4MDAwMzdGNzlGMkM5M0REMkFFNTM5NkJGQzU4NTRFRUREODRCOQorOjEwQTQ5MDAwRjJCNEMyNjEyMUJEQTBEODc4M0JDNTM2OERFQzk1MjFDMAorOjEwQTRBMDAwM0I0Q0Y0M0QxRkM1QzlGQUVBNjM1MTNFMzcwNTI2NjVBQQorOjEwQTRCMDAwNjU4N0U3NkQ3NTZFNjdCODdGMkIxQ0QzMTlFNjI5ODkxMAorOjEwQTRDMDAwRjcxNUE3OTdGOTMxOEYxQjNGRDI4Mzc2OTIzMzQwRUQ3MgorOjEwQTREMDAwQUMyQUJDMUZCMThFQzMwNjAzQjNBMTFDMDczRjBGRkRGRQorOjEwQTRFMDAwODM4MUZDM0FFMUNGMDlGRjZEMjBCRjRERjg2QjQzMEMyRgorOjEwQTRGMDAwMkMwNkNCREQ1MkNGNkRFOERGRTdENUJGNTUzOTg4OTEwQgorOjEwQTUwMDAwNUZCNzBGRjlGNTNFQkMwNzhFRkVEQzU4NkU2N0I1QTU0OAorOjEwQTUxMDAwQ0M1MDMxREVEMzlFRDlEMTM1MENFNzkzNkNBMDM4MkFDQworOjEwQTUyMDAwRDhDREVFQjkxMUY2RTJEQjlBRkU1MTg2QjVGN0EwRkU2MgorOjEwQTUzMDAwNkI4OEI3QTg2ODJGMjk5NkREOTMzRTAyN0NFRDMyRjYzMgorOjEwQTU0MDAwM0M4REYxOEI1NkM5QjlCQTAzRTVFMkREMzZDQTBGNzkwNQorOjEwQTU1MDAwNDhDMzlCNkEzNzE0NkM4NDdFM0I5QUJEMEFERUY3RUZEMgorOjEwQTU2MDAwRDhDMkRDQURCODNGOTIyQTM2QzZDM0YzRUNGNEM1MDZCOAorOjEwQTU3MDAwMEMxMzhEQzg2QURFODhFNUIxMDlGQzNDNjg2NERFNkVBOAorOjEwQTU4MDAwNDMyMkQ0OEYyRUFDOTg4RjcxMzFEOUI5OUJGQ0Q5ODFERAorOjEwQTU5MDAwRjg0OTc2RUM2MEI4MUU5NkE1OUM0NEJFNDJFQkZFMjJCQworOjEwQTVBMDAwNENCRDIyMDFFODBERTM1QTkxREUxMjk1ODQwN0VCNzk0OAorOjEwQTVCMDAwNUJEMDhBNzAxNkM3OEJENTJCMDU2MzI1NkVCNzYyN0U3QworOjEwQTVDMDAwNUQ0NUMyMEVBMkFGQjA2N0QxQ0VGNTczN0ZGNzZERTRFMworOjEwQTVEMDAwQTNBNDk5N0FCQTJBOTZCRDg0OEZBRDA2QkUyRkRBRTM3QQorOjEwQTVFMDAwRDUzNzUwM0ZCNzY3NjYyNUI0QThFMTc5MEFCOUYyNDc3NQorOjEwQTVGMDAwQ0QwRTE3Q0Y4NTVDOTk4RDM5MzhDOTYxRkIwNkY4N0M4MworOjEwQTYwMDAwMDdDNkU3QUNDQTc2QkFFNzY5RERCMDlEMjE1RjVCRjFBQQorOjEwQTYxMDAwNTYzQ0Q5RkIwMUQ1NDdGQUMzQTdDQjRGQUIxQTM2REY1RgorOjEwQTYyMDAwODJGQUZBNUM5Mjg3RUM1OTZCRTM0RjY5N0VEMTc4QjM3QQorOjEwQTYzMDAwRjZGMDNDQjU4MUYwRUFDODc5OTRGNDNCMDg2MDE1RkQ2QQorOjEwQTY0MDAwRkUyMzI5QjZCQUM4QjhBODI4RUZEMkZDMTNBM0M4Mjc5RQorOjEwQTY1MDAwMDI0RjAyRjVEOTM5OTFBRkU0OERFNUYzOEJFN0YwRDFFNAorOjEwQTY2MDAwOUMwNTM0QkZEQjkyM0Q4MzJFNjc2RjVCQzFERkY0NDdFRgorOjEwQTY3MDAwRDA3RDhCRTJCMzIwMUVEQTJFQ0M5OTRFRUI1NjY4MzM5OAorOjEwQTY4MDAwQjBBRDVGRTdFREE2NzhCM0U2MkZEREE1RTFCN0I1ODQwMQorOjEwQTY5MDAwRTM3Mzg4ODlERjMzNzAyN0NEQTRFRkE0MERDNkY4NDg5MworOjEwQTZBMDAwNDEzODVFMzJBQTk0RTczN0JBMDM0Q0U2RjFCRUJFRkNFRAorOjEwQTZCMDAwNzZDM0M1NzEzNDY3MTVFRjFGRTA5OTIwRjI2MzFBRTM4MgorOjEwQTZDMDAwRkEwQzlBNzQ2MjNFQ0JGMDc2NDU5RjBGQUZFOUYzMzRGMworOjEwQTZEMDAwRkUzQkM4N0Y3REZEODgxRDdBNzg2NDMwRUFGRDAwRkI3MworOjEwQTZFMDAwMERFQTdCQjQ3NzI5OUVCMTRGNUZGRjE4RUE2RDkwMTM5NgorOjEwQTZGMDAwNEIzNUJEQ0RCNkYzRkMxMjBCQ0NFODIyRDdCNzYxRkRDQworOjEwQTcwMDAwMDdGMjYwNTY0Nzc3NDUyQ0Y0OTM1MUEyQ0YzQjQ5OEIxMworOjEwQTcxMDAwNkMwN0Y4RjNBQzM0RDBCRDEyMTFERjExNzhGN0Q1MTlGRQorOjEwQTcyMDAwOEMyNkUyN0Y1NTc3MEUyN0UyMzlEMUYyNUFCQUU3Q0M3MAorOjEwQTczMDAwN0FEQzU3MTVCMUIxMkFDQTU5OEM3N0Y4Q0REQzdGRjc4RQorOjEwQTc0MDAwODMzRjczOUZFMkZFN0QyREZBNUY1RDMyRTU2MTA5N0FGQQorOjEwQTc1MDAwNDZEMzdGNkY5RjNERUMyQjJGMjUzRkJBQTcwMEZEN0E5NAorOjEwQTc2MDAwMUNDRjFGMzE5RTg4Q0I2NDk3RkJBNzYyM0IxMTlGMzk5QQorOjEwQTc3MDAwM0I1RDc5NDU1MkMzRjExNjExM0Y3ODE4RjcxOUI0REJFOAorOjEwQTc4MDAwRUE3RUJCRkUyOENDRTNFODcxMzNDNTRBQTZDQTZGNzRFMworOjEwQTc5MDAwMzU2MTlFNTU4NjQyNzJDRTM5N0VGNTBGRDA0RkFGRkNBMworOjEwQTdBMDAwMDNENDYzNUM1MjU1MDc5MUZEREU2NUE0Nzg0MUE1QzZDQworOjEwQTdCMDAwRUY5NTlBNUYyNkUyMzIwQkI1NzlENzk0MEE3QjI4MTA4MQorOjEwQTdDMDAwQzNGREZGNTAwQ0RBQjlBM0Y3ODE4Q0Q2RjM0QjJDQUY0NQorOjEwQTdEMDAwRTc3MUJBMzExREQxRjU1RUNBN0YxQUE1RjEwM0U2QUQ2NgorOjEwQTdFMDAwNTVBNDYwQkExODg3M0I5ODk0RTgwNDNBOEY5QkRGNzNBRQorOjEwQTdGMDAwMDQ1RDhDQkNENzVFODk0MUJCRUIzOTJCRTc4RjY3MzQ5NgorOjEwQTgwMDAwM0IyRjg1NDk2RUNDRUY0RkQ5Njc3MzA3QTE5RDVENjZERAorOjEwQTgxMDAwQ0Y3NUMzM0FEQ0M3MTQ1RDlFREFEODQzN0EzODhGNDVDQQorOjEwQTgyMDAwQzA5OTM4MEYzREJDNERBREM3QTM2QkI2QUQxNjU4MTFERQorOjEwQTgzMDAwOTY3QzQ3QTk5NjQ3OTJDMzcyOTBGRkE2Q0FCNjdDRjQ0RAorOjEwQTg0MDAwQjMxQTJBNkMwQ0YxNkEzRTMxRTJGQkREMjg1N0RFOTIyNgorOjEwQTg1MDAwMTlFQTBCNjdBQ0ZBNDAxNUJDRUY3QzNERDFEREFDODY0NAorOjEwQTg2MDAwRTlGRjBDRjhEQkE4NDcxRUJFRTg2NkFEQzY3MEZDRUIzRQorOjEwQTg3MDAwNTlBMDY3MTY5RDRGM0JBOUJFMDNFODhBRjA3RUYwQkY0MgorOjEwQTg4MDAwQjNFODdDM0E5NzlFRkYxNEZDNkY4NDBGODJGRjhERTUzRQorOjEwQTg5MDAwQ0ZDMUZGQzZFNzg3QzBGRjQ2Rjg4NzkzMkIxRUM0QjgxOQorOjEwQThBMDAwRDk3QkQwMEVGOTIyMjZGRjgwNjUzOEM2Q0I2RDMyREQwQworOjEwQThCMDAwREY4OUU2QzdDREY1MUZEQTZFMDQ5OTM2Q0E5NTNDMzNCOQorOjEwQThDMDAwMTlGOUUxNzY5OUVFNDU0MzI3MzNEMUJGOEQ4Q0JGNDUwOQorOjEwQThEMDAwQzYyM0MzRjFCNzFFNDlDNERGQ0M0MDlGNTE5QTdGRDkyQworOjEwQThFMDAwMTc4N0YzRjMzOERDQjdGN0UzMTVGRDUwOUNGMzkyN0UzRQorOjEwQThGMDAwRkFFMjlEOTZDMDQ3QjkyOEIyMjQxNjA3Q0YzRkJERkJBOAorOjEwQTkwMDAwREY5RjQyN0QyNEE3RkFGN0UyM0U1OTUzRjQ4MTg5REJBOQorOjEwQTkxMDAwRTdGQzVFNTZCQUI2OEY3NjVBNzkzRTZBQkE5NjQ3MTQwNQorOjEwQTkyMDAwMURFNzlDM0NFNUM0NkRDOTgwQjIxNzdGN0VEMzQyOEM4NQorOjEwQTkzMDAwMTM0Q0JFRjU0NEMxMTA4MEJGMjlGRDI1ODc3Rjc4RTIwNgorOjEwQTk0MDAwRjkzNEMwRDNEMjg5RUQxQzdFRThDNEI5NzQzN0U2NzFGRQorOjEwQTk1MDAwRUM1Rjg4RjlDMzhFNDRBRTA3Nzc2QUY3OUIwNDdFOEY1RAorOjEwQTk2MDAwNjlGQjY2NURFMzEzQTRFRkMxMUU2MTg4OEY5NjE0MUYxNworOjEwQTk3MDAwRTlFMUNGOTM3QTFEOEJEMUFFNEJFRTRENTk3MjE5QkRFMworOjEwQTk4MDAwQjFBRUYxMjk3QTdGQTdFNDNFMTVDNDc5NEZCMEYwQkM4RgorOjEwQTk5MDAwNTU0RDJGOURENTc4NTdFOEE1MDYyQjA3QzU3QzE4NzMxNAorOjEwQTlBMDAwRDFGMzg3QjQ3ODExRjNBNkQxN0I4OTU2MEUxRjc1OTQyNQorOjEwQTlCMDAwOTJGRUJBQkY1MkZEQjVDQUNGM0ZDOThGM0VFQTE4RjUyNQorOjEwQTlDMDAwNURDQ0NCNkI5OUFFRDBCOUU0NDMzNjhGMTVGNURCRTdBMAorOjEwQTlEMDAwREFCQUEwRkYwMEM2MDkwMjUzMkQ3NDVFQzQ5MkU2RDMxMgorOjEwQTlFMDAwQkU0RTEwRTMyNEQ1NTIzRTQzODIzNjlGNjNBNTMxMjFFQgorOjEwQTlGMDAwOEMyM0I0NTQ1OUY2QTAxQzdERDAzNjhDRkE2QjI5MzFDNworOjEwQUEwMDAwMDUzMDdFMjNFMDhEQTUzMDFGQzA2N0JDMjMyMTEzNjE3NAorOjEwQUExMDAwMjFFNzQ0N0M5OUUxRTkxQ0Y0NUJBOTJEQkI1MkU0NDk5MAorOjEwQUEyMDAwNTg4QzY3MjJFRDcwMUJFQjI2RkU3MTFCNTQxOUVEQzg4NAorOjEwQUEzMDAwMEQxMzM5NUYxNTMwRjc3QzdDNkU5MkVBMDNDODhDQjgzMQorOjEwQUE0MDAwMEU0M0U0M0FENDJBRkQzQUQ0QTlCQTc1NDgwRDk2MTBCQgorOjEwQUE1MDAwREE4RjJENTM2MTFERDBGRTk4QkQ5OEU2MUI0RDM3QjE5RQorOjEwQUE2MDAwOUUwRjRCNTVDMjU3RjQzQTk5NzYyRTI1RUUxRjU0M0E1NQorOjEwQUE3MDAwQ0IwRUUwQkNBNjFBQkNBRDM4QUY1N0ZFNUE5Qjg0MUY2NAorOjEwQUE4MDAwRTg5QkM2RUExNTdDM0UzQzlDMEZENDdBMzVGOTE2OTNCOAorOjEwQUE5MDAwM0Y5NEY4MzlEQUFEMjY1QTlGNzEzMjlGQ0ZBM0E2NjA1MgorOjEwQUFBMDAwMjY1RDBDNTE4MkE5Nzg3RTNDMTAxRjY3NEU4Q0U2NjNCMAorOjEwQUFCMDAwMkZDM0ZERDU5MkUwRTU3Q0VDRUM3NTM0MjMxRkM3Rjc3RQorOjEwQUFDMDAwQTY2Q0E0NzU4NUZBQTU0RjM0M0Y0N0QzMkI2RjIyMTM4QworOjEwQUFEMDAwREYwNzkxMTFGRkRGNDY1RjQxRDdFOEYzMzRDMTJGMUIzOQorOjEwQUFFMDAwMjYzQTA1QkQ1REI0Q0VEMDEwREQ3OTIzRjRBMEY2NzcwQgorOjEwQUFGMDAwQ0VCRTA5RkE1MzIzQ0VFNTRDMkUxRkQ5RTNDNjI0NzdFOAorOjEwQUIwMDAwMkVDNkE1NUJCRTkxRkJCRDdGNTlBQkUxQTlEOTExNDMxMAorOjEwQUIxMDAwNzY3QThCODNEQkU5OUQ4RTE5M0FGRkFBMEFGQzJEM0NERAorOjEwQUIyMDAwOEY5NjEzNTkwN0VFMkIzOTZFMDFDNURCRTQ0MTY4OTkwNgorOjEwQUIzMDAwMTE1QkU4RURERkI4OTlEQ0ZFNzU3QTJFN0JGRjRBRTkwMAorOjEwQUI0MDAwOTE3NURGNzNCQkM0RkU0RDk4QzFFRDVGODc4OUVDREY2MworOjEwQUI1MDAwOUQ3NkQzRkNEREZEQzg5REMyODlEQzRGRUFDNDc1RjQ0NworOjEwQUI2MDAwRTM1RjgyNUY0OTcxNEZFMTU3OUE5QzdFRjIwRkM1M0FDRAorOjEwQUI3MDAwMEJCNTdEMjZEQTlCOURGNTBDRTM3MEIyQzlBREEyQkQ4NQorOjEwQUI4MDAwMkI2QkY3NjQzMTJGM0EzN0MyMkUxMEUzOEY5QkM4RUQ0MQorOjEwQUI5MDAwOEVDMUU1M0M1RjUzRTRDNzRGRkVCNTU0REYxRkRFRDdERgorOjEwQUJBMDAwNEMxNDc2NDlGRjdDRjcwRkYwMERDOTA5OEZDREU0NDVCMQorOjEwQUJCMDAwQkJDMzYzNzM1MTFFRjk0MEVGRTE1MUY4QTk4NEIwOUMwNworOjEwQUJDMDAwNzE3RjUzMkM5MzNFNTJEQzc0MkZBMEMzRDhGM0ZDQUY5QgorOjEwQUJEMDAwRDE2RjdDQzU0NjdBQTdDMzlFNEVGRDA5QkJCRDIyOTZBOAorOjEwQUJFMDAwNTE3RTMzRjhDOTgxNUNFOEVDQjlCRkMxOEUzNDg0RkQ3NQorOjEwQUJGMDAwNjNGMEQ3MzY0RjhDMzhENzNDRDI3MDkyQ0U4QkEyRUQxMworOjEwQUMwMDAwRDVFOEY4NDNERjdFNzczQzk1QzlFNzEzNENDNUZEMkJBQgorOjEwQUMxMDAwMzU5NDBDNDJCRThBREVFRkEyQ0M3MDE1OEM1QTBBRjMzMgorOjEwQUMyMDAwQ0E0OENEQTc1MjNDN0Y5Q0M5RDNGQkZCNkVEQkFFM0UyRQorOjEwQUMzMDAwM0E3MDNEM0QxMjA2OEI5MzQ5M0ZFRkMyNzk3RjdBRkIxNAorOjEwQUM0MDAwREIyOTZFMTVFRkVCN0U0MTdBRkE2QzdENDlEQzY2RTQxOAorOjEwQUM1MDAwRjdEQzA0OTJBRkU5REFGRDMzMzE5RkY0OTU5REYxMDlGOQorOjEwQUM2MDAwMzZDQzAzRUMxRDg5Rjk3M0MxMjZERkE4MkEyM0M1MEQ1NAorOjEwQUM3MDAwQkRGRENERjc1N0RBRkU2M0ExQTEyQ0YyQkI0NDZBNTJBOQorOjEwQUM4MDAwRjdCNTIzMDBFRkFBQ0RFMDU2Njk3RjM5NDlGRjA5MzlBRQorOjEwQUM5MDAwNTBBMUM0NTczOTgxQ0YzMzlBOThEQkE2RTJBNzlCOUQ3OAorOjEwQUNBMDAwMTQzRkNCQjgyODEzQkY2NTFDRTVERjk3MUU5QUQ0MkI0MQorOjEwQUNCMDAwRTE3NzhGRkFDNkQxRjJBNEM0MzlDQzk3RjU1NUI0M0ZFOQorOjEwQUNDMDAwMzMwNjMxRDY4RDcyMTBGNDNEQ0FGOTJGOTM0MjczNzA1QQorOjEwQUNEMDAwN0Y3RkY5M0QzRUEzOEMyN0Y0RjVBMDczMjlCRUJERkMxMAorOjEwQUNFMDAwRjY5OEEwMEE1RDBGREQwMEYzQzNGOUZDNDA2MkU5OTkxNAorOjEwQUNGMDAwMzg4RkEzOTk5QjMxM0VGNDYyMkNDNTg3RTQxRDU5MTQwQgorOjEwQUQwMDAwREZCOTNFRDVCRjdGMjJDQ0UzRDNBMDdBQTc2MUI4QjYyNgorOjEwQUQxMDAwNTg2OEI3RTZBRTE4RkEyRUMxNEVBOUZCNUFDQUNCQjg4RQorOjEwQUQyMDAwQzM0MERGNkQ4REM2RDc1QjEzQjk1RkY5RjY0NEJFQ0Y2NAorOjEwQUQzMDAwMzI1Q0M1OUNERUFFQzI1MTRCMTNBRjdDM0Y3RDgzREZERQorOjEwQUQ0MDAwRDYwMUZBNkU4RDBCRDI3OTlFQzgyQkRCNjZFQzlGQUZENQorOjEwQUQ1MDAwQ0FDQUI4N0NFOTkzQzcxQUZFMkNFODA1MjFCRjQ4OUFGNQorOjEwQUQ2MDAwRERCN0VGOTk2NzlFNDk2MUZDOEFFMjMwN0U2RTE5NzkwMgorOjEwQUQ3MDAwQkUxQzkzMTVBNENBMThCNzk3RTQ4RkU0RjQ3MjM5RUI5QworOjEwQUQ4MDAwQUM3NzA1ODBCRjM3N0YyREY3M0JCRUJENEM5M0QzMTkwMQorOjEwQUQ5MDAwNzdCQUIwN0Q5NUVBQTZCMjMzQTNGOEY4NjJDMDlGQ0QyQQorOjEwQURBMDAwNjY2MkU2MDgzOTJDRjgyNDVBQ0YzN0Q4ODc1REQ2REY5QgorOjEwQURCMDAwMzc4MTNDNTYyRjEzOEYzMDY5Nzk2NDlCOEU0Q0IwRTBGRAorOjEwQURDMDAwNzc0QjM3RDkzQ0RENjg3RjZEQjIyNTc5Mjg1RTZGMDNGQworOjEwQUREMDAwQjkxMTExQkZCMkQ5NUUyNTNFQjRCOTc5NUNDRjg2RjIwNAorOjEwQURFMDAwMTdFMzU3QjhGRTNDOUNGRkFCQjQ3RUQxRUVCNDI2ODc4OAorOjEwQURGMDAwNkNFRTEwOURBQjVBREREQkE5OUQ0NUYxRDFGRDNCNEJCRgorOjEwQUUwMDAwMTJBMzdDMDg4QjkzN0ZFRjM0MjZDQkMwMkNGREM4RTNDNAorOjEwQUUxMDAwMEY1MDFFNDMzRjlCRjIzQ0REOTUzNDNGMDVBRjY1QjFCQgorOjEwQUUyMDAwNEQyRThGOEJGNDIxRTIxOURFM0Y2QTJGOEU4QkM0Q0YxQgorOjEwQUUzMDAwNTAwRENGMkQ5RDdDN0RCRUM2NTQ2NzU1MDFGQUI1QkUyMQorOjEwQUU0MDAwOTRCMjIyRUM2Nzg5MDVCRkFGMjdEQjBCMkZEQjRGNkU3NworOjEwQUU1MDAwMTk5NzJCRTE3RTFFNDlBOTRBQTQ3RTg2NjIzRkIyREQ4NgorOjEwQUU2MDAwRTNDNDdFOENEQTc3NUJBM0YxNUNBNEJERkZGN0M2REQ5QgorOjEwQUU3MDAwMDA4Mzk0MEY0NDc4MjFDMjg0NzQ3NDg5MkU2RDE4M0YyNgorOjEwQUU4MDAwNEJFQ0VGM0QyRTE3MzMzNUZGMDVFNDYyNDUxOUNDNkJEMworOjEwQUU5MDAwNERERTA3QUZGMjNEQzZGRDk2ODQ2Qjc5QkVEMTU5MkRDQworOjEwQUVBMDAwREYzQzNBNEYyM0RBOEUxMUZBNDdFODIzRTg0N0M2N0VBMworOjEwQUVCMDAwMUU0NTNCNjY0NDc4MUYwREU2MTI4QkE1RDVGOUY4N0UzQQorOjEwQUVDMDAwNDlGMjExQkY4MDVEQTNFMjdFOTFCNTdDQzFFOEY1NkNDQgorOjEwQUVEMDAwRDZGMDI3Mzk0QTU0RDQxNzU1MTc3QUQyRjBCREMzRjZBNQorOjEwQUVFMDAwNTM2OURDOEVENTlGNDcxRkZCRUI1MzU2QUNGRkIyQUVDOAorOjEwQUVGMDAwRjJCMkY2OEEzODdGMUVFOERDRDlGMTJGOUZBQzhGQjQwRQorOjEwQUYwMDAwNTcwNjNBODdGRUI2RjNFNzIzMEUxM0M1Rjk3NjQ5RkFEQQorOjEwQUYxMDAwRkJGNUNEOUExQ0RBNTAyNkUyMzJGRURCOTAxRUJCMjRGNAorOjEwQUYyMDAwOUY5QjVGOThFNkYxOTlBMjcyRkY5REY4N0M0OEJCODlEMAorOjEwQUYzMDAwMDU4MEFFODdGRjVBRUNGMjQ3RjQ3M0E1NzgxNkYxRkE1NAorOjEwQUY0MDAwQzE5QTNEMzVEOEY2OTQ4NEZCNzQ3MDVENTBDMjc4N0IwRAorOjEwQUY1MDAwNUE1RDg3RTRCRDRDQkJEOTY1NUM4RjhCRjY0NkFERkY2RgorOjEwQUY2MDAwNzJBNTU3NDY3RDU1RUVFNDdBMzFFREJDQzI3MjIzRTRGQQorOjEwQUY3MDAwQ0U4QzMyQkU3RjhEOUFGREVFMzhGMkI0MTVGQjNCNjI2QgorOjEwQUY4MDAwRjBCNUU3QTA3RTcwMThENDI3MjNGNkJCNzFBNUM3NTI5MQorOjEwQUY5MDAwMTlCMUJFMTYzQzQ3RUE4NzhFQ0Y5NEY1RDk1REE0QkZBMAorOjEwQUZBMDAwODVCRTM1MEEzRDkxQTRFOEY0QzRCQTU4Q0VDN0MyREVDNgorOjEwQUZCMDAwNTk1N0NBRkRBMTc1QjFEQzJGN0ZEMUU1N0YwMkY3RjNBOAorOjEwQUZDMDAwRTdBNTlGQ0MxQUFFRTIzRERCMEUxMzlFQkI3RkRCNzk3QgorOjEwQUZEMDAwNEE5RjdENjMwODJFMTZGRTBDRjJCRjVCNzFGRUEyMDcyRQorOjEwQUZFMDAwREVDRkZGNjEwNUQ5N0I0NUY4RTUxMjE5OEY3MEI5RkRGOQorOjEwQUZGMDAwMDdGNkQ0NzMzODVFMDE0RTNEODJERTJDRUFCQjg2MDMzMQorOjEwQjAwMDAwQUQ2NzI3N0U0QkFEMDhFMzdGREQxNEM3QkRFRjgyRDQ2QgorOjEwQjAxMDAwRUY3RDhBMkZDQjg0QkREMDc3NkU3OEQ5MzhBQzhBNzExQQorOjEwQjAyMDAwRDg0QzNDMDdEM0M3NDkwQkJBRjQ3MDUxQjcxRTFFN0ZFQQorOjEwQjAzMDAwM0MzQUVFRUFGRDZENjREQzc1MjdFQzMzOTQxMzIyQ0VDNgorOjEwQjA0MDAwOUExRTA4NTZFMDNERjMwQ0Q2NDFFNzkwNjk3NTA5M0ExRgorOjEwQjA1MDAwQkM0RTk2QjVGQzBDRkNCQzcyNDRGQzM3NERBOTNFOEQzMQorOjEwQjA2MDAwRUY5RkVFNUI1NzgwRTlFRTA3NTQyREJEMTMzRkM1MTlFNgorOjEwQjA3MDAwOEVFM0FBODRBRjE1RDdDRTlEOEE3NDhEOEVFNzY2RDRGMQorOjEwQjA4MDAwMkJCQUZCODREMTcxRENFNTNCRjVGNzBEN0RERTdDRjI1QworOjEwQjA5MDAwMDdFNjdENDcxRkZGMTU3OUVEQjhERTM0Q0ZBNUUzN0ZDNgorOjEwQjBBMDAwRkJCOEYwM0ZFMUQyRjE0NUJGOEY4MkZDMjFGOUFBN0RDOAorOjEwQjBCMDAwQzczODAzQUJCMDFGMjUyNEUxNzlGOEUwN0E0NkRGMzNDNworOjEwQjBDMDAwNEVCQjlENzlGQjNCNTc0ODlCQzRGMTE1OEQ2NzE2MjhGNQorOjEwQjBEMDAwMjdGQzRERDE5RTBEQjZGMUJDRDdDMUI3MUJDODFFMUNCNQorOjEwQjBFMDAwMEM3MjgxRkVERUMxNkFDNjEyMDE0RTVCQUQ5MjNEMzkyMworOjEwQjBGMDAwQkJDRUMwNTAzRkIwMEI0REJBRjc2MUJBMTQ0RjE1NzRCOAorOjEwQjEwMDAwN0ZENEM2RjM3QTMzRDZCMEEwMDFENzUzM0Y4QUY2MTM2MworOjEwQjExMDAwQ0Q2Qjk4MkVFRUFFRkIyRUMxRUMxMkZEN0RERjhDQTgyMAorOjEwQjEyMDAwN0JCRTgyMEZEMkEyOUUxRjJBNzNFQUY2MDVFOEI5QjQ0RAorOjEwQjEzMDAwNDlDNDI3NUNGRjY1QTNGRTgzMjk3RDNBRTFGODUzOTg1MworOjEwQjE0MDAwODczNzc5MjNFM0RGQzM4OThGRDFCRTg3RDM3NzVFMjEyOQorOjEwQjE1MDAwNUYwNDdFM0Q2Mjk5OTI4QkY2Q0E1NjY3OEMwMUYzMjM5OQorOjEwQjE2MDAwMEVDN0Y3M0NDNkUyMTkxQjMzODkwNUYwRkI5RDJGQzdCQworOjEwQjE3MDAwRjQ4RTk2MDA5RUYwRDI5RTVERUQ0MDk0QzNENkRFMUYwNQorOjEwQjE4MDAwNjEzMEQ5QjZFREU5OUJBNzQ3QzA4RUZCNUYyMjk4OTU0OQorOjEwQjE5MDAwMzAxNUJGMkY4NEI5QUJCOEVGNjI5QzMzRjZFMUY3N0M3MgorOjEwQjFBMDAwNjNGMjZDMTQ5QzhDNjFGQUVGRjhCNDk2QUFEQjMwQkZBMgorOjEwQjFCMDAwQTQzNURCQTBEREIzOEVBODg3NzUzQzM1QzkyOUYyRTI0MgorOjEwQjFDMDAwMjg0RjhGNERFN0Y5MDI5MUZENjM5RUY3ODBGRENGODBGOAorOjEwQjFEMDAwRkUwQkFGQTI3RjBCOUY3RjBBM0UwMjNEOTM4MkYzQzcxNworOjEwQjFFMDAwMzgzOEY2OEZGNEM1QTA1MUU0Rjg1QTdGMEEwQkVDQzY0NAorOjEwQjFGMDAwRjMxRDE4Q0YyNkYxRjE5Qzk4QkY5MkMyRjRGOTBBN0Q5NQorOjEwQjIwMDAwRTMzOTYxQkMzMUZGMTdENjMzRkY1MjdBMTgyRjQ3OEZDRAorOjEwQjIxMDAwMDU1NzQ3OEY1NjgzOTdFNjFCMTg2QjIzM0YwOEJGODc1OAorOjEwQjIyMDAwODVERkJEQjM2QUUzNTlCNUVGN0YyMTVFNUI4QkMzNzhFMQorOjEwQjIzMDAwMDUzQjkwRkE4NUU2Q0QxNzM1M0M2MzNFNjI4QUQzNDRFMAorOjEwQjI0MDAwNzgxRTA4NkY0NzlDM0M3RjZBOEIzMzI2RDg5Q0Y5RkY5OQorOjEwQjI1MDAwODA1RTJFNEVBRkM4RjFEMDlFQkNFMkYxMTZDMDc4NDk5OAorOjEwQjI2MDAwNTczRTFFRTIxN0Y3NEYxRjdFODEyNjFCNTNBRTFDQkZCMQorOjEwQjI3MDAwMzBBQkMwOTVFMEY3MDhGNDZCODhDMDZCMzg0RkU5MTEyQworOjEwQjI4MDAwMjdGQTA1NTZBM0NGODI3OTlCQ0Y0RkUyRjk4Rjc5NDlGMAorOjEwQjI5MDAwNzMyRDk0Qjc5MDNDOTdGMjkwREJGMjZDOTQ1N0RGOTY0NQorOjEwQjJBMDAwRjUxRDhCMzE0MjRGQjdFNUQ1NTIzREI0QTdGQ0FBQkM4MgorOjEwQjJCMDAwNTAwQzg2MjlEODE4RDY0RDcxODAyRDY1NTUyRUY0MEI2QgorOjEwQjJDMDAwMDNGNTNDNUY0QkU0MkYwOTdEQzhCNEYzNTE1QTE3QkMxQQorOjEwQjJEMDAwMTgzN0U5NDBFRjExNjhCRkE1QkU5MEYyRDNFMkUyRkY1NAorOjEwQjJFMDAwOEJGMkIyQjZENkI5REQ1OEZGMTg5RTYzODEzREYxQjAzRQorOjEwQjJGMDAwNzY4RTg1OEM0QUYxQjRCMUE1NEZFMEI5QUYyN0JCNDEzQQorOjEwQjMwMDAwQzJFM0E2RjRENTdBRkQzNDM4MkFFRkM3RjM0NTc3MjU5MgorOjEwQjMxMDAwRTY3N0IxQzUzQzdGQ0I1NUFCNDRFOTQzRkRCRUREOEE0MgorOjEwQjMyMDAwNzhFNTc5NTY0MTg5RTM1N0Q3REZFOTQ5QzlBNEU3QjZGQgorOjEwQjMzMDAwNjRFRDYxMTVEMEVGRjNEMDk3QUNERjVGMDZDQzc3OEE3MAorOjEwQjM0MDAwREU4RjhBQzk0QkRGMjk2MzBEMDY5QTQ3MUFBNjEwODA0MworOjEwQjM1MDAwOEFGMzhDOTlFOTVBMENDRkQzOTcyOUY0RkREQTQxNzkxNQorOjEwQjM2MDAwMUIyOEVGMDlBQzdDQjIzN0YyRjJERUE4NDRGODkyNzVFNAorOjEwQjM3MDAwMkVENUFGMjM3QTVERDFGMzE2REY1NzE2RjRGMjdDRTFCOAorOjEwQjM4MDAwOEU0NUZGQ0E5MzNEOTdGMkQyRTg0N0VDNzczOTZBM0Q4NAorOjEwQjM5MDAwNjAwRjVCOTMwQ0Y0NURCOTk4QUM4ODc1MzE1RDNCQ0Q2MworOjEwQjNBMDAwN0ZGQjlGODU3RjNGODk3MUZCMzlGQTVDRUM3RkYxRkI2NgorOjEwQjNCMDAwNDc2NkU2QjY5OEU4M0Q3MTVGODc5RkI3MERDNkJEODNDNworOjEwQjNDMDAwNzQxRkMyNzg3RTc4RjRGQkM1RkM3REU2RTJFNzZGRTY4OQorOjEwQjNEMDAwMTg2NkMxRkIzQUQyQUExODhBNjM5QUNEMDBFMzdEMUU5MworOjEwQjNFMDAwRUQ3QjY1OEY2QUYxQjY2Njg5MjlBOTlFQzhGMTQyOTQwMgorOjEwQjNGMDAwNUYyRjVCQUVDQjQyQkZFMTg4NjU5RTkzRUVDOTY5N0U0RAorOjEwQjQwMDAwOTQzMURFNDdGOThEMkMzNzQxRTc4RjFFRDFFRUJCMzVFNQorOjEwQjQxMDAwQUNDQzFDODRGMUJCMzhBOEVCNDZCRjVBNzE1QjkwREUwNAorOjEwQjQyMDAwMjI2RUUyMThERTczMTNFQUYxNjE5Mzg3MkZCMjAwMkVDOQorOjEwQjQzMDAwMEVBMzEzNUNDQUQ4QjhDMzE5M0ZDMEVGMTQ4QkZENjlDMworOjEwQjQ0MDAwM0VDRkJGRjdEMTA3MkJGNTk0M0Y2MjNFM0Y0NEY3M0MxOAorOjEwQjQ1MDAwQTRGOTYxMDJGNjI2Mjk1NTM4REUzNEY0MEY5MkYxREVBNAorOjEwQjQ2MDAwQjhCMzE1REZBQjAwRTRFOEJFMkZBMDdEM0ZFNEQyRkUwOQorOjEwQjQ3MDAwRDM3NUNGNDNFMDVGNDc5RTBCMENEQzdGQUNFRTNCMDUwMgorOjEwQjQ4MDAwNjZGMDc3RkFFRjNGMjdBQTdGNjdCRkZEODdGQjRERDRCMQorOjEwQjQ5MDAwRjVEQkE2NzBCOTExNDg4QTA5RjYxN0RGNUIzNkI5RjJGOQorOjEwQjRBMDAwQkFDOTQ1MDNFN0I3MkQ5REFDQzVFMTJDMjBGQUYxMUNDNAorOjEwQjRCMDAwNEFFMzlGQ0RBRTdBQ0E3NzkzNjNGOEI5QTkxMUM0MDg1RAorOjEwQjRDMDAwRjJEMzUxN0IxREM5MkQ5NkFFQ0Y3NzEzREYyNzY5QzMwOQorOjEwQjREMDAwRUY4RTQwN0RBNTRENkZBRjU3QjBERUEzRTMyNEY0NTM0QworOjEwQjRFMDAwRjVGNkZBNjQ1NDM5NzgzRUM1QTJFREY4N0EzQTI3MzU3NAorOjEwQjRGMDAwQTZFQkU1QzI0NTZEQkYxOEVDODVERDk0MUY5NzZDQTNFNAorOjEwQjUwMDAwQkM4NjgxRTIwQkVGMzUzMUNBREIzMkM2RkFFQTUxRTc3RAorOjEwQjUxMDAwRkRFQkUxRjE0M0RCNEEwMDhFRTM3Q0I2RjVGMENDNDU3MAorOjEwQjUyMDAwMTgzNzdBNEZFM0U3MzY5MDAzNzRDRkI1NjFEMDZFMzlBMAorOjEwQjUzMDAwQTJERjVBNTMyODFCRjU0QUFEODFERjE3QTAxRjE4RkY2MQorOjEwQjU0MDAwQkRFNEMxMTQ2NzhEMUU1NzdDN0Y0NkMwMEJFQkE1NDkzNworOjEwQjU1MDAwNTkxMUVCN0I0RkRCMUY3REUzREQ5NkI2MUJFRERBQkVBOQorOjEwQjU2MDAwRjFDQ0ExMjIxQUFGMkZGRjQ4MUIyRkU1RUYxQkVGOEY2NQorOjEwQjU3MDAwREFGRTE2RTMyREJDNTNCRkJFODVBNjZFNUFERjQyRUQ0MAorOjEwQjU4MDAwRkJBNzYyQkMzRkUyRkEzMkZGOEVGMUI0QkNCMUJFRjE2MAorOjEwQjU5MDAwRUVEMkFGNkZBMUI5OUJENkI3QjBDRkJGRDRDNjRCRjkyRgorOjEwQjVBMDAwRkJDNjEzRjkwRTY2NzM3RDFERjJEMzQwNzkwRjIyREZCRgorOjEwQjVCMDAwMjFDNzk1QThDQjc3QzA5QjI3MTU1OThDM0QyMDcxQkUxQworOjEwQjVDMDAwNzg3RDcyQ0QwRjMwQ0U3RjZFNjY4MzlCRUMxNENEREYxRAorOjEwQjVEMDAwQTM3QjQ0MzJERDIzMjIzRDNBM0I5RERCMjFBMkZGN0Q0QworOjEwQjVFMDAwNEQyNUNDM0I4MkM3ODNCMENDMkQ5M0U4OUVDMkM4MTJCOAorOjEwQjVGMDAwQzk4QkU3NkMzQjQxN0VFMDc3RjQ3NkMxM0VDN0ZBNjBDOQorOjEwQjYwMDAwOTM4QkNBM0Q0RDJBOTU3QkMxQkZGNDUyRkNDQjRERjBDNAorOjEwQjYxMDAwODVDOURDNUY3QzIwRDU1OUIzMTRFRDhGOEExODlFQTdBRAorOjEwQjYyMDAwNUQzNjExMkNEQkIwRkYwNkZCRTU4ODE1RjMyMTZGNjA1QQorOjEwQjYzMDAwRjlGODc3MkQ3Mzc2NzA3QzI2NTVBNUQwRjdGNjYzRjI2RQorOjEwQjY0MDAwOEY3NTM3MDFCQ0I5NDQ1NjMxRkY3Q0IzREE3RjNDRTdENAorOjEwQjY1MDAwMkY1QUJFQ0Y2NjJEQkYzMjgwRjcyRTQ5QTk4MDNGNTlBMQorOjEwQjY2MDAwNEM3RjNGOEJGRkM4MzNFOTVFQ0VFQ0JCRTJDOUJFQTk3RAorOjEwQjY3MDAwRkQ0RThGREQwOUYzQjg1OUNBRkY2RDE2RTBFMzRGOUEwRQorOjEwQjY4MDAwN0RCMzY4QzgwQzkyMDdEMUZFNjkxMjZBQUE0MkNDM0IwRQorOjEwQjY5MDAwOTQ4MzQxRjg3NTlFN0QxRUY5QjdGM0FFNjcyQzAxREVFOQorOjEwQjZBMDAwOUY4REVGODE5RUZBQjU2NjFGQkREOTYzNjZFOEZGMDVFMQorOjEwQjZCMDAwQUFGOEY5RjVDRDFCRjQ3RUU5MDNENjkwMTNFREMyMDc4NQorOjEwQjZDMDAwRjI5MzE4RDJBM0Y2NzY3REZENjYxM0RGNkZGM0EyRkMyQQorOjEwQjZEMDAwRDREOTUxNzkzRkUyM0I4QTlCRjFENzA5OEM3RDM5NTkwNgorOjEwQjZFMDAwRkI4RTkxOTZGN0IzNUY4QjMzQjFGNDA0NEEwNjE3RjdEQworOjEwQjZGMDAwM0RDRDY2RDZFRkI5QTRFODJGMTEwNDFEQkQ5N0U0MjUxMgorOjEwQjcwMDAwM0M4OEJDNzcyNjNGOUI4RkVGOEJGMUM0N0I4RjRBQ0Y2MQorOjEwQjcxMDAwQTY1RTJFNkUwQTc2RTBDOTlFNUNBRUVGRDE1RUI3OTY0RAorOjEwQjcyMDAwRUJFNzc5NkVFNkIwRUY1NkIxRkVGOEI2NTdDMTM4ODU1MworOjEwQjczMDAwOThGRjNGOEI1RjhGRTI3QTQxNEVGRjdBQ0E5Nzg1RkM3NAorOjEwQjc0MDAwM0U1RTNBOEJCQzg3MjdGMkJGRTZGNUMxMEE3RDlGRjhDMworOjEwQjc1MDAwN0EwMUJBN0FGMzkwREVCRjk5MTRFQkJFOTdGODRGQjMzMworOjEwQjc2MDAwNDc0MkVGMUEyRUM2NUU3RDdGN0RGMzcwNzkzMzc0RjcwMgorOjEwQjc3MDAwNjBCNUZFMDZDMkYzNDBERkFEQTA5RkUyNzA5Q0I3QTVBNgorOjEwQjc4MDAwRDlFREEyN0I3N0M5RkM5QzZENzA1MkU1NjlCQ0U3ODU1OQorOjEwQjc5MDAwRjUxRkU4Rjg0QjdGOUZBQkE1RjM2OTA5RkQ5NkM3RjA0RAorOjEwQjdBMDAwMUU5QzMxMjI0RTU0RDcyMUI1RDlCMERGMjA4RjJCODU3NgorOjEwQjdCMDAwOUVBNkY4NkY3QTVENDg2QUNEMEJERjFCOEE5NjhCRTlFRgorOjEwQjdDMDAwQUJGNUY3RDJBMkJGQzc1ODZERUI1MTI0MTVFM0ZEQkQxMQorOjEwQjdEMDAwNzRERkIxQUQ1QzNCOUY0MTFDNjNCQjY0NkU0RkNBNjlCMworOjEwQjdFMDAwMDY5RTJGMzI1NEU1RjY2NTU2RUY5MEM4RjM4RTU1RTU2OAorOjEwQjdGMDAwREM2RUE4OEU3REZCNzYxNTQ0QUZCRkJDNjMxMUU2NDVCOQorOjEwQjgwMDAwNTVDN0JEN0Q3QjI2QzBCNzk0M0ZCNzA4QkZCMzU4OUREMQorOjEwQjgxMDAwRjZGNjk3OTkyMDZGOTc5NUVGRTdGMEU4QjdCRjFDMDYwQgorOjEwQjgyMDAwRjA4QUYyRTczOThDRjkxRTgwQTQ5NUU1MDcxNkExQkNEMQorOjEwQjgzMDAwNUQ1NTJFQkVCRkQ4NERGN0JGRTU1NENFNDc3Rjc3NjkyMworOjEwQjg0MDAwMzZGNEJCMkY2RjJCMTc3MTRCNDZGN0JEN0Q4NzdFNzk4MgorOjEwQjg1MDAwMUNFNTk0NEZDNDc5QkRGQUYzNERBNjdEN0ZGMTNBQzE0MgorOjEwQjg2MDAwNUU0OTBFQjI5NzY2RTBFRjgwQ0ZFQkI0RUZGNjE4MkM4RQorOjEwQjg3MDAwMjFDMkVCODhGMDc3NTFCRTc3MzVERkVEMDlERkI3RTdGRQorOjEwQjg4MDAwREY5RDZBNjk2NDdFRkRGNzE1QkQxQUZGRjNCQzIxMzFBNworOjEwQjg5MDAwMUYzMUZFMjVGM0MyRUYwQjI2NDRDRTZCMjdGNTIzRTZCRQorOjEwQjhBMDAwRjU3OUJFMzkyMDhEMEI5RkQ3OEE3OTdEMkVGNUVFQzJCMgorOjEwQjhCMDAwQTA0N0NGOTRERUM1NDhEN0NGRURCRDQzRjBFRkFCOTRBMgorOjEwQjhDMDAwODc4NkZBMDk0RUVFREQyNUI5MjM2MDIzQTdFMzIzRTUzOQorOjEwQjhEMDAwRkY4N0VDQTk1MUE5REU0N0NBMzE3RkNGQzRCRjgzRDAwRgorOjEwQjhFMDAwQUVEOTkxNUI5M0ZEMDFGNEVCODFERjI4NkYzMzkwQzFGQQorOjEwQjhGMDAwRUYzQjU0MTVFQUZGMEVEQzEzMUE3RjE1NzlGOUY5RjRDMgorOjEwQjkwMDAwNTRGM0Y2RkFCNzBBRjFCQkVDMTI2Qjg2RjZFQjJFOUNGOQorOjEwQjkxMDAwMzNBMURGNUY3REU4ODQwOUZERkJCNTA3NEU5OEQwN0YzQQorOjEwQjkyMDAwNUY4QjMwRjRCMzc2QTdBOURGQkY0MzU3RUE5NUM1RkUxNgorOjEwQjkzMDAwRDVGOTJCQUY2NEU0QjQyNUMxN0NENjJFRTVERjAxNkJDRAorOjEwQjk0MDAwRjg1OUZDNTQ4NDFCMTZFMzJBRjFFRkY5M0QzNzE1NUZEMworOjEwQjk1MDAwNUJFOEVCNkNDMzcyMTFFQjc5MDVDRjI1NkFGQzdBM0Y4QgorOjEwQjk2MDAwRTJBNjNBQkREREJGQjA1RTZGQUYyRkRBMEVENDAxQkRFNworOjEwQjk3MDAwQjZBODMxMkRFQTdCODBGQzNCODMzNTFBM0Q2QjVDREIzRQorOjEwQjk4MDAwQkFGMTNCMDYzNTJDRUEzQjgzMDExRTQ3QkE4OUFGMDA2QQorOjEwQjk5MDAwNEE3RDdDQTQxQUZGOUUxNUFFNjNCNTRDNzFERTU3MzIwQQorOjEwQjlBMDAwMzYyOTc4NEY2RTVEQkQ0NEY5N0I1MzBGN0U2MUEyN0FENAorOjEwQjlCMDAwNjg4N0U3NEEyOTgzRjlGN0Y0ODRGQzE0RkFGREE2OTcwRgorOjEwQjlDMDAwNzYxQjMxNUUxMEZEQkRDMTQ1RjNBN0QzNzdDNUU3QUI0QworOjEwQjlEMDAwQUJCODdFMUZGQUJCQTkwOUYwM0NGQTNCODJCNTA3QjlBOAorOjEwQjlFMDAwN0VBRjZEOTQ4MkY4RERERTlCRUFGNEZFQzA0MkQ2RERDOAorOjEwQjlGMDAwODZGRUNDQzI3QUZERjM0NThEN0FGODIzQTFENzQ2QjNGMworOjEwQkEwMDAwRDFCODNGNEU5NzRCMEFFRDE3MEQzRTkzRjFCQjM3NDMyQworOjEwQkExMDAwMzBCRTNCRDVDN0JDQzAyN0FCNERBMUIxQThFN0RDQTk2MAorOjEwQkEyMDAwN0U4MjQ1M0QzQzVGOEJGMjdGQTA3REY4RkY0QkY5REZDNgorOjEwQkEzMDAwNTgxODg1NTQwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDA4QgorOjEwQkE0MDAwMDAwMDAwMDAwMDBCRUQ1QTdENzA1NDU1OTZCRkI3RkIwNworOjEwQkE1MDAwNzVBN0JCRjM0MUU3M0IzMTA0NUVCRTU4MjQ0RDY4RDI2NQorOjEwQkE2MDAwMDQ0MTc3OEFEN0RENDk0RkY4NzIzQTQwODY2MDA4MzQzRQorOjEwQkE3MDAwQjM1MDE1MjU0OTQ3ODk1M0IxQ0FERDM0MTA2MzA3MkRFQQorOjEwQkE4MDAwNEI1OUI0QzBGMjhGMDZDNUQ1MUFERDBEOTJDMUNFRDI4NgorOjEwQkE5MDAwMzAxRDMwMkMzQTM4NzY3NkQwODE3MUI1ODJDQjNBNTI0RgorOjEwQkFBMDAwOEU5MDg4QTNCOENCMTY3QkNFQkRFRkQxRkQzQTJGOEFGRQorOjEwQkFCMDAwQjM1M0ZFRTE2RTUyNzA3M0RGRkQzRUY3N0NGQ0NFMzk2RQorOjEwQkFDMDAwOTcxMEUxQTNCMUQ5ODRFODA4MjUzN0Y0ODRFQzM0NDgxMQorOjEwQkFEMDAwNTZFNzAyNDIwMkVERDQ3RTUwMjRBNDE5REI0RDg0RkRDQQorOjEwQkFFMDAwREMyOEMxRkY3OTdGNTZENzRGQUUzQjI0NEE0ODBEQ0NBNgorOjEwQkFGMDAwNjNGNjc2MTE5Q0U3MThCNTFFODQ0RkI1ODIyNDY0RDk4RAorOjEwQkIwMDAwRTAzQjI1NEQwMzY5RDAxNzdGOTZDNENCMDU5MjhFOTBGQworOjEwQkIxMDAwNUM0MjdFNDNDNjZDQTQ4QzkwNTkyOTMwNjEwRTk0QUI3NAorOjEwQkIyMDAwQTc4NTAyQjBFRUFDNUY2RDBBNTA5ODZGOTY4M0RBNzUwOAorOjEwQkIzMDAwQjBBRkU1QjBFM0VFNkEyQzA1QjIxRUNBQkIwNTQyQ0MzRAorOjEwQkI0MDAwNTBDRUQyMEYzNEUxQkE2NDlFRDE3QTkwRURCNzgwOTA5NgorOjEwQkI1MDAwODU4NDJDQzMzRjYxOUNGNDMyQTExRkMzNzk3MEVCQjg3QworOjEwQkI2MDAwRUVGMkU5QTdCRkE2MTkzMDdFRUZFMzEzN0EyOENCQ0IxQworOjEwQkI3MDAwQTRFQUE3NjA3RjhGOTlGOUZBOEYwREQxRDA3Njk4QTdBNAorOjEwQkI4MDAwQzM3NkVBMUNGNkNCOTcwODVCQjdBMzIwMkQ4QUZENDk0NAorOjEwQkI5MDAwRDhGMEM3OUJFNzJGODU3NkQxNEFENjY3NDE2NTg1OEQ1QQorOjEwQkJBMDAwQUQ1QjI4RDMwRTU2MjYxRjQzM0YxQTc1RTk2RTU0NDJFQgorOjEwQkJCMDAwM0Y3OUREMUY3OTQ0NzZFRUJDRkIwNjI4OUVCQjk4MDRENgorOjEwQkJDMDAwQjY1MzU4QUYwQ0Q2NDEzQTJBMjUyMUE2QzA0NTE4REZGNgorOjEwQkJEMDAwMDhGNzM0MERGQUU5MEI3RENGMkY4MTcxRUQwNTYzNDYyRgorOjEwQkJFMDAwNTI4QUVERTM0NkVGNUNDRDdFQUYyRUE5RDFFODI3MDE2NgorOjEwQkJGMDAwMDE2MTdGMEY1ODM5NURFQUY0RDczMzgwRjJFNDgxNjM0NQorOjEwQkMwMDAwNjVGOUM0MzZGOTdFOTQ1MjZGRDIxMTUxRTEwN0Y4Njc5NQorOjEwQkMxMDAwQjA1QTg4MzgzQjVFNUYzRTNCNUI1NTVGNjkyRjUyRjVGQgorOjEwQkMyMDAwRkZDOUEyMzI1NTdCODM1NEE5NkE1RjVERUY1MEQ1MUJEMworOjEwQkMzMDAwQkQ3N0E5RkFBRjZENzJBQkVBMjkwNUNCNTRGRENERTIxMQorOjEwQkM0MDAwMkE1NTNENzVGNjNEQUFGRUU5RjY5RkE5REE0OUNFNDA5MAorOjEwQkM1MDAwODEzNzlEMTBBMzI5MzBFNjAzM0EwNDgxNTcxN0MxRkRBRgorOjEwQkM2MDAwQTUxOEQzODI3NDFBMjE5NTE5RDAxOTRBOEJDMzlDODZDMgorOjEwQkM3MDAwNjU3MDdFNEExNEVGMkQ3ODVCNDYxNUQ2NTNERTdDQjA5NgorOjEwQkM4MDAwMjA4QTU0OUZGNjhBQzkwOUU1MkY2OEM4OTUwRDczMDA2QworOjEwQkM5MDAwOTk3QzAzNDBDNzM5MEYxMzI5OTQ0MENGNjM2RTFEQkJCNQorOjEwQkNBMDAwNEZBNURDMjZGOUZFQ0UwOUE1RUQyNUIxMDg2RTA0N0U3MAorOjEwQkNCMDAwNjI3M0YwN0U0QzE2RjgxM0Y5Rjg4ODI5ODQ3QzNDMEZFNworOjEwQkNDMDAwRTYyNDhCRTNGMzJDRjEzOEJCMjUxQ0Y3QjBCNDE0Rjk1MAorOjEwQkNEMDAwOTQ4NDg5QjUwMkZBMUQzMEMyQ0Q0MjNENzBDNEM4QzZGNQorOjEwQkNFMDAwRDlDMjYzM0EyOTQxREUwNDI3OTdDRkE3QkRBRUE1Mzg1NAorOjEwQkNGMDAwN0Y0Nzg0NUEwOUYyRjdERThGOENBMjBERUJDMzE5MTIyRAorOjEwQkQwMDAwOTQ1NURFOEY4QzI0MkRGMUZCMDUyMzdFRUYxMEM2MkQ3QworOjEwQkQxMDAwNTYyOEZGNjk0MDVGMUZEMkUwOTM0MUM5QzhGOEY5NTQyMworOjEwQkQyMDAwQjE5MUM5NEZDQjgzRkE1MDBBNjVGQ0JGQzIwOUZDRDY1QQorOjEwQkQzMDAwMjRDQjYxQ0JBMUYxQTgxRUQ2NkYwMTNEMTM4MDRGNERERQorOjEwQkQ0MDAwRTI3RDJCMDhDQTkzQ0ZDMEY0OEQwOTdFNTE5RTlFMkVCMgorOjEwQkQ1MDAwQ0MzODQwRTY3MUY5MjE3OTg0NkM5NEE1RTk5RTQ1NTE2RgorOjEwQkQ2MDAwMDNEMkFCQjlENTEwRDc0RkYwNkZFMzFBQ0YyNTVBMDVFMAorOjEwQkQ3MDAwRjM3NjI2N0Q5RkRFQzdFNDdCNjNBMkJFNDI3QTQ5RTk2MworOjEwQkQ4MDAwMzkxRjgzM0M5MjRBNjJCQjAxRjI3MkNFQUJEMzNDRDdERgorOjEwQkQ5MDAwMDlCN0MwQ0U3NUNFRTc2NkY0N0UxQUU4QTZBNzQ4QzdGNQorOjEwQkRBMDAwNjQzQTcxRkE3RDFCN0Q1RUM1QkI0RUI4QTdFNDdFRkY4OQorOjEwQkRCMDAwRTJBNkJDREYxNEZBRDJFMkU0RUQwNzY4QUMxQTk1OTk2QQorOjEwQkRDMDAwREY2QjYxN0NEQTZDREFCNEY1QTIwM0U5RkY2NTFGNDUyRAorOjEwQkREMDAwRkFGRjkyOTIxNDk4RkZGREUxMzdGMzQ0RTRGMzQzMjMxMgorOjEwQkRFMDAwNzk2MzMwOUY3RjYwMjQ4RjAwOUZCNTE5QzRFRDQyMEVBOAorOjEwQkRGMDAwRTMwM0ZCNzZCODk3OEU3MDk0RURCRjdEQzAzMThDREY4NgorOjEwQkUwMDAwREJDM0Q0OEVBQUQwM0YzOEUxNjFFNzI0NjM3REQ2MzQwQQorOjEwQkUxMDAwNUM1NzdCNUYzMTU5OEZCRjJGODk4Q0NGRkMzRTU4MzNFNQorOjEwQkUyMDAwMDdDN0E3ODQ0MjE0RUYxREY0MTBFRTZCODg5MjI3QTE3OAorOjEwQkUzMDAwN0VBMERGRDQxNEQyOThFNzBDRDIxQkM2QkZEMTZGMjRFQQorOjEwQkU0MDAwMDJGMDQ5MUI4Q0M3NzM5QzJBM0U2NTM0MjFERjFDODI5QgorOjEwQkU1MDAwNzM1MTNDQzc2ODYzMkFDRURGNjUyMDIyOERFRkVGQjNCNAorOjEwQkU2MDAwRTJEODg3NzhGRUYzOUIwRDI0MDBERjc3NkVENjMzN0ExNQorOjEwQkU3MDAwOUZFRkQyQjM3OUY0NUJGRUEzQUYwOEVBRUI4MEZGNTJFOQorOjEwQkU4MDAwNjBBQjI3Mzc1RjNENTUwNEYzOUU2Rjg1M0E5Q0Q3QkQ2NQorOjEwQkU5MDAwQzVDMEU0NkZEREZEOTRGNTRGRTY1Rjg1NUY5Rjk1RjlDMgorOjEwQkVBMDAwNzM5RDRGQ0Q2RkM5RkMzQTg5NEY1QkJGMUI5RjdFMTVCOQorOjEwQkVCMDAwRTdEMzJBQjRCMzcwRUY3NUY5QzgzRjBGMTFGQjQxOTQ3MworOjEwQkVDMDAwOUZFQjI3MERGOUIwREZEMjNFQUI3RDA3RDRFN0VBNDMwNQorOjEwQkVEMDAwOEZFNEExNUUzOEM5REJFN0I3RURBNzVDQkY4OEY3RTA2OAorOjEwQkVFMDAwQjk4QTgyNDZCMjhCMjIxRkYxRkJCMjM4NDU1NjhBNjQ2QQorOjEwQkVGMDAwOUNBNkEyQkMwQUIxNTJENDQzQjBCNDg0RjdGQzlBODE4OAorOjEwQkYwMDAwMzQxREIyRTE3N0FFNUZFNkJFNUVCMDdGNTcwMkRGMEU1MgorOjEwQkYxMDAwNDk5QzFGMTVCRDU3NjkyNEJFNDM2OUQ4N0ZFMEI2MDYwQQorOjEwQkYyMDAwOThFNzU1MTg4RkRGNjdDOEYzNTU5NDhEN0IxQUEwOUM0RQorOjEwQkYzMDAwRTNFNDdBMzA0N0RFODc1MjdGNEZFNjdGRDIyQTUwQTQ2RgorOjEwQkY0MDAwRTM0QTEzQTdGQkIyRUVFODdBM0M0N0U5NzRERjZEQTgzOQorOjEwQkY1MDAwMzc1N0NDNzhBRjBERUQ1QUIwRjQyRDlCMEZGNzQ3RUM2NworOjEwQkY2MDAwM0FFQ0VGOTdFOTdFNzJGMTFGOUVEQjA2RTczNURGNkU1NAorOjEwQkY3MDAwNjFGN0RBNzA2MjVGMENFRkI5QTM1QzIwNzhFRkU2OEFCNAorOjEwQkY4MDAwMDVGOTNFMERGRTUzNEFGRkI1MTJFMkNCOEVENzNCMjI5OAorOjEwQkY5MDAwMTMxRTQ5NDNBRTQ3REQ1Q0FGQ0UzNUYyRjM5MzA4MTA3NAorOjEwQkZBMDAwQTk5MEU5NjM2MTUxNzVCQzlGNzI3RTQyNzZCMEZFRTY0RQorOjEwQkZCMDAwOEExN0Q4M0Q2REJCOUZDQzY3NzA4QTNDQzVDRUREREM0RgorOjEwQkZDMDAwMzY0QTM3QzEzQzZCMEQ5MjIxMERFOEZDREVCNEE2QURCQworOjEwQkZEMDAwMTcyQjA4NzlBQjA3NTQyNDFDRTQ0QzhGODlGOEZFMEExMAorOjEwQkZFMDAwRjA1MjhGOTVENTYzM0QwNUFDRkVBRjNEMjIyQjczNjdCNAorOjEwQkZGMDAwNzg3Rjg0RjQ2OTdDQTNCMzAyRTk3NUIyRjgxOUFGMEJCQQorOjEwQzAwMDAwRDZCOTcyQzZDMEU4NDA4ODhCRDE2OTlCQ0M3QjU3MjNEOAorOjEwQzAxMDAwN0E2MjgyRjZBQjgzMzQ0NDY4N0NGRjFCQUUxNTExMUYzNQorOjEwQzAyMDAwRTg5M0RGRTM3QTMwQjBCREZCQjc0Q0NGRDk1QjI3M0M1OAorOjEwQzAzMDAwNjIxQUYyRDU4NTNFQUNGQkJCRkZFNDQxRENGMDIxRDhBRgorOjEwQzA0MDAwMDlFNDJGN0Y5ODkyMDI5ODY3RkRCNTZDMzZCRTNEM0M5RgorOjEwQzA1MDAwNkExNDkxMEY3NEUzMUVBNDdGRTAzODI1Qzg5N0ZFQ0VDMgorOjEwQzA2MDAwMDlBNjNGOUY4MzczNDlCMEVGQkY3NTY2NzJCRDExOTlGMgorOjEwQzA3MDAwQUZFM0Y3Qjk4MEUzMTRGOUZFODdFN0ZDNjcwNkVBMkYyMAorOjEwQzA4MDAwNTNCN0Y4Q0U1RDc4OEZBN0Y1RUMxRTc3QjlDNjMzQUMwMQorOjEwQzA5MDAwMUFGNzcyMEVFNjI1Mjk3Q0ZGNTgyNkI3MzcxOTAzMTVDMworOjEwQzBBMDAwNzYxOEQ3MjRGMzZENzJGQjQzMzIzRjAyODUwRDg4MTM1NworOjEwQzBCMDAwRjA4NzAyRERENkNCRkNENTAyNDc5OTA2Nzg2MTdEOThFMgorOjEwQzBDMDAwNDYyRDIwQjcyRDExRjcyNTAxQ0I0RTRBM0U1MkU5MDNFQworOjEwQzBEMDAwNDIzRTRBQzBDOTUzRjFEQkFEOTYxRDM4NUY0NUJDQkUzOAorOjEwQzBFMDAwQ0UwNzkzMjZFMDlDRTZENjU0MzRBMjA5RUIwNzE4NUZFRQorOjEwQzBGMDAwQTUxNDk3RTdGQkJFMDFERkY5QzcwMEFGQzE3RDc1MDA0RQorOjEwQzEwMDAwMTAxMjgxRUZEQkFGNTVCMkYyRjJEMEEzMjJDQTg5Qzk3NworOjEwQzExMDAwMzJGRTBDREEwNTMyNEJDNzcwN0Q3QjQwOEQ2RjM2Q0IxQgorOjEwQzEyMDAwNzJCQkQ5Q0RFNUY5MjkyNzE1MTBGNzgyREVBQUM0NzNCMQorOjEwQzEzMDAwREIwQjdEN0I5MDJGRkY1OEZDNUVDNjA5RjhEQzY2OEMxQworOjEwQzE0MDAwNTYxMUVERUYxRDg4ODc0RDI4NEZCMDZFMjVEQ0NGNkI2MworOjEwQzE1MDAwMUFGQkJFRDdFRERBRTdDQzQ1Qjk3QTkyRjEzNzAxRkU4QQorOjEwQzE2MDAwNDZCRTRBM0VFNzBCMzJFRTUxRTQ3OUREODk0QjQ2QzRDOAorOjEwQzE3MDAwQkJGRUIwQjYzQzc3Qjk5RDJGRTA3RUZBMDlBOUQ3QjJENQorOjEwQzE4MDAwNzNGN0M5RjJERUJFOTczMjdBRjlGNzY2MzMzQTdENDYyNQorOjEwQzE5MDAwRjY3QTVEQzA5NzlGQzEzRTBFMDA1RjVFRjE3QTUzMzMyMQorOjEwQzFBMDAwNjFGQzE1OUYzNzM1MkIyRDJFRkYxRDdCNTNEOUI4RkUxMworOjEwQzFCMDAwRjI1NUQ5OUJBMDNFODQ3QzBGRTdCODFDNzY5QjkwQ0VBRAorOjEwQzFDMDAwMUJGNjcyQjk1M0Q2RkIzMEJBMkUxQkU1QTdDNjMwNkVFQworOjEwQzFEMDAwQjQ0M0ZCRjRDODg1MENDNDc1MzU0M0FCQjM1MUZFQTYxQworOjEwQzFFMDAwREFFN0NCMkU3RTFGRURERERCQjY1RUNDRTZGQ0EwMDdFQQorOjEwQzFGMDAwNzlEQTJBREIzMUZGOEVBODExRTlCRkI1OUIzMEZFMUQyRAorOjEwQzIwMDAwM0VGMjdFMDdDQUVGRTU0OEFBMTVFRERFNjdDNzUyMDM4NgorOjEwQzIxMDAwQThFRkFGMUM0RjA5RTk2MEFBMzZFNDc3RDA2NzlGMTlGMQorOjEwQzIyMDAwQzZFRTY2Rjg3MTQ4NkY0NUZGQ0M3RkZDRDM2NzUwMUVBMQorOjEwQzIzMDAwRkQ0NzQwMUE2MURFQUQ5MTQ3MjdEMEJFQjU0NTk2NUVGOQorOjEwQzI0MDAwMTJCMDdDRTVGQjk1ODdGNkVFOUZCM0YzMkFGNTRGN0JBMgorOjEwQzI1MDAwNEMyMkVBQ0ZDQjAyRDcxMzVCQzM4NzE5OUVERDdBRkQ1MAorOjEwQzI2MDAwNkE5NUQ3ODZFN0ZDQUY4NUE4Q0ZGQ0JGQkFCQTEwRjVCMAorOjEwQzI3MDAwOThGRkU4RDU4NUQ4RUU3RjNEQjU1MzBCOUZCQ0VGRDYzMAorOjEwQzI4MDAwMzNCQTJBRjZCMUU0QUMyMDI1RjZFQjk1RjlBM0E0Rjc2RQorOjEwQzI5MDAwQzlGQTUyQTA1RkNERTgxQUJCNUU4Q0I3RDc1NEU4QkM5MAorOjEwQzJBMDAwRDhCRkU2REREQUVDMkQ4OUUzNjI0MjNEN0U1RjMwNUE4RAorOjEwQzJCMDAwOUJCQTM5ODEyRjFGNzIxQjY0M0QwNDUyMERGQTY3OUQ5MgorOjEwQzJDMDAwNENDMzc1MDU4RkM3RjQ1NTU4MTcwMjMyOEVBMDM3MTgyNgorOjEwQzJEMDAwREUyNkEyQjAxMEZENzc4MkNFM0RFOThGMDkwQ0NGMDQ5NworOjEwQzJFMDAwNUFGNUExMEE2ODZGOEVFOTI0NzMxNUYzRUYwMzg5MzhCNAorOjEwQzJGMDAwODMxMEVGRjJCOTc4REZGN0U2REE3Nzg5Q0NERTkzMUVBOAorOjEwQzMwMDAwQUMzRjU0MTE0MjdCNEYwMkE2OTFGMjA0MUNCNDJFQTZGRQorOjEwQzMxMDAwOEJBNjAwREYzNDQ1NTJBMjg4ODdENkM1ODQwQkFDMkU4RAorOjEwQzMyMDAwRTNBMzBGQURBRjNEODI2RTI3RTBBMzhCODkzODA3RjAwMgorOjEwQzMzMDAwRDA0NTM1NUUyMkU5Qjg1RjA1MkZCRDg3QjgwQUYwNkM5RAorOjEwQzM0MDAwNEI1N0Q0ODBGNjBBNzA5MkFBRkZDNkE2MUY1RjQyM0ZFMQorOjEwQzM1MDAwNkM2M0I3RkE3QjQ5NENEMEFEODQ3Mzk2ODBCQTQzMzI5NAorOjEwQzM2MDAwRjRDN0Y2OTg1MDNFMTQ5Qzg5RjczNUE4MjFFRkZCNUQ4MQorOjEwQzM3MDAwRkNCRTE0MzlFQThERTlEODNERjRDNjVDQTY3MjI4OUY0QworOjEwQzM4MDAwOTVFNTY4RDBBQTIzMDE5OEJGMzdCMkZBMjBGQUU5QkQzMworOjEwQzM5MDAwRDdEN0E2MjJCRDdBQ0ZBRTIyM0I1MERFQUQyRTUzMDVCNQorOjEwQzNBMDAwOEVCQkZFNjM1M0EzMkRDRTFGOTNGNDg3OEJFQkM3Mzg1MAorOjEwQzNCMDAwMUVEMEI2NzNDREYyQkVCRTJGN0JCN0Q2RjVDM0IwNzcxNQorOjEwQzNDMDAwRTA1NzZGNzBFNTMyQkZCQTk5QzczREI4NUY5RDZDMjdFMworOjEwQzNEMDAwMTRGREFCQ0NGQjg0N0NDRjkzRjVFRjI1ODY1RkMwRkZDQgorOjEwQzNFMDAwNjVGQUY3MDk5N0M4RkE0RDhGMzQ2NDMzQkZGOEVDOUFCMQorOjEwQzNGMDAwNkMzMTZERjJGQzY1ODI1RDk3NjU5QjNDQkY4MkQ3RkMxQQorOjEwQzQwMDAwMDE2OUM0ODQ3RThDQTQ2N0YyRTk1RjQzNDMxNEVCNUU0OAorOjEwQzQxMDAwQ0E3MEI2N0ZCRDIxODRFRENBN0U2MjZCMjhFQkQ3NjhGNworOjEwQzQyMDAwQTcyMTMzOERFMzNGMDUxRkRFNkM1RjAwRUQyNTcxQkM1NgorOjEwQzQzMDAwQThFMEMyOTg5NzMyM0Y2ODhENjQ2MEVEQjkzMzdDOEY3NQorOjEwQzQ0MDAwQjg2QUYwN0M2NkY2QkQ2NjMxOUYxN0Y0QzAwOEZBNDdGQgorOjEwQzQ1MDAwNkI3RjRBMDlEMzAzMzI1RTU0RjgzMzE5NEY3RTFFMjk4RAorOjEwQzQ2MDAwOUJGNjRENzFBM0U3NjRCRTU0RTQ2QjQ2OTI1QzI4NzY1QworOjEwQzQ3MDAwNkE0OEI2RDMxRDY4QTcxRDY4QTdCRjM2QTIxQzRDODVBNQorOjEwQzQ4MDAwQkJDMTRFRUY3M0IxNzE4NDhENUZGMEFFRTBENUYyQkJFRQorOjEwQzQ5MDAwNkRCMjFDQkRBQ0RDNUJFQzBEMjdFRUI3OThDNEI2QTM0NworOjEwQzRBMDAwQkYzODk1RkRFQzk3NzFDQzU0RUQ0MzMyM0VGQzM2MzlFNAorOjEwQzRCMDAwM0UyQjlGRUZGQjkyRTNEODBGNDQ4RTZGRTIzRkEzRjYzMworOjEwQzRDMDAwMzlFRjc1M0JDRjIzRkY1QUY0OUQzMTI3Q0FEREFGMERGRAorOjEwQzREMDAwMkM2RTlERENFRjA5RDkxRTgzM0Q1M0REQ0Y0OEIxNTE1MQorOjEwQzRFMDAwODc3RThGQkY5NUM3MDE4Mjk5RTIzQkNDM0Y3OTUzNEYzRQorOjEwQzRGMDAwNzA5RUFERDcwQTE5NEVCQkVGNUEyNjJCODM4NTg0REI3RAorOjEwQzUwMDAwRDEwNzRCNThEQ0U2QkU5NzQ2MEQxMjhDNkZFRUEyRjNCNgorOjEwQzUxMDAwMzExRUQ0RENBQTNFNEYzMDU3NUE5QTE4MDcwRjE2MEUxOAorOjEwQzUyMDAwOUM0MkI5MEExQzJDMTM3MUZFMTYzQzJDQzY0MzVBMzM4QworOjEwQzUzMDAwNDMzQjMxN0U4MTcxOUM3OUY4REQxMkE3MDNBQ0QzMkU4OQorOjEwQzU0MDAwN0ZCRjRCOEVFRjkwMjQxQzcwNzRGODNDOEJGN0Y4MDc3QworOjEwQzU1MDAwMjk0MUY5MzU0NjQwN0ZBMDNFMzlDREUzMUQxRDExQUU3RQorOjEwQzU2MDAwMTczRUU5MzYzMzdERjI4OUMwQ0ZFMUVGQTZBMUVEMzQ2NQorOjEwQzU3MDAwOEUyMzJFNDU5RUNBNDMzOTlCODQyNzI0QzAxMzc5NzE4QworOjEwQzU4MDAwM0NEMUZFQzJCQjRDMUYyNkUzODdBQzQxQkU4RUJGNERFMworOjEwQzU5MDAwMUZDMjc4Q0M0OEYxNDI4QUY1NzZGMDA3RjMxMTI3OEE1QQorOjEwQzVBMDAwRTI0RjhBRjhCRTQ4ODhFOTE1NDkxNTI3Mzk3MDFCQjc0QworOjEwQzVCMDAwRkI5RjlGRkU3N0U2NDczNjBGNTE5MkNENzA4NzE0MkI3NQorOjEwQzVDMDAwQ0Y4QkUzOEU4REMxNjVDQ0ZFMkIzODYzRTNDQzUzMjMzOAorOjEwQzVEMDAwNDUzODlGOEMzM0FDRjA4QkYxQzM2NDlDRDExMTFFMzU3MAorOjEwQzVFMDAwQTA1RjMwMDk0RjI0RTE4ODBBQjczQTJFMzg1M0UwNzEzMgorOjEwQzVGMDAwRDY5OTExNkFDNTc4RDI0Qzk5OUU3N0Y0NUIxODJFRjZCRAorOjEwQzYwMDAwN0NCMDM5MUJFNTVDQjk5RkNCMERGQ0JFMkU5RkZGQzJGMQorOjEwQzYxMDAwODlFMzE2N0UyMDU4NTFERjFFM0RERkY1REIyMjVFMTdEMQorOjEwQzYyMDAwNEQyMjhFRUI0QTQ1M0ZFNEYyMDcwRkE0MjIzRDhGNDI5NAorOjEwQzYzMDAwNDk0MDVFNUYzRjI3NjhDNjBGRkYzRTFFMzdCRUQzOEQ2MQorOjEwQzY0MDAwRjZFRDYxMzk2RTJDODA3RDRCOEZDNzVGOTJDN0JEMjY5QQorOjEwQzY1MDAwOEYwQjgyOUJDMUUyOEU0Mzg0RjE2RkIwRDBCNzhDRDUzMworOjEwQzY2MDAwRjc5NTkyODMyQ0VFQzNGOUY1NzAyNEQzOEE3OEFGMTIzNAorOjEwQzY3MDAwMEVEQjBEN0FFMjFGMkRBNDE3RjMyQkMxNUNERjVCNENBMAorOjEwQzY4MDAwM0VGNkU5MThGRkMyNzg5Njk3MDkxQzEyOTlCRDQzOTJBRAorOjEwQzY5MDAwNjFGRUEzQ0EwODdCQTkyNjdDMzE5MEI3MzlGMkJEMTU4QgorOjEwQzZBMDAwODIxRjhBRjkxN0Q4Q0Q5QTFCNDBBNzRBMzkwRjUyNjVDNQorOjEwQzZCMDAwMjEwMkNFRkY5OEMxQjdFQjc2Q0NCQjBDMEJGNkVEMzg2MAorOjEwQzZDMDAwNDZCMDY3MzdBNDRGQ0VDNzAwNzdCMzdEMjk3OTE5OEE2MgorOjEwQzZEMDAwNzk5NzZGQzhDQjUwNUNBNzhBRjMxQkNCQzMxMDg5REU1OAorOjEwQzZFMDAwNDg4REU3NUZDODRGQkQyQzI5QjQ3MzUxMjc0MUJGNzNGNAorOjEwQzZGMDAwQjE4N0YwRUY5M0YzMjk4RjNCMzVGMjI5RkJEMEZFMzA2MQorOjEwQzcwMDAwN0RBQkNFQTdFRDlBRkQxQUUzQjdFRjlBNDczQkVCNTIwQworOjEwQzcxMDAwRTY0QjVFNUZFNDdFNjdEMkZBMEIzMjNGQ0Y2M0ZFQ0IxRgorOjEwQzcyMDAwN0Y3Rjk1QzFFQzU5RTQyQUIzM0I1N0M2NTM0ODhDQzU2QgorOjEwQzczMDAwRURDNjc4OUMzQTYyNjBGRUZBMTVGMDgzNzIxM0VDRDk2QworOjEwQzc0MDAwOTc0RTRFODcxMzExMzdFM0M3QzE1ODZEMkFGNjJGOTZCRgorOjEwQzc1MDAwRUQ2NUZGRDkzNUFCNTcyMjlGQzQwNDdCMDVEQjI1Rjc3OAorOjEwQzc2MDAwNkIwNjYzNDIwREM3MDc5M0U4NzREMEE1OTE5RjMyNTlCOQorOjEwQzc3MDAwQjgzRTRGRTZDRjQ2OTkzRjFCREQ5Q0VFRUVGM0RDNUYwMworOjEwQzc4MDAwRjE3N0YxRkM4MTU1OTYzNzdGMjc2NTdBRTU1NDcxMUU2NAorOjEwQzc5MDAwNTVFMkM4Rjk1QUY5ODVBMTcxQTY2NzVCRUVBNUY2ODA0NgorOjEwQzdBMDAwMzg3NTdFNjFCN0VDNjcyNEVCQTE4RUYwMjE3RTZGQzlFRQorOjEwQzdCMDAwNzFEQjdBMEZEMzNCQjcxQUI3MjVFODBEMkY4Q0VCRTk2NQorOjEwQzdDMDAwMDE0NUFGQ0NFNTcxREMzQkRDNTY3NkRFQUNDRUY5Q0U3NAorOjEwQzdEMDAwN0MxMjNGQkYwNjNEQzU1QUFEM0NERUU0N0VGM0VBNkVGNworOjEwQzdFMDAwMkQyRkQ4MjlERDVBQkYxN0E1NUI1Qjc3RjAxNkZCOUQ2RgorOjEwQzdGMDAwQkRDNTdFNzNCNEU0NENBMzVGOEVGM0Q2Q0VGMTg5NjZEQgorOjEwQzgwMDAwQkZGRkEzNzlEMEU0M0M2NzcyNUUzNDM5REY5OUYyRTY2QQorOjEwQzgxMDAwOTYwMEI2M0Q0QTFGMUY4RjIyNzUzMzhFMzQ1MTEwNTkzMgorOjEwQzgyMDAwMjFGMzA1MTNDQUM5OEFDNTNDMkZEMDVGNkIwQUVEQTc1NworOjEwQzgzMDAwRjFGQ0E4NDJBRjAyMEZDNzVGNTZEQjQ0MjAxQkU4M0M2NworOjEwQzg0MDAwNDM4QUQ1NjY4MzNDNUY1OTRDOThGRjcwQzVDQ0YzMDM4RgorOjEwQzg1MDAwNDRCMDE2MzZCMEZCQjMxNkFFMDJCRDFGMzQ2QkU3OTk3OQorOjEwQzg2MDAwN0U1RDI3RTNFOTI5RjRDOTEyOEY3MzNBQ0E4QjE1NzFFQgorOjEwQzg3MDAwQjlDNjNEMUU5NkUzOTRENjMwNjE3MTFCMjI4ODg1QUIwNAorOjEwQzg4MDAwRDhCQTYyMjFEQTlCNjk2RkYwRUYxOTUxMjJFRDY3RkI4QworOjEwQzg5MDAwMTI0QjU2MzExQzJEOTZFMEZFNzZDQkY5QUZBQzY1QjM0QQorOjEwQzhBMDAwNEEzMDVFOTcwNTc2MTdGMzIzNEY2MTlFODRGOTAxNTY0RgorOjEwQzhCMDAwRDY0RjU5RUZGOTVBQkVERTZFMDNBMTk4Q0YwQURDQ0VFRgorOjEwQzhDMDAwREY1NzkwN0ZCM0FBRjIxQjY3MENEMThCOUIyOENCNkZFRAorOjEwQzhEMDAwREM4MUZCN0Y1QjE3QjUxRDI4RTFGNzgyRjRCNTBENUFBQgorOjEwQzhFMDAwNTlERUU1Mzc4QkZGNjFCNjhGQURDM0YzMUREQkFDQkMwMgorOjEwQzhGMDAwQ0I0OUY0Mzc2MDFGREI4RTM5MThGRjM2OUY1OEZDQkJERAorOjEwQzkwMDAwRjU4ODBCQ0IwNTQ2RTc0OTc4NUNGNkIzQ0VDOTdFQTIyNQorOjEwQzkxMDAwRTI2NzhEQTFCRjk4RTA3NzJDQUZENTREQTU5Nzk2RDc0QworOjEwQzkyMDAwNkFDOEQ1NkVDQUZERTBDMERCREMwRjc2MThFRDY1OURFOAorOjEwQzkzMDAwMDlGN0I0QjY5NkYzQzNBNjI4OEZDNzJBRkU2RDk1MTRERgorOjEwQzk0MDAwRDJFNTAxMUQxQzBGRTlBMzI5NjBBRjFEN0Q3MzhEQThFMQorOjEwQzk1MDAwQjcxRDdEQzUxNjE2NUZEQTdDNDhBN0QwNUJFQkRFMzdDNgorOjEwQzk2MDAwRDU3MjNCRDI3RjdBOUNFNTI3MEUyN0U1Mjk5RkFGMzUwQworOjEwQzk3MDAwQjJGNjJDOTkxRjlGQUYyNTFDNEY1NTA4M0JEMTBDNEY4OQorOjEwQzk4MDAwRkI2QkFCNUUyQjNFREUwMkY4MUZGN0I3MjlDOEY3QUI5NworOjEwQzk5MDAwRTQ0MzVBQTJBMjFCRDdCOTMwMzJERTg3NjU3NTZCODk5MgorOjEwQzlBMDAwOUJDNTBGREIyNkZBRDA3RUZBQUY1RjNEQjU4NEM1MDM4OQorOjEwQzlCMDAwOEMyMkUyQUJFNDc5RTc3OEY0NkNGREMzMDg0ODkwNUUyMgorOjEwQzlDMDAwNEI4NTEwRjY3MzJDMTVEODdENjdCNTk4OTkzRjlFNjVGOQorOjEwQzlEMDAwMjBGQTM0QUMzNzcwN0I1NjVEOUZFM0M2M0E1OTkzQzk1MQorOjEwQzlFMDAwRUM3MUY1NjkzMTczOEIyREVFRUY2NzJERURDQTQ1M0E4OQorOjEwQzlGMDAwN0Q1QjlFNDg4OTFCRTRDRTkwNzYyMEJGN0RENzNDNTE1RAorOjEwQ0EwMDAwRkI5OUIzNDYzQ0Y3ODYzMTc1OUU0OEM5RkI0Qzk1Mjc4OAorOjEwQ0ExMDAwNTJGMkI0RkVGQTJGNTQ3OTY1QkYzMEVFQzFGODhBRTNDMgorOjEwQ0EyMDAwRDgwNTk2MjdGNjg3QTlCNUEwMjQ5RTNGRjIwRjRFMTg4OQorOjEwQ0EzMDAwMTk3REU1QkMxMUY0MzdFMkI4QzExRTlFM0YzQTAyRUIwNgorOjEwQ0E0MDAwNjMxOTg2RjM0QUIwOEY3Rjg2RjM2MjE5ODFGM0UyRjdBOAorOjEwQ0E1MDAwRTMzREIzNTkxOUVEQjFCM0YyNDRDRjIyNTYzQTgwNkQ5QworOjEwQ0E2MDAwMEFCMzMwRUYzNEMxRjI0RTJGRDVBQUYzMTY0QTVFQzI5NAorOjEwQ0E3MDAwNUVFOEZEMDVEMjI5MjE2RkMxRUFDOTc5MEJCRDg1RkJBRQorOjEwQ0E4MDAwQTNGRUQzMDZGQjAxRjhFRTNGNjM2MjdBRDYxOUQ5MzREMAorOjEwQ0E5MDAwMTM3MUQ5OTdBM0JFOTk1Njk2MDdDODY2N0VBNUMyMEY5MworOjEwQ0FBMDAwOTcyNUJCMzkxM0ZEMDFBRkREOENGOTAyQzdGMDI1QTMzMworOjEwQ0FCMDAwQzhGNDRFQjQwODlGMzI3NTA4MzEyM0ZBRkQ0ODA3ODkzRgorOjEwQ0FDMDAwRTEzOUE3MTlFOUZBQURGMUZERjBGRkM3RjdCRjRCN0NEQgorOjEwQ0FEMDAwN0Y1RTVDMkU5OUZFQThGNkVBQTRGRDU4OUU5NkNDNUI3QworOjEwQ0FFMDAwMTJGNDQzQkY5N0M3ODlGQkNCNEI5OUZDRURGMTk2NjZENworOjEwQ0FGMDAwNkU0RThDRTdENzczM0YyRTZCNjlCOTM5RjE3Qjk3QzdDMAorOjEwQ0IwMDAwQzA3MTFGMjU1RTJEM0RGNkY1RDRGQUY2NkIyRDdENEJEOQorOjEwQ0IxMDAwQTZDODBCRjRENzczM0RBMkM0RkQyN0U3MDlFQzZGOTZCNgorOjEwQ0IyMDAwMjdDNEZCMkZCRjBEN0MwQTdFRUJGMDUwMEFCM0U3NUZGMgorOjEwQ0IzMDAwMUU0QjM5ODBGOEJCQkE3RUYzQ0M3NEE4NTc5RjRCMjFBQgorOjEwQ0I0MDAwMjVEQzFFQTlGMjBCQ0RGNTNBQzk5Q0ExOTU0RjkwOEEyMAorOjEwQ0I1MDAwNzRDMEI3OTNGMjA2RjUzQUE2REY2RkU2MERFQTg1MEJDRgorOjEwQ0I2MDAwQUMyRUUzRjQwRDEzN0Y0ODJGQTE0OEZGNTAxMEZEOEMyRAorOjEwQ0I3MDAwQzNFREQ0M0U0QzI2RTcxMTYwRTIyMkIyMDg0RTUxN0Y0RAorOjEwQ0I4MDAwOTZFNTk1RUQ5REQ0MkU4QURGOUU1RkM4OTNFMzBDMUQzQworOjEwQ0I5MDAwRTE0QzNERjI3OUNCMUI4NEUwQkJBREM5Nzk4NjdBODY0NgorOjEwQ0JBMDAwRjdBQkM5OTNDMTVBN0M4RjU1QUVCM0EyM0Q0QjhFMTdEQworOjEwQ0JCMDAwMjA5RkEwRkQ0RjhFMTNDRUFCRTNGNzM4NEZDNjJCNjFGRAorOjEwQ0JDMDAwMTlERjU3Q0JCODQ0MTk5NzdDRkZCRDc1RUE3QzQ0NzJENgorOjEwQ0JEMDAwN0I5N0RDREU1QjVGREQ4RkY3MTc1OEExMjM2ODA3N0E1MAorOjEwQ0JFMDAwRUI1REE2RjI4NEY5NUM3NUZDMURDRDZFQ0M1QkU0MjQ5NAorOjEwQ0JGMDAwRTYyRDc4N0UyMjM5NUZBMUU4MjlDN0YwRDcxRUJDRkY1OQorOjEwQ0MwMDAwM0QxMTFFNEZGMjE3RjBGOEE2RTNCOEYzMzRDQTdEN0M0RAorOjEwQ0MxMDAwOUZEQ0RFRUU4MTNCOEUzMTFDNjVDRjI0RkM1Q0M0QzRGRQorOjEwQ0MyMDAwRTM1RTJDQ0U1MEJERTI4QjEzQTk0ODNGMkZEODJCRDQwNgorOjEwQ0MzMDAwNEI2N0NBNzdBNkExM0U1OTIxRDQ1MDkxQzVCQjZGQzY5OAorOjEwQ0M0MDAwQkYzMTNFQjVGQTlERDY2NTA0RUQ3RkUzRkM1MUE0N0I3MAorOjEwQ0M1MDAwRTM3QTAzN0I4N0E0RDhBQkQ1RUYzNDc5NzhGQkZFMUQ0QworOjEwQ0M2MDAwMTY2QzlGNERFRDY2MTFCRkQ3QkJGMEZCRjI1N0EyMThCMworOjEwQ0M3MDAwRTkyMzJCOTFEQTIwMzdCMTMzMTcwNTk0OTdEQzE5QkVERAorOjEwQ0M4MDAwOUZBMTdGRTQ2ODkwRTNFMEVCQjk3RDZEOEMzNDE4NDg5OAorOjEwQ0M5MDAwREE2NDdCNzdCMkY4NEJFNjQ3NUY4RDM4NTg3QzNCMUJGNAorOjEwQ0NBMDAwRjNBRkI2QjhCRDcwMUMwMzNCOTRGRTk3QjM0M0JENzU5QworOjEwQ0NCMDAwNTY0NkNGNzk2MDg3NzAzRjU5MEQzQzRGOTg3Q0ZGMkVDOAorOjEwQ0NDMDAwRjlGRUE3QjIyQjUzRTk1MUI0MjNCQTQ1NUM2RTY4NDExMworOjEwQ0NEMDAwRENGRThBRTg1RkRGMTFCN0MzRDYzMEQ0RjNCRjIxRUVBNAorOjEwQ0NFMDAwMkRFM0FDQ0MyOTcwRDgyRjY1N0U5RkYyRkQ0NkY4RkI3MgorOjEwQ0NGMDAwODk4MzFGQUFGQjgxQzRDMTY1M0Y0Nzg5ODcyQjdFNTE2OQorOjEwQ0QwMDAwOUE4QzYzOTUzMkREQzNFOUZFQkY3RUJGOENDNjUxRjNCQQorOjEwQ0QxMDAwRkQ3Mjk2RjZGQkU1MEQwMzE0NzE4NkYyN0U3OUM0NDgyOAorOjEwQ0QyMDAwOUM4NzcyRjBERDFFMjVEQjUxQkU0MzBEMENFNzhDM0M2OQorOjEwQ0QzMDAwRkJGQkJFOTdFMTdCQzcyMEI1QTJGOTY5MUYxODY1NzY5QQorOjEwQ0Q0MDAwQkExRDcwMERDMzQzOTE0Rjc5OUM2QTgwQkYzNzZEMEYzOAorOjEwQ0Q1MDAwNTM0OTJCMEVCQTQwQjZDRkI1MTI2MTdBQTM1RDdFRDc4OAorOjEwQ0Q2MDAwRTcxOUU0NzIxRDhGMTNGRDVDNDg4QzEzRjlDNTU4QUVBQQorOjEwQ0Q3MDAwRjI1RTMwQzRFRDkzRTZCQkJFMEUzMkNFREUwMzc2QjQ3NworOjEwQ0Q4MDAwNTI3QjE0QkUyN0M3OEQ5MkUzNDU0RkNBRUYwMEE3OEM5NAorOjEwQ0Q5MDAwMUI0OURGRURCRERGOUZFQUQyNzMzRTA2MTY1MEUyQ0Y5RQorOjEwQ0RBMDAwMDVCNTNDNEVENEU0QTMxNEU3MzdFOUJDNkRFQ0RERUZFOAorOjEwQ0RCMDAwNzE2QUQ1N0EzRjlBRUFFMTc2NjdCOTFDQkY3REQxQzgxRQorOjEwQ0RDMDAwRjlFMUM1M0IyOTdCNEZCRjlDRjAzOEVEOEJDN0Y5QkIyMAorOjEwQ0REMDAwRkExN0FCRjlCQjdBMjU1RUFCQkM5N0JGM0QxRUFGREQ0MgorOjEwQ0RFMDAwODNGMTVBRTU5REJERjI2RTlFOTAxMEJCODc4NkJEOTY3RAorOjEwQ0RGMDAwMjhFMjhEQzcwQzAzMDUyODhGQ0E3QkEzQTM3NURDREU1MAorOjEwQ0UwMDAwNTk1MjQ4QTc5NjdDN0U1NUU3M0M1QUM3RkFFOUE2ODg0RQorOjEwQ0UxMDAwNzdGQUYyM0QxQTcxMjA5RkVDQjcxNTdCQTZDNEU5QTIwMAorOjEwQ0UyMDAwMjc1Nzg1RDM1OTNEMTlBN0ZGQTVFMkI1NDdFQUM4NTQ0RQorOjEwQ0UzMDAwRkJCRjVGMUJBRjRERUE3N0YxMTZGQjlEQUJEM0EwQzdERAorOjEwQ0U0MDAwNEUzOTdFOTI0Q0RGMUU4RkEyODdBNzVCMTkzRkREREMzNworOjEwQ0U1MDAwM0ZFMUY5NUMzOUVFMzUyMkRCQjkyMDE1N0Y3NzE3Q0IzRQorOjEwQ0U2MDAwN0YxOTU4RkU0QkQxMzNDMTc0M0VGRkREQjI5RTUxQ0FDQgorOjEwQ0U3MDAwN0JFNTMyNjhEMDhFRDM3NEM5RUQ3MzBBQTU5NTc4OEY5RgorOjEwQ0U4MDAwOTUyRkE5RTM2NjczMDdENDcxQjM3OUUxMkM1NTdEN0VBNAorOjEwQ0U5MDAwRjQzNjU1N0ZDN0U5NTI1NTdCNEQ2QzhFQUFGRDhFNzNEMworOjEwQ0VBMDAwRDVBQUZBRTJCMTNCNTVGREVGRkFDNEE1QUFGRjY4NUMyQQorOjEwQ0VCMDAwMUQzNzVCNzI0RDFEMzc1M0Y4REIwOTFDOTEzOENFNkQ2MQorOjEwQ0VDMDAwRkExQjU1QkZBMjU2RjVCOThBM0JENUU3OUFEOUFEM0VCNAorOjEwQ0VEMDAwOTczMjZGNDk0MDdEQkVCMkEwRkE3QzU5MThEN0I3RkQ5MgorOjEwQ0VFMDAwRjk3MUZERjE1QTUxOEVFQjk3OTk3MURDRUVGQTcyMzNCQworOjEwQ0VGMDAwRTIxODNERTYzMUUxRkJGRjAwMURBREIzNjcwMDM0MDBGMQorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA2RgorOjEwQ0YxMDAwMDAwQkUzMTQ2MDYwRjg1MTBGQzFEM0Y5MTkxODM2RjMxMAorOjEwQ0YyMDAwMjNGOEY0QzBDNzk4MTkxODhFODMzMDIzMDNDMzNFMjAxQQorOjEwQ0YzMDAwREUwQUM0NkI4MEY4M0QwMzAzQzM1MjIwM0QwNzg4MjdGNworOjEwQ0Y0MDAwMDM3MTE3MTBCRjA0OEFENUIxNjIzNzg3ODU4RDgxODEzRgorOjEwQ0Y1MDAwMEQ4ODRGMDJDRDNBQzU0Q0JDRkQ4QTdDMDhGNjIxNUU5NworOjEwQ0Y2MDAwMDY4NkI1NDA3Qzk0OTdCRTYxMzBEOEYwMEM0MUZBRDk2MgorOjEwQ0Y3MDAwRjUwQzZBRDc2RUQxODFGNzM3MDhCMzhBMzMzMDMwNEE1RgorOjEwQ0Y4MDAwMjBGOEZEMTJBOEYyNkNFMjA4NzY5NjBDNjU3Njk1MDEwMQorOjEwQ0Y5MDAwRjUwMzAwMjk1MTI4MTU4MDAzMDAwMDAwMDAwMDAwMDA1RgorOjEwQ0ZBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMDk3ODU0NDU0MAorOjEwQ0ZCMDAwQjY3MERERUU3QjdCNDlCQTNCOUQ5MDk1MjU3NDgwMjA1MQorOjEwQ0ZDMDAwMkE0QkNCMTIwMTExM0IyMTg5MDEwMzA2NDQwOTI4RDJDNworOjEwQ0ZEMDAwNkMyMTg0MjQ5RDAxNjYxRTNFRkRGRjZFMDg0MkM0RDE3MworOjEwQ0ZFMDAwODk4QTFBRkMxOTVGODNFMDA0MDc5REUwQTAxMzlEQzBBNQorOjEwQ0ZGMDAwMzQ4Qjg4MzNFODA0QzcwNTk3Nzk1RjQwMUUyMDQyMTJCRQorOjEwRDAwMDAwQTMzOEU4RjNDOUFCNzNBQTZFQkFFQjc2Mzc2OUI3RkZGQQorOjEwRDAxMDAwRjk3RkZGODQwRjhBQkE1NUY3RDRBOUIzRDVBOTUzNzUwMAorOjEwRDAyMDAwNEYxNDlEOTUyNERENDBDODI1RjhBMUU1QUIwQTIxMjRDNQorOjEwRDAzMDAwMjU1ODc2NDg5REMzRTU4MUMxRjZCNTVFMTc3MTE5MDk3QgorOjEwRDA0MDAwNzlDMDZCQzI3MkJEMzc5REI4QUVBMENGNDdFQjhBRkNFQQorOjEwRDA1MDAwMTY0MkVFRjdEQUYxRjlFM0RFMTIyQzFGRjU5NjYyRjlDQgorOjEwRDA2MDAwODhENzhERkQxRUYyOTY2M0Y5MkI2RjBEOTZGNzdBOEI5QworOjEwRDA3MDAwQjBCRENFQkIwQUVCMzcyQTBCRDI2MDVDNDI1Q0E2QUNEQgorOjEwRDA4MDAwNjQ0MjNDMkYwRjFDQjk4MUQ2RDY2NzhFNEY5MDQ3RDM5MAorOjEwRDA5MDAwRkE1RkY1NDQ5RjQ1REYxQjJEMTdGOTg3RDIwNkI5QTQyNworOjEwRDBBMDAwMjg2Qjc0QjA5RjhBRTc4RDRBNUU1RjgwRjNGODU4MUQ0NQorOjEwRDBCMDAwRUI2N0FBNzkyRDNCNzJCRjJDMzI4NkUyMzk1NjQ2RkNDQgorOjEwRDBDMDAwODlBNTY0NzI3NjcyQzQ3RTgzMDFERTIzNDNEOTNDODlDQworOjEwRDBEMDAwRERGOURBQTBDOEYwQUUwNjc4MEYwREU1RjgyNURCMjdGQworOjEwRDBFMDAwMEY4QTBDQ0YwOUZEN0VFNUU0RjBEMjNCMEYwRjhDRENGQworOjEwRDBGMDAwNkYwQ0Y0QUI3MzcyNzg3RDdEQTYwMTkxQzcxRDBGRkQ5NworOjEwRDEwMDAwNjJFMDEzQzU4OTEwNUY4QkQxOUY5REY1RkRGOTQ1NUNFOQorOjEwRDExMDAwRjQyRkM1QTc2M0FGNzlFQjA2MDlGOTM3MERFOEI0RDY0QworOjEwRDEyMDAwQkVGQ0NDMTYzQTRFN0JDQjMwQTdERTQxQzg2NzJFNjdEQgorOjEwRDEzMDAwODJERDEyMTNERjZFODE3OUM0QzBCNzUyMTgyNzA2QkU5NAorOjEwRDE0MDAwQ0Q4RDkxNkYwQkEwNUYwQzdDNUIwMkZENjJFMDVCNjU5NworOjEwRDE1MDAwOEM3Q0ZCRDk0Rjg0NkZGNzAyMUVERjgzNkYxQjYyRDQ3OAorOjEwRDE2MDAwQjc1RkM1QzhCNzhEMzFGMjZENTM4Q0ZBRjY2NDhDN0MwRAorOjEwRDE3MDAwN0IyQTk0NkZFQTczQjVEQzQxMjRCNDhCMzcyQTI1M0JCNAorOjEwRDE4MDAwQTA5RjI3QjNDRDM2MjBFQjI3QzFCRjNEREY1M0VGRjY3RAorOjEwRDE5MDAwQzdDOEJGNTc2M0U0REYxMUEwNEYwQ0ZDM0IxQTIzRkY0NQorOjEwRDFBMDAwREU4OTkxN0YxRkM0QTg3NzZEQjhDRTU4RTRBRkRBODZDOAorOjEwRDFCMDAwMTBGQ0I5MzQwMEZFQjVEODRGNURDREVCN0FDMDNCODk4OQorOjEwRDFDMDAwOTA4QzcwMzk1MDRCQ0E1MTk0MDc5OUI4REJEOUJBNTUzNQorOjEwRDFEMDAwRjBDREE1MUM0MjU2OThFODdGRTlGQkJFM0MxMkQwRDNBNworOjEwRDFFMDAwRjE3RDM2RTJBRjk1ODRGRTlGMDM5RTg0RTQ3RjczMjkzMAorOjEwRDFGMDAwNTVFOEVGRDM0NUVDNEY3NEQwRkUzMEM4MTVFNUZGNjYxNworOjEwRDIwMDAwRUYxMDJDRUJCOTFDNkQyRUQyQTEzQ0Y4OTIwRDI4NUZDQgorOjEwRDIxMDAwNEY3ODlERDhERUUwMUQ4QkU1NjM1QzJFMzc3MjM5N0EzRQorOjEwRDIyMDAwMDBFNEVFMEE5MEMzNTIyRTU3NENFRTA4Mjk3MTk0NTMzNQorOjEwRDIzMDAwQkE3NkVDODkyNzFCMUMyODU3NjYwOUYwOTQ5OUJDREQ0NworOjEwRDI0MDAwQkJFN0NBQUQxQjI4RkNDRDM1QkEyQkI3ODVDOEQ5MTNBRgorOjEwRDI1MDAwNDVBQTdDNTFDOTRDMEVGNjdCQTJGQzg0NkRDMTUwQTQzQQorOjEwRDI2MDAwQjcwREUwMzQxNEVCRDQ3RUJFRDA3RTBERUVFRTdFQkQ2NQorOjEwRDI3MDAwQTBERjYzQzU1Q0JFNjQxMjA4MURGN0IxRDJFRTdFRTk4MworOjEwRDI4MDAwMTJBNUNCQkQxMjI5NkRCMjg0RjM2NThBQzRGNDk0MkEyOQorOjEwRDI5MDAwMEFGMjQzRTZGNEREOUY3Nzk2QjREMUY3NkRGNjkxNjkxMworOjEwRDJBMDAwODQ5NjRGODI3RUEyRkUzOUIwNTRERkFGQTc3NDc2NTNDNgorOjEwRDJCMDAwN0E2NDFBNDk0RDEzRTA0QjVBMjU4NUUyMkI4Rjc1MjQ2OQorOjEwRDJDMDAwODIxQzNEMzRDRTQ1MjQyQjIxRkRBMTlEOEVERjY3NzQ0OQorOjEwRDJEMDAwMUJDOUEyNjVFMkY4MzYyMjBEODM3RUI0OURENjUzNzgzMQorOjEwRDJFMDAwN0JDNjUwREE0RUUxM0MwNEVERDY2MDdCMkE2RjRGNzM2QgorOjEwRDJGMDAwRjBGN0FGNjNFRDBGN0IwOThFQUZGNkJCOEZGMkQ5NEQyMAorOjEwRDMwMDAwRjE1QjQ3RjFDNUU3QzVDNDA1NzQ5NDI5M0JGRDIxRjNFMgorOjEwRDMxMDAwOUYyREU5NzFERTk1QkM1NEYxQkYyRkZCNTRDNkZDQTFEMworOjEwRDMyMDAwNDE3Q0NEODMyRjY2Q0MwRkMxRUZCRUMxNzNCMEFFRTI5RQorOjEwRDMzMDAwNjNCRUEyMTJFQkZENTdGNUE2OUUxOEQ3MDcxMjRFRTc2MworOjEwRDM0MDAwRDQ5OTAzODQ3Njg3RUM0NDNGQ0Q3MTQ0NEY3Qzk0NUYzRAorOjEwRDM1MDAwMEUyQTlFOTFGOEYzMDUxNUU3MUY1NEZGNUM4QzFFREEyOAorOjEwRDM2MDAwRjZCQjM1NzQ1ODk3MjFEMkMxRDA1QkE0QzNCQURFMjI3NAorOjEwRDM3MDAwMUQwQzdEMkU0Rjg3Mjk5MjAzRTE0N0EzODczQUVFODY0NQorOjEwRDM4MDAwMkJDNTcxRTNBRTEyQzdERDcwOTUzODZFRENENTNGQ0M4RQorOjEwRDM5MDAwQjhFQkZCODlFMzFBMzNDNTcxRDc2NzhBRTMxQUZCN0ZDMQorOjEwRDNBMDAwQkY3MTg5RUNBNDBGOTlCOTIwMEVGODY3OUU2MERGMkUzQgorOjEwRDNCMDAwMTBGN0MzQTBERjYwRTdGNEM5NDEzQjI3REI0Qjg4REJGNAorOjEwRDNDMDAwMTJFNDI3OTFFOUNCMzlBMTcwRUUxNEVDMkE4NUYzN0ZBMgorOjEwRDNEMDAwMzgxQ0Q3RTVFMUQ4MzU3MEU2NkFFMTZDRTM3MDQ4QThGRgorOjEwRDNFMDAwOUQwRTgzNDNFRUQwQ0VFM0I3RkNCRDgwMkU2NDdDQkFBNQorOjEwRDNGMDAwQkU5MjEyNkJFODdCNEVDREY4Qjc2QkM3REYwRDc2MEM5MworOjEwRDQwMDAwRTZBMUJCRUNGODBFMEQ1REU3NjhGMUQ5QzNFMTEwRERENAorOjEwRDQxMDAwRTVFODQxRUMxQTM4QjNCNTcwMEU3MTM4MDFFOUIyNzAyNQorOjEwRDQyMDAwNEFCNUYzNzg1REU1QUIyNEFDNUY5NDFFQzM4MkVGNzUxQgorOjEwRDQzMDAwRTQ3NTlFNDIzRkU4NDVDNUIxOURCNjRCN0ZCMjA2NkU4RQorOjEwRDQ0MDAwQTBGRDhGNkM5MUZDNDY1QTBGRUM4REM3RjVFM0ZDQjYzRQorOjEwRDQ1MDAwRTk1OERGNzc4RDExRDc4OUYzQ0VDOTdFMjNCNTI3OTM5RAorOjEwRDQ2MDAwNUU3OERCMDZGNkE1RUEwNUJEMEM3NUREREU4RjZENkQxOQorOjEwRDQ3MDAwMTQyRjhGQjFGNUMxRUJFOEYzQ0UxN0Y0NjQyQjRBNjM5OAorOjEwRDQ4MDAwQTEwRUU4N0U4QUNCMjY1OUM1RUE2NTY2NTZBRERBQjJBQQorOjEwRDQ5MDAwRUY0RTgwNUJERTZDMjQ2NjBBQTdFQUE1MjVEM0FFQTMxNworOjEwRDRBMDAwRjUyNTg3MTUwMjVEQUFCNkFGMzZGNEE2RjVBNTdFQTlDNworOjEwRDRCMDAwMDlFQTFENzlBNDFDRjQ2OUNEREVGRjZDODdGNUU4RkM1MAorOjEwRDRDMDAwNkUyNTFCQzYzRjRCRDcwOTA3QjVDNzQ3QUNBREE5MzM3RgorOjEwRDREMDAwMjkxRTE1RkU1RDg1RjA1RUM1NEVDOTQ5MkQxQ0M1NzcxOAorOjEwRDRFMDAwRkJBMTBDQzA3Nzg3RTQzNDUyN0EyRjZCOEMyNzBFRDVDMgorOjEwRDRGMDAwREVEMUJGQTc3NkVCNzFGRUNCRTlGQzA5ODVCNzg0RDRGQQorOjEwRDUwMDAwMTcwMjNEQUI4MDM4MzBCRUQzRTgzNzRCNDE3RDNCRUI1MworOjEwRDUxMDAwM0Q4Q0UzQTlGNUFBMUQ3NDNDRkE3RUY1NzM5MjEzQTYxRgorOjEwRDUyMDAwNUFBRDIzNkVDMEIzRkQyNTczRTk1MzE2OThFNzZBQzM1RAorOjEwRDUzMDAwNjAyQkNDNkZCRDAxRkEyREYxQ0Y3RkQxRUMwMDNDQjc1MQorOjEwRDU0MDAwMTgwQTAxREZDRDVCMEM2NTQzODE3RTY0NUVDOTUwQzA2MworOjEwRDU1MDAwRUYyRjIyN0UwRDdBMTdDQzc3RjkzNUM2QUQ3QUUwQTc4QQorOjEwRDU2MDAwMjUzMDY4ODYzNURDQ0U5RUE1RUI5NTIzNjRGREFDMjA4NgorOjEwRDU3MDAwQ0NFRTEzRDk2Rjk4M0UyQ0Y4RkMyNTdEMjJDQUMxQjI5RgorOjEwRDU4MDAwNDYzRDcxODREQTBEMkUxRkJFQTM4NEY5MzE3QkFDRkVCQgorOjEwRDU5MDAwRUQ1OTQxM0UyRUI3NzM3OUU1N0M1QzlFQzhGOTJBNzczOAorOjEwRDVBMDAwRTZDQzE4MTY4RUNGODNDMDE3MjNGMzhGQTA3Qzk4QUVERAorOjEwRDVCMDAwOUIwRUY0N0YxQzQ4QkZDN0E4RkZFNDQwRkZDODg5Q0Y3QgorOjEwRDVDMDAwOUZBMDdFMTI5NDlCQTk5RjA0RTU5M0Q0NEY4MkQyNEZEMworOjEwRDVEMDAwRkQyNEU4Qjc5NUZBNDk1MDZFQTM3RTEyM0M3RjlBRkE3MworOjEwRDVFMDAwRTc1MDM2NTJGRjFDOUUzRjQzRkQ3MjI4Nzc3QTdERjg0NAorOjEwRDVGMDAwRkMzOTZGMUQ5NjREREU3QTJDOUZGNzM2NjBCOURCRUI1OAorOjEwRDYwMDAwQzc3RTJGN0ExQkIxNkNGNjM2RTFGMzk3QkRDRDU4QjZDNQorOjEwRDYxMDAwNzgwMzU4RUUwNTNFRDMzMkUwNkRDNTcyQkZGNzE4OTYxOQorOjEwRDYyMDAwMDdCRDZERjhERTIxRUYxOTJDN0ZDOUU5NkU5QjQwNzJCMgorOjEwRDYzMDAwNjUyQTJGMzYxN0IxMDM5QjkyOEE1REI5RTBBRjI0OTUxNgorOjEwRDY0MDAwQjA3QUVBMURCRTVDMDNBREE3QkE2OTlERDJCMTc3NjUxOQorOjEwRDY1MDAwMjBENzQ4RUJCRDZCNTg3QkU2M0QyNENGNDRFQjk5M0U4OQorOjEwRDY2MDAwRDYzRUUwOTdBRTNDMzNBRDBGQTg2N0VEODMzN0ZCRjJCMworOjEwRDY3MDAwRTI2ODdEQjA5RkI1NUZCNTMzOTAxNzRGRUI1NzM1QjE3QQorOjEwRDY4MDAwRjZFMTJENjQ5Mjg1RDY4NzA3NTg3REU0MTFENzI0MkJDNworOjEwRDY5MDAwQUQ4RjZDNjVGNTlDMEY3RDkzNkNCNDlFRDNDNkRFMUY3OQorOjEwRDZBMDAwN0YyRTMwMjk4MUQ2Qzc3N0IyRjY4OTVGOTM3QzNCQUQ1OAorOjEwRDZCMDAwNEYyNDEyRDZGMzJDQjlGOTg5QjQ5RTY3NjdGNUMyQkUyMAorOjEwRDZDMDAwRjM2NTQ3ODRGNTdEQUZEMkI2MTA0Q0RBQ0Y3NTM5QjkyMgorOjEwRDZEMDAwMzJGNTEzRjYxQURBNTY4MEM5NURBRkJCMjE1NzFFNDdFMworOjEwRDZFMDAwRTlBNzkwNDVEMEJFNDk1N0M0RUEwNkIyMTJEQTdGQUIyQgorOjEwRDZGMDAwOUI4RUY1RkQ4QTAzREJGN0U4RTZCMEJBQzE4MUVEN0ZDQQorOjEwRDcwMDAwRDUyREM0RkE0MUM1ODVFREM3NzU5NUFDNkU3MDYxRkIyQQorOjEwRDcxMDAwNjdCQTlGRTM3ODg3MTQzN0I2MkJGQUZGQ0RFQTA2Mzc0RQorOjEwRDcyMDAwQjYzRjJDQUZDRkNEQTdGRDJCRjU2RThGOEVDQTc1QUQ1MgorOjEwRDczMDAwRTQyRTI3MDM0MTVFOUJEMkMxMUVBRUUzN0VFQjJDOURGRgorOjEwRDc0MDAwMDNFNTdFNUQ4NjAxRjU2Q0VGN0ZFNTNDODU3QTA2M0Y1QgorOjEwRDc1MDAwQzk1MDJGN0IxQUZDNUUwQTY3MTVDMjUxMjgxQzdEQ0Y2OQorOjEwRDc2MDAwNzAyNjdFMzM1NjgwMzNGMTlCNzIxNUNFNkE4NDYzOEVBOQorOjEwRDc3MDAwMERDRURFNkZDNjhCRjg3QzUzQTFDMkQ5QTBBM0Y2QkUzNgorOjEwRDc4MDAwRDYxQURCQkMyNjVFOUEyMEUyNzNBOTUyODVGMzA4RTIyMgorOjEwRDc5MDAwOTMxODFCM0UwMUU1NUEwMTRFNDA1OUEyQzJEOThDNzAyNAorOjEwRDdBMDAwNTI2MkMzQzc2NTE4MjdDMDcxMTk5NkFBNzBCNjIzOUMyOAorOjEwRDdCMDAwOENEOEUwMDQwQ0Q3ODlGODE4OTZBOTcwOUU0M0ZBRjQyNworOjEwRDdDMDAwOEI2RDVFMkVFM0Y1MjIzRUM2MkExNUNFMUYxMDlGQUM1MAorOjEwRDdEMDAwRDhFMEVDQjc4QUY0RDk2RkVEQTY0RjAwRTE2NEM3MzYwNAorOjEwRDdFMDAwQUYzQzlCNDg5RjNDNUIzNzdENUU0MzM4NTdDNjA2NjcxRQorOjEwRDdGMDAwQkY0REE0Q0Y3RTVCMzc3RERFNDQzOEMzNjI5QjU3NUU0RQorOjEwRDgwMDAwODI0ODlGQkM4NDZFRkE3QzgwNzBBRTg5MEQ5RjgzMjkwQworOjEwRDgxMDAwMjI3RDBFQTY3NEQzRTcyNEMyMTkxMzFCM0VGOUE5MjI1OAorOjEwRDgyMDAwN0RGMjUzQkJFOTczMUVFMThDOEIwRENFQzE1NDkxM0U0QQorOjEwRDgzMDAwMDc1M0JCRTlGMzA1QzJCOTNFQjY3OUU1QTc4OUY0QzkzOAorOjEwRDg0MDAwNEZFQkE2Q0YyNTg0OTNFQjZFNDQ3QzA4ODU2MzhEMEU0OQorOjEwRDg1MDAwRTc1MDNGOTEzRTg3RkE3NUQzQzdBNDA3MzgwNTE0Q0UyOQorOjEwRDg2MDAwQzA5RUUxMTQ2NjhBRjQyOUNDRUNBNjRGQTIxRUY0NjI5NQorOjEwRDg3MDAwNzI2QzcwMEU2NThBRjQzOTk0RDk0RDlGREU4OENGRDRDRQorOjEwRDg4MDAwRDhFNjU1RDg1RkE0NEY2MTdGNDYxRjhGQjE3MzkyMURCNAorOjEwRDg5MDAwRkNDNjQ0RTJEQzRBNUY5OTk0RkNCMzgzQjBFRTI4MTZFMAorOjEwRDhBMDAwRTIwNEIwNDdBNEMwMzY4MDRGRDc1NkY0NEI2NUE3RUFEMAorOjEwRDhCMDAwMDczOTA5RjhCOUM1MzY4NzEzRTIwMTdBRDVERjIxQURGQQorOjEwRDhDMDAwQjgxRkIxRUM0QzE0RTI0RDJGRTlGMzg2MDNCRTU2RUFDMworOjEwRDhEMDAwMTU4NkZBM0QwOTYzRTMwNDdGMkJEMTk1MjRENDdCMTU4QgorOjEwRDhFMDAwRjUxNkZBQTc5NDBDMTBEQUQzNEFBRjEyREEzM0RDMjMxOAorOjEwRDhGMDAwODU3QTlGRjJGMTQyRkY3RTM1Nzk0MkJERkZBQTI5NDIyNworOjEwRDkwMDAwRkYyQ0RGMENBMTNFQjA2RThFRDAzRkJCN0U4MUQwN0U1RgorOjEwRDkxMDAwNDU0Mzg1RDA3RUE1N0ZCOTUwQkZCQUYxNUY4NUZFQzM3MAorOjEwRDkyMDAwOUFENjA4RUQyMzlBMzcwOEVERDcwNDFFMTZFQUEzMEVGRgorOjEwRDkzMDAwM0YyMUY0MUZEM0JBNTU2OEJGRjZEODMzNDJGQkI4QjZCRgorOjEwRDk0MDAwRTc4NUZBNzU2NzVFMTZGQTVGREZCOTVGQThERjcwRjFFOQorOjEwRDk1MDAwQ0Y0MkZGNUNGMjM3QTEzRUM5RjQ4MUQwQkZDMEZFOTEzNworOjEwRDk2MDAwRDA3RTYzRkEyNzFBM0Y1NjhDNUZENEU2MTJFNkNGNjY2NAorOjEwRDk3MDAwMThEMDlGMEQ1ODBENTgzN0VDMzVCM0ZEMERENDkzMjFCOQorOjEwRDk4MDAwMEU1MThDNzVDM0ZFODU4RTY0ODgwNzAwMDBFQTRGRTQ1MworOjEwRDk5MDAwRjYyRUJGMDJFMjU1QkYxOEVGQkUwMkUyQjhCRjMwQjhBNAorOjEwRDlBMDAwNDdEODIzRjg0MUVEQjJGQjFFM0RDNjEzNUIyNTkyMEUwRQorOjEwRDlCMDAwQTU0MzA3NjU5QzlFQzcxMzhDNEM3RUQ3NjdFNTNDRTU2NQorOjEwRDlDMDAwMEJEMTgzQkE3RUQ0QkZBMEY1RjU3QThBQzc5OEEwRkVBMgorOjEwRDlEMDAwQUNFRjU3OTYzRTNGNjQ5Qzc1RkQwQ0E1NUI4N0IyRTdBNAorOjEwRDlFMDAwMEIyRDMwNUVDOTdEMzA5RUM3RDAzOTE4RjBEMjhFNjNDMgorOjEwRDlGMDAwMUMzMDU2MThDNzk0NTk4RUUzNkM4NDcxNTI4MkUzMTgxOAorOjEwREEwMDAwMzNDQjM1RTM5ODRBQjdGMkU3N0M5Q0M3NDA2RkEyOEREMQorOjEwREExMDAwQjM3RUMwNzg3MTNFOTkxNTM4Q0UxNkNEMzhFQjMzMkJENgorOjEwREEyMDAwMzRFM0M0QjFGOUQwRTc3QzlDQTcyRTM3OEU3MUUwMDRCMworOjEwREEzMDAwNzEzRUZEMkI3MTlDRTdCNEYzRTk1RkE5MTlDNzgyRTMzRQorOjEwREE0MDAwQzA3MzE4ODdGNEE1QkI5ODM0Q0E2NzYzNjcxOUNBQzE0NQorOjEwREE1MDAwOUZDQzE4MjczM0Y0QTlGODBERDRDOTA3NjY5MjBERTNCQgorOjEwREE2MDAwMzhFOEI4QjQxRjE5OTI0NDg1OUE5MDdGRDEyNzIxN0Y1NgorOjEwREE3MDAwQkU4OEEzRkMwRjg5QTcwNUY3RTMzRURDRDcyRkU2Mjg3NQorOjEwREE4MDAwMTIzRkM1ODhFRTkzQUFCOTZDMkVEQTM5M0Q3Mzg1ODNBRgorOjEwREE5MDAwOTZDRDA3MDYzRDAyRTM2Q0I0M0FCMzY5QkRCRDc5OTJGOQorOjEwREFBMDAwNjE2MTA0Nzk1QTVDQUY5QzZBMEI5MUYzRUVGRDU5MUVEQgorOjEwREFCMDAwMTk1MjQzQzc1RjExNjc0NzdDRDRCQTVBMjZFOUM0RTdCNQorOjEwREFDMDAwMjdFOEJFOEJEMEZEQzk4Nzc0OUY0MkU4N0VFNTIzODU5OQorOjEwREFEMDAwRUQzM0ZGOURFRUNGQTBERTQ2Rjc2N0QwNEVDODZBN0NERgorOjEwREFFMDAwRUYwNDhGMzM5RkY4QTVFNDA3N0E3RjcxRDdDRjE0NUNEQQorOjEwREFGMDAwMjc3Q0U0QURGNDU0ODgyNkIwOUY3OUFCRTIyOTEzODJFOQorOjEwREIwMDAwRjhDREY3RjUxMkVBRDQxQ0Y3RDFBNUUzQkUxNkUzMDc2QQorOjEwREIxMDAwOUQyRjE5RkQ1QjgxQUU3NTdEMjg0RDc5QkYwMTg0QkNCOQorOjEwREIyMDAwQkI3N0VBMjFDOTg2RDUzRUJBQjE4NENDQUM5OTVFOTA2OAorOjEwREIzMDAwODY1QTI0RjU1QjRFRjE5Q0IxRkIxQTg1QkU0MURBOTVGRAorOjEwREI0MDAwQjYzQjlEOTYyMDVDRTI1MjRFMDA3RDRDRjQwRkMwQjk2RQorOjEwREI1MDAwQTU4OEQ2NDNDNkJGQjU0NEFDQ0YyMjcyQjA0RUY5N0Q3RQorOjEwREI2MDAwNTIzRjgwQjBGODNGMUZEN0UxNTI4MEFGMjU3NDhFMTkyNQorOjEwREI3MDAwOTRENUIzQTAxQzA5Q0QyQzVFNTM2QTY3RUZBQUY4Nzg0MAorOjEwREI4MDAwMTYyQTI0ODBGQjZCNUYwQUM0QjE4OTJGMTlGQkNENTE4MworOjEwREI5MDAwRjdDOTFBRkM0QTE1OTNBQjg0RDJCNTc0QkUxRUU5QUEyNAorOjEwREJBMDAwQzVGN0ZEQkRGMTJFREQ3MDVBRDYzREEyNDA2OEI2MjdGRgorOjEwREJCMDAwRkM2N0JCQzU3NjUyQ0VDNjUzRTlBQUNBQ0IyOUNFREZENQorOjEwREJDMDAwMTNDMDdGNUE5RTA2RkU1M0JDNEY3MkZFMDdFNTk4RjFDNAorOjEwREJEMDAwREY2Mzc0NEYwM0ZFNzc2RUQyMTNFNDE3RTdGQjZEOUM4RgorOjEwREJFMDAwRUY4QkVCNDVCRURGMDZFNzcxQjRGRjZEMkJCMzU4QkM3RQorOjEwREJGMDAwQTlBMTk3QzA1RjNBNzE5MTBFRjUwRjE1NTBCMzFBODYxRgorOjEwREMwMDAwRkZERkI5MUNDQ0E5REJGNTBBQjBGN0Y2NzJDREZDMzgwMgorOjEwREMxMDAwMUZFRUU0N0M5OEFCQTFDNzZEOUM2RjczMzlERjk2MTA0MworOjEwREMyMDAwREZCRDE5MThCRkYwMkIxMEQ3OUI1RDJFMTFCMDE3OUVDQQorOjEwREMzMDAwQkI1NUJFQjUwOTdDNzNBQjdDRDNFMDdCMjdFN0RCOUQ4RQorOjEwREM0MDAwNzczMUJFNjlGMTZFRTM3QzZCNkJGODRDMjEwM0MyRjE1NgorOjEwREM1MDAwRDZFMjM5NkY5NTY2NUUzRTJEREZFQUI5NUNEQTBERTBGQgorOjEwREM2MDAwNEY0RDc3RTVBRTM4MTlEMkZGOTZBMkM5MkI0RTg2RDgxNAorOjEwREM3MDAwODU1QjRCQTYwQkY1NTlBNUIzODVGRUIzRERGMzg1RjZBMQorOjEwREM4MDAwREJDQjk3MEFFRDczNkI3RTI2RDRFN0FEQkE0QkU4M0Y0QQorOjEwREM5MDAwREZCNzVBNjg1RjU4Nzc5RkQwQkVCOEZFMjFBMUJFQTRGNworOjEwRENBMDAwNjE5M0QwN0ZBOTdGOEJEMEJFQUM3MTg3RDA1RUQ1QjQ5NQorOjEwRENCMDAwNEJBODdCOUE1RjEyRkFFQkY2NUU3OTMzQzhENzkxQjcxRgorOjEwRENDMDAwRjUwNEUyN0QxNzlDQTczMUNFNzhDMUE5MzhBMUNGNDlEMAorOjEwRENEMDAwQUYwM0U1Rjg5NDc3MDg5NjY3QkM0RTk0RjNCM0RFQjFEMgorOjEwRENFMDAwNTg1NjgzNEM4RTAzM0I3QkMwMDJGMTUzNEYxQ0I1RkI0RgorOjEwRENGMDAwODk3NDFEOTdDN0FEQTk5QjAwRUIwRDZEMUY0RkM4QkY2MQorOjEwREQwMDAwQ0EzN0FDRjFGNUE1NUEwMDcxNkY0QUZGRTIwNjAzMDk2NAorOjEwREQxMDAwOEMyMjU0QkE3Qjc3Q0I3M0E3M0VBNEJEQUQ4N0Y2MDZBMQorOjEwREQyMDAwOTkwNDdBODVCNzE3Qjc0NTdFREUyMTc1MEVDRTgwQjg4NworOjEwREQzMDAwRUM3QjQ2QjIzRDI0REUxODdFREU0MkZBODA1RjExQURGOAorOjEwREQ0MDAwRkQ5QzhFOTQ4NzlFRjc2Qzk1RDkzOUNGMTE3RERFNTY1OAorOjEwREQ1MDAwOTlFMjU1Njk2MEZBNUZGOTdDNDYxRUIxNDEzRDMwQjhFMQorOjEwREQ2MDAwQzY3Mjk5RjE5QTI4MzI2OUMwRTc4MTgyREUyRjY5QjhCQworOjEwREQ3MDAwM0FBOEU3MDRDNjYxRjY3NEE5N0Y5NEYwN0M1OUUzNzU2QworOjEwREQ4MDAwQzI3QjZGNDhFRTJEODBDN0I5N0Q3QTVDQUY0OUUwNDAxOQorOjEwREQ5MDAwRTYyREMzMDAzRkQ3NTYxOUQ2RDFFNjE0RjRCQjVBQkRDMQorOjEwRERBMDAwQUUxNTI3MTU0MkRFRjQxNjYxRjk5NkI3MDRDQjc3QkNBMQorOjEwRERCMDAwQTU1ODFFRjNCQUIxN0NERjVCOEVFNTg3REUxQTJDRkYxNworOjEwRERDMDAwRERCQjBBQ0IzNkFGMEZDQjEzREUzQTJDNEY3QUVCQjE2QgorOjEwREREMDAwM0NFNTZEQzBGMjhDRDc4RkU1NTk2RjIzOTZFN0JDNERCQgorOjEwRERFMDAwNThCNjdCOUJCMTU0RUQ2NzRGRjI3Nzg2QUZBRjY3NDE3MgorOjEwRERGMDAwMEU4REUxNzI3NjcwRURCQzM1NzU3RDgzNzI3NjU4MkU4RQorOjEwREUwMDAwNDMzOTUzRTk1QkRDNjBFNEYyOTAyQUM4QzM1RjYxMURDQgorOjEwREUxMDAwNEUwMTc5RTlBMUJENDFFMTcyMThFREZEQzhFRDIwNkYxOQorOjEwREUyMDAwQkQ3RjA0NzkyMzY0MERDQTgxMDVFNEVFN0JDODFCODFBNAorOjEwREUzMDAwNTM4NDE0OTBBNzNFMUE3OTEyRTU1MDk1MjM1NUNGREZFRAorOjEwREU0MDAwOTA0QUNFODE3Q0E5NzI2NTkxOTkzRkE0Q0FENUZERTAyNAorOjEwREU1MDAwMjc0NkYwQjc3QTJCMTI1RkZGOTg3RjQ0MDJCOTNBMjAyOQorOjEwREU2MDAwRDk3MjdFNUU0MTdDMkVBQzc3RjFCMTZCMjlCODU2RTg1MQorOjEwREU3MDAwMjdGQjg3QzAzQUQyMzVFNEFCQzExMERGRUYzQTQ2ODVDNQorOjEwREU4MDAwMjAyQkZBRkNCNEYyMTI5REVFMkVEQzNGOTRGOTI5RjMxQworOjEwREU5MDAwN0I4NUI3OUJFMzE4NURDRDNBNTI0NDQ2QzJGOTcyQ0VGQQorOjEwREVBMDAwMzEzN0U1NjdEQzlGQUUxRTA5RkI2NkZBNUMyNjQ5MDA0OAorOjEwREVCMDAwQzdFRjlDMUVFMUJDODAwQzIyNDhFNzlFRThBQkY2M0YxMgorOjEwREVDMDAwRjVDNDdGRTZDMEI5QkYwNUY0OUNDRTNERUU4MEJFODZBQQorOjEwREVEMDAwRTlFRjUzQ0U1QjQyQ0U5NzNDNDY2NzNBQzRDMTNCQjNCMQorOjEwREVFMDAwMEQ3NkU2M0Y0QzEyRTk0ODI2RTFGOTgxNEFDNzAzRDk4RAorOjEwREVGMDAwNUYwQzg2RjM5OUZCQTgxQzgyN0U3NTBEMUE5QzQwMkU0MAorOjEwREYwMDAwMjMxRjNERDlGQjlFRThCOTAwRTYxQjEzM0QwRDA0Q0U0RgorOjEwREYxMDAwQjkyODNEQjdDMjdEQzc1OEU5RDk5MzlERUNDOTNFOUU0QgorOjEwREYyMDAwRDhDMEU4N0M4NEZCQTdEMUU4QUM5RTg3NjlGMUI4NDVFRQorOjEwREYzMDAwOTEzOTFGQjgxQzkzM0IzNEY0MkYxNUU4REZEN0VBQzBBMgorOjEwREY0MDAwRkUwN0Y3N0U5MDA5RTc3ODVEQkJBRjQ4MjA0MzQzREZDQgorOjEwREY1MDAwMkY2MEU3M0REREVGRTcwQjdBMjBGREU5RUY5OUIwM0Y1OQorOjEwREY2MDAwM0VGOEMyQkI1OEFFMjU0QzBGMzc1QTRBRTYyQTYzODJBOAorOjEwREY3MDAwRjA2MkJENDcxMDZENUUxRTQ1MTJFN0Q1ODM3RTc2QTQyNAorOjEwREY4MDAwQUFGQUQ5OUEwOUYyQjQ5QkRCODFCMEY5RjUyMDlGRUE4RAorOjEwREY5MDAwRkMwRUMwRkMyODlDQTkyMEQzNzQxRUY5NzJDOTVEQzI3NgorOjEwREZBMDAwRkM0NkE3RTBCQzdCOUE5RjI3QzE0MEE0MTExNDNGQUI1RAorOjEwREZCMDAwQzE0MDEyQTgzQzJBRUVCNTBBRUVFQjlDNkQzRTg4NTM5OAorOjEwREZDMDAwRUM4RDc3RDY1Mjk2Nzg2QzY3REYwODM4RTAzRDMxOUU0RAorOjEwREZEMDAwQjFBQ0QxNUMyM0ZBNEY4OTM1QTJGRjk0NTExM0VBM0ZDQgorOjEwREZFMDAwNzUxRDdFQ0FFNkE2RjgyRDRGRDdENzlDRUMwNUVCOUM5NQorOjEwREZGMDAwOEJBRjczNkM1RDU1RjFBQjZBQ0FBQUIxMDg3MEM0N0E3NQorOjEwRTAwMDAwNTdCRDU0QzRFRUUxMzgxMjY2NDYzOEVGNTNDQkU1RTkwQworOjEwRTAxMDAwMDYxQ0U3NkNFM0MwMDQxOEY3QUNENzU0QzNENjU3N0I5MworOjEwRTAyMDAwMEQxQjM3QkQyNjc0N0RBRDVDMTU1RjczNzI1NDEwQkYzOAorOjEwRTAzMDAwNjg3MDdGNjhGQ0E4NDQ5MDhGNENCMDJFRDJCNjgxRDExNgorOjEwRTA0MDAwRkI0N0U1QTdGQ0I5MDFDRkQ1NUI5NDJGQzA3RjM3MEYwNQorOjEwRTA1MDAwNTFGRDc3MTlFQjJBNUM0RjkzREU2NzFDMDFDRjc3MEFERAorOjEwRTA2MDAwRTNEMUY3MUNFQUQ5MzhCQzE3NUQ2RTY0NzI0QUU1QTdBNAorOjEwRTA3MDAwMUVDRUJCMDhERjFGOTg5MENGNkUwQTMxODFDMkVCOTA5NQorOjEwRTA4MDAwMkQ3NTIwNTc3RTg1RTlCMzg3Q0I2OTk1QTlDREUwNzZCQworOjEwRTA5MDAwMjBCOTVCNDFBRTE3OEM1NUU1REMzMUVCMDM2QUE3M0YzNQorOjEwRTBBMDAwRkU4QjgyRjdDQ0M4RDcxNDdBNEVGMEFBQzMyMjUyNjJGNAorOjEwRTBCMDAwODNBMEVBODJERENCOEE2MURERkVGOEM1OUJGODNFQkQxOAorOjEwRTBDMDAwM0UwN0U2N0Q5RUU4OEFDMDJFOUQyNzZGREE0Njg1RThFQQorOjEwRTBEMDAwRUI2OTg1QzVCMTQ4MUREQkU3RjhFODFGOThERkUyN0FGOAorOjEwRTBFMDAwNzFERkIzQTQ0MUFDOTc5MTE5QTk2MDZGQ0IzNjJBQzRGNAorOjEwRTBGMDAwNEY3MTVGMEFGQjI2NzVERUQ0RkVCRUFCRDgxMUI5MjU4MQorOjEwRTEwMDAwQTQ2NjFERUNEMzFGNTM1OEJDNjc4MTlEQzg3REE4QkQ3NAorOjEwRTExMDAwQUVGQUMzQUY3MzIwRUVEM0FFMzA3RjU3M0QwRjVGOUE5OAorOjEwRTEyMDAwQzRGNjgzMTUzM0ZEMDYxN0VERkZEMUVFNTFCNzUxOEJDMQorOjEwRTEzMDAwNEJERkY3QUY0M0ZGNjczQTcxNkUyN0UxNzQ1RjU4MjdGMworOjEwRTE0MDAwRTJENzEzRkU1QTdDNTUzRjI4RUM1QzlFRTM5MURDMjgxNQorOjEwRTE1MDAwNDVCQzJGRjUzNUI3NzNBQTdFMjQxOUVDNDJEQzI3NEQ1OAorOjEwRTE2MDAwNTM1N0U1NDBFMTcyRTA1N0RDNTY0MzBBRTMzQkYwNTE3OAorOjEwRTE3MDAwOTIzQjBERUU5MDdFODY2MEJGMjRDMzk4RThGRDhDRDA2NAorOjEwRTE4MDAwNEY4RkZERDI1OEJGQ0U0MkRDMUYxMzJBNEY0MzgzRkQ3MQorOjEwRTE5MDAwQ0M0MTc4N0REOUI4NjJCRkFBM0YzQ0ZCQTI4RkNBNEI2NQorOjEwRTFBMDAwQzVFRjFFQjUxMUJBNkU3RTJDRDdBNzNBRTlGM0NBRURCQQorOjEwRTFCMDAwRjdEQTVDQjQzQzIzRkI2Q0MwQ0Y4RkZERkE4OEY3N0RBNworOjEwRTFDMDAwNkYzMUE4RjQ3MDU5MjQ4OEE3NzFGOTI0NzUzRThDNTNENworOjEwRTFEMDAwN0NCMTVEQjFFMzM5NDJBMzMxNjBBNEYyNTlCRDdCNjlFMgorOjEwRTFFMDAwMzExOThFRjVFM0FDQkVGRTUzM0RENDlCNDU3RTU1RkMwNAorOjEwRTFGMDAwRTZEMTU0MDdCQjI3QzRFMjQ5MjQ4MDdFNkVGNUI2RkYwMgorOjEwRTIwMDAwMjg4NEY1QzI0MzNBNTFDRUI0RUZDMUY4MTc5MzUwQUYwQQorOjEwRTIxMDAwRTcxQjEyQzJEQkYxNjI3MDJBQkNDRjdFM0NCQkVGRkY3MgorOjEwRTIyMDAwNTQ2RjgzNzJGMjY5RDAyMzhGNDY0RUNBQjlERjBBRjQ2NQorOjEwRTIzMDAwODJGRDdFQkVDMTlBOENGNkZFNUE3MjJERThCQjRBMTc0QgorOjEwRTI0MDAwRTI2N0ZFNkJFRDhFQzc4NzFGQTc3ODlEREJGNjE3OUJGNQorOjEwRTI1MDAwMzQzNEQ0NEUzMDc5RUI2QTVBRjg2RjI2NUQ3NDdCRDIzMQorOjEwRTI2MDAwNEVFNTMxRDQ0RkEyODBGMTNENDczM0Y3QkI1QjU4NTk5RgorOjEwRTI3MDAwQTkwNDZDNzAxRkE3NzI4QkUyQTQ5MjQ4MkE5RkQ1MTM0MQorOjEwRTI4MDAwQjg5RjQwREUzM0ZBMjEzRUJBRUNEOTU3REUxOTRGRTk4OAorOjEwRTI5MDAwQkY2Qzk3OTI1Q0NDQTY2MzkxNTI4M0ZDRjFEMEJGQUI2QworOjEwRTJBMDAwNDYwNkY5NTFGMUZCNTcwQzhFNjFFQ0Y5M0Q0OTQxQkUzMAorOjEwRTJCMDAwMkNEQkI1Q0Y0MDg2ODVEMzcxNTJEMzNFNDM5QjI1MDJEQworOjEwRTJDMDAwN0Y5QThFMTdDMjdBNUJCQkUzMUYwNjg4MkI3RUJDNTdGMgorOjEwRTJEMDAwMjI2OTU5RTFFRjk3NkY3OTA1RDczREEwMTNGMjkzRjNDNworOjEwRTJFMDAwQUI5QjdGNjE3QzBCNEM3Qjc5MzRGNkIzODMzREVDODkyRgorOjEwRTJGMDAwNkZEOUIwOUY0QjQxRjk3RUVFNjVCOEM3RjRCRUQxMDkyNgorOjEwRTMwMDAwNzQyODdGNkU4NTBERTY3MzVBQUU2MTcyRkVFQjdCNTMwNworOjEwRTMxMDAwNDFERkNCMTU1RkFBMUQ0QkY2QkNGQ0M5OUZBM0ZDMkRBQQorOjEwRTMyMDAwMzlGQUYzNTRGNDFGODgyQjQzODdCNkQ5OTcwMUYzNUM2RAorOjEwRTMzMDAwQkNGOTU2OUM2NzE5NzFBMzFDOTZGRjVBNUYwMkY3NENGMworOjEwRTM0MDAwMkZDOEE0Njg1NzA0M0RGOThCODFFRDVGNEU2RkE1Q0NCMworOjEwRTM1MDAwQTVGMzNDMERGODgxN0Q3QjUzRUZERjhFNzFGMzlGRTFEOAorOjEwRTM2MDAwM0RCODlGRjMzOUQzOTUxMEVCMTc0QzhDNUY1QjBDM0E5QgorOjEwRTM3MDAwMzUxRTZBMTJFNDc3REJGQTU2RTBEM0Q5N0VBRTM0MzgyNAorOjEwRTM4MDAwRjdBMDc0RjA3MUJBNDk5NzI4NUNGREQxODIzNEM2Mjc5MgorOjEwRTM5MDAwRTI5MDczRjg3QkQ0REU0RjgyRTdEMEJGNTU3MTk5ODc0NgorOjEwRTNBMDAwMEJFRjcxRkJDOEM2NUZDOUM3QTc3OEM3QzFGQTc1M0EzQQorOjEwRTNCMDAwMzVCMkZGRjcwRjNFM0ZGQUQzNEE0MkU0MkM0NERGOTlDRgorOjEwRTNDMDAwRkU2RkJCOEZFOUJCQUFGRkZFRTk0NUQwRkVGOTVCNENBRgorOjEwRTNEMDAwOEZFMDNENTgyRjI4NUU4MTM0NkNERjM3NTM0MkZCNDA3RAorOjEwRTNFMDAwRjdEOTkxRjQ3QzlCQzJGNTVDNkNBNzNCMUM1Q0ZGNTU5NAorOjEwRTNGMDAwMzlBMUY4Q0I1MjQyQThCQ0QwNzE5MjkwMEZCODNGMkVGMQorOjEwRTQwMDAwREI0OERGMEZGMUNCM0MzMDJFRjYzMzA0OUY4N0FDMUI4QgorOjEwRTQxMDAwNEJCODVEMzhBNEIxMDc2NDczNEE0QzdFNzRBNUUyN0ZBMworOjEwRTQyMDAwRkEwOUQwREZGNzhDNEU5RjAzRjQ1NzI5ODFGOTdGQjJBOAorOjEwRTQzMDAwRjNDMDNCNzNBODlDN0ZEMkE0RUFBRDY4NTdCNTdBNUI2MgorOjEwRTQ0MDAwRkVGQzE4MTI0OTZGM0ZCMUQwN0Q1NzI0QkRBNUNGMjNFNAorOjEwRTQ1MDAwRUFBREE1MERFNUY5RkY5NjVENTVFOUQ3QUVBMTFGRDg0OAorOjEwRTQ2MDAwQzc5NzFERDFFOUE4QjU4RjFCMEM4RTg4RjY5MUZFQkMwRAorOjEwRTQ3MDAwNDU3MkMyRTU1MDk1M0Y1NUVFMkE3RTVCRDUxRkVDNTBBNAorOjEwRTQ4MDAwQjc3Q0FBRjJENzJEOUZBQUZDNjlFNzJCRDI0RkRCRkVGRgorOjEwRTQ5MDAwMDdEMDZGOEFEN0VEQTY0REQzQzA3RjM2NzUxMjhDQzNENworOjEwRTRBMDAwRTdDRUQ0RTMzRDRERDNFNzg0REREM0I4MjMxRUVCQjNGMQorOjEwRTRCMDAwRjQ2REJGMDc5RkYwODNBQTU5QzM2MDlEQkY5REY4MTRGOAorOjEwRTRDMDAwNzY2RTVGQUZBMDFGRkJGNUE1NEIxM0U4N0NFNjcwRkFGNAorOjEwRTREMDAwREU0RUM5M0Q5NUYyQTM1NDk2MDI3MTE0Q0ZEOTMyRjFBNAorOjEwRTRFMDAwMjUyNDQxM0M1OTIyMjc0MkYwQjhCRDVDQUNDM0NGQzRCRgorOjEwRTRGMDAwRDQyMDlDOUVGQTdGNUJCRkZCQkI5NjQ3Mjk1RjRGNjQ4RAorOjEwRTUwMDAwMTNGMjM3Mjg3MUZGNDExREVCMTA3OTlBREVDMkNFMzEyQworOjEwRTUxMDAwM0NBMzI1RkYwMEQ0QzMzNkI5MjQ2NDFGRTEzMTMyRkI4QworOjEwRTUyMDAwNzMzNEZGOTYzMTQwQkZEQzU5QzMxMjk4OUMwRkM2RkQ2RgorOjEwRTUzMDAwQTI4N0RCQjEyRTlGMjMwMUVDN0I1N0NCNDBEQzE3NzYwMworOjEwRTU0MDAwMUQ1RTY4NzU0N0IwNjcwN0I4OUNCREMyQ0Y2MTNBMkNBNQorOjEwRTU1MDAwNTJCRDlFQ0E3RDA3RTk0NEJGQzY2NzMxNDc4Q0NCQ0QwQgorOjEwRTU2MDAwMzFBQTc2OUFGMzhERkVFOEU5RjhBNTVDMEU2N0QzNTdEOQorOjEwRTU3MDAwMTM0Njg2RjA2REU2RDQ4RjY1NUIzODFGRTBFNzQ0QzgyQworOjEwRTU4MDAwQkVFMkZCRDIxN0U0MUFFODdCQzBEQzU2NTgxMjIxN0VBQgorOjEwRTU5MDAwNTNDOUU5Mzc3MUZGOTcwNjU4RjdGMjVCNzI2NUEwNjNCQworOjEwRTVBMDAwQkU0NTJGQzQ0MzE2MTlCOUJFMEUyNTQzMDFBRjg5RkJFMgorOjEwRTVCMDAwOTczRTMwODZDQUIxRTdCMERFNjlBNkYzRjNCNDdDNkE1MQorOjEwRTVDMDAwNzA0N0Q4REY2OUU5MDlGMEMxQkZEQzZBNjRGRUYyREI5RAorOjEwRTVEMDAwNEFDOTYyQTBFQkRCQjdCMkYzREVCRjE5OUM1NTkxRjBEQworOjEwRTVFMDAwNEMzNzMzN0Y3MzM2MjlCOTMwNUFGQUU5RDEzNzc3OTZFOQorOjEwRTVGMDAwMzU5MDQ3RTlEMTY1NjFGN0I1QzNFNThGRTk3RDk3NUQ1MgorOjEwRTYwMDAwRjJBRjk2NDAwRUY1QUM5RUNDRUUzNzE3MTJGNzAzMTMxRgorOjEwRTYxMDAwMjRENEY3MUI0MkVENTc2RUYzRjQ2N0UxM0U0RDc1OEI0MgorOjEwRTYyMDAwNjREN0QxRjY2QUI5Q0QwMDcyRUM2OURFMjU4M0RGN0U0RQorOjEwRTYzMDAwOTM4M0I4NzA3RjJERDcwQzlCMTkxMkZGQTJDQjFFRDJFQgorOjEwRTY0MDAwRUJDMDU3NzNFNjAyN0QzRjlCNjkyNDgwOTc2QkU4QTc3OAorOjEwRTY1MDAwMzY1OEZGM0Y2QjE5ODU3QTEwNkQ1RUFGN0JDOUI0N0M2RAorOjEwRTY2MDAwMDVFMDMwN0JBNjk1ODdDMkU0NzhBMTdFRUIyNEQyMTcyMworOjEwRTY3MDAwQ0U4MTI3MUFEQjU2MzgyM0YwMkZERkM0RTQyQzY2RkI0QgorOjEwRTY4MDAwNjZGQUZGQ0NCRTREQTBGNjhEQzlCNTEyNkFERjJDQTY4NgorOjEwRTY5MDAwMzBGQjk2MTZDOUJFMkQ1RkVENDgwM0I5NThCRTY3MjAwMgorOjEwRTZBMDAwN0VCRkI1RkNCNUM1Mjk5MUVDREJBQjdDREZGQjFBQkZBNworOjEwRTZCMDAwMDdERUQxOTdEQUI3MTEyMUY2QUQyRkI1NkYxMUUyRTQ3RAorOjEwRTZDMDAwNUZDNDZBREY0Q0ZGMzNGQUY3MkFEOEI3MDhGMzM1OUJFQgorOjEwRTZEMDAwNDRGQjU2RDRCMjFBRUQ1QjUxNUZCRDcwNUY4OTk4QThCOAorOjEwRTZFMDAwN0Q4QkJGOUM3RDlCRkZFOEFENTg1NzlDRjExMUU0MDdFMworOjEwRTZGMDAwRTgwQUY2RUQzNTZFRTc2MDFDQjA3MzM3OTg1ODdDMzM0NgorOjEwRTcwMDAwNTYzQkQ3MkY1NjNCRjczRjQ0NjdENUNFMkRFRjI3QTE3OQorOjEwRTcxMDAwRkYxMjJFODdDQ0NFMkRDRjYyNzY2RUY5MUU2NkU3OTY1RAorOjEwRTcyMDAwNjczMzNCQTdCNTZGNzk2MUY2OERCRDVGM0Q4NEJFOEZDMgorOjEwRTczMDAwRkJDN0FDQzdFRjgwRkI4NEE1OEFEMzQ0RkIxNzNCRDQ0RgorOjEwRTc0MDAwRUYyNzZBQzY4NERBQkIxQjRDMzJEMjM5Q0NERTM5M0ZBNAorOjEwRTc1MDAwQzVFRjYwN0FCMjc3N0YwNTdCOTc4RDc2NkMxMEU4OTE3NAorOjEwRTc2MDAwNTYzRUE2MEM4QTE3RUVCM0JERkRFNUE5REZGRTBFRjRGQQorOjEwRTc3MDAwRTU3NTNEREUxNzdBNTdDN0Y2NDc3QkJGM0MzNTBBRjQ4RgorOjEwRTc4MDAwRUUyMTEzQjNCRjRCNEM4QzlGRUQ1RTFGREFEMzQ5NDM5MAorOjEwRTc5MDAwOTlCRTU3RERDM0U4NTdCRDVCNjJGMzVEQTlGNzNCNjBFNworOjEwRTdBMDAwMURGOEVBMjJFRTlGRTdFRTYxRkJFNzU5QzZENjk0NzhBMgorOjEwRTdCMDAwQjg5N0Y0MkYwQTYxREY3RDkwRTJGOTIxRjI1MDdBQjEyNworOjEwRTdDMDAwMDJFMzgwQ0ZDN0Q5QjZDMkZFQjI1NDI2MjZGMDYzRTc3MworOjEwRTdEMDAwMUQ5RUYyMzFGOEFGRjMyRUQ2QTFERjNCMEY5RUMzMzk1OQorOjEwRTdFMDAwMDlCRjI3QTFERUEzOThEM0JDRUI5NTNFMjRGQzdFQzREMQorOjEwRTdGMDAwNDQyM0UzQzNDNDE1OTI3RjRCMTZEQzQ3MTBEQkU3Njk2MworOjEwRTgwMDAwRkNGQTc1N0M5RUQ0OUY0NUJBOTBCRkVBMjNDNkVGRDYyQQorOjEwRTgxMDAwNjlFOUUxNjRGM0FGNUFBOTE3RTk1MTIzNDVBNDA3RTU3MworOjEwRTgyMDAwNjhGMUZDRDRFMEZDRTdCRUQwQjZBRTBGQjQyRjk1NzAxMworOjEwRTgzMDAwM0ZBNUQyNDMzQjRGOTUzRUVBN0U2NTFFRDcxMTRGQ0I5NQorOjEwRTg0MDAwMkUwNUY4QTU5REJGNEFCRkIwNzlBQkY0RDRDQ0JGNEUxRQorOjEwRTg1MDAwQjUxRjU3OTM2MUEwNkZFRkVBREMwRjhDMDFGOUY4MzMxNQorOjEwRTg2MDAwQTUwM0M1RUJCNkQ5RDk2OUExRjZGODQxNkU5N0E2QkE0QQorOjEwRTg3MDAwOEZFN0E3M0E4MDZFRUNCQkM0MzlFNUJCNUU0OUE1RjNEMAorOjEwRTg4MDAwQjlEOTk1MzUxMkJFMUZCRUY1MkI4MzFCRTIwQjA3Q0MwMQorOjEwRTg5MDAwOUQ2OERGNTRGOUZBODRDQjdCODBDMzc5QkJCNzNEMUZGOQorOjEwRThBMDAwRDc5MTY2Qzk4RTdBMTNEMEQ4MkY3RTdGQ0M3MzBGRDNDMQorOjEwRThCMDAwQUIwM0QyM0ZENkY1MTk4RDc0ODU2NTgwMTRBQUVCMTA5MQorOjEwRThDMDAwRjA4MUZFNzc2QTBCRTM4MzA3Rjg0MEZGM0I4RDc0MUVFRgorOjEwRThEMDAwMDIzQTU3Mjc0QkNFMDBGNDZGREU3NTJGQzhDREFCNjZEQQorOjEwRThFMDAwRkExQ0Y0Qjc1QzcyQjJFRkNCODgyNTIzRjVCMkYyMjk5QgorOjEwRThGMDAwNDc5MjRGMEM0RUU0MDREN0M1NzlEMDJGMjlEQ0VGOTgwRQorOjEwRTkwMDAwNjg2QzdEMUJGMDk4NDhGNTYxMEIwOUY3NDM1NEJFMEYwNgorOjEwRTkxMDAwQTE3RjJFNDVCQUY3RDM4MzFDN0ZDQ0U1RjM1NUEwQjc3MgorOjEwRTkyMDAwMDVFOERBNjkwMDdGQzYxMzYwRUI4N0RBRUU5MTFERjkxRQorOjEwRTkzMDAwNDgxRjk1REVDRDc0N0QxOENERThBRDhCNDBDRjlCRDVCQgorOjEwRTk0MDAwM0FBN0E3QTc0NTUyRTBGREM5NzRGRkRBNEI4MkQzQURDMQorOjEwRTk1MDAwMkYwRkE5NzIwQ0RGQzM2OUU5MDFGMTgwOEMxMEJEMDc4QworOjEwRTk2MDAwRkIxNDdBM0U1OUREN0MxNEU5MzI2NTI1NzVBRjQyRTgyNworOjEwRTk3MDAwMEU3NkVCNzJGNDg5QTYxN0Q1Q0QzRjhDNUU3Q0EyRDFDMgorOjEwRTk4MDAwOEJCREU2Q0VCRjhDODBGOEQ3MUUwOUVEMDM2OTQ5MTQxNAorOjEwRTk5MDAwRjZGQkYxNjZFNjY3MUMzMEJCNTE3RTNCNUY1M0YwRkUzMQorOjEwRTlBMDAwQjlENjhFN0NDREU1MUVGNjE3QTFERkZENEQ4Mjg5ODA5QworOjEwRTlCMDAwOURCMzlCQzk0NzJBMUUwMzk4MUM4NURBRUY1N0NENkU3RAorOjEwRTlDMDAwRTQ1NzM0Rjg3MTdDMUQ4RUU2M0ZBOUY1MUI2MTNDQjgxNQorOjEwRTlEMDAwOEZFODEwQzcwQkYzMkY3OEZDQTdBNzc5QTVGMTcxQkZCQgorOjEwRTlFMDAwRUJCQ0JBQ0YzMzQ5QUI4MUIwRjhGRjBBNjNDOEI5RDRFNgorOjEwRTlGMDAwNkRGQzVDQTAzQjRFMTZFQzY3Mzc1REE2MUZDNDVGMDI0MgorOjEwRUEwMDAwNzRERUFGRUU3QzBBRTNCRkU3OUYzOTNFMERFNDc3RDlCMQorOjEwRUExMDAwMUZGNUM0NDRGOURDQkVEMzRBMDJFQ0RFODUwMUQ2RDkyOQorOjEwRUEyMDAwOEFEREZBODhFNzI4ODRENEIyRUYxQzdGNjc0NUZCNTI2MQorOjEwRUEzMDAwRjFCQ0QxNUY0Q0RGQUY3OEYxQTNFMTEwQjc2QTVGQzNERgorOjEwRUE0MDAwRUM4Q0VGMTkyRTFGQkVCNkUxNzBCRTVFMjFCMzczNjE3MAorOjEwRUE1MDAwMkRCQ0VCQjhCQzlDN0IyOUJFMTRFQ0E0RDRDOEJFNUYxMworOjEwRUE2MDAwQUQ2ODlBQTUxODQzRjZFOTIzQ0QwQThFNEJGQkUxQkRBQworOjEwRUE3MDAwNjVERjBFMDlFM0U1RTFGOEFENjZGMDc2MzBGQjU3RDFDRQorOjEwRUE4MDAwQUNGOEUxM0JEODhBQzYyREI4QkZGNTM0N0U2QTAwQkYyQQorOjEwRUE5MDAwNkVEMkVGOUU2NURGRDczNkVCQzVGODYxQTMzRTYwQzQ0QQorOjEwRUFBMDAwMzhBN0ZFQjg3MTM4RDM1QjQ5ODg0NzU1QTE1RTU2MzcwMQorOjEwRUFCMDAwRjEzODk5MjY3RUI0RUM3NzdCNUVGNDUxRDIyQ0ZCRkRDNQorOjEwRUFDMDAwNkY2QzYwNkZDRUI2NkVCNzYxN0NBRTkxQzVERjY0OEI0NAorOjEwRUFEMDAwMUMzOTNFRDc1MzVDQUVFOTNFMUU5NzlCN0E5QTBDMEZDOQorOjEwRUFFMDAwOEZDQjlEODVGRjUwM0Q5QzZGRTZGQUFBQzYzNTFCN0JGOAorOjEwRUFGMDAwQzU3NDdFQkVFQ0Q5MEI0RkMyNzlEMkI5RTczRjc5MTIwQgorOjEwRUIwMDAwRjBBRkZDRTZCMzI3RUY4NjczODlCRDY2M0JBQzdGOUUxMgorOjEwRUIxMDAwNjdERUM2RjhCQkZBREVERDVDQ0VEQjc3RkNFNkU5MjcxNAorOjEwRUIyMDAwQTgxRUI2QkY2N0M0N0I1QkVEN0I0RTY3QzJGNzhDRUQ1QQorOjEwRUIzMDAwQkJCRTRDODVGOEU2Q0EzRDA1Qjg5RjU5RjlDMkE0QjRERQorOjEwRUI0MDAwQ0JERDNGMDFGOUY0Qzc3MDdFQTJFNUM3ODFERDdBMDIxMworOjEwRUI1MDAwREY3MzlFM0Y2NjQ0RkZBMzNCQ0VEQTU0QzVFMkQ3MEU3NworOjEwRUI2MDAwMUU1RkREMTlGOUJDNEE4RDA3NTZFRkJFRTVFNkVCNjE4NQorOjEwRUI3MDAwMUREQ0FEMzgxREY4OUNDNzA3N0I4QUFCQkU0NUY5M0E1MgorOjEwRUI4MDAwMjIwNkZFRURFNEYxRjNBNkE5MTFFM0FBRTdFMTNGOTQyMgorOjEwRUI5MDAwNEY5QkNDNjI1Q0Y1QzJFRUM1RkZGNjA0QjRFREVFMTVGQQorOjEwRUJBMDAwMzVBRTFBODg4MTZFRUE3OTU4OTlEOUI1Q0QwQ0ZBRjE0QgorOjEwRUJCMDAwRkM2RjMxOEUwRDdDQTMzRTM5Njk3RkY2NDIyNkM0MjM1QgorOjEwRUJDMDAwQ0UyODlENzdFMjNERTUzRDQ2QkM2NzU0QjFFNzVERDQ3NAorOjEwRUJEMDAwOTdGNjE3OEVFMjM5MTNFMUU3NTFFREE0RkI4NzlEMUJGMQorOjEwRUJFMDAwRjBCRDhFNjc5Qjk1QzU2MzM5RkQyMTVFRUJCMEUxNzM4NworOjEwRUJGMDAwMUU5NzY1NzJBQ0M2NkJBM0M1NjlERjM3QjNGQjUwRUFERAorOjEwRUMwMDAwRjk1Q0Q1QjYwRjBDNDQxM0ZGOTZDNjAyQkY4RTBCRTcxNgorOjEwRUMxMDAwOEFFQUJDQjVGMEVDNDA4NzZCNDNDRjFGQTJDNUMzQjlFRAorOjEwRUMyMDAwNUQwREUzMTczQjc3NjhERkMyQ0YyM0JBQ0YxOTA4RTk0MAorOjEwRUMzMDAwM0IxMkNFQzdEOUI5QjlDNzJGQkQxQjg5QkZFQUY5QzNFQgorOjEwRUM0MDAwREI1QUZERjRDNzc2RUVEMDMzREVERjhEMkVBRjlBRDlENgorOjEwRUM1MDAwRkU1NkE1Q0ZCOUFGMjNEQkU5NEVBRUVGNzQ5REU5MzA4OAorOjEwRUM2MDAwRTNCOTMxNUI2N0U2RjE3NUE2OUFEMjhEN0RGN0M2RjAwMAorOjEwRUM3MDAwM0RDN0Y3ODFFNzlFRDFGQjYxQkZCQ0FFRTkwMERBNUIxRgorOjEwRUM4MDAwQUQ5RTU3MTMxNkZGRDI4RTI3QzUzMUZGQTBCQTc5REY4QworOjEwRUM5MDAwNzBCMDQ3RTdGNkJGODRGMjU3QkRGM0I4QzE0N0UxMUMzNworOjEwRUNBMDAwNkFGQ0JEQTE2RDY4NTBERUMxOEVGQjQzRUNGOEI5RTc4QworOjEwRUNCMDAwRjYwRDY3RTcyMjkxRjNCNEQ4Mzg3QzRGOEIwOERGQjNBOQorOjEwRUNDMDAwRjM1MzAxRkUzMjVGOTNDMTZFRTk3OTlDQjNCMjZCMTZDOAorOjEwRUNEMDAwQ0NGNzZDQUI0MkUwM0VGQkQ5MjY3RDkxM0ZDMkI4OUY5QQorOjEwRUNFMDAwQzEzQTM2MjY0OEE3NzU1NkY2MUQ5RjNFQzk4MDdFRTY3NgorOjEwRUNGMDAwNEFFQkQ4NjNGMEZERjg0QUFCQzEwMUZCRUREQUQ1RUM4NQorOjEwRUQwMDAwNUU2NUVERkY3MkE2MDM1RjZBMTM2RkMzNzNBMzdBMEQ4RQorOjEwRUQxMDAwMURFREM5RjY1Q0Q4ODdEQkYzNEI0NjgzNTg2OUVENDE5RQorOjEwRUQyMDAwQTI0QjI3RTBCREQyNUE5NEU2QjA0MDVFMkZFNkE3MTA3MgorOjEwRUQzMDAwRDk4OURGMTlFQTZEODU0NTMwMEZCRDVENjczNzQ3NUNCRQorOjEwRUQ0MDAwNUYxOTNDQzVDMkYyNjYyODc2RjFCQkJGRUY5MDA3ODMxRQorOjEwRUQ1MDAwNDAzRThFNkY5RDA3QTM1MzkzMDdBM0ZDQzZGRkQ3RjJENworOjEwRUQ2MDAwNjBGODYwOUM5RjQwMUU4QzAwQzY3N0Q0M0MxOEM5M0Y1OQorOjEwRUQ3MDAwNzIxRTBDODgyRjhEMEVDOTgzRDFBOUM5ODNDMUY5RjhFMQorOjEwRUQ4MDAwQ0YzQzE4RkZDQzgzMDFBNTlBMDdFMzlEMEQ2NTA1OTA0NAorOjEwRUQ5MDAwQTc0MkNEODM3MTY2ODNBNzAwRjI1MkE4NzkzMEJFREEwQworOjEwRURBMDAwQjA4QUQ1NzkxRTBDQ0JGREFCMEI0MkYzNjA2NERFQkY5RAorOjEwRURCMDAwMDFEQkQ1M0MxOENFRkIxRjI5MDhDRDgzOTE3N0ZGRTZGOAorOjEwRURDMDAwODJEMDNDMTgzM0VGREY1RTEwOUEwN0EzRUNGRUU3MEEwRgorOjEwRUREMDAwODQzQzE4NkJGRjUwMDA3OTMwNUU4Rjc3QjdDNkE1NDQyRQorOjEwRURFMDAwQ0Y4M0QxMUNFNzg4MjkwRjA2ODVGMzFFQzI4OTkyMDdCRAorOjEwRURGMDAwNDMwQjI3NUExRTBDMEFFNzQ0REM5OEU4NzkzMEMyRjAyRQorOjEwRUUwMDAwODk5MjA3ODNDMkY5MDRFMTQ0Qzk4MzExODY0Rjk0M0M3NworOjEwRUUxMDAwMTgxNENFRTczOEFGMjg3OTMwQjQ3MEEyRTVDMUEwNzBERAorOjEwRUUyMDAwRkUwQkUxNDRDOTgzQTE4NTEzMkQwRjA2ODU2Mzg4NEYyRQorOjEwRUUzMDAwODk5RTA3MjMwQzlGMjg3OTMwMjg5QzA0ODQxMzI1MEY3MgorOjEwRUU0MDAwNDYxODNFNTFGMjYwNTAzOEU5MDgyNzRBMUUwQzJEOUNBNgorOjEwRUU1MDAwNjg3OTMwMjg5QzJDODQxMzI1MEY4NjE2NEVCNDNDMThGNAorOjEwRUU2MDAwMTRDRTU1RjE2M0EyRTdDMTA4QzMyNzRBMUUwQzBBNjdGNgorOjEwRUU3MDAwMTRFMjEzMjUwRjQ2MTgzRTUxRjI2MDUwMzgxMzEwNEUxRAorOjEwRUU4MDAwOTQzQzE4NUEzOEQxRjI2MDUwMzgwNTM4QUYyODc5MzBBMAorOjEwRUU5MDAwQjQ3MEEyRTVDMUEwNzBBNjIxM0U1MUYyNjA4NEUxMTNENgorOjEwRUVBMDAwMjUwRjA2ODUzMzBCRjE4OTkyMDcyMzBDOUYyODc5MzBCMworOjEwRUVCMDAwMjgxQzM3RTIxMzI1MEY4NjE2NEVCNDNDMTgxNENFNTI4OAorOjEwRUVDMDAwODQxMzI1MEY4NjE2NEVCNDNDMTgxNENFNzI4NDEzMjU3NQorOjEwRUVEMDAwMEY0NjE4M0U1MUYyNjA1MDM4NzcyMzlDMjg3OTMwQzI5MworOjEwRUVFMDAwRjBGOUFFNzkzMENDODE0MUQyNDBDQzgzODFGOTM4QkI4NgorOjEwRUVGMDAwRjM2MDI0N0ZFQjNDMThCRjAyN0NGRjk5MDdFMzlGNzkwNgorOjEwRUYwMDAwMzA3RThDM0MxOEI3NUFERDdGOEZDNzdERTM3N0NCODM4QgorOjEwRUYxMDAwNzEyNjVFOTMzN0EyODczQzE4Qjc1QTRCQ0U4MjNDN0Y0RQorOjEwRUYyMDAwREIzQzE4MTdFMkJGNUQxRTBDM0FDRTNGMkUzNzRFQjRDNQorOjEwRUYzMDAwM0MxODNBQ0JCN0NCODM0MUM3OTEyRDYzMkUzMzlGMjgyMgorOjEwRUY0MDAwNzkzMDEyMkM2MkZFOTAxRjJCMEZDNkIxRjgyNDlDNEYxMworOjEwRUY1MDAwQjQzQzE4M0ZCOTdDMTM3NDlCMDVGQkI0RTkyODhBRTRFMAorOjEwRUY2MDAwMjc5MzdGNjJCNDg1QzcwRDdGQThGQzEzMzBFOTlDOUY2RgorOjEwRUY3MDAwNTJGRTA5MzU4RjQxOTMwMkVCRTFGQjlDRUZFRjcwQjkzNAorOjEwRUY4MDAwRjg4MEU3QTEzODE2MzUwRjg1N0YyQUM2Nzc5NzhBNzlFQQorOjEwRUY5MDAwMjhBNjcwM0VDRTc2OEJGMjMwODVCMDczOTQyOUY5NTk0RAorOjEwRUZBMDAwRkU1QUQ4QUY5NzZCRjI1MDBDMTFDRkU5OEJERDQ3RjNDNworOjEwRUZCMDAwMjkzODMyRDUyOUNFRTMyODk3ODc2OUE1OUYxRTA0RjYwNAorOjEwRUZDMDAwREMzQzM2NzIxRThBMTk5QzFGRDMzNTc0OTlDMkY5MzZGRgorOjEwRUZEMDAwOUQ5N0I3QzNBNzM5NTQ5RThCQ0I4RkNBNDBENzY5OEVGNAorOjEwRUZFMDAwMzYxOUUzRjQzN0E5RkM3MzA4RkM5QkM5RTE2QUYxOUQ2QgorOjEwRUZGMDAwQzFGOTM3NjMzMkUzOUYxNkVGQjc4MDdGMTRFRkI3Q0FDQQorOjEwRjAwMDAwNDcyMUZGQjQ3ODZCRjFENEYyOUY4NEYyM0IyNDdGNDgxMAorOjEwRjAxMDAwMkUxMUYzNEY0QzMyODlGOTI3MEFFQzYyRkU4OTFCRDM3QgorOjEwRjAyMDAwQzVGQzEzOTMxRDYyRkU4OTlCODY4OEY5MjdBNjNBQzUwNQorOjEwRjAzMDAwRkMxMzM3OEYxNUYzNEY0Qzc3QURENkU0QkZCODRGOTMyMQorOjEwRjA0MDAwRkZFMjIxNERGRThCNEQ5QUZDMTc1QjM0RjkyRjc2Njg1OQorOjEwRjA1MDAwRjI1RkVDRDJFNEJGNzg0OTkzRkY2MjlGNTA1RjU4RjdBQworOjEwRjA2MDAwOUFEMDdGNzFGRDUxQTFCRUE0RTEzREExRkY1MkZGNzE3NQorOjEwRjA3MDAwQTE3RDU5RTNDNzQyN0I1NUQzQTc0MkRERDNGQ0E1RDA4MAorOjEwRjA4MDAwQkZBN0ZDMDM2RkYxRUZBMURGRTFERjQzMUZFM0RGNDMyNQorOjEwRjA5MDAwQkZERjQzRkU4Qjc3MkM0QkQ3ODVFNkJGNzhERkUyNTk4NQorOjEwRjBBMDAwMDc3OTA5OEU1QjFDM0NBRjQwRTRGQzE2RERFRDUxRjJBNAorOjEwRjBCMDAwNUYwNERGRkZGNkY5MkY1MjkyN0ZGODdDMDQzQTJCRkJCNgorOjEwRjBDMDAwMUVCMEI3MjU0RjY3NERGOUVFRjkwODZFMkQxMUJGRUI1NQorOjEwRjBEMDAwOUU1NTJBN0VEN0FEQjNCMkVGQjU2N0JCQzVFRkJCNkYwOAorOjEwRjBFMDAwMkYxN0JGRUYxRTExRTc5NjAwMEY2REZFOEJERTE2OTdGMAorOjEwRjBGMDAwQ0UwQUY2OTJFNzI5MDhDMDc3QkFEOTEwNkYyQkMyRjI3MAorOjEwRjEwMDAwMjBFNEJGQzg4Njc4NUIyOTk2ODcyMUZGMDUyREZGMEM3OAorOjEwRjExMDAwRjkyRjY4NzkwNEYyNUZEMEYyMERDODdGOTEwREY5MzNCMQorOjEwRjEyMDAwN0MzQzdGNDYxRENGOUY1MUNGRjM2NzM0RjBGQzE5N0VBNgorOjEwRjEzMDAwOUUzRkEzOTFFN0NGNjhFMkY5MzM5QTc5RkU4QzAwQzIzMworOjEwRjE0MDAwMzlFMTNEOENFNTQ5NkYyQjk2QTdCQ0M3QjAzQ0UzNkQxOAorOjEwRjE1MDAwQzNGMkFDRjcwQzk2RTdCQzlENThCNjdCMkY2MjE5NkJENworOjEwRjE2MDAwRkUwQzU1MkUzRjA0QkZFMTBBMTg5RkM5QjMyQUE3NTdDQQorOjEwRjE3MDAwM0ZGMEM4QkFEMEZDMTkyMzFFRDg4NDcyMUEyRDZGNDZFRQorOjEwRjE4MDAwMEU3Q0QzOTcxMjNENkY0Njc3N0I5NEJDMTlDMUY3QTNEMQorOjEwRjE5MDAwRTdDRDQ4MUJGREUzRTVDRDk4NkJGOTYxRjI2NkNDQUQ5OAorOjEwRjFBMDAwMTFGMzNBQ0M1Qjc1RjlCQzE5MjNFMjRBNkU0MUY5RTNERAorOjEwRjFCMDAwRjIzOEQ3MTI1QkRFMEM5RjU1RTJERkU1NTNCQTgwREZGMQorOjEwRjFDMDAwNDVFOTgyRUI3NTBGNzkwNzBFNUE5RjFFMDJGQjg5QUU0NworOjEwRjFEMDAwMjE1NzVEMzZERjgzNTYyRUEyRDM5QkU1Nzc5OEYzMjMyNAorOjEwRjFFMDAwRTdDQkU4ODlBRTZBRkZGNzJCNTgxRTg3Qjk5NjZGOTk2RgorOjEwRjFGMDAwMkZBMzg3N0MwQjA3QjNCRjQwM0IxOTZCQkU4QzlFRDZGOQorOjEwRjIwMDAwODc5RUU4MzlFMzQ3Q0U5N0QxOTM1REVEQzk5RUJFMzkxRAorOjEwRjIxMDAwODVEMUI5NzcwRjc0NTZCRjk3QUUzNEI1MUVDMjk3RUQzRQorOjEwRjIyMDAwMkU1NDZEOTk3RjBGOUYzQkQzOEVGMTk5OEU5REZDNUU3RQorOjEwRjIzMDAwOUM4QjM4RUNBOUVDN0I3REYwMzczQjlFNEYxODRFRjA1MQorOjEwRjI0MDAwM0I3RTNCNzE1MUZFQzRGM0U3RDJDRTdERkJFMDVFQzA1NgorOjEwRjI1MDAwNUExQjcxMjUyNjgxQjM0NzFDRkE4MUIwMEZCQkM2MDQyNworOjEwRjI2MDAwRjE5QUFBREQ5RkJFRjE0NzBBRDdEQ0EyQzdGQjcyMUQ0NworOjEwRjI3MDAwMTQ4NzU2RjRGQjVDODlDMEI3NzhGMjRCRENBN0MzMTkzRQorOjEwRjI4MDAwRERBNTVFQTFERjc1NkI3RTBGMDc3NDQ5MEQ5RTNGMTVFRQorOjEwRjI5MDAwRTgyREI4NkZFQURBQ0NFRUIzRUFDOUQ1OEY0RjE4OERGNgorOjEwRjJBMDAwRjdDNjg5REY4MUZDNDMzRjc1MTlDN0IzOEIxMDY3MDAzMAorOjEwRjJCMDAwRkFFRkI0RTJGREQ1MjVBRjJEMzRDMEEwNzBERTFBMUFFNgorOjEwRjJDMDAwMzdFODU1MjRDNjgxMUFDQ0I2RTE3MDZGMkY1REJEQkZGQgorOjEwRjJEMDAwRTc3M0I1ODIxRkJFODhDMzREMjkxMUUzNDQ5RjJDMjhENAorOjEwRjJFMDAwM0EwQ0ZFRjMyMjc3MTlERUFCNDgyQjE1RTM0Njg0N0ZGOAorOjEwRjJGMDAwNDcwRkRCMzJGMDMzNjVDMkVGNzVGQUQ5N0RDRkIwRUYzRgorOjEwRjMwMDAwRUE5QkI3MjA5RTRCRkQ5QUZCNEI4RDYyNURBNURCMzlENgorOjEwRjMxMDAwMkJCRjk3NjIyMTk2OThFOEQ2NzZDNUUzMTM5MkJGM0QzRQorOjEwRjMyMDAwREQ4Q0U5MjJERENDMEU5MTZFRjE0MzQ0QkE2OEU5NjZDQQorOjEwRjMzMDAwNzU4QTc0RDFEMjJENjFBQzE4NUY1M0U5QTZERUE3RkNBMworOjEwRjM0MDAwQTFFODk2NjRFM0Y3M0M4MkY0MkEzMUE1QTJDOTQ3M0NDMAorOjEwRjM1MDAwMzNFNDAwQ0FCNzU2MUZGQTU4MDJGMDFCN0U0OEJGNjQ1OAorOjEwRjM2MDAwRkY2QTdDQ0I2OTk1QzE2RUE1MzNEMDQ0NUFDNERFOEI0RAorOjEwRjM3MDAwMDc3RDgwRkNCREM0ODlGQUEwRkUzRThBNzhGMjIxOTcwMQorOjEwRjM4MDAwRkI4RkM4MjU1QUFFOTg3RUYwRjgwMkRBQkExOUU0NkQwMAorOjEwRjM5MDAwMDRGQjNEMUExOEFGNEEyMkI4OUY1Mzg4RDMwRUZCQTgyRQorOjEwRjNBMDAwMjZBRkM5Qjk0ODgxNzM0REUyNUM5NDBERTc5OTc2MkM3QworOjEwRjNCMDAwMUZFNERGM0I3NzBDMjVCOEVGNkYwQTdDOUUwQUY3MDY0NworOjEwRjNDMDAwMUUxQ0Q5MzkwREUyMEY5RUM1QTQwNEQ2QUY1OTA5NkM5NQorOjEwRjNEMDAwN0Q1REM2NEI1QjAyOEJDRjZDMjhEMTExRDc2OEY4N0Q2MQorOjEwRjNFMDAwNEE3QUJGNDRDNzZCQjdCQjVFQkIwMUZDRDExNjc2M0YwMAorOjEwRjNGMDAwODBEODNCREZCODFEREI0N0UxRjdFMTE5QkFGQTZCMDBCMworOjEwRjQwMDAwMUZEQTFGQkYyQkVFNjhGOUM4QjYzMEM0MEVCNzM3M0ZGRQorOjEwRjQxMDAwNzIyNURDNkJEREE0OEJGQzNENzM4MThERkZGRTFEN0VCMAorOjEwRjQyMDAwM0Y2NTQ0MzBERjQyODE2RDBDRTY2NTc4NzAwMDFEQTdCMgorOjEwRjQzMDAwN0E3QTE3RjI1MTk1Q0JFQjM4RkQwRjk2NEQ0MUZDNUU3MQorOjEwRjQ0MDAwNjg5MTFDMTBBRjJCRDRERjcxRDMzMDhBREZCOEI3NjU1OQorOjEwRjQ1MDAwN0VBRjk3REQ1RjFGQ0RGQkQ3OUFBOUZFQTJGREFBRkY2NQorOjEwRjQ2MDAwMUJGQzlFOTU5NzRFQ0E5ODBGNzE3NDREMTlERTEzRkNDNAorOjEwRjQ3MDAwQTNBREYwMzBGMDJCQzdENTM0MEFFNDI5QkYyNTExQ0Y1NgorOjEwRjQ4MDAwNzEzRDFGMTIyNzdFOUFENTJBREUwN0NDRTFGN0I2NzNBRAorOjEwRjQ5MDAwREE4ODFGODRFMkRBNjM2MkZCQjgzNkIxN0U5RDY2RkZDQworOjEwRjRBMDAwMzlERkM2RjVENDQ2NTI0MUVFMzY3RUFEOTc2MEZERThCMQorOjEwRjRCMDAwRTgyNENFMzUxNERGOEU0NUJENzFGQzhFQ0YwOUZBODk2NAorOjEwRjRDMDAwMUQ1RkVCOEIyMkREOEY1OTZFNjNGQ0RCNjQyMDY4QkYxMAorOjEwRjREMDAwMzc5NTU5RjBERUY5RkVCMjhBRkVFMDVGN0M3MTk3QkI4QQorOjEwRjRFMDAwN0ZBNDM4NjU4ODlGOTZDMEJFQkI3NzI1OTBCMTIwODdFMgorOjEwRjRGMDAwNkIyNTQ2RUZGQThDOTIwOEVCOTYyQTc3QUExQ0FBRjJBMworOjEwRjUwMDAwOTc1MTE2RTc4RTc0MEZGNTMzOUI4NDcyOTY1NzM2NDRFNQorOjEwRjUxMDAwMzI4MEZDRUM5NTMwRkNENUJFODZFMjc1OTk3NURCNDdGMAorOjEwRjUyMDAwRDZGNDAxN0MzQ0NEOUZFMTdEMzI1MzhCRTQ4QTc0NEY0RAorOjEwRjUzMDAwRTc2MTlCOERERDZGNUNFMzVCMERGNzQ2N0U0MTk1MDhDRgorOjEwRjU0MDAwRUM1NDg2QTEzRTJCMTI3QzFGRDk4ODdFRTk1RDM2MDdEQworOjEwRjU1MDAwN0JDRkM0RjMyMEM5RjUxOTcwOUZBMkJENzlEMkU0NzVBMQorOjEwRjU2MDAwMTRDRjI3QTgzRUMwN0FCNTQ5NzEyMkRFQkUyQTQyRjBFOAorOjEwRjU3MDAwOUUyQzhGRDdGNTlENDZCNjZDMDhGMTdGMzdEQjcyMUI0QQorOjEwRjU4MDAwNkQxNDVFQTM4RDdENkZEOUNCRUQ5NDAwNkZFNzdGRkQ4OQorOjEwRjU5MDAwQzMwNkYwM0IyRTFBOTE3RkJEQjlCRkE5QkU3NzgwRDNCOQorOjEwRjVBMDAwNjc1QzgyNkIyQkJDNEZFMDk3OUY1MUUzRTM3NERCOUM1RAorOjEwRjVCMDAwOEI0NjQxNUM5RUQyM0JDNDBFMDZGOUU2NjNGOTUxRENGMgorOjEwRjVDMDAwMDRDRjNGOTIyQzNBOTQ0M0UyNzIzOUVDQzI3RDc2MUYwRAorOjEwRjVEMDAwRUE4REFBMDcyNDIwMTFDODUzQTBEQTM3QTk0NTBBNTg5MgorOjEwRjVFMDAwQTlEQzhGMzY1OTAyNzA4RjJFQTk5Q0NFM0IxOUYyOUE1NgorOjEwRjVGMDAwOTgxOEJDNTZGOTlDMThEN0EyRjI5ODAzQ0UzREMxQUIxRgorOjEwRjYwMDAwRjMxMDQ4MDVGOEFBREQ1M0VERTVEQTQ0NjY4RkQ2M0VERgorOjEwRjYxMDAwMjQ2MzVFRDRDRDcyOUIxOUUyQTk1OTJFNDcxRUE0ODg5QgorOjEwRjYyMDAwNEM5MjFENzhBRkE2NUYzOTcxNTIwQzQ5RkNDMDVGMjcyMAorOjEwRjYzMDAwNzZGQjAxNTRDOUFGRjk0NjNGMkZEMjc3NUIxNzZEQ0NFQgorOjEwRjY0MDAwREYxRTk3RTBGRTMzRDA2QkY4RTFDRUZERTAyRTM4Q0QyMworOjEwRjY1MDAwQTQxN0JCRkZDNUVEMDRGNzZCMEFGOTdBMzdFRTNGNzRDOAorOjEwRjY2MDAwRUM3QkQxQzAwRDI0RjQzQjJBQUQ5REQ4NjQ2NkVCRkM0NQorOjEwRjY3MDAwQjhFQkQ5QkEzN0VFQkMwNUQ3QkQ2RTNCNTE1Njg4RUIxNworOjEwRjY4MDAwRDRDODk2NTEwN0UwOUVDNUM4MEY5OTdFMTI2RTFGRUMzNAorOjEwRjY5MDAwRjQwRkQwMjlFN0IwNEYwRkY0RjlCNjc2NDFDQjZGMTJEMworOjEwRjZBMDAwMzA3NUQ3ODdFQUUwMUM4NkVBNUJDOEZCNjczNTc2NjQ2RAorOjEwRjZCMDAwQzVGNDQxQjUxODVFRTY3MkQ0RkYxRUE3REUxRDQyNDdCMQorOjEwRjZDMDAwRURGQkRENzE0QUM5RDRGRERDMzExMEVDQzgxMTNEREMyNQorOjEwRjZEMDAwMEJFOUM4QTVGM0EzRjNERkM4RjUyNUYxNzNGRjY0OTgyMAorOjEwRjZFMDAwRDdDNjk2MUJDRDIwREY2QjAzNzlGNjYyRkE0RUEyQTkyRQorOjEwRjZGMDAwMDQ5OTk3NDg1QzE4Q0YxOTQ5M0QzMkM4OEY1MThCNDIwNQorOjEwRjcwMDAwNDFGRDQxQTU4NDI0QTRDMDNEQjQyMjIxREU0MzJDNDlGRgorOjEwRjcxMDAwM0NGRjRCMDBGOUQyMkRBNzU0OEU0M0VGRTVBQUYyQTk4NgorOjEwRjcyMDAwOTU0NzU1N0U2QkUxQTAwNUNFMDcyMTYyNEU0QkJERDRCNworOjEwRjczMDAwODQ4NzgxNDZCMkQ5MEVFQkJCRUE1RkQ2NzI3RkFFRDYyNAorOjEwRjc0MDAwOUNFOUM3RUY5NzdDMTlFODFGQURFNEZFNTFBREE1RDA0OQorOjEwRjc1MDAwODRFNjYwNUYzMkFFRUIyQjIxN0U0MkU5QjAzMjg1RDk4MAorOjEwRjc2MDAwNzk3NTNFNUFCOUY0NUNENDEzN0ZDODNFQzEyMzc3RTI2MQorOjEwRjc3MDAwN0Q0NENGNDUwMzNFNUZBN0I4MDdDMEZDNTVGQTVDQzM4NAorOjEwRjc4MDAwRTlBM0E1ODc5NEMwRjc5RDlDMkUzREUzOUI2Mzg3N0JFRgorOjEwRjc5MDAwQzE4OTI2MTc1OThGRjhFNkUxM0RFRUE2QzA0ODEzQUNBMworOjEwRjdBMDAwQkZGNzZBRjA4RDAxQ0Y2QjEzQzY4NEUzMjk1QkEyRTAzQgorOjEwRjdCMDAwOTlDQ0YwQkM4RUI4RkZEODQ2RTUzNzY3NDU1RDZEM0MwNworOjEwRjdDMDAwRUExNTc5MkIzRDI3NUNBRkI0N0FBNEVBOEQxQUU3QkQyMAorOjEwRjdEMDAwQjZCMkZFMDA1RUJCRUQ0MTZGM0NGMThDMkU0RUE1MDQyRgorOjEwRjdFMDAwRUY1NzM5RjdDNEEzMUREMUVBRDNFNzdDRkU5RTc4NDZENAorOjEwRjdGMDAwQkYwNThBN0IwNkNDQ0ZBM0VCQ0MwNDM5MTlFRTIwQkQyNAorOjEwRjgwMDAwOEEyOTkyQzM5QkY1QThFN0E0MzVCNjdCRjhBQTdGQTUwMQorOjEwRjgxMDAwRkE1NURBN0VBQTVGQTVEQTYzRjUxRUZDREEwNEY3N0NGNgorOjEwRjgyMDAwOTAwM0E5OTlDQTJEQzVBN0Q2Q0VGNjRCOUI2REVFNDU4MAorOjEwRjgzMDAwODA1NzNDQzUzRDBFRjY4RDQzMDI1OUVDRkI1RjUxMkZCRQorOjEwRjg0MDAwQTJFOTQxQkM0NkNFOUIwMjMyQUUwQjNFQkEyRTY0NEJCRgorOjEwRjg1MDAwRTE3OEE4RTMwRjRBNDg2NDdDQTQ1QTBFRUI3RERGMUNENAorOjEwRjg2MDAwQzIwNkFCMjY5ODM3QTdFRjcwRTI4Njc1QUJFRjQ4NzZGNQorOjEwRjg3MDAwOUY3MTREMDJCM0JGQjUwOTZDREQ1MkNCQ0RCNjkyQkJDMworOjEwRjg4MDAwNTFCRjY1RTIzMzhFRkNFRTc4MDNBQTcwREY3QzZEODI5NworOjEwRjg5MDAwRUIyRUEwODdBOUM4ODVGM0U4NjMyNzRFRjA0QkZCQzg4MQorOjEwRjhBMDAwNEQxMjdDMzc5QTU0RTk5MEQ4M0Q3MzEyRkM3RThCQzI3RQorOjEwRjhCMDAwRUI1M0VDQzgwNTdERUQwM0ZCNkJFOERGMTIzOUNGRDhDNQorOjEwRjhDMDAwQTMwOUVBRkQ1RUU2N0YzQTQ5NzcxRUFGNDcxMzk4RkYyQQorOjEwRjhEMDAwNzkwODUyOUZGNDJBNTZGMzgyQTlFNzM5NEUwOUU4RDRGMQorOjEwRjhFMDAwNkVCRDBEOTE2RUJGMjAzMTNGM0Q5MUQxNEJCQjRGMDA5RQorOjEwRjhGMDAwQzI4N0ZFRkVCRDdCMEQ0NDM2Mjc5MUUwRUY1OUQ1OTlCNgorOjEwRjkwMDAwRDBCRjhGMjdDRTI2QjA1N0JCMTIwNkYwNzM0QzY3MURCMQorOjEwRjkxMDAwRDQ3RjI1Nzc5QTEyODcwNkU1NUQ5NUUzMDcyN0NDNzA5QgorOjEwRjkyMDAwNDIyQTUyREJGNTVEQzM2MTRGNDVFNTdBMjdEMEJGN0RBMgorOjEwRjkzMDAwNDJENzYwQ0M0MTQ5M0EzMzk5RkNCOEY0NDJCRTIwOTU5NQorOjEwRjk0MDAwMEZDRDhBQzAwNzMzRUNDMzQzRURBNEQ1MzAwNEZDRDFGRQorOjEwRjk1MDAwNzYyOUNFMDlGNzJDREE5NzRBMEM1RkM5QzRGMzI5Qzk3NgorOjEwRjk2MDAwQzIzQ0QzRTM5OTdGRERDMUVERDUzQjA5NTkyODI3QUFENQorOjEwRjk3MDAwM0RBNkYzQUI4MzUyM0IwRjhGMTFFRjc0OTBDRTNERjE1OAorOjEwRjk4MDAwRkVBRDcwNkVBNUM5M0ZBOUNENEYzOTY5QTEwNUVGN0ZDNgorOjEwRjk5MDAwNkNEQzYzQzZGRDZCNTcwOTNCQzdFRjZBMzFBMjdEOEVGNQorOjEwRjlBMDAwQTZCNzY5NkRFNjg4NzExQ0I1QTRGNDdCMEJFODk3QTYzMQorOjEwRjlCMDAwRDQyNDgyM0Q0QzlCN0JEMjA2N0NEN0QyQTU0M0YyNURGQQorOjEwRjlDMDAwNzMwOEY2NDVBRjJCMTFCRkJCNTVDQkY0RjQ5QjEyMTc1MAorOjEwRjlEMDAwRDFGRUU5MTk5M0IxNTQ5RjM3NThFNDg4RjdDRDRGNzM5RQorOjEwRjlFMDAwQkQ1MkU1RjE0QTNBMjJERjBGOUQwNjc5M0NFRjdFRjNFNgorOjEwRjlGMDAwMUQxNzA5REVERjZGODg2Mzc0NkM4ODYzNzRFQzcyOEY4NworOjEwRkEwMDAwNEY3ODFBRTRDRDk3ODFGQUIwNTgzRDA3RTVGQjdGMzU3MgorOjEwRkExMDAwQ0Y5NDNBREU0NkFGMjk1MUE2MkFEMEIwNjA4QTE5RDZEMworOjEwRkEyMDAwODkxNEUyOUEzQzFCOTQ3NUEzNDJFMDNCQTJDN0JDM0JGRAorOjEwRkEzMDAwMTJGMzMxOEU2RDEyRUZGOURBRDlCREUxQ0YzNzE2RTA0RQorOjEwRkE0MDAwNzdERUE5NjQ4RDc5MzBBNTQ3NTk4OUNFMDlGMTgzRjMxMgorOjEwRkE1MDAwMEJERUI3RTlBODNDMkRFOEQzOUEwM0YyRkJCQUUyMjYwNQorOjEwRkE2MDAwRjYzMTE4RUFDMkZEQzk5MjUyODMzRjQwRjk5NkRDNDA1NAorOjEwRkE3MDAwMEQwNUE1Q0I3RjAzRDg1QjM5QTgwMDgwMDAwMDAwMDBFRQorOjEwRkE4MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTdEMEI3ODU0RDVEQgorOjEwRkE5MDAwQjVGMDNFNzNDRTNDOTI5OTI0MzM3OTRFMUVDMDA5RTFGNQorOjEwRkFBMDAwOUQxMDg3MjRCQzFGNEU5RTQ0ODgzMEJDMDQ4NUVBODA4QworOjEwRkFCMDAwMjhDRjI0ODhENkRGQjZERUNCQzQ0NEY0QTJCNzQ1RTkwQworOjEwRkFDMDAwQUZGNEQ2REI3RkIwQTJBODIwMDE4MjA2OUFBNDEzNDAyRgorOjEwRkFEMDAwRTQxMTM0MDhBOEE4QUQ1MTI5NjIwQkM5MDhFQUM1RDZCQgorOjEwRkFFMDAwN0JGREQ3NUE3QjlGQ0NDQzQ5MjJEOERFNEUzRUJGRUQ2MgorOjEwRkFGMDAwM0U4RkJERDc1RUVGQjVGNkRBODcyRUM5NzcxMzRCNjQxQworOjEwRkIwMDAwQ0NCN0Q4QzBCNjRBOEM3RDg3QkYxQjQzQUREOTZFNjBEOQorOjEwRkIxMDAwMkM4OUIxOTYzODNCQjU0RUU3MENDN0QyODRGMDdFODU3MAorOjEwRkIyMDAwNjM2OTNFNjNENUQ2RDg1QzE2ODc2RDdGM0Y4Qjg1RjFDMAorOjEwRkIzMDAwOEE1OEVBRDIwMjY4NUJBQ0FFNUE5NUIxMjU0NkFGREQ3MQorOjEwRkI0MDAwMEVDRjc3NEVCQTNDQTQ4RUUxMkZEOERGMzM5MkIxMkU4MAorOjEwRkI1MDAwMjM2Qjk0RTJCMDFGNjA2QzBDNDM1MEY4Q0ZFRDU2RUQ3MAorOjEwRkI2MDAwRDA5N0YwRkZFMUZENDQ4QjJEMjBDM0I4Q0NBMzVDRUMxMworOjEwRkI3MDAwQjBGMDQ3QkUxQjI4MUU0RDY2Q0MyODVFOTM5QURFRjg3NworOjEwRkI4MDAwNDZDQTY1MkM3NjcyMTE2MzcwREZDQTVDOEZCMjJDQjhERQorOjEwRkI5MDAwMzE4Q0E5OUUxOEM2QTJEODMzRjZGM0Q5OEMxOUYwN0QwMgorOjEwRkJBMDAwNTg0NzU3RjNCQkZEN0MwMEM3MUZGRUU1NEEwQzgzRkI5QgorOjEwRkJCMDAwMUYyOUMxMTg1NzBFNjMxNzFFM0MxNUUzQjZDMUY1MDc4MAorOjEwRkJDMDAwRTU3MjNGRjQ2RjQ3NDBDNjg3RjA5MjZGODcwQkEzMTkyOQorOjEwRkJEMDAwN0JDNEVFMTk4MUVCQkE2M0REN0Y4RkYxREE0MkY3RDk4RQorOjEwRkJFMDAwMDM3MDMxOTVCMTE1N0UxOUU3RTZGMEMyN0ZBQkI2NTlDNworOjEwRkJGMDAwMTlCMzg0RkE5NUY1MDkxMTdEQzAxOEUxQjVEMkNDRDZCOAorOjEwRkMwMDAwRDREQjdBRDI2MzA1RDIwM0U2NURCMTdEOEIyOTVEQzU3NQorOjEwRkMxMDAwRjlCRDkzRUNEMEJGQTBDMEFCODBFRjBCMEQzMTdFNUY4MAorOjEwRkMyMDAwNjYwODlFMjVEQjQ3OTlEMkUxRDY0NzRENjYxNjgwNzU1QQorOjEwRkMzMDAwMzBBNUREQzg2Qzg0QjUwQTA5RjBFNjE1NzhEM0MzNzkyMAorOjEwRkM0MDAwQjhDNTRBRTNEREY1N0Y2NUJGMTk5NkJBMThFNjdBMjA5NAorOjEwRkM1MDAwMUU5RTZGNUE1MUMxNzI3QkFFRTNBRTNGQTg2NTI5NDAyQworOjEwRkM2MDAwQkNCQkZFNEQ2MjNFOTUzRkZGNjAxRTNDRkZDMDIzNUY2NAorOjEwRkM3MDAwMjBEREY0RUI1Q0VDMzM3RUQyMTFCMTZFMzc2MzAwQ0Y0NAorOjEwRkM4MDAwMzI0MUVGM0IxRjhEQkNCRkFDRTkzMTFBNjcyOUYzOUFCMworOjEwRkM5MDAwOTA5RTc3NkRENERGQkZFOTMzRTRCQjY1NEMwOTVEMDcwNworOjEwRkNBMDAwM0M1QzNFOTI2NTQ1M0NEQzYxOEY0OTNDMEYyMDAzOEZGNAorOjEwRkNCMDAwOERGRDBFREVERjdENjQ2MDlDMzdBNzI3N0VCNUY2RTIwMgorOjEwRkNDMDAwM0FFMDZGMzM2MzdGNUU2N0ExRjZDMjNBNDZFRDA4QkI0OAorOjEwRkNEMDAwNEFGNDU5REQ3NEYyN0VFNEFGQUFDNjVEMjYxQ0E3QzVCRQorOjEwRkNFMDAwRkZBNzg0MDlGMDQ4NjFEMzM3MzIzMjU3MjE3M0RGN0I5NQorOjEwRkNGMDAwMEVGMEY5MjMyNkIzRUYwMDdGQkIxOUU3OUZGNTQ2Q0YzRgorOjEwRkQwMDAwM0Q0OEFGMUJBRjk2RDM3REZERkExNzY5RkM3RjI0OUU1QgorOjEwRkQxMDAwRjg2NzExQUUzQjE3QUYyQjVGRjZCNkFFOUZFMkJBODAyNQorOjEwRkQyMDAwOUZEOTU4NTg5NzdDRkRFQkQyRDZBM0FENEZCQjVGMjkyNgorOjEwRkQzMDAwMDNERkY1RjJCRUM2RUYyMzg0M0U1OEZBRENBQ0Y1Njk2QQorOjEwRkQ0MDAwODA4QURBRTZDRkZBNzcxMDNGQjFEMzI4QkYxQTNGMkQ2OQorOjEwRkQ1MDAwMTM3NEQyRjM4RDQ2Qzc2RUZFNjhGQTc3NUE5RjQ2M0ZGQQorOjEwRkQ2MDAwRTA3RkE3QzE4OTZEQzA2OTE4RDc5MzRGRjQ3Q0ExRTdFNAorOjEwRkQ3MDAwODM0RTYzNDc3Rjk0NUYzRDFGNzQ0QTZDNDE2RkVCRkE3QgorOjEwRkQ4MDAwMzdGQjQwNUFENzUyRDU1RDY2ODdGQjc3MzFDRjdBM0IzOAorOjEwRkQ5MDAwQUQ2NzIzNURCRkEwNkMzQ0ZDMzM5NEFCRTczODVGNzc2NQorOjEwRkRBMDAwRUIzOTMzOTczNzc2RENFODQ3QkRCOTM2NDY0RDcxRDgyNQorOjEwRkRCMDAwMDRGRDgwQ0U5REJCQ0MzRTdDNEU5QkU3RkMzQUI3N0JERQorOjEwRkRDMDAwOTAxMUYxNUU0RUVEOUZENzc5REM4MzA2ODdFRURGRkQ2MworOjEwRkREMDAwQUIyQkIxMkFCQ0RGMzU4Qzk1QTNEQzc3QzY0NEMyQkIwNAorOjEwRkRFMDAwQ0YyRTEzM0NGQjkwMEVDODdGNEFGQkZGN0M4MDNBRTk4NAorOjEwRkRGMDAwQjlGNjMxQTg0N0NGN0ZGQjVGQjExRTc4QkVFQjVCNzNDRQorOjEwRkUwMDAwNzk2RkVCM0MyREU4MDdFQUU1QjQxM0Y4RUM3NjIxNjc0RgorOjEwRkUxMDAwQjczNzU1MTI1RDk2M0MzM0NCODRGQ0NDMUVFMEY4QjQ2QQorOjEwRkUyMDAwQzAxRkVBRDdCNkE4RDg2NzcxMUQ4QjFCMjREMjIzN0FDRQorOjEwRkUzMDAwN0FEQ0U1OUFGQTM5RUFEQjNCRkQ4NUY0N0UwRkZBQjAwRAorOjEwRkU0MDAwQzc4OUJFNzcyMTNEODY4NUU4MzFENkExNzI3ODU0RjhGRQorOjEwRkU1MDAwMDNCRUI5NDNGMENENzk2NThEQzkwMDdBRTRGQzMzODBFNworOjEwRkU2MDAwNkYwMDc5OTVDMkRDQkRFOUMxRkUwRUNFODc3REFENDczRQorOjEwRkU3MDAwQkY4RUJFRTA1RkY2NUNDREZBMzQ4NkVCMUY2NTRBRUJDMQorOjEwRkU4MDAwNDVFRjY4RUJCRjhCQjk2MjQ5RUY4OEY1QjI4RTFCNDkyRAorOjEwRkU5MDAwNUVBQjJEN0M1RTZEOUQyQjlBRUU5QzgxN0M1MUI1MTlERAorOjEwRkVBMDAwRTg5NUQ5NzNEREE4NzcxN0Y3MDI2Rjk5N0NEMTY4ODEzRgorOjEwRkVCMDAwRjdCQTFFOTA1Q0E4NkZGQkEyODNBNjI3RUUxMkY4NUEzMQorOjEwRkVDMDAwQjk2REYxMEMzNDlBOEI2MTNFMzkxM0Y1RDExNzZGQzZCOQorOjEwRkVEMDAwMjRBMjVDNDE1RkZBMUU3QTM1QzkxRjlCNzExRDhDRTMxOQorOjEwRkVFMDAwN0IwOUUwN0I4Mzc0RkRGNDVCQjZCOUQwM0QyOEVDQjlBNworOjEwRkVGMDAwMTVGRTlCREM4M0MyRjU5OThFQUU2Q0RCQUNEMEYzNjQ0RgorOjEwRkYwMDAwQjdERDI2QjRDN0YxMEVBMUJGODQ1RUVFNUJCRTYwRTEzMworOjEwRkYxMDAwMDBFN0RBMUQwRUIyNkY2QzhEODNGNDYzNzVEMzE2NTM1MAorOjEwRkYyMDAwQjhEREQ1RTQ0QjkzQjdCMTBFM0JGMTU5NTVFMzEzRjQ2QgorOjEwRkYzMDAwMUNFODVGRDUwMUZENEE0QkM3Q0Y2RjU1QzNGMDM5NEU2MgorOjEwRkY0MDAwRDA1MUFFMzBBMUZFRUU0QjdGODJCRUY5QjIyMzZDOUQ0NAorOjEwRkY1MDAwMjMxQ0MyQUUwOEZEN0IyREZEQTBDMUFEMUY1N0QzMDdFQQorOjEwRkY2MDAwMUFEQzFBREY2QkVCRDFGMzdENUZGMEU5RTlDMjk4OUZGMQorOjEwRkY3MDAwRkIwQjNBRkFBQzQyN0E4NEY1MTE1RTA1RjBEQkQ2NkNFNQorOjEwRkY4MDAwRjUzRjA0RjBCNjQ5MUM3RTVGNzMxNEMxREZFOTJDNzY5RgorOjEwRkY5MDAwOUYwMzNGQUYyQTc1MjFCNTI3RjBDNTU0RjRFQjNDRDMzRQorOjEwRkZBMDAwMTA5RjlBM0ZDNzBBMTIyMkZDMjQ3REFCRjkzNzc5QzIxMQorOjEwRkZCMDAwOUZEQTFCRTVDRTA3MTMwOTNGNEYwMkYyQzM5NDlBOEVENgorOjEwRkZDMDAwMzkxNjIwRDlBRDhFRURFNTBBOEMzRkU1ODk4RTM5NTE4MQorOjEwRkZEMDAwRDA1RkU4RDhDMUZCNUIzQjRFNTk1QzhDRDVCMDU3Q0FBQgorOjEwRkZFMDAwNEJBMDdGM0JBMDEzQzdCQjU2NUI2MEY2MkM0NEY5NUQ2QQorOjEwRkZGMDAwMEQ3RTkyMDVFQ0QxRUFEMzQzMEVBMURDQUQ2RUFGMjhBNQorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDA5N0MwRUVBQzA2ODMyMzgxM0RBQTc0QzcwNkFDQjlENDcxCis6MTAwMDEwMDA2NzEzRTBCOUU3RURERTY1QzQyRjU3RUJDODZFQUQzRTYwCis6MTAwMDIwMDBBRDcwQjkzOTkyNDhFQjU3MDBGNjI4NzhBRjJFMUFGQzFDCis6MTAwMDMwMDA1NUMwNTc1REJDQzU1NTlCNDlENzdENTFGMUQ4NzdBQkFECis6MTAwMDQwMDA2QUQ4NzU4RDFFRjgxRUMyNTE2NzYwNkUwN0I0QUQ0NzQxCis6MTAwMDUwMDA4N0M0NzU3QzhGREQ2RTVEQzcyQTE0RTA4MzgzRUIyQzJCCis6MTAwMDYwMDBENEVBRUYxNzlBRUM4M0QwRUUxNTFBOThCNzM3N0RGOURBCis6MTAwMDcwMDBBNDgzRkI4REMwRTRFOTQ4RTdBQTIzMjY5Mjc3RkNBMTdDCis6MTAwMDgwMDAxRjU4MjlGNDUxMTUxMDI4MEVFMEE5M0NDRDAyRDFCMTFBCis6MTAwMDkwMDBGODVDRDlFNzBBQjYwRDEyRkIyNEMyNUY2MUExQkVEQzkxCis6MTAwMEEwMDAzN0RDRDdEQjU2RTE3ODgzQzNGOTg0RTNBOTQ4OTEyQThBCis6MTAwMEIwMDA5NEIwNzk0QjZDNTExMTdEMzlDNTMwMENEN0MzRTQ2OENECis6MTAwMEMwMDBENzU2QzBBRjlDNkU1OEIzMUJENjJGMEY4MDE2RjBBMTI5Cis6MTAwMEQwMDBEODVERjI2MjY4MzcxNjRGOTE5NzQwNUI2QkU0NzZCNTU2Cis6MTAwMEUwMDBENkMwOTY4N0UzRTkwNTgxMUZBREZEQzBFMUQ5OEE3NENBCis6MTAwMEYwMDBCRkY0NTZGQjE4MkJFOUFCMEMzQkM5Qjk1ODZGQURFNDA0Cis6MTAwMTAwMDAwQTUwRENENENBNUM1QkUxNUE5REVDNjE5QzhGRUIxOTEwCis6MTAwMTEwMDBGMkYxMUI2MjFDOTdEOUIwNDcwNTdFNkQ3NDdDNDBGQ0UwCis6MTAwMTIwMDBFQjhBMzNEQzlCMDlGREMwMTMxRkYxN0VCQUUxNEEyNjNFCis6MTAwMTMwMDBGMEY3ODEyNzNBQ0ExNTkwMDc1N0I2RTFDQTQwRTgxRjgxCis6MTAwMTQwMDA3QUUyNjM3RTdGMjIwQzA5MDZFQUYwMTM5Rjk0RkI2QzJGCis6MTAwMTUwMDAzODJFRDc2NzZDQkIzQjFCRTc1MTBDMTJDOUE5NzJDMDg0Cis6MTAwMTYwMDBFNEFGODVGRkFEOEJFNUZDNTQwNzNDODJGQ0Y3ODZCMDFECis6MTAwMTcwMDBCM0VCNkI4QTVFQjYwMkZGMkI0NTZFNzUwRDhDRTNDNzQxCis6MTAwMTgwMDA4MDY5RjRERkRGNkE3ODk0QUQwNjhBNTNCMDQ1N0NCRjlFCis6MTAwMTkwMDAyOUQ2QUREMTgxMzVCOEIzNjdBMTVFQTg3NzY3Q0Y4RTc4Cis6MTAwMUEwMDA0MUJDN0E0RjIyNUVGM0RCREFBN0EwM0U2RTc4RkJGREZFCis6MTAwMUIwMDAzMUU4QUYyMkJENzA5Q0ZDMzY4OERENjAzRDk3NUVFQjc4Cis6MTAwMUMwMDBCNzQ1MEU4QjQ3M0Y3MDE0QkVFMzAwMzk5NkRDREM5RkM5Cis6MTAwMUQwMDA5NDU0M0I1QjA0NzI1N0VCNjZBQTA5RDY5NUEyOEJFQjRECis6MTAwMUUwMDAxQTE4RDcyRkNGREIzRDdGQzRGNzU4NDY4MEVDNERBMUJFCis6MTAwMUYwMDBDM0ZCMzFDRUFGOEY1NzU5N0I3Q0FGN0E1OUFGQjc0QzI5Cis6MTAwMjAwMDBCOTBGQzhFOEU3QzRBNzM3QkVCNzA0RjVGQkVGQ0RBRTFBCis6MTAwMjEwMDBDMTJBQzJFNTY2MEYwMDNDM0IwRDRDNjFGMUM0MjZDMzA4Cis6MTAwMjIwMDA5NDAyOEMzRkEzNUQxQjUwRUU1RENDRTkwMzM5QzMzMEQzCis6MTAwMjMwMDA4RDgwODQ1RkUyOThCMEI4NTVBQzA3REUyRjYxRDA4RTE4Cis6MTAwMjQwMDA0NUY4NkVBMEY1QzlDODU3QTM5ODQ3NDZGRDM1ODZGOTBECis6MTAwMjUwMDBBREQ4NzYzNUJGRTY0NEJDM0QxOUM1RUU0MEJGQ0ZCMjQwCis6MTAwMjYwMDA4REI5RkQ2MUZBNjM0MDNDRjdGNzI2MjUxODA5RUU2ODYxCis6MTAwMjcwMDA2M0ZENkNFNEQ3RTgyRjk4MURGREFBQUVGRjM0MjkzODQyCis6MTAwMjgwMDAzRTA4Qzg3NEJDRUUzQTZDNjAwOEU3MEI0NkJGM0QwRUYyCis6MTAwMjkwMDBGQUMxRTE4QUZBMkMwQjhERDcyNUU4QUQ4REZCQTQ0OTc0Cis6MTAwMkEwMDAxREVFNDA3RDkzQzBGQjJGMTQ3MkZCMUNGQ0RDRTQ3RjMxCis6MTAwMkIwMDAzNjEzRjE2MzU5RTMwRjkzMkY2NzNDRjc1QkJENDk0NTU0Cis6MTAwMkMwMDBGMUYxRDBENjM3NDczMzlDN0Y2QzRCQjQwMUU5RjBGMkEzCis6MTAwMkQwMDBGNkJDMjhFNDg3OUQ4ODFCNTg3RkJDRDk3RTBGOEUxN0ZCCis6MTAwMkUwMDA3RjA1RTBDREE0RUI2RUMyQUJBMjhFOEEwM0JDNEU5ODE0Cis6MTAwMkYwMDA2NjUzMzcwMERFNUY4OEFBOUY4NkZDMUZEQzYxNjBDRkYzCis6MTAwMzAwMDBDMjE0M0I0REFFNTlEOERGNzk1OUI1QTNCRTdEMjFCMzk4Cis6MTAwMzEwMDAzRTlBRDZCM0MzNDBFQkQ5MTkxRDFDQjExNkUwREUzMEFFCis6MTAwMzIwMDA0QzI5NDdGODE0MkI1MzUwMEYyQjg2MjJGNTFFQjgzRTRDCis6MTAwMzMwMDAzNDlFREI1NzREMkYyRjg4RTdGMkYzQTQwNEYzRTdFMTU3Cis6MTAwMzQwMDA3Mzg1MjQzRkE1QjI4REU0QUUyQkM4RkM2Njk4Mjc2OTVGCis6MTAwMzUwMDA2RUJCOENGNDg4OUUwNUFDODQ3Q0FGMDQ2NDA2RkQ0OUJBCis6MTAwMzYwMDAxRTQ2NDk4RDQ5MzZBMzVGMjU3REVCQjYyRDA2QkE0RjUzCis6MTAwMzcwMDAxMUZBNzZDQTg3QUIyQjc4RENFMzNBM0QxMUM2M0I2OEFECis6MTAwMzgwMDAzMzMyNUNENzY0RDYyMUEzM0YzOEY5MkE3MzA1OTA3RkI2Cis6MTAwMzkwMDBBRUYyNzhDNjBFN0ZFODNGM0RBRkYzMDc0QkM1NzhFRTZGCis6MTAwM0EwMDBBMEJEMDQyRjE3QjI0ODNGQUU3NDczRDlFNzEyQ0RBMzk2Cis6MTAwM0IwMDAyQTY4QTc4QjJEQkFGQkU4RTdDNTYyMUIxOTM3OTVDNURDCis6MTAwM0MwMDAwQkZGQTYzRkVCRkYxREU5MzdFMDVFOThFRjNFM0I5RjNBCis6MTAwM0QwMDBBRjU0Q0VGOTE1QUVBRkFCRENFNDQyM0NFQ0IyQjlERkMyCis6MTAwM0UwMDA5RDg4N0FCMUREQzhCNkIyQkVFNUU5Nzk4ODNGRkRFMDA3Cis6MTAwM0YwMDA3MzBDQkI2QTY1RkU3Q0UyNDcxQkFFNjdDNEU2OERCRTJDCis6MTAwNDAwMDAyODU4Rjc4ODQxN0M3Q0U0M0JENDIzNDNGRjMzMzEwMUY3Cis6MTAwNDEwMDBGNUY4NTVBMTVGQjQ1NkUzMzNFNDI3N0IxQ0U3MjdGQkNGCis6MTAwNDIwMDAwRDIxMzlCQzMzM0U5MzlFRDNFNDBBRjkwQ0M3RDk2RjMyCis6MTAwNDMwMDBGNDJGRjRGNDYyMjc4MTNGRUY0NEZFREM2NTYzMTQ0NzM4Cis6MTAwNDQwMDAzRDk2NkE1OTgwNzJBNUNERjNCQ0UwNjM3REJCQkU2NjY0Cis6MTAwNDUwMDA2REFCMTFEN0ZEMTVEODAzODBCQjI0RURBQTI5REM5RTE2Cis6MTAwNDYwMDBFRjQ5RTI3QzU1MkE3RjRCRkU3NjY3OTNDNEQwQ0Y0RjhECis6MTAwNDcwMDA2RUUyRkEzQjlDM0Y1MjdCRTc4RjVGMjI1RUFGQzUxRjY3Cis6MTAwNDgwMDA1QUJDQjBGQjg3RjJDNzkxQkY4RjNGMzY1QzkzM0ZCRTJCCis6MTAwNDkwMDA4RDQ1M0NEQ0Q3NUM5Q0MyQkVDN0JGNjkxNEZDRDBENzdECis6MTAwNEEwMDBGREYxNTZBRUU3RjRENzVGMTE3OERENjdEQTM4M0QxNzE2Cis6MTAwNEIwMDBGNUMwQ0QwNjE3Q0EzOTUwM0Y3RDM2QUM2MzVGMzQ3RjM3Cis6MTAwNEMwMDA4RjI5NkJCMkIwQkY0QkUxN0E2NTU3OTM5OUY0Q0EyRTZFCis6MTAwNEQwMDA5QkQ3NEI3NkRDNjk2MUU4M0YzMEM1REJGMTMzRDQ4N0NECis6MTAwNEUwMDA2OTE2NzU0MzE4RkYyRThERTdGQzU2NkYwQzhDRkYwQ0I4Cis6MTAwNEYwMDBGREUyQTM5Q0NFRTM2RUNFOTM0REYwNUNFQTUyMkVFNzc0Cis6MTAwNTAwMDAwNTE3NEM1QjMwMEUyQjREMjhEQzgxN0M3NDAyNzUxNjcwCis6MTAwNTEwMDBCNEQ1RTdFMDI5NDA3Q0Q1MzkxM0U5QkJENzVBNEU5NkNDCis6MTAwNTIwMDA2MTdFMTFGQzFFMzdGMkQ5RDhGRDI3Q0I4QTcyRjA3OTkzCis6MTAwNTMwMDBBRTRGRjc4QTU2RUI4RkM3MzVDNUIzRUU3OEQ3MjNFQ0FECis6MTAwNTQwMDBDNjc4QzZGNTkyMDdGOTI0MzdENDY3NkUyM0M1NkIxQUFGCis6MTAwNTUwMDAzRkQ0NDcwMzNGODA1Q0NDNjdBQTMxMTY4NjlDNzNDRTlDCis6MTAwNTYwMDBGMzMwOTg0MzM2QTczQzkyQ0VGMzAzRDMyODNFOUM3QkNFCis6MTAwNTcwMDBCQUZENTVEMENDNkM5RTQ3Nzc1RkYwQzE3QzFEMUY4MEMzCis6MTAwNTgwMDA5RDNEMUU4RkZFRDJGMTgwQzk4MEYzOTlENjY0NzM3RkEyCis6MTAwNTkwMDA2ODREMTZGMjkzMjY0RkY0MDMzQ0Q1RkY2MUQ4QjMxQjg4Cis6MTAwNUEwMDBDMkVDN0I2QzAyOTdBM0M3NUQwQURERjc3NTk4RkM4M0VDCis6MTAwNUIwMDBFMUQyQkYzM0ZFNUVCREIwM0Y5RkEzM0M2M0ZDNzBERjYyCis6MTAwNUMwMDAyQjBCRDE4RUU2MkY3NzFGNDRGQzRGNEY5MkU5RkEyRjY5Cis6MTAwNUQwMDA1OEMwOTI4NUY0NzEyOUU0OTdENTFCRDVFMkNGQTREMEY5Cis6MTAwNUUwMDA3MzRDRjEwQ0IzQzFGREZENDlEMUY5Mzg3RjY5ODJGNzM1Cis6MTAwNUYwMDAyMkQyODkyOUMxMjNGOERFRDgwOTc5RjkyODVGQjY1MUJBCis6MTAwNjAwMDA3NTA5Njg4RjM0QjgwMUFFRjJBREI2MTAxQzFBNUM2NzdDCis6MTAwNjEwMDAwNTVGOTQyNjJDQkU4OEVCQzdGNzUwQkYzNDdFN0NERTg2Cis6MTAwNjIwMDA4MkVGNkI3NEFGNkZGRTgyRDMzQjhDRkU0OEVGMTBGRDAwCis6MTAwNjMwMDBBNTNCQjBBRkUxRTEyQkExNTdCNEZFM0Y0QTdGMkQ3RjMwCis6MTAwNjQwMDA3MDRERkE2MzdFMjBGNkVGQTJCRjM1MjEyOTQ0N0ZGMDdBCis6MTAwNjUwMDBCM0UyQjFBRkY3QjNFQTRERTA3N0U3RjRCQzVFRTgyODY4Cis6MTAwNjYwMDBBNEU3NUQyNjU4MjFGQTU1MkQxMDc3QTIzQzdBMURCNEQ3Cis6MTAwNjcwMDAyRkIwQzdDRUU3RUFGQUMzRjlGRUUwMjJCMkMxMDlGMTEyCis6MTAwNjgwMDA4NEY3NkE1MzcwMDhGQTIxQTMwMjEyRjk4NUEzNDBGMDk3Cis6MTAwNjkwMDAxNzkxRkY5NTQxN0FDRjI1RjBDNENFNEJEMkY5NjFEQzlBCis6MTAwNkEwMDA0NUZGMkUxREZEQzM0MDAyRkE1MUEzQ0MxNTAxRTRGNzBFCis6MTAwNkIwMDBEREQ2MjlFOUU4RDdFNTU5Mjc2NTIxNUZCRDNBRUNCRUNCCis6MTAwNkMwMDBFMzY4ODI1RTRENUJCRUU3MzkzNUU0RkY2OEZBRURBMDcyCis6MTAwNkQwMDAxODU2OUJCRjIwODFFQkExMUI0MUREQTIxRjg4MkU2MzEyCis6MTAwNkUwMDAzODFDOUEzRTQ3RjIyMDFDNTI2MEJFRTEzQjJCRTlFNUU0Cis6MTAwNkYwMDBBNjBFQTBDNzhEMDgwN0UwQTE1NTYyMERBOENGMEIwRDZGCis6MTAwNzAwMDBFRUM0NjJGNEQzOTIwMjBBRjdGN0JFRTk4RkY5QzE4QTA4Cis6MTAwNzEwMDBBNjM3REU0Mzc4MkI3MDNGMDRFMzUwOTdGMTYyNzczRUIzCis6MTAwNzIwMDA2MjYwNEYzRjU4RjM1N0I0Qjg0MEYzNjdCNEY4MTNGRDE1Cis6MTAwNzMwMDAxRUJDM0Y0MDVDQjc5QjAxNDBCNDQ3MDE4QkJGMDZFNjNGCis6MTAwNzQwMDA3RkYyQjIzQURDMkRFNDU2ODE3NTU0ODg3NUNDNjRFREE1Cis6MTAwNzUwMDAwNDE3RkJGNkJCRUYyNjAxN0Q2NjA4N0M1NDFDODFCOEFDCis6MTAwNzYwMDAzMTE3RUYzMzc2MzNFMEUxNjY4NUM3OTMzN0JCMjA3RUUwCis6MTAwNzcwMDAwQ0UzQTM5OUUzMjJGQkY4OUI5MjFDMUFFNzVBQ0ZFQkY4Cis6MTAwNzgwMDBFREMwNDREREZFQ0MzRkRBMUUwMTdCRjQwOUI4Q0VDN0Q0Cis6MTAwNzkwMDBENkYxQjg3NEMyNDBEOUE3QTBFMTFDOTc2OTQwN0VBQ0RECis6MTAwN0EwMDAxNkY2MERDMkU4NUVFREQyNEJDMjJGOUU2MEU4Qzg3NTBBCis6MTAwN0IwMDAwMTdFNUJGN0ZGOERFQ0UwODFGRDdGN0IwN0ZEQkNGMUU3Cis6MTAwN0MwMDA5RjJCQ0MwQ0VGNEZGOEJDMjAwRUY1MDQxQkE3MTI1RjNCCis6MTAwN0QwMDA2OUUzNTZGRkE5QzFDQUY4NzVFMkZGMkFCMUY2QzMwMDYyCis6MTAwN0UwMDA4RjdCMjhDMjY3QTFGNjc3MTc5RkRDODRFMzdENzk0RTYzCis6MTAwN0YwMDBFMUJDMkRFNjJGMzM3OTA3NjExRUJCQ0NDNEYzMDE4NzIyCis6MTAwODAwMDAyNUVFRkY2OEY3MEYxQjAxNkVCOEJFMjk0MUNCMEJCNDc0Cis6MTAwODEwMDA5M0REQzc5RjM5OENDRTM3NjMzRTIwMkY0NEQ3OUIyRjYzCis6MTAwODIwMDA5NDdGQUVFNEY2QTQwRkZFRkUzN0YyMDE1QTFFNjBBQkQxCis6MTAwODMwMDBDMDFGM0I3OEQ2QTQwMjVDNTMxQkVFNTFEMEJGOUVFQThBCis6MTAwODQwMDA5NDk5M0I2Q0RFOUI1NDJCNzM4N0U1MDM5RTQ5RDBGOTRBCis6MTAwODUwMDAyMzA3NUZEQzM0MDNFQzQ5NzU5QkVDOEE0Mjc5NkREQTNGCis6MTAwODYwMDA3NTNDMTdGQkVEQjJDQkRBMEIxRkU5RjEzQkI1RTkxRTg2Cis6MTAwODcwMDAwNUY5REY5OEE4OTI3QzVGNkJGRTA5MjM4MDRGNkU0MERDCis6MTAwODgwMDBCQTMzRjJFQjNBQzc0ODI0NDc3QUZBMUVEOEZGRUI4NDEyCis6MTAwODkwMDA4RTlDQkVGMUREMTdGREY1NzRGOEREQzUyMkRBRUZCOUU3Cis6MTAwOEEwMDAxNjNERjQ3Q0RCMDJFQkY0QzFGQTAyQjA0RTFGRjg1RDlBCis6MTAwOEIwMDAwN0Q2RDlBOTdGNjg5RDkzRkExQUJGNTYzN0ZGMzYwMTJDCis6MTAwOEMwMDBGRDM2OEQ0RjRCMTMzOERGOENERkI3Mjk4MUQ5NDJGNEM5Cis6MTAwOEQwMDBEMkYwRjVBMUIwNTc3QkEzMzQ3RkMzMzU2RjA2NUMzQUU1Cis6MTAwOEUwMDAwNTc2ODcxOEQ0QzdEQTlENjM0MkY2NkJGRUU5MzJGMkNCCis6MTAwOEYwMDAzNzM0RkIzNTVGNUU1NDRBNkE1M0Q4MkY0QzIzQTM1RUNFCis6MTAwOTAwMDBEM0RCQTlCOUVBNjIyM0VCQ0QzRTJEODhFQzk3Qjc2RDE2Cis6MTAwOTEwMDA1NDYyQTg2NzIwM0E0OTkyQzA4N0YwQjMzNTM4Q0UzMDg4Cis6MTAwOTIwMDAwRkMxQTlBN0E3MDY5NzFFMUU2RDdEOUE3RjNENUZEMEI4Cis6MTAwOTMwMDA2RkNFQTA0QzIzQzJERkMzQUU4QTc1RTI0MDk4ODdCODYxCis6MTAwOTQwMDA1RUJCRkFCNThFOUZBRjVDMjg3OTJCQjcxN0JFRUQ4QkQ3Cis6MTAwOTUwMDA3RkY1RjczNTdENTA4NjEzRTQ1MUVCNDNCRkMyOTg5ODdECis6MTAwOTYwMDA0Qzc0MkJCQjZBNjI2RUIwMUIyQzIzOEE3RDFBNjY1N0FGCis6MTAwOTcwMDA1OEM1NTBFMjlGN0I4NTFERUU4QjdGQUFBRUNBQ0M5QkVCCis6MTAwOTgwMDAxRkUyMjM2M0UzMTM1NkU0QTM3RENBNDYyQkU2MjcyNzIxCis6MTAwOTkwMDBEQjY2RDVDNjAxOUU0QUZFNTQzNDE3RkRCQ0VBMEUwMzQxCis6MTAwOUEwMDBDMzE0NTY2OUQzMTcwNzMxQUVBRjdFOEZCOTUwMkYxNkQ3Cis6MTAwOUIwMDAzNUI1MTYyM0RGMUQ1MkRBNjU4QUIzQkY2NEVDODkzMDgyCis6MTAwOUMwMDA3RkIxQjFBOUQ2OEFGRTU0NjNBMjRDNzFGQzYxMDdFN0RFCis6MTAwOUQwMDA0QkVERkU5NjQ0QUUzRjFBQ0Y1RDlFRTFFRUU1RkUxOTZCCis6MTAwOUUwMDA3MUJGRTRFMzNDRTJBM0IyNDc0MUFFMzEwRTREOEFBMUIwCis6MTAwOUYwMDBCQzQ0ODk2NDlGNTM4MTdFQzg0RDQ2RjJGMzIxOEVGOTMxCis6MTAwQTAwMDAyM0VFMDM1RTZBMzRFRkMyRDQ3RTY5RTMyM0Y3RDg4MTE0Cis6MTAwQTEwMDAxMEY1RkZGRDY5OEQxOUYzMEJCMzI0RDdCM0YwNUM5OTgyCis6MTAwQTIwMDAxQTZDQzU3RUQ5REM0Q0FBN0IxOEZCM0YzMkY5QjNDMUU2Cis6MTAwQTMwMDA1QjI1Q0E4Qjk0MDFCQjYwQkY2QzUxQTYxRkYzMTNGQkVGCis6MTAwQTQwMDAyNURFRjczNUYzN0QwMjY2RjcyNUNDODA3OURFQUU0OEVBCis6MTAwQTUwMDAxOEI1ODE3ODRBRUIwRkNFREJDMDA0MjM4N0M1NTdGNzYyCis6MTAwQTYwMDBFRDk1NDlDRkRDNTcyQUY5NzFCRkE5RDQ5RUNFN0M2MUEwCis6MTAwQTcwMDA3QzU1RjZBODg5RDYzNUJCMjlBNTA4Rjk3ODRFQjlDQzlFCis6MTAwQTgwMDBGQzYxRkMxRDEwN0VFMTNDMEZDNEUxNjFFRjFEOEVFMkI0Cis6MTAwQTkwMDA3MDA1MTcwM0RDNTI0ODZFQTcwOTNFOUZDNUI4OUYzODAyCis6MTAwQUEwMDA3RjQxNDJDNDdCRjBDNjJENjg4RjZFNkQ4MjM4MTU3QTA3Cis6MTAwQUIwMDBEMzQ0RkM3QUFCMzczRDYyNUUwRkUzN0VDRDA5MTYyQzQyCis6MTAwQUMwMDA4OTgzRjFGQjI1MEQyNEZFOUIxMUI0OEYwRUE4QTg3NzE2Cis6MTAwQUQwMDBDRTI0QTI1RTYzQzNCODlDNjg3MjU3MkFBRkFFMjM3RTUxCis6MTAwQUUwMDA3MEYyN0RCMjc5MTI0ODkzOENGQTJGNTI5RTY2OEU4QkVCCis6MTAwQUYwMDBFQ0NGNzJGN0E4Mzc4ODkwN0ZCRDVFRDdFNDdFNUVCM0Y3Cis6MTAwQjAwMDA0Q0ZCNzJGMzBBMjUxN0VCNDUzRkU4RkRFQ0IxRDE3REI0Cis6MTAwQjEwMDBFODg1NkZENTg3RTM3QUQzMEIxRjk2RkY1RDdBRTEzNUMxCis6MTAwQjIwMDAwODJCQzY4MUZDRkUzNDUxRTg4NzdFQUMxRkVBODc1MjUxCis6MTAwQjMwMDA3OUZCMjZFNDk3MkVCMDc3RTY1RUY4NDVCMzE3NUEzQzZBCis6MTAwQjQwMDA1RTA2RjI0QUYyN0U5MUVGNjc5NDVFNEQ2NUJFRkM1MDAwCis6MTAwQjUwMDAzQ0RFQUQyRkMwOUY3MEY1RTJFNzNDOUQ5ODQ1NzJENDE2Cis6MTAwQjYwMDBBRDVGMzRGRDExRTY0RjE4QzdGQ0UzRkU0NDI5Rjg5MTUwCis6MTAwQjcwMDBBNjNDODQyRjgzRTAyQjYzM0MxRjU4ODY4NTQzOTg5N0JGCis6MTAwQjgwMDA3MzdFNDFGOTk2NkE4OEYzMjlERTY3QkYyNUI4NTBDRjk2Cis6MTAwQjkwMDA0OUYxMjEzOUQwRkIxOTVBNUVENzJBRjIwODdBQkVFODBBCis6MTAwQkEwMDBDRUYzQ0QzNTUyMUQ4Q0M2MTc2NTc2MkUxRjY1NzM2NTQ1Cis6MTAwQkIwMDBDQUJCRUJGOTQ0OUI0RkNGMUYwMTVENUVFNjlBRkMyMTU3Cis6MTAwQkMwMDBFNEVDODdGMjQ3NzNBMkQ4NTcxREM0MDY1RDBGNUY2ODM3Cis6MTAwQkQwMDBGQ0EwRjE4N0RFOEUxQ0QzRTU2N0ZBQjIyMzZGQTIxRDVECis6MTAwQkUwMDAxOUREQjcxRDc5N0Q5ODkxRjRCNURFN0U2OEY2RTI3NzYwCis6MTAwQkYwMDA0OTVDMkY2NzI0RjI3RDhFNjlDM0U3RDlEMEVGQjAyNjE4Cis6MTAwQzAwMDBGMTNBMERDRDBFNzVFNzk3MzY3MzdFNzhCRDYzODkyMjc0Cis6MTAwQzEwMDBBMTNENDFCRDkwMTk4NjdGOTE2RkQ1RjhBRkVBNTE4OTBBCis6MTAwQzIwMDBGMjhEMTU0MjJGNzUzNkYzRkM1Qjc1ODlFQ0I3QzBGRjZBCis6MTAwQzMwMDAxNjM3M0RCMTg5Rjc4RDk0OUYyQjU0NUExNTBCOEMzQjc5Cis6MTAwQzQwMDBEMzI1QjkzMEFGRTMxNkY5QkExOTZFODlFN0VCNUM5MTk5Cis6MTAwQzUwMDBGQkY0MkQzQUZBQ0UxMTdDMzQ5MzA1RUJEMDFGRDdFQjgxCis6MTAwQzYwMDBBNTM5NTdCOTVGQTBENzRGNzNDNEJFRkIxQ0REQkVGQkNGCis6MTAwQzcwMDA1NTREREUwN0IwMDFGRjRDN0ZDMDlDRjRGREZFODBGNkIxCis6MTAwQzgwMDBCRTQ2NDc4RDdFMkFFRUM1QTExQzFERkNDNkE0QzY3MEJCCis6MTAwQzkwMDBGRjE5RTkzN0Y1QUE0MkUzRDg5MzA0NUYwQTdGRTZDQjUwCis6MTAwQ0EwMDA4Qjc5QkZBMDk4NEYzQzVGRERGNDg1QzkzQkIyNkZGOEVDCis6MTAwQ0IwMDBBRkU1QjdDNkEyOUYzRTNBRTRCNzZCRjM0RTUzMTg0QjZECis6MTAwQ0MwMDA0N0M3NEM2NzRGNjY4OUVCM0ZENDdFMENEN0FENDNBMzMzCis6MTAwQ0QwMDA4M0E2NDc3QkUwNTlFOEQ5QkVFODc0MkQzREFCRTlCMzY0Cis6MTAwQ0UwMDA3RkI2OUVENUM2RDdFQzgwMzZBRjVFRkZGNjE1Qjc2OUU2Cis6MTAwQ0YwMDBGQTc0RkQxNjAzRTU0QjI2OEJGODc4QjJDOEMzQ0U0RkM1Cis6MTAwRDAwMDBFMkYxQzFBRDQ5M0NFRUVDRkFDQTYyNDA3QkI5QjM4NTcxCis6MTAwRDEwMDBGQjI3MkVCM0ZEMzhGQTA1QTE3QzFGQTdFN0MzMzFDQzEyCis6MTAwRDIwMDA4N0ZCRUM0QzY5QjdEMEJFNjcxMTkwMTJGNzNERDNGODQyCis6MTAwRDMwMDBCRUU3NzYyNUUwMjEzREVENTI1ODBEQzhDOTM5N0MwRjNDCis6MTAwRDQwMDBFNjc5Rjg4MDZGMjFFQUU5ODczRjE5NjJBMEZENzcyNUVGCis6MTAwRDUwMDBEMDhFRkVDOUQ4M0M4NUY2OEYxQzY2OTVGMkMxOURDRDFDCis6MTAwRDYwMDA2NjNCQkVEN0I1RUZGRkI0MUE3MTlDQUY5ODBCNDNCODgyCis6MTAwRDcwMDA0M0NERTZFRUZEMUJENDA3QTU3MjlCOENGOUZCQUUyMDlDCis6MTAwRDgwMDBDODA4M0MzRjY5NDFBMDE4RTNBMEM5QUNCRDE2RTU3QjhCCis6MTAwRDkwMDAwMkQyQjExN0ZBRkQyQTQ5OEJCMzdCQ0ZFRjE3Mzc3MzE1Cis6MTAwREEwMDAzRkFFMzg0NjI2M0Y2RThBQUZCRDE4RjdBREE2Mjg5MkYzCis6MTAwREIwMDBBQjE2OUZENUU1Rjc1RkQxQzUxRkExRkNCRUFBRjBGQTFGCis6MTAwREMwMDA0MzVERkVCRTkxRUI5OUVCQ0RFQjRGNDBERDA2N0NCQzY1Cis6MTAwREQwMDA1RUUzNzNBMTZGNTgxRkY5RkQ5RDI2QkVFRjEzM0M2OUJBCis6MTAwREUwMDA2NEU4MDdCMzBCODlCREU2NjNBRTk1RTdERkQ3MTJFRDg0Cis6MTAwREYwMDA1NjYzNzE5RjhFRkJFQkZCNUFEMkRDNkE2RURGQ0ZFNzQ2Cis6MTAwRTAwMDA3NjA0OEJEMDNDRUVEQzNFNUJBMUZBMzU5MTFGRURCMTUwCis6MTAwRTEwMDA3RkQyQzdGRTg4QkJEMTdFMDhENTY5NUZGQjIxQzU1RjQ1Cis6MTAwRTIwMDBBQTk0RjZCOTVFQkM2OTc1MEI0Q0Q0M0ZEREM4QjQ5RjdCCis6MTAwRTMwMDA5QkU0NzRFN0Y5NjgzN0YyRjlDRUYzNjk2RTg0RUI3OUQ1Cis6MTAwRTQwMDBDMUE3MUFERkVGM0I3NzM5OUFGNjQxNEQ2RTE1Rjc4RjQwCis6MTAwRTUwMDA4MzBFOEJFQjU5RTI1QkNFRUZGNUE5NDNGQ0I4NEZGQjU5Cis6MTAwRTYwMDAxQjIxMTczQkEzODNDN0IyMTNDM0Y3M0RGODNFNDdDQjAzCis6MTAwRTcwMDBCQTQ3Njc5RjMzRDI3RUI5ODRGOTQ4NkQ3RkQ5MDc3MjJDCis6MTAwRTgwMDA0Mzc1M0RGMThDRTIwRjIzQUI2NzM4NkZBRDlCRkQxQUM0Cis6MTAwRTkwMDBEQjI5OTNENDM4QzRGQkU1NDQ2RDFGNTM4REEzM0NDNEI4Cis6MTAwRUEwMDBCNzU3QThDRTUwOEZGRkRERUI5ODA3RUI1MTFBRDY1OUY0Cis6MTAwRUIwMDAzQzBBQzhGRkFCRUJFQ0Q0NkY1Q0U3QTQ3NkZGM0E5NTM1Cis6MTAwRUMwMDBEQTg3OEVDNzNFODA3NkJGREE2REYyMjg2MUZBRTM5RDNECis6MTAwRUQwMDA2NEVFNzdFNTY1N0Y1MjRDQzVERjdGNjM1NDg3M0VFNTVFCis6MTAwRUUwMDBDMTBFMTlGNUM1OEQ1NzYxMUQxMTc1MjdDQTY1QzQzNzI3Cis6MTAwRUYwMDBFNTM3QjM0MkZENEM2OTcxMENGNjZGQkMwQUZEQjBFN0YzCis6MTAwRjAwMDBBRjI0MzlCODNEQUE1M0VBNDYyNzkzQjQxMDVGRkMyREFECis6MTAwRjEwMDBDOUREOTEwNEQ3RUY3MTc4M0VDMTc2QjczNEZGRTAyNTgzCis6MTAwRjIwMDA0NkZENzNCQzdGQUI3QzA5OUVDQjBGMTQ1MjVFMzkxRjBDCis6MTAwRjMwMDBGM0NBNzkzNEVDNDJDNERGRTg1NjEzRUQ5NzZCRjlERDYwCis6MTAwRjQwMDAzQzRERkVCRThFQ0MzM0U3OEJCQ0VFQUJBQzgzRjJDRDFBCis6MTAwRjUwMDAwNTE2MDhCNDBDMDgxN0E3OUY1QjlBRTc5NDMwMUY5OEYyCis6MTAwRjYwMDA2NDcyNjFCREMzRTgyQzRGM0VFNjYzNUI5MzE4QzU0N0NFCis6MTAwRjcwMDBBREFEQzkxOTZBMEU3MjBGQ0ZGQkJBQjVCQzJGRkJGRTFGCis6MTAwRjgwMDBCQ0VGOTE4RjYyN0RBNEI3QUU5QTY4N0ZGQUM4QTk1ODZBCis6MTAwRjkwMDA1NzgwRjYwQjJERTRGRjY5RjVDODJERDFCQ0NFODA2NUQ2Cis6MTAwRkEwMDAyQ0EwM0NEMzhEQTI5RUQxNjJGNjlBOTM0OTVGMDUwRTg4Cis6MTAwRkIwMDA5RTgwRjc3RTdGOTlGMTdEQzdGNjBGNjk1RkJCRDgzMEMxCis6MTAwRkMwMDAzQzA1RUI3RTBGNEE0M0UzQjA3REVBQTNEODFDNkE0RjkxCis6MTAwRkQwMDBDNTVFNDRGQ0I0MThBQzJBQ0U3QjY2OUQ1QTgyNzU2RDAyCis6MTAwRkUwMDAyN0Q2QjExMkFDNjM3QjZCOUQ4NURBOTNFQkVDRDQ5RTc0Cis6MTAwRkYwMDA1QUU3QTRGNjc1Qjg4RUZDNzMxQzlFNDc3RTcxQkY2NUQ4Cis6MTAxMDAwMDBBMzdEOTIyOTZGRDkxNDZDRjMxNkM2NTBCQkZCQjYxODlBCis6MTAxMDEwMDAxM0MyREIxMkNCQjY2QkYzNjBCRDVBMjAzQUQwODBDOTQ1Cis6MTAxMDIwMDBGRUQ2QTdCQzhGNTlGQTgxREQzMzdCNDc0QUEzMTg2QkU0Cis6MTAxMDMwMDA3QkNBM0I1RDk5MENFMzRFRURGRjkzQUZFMEZFOUJDOThECis6MTAxMDQwMDBDQjFFQjMwMDVDNzM0RkQ5MUFEQUEwRkY3NkYyRjJDNzU5Cis6MTAxMDUwMDA2Q0E4NkY4RjQ3ODNEMkMzRjVBRTM4RUUxRTA0NzQ0MzdECis6MTAxMDYwMDBBNTkwQzYwNTk3OEQ4MzdFODJENjVGMzFCRDY0MTI2M0RECis6MTAxMDcwMDBCNzE0Nzc2NDMzNjBBREVDRTQ5NUQzMkQ4MEM3NUJBQ0Q3Cis6MTAxMDgwMDBERTFGNjNERkU0NEI5QTVFRDIwRkZCQ0M4N0Y1NjA0MTM1Cis6MTAxMDkwMDBDOTQ4NzEzRkNCOTAxMkIxRkU2NUE2QzNGQjQ2NzI1ODlBCis6MTAxMEEwMDBGRDlFNUJGQTEzRUQzMzhENzE0QkNDNDE4NzFGOENCNEUxCis6MTAxMEIwMDBFRkM1RUMxRjI3ODRDQkRCNEM0N0U5MUI0ODhGODlDOTYwCis6MTAxMEMwMDBCQzBFNzhGNDI0QzkxRDVFNUZBMTdGNkVGNDM5QjUwNEFGCis6MTAxMEQwMDBFOTM0RTY0MjU5MURCNjMzQ0IxREQ0RjcyQzE4NUI4NzkzCis6MTAxMEUwMDBGMjVDNjJFQkVCRkQ2MjdBQkYzQzk5RDc4RDE0Mjk1MjFBCis6MTAxMEYwMDA0NDVEODlGRUI5N0M2MDI2RjQ4RjgzNDdBMzI5NEYzMDc1Cis6MTAxMTAwMDBGQUI0QjcxNkVCNEY0QjlEOTk3OUIyQTZGQUE4RUZEODZGCis6MTAxMTEwMDA4MkZCNkRBMzJCQ0U5NDI0QTBGQ0Q4MjQxNzlBODkzMThFCis6MTAxMTIwMDBBQ0EzMkUwMUVFMTdEQUIxQTAwQUQ3RjU0NDMxRDZGRkYxCis6MTAxMTMwMDA4QzU2MjUxN0EyQUREMEREREE4MEVGMTdCQTYyNUM4NTM4Cis6MTAxMTQwMDBFODhGOUY1NjRCRDBGNDlDNTI0NjlEMjg4MEU3QTYwRTEwCis6MTAxMTUwMDA5MjVEMTYxOEU4NTRFMEE2ODk5N0EwNUYzODJDOEVGMkFECis6MTAxMTYwMDBCQzg1Q0E5QTJCMjdBODFGRTNBQTUxNzExRDVCN0U1RDFGCis6MTAxMTcwMDA0NUUzOThDOUFFRUY5RTUxRkMyRkM4M0Y0NTlFMzhDQTQzCis6MTAxMTgwMDAwOTAyM0U0QUMyRUJDQTYwREQwNDc3QTE1REY2NDc0OTE5Cis6MTAxMTkwMDBDOERGRkY1QTYyODdGRUVFRkUxMjk2Q0JDMzdDQzNGRjA4Cis6MTAxMUEwMDA0MkY3OEY0NEFCNTEwMEU4NkU5M0JEMDRDN0RCNkQ5MkVDCis6MTAxMUIwMDBFQzBGNTFERjUzOENDRkZCODYxODU1Q0MxRjk1MjU0NjdECis6MTAxMUMwMDA0NThDM0ZCNTQ0MUE3RjBFRTFDRjg5MUI4NUQ3Q0EzM0MyCis6MTAxMUQwMDAxQzExRjdEQjZFQjM5MjlEQTg3ODJCODdGQ0EyQjZEQkJGCis6MTAxMUUwMDBEMkM5NUU1NEJDMzVBOTA4REIzNjAzRjdEMzJCREVBQTdGCis6MTAxMUYwMDAyOEE3RkIwNjFFMDc1NzJDRkM5MTVCRjQyOUVFQUQ1ODdGCis6MTAxMjAwMDA1ODQ5RkQ1NjI5RTUyNzM4REY5NTlDQjgzQ0NDQUY0REIxCis6MTAxMjEwMDAxQjk0NUFBMjQ0Rjg4MTAzNDlGRUYzNDQ3RUFGRDAzMEI4Cis6MTAxMjIwMDA3Q0QzMjQ4MEZGREVBMzdDOUZBMjIyMjczM0UyRjkxOTFFCis6MTAxMjMwMDAwNTUyNDk3OEZEQTg2NzUyNTQ0NDdGNzY4OUEzMjRCQzlGCis6MTAxMjQwMDAwRTc1NkU0NTZBNDRGRjk2Qjk5OTExRkQ5MkEzMDU2NDI3Cis6MTAxMjUwMDBCRjQxMEY1NDk0ODAxRTM4MEFFRDUyNjBDMTAyNTEwN0ZECis6MTAxMjYwMDBBNUU1OUYwQTA1NEIxNUI2OEJCQ0FDQzJFM0VCNjFGMDVDCis6MTAxMjcwMDA4NzdBQjBDNDE2NjlBNzc3NDc3MzNCNUZDRUQ2RDAwNjhFCis6MTAxMjgwMDA0OUY5MTFCRUJGNUQ5NjY4RkMyNERDNEU5NENCMTUzNjNGCis6MTAxMjkwMDA1RTk3MTU4OTg3QkNBMzQ2QjI5Nzc5MzE5MjFGRTNGQTBFCis6MTAxMkEwMDA5MkEzNEJFQkQwRjQ5NjY3NDRCRUFGRjk2MUU1MDIzRUUyCis6MTAxMkIwMDA2RDVFRTY3M0I3QTMzRkEyQzFBRENEQUZDMTVGMkUyRjY4Cis6MTAxMkMwMDAyQUExN0NGNzM1RDZBMTg3OTdDMTdBNTAzRkU4RTE2ODFCCis6MTAxMkQwMDA0QTE2RkUxQUY4MUZFNEFGODk3MzI0RjA0QkVDQ0Q3RTVBCis6MTAxMkUwMDA2QkZFN0EwNUU4MkI0N0I4QkVCMjQ5ODk1OEI3RDc5NzQ1Cis6MTAxMkYwMDBCRUQyQzZFRENCMkZEM0M2OURFOUYwRDBGQkVFMUQ5RjJECis6MTAxMzAwMDA5RTlBMjA4N0Y1MzMzRjRFODgwRkVGQkZGOEU5QTY4OEY1Cis6MTAxMzEwMDBGQjQ5MUZDRjcxODRGN0I3N0UzQTA3RUY0RjUxRDQ1QTdDCis6MTAxMzIwMDAxQkYwRTUzMTI2Qjk3Q0M4MDc2REFBMTIwM0Y0MjgzRUVDCis6MTAxMzMwMDBFREFFQzNCNkY0NDMyRjk2QUJCMkE5RTc3Qzc1RDg0RTk5Cis6MTAxMzQwMDBCQ0U4NkYzM0MzQkE2RTFBMjZBQjE4QkY2QjdFODgxRTFCCis6MTAxMzUwMDBERUJGMjZGM0JDQzNCMUFCQUExNUY3NTk3N0ZCNTQyQkZDCis6MTAxMzYwMDBGQUYzQkIxRjU0QURFODg3RUM3NkYzNzMxOUVFMkMwMzQ4Cis6MTAxMzcwMDA5RDhGNzE2N0YzN0FDNUJGMjRGM0JBODM0RUYxQkVENjUxCis6MTAxMzgwMDBGQThEREU0RTg0MUJFQkNDRDEzN0E4RkEyNjQ4NzVFNUUyCis6MTAxMzkwMDBDN0QwQkZDQUU5RTk1RjFENTNGQzM2OUNFRkQ4ODM3RUY2Cis6MTAxM0EwMDA1QkY4N0VFMkY1RkE1NzdGMDQxRTQzMzgwQTk5RTQwOTk4Cis6MTAxM0IwMDBENzIzQzU5NjI4NEZCOERDOTZEQTFEMTFGRDkzQzIwRkNFCis6MTAxM0MwMDA5OUVBNEM4RDc4RUYyNjM1MzNFMjM5RjAxQjg3QTE1RjFGCis6MTAxM0QwMDA1MjZCNjI1NDZGRUIzM0YwN0E1QjNEMUU1N0E0RjBGODBBCis6MTAxM0UwMDBDRTY1QjNBMzNCODNGQjY2NzI2RkU3OTE1Q0M1ODY1RUY3Cis6MTAxM0YwMDBDRkI3QTVBNDcwN0ZGMDNGNTIxOEMxMzUyQjg1QzNBNzg2Cis6MTAxNDAwMDBBRkFGRDVGNzZCRjE3QzBGRTI5M0I5OUNDOEU3MkVBQjc5Cis6MTAxNDEwMDBFMTBBQjhCQ0FDRTBFOTI3QTY1MzVENkRCRUUxREUyQzY1Cis6MTAxNDIwMDBFODU3M0NCRDc1M0FBRkFCMzVFQ0MxM0FEQjE5NEYzRkRECis6MTAxNDMwMDBDRkVGREY2MEM4Mzc4MjNGQjBDREY3QzI3NEFDMkJBRkJGCis6MTAxNDQwMDA4QUUyRjUwOTU1NTFBMjNFQjQ2RTc0NDREQ0EzMTgzRUZECis6MTAxNDUwMDA3RTZBMjFDNjlGRkI4RDBDRjNGQzhGOTlDMDBFRTY4NTNBCis6MTAxNDYwMDBGNkQ5QUQ2NjFFQUY1QTREQkMwRTdDN0RFNkE5RjVBODM3Cis6MTAxNDcwMDAzRjNFOEJGMkU2QTU1MDlFQjE0ODQ1M0M1RUI0NUJBODZBCis6MTAxNDgwMDAzRUY0QkU3REE1MjlDODA3QjM1Mjc4REUyQjdCQ0Y0NDNFCis6MTAxNDkwMDAyNzlEMkZGQkU3QzE1MUZDN0Q3MDYwRkQzMDhFNzM3MTdECis6MTAxNEEwMDA3NzM2RjlFNUQ5MDMxODlEMjdEMUU4MDFFMTMzNUQ4RjNGCis6MTAxNEIwMDA4MkYwODFDRTYzMzBCNzEzRjM2RkI1MEUxMzhEMzMyQkVCCis6MTAxNEMwMDA4NUYzRTNGNUI2M0RFQTg5RTMwQzZCNzY0MUJCMjA4NUY1Cis6MTAxNEQwMDBDN0NEQjdFMkJDMDQ2RkIwRkYyQ0RDRDBCMzA3RkJDRkE1Cis6MTAxNEUwMDAxRUM5RkI0ODZGNTlDRTBCQTI3RjFCRkM1MTBDRURDM0VDCis6MTAxNEYwMDBCQzFGQ0RGMUM2MzI4MkI0NkZGM0VFQTI2Q0Q3MDZCQTMwCis6MTAxNTAwMDBDRUYxQjhDMDNGQjBCNjQzQzVGQTBGN0YzRkFDQjcxOEI1Cis6MTAxNTEwMDBFOEY0MkU0NTdDREM2NkY2MEYyNkJFQjJBRDg5QzE3OUIzCis6MTAxNTIwMDBBRUI3REVCOEVGRjkyMUUwMDQ3QjMyN0YzQ0E3OTczNkY3Cis6MTAxNTMwMDAzRkUwRDg4Mjc0N0M1NzlDM0JEMUUwMDEzODdFOEM3MEIwCis6MTAxNTQwMDA2ODcwNzVDM0EzQUIzRkVGMTQ3RTdCMjc4RTk3MUJDQUQxCis6MTAxNTUwMDA1MzU3RkZDOTQwNzk4QTZBMDlGNDI0RjRGNzdDQzg1Q0MwCis6MTAxNTYwMDAzRTk1RTg0Mzc5NTBEQ0QyQzJGOUM2OUY1ODUyNkM4MzRECis6MTAxNTcwMDBCNkEwNzExNThGOEZEQjk1ODhCQzk4NjZDRjI2OEFFNzU5Cis6MTAxNTgwMDBDN0JFQTc0NEQ4QTM4OTIyRkUxREFGQ0I0RjRFNkM5QzhCCis6MTAxNTkwMDA0RUU3RjgyNkVBRTJFMjVGQTQ4OEJDNjUxQTRCMEJDRjVGCis6MTAxNUEwMDAyM0FDMTVGMUM2RTVCNjgxNzFFODlGMkExMEU3Q0E4MDIxCis6MTAxNUIwMDA2RjkzMkFCMzcxRjEyMUJERDBCMDhFNDU5QzUzRDRGOEZFCis6MTAxNUMwMDA3MEU0NjlGQjlEMzhERkM4RDNFQzBFRjIwN0I0NzFCQjQxCis6MTAxNUQwMDBGMzEzMUMyRjk3REZFMzc4MTlENTMxRUNFOTQ5RDAzN0E1Cis6MTAxNUUwMDAxRTMxMzJCRjFBNUFFNzA0MEUyQTgzMzA4N0UyQTRDQjk5Cis6MTAxNUYwMDAxNzZDNjQ1RkM2MUM5RDQzRjVERTY2QTc4MUE5NjFFQjhECis6MTAxNjAwMDA4RjUyQTM5OTFBQTYyRkFEQzNFMjIzRkFCMkEwNEY1RDYxCis6MTAxNjEwMDA1NEE0MUY5MDJGRTY4OTcxQTU0NThDQjczRkJFRUMwOEY2Cis6MTAxNjIwMDBGQTA1RjlCNkU1RTQxN0M0OEQxQjE4MzExRTZCNTMyMjc5Cis6MTAxNjMwMDBGQzgzM0NFNjcxNjNEQ0U4MDJGQUUyN0VEOTk4RDM0QTg3Cis6MTAxNjQwMDA4NDFGMzAyRUIwOTFDRUExOEVGQjMwRjJGQTg0NzM5MUJDCis6MTAxNjUwMDBGRDAzN0REMUE1MkZGQ0IxRENBN0QxMkZGQ0ExRjg3MzMwCis6MTAxNjYwMDBCODIzRjE5NzUwMUU4OUJGMjQ0RjI0RkU1MjE2NDRFMjNFCis6MTAxNjcwMDAyN0Q1MUI4OThGRjRFNTIzMjJFRUY3NUI5MzE3RDExRjQzCis6MTAxNjgwMDBGMEMwODQ4OEU3MzNDMTgwODVGN0IzMUU5RDE2RjFGQzU2Cis6MTAxNjkwMDBFMDhEQjMyM0ZBNDMzN0RGMTZGMUZDNzBGRjkyODhGQjJECis6MTAxNkEwMDBEOURCNTZGRTIwN0E4RkFDNUYxQkYxQkM5RURFMzczNDRGCis6MTAxNkIwMDBGRTM0NjI3QzhEREUzRUY4RkJERkE0Mzc3MzBBRkY1MEY4Cis6MTAxNkMwMDBEMDNCNTFEODU5ODc5QkQ3QUQ3NTE5NkQ4RkUyNzk3Qzg2Cis6MTAxNkQwMDAzQzM2ODJGQUNFODFFN0U5NjNEMUZFQUI1NDk3RTc5QkIzCis6MTAxNkUwMDBDNjY4NUZGQjk3QjI0NzQyQkQ5NDBFQTgzNTY0NTFCREYyCis6MTAxNkYwMDAzQ0Q1RjVGRERDNjA4OEQ4NjdCNzNCQjkzRjY0Nzc3MkFECis6MTAxNzAwMDAzREZFNkIxMzNGMkY5NTBFRkUyNkQ5MjkwMzBCQzVEOTNECis6MTAxNzEwMDAxNkFDNzc2NDgyOTlBQzhGNjM5QzVERTdFODE4QTYzQUIzCis6MTAxNzIwMDAzMDZGMDdGREM5MjFCREFBRTlEMURCQ0M2QTZEMDdFODlFCis6MTAxNzMwMDA5NzUxMzJENzkzQTAzRkZCMzk2MTlFRjdBNTA3OEREQzA3Cis6MTAxNzQwMDBGRkYwMTlEMUZGNDhCNzMwNUY2QzFFRDkxOUNBNDMzQjZGCis6MTAxNzUwMDA1OEEyODRFNzAwRTI0MjdBNUNGRDBFODg3NTcwNjUzNjE3Cis6MTAxNzYwMDA5REMzN0ExMzQxNDBCRjU5NzVEMTdFRDNBRDlBOUU1QTFECis6MTAxNzcwMDAzRTlDRjRENDY1NUJBNEZGNzY3OTY5MTY1RDNGN0JCQjI0Cis6MTAxNzgwMDA5OUVBMDdDRThBM0E0NzBEMEZGQUYzRDZEQTM5NkNFREFCCis6MTAxNzkwMDBGRUYyMkQ5QjYyRDBFRjNDMkJDRUZGNkFENzI3MEJGQ0NECis6MTAxN0EwMDA0RDc2Q0FDMkZFNTlENjYwM0U2QzExMThGMTM4QzA3QjI2Cis6MTAxN0IwMDBFNTkxOEVEOERCMThGOTlCOTM3MERENTU1QkFFRENGRUFFCis6MTAxN0MwMDAyQUY0QUIwREMxNjQ2RTM3N0NGNERFRkM3N0Y5QjlFRTE4Cis6MTAxN0QwMDBGOTdGOEJGQ0FFNDA4NTkzQzdGOTE1NjJGQzVCQTBCMTI1Cis6MTAxN0UwMDAwMzlFNkUwMTNBMzhCMDdENjM1MjE5RjIyNzVDQTdGMzZECis6MTAxN0YwMDA3MTMzOEYzMDIzQ0FGMzJDNkYyNkQ1NEQ5QzYyQUUzM0U0Cis6MTAxODAwMDA3QjAxQzRGOTRFOTVFMDlDQ0IzQzQ2Q0M1QkJENzM3QjIxCis6MTAxODEwMDA2NTBDM0VENzNEOUUzNjBFMzAwQ0ZBMjVFRjNBN0NDNjVECis6MTAxODIwMDA2NENDMUI0Q0U2NzUxMzMwOUYwNUFGN0IxNkE1M0Y4QzJGCis6MTAxODMwMDA3NjQ5OUJFRjFERTZCRDc0MDZFODNCOUJCOTY4NUM2RDdECis6MTAxODQwMDA3Qzg2RTlGOTMwM0RCNTdCRjlBQThGMTI2MEJFQjU0N0I5Cis6MTAxODUwMDAwRDk0OEY1OERCNkNBNjc4QUQ2QkU1N0ZFRDc4MEFFRUMyCis6MTAxODYwMDBERjkxREVEMTBGRURGNkZCMkJGRjM2MDRGOUUxRDZDRDhCCis6MTAxODcwMDAzMjUzODFERUFBREQ3QkE3MzM2QzVGRTVFQ0QyMkIzMURFCis6MTAxODgwMDA3ODFGRUNFRUQ2QTdEMDU4QkU2Q0E2M0FFMkY3NTdCRTRBCis6MTAxODkwMDAzQzI0REM4RkFENzQxNjJFQzdGN0Q4QjhFQjNCRUY1ODVECis6MTAxOEEwMDBGQ0QyRjAxNEFBRjcxMkZDQjQ0MkYwRDNEQTE3ODc5MkY0Cis6MTAxOEIwMDBCRkI1MzZBNjlCOUY3ODdGMkJBRjFCRDFENjcxNDZGMDY0Cis6MTAxOEMwMDBFM0NBOTdCRTg5RjhDRUM0NkVFMDIzRDVDQ0Y3QzVENDYxCis6MTAxOEQwMDBBMTYwRUZEQjJFRTdEMjc3MUY4Q0RFN0Y3NUMyQkMyREI3Cis6MTAxOEUwMDA1NzNGODlDNUZFOUUzN0ZGNEFGMEIzQjlENzA3MkZDQUM1Cis6MTAxOEYwMDBBMjZGNEM2ODdGNUEzQkVGQjlBMDI5MjExRkU5MEU3MkY1Cis6MTAxOTAwMDBCNjAxQzdCRkVENzcyRjVFRkEwMEYxRDNGQ0YyRDY5Rjg4Cis6MTAxOTEwMDBFMTMzRDc3OUZFNzM5Nzk2NzcxNEY2QzYyNUYwMDFGNjcyCis6MTAxOTIwMDA4NkUyOEIyRTE2Q0RDRjkzMDhGRjQ2QzExREY5MkNGQTA3Cis6MTAxOTMwMDA5RTg3NEE3Q0VENjZDNzcxMUZBN0I2RDU0MDc1MjZCMTU0Cis6MTAxOTQwMDBCODA5MTQ5NkFGOEI5NTBEOUE1MTcyNUI5Q0EwQUY4NTI4Cis6MTAxOTUwMDA5RUY5N0ZDRURCMkFFQUE4M0UyMEQyMUYyQTM4QjQzMjc1Cis6MTAxOTYwMDBDMjBGRjJDMDVGQUY3RUQwMzNERTVBQ0MyRkU5RkRBMUFCCis6MTAxOTcwMDBGMTAxQzM2MjUzRENGN0Y4NDU4N0E2RjVFQTE3NDE0MDQ5Cis6MTAxOTgwMDBFRDk2QzY4OEFEMjFGODM1RThGNEYzN0UyMTU3RjUzODk5Cis6MTAxOTkwMDAxNkU2RkYwM0QxRkNGQzMzOTgwRUY0N0I3RjlBQ0FGNTYwCis6MTAxOUEwMDBCNzJEODNGMUYzNjk1MkU3MzAwQkU4Q0IxNkU3QTJDN0Y2Cis6MTAxOUIwMDAxRjg1NkI5NjQxN0NEREQ4QUZBNTMzMzVGOUM0N0ZERDNCCis6MTAxOUMwMDA3RUQ3QTExMUE0QjdEOEI3MzAxQkUyNDNFNDNERjQ3NDJECis6MTAxOUQwMDAyQkMwRjNFQ0Y5NjE3MjI3REUwRjFDRkU2QjJDRTY3RDQ5Cis6MTAxOUUwMDA3N0M0QUI2RjIxM0Q4MjQ3NjVEQUZGODk1MjNBNEM4RTRFCis6MTAxOUYwMDA1RUUyQkI1NzUxMEYwMjlGQ0FBOURDMUU1ODFBNzk3RUJFCis6MTAxQTAwMDBEMUEyQkExOUM2MEY1MTc2RkJBOEYwNzM3RjhENEUxRTc2Cis6MTAxQTEwMDA0RjU2MUU3RUJGQkYwOUU4NzFDOUQwMTY5QjAzRTNBRkM2Cis6MTAxQTIwMDBERUJCM0IxNkRERkYwQzkzRjcwM0U0QzM1NTY3REYxRUY3Cis6MTAxQTMwMDA2M0E3RkNDRDk2RkUxODBGRDYwN0Y4NzczMDQ2MkFDQzYwCis6MTAxQTQwMDBBN0U0RjU4NEEzN0EzMzJDMjYwMUNGRTkyNzUwM0JCMkQzCis6MTAxQTUwMDAyOTdGMTlGMjU5NzU4MEFGMTNDN0M2NDJCRUUxOEQxMkI2Cis6MTAxQTYwMDBGNTNCMUI2QkUzNzFCQ0VBREYzN0E3QTEzQ0JEOUNDNDBGCis6MTAxQTcwMDBFM0NEOTdBRTY2RjNGNzE1QTZFMEYzNDFBNzQzMTBEMzg1Cis6MTAxQTgwMDA2RkMwRjhFNDY1MTFENzc0NUU5NUU5Mzk2REZFOTE4REVDCis6MTAxQTkwMDA4NUIyMURGODIxMjdCMEYxMDBDNTUxNEQ2NjE1RTkxQTMwCis6MTAxQUEwMDBGNTFDRTM3ODY4OEEyMkI5QUY2RTk5Q0FEMEVFNzczOTBGCis6MTAxQUIwMDA5ODRCODJGQjNCQTI4MzdGQTRGMzZFQ0Q2NjE1RjNBREZBCis6MTAxQUMwMDA1MUY2OEQyQzFFQzZERjIxRjY1OTg3MDM0N0UxNzkyOThGCis6MTAxQUQwMDBFREJBMzY1RjU0RDNEMzE4NzMyMDNGNTBERTM3NEFEOTVFCis6MTAxQUUwMDBDODI2REJDMkYxMUM0Mzc4NzZBNDcyM0VEQTExMUQzMEExCis6MTAxQUYwMDA2MDlFMjUzODk4QjE2NzA5QUUxMDlDOENFNkQ1RTAxQzM1Cis6MTAxQjAwMDBFRUM3RjM4NDNCNENDMUYzNzg2RTA2RTBCMjIzRkQ4NzQ5Cis6MTAxQjEwMDAzMzBFMjc2QjFBQUE2MjlFMjBDQUVFQTY3NTQ0RDk1NUM5Cis6MTAxQjIwMDA5NzRGRUEwOTU3NzUyRUYzQTM1REZGRjk0M0FDNUI2RTNGCis6MTAxQjMwMDA1MThFQUJBMzQzN0QwQkM4QzA4RTgxNENDOEY5Q0YxRjFCCis6MTAxQjQwMDAyRkM5MDhFRjgzNjIxOTE3N0E3RkM4QUYzNjNFNUUzNzE4Cis6MTAxQjUwMDA4OUUyMDk5RjhDRjEyRkI0MzFGMUI4NEU5NUQ2QTc2MDc4Cis6MTAxQjYwMDA4QTI5OEZFMzAxRjdEQkFEMTY3RUJGRkI3OUUwNkYxQjlGCis6MTAxQjcwMDBGNjZERkMzOTU3OUNERDNBNEQyMjM5RTFGNUI4NDIxRjJDCis6MTAxQjgwMDBEQzI3MDVDRURGMDhBNEZEMkE3MDIwNTcwNTU4NTZCRjc0Cis6MTAxQjkwMDBCMTlGRjg3NDk1QTFFOUE5OTE3MEZGRUUyOEFGMkIxNUJDCis6MTAxQkEwMDBFNjdCRUQ0MzAzOUQ2QkZERjM4QjUxRkUwQUMwQzdCMDhFCis6MTAxQkIwMDA3RDVCOTJEREJEQzg4NzdFRkM0N0RFN0JFOEM5NzRBNEVGCis6MTAxQkMwMDBGRjNFNDlDNTNDNkM5NzMxNDhERjM3QTk2QUZBQ0M0NERGCis6MTAxQkQwMDBGNTBEOEQxRjUzREREMzlCQTlERTQ5MzhDRkI4QzYxQTRBCis6MTAxQkUwMDBEQThGMUVDRjM2RDI3RTc0QjYzODBGNUVFRkU0RkFFMzlBCis6MTAxQkYwMDBGMkU5MjFDRkQ2ODRFMTdGNDkyQTk3MkYxNkY0MEU0MENGCis6MTAxQzAwMDBCOTY5MTJGMkQ5ODI3RTBBQjQ3Qjg1QkZCNEI3RjVENjIyCis6MTAxQzEwMDAyQzM1MkM3RjU4QzMwRUE0MjNCRTFGNjI4N0E4RDVBRUQ3Cis6MTAxQzIwMDA3N0Y5RjlCOUNBRUM3NzJDNzdCOEMzRjg2RjkxOTBGN0M4Cis6MTAxQzMwMDA0NUE5MjI0Rjk2RUE5RDhERjBBRTZBRkRDNDE0QUJFMjMxCis6MTAxQzQwMDAzOTk5RkFGRTY4NTdFQUMxOUZCMkY3ODI5NzZFQjlENTAzCis6MTAxQzUwMDBDOTUxQjUxMjM0RTFGM0Q1MTdGOEY5NTdBMDczMUQ5RTk5Cis6MTAxQzYwMDAzNzc4Rjk5REM2MTE4QkUxRkE1RUMwMzVENjk1RkFDRTZDCis6MTAxQzcwMDA5QUE5QkU3MkFGRDE5MzhFQ0ZENzlDRjkzQTE3RjU1Njc5Cis6MTAxQzgwMDAwOTAyMDFGMDdDRERCQzZBMDBFMjBERjhCRTI4MUFFNTBECis6MTAxQzkwMDA2QjE3MjMzREE2Qzk2NzBFQ0EyN0JDOUY4MzdDNUY4MDU0Cis6MTAxQ0EwMDBGREUxQTQ4Nzc3OThEQUY5RjlEM0JERkNGQzI5RjAzRDcyCis6MTAxQ0IwMDBDOTAxRjBCRDFERkQ4NjFDM0JDODAxQkQzRjk0RTQ3QkZFCis6MTAxQ0MwMDA0N0JCODFDRUM5RkE0MDhGMEZBNjdFRDExQ0VDRUY2OENFCis6MTAxQ0QwMDAyRkIxOTM3QzYzNUUzRjBGRTUzNDcwODBDNkE5ODdEODJGCis6MTAxQ0UwMDAwNDQ5MjczMTRGQjgzRkQ5RTg4QzI1QkE2OUZBRjFCMEQ5Cis6MTAxQ0YwMDA5MzA5M0JBMUM2RTE3OTAzQUIyQzQ3Qzg0NTk4M0RFNDY1Cis6MTAxRDAwMDA3RDYxMkY0RkZDMkFGMEY4MkZEMTc2Qjg4NTVEMTBGRTRCCis6MTAxRDEwMDAxNEYzRTY5MzlFQkY1N0Q4QUFCNUFGNEY5OEI5MURENjE2Cis6MTAxRDIwMDBCOUY2ODREQzVEM0Y4RUZFNkI0MEYwQzkwMUUxQ0ZBMkM1Cis6MTAxRDMwMDA5RDUwMTM3ODNEMEU1RTFGQkQ5OUQ3RDU4RTcxQUYyOThBCis6MTAxRDQwMDBDNkIzQ0ZFM0NBMzcxRUM0NzY4MkE3QkUxOENGM0U0RkI0Cis6MTAxRDUwMDA1QUQwN0U5MDlGODFFNkU3RDkxQjBFREM5NDhERkJERTg2Cis6MTAxRDYwMDA1RDY3Q0QwQ0Y3NUQxQUZFMUFGQ0UzNEI4MDg3RkI1QkM5Cis6MTAxRDcwMDAwMEZGQkREODI1NTgwRUYxMUY1OEVDNzRFNkVDNzlCRjcyCis6MTAxRDgwMDA0QkQyRjRDN0E5MEFFNEM3Q0UwNjM5RDQwNzQwQUE4MENCCis6MTAxRDkwMDBDMUIxRkZEQkQ0OTM4RkZCQTA5Rjk1RTY3RTNFMTVGRDdFCis6MTAxREEwMDBFRDc0MkZCNTVEMjdGRjlBOENCNjYwRUY2OUVFNDczNTZECis6MTAxREIwMDA5OERDRDlDODNGMEQwMzIzQkYxRkEwQjU0RkE2MUE4OUQxCis6MTAxREMwMDAwRTA1N0Q3Q0JGRUI0ODJBQ0Y2RjBFRjFCMUM3OTA4RjE3Cis6MTAxREQwMDBBQTFBNjRCQjFGRTg3RUE5NDE3NjlCQzAxRjNBRUZGNkEyCis6MTAxREUwMDAyNkUzRDk5QzBCQ0M3N0NCNDRCNEYzMjI4RUQ0QkVGNzM4Cis6MTAxREYwMDA3MjE3RkEyOTYwQTdFRUZFNjVFRkZCMEZBQjk5RjY1QjUxCis6MTAxRTAwMDA2MzQwQkU1QUQ2MjRCMUZGMDAxQzJDN0YyNkYyRjlENUMwCis6MTAxRTEwMDBEQUY3NkExQUI3MUNDNkVGODhBRDdDNEU3NzFGRkQxNTNFCis6MTAxRTIwMDBGQTBFNDZBNDFGNzMyNDU1RjgyNzU5MkMwQkZEMTNFMDE2Cis6MTAxRTMwMDAyM0QyMEY0Njg1MUQzMTAzREZBRTQ4RjdFRTQzN0JGQzBFCis6MTAxRTQwMDBCMkY4QkUwMkU4NTE5MkM3N0Q0RTYxNTc0NEZENDE3MDIxCis6MTAxRTUwMDAwN0FGMkIxRUJFQ0QyRjFCRTBGRDA5OEE1RjQ2N0JDNTU5Cis6MTAxRTYwMDBBMEM1N0Q4NzcxNkU2RjE5N0Q4N0M5RTczRThERkIzRUVBCis6MTAxRTcwMDBDQjg1M0U1Q0FFRjk2OTdFQkUzRjAyNjYzN0MyNEZBQjkyCis6MTAxRTgwMDAxNkFCMUZDRkZDQjVCMUI4RkU2RDEyQzVDQkFCQjY0NUQ2Cis6MTAxRTkwMDBFRUE3NTQ4QkY1QUZERTdDRjIzMDlBQkNDQTdBREQ3REJBCis6MTAxRUEwMDBCMUZFNkFEREZBQjU3REYzQ0Y1MzIzRUJCRkFFNzczRkNBCis6MTAxRUIwMDBFNDJGNDZFRTM3QkMyREM2RDFFRTlCRDJCODdFQUM4MjY1Cis6MTAxRUMwMDA2NTIwREQ1NkZCNjVCRjlGRkI3OTM2RkM1RUQwOUQ2MkM5Cis6MTAxRUQwMDA1RDc3MEFGQUQzM0FFMUI5Q0E2RDkyM0Y4MDNDRkU3ODQ5Cis6MTAxRUUwMDA2NDlERTk1REY1OEJDQjkwQUU3QTNFNTkyOUQ2QkQ3Q0Q5Cis6MTAxRUYwMDBCQjkxRkM1NUZDRkUwRkNBOUQ5RTNGNTY4QUY1QUZENEEwCis6MTAxRjAwMDBBREJGQ0EyQkU5RTBFMzdFNzQ0RkY4RUE2RjQxM0E1NzYwCis6MTAxRjEwMDA2RTM3QjJERUUwRDNFOEI1NTJFM0VCM0VFMEQ1RTBENDc1Cis6MTAxRjIwMDBFMEZFQTFGMEY2NEYxM0Y5QUQxMTZDMDREMUE5M0NFMTJDCis6MTAxRjMwMDBCQUU4QTRGNzczNzcxRDFFNDFERjVCQkI3QzY0MjBDNTQ0Cis6MTAxRjQwMDBGQjFBMUZFOERGMkYxMzdFRjJENENEREM2RkJDRDQ1ODEwCis6MTAxRjUwMDA2QzFEODlGMTRDOUJDMTI1QTkxNDlGQzU4RTA0QkNFNDVFCis6MTAxRjYwMDAzN0NCQUMwMkZBNUQ0RDU5OUJGMEZCODM3OTI3MEFFNjJCCis6MTAxRjcwMDA2MEZDOUY3RkMyNDBFN0VGRjYxQzI5QTA3REU3RkNBMzMxCis6MTAxRjgwMDA4MzEyQjIyOENGRURBMkVGRTNDMDM4NjQ1RkJCREFGMjcwCis6MTAxRjkwMDAzNkUxRjk4NEFFQjY5MjAyMUM1NzgyRTdEMDBGQzgxMzFGCis6MTAxRkEwMDA3NkEyQTYyRENGMUE3RUZFN0M0QzFBOEZFRkQ3M0IzRjMwCis6MTAxRkIwMDBGRDM5RkFFOTUzNzcxOUU5OUNDNTU0NjNGMDREQUNEQjYwCis6MTAxRkMwMDBEQTczNDRBMTdERjJENTI3OTYzQzE0ODVGNDdENTFBMkE1Cis6MTAxRkQwMDA3REYyQzNFRDZCMTMxNzIyOUYzNTE5RURCOEVGRERENUY4Cis6MTAxRkUwMDBGNEUzMDM3OERGQjc1REEyRUY1RTU0Mzc5NzY2RUY4MEM2Cis6MTAxRkYwMDA3RURFOTY3QzU3RjhGOUIzM0M4NzRBRjBCMTU0MkJDNTg2Cis6MTAyMDAwMDBDRjUzRkIxOUM5NkU1RTRDQjNGRTE2RkQ5Rjk1RUUyREE2Cis6MTAyMDEwMDAyNERGMTdGN0VGMzE1MUREREUwRTg5QTEyOTNCRUMzQ0JGCis6MTAyMDIwMDBGODBBRTJFM0UyQUIyNzRERTg4NDE3Mzc5QzM0NzU3QzZECis6MTAyMDMwMDA4RjNGNzBDOTJGQjMwMEM1Q0QxQjREMThDNzU0NkVEMTRCCis6MTAyMDQwMDBGQTFEMjZBNDkzNDdGODQ3NTVDRjdENENGRDk1RThDRjYwCis6MTAyMDUwMDBDMzdDMkI5RjkxQTk3RUY3NjBGMzZCMjZFNEU3QUFFRDgyCis6MTAyMDYwMDAxMjRCQzkwQ0JCQkY1OThBRjg1RUMzMTJDNkY5NjA4OTBFCis6MTAyMDcwMDBEMDNGQUI5ODdGN0QxQTNDQjc2QTIzQUY1QjYwOEY0NjM5Cis6MTAyMDgwMDBENjAxNkJGQ0JENDJGMEY3QUFFREIzRThGQjUzM0RCRUIxCis6MTAyMDkwMDA1Qjg4NzFFMzBERjgxQ0U3RUY2NTlCMjNFRkFGMTA3Q0M1Cis6MTAyMEEwMDBCRDQyQzdENzNGNDkxM0ZBNjczODFCOEU3Q0ZENzVBMTI3Cis6MTAyMEIwMDAxQTk3MDNEN0JGM0VCOTcyNDA2RkU3RUNEQjg0QkRENkY5Cis6MTAyMEMwMDBFQ0U1RTU4MDgxRUM4REZFQjlDRUM2MkIwNDY3NzVEQkFGCis6MTAyMEQwMDA2NTEzRkFBNzY1NEQ1RjEwRkUyQjlBNUFBOTdFRTQ2NjM4Cis6MTAyMEUwMDBFNjVEOERGOEJBQjlDOTZBNDdCOUFFRThFMDdBNjg1QUQwCis6MTAyMEYwMDA5M0Q5RUY5N0YwN0UzREQ1Mzk3N0I1RjBCQTQ5REY3RUI5Cis6MTAyMTAwMDA4OUZDMUM0RDhGNjlERjc3NUMyNkYwQjgwQzE0Nzg3QTU3Cis6MTAyMTEwMDAxRUZBQkIzQzZFQUUxMjcxRjI4QTYxNUIwRUUzM0U3QjJGCis6MTAyMTIwMDA5NUI4QkZGQUU4QzE1OEY0MEZBN0IxMkY2RTQ3RkFDMEFGCis6MTAyMTMwMDA3QzBDRTc2M0NGNDRFMjdEQkFEMDhCRDNCNzczQkRBOEU0Cis6MTAyMTQwMDBCNzZCNURBOUQ5MzMyOThGMDk3MTJBQzJCNTdBN0IyNDZGCis6MTAyMTUwMDBCRUFCNzRGMUY5NjM2OTNDM0ZGNjgyMEVERjE1NDE2NjUwCis6MTAyMTYwMDBDRDQxMzg1NEQ5RTVBN0E3REIxNTlDRjc0ODJFRDg1QjlECis6MTAyMTcwMDBCNDkzNkFENkY3N0U4N0YxNERFMTY3NkJGRDk5RTIxQzU3Cis6MTAyMTgwMDA3OEJEN0RBMzJEM0M2RThFNEFFN0ZFQzJDQUYxQjIwRjI4Cis6MTAyMTkwMDBFOUQ1MUQ2RjBDM0E5OEFCMUE0MkYxMDZDNDE5Q0Q2OTA2Cis6MTAyMUEwMDA0OTNDRUVDMDgyOTIzNzMyNjQ5Njk4MTg4QTM3MUU3MTg1Cis6MTAyMUIwMDA2RUFBQzg4MzdFRjU3NjJFRjc5REUzNjAzQzNDN0ZBRDJBCis6MTAyMUMwMDAzMEYyNDdBQkI3OUJFOTlDNjIzNUQwOUZFMjhBMjY3RTBFCis6MTAyMUQwMDA5RUMyRDMyNDk1MjJEREMxNUYzRjlBODZGQkIxOTg1MkZGCis6MTAyMUUwMDA4NTc1Q0Y2QUU0N0MzRkFCRTQwQkUyOTdBMzgzRjg3QTcyCis6MTAyMUYwMDAyRjJCNkE0QTZGRkVCQkU2QjdFM0Y5MzAzNUNDN0ZBRkQxCis6MTAyMjAwMDAwMjM5QzVFN0FCOUE3ODNENTJDMzgxNkZGQTY3QTI5RTQ3Cis6MTAyMjEwMDA2QkZFQUZGRThCQTFGRDVBRDg0NUNEMkYwQzgyNUYzOEU3Cis6MTAyMjIwMDA5MEZCNDVGNEJEQzlCQjg1N0MyREIzRjM3REJBQkI4NTVFCis6MTAyMjMwMDBGRDYxNTIxREYxNzk5NUIxRkU1MDNDRkE1OTNCNzhCREQ0Cis6MTAyMjQwMDAwMERCODcxRjg1MDNGREY4RjY0Qjc1RjFCMEVFQ0U5N0U2Cis6MTAyMjUwMDAyNEFBODdDM0Y3RjE3Qjk0OUQ0QkVBM0Y0MUJGRkJFQjc4Cis6MTAyMjYwMDAxRDE2RjIzN0VGMDZCRjY1NEE1RTRGQjlENEU0NUJGQjNCCis6MTAyMjcwMDA2RTU2MEQ3Qjg4RkNDRjg3NTgxREI1OTU4MjlGM0IxQjAyCis6MTAyMjgwMDA2QkU5RkJBMDlBQkY0MkVGMEZFQ0U5OEY1NDBBQkVBRjk3Cis6MTAyMjkwMDBENEYxNUY1NDdBMjRERkQ1QkMxRDREN0U2M0Q3NTFEOTZDCis6MTAyMkEwMDA4RUZCMzE4MEFGREZBNDg1RTM0NUY4MjEwRDA3QTI4OEJFCis6MTAyMkIwMDBBRTVEMjc2RDY0NDdGRTJDRjhFREEyQzgzRkQ3OEM5MzI2Cis6MTAyMkMwMDAwOTBGODZGMUJDQ0Q2RTc5NkQyMEQyMTFGMThFRjVGNzM0Cis6MTAyMkQwMDAyRkI3QkMzNjgyOUZGQkY2MTNGRTU3NkQ5MzIzQkUwRkJDCis6MTAyMkUwMDA1QjU5MUZGOUZERDc5QUI3NkZBM0VGMDg1NUVGRUY4NjNCCis6MTAyMkYwMDA2Qjg4MjkzMTA0NTc1RjcyMjA0OTNDOEUzNDQ4OTE3MUI0Cis6MTAyMzAwMDA2NEY1M0VEOTEzNUU3NzA2RUJCOTAzRjU1MUJBOTAwNzMxCis6MTAyMzEwMDBBNjA0OTMzMUZGMzUwMDlEMDY4MEFGQTY4OUQzRDVEMEEyCis6MTAyMzIwMDBDQzVCOThGRjE2OUUyNzMxRDJGQzNERUUxN0Y5NTZFM0ExCis6MTAyMzMwMDBGREFGMzNBRDdDRkZGQUFBQUYwMkZCRjcwRjk0QTlBRTU1Cis6MTAyMzQwMDBGM0ZFQjc1NzBFMEREN0EzMENFMTA0QkE1NjFCODNDOTkxCis6MTAyMzUwMDAxNDZGOUUzNDEwN0NENTI3MkYyNzBGQjJBMTVFREE1MjVFCis6MTAyMzYwMDA4MkRGMEY5RDJFRjRERkUxODFENkU1QzhDRjNFOUMzNzlBCis6MTAyMzcwMDAyNTM0Q0VDQjY5QkM3RThGRTE3QTlERTg2REZDOTI4RkNGCis6MTAyMzgwMDAyQkQ2RkIxMDlCMkRFMjZBQ0U0RjM5Njk3Q0JEMTA4Rjk2Cis6MTAyMzkwMDA4QzRCRUYyNTFFQjk1RUJGMTNFQ0MzQTk4NTEyRDYzMzUzCis6MTAyM0EwMDAyOTNFOEM4N0Y3QkNDN0Y1NDI0REYzQjI4RjkwREZBQjY3Cis6MTAyM0IwMDBERjM3NTM5REQ3RkQyRENCODY1MkJEQUZENzdCMDNGQUI4Cis6MTAyM0MwMDAxQjVGQjdBQ0I4ODFGMjgzRDI0MzA0OTcwRkUxNzNBMkNECis6MTAyM0QwMDA1RjczMjYxOUVCNTIyQjlCQ0YyNDkzRERERDNCN0E5MzYxCis6MTAyM0UwMDAyRjA2RkQ5N0JDRTk3ODFERkMwOUUyM0ZGMDZCODhGRkUyCis6MTAyM0YwMDBGNkI0MTU2ODdFOEMxNUM3QUQzQ0FBNzgxMDNGOTU0NzlBCis6MTAyNDAwMDAwQjhFNTdBMDdGNzFBMkE4MDBENUI5NzRBMjgwRkM5ODRBCis6MTAyNDEwMDA3Q0Y0NjM2QzIxQkZBNjVCNEZBNjczM0ZBNkFCMzU4QUU1Cis6MTAyNDIwMDBGMjBCMTIxQkM4Rjk4NzBEOEFFMDlGRDUwREFGOTNCRDQzCis6MTAyNDMwMDA1RkREMjg0N0Q0MkY2QUVGREQ5OUFFRDAzOENCMzRGRTZDCis6MTAyNDQwMDBBOTk3RENDNDFGQkI3OEJCQkE3MTBGQUQ2Rjk1QjE5RTY1Cis6MTAyNDUwMDBFODVEQjNEREM4RUZFRkUwQURGNjdENTgxRjhCRjcyMUU3Cis6MTAyNDYwMDAzRThFRTMyNUEwQzMzNDkzM0YwM0YzRDNDNzMyQjk5RjE1Cis6MTAyNDcwMDBBRkE3QzdFN0U5M0NGRjcxRUNBQzc3MDBGMkNCQjE0MjA0Cis6MTAyNDgwMDBFRjUwN0IyRjc2QzJDNzhBNzg1QzJCMDk3QzM3RjA3M0JDCis6MTAyNDkwMDA1M0ZBRTczRTRCOTdDNDc3NDIyMkNGQjc2QUVEQTk3NDRGCis6MTAyNEEwMDBBRTNGQTc5OTdBRkYyRUUwNkZEMkI1NzMwOUVDMzE0M0E2Cis6MTAyNEIwMDAwMTQ2QzU0NkZCMDZFMUQ3QTc4NjdERDc2MUNFQ0Q0NjRFCis6MTAyNEMwMDBGMjE3NEUzMUZCRUI1OEVGMzg0M0QzQjNFM0I4N0RENTY5Cis6MTAyNEQwMDBFN0NCRTc4OUY3M0M5QjU1QkU1RkE0M0IzRjMzNEYzQkJGCis6MTAyNEUwMDBERkE0M0JFRjM2NEZGODNCRjM3NEZFQ0VEM0U5QzI4RjQ3Cis6MTAyNEYwMDAxRkMyODZBMDFFQUMxN0U3RUZENjBFOEZGMjg3RTdCMzk4Cis6MTAyNTAwMDBGNEVENjFCMTJGODJFNzg3QjBBRDE5RkUyRUU1N0Q4RTI3Cis6MTAyNTEwMDBCNTlFN0Q4NUVBRERDRTQ2QjE4MTNDQUY0N0Y5RUZDQTc1Cis6MTAyNTIwMDAzRUYyREYzNURENzIzOTM3ODJDRjM0QkE1QzEyREY4Mzk5Cis6MTAyNTMwMDBEMUQzNjVCN0E2QUZDNEJFNURCNEQ4QjdGMzFCQkRCQkRFCis6MTAyNTQwMDA1MTlFMkIyRDE3NERCQ0VFMzA2ODQyN0Q1NjMzOUNGQkJGCis6MTAyNTUwMDA0RDk3NEEyNURBNkYwNzM4RkI5QkMzRjRGQkE1NTQxRTQxCis6MTAyNTYwMDA3RkREN0Y4QjQ0NzlENzU2N0MxRUUzQUM3QTg5RUFCQzQ5Cis6MTAyNTcwMDAyQjAzRUQyNkU0QTcyMTBEOEIxRjI2QjlGNUIxRDMyQzMzCis6MTAyNTgwMDBFQ0JCMUEzMzJEREM0RTc2RDM0RjVCNzdCNzFEOEJGNzQwCis6MTAyNTkwMDA3MTdEOUM0ODJEM0U4Rjc2NzE4NkIwODNGQTczNTE0M0NFCis6MTAyNUEwMDA1OTdCNTkzQUMwMzNERjJEQjlCMDFFQTAyRjNBQ0Y1RTA4Cis6MTAyNUIwMDAzMEVBNzU0NEMzRjVEMkJCMzNEREZCNEUzQUNBNzlGQjMyCis6MTAyNUMwMDBFNTVCMzA4RjdBNkNGODY3RkREMThFNTZGNUMxQzcxRjc5Cis6MTAyNUQwMDAwQjNDRUJCRjJCRTMxQUFBRDZFMkY3NTU2QTlEREUwRTQxCis6MTAyNUUwMDBEMjlGODY2RjYzNDczMDFDQTdFMzM3NkIyNUE0MTMyMzY0Cis6MTAyNUYwMDBGRUVGNEI3RTNFMTNFMzdFOTZDRUJGNzcwRkI4QTc3REVFCis6MTAyNjAwMDA5NzU1RTlCQzRFRUI5OEQxOUY0MTc5OEE5Q0VCREJGNzVCCis6MTAyNjEwMDBBQUQ5Rjc0NjJFRUFCM0NFRDZBM0I5QTYzMEJBNUU1Q0U1Cis6MTAyNjIwMDAwQjdBMDBFRDRBRjNDMTY0RDUxNkNFNzcwNkUyMzc0OTNFCis6MTAyNjMwMDBEMkY4NEYxMUY2MzI5MjBGMkYyMjFGRTY2MDdCMjY3NkRBCis6MTAyNjQwMDAxMEVBRTM1REE3NjIwN0UzNzg3Qjc5REJDREFGNERGQzUxCis6MTAyNjUwMDA3QkY2MTAxRjBEOTkxNzEzMEVERkMzMDRERkE1N0EzRTFBCis6MTAyNjYwMDAwRTYzMUQ0M0U2OEMwQ0JGNUZEQjE3MUY1QjMzODg4RjQ3Cis6MTAyNjcwMDAzQjIyRjg1ODVCNkYzRDdFQ0YwN0UzODAxNjMzN0RDRjVBCis6MTAyNjgwMDAwN0YzRDc4RTMwMzkxOTlBQzFGNUNGNThGMUZEOUVGMTc1Cis6MTAyNjkwMDBDQzQ3REYzOTFDMkJCRUUzMzM1RTYxMDEyNTFFRjdDRDJECis6MTAyNkEwMDAwMjMyREZGN0U1RTcyREM2MDg3RTFFQUIwNDVBQjE4RTc1Cis6MTAyNkIwMDA2MkJDRDhFNzk5QzBEQUU5QjkyOTJDNDhBRDlCRDlFOUMxCis6MTAyNkMwMDAxQzQ1MTE3MzUxM0JDRTEyOTg4RUVFNTQ0RTdEM0RENTc0Cis6MTAyNkQwMDAyNTA2OTIxNUM3Nzk4QjM4QUZEMTBCREQ0MkVCNTdFODUxCis6MTAyNkUwMDBCQjNEQzQ5RjMyOUVEN0U5RkRCQjJGQjMzM0I4RENEM0NCCis6MTAyNkYwMDBDNzQ1OTBCRTk3MThFNUI5RjA3QjZEMzhDOTQ0ODU5NUZDCis6MTAyNzAwMDA2MzdERDM2NDg1NTlBMjAxREU1RDg3MEMyNENGMkQxRDI2Cis6MTAyNzEwMDBBQTFGRUI1MzVEMDlFMkJEQ0YxOUQ1RTE4RTc1NzM3OTIwCis6MTAyNzIwMDA0NTkzODNGNTE4REE3QUY1Nzg5ODAwRTM2MTlFNkRBQ0VECis6MTAyNzMwMDAwMjkxMjhFMTMxNDBGM0REQzhGODM5OTI0MkE2NTJGREZBCis6MTAyNzQwMDA3MzY5NDZBNkQwRjc0MThBQTM4QTIxOEU0MjdENkZCMDc1Cis6MTAyNzUwMDBGODA4MUZEMzMzNTRCQThGRkIyNUIxMzBDRTg0OEQxMkM1Cis6MTAyNzYwMDA3QjBGRjczRkIyRjg3QUI1RjEyNzAwMjNFMEY5QzJFOTExCis6MTAyNzcwMDAxOURDOUU2MTRBRjVCRDc4QkU4RjEyNEIwNUNEMjU3NkRBCis6MTAyNzgwMDBGRTlEQTM2NEZBQ0VEMUY1RTJCNTJCOTk3RkVGMzJGNjI4Cis6MTAyNzkwMDBDRTYwRTdDRjBBNDJGQjQ5MkVGQ0VFNTE2Q0U4M0I5QjMyCis6MTAyN0EwMDAyRUVEREY4MzA4NDRGRTdCMTA3NzY0MkNGOTExRjJBMzMxCis6MTAyN0IwMDA1NkFGQzdCQ0ZDREY3REQwRDdFQjg1RDVFN0IxMEI2MTQ5Cis6MTAyN0MwMDBFN0IwQjVCQTkyNkRGRUQ5MkE5RUYzNUI5MDY4QTE3MzBCCis6MTAyN0QwMDBCRjc5OTZGRUY5NjhDNzA2M0FCRDM0RkVGQkQyRjZDMTUyCis6MTAyN0UwMDAzNDk4RTIxRkVEODkwOUYxQkI5NUI5QzcyMUJFNDM3NTQ1Cis6MTAyN0YwMDA4M0ZDM0I1MERERTdBRTkyMTk5RDU3QjQ5QTc5N0RFNTk1Cis6MTAyODAwMDA2MzIwMUZGODFEMjY5MDJFMTVFQjY4RDg4M0M1NTQ4RkMyCis6MTAyODEwMDBCOURFNjE3MUUxNzkwOTMzQzI2RDBEQzE1RDZCMTFERjA0Cis6MTAyODIwMDAwNUI1RjA3RDcxN0QzRDY4QURDRDQwREYxREFENjVEMTU1Cis6MTAyODMwMDA3NDBFM0QyOURBQkIyRTAzRTBCQTJGQTY4OENFNzc2NzQ3Cis6MTAyODQwMDBFRjlDRTQ0NEJGMzE3Q0ZEOTNCNEY1MUI3QUQ2NDdDMkJDCis6MTAyODUwMDA3QTFGQzlFOEE1MUU1MTVCQTdGNkVGNzZEODA1RkVCNDJFCis6MTAyODYwMDA3NURCQjU3MzRBNkUyNUUyOUM5Mjg2OEZDN0EyRjlCQUQyCis6MTAyODcwMDA4REI4RjM5RjQ1RUZBQUE4MzdGNEVCRkRGRkRDMjlCQzI4Cis6MTAyODgwMDAxNkEwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyODkwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkIzRDM2NjYwRjg1MUU2Cis6MTAyOEEwMDA4RkMwQzE5QTBDMEM1REQyQTg2MkI0QzQxRDEyMEMwQzZFCis6MTAyOEIwMDA5NzgwRjgwQjEwNjcwMkVERjU5MjY0NjBGMDA2RTI2RDA4Cis6MTAyOEMwMDA0MEJDMUQ4OEM1QTUxODE4MDI4MDM4MTA4OEZCODBGQzA0Cis6MTAyOEQwMDA3RTIwNEUwN0UyMjRBODFCQjMwNTE5MTg3MjgxMzgxRjA5Cis6MTAyOEUwMDA4ODBCODE1ODQ4ODA4MTQxNTg4MDc4RkI4QjE1MTkxOEQ2Cis6MTAyOEYwMDA1RUFCMjJGODVBNkEwQzBDQzkxQUY0RjNGRjYwQzM4MTZDCis6MTAyOTAwMDBCNkY0QjVFRjE2RDBCRUU1NkUwOEJFMDQ5MEJEQzIwRDlDCis6MTAyOTEwMDA1NUNENEEzN0ZDNjZBQzQyOTM1RjhEQzY1RjgzNDc3RkQ3Cis6MTAyOTIwMDA4MTBEMkE3RkFCMjkyQTdGQUYzOTAzQzMwNzI0MzVEQjBBCis6MTAyOTMwMDA0Q0YxQkIwNTFEMkIwMEZEQTc4ODI3NEM5NzMwQTJGMjU4Cis6MTAyOTQwMDAyNzMyQTFGMkY5QTE3QzAwQkUxRTMxM0NBODAzMDAwMDkxCis6MTAyOTUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEM1Cis6MTAyOTYwMDAwMDBCRUQ3RDBENzg1NEQ1OTlGMEI5M0Y3MzY3MjY5OTJBCis6MTAyOTcwMDA5OURDMjQ0MzMyNjAxMjZFN0VEMEEwMDE4Nzk4NjBCMDRCCis6MTAyOTgwMDA1ODZFMjBFMTQ3QTMwRTA4MkNCNDQwMjYyODg4MTY2RDA3Cis6MTAyOTkwMDBDNDlGQzZERDUwMDYwOUJGMDkyMUUxNEY3MEQxMUQxMDRCCis6MTAyOUEwMDA1REVBNjNGQkM1NTY1Qjc1QkI3NjgyRDY0NkFCMzU2ODgwCis6MTAyOUIwMDBENzg3NzY3NzY1QTAxNUJGQkE3NjFCRDk2RDk3NkVCQkEyCis6MTAyOUMwMDBGNTdCREZGNzlDQ0JDQ0JEOTkwMEZFRUNCN0JCREZGMzBBCis6MTAyOUQwMDBDNUM3RTc3MEVFM0QzRkVGNzlDRkZCN0ZERTczQzcyNUJDCis6MTAyOUUwMDBGQjU5NzAxQTYzMUZFMzFGOTQxMzczMTk2M0I1QTlCMkRGCis6MTAyOUYwMDBDNUMzNjJEOTM5OENFNTc2NDg4Q0Q1MzBCNkIyNUQ4OUNECis6MTAyQTAwMDBDRjgyN0YxNjc2QjRCQzgyRjVFNTZENkVDMzVEQ0E1ODgxCis6MTAyQTEwMDBGRjAzNkU3RjBERDQ0RjZGNTdDMjZFRThEQUE4RjhBODk3Cis6MTAyQTIwMDBCRUFDQ0IxNTc2MUJGMDdDRUI0NzJGRTdFM0ZCOEQ1MjVBCis6MTAyQTMwMDA5ODQxOURCMUJCMTk5QkNDRDgxQTBGRkMxM0VBQ0IyQTQ1Cis6MTAyQTQwMDA5MjFERjhGRUREMkQ1MjM4ODZBRjk5RTk5QjA0RUY2Rjk5Cis6MTAyQTUwMDA2NUZDN0RGMzAzOEFDNjY0QThFRkJCQUQ4OTRENjRFQ0M5Cis6MTAyQTYwMDA5NjFFOThDNTQzMEREOUM3QkMzRDYzMDU4QzQ1RjgyMzE4Cis6MTAyQTcwMDBENkIyMDVERTU3QTZERTQ3NThENzQ3MEFGNDZCOEUzOTIzCis6MTAyQTgwMDA5RUVGOUJGNTNFMEJFMDdCMkRGNTFDRDY3MzBDRkYzMUMyCis6MTAyQTkwMDA4NUIxNEI5OTNGNzgzQTFCRkUxRDY2RTE4RjE1MjgxQkM3Cis6MTAyQUEwMDBGMjE5MUI5REMyOTdCMzY0MENBMDFGQzVEODVDQzY1QzBECis6MTAyQUIwMDBBQzFDQzZBOUJEQ0NDNUNBNjA3RDE2MUVEQjM4MUU5N0VFCis6MTAyQUMwMDAzNTQ5ODRDNzY1M0U0NkY1NzdFNzRBRjEwNzRCQTkxRkFDCis6MTAyQUQwMDA5QjVFMEQyNTNDMkZDODgzMzJDOENDNDIyODIzMUU5NjBFCis6MTAyQUUwMDBDODA2RjhFN0I2NURGNjFFQUU3RjAzNEUzNTlBREEyN0M0Cis6MTAyQUYwMDAwMkYwN0UwMThCQkExOEMwRjc2NzJDNDZFNTYyMTZBNzc0Cis6MTAyQjAwMDBGMkNCMkM0MTcwMkM2NTQzMjUyQUQ0RUY1MjEyOUIxODJFCis6MTAyQjEwMDBDQzEzMEU0NUE3RTNGRUZFQUVGRUQ4QkIxMkJDQkZCRjcyCis6MTAyQjIwMDA1QUFBOUQwMjI1RjNFNUQxQkEyRkI0M0U2QjdFOTU0NTk2Cis6MTAyQjMwMDBBRUMzNzExODkzNUQxMTNGNjNFM0FENzUxRTY2QjE4QTM0Cis6MTAyQjQwMDAyMDYzN0E4RjhGRDNDQjYxRDZDRkEwM0VCRTQxRDA0QkNFCis6MTAyQjUwMDBFM0ZCNzIwOEQ2RERGMzNDMEI2MzNEMDQ5QjM5MDVFQUM5Cis6MTAyQjYwMDBBMUFFQUNGODA2QThGNzNDMUVBQjQ3QkMxQzZCMDFDQzcxCis6MTAyQjcwMDA0M0ZGNjM4RDZFMjk1QTA1QTU0Qjc3NDVBMDBDQTk4Q0EwCis6MTAyQjgwMDAyOTgwQTdGQTg2RjU5MjAyRURFNjQ2RjkzOEUzNEQ0RDI1Cis6MTAyQjkwMDA2NjU3NDJGRDcwNEM1MkM1NzNFQ0FGRUIzMTQ5ODdGQTcyCis6MTAyQkEwMDA3OEE4M0YyOEUxN0JEREM1NjA5Qzg2ODY1QzU3QjIwQTI5Cis6MTAyQkIwMDBGMUREMzM0Njg3QjJFMkIwOTY5MDAxQkZGNUE2NEVDRjY1Cis6MTAyQkMwMDAxOTVCNDQ3NDM1NUVEMERBNUM5M0Y3OUI3QjM4Q0ZDRkNBCis6MTAyQkQwMDBFODNERkJEM0M3RDY3QkMwRUYyNTQ1N0NERjhFMUQyRTlECis6MTAyQkUwMDBDQjQxNzg1OUQ0REVCRjQ4NjUzMTRGNUUwQUNGM0JENzIxCis6MTAyQkYwMDBDMTBCNzcwQUJGQkIwRTk3NkQ0NUJDMURFQjUzQzM4MjVCCis6MTAyQzAwMDA5NDZERTNDM0I4QkQwREYwRkU0Qzk1MUM1NjBDRTRCM0I3Cis6MTAyQzEwMDAyMjBFN0Y4NUVFRDc3REE5NzE3NkFFODNGNjk3QTVFMDZCCis6MTAyQzIwMDA2ODU0QTZGNjEzM0U0QzQ2RkMzOEI3MDZEQTU3QTVEQUM4Cis6MTAyQzMwMDAzRjgxRUQwMThFM0QwODBGRjU1QjczRDQ4QkYzNDQxODkzCis6MTAyQzQwMDBDRDMzMTIzREJDQjA0RUE3N0U4MzYyMUREN0ZDRUYzMDYyCis6MTAyQzUwMDBFREQzREM4NjE2ODlDRjJCRTA2QkIwQzM2Nzk1MTY3QzZECis6MTAyQzYwMDAyMzhEN0Y0Q0MwNjU4RDZGQ0RGN0M0QkExMDk1OEQ0QTBBCis6MTAyQzcwMDBENTIzRjdFMkJBOEU2ODdDNURGMzhEQzc3NzIzRkU4RThECis6MTAyQzgwMDA3OEMyMzFBODNGNzlERERGOENCOTE3ODZCODYyRkFGM0Q0Cis6MTAyQzkwMDA5NzNGQzM3MEJFRTUwRkRGOEVFQjdBMkU4QkQ2RjVENDRGCis6MTAyQ0EwMDA4NzY3NUVCQjkxMEQ5RkY3MkQ4MTg3OUY5RTlCM0Y0NDU5Cis6MTAyQ0IwMDA3NTZCRkVCOUE2MzQ0NjAyM0FBQjM0QTU4NDBCRThFNTQxCis6MTAyQ0MwMDA1OEZENTcxRUJFRDdDMDdBQkY4OUYyQTREMjNDNjY0QUNGCis6MTAyQ0QwMDA1MDRFODQ2MTY4QkY5OUZBQTc4RjQxOUU1NTQyNzdFNEIwCis6MTAyQ0UwMDBDNzQ5MEQ1MjBCQjY3QkUyQzY4N0JFNzQxRjNDRkFBOURBCis6MTAyQ0YwMDA4QkMzN0RDNTVGNzJCODJGQkI3RUVEOTMwOEVGNjUzNzQwCis6MTAyRDAwMDBBRUZERjkzMzUwQkYwMjg1MjBGMEREQTUzN0VENUZGMzRFCis6MTAyRDEwMDA3N0YwQ0Y2RjJDRkNDQkU1N0IxOEM5ODU1ODM2QzA5MTc2Cis6MTAyRDIwMDA2QjRBMENGNzc3RDlGN0REMzZCOTcyRUM3OTNGQzk5NTY0Cis6MTAyRDMwMDA0MkIzMzQ4NkZDQjdBQzRGMjJGOURDREZFODY2NDE3QzU1Cis6MTAyRDQwMDBGRjMzNzdEQzhERkNGNTgwNjQ1MkZCNjdERDcxOTQwRkY3Cis6MTAyRDUwMDBDNzVDOENBMTNDNUU3NkRDMUI0NzdFNjFBQjk2OTFCQzY4Cis6MTAyRDYwMDA4RTU4RjJEQUNDNUY3QTJGOENGNzZFODMyNUNGMzk5RDlGCis6MTAyRDcwMDBEMjdCNThERkJCRTYyRkI2NUYwREZEQ0Y5OEFFMzA4QTExCis6MTAyRDgwMDA0RDRCNUUzOEYxRkNBRUMwNkZBNEJFOUNFODYwOTk5QUQyCis6MTAyRDkwMDA3NDg1MzNEMDQzNzM5QjYyOTNEQkY1MEQyNzg5QUU5NjIwCis6MTAyREEwMDA0MUM5RDJGODc0QUVFMEIzNjUwREJGMTBGQ0E5OTM1Q0M1Cis6MTAyREIwMDA3MkMyRjM0NjZENjE3MTI2QkEzQjI1RTA0OTBBN0E3QkZGCis6MTAyREMwMDAxN0Y3RkIzMjg0MEY3QTIxREQ3NDI5NzEyNTRENEVDMzJDCis6MTAyREQwMDA5RjJCMzI4MUVBMzE2NEU5NUJCNkQ4RTFCNEU0NzY0QkVCCis6MTAyREUwMDAyQ0RCQTZBRjQwRkVGRTBCQ0FDREU2QjY3Q0RCRjNCOTBBCis6MTAyREYwMDAzOUFDNzZFQUE3OTNDMzdGMjAzOTlDOTQwODFFRDBCRkQ0Cis6MTAyRTAwMDBCNEZGOTFCODE0NDdCOTY4RURDRjFENjI3RjIyMTU4Q0NECis6MTAyRTEwMDBENkYzQUIwMzUyM0MwNkZCRkJBQjIzNjI3REZCQTRCOEFECis6MTAyRTIwMDAyMjExQkQ5QUE3M0QzODJFQ0M1OTlFREFGRkRCQzVGRTk0Cis6MTAyRTMwMDBBN0Y2OEZFM0M3QzI1NzRBQ0ZFNTZFNEEwMjA4MkRCRUY4Cis6MTAyRTQwMDA0ODA5Q0E2QjhCN0YyQ0ZDRjZFRkY5NTEwOUVFNUY2MUU0Cis6MTAyRTUwMDA1QjY5NzcxREMyNzk0MDIxRkVGREIwRkU2NDMxRUVEQjc3Cis6MTAyRTYwMDBCQjJFQzAyQkY0OEYxQzdFMkNDMDdDMjlGODVCODQxQ0VECis6MTAyRTcwMDBGQ0EwMDNFODA1OUU0QjA4Njc2NTFBOUMwMjZFMTdENkY2Cis6MTAyRTgwMDBBMURERUQwRDUyMUZGMkU5MkZDNUJDNTZCRjFGNkQ5OTk0Cis6MTAyRTkwMDAzMTEzRjE3MzQ3OEZDNDEwM0ZCNzFGRTk1REY2RTdCMEY4Cis6MTAyRUEwMDBGRUQ1RjFFQzMwNEVGMUFCQzZFMkMwMjUwMENGOEExRTU0Cis6MTAyRUIwMDBGQjdFOUVEQTcyNzMwMEU5RTZDM0JFRkMwMjFDRTdGNkY1Cis6MTAyRUMwMDBBOTA5MERFMTVDOUQ3ODU1MzM4MENFNjY5OUJENUEzMkQzCis6MTAyRUQwMDAwMzVEN0REOEI3MjE4MEVEM0Y1NDdCNkVCQzA2RTdEOUZBCis6MTAyRUUwMDBBNzg0RDdDM0Y4QUI4Rjk0Q0UzNDM5OUQxMkZEQUUxNkFDCis6MTAyRUYwMDBGODNEQTlGNkNDMUMwM0YwQjU3Q0EzOUNFNEMxN0I3RDE2Cis6MTAyRjAwMDBDQUVDNzgwNkY5Rjk3NTQ5MjEzQTU4RERFNjk2NzE5REMzCis6MTAyRjEwMDAyM0QxQ0I4NzFEMkU5NkMwNzlENDA0RTE3M0E0NzYxRkVDCis6MTAyRjIwMDBGNEI1RDBGQkZFMDcwQTZGNDBGQkVERjY3NjE3Qzk4QkIwCis6MTAyRjMwMDBEQkRCREM0NDRGQUIxQkE0Mzg5MzUyRkNCNjQyQzBCQjc2Cis6MTAyRjQwMDA3QUI3NDJFRjRGOUExMkM5MEY2QkJGNkUxN0Y0NzZGMjQxCis6MTAyRjUwMDBGMDU1QUZBMEJFM0YwM0YyMDdFNUVFOEM4RDNGRDQyRUI3Cis6MTAyRjYwMDAwMTNDQUNEOEMyRTVEMUM5RERCOTRCRUY0MTM5MjJGNEZGCis6MTAyRjcwMDBFNTFENjJEQ0RCRTI4QThEM0Y1NkI2NjdEQkY2MjNEQUJECis6MTAyRjgwMDA5NTZGQUI5RjNFOTI3RjYzMUREMjc1OTc0MkZBRjM5NjgxCis6MTAyRjkwMDA4RDhGNjkyMTkyNEY3NjdCMTMzOTZDNTI0MUNBQkUzQ0FBCis6MTAyRkEwMDBDMTg2MTY1QzIzQTVFOEM5QTI5RjVCREJDMERFMEMwQ0MyCis6MTAyRkIwMDBCNzM3NUI4RTQ4NjQ4RjVFQjQ5REQ5MDY3NkU2QzRFMTcwCis6MTAyRkMwMDA3NkE2MjU0NzIyNjg5Rjk1QTdFNDg4MjUzN0VFNTJBMjZBCis6MTAyRkQwMDA2MzgzMDBDN0FGNUREMUNCRjJDQjQ5NkUzQzIwRDUyMkQ1Cis6MTAyRkUwMDA5REU4QkY0NUJCOTJDNTk0NUE5NDZGMTcyQjJGNjhCMUNCCis6MTAyRkYwMDAxNjFGQzFERjdCMUQ0MDU3MTlFODc1MDZEMjE1Q0MzMzZCCis6MTAzMDAwMDBCM0E3M0YyMzNEQ0Y5MDBDMUEyRjQ1MzdCNzA0ODg2RkU1Cis6MTAzMDEwMDA3MTUwODBBM0Q5NjM3NjIxOUM5N0MwQzRERTZBMkE5OTM3Cis6MTAzMDIwMDA5MkM3NEIxNUVBOUIxMTY2QTA4NzUzNkJBNUY4QTE1Mjc2Cis6MTAzMDMwMDBERUNFODdGMjE0RTBCQTA2OUUzNzc3NUQxRURGMjZBMTRBCis6MTAzMDQwMDA1RDA4N0ZBODNGREJCOEREMERFRDRDN0YxRTNEMzcyNUM5Cis6MTAzMDUwMDAyODhCREE0QjVGQzZGREI5MDQwNDgwNTZDRERCRTMzQzE4Cis6MTAzMDYwMDA2MDY3MTE0QUEwN0RDMjVENEQ1RDYzMDEyODhCQTE5RjAxCis6MTAzMDcwMDBDQ0ZCRDM3QjZDMTcyMDM5MUVBN0Y1RTJGODM4NEU4NUMwCis6MTAzMDgwMDAxMjVGODM3MkM2QTJFMzY1NDJFRTgwNUNBRDU0ODFCRURFCis6MTAzMDkwMDA5QTU5NTYxOEY1NjY3MzVCRjk3OUVEOTcxQkMyNzZGOTY0Cis6MTAzMEEwMDA3MTUzOUQ1RDBGQ0MzNUVERjJGRkU2RDk5N0Q4REEyRjNECis6MTAzMEIwMDA4ODk0REJERUZGRDlBMjJCNkNFRjE3NDdBRkIyRDVCRkU4Cis6MTAzMEMwMDBCQ0VBMEJCNkY2NEI1QjY3RDhGREE0OUZFNkQyN0FENjc2Cis6MTAzMEQwMDAwOEJFMUMwOUVFRDc4NUJDRkM4OUMzM0VCNUNBQTZFQjY5Cis6MTAzMEUwMDAxMzM1NkZDMzNFQjE3NUVFRjBFMzUwOUM5OEMzMTZGNUVGCis6MTAzMEYwMDBBNUM5MTU5RjJDMTEzRTdGMDM2Q0MyRkQ4MzNGN0Q0Q0ZCCis6MTAzMTAwMDA3ODBDRjE3OTlCRkVDMkREOUE4OUVFMzREMTBGQ0QyNTgyCis6MTAzMTEwMDBCNDk3OUNFRDRGMkM4Njc5RDJGQUZEOUIyNDExMUQ5RTBECis6MTAzMTIwMDBFQkM3M0MzREJGMDQ5MDVCODA5MzczMDBGNTc3QjI2NEJFCis6MTAzMTMwMDAwOUVFOUIzQkQ3QTBGNzc3QzlDOTAyQUNGRjg2MERFRDFFCis6MTAzMTQwMDBDREM3RkRGNTI1OEI5MTdGOUE1NUY2OUM5NDgzRkRDMkUyCis6MTAzMTUwMDAxRTM3Q0MwN0Q2MTA2QjAzRkE2ODY5RkJEMTcxQjRFMzU0Cis6MTAzMTYwMDAyNDIzQzg5NjYwRERFMzRCMjA3RkIzMEVENzg3NDkwQjNECis6MTAzMTcwMDBFRkMwODdCREExRTg4NzEyQzAyMUI1RjdGRjVFQzJGNzk3Cis6MTAzMTgwMDBERjY3MDZFQTYxOTYyQ0NBNDVGRjExQTc0QUU3QzNBNjg2Cis6MTAzMTkwMDAxOUFDMTVGMTc1QTJEMThFMzdBRjU4QzdDRjI1OTlEQTgyCis6MTAzMUEwMDAzREM3Q0NERjIyMUY5RDk0NzRCRTNFMDFFRjM2QzkzQzYzCis6MTAzMUIwMDA4QkYzNTk3MEJGOUJBQjZCRUNEM0MxQURDOEI1MDhGN0FGCis6MTAzMUMwMDA4RjA4RUUwREFEMkM5OUFEOEMwQ0Y3MTVDQzc0Q0JBM0ZDCis6MTAzMUQwMDA4NkMzNzM5Njk5NTk5OTlFQ0YwMjc2Q0RGNEZDNzIzN0M3Cis6MTAzMUUwMDBBQjQ0N0JGNTg0OTQxNTVFNUY4QUU1RDAzRjdFMERGODk1Cis6MTAzMUYwMDAyQUY2MEQ1RkY4NzE2MzM4NUQ0Qzk1NzM2OUZFNjY2MTYwCis6MTAzMjAwMDBFRjE2QjY0Qjg5NkNCNDRGOTk4N0VDNTdENkYzOTBFOTFCCis6MTAzMjEwMDA0MUI5MjY0NDVDNEI5Qjc0MTJEN0NGM0ExQUNEQTQyN0YwCis6MTAzMjIwMDBCNTVFNjY0ODJDQkREREI5N0Q2RjczNTM3QjRCREU1OEIwCis6MTAzMjMwMDA3MkNCQzJBNzI1NTcyQ0Y5NjVFMUQ1MzlGRTQ4NzIwNjM1Cis6MTAzMjQwMDBDNzUzRjMxMEZFRTgyNDM5OUQ0RTc0QzBDNzA0ODRDN0U5Cis6MTAzMjUwMDBBQ0M2RkRCM0Y2MEREQ0M4OThBNzdBRTQ3REIzRTQxNEUwCis6MTAzMjYwMDBCNDYzRThGRjhGQjQ1RjgwMjdCMkVCNUM2MTQ2Nzg3QTg1Cis6MTAzMjcwMDAzNzM4QjRGNDI5NThGNzQwMUJEN0Q3RUYxNjMxQjIwRkJGCis6MTAzMjgwMDBDRkI0NUQzNTkwODNGOEYxNzgyQTEwM0Y4NTdDMkE1NkJCCis6MTAzMjkwMDAxODFDNUE4N0YyRDVBNzI2RkExMUFFNDJBMUJGQkM4Q0UyCis6MTAzMkEwMDBFQkFGNDI2NkVDQjgxQUZERkJGNjkzNEJCMDlEQjUzRjExCis6MTAzMkIwMDBCOTYyN0Y5QTYxN0ZEMDFGNjlGNjBEMTVBMzlERTQ0NjIwCis6MTAzMkMwMDBCRDA2RUREQzIwNzc1MTJFMTdCNkJGRkYxRkE4MTcwQkU4Cis6MTAzMkQwMDAxRDdBMTEyMTYxRTk3MDY0NTVFREI4REE0ODFGRkZBMzJBCis6MTAzMkUwMDA4RDY4NUY1QUUzNTI4N0Y0RkQwRjZBMjcxMUJGODVFREExCis6MTAzMkYwMDA5QkVGNTYwMkI2RjFBNThGMTEwRjQyNkVBM0Q5NzU2RUUyCis6MTAzMzAwMDA5RTUyQjQ1N0U1ODQzQjkwQTIwQjI3NUM1NkJGOTFFOEQwCis6MTAzMzEwMDA4NEE1Q0Y1MzZFQUI5MzNERTFBQ0JCQzM5QTREM0VCRjhBCis6MTAzMzIwMDBGQkM3RjI5QzU2REY3OUU4Q0QzOTlFOTNCRTlEN0MyMDg5Cis6MTAzMzMwMDBGMEYwMjlFODc0MTNBNzUzMkUxNzJDQkVGRENGQTJEM0FCCis6MTAzMzQwMDBBOEI1QUZCMURDM0I4RUEwN0VFREQyQzJCMzBDQjQxM0Y2Cis6MTAzMzUwMDA4NjdFQzhFRDA0Qjc3MTA4RTkyQzI2NjU1NUMyRkI2ODY2Cis6MTAzMzYwMDA4NzRBNzZBMzY1NTdGNEFGRkRFQjJENjVGMEZDNDRBREJECis6MTAzMzcwMDA0QzdFQzQ4OUY1OUNFRUY3M0NDMEVENTE0QjZGNDc4NTAwCis6MTAzMzgwMDBERTQ2QkIwMEYxMEE3NkMzODA5Qjk3MUUxQ0M3QkZGRUJBCis6MTAzMzkwMDBFNjUyMDlFMEY2MTg0M0ZENkU2Q0RGNjY5MEJEOUE1MzY1Cis6MTAzM0EwMDAxN0Q3MUJBMThDNTcxQ0YyOEMzMzUyNzIyOTE5Q0JDRjIzCis6MTAzM0IwMDA1QjBFRkJGNUFENUM2MzU5ODRFQ0VCRThFOEI5RkVENDM5Cis6MTAzM0MwMDBGQjFGQ0I1QzNGNEQyQjYxNzlCMzYxQkNFNDU2MzlGQ0VDCis6MTAzM0QwMDAyMEY0NEZCQUVDN0FDQzJBRDcyODVDNUYyNkJEQUMwNDI3Cis6MTAzM0UwMDBGREUwOTFEQTBEMjk5NjVFRDUzNURBOTdGOTAzQzc3MUJDCis6MTAzM0YwMDA5RjQ2REEwN0Q4MDE5REUyOThFN0U4OTBFMzFERTZBMTMxCis6MTAzNDAwMDBGMTkzN0VCQjFFM0EyOUY0OTAwNUZGMjdEMEFCMEI4QkJFCis6MTAzNDEwMDA4MTNFRjY0QTk5RTFGRTQ4OEMxNzdEMEUwMDgwRkQ4RUI0Cis6MTAzNDIwMDBBQUNDQ0NENENFQjlFRTdGMTBGRDEyQjI0QUYzRURBOEVGCis6MTAzNDMwMDBEODM5MUJGNzNCMTY1M0MyRTlGQjYxOTU3RkExNzBGRDlDCis6MTAzNDQwMDA5OTMzQjcyMUI3MTFEQUIxRjU5OURCRTU4OTc2OEZERENDCis6MTAzNDUwMDA5N0I1MDhGRDJCNDA5RDhBRjE5QTUwNEM5RjM3MUJFMzhFCis6MTAzNDYwMDA5MTUzRjMyNkExOEZGRDYzRDQzRjMwRUZFRUM4MTlCRDExCis6MTAzNDcwMDBDNUY3ODlGMDUxMTA1MjQ2QzZDNzlCQjJDQ0Y3RDFDMUVGCis6MTAzNDgwMDBCNzdCQzA1RDQzRjk5OTk0M0MxNDdGNjk4OUI5MzNGMkU1Cis6MTAzNDkwMDBCMTI1QTc5Q0YyQzhBOUU3MjREMzY0NkRENUMzRTU4QUZBCis6MTAzNEEwMDAzNUVFMjdENTY3MjAxRkIyOTQ1MTI5QkJGRDlDM0VCQjRBCis6MTAzNEIwMDA1ODdBMUM0MTBFOTRDODJDREE5N0MxM0ZCRDVBRTE3ODY2Cis6MTAzNEMwMDBFQThGRjEzODg1NkFDQUE0Qjc2NjJBNEQ0QzAyM0M2RDcyCis6MTAzNEQwMDAwODMyOTIwNzc5QjhEN0M4QjcwRDJDMEUyODYwRjkyQzlFCis6MTAzNEUwMDAzQ0UwNDM3OTEyOTQ1OTgyRkM1NkE3MUY2ODM2QTExRjBECis6MTAzNEYwMDAxOEU0QTAzMTdENTQ1OTdGMjEzQzBGQ0U1RjQ5RTcwQzgxCis6MTAzNTAwMDAyQ0MyRTVBRDBFRkY3MTNFMzI0OTVGQjgwNTVFQTNCMTM2Cis6MTAzNTEwMDA0OTE0RTdDQzZCQjJDQjcxMzdGQTgxMjAxRkY1MDZDNzhGCis6MTAzNTIwMDBGM0Y5MzNFOUJDQzFDREQyOUVDMzNBQUU1MkZDQzFEMzRDCis6MTAzNTMwMDA2MERBQjM2QTU2ODNGQzU5QkRGRkFBNUQ4QjYxRkM5QUMxCis6MTAzNTQwMDA0NzZFN0UxQkNCQzkwN0VGQzlGRjEyOTQ3NThGRUZCQTg4Cis6MTAzNTUwMDAxOUNCOTJEN0EyNjMzM0M1NTNBRDEyMzg4NUM5NzUwMDE0Cis6MTAzNTYwMDA5RjhGMTlFRTlDOTFEQjE5RUI5NTA4REFENUIwOEYxRDcyCis6MTAzNTcwMDA0ODBGQzk1ODc5MTZEMkY3MkE4NUYzN0ZGRjAyMkQ4MEFDCis6MTAzNTgwMDBGMTE5NzUwQjk3QUJFQTdDNDAxRUQxM0ZGN0QzOUI1M0UzCis6MTAzNTkwMDBGRTM0RjkxNUFBRjA5Mzk0NzY4NUUyMDg0OUJEOENFMkQxCis6MTAzNUEwMDAyRDg3QjZDODFBOTYyMDY3NjMzODhGMzU3RkFGODg1MzRBCis6MTAzNUIwMDA3NzhBNzhBQjEzQkVERTkyQTE2Mjk0ODMyN0Q2N0Y0NENDCis6MTAzNUMwMDBGNkExQTI2Nzg1NjdDMzdDNUQ3RTU2NDI3MDg4Nzg0MTBDCis6MTAzNUQwMDBCM0Q4QkZFNERBN0E0RjdBQkM0ODExN0U0RUM3RDEzOUVFCis6MTAzNUUwMDAwMzA2RDJDMTgwMTJGNjFBQzQzNzFBOEUxQkREMzI5RDMzCis6MTAzNUYwMDA2MUZDNjU5NjFFNjY2ODRGNzQwQUJGNDdGMTk5MENGNzI3Cis6MTAzNjAwMDAzNTVCNjczM0QxQUY4NTU3NUEwOEZCNTdCMTcwMDJGQjYyCis6MTAzNjEwMDBCN0Y3MjM2RTYxQkRFNkVEQzgwNzNGQjg5NkRCMjEyN0ZCCis6MTAzNjIwMDA0QUVENzIxQjQ4QTgwQkY2OTRDRDJBNUFBRjIyNkQzNjhDCis6MTAzNjMwMDAwNTI3NUQ4NTM0RkY3QkE1NDBDODU1NEVBRjZGRDQ0RTNFCis6MTAzNjQwMDA3OTZDMUJEMEMxNzM2RUYzMUU2NUQ0MjdFMDIzODc1Q0IxCis6MTAzNjUwMDBGRjAxQjAwOUVFREJBMzkyNUQ5RTVCRTU0MTI3MUZCNTNDCis6MTAzNjYwMDA0OTY0MTdBQTI2NUZFNzRDRTVDMzQ2RDQ5MzFCQzE2RTk1Cis6MTAzNjcwMDAyQzM0ODZGM0NCQzZENzE5RDk4RDFCODFGRjYyQTU5OTRGCis6MTAzNjgwMDBGOEE3NUE0MjE5NzFCMUZDOTNENzlFMkI2MTFDRTNCMzgyCis6MTAzNjkwMDBGMkNGNUYyQUUyOUM0RUYwMEZEMDU5MDJFRDk4NDcyNUY5Cis6MTAzNkEwMDBBMzczMEFBQ0VGM0JGQjFBN0YzQzA1NUUzRjdCNjA0NTkyCis6MTAzNkIwMDBGNjM1NTA3RTJGQkVGMUZBNkI2MEZFREIxRkRGOTM4RDc3Cis6MTAzNkMwMDBGQkZDRThBQkMwNEZFN0YxRTMyRDdFNkE0NjFCRjYzQ0ZFCis6MTAzNkQwMDA3MTM2NjNBRDlEOUY4Q0Y1MTVDNDRGNkYyOTVDN0ZGNUU2Cis6MTAzNkUwMDAyRkY4REQxQjU3RkY3RjdFM0ExRjNGQkRBRDAwN0Q0RTlCCis6MTAzNkYwMDBGQkQzRDlFMkU4NzlFNDVCNzMxMUQzRDBERTgyMzYyNkJFCis6MTAzNzAwMDBEMjc5MzQ2ODJGN0Q2QTE2RTE3QjlEOEJDQjMxQkZDQjlDCis6MTAzNzEwMDBDQkVEOEUxMDdGRUYxQ0VGNkZENDRGMUUzRjU4NTBGRTQ1Cis6MTAzNzIwMDBEOUY5NzQ5RENGRkNFOEYzRTA3NzkwM0IyNDZGNEU4QzgxCis6MTAzNzMwMDBCM0YzN0RBNzhCRDNEREFGNUM5Rjc4N0RFRjdDRTE3MzI2Cis6MTAzNzQwMDA1ODFGRDhGNTY0REY1REE3MzIwM0ZEODA4OTJGNzg0OEM0Cis6MTAzNzUwMDA1OEJDM0E2RUUzMTE2NDg5NjlGMDNDOTRDN0RGQkJGMzRGCis6MTAzNzYwMDA0ODVFQzZEMThFMTk1MjJBQTlCRkM5QjgxRERGNTRCMzBECis6MTAzNzcwMDBGOTA4M0Y5NzE4QUM1ODA0RkVGMjFDRjgxN0RBMjNENzYzCis6MTAzNzgwMDBGOUI4NUYwMUUzQjAxMDhDQkZEQTFCMkQ1NjQ3RDE3ODMyCis6MTAzNzkwMDBFNDVGQkVGQUZDQkUyMENBOTdENzNENjYwOTNFNjc0OTgyCis6MTAzN0EwMDAzNTE3Q0YwNzJDQkI2MzY0N0U1N0Q5RTkzNDNGRUI2OUVCCis6MTAzN0IwMDA4RDExMUNBNzJFRDUyODVFODk2MjJDMDBGNUFEQTU5NzJBCis6MTAzN0MwMDA1MjlDOTI4NTYzQzcyNUFDOEZEMjE5Q0E3MTI1MTg1OUFFCis6MTAzN0QwMDA0Qzc2NDg5QkRCOTgwNUY1QUQ2MDQwQzU4MjQ0QjcyNDI0Cis6MTAzN0UwMDAzNzk1RjZERTUwMDBFNTAwRDgyNUY4NUU4RENERjU2OEZBCis6MTAzN0YwMDBFOEJGOEM5MjMxMDhDRERDNkQxRjkxREY3REEyOThDQkE0Cis6MTAzODAwMDBEQjhFMjk4Q0NFNjkwNjFFRjhCN0E1MzJEQTNCRUQ2RTQ5Cis6MTAzODEwMDAzQUI3MDBCQjkxRjgzNTJBRTQ0NjMyMzgzREQ0ODI3RTZGCis6MTAzODIwMDA0NjkxMTY5NkEwQkUyOUY2OEJFMzVGRTNGMkM0RjQ0Q0YyCis6MTAzODMwMDA0RThGOEZGMDc4NDc0Qjg4RkJCQjRFQkI2RkYzRDcyRjczCis6MTAzODQwMDA3QkQzQzBGMTdFRjg1QUQ3RTU1MEJFRkVFNENGNUZCRjEwCis6MTAzODUwMDAxQ0RFQkRGMUFERDc2QTMwRUVFREFFRDM2QzcxNDczN0VCCis6MTAzODYwMDAzM0RFNDQ3QjBCN0NBNjg0ODZGMjM5NzY3MjA5NkU2NjYxCis6MTAzODcwMDBDQUFGOTM2Mjg4OUY2ODhEM0Y4RUVCNDVERTQ2RkMyNDdECis6MTAzODgwMDBBNzI4RkM3QzExRkU0MjAwNUY0MEMwRDcxRDNDNTU0NTc3Cis6MTAzODkwMDBGM0M0REVGRjhGNENGMjlFRkUyNjBCM0QwMkVEMzZFN0IxCis6MTAzOEEwMDBERDFGNDczOTkyOUE2RjEyQzlBNzI4QzgyN0Y0MjNBM0FFCis6MTAzOEIwMDBCRTlFMjU2QjY4M0U3RkY4NDFFQ0YzNDdEOEQ1QzlBOTc5Cis6MTAzOEMwMDBGM0MyNDM1QkU2QjUyMDlFRTcyRUYwRTg0ODY3RUVEOEVBCis6MTAzOEQwMDBFNkJCOTFDRTlERUIzQ0UzN0JGMDUyMENDREQ5RTYwN0U1Cis6MTAzOEUwMDAzRTcxNTc2OEE2OTdFQzVGNzY5OEY2NDMzNEIxRTBENjAwCis6MTAzOEYwMDA0MTgxNjBEQzAxRkEyRjVCQzEzMkY0MzdBMDNGQUUxMzg3Cis6MTAzOTAwMDBFNDE5REFEQjU2M0YyMDYzMTNENzdCQzYzN0ZENTI4QUIyCis6MTAzOTEwMDBGNzhCNzg4NUQ1RUZBNjk4NDRFNzA0Mzc5NTAzMUI5NDc5Cis6MTAzOTIwMDAwRkM3RDMwNjlGRkM5M0FGRTFCOTRCNENEMTE1NEUwNzlGCis6MTAzOTMwMDBBMThBMzRCQ0UxOUYzRDZFQzZFOUUyQjI3RDc2QkQwQjQzCis6MTAzOTQwMDBGMzJGMkNDNUY3MzE4NUU4QzVDOTJGRTNFM0Y2RjYxQjQ1Cis6MTAzOTUwMDA3Q0U3M0ZENzFGQkU5RjFDQ0YxMzA1QkY1OUZEMkRGODM1Cis6MTAzOTYwMDAwODVFMjk1MzdDREQ3RTJFNzM1MzlEQkQzRTc3MTgzRTQ1Cis6MTAzOTcwMDBDRTBGRDc3NEQ1N0U2RUQzRTBCMzhGMzczMzY4N0YzRkQ5Cis6MTAzOTgwMDBCQkM4NUVERjgwRjE5QjRGQjI2RTA3REYzRDNEQzZGQ0RBCis6MTAzOTkwMDA4RUZBMTlGQzdBNEJFRUJFRUY4OUZDMkQ4REEzODYxOUE5Cis6MTAzOUEwMDA4RUQzQkY2MEVGRkM3OTQwMDc4NTNBQjczQjBBRTcyRjFCCis6MTAzOUIwMDA2Q0M4QUQ0MTM5QzU0NDlFNDk2NkZCQTM1MEU4N0JBNTYwCis6MTAzOUMwMDBGRDI1MjUwN0ZENTE5M0I3NEYyRTc5NkI0NjBFOUUxN0E3Cis6MTAzOUQwMDBENzMxM0E0RjhGQUFGN0M0NzI4Qzk0M0REMkFGOTY2NzE1Cis6MTAzOUUwMDAyMTlFM0Y3RjdCRTQ2RTZGN0FERTREQ0ExRTc5RTA1NUUzCis6MTAzOUYwMDBBMzI2ODMzREEyREUyMzk5MzBDRUFDMjU2MDhGNTRBNTRCCis6MTAzQTAwMDBEQjIzQUQxMkNBQTBFQzI1NjA4RjkwREQxMTdEMEZGMTk0Cis6MTAzQTEwMDAzNTkyNURGMjYzQ0JCRUY3NjdCNkFCRkZBMDcyM0QwQjhDCis6MTAzQTIwMDA3QUU2OUYzRThCOUUxOUU3MzVGRjQ1RkQxQ0VDODE2OUM4Cis6MTAzQTMwMDAyNUM2Q0E0ODA2M0FGQzQwRTVGMTBFNEI3RjM2MDYxMzEwCis6MTAzQTQwMDAwQTlFOUQ4M0RFNTQ1REYwRkNEQUJBRTQ0QjI4OEUzQjdGCis6MTAzQTUwMDBGNDlENDE1QzM3QUNDN0U1QUFGREY0RUIzOUEzNzI3ODVECis6MTAzQTYwMDAyNkFBM0MwRjY2QTQ3RURGMUFDMTVGRjE2QTVFNjFCN0M5Cis6MTAzQTcwMDBEOEY3QkI3RkMxM0JCQThDRkUwQkY4MzFFOEJGMjQ3RDgxCis6MTAzQTgwMDA2NURCMzAyRTc4MjZBNjUyQkM0RTlEQkY3MkY3NUNBNDMzCis6MTAzQTkwMDAyN0IwQjMzOTNEOUZERkJFQkU3NjQ4QjZGMUYxQjRCMzZGCis6MTAzQUEwMDA1OTM2QkVBRjY3RjY3M0JBMTkxRUZCMzk1REEzNkUzRjc4Cis6MTAzQUIwMDBBNzlCMTVCMjlGRDNDRDMxRUNFNzc0RDc1N0RBQ0ZFOTg2Cis6MTAzQUMwMDA5Q0Y2RkRDQ0QxQUVGRjlFRjY3REE4OTExMTNGNURDMDY2Cis6MTAzQUQwMDBCRTA3N0VCQTA5RTk2OTI0N0VCQTJFREZCODNGOTI2MTNCCis6MTAzQUUwMDBCRkFCMzU2RUE3QUVGNjQ2MTYyMERENEQzM0I4NUQxNzc5Cis6MTAzQUYwMDA4REFEQTc3Q0MwQkMyOEM4OUI1MjhBMUI1MkRDQ0I4QUU4Cis6MTAzQjAwMDA2QjU5NzEyRjJCMkZEMDhBNjczOUUzNTc1NkRDQ0I4QTNDCis6MTAzQjEwMDA2MzQ5MzExRUI3NkFGNjQ0NTcyMEJDQ0RFRDI3NjU5NDQyCis6MTAzQjIwMDAyM0ZBNzMzMDBGMzI4Mjc1OEUzNzJDM0VDN0U1NDE0QjM2Cis6MTAzQjMwMDA3QkU2Qjg5QzMzRkUzNjYyQkI0RkM5NTc5RjgzN0U1OEU1Cis6MTAzQjQwMDA4RkVCQjVGNDAzRjBGOTgzOUY4NUNGNDE2RTZEQzNGMTIwCis6MTAzQjUwMDBGRTA1Rjk3RDE0Qzk5MzZFREFCRjBBQzAzNURBRTlCMDAzCis6MTAzQjYwMDAwRjFBQzZFOTE3OUNERThGRjEzOEY1Qjg5QkY4RjY2MjlDCis6MTAzQjcwMDBGRDVGNEM3NDkwNjFEM0EyRTA4MzYzM0MyQjFBMkIyNTJDCis6MTAzQjgwMDBGRDYyRjE4REM1Mjc0RUZGNzgxODdGRkM1N0YzQ0Y0NUI2Cis6MTAzQjkwMDBGQUM3QzAzRkRGNzM5RDQ3MUYwMTdGM0M4RkY4OUU1NkQ5Cis6MTAzQkEwMDBDOUYxRUJFNDA3OEJGRTgxMjQxMjUyMzVFRTc3MzQ4MUE0Cis6MTAzQkIwMDBFRDJEN0E2NzJGODY0RDg0NzNBMkYwNkI0RThDRDZDODlDCis6MTAzQkMwMDBCRjM4RjFGQ0JGRjM3M0Q4RTczREUxNzE2MjhERjg3RTM5Cis6MTAzQkQwMDA2Mjc3NDE3QzVCNjk4QUNGMkM3RTZBRjc0NDdGRUM0QTJFCis6MTAzQkUwMDBDQjAzQjFGMjFEMEY3QkNDRDdGMTc5NDhFRDRCQTBCRkQxCis6MTAzQkYwMDAxMjlBQ0RDMjFCMENFMkIzNjNGQzM5RTc1MzVGOTg1MUI0Cis6MTAzQzAwMDBGQ0Y0MzNGQjY1N0I1RDcxM0MxRjZBOTE4Njk2MzJGMjUyCis6MTAzQzEwMDA1Qjk5ODY3Q0FCMEE3OUYyNjI1NkY0MjRFMkIzNzk3QTM2Cis6MTAzQzIwMDBBNDg0RDNEM0QwMzgxRkMwRjU4QjBFODVGQ0I1Q0ZDQTgyCis6MTAzQzMwMDA0RkNEMjNFMUZGMUMzRUEyNDNBRURBRTFGOTAxRTk3MjY4Cis6MTAzQzQwMDAwQkU1NUIyOEE0QzUzNzQ4MTlFNDk1QzA1NzlDODVDNzg4Cis6MTAzQzUwMDBFMEZBNjAzRkZGMURGMTk4NTdDNTI0NUE4RUUwRTM2NkY1Cis6MTAzQzYwMDA4RkY5MDdENzY3QjMzRjE0QUQzNkM1Qzc4MDM3OEY4NjQ2Cis6MTAzQzcwMDA3MkIxMUFGMDU2M0UxQzZGMjc1RDdDRkQ0RUZBMEJBOUZGCis6MTAzQzgwMDA0OTE5RTkzRjA0NzI3NDgzOTQ3NjRFMkFGMDYyQUQ2NzU1Cis6MTAzQzkwMDAyNEY5NkNEMTY5REE3OTQzNDg0QjVGRUZGRkEzNzJEOUZECis6MTAzQ0EwMDA5Mjk3OTc3QkEyOTM3MTFGREM2NjQ0QzgzRjkzRjZENzI3Cis6MTAzQ0IwMDAyOTY3ODZEQjQxMzI5RDMzOUUwMUJCMDdCQjVEQUM3QzJGCis6MTAzQ0MwMDA5RDc2RDY4Qjg3MjU2Q0VBNTk4NUNBNkJDRkQyRTEwOUUwCis6MTAzQ0QwMDBGQkUyRDk2QzJBQ0RCM0Y5NTRENjlGQ0RBNTcyRkFEOTlGCis6MTAzQ0UwMDA0QkE4OUM3MTc2MzQ5NTBENjcwMTE4MzA3MTFBQ0Y5NkU4Cis6MTAzQ0YwMDA1MjM5RjNFQzE1NTRDRTNBM0I5RUNBRDk2N0FGQTI3NjNGCis6MTAzRDAwMDA3M0NFNEVBMkYyQkFCMzVGQTBGMkZBQjM1M0E4NzREQTNDCis6MTAzRDEwMDAzRkM2N0E5NUU0QjcyNUJGMkNGOUVFOTRERjk2RkNGQkZECis6MTAzRDIwMDBCRjI2QkY2MzBEMTc2NUZGODBGRUZCQUE3NjFFRjkzRDE3Cis6MTAzRDMwMDA5MkJDMDBCRUJFNEY0Qjk3MTMyOUZEN0NCRkY2MTlGODBECis6MTAzRDQwMDBGQUI4RTA1M0UwREZGNzMwMEVFMzAxMkY4RUUyNTQ2MTYyCis6MTAzRDUwMDAxRUE3MEExODlBODE3OTFBRkJCMDA5NkNBOUJGMzQ3MkEwCis6MTAzRDYwMDAxMkUzMDZDRDBCM0M3QTBDRTAxRTI4RDU0ODNFNkQwQkM1Cis6MTAzRDcwMDA2QTc0RUVCNjU5RDI0NzczNzk5MDRDMjBGREVEMEM2OTA4Cis6MTAzRDgwMDAzNERFQjYzRjJBNUVDQzVGNzg2OTU0NDEwMEU3RTlGNjNECis6MTAzRDkwMDBDQjNBQjZGRjU2NkU3MkRGMkQ3ODhFM0Y4NTg1MEZDMTA4Cis6MTAzREEwMDA3ODJCRjZFQ0YxQTRGQkUxRkJEMTM4MDBGODAyQjFBN0M3Cis6MTAzREIwMDAxOTAzQkVERTM4RUE3NzRCNzEzRURGNTQ0NkYxMTgyODBFCis6MTAzREMwMDBDRDRDRjk2MkRGNzQ4QkYzNjk3NTI4ODQ3OERBRUE5MzU1Cis6MTAzREQwMDA0OTFGNzRFQjFFOTE4NzlBMUM2ODQxM0ZCNzRFNjZEQjAyCis6MTAzREUwMDA2MERFMERBM0RGRDk4MjYwQUJFM0NBNzY5NDQxN0Q2N0M0Cis6MTAzREYwMDA1RDk5MTczN0U5RTk1NzNFMDg5MTNEMDFFRjEwMTQyODA2Cis6MTAzRTAwMDAxM0EyMzQ3MzYwN0YzQUJENjFFMzdDRTc2RDhBMzFCNEZECis6MTAzRTEwMDAwRTg5MTVGQkJCQUI0NzZFQjdDOTNGMTA0MkZBRTg5ODU1Cis6MTAzRTIwMDAzNEI5RjIxNjk4QkY3NzUyQzE2ODlDN0Y3QkNENTExQjg1Cis6MTAzRTMwMDAzRTE0REQxRTRGNTEzMEUwODg3RTc4NUQ5MkUyNkExQkIxCis6MTAzRTQwMDA2NDYzNDcxOUFDMkYyMEYyQUQwMUNDQ0E0ODVBREU4MTE5Cis6MTAzRTUwMDAwNTg3MTI4Njc1NzBCODEyMEE1RjBGMkI4MEU3Qjk3NTU3Cis6MTAzRTYwMDA4OTU4OTJBRkQ3QzRCOEFCQ0Y5NzBDQTFCRkE4RDQ5RDQ3Cis6MTAzRTcwMDBBNjc4NUJBNzNGQjk4OEVBMEUzOEFDRjE3RkFCNTk3OUQ5Cis6MTAzRTgwMDAwMTlDNkY3QzgyNkY5QTI3N0Q3QjExRTU5MTU3NjlCNDA1Cis6MTAzRTkwMDA2RkREQUVBMTA1NTg4RkFENzVCMUM3MzNDNDZGMzYwODVECis6MTAzRUEwMDA3RURFNTY3OUZFQjg4Q0VBQjNDM0QxRURCNUZCOEIxNjM2Cis6MTAzRUIwMDAzQ0VGOEJEMjA5NDdCMzZCNjg1NEE2RkRGQkI0RjM1RkFDCis6MTAzRUMwMDA2OEREOUZGNzdDOUQyM0U0MEY1Q0VFQjZFRjQzNDBDOEFFCis6MTAzRUQwMDBGM0U2MjlERjBFRTFCOUI4MDU0RkE3MDRGQjUwRjNGOTZCCis6MTAzRUUwMDBFRjQzRjMxNDJFQUYzRkVGRjVGRTRGMUJGN0Y3MUE4RjlBCis6MTAzRUYwMDBBQjAwOUZDRTJFQzczOEUzOThDOTIxOENEN0ZBQUM3ODk3Cis6MTAzRjAwMDA3NDM4NEVGOTQ5MDE4QzQ3NTMyRjgzRjQ5MEFBRjMzMTRBCis6MTAzRjEwMDAxNDk1MjU5MDBGRTVFQzBGMTNCODRGNEFCNTY2MjgyNDg5Cis6MTAzRjIwMDA2NzMzRUZCQjEyREU0NDc5NkQ0RUZFQjRFMEE2QkZDOTI1Cis6MTAzRjMwMDBDMjc0QTBGMzQzQUYxNTlGMzZENEM5RkNCRTA0QzY3RjNDCis6MTAzRjQwMDAxNTY2OURDRkYyRjhCNEQ1NUZBRDkwMjkxRTREODFFQzdBCis6MTAzRjUwMDBCNDcxNTREMEMzNzg4RUEzNjA5QzNBNkZGOEZDREY0REU3Cis6MTAzRjYwMDBEMUEzN0RGRTIyMUUxRjU3NTRFRTA3QkUyNzcxN0NDNENECis6MTAzRjcwMDA1RTU1MjhERkIzRUI3OTJFREZEODcxNDZGMkJCQUJENkE2Cis6MTAzRjgwMDBBMDczOTUxREYwM0ZGQTBGQjE1QTVGMUNFOTU2NzFFNDFBCis6MTAzRjkwMDBFMzlEQTk5QzFFNDIzOTZBQzVDNTY5M0U3RTNFNDA3MUJCCis6MTAzRkEwMDA2RUNDNTNBNEI4QjlDMTJBRjA3REI3MDBDRDFBNDdCNTdECis6MTAzRkIwMDBFMkYyOTU2QjI2NjEzQkJGQzEzQ0NGQzFGQUZDNzUyQzg4Cis6MTAzRkMwMDA3MTA5QzAxQjc0Qjc2RUJEQkMzNDQzM0NCQzcyQ0QzN0E1Cis6MTAzRkQwMDA5RTg0Nzk3NzNGMzVGRDU3NEY0MjdEOTcxQzdFQjUwRTA1Cis6MTAzRkUwMDBEQUU1N0ZCOThFRjBFQThDODc2RkFCOTQ0RDFERTU4M0RGCis6MTAzRkYwMDBDRjc3MDhGNzE1NkM2OEEyOEI1QjdCQTQxODNFQ0ZGNkQxCis6MTA0MDAwMDBGOTBFRjJGRDZFMEQyOTg4MTdEMDkzODgxN0FGMzMyRjY0Cis6MTA0MDEwMDAzMjFEREY2NTA4QzdDRTgxNzlGMDZGRUZENjc5Q0I3MDlFCis6MTA0MDIwMDA1RTg0MUJGMzJCNTdGNEQ2NkJBODY3ODI0QkVDRTcxNzIzCis6MTA0MDMwMDBGRTI2N0JERDVCNjU4NzczQUJEOEJGMEJEMUJGMzMwRjJCCis6MTA0MDQwMDBCMUM3OUNCNzA4RTlGNjRDNTA2MzI4NkYzNkFFQkRGQThECis6MTA0MDUwMDA0NjkyRkJEQjE1MzZBRTM0MDNGRDNBRDZENUE5Qjk0OEY2Cis6MTA0MDYwMDBGRjc3MUJGNTdCMkI1MDZGMzQ2ODk0RDdEMzFERjdDNkIxCis6MTA0MDcwMDAzMUM1N0I3QjVERUFEQ0M0NjZCRjFCMUEzRkM3QUE5MUQyCis6MTA0MDgwMDAxM0VFNEM3NkJDMzgxRjBCODg2N0NDNzEwRUQ2M0Q1QkE3Cis6MTA0MDkwMDAyNkJCQTZCQjg3Q0Y2MzhERDc1REY3OTYwN0U1QzQ0OERGCis6MTA0MEEwMDBFMzNFM0RDNjNDRTI0NjdCMkE5QTc3NTFGNzJFRUVEQjkzCis6MTA0MEIwMDBFOEUyNzQzRDQ1OEI0QkE1Njg4RkVBMEIxNzQxN0RGMzExCis6MTA0MEMwMDAzODk5RUMyMTI2RkNCRkVFNkJGOTc5RTJDMzlBNjFCQjBCCis6MTA0MEQwMDA1RkIxNjlDQTRBQjIxQjZFNzJFQjgyQkZDMDJFOUM5MDYwCis6MTA0MEUwMDBCQTZGNzFDMDZCQkVFMDg2RTdFQTczMzAxMkQ4MDNFRjk3Cis6MTA0MEYwMDBFNTg2NkY0NEJBNjgwQzdFNDQ3NkQ0QUQ0NUIyOEVGNDQyCis6MTA0MTAwMDBCNTYyNEYyM0FENkJCMzJFQjMwNERBQkQ2QTJCMTlBOTg4Cis6MTA0MTEwMDA0REFDRDVDNEYzMDA0Q0Q0NDRCQTlCMDM2RjY0QkExN0JBCis6MTA0MTIwMDA5MTNDRDQwOTcwQ0UxOTU3Mzg2OTFCRDREQzQ1QUQ5NDQ1Cis6MTA0MTMwMDBDN0QyNjg0OEU0ODc1RDA3OTg0MTc5RDA1MjFDNTFBNUUxCis6MTA0MTQwMDAyQUVDMzdGRjFEQjRGQkU2MDQ0QjY1RjRGN0FGNTM1OTc3Cis6MTA0MTUwMDA4Mzk2NjY5RjgzNUQ3Q0NDOURCNkFFMTNFM0Y2MDRFNTQzCis6MTA0MTYwMDAyQTlDMUZFNkMxRjkxNzc5RTgzRTgxMUJFREUzMkI1MzJBCis6MTA0MTcwMDBGNkYxNDQ0NDY0OUE5REZDNkIzNDJBMzE5RTUxOTRGOEM0Cis6MTA0MTgwMDAzREU1Nzk3RjNGMjlFM0JDRUMwNTU2QkQ0REZBRTQ3RTYxCis6MTA0MTkwMDAzNUY4OTdCRkM0RkQ4QzMzQTMxRjUzMEQzRjZCNUNFMjEyCis6MTA0MUEwMDBFQjlBRDgyNzcxNkZFNUIwMjdGMjFCMUNERjhBMDc0QzBBCis6MTA0MUIwMDBENEY4RkRFNkNEMkQyQzFDNEI4QkFCNkM3RUZFQ0Y4RjQ3Cis6MTA0MUMwMDBBM0JENkFDNTVGQ0VFNUREMDkzODJEQjgzNzQ5MkM4QjE0Cis6MTA0MUQwMDBGNEJDMjdGQTA3NzdCQTVGQ0M5MjY1NzMyNzdDN0U3MEIwCis6MTA0MUUwMDA2N0M4OTdGM0Q1MDIzRjhEMTVGQzkzNTc1QkUxNDVCOTNFCis6MTA0MUYwMDAzOTE2RjM3RDcwMUZEQUI5M0MzMUUxQkZGNDdDMUY0NUZECis6MTA0MjAwMDAzMDVGMzBEQ0RBMkYxQkMzRTU5MjIyRUU0RDAxNUQ0QkFGCis6MTA0MjEwMDA2OEM3M0FGMzgxMTRDQ0ZCOTkzODVDNkUxQzEwRjQ3RkFDCis6MTA0MjIwMDA4OTQ3RTRGRjRDNjY5M0I5MUY2RTNGQkZGMjJGRTU3QUQyCis6MTA0MjMwMDA5RkI1RTY2NUJDODdGQTdEQTFGNzVGMTQ3RTY1NDJEQzE5Cis6MTA0MjQwMDA2QjNDMkFFRTJEQkVCQ0NFMjAzRkVGOTU3NTk1NTQwRUVCCis6MTA0MjUwMDBBQzBCRDNGM0Q3RDZENTUxOTlCQTVGQzVFN0NEMTc3NjU2Cis6MTA0MjYwMDA5ODhBNDEzNTNDRTdGN0IxQjgwMUYwRkE0N0FEMTkyODEzCis6MTA0MjcwMDA0NTNFQUZFM0Y3QkJCQjlCNEU2RDI5MjdCQjkxOUY1QkQwCis6MTA0MjgwMDA2QzJFQUE0RTE0QTJGRjAyQjBFNjQzRERFNUVCRjNGMDdDCis6MTA0MjkwMDA3QjVFRTY2MDY1MDE1NzczODhGN0ZGRUFGMzBBMjc1REU2Cis6MTA0MkEwMDBFOEQ2RkUzQkY2REJDNzVBMTlDQUJCODA2OURGRUZFQ0U0Cis6MTA0MkIwMDBCMEQzQkZFMUZCRUYyQUJBQjg3REVGQzU3RkMwM0U3RTI5Cis6MTA0MkMwMDBDOURBRjdBQkQ5RDVGQ0ZCMEMxNzI3OEY5MThGMkE4NTVDCis6MTA0MkQwMDAxQzE4MDNGQzc0MDBGQzc5QjdDMkYzRDVGMzc5OUVBQkNDCis6MTA0MkUwMDAxOUUyRkM2NkFBQkMxRTFCMkZEQUJCMzgwOUIxODEzQzVGCis6MTA0MkYwMDA5RUQ3NUVDQ0NGMTNBODFGRTY5NUUzN0IwQzRCQkVDMEM4Cis6MTA0MzAwMDBFMzVCMkM0N0U0QkY4RjE1RTNBQzE2RTM0RUFDQTY3QjEyCis6MTA0MzEwMDBCQkZDRkM5RkY1RTk1OEZBNTg5MkVBQjlDMDA3NTgwNjY5Cis6MTA0MzIwMDA1OUFCODRDODFDQzMwNkM5REYyRTk2ODZBODZFNDg3QThFCis6MTA0MzMwMDAxNkQ2Q0JBNDcwMTlGN0MzRTNBNDNGQ0IxNUYzREIxNTU2Cis6MTA0MzQwMDA4NEZDODhDQ0UzNDVDOUM1NjQ0RjgyNUU0NkI5MTg1N0UyCis6MTA0MzUwMDAyMzhCNTBCRTZDNjhEM0MyODA4OTczNzk3Mjc4N0YwRUNDCis6MTA0MzYwMDBDQjBEN0QzNTAzNzhGRTExOEJDOTI0N0Y5NEU3NTg5NkQ5Cis6MTA0MzcwMDA3RTI1RDk3QkE0QkYzNkFDQ0YzQjk4NERGOTFBNDlDQUVDCis6MTA0MzgwMDA3M0RGRUYyOUI1RTlBOTg5QkU4NUQ3RTlCMDVGMUI0NTgxCis6MTA0MzkwMDAzRTlEMEJGQUIzMENGOUE3NTYzRTFEOEM1QjkyRTlCRDBFCis6MTA0M0EwMDA1NTZFRjQ2QjhCMzJGOUZEMEY3QjI0MTFDRjQ4OEVBNjJFCis6MTA0M0IwMDAzOEEwRDhEN0Y4NTQzOUUzN0RDNjdEMUU2RUQ3M0M1QTU1Cis6MTA0M0MwMDA5QUQ5OUU2NkVDNDExQTZGQkY0Nzc3OEM5QjZDQTFGQjE0Cis6MTA0M0QwMDAzMzNBOEY2RjY0Qjk0Q0NBQUZEOUQ4QzZFRkU5NUJGOEVFCis6MTA0M0UwMDAxQjBENzYyRERBQzMxQkZCRTZDRjQ2RkU4RTU1QUE5NDM1Cis6MTA0M0YwMDA2RjBFRUJGNzIxRkU1QzIyMkY3OUUzRjhFMEMxNkMxRTEzCis6MTA0NDAwMDA5NzI4NDUzOUREOEZGOEFCNERDMzVGNzA2NTEzRTJBRjc4Cis6MTA0NDEwMDBFMzU1OUVERjBCRkFEQ0M3MzJFNDFCNUFGODczRjlEODc4Cis6MTA0NDIwMDAxNzMzQkRCN0NBOEU1MURBQTI0Q0Y3ODY4RjdBMkMzQjcwCis6MTA0NDMwMDAzRDU5Q0FFOTg0RTMyRkVCNUEzNTkyQTk3RDQyRTBCQjhFCis6MTA0NDQwMDBBNDhDNDVDRjg3QkY3RThGNkUxQkQ3M0FGNzU1NDY4ODIxCis6MTA0NDUwMDA3NzQ5QkUwNEM1QjkyNjZBRENDRUQ4QjA5OEUzNzVDM0U3Cis6MTA0NDYwMDBGM0Q3MUM4RkE2OUQ0M0ZDMTI4NzlDOTI4QTA3NUI3MTMxCis6MTA0NDcwMDA2MzRCNkZCNjdCQTJGRkU4MTk5NUQyOTdFQ0ZCOENFNEY3Cis6MTA0NDgwMDAyRTdCQzE3MzEwRjcyREMzMzlDNDI5NEY2RDg2NzM4OEY1Cis6MTA0NDkwMDA5RThCRkJCRUNCNThDMUI3ODdCNjFDOUQ4N0YzRkM1NURFCis6MTA0NEEwMDAxRDIzRkIyQUYwMEM5RjM3NTc2NzcxQjkxNEJGNTM2MDY3Cis6MTA0NEIwMDA0QTE4NjdCOTI2QTJEN0EzRkRFNjZBNjcyNkU2Q0Y4QzFECis6MTA0NEMwMDAxNTcxOUJDMkY2M0UwNUU5MjIwODdCNTkyOEUxQkRBNjdECis6MTA0NEQwMDA2NDBDQkY2NzMyNzYzNzIzM0Y1MTJEOUNCOTZBQkQyMUVBCis6MTA0NEUwMDA0NDY5NUE3RTk0QzI4NkZBNjk3REVEOUFGMTc4Mjk4MUYxCis6MTA0NEYwMDBGNTUzRDQwRjYzQzRGQjQwRkJDQzVGQTFEQzFDMTM4OUQ0Cis6MTA0NTAwMDA1MjFFMkVGNDhCRjlEMUJFMTA3ODJDRjA3MkJFNURERUY3Cis6MTA0NTEwMDAxMDk2MjQ2ODFGMEMyNjI5M0VFOTk0RUI2MzAwM0Y5NzEwCis6MTA0NTIwMDBBNEQ5NkYwMTUxNjdBQkI4OUM5NkUxM0ZENEYzRjkxMTYwCis6MTA0NTMwMDBCQkRDMUVFN0I4MTcxRDcwRTRCREU0N0E0NUJFQkIyNUExCis6MTA0NTQwMDBCNzhCRjhBNjRFNTAwN0U1NEM3RTc5NEFCRjNBRTA0MzU4Cis6MTA0NTUwMDAxOTU2OURFQTFGQjBFQTlGMTEzRTIwMDRBMjY3MEIxRTY4Cis6MTA0NTYwMDBCQzRBODk3Mjc3OEY0QkZGQ0E1M0E4OUZFQjM1OUU0NzkxCis6MTA0NTcwMDAyNkVFQ0I2NTBCQkNGQkQwNjE4Njc2MDM1MzVFMzE3MUIyCis6MTA0NTgwMDA1Rjc3ODRGOTc3NjlDRTRDOUQ0NzdFNjg3NjlENzU5RkVECis6MTA0NTkwMDA4RURGNTc4NjMyODY3MUJBNkMzMUJGNzVBRjJFOUIxOThDCis6MTA0NUEwMDA2Rjk2MDMzRDY0OUI0OUJBNTdBNzVCREY1NTMwNTkwMkFDCis6MTA0NUIwMDBGMzcwNzQ5RjRDNzk3NEJBMkY0MkYyQTk2NzgxNDdDNzkwCis6MTA0NUMwMDBFRjdDNjhFMjlFOUU0QkRDMUZDRjM2NEZEM0ZEQkFFQ0VBCis6MTA0NUQwMDA2MUVCRTNGN0VCMkNCOEIzQjNBQURFMkMzNzZDRjNBQzhBCis6MTA0NUUwMDBDN0Y4MzZBQzdENzRDNkZCNzU3NURDNEZDQTM2NzkxQ0NFCis6MTA0NUYwMDAyMjZEN0NCQTVGQjc2MzZBOTlFRDdFMURDRDgzN0U5Qzg4Cis6MTA0NjAwMDBBMDNGRUI5RTlEMTNBRTczRkQ2QTMyREI2OTEzQzI3NjQ5Cis6MTA0NjEwMDAzQkUyNDJGN0VCNUMyMTdCRkIxRDE3QzhDRkZBQzRGN0U2Cis6MTA0NjIwMDBFQjA0MUU4NkI1NzNEODgzMkVDQjBFMUQyNTMzRENCRjVECis6MTA0NjMwMDAzMzBEMzI3RDQ3MjRGN0EzNjQ2NDg2NDQ3MTA5RDJGN0IxCis6MTA0NjQwMDA5NjlEOTdDNzg3RkE2RjY3RTdFNTU5NzlGRDBFM0JDRkNGCis6MTA0NjUwMDBCMkRGNzI2N0RCRjFFREI0RkJEQzU1MTFFQTczQjE3NkMyCis6MTA0NjYwMDBERTJFRkMwN0QwQ0I0MzVFODc5REQ3OTQ5OTNFOUNGMjBCCis6MTA0NjcwMDAyMjlGMERFRUJFMTJDNjM5NUFGQjIzMDVGM0Q1NzZFNTBGCis6MTA0NjgwMDBGMkVGMUZCMTYxRkVDMTVCMzM2ODVGN0NGQzdCNDdCQjBGCis6MTA0NjkwMDBBNkY0QUJGOEZEOUJERjJENjU2NDI3NTk3MTA0Qjc4MDQ0Cis6MTA0NkEwMDA3OTU3OTFCQzlFQzJFRTVEMEYxMTdFODIwMjBGNERGOENDCis6MTA0NkIwMDAwMUIyMUFDMjU1N0MxQ0YxOTlFOUM1QkM4NUZDMjY0NjlECis6MTA0NkMwMDA4RDBBMkJDMkI0RUZGODU5MDI5OTJFNkRDNTU0RDRFMzZDCis6MTA0NkQwMDBGNTg4OTUzNDNDQ0RGMEQ4QkYxM0QwQThFNzNCRjZEMTkwCis6MTA0NkUwMDBCRUNGRTdDRUMxMUZFNERGNTM5ODYzRDhGN0RERjI5MzY2Cis6MTA0NkYwMDBEMDlDQzVGOUFFQUZCNEQzQzEwOTI5MzJBODQwOTdBNzYxCis6MTA0NzAwMDBCMzRBODVGRDMzQThBM0JFRUM1RUVCMjJCQkYxQTEyNTI1Cis6MTA0NzEwMDA2NTVCQUY0NDdGMzUyOEVCRkMzODcyNjgxQ0RBNDdDRDA3Cis6MTA0NzIwMDA0NzREMkZEQTc5REIyM0QzQkRFM0UwRkQ0MzFENEExODYzCis6MTA0NzMwMDBDREMzQTc5NkFDNzkxNUVCQjFERDJFQjI4MzlFRUE5QjczCis6MTA0NzQwMDA1N0IwMjI4REVGMzZFRjVFQjA3MDMxQkVFRjcwOTE3RUM0Cis6MTA0NzUwMDA1RkIxRTdCRTgxRDIyMEY2NzdENUE2N0Y2RkFBNjVFMzY5Cis6MTA0NzYwMDA3RDNBRkE2RDZGRDQ3QTMzREEzMTU3Njc3MUJCNjRBMzNGCis6MTA0NzcwMDA5NkE0RjhEM0M2NzkxQTQzOTc2QjYzNDlGREU4MTU2ODg4Cis6MTA0NzgwMDAzRjVDQTM2NUJDNEY3RTU3OTY5QkRGRTc3M0I1NEEyODE1Cis6MTA0NzkwMDBERjBCQTM5OUVGMDU1OEVEQzZENkZDOTZDRTMxODJCMzU4Cis6MTA0N0EwMDA2NTg2N0U5Q0VCRkE3OTMyRDYxRjgyN0RENUE1MTQzREI1Cis6MTA0N0IwMDBFNTA5N0FEQTU4NzRFRkQ2MEE1Q0RGNDBFNjdCODc1NjYzCis6MTA0N0MwMDBCOTM2NkIxQ0E3RDM4ODlEQ0Y1RDg1NERBMzcxREQyRUI3Cis6MTA0N0QwMDA3NzY0QTAxRTg5QUI1MEQ2MzEyRUUyNzJCNzQ2NkU0NjgyCis6MTA0N0UwMDA3QkY0NkExNzUyMzhEQkRDRjFDMzg2NDVCODJGNjE0OTg4Cis6MTA0N0YwMDA5NzYwOUVBMDFBNTk0NTc0MTZDQzYyQTgwRjFBOTY0NDY5Cis6MTA0ODAwMDA1QTExMkY4NUEwRkYzMEI0NTc1OEY0NEIzQUE3MjhBQzYzCis6MTA0ODEwMDBEMzk4MTdFQTlFMjUzRDA5MTdCQ0Y3NTQ0NEFGNDJCQzE0Cis6MTA0ODIwMDBCRkI0OTY3RkU3QTUzMEU4QTM3QjQxODUxMTdFMEU1Nzg0Cis6MTA0ODMwMDBEOEVFNjY2ODMyNkMwNDE3RDg0NUZFODE0NDcxMjIyNzkxCis6MTA0ODQwMDAxRjU5RUI2QTVFQ0FFNUY4RUVCNUJGMUQ5NUU5N0IzM0VCCis6MTA0ODUwMDAxNTU5NjU4NDU3QUY2MTVGQjcwN0Y1MkU4QzMzRDUxQ0FBCis6MTA0ODYwMDA1QzQyRjhBRTcxQjMzOEYxQUY5QkU4N0I1N0FEOEJFMDlCCis6MTA0ODcwMDBEQTM1RTVFNDU3MTBBRURGRkQzRThCRjZGQjVBNjY0QUFCCis6MTA0ODgwMDAwODU3RkUxMDNGNjdCNUU2Qzk2RjFBNTQ3ODNDOUNGMzkxCis6MTA0ODkwMDBBMTkzRUYyQzdFNzBDMkI3NzNGNjNDM0E4RkRCQ0MwNjQ3Cis6MTA0OEEwMDBFNzIzQkU2MzY3NjVBMkEzQ0Q0NTZCQkNFOTcxRDE1NjEyCis6MTA0OEIwMDA0MTdGQjAwRjI0NUY2MjNBQTNGRDU2RkU5NUFEQzc3Q0UxCis6MTA0OEMwMDBEODhENUY4QzU0MjI3RkJDRURFNUY3NTZFRjVCQUFEMTAzCis6MTA0OEQwMDAzQTFFOUFBQjUxQkNGMTIxN0YyQkQxRkRBOThEQUVGMEQwCis6MTA0OEUwMDAyMTA0NDdENTE3RTI3RUVFMkVBRTA4NjNCQ0VERUZGMDUzCis6MTA0OEYwMDBGMDM5Q0QzRkQ4M0RFQTRCOTU4OENGMkZGRTIxOEI4RkU1Cis6MTA0OTAwMDAzMzQ1QjVDNkY5MTlEMTdCQUQ5N0UwOUNBMUI0RkY2Q0Q2Cis6MTA0OTEwMDAwNURBQTE0QkU0Qzk5NDNCQkQ2QTA5QzkyRjk3OTBFMzFFCis6MTA0OTIwMDAyRjJGQzlBQjQ3M0YyNTcwQzM3MkM2RTUyMThGNTMwNEIzCis6MTA0OTMwMDBENjU2RjNGQjBDMEVCOTlGQTg1Mzc3Q0ZBMDVERTJGMURBCis6MTA0OTQwMDA5RjdBMjFFRkM2REUzMEJEMUVENzU5MkZGNDgyQTk2NkFCCis6MTA0OTUwMDBGRTJFNjNBRTY4NUYzODE0NDE5MzZDNThGQzI3NTdFODBECis6MTA0OTYwMDA4RkIxQkIxRENGODU1RUM4MUQxNjA3MUZBQ0I4MTlFNEZCCis6MTA0OTcwMDBDRjk3QjI4NDFEMzk0MkRDNjdENzkyNzlDNDBGNjc4MDI0Cis6MTA0OTgwMDAxRjI4MkU1RDcyOTJFODNGMDY3MjAyRURFNjM3QTQ2NDlFCis6MTA0OTkwMDA2ODQ1REE3OTk4RjU5REI5OUY4ODc4NTBDNDJDQTUzQzc0Cis6MTA0OUEwMDBFMUI3NDQzQ0U4QTdFMkJCNzNFRjg4NzhEMDcxMTEwRjAwCis6MTA0OUIwMDBGQUI5ODgwN0ZEMDNDNjgzRjBGQjYxREVDQjY5REZDNjY5Cis6MTA0OUMwMDBENTdERDQ4RjcxOUM5RDM1MEIzQzA2OEMzMzU1MUY3QzU3Cis6MTA0OUQwMDAwOTgxRkNBMjM5RTgxM0Y5RjcwNDZGRDBEMjQzNzNDRkYxCis6MTA0OUUwMDAxRkE3NEEyMDVDNkU4QzRCNzEzODVGMTZERkEzN0I0NTk2Cis6MTA0OUYwMDBDMDM1MjBFMDdBNERDMDY1RTk0MTk0MUI0ODY3NkNBQzM2Cis6MTA0QTAwMDBBQTY3OTI4NzQxQjU1NUMyRjM1RTk0MTdGRDQxOTIxNzhDCis6MTA0QTEwMDAzQzRGM0NCODQ2MzIyNjBDOTcxMzMwREVFODc0M0JERDQxCis6MTA0QTIwMDBBMkJGNTNBMzdDNDRDN0NFRjExRkNERTJGNzBFNUY1QTVECis6MTA0QTMwMDAzQjZCM0YwQkE2QzlBM0M4QzI1NTQ4NzdGOUIwM0YyOEM2Cis6MTA0QTQwMDA4RkEyNEQ1QzhFNDdGMURFNDU5QTVDQjVFMjY5QjAyM0RBCis6MTA0QTUwMDA2MUQyM0IzNzcwM0M4RDI0NUYyRTI0NTcwQTFENzI2NTRFCis6MTA0QTYwMDAzN0NBMTVBOEVGNDZCOTEyNEM5NzJCQURGREI4RUUyMDBBCis6MTA0QTcwMDBDQTE1OTZEMjQzQzFDODI3OTMyQjNGRjM5NkQ5RTIyNDk3Cis6MTA0QTgwMDA5NjdDQjkxQUQ4OThFQ0M0MzBFODUzRkZBN0Q3QTc2RjIzCis6MTA0QTkwMDAwQjM5NzEyMUJENkFFNTdGMDQ0QzQ2N0E3RDBGRTY4NUFFCis6MTA0QUEwMDBBMDNGMzM5RUQxM0QxQ0M1MUNBNDdDQTJEQzc2MTdDMzVECis6MTA0QUIwMDA3QzkwQUREODY1MzRGQTMzMEIyOTFGNjRDNzdDOEY4RTg4Cis6MTA0QUMwMDA3NEYxQjA5NDA4MjEzRUY3NDkzRDVFQkUyRjdBM0ZEQTdCCis6MTA0QUQwMDAwQkRCMjZGMDM4Qzk4RTNGREVFMzQ1M0JGQkE1REIwQjQ1Cis6MTA0QUUwMDAwMjc4OEVEMzlCNkJFNTgxRTg4QjZGODVGQUE5NDY0NkU5Cis6MTA0QUYwMDA3NEIyNjJDRjBBNUJERUMzQ0ZCM0YyMDgxRkI5MzE5MDQ0Cis6MTA0QjAwMDAzRjgwOEY4NzZGRTdGQTQ3Mzc3ODFFMDg5NDE5RjM0MDg0Cis6MTA0QjEwMDBEQzNFMTEwRjUyNjMyMUE0OEY2RDUyRDQ0MzcxOTg0NjJECis6MTA0QjIwMDA5OUY0NTQ2Rjk4RTdBRkY0ODI1RjhFRTc4M0JEMEQzQjM1Cis6MTA0QjMwMDBFN0EwN0VERTcwQUJDQzI4NUZCQ0IyRTcxRTk0MzMxRENECis6MTA0QjQwMDAxMzE2MUFDODk3QUVEMTY1NkZBMjM5QkVDMTI3N0JEM0ExCis6MTA0QjUwMDBGMzQ4RjEzODQxQUJFNkU3ODZBMjM0NzMwMEU0Q0Q1RTVBCis6MTA0QjYwMDBEMzM4REZGRDUxNTVGODdERDhERjdEOUUzQ0Y4Q0VEQzkzCis6MTA0QjcwMDBEMDY4OEMxM0Y0MzYyRTBDRTFCQ0JEQTMyMkExM0NDQTM0Cis6MTA0QjgwMDA0RjE5NDNGNkMwQzY1MTlCMTY2M0ZDQTk2M0I5QzZEMjQwCis6MTA0QjkwMDBFREE0NjFGMzA1RURGNkI1MTU2NzU0MUI3OEZFNDg4NzYzCis6MTA0QkEwMDBDQ0ZEQ0I1QzcxM0UwRDdDNTU4OTc4NEI1RjI3QzJBOTRCCis6MTA0QkIwMDA5QTNDN0YwNEQ3QUJGMEY1RDJGNzRENzMxQkMwM0ZBQ0U2Cis6MTA0QkMwMDBFMkVCNDdGRjU1RjdFOUEzNTE3RUE4MEQzQzdGNjRCM0E0Cis6MTA0QkQwMDA1RjVGOEM3RUEzMTMwRTZCRkM2QkIzMjU5QjdGQTQ1Qjg2Cis6MTA0QkUwMDA3OTBCRjU2QkY4Mzk2MjExQ0Y1QkU4NzU5RDNGNkZBMUNBCis6MTA0QkYwMDA0M0M4NDNDQjZGMUMwOTFGMkVDNzM5NzVBRkQ3MUUwNzlCCis6MTA0QzAwMDBCNEUwQjk1Mjk0NEUzODQ2Q0ExN0Y4QjRGMzVGNjhERDgxCis6MTA0QzEwMDA5RkY3N0MyM0U1MTFBQ0M5OTY2Q0Y3MkI3MkFEN0M5NjlGCis6MTA0QzIwMDBDNjM1MjE5NDEzMTYzQzlCMkY5MDNGRjI2OUUxNkE2RUMyCis6MTA0QzMwMDBFNEVEM0ZFRkY1RkU0RjFCQjczRTlCRUI0N0UwRDMwMUEyCis6MTA0QzQwMDBCQzQ3RDkzMTcxNjYwOEU1NTAyQTFFMzMzNDUwOEVGNkMwCis6MTA0QzUwMDA5Q0I4Q0Y2OEU1OEZCODc0RkU0RjU1RTVERkI5OTNCM0M0Cis6MTA0QzYwMDA4QkU4M0JDQkVBNzQ5RTNGNDI3RjE5RjI0MDM2MzEzNkU3Cis6MTA0QzcwMDAxQkZEMUQ1NUM0NkY5QzdDN0EyMUY4OUQ3OTIzMzdGQjYxCis6MTA0QzgwMDA4NERGMTg3NUNDMjdGMjQ0OTgyM0VGNDQwREYxRkMxMjExCis6MTA0QzkwMDAyQjlGQTQ0QjgyRjUwNTUzRjkyMDIzQ0VFQkMwREI3ODg0Cis6MTA0Q0EwMDAyMUY3REY3M0Y0MUZCNkVFMzBCRjVGNjlFNTlGMENDQkQxCis6MTA0Q0IwMDAyMzk5MkFFRkM3MkQxODk2NDcyMkYyNTE3QTcyOEQzODIwCis6MTA0Q0MwMDBDRjEzRTc3OTI1QTgzNjMxOUUzNzJDOEY2NEVBRjQxMDhDCis6MTA0Q0QwMDA3RTUzNzI1QTg5RTg3NzAzQTNFRkVGRjY3ODc5QkQ3N0IwCis6MTA0Q0UwMDAwRThCRTNGN0NFN0FCMThFRkM1NENCMjhBRjY1NTg3RTlECis6MTA0Q0YwMDBDOUQ0MzU4NDI3OEQ0NTk2RjFGMzFEN0VERTZGRTFDMTYxCis6MTA0RDAwMDA5OTVGNzI0MTdBQkI0MDFFNDlEMDY3N0Q4RjIyNDJGMzgyCis6MTA0RDEwMDBGNEY4QzMzRkE5MjNGODY0M0E4RjJGRjhEMkYxNzBGQTYwCis6MTA0RDIwMDBGODk3RjhCODlDRUMxMTc5NzgzREI5RjY3Q0JDRkJDNEQ3Cis6MTA0RDMwMDBCRTU0ODg3NkNFRkRENThCMzg1RDc3RDVFQjE0Nzc3NzZBCis6MTA0RDQwMDAzN0YwNzhFNUIwRUY0MEQ0RDhGRDAxNjczQ0VGODQ5MEIwCis6MTA0RDUwMDBENzE3NUFCRjMzQUVCNzZEODRGQjY2MEI3QzNDOEZFQjI1Cis6MTA0RDYwMDBBMTI1ODcyODJGRjZDQzJBRDBCMzgwQUY4NzMxOUZBNTA1Cis6MTA0RDcwMDBFNkUyRjM1OTVFQ0ZFMkY5MkNCRDQ2RkRDMjRCNTE4RkZFCis6MTA0RDgwMDA0NTM1ODZGMkI0MTdGMzU5RTBGRDg2ODYxMUYyNTk0NDkxCis6MTA0RDkwMDAzQ0QxOEE4RjhFOTRDRjkyN0JFRTNDREU5RUNGRDI3QjJECis6MTA0REEwMDAyQkNGNjdFOUVERTFGMzU4RTNGNTM2NTQ5MzlEMzVEMjA3Cis6MTA0REIwMDBCODRGOEYzMTY1MUZFRTdGQzVDNTlEOUY0RTJCODlGQzc3Cis6MTA0REMwMDAxOUU2QUZGNDk0NkFGQTgzMDZEMjBCQTdFN0FFNDY4REQ0Cis6MTA0REQwMDBFOEJCQ0JDNUZERDhEODY4RUUzNzMzMzUxRTVBMDg2RDExCis6MTA0REUwMDBCNkY4MTM4QjI4OUUyQ0YyMzI3QUM1RkRGOUJGQ0YzMjZDCis6MTA0REYwMDA2Q0Y2NzE2N0UzNzc0MzY4RDcwMzFEQkVBQzczM0VBMUMxCis6MTA0RTAwMDA3MUYyRDVEMkY1NjAwMzMyQjdERTYyQTI0RjM5OTBDRDkwCis6MTA0RTEwMDBFMzA4QUVEMEIxODFCQTM0M0FERDIyRjQxREUyNDcwNjkwCis6MTA0RTIwMDBGQ0U0NEFFN0YwMTU5NTBCMjhCQTRGN0Y2QjA0N0RCRTcyCis6MTA0RTMwMDA5MUNERTdCN0U4OTBBOTkzQzJGQ0ZDOEY1NUEwMUNCMUI3Cis6MTA0RTQwMDBGQ0Q3NjFFRDNDQkNERDMwRjlFMzkwMjMzRDk4REY4NjczCis6MTA0RTUwMDAxNTRCOUVEQzYwQzkxMzNCNUQ1QUYyODMzOUU0Q0MzOUIzCis6MTA0RTYwMDA3OTMyODdEQkU5RTdFNDA5QzgwRkZDRDQ5OTUzMEVGNUUyCis6MTA0RTcwMDA3QUI5QkVCMEUwNzFBMzYwMDYzOUYyOUUyQjZDOEJEMzc5Cis6MTA0RTgwMDAzOEU1Q0U4NUY4RThGMzk2M0IyRjY1RTcwQkZCODNDQjNGCis6MTA0RTkwMDA5RDIwRDIwNkYyNERCNjc1OEVDOEVGM0Q5Qzk5RkEyMDQyCis6MTA0RUEwMDBDOTQzOEZDQUQ3RUQ4OTMwRkE5RDAwQUNBMzNDRjdFMDI3Cis6MTA0RUIwMDAzOTRBNDZCOTVFMkQ1MUJDNDE5QzhCRTQ4QkVGMEYzRUM1Cis6MTA0RUMwMDBFQzBBNTM3RURBQzNDMENGRThFNzREMzA5Q0Y2RDlGOTNGCis6MTA0RUQwMDBDRjE1OUNFNzQ5MEZBRkZEMUFGN0NGMDBERkU4Nzc1REVDCis6MTA0RUUwMDBBQzFDQjJFNEM0ODdEOTdDRERFN0U4Q0JFNDcwNUFGNEFCCis6MTA0RUYwMDA5NTQ2Q0ZGNDdEMDE4QjdFQUQ3MTJEM0E2NkM4QTAwNTM1Cis6MTA0RjAwMDBFN0ExNTc0MUQ3MTg4RUE2Mzg3NTRDOEE2MzFDQzRDQUNFCis6MTA0RjEwMDAyM0IzQzY3QkMzQzdFRDkxOTFFRTU3NTlFREJFNjNGOTNDCis6MTA0RjIwMDA1REU3RTJDMTdBNDBBNzdDQjIxRUJBNkZDRUJBMzhGRDA3Cis6MTA0RjMwMDBDRDYxQkJENTM1NTU5NDRGQTAzMkNBMjc4ODk0QTAzRjg4Cis6MTA0RjQwMDA3M0Q4NjdGNzhCQUQ3Q0IwNjkyNUUxMTBDQTg5MERDMkIzCis6MTA0RjUwMDA0RUI3RjJDOEFDQkNCNEMzQkU1Q0VCOUNEOTk2OUZCNjRFCis6MTA0RjYwMDA2MTg0RkJEOTZGOUVDM0NGQzU3RkZGMDRCRkRCQjZEQTc4Cis6MTA0RjcwMDA2QjNFOEU3MjExRjA2NThBRUYzOTUxMUU5QTM1RUU3N0NECis6MTA0RjgwMDAwNTlFNUVGNzk4NEZGQTNFQzNGREM5MTdCM0VDNzk1N0ZCCis6MTA0RjkwMDA5RDNFQzMxMTE3RTA3ODlEQThDN0VBRTkzRTVFOTRERjA1Cis6MTA0RkEwMDBBQjcyOUVBQjhGNzRGRkQ1Nzk2RkVGRENGRDU3NzFGRTRFCis6MTA0RkIwMDBERUVDODlCRTRDRjBCRkM4RjNERkY0NzBGNDYwMjdGQjcxCis6MTA0RkMwMDBGQ0Q2NzNDMDZCRkUwNEM3RUYxNEZDM0QyREM4RUZFRDlCCis6MTA0RkQwMDBCQ0VGODlCRThEQ0ZBRjYzRENBRkI2RUM5Q0MzRDgwRUZGCis6MTA0RkUwMDBGQUZCNUYwNkE5MERGNEIyQTk5NkQzNkI1MTI1QTNFRjg2Cis6MTA0RkYwMDA4RjRGNkZFNUY1MUQ0QkY5Nzc0REZCNUZFN0Y3M0VCNjM5Cis6MTA1MDAwMDA0NUY5Rjc0Q0ExNUY5RjBDNzhEOTMxOUVFQkMzRkQ1NTU0Cis6MTA1MDEwMDBCQ0RGN0VCQ0RGODQ3QzVBQzFFREFFM0M4Q0RFMkIyODJECis6MTA1MDIwMDBBRUEzNTQ0RUFGRTlGMTRFODBGNzA3OTZDQTE0MTdEREQwCis6MTA1MDMwMDAyM0Y4MjJDMDRDOEE3MzZDQUJFNEYzRUNBQTkwOUYxMDY3Cis6MTA1MDQwMDBERkEzNTk3NDBCRDQzQjY3QUY5QzhDRjc0QkI2OEI3OEJFCis6MTA1MDUwMDBDQUJFQzUyQjlGQzBCQ0JFMEYwMkU1ODJFRTEyNzRFRjI0Cis6MTA1MDYwMDBCNUU3Rjg2RDE0MUY3OTY4NDk5RUI0MTJENkI4RUY2MEExCis6MTA1MDcwMDBFNkZDOTYyQUJGMkFGQUM1REMyMjlFMjRDQTg0ODZFNTZECis6MTA1MDgwMDA1NjUzRTRBREI2MzJGMTNERjY5ODg2RjFBNzY3MDY3OTNFCis6MTA1MDkwMDBERTZBRjdFQTY3OEVDRDQ0N0Q1QzI5NTM5RTU5RDdFMERFCis6MTA1MEEwMDA1MUVGNjVCOEVFM0E5RUQ3NTNBNDI2QTQ3NEZGQzVFQjIyCis6MTA1MEIwMDA3NzcxM0JBREU2QThDN0E4MUFERUZFOTlDMUEzNDQ3Nzc1Cis6MTA1MEMwMDBEQjAxRUY0QTlBRkYyNzBCMzhCQkQxOUY4MDdFN0I1REM3Cis6MTA1MEQwMDAzRDAzMzNBMUREREU3MTc5NTJDQzQ4QjUxQkVERTdGQzExCis6MTA1MEUwMDBEN0JENDQxNkRGQTE2N0Y0MUQ4NzRFRjM5NDA3RTU2NjJDCis6MTA1MEYwMDAyNzlFN0Y0MEZCRUUxQTJCMkZCNTg3RUU2NUVEOUQzMzgzCis6MTA1MTAwMDA3OTBFRTY4OTZGQkI4MTA3NEJCQkMyODdDODRGRUU5OTBBCis6MTA1MTEwMDBDREVEQjJCRDEyQjQ4MzdERDlEN0EyNUQ0RkY3OTg1QUI5Cis6MTA1MTIwMDA3OTlDMDhDQThDNzFBMjVFNEMwNDQ2QkM4QTczM0I0QUM3Cis6MTA1MTMwMDA3RDgxNzkzQjFCRkEwNjcwOUVBMjNBRkU3RDhCQTI5QTc2Cis6MTA1MTQwMDBDQ0ZENUYwOEI4QTlGRjNFNTc4Q0UyOUYyM0VEREZCRjdGCis6MTA1MTUwMDBGQTM4M0UzQkFCRjg3OTAxNjM3MThBNEJFRDE2N0UxNzQ2Cis6MTA1MTYwMDA1M0EzNDZGQTc3NDI1QjAyMUMzRjNCNURDQ0M0Nzg5OTVGCis6MTA1MTcwMDBBRjRFMjNCRDJFODcwREIyNDNGRDYwM0Y2MjNDNkU5QjU4Cis6MTA1MTgwMDAxNDVCOENGOTIxQjE0OTFBN0I5QzMwNjI3QUM3NjFGQ0FGCis6MTA1MTkwMDA2RTQyNUUxOEU5NkY5Mzk0MDhFMTc3OTU2M0UzNzg3QzNCCis6MTA1MUEwMDBGQjY4NjQyN0REQkIzQTAwNzYzNDg1ODM1OTgyRjQ1NDZBCis6MTA1MUIwMDA3NzM0OEZFRTQzMUQ4RDU0MEY1MjdGNUY4NUVFQjYzNEVBCis6MTA1MUMwMDAwQUU2Q0REMzg3MjIxOTlCNzREOUE2QUQ2OEQ3NzQ0RTUxCis6MTA1MUQwMDA5MTc1Q0NEQkVDOTRFQUEzMzg1RTJDRDc0MzcxNjRENzhECis6MTA1MUUwMDA5NDc5QjQ3RkFFNTE3OTUyQkEzRUJBRDFDRkY1QzJEMERDCis6MTA1MUYwMDA4NEM4OEQ3RTU4NTc2OENBQTk1QzhDNUI2RUFGN0Q2NThDCis6MTA1MjAwMDAxRkVFREYyM0Y3N0I4ODhFMUVBOTFEQkMxQkU3RDk3RjBECis6MTA1MjEwMDBGNkFBRTM1MUUyNEI3RTVFRjc2OEVERTk1MkI0N0I3Njg1Cis6MTA1MjIwMDAzNTlEQ0E0NUZDMTU2MzdDMEVGNDYxNzEwNThGQTNBMTAxCis6MTA1MjMwMDAwNjI0RkI0Q0VENjEzNzAzMUU4QkRCMzQ2NkE0RTk2MzY3Cis6MTA1MjQwMDAyRkUzRTc3OUY4RTc5QjRDNzI4RkZFOUUxOTNDRTU2OUU2Cis6MTA1MjUwMDBDMUYxOTZCMEM0QTUwMTdBRUVDMTc4OTYyNTY3OEFFQkI0Cis6MTA1MjYwMDA1OEEyMDBFNEUxRkUxNUVGQzQzMDRGRUU5MTg5MDU3NEI5Cis6MTA1MjcwMDA4RkIyNDhCQzI3QzkwOUUzOTU4OEYxRkFERjc4NjUzRDBDCis6MTA1MjgwMDBCNjdCQjRCQUMwNDA3OTUxM0MzMDM0MEY5NTQ0NzFENUU3Cis6MTA1MjkwMDA2OThBQjM4NUFDRkIxRjUxNjNGRkFENDQ5RjMyN0RBNzg0Cis6MTA1MkEwMDBCMjM4RkNDRTVGRTAzQTAyQkUzRUQyNzNEMDlFRTI2NkQ4Cis6MTA1MkIwMDBDRTc1MDQyNjlBRjdGOTAxOEZERjk0NUE1RjFEMTc0Q0JCCis6MTA1MkMwMDBGOTYzRjQ4N0ZDNzgyRkJGOTc1RDlDRjUwRjczOTVCNDU1Cis6MTA1MkQwMDA3Q0RCMTIxMTE3RDgyNDBEQ0UyNkJCRjQwMTZFODc4RjBDCis6MTA1MkUwMDA2NTcxOTI3M0M1NTVCMUJCNzlCRTZEOTRGMjZEOURGMzM2Cis6MTA1MkYwMDA2RUY3OUZEM0FGMTJEREEzQ0U2RjEyRjc0QUY4RUZEODQ3Cis6MTA1MzAwMDA5NDg4REZCMTcxRDI3RDI4OTQ1RkQ1NzE1NUFBQkUyRkU0Cis6MTA1MzEwMDA3QThBRThGRjY5Q0RCODJCRDNGNzFFRjYwOUI5QjA0OUYwCis6MTA1MzIwMDBGODYzRDZGODYzNzNGOUY4NTZGRDUxOUREM0UzRDMyRjk0Cis6MTA1MzMwMDBFNzVENUYwNUVCRjlBQkI2QjI0OTE4RkZEQzMxODIxRkMwCis6MTA1MzQwMDBCNzMyQzBFOTJGN0IwMDJDMUNEMDAzRkRBRkJERTZDNUYyCis6MTA1MzUwMDA3Qzk2QTc2NUI2MEFFNTU0N0Q1NUMyOTNBQzEyNzg4NDU1Cis6MTA1MzYwMDBGMUM5MTc4M0YxMEY4NEJGRUQ0MUI5RjRENTQwMjVDMUQwCis6MTA1MzcwMDBCNTYyMkE4RjFCNzQ1NjNENDhFNzQwMjE5REVCMURFNDIyCis6MTA1MzgwMDA0Rjk0RUZCRTUwNENDMkI4RjdGMjFBQTYxRjEyRjE5NjE2Cis6MTA1MzkwMDAxOEUwOUZFRUNFQ0IyQzk1RDdCRjNEOTdGQzFDRTAxNUI3Cis6MTA1M0EwMDA3RUFGMDY3MzkzMjY4QkRGOUYyOEM3NzNBMjRENzc4QjQyCis6MTA1M0IwMDBGQzU5MTlGMUREMjlFNjAxQkVBNTc5MEUxNDg5NzFFRUJCCis6MTA1M0MwMDBFM0Y2M0ZGQTE3RDhCRjVDQ0M1MzVFRjdEREFGQTExRTAyCis6MTA1M0QwMDAyRkQyMzk1REE0RTBFQkYzMTA3Q0FEMzIyM0Y4RDRDNEI2Cis6MTA1M0UwMDBBQkU4ODc2RTlGNTQ2MDIwREQxQzA4ODVERjZFODJGQTczCis6MTA1M0YwMDBGMjQ1MkFDNUUzQ0I2QjM4MUMwNzVBNjVGQTNEMjA3RjdFCis6MTA1NDAwMDA5RDc2OTBFRThGOTlBMDJGRDJGMDY1ODg3OThCNkExMkU1Cis6MTA1NDEwMDAxMjlFNkIxOUFEN0M1REQwQ0U4QjcyRDEwODAzM0M1MENGCis6MTA1NDIwMDAzN0M0QkFDRUMxM0Y0OTIzRjg4QjNDODM5ODVCNzQwRUQ2Cis6MTA1NDMwMDAwRjJCNzEzQ0EwREY5NTc1QkM5RjNGRDRCNzA1RTVEODE1Cis6MTA1NDQwMDBGMjNBMEUzN0U4Nzc4MkE3MjhBQzFENDQ3RDVGMTRFMjVDCis6MTA1NDUwMDBFMzJEMDdGQzFDOTI1MjcwNjU1QjcwRDVDOTk0N0Y1NTkzCis6MTA1NDYwMDA1NEEzMUQ0NDNGMzg1QkMwQjczMkNDRTFFOTdGRkRENDgzCis6MTA1NDcwMDA4MEM0QzczMzcwQkM2QzAxNkZCNjU4M0YyNUVDMTYwODZBCis6MTA1NDgwMDBGRDAwRTMzREU1NEFENEUzQkQ5QzUzNTM5ODcxODhDRkJBCis6MTA1NDkwMDA0NkYxMkNFQkZEQUU1NkMwMDNFMEM3MkZFNjYxQkJERDQ1Cis6MTA1NEEwMDBDNDRGQjBDNEQ4QzczMkZGRkQxMDIzMkQ2RTUxQjE1QjdECis6MTA1NEIwMDBCM0Q1RkQ2MkZGNTgxNzdGNEU3RTFDQTk0NDVFOTc4NUM5Cis6MTA1NEMwMDA1RkI3QjJDQURFOEZENUE0RDVDQkYwN0UxOUE3RjdGNUFBCis6MTA1NEQwMDBEN0YyRjM4RTAzMTNCODdEODQ3RUM3MzlGRTQ2M0E5RjE4Cis6MTA1NEUwMDA2MjNDRDYxNUM0RjcxQUU5QkI5Mjc2RkJCOEM1QUQwNTg4Cis6MTA1NEYwMDBEMzUxM0UxNDBGM0MzQzRGODZGNTE0RERDQjY0MjU4NzE5Cis6MTA1NTAwMDBFODU5M0EyN0ZGNjBCRTZGQUY0OUQwRkREOUVDODE0ODFBCis6MTA1NTEwMDAxRUNBQkI5MkQ2QkNFOUY4RkRCN0VDODEyOEQ1QjMwNzBCCis6MTA1NTIwMDA1QTREOUU3RjA2MkU0QzFFRTZFQkE1Q0Q1MzhBNzI5QUVECis6MTA1NTMwMDBFN0QzQjE1NkFEMEZFNTVBNkQzQTlDRjBCRUU0RTU5RTU3Cis6MTA1NTQwMDBCOUQ4N0ZGM0REQUY4QzQ2RkUyRDcwRjRGN0U0NzBGRjIxCis6MTA1NTUwMDBBMUY4NjU2ODE1QzBGOTRGQUZDNUY2NTY3QzI3MUIyMTI5Cis6MTA1NTYwMDBDRUEzRjI2NTJDOEI3RDIwOEZBMTJDMTFGOTc3OTZCQ0YwCis6MTA1NTcwMDBFODlDRjBDRUE0QTg0RkQwMEZFNUUzQjE0NEJBOURFRjZDCis6MTA1NTgwMDAyQ0ExRkQ3OEQxM0UyNjlEQjdERDY5NkEzNzUyQkM2OUYyCis6MTA1NTkwMDAyMEMwRTM0RDAxNjFBRkY2MzA2MzNGRTlGNzFBOUVFRjlCCis6MTA1NUEwMDBFMUMzRTdBMDNGRkE2QThFNEVBN0ZERUM2MzYxQTRFNzcyCis6MTA1NUIwMDBFMkI2M0ZCOUQzRTVGNUNEODE1MjcxMEYzQTQxNzRBRkYwCis6MTA1NUMwMDA5NTY0RDFGOTFFRjAzMTdEREZGNDgwREE0QUU3QUM3REQ1Cis6MTA1NUQwMDA0NUZDNUNGM0U4OUM1NzI0QzQ2N0QxNzMzQzRGREJCMkI1Cis6MTA1NUUwMDA5N0E3RDcyNDQyRjhCQ0VCRDVFODY1QzQ5RjIzRDg5RjgyCis6MTA1NUYwMDA5NkJERTk1Q0NGMjVGNTBGOTIzQzE4MUI2NTVFM0M1RkJDCis6MTA1NjAwMDBGM0FGNTYyOThGQjUyNDBBNzA1NUExNUMwMDkyMkUwNDgxCis6MTA1NjEwMDBGODZCNjJFQjkxNkU4QzI4QUYxQkFCNDVCOTBBQ0FBQjM1Cis6MTA1NjIwMDBDMUJFNUQzNzUwRkU0QjU3NkFEQ0FEMTU2MEQ3QTJGRDk5Cis6MTA1NjMwMDAzNEI4REI3MzAzREEyQkFENjA4RDE4NjgyRjlFRjJFMDZGCis6MTA1NjQwMDBGNzU0QkE1QkE3RTcyMzlFOUY4OTU4RjY2NTQyQzJGMURCCis6MTA1NjUwMDA4QjdFNkE5MkJENThBQjZCM0FDNjYxMjZCODEzQTNEMzUyCis6MTA1NjYwMDBDRkU5MEVDQzc5QTc5QUJFMjczNkZGRTJGMkM5NDZEMjFGCis6MTA1NjcwMDAyNzA4OEI5Q0E2NDdGQUFCOEU5MjdFNzlDMjNGOUVGNDk4Cis6MTA1NjgwMDA5MEE1NTcyQzNENDIyMzgyN0NCOTQ1RjA1MTk3OTFGMDZCCis6MTA1NjkwMDA0ODI0QUY4MDc3MDFDRTVCNTA4RTAwMURGQjhCQjgzQzU5Cis6MTA1NkEwMDAwNzM5Q0NFNTlDQTU0RkVFRTY3QURGOTI5RjE1NjI5QzA4Cis6MTA1NkIwMDA1QjUwREU0MkJGRUVEQTI3NzI2RjQwQjkyMkU0QUMzRkE2Cis6MTA1NkMwMDA2NENDQzRGM0I5MEEyMTVGOTkxQTkzNzBCRTAzNTNGOEVFCis6MTA1NkQwMDBGNzJBMDMwRTc5NUFEMUNBQzdFOTBBMzFBMjI3RDA0MzYzCis6MTA1NkUwMDAwNzkxNkUwRTE0MjVFODlFRjg4MUQ2QTM1MkZBM0Q1MzE5Cis6MTA1NkYwMDA0QkRGMDU1QTkzMENGNzdGNUMxRDk3ODNFMzg0NUNGREI5Cis6MTA1NzAwMDA4RURGRTBGNEU5RTE3MkY1OUNERTEzRjI3NkFCNzk5NDdBCis6MTA1NzEwMDA4OUVGQzI2NkNDQzNGQTdCQTFDRjdCMkEwRTkxNUZCMDIyCis6MTA1NzIwMDBFREQ2NTM4NDRGMkIxRTFBMTJGMUQwRUVBQUI3RThGRDI2Cis6MTA1NzMwMDBGNjI4QkYwN0IwQ0I5QzNFODdFMDhGMkNENzI4RkZCNDVDCis6MTA1NzQwMDBFNkU4OUMzMkY0Mzc5QTk2NkI2OEQ3OUQwQzE0NThFN0JDCis6MTA1NzUwMDA1RkRFODU2ODRGQjZBRTIyRkJENzI3RjZGMUExMzAxMzg2Cis6MTA1NzYwMDA3RUE3NDY3RUQ2N0Q0QkJGM0Q4MEZENDNFMDE3NDkwNkIwCis6MTA1NzcwMDAzNkVBRjNCODkxQ0VGMTdCMEE4OEVGRTgyMDc1RjZENUNBCis6MTA1NzgwMDAxOEY0MUQwOEU3M0FCRTE3RTBERkE1RjU0NzkzMDNFM0Q5Cis6MTA1NzkwMDA2ODVGNjVCQUQyRTNBQjYxRTQ3NzJFMDdCRjBFODdEREExCis6MTA1N0EwMDBBRDg2QkQxM0UwRkRFRTI2NTk1RkNGNTJGREZGNTc4MDU5Cis6MTA1N0IwMDBFN0EzNERGNEYzN0IwQTNCMTc5RkRFODI3MUJFOUQ0QjNFCis6MTA1N0MwMDBDNTc3Q0UxQ0YwREZEN0Q4RTc1MTY4MUU4QzA5NTAxRTc0Cis6MTA1N0QwMDA3M0M2RUZFRDU3RjlCM0Y4RjcxNzZBRkEwNkQwOUUwRkM0Cis6MTA1N0UwMDA1NDcxQjg1RTBDMTgxQ0VGODMxQzhGM0QxMTk5Rjg2ODNBCis6MTA1N0YwMDBENzYwQjUxN0Y1OUREMzZFN0MyNEZCREQ0OTNDQUZDNTYyCis6MTA1ODAwMDBBRTZGMkU1NDJGNzZDOEZEMDlFRUJFRUI0OERFN0Q1M0Y5Cis6MTA1ODEwMDAyNjc5QzUxODk3NzcxMjkzMERGQzVEOEQ5NjAwQTdBNzgyCis6MTA1ODIwMDAyQTIxQUYzQjVDODlGRDk4NTdEMEYxQUM4RkFEMzc1MjQwCis6MTA1ODMwMDA3NDUxMjRDNkVDNkM5NTMzRkU3RURBQTE4MEMyRjc3RkVBCis6MTA1ODQwMDBGOEJFNzNGQjQxRUNGQjkzMDIwRjE3REE3RjBDQjNBMDk5Cis6MTA1ODUwMDAzREREMTdERjM0RTYwRTk0RTNBRERDN0ZFRTRCQkM0NTU3Cis6MTA1ODYwMDA3OTQ3NDVCMzE3OTJERjczRTRFMEE1RTQwRjE0NTU5OTI3Cis6MTA1ODcwMDBCNkRGRDdDQzFFQzE2RkFEQzhGMTlDMzcxRTMwOTIzQzRECis6MTA1ODgwMDBERUI3QkE4M0ZDRUM3RDgzOTlFRkM1MTRFNEYwQkNCNEI5Cis6MTA1ODkwMDAzRTkwOTdGODdEOTM5MUU2RDc3MzM4RkZGRDUzNDBEMDQzCis6MTA1OEEwMDBERDlDNzdFODdCMTk2OTdBRjY2NUExNjc0OURGMTZBQjVECis6MTA1OEIwMDAyQ0E2QTRFNTM5NEMxMEY4NzNFQTRGQTZDNjNEOTdENjNFCis6MTA1OEMwMDAxMDlEMTNGRUY2ODlGMzhCODc0Qzk5RjA2RUQxMzk5RUFCCis6MTA1OEQwMDAxRjIwNUU2MTFEQTZBMDQzM0FERkU4NjE3MTBGRjI0RDAzCis6MTA1OEUwMDBBQzg5RTc3OTM4RTE5RUUwOTcyRjZBN0RDMTFDRUU4NzhECis6MTA1OEYwMDA5QzlCNEZGOEVCMTNGRDFDRUU5REI1RjdEMzNENDc5OEVECis6MTA1OTAwMDAyRjg0RjQyMUZERTAzRjRFRDM3REE4Njc1REY0N0JCNjg0Cis6MTA1OTEwMDAzMzlFNzUyNTMwQTY3NUU3NDFGRTdCOEJGMjhCNUU4MjQ4Cis6MTA1OTIwMDBGMzlGMEZGM0VGQUIyN0ZDREMxRUZCQjVDRTdGQUZFODk4Cis6MTA1OTMwMDBBQkVFQzFFRTJGNDA3REU4NTk4NTkxM0QxOTA3QzUwNUI1Cis6MTA1OTQwMDBGNDdBNUFEMDJCN0I4RUQ3NTc3QTc5RjVDRTgzRkRDQjVDCis6MTA1OTUwMDA3MEJDNTVDRkYxM0NDQzNCOUZCRkVEQzYyRjQwRkRCNjkwCis6MTA1OTYwMDAwMTE3REQxOUI4RjNGMUY1REExOEE4REYxRTk3RkFCMEMwCis6MTA1OTcwMDBGRTlCRTk4QzdFRUYzMzk2QTc1MTlDRUIzNzgxQzE4MjY5Cis6MTA1OTgwMDAwNTgwRUYwRkQ2Nzk5ODcxMTlDNjQ5MDcwQkU2MDMxRUZCCis6MTA1OTkwMDBFRTg4M0YzRDEzRkJEREYxOTQxNDQ2QjY5REYxRUNFMzM4Cis6MTA1OUEwMDBBRjhDMDZCOEVFRkM4NjQ0Rjk1RjVGMzk5MjZEQjMwQjlECis6MTA1OUIwMDA0RkMzNTJBNkMxRkIzNTA3RjlFRjQ2REVDNjdBNjYyMjExCis6MTA1OUMwMDAzRUVFN0NCQzk3N0VGRkQwQzJFNzA3RUIyQTk5OTFGNkFBCis6MTA1OUQwMDBCQjYxNzc3RUUzNjlGQTNEQzNCQkJFMjVEMUVGMkJERTA5Cis6MTA1OUUwMDAyNUYzN0I0NEZGRkNCQzc3RDE2MzNFNUNERjdBRUQ1MjRDCis6MTA1OUYwMDAzRkFFNkJCMzg2RUQ2RThCQjc3QzE3NTM5QUVFODgxRjY0Cis6MTA1QTAwMDBENDY2QzJGQjNCMEUxQ0Q0NTZBMjVGRTY2NkNEQTg3RkNGCis6MTA1QTEwMDBCRTcyRTQwQTlCREMzOUJENEYyMUZGNjA0REFFODdFRUJDCis6MTA1QTIwMDBENzMzOUYxOTlBMzc2MUY4M0U3RkIwOEVEOUUwQkFDMzU5Cis6MTA1QTMwMDA4QTEzQTg3MTZENkU1QTdCOTdDRUZEREZBRjFDNTE2QzM3Cis6MTA1QTQwMDBGMzU4NzY0MEVDMThENzBCQjFCRkY1NTNGQ0RDREFCRjQ2Cis6MTA1QTUwMDAzNUMyRUZCNkY2NkY4RDE1ODg1Nzg3MjY2NzgyQTcxQjZDCis6MTA1QTYwMDBGNzAzRTBFOTU5QTc1M0I5NzM1RDg4Q0FEREVCMENEQTk3Cis6MTA1QTcwMDBBN0JEODg0NzI4QkIwNERDODFBOUFDMUVCRkNGMUYzMDVGCis6MTA1QTgwMDA3OURBNzE1RTkzNTk4Rjc3Q0JGMjIyQkM1RUIwMjQ0QUVCCis6MTA1QTkwMDA3RUM4NDg3NjhDNTVFRTc1NDU1QkQwODdFQ0RDRDEzRkVGCis6MTA1QUEwMDA0QjA1QkI2N0FGMTZCRDFCMjM1RjdBQzdBQkIzMUFBMDBDCis6MTA1QUIwMDBGRTM3Mzk5MThEMzkyNDZGQzIwNkYyOURFNTlGN0YzREY3Cis6MTA1QUMwMDA4N0NCREQ0REEzMzVDMkY3REVBNTkzMUY1MzJDRkYwQjBCCis6MTA1QUQwMDBFMzdFNEI1NzNFODFGNjA0RjRERjlFNDM3QzFCQTZFRjJBCis6MTA1QUUwMDA3NDhERDRCRjYwNTk5REFEN0ZDMUIyNTU1NkZGM0RENDcyCis6MTA1QUYwMDBERjczRkVGRTdCOTc1RDYzOUY3RkQ5MUQ1NkZGNDcwOENFCis6MTA1QjAwMDA3RURGRjlFMTJGNjg5RTZBOUZCRjc5MzVGNUZGQUE5QjdBCis6MTA1QjEwMDBFRkVGNTBBRTg3RjJFOTNCQkNFMTg0OEJGQzY3NDZERkQ4Cis6MTA1QjIwMDBFNzUwRjMyRTNENDRERjRGM0ExNzY3MUEzNDUxQ0ZGQTRFCis6MTA1QjMwMDA5RUNBQUQ0NjM5OTZBMkEzRTlERkM0NzVGODgxQkJEMkVGCis6MTA1QjQwMDBFOTI4QTcyRUNCQzY1N0I5NjY5RUFEOUUzRjdCOENBRDhDCis6MTA1QjUwMDBGREE4NDg5OUVEN0RFMUEyQ0IxRDc0RTlEMzI5MEY5NkVDCis6MTA1QjYwMDA3MTdENkE2MjlDMTNFMEQ0QzZGMEVGMzVENThGRjFEMDE5Cis6MTA1QjcwMDBGQUVFN0ZEMTRCRjVGQkFGRTFFQkJCN0Y4QzhGRjg5ODUyCis6MTA1QjgwMDA3NDE3RUNGQkZENUFGNENBNzRGQjE4RDYyNTYxQzhFQkY4Cis6MTA1QjkwMDAxOTNEM0E5MDUzOUJGRURDOTBGMTc5OTZDMjdGQzcyRTU3Cis6MTA1QkEwMDBDQkNERjVFNUU2RDJDOThGQzVEMkYwQjlBNTE4RTgwMThECis6MTA1QkIwMDBFQTZGRTc2OEI2MzhDRkU2RTI5NUExOTZCNDc5MzYxNTc0Cis6MTA1QkMwMDA2QjhCMEU1NUYxRTdCN0EwMURBRjQ3RkUwRUU3RkJBQUEyCis6MTA1QkQwMDAzNjc0MjlEQUFGQ0U3OURDNjU3NUI2NzkzQzI1QUI2OEM5Cis6MTA1QkUwMDA5RUE0NjMxRTc3QzkyQUM3M0M5RTQ1ODdDNDczMzFDRkU0Cis6MTA1QkYwMDAyOUE0OTM5MUU2RDk1Qzc2OEQ3RDNEMjU3N0QwM0NCRjc1Cis6MTA1QzAwMDBDNjc5NkFEM0Q2NTM3Mjg3NjM5RTJDQkUxRTc4MkVFNjYxCis6MTA1QzEwMDBGOUNENzlENzUzM0VENUJFOUVCMUFCNjk5RTdGNzdDQzg3Cis6MTA1QzIwMDBFMzFFQkJEQTMxOEY4RkU2QzFFNzM4MEYyQkUyN0U5NDlCCis6MTA1QzMwMDBFNjFFNUE0OUZCRkYwMzJGQzMzODkwRTY4RUZFMzU1RDAyCis6MTA1QzQwMDA1MkY5N0IyRkM1ODVBMTk1ODlFREZFMEZGOTQzOEREMkMxCis6MTA1QzUwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDEyCis6MTA1QzYwMDAwMDBCRTU3RDA5Nzg1NDQ1QjY3MEREQkVGN0Y2OTI3NEY5Cis6MTA1QzcwMDA3NzNBRkI0MjA4Mzc4MDEwMzRDNDBFODQwQ0UwMzIwREIyCis6MTA1QzgwMDA0MTFFM0E4MEMxMTU1Q0EwQzM5MjNERTk4ODM4MEY0Nzk4Cis6MTA1QzkwMDA5RDM0MDQxMTExQjU1MUQ0QTBDMDM0MDgwRUY4NDAwMzRFCis6MTA1Q0EwMDAxMzIwNDBDMDA2RDRDMTE5RDQzOENGNzE5OTA1OUI0NTQzCis6MTA1Q0IwMDA4MjEwOTMwNjUxRjFDREUyNUZFNzU0RERGNEJEOUQwRUY1Cis6MTA1Q0MwMDAzMENCRkZCRjc5RUY4RkRGNEM1MUI3RjZCM0Q1MzlBNzkzCis6MTA1Q0QwMDA0RTU1OTM5QzA0NDI0NjExNzIzMDhFQTYyMzA4RjkyNjM1Cis6MTA1Q0UwMDBDNjdEQjVDMzRBQzhGN0YwRjc0MzQyRkZCQzg0MjRGMzJFCis6MTA1Q0YwMDAzNDg1OTAzOTg0RkZGOTE3MEJBNDkwOTA1QTMzQ0JDRTlBCis6MTA1RDAwMDBERTNDMjU2QjAxQTQyRDQ1NjkyNTA1RjQxRjJCNkNDRUM3Cis6MTA1RDEwMDAyQjE0NDIzQTVCOEE4Q0IzNzJDM0ZEQTlFOTFDOUY3Q0E5Cis6MTA1RDIwMDAzMjk4QzNEQTdFNEZDMkUzNzhDNzkyOUMzQTNBN0U1OUUyCis6MTA1RDMwMDA5QzAzRTdBM0U2NEZENkQzQkM4OTkwNjNGNTA0RDM3NkUyCis6MTA1RDQwMDA5OUNDMjhBNkRGNEZENEQzMDkwQ0Q2Q0U3NzAxQjYzQjI5Cis6MTA1RDUwMDAyOUQxN0YyNkQxNzQ5NUUwRjcwQTc0NURDQjNGOTBDOUI1Cis6MTA1RDYwMDAwMDFDRTZDMzFDQkE4RTNCRjgzMkU2Rjg2MjA5MzE4N0E0Cis6MTA1RDcwMDBFN0UxMzExMTE3QjQwQkVEMzJGOUQ3MDlGMEQ1RDVDN0VBCis6MTA1RDgwMDA5MDQ2OTNDNjQ0NDJENEY5RjYyN0U0OEZGQjI2QkQyREY2Cis6MTA1RDkwMDBEODMxREJDNzMwOTI5MEJCOTY2QzdEMEJBQTdEMjQ5NEUyCis6MTA1REEwMDBGNDlENEJENzNCQjU3OUI5REM4N0U2M0JFNUUwNzRBN0JBCis6MTA1REIwMDA1NUQzQ0Y1NEY5MThBQ0RCNENGRjgzN0VBNkI5Njk1RThFCis6MTA1REMwMDAzM0ZFRERFNUZBRkNCRDQ0MEFFN0IzMDlCOUNBRDE5RjQ5Cis6MTA1REQwMDBFMzgzOEZBQkY4NjVDMEQ3MUQ3NDRERTkxNDg1Rjc0Mjk2Cis6MTA1REUwMDAzQTBDOEExRDg4QUZFOTBFRDY1NjlEOEZFNzIxOTkwNDlCCis6MTA1REYwMDA2MDNFNTIzMDk5RTQ0MjQ5MzJENjczNDMzREE1RTdGQ0Y4Cis6MTA1RTAwMDBBNkNCNjY1NzMxQzVFN0Y0MDc0NTg0NjNFNDdDODNGQjgyCis6MTA1RTEwMDA2MjVEODYzQzlBMzY3RTI1OTNGRTk3OUVGRjhDRjlGQTRBCis6MTA1RTIwMDA3MkUyNjVFM0E5NzA1NUU5RTBDRUE5NjM5RTNEQTFBMUE4Cis6MTA1RTMwMDA4RjY5RUUxQjlGM0RBMTgzRDMxNDVERkVERUJBNjlCQTY0Cis6MTA1RTQwMDBGQTMzRTY5N0U4Q0E0QkJDMTVCQUYyNTk0QkVFRDNFNUU0Cis6MTA1RTUwMDBFN0Y4MUVENEQ1MkY2QjVDQTAyQkFGRjAzRkFFMkJBRjc1Cis6MTA1RTYwMDBEQUI4NUM5N0FGNjk1QUE5QUJFRjY5NTlBQjJCMzdFQzNECis6MTA1RTcwMDAxQjcyMzNBMTcwNkNGOEFENDg0QzE0OEU1RjVCNEYzRUMzCis6MTA1RTgwMDA3NTREMTJBNDkyMTNFMDdFQUEzRTBERTlGQTc0QkQ4MjBDCis6MTA1RTkwMDA2OTJERDBERTI4RTA5RkUxNjYzN0M1OTMyNzI2NTQ0QTU2Cis6MTA1RUEwMDBFMjA5NzlDNDc3RUQ5MjI1RDdEMkJDOTE5NjhGQTZENDFBCis6MTA1RUIwMDBFRTFCQkJDNDlCNDlDODEyODc4Mjc0MkYzNjFBNDk4MEQ3Cis6MTA1RUMwMDA5MkFBNDAxMkJBRTkzQTI0NkFDQTgzOTcyODZGOTQ0ODgyCis6MTA1RUQwMDA2MDc4Q0Y3MjMxMThGRDdCOTcxMDFBOTQ0MUQ3RTFGRDlECis6MTA1RUUwMDBENDQ0MzYwODNERjkzQ0NDOTdBNDBGNDlFQkJEQkNDMzY0Cis6MTA1RUYwMDA0MENBOUIzNDcyNjc4M0MzODBGMzQ5NzY4Q0RERTBBMDhGCis6MTA1RjAwMDBGNDUwNkQ2NEZDNUVCRDJEN0QyQ0IxNDMzRTMwQThDRUI3Cis6MTA1RjEwMDA3QTkxRjE5QUU4NjQ1MkExMUZDNjJGMTVGRTNFNjFGRUU4Cis6MTA1RjIwMDA0NUZDMEREMEYxRkRFMDM4Rjc3QTA3MURBRjYzQkYzOEFGCis6MTA1RjMwMDAxNUU2NDEwMjA3QjM2RTFEMEFFM0JCMzZDMDc3RDI0MkI1Cis6MTA1RjQwMDAzQjQ5QTdGQzVERUY3QUY2QzQxNTg0N0M1MjNGMDFEMzMwCis6MTA1RjUwMDBERkQ1MTczRjdCNDIyNkU0MEZGNTUzMzE3RkE0REU4RDVBCis6MTA1RjYwMDA2OUIwQkUxQ0QzNjNGNTc1NTg3RUEyN0UzRUU2NEZENjVGCis6MTA1RjcwMDA3QjMxM0Q1NUJGMDREM0QzRjUzRTJDRUZBODZGQzQ3Q0Q1Cis6MTA1RjgwMDA2N0JEMUY1Mzk1MEZBODNDOUE1MTBDN0M1QTVDNkMwMDVFCis6MTA1RjkwMDAzRTlENkIyMUZDOEZFNUNGRjEzNTg4RjRERjZEQzhEN0NFCis6MTA1RkEwMDBDRTM0RTBFQjczRDY2RjA2NjU1MDdBM0JGNzA5MjVBNjMxCis6MTA1RkIwMDBFQ0RFRTExNDQ5NzdCREUzQ0Y2NTAwRkM5NUZBMjlGMUU5Cis6MTA1RkMwMDAyNEY2MkNCN0M0MzBGQzU4MEM2NDAyQTFGMkU3RjEyQjg0Cis6MTA1RkQwMDA4QzQ0QTJFM0M3QkM3MUQ1M0EzMTFCQkY0QjQwM0E3NDI1Cis6MTA1RkUwMDBFMzcwNEVCMTQ1RTk3RjIwNDE3QzVEMEE0RjZBRkQ5MzI1Cis6MTA1RkYwMDAyRkZFQTk3MDY2MkVFMEE3M0ZEMjQ5Q0M0MUIxOEVFMUI5Cis6MTA2MDAwMDBFRDY1MjdFMEVENTJGMDkzMzg3RjQ1QzI1MTc4RTM4RjdDCis6MTA2MDEwMDA1OTQxNUFGRkNCNjQxNTlFNkQ1OTg0QTZCNzNBOEE0RkYxCis6MTA2MDIwMDAwMTFEOUM2QjM2RTFCQUNFQjVDNkZBMDlGNEUxNDg0MkNGCis6MTA2MDMwMDBCQUU4MUQ2RTZDMUU1NTFCMkQzRUFEN0NBODY5OEFGNzEzCis6MTA2MDQwMDBFOUU1NDVCQTRGMkIyRkNFMUQ3QUQ5MEU3QzNGMzc0RDRGCis6MTA2MDUwMDBGNDlEMTgwRUY0RTFFMkY0QzFFODRFRURCRkE2MjlEQjkxCis6MTA2MDYwMDA2N0Q1RjVBM0NGOUZGMzA5MTM5QTUwQ0UyQjcxQjcwREM3Cis6MTA2MDcwMDBFRDdEOUU3M0QzOEMzOENFRTk4RDAzRTI2MERDRDNGNUUxCis6MTA2MDgwMDA2NjFGOENEMzUxRUZGMEIxNzFEMzdDNUFCQUFDOUUxRjBFCis6MTA2MDkwMDBFQjNCOTExODlFNUY2RkZERkVCM0U3NDc0ODMzMzk2RUM3Cis6MTA2MEEwMDAyNjA4RkFFRjA3RjQ1RUJGNTc3QzQ4RTc4REM1NDAxRjBFCis6MTA2MEIwMDBBREYyMzdCMEVGQzRFNEE4RkI4RTg0NzlCNTVGNEY5MzlGCis6MTA2MEMwMDBFODM1NUQwRERGMzdFQkM2QTNFRDk0OTMyQTlFRkE1RkFBCis6MTA2MEQwMDAwQ0VGMTIzOUE5QUU5M0NBQzlBMTU0NzYwMzlENTI2MjNFCis6MTA2MEUwMDA0NjNDQkI2OThGNzFCNEJGMkVDOUJBNDRBMEUzOThFMkE1Cis6MTA2MEYwMDAxNTJDRjdDMDQwOTQ5RTZBQ0M0MUEzNUI0MTcwQjc4MUQ4Cis6MTA2MTAwMDA5RTM1NzNBNENBRjdDQTlEQkZBNzI0RjdDNUFGNjVCMjcxCis6MTA2MTEwMDAxNENBRkY0QzdCQTdFNTMyMkY5RDREOEFFRDg0OEUzNzQ0Cis6MTA2MTIwMDBCM0I5NkEyMkM4QzkyRjc2RkM4OEVCMjlCRTQyNThGNzVBCis6MTA2MTMwMDA5N0M0MzAwMUY4RTQ0QkYyMUJGQjcwOEQ1RTM2MzlERUZDCis6MTA2MTQwMDBDOEU2Qjc4NEVEQ0Y1RUZBMUZBQzhGRUE2OUJBRkRCQTM0Cis6MTA2MTUwMDBBQzUxOUYyRjI1QjdBNDAwM0Y5NEFFOTA4OTlGQ0VCRDMwCis6MTA2MTYwMDAwMkY2N0I3NUREOTRFRkFGOEY2NzdBNUMxOUE5NUIwQzQzCis6MTA2MTcwMDA3QUNBNTI5OTRDMDU3Q0NGNzQxMEE5MEY5NTEzMzUzQjAwCis6MTA2MTgwMDA1NzE3OTZEMEZDRURGMTA2QTRBQkQzNTRCRjUzQTgxQzBGCis6MTA2MTkwMDBBQTQ4NjA3QTRDNjU5MkRGRThBMkU1Qzc5Qjg3REY3MTY5Cis6MTA2MUEwMDAwRDgxRjZGRUM1MjBEN0JDMzZFMkRDNDA3QUMyN0RENjMyCis6MTA2MUIwMDAxMkZERkMyRTM1RkZDOEY5MTJCMjEwRTdBQkNFNDNFRDRECis6MTA2MUMwMDA1NzlEODdCODUxNzBGOUEzRThCM0IzRTI4NUIwOUU0Q0YwCis6MTA2MUQwMDBEM0ZCRTNGNUZBRUI3Q0M4NkJGNERCNDcyMkYyMEIyMzJECis6MTA2MUUwMDBGMjJBOURDODlDNEU0Q0YxRUVGOUYxQzk0MDE3QTFGMTdECis6MTA2MUYwMDBBOEE3MTE0QTFGQjlFMTdBQzY3MEJENDcyRTU2Q0YwNDMxCis6MTA2MjAwMDBGNTQ0QUNCN0YwNjJGNTJDRTFGRTFFOEI1NkFGNjZFN0E1Cis6MTA2MjEwMDA5NjFENUU0QTRGOTVBRjNGNjcyNzU0OUU3RjIxRjk1MkU2Cis6MTA2MjIwMDA5Q0Y0N0JGNTg2NDdFRDAwQTc1MzkyRDcwRUY4RkVDMjhCCis6MTA2MjMwMDAyRjRFODgwNkFGN0REREYwNzI1OTA1QjAyMzkwQjQyOTRBCis6MTA2MjQwMDBEQzVGN0Q2MjMyRTg0OURGNkM5MDFEMjJBREUyRDk2OEU3Cis6MTA2MjUwMDAwQTk4MjhGREQ2MzY1NzRDMjQ3OTk4M0ZDQUYyOEY5RDZDCis6MTA2MjYwMDAxNTIxREZBMkM3NjdFNUNGOUY0QjUxNkM4ODA3QTY2RjRBCis6MTA2MjcwMDA5MzAwRUExREI1RUIzRjFGMEY3MkRDNDM0MjQ4ODc5MTQ0Cis6MTA2MjgwMDBFRDYwRkMwQjA5QzhGNzI1QzZCODlFRTU3NDlFQTgyN0VCCis6MTA2MjkwMDA3QjM4OUY3OTlBOUYzODJCREEyMUJEQjExREY4Q0MxMzNBCis6MTA2MkEwMDA0MTQ3RTVEREZCNEJEMDU4NENFN0YzN0FCQzJERTlFNEUwCis6MTA2MkIwMDA1NTM0RkIwM0YyMDM5MDA3MkE1Qzg4OUZFOTE1MEQ5Qjc4Cis6MTA2MkMwMDA1RUM4M0I0QUU3RDVCMUZFRDc3NjIxNTcyQjQ3MTgzRDJDCis6MTA2MkQwMDA5RTZCOUFGNUIzREQ0QUVGRjJBNjkzREI0NUUxNzY3RTNECis6MTA2MkUwMDA2Q0E3QjQzMDNEODhCNEIyQjQ1QTBFRDg0MUVGQUM1RTVFCis6MTA2MkYwMDAyQjNCMjlBNTkyRUEyRDJGQkZGMjIyRDg2QjlGOUFEMDczCis6MTA2MzAwMDA1RUFCREFGMkQ2NDdBMzY5QkU2QUFCOUMzNDkxMkRDNzY3Cis6MTA2MzEwMDAyQUE0ODRGMUUzQTFGRjlCM0YyQzhDOEZDQTVGQkM2NTRDCis6MTA2MzIwMDA1NDg2QjJFRjBGMjc4NEYxNTJCNTc1QkY5MTBDRUQwOTc5Cis6MTA2MzMwMDBDN0EyQTZGREM2QTAzNTBBN0U5QThFOEUwN0JEQTU2MUFFCis6MTA2MzQwMDBEM0I3NDZCMEJGQkVEODI3OTBENEVDOUVFRENCRDdCRTE2Cis6MTA2MzUwMDA4NUZCMjJDMDA5RjFDOUYxRDU4REJGMUU3ODBCNENERTNCCis6MTA2MzYwMDA1RDgwRjUxQzIwMkYyRjg1MzcxRjk3RDMzNTNCNkQyNDdCCis6MTA2MzcwMDA5RUNFQTNGQzc3MjZGRjQ0QzBFNzZCRjdEQjYxM0RFREMzCis6MTA2MzgwMDA1MjFEQTNGM0Q1OEZBNkI4RThGOEU1QjIzN0M1ODEyOTI5Cis6MTA2MzkwMDBGQjVFQkVFNjAxQTRCRjMyQTEyRUM1ODFGQ0U0NEEzN0Y0Cis6MTA2M0EwMDBBMEVDRjZBNkMzM0FFN0FDQkExREQ3NTk0QURDNDg4NzM5Cis6MTA2M0IwMDBFNUFCQzU2MjNGNERCRjk2Qzg4NEFENTFGOEE0MzA4MUFFCis6MTA2M0MwMDBGMTQ5RkIzQThBNUNCQUNFNzZEMEZCNDFERkZFOERFODFDCis6MTA2M0QwMDBERjgwRjZFOTdEMDRFNEZGMDM3Q0NENzRBN0M0RkNENzFECis6MTA2M0UwMDA2Njg2MkY2QjgyNDFCNTE3Q0QzQUZBNURGRjU4MUJFMEU4Cis6MTA2M0YwMDBFOTc0NUY1NzJBQ0M5M0MyQzFDQkUxMjY3QzRGRkIxNUQxCis6MTA2NDAwMDAzRkI4MjE5NUUxODkyODUyMjE2RjQ3Rjc4MzIyRjgwRTgyCis6MTA2NDEwMDBGNURCNjQ5NzI1NEZENzhFQ0I0RjM2RkUzQzNFM0U5RDM1Cis6MTA2NDIwMDA3NzBDRUM2RkVEMjk1NEJGOEZCMkJFOTlCMDNFREMxN0VDCis6MTA2NDMwMDBFOTNFQTdBMTMzMERCRjMzRkU1RkZGMzhFMzc3OTVGRjM5Cis6MTA2NDQwMDBGRDUzMjY0MEY5RjkwRjE5MUY0MTNCRDg0RkU4QkMwMjE0Cis6MTA2NDUwMDBBOTU4QkVGRjM2MDFFNTgzODkwNEEyRjFGOTdBOTlGM0MwCis6MTA2NDYwMDBCOUJFREM0M0Y5MTVGQzA0MkE5REQwRjk0QjQyOUM5NjM5Cis6MTA2NDcwMDA1RUU4MzgwOTg4MDdCNDU3NEE1N0QwRjY1QUZEMDZDNjcxCis6MTA2NDgwMDBDNTdBQzZGMDc3Q0RCRTUyQzZFNTQyN0UwMjk1MDdCMTA5Cis6MTA2NDkwMDA2MTc5NDA1NjI1NUY5NjFFNTkyRDEzMkZBODlDRDU5RkQ0Cis6MTA2NEEwMDA5QUQwMUVBRkRFMjIxN0MzRkFDRjZDM0VGOEQxNUQ5NEFFCis6MTA2NEIwMDBDRUNGMzRBOTdDQUI5N0FCOTE3QzVCQkU2RDgzMDA3NDZGCis6MTA2NEMwMDAxQUM5Qjc2N0NBRTkyRTFFOEQ2RkU5RjdBODdDNUIxRTUzCis6MTA2NEQwMDBGQzdGMkE1NzU1Rjg0RDRCRDBDQjUzMkExRkZCODEwQTFFCis6MTA2NEUwMDBEMTFCMUMyM0U1RTNEN0EwNkYyNUY3OTQ4RkY0RUY0MzZFCis6MTA2NEYwMDA1MkQ4OTMwRTU1RkE1M0U5OEU2QTcwRkQ0MEFFNzdEM0E5Cis6MTA2NTAwMDBBNzRBN0ZEREY0QTlEMjVGRTQ3QUY1RjA4QjJDRUYwRjc4Cis6MTA2NTEwMDAzNjEyQTU5M0UyNUQ1NEEzQTNGOEFDNkUxNUZDMjZFNEY1Cis6MTA2NTIwMDA3M0VGREI3RDBBMTA0RTJFRENERTg4RUZFRDNFNDlEQTlDCis6MTA2NTMwMDBCQzNGMjJERjE0NTFERjE1OTEyRjhFQThFRjhFQzhEN0Y0Cis6MTA2NTQwMDBFOUVBNTdCNzFDMzQxMkM0N0Y0MDU3Q0YzNEZGMjU3Mjk1Cis6MTA2NTUwMDAzQzhBM0RBOEVFM0Y5RUU2QjM0NjJGRDA0NTY2QzgwODZDCis6MTA2NTYwMDA3MjRGNUU0ODU1MzdGMEFGRUQxNUQxQkZENkE1ODRFQzFDCis6MTA2NTcwMDAwOUY0RkJBMzE2NjZBNzc1Mzk3ODNFOUVFNTQzQzlDNkE0Cis6MTA2NTgwMDBDNTIwRjdENEVGMjEwQjQxRkJCQ0FCMzg2NDhGRDdEOEMzCis6MTA2NTkwMDBGRjQ3NUI0NUJCNDJDQjgzN0UzMjQxRUI0NzA4Q0ZBNzI5Cis6MTA2NUEwMDAwMUYxMUQyNEJEOTUzM0JGNjE1NzhDM0QwRkM3OEJDOUM5Cis6MTA2NUIwMDBGMjAzRkRERDIwNUFCM0U2ODNCREU3MTM5RDk0N0NDODRBCis6MTA2NUMwMDBFQzA1NzdEQTA5QTVCM0FFRDYwMTM3NEZBNURGRTdCQ0Y2Cis6MTA2NUQwMDAyMzgyQkE0REQxRTM5MkQyMjlERENDRTI3NDdDOEE3ODUxCis6MTA2NUUwMDA5RkJGOTZBRTZGNTYyQkQzQzM2NzJGOEI0RUY3OTVCQ0NDCis6MTA2NUYwMDA3RUE5NzU5RTExRTQyQkQ1QTM4RjY5RkRBMjk1NjQxOTIwCis6MTA2NjAwMDBEMjVERjlBQTg4RUZBRDNGNDJGRUE4OENFMDBGMzdCNzA0Cis6MTA2NjEwMDAxRkY2QUFGQzkxNEZGMjUxQkUxMEMyRUM1RjJFOTc2RjhECis6MTA2NjIwMDAxMDczNkY5RTRBRjFEMDc1NDgyNDI2MDVFQzU5OTEyQ0MxCis6MTA2NjMwMDA4Njc1NkUxNkZDRTAyRjIwREU2NEU0QjM1QTEyNDI3OUIwCis6MTA2NjQwMDBBOEMyQTkwM0Y4Njg3MEVGNzJBQTYzRkIxRjBCMUYwMkIwCis6MTA2NjUwMDA3QUQ5RjFGQkJDOTc2OERBQjFFM0QzNDE3QjIwQkZGMzcxCis6MTA2NjYwMDBFM0FDREY5MzlFRjU4QkY2N0QzNzFERjZCM0FFN0QyNjRBCis6MTA2NjcwMDBGNDhCNzVFREZCNjVENjQzOTBERjZENDJCRjU4RDc0MjcyCis6MTA2NjgwMDA5MzBCRjhDMEJCQ0ZFNkJGMDJDQUZCMzJGQkExNjFFRkEwCis6MTA2NjkwMDBCNzc5NDFEQzVGMTcyMURFNEUyNTMwRkJFNTVDRUI5RkNGCis6MTA2NkEwMDA4RTA4NDk5MEQyNTU4MUZFQjAyRjE2RjlDOEIzREI4MjBGCis6MTA2NkIwMDBGNjdBRDdERTZGMEJEREQ2N0ZERTdBNkE4REM0OERGNDc1Cis6MTA2NkMwMDA2ODIzNTNCNzAxRkRDNjMzRkZCMTY3Q0ZBODk3MTdEMDMyCis6MTA2NkQwMDBGMTZCOUFGNzFCNjdEMUYyQTIzN0ZFOTIwN0YyQjM2QjA4Cis6MTA2NkUwMDAxQkQzOEIzQUU1RTAxQUUyMjRFNEFCODRCMkM3NjVGMDMxCis6MTA2NkYwMDBGMzAxMzM2NTEwRjI3NEUyQzYxQkJEQjlEMUUwQzJFMDBDCis6MTA2NzAwMDBEMDQ1RTEwMEVCQTI3MDI5MDdCOURGMUIzQzYyMTI4RDc2Cis6MTA2NzEwMDA0OEVGRkY3QUYwMzgzQjlEQzlCNTFGMTBGMDBCODVFMUJCCis6MTA2NzIwMDAyMkI4RDg3NzlCREYyQ0UwRkFEOUY3N0RERkU2ODFEQzUxCis6MTA2NzMwMDAzOUQzQjQwMEY1OTU0QkFEN0I0OEUyQkYyQTFERkNCREIzCis6MTA2NzQwMDBFQjE2MDI5N0IzRUUwOUZGQjJGODY2RjRGRjVFODI4MkExCis6MTA2NzUwMDBGMzhDRTQ4MzlFNzRCRUYzQzc5ODdGQ0RFNkM0Rjk1RUU0Cis6MTA2NzYwMDAyNkZGOTdGRjZGQzNGQjM2OEE3N0ZCQTVGMUZFRDhGRkE0Cis6MTA2NzcwMDA1OEJDQkZDM0YxNkU3Mzk4NDA5RUVERkQwQkZBNTlENTFFCis6MTA2NzgwMDBGNTVGNkFEREFGRkMwRjVEQjdBQUM3REY2NEE4M0IzQ0NECis6MTA2NzkwMDA4NUQ2M0Y0QzAyMkI4QUU5M0NERkNDQkNFMUMzMjlCNDRGCis6MTA2N0EwMDBGNDk3QkRFODI3MUYyNTMyM0JGMDk3QTA3QzgwRkQ5NzJBCis6MTA2N0IwMDAyNkY4MzdBMDVEQzFFQ0E2MjJDMkY2RjVBMjlDMzJENDIxCis6MTA2N0MwMDAzNzhBNzI5RTQwQkQ4MTQ4NzU4N0YzMjkzQzZFQ0E5QTBDCis6MTA2N0QwMDBFMzVDOEFENTg3N0RFMkE2Rjk3RjRCQkZDRTg5RkVDM0Y1Cis6MTA2N0UwMDAwOEZCQjFFOENBMUIwRjgxRkQ3MjcwMDE5RDFGMURFN0Y4Cis6MTA2N0YwMDA2MDVGRDE0MTM1MjczMjJFNTMwRTk4RjIzMDNEMEFFOUMxCis6MTA2ODAwMDBEQkY2MDk1ODZGOUM1NTZGM0Y0RDA0QkI0NzYzMEZERUE1Cis6MTA2ODEwMDBBOEU4Q0JDN0YzRkUyNzkwMDM0OTEyRUQ3RjgyNTMyNkU5Cis6MTA2ODIwMDA3RUE4NDc3QzhCQjRFN0NFRTMyM0ZBRDk0Njc1NENBREZFCis6MTA2ODMwMDA3RkVENkY4NTlGMzk4OUQ5OTlCRjI0NzMwRkU3MDNGQ0RBCis6MTA2ODQwMDAzMjY1RjQxRjVFMTI3RTAwNkY4NDU3QkU3RjI5RTg1NkMyCis6MTA2ODUwMDA5MjEzRTE3NzUzNDYwRDg3MjdCM0FCMjVERTVFQjIyRTQ4Cis6MTA2ODYwMDA2RTAzQkU5NTA4QjU4Qjk5NUU4NkY2QjQ2QTE3NUYwQTBCCis6MTA2ODcwMDBDRTg0REJEQjEyMUY1QTg1QkI5NDQ5RUQ2RDdEQkYwOENBCis6MTA2ODgwMDAxNzE1MUY3RjJCMUU1NEZDRkRCREY4RjgxREUwNjM0NDU3Cis6MTA2ODkwMDAxODFGOTlFNzFEMTJGMDY3MTFCNzA3QzY5RDZGMTMzMUQ2Cis6MTA2OEEwMDA5RkU5OTRGMEZDODVEQjAzNjNBQ0YxMTJEODAzRDc0OTcwCis6MTA2OEIwMDAxRjg4QzA5NzY1RTY1RDk1NzA4RTYwNzYwQTQ4RDc4MzFECis6MTA2OEMwMDAzQjBDNjhFRjk4MEIwNDg0N0I0RUEzODRGOTBGMEM4RTZECis6MTA2OEQwMDAxMUEwNjg0RkJFNjZFNzk5MDcwOUY4OTM1RDQ2QTY3ODUwCis6MTA2OEUwMDAxNzMzN0ZGRTlGQkZGRkZFREE0MkYwQUJCMEJGMzJGQTM0Cis6MTA2OEYwMDBCRjQ5RDQxRTlCQkQ4QTA0NjJFOEZBRTY0OEM0MEIyMTU2Cis6MTA2OTAwMDAwRTczN0MwMjM5QTZGMzA3RUJGM0YwNzc3RDRBQjg5RjRDCis6MTA2OTEwMDA0QkQ1RUY0RDhFRkNCM0QzOUQ1NDZFMURCQjgyOTA1RDY1Cis6MTA2OTIwMDA5MDMyNjdCRkE0QjU5QjdGRDBDQUUwRTUzOTRDRkNGRDJGCis6MTA2OTMwMDA1MTJFQjhDNDYyQ0QzOURCQkYyNzMxRjlCMUYzMEZEQjdCCis6MTA2OTQwMDA4NjgzRkY2QzRDNTc2RTFDOTNBNzA1MDZBMDRCMEZCN0IwCis6MTA2OTUwMDAwQkNFMTEyNTBFRTIxNUNFQjUwRTg4QzM3M0M0NDNBMjJCCis6MTA2OTYwMDBDRDFEQzU2RkIzODlEQkQzRkY1MThGNEU2NUQyQjU5RTY4Cis6MTA2OTcwMDBGODQ0QjA5QjQ4MDhGREI3REVGNUU2QThFN0MxMzM5M0JECis6MTA2OTgwMDAwQzlDNkUzOERFRTg5RjU4MDhFNzE2NkNGQzM5QjQ2OTM5Cis6MTA2OTkwMDA5QzE2NkYxRDEzQkY5MEYyN0FFMjAxRkU4RTY5Q0U1N0VFCis6MTA2OUEwMDBGRTUxRjg4MkZEMEVGMERENjQwOThFMkY4RTIyM0ZFNjQ3Cis6MTA2OUIwMDA3MUY4NEQzRUYwMURGQTNCQUY2QzVENkIwMEZBQkQ3Mjk1Cis6MTA2OUMwMDBCRDQxNzczRTU5OURDNEVEQUU2MTY0MThDQzZCRjIwMUI4Cis6MTA2OUQwMDA4QkFEMDBGMDcyNDg3NDVBRThGQTNDQUQ2NzhERUUyODMyCis6MTA2OUUwMDBFNzVDOTFGMDg0RkVDMThGRkU2QTEyM0IxN0Q4MjMzNzEzCis6MTA2OUYwMDBDRDAyQjhFRUY5RDI0Q0JDMTRCRkJCOENCRUFBNjhGMzcyCis6MTA2QTAwMDA0QzRBNjE3MjZFMEU2OUJBM0YyRkZCNUYwRkJFNjNCQUNDCis6MTA2QTEwMDBBQzgxQjE2MDY3QUUyN0RDQUYxMTQ5N0YwNEU5RjhEQ0Q3Cis6MTA2QTIwMDA0NkUyODdGRDE0RUM1MjkwMEJFNzM2MTNEQ0NGMjk0ODgxCis6MTA2QTMwMDA5RTA0QkI5QUYyRkIwRkI1N0U5QUMxMkQ1QkZGMDNGNDU3Cis6MTA2QTQwMDA4MERBNTZDMTYxQTBFNUI1NTJEMDA4RkU1ODRGNEJCQzY0Cis6MTA2QTUwMDAwOEZCNkVCRTQyNUM3ODNFMkMzOTg2REVBNkUxOEI1NzgxCis6MTA2QTYwMDA5MzI0ODRFRkMxRDE3QkVFODY3MUJGRUEzMDEyRDA0NzA4Cis6MTA2QTcwMDA1QzZGODZFQ0IwNkY3RkQ1M0ExQ0Y5QTBCNzc1RkRBMkFDCis6MTA2QTgwMDA5RTU0OEU5M0ExMUYyNjBGMjNFOTIxNzc3MzhDMkU3RkFFCis6MTA2QTkwMDA4REU4Q0UwMEZFOUE2QzBBQ0U3MzQ2QzFERkM0NjQ0NjEwCis6MTA2QUEwMDA2Nzk3MkRERkZDRkY5RkM5QjcwRjU1RjlFNjE2OEIzNUE5Cis6MTA2QUIwMDA3Qzk0OTRDQ0U4NUUyM0RGNTJBM0M5QjdCOTgyOTIwQUQyCis6MTA2QUMwMDA3MDlGQkI3NzQwMkFFMDc1RUUzQjcyNzIzNEY5QjZBNTMxCis6MTA2QUQwMDA5RTlERkZCRDRFRjkxMUQyQUU2NjJBREZBRUQ2QzhCNzc1Cis6MTA2QUUwMDA2NjJBREZCMjdCQjZGQkVCRTVDQTM3RkY3RjBGRkY2RDhGCis6MTA2QUYwMDAwMUY5MTY2NUJERjExQzdFQUE3Q0NCNkIzRDhBRjIyRDk3Cis6MTA2QjAwMDBBRkQ5NDAxNDhEREZDOTlDN0MyOUY5MjYyNERGMDZGQTExCis6MTA2QjEwMDBGMDIxRDkxOTFCODU3RUI2NzBGREZCNzUxRUI3MDdFMzAyCis6MTA2QjIwMDA4MDlDRkJCNzY0NzY1RTdBQjk3MjJFM0Q4NUYxQzkyNUVCCis6MTA2QjMwMDBFNURDN0YxMzlDNTUzOTM3NzczQjk1NzNEOUQxRTg5MEM1Cis6MTA2QjQwMDBDOUI5QjlCQkE4OUMxMzgwMUU5OTlDOUJCQjk3MzBGRjA5Cis6MTA2QjUwMDA1Qjg0N0NDQkU5MjFERjA4RDZBRjBEQjBGNjlFOTZFQ0M2Cis6MTA2QjYwMDAxN0VFQTFGRDBENzNDOTRFMzNBRDNGMkMyQ0VGNDY2OEQ3Cis6MTA2QjcwMDBFNUREQkYyNTRCMDhFNzFFRjJFRUQwRTVDOUJCRUQ1Q0I1Cis6MTA2QjgwMDBERTUxMzlENjFGRTQ2QjI0N0QzODVCNjM3NEY5M0RBMzc1Cis6MTA2QjkwMDBEQTM3RkYwMkY4RTU1RDExQ0YxNzNGMzBCMDczQTBGNzg5Cis6MTA2QkEwMDA0NkI1MTcwMDdEQURFNEYzRjE3MEZBRUJBQ0Y3NjJGRjg4Cis6MTA2QkIwMDA0NTZGQjJGNUQ1NkM2NkZFRUZEQTY2QTYxRkQ2QUUxNzQ2Cis6MTA2QkMwMDBGRDBBRkRFN0Y4RDFERjE5NjFGRTE1N0IwNTkyNEFGMzU2Cis6MTA2QkQwMDA1MzRDQkVFN0FEMjA4MzdGMkUxMzc2MkU0NjI2RTY2QjAwCis6MTA2QkUwMDBFODYxRjZDODJBRjRFMzM3NThFQ0VCMDhFNUUzRDkxMjdDCis6MTA2QkYwMDAzMTgzQkZCRUNBM0FGRTBCRjBEMzU3OEQ2NEZFRkQyQTI3Cis6MTA2QzAwMDBGRTlERjBCODAxMzUwRUIyQjRFNUJFQjdGQjkwOUVGMTIzCis6MTA2QzEwMDAwMzkzNEQwQzhGOTM1RjE2RkM2QkIzMjE3RTQ5NUY1RTJGCis6MTA2QzIwMDAxNTExRkZGODE0NUZFNzE0MzE4ODcwMjFFRjhCNTFFM0UxCis6MTA2QzMwMDAxODlFOEE4NEM3MjEwRTBGQkE3RTFEM0NGQzQyNTQ3OEYwCis6MTA2QzQwMDA1MDhDNEVDQzRGMDlBRkJGRTJEREUwNjJGMEU3NTdBQ0FECis6MTA2QzUwMDAxNEYwREM1Nzg1NDdFNDNBNTVGOEE4RkVFOTJBREVERTUxCis6MTA2QzYwMDBEMzdBMUY5RUZCNDdBRTVGODU1RjhGNzVBQkYwOEM1ODY0Cis6MTA2QzcwMDBCRjJGOTk5RjdCRTU5M0UxMTA0RjQzRTkwMUU1ODdGNzJCCis6MTA2QzgwMDA1NzE0MEU3NDlDRTIzMTU3QTQ2QUU1RjFGMzFDMEVDMzRECis6MTA2QzkwMDA3RDYzOEFEMjA5QzA4REQ0MDFGRDk0MzZERUY3NzYzQTQxCis6MTA2Q0EwMDA1REZGODg0Rjk0NjFCMDRENUUzM0RBRTQ4NjczRDQ0RDU2Cis6MTA2Q0IwMDA5NjEwQ0EzNzk1QkVEQTU1N0FFN0ZERUNDOUE4MUI4QjRBCis6MTA2Q0MwMDBGNjdBOEJFMDAwRkRDMjEzQjAyMDFDM0Q5NENFMkNCNEFDCis6MTA2Q0QwMDBDQUMxOTVERjhDRTc3MDc0OTg5MEFGRjhCRTQzRTE2RTNGCis6MTA2Q0UwMDBBMEY1QzdBQkZCMTA4NTNCRjBDREYwRDZCMzc4OUU1QjJCCis6MTA2Q0YwMDA0MDQyNzg1RTUyREIyODM4MDM3NDFEQjUyRDBDNUVBQTI1Cis6MTA2RDAwMDBCQ0E1N0Y1NjJEM0VBMkQwQTMxNDhEMUUwOTM4ODkwQjM5Cis6MTA2RDEwMDBDM0ZCNjAxNUFGMzdEOUU0RkIwOENFNjEyNjUzN0E1RjE5Cis6MTA2RDIwMDA0QkMyNzhDQ0ExRkYwMTFFMjNGMUE0QzJGMzUyRjRGOUE3Cis6MTA2RDMwMDAzOUQ3M0ZCNjAwMUNBRDAwQUYxMEQzQTMwMjc0NUZCMENCCis6MTA2RDQwMDA4NUNCM0Q5MjU3MDdDN0EyMTcyRjMwRkFEQTJCMjg3MDUwCis6MTA2RDUwMDA5RUQwMEQyN0EwNTc1QTNFQTI5NUQxMkJDMDREMDFCODA5Cis6MTA2RDYwMDBCNzk2ODg5MDJGQTVGMDREQ0NFRUI5NEUzOEJGRDRGMjJGCis6MTA2RDcwMDA2RkM1REVBM0FDRkZENTgyOTM0NEExNUY3NUREQkREMUE1Cis6MTA2RDgwMDBFRjNGNEFCN0VEMTE3NEZCOUUyNTc0NzgzOEQwRUQ1RTY1Cis6MTA2RDkwMDA4MUY5MTE1QUUzNzVFNzhFQTYxNDc2RUVCRUM5NDJFOTcxCis6MTA2REEwMDAxQkNFQkJERTkxOURFQjk0OUU3QzdFODFDMzEzRjQ3RjUyCis6MTA2REIwMDA0NUUzOTcxQTAyMEI4MEIzQzA4RDY2OEMzRkMzNzlGNDBDCis6MTA2REMwMDA2N0ZBQTU1NkJFNkVCMTkwRTREQjBBN0FFRkRGQzhFRDM0Cis6MTA2REQwMDA4MURFRjQxQjM1M0YxNEM2MDNCOUQ3NDJDN0NCMDk4RkY4Cis6MTA2REUwMDAxNzI5REY1NTdCRkY1MkVCNEE0Q0Y5QzdENkQ1MURCRjlCCis6MTA2REYwMDA0OURBRjBGQ0M5MTRFRjdFMjgwOUZEM0YyQzNFRTkwRTZDCis6MTA2RTAwMDAxRTlGNDQ2NzgwN0E5NkE2NUU1QUYyODhERUVCOTEzNDI0Cis6MTA2RTEwMDAzM0VFQzNGN0YzQjhGODFCNDQyQkYxRDI3NTdDRTU5MjNGCis6MTA2RTIwMDA5MTRFRTkyRUZEREI2QjQxMkU4RkE1RkIwODREQkUzQTNFCis6MTA2RTMwMDAzQ0UyRTM3QkIwNUNDNEYzQTg5QkRGNERBQzgxNzNCQTRBCis6MTA2RTQwMDA5QjQxMThEMUVGMzdFNzBCQjhGRjdFMDA5RDhEMDIzREM3Cis6MTA2RTUwMDBENjRDNUMyNjRFQzJCNDdDRTQwRkUyRDE2Rjk0QkZERTA4Cis6MTA2RTYwMDA1N0E0NTA3RTFBQjZEMURGMDBBOUIzMjg5NEY0MUVDMEVGCis6MTA2RTcwMDA2RjhDNDgwMDdFNkRBRUM0MjJEOEJGRUVGRjlDRTQ4QkMxCis6MTA2RTgwMDAwQUVFQjNEOENGQjA0MzI0MTlFQThENzYyNUEzMzkzMDYyCis6MTA2RTkwMDBBQTc5NDUxMUY4NDdBNzFDQjQ1QTgxQ0U3MzU2MTk4OEIwCis6MTA2RUEwMDA1QjQzQkZBMzg5QkYwMUZDMzZBMzRFQjg2RTA1RkUyQjIyCis6MTA2RUIwMDBBN0ZBMDJGODlEQ0I1QkQ3MzZEODIxQkY0QTcwMkFCNDE3Cis6MTA2RUMwMDA3RjhGRDczRERFNEVFN0I1QTVGMUVDRjhBQjgwMEY2OUJCCis6MTA2RUQwMDAzREU4QzZCMzhBRDVGM0FDMTc5QzEwMkE1QkRBQkExQzFFCis6MTA2RUUwMDBFMzcxNEFENzBCQzQwMUY1RkQwMjMxQjM3RUZENjZEQUNBCis6MTA2RUYwMDBFRjk2NTVCNDNEQ0Q5NzQxN0JFODc3RkREOTBGNkYwNUVGCis6MTA2RjAwMDAzRTNGMkNCMkY2OUJEOUI5NzUyOTZEQTcwMEJEQUVCRjI3Cis6MTA2RjEwMDAwRkZCQUI1ODI1OTAzNERBNUZGOTY2MjZGRkNCMEZDQjE5Cis6MTA2RjIwMDA0RTI4NkZERUJGMTJGN0IxODk3NEJDRjQ2QzkwRjc4MTA0Cis6MTA2RjMwMDA3MTkwMjdDMzA1MDdGQTNCMzNFRjQyQkVFRUUyN0M0RDZBCis6MTA2RjQwMDAzQUE2MzJCOTIxRjAzQ0I3MUI1NEJERTk0MDBBOEIwRjc5Cis6MTA2RjUwMDAyRTc1MkUzMDI2RDI3RURFMUI5OTlDMEQ2MTAyOUU5NkU4Cis6MTA2RjYwMDBCMzc4MUU3RDgyQzJEOTRERTFGQzAxOEZFNzM4MzhGMjNCCis6MTA2RjcwMDBCODMxQThEOTdGM0U0QjE5ODA3NDM4QkI2NTBDQzYzOTJGCis6MTA2RjgwMDBDQzIxQzUxOEU3MzA3OTE0RDNEN0RFQkZDRUUyMTdFODlECis6MTA2RjkwMDBCQ0RFOTc0Mzk5RjBGREUwNzUyNkQ0N0YzQkI3Qzg3OEY3Cis6MTA2RkEwMDA1RURDRDkzNzg4RkVFOUY2NTUzMjgxNzg4RDg2NTUyMjI4Cis6MTA2RkIwMDBDQUM1RjZDRDZDMUYxNzU3REYzRTNFMURFMEI3NDE3MEM2Cis6MTA2RkMwMDA4MkRDM0NCOEFBQzgwOEZCNUFCQjVGQzBGNjQ1QUIxRkMxCis6MTA2RkQwMDA0ODYxNzYwQzkzODdBQURENTZFQUE4RDBFRDFGOTFGMjlFCis6MTA2RkUwMDA0RDk1N0YzNTFDMEU5MTcyQUU0NkRENjcyMkU0NUMwRDM3Cis6MTA2RkYwMDA5QzM3REIyMUQ1N0ZGNzEwMkI5MzdGQTBGNzAzREUwM0FGCis6MTA3MDAwMDBERjIxRkRENjFFOTYwOUU4RkRDMkYxOEVGMTE4QjcwNTA1Cis6MTA3MDEwMDBGQjI2MkQxRkQ1MkFCOEUwOUNCRkZDMTM5MzFGRjU1NTA2Cis6MTA3MDIwMDA3RkM5OEM5RjgwRkNGRUQ0NDQwNDA1RTJFMDI5RENBOUUyCis6MTA3MDMwMDA1QzE4NjkwQUZERTE1OUZBRkQ4QjBGQ0MxMDIxNDNFOTc4Cis6MTA3MDQwMDBBNDA0RTFBQ0M2OEIxNjZDNjBGMTJEMDUxRkFDNDgyOTc5Cis6MTA3MDUwMDAwNTM4OEM0QjQ0Mzk1QkQ2MjgxMkI3NDY1RTdDMjFCODg0Cis6MTA3MDYwMDA2RUJEOEJDOTYzQzcwNjhEM0MyQTMwRkE0QTYxRkY3MjM4Cis6MTA3MDcwMDBBNDMyMzlBODZDOTAyMTY2ODQ2Q0U3RjI4OUVBRDMyRTk5Cis6MTA3MDgwMDBEMDFCMkE3NjJENEYzMUQyN0E4Qjc5M0M0OEM1REVFNTZDCis6MTA3MDkwMDAyOTU0MzQ5MDA2RDhCNzY4RkQwQTIzRUJCRjYyOUZFMEZECis6MTA3MEEwMDA1OEFCRTk1RjZEQUZGNkE3RjY2M0RDQTVFRjY3QzA1RThFCis6MTA3MEIwMDA5RUJGQ0M3RUQ0NzlBOEUzRjdBNjhGOEZGQ0NGMEIyQjk1Cis6MTA3MEMwMDAwNERBREZDOEY3NDUwQzUyMUU3OTdDRTIwMEVENzk4N0JGCis6MTA3MEQwMDA5QUFBRkVEN0MyMEYwREM0QTU4MURCQzgzRkM0MTA5NzgyCis6MTA3MEUwMDA4NjJFOUE0NzUwRkVBNjc4OUJENEMyRjRBMUU2MTE0NzlCCis6MTA3MEYwMDA4RDM1MDU5ODc3MDAzRkQ3NzIzRjZERUQzODc2NkVENUE4Cis6MTA3MTAwMDA5Q0ZGQzEyMkUwRUY4OTA1MDJEMjAxRjFCQThEODk0OUM1Cis6MTA3MTEwMDBBODA3Mjk3MEJFNTA1NkMwREE5N0QxRjZDMDc3Q0QyQjlDCis6MTA3MTIwMDAxOTFGNTI3OUEwODBCQ0E4NURCNTdDM0NENjVGMkYyODgyCis6MTA3MTMwMDBEMDdGRjNEQTEyRENFN0NCNDc4QTA0Q0JENzFGNDVCREZCCis6MTA3MTQwMDBBM0JDRTU2ODEyRjAyQkU1Q0YxNUIwRUZENjVFNkI3MkVECis6MTA3MTUwMDAwMDdGQTg3Q0E3RjJGMUZCMzI4QjBGMjE2NkM3NTBCOEU1Cis6MTA3MTYwMDAwNzUwOTZBMjQ0RTU1RkYxMzA2MTc2RUE2NjE5RjlDRUUwCis6MTA3MTcwMDAzMzkyRjFFNUZCNUI0NEU0RTc4M0Q3REQzOTFFRjhCMEQ5Cis6MTA3MTgwMDA3MzgzRDAwQjFGNTMzRTJEMDhGM0E5Qjg5QUM1RUI5NDE3Cis6MTA3MTkwMDA2RDYyRjZDQUMxNTU0QzNFQjQzNzMzM0RCMTY4QjUzQzVCCis6MTA3MUEwMDAwOUYyNjVFRkNBODRGOUJEOTgzRTc4QjlGQ0RDNDM0RjFCCis6MTA3MUIwMDBEOTE4OUQ5RjdCRTNERkM5NzJEMzQ3RjdEM0Y5RERGQzc0Cis6MTA3MUMwMDAxQTlEQkYxMjg2NTdEMUY1MEZEQUQxNEY3RkZEMzQ1QzdGCis6MTA3MUQwMDBBRjJBODc0QTI1MTZDRjM0REJCNzgwQzVGQjRBMkNFRTkxCis6MTA3MUUwMDBFRDZGOUU1N0M0M0MxRTRCQjE4NUU1ODgwOEY0MUVDRjU5Cis6MTA3MUYwMDBFMkE0RDdDQjQ4RUY5MUZDRjg4RkYyRDEzRjhCQUZCNzI5Cis6MTA3MjAwMDA3MzNBNTJFNzIzRUU2NUVEMjFBRTJDNDBFMUY4Q0JDRDg5Cis6MTA3MjEwMDAyRjYzNUNFQjk3QUYxRTlEMEM3OEFFREE0M0U5OTdBRTE3Cis6MTA3MjIwMDBCNzczQjM4RDA0NDA2RTQ5N0VEQzZGMkE5QjQ1OEMxRjdCCis6MTA3MjMwMDAyNzUyQTBGMDU2OUI5NjNGNTk3QzUyRDVFQjM2QTQ5QjIzCis6MTA3MjQwMDBDQTZEMkNFRUI0NzJDN0YxM0M4QzE3NTkxOEMyQjgyQjFBCis6MTA3MjUwMDBFRkFCNUNERkY0MDZGMzgwQkUyQjI1MTYyNzE1QzlFRkQ0Cis6MTA3MjYwMDA2MzUyOTlGRUQ5QjEyQjc2MkFBQzQzRDhCODFGQ0Y1QkI1Cis6MTA3MjcwMDAyQjlCRUU5NDgxRkVCQUU1NDdBQUFDRDZDMzczNEMyRjg0Cis6MTA3MjgwMDBBNTVGMzg2Nzg3Rjk0RDE5QUE5RERGMDJDNDUzQzcyNjQ5Cis6MTA3MjkwMDBDNkZGOTUyREIyREYwMkYzREJCODE2RkREOTlFOEQ2N0QwCis6MTA3MkEwMDAzMTNFQkVFOEY1MkRFODQ3RjBCNDg4RkFCOEM4OEQyMjIzCis6MTA3MkIwMDA5RTYzRDExNENGQUIyMkUzMTM2QjlCNkJGMERDQURCNkI2Cis6MTA3MkMwMDA4OUM3RkY0NUM0QzU1NUJEQkU3Nzg3OTc4MkE2RUExNzEzCis6MTA3MkQwMDAzRkI3ODMzQzM4RERCNkMxMEVGMEE0RkQ2MTVDRTFGNTNCCis6MTA3MkUwMDBFNzI1NUQ3QzU0RUZGMUMwMkU3REJDNjFEM0UzM0NERTJECis6MTA3MkYwMDA3MDUyM0JDOUVCMTk2Rjc4MUFGRTAxRkI0RDZBNDRCQzEyCis6MTA3MzAwMDBFNkM2NDQxRURGMUQyODJDOEVFMkNGRUZCRUY3QjNFNUE0Cis6MTA3MzEwMDBFQjM1MTAyN0RGQjFFRENDMUE5ODdGRjU1RkJGNUEwMzJDCis6MTA3MzIwMDBGMTRENjQ5RjA1RjcyOUNGQUJCRkM1Qjg2MkI1REQ4MkNCCis6MTA3MzMwMDA1NDQ2NkY5RDlCN0U4RTcxRDk5RDlGOUFEMERFRTlEQzZECis6MTA3MzQwMDBEQjlFMDVGMTZEOUQ1QkJGNEIwMUZGRENCQ0JEMzdBMDMzCis6MTA3MzUwMDBGRjcyREVGNkEyNTQxMjQ1REVBQjI5RDBBN0ZGMzJFMjVGCis6MTA3MzYwMDBDMjIzRjE3MUIwRjkyMEM2NjE3REY5ODkwOUU1NUI3NzI3Cis6MTA3MzcwMDBGQzY4NTMwRDhCQ0I1NTc4RENFOEU2RTg3MUY4NkE5QzI1Cis6MTA3MzgwMDA2MzZERjNBRDM3NUYwN0YyQkE5OUU5NzdERDcxOEY5N0Q3Cis6MTA3MzkwMDA4QTE3RkQ5MEUyRjVFQUNCQzBERjY2MUUxN0RDMzQyOUMwCis6MTA3M0EwMDA2QUJDRTg5N0YwMEY4QUE3OUZBNUVBRTM0NUJGNkU5RUU3Cis6MTA3M0IwMDBGM0IzMTdBMUFDMzlCMUQ3NzhEMUMwNjVDMDREOERGMzA3Cis6MTA3M0MwMDBBRjRFNzVCRDlBMEE3Q0I0MkRENjlCQzZGMEU2OUYyOEI5Cis6MTA3M0QwMDA4MDFFRjg3NTE2REM4RjM4MjU4NzMwMEUyNEI0RDdFNDZDCis6MTA3M0UwMDA4MEI4QzdDQUJEMUYyM0JGNzQ2RUZGMDBGREFEODRDNzQwCis6MTA3M0YwMDBEOTc3OTJFRTNGMTYwRjJERjA3NUFFQjdCMTM4NTMwRTE4Cis6MTA3NDAwMDA3Rjg4NDM1NUVDRjg5REM3OUIzMjNBNTZFMzUwN0I4QkZGCis6MTA3NDEwMDAzRjBEQTZGMkZCQzNGQ0RFNDEwREI1OUI1ODlDN0EzOEFDCis6MTA3NDIwMDAyRTU1MTgwOUY4M0FBQThCRUI1NUQ3MUREOTlGODNDQjU3Cis6MTA3NDMwMDBEMTcwNUM3NUY0Mzg1RjM1OEVCMDI3QkVEOEJFQTJDNjU5Cis6MTA3NDQwMDA0RDc3QUVFNUYxRDZGNDdCRTYzMDg4OTM2M0ZCQjlDN0EwCis6MTA3NDUwMDAyRjdDMUMwREJGNkE1Q0Y1RUYyM0YwQUJBRUFGMzdCRURGCis6MTA3NDYwMDA1MEY5RjM1MkYzRkU3QkUxRjI2RTJBRjM2N0FCRjBFOUQ5Cis6MTA3NDcwMDBGODczNzQzOUZEMERFNzc3NkFCNzdFOURBQUIxNkY2NzFGCis6MTA3NDgwMDA3MEJCNTU4NTlCM0FERkM1NEQ0Q0FGRThEOEM4RUM4NzNCCis6MTA3NDkwMDA0OEZFQTZFQjcxNDU4QkIzOTdEMjk4RkU1QkRCQjIzRkZCCis6MTA3NEEwMDAwRkU0NTBDNzgxNUQ5Q0VFMTg1REQ3NkUzRUNBRTI3NDUyCis6MTA3NEIwMDBBOURDRjY2QkU1MzY2MTdFRTRDOEZFRUNCQzNGNEY2QkExCis6MTA3NEMwMDBGNEZFM0M5QkNGNDZFREVGQjRFNEJBMTNFNjdGQkE4REYxCis6MTA3NEQwMDBFOTUxQTc5QkM0MDlGRTI4RkQ1RkUwRkI1MkY3QkE2RDk2Cis6MTA3NEUwMDA0NjhDOTcxMkVEMzFBODRGQ0RCMzhERkMyNDJFMDk1MjU2Cis6MTA3NEYwMDAyM0M2RkQzNDJDRTA3MTQyOEYzOEQzMDBDRTBEQjY5QkVECis6MTA3NTAwMDAwOENDRTc1MTgwOEZDNkZGMjAzQkRDMDRGNDM4MzlBRDRFCis6MTA3NTEwMDBCODQwNTRDMkYzNTVDQjhENDkwNkUyRDdFMjVGMEE2NDA2Cis6MTA3NTIwMDA4MjdDM0Y5MkRGMkU0MzdGOUY0NUY4NEQzRTkzQzhFMjE5Cis6MTA3NTMwMDA1NDNBQUZDRkJDODI3MzgxRDJCQkRFQURFNkREMEY4Qjk4Cis6MTA3NTQwMDAzQTNGNDdBRDI5NzQwNEY0NzdGMjg2MDVGREQ2RTIzRTUyCis6MTA3NTUwMDA4QjE3RkQ2NjZCMkNCOENFODNEQkJGN0QwNUUwRDVGOUJDCis6MTA3NTYwMDAzMzEzNjFFNzA4OTQzMEE4NUMyOEUzRkU4QkY2RURERjY3Cis6MTA3NTcwMDBBRUY5MTNFODk5RDA5ODhFNUZCNjg2RDYwN0ZEN0E3Mzc4Cis6MTA3NTgwMDAyQ0RBMDM1RERCRTJGMjUwOUY3Q0UzQTFDOTIwMzdDQTBECis6MTA3NTkwMDA2MDBGMDMzREVGRjU1NDdGMDNFREVGNjQzMkNCOUZEQ0NBCis6MTA3NUEwMDBEMjE3RUYxMzU0NkRCMzYxQkNFMUMxRUQzQjZCNDFGRUVCCis6MTA3NUIwMDA3N0JFMUUwQkM3RDFFNDRCMzlGODU3Qzg3QkY2QzQ5MTkwCis6MTA3NUMwMDBCNTBBRUE4MThBNzZCRkFEMjA5MkEyRDVGM0FBMjBBRjkwCis6MTA3NUQwMDA4QjdGMjE2OEE3QTMzRjhFRDI3MzU1NEIxQ0RFMUZEMTMyCis6MTA3NUUwMDBENEUzRkNFQ0NENjBGNzY1MDIxOUMwNzc1NDlGRDQ4RENECis6MTA3NUYwMDBBMzk2REY5NkQ2OUZERkVGMERGRDk4QkRBRkMwRUE3QjY3Cis6MTA3NjAwMDA4Q0ExNTI5NkY3NjUzMEJFNkRDM0ZBMjUyQUJERjJGMjAxCis6MTA3NjEwMDA5RUZEQjJGQTMzRDJGQUVCRUFBOUVENkI0REE0MkUxQTE1Cis6MTA3NjIwMDAxRjU0QTcwOUZDN0VFRjVGMDY0NzdCQ0YyMkNBRkNGMUZGCis6MTA3NjMwMDBGQjAzMDJGMTFBNDAwRkQ4NkFDMTM4QUU2QTYzNjAxMENBCis6MTA3NjQwMDBDNEI3RUYzMEIyRjM5MTZBN0I2MDEwQzRCN0VGRTFGMkQ4Cis6MTA3NjUwMDBBRjNBODZFNkU5RjcwQzNFMEZBODBGNzk2MjBFQkUwNjM4Cis6MTA3NjYwMDBGOEFFRDk2OTIxNEJDMTdFN0ZDM0U2MDIzQ0Q3RUNGODY2Cis6MTA3NjcwMDBGNkU0NEIwNTEwQ0YxNjhCN0VBQjlBMzdGRTFERjE1RkZCCis6MTA3NjgwMDA2MzBBNEMwN0ZBMEY2RDM1OTE3NUI0N0VDN0Q2NzdCMjkxCis6MTA3NjkwMDA0MDhGRTg5MDAzNTkwOTE3MzlGN0E5NjkzMkU5Q0VCMTRCCis6MTA3NkEwMDBENTc1OUNBRUY3MEY4NEZCRUJFQUJEQzVDQTVFRTRDNTk5Cis6MTA3NkIwMDBERTM0QTY4RjJFNEY3MzNEOUQ4NjdDNkQ3NUEwQkM4NkYzCis6MTA3NkMwMDBGRTQ0RThBNzY1ODBGNjVFNzNBNTEyNUQ4RUFENEE5MzExCis6MTA3NkQwMDA3NUY3NjhDNUYwM0RDNTU1RDBFRjk3MjRCODM4ODNBMjNCCis6MTA3NkUwMDBBNDQ2MDhFMUY5NzlFNUM2QjM0M0MxMUVGRUVDQTc1N0VECis6MTA3NkYwMDBFMUI5RDY2N0M2RDA1MDkwREI5RjY1ODU4NjZBRTVGMTEzCis6MTA3NzAwMDBBOTdBQjMyMkM5RTg5N0MwQjQ2QkVERDlEMjBDMDJGMUMzCis6MTA3NzEwMDA4Mzk2QTlEMUU0RDM5NkI0NTg5QzQ3RTVDM0IxNTFFRjAxCis6MTA3NzIwMDA4M0VFRTZGNEI2MUE2ODMwOTk4RDBCN0UwODc1RENDRkNGCis6MTA3NzMwMDA4QzdFMjNDQzIzMzc1REMxRjJDQTRDQkYxMUJFNTc2RDdFCis6MTA3NzQwMDBEQzM1NDBGN0VFODRFNEMzN0E5NEJGMTAxRTE1NjQ4NURGCis6MTA3NzUwMDBCMUMwREE1M0FFNTRDQ0I3MkExMkRFOEY5NkZFQUI5QjgzCis6MTA3NzYwMDBERUM0MzA5RUQwQzkwOTcxNkExQzg3NzQ2NzQyM0ZBODg1Cis6MTA3NzcwMDA3QTFGNDA5MjhCQ0QwMDJGMjMyOTc2NDgyMkEwREE4N0VBCis6MTA3NzgwMDA3QzFBNDM5QTMwQjU1Mjc1ODRFRDQzNzUwNEUyOEE0RUYzCis6MTA3NzkwMDBGMUYzNUI5M0E0M0MwREYyQzM3NDQ4NDQ3OTdFMjlCODlECis6MTA3N0EwMDBGRDMyQ0Q4RUYzMzY0OTc1QzQ4OTdBQzc0NDA3RThENUQyCis6MTA3N0IwMDA4MkQ3NERCRUE3RjREMDUwQkY3MUMwMDk3NkZFRUY4MkNDCis6MTA3N0MwMDAzODM4M0I2MUYzQjMzQkRFRkUwRUY0MDM0QTY3Njg2NzZCCis6MTA3N0QwMDA3QkFGMjdGRTA2M0E5RTY0NjQ3OTMyOTZGOEEzOURDNzc0Cis6MTA3N0UwMDA3NzcwM0MxMEVGN0U5NDNGNTYxMkZFMEJEMTdDMkM0QUYyCis6MTA3N0YwMDAyODNBNkVEQzVGNDc4MjlENkI3NTkwMDBFODREQjE1NjZDCis6MTA3ODAwMDAxMjg4QTVBOTM1NTczQUFERTU1RjNCNjFGOUZFOTQ5QzE2Cis6MTA3ODEwMDA0MUFFMzlBRUQ1OTc0N0QyMzU3MTRBRTdCQkU1QTI4ODZDCis6MTA3ODIwMDBFRENGNDdCNDNGN0ZCMUY2MkEzQzNDRTYwMUQ5RUNGRUYwCis6MTA3ODMwMDAzQjgzNEIwQzVGODM3N0FDRjM0MjEwRTA5MTY3NzczNjY0Cis6MTA3ODQwMDAwMDFFOERBMTIzMEYwMTNDRjJBQ0NDNEU0QzZBMjQ1QTkxCis6MTA3ODUwMDAzQjZFNDAzQTkzNTc4QjA0QjY1RkQyQkY2MkFCQTYzRkY0Cis6MTA3ODYwMDBFMjMwQTNGRkY0NzEwRUY3RUVGQUFBNUZBNTQ3N0Q4QjE1Cis6MTA3ODcwMDAwNDcwRUQ1MURGRDI1QkZEOThFOEY1NkRCRENEMjczNjg0Cis6MTA3ODgwMDBGQTdDRTI3QkU5REYxQkJEN0VFRDFCMUZCRjE3NTBFMERBCis6MTA3ODkwMDAyMzkzMUIxMjMxQThGN0EwMDdBNDgzQkQxNTc3MjRBNTU1Cis6MTA3OEEwMDA4NDUxMDUzQjI3ODhDMDVCMENEMDFGQTU4Nzk4ODE5QTFGCis6MTA3OEIwMDBFRkYwN0ZCOTFBRkNGNThGODI3RjEyNDBCQTJCRTFGMzBCCis6MTA3OEMwMDBBMTc5NkIzQTlEREY1RDdDQkFFM0Q2QjM3M0NDN0JFNkRFCis6MTA3OEQwMDAzMTNGRDI1RDBGQjNGQjQyNDc3RkNBRUVFRERGRDNDODI1Cis6MTA3OEUwMDBFQ0VEN0JFNkIzNzMzMzUyQ0VFRTAxMzlFODdGMzBERTQ4Cis6MTA3OEYwMDBCREQwMDlDNUY3QkQzRUMxMUZDODg2Nzc3MDIyRjRENzM5Cis6MTA3OTAwMDBFRUY3NzYxRTkwQTA3RTQ5ODQzRjQ2QTUyN0Y1REVEMjhECis6MTA3OTEwMDAyQ0FFNUY2NzczRkE5QzQzNDIzNkUwRkJDODdCRjRDRDI0Cis6MTA3OTIwMDA2OTJDMkU4RDlBNjMyRTU4REZERDdDN0RFQTNFRTA1RDZBCis6MTA3OTMwMDA0RTcyRTA1RDAwRDExMEUzODRGMzExOTFERjVCMjU3Njk4Cis6MTA3OTQwMDAyM0JCQjc3QTVCODI0RUZFOUNDQjUxRTI2MEJGMjM2RkI0Cis6MTA3OTUwMDBGMkVGRkMzREEyQjkzNzJBQTlEQTdCNUVEMjg1NTg3Q0NBCis6MTA3OTYwMDA3RkE0NDE3NkE2ODE1Qzk0MkZGQzg4Mjg5NDJGOEMxN0U1Cis6MTA3OTcwMDAwNjEwNDU3MzBGOERFQTc3QzhFQ0IyODNBMDFGNDc3MkRCCis6MTA3OTgwMDAxNDkzMzJEMDBCRTMzOTlEMjVEREQ0QUQ4N0JENEZFMTkzCis6MTA3OTkwMDAzMjc3Qjk4MkY3NjBFRjRDNjdGQkNCRDI4Q0UyMzk0MDhCCis6MTA3OUEwMDAxN0EyN0RBNEQzNkRFRDg5NTdFRjc2QjZCRTA2NTg1RjVBCis6MTA3OUIwMDA3NkNGNzkzNzE4OUQ0RUQ0NDM2RkEyMUEwNEZBN0I5Qzc4Cis6MTA3OUMwMDA2Njk4OEY2ODUyM0U1NjgwM0Y3RjJEMTNCMEZGN0JDMjcyCis6MTA3OUQwMDA4MUUxRjM1QzUyODIxRkUyNUY2NkRCOTcxRTAxQkE1REI0Cis6MTA3OUUwMDA1NkVGQzA3M0I0MjVGNTM5OTgyRUFENEY0MzNENzQ3MUYxCis6MTA3OUYwMDBCRDEzNTMxNTJFNjZBN0NGMjU1MjM4OUIwN0IyRkVDQzc4Cis6MTA3QTAwMDAwRTM3RDMzM0U4M0UwNEYxMTc5MkEzMkUwMDc5NzM2NjQ0Cis6MTA3QTEwMDAxRDAxRkREN0QyMEQxRjFGQzJDN0Q4OUQ3NzYzREUwNDlECis6MTA3QTIwMDA3OTlBQ0E4RDEzMTFCRUI0M0QyOTAzM0Y2QTg2N0IxOTJBCis6MTA3QTMwMDBDMEM3QTI1QzQ5MTQwRDVEOThEMjg2RTlGMjNERTBBNjZDCis6MTA3QTQwMDBEMkM3MTYwNkJGMjcwNTQ2MUY5MUYwN0I1MjZFNTNFMDQyCis6MTA3QTUwMDBGQ0Y5QzkxQkJCREZCNTQxRjg1MTc1OUZDMUVGNTdFQzZECis6MTA3QTYwMDA3Q0FFNTdGODM5MTI1MDlGOUQ1REI4NzgzQUM0NTUzRkE3Cis6MTA3QTcwMDBDMUNGMjExRkFCMUY4OUYwN0ExQ0UyQkEwNjgzN0RFMERCCis6MTA3QTgwMDBDMjU0MDRGODUxM0EzMkU1N0E4OTQ4REI5QjE0MzY2N0QwCis6MTA3QTkwMDA5M0I1RDg2NTI4NjBCNDBCRjAxM0FEMEM5RUE2QjQzQTJDCis6MTA3QUEwMDAzQzhGMzM1QjE5QkM0NEFCMTdFMTIyNUIxOUJDNDQyQjAwCis6MTA3QUIwMDBBMzM3MjNDRjRCMDBCRkUxRDgxRUJGNTNGODM1QTc4RkE0Cis6MTA3QUMwMDAwMDNDOENENkMxQ0I5ODM0RjZGMkUwQjc5MkMyOEZDRTkwCis6MTA3QUQwMDAyMzg5RjM1NzI0MUM5MkUwOUU0MjZFOThBRjdBRDNFQjMxCis6MTA3QUUwMDA5RUEzRUI4NzdERkMwNTBBMUY0ODkzN0JCMTFGOTMzMzUwCis6MTA3QUYwMDA5ODFDNEQzMkQ0RUQ5NzAxMUUwOTg0RUYyRjVFOTI1OUU4Cis6MTA3QjAwMDA0ODU4QTgyMkZDQTU3OTg5MDI3OTgxQ0Q4M0FDRDdFM0I2Cis6MTA3QjEwMDA1NTc0NDgxMUVGQkUyOTJGMDAxREFDNzg0NzM2QzAzOTg3Cis6MTA3QjIwMDBBOTM4RkY0N0JBRkJBNEUyNTQ1N0JDODJGMDc0MEJCMEVCCis6MTA3QjMwMDAzRjNGNTFBRjIwRkU5NjAzMUUwN0MzRkVDOEVDQjE0NzdFCis6MTA3QjQwMDAzOTNFMUYwMzNFNDFGQzMyRkU3ODkyRjNDQkQzOUM0RjZCCis6MTA3QjUwMDAxQTlDRUNGRUM0QjIwOTJDMkUyQjI5REZDMERGNDMwQjhDCis6MTA3QjYwMDAxMDZEREM1M0JDQjM4OTE4RTlCQzUwQzc1NjMwMERBMDZBCis6MTA3QjcwMDA5RUYxODlDOTdGMDU2RDE3OUI0QjVDNDAyN0YxOUYzQ0E3Cis6MTA3QjgwMDBFOEM3QjU5MkUyNzREMDhCRTJCOUZFNEJBRTU1RTJBN0RFCis6MTA3QjkwMDBFMTQ1REE4MEM0RUMxMDJBMEFEMUFFNjkzMzQ0N0IwNzkwCis6MTA3QkEwMDBBQkMxNzlDMDBDN0VEM0RFRTZCMzdGQ0EwRUE0Q0JEMkM0Cis6MTA3QkIwMDBBQjMxM0M5ODI0QkE4QkE3Q0RBMTc5NkI2MzJDRkEwNzIzCis6MTA3QkMwMDA2MzlERUVDMjQ3ODFDRjFCNkQ0OEE3NTYzQUZGMzIwRDI5Cis6MTA3QkQwMDBERTYzN0JDMUVCOEIxOTM3MUEzMjI4MUQ4QUEwQjQ1MUEyCis6MTA3QkUwMDBGQzNFRDMzOEMwMDI3MDdFNEUyRTRFMDdGOUZBMUNERkUxCis6MTA3QkYwMDA2NzI5MEUxNEVEMzk1NDA3OTc5M0Y2ODIyQjc1RjZFQzJFCis6MTA3QzAwMDAwQUQ5ODVFRDFDRDdFQUU1QzAwQTJFNzcxM0M2RTlFOTQzCis6MTA3QzEwMDA1RDk1QkIxRjc1Q0I1RDc3MzJDQzI3RTVDMjM4RTRDN0Q1Cis6MTA3QzIwMDBBNDVCQTJDQkRGMDZEOUU4ODU3NzA1MUE4NjMyN0VGN0ZBCis6MTA3QzMwMDA5NjE4RDk3RDk4OUVGMjAwRkREQUU3REM4M0Q2ODEzQzY4Cis6MTA3QzQwMDA1NUU5NkIyMTYxRjJDNzRCNjI5Q0I4MUZGMTc3NzQ1NDAwCis6MTA3QzUwMDBGRDc4MDlCQzM3QzhFNTJDQTRFMjQwMjNEMjREQ0EzRENCCis6MTA3QzYwMDAwNjhDQ0Y1QkM2REZDQjdBOEFEMjE3QTQzRTRBNUY5MEUwCis6MTA3QzcwMDA1RTk3QzFDRTMzMTY5QTg3RTFCQjZEMEQ1NjAzQ0EwQkQyCis6MTA3QzgwMDBFOTUzOTNERjBBRkFFQUZFNTEwRUYwMjM0OEIyQjNDRDZFCis6MTA3QzkwMDAwNUZFNDA5QkQ0QjQ4RTQwQkQwMjMzQkMyNzIxQzQxN0RGCis6MTA3Q0EwMDAzODgwMEVCRUIxQ0RFRTc3QjEzODNDOEE0RTAxRThDOEJGCis6MTA3Q0IwMDA5MTU0NEM4RUU1RTJFOTAxREU3QjkxMURCNzEwRjAyQjZCCis6MTA3Q0MwMDBCRTkwNTQ2NzAxQjhFNTY2MzBCQkFCQjFBNDEwRTE0ODgzCis6MTA3Q0QwMDBFMTNCMzYyMzM5REM0RkVBRDQ5QkJBREZEQjgyNkU1RkFGCis6MTA3Q0UwMDBFOEU1RkVDQ0U0MENBRTQ3Njc3QUM5NDAwREJGMzcwQTIxCis6MTA3Q0YwMDA1QzBGNTNCQzI0NDdDM0Y3MEJBRjE4NEZFMDVDQTkyN0I4Cis6MTA3RDAwMDBCRkY3MjJDRjM2MzA3OUI2NDg4ODJFQ0Y1NEZENTM5NTMxCis6MTA3RDEwMDA2NzcyODQ5QzUwRDNDNUZEMjZFOEVFNzcxOTkzOUM0MDhBCis6MTA3RDIwMDBCQjkwN0EwRDE0NDU5MkY3RUEyN0VGOEU0NzM4Q0MwMkM0Cis6MTA3RDMwMDAzODkwQjQ5QkJBRUREQTFGRjYwN0JEQjIzMDJBQkQ0NUM0Cis6MTA3RDQwMDBDQUIxRDlEREZCQkEyQjA1RjA3NDRBNTY1MkE3MDEzREUyCis6MTA3RDUwMDBCREQzREJCRUVFMkE0NTNBRjRGNTUxNjA1RkRBRkZDQ0M1Cis6MTA3RDYwMDA4RkQwQUY3M0UyMTk5QjAyNzJBOEVDQzJFM0I4M0Y5NEM0Cis6MTA3RDcwMDA1RTE4ODU2OTc5RTM4REI4OUYwQkNGNEUyQTA0N0E2ODI3Cis6MTA3RDgwMDA1Rjc1NDNERUE3RTBFN0YxRDk3MERGNkU2RjJDMUE4NEQwCis6MTA3RDkwMDBFNzkxQkU1ODA1RTIzQkRBMUI2OTc5NDFCODFDRTJDNUEwCis6MTA3REEwMDA0NTREQkMwMDAxRUZCQkU2RkUzNzI5NTA1MDJGNTVERjkzCis6MTA3REIwMDAzREEzNzY5RDdEMzRGODg1NTY4Qjc4MkZBQ0Y0NTk5Qjg2Cis6MTA3REMwMDAwQkY0Q0ZERUU4QUY3NDU1NzQ3RjAwREU2MTRBQzcwMTYzCis6MTA3REQwMDA3MzQwOEZERTZGMUYxRDBBRDA3RTY3QUY2M0U3MDgwRDBCCis6MTA3REUwMDA0NkQ3QzkwMEU4NERDRjU4RjAxQ0IyMjEyMUZBQkIyMDdDCis6MTA3REYwMDA3MzMyNkU1ODA2NzI2MDRFODZFQjM5QzQ5Mzk1QkQ1MzRDCis6MTA3RTAwMDBEQTNCM0ZCMEYxNEZDMjIxMzM5QzYzQkRDOERGNDc5MURECis6MTA3RTEwMDBEQ0Y2MjlCQTczMzY3NjhFNzU5MkZCNTk4OEI5OTdGMkRCCis6MTA3RTIwMDAxODVFQUVGNDUyNkU2N0YxMjJDNDExQkQ1Q0I1MzM2MkM4Cis6MTA3RTMwMDBDMzc2NDYxM0FDQTNBNkYxQ0NFMjRGMTE1RURDQ0VFMEQ0Cis6MTA3RTQwMDBGMzNFMjVCMzc5OUY3QUM1RTQ1RjE4ODVGRTRGRjFGOEJDCis6MTA3RTUwMDA5NDBBODFDMTU3RTU4MzUzRERGQTkxMUJERkMzODlBNERFCis6MTA3RTYwMDA1MzYxREQ5MDE3NDZEMTdFQkYzQTI0RTNCRTUxNERFOTAwCis6MTA3RTcwMDAwQkU5NkFERDI4OEM4RjE3OUUxOUY1MzRDNDBEOUYzRkRFCis6MTA3RTgwMDAyQzYyNzlFNTA1MEI5Njc3M0NFMjdDMDFFMjlFNDJFRjlECis6MTA3RTkwMDBDQTA0RTREM0Y5NDMzN0M0MzEzRjkxREU4RjdENkYxRkFECis6MTA3RUEwMDAyNjE3OEU3MUY5NTA3QUUxMDlBNERGNkUzQUYxQ0QzMUNGCis6MTA3RUIwMDAwMkZGOTU1RTc4OEFEMUY3NDYwMURGQUQyNERFRUE3N0NFCis6MTA3RUMwMDBDNzBDRTRGNDM5MUFEQTU3NEM1QTA4RjBCRUQ2ODdFN0UzCis6MTA3RUQwMDAyNDY1MUI0QzRFRDAwNzIyRjE3QzJDNDNEMUY5M0RDQUJFCis6MTA3RUUwMDA4MkNCQjA1RjQyRjVBRjI0Q0Q3OUZBMjkxRTY3NUM3NjZDCis6MTA3RUYwMDA4MUJENTc0ODFDNUU5MjA2RkNDMEU1NTM5ODhFRjVFRjk1Cis6MTA3RjAwMDBEMDc2NThBMkZCRTlDRjcxRkRBN0Y0QzIzNTNBM0IyM0U2Cis6MTA3RjEwMDBCQ0JFRUJGMTdCMjlERkZGQ0I4MkEzMzAxRjVFQ0YwQjEyCis6MTA3RjIwMDBBM0EyQUQyN0JDOEU2QkIxN0U0NzdDRjRGMUQzMzk5QzA0Cis6MTA3RjMwMDA0RkQ2OTcxMzE3OTU2RkU1NDY1NkFGRDRGNzgwMTFFNEU3Cis6MTA3RjQwMDA0RUU5QUFGODA0NDFCM0FFQjJDNjJBNUQ5QzQ3RDlBQTRECis6MTA3RjUwMDAxMkUzNEM0REJGNjEzQzJDN0U3NzhDMTRDNjQzRkE0QjI4Cis6MTA3RjYwMDAwQjI2MkRCNDgyNUU1MDJDRjcwMTdFNUE1NzUxRjgxMzIwCis6MTA3RjcwMDAwNUZBNjNGMkU5MEJEOTk3MDVGMkJBQkRGMTdFN0JCNDNECis6MTA3RjgwMDA3QjEzRTk3RDIyRjBEM0M4RjE0M0Y1RUEwMjBEN0U1NDVDCis6MTA3RjkwMDBCQzQ0QjYzRkI5QjZBQ0YwMjdFMDhGNUVDOTVFMjFFOUJDCis6MTA3RkEwMDA1REZFNDRFMDJEM0IzQURDODY3NUMzMkQwN0UzOEQyRTQ0Cis6MTA3RkIwMDAwREI3QUI3NDcxNDUzREUwQzZGMUFCQzI0NUZENEVGNTYyCis6MTA3RkMwMDBBOEFCRkE4QzgwRjEwOEJCQkZEM0M4RjA3RjI5Nzg4NUI1Cis6MTA3RkQwMDBDN0U1RjgxRjEzN0QxRDUzQkJENzMxOUY3ODI5QTNDRTZBCis6MTA3RkUwMDBCRUU0M0ExRTIyNUVGMzQ1RDZBMUUyOUZCQ0EyQzNGRkM3Cis6MTA3RkYwMDBENDk3RDYyMjFGQUFGODlFN0Q2MDI1RDJFRjZDQ0E4RjM3Cis6MTA4MDAwMDA3MERFREZFRTdCQzAxRTJEQkU2ODZBNkY3ODFGRTgyNTJDCis6MTA4MDEwMDBCOTg1RkZGN0YwRkU4NUVDQ0Q4MkI4MzJFRjcyMEJEQTRFCis6MTA4MDIwMDAyM0E3RDYzRDkxQTU4NUYzOUM4QzMxRjcwMjVFQzhGQTUzCis6MTA4MDMwMDBFNENCREEzRkJDNjM5RDg3QzBCRUY0M0UyM0EzM0Y2RDEzCis6MTA4MDQwMDA2Qjg2QkIwQ0RBOTc3MzNCN0M1MUZDRjg0MUQxRjQ4MzBGCis6MTA4MDUwMDA0N0VCMEYwRDAxM0Y1RDQzN0QxQkE2MzJENzJGMDlFODhCCis6MTA4MDYwMDA5N0Q5QTgyRkI5QTJCREVGQjVBNDBGOTMyQjhGRDZCNzgwCis6MTA4MDcwMDAzMUJGQTdEOTRCMUNEQUZCQzQ4NEU5NEZGRjQ1OThCRjM5Cis6MTA4MDgwMDA0NjZENjc5NEREMEVGMDlGMUEwNTUyOEM3QTlGRTQ1RTcwCis6MTA4MDkwMDA5MjVEMDA3RThGQTQ3Q0FGMDY3RThCRkJCMEZCNDhDQjRECis6MTA4MEEwMDBEMjBFMzhFMDNFQjE4OUY2MEZGRTFDNzNBNjc0NEU3RkU3Cis6MTA4MEIwMDBDRUM5RjJGOUMyQTcyMkM0MzdDQjQ5NEQwNEZEQTFCOUZDCis6MTA4MEMwMDBGNEJCMDZERUM2QTQzNjlEN0YzQTEyMEU5MkQ5OEVFNzI3Cis6MTA4MEQwMDA0RDEyNjFGQTlDQkE3RUZBMDVGN0E1QzdGOEJFQjQ4MkM0Cis6MTA4MEUwMDBGQjM1OUZBRjZGNDJCRkZGQzI1ODNCRUU3RjhCRkIxOTQyCis6MTA4MEYwMDA5ODNENjU5NkYwQkQxQTUzM0NBQjZGOEM2M0YzQjY4MDI4Cis6MTA4MTAwMDBERjVCODQ3RDM1ODA3OTFCQkNFODIzRTJEMzY4MDJFNDIxCis6MTA4MTEwMDBFMzg5MjI0MDNFOTEwNDE2RTMzQjI5NjM4MjNGODZFRkM4Cis6MTA4MTIwMDBDRTM0QjcxRkYwRjg0RDdBREIxMTAxRkNEOEM1RUVDMTkzCis6MTA4MTMwMDBCMEZGMzY4QURFN0M4NUQ2RkY5OTE4Q0E4NzdBNTlCNDkzCis6MTA4MTQwMDBFODkzMDQ5NkY2ODM3ODY4QjdFNjVDOEJCRDEzQUE2ODVCCis6MTA4MTUwMDBGRDgyOTFGOTdFRjNBNTg4RjM5RTNGMEZENjk2MkY0RkFGCis6MTA4MTYwMDA3M0JEMEVGMzY4QjBCMDc3ODY5MjhFMEI3ODlFRDM2MEE1Cis6MTA4MTcwMDA2MUVGMEQzNUQ4RUU4ODgzN0RGQzU3N0Q5OERFOEU3NEQ3Cis6MTA4MTgwMDAwMDc0NzQ4OEU5MzNFNzI0MjUyRTgxRjk0OTk1Mzc3NTAxCis6MTA4MTkwMDA3RTdFQjNGMkE2NjYxQzg5REI3QkVCMjk1RDRBOUE3MzZGCis6MTA4MUEwMDA5NTgxOTJDQjAwNzQ3Mzg1OEY3RUQ3Q0UzMzhBM0YyRTE0Cis6MTA4MUIwMDBDMThBQ0ZGMjQ2M0RDRjUxRTcwNzcxRkIwMDQ3RjFDMkJDCis6MTA4MUMwMDA3OEI0RDcyMkU5NjE0RkI3OUZEOTJCMDIzRUE3QTlFRjE4Cis6MTA4MUQwMDAxNzRCOEI1ODNFOUVBODdGNjg3RjdEREFBRDhGMkU2MjRECis6MTA4MUUwMDA3OTdFQ0VFOTk5QzlDRTMxMUI0QUUyMzAzRTRFOURDNzE5Cis6MTA4MUYwMDBCNEQ2QzdEQTQwNEY5REQ2OUEzRTBCQ0VCN0E2NTkwN0U0Cis6MTA4MjAwMDA3RDBFRTkxRTM5NzQyMDE2RjRDMDA3MDRCQzU3NzJEN0RFCis6MTA4MjEwMDA2RkRGOTQ2MzY5QkFGREMzNzU3ODlGRjk3MzJFNEZBNzFBCis6MTA4MjIwMDA5MzEwQkUwQkVGMjYwRTdFQ0VFRUM3RUYzMzg5OTNFNzk5Cis6MTA4MjMwMDA5QjY0QjBFQkVGMDlGODZGOUY0NDczRjdCRUU5OUYwNEFFCis6MTA4MjQwMDA2QURCRjQ0M0ExQjc0MDBDQjg5QjFDRTNGMTBDNDE2RDExCis6MTA4MjUwMDBEN0UyN0M5QkU1NTlCQkVFRjU0QjY2NUM0Rjc4QkQ2NjdCCis6MTA4MjYwMDA1Q0JGQkEzRTNBNTM4NDdGMzc3Q0Y4N0I0RDJBM0NDNENFCis6MTA4MjcwMDA5OTc0REQ5NDVFQTZDNURENzExM0I5ODg1RTNFQ0Q5QTEyCis6MTA4MjgwMDBGMzM5M0IzNDYxRjM4OTg0Q0Y3OTI4QTJGQTYzNDcxRjFECis6MTA4MjkwMDAxN0M5QTRGOEZCN0QxRjk3MDA2OUI1Mzk5NDI1RjU0N0U4Cis6MTA4MkEwMDAzRTkxMjE1RjJCQkFGQjQxRThGMzk3N0RERDgzOTMwMTdCCis6MTA4MkIwMDAwRTZEODk5NzI1M0Y4RjU4MThGRjFGMDE3QTg2MzhBRkJBCis6MTA4MkMwMDAwQjQ5QjgyRUY1MURGQTgzMEZCNkRCNDBFRjVDQkNGRDAxCis6MTA4MkQwMDA2MzdDNjdCOTQ2MEMzRTc5MjdGQTQzNDVCNDlCQ0UzNTlCCis6MTA4MkUwMDAwRkJFRThGREIzMjNFMEE3QTJGQjVGREY0Q0Y1OUUyNUEwCis6MTA4MkYwMDA1QkU3MEM4OUYxQzk4Q0U2NTg4Q0M3OUYzMTVGRDRCRDEwCis6MTA4MzAwMDAyMzNENjMzRThCRTcyMzUyNUJERTZEM0E3RDdENTFBRkFCCis6MTA4MzEwMDBGRDgwQkYyMEIyOUY1OUYzOEJDOEYxRTE3MDRFRUIxODdFCis6MTA4MzIwMDA4M0ZFODMzNThDQkU2NjhENzM4OTEwRUYzQzdBODk4MDFECis6MTA4MzMwMDBFN0FEQTM0RTI4MkQ0MTlBOUZFNThGNzcwMjdCQ0U3QTM5Cis6MTA4MzQwMDBGMDNGMDdDMDNCMDdCNTZEQ0MxRjk4MkFERTk3RkYwOEFBCis6MTA4MzUwMDBGODU5MEVCMDdEMUNGMkY3MDE5RDU4NUQ4QTU1NzM1RTg5Cis6MTA4MzYwMDBEMDIxRDdFNUMzN0I3RkRFN0JBRDJFRTBGRjkyREI1Q0M3Cis6MTA4MzcwMDA5RkUyN0JCRURDNUZBMUVFQUIzQjFCNEIzMDRFQjZFNDE1Cis6MTA4MzgwMDAxRTY1MjRFMEJGQTRDOUUyQzJENDRDQTQxODJBQzc0QTdGCis6MTA4MzkwMDAyNDYyODYzNEQ1NDgyNDBCQTQzMUM0MEM2OUUxNDJGNjJBCis6MTA4M0EwMDA2RTc3NjlFMzE0RDQwRkVDMjM4QjhERjAxRTZGNDlFQkNECis6MTA4M0IwMDBDRkJGODZGNjY1NTI2MEJGOTAxNzg2NEY0OUVCM0JERjEzCis6MTA4M0MwMDAwMTVFRTdCODhBMzE5RUYxQUE4RDQ2OUQxRDM4QjQ0OUY5Cis6MTA4M0QwMDA5RkJGQkE0NTlGQ0YwRkU4RjNDMzBGRTlGMzFCMzIwOUU0Cis6MTA4M0UwMDBEMkQxNENGM0FEQjkwMEFGMDM3QjRENzQyRjgyRjgzRjZGCis6MTA4M0YwMDAxM0M2QkIxQzEzMTg3RUJDOUIyQzI4MEY4QkFBNUEwQkQwCis6MTA4NDAwMDBDMTBFM0VGMzlBQ0QwMDc2RjQ5RUJGRkMwMkNGQzM0MzZCCis6MTA4NDEwMDA1QjYyMDlDNDU5RURGRjVEMEM4OTgxNzhDNUQ3MkRFQkVFCis6MTA4NDIwMDBBMEJDOEFFMjBFRkM5NzU1QUY1QkQ2ODIxREJFRTM0QTI0Cis6MTA4NDMwMDBENThFRjdFN0MxN0E3NkZDOTVDNUQ3ODQzNjk5RkM3MDVFCis6MTA4NDQwMDAzRTdFNjZEN0NGNUY4M0YzQjQzMzlCRkFBMDdFNzU0QzM0Cis6MTA4NDUwMDBGMDFBNjI2MEZDMkY5OEZGMzNDOERGOEIwQkYyRjdFMjUzCis6MTA4NDYwMDBBQTM2RUFFREUyQjk5OTRDQ0UwNDE3NUUxMzE3NEQ2RkE4Cis6MTA4NDcwMDA1MkQzOUNCNEM0REM3MTc0NkU1RDhGOUI2NjgwMUY2OEEwCis6MTA4NDgwMDA3MEEzMUUyRTZBQkQyMTdFRkRGNzg3NzhGRkEzODkzMTc4Cis6MTA4NDkwMDA0Q0E3RDkxMDI3RTA2RkIwQzNGRUZCNzJGNDc3OTIxNzk4Cis6MTA4NEEwMDA3MkZFNzlGNUQ1RUU3NjIyN0YyNzhFMjg5QTdCNTM2MTZFCis6MTA4NEIwMDBGOTRERTZGNTgxRjgwRDgwN0ZGRkYwRjcyQUEyOTk4RjNDCis6MTA4NEMwMDA0NjNGOTlDMEZCRkZDQUNDRTI5OTkzRjhGQkZEQTdFQkFFCis6MTA4NEQwMDAwRkUxQkVERkFERjdENUJCNUNFMzM0RjlEMkM2RkQyOUIxCis6MTA4NEUwMDAyNTYwM0ZBRERBOUYzMjUzMDNBRkVBNEQwNzUzRUVDNjI2Cis6MTA4NEYwMDBCODI3MDkzQ0I4QTQ3QURBMkI0RjgxQkZBMjdBOTNEODY3Cis6MTA4NTAwMDAwNEYzODQ3MjgwNUI0N0QzNUI3NkE4NDdGNUUxNjFFMEIyCis6MTA4NTEwMDAwNzA5RUJBMzM3QjhDNjY5RjhGODZGQTU1Qjk1REZBQTIyCis6MTA4NTIwMDBCOUZFQjI3MzY0REI3ODg4NTNBRjZBMTQ5QzUwQURBQTZECis6MTA4NTMwMDBFOUY2NUIyNzAxQkM1N0IxN0JBRTg1MTIyOTE2Mjk3RjZFCis6MTA4NTQwMDA1NTZGQkRGRDQ3NDMyMTZFNjZGNTA4MjdDQzg3NzY3MUQwCis6MTA4NTUwMDAxQjdDQUZEQTdDMTZFRjMzMkM4REY4REQwMzM1REQ5RDA3Cis6MTA4NTYwMDBDOUY0NDI1QTNGNjBBMEY1OTdERTYxMkQwN0Y5NDVGQjNCCis6MTA4NTcwMDA3RDEzRjIwNzcyRDZFMUZCMkFGNjUzRUNGQzgxN0VGRkY1Cis6MTA4NTgwMDBDNDQwRjU5NjUzNjNCREVGREQ0RDlCOUUyMTREMUY0REJECis6MTA4NTkwMDAwMkJGNTJBMzlFMUUyOTdEMEJBMDk3ODUzNjA4Q0U3NTdCCis6MTA4NUEwMDBGODc1NjFFMTJEQTA3MkJCMTY2MEJDMkYyRDlGMTFFREY3Cis6MTA4NUIwMDBCRTc1ODU1RkRGNEYyNERFM0ZFMkYzQTU3RjM5NUFGQUFGCis6MTA4NUMwMDA4OUFDOTczOEQxOEJGMUU0RDVGM0E5M0NENEY4MDlBQTRBCis6MTA4NUQwMDA0RkY4RjA3REM5Qzg3MTg4OTZBRTk5M0U0MTE0OTA4N0Q2Cis6MTA4NUUwMDA1QjJDRUFGQjQ3ODJCOTkwQzdFOTBFNjA3OTdDNTcxMTkyCis6MTA4NUYwMDBFODk0MTI0QUQ1OTU2NDlDMDJGMEJFODU0QzgwNzQzNDkwCis6MTA4NjAwMDBDODE1Nzg0RjdGNjQ1MzFFRDRERjJEMDQ1Rjc5MDlGQkIyCis6MTA4NjEwMDBCM0ExMUNFRjcwMDRGMDlEQzkwQzdFQ0ZCNDQzNjFGOTg3Cis6MTA4NjIwMDAyRUVFRTc1NENCMkI1QjJEMTg2NzczRTY0QjIzQ0FEOThDCis6MTA4NjMwMDAwNTREMDczMThFQkVFMzM1OEJDMTQwRTVDMTk5QUQ4OTRCCis6MTA4NjQwMDA2MzIxMUVCM0EzODlCRDUzN0NCQTI5NzFBQ0YxMjJGQjBGCis6MTA4NjUwMDA3NkE0REM1MEY3RDNBM0YwNEZCQUVGRkUyOUQzRjU0RDQzCis6MTA4NjYwMDAyNkVDNTM4QjU4QkM2QTZBNjI1RDdFQjRERkJGNTBEQjc4Cis6MTA4NjcwMDAyNTE5RUJGMkMxOEUwOURENkI3NUFFNDMzODc5QjMyNTUwCis6MTA4NjgwMDBGNDgzQTczOTIxNEVBODQ0NjBGRDFBRkIxNThCN0Q2OTQwCis6MTA4NjkwMDA3RDFCQUQwQkZFRTg4NDQzMjJGRTVFQzM3MUQxRjk2M0ZFCis6MTA4NkEwMDBDNzAwN0M0RjFFRjVBMEQ5MDU2RTdDOUY5MjJDNjI3MThECis6MTA4NkIwMDA5NUIzMjQxMjkwMjhCRENEODJGRDI4MEZGMzI4OTc2NzJCCis6MTA4NkMwMDBBRDEyMzBBRTZDRjYzMkZEN0FFMDlENUNFRDNFNUE0MTYzCis6MTA4NkQwMDBGQ0VDN0QwQkFEMUZCMTNGQzRCQkQwRkQwNkRFQjUzNDU1Cis6MTA4NkUwMDBCM0Y4OEJDQUY1RkE3NjU1MjQ4MEYzQTlERUZDQkQyOUQwCis6MTA4NkYwMDAxQUJDQkUyNkVBQkE1Qzk5QjAyRUUxMTYzM0NFRUJGRTY4Cis6MTA4NzAwMDBFN0UyRDg3OThGOTFCODYwM0YwRDNENjc0M0Y5NUU0NTQ4Cis6MTA4NzEwMDBEQ0Q4REY1RDdDNUZGNzNDNThFMjlBMEQ3Mjc4RkUyQzY2Cis6MTA4NzIwMDBEN0VDNDRCODZGQ0JGNjNGMzRGOTkwQkYwNURDNzdBQTlECis6MTA4NzMwMDBDNjkxNDA1RkY2RUUwNjgxN0RCNUFBNTUwODBDODVCQzUyCis6MTA4NzQwMDA5OTc4RURDM0Q4Nzc3ODdGMDBENkFEQkQ1RjUzNEU3QzY2Cis6MTA4NzUwMDAzODVFRjkyQUZENzdGMjIxQzM2QjM1QkZDNzQ4RDY2QjY3Cis6MTA4NzYwMDBDQUZCODM3RUM2RTA1MUJERDlBNEYzRUI4Q0RFMkM3ODI2Cis6MTA4NzcwMDA2RDc4REZENURGOTA0MkU3NTc3QjhBQ0EwQTAyNzFBQTdCCis6MTA4NzgwMDBERjlCNzRGRDQzM0NDRjA4RENGNzg5ODVFMkVEQjk2RUQxCis6MTA4NzkwMDBCOUVFMUYxMjJEQ0VGRjA4ODdFMzczQjc5N0E2MDNCRjZDCis6MTA4N0EwMDAzRTBEN0E2QjA2MDdGNDQ4OTQ1QkRDN0Y0MDAyNjYzQTI0Cis6MTA4N0IwMDA0RUNDRjBFRTNDOTYxNzJFNjRGOUM5QUI1Rjk5REM3ODhECis6MTA4N0MwMDAyREI1RjM2NDM3OUUwQkNEMTI4QkRGODZGQjYwMkZGNzQwCis6MTA4N0QwMDA3M0RGRDI5NzhFMzNDQkUwQ0E5MjkwNkY1RDgzRDAxRjQ4Cis6MTA4N0UwMDAzQTlGQzFFMTg1NjE3NTQzRUFBMkU4ODEyQTlFOUYxN0ZECis6MTA4N0YwMDA5QTAyNzAyRUVCRERDNUY0MkY1QjQxNDhENkVFQUZENTYzCis6MTA4ODAwMDA3RDk5M0M4QTNCMTBDNDdCMTNBMUVEMDJERUIzNUMyOTQ5Cis6MTA4ODEwMDAxQ0M1RkI4ODJCNkY1NDA4RDhGNzY5MTQ0RjIwOEY1NzVECis6MTA4ODIwMDAwQTY0OTE0MEUxNTJEMDNDRTVCRUI3MDBDRjA1MzE0RTFECis6MTA4ODMwMDBGOEI5OEI5QUU2MzE2MjhEMTVEN0NGRjRCNEQ4QkFCNUIyCis6MTA4ODQwMDA3MDlFOTMzQTIzNjcxOEQwMzk1REY3OEM1QkU4RjdGQjhECis6MTA4ODUwMDBGQTJBMzg1RUJBOTVFMTNENkRBMTM3MUI3RTA3MkFFRUY0Cis6MTA4ODYwMDA0MEYxN0Q2RjAxMUYwRThEQzE3QkIyQTkxNDU2QjYwNDc1Cis6MTA4ODcwMDA0Qzk3ODBGRTk1NDYxNjA4NTBFRjM5M0JFQjNGRDkyMEM4Cis6MTA4ODgwMDBDRTk4MDJGOTYxMkM5RkYwQjBFMDVBODdDNEI3MUNGQjY4Cis6MTA4ODkwMDA0RjM1OTEwOTMwNEZGODBFN0FBNDE5RkMwQTU4RUU2NzRCCis6MTA4OEEwMDBGODJEQUFDQjg3RkU1MjA3QjAzNEM5MThDODg0N0UwRUIzCis6MTA4OEIwMDA3N0UzREI4RDc2QzUzQ0JFOEZDRERCM0EyNjE1RUNCQzZECis6MTA4OEMwMDBDMzFERDRFMEE2NzJFQjcwOUFBQTBGMDVBQ0Y4RkI1MDVBCis6MTA4OEQwMDAwMzczNTg3RDZFMTdDRUNCNjdGNzBEOTJCMkY0RjVCQURECis6MTA4OEUwMDA2NDU3REM3MDkwQTMxRjMwM0RGRUJDRDU4NUZFRTk2QjVDCis6MTA4OEYwMDA4Q0QxRkQ1OTJGRjU2NTdBOEJFNzgyNDBGQzlBN0RDMEJCCis6MTA4OTAwMDAzM0Y1MUJENDJCM0QxNzI0RERGNzhFN0FCMzJFQ0VCOTY5Cis6MTA4OTEwMDBCQUZDMDBERUJCQUYyMTZEMTg4NzVERDMxNEFCOEJEQkQ3Cis6MTA4OTIwMDBCRDI2MjZGQUI4MkE3RDdCMkU4OEM0MUI3NTVDQTNGRTYzCis6MTA4OTMwMDBGQjg1NDRFMjREOEM1NjJGNDVGRjlEQUU0Mzk3NkZGOTYyCis6MTA4OTQwMDBCNjdCMURGMDlEOEMwQ0RBQzExRTlDQzhGNURBMkVCRkRCCis6MTA4OTUwMDBDMTJCNUYxREM2NEJBNzIzQThEQjc3M0ExNTk2RUZFMjI0Cis6MTA4OTYwMDBFNzcxNkFCOURBN0ZFNzU0MjNCRjU3QzRERTU1MDZGOENBCis6MTA4OTcwMDA3ODA3MTNGMjYyRUI1OUY0NDc1N0I3RUUxRkNGN0VERjRCCis6MTA4OTgwMDA4QkQxODUxNjRFNUU4REZDNDg2OTY4MEIxODI4NkZGRkU5Cis6MTA4OTkwMDBBNkVGQTlBNzcyODc1MDEyM0JBMEYyRjFFOUE3NUM5NDU5Cis6MTA4OUEwMDA2RjUzNDQ4MzhFQUY2MzBCQkFGOTFDQzVDQjczMDY5MTJBCis6MTA4OUIwMDBDQjg1MzM0RjhEQkI1NjlCNjdGNUMzRUQzQjI2OEZBMzBECis6MTA4OUMwMDBCQTdENDEyRTZCRkY4N0JFNUZCRUI3NzA2MDU4MkVEMTU3Cis6MTA4OUQwMDA3NTY0MTVEQjM0Nzk3MzQ0REU0QUYzNDMzNTc5NDc0NEQzCis6MTA4OUUwMDA3OTUyNDQ3OTVBNDQzRTkzRDVFRkIwMDVCMjQ0MjcyMUQ5Cis6MTA4OUYwMDBFRDdEQ0Y0RTk2NDZDMTM5NzY2MDNBQkMyOEIwQUNFMUU5Cis6MTA4QTAwMDBBQkM5RTM2OEJFQTZBMDBERTM2NzZBNUIwNTI3MUVFQjUyCis6MTA4QTEwMDBBQkYxRjE0RUE2Njc1OTlENDFGQzNEQkJEODgyQjZCNzdDCis6MTA4QTIwMDA0MTBFNTRCNzA4MEU4MUQyQkJCNTY5MkJDNkQ1NTQ0MzRECis6MTA4QTMwMDAzQjQ1RDNBRTg5RDk5REQ1NEQ0N0IxNURBRkZERTcxODE0Cis6MTA4QTQwMDA5MDlGOTdFNjFDQzM3QUVBRjlEMTlEQTRGQkY3M0EyRUQyCis6MTA4QTUwMDA4MEJDQUM2OTZBNjdGQjcwQzRGOTUxNjdCQUVCMjBDQTg1Cis6MTA4QTYwMDBDMzg4RkJBRjFFRThENzFBQTY3QkI1RkVFRjg3QjZGRTFDCis6MTA4QTcwMDAxNkJBODk5RDc3NzY4MTQ0RUJGRkIxQTY3RDA0RTg0QjU5Cis6MTA4QTgwMDBGMEM2MjVDOEZERTcwNUZGMTBEODlGNUYyNEVFMjFCMDkyCis6MTA4QTkwMDAxRkRENUI3M0M1N0UwM0FENzc0NDBFQUU4NkE3MUEwNjU1Cis6MTA4QUEwMDA2NTU5NkU5NkE4OUMzRTYyMEJGNjE1QTgyQ0M5NTk5MzgxCis6MTA4QUIwMDA3ODMzQzBGMzQ4NzIxMDVGNjhGOEU5OUEyNDU2REUzN0JECis6MTA4QUMwMDBEODE3Q0U1RDczQjM3RUM4RjI1NzA0NTc0M0ZFQjYzNTUwCis6MTA4QUQwMDA1N0IyRkNEMDYwNUY5MUI2RUZFRkJERUE2NjgwRkYwNjRCCis6MTA4QUUwMDA0Nzc0QkVFRDlCQzVFNEI5M0FCRkIyN0M1NzVBMTZFODRECis6MTA4QUYwMDA5QkQ1NkNCRjgwRUI5NzY2MkExN0E3NTc5RURFQjI4MTg1Cis6MTA4QjAwMDBDMjYxRkE0RjYyNTE1RTZERThCOEY1QTY2MjVDQkZCNzBDCis6MTA4QjEwMDAxOEUyRENEODEzRUY3QzNGNDNCOTJDQTExRTkwMEU3QkVBCis6MTA4QjIwMDA1ODQyMTgxRkI2QUMzNjA1RTVGRDk1NzU1QjYxREY0RjAxCis6MTA4QjMwMDA5RDlFOEJGMkZFN0NBNkFCM0U2QjQ0MzhGRDc2MDA0QkNGCis6MTA4QjQwMDBFQkIzRDg3RDhGNTREMTgwRjEwNkE5MEZEOTUwMEY3QTlECis6MTA4QjUwMDA5QTlGMjc1MUJFNDFGQzVBMzkzRTg2NjUzMUY5MzcyQzIwCis6MTA4QjYwMDA4QkQ5NDkxOTdENkZBODg3RjVEQ0M1RjVEMzE1OEZGQjI3Cis6MTA4QjcwMDAzNzU5MjhGQzdGMDc0NDkyODRGRTZERDQ3N0VGNUU0QjEzCis6MTA4QjgwMDBFNTQ2MUNDNDUzQjhEMjQxMUVEQzBERkVERkRDNzA1RTJFCis6MTA4QjkwMDBENURGNTdFNEQzQkMzNTZDQTdBRDk4RTI0QUQ3QzYwMTAwCis6MTA4QkEwMDBBRDU4Q0JDQTU1NzlCMzIyOUJCNTU3Rjc5REQ0MDYwNjZECis6MTA4QkIwMDA5RkQ0QTc4N0FDODM3NUM0NEEwNEVGNUZDQzk5M0E2ODA5Cis6MTA4QkMwMDBERDAyRENCRjZGQzFGOTEyOTcyQjFERUNFRjEzMTVGRDExCis6MTA4QkQwMDAwREEwNTdBQUY4NzkyQ0RGMzUxMUQ3MjNCMjc4NzUxNTc3Cis6MTA4QkUwMDA0RkVBRjhGNTdDRERCMzQ0QkFGRkQzNzUzRUQ0Q0Y4REEwCis6MTA4QkYwMDA3MEE0RkE0MDFFMEIyRTYwRkE0MDNEMzg2MjkzQzNGMDE5Cis6MTA4QzAwMDAyNTUyNzAwNDdDRkY1RjA0QTdGQjYwRERGRjI4OUNBMjU3Cis6MTA4QzEwMDBDODhCOUZDMkI4MzVGM0E5QkMzMDY4RTQwNTg3REZGMzgxCis6MTA4QzIwMDA0MjQwNEUyREQwQkM1RjQyQkY4MzFENzg2NzVGRjdBM0UzCis6MTA4QzMwMDA1OTlBNzM5Q0U5MEZENUEwRkVBN0NFMkJGNkRGNzc0RThECis6MTA4QzQwMDBCODkzRjRFNEIzNDhGREVDQzhFRkNDQ0JEMDBGNjg2QzFDCis6MTA4QzUwMDA0MkI5NzhFNDI2RTI1QzAwRjI4MzlGQ0JBQUZBNjVFMTkwCis6MTA4QzYwMDA0RkFBMEU4MzFENzUyRTRCQzQ3NjE2MTVBRjQyRjFENjUyCis6MTA4QzcwMDA1MjBBQTdDN0U5QjYwQUY3RDFCRDUzNTg3QzhGQkE2RjFECis6MTA4QzgwMDBBRUUwRUZFRUFFNzhGMDJBOENGM0VCMjI0MUZDNUQzNkRECis6MTA4QzkwMDBFRjQ4ODJGMkFGQkI3Q0RBMjAyQ0E3RjhGNjVBODBERkNGCis6MTA4Q0EwMDAyQjYyRjA3NzA3NTZFNDEzQkM2N0IzNjJEQTk1NThCRUJGCis6MTA4Q0IwMDA0N0Y1MkI0RDMzRTMzODJCQTYzMDdBNUE1MUMxRTIzMEI5Cis6MTA4Q0MwMDA2MTFGMDFCOEY1NDYwRjI5MERDQ0JGNDEyNDU3OUUzNkQwCis6MTA4Q0QwMDAxRUUwNUQ4RUJGRDg4MkUwRjY4RjQxQUY1QzY2NDFCRDdECis6MTA4Q0UwMDAxMkY2NEUzQzFGRjFBNUUyNzgxNEFGREJCMzkwQkVEOTZCCis6MTA4Q0YwMDAzQzY2M0Q5QkVFNUY4QUUzM0FEMTNFN0ZDQ0U2MkE0MTVCCis6MTA4RDAwMDA3OUY1NDhBQzAyRjM1RjY1MjE0QkNDQzNDMDFDMjE4QkM1Cis6MTA4RDEwMDA1MEVFRjFGOTEwREYwQjE4RTczMTgzRUI2QjlGOTU5RjU1Cis6MTA4RDIwMDBCMzgxM0VGMDI2OTczNzQwMzA2MDJGQ0YyNEFDN0NFNkVECis6MTA4RDMwMDBDM0IxNDdDMUJFOTlGOUIwODhGNzBCQzk5MjFCNUNGQTYxCis6MTA4RDQwMDBGMzBFM0FENzE0RjA4RkYzQkZDNjkwMERFMEUwODY3NkFECis6MTA4RDUwMDA3NkU4RkZCRjZDRjA5RTg5RkI2MTc2QkY5Nzc4Njk3QkYwCis6MTA4RDYwMDA0RDNDRjRDN0MwQkZFMDY3MTdEOUZDNDk3REFDMTJFRDlDCis6MTA4RDcwMDA1REQwOEZCOTdDQTdGMzc3NjlDNzUzQzc4OUVDOTdEQUMxCis6MTA4RDgwMDA3NzlGMDBCQzI4REMwMzcwMEYyQ0Y0ODhDODdGQUY1NTk4Cis6MTA4RDkwMDAzRkRGMjQ2M0U4NDkwQjJEOUY1RTJGQzYyRkE0RjA3NDlDCis6MTA4REEwMDBDRkI3RTE3QUQ1RjlDRTQ4MEQ1REM3N0UxNzU2REZGRjA0Cis6MTA4REIwMDBDOUQ4REE0MkYwODdBQkY2MDg3OTU4NkY4RjgxNUZBMjg1Cis6MTA4REMwMDAzQjJGNjI5QzM0REEzNTNEQkU3MzdCMzZEMjBFMjRFNEYxCis6MTA4REQwMDBBRjI2NkRCREVFN0IxQThBMTAzMTdGNEU1NzhBMjAwMTc3Cis6MTA4REUwMDBERURDM0M3RUExMUJERjExRjM1NkUxNjlFODE3MUQ5RTE2Cis6MTA4REYwMDA0OUM2NjA1RjkwNUJFRUY5MjY4NDQzNjQ3Qjc1RkY3QjE4Cis6MTA4RTAwMDBDMTQyQkM2MDI3MzYwQTAyRDI2M0UzODNCMUI4OUYxMTI2Cis6MTA4RTEwMDAzM0MzQTNBNzMyNDYwMUZBN0NEMTE4QzIzODI2RUY2RUJECis6MTA4RTIwMDBGNkZCOUY1RDk2RDAwRTk0NEIwMzk5M0ZBMUVCM0Q3MUVECis6MTA4RTMwMDAyREQ0RUI0QzY2NzREREI5NEJFNkZDNDREODNCMTJFRjA1Cis6MTA4RTQwMDA4OUVCQjA1QzYwRkQ3NjJFODhDNUY4MjhCOEZGNjk4NDkwCis6MTA4RTUwMDA3Qjk5REUzRkQ1ODM3RjQ1QjVFMzhGRUY2MEVGMjlDMDc3Cis6MTA4RTYwMDBFRkY2NjhFRDYwQjgzNzVCM0UyQzJDMUZGMDdEMThFMDA0Cis6MTA4RTcwMDBFNzk2NThFRTI3NzI1N0UwNzg3N0M3MTA4OEMzQTgzNTcxCis6MTA4RTgwMDAwODE4RDc1QjVCNzkyNURFMjMyMUZDMURFNzZBM0VCNTE4Cis6MTA4RTkwMDA1QTAzQjUwNzg3ODVGOUJDRDY3MDZDMTBEODUzRDVFNjUwCis6MTA4RUEwMDA2NUY4QkUzMzJEN0YxM0VDMzBGODk5RERFRURGRjFDOEE1Cis6MTA4RUIwMDBFRTQ5RDdCNUNCQ0VGQzA1RUZCNTM3RUJGMTVGMURBNjdDCis6MTA4RUMwMDAxM0JDMUY1N0E5QTU5QkVDMzAzREEwQkUwRDcyNjIxQ0MwCis6MTA4RUQwMDBDMTdCRjkzNjlFOEY5REQwRTYwNzNGOEQ4N0ZCMkQ5MjkzCis6MTA4RUUwMDAwRkIwNzc2QjZEMDU0RDA0RkNBNjlFNTM0Q0RGMThERDZCCis6MTA4RUYwMDBCQUY2MjBEOEJGRjExM0RBQzBFMkEyRjU5OURGMkRGMjVECis6MTA4RjAwMDBGRUQwQThENkU1MjJEODc1QUE5RUEyQjEyQjg3REMzMjY2Cis6MTA4RjEwMDA1NDlCQjJGQkI2NjBBN0MyNzg0MUY4MDRGQzIxQjFGREI2Cis6MTA4RjIwMDBFRDc5QkVCRkQxN0QxMEU1RjExQ0RGNjBEQzA3NjE5RkVDCis6MTA4RjMwMDAwMjM5QTZEQUI5MjBENzQwOEVCQ0RDNkZFQ0Q0N0U3NDNGCis6MTA4RjQwMDA5RDc5Q0FEODVCRkJCMTczOTgyMUE4RDc3QjJGRUZCQzYyCis6MTA4RjUwMDA0OUFEMDdGNkVFQzVGRDYxMEM2RUExOTU3MTRDNEVDMDkyCis6MTA4RjYwMDAwRjgwODI5RkY4RDdGMjVBN0NENzFCMDQyRjlERUZEQzJECis6MTA4RjcwMDBENUQ5Mjg3NzU1M0Y0RDM1Rjc1Mzk1NzJCRjRFMjlGNzEwCis6MTA4RjgwMDBFQjgwNUY1NTFCRjcwQTdFNEI2REJFOUFGMzdEMERGQzlGCis6MTA4RjkwMDA5RTE0QkUxNzYwMEFDN0JEODIzRjY3MUMwOUQ4QTAxQzdCCis6MTA4RkEwMDBGQzNBNzY3NkJGNEVEQkRFNDNGQzQ1MTJEMkY5RjcyNjVCCis6MTA4RkIwMDBEREJCNTgyQkQ4N0E2NzcwQkNBRkI0MzA3RkNFRTg4NzYyCis6MTA4RkMwMDBENzhBQ0M0OUM1RDYxQjM3Q0M5NUZENjg0MUY4N0RBRTE0Cis6MTA4RkQwMDBDRjM5OUU1NEI4MThGQjhEQkQxN0UwMUUyM0IyRjdDREQ0Cis6MTA4RkUwMDA0MzhGQjJERkJCM0U0MUY3RTdBRERDREY3MThCMTVFRjlFCis6MTA4RkYwMDAxN0JCMDY0MjVDODJFNEM4QkEyNUNBRUZCNjJFREQ2RDA3Cis6MTA5MDAwMDBDMTc3RkE5N0Y1NjNFN0MxRUFGN0IxRkREOEZENURGNEUyCis6MTA5MDEwMDAwMzAxREMxN0M0QTI5RTREQzE5QzA3NzQ1NEQ4NUZEREM4Cis6MTA5MDIwMDAyRjQ5MUVGODlGOEVGMkY4Q0VEQTNCQUM2RUU4MkZDOEJGCis6MTA5MDMwMDBGREUyMkJGQkIxN0Q2QjY1M0ZGNkRFQkY5QUVGQjZFQjMxCis6MTA5MDQwMDAzOEJEQThFNzU4RTA4RkQxRkFBRkZERERGNTk5RkY0NEIwCis6MTA5MDUwMDBERDVGOUZBRjg4NDFCOTE0QTY1QjAzREU5RjhDQ0QyREU5Cis6MTA5MDYwMDAzNjgyMUY2OTM3OTcyMzI1REM1RURGMEQwN0I0MjA0RjVBCis6MTA5MDcwMDA5QUI4REY1OTcyNEM4N0RGMDVEQTdEMkExN0UzMjU5MzBBCis6MTA5MDgwMDA4QzRDQkVFQ0JFMkI4NjQwRkNERUExRDNBRjNFRjExRTY1Cis6MTA5MDkwMDAyRDNGNzdDQTg4RUZFMUNERTZGRUQ2REQwMjcxQzE3OEJCCis6MTA5MEEwMDBERUVEMjZGNDIzNTYxQjk5QkU1OEJENkYyOEQzNTM4QzkyCis6MTA5MEIwMDBFRTk1MTBEN0VEREQyNkEzNUZBQkRBRUVERkY0MEE5NjZFCis6MTA5MEMwMDBBNzNCMjk2NkUxM0UyOEQzNzM3N0M1QjJGNjMxRkVGRjkwCis6MTA5MEQwMDA3ODBERUNDRTdEQTk0RTJGQUQzRjNGQ0RCRDBGRjA5QTYwCis6MTA5MEUwMDA2MTUyRTI4ODdBQUUyQTg0RUY4QjFFRjMzM0JERjgxODAyCis6MTA5MEYwMDAwODFFMThBN0Q1QzY3RjQ3Q0U5NTNFODdGNjczRkNGMUFDCis6MTA5MTAwMDA1NDVDMEY5NUI3QTgzRjFEN0ZDQTg0RTc2NkNGNzc4RjYxCis6MTA5MTEwMDBDQkZDOUZDN0U0NjI3QzJGRTZEOEY2N0MyN0I1MkM0OUIwCis6MTA5MTIwMDA1N0IxMzEwMEZFNkRDRkQzNEM5RjlCNjU1MEQ2MDA3QzZDCis6MTA5MTMwMDBDOEJFNThBN0NFMUU3REFBOENCRDFGNTFGOUYwRTQ4Qjg2Cis6MTA5MTQwMDA5RDYzODM3Q0Q3RkE3NzNCNDkyODBCRUREMUYyRkU0RDI2Cis6MTA5MTUwMDAxMDRGREFEOTNBQzRDOThFQUJEMkYwOTBBNDk2OUYyRkEzCis6MTA5MTYwMDA5RjkwMTk3QzQzN0I2NUE0RTdDQkVEMUZFOEEyRkI3N0JBCis6MTA5MTcwMDBFRTQ0ODJCRkRGQTYzRDRGOEIzQzg3RTg5OTY3NzhGNEM5Cis6MTA5MTgwMDBFQzRFRTU3QTlCQkVGQ0Q2NEM3NzA4RTQ1QkVEMzNERjEyCis6MTA5MTkwMDAxRTk5QUZDMDc4MjE5NDg3QzRDN0ZDRTkyNzY0RDc3NEFGCis6MTA5MUEwMDBBMERCRjg3MTAxNUQ5Qzk2NTk2MTdDMzVDQkM0Rjc3QkRGCis6MTA5MUIwMDAxMjMwNkFGOTUwMkQyRjFDNEJBMjlFREI5ODE0QTYwNzgzCis6MTA5MUMwMDBEOEY4Qjk3MzY0RjlGRjAxNEJDOTkwQzAwMDgwMDAwMDYyCis6MTA5MUQwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU3RDkwCis6MTA5MUUwMDAwQjc4NTRENUI1RjAzRTczQ0VCQzkyOTk2NDI2OTkyNDgxCis6MTA5MUYwMDA5M0Y3QzkzQkU0MDE0MzA4MTEyREVBMjQwNDBDOThEMkVCCis6MTA5MjAwMDAwOUEwNjJCNTM4QkM0MUM5NDNCMEJEQjFDNTY2MjAxMUUzCis6MTA5MjEwMDAwMkEyODYxQTExMjhFMDg0ODc2MkQ1MzY3ODAxQTM0NjE3Cis6MTA5MjIwMDBFRjgwNDhCMUQ1RkJDNzQ3NUJCNEY3Rjc4QjRBMjk1MkFCCis6MTA5MjMwMDA4MTg4OTY0QkVGQjVGNTVGNkJFRDdEOTIzOTQzMjJEODZGCis6MTA5MjQwMDBEQkRCM0Y3Q0IwRDk2N0JGRDY1RTZCRURCNUQ2NUU3QjBFCis6MTA5MjUwMDBFRDFEQjM2QTYwMkM4MUMxQ0Y0QzMzNEI2NEVDMUFDNjUwCis6MTA5MjYwMDA3RjMyNEYzMTZGRDBDNjk4NDU1NUE5RkM5QTUzMjFEMzEwCis6MTA5MjcwMDA3Q0M4NjdBRTBDOTkxNjg5RDQwRkU5MDkyMzBCNTlDQTJCCis6MTA5MjgwMDAyMURENjIwRkVFQ0NDMjk2NUU4NkZEMkM5QTAwRkY4NTMyCis6MTA5MjkwMDBBNjhCNjRENjY2MjlDM0VGNkE0RkJGOEJCMTkzMDc5QzM4Cis6MTA5MkEwMDA5RUY1RjA5RDdERjk5NUNDMkExODlCQ0I0NDNEMzM2QjAwCis6MTA5MkIwMDBCN0M0MzFGNjdDOUIxNEIyNDBCREI5OUJDRDNCQUREMDU5Cis6MTA5MkMwMDA1RkM1NkFBRjZDODdGQ0MwNzZDOUIzMTNFQUNENkRBQkRFCis6MTA5MkQwMDBDQ0RGMDJGOTNCRjc5NzdBNjQ2ODFBODNFMzYwM0VFOEQzCis6MTA5MkUwMDAwQ0NBNTBGRjlBRTY0OUVDRTM3MThDQ0QzNzA3NEQwQTYyCis6MTA5MkYwMDA3QzY3NEY0QjZDMEZBM0ZFREJCMEZGNjVEMDI4MTlFMEY1Cis6MTA5MzAwMDBGOTBBN0ZBRTFGNEExNzZGMzZDMzY0RjlEQ0JGQzI3RjBDCis6MTA5MzEwMDA4MjYxRjk2Q0U4QjdCQjRCNjYzMDVGQjYxN0JFMTcwRUJCCis6MTA5MzIwMDA3RDVGQTY4NDBFNDkzMThDRDU3NzQ3QjQ2NzdGMzMwRkI0Cis6MTA5MzMwMDBENjQzNDA1OTgwRjBFODMyQjEzQjdDMzY5QTc0NTI1RDk2Cis6MTA5MzQwMDAyOTYzN0ZDMEZGMjYzMzY2Q0FGNDhENTNDNzYzMjYzNzZGCis6MTA5MzUwMDA2OTg2MURFNjVEQzVFNzM1QjA0RjIyQkNENkIzMjYxMzNFCis6MTA5MzYwMDBDMzdFM0FFMzE5QkIzQTZDNUMwQjBCNDU0MzdBNTIwRTUxCis6MTA5MzcwMDA1MEY5MjJGMzQ2NEE2QkQ0MkMxQUVGNEVENjZGNjIzOTVECis6MTA5MzgwMDBEOEVGODBDOTA3RTNEOUZCODBBRTI1OTdDRUJGMDZGOTk5Cis6MTA5MzkwMDA2MEZDQzg3QzMwNTVGMEMxQjI1MzJDNzQyRDhDQjc2Qzc2Cis6MTA5M0EwMDAyNTBCRDU4RkU2QTkxREQyNDUwQTBCQzQwMDVFMTcwMTE3Cis6MTA5M0IwMDAwRTYyNDUxQTU1QzZGMUFBMTYwRUUxNjU2OTUwOUY0NzFGCis6MTA5M0MwMDA3Q0FBNjE3ODQ2M0M4Njk3MzdGNjdDNjUwRUNGMjc5OTU0Cis6MTA5M0QwMDAxOEIzQzYwREQxMTkwODQ1NzAyNzRENkExQURCMDQ3MDAxCis6MTA5M0UwMDA1RUIzMzIyODMzOTg1RjRBQkE3NzUyMkVDMDFCNURDRUU3Cis6MTA5M0YwMDBFN0RCNzhEQzYyNTFDNzYwREVDN0IyQTFERTE3Njk5NTkyCis6MTA5NDAwMDBDRkU1NDE3OUEzQzJCQ0RENTAxRTBENzhFOTgyRUZEQkM4Cis6MTA5NDEwMDBBRDJDODBGRDNGOUVBNzUyQkY2RTEzRTc1RkEzRTI2M0IyCis6MTA5NDIwMDA2MzZENDg5N0JFOTAwMUU5OTJDMDFDQzg4RjFBM0VCNzgxCis6MTA5NDMwMDBEQkExNUQxOUI2OTNBOERENjA3QjBCNkI4QjBBNkI1RkJDCis6MTA5NDQwMDBGNUEyOTUzMTU4MkYxNzVFQjAwN0NENTA5NTI5RkU0Q0U3Cis6MTA5NDUwMDAyN0Y0OTdGODdCMzM1QjBGRjlCMzJGREE5NzYwN0Y2N0I4Cis6MTA5NDYwMDA4RDZDNzYzN0Q0NzdDOUFDQTk5QkY4NjUwREUxRkY4NzgxCis6MTA5NDcwMDA0OEQ3RjFDODRENTVBOTBDNzk1RjlBOTZDQURDNThCRUY5Cis6MTA5NDgwMDA5QUJFRDczQjgxQkY4NkExRUY2MDc5NTZERkNEOUNBRkY2Cis6MTA5NDkwMDBDQ0VBNEUxOEVGODJCM0ZGMDc5ODA3Nzg1ODAwRjJDQjVBCis6MTA5NEEwMDA1NTBFNzdFM0ZFNDk2MzdGMDRERjFCN0QzNjBGQzdCRTkxCis6MTA5NEIwMDA3RjJDRjJBQjU5QkVFNzY2MEJGMEQ3MTQ3OUU1QzBCRDNGCis6MTA5NEMwMDAzMDhGRkE3NDlCQzMwQzREQUEzM0ZGRTNCN0I3NDJGRTRCCis6MTA5NEQwMDA5M0ZENDY2NjQ2M0FFRjk5MzQ5QjY1NUYwQTg3OTYyRTYwCis6MTA5NEUwMDAwRDFBM0ZFQTBGNUIyRjc3RURENUU3RUJCQkY1Rjk0Njk5Cis6MTA5NEYwMDBBNjdDRDRBRkYxMDFBMDYwOEI2QTc3OUQ4QzI2RDlFMTYwCis6MTA5NTAwMDBGOTBBRjhEQjZDNkUzQUQ1MDVGMDlBNUYzMjdCNTZDMUVBCis6MTA5NTEwMDBFNzA2RDVCRjAzRDc1MzgzNjFFMDI4RTJEOTlDRjlFOTc4Cis6MTA5NTIwMDA2ODNGRTBBNTJBRjNDQkEzQTk4OEZGRkI5ODA3RTFCRTFCCis6MTA5NTMwMDA2MEFEOUM0QkY0RDg2MjU1MDM2MUYyQUI1MUYwN0Y2NzhDCis6MTA5NTQwMDA0NjJEOTU3NzZFMzVBQjEyMkZBRjFEMEY3MjZCMDkyRDFGCis6MTA5NTUwMDA2MUFBNjIzMTAwRkUxQjM3NEZGRDQ0MUE0REU1MTZBNDg3Cis6MTA5NTYwMDA0NzI3RjAyOUI1N0I0RTBBQUU4Mjc2NEIzNjJGQUU2NTgzCis6MTA5NTcwMDA1MDdFODYwNTREMTY4MEU3MEY2MjNEMzVDQUJENTMyQ0RGCis6MTA5NTgwMDBGMERGQ0VCODlBNTEyODVGOTRCRjJBM0VBNEZGNUFFQzcwCis6MTA5NTkwMDBFQUVBMjE3Q0JEMzRCODNFMkQxRDI3MDAyRjM3MzI4OUUxCis6MTA5NUEwMDBDNUUyQkM5REZFOTc3MDlFRjU5NjdFNTMyNUY0NzNGRDMzCis6MTA5NUIwMDA1RkJGMjBCOUJDQjhGOUQ1OUMxM0UzNTBERTc4RTcxMjQxCis6MTA5NUMwMDBCRDYxN0UyODQ3MTZERjdCODhCRTRCMzMyQzA0REZDOTg0Cis6MTA5NUQwMDA3NDVCRDAwQ0RGNUZERDYyRTY3OUE3ODlGMjI3Qjc0QkI5Cis6MTA5NUUwMDA5NDVGREMyRDA1MkQ1OTU4RkY2MjdDMjVDQUVGRUQ0NkFFCis6MTA5NUYwMDA4Nzk5NUQ4QUE3NDhCQ0ZDNzFEQkVGNjIxODgwRkM0NzQ1Cis6MTA5NjAwMDAxMDJEQjhCRTk4QTMyOUM2NjdDN0IyQTY5ODE5QTU4ODE5Cis6MTA5NjEwMDBBRjFCM0U0MUY5QjU3OEJCRUMwOUExOUM3RUQ5RUVDOUUwCis6MTA5NjIwMDA2Mzk4OUYzQzZBQTEwRERCN0YxRTVGODlGOERCMzFEOTBGCis6MTA5NjMwMDAyMUQzNzdEOTg3NzI4ODI5REVCRUVCRTFCQkIyRTMyQTVBCis6MTA5NjQwMDAxNUQ3Q0I5MUVEMUNFRUM1NEVDQjEzNDhFN0VCRkYyQUE3Cis6MTA5NjUwMDAxM0ZGMkIwNkU2REY2NzQzM0E3ODQ3RTFCQTUzQjdFRENECis6MTA5NjYwMDA5OTgyRjhGRDYzNUQ4QTgxRUEzRjJCMzEwN0UyQzNEOTE1Cis6MTA5NjcwMDA5Qzg4REYxNzRCOEEwRkQ3RDk5MkNENEI2QjU5Q0MxMEYyCis6MTA5NjgwMDBERUQ3QTgzMkUxQkQzMjczNjU2MkJGOERGOEZFNjZENEM1Cis6MTA5NjkwMDA3N0Y1REI4MUNGNzFGQzE5RUZGRkY2NTZENzEwREY0QjYyCis6MTA5NkEwMDAzMzM2NEZCRjA2RkI3RkQyNDhGQ0E1RjVEM0I4RUREQkMwCis6MTA5NkIwMDA4MjNGMTgwQjAxOUUxNjBCM0M5OTMzNTdFNkUzRjg5NzRGCis6MTA5NkMwMDA1QjBGOEI1NzM3RTUzQjZDOTc1RjE3ODNFQjdEMUJBQ0NDCis6MTA5NkQwMDA4RjYyQzZGRUFBNEFFQzJCQTAwMzRCOEIyMzNEMzNEMkVDCis6MTA5NkUwMDA3QUQ0RjQ5M0FERDBDMEY1QkU4Nzc5Rjc0MDlBNjQ2NjFBCis6MTA5NkYwMDA1RTA5RTQ1Nzc2OTY0MkU1RDk1OTI2QzI4N0YyOTdFNTg2Cis6MTA5NzAwMDA3QkRGMDRGODlGNTNGREQxNTk5MENGNjRERUIxQTg2Nzg5Cis6MTA5NzEwMDBENDAxNDc1NTJDRjQ2NjQzMDYyOTQ3MzhDQ0MxM0QyNDczCis6MTA5NzIwMDBFNzIwMEY3OERBOTRDMDlFNTgxRjA2Njc4NkU4MEZENkE4Cis6MTA5NzMwMDBBQjBCRkIzOUZCREU5NzQ3MTE4RjBEMTk5RjhFNDZCRDkyCis6MTA5NzQwMDBERDc4RjEwQjkzMEFGNEI0RjU0QTI0Njc2RDFFMUY0M0NDCis6MTA5NzUwMDBGRTY4RUNBRDYzMEI0QTg2RTQ2M0EzODdDQkVGNEJFNDcyCis6MTA5NzYwMDA0Qzk2OTFDQjMzRDcwMEY1MzMzNTlCQ0JCNzRFMjc1RjYzCis6MTA5NzcwMDA5RjVCOUJBMzgyMjhGN0I2QkE4MjU2MDQzQUJBM0NDMEQ0Cis6MTA5NzgwMDA1MEJFNEYyRjk3M0QwOEI2NjZBN0Y4MkM5QzVFMTZFRjhCCis6MTA5NzkwMDBBQjRDNDY3RUY1QzgxRTE0RjE3RERFOEZEQkUyMjFGRjY3Cis6MTA5N0EwMDA2NkY5NjQ4RjBDNzk5Qjc3NTc3QjM2Q0VEQjYzMTRFNUMzCis6MTA5N0IwMDAzOTAxOUNGNzFCMTMyQkM5NUU5OUVFOTU2OTVDQjYyNEExCis6MTA5N0MwMDAyNjg4QUFBMkNGRkI4RTZCMDE4Q0ZCMURFNjdERTQwNEVDCis6MTA5N0QwMDBEMEIxMDY5NDM3RDJCMTBGQzcwNjdBOUQ3MUY4MjcyMDExCis6MTA5N0UwMDA1RUI0Rjk3Q0RCMzNGNTkxMTNFMTc2ODY5N0RCMDNGMDA5Cis6MTA5N0YwMDA4OUVCQjFGMkUxRjEzMDVBQURCQzBFRkJCOUZFM0E0RTQ1Cis6MTA5ODAwMDA4N0QzQ0Y5QTgzQUI2MUZDRDM1NkQwMzM2MUZBRTJCNEVECis6MTA5ODEwMDA5REVCMUQ1Rjk2MjRFQ0MyRUUwQzk0RkI4Mzc5NjU5NDVFCis6MTA5ODIwMDAwMUQ3RkQzRDBFOEUwRjk3QTkzQjAzRDdEQjlGMjQ3RDBCCis6MTA5ODMwMDAzRjc3QjZDQjJDMDg3MjY2NjlCQkM0ODIwMEUyRTlBNzA5Cis6MTA5ODQwMDA5RUNGNDBGOUZCQzk5RUU3MzNFNjg1QzExN0Q5NEU0QjQxCis6MTA5ODUwMDBCRkFCOEREN0YxOThENzAyRTNDRDYzREE3OEExMzQxQzgyCis6MTA5ODYwMDA2RjlFQzdGQzIxQ0EwRkQ2M0VEOURCMUY2NjNGOTA4NDhFCis6MTA5ODcwMDAwQ0FCQ0YzNjdCNDk3RTlGODNENTg4N0NBN0I1M0JCN0ExCis6MTA5ODgwMDAyNENBOEI3NkU2Mzk2NjA5NEEzMEQ0QkM1RTM5NjRDNjkwCis6MTA5ODkwMDBGRUJDREU1QzE3RDBCQjQxNkIxRkQxN0ZBN0UwMUZBOUM4Cis6MTA5OEEwMDA0NzBBRDlBMTdFNzRDOTAwQzlEQkE1MTZERkQxNTQyOEE3Cis6MTA5OEIwMDA1QThBNzQ4NEZBNTM5MThFMTJGMkFCRDc4NEYzNTYyNEU5Cis6MTA5OEMwMDAyRUNGQ0YzODdDNzc2N0MxQkMxNjc2RThFOTk4OUVFNTQ1Cis6MTA5OEQwMDBFMEYzNzVCOEI4M0REODYwNTM1MDVGMjRCNjMyNkUwN0Q4Cis6MTA5OEUwMDA3RURGMTA0NDdERUQ4QThBMTlDREMwOEUzMUE1Qjg2RDFBCis6MTA5OEYwMDAyOEE3QUVDRjhGNkEzM0M0RTJGNzhDMjBENjRGNEYyOTBBCis6MTA5OTAwMDBBNDc2ODEyQUNFREY4MTQ0MTY2Qzk1QjBDQjI2ODlFQ0YzCis6MTA5OTEwMDA0MDQ3M0Y1M0UwN0JEQTA0RTY1ODBGRDlERTJDNkUyNzMwCis6MTA5OTIwMDBCQTk5NjdCMzRDNzY2MkI3ODQ3NkEyODYwNzREQkUyMzk4Cis6MTA5OTMwMDBERkEwREMzQjJENTk4ODZGQTQ1RTg5RUMzRUQ5RDAzRDc5Cis6MTA5OTQwMDAwN0ZCMUQ4OThGQjY0NEYwRDE5NjdGMzIxRkVEMUE5MTI3Cis6MTA5OTUwMDA4RkZDMkFGMTkxREIzMjNDMUY4MURDRkM0NkY1NTlDMEJCCis6MTA5OTYwMDBBNzAwQkU5MjA0QkUxRTE2RjI2NUUwRkIxNkEyMUJGQzA5Cis6MTA5OTcwMDA0ODM4REY1QUQxNUZBREM1MTY5MjQ3OTM5Q0Y4NzQ1MEIyCis6MTA5OTgwMDA3RTQzM0ZEQkMwRkVDNDdENEEzMkRBQ0Y5MEE2QjZDRTFFCis6MTA5OTkwMDA1NUI5RkRERUQ3MkY0MTdGRDE1NzU5NDhFRjNENjBFOERCCis6MTA5OUEwMDBDQjQyM0IzRkE5QTg2OTFGRjI0N0QyOUM5MkIyNTZCMjY0Cis6MTA5OUIwMDA0RkQyOUMyOEY3NTFENkUwRkMxQjlBMjdGOUI4MUQwMDFFCis6MTA5OUMwMDBGRDIyMUZENTk5NjgzRkQxNzA2RkE1OEZEQjAxMzVCNDlCCis6MTA5OUQwMDAzRTFBMzc1ODU1RDQ2NzkzN0FCMzU2MjE3RjM0QUUwNDc0Cis6MTA5OUUwMDBGQjA4RTU2RjRGRDc5NjQ1OTA2Rjk4NjVGM0EwOUQ2MjkxCis6MTA5OUYwMDBCNUNDMkNDMTc2QUM1REJGQ0VENjQ5REQ2NDE3MDdBNkM5Cis6MTA5QTAwMDAzMjBGQ0FFRDczNDE0M0MwMzgwNkU1NkNGRjhFMUZBMUNCCis6MTA5QTEwMDAxRTVGNUFFMjA5QThCOERFMDQ1RkU2MzJEMjBCOUQ0RTAzCis6MTA5QTIwMDA2RjcyMUNFMEY1RTBERjY0REExNzc1OEU4NTNDQTQyRkI5Cis6MTA5QTMwMDAwOTdBNzZENjc5OTM5RDkwOUZCN0MxNEE3OEVGRUNFMjg4Cis6MTA5QTQwMDBFNUU3RUM4MDIwRTgzRjQ1RTZGREIxNTgwQkQ3MzM5N0JBCis6MTA5QTUwMDBDQTAzMEJFMjNENzEwMkQzN0UzNjYzM0U0NUNCNzczQ0IxCis6MTA5QTYwMDA0Njc2OENCNkRFM0JCMzM4M0NGNjEyNUYxNjVBQkVCNzZDCis6MTA5QTcwMDBBQkUzRkFBMjYwQkQyN0NBMDY2RDUzMTQ0MEJCM0IxQTg0Cis6MTA5QTgwMDBDN0U0NzkyRjBFRjdBODAxMDA0OUMxRUM3RjZGQUM5RUE3Cis6MTA5QTkwMDAxODlFRTdGNTg3REEzRjMwQTMzQThERjRFQjYwMzk4MjAwCis6MTA5QUEwMDAwRDdBNTdDQjdCQUQwMEM3NUFGQjUwQjkwMkY2QTRBNTdGCis6MTA5QUIwMDA0NzEyRUQyN0NDOTgwQ0FBRjg5QzI0QzYwRjI4MUJCRDkyCis6MTA5QUMwMDA4MDhGODdBRDRDMzc1RTM4N0M0QTQ0RkY0NkU4REZBNjdFCis6MTA5QUQwMDA4QUZBODE1MkRGRTQ1QzgwQjc0QzZCQkZBQUMzMEJGMEZCCis6MTA5QUUwMDAzRDZDRDRGNzQ3MjgxNUVEMzFBMzhERjdFQkRDRDczNzY0Cis6MTA5QUYwMDA2RTQ4MUJEMkZGNjAwRkQ4QjNDNzBGRDkwMTZCREZBRjIxCis6MTA5QjAwMDBFRDE4MDM2MzQ1M0IzRTM3QTE3RUQ1RjQ3OUEzNEIyMjg0Cis6MTA5QjEwMDAzQjIzNzJCRDI2NjVGM0Y1MEE3NjZENTIzNkM5MEQ2RThDCis6MTA5QjIwMDBFRkQ2QTJCRDJCOTM5RDNCMDU5NzU2RTM0QTFGNDNGQkZGCis6MTA5QjMwMDAxMkVDODZENDZDQjIxQjNFM0Q3OTA4QkU3N0NFMzg0RDEwCis6MTA5QjQwMDA3NjdFRTM0NTg1RUM4RjQ2QjAzRkQwNkVCN0Y0NzI3QkVFCis6MTA5QjUwMDA5NkY1MTg0OUVGNkE3NEJGNTNDODlGNEUyN0U4N0RFNDE1Cis6MTA5QjYwMDBEMzk3QTVGMUM4QTc4QzM1NjVEQzA0MzQ2OEM5RjZFNjNGCis6MTA5QjcwMDAyMTFDREE3RTJDMTJERUVCQjJCOTVEREU1ODU4QjUyNTE5Cis6MTA5QjgwMDAxRkZCREYyRDMxRDRGQkVCMEIzRjRBNDRGQkE0QjFGN0E1Cis6MTA5QjkwMDBDM0M0ODU2MUVEOTZGNjNDNEE3ODU4QkFENzM4RUNGQ0Q4Cis6MTA5QkEwMDBBRkNCOTY2OUZFMEQyRjFDRjBFMjdBM0YxRDk0NjgyRDE1Cis6MTA5QkIwMDAyRjUxODJFQkQwQUU1Q0IyQzQ4MDk2MUEyQjBGQ0VCRDczCis6MTA5QkMwMDAxNUQ3M0Q5QjZENjI3OTMwQkY1Q0Q0NEJCODlGRDgzQkI1Cis6MTA5QkQwMDAzMzcwMERFRURCRTBBRjA0OUZCNkZBMTZEMUZBREUzQTMxCis6MTA5QkUwMDBEQjYyNjM1OTA4RTdCQ0JCMDkwRjhFMjgyRkUyNjE3RDU5Cis6MTA5QkYwMDA2MTU1MzI4RUQzNTAzN0M1ODFGRTkzNDZCMEIzQjBCQ0E5Cis6MTA5QzAwMDBFMURFRUY5MjNGNDU4MzZCN0Q4RkIxMDZFREFGMEFCMDg5Cis6MTA5QzEwMDBCN0ZFMTVFMDRFOEY5QjU2RTM4MUY1OTgyQUVGMUJCQkVDCis6MTA5QzIwMDAwMkYyOUI0NjkwQkZCRkM5RTFGNDZDOTM3QzgxRUZFMEU4Cis6MTA5QzMwMDBCQTdGNDE2MjdCRDRBMUYyQ0MxRTZFRDdERDlDQ0RFRDA0Cis6MTA5QzQwMDA0MEVERkJDREQ5RENERTlDMThFODlCODRCQ0Y3OEFEMkMyCis6MTA5QzUwMDAxRjhERjY2RjIzRjM3RTg2RkI0RUU2QjNBOTdCODg0RUZECis6MTA5QzYwMDA1Q0VFQjg1QTU0RjIyQjU5NUNGRDBGOENDMUYyODkwQTk0Cis6MTA5QzcwMDBFRDI3OThEMkZGMDg4RTdCNzY5RENCQjM5RTA5RkVDNTVCCis6MTA5QzgwMDBGQ0JEMjU0MURBM0Y2NEZCRTcyMzdEMkI4NDFENzlGNjdCCis6MTA5QzkwMDA4NTFCQzZDRTJCMTlCMjkzRDY3NTU5ODNBQjAxMEZFQjNBCis6MTA5Q0EwMDBFQ0VBNEY2QTUwQkVGRDQ1MjFGOUM2MkMwMzdEOTM5MDI2Cis6MTA5Q0IwMDAxRUZGMTU0N0ZEQUVCMzA2RDcyMUZEMDMxQjhENTRCRTE1Cis6MTA5Q0MwMDAyRkM1REY4MDdDNzlBQUFFMjYxRkY3QzFDQzE2QzhBRjlFCis6MTA5Q0QwMDAwMzdFMzJCQTNBMThEQTBCQjA3RDIwM0Y4M0M1RTU2M0M0Cis6MTA5Q0UwMDAyQUU0MjcwNUU2MkExMkNBRjkwOEZCNjMxMkZBNzk2ODAyCis6MTA5Q0YwMDBERjAwODNDM0Y3MkEyMUI2RjI4MDBCNEU1QTY4MDlCNEZECis6MTA5RDAwMDA3RDE1M0Y2NDhGMUNGQjcyOTY4MjFGMzUzQkM1NjBGMTQ5Cis6MTA5RDEwMDAyRkM1QTZENUIzQTM5ODhDN0NCRjY2RTBBODAxRTYxMzM3Cis6MTA5RDIwMDBFREVBMjMzQkI2QkU1QkEyNzFFQTBCOUYzM0ExREZFNEYxCis6MTA5RDMwMDBBRTZFQkUyRTFCQzUzRTAwRjA5NzgxRjZDMERBRUM2ODExCis6MTA5RDQwMDBBMUM3REIzOEJGQjMzRURBNDdCMzY3MzgzRDE5ODM3QTIyCis6MTA5RDUwMDBGNkYwRkRDNDJBQUFBN0Y1Njc1QUNERkQ1RUY1QzIxRjJECis6MTA5RDYwMDAwMzcyOTBDQTdGOTIyRDg5N0RFRDZBOTE3NkYwNTQ4Q0IyCis6MTA5RDcwMDBCQjQ5RUFGM0NBODhEN0IxOTIyNzlDNkZCNEY0MjkyMTcyCis6MTA5RDgwMDAyRjYyMEYwRjRDQzFGNTNCMDBGQzg1N0U5OTJENTJEREYzCis6MTA5RDkwMDBEREFGQzFGQ0I2OEMyRkYyQTAwOUU1MDY3NjkyQ0JGMEMwCis6MTA5REEwMDAzQkIwMjJFMEJEQkNFN0IzMjlDODM3NjA3MEQzN0E2RDAxCis6MTA5REIwMDBFOEE5OTRFQjZEQTRCNzY5RkY5ODE0RERENDg1RTU0OTUzCis6MTA5REMwMDA3NzE0OTI1RThEMUFDN0VFOTgwMURGN0YyRUYwOUE2Q0ExCis6MTA5REQwMDBFMzdFMkVGN0VBNDBENkYyMTIxQ0RGNzdGNzZCMzg3RTZGCis6MTA5REUwMDA2OTE0RjkyOTkzODAzNkY2Mzg0QURCRDEyRkU0NjZBQjQzCis6MTA5REYwMDAyNEFDRjc2ODBDRUYzRkMxMjBERjUxNTc0MjcyOTdGMjU1Cis6MTA5RTAwMDA3MTFFQzlCQjEzRDI5RTZDMjdGNzY3OTk1OTBEQzI4OTgxCis6MTA5RTEwMDBERjY5M0YwNjlDODFGQjU5RjQ3MzYxM0Y0OTM5M0MzRDQyCis6MTA5RTIwMDA5QjFDNTI1MDQwNkM2NUZEM0JGNjIwN0ZGNjk4MUQ4OEM4Cis6MTA5RTMwMDBBN0RBOUU1RjFFNDc3RDU5NkI2MUREMzJEQTJCMTE3NjAyCis6MTA5RTQwMDBDNkNBRjQ5OTg3OTAzRkNGOUQzOUI5RTM3RUY4RjZFODBBCis6MTA5RTUwMDA0RDA3M0Q3RUEyOEJERTdFODhEQzJGRUNDNDJBQzkyMzExCis6MTA5RTYwMDBEQjdCQkZDQkQ2REI3QjgzRjk3RkI4QkRDN0VERkFDMDA4Cis6MTA5RTcwMDA5RTY4NzU0Rjk4M0M2RjE0RkJCNDczNEJDRUM3QTA5RTgxCis6MTA5RTgwMDBGOTc4OTBCRjQwNEY1NzBDRDkyQkYzNzY0NzdGODhFQjdBCis6MTA5RTkwMDA2QUQwRUU4RkIwMUI4RTNEMTExRDQwRkE5RkVGQjY5MjM3Cis6MTA5RUEwMDA5RjRFNDFCQjA3RTAzOTYzMUZGODAxMjJDNzY1RjI3OTc1Cis6MTA5RUIwMDAyNURDM0ZFQzMzN0E1NjQzN0Y4RDc3OUVGRUI5MDFENjgxCis6MTA5RUMwMDA5REQyMDU3NjRGMkNEQUZCNkEyQ0M5RDlENzY1QjYwNzI3Cis6MTA5RUQwMDBFRDMyQzVFQjQwQkY4NzA2QkZFMjlDRTJGNjk2QTA1QzgwCis6MTA5RUUwMDBFNEYzNUY2NjBBRTU5MzFENjQ2MjRCMjgxRjEzQ0E0N0JCCis6MTA5RUYwMDBCQkU3MjVBMTc3OTY0NTQxMUVCRTM3QkJGRDdGNDFCQTIyCis6MTA5RjAwMDBBNTk4QjlCQ0MyNzZGOEJENEJEODVCNUQ4MDEyMDdFMjVDCis6MTA5RjEwMDBFNTM4RUNCQkIzODRGRUM2RkRDRjgzRTlDMUY1RTRDN0U5Cis6MTA5RjIwMDBCMTEwM0QzRjdFQzVCQzEzRkQzQzFGMTcxQTQyMjZFRTAzCis6MTA5RjMwMDA5NzIwM0Y5NkRBQUVCMDY0QThBRjFFQjcwNjU1RUVFRjk1Cis6MTA5RjQwMDBCMjE4NDBGRkNGN0ZGOEFFMzc3MDVGMzFGRjE1RUVDNzE0Cis6MTA5RjUwMDA5QTdGRTdDQUU5QjhGRkY4NzhDNjE0MTNDQTlCODVDQzg0Cis6MTA5RjYwMDA0RjdFRTdDNThDRkJBMTk3QjIyMEY3NTczMzg3MDFDNzE3Cis6MTA5RjcwMDBCQjBCQzRDNjU2MTQzNTAxQzBGRTU1RjA1OTMyNDg2OEIzCis6MTA5RjgwMDA1N0E4NkQ5MDI3QTNEOURCNTEwM0UzQ0U2QjMzRDBCRTI2Cis6MTA5RjkwMDA2NDdFQkJERTlGN0U2MUZEREQzNUE4QzdEN0I2MTlCOEVDCis6MTA5RkEwMDBGREQ4MkU5MTFFOUZDRkJDNkVCNDNCMzRCQzE2RTRDNENBCis6MTA5RkIwMDA3M0ZGNjg5QkMxOEJFMzVDOUY2MzIyRkUwMzEyMDU2OUZDCis6MTA5RkMwMDA3RTIyNkQzMzBBM0ZCQzgwNjMxNTMzODQzMDM1NDgzQ0I0Cis6MTA5RkQwMDA1REVCNTA2QTg2RDNDRjVBN0Y2REM2MjYwQkZBQzMwNjU3Cis6MTA5RkUwMDBEMjBERTQwN0JFNjBGMkNFMjYzRjZBNUMzRTQzM0Y2MjdDCis6MTA5RkYwMDA5QkJEQTlCRDg2OTdEMzlBQjk2MDFERjA1MUY5QjUwQUVBCis6MTBBMDAwMDAzN0Y4OTgxQTg3RjIzMjNEODdEQjBGOTFGMzVERDhBMUJDCis6MTBBMDEwMDBDRjQ3OUU0RjJDMERFQUYzRjM5OUJGMjAzOTA3RkQ0NjM5Cis6MTBBMDIwMDBGQUVGRTkzOTVDNUU1RDU4OUYyNUNFMDEzQzc0MEVEMDk1Cis6MTBBMDMwMDA2NjU0REZDRTQyNzlCNTRFMjE3OUI5MkE4REUzQ0I5MEIzCis6MTBBMDQwMDBDRUQzNkM2N0Y1NkNFMjVGMjdEODE3MDQyRjg3M0ZGQkYwCis6MTBBMDUwMDA1QTk3ODQ3QUIzQ0RDOUY5RjI3RjBBNzcyNEJDMzdFNEUyCis6MTBBMDYwMDBFNDEzQkM2RDY4RTRDMTc4NkRFQkE0MjBDNzE3ODdGQkNGCis6MTBBMDcwMDA0QUZEMTc0QjcyRjQ3MjY4MzBGRjhGREY3NzcyN0U1Qzk3Cis6MTBBMDgwMDAyNzhCRjVFNjIwMzkzNENGQzFFN0Y0QjFFNDc5MjI4NDk3Cis6MTBBMDkwMDBERjZENjAxRjAwRENGM0Q3Qzk2NTY4QTc0QzlBNjlBMzIwCis6MTBBMEEwMDA3OTM0QkM2MjI1N0Y2QkZEQ0FGRTBDQjI2N0FCRkFGMzU0Cis6MTBBMEIwMDA5Qjg2QzEyQjQyQUI2OEYyMEJFQUNENzNDMTNFMDFENzQwCis6MTBBMEMwMDA2REJCRkU5QzBBMzQyRDBCM0Y3NzlBOTlFNkJEMkYyNzc2Cis6MTBBMEQwMDAwMUY3MjMxRkVGRkIyNUQyN0I5Rjk1RjQxM0ZDRUY5MDM0Cis6MTBBMEUwMDAxOUU1RDcwQjU5NjQzN0U1QTdGOUVGQ0Y0MUJEMUUxNTI4Cis6MTBBMEYwMDBEQUYxNjQxNkRBMjlEQzRFQUFFRjM1NzdBMTFEMzhBRjA0Cis6MTBBMTAwMDAyREVDREMwQkZGRDlBMDNGMDc2M0VENzFFNERGNjA5RDEwCis6MTBBMTEwMDBGQUVGNEJCNjQ1QjRCQkU0NUM4Q0VCRkI0RDI2RkYyODU1Cis6MTBBMTIwMDBCNEVGQUVCRkNFOUI4QzcyRjVDQzUyMDM0M0ZBQ0U5NzAwCis6MTBBMTMwMDAzRDhCNTA4RTlDQjFFQUVERUYzMzc2NEVBRkREODM3NEVDCis6MTBBMTQwMDBGNkU0MjM5RDc3OEY0ODY3NEYzRUQyNzlCRTgxRjlDM0VECis6MTBBMTUwMDBGQkE5NDczQTAzN0Q5NzA5M0E5RjM5NzA1NTNFRDJGOURBCis6MTBBMTYwMDBEMzdENTdFNTIzOUQzNzE5M0JCQ0I4NkU3NjY1RkFGNzZBCis6MTBBMTcwMDAyMjFFNEY0Q0Y2OTFGRDA0RjIyQUZGOUJGMEUzOEIxMTU3Cis6MTBBMTgwMDBGQ0Y4RTJGRjFFM0Y1MkJCOTFGNEUxRDE5Q0UxRjVBMTQ2Cis6MTBBMTkwMDBDQkE0QTZBMTNDOUM2NzMxN0ZBRDVFQzQ5RjYxRkQ2QkUzCis6MTBBMUEwMDAxNjMzRjkyNTVFRjlGMkYzODc5RTQwM0JBNDU3MjYzQjEwCis6MTBBMUIwMDA0NEVCRUYxNUM1OUY4MzdFODU1NzhFQkIzRDAxNjlFNDU3Cis6MTBBMUMwMDBGRUVGMTZGQjE4Qjc4NTA1RDBGRkExRDlGRDlBRkQxODQzCis6MTBBMUQwMDAyOThGREYxNzc4M0M5REUzRkQzNkVEMTc4NUJGNzY4OTIzCis6MTBBMUUwMDBFOEQzMTJGQzlDREJBOUJCMjVGMkM3NUFENDZFMkZEQTQ4Cis6MTBBMUYwMDBCRDBEMkZDRjc1QTBCRkY2NTQ5MEZCNjcxQjBFOEMyNUFECis6MTBBMjAwMDBGRkVERDJFMEFCQTE1NEI0MEI3QjI1MDdFRTFGOTZFRTE5Cis6MTBBMjEwMDBGRTMwMDZDRkJCNjEzRkZBNDk0RUQ4N0U3NEIyRDg4RjZDCis6MTBBMjIwMDA5RTBBN0UxQzgzRTdFMjMwRkU1NEQ0Q0JEMUFFMDExM0VDCis6MTBBMjMwMDBGMjZGMDNFQ0QzQTAwQTZCNTAwNjhFNjI3RjBEMkVFNjAwCis6MTBBMjQwMDAwOUEwQThFOEQxRUZEQkI0RjNDQkFEM0UxM0M5QkJBRDk5Cis6MTBBMjUwMDBCRDUyMTBGNzY5ODkyNjdGNTYxQUVBMjc5NkU2QTA3MzQxCis6MTBBMjYwMDAyRUIxNUVGRTMzQzc5Qjk4M0IzRUZDRENEOEZCOTcxQ0FGCis6MTBBMjcwMDA3RUFFNENFREZCQjdDNDEyMUZGNjFCOTk5N0VDODAyREY4Cis6MTBBMjgwMDA3NjIxOTcxNDkyNTM3RkRFRTZBNDdEMEZGRDQwRkQzRkJCCis6MTBBMjkwMDAwN0IzMjhBRkU5RUI0NTBBMEIyOTgwRjc0NUIzQkNFRkJDCis6MTBBMkEwMDAyMURENTA3RTg3MjJFNDc3Nzg3RUYwM0M5QUY1NzFGREJGCis6MTBBMkIwMDAwMkYyM0MzNERDRjlCODM4QTdDNkYzRERGMEY2MEQ2Q0Q5Cis6MTBBMkMwMDA4MERBRTEzOUFGQUU1RjZEMUZDMDlBQzZBQTAwRjc1REI0Cis6MTBBMkQwMDBCN0RCM0M2OEJGMzQwMjVGMzc5NzBERjFFMTMyMzExNUNGCis6MTBBMkUwMDA4RDBGMUI4NDlGQjc3MUM5NDdCNDFGNjhFQzkxMUNFOEEwCis6MTBBMkYwMDBERjVERTZFMTdDQjgwQ0Y2NDlFNkQxOTdBRTVCRDYwREEyCis6MTBBMzAwMDA3QzE4MDZGNzQ4RUI3ODVDQUU3RTFEMEZFNkZGNDlGRTMxCis6MTBBMzEwMDBDQ0VCNzJGNUVCNTc5QkJGRTYxNzFGOUM2N0FGQzRENzFBCis6MTBBMzIwMDA1N0M0QkMyMkY3OTc5MUZFNkM2RDdGNzhBNTcyRURBNjlECis6MTBBMzMwMDAwODdDRENGNEJGOEM4RjkxRTREQURDREM5MUU0OUFGRURCCis6MTBBMzQwMDBCQ0UwMUJDQkI1Qzg3MzgzNUNFRTA3Qzc3MzAzM0NENzc3Cis6MTBBMzUwMDBGRDlGOUUxQjdDQTI3NjI0MUE0ODBGN0E3NUU3QTk2ODk4Cis6MTBBMzYwMDBBN0UzMzhFRERCNjVCMjBGQTZDOEZDMUNCQURFNkUyNjhCCis6MTBBMzcwMDAzRjZERTQ3OTZCQTMzQTQ1OUMyRkY2RkRGNjZBRDQ5RkI2Cis6MTBBMzgwMDBGQjhEMENGNUZBMTJEQjYyM0FDRjZDOTQ5RjMxMzlENDE1Cis6MTBBMzkwMDA2MUNFMTk5NTQzNjRCRjdGRDNGM0Y3NzVCOTgzRTdFRkI3Cis6MTBBM0EwMDA1OTc4RkVGRUFBRURGMzc4N0YxODVEQUI0QUMwRDAyRjM2Cis6MTBBM0IwMDBBMTM4OTY2MUU1RjYyMzgyNEZBMjQ1RkM4NDQ1MDkzMDE5Cis6MTBBM0MwMDA2NzU4RkI5MURBRkQzNDk3REJDQkFGOEEzODFBQjc4OTJGCis6MTBBM0QwMDBCNTYzN0NDNkMzRjY2ODJGRUU0QkRDMDYxRUU3RDM5MjRFCis6MTBBM0UwMDBFRERCOEU3MkQyQTI3MjNDM0ZGRUMyMkRDQzAwRjM3RjE5Cis6MTBBM0YwMDBEQ0Q4NERGMjI0NTA2RkYzQTA1Q0Q0RkMzMDVBRkY1NkU5Cis6MTBBNDAwMDBCMTVGQkQ1MkZFM0YzMEM4Nzc5Q0ZGMDdGM0ZGMjQ3OTUwCis6MTBBNDEwMDBGMDZGREE3OERGRjQ5QzZDMzNFMDQ2Qjc0RTE4OUQ4NzE2Cis6MTBBNDIwMDBCRDgxRTczQjU5OTdGMkYzNDhGRDhDQzRENzZGRTdGQTNCCis6MTBBNDMwMDBERUNDMjVCOUUwMUQ0REU3RkU1NzI4NzdBMkNCMDczRUJECis6MTBBNDQwMDA0NjdGMEZEQjZGNTY3MURGODE3RTBGRDI5NzFCOTJCOTZCCis6MTBBNDUwMDAxRTUzM0MxNTg4NjdCMEY3MkEzMDRFRUEwM0ZDRUZENTRGCis6MTBBNDYwMDAyM0RCODdBNzA2RTUxM0I3MEY0RjhEMjg5RkZFM0VGQjIyCis6MTBBNDcwMDBGMDQ3OTlCRUQzQzg2NzI3MkFCREY5QTgzRkQ3REEwMUFDCis6MTBBNDgwMDA3RURDRjczREM1RTM2QkI2NTkzOTdGNkU5MzM4NUZCMjFBCis6MTBBNDkwMDBFNjc4Q0Q3RjQyRjMwQTNDQ0JDRkM3MjNGOThBRTVFOUMyCis6MTBBNEEwMDBGOTZBMzBGRjRGOTZBQkI2NDEzOEZFOTdFNUVBOTJGRjY2Cis6MTBBNEIwMDA4QTQxM0ZFOEM4RkQwNDg4NkUxNTU1N0Q4NEI3ODE5N0IxCis6MTBBNEMwMDAyNUI2MzNDQzNGREREOEM3RTNENEQyMDVCQ0RBRjcwQkQxCis6MTBBNEQwMDBDMkRFNUQ5NEU3Q0RDMDc4QUY0RkRGQjM1ODU4MkM5OEZCCis6MTBBNEUwMDA0MkM4NjM2ODk3Rjk2Qzc0M0VEMEQwQ0RFMzQ4MUE1NkUxCis6MTBBNEYwMDAzMjNBMEY2RTQwRkY2NzA5RkEwNUVCMThEQTdGQ0ZBOUYxCis6MTBBNTAwMDBGRUMyQkNGMTc4OUU2MTBCQzhCMUU4Mzc5RkMxRDBFRUE2Cis6MTBBNTEwMDAzQkZCMUVDRjM3QThGRTEyMkM2RjVDRDlBRjNCODdBODQwCis6MTBBNTIwMDBGOEVBRjMzNUU4RDcwMDc4Qzk0RkUwNDJCRjREMTg5REVGCis6MTBBNTMwMDA2NkU3RjFGODRCMkRCRDI5MDI3RUY0RTMxM0ZGNzdDQkRDCis6MTBBNTQwMDA0MUI0MTdBM0Q1M0UzQTE3NjhEOENGOERCODBBRDk0Qjc2Cis6MTBBNTUwMDBGRTdCNzY1NzFDNDMzRTZBRDg1RjM5RjYzNUFBNkYxRERECis6MTBBNTYwMDA4QkY2NkVDNUVGNkIxREU4QTdGOEY0NUExN0M1MUY2NDhDCis6MTBBNTcwMDBDOEZENEJEMURFM0E5MkVEOUY4NEY4QjA5NzA3QTdBMkIxCis6MTBBNTgwMDBCRDlBMDlGNjJBREFCRjlGRUU5QjNBMTZFMUQ2RTRERkMwCis6MTBBNTkwMDAyNkY0N0Y0M0JGOUJFQzdBRkYzNkIzNzhCM0VFNDdGRkQ4Cis6MTBBNUEwMDBGN0NFMjREQTNGRUU0QkYxN0YxQkU3QkZDOUNBRTEwREJFCis6MTBBNUIwMDA2Q0I0RjJGNTJBRkNERTkxRUI1RjVCRjc0OUIyODFDNjIxCis6MTBBNUMwMDA0OUJBQ0Q0MkU3RDQ5QTVDRDg2NDY0N0U0QkNFOTAzQ0M1Cis6MTBBNUQwMDAxOTI3RTJFOTAwMUYzQzlFQUZCNzhFQzc4MTg4QkNDRDJBCis6MTBBNUUwMDBBNThGNkIzQzlEMzM3OTFDQzIzMzJFNEZBMTc2MEIyRDZBCis6MTBBNUYwMDAwMzEyRkFFMTE3OEFGM0Y5MUI0NDlDODUxNjY3NzVDNkE2Cis6MTBBNjAwMDBFMTVCODBGODYwMkI2Qjg2Q0VFNUIzQjFCRDgzRjNCRjExCis6MTBBNjEwMDA4ODlGODlCRUM4RURFODZDODc4OUY4QzZERUNFRjhCOTk4Cis6MTBBNjIwMDAxMkYwMEREMjY3RTI0MERGQTQ1ODk4NEY2RTY3NjgyMjlGCis6MTBBNjMwMDBFMkYzOTU4QjA2QzI4NzUyRjcwNjlEQTdDNDIyRDlBMEU0Cis6MTBBNjQwMDA5RjlDMERGREVCMEFEMDlGRTI3OEY3NUFBNDhCREFFMUNDCis6MTBBNjUwMDBBODQyRDQzREE3RkFFRUM5QTM3NURFNTQ4OEZCQ0JBQTY1Cis6MTBBNjYwMDBERjE4NzlCQ0UwQ0JEMTY0MDc3NDY2MkNBMzc4QzFCMzQyCis6MTBBNjcwMDBFRjAzQkY2NjVEQUEwRkI0MzRDMDU2NTM3QzYwNzZDRjNCCis6MTBBNjgwMDAzQkU0RDdCN0VGOTc4NjhERkI3QzM4Q0ZDNkUzNkYwMkVDCis6MTBBNjkwMDA3RDE0ODdDNjI2QkEwODFGQ0FDQkJGMEZBMEZEQTFBQzg4Cis6MTBBNkEwMDA1M0M4OTNEMTY2RjQxQUFDNDhENzU1OENGQ0YwNzk5RDA5Cis6MTBBNkIwMDAwRTAzRDIyNTUzQzQ5RDlDN0JFNUJGNDdGQjY5QkZBMjE3Cis6MTBBNkMwMDBGOUYxODMzQzRFQzhEOEJGMDZGNzVGQ0FBQUZFRUI2MDFCCis6MTBBNkQwMDAwNUIzRkFGRDRFNDMwM0ZBM0Q4RDAzMERFNDM3NzkzOTk2Cis6MTBBNkUwMDA5QUZDQTM5OTNEMzlBQkJGMDVGOUNDNzYwNzkzNTBGRTkwCis6MTBBNkYwMDBCQzc4NTcyNkYyNzUwMEU2OTkzN0NDM0M5QkYzOENCNEI2Cis6MTBBNzAwMDA1RTk0OTdBMzBEQThCNzk0OEQ4Q0UyMTQxNTY3NjIxNTFCCis6MTBBNzEwMDBDMUZEMjhFNEExOUZFNTgyNkZCNEYzNDkwMEQ3OERGQTBCCis6MTBBNzIwMDA2ODUxOUU3RjM3RDIzQjVBQzgwMUQ2MUM0NUZFNDRCQkI4Cis6MTBBNzMwMDBDMkZEMUVGNkU2Rjc5RjVEMDVGOTFEQzIxRjdCRjg5NTY5Cis6MTBBNzQwMDBFMjE5RTRCRjVCQTc0ODQ4ODcwQkNFQjk5OTBFRjhGRTIzCis6MTBBNzUwMDA4QjNDNkU4RkQ4OTUzRUU2QjA4NUUzRkYzMEM1NjU2NkNECis6MTBBNzYwMDBCRkNDRTNENjE0MjNFNzEzNjU5REFCMEJGRDgzNUZBNDM5Cis6MTBBNzcwMDBGOTI5RkVGNERBQjY5MDRDRTc1QjhFMTM4RkQ0QTg2MTBBCis6MTBBNzgwMDBGQjlCQ0Q1QzhGMzRFQ0U1RkJFQUM4RkRDQ0U1RjRDNzYwCis6MTBBNzkwMDBCMTNDQkQ1RDNFOThGRjI3RDkyNUVGMEM4RUZGNzdFRUNCCis6MTBBN0EwMDA1Mzk4N0U3RjE3Njk5RjQ0RUVFNzJFQjFCRjIzRkExQkIzCis6MTBBN0IwMDBDOTRFRDFFMjNDQUE4NkM2MjE3RTc4RDVBRUQ5NDEwMUU4Cis6MTBBN0MwMDA1RDFDNEM5NThEOEZDQjJDRkFGRTlGMTJGMTNCNUE1QzkxCis6MTBBN0QwMDA0QzYyQUJCQTBBRTNDRjA3RUU2M0U0NkZEM0UyNzZCNDIwCis6MTBBN0UwMDAzODlENDAxNURGNDcwNDBDMjBGN0IyRjA3Q0E4ODNFMkM3Cis6MTBBN0YwMDA3MzUyNTk0ODkyNjgzRkQwQ0ZCMDdEMTJDNkU5NDBGQkYyCis6MTBBODAwMDBGRUJDNkM4MjdGM0JGM0I0Q0IyNDE3NTUwOUUxQjc2MkUxCis6MTBBODEwMDA3QzQ3M0NDMjFERENCMjA4QzdCQkM5NDZFMzU5MzFCRTA4Cis6MTBBODIwMDAyMzlFRjYxMUI0OEU1MzdDM0NBRTczRDIxMjFFMEY5QTQ3Cis6MTBBODMwMDAwMkZBMTdGMzI5Qjk5QzJGQURCMzREMTRFN0E5QzU2REUyCis6MTBBODQwMDA2OEYxMUQxQTVFQUEwNEJFNTMwQTE2NjVFMTdFNDE4QkFCCis6MTBBODUwMDAwM0Q5MTQxNTdDQ0EyQTYzRkM4NzkwRkI0QjBEMjRGNzlGCis6MTBBODYwMDBCNUY4QkFDRTNDMzU4OEZDN0UwRUUzNDA2RDU3MUVFRjNFCis6MTBBODcwMDAxMTg5NUYyREVFRTNGQTc0N0Y3MkZFNzg4QUZCMjAzRDJBCis6MTBBODgwMDBBQUM1NkI2OEZDMTI0NkM3ODAxNUM2REZGQTMyQjdERjZGCis6MTBBODkwMDBBQjk2OTgwOEZFNzM0QkE3OTE3RkYxREM1MjAzQzM3NTBBCis6MTBBOEEwMDA1NEQ1NkJFNkZDMTczMURFRDZEOTI2MTZDMjdFOTVBMEFDCis6MTBBOEIwMDAxNUU1QTdDNjA3OTdCMzVGODFBRTg1RThCRjNERENCMjVCCis6MTBBOEMwMDAzN0U3MDRBQ0Y5MjMyREREOTQ5RUIzNEFEREYyMTg0QzMyCis6MTBBOEQwMDAwN0U2QTBBNDFBRkQ2NEM2NENFNTZBOEM2MzE5Qzg5MDBCCis6MTBBOEUwMDA4MDc1Q0FGNkU2Q0VBMjdDQzJDMDA3OTg5RkY2RTRBQzlCCis6MTBBOEYwMDA1OTBBRTg4OTczNzkwMzNCMjRBOEVGMkZGODcwMjZFNUZECis6MTBBOTAwMDA5MTI3NTMxODlCRjBDNDZGNjYwNjY4REVEQzFGMzU0OTNCCis6MTBBOTEwMDBGOEEzQ0M0RUZGQjVGOTA5Nzg1RkEwN0Y0RDFGRjk3REY0Cis6MTBBOTIwMDA3OERDM0ZDNjA1MjIzRERDMzYxM0Q5Mzc2RTExOEZDOTVFCis6MTBBOTMwMDBBQTQ1N0MyNjlFQ0M0MEJFMzU3OTJDOUQ2N0RCOThCQTEzCis6MTBBOTQwMDBCRjBGQ0JEM0NDNUNERjMzQ0VDRkFENzlEQzVGNEMyQUVECis6MTBBOTUwMDAxMjY1Njc5QUU2NUZFQTBGQTBCQzZBQ0Q3MjUyRkI0MUFFCis6MTBBOTYwMDBCOUJBREYxQ0U0N0UyRTNFRkU1QjA3NEFFOTFDNEE4QjI3Cis6MTBBOTcwMDAzMzY1Q0M5MTNFQUI5NEUyNTE3NEY5ODdBREZDNUM5NEE1Cis6MTBBOTgwMDAyOThFNzRCNDFGNUE4REMyNEUxNUY5QTgzNEZGNzdGMzdGCis6MTBBOTkwMDBDM0VDQTRCNzI2RkY0QjA5QUU4NzMzMDc3Rjk0OEI3MkI1Cis6MTBBOUEwMDBFQTA2MTNEOEYxQzNDOEE1RDQ0MjJFOTdDRTE5NkRFRDhGCis6MTBBOUIwMDAxMkQ4NkQ2RkE0RkFFNzIzQkU4RTQ3Q0Y5OUUyODQ3OTRGCis6MTBBOUMwMDBDRDhFQUYzNDM5MTFERUMwNTMzMkNBQzkwNDQxNkZFN0FFCis6MTBBOUQwMDAyQzBFOUZCM0RBMjcyRDg0N0U1QkFEQjA5RUExN0Q4MkM1Cis6MTBBOUUwMDA1RkYxOTJCREVFOUYyNUREMDQ3MEI3NEFDMjdFNjc2QUIzCis6MTBBOUYwMDAyQ0Q5RUQ4NTZBMkM5RUZCMkQ2QjdFODdFMkFFNjUyMUZFCis6MTBBQTAwMDAwNzY0MjEwN0RFNkVFOUNGNTVGMjQwRTU3NjZGOTREMUY5Cis6MTBBQTEwMDBERTdFNDc5QzNGQkY5M0M1RUVBODFCNjZGRkJCMjk5RjA4Cis6MTBBQTIwMDBEQjg3MzM2NEI1MTRGOUM4NzVGRkM0Nzc2QTgxMkY2NDc2Cis6MTBBQTMwMDA5MzI3NDhGNDRCQjdBQkM4RUY4N0VDMTVFRTdFRTg0Nzk5Cis6MTBBQTQwMDBDQUJDQUYxQ0UzOTY1QkQzRUYyQkM3QjgxMzM5Q0VFMzc4Cis6MTBBQTUwMDBGNjg1RTUzN0U1NzMzRUFFQzY3QTg4QjdFOEE2NzJENEM4Cis6MTBBQTYwMDA2M0ZGQjBGRTYyQTFCRjkyQkZCRkJGQzE3RUNDMUNBRTcwCis6MTBBQTcwMDA2NTk2ODEwQzA1RDZBN0M3RURERjhBNzRCQjMwRjc0MzE2Cis6MTBBQTgwMDAzQThGRkQ0MUNBNUIxRjYwRkNDNDVCQzY4RTQ5MzEyODBBCis6MTBBQTkwMDA4N0IyMjRDMUI3REM1RTNCNUFBMEY5M0Q3OURDRkJEMTFCCis6MTBBQUEwMDA2MkVFRjcwNDM5QzRFMzJCNEJGOTNEOUJEQTU5OENENjlGCis6MTBBQUIwMDA3M0FEODhCQjk4RTJFMEY3OTZBNjk0Njc3OTVBNjE2QTBECis6MTBBQUMwMDBEM0Q5ODA4MjcyN0FDQTcxNUYwQ0QyOEZDREYyOTdGQjk0Cis6MTBBQUQwMDA0QTQ3QjZDMzk4REJBODg2Q0I5NUE5NkE1ODFFRkVERTA2Cis6MTBBQUUwMDA1OEE4Q0Y3RkRCQTNDRjdGNjdDMjVGMEJDMkYzMUJERDBDCis6MTBBQUYwMDBERUU3NzFERTJGNDkzQzhFMzM3MDM1NzNEMDNDNUQ1MkZBCis6MTBBQjAwMDAwMEVEQTVFMkU3NTNCQTg0N0Y5N0UyMEQ3RjI2RjY3MzQ2Cis6MTBBQjEwMDBDRjRGNjA1NDlFQjhEN0IyMTNFRjFGNjg3RTcyNTk5NDFFCis6MTBBQjIwMDAxN0JCOTkyNTMzOEVGMDQxN0E3NjQwMTI3MThCMkUzQUZECis6MTBBQjMwMDAwQjYyMDdFRjc2NzBGQzQxNUQxM0Y0NzM3MEFFNEFFQjY1Cis6MTBBQjQwMDAzOEQxNjY2MEQ3RTE1QTJGQjc5MEZEQTRBRDhCNTYyQjU0Cis6MTBBQjUwMDBGMDM3RTBCMTIyRDUxMjg1RkNERTZBRjQ2Q0M2QkVFNEEzCis6MTBBQjYwMDAyOEIzOEE3QUI1MzJDNjQyN0RDQjNGNTY0ODJGQURCMjY0Cis6MTBBQjcwMDA5QTI5RjRGNUYwODM1MTk0QUY1MDk4MEZFMzM1MDBDNDRGCis6MTBBQjgwMDA1OTk4QkU2NUY0MDQ5QjcwQkU1MDBGRTdEQkVBNjQyNDVECis6MTBBQjkwMDBBRkU0MEExM0U5NjlFODk3RTg3QTc4QTMyMUM4NjhGRTY4Cis6MTBBQkEwMDA5NTBBQzU2MzBBOThCNTc1MDcyM0QxRjdDN0M0QkE5NjQ1Cis6MTBBQkIwMDAwRDJDNDQ3MjJDQzU0MjcyRUMwOEY0OEZGRDFFN0U1RDk0Cis6MTBBQkMwMDBFRTIyM0Y1QkExN0EzQjk2OUZCNzE0RDBGRDlDQzZDMTk1Cis6MTBBQkQwMDA3QjQ3OEEwMTgxMkIxNDc2OTRCMzk3REYwRkQzRDZCM0NBCis6MTBBQkUwMDAyNjVGMjJENzMzNDhDMTVDNTcyMkUzMjBBQUY4MEY0Q0Q2Cis6MTBBQkYwMDAyMzExRjUzRTIzN0I1RTNCM0Y0Q0I3NjhFNThBMTdDN0MwCis6MTBBQzAwMDA0OTFFQUNDRkVGNjcyNThBN0M2QTQxMTZBRDM3QTgxMjgyCis6MTBBQzEwMDAzMjk0QTFGREYxQ0JCRjIwREY2QUYyNjFDN0RBMUY5MzQ2Cis6MTBBQzIwMDA3Q0I4MTRGRjg1REZBN0ZDMzRCQjgzRTNCRjIwMEREN0JFCis6MTBBQzMwMDBBMTFDNTU5MDg2RkFBRUQ1RTk1MTdENjFGOTQyNTg0NjdFCis6MTBBQzQwMDBCM0UzMTAzRjUwMEZGMjMzNkIzRUNDNTVDMkZDODNBOUU3Cis6MTBBQzUwMDAwNTJBMDk0QkE4RTc4RDA3MzgwRTVCRDUzNDVDQUZDM0Q2Cis6MTBBQzYwMDA4QzVCQ0ZDNzhERkVDNzhFRUI4NjcxQTFERTYxM0I4Q0ZFCis6MTBBQzcwMDAwQkY1NzY1QkNEMjE0M0NDNzBFMzRGNTA3MUJDQ0I4RDhGCis6MTBBQzgwMDAwQkU4MjRBNDRFMTM3ODA2QkUwOEEwNUZFQUIwREQ0MEFFCis6MTBBQzkwMDBGQzM5NERDNEVGMUU0RUUwRTNCMTQyN0Q3QzRENkUxNDk1Cis6MTBBQ0EwMDA4QzRGRkU1ODdEM0NDRDBERDJCNjM2RDRDQjhGNTk2MzM4Cis6MTBBQ0IwMDA3NjIyM0ZGRTUyRjBDOUQxRTgxRkU3QTI1REY1Q0IzOUZECis6MTBBQ0MwMDBGOTQ3NTBBRTRDODk1REQ1ODY0QzMyOEQ3NTkzQkNEMTE5Cis6MTBBQ0QwMDBFNERFODVFNDBGMkIzMDBGRjJFRjlBMDJBMEZCMEZCMkY3Cis6MTBBQ0UwMDBERjlBODM5RDFGNzEzRTk2OEJGQTBGRTRDM0I3MEExMjU5Cis6MTBBQ0YwMDAyRTg1NUZFMzQ3MEQ2RUU0NDM1QzA3ODM3QzE4MDFCRjNDCis6MTBBRDAwMDBDNjQ3NkM3QTM3MDUyMDZFMDdCQjE0NTNDRDRFNjVBQzMxCis6MTBBRDEwMDA4OUM3ODlBQkU5NDNGMzAzMjY5RTYyNjlFMkYzNTgxNUJDCis6MTBBRDIwMDAyMEI4NkY3MDNFNDJGMTY4RDc4RUYyRkIxMERFRDk2MzE3Cis6MTBBRDMwMDAzRUNCNTBCMEIyN0I2RTAxRUVDMzAwREVCQUZGOUZGMDk3Cis6MTBBRDQwMDA0NkRBRTU5NzhCOTdENkUwOEE1Q0M3REFGOEQyOENCREY1Cis6MTBBRDUwMDAxNDJGREQzOENCNDZGMUQzOTM0NERDNjlFMzEyMDNDNUVECis6MTBBRDYwMDAxMUMxRkU4REVDRkUwNjY2MDlBMjFDQkU0NkQ4RDE1QTYyCis6MTBBRDcwMDAxQ0ZGOEIxMkY3N0YwNjBFOThENTNENjFGNkY4QTU3MTgyCis6MTBBRDgwMDBENDJBQzU2OTA3NTZGMjc4RUI0MTdCQkI5RURCREI4Mzk3Cis6MTBBRDkwMDA3QTREREMxQkU4MUNDQjY1NzlFN0REMkFDNTUzQkMyNDYyCis6MTBBREEwMDBGMUZBODFCOThDREJFQjc1QTI3Q0ExNDNDNDVCQzA1QzdBCis6MTBBREIwMDAxMjg3RTJEOTNCQkIxOEYxN0ZBNzNEOUJDQTUzNjRBRTEzCis6MTBBREMwMDA3RkQ4QjdCOEZFRTlDQ0UyRjY2NEU3QURGOTU0MEVGQkU0Cis6MTBBREQwMDA4MjUxODhGN0Y5MzJEOENGRkNGQzlFRUYwRkYyRjg3ODU5Cis6MTBBREUwMDA5MTdFREE0RDA1REMyRTFCQjQ3MzQ0M0VEMjJGQkIyQjczCis6MTBBREYwMDBEM0JGMDVGOTY1NjE4OTM3NDMwMkJFOUE2RkUyN0U1NzdBCis6MTBBRTAwMDBFMEJCNkQ3ODY3QTY4NjM1RUQ1NjcyRjBGRTQ1RDNCQjg0Cis6MTBBRTEwMDA4NjFDRTJCQkM3ODlFRjhBODFFRjcyNzQ3QzE3MkMxOEZECis6MTBBRTIwMDBDRkU1MkYwQTUzOERFRjA2RjlBRDMwMzI1RUNFRkYxNDE5Cis6MTBBRTMwMDA4RURCRTlFQ0ZFN0QwM0VFMkI3QUNENDQwNzJERUUzMTVGCis6MTBBRTQwMDA3MjlEODdDMTczQzJDOEUxNzFDOTMyQzFCMzZGMzg3OENFCis6MTBBRTUwMDBBRTg0RkZDM0Y5MkQ4OTcxM0UxRjY5MUQyNDI5MkM2MDIyCis6MTBBRTYwMDAyRjFCNUEwNzFCRERGRTEwQzIzRkI4MUVENkYwN0RFNDMzCis6MTBBRTcwMDAyNTcwQ0IzNkUyOEI5QjZGOTUzOUJGNDY3MzdEOEVFNzhECis6MTBBRTgwMDA0REM5MzA3RTlEMThGRkU2NzVCRTZBMjdENkFCOTMwODg0Cis6MTBBRTkwMDAwRjc1QkRGNTE0MTdDNkFBRjlCOTkxMDdGRTIwM0NBRDkwCis6MTBBRUEwMDA0MkNFNjlFNzVCQjM0NUZCOTk4RTNBMjNGQUUzNjZENTU4Cis6MTBBRUIwMDBFQUNGOTk2NkRCRjgzOUQ2Q0RCMzhDMUY4NURCM0RCMzdECis6MTBBRUMwMDBEOTg2Q0YzMDhFNzEzNjlFNDM2OUY1ODE4RkRFMkYxODdCCis6MTBBRUQwMDAzQzg3MkFDMDczQTgyM0MyQ0Y3MjBFRjgxQUY5RkVCNUI4Cis6MTBBRUUwMDA4NEM1REJFRTA2QkUyQkY4Njk0OTE5RkFFMzI2MjcyRTQ2Cis6MTBBRUYwMDBEREJEMTFGMjRGNkUyREEyRkM2Qjg5QjdEREYzMTY5NjA2Cis6MTBBRjAwMDBFRkM4QTc3Q0I1NDEyMjNFM0Q1N0NGREIxNzU2REMzQTUwCis6MTBBRjEwMDAyRDJCMDZFNUJGRTgxN0Q3MTNFRUQ3QTNGQzlENzU1MDgwCis6MTBBRjIwMDBDRjNEM0FCQjBDRTM0QkFCODVERkUwRENERDhDQ0E2Rjc5Cis6MTBBRjMwMDAxQzYzRTcyMUJCOEI1NUYyRkI1NTQ3ODlGMkVGRjE3RThECis6MTBBRjQwMDBERjE4RkJCQjMyOEMzM0FFQ0UxRTk4ODNGQ0ZENDZEOTk2Cis6MTBBRjUwMDA0QjQ1OTgzRjIyN0QzNjY3Qjg3M0FGRTI0MjI5MzQwQUU5Cis6MTBBRjYwMDBGMDUyMURDN0VCRDc5NjNEOTU4MjdFOThFQTJBOUUyRjE4Cis6MTBBRjcwMDBGNjU0QUVDQkMxNzJDM0Y5MzlDM0RERkY4RDEyRkI5RTBGCis6MTBBRjgwMDBDMUZCNkM2MjVEM0ZFRkZEOTBFRUFGRjkyQzkyMDdBNzFECis6MTBBRjkwMDBFODlCRjAyMUY5MUQ5ODRENzJBMEVCQ0NFN0NENTJEMDgzCis6MTBBRkEwMDBDRjNEQzlDQkUzNTBBQjJDQUI5MjUxN0U0REY3OUJDQTQyCis6MTBBRkIwMDAzMTlFRDg2MTE5N0IwNEUzMEM2MjI3NTQ4RTQ3QkE0RTQ4Cis6MTBBRkMwMDBCMjMwQTIyQkYwNzk0QzIxRkFCNUFGRkEyQzIzMDY5OUI2Cis6MTBBRkQwMDBDQkE2RTc3MzhEOEZFQTM0RkVBRUQ2RjMzMUFDNEY1Nzc0Cis6MTBBRkUwMDBFMUY4Q0JDQkRCOTFGODE4QzZDRkMwRjZCM0JGQTVENzNECis6MTBBRkYwMDAzNzgzRkQ0NUFDQjdDOEZFNDc5MjAzRjgxMzJFMTc4Nzc5Cis6MTBCMDAwMDBFMEU4QTY3NTk1ODZEMTdEMzlCOEVFM0FCNDc1MzcwNjc1Cis6MTBCMDEwMDBFMTMwMTlGQUU4MUU0RkE2RTQyOUEyMEJBRDEzM0MxNjQ1Cis6MTBCMDIwMDBEMjQ3MTE3MDZCRjBBNTgzNkM2MzY1OTdDMjg1M0Y4QTI4Cis6MTBCMDMwMDA2NjJGNzIwODFDOEU0NDFDOTc5NzQzM0IyRjhCMUI4MkY0Cis6MTBCMDQwMDAwQkM2QkYxRUU5QzBENjcwNzhCNjRCNEQ1QzZFODhGRDRFCis6MTBCMDUwMDA4MUU2Q0Y2OEQwRTZEQkEzOUY2RjQ1MTRCRkQ3RUU0NkVECis6MTBCMDYwMDBCRjEzQjY3MzhEMkRGQTNBQjgxQjg1M0U5RDY1RjEzRDMxCis6MTBCMDcwMDA2ODg2MzlEQ0U0OUM0RkZDNzAwQjY4MzQyN0NDRkY2RjhBCis6MTBCMDgwMDBBOUZFM0FDNDQ3QUIxNDc4QjkzRjhCRkNGMTE0RkYwMTE5Cis6MTBCMDkwMDBGNDlFNTExODY2MDc2ODcwNDVFMkEzNjEwNDc5MTgwOUE3Cis6MTBCMEEwMDA3NzI0MUU4NkU4RDM5NzhDQTk3NjFGNkU3MDVFMTFGMzA1Cis6MTBCMEIwMDA2OUI1RjNGNTNBMzBERUNDREZCNTUwQzAxNDg1RkM5QkEyCis6MTBCMEMwMDA1MjExQzVBMTY4NzBCRDI5NzFCRjY0NDBFMkY3OEYzNDg5Cis6MTBCMEQwMDA3QjIyMTJCRUM4N0I3QTFBNUNFOEVGRTM3MDBDQUNDMjJDCis6MTBCMEUwMDAzQjgyMEYxNjZBN0UzRTRFQUYyNDAxOUZDOTIwMEQ3QjI2Cis6MTBCMEYwMDAxRUZFNjBBMTQxRjNCM0VBRTgxOTc5N0Y0REMzOUIxNkE4Cis6MTBCMTAwMDBFNzE1ODkyRjJENEVFQjkyNzNCNzg4NzNFNTkxRUE0OUM1Cis6MTBCMTEwMDA2MEE3QTdDNjVEOEE0N0VEREMyRTZFRDA0RkM5RkQ0MDAzCis6MTBCMTIwMDAwM0Y3REE0OTBFQzYwREZBMjk4RjI5NjhERjRGRjIxQ0EyCis6MTBCMTMwMDA1MkQwMkVBRkFEODEwOTAwMERERTE0N0UxRjBEREYwRjQyCis6MTBCMTQwMDA2NEY4QjcxNDkyREVFRTFGOEZGRTk1OUY0QzdEODJDRTgxCis6MTBCMTUwMDBBQjNFMzA3MDNGN0QyNDdFRjY4QzgwOUY5MUY4N0QyNDNECis6MTBCMTYwMDBGOEEzRDI3QzRGRTJCODY3QTRCRTBBMkNFQ0NDMTZFNzU5Cis6MTBCMTcwMDA0MkNDOUY4NUVCQzFFOUM4QUE0NEZGMTFDOEQ3QUZCRTM2Cis6MTBCMTgwMDBDMjREMkIxNjAxNURDQjMzRkRCRkMwNzZCNzMwREY2NEY3Cis6MTBCMTkwMDBBNDZGNUM4RERGQzhDRjQ5MThGOUUxOTc4QkZERTM2NDlDCis6MTBCMUEwMDBBMTc3Q0Y2RkUzRjExRUQ1REU1MThGNEQ0NEJCRjE5OEVGCis6MTBCMUIwMDA5MTA1NjlERDdCNDk3RkRFMjVFMDNGMEYyQTM2ODRGNTY2Cis6MTBCMUMwMDA5RkIxOTNGRTVERkNGQTdDOEFFMzI4RDg2QzE4N0E0RjE1Cis6MTBCMUQwMDAwM0ZFOEUwQTQ2RTlERUQzMjhERTFCQTdDQjk3NzZBN0FGCis6MTBCMUUwMDBFOEVBOEZFOUM5RDY5NThGMEQxNUU5Q0FDNzFEMkJEMzlCCis6MTBCMUYwMDBFNUM3Rjc1REEzQUI3RkQ1RjEyQTVERkVFQUZFNjlCQTJDCis6MTBCMjAwMDBGQURGM0EzNTQzOTdCRjc2RTBCQkJBRkExRjBGRkEwRjYxCis6MTBCMjEwMDA4NEREMTBGMEY2MTVDMkJDMTc4ODc5NUY3RjcxOUVBRTkxCis6MTBCMjIwMDBGRDlGNjJBNjFDNDM3RTVDQjA4MUM3QTU1NzAyODY3NDUxCis6MTBCMjMwMDBFRjhCNzQ3MEZCQTIwOUZFMjA3RDI3QjMwMThBMDc2Qzk3Cis6MTBCMjQwMDAwODRBOUUxMEMzRjgzNkJERkRCMUI0QTc4QkYwNzhCOTlCCis6MTBCMjUwMDBGQkY4MDVBRUI5MDYzNEI5NEYxNzBBRkJFMzJBNzYxNTk5Cis6MTBCMjYwMDA4RjY3RkQ3QUJBRTZCM0JDQkY4QkFFNjZCNzlFQUU1NkFCCis6MTBCMjcwMDA1NTRGRDdFODQyM0Q1REVEMUUzRDVENjMyN0U4RTlFQUE1Cis6MTBCMjgwMDBGNEVBRTkxQTVGQTNBNzZCODI0RjRGRDdBNEQ5N0FCQTIxCis6MTBCMjkwMDAyNkZCRjU3NDRENURBMkE3NkI3QTkzOUVBRTk5Q0Q3QThECis6MTBCMkEwMDBCQTY1MDVFRUQ0OTU4RjQ0NkY0RDlFRTZCNDJGRDdENTgxCis6MTBCMkIwMDAxRkE0QkI2RjA5QzUzN0U1NzVGQzUwRDdCRjQ2RjcwMDIzCis6MTBCMkMwMDBGQzQxQkExNzMwMTE4N0Y5M0ZBNDdCRTEyODNEQkQ0MTBECis6MTBCMkQwMDA2RjhEMUEzNTlFRUM4RDEyNEM2NzE3MDhCQkRFMzdCQzlDCis6MTBCMkUwMDBCREExQzk5RjcwRkQxRUJFQUYxRDQ5MkU1REEyQ0ZDNDdBCis6MTBCMkYwMDAzRTc3NDQ3RDE2QjFDRjdEOEY4MUJFQTU0MTM2OTBERjZDCis6MTBCMzAwMDBFQTU2QzE5Rjg3QTMzOERFM0ZDN0EyQUJBMTFFRDQ5OURFCis6MTBCMzEwMDAwMDcwQkQ4NzcwQzMzOEVGNDUxNTkzM0ZFMkJCQUNEQkNGCis6MTBCMzIwMDA4OEZEREZDRUZBMjg5REMzMDYyOEY1MzMwN0U5RUY3OUJCCis6MTBCMzMwMDBDQzQzRTkwMkU2MzMwOUZGQzRGNDUxMDlFOEI3RThBRkFBCis6MTBCMzQwMDA0MEZEN0Y2MUVFNUIxRkQwQjlENjFCRjE1N0Y0MEVDNUVGCis6MTBCMzUwMDA0Nzc4N0U5MkM3RDg0OTIxMEY0RUUwMzkwQUU0Q0Y1QTg4Cis6MTBCMzYwMDAwN0Y1QUJFQTBBQzNEQjQ5RTE2RjlDMzc0OTIyM0RDREMzCis6MTBCMzcwMDBFNDI4OEFFRjlBNzc4QjQ0RTc0NEYzRkU5M0E3OEI0NjQxCis6MTBCMzgwMDA0OTNDMUUyNDIyNkQ2REQ2RjBDN0Y3NDczQjQ3QTkwNDAwCis6MTBCMzkwMDA0NzFBRUIxNkY2MUNGM0RCNzJBODFGN0VFRUIxQ0I0NDA2Cis6MTBCM0EwMDBGQjU4Qjc4NUMzRjdBQ0M0OTQwOTcxNzQxRDhFRThFQUU1Cis6MTBCM0IwMDBCNjcwNzg5RTM1MzIwQkUyRjM2OUU2NTc5MTE4MEYyODg0Cis6MTBCM0MwMDAyMEEyRjgzRDhDMjJFNDhGNzlGRkY5NTYzNkZBRTlBMkUzCis6MTBCM0QwMDBBMjVFOTg1NTdEMzU5RUNCMDQ1NjkxOUZGQzdCNENFRjI5Cis6MTBCM0UwMDAyN0JGQkQ0OTIyM0ZGOUY3MDA0RTQ4REQwRThGMUJFRDA4Cis6MTBCM0YwMDA3QzJERkZCMDgwQjcxQUVCQzFGNzI0Nzc5Mzg0N0VBOTI4Cis6MTBCNDAwMDA3RjU4N0ZGQjdGQzhFQkZEOURGRDBERjZDMzM4NUNGOEQwCis6MTBCNDEwMDA4M0Y0RDNGQzlFODUwNjFFMjczMTcwMzdERjFGRURGRUI3Cis6MTBCNDIwMDAxRUUzRkVCQkU2NDA2NTAwQ0Y0NTY1MzA5NDMwOEVDQTEyCis6MTBCNDMwMDBDOEVGQzdFRjFDQzVGRDlFQzlBQzhGRkMwQkVDQTg2NjFFCis6MTBCNDQwMDBEN0ZBNDlGRTk2ODhGQjE3NjdDNUI5RTJBMjJFMEJDMzRGCis6MTBCNDUwMDAzODlEOTI3RDg3RTJGMDFDNzExMUYwNjAxRkVBNjFDNTkyCis6MTBCNDYwMDA0RkVGQkY5NDZDNzkyRDhFRkJGRDhDNEVCQzU3QTlFOTM0Cis6MTBCNDcwMDBGRjkxRjk1NDYxMjdDM0VFMzEwMERGMzUwRDY3N0ZCQ0MyCis6MTBCNDgwMDA1QUM0RTMwMzVBNUJGQTQ2RTEzOUEwMDZDRkZEMkRDNzQzCis6MTBCNDkwMDAyODJGMkIxRTg2RTc5N0Y4M0U1NDc4RkNBM0M5MDVFNUI0Cis6MTBCNEEwMDA2MUYyNEVCMTQxRkIzMDM5NjRCNEY5RTg5MTk1MzUyRDI0Cis6MTBCNEIwMDA3RDc0QkU2ODE0RUY1OEFENEQ1QkVFRjA4N0Q5ODk4Nzc3Cis6MTBCNEMwMDA0NjA5RkJDNzEyNjBCODRGRTAyQTBBNTNFNTI0Q0FCNTAzCis6MTBCNEQwMDBGRjYyN0MxRjZENzY0MzNGRTFGMkYzNjIwMjBCM0YxRjc4Cis6MTBCNEUwMDA2ODZGMzk0RUYwQUU5MUZDN0VFQ0M0OUNDQjQyNTZBMDA2Cis6MTBCNEYwMDA4RjU5QzFCQkMwRjA3RENCMERDNzMwOEVDQjY0NUZFRUUyCis6MTBCNTAwMDAwOUE5MjNFM0NERUM1NjJFODRDQkQzQjcyM0U0RTk0RjJFCis6MTBCNTEwMDA1QTA2OEE3MTlDRDY5NjdFMEQ1RjBDQ0Y2QjAzQzlEQ0YwCis6MTBCNTIwMDBCRTZFNkRGOTg0QkUxQkMwM0U0NDdFN0I3NTRCQzEyMTRGCis6MTBCNTMwMDAxNUNBM0Y4MEJGRjhERThFRDlDNUUxNjIxNzVEQTQ1N0ZBCis6MTBCNTQwMDBFNzA4M0U0MDVGNUMzQUYwQ0YwN0NENDZFMkIzMTVFOTJECis6MTBCNTUwMDAzNjNBMjc1OEYxNjZERTIxMkZBQzY3MTM0QzU3RkUwNkFBCis6MTBCNTYwMDA3MDBGOERDM0YxNjQxMkYyMTRGOEM5ODdGMkMxOTRBMjZFCis6MTBCNTcwMDBEMDc5NDE5QzYzMDZEMUU5RUZFRDRGQzNBRkM5Q0FFODZBCis6MTBCNTgwMDA5RDI0NTNCQThERUM4MjJCODVGMzZGQTNGODNCNDA4MzQ3Cis6MTBCNTkwMDBGNkM5NDUxN0M5RkYxNTAyMkZEQUJCNEYxRkRDQzNDODE4Cis6MTBCNUEwMDBERkIzRTI1RUVFMzc1QzUxQ0ZFODFFMDI2Qjg2OUY4QTA2Cis6MTBCNUIwMDAyMUJFRDFGNDRDMDJCRTUwMDMxRjNCNUE2MEM1NDExNzU3Cis6MTBCNUMwMDAwRkI1NTg5OEJGMDBFQzEwOENEQkNGMTlBMjYzODc1N0RBCis6MTBCNUQwMDA3MTYyODhDMUM2NkE1NzFEQTYwRjREMzhEMTgxRTJFRjRFCis6MTBCNUUwMDBFMTg5NUZGNDYxOEE2NzA0MzhCRUEzODkwNUQxM0VBNjZDCis6MTBCNUYwMDBCMzdGMThERkI5MDRGMjMwN0U4QzI4OEZGMUYzN0NBQzc2Cis6MTBCNjAwMDAyODhGOURDREYzRTlERUU3QTQ2QTA0MkNFMjNDMkJERDE0Cis6MTBCNjEwMDAxNjM3MzUxN0U1RjQwMkM2RUY4MThCNzcyMEI2MEI3RDIwCis6MTBCNjIwMDA5MTZBOEJBQkFCQzZGMkRCMTlERDBCRDFDQTdGMkFDQTlDCis6MTBCNjMwMDA5MzZEMUZCNUU3QTAxRTk5QTU2RkJGNDVFMDIxQzlGNjIwCis6MTBCNjQwMDA1MUM3MjQzQUY3RDI5NzZCRTc0QTA5QjZGM0M3QTg3REVBCis6MTBCNjUwMDA4OUJFRkM1MUQxREU2RTNCREYzNzA5Q0I3M0Y1RTMzRjhBCis6MTBCNjYwMDAyOENBQTM2RDVDMUUzMjFGRTNFRjE1ODhGMjA3NDRCOUE4Cis6MTBCNjcwMDAxNUNCNzE3QzBGMkY5N0I1NzczOTQ0QkQ3NTAyMEU4Q0IxCis6MTBCNjgwMDBBOTIzQkZFQjI4RUU3N0RERDE2MjI5MjFCQUI0NUMyNDZGCis6MTBCNjkwMDBGQTNDRDRDMjI4N0Y2QjUxMUNDOTA5NDMwREM3Nzc5QzYzCis6MTBCNkEwMDA4QkYzODNBMzk5MERGQjRFQzFBRDQyQUVDNUE4RkQ1RUUxCis6MTBCNkIwMDBFRjMwNzI0RjJCOEY3M0YwNzcxODY0Qjc4OUY4Qzk2QzJECis6MTBCNkMwMDAxMzcyNDNBQ0M3NDFCOTIxMzU3OTM4OTM3MTNGRkRFNTE5Cis6MTBCNkQwMDBGODFBMTZEQTA1QjQ4RjMyRTAwN0Y5M0FFRDFFMDNGM0QzCis6MTBCNkUwMDA4N0M5Q0I5NDY1NTFDQzFGNTZERkJEMjA0RTk3NEZCQzA4Cis6MTBCNkYwMDAzRDQ1NTdERjM1MkI1QjU3NkUyQjJGRDI5NUIzNTk3MUQ0Cis6MTBCNzAwMDBCNDZFOTYwQkZFOEEyQTI5RDM5NTZCRUY0M0IwRERBMjY3Cis6MTBCNzEwMDA5RTU4QkZDNkRDNkI3NEY1Q0UxN0FBQjFDOEUzMjdBNzQ1Cis6MTBCNzIwMDA4MkZFQTE3ODA2OEYwNUU1QzM3MjdCNzYxMkVBOUZBNzk5Cis6MTBCNzMwMDA1QjI2MTA3MjlFODU3NTA1NDYyQjdCQzZDOUUzREM5RjkwCis6MTBCNzQwMDBDMUYzNDMyOEZGNTk4Qjk3QkVFRjgxNzIxNUQyNURCMENDCis6MTBCNzUwMDBFRTU0QThERkQ1RTJBMEZDRTMyRDZFNEFCN0I3QTg5NDVCCis6MTBCNzYwMDBGRUI0QTU5MENBQjdCNDc4MjhGRjE4RjQ4RkU5QTNEMDI3Cis6MTBCNzcwMDAwRjdFN0ZBNEE1ODZGMjFCNUI3Qzk0N0ZCODY1MzZFNUJGCis6MTBCNzgwMDAxRjZDRjE1M0ZBNDBDQjEyRkFCRUFFQTU4OUYyNkI1Qjg3Cis6MTBCNzkwMDA5QTI5QkRCRjI1NDA2OTZCNEIzQjZGNTdDNEY1Q0MzMzJECis6MTBCN0EwMDBFMjVFRUQzMzk1RkNCRTdDMjQxRDNCOEI4NDFGNTJDNEFFCis6MTBCN0IwMDBBREQ4ODdFMjU2M0E4QjMwNkVBNUJCOUZFQzcwMkQ2RUVDCis6MTBCN0MwMDAwNUU3NERGRDU5RjlGQzIzRkI3QkFBODhEQjZGNDVBQ0VGCis6MTBCN0QwMDA2RjU1MzQ1RkNGNzQzRTlDRDdFMzU5MUQwRDdDOUZEQUMzCis6MTBCN0UwMDBDNEU5OTBENTMzNDBFNUM5NEIzODJEOUUxMkZDQzk1Q0E1Cis6MTBCN0YwMDAwMTk2NTY0MTUxMDI1NEVGQUNENDU3MTVDRENGRDUyOUZGCis6MTBCODAwMDBDRTkxQjk2MTlFMTVFMkZEMjY2MkJCQTAwMUUxNTIyNkYwCis6MTBCODEwMDA3MEZEQTlEMTc1NzBERTRFMEUyN0NFN0YzODc4RjcwQkZDCis6MTBCODIwMDA3OEU1RjI2RUZFMkU0QjRENDcwOEQ5M0VDQURCNDRFRjU5Cis6MTBCODMwMDBCMjU4NjZGQjQyMEFBNDJFOUY5RkRFODkyOEJBMzgwNUJCCis6MTBCODQwMDAzNjY3MjA2RjJFNUVDNzU0NDhEMzk2RTlGNzZEMjkwQkYzCis6MTBCODUwMDBDQTc0RkIyMkY5RTI0MzRDMDUzOTYwMkJEMUVGQUZBMjQ5Cis6MTBCODYwMDA3Mjk3RUJEQTU5RDI3RUE4MkIzN0I5NTZFQkNBRTdERENGCis6MTBCODcwMDA5NUI1QzY4REY4NENFNUU3NEJFNjBEQUI1ODMyQzBCNTMzCis6MTBCODgwMDBCMDczMjNDMUY1OTE5OEM3NTk0OUE1RkJFNTgxN0Q1QTRECis6MTBCODkwMDBCQzA1REY1RjNDMjlGNDBCQjM2QzIwN0JBQ0MwQzlCM0EzCis6MTBCOEEwMDBGOUIxMDEwM0VBODc0RkZGMzU5NkU0RDIxMzhGMUI4MjZCCis6MTBCOEIwMDBFODQ3MDZGMTY0QzBGNTVGMEM2NjFGOTY5N0IyN0VDQTMyCis6MTBCOEMwMDA2M0E4MENFNkM3MzI1NUM2RkMzODM2NDBGQjJCRDg1RjYwCis6MTBCOEQwMDBCQzVGODQ3MUFCQjJGRjcxMkJFNENGQTRGQjlGRTQ3MTFBCis6MTBCOEUwMDA3MzIxRDI5RkY5ODI5RUY5REE3RTZBQjMxMkU5NUZFRTg0Cis6MTBCOEYwMDAyRjIyRkY4REZFN0U1RDlCRDg1RkI0NTlCOTlGNkU5NTU4Cis6MTBCOTAwMDBCMzIyMDlFREQ2QjMyM0M0MzlEQUREQUYxRTVEMDBGOEVBCis6MTBCOTEwMDBCNjI3MUZBMjc0RDAyRkE3MUE4NkJEM0ZGRTQ1MDRGRjhECis6MTBCOTIwMDA4RjAyNjYxN0ZDRkYwNUYyRkY5OUYyQjcxM0QxMERENTEwCis6MTBCOTMwMDA5MDNCNDBFQkUwQUNFNDc1Q0Y0NUZDQkUyRTczN0U4NEJCCis6MTBCOTQwMDAxRDE3Q0U0RjExRjg1NUY2NTVCQUU3MDIxRTk1Mzc3M0ZECis6MTBCOTUwMDAzQzAxMzYzNENFMTMyREM3NzMzMDBFNDFDQkU3OEIzODA0Cis6MTBCOTYwMDBEREJEMkRDOUI5RDU2MURGRDU2MjRFQzc0MkQ2NTc4MzNCCis6MTBCOTcwMDBGQUFBQjBDNEUwMDk2MkM3NUU4N0NFOEY2MUNERURGMDUwCis6MTBCOTgwMDBFMjdCMDg0QTE5RjNBMDk4MUJDNTNBNTZBM0VFNTZGRTZGCis6MTBCOTkwMDAyNjUzOUM5NTcyRjg2QUE2QzI3RUM2NjYwQjMxOEM0QjA0Cis6MTBCOUEwMDBEM0ZBNjVDMjFGNzI4RjkwOUI1RjM4QUE2M0U5OURDQjYzCis6MTBCOUIwMDA5NDQxRjk4NzNBOTI3RDYxRjNGNjIxMUY3REQxNjlFNEM0Cis6MTBCOUMwMDBGMzNBQUMyRjJGQjQ3MUJGRTFBMjQyNTM1MDk1RjA1RDEyCis6MTBCOUQwMDBCNTBFN0FDNzUxRDkyMUIxQjQyQzg0NjMxMkUxODExRDBGCis6MTBCOUUwMDA4QzI2M0U4Q0RFM0M5QTA1NjBCRDk0M0JGRDk2NjJGNDRECis6MTBCOUYwMDBEQjg1RDQ4Mzg2MUNDMTkzNTBBRkJFRDhCNDEzRURCMzlFCis6MTBCQTAwMDAwMkM0OEIwREYxNzI2QjZFMzUwRTlENUI0OEY4NUQyODlDCis6MTBCQTEwMDBFNjNEQkU5OEQzQUIyRDNEMDIxRUU2RjFFMjdCQTc4QjNGCis6MTBCQTIwMDAzQTM1M0Y4RTdFOUUwRjk2NTc3RDA3REY4NTZDRUQ5M0VFCis6MTBCQTMwMDBCOTVBOEJDMEU3N0E2M0RGRThCOUQwRjU5OTdFODA0QkJECis6MTBCQTQwMDAyNjM4QzcxN0EzMERCQUI5ODIwNTQ4OEZGM0Y5RDUzRjM5Cis6MTBCQTUwMDAyRUIxQUQ1OTI0OTc2QTQ4OEY4RjM3QjBGMEYzNTMyRDJDCis6MTBCQTYwMDA5RDU4Q0NFNUVGQjEyMjFFODc2QTc3MUYyNTdFMUNDQTQwCis6MTBCQTcwMDAxRjM5QkEwMEYwRjFCNDgxMTVEMkI5QjE4MUVGOEZCNTk5Cis6MTBCQTgwMDA3ODFEMTlGRDAwNzhBRkExNThDODQ1RDZDNkE2QTFERTFECis6MTBCQTkwMDA3NjFBMjhGRTU0RUU4QUEyN0JCM0IyNTNBMUI4RjczNkM5Cis6MTBCQUEwMDA1QkI1RTM0RUVDQzdBMUQwMzlEMTE0Nzk2MjFGREFEMTZFCis6MTBCQUIwMDA2NkE3NjExQ0RBRTE0Nzc2RkVCMDBGRTM4NkU0NzQ4NTgxCis6MTBCQUMwMDBBMURGQUJDREExNzAzQjI0Q0Q0MEYxODA4QUIzREE4MkY3Cis6MTBCQUQwMDBFNzRBRjlCNjEzOTU4OENGNDM1RDNGQTA3NzIyRTRFRjlDCis6MTBCQUUwMDA4Qjk4MURFMTE3MzMwQTkyQjVCMTI2RUEzRjkwQTY4OERDCis6MTBCQUYwMDBGNzY2QkNCNTYzMTNDNTkxODg4QUZCQTE5QTRGNzBCRkU2Cis6MTBCQjAwMDA3REM0NzFERThBRkIwMkQ1QjY4OEZDODFGNzE1RjM3RDEyCis6MTBCQjEwMDBBMjExQ0YwRjIxRkZGOENBRjM0RTk0NUZBRjc3QUQ4OTIyCis6MTBCQjIwMDBDQjQyN0IzQUE4OTAyRDUyRjhEN0Q2MTQ3QTBGQTFDQkVFCis6MTBCQjMwMDA0NEVGMzU2ODc4Q0QwQzI4QkE3M0M4RjQ2NjdEREUxQ0Y2Cis6MTBCQjQwMDA3MTFFNjk4Q0I4MjdCNzVDOEM4RjI3OTdBMUIwRjkxODQ0Cis6MTBCQjUwMDBERDdDRkZDNjVDMzZEQUZGREM1NzJDREVFOTE0Rjk3QkFFCis6MTBCQjYwMDA0NDdFQUYzMTkwRTIwMUZDMUNFRTVBOTQ4OUYzQkFGMEE2Cis6MTBCQjcwMDA4MjlGRTJDRTQ3QjJGRjI3MTVBQjYyQkM4MEQ1NDBFRjczCis6MTBCQjgwMDAwMjg3QUMxODg3QkVCQjg1NzlEMENFQjMwNDE1QkEwNzNGCis6MTBCQjkwMDBCMDQ3QzhCMzVDMUJFN0ZGM0I0QUY4N0E4RDRDNzMzQjU4Cis6MTBCQkEwMDBGOEJBNTM5RTg5MEE0NjIzREQxQ0RENjUwMTU4RTdDNUI2Cis6MTBCQkIwMDBBRjRFNjUyQUU4QzE1Qzg3RDc4MEZFRjdEQzY2OTMwNzQ1Cis6MTBCQkMwMDBFRENGMjlCRkIwMTE5RjlDQjdGMTM4MkVBNUY5MDExNTEzCis6MTBCQkQwMDBCRkI3RUVBQzI4NTRDM0UwMEVCNjM4M0MyODlGNzZCNjBCCis6MTBCQkUwMDA1ODNDMTgxQjFGMUM0MUJFRTYzODBEMTQzRkFGMUE3ODk1Cis6MTBCQkYwMDAzQ0U3MkVCMTFFNzcxNUYzRjc4ODc2MEEzOUIzNEIwOTY3Cis6MTBCQzAwMDBDQzQwMzg3NzAxM0QzMTZFRkZEMDA2NkUxRjJGNUY2NTQ3Cis6MTBCQzEwMDAyMTM4OTZCRjlFNDNGNkQ1NDg3ODdCQTJDNUVEQzk0NTJECis6MTBCQzIwMDA3ODM2MTg1MkQwNUY1NUI5MkU3NzNEQkVERkIxRENDRUU1Cis6MTBCQzMwMDBERjM3OTY2MzhCMUVDM0FCMTFFQ0Q3NDY4NkY2N0M2QjYxCis6MTBCQzQwMDBDQzM1OUVGOTYxRjI1RDhFOUQ1ODg4N0MyNUNCODExNEEwCis6MTBCQzUwMDBGNEU3RjQzQzdERTEyNjhDRTcwNUZBNkRDNTdDQThGODk1Cis6MTBCQzYwMDA4MzlCMzA3RTc3QUYzRDkwODJGMUJEQzc4QTNGRTJFNThFCis6MTBCQzcwMDAwOTgxQUQxOERGREI1NzdDOTI5N0E3MDc1MjBDOTAzRkU0Cis6MTBCQzgwMDA1RTdDOUE5N0U3MDVCNjYyQkVCRkY4MkNDRkUzRDkxQjVFCis6MTBCQzkwMDBDOENFNTNDNUU3NkYwQUEwQkZDNUU0NTk4MjAyRjlFN0QxCis6MTBCQ0EwMDAwMDdGMDkyQ0IxNkU5MTlFMTY3OEQxQ0E5RkMzRUZCMDY4Cis6MTBCQ0IwMDAwMURCMkZEMkM4RjI4M0EyNURDRjA4RTUyRjhBRjJERTI2Cis6MTBCQ0MwMDAxMUZBN0Y0NUI0MEI4REQwRkVCMDY4Nzc2NDg0RjY0N0Q3Cis6MTBCQ0QwMDA0NUJCNjMyMzk0RkY0QTk0QkYzMTQyRkZGRjJFREFGNTQwCis6MTBCQ0UwMDA4REQwRkU2REQxRUVERDExREFGRjU2QjQzQjNFNDJGOTQ4Cis6MTBCQ0YwMDBGQkEyRkMzRjIyRkFGRjQwRDRFRjE3REZCM0VEMUJERUJGCis6MTBCRDAwMDA0N0ZGN0QzNkM4MTE5NDRCODVGNjBENzFCOENFNzdCNkQ2Cis6MTBCRDEwMDA5NzEzRkZCNzU2RjA3MzJBOERERkIzMjU0NkVGMEVERjdBCis6MTBCRDIwMDA1NkMyREYzQkJCQUQ4NENCNzFBNTg0RjMzOUYwRTFDM0QwCis6MTBCRDMwMDBDODc3Q0JERjk0Mjk5RUE4RDVFMDM5MTU0NDM5QkFERUZGCis6MTBCRDQwMDA0MEY2QzBGMkQ3Rjk3RTdERjkzQTI1MTg3RTFGNDg2QjgwCis6MTBCRDUwMDBBRkMxQkYwNkUxMDNDNjZEQzMxNEQ2REI5N0M1RkM5QzFCCis6MTBCRDYwMDBEMUVDNzY3QjZBQzNFNDk5RDFBMUNGODNCQzYwMjg3N0ZDCis6MTBCRDcwMDA0MTdFNTNEQzc4RTFCQUFBRjZDMjcyM0NFQjMzOTAwNUZGCis6MTBCRDgwMDBBMkQ0NUI0MkY4OEU4ODYyMTc3QUMxNTFERTUxODhGMEU2Cis6MTBCRDkwMDBEOTE0N0EzRjQxOTNGM0NDRTZENkY5MzVEQTZDMEFCRDczCis6MTBCREEwMDAyNzI3REI3OUY5OTQ1RjRDNzRBMDlERDVDNkZDN0Q1RTk2Cis6MTBCREIwMDA2Q0VGNTZDODhFM0ZENDVFRTY0MEI5NjdCMjJGNzBFMDk0Cis6MTBCREMwMDBGQUZEQjg5NEUzQkRCQUExMzAwQUU1QjVGQ0EwODFFNDYwCis6MTBCREQwMDBGNzExMDc1RkVGM0JEQzNDQ0UwQUY0MEFEREFGMDI3OUQ2Cis6MTBCREUwMDBFRDQxMUQ1MUMwNDJBQjUwNkVFRTdERThFMDVDRUVFN0U4Cis6MTBCREYwMDA2M0Y2QjExNTc0N0Y0OTNCNTc5Nzk0QjA3RDQwNkQwOTQ4Cis6MTBCRTAwMDBDNzRGQTZEMDIzMEFFQTE3NDg3Nzk1OEI3QjM3MDFFRUY4Cis6MTBCRTEwMDA4RkNBNTQ5ODNCMzVFQ0ZFNzA2RDg5Q0NFRjNENjlFN0Q1Cis6MTBCRTIwMDBBMTcyMkRCREFCOTVCMTUyRDE5RDIzQTREREEzQ0Y5QkIzCis6MTBCRTMwMDAyMkY0ODYxMkExNTc3MkRBNDE0RUVBQ0U0RjFDQkFGQ0E4Cis6MTBCRTQwMDBCNzRBODQ5RkM3QzMzQzY4Qzc0RUY5QzUwNjkyODdFN0M3Cis6MTBCRTUwMDA1MUJGNDkyM0NCQkQ0MUY5MkJFNEYxMkU0NDAwQ0FEMTk3Cis6MTBCRTYwMDAwMEJGREY3RTY4NDNEOUFGOTBERUNCRDcxOUU4M0RFQjRBCis6MTBCRTcwMDAyQjk1QTMwQUUyMThGMDkwRTc5NzQ4MkZDMDg0NTI3MEUwCis6MTBCRTgwMDBERjc0MzkzQ0U0MTk3RDcxRjRERUM3NjVGMDkxRjc2ODIxCis6MTBCRTkwMDA3OTFDQ0FEQjNDQkY0MkZENUZBMjM3MkU4M0FGNjcyNTBBCis6MTBCRUEwMDBDRjcxM0ZEMkQxMTkyNUVDNkE2MDAwRjREQkM1NDU3NTJFCis6MTBCRUIwMDBFMUY5QkU0OUY4NTNCNDM4NjUyNTQ5RTFFRkY1OEI3QkNDCis6MTBCRUMwMDBCMkIyRTBFM0ZCOTk1NzhEQ0JDMUY3OEE5QUM4QkZCRkU2Cis6MTBCRUQwMDA2MkRGM0Q2RUI0REJENzFBRkMwRUNDMUY4QjlCMzY4MDI1Cis6MTBCRUUwMDBFMzJDODc0RDNGRTI2RjJGRjY0MUVGNzJCRTdEMzNGQUIwCis6MTBCRUYwMDA0REJBODMyNkVENURDRDEwRkVCMzBGRTM4RkI0NzczQkQzCis6MTBCRjAwMDBERDY0QUY4OTdDRDVDREQ1MzBERjZFQzU1MThDMjY2ODE4Cis6MTBCRjEwMDA0N0M5RTQ0RDQ2QjA0OUY3OTlEODYwN0RCQ0VGRjdGNEM2Cis6MTBCRjIwMDAxMTgzRThFRkM2NERENTIwOTdGNjQ1MzFEREJCQTVGQjYzCis6MTBCRjMwMDBEMENGNEVGOUU5OUJGMDlENTIxOEVGNDYxOUY2NjYzQkJCCis6MTBCRjQwMDA5Rjk5QjVDOTc2RjUxMDNDQkI5RkZERUVBNjU1RThCMEFDCis6MTBCRjUwMDAxM0ZCMTQyN0UzRUZDRDlGNTFGQjYzOTBCNEIwNUY1OUZGCis6MTBCRjYwMDA1RjgyRkJGNUFFMTM4OUUxRkI3NUFEN0VBQ0E4REZEMDM3Cis6MTBCRjcwMDAzQkQwRjA4QzRBRjUzQjRBODAxRkVBN0IwNjYyNEEwOEI4Cis6MTBCRjgwMDBERjAzMTVFMUY1NjM4NDFGMjBBQ0ZFQTZBRkFCNUZBODBECis6MTBCRjkwMDBDMUYzQ0NEQjM3OTdGMEZBREJCMEZFNTlCNTNGOTE2MkM1Cis6MTBCRkEwMDA3QTIyRTA4OUJGQjRGRjlEMDRGRjA4RkQxNzg5RkE2Nzc0Cis6MTBCRkIwMDA0MjZGNTNGREIzQUMzRkIxMzQ4QkRBM0Q4NUUzOUM3QkRDCis6MTBCRkMwMDBFM0VEMEEzMUVGNDQzQ0M3NzlEN0U2RkQxOTdFNkZDMTM2Cis6MTBCRkQwMDAzRTcwN0ZBNzM0QTlGOEJEREJEMkUxNDBGQkNENkFFQzBGCis6MTBCRkUwMDBGMEExMUNDRUM1RjdDNzI2MENBNUNGQTJGMjE4N0ZFOTk5Cis6MTBCRkYwMDBGNzQ4N0VFRUI2QjBGODVBRTRENzY2MDNFRDZGN0FGQUVBCis6MTBDMDAwMDAwRDBGMjA1RkVFNDg5QkU4QzBGREYzM0U1MzVGNTkwOURBCis6MTBDMDEwMDBEQUFGMDc2QzY0QkYxQTMyM0ZCNUEyREZEQzVDQzBENzcxCis6MTBDMDIwMDBCRkQ1RDlFNDI5ODFCQzM1QkQ4NERFMEY5NUVGNURERTM3Cis6MTBDMDMwMDA0REVGOThERkM3REZGNzUyN0U2Q0YyRUY0NkZFMEEyRDE4Cis6MTBDMDQwMDAyRjVDMThCNkJFNzc5N0YyN0I5NkVCNUVCMzZEQzBGREEyCis6MTBDMDUwMDBDMTNBQTNBN0EzMDBFRDcwQkI0MjcxOUZDQThGMEY0RUQ4Cis6MTBDMDYwMDAyM0ZCRjBFNzA2NDZGMjFGRTY1OTA1RkRCNkNENTVFODdECis6MTBDMDcwMDBGNzMwMEM5NENFRUIyQjIxN0NGODdDNTU1MDJGMjM0MUNDCis6MTBDMDgwMDA5MUYwN0VEMEZEOEFDRjgyRTcxRDY2NjFEN0VERjBGMDlBCis6MTBDMDkwMDBGQjYxREFCODE3ODRGRDc5QTE4NEJGQjdCNjIzRURDMjdFCis6MTBDMEEwMDA3QjhCNURGOEZFODM4OUVFNzVEQTk2MTk0MkE2MThCQzgzCis6MTBDMEIwMDBFN0I2RjNENDYyQTQ2Nzc0RkYzQUJDRTcxQzk1QTIzOEQ0Cis6MTBDMEMwMDA3MDdFM0ZBRDg1MzIzQTk3RUJBNkVGODE3QTAzRUQxQjg4Cis6MTBDMEQwMDBFMjk3MTlCQ0U4N0Y4Q0NBMzVFOUZDMUQzNjE4MjdEQ0NECis6MTBDMEUwMDAxRjEyMzNEQUZGNDdBNEU3QjgzNzk1MUIxMUNGRUVCQjE5Cis6MTBDMEYwMDAwREY0M0VFQTgzRUU3NzJEMDY4MDMzQTY1Q0RGREUzMTU5Cis6MTBDMTAwMDA1MURGM0VBRTVBNUZFRUFBRDU5NzI3Q0VEMjk3QkI2RkNFCis6MTBDMTEwMDAzNzQ1Rjg3NUY0RjkyNjhEQUY0MDI2RDg0MDRGNDVGMUU0Cis6MTBDMTIwMDAyMjE2NjVCQkQwODJGQjlFQjVBRjQ1MzFBMkNGQ0E0RDZBCis6MTBDMTMwMDAxRDA1QjgzRUEzMDcwODVGNTE0NTUxRTQxNzU4OUI2Qzk1Cis6MTBDMTQwMDAyMkI5QkVCNjk0RkJGNTBGQTc5QjZFQTQzQ0NDMEJGOUFECis6MTBDMTUwMDA2MzQ3REE1MURBOEY1QzgyMTdEQkE5QkY2MkZGMzYxNkJDCis6MTBDMTYwMDBGNjFERkRGMkEzQkQ5NjUyMUU1N0MzREMxNUU4Qzc2MzRBCis6MTBDMTcwMDAyNDBGOUY5NUJDOUU0Mzg4RUZCN0I4QkY2MjQ3MzNGNzQzCis6MTBDMTgwMDA2MzNGMzg4QkM3NDFEMjBDMkE3MEJERjNGQTMxOTYwRDRDCis6MTBDMTkwMDA3REI4MkY4QkIxQjVERjhERjE5RDkxNzg0RDE0RTcwREYyCis6MTBDMUEwMDAzQkYwNzYyRkYyOUQ5RkJGMUJCRDQ2QkI2Nzg1REYyQjAzCis6MTBDMUIwMDBFOEQ2MDRCRDhCMzY2QkI0NzhFRjRGRDgwOUIxRUVGOEYyCis6MTBDMUMwMDA5MkI2QjBGQjFBODlDMjZGRjJGMEM0Nzk1NkQ0MUZGQjQ1Cis6MTBDMUQwMDBDNDNCMjI4M0ZEQTkzNDI4MEY3OTQ1N0Y1NEE5RTZBRkRCCis6MTBDMUUwMDBFMUVEMzc2OUU3M0MyMjlGRTBFNEY5N0Q0N0UyNkVDNDY4Cis6MTBDMUYwMDBGNUI1Njk1NjVDMTlFRUY3RDcwQUZCMkUzNkNERTQxRDZFCis6MTBDMjAwMDAwNUYzN0FFNDk4MjkyMDhEODFCQ0MyOEUxOEMxMkVEOEZFCis6MTBDMjEwMDAxN0M3QzczNUJEMUUxNUMwN0I4MThGQjhDQkU5OUU2MTlFCis6MTBDMjIwMDBBRDgwRkJCOTRBQ0YzQkI4REUwNzYwMURFRDg0RkUxRjMxCis6MTBDMjMwMDA3MTc5QUM2NUUyREMzNDAwRjA1MUE4MTU5ODI4ODc2QTYyCis6MTBDMjQwMDBDQjY4QkZGQjg4RDc2MzQ1QkRGOTQ4OUFDNzhBNzFEQUM2Cis6MTBDMjUwMDBENjY0QzU4MTcxNkI3MTZFODVERTg5N0JDNEUyNzdBMDdGCis6MTBDMjYwMDBGRDEzMDc4QUQ0ODRFNzQ5RTkxRDUzRTk3RTFERTBEQTBFCis6MTBDMjcwMDA1MEMxOEYxQTk4ODg2RkM0RjhDMjc4ODFDRjFERUUwNTFGCis6MTBDMjgwMDAwRTdDOTdDMTk1QkJGRjVGRDA0RjFGOEZGREM1RjA3NjI5Cis6MTBDMjkwMDA4ODI3QTdDMEQzQUM1Mjk1RTA3Njg5RkVFMzE3M0M0N0M4Cis6MTBDMkEwMDBGNUYxQTdBRDIyQUMzRjQxNDdEMzU0MTZDNDdEOUEzNjcxCis6MTBDMkIwMDBCRUQ2Q0Y2MEZGQ0M0QkU3MDA2QjdFQzVGMUI2MkE5REEyCis6MTBDMkMwMDBCRjhGNjVCQThCRDE3RUVFQjk0QUZGNUVFNEIzODFFNERECis6MTBDMkQwMDAyODkyNzcyOUVFOTQyQUU0QTM5NDYzNUI2N0UwQkQ4QkYwCis6MTBDMkUwMDAzNUJGOEFFMkUzMkNFNEZDOUVBMjMwQ0I3NTM4RUYwNDI0Cis6MTBDMkYwMDBCRjAzRjExOEI5NUU5MzhGNzRENDIxNTM2QTc0ODk1Q0JCCis6MTBDMzAwMDBCRkM5MEE2Qjk3RTMyRTVEQzdDOTZFNTc1NUZFRTg2MTNBCis6MTBDMzEwMDBENjczQzQ3QTQ5M0UzNkYwN0RFQzNGNzI1RDZGOEZGRTc2Cis6MTBDMzIwMDA2MDJDRDcyMzYxREZFNUNCRTdEQkE0RkU3NTI0ODc5MzgwCis6MTBDMzMwMDAxNTVBNjdFOTExRTNFMTNCN0I5ODk3OTg0MUM1QjhFODQ2Cis6MTBDMzQwMDBEREE1NEVDMUM3QTA5NzRBOTFFRjFEOTM2Q0ZDQkM5RDIzCis6MTBDMzUwMDBGOEFCRUFGOTBEREZGRDM1RTQyRkUwRUZGMzgxNUFBOUUwCis6MTBDMzYwMDBDNzNBRkE0ODJGRjZGODBCQjBGRTM2QzVGRjM4RkFEM0I1Cis6MTBDMzcwMDBCNzFENEZBMkY3MkJDREQxRkNGRDUxNTNDNDdCMjk5QTk5Cis6MTBDMzgwMDBCRUQ4NURDQUZENDg2QUM0QkI5QkRGMzRFRDRFNEIyQjYzCis6MTBDMzkwMDA3Njc4QjBCRkI3N0Y2QjQ5RjhDN0RCM0Y2OTQ3QkE1N0JDCis6MTBDM0EwMDBEOTYwNEQzRjUzNzJGMzI2QkNGRjZDN0Q5Mzk3M0YwREQwCis6MTBDM0IwMDBGOTgwODI3ODU5NDY3RTk3QzMxOTc3RDJGQzVCREYzM0M4Cis6MTBDM0MwMDA5MzNGQUI1NEY2NkNDNjNDRkJCRDk1RkM3MTdCMEY0Q0E4Cis6MTBDM0QwMDA5QzhERUJBNEQ1NUVBMUEyQkQ3RjQwQUNFMzdGMTU2OTI3Cis6MTBDM0UwMDBFNEJDNjQ5M0M3OEZGNjQwRTRGNzY3NEIzNUZGOUJFN0U3Cis6MTBDM0YwMDA3ODE3RDBCNzc0OTc4OURFNzExQThDOEZFOEIyRjI3ODBCCis6MTBDNDAwMDA1NDYxODcyRTEwRjI2Q0MxQzFGNTE5ODcxOEJFQzM1MTUzCis6MTBDNDEwMDBGNzVBMjlCNDVGNjBBRjRFNDQ3ODUyMkY0QUNDMEZGMkRFCis6MTBDNDIwMDA2RjlCMzg5RjRENzUzRDI3QTE5QzQ5NzMxREE5NDQ3OTg5Cis6MTBDNDMwMDA5RkNFRkE1NkExREM0ODZGRDI5Rjk3QTU1RTU0QThERDI3Cis6MTBDNDQwMDBCRTE0MkZGNTg3M0YxODA3NkE2MjYyNERDN0Y5RDkyQUQzCis6MTBDNDUwMDA5NEYzMjlGQ0JDQzVFNDg4RTI3MUExRUU2QUREM0Q2QTczCis6MTBDNDYwMDBFRDdEREJCNzg1MUMzNTAxNEU4RDY1OTBEQTE0N0U2RjRFCis6MTBDNDcwMDAzRkEyRkVFRjQ0M0QxOUZERjZFOEZDNzcxQzNENEVGRDYyCis6MTBDNDgwMDBEQTk0NEZDM0UzNEQ3MTVGNEE0MjZCMTkzRkZGMDQzQzlFCis6MTBDNDkwMDAwNTcwMUZDQTYyRTNGODc5QTlEN0FCODZDN0RGQTY4MjA5Cis6MTBDNEEwMDBEQzM1OTc2MUZDNDk4MEUyNDQ5MkM1QkQwODJEQUUwNzlBCis6MTBDNEIwMDAzMEUwNDRCRjlCMTZGN0IxOTNFOUVEMTEyREQ1RjZFN0I3Cis6MTBDNEMwMDBCOUNEMzJFRDNCOEE1RkI1RjJGRDQxM0IwQjVBMjVGNDA1Cis6MTBDNEQwMDA4NzMxOTIzQkI5MUJGOEY5QjRFNjE3QkIwRDE3MTNFQTg1Cis6MTBDNEUwMDAyNTdDMEY5N0M2RUJBNjM4NkFDREFFMDJGQTkyREM1OUNFCis6MTBDNEYwMDAxN0YxQ0U5NEY2OEVCNjYxMzRFNzhCNkQyRDBFQTJBM0E0Cis6MTBDNTAwMDA1NjlFRTY4RkE0QTNGRTlDNTNBQjk3N0EzMTk1RjlFMzMwCis6MTBDNTEwMDBDM0ZCMEQ1MjdGQTlDREZCODkxRjUyMkY2NjUwRjlCNjgwCis6MTBDNTIwMDAxNkY1MzJGRDY3OEZEMDdGMzJGMUNCQzhGREE3NTFGOUU4Cis6MTBDNTMwMDBGNkQwQkJDRUU5ODA4QTlGMEVFQzc3RkE1NDk0MkJBMUZCCis6MTBDNTQwMDBBOTlFNjFGMDlDN0E4RjVFNEU4RUU5RDFDQjVEMEQyRjU2Cis6MTBDNTUwMDBEQjE0QUZBQjBFRjBCREVEMUU4M0E3OEI2MUZDQTlCRTUzCis6MTBDNTYwMDA1RTRERDY2RjlDRkM1RDZCQUQ3RUM4MzUxM0VCMkZFMzQzCis6MTBDNTcwMDBGNUJGNzU0QTVGREY1Nzc5MjBCMjNFQzE3N0ZENDU3RDMzCis6MTBDNTgwMDBCRDQ4RkE0NEMyMEI3MDI1REMxNDA2RDcyNDhCRkVGNzk1Cis6MTBDNTkwMDBEQUNEOUU3QjA5NUMwOUI3ODRDMTc1ODM1QjVGREZCRjIxCis6MTBDNUEwMDA2QTc4Qjg2RTJDMzQ3RjJENUM1QUJERUY0Q0I4QjI3QUU1Cis6MTBDNUIwMDA5MUYzOTg1OTYzMUUwMUVGQkNGRTJEQjNBRkFDREZEQkU2Cis6MTBDNUMwMDA5NjdDN0RCRDNCOUEyM0M3MDk2ODcxREIzQTdCMjRCRTBDCis6MTBDNUQwMDA5OURCRUYwRTM2NDA3MTI2OUFERDExQzcxQzIyRkU4QkM3Cis6MTBDNUUwMDBEQjBERUZFMDdGOTMxOTdCNjBCNDZGQ0VFODA0QzRCRjJFCis6MTBDNUYwMDBGN0Y2NDc1NUJDMUZDM0Y1MTVBQkU1RUY1NkMyQkVBNDExCis6MTBDNjAwMDAzNEZDNURFRTIxQjg1NjUzQkYyRjYxQkMxM0U5NTk4QjQyCis6MTBDNjEwMDAwN0VEQ0VFMjU0NjY0OTQ2RTNDQjFEQ0NDNkY3QzdFQTI4Cis6MTBDNjIwMDA0NzZCRjI5QUM3OTcxNzA5REMzRDlCRDJCRERDNDlFQkZCCis6MTBDNjMwMDAzQzE4ODdGMDdDRDM3MUVGMURFREJENjdGNEY4QTFGQUNCCis6MTBDNjQwMDAyM0Y5NUIzNDNDOTk0Q0RERjQ3QjFEMDZFQTZEMUVENDY2Cis6MTBDNjUwMDAwRkVGNjIxMUI0REI3NUIzMzk4NDc2QjUxNjg3N0EzQzc3Cis6MTBDNjYwMDA3QUNFRDEwNDk1REUzRDU4OERGRENGQkU2NUVBMUFDQzU5Cis6MTBDNjcwMDA0Qjg3RTNENUU1MzZCQzM3RDVBRkREMkY1RDgzNzg1QkRGCis6MTBDNjgwMDA2NkYxNjcyNjFBRTg3Q0I1MDBGN0MzQ0MxNzJGMkUyMzc2Cis6MTBDNjkwMDBGQjRBODc4QkQzRDBFMEE5OTYzOEZFQTNEMkZDMEZFM0U4Cis6MTBDNkEwMDAzOEQ1ODZCRTFEM0VGQ0E2RjRGMTdEQjYyMzgxQkZCQjA2Cis6MTBDNkIwMDA4NEVGRUIwQ0IzRkUzNTNDNTQ4OTdFMEUxOTNENUYwRUMyCis6MTBDNkMwMDBDMEZDMEU2RDhDQTU3QkY4MEJFMjZGOTk4MzZGQjIyQ0NBCis6MTBDNkQwMDAzNEY4MTJGMTAwM0QwQ0VFRUQwNEI3NkQ2RTY2MzJDMjE3Cis6MTBDNkUwMDA2RDE0NzA1QjEyMDRERUJEQjk1RjA3Rjc2MEJDQ0M3REQyCis6MTBDNkYwMDA5MkY2N0UzQUU1OUYwRjM4RTlCRUJCRDlGMEY5QkIzMzFECis6MTBDNzAwMDA1MTBGOTcxQTNDNjg3NzZFMDNGQjAyREY3N0ZCM0YwMkZECis6MTBDNzEwMDBERkRCRjE4QzI1OEVCRUQzQkI2RjZFNzFFRkNCQkRDOTU1Cis6MTBDNzIwMDA0MEVGQkNGOEFBNUUyMDNBRUQ2QUIwNzk3MERGM0U5NzIwCis6MTBDNzMwMDBBOUY0RUVFQTdDNzEwRkU2MEY5NUZGRkQ3MjNGQ0NFRjk2Cis6MTBDNzQwMDBBNUQxRkU4MzM4OEYzQkUyMEQxOUVGMTIxQ0ZFNjI3QUYxCis6MTBDNzUwMDA0NzZCRTI5NUM1Q0Y2QUU3RjAzMzg0N0RCMDUwRTA3MTU2Cis6MTBDNzYwMDAyNkYzNTJEQ0VFNERDQzZGQzQ3MURGM0U2QkYyQTI1RDVFCis6MTBDNzcwMDBGQUI2ODg0N0JFODUwNUU4RkJBRDJDNDhFOTZEMkM0NDI4Cis6MTBDNzgwMDBGNUJGODcyRkNBNDJGRUFERThEMUU5Q0QwMDVGREQ2MzdBCis6MTBDNzkwMDAwNTc5QjgxRUMzRjBGRTA2RDIxOUY4RTUwRTE3RTc5NzIzCis6MTBDN0EwMDAzRjI2MjFERTNCMTNBRTg4N0ZFQjI0OEVCRjA3NDZGQjdFCis6MTBDN0IwMDA3RkMzRDdBQkVBRjIyMDRDOEU0OTY5RTg0NzE5NUMzRjRBCis6MTBDN0MwMDBENTA5OUNGRjE0NDdERUQ3QUQ5RkJFRjNEQTdEN0ZBRjVFCis6MTBDN0QwMDAyREI5MDJERkZCRTIzRjM3NzhFRkEyNzg3MThDQ0I3NzdGCis6MTBDN0UwMDAwMTFERkE1NDdFQ0YxMUM0ODYzRDAwNzRBQUE5OTQyOTc0Cis6MTBDN0YwMDA2RTZGRUQ2N0UyN0UzNjNBMzFBMERFMkZDN0NBRjQzRTk3Cis6MTBDODAwMDA5OTc2MkUzOTVERjQzNzNEOERERjU3QUNBRDlDRDkxNjQ2Cis6MTBDODEwMDAwQjc4OTlGMjY1N0Y3OTA4RDI5QTM0RkRGREM1QTlBRUVGCis6MTBDODIwMDAyRTdBRDI3QzVBQUVGRUZCOERBQzgzMEU4ODZCNEJGNDE1Cis6MTBDODMwMDA3MUU2RDMyM0ZDOUY4NzcwNkNFMEFCOEJBMzQ1QkM2NDhGCis6MTBDODQwMDAxMTJCMEFCRjZGRjAxREQxRjY3Q0VERTdBNjczMzA3RTg5Cis6MTBDODUwMDBDOTE4RkY1NzQ4OEZFNURGRkVDMzFDREFENzI5RUNDRDk2Cis6MTBDODYwMDA3MTMwQkY4NjdGOTdDOTlFRkNBODA1NjY1MjgwNzFENTNFCis6MTBDODcwMDAxNkU2MDU4M0ZGMjREODE1OTgzRkQ1RTJBNkY0MzREOEYwCis6MTBDODgwMDAwMTk4N0VEQTUyNDhFNTY3NUIzQzk0OUYzNUM2NjcxOThDCis6MTBDODkwMDAwM0ZEQ0U2QkZGNEM0MTdEQjQ1NjhCQzcxNjcwNjg3MTlCCis6MTBDOEEwMDA4NTZCNDVGQ0M0MEFGQkYyRTMxOEJGQjA4MjAyREUxOUI3Cis6MTBDOEIwMDAyQ0Y2OEUyOTA4RkU5RDNEREQ0NzMxODVFRjMyRUU0MzkzCis6MTBDOEMwMDA1NjZDOTRDOEFGQjNGMDg4N0YwRDkyNzlGMTFCRkREM0ZECis6MTBDOEQwMDA1MTRDOENGRkNEODk0NERDQTdEN0EzMUQwQkFDQkYyMkU0Cis6MTBDOEUwMDBDRTlCMzQwNjU4QzBEQkZCRTFEMTc4QThGRkM3OTYwOTgwCis6MTBDOEYwMDAwNERGMjcyRDVFODJFRjRGMkQzNTk0RDY4RkYxQTU1MzlGCis6MTBDOTAwMDAzREY2MTlCREYzRjRFRDY3M0U1NEYwRjdCMzRERjY0QTJBCis6MTBDOTEwMDBFNEJGQkZDRUNCODI0MUMwRUI2NjIzOTdFRjlCNDFCRTA1Cis6MTBDOTIwMDBFM0ZBQUMyQzlEQjFGRDFFODZGMkQ3NUY4MEYzQkMyOUUzCis6MTBDOTMwMDA2RUZFRTQ3OEY4M0U3REMyNUMwNUVCRERGMjI1RThBMEYyCis6MTBDOTQwMDBBQzIxM0VCQzFDNUY5Rjc5NDUyMkZDOUM3OUM1NDlGODBGCis6MTBDOTUwMDBEMEYwNTQyRkU4NzVFNjYwRjE3N0YwRERCMzU3OEVDOTVCCis6MTBDOTYwMDAxNDdGN0FGRUEyODFFMDNCN0YzQzhBRTI1MzIzREIyRkQ3Cis6MTBDOTcwMDAzRjkwOTM4NEY2RDg5RjgwN0U3OEYwQjFGQzQwMzFGOUU3Cis6MTBDOTgwMDBFM0ZGRjRFQ0JGQThFMTcxQkY3RjhBRUJCRUYwM0VDQUMzCis6MTBDOTkwMDBBOUZGQ0JFNTE0RDg5QjI3QjdBMjFDNEI0QkExRjc3QjczCis6MTBDOUEwMDAwNkUzRDU1ODUzMzRFQUIxMDY5MzU4NUYyMDY3MzBGRjQ5Cis6MTBDOUIwMDBBNzI4QkUwRkFFRjg3OTZBMTVBRTE3MUMwRkUzQkRDQ0UxCis6MTBDOUMwMDBFMkY3NjA0MDdGMUZGQzEwRkEzQkI4RDU0REVGRkQ3Q0NECis6MTBDOUQwMDBCQUVGQjE2QzFDN0Y2RkY3QzJGN0I3NDJGRjY3ODJGQ0ZBCis6MTBDOUUwMDBGNzYwOUM2MURENjc1RjQ0NzlCQURCNDY3RUNCQjUxMkE4Cis6MTBDOUYwMDBDMDg1RkE3NDRGMEFFNTBCMjUyNUFBOTk5QzE5NDExRTlBCis6MTBDQTAwMDA4NzIyQTkwQUJFN0ZCNkVDQjkyRDI5Qzg1Rjc4NEYxREQxCis6MTBDQTEwMDBFM0VBNUZEQTE4NEQ3MkVBMjVBM0U3ODM2NkVDNkYzQjIxCis6MTBDQTIwMDBFRkVGQzk4N0VFRkRBODA3RDMwN0VCQ0JFRTQ1MzkzNzBCCis6MTBDQTMwMDA4NkM3MzEyRUY4QzlEMjIyNkMwRkZBOUE3RURGRjNEMzYzCis6MTBDQTQwMDBDRjRCMjFGNDgzOTQ3NjFFNUE4RDcxNEM2M0I2N0Q2ODZBCis6MTBDQTUwMDA0ODgxNzRFQzZFQTkxNUQzRTJGNDY5QzdEMDdGNzBENzEyCis6MTBDQTYwMDAxODk1REE4RjdCMjY0QkM2RDhGNEEyOTRFMEZCRDdGMzU3Cis6MTBDQTcwMDBCODExOUQ3RTJGRTlGQ0FDMEFCNzk5OUE5RTJGOTJCQTA1Cis6MTBDQTgwMDA0Rjc3RTFCRTM4RTM3ODE5QkZERkM1REZBRjNFRDAzQjVCCis6MTBDQTkwMDBGMzlEREIxOENFMDMyQzA4ODQ3QkFFODlFMjJFNTgzMDQwCis6MTBDQUEwMDBEMDg1NzQzRUUzMkZGNEQwQkIyQUJFQzAxNkU0QUYzMzZBCis6MTBDQUIwMDBGRTQ0QkE1Rjc4RDAxMDg4QzFERkUzMTRGODgwRkZCRTZGCis6MTBDQUMwMDBBMUU3NzdCRjE1ODNGMTE0QjFGQjhEMEM3RjJGNzZGREE1Cis6MTBDQUQwMDBEODgxMjkxNDFGOTJBRUQyN0UzQzdEQzcwRDM1ODg5RjI4Cis6MTBDQUUwMDA4NkZEMDdCQUE4OUY2NTE2MEZGQTYzOTcxQ0Y4OUNFRTlGCis6MTBDQUYwMDBCREIwQTkzQzBFRjVDQzdFOUU3RkEwREE0QkVGOUQyRkZBCis6MTBDQjAwMDBFOUZBMzNDRkY3RjkyOEVGOTMwMzU5NzQ3RjYyM0VCNzAwCis6MTBDQjEwMDA3NzFFMTNGQThDRjU4RjY2RTFFRjIxNjlGNDdBMDA4QUFCCis6MTBDQjIwMDBCMTdDNzM1NjIwMTlERkJERDJGNDIwRThBRjg3NzBGREM5Cis6MTBDQjMwMDBBMURCOTFEQTNCNjZGMjdCRjI1N0E4QkY0QzQyMUY2OTNBCis6MTBDQjQwMDBGRDNENjZFMkVGRjRBMjE4QzFERjhCQjNDREM0RjVFRTc0Cis6MTBDQjUwMDAxRTkwMzdDODJGOUFERTg1NzE3N0UwQkEzNTg5RkIzMjhGCis6MTBDQjYwMDBBOUEwNjRDN0MyN0M1MjFGMzM3M0Y5N0Q4NUUzNDdERUY5Cis6MTBDQjcwMDA2N0Q1RUM5MEQ5RjFBRDc0NkZGNUQzNTRGRkNGNzAxQzJECis6MTBDQjgwMDBFREZFMkE1MzNDRjRBRUUwRUY1M0JENEY4RjQ5RTBFRjhBCis6MTBDQjkwMDA3NUUwMUM0MDJGRkUwMkYzMEQzMkQ4NTEzOTYxNzY5NEI2Cis6MTBDQkEwMDBFNUNBRjRFMkRGNTJCRDA3NzA5QzJCQUQxRjI5ODcyNzMxCis6MTBDQkIwMDAwQUY4NTdEODBEODQ4NzE1OEY5QUM5MUYzNjUxREM0MzYwCis6MTBDQkMwMDA5RDc4RkU3ODM0Q0E5MzE1N0YyRTIzQjlEMkNBRDhCMDg3Cis6MTBDQkQwMDBGODc5Qjk4NUM3NzlGRjFCRkExMTIwQkRGNjhCN0U5OUNDCis6MTBDQkUwMDBGNjIzNDcwQ0NCOEU4MjdFMjUxMEM4N0YzOEQwMUE1Qjg3Cis6MTBDQkYwMDA0RTc5MkY5MkZCQkEyRjBDQzNFRTE3QjUxNEU4RjUyRTIxCis6MTBDQzAwMDBDOUU5MkZGNUZFODdFQkJGNzREMEVGQ0Q2NEI2QjgyQjIyCis6MTBDQzEwMDA5QUY3RDBGQjNFRkFGOTZCRUY2Q0MxRkNGQTUxQkZBRjRCCis6MTBDQzIwMDBGOENDNDBGQ0JCRTJCMzMyOTI5QkJENTczODVGQUJDQjM0Cis6MTBDQzMwMDA3QjEyRTE4QzlDMEZDMEZGMjlEMjI3MTJGRTQxN0UxRjgwCis6MTBDQzQwMDBCODMyRjhCRjJGMzFGQTdENDNBMEFFQzhCRkREMkJERTZFCis6MTBDQzUwMDAzMUU4NUQ1QTQyRUY2OTFDQzRGNzQ4NTA2RUNFRTBGN0U4Cis6MTBDQzYwMDA4RTdBQzVGREU0REUwNDA3QkRGN0YxOTI5MUU3MDNCN0M0Cis6MTBDQzcwMDA4QUY2RTI3REM4REU1QjUzRjg3QjFERTZBNjVGOTc2MjBECis6MTBDQzgwMDBGRkFEM0MzRUFFRDcxOEE0REY1M0ZCRkYwMEQ5NEEzMEJFCis6MTBDQzkwMDA5NzAwODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMENCCis6MTBDQ0EwMDAwMDBCRTU3RDBCNzhENEQ1QjVFRkZFQ0YyQjMzQzkyNDJGCis6MTBDQ0IwMDA5OTg0OTAwNzIxNjFGMjIwMDQwRDM4NzlGMTBDMzA0MEZECis6MTBDQ0MwMDA4MjY4RDEwNjEwMDU4QzcxNDIwMjg0QkMwODhGRjZDNEJDCis6MTBDQ0QwMDA5NjlBQzEwMEEyQzUxQThFODg2ODUxMDcwQTE0MTU2RDZDCis6MTBDQ0UwMDBBODg4QThDMTMzODI1MDVBNUY2OUI1MUU1QjJENEQwNEQ4Cis6MTBDQ0YwMDA5RjNDMTI4MkY2NjIwRkI3QkRGQkI3RjZERTk5RjkwRkMzCis6MTBDRDAwMDA4OURBREVEM0VGQkJFN0JCRjFEM0VERkVFRkY3NUE2QjY5Cis6MTBDRDEwMDBBRkI1RjY1QTdCRUQ2OUZGRDEyMDk3RDdDOTk4RDEzQUM0Cis6MTBDRDIwMDAzN0U3NzQzRTYzRUZGOTBDNUU3MzM0NjMyRDlBRkY1NjU4Cis6MTBDRDMwMDA2MzAxNjNERTBCMTZCNjNCOERCMTJEMzFGRUU0RTUzQzlECis6MTBDRDQwMDBCRjY1RDk1NTU0RkYzREM2NjZCNkU1RTBCQjNCMjk5NkE1Cis6MTBDRDUwMDBBNzA3RkY2NkJDQkRENENFRjNCOTNDQ0ZEMzk3MzQzNjFBCis6MTBDRDYwMDA5RkNBNjdCQjkzNjI3ODdFNjE3OEQ0Njg3NjBEQ0ZFRkY3Cis6MTBDRDcwMDBGMEVEREUxQTg3RUZEOUQ0Q0YxMDIzNkJBNDdBNjlBMjI1Cis6MTBDRDgwMDA5RjNGOUE0NUJCM0YzMEZFOTdDNEQ4QTM2NkU2QjVDNTIyCis6MTBDRDkwMDAzMjM2REVCNTY4QjhBQjkwMzFDRjhEMTEyNjE2OEQ0Mjk0Cis6MTBDREEwMDA3NzkyQzZFN0YzNDhENTcwNzZBRkM2QjNBRDBGMzExNkFDCis6MTBDREIwMDBDRkQ4N0MyQkEzM0YzNTFFMkE1QUM3MzAzNjRGN0M2NjBFCis6MTBDREMwMDAwQjE2RUZCNjc5Rjg3Q0U2NTVEQkJBQjREMTdDMURENUVECis6MTBDREQwMDA3NzQ1M0FGOTc4RjMzQzQ2N0Y1ODE0QUY3MDUzODlCQkQ2Cis6MTBDREUwMDAzMzVCRDRGRDdCM0FDNjc1RDNCOEFDNkExMENGRjBENEIwCis6MTBDREYwMDBFNEFGNjQ3Q0RDOTc3QkFDRUM1RTBFOTdCRkUzNkY0QURDCis6MTBDRTAwMDAyMEU1MTA2MzZDMzA2MzlGREFDNEY4RjU2RDUzMUYzODZBCis6MTBDRTEwMDBBREZBRTNGRjU2NUJFQzFCQjU2ODk0QTdGQTE4MUY3RkM5Cis6MTBDRTIwMDBGRjEwNEYwMUZBNUY3RUU4QkEwNzRFNUIwM0Y1QUExNkMyCis6MTBDRTMwMDA5NzY0MzE0MzYwRENEMDcxNDJDNzZCMDFERUY4NzhDMzgwCis6MTBDRTQwMDA4MDQ3REVBNDg1MTcxODgwQkYzNjlCMEZGODYzQTY5RTI3Cis6MTBDRTUwMDAzRjJDRTVGOTk2Rjk1N0I5RUVFNUQ5OTk3M0FDNkU4RDhCCis6MTBDRTYwMDBFM0ExRjc0MDk4MkY0Q0MzRjc3MDM3RDZENTcyMzhEMjZDCis6MTBDRTcwMDA2N0UwRjlEQjM1MDFGRjE2OEREMTc3RUY3RUIzNkYzN0IxCis6MTBDRTgwMDBGRjU2NjdGMTNEQjE4N0I3QUI3Qjc5QTQ4QjhGQ0MwRTkyCis6MTBDRTkwMDA1QUY4N0Y1MEZFNjI4NDI4OEY3MkE3QUQyRjQwNzkwMjI2Cis6MTBDRUEwMDBFMUY3MjVCMzMzOUFDQTdGNkQ2NDU0MUVFRUNGOEFFMTUxCis6MTBDRUIwMDBGMDZFNEFGNENDNzFGMTc5MEYwOUUzRjhCN0EzNUZGMTkyCis6MTBDRUMwMDBGREE0QTRCRjkzQkM1QkUwRDdEQjE4NDlGRDMyOTlGNzAyCis6MTBDRUQwMDBGQzcwOTBFRjVFNUE4RjNCNjkzMUYyQUJBRUE2RjU3OEVECis6MTBDRUUwMDAzMDBGM0UyRkQ2QTBEMTdBNEYzQTdDRjc2NEYxRjI5M0ZGCis6MTBDRUYwMDBFRDgzNjkxRTcxOTIxRTRFOTZGRUU1OERCMUJDREVDOUIyCis6MTBDRjAwMDA0MzQ2MTdGQUZDQTBDOUU4Qjc0NEExNUNFMDQzOUI2MzIxCis6MTBDRjEwMDBDRERBQzZEQjlEN0EzMUQyMTVDNkNCQ0JFRUFGN0QxRDA3Cis6MTBDRjIwMDBERkNCRUVBQTlGNDU2OUNEOUExQjE5QUZERjc5RDdGQkZFCis6MTBDRjMwMDBBOTlFOUMyQkYxNTE1NkM3NUIwNUUxRjE0RTk3QkIxRTk0Cis6MTBDRjQwMDBGODdEQzRFNTY5QzQ3QTk3RTc3NDJFNjE5Q0FFQ0U1QjI4Cis6MTBDRjUwMDAzQTFFNjM0NkM2REUxREVBNTk4NUVGREQyRjdDQjIwNzE3Cis6MTBDRjYwMDBERjM5OUVCMjRBNDdGMTY1OTgzODlEODA3RTNCNDcxMzcyCis6MTBDRjcwMDA1RDJGOTdGNDlCOUVFQkI5MDNGRDcxMzg5NkIzMENDNkY5Cis6MTBDRjgwMDAyMjcyM0EyQzk4MDc1QjMzRjg1QkQxQzlFN0VEQkIwRkVGCis6MTBDRjkwMDA2QTdDOUNEQUYwRjYwNjRBOERCRUQxRThFNzhDRTY4RjEzCis6MTBDRkEwMDBEMjMyMDg4RTFFRUNCRkIzMEU3RjE0RjBFMTMxRjAzQzlDCis6MTBDRkIwMDBDNzRGRUQ1RUZEQkFGMDY3RTJGM0FBQzVGRkYwNzZCNUE0Cis6MTBDRkMwMDA2RDQ2QjcwREZCODdGOTJDOTg3RjJEQjMwNEVBQTc4OTJFCis6MTBDRkQwMDA3RDA4M0FFMEZERUNBNEZENkFGRkEwRkM4NzFDMEYzNTNDCis6MTBDRkUwMDA0RjhDQ0NCQjk3RTNBNzM2RTZEMDRGMjY1MjNEREU0RUEyCis6MTBDRkYwMDBFRDE3RTM5NTc5QjU5RTJCRTcyM0Q2Nzc1NkVFODNCM0VECis6MTBEMDAwMDBGQzhCMTlGNEIzMkY0Q0QwM0YxM0Y0NzFGRTg5MjQ0OUUzCis6MTBEMDEwMDAzRjgyNkVDRjNGMzFDMjg3RjlDNENCN0Q3MzVFRjMxQTc2Cis6MTBEMDIwMDBDMkQxRUU0N0NDQjU5QkNGOEJCOURBQzZDQzFFODVEOTIxCis6MTBEMDMwMDBCNzhEOTkxM0M5RDg1NkM5RDc2QTA3QjU4RDAxQkY1MkE0Cis6MTBEMDQwMDBGQzhCNTlEQjQ2Q0ZFNkU1MkNCQjZERjQ5QzUxMDFGRTExCis6MTBEMDUwMDBDNzRBREJCMkU4QkJBRjJEMEJFRDBGMUE1ODM1RTBBOTdDCis6MTBEMDYwMDBFNjUzRjM1NEYyMEU4Mjg3NTVFQ0Q3OUFBN0FFMjZGODEyCis6MTBEMDcwMDBBODcxNUFDMDQ3QzA4RkMxMkZBMkFFNUNGN0NCMkU0RDBFCis6MTBEMDgwMDBFQ0ZGQzgzMTA5RTA2QjAzRTEzRjNCNzE1MDBFNThDOTFBCis6MTBEMDkwMDBGOTA1OTZEQkREQkNERjExREIyQ0JBN0U1NEJEOTEzRTc5Cis6MTBEMEEwMDBGREY3NUZBMTdGNEU2RkMzNDJGMDM5QzREOEYzNEExODMxCis6MTBEMEIwMDA5RjJGRkIxOTg3MTNCQjcyQkMzNzY1QkIyNzlGRUNDMzNGCis6MTBEMEMwMDA5RjUxRTA5MzMxQTdBMjFCMjdDMTQ5RTBFOTBGMTY4NUM0Cis6MTBEMEQwMDBBN0Q1Qzk5QzVGRDcwMjI2RTkwMTc4MURDQ0Y1MjQ0MzZBCis6MTBEMEUwMDBBRTlDNDcxRUYyMjY4NkU3NzlEQTIwRTFBRkYyMEFFRTFGCis6MTBEMEYwMDBBMUY0NzdENzFGOTYyNDc3RjJGNkZGRTUzMkQwQkM0MjMxCis6MTBEMTAwMDBFMUJBOTZDMzBGRTUyRDY2NzY3QjI5NkZGRjc5RjM4OTI3Cis6MTBEMTEwMDA4Q0QzRTZDMDdBM0U2RTc2QkJCOUE4RTlDQjJGRDk5NjAwCis6MTBEMTIwMDA2QkM1QkU1QkJBM0REN0JBMjgwOEVFMkQ3QkYzNEYzOEVFCis6MTBEMTMwMDAzOTVFQ0ZFRTM1NjEyNEQ2NjJGMkZENjQ0MjFDQkUxQjFGCis6MTBEMTQwMDBEQkJDOENDQUFENkU1RUZGQUNGREM4OUJBOEI3NjQ3QjMwCis6MTBEMTUwMDA0QzlFRDExOTY4QkY3NDVCODlCQjJBMDhGRTU3RUZENTc2Cis6MTBEMTYwMDBFMzYzNTQ5QjNFN0ZDRDIxN0RERTlDQ0I4ODFFRkVEMUE4Cis6MTBEMTcwMDA3NkI5N0U3RDNFRkY4NDNFRkZDOTNCQUI2RkM2MzY3OEY1Cis6MTBEMTgwMDA3RTlDRDgzNzlGRkEyMjdENTYwRUQ3RUFGNzY3OUM4MDlGCis6MTBEMTkwMDAxQ0ZERjRFMEYzNTFDMDU3RUQ5RkFBOEUyNzMzQUM0MzNBCis6MTBEMUEwMDA0RkE3MUM4RjlBODlBRkQ3QkI0NzIzN0E1OUU2MEJERDZGCis6MTBEMUIwMDBCRjkyNkY1Q0IxQUZENzEyQkVCMEIzODJFOTI2MTRCRjg1Cis6MTBEMUMwMDA2NzU4REJDRDZFNEU1Rjc1NEQ2RjY3NDA4RkE5OUVDNTZBCis6MTBEMUQwMDAwOTE5RjJCQjZEQjM4NUQ5QUYxQzZGMjBGRUMxRUM2RThGCis6MTBEMUUwMDAyN0UzRjQ1NzMxNEU5NDRENjg5QUNFNEVGMUZFRDhBNkZGCis6MTBEMUYwMDBERkNFQzA3RUFERjhCMTQ2RkE0NkM1QjMyMzVFMDVERDhECis6MTBEMjAwMDA3NEVENUY3MDNEQTUzN0NGMjQzODU0MzJCNzA1RkM3MEZDCis6MTBEMjEwMDA2OUJCRTY4RkU0NzlDNzM4RTdBMTRFREU2RUIxNEY3Mzg0Cis6MTBEMjIwMDA2MURFOEJENjg1MDVGODE5RkZCNzZBNTNDODNDQjYwNDkyCis6MTBEMjMwMDA5NUYzRjkyRjNERjRDQTU3MUFFRkJGN0FCQkJFREQzMjIyCis6MTBEMjQwMDAwRTJGQzg4RjlBNUQ3RjBGMEJGRUNFMTUyMTgyRDc4NERCCis6MTBEMjUwMDBGNjFENDZBQzdCQjE5Q0JGOTI3RkNDM0I5OTYxN0QxM0EwCis6MTBEMjYwMDA0NDEzNzYxQUZGRTE3MkMzMzJDQzUzOUM1QjE4OTA4MzRGCis6MTBEMjcwMDAxM0I2ODhGNjlDRjE1NTYwRERGNTc2OEIxM0VCQUVCN0VGCis6MTBEMjgwMDAzMjdGMDQ5RkNGODk0ODhCREJDMUJGNUZEQzE2NDlGQTMwCis6MTBEMjkwMDBDMzkyMzBFNkI1RTY1MUNBNkM3OTY4RTc4QTQ2QkI4RjFGCis6MTBEMkEwMDBERjMyOTI5RTU0Q0Y3OTBGRjVGM0I4RTY2QjQxM0Y0NkRCCis6MTBEMkIwMDA0REU0N0YyNkYyQ0I5ODlGRDYwM0JBNzEwN0FGRDNBNzcwCis6MTBEMkMwMDBDRkIzRDY0MUE0OTdENDk5RkNBRjAwMkUzNUFDOTNFMEYwCis6MTBEMkQwMDBDRDM4M0VERDBBOEUxQzZFNzU3QzlERUZDNTQyRkZEMkI3Cis6MTBEMkUwMDBCNzVGQ0VEQUE4RkVGMjQzN0YwRjBCRkVDRUY1NEM2Njk5Cis6MTBEMkYwMDBFNUY1Qjc4N0YzOTRFNkVGMjMzODFBMkRDQzZERTBGMzBDCis6MTBEMzAwMDAzNERFMTlFRUYzOTIxRTUyMUEwRTNBMzU0QjdENzlDQjZDCis6MTBEMzEwMDAzREVFMkNDQzdCQkRFNkNFNzI4MDhGNkRCNkI5QzBDNzFBCis6MTBEMzIwMDAxNkVFMTA3MjY4NEIwQ0Q3NUZFMzQ4NkZBNkY2MEJBMUEwCis6MTBEMzMwMDA0RjQxNEY1OTIwRjhERDk2OTgzNjNGRjhGRTk2MDdEM0I3Cis6MTBEMzQwMDA4NDNFRjUzNzIzQzFBNUU3M0U5QjZGQTcwNjdENUFFOENCCis6MTBEMzUwMDAzRDVCMzY4RkEwRjZFMDk3QTQ0RkREMTcyOURBQ0YxNjk0Cis6MTBEMzYwMDA3MEREMzJEOEUxRjNGMkZDMUYzMUM1MjRFOEQ5RUUyQzkwCis6MTBEMzcwMDAyQkI1RTM3QTVBNUE0MDRFMjk3REZBNjdDMzNDNzcwMUIwCis6MTBEMzgwMDBERjZBQkQ0QUZGNjZENURGNEVERkRDMkRFNTY3Q0Y2NjdECis6MTBEMzkwMDAzRTRGREVGRjY5QURGNEI4MjE0ODFGN0UyMDU3RjBGRkY1Cis6MTBEM0EwMDAzMUQzREM3QjY0M0QxN0VBNTUxOTY2REYzQjg1Q0ZCNzg3Cis6MTBEM0IwMDA2QUFCQzFEOTkyMTY4MDNCNzNCQkIzMDBFN0QzOUI2REI4Cis6MTBEM0MwMDA3OUEwQjMzMUQzMTg5RDI3NEVFNjBBN0UxRTUxQzBEQ0VBCis6MTBEM0QwMDAzRTlFNkU5N0ZENkVDRjM1RThEMkM0NzA0RTdGQkM5RkU3Cis6MTBEM0UwMDBEMzI1N0UzM0YwMUI1OTUwNkE4MTNDRTQzMjlDRjg3OTk2Cis6MTBEM0YwMDBFODNBRjZFNjBBQjk1OTY1MjlGRENEQTQ3RUU2RDM0Nzk5Cis6MTBENDAwMDAwN0M1NDI2RjM5QkQ0MkRCMjlFNjI1RjAzQ0U2REY2REZBCis6MTBENDEwMDBBRTE2NUFCNzk4OUY4MjNCQTc5QjQyOTJGNzkyNkZDNTcwCis6MTBENDIwMDBGNEQxODlFRjA5MUI0N0VENjZBNTRGMDNGRjlBOEU0RTk1Cis6MTBENDMwMDAwODlFNUJFRTFCNDU3ODVDMjhGMUNDRUVCMzQ5M0E2MTVGCis6MTBENDQwMDBFQ0FGMjgyRjcxNTJGOTM3OURCN0Q0M0EzOTFENTAzOUI2Cis6MTBENDUwMDBDN0I3MUZGODBFM0Q2RjI5N0MzMzkzQUZCMDM0NzI2MEFECis6MTBENDYwMDA3QzJGMUExNzMzNDZFM0EwNEUzNjMxNkYxODg3MEI2NEIyCis6MTBENDcwMDAxRUMxRTUxRTkzRUYyRTNFOUZBMTI2MDFGRjE0OTNBMDJGCis6MTBENDgwMDAyRkNFOURCREUxNzk1NERGNkRFMUY5OEEwNzk2MzIzN0UxCis6MTBENDkwMDBBRjVGOTFDQzVDOUFBOENGQTI1MTlGNzc2M0U0Mjk2NEQ3Cis6MTBENEEwMDAwNkRBNTU0NDhCN0UyQjEyOThFRjJFQTlGNzgzNUY2NTIxCis6MTBENEIwMDAyMjREQTc3RUREODY1OEQxM0UyQThGREE3QjBEQTJCRDk0Cis6MTBENEMwMDBEQkM0RDM2MTE5NjJCRkY0QUMwRkEzRkQ1MzcxNzc0QTdCCis6MTBENEQwMDAxNkU4NjBENjM0M0QxREU0RTcwOUJBNTFFOUUzNzk0RTE4Cis6MTBENEUwMDAyOTY3NUM4OUQ4REY4QkQ2OEQyNEI5RDE2MjJCQUQ3RkJCCis6MTBENEYwMDAwRUY4N0EzQTgyRjRDMThBMERCN0RENTA4OEY5M0QzM0NGCis6MTBENTAwMDAwODFBMEVGQkZDQzZGRDYzNDA2RjhCRDYyREY4REVFRkNDCis6MTBENTEwMDA3MTFFRDk2QkEzRUZFRDc5OUVGM0I5RDBCNzM1NjdGOURBCis6MTBENTIwMDA3M0ZDQzNBMjc5NDcyRDg5QkNCREE3NkRGNkI5MTc3OUU1Cis6MTBENTMwMDA3QUEzNzdGRjlCRDAwQjZFQkNDOTQ4RjU2RjY0NkQ3RkYzCis6MTBENTQwMDBGOTIzRjhDMjNBMzFDRTBEREUwQkE2NDRERURGMEQ0NURECis6MTBENTUwMDAxQTQzNzk5N0NEOTFCQTgyQ0ZCRjQyRTJFRkFGNzIxRkUzCis6MTBENTYwMDBCNEQ4RDhGQzVGREEzMUFGOTRBQzc0RkVGRDA2NjhBQTdCCis6MTBENTcwMDBGREU4ODFFM0YyQTQ5RTM4NTVEQjBFQkQ2N0Q4NzRCMTk3Cis6MTBENTgwMDBCRjU0N0RGNDgzN0UyNzAzMUVCQzlFNTlDMjQ1RTUzOUY2Cis6MTBENTkwMDA1Q0E5N0VENUM2QjBBRThDMjhBNDY2RkYwODlFMkUyRTUwCis6MTBENUEwMDA5ODY2Q0JFM0Y1NjZBNUIzMTkzODM3RjVEQzYxNjQzQkMzCis6MTBENUIwMDA2OUJFM0QxNUI0RUYyM0IzOUNEOEY3MUVDNkZDQzRGNzczCis6MTBENUMwMDA3QzIzODlFRUJCQTZGNjc0RERDREYzNUQzQjQ2Qjg1QUVECis6MTBENUQwMDA4OEFGOEJGM0ZCNjIwNzIzRjlERTM1NTVGMDM1QzU1RjY1Cis6MTBENUUwMDA0RTNBM0EyMzg5NUVFNTc5QkU1MjkyQzY0NzRERDNCNzhCCis6MTBENUYwMDA4RUU1RjUyQkVEOTYyRUM4ODNDNTBGQ0U4RDcyRjI3OTkwCis6MTBENjAwMDA1NjZFRTFFNzc5MkVDN0Q4MjZGRDc5OUU5RkI3MzNGMjkzCis6MTBENjEwMDAwNjVGNzkyRTBGM0Q3RjgzNjY0MDQ3NTU5QjM0QTJDMzNBCis6MTBENjIwMDA2MTJEMkU0QjEyRjEzMUNEODFGNTU1RDlGRDk5OTA3RkE5Cis6MTBENjMwMDA1NTJFOUIwQkU1Njc5QkREMEY5Q0U2RkFFMUY5RTY5OTE5Cis6MTBENjQwMDA5NEIyQ0IxQ0VFN0M5RTU3MDE3OTdDREY4RkNERjdCODZFCis6MTBENjUwMDAwMEE3OEFENjBBM0E0RjQ2RTQ3ODg4M0YyRDk3NzQzNzU4Cis6MTBENjYwMDA4QjgzNTkwM0JGMzE3NTI2NjExRjc2RTVDQUVGQjE4RUYyCis6MTBENjcwMDAyQzNCRDFCMzhEMDEwRTVENjY0NzE2RTZENUI1REU2NjRGCis6MTBENjgwMDA4MERDOUM3NTk3QTA2QkJFQ0ZBQzI2REVGRTFFMTMwQjE0Cis6MTBENjkwMDBDNzdFRkYxQkRBRjM3NTk2QUQzNTk1RUVFMEY5QTE1NjFFCis6MTBENkEwMDA2NjhBOEMwNTVERTUxMjVERkZCQ0MwNjMwNjFDM0VGRDBECis6MTBENkIwMDAxMTFCMDdCREEwNzJEMzY2OUE4RkEyMEI2NkVBMjgxRUMzCis6MTBENkMwMDAwNDNENkY3NzVBMUVDRUQ3OEE4RTdFNUUzMEVEREFCQzZGCis6MTBENkQwMDA2MDdBQjg0OTIzM0FFMEU5MkIxOTQ0MEY3MzY2MTEzRDhCCis6MTBENkUwMDA0Q0YzNjdBRUU0RjMyQTMxRDYzMTM3RUMwQzg5Q0MxNTE0Cis6MTBENkYwMDBDNkU3REZDQjdBNDg5RkU4RTVGQTA0RTQ5OUUyMjc4QTk3Cis6MTBENzAwMDA2RjcwM0E3MDVCRTMwM0Y4REREM0NDQTdDMjc5RjJERTI5Cis6MTBENzEwMDA2NjJCQTU0RjM2M0I5ODg5QzM3NzVGNzMyMkU1OUY2OUQ3Cis6MTBENzIwMDA3NjUyREFENjlDNERERjdGRDlFQ0EyRkM4MUU2NzE5NDZCCis6MTBENzMwMDAzRkQ4RUNBNkZDQTFFNjk5OTRCRUQ4NUM0QURGMTU1RjAxCis6MTBENzQwMDBFMjcwMjEzRUE0Rjg4QUUyNDc4QTlFMTQ1RjBBQTVBM0VDCis6MTBENzUwMDA3MjI3RjYwNkI1MjdCRUE3RjgxREQ2NjFDODBCRjAyM0MxCis6MTBENzYwMDA4NURGNzRBREQ0OUI5ODA2M0VENkI5MDBGQ0EyQzQ3ODgwCis6MTBENzcwMDBGNkU5RTczOTdDN0JBQkVEQUUzMDI3RTAyMkY4NUVBRjBGCis6MTBENzgwMDBERDRBNzIzRUQ1QzIwRUUxRkNERkIyQzJERDc1Nzc5MDk0Cis6MTBENzkwMDA1Q0JEQjU1QTYzQTYyMEJBQkRBREQxQzY0QzQxNzQ3QjAxCis6MTBEN0EwMDA3QjUzOEMyRTVGRDZGNEY2QjEwNERFRkZERjUzM0M1RTc0Cis6MTBEN0IwMDBFMEU1RTQ5RDFGM0ZGQTlGRkNGQkUzNzc3RTNFMUNGODBCCis6MTBEN0MwMDBFNkYzRDhGRDEwQzY1RDEzREUzNzhGNThFNEQ3OTk0OUNDCis6MTBEN0QwMDBDRTBDMEIxN0U3QTQ2MUUxRTI5Qzg0M0ZFMDY3MTExM0Q0Cis6MTBEN0UwMDBGQkY0RjEzQkZGNEFGQkJDQUIyOUNDNjk4NEZFMDE3QzE2Cis6MTBEN0YwMDA3MUY4N0UyMEYxQjVBODI5OENFMDU4QjFGRUQ0RDNDRkMyCis6MTBEODAwMDA2M0JGQUZCMTEwQkY1QkI0NEVFRUNGOEQxQ0FFNDE3QTlCCis6MTBEODEwMDBEQjg3NDk4Q0Y0MzNDRENENTgxMzg3REY4NzNGQjJGOENGCis6MTBEODIwMDBCOUVDNjcxRjZBNTY5RkM2MUI2QUZDRDA1NEM2QkY3QjAzCis6MTBEODMwMDAzNkZFRUEzREU4REI1QUQzMDlEMjhGM0Q1NkJCREY4ODdFCis6MTBEODQwMDBGOTc5Q0Q2NzgzRkJEMzlBOEU1MzNERDYzOTM0RTZFMzFECis6MTBEODUwMDAwOERBOEEwQzcwOEMyODcwNUJDMDI3NDBEQkMwREZBMjFFCis6MTBEODYwMDBFQzIzMENGQjlCQjU2QThFRTE3QzVENTVGMjdCRDU0NkMzCis6MTBEODcwMDA4REY0MEUwNUZGMjdGMjhDQjRBRjRFRTc5QTA4QUZEM0I0Cis6MTBEODgwMDBCMDY3MDcxMzAzMjMzOUE1RTg5NkYzMERCNzBGRkJBMzgxCis6MTBEODkwMDAzNUQ3QjIyNDg4MUYyRjkyREYyQkIzMEQ5NEFBRUZBN0EwCis6MTBEOEEwMDBGOUI2NDQzRkQzQjBCOTc4QkZGNzY2QTc1QjE2MTNCRjhDCis6MTBEOEIwMDA3MzVBQzAwRjU0RkQ0NUQ5NzkxQkQyMEJEMENGRDQzODQxCis6MTBEOEMwMDAxNkI0MkY5RkNCMzNDOTc5Mzk4NDFDQjM3MjM5QzZEQkE4Cis6MTBEOEQwMDBENTBEMjAwRjk0N0VGMjI5RkU3NzNDQ0Q5RkNFNUYzNThCCis6MTBEOEUwMDBDRjNDRjVDQzhCQjA0QkJDMUY0Njc4QUFCOTQ2REEzNzkzCis6MTBEOEYwMDA3MjdDNjNFNjkyNUVFM0I2NkI3QzlEMEQxMkZGQzU0RkIyCis6MTBEOTAwMDBGRDI5QUE5Mzk3MkYzRjIwRUNBNzNDRUQ0MkRBQjBBNjYxCis6MTBEOTEwMDA5QUVDNjUwRDJFQkU0RkIwMEYwRTk5M0ZFQzBDQTJDQkNBCis6MTBEOTIwMDA1NzlGNzkzRkFBOTNDRTE3REU2NDQzMjI1MjdGMzJFMzlBCis6MTBEOTMwMDA2OUMzODE1MzMzMThGQTYzM0QxQjFDRjYyQkRCMkREN0NCCis6MTBEOTQwMDAyRUQzMzk1M0FEQTNFNEYwOTdGMTM0QkU3NjI5OUVFQTg1Cis6MTBEOTUwMDAxRjVFMUZERjlGMUQ2NDM5MzM3REQ4Qjc3RkM5Q0VFMEJFCis6MTBEOTYwMDBENkQ5RDU5NkIzNEQxNzhDN0NCRUNCRDdDQ0ZDMDQ3NERFCis6MTBEOTcwMDAxRTVBRkY5M0JDQzgzOEQwMEYxQkNCQzY5MjFEQzNDNDIwCis6MTBEOTgwMDAwQ0MwRjc0QUFCODA0M0FGNkY3ODM0RkIxQUZCQ0JGMjg1Cis6MTBEOTkwMDA2REJDMTE1N0I1N0E0RENFNjgxNzlGNkYzN0VDRTdGRDE4Cis6MTBEOUEwMDBENENGQzkxNzcyRkQxQ0RGNDc4QzlGQTVCQUY3MTlFOUMwCis6MTBEOUIwMDBCQ0QwQkQyRjkyRThCRjYxREYwM0M3MjdGMjdDQzMyRTI2Cis6MTBEOUMwMDAwREMzQjI3QUQ2NDE3MDZBMzg2MDY0RDY2MDc5MDZGQkJFCis6MTBEOUQwMDBDRUEwODFFNzU5RkI1NDY0MjNFODY5NTk5QkU2REVDRDZDCis6MTBEOUUwMDBFN0QzNkI3NTQ2MEYwRTlBOEYyRDVGRDA1MzZENThEQkMyCis6MTBEOUYwMDAxODgyQUI5Q0ZGREYyNTNGNTNGNTk2QjUzRjYwMDFCRTEzCis6MTBEQTAwMDA3OEJERjNBNEJGRkMyMjgyOTFERDhDRjVCQzg5Nzk5RUEwCis6MTBEQTEwMDBEOTlFRUY4MjdENkY1OURCRkUwNjkyRkZGQjIyMUNDMzZECis6MTBEQTIwMDBGOTNBM0U5Nzc2N0VENUNGRTA3Q0IxOUYwNkU3MEJCREY1Cis6MTBEQTMwMDBFMzhDQjRFNzlFNzlDNjQ4N0MwOEYzQzQzRUZDMUM3QUFDCis6MTBEQTQwMDA2RUQwM0M5M0U1M0M5M0YzODU3RTczMDRGQkIxMzA1MDdDCis6MTBEQTUwMDA3RjU5NUI1NzU0MjZBRkZGQzlBMUI3MjkxRDJFQzc1OTVGCis6MTBEQTYwMDA2NkVGMTgwREI5RjlDOTgxODg5OTNFNEE3RjNBRTMyNUQ2Cis6MTBEQTcwMDAzRURFQjlCNkE5NzE1QUQwQkVDQUNCMzc1M0JGRTdCNjlFCis6MTBEQTgwMDAxQjY3MDI1RUNDMzc0OEVBRjk2REI0OUUzM0ZCOTIzNUQyCis6MTBEQTkwMDAzQURGMDJERTVDQ0YzRjczRTBEOTI4MDNFRDVCQUY2ODZECis6MTBEQUEwMDAyN0YxNjhCMDBBM0I2RDU4OEM1M0VBOTlENjU2RTgxQkFCCis6MTBEQUIwMDAwQkI5NzYxN0NERjk1REZEODEwQjI0N0Y0M0JGQUJGQTFGCis6MTBEQUMwMDBCNERGOTI3MEZFRUUyMUJCMDZGRjMzODA3RUVCMUQwMkI5Cis6MTBEQUQwMDBFNzI1QzY5QzA0RUM4M0YyNkI5Q0I3REMwQTNFRjY5QTAxCis6MTBEQUUwMDA1OUUwNjFBOEYzMjE5Q0FCQ0FERjFBNDQ3NjhCOTU2Njk2Cis6MTBEQUYwMDA2NzAyRjI1RkJDQ0UwRjgyN0NERUU1Rjk3MjdGMjc3NjhCCis6MTBEQjAwMDAxNkMyQ0VEOTk1MjZFNDdBREQ0NjdFNTBFMUVCMTlDMkU1Cis6MTBEQjEwMDBGMUVFRTU0QkFFRjMxOTk5MjczRkUwMjc5QTlGOUY0RTEwCis6MTBEQjIwMDBFQjdCQTREQUUwQjY5MDlGQzU5RjA1QkJFNzQ5MEJGM0ZBCis6MTBEQjMwMDA5MkRGRTg5NzM2RTEwRjQ4MTc3NkZENDdBNEJGQTgyRTdECis6MTBEQjQwMDBENjlGMzUwOEY2MkY4OUM3QkEzOUJDM0MwODlGNzUzQjZDCis6MTBEQjUwMDBGRDU5RDA1RkNFNUE4NDlEMEZFNTBFQTQ3OUEyNUU4QjRECis6MTBEQjYwMDBBNDFCRjQ4MzdFQkJEMjFDRTc0OUNGN0MyRTkyNDFERkZECis6MTBEQjcwMDAzNzNDMUYyOUVDMEEzRkI3RUQwQzBCOTI5QkQ1OTJBRUI4Cis6MTBEQjgwMDBCOENFRTRDNUZBQkRCQkM1RkMzMDJGRThDRkNCMkNBRDc5Cis6MTBEQjkwMDA1OUQwMkZENUI4Q0JBMjVBNjlCQ0IzNzJCQzY1RTFBREUwCis6MTBEQkEwMDBDMjNGNjExMUY2NDhENEE3RjFDRDhDRkMyODNENEY4NENCCis6MTBEQkIwMDA5MTlFRkE3OTUyQzc0MThDRkZGOTEzMjMxOUU0Nzg1N0UzCis6MTBEQkMwMDA5QTZGQzkyMTJBRTdGQTFCQzc0N0NEOTM2MTdFQ0NGNzJDCis6MTBEQkQwMDBCMzI3MjI3RDhDRDdGRkNDMkNGNEExQ0YyMkUzNDkxRkExCis6MTBEQkUwMDAzQTExQjlCNTlDRkMzMkJCQzIzNEQ4NTUzRUQzOTgyNTA2Cis6MTBEQkYwMDAxMUU1QkI4NTFGQTNBNkI5ODlGQzBGMzU3Q0JCQjMzQ0RGCis6MTBEQzAwMDA0QTY3QjI1ODk0OEYyNDdCQ0I2N0JGRTZGQjU0QTNFRkRGCis6MTBEQzEwMDAxQkYxRERDMzVBQ0I3RjgwN0RCNzM3ODJFQzZFOUYzRjBGCis6MTBEQzIwMDBGOTVGMjNGQkYzNUJENEVDRDJEQjk3MTQxREE4RjI3QkU2Cis6MTBEQzMwMDAyNDVGQkE0N0MyRjFCRTdDMDdFMUJGM0VBMjZENkIzQURBCis6MTBEQzQwMDBBRDUzRUM1NzhFMDczQTc3RjFGRDExMEY3QkY3QzlCNjRDCis6MTBEQzUwMDAxN0UyMzUzQkUwRUNDRkZBMjlFMEJFNTc5QzZGM0VERjgwCis6MTBEQzYwMDA2NzI2QkY0QkNERjM5MTZFQjJFM0RDM0RENjAwNzk1MTEwCis6MTBEQzcwMDA2MzE0N0E3MDhEODE4MzhGQTdEQTlEN0JCM0EwNjdCNzE5Cis6MTBEQzgwMDAzQzYxQ0IwMzNDMzhCQ0U5MUNEOUIzREIyOEM3MTFFM0FBCis6MTBEQzkwMDA3RUI2Mjc0NUQ4RjVGRDMyN0Y3MDE0RDlGNTY3QzVCMjM5Cis6MTBEQ0EwMDBEQkU3OTA5RUIzN0QzNEUwN0E3MTU3ODQwMTc0QzFDNzdECis6MTBEQ0IwMDA3MTZCMUMzRTM1M0ZGOEExODA2N0Y0MTJEMkNCRjlGRUEwCis6MTBEQ0MwMDAyMzdFNTkyN0Y5NjVGREREMTNBMzI3NjIzRkJENjU2NEY3Cis6MTBEQ0QwMDBEMDBCMkU5QTVDMDlFMDg3QTFGMEZBNDBGMjk1REE4MzI2Cis6MTBEQ0UwMDA4RjVBRTBCN0FCRTNGQkM2QzNGNzREQURGNDhGRDUzRTFCCis6MTBEQ0YwMDBBOTkxNUU1N0JCNjFFMjQzQzQwN0RGMzRCM0UxN0MxRUU4Cis6MTBERDAwMDA2N0RCMUU4ODBBQzZDNzcxQzlDRjAyRUQ1RDU0QkY5Njk2Cis6MTBERDEwMDBENzE3RUQ1RjhCQTJGOUVDMzFCQjMwOUY1MDNDN0VFQjA3Cis6MTBERDIwMDBGNjRGMUFCRjU1RkIzRUZBNjhFMzcyN0RGNDk1RUJCRUUxCis6MTBERDMwMDBDODNBQkVGRjNFRjhDOTNFMUJEOUFGMzhERTUzQTE3N0MzCis6MTBERDQwMDA5QzMxQjcyREMxQkFDRjNDNkQyMzNFNzMyNjQ2RUNGNzBDCis6MTBERDUwMDA0RjM4M0ZGNDhFQzAzQ0JFNzMzRkQ5Mzc3RTM3OTc0MTcyCis6MTBERDYwMDAxRTJDRjVFOUZCNTVFM0JFMjZGOTZGRkQyMDU3MzRFQzc4Cis6MTBERDcwMDA2NEY1MUMwRkU4OEZFM0U1QkJENEZFMkQzM0I1MEY1REQyCis6MTBERDgwMDBDNzkzNjg1NzE4QjQzRjlGOEUyMDdBMzkzMzQ0RTBFMzM1Cis6MTBERDkwMDBDQzMzMjM0OEFFNzRDNTA4M0FFN0YzNERDNTc5RTU0QzVBCis6MTBEREEwMDA4QzQ4MTk5NDExNEUwNzM1RjIzQzdBNjY2QTFCOURCRjY4Cis6MTBEREIwMDBDRjY4RkIyOUVEMzI4Qjc2MzU0REQyNkZDQ0U5MkUxMTMxCis6MTBEREMwMDA3NDAzOUE4NDNGQ0NCQUE5MDNGQTA0RUNENTYzRjIyODExCis6MTBEREQwMDBGNTg3QzU1RTY5NzcwNjdENDIwRTY1MTQwOEY5QzUzMDgyCis6MTBEREUwMDA1RUJDRjQ3RjkwOUVEMjY2MDE1RkY2NDgzREFFNkVERjZBCis6MTBEREYwMDA5NTdFMzhFMEI3NkU5RjQ2N0UyNDgzRUE4N0NGM0E0RTAxCis6MTBERTAwMDBEOUNCMzkzREQ2N0EzNUI3MERGMzU5Qjc2MjE5Rjk5MUE3Cis6MTBERTEwMDAxQTM3REYwQTdBNTdFQkE4MzVCMTk5MzgwRjc1Njk0NjdBCis6MTBERTIwMDA5QTRGOTc4REVGMUJDMDIxNzhCQzIwQkQyQjMyMzAwRTRFCis6MTBERTMwMDA3M0M0OTM5RTQ5Q0E3NTRDODE5MDU3QzhCN0YyRkVFQUU1Cis6MTBERTQwMDBENjY5OUI2ODlDMzQ3NUFFMTRFQjUzNzBFMjYwQjFDMDI4Cis6MTBERTUwMDA1RUM2Q0ZGQkEyN0M4MEY1QUI3OTg2QUU1RkNENjc3OERFCis6MTBERTYwMDA4MUIwNTM3NEE1MzlFRjJGMDJCRURGMzBCQTcwNEVCRkI4Cis6MTBERTcwMDA3ODM5M0YzQUY2NkJGNDMyOUNEQ0ZBRUNDNjdDRkU3OURBCis6MTBERTgwMDBBMDI5M0VGRjJGMjU3RkFCODU1RDlBQ0YzMzZCQkJERThDCis6MTBERTkwMDAxRjkyQkQ0QjlGQkY2QTlGM0U5RjczNDA5RjFGRERBRTg5Cis6MTBERUEwMDBDRkJCNUVENUU3ODdDODcxMTU5QzcwRUU3NThFMTBFNzA1Cis6MTBERUIwMDA1RUE0MzhGNzNBQzNDNEI5MTc3OTlDN0I5MUUyREM4QjM2Cis6MTBERUMwMDBFRjM4RjcyMjhGNzMyRkYyMzhGNzIyOEY3MzJGNTI5QzdGCis6MTBERUQwMDA3QkYxQkRCMjQwRjBFRjNBNjk3NzA0MUVFMDk3NjEyRjA1Cis6MTBERUUwMDBEODk0OUY5REY2NEJGNzgyNzhFMjlGQ0E0RkRBQkQyQ0ZCCis6MTBERUYwMDA4N0YyN0Q3NjlERDk1NkIyRUI5MEVEODZFQjI1NzM4NzQwCis6MTBERjAwMDA3QTZFMjgyODg0RkZCNDYzNDMxMkYwNjZFQTI0N0JFRTFECis6MTBERjEwMDBGMjE3ODUzREI3MkVDRjY2ODc5REExNzNGRDI3MUJBMDA1Cis6MTBERjIwMDAzRTY1MERGNUNDNDFGRDZFNzNDRjFFQTIwMzkzOUZGOEE1Cis6MTBERjMwMDA0NkU3NUFFNzVCNTMwNEZFQzhERUMxRUNCMTc0M0VBOTY0Cis6MTBERjQwMDA4MEJDOEIxRDE4OEZBMTdFMTVCNjQ5RUY0NzA5RjVBQjM0Cis6MTBERjUwMDA4NEZBNTM0MkU5NDBGOTUxMUUzN0Y3MjQ4MURGOUY3QTUyCis6MTBERjYwMDBDMkJBMDlGMzNGMjVFRDY0NkNCRTk1RjQyRkE1NTc5NzBGCis6MTBERjcwMDAxOEVEMDRBNzk1Rjc2OTNCMjFBNzU2MTVDNDUyRkJERTlGCis6MTBERjgwMDAxMzVDREZFRTQ3REVBQUI0RjI1MkJFRDBBQjU1N0U5M0VGCis6MTBERjkwMDA2NjIwM0Y4REM3NEQ3MjY4OTU5QzUzQUFENkQzNzUzN0JFCis6MTBERkEwMDA2ODI0RDI0MDcyRkNBMkRENDBFNzgyOEJFRjE4NDk4RkQzCis6MTBERkIwMDAxOEIxQ0RBMDVCQ0Y0ODVGQjg4RUJFQUVERTFCMUJFMkIyCis6MTBERkMwMDAwRjFDQTJBQjdGQ0RBMUY0MTA3RkUwNTU3QTNGRDU0RDU5Cis6MTBERkQwMDA2QjVGQzFGOTdBRUVBNjdDNURCREFBRDI4OTIxNzA5NEVGCis6MTBERkUwMDBGMzk2N0E2OUNCOUE2REE5RTAzRkFCMjI3QjY5RkVBQkQxCis6MTBERkYwMDA5RUIzRDFCRDhCMkEyRTVGREM3Q0RERDVDODcwRkU1ODY4Cis6MTBFMDAwMDA2RDc1REYwOEY4NTVCNzk5NjM2MEQ3QUE5NEYyODczNTI0Cis6MTBFMDEwMDBFOUU1NzFCNTg5NzkxREIxMDFCQUFCNzYzMDc3MEM2RjNFCis6MTBFMDIwMDA3RjJFQjc3NThGODFFM0VEOUM2MUZCRDYyMjI3RkM0QkQ5Cis6MTBFMDMwMDAzQjUyMUQ5Q0FFNTY2QjZERjFFMzc5N0ZBNzYyM0MzQjcyCis6MTBFMDQwMDAwQUY4N0U0RTM1RkI3RjUyMDY3RUI5M0Y4M0FERTVGNTdCCis6MTBFMDUwMDA0RTZEN0EzNjhBRjQ2RTQ5NjdBOTY2NDczOEYwQkRBM0RCCis6MTBFMDYwMDBENTQ4RTcwMkQ4QTc2MDBGNTJGNEIwQTM3NTUwNzhBNjQwCis6MTBFMDcwMDAzREIwQ0UwMEZFMkZEM0ZBMzg1RUU4REU0OEFGRkRDOEQzCis6MTBFMDgwMDBEMDU1RDBFM0RBQzQ3QUFCQTc2QTVFRDI5M0U1N0E1NjZDCis6MTBFMDkwMDA0QUI5QzJENjg5N0U1NkNCRkM2OTc5NUU1MEVCM0IzQkQwCis6MTBFMEEwMDBGMjk1RDE0RUY4MzU5QjBGQTUxQUMxQzcwREZCRjYyNDhBCis6MTBFMEIwMDA0MUJGNDhGMEI0NjNGRjU0RUYxOEZFOUY0NTdDREM5QUUzCis6MTBFMEMwMDBERjFCMTlGQ0M4MUY2RDk5MUUzNTFFRkFFN0QzNjZEN0YyCis6MTBFMEQwMDAyQzlFQkZCQkY1NjcxNjlDMEI2QTRDM0UwQkNFOURENUE0Cis6MTBFMEUwMDA0RkVDQjBDMEZGN0ZFRERFMURGNDdEQzlERTBBM0E2RjU0Cis6MTBFMEYwMDAyRjY1OEQ3NDhFRkNENDJDRTRCNDgyNDdGNTM0NkRCQjRGCis6MTBFMTAwMDA4M0NGM0JCMzUwRjBEN0VBNzA3MTFGQTRDNDU4NzQyQzZFCis6MTBFMTEwMDAwRUVCRERBQkU1NjJCRDM3OTVFRUI3NTRGMEVGRUY0QTlECis6MTBFMTIwMDAzRTFDQkEzRjdBNUY5RjVCMzIxODc2QTUzNkUxMDcxRDI5Cis6MTBFMTMwMDA2ODNGQ0NGMzhGQTRGRDMwRjc1MjFBQTUzNzVEQkE5QTI5Cis6MTBFMTQwMDBDRTU1QkY2N0E1QTM4ODRGRTQ4NDlDNjc1RjM3MEFCQkExCis6MTBFMTUwMDA1OUJCRDgwN0Q1MTY3RkRDNUNFQzkzOTdDREI0NEZFQTVBCis6MTBFMTYwMDA0REIwN0RFMzlDQ0NEODA0OUU5NjE2MTk3NUY0QkFCQ0NDCis6MTBFMTcwMDAzODQyNDdDRkYzNTlBQ0NFQUY3QzMzMUJBMkNCREYzNDUwCis6MTBFMTgwMDAyQjQzNTdGRjk2OUJBRTBFQTFGRkJDNDAzOUYxOTEwOTdFCis6MTBFMTkwMDBCQUZCMkJGNTZCQkM0RThERUM2OEQzRjRERjc5QkE4NkY1Cis6MTBFMUEwMDBFOEVDN0E1REZCN0EzNjI3NTAwRkU3RTA1REJGMjUzODUzCis6MTBFMUIwMDAzM0Q2NjFDMTc5QUJEQTIwRUVFQkNDRjc3NEM5RUY5REIxCis6MTBFMUMwMDBGNDlEMkY0NEI3MEY4NzY1QjhGRTUzQzg0NTMzRDlFNzkwCis6MTBFMUQwMDA5NTdEN0EzRUZFM0ZBMzNGQjlDODExMkRDNzhEMzYwQTAzCis6MTBFMUUwMDBGQjgyNDdBRjc3NzREMEY5OTMwOTNDRDQ0QjdCNEY3RENBCis6MTBFMUYwMDBCNkIwRjdENDdCM0IyQzhENzY4MkJGMjk5OTgzQTRBMTNFCis6MTBFMjAwMDA1NTIzN0IxRUFGNkY0RDhFMTVGOTM1Rjg3RUMwMUNCMEJGCis6MTBFMjEwMDBCMzMwRDFERjI1OTQ5RjMwNTY2MEJGODQ5NjM3RjA3NUI4Cis6MTBFMjIwMDA0M0NGNjg4MEJEODZFQzRDMzMzRjIxM0I5MzFBNDdGNkMxCis6MTBFMjMwMDBBRkU4NzRFOTM2QkRGREE4MDE3NjlEMjA3QzJFMkI3NEQ1Cis6MTBFMjQwMDAxMkJERDZFQ0REN0Y3QzA4ODdDRkRDRDI5ODVDRUNBM0Q2Cis6MTBFMjUwMDBCQUI2RDlFNjhBOUMyQkU5NERGMUY5OEJENTA2RjI3QjRCCis6MTBFMjYwMDBGN0JFN0U5NEU4QURCN0RBNDQ3NEZENEQ3MDY5NzAwQjZCCis6MTBFMjcwMDBCQjY2MjgxRDJFRTFFQkIyRjJGMTk3MUNEMDVDM0U0RDNGCis6MTBFMjgwMDBENDAzN0M4NjgwM0U0M0UwOTNEQzBGREMxNEJDRkFFMEQwCis6MTBFMjkwMDAxNzUyQkUxNEZGNTM4MEZCMDQ5QUNGOUZENjFGNUM0MkQ3Cis6MTBFMkEwMDBFMEE5QzYwOTgxMTcxQkE3ODdDNzEyOEZGMzJERjA5RjFFCis6MTBFMkIwMDAyNTI3OENDQ0Y3MkRENkJGMTRFQkM0M0NGODNBMzE4RjEwCis6MTBFMkMwMDAzOTk3ODRERDQ0RjkxMzZFQkU2NEEyN0MxRkREOTQ3MjFECis6MTBFMkQwMDA3OEU1NjFERkU5Rjc2OTFGMUQ5NThBN0QzM0VGNTIzQ0QwCis6MTBFMkUwMDBCNUZCNTdEMUQzMzdEMTkxOUFCRkUyREI4MTdENzQxNzRCCis6MTBFMkYwMDBDOThERTU4NTkxNzExRjczNTZDMUZGQkY5MEY4ODJFNDA3Cis6MTBFMzAwMDBBRjAzRUJBNTVFQzE0NzNEN0EzOTMzRUNDRTcxNzRFRkI0Cis6MTBFMzEwMDBBOEQ3OUU0RTdBNDU5RjFDNzJFOENCNTc0NkE2MjdBMEU5Cis6MTBFMzIwMDBEQzIzRUQ3NjhBMUY3QjY0M0QzNTRFMDUyRjc3MEUwMjg4Cis6MTBFMzMwMDA1RDBGOEQ4NzNENzZDM0JBOENENENFMjA3REM1QjNERTBDCis6MTBFMzQwMDAxQzBGN0I2MUVBREE0MTk0NTZEODFDRjE5MDIzMTU2QkJGCis6MTBFMzUwMDA4REE1OTA4RjFGREU5MzEwM0YwRUY2RjlGNUU2Qjg1OUE0Cis6MTBFMzYwMDBCQ0VCMEZFRjI4NDg2NUEzOTAyRkExRjRENEU2QjBGOUQ5Cis6MTBFMzcwMDBDMTc2NkU5NTZFMkIxNDdBNjhGRDlERUY5MTVDM0I2N0JDCis6MTBFMzgwMDA3ODNENkEzRUY2RERGQUU3QTI3MEY1QTY3NkZEREI2MzFFCis6MTBFMzkwMDAxQzVDMjVCOTNCQzZGMzUwMjFGOTUxNzdFQzcxMDA2RTM2Cis6MTBFM0EwMDA4RTFEQTM2MUE3RkUzOTZDNjg4MzAzRkE0M0NERkE5MkYwCis6MTBFM0IwMDAwNEQ4QzVFQUZFNzZGNDMxQzg3RENGNUE3MzNDRjRDRjU5Cis6MTBFM0MwMDBDRkRFRTE3MjUxMjNCOTQ2N0FDM0E3MzY0NkU3QTU0RjlGCis6MTBFM0QwMDA3NzQ3RjhFMEJGRkY1NDYzNkVGODc3OTYxOTVGMTlFRDQxCis6MTBFM0UwMDBEMEM5RDlGNjlCMzE4RkJEMDk5RTlGMTcxNjYyN0NERjdECis6MTBFM0YwMDA5RTQ0OENFRkYyRDJGRDRDQ0ZEQUUxRDFGREQ5NTE1NERECis6MTBFNDAwMDBCQTdDOUJEMEVCRjYyODNCQUVCNEY3NDI5RjQ3MUVGQThFCis6MTBFNDEwMDAzQzFCMjFGNDc5RTRBMUNGMjM4NTNFOEZFRkM3QTQxREQ3Cis6MTBFNDIwMDA3RjU4NEI0RjJFQ0VBM0RFNjkyQ0JCOTFFNEFFM0QxQjMzCis6MTBFNDMwMDBGQUZBMkEyRERDNDU3QUE2RTY0QTgwN0Q4Q0JEMTMyM0E0Cis6MTBFNDQwMDBFNDZEMDg3RTU1M0FBOTg3RUI1QzQxNzQzRkU1OTI5NUVGCis6MTBFNDUwMDAwNURGMzM5QkNBNjI3NEY5RTlENjI0NURGRDEyNDc5QTQxCis6MTBFNDYwMDBBRUZDREFDNDkxQkFGMkVCOUNCOUJBRkM3N0IyQzdFQjU2Cis6MTBFNDcwMDBFQURGRTA5QUFBQ0I3Rjc3REM3NUJBRkFCM0REQjM3NTMxCis6MTBFNDgwMDBGOUI5MzMxN0U4RUFDRjJCQUREMDk1REYzMjdGOTlBRURCCis6MTBFNDkwMDA3QzgxNjc4NTJFN0Y2QkY1MURCQUZBQjczNUFFRDU5NUIxCis6MTBFNEEwMDBCQjk5QzMwNEI5RDc4RTczMTY4N0ZCQ0IzODY3RjE3NDU5Cis6MTBFNEIwMDBENTFCQzNFREMxNzgyRDlBNkU2OEVDQ0Y0RTdGNUVFQTE2Cis6MTBFNEMwMDA0MzEzQzdCQTNGMDM3REE0MTgwNDFERjJENDBEMTVFMjBGCis6MTBFNEQwMDBCMjk0MkJDOUNDQUY4OTczNkU0NzEyRTgyNkI0NUU2ODNDCis6MTBFNEUwMDA3OTUxQzQ5MThCNEU4RUMzMjUwNzYzNkYzNTcxM0U1MkFGCis6MTBFNEYwMDAzNEY2NDg3RTA2Q0YzRjMzNjY4MUM4NEYzQ0YyNkMzQTEzCis6MTBFNTAwMDBDRjFGM0NCOEY1NTYxM0U3MUY0NUQ3MUNCOTg4RjJEMTg5Cis6MTBFNTEwMDA2M0NCNDU3RTJFMjM5NUUzQzg5OEJGMkRGNEYyNzUxNDg2Cis6MTBFNTIwMDA0RDQ5REZFNDEyNzY5MjdFRUY2OUFBMTQ3MEMwRkQ0NjcxCis6MTBFNTMwMDBDMDAxQTk5RkQzMjdEMjIzOUMzRTkxQkVDQUU5QjNDQThBCis6MTBFNTQwMDBDQ0Q4NzE0RTlGNDg0RkYwRjMyNkJFRkY4NjlGMzc5MTdGCis6MTBFNTUwMDBCRUNFQ0Y5QjQ4REZFNEU3NERBNDFERkNCQzg5RjQ3NzE5Cis6MTBFNTYwMDBDREYzMjk3REE3RDk0M0VEREU2REFFQTZGNEJERTY0NjE5Cis6MTBFNTcwMDBGQUZFQzdFNjI2NEEzRjY4RjZEMkY3QzQzMUNBQUVFMEQzCis6MTBFNTgwMDAyN0ZCOEJGMjMzMzVDMEJGMDdGQkRDMjFGM0Q5NjAzRjlCCis6MTBFNTkwMDBBQ0YyMTMyQUJGNjA0QjIzRUI4Q0MwM0VFRDM0QzU3QzNDCis6MTBFNUEwMDA2QzBERjhGQjA2RTZCMzI2RjY3MTkwMUVCNjM5RDE5REM4Cis6MTBFNUIwMDAzMTg2QzYxRkVBMjA3RjhGRkMzRTREOUI5QjAyRDdERjMyCis6MTBFNUMwMDBBREEzM0QyM0M3NzA3Q0NGQ0JBQjVDMUZDREY5Qzc5NDA3Cis6MTBFNUQwMDBDQjhENjZEMENCRUZFNTNERDVEMEZFMkY0QjNBODkxQkQ2Cis6MTBFNUUwMDBFQjFFOEQ3NjkzQURFMjFFREU2NEFCQjg2NzM3RDlENEVGCis6MTBFNUYwMDBEOTAyN0VENEYyMjU3M0UyMUVDRDJCOTExNkUyNEYyRDY3Cis6MTBFNjAwMDBGNzk4N0NCMDUzNkE1RjMwQ0E0RjhBNjM5NDZGRjlCMjRGCis6MTBFNjEwMDA4M0VFRTU0RDc2QjgxMjQ5REVDODdDOUZGRjFDN0Y0MTMyCis6MTBFNjIwMDBGNzY1OTQzRjVCREQ5MzI5RkVBMjczM0FGNDgwNDk3NjQ3Cis6MTBFNjMwMDA4QjMzMkNDNEZGMEVCRkY1MkI5MUVGQUFGOTMwOENBN0JBCis6MTBFNjQwMDBGQ0U0QkJCRTY0N0VDM0U4ODAzRjdDQjJCNTIzMEQ3NjlDCis6MTBFNjUwMDA4MjQ5QUJBREFFRTBGQjNGQ0FFRkFEN0REMTYxODQzQ0ZBCis6MTBFNjYwMDA1MUY3N0NENDM4NkFCRTkxMjZERTVGNUVFMDFFQ0Y2NDJGCis6MTBFNjcwMDA0NzVCMkVFRTM1QjRENERCQTlCRjA0RkVERDkyNDdGNTJGCis6MTBFNjgwMDBEQzQ2NkFENzk2MEIzQkYwQTQzQUJCMEJGNjZERTU2RjAwCis6MTBFNjkwMDA0RjkwRUJFNkY1Njg5REM1NUY3OEU4QkVDMTI0NzlERjUxCis6MTBFNkEwMDAwMEZENTg0NUI5MTdGRDRDOEFGMzI3OTlCMEZFNDY4QkZCCis6MTBFNkIwMDAwQkY2RDA0NzM1REUzRTJGRTBGRjQ3RkQ4OEEwRkQ4QkVGCis6MTBFNkMwMDA3OUEyREZDQ0JGRjBGOTQyNkY3N0JCMDlCRTczRDVGOUYxCis6MTBFNkQwMDBDRDI5RjM1MjNFMzNFQjM0QjI1RjE5NjVGRUI3QTMzRDRCCis6MTBFNkUwMDBDQjgxRjdEMjMwQzc5RjIyNjg5RjY3QTRDMENFMzE1QjMxCis6MTBFNkYwMDBFQUVENUY0MzJGQUJGRjdCRThDNTJERjAzRDk0OTEzREU0Cis6MTBFNzAwMDAyRDk0NkUxNDVFMTQ5RTA3QTIyMzg1RjdBMEZCNUE4NEY1Cis6MTBFNzEwMDBFN0JFRkI1N0IyOUY1MEZBMUE4OEFFMTQzRDREQjYwQUI5Cis6MTBFNzIwMDBCQzAzQUZCODQ3QTNFODQ4RkJBMjZEMDdBREEzQ0U0QTMwCis6MTBFNzMwMDA3MjRFRDE1MTI4MUQ1QzQ5NDc4MjJFNUJCRTY3QTVGRUYzCis6MTBFNzQwMDBBRUE0QTMwMEZFMDE4RjdGOUU4RTNBOEM5MEJCRkYyODYzCis6MTBFNzUwMDBGRERDREVDMzY2NDRGM0EyN0JBRkYxNUM4NkRDQThCOEM3Cis6MTBFNzYwMDBFNDNDOEU3QzI1OUIzQTAzMjRBNUNBMUY0MEY5RTAyQjhDCis6MTBFNzcwMDBDQjQzRTk0QkQ1N0Y3MTgwRkUzQzVGRjQ5OEEzODNFOERGCis6MTBFNzgwMDA3MjkyOTQ4MTdGMThBMEZFNkJGMjVFRkM2QjM2NzVERjhGCis6MTBFNzkwMDBDMzZEQ0ZFNTc0MzA1REYyRTE1NTI1ODJCRTY2QTYxOUUyCis6MTBFN0EwMDBDOTlGMzEzRDY3MjlFOUY3Q0MyRUY0NjMyN0ZGODdFQzM5Cis6MTBFN0IwMDA2REQyQkY3RUJENkMzN0UzNzJFOTNBOEMzMzIzNEVBRjI2Cis6MTBFN0MwMDA3RjVGMkZGNUVFOTkyMUZFRjZFQjczQUUyNTNERkNGQTQ3Cis6MTBFN0QwMDAxMDNERkJCRDMxNTI4RjRFNjM2OUUyN0NCRDg5RjRERjkxCis6MTBFN0UwMDA2MkI5MUY5MzI1QkUzMzlDNDY1NkM0RTE1RUMyM0MyNkU3Cis6MTBFN0YwMDAwODgxNTdDRjVCRENFOEVGNUFFNkE1RkM3NUNDNDdFOTBBCis6MTBFODAwMDA3Nzk4OUZGNDgwMUJCOEMwNDBGRUJCOENEMUZERDFBMzhDCis6MTBFODEwMDAxMTM3OTYyREU3RkQ0RENGOUY5RTg5RUY3NUQ2OUU1NEZCCis6MTBFODIwMDA4QjAxQjcwMzNEOUY0MTNFMzQxODNEN0Y4NjlFNzkyRTc0Cis6MTBFODMwMDBDNTMzMDJFN0UzMjNDNTRFRDJDMzhFNTgzMzQ4MkZDNEY1Cis6MTBFODQwMDA3RTMyMDdEOTJCN0ZDREU1NjgyNjk3NzM0N0I5OUM0NTYzCis6MTBFODUwMDA3QThDQ0JEOTRDMkVFRjdFQzVFNTJDRjJENzY3QUY2NTBECis6MTBFODYwMDA2ODM3QzNBOUJGREZBM0RBN0ZDNzMxOUQ5OTA2MEQyQzk2Cis6MTBFODcwMDBDN0JFMzNGQTg1QTFCMDYzQkQxNjMzQTIxODc4N0IyRENECis6MTBFODgwMDA2NjZDMzFENkZCNUE0QzgyNDFBNDYxMTY0QTQ3M0Q5RkMzCis6MTBFODkwMDBEOTlGREVBQUU4MzUzMERFMEMxQTJGMTRCRTBBOUVBMURECis6MTBFOEEwMDA3MDU0RjBGRDI3RTAzOTY4NkNFMTk1RjBCQzBDRkQxRTVBCis6MTBFOEIwMDBGNjUzRUJEQjUxODlFOUYwMzNDQTc4QkEwOEMxMDdFQkFDCis6MTBFOEMwMDA5RjFGOTU4MDc1RDQ1OTA1NUMyNjM1NERBNDc0NzJEMzZECis6MTBFOEQwMDA3ODY2Q0EyNzNGOTMxN0YwRkQwQzRCODBDMTM5QzRDRTMwCis6MTBFOEUwMDBDNjRDRDMyOEZGM0Q0OTVCRDkwOTlFRTE5OEM3RDkzQzY2Cis6MTBFOEYwMDA3RjE2RDdDOEQ4MjdEQjVCQTI3MDNGRjNEQzMzNDYxN0ZGCis6MTBFOTAwMDBDRTM1NzU0NkU3MjYxN0VDRTRBRjE5NDU1Q0QwRTVBMzk0Cis6MTBFOTEwMDBBOUYwNkZCMjVERkRERjk3QUVCMzJBRjg3OTA5QUUzRjdCCis6MTBFOTIwMDBCQkM2NERGQjhEQzEzQjFCMUZEMDZCODY4Njg5N0JDNjRBCis6MTBFOTMwMDBFNDVFQzgxQjU4Q0YxOTEzMkVGOENDRDAzMEMxMUYxNTc4Cis6MTBFOTQwMDBCRTc4M0IyMTc3NzkzRjYzMzg1RjRCQkUzRjlDQ0UzNTI1Cis6MTBFOTUwMDAwNUMzREM0NTU4MEYzRjJGNTA1QzUxNkY3NjA0RDkyQjBGCis6MTBFOTYwMDA3RTIzRTMxMjI3RkJBRkE2QjhCQzk5MzhCN0YzRUZDNkY2Cis6MTBFOTcwMDBGMEE4OUREOEY3QkY5MTcxODlCRjE4RTRCOTE2RURBRjIzCis6MTBFOTgwMDA0RENCNEIwNDNDQTYzMEUxNTdCOUNFNkE3NkY5Rjk5Q0UxCis6MTBFOTkwMDBBRTFCMkJGN0UxNjgzNjVBQzZGNUU4Q0UxRkNBNEVEMjM5Cis6MTBFOUEwMDAxQjY3MjQzOTM0OTk2NTNEMDQzQjQxRjEwOTMzRDkwOThBCis6MTBFOUIwMDBGQUVFQkIyNTBBQkY2OEVGODk4QjQ2RjA5NTkyNDg4RDI5Cis6MTBFOUMwMDAwRDRBMEJDNEU3ODQyNTFBOTgzMzQ4NkZCNzM5QzM5OUE5Cis6MTBFOUQwMDAzMzY4N0Y0NDY0QzdFQUYyOTFBRTIxQkFGQUQxRTNEMjM4Cis6MTBFOUUwMDA3NUU1MzFFRUFCNzRFNTgzNjZFNkU5RjI4MzRCMjdFODIzCis6MTBFOUYwMDBFQTI3Q0M5RkE2Q0IyNzc5QUVEN0Q1NEZBRTlFQTNDQjI3Cis6MTBFQTAwMDAyQkJFOTcyQzNFQjE5NEM2ODVCQUY2QzM5QTE2RTlFQTk2Cis6MTBFQTEwMDBBNzc5NkI3NEU1MEEwRkNDRUJFRUM4OEUwNzVGMTQ3RjA1Cis6MTBFQTIwMDAxOTFCNTdFQUVBRkQzNDRBQzQ5QkNDQjQyRjk5ODVGREUzCis6MTBFQTMwMDAzRUJDRjUwN0ZBNzkxOTVGRDcyODdFRDQyOUY4QUQ5NzNGCis6MTBFQTQwMDBGRjAzM0EyQTQ5RDRGM0RGRTkwRUJENUQyM0I5RDFBNDBGCis6MTBFQTUwMDBDQjZGRjg0N0YxRUNCOTRBODdFNzUwNzg3MEJDQkJGQzQ0Cis6MTBFQTYwMDBBOENGRTVCNzk3RTc0QjdFNUQ2OTgyN0UwMUZGNDVGMDUxCis6MTBFQTcwMDBGQ0UxQkYwODVFMkZGQzE3QzE3OUY4MkY4MkVCQzM3RjQyCis6MTBFQTgwMDAxMTVDMEVGRjQ1NzA3OUZFMDkzRDlFMEIzQkY0NzgxRTJDCis6MTBFQTkwMDBGQjlFMUVDRjhBRkUwNkMyQzdGODRFM0QxRDg0RTI2MzcwCis6MTBFQUEwMDBFMkE3MjE3NDIxRjEzMDlGRkZEMzFGMUVFODI4QzJFOTlECis6MTBFQUIwMDA3RjdBMjMyM0ZCREMzN0UxRTU4NTEwQkM0QzFBRTk2OTNBCis6MTBFQUMwMDBDNzdFOUQzRkU4NjJBQTA1NzhFQUYxOENDMDc5RjIzM0VGCis6MTBFQUQwMDA2OTI3MDlCREM3RTlFNUVBMDBDNTIxRkNDMDQ4RjEzNzRGCis6MTBFQUUwMDAyNzBEQUQxQUY4QjIzRkM1NzM2QzJDQUY3RjdCNEUyMzU4Cis6MTBFQUYwMDBEMTRGMjIyQkREQkY4NENGQTdGQzNGQzJDODhGNTMzRTJFCis6MTBFQjAwMDA0Q0M0RUJCMjlDNEU4QTczNTBGQ0FFM0M1OURDMjM3QTY5Cis6MTBFQjEwMDA2M0FDM0NCRkI5QzQ3REEyOEVCMTQyOUY4RDc0MzlFODBECis6MTBFQjIwMDBERTcxNDU4RTg4RTNFMEM3QUVENEYyNTFBMDlGRDc2RDY5Cis6MTBFQjMwMDAyMzQwMEY1Qjg0REZBNDEzRjFDMjcxODE3ODYxRTg5QkVECis6MTBFQjQwMDBEMEVGNTJBNDdFRDVGMjA3QUIxNUVCMThCMThERTlFNEY2Cis6MTBFQjUwMDBFNDQ4OUY1NTc3RUZGNUVBQkQwRTVEN0U1NDVCQTJBRUFCCis6MTBFQjYwMDBGRTM1ODc5Q0JBRjI1QzdGQjZBRTNDRkY4NDRCOTcyRjk0Cis6MTBFQjcwMDBFQzE4QTdBQjNGRjYzREI3MkUzRkJFNzNBNkFFRkVDNDYyCis6MTBFQjgwMDA0RjRCNzVGOTY0RDZGMzMwRTAzQjRDMTNFNzdEMkJFNzMwCis6MTBFQjkwMDA0Qjc0MEZDQzI5RTI4MUNBRUY4RTExNzFBMEQyMEVBMDY2Cis6MTBFQkEwMDBGNDY5NzUxRkRBMjNFOTJFNTQ0RjFGNjYxMTdBNkE0QkY4Cis6MTBFQkIwMDAxMjEzRTczMEFCM0M2RjMxQkRCRUVFOTFGNzk5OTU5RUQ1Cis6MTBFQkMwMDBDQUJDRkFGQkNDRUExRTczOUY1RTJGRjU3NkE1MUYwNzIxCis6MTBFQkQwMDBERDYzNzYwN0RGNjMyRTk3RjFEQkExRjIyRjZFOUNCMDI5Cis6MTBFQkUwMDBFRjg1Q0U3Rjk4NDVBQ0I3RTUwRTBCQzU4REE4Nzk4NTJFCis6MTBFQkYwMDBDRTY3Nzk5RUEwREJEREQ2RkVFMzc3RDJDNzY5RDQ3RkVFCis6MTBFQzAwMDA1MTZFRTk5MDcxQkNERTYzNjY5NzhGRUMyODU3OENFN0Y0Cis6MTBFQzEwMDBFQUY0RTI1Q0Y5MjM4QkVCMkVFNzM3OEY1NzdFOEQ1OEIxCis6MTBFQzIwMDA0Rjk5QzE3MEZCRUMxQ0JBMkYzNkZGOTc0MUUzRTc4RDdCCis6MTBFQzMwMDAxM0Y0MUQzRjQxRUI3NzdERTVEMUUyM0UxNzhCQjYzOEVCCis6MTBFQzQwMDA0MUJGMDM4RjI3RTA5OTY4NjFFQjI4Q0U0OERFRkJCRjA4Cis6MTBFQzUwMDA2RDUzREI3RDIzNzg1MTk5QTVENTRDQzYwQkU2MzM4M0U0Cis6MTBFQzYwMDAxRTY2NERFM0ZBNTQyRUVDODIyRjNFNjJFN0ZBQzY2MzJECis6MTBFQzcwMDA0RDI2QjJGMzhDMUYzN0FDOEM2QjYyN0Q3MTFDQzNGOEQwCis6MTBFQzgwMDA3OTAzRjQwMTlEMDVFNzk0MjdDNzFCNjk5Qzg1RTNDNEJDCis6MTBFQzkwMDBGQTRBOEM5N0ZCRUVERjkzRkY4MjMxQzlCRjE5REQ4N0ZCCis6MTBFQ0EwMDBFOTg3REU4ODBFRDUzQUZFNTVGN0YxMTVERDg2QzI0OUIzCis6MTBFQ0IwMDA5RDJGOTk5NDNCOTk3MjVFMEE3RTZBM0YyOEY4QTk3ODQ1Cis6MTBFQ0MwMDAwOEU3MEE3M0U5NEUzQkM1NTVDQ0M0M0QzMjg1QkY5NzcyCis6MTBFQ0QwMDBDNzBCN0VCNDA5RjAyODE0RjVDMDhGMDZBQTU3NjJDQzgyCis6MTBFQ0UwMDA4OTg2M0RCQzk3MzlBMzFENUY2M0VGRkQxN0M2MjkxMEM4Cis6MTBFQ0YwMDBGQzA3OEFBRjFBODgzRjVDQzExNzA2ODhCNzFBODgzRTlFCis6MTBFRDAwMDBFOUVGMUY4OEJCMEFFMjBGRTI1RThGQzQ4NzJGRDM0MDcyCis6MTBFRDEwMDA3RUY0QkIyM0Y1RkJGODg1NzEwMkJFMUVCOThGQjk3QzZBCis6MTBFRDIwMDBCNUU3RUFGOTA0ODNGREJFNjVCRDUxRjIwOTIxNTdBMTlCCis6MTBFRDMwMDA2RkUwRkJFMkY1NjZEMjM3MTgyQkREOEEzOEEyOEZCNjdBCis6MTBFRDQwMDA5OEU5N0VFQjY0Qjc3Mzg2NEJGOEU3NDlFRjIwQkYxNzZECis6MTBFRDUwMDA5RjVBODU1NzJGNEZCOTdDREYwOTNENzgwQTczNkQ4MDI0Cis6MTBFRDYwMDAzRkEzNzJBM0JFN0NBOTdEQzY2NzkwRTc4QjQzQ0VBNTY3Cis6MTBFRDcwMDA0QkU1Nzk3NTY5QzhCOUY0QTk3MTUyMUVCQjk4OEJGNDNCCis6MTBFRDgwMDAyNEU5RTdBRjk2NzVGQUU4Qzg5NzExMkRFRDJFQjQzRjQ4Cis6MTBFRDkwMDA3OTRBRjdDMjE0NUM5Q0YwRDdFNDA3RjIxQzdFRTFEOUYzCis6MTBFREEwMDA5MEQzRUI0Q0ZEREVEN0VCODNERjAwRjcxMUNFRTIzRUQ0Cis6MTBFREIwMDA4MjEzRkJCRDk3RTJBRDdBMEZEODg0OUY1MkY5ODM2NDJBCis6MTBFREMwMDBGREIzREU4QjU0OEVGQUU4RUQ1QzZFQzc2OEU4MjE3REZBCis6MTBFREQwMDBGRUEzMTAzRjU0QUZERDEwMzUwRUZERUQzMzUzN0ZFQTM3Cis6MTBFREUwMDBCRTQ1Q0Q1RjdEQTMxRDQxRkU2NDRGQTc1MTc3QkZFNUIyCis6MTBFREYwMDA4QUY5QUY3RDhFRUU1RkRDMURFMzc5MDc3Q0ZDOENDOTYwCis6MTBFRTAwMDA2NTA1RkVFRUIxMUY4OTQ3OUNGQzJDNjlCNzA5OUQ2RjEzCis6MTBFRTEwMDA5RkRFNTlBNDA5M0ZBQzU3QzRDREY2Q0VENEU4MUUwMEZFCis6MTBFRTIwMDBFNzgzMENGQjQ2REQxQjk4Q0RGQzcxNDg5NTNGQzZCM0NDCis6MTBFRTMwMDA3MTNDQzE1OUY5NjMyQUZDRTM2OTlFRjM1QTk2OUFDMzVGCis6MTBFRTQwMDA3OTk1Q0U4N0Q3OTQ4NDNCMDM3RTlBQ0UxNDcxRUY2NzcxCis6MTBFRTUwMDAyMDdGQ0REQzRCQjlENERGNEQ5NzI2NTIzRjE3QzdBNTk1Cis6MTBFRTYwMDAwOUJENkJERDdEMkI0MDQ3NTdFRDY1NjZBQ0IzMzNFNEUwCis6MTBFRTcwMDBERUJCNEEyQjI1QkZGMThFNTc3QzVBREUyNzVBQUIxMUQ5Cis6MTBFRTgwMDA5REFGRDQ5OEJBNUY0NDdDNUFFNTJGQjZDQTdDODlDODM2Cis6MTBFRTkwMDBBRjVBMkZGMjlENjZGMUNFQ0MxRTY5NkZDMDNBOTE2MkQ3Cis6MTBFRUEwMDAzRDM4MTdFRjkzRjYwOEFDMDMyOUQ2ODFFRkUwNEJDODQ1Cis6MTBFRUIwMDA4MzJGMjEwRkJFODQzQ0Y4MTI1MkYwMjU3QzVGQzQ0QTk4Cis6MTBFRUMwMDA1MzczOERDMkFGNTQxQ0I0NkZFMDU3MkEwRUQyN0JFMDRGCis6MTBFRUQwMDA1NzBBQ0VDM0FGMTQ1QzFGN0VBNUUwNzJGODk1ODJDQkIzCis6MTBFRUUwMDBFMTU3MEFDRUMzQUYxNDVDMUY3RUE1RTAzQzFCNzc1REUzCis6MTBFRUYwMDAyMDBGM0VFNjlFQURDQkNGRTVGQTc3NzFEMEJFODU1RkExCis6MTBFRjAwMDAyOUI4N0ZGODk1NzRGRDc5NTZFOERBREZDQTlBNzRFRDZFCis6MTBFRjEwMDBFMTU3MEFBRTdGN0I5M0E2RjMzQkREMkVERjAzQThEQzJGCis6MTBFRjIwMDAzNjg4RThFM0E1RDFBNUFFRjE3Q0JGRkUzOUUyNkZERkZDCis6MTBFRjMwMDAzM0UzMUM2MDZDNUYwNkJBNUQ1OTFGRUUxMjc4NkU5RDVDCis6MTBFRjQwMDAyOUYwNkU2MDAyQ0YzRDBCMDhDRjZCMkMyMjVGMjJFRUMyCis6MTBFRjUwMDAxRkY3RTdCRjI5MzYwQkZGMEQ1MkY4NkY5MEMyN0Y4MzcyCis6MTBFRjYwMDAxNEZFOUJFMkUxQzI3RjgzMTRGRTFCN0M4N0ZGMDYyOTBGCis6MTBFRjcwMDBGQzM3NDhFMUJGNDEwQUZGMEQ1MkY4NkY5MEMyN0Y4MzEyCis6MTBFRjgwMDA3NkYwREYyMDg1RkYwNkRGRTFCRjQxMEFGRjBEQkU5RjVGCis6MTBFRjkwMDA4NDFGMjlFOEREMENFOEU5OTlCQTczMURBNzQzRERCOUEwCis6MTBFRkEwMDBDRUExQ0I0MzRGMEZBRTBGM0QzREI4MUM3QTdBNzAzOURFCis6MTBFRkIwMDBGNEY0RTAzQ0Y0RjRFMEZBRDBEMzgzRjNBQkM3Mzk4OTNFCis6MTBFRkMwMDA1RjQyNUYwRjZFMDc3RDNEMzgzRkFBRDU3QjBDQjZBMzJECis6MTBFRkQwMDAxQkI2OUY3RjE1Njk2N0E0RjY5OEM2NTlDMThBMTcwRTlDCis6MTBFRkUwMDA5NEMxQ0ZENjY5RDM1MjYzMzhBNzM0NkIyRjk2MTVGM0VCCis6MTBFRkYwMDBCQzQ3REVFMzFCQ0Q3QTBDQzAzN0Y5RDkzOURFM0M3RTQ1Cis6MTBGMDAwMDA0NkY3OEU0NzdEOTU0NEU1Q0FBRjRCN0YxQ0VGQjkwN0E1Cis6MTBGMDEwMDAxOEU5RkRDNzY0QkNBNzZBRUY2MjBFMjM1MjU1M0Y5MDAyCis6MTBGMDIwMDBFRkJGNUVFOEY4QUExRUYxQ0JBMDc5RjA4MzYxMkVFRTY3Cis6MTBGMDMwMDA5OUU0QUVCMUU3RTFCRUZDMUU4MzI2RUU5QkRFMjVFRTMxCis6MTBGMDQwMDBGQjg2RDJENTZFQzk5N0Y2MThGNjFGMDlDN0ZEQTEwQTJGCis6MTBGMDUwMDBDRDg1Mzg4NjJDMTMzQjYxQ0UwMzlDMUFGM0EwMUZEQ0IwCis6MTBGMDYwMDAzNzNFNDZBRUFCNzEwMkVFMUZBOTc5MkIzQjIwRTcxMzZBCis6MTBGMDcwMDAxNEJGNTZENEMzMkM1NTdDOUM0OTVGMzBDQjYyRjA3N0NCCis6MTBGMDgwMDA4QkQwMEJEMDBFRTdDNUFCQkQ5QTdCNjcxMDdEM0YzNEFDCis6MTBGMDkwMDA1RUM4Mzc4Rjc3QzU4NDJBRkVGREVBN0Q4RDEzMTAxNzcxCis6MTBGMEEwMDAzNzJCNUNCNEZCRjlFMzUxMDRDNzFCRDc2OTNCMTE3RkQ1Cis6MTBGMEIwMDA1OEI0OEZCOTExRUZFQTkzRjNCRTdBOUZDMzUyNDVFMzc4Cis6MTBGMEMwMDAzQTI4OUU0RUY1NUJCMTNEOTVFMkZGMkE1ODY3MzFFMjQyCis6MTBGMEQwMDAyQjU4ODFDNkUwMUY1NTcwRTNFQjdCMTVFQkNCRTI1QjUxCis6MTBGMEUwMDBDNTRDRkFBNzg4Q0IwOTk3NzEzOTJBMUUyNzJDQTZCNERDCis6MTBGMEYwMDAwQTcyNEJDNUU1NEMyQTg4MjlDMUJEMzhENkNFNUMwOEJBCis6MTBGMTAwMDAwM0JFQTFBMDYyRkQ2MERFQkZDN0U3NzZFMTVFRDFBNEM5Cis6MTBGMTEwMDAyRjFBOEY1MTdFNTcyOUU1ODkwQ0M2RDAzODI0RDc0NjNGCis6MTBGMTIwMDA3ODM1N0E1RkUzNDZFRjBFNDM5QzEzRjFCQTZCQ0RGMTZECis6MTBGMTMwMDBBOEJGOEZCOUEwRUU3MDUxNDM3MUE3NkE3RTM5QUNDM0U2Cis6MTBGMTQwMDA2MEQzODA3Nzc2NzQ1MDEwMUQ3MTBFNzAxM0YwOUVFQkIzCis6MTBGMTUwMDAzMkQzRkIxQkIzNEQwRTMzRjg0NkE4MUNCRkYyREU2MjYwCis6MTBGMTYwMDA4ODlFMTA3MkJGQTQ2NUNEN0JBOUM2NzREQzJGMzFCODEwCis6MTBGMTcwMDBGQ0UwNUJDRjQ1OTBCRUEwRjQ5RDBBNzlERkVDRTJCQURCCis6MTBGMTgwMDA2MzgzNkZFMUU1MTVGQjg1N0VFMEQ5QTYxMUZGNTNGNzk4Cis6MTBGMTkwMDA0REVBMzM3Q0E5MDZFODBCNDM3NjhDOEUzNTBBRjkwRkNECis6MTBGMUEwMDBCRTc4QzZGQkVDQ0REOEEyMTVFQjhGNTE1QzQ0QzVGQUY2Cis6MTBGMUIwMDBDMjY4MTExNzI1RkMxMDU1MTI0RTU1RjI1RTExQ0I3MTI1Cis6MTBGMUMwMDBDNDQzQ0ZGQzkwRjMxREY3MDhCQTk3MTg0RDcxODVBRDc1Cis6MTBGMUQwMDA0MjlGNTNGNjE2QTUwRkFBRjc2MzJBREVDODNGMEVCQzVFCis6MTBGMUUwMDA1NzNDMkFERjY1RDk1ODQxRjE1N0ExRjc3QzZBQTVCRTgzCis6MTBGMUYwMDBCNzZDOUQ5OUVFMEYyRDBCRDEwNzZCRTU3REExREExMDUxCis6MTBGMjAwMDA3REYwRENGODEwN0Q1MDlFNUZENDdEREU4QTM3OEVDRTk3Cis6MTBGMjEwMDAyMzdEQTVEMTRDN0VCOUIyQjU0MjdGNjFGQjk5MEZGMTM4Cis6MTBGMjIwMDAwQzY1NkJBNzFCRjA2RTQ4RDk3MzZFOTdENjBGOURCQzBCCis6MTBGMjMwMDAyNUY1OTg1OTlEMzY4MkVCOUM0QkM5OTRERTdDMjk4OTMzCis6MTBGMjQwMDBEMjVCMkU4OTdCOTQ4ODdEMDExRDc0QkVDMDQ4OEY3RTYxCis6MTBGMjUwMDA1QkVBMkRGMzcwQUYxMkYxODhERTMwNzk3RjkyOTFERTk4Cis6MTBGMjYwMDA5NENCMUMyNUUwMUY1N0I5QjVBMzUwRkI2Njk5M0RFQjI1Cis6MTBGMjcwMDA3MTZGNzNENjBFNDZGMTQ3Mzc0MEJGNDFGQzE3RjQxRDNFCis6MTBGMjgwMDBEOEREMEJEMjRBMjgwRTYzQTY0NkYxMkMzNzE0QUM5MDc5Cis6MTBGMjkwMDBGNENERTk5RDgxREVCRDkyN0U0QjI5REYyNzE3MjQ5REE5Cis6MTBGMkEwMDA3QkJDNUQyNkMwRkQwNkFGNjZDMTNCN0MxRTc5OEU1NURBCis6MTBGMkIwMDA3NDFDNEFFRkU1MTFEMkZFNjQxN0Y2QTUzRUZCMTMyNjM3Cis6MTBGMkMwMDA4QjQ3NkRCQ0QxQjdFMTdFNkIzOTZDNzY0Mzk4NDAzQzdGCis6MTBGMkQwMDA4Nzc5NjQ4RTI4MUZGMTYyRjQ2REVCNzBBOEY5QkZCNEQyCis6MTBGMkUwMDA0Qjk0MTkwQzIyREU4OUVCNUJFMEFCQjdBRENFQjUyQ0FECis6MTBGMkYwMDAwQUUyMkY1RjRDOUMzNjYzNjI2MTAwRUY4QjQyRTJGNEJFCis6MTBGMzAwMDA1NkRFMzMzQ0UxRUJFMjQ1MkIzOTlDQjE0RkNBQTMzQkJGCis6MTBGMzEwMDBCRkM3Mjk5NDVEM0I4MUI5OEJGOTk5NzUwMTYzRUFGMTA3Cis6MTBGMzIwMDAxRTNGRUUwNTJFOTRGOUQ1MkY4RUZCRDM0NjNCQzE4N0E5Cis6MTBGMzMwMDBGMkQzMjdBNERFRTYyNUJFMkFGOEQ2QURFMDVCNDZGMDgwCis6MTBGMzQwMDAyQkNGRDQwOUM0QUYzQTY3MDAxRjExMzkzREYyMUQwMjFCCis6MTBGMzUwMDAyOTk3NDJFQzEwQUIyNzM4QzU3QTQzRUMxMTk1Mzk4MkQ2Cis6MTBGMzYwMDA5RjMzOTMzM0Y1NTY4QTBCNzY5MjNENEZDREZGNDNCM0NGCis6MTBGMzcwMDAzRTRFQjNDRjJGMzI0MUNBOTNFNjdGNEQ3Q0MzRkZDQUM2Cis6MTBGMzgwMDBGMERDODZGNTZEMzU4OEI4RjkyMUM2NTYyNkVENDJCNDE1Cis6MTBGMzkwMDBGRjE1RkY2MEYyMUQ4OTAwRkVCOTlFNDY3RTc0Q0QxMUY3Cis6MTBGM0EwMDA4QzdGQ0Y0NjREQzRBOTBGNjBCRjYxRDkzRDBGRUY4NjVBCis6MTBGM0IwMDBGREFFRDlDMjEwRTdGQTc4OTZBMEEzQzc3RjYwMjEzREMxCis6MTBGM0MwMDBCQ0NDRDI3MTBDRUY2NDI5MzhCRURGRjRFRjY2QjJDQjRGCis6MTBGM0QwMDAzM0ZGNzBCQ0ZGQjVCMEQxRTYwMjdGRkU2MjYyRTkyQTVFCis6MTBGM0UwMDBDQzNCMjJDNzQ1Rjg5OEMxQjcxOUZBM0Y5OTUyRkE3RDJDCis6MTBGM0YwMDBDMkQ3QTY1NzFFNDNEQ0ZFRjJGNjM0OEEyM0FEMzg5NEZBCis6MTBGNDAwMDBCQjAxRUY4OTdDMzFEMUYzQzMwOUYwRTNEQTFEMTZDOEUzCis6MTBGNDEwMDBGMTg2NzUzMTI0RDdDQTEzNjQ1QzI3RUIyMTNGOTU4MkFFCis6MTBGNDIwMDBGRjAzMTM4NEZERUFCQTIyNDFDN0RERjIzQzAyODYzOUFDCis6MTBGNDMwMDA1QjU3NEZERUUzMEVEOTI3Q0EyRTE4NkE1RjA4N0RDN0Q3Cis6MTBGNDQwMDA2MUEwRkRBM0VDMDhCMDFCNTg4MkVDOEFDQTJFNjFDRUU1Cis6MTBGNDUwMDBGRTcwMDFFNDY4OTk0NTFGN0ZBOEQyNTc5NURENEQ5RTQ3Cis6MTBGNDYwMDAwNzE3RjdDOUIxOUMxOTA5RDA5QjM3NkIwRUM4QjEyQTkxCis6MTBGNDcwMDBCQkYzOTZGMTNDNUY3NUMyOEMxQjk4NkM1NkFDNTNCQ0M5Cis6MTBGNDgwMDBERjcxOEY3OEJGNjMxMURGQUZFMDM3NjVGMjNFNTZENThECis6MTBGNDkwMDBCNkYxQjRERkFBN0MzQ0NEMUY3ODVGREVCQUY5NjhDQTRBCis6MTBGNEEwMDAwQkEwMUZCRjlCRTJGMkFCMUM2RTRCNkNEMEJFQUY2Q0NGCis6MTBGNEIwMDBENTc0NzFGRDJBN0Y2MDgyQjBDMzk1NzEzNTFERjBCQjk0Cis6MTBGNEMwMDA2RDc1OUEwNTZGRTg5NDcxRjUwMkY3RkI1RTlERTBENEM3Cis6MTBGNEQwMDBDNTU1RjM3QTc0QUY2MTU2M0EzQjJFREU0RkUyRjM0RUQ4Cis6MTBGNEUwMDAxM0UzRTUwNUY1QkZBODU1RkYzRTAxQUY0RjdBRDFDQjM5Cis6MTBGNEYwMDAxMzIyMDk3RjE1MEVCRUVFMzRBNDBFOUEyNzg3MDNDMThFCis6MTBGNTAwMDBBOUU3M0VERTlGOTNDNjIxN0M1NEZBN0Q2NjlDQkJDQjY3Cis6MTBGNTEwMDA3MDlGODJFNzE3M0E3QzY2OENCMzY4OUQ3ODJGQzRCM0RFCis6MTBGNTIwMDA0OThDRTNEOTE4NjMxOTA1QkRDOUU0QjBBNDAwN0UzODNECis6MTBGNTMwMDAyQ0M3RDFGQzg4MEY1NjcxQjgyMERFNEFDNTVEODZDMjQzCis6MTBGNTQwMDBBNzQyQ0VCN0FBMzU0NkFGOEZCNTZFMzYwMzFGMEIwNjVFCis6MTBGNTUwMDA3OEFGQTA0N0QyRURBMjc1NTMyOURFQkNDQUU0QTY3OEU1Cis6MTBGNTYwMDAwNjhGODRFRjQ3MkI2Q0Y3QzIyRkIwNjBDQjQzRTYzNDk1Cis6MTBGNTcwMDA5Q0IzMjcwOEZCNzM4RkRDNzdCM0QyRkRDM0U5NURBMDkyCis6MTBGNTgwMDAxNTM2MTdFNkI5QzBEMTRBRUJFQjgzRUY4MzFDMUUxQTgwCis6MTBGNTkwMDBERTlGMjkyNUY4NzJCQUYwRTI3RTVFRDUxNjNEM0UwMzY1Cis6MTBGNUEwMDBGMzExRjBBRERBNTI0MUZCNkQ4OUM5NjM3MTA0Q0Y2Mzg5Cis6MTBGNUIwMDBEQjJCQzM3MTBGNjUwMURGREY3OEVGODgzOTNDMTRERjg3Cis6MTBGNUMwMDBGNEYxODNCN0E0RDIzQUY5M0NFOTFFOTRDQjM5MDNFRkE2Cis6MTBGNUQwMDBGQzcwM0EyMTNBNTZGNEEyRTJCMkQ1NzhENjg5MjIyRUFFCis6MTBGNUUwMDBEMzNBRjE5QkY2QTU5QkY0OUExNjhFNUZEOEJCMDdEQTQ3Cis6MTBGNUYwMDA5NzE2MDQ3NkYxNzEyRDU1RTJGREI1RDA3REFBRjZBN0Q4Cis6MTBGNjAwMDBEQTk3NkE5RkFBRkRGQjk4QjlENDlGQTgwNUY4MEM5N0QyCis6MTBGNjEwMDBCNzhEQkZFQzA3NEUzM0U0N0MxNzRBQkM3MkI4QkUxQUY0Cis6MTBGNjIwMDAxQ0M3NzVDRDQ0ODFEN0IyNzRGRDdFNDc3RkU4Mzc2NTJFCis6MTBGNjMwMDBBMkQ4RUY2NUQzRkNDMzExNzdBOUVBQUI3MUNCNjI0NUMxCis6MTBGNjQwMDAzQkQwM0RFODJENjVBMkExQUZGRTRBQUFBRjhGNDdBOUU2Cis6MTBGNjUwMDBFQ0UzMTdGQkQ2Qzc4MzVGRUNENzQ4RUY1RDc5REZEMUNBCis6MTBGNjYwMDA5NDdGODMzRUZCQjREMDY3Q0ZENEVENkU0ODgyREU2OEQyCis6MTBGNjcwMDBGMkE1MDZCRjhCNTVFNTE3RkM2MTMxRDc3RkMwMkY5NkU5Cis6MTBGNjgwMDA0ODM5REQ5RUU3Qzk5OTE4QjQ3RkFCMUU3ODNBQ0IyMzgxCis6MTBGNjkwMDBGODhCMUZGQ0U1ODNBNzVGRkFGRDA0Njc0MDdFQUFGOTlCCis6MTBGNkEwMDAyRkRBRjg1QjczODUzRDE4NUU2MjdERjc2NkY3NTI5QzMyCis6MTBGNkIwMDA1REE1RERFMkM0RkRFNUNBNzUxNUM0NkY1OTIyM0Y1NzRCCis6MTBGNkMwMDA2ODAxN0M4N0QyNDFDNTNBOERERTE3QUI2QzFBRTMzM0YzCis6MTBGNkQwMDBGRTM3RjJFNUNBNERCM0U5NEQyNDg1MjdGNURFODk5MjYwCis6MTBGNkUwMDBBNzZBRkVERjk1RjM1RjI4RTk3OENFNDRCMUZGMTY1NjhFCis6MTBGNkYwMDBBNzU5OTZEMEJFNEZCMzU0ODJGRTY1Rjk4MjJBRkRGNzEyCis6MTBGNzAwMDAzRTNDRjVGOTk3NzMzNjYwN0YyMDZFODhDRTI3OUJDQzAwCis6MTBGNzEwMDBDMkNFQjcyRjkyRjRENTMzMkI5RjdGRjM2NjVFRUZGMzAzCis6MTBGNzIwMDBBRDNCNTJBMTlGQTg3OTJDOTVGNkJDQzVEMjJFQjc0NDBCCis6MTBGNzMwMDBFQUFEMUM0RjE1QzE3ODVBRkFCOEMwNTNFNTMzNkZGQ0Q3Cis6MTBGNzQwMDAwOUVGNzI5NUE1NEI3RTc2OUY4OEU3NUZENEI2OUZGMDUwCis6MTBGNzUwMDBCNjYwRTM2NjczMUFBRkI3NjI2MjlBRUU5RTRDNjUyMzk5Cis6MTBGNzYwMDAzRkU4NzI3ODJFRENCOEMzMEMzRUIwNjJBMjgwNUIyODAyCis6MTBGNzcwMDBCRDk3QzlGQkJFMEFBRTkwM0I1QTkwREY0MkQ1MDdGRjRBCis6MTBGNzgwMDBEQkNGQzc1OUJEQzIxNjA1RkJCNDFBRTcxMTQ5RDc5NTlGCis6MTBGNzkwMDA4RDMxQjExOEFGQjJCMUUyMjczODc3Mjg3RTFGQkFFRkFBCis6MTBGN0EwMDA0RUQ5QzQ3RTU4QzRGQkMzQkUzQzM1RDU0NTcxQ0RGMDlGCis6MTBGN0IwMDA2QkY1Mjc1NzM3NEJCQ0ZERDQyQ0RFNkY0QzhFNjg3QjI2Cis6MTBGN0MwMDAwMjcwNDg1RTFFRUUwMjdGQzhDQ0VDMjRCRjMxRTgxOUZGCis6MTBGN0QwMDBGM0I2MThDNDdCOEY5OTc1OUQxNzMwMEZBRTUyRDNGREM5Cis6MTBGN0UwMDAxNEE0Nzg2NzBBMkE3NjNDQ0ZFRjM0ODhGOEFCNzRBMzY4Cis6MTBGN0YwMDA0ODlGOTdGMEUxRTU3RTk0QjNCODRFN0E3N0FFRUZERDlGCis6MTBGODAwMDBBNDEwN0FCNUIwNUQxQkYxREU4RDI1OEVCOTVBOUMwMTJFCis6MTBGODEwMDBGQTU0RkQyOEZBNTRGNDNCRDBGQTdFMjFGOUM4MzdBREVBCis6MTBGODIwMDBFRjU0OUFCNDQ3NjRCQjUyMTFBNzUyN0VGRjA4MTdFQ0ZECis6MTBGODMwMDAzM0RGQjQ0RThCN0M3RkIwNkZCRDlDNThDN0M1RjZCMzI5Cis6MTBGODQwMDBERTRDNzE2RTE5NzhCRDVCNEFFMkZCNTk2RkU4M0FENTIwCis6MTBGODUwMDAzRTUxNzdEQUZCRkMwQkFEQzJCRjcwNEFFM0YyOEJCN0M3Cis6MTBGODYwMDAzQkI1QzI0NkY3QkZENEJBOTRGREZCREJDNjIxQkMzRDE1Cis6MTBGODcwMDAzMTU2REExMzNBMjNBMTQ3OTY4NUNCRkRFRjE3Nzk3Q0YxCis6MTBGODgwMDA5RjFERjQ1REM5N0RGNTVFOUJFMkNGQTcxQkE1NUM2NDVGCis6MTBGODkwMDA5REY3NjEzRkIzQTYwQzdBOUZFNDY0RUJBOTQ4QkM5NzNGCis6MTBGOEEwMDA3MjZBQUE5ODlGNkFCN0RBMkNFMjhDNTlBNEM1ODlGN0M0Cis6MTBGOEIwMDAwRkY5RjlFQTY0MTNGQzNFRUIxMkU4MUM3OTVCNTMwNjdFCis6MTBGOEMwMDBGMTg1REJCQzMxQzJGRTIwRjVGQjI1OTIwRjQ2QUNBRUM0Cis6MTBGOEQwMDBEODgwNzdCRTE3NkY0QjczNjg3QzlDQzU3NkQ3QzdEQjIzCis6MTBGOEUwMDBBOEZERDUyRUU4ODMxMTVCNjY1QkQyNDlFRjE1RTcwMEQyCis6MTBGOEYwMDBFNTI3NUFBREIxNTI4QTFCMDM5RkM0RkUzMkJDOTIwOTYwCis6MTBGOTAwMDBCOUIzNzQ5QjM4MDdDQzMyQjA4REYwMTMwRTZCMjk5REMwCis6MTBGOTEwMDA5MTA0M0VGMUIwNDY3MUU2NkNCQkZFMURBQkIxRjlBNTlBCis6MTBGOTIwMDBFN0U5RkMxN0YyMEVEQzZBNzM5QjNCMDE3QzlDRUIxQjQ2Cis6MTBGOTMwMDBCMDM3MkRCNjk3OTJERTVFMkZGOUU0QzkyRDVERjQxRTI3Cis6MTBGOTQwMDBCRDgyRUIxNUYxM0YxNjExMDdEQzEzNjkyMDNCRENCN0Q0Cis6MTBGOTUwMDA4RDAzQUE5MjdFMjU0NTM3Q0EyRkY1MDhGRTMzMUU3MDA3Cis6MTBGOTYwMDAzMjkyNUMyQjMxOTZEMTdCNEExQkI2NENBN0I0NkE3MzlBCis6MTBGOTcwMDBDOTU2RUYyOEM0MUY5N0M2NEZBMDc5OUJDOTRFNTY1NTRDCis6MTBGOTgwMDAzRjVEQzRFQkVFMEM4QkMxRjkyNkQ1RUM0RDBERDY0QjhCCis6MTBGOTkwMDBBQjc2REM0REYxM0Y5RkVFQjA1MUZDNEZCMTYzNzY3MTE5Cis6MTBGOUEwMDA0QzFDQkQ3NzRDRjE3NUFBNUU2QTkxRTAzQjM1RjVEM0VFCis6MTBGOUIwMDA3NUYxM0I4Qjc5OUY3ODY3RjNDQkI2MDhCQTFGQTZFMjQ3Cis6MTBGOUMwMDA3MkVBMTIzQzQ5NDU4MzQ1N0NDRTc4QTc4OENCNDlBMjkwCis6MTBGOUQwMDBGQUNFN0VFREUyMkFGREI4NTlDNDc5MDRDNTFCRERCODI0Cis6MTBGOUUwMDA4MEI3QUZBQjdGMzYwQUZERDQzRUY4RjYxODg3ODFFQ0JFCis6MTBGOUYwMDA1MEMzRDE3RjVGQkNEMTM2MTE2Rjk0MjVDRjRCQjM2MjFBCis6MTBGQTAwMDA0QjZGNUUwMEY4RkZEQTQ4RjAxRjY4QkNFQTQzOUFDRUZECis6MTBGQTEwMDA4Rjc3OUIyRjlBRjQ1NjhGOUY1OUUwNDdGNjM4MThFOTU1Cis6MTBGQTIwMDBDNTlGMUE1OTEzRjQwMEE1QkZBOEVGRTMyNTVDM0U4RENFCis6MTBGQTMwMDA2RTREMDU3RDJDREJGMzUwMkFFNENCNjc5MTIyNUZCNjM3Cis6MTBGQTQwMDBFNzk2REY4MDVGNzk3Njg1MDlGRERDQzQ0ODFGQUVGNDU4Cis6MTBGQTUwMDAwQUZEOUE1NUM3QUFGNzQ4NkRFNTlDOEVBNjE3NDU4OEZBCis6MTBGQTYwMDA3NzhGQjZFOUUzQ0RENTNCQjc5Rjk5QzRGQjNDODgzNzg4Cis6MTBGQTcwMDAwMkJEQkY2RkYyMkYwNjdFREZFN0ZBMkJDRUIxQTk0NTlDCis6MTBGQTgwMDA4MjNFREY2RjM1Q0VBMDdCNDM3Q0EzNDAwRjc5QkZGNTZDCis6MTBGQTkwMDBEOTQ4QzQ0MzJCN0RBREM0Rjg4MTFCRUZGRkFDN0M0RTJECis6MTBGQUEwMDBDNDA1RTM3RDdBN0EyQjU0REE0MTFBQTQxRDY0RTUwQjcwCis6MTBGQUIwMDBFNjE5Qzk3MUE0N0ZEMTk3M0E5M0RGRDIxRkZFNkFBNEQ5Cis6MTBGQUMwMDA3RUQ1OTczRkIwOUZDRTZENzVGQjg0RkU1MEQ3RDY0NTRGCis6MTBGQUQwMDBGQTgzRDI0NzU0REM2MUVEQkUyRUQyMjc1NEJCODYwMzk1Cis6MTBGQUUwMDAwMjJFRjUwN0M0Rjc4QTZDODNCMkEzQjhCNTRDOUNBNzY1Cis6MTBGQUYwMDAzNUNBN0I1RkNDMkY1RjZCMEFDRUU3OTVBRjA1QjM5RjBFCis6MTBGQjAwMDBBMEVDMjMzREE0MEZERTlCRkQzQjNBODdEN0FGOTNGRENFCis6MTBGQjEwMDBGMkJDMzk2OEJDNkExMDUxQTFGODlFNjE0NzdCQTdFRTIwCis6MTBGQjIwMDA3QzU3N0YyMDg2REFGQkVCQzMzNzQyQ0VCQjFCRUMyNjJCCis6MTBGQjMwMDBBNDJERjU3NjkyRkJEQjFCMEREOUI4QTdFRUQ2QzI1RERFCis6MTBGQjQwMDBEMEUzREFFNUZEQURDMUI1RUZEQTYwM0Y0ODYyM0Q0NzhECis6MTBGQjUwMDBGMURFQUUzRkM1RjNDMzIyREU2RjAyNUU3NzMxMDZFMjBGCis6MTBGQjYwMDA4OUJBMEY3RjkyOEZGRTI3MEZFQkJDODgzNzM1Q0NEQTJFCis6MTBGQjcwMDA5NDcyRjgyOTVBOEFFNDNBNzIzQUYzNDFENzgzOEYwODhCCis6MTBGQjgwMDBGRUZDQTg5OTZEQTQ3NzlCNERBNTBDRjY3QkJGRjQyRkM2Cis6MTBGQjkwMDA3QUJGMzJEMEZCQjNFRDlBRkY2N0MxRkFENTIxNDk5RkY2Cis6MTBGQkEwMDBBNTYxQzJDRkI4NzNCNDY3MTNFNkYxNURDRDNDMkE5NzY3Cis6MTBGQkIwMDBFRTFEMUE4N0EzRkY2RUU5ODc1NDdBRUEzNEM5OUY1MzcyCis6MTBGQkMwMDBFNEY5Q0EzMjI0RDEwRTNBNTZGN0VEMzRCNzlCRTIzRDQwCis6MTBGQkQwMDBFRkNBMzk1MjA5RjlGQ0UzMUUyQkM1MEI0Q0VCMDkyNzgwCis6MTBGQkUwMDBCRDM1NjVDODRDOTI2N0VBREQ3NjE1Rjc3MzI0QzdFMDJBCis6MTBGQkYwMDBDNTdCRjQzRjY2NTY3MTJGQzAxQUEyREYxQTZDNzQzRkEyCis6MTBGQzAwMDA1OTZCRkZENTU3RTBFQkM5QzYwQjQ3QTM3MTVGRjZERjExCis6MTBGQzEwMDAzNDdBN0ZCNEJDRjdFMzQ3REY2MjM4MEZGQjcyMjkxRUVBCis6MTBGQzIwMDAzQUM1QjMwN0VCMzlEOTNCQjNDQkMzNTFGNzYzNDc5QjE1Cis6MTBGQzMwMDBENTI1RTQwNTBCNUU0N0ZCMUQ1RjQ1QzUxQTAyRjNFQkI2Cis6MTBGQzQwMDBFRUY5OThERTc1RUNFRUIxOTJERDc2NUFCQjdDRTczMENBCis6MTBGQzUwMDA2NDNFREQ4OTRFQkEyN0NERUJEMUZCQ0ZERDc2MDNCRDA3Cis6MTBGQzYwMDBFRjM2QURGRDI4QkQ1NzM4NERCRDY3NjhENUJGNjdDOEI1Cis6MTBGQzcwMDAzQTUyNjI2MDU3MjY1QjJBNTcwRUUyNUIwNEZFMjY0NzIzCis6MTBGQzgwMDBFQkNGOEJBRjE1MDk3REYxQjUyMkFEREZGN0VFNTVEQzdCCis6MTBGQzkwMDA4QTkyMkIyRkRCRjdEQzI2RUM1MjYyOUYyRTU3N0VGRURBCis6MTBGQ0EwMDA0QkU5QTQ0RkY0QjY2NzdDRUQzQjE2NkY0M0FGRTBGQTI3Cis6MTBGQ0IwMDBDMjg1NkJEQzZGMTcxNTA2RTRFQTNDMDkyNzI1OUY1NUMyCis6MTBGQ0MwMDBEQ0MyM0MwOUFGNzk3NjgzODA0RkM4RUZBRTI4QkEwOTExCis6MTBGQ0QwMDBBNThCNTBCQzJCN0NCMjFGNzQxQzQzM0MxNkM3RTNBOEY5Cis6MTBGQ0UwMDBGQjE5RTFFRjI0RTFFRkFCRDdEN0UzRDk4NTIxNDY3N0M0Cis6MTBGQ0YwMDA5NzI3RURGRjQ1RkNGOTZEMjNBMDQ3M0M2ODIwM0Q0MjY2Cis6MTBGRDAwMDBERDc3RjRDOEY3REFENUJENDc5NkNEODgxRjk0MUJDM0JECis6MTBGRDEwMDBDOTVFRTg5MUVGQjQ3MzNFNzAwQzdDNDBFREZGNjEzMzM3Cis6MTBGRDIwMDAzQjQ3NDE4RTlFRTQ0Nzc0Q0NBRkQzRDA0NkRGNTMyNzg4Cis6MTBGRDMwMDBBNUQzN0UxRENBM0E5MkU0RkQ5QzQyRTg2RkM2QzBGQjgzCis6MTBGRDQwMDBENDQ0RjcyRDlBRUZFMTI1Qjg3RjM5Q0Y0RUY3RENCQkNECis6MTBGRDUwMDA3RDIxRUY1M0NCNzdDQ0JCOTlFNDBGRjNENTNCRTY3QzA5Cis6MTBGRDYwMDAzRkYzNzY1QjE2ODhGMkJFNzdDQzg3MzMzQTQ3NkRDOThFCis6MTBGRDcwMDA2NTU5RDBCRkQ0RUZGRTBDRjg4RUY5QjI1OEIyOUIzRTU1Cis6MTBGRDgwMDBGMjg4NkYyNEU0ODE3QUJGN0E0QThBMjc3MUQyRTAyQjA1Cis6MTBGRDkwMDBERkFGREVBQTk1MkVDMEVGQzA3ODQ3ODlGOTc2MkUwODJFCis6MTBGREEwMDA3RjY2OEYwMEI3MUZGNjlFOTM0RDkxRjQ2RUI3QTI1M0Y2Cis6MTBGREIwMDA2NUU3MUVFNkVEN0ExODcwNTI3MUI1N0Y5NkY0QTZFMEZECis6MTBGREMwMDBBRkUyMEFFMzQyRjBBMEU4Q0U2QjY2MTQ4NzBCN0MyMDFBCis6MTBGREQwMDBDRUE4RUZGNzYzRDY0OEZFQTJFMjNBNUY3NjM5OTFGRUVECis6MTBGREUwMDAzOEQ1OTMzQjA5RkI3MDA1ODczM0Q5RDEzQkJGODdGNUU1Cis6MTBGREYwMDAzRTdBNDdBNDFCRjMzQjI5N0ZENzIyNzQ1RjE1NEQzMjBGCis6MTBGRTAwMDAyODdGMzFDNTBEOTQ0QkY5NTZBRUUyMDQ5QUY0NzEwMjg1Cis6MTBGRTEwMDBBMUVGOUM4NjBGMkQ5RDBDQjg5REQzREUxRTgzOEZBRjY2Cis6MTBGRTIwMDBGRjZGNjNCRkY3NEZBRTlEMjRGODQ0NjZBMjY3QzYyNEY4Cis6MTBGRTMwMDA5MjczRDM3NEZBRTRFQkI5OUZBNEQwRUZDQzVDM0UzQTUyCis6MTBGRTQwMDAxNEYyRUY5Njk0RDJFQkQwQUYyRDUzRjgwRkZFOUNENDYyCis6MTBGRTUwMDA0OTcxMUU3RjVFRjBENzE0QjIzRkFGMTFFRkIzN0VEQjY2Cis6MTBGRTYwMDA3OTVFMTlENzJDRTg2MUQ1NjI3MTJGMzE5OTM1MTIxRDUxCis6MTBGRTcwMDAyNzA2RTI2NTZEOThDN0ZGQjRCOEU2NDBEQ0YxNUVGQThDCis6MTBGRTgwMDA3RDkxOTc5QkRCMzI0RTBGRUYwN0VGNjE0NzlFNzVGMjM2Cis6MTBGRTkwMDA5MzhERjdGMENCRTUxNEY3MUI3RDY0NTUxQUNGNkYzQ0JCCis6MTBGRUEwMDA3Q0I0OUNFMjdDOTM4RjVDNENFM0I4QjlGN0YwQUIyMjU2Cis6MTBGRUIwMDA3RkY1OTE4Qjg4MEJERTc0Rjg5OEE4MEZGRkMxMTBDNkYwCis6MTBGRUMwMDA3RTcyRjg3OEI5OTdFM0UzOEVEMTlFRkI4MUFGOUIyRkNBCis6MTBGRUQwMDAzNTFFODMzOEZFRkREQTM5OEJEMzI4QUU3NTc2NEFCNkU3Cis6MTBGRUUwMDA4ODZCNUQwN0JDQ0Y4QjVGQjQzRTVBMEJDNEI1RUU5QkVECis6MTBGRUYwMDAyNERBNzU1RjEwRkJBMEZCODJBMEYzMzBGMDgzQzFGRjEyCis6MTBGRjAwMDA3Q0FBRTI3QjE1MUYxRTg4NUZBQTdERjhBRjhBNEY1NjM4Cis6MTBGRjEwMDBGQjk5RUQ3MTZEMzQ4MzE4QkRGRjc0RENGMDkzOTM2ODI5Cis6MTBGRjIwMDA1REZBQjhFMTZFNzNDRjYzRTQ1N0JBQzA5Q0UwMTNBRkRCCis6MTBGRjMwMDA0NEJFRUI4NEJDNjgyOTE0NzE4RDVBNEY4NzEzRjczMTg2Cis6MTBGRjQwMDA4QTBBNDRCRUU1NDI4NzEzN0MxRTc5RDhCN0JBNjM0NDU3Cis6MTBGRjUwMDBCQ0EzOEE4QjZEQjlFMDRGQzIzRTI5NDJGQzIyQUY1RjQxCis6MTBGRjYwMDBEQ0QzNTMwRTNFNUE4NEZCQkM2OUU4RkZGODUxMzkxRUJFCis6MTBGRjcwMDA0MzdGQkIyRTg4QjhDMzZFNUI4N0QzMjFDNzQxM0Y3Q0NDCis6MTBGRjgwMDBEQzM0RjBDN0EyRDU1NkJBNzdENDcyQTE3MTA1RjU1MzA3Cis6MTBGRjkwMDA2NkVGMUI1NzBCMTlEN0ZBRjVFMzRFRDc4MkM2Q0RFQ0E3Cis6MTBGRkEwMDAxNUYxOUQxOEQ3QTkxQkQ3NEY3MUMxQkMzRjhBM0ZFREYyCis6MTBGRkIwMDA4RTcxMjVFMkRDQUZGMkM1MjhFN0Y5ODdFNEVGNTQxNDJGCis6MTBGRkMwMDAzOUZENDZDODAxMTUyNzk1NjA5MUVGNzFDQjczMEJBRkQyCis6MTBGRkQwMDA0NzcxOTlCQjdBQzUzQUNGMzdGQjZCQjA5RjhBMjVERjUzCis6MTBGRkUwMDAyRUI2MDhCOUM5MENFMTJFRENDNzJFMzE1RTNFOUU4Q0MwCis6MTBGRkYwMDBGM0M5MEJFMjdDNTIxQzU2QkExREZCQjFDMTI0RjgwREFCCis6MDIwMDAwMDIzMDAwQ0MKKzoxMDAwMDAwMDhCNTNCRjk3RDZCMUVDRTdCQ0RFRUZFMjkzRTlGN0M1QkYKKzoxMDAwMTAwMDg2MjYxRTY0OTkzODFGMkY5Rjk5MDNCOUMxRjVFRTMzQzgKKzoxMDAwMjAwMEMwRjdFRjU4QUIyNjdFODc0QkI0OUYzQjMzODJFRUExREYKKzoxMDAwMzAwMDc0MUYxRTUxODhGRDMzMjdDQ0Y5MUNFM0ZCQjY3N0QyMjEKKzoxMDAwNDAwMDU3QjQ0RkU3NDQzQjBCNzFFMkU5M0RGQzVGMjI5RkUwNzAKKzoxMDAwNTAwMDdDMEVGRTVEMkJGQjhBRjQ3M0U1QUZCRDI1RTBBRkZEQTIKKzoxMDAwNjAwMDVGMThBNzdFRTYzOThCRDBDRjdBRTg5REU2RkY5QTI0MDkKKzoxMDAwNzAwMERFQTdFM0ZBM0JFOTFGM0REN0M5NzczNzczOUM4NTI4OTQKKzoxMDAwODAwMDRGMzVGNzQ0MDE2RUREOTc0REUyREQ1QUQ2MTM3NTUzQjcKKzoxMDAwOTAwMDkwN0ZGNkIxNzZGMTlFNkQyODVEMUY5RTJDRTRDMEYyMzQKKzoxMDAwQTAwMDRDM0JCRDc3RDY5MDY4QjU1MkRBN0U2MTA2RkQxRThDNUEKKzoxMDAwQjAwMEE5MzQxM0U3MDNCN0E1N0ZCQkUzMkYyNjBCNzk5NUI2QzkKKzoxMDAwQzAwMEMxMTJGMEJGNzNGOUUxMEU2NzJBRUY2NUUzMThEQkYxQTcKKzoxMDAwRDAwMEZERjBCRUYzMTc0NDhDNjVCODNDOEY3OTEzMUYyRjM2QTMKKzoxMDAwRTAwMEU5RUFCQjUxQkZBRjlDODk2N0RBNTRGQjlDOTdFRDhGNUYKKzoxMDAwRjAwMEFGMzNDOUYxODBFNzI1RTJGRTQ0QThCQzY4OTgxMkRCNjMKKzoxMDAxMDAwMEY3NUUyMUM5REQzODFCRERCQkNBMzQ0QTdCMUVBRkVCNkQKKzoxMDAxMTAwMDIwQkJBMEYwREYyNkZGODc4REUyRTg3NkQ5MDQxRDY2QkMKKzoxMDAxMjAwMDFBNDRCQUNCMjBFMzdEQTVCRDRGOUQ2MzdFM0NDNTMzMDkKKzoxMDAxMzAwMDY5Q0E2MEVBQzc0RkZEMThGN0U3NDJBRjQ4NjI2RDM0RkQKKzoxMDAxNDAwMEJFRDJDRjU0M0RBRTg3RDk4OEM5QzhERjdCMkIzMjFBQzcKKzoxMDAxNTAwMEZBODVFNzNCOTNBNzk2NEUyRTA0NUQ3QkQ5NDc0MTcyMDMKKzoxMDAxNjAwMEUyN0M0NDU0NTMzMEZFMUE4QzdBQkJFNzNCOTNBNzUxOTAKKzoxMDAxNzAwMDNCRDVCRUJFNjkzQUZCODhFMjExRkQ0NDNGRjU5OTA2QzYKKzoxMDAxODAwMDNBQjczNjE4RDlBQkY0QkIwM0FDODNGQzk5QUFEREJCRjQKKzoxMDAxOTAwMDlDNEY3RTQ0RUYzNkI4Mjk3RDhGRjNDQjhGRThCRURGQ0UKKzoxMDAxQTAwMDdDNEEzRjY4RjZEMEY3OTNDREQ1OTQ3NjM2MzdEMkY3QjAKKzoxMDAxQjAwMDBGOUI5QjI4QkRGOUQ2QzgwMkQwRkZGMjQzNkJEOTQ3RUQKKzoxMDAxQzAwMDQxRjJCMUJFQ0RFQzA5QkU1RkYzRUVENEZFRTlFOEZCMkYKKzoxMDAxRDAwMDkzODVERkU2RERCNEZFQ0JFRjU3RTU5MzA1M0VCQjE3MTUKKzoxMDAxRTAwMDBCM0Q5M0QzRTUzQTQ3RUNDMEZBNDI3N0E0Qjg5N0YwQjkKKzoxMDAxRjAwMEQyMzQ3MTdFRUQ0RTEyRjlDNkM5RTJCRDUwQjc4MTZEQTEKKzoxMDAyMDAwMDQzRkI5N0E2NTkyOEZGNkVCQTgxREU3NTcwQzc4QTdFQjgKKzoxMDAyMTAwMERGQ0QzMjkwOUU3NkZEOENBOTBEODA5MzNCOUU3RkNGRTMKKzoxMDAyMjAwMDBCRTRERkJENEE5NEJCODc4OEVGNkFCRUFBN0NEMjk0RjgKKzoxMDAyMzAwMDNFM0I0Mjk2MzgxRjBCRkYzQkE3NzdFQUJGMEZCRkM1NzcKKzoxMDAyNDAwMDYyN0VBMUY1RDU3REZBNTA3OEZDNTZFRTVCREExN0QwQzgKKzoxMDAyNTAwMERGQjEwRkQyODJGNjQ1ODM5M0Y2ODVBMjQzNDU3RjBEMjkKKzoxMDAyNjAwMDUzQzQ3RUNEMEM5Mzc0Q0U2NTE3QzEwRjMyMENFN0UzRjcKKzoxMDAyNzAwMDA0MUJGOTA3RERGMDVGRjBGNUVDOTJGMUVFNTdFQzA3QTcKKzoxMDAyODAwMEU5MEY1MEZCNDFFRDAzNDVFRkM5N0M5RjA5N0Y4NzU4N0IKKzoxMDAyOTAwMEM3MjQ2M0ZGNzZGQTg3MjY4Qjc1NzdDNDQ3OTI3RURDODYKKzoxMDAyQTAwMERENkU3NjQwREU0QzMyMEFCRjQzNzdGQkJDMDJEQzBCQ0UKKzoxMDAyQjAwMDJGQjlEQkRFRDgxRkZGN0E1M0I2RkZBN0UxQTBGOEMxNDQKKzoxMDAyQzAwMDAwNzBCODYyRkQxNjY5QjdGRjA3RDc0RkZDMEQ3QzdCNDUKKzoxMDAyRDAwMEIxQjg5NzE5NEFBRkVEOTM5NURENUREMEVEM0I5M0RENTUKKzoxMDAyRTAwMDA3NDEzRkREOUFDRDg0NzM0QUI3QURGRjdCRTQyRjREQzQKKzoxMDAyRjAwMDEzRkI0MkQxNEZDMzE0MjZERkExRTFFQkNDQjg5MkRGNTAKKzoxMDAzMDAwMEE5RjVGNEFENzMyOTIzQkU5NzI5RTM4RDQzRjFBQkQ2NEMKKzoxMDAzMTAwMDE1QzRGNzVFOUYzQzM4MDA0RkM2QjhCRUMyRkIxOTVBRTEKKzoxMDAzMjAwMDY3QTc3M0FBQTJERkYzODNCRjVBMDJGOTM1N0ZCMjUzREUKKzoxMDAzMzAwMEY4OTkwQzQ2RjkxRUFDOTAyNzdEREYzNTIzQzU1RDA1ODUKKzoxMDAzNDAwMEM5MTkwNkJEQTVFN0IwRjBDN0Y5RjkzOTA5RkUyQ0Q4REYKKzoxMDAzNTAwMEEwODNFM0FFMkQ1M0M0QkE3QkU3MTcxQTYwMjczOEZGOUEKKzoxMDAzNjAwMDE3QkIxNzcyRUJGQzkwOUU5M0QwNEJDRTZGMTNFRjlEOTMKKzoxMDAzNzAwMEYzMUU2NzY5QjgzNzgyRjgxRjI3N0VCNzQ1Rjg0MThDQUUKKzoxMDAzODAwMDBGN0Y3OTEyRkFEMDkyODc4REE0QkY5Q0M3QjE5OUI3MUQKKzoxMDAzOTAwMDVCRkVBMEY4OUQzQjc1N0ZCMDRFQjY2QkQ5NzZGMTY2REIKKzoxMDAzQTAwMEZBN0QzMzRFOUZEMDdGM0VCMjM1QTQ0MzJGOUVGRUYwQTAKKzoxMDAzQjAwMDgzMjdGMEZFRkE5MkU3MzQ5ODlCRDk1MUQ4REQ3OUZFNzUKKzoxMDAzQzAwMEUzQkQ0NkYxM0JBQjMyRUU2NDg2QkNERjVGQjM1QkRDODIKKzoxMDAzRDAwMEVGQUY0M0JDMDlGNDk3MDMzQkI2RTJGNzI3RUJGNzlBN0MKKzoxMDAzRTAwMDk5OEQ3RjlGODE3N0QyRjgzODRCREIyMkY5NDE5MkY3QzQKKzoxMDAzRjAwMEJCNDUxRjM3N0EyREYzNkU4MDNEQjk3QUJCRkU3QkNEQUUKKzoxMDA0MDAwMDJFN0RCRTJFRTRERUEyMzY0NUZFOUVDMTQ4OTY0QkY3RjkKKzoxMDA0MTAwMDEzQjcwODdCQjFFMkRCNTdFQUJCNUU4MkFGN0JBNUJBQkMKKzoxMDA0MjAwMEFGRkIwNUJERUY2RDNDRkM2NUVBODc3NjkxOUYyREYzMzAKKzoxMDA0MzAwMDVEM0M3RkVFNEIwMTdGMDVCNzA2QzlGM0NGMjVCMTgyNDYKKzoxMDA0NDAwMDM2QkVCRTg2QzMzNjA3RUMwMDBEMkYwODNCQzFGOUI2OTkKKzoxMDA0NTAwMDY4ODJGM0YyRjA0RUYyMkJCMDE3OEQwRUU4NjFGNzFDQjQKKzoxMDA0NjAwMDMyOTI1REExQkVEREY2MzNGQzJFNkRDMzczMUFCRDU3MEIKKzoxMDA0NzAwMDVCN0YyOENDMjdFMDczNjEwOUNBOTcxRUIyMzk5QzI4OUMKKzoxMDA0ODAwMDdGMzE4Q0MxRkU3QzlFRTMwREY3NjJDRkE3NzQxMkZFMTQKKzoxMDA0OTAwMDgxNTdEODI1RjhERjJDRkM3RTg1QzJCRkYxNjFFMTRGODIKKzoxMDA0QTAwMDVFRjI4NEM0Q0ZCNjU1MjZDMkFCNEY2MzA5Njk1N0UyRUEKKzoxMDA0QjAwMDQ5RTFGOTU3ODZBN0ZBRjA4NDc2RDMxRkZFRkQ3MTg5Q0EKKzoxMDA0QzAwMDc3ODY3ODlCQTNEQjJBRTk3NzMxMTRCRTJEODczRjRBRDQKKzoxMDA0RDAwMDg1REVBQkYwNkNFNDc4RkVBMTZBRUY5NEVGRTE3RDBENzAKKzoxMDA0RTAwMDlFQUI4MTY3RkIzRjhFRTczRjQyM0UxNjkyREVGQkYxRkIKKzoxMDA0RjAwMDRGQTFGNzQ2NUFDODhGQUVFQzFBQ0E2RTMxQjhGNkRENzYKKzoxMDA1MDAwMDYzNzE3Q0UwRTE4OUNGOTI5RTVCMUU3QkE2N0UwNTIzMTIKKzoxMDA1MTAwMDNCREFCNTUzNjA0N0JCRUUwREZDQUMyRkZCRERGNTRGNkUKKzoxMDA1MjAwMEU1ODIzRTVBQ0M5REY0QkIzMURFMThGMUFFN0M3N0RBMjEKKzoxMDA1MzAwMEVDRURDRkYzRjE4QTYzQkY0QUREOEY3REYzNzIxOEI5MUEKKzoxMDA1NDAwMDRGRTZDQTdEODkzRjZCRjBCQjgwRUQzNkIyQjdENUI3QjkKKzoxMDA1NTAwMDg3MDlGQkRBMDFCREZGQUMzQjQ5RkM0RTVGODlBNUE3Q0IKKzoxMDA1NjAwMDdDMDVGNDcyREUxRkM2NTFFN0MxREE3NkY5RkIyRkYyODMKKzoxMDA1NzAwMEZDNTZBQkVDMENGQjQyREU4NzcyQkM0MUY1RUFBNjg4NjgKKzoxMDA1ODAwMDc4REI4Qzg0NDk0RUYwQTE5NjA1Q0MxMzlFRjE3NUZDNjYKKzoxMDA1OTAwMDlFMTFCRjU3QkY5NzM3QTAxRTM4MDBERjU3RkExRkYzRDEKKzoxMDA1QTAwMEVBRUQxQzhBRkYyQzk1QkYyRkQ5QjczRjY0QkU3QUFEMDgKKzoxMDA1QjAwMDM3Q0E2QTI0QkFBMzc3MUJFQTFFMTVCRkFGRjgwOUU4NDkKKzoxMDA1QzAwMDJFMkE0MDRGMEQzMjNFRUREOEY3N0Y2M0MyRUYzNDc1Q0YKKzoxMDA1RDAwMEVGMTJGNzIzMzg4N0RDOEE3QkZBNjdEQjQ0M0M1QzRERkIKKzoxMDA1RTAwMDQxRDcxOEJGMTNCRkQzMjFGOEQwQjI3RDlBQ0Y5OUQ2ODcKKzoxMDA1RjAwMDBGMUQzMURGMDZGMUFFN0QwODNERURGQkZBNzcwRkVGMDEKKzoxMDA2MDAwMDBERjA5MTUxN0ZFN0YwREM1MUMyQTREQ0YyRjYxQjNGMDQKKzoxMDA2MTAwMEQ5MjdCRjQyN0VDN0UzN0Y1QTNDNzc2RjBFNUZDRkQ3QTMKKzoxMDA2MjAwMEY4MUJBRjRERDRCRkUzNzI5RDUzRkYzQjREREZDOUQ2REUKKzoxMDA2MzAwMEZGNEU1M0FGNURDMjQ3RUE4MzRBNEYzRDM0NDVDOEYxOTAKKzoxMDA2NDAwMEQwNTRDMUY3MDY5NzdFMUM3NTJFRkVFRTM4RkQ3OEIzQTgKKzoxMDA2NTAwMERERkFGMUJFMkQ1RUZFNTU3MUFEREYwNEJGRTM3MkRDNDUKKzoxMDA2NjAwMDEzNzJEQ0RGQzg3MUZGNTkzOEE5NzRBMEYxRkU3RjREMDkKKzoxMDA2NzAwMEZGMEY4MjI1NjNDNjAwODAwMDAwMDAwMDFGOEIwODAwNkEKKzoxMDA2ODAwMDAwMDAwMDAwMDAwQkI1NUIwQjdDOTRENTk1QkZERjdDQjAKKzoxMDA2OTAwMEYzQ0M3MzA4MjEwOTA0QzIyNDI0MjE2MDg4MDMyNDU0NjQKKzoxMDA2QTAwMDJCOTRDOUQzMDBENjA2NUMyRDY4ODQwMTUyQzgzQjgwQzgKKzoxMDA2QjAwMEI1RDJENkZFMzIwODIyMkY1QkE4RDFBMjIyNEU4MkUxMEIKKzoxMDA2QzAwMEExNjEzQjExODI4OTg2M0EyODY0MTFBRDFCNjk4QkZEQkIKKzoxMDA2RDAwMEZENTZEQ0Y4MjhGMjMyMTNBMzc0RTU1NzVERjZGQ0NGMjMKKzoxMDA2RTAwMEZEM0UzMjE5NDJCNURERERFNEE3MzdFN0JFQkU3M0NGNkMKKzoxMDA2RjAwMEZCOUM3QkE5MjlDRTMxN0MzOTQ1ODhEQzk4NzNFNjlFMkEKKzoxMDA3MDAwMDA4MjE1Q0FCN0E4QTEyQjM4NUU4N0I0MzE1NEQwRTIxMzQKKzoxMDA3MTAwMDg0REI3QkJDM0U1Njg4REE4RUUxNjI1MzMyQzEyNTdEOTQKKzoxMDA3MjAwMDZGMUEwMEI3OERCMzZGQTJGMThERUQ3Rjc4MUJFM0JEMUIKKzoxMDA3MzAwMDA3NTU4Nzg1QzY1RjZCRkYyODBBRkI1Q0ZDMzI1Qzg4MjcKKzoxMDA3NDAwMEUxNThGNzUxOTQyMEI4RkFCMkMyRjAyNjFBNzcxMDNDNUIKKzoxMDA3NTAwMEFCNTUxNUZFNENEQUNGRTgzMzYzRkM2MkFBMEU3QkNEQjUKKzoxMDA3NjAwMDgyREE5Mjk2NTY3MzBGQjU1NTdCNUI3OUZDMEQ5RjY5QzMKKzoxMDA3NzAwMEYwRjhERUM2NDFFMzc2Q0NBN0I2Q0FFODhEQjI1MzdCNkIKKzoxMDA3ODAwMEJFNURERkNGQ0ZGM0FCNTMxNTk3MTdGRDdCRkYxMEI3REYKKzoxMDA3OTAwMDBDRjM1QURFODk1QjRBRUQxNUZDQ0NCQ0I2RkRGNEQwRjcKKzoxMDA3QTAwMDBCOTk2RTVBNTdEMzQxRkI0NDBDRUM1M0QzNjFEMjYwODIKKzoxMDA3QjAwMDg5Nzc3NTZBNkI1MTBDRDE0QkI0MjgyMjhEOUE4QjYyNjQKKzoxMDA3QzAwMEFCNTg0REY0QUM2QTZGQUUxNkQ0NUY5NTcxOEY0OTEwN0IKKzoxMDA3RDAwMDVEMDIzRUI1MThERkE3MUY4Mzg4QTM3NTc2RkE4QkU4MDQKKzoxMDA3RTAwMDc3RDFGNzc5RDQ1MkRBRjc1NURGQjFEQjVERDQwNjNBMjkKKzoxMDA3RjAwMDVGOEZDMjc3MDMwNzY5N0VFNjAwM0VEMzVENDRCRjFDNkUKKzoxMDA4MDAwMEI0NjYyMTQ2RDBCQTgzQUY0NzM5Njg3Q0EzRUY3NTQ5RjcKKzoxMDA4MTAwMDZGQTM5RkNGRkQ5QTA2MDdBODY1M0FCN0FCN0NFRThBMTcKKzoxMDA4MjAwMDJGNTVBNkJGQkVERkFEMkU5NUY3OTlENTlFMTY4OTczQkQKKzoxMDA4MzAwMDlERjRDOUVGQ0Q3NTM5NjQ3RkVBRTIzMkUwN0YyMjYxMzEKKzoxMDA4NDAwMDQxOEU5QUNDNzhCQjAwMDcyNkNFNjlERTQ0QTg1NEY5QzUKKzoxMDA4NTAwMDY4REZDQzZCRTlCNjU0REJCN0NCMjRFNkZCQzBCN0Q0N0EKKzoxMDA4NjAwMDAzNURBMzQ4M0U0RTE0MEY5RjRDMjM1N0U3RERFMzMyNTAKKzoxMDA4NzAwMEYwQkMyMkIzM0I3NTA1Q0QzQjE5RTE4OEI0RDM3RTBGQTQKKzoxMDA4ODAwMDE1OEY4QjA0NUY1RjQzOEJGRUUyNUQ2NjM3QjU5NTA3N0UKKzoxMDA4OTAwMEU1Rjc0RURBQkJBMzIwNkYyNzBGNEU1NTNEQ0FDMDdFNDkKKzoxMDA4QTAwMDc3NkFERjE1QzJDM0VEMDBERjNDQ0NBNzcyNkY2MzA0MkIKKzoxMDA4QjAwMEY2MTlFMDlGRUM5RkVCQjJGM0ZDMTNERTc3RUVCQTg3RkMKKzoxMDA4QzAwMENFNzczMjIzREMwOUJFNzQ5OTQ1Qjk4RkU1ODQzRTgyMjgKKzoxMDA4RDAwMEVGNzUyNjM2ODIwRUZBRjdFNjgyMUZCNDJFOTA2MTYwMUQKKzoxMDA4RTAwMEJFRjZCNjlCQjQ3OUY3MzQ4QjQxRjM0Q0NDQjc4QkNGQzMKKzoxMDA4RjAwMDBEQzZDN0VFRkRFMDk3RjdEMEZDRUE2NzU0NjFBMUVFQTQKKzoxMDA5MDAwMDZBRDM4QTM4OUNGRjkzMUQ4M0YxMkJEN0U4NUM2REYyODQKKzoxMDA5MTAwMEM3QzUwNUM5NkI3NUM3NTU3RDg5NjBGOUVFRDBGNUMzQUMKKzoxMDA5MjAwMEMxRkNENEY5NzgzMjQzOTU3ODI1NThCQzgyNTBBRTZFMUMKKzoxMDA5MzAwMDZENjZCOTI2NzVGM0Q4QTY3MDJCRUNENDI2ODY3NzI3N0EKKzoxMDA5NDAwMDJCNzRGRUM0MDdBQ0NFQjU4NEZGNzM4QTM2NkVBMDM2MTYKKzoxMDA5NTAwMDg2NjA4Mzg0Q0RENDVBQTk3REM2MjRGQkExQjY1ODNGQjYKKzoxMDA5NjAwMDg2RDhBOTEwNkMyQTFFOTc2MzQ4QTE3REQ0RDZDOUUwMDkKKzoxMDA5NzAwMEVCQUIzMzVEOEZCQTA4OEZDRDMzNEI2NkNDMDQzRUEyMTAKKzoxMDA5ODAwMDZGOTlBMDZGRDY1QzhBRjA4ODY4MjEwQUQ1Rjc5RUMwNUYKKzoxMDA5OTAwMDc3RkIwRjlBMDRFQzQ3OERCNUEzRjI2MzkyRDM3RTI3QzEKKzoxMDA5QTAwMDI5MEFFMUREQkZDM0U0RjVCMEZDQjkyMjk0Njk0MjJDMDkKKzoxMDA5QjAwMEJCNDlFQUNEMjcwRUY3MzQ3NTFDQ0Q1RjYzRTBGMzU1RDQKKzoxMDA5QzAwMEI3QTg1RTFCQ0RFQkFEMjcxMjEwQzkzRjZENERGRTAxRTAKKzoxMDA5RDAwMEU0QjVGQUI4NkFCN0QyQjlGMzdEQzlCRjlBMEVCOEM1MDMKKzoxMDA5RTAwMEU0QjREMEZBNUExRjc1MTI1Q0JCNTdGMTNBRTRGRTAyMjgKKzoxMDA5RjAwMDdBNTk3MzEzQ0JCQTM4NjNBQjREMTE1OUQ0QUVFOTMzN0UKKzoxMDBBMDAwMDYzREU5OUMzOEE3ODhDRTY2RDBFOEI2QTAyREUzNTk5QjcKKzoxMDBBMTAwMEIzQ0YyOTUxRDRBQTVCRDYyN0QyN0VDQkI3OUIzRUVDNkQKKzoxMDBBMjAwMEIxQ0FCNTU3RThCRkJBQ0U2RDJDQjcxNURFQzFGRDU1QkEKKzoxMDBBMzAwMDdCMDdDMzM1QzIzODAwRDNGRUNERjhFMzY2MjFEQTVDMEMKKzoxMDBBNDAwMDkxQjE2NzZFQTBCRjI3ODgwOTU3NTREMDY5N0EzQ0Y0RUEKKzoxMDBBNTAwMEUxMDRGODRBRjIyNDFBODhEODIzODVCODZGOTIzMzFFMkQKKzoxMDBBNjAwMDdBQkZEMUU4OTgwRDNBMDQzQTRENzZEMEFCRUVGMDgxREEKKzoxMDBBNzAwMDBBRTBFREFEMEU3MzFBRThBOEI1QUI1RjYxQkEwNkJFMjkKKzoxMDBBODAwMDIwQkFERjQ4NkQ4MkUwRjMwNzg0QTQ2RkEwNURDQTc5QzUKKzoxMDBBOTAwMDlENDlGMTVBQjE5RTY4QzhGQjU5MTVFRjFBMUEwQTc4OTgKKzoxMDBBQTAwMEZBQTNEODNFMDk1MTBDQkQ1OEI1MjBDNzAwM0IwNzM1MDUKKzoxMDBBQjAwMDE2ODRDQUFGNzQ3RDUwNkM0NjI1MUFBREQ0RkZFRjE5NjkKKzoxMDBBQzAwMDdCRDQ2MTQxNzZFMjNGNUQyOThDN0Y4MTU5Qjg3REQ0MkEKKzoxMDBBRDAwMDdGNUZBNDMzMUE3MjNGRDYxQTk1MDVCQ0M2NUE5M0JDRTEKKzoxMDBBRTAwMEEwRkI1ODYzREYxQTdDN0ZGMzI4QzVGMTEwNkQ3RDI0Q0QKKzoxMDBBRjAwMEVCRTVDOTBBRTBEQTA4MjdFNDQ0NDk1ODZDMDQzRDM2QkUKKzoxMDBCMDAwMDhGNUE2Qzg0QkM4RkI1RkIzMjRBMzIwN0UwMDI4QzQzQUIKKzoxMDBCMTAwMDFGODQ5N0JGNTcxNEUxMzZFMjNCQ0Y4RDU0RkMwNkRBQjEKKzoxMDBCMjAwMDNGNjAyM0ZDQTAyNzQ2QkIwOUY4MDU0QzEyMTY2MkNEOTYKKzoxMDBCMzAwMDIwRkNDODIyMzFGQ0ZGOEU5RjlERjA4QjE4QzA4RkY4REYKKzoxMDBCNDAwMDFEOERGNTlGNjcxMzdEQTg0RDlBMkI0NDM3REI4NTE1QzYKKzoxMDBCNTAwMDZDMTc3NDdBNUUyNDc5MkYyMDVFQTUyOTUyNkVBQTc3Q0QKKzoxMDBCNjAwMDFDMjlDMjc4OERFODVFOEY3NTQ1NTFGMjFDNDUzODBGRkYKKzoxMDBCNzAwMEUwMzBEOUFBQjk5MjVGQjk1QTdCN0ZBRUY0MkZCQUZEQTMKKzoxMDBCODAwMEVDQzg3NTE5NzNBOUREOUU1QjYyNDY1QkE4NjZDNkY3NjMKKzoxMDBCOTAwMDBDNjFFRjU3Mjk1Njk2OTNDRjQ5RkY2MDhGRUY1REExMDcKKzoxMDBCQTAwMEQ4NTMzMzA2RTQ1QkQ3QUIzQUQ5NzU1NTdGQUE3RUJGREQKKzoxMDBCQjAwMENCMkM1MkYwMzk1Nzc3MDY4RDk3MEJBOUQ3OEI1NkRCODQKKzoxMDBCQzAwMEVDQTlDMTdBMDQzRDIzN0E5NERCMkI2RTEzQTQ2RkVFNUIKKzoxMDBCRDAwMEQ1NzFGNkQ0QTlENEFGNUUzNDBCQzg5RUE2NUZCMUY0MkMKKzoxMDBCRTAwMDdCMjU2NTA4RkRGMjg1RTg2NUZCNjBEODZGOTM3MkVFQTIKKzoxMDBCRjAwMDhGNTRCQzZCMDlGRkQ0RENDMTdBOTdBNEU5NDFBMzVCOTUKKzoxMDBDMDAwMEUxRjMzNTdFNjU2NEQ4NTNBQTc4NDFGMzNCQTk3Mzc1NDcKKzoxMDBDMTAwMDhDNzYzOENDMkJDRkY1QzIzRkRFNDk2MDI5RkExQjYyQjcKKzoxMDBDMjAwMDU5NEY3OTkwRUNEN0JGNjhFN0JDRDNFODNGMDJGQjcxMUUKKzoxMDBDMzAwMENDRTQ0QkI2RDNEMEIxMUFBQjEzRkIyRjEwMTRFODkwMTEKKzoxMDBDNDAwMDVEMkIxNUREREM5RTBBQUY2REYzRjNFNjlFMzE5MEFGQjAKKzoxMDBDNTAwMDc3REQxNjI3RTJCMEM2NzU0RDkxQjBFMzU5NjI5REZENzAKKzoxMDBDNjAwMDRDMDY4MjBBQjFGN0NBRDRFQkM3MzMyNDM4RTI4Q0NFRTMKKzoxMDBDNzAwMDE3Mzg2MjhBNTNDMDZGOURBRkRCNzM1RDc5QjkzOUQ3N0UKKzoxMDBDODAwMDVGNUZGNUE3QjZEQkJGMDNGQjc1N0ZCMzM5NUU4QTQ5QUIKKzoxMDBDOTAwMDc3QzZCNDAxQkVFOTdDQUQxMzFFQzY1QkU3RDc1NUZFMkYKKzoxMDBDQTAwMDExRUVBMzQxMEZGNUUyNUNCNjMzQ0ZBQTgyRTMwQThEQzEKKzoxMDBDQjAwMDdGNTZGQTFEOEE3RjNBN0Q2NzZBN0M1OERFMjFFRDUxQTYKKzoxMDBDQzAwMDI4NUY3NTdBRkY5MDM2QzRGN0M5OEZFRTYwN0UwODBCRjcKKzoxMDBDRDAwMERCQkY1MEJFN0YxMzVGMjhDMjJDQzU1MDdFQUM0NTgwNjEKKzoxMDBDRTAwMDlGODkwNjY5MUYxMzk3OTE5QzEwREVGNzA4RjdFMTFFOTQKKzoxMDBDRjAwMDZBRUYwQTdGQ0JDNDcyQThGMUU3NUVGMDg3QTZCRTJCMkQKKzoxMDBEMDAwMEJDREZDRjQ4RkVCRkUzNEY0NzZFQzkwM0MxN0ExOEFBQzQKKzoxMDBEMTAwMDc3RDdEM0IzNkE4N0YzREY3NUJGNDc5Njg2RjQyQjQ0NDIKKzoxMDBEMjAwMDNGNDNGNDRGRTc5NzdCNzUxNEVCRDk1NTNFQUEyRDUyRkMKKzoxMDBEMzAwMDVGMzU3RTQ1RDBFRjkwRkE4NjNGRTg3QjM1RUQ4QUQ3NjgKKzoxMDBENDAwMDlGRkMyREY0NEYyMUM0ODk2RjhGODVFODlEQ0U5RkVCQ0EKKzoxMDBENTAwMEQ5MURERDRFOUQxNkZFNjM3NjNBRkZBOTE0MTkwNzc4NUEKKzoxMDBENjAwMDdFNjJGMTM2MDM0RTM3OTRDM0VFOUQ5QTI4REIwMzlBRDgKKzoxMDBENzAwMDdEMEI2RDRGNTM5Q0EzOTAxRkRCOTQ3MTcyMDRGQ0Y1QTcKKzoxMDBEODAwMDI5QjNCRThGQ0REQjRDRjg5RjVFRDMzRDY2MjVBRDNGQ0EKKzoxMDBEOTAwMDlEMkJEQjUzODgwQjgzNjA1Nzk4NTgwNEJCN0U3QUE0NDUKKzoxMDBEQTAwMEM1MDMzQTlENTYyNkU0QzEzRjlDNTYxRUI4NURDMkYxNkMKKzoxMDBEQjAwMDY2MDdFMDA1RjE3OTc2ODI0Rjk5RTQ3Q0REQUZFOEY2Q0QKKzoxMDBEQzAwMEZGRjQ4MkVGMTRGMDNDNDUxQzA1M0QxQzhBMjhFMUVGM0UKKzoxMDBERDAwMDI4NEE0QzMxRTE3M0ZBRkVCNDI5NkJDNUMwRjk5QjcyMDUKKzoxMDBERTAwMDBEQkNDRUFCRDk2RkMyODNFOURFRjc1M0M1REI0NDVERTIKKzoxMDBERjAwMDhCRTA1MjA4RkZFNEJDREYxNEE3NTBGRkZCM0YxQjM3MUEKKzoxMDBFMDAwMDE5RkM3NUFEMUFGQzdERjhFQkU0MUIwMTZGRTM3REJFQTgKKzoxMDBFMTAwMEY3NjU5RjY5NzE5MDVGQkFFQTI3MEIzRTkzRkQ2NTM5Q0MKKzoxMDBFMjAwMDA2RTg0QkI5QzY0MzU3Q0M4NDY4RjBBN0RGM0IyRTFBQkYKKzoxMDBFMzAwMDdFNDdGNzQzRkRDNzBGNDRCODgzRjg3NjhFRkM5NDE4QkQKKzoxMDBFNDAwMDFGMDQ0Rjc4MzQyOUQ4OEYxREQ5QkQzOTFERkI5NDlCQzEKKzoxMDBFNTAwMDNENTk0RUVBM0ZEQkY4NzQxMkUyOERGMkREOEZBNDczNDgKKzoxMDBFNjAwMDFDQkM3QjYzM0FGMjk5RjJBNkNERTkyRTg2QzNERDlDQzkKKzoxMDBFNzAwMDRGMTlFNUI5MkZFQ0JGNzlEN0E2QTBCOEJCMkE1RjY1OUIKKzoxMDBFODAwMEZDNEJBRDQ3MEFFMTZGNjdERkYwRTlDMzc2OUE5N0Y2NEUKKzoxMDBFOTAwMDMzQzUwRUYxQkE1Nzc0M0YwQ0ZGQjgxMEYxMzFGMkI3RjkKKzoxMDBFQTAwMDA2MkJEQjczREFDRjA1RkUzNzRGRjhGRTczRDBFMzEzNjIKKzoxMDBFQjAwMDE5MUY5OUNBNjhERUU1NUMyM0QzNjdBMUYwNkU4OUE3ODQKKzoxMDBFQzAwMDcxQjE0MUIxMzc4QkUwRjk2MzFBMzE3RkYxM0FDNTlDQkEKKzoxMDBFRDAwMDAwM0JCMDYyRDg2NEQ1ODE3NUMzMTg4RjI1MUIyNjc3NzcKKzoxMDBFRTAwMEExN0ZFMTgzQjI3RkI2QzU3QkYwMjRGNkY5OEREOUQ5MTUKKzoxMDBFRjAwMEVDNjA3QjkzNTIzMjY5MDBGRkNCQjk2NjVFQjc2ODhCQkEKKzoxMDBGMDAwMEMyRjFCRkZFOURCNDI3RTIxQTgzQ0Y3OTU5RTNCRkY4M0YKKzoxMDBGMTAwMENBQTI4MDJGM0ZEMEY4NzJEQjgzRUYxQzREQTA3REVEN0QKKzoxMDBGMjAwMEIxRUUyQkIwMUI2RjNGN0UyNkQ1NEZGRDA1MzFFNzMyNkEKKzoxMDBGMzAwMDIxRTc2OTY2Rjc1MzE1Mzg3NzkzQzU4OTczNjQ2NzI1ODgKKzoxMDBGNDAwMEFBRjEzNDdGQ0E4RjczMUY0M0JCRThDMUM1NEY1NUMwOTgKKzoxMDBGNTAwMERFNkVCNzcyREVBNkUzQjc0QTcxMUE2MDhGNUY2RkZDNzAKKzoxMDBGNjAwMEUxMTJEMEVERUNFMzU2OEVEQjU3MzU4RThGMTc0M0U4NTgKKzoxMDBGNzAwMEE5REVFRTIxRkUzQjI4RDFEOTU3NkZFNUY2ODU3QUJCNzUKKzoxMDBGODAwMDcwOTAzQ0VDQUY0RjYwRjhCN0Y1MEU2RUM1N0MyOTVGRjIKKzoxMDBGOTAwMEFCQjRGQ0Y4N0FGQjRERkQzMjVDMzgyODlFQ0RERTYwQTgKKzoxMDBGQTAwMDEzMEVCMjUzNDk3MUFFNTE3OTc0Q0VCNDg5MzU0RDFCQ0QKKzoxMDBGQjAwMEI1NzNBNUQxRkFDOTlFRTQ3Q0QwMjE3QkUzQ0EyRTg0MDcKKzoxMDBGQzAwMEJDRTYzQzk5OEZCRDc5NzI0MzEyOENGMkYyMDczRkQ4OTAKKzoxMDBGRDAwMDU5NDFFMzczRjM0QUM2RTU1MUJGNzVDNzY3NUM1Nzc4NUIKKzoxMDBGRTAwMEJERTM5MTg1QTA3Nzc5OTM0NTlFNEYzQkY3RDlDN0QzNTEKKzoxMDBGRjAwMEUzOUZBMkZEM0Q2Rjk4MzhERkFGREJGMUMxQ0U4REQ0MEEKKzoxMDEwMDAwMDJFRERCMkQyMUMyQ0VGREZGNkJDQzkxQTNFREZBNDU3OEUKKzoxMDEwMTAwMEQ3QTNDMzNGQUU1NzlCOTM1ODdGOUE0OEFGMzJGRjc5MEYKKzoxMDEwMjAwMEJEQUE3QjcwMEREM0VGODFCQzkyRDlBMEZCNTk5MzI3NDkKKzoxMDEwMzAwMDA5RkE3NDc2QzIwQzk2NzNDRjYxODVFOUFGREI3MTdERDYKKzoxMDEwNDAwMDdEQjE3NkRFMkE4MzZGQ0JGNEU0MDEzQjdFNDk2NDMzQzUKKzoxMDEwNTAwMDdEOEY3NDdDOTI4RUI4Rjc1MkZCODJCRjdCRUU0Mzc0MTcKKzoxMDEwNjAwMDZFM0Y5REJCOURFOEVCMUY3RkVERjgzNEIzN0I5QzkzRjcKKzoxMDEwNzAwMENFMzdDRDIwRTNERDZCRTJENjNDODM1NjJGRTgzNjk3QTIKKzoxMDEwODAwMDQ0NEE5QTJCQThDQjY4RkU5M0ZDOTgyNzlBRjBBOUVFQzUKKzoxMDEwOTAwMDU0RkM2MTU5RjA2N0I3OUUzMzIyREZBM0JDRjFDM0UwNzMKKzoxMDEwQTAwMDM4ODI3RTNFMENGMkRCRDdDM0Y3OUJEQTVBRUM5MzM2REMKKzoxMDEwQjAwMDYwNzdCRkYzNjc4M0YwMDdGOUU5OUI3QkMyODQzRkU4NjEKKzoxMDEwQzAwMEJCNTdGMzEzRUEzMzEzOUY3QTNCNDZCMjVEMDBERjhDQzQKKzoxMDEwRDAwMEE4Qzc3NTRDNjgwMjdDQ0UyQ0Y5RDg3Qjg4RTIyNjU5Q0IKKzoxMDEwRTAwMEM3MTFFQUI0ODE3MzlFRUJCODkwMDUzQjFCN0FERURBMzgKKzoxMDEwRjAwMDk3MkZCMDdDNTRCNzNGRjI5OUMyRTc5Rjc1Q0U5OEY1MTEKKzoxMDExMDAwMENERTczRkIyRkI0MjE2Rjg3N0NFRDQzMzBERjk1NkFGOTgKKzoxMDExMTAwMEI5MjcwQjdDQTg3RDQ1REFGMzdGOTQwRTdBN0ZDNTA2NEMKKzoxMDExMjAwMDNBMDhFOTc5QUQ2MjY1MzkyOTU0MkY3MkREQTBGN0I4MjQKKzoxMDExMzAwMEFDMUJENDc2RUM2MjdCREFERjI5RUIzNzc1ODZFRUEyNDYKKzoxMDExNDAwMDc4RDQzQjU2N0NEMDA1N0JENjlGMjBGMzI4REFERjA1ODgKKzoxMDExNTAwMEJBNEQxRkE3Rjk0MTYzNUZEMjVDQjI2QjJGNUU5NTA3NTIKKzoxMDExNjAwMDk5RkY5RDg1RkU4RUM3M0VCRTZBRDgwMTkxMTUyRTEwNEYKKzoxMDExNzAwMDU3OUM4NzNFNTNGRkMyRDVDOUVCMjFFNzY3QkQyM0E2MjUKKzoxMDExODAwMEMwM0VCRTk5RjVCNzVBQUVGN0JEMUE2RTU3MzlFRUExRkIKKzoxMDExOTAwMERFMjBGRTVEM0Q4NzU3MTVBRTQxRjU4MDcwRTEwQTlBNkQKKzoxMDExQTAwMDU3Njc3NkZDODBFM0UzMTNBQTQwNUM1NzM3NTFFQTkzMTQKKzoxMDExQjAwMDc4NTlFQTUzQ0RCQTIzRTY4NEEwRkQ3NjQyOUYxODZGOTIKKzoxMDExQzAwMDE5MkZDRTdFRjU2RkFDOTc1QjY2QkEzQUExOTdFMUIwNjYKKzoxMDExRDAwMDg1RDgyRjIxREFBQjI4REEzQ0UyN0ZBRDg2NDM0NEE3REQKKzoxMDExRTAwMDk2RjcxN0FCM0M1RUQ3QUU4QTkxNTg5MzEwRTk0REEzQTIKKzoxMDExRjAwMDczMTQ4QkFENDZDNEQzQjM4NTZGM0FFQTM2QzJEOEYzQzUKKzoxMDEyMDAwMENCNUI2ODdDQ0VBQkVBRDQ0RDgyRjNBNzQ1MjU5QzU3RDcKKzoxMDEyMTAwMEJBNTM1NzIxM0UzMjI4MUE1RDdERDk3MzgzRkQ1OTlFRkEKKzoxMDEyMjAwMEY0NTNEMzU1ODVGRDU4REZDODcwOEU1MzY2Q0RBRjI5NzIKKzoxMDEyMzAwMDA1QkVGQUJDQUM2MTcyMUVFREMzNzE5NkYwRjY2NUNEQzkKKzoxMDEyNDAwMDg1N0VGQUZCQjJFNjQ1MEVDQ0JCRUJENUYwMTVFQzE3NkMKKzoxMDEyNTAwMDg1MkZGQkFFQTBFRjg0RTVDQkZBRThFN0U0NDcyMDI3MzMKKzoxMDEyNjAwMDc1OTc2NEJEQTM1MEZERUEwOUM0RTdBQjBFOTNCQzIwOUIKKzoxMDEyNzAwMDNFMzQyNEJGNkI4MDFEMjczQTgzQUYxNzg4QUYyRUY4MEEKKzoxMDEyODAwMDFGQjc3MEI5QTAzRjkzNDY3OEExM0Y3NUZCMTU2MTQ0MjUKKzoxMDEyOTAwMDlEQThDM0QyODQzQTUyQURBOTI3MEVGMkJDQjFGRDRGMkUKKzoxMDEyQTAwMDY2Qzg3MzVEREIzQjY2QzcyNEFDOTc3NTI3NTI0OEI2QUEKKzoxMDEyQjAwMEUzNzU5QUZGQUE2OTFGRkYyRUVBN0MzNUM3QTUxN0FEMTMKKzoxMDEyQzAwMDMxQkVDM0Y5N0JENUMxNTZDRUQzQUI4NTlGRjNGNEVBQ0IKKzoxMDEyRDAwMDk2QzFGMkQyOUZFMEUwQkE0OEE4N0U4NEU1M0IwNkU5RDkKKzoxMDEyRTAwMEM1QUNFRDUyMkZFRTUyQzUwQUQ4MzlBMUQ1Njk2NzI1OTQKKzoxMDEyRjAwMEM0NzMzQzMyQjA0RUM2QkIyRUY1QzJDMzg4NUYwMjI5MTAKKzoxMDEzMDAwMDhBNTNBMUFEMDI2MTlFNzU4ODhCM0NFOTMyOUUwOUZDMkYKKzoxMDEzMTAwMEVFODVFQzY1NkM1N0JDRDk3N0QwQjkwMjVBQkMzQjZCRjMKKzoxMDEzMjAwMEMzMzZBMzFBODRDRkFDNEU1OTk3MEM4NDg5RjI0M0NDQjAKKzoxMDEzMzAwMDZGRjc2OEYwNDFCODRBMjJGMjczNThBRkIyNjA1NzAzQjIKKzoxMDEzNDAwMDA2NTk0NzBEM0Q0N0JENTYyRjNBODE3QTUyRTYwMERFRDkKKzoxMDEzNTAwMDczMTIxM0E1MUQxMzVFOTY5RjJFODNGQ0JFQ0I0MEUzMzQKKzoxMDEzNjAwMDUzMDZENjJGQzk5N0VCMDdGMjIxNTkwN0JCOUU1REQ5Q0IKKzoxMDEzNzAwMDRERkMyOTIzRkVFQzI1M0VBMzdEOUVGQzcxMTlEOTk5RDUKKzoxMDEzODAwMDE2RjJDNzgwRkY5NUZDMzE1QTVGN0QwNkY3QkY1OEVGMTQKKzoxMDEzOTAwMDY0Rjg2MEZENEQwQzFGQUE3NzMxREM1RTVGQ0NFRENCQUQKKzoxMDEzQTAwMEY1MjVEQzdGMDJBODdFMTdGRjdCQkExMUYyRDAwNTFENjAKKzoxMDEzQjAwMDFCMzUwMDlGOEEwOTgxNDcwRDlFN0YyQTQ2MTkwQzhGOTUKKzoxMDEzQzAwMDUyNzg3RTc2RkVEMzhEMUVENDhCNjZEQTM1RkQ3NjQ0NTgKKzoxMDEzRDAwMDIyRkUzQTZCOTM3NUE4QjMzNjU5ODc2QTFERTVCRTI1ODAKKzoxMDEzRTAwMDlGQzZDQjY2QURERDJERjM1MDU3M0FFNjE1QzQyQ0UwMTEKKzoxMDEzRjAwMEZDQjU5RkYyNTdEOEEzOTVGOUVFM0NGMEU1RjhGMUZDNjcKKzoxMDE0MDAwMEQ0NkQ2QzI3NkQ1QzA3M0Q3NUY3MEREMTVDMDc3QzgzNEYKKzoxMDE0MTAwMEYyNzFGQTc0NkVDNkQ0NzVEOTA0RTc0NjI4MkNCRjY0RkQKKzoxMDE0MjAwMDJGNkUyQ0QxRjM0QURBMjdCRjUzREVBMzE0QUFENTY1NTkKKzoxMDE0MzAwMEQ4N0ZENTQ4REI1NEQ4REZDRjVERUVEQjgwODc0RUVGMTkKKzoxMDE0NDAwMEEyNTFDQjUzMTEwRjc1OTkxQ0VGQTI4RUVCRjlCRDQ5MzgKKzoxMDE0NTAwMDIwOUZEMkVCN0RGQUJDMEU1N0VFREQ1ODM3MkI2M0RDQjQKKzoxMDE0NjAwMEJBMjlCMDNCQTQ2NEIwNzMyRUIzNjgwMTVFMkU0M0I4QjIKKzoxMDE0NzAwMEIyOTZFRDk2QzMwODNCNzBCNzI2Qzc3OTBFMTkxN0ZCRDUKKzoxMDE0ODAwMENEMEU2MzBDRUEzNzYxQjlCMTFFNUFEN0E1RjFGOUI4OTAKKzoxMDE0OTAwMEM2RTcxMzFBOUZERjQyOUQ4Q0RBQjdBOTFGNkQzN0Y1OTcKKzoxMDE0QTAwMEEzOUQwMUZBNEE3OTY1QkEzRDkxNTc1MkM2RjIyQkZBQ0IKKzoxMDE0QjAwMDkyMDBFQjc1QzFEOUQwMkY2OTZGOTIyMEQ3NUIzNEY5QjgKKzoxMDE0QzAwMDRERDBFQzRENTc2RTQ5OTU1Q0U3RTM3REFBQjQ3QURCQ0QKKzoxMDE0RDAwMDA1RUQxRTQ0M0ZBRkJFNkU2MEJERTA3NkRFOERDMjYzOUIKKzoxMDE0RTAwMDg1OUQ3RjQ5RTY5RDYyMzRDNTIzMDRDRjdCMjk5RUVEMEYKKzoxMDE0RjAwMDkwNkFCRDIzRjM2M0QyRjM3OTUzNjUxRTIwMEU1OEU0M0UKKzoxMDE1MDAwMEJDMDQ0NzBFRjQ2NEFENTY2RkVERjUxQTNDMjZENEE3MjMKKzoxMDE1MTAwMDYzQkFEMzYzRTA3RjM1RkREMkUxNDNGRkFEQjJCREFFMjgKKzoxMDE1MjAwMDk5NDIzMEI1QUYyOEYyN0MzNUYzQkFEMzg3NjFCRDYyRkEKKzoxMDE1MzAwMDMzNzA3REJCNDk4RTlGRDRGNEFGMjY0NURCNEYzQjhGODQKKzoxMDE1NDAwMEIwRkE5MkMwOEZDMEUxOTc5Mjk2MTBCQzI5QzJCRjRDRUUKKzoxMDE1NTAwMERBN0Q3RjNBREI2QkUxNEY5RjA3QkJBOEY4REUxNzRFQzEKKzoxMDE1NjAwMDhBMkIwQkE2MkUzMThFMDQzRDdDM0IwMTU3MTdFNDJDQjEKKzoxMDE1NzAwMDMxREU4Q0YxRDZGN0VEQzFFMzIzN0M0OThBMUQ3MEI2Q0MKKzoxMDE1ODAwMDFDMUZEMUJBNzM5ODMzMDgzNkJERjgzRUM2Q0Q4NjlDNzEKKzoxMDE1OTAwMDI1MDUwNENGQjE3ODhGRDc0MzZFN0UyQkU1Q0JCNkJGNDAKKzoxMDE1QTAwMEVEMENFODU2RDUyMUUzRjZCQ0ZENkQxNzVGODQ1RjZFNDgKKzoxMDE1QjAwMDhCNzRDMkJDRUZDQjRGNjY3QUFGRUREOEIzMDVGMkQ2RDEKKzoxMDE1QzAwMERCMkFFRjAzMzZCNUZDNjlFN0NGNzk5RTA1RDcyNEI0NTMKKzoxMDE1RDAwMEFGMkY1QkQwNzc1NjFFRkRFMzYyRTAzNTI3RENGNzA1QzEKKzoxMDE1RTAwMEUwODc4RUNFNjQzQ0U3MEM5NzdBRkRDOEQxQkMyNUQwNEQKKzoxMDE1RjAwMEQzREVCNkZEM0Y4MUZFQ0Q4OUE2ODAxNkY4QkM2MEUzNDAKKzoxMDE2MDAwMDNBNDRFNTgxMDkwNUQwRDNERUM4RUU4NUQ4QkZGNjc5MjYKKzoxMDE2MTAwMDhCMTM3MjVBNzkyMDNFMEZGNTgxNDNGOUIyMUU1RTMxNjkKKzoxMDE2MjAwMDcxNkIxMkZDQUNFMUU1N0RCQjdGOEVGQkQ1RTc2RDdDNzkKKzoxMDE2MzAwMDJGNTQxNzIzRTNCQzRBQjU3MURBNEFFNkRGQUVERDRGMUIKKzoxMDE2NDAwMDAzRUY3RDM2QkU5RkFENDBBRDhBRTA4QURENjk1Q0M3QTEKKzoxMDE2NTAwMDdGRTVFQjhGMTY4MjBGODVFQThFRERFOEZGRTIzOTlCOEUKKzoxMDE2NjAwMDAxNzQzODY5NzY0NUNGODAxRTlFMzQ3MUJFNTlBMUMxODAKKzoxMDE2NzAwMDE1QTc4NjRCN0NDMjdCOEE5ODdGQjE1QjkzRTA2NzJCNzIKKzoxMDE2ODAwMDg3RkZGNDc2RTAzRDQ3RERCQTEzRjk4RUQ4NjNFMUJCRkUKKzoxMDE2OTAwMDg5NzNGQjg4NkVCNEVFNUNCMzY5MEFCOERDQkIyRkQyRTkKKzoxMDE2QTAwMDA4NzlCOUEwNkM1REY4MTRGNjZGOTZGMzJFRDhCNjMyQUYKKzoxMDE2QjAwMDNEM0RDREUzMDVCRTQ3RjMwNEVDRDYwNTY1REJBMEZFNUEKKzoxMDE2QzAwMDczQ0Q3QkIyOTA4RjlFN0Y3RTBFRTdBNUJBRkNFQUZBQkYKKzoxMDE2RDAwMDUyRjk5QzY1OTA1RjY0NEI0MEY2QTg1MkZCNUJEODNEODUKKzoxMDE2RTAwMDIyODJGQzZEODUwNjlFM0ZGNDY0RUY1MzYyNjBGREY5MzMKKzoxMDE2RjAwMDE2OTNERjRDMzRBQUIwODg3NUQ2OTgwMTdEQTg0Q0JDRUYKKzoxMDE3MDAwMEI1MThFN0FCMzQzNEE2MjM2RUE5OThEQUIzMTA3QTcxMTIKKzoxMDE3MTAwMENFMjZBQzA5MzRFRjREQ0Q2RjU1MUU1QzMzMTdGMUVGN0IKKzoxMDE3MjAwMEY1RjBCOUEyRDlBMzRCMDlEMjdGNUQ2QUI3Nzk4M0VGRUYKKzoxMDE3MzAwMDI1NDNEQkY3RUE4NUZEQURCNDAxRjhERTE1MTY4RUUxMzEKKzoxMDE3NDAwMEY1RkRERTM0RkJBQTkxQTdENUM2NDhGQkYxM0VDRDZGNkYKKzoxMDE3NTAwMDIxM0JGNkI1RTZFRjE2QUQxRTNDQkYzRjNGODZCRjVGQUYKKzoxMDE3NjAwMDZCRUU0OTg3RkZEM0Y3MEZFNDZCN0VDM0Q4OTMwRTdCRjQKKzoxMDE3NzAwMDE1QkE2RTBFQzIxMUQ4OTExNzE0QjYyMzk1MDc5NTBGOUUKKzoxMDE3ODAwMDU0QTI1M0E1RDVFMzU1NDExNzYxRDZDRjY5QkNBMkM4NzEKKzoxMDE3OTAwMDc1MDlEMzM0QkFEM0RBMEQwNUM5RkNERENBMTY5QkNCNjMKKzoxMDE3QTAwMDQ2RUJBQUMyN0FBMjEwMTc1NTQ3RjY0NDIxREVFOTdEMUUKKzoxMDE3QjAwMDU5MTU0RDFBQkI2MkUzMzRGRUE0NjgyQzBCQUEzNzU2QTgKKzoxMDE3QzAwMEY4NEMyRTVCRDYxMDdDNDZGQzQ0RjM5NkUzNkZGQUZFOTEKKzoxMDE3RDAwMDMzMDUyOTdDOUVGMkY2NzBGRTlFQjBGNzRDODM5Qzk2RjIKKzoxMDE3RTAwMEVGMThCQzBFRTdCMjA3RTk1RjZGRkJBRUI4RTBCQzNDOTgKKzoxMDE3RjAwMDQ1QzMzQkEwN0NDMDdBMTJGOEZBQzMyNEYwQkREMjIwQzYKKzoxMDE4MDAwMEQ2RTFGRUYyM0NBREMxQkQyNkMxQzIyQTYxQkVGN0FDMzUKKzoxMDE4MTAwMEZDNkI0NDE4RTRFNUZDQTU2QUQ2REI1RUE1ODdFRERBMkYKKzoxMDE4MjAwMERCMDU3M0Q5MkVGNTlBN0FEOEFFQkQ3RUY0MkVCNjBGQUQKKzoxMDE4MzAwMEJEQzM3QTE2QzI0RUJENURCMDVDOEU4RkVDNTlFOEEwNzgKKzoxMDE4NDAwMEYxRkQzQTNDNDZCMERGN0ZFRjY4MEREQjhGMzlBQTdDQjMKKzoxMDE4NTAwMDU3MjE3Njk5RUNCMjFFQjRFMTU0M0RFNzE3MjY0NzcwNDQKKzoxMDE4NjAwMEZFN0RCQTQwQUJGNzBDRjA4N0YzMkU1RDZGN0E4NTYzOEYKKzoxMDE4NzAwMEZGNDFFODYxNzkwNEQ3NzUyODhFNkE3OTExRjFERTgyMUIKKzoxMDE4ODAwMDM4MjdERTZCOTQ2MzlEOTQwMzczRjA3RDYzNkNDQ0U1MjUKKzoxMDE4OTAwMDY1RTBDRjFEQTNERDQ1MDUzOUI4REZFQ0UxM0M4MkE0NEUKKzoxMDE4QTAwMDlBRkQ0REVERUYyQzlDNEYwNjRDN0RCQjYxQTdEMjQ3QjYKKzoxMDE4QjAwMEJCNjcxNzEwMUVENUU2RUVGNUQ5ODREMjQ1NTM0RjE3RjYKKzoxMDE4QzAwMDRBRTRCMzU1Njk4RkM0MUUyOTU3QkQ5OUJCRTQzRDhEQzkKKzoxMDE4RDAwMDc2NUY3OUI3NDY3RjQxNDk0QzIzRTQ0MjkxRkM3REJENTgKKzoxMDE4RTAwMEZEQzA1QkIwMkJCRERERTNEODFFODdFQUNEQjlGNkM3REUKKzoxMDE4RjAwMEEyNjAxRkZFNEM3RURDMTM5NEVGRkY3OUYxMUVCRTY3RTEKKzoxMDE5MDAwMDlEOEZGNzIwRDQyRTU5Mzc1ODFFRkFCRkJBODNGMzNFNjUKKzoxMDE5MTAwMEIxMjVBODFGNzJEODMwMTgwRTk1MjNDOEEzN0Y5MEREN0IKKzoxMDE5MjAwMEYxMzBEREI3NkI3QTU1OTVENzVEMEIzQTVDODVFNzExRTEKKzoxMDE5MzAwMEFDMDZDMUFGODVDMDIxRjM0NTg5OEMxM0I2QzNGRjEzMzQKKzoxMDE5NDAwMDNEQUFDN0Y4NEY3MTlFQkVERjI0NjBDN0Q3OTJGRjYyRTEKKzoxMDE5NTAwMEI4MkREQzhCN0NDNUIwOUZGQzUzQUNGNDRGRjAwQjU1MUQKKzoxMDE5NjAwMDUxREQ1QzlGRUE2REIzRjA3REVGNDMxRDlGMjRFMUZDRTgKKzoxMDE5NzAwMDI0ODc1Qzg3QTlFQTc4MjkwRUY5RkIzRTJENUYyMDNGN0EKKzoxMDE5ODAwMDE4QzdFRjYzREEzQUUyOTA3N0U4RkRENTA2NUYzQUYwRTAKKzoxMDE5OTAwMEEyODg4OEUzNzVCREJGNDZGNUE3MDNGRjJBQTUzQjBCQzgKKzoxMDE5QTAwMEUzRkJGMkVEREE3QzgyNTVDMDgyQ0Y1MUFENDg3RDE3NjIKKzoxMDE5QjAwMDFEMkFEQkYzNTBCRTNEQTlDOTJCRDk4NTJDN0VERkYxNTIKKzoxMDE5QzAwMEIyQUMwRkU4NzZBMDQyQjMyN0FGQTEzRjUzRUFCRDVEQUEKKzoxMDE5RDAwMEJGNTdBMkE1MTVEMEY3MjFFQzQzNDI4MTFFMTdBRkUwRjcKKzoxMDE5RTAwMEZBQ0RFMzA1MEUwOTZCRUI3OTVGNTk1RkUyRjFEQTU3NDcKKzoxMDE5RjAwMDJFNjRBNTY0NjI5RDM2MkZEODBFOEQxQkIwMkJEMEZGQjAKKzoxMDFBMDAwMDA0RDZGRjg3NEM3MTc0QUVDQTlEOEE3MzJERUM1NEU5REQKKzoxMDFBMTAwMDlBMjI5QTJFOTYxQjU3MTY3MURENEM3ODM4NkYwQkM1OUIKKzoxMDFBMjAwMDJCNTQ4RTI2MTc0ODNBNTUxQTg2MTVDNjA2RUQ3NzlFMTIKKzoxMDFBMzAwMDZDN0FDMjE0QjYzMzdFRDg5RDFGQzUzRTVBODQzQUM1MEYKKzoxMDFBNDAwMDBGNEJFNUJCODFBQkZFMjY1OENGNzE5RTFERDI4RTQzNTYKKzoxMDFBNTAwMDZEQUUxOEFFOTVFM0U1MkIxQUQ3QzcwRjgxNDcyODlFQzgKKzoxMDFBNjAwMDE1RUVDNkEyMzhDN0I1RkQzQUJFRTc2RDNBN0U3OUE2MzcKKzoxMDFBNzAwMDExQzE3NDk4QkZBNjY4MDRCNUNCQURGRjJDMURFNDc5RTUKKzoxMDFBODAwMENGNzc1OEZDRjBBQjE1QTUyQkQ3NDcwRjIxMzdEN0Y4RTgKKzoxMDFBOTAwMDgzMUQ0MUZFMkIwNUZDRjVGMkZEQzZGNUYwMEY2REFCODUKKzoxMDFBQTAwMDE1RkYyOUQ0OEIwNEU5NTUzM0VCMTdFOTRCOTA1RkI4NDgKKzoxMDFBQjAwMEI5MjBBNEVFNTBCRTc4MkNFMjZBRTE1RTNDMTY3RTg2MjgKKzoxMDFBQzAwMEY0NkFBMTczODhGQzkyMENFNDI4MDNCRjE5RjE3MDFCMUYKKzoxMDFBRDAwMDhBQ0Y1RjBBRTRCQkE0OUIwQkE0OUU2Rjk5RTkwQUMwNUUKKzoxMDFBRTAwMDZFQ0U1MDBEMUM4Nzg3RUVGNzY1ODE4QzI3QkFFMzIyRjYKKzoxMDFBRjAwMEVGRDdERjczODBEOTMzNTQ0OUI3NDQ0M0ZGREJEMEI3MDYKKzoxMDFCMDAwMEM0Qjg0ODA3RUU4MzBBRjNDM0U1QkNDMzM2M0JFQTM3RTMKKzoxMDFCMTAwMDgxQzM5N0I5QkUxQjc4Mzg2MkJFQkMzNzg4MTAyMzY5NzEKKzoxMDFCMjAwMEJDMkI2MTUyNTNCMDFGRjk3NUExM0M2Rjc4QjY4QzVCMkEKKzoxMDFCMzAwMEVBMzI0QzdGQkYzRTk0MTk3OUI1M0VDNDcxNDM2NjM4OTIKKzoxMDFCNDAwMERGOTdGNEI2N0ZDRTdFMkJEMDk5NjNDN0JENDY2RjM3NDMKKzoxMDFCNTAwMDY1ODdBNDRGNzU1RkZGNTcxQ0ZDNkI2RkU3NUZGODFEMkYKKzoxMDFCNjAwMDVBRUY1NzlGRjBGQkI0OEREQUZCQzBEN0RBQjVGNzVEQkIKKzoxMDFCNzAwMEREOEU0OEY0MDc4QTNGMkFDMkJDNEQ1QTNCNTAyNzkwNUQKKzoxMDFCODAwMEY1NjJCREQ1RjM1RkJEMUUxMDk0MDc4RjJFMUMzQTBGNzIKKzoxMDFCOTAwMDhFNzE0NzA0RDcwOTFDRjE0M0Q1NTU4MkVCMDRBOTY5MUUKKzoxMDFCQTAwMEIyNEU4MDE2NzU4MjU0OTNBQzEzMDA0NjlEMDAyREVBMDgKKzoxMDFCQjAwMDA0RTg0NzlEMDAzMEVBMDQ4MDUxMjcwMDhDM0EwMTVBMUUKKzoxMDFCQzAwMEQ0MDlEMEZGQzU3Q0Y5NUUyNjQwNDIyQ0VCOTcxMTZDRkUKKzoxMDFCRDAwMERGRUY2QjU2QkQ4OENGRUYzQjJDRUZBMUVFNkI1NEY4RDcKKzoxMDFCRTAwMDlERDY0NUZBM0VGQ0RDMzVFRjc1MEU2QUVGNzU3Q0RCNjEKKzoxMDFCRjAwMEY4NUVBRkFFNEQ3NTgyNTU3NUE2QkU2M0E4RUJENEI1NDEKKzoxMDFDMDAwMDJBQ0UzNUIwMkZGNUYzRjlGQjFCM0I3M0RFMkQ0NTdGNTQKKzoxMDFDMTAwMEIzQzk2OTcwODA0Rjk3RTI1MEFGQUFFQzZDRTZGQTUzRjMKKzoxMDFDMjAwMDQxRkM2MTMzRjNCNzQ1MTFBODk3REU2NTkxNzk2RThENUMKKzoxMDFDMzAwMDRBQkQ1M0Y4M0U5NEUzRTAxQTRCMzdFNzFGNTU3QjE1MzYKKzoxMDFDNDAwMDdCNTlGMDdERUU0RDlGQjExRDU4NkI4QjZBMDI5RTM1MUUKKzoxMDFDNTAwMDNFOUJCRDZDODhGNzFGN0MyRkVDMTA1N0VGOUI5N0M5RkMKKzoxMDFDNjAwMDI5QTIyNkEyODhFRjlCOTdFMTlFOTk1QUExN0U2NUU0NUUKKzoxMDFDNzAwMEZCNjM0QTRDODc0MzFFRjFBRTJBMDM2NkREMkVGNTNFMTgKKzoxMDFDODAwMEU0M0Q1NTY1NjdFQkZBNDQ3MUVEM0QzNDJBMDNFMDdGOEUKKzoxMDFDOTAwMEU4RkRCM0JCMzAzMkY2NEMzODBDODU5ODhDQjhBOUY4MDcKKzoxMDFDQTAwMEYxQjJGRDZERjRCREZFQUQxNjhFM0I1NkU2QkI5NzQzMUIKKzoxMDFDQjAwMDhFOEU5OTVDNUMyNzM5NzZEOEM2RjlEMUM3REJDNjBGMDIKKzoxMDFDQzAwMEFBOTM3Q0VFNzI1NzE3RjJGREZDNjhBRTVCQUMzMjI5MkEKKzoxMDFDRDAwMEVDOTdGMzhCQzdDNUYzQkI4MUUzMjZGNjNGMURBRTkyQUQKKzoxMDFDRTAwMDVBQ0M1QjM1QzlDMUY1QTk0MjhCQjg5RkY3RDFERTY5RTMKKzoxMDFDRjAwMDUxQ0JGQTU0Qjg1NkYxMUEwODVFMkM5QzY2RThDRjIyRjQKKzoxMDFEMDAwMDIyMUJDQjhCMjk2MjAzREU1MzJEMTJGMjdEODMyRTM3RUIKKzoxMDFEMTAwMEFCQjYyOTFDMTc3MEExMjAwRUY3OTI5MkJFOEIzQUZGMkEKKzoxMDFEMjAwMEVEMzJERTJGMkNCNUM4RjgzNUQxMjBFRkIzMTMzN0M5MEIKKzoxMDFEMzAwMEY3MkQzRjEyNkUzM0ZDRUQ3MkYyOEI2OEM5NEZGRUFFODkKKzoxMDFENDAwMDg3RkFEREUxQTM5MzY0N0NFRTg4QzdGRThCNEY5OEY4OTkKKzoxMDFENTAwMEJENkY2MUZDRjdEM0RERUNBRjBCRjgxRDgzRTJCRjQ3MkQKKzoxMDFENjAwMEJENzJDM0Y1RjUyN0Y0MURDMzMxOTNCNDJGNDQ0N0NFOUMKKzoxMDFENzAwMDhCQkEyMDk3NUM5RjcxNzM3QkEyQkU5Q0RCMTkzM0E1NDUKKzoxMDFEODAwMDlEQkVGQTJFOTE3ODY0MDdGRUUxN0RFRjIzNUY0QzhDQjcKKzoxMDFEOTAwMDhGNzRDMkRFRTk3QTdGQ0RGQkM0MzBEOUVBRUYxM0M3NzYKKzoxMDFEQTAwMDUwMkI4MkRFMjc2RTcxMzk3OEZGNDRDM0M5QTkwRUQwNEIKKzoxMDFEQjAwMEUzQUYxMTRFRDA0MzdGQTdCODY1NjZDOTJFRjBDOTE1QjEKKzoxMDFEQzAwMDI1M0NGODJFRUU1MUI2MTI1RDhCNzAxMDA1NzU2RTlGOTYKKzoxMDFERDAwMDRCNDVEREZBQjA2MkU3NzdEMUQ3RDhDOTZEMEZFMzFENjcKKzoxMDFERTAwMDRGNURBQTYyNTcxQ0E4ODc2RjJEOEMyM0JDOEI1MjkyMjMKKzoxMDFERjAwMDE5RUZCQTc2NTkyRjY1MEFDNUExOUVBRUU5ODNDQkRERUUKKzoxMDFFMDAwMDU2Mzg2MkEwN0Y4RUE2MTdCRDM0NUZDQUM5MkQ1RUM4NDIKKzoxMDFFMTAwMERCQjdBOEEzM0U4N0Y5MUU2MTczMzY2QkY5MUFGODNFNEIKKzoxMDFFMjAwMEU3ODYzMTVDNEZENUU1QTZCRjI1QkUwOTcyRjM0NkExMTIKKzoxMDFFMzAwMEY0MzNBNUE1RUY5ODEwMDc3NEU1QkE4RkUyRkMwQkNCM0QKKzoxMDFFNDAwMDNFN0IzODhFQ0YzNzc0MUQ4QkVDMjhERjRCODZENkIxQTYKKzoxMDFFNTAwMDc0QkJCQzVCQUI4M0MzN0UxQUI1M0FBQjUxQUJCMzFBNTAKKzoxMDFFNjAwMEI1M0FBQjUxQUJCMzFBQjUzQUFCNTFBQkIzMUFCNTNBQkQKKzoxMDFFNzAwMEFCNTFBQkIzMUFCNTNBQUI5MUVCNzcyQkI4N0RCQjdFQzgKKzoxMDFFODAwMDM1QjdEREY1MUUxRTBGQjJGRkVGNURDN0ZFODdENjQxRTkKKzoxMDFFOTAwMDNGQzJCQ0QwM0FBOEIwM0FBMkQ5OEY5MjdFQ0JGQTczOTcKKzoxMDFFQTAwMDQ4RERCMzc4Rjg5MjBENDRCRkZDMDZCMzEzNUQ3QTFEOEMKKzoxMDFFQjAwMDE0RUY5N0VGOEI2MDdCNzBCMTcwQzhGQUE3NEVCNzA4MkMKKzoxMDFFQzAwMEFFOTdGNjBCREIxNEQwM0YyRjYzOUNEMTQwRTM3RkQ1NTgKKzoxMDFFRDAwMEY4QTBENzFGQTExRjM4MUZGNDAzMkRGNEMzOTgzNkEwMTQKKzoxMDFFRTAwMDFGQ0Y5ODQ5ODVCM0E1QkZGN0IwQkZCNzMxNUZEN0FGNTQKKzoxMDFFRjAwMDIxRkI0MUYwNTI2MTFGNjQzRjJFODZEODBGNEEzQ0VFMTEKKzoxMDFGMDAwMDA2MUVDQjNBRTVCQjI2RkRGRDY2MUUzNTVGNEUxOUMyQTcKKzoxMDFGMTAwMDlFRjhBNDNEMTkxM0U2REI4N0VGOENBOTBERTNGN0MxMEEKKzoxMDFGMjAwMEM3QjRGNzU4QzczNkNBNzc3MTY1QTI4NEJGM0I4NDVERDIKKzoxMDFGMzAwMDg5MDIzRjk2MEVFRjdCRkY2OTlBQkY3NDczMDRDNzJEMjkKKzoxMDFGNDAwMEVCNDcyRTlCRjZCRkIxMkI5RjE1MEFBNkRCNkZFQUZENzAKKzoxMDFGNTAwMDk1MUYxMzJFMDU2MTUyRkUwQUNDMjIwM0Y3MzVDMjEwREQKKzoxMDFGNjAwMEM2N0E1MEE4NkU1MTcwM0ZCQUVBNUUzMTE5N0MyRUIwMjUKKzoxMDFGNzAwMDk0RUMwMDlFRjFEQUZEQjY4OEQ1RUFBREM2RUU4QTNENTYKKzoxMDFGODAwMDA0OUY4QzRCNzRFMjVFNkI3NEMyMjE4MUY3NEY4NTc1QTAKKzoxMDFGOTAwMEM1OTlCMDhCRkUzMUVFMDk0NTM5NzhCRkJDNTVDMUZBMDEKKzoxMDFGQTAwMEYwNEM3OUZFM0I4QUMzOUIyMDU3ODFDM0UzNzNDMEVGOUIKKzoxMDFGQjAwMDc5MTY0NzFCRUEwMENFQTI4NEE1QzhGM0U3NDUzQjcyMTkKKzoxMDFGQzAwMDUwMDc3MDc2OEQ5MjcwQkNBMzRENzEyMjk0NEQ1ODVBNzMKKzoxMDFGRDAwMEMwRUZDRkFDNUIzRkI2RTJERDlBMjJBMkU5NUM5NjYxMkUKKzoxMDFGRTAwMEVFMUM3Q0E3QTZGODUzOTkzNzhCM0VGNjYzMzcxN0M5Q0EKKzoxMDFGRjAwMEZDNkJDNDZCQzI4RjdCQUJCRTU5OTE3QzdGMjYzMjFEQkMKKzoxMDIwMDAwMDM5MThBN0I4RjJCQjQ1MjQxRjdGRkM5RUVCMTZBQzRGRDYKKzoxMDIwMTAwMEQ0RjA4Q0M3MkRBMjBBQUU3NkRCRDA5RUQwRUVGM0JBRjgKKzoxMDIwMjAwMDBDRUU1MkI0NDU1MTFFMjNGNzFCQkNEOTY4REYzNEY4QkYKKzoxMDIwMzAwMDdFOEM3RTkyRTcyMkVDNTdGNEQ4RTQ4OTE5MDQyNzVBNjMKKzoxMDIwNDAwMDdDNkMyNzNCNUNBRTVCQjFGRkFCMzM1REM1MTgwRkFENUQKKzoxMDIwNTAwMDlGODNCN0M4RjMwOTlGREIzMDJGRjQxRDk2Q0VDRkE1MjEKKzoxMDIwNjAwMDQ1NTJFRUNCOEFBNEZEOThCRTU2REVDNzg2RjJCREFDQzMKKzoxMDIwNzAwMEM4QTBEOUI3QkY4RjM3RTE1QjhBRUZFOUY4OEJBRDhCOEEKKzoxMDIwODAwMEIzODEwRkUxN0IyRkYwMjQ3QzE3NjI1QzQ0QzQ3MEJERTgKKzoxMDIwOTAwMEUzRkE3MkU2RTFFRjk1MTU0OUY5MjI3QjU2RjVCMUI0MDIKKzoxMDIwQTAwMDY3RENBNjFCQkRDMzEwM0Y4RUZBODU3NzE4RjAxREQ1REYKKzoxMDIwQjAwMEQ4NjdDM0JGQzM3OEQ2RDM2NzgzN0Y3RkY2QzEzRTFCODMKKzoxMDIwQzAwMEZBOUY3NUM5NzdEMkExRkIzNzE2QzlGNzEzRTlEM0ZCN0QKKzoxMDIwRDAwMDc4RkQ1OEZBNTYzN0M3RTk3REMzMTA0N0E1OTc3RkJDRUUKKzoxMDIwRTAwMDVFREVCQjY0QjA3RjE5QUJGOTk3QjFCRjQ4NjlFRjIxRTEKKzoxMDIwRjAwMDc5MUJGQjY0MzRERjZGOEI4MjU4MUVBRkI0NEEzREFENTEKKzoxMDIxMDAwMEZDNDVEOUExMzY2QUM3NkYyNzdDODNFMkFGMDk1RUMyNUUKKzoxMDIxMTAwMDdCNTA1QzY0RUM5N0VGMkQwOTA2OURGNjlBMTg4NkNDRUYKKzoxMDIxMjAwMDIyQkVBQTExRjJCREU1MjhDRDZFMjA2RTJCMjVCQjUwMzQKKzoxMDIxMzAwMDUzN0VGNDMyQkYwM0MwN0FFQzhGM0I1QkM4NUZCQjQ5NzAKKzoxMDIxNDAwMEMyRTRBRTkxOEYyRTlGQkZBNjhCRjNDM0VENTdGQkI1QjQKKzoxMDIxNTAwMDdDQjM3NTNERjI2NzhBREYwNkY1NTc5NjFERTk4MkJGQUQKKzoxMDIxNjAwMEE5REEzQkI4QkY2NkM1Njc5Q0M3NTJGQzM2QThGRkRFM0MKKzoxMDIxNzAwMDFGN0ZDMEVGNkNFQURBMDdGNzEzN0Y5RjAyOUY3NUZFOUYKKzoxMDIxODAwMDFFMzNGOTI2MjBERjNCNTYxM0U2OTRGRjdFQzBCNzEyQkMKKzoxMDIxOTAwMEZBREU1NDFEQzFFRjY3NzdGRDNBOEZFNTQ2RTczN0FEQUMKKzoxMDIxQTAwMDZGRkE3NkYyQjE5NkU3N0JGMjQ0MDZGNEUxOUJEQTVFRDEKKzoxMDIxQjAwMEQ4QTdCNDQxRjZDOUMzNzVCRUQ5OTE2Qzc3RUFCNEZDMEYKKzoxMDIxQzAwMEFBQjZDQ0NFN0UzRUIxRDZDQUY2QUI1MDBENzMwMkFFRTcKKzoxMDIxRDAwMDM1NEEzQjIzOEE1NUNENEVGOTU4RkY0RkRFM0U4Q0VCRjYKKzoxMDIxRTAwMDc5N0MwMEMwMzE5M0Y4REQ3MURDNUEwOUY3OERCMEIwMEQKKzoxMDIxRjAwMDdEMjgzNDk0NTRFRkExRjZBODYxMDVEQjgxMDRCQ0I4QjYKKzoxMDIyMDAwMDI0QkUzRjAzRkJBMDQyN0Y2NTVEQjVDRUVDNTNFNEZERTkKKzoxMDIyMTAwMEJFMjMwN0Y5QUU3RURGRDRCMEQxREI3QTEwRjlCMkUyOEIKKzoxMDIyMjAwMDdENzIxOUVBOEE3NzQ2RjBGRDQxMDBGNTQ2M0E0RkMzQzAKKzoxMDIyMzAwMDMwNjk0NzFCMTZBNEIzMUYwODg4OTJEMjk1ODg0M0U2REQKKzoxMDIyNDAwMDg3NzFGREIxNjE5OEUzNTFEQzI3MzY1NDRDRTQzOEZBQ0MKKzoxMDIyNTAwMEQwN0Y0QkJGREIzN0Q3RUE0NDFDRDUzMEQ5QjEwNkVGNkUKKzoxMDIyNjAwMDU1MUE3RUUxRTBGMTU3MTRCOTlGRTc1MTQ5OUY4NkI5QUQKKzoxMDIyNzAwMEYyRkMwRDE1MzE5Q0Y3RTg3QzY4Njg3NDhEQzRGREQ0QzAKKzoxMDIyODAwMENDMzFFRUZGMDBERjQ3NjlGNzczMERDOUQ0NEZFRDEzNzIKKzoxMDIyOTAwMDRBQzk4MjFGNjE5RjQ5MTJERjE5MzMxREFDNzdDNzE2RTcKKzoxMDIyQTAwMDRDN0M3NEI3ODNERDg5MUZGNzQ0NzVCMzIzMDdFNUM1RkMKKzoxMDIyQjAwMEZGMDMzQzc1OUQ4QjEwMzcwMDAwMDAwMDAwMDAwMDAwRkMKKzowODIyQzAwMDA1MDIwRDAwMDAwMDAwMDAwMgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggODgwOTRhZi4uZGMxN2FmZCAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTUwNywxMCArNTA3LDggQEAKIAlpbnQgbnJfcGFnZXM7CiAKIAlucl9wYWdlcyA9ICgocXVldWVfbWF4X3NlY3RvcnMocSkgPDwgOSkgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCWlmIChucl9wYWdlcyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKQotCQlucl9wYWdlcyA9IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpOwotCWlmIChucl9wYWdlcyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSkKLQkJbnJfcGFnZXMgPSBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSk7CisJaWYgKG5yX3BhZ2VzID4gcXVldWVfbWF4X3NlZ21lbnRzKHEpKQorCQlucl9wYWdlcyA9IHF1ZXVlX21heF9zZWdtZW50cyhxKTsKIAogCXJldHVybiBucl9wYWdlczsKIH0KQEAgLTU3NSw4ICs1NzMsNyBAQAogCSAqIG1ha2UgdGhpcyB0b28gY29tcGxleC4KIAkgKi8KIAotCXdoaWxlIChiaW8tPmJpX3BoeXNfc2VnbWVudHMgPj0gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkKLQkgICAgICAgfHwgYmlvLT5iaV9waHlzX3NlZ21lbnRzID49IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSkgeworCXdoaWxlIChiaW8tPmJpX3BoeXNfc2VnbWVudHMgPj0gcXVldWVfbWF4X3NlZ21lbnRzKHEpKSB7CiAKIAkJaWYgKHJldHJpZWRfc2VnbWVudHMpCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA0OTUwM2QyLi5iYzAwMjVjIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDYgKzEsNyBAQAogVmVyc2lvbiAxLjYyCiAtLS0tLS0tLS0tLS0KLUFkZCBzb2Nrb3B0PVRDUF9OT0RFTEFZIG1vdW50IG9wdGlvbi4KK0FkZCBzb2Nrb3B0PVRDUF9OT0RFTEFZIG1vdW50IG9wdGlvbi4gRUEgKHhhdHRyKSByb3V0aW5lcyBoYXJkZW5lZAordG8gbW9yZSBzdHJpY3RseSBoYW5kbGUgY29ycnVwdCBmcmFtZXMuCiAKIFZlcnNpb24gMS42MQogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggZWQ3NTFiYi4uYTFjODE3ZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMjA1LDcgKzIwNSw3IEBACiBzdHJ1Y3QgY2lmc1Nlc0luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgc21iX3Nlc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgdGNvbl9saXN0OwotCXN0cnVjdCBzZW1hcGhvcmUgc2VzU2VtOworCXN0cnVjdCBtdXRleCBzZXNzaW9uX211dGV4OwogI2lmIDAKIAlzdHJ1Y3QgY2lmc1VpZEluZm8gKnVpZEluZm87CS8qIHBvaW50ZXIgdG8gdXNlciBpbmZvICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3BkdS5oIGIvZnMvY2lmcy9jaWZzcGR1LmgKaW5kZXggMzg3NzczNy4uMTRkMDM2ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTQxNSwxMCArNDE1LDEwIEBACiAJX191OCBXb3JkQ291bnQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIHNtYl9oZHIgcmV0cmlldmUgdGhlIHZhbHVlIG9mIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgQkNDKHNtYl92YXIpICgqKF9fdTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIHNtYl92YXItPldvcmRDb3VudCkpKQotI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCooX19sZTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIHNtYl92YXItPldvcmRDb3VudCkpKQorI2RlZmluZSBCQ0Moc21iX3ZhcikgKCooX191MTYgKikoKGNoYXIgKikoc21iX3ZhcikgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiAoc21iX3ZhciktPldvcmRDb3VudCkpKQorI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCooX19sZTE2ICopKChjaGFyICopKHNtYl92YXIpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyICogKHNtYl92YXIpLT5Xb3JkQ291bnQpKSkKIC8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIHRoZSBwb2ludGVyIHRvIHRoZSBieXRlIGFyZWEgKi8KLSNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBzbWJfdmFyLT5Xb3JkQ291bnQpICsgMikKKyNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKShzbWJfdmFyKSArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIChzbWJfdmFyKS0+V29yZENvdW50KSArIDIpCiAKIC8qCiAgKiBDb21wdXRlciBOYW1lIExlbmd0aCAoc2luY2UgTmV0YmlvcyBuYW1lIHdhcyBsZW5ndGggMTYgd2l0aCBsYXN0IGJ5dGUgMHgyMCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDU2NDY3MjcuLjg4ZTJiYzQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtMzYzLDEzICszNjMsMTAgQEAKIAkJCV9fdTMyIGZpbHRlciwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBtdWx0aXNob3QsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOwogZXh0ZXJuIHNzaXplX3QgQ0lGU1NNQlFBbGxFQXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIGNoYXIgKkVBRGF0YSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICplYV9uYW1lLCBjaGFyICpFQURhdGEsCiAJCQlzaXplX3QgYnVmc2l6ZSwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAogCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwotZXh0ZXJuIHNzaXplX3QgQ0lGU1NNQlF1ZXJ5RUEoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZWFfbmFtZSwKLQkJdW5zaWduZWQgY2hhciAqZWFfdmFsdWUsIHNpemVfdCBidWZfc2l6ZSwKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNTTUJTZXRFQShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCBjaGFyICpmaWxlTmFtZSwgY29uc3QgY2hhciAqZWFfbmFtZSwKIAkJY29uc3Qgdm9pZCAqZWFfdmFsdWUsIGNvbnN0IF9fdTE2IGVhX3ZhbHVlX2xlbiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTQxNDQxZC4uOWQxN2RmMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTE3MCwxOSArMTcwLDE5IEBACiAJICogbmVlZCB0byBwcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdHJ5aW5nIHRvIHNpbXVsdGFuZW91c2x5CiAJICogcmVjb25uZWN0IHRoZSBzYW1lIFNNQiBzZXNzaW9uCiAJICovCi0JZG93bigmc2VzLT5zZXNTZW0pOworCW11dGV4X2xvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJaWYgKHNlcy0+bmVlZF9yZWNvbm5lY3QpCiAJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHNlcywgbmxzX2NvZGVwYWdlKTsKIAogCS8qIGRvIHdlIG5lZWQgdG8gcmVjb25uZWN0IHRjb24/ICovCiAJaWYgKHJjIHx8ICF0Y29uLT5uZWVkX3JlY29ubmVjdCkgewotCQl1cCgmc2VzLT5zZXNTZW0pOworCQltdXRleF91bmxvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCW1hcmtfb3Blbl9maWxlc19pbnZhbGlkKHRjb24pOwogCXJjID0gQ0lGU1RDb24oMCwgc2VzLCB0Y29uLT50cmVlTmFtZSwgdGNvbiwgbmxzX2NvZGVwYWdlKTsKLQl1cCgmc2VzLT5zZXNTZW0pOworCW11dGV4X3VubG9jaygmc2VzLT5zZXNzaW9uX211dGV4KTsKIAljRllJKDEsICgicmVjb25uZWN0IHRjb24gcmMgPSAlZCIsIHJjKSk7CiAKIAlpZiAocmMpCkBAIC03MDAsMTMgKzcwMCwxMyBAQAogCWlmICghc2VzIHx8ICFzZXMtPnNlcnZlcikKIAkJcmV0dXJuIC1FSU87CiAKLQlkb3duKCZzZXMtPnNlc1NlbSk7CisJbXV0ZXhfbG9jaygmc2VzLT5zZXNzaW9uX211dGV4KTsKIAlpZiAoc2VzLT5uZWVkX3JlY29ubmVjdCkKIAkJZ290byBzZXNzaW9uX2FscmVhZHlfZGVhZDsgLyogbm8gbmVlZCB0byBzZW5kIFNNQmxvZ29mZiBpZiB1aWQKIAkJCQkJICAgICAgYWxyZWFkeSBjbG9zZWQgZHVlIHRvIHJlY29ubmVjdCAqLwogCXJjID0gc21hbGxfc21iX2luaXQoU01CX0NPTV9MT0dPRkZfQU5EWCwgMiwgTlVMTCwgKHZvaWQgKiopJnBTTUIpOwogCWlmIChyYykgewotCQl1cCgmc2VzLT5zZXNTZW0pOworCQltdXRleF91bmxvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTcyMSw3ICs3MjEsNyBAQAogCXBTTUItPkFuZFhDb21tYW5kID0gMHhGRjsKIAlyYyA9IFNlbmRSZWNlaXZlTm9Sc3AoeGlkLCBzZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLCAwKTsKIHNlc3Npb25fYWxyZWFkeV9kZWFkOgotCXVwKCZzZXMtPnNlc1NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXMtPnNlc3Npb25fbXV0ZXgpOwogCiAJLyogaWYgc2Vzc2lvbiBkZWFkIHRoZW4gd2UgZG8gbm90IG5lZWQgdG8gZG8gdWxvZ29mZiwKIAkJc2luY2Ugc2VydmVyIGNsb3NlZCBzbWIgc2Vzc2lvbiwgbm8gc2Vuc2UgcmVwb3J0aW5nCkBAIC01MjY5LDIyICs1MjY5LDM0IEBACiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAlyZXR1cm4gcmM7CiB9CisKICNpZmRlZiBDT05GSUdfQ0lGU19YQVRUUgorLyoKKyAqIERvIGEgcGF0aC1iYXNlZCBRVUVSWV9BTExfRUFTIGNhbGwgYW5kIHBhcnNlIHRoZSByZXN1bHQuIFRoaXMgaXMgYSBjb21tb24KKyAqIGZ1bmN0aW9uIHVzZWQgYnkgbGlzdHhhdHRyIGFuZCBnZXR4YXR0ciB0eXBlIGNhbGxzLiBXaGVuIGVhX25hbWUgaXMgc2V0LAorICogaXQgbG9va3MgZm9yIHRoYXQgYXR0cmlidXRlIG5hbWUgYW5kIHN0dWZmcyB0aGF0IHZhbHVlIGludG8gdGhlIEVBRGF0YQorICogYnVmZmVyLiBXaGVuIGVhX25hbWUgaXMgTlVMTCwgaXQgc3R1ZmZzIGEgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMgaW50byB0aGUKKyAqIGJ1ZmZlci4gSW4gYm90aCBjYXNlcywgdGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIHJlc3VsdGluZyBkYXRhIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gSWYgRUFEYXRhIGlzIGEgTlVMTCBwb2ludGVyIHRoZW4KKyAqIHRoZSBkYXRhIGlzbid0IGNvcGllZCB0byBpdCwgYnV0IHRoZSBsZW5ndGggaXMgcmV0dXJuZWQuCisgKi8KIHNzaXplX3QKIENJRlNTTUJRQWxsRUFzKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAotCQkgY2hhciAqRUFEYXRhLCBzaXplX3QgYnVmX3NpemUsCi0JCSBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZWFfbmFtZSwKKwkJY2hhciAqRUFEYXRhLCBzaXplX3QgYnVmX3NpemUsCisJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCQkvKiBCQiBhc3N1bWVzIG9uZSBzZXR1cCB3b3JkICovCiAJVFJBTlNBQ1RJT04yX1FQSV9SRVEgKnBTTUIgPSBOVUxMOwogCVRSQU5TQUNUSU9OMl9RUElfUlNQICpwU01CciA9IE5VTEw7CiAJaW50IHJjID0gMDsKIAlpbnQgYnl0ZXNfcmV0dXJuZWQ7Ci0JaW50IG5hbWVfbGVuOworCWludCBsaXN0X2xlbjsKKwlzdHJ1Y3QgZmVhbGlzdCAqZWFfcmVzcG9uc2VfZGF0YTsKIAlzdHJ1Y3QgZmVhICp0ZW1wX2ZlYTsKIAljaGFyICp0ZW1wX3B0cjsKLQlfX3UxNiBwYXJhbXMsIGJ5dGVfY291bnQ7CisJY2hhciAqZW5kX29mX3NtYjsKKwlfX3UxNiBwYXJhbXMsIGJ5dGVfY291bnQsIGRhdGFfb2Zmc2V0OwogCiAJY0ZZSSgxLCAoIkluIFF1ZXJ5IEFsbCBFQXMgcGF0aCAlcyIsIHNlYXJjaE5hbWUpKTsKIFFBbGxFQXNSZXRyeToKQEAgLTUyOTQsMjIgKzUzMDYsMjIgQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKLQkJbmFtZV9sZW4gPQorCQlsaXN0X2xlbiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsCiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7Ci0JCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KLQkJbmFtZV9sZW4gKj0gMjsKKwkJbGlzdF9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLworCQlsaXN0X2xlbiAqPSAyOwogCX0gZWxzZSB7CS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KLQkJbmFtZV9sZW4gPSBzdHJubGVuKHNlYXJjaE5hbWUsIFBBVEhfTUFYKTsKLQkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwotCQlzdHJuY3B5KHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCBuYW1lX2xlbik7CisJCWxpc3RfbGVuID0gc3RybmxlbihzZWFyY2hOYW1lLCBQQVRIX01BWCk7CisJCWxpc3RfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KKwkJc3RybmNweShwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgbGlzdF9sZW4pOwogCX0KIAotCXBhcmFtcyA9IDIgLyogbGV2ZWwgKi8gKyA0IC8qIHJlc2VydmVkICovICsgbmFtZV9sZW4gLyogaW5jbHVkZXMgTlVMICovOworCXBhcmFtcyA9IDIgLyogbGV2ZWwgKi8gKyA0IC8qIHJlc2VydmVkICovICsgbGlzdF9sZW4gLyogaW5jbHVkZXMgTlVMICovOwogCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gMDsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwotCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDQwMDApOworCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KENJRlNNYXhCdWZTaXplKTsKIAlwU01CLT5NYXhTZXR1cENvdW50ID0gMDsKIAlwU01CLT5SZXNlcnZlZCA9IDA7CiAJcFNNQi0+RmxhZ3MgPSAwOwpAQCAtNTMzNCw4NSArNTM0NiwxMTQgQEAKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFF1ZXJ5QWxsRUFzID0gJWQiLCByYykpOwotCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KLQkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CisJCWdvdG8gUUFsbEVBc091dDsKKwl9CiAKLQkJLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KLQkJLyogQkIgd2UgbmVlZCB0byBpbXByb3ZlIHRoZSB2YWxpZGl0eSBjaGVja2luZwotCQlvZiB0aGVzZSB0cmFuczIgcmVzcG9uc2VzICovCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDQpKQotCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCi0JICAgLyogZWxzZSBpZiAocEZpbmREYXRhKXsKLQkJCW1lbWNweSgoY2hhciAqKSBwRmluZERhdGEsCi0JCQkgICAgICAgKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wgKwotCQkJICAgICAgIGRhdGFfb2Zmc2V0LCBrbCk7Ci0JCX0qLyBlbHNlIHsKLQkJCS8qIGNoZWNrIHRoYXQgbGVuZ3RoIG9mIGxpc3QgaXMgbm90IG1vcmUgdGhhbiBiY2MgKi8KLQkJCS8qIGNoZWNrIHRoYXQgZWFjaCBlbnRyeSBkb2VzIG5vdCBnbyBiZXlvbmQgbGVuZ3RoCi0JCQkgICBvZiBsaXN0ICovCi0JCQkvKiBjaGVjayB0aGF0IGVhY2ggZWxlbWVudCBvZiBlYWNoIGVudHJ5IGRvZXMgbm90Ci0JCQkgICBnbyBiZXlvbmQgZW5kIG9mIGxpc3QgKi8KLQkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwotCQkJc3RydWN0IGZlYWxpc3QgKmVhX3Jlc3BvbnNlX2RhdGE7Ci0JCQlyYyA9IDA7Ci0JCQkvKiB2YWxpZGF0ZV90cmFuczJfb2Zmc2V0cygpICovCi0JCQkvKiBCQiBjaGVjayBpZiBzdGFydCBvZiBzbWIgKyBkYXRhX29mZnNldCA+ICZiY2MrIGJjYyAqLwotCQkJZWFfcmVzcG9uc2VfZGF0YSA9IChzdHJ1Y3QgZmVhbGlzdCAqKQotCQkJCSgoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wpICsKLQkJCQlkYXRhX29mZnNldCk7Ci0JCQluYW1lX2xlbiA9IGxlMzJfdG9fY3B1KGVhX3Jlc3BvbnNlX2RhdGEtPmxpc3RfbGVuKTsKLQkJCWNGWUkoMSwgKCJlYSBsZW5ndGggJWQiLCBuYW1lX2xlbikpOwotCQkJaWYgKG5hbWVfbGVuIDw9IDgpIHsKLQkJCS8qIHJldHVybmVkIEVBIHNpemUgemVyb2VkIGF0IHRvcCBvZiBmdW5jdGlvbiAqLwotCQkJCWNGWUkoMSwgKCJlbXB0eSBFQSBsaXN0IHJldHVybmVkIGZyb20gc2VydmVyIikpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBhY2NvdW50IGZvciBlYSBsaXN0IGxlbiAqLwotCQkJCW5hbWVfbGVuIC09IDQ7Ci0JCQkJdGVtcF9mZWEgPSBlYV9yZXNwb25zZV9kYXRhLT5saXN0OwotCQkJCXRlbXBfcHRyID0gKGNoYXIgKil0ZW1wX2ZlYTsKLQkJCQl3aGlsZSAobmFtZV9sZW4gPiAwKSB7Ci0JCQkJCV9fdTE2IHZhbHVlX2xlbjsKLQkJCQkJbmFtZV9sZW4gLT0gNDsKLQkJCQkJdGVtcF9wdHIgKz0gNDsKLQkJCQkJcmMgKz0gdGVtcF9mZWEtPm5hbWVfbGVuOwotCQkJCS8qIGFjY291bnQgZm9yIHByZWZpeCB1c2VyLiBhbmQgdHJhaWxpbmcgbnVsbCAqLwotCQkJCQlyYyA9IHJjICsgNSArIDE7Ci0JCQkJCWlmIChyYyA8IChpbnQpYnVmX3NpemUpIHsKLQkJCQkJCW1lbWNweShFQURhdGEsICJ1c2VyLiIsIDUpOwotCQkJCQkJRUFEYXRhICs9IDU7Ci0JCQkJCQltZW1jcHkoRUFEYXRhLCB0ZW1wX3B0ciwKLQkJCQkJCSAgICAgICB0ZW1wX2ZlYS0+bmFtZV9sZW4pOwotCQkJCQkJRUFEYXRhICs9IHRlbXBfZmVhLT5uYW1lX2xlbjsKLQkJCQkJCS8qIG51bGwgdGVybWluYXRlIG5hbWUgKi8KLQkJCQkJCSpFQURhdGEgPSAwOwotCQkJCQkJRUFEYXRhID0gRUFEYXRhICsgMTsKLQkJCQkJfSBlbHNlIGlmIChidWZfc2l6ZSA9PSAwKSB7Ci0JCQkJCQkvKiBza2lwIGNvcHkgLSBjYWxjIHNpemUgb25seSAqLwotCQkJCQl9IGVsc2UgewotCQkJCQkJLyogc3RvcCBiZWZvcmUgb3ZlcnJ1biBidWZmZXIgKi8KLQkJCQkJCXJjID0gLUVSQU5HRTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW5hbWVfbGVuIC09IHRlbXBfZmVhLT5uYW1lX2xlbjsKLQkJCQkJdGVtcF9wdHIgKz0gdGVtcF9mZWEtPm5hbWVfbGVuOwotCQkJCQkvKiBhY2NvdW50IGZvciB0cmFpbGluZyBudWxsICovCi0JCQkJCW5hbWVfbGVuLS07Ci0JCQkJCXRlbXBfcHRyKys7Ci0JCQkJCXZhbHVlX2xlbiA9Ci0JCQkJCSAgICAgIGxlMTZfdG9fY3B1KHRlbXBfZmVhLT52YWx1ZV9sZW4pOwotCQkJCQluYW1lX2xlbiAtPSB2YWx1ZV9sZW47Ci0JCQkJCXRlbXBfcHRyICs9IHZhbHVlX2xlbjsKLQkJCQkJLyogQkIgY2hlY2sgdGhhdCB0ZW1wX3B0ciBpcyBzdGlsbAotCQkJCQkgICAgICB3aXRoaW4gdGhlIFNNQiBCQiovCiAKLQkJCQkJLyogbm8gdHJhaWxpbmcgbnVsbCB0byBhY2NvdW50IGZvcgotCQkJCQkgICBpbiB2YWx1ZSBsZW4gKi8KLQkJCQkJLyogZ28gb24gdG8gbmV4dCBFQSAqLwotCQkJCQl0ZW1wX2ZlYSA9IChzdHJ1Y3QgZmVhICopdGVtcF9wdHI7CisJLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KKwkvKiBCQiB3ZSBuZWVkIHRvIGltcHJvdmUgdGhlIHZhbGlkaXR5IGNoZWNraW5nCisJb2YgdGhlc2UgdHJhbnMyIHJlc3BvbnNlcyAqLworCisJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CisJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgNCkpIHsKKwkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCisJCWdvdG8gUUFsbEVBc091dDsKKwl9CisKKwkvKiBjaGVjayB0aGF0IGxlbmd0aCBvZiBsaXN0IGlzIG5vdCBtb3JlIHRoYW4gYmNjICovCisJLyogY2hlY2sgdGhhdCBlYWNoIGVudHJ5IGRvZXMgbm90IGdvIGJleW9uZCBsZW5ndGgKKwkgICBvZiBsaXN0ICovCisJLyogY2hlY2sgdGhhdCBlYWNoIGVsZW1lbnQgb2YgZWFjaCBlbnRyeSBkb2VzIG5vdAorCSAgIGdvIGJleW9uZCBlbmQgb2YgbGlzdCAqLworCS8qIHZhbGlkYXRlX3RyYW5zMl9vZmZzZXRzKCkgKi8KKwkvKiBCQiBjaGVjayBpZiBzdGFydCBvZiBzbWIgKyBkYXRhX29mZnNldCA+ICZiY2MrIGJjYyAqLworCisJZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CisJZWFfcmVzcG9uc2VfZGF0YSA9IChzdHJ1Y3QgZmVhbGlzdCAqKQorCQkJCSgoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wpICsgZGF0YV9vZmZzZXQpOworCisJbGlzdF9sZW4gPSBsZTMyX3RvX2NwdShlYV9yZXNwb25zZV9kYXRhLT5saXN0X2xlbik7CisJY0ZZSSgxLCAoImVhIGxlbmd0aCAlZCIsIGxpc3RfbGVuKSk7CisJaWYgKGxpc3RfbGVuIDw9IDgpIHsKKwkJY0ZZSSgxLCAoImVtcHR5IEVBIGxpc3QgcmV0dXJuZWQgZnJvbSBzZXJ2ZXIiKSk7CisJCWdvdG8gUUFsbEVBc091dDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgbGlzdF9sZW4gZG9lc24ndCBnbyBwYXN0IGVuZCBvZiBTTUIgKi8KKwllbmRfb2Zfc21iID0gKGNoYXIgKilwQnl0ZUFyZWEoJnBTTUJyLT5oZHIpICsgQkNDKCZwU01Cci0+aGRyKTsKKwlpZiAoKGNoYXIgKillYV9yZXNwb25zZV9kYXRhICsgbGlzdF9sZW4gPiBlbmRfb2Zfc21iKSB7CisJCWNGWUkoMSwgKCJFQSBsaXN0IGFwcGVhcnMgdG8gZ28gYmV5b25kIFNNQiIpKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIFFBbGxFQXNPdXQ7CisJfQorCisJLyogYWNjb3VudCBmb3IgZWEgbGlzdCBsZW4gKi8KKwlsaXN0X2xlbiAtPSA0OworCXRlbXBfZmVhID0gZWFfcmVzcG9uc2VfZGF0YS0+bGlzdDsKKwl0ZW1wX3B0ciA9IChjaGFyICopdGVtcF9mZWE7CisJd2hpbGUgKGxpc3RfbGVuID4gMCkgeworCQl1bnNpZ25lZCBpbnQgbmFtZV9sZW47CisJCV9fdTE2IHZhbHVlX2xlbjsKKworCQlsaXN0X2xlbiAtPSA0OworCQl0ZW1wX3B0ciArPSA0OworCQkvKiBtYWtlIHN1cmUgd2UgY2FuIHJlYWQgbmFtZV9sZW4gYW5kIHZhbHVlX2xlbiAqLworCQlpZiAobGlzdF9sZW4gPCAwKSB7CisJCQljRllJKDEsICgiRUEgZW50cnkgZ29lcyBiZXlvbmQgbGVuZ3RoIG9mIGxpc3QiKSk7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIFFBbGxFQXNPdXQ7CisJCX0KKworCQluYW1lX2xlbiA9IHRlbXBfZmVhLT5uYW1lX2xlbjsKKwkJdmFsdWVfbGVuID0gbGUxNl90b19jcHUodGVtcF9mZWEtPnZhbHVlX2xlbik7CisJCWxpc3RfbGVuIC09IG5hbWVfbGVuICsgMSArIHZhbHVlX2xlbjsKKwkJaWYgKGxpc3RfbGVuIDwgMCkgeworCQkJY0ZZSSgxLCAoIkVBIGVudHJ5IGdvZXMgYmV5b25kIGxlbmd0aCBvZiBsaXN0IikpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBRQWxsRUFzT3V0OworCQl9CisKKwkJaWYgKGVhX25hbWUpIHsKKwkJCWlmIChzdHJuY21wKGVhX25hbWUsIHRlbXBfcHRyLCBuYW1lX2xlbikgPT0gMCkgeworCQkJCXRlbXBfcHRyICs9IG5hbWVfbGVuICsgMTsKKwkJCQlyYyA9IHZhbHVlX2xlbjsKKwkJCQlpZiAoYnVmX3NpemUgPT0gMCkKKwkJCQkJZ290byBRQWxsRUFzT3V0OworCQkJCWlmICgoc2l6ZV90KXZhbHVlX2xlbiA+IGJ1Zl9zaXplKSB7CisJCQkJCXJjID0gLUVSQU5HRTsKKwkJCQkJZ290byBRQWxsRUFzT3V0OwogCQkJCX0KKwkJCQltZW1jcHkoRUFEYXRhLCB0ZW1wX3B0ciwgdmFsdWVfbGVuKTsKKwkJCQlnb3RvIFFBbGxFQXNPdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBhY2NvdW50IGZvciBwcmVmaXggdXNlci4gYW5kIHRyYWlsaW5nIG51bGwgKi8KKwkJCXJjICs9ICg1ICsgMSArIG5hbWVfbGVuKTsKKwkJCWlmIChyYyA8IChpbnQpIGJ1Zl9zaXplKSB7CisJCQkJbWVtY3B5KEVBRGF0YSwgInVzZXIuIiwgNSk7CisJCQkJRUFEYXRhICs9IDU7CisJCQkJbWVtY3B5KEVBRGF0YSwgdGVtcF9wdHIsIG5hbWVfbGVuKTsKKwkJCQlFQURhdGEgKz0gbmFtZV9sZW47CisJCQkJLyogbnVsbCB0ZXJtaW5hdGUgbmFtZSAqLworCQkJCSpFQURhdGEgPSAwOworCQkJCSsrRUFEYXRhOworCQkJfSBlbHNlIGlmIChidWZfc2l6ZSA9PSAwKSB7CisJCQkJLyogc2tpcCBjb3B5IC0gY2FsYyBzaXplIG9ubHkgKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogc3RvcCBiZWZvcmUgb3ZlcnJ1biBidWZmZXIgKi8KKwkJCQlyYyA9IC1FUkFOR0U7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJdGVtcF9wdHIgKz0gbmFtZV9sZW4gKyAxICsgdmFsdWVfbGVuOworCQl0ZW1wX2ZlYSA9IChzdHJ1Y3QgZmVhICopdGVtcF9wdHI7CiAJfQorCisJLyogZGlkbid0IGZpbmQgdGhlIG5hbWVkIGF0dHJpYnV0ZSAqLworCWlmIChlYV9uYW1lKQorCQlyYyA9IC1FTk9EQVRBOworCitRQWxsRUFzT3V0OgogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAJaWYgKHJjID09IC1FQUdBSU4pCiAJCWdvdG8gUUFsbEVBc1JldHJ5OwpAQCAtNTQyMCwxNTUgKzU0NjEsNiBAQAogCXJldHVybiAoc3NpemVfdClyYzsKIH0KIAotc3NpemVfdCBDSUZTU01CUXVlcnlFQShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICplYV9uYW1lLAotCQl1bnNpZ25lZCBjaGFyICplYV92YWx1ZSwgc2l6ZV90IGJ1Zl9zaXplLAotCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKLXsKLQlUUkFOU0FDVElPTjJfUVBJX1JFUSAqcFNNQiA9IE5VTEw7Ci0JVFJBTlNBQ1RJT04yX1FQSV9SU1AgKnBTTUJyID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCWludCBieXRlc19yZXR1cm5lZDsKLQlpbnQgbmFtZV9sZW47Ci0Jc3RydWN0IGZlYSAqdGVtcF9mZWE7Ci0JY2hhciAqdGVtcF9wdHI7Ci0JX191MTYgcGFyYW1zLCBieXRlX2NvdW50OwotCi0JY0ZZSSgxLCAoIkluIFF1ZXJ5IEVBIHBhdGggJXMiLCBzZWFyY2hOYW1lKSk7Ci1RRUFSZXRyeToKLQlyYyA9IHNtYl9pbml0KFNNQl9DT01fVFJBTlNBQ1RJT04yLCAxNSwgdGNvbiwgKHZvaWQgKiopICZwU01CLAotCQkgICAgICAodm9pZCAqKikgJnBTTUJyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7Ci0JCW5hbWVfbGVuID0KLQkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwKLQkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKLQkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwotCQluYW1lX2xlbiAqPSAyOwotCX0gZWxzZSB7CS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KLQkJbmFtZV9sZW4gPSBzdHJubGVuKHNlYXJjaE5hbWUsIFBBVEhfTUFYKTsKLQkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwotCQlzdHJuY3B5KHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCBuYW1lX2xlbik7Ci0JfQotCi0JcGFyYW1zID0gMiAvKiBsZXZlbCAqLyArIDQgLyogcmVzZXJ2ZWQgKi8gKyBuYW1lX2xlbiAvKiBpbmNsdWRlcyBOVUwgKi87Ci0JcFNNQi0+VG90YWxEYXRhQ291bnQgPSAwOwotCXBTTUItPk1heFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYoMik7Ci0JLyogQkIgZmluZCBleGFjdCBtYXggU01CIFBEVSBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCi0JcFNNQi0+TWF4RGF0YUNvdW50ID0gY3B1X3RvX2xlMTYoNDAwMCk7Ci0JcFNNQi0+TWF4U2V0dXBDb3VudCA9IDA7Ci0JcFNNQi0+UmVzZXJ2ZWQgPSAwOwotCXBTTUItPkZsYWdzID0gMDsKLQlwU01CLT5UaW1lb3V0ID0gMDsKLQlwU01CLT5SZXNlcnZlZDIgPSAwOwotCXBTTUItPlBhcmFtZXRlck9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldG9mKAotCQlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfcXBpX3JlcSwgSW5mb3JtYXRpb25MZXZlbCkgLSA0KTsKLQlwU01CLT5EYXRhQ291bnQgPSAwOwotCXBTTUItPkRhdGFPZmZzZXQgPSAwOwotCXBTTUItPlNldHVwQ291bnQgPSAxOwotCXBTTUItPlJlc2VydmVkMyA9IDA7Ci0JcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9RVUVSWV9QQVRIX0lORk9STUFUSU9OKTsKLQlieXRlX2NvdW50ID0gcGFyYW1zICsgMSAvKiBwYWQgKi8gOwotCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwotCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKLQlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX0lORk9fUVVFUllfQUxMX0VBUyk7Ci0JcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKLQlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKLQotCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAotCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKLQlpZiAocmMpIHsKLQkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gUXVlcnkgRUEgPSAlZCIsIHJjKSk7Ci0JfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwotCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKLQotCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLwotCQkvKiBCQiB3ZSBuZWVkIHRvIGltcHJvdmUgdGhlIHZhbGlkaXR5IGNoZWNraW5nCi0JCW9mIHRoZXNlIHRyYW5zMiByZXNwb25zZXMgKi8KLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgNCkpCi0JCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KLQkgICAvKiBlbHNlIGlmIChwRmluZERhdGEpewotCQkJbWVtY3B5KChjaGFyICopIHBGaW5kRGF0YSwKLQkJCSAgICAgICAoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCArCi0JCQkgICAgICAgZGF0YV9vZmZzZXQsIGtsKTsKLQkJfSovIGVsc2UgewotCQkJLyogY2hlY2sgdGhhdCBsZW5ndGggb2YgbGlzdCBpcyBub3QgbW9yZSB0aGFuIGJjYyAqLwotCQkJLyogY2hlY2sgdGhhdCBlYWNoIGVudHJ5IGRvZXMgbm90IGdvIGJleW9uZCBsZW5ndGgKLQkJCSAgIG9mIGxpc3QgKi8KLQkJCS8qIGNoZWNrIHRoYXQgZWFjaCBlbGVtZW50IG9mIGVhY2ggZW50cnkgZG9lcyBub3QKLQkJCSAgIGdvIGJleW9uZCBlbmQgb2YgbGlzdCAqLwotCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7Ci0JCQlzdHJ1Y3QgZmVhbGlzdCAqZWFfcmVzcG9uc2VfZGF0YTsKLQkJCXJjID0gLUVOT0RBVEE7Ci0JCQkvKiB2YWxpZGF0ZV90cmFuczJfb2Zmc2V0cygpICovCi0JCQkvKiBCQiBjaGVjayBpZiBzdGFydCBvZiBzbWIgKyBkYXRhX29mZnNldCA+ICZiY2MrIGJjYyovCi0JCQllYV9yZXNwb25zZV9kYXRhID0gKHN0cnVjdCBmZWFsaXN0ICopCi0JCQkJKCgoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCkgKwotCQkJCWRhdGFfb2Zmc2V0KTsKLQkJCW5hbWVfbGVuID0gbGUzMl90b19jcHUoZWFfcmVzcG9uc2VfZGF0YS0+bGlzdF9sZW4pOwotCQkJY0ZZSSgxLCAoImVhIGxlbmd0aCAlZCIsIG5hbWVfbGVuKSk7Ci0JCQlpZiAobmFtZV9sZW4gPD0gOCkgewotCQkJLyogcmV0dXJuZWQgRUEgc2l6ZSB6ZXJvZWQgYXQgdG9wIG9mIGZ1bmN0aW9uICovCi0JCQkJY0ZZSSgxLCAoImVtcHR5IEVBIGxpc3QgcmV0dXJuZWQgZnJvbSBzZXJ2ZXIiKSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGFjY291bnQgZm9yIGVhIGxpc3QgbGVuICovCi0JCQkJbmFtZV9sZW4gLT0gNDsKLQkJCQl0ZW1wX2ZlYSA9IGVhX3Jlc3BvbnNlX2RhdGEtPmxpc3Q7Ci0JCQkJdGVtcF9wdHIgPSAoY2hhciAqKXRlbXBfZmVhOwotCQkJCS8qIGxvb3AgdGhyb3VnaCBjaGVja2luZyBpZiB3ZSBoYXZlIGEgbWF0Y2hpbmcKLQkJCQluYW1lIGFuZCB0aGVuIHJldHVybiB0aGUgYXNzb2NpYXRlZCB2YWx1ZSAqLwotCQkJCXdoaWxlIChuYW1lX2xlbiA+IDApIHsKLQkJCQkJX191MTYgdmFsdWVfbGVuOwotCQkJCQluYW1lX2xlbiAtPSA0OwotCQkJCQl0ZW1wX3B0ciArPSA0OwotCQkJCQl2YWx1ZV9sZW4gPQotCQkJCQkgICAgICBsZTE2X3RvX2NwdSh0ZW1wX2ZlYS0+dmFsdWVfbGVuKTsKLQkJCQkvKiBCQiB2YWxpZGF0ZSB0aGF0IHZhbHVlX2xlbiBmYWxscyB3aXRoaW4gU01CLAotCQkJCWV2ZW4gdGhvdWdoIG1heGltdW0gZm9yIG5hbWVfbGVuIGlzIDI1NSAqLwotCQkJCQlpZiAobWVtY21wKHRlbXBfZmVhLT5uYW1lLCBlYV9uYW1lLAotCQkJCQkJICB0ZW1wX2ZlYS0+bmFtZV9sZW4pID09IDApIHsKLQkJCQkJCS8qIGZvdW5kIGEgbWF0Y2ggKi8KLQkJCQkJCXJjID0gdmFsdWVfbGVuOwotCQkJCS8qIGFjY291bnQgZm9yIHByZWZpeCB1c2VyLiBhbmQgdHJhaWxpbmcgbnVsbCAqLwotCQkJCQkJaWYgKHJjIDw9IChpbnQpYnVmX3NpemUpIHsKLQkJCQkJCQltZW1jcHkoZWFfdmFsdWUsCi0JCQkJCQkJCXRlbXBfZmVhLT5uYW1lK3RlbXBfZmVhLT5uYW1lX2xlbisxLAotCQkJCQkJCQlyYyk7Ci0JCQkJCQkJLyogZWEgdmFsdWVzLCB1bmxpa2UgZWEKLQkJCQkJCQkgICBuYW1lcywgYXJlIG5vdCBudWxsCi0JCQkJCQkJICAgdGVybWluYXRlZCAqLwotCQkJCQkJfSBlbHNlIGlmIChidWZfc2l6ZSA9PSAwKSB7Ci0JCQkJCQkvKiBza2lwIGNvcHkgLSBjYWxjIHNpemUgb25seSAqLwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIHN0b3AgYmVmb3JlIG92ZXJydW4gYnVmZmVyICovCi0JCQkJCQkJcmMgPSAtRVJBTkdFOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJbmFtZV9sZW4gLT0gdGVtcF9mZWEtPm5hbWVfbGVuOwotCQkJCQl0ZW1wX3B0ciArPSB0ZW1wX2ZlYS0+bmFtZV9sZW47Ci0JCQkJCS8qIGFjY291bnQgZm9yIHRyYWlsaW5nIG51bGwgKi8KLQkJCQkJbmFtZV9sZW4tLTsKLQkJCQkJdGVtcF9wdHIrKzsKLQkJCQkJbmFtZV9sZW4gLT0gdmFsdWVfbGVuOwotCQkJCQl0ZW1wX3B0ciArPSB2YWx1ZV9sZW47Ci0JCQkJCS8qIE5vIHRyYWlsaW5nIG51bGwgdG8gYWNjb3VudCBmb3IgaW4KLQkJCQkJICAgdmFsdWVfbGVuLiAgR28gb24gdG8gbmV4dCBFQSAqLwotCQkJCQl0ZW1wX2ZlYSA9IChzdHJ1Y3QgZmVhICopdGVtcF9wdHI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7Ci0JaWYgKHJjID09IC1FQUdBSU4pCi0JCWdvdG8gUUVBUmV0cnk7Ci0KLQlyZXR1cm4gKHNzaXplX3QpcmM7Ci19Ci0KIGludAogQ0lGU1NNQlNldEVBKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIGNvbnN0IGNoYXIgKmZpbGVOYW1lLAogCSAgICAgY29uc3QgY2hhciAqZWFfbmFtZSwgY29uc3Qgdm9pZCAqZWFfdmFsdWUsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDJlOWUwOWMuLjQ1ZWI2Y2JhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMjM4OCwxMyArMjM4OCwxMyBAQAogCQkgKi8KIAkJY2lmc19wdXRfdGNwX3Nlc3Npb24oc3J2VGNwKTsKIAotCQlkb3duKCZwU2VzSW5mby0+c2VzU2VtKTsKKwkJbXV0ZXhfbG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCQlpZiAocFNlc0luZm8tPm5lZWRfcmVjb25uZWN0KSB7CiAJCQljRllJKDEsICgiU2Vzc2lvbiBuZWVkcyByZWNvbm5lY3QiKSk7CiAJCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbih4aWQsIHBTZXNJbmZvLAogCQkJCQkJY2lmc19zYi0+bG9jYWxfbmxzKTsKIAkJfQotCQl1cCgmcFNlc0luZm8tPnNlc1NlbSk7CisJCW11dGV4X3VubG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCX0gZWxzZSBpZiAoIXJjKSB7CiAJCWNGWUkoMSwgKCJFeGlzdGluZyBzbWIgc2VzcyBub3QgZm91bmQiKSk7CiAJCXBTZXNJbmZvID0gc2VzSW5mb0FsbG9jKCk7CkBAIC0yNDM3LDEyICsyNDM3LDEyIEBACiAJCX0KIAkJcFNlc0luZm8tPmxpbnV4X3VpZCA9IHZvbHVtZV9pbmZvLT5saW51eF91aWQ7CiAJCXBTZXNJbmZvLT5vdmVycmlkZVNlY0ZsZyA9IHZvbHVtZV9pbmZvLT5zZWNGbGc7Ci0JCWRvd24oJnBTZXNJbmZvLT5zZXNTZW0pOworCQltdXRleF9sb2NrKCZwU2VzSW5mby0+c2Vzc2lvbl9tdXRleCk7CiAKIAkJLyogQkIgRklYTUUgbmVlZCB0byBwYXNzIHZvbC0+c2VjRmxncyBCQiAqLwogCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbih4aWQsIHBTZXNJbmZvLAogCQkJCQljaWZzX3NiLT5sb2NhbF9ubHMpOwotCQl1cCgmcFNlc0luZm8tPnNlc1NlbSk7CisJCW11dGV4X3VubG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCX0KIAogCS8qIHNlYXJjaCBmb3IgZXhpc3RpbmcgdGNvbiB0byB0aGlzIHNlcnZlciBzaGFyZSAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGUzZmRhOTcuLjhiZGJjODEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogCiAJY2lmc19pLT5kZWxldGVfcGVuZGluZyA9IGZhdHRyLT5jZl9mbGFncyAmIENJRlNfRkFUVFJfREVMRVRFX1BFTkRJTkc7CiAKKwljaWZzX2ktPnNlcnZlcl9lb2YgPSBmYXR0ci0+Y2ZfZW9mOwogCS8qCiAJICogQ2FuJ3Qgc2FmZWx5IGNoYW5nZSB0aGUgZmlsZSBzaXplIGhlcmUgaWYgdGhlIGNsaWVudCBpcyB3cml0aW5nIHRvCiAJICogaXQgZHVlIHRvIHBvdGVudGlhbCByYWNlcy4KQEAgLTM2Niw3ICszNjcsNyBAQAogCWNoYXIgZWFfdmFsdWVbNF07CiAJX191MzIgbW9kZTsKIAotCXJjID0gQ0lGU1NNQlF1ZXJ5RUEoeGlkLCBjaWZzX3NiLT50Y29uLCBwYXRoLCAiU0VURklMRUJJVFMiLAorCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBjaWZzX3NiLT50Y29uLCBwYXRoLCAiU0VURklMRUJJVFMiLAogCQkJICAgIGVhX3ZhbHVlLCA0IC8qIHNpemUgb2YgYnVmICovLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggZDI3ZDRlYy4uZDE0NzQ5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJKytyZXRfYnVmLT5zZXNfY291bnQ7CiAJCUlOSVRfTElTVF9IRUFEKCZyZXRfYnVmLT5zbWJfc2VzX2xpc3QpOwogCQlJTklUX0xJU1RfSEVBRCgmcmV0X2J1Zi0+dGNvbl9saXN0KTsKLQkJaW5pdF9NVVRFWCgmcmV0X2J1Zi0+c2VzU2VtKTsKKwkJbXV0ZXhfaW5pdCgmcmV0X2J1Zi0+c2Vzc2lvbl9tdXRleCk7CiAJfQogCXJldHVybiByZXRfYnVmOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IGE3NWFmYTMuLjNlMmVmMGQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQkJLyogcmV2YWxpZGF0ZS9nZXRhdHRyIHRoZW4gcG9wdWxhdGUgZnJvbSBpbm9kZSAqLwogCQl9IC8qIEJCIGFkZCBlbHNlIHdoZW4gYWJvdmUgaXMgaW1wbGVtZW50ZWQgKi8KIAkJZWFfbmFtZSArPSA1OyAvKiBza2lwIHBhc3QgdXNlci4gcHJlZml4ICovCi0JCXJjID0gQ0lGU1NNQlF1ZXJ5RUEoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBlYV9uYW1lLCBlYV92YWx1ZSwKKwkJcmMgPSBDSUZTU01CUUFsbEVBcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGVhX25hbWUsIGVhX3ZhbHVlLAogCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCX0gZWxzZSBpZiAoc3RybmNtcChlYV9uYW1lLCBDSUZTX1hBVFRSX09TMl9QUkVGSVgsIDQpID09IDApIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJZ290byBnZXRfZWFfZXhpdDsKIAogCQllYV9uYW1lICs9IDQ7IC8qIHNraXAgcGFzdCBvczIuIHByZWZpeCAqLwotCQlyYyA9IENJRlNTTUJRdWVyeUVBKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZWFfbmFtZSwgZWFfdmFsdWUsCisJCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBlYV9uYW1lLCBlYV92YWx1ZSwKIAkJCWJ1Zl9zaXplLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoZWFfbmFtZSwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKQEAgLTM2NCw4ICszNjQsOCBAQAogCS8qIGlmIHByb2MvZnMvY2lmcy9zdHJlYW1zdG94YXR0ciBpcyBzZXQgdGhlbgogCQlzZWFyY2ggc2VydmVyIGZvciBFQXMgb3Igc3RyZWFtcyB0bwogCQlyZXR1cm5zIGFzIHhhdHRycyAqLwotCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkYXRhLCBidWZfc2l6ZSwKLQkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCisJcmMgPSBDSUZTU01CUUFsbEVBcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIE5VTEwsIGRhdGEsCisJCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIApkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5jIGIvZnMvZGxtL2FzdC5jCmluZGV4IGRjMmFkNjAuLjQzMTRmMGQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuYworKysgYi9mcy9kbG0vYXN0LmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxMCBAQAogCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7CiB9CiAKLXZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSkKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKQogewogCWlmIChsa2ItPmxrYl9mbGFncyAmIERMTV9JRkxfVVNFUikgewotCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgYmFzdG1vZGUpOworCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgbW9kZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ0LDEwICs0NCwyMSBAQAogCWlmICghKGxrYi0+bGtiX2FzdF90eXBlICYgKEFTVF9DT01QIHwgQVNUX0JBU1QpKSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKIAkJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2JfYXN0cXVldWUsICZhc3RfcXVldWUpOworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSB0eXBlOwogCX0KKworCS8qIHNhbml0eSBjaGVjaywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCisJaWYgKCh0eXBlID09IEFTVF9DT01QKSAmJiAobGtiLT5sa2JfYXN0X3R5cGUgJiBBU1RfQ09NUCkpCisJCWxvZ19wcmludCgicmVwZWF0IGNhc3QgJWQgY2FzdG1vZGUgJWQgbG9jayAleCAlcyIsCisJCQkgIG1vZGUsIGxrYi0+bGtiX2Nhc3Rtb2RlLAorCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKKwogCWxrYi0+bGtiX2FzdF90eXBlIHw9IHR5cGU7Ci0JaWYgKGJhc3Rtb2RlKQotCQlsa2ItPmxrYl9iYXN0bW9kZSA9IGJhc3Rtb2RlOworCWlmICh0eXBlID09IEFTVF9CQVNUKQorCQlsa2ItPmxrYl9iYXN0bW9kZSA9IG1vZGU7CisJZWxzZQorCQlsa2ItPmxrYl9jYXN0bW9kZSA9IG1vZGU7CiAJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKIAogCXNldF9iaXQoV0FLRV9BU1RTLCAmYXN0ZF93YWtlZmxhZ3MpOwpAQCAtNTksOSArNzAsOSBAQAogCXN0cnVjdCBkbG1fbHMgKmxzID0gTlVMTDsKIAlzdHJ1Y3QgZGxtX3JzYiAqciA9IE5VTEw7CiAJc3RydWN0IGRsbV9sa2IgKmxrYjsKLQl2b2lkICgqY2FzdCkgKHZvaWQgKmFzdHBhcmFtKTsKLQl2b2lkICgqYmFzdCkgKHZvaWQgKmFzdHBhcmFtLCBpbnQgbW9kZSk7Ci0JaW50IHR5cGUgPSAwLCBiYXN0bW9kZTsKKwl2b2lkICgqY2FzdGZuKSAodm9pZCAqYXN0cGFyYW0pOworCXZvaWQgKCpiYXN0Zm4pICh2b2lkICphc3RwYXJhbSwgaW50IG1vZGUpOworCWludCB0eXBlLCBmaXJzdCwgYmFzdG1vZGUsIGNhc3Rtb2RlLCBkb19iYXN0LCBkb19jYXN0LCBsYXN0X2Nhc3Rtb2RlOwogCiByZXBlYXQ6CiAJc3Bpbl9sb2NrKCZhc3RfcXVldWVfbG9jayk7CkBAIC03NSwxNyArODYsNDggQEAKIAkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKIAkJdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwogCQlsa2ItPmxrYl9hc3RfdHlwZSA9IDA7CisJCWZpcnN0ID0gbGtiLT5sa2JfYXN0X2ZpcnN0OworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSAwOwogCQliYXN0bW9kZSA9IGxrYi0+bGtiX2Jhc3Rtb2RlOwotCisJCWNhc3Rtb2RlID0gbGtiLT5sa2JfY2FzdG1vZGU7CisJCWNhc3RmbiA9IGxrYi0+bGtiX2FzdGZuOworCQliYXN0Zm4gPSBsa2ItPmxrYl9iYXN0Zm47CiAJCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7Ci0JCWNhc3QgPSBsa2ItPmxrYl9hc3RmbjsKLQkJYmFzdCA9IGxrYi0+bGtiX2Jhc3RmbjsKIAotCQlpZiAoKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdCkKLQkJCWNhc3QobGtiLT5sa2JfYXN0cGFyYW0pOworCQlkb19jYXN0ID0gKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdGZuOworCQlkb19iYXN0ID0gKHR5cGUgJiBBU1RfQkFTVCkgJiYgYmFzdGZuOwogCi0JCWlmICgodHlwZSAmIEFTVF9CQVNUKSAmJiBiYXN0KQotCQkJYmFzdChsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOworCQkvKiBTa2lwIGEgYmFzdCBpZiBpdHMgYmxvY2tpbmcgbW9kZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisJCSAgIGdyYW50ZWQgbW9kZSBvZiB0aGUgcHJlY2VkaW5nIGNhc3QuICovCisKKwkJaWYgKGRvX2Jhc3QpIHsKKwkJCWlmIChmaXJzdCA9PSBBU1RfQ09NUCkKKwkJCQlsYXN0X2Nhc3Rtb2RlID0gY2FzdG1vZGU7CisJCQllbHNlCisJCQkJbGFzdF9jYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmU7CisJCQlpZiAoZGxtX21vZGVzX2NvbXBhdChiYXN0bW9kZSwgbGFzdF9jYXN0bW9kZSkpCisJCQkJZG9fYmFzdCA9IDA7CisJCX0KKworCQlpZiAoZmlyc3QgPT0gQVNUX0NPTVApIHsKKwkJCWlmIChkb19jYXN0KQorCQkJCWNhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSk7CisJCQlpZiAoZG9fYmFzdCkKKwkJCQliYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0sIGJhc3Rtb2RlKTsKKwkJfSBlbHNlIGlmIChmaXJzdCA9PSBBU1RfQkFTVCkgeworCQkJaWYgKGRvX2Jhc3QpCisJCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7CisJCQlpZiAoZG9fY2FzdCkKKwkJCQljYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0pOworCQl9IGVsc2UgeworCQkJbG9nX2Vycm9yKGxzLCAiYmFkIGFzdF9maXJzdCAlZCBhc3RfdHlwZSAlZCIsCisJCQkJICBmaXJzdCwgdHlwZSk7CisJCX0KKworCQlpZiAoZG9fY2FzdCkKKwkJCWxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmUgPSBjYXN0bW9kZTsKKwkJaWYgKGRvX2Jhc3QpCisJCQlsa2ItPmxrYl9iYXN0bW9kZV9kb25lID0gYmFzdG1vZGU7CiAKIAkJLyogdGhpcyByZW1vdmVzIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgZGxtX2FkZF9hc3QKIAkJICAgYW5kIG1heSByZXN1bHQgaW4gdGhlIGxrYiBiZWluZyBmcmVlZCAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5oIGIvZnMvZGxtL2FzdC5oCmluZGV4IDFiNWZjNWYuLmJjYjFhYWIgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuaAorKysgYi9mcy9kbG0vYXN0LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgotKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgX19BU1REX0RPVF9IX18KICNkZWZpbmUgX19BU1REX0RPVF9IX18KIAotdm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKTsKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIHZvaWQgZGxtX2RlbF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYik7CiAKIHZvaWQgZGxtX2FzdGRfd2FrZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kZWJ1Z19mcy5jIGIvZnMvZGxtL2RlYnVnX2ZzLmMKaW5kZXggMzc1YTIzNTliLi4yOWQ2MTM5IDEwMDY0NAotLS0gYS9mcy9kbG0vZGVidWdfZnMuYworKysgYi9mcy9kbG0vZGVidWdfZnMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCQlsa2ItPmxrYl9zdGF0dXMsCiAJCQlsa2ItPmxrYl9ncm1vZGUsCiAJCQlsa2ItPmxrYl9ycW1vZGUsCi0JCQlsa2ItPmxrYl9oaWdoYmFzdCwKKwkJCWxrYi0+bGtiX2Jhc3Rtb2RlLAogCQkJcnNiX2xvb2t1cCwKIAkJCWxrYi0+bGtiX3dhaXRfdHlwZSwKIAkJCWxrYi0+bGtiX2x2YnNlcSwKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaCBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAppbmRleCA4MjZkM2RjLi5mNjMyYjU4IDEwMDY0NAotLS0gYS9mcy9kbG0vZGxtX2ludGVybmFsLmgKKysrIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKICoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0yMzIsMTEgKzIzMiwxNyBAQAogCWludDhfdAkJCWxrYl9zdGF0dXM7ICAgICAvKiBncmFudGVkLCB3YWl0aW5nLCBjb252ZXJ0ICovCiAJaW50OF90CQkJbGtiX3JxbW9kZTsJLyogcmVxdWVzdGVkIGxvY2sgbW9kZSAqLwogCWludDhfdAkJCWxrYl9ncm1vZGU7CS8qIGdyYW50ZWQgbG9jayBtb2RlICovCi0JaW50OF90CQkJbGtiX2Jhc3Rtb2RlOwkvKiByZXF1ZXN0ZWQgbW9kZSAqLwogCWludDhfdAkJCWxrYl9oaWdoYmFzdDsJLyogaGlnaGVzdCBtb2RlIGJhc3Qgc2VudCBmb3IgKi8KKwogCWludDhfdAkJCWxrYl93YWl0X3R5cGU7CS8qIHR5cGUgb2YgcmVwbHkgd2FpdGluZyBmb3IgKi8KIAlpbnQ4X3QJCQlsa2Jfd2FpdF9jb3VudDsKIAlpbnQ4X3QJCQlsa2JfYXN0X3R5cGU7CS8qIHR5cGUgb2YgYXN0IHF1ZXVlZCBmb3IgKi8KKwlpbnQ4X3QJCQlsa2JfYXN0X2ZpcnN0OwkvKiB0eXBlIG9mIGZpcnN0IGFzdCBxdWV1ZWQgKi8KKworCWludDhfdAkJCWxrYl9iYXN0bW9kZTsJLyogcmVxIG1vZGUgb2YgcXVldWVkIGJhc3QgKi8KKwlpbnQ4X3QJCQlsa2JfY2FzdG1vZGU7CS8qIGdyIG1vZGUgb2YgcXVldWVkIGNhc3QgKi8KKwlpbnQ4X3QJCQlsa2JfYmFzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgYmFzdG1vZGUgKi8KKwlpbnQ4X3QJCQlsa2JfY2FzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgY2FzdG1vZGUgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQJbGtiX2lkdGJsX2xpc3Q7CS8qIGxvY2tzcGFjZSBsa2J0YmwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9zdGF0ZXF1ZXVlOwkvKiByc2IgZy9jL3cgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggOWMwYzFkYi4uNDZmZmQzZSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKLSoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zMDcsNyArMzA3LDcgQEAKIAlsa2ItPmxrYl9sa3NiLT5zYl9zdGF0dXMgPSBydjsKIAlsa2ItPmxrYl9sa3NiLT5zYl9mbGFncyA9IGxrYi0+bGtiX3NiZmxhZ3M7CiAKLQlkbG1fYWRkX2FzdChsa2IsIEFTVF9DT01QLCAwKTsKKwlkbG1fYWRkX2FzdChsa2IsIEFTVF9DT01QLCBsa2ItPmxrYl9ncm1vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfY2FzdF9vdmVybGFwKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQpAQCAtMzIwLDEwICszMjAsMTIgQEAKIHsKIAlsa2ItPmxrYl90aW1lX2Jhc3QgPSBrdGltZV9nZXQoKTsKIAotCWlmIChpc19tYXN0ZXJfY29weShsa2IpKQorCWlmIChpc19tYXN0ZXJfY29weShsa2IpKSB7CisJCWxrYi0+bGtiX2Jhc3Rtb2RlID0gcnFtb2RlOyAvKiBwcmludGVkIGJ5IGRlYnVnZnMgKi8KIAkJc2VuZF9iYXN0KHIsIGxrYiwgcnFtb2RlKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZGxtX2FkZF9hc3QobGtiLCBBU1RfQkFTVCwgcnFtb2RlKTsKKwl9CiB9CiAKIC8qCkBAIC0yMjgwLDIwICsyMjgyLDMwIEBACiAJaWYgKGNhbl9iZV9xdWV1ZWQobGtiKSkgewogCQllcnJvciA9IC1FSU5QUk9HUkVTUzsKIAkJYWRkX2xrYihyLCBsa2IsIERMTV9MS1NUU19XQUlUSU5HKTsKLQkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CiAJCWFkZF90aW1lb3V0KGxrYik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWVycm9yID0gLUVBR0FJTjsKLQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQotCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1FQUdBSU4pOwotCiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZG9fcmVxdWVzdF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSAtRUFHQUlOOgorCQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQorCQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOworCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBkb19jb252ZXJ0KHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQogewogCWludCBlcnJvciA9IDA7CkBAIC0yMzA0LDcgKzIzMTYsNiBAQAogCWlmIChjYW5fYmVfZ3JhbnRlZChyLCBsa2IsIDEsICZkZWFkbGspKSB7CiAJCWdyYW50X2xvY2sociwgbGtiKTsKIAkJcXVldWVfY2FzdChyLCBsa2IsIDApOwotCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIzMzQsNyArMjM0NSw2IEBACiAJCWlmIChfY2FuX2JlX2dyYW50ZWQociwgbGtiLCAxKSkgewogCQkJZ3JhbnRfbG9jayhyLCBsa2IpOwogCQkJcXVldWVfY2FzdChyLCBsa2IsIDApOwotCQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIGVsc2UgZmFsbCB0aHJvdWdoIGFuZCBtb3ZlIHRvIGNvbnZlcnQgcXVldWUgKi8KQEAgLTIzNDQsMjggKzIzNTQsNDcgQEAKIAkJZXJyb3IgPSAtRUlOUFJPR1JFU1M7CiAJCWRlbF9sa2IociwgbGtiKTsKIAkJYWRkX2xrYihyLCBsa2IsIERMTV9MS1NUU19DT05WRVJUKTsKLQkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CiAJCWFkZF90aW1lb3V0KGxrYik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWVycm9yID0gLUVBR0FJTjsKLQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQotCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1FQUdBSU4pOwotCiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZG9fY29udmVydF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSAwOgorCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworCQkvKiBncmFudF9wZW5kaW5nX2xvY2tzIGFsc28gc2VuZHMgYmFzdHMgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUFHQUlOOgorCQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQorCQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOworCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBkb191bmxvY2soc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCiB7CiAJcmVtb3ZlX2xvY2sociwgbGtiKTsKIAlxdWV1ZV9jYXN0KHIsIGxrYiwgLURMTV9FVU5MT0NLKTsKLQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCXJldHVybiAtRExNX0VVTkxPQ0s7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3VubG9ja19lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgaW50IGVycm9yKQoreworCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7Cit9CisKIC8qIHJldHVybnM6IDAgZGlkIG5vdGhpbmcsIC1ETE1fRUNBTkNFTCBjYW5jZWxlZCBsb2NrICovCiAgCiBzdGF0aWMgaW50IGRvX2NhbmNlbChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKQEAgLTIzNzUsMTIgKzI0MDQsMTggQEAKIAllcnJvciA9IHJldmVydF9sb2NrKHIsIGxrYik7CiAJaWYgKGVycm9yKSB7CiAJCXF1ZXVlX2Nhc3QociwgbGtiLCAtRExNX0VDQU5DRUwpOwotCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCQlyZXR1cm4gLURMTV9FQ0FOQ0VMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fY2FuY2VsX2VmZmVjdHMoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICBpbnQgZXJyb3IpCit7CisJaWYgKGVycm9yKQorCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworfQorCiAvKgogICogRm91ciBzdGFnZSAzIHZhcmlldGllczoKICAqIF9yZXF1ZXN0X2xvY2soKSwgX2NvbnZlcnRfbG9jaygpLCBfdW5sb2NrX2xvY2soKSwgX2NhbmNlbF9sb2NrKCkKQEAgLTI0MDIsMTEgKzI0MzcsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfcmVxdWVzdCgpIGNhbGxzIGRvX3JlcXVlc3QoKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfcmVxdWVzdChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX3JlcXVlc3QociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgcmVxdWVzdF9yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fcmVxdWVzdCBhbmQgZG9fcmVxdWVzdF9lZmZlY3RzICovCisJCWRvX3JlcXVlc3RfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0MTcsMTEgKzI0NTYsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV9jb252ZXJ0KCkgY2FsbHMgZG9fY29udmVydCgpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF9jb252ZXJ0KHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fY29udmVydChyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSBjb252ZXJ0X3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb19jb252ZXJ0IGFuZCBkb19jb252ZXJ0X2VmZmVjdHMgKi8KKwkJZG9fY29udmVydF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0MzIsMTEgKzI0NzUsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV91bmxvY2soKSBjYWxscyBkb191bmxvY2soKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfdW5sb2NrKHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fdW5sb2NrKHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIHVubG9ja19yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fdW5sb2NrIGFuZCBkb191bmxvY2tfZWZmZWN0cyAqLworCQlkb191bmxvY2tfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDQ3LDExICsyNDk0LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfY2FuY2VsKCkgY2FsbHMgZG9fY2FuY2VsKCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX2NhbmNlbChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX2NhbmNlbChyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSBjYW5jZWxfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX2NhbmNlbCBhbmQgZG9fY2FuY2VsX2VmZmVjdHMgKi8KKwkJZG9fY2FuY2VsX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzE5MSw2ICszMjQyLDcgQEAKIAlhdHRhY2hfbGtiKHIsIGxrYik7CiAJZXJyb3IgPSBkb19yZXF1ZXN0KHIsIGxrYik7CiAJc2VuZF9yZXF1ZXN0X3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX3JlcXVlc3RfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKIAogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMyMjYsMTUgKzMyNzgsMTkgQEAKIAkJZ290byBvdXQ7CiAKIAlyZWNlaXZlX2ZsYWdzKGxrYiwgbXMpOworCiAJZXJyb3IgPSByZWNlaXZlX2NvbnZlcnRfYXJncyhscywgbGtiLCBtcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZXBseTsKKwlpZiAoZXJyb3IpIHsKKwkJc2VuZF9jb252ZXJ0X3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXBseSA9ICFkb3duX2NvbnZlcnNpb24obGtiKTsKIAogCWVycm9yID0gZG9fY29udmVydChyLCBsa2IpOwotIG91dF9yZXBseToKIAlpZiAocmVwbHkpCiAJCXNlbmRfY29udmVydF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19jb252ZXJ0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAgb3V0OgogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMyNjYsMTMgKzMzMjIsMTYgQEAKIAkJZ290byBvdXQ7CiAKIAlyZWNlaXZlX2ZsYWdzKGxrYiwgbXMpOworCiAJZXJyb3IgPSByZWNlaXZlX3VubG9ja19hcmdzKGxzLCBsa2IsIG1zKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlcGx5OworCWlmIChlcnJvcikgeworCQlzZW5kX3VubG9ja19yZXBseShyLCBsa2IsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZXJyb3IgPSBkb191bmxvY2sociwgbGtiKTsKLSBvdXRfcmVwbHk6CiAJc2VuZF91bmxvY2tfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fdW5sb2NrX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAgb3V0OgogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMzMDcsNiArMzM2Niw3IEBACiAKIAllcnJvciA9IGRvX2NhbmNlbChyLCBsa2IpOwogCXNlbmRfY2FuY2VsX3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX2NhbmNlbF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CmRpZmYgLS1naXQgYS9mcy9kbG0vbG9ja3NwYWNlLmMgYi9mcy9kbG0vbG9ja3NwYWNlLmMKaW5kZXggYzAxMGVjZi4uMjZhOGJkNCAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2tzcGFjZS5jCisrKyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwpAQCAtMTkxLDYgKzE5MSwxOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBkbG1fdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCXN0cnVjdCBkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkbG1fbHMsIGxzX2tvYmopOworCisJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1NQQUNFPSVzIiwgbHMtPmxzX25hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBkbG1fdWV2ZW50X29wcyA9IHsKKwkudWV2ZW50ID0gZGxtX3VldmVudCwKK307CiAKIGludCBfX2luaXQgZGxtX2xvY2tzcGFjZV9pbml0KHZvaWQpCiB7CkBAIC0xOTksNyArMjExLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbHNsaXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmbHNsaXN0X2xvY2spOwogCi0JZGxtX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJkbG0iLCBOVUxMLCBrZXJuZWxfa29iaik7CisJZGxtX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJkbG0iLCAmZGxtX3VldmVudF9vcHMsIGtlcm5lbF9rb2JqKTsKIAlpZiAoIWRsbV9rc2V0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4gbm90IGNyZWF0ZSBrc2V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuYyBiL2ZzL2RsbS91c2VyLmMKaW5kZXggZTczYTRiYi4uYTRiZmQzMSAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuYworKysgYi9mcy9kbG0vdXNlci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLyogd2UgY291bGQgcG9zc2libHkgY2hlY2sgaWYgdGhlIGNhbmNlbCBvZiBhbiBvcnBoYW4gaGFzIHJlc3VsdGVkIGluIHRoZSBsa2IKICAgIGJlaW5nIHJlbW92ZWQgYW5kIHRoZW4gcmVtb3ZlIHRoYXQgbGtiIGZyb20gdGhlIG9ycGhhbnMgbGlzdCBhbmQgZnJlZSBpdCAqLwogCi12b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSkKK3ZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGRsbV9scyAqbHM7CiAJc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhOwpAQCAtMjA2LDggKzIwNiwxMCBAQAogCiAJYXN0X3R5cGUgPSBsa2ItPmxrYl9hc3RfdHlwZTsKIAlsa2ItPmxrYl9hc3RfdHlwZSB8PSB0eXBlOwotCWlmIChiYXN0bW9kZSkKLQkJbGtiLT5sa2JfYmFzdG1vZGUgPSBiYXN0bW9kZTsKKwlpZiAodHlwZSA9PSBBU1RfQkFTVCkKKwkJbGtiLT5sa2JfYmFzdG1vZGUgPSBtb2RlOworCWVsc2UKKwkJbGtiLT5sa2JfY2FzdG1vZGUgPSBtb2RlOwogCiAJaWYgKCFhc3RfdHlwZSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmggYi9mcy9kbG0vdXNlci5oCmluZGV4IDFjOTY4NjQuLmYxOTYwOTEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmgKKysrIGIvZnMvZGxtL3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBfX1VTRVJfRE9UX0hfXwogI2RlZmluZSBfX1VTRVJfRE9UX0hfXwogCi12b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSk7Cit2b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIGludCBkbG1fdXNlcl9pbml0KHZvaWQpOwogdm9pZCBkbG1fdXNlcl9leGl0KHZvaWQpOwogaW50IGRsbV9kZXZpY2VfZGVyZWdpc3RlcihzdHJ1Y3QgZGxtX2xzICpscyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDg3NGQxNjkuLjRjZWRjOTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCWF0b21pY190IHNfbG9ja19idXN5OwogCiAJLyogbG9jYWxpdHkgZ3JvdXBzICovCi0Jc3RydWN0IGV4dDRfbG9jYWxpdHlfZ3JvdXAgKnNfbG9jYWxpdHlfZ3JvdXBzOworCXN0cnVjdCBleHQ0X2xvY2FsaXR5X2dyb3VwIF9fcGVyY3B1ICpzX2xvY2FsaXR5X2dyb3VwczsKIAogCS8qIGZvciB3cml0ZSBzdGF0aXN0aWNzICovCiAJdW5zaWduZWQgbG9uZyBzX3NlY3RvcnNfd3JpdHRlbl9zdGFydDsKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA4N2UxMjkwLi4zODAzOWFmIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAllcnJvciA9IGZkOwogI2lmIDEKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKSAhPSBOVUxMKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcoZmR0LT5mZFtmZF0pICE9IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxsb2NfZmQ6IHNsb3QgJWQgbm90IE5VTEwhXG4iLCBmZCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtPmZkW2ZkXSwgTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmMKaW5kZXggNTFkOWUzM2QuLmViN2U5NDIgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKKysrIGIvZnMvZnVzZS9kZXYuYwpAQCAtODY1LDEzICs4NjUsMTAgQEAKIAogCWRvd25fcmVhZCgmZmMtPmtpbGxzYik7CiAJZXJyID0gLUVOT0VOVDsKLQlpZiAoIWZjLT5zYikKLQkJZ290byBlcnJfdW5sb2NrOwotCi0JZXJyID0gZnVzZV9yZXZlcnNlX2ludmFsX2lub2RlKGZjLT5zYiwgb3V0YXJnLmlubywKLQkJCQkgICAgICAgb3V0YXJnLm9mZiwgb3V0YXJnLmxlbik7Ci0KLWVycl91bmxvY2s6CisJaWYgKGZjLT5zYikgeworCQllcnIgPSBmdXNlX3JldmVyc2VfaW52YWxfaW5vZGUoZmMtPnNiLCBvdXRhcmcuaW5vLAorCQkJCQkgICAgICAgb3V0YXJnLm9mZiwgb3V0YXJnLmxlbik7CisJfQogCXVwX3JlYWQoJmZjLT5raWxsc2IpOwogCXJldHVybiBlcnI7CiAKQEAgLTg4NCwxMCArODgxLDE1IEBACiAJCQkJICAgc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MpCiB7CiAJc3RydWN0IGZ1c2Vfbm90aWZ5X2ludmFsX2VudHJ5X291dCBvdXRhcmc7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JY2hhciBidWZbRlVTRV9OQU1FX01BWCsxXTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwljaGFyICpidWY7CiAJc3RydWN0IHFzdHIgbmFtZTsKIAorCWJ1ZiA9IGt6YWxsb2MoRlVTRV9OQU1FX01BWCArIDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIGVycjsKKworCWVyciA9IC1FSU5WQUw7CiAJaWYgKHNpemUgPCBzaXplb2Yob3V0YXJnKSkKIAkJZ290byBlcnI7CiAKQEAgLTkxMCwxNiArOTEyLDE0IEBACiAKIAlkb3duX3JlYWQoJmZjLT5raWxsc2IpOwogCWVyciA9IC1FTk9FTlQ7Ci0JaWYgKCFmYy0+c2IpCi0JCWdvdG8gZXJyX3VubG9jazsKLQotCWVyciA9IGZ1c2VfcmV2ZXJzZV9pbnZhbF9lbnRyeShmYy0+c2IsIG91dGFyZy5wYXJlbnQsICZuYW1lKTsKLQotZXJyX3VubG9jazoKKwlpZiAoZmMtPnNiKQorCQllcnIgPSBmdXNlX3JldmVyc2VfaW52YWxfZW50cnkoZmMtPnNiLCBvdXRhcmcucGFyZW50LCAmbmFtZSk7CiAJdXBfcmVhZCgmZmMtPmtpbGxzYik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gZXJyOwogCiBlcnI6CisJa2ZyZWUoYnVmKTsKIAlmdXNlX2NvcHlfZmluaXNoKGNzKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hb3BzLmMgYi9mcy9nZnMyL2FvcHMuYwppbmRleCA3YjhkYTk0Li4wYzFkMGI4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FvcHMuYworKysgYi9mcy9nZnMyL2FvcHMuYwpAQCAtMTA2MSw4ICsxMDYxLDggQEAKIAogaW50IGdmczJfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGFzcGFjZS0+aV9zYi0+c19mc19pbmZvOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdmczJfbWFwcGluZzJzYmQobWFwcGluZyk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCBmNDI2NjMzLi40NTRkNGI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CkBAIC02MCw3ICs1OSw2IEBACiAjZGVmaW5lIEdMT0NLX0JVR19PTihnbCx4KSBkbyB7IGlmICh1bmxpa2VseSh4KSkgeyBfX2R1bXBfZ2xvY2soTlVMTCwgZ2wpOyBCVUcoKTsgfSB9IHdoaWxlKDApCiBzdGF0aWMgdm9pZCBkb194bW90ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gsIHVuc2lnbmVkIGludCB0YXJnZXQpOwogCi1zdGF0aWMgREVDTEFSRV9SV1NFTShnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfcm9vdDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2xvY2tfd29ya3F1ZXVlOwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdmczJfZGVsZXRlX3dvcmtxdWV1ZTsKQEAgLTE1NCwxMiArMTUyLDE0IEBACiBzdGF0aWMgdm9pZCBnbG9ja19mcmVlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0Jc3RydWN0IGlub2RlICphc3BhY2UgPSBnbC0+Z2xfYXNwYWNlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZnMyX2dsb2NrX2NhY2hlcDsKIAotCWlmIChhc3BhY2UpCi0JCWdmczJfYXNwYWNlX3B1dChhc3BhY2UpOworCUdMT0NLX0JVR19PTihnbCwgbWFwcGluZyAmJiBtYXBwaW5nLT5ucnBhZ2VzKTsKIAl0cmFjZV9nZnMyX2dsb2NrX3B1dChnbCk7Ci0Jc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwlpZiAobWFwcGluZykKKwkJY2FjaGVwID0gZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwOworCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGNhY2hlcCwgZ2wpOwogfQogCiAvKioKQEAgLTcxMiw3ICs3MTIsNiBAQAogCQlmaW5pc2hfeG1vdGUoZ2wsIGdsLT5nbF9yZXBseSk7CiAJCWRyb3BfcmVmID0gMTsKIAl9Ci0JZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCSAgICBnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgJiYKQEAgLTcyNSw3ICs3MjQsNiBAQAogCX0KIAlydW5fcXVldWUoZ2wsIDApOwogCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlpZiAoIWRlbGF5IHx8CiAJICAgIHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgZGVsYXkpID09IDApCiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKQEAgLTc1MCwxMCArNzQ4LDExIEBACiAJCSAgIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzLCBpbnQgY3JlYXRlLAogCQkgICBzdHJ1Y3QgZ2ZzMl9nbG9jayAqKmdscCkKIHsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBzZHAtPnNkX3ZmczsKIAlzdHJ1Y3QgbG1fbG9ja25hbWUgbmFtZSA9IHsgLmxuX251bWJlciA9IG51bWJlciwgLmxuX3R5cGUgPSBnbG9wcy0+Z29fdHlwZSB9OwogCXN0cnVjdCBnZnMyX2dsb2NrICpnbCwgKnRtcDsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGdsX2hhc2goc2RwLCAmbmFtZSk7Ci0JaW50IGVycm9yOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCiAJcmVhZF9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAJZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgJm5hbWUpOwpAQCAtNzY1LDcgKzc2NCwxMCBAQAogCWlmICghY3JlYXRlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWdsID0ga21lbV9jYWNoZV9hbGxvYyhnZnMyX2dsb2NrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKGdsb3BzLT5nb19mbGFncyAmIEdMT0ZfQVNQQUNFKQorCQlnbCA9IGttZW1fY2FjaGVfYWxsb2MoZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWdsID0ga21lbV9jYWNoZV9hbGxvYyhnZnMyX2dsb2NrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc4NCwxOCArNzg2LDE4IEBACiAJZ2wtPmdsX3RjaGFuZ2UgPSBqaWZmaWVzOwogCWdsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdsLT5nbF9zYmQgPSBzZHA7Ci0JZ2wtPmdsX2FzcGFjZSA9IE5VTEw7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmdsLT5nbF93b3JrLCBnbG9ja193b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmZ2wtPmdsX2RlbGV0ZSwgZGVsZXRlX3dvcmtfZnVuYyk7CiAKLQkvKiBJZiB0aGlzIGdsb2NrIHByb3RlY3RzIGFjdHVhbCBvbi1kaXNrIGRhdGEgb3IgbWV0YWRhdGEgYmxvY2tzLAotCSAgIGNyZWF0ZSBhIFZGUyBpbm9kZSB0byBtYW5hZ2UgdGhlIHBhZ2VzL2J1ZmZlcnMgaG9sZGluZyB0aGVtLiAqLwotCWlmIChnbG9wcyA9PSAmZ2ZzMl9pbm9kZV9nbG9wcyB8fCBnbG9wcyA9PSAmZ2ZzMl9yZ3JwX2dsb3BzKSB7Ci0JCWdsLT5nbF9hc3BhY2UgPSBnZnMyX2FzcGFjZV9nZXQoc2RwKTsKLQkJaWYgKCFnbC0+Z2xfYXNwYWNlKSB7Ci0JCQllcnJvciA9IC1FTk9NRU07Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KKwltYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOworCWlmIChtYXBwaW5nKSB7CisgICAgICAgICAgICAgICAgbWFwcGluZy0+YV9vcHMgPSAmZ2ZzMl9tZXRhX2FvcHM7CisJCW1hcHBpbmctPmhvc3QgPSBzLT5zX2JkZXYtPmJkX2lub2RlOworCQltYXBwaW5nLT5mbGFncyA9IDA7CisJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIEdGUF9OT0ZTKTsKKwkJbWFwcGluZy0+YXNzb2NfbWFwcGluZyA9IE5VTEw7CisJCW1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzLT5zX2JkaTsKKwkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gMDsKIAl9CiAKIAl3cml0ZV9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CkBAIC04MTIsMTAgKzgxNCw2IEBACiAJKmdscCA9IGdsOwogCiAJcmV0dXJuIDA7Ci0KLWZhaWw6Ci0Ja21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7Ci0JcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTE1MTAsMzUgKzE1MDgsMTAgQEAKIAogdm9pZCBnZnMyX2dsX2hhc2hfY2xlYXIoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JdW5zaWduZWQgbG9uZyB0OwogCXVuc2lnbmVkIGludCB4OwotCWludCBjb250OwogCi0JdCA9IGppZmZpZXM7Ci0KLQlmb3IgKDs7KSB7Ci0JCWNvbnQgPSAwOwotCQlmb3IgKHggPSAwOyB4IDwgR0ZTMl9HTF9IQVNIX1NJWkU7IHgrKykgewotCQkJaWYgKGV4YW1pbmVfYnVja2V0KGNsZWFyX2dsb2NrLCBzZHAsIHgpKQotCQkJCWNvbnQgPSAxOwotCQl9Ci0KLQkJaWYgKCFjb250KQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKLQkJCQkgIHQgKyBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3Rfc3RhbGxfc2VjcykgKiBIWikpIHsKLQkJCWZzX3dhcm4oc2RwLCAiVW5tb3VudCBzZWVtcyB0byBiZSBzdGFsbGVkLiAiCi0JCQkJICAgICAiRHVtcGluZyBsb2NrIHN0YXRlLi4uXG4iKTsKLQkJCWdmczJfZHVtcF9sb2Nrc3RhdGUoc2RwKTsKLQkJCXQgPSBqaWZmaWVzOwotCQl9Ci0KLQkJZG93bl93cml0ZSgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJaW52YWxpZGF0ZV9pbm9kZXMoc2RwLT5zZF92ZnMpOwotCQl1cF93cml0ZSgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJbXNsZWVwKDEwKTsKLQl9CisJZm9yICh4ID0gMDsgeCA8IEdGUzJfR0xfSEFTSF9TSVpFOyB4KyspCisJCWV4YW1pbmVfYnVja2V0KGNsZWFyX2dsb2NrLCBzZHAsIHgpOwogCWZsdXNoX3dvcmtxdWV1ZShnbG9ja193b3JrcXVldWUpOwogCXdhaXRfZXZlbnQoc2RwLT5zZF9nbG9ja193YWl0LCBhdG9taWNfcmVhZCgmc2RwLT5zZF9nbG9ja19kaXNwb3NhbCkgPT0gMCk7CiAJZ2ZzMl9kdW1wX2xvY2tzdGF0ZShzZHApOwpAQCAtMTY4NSw3ICsxNjU4LDcgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKKwlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHggZjolcyB0OiVzIGQ6JXMvJWxsdSBhOiVkIHI6JWRcbiIsCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9zdGF0ZSksCiAJCSAgZ2wtPmdsX25hbWUubG5fdHlwZSwKIAkJICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suaCBiL2ZzL2dmczIvZ2xvY2suaAppbmRleCBjMDI2MmZhZi4uMmJkYTE5MSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTgwLDYgKzE4MCwxMyBAQAogCXJldHVybiBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfU0hBUkVEOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpnZnMyX2dsb2NrMmFzcGFjZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJaWYgKGdsLT5nbF9vcHMtPmdvX2ZsYWdzICYgR0xPRl9BU1BBQ0UpCisJCXJldHVybiAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikoZ2wgKyAxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogaW50IGdmczJfZ2xvY2tfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLAogCQkgICB1NjQgbnVtYmVyLCBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wcywKIAkJICAgaW50IGNyZWF0ZSwgc3RydWN0IGdmczJfZ2xvY2sgKipnbHApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDc4NTU0YWMuLjM4ZTM3NDkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogc3RhdGljIHZvaWQgcmdycF9nb19zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCWludCBlcnJvcjsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogc3RhdGljIHZvaWQgcmdycF9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdmczJfZ2xvY2syYXNwYWNlKGdsKTsKIAogCUJVR19PTighKGZsYWdzICYgRElPX01FVEFEQVRBKSk7CiAJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoZ2wtPmdsX3NiZCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyB2b2lkIGlub2RlX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IGdsLT5nbF9vYmplY3Q7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptZXRhbWFwcGluZyA9IGdmczJfZ2xvY2syYXNwYWNlKGdsKTsKIAlpbnQgZXJyb3I7CiAKIAlpZiAoaXAgJiYgIVNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKQEAgLTE4Myw3ICsxODMsNyBAQAogCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOwogCiAJaWYgKGZsYWdzICYgRElPX01FVEFEQVRBKSB7Ci0JCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdmczJfZ2xvY2syYXNwYWNlKGdsKTsKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7CiAJCWlmIChpcCkgewogCQkJc2V0X2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKTsKQEAgLTI4Miw3ICsyODIsOCBAQAogCiBzdGF0aWMgaW50IHJncnBfZ29fZGVtb3RlX29rKGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlyZXR1cm4gIWdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZy0+bnJwYWdlczsKKwljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKShnbCArIDEpOworCXJldHVybiAhbWFwcGluZy0+bnJwYWdlczsKIH0KIAogLyoqCkBAIC0zODcsOCArMzg4LDcgQEAKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSAoc3RydWN0IGdmczJfaW5vZGUgKilnbC0+Z2xfb2JqZWN0OwogCiAJaWYgKGdsLT5nbF9kZW1vdGVfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgJiYKLQkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRCAmJgotCSAgICBpcCAmJiB0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSkgeworCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfU0hBUkVEICYmIGlwKSB7CiAJCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJCWlmIChxdWV1ZV93b3JrKGdmczJfZGVsZXRlX3dvcmtxdWV1ZSwgJmdsLT5nbF9kZWxldGUpID09IDApCiAJCQlnZnMyX2dsb2NrX3B1dF9ub2xvY2soZ2wpOwpAQCAtNDA3LDYgKzQwNyw3IEBACiAJLmdvX2R1bXAgPSBpbm9kZV9nb19kdW1wLAogCS5nb190eXBlID0gTE1fVFlQRV9JTk9ERSwKIAkuZ29fbWluX2hvbGRfdGltZSA9IEhaIC8gNSwKKwkuZ29fZmxhZ3MgPSBHTE9GX0FTUEFDRSwKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9yZ3JwX2dsb3BzID0gewpAQCAtNDE4LDYgKzQxOSw3IEBACiAJLmdvX2R1bXAgPSBnZnMyX3JncnBfZHVtcCwKIAkuZ29fdHlwZSA9IExNX1RZUEVfUkdSUCwKIAkuZ29fbWluX2hvbGRfdGltZSA9IEhaIC8gNSwKKwkuZ29fZmxhZ3MgPSBHTE9GX0FTUEFDRSwKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl90cmFuc19nbG9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5jb3JlLmggYi9mcy9nZnMyL2luY29yZS5oCmluZGV4IGJjMGFkMTUuLmI4MDI1ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5jb3JlLmgKKysrIGIvZnMvZ2ZzMi9pbmNvcmUuaApAQCAtMTYyLDYgKzE2Miw4IEBACiAJdm9pZCAoKmdvX2NhbGxiYWNrKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAljb25zdCBpbnQgZ29fdHlwZTsKIAljb25zdCB1bnNpZ25lZCBsb25nIGdvX21pbl9ob2xkX3RpbWU7CisJY29uc3QgdW5zaWduZWQgbG9uZyBnb19mbGFnczsKKyNkZWZpbmUgR0xPRl9BU1BBQ0UgMQogfTsKIAogZW51bSB7CkBAIC0yMjUsNyArMjI3LDYgQEAKIAogCXN0cnVjdCBnZnMyX3NiZCAqZ2xfc2JkOwogCi0Jc3RydWN0IGlub2RlICpnbF9hc3BhY2U7CiAJc3RydWN0IGxpc3RfaGVhZCBnbF9haWxfbGlzdDsKIAlhdG9taWNfdCBnbF9haWxfY291bnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBnbF93b3JrOwpAQCAtMjU4LDcgKzI1OSw2IEBACiAJR0lGX0lOVkFMSUQJCT0gMCwKIAlHSUZfUURfTE9DS0VECQk9IDEsCiAJR0lGX1NXX1BBR0VECQk9IDMsCi0JR0lGX1VTRVIgICAgICAgICAgICAgICAgPSA0LCAvKiB1c2VyIGlub2RlLCBub3QgbWV0YWRhdGEgYWRkciBzcGFjZSAqLwogfTsKIAogCkBAIC00NTEsNyArNDUxLDYgQEAKIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfcXVhbnR1bTsgLyogU2VjcyBiZXR3ZWVuIHN5bmNzIHRvIHF1b3RhIGZpbGUgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfbmV3X2ZpbGVzX2pkYXRhOwogCXVuc2lnbmVkIGludCBndF9tYXhfcmVhZGFoZWFkOyAvKiBNYXggYnl0ZXMgdG8gcmVhZC1haGVhZCBmcm9tIGRpc2sgKi8KLQl1bnNpZ25lZCBpbnQgZ3Rfc3RhbGxfc2VjczsgLyogRGV0ZWN0cyB0cm91YmxlISAqLwogCXVuc2lnbmVkIGludCBndF9jb21wbGFpbl9zZWNzOwogCXVuc2lnbmVkIGludCBndF9zdGF0ZnNfcXVhbnR1bTsKIAl1bnNpZ25lZCBpbnQgZ3Rfc3RhdGZzX3Nsb3c7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggNmUyMjBmNC4uYjFiZjI2OSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtNDUsNyArNDUsNyBAQAogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJdTY0ICpub19hZGRyID0gb3BhcXVlOwogCi0JaWYgKGlwLT5pX25vX2FkZHIgPT0gKm5vX2FkZHIgJiYgdGVzdF9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncykpCisJaWYgKGlwLT5pX25vX2FkZHIgPT0gKm5vX2FkZHIpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC01OCw3ICs1OCw2IEBACiAKIAlpbm9kZS0+aV9pbm8gPSAodW5zaWduZWQgbG9uZykqbm9fYWRkcjsKIAlpcC0+aV9ub19hZGRyID0gKm5vX2FkZHI7Ci0Jc2V0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODQsNyArODMsNyBAQAogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfc2tpcF9kYXRhICpkYXRhID0gb3BhcXVlOwogCi0JaWYgKGlwLT5pX25vX2FkZHIgPT0gZGF0YS0+bm9fYWRkciAmJiB0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSl7CisJaWYgKGlwLT5pX25vX2FkZHIgPT0gZGF0YS0+bm9fYWRkcikgewogCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUUpKXsKIAkJCWRhdGEtPnNraXBwZWQgPSAxOwogCQkJcmV0dXJuIDA7CkBAIC0xMDMsNyArMTAyLDYgQEAKIAkJcmV0dXJuIDE7CiAJaW5vZGUtPmlfaW5vID0gKHVuc2lnbmVkIGxvbmcpKGRhdGEtPm5vX2FkZHIpOwogCWlwLT5pX25vX2FkZHIgPSBkYXRhLT5ub19hZGRyOwotCXNldF9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja19kbG0uYyBiL2ZzL2dmczIvbG9ja19kbG0uYwppbmRleCAwZTVlMGU3Li41NjliNDYyNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NrX2RsbS5jCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMzAsNyArMzAsMTAgQEAKIAogCXN3aXRjaCAoZ2wtPmdsX2xrc2Iuc2Jfc3RhdHVzKSB7CiAJY2FzZSAtRExNX0VVTkxPQ0s6IC8qIFVubG9ja2VkLCBzbyBnbG9jayBjYW4gYmUgZnJlZWQgKi8KLQkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJCWlmIChnbC0+Z2xfb3BzLT5nb19mbGFncyAmIEdMT0ZfQVNQQUNFKQorCQkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcCwgZ2wpOworCQllbHNlCisJCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwpKQogCQkJd2FrZV91cCgmc2RwLT5zZF9nbG9ja193YWl0KTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuYwppbmRleCBkZTk3NjMyLi5hZGMyNjBmYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTUyOCw5ICs1MjgsOSBAQAogCQlnZnMyX3BpbihzZHAsIGJkLT5iZF9iaCk7CiAJCXRyLT50cl9udW1fZGF0YWJ1Zl9uZXcrKzsKIAkJc2RwLT5zZF9sb2dfbnVtX2RhdGFidWYrKzsKLQkJbGlzdF9hZGQoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfZGF0YWJ1Zik7CisJCWxpc3RfYWRkX3RhaWwoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfZGF0YWJ1Zik7CiAJfSBlbHNlIHsKLQkJbGlzdF9hZGQoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfb3JkZXJlZCk7CisJCWxpc3RfYWRkX3RhaWwoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfb3JkZXJlZCk7CiAJfQogb3V0OgogCWdmczJfbG9nX3VubG9jayhzZHApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA1YjMxZjc3Li5hODhmYWRjNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTUyLDYgKzUyLDIyIEBACiAJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfaW5pdF9nbF9hc3BhY2Vfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gZm9vOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopKGdsICsgMSk7CisKKwlnZnMyX2luaXRfZ2xvY2tfb25jZShnbCk7CisJbWVtc2V0KG1hcHBpbmcsIDAsIHNpemVvZigqbWFwcGluZykpOworCUlOSVRfUkFESVhfVFJFRSgmbWFwcGluZy0+cGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKKwlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5wcml2YXRlX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5wcml2YXRlX2xvY2spOworCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZtYXBwaW5nLT5pX21tYXApOworCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKTsKK30KKwogLyoqCiAgKiBpbml0X2dmczJfZnMgLSBSZWdpc3RlciBHRlMyIGFzIGEgZmlsZXN5c3RlbQogICoKQEAgLTc4LDYgKzk0LDE0IEBACiAJaWYgKCFnZnMyX2dsb2NrX2NhY2hlcCkKIAkJZ290byBmYWlsOwogCisJZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImdmczJfZ2xvY2sgKGFzcGFjZSkiLAorCQkJCQlzaXplb2Yoc3RydWN0IGdmczJfZ2xvY2spICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX3NwYWNlKSwKKwkJCQkJMCwgMCwgZ2ZzMl9pbml0X2dsX2FzcGFjZV9vbmNlKTsKKworCWlmICghZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwKQorCQlnb3RvIGZhaWw7CisKIAlnZnMyX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJnZnMyX2lub2RlIiwKIAkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBnZnMyX2lub2RlKSwKIAkJCQkJICAgICAgMCwgIFNMQUJfUkVDTEFJTV9BQ0NPVU5UfApAQCAtMTQ0LDYgKzE2OCw5IEBACiAJaWYgKGdmczJfaW5vZGVfY2FjaGVwKQogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9pbm9kZV9jYWNoZXApOwogCisJaWYgKGdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcCk7CisKIAlpZiAoZ2ZzMl9nbG9ja19jYWNoZXApCiAJCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2dsb2NrX2NhY2hlcCk7CiAKQEAgLTE2OSw2ICsxOTYsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX3JncnBkX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfYnVmZGF0YV9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2lub2RlX2NhY2hlcCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfZ2xvY2tfY2FjaGVwKTsKIAogCWdmczJfc3lzX3VuaW5pdCgpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmMgYi9mcy9nZnMyL21ldGFfaW8uYwppbmRleCA2ZjY4YTVmLi4wYmIxMmM4IDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uYworKysgYi9mcy9nZnMyL21ldGFfaW8uYwpAQCAtOTMsNDkgKzkzLDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYXNwYWNlX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfbWV0YV9hb3BzID0gewogCS53cml0ZXBhZ2UgPSBnZnMyX2FzcGFjZV93cml0ZXBhZ2UsCiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKIAkuc3luY19wYWdlID0gYmxvY2tfc3luY19wYWdlLAogfTsKIAogLyoqCi0gKiBnZnMyX2FzcGFjZV9nZXQgLSBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzdHJ1Y3QgaW5vZGUgc3RydWN0dXJlCi0gKiBAc2RwOiB0aGUgZmlsZXN5c3RlbSB0aGUgYXNwYWNlIGlzIGluCi0gKgotICogUmlnaHQgbm93IGEgc3RydWN0IGlub2RlIGlzIGp1c3QgYSBzdHJ1Y3QgaW5vZGUuICBNYXliZSBMaW51eAotICogd2lsbCBzdXBwbHkgYSBtb3JlIGxpZ2h0d2VpZ2h0IGFkZHJlc3Mgc3BhY2UgY29uc3RydWN0ICh0aGF0IHdvcmtzKQotICogaW4gdGhlIGZ1dHVyZS4KLSAqCi0gKiBNYWtlIHN1cmUgcGFnZXMvYnVmZmVycyBpbiB0aGlzIGFzcGFjZSBhcmVuJ3QgaW4gaGlnaCBtZW1vcnkuCi0gKgotICogUmV0dXJuczogdGhlIGFzcGFjZQotICovCi0KLXN0cnVjdCBpbm9kZSAqZ2ZzMl9hc3BhY2VfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCXN0cnVjdCBpbm9kZSAqYXNwYWNlOwotCXN0cnVjdCBnZnMyX2lub2RlICppcDsKLQotCWFzcGFjZSA9IG5ld19pbm9kZShzZHAtPnNkX3Zmcyk7Ci0JaWYgKGFzcGFjZSkgewotCQltYXBwaW5nX3NldF9nZnBfbWFzayhhc3BhY2UtPmlfbWFwcGluZywgR0ZQX05PRlMpOwotCQlhc3BhY2UtPmlfbWFwcGluZy0+YV9vcHMgPSAmYXNwYWNlX2FvcHM7Ci0JCWFzcGFjZS0+aV9zaXplID0gTUFYX0xGU19GSUxFU0laRTsKLQkJaXAgPSBHRlMyX0koYXNwYWNlKTsKLQkJY2xlYXJfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpOwotCQlpbnNlcnRfaW5vZGVfaGFzaChhc3BhY2UpOwotCX0KLQlyZXR1cm4gYXNwYWNlOwotfQotCi12b2lkIGdmczJfYXNwYWNlX3B1dChzdHJ1Y3QgaW5vZGUgKmFzcGFjZSkKLXsKLQlyZW1vdmVfaW5vZGVfaGFzaChhc3BhY2UpOwotCWlwdXQoYXNwYWNlKTsKLX0KLQotLyoqCiAgKiBnZnMyX21ldGFfc3luYyAtIFN5bmMgYWxsIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2xvY2sKICAqIEBnbDogVGhlIGdsb2NrCiAgKgpAQCAtMTQzLDcgKzEwNyw3IEBACiAKIHZvaWQgZ2ZzMl9tZXRhX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCWludCBlcnJvcjsKIAogCWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKQEAgLTE2NCw3ICsxMjgsNyBAQAogCiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdmczJfZ2V0YnVmKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdTY0IGJsa25vLCBpbnQgY3JlYXRlKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtMzQ0LDggKzMwOCwxMCBAQAogCiB2b2lkIGdmczJfcmVtb3ZlX2Zyb21fam91cm5hbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsIGludCBtZXRhKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihiaC0+Yl9wYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGJoLT5iX3BhZ2UtPm1hcHBpbmc7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnZnMyX21hcHBpbmcyc2JkKG1hcHBpbmcpOwogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkID0gYmgtPmJfcHJpdmF0ZTsKKwogCWlmICh0ZXN0X2NsZWFyX2J1ZmZlcl9waW5uZWQoYmgpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmJkLT5iZF9sZS5sZV9saXN0KTsKIAkJaWYgKG1ldGEpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWV0YV9pby5oIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKaW5kZXggZGUyNzBjMi4uNmExZDliYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tZXRhX2lvLmgKKysrIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKQEAgLTM3LDggKzM3LDE2IEBACiAJICAgICAgIDAsIGZyb21faGVhZCAtIHRvX2hlYWQpOwogfQogCi1zdHJ1Y3QgaW5vZGUgKmdmczJfYXNwYWNlX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfYXNwYWNlX3B1dChzdHJ1Y3QgaW5vZGUgKmFzcGFjZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX21ldGFfYW9wczsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2ZzMl9zYmQgKmdmczJfbWFwcGluZzJzYmQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJaWYgKG1hcHBpbmctPmFfb3BzID09ICZnZnMyX21ldGFfYW9wcykKKwkJcmV0dXJuICgoKHN0cnVjdCBnZnMyX2dsb2NrICopbWFwcGluZykgLSAxKS0+Z2xfc2JkOworCWVsc2UKKwkJcmV0dXJuIGlub2RlLT5pX3NiLT5zX2ZzX2luZm87Cit9CiAKIHZvaWQgZ2ZzMl9tZXRhX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBhODZlZDYzLi5hMDU0YjUyIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtNjUsNyArNjUsNiBAQAogCWd0LT5ndF9xdW90YV9zY2FsZV9kZW4gPSAxOwogCWd0LT5ndF9uZXdfZmlsZXNfamRhdGEgPSAwOwogCWd0LT5ndF9tYXhfcmVhZGFoZWFkID0gMSA8PCAxODsKLQlndC0+Z3Rfc3RhbGxfc2VjcyA9IDYwMDsKIAlndC0+Z3RfY29tcGxhaW5fc2VjcyA9IDEwOwogfQogCkBAIC0xMjQxLDEwICsxMjQwLDkgQEAKIGZhaWxfbG9ja2luZzoKIAlpbml0X2xvY2tpbmcoc2RwLCAmbW91bnRfZ2gsIFVORE8pOwogZmFpbF9sbToKKwlpbnZhbGlkYXRlX2lub2RlcyhzYik7CiAJZ2ZzMl9nbF9oYXNoX2NsZWFyKHNkcCk7CiAJZ2ZzMl9sbV91bm1vdW50KHNkcCk7Ci0Jd2hpbGUgKGludmFsaWRhdGVfaW5vZGVzKHNiKSkKLQkJeWllbGQoKTsKIGZhaWxfc3lzOgogCWdmczJfc3lzX2ZzX2RlbChzZHApOwogZmFpbDoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBiOWRkM2RhLi5lNWUyMjYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC03MjIsOCArNzIyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCS8qIENoZWNrIHRoaXMgaXMgYSAibm9ybWFsIiBpbm9kZSwgZXRjICovCi0JaWYgKCF0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSB8fAotCSAgICAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykpCisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpCiAJCXJldHVybiAwOwogCXJldCA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwogCWlmIChyZXQpCkBAIC04NjAsNiArODU5LDcgQEAKIAlnZnMyX2NsZWFyX3JncnBkKHNkcCk7CiAJZ2ZzMl9qaW5kZXhfZnJlZShzZHApOwogCS8qICBUYWtlIGFwYXJ0IGdsb2NrIHN0cnVjdHVyZXMgYW5kIGJ1ZmZlciBsaXN0cyAgKi8KKwlpbnZhbGlkYXRlX2lub2RlcyhzZHAtPnNkX3Zmcyk7CiAJZ2ZzMl9nbF9oYXNoX2NsZWFyKHNkcCk7CiAJLyogIFVubW91bnQgdGhlIGxvY2tpbmcgcHJvdG9jb2wgICovCiAJZ2ZzMl9sbV91bm1vdW50KHNkcCk7CkBAIC0xMTk0LDcgKzExOTQsNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAKLQlpZiAodGVzdF9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncykgJiYgaW5vZGUtPmlfbmxpbmspIHsKKwlpZiAoaW5vZGUtPmlfbmxpbmspIHsKIAkJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gaXAtPmlfaW9wZW5fZ2guZ2hfZ2w7CiAJCWlmIChnbCAmJiB0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJCWNsZWFyX25saW5rKGlub2RlKTsKQEAgLTEyMTIsMTggKzEyMTIsMTIgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCi0JLyogVGhpcyB0ZWxscyB1cyBpdHMgYSAicmVhbCIgaW5vZGUgYW5kIG5vdCBvbmUgd2hpY2ggb25seQotCSAqIHNlcnZlcyB0byBjb250YWluIGFuIGFkZHJlc3Mgc3BhY2UgKHNlZSByZ3JwLmMsIG1ldGFfaW8uYykKLQkgKiB3aGljaCB0aGVyZWZvcmUgZG9lc24ndCBoYXZlIGl0cyBvd24gZ2xvY2tzLgotCSAqLwotCWlmICh0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSkgewotCQlpcC0+aV9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKLQkJZ2ZzMl9nbG9ja19wdXQoaXAtPmlfZ2wpOwotCQlpcC0+aV9nbCA9IE5VTEw7Ci0JCWlmIChpcC0+aV9pb3Blbl9naC5naF9nbCkgewotCQkJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IE5VTEw7Ci0JCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwotCQl9CisJaXAtPmlfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJZ2ZzMl9nbG9ja19wdXQoaXAtPmlfZ2wpOworCWlwLT5pX2dsID0gTlVMTDsKKwlpZiAoaXAtPmlfaW9wZW5fZ2guZ2hfZ2wpIHsKKwkJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpcC0+aV9pb3Blbl9naCk7CiAJfQogfQogCkBAIC0xMzU4LDkgKzEzNTIsNiBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIXRlc3RfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpKQotCQlnb3RvIG91dDsKLQogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggMGRjMzQ2Mi4uYTBkYjFjOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC00NzgsNyArNDc4LDYgQEAKIFRVTkVfQVRUUihzdGF0ZnNfc2xvdywgMCk7CiBUVU5FX0FUVFIobmV3X2ZpbGVzX2pkYXRhLCAwKTsKIFRVTkVfQVRUUihxdW90YV9zaW11bF9zeW5jLCAxKTsKLVRVTkVfQVRUUihzdGFsbF9zZWNzLCAxKTsKIFRVTkVfQVRUUihzdGF0ZnNfcXVhbnR1bSwgMSk7CiBUVU5FX0FUVFJfMyhxdW90YV9zY2FsZSwgcXVvdGFfc2NhbGVfc2hvdywgcXVvdGFfc2NhbGVfc3RvcmUpOwogCkBAIC00OTEsNyArNDkwLDYgQEAKIAkmdHVuZV9hdHRyX2NvbXBsYWluX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19zbG93LmF0dHIsCiAJJnR1bmVfYXR0cl9xdW90YV9zaW11bF9zeW5jLmF0dHIsCi0JJnR1bmVfYXR0cl9zdGFsbF9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGF0ZnNfcXVhbnR1bS5hdHRyLAogCSZ0dW5lX2F0dHJfcXVvdGFfc2NhbGUuYXR0ciwKIAkmdHVuZV9hdHRyX25ld19maWxlc19qZGF0YS5hdHRyLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi91dGlsLmMgYi9mcy9nZnMyL3V0aWwuYwppbmRleCBmNmE3ZWZhLi4yMjZmMmJmIDEwMDY0NAotLS0gYS9mcy9nZnMyL3V0aWwuYworKysgYi9mcy9nZnMyL3V0aWwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgInV0aWwuaCIKIAogc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9pbm9kZV9jYWNoZXAgX19yZWFkX21vc3RseTsKIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2J1ZmRhdGFfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9yZ3JwZF9jYWNoZXAgX19yZWFkX21vc3RseTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdXRpbC5oIGIvZnMvZ2ZzMi91dGlsLmgKaW5kZXggMzNlOTZiMC4uYjQzMmUwNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi91dGlsLmgKKysrIGIvZnMvZ2ZzMi91dGlsLmgKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9nbG9ja19jYWNoZXA7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcDsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9pbm9kZV9jYWNoZXA7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfYnVmZGF0YV9jYWNoZXA7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfcmdycGRfY2FjaGVwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL0tjb25maWcgYi9mcy9uZnMvS2NvbmZpZwppbmRleCA1OWU1NjczLi5hNDNkMDdlIDEwMDY0NAotLS0gYS9mcy9uZnMvS2NvbmZpZworKysgYi9mcy9uZnMvS2NvbmZpZwpAQCAtOTUsOCArOTUsNyBAQAogCSAgTW9zdCBwZW9wbGUgc2F5IE4gaGVyZS4KIAogY29uZmlnIE5GU19GU0NBQ0hFCi0JYm9vbCAiUHJvdmlkZSBORlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORlNfRlM9bSAmJiBGU0NBQ0hFIHx8IE5GU19GUz15ICYmIEZTQ0FDSEU9eQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgTkZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzYyB0aHJvdWdoCmRpZmYgLS1naXQgYS9mcy9uZnMvaW9zdGF0LmggYi9mcy9uZnMvaW9zdGF0LmgKaW5kZXggNDZkNzc5YS4uMWQ4ZDVjOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lvc3RhdC5oCisrKyBiL2ZzL25mcy9pb3N0YXQuaApAQCAtNTcsMTIgKzU3LDEyIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lvc3RhdHMgKm5mc19hbGxvY19pb3N0YXRzKHZvaWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW9zdGF0cyBfX3BlcmNwdSAqbmZzX2FsbG9jX2lvc3RhdHModm9pZCkKIHsKIAlyZXR1cm4gYWxsb2NfcGVyY3B1KHN0cnVjdCBuZnNfaW9zdGF0cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnJlZV9pb3N0YXRzKHN0cnVjdCBuZnNfaW9zdGF0cyAqc3RhdHMpCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZyZWVfaW9zdGF0cyhzdHJ1Y3QgbmZzX2lvc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogewogCWlmIChzdGF0cyAhPSBOVUxMKQogCQlmcmVlX3BlcmNwdShzdGF0cyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGF0LmMgYi9mcy9uaWxmczIvZGF0LmMKaW5kZXggMTg3ZGQwNy4uOWQxZTVkZTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kYXQuYworKysgYi9mcy9uaWxmczIvZGF0LmMKQEAgLTM4OCw4ICszODgsNyBAQAogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGJsb2NrbnJwICE9IE5VTEwpCi0JCSpibG9ja25ycCA9IGJsb2NrbnI7CisJKmJsb2NrbnJwID0gYmxvY2tucjsKIAogIG91dDoKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW9jdGwuYyBiL2ZzL25pbGZzMi9pb2N0bC5jCmluZGV4IGQ2YjJiODMuLjMxM2QwYTIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pb2N0bC5jCisrKyBiL2ZzL25pbGZzMi9pb2N0bC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgkvKiBjYXBhYmxlKCkgKi8KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CS8qIGNvcHlfZnJvbV91c2VyKCksIGNvcHlfdG9fdXNlcigpICovCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CS8qIG1udF93YW50X3dyaXRlKCksIG1udF9kcm9wX3dyaXRlKCkgKi8KICNpbmNsdWRlIDxsaW51eC9uaWxmczJfZnMuaD4KICNpbmNsdWRlICJuaWxmcy5oIgogI2luY2x1ZGUgInNlZ21lbnQuaCIKQEAgLTEwNywyMCArMTA4LDI4IEBACiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gLUVGQVVMVDsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNwbW9kZSwgYXJncCwgc2l6ZW9mKGNwbW9kZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwkJZ290byBvdXQ7CiAKIAltdXRleF9sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOworCiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CiAJcmV0ID0gbmlsZnNfY3BmaWxlX2NoYW5nZV9jcG1vZGUoCiAJCWNwZmlsZSwgY3Btb2RlLmNtX2NubywgY3Btb2RlLmNtX21vZGUpOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoaW5vZGUtPmlfc2IpOwotCQltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCW5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChpbm9kZS0+aV9zYik7IC8qIG5ldmVyIGZhaWxzICovCisJZWxzZQorCQluaWxmc190cmFuc2FjdGlvbl9jb21taXQoaW5vZGUtPmlfc2IpOyAvKiBuZXZlciBmYWlscyAqLworCiAJbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOworb3V0OgorCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzNSwxNiArMTQ0LDIzIEBACiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gLUVGQVVMVDsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNubywgYXJncCwgc2l6ZW9mKGNubykpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwkJZ290byBvdXQ7CiAKIAluaWxmc190cmFuc2FjdGlvbl9iZWdpbihpbm9kZS0+aV9zYiwgJnRpLCAwKTsKIAlyZXQgPSBuaWxmc19jcGZpbGVfZGVsZXRlX2NoZWNrcG9pbnQoY3BmaWxlLCBjbm8pOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoaW5vZGUtPmlfc2IpOwotCQlyZXR1cm4gcmV0OwotCX0KLQluaWxmc190cmFuc2FjdGlvbl9jb21taXQoaW5vZGUtPmlfc2IpOyAvKiBuZXZlciBmYWlscyAqLworCWVsc2UKKwkJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KK291dDoKKwltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00OTYsMTIgKzUxMiwxOSBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihhcmd2LCBhcmdwLCBzaXplb2YoYXJndikpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCisJcmV0ID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIoYXJndiwgYXJncCwgc2l6ZW9mKGFyZ3YpKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRUlOVkFMOwogCW5zZWdzID0gYXJndls0XS52X25tZW1iczsKIAlpZiAoYXJndls0XS52X3NpemUgIT0gYXJnc3pbNF0pCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKwogCS8qCiAJICogYXJndls0XSBwb2ludHMgdG8gc2VnbWVudCBudW1iZXJzIHRoaXMgaW9jdGwgY2xlYW5zLiAgV2UKIAkgKiB1c2Uga21hbGxvYygpIGZvciBpdHMgYnVmZmVyIGJlY2F1c2UgbWVtb3J5IHVzZWQgZm9yIHRoZQpAQCAtNTA5LDkgKzUzMiwxMCBAQAogCSAqLwogCWtidWZzWzRdID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJndls0XS52X2Jhc2UsCiAJCQkgICAgICAgbnNlZ3MgKiBzaXplb2YoX191NjQpKTsKLQlpZiAoSVNfRVJSKGtidWZzWzRdKSkKLQkJcmV0dXJuIFBUUl9FUlIoa2J1ZnNbNF0pOwotCisJaWYgKElTX0VSUihrYnVmc1s0XSkpIHsKKwkJcmV0ID0gUFRSX0VSUihrYnVmc1s0XSk7CisJCWdvdG8gb3V0OworCX0KIAluaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKIAogCWZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKQEAgLTU2MywxMCArNTg3LDEyIEBACiAJCW5pbGZzX3JlbW92ZV9hbGxfZ2Npbm9kZShuaWxmcyk7CiAJY2xlYXJfbmlsZnNfZ2NfcnVubmluZyhuaWxmcyk7CiAKLSBvdXRfZnJlZToKK291dF9mcmVlOgogCXdoaWxlICgtLW4gPj0gMCkKIAkJdmZyZWUoa2J1ZnNbbl0pOwogCWtmcmVlKGtidWZzWzRdKTsKK291dDoKKwltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzUsMTMgKzYwMSwxNyBAQAogewogCV9fdTY0IGNubzsKIAlpbnQgcmV0OworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzOwogCiAJcmV0ID0gbmlsZnNfY29uc3RydWN0X3NlZ21lbnQoaW5vZGUtPmlfc2IpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJaWYgKGFyZ3AgIT0gTlVMTCkgewotCQljbm8gPSBOSUxGU19TQihpbm9kZS0+aV9zYiktPnNfbmlsZnMtPm5zX2NubyAtIDE7CisJCW5pbGZzID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCQlkb3duX3JlYWQoJm5pbGZzLT5uc19zZWdjdG9yX3NlbSk7CisJCWNubyA9IG5pbGZzLT5uc19jbm8gLSAxOworCQl1cF9yZWFkKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZjbm8sIHNpemVvZihjbm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKaW5kZXggYzljOTZjNy4uMDE3YmVkYyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKQEAgLTM5LDcgKzM5LDYgQEAKIAlOSUxGU19TRUdfRkFJTF9JTywKIAlOSUxGU19TRUdfRkFJTF9NQUdJQywKIAlOSUxGU19TRUdfRkFJTF9TRVEsCi0JTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fU0VHU1VNLAogCU5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NVUEVSX1JPT1QsCiAJTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fRlVMTCwKIAlOSUxGU19TRUdfRkFJTF9DT05TSVNURU5DWSwKQEAgLTcxLDEwICs3MCw2IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJOSUxGUyB3YXJuaW5nOiBTZXF1ZW5jZSBudW1iZXIgbWlzbWF0Y2hcbiIpOwogCQlicmVhazsKLQljYXNlIE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NFR1NVTToKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IENoZWNrc3VtIGVycm9yIGluIHNlZ21lbnQgc3VtbWFyeVxuIik7Ci0JCWJyZWFrOwogCWNhc2UgTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fU1VQRVJfUk9PVDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IENoZWNrc3VtIGVycm9yIGluIHN1cGVyIHJvb3RcbiIpOwpAQCAtMjA2LDE5ICsyMDEsMTUgQEAKICAqIEBwc2VnX3N0YXJ0OiBzdGFydCBkaXNrIGJsb2NrIG51bWJlciBvZiBwYXJ0aWFsIHNlZ21lbnQKICAqIEBzZWdfc2VxOiBzZXF1ZW5jZSBudW1iZXIgcmVxdWVzdGVkCiAgKiBAc3NpOiBwb2ludGVyIHRvIG5pbGZzX3NlZ3N1bV9pbmZvIHN0cnVjdCB0byBzdG9yZSBpbmZvcm1hdGlvbgotICogQGZ1bGxfY2hlY2s6IGZ1bGwgY2hlY2sgZmxhZwotICogICAgICAgICAgICAgICgwOiBvbmx5IGNoZWNrcyBzZWdtZW50IHN1bW1hcnkgQ1JDLCAxOiBkYXRhIENSQykKICAqLwogc3RhdGljIGludAogbG9hZF9zZWdtZW50X3N1bW1hcnkoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgc2VjdG9yX3QgcHNlZ19zdGFydCwKLQkJICAgICB1NjQgc2VnX3NlcSwgc3RydWN0IG5pbGZzX3NlZ3N1bV9pbmZvICpzc2ksCi0JCSAgICAgaW50IGZ1bGxfY2hlY2spCisJCSAgICAgdTY0IHNlZ19zZXEsIHN0cnVjdCBuaWxmc19zZWdzdW1faW5mbyAqc3NpKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfc3VtOwogCXN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKnN1bTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgbmJsb2NrOwotCXU2NCBjaGVja19ieXRlczsKLQl1MzIgY3JjLCBjcmNfc3VtOworCXVuc2lnbmVkIGxvbmcgbmJsb2NrOworCXUzMiBjcmM7CiAJaW50IHJldCA9IE5JTEZTX1NFR19GQUlMX0lPOwogCiAJYmhfc3VtID0gc2JfYnJlYWQoc2JpLT5zX3N1cGVyLCBwc2VnX3N0YXJ0KTsKQEAgLTIzNywzNCArMjI4LDI0IEBACiAJCXJldCA9IE5JTEZTX1NFR19GQUlMX1NFUTsKIAkJZ290byBmYWlsZWQ7CiAJfQotCWlmIChmdWxsX2NoZWNrKSB7Ci0JCW9mZnNldCA9IHNpemVvZihzdW0tPnNzX2RhdGFzdW0pOwotCQljaGVja19ieXRlcyA9Ci0JCQkoKHU2NClzc2ktPm5ibG9ja3MgPDwgc2JpLT5zX3N1cGVyLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJbmJsb2NrID0gc3NpLT5uYmxvY2tzOwotCQljcmNfc3VtID0gbGUzMl90b19jcHUoc3VtLT5zc19kYXRhc3VtKTsKLQkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fRlVMTDsKLQl9IGVsc2UgeyAvKiBvbmx5IGNoZWNrcyBzZWdtZW50IHN1bW1hcnkgKi8KLQkJb2Zmc2V0ID0gc2l6ZW9mKHN1bS0+c3NfZGF0YXN1bSkgKyBzaXplb2Yoc3VtLT5zc19zdW1zdW0pOwotCQljaGVja19ieXRlcyA9IHNzaS0+c3VtYnl0ZXM7Ci0JCW5ibG9jayA9IHNzaS0+bnN1bWJsazsKLQkJY3JjX3N1bSA9IGxlMzJfdG9fY3B1KHN1bS0+c3Nfc3Vtc3VtKTsKLQkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fU0VHU1VNOwotCX0KIAorCW5ibG9jayA9IHNzaS0+bmJsb2NrczsKIAlpZiAodW5saWtlbHkobmJsb2NrID09IDAgfHwKIAkJICAgICBuYmxvY2sgPiBzYmktPnNfbmlsZnMtPm5zX2Jsb2Nrc19wZXJfc2VnbWVudCkpIHsKIAkJLyogVGhpcyBsaW1pdHMgdGhlIG51bWJlciBvZiBibG9ja3MgcmVhZCBpbiB0aGUgQ1JDIGNoZWNrICovCiAJCXJldCA9IE5JTEZTX1NFR19GQUlMX0NPTlNJU1RFTkNZOwogCQlnb3RvIGZhaWxlZDsKIAl9Ci0JaWYgKGNhbGNfY3JjX2NvbnQoc2JpLCBiaF9zdW0sICZjcmMsIG9mZnNldCwgY2hlY2tfYnl0ZXMsCisJaWYgKGNhbGNfY3JjX2NvbnQoc2JpLCBiaF9zdW0sICZjcmMsIHNpemVvZihzdW0tPnNzX2RhdGFzdW0pLAorCQkJICAoKHU2NCluYmxvY2sgPDwgc2JpLT5zX3N1cGVyLT5zX2Jsb2Nrc2l6ZV9iaXRzKSwKIAkJCSAgcHNlZ19zdGFydCwgbmJsb2NrKSkgewogCQlyZXQgPSBOSUxGU19TRUdfRkFJTF9JTzsKIAkJZ290byBmYWlsZWQ7CiAJfQotCWlmIChjcmMgPT0gY3JjX3N1bSkKKwlpZiAoY3JjID09IGxlMzJfdG9fY3B1KHN1bS0+c3NfZGF0YXN1bSkpCiAJCXJldCA9IDA7CisJZWxzZQorCQlyZXQgPSBOSUxGU19TRUdfRkFJTF9DSEVDS1NVTV9GVUxMOwogIGZhaWxlZDoKIAlicmVsc2UoYmhfc3VtKTsKICBvdXQ6CkBAIC01OTgsNyArNTc5LDcgQEAKIAogCXdoaWxlIChzZWdudW0gIT0gcmktPnJpX3NlZ251bSB8fCBwc2VnX3N0YXJ0IDw9IHJpLT5yaV9wc2VnX3N0YXJ0KSB7CiAKLQkJcmV0ID0gbG9hZF9zZWdtZW50X3N1bW1hcnkoc2JpLCBwc2VnX3N0YXJ0LCBzZWdfc2VxLCAmc3NpLCAxKTsKKwkJcmV0ID0gbG9hZF9zZWdtZW50X3N1bW1hcnkoc2JpLCBwc2VnX3N0YXJ0LCBzZWdfc2VxLCAmc3NpKTsKIAkJaWYgKHJldCkgewogCQkJaWYgKHJldCA9PSBOSUxGU19TRUdfRkFJTF9JTykgewogCQkJCWVyciA9IC1FSU87CkBAIC04MjEsNyArODAyLDcgQEAKIAogCWZvciAoOzspIHsKIAkJLyogTG9hZCBzZWdtZW50IHN1bW1hcnkgKi8KLQkJcmV0ID0gbG9hZF9zZWdtZW50X3N1bW1hcnkoc2JpLCBwc2VnX3N0YXJ0LCBzZWdfc2VxLCAmc3NpLCAxKTsKKwkJcmV0ID0gbG9hZF9zZWdtZW50X3N1bW1hcnkoc2JpLCBwc2VnX3N0YXJ0LCBzZWdfc2VxLCAmc3NpKTsKIAkJaWYgKHJldCkgewogCQkJaWYgKHJldCA9PSBOSUxGU19TRUdfRkFJTF9JTykKIAkJCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdidWYuYyBiL2ZzL25pbGZzMi9zZWdidWYuYwppbmRleCA2NDVjNzg2Li5hYjU2ZmU0IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnYnVmLmMKKysrIGIvZnMvbmlsZnMyL3NlZ2J1Zi5jCkBAIC00MCw2ICs0MCwxMSBAQAogfTsKIAogCitzdGF0aWMgaW50IG5pbGZzX3NlZ2J1Zl93cml0ZShzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZiwKKwkJCSAgICAgIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKTsKK3N0YXRpYyBpbnQgbmlsZnNfc2VnYnVmX3dhaXQoc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWYpOworCisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbmlsZnNfc2VnYnVmX2NhY2hlcDsKIAogc3RhdGljIHZvaWQgbmlsZnNfc2VnYnVmX2luaXRfb25jZSh2b2lkICpvYmopCkBAIC0zMDIsNiArMzA3LDE5IEBACiAJfQogfQogCitpbnQgbmlsZnNfd3JpdGVfbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzLCBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKK3sKKwlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZjsKKwlpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VnYnVmLCBsb2dzLCBzYl9saXN0KSB7CisJCXJldCA9IG5pbGZzX3NlZ2J1Zl93cml0ZShzZWdidWYsIG5pbGZzKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBpbnQgbmlsZnNfd2FpdF9vbl9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MpCiB7CiAJc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWY7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnYnVmLmggYi9mcy9uaWxmczIvc2VnYnVmLmgKaW5kZXggNmFmMTYzMC4uOTRkZmQzNSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ2J1Zi5oCisrKyBiL2ZzL25pbGZzMi9zZWdidWYuaApAQCAtMTY2LDEzICsxNjYsMTAgQEAKIAlzZWdidWYtPnNiX3N1bS5uZmlsZWJsaysrOwogfQogCi1pbnQgbmlsZnNfc2VnYnVmX3dyaXRlKHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmLAotCQkgICAgICAgc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMpOwotaW50IG5pbGZzX3NlZ2J1Zl93YWl0KHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmKTsKLQogdm9pZCBuaWxmc19jbGVhcl9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MpOwogdm9pZCBuaWxmc190cnVuY2F0ZV9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MsCiAJCQkgc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpsYXN0KTsKK2ludCBuaWxmc193cml0ZV9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MsIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKTsKIGludCBuaWxmc193YWl0X29uX2xvZ3Moc3RydWN0IGxpc3RfaGVhZCAqbG9ncyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19kZXN0cm95X2xvZ3Moc3RydWN0IGxpc3RfaGVhZCAqbG9ncykKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmMgYi9mcy9uaWxmczIvc2VnbWVudC5jCmluZGV4IDEwNWI1MDguLmFkYTJmMWIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdtZW50LmMKKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwpAQCAtMTc2NCwxNCArMTc2NCw5IEBACiBzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3Jfd3JpdGUoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwKIAkJCSAgICAgICBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKIHsKLQlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZWdidWYsICZzY2ktPnNjX3NlZ2J1ZnMsIHNiX2xpc3QpIHsKLQkJcmV0ID0gbmlsZnNfc2VnYnVmX3dyaXRlKHNlZ2J1ZiwgbmlsZnMpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfQorCXJldCA9IG5pbGZzX3dyaXRlX2xvZ3MoJnNjaS0+c2Nfc2VnYnVmcywgbmlsZnMpOwogCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmc2NpLT5zY19zZWdidWZzLCAmc2NpLT5zY193cml0ZV9sb2dzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTkzNyw4ICsxOTMyLDcgQEAKIHsKIAlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZjsKIAlzdHJ1Y3QgcGFnZSAqYmRfcGFnZSA9IE5VTEwsICpmc19wYWdlID0gTlVMTDsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3NiaS0+c19uaWxmczsKIAlpbnQgdXBkYXRlX3NyID0gKHNjaS0+c2Nfc3VwZXJfcm9vdCAhPSBOVUxMKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VnYnVmLCAmc2NpLT5zY193cml0ZV9sb2dzLCBzYl9saXN0KSB7CkBAIC0yMDIwLDcgKzIwMTQsNyBAQAogCWlmICh1cGRhdGVfc3IpIHsKIAkJbmlsZnNfc2V0X2xhc3Rfc2VnbWVudChuaWxmcywgc2VnYnVmLT5zYl9wc2VnX3N0YXJ0LAogCQkJCSAgICAgICBzZWdidWYtPnNiX3N1bS5zZWdfc2VxLCBuaWxmcy0+bnNfY25vKyspOwotCQlzYmktPnNfc3VwZXItPnNfZGlydCA9IDE7CisJCXNldF9uaWxmc19zYl9kaXJ0eShuaWxmcyk7CiAKIAkJY2xlYXJfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKTsKIAkJY2xlYXJfYml0KE5JTEZTX1NDX0RJUlRZLCAmc2NpLT5zY19mbGFncyk7CkBAIC0yNDI1LDQzICsyNDE5LDQzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxIHsKLQlpbnQgbW9kZTsKLQlfX3UzMiBzZXFfYWNjZXB0ZWQ7Ci0JaW50IHNjX2VycjsgIC8qIGNvbnN0cnVjdGlvbiBmYWlsdXJlICovCi0JaW50IHNiX2VycjsgIC8qIHN1cGVyIGJsb2NrIHdyaXRlYmFjayBmYWlsdXJlICovCi19OwotCiAjZGVmaW5lIEZMVVNIX0ZJTEVfQklUCSgweDEpIC8qIGRhdGEgZmlsZSBvbmx5ICovCiAjZGVmaW5lIEZMVVNIX0RBVF9CSVQJKDEgPDwgTklMRlNfREFUX0lOTykgLyogREFUIG9ubHkgKi8KIAotc3RhdGljIHZvaWQgbmlsZnNfc2VnY3Rvcl9hY2NlcHQoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwKLQkJCQkgc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxICpyZXEpCisvKioKKyAqIG5pbGZzX3NlZ2N0b3JfYWNjZXB0IC0gcmVjb3JkIGFjY2VwdGVkIHNlcXVlbmNlIGNvdW50IG9mIGxvZy13cml0ZSByZXF1ZXN0cworICogQHNjaTogc2VnbWVudCBjb25zdHJ1Y3RvciBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgbmlsZnNfc2VnY3Rvcl9hY2NlcHQoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSkKIHsKLQlyZXEtPnNjX2VyciA9IHJlcS0+c2JfZXJyID0gMDsKIAlzcGluX2xvY2soJnNjaS0+c2Nfc3RhdGVfbG9jayk7Ci0JcmVxLT5zZXFfYWNjZXB0ZWQgPSBzY2ktPnNjX3NlcV9yZXF1ZXN0OworCXNjaS0+c2Nfc2VxX2FjY2VwdGVkID0gc2NpLT5zY19zZXFfcmVxdWVzdDsKIAlzcGluX3VubG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAogCWlmIChzY2ktPnNjX3RpbWVyKQogCQlkZWxfdGltZXJfc3luYyhzY2ktPnNjX3RpbWVyKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfc2VnY3Rvcl9ub3RpZnkoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwKLQkJCQkgc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxICpyZXEpCisvKioKKyAqIG5pbGZzX3NlZ2N0b3Jfbm90aWZ5IC0gbm90aWZ5IHRoZSByZXN1bHQgb2YgcmVxdWVzdCB0byBjYWxsZXIgdGhyZWFkcworICogQHNjaTogc2VnbWVudCBjb25zdHJ1Y3RvciBvYmplY3QKKyAqIEBtb2RlOiBtb2RlIG9mIGxvZyBmb3JtaW5nCisgKiBAZXJyOiBlcnJvciBjb2RlIHRvIGJlIG5vdGlmaWVkCisgKi8KK3N0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3Jfbm90aWZ5KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksIGludCBtb2RlLCBpbnQgZXJyKQogewogCS8qIENsZWFyIHJlcXVlc3RzIChldmVuIHdoZW4gdGhlIGNvbnN0cnVjdGlvbiBmYWlsZWQpICovCiAJc3Bpbl9sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogCi0JaWYgKHJlcS0+bW9kZSA9PSBTQ19MU0VHX1NSKSB7CisJaWYgKG1vZGUgPT0gU0NfTFNFR19TUikgewogCQlzY2ktPnNjX3N0YXRlICY9IH5OSUxGU19TRUdDVE9SX0NPTU1JVDsKLQkJc2NpLT5zY19zZXFfZG9uZSA9IHJlcS0+c2VxX2FjY2VwdGVkOwotCQluaWxmc19zZWdjdG9yX3dha2V1cChzY2ksIHJlcS0+c2NfZXJyID8gOiByZXEtPnNiX2Vycik7CisJCXNjaS0+c2Nfc2VxX2RvbmUgPSBzY2ktPnNjX3NlcV9hY2NlcHRlZDsKKwkJbmlsZnNfc2VnY3Rvcl93YWtldXAoc2NpLCBlcnIpOwogCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgPSAwOwogCX0gZWxzZSB7Ci0JCWlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfRklMRSkKKwkJaWYgKG1vZGUgPT0gU0NfRkxVU0hfRklMRSkKIAkJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfRklMRV9CSVQ7Ci0JCWVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9EQVQpCisJCWVsc2UgaWYgKG1vZGUgPT0gU0NfRkxVU0hfREFUKQogCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9EQVRfQklUOwogCiAJCS8qIHJlLWVuYWJsZSB0aW1lciBpZiBjaGVja3BvaW50IGNyZWF0aW9uIHdhcyBub3QgZG9uZSAqLwpAQCAtMjQ3MiwzMCArMjQ2NiwzNyBAQAogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfY29uc3RydWN0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCi0JCQkJICAgc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxICpyZXEpCisvKioKKyAqIG5pbGZzX3NlZ2N0b3JfY29uc3RydWN0IC0gZm9ybSBsb2dzIGFuZCB3cml0ZSB0aGVtIHRvIGRpc2sKKyAqIEBzY2k6IHNlZ21lbnQgY29uc3RydWN0b3Igb2JqZWN0CisgKiBAbW9kZTogbW9kZSBvZiBsb2cgZm9ybWluZworICovCitzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfY29uc3RydWN0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksIGludCBtb2RlKQogewogCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAlpbnQgZXJyID0gMDsKIAorCW5pbGZzX3NlZ2N0b3JfYWNjZXB0KHNjaSk7CisKIAlpZiAobmlsZnNfZGlzY29udGludWVkKG5pbGZzKSkKLQkJcmVxLT5tb2RlID0gU0NfTFNFR19TUjsKLQlpZiAoIW5pbGZzX3NlZ2N0b3JfY29uZmlybShzY2kpKSB7Ci0JCWVyciA9IG5pbGZzX3NlZ2N0b3JfZG9fY29uc3RydWN0KHNjaSwgcmVxLT5tb2RlKTsKLQkJcmVxLT5zY19lcnIgPSBlcnI7Ci0JfQorCQltb2RlID0gU0NfTFNFR19TUjsKKwlpZiAoIW5pbGZzX3NlZ2N0b3JfY29uZmlybShzY2kpKQorCQllcnIgPSBuaWxmc19zZWdjdG9yX2RvX2NvbnN0cnVjdChzY2ksIG1vZGUpOworCiAJaWYgKGxpa2VseSghZXJyKSkgewotCQlpZiAocmVxLT5tb2RlICE9IFNDX0ZMVVNIX0RBVCkKKwkJaWYgKG1vZGUgIT0gU0NfRkxVU0hfREFUKQogCQkJYXRvbWljX3NldCgmbmlsZnMtPm5zX25kaXJ0eWJsa3MsIDApOwogCQlpZiAodGVzdF9iaXQoTklMRlNfU0NfU1VQRVJfUk9PVCwgJnNjaS0+c2NfZmxhZ3MpICYmCiAJCSAgICBuaWxmc19kaXNjb250aW51ZWQobmlsZnMpKSB7CiAJCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQkJCXJlcS0+c2JfZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwKLQkJCQkJbmlsZnNfYWx0c2JfbmVlZF91cGRhdGUobmlsZnMpKTsKKwkJCWVyciA9IG5pbGZzX2NvbW1pdF9zdXBlcigKKwkJCQlzYmksIG5pbGZzX2FsdHNiX25lZWRfdXBkYXRlKG5pbGZzKSk7CiAJCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJCX0KIAl9CisKKwluaWxmc19zZWdjdG9yX25vdGlmeShzY2ksIG1vZGUsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjUyNiw3ICsyNTI3LDYgQEAKIAlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpID0gTklMRlNfU0Moc2JpKTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKLQlzdHJ1Y3QgbmlsZnNfc2VnY3Rvcl9yZXEgcmVxID0geyAubW9kZSA9IFNDX0xTRUdfU1IgfTsKIAlpbnQgZXJyOwogCiAJaWYgKHVubGlrZWx5KCFzY2kpKQpAQCAtMjU0NywxMCArMjU0Nyw4IEBACiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZuaWxmcy0+bnNfZ2NfaW5vZGVzLCAmc2NpLT5zY19nY19pbm9kZXMpOwogCiAJZm9yICg7OykgewotCQluaWxmc19zZWdjdG9yX2FjY2VwdChzY2ksICZyZXEpOwotCQllcnIgPSBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzY2ksICZyZXEpOworCQllcnIgPSBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzY2ksIFNDX0xTRUdfU1IpOwogCQluaWxmc19yZW1vdmVfd3JpdHRlbl9nY2lub2RlcyhuaWxmcywgJnNjaS0+c2NfZ2NfaW5vZGVzKTsKLQkJbmlsZnNfc2VnY3Rvcl9ub3RpZnkoc2NpLCAmcmVxKTsKIAogCQlpZiAobGlrZWx5KCFlcnIpKQogCQkJYnJlYWs7CkBAIC0yNTYwLDYgKzI1NTgsMTYgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dChzY2ktPnNjX2ludGVydmFsKTsKIAl9CisJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgRElTQ0FSRCkpIHsKKwkJaW50IHJldCA9IG5pbGZzX2Rpc2NhcmRfc2VnbWVudHMobmlsZnMsIHNjaS0+c2NfZnJlZXNlZ3MsCisJCQkJCQkgc2NpLT5zY19uZnJlZXNlZ3MpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IGVycm9yICVkIG9uIGRpc2NhcmQgcmVxdWVzdCwgIgorCQkJICAgICAgICJ0dXJuaW5nIGRpc2NhcmRzIG9mZiBmb3IgdGhlIGRldmljZVxuIiwgcmV0KTsKKwkJCW5pbGZzX2NsZWFyX29wdChzYmksIERJU0NBUkQpOworCQl9CisJfQogCiAgb3V0X3VubG9jazoKIAlzY2ktPnNjX2ZyZWVzZWdzID0gTlVMTDsKQEAgLTI1NzMsMTMgKzI1ODEsOSBAQAogewogCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKLQlzdHJ1Y3QgbmlsZnNfc2VnY3Rvcl9yZXEgcmVxID0geyAubW9kZSA9IG1vZGUgfTsKIAogCW5pbGZzX3RyYW5zYWN0aW9uX2xvY2soc2JpLCAmdGksIDApOwotCi0JbmlsZnNfc2VnY3Rvcl9hY2NlcHQoc2NpLCAmcmVxKTsKLQluaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzY2ksICZyZXEpOwotCW5pbGZzX3NlZ2N0b3Jfbm90aWZ5KHNjaSwgJnJlcSk7CisJbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCBtb2RlKTsKIAogCS8qCiAJICogVW5jbG9zZWQgc2VnbWVudCBzaG91bGQgYmUgcmV0cmllZC4gIFdlIGRvIHRoaXMgdXNpbmcgc2NfdGltZXIuCkBAIC0yNjM1LDYgKzI2MzksNyBAQAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX3RocmVhZCh2b2lkICphcmcpCiB7CiAJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqKWFyZzsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc2JpLT5zX25pbGZzOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCWludCB0aW1lb3V0ID0gMDsKIApAQCAtMjY4MCw3ICsyNjg1LDYgQEAKIAl9IGVsc2UgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKIAkJaW50IHNob3VsZF9zbGVlcCA9IDE7Ci0JCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzOwogCiAJCXByZXBhcmVfdG9fd2FpdCgmc2NpLT5zY193YWl0X2RhZW1vbiwgJndhaXQsCiAJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTI3MDEsOCArMjcwNSw4IEBACiAJCWZpbmlzaF93YWl0KCZzY2ktPnNjX3dhaXRfZGFlbW9uLCAmd2FpdCk7CiAJCXRpbWVvdXQgPSAoKHNjaS0+c2Nfc3RhdGUgJiBOSUxGU19TRUdDVE9SX0NPTU1JVCkgJiYKIAkJCSAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2NpLT5zY190aW1lci0+ZXhwaXJlcykpOwotCQluaWxmcyA9IHNjaS0+c2Nfc2JpLT5zX25pbGZzOwotCQlpZiAoc2NpLT5zY19zdXBlci0+c19kaXJ0ICYmIG5pbGZzX3NiX25lZWRfdXBkYXRlKG5pbGZzKSkKKworCQlpZiAobmlsZnNfc2JfZGlydHkobmlsZnMpICYmIG5pbGZzX3NiX25lZWRfdXBkYXRlKG5pbGZzKSkKIAkJCXNldF9uaWxmc19kaXNjb250aW51ZWQobmlsZnMpOwogCX0KIAlnb3RvIGxvb3A7CkBAIC0yNzk3LDEyICsyODAxLDkgQEAKIAlkbyB7CiAJCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKIAkJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gdGk7Ci0JCXN0cnVjdCBuaWxmc19zZWdjdG9yX3JlcSByZXEgPSB7IC5tb2RlID0gU0NfTFNFR19TUiB9OwogCiAJCW5pbGZzX3RyYW5zYWN0aW9uX2xvY2soc2JpLCAmdGksIDApOwotCQluaWxmc19zZWdjdG9yX2FjY2VwdChzY2ksICZyZXEpOwotCQlyZXQgPSBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzY2ksICZyZXEpOwotCQluaWxmc19zZWdjdG9yX25vdGlmeShzY2ksICZyZXEpOworCQlyZXQgPSBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzY2ksIFNDX0xTRUdfU1IpOwogCQluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2JpKTsKIAogCX0gd2hpbGUgKHJldCAmJiByZXRyeWNvdW50LS0gPiAwKTsKQEAgLTI4NjUsOCArMjg2NiwxNSBAQAogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOwogCWludCBlcnI7CiAKLQkvKiBFYWNoIGZpZWxkIG9mIG5pbGZzX3NlZ2N0b3IgaXMgY2xlYXJlZCB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbgotCSAgIG9mIHN1cGVyLWJsb2NrIGluZm8gKi8KKwlpZiAoTklMRlNfU0Moc2JpKSkgeworCQkvKgorCQkgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIHJlbW91bnRlZAorCQkgKiByZWFkL3dyaXRlIGFmdGVyIG5pbGZzX2Vycm9yIGRlZ2VuZXJhdGVkIGl0IGludG8gYQorCQkgKiByZWFkLW9ubHkgbW91bnQuCisJCSAqLworCQluaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmkpOworCX0KKwogCXNiaS0+c19zY19pbmZvID0gbmlsZnNfc2VnY3Rvcl9uZXcoc2JpKTsKIAlpZiAoIXNiaS0+c19zY19pbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmggYi9mcy9uaWxmczIvc2VnbWVudC5oCmluZGV4IDNkM2FiMmYuLjMxNTVlMGMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdtZW50LmgKKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuaApAQCAtMTE2LDYgKzExNiw3IEBACiAgKiBAc2Nfd2FpdF9kYWVtb246IERhZW1vbiB3YWl0IHF1ZXVlCiAgKiBAc2Nfd2FpdF90YXNrOiBTdGFydC9lbmQgd2FpdCBxdWV1ZSB0byBjb250cm9sIHNlZ2N0b3JkIHRhc2sKICAqIEBzY19zZXFfcmVxdWVzdDogUmVxdWVzdCBjb3VudGVyCisgKiBAc2Nfc2VxX2FjY2VwdDogQWNjZXB0ZWQgcmVxdWVzdCBjb3VudAogICogQHNjX3NlcV9kb25lOiBDb21wbGV0aW9uIGNvdW50ZXIKICAqIEBzY19zeW5jOiBSZXF1ZXN0IG9mIGV4cGxpY2l0IHN5bmMgb3BlcmF0aW9uCiAgKiBAc2NfaW50ZXJ2YWw6IFRpbWVvdXQgdmFsdWUgb2YgYmFja2dyb3VuZCBjb25zdHJ1Y3Rpb24KQEAgLTE2OSw2ICsxNzAsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CXNjX3dhaXRfdGFzazsKIAogCV9fdTMyCQkJc2Nfc2VxX3JlcXVlc3Q7CisJX191MzIJCQlzY19zZXFfYWNjZXB0ZWQ7CiAJX191MzIJCQlzY19zZXFfZG9uZTsKIAogCWludAkJCXNjX3N5bmM7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDgxNzNmYWUuLjkyNTc5Y2MgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC05Niw5ICs5Niw2IEBACiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOwogCi0JCWlmICghbmlsZnNfdGVzdF9vcHQoc2JpLCBFUlJPUlNfQ09OVCkpCi0JCQluaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmkpOwotCiAJCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCQlpZiAoIShuaWxmcy0+bnNfbW91bnRfc3RhdGUgJiBOSUxGU19FUlJPUl9GUykpIHsKIAkJCW5pbGZzLT5uc19tb3VudF9zdGF0ZSB8PSBOSUxGU19FUlJPUl9GUzsKQEAgLTMwMSw3ICsyOTgsNyBAQAogCQltZW1jcHkoc2JwWzFdLCBzYnBbMF0sIG5pbGZzLT5uc19zYnNpemUpOwogCQluaWxmcy0+bnNfc2J3dGltZVsxXSA9IHQ7CiAJfQotCXNiaS0+c19zdXBlci0+c19kaXJ0ID0gMDsKKwljbGVhcl9uaWxmc19zYl9kaXJ0eShuaWxmcyk7CiAJcmV0dXJuIG5pbGZzX3N5bmNfc3VwZXIoc2JpLCBkdXBzYik7CiB9CiAKQEAgLTM0NSw3ICszNDIsNyBAQAogCQllcnIgPSBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzYik7CiAKIAlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQlpZiAoc2ItPnNfZGlydCkKKwlpZiAobmlsZnNfc2JfZGlydHkobmlsZnMpKQogCQluaWxmc19jb21taXRfc3VwZXIoc2JpLCAxKTsKIAl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAKQEAgLTQ4MSw2ICs0NzgsOCBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIixvcmRlcj1zdHJpY3QiKTsKIAlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBOT1JFQ09WRVJZKSkKIAkJc2VxX3ByaW50ZihzZXEsICIsbm9yZWNvdmVyeSIpOworCWlmIChuaWxmc190ZXN0X29wdChzYmksIERJU0NBUkQpKQorCQlzZXFfcHJpbnRmKHNlcSwgIixkaXNjYXJkIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU1MCw3ICs1NDksNyBAQAogZW51bSB7CiAJT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAogCU9wdF9ub2JhcnJpZXIsIE9wdF9zbmFwc2hvdCwgT3B0X29yZGVyLCBPcHRfbm9yZWNvdmVyeSwKLQlPcHRfZXJyLAorCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtNTYxLDYgKzU2MCw3IEBACiAJe09wdF9zbmFwc2hvdCwgImNwPSV1In0sCiAJe09wdF9vcmRlciwgIm9yZGVyPSVzIn0sCiAJe09wdF9ub3JlY292ZXJ5LCAibm9yZWNvdmVyeSJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTYxNCw2ICs2MTQsOSBAQAogCQljYXNlIE9wdF9ub3JlY292ZXJ5OgogCQkJbmlsZnNfc2V0X29wdChzYmksIE5PUkVDT1ZFUlkpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQluaWxmc19zZXRfb3B0KHNiaSwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJOSUxGUzogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCJcbiIsIHApOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCmluZGV4IDYyNDFlMTcuLjkyNzMzZDUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYworKysgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKQEAgLTY0Niw2ICs2NDYsNDQgQEAKIAlnb3RvIG91dDsKIH0KIAoraW50IG5pbGZzX2Rpc2NhcmRfc2VnbWVudHMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIF9fdTY0ICpzZWdudW1wLAorCQkJICAgIHNpemVfdCBuc2VncykKK3sKKwlzZWN0b3JfdCBzZWdfc3RhcnQsIHNlZ19lbmQ7CisJc2VjdG9yX3Qgc3RhcnQgPSAwLCBuYmxvY2tzID0gMDsKKwl1bnNpZ25lZCBpbnQgc2VjdHNfcGVyX2Jsb2NrOworCV9fdTY0ICpzbjsKKwlpbnQgcmV0ID0gMDsKKworCXNlY3RzX3Blcl9ibG9jayA9ICgxIDw8IG5pbGZzLT5uc19ibG9ja3NpemVfYml0cykgLworCQliZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShuaWxmcy0+bnNfYmRldik7CisJZm9yIChzbiA9IHNlZ251bXA7IHNuIDwgc2VnbnVtcCArIG5zZWdzOyBzbisrKSB7CisJCW5pbGZzX2dldF9zZWdtZW50X3JhbmdlKG5pbGZzLCAqc24sICZzZWdfc3RhcnQsICZzZWdfZW5kKTsKKworCQlpZiAoIW5ibG9ja3MpIHsKKwkJCXN0YXJ0ID0gc2VnX3N0YXJ0OworCQkJbmJsb2NrcyA9IHNlZ19lbmQgLSBzZWdfc3RhcnQgKyAxOworCQl9IGVsc2UgaWYgKHN0YXJ0ICsgbmJsb2NrcyA9PSBzZWdfc3RhcnQpIHsKKwkJCW5ibG9ja3MgKz0gc2VnX2VuZCAtIHNlZ19zdGFydCArIDE7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChuaWxmcy0+bnNfYmRldiwKKwkJCQkJCSAgIHN0YXJ0ICogc2VjdHNfcGVyX2Jsb2NrLAorCQkJCQkJICAgbmJsb2NrcyAqIHNlY3RzX3Blcl9ibG9jaywKKwkJCQkJCSAgIEdGUF9OT0ZTLAorCQkJCQkJICAgRElTQ0FSRF9GTF9CQVJSSUVSKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQluYmxvY2tzID0gMDsKKwkJfQorCX0KKwlpZiAobmJsb2NrcykKKwkJcmV0ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQobmlsZnMtPm5zX2JkZXYsCisJCQkJCSAgIHN0YXJ0ICogc2VjdHNfcGVyX2Jsb2NrLAorCQkJCQkgICBuYmxvY2tzICogc2VjdHNfcGVyX2Jsb2NrLAorCQkJCQkgICBHRlBfTk9GUywgRElTQ0FSRF9GTF9CQVJSSUVSKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgbmlsZnNfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHNlY3Rvcl90ICpuYmxvY2tzKQogewogCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfZGF0X2lub2RlKG5pbGZzKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuaCBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaAppbmRleCA1ODk3ODZlLi5lOTc5NWYxIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCkBAIC0zOCw2ICszOCw3IEBACiAJCQkJICAgdGhlIGxhdGVzdCBjaGVja3BvaW50IHdhcyBsb2FkZWQgKi8KIAlUSEVfTklMRlNfRElTQ09OVElOVUVELAkvKiAnbmV4dCcgcG9pbnRlciBjaGFpbiBoYXMgYnJva2VuICovCiAJVEhFX05JTEZTX0dDX1JVTk5JTkcsCS8qIGdjIHByb2Nlc3MgaXMgcnVubmluZyAqLworCVRIRV9OSUxGU19TQl9ESVJUWSwJLyogc3VwZXIgYmxvY2sgaXMgZGlydHkgKi8KIH07CiAKIC8qKgpAQCAtMTk3LDYgKzE5OCw3IEBACiBUSEVfTklMRlNfRk5TKExPQURFRCwgbG9hZGVkKQogVEhFX05JTEZTX0ZOUyhESVNDT05USU5VRUQsIGRpc2NvbnRpbnVlZCkKIFRIRV9OSUxGU19GTlMoR0NfUlVOTklORywgZ2NfcnVubmluZykKK1RIRV9OSUxGU19GTlMoU0JfRElSVFksIHNiX2RpcnR5KQogCiAvKiBNaW5pbXVtIGludGVydmFsIG9mIHBlcmlvZGljYWwgdXBkYXRlIG9mIHN1cGVyYmxvY2tzIChpbiBzZWNvbmRzKSAqLwogI2RlZmluZSBOSUxGU19TQl9GUkVRCQkxMApAQCAtMjIxLDYgKzIyMyw3IEBACiB2b2lkIHB1dF9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICopOwogaW50IGluaXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqLCBjaGFyICopOwogaW50IGxvYWRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqKTsKK2ludCBuaWxmc19kaXNjYXJkX3NlZ21lbnRzKHN0cnVjdCB0aGVfbmlsZnMgKiwgX191NjQgKiwgc2l6ZV90KTsKIGludCBuaWxmc19jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3QgdGhlX25pbGZzICosIHNlY3Rvcl90ICopOwogc3RydWN0IG5pbGZzX3NiX2luZm8gKm5pbGZzX2ZpbmRfc2JpbmZvKHN0cnVjdCB0aGVfbmlsZnMgKiwgaW50LCBfX3U2NCk7CiBpbnQgbmlsZnNfY2hlY2twb2ludF9pc19tb3VudGVkKHN0cnVjdCB0aGVfbmlsZnMgKiwgX191NjQsIGludCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9NYWtlZmlsZSBiL2ZzL29jZnMyL01ha2VmaWxlCmluZGV4IDYwMGQyZDIuLjc5MWMwODg2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtNDYsNiArNDYsNyBAQAogb2NmczJfc3RhY2tfbzJjYi1vYmpzIDo9IHN0YWNrX28yY2Iubwogb2NmczJfc3RhY2tfdXNlci1vYmpzIDo9IHN0YWNrX3VzZXIubwogCitvYmotJChDT05GSUdfT0NGUzJfRlMpICs9IGRsbWZzLwogIyBjbHVzdGVyLyBpcyBhbHdheXMgbmVlZGVkIHdoZW4gT0NGUzJfRlMgZm9yIG1hc2tsb2cgc3VwcG9ydAogb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBjbHVzdGVyLwogb2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IGRsbS8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGQxN2JkYzcuLjJiYmUxZWNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTEwNTAsNyArMTA1MCw4IEBACiAJCQlzdHJjcHkoZWItPmhfc2lnbmF0dXJlLCBPQ0ZTMl9FWFRFTlRfQkxPQ0tfU0lHTkFUVVJFKTsKIAkJCWViLT5oX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOwogCQkJZWItPmhfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7Ci0JCQllYi0+aF9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJCQllYi0+aF9zdWJhbGxvY19zbG90ID0KKwkJCQljcHVfdG9fbGUxNihtZXRhX2FjLT5hY19hbGxvY19zbG90KTsKIAkJCWViLT5oX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7CiAJCQllYi0+aF9saXN0LmxfY291bnQgPQogCQkJCWNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9lYihvc2ItPnNiKSk7CkBAIC02MDM3LDcgKzYwMzgsNyBAQAogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJZWxzZQotCQlvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKKwkJb2NmczJfaW5pdF9zdGVhbF9zbG90cyhvc2IpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggN2U5ZGYxMS4uNGMyYTZkMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtNTc3LDggKzU3Nyw5IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkvKiBXZSBzaG91bGQgYWxyZWFkeSBDb1cgdGhlIHJlZmNvdW50ZWQgZXh0ZW50LiAqLwotCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CisJLyogV2Ugc2hvdWxkIGFscmVhZHkgQ29XIHRoZSByZWZjb3VudGVkIGV4dGVudCBpbiBjYXNlIG9mIGNyZWF0ZS4gKi8KKwlCVUdfT04oY3JlYXRlICYmIChleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpOworCiAJLyoKIAkgKiBnZXRfbW9yZV9ibG9ja3MoKSBleHBlY3RzIHVzIHRvIGRlc2NyaWJlIGEgaG9sZSBieSBjbGVhcmluZwogCSAqIHRoZSBtYXBwZWQgYml0IG9uIGJoX3Jlc3VsdCgpLgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYwppbmRleCAxY2QyOTM0Li5iMzlkYTg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJZGVmaW5lX21hc2soWEFUVFIpLAogCWRlZmluZV9tYXNrKFFVT1RBKSwKIAlkZWZpbmVfbWFzayhSRUZDT1VOVCksCisJZGVmaW5lX21hc2soQkFTVFMpLAogCWRlZmluZV9tYXNrKEVSUk9SKSwKIAlkZWZpbmVfbWFzayhOT1RJQ0UpLAogCWRlZmluZV9tYXNrKEtUSFJFQUQpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA5YjRkMTE3Li4zZGZkZGJlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTE0LDYgKzExNCw3IEBACiAjZGVmaW5lIE1MX1hBVFRSCTB4MDAwMDAwMDAyMDAwMDAwMFVMTCAvKiBvY2ZzMiBleHRlbmRlZCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIE1MX1FVT1RBCTB4MDAwMDAwMDA0MDAwMDAwMFVMTCAvKiBvY2ZzMiBxdW90YSBvcGVyYXRpb25zICovCiAjZGVmaW5lIE1MX1JFRkNPVU5UCTB4MDAwMDAwMDA4MDAwMDAwMFVMTCAvKiByZWZjb3VudCB0cmVlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTUxfQkFTVFMJMHgwMDAwMDAxMDAwMDAwMDAwVUxMIC8qIGRsbWdsdWUgYXN0cyBhbmQgYmFzdHMgKi8KIC8qIGJpdHMgdGhhdCBhcmUgaW5mcmVxdWVudGx5IGdpdmVuIGFuZCBmcmVxdWVudGx5IG1hdGNoZWQgaW4gdGhlIGhpZ2ggd29yZCAqLwogI2RlZmluZSBNTF9FUlJPUgkweDAwMDAwMDAxMDAwMDAwMDBVTEwgLyogc2VudCB0byBLRVJOX0VSUiAqLwogI2RlZmluZSBNTF9OT1RJQ0UJMHgwMDAwMDAwMjAwMDAwMDAwVUxMIC8qIHNldG4gdG8gS0VSTl9OT1RJQ0UgKi8KQEAgLTE5NCw5ICsxOTUsOSBAQAogICogcHJldmlvdXMgdG9rZW4gaWYgYXJncyBleHBhbmRzIHRvIG5vdGhpbmcuCiAgKi8KICNkZWZpbmUgX19tbG9nX3ByaW50ayhsZXZlbCwgZm10LCBhcmdzLi4uKQkJCQlcCi0JcHJpbnRrKGxldmVsICIoJXUsJWx1KTolczolZCAiIGZtdCwgdGFza19waWRfbnIoY3VycmVudCksCVwKLQkgICAgICAgX19tbG9nX2NwdV9ndWVzcywgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18gLAlcCi0JICAgICAgICMjYXJncykKKwlwcmludGsobGV2ZWwgIiglcywldSwlbHUpOiVzOiVkICIgZm10LCBjdXJyZW50LT5jb21tLAkJXAorCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19tbG9nX2NwdV9ndWVzcywJCQlcCisJICAgICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyNhcmdzKQogCiAjZGVmaW5lIG1sb2cobWFzaywgZm10LCBhcmdzLi4uKSBkbyB7CQkJCQlcCiAJdTY0IF9fbSA9IE1MT0dfTUFTS19QUkVGSVggfCAobWFzayk7CQkJCVwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggMjhjM2VjMi4uNzY1ZDY2YyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTI0MzksNyArMjQzOSw3IEBACiAJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKIAltZW1zZXQoZHhfcm9vdCwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUpOwogCXN0cmNweShkeF9yb290LT5kcl9zaWduYXR1cmUsIE9DRlMyX0RYX1JPT1RfU0lHTkFUVVJFKTsKLQlkeF9yb290LT5kcl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJZHhfcm9vdC0+ZHJfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG1ldGFfYWMtPmFjX2FsbG9jX3Nsb3QpOwogCWR4X3Jvb3QtPmRyX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KGRyX3N1YmFsbG9jX2JpdCk7CiAJZHhfcm9vdC0+ZHJfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJZHhfcm9vdC0+ZHJfYmxrbm8gPSBjcHVfdG9fbGU2NChkcl9ibGtubyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUgYi9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUKaW5kZXggMTkwMzYxMy4uZGNlYmYwZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL01ha2VmaWxlCisrKyBiL2ZzL29jZnMyL2RsbS9NYWtlZmlsZQpAQCAtMSw4ICsxLDcgQEAKIEVYVFJBX0NGTEFHUyArPSAtSWZzL29jZnMyCiAKLW9iai0kKENPTkZJR19PQ0ZTMl9GU19PMkNCKSArPSBvY2ZzMl9kbG0ubyBvY2ZzMl9kbG1mcy5vCitvYmotJChDT05GSUdfT0NGUzJfRlNfTzJDQikgKz0gb2NmczJfZGxtLm8KIAogb2NmczJfZGxtLW9ianMgOj0gZGxtZG9tYWluLm8gZGxtZGVidWcubyBkbG10aHJlYWQubyBkbG1yZWNvdmVyeS5vIFwKIAlkbG1tYXN0ZXIubyBkbG1hc3QubyBkbG1jb252ZXJ0Lm8gZGxtbG9jay5vIGRsbXVubG9jay5vIGRsbXZlci5vCiAKLW9jZnMyX2RsbWZzLW9ianMgOj0gdXNlcmRsbS5vIGRsbWZzLm8gZGxtZnN2ZXIubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiZjE3OC4uMDAwMDAwMAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDY1MiArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQotICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6Ci0gKgotICogZGxtZnMuYwotICoKLSAqIENvZGUgd2hpY2ggaW1wbGVtZW50cyB0aGUga2VybmVsIHNpZGUgb2YgYSBtaW5pbWFsIHVzZXJzcGFjZQotICogaW50ZXJmYWNlIHRvIG91ciBETE0uIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSB2aXJ0dWFsIGZpbGUgc3lzdGVtCi0gKiB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdXNlcnNwYWNlLiBDcmVkaXQgc2hvdWxkIGdvIHRvIHJhbWZzLAotICogd2hpY2ggd2FzIGEgdGVtcGxhdGUgZm9yIHRoZSBmcyBzaWRlIG9mIHRoaXMgbW9kdWxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KLSAqLwotCi0vKiBTaW1wbGUgVkZTIGhvb2tzIGJhc2VkIG9uOiAqLwotLyoKLSAqIFJlc2l6YWJsZSBzaW1wbGUgcmFtIGZpbGVzeXN0ZW0gZm9yIExpbnV4LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMaW51cyBUb3J2YWxkcy4KLSAqICAgICAgICAgICAgICAgMjAwMCBUcmFuc21ldGEgQ29ycC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotCi0jaW5jbHVkZSAiY2x1c3Rlci9ub2RlbWFuYWdlci5oIgotI2luY2x1ZGUgImNsdXN0ZXIvaGVhcnRiZWF0LmgiCi0jaW5jbHVkZSAiY2x1c3Rlci90Y3AuaCIKLQotI2luY2x1ZGUgImRsbWFwaS5oIgotCi0jaW5jbHVkZSAidXNlcmRsbS5oIgotCi0jaW5jbHVkZSAiZGxtZnN2ZXIuaCIKLQotI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCi0jaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCi0KLSNpbmNsdWRlICJvY2ZzMl9sb2NraW5ndmVyLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkbG1mc19vcHM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbG1mc19maWxlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGxtZnNfaW5vZGVfY2FjaGU7Ci0KLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp1c2VyX2RsbV93b3JrZXI7Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSB1c2VyZGxtZnMgbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uLgotICoKLSAqIFNlZSBmcy9vY2ZzMi9kbG1nbHVlLmMgZm9yIG1vcmUgZGV0YWlscyBvbiBsb2NraW5nIHZlcnNpb25zLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIHVzZXJfbG9ja2luZ19wcm90b2NvbCA9IHsKLQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAotCS5wdl9taW5vciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IsCi19OwotCi0vKgotICogZGVjb2RlcyBhIHNldCBvZiBvcGVuIGZsYWdzIGludG8gYSB2YWxpZCBsb2NrIGxldmVsIGFuZCBhIHNldCBvZiBmbGFncy4KLSAqIHJldHVybnMgPCAwIGlmIHdlIGhhdmUgaW52YWxpZCBmbGFncwotICogZmxhZ3Mgd2hpY2ggbWVhbiBzb21ldGhpbmcgdG8gdXM6Ci0gKiBPX1JET05MWSAtPiBQUk1PREUgbGV2ZWwKLSAqIE9fV1JPTkxZIC0+IEVYTU9ERSBsZXZlbAotICoKLSAqIE9fTk9OQkxPQ0sgLT4gTEtNX05PUVVFVUUKLSAqLwotc3RhdGljIGludCBkbG1mc19kZWNvZGVfb3Blbl9mbGFncyhpbnQgb3Blbl9mbGFncywKLQkJCQkgICBpbnQgKmxldmVsLAotCQkJCSAgIGludCAqZmxhZ3MpCi17Ci0JaWYgKG9wZW5fZmxhZ3MgJiAoT19XUk9OTFl8T19SRFdSKSkKLQkJKmxldmVsID0gTEtNX0VYTU9ERTsKLQllbHNlCi0JCSpsZXZlbCA9IExLTV9QUk1PREU7Ci0KLQkqZmxhZ3MgPSAwOwotCWlmIChvcGVuX2ZsYWdzICYgT19OT05CTE9DSykKLQkJKmZsYWdzIHw9IExLTV9OT1FVRVVFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGxtZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgc3RhdHVzLCBsZXZlbCwgZmxhZ3M7Ci0Jc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSAqZnAgPSBOVUxMOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKLQotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQlCVUcoKTsKLQotCW1sb2coMCwgIm9wZW4gY2FsbGVkIG9uIGlub2RlICVsdSwgZmxhZ3MgMHgleFxuIiwgaW5vZGUtPmlfaW5vLAotCQlmaWxlLT5mX2ZsYWdzKTsKLQotCXN0YXR1cyA9IGRsbWZzX2RlY29kZV9vcGVuX2ZsYWdzKGZpbGUtPmZfZmxhZ3MsICZsZXZlbCwgJmZsYWdzKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJZ290byBiYWlsOwotCi0JLyogV2UgZG9uJ3Qgd2FudCB0byBob25vciBPX0FQUEVORCBhdCByZWFkL3dyaXRlIHRpbWUgYXMgaXQKLQkgKiBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIExWQiB3cml0ZXMuICovCi0JZmlsZS0+Zl9mbGFncyAmPSB+T19BUFBFTkQ7Ci0KLQlmcCA9IGttYWxsb2Moc2l6ZW9mKCpmcCksIEdGUF9OT0ZTKTsKLQlpZiAoIWZwKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JZnAtPmZwX2xvY2tfbGV2ZWwgPSBsZXZlbDsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQlzdGF0dXMgPSB1c2VyX2RsbV9jbHVzdGVyX2xvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCwgZmxhZ3MpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCS8qIHRoaXMgaXMgYSBzdHJhbmdlIGVycm9yIHRvIHJldHVybiBoZXJlIGJ1dCBJIHdhbnQKLQkJICogdG8gYmUgYWJsZSB1c2Vyc3BhY2UgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBhCi0JCSAqIHZhbGlkIGxvY2sgcmVxdWVzdCBmcm9tIG9uZSB0aGF0IHNpbXBseSBjb3VsZG4ndCBiZQotCQkgKiBncmFudGVkLiAqLwotCQlpZiAoZmxhZ3MgJiBMS01fTk9RVUVVRSAmJiBzdGF0dXMgPT0gLUVBR0FJTikKLQkJCXN0YXR1cyA9IC1FVFhUQlNZOwotCQlrZnJlZShmcCk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmcDsKLWJhaWw6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBkbG1mc19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBsZXZlbCwgc3RhdHVzOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9IERMTUZTX0koaW5vZGUpOwotCXN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKmZwID0KLQkJKHN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCUJVRygpOwotCi0JbWxvZygwLCAiY2xvc2UgY2FsbGVkIG9uIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCXN0YXR1cyA9IDA7Ci0JaWYgKGZwKSB7Ci0JCWxldmVsID0gZnAtPmZwX2xvY2tfbGV2ZWw7Ci0JCWlmIChsZXZlbCAhPSBMS01fSVZNT0RFKQotCQkJdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCk7Ci0KLQkJa2ZyZWUoZnApOwotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBkbG1mc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsCi0JCQkgICAgICAgbG9mZl90ICpwcG9zKQotewotCWludCBieXRlc19sZWZ0OwotCXNzaXplX3QgcmVhZGxlbjsKLQljaGFyICpsdmJfYnVmOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAotCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7Ci0KLQlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCWlmICghY291bnQpCi0JCXJldHVybiAwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBkb24ndCByZWFkIHBhc3QgdGhlIGx2YiAqLwotCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCi0JCXJlYWRsZW4gPSBpX3NpemVfcmVhZChpbm9kZSkgLSAqcHBvczsKLQllbHNlCi0JCXJlYWRsZW4gPSBjb3VudCAtICpwcG9zOwotCi0JbHZiX2J1ZiA9IGttYWxsb2MocmVhZGxlbiwgR0ZQX05PRlMpOwotCWlmICghbHZiX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl1c2VyX2RsbV9yZWFkX2x2Yihpbm9kZSwgbHZiX2J1ZiwgcmVhZGxlbik7Ci0JYnl0ZXNfbGVmdCA9IF9fY29weV90b191c2VyKGJ1ZiwgbHZiX2J1ZiwgcmVhZGxlbik7Ci0JcmVhZGxlbiAtPSBieXRlc19sZWZ0OwotCi0Ja2ZyZWUobHZiX2J1Zik7Ci0KLQkqcHBvcyA9ICpwcG9zICsgcmVhZGxlbjsKLQotCW1sb2coMCwgInJlYWQgJXpkIGJ5dGVzXG4iLCByZWFkbGVuKTsKLQlyZXR1cm4gcmVhZGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgZGxtZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwKLQkJCQlsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGJ5dGVzX2xlZnQ7Ci0Jc3NpemVfdCB3cml0ZWxlbjsKLQljaGFyICpsdmJfYnVmOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAotCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7Ci0KLQlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCWlmICghY291bnQpCi0JCXJldHVybiAwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIGRvbid0IHdyaXRlIHBhc3QgdGhlIGx2YiAqLwotCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCi0JCXdyaXRlbGVuID0gaV9zaXplX3JlYWQoaW5vZGUpIC0gKnBwb3M7Ci0JZWxzZQotCQl3cml0ZWxlbiA9IGNvdW50IC0gKnBwb3M7Ci0KLQlsdmJfYnVmID0ga21hbGxvYyh3cml0ZWxlbiwgR0ZQX05PRlMpOwotCWlmICghbHZiX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXIobHZiX2J1ZiwgYnVmLCB3cml0ZWxlbik7Ci0Jd3JpdGVsZW4gLT0gYnl0ZXNfbGVmdDsKLQlpZiAod3JpdGVsZW4pCi0JCXVzZXJfZGxtX3dyaXRlX2x2Yihpbm9kZSwgbHZiX2J1Ziwgd3JpdGVsZW4pOwotCi0Ja2ZyZWUobHZiX2J1Zik7Ci0KLQkqcHBvcyA9ICpwcG9zICsgd3JpdGVsZW47Ci0JbWxvZygwLCAid3JvdGUgJXpkIGJ5dGVzXG4iLCB3cml0ZWxlbik7Ci0JcmV0dXJuIHdyaXRlbGVuOwotfQotCi1zdGF0aWMgdm9pZCBkbG1mc19pbml0X29uY2Uodm9pZCAqZm9vKQotewotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9Ci0JCShzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqKSBmb287Ci0KLQlpcC0+aXBfZGxtID0gTlVMTDsKLQlpcC0+aXBfcGFyZW50ID0gTlVMTDsKLQotCWlub2RlX2luaXRfb25jZSgmaXAtPmlwX3Zmc19pbm9kZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRsbWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaXAgPSBrbWVtX2NhY2hlX2FsbG9jKGRsbWZzX2lub2RlX2NhY2hlLCBHRlBfTk9GUyk7Ci0JaWYgKCFpcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gJmlwLT5pcF92ZnNfaW5vZGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsbWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoZGxtZnNfaW5vZGVfY2FjaGUsIERMTUZTX0koaW5vZGUpKTsKLX0KLQotc3RhdGljIHZvaWQgZGxtZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKLQotCWlmICghaW5vZGUpCi0JCXJldHVybjsKLQotCW1sb2coMCwgImlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlzdGF0dXMgPSB1c2VyX2RsbV9kZXN0cm95X2xvY2soJmlwLT5pcF9sb2NrcmVzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWlwdXQoaXAtPmlwX3BhcmVudCk7Ci0JCWdvdG8gY2xlYXJfZmllbGRzOwotCX0KLQotCW1sb2coMCwgIndlJ3JlIGEgZGlyZWN0b3J5LCBpcC0+aXBfZGxtID0gMHglcFxuIiwgaXAtPmlwX2RsbSk7Ci0JLyogd2UgbXVzdCBiZSBhIGRpcmVjdG9yeS4gSWYgcmVxdWlyZWQsIGxldHMgdW5yZWdpc3RlciB0aGUKLQkgKiBkbG0gY29udGV4dCBub3cuICovCi0JaWYgKGlwLT5pcF9kbG0pCi0JCXVzZXJfZGxtX3VucmVnaXN0ZXJfY29udGV4dChpcC0+aXBfZGxtKTsKLWNsZWFyX2ZpZWxkczoKLQlpcC0+aXBfcGFyZW50ID0gTlVMTDsKLQlpcC0+aXBfZGxtID0gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRsbWZzX2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLm5hbWUJCT0gIm9jZnMyLWRsbWZzIiwKLQkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19nZXRfcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwotCWludCBtb2RlID0gU19JRkRJUiB8IDA3NTU7Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaWYgKGlub2RlKSB7Ci0JCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7Ci0JCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKLQkJaW5vZGUtPmlfZ2lkID0gY3VycmVudF9mc2dpZCgpOwotCQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmRsbWZzX2JhY2tpbmdfZGV2X2luZm87Ci0JCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJaW5jX25saW5rKGlub2RlKTsKLQotCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9vcCA9ICZkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnM7Ci0JfQotCi0JcmV0dXJuIGlub2RlOwotfQotCi1zdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19nZXRfaW5vZGUoc3RydWN0IGlub2RlICpwYXJlbnQsCi0JCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJICAgICBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGFyZW50LT5pX3NiOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gbmV3X2lub2RlKHNiKTsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gTlVMTDsKLQotCWlub2RlLT5pX21vZGUgPSBtb2RlOwotCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKLQlpbm9kZS0+aV9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7Ci0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZkbG1mc19iYWNraW5nX2Rldl9pbmZvOwotCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0JaXAtPmlwX2RsbSA9IERMTUZTX0kocGFyZW50KS0+aXBfZGxtOwotCi0Jc3dpdGNoIChtb2RlICYgU19JRk1UKSB7Ci0JZGVmYXVsdDoKLQkJLyogZm9yIG5vdyB3ZSBkb24ndCBzdXBwb3J0IGFueXRoaW5nIG90aGVyIHRoYW4KLQkJICogZGlyZWN0b3JpZXMgYW5kIHJlZ3VsYXIgZmlsZXMuICovCi0JCUJVRygpOwotCQlicmVhazsKLQljYXNlIFNfSUZSRUc6Ci0JCWlub2RlLT5pX29wID0gJmRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJmRsbWZzX2ZpbGVfb3BlcmF0aW9uczsKLQotCQlpX3NpemVfd3JpdGUoaW5vZGUsICBETE1fTFZCX0xFTik7Ci0KLQkJdXNlcl9kbG1fbG9ja19yZXNfaW5pdCgmaXAtPmlwX2xvY2tyZXMsIGRlbnRyeSk7Ci0KLQkJLyogcmVsZWFzZWQgYXQgY2xlYXJfaW5vZGUgdGltZSwgdGhpcyBpbnN1cmVzIHRoYXQgd2UKLQkJICogZ2V0IHRvIGRyb3AgdGhlIGRsbSByZWZlcmVuY2Ugb24gZWFjaCBsb2NrICpiZWZvcmUqCi0JCSAqIHdlIGNhbGwgdGhlIHVucmVnaXN0ZXIgY29kZSBmb3IgcmVsZWFzaW5nIHBhcmVudAotCQkgKiBkaXJlY3Rvcmllcy4gKi8KLQkJaXAtPmlwX3BhcmVudCA9IGlncmFiKHBhcmVudCk7Ci0JCUJVR19PTighaXAtPmlwX3BhcmVudCk7Ci0JCWJyZWFrOwotCWNhc2UgU19JRkRJUjoKLQkJaW5vZGUtPmlfb3AgPSAmZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7Ci0KLQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09Ci0JCSAqIDIgKGZvciAiLiIgZW50cnkpICovCi0JCWluY19ubGluayhpbm9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChwYXJlbnQtPmlfbW9kZSAmIFNfSVNHSUQpIHsKLQkJaW5vZGUtPmlfZ2lkID0gcGFyZW50LT5pX2dpZDsKLQkJaWYgKFNfSVNESVIobW9kZSkpCi0JCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVNHSUQ7Ci0JfQotCi0JcmV0dXJuIGlub2RlOwotfQotCi0vKgotICogRmlsZSBjcmVhdGlvbi4gQWxsb2NhdGUgYW4gaW5vZGUsIGFuZCB3ZSdyZSBkb25lLi4KLSAqLwotLyogU01QLXNhZmUgKi8KLXN0YXRpYyBpbnQgZGxtZnNfbWtkaXIoc3RydWN0IGlub2RlICogZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwKLQkJICAgICAgIGludCBtb2RlKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IHFzdHIgKmRvbWFpbiA9ICZkZW50cnktPmRfbmFtZTsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG07Ci0Jc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIHByb3RvID0gdXNlcl9sb2NraW5nX3Byb3RvY29sOwotCi0JbWxvZygwLCAibWtkaXIgJS4qc1xuIiwgZG9tYWluLT5sZW4sIGRvbWFpbi0+bmFtZSk7Ci0KLQkvKiB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGEgcHJvcGVyIGRvbWFpbiAqLwotCWlmIChkb21haW4tPmxlbiA+PSBPMk5NX01BWF9OQU1FX0xFTikgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQltbG9nKE1MX0VSUk9SLCAiaW52YWxpZCBkb21haW4gbmFtZSBmb3IgZGlyZWN0b3J5LlxuIik7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlpbm9kZSA9IGRsbWZzX2dldF9pbm9kZShkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIpOwotCWlmICghaW5vZGUpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JaXAgPSBETE1GU19JKGlub2RlKTsKLQotCWRsbSA9IHVzZXJfZGxtX3JlZ2lzdGVyX2NvbnRleHQoZG9tYWluLCAmcHJvdG8pOwotCWlmIChJU19FUlIoZGxtKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGRsbSk7Ci0JCW1sb2coTUxfRVJST1IsICJFcnJvciAlZCBjb3VsZCBub3QgcmVnaXN0ZXIgZG9tYWluIFwiJS4qc1wiXG4iLAotCQkgICAgIHN0YXR1cywgZG9tYWluLT5sZW4sIGRvbWFpbi0+bmFtZSk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JaXAtPmlwX2RsbSA9IGRsbTsKLQotCWluY19ubGluayhkaXIpOwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLQotCXN0YXR1cyA9IDA7Ci1iYWlsOgotCWlmIChzdGF0dXMgPCAwKQotCQlpcHV0KGlub2RlKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGRsbWZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCWludCBtb2RlLAotCQkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKLQotCW1sb2coMCwgImNyZWF0ZSAlLipzXG4iLCBuYW1lLT5sZW4sIG5hbWUtPm5hbWUpOwotCi0JLyogdmVyaWZ5IG5hbWUgaXMgdmFsaWQgYW5kIGRvZXNuJ3QgY29udGFpbiBhbnkgZGxtIHJlc2VydmVkCi0JICogY2hhcmFjdGVycyAqLwotCWlmIChuYW1lLT5sZW4gPj0gVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOIHx8Ci0JICAgIG5hbWUtPm5hbWVbMF0gPT0gJyQnKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCW1sb2coTUxfRVJST1IsICJpbnZhbGlkIGxvY2sgbmFtZSwgJS4qc1xuIiwgbmFtZS0+bGVuLAotCQkgICAgIG5hbWUtPm5hbWUpOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JaW5vZGUgPSBkbG1mc19nZXRfaW5vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTsKLQlpZiAoIWlub2RlKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBiYWlsOwotCX0KLQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLWJhaWw6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBkbG1mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAidW5saW5rIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCS8qIGlmIHRoZXJlIGFyZSBubyBjdXJyZW50IGhvbGRlcnMsIG9yIG5vbmUgdGhhdCBhcmUgd2FpdGluZwotCSAqIHRvIGFjcXVpcmUgYSBsb2NrLCB0aGlzIGJhc2ljYWxseSBkZXN0cm95cyBvdXIgbG9ja3Jlcy4gKi8KLQlzdGF0dXMgPSB1c2VyX2RsbV9kZXN0cm95X2xvY2soJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nKE1MX0VSUk9SLCAidW5saW5rICUuKnMsIGVycm9yICVkIGZyb20gZGVzdHJveVxuIiwKLQkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jc3RhdHVzID0gc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7Ci1iYWlsOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgZGxtZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwKLQkJCSAgICB2b2lkICogZGF0YSwKLQkJCSAgICBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqIGlub2RlOwotCXN0cnVjdCBkZW50cnkgKiByb290OwotCi0Jc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwotCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKLQlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0Jc2ItPnNfbWFnaWMgPSBETE1GU19NQUdJQzsKLQlzYi0+c19vcCA9ICZkbG1mc19vcHM7Ci0JaW5vZGUgPSBkbG1mc19nZXRfcm9vdF9pbm9kZShzYik7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKLQlpZiAoIXJvb3QpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlzYi0+c19yb290ID0gcm9vdDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGRsbWZzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGRsbWZzX2ZpbGVfcmVsZWFzZSwKLQkucmVhZAkJPSBkbG1mc19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGRsbWZzX2ZpbGVfd3JpdGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmNyZWF0ZQkJPSBkbG1mc19jcmVhdGUsCi0JLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAotCS51bmxpbmsJCT0gZGxtZnNfdW5saW5rLAotfTsKLQotLyogdGhpcyB3YXkgd2UgY2FuIHJlc3RyaWN0IG1rZGlyIHRvIG9ubHkgdGhlIHRvcGxldmVsIG9mIHRoZSBmcy4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAotCS5ta2RpcgkJPSBkbG1mc19ta2RpciwKLQkucm1kaXIJCT0gc2ltcGxlX3JtZGlyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRsbWZzX29wcyA9IHsKLQkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCi0JLmFsbG9jX2lub2RlCT0gZGxtZnNfYWxsb2NfaW5vZGUsCi0JLmRlc3Ryb3lfaW5vZGUJPSBkbG1mc19kZXN0cm95X2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGRsbWZzX2NsZWFyX2lub2RlLAotCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewotCS5nZXRhdHRyCT0gc2ltcGxlX2dldGF0dHIsCi19OwotCi1zdGF0aWMgaW50IGRsbWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlyZXR1cm4gZ2V0X3NiX25vZGV2KGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBkbG1mc19maWxsX3N1cGVyLCBtbnQpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGxtZnNfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIm9jZnMyX2RsbWZzIiwKLQkuZ2V0X3NiCQk9IGRsbWZzX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9kbG1mc19mcyh2b2lkKQotewotCWludCBzdGF0dXM7Ci0JaW50IGNsZWFudXBfaW5vZGUgPSAwLCBjbGVhbnVwX3dvcmtlciA9IDA7Ci0KLQlkbG1mc19wcmludF92ZXJzaW9uKCk7Ci0KLQlzdGF0dXMgPSBiZGlfaW5pdCgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQotCWRsbWZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImRsbWZzX2lub2RlX2NhY2hlIiwKLQkJCQlzaXplb2Yoc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUpLAotCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8Ci0JCQkJCVNMQUJfTUVNX1NQUkVBRCksCi0JCQkJZGxtZnNfaW5pdF9vbmNlKTsKLQlpZiAoIWRsbWZzX2lub2RlX2NhY2hlKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JY2xlYW51cF9pbm9kZSA9IDE7Ci0KLQl1c2VyX2RsbV93b3JrZXIgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidXNlcl9kbG0iKTsKLQlpZiAoIXVzZXJfZGxtX3dvcmtlcikgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGJhaWw7Ci0JfQotCWNsZWFudXBfd29ya2VyID0gMTsKLQotCXN0YXR1cyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRsbWZzX2ZzX3R5cGUpOwotYmFpbDoKLQlpZiAoc3RhdHVzKSB7Ci0JCWlmIChjbGVhbnVwX2lub2RlKQotCQkJa21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKLQkJaWYgKGNsZWFudXBfd29ya2VyKQotCQkJZGVzdHJveV93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKLQkJYmRpX2Rlc3Ryb3koJmRsbWZzX2JhY2tpbmdfZGV2X2luZm8pOwotCX0gZWxzZQotCQlwcmludGsoIk9DRlMyIFVzZXIgRExNIGtlcm5lbCBpbnRlcmZhY2UgbG9hZGVkXG4iKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kbG1mc19mcyh2b2lkKQotewotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGxtZnNfZnNfdHlwZSk7Ci0KLQlmbHVzaF93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKLQlkZXN0cm95X3dvcmtxdWV1ZSh1c2VyX2RsbV93b3JrZXIpOwotCi0Ja21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKLQotCWJkaV9kZXN0cm95KCZkbG1mc19iYWNraW5nX2Rldl9pbmZvKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiT3JhY2xlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KGluaXRfZGxtZnNfZnMpCi1tb2R1bGVfZXhpdChleGl0X2RsbWZzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCAzNDRiY2Y5Li5iNGY5OWRlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJbWxvZygwLCAiZGxtIHRocmVhZCBydW5uaW5nIGZvciAlcy4uLlxuIiwgZGxtLT5uYW1lKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWlmIChkbG1fam9pbmVkKGRsbSkpIHsKKwkJaWYgKGRsbV9kb21haW5fZnVsbHlfam9pbmVkKGRsbSkpIHsKIAkJCXN0YXR1cyA9IGRsbV9kb19yZWNvdmVyeShkbG0pOwogCQkJaWYgKHN0YXR1cyA9PSAtRUFHQUlOKSB7CiAJCQkJLyogZG8gbm90IHNsZWVwLCByZWNoZWNrIGltbWVkaWF0ZWx5LiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYyBiL2ZzL29jZnMyL2RsbS91c2VyZGxtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjFkM2QuLjAwMDAwMDAKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYworKysgL2Rldi9udWxsCkBAIC0xLDY3NiArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQotICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6Ci0gKgotICogdXNlcmRsbS5jCi0gKgotICogQ29kZSB3aGljaCBpbXBsZW1lbnRzIHRoZSBrZXJuZWwgc2lkZSBvZiBhIG1pbmltYWwgdXNlcnNwYWNlCi0gKiBpbnRlcmZhY2UgdG8gb3VyIERMTS4KLSAqCi0gKiBNYW55IG9mIHRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgcGFyZWQgZG93biB2ZXJzaW9ucyBvZiBkbG1nbHVlLmMKLSAqIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0KLQotI2luY2x1ZGUgImNsdXN0ZXIvbm9kZW1hbmFnZXIuaCIKLSNpbmNsdWRlICJjbHVzdGVyL2hlYXJ0YmVhdC5oIgotI2luY2x1ZGUgImNsdXN0ZXIvdGNwLmgiCi0KLSNpbmNsdWRlICJkbG1hcGkuaCIKLQotI2luY2x1ZGUgInVzZXJkbG0uaCIKLQotI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCi0jaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfY2hlY2tfd2FpdF9mbGFnKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJCSAgICAgICBpbnQgZmxhZykKLXsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCXJldCA9IGxvY2tyZXMtPmxfZmxhZ3MgJiBmbGFnOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfd2FpdF9vbl9idXN5X2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCi0KLXsKLQl3YWl0X2V2ZW50KGxvY2tyZXMtPmxfZXZlbnQsCi0JCSAgICF1c2VyX2NoZWNrX3dhaXRfZmxhZyhsb2NrcmVzLCBVU0VSX0xPQ0tfQlVTWSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNlcl93YWl0X29uX2Jsb2NrZWRfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLQotewotCXdhaXRfZXZlbnQobG9ja3Jlcy0+bF9ldmVudCwKLQkJICAgIXVzZXJfY2hlY2tfd2FpdF9mbGFnKGxvY2tyZXMsIFVTRVJfTE9DS19CTE9DS0VEKSk7Ci19Ci0KLS8qIEkgaGVhcnQgY29udGFpbmVyX29mLi4uICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbG1fY3R4dCAqCi1kbG1fY3R4dF9mcm9tX3VzZXJfbG9ja3JlcyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0KLQlpcCA9IGNvbnRhaW5lcl9vZihsb2NrcmVzLAotCQkJICBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSwKLQkJCSAgaXBfbG9ja3Jlcyk7Ci0JcmV0dXJuIGlwLT5pcF9kbG07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKgotdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCi17Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaXAgPSBjb250YWluZXJfb2YobG9ja3JlcywKLQkJCSAgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUsCi0JCQkgIGlwX2xvY2tyZXMpOwotCXJldHVybiAmaXAtPmlwX3Zmc19pbm9kZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0JVU1k7Ci0Jc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci19Ci0KLSNkZWZpbmUgdXNlcl9sb2dfZGxtX2Vycm9yKF9mdW5jLCBfc3RhdCwgX2xvY2tyZXMpIGRvIHsJCQlcCi0JbWxvZyhNTF9FUlJPUiwgIkRsbSBlcnJvciBcIiVzXCIgd2hpbGUgY2FsbGluZyAlcyBvbiAiCQlcCi0JCSJyZXNvdXJjZSAlLipzOiAlc1xuIiwgZGxtX2Vycm5hbWUoX3N0YXQpLCBfZnVuYywJXAotCQlfbG9ja3Jlcy0+bF9uYW1lbGVuLCBfbG9ja3Jlcy0+bF9uYW1lLCBkbG1fZXJybXNnKF9zdGF0KSk7IFwKLX0gd2hpbGUgKDApCi0KLS8qIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gYSB3b3JsZCB3aGVyZSB0aGUgb25seSB0aHJlZSBsb2NrCi0gKiBsZXZlbHMgYXJlIEVYLCBQUiwgYW5kIE5MLiBJdCAqd2lsbCogaGF2ZSB0byBiZSBhZGp1c3RlZCB3aGVuIG1vcmUKLSAqIGxvY2sgdHlwZXMgYXJlIGFkZGVkLiAqLwotc3RhdGljIGlubGluZSBpbnQgdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGludCBsZXZlbCkKLXsKLQlpbnQgbmV3X2xldmVsID0gTEtNX0VYTU9ERTsKLQotCWlmIChsZXZlbCA9PSBMS01fRVhNT0RFKQotCQluZXdfbGV2ZWwgPSBMS01fTkxNT0RFOwotCWVsc2UgaWYgKGxldmVsID09IExLTV9QUk1PREUpCi0JCW5ld19sZXZlbCA9IExLTV9QUk1PREU7Ci0JcmV0dXJuIG5ld19sZXZlbDsKLX0KLQotc3RhdGljIHZvaWQgdXNlcl9hc3Qodm9pZCAqb3BhcXVlKQotewotCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gb3BhcXVlOwotCXN0cnVjdCBkbG1fbG9ja3N0YXR1cyAqbGtzYjsKLQotCW1sb2coMCwgIkFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlLipzXG4iLCBsb2NrcmVzLT5sX25hbWVsZW4sCi0JICAgICBsb2NrcmVzLT5sX25hbWUpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JbGtzYiA9ICYobG9ja3Jlcy0+bF9sa3NiKTsKLQlpZiAobGtzYi0+c3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImxrc2Igc3RhdHVzIHZhbHVlIG9mICV1IG9uIGxvY2tyZXMgJS4qc1xuIiwKLQkJICAgICBsa3NiLT5zdGF0dXMsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gTEtNX0lWTU9ERSwKLQkJCSJMb2NrcmVzICUuKnMsIHJlcXVlc3RlZCBpdm1vZGUuIGZsYWdzIDB4JXhcbiIsCi0JCQlsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7Ci0KLQkvKiB3ZSdyZSBkb3duY29udmVydGluZy4gKi8KLQlpZiAobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPCBsb2NrcmVzLT5sX2xldmVsKSB7Ci0JCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8PQotCQkgICAgdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpKSB7Ci0JCQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gTEtNX05MTU9ERTsKLQkJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CTE9DS0VEOwotCQl9Ci0JfQotCi0JbG9ja3Jlcy0+bF9sZXZlbCA9IGxvY2tyZXMtPmxfcmVxdWVzdGVkOwotCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gTEtNX0lWTU9ERTsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19BVFRBQ0hFRDsKLQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKLQotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWlub2RlID0gdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7Ci0JaWYgKCFpZ3JhYihpbm9kZSkpCi0JCUJVRygpOwotfQotCi1zdGF0aWMgdm9pZCB1c2VyX2RsbV91bmJsb2NrX2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIHZvaWQgX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfUVVFVUVEKSkgewotCQl1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihsb2NrcmVzKTsKLQotCQlJTklUX1dPUksoJmxvY2tyZXMtPmxfd29yaywgdXNlcl9kbG1fdW5ibG9ja19sb2NrKTsKLQotCQlxdWV1ZV93b3JrKHVzZXJfZGxtX3dvcmtlciwgJmxvY2tyZXMtPmxfd29yayk7Ci0JCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX1FVRVVFRDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdXNlcl9kbG1fY29uZF9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCWludCBxdWV1ZSA9IDA7Ci0KLQlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGxvY2tyZXMtPmxfYmxvY2tpbmcpIHsKLQljYXNlIExLTV9FWE1PREU6Ci0JCWlmICghbG9ja3Jlcy0+bF9leF9ob2xkZXJzICYmICFsb2NrcmVzLT5sX3JvX2hvbGRlcnMpCi0JCQlxdWV1ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTEtNX1BSTU9ERToKLQkJaWYgKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpCi0JCQlxdWV1ZSA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCWlmIChxdWV1ZSkKLQkJX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotfQotCi1zdGF0aWMgdm9pZCB1c2VyX2Jhc3Qodm9pZCAqb3BhcXVlLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSBvcGFxdWU7Ci0KLQltbG9nKDAsICJCbG9ja2luZyBBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJS4qcy4gQmxvY2tpbmcgbGV2ZWwgJWRcbiIsCi0JICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JMT0NLRUQ7Ci0JaWYgKGxldmVsID4gbG9ja3Jlcy0+bF9ibG9ja2luZykKLQkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IGxldmVsOwotCi0JX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzZXJfdW5sb2NrX2FzdCh2b2lkICpvcGFxdWUsIGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSBvcGFxdWU7Ci0KLQltbG9nKDAsICJVTkxPQ0sgQVNUIGNhbGxlZCBvbiBsb2NrICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwKLQkgICAgIGxvY2tyZXMtPmxfbmFtZSk7Ci0KLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgc3RhdHVzICE9IERMTV9DQU5DRUxHUkFOVCkKLQkJbWxvZyhNTF9FUlJPUiwgIkRsbSByZXR1cm5zIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKLQotCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkvKiBUaGUgdGVhcmRvd24gZmxhZyBnZXRzIHNldCBlYXJseSBkdXJpbmcgdGhlIHVubG9jayBwcm9jZXNzLAotCSAqIHNvIHRlc3QgdGhlIGNhbmNlbCBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgYXN0IGlzbid0Ci0JICogZm9yIGEgY29uY3VycmVudCBjYW5jZWwuICovCi0JaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04KLQkgICAgJiYgIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpIHsKLQkJbG9ja3Jlcy0+bF9sZXZlbCA9IExLTV9JVk1PREU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7Ci0JCS8qIFdlIHRyaWVkIHRvIGNhbmNlbCBhIGNvbnZlcnQgcmVxdWVzdCwgYnV0IGl0IHdhcwotCQkgKiBhbHJlYWR5IGdyYW50ZWQuIERvbid0IGNsZWFyIHRoZSBidXN5IGZsYWcgLSB0aGUKLQkJICogYXN0IHNob3VsZCd2ZSBkb25lIHRoaXMgYWxyZWFkeS4gKi8KLQkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKLQkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKLQkJZ290byBvdXRfbm9jbGVhcjsKLQl9IGVsc2UgewotCQlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpOwotCQkvKiBDYW5jZWwgc3VjY2VlZGVkLCB3ZSB3YW50IHRvIHJlLXF1ZXVlICovCi0JCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gTEtNX0lWTU9ERTsgLyogY2FuY2VsIGFuCi0JCQkJCQkgICAgKiB1cGNvbnZlcnQKLQkJCQkJCSAgICAqIHJlcXVlc3QuICovCi0JCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7Ci0JCS8qIHdlIHdhbnQgdGhlIHVuYmxvY2sgdGhyZWFkIHRvIGxvb2sgYXQgaXQgYWdhaW4KLQkJICogbm93LiAqLwotCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKQotCQkJX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotCX0KLQotCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CVVNZOwotb3V0X25vY2xlYXI6Ci0Jc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2Ryb3BfaW5vZGVfcmVmKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW5vZGUgPSB1c2VyX2RsbV9pbm9kZV9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKLQlpcHV0KGlub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgdXNlcl9kbG1fdW5ibG9ja19sb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgbmV3X2xldmVsLCBzdGF0dXM7Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzZXJfbG9ja19yZXMsIGxfd29yayk7Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBkbG1fY3R4dF9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKLQotCW1sb2coMCwgInByb2Nlc3NpbmcgbG9ja3JlcyAlLipzXG4iLCBsb2NrcmVzLT5sX25hbWVsZW4sCi0JICAgICBsb2NrcmVzLT5sX25hbWUpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JbWxvZ19idWdfb25fbXNnKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpLAotCQkJIkxvY2tyZXMgJS4qcywgZmxhZ3MgMHgleFxuIiwKLQkJCWxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKLQotCS8qIG5vdGljZSB0aGF0IHdlIGRvbid0IGNsZWFyIFVTRVJfTE9DS19CTE9DS0VEIGhlcmUuIElmIGl0J3MKLQkgKiBzZXQsIHdlIHdhbnQgdXNlcl9hc3QgY2xlYXIgaXQuICovCi0JbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX1FVRVVFRDsKLQotCS8qIEl0J3MgdmFsaWQgdG8gZ2V0IGhlcmUgYW5kIG5vIGxvbmdlciBiZSBibG9ja2VkIC0gaWYgd2UgZ2V0Ci0JICogc2V2ZXJhbCBiYXN0cyBpbiBhIHJvdywgd2UgbWlnaHQgYmUgcXVldWVkIGJ5IHRoZSBmaXJzdAotCSAqIG9uZSwgdGhlIHVuYmxvY2sgdGhyZWFkIG1pZ2h0IHJ1biBhbmQgY2xlYXIgdGhlIHF1ZXVlZAotCSAqIGZsYWcsIGFuZCBmaW5hbGx5IHdlIG1pZ2h0IGdldCBhbm90aGVyIGJhc3Qgd2hpY2ggcmUtcXVldWVzCi0JICogdXMgYmVmb3JlIG91ciBhc3QgZm9yIHRoZSBkb3duY29udmVydCBpcyBjYWxsZWQuICovCi0JaWYgKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSkgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkgewotCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCQlnb3RvIGRyb3BfcmVmOwotCQl9Ci0KLQkJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fQ0FOQ0VMOwotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCQlzdGF0dXMgPSBkbG11bmxvY2soZGxtLAotCQkJCSAgICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkJICAgTEtNX0NBTkNFTCwKLQkJCQkgICB1c2VyX3VubG9ja19hc3QsCi0JCQkJICAgbG9ja3Jlcyk7Ci0JCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKLQkJCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQkvKiBJZiB0aGVyZSBhcmUgc3RpbGwgaW5jb21wYXQgaG9sZGVycywgd2UgY2FuIGV4aXQgc2FmZWx5Ci0JICogd2l0aG91dCB3b3JyeWluZyBhYm91dCByZS1xdWV1ZWluZyB0aGlzIGxvY2sgYXMgdGhhdCB3aWxsCi0JICogaGFwcGVuIG9uIHRoZSBsYXN0IGNhbGwgdG8gdXNlcl9jbHVzdGVyX3VubG9jay4gKi8KLQlpZiAoKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gTEtNX0VYTU9ERSkKLQkgICAgJiYgKGxvY2tyZXMtPmxfZXhfaG9sZGVycyB8fCBsb2NrcmVzLT5sX3JvX2hvbGRlcnMpKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQltbG9nKDAsICJjYW4ndCBkb3duY29udmVydCBmb3IgZXg6IHJvID0gJXUsIGV4ID0gJXVcbiIsCi0JCQlsb2NrcmVzLT5sX3JvX2hvbGRlcnMsIGxvY2tyZXMtPmxfZXhfaG9sZGVycyk7Ci0JCWdvdG8gZHJvcF9yZWY7Ci0JfQotCi0JaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IExLTV9QUk1PREUpCi0JICAgICYmIGxvY2tyZXMtPmxfZXhfaG9sZGVycykgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJbWxvZygwLCAiY2FuJ3QgZG93bmNvbnZlcnQgZm9yIHByOiBleCA9ICV1XG4iLAotCQkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQkvKiB5YXksIHdlIGNhbiBkb3duY29udmVydCBub3cuICovCi0JbmV3X2xldmVsID0gdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpOwotCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbmV3X2xldmVsOwotCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7Ci0JbWxvZygwLCAiRG93bmNvbnZlcnQgbG9jayBmcm9tICVkIHRvICVkXG4iLAotCQlsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwpOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JLyogbmVlZCBsb2NrIGRvd25jb252ZXJ0IHJlcXVlc3Qgbm93Li4uICovCi0Jc3RhdHVzID0gZGxtbG9jayhkbG0sCi0JCQkgbmV3X2xldmVsLAotCQkJICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkgTEtNX0NPTlZFUlR8TEtNX1ZBTEJMSywKLQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkgbG9ja3Jlcy0+bF9uYW1lbGVuLAotCQkJIHVzZXJfYXN0LAotCQkJIGxvY2tyZXMsCi0JCQkgdXNlcl9iYXN0KTsKLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJdXNlcl9sb2dfZGxtX2Vycm9yKCJkbG1sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJdXNlcl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMpOwotCX0KLQotZHJvcF9yZWY6Ci0JdXNlcl9kbG1fZHJvcF9pbm9kZV9yZWYobG9ja3Jlcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9pbmNfaG9sZGVycyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IGxldmVsKQotewotCXN3aXRjaChsZXZlbCkgewotCWNhc2UgTEtNX0VYTU9ERToKLQkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzKys7Ci0JCWJyZWFrOwotCWNhc2UgTEtNX1BSTU9ERToKLQkJbG9ja3Jlcy0+bF9yb19ob2xkZXJzKys7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0KLQotLyogcHJlZGljdCB3aGF0IGxvY2sgbGV2ZWwgd2UnbGwgYmUgZHJvcHBpbmcgZG93biB0byBvbiBiZWhhbGYKLSAqIG9mIGFub3RoZXIgbm9kZSwgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50bHkgd2FudGVkCi0gKiBsZXZlbCB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci11c2VyX21heV9jb250aW51ZV9vbl9ibG9ja2VkX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkJICBpbnQgd2FudGVkKQotewotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkpOwotCi0JcmV0dXJuIHdhbnRlZCA8PSB1c2VyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwobG9ja3Jlcy0+bF9ibG9ja2luZyk7Ci19Ci0KLWludCB1c2VyX2RsbV9jbHVzdGVyX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkgIGludCBsZXZlbCwKLQkJCSAgaW50IGxrbV9mbGFncykKLXsKLQlpbnQgc3RhdHVzLCBsb2NhbF9mbGFnczsKLQlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IGRsbV9jdHh0X2Zyb21fdXNlcl9sb2NrcmVzKGxvY2tyZXMpOwotCi0JaWYgKGxldmVsICE9IExLTV9FWE1PREUgJiYKLQkgICAgbGV2ZWwgIT0gTEtNX1BSTU9ERSkgewotCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlLipzOiBpbnZhbGlkIHJlcXVlc3QhXG4iLAotCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQotCW1sb2coMCwgImxvY2tyZXMgJS4qczogYXNraW5nIGZvciAlcyBsb2NrLCBwYXNzZWQgZmxhZ3MgPSAweCV4XG4iLAotCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsCi0JICAgICAobGV2ZWwgPT0gTEtNX0VYTU9ERSkgPyAiTEtNX0VYTU9ERSIgOiAiTEtNX1BSTU9ERSIsCi0JICAgICBsa21fZmxhZ3MpOwotCi1hZ2FpbjoKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJc3RhdHVzID0gLUVSRVNUQVJUU1lTOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JLyogV2Ugb25seSBjb21wYXJlIGFnYWluc3QgdGhlIGN1cnJlbnRseSBncmFudGVkIGxldmVsCi0JICogaGVyZS4gSWYgdGhlIGxvY2sgaXMgYmxvY2tlZCB3YWl0aW5nIG9uIGEgZG93bmNvbnZlcnQsCi0JICogd2UnbGwgZ2V0IGNhdWdodCBiZWxvdy4gKi8KLQlpZiAoKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgJiYKLQkgICAgKGxldmVsID4gbG9ja3Jlcy0+bF9sZXZlbCkpIHsKLQkJLyogaXMgc29tZW9uZSBzaXR0aW5nIGluIGRsbV9sb2NrPyBJZiBzbywgd2FpdCBvbgotCQkgKiB0aGVtLiAqLwotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCQl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOwotCQlnb3RvIGFnYWluOwotCX0KLQotCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSAmJgotCSAgICAoIXVzZXJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzLCBsZXZlbCkpKSB7Ci0JCS8qIGlzIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBibG9ja2VkIG9uIGJlaGFsZiBvZgotCQkgKiBhbm90aGVyIG5vZGUgKi8KLQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQkJdXNlcl93YWl0X29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzKTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0KLQlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2xldmVsKSB7Ci0JCWxvY2FsX2ZsYWdzID0gbGttX2ZsYWdzIHwgTEtNX1ZBTEJMSzsKLQkJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgIT0gTEtNX0lWTU9ERSkKLQkJCWxvY2FsX2ZsYWdzIHw9IExLTV9DT05WRVJUOwotCi0JCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbGV2ZWw7Ci0JCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JCUJVR19PTihsZXZlbCA9PSBMS01fSVZNT0RFKTsKLQkJQlVHX09OKGxldmVsID09IExLTV9OTE1PREUpOwotCi0JCS8qIGNhbGwgZGxtX2xvY2sgdG8gdXBncmFkZSBsb2NrIG5vdyAqLwotCQlzdGF0dXMgPSBkbG1sb2NrKGRsbSwKLQkJCQkgbGV2ZWwsCi0JCQkJICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkJIGxvY2FsX2ZsYWdzLAotCQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkJIGxvY2tyZXMtPmxfbmFtZWxlbiwKLQkJCQkgdXNlcl9hc3QsCi0JCQkJIGxvY2tyZXMsCi0JCQkJIHVzZXJfYmFzdCk7Ci0JCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkgewotCQkJaWYgKChsa21fZmxhZ3MgJiBMS01fTk9RVUVVRSkgJiYKLQkJCSAgICAoc3RhdHVzID09IERMTV9OT1RRVUVVRUQpKQotCQkJCXN0YXR1cyA9IC1FQUdBSU47Ci0JCQllbHNlIHsKLQkJCQl1c2VyX2xvZ19kbG1fZXJyb3IoImRsbWxvY2siLCBzdGF0dXMsIGxvY2tyZXMpOwotCQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQl1c2VyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3Jlcyk7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQotCQl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOwotCQlnb3RvIGFnYWluOwotCX0KLQotCXVzZXJfZGxtX2luY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCXN0YXR1cyA9IDA7Ci1iYWlsOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9kZWNfaG9sZGVycyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IGxldmVsKQotewotCXN3aXRjaChsZXZlbCkgewotCWNhc2UgTEtNX0VYTU9ERToKLQkJQlVHX09OKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpOwotCQlsb2NrcmVzLT5sX2V4X2hvbGRlcnMtLTsKLQkJYnJlYWs7Ci0JY2FzZSBMS01fUFJNT0RFOgotCQlCVUdfT04oIWxvY2tyZXMtPmxfcm9faG9sZGVycyk7Ci0JCWxvY2tyZXMtPmxfcm9faG9sZGVycy0tOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLXZvaWQgdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkgICAgIGludCBsZXZlbCkKLXsKLQlpZiAobGV2ZWwgIT0gTEtNX0VYTU9ERSAmJgotCSAgICBsZXZlbCAhPSBMS01fUFJNT0RFKSB7Ci0JCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICUuKnM6IGludmFsaWQgcmVxdWVzdCFcbiIsCi0JCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCXVzZXJfZGxtX2RlY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKLQlfX3VzZXJfZGxtX2NvbmRfcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLX0KLQotdm9pZCB1c2VyX2RsbV93cml0ZV9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCWNvbnN0IGNoYXIgKnZhbCwKLQkJCXVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSAmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXM7Ci0JY2hhciAqbHZiID0gbG9ja3Jlcy0+bF9sa3NiLmx2YjsKLQotCUJVR19PTihsZW4gPiBETE1fTFZCX0xFTik7Ci0KLQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQlCVUdfT04obG9ja3Jlcy0+bF9sZXZlbCA8IExLTV9FWE1PREUpOwotCW1lbWNweShsdmIsIHZhbCwgbGVuKTsKLQotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotfQotCi12b2lkIHVzZXJfZGxtX3JlYWRfbHZiKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICBjaGFyICp2YWwsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzOwotCWNoYXIgKmx2YiA9IGxvY2tyZXMtPmxfbGtzYi5sdmI7Ci0KLQlCVUdfT04obGVuID4gRExNX0xWQl9MRU4pOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JQlVHX09OKGxvY2tyZXMtPmxfbGV2ZWwgPCBMS01fUFJNT0RFKTsKLQltZW1jcHkodmFsLCBsdmIsIGxlbik7Ci0KLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLX0KLQotdm9pZCB1c2VyX2RsbV9sb2NrX3Jlc19pbml0KHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQltZW1zZXQobG9ja3JlcywgMCwgc2l6ZW9mKCpsb2NrcmVzKSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb2NrcmVzLT5sX2V2ZW50KTsKLQlsb2NrcmVzLT5sX2xldmVsID0gTEtNX0lWTU9ERTsKLQlsb2NrcmVzLT5sX3JlcXVlc3RlZCA9IExLTV9JVk1PREU7Ci0JbG9ja3Jlcy0+bF9ibG9ja2luZyA9IExLTV9JVk1PREU7Ci0KLQkvKiBzaG91bGQgaGF2ZSBiZWVuIGNoZWNrZWQgYmVmb3JlIGdldHRpbmcgaGVyZS4gKi8KLQlCVUdfT04oZGVudHJ5LT5kX25hbWUubGVuID49IFVTRVJfRExNX0xPQ0tfSURfTUFYX0xFTik7Ci0KLQltZW1jcHkobG9ja3Jlcy0+bF9uYW1lLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4pOwotCWxvY2tyZXMtPmxfbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLX0KLQotaW50IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlpbnQgc3RhdHVzID0gLUVCVVNZOwotCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gZGxtX2N0eHRfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7Ci0KLQltbG9nKDAsICJhc2tlZCB0byBkZXN0cm95ICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQotCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fVEVBUkRPV047Ci0KLQl3aGlsZSAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7Ci0KLQkJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCX0KLQotCWlmIChsb2NrcmVzLT5sX3JvX2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0Jc3RhdHVzID0gMDsKLQlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0FUVEFDSEVEKSkgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBiYWlsOwotCX0KLQotCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19BVFRBQ0hFRDsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19CVVNZOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jc3RhdHVzID0gZGxtdW5sb2NrKGRsbSwKLQkJCSAgICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkgICBMS01fVkFMQkxLLAotCQkJICAgdXNlcl91bmxvY2tfYXN0LAotCQkJICAgbG9ja3Jlcyk7Ci0JaWYgKHN0YXR1cyAhPSBETE1fTk9STUFMKSB7Ci0JCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQotCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7Ci0KLQlzdGF0dXMgPSAwOwotYmFpbDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdHJ1Y3QgZGxtX2N0eHQgKnVzZXJfZGxtX3JlZ2lzdGVyX2NvbnRleHQoc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkJCSAgIHN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiAqcHJvdG8pCi17Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG07Ci0JdTMyIGRsbV9rZXk7Ci0JY2hhciAqZG9tYWluOwotCi0JZG9tYWluID0ga21hbGxvYyhuYW1lLT5sZW4gKyAxLCBHRlBfTk9GUyk7Ci0JaWYgKCFkb21haW4pIHsKLQkJbWxvZ19lcnJubygtRU5PTUVNKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JZGxtX2tleSA9IGNyYzMyX2xlKDAsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7Ci0KLQlzbnByaW50Zihkb21haW4sIG5hbWUtPmxlbiArIDEsICIlLipzIiwgbmFtZS0+bGVuLCBuYW1lLT5uYW1lKTsKLQotCWRsbSA9IGRsbV9yZWdpc3Rlcl9kb21haW4oZG9tYWluLCBkbG1fa2V5LCBwcm90byk7Ci0JaWYgKElTX0VSUihkbG0pKQotCQltbG9nX2Vycm5vKFBUUl9FUlIoZGxtKSk7Ci0KLQlrZnJlZShkb21haW4pOwotCXJldHVybiBkbG07Ci19Ci0KLXZvaWQgdXNlcl9kbG1fdW5yZWdpc3Rlcl9jb250ZXh0KHN0cnVjdCBkbG1fY3R4dCAqZGxtKQotewotCWRsbV91bnJlZ2lzdGVyX2RvbWFpbihkbG0pOwotfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uaCBiL2ZzL29jZnMyL2RsbS91c2VyZGxtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjM2NjMDNjLi4wMDAwMDAwCi0tLSBhL2ZzL29jZnMyL2RsbS91c2VyZGxtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KLSAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgotICoKLSAqIHVzZXJkbG0uaAotICoKLSAqIFVzZXJzcGFjZSBkbG0gZGVmaW5lcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgVVNFUkRMTV9ICi0jZGVmaW5lIFVTRVJETE1fSAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0vKiB1c2VyX2xvY2tfcmVzLT5sX2ZsYWdzIGZsYWdzLiAqLwotI2RlZmluZSBVU0VSX0xPQ0tfQVRUQUNIRUQgICAgICAoMHgwMDAwMDAwMSkgLyogd2UgaGF2ZSBpbml0aWFsaXplZAotCQkJCQkgICAgICAgKiB0aGUgbHZiICovCi0jZGVmaW5lIFVTRVJfTE9DS19CVVNZICAgICAgICAgICgweDAwMDAwMDAyKSAvKiB3ZSBhcmUgY3VycmVudGx5IGluCi0JCQkJCSAgICAgICAqIGRsbV9sb2NrICovCi0jZGVmaW5lIFVTRVJfTE9DS19CTE9DS0VEICAgICAgICgweDAwMDAwMDA0KSAvKiBibG9ja2VkIHdhaXRpbmcgdG8KLQkJCQkJICAgICAgKiBkb3duY29udmVydCovCi0jZGVmaW5lIFVTRVJfTE9DS19JTl9URUFSRE9XTiAgICgweDAwMDAwMDA4KSAvKiB3ZSdyZSBjdXJyZW50bHkKLQkJCQkJICAgICAgKiBkZXN0cm95aW5nIHRoaXMKLQkJCQkJICAgICAgKiBsb2NrLiAqLwotI2RlZmluZSBVU0VSX0xPQ0tfUVVFVUVEICAgICAgICAoMHgwMDAwMDAxMCkgLyogbG9jayBpcyBvbiB0aGUKLQkJCQkJICAgICAgKiB3b3JrcXVldWUgKi8KLSNkZWZpbmUgVVNFUl9MT0NLX0lOX0NBTkNFTCAgICAgKDB4MDAwMDAwMjApCi0KLXN0cnVjdCB1c2VyX2xvY2tfcmVzIHsKLQlzcGlubG9ja190ICAgICAgICAgICAgICAgbF9sb2NrOwotCi0JaW50ICAgICAgICAgICAgICAgICAgICAgIGxfZmxhZ3M7Ci0KLSNkZWZpbmUgVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOICAzMgotCWNoYXIgICAgICAgICAgICAgICAgICAgICBsX25hbWVbVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOXTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9uYW1lbGVuOwotCWludCAgICAgICAgICAgICAgICAgICAgICBsX2xldmVsOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICBsX3JvX2hvbGRlcnM7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfZXhfaG9sZGVyczsKLQlzdHJ1Y3QgZGxtX2xvY2tzdGF0dXMgICAgbF9sa3NiOwotCi0JaW50ICAgICAgICAgICAgICAgICAgICAgIGxfcmVxdWVzdGVkOwotCWludCAgICAgICAgICAgICAgICAgICAgICBsX2Jsb2NraW5nOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgIGxfZXZlbnQ7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgbF93b3JrOwotfTsKLQotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp1c2VyX2RsbV93b3JrZXI7Ci0KLXZvaWQgdXNlcl9kbG1fbG9ja19yZXNfaW5pdChzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3Jlcyk7Ci1pbnQgdXNlcl9kbG1fY2x1c3Rlcl9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJICBpbnQgbGV2ZWwsCi0JCQkgIGludCBsa21fZmxhZ3MpOwotdm9pZCB1c2VyX2RsbV9jbHVzdGVyX3VubG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCSAgICAgaW50IGxldmVsKTsKLXZvaWQgdXNlcl9kbG1fd3JpdGVfbHZiKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQljb25zdCBjaGFyICp2YWwsCi0JCQl1bnNpZ25lZCBpbnQgbGVuKTsKLXZvaWQgdXNlcl9kbG1fcmVhZF9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIGNoYXIgKnZhbCwKLQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4pOwotc3RydWN0IGRsbV9jdHh0ICp1c2VyX2RsbV9yZWdpc3Rlcl9jb250ZXh0KHN0cnVjdCBxc3RyICpuYW1lLAotCQkJCQkgICBzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gKnByb3RvKTsKLXZvaWQgdXNlcl9kbG1fdW5yZWdpc3Rlcl9jb250ZXh0KHN0cnVjdCBkbG1fY3R4dCAqZGxtKTsKLQotc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgewotCXN0cnVjdCBkbG1fY3R4dCAgICAgICAgICAgICAqaXBfZGxtOwotCi0Jc3RydWN0IHVzZXJfbG9ja19yZXMgaXBfbG9ja3JlczsgLyogdW51c2VkIGZvciBkaXJlY3Rvcmllcy4gKi8KLQlzdHJ1Y3QgaW5vZGUgICAgICAgICAqaXBfcGFyZW50OwotCi0Jc3RydWN0IGlub2RlICAgICAgICAgaXBfdmZzX2lub2RlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqCi1ETE1GU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0gICAgICAgIHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsCi0JCQkgICAgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUsCi0JCQkgICAgaXBfdmZzX2lub2RlKTsKLX0KLQotc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSB7Ci0JaW50ICAgICAgICAgICAgICAgICAgZnBfbG9ja19sZXZlbDsKLX07Ci0KLSNkZWZpbmUgRExNRlNfTUFHSUMJMHg3NmE5ZjQyNQotCi0jZW5kaWYgLyogVVNFUkRMTV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9NYWtlZmlsZSBiL2ZzL29jZnMyL2RsbWZzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjliNDgKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9kbG1mcy9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK0VYVFJBX0NGTEFHUyArPSAtSWZzL29jZnMyCisKK29iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gb2NmczJfZGxtZnMubworCitvY2ZzMl9kbG1mcy1vYmpzIDo9IHVzZXJkbG0ubyBkbG1mcy5vIGRsbWZzdmVyLm8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGRlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCkBAIC0wLDAgKzEsNzE1IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogZGxtZnMuYworICoKKyAqIENvZGUgd2hpY2ggaW1wbGVtZW50cyB0aGUga2VybmVsIHNpZGUgb2YgYSBtaW5pbWFsIHVzZXJzcGFjZQorICogaW50ZXJmYWNlIHRvIG91ciBETE0uIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSB2aXJ0dWFsIGZpbGUgc3lzdGVtCisgKiB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdXNlcnNwYWNlLiBDcmVkaXQgc2hvdWxkIGdvIHRvIHJhbWZzLAorICogd2hpY2ggd2FzIGEgdGVtcGxhdGUgZm9yIHRoZSBmcyBzaWRlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqLworCisvKiBTaW1wbGUgVkZTIGhvb2tzIGJhc2VkIG9uOiAqLworLyoKKyAqIFJlc2l6YWJsZSBzaW1wbGUgcmFtIGZpbGVzeXN0ZW0gZm9yIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMaW51cyBUb3J2YWxkcy4KKyAqICAgICAgICAgICAgICAgMjAwMCBUcmFuc21ldGEgQ29ycC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJzdGFja2dsdWUuaCIKKyNpbmNsdWRlICJ1c2VyZGxtLmgiCisjaW5jbHVkZSAiZGxtZnN2ZXIuaCIKKworI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCisjaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRsbWZzX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRsbWZzX2ZpbGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbG1mc19pbm9kZV9jYWNoZTsKKworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnVzZXJfZGxtX3dvcmtlcjsKKworCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIEFCSSBjYXBhYmlsaXRpZXMgb2YgZGxtZnMuCisgKgorICogT3ZlciB0aW1lLCBkbG1mcyBoYXMgYWRkZWQgc29tZSBmZWF0dXJlcyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlCisgKiBpbml0aWFsIEFCSS4gIFVuZm9ydHVuYXRlbHksIHNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCBkZXRlY3RhYmxlCisgKiB2aWEgc3RhbmRhcmQgdXNhZ2UuICBGb3IgZXhhbXBsZSwgTGludXgncyBkZWZhdWx0IHBvbGwgYWx3YXlzIHJldHVybnMKKyAqIFBPTExJTiwgc28gdGhlcmUgaXMgbm8gd2F5IGZvciBhIGNhbGxlciBvZiBwb2xsKDIpIHRvIGtub3cgd2hlbiBkbG1mcworICogYWRkZWQgcG9sbCBzdXBwb3J0LiAgSW5zdGVhZCwgd2UgcHJvdmlkZSB0aGlzIGxpc3Qgb2YgbmV3IGNhcGFiaWxpdGllcy4KKyAqCisgKiBDYXBhYmlsaXRpZXMgaXMgYSByZWFkLW9ubHkgYXR0cmlidXRlLiAgV2UgZG8gaXQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyCisgKiBzbyB3ZSBjYW4gZGlzY292ZXIgaXQgd2hldGhlciBkbG1mcyBpcyBidWlsdCBpbiwgbG9hZGVkLCBvciBldmVuIG5vdAorICogbG9hZGVkLgorICoKKyAqIFRoZSBBQkkgZmVhdHVyZXMgYXJlIGxvY2FsIHRvIHRoaXMgbWFjaGluZSdzIGRsbWZzIG1vdW50LiAgVGhpcyBpcworICogZGlzdGluY3QgZnJvbSB0aGUgbG9ja2luZyBwcm90b2NvbCwgd2hpY2ggaXMgY29uY2VybmVkIHdpdGggaW50ZXItbm9kZQorICogaW50ZXJhY3Rpb24uCisgKgorICogQ2FwYWJpbGl0aWVzOgorICogLSBiYXN0CTogUE9MTElOIGFnYWluc3QgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIGhlbGQgbG9jaworICoJCSAgc2lnbmlmaWVzIGEgYmFzdCBmaXJlZCBvbiB0aGUgbG9jay4KKyAqLworI2RlZmluZSBETE1GU19DQVBBQklMSVRJRVMgImJhc3Qgc3RhY2tnbHVlIgorZXh0ZXJuIGludCBwYXJhbV9zZXRfZGxtZnNfY2FwYWJpbGl0aWVzKGNvbnN0IGNoYXIgKnZhbCwKKwkJCQkJc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJcHJpbnRrKEtFUk5fRVJSICIlczogcmVhZG9ubHkgcGFyYW1ldGVyXG4iLCBrcC0+bmFtZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW50IHBhcmFtX2dldF9kbG1mc19jYXBhYmlsaXRpZXMoY2hhciAqYnVmZmVyLAorCQkJCQlzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlyZXR1cm4gc3RybGNweShidWZmZXIsIERMTUZTX0NBUEFCSUxJVElFUywKKwkJICAgICAgIHN0cmxlbihETE1GU19DQVBBQklMSVRJRVMpICsgMSk7Cit9Cittb2R1bGVfcGFyYW1fY2FsbChjYXBhYmlsaXRpZXMsIHBhcmFtX3NldF9kbG1mc19jYXBhYmlsaXRpZXMsCisJCSAgcGFyYW1fZ2V0X2RsbWZzX2NhcGFiaWxpdGllcywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcGFiaWxpdGllcywgRExNRlNfQ0FQQUJJTElUSUVTKTsKKworCisvKgorICogZGVjb2RlcyBhIHNldCBvZiBvcGVuIGZsYWdzIGludG8gYSB2YWxpZCBsb2NrIGxldmVsIGFuZCBhIHNldCBvZiBmbGFncy4KKyAqIHJldHVybnMgPCAwIGlmIHdlIGhhdmUgaW52YWxpZCBmbGFncworICogZmxhZ3Mgd2hpY2ggbWVhbiBzb21ldGhpbmcgdG8gdXM6CisgKiBPX1JET05MWSAtPiBQUk1PREUgbGV2ZWwKKyAqIE9fV1JPTkxZIC0+IEVYTU9ERSBsZXZlbAorICoKKyAqIE9fTk9OQkxPQ0sgLT4gTEtNX05PUVVFVUUKKyAqLworc3RhdGljIGludCBkbG1mc19kZWNvZGVfb3Blbl9mbGFncyhpbnQgb3Blbl9mbGFncywKKwkJCQkgICBpbnQgKmxldmVsLAorCQkJCSAgIGludCAqZmxhZ3MpCit7CisJaWYgKG9wZW5fZmxhZ3MgJiAoT19XUk9OTFl8T19SRFdSKSkKKwkJKmxldmVsID0gTEtNX0VYTU9ERTsKKwllbHNlCisJCSpsZXZlbCA9IExLTV9QUk1PREU7CisKKwkqZmxhZ3MgPSAwOworCWlmIChvcGVuX2ZsYWdzICYgT19OT05CTE9DSykKKwkJKmZsYWdzIHw9IExLTV9OT1FVRVVFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxtZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgc3RhdHVzLCBsZXZlbCwgZmxhZ3M7CisJc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSAqZnAgPSBOVUxMOworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKKworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQlCVUcoKTsKKworCW1sb2coMCwgIm9wZW4gY2FsbGVkIG9uIGlub2RlICVsdSwgZmxhZ3MgMHgleFxuIiwgaW5vZGUtPmlfaW5vLAorCQlmaWxlLT5mX2ZsYWdzKTsKKworCXN0YXR1cyA9IGRsbWZzX2RlY29kZV9vcGVuX2ZsYWdzKGZpbGUtPmZfZmxhZ3MsICZsZXZlbCwgJmZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBiYWlsOworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBob25vciBPX0FQUEVORCBhdCByZWFkL3dyaXRlIHRpbWUgYXMgaXQKKwkgKiBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIExWQiB3cml0ZXMuICovCisJZmlsZS0+Zl9mbGFncyAmPSB+T19BUFBFTkQ7CisKKwlmcCA9IGttYWxsb2Moc2l6ZW9mKCpmcCksIEdGUF9OT0ZTKTsKKwlpZiAoIWZwKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJZnAtPmZwX2xvY2tfbGV2ZWwgPSBsZXZlbDsKKworCWlwID0gRExNRlNfSShpbm9kZSk7CisKKwlzdGF0dXMgPSB1c2VyX2RsbV9jbHVzdGVyX2xvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCwgZmxhZ3MpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCS8qIHRoaXMgaXMgYSBzdHJhbmdlIGVycm9yIHRvIHJldHVybiBoZXJlIGJ1dCBJIHdhbnQKKwkJICogdG8gYmUgYWJsZSB1c2Vyc3BhY2UgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBhCisJCSAqIHZhbGlkIGxvY2sgcmVxdWVzdCBmcm9tIG9uZSB0aGF0IHNpbXBseSBjb3VsZG4ndCBiZQorCQkgKiBncmFudGVkLiAqLworCQlpZiAoZmxhZ3MgJiBMS01fTk9RVUVVRSAmJiBzdGF0dXMgPT0gLUVBR0FJTikKKwkJCXN0YXR1cyA9IC1FVFhUQlNZOworCQlrZnJlZShmcCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmcDsKK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbG1mc19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBsZXZlbCwgc3RhdHVzOworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9IERMTUZTX0koaW5vZGUpOworCXN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKmZwID0KKwkJKHN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCUJVRygpOworCisJbWxvZygwLCAiY2xvc2UgY2FsbGVkIG9uIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKKworCXN0YXR1cyA9IDA7CisJaWYgKGZwKSB7CisJCWxldmVsID0gZnAtPmZwX2xvY2tfbGV2ZWw7CisJCWlmIChsZXZlbCAhPSBMS01fSVZNT0RFKQorCQkJdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCk7CisKKwkJa2ZyZWUoZnApOworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV2UgZG8gLT5zZXRhdHRyKCkganVzdCB0byBvdmVycmlkZSBzaXplIGNoYW5nZXMuICBPdXIgc2l6ZSBpcyB0aGUgc2l6ZQorICogb2YgdGhlIExWQiBhbmQgbm90aGluZyBlbHNlLgorICovCitzdGF0aWMgaW50IGRsbWZzX2ZpbGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWF0dHItPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7CisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGxtZnNfZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCWludCBldmVudCA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwID0gRExNRlNfSShpbm9kZSk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmlwLT5pcF9sb2NrcmVzLmxfZXZlbnQsIHdhaXQpOworCisJc3Bpbl9sb2NrKCZpcC0+aXBfbG9ja3Jlcy5sX2xvY2spOworCWlmIChpcC0+aXBfbG9ja3Jlcy5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpCisJCWV2ZW50ID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlzcGluX3VubG9jaygmaXAtPmlwX2xvY2tyZXMubF9sb2NrKTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHNzaXplX3QgZGxtZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICAgIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LAorCQkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgYnl0ZXNfbGVmdDsKKwlzc2l6ZV90IHJlYWRsZW4sIGdvdDsKKwljaGFyICpsdmJfYnVmOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAorCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7CisKKwlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBkb24ndCByZWFkIHBhc3QgdGhlIGx2YiAqLworCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJlYWRsZW4gPSBpX3NpemVfcmVhZChpbm9kZSkgLSAqcHBvczsKKwllbHNlCisJCXJlYWRsZW4gPSBjb3VudCAtICpwcG9zOworCisJbHZiX2J1ZiA9IGttYWxsb2MocmVhZGxlbiwgR0ZQX05PRlMpOworCWlmICghbHZiX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnb3QgPSB1c2VyX2RsbV9yZWFkX2x2Yihpbm9kZSwgbHZiX2J1ZiwgcmVhZGxlbik7CisJaWYgKGdvdCkgeworCQlCVUdfT04oZ290ICE9IHJlYWRsZW4pOworCQlieXRlc19sZWZ0ID0gX19jb3B5X3RvX3VzZXIoYnVmLCBsdmJfYnVmLCByZWFkbGVuKTsKKwkJcmVhZGxlbiAtPSBieXRlc19sZWZ0OworCX0gZWxzZQorCQlyZWFkbGVuID0gMDsKKworCWtmcmVlKGx2Yl9idWYpOworCisJKnBwb3MgPSAqcHBvcyArIHJlYWRsZW47CisKKwltbG9nKDAsICJyZWFkICV6ZCBieXRlc1xuIiwgcmVhZGxlbik7CisJcmV0dXJuIHJlYWRsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRsbWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsCisJCQkJbG9mZl90ICpwcG9zKQoreworCWludCBieXRlc19sZWZ0OworCXNzaXplX3Qgd3JpdGVsZW47CisJY2hhciAqbHZiX2J1ZjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCW1sb2coMCwgImlub2RlICVsdSwgY291bnQgPSAlenUsICpwcG9zID0gJWxsdVxuIiwKKwkJaW5vZGUtPmlfaW5vLCBjb3VudCwgKnBwb3MpOworCisJaWYgKCpwcG9zID49IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBkb24ndCB3cml0ZSBwYXN0IHRoZSBsdmIgKi8KKwlpZiAoKGNvdW50ICsgKnBwb3MpID4gaV9zaXplX3JlYWQoaW5vZGUpKQorCQl3cml0ZWxlbiA9IGlfc2l6ZV9yZWFkKGlub2RlKSAtICpwcG9zOworCWVsc2UKKwkJd3JpdGVsZW4gPSBjb3VudCAtICpwcG9zOworCisJbHZiX2J1ZiA9IGttYWxsb2Mod3JpdGVsZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWx2Yl9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKGx2Yl9idWYsIGJ1Ziwgd3JpdGVsZW4pOworCXdyaXRlbGVuIC09IGJ5dGVzX2xlZnQ7CisJaWYgKHdyaXRlbGVuKQorCQl1c2VyX2RsbV93cml0ZV9sdmIoaW5vZGUsIGx2Yl9idWYsIHdyaXRlbGVuKTsKKworCWtmcmVlKGx2Yl9idWYpOworCisJKnBwb3MgPSAqcHBvcyArIHdyaXRlbGVuOworCW1sb2coMCwgIndyb3RlICV6ZCBieXRlc1xuIiwgd3JpdGVsZW4pOworCXJldHVybiB3cml0ZWxlbjsKK30KKworc3RhdGljIHZvaWQgZGxtZnNfaW5pdF9vbmNlKHZvaWQgKmZvbykKK3sKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXAgPQorCQkoc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKikgZm9vOworCisJaXAtPmlwX2Nvbm4gPSBOVUxMOworCWlwLT5pcF9wYXJlbnQgPSBOVUxMOworCisJaW5vZGVfaW5pdF9vbmNlKCZpcC0+aXBfdmZzX2lub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqZGxtZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisKKwlpcCA9IGttZW1fY2FjaGVfYWxsb2MoZGxtZnNfaW5vZGVfY2FjaGUsIEdGUF9OT0ZTKTsKKwlpZiAoIWlwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmaXAtPmlwX3Zmc19pbm9kZTsKK30KKworc3RhdGljIHZvaWQgZGxtZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWttZW1fY2FjaGVfZnJlZShkbG1mc19pbm9kZV9jYWNoZSwgRExNRlNfSShpbm9kZSkpOworfQorCitzdGF0aWMgdm9pZCBkbG1mc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOworCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuOworCisJbWxvZygwLCAiaW5vZGUgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOworCisJaXAgPSBETE1GU19JKGlub2RlKTsKKworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCXN0YXR1cyA9IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jaygmaXAtPmlwX2xvY2tyZXMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJaXB1dChpcC0+aXBfcGFyZW50KTsKKwkJZ290byBjbGVhcl9maWVsZHM7CisJfQorCisJbWxvZygwLCAid2UncmUgYSBkaXJlY3RvcnksIGlwLT5pcF9jb25uID0gMHglcFxuIiwgaXAtPmlwX2Nvbm4pOworCS8qIHdlIG11c3QgYmUgYSBkaXJlY3RvcnkuIElmIHJlcXVpcmVkLCBsZXRzIHVucmVnaXN0ZXIgdGhlCisJICogZGxtIGNvbnRleHQgbm93LiAqLworCWlmIChpcC0+aXBfY29ubikKKwkJdXNlcl9kbG1fdW5yZWdpc3RlcihpcC0+aXBfY29ubik7CitjbGVhcl9maWVsZHM6CisJaXAtPmlwX3BhcmVudCA9IE5VTEw7CisJaXAtPmlwX2Nvbm4gPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGxtZnNfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkubmFtZQkJPSAib2NmczItZGxtZnMiLAorCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLworCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRsbWZzX2dldF9yb290X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CisJaW50IG1vZGUgPSBTX0lGRElSIHwgMDc1NTsKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisKKwlpZiAoaW5vZGUpIHsKKwkJaXAgPSBETE1GU19JKGlub2RlKTsKKworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gY3VycmVudF9mc3VpZCgpOworCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7CisJCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmZGxtZnNfYmFja2luZ19kZXZfaW5mbzsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlpbmNfbmxpbmsoaW5vZGUpOworCisJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX29wID0gJmRsbWZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9uczsKKwl9CisKKwlyZXR1cm4gaW5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRsbWZzX2dldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKKwkJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgICAgIGludCBtb2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBwYXJlbnQtPmlfc2I7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKKworCWlmICghaW5vZGUpCisJCXJldHVybiBOVUxMOworCisJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJaW5vZGUtPmlfdWlkID0gY3VycmVudF9mc3VpZCgpOworCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmRsbWZzX2JhY2tpbmdfZGV2X2luZm87CisJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCisJaXAgPSBETE1GU19JKGlub2RlKTsKKwlpcC0+aXBfY29ubiA9IERMTUZTX0kocGFyZW50KS0+aXBfY29ubjsKKworCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCWRlZmF1bHQ6CisJCS8qIGZvciBub3cgd2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuCisJCSAqIGRpcmVjdG9yaWVzIGFuZCByZWd1bGFyIGZpbGVzLiAqLworCQlCVUcoKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGUkVHOgorCQlpbm9kZS0+aV9vcCA9ICZkbG1mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZkbG1mc19maWxlX29wZXJhdGlvbnM7CisKKwkJaV9zaXplX3dyaXRlKGlub2RlLCAgRExNX0xWQl9MRU4pOworCisJCXVzZXJfZGxtX2xvY2tfcmVzX2luaXQoJmlwLT5pcF9sb2NrcmVzLCBkZW50cnkpOworCisJCS8qIHJlbGVhc2VkIGF0IGNsZWFyX2lub2RlIHRpbWUsIHRoaXMgaW5zdXJlcyB0aGF0IHdlCisJCSAqIGdldCB0byBkcm9wIHRoZSBkbG0gcmVmZXJlbmNlIG9uIGVhY2ggbG9jayAqYmVmb3JlKgorCQkgKiB3ZSBjYWxsIHRoZSB1bnJlZ2lzdGVyIGNvZGUgZm9yIHJlbGVhc2luZyBwYXJlbnQKKwkJICogZGlyZWN0b3JpZXMuICovCisJCWlwLT5pcF9wYXJlbnQgPSBpZ3JhYihwYXJlbnQpOworCQlCVUdfT04oIWlwLT5pcF9wYXJlbnQpOworCQlicmVhazsKKwljYXNlIFNfSUZESVI6CisJCWlub2RlLT5pX29wID0gJmRsbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOworCisJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PQorCQkgKiAyIChmb3IgIi4iIGVudHJ5KSAqLworCQlpbmNfbmxpbmsoaW5vZGUpOworCQlicmVhazsKKwl9CisKKwlpZiAocGFyZW50LT5pX21vZGUgJiBTX0lTR0lEKSB7CisJCWlub2RlLT5pX2dpZCA9IHBhcmVudC0+aV9naWQ7CisJCWlmIChTX0lTRElSKG1vZGUpKQorCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lTR0lEOworCX0KKworCXJldHVybiBpbm9kZTsKK30KKworLyoKKyAqIEZpbGUgY3JlYXRpb24uIEFsbG9jYXRlIGFuIGlub2RlLCBhbmQgd2UncmUgZG9uZS4uCisgKi8KKy8qIFNNUC1zYWZlICovCitzdGF0aWMgaW50IGRsbWZzX21rZGlyKHN0cnVjdCBpbm9kZSAqIGRpciwKKwkJICAgICAgIHN0cnVjdCBkZW50cnkgKiBkZW50cnksCisJCSAgICAgICBpbnQgbW9kZSkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCBxc3RyICpkb21haW4gPSAmZGVudHJ5LT5kX25hbWU7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOworCXN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm47CisKKwltbG9nKDAsICJta2RpciAlLipzXG4iLCBkb21haW4tPmxlbiwgZG9tYWluLT5uYW1lKTsKKworCS8qIHZlcmlmeSB0aGF0IHdlIGhhdmUgYSBwcm9wZXIgZG9tYWluICovCisJaWYgKGRvbWFpbi0+bGVuID49IEdST1VQX05BTUVfTUFYKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCW1sb2coTUxfRVJST1IsICJpbnZhbGlkIGRvbWFpbiBuYW1lIGZvciBkaXJlY3RvcnkuXG4iKTsKKwkJZ290byBiYWlsOworCX0KKworCWlub2RlID0gZGxtZnNfZ2V0X2lub2RlKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUik7CisJaWYgKCFpbm9kZSkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpcCA9IERMTUZTX0koaW5vZGUpOworCisJY29ubiA9IHVzZXJfZGxtX3JlZ2lzdGVyKGRvbWFpbik7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNvbm4pOworCQltbG9nKE1MX0VSUk9SLCAiRXJyb3IgJWQgY291bGQgbm90IHJlZ2lzdGVyIGRvbWFpbiBcIiUuKnNcIlxuIiwKKwkJICAgICBzdGF0dXMsIGRvbWFpbi0+bGVuLCBkb21haW4tPm5hbWUpOworCQlnb3RvIGJhaWw7CisJfQorCWlwLT5pcF9jb25uID0gY29ubjsKKworCWluY19ubGluayhkaXIpOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KKworCXN0YXR1cyA9IDA7CitiYWlsOgorCWlmIChzdGF0dXMgPCAwKQorCQlpcHV0KGlub2RlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRsbWZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCWludCBtb2RlLAorCQkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKKworCW1sb2coMCwgImNyZWF0ZSAlLipzXG4iLCBuYW1lLT5sZW4sIG5hbWUtPm5hbWUpOworCisJLyogdmVyaWZ5IG5hbWUgaXMgdmFsaWQgYW5kIGRvZXNuJ3QgY29udGFpbiBhbnkgZGxtIHJlc2VydmVkCisJICogY2hhcmFjdGVycyAqLworCWlmIChuYW1lLT5sZW4gPj0gVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOIHx8CisJICAgIG5hbWUtPm5hbWVbMF0gPT0gJyQnKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCW1sb2coTUxfRVJST1IsICJpbnZhbGlkIGxvY2sgbmFtZSwgJS4qc1xuIiwgbmFtZS0+bGVuLAorCQkgICAgIG5hbWUtPm5hbWUpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGUgPSBkbG1mc19nZXRfaW5vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTsKKwlpZiAoIWlub2RlKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbG1mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJbWxvZygwLCAidW5saW5rIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKKworCS8qIGlmIHRoZXJlIGFyZSBubyBjdXJyZW50IGhvbGRlcnMsIG9yIG5vbmUgdGhhdCBhcmUgd2FpdGluZworCSAqIHRvIGFjcXVpcmUgYSBsb2NrLCB0aGlzIGJhc2ljYWxseSBkZXN0cm95cyBvdXIgbG9ja3Jlcy4gKi8KKwlzdGF0dXMgPSB1c2VyX2RsbV9kZXN0cm95X2xvY2soJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAidW5saW5rICUuKnMsIGVycm9yICVkIGZyb20gZGVzdHJveVxuIiwKKwkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisJc3RhdHVzID0gc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7CitiYWlsOgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGxtZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwKKwkJCSAgICB2b2lkICogZGF0YSwKKwkJCSAgICBpbnQgc2lsZW50KQoreworCXN0cnVjdCBpbm9kZSAqIGlub2RlOworCXN0cnVjdCBkZW50cnkgKiByb290OworCisJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc2ItPnNfbWFnaWMgPSBETE1GU19NQUdJQzsKKwlzYi0+c19vcCA9ICZkbG1mc19vcHM7CisJaW5vZGUgPSBkbG1mc19nZXRfcm9vdF9pbm9kZShzYik7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlpZiAoIXJvb3QpIHsKKwkJaXB1dChpbm9kZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYi0+c19yb290ID0gcm9vdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGRsbWZzX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IGRsbWZzX2ZpbGVfcmVsZWFzZSwKKwkucG9sbAkJPSBkbG1mc19maWxlX3BvbGwsCisJLnJlYWQJCT0gZGxtZnNfZmlsZV9yZWFkLAorCS53cml0ZQkJPSBkbG1mc19maWxlX3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworCS5jcmVhdGUJCT0gZGxtZnNfY3JlYXRlLAorCS5sb29rdXAJCT0gc2ltcGxlX2xvb2t1cCwKKwkudW5saW5rCQk9IGRsbWZzX3VubGluaywKK307CisKKy8qIHRoaXMgd2F5IHdlIGNhbiByZXN0cmljdCBta2RpciB0byBvbmx5IHRoZSB0b3BsZXZlbCBvZiB0aGUgZnMuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zID0geworCS5sb29rdXAJCT0gc2ltcGxlX2xvb2t1cCwKKwkubWtkaXIJCT0gZGxtZnNfbWtkaXIsCisJLnJtZGlyCQk9IHNpbXBsZV9ybWRpciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkbG1mc19vcHMgPSB7CisJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAorCS5hbGxvY19pbm9kZQk9IGRsbWZzX2FsbG9jX2lub2RlLAorCS5kZXN0cm95X2lub2RlCT0gZGxtZnNfZGVzdHJveV9pbm9kZSwKKwkuY2xlYXJfaW5vZGUJPSBkbG1mc19jbGVhcl9pbm9kZSwKKwkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuZ2V0YXR0cgk9IHNpbXBsZV9nZXRhdHRyLAorCS5zZXRhdHRyCT0gZGxtZnNfZmlsZV9zZXRhdHRyLAorfTsKKworc3RhdGljIGludCBkbG1mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJcmV0dXJuIGdldF9zYl9ub2Rldihmc190eXBlLCBmbGFncywgZGF0YSwgZGxtZnNfZmlsbF9zdXBlciwgbW50KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGRsbWZzX2ZzX3R5cGUgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJvY2ZzMl9kbG1mcyIsCisJLmdldF9zYgkJPSBkbG1mc19nZXRfc2IsCisJLmtpbGxfc2IJPSBraWxsX2xpdHRlcl9zdXBlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZGxtZnNfZnModm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCWludCBjbGVhbnVwX2lub2RlID0gMCwgY2xlYW51cF93b3JrZXIgPSAwOworCisJZGxtZnNfcHJpbnRfdmVyc2lvbigpOworCisJc3RhdHVzID0gYmRpX2luaXQoJmRsbWZzX2JhY2tpbmdfZGV2X2luZm8pOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlkbG1mc19pbm9kZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkbG1mc19pbm9kZV9jYWNoZSIsCisJCQkJc2l6ZW9mKHN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlKSwKKwkJCQkwLCAoU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCQlTTEFCX01FTV9TUFJFQUQpLAorCQkJCWRsbWZzX2luaXRfb25jZSk7CisJaWYgKCFkbG1mc19pbm9kZV9jYWNoZSkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCWNsZWFudXBfaW5vZGUgPSAxOworCisJdXNlcl9kbG1fd29ya2VyID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInVzZXJfZGxtIik7CisJaWYgKCF1c2VyX2RsbV93b3JrZXIpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKwljbGVhbnVwX3dvcmtlciA9IDE7CisKKwl1c2VyX2RsbV9zZXRfbG9ja2luZ19wcm90b2NvbCgpOworCXN0YXR1cyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRsbWZzX2ZzX3R5cGUpOworYmFpbDoKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChjbGVhbnVwX2lub2RlKQorCQkJa21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKKwkJaWYgKGNsZWFudXBfd29ya2VyKQorCQkJZGVzdHJveV93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKKwkJYmRpX2Rlc3Ryb3koJmRsbWZzX2JhY2tpbmdfZGV2X2luZm8pOworCX0gZWxzZQorCQlwcmludGsoIk9DRlMyIFVzZXIgRExNIGtlcm5lbCBpbnRlcmZhY2UgbG9hZGVkXG4iKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kbG1mc19mcyh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGxtZnNfZnNfdHlwZSk7CisKKwlmbHVzaF93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh1c2VyX2RsbV93b3JrZXIpOworCisJa21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKKworCWJkaV9kZXN0cm95KCZkbG1mc19iYWNraW5nX2Rldl9pbmZvKTsKK30KKworTU9EVUxFX0FVVEhPUigiT3JhY2xlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGluaXRfZGxtZnNfZnMpCittb2R1bGVfZXhpdChleGl0X2RsbWZzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWZzdmVyLmMgYi9mcy9vY2ZzMi9kbG1mcy9kbG1mc3Zlci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9vY2ZzMi9kbG0vZGxtZnN2ZXIuYwpyZW5hbWUgdG8gZnMvb2NmczIvZGxtZnMvZGxtZnN2ZXIuYwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWZzdmVyLmggYi9mcy9vY2ZzMi9kbG1mcy9kbG1mc3Zlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9vY2ZzMi9kbG0vZGxtZnN2ZXIuaApyZW5hbWUgdG8gZnMvb2NmczIvZGxtZnMvZGxtZnN2ZXIuaApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvdXNlcmRsbS5jIGIvZnMvb2NmczIvZGxtZnMvdXNlcmRsbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTllM2YKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmMKQEAgLTAsMCArMSw2ODggQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiB1c2VyZGxtLmMKKyAqCisgKiBDb2RlIHdoaWNoIGltcGxlbWVudHMgdGhlIGtlcm5lbCBzaWRlIG9mIGEgbWluaW1hbCB1c2Vyc3BhY2UKKyAqIGludGVyZmFjZSB0byBvdXIgRExNLgorICoKKyAqIE1hbnkgb2YgdGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBwYXJlZCBkb3duIHZlcnNpb25zIG9mIGRsbWdsdWUuYworICogZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2luY2x1ZGUgIm9jZnMyX2xvY2tpbmd2ZXIuaCIKKyNpbmNsdWRlICJzdGFja2dsdWUuaCIKKyNpbmNsdWRlICJ1c2VyZGxtLmgiCisKKyNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9ETE1GUworI2luY2x1ZGUgImNsdXN0ZXIvbWFza2xvZy5oIgorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJfbG9ja19yZXMgKnVzZXJfbGtzYl90b19sb2NrX3JlcyhzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsa3NiLCBzdHJ1Y3QgdXNlcl9sb2NrX3JlcywgbF9sa3NiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXNlcl9jaGVja193YWl0X2ZsYWcoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJICAgICAgIGludCBmbGFnKQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJcmV0ID0gbG9ja3Jlcy0+bF9mbGFncyAmIGZsYWc7CisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNlcl93YWl0X29uX2J1c3lfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKKworeworCXdhaXRfZXZlbnQobG9ja3Jlcy0+bF9ldmVudCwKKwkJICAgIXVzZXJfY2hlY2tfd2FpdF9mbGFnKGxvY2tyZXMsIFVTRVJfTE9DS19CVVNZKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX3dhaXRfb25fYmxvY2tlZF9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQorCit7CisJd2FpdF9ldmVudChsb2NrcmVzLT5sX2V2ZW50LAorCQkgICAhdXNlcl9jaGVja193YWl0X2ZsYWcobG9ja3JlcywgVVNFUl9MT0NLX0JMT0NLRUQpKTsKK30KKworLyogSSBoZWFydCBjb250YWluZXJfb2YuLi4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqCitjbHVzdGVyX2Nvbm5lY3Rpb25fZnJvbV91c2VyX2xvY2tyZXMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCit7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOworCisJaXAgPSBjb250YWluZXJfb2YobG9ja3JlcywKKwkJCSAgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUsCisJCQkgIGlwX2xvY2tyZXMpOworCXJldHVybiBpcC0+aXBfY29ubjsKK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqCit1c2VyX2RsbV9pbm9kZV9mcm9tX3VzZXJfbG9ja3JlcyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKK3sKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisKKwlpcCA9IGNvbnRhaW5lcl9vZihsb2NrcmVzLAorCQkJICBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSwKKwkJCSAgaXBfbG9ja3Jlcyk7CisJcmV0dXJuICZpcC0+aXBfdmZzX2lub2RlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNlcl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKK30KKworI2RlZmluZSB1c2VyX2xvZ19kbG1fZXJyb3IoX2Z1bmMsIF9zdGF0LCBfbG9ja3JlcykgZG8gewkJCVwKKwltbG9nKE1MX0VSUk9SLCAiRGxtIGVycm9yICVkIHdoaWxlIGNhbGxpbmcgJXMgb24gIgkJXAorCQkicmVzb3VyY2UgJS4qc1xuIiwgX3N0YXQsIF9mdW5jLAkJCVwKKwkJX2xvY2tyZXMtPmxfbmFtZWxlbiwgX2xvY2tyZXMtPmxfbmFtZSk7IAkJXAorfSB3aGlsZSAoMCkKKworLyogV0FSTklORzogVGhpcyBmdW5jdGlvbiBsaXZlcyBpbiBhIHdvcmxkIHdoZXJlIHRoZSBvbmx5IHRocmVlIGxvY2sKKyAqIGxldmVscyBhcmUgRVgsIFBSLCBhbmQgTkwuIEl0ICp3aWxsKiBoYXZlIHRvIGJlIGFkanVzdGVkIHdoZW4gbW9yZQorICogbG9jayB0eXBlcyBhcmUgYWRkZWQuICovCitzdGF0aWMgaW5saW5lIGludCB1c2VyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwoaW50IGxldmVsKQoreworCWludCBuZXdfbGV2ZWwgPSBETE1fTE9DS19FWDsKKworCWlmIChsZXZlbCA9PSBETE1fTE9DS19FWCkKKwkJbmV3X2xldmVsID0gRExNX0xPQ0tfTkw7CisJZWxzZSBpZiAobGV2ZWwgPT0gRExNX0xPQ0tfUFIpCisJCW5ld19sZXZlbCA9IERMTV9MT0NLX1BSOworCXJldHVybiBuZXdfbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfYXN0KHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3sKKwlzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcyA9IHVzZXJfbGtzYl90b19sb2NrX3Jlcyhsa3NiKTsKKwlpbnQgc3RhdHVzOworCisJbWxvZyhNTF9CQVNUUywgIkFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlLipzLCBsZXZlbCAlZCA9PiAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2xldmVsLAorCSAgICAgbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQpOworCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJc3RhdHVzID0gb2NmczJfZGxtX2xvY2tfc3RhdHVzKCZsb2NrcmVzLT5sX2xrc2IpOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZyhNTF9FUlJPUiwgImxrc2Igc3RhdHVzIHZhbHVlIG9mICV1IG9uIGxvY2tyZXMgJS4qc1xuIiwKKwkJICAgICBzdGF0dXMsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gRExNX0xPQ0tfSVYsCisJCQkiTG9ja3JlcyAlLipzLCByZXF1ZXN0ZWQgaXZtb2RlLiBmbGFncyAweCV4XG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOworCisJLyogd2UncmUgZG93bmNvbnZlcnRpbmcuICovCisJaWYgKGxvY2tyZXMtPmxfcmVxdWVzdGVkIDwgbG9ja3Jlcy0+bF9sZXZlbCkgeworCQlpZiAobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPD0KKwkJICAgIHVzZXJfaGlnaGVzdF9jb21wYXRfbG9ja19sZXZlbChsb2NrcmVzLT5sX2Jsb2NraW5nKSkgeworCQkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IERMTV9MT0NLX05MOworCQkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0JMT0NLRUQ7CisJCX0KKwl9CisKKwlsb2NrcmVzLT5sX2xldmVsID0gbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQ7CisJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBETE1fTE9DS19JVjsKKwlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19BVFRBQ0hFRDsKKwlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKKworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWlub2RlID0gdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7CisJaWYgKCFpZ3JhYihpbm9kZSkpCisJCUJVRygpOworfQorCitzdGF0aWMgdm9pZCB1c2VyX2RsbV91bmJsb2NrX2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIHZvaWQgX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfUVVFVUVEKSkgeworCQl1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihsb2NrcmVzKTsKKworCQlJTklUX1dPUksoJmxvY2tyZXMtPmxfd29yaywgdXNlcl9kbG1fdW5ibG9ja19sb2NrKTsKKworCQlxdWV1ZV93b3JrKHVzZXJfZGxtX3dvcmtlciwgJmxvY2tyZXMtPmxfd29yayk7CisJCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX1FVRVVFRDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fdXNlcl9kbG1fY29uZF9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCWludCBxdWV1ZSA9IDA7CisKKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGxvY2tyZXMtPmxfYmxvY2tpbmcpIHsKKwljYXNlIERMTV9MT0NLX0VYOgorCQlpZiAoIWxvY2tyZXMtPmxfZXhfaG9sZGVycyAmJiAhbG9ja3Jlcy0+bF9yb19ob2xkZXJzKQorCQkJcXVldWUgPSAxOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX1BSOgorCQlpZiAoIWxvY2tyZXMtPmxfZXhfaG9sZGVycykKKwkJCXF1ZXVlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKHF1ZXVlKQorCQlfX3VzZXJfZGxtX3F1ZXVlX2xvY2tyZXMobG9ja3Jlcyk7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfYmFzdChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcyA9IHVzZXJfbGtzYl90b19sb2NrX3Jlcyhsa3NiKTsKKworCW1sb2coTUxfQkFTVFMsICJCQVNUIGZpcmVkIGZvciBsb2NrcmVzICUuKnMsIGJsb2NraW5nICVkLCBsZXZlbCAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsZXZlbCwgbG9ja3Jlcy0+bF9sZXZlbCk7CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQkxPQ0tFRDsKKwlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2Jsb2NraW5nKQorCQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gbGV2ZWw7CisKKwlfX3VzZXJfZGxtX3F1ZXVlX2xvY2tyZXMobG9ja3Jlcyk7CisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKK30KKworc3RhdGljIHZvaWQgdXNlcl91bmxvY2tfYXN0KHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcyA9IHVzZXJfbGtzYl90b19sb2NrX3Jlcyhsa3NiKTsKKworCW1sb2coTUxfQkFTVFMsICJVTkxPQ0sgQVNUIGZpcmVkIGZvciBsb2NrcmVzICUuKnMsIGZsYWdzIDB4JXhcbiIsCisJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKKwlpZiAoc3RhdHVzKQorCQltbG9nKE1MX0VSUk9SLCAiZGxtIHJldHVybnMgc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCS8qIFRoZSB0ZWFyZG93biBmbGFnIGdldHMgc2V0IGVhcmx5IGR1cmluZyB0aGUgdW5sb2NrIHByb2Nlc3MsCisJICogc28gdGVzdCB0aGUgY2FuY2VsIGZsYWcgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBhc3QgaXNuJ3QKKwkgKiBmb3IgYSBjb25jdXJyZW50IGNhbmNlbC4gKi8KKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTgorCSAgICAmJiAhKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSkgeworCQlsb2NrcmVzLT5sX2xldmVsID0gRExNX0xPQ0tfSVY7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7CisJCS8qIFdlIHRyaWVkIHRvIGNhbmNlbCBhIGNvbnZlcnQgcmVxdWVzdCwgYnV0IGl0IHdhcworCQkgKiBhbHJlYWR5IGdyYW50ZWQuIERvbid0IGNsZWFyIHRoZSBidXN5IGZsYWcgLSB0aGUKKwkJICogYXN0IHNob3VsZCd2ZSBkb25lIHRoaXMgYWxyZWFkeS4gKi8KKwkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKKwkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKKwkJZ290byBvdXRfbm9jbGVhcjsKKwl9IGVsc2UgeworCQlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpOworCQkvKiBDYW5jZWwgc3VjY2VlZGVkLCB3ZSB3YW50IHRvIHJlLXF1ZXVlICovCisJCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gRExNX0xPQ0tfSVY7IC8qIGNhbmNlbCBhbgorCQkJCQkJICAgICogdXBjb252ZXJ0CisJCQkJCQkgICAgKiByZXF1ZXN0LiAqLworCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOworCQkvKiB3ZSB3YW50IHRoZSB1bmJsb2NrIHRocmVhZCB0byBsb29rIGF0IGl0IGFnYWluCisJCSAqIG5vdy4gKi8KKwkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkKKwkJCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwl9CisKKwlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKK291dF9ub2NsZWFyOgorCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSB1c2VyZGxtZnMgbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uLgorICoKKyAqIFNlZSBmcy9vY2ZzMi9kbG1nbHVlLmMgZm9yIG1vcmUgZGV0YWlscyBvbiBsb2NraW5nIHZlcnNpb25zLgorICovCitzdGF0aWMgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgdXNlcl9kbG1fbHByb3RvID0geworCS5scF9tYXhfdmVyc2lvbiA9IHsKKwkJLnB2X21ham9yID0gT0NGUzJfTE9DS0lOR19QUk9UT0NPTF9NQUpPUiwKKwkJLnB2X21pbm9yID0gT0NGUzJfTE9DS0lOR19QUk9UT0NPTF9NSU5PUiwKKwl9LAorCS5scF9sb2NrX2FzdAkJPSB1c2VyX2FzdCwKKwkubHBfYmxvY2tpbmdfYXN0CT0gdXNlcl9iYXN0LAorCS5scF91bmxvY2tfYXN0CQk9IHVzZXJfdW5sb2NrX2FzdCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9kcm9wX2lub2RlX3JlZihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWlub2RlID0gdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7CisJaXB1dChpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfZGxtX3VuYmxvY2tfbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IG5ld19sZXZlbCwgc3RhdHVzOworCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2VyX2xvY2tfcmVzLCBsX3dvcmspOworCXN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4gPQorCQljbHVzdGVyX2Nvbm5lY3Rpb25fZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7CisKKwltbG9nKDAsICJsb2NrcmVzICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCW1sb2dfYnVnX29uX21zZyghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfUVVFVUVEKSwKKwkJCSJMb2NrcmVzICUuKnMsIGZsYWdzIDB4JXhcbiIsCisJCQlsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKKwkvKiBub3RpY2UgdGhhdCB3ZSBkb24ndCBjbGVhciBVU0VSX0xPQ0tfQkxPQ0tFRCBoZXJlLiBJZiBpdCdzCisJICogc2V0LCB3ZSB3YW50IHVzZXJfYXN0IGNsZWFyIGl0LiAqLworCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19RVUVVRUQ7CisKKwkvKiBJdCdzIHZhbGlkIHRvIGdldCBoZXJlIGFuZCBubyBsb25nZXIgYmUgYmxvY2tlZCAtIGlmIHdlIGdldAorCSAqIHNldmVyYWwgYmFzdHMgaW4gYSByb3csIHdlIG1pZ2h0IGJlIHF1ZXVlZCBieSB0aGUgZmlyc3QKKwkgKiBvbmUsIHRoZSB1bmJsb2NrIHRocmVhZCBtaWdodCBydW4gYW5kIGNsZWFyIHRoZSBxdWV1ZWQKKwkgKiBmbGFnLCBhbmQgZmluYWxseSB3ZSBtaWdodCBnZXQgYW5vdGhlciBiYXN0IHdoaWNoIHJlLXF1ZXVlcworCSAqIHVzIGJlZm9yZSBvdXIgYXN0IGZvciB0aGUgZG93bmNvbnZlcnQgaXMgY2FsbGVkLiAqLworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkpIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcyBVU0VSX0xPQ0tfQkxPQ0tFRFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSk7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlnb3RvIGRyb3BfcmVmOworCX0KKworCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX1RFQVJET1dOKSB7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICUuKnMgVVNFUl9MT0NLX0lOX1RFQVJET1dOXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgeworCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpIHsKKwkJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICUuKnMgVVNFUl9MT0NLX0lOX0NBTkNFTFxuIiwKKwkJCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCQlnb3RvIGRyb3BfcmVmOworCQl9CisKKwkJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fQ0FOQ0VMOworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCQlzdGF0dXMgPSBvY2ZzMl9kbG1fdW5sb2NrKGNvbm4sICZsb2NrcmVzLT5sX2xrc2IsCisJCQkJCSAgRExNX0xLRl9DQU5DRUwpOworCQlpZiAoc3RhdHVzKQorCQkJdXNlcl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKKwkJZ290byBkcm9wX3JlZjsKKwl9CisKKwkvKiBJZiB0aGVyZSBhcmUgc3RpbGwgaW5jb21wYXQgaG9sZGVycywgd2UgY2FuIGV4aXQgc2FmZWx5CisJICogd2l0aG91dCB3b3JyeWluZyBhYm91dCByZS1xdWV1ZWluZyB0aGlzIGxvY2sgYXMgdGhhdCB3aWxsCisJICogaGFwcGVuIG9uIHRoZSBsYXN0IGNhbGwgdG8gdXNlcl9jbHVzdGVyX3VubG9jay4gKi8KKwlpZiAoKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gRExNX0xPQ0tfRVgpCisJICAgICYmIChsb2NrcmVzLT5sX2V4X2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9yb19ob2xkZXJzKSkgeworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcywgRVgvUFIgSG9sZGVycyAldSwldVxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwKKwkJICAgICBsb2NrcmVzLT5sX2V4X2hvbGRlcnMsIGxvY2tyZXMtPmxfcm9faG9sZGVycyk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCisJaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IERMTV9MT0NLX1BSKQorCSAgICAmJiBsb2NrcmVzLT5sX2V4X2hvbGRlcnMpIHsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICUuKnMsIEVYIEhvbGRlcnMgJXVcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsCisJCSAgICAgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKTsKKwkJZ290byBkcm9wX3JlZjsKKwl9CisKKwkvKiB5YXksIHdlIGNhbiBkb3duY29udmVydCBub3cuICovCisJbmV3X2xldmVsID0gdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpOworCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbmV3X2xldmVsOworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7CisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcywgZG93bmNvbnZlcnQgJWQgPT4gJWRcbiIsCisJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9sZXZlbCwgbmV3X2xldmVsKTsKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCS8qIG5lZWQgbG9jayBkb3duY29udmVydCByZXF1ZXN0IG5vdy4uLiAqLworCXN0YXR1cyA9IG9jZnMyX2RsbV9sb2NrKGNvbm4sIG5ld19sZXZlbCwgJmxvY2tyZXMtPmxfbGtzYiwKKwkJCQlETE1fTEtGX0NPTlZFUlR8RExNX0xLRl9WQUxCTEssCisJCQkJbG9ja3Jlcy0+bF9uYW1lLAorCQkJCWxvY2tyZXMtPmxfbmFtZWxlbik7CisJaWYgKHN0YXR1cykgeworCQl1c2VyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV9sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKKwkJdXNlcl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMpOworCX0KKworZHJvcF9yZWY6CisJdXNlcl9kbG1fZHJvcF9pbm9kZV9yZWYobG9ja3Jlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9pbmNfaG9sZGVycyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkJaW50IGxldmVsKQoreworCXN3aXRjaChsZXZlbCkgeworCWNhc2UgRExNX0xPQ0tfRVg6CisJCWxvY2tyZXMtPmxfZXhfaG9sZGVycysrOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX1BSOgorCQlsb2NrcmVzLT5sX3JvX2hvbGRlcnMrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCisvKiBwcmVkaWN0IHdoYXQgbG9jayBsZXZlbCB3ZSdsbCBiZSBkcm9wcGluZyBkb3duIHRvIG9uIGJlaGFsZgorICogb2YgYW5vdGhlciBub2RlLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnRseSB3YW50ZWQKKyAqIGxldmVsIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGl0LiAqLworc3RhdGljIGlubGluZSBpbnQKK3VzZXJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkgIGludCB3YW50ZWQpCit7CisJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSk7CisKKwlyZXR1cm4gd2FudGVkIDw9IHVzZXJfaGlnaGVzdF9jb21wYXRfbG9ja19sZXZlbChsb2NrcmVzLT5sX2Jsb2NraW5nKTsKK30KKworaW50IHVzZXJfZGxtX2NsdXN0ZXJfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCSAgaW50IGxldmVsLAorCQkJICBpbnQgbGttX2ZsYWdzKQoreworCWludCBzdGF0dXMsIGxvY2FsX2ZsYWdzOworCXN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4gPQorCQljbHVzdGVyX2Nvbm5lY3Rpb25fZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7CisKKwlpZiAobGV2ZWwgIT0gRExNX0xPQ0tfRVggJiYKKwkgICAgbGV2ZWwgIT0gRExNX0xPQ0tfUFIpIHsKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2tyZXMgJS4qczogaW52YWxpZCByZXF1ZXN0IVxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlLipzLCBsZXZlbCAlZCwgZmxhZ3MgPSAweCV4XG4iLAorCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsIGxldmVsLCBsa21fZmxhZ3MpOworCithZ2FpbjoKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJc3RhdHVzID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGJhaWw7CisJfQorCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJLyogV2Ugb25seSBjb21wYXJlIGFnYWluc3QgdGhlIGN1cnJlbnRseSBncmFudGVkIGxldmVsCisJICogaGVyZS4gSWYgdGhlIGxvY2sgaXMgYmxvY2tlZCB3YWl0aW5nIG9uIGEgZG93bmNvbnZlcnQsCisJICogd2UnbGwgZ2V0IGNhdWdodCBiZWxvdy4gKi8KKwlpZiAoKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgJiYKKwkgICAgKGxldmVsID4gbG9ja3Jlcy0+bF9sZXZlbCkpIHsKKwkJLyogaXMgc29tZW9uZSBzaXR0aW5nIGluIGRsbV9sb2NrPyBJZiBzbywgd2FpdCBvbgorCQkgKiB0aGVtLiAqLworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCQl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOworCQlnb3RvIGFnYWluOworCX0KKworCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSAmJgorCSAgICAoIXVzZXJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzLCBsZXZlbCkpKSB7CisJCS8qIGlzIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBibG9ja2VkIG9uIGJlaGFsZiBvZgorCQkgKiBhbm90aGVyIG5vZGUgKi8KKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwkJdXNlcl93YWl0X29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2xldmVsKSB7CisJCWxvY2FsX2ZsYWdzID0gbGttX2ZsYWdzIHwgRExNX0xLRl9WQUxCTEs7CisJCWlmIChsb2NrcmVzLT5sX2xldmVsICE9IERMTV9MT0NLX0lWKQorCQkJbG9jYWxfZmxhZ3MgfD0gRExNX0xLRl9DT05WRVJUOworCisJCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbGV2ZWw7CisJCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJCUJVR19PTihsZXZlbCA9PSBETE1fTE9DS19JVik7CisJCUJVR19PTihsZXZlbCA9PSBETE1fTE9DS19OTCk7CisKKwkJLyogY2FsbCBkbG1fbG9jayB0byB1cGdyYWRlIGxvY2sgbm93ICovCisJCXN0YXR1cyA9IG9jZnMyX2RsbV9sb2NrKGNvbm4sIGxldmVsLCAmbG9ja3Jlcy0+bF9sa3NiLAorCQkJCQlsb2NhbF9mbGFncywgbG9ja3Jlcy0+bF9uYW1lLAorCQkJCQlsb2NrcmVzLT5sX25hbWVsZW4pOworCQlpZiAoc3RhdHVzKSB7CisJCQlpZiAoKGxrbV9mbGFncyAmIERMTV9MS0ZfTk9RVUVVRSkgJiYKKwkJCSAgICAoc3RhdHVzICE9IC1FQUdBSU4pKQorCQkJCXVzZXJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX2xvY2siLAorCQkJCQkJICAgc3RhdHVzLCBsb2NrcmVzKTsKKwkJCXVzZXJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihsb2NrcmVzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7CisJCWdvdG8gYWdhaW47CisJfQorCisJdXNlcl9kbG1faW5jX2hvbGRlcnMobG9ja3JlcywgbGV2ZWwpOworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJc3RhdHVzID0gMDsKK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2RlY19ob2xkZXJzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQlpbnQgbGV2ZWwpCit7CisJc3dpdGNoKGxldmVsKSB7CisJY2FzZSBETE1fTE9DS19FWDoKKwkJQlVHX09OKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpOworCQlsb2NrcmVzLT5sX2V4X2hvbGRlcnMtLTsKKwkJYnJlYWs7CisJY2FzZSBETE1fTE9DS19QUjoKKwkJQlVHX09OKCFsb2NrcmVzLT5sX3JvX2hvbGRlcnMpOworCQlsb2NrcmVzLT5sX3JvX2hvbGRlcnMtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCit2b2lkIHVzZXJfZGxtX2NsdXN0ZXJfdW5sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJICAgICBpbnQgbGV2ZWwpCit7CisJaWYgKGxldmVsICE9IERMTV9MT0NLX0VYICYmCisJICAgIGxldmVsICE9IERMTV9MT0NLX1BSKSB7CisJCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICUuKnM6IGludmFsaWQgcmVxdWVzdCFcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCXVzZXJfZGxtX2RlY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKKwlfX3VzZXJfZGxtX2NvbmRfcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKK30KKwordm9pZCB1c2VyX2RsbV93cml0ZV9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWNvbnN0IGNoYXIgKnZhbCwKKwkJCXVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSAmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXM7CisJY2hhciAqbHZiOworCisJQlVHX09OKGxlbiA+IERMTV9MVkJfTEVOKTsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCUJVR19PTihsb2NrcmVzLT5sX2xldmVsIDwgRExNX0xPQ0tfRVgpOworCWx2YiA9IG9jZnMyX2RsbV9sdmIoJmxvY2tyZXMtPmxfbGtzYik7CisJbWVtY3B5KGx2YiwgdmFsLCBsZW4pOworCisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Cit9CisKK3NzaXplX3QgdXNlcl9kbG1fcmVhZF9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgY2hhciAqdmFsLAorCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzOworCWNoYXIgKmx2YjsKKwlzc2l6ZV90IHJldCA9IGxlbjsKKworCUJVR19PTihsZW4gPiBETE1fTFZCX0xFTik7CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwlCVUdfT04obG9ja3Jlcy0+bF9sZXZlbCA8IERMTV9MT0NLX1BSKTsKKwlpZiAob2NmczJfZGxtX2x2Yl92YWxpZCgmbG9ja3Jlcy0+bF9sa3NiKSkgeworCQlsdmIgPSBvY2ZzMl9kbG1fbHZiKCZsb2NrcmVzLT5sX2xrc2IpOworCQltZW1jcHkodmFsLCBsdmIsIGxlbik7CisJfSBlbHNlCisJCXJldCA9IDA7CisKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHVzZXJfZGxtX2xvY2tfcmVzX2luaXQoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCW1lbXNldChsb2NrcmVzLCAwLCBzaXplb2YoKmxvY2tyZXMpKTsKKworCXNwaW5fbG9ja19pbml0KCZsb2NrcmVzLT5sX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxvY2tyZXMtPmxfZXZlbnQpOworCWxvY2tyZXMtPmxfbGV2ZWwgPSBETE1fTE9DS19JVjsKKwlsb2NrcmVzLT5sX3JlcXVlc3RlZCA9IERMTV9MT0NLX0lWOworCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBETE1fTE9DS19JVjsKKworCS8qIHNob3VsZCBoYXZlIGJlZW4gY2hlY2tlZCBiZWZvcmUgZ2V0dGluZyBoZXJlLiAqLworCUJVR19PTihkZW50cnktPmRfbmFtZS5sZW4gPj0gVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOKTsKKworCW1lbWNweShsb2NrcmVzLT5sX25hbWUsCisJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbik7CisJbG9ja3Jlcy0+bF9uYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOworfQorCitpbnQgdXNlcl9kbG1fZGVzdHJveV9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCWludCBzdGF0dXMgPSAtRUJVU1k7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiA9CisJCWNsdXN0ZXJfY29ubmVjdGlvbl9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKKworCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgeworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fVEVBUkRPV047CisKKwl3aGlsZSAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7CisKKwkJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCX0KKworCWlmIChsb2NrcmVzLT5sX3JvX2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlnb3RvIGJhaWw7CisJfQorCisJc3RhdHVzID0gMDsKKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0FUVEFDSEVEKSkgeworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJZ290byBiYWlsOworCX0KKworCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19BVFRBQ0hFRDsKKwlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19CVVNZOworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJc3RhdHVzID0gb2NmczJfZGxtX3VubG9jayhjb25uLCAmbG9ja3Jlcy0+bF9sa3NiLCBETE1fTEtGX1ZBTEJMSyk7CisJaWYgKHN0YXR1cykgeworCQl1c2VyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV91bmxvY2siLCBzdGF0dXMsIGxvY2tyZXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJdXNlcl93YWl0X29uX2J1c3lfbG9jayhsb2NrcmVzKTsKKworCXN0YXR1cyA9IDA7CitiYWlsOgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfZGxtX3JlY292ZXJ5X2hhbmRsZXJfbm9vcChpbnQgbm9kZV9udW0sCisJCQkJCSAgIHZvaWQgKnJlY292ZXJ5X2RhdGEpCit7CisJLyogV2UgaWdub3JlIHJlY292ZXJ5IGV2ZW50cyAqLworCXJldHVybjsKK30KKwordm9pZCB1c2VyX2RsbV9zZXRfbG9ja2luZ19wcm90b2NvbCh2b2lkKQoreworCW9jZnMyX3N0YWNrX2dsdWVfc2V0X21heF9wcm90b192ZXJzaW9uKCZ1c2VyX2RsbV9scHJvdG8ubHBfbWF4X3ZlcnNpb24pOworfQorCitzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICp1c2VyX2RsbV9yZWdpc3RlcihzdHJ1Y3QgcXN0ciAqbmFtZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubjsKKworCXJjID0gb2NmczJfY2x1c3Rlcl9jb25uZWN0X2Fnbm9zdGljKG5hbWUtPm5hbWUsIG5hbWUtPmxlbiwKKwkJCQkJICAgICZ1c2VyX2RsbV9scHJvdG8sCisJCQkJCSAgICB1c2VyX2RsbV9yZWNvdmVyeV9oYW5kbGVyX25vb3AsCisJCQkJCSAgICBOVUxMLCAmY29ubik7CisJaWYgKHJjKQorCQltbG9nX2Vycm5vKHJjKTsKKworCXJldHVybiByYyA/IEVSUl9QVFIocmMpIDogY29ubjsKK30KKwordm9pZCB1c2VyX2RsbV91bnJlZ2lzdGVyKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KGNvbm4sIDApOworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvdXNlcmRsbS5oIGIvZnMvb2NmczIvZGxtZnMvdXNlcmRsbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDJkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiB1c2VyZGxtLmgKKyAqCisgKiBVc2Vyc3BhY2UgZGxtIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIFVTRVJETE1fSAorI2RlZmluZSBVU0VSRExNX0gKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyogdXNlcl9sb2NrX3Jlcy0+bF9mbGFncyBmbGFncy4gKi8KKyNkZWZpbmUgVVNFUl9MT0NLX0FUVEFDSEVEICAgICAgKDB4MDAwMDAwMDEpIC8qIHdlIGhhdmUgaW5pdGlhbGl6ZWQKKwkJCQkJICAgICAgICogdGhlIGx2YiAqLworI2RlZmluZSBVU0VSX0xPQ0tfQlVTWSAgICAgICAgICAoMHgwMDAwMDAwMikgLyogd2UgYXJlIGN1cnJlbnRseSBpbgorCQkJCQkgICAgICAgKiBkbG1fbG9jayAqLworI2RlZmluZSBVU0VSX0xPQ0tfQkxPQ0tFRCAgICAgICAoMHgwMDAwMDAwNCkgLyogYmxvY2tlZCB3YWl0aW5nIHRvCisJCQkJCSAgICAgICogZG93bmNvbnZlcnQqLworI2RlZmluZSBVU0VSX0xPQ0tfSU5fVEVBUkRPV04gICAoMHgwMDAwMDAwOCkgLyogd2UncmUgY3VycmVudGx5CisJCQkJCSAgICAgICogZGVzdHJveWluZyB0aGlzCisJCQkJCSAgICAgICogbG9jay4gKi8KKyNkZWZpbmUgVVNFUl9MT0NLX1FVRVVFRCAgICAgICAgKDB4MDAwMDAwMTApIC8qIGxvY2sgaXMgb24gdGhlCisJCQkJCSAgICAgICogd29ya3F1ZXVlICovCisjZGVmaW5lIFVTRVJfTE9DS19JTl9DQU5DRUwgICAgICgweDAwMDAwMDIwKQorCitzdHJ1Y3QgdXNlcl9sb2NrX3JlcyB7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgIGxfbG9jazsKKworCWludCAgICAgICAgICAgICAgICAgICAgICBsX2ZsYWdzOworCisjZGVmaW5lIFVTRVJfRExNX0xPQ0tfSURfTUFYX0xFTiAgMzIKKwljaGFyICAgICAgICAgICAgICAgICAgICAgbF9uYW1lW1VTRVJfRExNX0xPQ0tfSURfTUFYX0xFTl07CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGxfbmFtZWxlbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9sZXZlbDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbF9yb19ob2xkZXJzOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICBsX2V4X2hvbGRlcnM7CisJc3RydWN0IG9jZnMyX2RsbV9sa3NiICAgIGxfbGtzYjsKKworCWludCAgICAgICAgICAgICAgICAgICAgICBsX3JlcXVlc3RlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9ibG9ja2luZzsKKworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICBsX2V2ZW50OworCisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgIGxfd29yazsKK307CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdXNlcl9kbG1fd29ya2VyOworCit2b2lkIHVzZXJfZGxtX2xvY2tfcmVzX2luaXQoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK2ludCB1c2VyX2RsbV9kZXN0cm95X2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpOworaW50IHVzZXJfZGxtX2NsdXN0ZXJfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCSAgaW50IGxldmVsLAorCQkJICBpbnQgbGttX2ZsYWdzKTsKK3ZvaWQgdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkgICAgIGludCBsZXZlbCk7Cit2b2lkIHVzZXJfZGxtX3dyaXRlX2x2YihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJY29uc3QgY2hhciAqdmFsLAorCQkJdW5zaWduZWQgaW50IGxlbik7Citzc2l6ZV90IHVzZXJfZGxtX3JlYWRfbHZiKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgIGNoYXIgKnZhbCwKKwkJCSAgdW5zaWduZWQgaW50IGxlbik7CitzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICp1c2VyX2RsbV9yZWdpc3RlcihzdHJ1Y3QgcXN0ciAqbmFtZSk7Cit2b2lkIHVzZXJfZGxtX3VucmVnaXN0ZXIoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHVzZXJfZGxtX3NldF9sb2NraW5nX3Byb3RvY29sKHZvaWQpOworCitzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSB7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbgkqaXBfY29ubjsKKworCXN0cnVjdCB1c2VyX2xvY2tfcmVzIGlwX2xvY2tyZXM7IC8qIHVudXNlZCBmb3IgZGlyZWN0b3JpZXMuICovCisJc3RydWN0IGlub2RlICAgICAgICAgKmlwX3BhcmVudDsKKworCXN0cnVjdCBpbm9kZSAgICAgICAgIGlwX3Zmc19pbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKgorRExNRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworICAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGlub2RlLAorCQkJICAgIHN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlLAorCQkJICAgIGlwX3Zmc19pbm9kZSk7Cit9CisKK3N0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgeworCWludCAgICAgICAgICAgICAgICAgIGZwX2xvY2tfbGV2ZWw7Cit9OworCisjZGVmaW5lIERMTUZTX01BR0lDCTB4NzZhOWY0MjUKKworI2VuZGlmIC8qIFVTRVJETE1fSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IGUwNDQwMTkuLjgyOTg2MDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTI5Nyw2ICsyOTcsMTEgQEAKIAkJbG9ja3Jlcy0+bF90eXBlID09IE9DRlMyX0xPQ0tfVFlQRV9PUEVOOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqb2NmczJfbGtzYl90b19sb2NrX3JlcyhzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsa3NiLCBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMsIGxfbGtzYik7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpvY2ZzMl9sb2NrX3Jlc19pbm9kZShzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCiB7CiAJQlVHX09OKCFvY2ZzMl9pc19pbm9kZV9sb2NrKGxvY2tyZXMpKTsKQEAgLTkyNyw2ICs5MzIsMTAgQEAKIAkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IGxldmVsOwogCX0KIAorCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBibG9jayAlZCwgbGV2ZWwgJWQsIGxfYmxvY2sgJWQsIGR3biAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsIGxvY2tyZXMtPmxfbGV2ZWwsIGxvY2tyZXMtPmxfYmxvY2tpbmcsCisJICAgICBuZWVkc19kb3duY29udmVydCk7CisKIAlpZiAobmVlZHNfZG93bmNvbnZlcnQpCiAJCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CTE9DS0VEKTsKIApAQCAtMTA0MCwxOCArMTA0OSwxNyBAQAogCXJldHVybiBsb2NrcmVzLT5sX3BlbmRpbmdfZ2VuOwogfQogCi0KLXN0YXRpYyB2b2lkIG9jZnMyX2Jsb2NraW5nX2FzdCh2b2lkICpvcGFxdWUsIGludCBsZXZlbCkKK3N0YXRpYyB2b2lkIG9jZnMyX2Jsb2NraW5nX2FzdChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsIGludCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBvcGFxdWU7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gb2NmczJfbGtzYl90b19sb2NrX3Jlcyhsa3NiKTsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IG9jZnMyX2dldF9sb2NrcmVzX29zYihsb2NrcmVzKTsKIAlpbnQgbmVlZHNfZG93bmNvbnZlcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihsZXZlbCA8PSBETE1fTE9DS19OTCk7CiAKLQltbG9nKDAsICJCQVNUIGZpcmVkIGZvciBsb2NrcmVzICVzLCBibG9ja2luZyAlZCwgbGV2ZWwgJWQgdHlwZSAlc1xuIiwKLQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsIGxvY2tyZXMtPmxfbGV2ZWwsCisJbWxvZyhNTF9CQVNUUywgIkJBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJXMsIGJsb2NraW5nICVkLCBsZXZlbCAlZCwgIgorCSAgICAgInR5cGUgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsIGxvY2tyZXMtPmxfbGV2ZWwsCiAJICAgICBvY2ZzMl9sb2NrX3R5cGVfc3RyaW5nKGxvY2tyZXMtPmxfdHlwZSkpOwogCiAJLyoKQEAgLTEwNzIsOSArMTA4MCw5IEBACiAJb2NmczJfd2FrZV9kb3duY29udmVydF90aHJlYWQob3NiKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfbG9ja2luZ19hc3Qodm9pZCAqb3BhcXVlKQorc3RhdGljIHZvaWQgb2NmczJfbG9ja2luZ19hc3Qoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBvY2ZzMl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gb2NmczJfZ2V0X2xvY2tyZXNfb3NiKGxvY2tyZXMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKQEAgLTEwOTUsNiArMTEwMywxMCBAQAogCQlyZXR1cm47CiAJfQogCisJbWxvZyhNTF9CQVNUUywgIkFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlcywgYWN0aW9uICVkLCB1bmxvY2sgJWQsICIKKwkgICAgICJsZXZlbCAlZCA9PiAlZFxuIiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2FjdGlvbiwKKwkgICAgIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbiwgbG9ja3Jlcy0+bF9sZXZlbCwgbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQpOworCiAJc3dpdGNoKGxvY2tyZXMtPmxfYWN0aW9uKSB7CiAJY2FzZSBPQ0ZTMl9BU1RfQVRUQUNIOgogCQlvY2ZzMl9nZW5lcmljX2hhbmRsZV9hdHRhY2hfYWN0aW9uKGxvY2tyZXMpOwpAQCAtMTEwNyw4ICsxMTE5LDggQEAKIAkJb2NmczJfZ2VuZXJpY19oYW5kbGVfZG93bmNvbnZlcnRfYWN0aW9uKGxvY2tyZXMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlczogYXN0IGZpcmVkIHdpdGggaW52YWxpZCBhY3Rpb246ICV1ICIKLQkJICAgICAibG9ja3JlcyBmbGFncyA9IDB4JWx4LCB1bmxvY2sgYWN0aW9uOiAldVxuIiwKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2tyZXMgJXM6IEFTVCBmaXJlZCB3aXRoIGludmFsaWQgYWN0aW9uOiAldSwgIgorCQkgICAgICJmbGFncyAweCVseCwgdW5sb2NrOiAldVxuIiwKIAkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfYWN0aW9uLCBsb2NrcmVzLT5sX2ZsYWdzLAogCQkgICAgIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbik7CiAJCUJVRygpOwpAQCAtMTEzNCw2ICsxMTQ2LDg4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX3VubG9ja19hc3Qoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gb2NmczJfbGtzYl90b19sb2NrX3Jlcyhsa3NiKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWxvZ19lbnRyeV92b2lkKCk7CisKKwltbG9nKE1MX0JBU1RTLCAiVU5MT0NLIEFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlcywgYWN0aW9uID0gJWRcbiIsCisJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJaWYgKGVycm9yKSB7CisJCW1sb2coTUxfRVJST1IsICJEbG0gcGFzc2VzIGVycm9yICVkIGZvciBsb2NrICVzLCAiCisJCSAgICAgInVubG9ja19hY3Rpb24gJWRcbiIsIGVycm9yLCBsb2NrcmVzLT5sX25hbWUsCisJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJCW1sb2dfZXhpdF92b2lkKCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2gobG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKSB7CisJY2FzZSBPQ0ZTMl9VTkxPQ0tfQ0FOQ0VMX0NPTlZFUlQ6CisJCW1sb2coMCwgIkNhbmNlbCBjb252ZXJ0IHN1Y2Nlc3MgZm9yICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOworCQlsb2NrcmVzLT5sX2FjdGlvbiA9IE9DRlMyX0FTVF9JTlZBTElEOworCQkvKiBEb3duY29udmVydCB0aHJlYWQgbWF5IGhhdmUgcmVxdWV1ZWQgdGhpcyBsb2NrLCB3ZQorCQkgKiBuZWVkIHRvIHdha2UgaXQuICovCisJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19CTE9DS0VEKQorCQkJb2NmczJfd2FrZV9kb3duY29udmVydF90aHJlYWQob2NmczJfZ2V0X2xvY2tyZXNfb3NiKGxvY2tyZXMpKTsKKwkJYnJlYWs7CisJY2FzZSBPQ0ZTMl9VTkxPQ0tfRFJPUF9MT0NLOgorCQlsb2NrcmVzLT5sX2xldmVsID0gRExNX0xPQ0tfSVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWxvY2tyZXNfY2xlYXJfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CVVNZKTsKKwlsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24gPSBPQ0ZTMl9VTkxPQ0tfSU5WQUxJRDsKKwl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKworCW1sb2dfZXhpdF92b2lkKCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgcHJvdG9jb2wuICBJdCBwcm92aWRlcyB0aGUgbG9jayBoYW5kbGluZworICogaG9va3MgZm9yIHRoZSB1bmRlcmx5aW5nIERMTS4gIEl0IGhhcyBhIG1heGltdW0gdmVyc2lvbiBudW1iZXIuCisgKiBUaGUgdmVyc2lvbiBudW1iZXIgYWxsb3dzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBzeXN0ZW1zIHJ1bm5pbmcgYXQKKyAqIHRoZSBzYW1lIG1ham9yIG51bWJlciBhbmQgYW4gZXF1YWwgb3Igc21hbGxlciBtaW5vciBudW1iZXIuCisgKgorICogV2hlbmV2ZXIgdGhlIGZpbGVzeXN0ZW0gZG9lcyBuZXcgdGhpbmdzIHdpdGggbG9ja3MgKGFkZHMgb3IgcmVtb3ZlcyBhCisgKiBsb2NrLCBvcmRlcnMgdGhlbSBkaWZmZXJlbnRseSwgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIHVuZGVybmVhdGggYSBsb2NrKSwKKyAqIHRoZSB2ZXJzaW9uIG11c3QgYmUgY2hhbmdlZC4gIFRoZSBwcm90b2NvbCBpcyBuZWdvdGlhdGVkIHdoZW4gam9pbmluZworICogdGhlIGRsbSBkb21haW4uICBBIG5vZGUgbWF5IGpvaW4gdGhlIGRvbWFpbiBpZiBpdHMgbWFqb3IgdmVyc2lvbiBpcworICogaWRlbnRpY2FsIHRvIGFsbCBvdGhlciBub2RlcyBhbmQgaXRzIG1pbm9yIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuCisgKiBvciBlcXVhbCB0byBhbGwgb3RoZXIgbm9kZXMuICBXaGVuIGl0cyBtaW5vciB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbgorICogdGhlIG90aGVyIG5vZGVzLCBpdCB3aWxsIHJ1biBhdCB0aGUgbWlub3IgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlCisgKiBvdGhlciBub2Rlcy4KKyAqCisgKiBJZiBhIGxvY2tpbmcgY2hhbmdlIGlzIG1hZGUgdGhhdCB3aWxsIG5vdCBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIKKyAqIHZlcnNpb25zLCB0aGUgbWFqb3IgbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIGFuZCB0aGUgbWlub3IgdmVyc2lvbiBzZXQKKyAqIHRvIHplcm8uICBJZiBhIGNoYW5nZSBtZXJlbHkgYWRkcyBhIGJlaGF2aW9yIHRoYXQgY2FuIGJlIGRpc2FibGVkIHdoZW4KKyAqIHNwZWFraW5nIHRvIG9sZGVyIHZlcnNpb25zLCB0aGUgbWlub3IgdmVyc2lvbiBtdXN0IGJlIGluY3JlYXNlZC4gIElmIGEKKyAqIGNoYW5nZSBhZGRzIGEgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgY2hhbmdlIChlZywgTFZCIGNoYW5nZXMgdGhhdAorICogYXJlIGp1c3QgaWdub3JlZCBieSBvbGRlciB2ZXJzaW9ucyksIHRoZSB2ZXJzaW9uIGRvZXMgbm90IG5lZWQgdG8gYmUKKyAqIHVwZGF0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCBscHJvdG8gPSB7CisJLmxwX21heF92ZXJzaW9uID0geworCQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAorCQkucHZfbWlub3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01JTk9SLAorCX0sCisJLmxwX2xvY2tfYXN0CQk9IG9jZnMyX2xvY2tpbmdfYXN0LAorCS5scF9ibG9ja2luZ19hc3QJPSBvY2ZzMl9ibG9ja2luZ19hc3QsCisJLmxwX3VubG9ja19hc3QJCT0gb2NmczJfdW5sb2NrX2FzdCwKK307CisKK3ZvaWQgb2NmczJfc2V0X2xvY2tpbmdfcHJvdG9jb2wodm9pZCkKK3sKKwlvY2ZzMl9zdGFja19nbHVlX3NldF9tYXhfcHJvdG9fdmVyc2lvbigmbHByb3RvLmxwX21heF92ZXJzaW9uKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3Ioc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAogCQkJCQkJaW50IGNvbnZlcnQpCiB7CkBAIC0xMTg5LDggKzEyODMsNyBAQAogCQkJICAgICAmbG9ja3Jlcy0+bF9sa3NiLAogCQkJICAgICBkbG1fZmxhZ3MsCiAJCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwKLQkJCSAgICAgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKLQkJCSAgICAgbG9ja3Jlcyk7CisJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEpOwogCWxvY2tyZXNfY2xlYXJfcGVuZGluZyhsb2NrcmVzLCBnZW4sIG9zYik7CiAJaWYgKHJldCkgewogCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fbG9jayIsIHJldCwgbG9ja3Jlcyk7CkBAIC0xNDEyLDcgKzE1MDUsNyBAQAogCQlCVUdfT04obGV2ZWwgPT0gRExNX0xPQ0tfSVYpOwogCQlCVUdfT04obGV2ZWwgPT0gRExNX0xPQ0tfTkwpOwogCi0JCW1sb2coMCwgImxvY2sgJXMsIGNvbnZlcnQgZnJvbSAlZCB0byBsZXZlbCA9ICVkXG4iLAorCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgY29udmVydCBmcm9tICVkIHRvICVkXG4iLAogCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9sZXZlbCwgbGV2ZWwpOwogCiAJCS8qIGNhbGwgZGxtX2xvY2sgdG8gdXBncmFkZSBsb2NrIG5vdyAqLwpAQCAtMTQyMSw4ICsxNTE0LDcgQEAKIAkJCQkgICAgICZsb2NrcmVzLT5sX2xrc2IsCiAJCQkJICAgICBsa21fZmxhZ3MsCiAJCQkJICAgICBsb2NrcmVzLT5sX25hbWUsCi0JCQkJICAgICBPQ0ZTMl9MT0NLX0lEX01BWF9MRU4gLSAxLAotCQkJCSAgICAgbG9ja3Jlcyk7CisJCQkJICAgICBPQ0ZTMl9MT0NLX0lEX01BWF9MRU4gLSAxKTsKIAkJbG9ja3Jlc19jbGVhcl9wZW5kaW5nKGxvY2tyZXMsIGdlbiwgb3NiKTsKIAkJaWYgKHJldCkgewogCQkJaWYgKCEobGttX2ZsYWdzICYgRExNX0xLRl9OT1FVRVVFKSB8fApAQCAtMTg1OSw4ICsxOTUxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAogCXJldCA9IG9jZnMyX2RsbV9sb2NrKG9zYi0+Y2Nvbm4sIGxldmVsLCAmbG9ja3Jlcy0+bF9sa3NiLCBsa21fZmxhZ3MsCi0JCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKLQkJCSAgICAgbG9ja3Jlcyk7CisJCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSk7CiAJaWYgKHJldCkgewogCQlpZiAoIXRyeWxvY2sgfHwgKHJldCAhPSAtRUFHQUlOKSkgewogCQkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX2xvY2siLCByZXQsIGxvY2tyZXMpOwpAQCAtMjk4OSw3ICszMDgwLDcgQEAKIAlzdGF0dXMgPSBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Qob3NiLT5vc2JfY2x1c3Rlcl9zdGFjaywKIAkJCQkgICAgICAgb3NiLT51dWlkX3N0ciwKIAkJCQkgICAgICAgc3RybGVuKG9zYi0+dXVpZF9zdHIpLAotCQkJCSAgICAgICBvY2ZzMl9kb19ub2RlX2Rvd24sIG9zYiwKKwkJCQkgICAgICAgJmxwcm90bywgb2NmczJfZG9fbm9kZV9kb3duLCBvc2IsCiAJCQkJICAgICAgICZjb25uKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTMwNTYsNTAgKzMxNDcsNiBAQAogCW1sb2dfZXhpdF92b2lkKCk7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX3VubG9ja19hc3Qodm9pZCAqb3BhcXVlLCBpbnQgZXJyb3IpCi17Ci0Jc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gb3BhcXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQltbG9nX2VudHJ5X3ZvaWQoKTsKLQotCW1sb2coMCwgIlVOTE9DSyBBU1QgY2FsbGVkIG9uIGxvY2sgJXMsIGFjdGlvbiA9ICVkXG4iLCBsb2NrcmVzLT5sX25hbWUsCi0JICAgICBsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCWlmIChlcnJvcikgewotCQltbG9nKE1MX0VSUk9SLCAiRGxtIHBhc3NlcyBlcnJvciAlZCBmb3IgbG9jayAlcywgIgotCQkgICAgICJ1bmxvY2tfYWN0aW9uICVkXG4iLCBlcnJvciwgbG9ja3Jlcy0+bF9uYW1lLAotCQkgICAgIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCQltbG9nX2V4aXRfdm9pZCgpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoKGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbikgewotCWNhc2UgT0NGUzJfVU5MT0NLX0NBTkNFTF9DT05WRVJUOgotCQltbG9nKDAsICJDYW5jZWwgY29udmVydCBzdWNjZXNzIGZvciAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfSU5WQUxJRDsKLQkJLyogRG93bmNvbnZlcnQgdGhyZWFkIG1heSBoYXZlIHJlcXVldWVkIHRoaXMgbG9jaywgd2UKLQkJICogbmVlZCB0byB3YWtlIGl0LiAqLwotCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQkxPQ0tFRCkKLQkJCW9jZnMyX3dha2VfZG93bmNvbnZlcnRfdGhyZWFkKG9jZnMyX2dldF9sb2NrcmVzX29zYihsb2NrcmVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgT0NGUzJfVU5MT0NLX0RST1BfTE9DSzoKLQkJbG9ja3Jlcy0+bF9sZXZlbCA9IERMTV9MT0NLX0lWOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7Ci0JbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uID0gT0NGUzJfVU5MT0NLX0lOVkFMSUQ7Ci0Jd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7Ci0KLQltbG9nX2V4aXRfdm9pZCgpOwotfQotCiBzdGF0aWMgaW50IG9jZnMyX2Ryb3BfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKQEAgLTMxNjcsOCArMzIxNCw3IEBACiAKIAltbG9nKDAsICJsb2NrICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCi0JcmV0ID0gb2NmczJfZGxtX3VubG9jayhvc2ItPmNjb25uLCAmbG9ja3Jlcy0+bF9sa3NiLCBsa21fZmxhZ3MsCi0JCQkgICAgICAgbG9ja3Jlcyk7CisJcmV0ID0gb2NmczJfZGxtX3VubG9jayhvc2ItPmNjb25uLCAmbG9ja3Jlcy0+bF9sa3NiLCBsa21fZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX3VubG9jayIsIHJldCwgbG9ja3Jlcyk7CiAJCW1sb2coTUxfRVJST1IsICJsb2NrcmVzIGZsYWdzOiAlbHVcbiIsIGxvY2tyZXMtPmxfZmxhZ3MpOwpAQCAtMzI3NiwxMyArMzMyMiwyMCBAQAogCUJVR19PTihsb2NrcmVzLT5sX2Jsb2NraW5nIDw9IERMTV9MT0NLX05MKTsKIAogCWlmIChsb2NrcmVzLT5sX2xldmVsIDw9IG5ld19sZXZlbCkgewotCQltbG9nKE1MX0VSUk9SLCAibG9ja3Jlcy0+bF9sZXZlbCAoJWQpIDw9IG5ld19sZXZlbCAoJWQpXG4iLAotCQkgICAgIGxvY2tyZXMtPmxfbGV2ZWwsIG5ld19sZXZlbCk7CisJCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICVzLCBsdmwgJWQgPD0gJWQsIGJsY2tsc3QgJWQsIG1hc2sgJWQsICIKKwkJICAgICAidHlwZSAlZCwgZmxhZ3MgMHglbHgsIGhvbGQgJWQgJWQsIGFjdCAlZCAlZCwgcmVxICVkLCAiCisJCSAgICAgImJsb2NrICVkLCBwZ2VuICVkXG4iLCBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfbGV2ZWwsCisJCSAgICAgbmV3X2xldmVsLCBsaXN0X2VtcHR5KCZsb2NrcmVzLT5sX2Jsb2NrZWRfbGlzdCksCisJCSAgICAgbGlzdF9lbXB0eSgmbG9ja3Jlcy0+bF9tYXNrX3dhaXRlcnMpLCBsb2NrcmVzLT5sX3R5cGUsCisJCSAgICAgbG9ja3Jlcy0+bF9mbGFncywgbG9ja3Jlcy0+bF9yb19ob2xkZXJzLAorCQkgICAgIGxvY2tyZXMtPmxfZXhfaG9sZGVycywgbG9ja3Jlcy0+bF9hY3Rpb24sCisJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uLCBsb2NrcmVzLT5sX3JlcXVlc3RlZCwKKwkJICAgICBsb2NrcmVzLT5sX2Jsb2NraW5nLCBsb2NrcmVzLT5sX3BlbmRpbmdfZ2VuKTsKIAkJQlVHKCk7CiAJfQogCi0JbWxvZygwLCAibG9jayAlcywgbmV3X2xldmVsID0gJWQsIGxfYmxvY2tpbmcgPSAlZFxuIiwKLQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbmV3X2xldmVsLCBsb2NrcmVzLT5sX2Jsb2NraW5nKTsKKwltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgbGV2ZWwgJWQgPT4gJWQsIGJsb2NraW5nICVkXG4iLAorCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwsIGxvY2tyZXMtPmxfYmxvY2tpbmcpOwogCiAJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfRE9XTkNPTlZFUlQ7CiAJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBuZXdfbGV2ZWw7CkBAIC0zMzAxLDYgKzMzNTQsOSBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKKwltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgbGV2ZWwgJWQgPT4gJWRcbiIsIGxvY2tyZXMtPmxfbmFtZSwKKwkgICAgIGxvY2tyZXMtPmxfbGV2ZWwsIG5ld19sZXZlbCk7CisKIAlpZiAobHZiKQogCQlkbG1fZmxhZ3MgfD0gRExNX0xLRl9WQUxCTEs7CiAKQEAgLTMzMDksOCArMzM2NSw3IEBACiAJCQkgICAgICZsb2NrcmVzLT5sX2xrc2IsCiAJCQkgICAgIGRsbV9mbGFncywKIAkJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLAotCQkJICAgICBPQ0ZTMl9MT0NLX0lEX01BWF9MRU4gLSAxLAotCQkJICAgICBsb2NrcmVzKTsKKwkJCSAgICAgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSk7CiAJbG9ja3Jlc19jbGVhcl9wZW5kaW5nKGxvY2tyZXMsIGdlbmVyYXRpb24sIG9zYik7CiAJaWYgKHJldCkgewogCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fbG9jayIsIHJldCwgbG9ja3Jlcyk7CkBAIC0zMzMxLDE0ICszMzg2LDEyIEBACiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZsb2NrcmVzLT5sX2xvY2spOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7Ci0JbWxvZygwLCAibG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCWlmIChsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24gPT0gT0NGUzJfVU5MT0NLX0NBTkNFTF9DT05WRVJUKSB7CiAJCS8qIElmIHdlJ3JlIGFscmVhZHkgdHJ5aW5nIHRvIGNhbmNlbCBhIGxvY2sgY29udmVyc2lvbgogCQkgKiB0aGVuIGp1c3QgZHJvcCB0aGUgc3BpbmxvY2sgYW5kIGFsbG93IHRoZSBjYWxsZXIgdG8KIAkJICogcmVxdWV1ZSB0aGlzIGxvY2suICovCi0KLQkJbWxvZygwLCAiTG9ja3JlcyAlcywgc2tpcCBjb252ZXJ0XG4iLCBsb2NrcmVzLT5sX25hbWUpOworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgc2tpcCBjb252ZXJ0XG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMzNTMsNiArMzQwNiw4IEBACiAJCQkibG9jayAlcywgaW52YWxpZCBmbGFnczogMHglbHhcbiIsCiAJCQlsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOwogCisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtMzM2MiwxNiArMzQxNywxNSBAQAogCWludCByZXQ7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKLQltbG9nKDAsICJsb2NrICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCiAJcmV0ID0gb2NmczJfZGxtX3VubG9jayhvc2ItPmNjb25uLCAmbG9ja3Jlcy0+bF9sa3NiLAotCQkJICAgICAgIERMTV9MS0ZfQ0FOQ0VMLCBsb2NrcmVzKTsKKwkJCSAgICAgICBETE1fTEtGX0NBTkNFTCk7CiAJaWYgKHJldCkgewogCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fdW5sb2NrIiwgcmV0LCBsb2NrcmVzKTsKIAkJb2NmczJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihsb2NrcmVzLCAwKTsKIAl9CiAKLQltbG9nKDAsICJsb2NrICVzIHJldHVybiBmcm9tIG9jZnMyX2RsbV91bmxvY2tcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzQyOCw4ICszNDgyLDExIEBACiAJCSAqIGF0IHRoZSBzYW1lIHRpbWUgdGhleSBzZXQgT0NGUzJfRExNX0JVU1kuICBUaGV5IG11c3QKIAkJICogY2xlYXIgT0NGUzJfRExNX1BFTkRJTkcgYWZ0ZXIgZGxtX2xvY2soKSByZXR1cm5zLgogCQkgKi8KLQkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1BFTkRJTkcpCisJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19QRU5ESU5HKSB7CisJCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgUmVROiBQZW5kaW5nXG4iLAorCQkJICAgICBsb2NrcmVzLT5sX25hbWUpOwogCQkJZ290byBsZWF2ZV9yZXF1ZXVlOworCQl9CiAKIAkJY3RsLT5yZXF1ZXVlID0gMTsKIAkJcmV0ID0gb2NmczJfcHJlcGFyZV9jYW5jZWxfY29udmVydChvc2IsIGxvY2tyZXMpOwpAQCAtMzQ2MSw2ICszNTE4LDcgQEAKIAkgKi8KIAlpZiAobG9ja3Jlcy0+bF9sZXZlbCA9PSBETE1fTE9DS19OTCkgewogCQlCVUdfT04obG9ja3Jlcy0+bF9leF9ob2xkZXJzIHx8IGxvY2tyZXMtPmxfcm9faG9sZGVycyk7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBBYm9ydGluZyBkY1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IERMTV9MT0NLX05MOwogCQlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQkxPQ0tFRCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwpAQCAtMzQ3MCwyOCArMzUyOCw0MSBAQAogCS8qIGlmIHdlJ3JlIGJsb2NraW5nIGFuIGV4Y2x1c2l2ZSBhbmQgd2UgaGF2ZSAqYW55KiBob2xkZXJzLAogCSAqIHRoZW4gcmVxdWV1ZS4gKi8KIAlpZiAoKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gRExNX0xPQ0tfRVgpCi0JICAgICYmIChsb2NrcmVzLT5sX2V4X2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9yb19ob2xkZXJzKSkKKwkgICAgJiYgKGxvY2tyZXMtPmxfZXhfaG9sZGVycyB8fCBsb2NrcmVzLT5sX3JvX2hvbGRlcnMpKSB7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBSZVE6IEVYL1BSIEhvbGRlcnMgJXUsJXVcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2V4X2hvbGRlcnMsCisJCSAgICAgbG9ja3Jlcy0+bF9yb19ob2xkZXJzKTsKIAkJZ290byBsZWF2ZV9yZXF1ZXVlOworCX0KIAogCS8qIElmIGl0J3MgYSBQUiB3ZSdyZSBibG9ja2luZywgdGhlbiBvbmx5CiAJICogcmVxdWV1ZSBpZiB3ZSd2ZSBnb3QgYW55IEVYIGhvbGRlcnMgKi8KIAlpZiAobG9ja3Jlcy0+bF9ibG9ja2luZyA9PSBETE1fTE9DS19QUiAmJgotCSAgICBsb2NrcmVzLT5sX2V4X2hvbGRlcnMpCisJICAgIGxvY2tyZXMtPmxfZXhfaG9sZGVycykgeworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgUmVROiBFWCBIb2xkZXJzICV1XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKTsKIAkJZ290byBsZWF2ZV9yZXF1ZXVlOworCX0KIAogCS8qCiAJICogQ2FuIHdlIGdldCBhIGxvY2sgaW4gdGhpcyBzdGF0ZSBpZiB0aGUgaG9sZGVyIGNvdW50cyBhcmUKIAkgKiB6ZXJvPyBUaGUgbWV0YSBkYXRhIHVuYmxvY2sgY29kZSB1c2VkIHRvIGNoZWNrIHRoaXMuCiAJICovCiAJaWYgKChsb2NrcmVzLT5sX29wcy0+ZmxhZ3MgJiBMT0NLX1RZUEVfUkVRVUlSRVNfUkVGUkVTSCkKLQkgICAgJiYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1JFRlJFU0hJTkcpKQorCSAgICAmJiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfUkVGUkVTSElORykpIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIFJlUTogTG9jayBSZWZyZXNoaW5nXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSk7CiAJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKwl9CiAKIAluZXdfbGV2ZWwgPSBvY2ZzMl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpOwogCiAJaWYgKGxvY2tyZXMtPmxfb3BzLT5jaGVja19kb3duY29udmVydAotCSAgICAmJiAhbG9ja3Jlcy0+bF9vcHMtPmNoZWNrX2Rvd25jb252ZXJ0KGxvY2tyZXMsIG5ld19sZXZlbCkpCisJICAgICYmICFsb2NrcmVzLT5sX29wcy0+Y2hlY2tfZG93bmNvbnZlcnQobG9ja3JlcywgbmV3X2xldmVsKSkgeworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgUmVROiBDaGVja3BvaW50aW5nXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSk7CiAJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKwl9CiAKIAkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUKIAkgKiBpbmNvbXBhdGlibGUgaG9sZGVycyAoYW5kIGFueW9uZSBhc2tpbmcgZm9yIGFuIGluY29tcGF0aWJsZQpAQCAtMzUwOSwxMyArMzU4MCwxOSBAQAogCiAJY3RsLT51bmJsb2NrX2FjdGlvbiA9IGxvY2tyZXMtPmxfb3BzLT5kb3duY29udmVydF93b3JrZXIobG9ja3JlcywgYmxvY2tpbmcpOwogCi0JaWYgKGN0bC0+dW5ibG9ja19hY3Rpb24gPT0gVU5CTE9DS19TVE9QX1BPU1QpCisJaWYgKGN0bC0+dW5ibG9ja19hY3Rpb24gPT0gVU5CTE9DS19TVE9QX1BPU1QpIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIFVOQkxPQ0tfU1RPUF9QT1NUXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSk7CiAJCWdvdG8gbGVhdmU7CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCWlmICgoYmxvY2tpbmcgIT0gbG9ja3Jlcy0+bF9ibG9ja2luZykgfHwgKGxldmVsICE9IGxvY2tyZXMtPmxfbGV2ZWwpKSB7CiAJCS8qIElmIHRoaXMgY2hhbmdlZCB1bmRlcm5lYXRoIHVzLCB0aGVuIHdlIGNhbid0IGRyb3AKIAkJICogaXQganVzdCB5ZXQuICovCisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBibG9jaz0lZDolZCwgbGV2ZWw9JWQ6JWQsICIKKwkJICAgICAiUmVjaGVja1xuIiwgbG9ja3Jlcy0+bF9uYW1lLCBibG9ja2luZywKKwkJICAgICBsb2NrcmVzLT5sX2Jsb2NraW5nLCBsZXZlbCwgbG9ja3Jlcy0+bF9sZXZlbCk7CiAJCWdvdG8gcmVjaGVjazsKIAl9CiAKQEAgLTM5MTAsNDUgKzM5ODcsNiBAQAogCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIGxldmVsKTsKIH0KIAotLyoKLSAqIFRoaXMgaXMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbC4gIEl0IHByb3ZpZGVzIHRoZSBsb2NrIGhhbmRsaW5nCi0gKiBob29rcyBmb3IgdGhlIHVuZGVybHlpbmcgRExNLiAgSXQgaGFzIGEgbWF4aW11bSB2ZXJzaW9uIG51bWJlci4KLSAqIFRoZSB2ZXJzaW9uIG51bWJlciBhbGxvd3MgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIHN5c3RlbXMgcnVubmluZyBhdAotICogdGhlIHNhbWUgbWFqb3IgbnVtYmVyIGFuZCBhbiBlcXVhbCBvciBzbWFsbGVyIG1pbm9yIG51bWJlci4KLSAqCi0gKiBXaGVuZXZlciB0aGUgZmlsZXN5c3RlbSBkb2VzIG5ldyB0aGluZ3Mgd2l0aCBsb2NrcyAoYWRkcyBvciByZW1vdmVzIGEKLSAqIGxvY2ssIG9yZGVycyB0aGVtIGRpZmZlcmVudGx5LCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgdW5kZXJuZWF0aCBhIGxvY2spLAotICogdGhlIHZlcnNpb24gbXVzdCBiZSBjaGFuZ2VkLiAgVGhlIHByb3RvY29sIGlzIG5lZ290aWF0ZWQgd2hlbiBqb2luaW5nCi0gKiB0aGUgZGxtIGRvbWFpbi4gIEEgbm9kZSBtYXkgam9pbiB0aGUgZG9tYWluIGlmIGl0cyBtYWpvciB2ZXJzaW9uIGlzCi0gKiBpZGVudGljYWwgdG8gYWxsIG90aGVyIG5vZGVzIGFuZCBpdHMgbWlub3IgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4KLSAqIG9yIGVxdWFsIHRvIGFsbCBvdGhlciBub2Rlcy4gIFdoZW4gaXRzIG1pbm9yIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuCi0gKiB0aGUgb3RoZXIgbm9kZXMsIGl0IHdpbGwgcnVuIGF0IHRoZSBtaW5vciB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKLSAqIG90aGVyIG5vZGVzLgotICoKLSAqIElmIGEgbG9ja2luZyBjaGFuZ2UgaXMgbWFkZSB0aGF0IHdpbGwgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlcgotICogdmVyc2lvbnMsIHRoZSBtYWpvciBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgYW5kIHRoZSBtaW5vciB2ZXJzaW9uIHNldAotICogdG8gemVyby4gIElmIGEgY2hhbmdlIG1lcmVseSBhZGRzIGEgYmVoYXZpb3IgdGhhdCBjYW4gYmUgZGlzYWJsZWQgd2hlbgotICogc3BlYWtpbmcgdG8gb2xkZXIgdmVyc2lvbnMsIHRoZSBtaW5vciB2ZXJzaW9uIG11c3QgYmUgaW5jcmVhc2VkLiAgSWYgYQotICogY2hhbmdlIGFkZHMgYSBmdWxseSBiYWNrd2FyZHMgY29tcGF0aWJsZSBjaGFuZ2UgKGVnLCBMVkIgY2hhbmdlcyB0aGF0Ci0gKiBhcmUganVzdCBpZ25vcmVkIGJ5IG9sZGVyIHZlcnNpb25zKSwgdGhlIHZlcnNpb24gZG9lcyBub3QgbmVlZCB0byBiZQotICogdXBkYXRlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sIGxwcm90byA9IHsKLQkubHBfbWF4X3ZlcnNpb24gPSB7Ci0JCS5wdl9tYWpvciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUFKT1IsCi0JCS5wdl9taW5vciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IsCi0JfSwKLQkubHBfbG9ja19hc3QJCT0gb2NmczJfbG9ja2luZ19hc3QsCi0JLmxwX2Jsb2NraW5nX2FzdAk9IG9jZnMyX2Jsb2NraW5nX2FzdCwKLQkubHBfdW5sb2NrX2FzdAkJPSBvY2ZzMl91bmxvY2tfYXN0LAotfTsKLQotdm9pZCBvY2ZzMl9zZXRfbG9ja2luZ19wcm90b2NvbCh2b2lkKQotewotCW9jZnMyX3N0YWNrX2dsdWVfc2V0X2xvY2tpbmdfcHJvdG9jb2woJmxwcm90byk7Ci19Ci0KLQogc3RhdGljIHZvaWQgb2NmczJfcHJvY2Vzc19ibG9ja2VkX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKQEAgLTM5NjUsNyArNDAwMyw3IEBACiAJQlVHX09OKCFsb2NrcmVzKTsKIAlCVUdfT04oIWxvY2tyZXMtPmxfb3BzKTsKIAotCW1sb2coMCwgImxvY2tyZXMgJXMgYmxvY2tlZC5cbiIsIGxvY2tyZXMtPmxfbmFtZSk7CisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMgYmxvY2tlZFxuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCS8qIERldGVjdCB3aGV0aGVyIGEgbG9jayBoYXMgYmVlbiBtYXJrZWQgYXMgZ29pbmcgYXdheSB3aGlsZQogCSAqIHRoZSBkb3duY29udmVydCB0aHJlYWQgd2FzIHByb2Nlc3Npbmcgb3RoZXIgdGhpbmdzLiBBIGxvY2sgY2FuCkBAIC0zOTg4LDcgKzQwMjYsNyBAQAogCX0gZWxzZQogCQlvY2ZzMl9zY2hlZHVsZV9ibG9ja2VkX2xvY2sob3NiLCBsb2NrcmVzKTsKIAotCW1sb2coMCwgImxvY2tyZXMgJXMsIHJlcXVldWUgPSAlcy5cbiIsIGxvY2tyZXMtPmxfbmFtZSwKKwltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgcmVxdWV1ZSA9ICVzLlxuIiwgbG9ja3Jlcy0+bF9uYW1lLAogCSAgICAgY3RsLnJlcXVldWUgPyAieWVzIiA6ICJubyIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCkBAIC00MDEwLDcgKzQwNDgsNyBAQAogCQkvKiBEbyBub3Qgc2NoZWR1bGUgYSBsb2NrIGZvciBkb3duY29udmVydCB3aGVuIGl0J3Mgb24KIAkJICogdGhlIHdheSB0byBkZXN0cnVjdGlvbiAtIGFueSBub2RlcyB3YW50aW5nIGFjY2VzcwogCQkgKiB0byB0aGUgcmVzb3VyY2Ugd2lsbCBnZXQgaXQgc29vbi4gKi8KLQkJbWxvZygwLCAiTG9ja3JlcyAlcyB3b24ndCBiZSBzY2hlZHVsZWQ6IGZsYWdzIDB4JWx4XG4iLAorCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcyB3b24ndCBiZSBzY2hlZHVsZWQ6IGZsYWdzIDB4JWx4XG4iLAogCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggNTU4Y2UwMy4uNWI1MjU0NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtOTkzLDEwICs5OTMsOSBAQAogCX0KIAogCWlmIChzaXplX2NoYW5nZSAmJiBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewotCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IHNiLT5zX21heGJ5dGVzKSB7Ci0JCQlzdGF0dXMgPSAtRUZCSUc7CisJCXN0YXR1cyA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoc3RhdHVzKQogCQkJZ290byBiYWlsX3VubG9jazsKLQkJfQogCiAJCWlmIChpX3NpemVfcmVhZChpbm9kZSkgPiBhdHRyLT5pYV9zaXplKSB7CiAJCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKSB7CkBAIC0xODM2LDYgKzE4MzUsOCBAQAogCQkJCQkJCSAgICAgICAmbWV0YV9sZXZlbCk7CiAJCQlpZiAoaGFzX3JlZmNvdW50KQogCQkJCSpoYXNfcmVmY291bnQgPSAxOworCQkJaWYgKGRpcmVjdF9pbykKKwkJCQkqZGlyZWN0X2lvID0gMDsKIAkJfQogCiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xODU5LDEwICsxODYwLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGhhc19yZWZjb3VudCAmJiAqaGFzX3JlZmNvdW50ID09IDEpIHsKLQkJCSpkaXJlY3RfaW8gPSAwOwotCQkJYnJlYWs7Ci0JCX0KIAkJLyoKIAkJICogQWxsb3dpbmcgY29uY3VycmVudCBkaXJlY3Qgd3JpdGVzIG1lYW5zCiAJCSAqIGlfc2l6ZSBjaGFuZ2VzIHdvdWxkbid0IGJlIHN5bmNocm9uaXplZCwgc28KQEAgLTIwNDMsNyArMjA0MCw3IEBACiAJICogYXN5bmMgZGlvIGlzIGdvaW5nIHRvIGRvIGl0IGluIHRoZSBmdXR1cmUgb3IgYW4gZW5kX2lvIGFmdGVyIGFuCiAJICogZXJyb3IgaGFzIGFscmVhZHkgZG9uZSBpdC4KIAkgKi8KLQlpZiAocmV0ID09IC1FSU9DQlFVRVVFRCB8fCAhb2NmczJfaW9jYl9pc19yd19sb2NrZWQoaW9jYikpIHsKKwlpZiAoKHJldCA9PSAtRUlPQ0JRVUVVRUQpIHx8ICghb2NmczJfaW9jYl9pc19yd19sb2NrZWQoaW9jYikpKSB7CiAJCXJ3X2xldmVsID0gLTE7CiAJCWhhdmVfYWxsb2Nfc2VtID0gMDsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pb2N0bC5oIGIvZnMvb2NmczIvaW9jdGwuaAppbmRleCBjZjlhNWVlLi4wY2Q1MzIzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pb2N0bC5oCisrKyBiL2ZzL29jZnMyL2lvY3RsLmgKQEAgLTcsMTAgKzcsMTAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBPQ0ZTMl9JT0NUTF9ICi0jZGVmaW5lIE9DRlMyX0lPQ1RMX0gKKyNpZm5kZWYgT0NGUzJfSU9DVExfUFJPVE9fSAorI2RlZmluZSBPQ0ZTMl9JT0NUTF9QUk9UT19ICiAKIGxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotI2VuZGlmIC8qIE9DRlMyX0lPQ1RMX0ggKi8KKyNlbmRpZiAvKiBPQ0ZTMl9JT0NUTF9QUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKaW5kZXggYWMxMGY4My4uY2E5OTJkOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAKIG91dDoKIAlpZiAoIXN0YXR1cykKLQkJb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KG9zYik7CisJCW9jZnMyX2luaXRfc3RlYWxfc2xvdHMob3NiKTsKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggNzQwZjQ0OC4uMTIzOGI0OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC00Miw2ICs0Miw3IEBACiAKICNpbmNsdWRlICJvY2ZzMl9mcy5oIgogI2luY2x1ZGUgIm9jZnMyX2xvY2tpZC5oIgorI2luY2x1ZGUgIm9jZnMyX2lvY3RsLmgiCiAKIC8qIEZvciBzdHJ1Y3Qgb2NmczJfYmxvY2tjaGVja19zdGF0cyAqLwogI2luY2x1ZGUgImJsb2NrY2hlY2suaCIKQEAgLTE1OSw3ICsxNjAsNyBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICBsX2xldmVsOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICBsX3JvX2hvbGRlcnM7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfZXhfaG9sZGVyczsKLQl1bmlvbiBvY2ZzMl9kbG1fbGtzYiAgICAgbF9sa3NiOworCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAgICBsX2xrc2I7CiAKIAkvKiB1c2VkIGZyb20gQVNUL0JBU1QgZnVuY3MuICovCiAJZW51bSBvY2ZzMl9hc3RfYWN0aW9uICAgIGxfYWN0aW9uOwpAQCAtMzA1LDcgKzMwNiw5IEBACiAJdTMyIHNfbmV4dF9nZW5lcmF0aW9uOwogCXVuc2lnbmVkIGxvbmcgb3NiX2ZsYWdzOwogCXMxNiBzX2lub2RlX3N0ZWFsX3Nsb3Q7CisJczE2IHNfbWV0YV9zdGVhbF9zbG90OwogCWF0b21pY190IHNfbnVtX2lub2Rlc19zdG9sZW47CisJYXRvbWljX3Qgc19udW1fbWV0YV9zdG9sZW47CiAKIAl1bnNpZ25lZCBsb25nIHNfbW91bnRfb3B0OwogCXVuc2lnbmVkIGludCBzX2F0aW1lX3F1YW50dW07CkBAIC03NjAsMzMgKzc2Myw2IEBACiAJcmV0dXJuIG1lZ3MgPDwgKDIwIC0gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7Ci0Jb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QgPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7Ci0Jc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwotCWF0b21pY19zZXQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbiwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9zZXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkJICAgICAgczE2IHNsb3QpCi17Ci0Jc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKLQlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCA9IHNsb3Q7Ci0Jc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHMxNiBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQlzMTYgc2xvdDsKLQotCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7Ci0Jc2xvdCA9IG9zYi0+c19pbm9kZV9zdGVhbF9zbG90OwotCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKLQotCXJldHVybiBzbG90OwotfQotCiAjZGVmaW5lIG9jZnMyX3NldF9iaXQgZXh0Ml9zZXRfYml0CiAjZGVmaW5lIG9jZnMyX2NsZWFyX2JpdCBleHQyX2NsZWFyX2JpdAogI2RlZmluZSBvY2ZzMl90ZXN0X2JpdCBleHQyX3Rlc3RfYml0CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCA3NjM4YTM4Li5iYjM3MjE4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTI1NCw2MyArMjU0LDYgQEAKIAkJCQkJCSAqIHJlZmNvdW50IHRyZWUgKi8KIAogLyoKLSAqIGlvY3RsIGNvbW1hbmRzCi0gKi8KLSNkZWZpbmUgT0NGUzJfSU9DX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBsb25nKQotI2RlZmluZSBPQ0ZTMl9JT0NfU0VURkxBR1MJX0lPVygnZicsIDIsIGxvbmcpCi0jZGVmaW5lIE9DRlMyX0lPQzMyX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBpbnQpCi0jZGVmaW5lIE9DRlMyX0lPQzMyX1NFVEZMQUdTCV9JT1coJ2YnLCAyLCBpbnQpCi0KLS8qCi0gKiBTcGFjZSByZXNlcnZhdGlvbiAvIGFsbG9jYXRpb24gLyBmcmVlIGlvY3RscyBhbmQgYXJndW1lbnQgc3RydWN0dXJlCi0gKiBhcmUgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFhGUy4KLSAqCi0gKiBBTExPQ1NQKiBhbmQgRlJFRVNQKiBhcmUgbm90IGFuZCB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZCwgYnV0IGFyZQotICogaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgotICovCi1zdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdiB7Ci0JX19zMTYJCWxfdHlwZTsKLQlfX3MxNgkJbF93aGVuY2U7Ci0JX19zNjQJCWxfc3RhcnQ7Ci0JX19zNjQJCWxfbGVuOwkJLyogbGVuID09IDAgbWVhbnMgdW50aWwgZW5kIG9mIGZpbGUgKi8KLQlfX3MzMgkJbF9zeXNpZDsKLQlfX3UzMgkJbF9waWQ7Ci0JX19zMzIJCWxfcGFkWzRdOwkvKiByZXNlcnZlIGFyZWEJCQkgICAgKi8KLX07Ci0KLSNkZWZpbmUgT0NGUzJfSU9DX0FMTE9DU1AJCV9JT1cgKCdYJywgMTAsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQotI2RlZmluZSBPQ0ZTMl9JT0NfRlJFRVNQCQlfSU9XICgnWCcsIDExLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLSNkZWZpbmUgT0NGUzJfSU9DX1JFU1ZTUAkJX0lPVyAoJ1gnLCA0MCwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCi0jZGVmaW5lIE9DRlMyX0lPQ19VTlJFU1ZTUAlfSU9XICgnWCcsIDQxLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLSNkZWZpbmUgT0NGUzJfSU9DX0FMTE9DU1A2NAlfSU9XICgnWCcsIDM2LCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLSNkZWZpbmUgT0NGUzJfSU9DX0ZSRUVTUDY0CV9JT1cgKCdYJywgMzcsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQotI2RlZmluZSBPQ0ZTMl9JT0NfUkVTVlNQNjQJX0lPVyAoJ1gnLCA0Miwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCi0jZGVmaW5lIE9DRlMyX0lPQ19VTlJFU1ZTUDY0CV9JT1cgKCdYJywgNDMsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQotCi0vKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCi1zdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0IHsKLQlfX3U2NCBncm91cDsJCS8qIEdyb3VwIGRlc2NyaXB0b3IncyBibGtuby4gKi8KLQlfX3UzMiBjbHVzdGVyczsJCS8qIFRvdGFsIG51bWJlciBvZiBjbHVzdGVycyBpbiB0aGlzIGdyb3VwICovCi0JX191MzIgZnJlZXM7CQkvKiBUb3RhbCBmcmVlIGNsdXN0ZXJzIGluIHRoaXMgZ3JvdXAgKi8KLQlfX3UxNiBjaGFpbjsJCS8qIENoYWluIGZvciB0aGlzIGdyb3VwICovCi0JX191MTYgcmVzZXJ2ZWQxOwotCV9fdTMyIHJlc2VydmVkMjsKLX07Ci0KLSNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0VYVEVORAlfSU9XKCdvJywgMSwgaW50KQotI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURECV9JT1coJ28nLCAyLHN0cnVjdCBvY2ZzMl9uZXdfZ3JvdXBfaW5wdXQpCi0jZGVmaW5lIE9DRlMyX0lPQ19HUk9VUF9BREQ2NAlfSU9XKCdvJywgMyxzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQotCi0vKiBVc2VkIHRvIHBhc3MgMiBmaWxlIG5hbWVzIHRvIHJlZmxpbmsuICovCi1zdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMgewotCV9fdTY0IG9sZF9wYXRoOwotCV9fdTY0IG5ld19wYXRoOwotCV9fdTY0IHByZXNlcnZlOwotfTsKLSNkZWZpbmUgT0NGUzJfSU9DX1JFRkxJTksJX0lPVygnbycsIDQsIHN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cykKLQotCi0vKgogICogSm91cm5hbCBGbGFncyAob2NmczJfZGlub2RlLmlkMS5qb3VybmFsMS5pX2ZsYWdzKQogICovCiAjZGVmaW5lIE9DRlMyX0pPVVJOQUxfRElSVFlfRkwJKDB4MDAwMDAwMDEpCS8qIEpvdXJuYWwgbmVlZHMgcmVjb3ZlcnkgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2lvY3RsLmggYi9mcy9vY2ZzMi9vY2ZzMl9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzQyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9pb2N0bC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiBvY2ZzMl9pb2N0bC5oCisgKgorICogRGVmaW5lcyBPQ0ZTMiBpb2N0bHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBPQ0ZTMl9JT0NUTF9ICisjZGVmaW5lIE9DRlMyX0lPQ1RMX0gKKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgT0NGUzJfSU9DX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBsb25nKQorI2RlZmluZSBPQ0ZTMl9JT0NfU0VURkxBR1MJX0lPVygnZicsIDIsIGxvbmcpCisjZGVmaW5lIE9DRlMyX0lPQzMyX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBpbnQpCisjZGVmaW5lIE9DRlMyX0lPQzMyX1NFVEZMQUdTCV9JT1coJ2YnLCAyLCBpbnQpCisKKy8qCisgKiBTcGFjZSByZXNlcnZhdGlvbiAvIGFsbG9jYXRpb24gLyBmcmVlIGlvY3RscyBhbmQgYXJndW1lbnQgc3RydWN0dXJlCisgKiBhcmUgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFhGUy4KKyAqCisgKiBBTExPQ1NQKiBhbmQgRlJFRVNQKiBhcmUgbm90IGFuZCB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZCwgYnV0IGFyZQorICogaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgorICovCitzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdiB7CisJX19zMTYJCWxfdHlwZTsKKwlfX3MxNgkJbF93aGVuY2U7CisJX19zNjQJCWxfc3RhcnQ7CisJX19zNjQJCWxfbGVuOwkJLyogbGVuID09IDAgbWVhbnMgdW50aWwgZW5kIG9mIGZpbGUgKi8KKwlfX3MzMgkJbF9zeXNpZDsKKwlfX3UzMgkJbF9waWQ7CisJX19zMzIJCWxfcGFkWzRdOwkvKiByZXNlcnZlIGFyZWEJCQkgICAgKi8KK307CisKKyNkZWZpbmUgT0NGUzJfSU9DX0FMTE9DU1AJCV9JT1cgKCdYJywgMTAsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQorI2RlZmluZSBPQ0ZTMl9JT0NfRlJFRVNQCQlfSU9XICgnWCcsIDExLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKyNkZWZpbmUgT0NGUzJfSU9DX1JFU1ZTUAkJX0lPVyAoJ1gnLCA0MCwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCisjZGVmaW5lIE9DRlMyX0lPQ19VTlJFU1ZTUAlfSU9XICgnWCcsIDQxLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKyNkZWZpbmUgT0NGUzJfSU9DX0FMTE9DU1A2NAlfSU9XICgnWCcsIDM2LCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKyNkZWZpbmUgT0NGUzJfSU9DX0ZSRUVTUDY0CV9JT1cgKCdYJywgMzcsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQorI2RlZmluZSBPQ0ZTMl9JT0NfUkVTVlNQNjQJX0lPVyAoJ1gnLCA0Miwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCisjZGVmaW5lIE9DRlMyX0lPQ19VTlJFU1ZTUDY0CV9JT1cgKCdYJywgNDMsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQorCisvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCitzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0IHsKKwlfX3U2NCBncm91cDsJCS8qIEdyb3VwIGRlc2NyaXB0b3IncyBibGtuby4gKi8KKwlfX3UzMiBjbHVzdGVyczsJCS8qIFRvdGFsIG51bWJlciBvZiBjbHVzdGVycyBpbiB0aGlzIGdyb3VwICovCisJX191MzIgZnJlZXM7CQkvKiBUb3RhbCBmcmVlIGNsdXN0ZXJzIGluIHRoaXMgZ3JvdXAgKi8KKwlfX3UxNiBjaGFpbjsJCS8qIENoYWluIGZvciB0aGlzIGdyb3VwICovCisJX191MTYgcmVzZXJ2ZWQxOworCV9fdTMyIHJlc2VydmVkMjsKK307CisKKyNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0VYVEVORAlfSU9XKCdvJywgMSwgaW50KQorI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURECV9JT1coJ28nLCAyLHN0cnVjdCBvY2ZzMl9uZXdfZ3JvdXBfaW5wdXQpCisjZGVmaW5lIE9DRlMyX0lPQ19HUk9VUF9BREQ2NAlfSU9XKCdvJywgMyxzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQorCisvKiBVc2VkIHRvIHBhc3MgMiBmaWxlIG5hbWVzIHRvIHJlZmxpbmsuICovCitzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMgeworCV9fdTY0IG9sZF9wYXRoOworCV9fdTY0IG5ld19wYXRoOworCV9fdTY0IHByZXNlcnZlOworfTsKKyNkZWZpbmUgT0NGUzJfSU9DX1JFRkxJTksJX0lPVygnbycsIDQsIHN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cykKKworI2VuZGlmIC8qIE9DRlMyX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2xvY2tpbmd2ZXIuaCBiL2ZzL29jZnMyL29jZnMyX2xvY2tpbmd2ZXIuaAppbmRleCA4MmQ1ZWVhLi4yZTQ1YzhkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraW5ndmVyLmgKKysrIGIvZnMvb2NmczIvb2NmczJfbG9ja2luZ3Zlci5oCkBAIC0yMyw2ICsyMyw4IEBACiAvKgogICogVGhlIHByb3RvY29sIHZlcnNpb24gZm9yIG9jZnMyIGNsdXN0ZXIgbG9ja2luZy4gIFNlZSBkbG1nbHVlLmMgZm9yCiAgKiBtb3JlIGRldGFpbHMuCisgKgorICogMS4wIC0gSW5pdGlhbCBsb2NraW5nIHZlcnNpb24gZnJvbSBvY2ZzMiAxLjQuCiAgKi8KICNkZWZpbmUgT0NGUzJfTE9DS0lOR19QUk9UT0NPTF9NQUpPUiAxCiAjZGVmaW5lIE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IgMApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCA4YWU2NWM5Li5mYjZhYTdhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7CiAJbWVtc2V0KHJiLCAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCXN0cmNweSgodm9pZCAqKXJiLCBPQ0ZTMl9SRUZDT1VOVF9CTE9DS19TSUdOQVRVUkUpOwotCXJiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihtZXRhX2FjLT5hY19hbGxvY19zbG90KTsKIAlyYi0+cmZfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKIAlyYi0+cmZfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOwpAQCAtMTMzMCw3ICsxMzMwLDcgQEAKIAltZW1jcHkobmV3X2JoLT5iX2RhdGEsIHJlZl9yb290X2JoLT5iX2RhdGEsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAluZXdfcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7Ci0JbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYoT0NGUzJfU0Ioc2IpLT5zbG90X251bSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYobWV0YV9hYy0+YWNfYWxsb2Nfc2xvdCk7CiAJbmV3X3JiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOwogCW5ld19yYi0+cmZfYmxrbm8gPSBjcHVfdG9fbGU2NChibGtubyk7CiAJbmV3X3JiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIoMCk7CkBAIC0xNTc2LDcgKzE1NzYsNyBAQAogCW5ld19yYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKIAltZW1zZXQobmV3X3JiLCAwLCBzYi0+c19ibG9ja3NpemUpOwogCXN0cmNweSgodm9pZCAqKW5ld19yYiwgT0NGUzJfUkVGQ09VTlRfQkxPQ0tfU0lHTkFUVVJFKTsKLQluZXdfcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihPQ0ZTMl9TQihzYiktPnNsb3RfbnVtKTsKKwluZXdfcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihtZXRhX2FjLT5hY19hbGxvY19zbG90KTsKIAluZXdfcmItPnJmX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7CiAJbmV3X3JiLT5yZl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIoT0NGUzJfU0Ioc2IpLT5mc19nZW5lcmF0aW9uKTsKIAluZXdfcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tfbzJjYi5jIGIvZnMvb2NmczIvc3RhY2tfbzJjYi5jCmluZGV4IDMwMzhjOTIuLjcwMjBlMTIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrX28yY2IuYworKysgYi9mcy9vY2ZzMi9zdGFja19vMmNiLmMKQEAgLTE2MSwyNCArMTYxLDIzIEBACiAKIHN0YXRpYyB2b2lkIG8yZGxtX2xvY2tfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnKQogewotCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOworCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiA9IGFzdGFyZzsKIAotCW8yY2Jfc3RhY2suc3BfcHJvdG8tPmxwX2xvY2tfYXN0KGFzdGFyZyk7CisJbGtzYi0+bGtzYl9jb25uLT5jY19wcm90by0+bHBfbG9ja19hc3QobGtzYik7CiB9CiAKIHN0YXRpYyB2b2lkIG8yZGxtX2Jsb2NraW5nX2FzdF93cmFwcGVyKHZvaWQgKmFzdGFyZywgaW50IGxldmVsKQogewotCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOworCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiA9IGFzdGFyZzsKIAotCW8yY2Jfc3RhY2suc3BfcHJvdG8tPmxwX2Jsb2NraW5nX2FzdChhc3RhcmcsIGxldmVsKTsKKwlsa3NiLT5sa3NiX2Nvbm4tPmNjX3Byb3RvLT5scF9ibG9ja2luZ19hc3QobGtzYiwgbGV2ZWwpOwogfQogCiBzdGF0aWMgdm9pZCBvMmRsbV91bmxvY2tfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnLCBlbnVtIGRsbV9zdGF0dXMgc3RhdHVzKQogeworCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiA9IGFzdGFyZzsKIAlpbnQgZXJyb3IgPSBkbG1fc3RhdHVzX3RvX2Vycm5vKHN0YXR1cyk7CiAKLQlCVUdfT04obzJjYl9zdGFjay5zcF9wcm90byA9PSBOVUxMKTsKLQogCS8qCiAJICogSW4gbzJkbG0sIHlvdSBjYW4gZ2V0IGJvdGggdGhlIGxvY2tfYXN0KCkgZm9yIHRoZSBsb2NrIGJlaW5nCiAJICogZ3JhbnRlZCBhbmQgdGhlIHVubG9ja19hc3QoKSBmb3IgdGhlIENBTkNFTCBmYWlsaW5nLiAgQQpAQCAtMTkzLDE2ICsxOTIsMTUgQEAKIAlpZiAoc3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkKIAkJcmV0dXJuOwogCi0JbzJjYl9zdGFjay5zcF9wcm90by0+bHBfdW5sb2NrX2FzdChhc3RhcmcsIGVycm9yKTsKKwlsa3NiLT5sa3NiX2Nvbm4tPmNjX3Byb3RvLT5scF91bmxvY2tfYXN0KGxrc2IsIGVycm9yKTsKIH0KIAogc3RhdGljIGludCBvMmNiX2RsbV9sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkgaW50IG1vZGUsCi0JCQkgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCQkgc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAogCQkJIHUzMiBmbGFncywKIAkJCSB2b2lkICpuYW1lLAotCQkJIHVuc2lnbmVkIGludCBuYW1lbGVuLAotCQkJIHZvaWQgKmFzdGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgbmFtZWxlbikKIHsKIAllbnVtIGRsbV9zdGF0dXMgc3RhdHVzOwogCWludCBvMmRsbV9tb2RlID0gbW9kZV90b19vMmRsbShtb2RlKTsKQEAgLTIxMSwyOCArMjA5LDI3IEBACiAKIAlzdGF0dXMgPSBkbG1sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgbzJkbG1fbW9kZSwgJmxrc2ItPmxrc2JfbzJkbG0sCiAJCQkgbzJkbG1fZmxhZ3MsIG5hbWUsIG5hbWVsZW4sCi0JCQkgbzJkbG1fbG9ja19hc3Rfd3JhcHBlciwgYXN0YXJnLAorCQkJIG8yZGxtX2xvY2tfYXN0X3dyYXBwZXIsIGxrc2IsCiAJCQkgbzJkbG1fYmxvY2tpbmdfYXN0X3dyYXBwZXIpOwogCXJldCA9IGRsbV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG8yY2JfZGxtX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAotCQkJICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCi0JCQkgICB1MzIgZmxhZ3MsCi0JCQkgICB2b2lkICphc3RhcmcpCisJCQkgICBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCQkgICB1MzIgZmxhZ3MpCiB7CiAJZW51bSBkbG1fc3RhdHVzIHN0YXR1czsKIAlpbnQgbzJkbG1fZmxhZ3MgPSBmbGFnc190b19vMmRsbShmbGFncyk7CiAJaW50IHJldDsKIAogCXN0YXR1cyA9IGRsbXVubG9jayhjb25uLT5jY19sb2Nrc3BhY2UsICZsa3NiLT5sa3NiX28yZGxtLAotCQkJICAgbzJkbG1fZmxhZ3MsIG8yZGxtX3VubG9ja19hc3Rfd3JhcHBlciwgYXN0YXJnKTsKKwkJCSAgIG8yZGxtX2ZsYWdzLCBvMmRsbV91bmxvY2tfYXN0X3dyYXBwZXIsIGxrc2IpOwogCXJldCA9IGRsbV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG8yY2JfZGxtX2xvY2tfc3RhdHVzKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQorc3RhdGljIGludCBvMmNiX2RsbV9sb2NrX3N0YXR1cyhzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJcmV0dXJuIGRsbV9zdGF0dXNfdG9fZXJybm8obGtzYi0+bGtzYl9vMmRsbS5zdGF0dXMpOwogfQpAQCAtMjQyLDE3ICsyMzksMTcgQEAKICAqIGNvbnRlbnRzLCBpdCB3aWxsIHplcm8gb3V0IHRoZSBMVkIuICBUaHVzIHRoZSBjYWxsZXIgY2FuIGFsd2F5cyB0cnVzdAogICogdGhlIGNvbnRlbnRzLgogICovCi1zdGF0aWMgaW50IG8yY2JfZGxtX2x2Yl92YWxpZCh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3N0YXRpYyBpbnQgbzJjYl9kbG1fbHZiX3ZhbGlkKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgKm8yY2JfZGxtX2x2Yih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3N0YXRpYyB2b2lkICpvMmNiX2RsbV9sdmIoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCXJldHVybiAodm9pZCAqKShsa3NiLT5sa3NiX28yZGxtLmx2Yik7CiB9CiAKLXN0YXRpYyB2b2lkIG8yY2JfZHVtcF9sa3NiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQorc3RhdGljIHZvaWQgbzJjYl9kdW1wX2xrc2Ioc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCWRsbV9wcmludF9vbmVfbG9jayhsa3NiLT5sa3NiX28yZGxtLmxvY2tpZCk7CiB9CkBAIC0yODAsNyArMjc3LDcgQEAKIAlzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gZnNfdmVyc2lvbjsKIAogCUJVR19PTihjb25uID09IE5VTEwpOwotCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOworCUJVR19PTihjb25uLT5jY19wcm90byA9PSBOVUxMKTsKIAogCS8qIGZvciBub3cgd2Ugb25seSBoYXZlIG9uZSBjbHVzdGVyL25vZGUsIG1ha2Ugc3VyZSB3ZSBzZWUgaXQKIAkgKiBpbiB0aGUgaGVhcnRiZWF0IHVuaXZlcnNlICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja191c2VyLmMgYi9mcy9vY2ZzMi9zdGFja191c2VyLmMKaW5kZXggZGE3OGEyYS4uNWFlODgxMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tfdXNlci5jCisrKyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJvY2ZzMi5oIiAgLyogRm9yIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqLwogI2luY2x1ZGUgInN0YWNrZ2x1ZS5oIgogCiAjaW5jbHVkZSA8bGludXgvZGxtX3Bsb2NrLmg+CkBAIC02Myw4ICs2Miw4IEBACiAgKiBuZWdvdGlhdGVkIGJ5IHRoZSBjbGllbnQuICBUaGUgY2xpZW50IG5lZ290aWF0ZXMgYmFzZWQgb24gdGhlIG1heGltdW0KICAqIHZlcnNpb24gYWR2ZXJ0aXNlZCBpbiAvc3lzL2ZzL29jZnMyL21heF9sb2NraW5nX3Byb3RvY29sLiAgVGhlIG1ham9yCiAgKiBudW1iZXIgZnJvbSB0aGUgIlNFVFYiIG1lc3NhZ2UgbXVzdCBtYXRjaAotICogb2NmczJfdXNlcl9wbHVnaW4uc3BfcHJvdG8tPmxwX21heF92ZXJzaW9uLnB2X21ham9yLCBhbmQgdGhlIG1pbm9yIG51bWJlcgotICogbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gLi4uLT5scF9tYXhfdmVyc2lvbi5wdl9taW5vci4KKyAqIG9jZnMyX3VzZXJfcGx1Z2luLnNwX21heF9wcm90by5wdl9tYWpvciwgYW5kIHRoZSBtaW5vciBudW1iZXIKKyAqIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIC4uLnNwX21heF92ZXJzaW9uLnB2X21pbm9yLgogICoKICAqIE9uY2UgdGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBzZXQsIG1vdW50cyB3aWxsIGJlIGFsbG93ZWQuICBGcm9tIHRoaXMKICAqIHBvaW50IG9uLCB0aGUgIkRPV04iIG1lc3NhZ2UgY2FuIGJlIHNlbnQgZm9yIG5vZGUgZG93biBub3RpZmljYXRpb24uCkBAIC00MDEsNyArNDAwLDcgQEAKIAljaGFyICpwdHIgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9jb250cm9sX3ByaXZhdGUgKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gKm1heCA9Ci0JCSZvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90by0+bHBfbWF4X3ZlcnNpb247CisJCSZvY2ZzMl91c2VyX3BsdWdpbi5zcF9tYXhfcHJvdG87CiAKIAlpZiAob2NmczJfY29udHJvbF9nZXRfaGFuZHNoYWtlX3N0YXRlKGZpbGUpICE9CiAJICAgIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1BST1RPQ09MKQpAQCAtNjY0LDE4ICs2NjMsMTAgQEAKIAkJICAgICAgIC1yYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGxtX2xrc2IgKmZzZGxtX2FzdGFyZ190b19sa3NiKHZvaWQgKmFzdGFyZykKLXsKLQlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKnJlcyA9IGFzdGFyZzsKLQlyZXR1cm4gJnJlcy0+bF9sa3NiLmxrc2JfZnNkbG07Ci19Ci0KIHN0YXRpYyB2b2lkIGZzZGxtX2xvY2tfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnKQogewotCXN0cnVjdCBkbG1fbGtzYiAqbGtzYiA9IGZzZGxtX2FzdGFyZ190b19sa3NiKGFzdGFyZyk7Ci0JaW50IHN0YXR1cyA9IGxrc2ItPnNiX3N0YXR1czsKLQotCUJVR19PTihvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90byA9PSBOVUxMKTsKKwlzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IgPSBhc3Rhcmc7CisJaW50IHN0YXR1cyA9IGxrc2ItPmxrc2JfZnNkbG0uc2Jfc3RhdHVzOwogCiAJLyoKIAkgKiBGb3Igbm93IHdlJ3JlIHB1bnRpbmcgb24gdGhlIGlzc3VlIG9mIG90aGVyIG5vbi1zdGFuZGFyZCBlcnJvcnMKQEAgLTY4OCwyNSArNjc5LDI0IEBACiAJICovCiAKIAlpZiAoc3RhdHVzID09IC1ETE1fRVVOTE9DSyB8fCBzdGF0dXMgPT0gLURMTV9FQ0FOQ0VMKQotCQlvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90by0+bHBfdW5sb2NrX2FzdChhc3RhcmcsIDApOworCQlsa3NiLT5sa3NiX2Nvbm4tPmNjX3Byb3RvLT5scF91bmxvY2tfYXN0KGxrc2IsIDApOwogCWVsc2UKLQkJb2NmczJfdXNlcl9wbHVnaW4uc3BfcHJvdG8tPmxwX2xvY2tfYXN0KGFzdGFyZyk7CisJCWxrc2ItPmxrc2JfY29ubi0+Y2NfcHJvdG8tPmxwX2xvY2tfYXN0KGxrc2IpOwogfQogCiBzdGF0aWMgdm9pZCBmc2RsbV9ibG9ja2luZ19hc3Rfd3JhcHBlcih2b2lkICphc3RhcmcsIGludCBsZXZlbCkKIHsKLQlCVUdfT04ob2NmczJfdXNlcl9wbHVnaW4uc3BfcHJvdG8gPT0gTlVMTCk7CisJc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiID0gYXN0YXJnOwogCi0Jb2NmczJfdXNlcl9wbHVnaW4uc3BfcHJvdG8tPmxwX2Jsb2NraW5nX2FzdChhc3RhcmcsIGxldmVsKTsKKwlsa3NiLT5sa3NiX2Nvbm4tPmNjX3Byb3RvLT5scF9ibG9ja2luZ19hc3QobGtzYiwgbGV2ZWwpOwogfQogCiBzdGF0aWMgaW50IHVzZXJfZGxtX2xvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKIAkJCSBpbnQgbW9kZSwKLQkJCSB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCiAJCQkgdTMyIGZsYWdzLAogCQkJIHZvaWQgKm5hbWUsCi0JCQkgdW5zaWduZWQgaW50IG5hbWVsZW4sCi0JCQkgdm9pZCAqYXN0YXJnKQorCQkJIHVuc2lnbmVkIGludCBuYW1lbGVuKQogewogCWludCByZXQ7CiAKQEAgLTcxNiwzNiArNzA2LDM1IEBACiAKIAlyZXQgPSBkbG1fbG9jayhjb25uLT5jY19sb2Nrc3BhY2UsIG1vZGUsICZsa3NiLT5sa3NiX2ZzZGxtLAogCQkgICAgICAgZmxhZ3N8RExNX0xLRl9OT0RMQ0tXVCwgbmFtZSwgbmFtZWxlbiwgMCwKLQkJICAgICAgIGZzZGxtX2xvY2tfYXN0X3dyYXBwZXIsIGFzdGFyZywKKwkJICAgICAgIGZzZGxtX2xvY2tfYXN0X3dyYXBwZXIsIGxrc2IsCiAJCSAgICAgICBmc2RsbV9ibG9ja2luZ19hc3Rfd3JhcHBlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB1c2VyX2RsbV91bmxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKLQkJCSAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAotCQkJICAgdTMyIGZsYWdzLAotCQkJICAgdm9pZCAqYXN0YXJnKQorCQkJICAgc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJICAgdTMyIGZsYWdzKQogewogCWludCByZXQ7CiAKIAlyZXQgPSBkbG1fdW5sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgbGtzYi0+bGtzYl9mc2RsbS5zYl9sa2lkLAotCQkJIGZsYWdzLCAmbGtzYi0+bGtzYl9mc2RsbSwgYXN0YXJnKTsKKwkJCSBmbGFncywgJmxrc2ItPmxrc2JfZnNkbG0sIGxrc2IpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdXNlcl9kbG1fbG9ja19zdGF0dXModW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgaW50IHVzZXJfZGxtX2xvY2tfc3RhdHVzKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlyZXR1cm4gbGtzYi0+bGtzYl9mc2RsbS5zYl9zdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgdXNlcl9kbG1fbHZiX3ZhbGlkKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQorc3RhdGljIGludCB1c2VyX2RsbV9sdmJfdmFsaWQoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCWludCBpbnZhbGlkID0gbGtzYi0+bGtzYl9mc2RsbS5zYl9mbGFncyAmIERMTV9TQkZfVkFMTk9UVkFMSUQ7CiAKIAlyZXR1cm4gIWludmFsaWQ7CiB9CiAKLXN0YXRpYyB2b2lkICp1c2VyX2RsbV9sdmIodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgdm9pZCAqdXNlcl9kbG1fbHZiKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlpZiAoIWxrc2ItPmxrc2JfZnNkbG0uc2JfbHZicHRyKQogCQlsa3NiLT5sa3NiX2ZzZGxtLnNiX2x2YnB0ciA9IChjaGFyICopbGtzYiArCkBAIC03NTMsNyArNzQyLDcgQEAKIAlyZXR1cm4gKHZvaWQgKikobGtzYi0+bGtzYl9mc2RsbS5zYl9sdmJwdHIpOwogfQogCi1zdGF0aWMgdm9pZCB1c2VyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgdm9pZCB1c2VyX2RsbV9kdW1wX2xrc2Ioc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja2dsdWUuYyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCmluZGV4IGYzZGYwYmEuLjM5YWJmODkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIE9DRlMyX1NUQUNLX1BMVUdJTl9VU0VSCQkidXNlciIKICNkZWZpbmUgT0NGUzJfTUFYX0hCX0NUTF9QQVRICQkyNTYKIAotc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpscHJvdG87CitzdGF0aWMgc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gbG9ja2luZ19tYXhfdmVyc2lvbjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2NmczJfc3RhY2tfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKG9jZnMyX3N0YWNrX2xpc3QpOwogc3RhdGljIGNoYXIgY2x1c3Rlcl9zdGFja19uYW1lW09DRlMyX1NUQUNLX0xBQkVMX0xFTiArIDFdOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJc3Bpbl9sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKIAlpZiAoIW9jZnMyX3N0YWNrX2xvb2t1cChwbHVnaW4tPnNwX25hbWUpKSB7CiAJCXBsdWdpbi0+c3BfY291bnQgPSAwOwotCQlwbHVnaW4tPnNwX3Byb3RvID0gbHByb3RvOworCQlwbHVnaW4tPnNwX21heF9wcm90byA9IGxvY2tpbmdfbWF4X3ZlcnNpb247CiAJCWxpc3RfYWRkKCZwbHVnaW4tPnNwX2xpc3QsICZvY2ZzMl9zdGFja19saXN0KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAib2NmczI6IFJlZ2lzdGVyZWQgY2x1c3RlciBpbnRlcmZhY2UgJXNcbiIsCiAJCSAgICAgICBwbHVnaW4tPnNwX25hbWUpOwpAQCAtMjEzLDc3ICsyMTMsNzYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3N0YWNrX2dsdWVfdW5yZWdpc3Rlcik7CiAKLXZvaWQgb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbG9ja2luZ19wcm90b2NvbChzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqcHJvdG8pCit2b2lkIG9jZnMyX3N0YWNrX2dsdWVfc2V0X21heF9wcm90b192ZXJzaW9uKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uICptYXhfcHJvdG8pCiB7CiAJc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiAqcDsKIAotCUJVR19PTihwcm90byA9PSBOVUxMKTsKLQogCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7Ci0JQlVHX09OKGFjdGl2ZV9zdGFjayAhPSBOVUxMKTsKKwlpZiAobWVtY21wKG1heF9wcm90bywgJmxvY2tpbmdfbWF4X3ZlcnNpb24sCisJCSAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbikpKSB7CisJCUJVR19PTihsb2NraW5nX21heF92ZXJzaW9uLnB2X21ham9yICE9IDApOwogCi0JbHByb3RvID0gcHJvdG87Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmb2NmczJfc3RhY2tfbGlzdCwgc3BfbGlzdCkgewotCQlwLT5zcF9wcm90byA9IGxwcm90bzsKKwkJbG9ja2luZ19tYXhfdmVyc2lvbiA9ICptYXhfcHJvdG87CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm9jZnMyX3N0YWNrX2xpc3QsIHNwX2xpc3QpIHsKKwkJCXAtPnNwX21heF9wcm90byA9IGxvY2tpbmdfbWF4X3ZlcnNpb247CisJCX0KIAl9Ci0KIAlzcGluX3VubG9jaygmb2NmczJfc3RhY2tfbG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9zdGFja19nbHVlX3NldF9sb2NraW5nX3Byb3RvY29sKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3N0YWNrX2dsdWVfc2V0X21heF9wcm90b192ZXJzaW9uKTsKIAogCiAvKgotICogVGhlIG9jZnMyX2RsbV9sb2NrKCkgYW5kIG9jZnMyX2RsbV91bmxvY2soKSBmdW5jdGlvbnMgdGFrZQotICogInN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqYXN0YXJnIiBpbnN0ZWFkIG9mICJ2b2lkICphc3RhcmciIGJlY2F1c2UgdGhlCi0gKiB1bmRlcmx5aW5nIHN0YWNrIHBsdWdpbnMgbmVlZCB0byBwaWxmZXIgdGhlIGxrc2Igb2ZmIG9mIHRoZSBsb2NrX3Jlcy4KLSAqIElmIHNvbWUgb3RoZXIgc3RydWN0dXJlIG5lZWRzIHRvIGJlIHBhc3NlZCBhcyBhbiBhc3RhcmcsIHRoZSBwbHVnaW5zCi0gKiB3aWxsIG5lZWQgdG8gYmUgZ2l2ZW4gYSBkaWZmZXJlbnQgYXZlbnVlIHRvIHRoZSBsa3NiLgorICogVGhlIG9jZnMyX2RsbV9sb2NrKCkgYW5kIG9jZnMyX2RsbV91bmxvY2soKSBmdW5jdGlvbnMgdGFrZSBubyBhcmd1bWVudAorICogZm9yIHRoZSBhc3QgYW5kIGJhc3QgZnVuY3Rpb25zLiAgVGhleSB3aWxsIHBhc3MgdGhlIGxrc2IgdG8gdGhlIGFzdAorICogYW5kIGJhc3QuICBUaGUgY2FsbGVyIGNhbiB3cmFwIHRoZSBsa3NiIHdpdGggdGhlaXIgb3duIHN0cnVjdHVyZSB0bworICogZ2V0IG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KIGludCBvY2ZzMl9kbG1fbG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAogCQkgICBpbnQgbW9kZSwKLQkJICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCSAgIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKIAkJICAgdTMyIGZsYWdzLAogCQkgICB2b2lkICpuYW1lLAotCQkgICB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKLQkJICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICphc3RhcmcpCisJCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuKQogewotCUJVR19PTihscHJvdG8gPT0gTlVMTCk7Ci0KKwlpZiAoIWxrc2ItPmxrc2JfY29ubikKKwkJbGtzYi0+bGtzYl9jb25uID0gY29ubjsKKwllbHNlCisJCUJVR19PTihsa3NiLT5sa3NiX2Nvbm4gIT0gY29ubik7CiAJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5kbG1fbG9jayhjb25uLCBtb2RlLCBsa3NiLCBmbGFncywKLQkJCQkJICAgICAgbmFtZSwgbmFtZWxlbiwgYXN0YXJnKTsKKwkJCQkJICAgICAgbmFtZSwgbmFtZWxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fbG9jayk7CiAKIGludCBvY2ZzMl9kbG1fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCSAgICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCi0JCSAgICAgdTMyIGZsYWdzLAotCQkgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqYXN0YXJnKQorCQkgICAgIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJICAgICB1MzIgZmxhZ3MpCiB7Ci0JQlVHX09OKGxwcm90byA9PSBOVUxMKTsKKwlCVUdfT04obGtzYi0+bGtzYl9jb25uID09IE5VTEwpOwogCi0JcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5kbG1fdW5sb2NrKGNvbm4sIGxrc2IsIGZsYWdzLCBhc3RhcmcpOworCXJldHVybiBhY3RpdmVfc3RhY2stPnNwX29wcy0+ZGxtX3VubG9jayhjb25uLCBsa3NiLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fdW5sb2NrKTsKIAotaW50IG9jZnMyX2RsbV9sb2NrX3N0YXR1cyh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK2ludCBvY2ZzMl9kbG1fbG9ja19zdGF0dXMoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCXJldHVybiBhY3RpdmVfc3RhY2stPnNwX29wcy0+bG9ja19zdGF0dXMobGtzYik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fbG9ja19zdGF0dXMpOwogCi1pbnQgb2NmczJfZGxtX2x2Yl92YWxpZCh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK2ludCBvY2ZzMl9kbG1fbHZiX3ZhbGlkKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmx2Yl92YWxpZChsa3NiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9sdmJfdmFsaWQpOwogCi12b2lkICpvY2ZzMl9kbG1fbHZiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQordm9pZCAqb2NmczJfZGxtX2x2YihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5sb2NrX2x2Yihsa3NiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9sdmIpOwogCi12b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit2b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2Ioc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCWFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5kdW1wX2xrc2IobGtzYik7CiB9CkBAIC0zMTIsNiArMzExLDcgQEAKIGludCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3QoY29uc3QgY2hhciAqc3RhY2tfbmFtZSwKIAkJCSAgY29uc3QgY2hhciAqZ3JvdXAsCiAJCQkgIGludCBncm91cGxlbiwKKwkJCSAgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKmxwcm90bywKIAkJCSAgdm9pZCAoKnJlY292ZXJ5X2hhbmRsZXIpKGludCBub2RlX251bSwKIAkJCQkJCSAgIHZvaWQgKnJlY292ZXJ5X2RhdGEpLAogCQkJICB2b2lkICpyZWNvdmVyeV9kYXRhLApAQCAtMzI5LDYgKzMyOSwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAobWVtY21wKCZscHJvdG8tPmxwX21heF92ZXJzaW9uLCAmbG9ja2luZ19tYXhfdmVyc2lvbiwKKwkJICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uKSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKIAluZXdfY29ubiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24pLAogCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfY29ubikgewpAQCAtMzQxLDYgKzM0Nyw3IEBACiAJbmV3X2Nvbm4tPmNjX3JlY292ZXJ5X2hhbmRsZXIgPSByZWNvdmVyeV9oYW5kbGVyOwogCW5ld19jb25uLT5jY19yZWNvdmVyeV9kYXRhID0gcmVjb3ZlcnlfZGF0YTsKIAorCW5ld19jb25uLT5jY19wcm90byA9IGxwcm90bzsKIAkvKiBTdGFydCB0aGUgbmV3IGNvbm5lY3Rpb24gYXQgb3VyIG1heGltdW0gY29tcGF0aWJpbGl0eSBsZXZlbCAqLwogCW5ld19jb25uLT5jY192ZXJzaW9uID0gbHByb3RvLT5scF9tYXhfdmVyc2lvbjsKIApAQCAtMzY2LDYgKzM3MywyNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfY2x1c3Rlcl9jb25uZWN0KTsKIAorLyogVGhlIGNhbGxlciB3aWxsIGVuc3VyZSBhbGwgbm9kZXMgaGF2ZSB0aGUgc2FtZSBjbHVzdGVyIHN0YWNrICovCitpbnQgb2NmczJfY2x1c3Rlcl9jb25uZWN0X2Fnbm9zdGljKGNvbnN0IGNoYXIgKmdyb3VwLAorCQkJCSAgIGludCBncm91cGxlbiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqbHByb3RvLAorCQkJCSAgIHZvaWQgKCpyZWNvdmVyeV9oYW5kbGVyKShpbnQgbm9kZV9udW0sCisJCQkJCQkJICAgIHZvaWQgKnJlY292ZXJ5X2RhdGEpLAorCQkJCSAgIHZvaWQgKnJlY292ZXJ5X2RhdGEsCisJCQkJICAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqKmNvbm4pCit7CisJY2hhciAqc3RhY2tfbmFtZSA9IE5VTEw7CisKKwlpZiAoY2x1c3Rlcl9zdGFja19uYW1lWzBdKQorCQlzdGFja19uYW1lID0gY2x1c3Rlcl9zdGFja19uYW1lOworCXJldHVybiBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Qoc3RhY2tfbmFtZSwgZ3JvdXAsIGdyb3VwbGVuLCBscHJvdG8sCisJCQkJICAgICByZWNvdmVyeV9oYW5kbGVyLCByZWNvdmVyeV9kYXRhLCBjb25uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2NsdXN0ZXJfY29ubmVjdF9hZ25vc3RpYyk7CisKIC8qIElmIGhhbmd1cF9wZW5kaW5nIGlzIDAsIHRoZSBzdGFjayBkcml2ZXIgd2lsbCBiZSBkcm9wcGVkICovCiBpbnQgb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkgICAgIGludCBoYW5ndXBfcGVuZGluZykKQEAgLTQ1MywxMCArNDc4LDEwIEBACiAJc3NpemVfdCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKLQlpZiAobHByb3RvKQorCWlmIChsb2NraW5nX21heF92ZXJzaW9uLnB2X21ham9yKQogCQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1LiV1XG4iLAotCQkJICAgICAgIGxwcm90by0+bHBfbWF4X3ZlcnNpb24ucHZfbWFqb3IsCi0JCQkgICAgICAgbHByb3RvLT5scF9tYXhfdmVyc2lvbi5wdl9taW5vcik7CisJCQkgICAgICAgbG9ja2luZ19tYXhfdmVyc2lvbi5wdl9tYWpvciwKKwkJCSAgICAgICBsb2NraW5nX21heF92ZXJzaW9uLnB2X21pbm9yKTsKIAlzcGluX3VubG9jaygmb2NmczJfc3RhY2tfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjg1LDcgKzcxMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2NmczJfc3RhY2tfZ2x1ZV9leGl0KHZvaWQpCiB7Ci0JbHByb3RvID0gTlVMTDsKKwltZW1zZXQoJmxvY2tpbmdfbWF4X3ZlcnNpb24sIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbikpOworCWxvY2tpbmdfbWF4X3ZlcnNpb24ucHZfbWFqb3IgPSAwOworCWxvY2tpbmdfbWF4X3ZlcnNpb24ucHZfbWlub3IgPSAwOwogCW9jZnMyX3N5c2ZzX2V4aXQoKTsKIAlpZiAob2NmczJfdGFibGVfaGVhZGVyKQogCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShvY2ZzMl90YWJsZV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tnbHVlLmggYi9mcy9vY2ZzMi9zdGFja2dsdWUuaAppbmRleCAwM2E0NGQ2Li44Y2U3Mzk4YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tnbHVlLmgKKysrIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKQEAgLTU2LDE3ICs1Niw2IEBACiB9OwogCiAvKgotICogVGhlIG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgZGVmaW5lcyB0aGUgaGFuZGxlcnMgY2FsbGVkIG9uIG9jZnMyJ3MgYmVoYWxmLgotICovCi1zdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCB7Ci0Jc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gbHBfbWF4X3ZlcnNpb247Ci0Jdm9pZCAoKmxwX2xvY2tfYXN0KSh2b2lkICphc3RhcmcpOwotCXZvaWQgKCpscF9ibG9ja2luZ19hc3QpKHZvaWQgKmFzdGFyZywgaW50IGxldmVsKTsKLQl2b2lkICgqbHBfdW5sb2NrX2FzdCkodm9pZCAqYXN0YXJnLCBpbnQgZXJyb3IpOwotfTsKLQotCi0vKgogICogVGhlIGRsbV9sb2Nrc3RhdHVzIHN0cnVjdCBpbmNsdWRlcyBsdmIgc3BhY2UsIGJ1dCB0aGUgZGxtX2xrc2Igc3RydWN0IG9ubHkKICAqIGhhcyBhIHBvaW50ZXIgdG8gc2VwYXJhdGVseSBhbGxvY2F0ZWQgbHZiIHNwYWNlLiAgVGhpcyBzdHJ1Y3QgZXhpc3RzIG9ubHkgdG8KICAqIGluY2x1ZGUgaW4gdGhlIGxrc2IgdW5pb24gdG8gbWFrZSBzcGFjZSBmb3IgYSBjb21iaW5lZCBkbG1fbGtzYiBhbmQgbHZiLgpAQCAtODEsMTMgKzcwLDI4IEBACiAgKiBzaXplIG9mIHRoZSB1bmlvbiBpcyBrbm93bi4gIExvY2sgc3RhdHVzIHN0cnVjdHVyZXMgYXJlIGVtYmVkZGVkIGluCiAgKiBvY2ZzMiBpbm9kZXMuCiAgKi8KLXVuaW9uIG9jZnMyX2RsbV9sa3NiIHsKLQlzdHJ1Y3QgZGxtX2xvY2tzdGF0dXMgbGtzYl9vMmRsbTsKLQlzdHJ1Y3QgZGxtX2xrc2IgbGtzYl9mc2RsbTsKLQlzdHJ1Y3QgZnNkbG1fbGtzYl9wbHVzX2x2YiBwYWRkaW5nOworc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbjsKK3N0cnVjdCBvY2ZzMl9kbG1fbGtzYiB7CisJIHVuaW9uIHsKKwkJIHN0cnVjdCBkbG1fbG9ja3N0YXR1cyBsa3NiX28yZGxtOworCQkgc3RydWN0IGRsbV9sa3NiIGxrc2JfZnNkbG07CisJCSBzdHJ1Y3QgZnNkbG1fbGtzYl9wbHVzX2x2YiBwYWRkaW5nOworCSB9OworCSBzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpsa3NiX2Nvbm47CiB9OwogCiAvKgorICogVGhlIG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgZGVmaW5lcyB0aGUgaGFuZGxlcnMgY2FsbGVkIG9uIG9jZnMyJ3MgYmVoYWxmLgorICovCitzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCB7CisJc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gbHBfbWF4X3ZlcnNpb247CisJdm9pZCAoKmxwX2xvY2tfYXN0KShzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOworCXZvaWQgKCpscF9ibG9ja2luZ19hc3QpKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwgaW50IGxldmVsKTsKKwl2b2lkICgqbHBfdW5sb2NrX2FzdCkoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLCBpbnQgZXJyb3IpOworfTsKKworCisvKgogICogQSBjbHVzdGVyIGNvbm5lY3Rpb24uICBNb3N0bHkgb3BhcXVlIHRvIG9jZnMyLCB0aGUgY29ubmVjdGlvbiBob2xkcwogICogc3RhdGUgZm9yIHRoZSB1bmRlcmx5aW5nIHN0YWNrLiAgb2NmczIgZG9lcyB1c2UgY2NfdmVyc2lvbiB0byBkZXRlcm1pbmUKICAqIGxvY2tpbmcgY29tcGF0aWJpbGl0eS4KQEAgLTk2LDYgKzEwMCw3IEBACiAJY2hhciBjY19uYW1lW0dST1VQX05BTUVfTUFYXTsKIAlpbnQgY2NfbmFtZWxlbjsKIAlzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiBjY192ZXJzaW9uOworCXN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpjY19wcm90bzsKIAl2b2lkICgqY2NfcmVjb3ZlcnlfaGFuZGxlcikoaW50IG5vZGVfbnVtLCB2b2lkICpyZWNvdmVyeV9kYXRhKTsKIAl2b2lkICpjY19yZWNvdmVyeV9kYXRhOwogCXZvaWQgKmNjX2xvY2tzcGFjZTsKQEAgLTE1NSwyNyArMTYwLDI5IEBACiAJICoKIAkgKiBhc3QgYW5kIGJhc3QgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgY2FsbCBiZWNhdXNlIHRoZQogCSAqIHN0YWNrIHdpbGwgbGlrZWx5IHdhbnQgdG8gd3JhcCBhc3QgYW5kIGJhc3QgY2FsbHMgYmVmb3JlIHBhc3NpbmcKLQkgKiB0aGVtIHRvIHN0YWNrLT5zcF9wcm90by4KKwkgKiB0aGVtIHRvIHN0YWNrLT5zcF9wcm90by4gIFRoZXJlIGlzIG5vIGFzdGFyZy4gIFRoZSBsa3NiIHdpbGwKKwkgKiBiZSBwYXNzZWQgYmFjayB0byB0aGUgYXN0IGFuZCBiYXN0IGZ1bmN0aW9ucy4gIFRoZSBjYWxsZXIgY2FuCisJICogdXNlIHRoaXMgdG8gZmluZCB0aGVpciBvYmplY3QuCiAJICovCiAJaW50ICgqZGxtX2xvY2spKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQlpbnQgbW9kZSwKLQkJCXVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAogCQkJdTMyIGZsYWdzLAogCQkJdm9pZCAqbmFtZSwKLQkJCXVuc2lnbmVkIGludCBuYW1lbGVuLAotCQkJdm9pZCAqYXN0YXJnKTsKKwkJCXVuc2lnbmVkIGludCBuYW1lbGVuKTsKIAogCS8qCiAJICogQ2FsbCB0aGUgdW5kZXJseWluZyBkbG0gdW5sb2NrIGZ1bmN0aW9uLiAgVGhlIC0+ZGxtX3VubG9jaygpCiAJICogZnVuY3Rpb24gc2hvdWxkIGNvbnZlcnQgdGhlIGZsYWdzIGFzIGFwcHJvcHJpYXRlLgogCSAqCiAJICogVGhlIHVubG9jayBhc3QgaXMgbm90IHBhc3NlZCwgYXMgdGhlIHN0YWNrIHdpbGwgd2FudCB0byB3cmFwCi0JICogaXQgYmVmb3JlIGNhbGxpbmcgc3RhY2stPnNwX3Byb3RvLT5scF91bmxvY2tfYXN0KCkuCisJICogaXQgYmVmb3JlIGNhbGxpbmcgc3RhY2stPnNwX3Byb3RvLT5scF91bmxvY2tfYXN0KCkuICBUaGVyZSBpcworCSAqIG5vIGFzdGFyZy4gIFRoZSBsa3NiIHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8gdGhlIHVubG9jayBhc3QKKwkgKiBmdW5jdGlvbi4gIFRoZSBjYWxsZXIgY2FuIHVzZSB0aGlzIHRvIGZpbmQgdGhlaXIgb2JqZWN0LgogCSAqLwogCWludCAoKmRsbV91bmxvY2spKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAotCQkJICB1MzIgZmxhZ3MsCi0JCQkgIHZvaWQgKmFzdGFyZyk7CisJCQkgIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSAgdTMyIGZsYWdzKTsKIAogCS8qCiAJICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnQgbG9jayBzdGF0dXMgYmxvY2suICBUaGUgZnMKQEAgLTE4MywxNyArMTkwLDE3IEBACiAJICogY2FsbGJhY2sgcHVsbHMgb3V0IHRoZSBzdGFjay1zcGVjaWZpYyBsa3NiLCBjb252ZXJ0cyB0aGUgc3RhdHVzCiAJICogdG8gYSBwcm9wZXIgZXJybm8sIGFuZCByZXR1cm5zIGl0LgogCSAqLwotCWludCAoKmxvY2tfc3RhdHVzKSh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CisJaW50ICgqbG9ja19zdGF0dXMpKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiAKIAkvKgogCSAqIFJldHVybiBub24temVybyBpZiB0aGUgTFZCIGlzIHZhbGlkLgogCSAqLwotCWludCAoKmx2Yl92YWxpZCkodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOworCWludCAoKmx2Yl92YWxpZCkoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKIAogCS8qCiAJICogUHVsbCB0aGUgbHZiIHBvaW50ZXIgb2ZmIG9mIHRoZSBzdGFjay1zcGVjaWZpYyBsa3NiLgogCSAqLwotCXZvaWQgKigqbG9ja19sdmIpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKwl2b2lkICooKmxvY2tfbHZiKShzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOwogCiAJLyoKIAkgKiBDbHVzdGVyLWF3YXJlIHBvc2l4IGxvY2tzCkBAIC0yMTAsNyArMjE3LDcgQEAKIAkgKiBUaGlzIGlzIGFuIG9wdG9pbmFsIGRlYnVnZ2luZyBob29rLiAgSWYgcHJvdmlkZWQsIHRoZQogCSAqIHN0YWNrIGNhbiBkdW1wIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGxvY2suCiAJICovCi0Jdm9pZCAoKmR1bXBfbGtzYikodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOworCXZvaWQgKCpkdW1wX2xrc2IpKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiB9OwogCiAvKgpAQCAtMjI2LDcgKzIzMyw3IEBACiAJLyogVGhlc2UgYXJlIG1hbmFnZWQgYnkgdGhlIHN0YWNrZ2x1ZSBjb2RlLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc3BfbGlzdDsKIAl1bnNpZ25lZCBpbnQgc3BfY291bnQ7Ci0Jc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKnNwX3Byb3RvOworCXN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIHNwX21heF9wcm90bzsKIH07CiAKIApAQCAtMjM0LDEwICsyNDEsMjIgQEAKIGludCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3QoY29uc3QgY2hhciAqc3RhY2tfbmFtZSwKIAkJCSAgY29uc3QgY2hhciAqZ3JvdXAsCiAJCQkgIGludCBncm91cGxlbiwKKwkJCSAgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKmxwcm90bywKIAkJCSAgdm9pZCAoKnJlY292ZXJ5X2hhbmRsZXIpKGludCBub2RlX251bSwKIAkJCQkJCSAgIHZvaWQgKnJlY292ZXJ5X2RhdGEpLAogCQkJICB2b2lkICpyZWNvdmVyeV9kYXRhLAogCQkJICBzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICoqY29ubik7CisvKgorICogVXNlZCBieSBjYWxsZXJzIHRoYXQgZG9uJ3Qgc3RvcmUgdGhlaXIgc3RhY2sgbmFtZS4gIFRoZXkgbXVzdCBlbnN1cmUKKyAqIGFsbCBub2RlcyBoYXZlIHRoZSBzYW1lIHN0YWNrLgorICovCitpbnQgb2NmczJfY2x1c3Rlcl9jb25uZWN0X2Fnbm9zdGljKGNvbnN0IGNoYXIgKmdyb3VwLAorCQkJCSAgIGludCBncm91cGxlbiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqbHByb3RvLAorCQkJCSAgIHZvaWQgKCpyZWNvdmVyeV9oYW5kbGVyKShpbnQgbm9kZV9udW0sCisJCQkJCQkJICAgIHZvaWQgKnJlY292ZXJ5X2RhdGEpLAorCQkJCSAgIHZvaWQgKnJlY292ZXJ5X2RhdGEsCisJCQkJICAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqKmNvbm4pOwogaW50IG9jZnMyX2NsdXN0ZXJfZGlzY29ubmVjdChzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAogCQkJICAgICBpbnQgaGFuZ3VwX3BlbmRpbmcpOwogdm9pZCBvY2ZzMl9jbHVzdGVyX2hhbmd1cChjb25zdCBjaGFyICpncm91cCwgaW50IGdyb3VwbGVuKTsKQEAgLTI0NiwyNiArMjY1LDI0IEBACiBzdHJ1Y3Qgb2NmczJfbG9ja19yZXM7CiBpbnQgb2NmczJfZGxtX2xvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKIAkJICAgaW50IG1vZGUsCi0JCSAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkgICBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCiAJCSAgIHUzMiBmbGFncywKIAkJICAgdm9pZCAqbmFtZSwKLQkJICAgdW5zaWduZWQgaW50IG5hbWVsZW4sCi0JCSAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqYXN0YXJnKTsKKwkJICAgdW5zaWduZWQgaW50IG5hbWVsZW4pOwogaW50IG9jZnMyX2RsbV91bmxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKLQkJICAgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKLQkJICAgICB1MzIgZmxhZ3MsCi0JCSAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICphc3RhcmcpOworCQkgICAgIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJICAgICB1MzIgZmxhZ3MpOwogCi1pbnQgb2NmczJfZGxtX2xvY2tfc3RhdHVzKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKLWludCBvY2ZzMl9kbG1fbHZiX3ZhbGlkKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKLXZvaWQgKm9jZnMyX2RsbV9sdmIodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOwotdm9pZCBvY2ZzMl9kbG1fZHVtcF9sa3NiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKK2ludCBvY2ZzMl9kbG1fbG9ja19zdGF0dXMoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKK2ludCBvY2ZzMl9kbG1fbHZiX3ZhbGlkKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7Cit2b2lkICpvY2ZzMl9kbG1fbHZiKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7Cit2b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2Ioc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKIAogaW50IG9jZnMyX3N0YWNrX3N1cHBvcnRzX3Bsb2Nrcyh2b2lkKTsKIGludCBvY2ZzMl9wbG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLCB1NjQgaW5vLAogCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogCi12b2lkIG9jZnMyX3N0YWNrX2dsdWVfc2V0X2xvY2tpbmdfcHJvdG9jb2woc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKnByb3RvKTsKK3ZvaWQgb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gKm1heF9wcm90byk7CiAKIAogLyogVXNlZCBieSBzdGFjayBwbHVnaW5zICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5jIGIvZnMvb2NmczIvc3ViYWxsb2MuYwppbmRleCBjMzBiNjQ0Li5jM2M2MGJjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5jCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNkZWZpbmUgQUxMT0NfTkVXX0dST1VQCQkJMHgxCiAjZGVmaW5lIEFMTE9DX0dST1VQU19GUk9NX0dMT0JBTAkweDIKIAotI2RlZmluZSBPQ0ZTMl9NQVhfSU5PREVTX1RPX1NURUFMCTEwMjQKKyNkZWZpbmUgT0NGUzJfTUFYX1RPX1NURUFMCQkxMDI0CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9kZWJ1Z19iZyhzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqYmcpOwogc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2RlYnVnX3N1YmFsbG9jX2lub2RlKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlKTsKQEAgLTYzNywxMiArNjM3LDExMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW9zYi0+c19pbm9kZV9zdGVhbF9zbG90ID0gT0NGUzJfSU5WQUxJRF9TTE9UOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4sIDApOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X21ldGFfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW9zYi0+c19tZXRhX3N0ZWFsX3Nsb3QgPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCWF0b21pY19zZXQoJm9zYi0+c19udW1fbWV0YV9zdG9sZW4sIDApOworfQorCit2b2lkIG9jZnMyX2luaXRfc3RlYWxfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KG9zYik7CisJb2NmczJfaW5pdF9tZXRhX3N0ZWFsX3Nsb3Qob3NiKTsKK30KKworc3RhdGljIHZvaWQgX19vY2ZzMl9zZXRfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IHNsb3QsIGludCB0eXBlKQoreworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJaWYgKHR5cGUgPT0gSU5PREVfQUxMT0NfU1lTVEVNX0lOT0RFKQorCQlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCA9IHNsb3Q7CisJZWxzZSBpZiAodHlwZSA9PSBFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFKQorCQlvc2ItPnNfbWV0YV9zdGVhbF9zbG90ID0gc2xvdDsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl9nZXRfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IHR5cGUpCit7CisJaW50IHNsb3QgPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmICh0eXBlID09IElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSkKKwkJc2xvdCA9IG9zYi0+c19pbm9kZV9zdGVhbF9zbG90OworCWVsc2UgaWYgKHR5cGUgPT0gRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSkKKwkJc2xvdCA9IG9zYi0+c19tZXRhX3N0ZWFsX3Nsb3Q7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJcmV0dXJuIF9fb2NmczJfZ2V0X3N0ZWFsX3Nsb3Qob3NiLCBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2dldF9tZXRhX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJcmV0dXJuIF9fb2NmczJfZ2V0X3N0ZWFsX3Nsb3Qob3NiLCBFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9zdGVhbF9yZXNvdXJjZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCisJCQkJaW50IHR5cGUpCit7CisJaW50IGksIHN0YXR1cyA9IC1FTk9TUEM7CisJaW50IHNsb3QgPSBfX29jZnMyX2dldF9zdGVhbF9zbG90KG9zYiwgdHlwZSk7CisKKwkvKiBTdGFydCB0byBzdGVhbCByZXNvdXJjZSBmcm9tIHRoZSBmaXJzdCBzbG90IGFmdGVyIG91cnMuICovCisJaWYgKHNsb3QgPT0gT0NGUzJfSU5WQUxJRF9TTE9UKQorCQlzbG90ID0gb3NiLT5zbG90X251bSArIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3NiLT5tYXhfc2xvdHM7IGkrKywgc2xvdCsrKSB7CisJCWlmIChzbG90ID09IG9zYi0+bWF4X3Nsb3RzKQorCQkJc2xvdCA9IDA7CisKKwkJaWYgKHNsb3QgPT0gb3NiLT5zbG90X251bSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAorCQkJCQkJICAgICB0eXBlLAorCQkJCQkJICAgICAodTMyKXNsb3QsIE5VTEwsCisJCQkJCQkgICAgIE5PVF9BTExPQ19ORVdfR1JPVVApOworCQlpZiAoc3RhdHVzID49IDApIHsKKwkJCV9fb2NmczJfc2V0X3N0ZWFsX3Nsb3Qob3NiLCBzbG90LCB0eXBlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJb2NmczJfZnJlZV9hY19yZXNvdXJjZShhYyk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBvY2ZzMl9zdGVhbF9pbm9kZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQoreworCXJldHVybiBvY2ZzMl9zdGVhbF9yZXNvdXJjZShvc2IsIGFjLCBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3N0ZWFsX21ldGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQoreworCXJldHVybiBvY2ZzMl9zdGVhbF9yZXNvdXJjZShvc2IsIGFjLCBFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFKTsKK30KKwogaW50IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICAgICBpbnQgYmxvY2tzLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKLQl1MzIgc2xvdDsKKwlpbnQgc2xvdCA9IG9jZnMyX2dldF9tZXRhX3N0ZWFsX3Nsb3Qob3NiKTsKIAogCSphYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEoKmFjKSkgewpAQCAtNjUzLDEyICs3NTQsMzQgQEAKIAogCSgqYWMpLT5hY19iaXRzX3dhbnRlZCA9IGJsb2NrczsKIAkoKmFjKS0+YWNfd2hpY2ggPSBPQ0ZTMl9BQ19VU0VfTUVUQTsKLQlzbG90ID0gb3NiLT5zbG90X251bTsKIAkoKmFjKS0+YWNfZ3JvdXBfc2VhcmNoID0gb2NmczJfYmxvY2tfZ3JvdXBfc2VhcmNoOwogCisJaWYgKHNsb3QgIT0gT0NGUzJfSU5WQUxJRF9TTE9UICYmCisJCWF0b21pY19yZWFkKCZvc2ItPnNfbnVtX21ldGFfc3RvbGVuKSA8IE9DRlMyX01BWF9UT19TVEVBTCkKKwkJZ290byBleHRlbnRfc3RlYWw7CisKKwlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX21ldGFfc3RvbGVuLCAwKTsKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCAoKmFjKSwKIAkJCQkJICAgICBFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFLAotCQkJCQkgICAgIHNsb3QsIE5VTEwsIEFMTE9DX05FV19HUk9VUCk7CisJCQkJCSAgICAgKHUzMilvc2ItPnNsb3RfbnVtLCBOVUxMLAorCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCk7CisKKworCWlmIChzdGF0dXMgPj0gMCkgeworCQlzdGF0dXMgPSAwOworCQlpZiAoc2xvdCAhPSBPQ0ZTMl9JTlZBTElEX1NMT1QpCisJCQlvY2ZzMl9pbml0X21ldGFfc3RlYWxfc2xvdChvc2IpOworCQlnb3RvIGJhaWw7CisJfSBlbHNlIGlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRU5PU1BDKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoKmFjKTsKKworZXh0ZW50X3N0ZWFsOgorCXN0YXR1cyA9IG9jZnMyX3N0ZWFsX21ldGEob3NiLCAqYWMpOworCWF0b21pY19pbmMoJm9zYi0+c19udW1fbWV0YV9zdG9sZW4pOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTY4NSw0MyArODA4LDExIEBACiAJCQkJCWFjKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9zdGVhbF9pbm9kZV9mcm9tX290aGVyX25vZGVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCi17Ci0JaW50IGksIHN0YXR1cyA9IC1FTk9TUEM7Ci0JczE2IHNsb3QgPSBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOwotCi0JLyogU3RhcnQgdG8gc3RlYWwgaW5vZGVzIGZyb20gdGhlIGZpcnN0IHNsb3QgYWZ0ZXIgb3Vycy4gKi8KLQlpZiAoc2xvdCA9PSBPQ0ZTMl9JTlZBTElEX1NMT1QpCi0JCXNsb3QgPSBvc2ItPnNsb3RfbnVtICsgMTsKLQotCWZvciAoaSA9IDA7IGkgPCBvc2ItPm1heF9zbG90czsgaSsrLCBzbG90KyspIHsKLQkJaWYgKHNsb3QgPT0gb3NiLT5tYXhfc2xvdHMpCi0JCQlzbG90ID0gMDsKLQotCQlpZiAoc2xvdCA9PSBvc2ItPnNsb3RfbnVtKQotCQkJY29udGludWU7Ci0KLQkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9zdWJhbGxvY19iaXRzKG9zYiwgYWMsCi0JCQkJCQkgICAgIElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSwKLQkJCQkJCSAgICAgc2xvdCwgTlVMTCwKLQkJCQkJCSAgICAgTk9UX0FMTE9DX05FV19HUk9VUCk7Ci0JCWlmIChzdGF0dXMgPj0gMCkgewotCQkJb2NmczJfc2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiLCBzbG90KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJb2NmczJfZnJlZV9hY19yZXNvdXJjZShhYyk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQogaW50IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKLQlzMTYgc2xvdCA9IG9jZnMyX2dldF9pbm9kZV9zdGVhbF9zbG90KG9zYik7CisJaW50IHNsb3QgPSBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOwogCXU2NCBhbGxvY19ncm91cDsKIAogCSphYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CkBAIC03NTQsMTQgKzg0NSwxNCBAQAogCSAqIG5lZWQgdG8gY2hlY2sgb3VyIHNsb3RzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlzIHNvbWUgc3BhY2UgZm9yIHVzLgogCSAqLwogCWlmIChzbG90ICE9IE9DRlMyX0lOVkFMSURfU0xPVCAmJgotCSAgICBhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSA8IE9DRlMyX01BWF9JTk9ERVNfVE9fU1RFQUwpCisJICAgIGF0b21pY19yZWFkKCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4pIDwgT0NGUzJfTUFYX1RPX1NURUFMKQogCQlnb3RvIGlub2RlX3N0ZWFsOwogCiAJYXRvbWljX3NldCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuLCAwKTsKIAlhbGxvY19ncm91cCA9IG9zYi0+b3NiX2lub2RlX2FsbG9jX2dyb3VwOwogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICphYywKIAkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgb3NiLT5zbG90X251bSwKKwkJCQkJICAgICAodTMyKW9zYi0+c2xvdF9udW0sCiAJCQkJCSAgICAgJmFsbG9jX2dyb3VwLAogCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCB8CiAJCQkJCSAgICAgQUxMT0NfR1JPVVBTX0ZST01fR0xPQkFMKTsKQEAgLTc4OSw3ICs4ODAsNyBAQAogCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoKmFjKTsKIAogaW5vZGVfc3RlYWw6Ci0Jc3RhdHVzID0gb2NmczJfc3RlYWxfaW5vZGVfZnJvbV9vdGhlcl9ub2Rlcyhvc2IsICphYyk7CisJc3RhdHVzID0gb2NmczJfc3RlYWxfaW5vZGUob3NiLCAqYWMpOwogCWF0b21pY19pbmMoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbik7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuaCBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKaW5kZXggOGM5YTc4YS4uZmE2MDcyMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5oCkBAIC01Niw2ICs1Niw3IEBACiAJCQkJIGlzIHRoZSBzYW1lIGFzIH4wIC0gdW5saW1pdGVkICovCiB9OwogCit2b2lkIG9jZnMyX2luaXRfc3RlYWxfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogdm9pZCBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKTsKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FsbG9jX2NvbnRleHRfYml0c19sZWZ0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDc1NWNkNDkuLmRlZTAzMTkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKKyNpbmNsdWRlICJzdWJhbGxvYy5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtMzAxLDkgKzMwMiwxMiBAQAogCiAJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCi0JCQkiJTEwcyA9PiBTbG90OiAlZCAgTnVtU3RvbGVuOiAlZFxuIiwgIlN0ZWFsIiwKKwkJCSIlMTBzID0+IElub2RlU2xvdDogJWQgIFN0b2xlbklub2RlczogJWQsICIKKwkJCSJNZXRhU2xvdDogJWQgIFN0b2xlbk1ldGE6ICVkXG4iLCAiU3RlYWwiLAogCQkJb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QsCi0JCQlhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSk7CisJCQlhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSwKKwkJCW9zYi0+c19tZXRhX3N0ZWFsX3Nsb3QsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5zX251bV9tZXRhX3N0b2xlbikpOwogCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAogCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIk9ycGhhblNjYW4gPT4gIik7CkBAIC0xOTk3LDcgKzIwMDEsNyBAQAogCW9zYi0+YmxvY2tlZF9sb2NrX2NvdW50ID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmb3NiLT5vc2JfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJm9zYi0+b3NiX3hhdHRyX2xvY2spOwotCW9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOworCW9jZnMyX2luaXRfc3RlYWxfc2xvdHMob3NiKTsKIAogCWF0b21pY19zZXQoJm9zYi0+YWxsb2Nfc3RhdHMubW92ZXMsIDApOwogCWF0b21pY19zZXQoJm9zYi0+YWxsb2Nfc3RhdHMubG9jYWxfZGF0YSwgMCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCA4ZmM2ZmIwLi5kMWIwZDM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTExNiwxMCArMTE2LDExIEBACiB9OwogCiBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB7Ci0JaW50IG5hbWVfaW5kZXg7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCB2b2lkICp2YWx1ZTsKLQlzaXplX3QgdmFsdWVfbGVuOworCWludAkJeGlfbmFtZV9pbmRleDsKKwljb25zdCBjaGFyCSp4aV9uYW1lOworCWludAkJeGlfbmFtZV9sZW47CisJY29uc3Qgdm9pZAkqeGlfdmFsdWU7CisJc2l6ZV90CQl4aV92YWx1ZV9sZW47CiB9OwogCiBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHsKQEAgLTEzNyw2ICsxMzgsMTE1IEBACiAJaW50IG5vdF9mb3VuZDsKIH07CiAKKy8qIE9wZXJhdGlvbnMgb24gc3RydWN0IG9jZnMyX3hhX2VudHJ5ICovCitzdHJ1Y3Qgb2NmczJfeGFfbG9jOworc3RydWN0IG9jZnMyX3hhX2xvY19vcGVyYXRpb25zIHsKKwkvKgorCSAqIEpvdXJuYWwgZnVuY3Rpb25zCisJICovCisJaW50ICgqeGxvX2pvdXJuYWxfYWNjZXNzKShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICBpbnQgdHlwZSk7CisJdm9pZCAoKnhsb19qb3VybmFsX2RpcnR5KShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpOworCisJLyoKKwkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBidWZmZXIgaW4gbG9jLT54bF9zdG9yYWdlCisJICogYXQgdGhlIGdpdmVuIG9mZnNldCBmcm9tIGxvYy0+eGxfaGVhZGVyLgorCSAqLworCXZvaWQgKigqeGxvX29mZnNldF9wb2ludGVyKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIGludCBvZmZzZXQpOworCisJLyogQ2FuIHdlIHJldXNlIHRoZSBleGlzdGluZyBlbnRyeSBmb3IgdGhlIG5ldyB2YWx1ZT8gKi8KKwlpbnQgKCp4bG9fY2FuX3JldXNlKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSk7CisKKwkvKiBIb3cgbXVjaCBzcGFjZSBpcyBuZWVkZWQgZm9yIHRoZSBuZXcgdmFsdWU/ICovCisJaW50ICgqeGxvX2NoZWNrX3NwYWNlKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKTsKKworCS8qCisJICogUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IG5hbWUrdmFsdWUgcGFpci4gIFRoaXMgaXMKKwkgKiB0aGUgc3RhcnQgb2Ygb3VyIGRvd253YXJkLWZpbGxpbmcgZnJlZSBzcGFjZS4KKwkgKi8KKwlpbnQgKCp4bG9fZ2V0X2ZyZWVfc3RhcnQpKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYyk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgbmFtZSt2YWx1ZSBhdCB0aGlzIGxvY2F0aW9uLiAgRG8gd2hhdGV2ZXIgaXMKKwkgKiBhcHByb3ByaWF0ZSB3aXRoIHRoZSByZW1haW5pbmcgbmFtZSt2YWx1ZSBwYWlycy4KKwkgKi8KKwl2b2lkICgqeGxvX3dpcGVfbmFtZXZhbHVlKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpOworCisJLyogRmlsbCB4bF9lbnRyeSB3aXRoIGEgbmV3IGVudHJ5ICovCisJdm9pZCAoKnhsb19hZGRfZW50cnkpKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgdTMyIG5hbWVfaGFzaCk7CisKKwkvKiBBZGQgbmFtZSt2YWx1ZSBzdG9yYWdlIHRvIGFuIGVudHJ5ICovCisJdm9pZCAoKnhsb19hZGRfbmFtZXZhbHVlKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIGludCBzaXplKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgdmFsdWUgYnVmJ3MgYWNjZXNzIGFuZCBiaCBmaWVsZHMgZm9yIHRoaXMgZW50cnkuCisJICogb2NmczJfeGFfZmlsbF92YWx1ZV9idWYoKSB3aWxsIGhhbmRsZSB0aGUgeHYgcG9pbnRlci4KKwkgKi8KKwl2b2lkICgqeGxvX2ZpbGxfdmFsdWVfYnVmKShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIpOworfTsKKworLyoKKyAqIERlc2NyaWJlcyBhbiB4YXR0ciBlbnRyeSBsb2NhdGlvbi4gIFRoaXMgaXMgYSBtZW1vcnkgc3RydWN0dXJlCisgKiB0cmFja2luZyB0aGUgb24tZGlzayBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBvY2ZzMl94YV9sb2MgeworCS8qIFRoaXMgeGF0dHIgYmVsb25ncyB0byB0aGlzIGlub2RlICovCisJc3RydWN0IGlub2RlICp4bF9pbm9kZTsKKworCS8qIFRoZSBvY2ZzMl94YXR0cl9oZWFkZXIgaW5zaWRlIHRoZSBvbi1kaXNrIHN0b3JhZ2UuIE5vdCBOVUxMLiAqLworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhsX2hlYWRlcjsKKworCS8qIEJ5dGVzIGZyb20geGxfaGVhZGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0b3JhZ2UgKi8KKwlpbnQgeGxfc2l6ZTsKKworCS8qCisJICogVGhlIG9jZnMyX3hhdHRyX2VudHJ5IHRoaXMgbG9jYXRpb24gZGVzY3JpYmVzLiAgSWYgdGhpcyBpcworCSAqIE5VTEwsIHRoaXMgbG9jYXRpb24gZGVzY3JpYmVzIHRoZSBvbi1kaXNrIHN0cnVjdHVyZSB3aGVyZSBpdAorCSAqIHdvdWxkIGhhdmUgYmVlbi4KKwkgKi8KKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhsX2VudHJ5OworCisJLyoKKwkgKiBJbnRlcm5hbCBob3VzZWtlZXBpbmcKKwkgKi8KKworCS8qIEJ1ZmZlcihzKSBjb250YWluaW5nIHRoaXMgZW50cnkgKi8KKwl2b2lkICp4bF9zdG9yYWdlOworCisJLyogT3BlcmF0aW9ucyBvbiB0aGUgc3RvcmFnZSBiYWNraW5nIHRoaXMgbG9jYXRpb24gKi8KKwljb25zdCBzdHJ1Y3Qgb2NmczJfeGFfbG9jX29wZXJhdGlvbnMgKnhsX29wczsKK307CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIGhvdyBtdWNoIHNwYWNlIGlzIG5lZWRlZCBmb3IgYQorICogZ2l2ZW4gbmFtZSt2YWx1ZSBwYWlyCisgKi8KK3N0YXRpYyBpbnQgbmFtZXZhbHVlX3NpemUoaW50IG5hbWVfbGVuLCB1aW50NjRfdCB2YWx1ZV9sZW4pCit7CisJaWYgKHZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQorCQlyZXR1cm4gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJZWxzZQorCQlyZXR1cm4gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9TSVpFKHZhbHVlX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgbmFtZXZhbHVlX3NpemVfeGkoc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCXJldHVybiBuYW1ldmFsdWVfc2l6ZSh4aS0+eGlfbmFtZV9sZW4sIHhpLT54aV92YWx1ZV9sZW4pOworfQorCitzdGF0aWMgaW50IG5hbWV2YWx1ZV9zaXplX3hlKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJdTY0IHZhbHVlX2xlbiA9IGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKTsKKworCUJVR19PTigodmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpICYmCisJICAgICAgIG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7CisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplKHhlLT54ZV9uYW1lX2xlbiwgdmFsdWVfbGVuKTsKK30KKworCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAogCQkJCQkgICAgIGludCBpbmRleCwKQEAgLTIxMiwxNCArMzIyLDYgQEAKIAlyZXR1cm4gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLyAoMSA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3hhdHRyX21heF94ZV9pbl9idWNrZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQl1MTYgbGVuID0gc2ItPnNfYmxvY2tzaXplIC0KLQkJIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIsIHhoX2VudHJpZXMpOwotCi0JcmV0dXJuIGxlbiAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOwotfQotCiAjZGVmaW5lIGJ1Y2tldF9ibGtubyhfYikgKChfYiktPmJ1X2Joc1swXS0+Yl9ibG9ja25yKQogI2RlZmluZSBidWNrZXRfYmxvY2soX2IsIF9uKSAoKF9iKS0+YnVfYmhzWyhfbildLT5iX2RhdGEpCiAjZGVmaW5lIGJ1Y2tldF94aChfYikgKChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYnVja2V0X2Jsb2NrKChfYiksIDApKQpAQCAtNDYzLDM1ICs1NjUsMjIgQEAKIAlyZXR1cm4gaGFzaDsKIH0KIAotLyoKLSAqIG9jZnMyX3hhdHRyX2hhc2hfZW50cnkoKQotICoKLSAqIENvbXB1dGUgdGhlIGhhc2ggb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlLgotICovCi1zdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl9oYXNoX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAotCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkpCi17Ci0JdTMyIGhhc2ggPSAwOwotCWNoYXIgKm5hbWUgPSAoY2hhciAqKWhlYWRlciArIGxlMTZfdG9fY3B1KGVudHJ5LT54ZV9uYW1lX29mZnNldCk7Ci0KLQloYXNoID0gb2NmczJfeGF0dHJfbmFtZV9oYXNoKGlub2RlLCBuYW1lLCBlbnRyeS0+eGVfbmFtZV9sZW4pOwotCWVudHJ5LT54ZV9uYW1lX2hhc2ggPSBjcHVfdG9fbGUzMihoYXNoKTsKLQotCXJldHVybjsKLX0KLQogc3RhdGljIGludCBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoaW50IG5hbWVfbGVuLCBzaXplX3QgdmFsdWVfbGVuKQogewotCWludCBzaXplID0gMDsKKwlyZXR1cm4gbmFtZXZhbHVlX3NpemUobmFtZV9sZW4sIHZhbHVlX2xlbikgKworCQlzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKK30KIAotCWlmICh2YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIE9DRlMyX1hBVFRSX1NJWkUodmFsdWVfbGVuKTsKLQllbHNlCi0JCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOworc3RhdGljIGludCBvY2ZzMl94aV9lbnRyeV91c2FnZShzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplX3hpKHhpKSArCisJCXNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOworfQogCi0JcmV0dXJuIHNpemU7CitzdGF0aWMgaW50IG9jZnMyX3hlX2VudHJ5X3VzYWdlKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplX3hlKHhlKSArCisJCXNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOwogfQogCiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLApAQCAtMTMwOCw0NTIgKzEzOTcsODk3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl94YXR0cl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCi0JCQkgICAgICAgc2l6ZV90IG9mZnMpCitzdGF0aWMgaW50IG9jZnMyX3hhX2NoZWNrX3NwYWNlX2hlbHBlcihpbnQgbmVlZGVkX3NwYWNlLCBpbnQgZnJlZV9zdGFydCwKKwkJCQkgICAgICAgaW50IG51bV9lbnRyaWVzKQogewotCWludCByZXQgPSAwOwotCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7Ci0Jdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOwotCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJaW50IGZyZWVfc3BhY2U7CiAKLQlyZXQgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi0+dmJfYmgsCi0JCQkgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0JLyogRGVjcmVhc2UgeGF0dHIgY291bnQgKi8KLQlsZTE2X2FkZF9jcHUoJnhzLT5oZWFkZXItPnhoX2NvdW50LCAtMSk7Ci0JLyogUmVtb3ZlIHRoZSB4YXR0ciBlbnRyeSBhbmQgdHJlZSByb290IHdoaWNoIGhhcyBhbHJlYWR5IGJlIHNldCovCi0JbWVtc2V0KCh2b2lkICopeHMtPmhlcmUsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKLQltZW1zZXQodmFsLCAwLCBzaXplKTsKKwlpZiAoIW5lZWRlZF9zcGFjZSkKKwkJcmV0dXJuIDA7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdmItPnZiX2JoKTsKLQlpZiAocmV0IDwgMCkKLQkJbWxvZ19lcnJubyhyZXQpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXBkYXRlX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiLAotCQkJCSAgICBzaXplX3Qgb2ZmcykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAotCQkJICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmcyk7Ci0JeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKLQlpZiAoeGktPnZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKLQkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhzLT5oZXJlLCAxKTsKLQllbHNlCi0JCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMCk7Ci0Jb2NmczJfeGF0dHJfaGFzaF9lbnRyeShpbm9kZSwgeHMtPmhlYWRlciwgeHMtPmhlcmUpOwotCi0JcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHZiLT52Yl9iaCk7Ci0JaWYgKHJldCA8IDApCi0JCW1sb2dfZXJybm8ocmV0KTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoKQotICoKLSAqIFNldCBsYXJnZSBzaXplIHZhbHVlIGluIEIgdHJlZS4KLSAqLwotc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAotCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQsCi0JCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKLQkJCQkJIHNpemVfdCBvZmZzKQotewotCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7Ci0Jdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOwotCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9IE5VTEw7Ci0Jc2l6ZV90IHNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQlpbnQgcmV0ID0gMDsKLQotCW1lbXNldCh2YWwsIDAsIHNpemUpOwotCW1lbWNweSh2YWwsIHhpLT5uYW1lLCBuYW1lX2xlbik7Ci0JeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKLQkJKHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pKTsKLQl4di0+eHJfY2x1c3RlcnMgPSAwOwotCXh2LT54cl9sYXN0X2ViX2JsayA9IDA7Ci0JeHYtPnhyX2xpc3QubF90cmVlX2RlcHRoID0gMDsKLQl4di0+eHJfbGlzdC5sX2NvdW50ID0gY3B1X3RvX2xlMTYoMSk7Ci0JeHYtPnhyX2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gMDsKLQl2Yi0+dmJfeHYgPSB4djsKLQotCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLCB2YiwgeGktPnZhbHVlX2xlbiwgY3R4dCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBvY2ZzMl94YXR0cl91cGRhdGVfZW50cnkoaW5vZGUsIGN0eHQtPmhhbmRsZSwgeGksIHhzLCB2Yiwgb2Zmcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCBjdHh0LT5oYW5kbGUsIHZiLAotCQkJCQkgICAgICB4aS0+dmFsdWUsIHhpLT52YWx1ZV9sZW4pOwotCWlmIChyZXQgPCAwKQotCQltbG9nX2Vycm5vKHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogb2NmczJfeGF0dHJfc2V0X2VudHJ5X2xvY2FsKCkKLSAqCi0gKiBTZXQsIHJlcGxhY2Ugb3IgcmVtb3ZlIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBsb2NhbC4KLSAqLwotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2xvY2FsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdCwKLQkJCQkJc2l6ZV90IG1pbl9vZmZzKQotewotCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7Ci0JaW50IGk7Ci0KLQlpZiAoeGktPnZhbHVlICYmIHhzLT5ub3RfZm91bmQpIHsKLQkJLyogSW5zZXJ0IHRoZSBuZXcgeGF0dHIgZW50cnkuICovCi0JCWxlMTZfYWRkX2NwdSgmeHMtPmhlYWRlci0+eGhfY291bnQsIDEpOwotCQlvY2ZzMl94YXR0cl9zZXRfdHlwZShsYXN0LCB4aS0+bmFtZV9pbmRleCk7Ci0JCW9jZnMyX3hhdHRyX3NldF9sb2NhbChsYXN0LCAxKTsKLQkJbGFzdC0+eGVfbmFtZV9sZW4gPSBuYW1lX2xlbjsKLQl9IGVsc2UgewotCQl2b2lkICpmaXJzdF92YWw7Ci0JCXZvaWQgKnZhbDsKLQkJc2l6ZV90IG9mZnMsIHNpemU7Ci0KLQkJZmlyc3RfdmFsID0geHMtPmJhc2UgKyBtaW5fb2ZmczsKLQkJb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7Ci0JCXZhbCA9IHhzLT5iYXNlICsgb2ZmczsKLQotCQlpZiAobGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpID4KLQkJICAgIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQotCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCQlPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JCWVsc2UKLQkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSk7Ci0KLQkJaWYgKHhpLT52YWx1ZSAmJiBzaXplID09IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCQlPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pKSB7Ci0JCQkvKiBUaGUgb2xkIGFuZCB0aGUgbmV3IHZhbHVlIGhhdmUgdGhlCi0JCQkgICBzYW1lIHNpemUuIEp1c3QgcmVwbGFjZSB0aGUgdmFsdWUuICovCi0JCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDEpOwotCQkJeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKLQkJCS8qIENsZWFyIHZhbHVlIGJ5dGVzLiAqLwotCQkJbWVtc2V0KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAotCQkJICAgICAgIDAsCi0JCQkgICAgICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSk7Ci0JCQltZW1jcHkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksCi0JCQkgICAgICAgeGktPnZhbHVlLAotCQkJICAgICAgIHhpLT52YWx1ZV9sZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIFJlbW92ZSB0aGUgb2xkIG5hbWUrdmFsdWUuICovCi0JCW1lbW1vdmUoZmlyc3RfdmFsICsgc2l6ZSwgZmlyc3RfdmFsLCB2YWwgLSBmaXJzdF92YWwpOwotCQltZW1zZXQoZmlyc3RfdmFsLCAwLCBzaXplKTsKLQkJeHMtPmhlcmUtPnhlX25hbWVfaGFzaCA9IDA7Ci0JCXhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCA9IDA7Ci0JCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7Ci0JCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gMDsKLQotCQltaW5fb2ZmcyArPSBzaXplOwotCi0JCS8qIEFkanVzdCBhbGwgdmFsdWUgb2Zmc2V0cy4gKi8KLQkJbGFzdCA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7Ci0JCWZvciAoaSA9IDAgOyBpIDwgbGUxNl90b19jcHUoeHMtPmhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKLQkJCXNpemVfdCBvID0gbGUxNl90b19jcHUobGFzdC0+eGVfbmFtZV9vZmZzZXQpOwotCi0JCQlpZiAobyA8IG9mZnMpCi0JCQkJbGFzdC0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihvICsgc2l6ZSk7Ci0JCQlsYXN0ICs9IDE7Ci0JCX0KLQotCQlpZiAoIXhpLT52YWx1ZSkgewotCQkJLyogUmVtb3ZlIHRoZSBvbGQgZW50cnkuICovCi0JCQlsYXN0IC09IDE7Ci0JCQltZW1tb3ZlKHhzLT5oZXJlLCB4cy0+aGVyZSArIDEsCi0JCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4cy0+aGVyZSk7Ci0JCQltZW1zZXQobGFzdCwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOwotCQkJbGUxNl9hZGRfY3B1KCZ4cy0+aGVhZGVyLT54aF9jb3VudCwgLTEpOwotCQl9Ci0JfQotCWlmICh4aS0+dmFsdWUpIHsKLQkJLyogSW5zZXJ0IHRoZSBuZXcgbmFtZSt2YWx1ZS4gKi8KLQkJc2l6ZV90IHNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkJT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKLQkJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBtaW5fb2ZmcyAtIHNpemU7Ci0KLQkJeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYobWluX29mZnMgLSBzaXplKTsKLQkJbWVtc2V0KHZhbCwgMCwgc2l6ZSk7Ci0JCW1lbWNweSh2YWwsIHhpLT5uYW1lLCBuYW1lX2xlbik7Ci0JCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKLQkJICAgICAgIHhpLT52YWx1ZSwKLQkJICAgICAgIHhpLT52YWx1ZV9sZW4pOwotCQl4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOwotCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDEpOwotCQlvY2ZzMl94YXR0cl9oYXNoX2VudHJ5KGlub2RlLCB4cy0+aGVhZGVyLCB4cy0+aGVyZSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKgotICogb2NmczJfeGF0dHJfc2V0X2VudHJ5KCkKLSAqCi0gKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGVudHJ5IGludG8gaW5vZGUgb3IgYmxvY2suCi0gKgotICogSWYgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlIHNpemUgPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSwKLSAqIFdlIGZpcnN0IGluc2VydCB0cmVlIHJvb3Qob2NmczJfeGF0dHJfdmFsdWVfcm9vdCkgd2l0aCBzZXRfZW50cnlfbG9jYWwoKSwKLSAqIHRoZW4gc2V0IHZhbHVlIGluIEIgdHJlZSB3aXRoIHNldF92YWx1ZV9vdXRzaWRlKCkuCi0gKi8KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCwKLQkJCQkgaW50IGZsYWcpCi17Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0OwotCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKLQlzaXplX3QgbWluX29mZnMgPSB4cy0+ZW5kIC0geHMtPmJhc2UsIG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKLQlzaXplX3Qgc2l6ZV9sID0gMDsKLQloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwotCWludCBmcmVlLCBpLCByZXQ7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2luZm8geGlfbCA9IHsKLQkJLm5hbWVfaW5kZXggPSB4aS0+bmFtZV9pbmRleCwKLQkJLm5hbWUgPSB4aS0+bmFtZSwKLQkJLnZhbHVlID0geGktPnZhbHVlLAotCQkudmFsdWVfbGVuID0geGktPnZhbHVlX2xlbiwKLQl9OwotCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7Ci0JCS52Yl9iaCA9IHhzLT54YXR0cl9iaCwKLQkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpLAotCX07Ci0KLQlpZiAoIShmbGFnICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgewotCQlCVUdfT04oeHMtPnhhdHRyX2JoID09IHhzLT5pbm9kZV9iaCk7Ci0JCXZiLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiOwotCX0gZWxzZQotCQlCVUdfT04oeHMtPnhhdHRyX2JoICE9IHhzLT5pbm9kZV9iaCk7Ci0KLQkvKiBDb21wdXRlIG1pbl9vZmZzLCBsYXN0IGFuZCBmcmVlIHNwYWNlLiAqLwotCWxhc3QgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOwotCi0JZm9yIChpID0gMCA7IGkgPCBsZTE2X3RvX2NwdSh4cy0+aGVhZGVyLT54aF9jb3VudCk7IGkrKykgewotCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KGxhc3QtPnhlX25hbWVfb2Zmc2V0KTsKLQkJaWYgKG9mZnMgPCBtaW5fb2ZmcykKLQkJCW1pbl9vZmZzID0gb2ZmczsKLQkJbGFzdCArPSAxOwotCX0KLQotCWZyZWUgPSBtaW5fb2ZmcyAtICgodm9pZCAqKWxhc3QgLSB4cy0+YmFzZSkgLSBPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQOwotCWlmIChmcmVlIDwgMCkKKwlmcmVlX3NwYWNlID0gZnJlZV9zdGFydCAtCisJCXNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyKSAtCisJCShudW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKSAtCisJCU9DRlMyX1hBVFRSX0hFQURFUl9HQVA7CisJaWYgKGZyZWVfc3BhY2UgPCAwKQogCQlyZXR1cm4gLUVJTzsKKwlpZiAoZnJlZV9zcGFjZSA8IG5lZWRlZF9zcGFjZSkKKwkJcmV0dXJuIC1FTk9TUEM7CiAKLQlpZiAoIXhzLT5ub3RfZm91bmQpIHsKLQkJc2l6ZV90IHNpemUgPSAwOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeHMtPmhlcmUpKQotCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCU9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgaW50IHR5cGUpCit7CisJcmV0dXJuIGxvYy0+eGxfb3BzLT54bG9fam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBsb2MsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9qb3VybmFsX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlsb2MtPnhsX29wcy0+eGxvX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBsb2MpOworfQorCisvKiBHaXZlIGEgcG9pbnRlciBpbnRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZ2l2ZW4gb2Zmc2V0ICovCitzdGF0aWMgdm9pZCAqb2NmczJfeGFfb2Zmc2V0X3BvaW50ZXIoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgb2Zmc2V0KQoreworCUJVR19PTihvZmZzZXQgPj0gbG9jLT54bF9zaXplKTsKKwlyZXR1cm4gbG9jLT54bF9vcHMtPnhsb19vZmZzZXRfcG9pbnRlcihsb2MsIG9mZnNldCk7Cit9CisKKy8qCisgKiBXaXBlIHRoZSBuYW1lK3ZhbHVlIHBhaXIgYW5kIGFsbG93IHRoZSBzdG9yYWdlIHRvIHJlY2xhaW0gaXQuICBUaGlzCisgKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGVpdGhlciByZW1vdmFsIG9mIHRoZSBlbnRyeSBvciBhIGNhbGwgdG8KKyAqIG9jZnMyX3hhX2FkZF9uYW1ldmFsdWUoKS4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfeGFfd2lwZV9uYW1ldmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCWxvYy0+eGxfb3BzLT54bG9fd2lwZV9uYW1ldmFsdWUobG9jKTsKK30KKworLyoKKyAqIEZpbmQgbG93ZXN0IG9mZnNldCB0byBhIG5hbWUrdmFsdWUgcGFpci4gIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIG91cgorICogZG93bndhcmQtZ3Jvd2luZyBmcmVlIHNwYWNlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhX2dldF9mcmVlX3N0YXJ0KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlyZXR1cm4gbG9jLT54bF9vcHMtPnhsb19nZXRfZnJlZV9zdGFydChsb2MpOworfQorCisvKiBDYW4gd2UgcmV1c2UgbG9jLT54bF9lbnRyeSBmb3IgeGk/ICovCitzdGF0aWMgaW50IG9jZnMyX3hhX2Nhbl9yZXVzZV9lbnRyeShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSkKK3sKKwlyZXR1cm4gbG9jLT54bF9vcHMtPnhsb19jYW5fcmV1c2UobG9jLCB4aSk7Cit9CisKKy8qIEhvdyBtdWNoIGZyZWUgc3BhY2UgaXMgbmVlZGVkIHRvIHNldCB0aGUgbmV3IHZhbHVlICovCitzdGF0aWMgaW50IG9jZnMyX3hhX2NoZWNrX3NwYWNlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJcmV0dXJuIGxvYy0+eGxfb3BzLT54bG9fY2hlY2tfc3BhY2UobG9jLCB4aSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2FkZF9lbnRyeShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIHUzMiBuYW1lX2hhc2gpCit7CisJbG9jLT54bF9vcHMtPnhsb19hZGRfZW50cnkobG9jLCBuYW1lX2hhc2gpOworCWxvYy0+eGxfZW50cnktPnhlX25hbWVfaGFzaCA9IGNwdV90b19sZTMyKG5hbWVfaGFzaCk7CisJLyoKKwkgKiBXZSBjYW4ndCBsZWF2ZSB0aGUgbmV3IGVudHJ5J3MgeGVfbmFtZV9vZmZzZXQgYXQgemVybyBvcgorCSAqIGFkZF9uYW1ldmFsdWUoKSB3aWxsIGdvIG51dHMuICBXZSBzZXQgaXQgdG8gdGhlIHNpemUgb2Ygb3VyCisJICogc3RvcmFnZSBzbyB0aGF0IGl0IGNhbiBuZXZlciBiZSBsZXNzIHRoYW4gYW55IG90aGVyIGVudHJ5LgorCSAqLworCWxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYobG9jLT54bF9zaXplKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfYWRkX25hbWV2YWx1ZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCWludCBzaXplID0gbmFtZXZhbHVlX3NpemVfeGkoeGkpOworCWludCBuYW1ldmFsX29mZnNldDsKKwljaGFyICpuYW1ldmFsX2J1ZjsKKworCWxvYy0+eGxfb3BzLT54bG9fYWRkX25hbWV2YWx1ZShsb2MsIHNpemUpOworCWxvYy0+eGxfZW50cnktPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+eGlfdmFsdWVfbGVuKTsKKwlsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2xlbiA9IHhpLT54aV9uYW1lX2xlbjsKKwlvY2ZzMl94YXR0cl9zZXRfdHlwZShsb2MtPnhsX2VudHJ5LCB4aS0+eGlfbmFtZV9pbmRleCk7CisJb2NmczJfeGF0dHJfc2V0X2xvY2FsKGxvYy0+eGxfZW50cnksCisJCQkgICAgICB4aS0+eGlfdmFsdWVfbGVuIDw9IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKTsKKworCW5hbWV2YWxfb2Zmc2V0ID0gbGUxNl90b19jcHUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCW5hbWV2YWxfYnVmID0gb2NmczJfeGFfb2Zmc2V0X3BvaW50ZXIobG9jLCBuYW1ldmFsX29mZnNldCk7CisJbWVtc2V0KG5hbWV2YWxfYnVmLCAwLCBzaXplKTsKKwltZW1jcHkobmFtZXZhbF9idWYsIHhpLT54aV9uYW1lLCB4aS0+eGlfbmFtZV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9maWxsX3ZhbHVlX2J1ZihzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiKQoreworCWludCBuYW1ldmFsX29mZnNldCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKwlpbnQgbmFtZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2xlbik7CisKKwkvKiBWYWx1ZSBidWZzIGFyZSBmb3IgdmFsdWUgdHJlZXMgKi8KKwlCVUdfT04ob2NmczJfeGF0dHJfaXNfbG9jYWwobG9jLT54bF9lbnRyeSkpOworCUJVR19PTihuYW1ldmFsdWVfc2l6ZV94ZShsb2MtPnhsX2VudHJ5KSAhPQorCSAgICAgICAobmFtZV9zaXplICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFKSk7CisKKwlsb2MtPnhsX29wcy0+eGxvX2ZpbGxfdmFsdWVfYnVmKGxvYywgdmIpOworCXZiLT52Yl94diA9CisJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKW9jZnMyX3hhX29mZnNldF9wb2ludGVyKGxvYywKKwkJCQkJCQluYW1ldmFsX29mZnNldCArCisJCQkJCQkJbmFtZV9zaXplKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9ibG9ja19qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gbG9jLT54bF9zdG9yYWdlOworCW9jZnMyX2pvdXJuYWxfYWNjZXNzX2Z1bmMgYWNjZXNzOworCisJaWYgKGxvYy0+eGxfc2l6ZSA9PSAoYmgtPmJfc2l6ZSAtCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywKKwkJCQkgICAgICB4Yl9hdHRycy54Yl9oZWFkZXIpKSkKKwkJYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGI7CisJZWxzZQorCQlhY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaTsKKwlyZXR1cm4gYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUobG9jLT54bF9pbm9kZSksIGJoLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfYmxvY2tfam91cm5hbF9kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb2MtPnhsX3N0b3JhZ2U7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmgpOworfQorCitzdGF0aWMgdm9pZCAqb2NmczJfeGFfYmxvY2tfb2Zmc2V0X3BvaW50ZXIoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCQkgICBpbnQgb2Zmc2V0KQoreworCXJldHVybiAoY2hhciAqKWxvYy0+eGxfaGVhZGVyICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX2Jsb2NrX2Nhbl9yZXVzZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSkKK3sKKwkvKgorCSAqIEJsb2NrIHN0b3JhZ2UgaXMgc3RyaWN0LiAgSWYgdGhlIHNpemVzIGFyZW4ndCBleGFjdCwgd2Ugd2lsbAorCSAqIHJlbW92ZSB0aGUgb2xkIG9uZSBhbmQgcmVpbnNlcnQgdGhlIG5ldy4KKwkgKi8KKwlyZXR1cm4gbmFtZXZhbHVlX3NpemVfeGUobG9jLT54bF9lbnRyeSkgPT0KKwkJbmFtZXZhbHVlX3NpemVfeGkoeGkpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX2Jsb2NrX2dldF9mcmVlX3N0YXJ0KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGxvYy0+eGxfaGVhZGVyOworCWludCBpLCBjb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7CisJaW50IG9mZnNldCwgZnJlZV9zdGFydCA9IGxvYy0+eGxfc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW9mZnNldCA9IGxlMTZfdG9fY3B1KHhoLT54aF9lbnRyaWVzW2ldLnhlX25hbWVfb2Zmc2V0KTsKKwkJaWYgKG9mZnNldCA8IGZyZWVfc3RhcnQpCisJCQlmcmVlX3N0YXJ0ID0gb2Zmc2V0OworCX0KKworCXJldHVybiBmcmVlX3N0YXJ0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX2Jsb2NrX2NoZWNrX3NwYWNlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJaW50IGNvdW50ID0gbGUxNl90b19jcHUobG9jLT54bF9oZWFkZXItPnhoX2NvdW50KTsKKwlpbnQgZnJlZV9zdGFydCA9IG9jZnMyX3hhX2dldF9mcmVlX3N0YXJ0KGxvYyk7CisJaW50IG5lZWRlZF9zcGFjZSA9IG9jZnMyX3hpX2VudHJ5X3VzYWdlKHhpKTsKKworCS8qCisJICogQmxvY2sgc3RvcmFnZSB3aWxsIHJlY2xhaW0gdGhlIG9yaWdpbmFsIGVudHJ5IGJlZm9yZSBpbnNlcnRpbmcKKwkgKiB0aGUgbmV3IHZhbHVlLCBzbyB3ZSBvbmx5IG5lZWQgdGhlIGRpZmZlcmVuY2UuICBJZiB0aGUgbmV3CisJICogZW50cnkgaXMgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLCB3ZSBkb24ndCBuZWVkIGFueXRoaW5nLgorCSAqLworCWlmIChsb2MtPnhsX2VudHJ5KSB7CisJCS8qIERvbid0IG5lZWQgc3BhY2UgaWYgd2UncmUgcmV1c2luZyEgKi8KKwkJaWYgKG9jZnMyX3hhX2Nhbl9yZXVzZV9lbnRyeShsb2MsIHhpKSkKKwkJCW5lZWRlZF9zcGFjZSA9IDA7CiAJCWVsc2UKLQkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkJT0NGUzJfWEFUVFJfUk9PVF9TSVpFOwotCQlmcmVlICs9IChzaXplICsgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCQkJbmVlZGVkX3NwYWNlIC09IG9jZnMyX3hlX2VudHJ5X3VzYWdlKGxvYy0+eGxfZW50cnkpOwogCX0KLQkvKiBDaGVjayBmcmVlIHNwYWNlIGluIGlub2RlIG9yIGJsb2NrICovCi0JaWYgKHhpLT52YWx1ZSAmJiB4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKLQkJaWYgKGZyZWUgPCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSArCi0JCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkgICBPQ0ZTMl9YQVRUUl9ST09UX1NJWkUpIHsKLQkJCXJldCA9IC1FTk9TUEM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzaXplX2wgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQkJeGlfbC52YWx1ZSA9ICh2b2lkICopJmRlZl94djsKLQkJeGlfbC52YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JfSBlbHNlIGlmICh4aS0+dmFsdWUpIHsKLQkJaWYgKGZyZWUgPCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSArCi0JCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pKSB7Ci0JCQlyZXQgPSAtRU5PU1BDOwotCQkJZ290byBvdXQ7CisJaWYgKG5lZWRlZF9zcGFjZSA8IDApCisJCW5lZWRlZF9zcGFjZSA9IDA7CisJcmV0dXJuIG9jZnMyX3hhX2NoZWNrX3NwYWNlX2hlbHBlcihuZWVkZWRfc3BhY2UsIGZyZWVfc3RhcnQsIGNvdW50KTsKK30KKworLyoKKyAqIEJsb2NrIHN0b3JhZ2UgZm9yIHhhdHRycyBrZWVwcyB0aGUgbmFtZSt2YWx1ZSBwYWlycyBjb21wYWN0ZWQuICBXaGVuCisgKiB3ZSByZW1vdmUgb25lLCB3ZSBoYXZlIHRvIHNoaWZ0IGFueSB0aGF0IHByZWNlZGVkIGl0IHRvd2FyZHMgdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfeGFfYmxvY2tfd2lwZV9uYW1ldmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCWludCBpLCBvZmZzZXQ7CisJaW50IG5hbWV2YWx1ZV9vZmZzZXQsIGZpcnN0X25hbWV2YWx1ZV9vZmZzZXQsIG5hbWV2YWx1ZV9zaXplOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSBsb2MtPnhsX2VudHJ5OworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gbG9jLT54bF9oZWFkZXI7CisJaW50IGNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKKworCW5hbWV2YWx1ZV9vZmZzZXQgPSBsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCW5hbWV2YWx1ZV9zaXplID0gbmFtZXZhbHVlX3NpemVfeGUoZW50cnkpOworCWZpcnN0X25hbWV2YWx1ZV9vZmZzZXQgPSBvY2ZzMl94YV9nZXRfZnJlZV9zdGFydChsb2MpOworCisJLyogU2hpZnQgdGhlIG5hbWUrdmFsdWUgcGFpcnMgKi8KKwltZW1tb3ZlKChjaGFyICopeGggKyBmaXJzdF9uYW1ldmFsdWVfb2Zmc2V0ICsgbmFtZXZhbHVlX3NpemUsCisJCShjaGFyICopeGggKyBmaXJzdF9uYW1ldmFsdWVfb2Zmc2V0LAorCQluYW1ldmFsdWVfb2Zmc2V0IC0gZmlyc3RfbmFtZXZhbHVlX29mZnNldCk7CisJbWVtc2V0KChjaGFyICopeGggKyBmaXJzdF9uYW1ldmFsdWVfb2Zmc2V0LCAwLCBuYW1ldmFsdWVfc2l6ZSk7CisKKwkvKiBOb3cgdGVsbCB4aC0+eGhfZW50cmllcyBhYm91dCBpdCAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW9mZnNldCA9IGxlMTZfdG9fY3B1KHhoLT54aF9lbnRyaWVzW2ldLnhlX25hbWVfb2Zmc2V0KTsKKwkJaWYgKG9mZnNldCA8IG5hbWV2YWx1ZV9vZmZzZXQpCisJCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9lbnRyaWVzW2ldLnhlX25hbWVfb2Zmc2V0LAorCQkJCSAgICAgbmFtZXZhbHVlX3NpemUpOworCX0KKworCS8qCisJICogTm90ZSB0aGF0IHdlIGRvbid0IHVwZGF0ZSB4aF9mcmVlX3N0YXJ0IG9yIHhoX25hbWVfdmFsdWVfbGVuCisJICogYmVjYXVzZSB0aGV5J3JlIG5vdCB1c2VkIGluIGJsb2NrLXN0b3JlZCB4YXR0cnMuCisJICovCit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2Jsb2NrX2FkZF9lbnRyeShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIHUzMiBuYW1lX2hhc2gpCit7CisJaW50IGNvdW50ID0gbGUxNl90b19jcHUobG9jLT54bF9oZWFkZXItPnhoX2NvdW50KTsKKwlsb2MtPnhsX2VudHJ5ID0gJihsb2MtPnhsX2hlYWRlci0+eGhfZW50cmllc1tjb3VudF0pOworCWxlMTZfYWRkX2NwdSgmbG9jLT54bF9oZWFkZXItPnhoX2NvdW50LCAxKTsKKwltZW1zZXQobG9jLT54bF9lbnRyeSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9ibG9ja19hZGRfbmFtZXZhbHVlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgaW50IHNpemUpCit7CisJaW50IGZyZWVfc3RhcnQgPSBvY2ZzMl94YV9nZXRfZnJlZV9zdGFydChsb2MpOworCisJbG9jLT54bF9lbnRyeS0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihmcmVlX3N0YXJ0IC0gc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2Jsb2NrX2ZpbGxfdmFsdWVfYnVmKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YikKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gbG9jLT54bF9zdG9yYWdlOworCisJaWYgKGxvYy0+eGxfc2l6ZSA9PSAoYmgtPmJfc2l6ZSAtCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywKKwkJCQkgICAgICB4Yl9hdHRycy54Yl9oZWFkZXIpKSkKKwkJdmItPnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiOworCWVsc2UKKwkJdmItPnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpOworCXZiLT52Yl9iaCA9IGJoOworfQorCisvKgorICogT3BlcmF0aW9ucyBmb3IgeGF0dHJzIHN0b3JlZCBpbiBibG9ja3MuICBUaGlzIGluY2x1ZGVzIGlubGluZSBpbm9kZQorICogc3RvcmFnZSBhbmQgdW5pbmRleGVkIG9jZnMyX3hhdHRyX2Jsb2Nrcy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvY2ZzMl94YV9sb2Nfb3BlcmF0aW9ucyBvY2ZzMl94YV9ibG9ja19sb2Nfb3BzID0geworCS54bG9fam91cm5hbF9hY2Nlc3MJPSBvY2ZzMl94YV9ibG9ja19qb3VybmFsX2FjY2VzcywKKwkueGxvX2pvdXJuYWxfZGlydHkJPSBvY2ZzMl94YV9ibG9ja19qb3VybmFsX2RpcnR5LAorCS54bG9fb2Zmc2V0X3BvaW50ZXIJPSBvY2ZzMl94YV9ibG9ja19vZmZzZXRfcG9pbnRlciwKKwkueGxvX2NoZWNrX3NwYWNlCT0gb2NmczJfeGFfYmxvY2tfY2hlY2tfc3BhY2UsCisJLnhsb19jYW5fcmV1c2UJCT0gb2NmczJfeGFfYmxvY2tfY2FuX3JldXNlLAorCS54bG9fZ2V0X2ZyZWVfc3RhcnQJPSBvY2ZzMl94YV9ibG9ja19nZXRfZnJlZV9zdGFydCwKKwkueGxvX3dpcGVfbmFtZXZhbHVlCT0gb2NmczJfeGFfYmxvY2tfd2lwZV9uYW1ldmFsdWUsCisJLnhsb19hZGRfZW50cnkJCT0gb2NmczJfeGFfYmxvY2tfYWRkX2VudHJ5LAorCS54bG9fYWRkX25hbWV2YWx1ZQk9IG9jZnMyX3hhX2Jsb2NrX2FkZF9uYW1ldmFsdWUsCisJLnhsb19maWxsX3ZhbHVlX2J1Zgk9IG9jZnMyX3hhX2Jsb2NrX2ZpbGxfdmFsdWVfYnVmLAorfTsKKworc3RhdGljIGludCBvY2ZzMl94YV9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIGludCB0eXBlKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCA9IGxvYy0+eGxfc3RvcmFnZTsKKworCXJldHVybiBvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBidWNrZXQsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9idWNrZXRfam91cm5hbF9kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBsb2MtPnhsX3N0b3JhZ2U7CisKKwlvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJ1Y2tldCk7Cit9CisKK3N0YXRpYyB2b2lkICpvY2ZzMl94YV9idWNrZXRfb2Zmc2V0X3BvaW50ZXIoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCQkgICAgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBsb2MtPnhsX3N0b3JhZ2U7CisJaW50IGJsb2NrLCBibG9ja19vZmZzZXQ7CisKKwkvKiBUaGUgaGVhZGVyIGlzIGF0IHRoZSBmcm9udCBvZiB0aGUgYnVja2V0ICovCisJYmxvY2sgPSBvZmZzZXQgPj4gbG9jLT54bF9pbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlibG9ja19vZmZzZXQgPSBvZmZzZXQgJSBsb2MtPnhsX2lub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCXJldHVybiBidWNrZXRfYmxvY2soYnVja2V0LCBibG9jaykgKyBibG9ja19vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfYnVja2V0X2Nhbl9yZXVzZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplX3hlKGxvYy0+eGxfZW50cnkpID49CisJCW5hbWV2YWx1ZV9zaXplX3hpKHhpKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9idWNrZXRfZ2V0X2ZyZWVfc3RhcnQoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCA9IGxvYy0+eGxfc3RvcmFnZTsKKwlyZXR1cm4gbGUxNl90b19jcHUoYnVja2V0X3hoKGJ1Y2tldCktPnhoX2ZyZWVfc3RhcnQpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2J1Y2tldF9hbGlnbl9mcmVlX3N0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSBpbnQgZnJlZV9zdGFydCwgaW50IHNpemUpCit7CisJLyoKKwkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lK3ZhbHVlIHBhaXIgZml0cyB3aXRoaW4KKwkgKiBvbmUgYmxvY2suCisJICovCisJaWYgKCgoZnJlZV9zdGFydCAtIHNpemUpID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSAhPQorCSAgICAoKGZyZWVfc3RhcnQgLSAxKSA+PiBzYi0+c19ibG9ja3NpemVfYml0cykpCisJCWZyZWVfc3RhcnQgLT0gZnJlZV9zdGFydCAlIHNiLT5zX2Jsb2Nrc2l6ZTsKKworCXJldHVybiBmcmVlX3N0YXJ0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX2J1Y2tldF9jaGVja19zcGFjZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSkKK3sKKwlpbnQgcmM7CisJaW50IGNvdW50ID0gbGUxNl90b19jcHUobG9jLT54bF9oZWFkZXItPnhoX2NvdW50KTsKKwlpbnQgZnJlZV9zdGFydCA9IG9jZnMyX3hhX2dldF9mcmVlX3N0YXJ0KGxvYyk7CisJaW50IG5lZWRlZF9zcGFjZSA9IG9jZnMyX3hpX2VudHJ5X3VzYWdlKHhpKTsKKwlpbnQgc2l6ZSA9IG5hbWV2YWx1ZV9zaXplX3hpKHhpKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbG9jLT54bF9pbm9kZS0+aV9zYjsKKworCS8qCisJICogQnVja2V0IHN0b3JhZ2UgZG9lcyBub3QgcmVjbGFpbSBuYW1lK3ZhbHVlIHBhaXJzIGl0IGNhbm5vdAorCSAqIHJldXNlLiAgVGhleSBsaXZlIGFzIGhvbGVzIHVudGlsIHRoZSBidWNrZXQgZmlsbHMsIGFuZCB0aGVuCisJICogdGhlIGJ1Y2tldCBpcyBkZWZyYWdtZW50ZWQuICBIb3dldmVyLCB0aGUgYnVja2V0IGNhbiByZWNsYWltCisJICogdGhlIG9jZnMyX3hhdHRyX2VudHJ5LgorCSAqLworCWlmIChsb2MtPnhsX2VudHJ5KSB7CisJCS8qIERvbid0IG5lZWQgc3BhY2UgaWYgd2UncmUgcmV1c2luZyEgKi8KKwkJaWYgKG9jZnMyX3hhX2Nhbl9yZXVzZV9lbnRyeShsb2MsIHhpKSkKKwkJCW5lZWRlZF9zcGFjZSA9IDA7CisJCWVsc2UKKwkJCW5lZWRlZF9zcGFjZSAtPSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKKwl9CisJQlVHX09OKG5lZWRlZF9zcGFjZSA8IDApOworCisJaWYgKGZyZWVfc3RhcnQgPCBzaXplKSB7CisJCWlmIChuZWVkZWRfc3BhY2UpCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGaXJzdCB3ZSBjaGVjayBpZiBpdCB3b3VsZCBmaXQgaW4gdGhlIGZpcnN0IHBsYWNlLgorCQkgKiBCZWxvdywgd2UgYWxpZ24gdGhlIGZyZWUgc3RhcnQgdG8gYSBibG9jay4gIFRoaXMgbWF5CisJCSAqIHNsaWRlIHVzIGJlbG93IHRoZSBtaW5pbXVtIGdhcC4gIEJ5IGNoZWNraW5nIHVuYWxpZ25lZAorCQkgKiBmaXJzdCwgd2UgYXZvaWQgdGhhdCBlcnJvci4KKwkJICovCisJCXJjID0gb2NmczJfeGFfY2hlY2tfc3BhY2VfaGVscGVyKG5lZWRlZF9zcGFjZSwgZnJlZV9zdGFydCwKKwkJCQkJCSBjb3VudCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJZnJlZV9zdGFydCA9IG9jZnMyX2J1Y2tldF9hbGlnbl9mcmVlX3N0YXJ0KHNiLCBmcmVlX3N0YXJ0LAorCQkJCQkJCSAgIHNpemUpOworCX0KKwlyZXR1cm4gb2NmczJfeGFfY2hlY2tfc3BhY2VfaGVscGVyKG5lZWRlZF9zcGFjZSwgZnJlZV9zdGFydCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9idWNrZXRfd2lwZV9uYW1ldmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCWxlMTZfYWRkX2NwdSgmbG9jLT54bF9oZWFkZXItPnhoX25hbWVfdmFsdWVfbGVuLAorCQkgICAgIC1uYW1ldmFsdWVfc2l6ZV94ZShsb2MtPnhsX2VudHJ5KSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2J1Y2tldF9hZGRfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCB1MzIgbmFtZV9oYXNoKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gbG9jLT54bF9oZWFkZXI7CisJaW50IGNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKKwlpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMSwgdG1wOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqdG1wX3hlOworCisJLyoKKwkgKiBXZSBrZWVwIGJ1Y2tldHMgc29ydGVkIGJ5IG5hbWVfaGFzaCwgc28gd2UgbmVlZCB0byBmaW5kCisJICogb3VyIGluc2VydCBwbGFjZS4KKwkgKi8KKwl3aGlsZSAobG93IDw9IGhpZ2ggJiYgY291bnQpIHsKKwkJdG1wID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJdG1wX3hlID0gJnhoLT54aF9lbnRyaWVzW3RtcF07CisKKwkJaWYgKG5hbWVfaGFzaCA+IGxlMzJfdG9fY3B1KHRtcF94ZS0+eGVfbmFtZV9oYXNoKSkKKwkJCWxvdyA9IHRtcCArIDE7CisJCWVsc2UgaWYgKG5hbWVfaGFzaCA8IGxlMzJfdG9fY3B1KHRtcF94ZS0+eGVfbmFtZV9oYXNoKSkKKwkJCWhpZ2ggPSB0bXAgLSAxOworCQllbHNlIHsKKwkJCWxvdyA9IHRtcDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCi0JaWYgKCF4cy0+bm90X2ZvdW5kKSB7Ci0JCS8qIEZvciBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KLQkJc2l6ZV90IHNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSk7Ci0JCXNpemVfdCBvZmZzID0gbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KTsKLQkJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOworCWlmIChsb3cgIT0gY291bnQpCisJCW1lbW1vdmUoJnhoLT54aF9lbnRyaWVzW2xvdyArIDFdLAorCQkJJnhoLT54aF9lbnRyaWVzW2xvd10sCisJCQkoKGNvdW50IC0gbG93KSAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKSk7CiAKLQkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhzLT5oZXJlKSAmJiBzaXplID09IHNpemVfbCkgewotCQkJLyogUmVwbGFjZSBleGlzdGluZyBsb2NhbCB4YXR0ciB3aXRoIHRyZWUgcm9vdCAqLwotCQkJcmV0ID0gb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHhpLCB4cywKLQkJCQkJCQkgICAgY3R4dCwgJnZiLCBvZmZzKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgaWYgKCFvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkpIHsKLQkJCS8qIEZvciBleGlzdGluZyB4YXR0ciB3aGljaCBoYXMgdmFsdWUgb3V0c2lkZSAqLwotCQkJdmIudmJfeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKLQkJCQkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikpOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2NvdW50LCAxKTsKKwlsb2MtPnhsX2VudHJ5ID0gJnhoLT54aF9lbnRyaWVzW2xvd107CisJbWVtc2V0KGxvYy0+eGxfZW50cnksIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKK30KIAotCQkJaWYgKHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewotCQkJCS8qCi0JCQkJICogSWYgbmV3IHZhbHVlIG5lZWQgc2V0IG91dHNpZGUgYWxzbywKLQkJCQkgKiBmaXJzdCB0cnVuY2F0ZSBvbGQgdmFsdWUgdG8gbmV3IHZhbHVlLAotCQkJCSAqIHRoZW4gc2V0IG5ldyB2YWx1ZSB3aXRoIHNldF92YWx1ZV9vdXRzaWRlKCkuCi0JCQkJICovCi0JCQkJcmV0ID0gb2NmczJfeGF0dHJfdmFsdWVfdHJ1bmNhdGUoaW5vZGUsCi0JCQkJCQkJCSAmdmIsCi0JCQkJCQkJCSB4aS0+dmFsdWVfbGVuLAotCQkJCQkJCQkgY3R4dCk7Ci0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CitzdGF0aWMgdm9pZCBvY2ZzMl94YV9idWNrZXRfYWRkX25hbWV2YWx1ZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIGludCBzaXplKQoreworCWludCBmcmVlX3N0YXJ0ID0gb2NmczJfeGFfZ2V0X2ZyZWVfc3RhcnQobG9jKTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGxvYy0+eGxfaGVhZGVyOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBsb2MtPnhsX2lub2RlLT5pX3NiOworCWludCBuYW1ldmFsX29mZnNldDsKIAotCQkJCXJldCA9IG9jZnMyX3hhdHRyX3VwZGF0ZV9lbnRyeShpbm9kZSwKLQkJCQkJCQkgICAgICAgaGFuZGxlLAotCQkJCQkJCSAgICAgICB4aSwKLQkJCQkJCQkgICAgICAgeHMsCi0JCQkJCQkJICAgICAgICZ2YiwKLQkJCQkJCQkgICAgICAgb2Zmcyk7Ci0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJZnJlZV9zdGFydCA9IG9jZnMyX2J1Y2tldF9hbGlnbl9mcmVlX3N0YXJ0KHNiLCBmcmVlX3N0YXJ0LCBzaXplKTsKKwluYW1ldmFsX29mZnNldCA9IGZyZWVfc3RhcnQgLSBzaXplOworCWxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYobmFtZXZhbF9vZmZzZXQpOworCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYobmFtZXZhbF9vZmZzZXQpOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX25hbWVfdmFsdWVfbGVuLCBzaXplKTsKIAotCQkJCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsCi0JCQkJCQkJCWhhbmRsZSwKLQkJCQkJCQkJJnZiLAotCQkJCQkJCQl4aS0+dmFsdWUsCi0JCQkJCQkJCXhpLT52YWx1ZV9sZW4pOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQltbG9nX2Vycm5vKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2J1Y2tldF9maWxsX3ZhbHVlX2J1ZihzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCA9IGxvYy0+eGxfc3RvcmFnZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbG9jLT54bF9pbm9kZS0+aV9zYjsKKwlpbnQgbmFtZXZhbF9vZmZzZXQgPSBsZTE2X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCk7CisJaW50IHNpemUgPSBuYW1ldmFsdWVfc2l6ZV94ZShsb2MtPnhsX2VudHJ5KTsKKwlpbnQgYmxvY2tfb2Zmc2V0ID0gbmFtZXZhbF9vZmZzZXQgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisKKwkvKiBWYWx1ZXMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0cmFkZGxlIGJsb2NrIGJvdW5kYXJpZXMgKi8KKwlCVUdfT04oYmxvY2tfb2Zmc2V0ICE9CisJICAgICAgICgobmFtZXZhbF9vZmZzZXQgKyBzaXplIC0gMSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpKTsKKwkvKiBXZSBleHBlY3QgdGhlIGJ1Y2tldCB0byBiZSBmaWxsZWQgaW4gKi8KKwlCVUdfT04oIWJ1Y2tldC0+YnVfYmhzW2Jsb2NrX29mZnNldF0pOworCisJdmItPnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzOworCXZiLT52Yl9iaCA9IGJ1Y2tldC0+YnVfYmhzW2Jsb2NrX29mZnNldF07Cit9CisKKy8qIE9wZXJhdGlvbnMgZm9yIHhhdHRycyBzdG9yZWQgaW4gYnVja2V0cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NmczJfeGFfbG9jX29wZXJhdGlvbnMgb2NmczJfeGFfYnVja2V0X2xvY19vcHMgPSB7CisJLnhsb19qb3VybmFsX2FjY2Vzcwk9IG9jZnMyX3hhX2J1Y2tldF9qb3VybmFsX2FjY2VzcywKKwkueGxvX2pvdXJuYWxfZGlydHkJPSBvY2ZzMl94YV9idWNrZXRfam91cm5hbF9kaXJ0eSwKKwkueGxvX29mZnNldF9wb2ludGVyCT0gb2NmczJfeGFfYnVja2V0X29mZnNldF9wb2ludGVyLAorCS54bG9fY2hlY2tfc3BhY2UJPSBvY2ZzMl94YV9idWNrZXRfY2hlY2tfc3BhY2UsCisJLnhsb19jYW5fcmV1c2UJCT0gb2NmczJfeGFfYnVja2V0X2Nhbl9yZXVzZSwKKwkueGxvX2dldF9mcmVlX3N0YXJ0CT0gb2NmczJfeGFfYnVja2V0X2dldF9mcmVlX3N0YXJ0LAorCS54bG9fd2lwZV9uYW1ldmFsdWUJPSBvY2ZzMl94YV9idWNrZXRfd2lwZV9uYW1ldmFsdWUsCisJLnhsb19hZGRfZW50cnkJCT0gb2NmczJfeGFfYnVja2V0X2FkZF9lbnRyeSwKKwkueGxvX2FkZF9uYW1ldmFsdWUJPSBvY2ZzMl94YV9idWNrZXRfYWRkX25hbWV2YWx1ZSwKKwkueGxvX2ZpbGxfdmFsdWVfYnVmCT0gb2NmczJfeGFfYnVja2V0X2ZpbGxfdmFsdWVfYnVmLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YjsKKworCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbChsb2MtPnhsX2VudHJ5KSkKKwkJcmV0dXJuIDA7CisKKwlvY2ZzMl94YV9maWxsX3ZhbHVlX2J1Zihsb2MsICZ2Yik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHZiLnZiX3h2LT54cl9jbHVzdGVycyk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfdmFsdWVfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCB1NjQgYnl0ZXMsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQoreworCWludCB0cnVuY19yYywgYWNjZXNzX3JjOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmI7CisKKwlvY2ZzMl94YV9maWxsX3ZhbHVlX2J1Zihsb2MsICZ2Yik7CisJdHJ1bmNfcmMgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShsb2MtPnhsX2lub2RlLCAmdmIsIGJ5dGVzLAorCQkJCQkgICAgICBjdHh0KTsKKworCS8qCisJICogVGhlIGNhbGxlciBvZiBvY2ZzMl94YV92YWx1ZV90cnVuY2F0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZAorCSAqIG9jZnMyX3hhX2pvdXJuYWxfYWNjZXNzIG9uIHRoZSBsb2MuICBIb3dldmVyLCBUaGUgdHJ1bmNhdGUgY29kZQorCSAqIGNhbGxzIG9jZnMyX2V4dGVuZF90cmFucygpLiAgVGhpcyBtYXkgY29tbWl0IHRoZSBwcmV2aW91cworCSAqIHRyYW5zYWN0aW9uIGFuZCBvcGVuIGEgbmV3IG9uZS4gIElmIHRoaXMgaXMgYSBidWNrZXQsIHRydW5jYXRlCisJICogY291bGQgbGVhdmUgb25seSB2Yi0+dmJfYmggc2V0IHVwIGZvciBqb3VybmFsaW5nLiAgTWVhbndoaWxlLAorCSAqIHRoZSBjYWxsZXIgaXMgZXhwZWN0aW5nIHRvIGRpcnR5IHRoZSBlbnRpcmUgYnVja2V0LiAgU28gd2UgbXVzdAorCSAqIHJlc2V0IHRoZSBqb3VybmFsIHdvcmsuICBXZSBkbyB0aGlzIGV2ZW4gaWYgdHJ1bmNhdGUgaGFzIGZhaWxlZCwKKwkgKiBhcyBpdCBjb3VsZCBoYXZlIGZhaWxlZCBhZnRlciBjb21taXR0aW5nIHRoZSBleHRlbmQuCisJICovCisJYWNjZXNzX3JjID0gb2NmczJfeGFfam91cm5hbF9hY2Nlc3MoY3R4dC0+aGFuZGxlLCBsb2MsCisJCQkJCSAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisKKwkvKiBFcnJvcnMgaW4gdHJ1bmNhdGUgdGFrZSBwcmVjZWRlbmNlICovCisJcmV0dXJuIHRydW5jX3JjID8gdHJ1bmNfcmMgOiBhY2Nlc3NfcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX3JlbW92ZV9lbnRyeShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJaW50IGluZGV4LCBjb3VudDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGxvYy0+eGxfaGVhZGVyOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSBsb2MtPnhsX2VudHJ5OworCisJb2NmczJfeGFfd2lwZV9uYW1ldmFsdWUobG9jKTsKKwlsb2MtPnhsX2VudHJ5ID0gTlVMTDsKKworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2NvdW50LCAtMSk7CisJY291bnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOworCisJLyoKKwkgKiBPbmx5IHplcm8gb3V0IHRoZSBlbnRyeSBpZiB0aGVyZSBhcmUgbW9yZSByZW1haW5pbmcuICBUaGlzIGlzCisJICogaW1wb3J0YW50IGZvciBhbiBlbXB0eSBidWNrZXQsIGFzIGl0IGtlZXBzIHRyYWNrIG9mIHRoZQorCSAqIGJ1Y2tldCdzIGhhc2ggdmFsdWUuICBJdCBkb2Vzbid0IGh1cnQgZW1wdHkgYmxvY2sgc3RvcmFnZS4KKwkgKi8KKwlpZiAoY291bnQpIHsKKwkJaW5kZXggPSAoKGNoYXIgKillbnRyeSAtIChjaGFyICopJnhoLT54aF9lbnRyaWVzKSAvCisJCQlzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKKwkJbWVtbW92ZSgmeGgtPnhoX2VudHJpZXNbaW5kZXhdLCAmeGgtPnhoX2VudHJpZXNbaW5kZXggKyAxXSwKKwkJCShjb3VudCAtIGluZGV4KSAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJbWVtc2V0KCZ4aC0+eGhfZW50cmllc1tjb3VudF0sIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJfQorfQorCisvKgorICogSWYgd2UgaGF2ZSBhIHByb2JsZW0gYWRqdXN0aW5nIHRoZSBzaXplIG9mIGFuIGV4dGVybmFsIHZhbHVlIGR1cmluZworICogb2NmczJfeGFfcHJlcGFyZV9lbnRyeSgpIG9yIG9jZnMyX3hhX3JlbW92ZSgpLCB3ZSBtYXkgaGF2ZSBhbiB4YXR0cgorICogaW4gYW4gaW50ZXJtZWRpYXRlIHN0YXRlLiAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSBtYXkgYmUgcGFydGlhbGx5CisgKiB0cnVuY2F0ZWQuCisgKgorICogSWYgdGhlIHZhbHVlIHRyZWUgaGFzbid0IGNoYW5nZWQsIHRoZSBleHRlbmQvdHJ1bmNhdGUgd2VudCBub3doZXJlLgorICogV2UgaGF2ZSBub3RoaW5nIHRvIGRvLiAgVGhlIGNhbGxlciBjYW4gdHJlYXQgaXQgYXMgYSBzdHJhaWdodCBlcnJvci4KKyAqCisgKiBJZiB0aGUgdmFsdWUgdHJlZSBnb3QgcGFydGlhbGx5IHRydW5jYXRlZCwgd2Ugbm93IGhhdmUgYSBjb3JydXB0ZWQKKyAqIGV4dGVuZGVkIGF0dHJpYnV0ZS4gIFdlJ3JlIGdvaW5nIHRvIHdpcGUgaXRzIGVudHJ5IGFuZCBsZWFrIHRoZQorICogY2x1c3RlcnMuICBCZXR0ZXIgdG8gbGVhayBzb21lIHN0b3JhZ2UgdGhhbiBsZWF2ZSBhIGNvcnJ1cHQgZW50cnkuCisgKgorICogSWYgdGhlIHZhbHVlIHRyZWUgZ3JldywgaXQgb2J2aW91c2x5IGRpZG4ndCBncm93IGVub3VnaCBmb3IgdGhlCisgKiBuZXcgZW50cnkuICBXZSdyZSBub3QgZ29pbmcgdG8gdHJ5IGFuZCByZWNsYWltIHRob3NlIGNsdXN0ZXJzIGVpdGhlci4KKyAqIElmIHRoZXJlIHdhcyBhbHJlYWR5IGFuIGV4dGVybmFsIHZhbHVlIHRoZXJlIChvcmlnX2NsdXN0ZXJzICE9IDApLAorICogdGhlIG5ldyBjbHVzdGVycyBhcmUgYXR0YWNoZWQgc2FmZWx5IGFuZCB3ZSBjYW4ganVzdCBsZWF2ZSB0aGUgb2xkCisgKiB2YWx1ZSBpbiBwbGFjZS4gIElmIHRoZXJlIHdhcyBubyBleHRlcm5hbCB2YWx1ZSB0aGVyZSwgd2UgcmVtb3ZlCisgKiB0aGUgZW50cnkuCisgKgorICogVGhpcyB3YXksIHRoZSB4YXR0ciBibG9jayB3ZSBzdG9yZSBpbiB0aGUgam91cm5hbCB3aWxsIGJlIGNvbnNpc3RlbnQuCisgKiBJZiB0aGUgc2l6ZSBjaGFuZ2UgYnJva2UgYmVjYXVzZSBvZiB0aGUgam91cm5hbCwgbm8gY2hhbmdlcyB3aWxsIGhpdAorICogZGlzayBhbnl3YXkuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2NsZWFudXBfdmFsdWVfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCQkgICAgY29uc3QgY2hhciAqd2hhdCwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBvcmlnX2NsdXN0ZXJzKQoreworCXVuc2lnbmVkIGludCBuZXdfY2x1c3RlcnMgPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpOworCWNoYXIgKm5hbWV2YWxfYnVmID0gb2NmczJfeGFfb2Zmc2V0X3BvaW50ZXIobG9jLAorCQkJCWxlMTZfdG9fY3B1KGxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0KSk7CisKKwlpZiAobmV3X2NsdXN0ZXJzIDwgb3JpZ19jbHVzdGVycykgeworCQltbG9nKE1MX0VSUk9SLAorCQkgICAgICJQYXJ0aWFsIHRydW5jYXRlIHdoaWxlICVzIHhhdHRyICUuKnMuICBMZWFraW5nICIKKwkJICAgICAiJXUgY2x1c3RlcnMgYW5kIHJlbW92aW5nIHRoZSBlbnRyeVxuIiwKKwkJICAgICB3aGF0LCBsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2xlbiwgbmFtZXZhbF9idWYsCisJCSAgICAgb3JpZ19jbHVzdGVycyAtIG5ld19jbHVzdGVycyk7CisJCW9jZnMyX3hhX3JlbW92ZV9lbnRyeShsb2MpOworCX0gZWxzZSBpZiAoIW9yaWdfY2x1c3RlcnMpIHsKKwkJbWxvZyhNTF9FUlJPUiwKKwkJICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIGFuIGV4dGVybmFsIHZhbHVlIGZvciB4YXR0ciAiCisJCSAgICAgIiUuKnMgc2FmZWx5LiAgTGVha2luZyAldSBjbHVzdGVycyBhbmQgcmVtb3ZpbmcgdGhlICIKKwkJICAgICAiZW50cnlcbiIsCisJCSAgICAgbG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4sIG5hbWV2YWxfYnVmLAorCQkgICAgIG5ld19jbHVzdGVycyAtIG9yaWdfY2x1c3RlcnMpOworCQlvY2ZzMl94YV9yZW1vdmVfZW50cnkobG9jKTsKKwl9IGVsc2UgaWYgKG5ld19jbHVzdGVycyA+IG9yaWdfY2x1c3RlcnMpCisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgIlVuYWJsZSB0byBncm93IHhhdHRyICUuKnMgc2FmZWx5LiAgJXUgbmV3IGNsdXN0ZXJzICIKKwkJICAgICAiaGF2ZSBiZWVuIGFkZGVkLCBidXQgdGhlIHZhbHVlIHdpbGwgbm90IGJlICIKKwkJICAgICAibW9kaWZpZWRcbiIsCisJCSAgICAgbG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4sIG5hbWV2YWxfYnVmLAorCQkgICAgIG5ld19jbHVzdGVycyAtIG9yaWdfY2x1c3RlcnMpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX3JlbW92ZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBpbnQgb3JpZ19jbHVzdGVyczsKKworCWlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwobG9jLT54bF9lbnRyeSkpIHsKKwkJb3JpZ19jbHVzdGVycyA9IG9jZnMyX3hhX3ZhbHVlX2NsdXN0ZXJzKGxvYyk7CisJCXJjID0gb2NmczJfeGFfdmFsdWVfdHJ1bmNhdGUobG9jLCAwLCBjdHh0KTsKKwkJaWYgKHJjKSB7CisJCQltbG9nX2Vycm5vKHJjKTsKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGlzIGlzIHJlbW92ZSwgd2UgY2FuIHJldHVybiAwIGlmCisJCQkgKiBvY2ZzMl94YV9jbGVhbnVwX3ZhbHVlX3RydW5jYXRlKCkgaXMgZ29pbmcgdG8KKwkJCSAqIHdpcGUgdGhlIGVudHJ5IGFueXdheS4gIFNvIHdlIGNoZWNrIHRoZQorCQkJICogY2x1c3RlciBjb3VudCBhcyB3ZWxsLgorCQkJICovCisJCQlpZiAob3JpZ19jbHVzdGVycyAhPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpKQorCQkJCXJjID0gMDsKKwkJCW9jZnMyX3hhX2NsZWFudXBfdmFsdWVfdHJ1bmNhdGUobG9jLCAicmVtb3ZpbmciLAorCQkJCQkJCW9yaWdfY2x1c3RlcnMpOworCQkJaWYgKHJjKQogCQkJCWdvdG8gb3V0OwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElmIG5ldyB2YWx1ZSBuZWVkIHNldCBpbiBsb2NhbCwKLQkJCQkgKiBqdXN0IHRydWNhdGUgb2xkIHZhbHVlIHRvIHplcm8uCi0JCQkJICovCi0JCQkJIHJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLAotCQkJCQkJCQkgICZ2YiwKLQkJCQkJCQkJICAwLAotCQkJCQkJCQkgIGN0eHQpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCX0KKwl9CisKKwlvY2ZzMl94YV9yZW1vdmVfZW50cnkobG9jKTsKKworb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfaW5zdGFsbF92YWx1ZV9yb290KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlpbnQgbmFtZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2xlbik7CisJY2hhciAqbmFtZXZhbF9idWY7CisKKwluYW1ldmFsX2J1ZiA9IG9jZnMyX3hhX29mZnNldF9wb2ludGVyKGxvYywKKwkJCQlsZTE2X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCkpOworCW1lbWNweShuYW1ldmFsX2J1ZiArIG5hbWVfc2l6ZSwgJmRlZl94diwgT0NGUzJfWEFUVFJfUk9PVF9TSVpFKTsKK30KKworLyoKKyAqIFRha2UgYW4gZXhpc3RpbmcgZW50cnkgYW5kIG1ha2UgaXQgcmVhZHkgZm9yIHRoZSBuZXcgdmFsdWUuICBUaGlzCisgKiB3b24ndCBhbGxvY2F0ZSBzcGFjZSwgYnV0IGl0IG1heSBmcmVlIHNwYWNlLiAgSXQgc2hvdWxkIGJlIHJlYWR5IGZvcgorICogb2NmczJfeGFfcHJlcGFyZV9lbnRyeSgpIHRvIGZpbmlzaCB0aGUgd29yay4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YV9yZXVzZV9lbnRyeShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgcmMgPSAwOworCWludCBuYW1lX3NpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT54aV9uYW1lX2xlbik7CisJdW5zaWduZWQgaW50IG9yaWdfY2x1c3RlcnM7CisJY2hhciAqbmFtZXZhbF9idWY7CisJaW50IHhlX2xvY2FsID0gb2NmczJfeGF0dHJfaXNfbG9jYWwobG9jLT54bF9lbnRyeSk7CisJaW50IHhpX2xvY2FsID0geGktPnhpX3ZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRTsKKworCUJVR19PTihPQ0ZTMl9YQVRUUl9TSVpFKGxvYy0+eGxfZW50cnktPnhlX25hbWVfbGVuKSAhPQorCSAgICAgICBuYW1lX3NpemUpOworCisJbmFtZXZhbF9idWYgPSBvY2ZzMl94YV9vZmZzZXRfcG9pbnRlcihsb2MsCisJCQkJbGUxNl90b19jcHUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9vZmZzZXQpKTsKKwlpZiAoeGVfbG9jYWwpIHsKKwkJbWVtc2V0KG5hbWV2YWxfYnVmICsgbmFtZV9zaXplLCAwLAorCQkgICAgICAgbmFtZXZhbHVlX3NpemVfeGUobG9jLT54bF9lbnRyeSkgLSBuYW1lX3NpemUpOworCQlpZiAoIXhpX2xvY2FsKQorCQkJb2NmczJfeGFfaW5zdGFsbF92YWx1ZV9yb290KGxvYyk7CisJfSBlbHNlIHsKKwkJb3JpZ19jbHVzdGVycyA9IG9jZnMyX3hhX3ZhbHVlX2NsdXN0ZXJzKGxvYyk7CisJCWlmICh4aV9sb2NhbCkgeworCQkJcmMgPSBvY2ZzMl94YV92YWx1ZV90cnVuY2F0ZShsb2MsIDAsIGN0eHQpOworCQkJaWYgKHJjIDwgMCkKKwkJCQltbG9nX2Vycm5vKHJjKTsKKwkJCWVsc2UKKwkJCQltZW1zZXQobmFtZXZhbF9idWYgKyBuYW1lX3NpemUsIDAsCisJCQkJICAgICAgIG5hbWV2YWx1ZV9zaXplX3hlKGxvYy0+eGxfZW50cnkpIC0KKwkJCQkgICAgICAgbmFtZV9zaXplKTsKKwkJfSBlbHNlIGlmIChsZTY0X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV92YWx1ZV9zaXplKSA+CisJCQkgICB4aS0+eGlfdmFsdWVfbGVuKSB7CisJCQlyYyA9IG9jZnMyX3hhX3ZhbHVlX3RydW5jYXRlKGxvYywgeGktPnhpX3ZhbHVlX2xlbiwKKwkJCQkJCSAgICAgY3R4dCk7CisJCQlpZiAocmMgPCAwKQorCQkJCW1sb2dfZXJybm8ocmMpOworCQl9CisKKwkJaWYgKHJjKSB7CisJCQlvY2ZzMl94YV9jbGVhbnVwX3ZhbHVlX3RydW5jYXRlKGxvYywgInJldXNpbmciLAorCQkJCQkJCW9yaWdfY2x1c3RlcnMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlsb2MtPnhsX2VudHJ5LT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnhpX3ZhbHVlX2xlbik7CisJb2NmczJfeGF0dHJfc2V0X2xvY2FsKGxvYy0+eGxfZW50cnksIHhpX2xvY2FsKTsKKworb3V0OgorCXJldHVybiByYzsKK30KKworLyoKKyAqIFByZXBhcmVzIGxvYy0+eGxfZW50cnkgdG8gcmVjZWl2ZSB0aGUgbmV3IHhhdHRyLiAgVGhpcyBpbmNsdWRlcworICogcHJvcGVybHkgc2V0dGluZyB1cCB0aGUgbmFtZSt2YWx1ZSBwYWlyIHJlZ2lvbi4gIElmIGxvYy0+eGxfZW50cnkKKyAqIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIHRha2UgY2FyZSBvZiBtb2RpZnlpbmcgaXQgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBtb2RpZmllcyB0aGUgZGF0YS4gIFlvdSBkaWQgam91cm5hbF9hY2Nlc3MgYWxyZWFkeSwKKyAqIHJpZ2h0PworICovCitzdGF0aWMgaW50IG9jZnMyX3hhX3ByZXBhcmVfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCSAgdTMyIG5hbWVfaGFzaCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGludCBvcmlnX2NsdXN0ZXJzOworCV9fbGU2NCBvcmlnX3ZhbHVlX3NpemUgPSAwOworCisJcmMgPSBvY2ZzMl94YV9jaGVja19zcGFjZShsb2MsIHhpKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJaWYgKGxvYy0+eGxfZW50cnkpIHsKKwkJaWYgKG9jZnMyX3hhX2Nhbl9yZXVzZV9lbnRyeShsb2MsIHhpKSkgeworCQkJb3JpZ192YWx1ZV9zaXplID0gbG9jLT54bF9lbnRyeS0+eGVfdmFsdWVfc2l6ZTsKKwkJCXJjID0gb2NmczJfeGFfcmV1c2VfZW50cnkobG9jLCB4aSwgY3R4dCk7CisJCQlpZiAocmMpCisJCQkJZ290byBvdXQ7CisJCQlnb3RvIGFsbG9jX3ZhbHVlOworCQl9CisKKwkJaWYgKCFvY2ZzMl94YXR0cl9pc19sb2NhbChsb2MtPnhsX2VudHJ5KSkgeworCQkJb3JpZ19jbHVzdGVycyA9IG9jZnMyX3hhX3ZhbHVlX2NsdXN0ZXJzKGxvYyk7CisJCQlyYyA9IG9jZnMyX3hhX3ZhbHVlX3RydW5jYXRlKGxvYywgMCwgY3R4dCk7CisJCQlpZiAocmMpIHsKKwkJCQltbG9nX2Vycm5vKHJjKTsKKwkJCQlvY2ZzMl94YV9jbGVhbnVwX3ZhbHVlX3RydW5jYXRlKGxvYywKKwkJCQkJCQkJIm92ZXJ3cml0aW5nIiwKKwkJCQkJCQkJb3JpZ19jbHVzdGVycyk7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KKwkJb2NmczJfeGFfd2lwZV9uYW1ldmFsdWUobG9jKTsKKwl9IGVsc2UKKwkJb2NmczJfeGFfYWRkX2VudHJ5KGxvYywgbmFtZV9oYXNoKTsKKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYSBibGFuayBlbnRyeS4gIEZpbGwgaXQuICBXZSBncm93IG91cgorCSAqIG5hbWUrdmFsdWUgcGFpciBiYWNrIGZyb20gdGhlIGVuZC4KKwkgKi8KKwlvY2ZzMl94YV9hZGRfbmFtZXZhbHVlKGxvYywgeGkpOworCWlmICh4aS0+eGlfdmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJCW9jZnMyX3hhX2luc3RhbGxfdmFsdWVfcm9vdChsb2MpOworCithbGxvY192YWx1ZToKKwlpZiAoeGktPnhpX3ZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCW9yaWdfY2x1c3RlcnMgPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpOworCQlyYyA9IG9jZnMyX3hhX3ZhbHVlX3RydW5jYXRlKGxvYywgeGktPnhpX3ZhbHVlX2xlbiwgY3R4dCk7CisJCWlmIChyYyA8IDApIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSB0cmllZCB0byBncm93IGFuIGV4aXN0aW5nIGV4dGVybmFsIHZhbHVlLAorCQkJICogb2NmczJfeGFfY2xlYW51UC12YWx1ZV90cnVuY2F0ZSgpIGlzIGdvaW5nIHRvCisJCQkgKiBsZXQgaXQgc3RhbmQuICBXZSBoYXZlIHRvIHJlc3RvcmUgaXRzIG9yaWdpbmFsCisJCQkgKiB2YWx1ZSBzaXplLgorCQkJICovCisJCQlsb2MtPnhsX2VudHJ5LT54ZV92YWx1ZV9zaXplID0gb3JpZ192YWx1ZV9zaXplOworCQkJb2NmczJfeGFfY2xlYW51cF92YWx1ZV90cnVuY2F0ZShsb2MsICJncm93aW5nIiwKKwkJCQkJCQlvcmlnX2NsdXN0ZXJzKTsKKwkJCW1sb2dfZXJybm8ocmMpOworCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHhzLT5pbm9kZV9iaCwKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTdG9yZSB0aGUgdmFsdWUgcG9ydGlvbiBvZiB0aGUgbmFtZSt2YWx1ZSBwYWlyLiAgVGhpcyB3aWxsIHNraXAKKyAqIHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQgZXh0ZXJuYWxseS4gIFRoZWlyIHRyZWUgcm9vdHMgd2VyZSBzZXQgdXAKKyAqIGJ5IG9jZnMyX3hhX3ByZXBhcmVfZW50cnkoKS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YV9zdG9yZV92YWx1ZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgcmMgPSAwOworCWludCBuYW1ldmFsX29mZnNldCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKwlpbnQgbmFtZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRSh4aS0+eGlfbmFtZV9sZW4pOworCWNoYXIgKm5hbWV2YWxfYnVmOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmI7CisKKwluYW1ldmFsX2J1ZiA9IG9jZnMyX3hhX29mZnNldF9wb2ludGVyKGxvYywgbmFtZXZhbF9vZmZzZXQpOworCWlmICh4aS0+eGlfdmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKKwkJb2NmczJfeGFfZmlsbF92YWx1ZV9idWYobG9jLCAmdmIpOworCQlyYyA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUobG9jLT54bF9pbm9kZSwKKwkJCQkJCSAgICAgY3R4dC0+aGFuZGxlLCAmdmIsCisJCQkJCQkgICAgIHhpLT54aV92YWx1ZSwKKwkJCQkJCSAgICAgeGktPnhpX3ZhbHVlX2xlbik7CisJfSBlbHNlCisJCW1lbWNweShuYW1ldmFsX2J1ZiArIG5hbWVfc2l6ZSwgeGktPnhpX3ZhbHVlLCB4aS0+eGlfdmFsdWVfbGVuKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9zZXQoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQoreworCWludCByZXQ7CisJdTMyIG5hbWVfaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChsb2MtPnhsX2lub2RlLCB4aS0+eGlfbmFtZSwKKwkJCQkJICAgICAgeGktPnhpX25hbWVfbGVuKTsKKworCXJldCA9IG9jZnMyX3hhX2pvdXJuYWxfYWNjZXNzKGN0eHQtPmhhbmRsZSwgbG9jLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCEoZmxhZyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKLQkJcmV0ID0gdmIudmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi52Yl9iaCwKLQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JCWlmIChyZXQpIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJLyoKLQkgKiBTZXQgdmFsdWUgaW4gbG9jYWwsIGluY2x1ZGUgc2V0IHRyZWUgcm9vdCBpbiBsb2NhbC4KLQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGZvciB2YWx1ZSBzaXplID5JTkxJTkVfU0laRS4KKwkgKiBGcm9tIGhlcmUgb24gb3V0LCBldmVyeXRoaW5nIGlzIGdvaW5nIHRvIG1vZGlmeSB0aGUgYnVmZmVyIGEKKwkgKiBsaXR0bGUuICBFcnJvcnMgYXJlIGdvaW5nIHRvIGxlYXZlIHRoZSB4YXR0ciBoZWFkZXIgaW4gYQorCSAqIHNhbmUgc3RhdGUuICBUaHVzLCBldmVuIHdpdGggZXJyb3JzIHdlIGRpcnR5IHRoZSBzdWNrZXIuCiAJICovCi0Jb2NmczJfeGF0dHJfc2V0X2VudHJ5X2xvY2FsKGlub2RlLCAmeGlfbCwgeHMsIGxhc3QsIG1pbl9vZmZzKTsKIAotCWlmICghKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7Ci0JCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+eGF0dHJfYmgpOwotCQlpZiAocmV0IDwgMCkgeworCS8qIERvbid0IHdvcnJ5LCB3ZSBhcmUgbmV2ZXIgY2FsbGVkIHdpdGggIXhpX3ZhbHVlIGFuZCAheGxfZW50cnkgKi8KKwlpZiAoIXhpLT54aV92YWx1ZSkgeworCQlyZXQgPSBvY2ZzMl94YV9yZW1vdmUobG9jLCBjdHh0KTsKKwkJZ290byBvdXRfZGlydHk7CisJfQorCisJcmV0ID0gb2NmczJfeGFfcHJlcGFyZV9lbnRyeShsb2MsIHhpLCBuYW1lX2hhc2gsIGN0eHQpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJZ290byBvdXRfZGlydHk7CiAJfQogCi0JaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkgJiYKLQkgICAgKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7Ci0JCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwotCQl1bnNpZ25lZCBpbnQgeGF0dHJzaXplID0gb3NiLT5zX3hhdHRyX2lubGluZV9zaXplOwotCi0JCS8qCi0JCSAqIEFkanVzdCBleHRlbnQgcmVjb3JkIGNvdW50IG9yIGlubGluZSBkYXRhIHNpemUKLQkJICogdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlLgotCQkgKi8KLQkJaWYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgewotCQkJc3RydWN0IG9jZnMyX2lubGluZV9kYXRhICppZGF0YSA9ICZkaS0+aWQyLmlfZGF0YTsKLQkJCWxlMTZfYWRkX2NwdSgmaWRhdGEtPmlkX2NvdW50LCAteGF0dHJzaXplKTsKLQkJfSBlbHNlIGlmICghKG9jZnMyX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpKSB7Ci0JCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJmRpLT5pZDIuaV9saXN0OwotCQkJbGUxNl9hZGRfY3B1KCZlbC0+bF9jb3VudCwgLSh4YXR0cnNpemUgLwotCQkJCQlzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKSk7Ci0JCX0KLQkJZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBjcHVfdG9fbGUxNih4YXR0cnNpemUpOwotCX0KLQkvKiBVcGRhdGUgeGF0dHIgZmxhZyAqLwotCXNwaW5fbG9jaygmb2ktPmlwX2xvY2spOwotCW9pLT5pcF9keW5fZmVhdHVyZXMgfD0gZmxhZzsKLQlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihvaS0+aXBfZHluX2ZlYXR1cmVzKTsKLQlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOwotCi0JcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5pbm9kZV9iaCk7Ci0JaWYgKHJldCA8IDApCisJcmV0ID0gb2NmczJfeGFfc3RvcmVfdmFsdWUobG9jLCB4aSwgY3R4dCk7CisJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCi0JaWYgKCFyZXQgJiYgeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qCi0JCSAqIFNldCB2YWx1ZSBvdXRzaWRlIGluIEIgdHJlZS4KLQkJICogVGhpcyBpcyB0aGUgc2Vjb25kIHN0ZXAgZm9yIHZhbHVlIHNpemUgPiBJTkxJTkVfU0laRS4KLQkJICovCi0JCXNpemVfdCBvZmZzID0gbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KTsKLQkJcmV0ID0gb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHhpLCB4cywgY3R4dCwKLQkJCQkJCSAgICAmdmIsIG9mZnMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJaW50IHJldDI7CitvdXRfZGlydHk6CisJb2NmczJfeGFfam91cm5hbF9kaXJ0eShjdHh0LT5oYW5kbGUsIGxvYyk7CiAKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCS8qCi0JCQkgKiBJZiBzZXQgdmFsdWUgb3V0c2lkZSBmYWlsZWQsIHdlIGhhdmUgdG8gY2xlYW4KLQkJCSAqIHRoZSBqdW5rIHRyZWUgcm9vdCB3ZSBoYXZlIGFscmVhZHkgc2V0IGluIGxvY2FsLgotCQkJICovCi0JCQlyZXQyID0gb2NmczJfeGF0dHJfY2xlYW51cChpbm9kZSwgY3R4dC0+aGFuZGxlLAotCQkJCQkJICAgeGksIHhzLCAmdmIsIG9mZnMpOwotCQkJaWYgKHJldDIgPCAwKQotCQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCX0KLQl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgb2NmczJfaW5pdF9kaW5vZGVfeGFfbG9jKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopYmgtPmJfZGF0YTsKKworCUJVR19PTighKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKTsKKworCWxvYy0+eGxfaW5vZGUgPSBpbm9kZTsKKwlsb2MtPnhsX29wcyA9ICZvY2ZzMl94YV9ibG9ja19sb2Nfb3BzOworCWxvYy0+eGxfc3RvcmFnZSA9IGJoOworCWxvYy0+eGxfZW50cnkgPSBlbnRyeTsKKwlsb2MtPnhsX3NpemUgPSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSk7CisJbG9jLT54bF9oZWFkZXIgPQorCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKShiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSAtCisJCQkJCSAgICAgIGxvYy0+eGxfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfeGF0dHJfYmxvY2tfeGFfbG9jKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJoLT5iX2RhdGE7CisKKwlCVUdfT04obGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpOworCisJbG9jLT54bF9pbm9kZSA9IGlub2RlOworCWxvYy0+eGxfb3BzID0gJm9jZnMyX3hhX2Jsb2NrX2xvY19vcHM7CisJbG9jLT54bF9zdG9yYWdlID0gYmg7CisJbG9jLT54bF9oZWFkZXIgPSAmKHhiLT54Yl9hdHRycy54Yl9oZWFkZXIpOworCWxvYy0+eGxfZW50cnkgPSBlbnRyeTsKKwlsb2MtPnhsX3NpemUgPSBiaC0+Yl9zaXplIC0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrLAorCQkJCQkgICAgIHhiX2F0dHJzLnhiX2hlYWRlcik7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfeGF0dHJfYnVja2V0X3hhX2xvYyhzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeSkKK3sKKwlsb2MtPnhsX2lub2RlID0gYnVja2V0LT5idV9pbm9kZTsKKwlsb2MtPnhsX29wcyA9ICZvY2ZzMl94YV9idWNrZXRfbG9jX29wczsKKwlsb2MtPnhsX3N0b3JhZ2UgPSBidWNrZXQ7CisJbG9jLT54bF9oZWFkZXIgPSBidWNrZXRfeGgoYnVja2V0KTsKKwlsb2MtPnhsX2VudHJ5ID0gZW50cnk7CisJbG9jLT54bF9zaXplID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkU7Cit9CisKIC8qCiAgKiBJbiB4YXR0ciByZW1vdmUsIGlmIGl0IGlzIHN0b3JlZCBvdXRzaWRlIGFuZCByZWZjb3VudGVkLCB3ZSBtYXkgaGF2ZQogICogdGhlIGNoYW5jZSB0byBzcGxpdCB0aGUgcmVmY291bnQgdHJlZS4gU28gbmVlZCB0aGUgYWxsb2NhdG9ycy4KQEAgLTIxNDksNiArMjY4Myw1NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2lib2R5X2luaXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwl1bnNpZ25lZCBpbnQgeGF0dHJzaXplID0gb3NiLT5zX3hhdHRyX2lubGluZV9zaXplOworCisJaWYgKCFvY2ZzMl94YXR0cl9oYXNfc3BhY2VfaW5saW5lKGlub2RlLCBkaSkpIHsKKwkJcmV0ID0gLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBBZGp1c3QgZXh0ZW50IHJlY29yZCBjb3VudCBvciBpbmxpbmUgZGF0YSBzaXplCisJICogdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlLgorCSAqLworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwkJc3RydWN0IG9jZnMyX2lubGluZV9kYXRhICppZGF0YSA9ICZkaS0+aWQyLmlfZGF0YTsKKwkJbGUxNl9hZGRfY3B1KCZpZGF0YS0+aWRfY291bnQsIC14YXR0cnNpemUpOworCX0gZWxzZSBpZiAoIShvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgeworCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJmRpLT5pZDIuaV9saXN0OworCQlsZTE2X2FkZF9jcHUoJmVsLT5sX2NvdW50LCAtKHhhdHRyc2l6ZSAvCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKSkpOworCX0KKwlkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSA9IGNwdV90b19sZTE2KHhhdHRyc2l6ZSk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0lOTElORV9YQVRUUl9GTHxPQ0ZTMl9IQVNfWEFUVFJfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoY3R4dC0+aGFuZGxlLCBkaV9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBvY2ZzMl94YXR0cl9pYm9keV9zZXQoKQogICoKQEAgLTIxNjAsOSArMjc0MywxMCBAQAogCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKIAkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQogeworCWludCByZXQ7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOwotCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhX2xvYyBsb2M7CiAKIAlpZiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUpCiAJCXJldHVybiAtRU5PU1BDOwpAQCAtMjE3NSw4ICsyNzU5LDI1IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnkoaW5vZGUsIHhpLCB4cywgY3R4dCwKLQkJCQkoT0NGUzJfSU5MSU5FX1hBVFRSX0ZMIHwgT0NGUzJfSEFTX1hBVFRSX0ZMKSk7CisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfaW5pdChpbm9kZSwgeHMtPmlub2RlX2JoLCBjdHh0KTsKKwkJaWYgKHJldCkgeworCQkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJb2NmczJfaW5pdF9kaW5vZGVfeGFfbG9jKCZsb2MsIGlub2RlLCB4cy0+aW5vZGVfYmgsCisJCQkJIHhzLT5ub3RfZm91bmQgPyBOVUxMIDogeHMtPmhlcmUpOworCXJldCA9IG9jZnMyX3hhX3NldCgmbG9jLCB4aSwgY3R4dCk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwl4cy0+aGVyZSA9IGxvYy54bF9lbnRyeTsKKwogb3V0OgogCXVwX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKIApAQCAtMjIzNiwxMiArMjgzNywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3hhdHRyX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoLAotCQkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAotCQkJCSAgICBpbnQgaW5kZXhlZCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0LAorCQkJCSAgICBpbnQgaW5kZXhlZCwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoKQogewogCWludCByZXQ7CiAJdTE2IHN1YmFsbG9jX2JpdF9zdGFydDsKQEAgLTIyNTIsMTQgKzI4NTIsMTQgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YmxrOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGlub2RlX2JoLAotCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJICAgICAgaW5vZGVfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIGVuZDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGN0eHQtPmhhbmRsZSwgY3R4dC0+bWV0YV9hYywgMSwKIAkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKIAkJCQkgICAmZmlyc3RfYmxrbm8pOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yMjcwLDcgKzI4NzAsNyBAQAogCW5ld19iaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgZmlyc3RfYmxrbm8pOwogCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGlub2RlKSwgbmV3X2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGN0eHQtPmhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLAogCQkJCSAgICAgIG5ld19iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yMjgyLDExICsyODgyLDEwIEBACiAJeGJsayA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKIAltZW1zZXQoeGJsaywgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAlzdHJjcHkoKHZvaWQgKil4YmxrLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpOwotCXhibGstPnhiX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwl4YmxrLT54Yl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYoY3R4dC0+bWV0YV9hYy0+YWNfYWxsb2Nfc2xvdCk7CiAJeGJsay0+eGJfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKIAl4YmxrLT54Yl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKIAl4YmxrLT54Yl9ibGtubyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQogCWlmIChpbmRleGVkKSB7CiAJCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgKnhyID0gJnhibGstPnhiX2F0dHJzLnhiX3Jvb3Q7CiAJCXhyLT54dF9jbHVzdGVycyA9IGNwdV90b19sZTMyKDEpOwpAQCAtMjI5NywxNCArMjg5NiwxNyBAQAogCQl4ci0+eHRfbGlzdC5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKIAkJeGJsay0+eGJfZmxhZ3MgPSBjcHVfdG9fbGUxNihPQ0ZTMl9YQVRUUl9JTkRFWEVEKTsKIAl9CisJb2NmczJfam91cm5hbF9kaXJ0eShjdHh0LT5oYW5kbGUsIG5ld19iaCk7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKLQlpZiAocmV0IDwgMCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gZW5kOwotCX0KKwkvKiBBZGQgaXQgdG8gdGhlIGlub2RlICovCiAJZGktPmlfeGF0dHJfbG9jID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOwotCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBpbm9kZV9iaCk7CisKKwlzcGluX2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKKwlPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19YQVRUUl9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlzcGluX3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2xvY2spOworCisJb2NmczJfam91cm5hbF9kaXJ0eShjdHh0LT5oYW5kbGUsIGlub2RlX2JoKTsKIAogCSpyZXRfYmggPSBuZXdfYmg7CiAJbmV3X2JoID0gTlVMTDsKQEAgLTIzMjYsMTMgKzI5MjgsMTMgQEAKIAkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKLQloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGJsayA9IE5VTEw7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGFfbG9jIGxvYzsKIAogCWlmICgheHMtPnhhdHRyX2JoKSB7Ci0JCXJldCA9IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGUsIGlub2RlLCB4cy0+aW5vZGVfYmgsCi0JCQkJCSAgICAgICBjdHh0LT5tZXRhX2FjLCAmbmV3X2JoLCAwKTsKKwkJcmV0ID0gb2NmczJfY3JlYXRlX3hhdHRyX2Jsb2NrKGlub2RlLCB4cy0+aW5vZGVfYmgsIGN0eHQsCisJCQkJCSAgICAgICAwLCAmbmV3X2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBlbmQ7CkBAIC0yMzQ4LDIxICsyOTUwLDI1IEBACiAJCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeHMtPnhhdHRyX2JoLT5iX2RhdGE7CiAKIAlpZiAoIShsZTE2X3RvX2NwdSh4YmxrLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgewotCQkvKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gZXh0ZXJuYWwgYmxvY2sgKi8KLQkJcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5KGlub2RlLCB4aSwgeHMsIGN0eHQsCi0JCQkJCSAgICBPQ0ZTMl9IQVNfWEFUVFJfRkwpOwotCQlpZiAoIXJldCB8fCByZXQgIT0gLUVOT1NQQykKLQkJCWdvdG8gZW5kOworCQlvY2ZzMl9pbml0X3hhdHRyX2Jsb2NrX3hhX2xvYygmbG9jLCBpbm9kZSwgeHMtPnhhdHRyX2JoLAorCQkJCQkgICAgICB4cy0+bm90X2ZvdW5kID8gTlVMTCA6IHhzLT5oZXJlKTsKIAotCQlyZXQgPSBvY2ZzMl94YXR0cl9jcmVhdGVfaW5kZXhfYmxvY2soaW5vZGUsIHhzLCBjdHh0KTsKLQkJaWYgKHJldCkKKwkJcmV0ID0gb2NmczJfeGFfc2V0KCZsb2MsIHhpLCBjdHh0KTsKKwkJaWYgKCFyZXQpCisJCQl4cy0+aGVyZSA9IGxvYy54bF9lbnRyeTsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9TUEMpCiAJCQlnb3RvIGVuZDsKKwkJZWxzZSB7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9jcmVhdGVfaW5kZXhfYmxvY2soaW5vZGUsIHhzLCBjdHh0KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlbmQ7CisJCX0KIAl9CiAKLQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5kZXhfYmxvY2soaW5vZGUsIHhpLCB4cywgY3R4dCk7CisJaWYgKGxlMTZfdG9fY3B1KHhibGstPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpCisJCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbmRleF9ibG9jayhpbm9kZSwgeGksIHhzLCBjdHh0KTsKIAogZW5kOgotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM3MSw3ICsyOTc3LDYgQEAKIAkJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKIHsKLQl1NjQgdmFsdWVfc2l6ZTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmxhc3Q7CiAJaW50IGZyZWUsIGk7CiAJc2l6ZV90IG1pbl9vZmZzID0geHMtPmVuZCAtIHhzLT5iYXNlOwpAQCAtMjM5NCwxMyArMjk5OSw3IEBACiAKIAlCVUdfT04oIXhzLT5ub3RfZm91bmQpOwogCi0JaWYgKHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKLQkJdmFsdWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQllbHNlCi0JCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOwotCi0JaWYgKGZyZWUgPj0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKwotCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKHN0cmxlbih4aS0+bmFtZSkpICsgdmFsdWVfc2l6ZSkKKwlpZiAoZnJlZSA+PSAoc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKyBuYW1ldmFsdWVfc2l6ZV94aSh4aSkpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtMjQyNCw3ICszMDIzLDcgQEAKIAljaGFyICpiYXNlID0gTlVMTDsKIAlpbnQgbmFtZV9vZmZzZXQsIG5hbWVfbGVuID0gMDsKIAl1MzIgbmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLAotCQkJCQkJICAgIHhpLT52YWx1ZV9sZW4pOworCQkJCQkJICAgIHhpLT54aV92YWx1ZV9sZW4pOwogCXU2NCB2YWx1ZV9zaXplOwogCiAJLyoKQEAgLTI0MzIsMTQgKzMwMzEsMTQgQEAKIAkgKiBObyBtYXR0ZXIgd2hldGhlciB3ZSByZXBsYWNlIGFuIG9sZCBvbmUgb3IgYWRkIGEgbmV3IG9uZSwKIAkgKiB3ZSBuZWVkIHRoaXMgZm9yIHdyaXRpbmcuCiAJICovCi0JaWYgKHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKKwlpZiAoeGktPnhpX3ZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQogCQljcmVkaXRzICs9IG5ld19jbHVzdGVycyAqCiAJCQkgICBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOwogCiAJaWYgKHhpcy0+bm90X2ZvdW5kICYmIHhicy0+bm90X2ZvdW5kKSB7CiAJCWNyZWRpdHMgKz0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOwogCi0JCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKKwkJaWYgKHhpLT54aV92YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewogCQkJY2x1c3RlcnNfYWRkICs9IG5ld19jbHVzdGVyczsKIAkJCWNyZWRpdHMgKz0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhpbm9kZS0+aV9zYiwKIAkJCQkJCQkmZGVmX3h2Lnh2LnhyX2xpc3QsCkBAIC0yNDg0LDcgKzMwODMsNyBAQAogCSAqIFRoZSBjcmVkaXRzIGZvciByZW1vdmluZyB0aGUgdmFsdWUgdHJlZSB3aWxsIGJlIGV4dGVuZGVkCiAJICogYnkgb2NmczJfcmVtb3ZlX2V4dGVudCBpdHNlbGYuCiAJICovCi0JaWYgKCF4aS0+dmFsdWUpIHsKKwlpZiAoIXhpLT54aV92YWx1ZSkgewogCQlpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkKIAkJCWNyZWRpdHMgKz0gb2NmczJfcmVtb3ZlX2V4dGVudF9jcmVkaXRzKGlub2RlLT5pX3NiKTsKIApAQCAtMjUxNCw3ICszMTEzLDcgQEAKIAkJfQogCX0KIAotCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKKwlpZiAoeGktPnhpX3ZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CiAJCS8qIHRoZSBuZXcgdmFsdWVzIHdpbGwgYmUgc3RvcmVkIG91dHNpZGUuICovCiAJCXUzMiBvbGRfY2x1c3RlcnMgPSAwOwogCkBAIC0yNTQ3LDkgKzMxNDYsMTAgQEAKIAkJICogdmFsdWUsIHdlIGRvbid0IG5lZWQgYW55IGFsbG9jYXRpb24sIG90aGVyd2lzZSB3ZSBoYXZlCiAJCSAqIHRvIGd1ZXNzIG1ldGFkYXRhIGFsbG9jYXRpb24uCiAJCSAqLwotCQlpZiAoKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSAmJiB2YWx1ZV9zaXplID49IHhpLT52YWx1ZV9sZW4pIHx8CisJCWlmICgob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpICYmCisJCSAgICAgKHZhbHVlX3NpemUgPj0geGktPnhpX3ZhbHVlX2xlbikpIHx8CiAJCSAgICAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSAmJgotCQkgICAgIE9DRlMyX1hBVFRSX1JPT1RfU0laRSA+PSB4aS0+dmFsdWVfbGVuKSkKKwkJICAgICBPQ0ZTMl9YQVRUUl9ST09UX1NJWkUgPj0geGktPnhpX3ZhbHVlX2xlbikpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI2MzksNyArMzIzOSw3IEBACiAKIAltZXRhX2FkZCArPSBleHRyYV9tZXRhOwogCW1sb2coMCwgIlNldCB4YXR0ciAlcywgcmVzZXJ2ZSBtZXRhIGJsb2NrcyA9ICVkLCBjbHVzdGVycyA9ICVkLCAiCi0JICAgICAiY3JlZGl0cyA9ICVkXG4iLCB4aS0+bmFtZSwgbWV0YV9hZGQsIGNsdXN0ZXJzX2FkZCwgKmNyZWRpdHMpOworCSAgICAgImNyZWRpdHMgPSAlZFxuIiwgeGktPnhpX25hbWUsIG1ldGFfYWRkLCBjbHVzdGVyc19hZGQsICpjcmVkaXRzKTsKIAogCWlmIChtZXRhX2FkZCkgewogCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCBtZXRhX2FkZCwKQEAgLTI2NzksNyArMzI3OSw3IEBACiB7CiAJaW50IHJldCA9IDAsIGNyZWRpdHMsIG9sZF9mb3VuZDsKIAotCWlmICgheGktPnZhbHVlKSB7CisJaWYgKCF4aS0+eGlfdmFsdWUpIHsKIAkJLyogUmVtb3ZlIGV4aXN0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSAqLwogCQlpZiAoIXhpcy0+bm90X2ZvdW5kKQogCQkJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfc2V0KGlub2RlLCB4aSwgeGlzLCBjdHh0KTsKQEAgLTI2OTMsOCArMzI5Myw4IEBACiAJCQkgKiBJZiBzdWNjZWVkIGFuZCB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdGluZyBpbgogCQkJICogZXh0ZXJuYWwgYmxvY2ssIHRoZW4gd2Ugd2lsbCByZW1vdmUgaXQuCiAJCQkgKi8KLQkJCXhpLT52YWx1ZSA9IE5VTEw7Ci0JCQl4aS0+dmFsdWVfbGVuID0gMDsKKwkJCXhpLT54aV92YWx1ZSA9IE5VTEw7CisJCQl4aS0+eGlfdmFsdWVfbGVuID0gMDsKIAogCQkJb2xkX2ZvdW5kID0geGlzLT5ub3RfZm91bmQ7CiAJCQl4aXMtPm5vdF9mb3VuZCA9IC1FTk9EQVRBOwpAQCAtMjcyMiw4ICszMzIyLDggQEAKIAkJfSBlbHNlIGlmIChyZXQgPT0gLUVOT1NQQykgewogCQkJaWYgKGRpLT5pX3hhdHRyX2xvYyAmJiAheGJzLT54YXR0cl9iaCkgewogCQkJCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX2ZpbmQoaW5vZGUsCi0JCQkJCQkJICAgICB4aS0+bmFtZV9pbmRleCwKLQkJCQkJCQkgICAgIHhpLT5uYW1lLCB4YnMpOworCQkJCQkJCSAgICAgeGktPnhpX25hbWVfaW5kZXgsCisJCQkJCQkJICAgICB4aS0+eGlfbmFtZSwgeGJzKTsKIAkJCQlpZiAocmV0KQogCQkJCQlnb3RvIG91dDsKIApAQCAtMjc2Miw4ICszMzYyLDggQEAKIAkJCQkgKiBJZiBzdWNjZWVkIGFuZCB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZQogCQkJCSAqIGV4aXN0aW5nIGluIGlub2RlLCB3ZSB3aWxsIHJlbW92ZSBpdC4KIAkJCQkgKi8KLQkJCQl4aS0+dmFsdWUgPSBOVUxMOwotCQkJCXhpLT52YWx1ZV9sZW4gPSAwOworCQkJCXhpLT54aV92YWx1ZSA9IE5VTEw7CisJCQkJeGktPnhpX3ZhbHVlX2xlbiA9IDA7CiAJCQkJeGJzLT5ub3RfZm91bmQgPSAtRU5PREFUQTsKIAkJCQlyZXQgPSBvY2ZzMl9jYWxjX3hhdHRyX3NldF9uZWVkKGlub2RlLAogCQkJCQkJCQlkaSwKQEAgLTI4MjksMTAgKzM0MjksMTEgQEAKIAlpbnQgcmV0OwogCiAJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8geGkgPSB7Ci0JCS5uYW1lX2luZGV4ID0gbmFtZV9pbmRleCwKLQkJLm5hbWUgPSBuYW1lLAotCQkudmFsdWUgPSB2YWx1ZSwKLQkJLnZhbHVlX2xlbiA9IHZhbHVlX2xlbiwKKwkJLnhpX25hbWVfaW5kZXggPSBuYW1lX2luZGV4LAorCQkueGlfbmFtZSA9IG5hbWUsCisJCS54aV9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKSwKKwkJLnhpX3ZhbHVlID0gdmFsdWUsCisJCS54aV92YWx1ZV9sZW4gPSB2YWx1ZV9sZW4sCiAJfTsKIAogCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggeGlzID0gewpAQCAtMjkxMiwxMCArMzUxMywxMSBAQAogCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSA9IE5VTEw7CiAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB4aSA9IHsKLQkJLm5hbWVfaW5kZXggPSBuYW1lX2luZGV4LAotCQkubmFtZSA9IG5hbWUsCi0JCS52YWx1ZSA9IHZhbHVlLAotCQkudmFsdWVfbGVuID0gdmFsdWVfbGVuLAorCQkueGlfbmFtZV9pbmRleCA9IG5hbWVfaW5kZXgsCisJCS54aV9uYW1lID0gbmFtZSwKKwkJLnhpX25hbWVfbGVuID0gc3RybGVuKG5hbWUpLAorCQkueGlfdmFsdWUgPSB2YWx1ZSwKKwkJLnhpX3ZhbHVlX2xlbiA9IHZhbHVlX2xlbiwKIAl9OwogCiAJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB4aXMgPSB7CkBAIC0zNzU5LDcgKzQzNjEsNyBAQAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0KQogewogCWludCByZXQsIGk7Ci0Jc2l6ZV90IGVuZCwgb2Zmc2V0LCBsZW4sIHZhbHVlX2xlbjsKKwlzaXplX3QgZW5kLCBvZmZzZXQsIGxlbjsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKIAljaGFyICplbnRyaWVzLCAqYnVmLCAqYnVja2V0X2J1ZiA9IE5VTEw7CiAJdTY0IGJsa25vID0gYnVja2V0X2Jsa25vKGJ1Y2tldCk7CkBAIC0zODEzLDEyICs0NDE1LDcgQEAKIAllbmQgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRTsKIAlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrLCB4ZSsrKSB7CiAJCW9mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7Ci0JCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCi0JCQl2YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKAotCQkJCQlsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOwotCQllbHNlCi0JCQl2YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JCWxlbiA9IE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSArIHZhbHVlX2xlbjsKKwkJbGVuID0gbmFtZXZhbHVlX3NpemVfeGUoeGUpOwogCiAJCS8qCiAJCSAqIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIG5hbWUvdmFsdWUgcGFpcgpAQCAtNDAwNyw3ICs0NjA0LDcgQEAKIAkJCQkgICAgaW50IG5ld19idWNrZXRfaGVhZCkKIHsKIAlpbnQgcmV0LCBpOwotCWludCBjb3VudCwgc3RhcnQsIGxlbiwgbmFtZV92YWx1ZV9sZW4gPSAwLCB4ZV9sZW4sIG5hbWVfb2Zmc2V0ID0gMDsKKwlpbnQgY291bnQsIHN0YXJ0LCBsZW4sIG5hbWVfdmFsdWVfbGVuID0gMCwgbmFtZV9vZmZzZXQgPSAwOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKnNfYnVja2V0ID0gTlVMTCwgKnRfYnVja2V0ID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOwpAQCAtNDA5OCwxMyArNDY5NSw3IEBACiAJbmFtZV92YWx1ZV9sZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7CiAJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOwotCQl4ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbik7Ci0JCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCi0JCQl4ZV9sZW4gKz0KLQkJCSAgIE9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeGUtPnhlX3ZhbHVlX3NpemUpKTsKLQkJZWxzZQotCQkJeGVfbGVuICs9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQkJbmFtZV92YWx1ZV9sZW4gKz0geGVfbGVuOworCQluYW1lX3ZhbHVlX2xlbiArPSBuYW1ldmFsdWVfc2l6ZV94ZSh4ZSk7CiAJCWlmIChsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpIDwgbmFtZV9vZmZzZXQpCiAJCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CiAJfQpAQCAtNDEzNCwxMiArNDcyNSw2IEBACiAJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSk7CiAJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7IGkrKykgewogCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tpXTsKLQkJeGVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQotCQkJeGVfbGVuICs9Ci0JCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7Ci0JCWVsc2UKLQkJCXhlX2xlbiArPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CiAJCWlmIChsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpIDwKIAkJICAgIGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KSkKIAkJCXhoLT54aF9mcmVlX3N0YXJ0ID0geGUtPnhlX25hbWVfb2Zmc2V0OwpAQCAtNDc1MSwxOTUgKzUzMzYsNiBAQAogfQogCiAvKgotICogSGFuZGxlIHRoZSBub3JtYWwgeGF0dHIgc2V0LCBpbmNsdWRpbmcgcmVwbGFjZSwgZGVsZXRlIGFuZCBuZXcuCi0gKgotICogTm90ZTogImxvY2FsIiBpbmRpY2F0ZXMgdGhlIHJlYWwgZGF0YSdzIGxvY2FsaXR5LiBTbyB3ZSBjYW4ndAotICoganVzdCBpdHMgYnVja2V0IGxvY2FsaXR5IGJ5IGl0cyBsZW5ndGguCi0gKi8KLXN0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3NldF9lbnRyeV9ub3JtYWwoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQkgdTMyIG5hbWVfaGFzaCwKLQkJCQkJIGludCBsb2NhbCkKLXsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmxhc3QsICp4ZTsKLQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOwotCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0geHMtPmhlYWRlcjsKLQl1MTYgY291bnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpLCBzdGFydDsKLQlzaXplX3QgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwotCWNoYXIgKnZhbDsKLQlzaXplX3Qgb2Zmcywgc2l6ZSwgbmV3X3NpemU7Ci0KLQlsYXN0ID0gJnhoLT54aF9lbnRyaWVzW2NvdW50XTsKLQlpZiAoIXhzLT5ub3RfZm91bmQpIHsKLQkJeGUgPSB4cy0+aGVyZTsKLQkJb2ZmcyA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7Ci0JCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCi0JCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOwotCQllbHNlCi0JCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJT0NGUzJfWEFUVFJfU0laRShPQ0ZTMl9YQVRUUl9ST09UX1NJWkUpOwotCi0JCS8qCi0JCSAqIElmIHRoZSBuZXcgdmFsdWUgd2lsbCBiZSBzdG9yZWQgb3V0c2lkZSwgeGktPnZhbHVlIGhhcyBiZWVuCi0JCSAqIGluaXRhbGl6ZWQgYXMgYW4gZW1wdHkgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCwgYW5kIHRoZSBzYW1lCi0JCSAqIGdvZXMgd2l0aCB4aS0+dmFsdWVfbGVuLCBzbyB3ZSBjYW4gc2V0IG5ld19zaXplIHNhZmVseSBoZXJlLgotCQkgKiBTZWUgb2NmczJfeGF0dHJfc2V0X2luX2J1Y2tldC4KLQkJICovCi0JCW5ld19zaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKLQotCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgLXNpemUpOwotCQlpZiAoeGktPnZhbHVlKSB7Ci0JCQlpZiAobmV3X3NpemUgPiBzaXplKQotCQkJCWdvdG8gc2V0X25ld19uYW1lX3ZhbHVlOwotCi0JCQkvKiBOb3cgcmVwbGFjZSB0aGUgb2xkIHZhbHVlIHdpdGggbmV3IG9uZS4gKi8KLQkJCWlmIChsb2NhbCkKLQkJCQl4ZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOwotCQkJZWxzZQotCQkJCXhlLT54ZV92YWx1ZV9zaXplID0gMDsKLQotCQkJdmFsID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF92YWwoaW5vZGUsCi0JCQkJCQkJIHhzLT5idWNrZXQsIG9mZnMpOwotCQkJbWVtc2V0KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLCAwLAotCQkJICAgICAgIHNpemUgLSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSk7Ci0JCQlpZiAoT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSA+IDApCi0JCQkJbWVtY3B5KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAotCQkJCSAgICAgICB4aS0+dmFsdWUsIHhpLT52YWx1ZV9sZW4pOwotCi0JCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgbmV3X3NpemUpOwotCQkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhlLCBsb2NhbCk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogUmVtb3ZlIHRoZSBvbGQgZW50cnkgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZS4KLQkJCSAqIFdlIGRvbid0IHJlbW92ZSB0aGUgbGFzdCBlbnRyeSBzbyB0aGF0IHdlIGNhbgotCQkJICogdXNlIGl0IHRvIGluZGljYXRlIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBlbXB0eQotCQkJICogYnVja2V0LgotCQkJICovCi0JCQlsYXN0IC09IDE7Ci0JCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLTEpOwotCQkJaWYgKHhoLT54aF9jb3VudCkgewotCQkJCW1lbW1vdmUoeGUsIHhlICsgMSwKLQkJCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7Ci0JCQkJbWVtc2V0KGxhc3QsIDAsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKLQkJCX0gZWxzZQotCQkJCXhoLT54aF9mcmVlX3N0YXJ0ID0KLQkJCQkJY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUpOwotCi0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBmaW5kIGEgbmV3IGVudHJ5IGZvciBpbnNlcnQuICovCi0JCWludCBsb3cgPSAwLCBoaWdoID0gY291bnQgLSAxLCB0bXA7Ci0JCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqdG1wX3hlOwotCi0JCXdoaWxlIChsb3cgPD0gaGlnaCAmJiBjb3VudCkgewotCQkJdG1wID0gKGxvdyArIGhpZ2gpIC8gMjsKLQkJCXRtcF94ZSA9ICZ4aC0+eGhfZW50cmllc1t0bXBdOwotCi0JCQlpZiAobmFtZV9oYXNoID4gbGUzMl90b19jcHUodG1wX3hlLT54ZV9uYW1lX2hhc2gpKQotCQkJCWxvdyA9IHRtcCArIDE7Ci0JCQllbHNlIGlmIChuYW1lX2hhc2ggPAotCQkJCSBsZTMyX3RvX2NwdSh0bXBfeGUtPnhlX25hbWVfaGFzaCkpCi0JCQkJaGlnaCA9IHRtcCAtIDE7Ci0JCQllbHNlIHsKLQkJCQlsb3cgPSB0bXA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tsb3ddOwotCQlpZiAobG93ICE9IGNvdW50KQotCQkJbWVtbW92ZSh4ZSArIDEsIHhlLCAodm9pZCAqKWxhc3QgLSAodm9pZCAqKXhlKTsKLQotCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgMSk7Ci0JCW1lbXNldCh4ZSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOwotCQl4ZS0+eGVfbmFtZV9oYXNoID0gY3B1X3RvX2xlMzIobmFtZV9oYXNoKTsKLQkJeGUtPnhlX25hbWVfbGVuID0gbmFtZV9sZW47Ci0JCW9jZnMyX3hhdHRyX3NldF90eXBlKHhlLCB4aS0+bmFtZV9pbmRleCk7Ci0JfQotCi1zZXRfbmV3X25hbWVfdmFsdWU6Ci0JLyogSW5zZXJ0IHRoZSBuZXcgbmFtZSt2YWx1ZS4gKi8KLQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOwotCi0JLyoKLQkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lL3ZhbHVlIHBhaXIKLQkgKiBleGlzdHMgaW4gdGhlIHNhbWUgYmxvY2suCi0JICovCi0Jb2ZmcyA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKLQlzdGFydCA9IG9mZnMgLSBzaXplOwotCi0JaWYgKHN0YXJ0ID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICE9Ci0JICAgIChvZmZzIC0gMSkgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIHsKLQkJb2ZmcyA9IG9mZnMgLSBvZmZzICUgYmxvY2tzaXplOwotCQl4aC0+eGhfZnJlZV9zdGFydCA9IGNwdV90b19sZTE2KG9mZnMpOwotCX0KLQotCXZhbCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfdmFsKGlub2RlLCB4cy0+YnVja2V0LCBvZmZzIC0gc2l6ZSk7Ci0JeGUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYob2ZmcyAtIHNpemUpOwotCi0JbWVtc2V0KHZhbCwgMCwgc2l6ZSk7Ci0JbWVtY3B5KHZhbCwgeGktPm5hbWUsIG5hbWVfbGVuKTsKLQltZW1jcHkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksIHhpLT52YWx1ZSwgeGktPnZhbHVlX2xlbik7Ci0KLQl4ZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOwotCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4ZSwgbG9jYWwpOwotCXhzLT5oZXJlID0geGU7Ci0JbGUxNl9hZGRfY3B1KCZ4aC0+eGhfZnJlZV9zdGFydCwgLXNpemUpOwotCWxlMTZfYWRkX2NwdSgmeGgtPnhoX25hbWVfdmFsdWVfbGVuLCBzaXplKTsKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIFNldCB0aGUgeGF0dHIgZW50cnkgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuCi0gKiBUaGUgYnVja2V0IGlzIGluZGljYXRlZCBieSB4cy0+YnVja2V0IGFuZCBpdCBzaG91bGQgaGF2ZSB0aGUgZW5vdWdoCi0gKiBzcGFjZSBmb3IgdGhlIHhhdHRyIGluc2VydGlvbi4KLSAqLwotc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJCSAgIHUzMiBuYW1lX2hhc2gsCi0JCQkJCSAgIGludCBsb2NhbCkKLXsKLQlpbnQgcmV0OwotCXU2NCBibGtubzsKLQotCW1sb2coMCwgIlNldCB4YXR0ciBlbnRyeSBsZW4gPSAlbHUgaW5kZXggPSAlZCBpbiBidWNrZXQgJWxsdVxuIiwKLQkgICAgICh1bnNpZ25lZCBsb25nKXhpLT52YWx1ZV9sZW4sIHhpLT5uYW1lX2luZGV4LAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylidWNrZXRfYmxrbm8oeHMtPmJ1Y2tldCkpOwotCi0JaWYgKCF4cy0+YnVja2V0LT5idV9iaHNbMV0pIHsKLQkJYmxrbm8gPSBidWNrZXRfYmxrbm8oeHMtPmJ1Y2tldCk7Ci0JCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZSh4cy0+YnVja2V0KTsKLQkJcmV0ID0gb2NmczJfcmVhZF94YXR0cl9idWNrZXQoeHMtPmJ1Y2tldCwgYmxrbm8pOwotCQlpZiAocmV0KSB7Ci0JCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIHhzLT5idWNrZXQsCi0JCQkJCQlPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlvY2ZzMl94YXR0cl9zZXRfZW50cnlfbm9ybWFsKGlub2RlLCB4aSwgeHMsIG5hbWVfaGFzaCwgbG9jYWwpOwotCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPmJ1Y2tldCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogVHJ1bmNhdGUgdGhlIHNwZWNpZmllZCB4ZV9vZmYgZW50cnkgaW4geGF0dHIgYnVja2V0LgogICogYnVja2V0IGlzIGluZGljYXRlZCBieSBoZWFkZXJfYmggYW5kIGxlbiBpcyB0aGUgbmV3IGxlbmd0aC4KICAqIEJvdGggdGhlIG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgYW5kIHRoZSBlbnRyeSB3aWxsIGJlIHVwZGF0ZWQgaGVyZS4KQEAgLTUwMDksNjYgKzU0MDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQlpbnQgbGVuLAotCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCi17Ci0JaW50IHJldCwgb2Zmc2V0OwotCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopeHMtPmJhc2U7Ci0KLQlCVUdfT04oIXhzLT5idWNrZXQtPmJ1X2Joc1swXSB8fCAheGUgfHwgb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKTsKLQotCW9mZnNldCA9IHhlIC0geGgtPnhoX2VudHJpZXM7Ci0JcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlKGlub2RlLCB4cy0+YnVja2V0LAotCQkJCQkJb2Zmc2V0LCBsZW4sIGN0eHQpOwotCWlmIChyZXQpCi0JCW1sb2dfZXJybm8ocmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X3NldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCQloYW5kbGVfdCAqaGFuZGxlLAotCQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCi0JCQkJCQljaGFyICp2YWwsCi0JCQkJCQlpbnQgdmFsdWVfbGVuKQotewotCWludCByZXQsIG9mZnNldCwgYmxvY2tfb2ZmOwotCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4djsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXRfeGgoeHMtPmJ1Y2tldCk7Ci0Jdm9pZCAqYmFzZTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0gewotCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3MsCi0JfTsKLQotCUJVR19PTigheHMtPmJhc2UgfHwgIXhlIHx8IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7Ci0KLQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsIHhoLAotCQkJCQkJeGUgLSB4aC0+eGhfZW50cmllcywKLQkJCQkJCSZibG9ja19vZmYsCi0JCQkJCQkmb2Zmc2V0KTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYmFzZSA9IGJ1Y2tldF9ibG9jayh4cy0+YnVja2V0LCBibG9ja19vZmYpOwotCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKGJhc2UgKyBvZmZzZXQgKwotCQkgT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pKTsKLQotCXZiLnZiX3h2ID0geHY7Ci0JdmIudmJfYmggPSB4cy0+YnVja2V0LT5idV9iaHNbYmxvY2tfb2ZmXTsKLQlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCBoYW5kbGUsCi0JCQkJCSAgICAgICZ2YiwgdmFsLCB2YWx1ZV9sZW4pOwotCWlmIChyZXQpCi0JCW1sb2dfZXJybm8ocmV0KTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKIAkJCQkgIHU2NCBibGtubywKQEAgLTUxNjcsMTI4ICs1NTAzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl9idWNrZXRfcmVtb3ZlX3hzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCi17Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXRfeGgoeHMtPmJ1Y2tldCk7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0ID0gJnhoLT54aF9lbnRyaWVzWwotCQkJCQkJbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSAtIDFdOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgeHMtPmJ1Y2tldCwKLQkJCQkJCU9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFJlbW92ZSB0aGUgb2xkIGVudHJ5LiAqLwotCW1lbW1vdmUoeHMtPmhlcmUsIHhzLT5oZXJlICsgMSwKLQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4cy0+aGVyZSk7Ci0JbWVtc2V0KGxhc3QsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKLQlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLTEpOwotCi0Jb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+YnVja2V0KTsKLX0KLQotLyoKLSAqIFNldCB0aGUgeGF0dHIgbmFtZS92YWx1ZSBpbiB0aGUgYnVja2V0IHNwZWNpZmllZCBpbiB4cy4KLSAqCi0gKiBBcyB0aGUgbmV3IHZhbHVlIGluIHhpIG1heSBiZSBzdG9yZWQgaW4gdGhlIGJ1Y2tldCBvciBpbiBhbiBvdXRzaWRlIGNsdXN0ZXIsCi0gKiB3ZSBkaXZpZGUgdGhlIHdob2xlIHByb2Nlc3MgaW50byAzIHN0ZXBzOgotICogMS4gaW5zZXJ0IG5hbWUvdmFsdWUgaW4gdGhlIGJ1Y2tldChvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5fYnVja2V0KQotICogMi4gdHJ1bmNhdGUgb2YgdGhlIG91dHNpZGUgY2x1c3RlcihvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGVfeHMpCi0gKiAzLiBTZXQgdGhlIHZhbHVlIHRvIHRoZSBvdXRzaWRlIGNsdXN0ZXIob2NmczJfeGF0dHJfYnVja2V0X3NldF92YWx1ZV9vdXRzaWRlKQotICogNC4gSWYgdGhlIGNsdXN0ZXJzIGZvciB0aGUgbmV3IG91dHNpZGUgdmFsdWUgY2FuJ3QgYmUgYWxsb2NhdGVkLCB3ZSBuZWVkCi0gKiAgICB0byBmcmVlIHRoZSB4YXR0ciB3ZSBhbGxvY2F0ZWQgaW4gc2V0LgotICovCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9pbl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQotewotCWludCByZXQsIGxvY2FsID0gMTsKLQlzaXplX3QgdmFsdWVfbGVuOwotCWNoYXIgKnZhbCA9IChjaGFyICopeGktPnZhbHVlOwotCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKLQl1MzIgbmFtZV9oYXNoID0gb2NmczJfeGF0dHJfbmFtZV9oYXNoKGlub2RlLCB4aS0+bmFtZSwKLQkJCQkJICAgICAgc3RybGVuKHhpLT5uYW1lKSk7Ci0KLQlpZiAoIXhzLT5ub3RfZm91bmQgJiYgIW9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkgewotCQkvKgotCQkgKiBXZSBuZWVkIHRvIHRydW5jYXRlIHRoZSB4YXR0ciBzdG9yYWdlIGZpcnN0LgotCQkgKgotCQkgKiBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZSBhcmUgc3RvcmVkIHRvCi0JCSAqIG91dHNpZGUgYmxvY2ssIHdlIG9ubHkgbmVlZCB0byB0cnVuY2F0ZQotCQkgKiB0aGUgc3RvcmFnZSBhbmQgdGhlbiBzZXQgdGhlIHZhbHVlIG91dHNpZGUuCi0JCSAqCi0JCSAqIElmIHRoZSBuZXcgdmFsdWUgc2hvdWxkIGJlIHN0b3JlZCB3aXRoaW4gYmxvY2ssCi0JCSAqIHdlIHNob3VsZCBmcmVlIGFsbCB0aGUgb3V0c2lkZSBibG9jayBmaXJzdCBhbmQKLQkJICogdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgeGF0dHIgYmxvY2sgd2lsbCBiZSBkb25lCi0JCSAqIGJ5IGZvbGxvd2luZyBzdGVwcy4KLQkJICovCi0JCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCQl2YWx1ZV9sZW4gPSB4aS0+dmFsdWVfbGVuOwotCQllbHNlCi0JCQl2YWx1ZV9sZW4gPSAwOwotCi0JCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZV94cyhpbm9kZSwgeHMsCi0JCQkJCQkJICAgdmFsdWVfbGVuLAotCQkJCQkJCSAgIGN0eHQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKHZhbHVlX2xlbikKLQkJCWdvdG8gc2V0X3ZhbHVlX291dHNpZGU7Ci0JfQotCi0JdmFsdWVfbGVuID0geGktPnZhbHVlX2xlbjsKLQkvKiBTbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgaW5zaWRlIGJsb2NrIGNoYW5nZSBub3cuICovCi0JaWYgKHZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBuZXcgdmFsdWUgd2lsbCBiZSBzdG9yZWQgb3V0c2lkZSBvZiBibG9jaywKLQkJICogaW5pdGFsaXplIGEgbmV3IGVtcHR5IHZhbHVlIHJvb3QgYW5kIGluc2VydCBpdCBmaXJzdC4KLQkJICovCi0JCWxvY2FsID0gMDsKLQkJeGktPnZhbHVlID0gJmRlZl94djsKLQkJeGktPnZhbHVlX2xlbiA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQl9Ci0KLQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5fYnVja2V0KGlub2RlLCBjdHh0LT5oYW5kbGUsIHhpLCB4cywKLQkJCQkJICAgICAgbmFtZV9oYXNoLCBsb2NhbCk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh2YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCWdvdG8gb3V0OwotCi0JLyogYWxsb2NhdGUgdGhlIHNwYWNlIG5vdyBmb3IgdGhlIG91dHNpZGUgYmxvY2sgc3RvcmFnZS4gKi8KLQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGVfeHMoaW5vZGUsIHhzLAotCQkJCQkJICAgdmFsdWVfbGVuLCBjdHh0KTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQotCQlpZiAoeHMtPm5vdF9mb3VuZCkgewotCQkJLyoKLQkJCSAqIFdlIGNhbid0IGFsbG9jYXRlIGVub3VnaCBjbHVzdGVycyBmb3Igb3V0c2lkZQotCQkJICogc3RvcmFnZSBhbmQgd2UgaGF2ZSBhbGxvY2F0ZWQgeGF0dHIgYWxyZWFkeSwKLQkJCSAqIHNvIG5lZWQgdG8gcmVtb3ZlIGl0LgotCQkJICovCi0JCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVtb3ZlX3hzKGlub2RlLCBjdHh0LT5oYW5kbGUsIHhzKTsKLQkJfQotCQlnb3RvIG91dDsKLQl9Ci0KLXNldF92YWx1ZV9vdXRzaWRlOgotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLAotCQkJCQkJICAgeHMsIHZhbCwgdmFsdWVfbGVuKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogY2hlY2sgd2hldGhlciB0aGUgeGF0dHIgYnVja2V0IGlzIGZpbGxlZCB1cCB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUuCiAgKiBJZiB3ZSB3YW50IHRvIGluc2VydCB0aGUgeGF0dHIgd2l0aCB0aGUgc2FtZSBoYXNoLCByZXR1cm4gLUVOT1NQQy4KQEAgLTUzMTcsMTU2ICs1NTMxLDExNiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVHJ5IHRvIHNldCB0aGUgZW50cnkgaW4gdGhlIGN1cnJlbnQgYnVja2V0LiAgSWYgd2UgZmFpbCwgdGhlIGNhbGxlcgorICogd2lsbCBoYW5kbGUgZ2V0dGluZyB1cyBhbm90aGVyIGJ1Y2tldC4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl94YV9sb2MgbG9jOworCisJbWxvZ19lbnRyeSgiU2V0IHhhdHRyICVzIGluIHhhdHRyIGJ1Y2tldFxuIiwgeGktPnhpX25hbWUpOworCisJb2NmczJfaW5pdF94YXR0cl9idWNrZXRfeGFfbG9jKCZsb2MsIHhzLT5idWNrZXQsCisJCQkJICAgICAgIHhzLT5ub3RfZm91bmQgPyBOVUxMIDogeHMtPmhlcmUpOworCXJldCA9IG9jZnMyX3hhX3NldCgmbG9jLCB4aSwgY3R4dCk7CisJaWYgKCFyZXQpIHsKKwkJeHMtPmhlcmUgPSBsb2MueGxfZW50cnk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocmV0ICE9IC1FTk9TUEMpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPaywgd2UgbmVlZCBzcGFjZS4gIExldCdzIHRyeSBkZWZyYWdtZW50aW5nIHRoZSBidWNrZXQuICovCisJcmV0ID0gb2NmczJfZGVmcmFnX3hhdHRyX2J1Y2tldChpbm9kZSwgY3R4dC0+aGFuZGxlLAorCQkJCQl4cy0+YnVja2V0KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfeGFfc2V0KCZsb2MsIHhpLCBjdHh0KTsKKwlpZiAoIXJldCkgeworCQl4cy0+aGVyZSA9IGxvYy54bF9lbnRyeTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJbWxvZ19lcnJubyhyZXQpOworCisKK291dDoKKwltbG9nX2V4aXQocmV0KTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCiB7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGg7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKLQl1MTYgY291bnQsIGhlYWRlcl9zaXplLCB4aF9mcmVlX3N0YXJ0OwotCWludCBmcmVlLCBtYXhfZnJlZSwgbmVlZCwgb2xkOwotCXNpemVfdCB2YWx1ZV9zaXplID0gMCwgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOwotCXNpemVfdCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Ci0JaW50IHJldCwgYWxsb2NhdGlvbiA9IDA7CisJaW50IHJldDsKIAotCW1sb2dfZW50cnkoIlNldCB4YXR0ciAlcyBpbiB4YXR0ciBpbmRleCBibG9ja1xuIiwgeGktPm5hbWUpOworCW1sb2dfZW50cnkoIlNldCB4YXR0ciAlcyBpbiB4YXR0ciBpbmRleCBibG9ja1xuIiwgeGktPnhpX25hbWUpOwogCi10cnlfYWdhaW46Ci0JeGggPSB4cy0+aGVhZGVyOwotCWNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKLQl4aF9mcmVlX3N0YXJ0ID0gbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpOwotCWhlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIpICsKLQkJCWNvdW50ICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7Ci0JbWF4X2ZyZWUgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAtIGhlYWRlcl9zaXplIC0KLQkJbGUxNl90b19jcHUoeGgtPnhoX25hbWVfdmFsdWVfbGVuKSAtIE9DRlMyX1hBVFRSX0hFQURFUl9HQVA7Ci0KLQltbG9nX2J1Z19vbl9tc2coaGVhZGVyX3NpemUgPiBibG9ja3NpemUsICJidWNrZXQgJWxsdSBoYXMgaGVhZGVyIHNpemUgIgotCQkJIm9mICV1IHdoaWNoIGV4Y2VlZCBibG9jayBzaXplXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidWNrZXRfYmxrbm8oeHMtPmJ1Y2tldCksCi0JCQloZWFkZXJfc2l6ZSk7Ci0KLQlpZiAoeGktPnZhbHVlICYmIHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKLQkJdmFsdWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQllbHNlIGlmICh4aS0+dmFsdWUpCi0JCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOwotCi0JaWYgKHhzLT5ub3RfZm91bmQpCi0JCW5lZWQgPSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSArCi0JCQlPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIHZhbHVlX3NpemU7Ci0JZWxzZSB7Ci0JCW5lZWQgPSB2YWx1ZV9zaXplICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbik7Ci0KLQkJLyoKLQkJICogV2Ugb25seSByZXBsYWNlIHRoZSBvbGQgdmFsdWUgaWYgdGhlIG5ldyBsZW5ndGggaXMgc21hbGxlcgotCQkgKiB0aGFuIHRoZSBvbGQgb25lLiBPdGhlcndpc2Ugd2Ugd2lsbCBhbGxvY2F0ZSBuZXcgc3BhY2UgaW4gdGhlCi0JCSAqIGJ1Y2tldCB0byBzdG9yZSBpdC4KLQkJICovCi0JCXhlID0geHMtPmhlcmU7Ci0JCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCi0JCQlvbGQgPSBPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7Ci0JCWVsc2UKLQkJCW9sZCA9IE9DRlMyX1hBVFRSX1NJWkUoT0NGUzJfWEFUVFJfUk9PVF9TSVpFKTsKLQotCQlpZiAob2xkID49IHZhbHVlX3NpemUpCi0JCQluZWVkID0gMDsKKwlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfYnVja2V0KGlub2RlLCB4aSwgeHMsIGN0eHQpOworCWlmICghcmV0KQorCQlnb3RvIG91dDsKKwlpZiAocmV0ICE9IC1FTk9TUEMpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKIAl9CiAKLQlmcmVlID0geGhfZnJlZV9zdGFydCAtIGhlYWRlcl9zaXplIC0gT0NGUzJfWEFUVFJfSEVBREVSX0dBUDsKKwkvKiBBY2ssIG5lZWQgbW9yZSBzcGFjZS4gIExldCdzIHRyeSB0byBnZXQgYW5vdGhlciBidWNrZXQhICovCisKIAkvKgotCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuZXcgbmFtZS92YWx1ZSBwYWlyCi0JICogY2FuIGV4aXN0IGluIHRoZSBzYW1lIGJsb2NrLgorCSAqIFdlIGRvIG5vdCBhbGxvdyBmb3Igb3ZlcmxhcHBpbmcgcmFuZ2VzIGJldHdlZW4gYnVja2V0cy4gQW5kCisJICogdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbGxpc2lvbnMgd2Ugd2lsbCBhbGxvdyBmb3IgdGhlbiBpcworCSAqIG9uZSBidWNrZXQncyB3b3J0aCwgc28gY2hlY2sgaXQgaGVyZSB3aGV0aGVyIHdlIG5lZWQgdG8KKwkgKiBhZGQgYSBuZXcgYnVja2V0IGZvciB0aGUgaW5zZXJ0LgogCSAqLwotCWlmICh4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplIDwgbmVlZCkKLQkJZnJlZSAtPSB4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplOwotCi0JbWxvZygwLCAieHMtPm5vdF9mb3VuZCA9ICVkLCBpbiB4YXR0ciBidWNrZXQgJWxsdTogZnJlZSA9ICVkLCAiCi0JICAgICAibmVlZCA9ICVkLCBtYXhfZnJlZSA9ICVkLCB4aF9mcmVlX3N0YXJ0ID0gJXUsIHhoX25hbWVfdmFsdWVfbGVuID0iCi0JICAgICAiICV1XG4iLCB4cy0+bm90X2ZvdW5kLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylidWNrZXRfYmxrbm8oeHMtPmJ1Y2tldCksCi0JICAgICBmcmVlLCBuZWVkLCBtYXhfZnJlZSwgbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpLAotCSAgICAgbGUxNl90b19jcHUoeGgtPnhoX25hbWVfdmFsdWVfbGVuKSk7Ci0KLQlpZiAoZnJlZSA8IG5lZWQgfHwKLQkgICAgKHhzLT5ub3RfZm91bmQgJiYKLQkgICAgIGNvdW50ID09IG9jZnMyX3hhdHRyX21heF94ZV9pbl9idWNrZXQoaW5vZGUtPmlfc2IpKSkgewotCQlpZiAobmVlZCA8PSBtYXhfZnJlZSAmJgotCQkgICAgY291bnQgPCBvY2ZzMl94YXR0cl9tYXhfeGVfaW5fYnVja2V0KGlub2RlLT5pX3NiKSkgewotCQkJLyoKLQkJCSAqIFdlIGNhbiBjcmVhdGUgdGhlIHNwYWNlIGJ5IGRlZnJhZ21lbnQuIFNpbmNlIG9ubHkgdGhlCi0JCQkgKiBuYW1lL3ZhbHVlIHdpbGwgYmUgbW92ZWQsIHRoZSB4ZSBzaG91bGRuJ3QgYmUgY2hhbmdlZAotCQkJICogaW4geHMuCi0JCQkgKi8KLQkJCXJldCA9IG9jZnMyX2RlZnJhZ194YXR0cl9idWNrZXQoaW5vZGUsIGN0eHQtPmhhbmRsZSwKLQkJCQkJCQl4cy0+YnVja2V0KTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCXhoX2ZyZWVfc3RhcnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCk7Ci0JCQlmcmVlID0geGhfZnJlZV9zdGFydCAtIGhlYWRlcl9zaXplCi0JCQkJLSBPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQOwotCQkJaWYgKHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemUgPCBuZWVkKQotCQkJCWZyZWUgLT0geGhfZnJlZV9zdGFydCAlIGJsb2Nrc2l6ZTsKLQotCQkJaWYgKGZyZWUgPj0gbmVlZCkKLQkJCQlnb3RvIHhhdHRyX3NldDsKLQotCQkJbWxvZygwLCAiQ2FuJ3QgZ2V0IGVub3VnaCBzcGFjZSBmb3IgeGF0dHIgaW5zZXJ0IGJ5ICIKLQkJCSAgICAgImRlZnJhZ21lbnQuIE5lZWQgJXUgYnl0ZXMsIGJ1dCB3ZSBoYXZlICVkLCBzbyAiCi0JCQkgICAgICJhbGxvY2F0ZSBuZXcgYnVja2V0IGZvciBpdC5cbiIsIG5lZWQsIGZyZWUpOwotCQl9Ci0KLQkJLyoKLQkJICogV2UgaGF2ZSB0byBhZGQgbmV3IGJ1Y2tldHMgb3IgY2x1c3RlcnMgYW5kIG9uZQotCQkgKiBhbGxvY2F0aW9uIHNob3VsZCBsZWF2ZSB1cyBlbm91Z2ggc3BhY2UgZm9yIGluc2VydC4KLQkJICovCi0JCUJVR19PTihhbGxvY2F0aW9uKTsKLQotCQkvKgotCQkgKiBXZSBkbyBub3QgYWxsb3cgZm9yIG92ZXJsYXBwaW5nIHJhbmdlcyBiZXR3ZWVuIGJ1Y2tldHMuIEFuZAotCQkgKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29sbGlzaW9ucyB3ZSB3aWxsIGFsbG93IGZvciB0aGVuIGlzCi0JCSAqIG9uZSBidWNrZXQncyB3b3J0aCwgc28gY2hlY2sgaXQgaGVyZSB3aGV0aGVyIHdlIG5lZWQgdG8KLQkJICogYWRkIGEgbmV3IGJ1Y2tldCBmb3IgdGhlIGluc2VydC4KLQkJICovCi0JCXJldCA9IG9jZnMyX2NoZWNrX3hhdHRyX2J1Y2tldF9jb2xsaXNpb24oaW5vZGUsCi0JCQkJCQkJIHhzLT5idWNrZXQsCi0JCQkJCQkJIHhpLT5uYW1lKTsKLQkJaWYgKHJldCkgewotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlyZXQgPSBvY2ZzMl9hZGRfbmV3X3hhdHRyX2J1Y2tldChpbm9kZSwKLQkJCQkJCSB4cy0+eGF0dHJfYmgsCisJcmV0ID0gb2NmczJfY2hlY2tfeGF0dHJfYnVja2V0X2NvbGxpc2lvbihpbm9kZSwKIAkJCQkJCSB4cy0+YnVja2V0LAotCQkJCQkJIGN0eHQpOwotCQlpZiAocmV0KSB7Ci0JCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qCi0JCSAqIG9jZnMyX2FkZF9uZXdfeGF0dHJfYnVja2V0KCkgd2lsbCBoYXZlIHVwZGF0ZWQKLQkJICogeHMtPmJ1Y2tldCBpZiBpdCBtb3ZlZCwgYnV0IGl0IHdpbGwgbm90IGhhdmUgdXBkYXRlZAotCQkgKiBhbnkgb2YgdGhlIG90aGVyIHNlYXJjaCBmaWVsZHMuICBUaHVzLCB3ZSBkcm9wIGl0IGFuZAotCQkgKiByZS1zZWFyY2guICBFdmVyeXRoaW5nIHNob3VsZCBiZSBjYWNoZWQsIHNvIGl0J2xsIGJlCi0JCSAqIHF1aWNrLgotCQkgKi8KLQkJb2NmczJfeGF0dHJfYnVja2V0X3JlbHNlKHhzLT5idWNrZXQpOwotCQlyZXQgPSBvY2ZzMl94YXR0cl9pbmRleF9ibG9ja19maW5kKGlub2RlLCB4cy0+eGF0dHJfYmgsCi0JCQkJCQkgICB4aS0+bmFtZV9pbmRleCwKLQkJCQkJCSAgIHhpLT5uYW1lLCB4cyk7Ci0JCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9EQVRBKQotCQkJZ290byBvdXQ7Ci0JCXhzLT5ub3RfZm91bmQgPSByZXQ7Ci0JCWFsbG9jYXRpb24gPSAxOwotCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCQkJCSB4aS0+eGlfbmFtZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OwogCX0KIAoteGF0dHJfc2V0OgotCXJldCA9IG9jZnMyX3hhdHRyX3NldF9pbl9idWNrZXQoaW5vZGUsIHhpLCB4cywgY3R4dCk7CisJcmV0ID0gb2NmczJfYWRkX25ld194YXR0cl9idWNrZXQoaW5vZGUsCisJCQkJCSB4cy0+eGF0dHJfYmgsCisJCQkJCSB4cy0+YnVja2V0LAorCQkJCQkgY3R4dCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogb2NmczJfYWRkX25ld194YXR0cl9idWNrZXQoKSB3aWxsIGhhdmUgdXBkYXRlZAorCSAqIHhzLT5idWNrZXQgaWYgaXQgbW92ZWQsIGJ1dCBpdCB3aWxsIG5vdCBoYXZlIHVwZGF0ZWQKKwkgKiBhbnkgb2YgdGhlIG90aGVyIHNlYXJjaCBmaWVsZHMuICBUaHVzLCB3ZSBkcm9wIGl0IGFuZAorCSAqIHJlLXNlYXJjaC4gIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGNhY2hlZCwgc28gaXQnbGwgYmUKKwkgKiBxdWljay4KKwkgKi8KKwlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoeHMtPmJ1Y2tldCk7CisJcmV0ID0gb2NmczJfeGF0dHJfaW5kZXhfYmxvY2tfZmluZChpbm9kZSwgeHMtPnhhdHRyX2JoLAorCQkJCQkgICB4aS0+eGlfbmFtZV9pbmRleCwKKwkJCQkJICAgeGktPnhpX25hbWUsIHhzKTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREFUQSkKKwkJZ290byBvdXQ7CisJeHMtPm5vdF9mb3VuZCA9IHJldDsKKworCS8qIE9rLCB3ZSBoYXZlIGEgbmV3IGJ1Y2tldCwgbGV0J3MgdHJ5IGFnYWluICovCisJcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5X2J1Y2tldChpbm9kZSwgeGksIHhzLCBjdHh0KTsKKwlpZiAocmV0ICYmIChyZXQgIT0gLUVOT1NQQykpCisJCW1sb2dfZXJybm8ocmV0KTsKKwogb3V0OgogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CkBAIC01Njc4LDcgKzU4NTIsNyBAQAogCSAqIHJlZmNvdW50IHRyZWUsIGFuZCBtYWtlIHRoZSBvcmlnaW5hbCBleHRlbnQgYmVjb21lIDMuIFNvIHdlIHdpbGwgbmVlZAogCSAqIDIgKiBjbHVzdGVyIG1vcmUgZXh0ZW50IHJlY3MgYXQgbW9zdC4KIAkgKi8KLQlpZiAoIXhpLT52YWx1ZSB8fCB4aS0+dmFsdWVfbGVuIDw9IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJaWYgKCF4aS0+eGlfdmFsdWUgfHwgeGktPnhpX3ZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewogCiAJCXJldCA9IG9jZnMyX3JlZmNvdW50ZWRfeGF0dHJfZGVsZXRlX25lZWQoaW5vZGUsCiAJCQkJCQkJICYoKnJlZl90cmVlKS0+cmZfY2ksCkBAIC02MzU0LDkgKzY1MjgsMTEgQEAKIAkJCQkJICBpbnQgaW5kZXhlZCkKIHsKIAlpbnQgcmV0OwotCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0IGN0eHQgPSB7CisJCS5tZXRhX2FjID0gbWV0YV9hYywKKwl9OwogCiAJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgJm1ldGFfYWMpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02MzY0LDIxICs2NTQwLDIxIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUyk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwljdHh0LmhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoY3R4dC5oYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoY3R4dC5oYW5kbGUpOwogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCW1sb2coMCwgImNyZWF0ZSBuZXcgeGF0dHIgYmxvY2sgZm9yIGlub2RlICVsbHUsIGluZGV4ID0gJWRcbiIsCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlX2JoLT5iX2Jsb2NrbnIsIGluZGV4ZWQpOwotCXJldCA9IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGUsIGlub2RlLCBmZV9iaCwKLQkJCQkgICAgICAgbWV0YV9hYywgcmV0X2JoLCBpbmRleGVkKTsKKwlyZXQgPSBvY2ZzMl9jcmVhdGVfeGF0dHJfYmxvY2soaW5vZGUsIGZlX2JoLCAmY3R4dCwgaW5kZXhlZCwKKwkJCQkgICAgICAgcmV0X2JoKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKLQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGN0eHQuaGFuZGxlKTsKIG91dDoKIAlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCA2NGJjODk5Li5lODg2NWMxIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC00MTIsOSArNDEyLDEwIEBACiAJcGRldiA9IHBhcnRfdG9fZGV2KHApOwogCiAJcC0+c3RhcnRfc2VjdCA9IHN0YXJ0OwotCXAtPmFsaWdubWVudF9vZmZzZXQgPSBxdWV1ZV9zZWN0b3JfYWxpZ25tZW50X29mZnNldChkaXNrLT5xdWV1ZSwgc3RhcnQpOwotCXAtPmRpc2NhcmRfYWxpZ25tZW50ID0gcXVldWVfc2VjdG9yX2Rpc2NhcmRfYWxpZ25tZW50KGRpc2stPnF1ZXVlLAotCQkJCQkJCSAgICAgIHN0YXJ0KTsKKwlwLT5hbGlnbm1lbnRfb2Zmc2V0ID0KKwkJcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmZGlzay0+cXVldWUtPmxpbWl0cywgc3RhcnQpOworCXAtPmRpc2NhcmRfYWxpZ25tZW50ID0KKwkJcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoJmRpc2stPnF1ZXVlLT5saW1pdHMsIHN0YXJ0KTsKIAlwLT5ucl9zZWN0cyA9IGxlbjsKIAlwLT5wYXJ0bm8gPSBwYXJ0bm87CiAJcC0+cG9saWN5ID0gZ2V0X2Rpc2tfcm8oZGlzayk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggMTNiNWQwNy4uMThlMjBmZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMjcwLDcgKzI3MCw5IEBACiAJCWJsb2NrZWQgPSBwLT5ibG9ja2VkOwogCQljb2xsZWN0X3NpZ2lnbl9zaWdjYXRjaChwLCAmaWdub3JlZCwgJmNhdWdodCk7CiAJCW51bV90aHJlYWRzID0gYXRvbWljX3JlYWQoJnAtPnNpZ25hbC0+Y291bnQpOworCQlyY3VfcmVhZF9sb2NrKCk7ICAvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQlxc2l6ZSA9IGF0b21pY19yZWFkKCZfX3Rhc2tfY3JlZChwKS0+dXNlci0+c2lncGVuZGluZyk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlxbGltID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cjsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNzQ2ODk1ZC4uYTczMTA4NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTEwODksOCArMTA4OSwxMiBAQAogCWlmICghY2FwYWJsZShDQVBfQVVESVRfQ09OVFJPTCkpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY3VycmVudCAhPSBwaWRfdGFzayhwcm9jX3BpZChpbm9kZSksIFBJRFRZUEVfUElEKSkKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKGN1cnJlbnQgIT0gcGlkX3Rhc2socHJvY19waWQoaW5vZGUpLCBQSURUWVBFX1BJRCkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRVBFUk07CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKIAkJY291bnQgPSBQQUdFX1NJWkUgLSAxOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9rbXNnLmMgYi9mcy9wcm9jL2ttc2cuYwppbmRleCA3Y2E3ODM0Ni4uY2ZlOTBhNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9rbXNnLmMKKysrIGIvZnMvcHJvYy9rbXNnLmMKQEAgLTEyLDM3ICsxMiwzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBsb2dfd2FpdDsKIAotZXh0ZXJuIGludCBkb19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWcsIGludCBjb3VudCk7Ci0KIHN0YXRpYyBpbnQga21zZ19vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0JcmV0dXJuIGRvX3N5c2xvZygxLE5VTEwsMCk7CisJcmV0dXJuIGRvX3N5c2xvZyhTWVNMT0dfQUNUSU9OX09QRU4sIE5VTEwsIDAsIFNZU0xPR19GUk9NX0ZJTEUpOwogfQogCiBzdGF0aWMgaW50IGttc2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCSh2b2lkKSBkb19zeXNsb2coMCxOVUxMLDApOworCSh2b2lkKSBkb19zeXNsb2coU1lTTE9HX0FDVElPTl9DTE9TRSwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGttc2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhZG9fc3lzbG9nKDksIE5VTEwsIDApKQorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCisJICAgICFkb19zeXNsb2coU1lTTE9HX0FDVElPTl9TSVpFX1VOUkVBRCwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSkpCiAJCXJldHVybiAtRUFHQUlOOwotCXJldHVybiBkb19zeXNsb2coMiwgYnVmLCBjb3VudCk7CisJcmV0dXJuIGRvX3N5c2xvZyhTWVNMT0dfQUNUSU9OX1JFQUQsIGJ1ZiwgY291bnQsIFNZU0xPR19GUk9NX0ZJTEUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGttc2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJmxvZ193YWl0LCB3YWl0KTsKLQlpZiAoZG9fc3lzbG9nKDksIE5VTEwsIDApKQorCWlmIChkb19zeXNsb2coU1lTTE9HX0FDVElPTl9TSVpFX1VOUkVBRCwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKaW5kZXggMTIzMjU3Yi4uZjg2NTBkYyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYworKysgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCkBAIC0xMCwxNiArMTAsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jaWZuZGVmIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUwogc3RhdGljIGlubGluZSB2b2lkIHNldF9ub2RlX3Byb2NfZW50cnkoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKLX0KKyNpZmRlZiBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKKwlucC0+cGRlID0gZGU7CiAjZW5kaWYKK30KIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kZXZpY2VfdHJlZTsKIApkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggZWFlN2Q5ZC4uNWFmZDU1NCAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC02NzQsNyArNjc0LDYgQEAKIAogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKHNlcV9saXN0X3N0YXJ0KTsKIAogc3RydWN0IGxpc3RfaGVhZCAqc2VxX2xpc3Rfc3RhcnRfaGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBsb2ZmX3QgcG9zKQpAQCAtNjg0LDcgKzY4Myw2IEBACiAKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoaGVhZCwgcG9zIC0gMSk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2VxX2xpc3Rfc3RhcnRfaGVhZCk7CiAKIHN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X25leHQodm9pZCAqdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgbG9mZl90ICpwcG9zKQpAQCAtNjk1LDUgKzY5MywxMzEgQEAKIAkrKypwcG9zOwogCXJldHVybiBsaCA9PSBoZWFkID8gTlVMTCA6IGxoOwogfQotCiBFWFBPUlRfU1lNQk9MKHNlcV9saXN0X25leHQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydCAtIHN0YXJ0IGFuIGl0ZXJhdGlvbiBvZiBhIGhsaXN0CisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGhsaXN0CisgKiBAcG9zOiAgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzZXF1ZW5jZQorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPnN0YXJ0KCkuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlobGlzdF9mb3JfZWFjaChub2RlLCBoZWFkKQorCQlpZiAocG9zLS0gPT0gMCkKKwkJCXJldHVybiBub2RlOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzZXFfaGxpc3Rfc3RhcnQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydF9oZWFkIC0gc3RhcnQgYW4gaXRlcmF0aW9uIG9mIGEgaGxpc3QKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwb3M6ICB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNlcXVlbmNlCisgKgorICogQ2FsbGVkIGF0IHNlcV9maWxlLT5vcC0+c3RhcnQoKS4gQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSB3YW50IHRvCisgKiBwcmludCBhIGhlYWRlciBhdCB0aGUgdG9wIG9mIHRoZSBvdXRwdXQuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfaGVhZChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgbG9mZl90IHBvcykKK3sKKwlpZiAoIXBvcykKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnQoaGVhZCwgcG9zIC0gMSk7Cit9CitFWFBPUlRfU1lNQk9MKHNlcV9obGlzdF9zdGFydF9oZWFkKTsKKworLyoqCisgKiBzZXFfaGxpc3RfbmV4dCAtIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gb2YgdGhlIGhsaXN0CisgKiBAdjogICAgdGhlIGN1cnJlbnQgaXRlcmF0b3IKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwb3M6ICB0aGUgY3VycmVudCBwb3Npc2lvbgorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPm5leHQoKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9uZXh0KHZvaWQgKnYsIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlID0gdjsKKworCSsrKnBwb3M7CisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gaGVhZC0+Zmlyc3Q7CisJZWxzZQorCQlyZXR1cm4gbm9kZS0+bmV4dDsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X25leHQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydF9yY3UgLSBzdGFydCBhbiBpdGVyYXRpb24gb2YgYSBobGlzdCBwcm90ZWN0ZWQgYnkgUkNVCisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGhsaXN0CisgKiBAcG9zOiAgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzZXF1ZW5jZQorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPnN0YXJ0KCkuCisgKgorICogVGhpcyBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgbWF5IHNhZmVseSBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIGhsaXN0X2FkZF9oZWFkX3JjdSgpCisgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfcmN1KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgICBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJX19obGlzdF9mb3JfZWFjaF9yY3Uobm9kZSwgaGVhZCkKKwkJaWYgKHBvcy0tID09IDApCisJCQlyZXR1cm4gbm9kZTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X3N0YXJ0X3JjdSk7CisKKy8qKgorICogc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1IC0gc3RhcnQgYW4gaXRlcmF0aW9uIG9mIGEgaGxpc3QgcHJvdGVjdGVkIGJ5IFJDVQorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBobGlzdAorICogQHBvczogIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc2VxdWVuY2UKKyAqCisgKiBDYWxsZWQgYXQgc2VxX2ZpbGUtPm9wLT5zdGFydCgpLiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8KKyAqIHByaW50IGEgaGVhZGVyIGF0IHRoZSB0b3Agb2YgdGhlIG91dHB1dC4KKyAqCisgKiBUaGlzIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmVzIHN1Y2ggYXMgaGxpc3RfYWRkX2hlYWRfcmN1KCkKKyAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9zdGFydF9oZWFkX3JjdShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgIGxvZmZfdCBwb3MpCit7CisJaWYgKCFwb3MpCisJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X3JjdShoZWFkLCBwb3MgLSAxKTsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1KTsKKworLyoqCisgKiBzZXFfaGxpc3RfbmV4dF9yY3UgLSBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIG9mIHRoZSBobGlzdCBwcm90ZWN0ZWQgYnkgUkNVCisgKiBAdjogICAgdGhlIGN1cnJlbnQgaXRlcmF0b3IKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwb3M6ICB0aGUgY3VycmVudCBwb3Npc2lvbgorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPm5leHQoKS4KKyAqCisgKiBUaGlzIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmVzIHN1Y2ggYXMgaGxpc3RfYWRkX2hlYWRfcmN1KCkKKyAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9uZXh0X3JjdSh2b2lkICp2LAorCQkJCSAgICAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSA9IHY7CisKKwkrKypwcG9zOworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShoZWFkLT5maXJzdCk7CisJZWxzZQorCQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKG5vZGUtPm5leHQpOworfQorRVhQT1JUX1NZTUJPTChzZXFfaGxpc3RfbmV4dF9yY3UpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlCmluZGV4IDU2NjQxZmUuLjVjNWEzNjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQorKysgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAKICMgSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAjCiAKLUVYVFJBX0NGTEFHUyArPQkgLUkkKHNyYykgLUkkKHNyYykvbGludXgtMi42IC1mdW5zaWduZWQtY2hhcgorRVhUUkFfQ0ZMQUdTICs9CSAtSSQoc3JjKSAtSSQoc3JjKS9saW51eC0yLjYKIAogWEZTX0xJTlVYIDo9IGxpbnV4LTIuNgogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCmluZGV4IDJkM2Y5MGEuLmJjNzQwNTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC0yNCw4ICsyMywyNSBAQAogI2luY2x1ZGUgInRpbWUuaCIKICNpbmNsdWRlICJrbWVtLmgiCiAKLSNkZWZpbmUgTUFYX1ZNQUxMT0NTCTYKLSNkZWZpbmUgTUFYX1NMQUJfU0laRQkweDIwMDAwCisvKgorICogR3JlZWR5IGFsbG9jYXRpb24uICBNYXkgZmFpbCBhbmQgbWF5IHJldHVybiB2bWFsbG9jZWQgbWVtb3J5LgorICoKKyAqIE11c3QgYmUgZnJlZWQgdXNpbmcga21lbV9mcmVlX2xhcmdlLgorICovCit2b2lkICoKK2ttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKnNpemUsIHNpemVfdCBtaW5zaXplLCBzaXplX3QgbWF4c2l6ZSkKK3sKKwl2b2lkCQkqcHRyOworCXNpemVfdAkJa21zaXplID0gbWF4c2l6ZTsKKworCXdoaWxlICghKHB0ciA9IGttZW1femFsbG9jX2xhcmdlKGttc2l6ZSkpKSB7CisJCWlmICgoa21zaXplID4+PSAxKSA8PSBtaW5zaXplKQorCQkJa21zaXplID0gbWluc2l6ZTsKKwl9CisJaWYgKHB0cikKKwkJKnNpemUgPSBrbXNpemU7CisJcmV0dXJuIHB0cjsKK30KIAogdm9pZCAqCiBrbWVtX2FsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCkBAIC0zNCwxOSArNTAsOCBAQAogCWdmcF90CWxmbGFncyA9IGttZW1fZmxhZ3NfY29udmVydChmbGFncyk7CiAJdm9pZAkqcHRyOwogCi0jaWZkZWYgREVCVUcKLQlpZiAodW5saWtlbHkoIShmbGFncyAmIEtNX0xBUkdFKSAmJiAoc2l6ZSA+IFBBR0VfU0laRSkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkxhcmdlICVzIGF0dGVtcHQsIHNpemU9JWxkXG4iLAotCQkJX19mdW5jX18sIChsb25nKXNpemUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JfQotI2VuZGlmCi0KIAlkbyB7Ci0JCWlmIChzaXplIDwgTUFYX1NMQUJfU0laRSB8fCByZXRyaWVzID4gTUFYX1ZNQUxMT0NTKQotCQkJcHRyID0ga21hbGxvYyhzaXplLCBsZmxhZ3MpOwotCQllbHNlCi0JCQlwdHIgPSBfX3ZtYWxsb2Moc2l6ZSwgbGZsYWdzLCBQQUdFX0tFUk5FTCk7CisJCXB0ciA9IGttYWxsb2Moc2l6ZSwgbGZsYWdzKTsKIAkJaWYgKHB0ciB8fCAoZmxhZ3MgJiAoS01fTUFZRkFJTHxLTV9OT1NMRUVQKSkpCiAJCQlyZXR1cm4gcHRyOwogCQlpZiAoISgrK3JldHJpZXMgJSAxMDApKQpAQCAtNjgsMjcgKzczLDYgQEAKIAlyZXR1cm4gcHRyOwogfQogCi12b2lkICoKLWttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKnNpemUsIHNpemVfdCBtaW5zaXplLCBzaXplX3QgbWF4c2l6ZSwKLQkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQotewotCXZvaWQJCSpwdHI7Ci0Jc2l6ZV90CQlrbXNpemUgPSBtYXhzaXplOwotCXVuc2lnbmVkIGludAlrbWZsYWdzID0gKGZsYWdzICYgfktNX1NMRUVQKSB8IEtNX05PU0xFRVA7Ci0KLQl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvYyhrbXNpemUsIGttZmxhZ3MpKSkgewotCQlpZiAoKGttc2l6ZSA8PSBtaW5zaXplKSAmJiAoZmxhZ3MgJiBLTV9OT1NMRUVQKSkKLQkJCWJyZWFrOwotCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkgewotCQkJa21zaXplID0gbWluc2l6ZTsKLQkJCWttZmxhZ3MgPSBmbGFnczsKLQkJfQotCX0KLQlpZiAocHRyKQotCQkqc2l6ZSA9IGttc2l6ZTsKLQlyZXR1cm4gcHRyOwotfQotCiB2b2lkCiBrbWVtX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmggYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaAppbmRleCAxNzljYmQ2Li5mN2M4ZjdhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uaAorKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAvKgogICogR2VuZXJhbCBtZW1vcnkgYWxsb2NhdGlvbiBpbnRlcmZhY2VzCkBAIC0zMCw3ICszMSw2IEBACiAjZGVmaW5lIEtNX05PU0xFRVAJMHgwMDAydQogI2RlZmluZSBLTV9OT0ZTCQkweDAwMDR1CiAjZGVmaW5lIEtNX01BWUZBSUwJMHgwMDA4dQotI2RlZmluZSBLTV9MQVJHRQkweDAwMTB1CiAKIC8qCiAgKiBXZSB1c2UgYSBzcGVjaWFsIHByb2Nlc3MgZmxhZyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbGJhY2tzIGludG8KQEAgLTQyLDcgKzQyLDcgQEAKIHsKIAlnZnBfdAlsZmxhZ3M7CiAKLQlCVUdfT04oZmxhZ3MgJiB+KEtNX1NMRUVQfEtNX05PU0xFRVB8S01fTk9GU3xLTV9NQVlGQUlMfEtNX0xBUkdFKSk7CisJQlVHX09OKGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTCkpOwogCiAJaWYgKGZsYWdzICYgS01fTk9TTEVFUCkgewogCQlsZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOOwpAQCAtNTYsMTAgKzU2LDI1IEBACiAKIGV4dGVybiB2b2lkICprbWVtX2FsbG9jKHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICprbWVtX3phbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7Ci1leHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICprbWVtX3JlYWxsb2MoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICBrbWVtX2ZyZWUoY29uc3Qgdm9pZCAqKTsKIAorc3RhdGljIGlubGluZSB2b2lkICprbWVtX3phbGxvY19sYXJnZShzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpwdHI7CisKKwlwdHIgPSB2bWFsbG9jKHNpemUpOworCWlmIChwdHIpCisJCW1lbXNldChwdHIsIDAsIHNpemUpOworCXJldHVybiBwdHI7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQga21lbV9mcmVlX2xhcmdlKHZvaWQgKnB0cikKK3sKKwl2ZnJlZShwdHIpOworfQorCitleHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCk7CisKIC8qCiAgKiBab25lIGludGVyZmFjZXMKICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYwppbmRleCA4ODNjYTVhLi5iZjg1YmJlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCXN0cnVjdCB4ZnNfYWNsICp4ZnNfYWNsOwogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHhmc19hY2wpOwotCWNoYXIgKmVhX25hbWU7CisJdW5zaWduZWQgY2hhciAqZWFfbmFtZTsKIAlpbnQgZXJyb3I7CiAKIAlhY2wgPSBnZXRfY2FjaGVkX2FjbChpbm9kZSwgdHlwZSk7CkBAIC0xMzMsNyArMTMzLDggQEAKIAlpZiAoIXhmc19hY2wpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCBlYV9uYW1lLCAoY2hhciAqKXhmc19hY2wsICZsZW4sIEFUVFJfUk9PVCk7CisJZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCBlYV9uYW1lLCAodW5zaWduZWQgY2hhciAqKXhmc19hY2wsCisJCQkJCQkJJmxlbiwgQVRUUl9ST09UKTsKIAlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogSWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0IG1ha2Ugc3VyZSB3ZSBoYXZlIGEgbmVnYXRpdmUKQEAgLTE2Miw3ICsxNjMsNyBAQAogeGZzX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKLQljaGFyICplYV9uYW1lOworCXVuc2lnbmVkIGNoYXIgKmVhX25hbWU7CiAJaW50IGVycm9yOwogCiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCkBAIC0xOTQsNyArMTk1LDcgQEAKIAkJCShzaXplb2Yoc3RydWN0IHhmc19hY2xfZW50cnkpICoKIAkJCSAoWEZTX0FDTF9NQVhfRU5UUklFUyAtIGFjbC0+YV9jb3VudCkpOwogCi0JCWVycm9yID0gLXhmc19hdHRyX3NldChpcCwgZWFfbmFtZSwgKGNoYXIgKil4ZnNfYWNsLAorCQllcnJvciA9IC14ZnNfYXR0cl9zZXQoaXAsIGVhX25hbWUsICh1bnNpZ25lZCBjaGFyICopeGZzX2FjbCwKIAkJCQlsZW4sIEFUVFJfUk9PVCk7CiAKIAkJa2ZyZWUoeGZzX2FjbCk7CkBAIC0yNjIsNyArMjYzLDcgQEAKIH0KIAogc3RhdGljIGludAoteGZzX2FjbF9leGlzdHMoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbmFtZSkKK3hmc19hY2xfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGNoYXIgKm5hbWUpCiB7CiAJaW50IGxlbiA9IHNpemVvZihzdHJ1Y3QgeGZzX2FjbCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggNzdiOGJlOC4uNmY3NmJhOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdF9zb3J0Lmg+CiAKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgpAQCAtNzYsNiArNzcsMjcgQEAKICNkZWZpbmUgeGZzX2J1Zl9kZWFsbG9jYXRlKGJwKSBcCiAJa21lbV96b25lX2ZyZWUoeGZzX2J1Zl96b25lLCAoYnApKTsKIAorc3RhdGljIGlubGluZSBpbnQKK3hmc19idWZfaXNfdm1hcHBlZCgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJLyoKKwkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIHZtYXBwZWQuCisJICoKKwkgKiBUaGUgWEJGX01BUFBFRCBmbGFnIGlzIHNldCBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBtYXBwZWQsIGJ1dCB0aGUKKwkgKiBjb2RlIGlzIGNsZXZlciBlbm91Z2ggdG8ga25vdyBpdCBkb2Vzbid0IGhhdmUgdG8gbWFwIGEgc2luZ2xlIHBhZ2UsCisJICogc28gdGhlIGNoZWNrIGhhcyB0byBiZSBib3RoIGZvciBYQkZfTUFQUEVEIGFuZCBicC0+Yl9wYWdlX2NvdW50ID4gMS4KKwkgKi8KKwlyZXR1cm4gKGJwLT5iX2ZsYWdzICYgWEJGX01BUFBFRCkgJiYgYnAtPmJfcGFnZV9jb3VudCA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnNfYnVmX3ZtYXBfbGVuKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlyZXR1cm4gKGJwLT5iX3BhZ2VfY291bnQgKiBQQUdFX1NJWkUpIC0gYnAtPmJfb2Zmc2V0OworfQorCiAvKgogICoJUGFnZSBSZWdpb24gaW50ZXJmYWNlcy4KICAqCkBAIC0zMTQsNyArMzM2LDcgQEAKIAlpZiAoYnAtPmJfZmxhZ3MgJiAoX1hCRl9QQUdFX0NBQ0hFfF9YQkZfUEFHRVMpKSB7CiAJCXVpbnQJCWk7CiAKLQkJaWYgKChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIChicC0+Yl9wYWdlX2NvdW50ID4gMSkpCisJCWlmICh4ZnNfYnVmX2lzX3ZtYXBwZWQoYnApKQogCQkJZnJlZV9hZGRyZXNzKGJwLT5iX2FkZHIgLSBicC0+Yl9vZmZzZXQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBicC0+Yl9wYWdlX2NvdW50OyBpKyspIHsKQEAgLTEwNTEsMjIgKzEwNzMsMzAgQEAKIH0KIAogaW50Ci14ZnNfYmF3cml0ZSgKLQl2b2lkCQkJKm1wLAoreGZzX2J3cml0ZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQogewotCXRyYWNlX3hmc19idWZfYmF3cml0ZShicCwgX1JFVF9JUF8pOworCWludAkJCWlvd2FpdCA9IChicC0+Yl9mbGFncyAmIFhCRl9BU1lOQykgPT0gMDsKKwlpbnQJCQllcnJvciA9IDA7CiAKLQlBU1NFUlQoYnAtPmJfYm4gIT0gWEZTX0JVRl9EQUREUl9OVUxMKTsKKwlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOworCWJwLT5iX21vdW50ID0gbXA7CisJYnAtPmJfZmxhZ3MgfD0gWEJGX1dSSVRFOworCWlmICghaW93YWl0KQorCQlicC0+Yl9mbGFncyB8PSBfWEJGX1JVTl9RVUVVRVM7CiAKIAl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKTsKKwl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCi0JYnAtPmJfZmxhZ3MgJj0gfihYQkZfUkVBRCB8IFhCRl9ERUxXUkkgfCBYQkZfUkVBRF9BSEVBRCk7Ci0JYnAtPmJfZmxhZ3MgfD0gKFhCRl9XUklURSB8IFhCRl9BU1lOQyB8IF9YQkZfUlVOX1FVRVVFUyk7CisJaWYgKGlvd2FpdCkgeworCQllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKKwkJaWYgKGVycm9yKQorCQkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9NRVRBX0lPX0VSUk9SKTsKKwkJeGZzX2J1Zl9yZWxzZShicCk7CisJfQogCi0JYnAtPmJfbW91bnQgPSBtcDsKLQlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwotCXJldHVybiB4ZnNfYmRzdHJhdF9jYihicCk7CisJcmV0dXJuIGVycm9yOwogfQogCiB2b2lkCkBAIC0xMDg1LDYgKzExMTUsMTI2IEBACiAJeGZzX2J1Zl9kZWx3cmlfcXVldWUoYnAsIDEpOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdG9wIGEgYnVmZmVyIGZyb20gZ2V0dGluZyB3cml0dGVuIG9yIHJlYWQuCisgKiBXZSBhdHRhY2ggdGhlIEVJTyBlcnJvciwgbXVjayB3aXRoIGl0cyBmbGFncywgYW5kIGNhbGwgYmlvZG9uZQorICogc28gdGhhdCB0aGUgcHJvcGVyIGlvZG9uZSBjYWxsYmFja3MgZ2V0IGNhbGxlZC4KKyAqLworU1RBVElDIGludAoreGZzX2Jpb2Vycm9yKAorCXhmc19idWZfdCAqYnApCit7CisjaWZkZWYgWEZTRVJST1JERUJVRworCUFTU0VSVChYRlNfQlVGX0lTUkVBRChicCkgfHwgYnAtPmJfaW9kb25lKTsKKyNlbmRpZgorCisJLyoKKwkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZCwgd2UgYXJlbid0IGZsdXNoaW5nIGl0LgorCSAqLworCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisKKwkvKgorCSAqIFdlJ3JlIGNhbGxpbmcgYmlvZG9uZSwgc28gZGVsZXRlIFhCRl9ET05FIGZsYWcuCisJICovCisJWEZTX0JVRl9VTlJFQUQoYnApOworCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKKwlYRlNfQlVGX1VORE9ORShicCk7CisJWEZTX0JVRl9TVEFMRShicCk7CisKKwlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOworCXhmc19iaW9kb25lKGJwKTsKKworCXJldHVybiBFSU87Cit9CisKKy8qCisgKiBTYW1lIGFzIHhmc19iaW9lcnJvciwgZXhjZXB0IHRoYXQgd2UgYXJlIHJlbGVhc2luZyB0aGUgYnVmZmVyCisgKiBoZXJlIG91cnNlbHZlcywgYW5kIGF2b2lkaW5nIHRoZSBiaW9kb25lIGNhbGwuCisgKiBUaGlzIGlzIG1lYW50IGZvciB1c2VyZGF0YSBlcnJvcnM7IG1ldGFkYXRhIGJ1ZnMgY29tZSB3aXRoCisgKiBpb2RvbmUgZnVuY3Rpb25zIGF0dGFjaGVkLCBzbyB0aGF0IHdlIGNhbiB0cmFjayBkb3duIGVycm9ycy4KKyAqLworU1RBVElDIGludAoreGZzX2Jpb2Vycm9yX3JlbHNlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlpbnQ2NF90CQlmbCA9IFhGU19CVUZfQkZMQUdTKGJwKTsKKwkvKgorCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgorCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KKwkgKgorCSAqIGNodW5raG9sZCBleHBlY3RzIEJfRE9ORSB0byBiZSBzZXQsIHdoZXRoZXIKKwkgKiB3ZSBhY3R1YWxseSBmaW5pc2ggdGhlIEkvTyBvciBub3QuIFdlIGRvbid0IHdhbnQgdG8KKwkgKiBjaGFuZ2UgdGhhdCBpbnRlcmZhY2UuCisJICovCisJWEZTX0JVRl9VTlJFQUQoYnApOworCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKKwlYRlNfQlVGX0RPTkUoYnApOworCVhGU19CVUZfU1RBTEUoYnApOworCVhGU19CVUZfQ0xSX0lPRE9ORV9GVU5DKGJwKTsKKwlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOworCWlmICghKGZsICYgWEJGX0FTWU5DKSkgeworCQkvKgorCQkgKiBNYXJrIGJfZXJyb3IgYW5kIEJfRVJST1IgX2JvdGhfLgorCQkgKiBMb3QncyBvZiBjaHVua2NhY2hlIGNvZGUgYXNzdW1lcyB0aGF0LgorCQkgKiBUaGVyZSdzIG5vIHJlYXNvbiB0byBtYXJrIGVycm9yIGZvcgorCQkgKiBBU1lOQyBidWZmZXJzLgorCQkgKi8KKwkJWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKKwkJWEZTX0JVRl9GSU5JU0hfSU9XQUlUKGJwKTsKKwl9IGVsc2UgeworCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwl9CisKKwlyZXR1cm4gRUlPOworfQorCisKKy8qCisgKiBBbGwgeGZzIG1ldGFkYXRhIGJ1ZmZlcnMgZXhjZXB0IGxvZyBzdGF0ZSBtYWNoaW5lIGJ1ZmZlcnMKKyAqIGdldCB0aGlzIGF0dGFjaGVkIGFzIHRoZWlyIGJfYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gY2F0Y2ggYSBidWZmZXIKKyAqIGFmdGVyIHByZW1hdHVyZWx5IHVucGlubmluZyBpdCB0byBmb3JjaWJseSBzaHV0ZG93biB0aGUgZmlsZXN5c3RlbS4KKyAqLworaW50Cit4ZnNfYmRzdHJhdF9jYigKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oYnAtPmJfbW91bnQpKSB7CisJCXRyYWNlX3hmc19iZHN0cmF0X3NodXQoYnAsIF9SRVRfSVBfKTsKKwkJLyoKKwkJICogTWV0YWRhdGEgd3JpdGUgdGhhdCBkaWRuJ3QgZ2V0IGxvZ2dlZCBidXQKKwkJICogd3JpdHRlbiBkZWxheWVkIGFueXdheS4gVGhlc2UgYXJlbid0IGFzc29jaWF0ZWQKKwkJICogd2l0aCBhIHRyYW5zYWN0aW9uLCBhbmQgY2FuIGJlIGlnbm9yZWQuCisJCSAqLworCQlpZiAoIWJwLT5iX2lvZG9uZSAmJiAhWEZTX0JVRl9JU1JFQUQoYnApKQorCQkJcmV0dXJuIHhmc19iaW9lcnJvcl9yZWxzZShicCk7CisJCWVsc2UKKwkJCXJldHVybiB4ZnNfYmlvZXJyb3IoYnApOworCX0KKworCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhIGZyb20gZ29pbmcgdG8gZGlzayBpbiBjYXNlCisgKiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4gIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMKKyAqIHBhdGg7IG9uZSBvZiB0aGUgZXhjZXB0aW9ucyBpcyB0aGUgc3VwZXJibG9jay4KKyAqLwordm9pZAoreGZzYmRzdHJhdCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQoreworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgeworCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CisJCXhmc19iaW9lcnJvcl9yZWxzZShicCk7CisJCXJldHVybjsKKwl9CisKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Cit9CisKIFNUQVRJQyB2b2lkCiBfeGZzX2J1Zl9pb2VuZCgKIAl4ZnNfYnVmX3QJCSpicCwKQEAgLTExMDcsNiArMTI1Nyw5IEBACiAKIAl4ZnNfYnVmX2lvZXJyb3IoYnAsIC1lcnJvcik7CiAKKwlpZiAoIWVycm9yICYmIHhmc19idWZfaXNfdm1hcHBlZChicCkgJiYgKGJwLT5iX2ZsYWdzICYgWEJGX1JFQUQpKQorCQlpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKGJwLT5iX2FkZHIsIHhmc19idWZfdm1hcF9sZW4oYnApKTsKKwogCWRvIHsKIAkJc3RydWN0IHBhZ2UJKnBhZ2UgPSBidmVjLT5idl9wYWdlOwogCkBAIC0xMjE2LDYgKzEzNjksMTAgQEAKIAogc3VibWl0X2lvOgogCWlmIChsaWtlbHkoYmlvLT5iaV9zaXplKSkgeworCQlpZiAoeGZzX2J1Zl9pc192bWFwcGVkKGJwKSkgeworCQkJZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2UoYnAtPmJfYWRkciwKKwkJCQkJCXhmc19idWZfdm1hcF9sZW4oYnApKTsKKwkJfQogCQlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCQlpZiAoc2l6ZSkKIAkJCWdvdG8gbmV4dF9jaHVuazsKQEAgLTEyOTYsNyArMTQ1Myw3IEBACiAJeGZzX2J1Zl90CQkqYnAsCS8qIGJ1ZmZlciB0byBwcm9jZXNzCQkqLwogCXNpemVfdAkJCWJvZmYsCS8qIHN0YXJ0aW5nIGJ1ZmZlciBvZmZzZXQJKi8KIAlzaXplX3QJCQlic2l6ZSwJLyogbGVuZ3RoIHRvIGNvcHkJCSovCi0JY2FkZHJfdAkJCWRhdGEsCS8qIGRhdGEgYWRkcmVzcwkJCSovCisJdm9pZAkJCSpkYXRhLAkvKiBkYXRhIGFkZHJlc3MJCQkqLwogCXhmc19idWZfcndfdAkJbW9kZSkJLyogcmVhZC93cml0ZS96ZXJvIGZsYWcJCSovCiB7CiAJc2l6ZV90CQkJYmVuZCwgY3BvZmYsIGNzaXplOwpAQCAtMTM3OCw4ICsxNTM1LDggQEAKIAogCWJ0cC0+YnRfaGFzaHNoaWZ0ID0gZXh0ZXJuYWwgPyAzIDogODsJLyogOCBvciAyNTYgYnVja2V0cyAqLwogCWJ0cC0+YnRfaGFzaG1hc2sgPSAoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgLSAxOwotCWJ0cC0+YnRfaGFzaCA9IGttZW1femFsbG9jKCgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KSAqCi0JCQkJCXNpemVvZih4ZnNfYnVmaGFzaF90KSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJYnRwLT5idF9oYXNoID0ga21lbV96YWxsb2NfbGFyZ2UoKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpICoKKwkJCQkJIHNpemVvZih4ZnNfYnVmaGFzaF90KSk7CiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KTsgaSsrKSB7CiAJCXNwaW5fbG9ja19pbml0KCZidHAtPmJ0X2hhc2hbaV0uYmhfbG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZidHAtPmJ0X2hhc2hbaV0uYmhfbGlzdCk7CkBAIC0xMzkwLDcgKzE1NDcsNyBAQAogeGZzX2ZyZWVfYnVmaGFzaCgKIAl4ZnNfYnVmdGFyZ190CQkqYnRwKQogewotCWttZW1fZnJlZShidHAtPmJ0X2hhc2gpOworCWttZW1fZnJlZV9sYXJnZShidHAtPmJ0X2hhc2gpOwogCWJ0cC0+YnRfaGFzaCA9IE5VTEw7CiB9CiAKQEAgLTE1OTUsNiArMTc1MiwxMSBAQAogCQlsaXN0X2RlbCgmYnAtPmJfbGlzdCk7CiAJfQogCisJaWYgKGxpc3RfZW1wdHkoZHdxKSkgeworCQkvKiBzdGFydCB4ZnNidWZkIGFzIGl0IGlzIGFib3V0IHRvIGhhdmUgc29tZXRoaW5nIHRvIGRvICovCisJCXdha2VfdXBfcHJvY2VzcyhicC0+Yl90YXJnZXQtPmJ0X3Rhc2spOworCX0KKwogCWJwLT5iX2ZsYWdzIHw9IF9YQkZfREVMV1JJX1E7CiAJbGlzdF9hZGRfdGFpbCgmYnAtPmJfbGlzdCwgZHdxKTsKIAlicC0+Yl9xdWV1ZXRpbWUgPSBqaWZmaWVzOwpAQCAtMTYyNiw2ICsxNzg4LDM1IEBACiAJdHJhY2VfeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCwgX1JFVF9JUF8pOwogfQogCisvKgorICogSWYgYSBkZWx3cmkgYnVmZmVyIG5lZWRzIHRvIGJlIHB1c2hlZCBiZWZvcmUgaXQgaGFzIGFnZWQgb3V0LCB0aGVuIHByb21vdGUKKyAqIGl0IHRvIHRoZSBoZWFkIG9mIHRoZSBkZWx3cmkgcXVldWUgc28gdGhhdCBpdCB3aWxsIGJlIGZsdXNoZWQgb24gdGhlIG5leHQKKyAqIHhmc2J1ZmQgcnVuLiBXZSBkbyB0aGlzIGJ5IHJlc2V0dGluZyB0aGUgcXVldWV0aW1lIG9mIHRoZSBidWZmZXIgdG8gYmUgb2xkZXIKKyAqIHRoYW4gdGhlIGFnZSBjdXJyZW50bHkgbmVlZGVkIHRvIGZsdXNoIHRoZSBidWZmZXIuIEhlbmNlIHRoZSBuZXh0IHRpbWUgdGhlCisgKiB4ZnNidWZkIHNlZXMgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBjb25zaWRlcmVkIG9sZCBlbm91Z2ggdG8gZmx1c2guCisgKi8KK3ZvaWQKK3hmc19idWZfZGVsd3JpX3Byb21vdGUoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCXN0cnVjdCB4ZnNfYnVmdGFyZyAqYnRwID0gYnAtPmJfdGFyZ2V0OworCWxvbmcJCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApICsgMTsKKworCUFTU0VSVChicC0+Yl9mbGFncyAmIFhCRl9ERUxXUkkpOworCUFTU0VSVChicC0+Yl9mbGFncyAmIF9YQkZfREVMV1JJX1EpOworCisJLyoKKwkgKiBDaGVjayB0aGUgYnVmZmVyIGFnZSBiZWZvcmUgbG9ja2luZyB0aGUgZGVsYXllZCB3cml0ZSBxdWV1ZSBhcyB3ZQorCSAqIGRvbid0IG5lZWQgdG8gcHJvbW90ZSBidWZmZXJzIHRoYXQgYXJlIGFscmVhZHkgcGFzdCB0aGUgZmx1c2ggYWdlLgorCSAqLworCWlmIChicC0+Yl9xdWV1ZXRpbWUgPCBqaWZmaWVzIC0gYWdlKQorCQlyZXR1cm47CisJYnAtPmJfcXVldWV0aW1lID0gamlmZmllcyAtIGFnZTsKKwlzcGluX2xvY2soJmJ0cC0+YnRfZGVsd3JpdGVfbG9jayk7CisJbGlzdF9tb3ZlKCZicC0+Yl9saXN0LCAmYnRwLT5idF9kZWx3cml0ZV9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJmJ0cC0+YnRfZGVsd3JpdGVfbG9jayk7Cit9CisKIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKnF1ZXVlKQpAQCAtMTY0NCw2ICsxODM1LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ0cCwgJnhmc19idWZ0YXJnX2xpc3QsIGJ0X2xpc3QpIHsKIAkJaWYgKHRlc3RfYml0KFhCVF9GT1JDRV9TTEVFUCwgJmJ0cC0+YnRfZmxhZ3MpKQogCQkJY29udGludWU7CisJCWlmIChsaXN0X2VtcHR5KCZidHAtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKKwkJCWNvbnRpbnVlOwogCQlzZXRfYml0KFhCVF9GT1JDRV9GTFVTSCwgJmJ0cC0+YnRfZmxhZ3MpOwogCQl3YWtlX3VwX3Byb2Nlc3MoYnRwLT5idF90YXNrKTsKIAl9CkBAIC0xNjk0LDIwICsxODg3LDUzIEBACiAKIH0KIAorLyoKKyAqIENvbXBhcmUgZnVuY3Rpb24gaXMgbW9yZSBjb21wbGV4IHRoYW4gaXQgbmVlZHMgdG8gYmUgYmVjYXVzZQorICogdGhlIHJldHVybiB2YWx1ZSBpcyBvbmx5IDMyIGJpdHMgYW5kIHdlIGFyZSBkb2luZyBjb21wYXJpc29ucworICogb24gNjQgYml0IHZhbHVlcworICovCitzdGF0aWMgaW50Cit4ZnNfYnVmX2NtcCgKKwl2b2lkCQkqcHJpdiwKKwlzdHJ1Y3QgbGlzdF9oZWFkICphLAorCXN0cnVjdCBsaXN0X2hlYWQgKmIpCit7CisJc3RydWN0IHhmc19idWYJKmFwID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOworCXN0cnVjdCB4ZnNfYnVmCSpicCA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKKwl4ZnNfZGFkZHJfdAkJZGlmZjsKKworCWRpZmYgPSBhcC0+Yl9ibiAtIGJwLT5iX2JuOworCWlmIChkaWZmIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChkaWZmID4gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3hmc19idWZfZGVsd3JpX3NvcnQoCisJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0LAorCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJbGlzdF9zb3J0KE5VTEwsIGxpc3QsIHhmc19idWZfY21wKTsKK30KKwogU1RBVElDIGludAogeGZzYnVmZCgKIAl2b2lkCQkqZGF0YSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKLQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPSAoeGZzX2J1ZnRhcmdfdCAqKWRhdGE7Ci0JaW50CQljb3VudDsKLQl4ZnNfYnVmX3QJKmJwOworCXhmc19idWZ0YXJnX3QgICAqdGFyZ2V0ID0gKHhmc19idWZ0YXJnX3QgKilkYXRhOwogCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CiAKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlkbyB7CisJCWxvbmcJYWdlID0geGZzX2J1Zl9hZ2VfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7CisJCWxvbmcJdG91dCA9IHhmc19idWZfdGltZXJfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7CisJCWludAljb3VudCA9IDA7CisJCXN0cnVjdCBsaXN0X2hlYWQgdG1wOworCiAJCWlmICh1bmxpa2VseShmcmVlemluZyhjdXJyZW50KSkpIHsKIAkJCXNldF9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CiAJCQlyZWZyaWdlcmF0b3IoKTsKQEAgLTE3MTUsMTcgKzE5NDEsMTYgQEAKIAkJCWNsZWFyX2JpdChYQlRfRk9SQ0VfU0xFRVAsICZ0YXJnZXQtPmJ0X2ZsYWdzKTsKIAkJfQogCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKLQkJCXhmc19idWZfdGltZXJfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCkpOworCQkvKiBzbGVlcCBmb3IgYSBsb25nIHRpbWUgaWYgdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8KKwkJaWYgKGxpc3RfZW1wdHkoJnRhcmdldC0+YnRfZGVsd3JpdGVfcXVldWUpKQorCQkJdG91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodG91dCk7CiAKLQkJeGZzX2J1Zl9kZWx3cmlfc3BsaXQodGFyZ2V0LCAmdG1wLAotCQkJCXhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKLQotCQljb3VudCA9IDA7CisJCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgYWdlKTsKKwkJbGlzdF9zb3J0KE5VTEwsICZ0bXAsIHhmc19idWZfY21wKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXApKSB7Ci0JCQlicCA9IGxpc3RfZW50cnkodG1wLm5leHQsIHhmc19idWZfdCwgYl9saXN0KTsKLQkJCUFTU0VSVCh0YXJnZXQgPT0gYnAtPmJfdGFyZ2V0KTsKLQorCQkJc3RydWN0IHhmc19idWYgKmJwOworCQkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXAsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CiAJCQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCQkJY291bnQrKzsKQEAgLTE3NTEsNDIgKzE5NzYsNDUgQEAKIAl4ZnNfYnVmdGFyZ190CSp0YXJnZXQsCiAJaW50CQl3YWl0KQogewotCXN0cnVjdCBsaXN0X2hlYWQgdG1wOwotCXhmc19idWZfdAkqYnAsICpuOworCXhmc19idWZfdAkqYnA7CiAJaW50CQlwaW5jb3VudCA9IDA7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKwlMSVNUX0hFQUQod2FpdF9saXN0KTsKIAogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNjb252ZXJ0ZF93b3JrcXVldWUpOwogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNkYXRhZF93b3JrcXVldWUpOwogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNsb2dkX3dvcmtxdWV1ZSk7CiAKIAlzZXRfYml0KFhCVF9GT1JDRV9GTFVTSCwgJnRhcmdldC0+YnRfZmxhZ3MpOwotCXBpbmNvdW50ID0geGZzX2J1Zl9kZWx3cmlfc3BsaXQodGFyZ2V0LCAmdG1wLCAwKTsKKwlwaW5jb3VudCA9IHhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcF9saXN0LCAwKTsKIAogCS8qCi0JICogRHJvcHBlZCB0aGUgZGVsYXllZCB3cml0ZSBsaXN0IGxvY2ssIG5vdyB3YWxrIHRoZSB0ZW1wb3JhcnkgbGlzdAorCSAqIERyb3BwZWQgdGhlIGRlbGF5ZWQgd3JpdGUgbGlzdCBsb2NrLCBub3cgd2FsayB0aGUgdGVtcG9yYXJ5IGxpc3QuCisJICogQWxsIEkvTyBpcyBpc3N1ZWQgYXN5bmMgYW5kIHRoZW4gaWYgd2UgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJICogd2UgZG8gdGhhdCBhZnRlciBpc3N1aW5nIGFsbCB0aGUgSU8uCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJwLCBuLCAmdG1wLCBiX2xpc3QpIHsKKwlsaXN0X3NvcnQoTlVMTCwgJnRtcF9saXN0LCB4ZnNfYnVmX2NtcCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXBfbGlzdCkpIHsKKwkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXBfbGlzdCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAJCUFTU0VSVCh0YXJnZXQgPT0gYnAtPmJfdGFyZ2V0KTsKLQkJaWYgKHdhaXQpCisJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOworCQlpZiAod2FpdCkgewogCQkJYnAtPmJfZmxhZ3MgJj0gflhCRl9BU1lOQzsKLQkJZWxzZQotCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7Ci0KKwkJCWxpc3RfYWRkKCZicC0+Yl9saXN0LCAmd2FpdF9saXN0KTsKKwkJfQogCQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCX0KIAotCWlmICh3YWl0KQorCWlmICh3YWl0KSB7CisJCS8qIEV4cGVkaXRlIGFuZCB3YWl0IGZvciBJTyB0byBjb21wbGV0ZS4gKi8KIAkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmd2FpdF9saXN0KSkgeworCQkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ3YWl0X2xpc3QsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCi0JLyoKLQkgKiBSZW1haW5pbmcgbGlzdCBpdGVtcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIHJldHVybmluZwotCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewotCQlicCA9IGxpc3RfZW50cnkodG1wLm5leHQsIHhmc19idWZfdCwgYl9saXN0KTsKLQotCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKLQkJeGZzX2lvd2FpdChicCk7Ci0JCXhmc19idWZfcmVsc2UoYnApOworCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CisJCQl4ZnNfaW93YWl0KGJwKTsKKwkJCXhmc19idWZfcmVsc2UoYnApOworCQl9CiAJfQogCiAJcmV0dXJuIHBpbmNvdW50OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCBhMzRjN2I1Li4zODZlNzM2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtMjMyLDEzICsyMzIsMTcgQEAKIGV4dGVybiB2b2lkIHhmc19idWZfdW5sb2NrKHhmc19idWZfdCAqKTsKIAogLyogQnVmZmVyIFJlYWQgYW5kIFdyaXRlIFJvdXRpbmVzICovCi1leHRlcm4gaW50IHhmc19iYXdyaXRlKHZvaWQgKm1wLCB4ZnNfYnVmX3QgKmJwKTsKK2V4dGVybiBpbnQgeGZzX2J3cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19idWYgKmJwKTsKIGV4dGVybiB2b2lkIHhmc19iZHdyaXRlKHZvaWQgKm1wLCB4ZnNfYnVmX3QgKmJwKTsKKworZXh0ZXJuIHZvaWQgeGZzYmRzdHJhdChzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfYnVmICopOworZXh0ZXJuIGludCB4ZnNfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqKTsKKwogZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb2VuZCh4ZnNfYnVmX3QgKiwJaW50KTsKIGV4dGVybiB2b2lkIHhmc19idWZfaW9lcnJvcih4ZnNfYnVmX3QgKiwgaW50KTsKIGV4dGVybiBpbnQgeGZzX2J1Zl9pb3JlcXVlc3QoeGZzX2J1Zl90ICopOwogZXh0ZXJuIGludCB4ZnNfYnVmX2lvd2FpdCh4ZnNfYnVmX3QgKik7Ci1leHRlcm4gdm9pZCB4ZnNfYnVmX2lvbW92ZSh4ZnNfYnVmX3QgKiwgc2l6ZV90LCBzaXplX3QsIHhmc19jYWRkcl90LAorZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICosCiAJCQkJeGZzX2J1Zl9yd190KTsKIAogc3RhdGljIGlubGluZSBpbnQgeGZzX2J1Zl9pb3N0cmF0ZWd5KHhmc19idWZfdCAqYnApCkBAIC0yNjEsNiArMjY1LDcgQEAKIAogLyogRGVsYXllZCBXcml0ZSBCdWZmZXIgUm91dGluZXMgKi8KIGV4dGVybiB2b2lkIHhmc19idWZfZGVsd3JpX2RlcXVldWUoeGZzX2J1Zl90ICopOworZXh0ZXJuIHZvaWQgeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZSh4ZnNfYnVmX3QgKik7CiAKIC8qIEJ1ZmZlciBEYWVtb24gU2V0dXAgUm91dGluZXMgKi8KIGV4dGVybiBpbnQgeGZzX2J1Zl9pbml0KHZvaWQpOwpAQCAtMjcwLDMzICsyNzUsMTkgQEAKIAkoeyBjaGFyIF9fYltCREVWTkFNRV9TSVpFXTsgYmRldm5hbWUoKHRhcmdldCktPmJ0X2JkZXYsIF9fYik7IF9fYjsgfSkKIAogCi0jZGVmaW5lIFhGU19CX0FTWU5DCQlYQkZfQVNZTkMKLSNkZWZpbmUgWEZTX0JfREVMV1JJCQlYQkZfREVMV1JJCi0jZGVmaW5lIFhGU19CX1JFQUQJCVhCRl9SRUFECi0jZGVmaW5lIFhGU19CX1dSSVRFCQlYQkZfV1JJVEUKLSNkZWZpbmUgWEZTX0JfU1RBTEUJCVhCRl9TVEFMRQotCi0jZGVmaW5lIFhGU19CVUZfVFJZTE9DSwkJWEJGX1RSWUxPQ0sKLSNkZWZpbmUgWEZTX0lOQ09SRV9UUllMT0NLCVhCRl9UUllMT0NLCi0jZGVmaW5lIFhGU19CVUZfTE9DSwkJWEJGX0xPQ0sKLSNkZWZpbmUgWEZTX0JVRl9NQVBQRUQJCVhCRl9NQVBQRUQKLQotI2RlZmluZSBCVUZfQlVTWQkJWEJGX0RPTlRfQkxPQ0sKLQogI2RlZmluZSBYRlNfQlVGX0JGTEFHUyhicCkJKChicCktPmJfZmxhZ3MpCiAjZGVmaW5lIFhGU19CVUZfWkVST0ZMQUdTKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSBcCiAJCX4oWEJGX1JFQUR8WEJGX1dSSVRFfFhCRl9BU1lOQ3xYQkZfREVMV1JJfFhCRl9PUkRFUkVEKSkKIAotI2RlZmluZSBYRlNfQlVGX1NUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyB8PSBYRlNfQl9TVEFMRSkKLSNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEZTX0JfU1RBTEUpCi0jZGVmaW5lIFhGU19CVUZfSVNTVEFMRShicCkJKChicCktPmJfZmxhZ3MgJiBYRlNfQl9TVEFMRSkKKyNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEJGX1NUQUxFKQorI2RlZmluZSBYRlNfQlVGX1VOU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfU1RBTEUpCisjZGVmaW5lIFhGU19CVUZfSVNTVEFMRShicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfU1RBTEUpCiAjZGVmaW5lIFhGU19CVUZfU1VQRVJfU1RBTEUoYnApCWRvIHsJCQkJXAogCQkJCQlYRlNfQlVGX1NUQUxFKGJwKTsJXAogCQkJCQl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKTsJXAogCQkJCQlYRlNfQlVGX0RPTkUoYnApOwlcCiAJCQkJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBYRlNfQlVGX01BTkFHRQkJWEJGX0ZTX01BTkFHRUQKICNkZWZpbmUgWEZTX0JVRl9VTk1BTkFHRShicCkJKChicCktPmJfZmxhZ3MgJj0gflhCRl9GU19NQU5BR0VEKQogCiAjZGVmaW5lIFhGU19CVUZfREVMQVlXUklURShicCkJCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9ERUxXUkkpCkBAIC0zODUsMzEgKzM3NiwxMSBAQAogCiAjZGVmaW5lIHhmc19iaW9tb3ZlKGJwLCBvZmYsIGxlbiwgZGF0YSwgcncpIFwKIAkgICAgeGZzX2J1Zl9pb21vdmUoKGJwKSwgKG9mZiksIChsZW4pLCAoZGF0YSksIFwKLQkJKChydykgPT0gWEZTX0JfV1JJVEUpID8gWEJSV19XUklURSA6IFhCUldfUkVBRCkKKwkJKChydykgPT0gWEJGX1dSSVRFKSA/IFhCUldfV1JJVEUgOiBYQlJXX1JFQUQpCiAKICNkZWZpbmUgeGZzX2Jpb3plcm8oYnAsIG9mZiwgbGVuKSBcCiAJICAgIHhmc19idWZfaW9tb3ZlKChicCksIChvZmYpLCAobGVuKSwgTlVMTCwgWEJSV19aRVJPKQogCi0KLXN0YXRpYyBpbmxpbmUgaW50IFhGU19id3JpdGUoeGZzX2J1Zl90ICpicCkKLXsKLQlpbnQJaW93YWl0ID0gKGJwLT5iX2ZsYWdzICYgWEJGX0FTWU5DKSA9PSAwOwotCWludAllcnJvciA9IDA7Ci0KLQlpZiAoIWlvd2FpdCkKLQkJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOwotCi0JeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7Ci0JeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKLQlpZiAoaW93YWl0KSB7Ci0JCWVycm9yID0geGZzX2J1Zl9pb3dhaXQoYnApOwotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0jZGVmaW5lIFhGU19iZHN0cmF0KGJwKSB4ZnNfYnVmX2lvcmVxdWVzdChicCkKLQogI2RlZmluZSB4ZnNfaW93YWl0KGJwKQl4ZnNfYnVmX2lvd2FpdChicCkKIAogI2RlZmluZSB4ZnNfYmFyZWFkKHRhcmdldCwgcmFibGtubywgcmFsZW4pICBcCkBAIC00MjQsNiArMzk1LDcgQEAKIGV4dGVybiB2b2lkIHhmc193YWl0X2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqKTsKIGV4dGVybiBpbnQgeGZzX3NldHNpemVfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgeGZzX2ZsdXNoX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCBpbnQpOworCiAjaWZkZWYgQ09ORklHX0tEQl9NT0RVTEVTCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqeGZzX2dldF9idWZ0YXJnX2xpc3Qodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwppbmRleCA3NTAxYjg1Li5iNjkxOGQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCkBAIC03OSw3ICs3OSw3IEBACiAJCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJcmV0ID0gLWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKIAl9Ci0JaWYgKGZsYWdzICYgWEZTX0JfQVNZTkMpCisJaWYgKGZsYWdzICYgWEJGX0FTWU5DKQogCQlyZXR1cm4gcmV0OwogCXJldDIgPSB4ZnNfd2FpdF9vbl9wYWdlcyhpcCwgZmlyc3QsIGxhc3QpOwogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggYTAzNGNmNi4uNGVhMWVlMSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC00NDcsMTIgKzQ0NywxMiBAQAogaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfZ2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljaGFyCQkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQkqbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKQogewotCWNoYXIJCQkqa2J1ZjsKKwl1bnNpZ25lZCBjaGFyCQkqa2J1ZjsKIAlpbnQJCQllcnJvciA9IEVGQVVMVDsKIAogCWlmICgqbGVuID4gWEFUVFJfU0laRV9NQVgpCkBAIC00NzYsMTIgKzQ3NiwxMiBAQAogaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfc2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljb25zdCBjaGFyCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhcglfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKQogewotCWNoYXIJCQkqa2J1ZjsKKwl1bnNpZ25lZCBjaGFyCQkqa2J1ZjsKIAlpbnQJCQllcnJvciA9IEVGQVVMVDsKIAogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCkBAIC01MDEsNyArNTAxLDcgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3JlbW92ZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCiAJX191aW50MzJfdAkJZmxhZ3MpCiB7CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKQEAgLTUxOSw3ICs1MTksNyBAQAogCXhmc19mc29wX2F0dHJtdWx0aV9oYW5kbGVyZXFfdCBhbV9ocmVxOwogCXN0cnVjdCBkZW50cnkJCSpkZW50cnk7CiAJdW5zaWduZWQgaW50CQlpLCBzaXplOwotCWNoYXIJCQkqYXR0cl9uYW1lOworCXVuc2lnbmVkIGNoYXIJCSphdHRyX25hbWU7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVQRVJNKTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAJZXJyb3IgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBhbV9ocmVxLm9wY291bnQ7IGkrKykgewotCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcihhdHRyX25hbWUsCisJCW9wc1tpXS5hbV9lcnJvciA9IHN0cm5jcHlfZnJvbV91c2VyKChjaGFyICopYXR0cl9uYW1lLAogCQkJCW9wc1tpXS5hbV9hdHRybmFtZSwgTUFYTkFNRUxFTik7CiAJCWlmIChvcHNbaV0uYW1fZXJyb3IgPT0gMCB8fCBvcHNbaV0uYW1fZXJyb3IgPT0gTUFYTkFNRUxFTikKIAkJCWVycm9yID0gLUVSQU5HRTsKQEAgLTE0MzEsNiArMTQzMSw5IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKKwkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVST0ZTKTsKKwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlub3V0LCBhcmcsIHNpemVvZihpbm91dCkpKQogCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKaW5kZXggN2JkN2M2YS4uZDU2MTczYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5oCkBAIC00NSwyMyArNDUsMjMgQEAKIGV4dGVybiBpbnQKIHhmc19hdHRybXVsdGlfYXR0cl9nZXQoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAotCWNoYXIJCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJX191c2VyICp1YnVmLAogCV9fdWludDMyX3QJCSpsZW4sCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gaW50Ci0JeGZzX2F0dHJtdWx0aV9hdHRyX3NldCgKK3hmc19hdHRybXVsdGlfYXR0cl9zZXQoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAotCWNvbnN0IGNoYXIJCV9fdXNlciAqdWJ1ZiwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQlsZW4sCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfcmVtb3ZlKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKIAlfX3VpbnQzMl90CQlmbGFncyk7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwppbmRleCBiZTE1MjdiLi4wYmY2ZDYxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCkBAIC00MTEsNyArNDExLDcgQEAKIAljb21wYXRfeGZzX2Zzb3BfYXR0cm11bHRpX2hhbmRsZXJlcV90CWFtX2hyZXE7CiAJc3RydWN0IGRlbnRyeQkJCQkqZGVudHJ5OwogCXVuc2lnbmVkIGludAkJCQlpLCBzaXplOwotCWNoYXIJCQkJCSphdHRyX25hbWU7CisJdW5zaWduZWQgY2hhcgkJCQkqYXR0cl9uYW1lOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLVhGU19FUlJPUihFUEVSTSk7CkBAIC00NDAsNyArNDQwLDcgQEAKIAogCWVycm9yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYW1faHJlcS5vcGNvdW50OyBpKyspIHsKLQkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoYXR0cl9uYW1lLAorCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcigoY2hhciAqKWF0dHJfbmFtZSwKIAkJCQljb21wYXRfcHRyKG9wc1tpXS5hbV9hdHRybmFtZSksCiAJCQkJTUFYTkFNRUxFTik7CiAJCWlmIChvcHNbaV0uYW1fZXJyb3IgPT0gMCB8fCBvcHNbaV0uYW1fZXJyb3IgPT0gTUFYTkFNRUxFTikKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCAyMjU5NDYwLi5lODU2NmJiIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW5vZGUpOwogCXNpemVfdAkJbGVuZ3RoOwogCXZvaWQJCSp2YWx1ZTsKLQljaGFyCQkqbmFtZTsKKwl1bnNpZ25lZCBjaGFyCSpuYW1lOwogCWludAkJZXJyb3I7CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJm5hbWUsCisJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIChjaGFyICoqKSZuYW1lLAogCQkJCQkgICAgICZ2YWx1ZSwgJmxlbmd0aCk7CiAJaWYgKGVycm9yKSB7CiAJCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggMGQzMjQ1Ny4uZWFjNmY4MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTYzMCwxOCArNjMwLDkgQEAKIAkgKiBieSByb290LiAgVGhpcyBrZWVwcyBwZW9wbGUgZnJvbSBtb2RpZnlpbmcgc2V0dWlkIGFuZAogCSAqIHNldGdpZCBiaW5hcmllcy4KIAkgKi8KLQotCWlmICgoKHhpcC0+aV9kLmRpX21vZGUgJiBTX0lTVUlEKSB8fAotCSAgICAoKHhpcC0+aV9kLmRpX21vZGUgJiAoU19JU0dJRCB8IFNfSVhHUlApKSA9PQotCQkoU19JU0dJRCB8IFNfSVhHUlApKSkgJiYKLQkgICAgICFjYXBhYmxlKENBUF9GU0VUSUQpKSB7Ci0JCWVycm9yID0geGZzX3dyaXRlX2NsZWFyX3NldHVpZCh4aXApOwotCQlpZiAobGlrZWx5KCFlcnJvcikpCi0JCQllcnJvciA9IC1maWxlX3JlbW92ZV9zdWlkKGZpbGUpOwotCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCX0KLQl9CisJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7CiAKIAkvKiBXZSBjYW4gd3JpdGUgYmFjayB0aGlzIHF1ZXVlIGluIHBhZ2UgcmVjbGFpbSAqLwogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwpAQCAtNzg0LDUzICs3NzUsNiBAQAogfQogCiAvKgotICogQWxsIHhmcyBtZXRhZGF0YSBidWZmZXJzIGV4Y2VwdCBsb2cgc3RhdGUgbWFjaGluZSBidWZmZXJzCi0gKiBnZXQgdGhpcyBhdHRhY2hlZCBhcyB0aGVpciBiX2Jkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24uCi0gKiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGEgYnVmZmVyCi0gKiBhZnRlciBwcmVtYXR1cmVseSB1bnBpbm5pbmcgaXQgdG8gZm9yY2libHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0uCi0gKi8KLWludAoteGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKmJwKQotewotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGJwLT5iX21vdW50KSkgewotCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7Ci0JCS8qCi0JCSAqIE1ldGFkYXRhIHdyaXRlIHRoYXQgZGlkbid0IGdldCBsb2dnZWQgYnV0Ci0JCSAqIHdyaXR0ZW4gZGVsYXllZCBhbnl3YXkuIFRoZXNlIGFyZW4ndCBhc3NvY2lhdGVkCi0JCSAqIHdpdGggYSB0cmFuc2FjdGlvbiwgYW5kIGNhbiBiZSBpZ25vcmVkLgotCQkgKi8KLQkJaWYgKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApID09IE5VTEwgJiYKLQkJICAgIChYRlNfQlVGX0lTUkVBRChicCkpID09IDApCi0JCQlyZXR1cm4gKHhmc19iaW9lcnJvcl9yZWxzZShicCkpOwotCQllbHNlCi0JCQlyZXR1cm4gKHhmc19iaW9lcnJvcihicCkpOwotCX0KLQotCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhIGZyb20gZ29pbmcgdG8gZGlzayBpbiBjYXNlCi0gKiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4gIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMKLSAqIHBhdGg7IG9uZSBvZiB0aGUgZXhjZXB0aW9ucyBpcyB0aGUgc3VwZXJibG9jay4KLSAqLwotdm9pZAoteGZzYmRzdHJhdCgKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQotewotCUFTU0VSVChtcCk7Ci0JaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewotCQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7Ci0JeGZzX2Jpb2Vycm9yX3JlbHNlKGJwKTsKLX0KLQotLyoKICAqIElmIHRoZSB1bmRlcmx5aW5nIChkYXRhL2xvZy9ydCkgZGV2aWNlIGlzIHJlYWRvbmx5LCB0aGVyZSBhcmUgc29tZQogICogb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBwcm9jZWVkLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCmluZGV4IGQxZjc3ODkuLjM0MmFlOGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCkBAIC0yMiw5ICsyMiw2IEBACiBzdHJ1Y3QgeGZzX2lub2RlOwogc3RydWN0IHhmc19idWY7CiAKLS8qIGVycm9ycyBmcm9tIHhmc2Jkc3RyYXQoKSBtdXN0IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBidWZmZXIgKi8KLWV4dGVybiB2b2lkIHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKLWV4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CiBleHRlcm4gaW50IHhmc19kZXZfaXNfcmVhZF9vbmx5KHN0cnVjdCB4ZnNfbW91bnQgKiwgY2hhciAqKTsKIAogZXh0ZXJuIGludCB4ZnNfemVyb19lb2Yoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHhmc19mc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDc3NDE0ZGIuLjI1ZWEyNDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtODc3LDEyICs4NzcsMTEgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCA9IGRhdGE7CiAJeGZzX2xzbl90CWxhc3RfcHVzaGVkX2xzbiA9IDA7Ci0JbG9uZwkJdG91dCA9IDA7CisJbG9uZwkJdG91dCA9IDA7IC8qIG1pbGxpc2Vjb25kcyAqLwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJaWYgKHRvdXQpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyh0b3V0KSk7Ci0JCXRvdXQgPSAxMDAwOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodG91dCA/CisJCQkJbXNlY3NfdG9famlmZmllcyh0b3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAogCQkvKiBzd3N1c3AgKi8KIAkJdHJ5X3RvX2ZyZWV6ZSgpOwpAQCAtMTAyMiwxMiArMTAyMSw0NSBAQAogCVhGU19JKGlub2RlKS0+aV91cGRhdGVfY29yZSA9IDE7CiB9CiAKLS8qCi0gKiBBdHRlbXB0IHRvIGZsdXNoIHRoZSBpbm9kZSwgdGhpcyB3aWxsIGFjdHVhbGx5IGZhaWwKLSAqIGlmIHRoZSBpbm9kZSBpcyBwaW5uZWQsIGJ1dCB3ZSBkaXJ0eSB0aGUgaW5vZGUgYWdhaW4KLSAqIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzIHVucGlubmVkIGFmdGVyIGEgbG9nIHdyaXRlLAotICogc2luY2UgdGhpcyBpcyB3aGVuIHRoZSBpbm9kZSBpdHNlbGYgYmVjb21lcyBmbHVzaGFibGUuCi0gKi8KK1NUQVRJQyBpbnQKK3hmc19sb2dfaW5vZGUoCisJc3RydWN0IHhmc19pbm9kZQkqaXApCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKKwlpbnQJCQllcnJvcjsKKworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0ZTWU5DX1RTKTsKKwllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfRlNZTkNfVFNfTE9HX1JFUyhtcCksIDAsIDAsIDApOworCisJaWYgKGVycm9yKSB7CisJCXhmc190cmFuc19jYW5jZWwodHAsIDApOworCQkvKiB3ZSBuZWVkIHRvIHJldHVybiB3aXRoIHRoZSBsb2NrIGhvbGQgc2hhcmVkICovCisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKworCS8qCisJICogTm90ZSAtIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBtaWdodCBoYXZlIHB1c2hlZCBvdXJzZWx2ZXMgb3V0IG9mIHRoZQorCSAqIHdheSBkdXJpbmcgdHJhbnNfcmVzZXJ2ZSB3aGljaCB3b3VsZCBmbHVzaCB0aGUgaW5vZGUuICBCdXQgdGhlcmUncworCSAqIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpbm9kZSBidWZmZXIgaGFzIGFjdHVhbGx5IGdvbmUgb3V0IHlldCAoaXQncworCSAqIGRlbHdyaSkuICBQbHVzIHRoZSBidWZmZXIgY291bGQgYmUgcGlubmVkIGFueXdheSBpZiBpdCdzIHBhcnQgb2YKKwkgKiBhbiBpbm9kZSBpbiBhbm90aGVyIHJlY2VudCB0cmFuc2FjdGlvbi4gIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQKKwkgKiBmaXJlIG9mZiB0aGUgdHJhbnNhY3Rpb24gYW55d2F5LgorCSAqLworCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CisJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCXhmc19pbG9ja19kZW1vdGUoaXAsIFhGU19JTE9DS19FWENMKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogU1RBVElDIGludAogeGZzX2ZzX3dyaXRlX2lub2RlKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLApAQCAtMTAzNSw3ICsxMDY3LDcgQEAKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwotCWludAkJCWVycm9yID0gMDsKKwlpbnQJCQllcnJvciA9IEVBR0FJTjsKIAogCXhmc19pdHJhY2VfZW50cnkoaXApOwogCkBAIC0xMDQ2LDM2ICsxMDc4LDU2IEBACiAJCWVycm9yID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIDAsIC0xKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JfQogCi0JLyoKLQkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKLQkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgotCSAqIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleSBkaWQgbm90IHN1Y2NlZWQuCi0JICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKLQkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KLQkgKi8KLQlpZiAoc3luYykgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGhhcyBoaXQgc3RhYmxlIHN0b3JhZ2UuICBCeSB1c2luZyB0aGUKKwkJICogbG9nIGFuZCB0aGUgZnN5bmMgdHJhbnNhY3Rpb25zIHdlIHJlZHVjZSB0aGUgSU9zIHdlIGhhdmUKKwkJICogdG8gZG8gaGVyZSBmcm9tIHR3byAobG9nIGFuZCBpbm9kZSkgdG8ganVzdCB0aGUgbG9nLgorCQkgKgorCQkgKiBOb3RlOiBXZSBzdGlsbCBuZWVkIHRvIGRvIGEgZGVsd3JpIHdyaXRlIG9mIHRoZSBpbm9kZSBhZnRlcgorCQkgKiB0aGlzIHRvIGZsdXNoIGl0IHRvIHRoZSBiYWNraW5nIGJ1ZmZlciBzbyB0aGF0IGJ1bGtzdGF0CisJCSAqIHdvcmtzIHByb3Blcmx5IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIGlub2RlIGhhcyBiZWVuCisJCSAqIHdyaXR0ZW4uICBCZWNhdXNlIHdlIGhvbGQgdGhlIGlsb2NrIGF0b21pY2FsbHkgb3ZlciB0aGUKKwkJICogdHJhbnNhY3Rpb24gY29tbWl0IGFuZCB0aGUgaW5vZGUgZmx1c2ggd2UgYXJlIGd1YXJhbnRlZWQKKwkJICogdGhhdCB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCB3aGVuIGl0IHJldHVybnMuIElmIHRoZSBmbHVzaAorCQkgKiBsb2NrIGlzIGFscmVhZHkgaGVsZCwgdGhlbiB0aGUgaW5vZGUgaGFzIGFscmVhZHkgYmVlbgorCQkgKiBmbHVzaGVkIG9uY2UgYW5kIHdlIGRvbid0IG5lZWQgdG8gZmx1c2ggaXQgYWdhaW4uICBIZW5jZQorCQkgKiB0aGUgY29kZSB3aWxsIG9ubHkgZmx1c2ggdGhlIGlub2RlIGlmIGl0IGlzbid0IGFscmVhZHkKKwkJICogYmVpbmcgZmx1c2hlZC4KKwkJICovCiAJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCXhmc19pZmxvY2soaXApOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9TWU5DKTsKKwkJaWYgKGlwLT5pX3VwZGF0ZV9jb3JlKSB7CisJCQllcnJvciA9IHhmc19sb2dfaW5vZGUoaXApOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCX0gZWxzZSB7Ci0JCWVycm9yID0gRUFHQUlOOworCQkvKgorCQkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgorCQkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgorCQkgKiBUaGlzIHByZXZlbnRzIHRoZSBmbHVzaCBwYXRoIGZyb20gYmxvY2tpbmcgb24gaW5vZGVzIGluc2lkZQorCQkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KKwkJICovCiAJCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpCiAJCQlnb3RvIG91dDsKLQkJaWYgKHhmc19pcGluY291bnQoaXApIHx8ICF4ZnNfaWZsb2NrX25vd2FpdChpcCkpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwogCX0KIAorCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKgorCSAqIE5vdyB3ZSBoYXZlIHRoZSBmbHVzaCBsb2NrIGFuZCB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCwgd2UgY2FuIGNoZWNrCisJICogaWYgdGhlIGlub2RlIGlzIHJlYWxseSBjbGVhbiBhcyB3ZSBrbm93IHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcKKwkgKiB0cmFuc2FjdGlvbiBjb21wbGV0aW9ucywgaXQgaXMgbm90IHdhaXRpbmcgb24gdGhlIGRlbGF5ZWQgd3JpdGUKKwkgKiBxdWV1ZSBhbmQgdGhlcmUgaXMgbm8gSU8gaW4gcHJvZ3Jlc3MuCisJICovCisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKKwkJeGZzX2lmdW5sb2NrKGlwKTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWVycm9yID0geGZzX2lmbHVzaChpcCwgMCk7CisKICBvdXRfdW5sb2NrOgogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKICBvdXQ6CkBAIC0xMjU3LDYgKzEzMDksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorU1RBVElDIHZvaWQKK3hmc19zYXZlX3Jlc3ZibGtzKHN0cnVjdCB4ZnNfbW91bnQgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrcyA9IDA7CisKKwltcC0+bV9yZXNibGtzX3NhdmUgPSBtcC0+bV9yZXNibGtzOworCXhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworfQorCitTVEFUSUMgdm9pZAoreGZzX3Jlc3RvcmVfcmVzdmJsa3Moc3RydWN0IHhmc19tb3VudCAqbXApCit7CisJX191aW50NjRfdCByZXNibGtzOworCisJaWYgKG1wLT5tX3Jlc2Jsa3Nfc2F2ZSkgeworCQlyZXNibGtzID0gbXAtPm1fcmVzYmxrc19zYXZlOworCQltcC0+bV9yZXNibGtzX3NhdmUgPSAwOworCX0gZWxzZQorCQlyZXNibGtzID0geGZzX2RlZmF1bHRfcmVzYmxrcyhtcCk7CisKKwl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKK30KKwogU1RBVElDIGludAogeGZzX2ZzX3JlbW91bnQoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKQEAgLTEzMzYsMTEgKzE0MTEsMjcgQEAKIAkJCX0KIAkJCW1wLT5tX3VwZGF0ZV9mbGFncyA9IDA7CiAJCX0KKworCQkvKgorCQkgKiBGaWxsIG91dCB0aGUgcmVzZXJ2ZSBwb29sIGlmIGl0IGlzIGVtcHR5LiBVc2UgdGhlIHN0YXNoZWQKKwkJICogdmFsdWUgaWYgaXQgaXMgbm9uLXplcm8sIG90aGVyd2lzZSBnbyB3aXRoIHRoZSBkZWZhdWx0LgorCQkgKi8KKwkJeGZzX3Jlc3RvcmVfcmVzdmJsa3MobXApOwogCX0KIAogCS8qIHJ3IC0+IHJvICovCiAJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSAmJiAoKmZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkvKgorCQkgKiBBZnRlciB3ZSBoYXZlIHN5bmNlZCB0aGUgZGF0YSBidXQgYmVmb3JlIHdlIHN5bmMgdGhlCisJCSAqIG1ldGFkYXRhLCB3ZSBuZWVkIHRvIGZyZWUgdXAgdGhlIHJlc2VydmUgYmxvY2sgcG9vbCBzbyB0aGF0CisJCSAqIHRoZSB1c2VkIGJsb2NrIGNvdW50IGluIHRoZSBzdXBlcmJsb2NrIG9uIGRpc2sgaXMgY29ycmVjdCBhdAorCQkgKiB0aGUgZW5kIG9mIHRoZSByZW1vdW50LiBTdGFzaCB0aGUgY3VycmVudCByZXNlcnZlIHBvb2wgc2l6ZQorCQkgKiBzbyB0aGF0IGlmIHdlIGdldCByZW1vdW50ZWQgcncsIHdlIGNhbiByZXR1cm4gaXQgdG8gdGhlIHNhbWUKKwkJICogc2l6ZS4KKwkJICovCisKIAkJeGZzX3F1aWVzY2VfZGF0YShtcCk7CisJCXhmc19zYXZlX3Jlc3ZibGtzKG1wKTsKIAkJeGZzX3F1aWVzY2VfYXR0cihtcCk7CiAJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9SRE9OTFk7CiAJfQpAQCAtMTM1OSwxMSArMTQ1MCwyMiBAQAogewogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOwogCisJeGZzX3NhdmVfcmVzdmJsa3MobXApOwogCXhmc19xdWllc2NlX2F0dHIobXApOwogCXJldHVybiAteGZzX2ZzX2xvZ19kdW1teShtcCk7CiB9CiAKIFNUQVRJQyBpbnQKK3hmc19mc191bmZyZWV6ZSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJeGZzX3Jlc3RvcmVfcmVzdmJsa3MobXApOworCXJldHVybiAwOworfQorCitTVEFUSUMgaW50CiB4ZnNfZnNfc2hvd19vcHRpb25zKAogCXN0cnVjdCBzZXFfZmlsZQkJKm0sCiAJc3RydWN0IHZmc21vdW50CQkqbW50KQpAQCAtMTU4NSw2ICsxNjg3LDcgQEAKIAkucHV0X3N1cGVyCQk9IHhmc19mc19wdXRfc3VwZXIsCiAJLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfZnMsCiAJLmZyZWV6ZV9mcwkJPSB4ZnNfZnNfZnJlZXplLAorCS51bmZyZWV6ZV9mcwkJPSB4ZnNfZnNfdW5mcmVlemUsCiAJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKIAkuc2hvd19vcHRpb25zCQk9IHhmc19mc19zaG93X29wdGlvbnMsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggMWY1ZTRiYi4uYTlmNmQyMCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtOTAsMTQgKzkwLDEzIEBACiBTVEFUSUMgaW50CiB4ZnNfaW5vZGVfYWdfd2FsaygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQl4ZnNfYWdudW1iZXJfdAkJYWcsCisJc3RydWN0IHhmc19wZXJhZwkqcGFnLAogCWludAkJCSgqZXhlY3V0ZSkoc3RydWN0IHhmc19pbm9kZSAqaXAsCiAJCQkJCSAgIHN0cnVjdCB4ZnNfcGVyYWcgKnBhZywgaW50IGZsYWdzKSwKIAlpbnQJCQlmbGFncywKIAlpbnQJCQl0YWcsCiAJaW50CQkJZXhjbHVzaXZlKQogewotCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CiAJdWludDMyX3QJCWZpcnN0X2luZGV4OwogCWludAkJCWxhc3RfZXJyb3IgPSAwOwogCWludAkJCXNraXBwZWQ7CkBAIC0xNDEsOCArMTQwLDYgQEAKIAkJZGVsYXkoMSk7CiAJCWdvdG8gcmVzdGFydDsKIAl9Ci0KLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOwogCXJldHVybiBsYXN0X2Vycm9yOwogfQogCkBAIC0xNjAsMTAgKzE1NywxNiBAQAogCXhmc19hZ251bWJlcl90CQlhZzsKIAogCWZvciAoYWcgPSAwOyBhZyA8IG1wLT5tX3NiLnNiX2FnY291bnQ7IGFnKyspIHsKLQkJaWYgKCFtcC0+bV9wZXJhZ1thZ10ucGFnX2ljaV9pbml0KQorCQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CisKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOworCQlpZiAoIXBhZy0+cGFnX2ljaV9pbml0KSB7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQljb250aW51ZTsKLQkJZXJyb3IgPSB4ZnNfaW5vZGVfYWdfd2FsayhtcCwgYWcsIGV4ZWN1dGUsIGZsYWdzLCB0YWcsCisJCX0KKwkJZXJyb3IgPSB4ZnNfaW5vZGVfYWdfd2FsayhtcCwgcGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAogCQkJCQkJZXhjbHVzaXZlKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWxhc3RfZXJyb3IgPSBlcnJvcjsKIAkJCWlmIChlcnJvciA9PSBFRlNDT1JSVVBURUQpCkBAIC0yMzEsNyArMjM0LDcgQEAKIAl9CiAKIAllcnJvciA9IHhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkJCTAgOiBYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQkJMCA6IFhCRl9BU1lOQywgRklfTk9ORSk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAogIG91dF93YWl0OgpAQCAtMjY3LDggKzI3MCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQllcnJvciA9IHhmc19pZmx1c2goaXAsIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkJICAgWEZTX0lGTFVTSF9TWU5DIDogWEZTX0lGTFVTSF9ERUxXUkkpOworCWVycm9yID0geGZzX2lmbHVzaChpcCwgZmxhZ3MpOwogCiAgb3V0X3VubG9jazoKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CkBAIC0yOTMsMTAgKzI5NSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAotCXhmc19sb2dfZm9yY2UobXAsIDAsCi0JCSAgICAgIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkgICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyA6Ci0JCSAgICAgICBYRlNfTE9HX0ZPUkNFKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8gWEZTX0xPR19TWU5DIDogMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMiwxMCArMzIxLDYgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IG1wLT5tX3Jvb3RpcDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvcjsKLQlpbnQJCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX0ZPUkNFOwotCi0JaWYgKGZsYWdzICYgU1lOQ19XQUlUKQotCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwogCiAJLyoKIAkgKiBQdXQgYSBkdW1teSB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIHRvIHRlbGwgcmVjb3ZlcnkKQEAgLTM0NywxMSArMzQyLDExIEBACiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCS8qIHRoZSBsb2cgZm9yY2UgZW5zdXJlcyB0aGlzIHRyYW5zYWN0aW9uIGlzIHB1c2hlZCB0byBkaXNrICovCi0JeGZzX2xvZ19mb3JjZShtcCwgMCwgbG9nX2ZsYWdzKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8gWEZTX0xPR19TWU5DIDogMCk7CiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19zeW5jX2ZzZGF0YSgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlpbnQJCQlmbGFncykKQEAgLTM2Nyw3ICszNjIsNyBAQAogCWlmIChmbGFncyAmIFNZTkNfVFJZTE9DSykgewogCQlBU1NFUlQoIShmbGFncyAmIFNZTkNfV0FJVCkpOwogCi0JCWJwID0geGZzX2dldHNiKG1wLCBYRlNfQlVGX1RSWUxPQ0spOworCQlicCA9IHhmc19nZXRzYihtcCwgWEJGX1RSWUxPQ0spOwogCQlpZiAoIWJwKQogCQkJZ290byBvdXQ7CiAKQEAgLTM4Nyw3ICszODIsNyBAQAogCQkgKiBiZWNvbWUgcGlubmVkIGluIGJldHdlZW4gdGhlcmUgYW5kIGhlcmUuCiAJCSAqLwogCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCi0JCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBYRlNfTE9HX0ZPUkNFKTsKKwkJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAogCkBAIC00NDgsOSArNDQzLDYgQEAKIAl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1dBSVQpOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1dBSVQpOwogCi0JLyogZHJvcCBpbm9kZSByZWZlcmVuY2VzIHBpbm5lZCBieSBmaWxlc3RyZWFtcyAqLwotCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKLQogCS8qIHdyaXRlIHN1cGVyYmxvY2sgYW5kIGhvb3ZlciB1cCBzaHV0ZG93biBlcnJvcnMgKi8KIAllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19XQUlUKTsKIApAQCAtNDY3LDE2ICs0NTksMTggQEAKIHsKIAlpbnQJY291bnQgPSAwLCBwaW5jb3VudDsKIAorCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMCk7Ci0JeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DKTsKIAogCS8qCiAJICogVGhpcyBsb29wIG11c3QgcnVuIGF0IGxlYXN0IHR3aWNlLiAgVGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBsb29wCiAJICogd2lsbCBmbHVzaCBtb3N0IG1ldGEgZGF0YSBidXQgdGhhdCB3aWxsIGdlbmVyYXRlIG1vcmUgbWV0YSBkYXRhCiAJICogKHR5cGljYWxseSBkaXJlY3RvcnkgdXBkYXRlcykuICBXaGljaCB0aGVuIG11c3QgYmUgZmx1c2hlZCBhbmQKLQkgKiBsb2dnZWQgYmVmb3JlIHdlIGNhbiB3cml0ZSB0aGUgdW5tb3VudCByZWNvcmQuCisJICogbG9nZ2VkIGJlZm9yZSB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLiBXZSBhbHNvIHNvIHN5bmMKKwkgKiByZWNsYWltIG9mIGlub2RlcyB0byBjYXRjaCBhbnkgdGhhdCB0aGUgYWJvdmUgZGVsd3JpIGZsdXNoIHNraXBwZWQuCiAJICovCiAJZG8geworCQl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFNZTkNfV0FJVCk7CiAJCXhmc19zeW5jX2F0dHIobXAsIFNZTkNfV0FJVCk7CiAJCXBpbmNvdW50ID0geGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CiAJCWlmICghcGluY291bnQpIHsKQEAgLTU3NSw3ICs1NjksNyBAQAogCWlncmFiKGlub2RlKTsKIAl4ZnNfc3luY2RfcXVldWVfd29yayhpcC0+aV9tb3VudCwgaW5vZGUsIHhmc19mbHVzaF9pbm9kZXNfd29yaywgJmNvbXBsZXRpb24pOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRpb24pOwotCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIFhGU19MT0dfU1lOQyk7CiB9CiAKIC8qCkBAIC01OTEsOCArNTg1LDggQEAKIAlpbnQJCWVycm9yOwogCiAJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgewotCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOwotCQl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkMpOworCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKKwkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCAwKTsKIAkJLyogZGdjOiBlcnJvcnMgaWdub3JlZCBoZXJlICovCiAJCWVycm9yID0geGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CiAJCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCBTWU5DX1RSWUxPQ0spOwpAQCAtNjkwLDE2ICs2ODQsMTcgQEAKIHhmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcoCiAJeGZzX2lub2RlX3QJKmlwKQogewotCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwotCXhmc19wZXJhZ190CSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXN0cnVjdCB4ZnNfbW91bnQgKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpcC0+aV9pbm8pKTsKIAlyZWFkX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCV9feGZzX2lub2RlX3NldF9yZWNsYWltX3RhZyhwYWcsIGlwKTsKIAlfX3hmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKTsKIAlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogdm9pZApAQCAtNzEyLDEyICs3MDcsNjQgQEAKIAkJCVhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubyksIFhGU19JQ0lfUkVDTEFJTV9UQUcpOwogfQogCisvKgorICogSW5vZGVzIGluIGRpZmZlcmVudCBzdGF0ZXMgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LCBhbmQgdGhlIHJldHVybgorICogdmFsdWUgb2YgeGZzX2lmbHVzaCBpcyBub3Qgc3VmZmljaWVudCB0byBnZXQgdGhpcyByaWdodC4gVGhlIGZvbGxvd2luZyB0YWJsZQorICogbGlzdHMgdGhlIGlub2RlIHN0YXRlcyBhbmQgdGhlIHJlY2xhaW0gYWN0aW9ucyBuZWNlc3NhcnkgZm9yIG5vbi1ibG9ja2luZworICogcmVjbGFpbToKKyAqCisgKgorICoJaW5vZGUgc3RhdGUJICAgICBpZmx1c2ggcmV0CQlyZXF1aXJlZCBhY3Rpb24KKyAqICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQorICoJYmFkCQkJLQkJcmVjbGFpbQorICoJc2h1dGRvd24JCUVJTwkJdW5waW4gYW5kIHJlY2xhaW0KKyAqCWNsZWFuLCB1bnBpbm5lZAkJMAkJcmVjbGFpbQorICoJc3RhbGUsIHVucGlubmVkCQkwCQlyZWNsYWltCisgKgljbGVhbiwgcGlubmVkKCopCTAJCXJlcXVldWUKKyAqCXN0YWxlLCBwaW5uZWQJCUVBR0FJTgkJcmVxdWV1ZQorICoJZGlydHksIGRlbHdyaSBvawkwCQlyZXF1ZXVlCisgKglkaXJ0eSwgZGVsd3JpIGJsb2NrZWQJRUFHQUlOCQlyZXF1ZXVlCisgKglkaXJ0eSwgc3luYyBmbHVzaAkwCQlyZWNsYWltCisgKgorICogKCopIGRnYzogSSBkb24ndCB0aGluayB0aGUgY2xlYW4sIHBpbm5lZCBzdGF0ZSBpcyBwb3NzaWJsZSBidXQgaXQgZ2V0cworICogaGFuZGxlZCBhbnl3YXkgZ2l2ZW4gdGhlIG9yZGVyIG9mIGNoZWNrcyBpbXBsZW1lbnRlZC4KKyAqCisgKiBBcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSB0YWJsZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB4ZnNfaWZsdXNoKCkgaXMgbm90CisgKiBzdWZmaWNpZW50IHRvIGNvcnJlY3RseSBkZWNpZGUgdGhlIHJlY2xhaW0gYWN0aW9uIGhlcmUuIFRoZSBjaGVja3MgaW4KKyAqIHhmc19pZmx1c2goKSBtaWdodCBsb29rIGxpa2UgZHVwbGljYXRlcywgYnV0IHRoZXkgYXJlIG5vdC4KKyAqCisgKiBBbHNvLCBiZWNhdXNlIHdlIGdldCB0aGUgZmx1c2ggbG9jayBmaXJzdCwgd2Uga25vdyB0aGF0IGFueSBpbm9kZSB0aGF0IGhhcworICogYmVlbiBmbHVzaGVkIGRlbHdyaSBoYXMgaGFkIHRoZSBmbHVzaCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgd2UgY2hlY2sgdGhhdAorICogdGhlIGlub2RlIGlzIGNsZWFuLiBUaGUgY2xlYW4gaW5vZGUgY2hlY2sgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZmx1c2hpbmcKKyAqIHRoZSBpbm9kZSBkZWx3cmkgb3RoZXJ3aXNlIHdlIHdvdWxkIGxvb3AgZm9yZXZlciByZXF1ZXVpbmcgY2xlYW4gaW5vZGVzIGFzCisgKiB3ZSBjYW5ub3QgdGVsbCBhcGFydCBhIHN1Y2Nlc3NmdWwgZGVsd3JpIGZsdXNoIGFuZCBhIGNsZWFuIGlub2RlIGZyb20gdGhlCisgKiByZXR1cm4gdmFsdWUgb2YgeGZzX2lmbHVzaCgpLgorICoKKyAqIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBpbm9kZSBpcyBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUgYnkgYmFja2dyb3VuZAorICogd3JpdGViYWNrLCB0aGUgZmx1c2ggbG9jayBtYXkgYWxyZWFkeSBiZSBoZWxkIGhlcmUgYW5kIHdhaXRpbmcgb24gaXQgY2FuCisgKiByZXN1bHQgaW4gdmVyeSBsb25nIGxhdGVuY2llcy4gSGVuY2UgZm9yIHN5bmMgcmVjbGFpbXMsIHdoZXJlIHdlIHdhaXQgb24gdGhlCisgKiBmbHVzaCBsb2NrLCB0aGUgY2FsbGVyIHNob3VsZCBwdXNoIG91dCBkZWxheWVkIHdyaXRlIGlub2RlcyBmaXJzdCBiZWZvcmUKKyAqIHRyeWluZyB0byByZWNsYWltIHRoZW0gdG8gbWluaW1pc2UgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdhaXRpbmcuIEZvcgorICogYmFja2dyb3VuZCByZWxhaW0sIHdlIGp1c3QgcmVxdWV1ZSB0aGUgaW5vZGUgZm9yIHRoZSBuZXh0IHBhc3MuCisgKgorICogSGVuY2UgdGhlIG9yZGVyIG9mIGFjdGlvbnMgYWZ0ZXIgZ2FpbmluZyB0aGUgbG9ja3Mgc2hvdWxkIGJlOgorICoJYmFkCQk9PiByZWNsYWltCisgKglzaHV0ZG93bgk9PiB1bnBpbiBhbmQgcmVjbGFpbQorICoJcGlubmVkLCBkZWx3cmkJPT4gcmVxdWV1ZQorICoJcGlubmVkLCBzeW5jCT0+IHVucGluCisgKglzdGFsZQkJPT4gcmVjbGFpbQorICoJY2xlYW4JCT0+IHJlY2xhaW0KKyAqCWRpcnR5LCBkZWx3cmkJPT4gZmx1c2ggYW5kIHJlcXVldWUKKyAqCWRpcnR5LCBzeW5jCT0+IGZsdXNoLCB3YWl0IGFuZCByZWNsYWltCisgKi8KIFNUQVRJQyBpbnQKIHhmc19yZWNsYWltX2lub2RlKAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlpbnQJCQlzeW5jX21vZGUpCiB7CisJaW50CWVycm9yID0gMDsKKwogCS8qCiAJICogVGhlIHJhZGl4IHRyZWUgbG9jayBoZXJlIHByb3RlY3RzIGEgdGhyZWFkIGluIHhmc19pZ2V0IGZyb20gcmFjaW5nCiAJICogd2l0aCB1cyBzdGFydGluZyByZWNsYWltIG9uIHRoZSBpbm9kZS4gIE9uY2Ugd2UgaGF2ZSB0aGUKQEAgLTczNSwzMyArNzgyLDcwIEBACiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCi0JLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXMgc3RpbGwgZGlydHksIHRoZW4gZmx1c2ggaXQgb3V0LiAgSWYgdGhlIGlub2RlCi0JICogaXMgbm90IGluIHRoZSBBSUwsIHRoZW4gaXQgd2lsbCBiZSBPSyB0byBmbHVzaCBpdCBkZWx3cmkgYXMKLQkgKiBsb25nIGFzIHhmc19pZmx1c2goKSBkb2VzIG5vdCBrZWVwIGFueSByZWZlcmVuY2VzIHRvIHRoZSBpbm9kZS4KLQkgKiBXZSBsZWF2ZSB0aGF0IGRlY2lzaW9uIHVwIHRvIHhmc19pZmx1c2goKSBzaW5jZSBpdCBoYXMgdGhlCi0JICoga25vd2xlZGdlIG9mIHdoZXRoZXIgaXQncyBPSyB0byBzaW1wbHkgZG8gYSBkZWx3cmkgZmx1c2ggb2YKLQkgKiB0aGUgaW5vZGUgb3Igd2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGlub2RlIGlzCi0JICogcHVsbGVkIGZyb20gdGhlIEFJTC4KLQkgKiBXZSBnZXQgdGhlIGZsdXNoIGxvY2sgcmVnYXJkbGVzcywgdGhvdWdoLCBqdXN0IHRvIG1ha2Ugc3VyZQotCSAqIHdlIGRvbid0IGZyZWUgaXQgd2hpbGUgaXQgaXMgYmVpbmcgZmx1c2hlZC4KLQkgKi8KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfaWZsb2NrKGlwKTsKLQotCS8qCi0JICogSW4gdGhlIGNhc2Ugb2YgYSBmb3JjZWQgc2h1dGRvd24gd2UgcmVseSBvbiB4ZnNfaWZsdXNoKCkgdG8KLQkgKiB3YWl0IGZvciB0aGUgaW5vZGUgdG8gYmUgdW5waW5uZWQgYmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4KLQkgKi8KLQlpZiAoIWlzX2JhZF9pbm9kZShWRlNfSShpcCkpICYmIHhmc19pZmx1c2goaXAsIHN5bmNfbW9kZSkgPT0gMCkgewotCQkvKiBzeW5jaHJvbml6ZSB3aXRoIHhmc19pZmx1c2hfZG9uZSAqLworCWlmICgheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7CisJCWlmICghKHN5bmNfbW9kZSAmIFNZTkNfV0FJVCkpCisJCQlnb3RvIG91dDsKIAkJeGZzX2lmbG9jayhpcCk7Ci0JCXhmc19pZnVubG9jayhpcCk7CiAJfQogCisJaWYgKGlzX2JhZF9pbm9kZShWRlNfSShpcCkpKQorCQlnb3RvIHJlY2xhaW07CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CisJCXhmc19pdW5waW5fd2FpdChpcCk7CisJCWdvdG8gcmVjbGFpbTsKKwl9CisJaWYgKHhmc19pcGluY291bnQoaXApKSB7CisJCWlmICghKHN5bmNfbW9kZSAmIFNZTkNfV0FJVCkpIHsKKwkJCXhmc19pZnVubG9jayhpcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQl4ZnNfaXVucGluX3dhaXQoaXApOworCX0KKwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfSVNUQUxFKSkKKwkJZ290byByZWNsYWltOworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQorCQlnb3RvIHJlY2xhaW07CisKKwkvKiBOb3cgd2UgaGF2ZSBhbiBpbm9kZSB0aGF0IG5lZWRzIGZsdXNoaW5nICovCisJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBzeW5jX21vZGUpOworCWlmIChzeW5jX21vZGUgJiBTWU5DX1dBSVQpIHsKKwkJeGZzX2lmbG9jayhpcCk7CisJCWdvdG8gcmVjbGFpbTsKKwl9CisKKwkvKgorCSAqIFdoZW4gd2UgaGF2ZSB0byBmbHVzaCBhbiBpbm9kZSBidXQgZG9uJ3QgaGF2ZSBTWU5DX1dBSVQgc2V0LCB3ZQorCSAqIGZsdXNoIHRoZSBpbm9kZSBvdXQgdXNpbmcgYSBkZWx3cmkgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUgbmV4dAorCSAqIGNhbGwgaW50byByZWNsYWltIHRvIGZpbmQgaXQgaW4gYSBjbGVhbiBzdGF0ZSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yCisJICogaXQgbm93LiBXZSBhbHNvIGRvbid0IHJldHVybiBlcnJvcnMgaGVyZSAtIGlmIHRoZSBlcnJvciBpcyB0cmFuc2llbnQKKwkgKiB0aGVuIHRoZSBuZXh0IHJlY2xhaW0gcGFzcyB3aWxsIGZsdXNoIHRoZSBpbm9kZSwgYW5kIGlmIHRoZSBlcnJvcgorCSAqIGlzIHBlcm1hbmVudCB0aGVuIHRoZSBuZXh0IHN5bmMgcmVjbGFpbSB3aWxsIHJlbGNhaW0gdGhlIGlub2RlIGFuZAorCSAqIHBhc3Mgb24gdGhlIGVycm9yLgorCSAqLworCWlmIChlcnJvciAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKKwkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCisJCQkiaW5vZGUgMHglbGx4IGJhY2tncm91bmQgcmVjbGFpbSBmbHVzaCBmYWlsZWQgd2l0aCAlZCIsCisJCQkobG9uZyBsb25nKWlwLT5pX2lubywgZXJyb3IpOworCX0KK291dDoKKwl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVJFQ0xBSU0pOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJLyoKKwkgKiBXZSBjb3VsZCByZXR1cm4gRUFHQUlOIGhlcmUgdG8gbWFrZSByZWNsYWltIHJlc2NhbiB0aGUgaW5vZGUgdHJlZSBpbgorCSAqIGEgc2hvcnQgd2hpbGUuIEhvd2V2ZXIsIHRoaXMganVzdCBidXJucyBDUFUgdGltZSBzY2FubmluZyB0aGUgdHJlZQorCSAqIHdhaXRpbmcgZm9yIElPIHRvIGNvbXBsZXRlIGFuZCB4ZnNzeW5jZCBuZXZlciBnb2VzIGJhY2sgdG8gdGhlIGlkbGUKKwkgKiBzdGF0ZS4gSW5zdGVhZCwgcmV0dXJuIDAgdG8gbGV0IHRoZSBuZXh0IHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHJlY2xhaW0KKwkgKiBhdHRlbXB0IHRvIHJlY2xhaW0gdGhlIGlub2RlIGFnYWluLgorCSAqLworCXJldHVybiAwOworCityZWNsYWltOgorCXhmc19pZnVubG9jayhpcCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl4ZnNfaXJlY2xhaW0oaXApOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKKwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCBlYTkzMmI0Li5kNDgwYzM0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0zNyw3ICszNyw2IEBACiAKIGludCB4ZnNfc3luY19hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwogaW50IHhmc19zeW5jX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXAsIGludCBmbGFncyk7Ci1pbnQgeGZzX3N5bmNfZnNkYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwogCiBpbnQgeGZzX3F1aWVzY2VfZGF0YShzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19xdWllc2NlX2F0dHIoc3RydWN0IHhmc19tb3VudCAqbXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKaW5kZXggYzIyYTYwOC4uYTQ1NzRkYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCkBAIC03OCw2ICs3OCwzMyBAQAogCSkKICkKIAorI2RlZmluZSBERUZJTkVfUEVSQUdfUkVGX0VWRU5UKG5hbWUpIFwKK1RSQUNFX0VWRU5UKG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubywgaW50IHJlZmNvdW50LCBcCisJCSB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKG1wLCBhZ25vLCByZWZjb3VudCwgY2FsbGVyX2lwKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2FnbnVtYmVyX3QsIGFnbm8pIFwKKwkJX19maWVsZChpbnQsIHJlZmNvdW50KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY2FsbGVyX2lwKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IG1wLT5tX3N1cGVyLT5zX2RldjsgXAorCQlfX2VudHJ5LT5hZ25vID0gYWdubzsgXAorCQlfX2VudHJ5LT5yZWZjb3VudCA9IHJlZmNvdW50OyBcCisJCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBhZ25vICV1IHJlZmNvdW50ICVkIGNhbGxlciAlcGYiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmFnbm8sIFwKKwkJICBfX2VudHJ5LT5yZWZjb3VudCwgXAorCQkgIChjaGFyICopX19lbnRyeS0+Y2FsbGVyX2lwKSBcCispOworCitERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19nZXQpCitERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19wdXQpCisKICNkZWZpbmUgREVGSU5FX0FUVFJfTElTVF9FVkVOVChuYW1lKSBcCiBERUZJTkVfRVZFTlQoeGZzX2F0dHJfbGlzdF9jbGFzcywgbmFtZSwgXAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmN0eCksIFwKQEAgLTQ1Niw2ICs0ODMsNyBAQAogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV91bmxvY2tfc3RhbGUpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9jb21taXR0ZWQpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9wdXNoKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaGJ1Zik7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldF9idWYpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmX3JlY3VyKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0c2IpOwpAQCAtMTQxNCw2ICsxNDQyLDU5IEBACiAJCSAgX19lbnRyeS0+Y291bnQpCiApOwogCisjZGVmaW5lIFhGU19TV0FQRVhUX0lOT0RFUyBcCisJeyAwLAkidGFyZ2V0IiB9LCBcCisJeyAxLAkidGVtcCIgfQorCisjZGVmaW5lIFhGU19JTk9ERV9GT1JNQVRfU1RSIFwKKwl7IDAsCSJpbnZhbGlkIiB9LCBcCisJeyAxLAkibG9jYWwiIH0sIFwKKwl7IDIsCSJleHRlbnQiIH0sIFwKKwl7IDMsCSJidHJlZSIgfQorCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19zd2FwX2V4dGVudF9jbGFzcywKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IHdoaWNoKSwKKwlUUF9BUkdTKGlwLCB3aGljaCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKGludCwgd2hpY2gpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoaW50LCBmb3JtYXQpCisJCV9fZmllbGQoaW50LCBuZXgpCisJCV9fZmllbGQoaW50LCBtYXhfbmV4KQorCQlfX2ZpZWxkKGludCwgYnJvb3Rfc2l6ZSkKKwkJX19maWVsZChpbnQsIGZvcmtfb2ZmKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPndoaWNoID0gd2hpY2g7CisJCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsKKwkJX19lbnRyeS0+Zm9ybWF0ID0gaXAtPmlfZC5kaV9mb3JtYXQ7CisJCV9fZW50cnktPm5leCA9IGlwLT5pX2QuZGlfbmV4dGVudHM7CisJCV9fZW50cnktPm1heF9uZXggPSBpcC0+aV9kZi5pZl9leHRfbWF4OworCQlfX2VudHJ5LT5icm9vdF9zaXplID0gaXAtPmlfZGYuaWZfYnJvb3RfYnl0ZXM7CisJCV9fZW50cnktPmZvcmtfb2ZmID0gWEZTX0lGT1JLX0JPRkYoaXApOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCAoJXMpLCAlcyBmb3JtYXQsIG51bV9leHRlbnRzICVkLCAiCisJCSAgIk1heCBpbi1mb3JrIGV4dGVudHMgJWQsIGJyb290IHNpemUgJWQsIGZvcmsgb2Zmc2V0ICVkIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPndoaWNoLCBYRlNfU1dBUEVYVF9JTk9ERVMpLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+Zm9ybWF0LCBYRlNfSU5PREVfRk9STUFUX1NUUiksCisJCSAgX19lbnRyeS0+bmV4LAorCQkgIF9fZW50cnktPm1heF9uZXgsCisJCSAgX19lbnRyeS0+YnJvb3Rfc2l6ZSwKKwkJICBfX2VudHJ5LT5mb3JrX29mZikKKykKKworI2RlZmluZSBERUZJTkVfU1dBUEVYVF9FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX3N3YXBfZXh0ZW50X2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCB3aGljaCksIFwKKwlUUF9BUkdTKGlwLCB3aGljaCkpCisKK0RFRklORV9TV0FQRVhUX0VWRU5UKHhmc19zd2FwX2V4dGVudF9iZWZvcmUpOworREVGSU5FX1NXQVBFWFRfRVZFTlQoeGZzX3N3YXBfZXh0ZW50X2FmdGVyKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9YRlNfSCAqLwogCiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYwppbmRleCAwYjE4Nzg4Li5mYTAxYjlkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJdmFsdWUgPSBOVUxMOwogCX0KIAotCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgbmFtZSwgdmFsdWUsICZhc2l6ZSwgeGZsYWdzKTsKKwllcnJvciA9IC14ZnNfYXR0cl9nZXQoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwgdmFsdWUsICZhc2l6ZSwgeGZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlyZXR1cm4gYXNpemU7CkBAIC02Nyw4ICs2Nyw5IEBACiAJCXhmbGFncyB8PSBBVFRSX1JFUExBQ0U7CiAKIAlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLXhmc19hdHRyX3JlbW92ZShpcCwgbmFtZSwgeGZsYWdzKTsKLQlyZXR1cm4gLXhmc19hdHRyX3NldChpcCwgbmFtZSwgKHZvaWQgKil2YWx1ZSwgc2l6ZSwgeGZsYWdzKTsKKwkJcmV0dXJuIC14ZnNfYXR0cl9yZW1vdmUoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwgeGZsYWdzKTsKKwlyZXR1cm4gLXhmc19hdHRyX3NldChpcCwgKHVuc2lnbmVkIGNoYXIgKiluYW1lLAorCQkJCSh2b2lkICopdmFsdWUsIHNpemUsIHhmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciB4ZnNfeGF0dHJfdXNlcl9oYW5kbGVyID0gewpAQCAtMTI0LDggKzEyNSwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci14ZnNfeGF0dHJfcHV0X2xpc3RlbnQoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwgaW50IGZsYWdzLAotCQljaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3hmc194YXR0cl9wdXRfbGlzdGVudCgKKwlzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAorCWludAkJZmxhZ3MsCisJdW5zaWduZWQgY2hhcgkqbmFtZSwKKwlpbnQJCW5hbWVsZW4sCisJaW50CQl2YWx1ZWxlbiwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcHJlZml4X2xlbiA9IHhmc194YXR0cl9wcmVmaXhfbGVuKGZsYWdzKTsKIAljaGFyICpvZmZzZXQ7CkBAIC0xNDgsNyArMTU0LDcgQEAKIAlvZmZzZXQgPSAoY2hhciAqKWNvbnRleHQtPmFsaXN0ICsgY29udGV4dC0+Y291bnQ7CiAJc3RybmNweShvZmZzZXQsIHhmc194YXR0cl9wcmVmaXgoZmxhZ3MpLCBwcmVmaXhfbGVuKTsKIAlvZmZzZXQgKz0gcHJlZml4X2xlbjsKLQlzdHJuY3B5KG9mZnNldCwgbmFtZSwgbmFtZWxlbik7CQkJLyogcmVhbCBuYW1lICovCisJc3RybmNweShvZmZzZXQsIChjaGFyICopbmFtZSwgbmFtZWxlbik7CQkJLyogcmVhbCBuYW1lICovCiAJb2Zmc2V0ICs9IG5hbWVsZW47CiAJKm9mZnNldCA9ICdcMCc7CiAJY29udGV4dC0+Y291bnQgKz0gcHJlZml4X2xlbiArIG5hbWVsZW4gKyAxOwpAQCAtMTU2LDggKzE2MiwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci14ZnNfeGF0dHJfcHV0X2xpc3RlbnRfc2l6ZXMoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwgaW50IGZsYWdzLAotCQljaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3hmc194YXR0cl9wdXRfbGlzdGVudF9zaXplcygKKwlzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAorCWludAkJZmxhZ3MsCisJdW5zaWduZWQgY2hhcgkqbmFtZSwKKwlpbnQJCW5hbWVsZW4sCisJaW50CQl2YWx1ZWxlbiwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSkKIHsKIAljb250ZXh0LT5jb3VudCArPSB4ZnNfeGF0dHJfcHJlZml4X2xlbihmbGFncykgKyBuYW1lbGVuICsgMTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCBkN2M3ZWVhLi41Zjc5ZGQ3OCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKIAkgKiBibG9jaywgbmFkYS4KIAkgKi8KIAlpZiAoIVhGU19EUV9JU19ESVJUWShkcXApIHx8Ci0JICAgICghKGZsYWdzICYgWEZTX1FNT1BUX1NZTkMpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKKwkgICAgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjQ4LDIzICsxMjQ4LDIwIEBACiAJICovCiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CiAJCXRyYWNlX3hmc19kcWZsdXNoX2ZvcmNlKGRxcCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAotCWlmIChmbGFncyAmIFhGU19RTU9QVF9ERUxXUkkpIHsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1FNT1BUX0FTWU5DKSB7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgeworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQorCWVsc2UKKwkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAogCXRyYWNlX3hmc19kcWZsdXNoX2RvbmUoZHFwKTsKIAogCS8qCiAJICogZHFwIGlzIHN0aWxsIGxvY2tlZCwgYnV0IGNhbGxlciBpcyBmcmVlIHRvIHVubG9jayBpdCBub3cuCiAJICovCi0JcmV0dXJuIChlcnJvcik7CisJcmV0dXJuIGVycm9yOwogCiB9CiAKQEAgLTE0NDUsNyArMTQ0Miw3IEBACiAJCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgZ2V0dGluZyBkaXNrIGVycm9ycyBoZXJlLiBXZSBuZWVkCiAJCSAqIHRvIHB1cmdlIHRoaXMgZHF1b3QgYW55d2F5LCBzbyB3ZSBnbyBhaGVhZCByZWdhcmRsZXNzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9TWU5DKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFNZTkNfV0FJVCk7CiAJCWlmIChlcnJvcikKIAkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkJCSJ4ZnNfcW1fZHFwdXJnZTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKQEAgLTE1MjksMjUgKzE1MjYsMTcgQEAKIAkgKiB0aGUgZmx1c2ggbG9jayB3aGVuIHRoZSBJL08gY29tcGxldGVzLgogCSAqLwogCWJwID0geGZzX2luY29yZShkcXAtPnFfbW91bnQtPm1fZGRldl90YXJncCwgZHFwLT5xX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4oZHFwLT5xX21vdW50KSwKLQkJICAgIFhGU19JTkNPUkVfVFJZTE9DSyk7Ci0JaWYgKGJwICE9IE5VTEwpIHsKLQkJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQkJaW50CWVycm9yOwotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsCi0JCQkJCSAgICAgICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQllcnJvciA9IHhmc19iYXdyaXRlKGRxcC0+cV9tb3VudCwgYnApOwotCQkJaWYgKGVycm9yKQotCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKLQkJCQkJInhmc19xbV9kcWZsb2NrX3B1c2hidWZfd2FpdDogIgotCQkJCQkicHVzaGJ1ZiBlcnJvciAlZCBvbiBkcXAgJXAsIGJwICVwIiwKLQkJCQkJZXJyb3IsIGRxcCwgYnApOwotCQl9IGVsc2UgewotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKGRxcC0+cV9tb3VudCksIFhCRl9UUllMT0NLKTsKKwlpZiAoIWJwKQorCQlnb3RvIG91dF9sb2NrOworCisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgeworCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJCQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgMCk7CisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKIAl9CisJeGZzX2J1Zl9yZWxzZShicCk7CitvdXRfbG9jazoKIAl4ZnNfZHFmbG9jayhkcXApOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwppbmRleCBkMGQ0YTlhLi40ZTRlZTlhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwpAQCAtNzQsMTEgKzc0LDExIEBACiAKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZHFfbG9nZm9ybWF0X3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ3ZlYywgWExPR19SRUdfVFlQRV9RRk9STUFUKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUUZPUk1BVDsKIAlsb2d2ZWMrKzsKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2RxdW90LT5xX2NvcmU7CiAJbG9ndmVjLT5pX2xlbiAgPSBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX0RRVU9UKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRFFVT1Q7CiAKIAlBU1NFUlQoMiA9PSBsb2dpdGVtLT5xbGlfaXRlbS5saV9kZXNjLT5saWRfc2l6ZSk7CiAJbG9naXRlbS0+cWxpX2Zvcm1hdC5xbGZfc2l6ZSA9IDI7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiBsb2NrIHdpdGhvdXQgc2xlZXBpbmcsIHRoZW4gdGhlcmUgbXVzdCBub3QgaGF2ZSBiZWVuCiAJICogYW55b25lIGluIHRoZSBwcm9jZXNzIG9mIGZsdXNoaW5nIHRoZSBkcXVvdC4KIAkgKi8KLQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX0RFTFdSSSk7CisJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCWlmIChlcnJvcikKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2g6IHB1c2ggZXJyb3IgJWQgb24gZHFwICVwIiwKQEAgLTE5MCw3ICsxOTAsNyBAQAogCS8qCiAJICogR2l2ZSB0aGUgbG9nIGEgcHVzaCBzbyB3ZSBkb24ndCB3YWl0IGhlcmUgdG9vIGxvbmcuCiAJICovCi0JeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsIDApOwogCXdhaXRfZXZlbnQoZHFwLT5xX3BpbndhaXQsIChhdG9taWNfcmVhZCgmZHFwLT5xX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKQEAgLTIxMiw2OCArMjEyLDMxIEBACiAJeGZzX2RxdW90X3QJKmRxcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAogCS8qCi0JICogVGhlIHFsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKHFpcC0+cWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQocWlwLT5xbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgZmx1c2hsb2NrIGlzbid0IGxvY2tlZCBhbnltb3JlLCBjaGFuY2VzIGFyZSB0aGF0IHRoZQogCSAqIGlub2RlIGZsdXNoIGNvbXBsZXRlZCBhbmQgdGhlIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4KIAkgKiBTbywganVzdCBnZXQgb3V0LgogCSAqLwogCWlmIChjb21wbGV0aW9uX2RvbmUoJmRxcC0+cV9mbHVzaCkgIHx8CiAJICAgICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlyZXR1cm47CiAJfQogCW1wID0gZHFwLT5xX21vdW50OwogCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLAotCQkgICAgWEZTX0lOQ09SRV9UUllMT0NLKTsKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQlkb3B1c2ggPSAoKHFpcC0+cWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAmJgotCQkJCSAgIWNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSk7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotI2lmZGVmIFhGU1JBQ0VERUJVRwotCQkJCWRlbGF5X2Zvcl9pbnRyKCk7Ci0JCQkJZGVsYXkoMzAwKTsKLSNlbmRpZgotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCSJ4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmOiBwdXNoYnVmIGVycm9yICVkIG9uIHFpcCAlcCwgYnAgJXAiLAotCQkJCQkJCWVycm9yLCBxaXAsIGJwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMDsKKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKG1wKSwgWEJGX1RSWUxPQ0spOwogCXhmc19kcXVubG9jayhkcXApOworCWlmICghYnApCisJCXJldHVybjsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKKwlyZXR1cm47CisKIH0KIAogLyoKQEAgLTI5MSw1MCArMjU0LDI0IEBACiAJeGZzX2RxX2xvZ2l0ZW1fdAkqcWlwKQogewogCXhmc19kcXVvdF90CQkqZHFwOwotCXVpbnQJCQlyZXR2YWw7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlpZiAoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKQotCQlyZXR1cm4gKFhGU19JVEVNX1BJTk5FRCk7CisJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiAKIAlpZiAoISB4ZnNfcW1fZHFsb2NrX25vd2FpdChkcXApKQotCQlyZXR1cm4gKFhGU19JVEVNX0xPQ0tFRCk7CisJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7CiAKLQlyZXR2YWwgPSBYRlNfSVRFTV9TVUNDRVNTOwogCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpIHsKIAkJLyoKLQkJICogVGhlIGRxdW90IGlzIGFscmVhZHkgYmVpbmcgZmx1c2hlZC4JSXQgbWF5IGhhdmUgYmVlbgotCQkgKiBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUsIGhvd2V2ZXIsIGFuZCB3ZSBkb24ndCB3YW50IHRvCi0JCSAqIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGF0IHRvIGNvbXBsZXRlLiAgU28sIHdlIHdhbnQgdG8gY2hlY2sKLQkJICogdG8gc2VlIGlmIHdlIGNhbiBsb2NrIHRoZSBkcXVvdCdzIGJ1ZmZlciB3aXRob3V0IHNsZWVwaW5nLgotCQkgKiBJZiB3ZSBjYW4gYW5kIGl0IGlzIG1hcmtlZCBmb3IgZGVsYXllZCB3cml0ZSwgdGhlbiB3ZQotCQkgKiBob2xkIGl0IGFuZCBzZW5kIGl0IG91dCBmcm9tIHRoZSBwdXNoIHJvdXRpbmUuICBXZSBkb24ndAotCQkgKiB3YW50IHRvIGRvIHRoYXQgbm93IHNpbmNlIHdlIG1pZ2h0IHNsZWVwIGluIHRoZSBkZXZpY2UKLQkJICogc3RyYXRlZ3kgcm91dGluZS4gIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBncmFiIHRoZSBidWZmZXIgbG9jawotCQkgKiBoZXJlIGJlY2F1c2Ugd2UnZCBsaWtlIG5vdCB0byBjYWxsIGludG8gdGhlIGJ1ZmZlciBjYWNoZQotCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBBSUwgbG9jay4KLQkJICogTWFrZSBzdXJlIHRvIG9ubHkgcmV0dXJuIFBVU0hCVUYgaWYgd2Ugc2V0IHB1c2hidWZfZmxhZwotCQkgKiBvdXJzZWx2ZXMuICBJZiBzb21lb25lIGVsc2UgaXMgZG9pbmcgaXQgdGhlbiB3ZSBkb24ndAotCQkgKiB3YW50IHRvIGdvIHRvIHRoZSBwdXNoIHJvdXRpbmUgYW5kIGR1cGxpY2F0ZSB0aGVpciBlZmZvcnRzLgorCQkgKiBkcXVvdCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8gdGhlIGJhY2tpbmcgYnVmZmVyLAorCQkgKiBsZWF2ZSBpdCBsb2NrZWQsIHB1c2hidWYgcm91dGluZSB3aWxsIHVubG9jayBpdC4KIAkJICovCi0JCWlmIChxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPT0gMCkgewotCQkJcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMTsKLQkJCUFTU0VSVChxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vID09IGRxcC0+cV9ibGtubyk7Ci0jaWZkZWYgREVCVUcKLQkJCXFpcC0+cWxpX3B1c2hfb3duZXIgPSBjdXJyZW50X3BpZCgpOwotI2VuZGlmCi0JCQkvKgotCQkJICogVGhlIGRxdW90IGlzIGxlZnQgbG9ja2VkLgotCQkJICovCi0JCQlyZXR2YWwgPSBYRlNfSVRFTV9QVVNIQlVGOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCQl4ZnNfZHF1bmxvY2tfbm9ub3RpZnkoZHFwKTsKLQkJfQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAlBU1NFUlQocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpOwotCXJldHVybiAocmV0dmFsKTsKKwlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIAogCkBAIC00NjcsNyArNDA0LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKHFmLT5xcWxfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfcW9mZl9sb2dpdGVtX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfUVVPVEFPRkYpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUVVPVEFPRkY7CiAJcWYtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5oIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKaW5kZXggNWE2MzI1My4uNWFjYWUyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKQEAgLTI3LDEwICsyNyw2IEBACiAJeGZzX2xvZ19pdGVtX3QJCSBxbGlfaXRlbTsJICAgLyogY29tbW9uIHBvcnRpb24gKi8KIAlzdHJ1Y3QgeGZzX2RxdW90CSpxbGlfZHF1b3Q7CSAgIC8qIGRxdW90IHB0ciAqLwogCXhmc19sc25fdAkJIHFsaV9mbHVzaF9sc247CSAgIC8qIGxzbiBhdCBsYXN0IGZsdXNoICovCi0JdW5zaWduZWQgc2hvcnQJCSBxbGlfcHVzaGJ1Zl9mbGFnOyAvKiAxIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdAkJIHFsaV9wdXNoX293bmVyOwotI2VuZGlmCiAJeGZzX2RxX2xvZ2Zvcm1hdF90CSBxbGlfZm9ybWF0OwkgICAvKiBsb2dnZWQgc3RydWN0dXJlICovCiB9IHhmc19kcV9sb2dpdGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA5ZTYyN2E4Li40MTdlNjFlIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xMTgsOSArMTE4LDE0IEBACiAJICovCiAJdWRxaGFzaCA9IGttZW1femFsbG9jX2dyZWVkeSgmaHNpemUsCiAJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfTE9XICogc2l6ZW9mKHhmc19kcWhhc2hfdCksCi0JCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpLAotCQkJCSAgICAgS01fU0xFRVAgfCBLTV9NQVlGQUlMIHwgS01fTEFSR0UpOwotCWdkcWhhc2ggPSBrbWVtX3phbGxvYyhoc2l6ZSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpKTsKKwlpZiAoIXVkcWhhc2gpCisJCWdvdG8gb3V0OworCisJZ2RxaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKGhzaXplKTsKKwlpZiAoIWdkcWhhc2gpCisJCWdvdG8gb3V0X2ZyZWVfdWRxaGFzaDsKKwogCWhzaXplIC89IHNpemVvZih4ZnNfZHFoYXNoX3QpOwogCW5kcXVvdCA9IGhzaXplIDw8IDg7CiAKQEAgLTE3MCw2ICsxNzUsMTEgQEAKIAltdXRleF9pbml0KCZxY2hlY2tfbG9jayk7CiAjZW5kaWYKIAlyZXR1cm4geHFtOworCisgb3V0X2ZyZWVfdWRxaGFzaDoKKwlrbWVtX2ZyZWVfbGFyZ2UodWRxaGFzaCk7Cisgb3V0OgorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMTg5LDggKzE5OSw4IEBACiAJCXhmc19xbV9saXN0X2Rlc3Ryb3koJih4cW0tPnFtX3Vzcl9kcWh0YWJsZVtpXSkpOwogCQl4ZnNfcW1fbGlzdF9kZXN0cm95KCYoeHFtLT5xbV9ncnBfZHFodGFibGVbaV0pKTsKIAl9Ci0Ja21lbV9mcmVlKHhxbS0+cW1fdXNyX2RxaHRhYmxlKTsKLQlrbWVtX2ZyZWUoeHFtLT5xbV9ncnBfZHFodGFibGUpOworCWttZW1fZnJlZV9sYXJnZSh4cW0tPnFtX3Vzcl9kcWh0YWJsZSk7CisJa21lbV9mcmVlX2xhcmdlKHhxbS0+cW1fZ3JwX2RxaHRhYmxlKTsKIAl4cW0tPnFtX3Vzcl9kcWh0YWJsZSA9IE5VTEw7CiAJeHFtLT5xbV9ncnBfZHFodGFibGUgPSBOVUxMOwogCXhxbS0+cW1fZHFoYXNobWFzayA9IDA7CkBAIC0yMTksOCArMjI5LDEyIEBACiAJICovCiAJbXV0ZXhfbG9jaygmeGZzX0dxbV9sb2NrKTsKIAotCWlmICh4ZnNfR3FtID09IE5VTEwpCisJaWYgKCF4ZnNfR3FtKSB7CiAJCXhmc19HcW0gPSB4ZnNfR3FtX2luaXQoKTsKKwkJaWYgKCF4ZnNfR3FtKQorCQkJcmV0dXJuIEVOT01FTTsKKwl9CisKIAkvKgogCSAqIFdlIGNhbiBrZWVwIGEgbGlzdCBvZiBhbGwgZmlsZXN5c3RlbXMgd2l0aCBxdW90YXMgbW91bnRlZCBmb3IKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCkBAIC00MzYsNyArNDUwLDcgQEAKIFNUQVRJQyBpbnQKIHhmc19xbV9kcWZsdXNoX2FsbCgKIAl4ZnNfbW91bnRfdAkqbXAsCi0JaW50CQlmbGFncykKKwlpbnQJCXN5bmNfbW9kZSkKIHsKIAlpbnQJCXJlY2w7CiAJeGZzX2RxdW90X3QJKmRxcDsKQEAgLTQ3Miw3ICs0ODYsNyBAQAogCQkgKiBhY3Jvc3MgYSBkaXNrIHdyaXRlLgogCQkgKi8KIAkJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmxhZ3MpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgc3luY19tb2RlKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTkxMiwxMyArOTI2LDExIEBACiB7CiAJaW50CQlyZWNsLCByZXN0YXJ0czsKIAl4ZnNfZHF1b3RfdAkqZHFwOwotCXVpbnQJCWZsdXNoX2ZsYWdzOwogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSB8fCAhWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9mbGFncyA9IChmbGFncyAmIFNZTkNfV0FJVCkgPyBYRlNfUU1PUFRfU1lOQyA6IFhGU19RTU9QVF9ERUxXUkk7CiAJcmVzdGFydHMgPSAwOwogCiAgIGFnYWluOgpAQCAtOTc4LDcgKzk5MCw3IEBACiAJCSAqIGFjcm9zcyBhIGRpc2sgd3JpdGUKIAkJICovCiAJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsdXNoX2ZsYWdzKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsYWdzKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvciAmJiBYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiAwOwkvKiBOZWVkIHRvIHByZXZlbnQgdW1vdW50IGZhaWx1cmUgKi8KQEAgLTE3ODIsNyArMTc5NCw3IEBACiAJICogc3VjY2Vzc2Z1bGx5LgogCSAqLwogCWlmICghZXJyb3IpCi0JCWVycm9yID0geGZzX3FtX2RxZmx1c2hfYWxsKG1wLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIDApOwogCiAJLyoKIAkgKiBXZSBjYW4gZ2V0IHRoaXMgZXJyb3IgaWYgd2UgY291bGRuJ3QgZG8gYSBkcXVvdCBhbGxvY2F0aW9uIGluc2lkZQpAQCAtMjAwNCw3ICsyMDE2LDcgQEAKIAkJCSAqIFdlIGZsdXNoIGl0IGRlbGF5ZWQgd3JpdGUsIHNvIGRvbid0IGJvdGhlcgogCQkJICogcmVsZWFzaW5nIHRoZSBtcGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFmbHVzaF9hbGw6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CkBAIC0yMTg3LDcgKzIxOTksNyBAQAogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIGZyZWVsaXN0IGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYTUzNDY2My4uOTdiNDEwYyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC01OSw3ICs1OSw3IEBACiAJCWJlNjRfdG9fY3B1KGRwLT5kX2Jsa19oYXJkbGltaXQpOwogCWlmIChsaW1pdCAmJiBzdGF0cC0+Zl9ibG9ja3MgPiBsaW1pdCkgewogCQlzdGF0cC0+Zl9ibG9ja3MgPSBsaW1pdDsKLQkJc3RhdHAtPmZfYmZyZWUgPQorCQlzdGF0cC0+Zl9iZnJlZSA9IHN0YXRwLT5mX2JhdmFpbCA9CiAJCQkoc3RhdHAtPmZfYmxvY2tzID4gYmU2NF90b19jcHUoZHAtPmRfYmNvdW50KSkgPwogCQkJIChzdGF0cC0+Zl9ibG9ja3MgLSBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA6IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDg3M2UwN2UuLjVkMGVlOGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTExOTIsOSArMTE5Miw5IEBACiAJaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFU1JDSCk7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKIAogCW11dGV4X2xvY2soJnFjaGVja19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5N2FjOTY0Li5jM2FiNzVjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC01ODksMTIgKzU4OSwxOCBAQAogCX0KIH0KIAotU1RBVElDIGludAoteGZzX3F1b3RhX2Vycm9yKHVpbnQgZmxhZ3MpCitTVEFUSUMgdm9pZAoreGZzX3F1b3RhX3dhcm4oCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19kcXVvdAkqZHFwLAorCWludAkJCXR5cGUpCiB7Ci0JaWYgKGZsYWdzICYgWEZTX1FNT1BUX0VOT1NQQykKLQkJcmV0dXJuIEVOT1NQQzsKLQlyZXR1cm4gRURRVU9UOworCS8qIG5vIHdhcm5pbmdzIGZvciBwcm9qZWN0IHF1b3RhcyAtIHdlIGp1c3QgcmV0dXJuIEVOT1NQQyBsYXRlciAqLworCWlmIChkcXAtPmRxX2ZsYWdzICYgWEZTX0RRX1BST0opCisJCXJldHVybjsKKwlxdW90YV9zZW5kX3dhcm5pbmcoKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikgPyBVU1JRVU9UQSA6IEdSUFFVT1RBLAorCQkJICAgYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCksIG1wLT5tX3N1cGVyLT5zX2RldiwKKwkJCSAgIHR5cGUpOwogfQogCiAvKgpAQCAtNjEyLDcgKzYxOCw2IEBACiAJbG9uZwkJbmlub3MsCiAJdWludAkJZmxhZ3MpCiB7Ci0JaW50CQllcnJvcjsKIAl4ZnNfcWNudF90CWhhcmRsaW1pdDsKIAl4ZnNfcWNudF90CXNvZnRsaW1pdDsKIAl0aW1lX3QJCXRpbWVyOwpAQCAtNjQ5LDcgKzY1NCw2IEBACiAJCXdhcm5saW1pdCA9IFhGU19RSV9SVEJXQVJOTElNSVQoZHFwLT5xX21vdW50KTsKIAkJcmVzYmNvdW50cCA9ICZkcXAtPnFfcmVzX3J0YmNvdW50OwogCX0KLQllcnJvciA9IDA7CiAKIAlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0ZPUkNFX1JFUykgPT0gMCAmJgogCSAgICBkcXAtPnFfY29yZS5kX2lkICYmCkBAIC02NjcsMTggKzY3MSwyMCBAQAogCQkJICogbmJsa3MuCiAJCQkgKi8KIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmCi0JCQkgICAgIChoYXJkbGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkpIHsKLQkJCQllcnJvciA9IHhmc19xdW90YV9lcnJvcihmbGFncyk7CisJCQkgICAgaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9CSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQotCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgotCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7CisJCQkgICAgc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAod2FybnMgIT0gMCAmJiB3YXJucyA+PSB3YXJubGltaXQpKSB7Ci0JCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwKKwkJCQkJCSAgICAgICBRVU9UQV9OTF9CU09GVExPTkdXQVJOKTsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQorCisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfQlNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCQlpZiAobmlub3MgPiAwKSB7CkBAIC02OTIsMTUgKzY5OCwxOSBAQAogCQkJc29mdGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsKIAkJCWlmICghc29mdGxpbWl0KQogCQkJCXNvZnRsaW1pdCA9IHEtPnFpX2lzb2Z0bGltaXQ7CisKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9JSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJfSBlbHNlIGlmIChzb2Z0bGltaXQgPiAwVUxMICYmIGNvdW50ID49IHNvZnRsaW1pdCkgewotCQkJCWlmICgodGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gdGltZXIpIHx8CisJCQl9CisJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKKwkJCQlpZiAgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgICh3YXJucyAhPSAwICYmIHdhcm5zID49IHdhcm5saW1pdCkpIHsKLQkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLAorCQkJCQkJICAgICAgIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4pOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfSVNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCX0KQEAgLTczNiw5ICs3NDYsMTQgQEAKIAlBU1NFUlQoZHFwLT5xX3Jlc19ydGJjb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YmNvdW50KSk7CiAJQVNTRVJUKGRxcC0+cV9yZXNfaWNvdW50ID49IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KSk7CiAKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gMDsKKwogZXJyb3JfcmV0dXJuOgogCXhmc19kcXVubG9jayhkcXApOwotCXJldHVybiBlcnJvcjsKKwlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRU5PU1BDKQorCQlyZXR1cm4gRU5PU1BDOworCXJldHVybiBFRFFVT1Q7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggMDBmZDM1N2MuLmQxM2VlYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtMzYsOCArMzYsOCBAQAogfTsKIAogLyogT24tZGlzayBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzICovCi0jZGVmaW5lIFNHSV9BQ0xfRklMRQkJIlNHSV9BQ0xfRklMRSIKLSNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkiU0dJX0FDTF9ERUZBVUxUIgorI2RlZmluZSBTR0lfQUNMX0ZJTEUJCSh1bnNpZ25lZCBjaGFyICopIlNHSV9BQ0xfRklMRSIKKyNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkodW5zaWduZWQgY2hhciAqKSJTR0lfQUNMX0RFRkFVTFQiCiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IDY3MDJiZDguLmIxYTVhMWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTE4NywxNyArMTg3LDEzIEBACiAvKgogICogUGVyLWFnIGluY29yZSBzdHJ1Y3R1cmUsIGNvcGllcyBvZiBpbmZvcm1hdGlvbiBpbiBhZ2YgYW5kIGFnaSwKICAqIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGFsbG9jYXRpb24gZ3JvdXAgc2VsZWN0aW9uLgotICoKLSAqIHBpY2sgc2l6ZXMgd2hpY2ggZml0IGluIGFsbG9jYXRpb24gYnVja2V0cyB3ZWxsCiAgKi8KLSNpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKLSNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTg0Ci0jZWxpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKICNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTEyOAotI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHhmc19wZXJhZwotewordHlwZWRlZiBzdHJ1Y3QgeGZzX3BlcmFnIHsKKwlzdHJ1Y3QgeGZzX21vdW50ICpwYWdfbW91bnQ7CS8qIG93bmVyIGZpbGVzeXN0ZW0gKi8KKwl4ZnNfYWdudW1iZXJfdAlwYWdfYWdubzsJLyogQUcgdGhpcyBzdHJ1Y3R1cmUgYmVsb25ncyB0byAqLworCWF0b21pY190CXBhZ19yZWY7CS8qIHBlcmFnIHJlZmVyZW5jZSBjb3VudCAqLwogCWNoYXIJCXBhZ2ZfaW5pdDsJLyogdGhpcyBhZ2YncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2lfaW5pdDsJLyogdGhpcyBhZ2kncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2ZfbWV0YWRhdGE7CS8qIHRoZSBhZ2YgaXMgcHJlZmVycmVkIHRvIGJlIG1ldGFkYXRhICovCkBAIC0yMTAsOCArMjA2LDYgQEAKIAlfX3VpbnQzMl90CXBhZ2ZfYnRyZWVibGtzOwkvKiAjIG9mIGJsb2NrcyBoZWxkIGluIEFHRiBidHJlZXMgKi8KIAl4ZnNfYWdpbm9fdAlwYWdpX2ZyZWVjb3VudDsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCiAJeGZzX2FnaW5vX3QJcGFnaV9jb3VudDsJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KLQlpbnQJCXBhZ2JfY291bnQ7CS8qIHBhZ2Igc2xvdHMgaW4gdXNlICovCi0JeGZzX3BlcmFnX2J1c3lfdCAqcGFnYl9saXN0OwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIAogCS8qCiAJICogSW5vZGUgYWxsb2NhdGlvbiBzZWFyY2ggbG9va3VwIG9wdGltaXNhdGlvbi4KQEAgLTIzMCw2ICsyMjQsOCBAQAogCXJ3bG9ja190CXBhZ19pY2lfbG9jazsJLyogaW5jb3JlIGlub2RlIGxvY2sgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHBhZ19pY2lfcm9vdDsJLyogaW5jb3JlIGlub2RlIGNhY2hlIHJvb3QgKi8KICNlbmRpZgorCWludAkJcGFnYl9jb3VudDsJLyogcGFnYiBzbG90cyBpbiB1c2UgKi8KKwl4ZnNfcGVyYWdfYnVzeV90IHBhZ2JfbGlzdFtYRlNfUEFHQl9OVU1fU0xPVFNdOwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIH0geGZzX3BlcmFnX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMjc1YjFmNC4uOTRjZGRiZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTY2MiwxMSArMTY2MiwxMyBAQAogCQl4ZnNfYWdmX3QJKmFnZjsKIAkJeGZzX3BlcmFnX3QJKnBhZzsJCS8qIHBlciBhbGxvY2F0aW9uIGdyb3VwIGRhdGEgKi8KIAorCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCiAJCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CiAJCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZnJlZWJsa3MsIGxlbik7CiAJCXhmc190cmFuc19hZ2Jsb2Nrc19kZWx0YSh0cCwgbGVuKTsKLQkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKIAkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oCiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcykgPD0KIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCkBAIC0xOTY5LDEwICsxOTcxLDEyIEBACiAJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCkgPT0gWEZTX0FHRkxfU0laRShtcCkpCiAJCWFnZi0+YWdmX2ZsZmlyc3QgPSAwOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyldOworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pKTsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZsY291bnQsIC0xKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgLTEpOwogCXBhZy0+cGFnZl9mbGNvdW50LS07CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJbG9nZmxhZ3MgPSBYRlNfQUdGX0ZMRklSU1QgfCBYRlNfQUdGX0ZMQ09VTlQ7CiAJaWYgKGJ0cmVlYmxrKSB7CkBAIC0yMDc4LDcgKzIwODIsOCBAQAogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZmxsYXN0LCAxKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxsYXN0KSA9PSBYRlNfQUdGTF9TSVpFKG1wKSkKIAkJYWdmLT5hZ2ZfZmxsYXN0ID0gMDsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pXTsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKSk7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mbGNvdW50LCAxKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgMSk7CiAJcGFnLT5wYWdmX2ZsY291bnQrKzsKQEAgLTIwODksNiArMjA5NCw3IEBACiAJCXBhZy0+cGFnZl9idHJlZWJsa3MtLTsKIAkJbG9nZmxhZ3MgfD0gWEZTX0FHRl9CVFJFRUJMS1M7CiAJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKHRwLCBhZ2JwLCBsb2dmbGFncyk7CiAKQEAgLTIxNTIsNyArMjE1OCw2IEBACiAJCXhmc190cmFuc19icmVsc2UodHAsICpicHApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQotCiAJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKCpicHAsIEJfRlNfQUdGLCBYRlNfQUdGX1JFRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc1LDcgKzIxODAsNyBAQAogCUFTU0VSVChhZ25vICE9IE5VTExBR05VTUJFUik7CiAKIAllcnJvciA9IHhmc19yZWFkX2FnZihtcCwgdHAsIGFnbm8sCi0JCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhGU19CVUZfVFJZTE9DSyA6IDAsCisJCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhCRl9UUllMT0NLIDogMCwKIAkJCWJwcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMTg0LDcgKzIxODksNyBAQAogCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUigqYnBwKSk7CiAKIAlhZ2YgPSBYRlNfQlVGX1RPX0FHRigqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQlwYWctPnBhZ2ZfZnJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcyk7CiAJCXBhZy0+cGFnZl9idHJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9idHJlZWJsa3MpOwpAQCAtMjE5NSw4ICsyMjAwLDggQEAKIAkJcGFnLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0gPQogCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZwYWctPnBhZ2JfbG9jayk7Ci0JCXBhZy0+cGFnYl9saXN0ID0ga21lbV96YWxsb2MoWEZTX1BBR0JfTlVNX1NMT1RTICoKLQkJCQkJc2l6ZW9mKHhmc19wZXJhZ19idXN5X3QpLCBLTV9TTEVFUCk7CisJCXBhZy0+cGFnYl9jb3VudCA9IDA7CisJCW1lbXNldChwYWctPnBhZ2JfbGlzdCwgMCwgc2l6ZW9mKHBhZy0+cGFnYl9saXN0KSk7CiAJCXBhZy0+cGFnZl9pbml0ID0gMTsKIAl9CiAjaWZkZWYgREVCVUcKQEAgLTIyMTEsNiArMjIxNiw3IEBACiAJCSAgICAgICBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKSk7CiAJfQogI2VuZGlmCisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcwLDggKzIyNzYsNyBAQAogCQkgKiBUaGVzZSB0aHJlZSBmb3JjZSB1cyBpbnRvIGEgc2luZ2xlIGEuZy4KIAkJICovCiAJCWFyZ3MtPmFnbm8gPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQlhcmdzLT5wYWcgPSAmbXAtPm1fcGVyYWdbYXJncy0+YWdub107CisJCWFyZ3MtPnBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFyZ3MtPmFnbm8pOwogCQlhcmdzLT5taW5sZWZ0ID0gMDsKIAkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIDApOwogCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTIyODAsMTQgKzIyODUsMTIgQEAKIAkJCWdvdG8gZXJyb3IwOwogCQl9CiAJCWlmICghYXJncy0+YWdicCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X25vYWdicChhcmdzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWFyZ3MtPmFnYm5vID0gWEZTX0ZTQl9UT19BR0JOTyhtcCwgYXJncy0+ZnNibm8pOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoYXJncykpKQogCQkJZ290byBlcnJvcjA7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk86CiAJCS8qCkBAIC0yMzM5LDkgKzIzNDIsOCBAQAogCQkgKiBMb29wIG92ZXIgYWxsb2NhdGlvbiBncm91cHMgdHdpY2U7IGZpcnN0IHRpbWUgd2l0aAogCQkgKiB0cnlsb2NrIHNldCwgc2Vjb25kIHRpbWUgd2l0aG91dC4KIAkJICovCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZm9yICg7OykgewotCQkJYXJncy0+cGFnID0gJm1wLT5tX3BlcmFnW2FyZ3MtPmFnbm9dOworCQkJYXJncy0+cGFnID0geGZzX3BlcmFnX2dldChtcCwgYXJncy0+YWdubyk7CiAJCQlpZiAobm9fbWluKSBhcmdzLT5taW5sZWZ0ID0gMDsKIAkJCWVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdChhcmdzLCBmbGFncyk7CiAJCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTI0MDAsOCArMjQwMiw4IEBACiAJCQkJCX0KIAkJCQl9CiAJCQl9CisJCQl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGJ1bXBfcm90b3IgfHwgKHR5cGUgPT0gWEZTX0FMTE9DVFlQRV9BTllfQUcpKSB7CiAJCQlpZiAoYXJncy0+YWdubyA9PSBzYWdubykKIAkJCQltcC0+bV9hZ2Zyb3RvciA9IChtcC0+bV9hZ2Zyb3RvciArIDEpICUKQEAgLTI0MjcsOSArMjQyOSwxMCBAQAogCQkJYXJncy0+bGVuKTsKICNlbmRpZgogCX0KKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIDA7CiBlcnJvcjA6Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNDU0LDggKzI0NTcsNyBAQAogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwogCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5wYWcgPSAmYXJncy5tcC0+bV9wZXJhZ1thcmdzLmFnbm9dOworCWFyZ3MucGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhcmdzLmFnbm8pOwogCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkpCiAJCWdvdG8gZXJyb3IwOwogI2lmZGVmIERFQlVHCkBAIC0yNDY1LDcgKzI0NjcsNyBAQAogI2VuZGlmCiAJZXJyb3IgPSB4ZnNfZnJlZV9hZ19leHRlbnQodHAsIGFyZ3MuYWdicCwgYXJncy5hZ25vLCBhcmdzLmFnYm5vLCBsZW4sIDApOwogZXJyb3IwOgotCXVwX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MucGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0ODYsMTUgKzI0ODgsMTUgQEAKIAkJICAgIHhmc19hZ2Jsb2NrX3QgYm5vLAogCQkgICAgeGZzX2V4dGxlbl90IGxlbikKIHsKLQl4ZnNfbW91bnRfdAkJKm1wOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJaW50CQkJbjsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KHRwLT50X21vdW50cCwgYWdubyk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ2JfbG9jayk7CiAKIAkvKiBzZWFyY2ggcGFnYl9saXN0IGZvciBhbiBvcGVuIHNsb3QgKi8KLQlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCwgbiA9IDA7CisJZm9yIChic3kgPSBwYWctPnBhZ2JfbGlzdCwgbiA9IDA7CiAJICAgICBuIDwgWEZTX1BBR0JfTlVNX1NMT1RTOwogCSAgICAgYnN5KyssIG4rKykgewogCQlpZiAoYnN5LT5idXN5X3RwID09IE5VTEwpIHsKQEAgLTI1MDIsMTEgKzI1MDQsMTEgQEAKIAkJfQogCX0KIAotCXRyYWNlX3hmc19hbGxvY19idXN5KG1wLCBhZ25vLCBibm8sIGxlbiwgbik7CisJdHJhY2VfeGZzX2FsbG9jX2J1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbik7CiAKIAlpZiAobiA8IFhGU19QQUdCX05VTV9TTE9UUykgewotCQlic3kgPSAmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0W25dOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50Kys7CisJCWJzeSA9ICZwYWctPnBhZ2JfbGlzdFtuXTsKKwkJcGFnLT5wYWdiX2NvdW50Kys7CiAJCWJzeS0+YnVzeV9zdGFydCA9IGJubzsKIAkJYnN5LT5idXN5X2xlbmd0aCA9IGxlbjsKIAkJYnN5LT5idXN5X3RwID0gdHA7CkBAIC0yNTIxLDcgKzI1MjMsOCBAQAogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCX0KIAotCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ2JfbG9jayk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogfQogCiB2b2lkCkBAIC0yNTI5LDI0ICsyNTMyLDIzIEBACiAJCSAgICAgeGZzX2FnbnVtYmVyX3QgYWdubywKIAkJICAgICBpbnQgaWR4KQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmxpc3Q7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQlsaXN0ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0OwotCiAJQVNTRVJUKGlkeCA8IFhGU19QQUdCX05VTV9TTE9UUyk7CisJcGFnID0geGZzX3BlcmFnX2dldCh0cC0+dF9tb3VudHAsIGFnbm8pOworCXNwaW5fbG9jaygmcGFnLT5wYWdiX2xvY2spOworCWxpc3QgPSBwYWctPnBhZ2JfbGlzdDsKIAotCXRyYWNlX3hmc19hbGxvY191bmJ1c3kobXAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOworCXRyYWNlX3hmc19hbGxvY191bmJ1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBpZHgsIGxpc3RbaWR4XS5idXN5X3RwID09IHRwKTsKIAogCWlmIChsaXN0W2lkeF0uYnVzeV90cCA9PSB0cCkgewogCQlsaXN0W2lkeF0uYnVzeV90cCA9IE5VTEw7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQtLTsKKwkJcGFnLT5wYWdiX2NvdW50LS07CiAJfQogCi0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIApAQCAtMjU2MCwxNyArMjU2MiwxNSBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKIAl4ZnNfYWdibG9ja190CQl1ZW5kLCBiZW5kOwogCXhmc19sc25fdAkJbHNuID0gMDsKIAlpbnQJCQljbnQ7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQotCXVlbmQgPSBibm8gKyBsZW4gLSAxOworCXBhZyA9IHhmc19wZXJhZ19nZXQodHAtPnRfbW91bnRwLCBhZ25vKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwljbnQgPSBwYWctPnBhZ2JfY291bnQ7CiAKIAkvKgogCSAqIHNlYXJjaCBwYWdiX2xpc3QgZm9yIHRoaXMgc2xvdCwgc2tpcHBpbmcgb3BlbiBzbG90cy4gV2UgaGF2ZSB0bwpAQCAtMjU3OCw4ICsyNTc4LDkgQEAKIAkgKiB3ZSBoYXZlIHRvIGdldCB0aGUgbW9zdCByZWNlbnQgTFNOIGZvciB0aGUgbG9nIGZvcmNlIHRvIHB1c2ggb3V0CiAJICogYWxsIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBzcGFuIHRoZSByYW5nZS4KIAkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQ7IGNudCsrKSB7Ci0JCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3RbY250XTsKKwl1ZW5kID0gYm5vICsgbGVuIC0gMTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHBhZy0+cGFnYl9jb3VudDsgY250KyspIHsKKwkJYnN5ID0gJnBhZy0+cGFnYl9saXN0W2NudF07CiAJCWlmICghYnN5LT5idXN5X3RwKQogCQkJY29udGludWU7CiAKQEAgLTI1OTEsNyArMjU5Miw4IEBACiAJCWlmIChYRlNfTFNOX0NNUChic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbiwgbHNuKSA+IDApCiAJCQlsc24gPSBic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbjsKIAl9Ci0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJdHJhY2VfeGZzX2FsbG9jX2J1c3lzZWFyY2godHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbHNuKTsKIAogCS8qCkBAIC0yNTk5LDUgKzI2MDEsNSBAQAogCSAqIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgdGhlIGJsb2NrCiAJICovCiAJaWYgKGxzbikKLQkJeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CisJCXhmc19sb2dfZm9yY2VfbHNuKHRwLT50X21vdW50cCwgbHNuLCBYRlNfTE9HX1NZTkMpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IGFkYmQ5MTQxLi5iNzI2ZTEwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCkBAIC02MSwxMiArNjEsMTQgQEAKIAlzdHJ1Y3QgeGZzX2FnZgkJKmFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwogCXhmc19hZ251bWJlcl90CQlzZXFubyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKTsKIAlpbnQJCQlidG51bSA9IGN1ci0+YmNfYnRudW07CisJc3RydWN0IHhmc19wZXJhZwkqcGFnID0geGZzX3BlcmFnX2dldChjdXItPmJjX21wLCBzZXFubyk7CiAKIAlBU1NFUlQocHRyLT5zICE9IDApOwogCiAJYWdmLT5hZ2Zfcm9vdHNbYnRudW1dID0gcHRyLT5zOwogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfbGV2ZWxzW2J0bnVtXSwgaW5jKTsKLQljdXItPmJjX21wLT5tX3BlcmFnW3NlcW5vXS5wYWdmX2xldmVsc1tidG51bV0gKz0gaW5jOworCXBhZy0+cGFnZl9sZXZlbHNbYnRudW1dICs9IGluYzsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAl4ZnNfYWxsb2NfbG9nX2FnZihjdXItPmJjX3RwLCBhZ2JwLCBYRlNfQUdGX1JPT1RTIHwgWEZTX0FHRl9MRVZFTFMpOwogfQpAQCAtMTUwLDYgKzE1Miw3IEBACiB7CiAJc3RydWN0IHhmc19hZ2YJCSphZ2YgPSBYRlNfQlVGX1RPX0FHRihjdXItPmJjX3ByaXZhdGUuYS5hZ2JwKTsKIAl4ZnNfYWdudW1iZXJfdAkJc2Vxbm8gPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyk7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCV9fYmUzMgkJCWxlbjsKIAlpbnQJCQludW1yZWNzOwogCkBAIC0xOTMsNyArMTk2LDkgQEAKIAl9CiAKIAlhZ2YtPmFnZl9sb25nZXN0ID0gbGVuOwotCWN1ci0+YmNfbXAtPm1fcGVyYWdbc2Vxbm9dLnBhZ2ZfbG9uZ2VzdCA9IGJlMzJfdG9fY3B1KGxlbik7CisJcGFnID0geGZzX3BlcmFnX2dldChjdXItPmJjX21wLCBzZXFubyk7CisJcGFnLT5wYWdmX2xvbmdlc3QgPSBiZTMyX3RvX2NwdShsZW4pOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAl4ZnNfYWxsb2NfbG9nX2FnZihjdXItPmJjX3RwLCBjdXItPmJjX3ByaXZhdGUuYS5hZ2JwLCBYRlNfQUdGX0xPTkdFU1QpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuYyBiL2ZzL3hmcy94ZnNfYXR0ci5jCmluZGV4IGU5NTNiNmNmLi5iOWMxOTZhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuYworKysgYi9mcy94ZnMveGZzX2F0dHIuYwpAQCAtOTMsMTIgKzkzLDEyIEBACiBTVEFUSUMgaW50CiB4ZnNfYXR0cl9uYW1lX3RvX3huYW1lKAogCXN0cnVjdCB4ZnNfbmFtZQkqeG5hbWUsCi0JY29uc3QgY2hhcgkqYW5hbWUpCisJY29uc3QgdW5zaWduZWQgY2hhciAqYW5hbWUpCiB7CiAJaWYgKCFhbmFtZSkKIAkJcmV0dXJuIEVJTlZBTDsKIAl4bmFtZS0+bmFtZSA9IGFuYW1lOwotCXhuYW1lLT5sZW4gPSBzdHJsZW4oYW5hbWUpOworCXhuYW1lLT5sZW4gPSBzdHJsZW4oKGNoYXIgKilhbmFtZSk7CiAJaWYgKHhuYW1lLT5sZW4gPj0gTUFYTkFNRUxFTikKIAkJcmV0dXJuIEVGQVVMVDsJCS8qIG1hdGNoIElSSVggYmVoYXZpb3VyICovCiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogeGZzX2F0dHJfZ2V0X2ludCgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKIAlzdHJ1Y3QgeGZzX25hbWUJCSpuYW1lLAotCWNoYXIJCQkqdmFsdWUsCisJdW5zaWduZWQgY2hhcgkJKnZhbHVlLAogCWludAkJCSp2YWx1ZWxlbnAsCiAJaW50CQkJZmxhZ3MpCiB7CkBAIC0xNzEsOCArMTcxLDggQEAKIGludAogeGZzX2F0dHJfZ2V0KAogCXhmc19pbm9kZV90CSppcCwKLQljb25zdCBjaGFyCSpuYW1lLAotCWNoYXIJCSp2YWx1ZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlLAogCWludAkJKnZhbHVlbGVucCwKIAlpbnQJCWZsYWdzKQogewpAQCAtMTk3LDcgKzE5Nyw3IEBACiAvKgogICogQ2FsY3VsYXRlIGhvdyBtYW55IGJsb2NrcyB3ZSBuZWVkIGZvciB0aGUgbmV3IGF0dHJpYnV0ZSwKICAqLwotaW50CitTVEFUSUMgaW50CiB4ZnNfYXR0cl9jYWxjX3NpemUoCiAJc3RydWN0IHhmc19pbm9kZSAJKmlwLAogCWludAkJCW5hbWVsZW4sCkBAIC0yMzUsOCArMjM1LDEyIEBACiB9CiAKIFNUQVRJQyBpbnQKLXhmc19hdHRyX3NldF9pbnQoeGZzX2lub2RlX3QgKmRwLCBzdHJ1Y3QgeGZzX25hbWUgKm5hbWUsCi0JCWNoYXIgKnZhbHVlLCBpbnQgdmFsdWVsZW4sIGludCBmbGFncykKK3hmc19hdHRyX3NldF9pbnQoCisJc3RydWN0IHhmc19pbm9kZSAqZHAsCisJc3RydWN0IHhmc19uYW1lCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlLAorCWludAkJdmFsdWVsZW4sCisJaW50CQlmbGFncykKIHsKIAl4ZnNfZGFfYXJnc190CWFyZ3M7CiAJeGZzX2ZzYmxvY2tfdAlmaXJzdGJsb2NrOwpAQCAtNDUyLDggKzQ1Niw4IEBACiBpbnQKIHhmc19hdHRyX3NldCgKIAl4ZnNfaW5vZGVfdAkqZHAsCi0JY29uc3QgY2hhcgkqbmFtZSwKLQljaGFyCQkqdmFsdWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSwKIAlpbnQJCXZhbHVlbGVuLAogCWludAkJZmxhZ3MpCiB7CkBAIC02MDAsNyArNjA0LDcgQEAKIGludAogeGZzX2F0dHJfcmVtb3ZlKAogCXhmc19pbm9kZV90CSpkcCwKLQljb25zdCBjaGFyCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJaW50CQlmbGFncykKIHsKIAlpbnQJCWVycm9yOwpAQCAtNjY5LDkgKzY3MywxMyBAQAogICovCiAvKkFSR1NVU0VEKi8KIFNUQVRJQyBpbnQKLXhmc19hdHRyX3B1dF9saXN0ZW50KHhmc19hdHRyX2xpc3RfY29udGV4dF90ICpjb250ZXh0LCBpbnQgZmxhZ3MsCi0JCSAgICAgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCSAgICAgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3hmc19hdHRyX3B1dF9saXN0ZW50KAorCXhmc19hdHRyX2xpc3RfY29udGV4dF90ICpjb250ZXh0LAorCWludAkJZmxhZ3MsCisJdW5zaWduZWQgY2hhcgkqbmFtZSwKKwlpbnQJCW5hbWVsZW4sCisJaW50CQl2YWx1ZWxlbiwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSkKIHsKIAlzdHJ1Y3QgYXR0cmxpc3QgKmFsaXN0ID0gKHN0cnVjdCBhdHRybGlzdCAqKWNvbnRleHQtPmFsaXN0OwogCWF0dHJsaXN0X2VudF90ICphZXA7CkBAIC0xOTgwLDcgKzE5ODgsNyBAQAogCXhmc19ibWJ0X2lyZWNfdCBtYXBbQVRUUl9STVRWQUxVRV9NQVBTSVpFXTsKIAl4ZnNfbW91bnRfdCAqbXA7CiAJeGZzX2RhZGRyX3QgZGJsa25vOwotCXhmc19jYWRkcl90IGRzdDsKKwl2b2lkICpkc3Q7CiAJeGZzX2J1Zl90ICpicDsKIAlpbnQgbm1hcCwgZXJyb3IsIHRtcCwgdmFsdWVsZW4sIGJsa2NudCwgaTsKIAl4ZnNfZGFibGtfdCBsYmxrbm87CkBAIC0yMDA3LDE1ICsyMDE1LDE0IEBACiAJCQlkYmxrbm8gPSBYRlNfRlNCX1RPX0RBRERSKG1wLCBtYXBbaV0uYnJfc3RhcnRibG9jayk7CiAJCQlibGtjbnQgPSBYRlNfRlNCX1RPX0JCKG1wLCBtYXBbaV0uYnJfYmxvY2tjb3VudCk7CiAJCQllcnJvciA9IHhmc19yZWFkX2J1ZihtcCwgbXAtPm1fZGRldl90YXJncCwgZGJsa25vLAotCQkJCQkgICAgIGJsa2NudCwKLQkJCQkJICAgICBYRlNfQlVGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSywKKwkJCQkJICAgICBibGtjbnQsIFhCRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0ssCiAJCQkJCSAgICAgJmJwKTsKIAkJCWlmIChlcnJvcikKIAkJCQlyZXR1cm4oZXJyb3IpOwogCiAJCQl0bXAgPSAodmFsdWVsZW4gPCBYRlNfQlVGX1NJWkUoYnApKQogCQkJCT8gdmFsdWVsZW4gOiBYRlNfQlVGX1NJWkUoYnApOwotCQkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgZHN0LCBYRlNfQl9SRUFEKTsKKwkJCXhmc19iaW9tb3ZlKGJwLCAwLCB0bXAsIGRzdCwgWEJGX1JFQUQpOwogCQkJeGZzX2J1Zl9yZWxzZShicCk7CiAJCQlkc3QgKz0gdG1wOwogCQkJdmFsdWVsZW4gLT0gdG1wOwpAQCAtMjAzOSw3ICsyMDQ2LDcgQEAKIAl4ZnNfaW5vZGVfdCAqZHA7CiAJeGZzX2JtYnRfaXJlY190IG1hcDsKIAl4ZnNfZGFkZHJfdCBkYmxrbm87Ci0JeGZzX2NhZGRyX3Qgc3JjOworCXZvaWQgKnNyYzsKIAl4ZnNfYnVmX3QgKmJwOwogCXhmc19kYWJsa190IGxibGtubzsKIAlpbnQgYmxrY250LCB2YWx1ZWxlbiwgbm1hcCwgZXJyb3IsIHRtcCwgY29tbWl0dGVkOwpAQCAtMjE0MSwxMyArMjE0OCwxMyBAQAogCQlibGtjbnQgPSBYRlNfRlNCX1RPX0JCKG1wLCBtYXAuYnJfYmxvY2tjb3VudCk7CiAKIAkJYnAgPSB4ZnNfYnVmX2dldChtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sIGJsa2NudCwKLQkJCQkgWEZTX0JVRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0spOworCQkJCSBYQkZfTE9DSyB8IFhCRl9ET05UX0JMT0NLKTsKIAkJQVNTRVJUKGJwKTsKIAkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGJwKSk7CiAKIAkJdG1wID0gKHZhbHVlbGVuIDwgWEZTX0JVRl9TSVpFKGJwKSkgPyB2YWx1ZWxlbiA6CiAJCQkJCQkJWEZTX0JVRl9TSVpFKGJwKTsKLQkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgc3JjLCBYRlNfQl9XUklURSk7CisJCXhmc19iaW9tb3ZlKGJwLCAwLCB0bXAsIHNyYywgWEJGX1dSSVRFKTsKIAkJaWYgKHRtcCA8IFhGU19CVUZfU0laRShicCkpCiAJCQl4ZnNfYmlvemVybyhicCwgdG1wLCBYRlNfQlVGX1NJWkUoYnApIC0gdG1wKTsKIAkJaWYgKChlcnJvciA9IHhmc19id3JpdGUobXAsIGJwKSkpIHsvKiBHUk9UOiBOT1RFOiBzeW5jaHJvbm91cyB3cml0ZSAqLwpAQCAtMjIwOCw4ICsyMjE1LDcgQEAKIAkJLyoKIAkJICogSWYgdGhlICJyZW1vdGUiIHZhbHVlIGlzIGluIHRoZSBjYWNoZSwgcmVtb3ZlIGl0LgogCQkgKi8KLQkJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LAotCQkJCVhGU19JTkNPUkVfVFJZTE9DSyk7CisJCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sIGJsa2NudCwgWEJGX1RSWUxPQ0spOwogCQlpZiAoYnApIHsKIAkJCVhGU19CVUZfU1RBTEUoYnApOwogCQkJWEZTX0JVRl9VTkRFTEFZV1JJVEUoYnApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmggYi9mcy94ZnMveGZzX2F0dHIuaAppbmRleCA1OWI0MTBjLi5lOTIwZDY4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuaAorKysgYi9mcy94ZnMveGZzX2F0dHIuaApAQCAtMTEzLDcgKzExMyw3IEBACiAKIAogdHlwZWRlZiBpbnQgKCpwdXRfbGlzdGVudF9mdW5jX3QpKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKiwgaW50LAotCQkJCSAgICAgIGNoYXIgKiwgaW50LCBpbnQsIGNoYXIgKik7CisJCQkgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgewogCXN0cnVjdCB4ZnNfaW5vZGUJCSpkcDsJCS8qIGlub2RlICovCkBAIC0xMzksNyArMTM5LDYgQEAKIC8qCiAgKiBPdmVyYWxsIGV4dGVybmFsIGludGVyZmFjZSByb3V0aW5lcy4KICAqLwotaW50IHhmc19hdHRyX2NhbGNfc2l6ZShzdHJ1Y3QgeGZzX2lub2RlICosIGludCwgaW50LCBpbnQgKik7CiBpbnQgeGZzX2F0dHJfaW5hY3RpdmUoc3RydWN0IHhmc19pbm9kZSAqZHApOwogaW50IHhmc19hdHRyX3JtdHZhbF9nZXQoc3RydWN0IHhmc19kYV9hcmdzICphcmdzKTsKIGludCB4ZnNfYXR0cl9saXN0X2ludChzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKaW5kZXggYmFmNDFiNS4uYTkwY2U3NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC01MjEsMTEgKzUyMSwxMSBAQAogCiAJc2ZlID0gJnNmLT5saXN0WzBdOwogCWZvciAoaSA9IDA7IGkgPCBzZi0+aGRyLmNvdW50OyBpKyspIHsKLQkJbmFyZ3MubmFtZSA9IChjaGFyICopc2ZlLT5uYW1ldmFsOworCQluYXJncy5uYW1lID0gc2ZlLT5uYW1ldmFsOwogCQluYXJncy5uYW1lbGVuID0gc2ZlLT5uYW1lbGVuOwotCQluYXJncy52YWx1ZSA9IChjaGFyICopJnNmZS0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKKwkJbmFyZ3MudmFsdWUgPSAmc2ZlLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOwogCQluYXJncy52YWx1ZWxlbiA9IHNmZS0+dmFsdWVsZW47Ci0JCW5hcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUoKGNoYXIgKilzZmUtPm5hbWV2YWwsCisJCW5hcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUoc2ZlLT5uYW1ldmFsLAogCQkJCQkJc2ZlLT5uYW1lbGVuKTsKIAkJbmFyZ3MuZmxhZ3MgPSBYRlNfQVRUUl9OU1BfT05ESVNLX1RPX0FSR1Moc2ZlLT5mbGFncyk7CiAJCWVycm9yID0geGZzX2F0dHJfbGVhZl9sb29rdXBfaW50KGJwLCAmbmFyZ3MpOyAvKiBzZXQgYS0+aW5kZXggKi8KQEAgLTYxMiwxMCArNjEyLDEwIEBACiAJCWZvciAoaSA9IDAsIHNmZSA9ICZzZi0+bGlzdFswXTsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewogCQkJZXJyb3IgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkgICBzZmUtPmZsYWdzLAotCQkJCQkgICAoY2hhciAqKXNmZS0+bmFtZXZhbCwKKwkJCQkJICAgc2ZlLT5uYW1ldmFsLAogCQkJCQkgICAoaW50KXNmZS0+bmFtZWxlbiwKIAkJCQkJICAgKGludClzZmUtPnZhbHVlbGVuLAotCQkJCQkgICAoY2hhciopJnNmZS0+bmFtZXZhbFtzZmUtPm5hbWVsZW5dKTsKKwkJCQkJICAgJnNmZS0+bmFtZXZhbFtzZmUtPm5hbWVsZW5dKTsKIAogCQkJLyoKIAkJCSAqIEVpdGhlciBzZWFyY2ggY2FsbGJhY2sgZmluaXNoZWQgZWFybHkgb3IKQEAgLTY1OSw4ICs2NTksOCBAQAogCQl9CiAKIAkJc2JwLT5lbnRubyA9IGk7Ci0JCXNicC0+aGFzaCA9IHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZS0+bmFtZXZhbCwgc2ZlLT5uYW1lbGVuKTsKLQkJc2JwLT5uYW1lID0gKGNoYXIgKilzZmUtPm5hbWV2YWw7CisJCXNicC0+aGFzaCA9IHhmc19kYV9oYXNobmFtZShzZmUtPm5hbWV2YWwsIHNmZS0+bmFtZWxlbik7CisJCXNicC0+bmFtZSA9IHNmZS0+bmFtZXZhbDsKIAkJc2JwLT5uYW1lbGVuID0gc2ZlLT5uYW1lbGVuOwogCQkvKiBUaGVzZSBhcmUgYnl0ZXMsIGFuZCBib3RoIG9uLWRpc2ssIGRvbid0IGVuZGlhbi1mbGlwICovCiAJCXNicC0+dmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwpAQCAtODE4LDkgKzgxOCw5IEBACiAJCQljb250aW51ZTsKIAkJQVNTRVJUKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKTsKIAkJbmFtZV9sb2MgPSB4ZnNfYXR0cl9sZWFmX25hbWVfbG9jYWwobGVhZiwgaSk7Ci0JCW5hcmdzLm5hbWUgPSAoY2hhciAqKW5hbWVfbG9jLT5uYW1ldmFsOworCQluYXJncy5uYW1lID0gbmFtZV9sb2MtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBuYW1lX2xvYy0+bmFtZWxlbjsKLQkJbmFyZ3MudmFsdWUgPSAoY2hhciAqKSZuYW1lX2xvYy0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKKwkJbmFyZ3MudmFsdWUgPSAmbmFtZV9sb2MtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CiAJCW5hcmdzLnZhbHVlbGVuID0gYmUxNl90b19jcHUobmFtZV9sb2MtPnZhbHVlbGVuKTsKIAkJbmFyZ3MuaGFzaHZhbCA9IGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKTsKIAkJbmFyZ3MuZmxhZ3MgPSBYRlNfQVRUUl9OU1BfT05ESVNLX1RPX0FSR1MoZW50cnktPmZsYWdzKTsKQEAgLTIzNzAsMTAgKzIzNzAsMTAgQEAKIAogCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9sb2MtPm5hbWV2YWwsCisJCQkJCQluYW1lX2xvYy0+bmFtZXZhbCwKIAkJCQkJCShpbnQpbmFtZV9sb2MtPm5hbWVsZW4sCiAJCQkJCQliZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pLAotCQkJCQkJKGNoYXIgKikmbmFtZV9sb2MtPm5hbWV2YWxbbmFtZV9sb2MtPm5hbWVsZW5dKTsKKwkJCQkJCSZuYW1lX2xvYy0+bmFtZXZhbFtuYW1lX2xvYy0+bmFtZWxlbl0pOwogCQkJaWYgKHJldHZhbCkKIAkJCQlyZXR1cm4gcmV0dmFsOwogCQl9IGVsc2UgewpAQCAtMjM5NywxNSArMjM5NywxNSBAQAogCQkJCQlyZXR1cm4gcmV0dmFsOwogCQkJCXJldHZhbCA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCQllbnRyeS0+ZmxhZ3MsCi0JCQkJCQkoY2hhciAqKW5hbWVfcm10LT5uYW1lLAorCQkJCQkJbmFtZV9ybXQtPm5hbWUsCiAJCQkJCQkoaW50KW5hbWVfcm10LT5uYW1lbGVuLAogCQkJCQkJdmFsdWVsZW4sCi0JCQkJCQkoY2hhciopYXJncy52YWx1ZSk7CisJCQkJCQlhcmdzLnZhbHVlKTsKIAkJCQlrbWVtX2ZyZWUoYXJncy52YWx1ZSk7CiAJCQl9IGVsc2UgewogCQkJCXJldHZhbCA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCQllbnRyeS0+ZmxhZ3MsCi0JCQkJCQkoY2hhciAqKW5hbWVfcm10LT5uYW1lLAorCQkJCQkJbmFtZV9ybXQtPm5hbWUsCiAJCQkJCQkoaW50KW5hbWVfcm10LT5uYW1lbGVuLAogCQkJCQkJdmFsdWVsZW4sCiAJCQkJCQlOVUxMKTsKQEAgLTI5NTAsNyArMjk1MCw3IEBACiAJCQkJCQltYXAuYnJfYmxvY2tjb3VudCk7CiAJCQlicCA9IHhmc190cmFuc19nZXRfYnVmKCp0cmFucywKIAkJCQkJZHAtPmlfbW91bnQtPm1fZGRldl90YXJncCwKLQkJCQkJZGJsa25vLCBkYmxrY250LCBYRlNfQlVGX0xPQ0spOworCQkJCQlkYmxrbm8sIGRibGtjbnQsIFhCRl9MT0NLKTsKIAkJCXhmc190cmFuc19iaW52YWwoKnRyYW5zLCBicCk7CiAJCQkvKgogCQkJICogUm9sbCB0byBuZXh0IHRyYW5zYWN0aW9uLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX3NmLmggYi9mcy94ZnMveGZzX2F0dHJfc2YuaAppbmRleCA3NmFiN2IwLi45MTk3NTZlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfc2YuaAorKysgYi9mcy94ZnMveGZzX2F0dHJfc2YuaApAQCAtNTIsNyArNTIsNyBAQAogCV9fdWludDhfdAl2YWx1ZWxlbjsJLyogbGVuZ3RoIG9mIHZhbHVlICovCiAJX191aW50OF90CWZsYWdzOwkJLyogZmxhZ3MgYml0cyAoc2VlIHhmc19hdHRyX2xlYWYuaCkgKi8KIAl4ZnNfZGFoYXNoX3QJaGFzaDsJCS8qIHRoaXMgZW50cnkncyBoYXNoIHZhbHVlICovCi0JY2hhcgkJKm5hbWU7CQkvKiBuYW1lIHZhbHVlLCBwb2ludGVyIGludG8gYnVmZmVyICovCisJdW5zaWduZWQgY2hhcgkqbmFtZTsJCS8qIG5hbWUgdmFsdWUsIHBvaW50ZXIgaW50byBidWZmZXIgKi8KIH0geGZzX2F0dHJfc2Zfc29ydF90OwogCiAjZGVmaW5lIFhGU19BVFRSX1NGX0VOVFNJWkVfQllOQU1FKG5sZW4sdmxlbikJLyogc3BhY2UgbmFtZS92YWx1ZSB1c2VzICovIFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggOTgyNTFjZC4uMTg2OWZiOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTI2MjksMTMgKzI2MjksMTIgQEAKIAkJaWYgKHN0YXJ0YWcgPT0gTlVMTEFHTlVNQkVSKQogCQkJc3RhcnRhZyA9IGFnID0gMDsKIAkJbm90aW5pdCA9IDA7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwogCQl3aGlsZSAoYmxlbiA8IGFwLT5hbGVuKSB7Ci0JCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWddOwogCQkJaWYgKCFwYWctPnBhZ2ZfaW5pdCAmJgogCQkJICAgIChlcnJvciA9IHhmc19hbGxvY19wYWdmX2luaXQobXAsIGFyZ3MudHAsCiAJCQkJICAgIGFnLCBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSkpIHsKLQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CiAJCQkvKgpAQCAtMjY2NywxMyArMjY2NiwxMyBAQAogCQkJCQkJYnJlYWs7CiAKIAkJCQkJZXJyb3IgPSB4ZnNfZmlsZXN0cmVhbV9uZXdfYWcoYXAsICZhZyk7Ci0JCQkJCWlmIChlcnJvcikgewotCQkJCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCQkJeGZzX3BlcmFnX3B1dChwYWcpOworCQkJCQlpZiAoZXJyb3IpCiAJCQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQkJCX0KIAogCQkJCQkvKiBsb29wIGFnYWluIHRvIHNldCAnYmxlbicqLwogCQkJCQlzdGFydGFnID0gTlVMTEFHTlVNQkVSOworCQkJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KQEAgLTI2ODEsOCArMjY4MCwxMCBAQAogCQkJCWFnID0gMDsKIAkJCWlmIChhZyA9PSBzdGFydGFnKQogCQkJCWJyZWFrOworCQkJeGZzX3BlcmFnX3B1dChwYWcpOworCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwogCQl9Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJLyoKIAkJICogU2luY2UgdGhlIGFib3ZlIGxvb3AgZGlkIGEgQlVGX1RSWUxPQ0ssIGl0IGlzCiAJCSAqIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3BhY2UgZm9yIHRoaXMgcmVxdWVzdC4KQEAgLTQ0NzAsNyArNDQ3MSw3IEBACiAJeGZzX2ZzYmxvY2tfdAlhYm5vOwkJLyogYWxsb2NhdGVkIGJsb2NrIG51bWJlciAqLwogCXhmc19leHRsZW5fdAlhbGVuOwkJLyogYWxsb2NhdGVkIGV4dGVudCBsZW5ndGggKi8KIAl4ZnNfZmlsZW9mZl90CWFvZmY7CQkvKiBhbGxvY2F0ZWQgZmlsZSBvZmZzZXQgKi8KLQl4ZnNfYm1hbGxvY2FfdAlibWE7CQkvKiBhcmdzIGZvciB4ZnNfYm1hcF9hbGxvYyAqLworCXhmc19ibWFsbG9jYV90CWJtYSA9IHsgMCB9OwkvKiBhcmdzIGZvciB4ZnNfYm1hcF9hbGxvYyAqLwogCXhmc19idHJlZV9jdXJfdAkqY3VyOwkJLyogYm1hcCBidHJlZSBjdXJzb3IgKi8KIAl4ZnNfZmlsZW9mZl90CWVuZDsJCS8qIGVuZCBvZiBtYXBwZWQgZmlsZSByZWdpb24gKi8KIAlpbnQJCWVvZjsJCS8qIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIGV4dGVudHMgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKaW5kZXggMzg3NTFkNS4uNDE2ZTQ3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogLyoKICAqIFNldCBhbGwgdGhlIGZpZWxkcyBpbiBhIGJtYXAgZXh0ZW50IHJlY29yZCBmcm9tIHRoZSB1bmNvbXByZXNzZWQgZm9ybS4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19ibWJ0X2Rpc2tfc2V0X2FsbCgKIAl4ZnNfYm1idF9yZWNfdAkqciwKIAl4ZnNfYm1idF9pcmVjX3QgKnMpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCmluZGV4IGNmMDdjYTcuLjBlNjZjNGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCkBAIC0yMjMsNyArMjIzLDYgQEAKIGV4dGVybiB2b2lkIHhmc19ibWJ0X3NldF9zdGFydG9mZih4ZnNfYm1idF9yZWNfaG9zdF90ICpyLCB4ZnNfZmlsZW9mZl90IHYpOwogZXh0ZXJuIHZvaWQgeGZzX2JtYnRfc2V0X3N0YXRlKHhmc19ibWJ0X3JlY19ob3N0X3QgKnIsIHhmc19leG50c3RfdCB2KTsKIAotZXh0ZXJuIHZvaWQgeGZzX2JtYnRfZGlza19zZXRfYWxsKHhmc19ibWJ0X3JlY190ICpyLCB4ZnNfYm1idF9pcmVjX3QgKnMpOwogZXh0ZXJuIHZvaWQgeGZzX2JtYnRfZGlza19zZXRfYWxsZih4ZnNfYm1idF9yZWNfdCAqciwgeGZzX2ZpbGVvZmZfdCBvLAogCQkJeGZzX2ZzYmxvY2tfdCBiLCB4ZnNfZmlsYmxrc190IGMsIHhmc19leG50c3RfdCB2KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5jIGIvZnMveGZzL3hmc19idHJlZS5jCmluZGV4IDM2YTA5OTJkLi45NmJlNGIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19idHJlZS5jCkBAIC05NzcsNyArOTc3LDcgQEAKIAl4ZnNfZGFkZHJfdAkJZDsKIAogCS8qIG5lZWQgdG8gc29ydCBvdXQgaG93IGNhbGxlcnMgZGVhbCB3aXRoIGZhaWx1cmVzIGZpcnN0ICovCi0JQVNTRVJUKCEoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spKTsKKwlBU1NFUlQoIShmbGFncyAmIFhCRl9UUllMT0NLKSk7CiAKIAlkID0geGZzX2J0cmVlX3B0cl90b19kYWRkcihjdXIsIHB0cik7CiAJKmJwcCA9IHhmc190cmFuc19nZXRfYnVmKGN1ci0+YmNfdHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCWludAkJCWVycm9yOwogCiAJLyogbmVlZCB0byBzb3J0IG91dCBob3cgY2FsbGVycyBkZWFsIHdpdGggZmFpbHVyZXMgZmlyc3QgKi8KLQlBU1NFUlQoIShmbGFncyAmIFhGU19CVUZfVFJZTE9DSykpOworCUFTU0VSVCghKGZsYWdzICYgWEJGX1RSWUxPQ0spKTsKIAogCWQgPSB4ZnNfYnRyZWVfcHRyX3RvX2RhZGRyKGN1ciwgcHRyKTsKIAllcnJvciA9IHhmc190cmFuc19yZWFkX2J1ZihtcCwgY3VyLT5iY190cCwgbXAtPm1fZGRldl90YXJncCwgZCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCBhMzBmN2U5Li5mM2M0OWU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJICAgICAgICgoYmlwLT5ibGlfZm9ybWF0LmJsZl9tYXBfc2l6ZSAtIDEpICogc2l6ZW9mKHVpbnQpKSk7CiAJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZiaXAtPmJsaV9mb3JtYXQ7CiAJdmVjcC0+aV9sZW4gPSBiYXNlX3NpemU7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CRk9STUFUKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JGT1JNQVQ7CiAJdmVjcCsrOwogCW52ZWNzID0gMTsKIApAQCAtMjk3LDE0ICsyOTcsMTQgQEAKIAkJCWJ1ZmZlcl9vZmZzZXQgPSBmaXJzdF9iaXQgKiBYRlNfQkxJX0NIVU5LOwogCQkJdmVjcC0+aV9hZGRyID0geGZzX2J1Zl9vZmZzZXQoYnAsIGJ1ZmZlcl9vZmZzZXQpOwogCQkJdmVjcC0+aV9sZW4gPSBuYml0cyAqIFhGU19CTElfQ0hVTks7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JDSFVOSyk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JDSFVOSzsKIAkJCW52ZWNzKys7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChuZXh0X2JpdCAhPSBsYXN0X2JpdCArIDEpIHsKIAkJCWJ1ZmZlcl9vZmZzZXQgPSBmaXJzdF9iaXQgKiBYRlNfQkxJX0NIVU5LOwogCQkJdmVjcC0+aV9hZGRyID0geGZzX2J1Zl9vZmZzZXQoYnAsIGJ1ZmZlcl9vZmZzZXQpOwogCQkJdmVjcC0+aV9sZW4gPSBuYml0cyAqIFhGU19CTElfQ0hVTks7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JDSFVOSyk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JDSFVOSzsKIAkJCW52ZWNzKys7CiAJCQl2ZWNwKys7CiAJCQlmaXJzdF9iaXQgPSBuZXh0X2JpdDsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogLyogWW91IHdvdWxkIHRoaW5rIHdlIG5lZWQgdG8gYnVtcCB0aGUgbnZlY3MgaGVyZSB0b28sIGJ1dCB3ZSBkbyBub3QKICAqIHRoaXMgbnVtYmVyIGlzIHVzZWQgYnkgcmVjb3ZlcnksIGFuZCBpdCBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSBib3VuZGFyeQogICogc3BsaXQgaGVyZQpAQCAtNDY3LDggKzQ2NywxMCBAQAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIGF0dGVtcHQgdG8gbG9jayB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzCiAgKiBidWYgbG9nIGl0ZW0uICBEb24ndCBzbGVlcCBvbiB0aGUgYnVmZmVyIGxvY2suICBJZiB3ZSBjYW4ndCBnZXQKLSAqIHRoZSBsb2NrIHJpZ2h0IGF3YXksIHJldHVybiAwLiAgSWYgd2UgY2FuIGdldCB0aGUgbG9jaywgcHVsbCB0aGUKLSAqIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIGxpc3QsIG1hcmsgaXQgYnVzeSwgYW5kIHJldHVybiAxLgorICogdGhlIGxvY2sgcmlnaHQgYXdheSwgcmV0dXJuIDAuICBJZiB3ZSBjYW4gZ2V0IHRoZSBsb2NrLCB0YWtlIGEKKyAqIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLiBJZiB0aGlzIGlzIGEgZGVsYXllZCB3cml0ZSBidWZmZXIgdGhhdAorICogbmVlZHMgQUlMIGhlbHAgdG8gYmUgd3JpdHRlbiBiYWNrLCBpbnZva2UgdGhlIHB1c2hidWYgcm91dGluZQorICogcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCBzdWNjZXNzIHBhdGguCiAgKi8KIFNUQVRJQyB1aW50CiB4ZnNfYnVmX2l0ZW1fdHJ5bG9jaygKQEAgLTQ3NywyNCArNDc5LDE4IEBACiAJeGZzX2J1Zl90CSpicDsKIAogCWJwID0gYmlwLT5ibGlfYnVmOwotCi0JaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CisJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwotCX0KLQotCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKSB7CisJaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpCiAJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7Ci0JfQogCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIGxpc3QuICBPbmx5IGRvIHRoaXMKLQkgKiBpZiBpdCdzIG9uIHRoZSBmcmVlIGxpc3QuICBQcml2YXRlIGJ1ZmZlcnMgbGlrZSB0aGUKLQkgKiBzdXBlcmJsb2NrIGJ1ZmZlciBhcmUgbm90LgotCSAqLworCS8qIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlci4gICovCiAJWEZTX0JVRl9IT0xEKGJwKTsKIAogCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwogCXRyYWNlX3hmc19idWZfaXRlbV90cnlsb2NrKGJpcCk7CisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKKwkJcmV0dXJuIFhGU19JVEVNX1BVU0hCVUY7CiAJcmV0dXJuIFhGU19JVEVNX1NVQ0NFU1M7CiB9CiAKQEAgLTYyNiwxMSArNjIyLDkgQEAKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIHRvIGFzeW5jaHJvbm91c2x5IHdyaXRlIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAqIGJ1ZiBsb2cgaXRlbSBvdXQgdG8gZGlzay4gVGhlIGJ1ZmZlciB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGxvY2tlZCBieQotICogYSBzdWNjZXNzZnVsIGNhbGwgdG8geGZzX2J1Zl9pdGVtX3RyeWxvY2soKS4gIElmIHRoZSBidWZmZXIgc3RpbGwgaGFzCi0gKiBCX0RFTFdSSSBzZXQsIHRoZW4gZ2V0IGl0IGdvaW5nIG91dCB0byBkaXNrIHdpdGggYSBjYWxsIHRvIGJhd3JpdGUoKS4KLSAqIElmIG5vdCwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGJ1ZmZlci4KKyAqIFRoZSBidWZmZXIgaXMgbG9ja2VkLCBidXQgaXMgbm90IGEgZGVsYXllZCB3cml0ZSBidWZmZXIuIFRoaXMgaGFwcGVucworICogaWYgd2UgcmFjZSB3aXRoIElPIGNvbXBsZXRpb24gYW5kIGhlbmNlIHdlIGRvbid0IHdhbnQgdG8gdHJ5IHRvIHdyaXRlIGl0CisgKiBhZ2Fpbi4gSnVzdCByZWxlYXNlIHRoZSBidWZmZXIuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fcHVzaCgKQEAgLTY0MiwxNyArNjM2LDI5IEBACiAJdHJhY2VfeGZzX2J1Zl9pdGVtX3B1c2goYmlwKTsKIAogCWJwID0gYmlwLT5ibGlfYnVmOworCUFTU0VSVCghWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKK30KIAotCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpIHsKLQkJaW50CWVycm9yOwotCQllcnJvciA9IHhmc19iYXdyaXRlKGJpcC0+YmxpX2l0ZW0ubGlfbW91bnRwLCBicCk7Ci0JCWlmIChlcnJvcikKLQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGJpcC0+YmxpX2l0ZW0ubGlfbW91bnRwLAotCQkJInhmc19idWZfaXRlbV9wdXNoOiBwdXNoYnVmIGVycm9yICVkIG9uIGJpcCAlcCwgYnAgJXAiLAotCQkJCQllcnJvciwgYmlwLCBicCk7Ci0JfSBlbHNlIHsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQorLyoKKyAqIFRoZSBidWZmZXIgaXMgbG9ja2VkIGFuZCBpcyBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyLiBQcm9tb3RlIHRoZSBidWZmZXIKKyAqIGluIHRoZSBkZWxheWVkIHdyaXRlIHF1ZXVlIGFzIHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGV5IG11c3QgaW52b2tlCisgKiB0aGUgeGZzYnVmZCB0byBnZXQgdGhpcyBidWZmZXIgd3JpdHRlbi4gV2UgaGF2ZSB0byB1bmxvY2sgdGhlIGJ1ZmZlcgorICogdG8gYWxsb3cgdGhlIHhmc2J1ZmQgdG8gd3JpdGUgaXQsIHRvby4KKyAqLworU1RBVElDIHZvaWQKK3hmc19idWZfaXRlbV9wdXNoYnVmKAorCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwKQoreworCXhmc19idWZfdAkqYnA7CisKKwlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaGJ1ZihiaXApOworCisJYnAgPSBiaXAtPmJsaV9idWY7CisJQVNTRVJUKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CisJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJeGZzX2J1Zl9yZWxzZShicCk7CiB9CiAKIC8qIEFSR1NVU0VEICovCkBAIC02NzcsNyArNjgzLDcgQEAKIAkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkLAogCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3B1c2gsCi0JLmlvcF9wdXNoYnVmCT0gTlVMTCwKKwkuaW9wX3B1c2hidWYJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV9wdXNoYnVmLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKaW5kZXggYzBjODg2OS4uMGNhNTU2YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMTUzNCw4ICsxNTM0LDggQEAKIGVudW0geGZzX2RhY21wCiB4ZnNfZGFfY29tcG5hbWUoCiAJc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCWNvbnN0IGNoYXIgCSpuYW1lLAotCWludCAJCWxlbikKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCWludAkJbGVuKQogewogCXJldHVybiAoYXJncy0+bmFtZWxlbiA9PSBsZW4gJiYgbWVtY21wKGFyZ3MtPm5hbWUsIG5hbWUsIGxlbikgPT0gMCkgPwogCQkJCQlYRlNfQ01QX0VYQUNUIDogWEZTX0NNUF9ESUZGRVJFTlQ7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmggYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKaW5kZXggMzBjZDA4Zi4uZmU5ZjVhOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaApAQCAtMjA5LDcgKzIwOSw4IEBACiAgKi8KIHN0cnVjdCB4ZnNfbmFtZW9wcyB7CiAJeGZzX2RhaGFzaF90CSgqaGFzaG5hbWUpKHN0cnVjdCB4ZnNfbmFtZSAqKTsKLQllbnVtIHhmc19kYWNtcAkoKmNvbXBuYW1lKShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCWVudW0geGZzX2RhY21wCSgqY29tcG5hbWUpKHN0cnVjdCB4ZnNfZGFfYXJncyAqLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CiB9OwogCiAKQEAgLTI2MCw3ICsyNjEsNyBAQAogCiB1aW50IHhmc19kYV9oYXNobmFtZShjb25zdCBfX3VpbnQ4X3QgKm5hbWVfc3RyaW5nLCBpbnQgbmFtZV9sZW5ndGgpOwogZW51bSB4ZnNfZGFjbXAgeGZzX2RhX2NvbXBuYW1lKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIAogCiB4ZnNfZGFfc3RhdGVfdCAqeGZzX2RhX3N0YXRlX2FsbG9jKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IDg0Y2ExY2YuLmNkMjdjOWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTQ1LDE1ICs0NSwyMSBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCisKK3N0YXRpYyBpbnQgeGZzX3N3YXBfZXh0ZW50cygKKwl4ZnNfaW5vZGVfdAkqaXAsCS8qIHRhcmdldCBpbm9kZSAqLworCXhmc19pbm9kZV90CSp0aXAsCS8qIHRtcCBpbm9kZSAqLworCXhmc19zd2FwZXh0X3QJKnN4cCk7CisKIC8qCi0gKiBTeXNzZ2kgaW50ZXJmYWNlIGZvciBzd2FwZXh0CisgKiBpb2N0bCBpbnRlcmZhY2UgZm9yIHN3YXBleHQKICAqLwogaW50CiB4ZnNfc3dhcGV4dCgKIAl4ZnNfc3dhcGV4dF90CSpzeHApCiB7CiAJeGZzX2lub2RlX3QgICAgICppcCwgKnRpcDsKLQlzdHJ1Y3QgZmlsZQkqZmlsZSwgKnRhcmdldF9maWxlOworCXN0cnVjdCBmaWxlCSpmaWxlLCAqdG1wX2ZpbGU7CiAJaW50CQllcnJvciA9IDA7CiAKIAkvKiBQdWxsIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IGZkICovCkBAIC02OCw0NiArNzQsNDYgQEAKIAkJZ290byBvdXRfcHV0X2ZpbGU7CiAJfQogCi0JdGFyZ2V0X2ZpbGUgPSBmZ2V0KChpbnQpc3hwLT5zeF9mZHRtcCk7Ci0JaWYgKCF0YXJnZXRfZmlsZSkgeworCXRtcF9maWxlID0gZmdldCgoaW50KXN4cC0+c3hfZmR0bXApOworCWlmICghdG1wX2ZpbGUpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKIAkJZ290byBvdXRfcHV0X2ZpbGU7CiAJfQogCi0JaWYgKCEodGFyZ2V0X2ZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fAotCSAgICAodGFyZ2V0X2ZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkpIHsKKwlpZiAoISh0bXBfZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHx8CisJICAgICh0bXBfZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFQkFERik7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlmIChJU19TV0FQRklMRShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSB8fAotCSAgICBJU19TV0FQRklMRSh0YXJnZXRfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkgICAgSVNfU1dBUEZJTEUodG1wX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlwID0gWEZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JdGlwID0gWEZTX0kodGFyZ2V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXRpcCA9IFhGU19JKHRtcF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCWlmIChpcC0+aV9tb3VudCAhPSB0aXAtPmlfbW91bnQpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKGlwLT5pX2lubyA9PSB0aXAtPmlfaW5vKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU8pOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAllcnJvciA9IHhmc19zd2FwX2V4dGVudHMoaXAsIHRpcCwgc3hwKTsKIAotIG91dF9wdXRfdGFyZ2V0X2ZpbGU6Ci0JZnB1dCh0YXJnZXRfZmlsZSk7Cisgb3V0X3B1dF90bXBfZmlsZToKKwlmcHV0KHRtcF9maWxlKTsKICBvdXRfcHV0X2ZpbGU6CiAJZnB1dChmaWxlKTsKICBvdXQ6CkBAIC0xODYsNyArMTkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50CitzdGF0aWMgaW50CiB4ZnNfc3dhcF9leHRlbnRzKAogCXhmc19pbm9kZV90CSppcCwJLyogdGFyZ2V0IGlub2RlICovCiAJeGZzX2lub2RlX3QJKnRpcCwJLyogdG1wIGlub2RlICovCkBAIC0yNTQsNiArMjYwLDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCXRyYWNlX3hmc19zd2FwX2V4dGVudF9iZWZvcmUoaXAsIDApOworCXRyYWNlX3hmc19zd2FwX2V4dGVudF9iZWZvcmUodGlwLCAxKTsKKwogCS8qIGNoZWNrIGlub2RlIGZvcm1hdHMgbm93IHRoYXQgZGF0YSBpcyBmbHVzaGVkICovCiAJZXJyb3IgPSB4ZnNfc3dhcF9leHRlbnRzX2NoZWNrX2Zvcm1hdChpcCwgdGlwKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTQyMSw2ICs0MzAsOCBAQAogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfU1dBUEVYVCk7CiAKKwl0cmFjZV94ZnNfc3dhcF9leHRlbnRfYWZ0ZXIoaXAsIDApOworCXRyYWNlX3hmc19zd2FwX2V4dGVudF9hZnRlcih0aXAsIDEpOwogb3V0OgogCWttZW1fZnJlZSh0ZW1waWZwKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RmcmFnLmggYi9mcy94ZnMveGZzX2RmcmFnLmgKaW5kZXggNGY1NWE2My4uMjBiZGQ5MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kZnJhZy5oCisrKyBiL2ZzL3hmcy94ZnNfZGZyYWcuaApAQCAtNDgsOSArNDgsNiBAQAogICovCiBpbnQJeGZzX3N3YXBleHQoc3RydWN0IHhmc19zd2FwZXh0ICpzeCk7CiAKLWludAl4ZnNfc3dhcF9leHRlbnRzKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3QgeGZzX2lub2RlICp0aXAsCi0JCXN0cnVjdCB4ZnNfc3dhcGV4dCAqc3hwKTsKLQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9fWEZTX0RGUkFHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmMgYi9mcy94ZnMveGZzX2RpcjIuYwppbmRleCA5MzYzNGE3Li40MjUyMGYwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuYworKysgYi9mcy94ZnMveGZzX2RpcjIuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCi1zdHJ1Y3QgeGZzX25hbWUgeGZzX25hbWVfZG90ZG90ID0geyIuLiIsIDJ9Oworc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsgKHVuc2lnbmVkIGNoYXIgKikiLi4iLCAyfTsKIAogLyoKICAqIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgKGllLiBBLVopIHN1cHBvcnQgZm9yIGRpcmVjdG9yaWVzIHRoYXQgd2FzCkBAIC02Niw4ICs2Niw4IEBACiBTVEFUSUMgZW51bSB4ZnNfZGFjbXAKIHhmc19hc2NpaV9jaV9jb21wbmFtZSgKIAlzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JY29uc3QgY2hhcgkqbmFtZSwKLQlpbnQgCQlsZW4pCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwlpbnQJCWxlbikKIHsKIAllbnVtIHhmc19kYWNtcAlyZXN1bHQ7CiAJaW50CQlpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiBpbnQKIHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KAogCXN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQljb25zdCBjaGFyCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJaW50CQlsZW4pCiB7CiAJaWYgKGFyZ3MtPmNtcHJlc3VsdCA9PSBYRlNfQ01QX0RJRkZFUkVOVCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5oIGIvZnMveGZzL3hmc19kaXIyLmgKaW5kZXggMWQ5ZWY5Ni4uNzRhM2IxMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmgKKysrIGIvZnMveGZzL3hmc19kaXIyLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogZXh0ZXJuIGludCB4ZnNfZGlyMl9zaHJpbmtfaW5vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCB4ZnNfZGlyMl9kYl90IGRiLAogCQkJCXN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKIAotZXh0ZXJuIGludCB4ZnNfZGlyX2NpbG9va3VwX3Jlc3VsdChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJaW50IGxlbik7CitleHRlcm4gaW50IHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIAogI2VuZGlmCS8qIF9fWEZTX0RJUjJfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCmluZGV4IGRkYzRlY2MuLjc3OWEyNjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCkBAIC01Nyw4ICs1Nyw4IEBACiB2b2lkCiB4ZnNfZGlyX3N0YXJ0dXAodm9pZCkKIHsKLQl4ZnNfZGlyX2hhc2hfZG90ID0geGZzX2RhX2hhc2huYW1lKCIuIiwgMSk7Ci0JeGZzX2Rpcl9oYXNoX2RvdGRvdCA9IHhmc19kYV9oYXNobmFtZSgiLi4iLCAyKTsKKwl4ZnNfZGlyX2hhc2hfZG90ID0geGZzX2RhX2hhc2huYW1lKCh1bnNpZ25lZCBjaGFyICopIi4iLCAxKTsKKwl4ZnNfZGlyX2hhc2hfZG90ZG90ID0geGZzX2RhX2hhc2huYW1lKCh1bnNpZ25lZCBjaGFyICopIi4uIiwgMik7CiB9CiAKIC8qCkBAIC01MTMsOCArNTEzLDkgQEAKIAkJLyoKIAkJICogSWYgaXQgZGlkbid0IGZpdCwgc2V0IHRoZSBmaW5hbCBvZmZzZXQgdG8gaGVyZSAmIHJldHVybi4KIAkJICovCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sIGNvb2sgJiAweDdmZmZmZmZmLAotCQkJICAgIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksIERUX1VOS05PV04pKSB7CisJCWlmIChmaWxsZGlyKGRpcmVudCwgKGNoYXIgKilkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKKwkJCSAgICBjb29rICYgMHg3ZmZmZmZmZiwgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwKKwkJCSAgICBEVF9VTktOT1dOKSkgewogCQkJKm9mZnNldCA9IGNvb2sgJiAweDdmZmZmZmZmOwogCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IDI5ZjQ4NGMuLmUyZDg5ODUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAkJZGVwID0gKHhmc19kaXIyX2RhdGFfZW50cnlfdCAqKXB0cjsKIAkJbGVuZ3RoID0geGZzX2RpcjJfZGF0YV9lbnRzaXplKGRlcC0+bmFtZWxlbik7CiAKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKWRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAogCQkJICAgIHhmc19kaXIyX2J5dGVfdG9fZGF0YXB0cihtcCwgY3Vyb2ZmKSAmIDB4N2ZmZmZmZmYsCiAJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IGNlNmUzNTUuLjc4ZmM0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtNjUsNyArNjUsNyBAQAogLyoKICAqIExvZyBlbnRyaWVzIGZyb20gYSBmcmVlc3BhY2UgYmxvY2suCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfZGlyMl9mcmVlX2xvZ19iZXN0cygKIAl4ZnNfdHJhbnNfdAkJKnRwLAkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXhmc19kYWJ1Zl90CQkqYnAsCQkvKiBmcmVlc3BhY2UgYnVmZmVyICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5oIGIvZnMveGZzL3hmc19kaXIyX25vZGUuaAppbmRleCBkZGU3MmRiLi44MmRmZTcxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmgKQEAgLTc1LDggKzc1LDYgQEAKIAlyZXR1cm4gKChkYikgJSBYRlNfRElSMl9NQVhfRlJFRV9CRVNUUyhtcCkpOwogfQogCi1leHRlcm4gdm9pZCB4ZnNfZGlyMl9mcmVlX2xvZ19iZXN0cyhzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19kYWJ1ZiAqYnAsCi0JCQkJICAgIGludCBmaXJzdCwgaW50IGxhc3QpOwogZXh0ZXJuIGludCB4ZnNfZGlyMl9sZWFmX3RvX25vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAogCQkJCSBzdHJ1Y3QgeGZzX2RhYnVmICpsYnApOwogZXh0ZXJuIHhmc19kYWhhc2hfdCB4ZnNfZGlyMl9sZWFmbl9sYXN0aGFzaChzdHJ1Y3QgeGZzX2RhYnVmICpicCwgaW50ICpjb3VudCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfc2YuYyBiL2ZzL3hmcy94ZnNfZGlyMl9zZi5jCmluZGV4IDlkNGYxN2EuLmMxYTU5NDVkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfc2YuYworKysgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAJCX0KIAogCQlpbm8gPSB4ZnNfZGlyMl9zZl9nZXRfaW51bWJlcihzZnAsIHhmc19kaXIyX3NmX2ludW1iZXJwKHNmZXApKTsKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBzZmVwLT5uYW1lLCBzZmVwLT5uYW1lbGVuLAorCQlpZiAoZmlsbGRpcihkaXJlbnQsIChjaGFyICopc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKIAkJCSAgICBvZmYgJiAweDdmZmZmZmZmLCBpbm8sIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gb2ZmICYgMHg3ZmZmZmZmZjsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKaW5kZXggMDVhNGJkZC4uNmYzNWVkMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJihlZmlwLT5lZmlfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemU7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9nX3ZlY3RvciwgWExPR19SRUdfVFlQRV9FRklfRk9STUFUKTsKKwlsb2dfdmVjdG9yLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0VGSV9GT1JNQVQ7CiAJQVNTRVJUKHNpemUgPj0gc2l6ZW9mKHhmc19lZmlfbG9nX2Zvcm1hdF90KSk7CiB9CiAKQEAgLTQwNiw3ICs0MDYsNyBAQAogCiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYoZWZkcC0+ZWZkX2Zvcm1hdCk7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfRUZEX0ZPUk1BVCk7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9FRkRfRk9STUFUOwogCUFTU0VSVChzaXplID49IHNpemVvZih4ZnNfZWZkX2xvZ19mb3JtYXRfdCkpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCmluZGV4IGE2MzFlMTQ1Li4zOTA4NTBlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJaW50CQlmbGFncywKIAl4ZnNfZXh0bGVuX3QJbWlubGVuKQogeworCWludAkJc3RyZWFtcywgbWF4X3N0cmVhbXM7CiAJaW50CQllcnIsIHRyeWxvY2ssIG5zY2FuOwogCXhmc19leHRsZW5fdAlsb25nZXN0LCBmcmVlLCBtaW5mcmVlLCBtYXhmcmVlID0gMDsKIAl4ZnNfYWdudW1iZXJfdAlhZywgbWF4X2FnID0gTlVMTEFHTlVNQkVSOwpAQCAtMTU1LDE1ICsxNTYsMTUgQEAKIAl0cnlsb2NrID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKIAogCWZvciAobnNjYW4gPSAwOyAxOyBuc2NhbisrKSB7Ci0KLQkJVFJBQ0VfQUdfU0NBTihtcCwgYWcsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsIGFnKSk7Ci0KLQkJcGFnID0gbXAtPm1fcGVyYWcgKyBhZzsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOworCQlUUkFDRV9BR19TQ0FOKG1wLCBhZywgYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpKTsKIAogCQlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CiAJCQllcnIgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBOVUxMLCBhZywgdHJ5bG9jayk7Ci0JCQlpZiAoZXJyICYmICF0cnlsb2NrKQorCQkJaWYgKGVyciAmJiAhdHJ5bG9jaykgeworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCQlyZXR1cm4gZXJyOworCQkJfQogCQl9CiAKIAkJLyogTWlnaHQgZmFpbCBzb21ldGltZXMgZHVyaW5nIHRoZSAxc3QgcGFzcyB3aXRoIHRyeWxvY2sgc2V0LiAqLwpAQCAtMTczLDYgKzE3NCw3IEBACiAJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIEFHIHdpdGggdGhlIG1vc3QgZnJlZSBibG9ja3MuICovCiAJCWlmIChwYWctPnBhZ2ZfZnJlZWJsa3MgPiBtYXhmcmVlKSB7CiAJCQltYXhmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJbWF4X3N0cmVhbXMgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CiAJCQltYXhfYWcgPSBhZzsKIAkJfQogCkBAIC0xOTUsNiArMTk3LDggQEAKIAogCQkJLyogQnJlYWsgb3V0LCByZXRhaW5pbmcgdGhlIHJlZmVyZW5jZSBvbiB0aGUgQUcuICovCiAJCQlmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJc3RyZWFtcyA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCSphZ3AgPSBhZzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDIsNiArMjA2LDcgQEAKIAkJLyogRHJvcCB0aGUgcmVmZXJlbmNlIG9uIHRoaXMgQUcsIGl0J3Mgbm90IHVzYWJsZS4gKi8KIAkJeGZzX2ZpbGVzdHJlYW1fcHV0X2FnKG1wLCBhZyk7CiBuZXh0X2FnOgorCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCS8qIE1vdmUgdG8gdGhlIG5leHQgQUcsIHdyYXBwaW5nIHRvIEFHIDAgaWYgbmVjZXNzYXJ5LiAqLwogCQlpZiAoKythZyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQogCQkJYWcgPSAwOwpAQCAtMjI5LDYgKzIzNCw3IEBACiAJCWlmIChtYXhfYWcgIT0gTlVMTEFHTlVNQkVSKSB7CiAJCQl4ZnNfZmlsZXN0cmVhbV9nZXRfYWcobXAsIG1heF9hZyk7CiAJCQlUUkFDRV9BR19QSUNLMShtcCwgbWF4X2FnLCBtYXhmcmVlKTsKKwkJCXN0cmVhbXMgPSBtYXhfc3RyZWFtczsKIAkJCWZyZWUgPSBtYXhmcmVlOwogCQkJKmFncCA9IG1heF9hZzsKIAkJCWJyZWFrOwpAQCAtMjQwLDE2ICsyNDYsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JVFJBQ0VfQUdfUElDSzIobXAsIHN0YXJ0YWcsICphZ3AsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsICphZ3ApLAotCQkJZnJlZSwgbnNjYW4sIGZsYWdzKTsKKwlUUkFDRV9BR19QSUNLMihtcCwgc3RhcnRhZywgKmFncCwgc3RyZWFtcywgZnJlZSwgbnNjYW4sIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiAvKgogICogU2V0IHRoZSBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciBmb3IgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LCB1cGRhdGluZyBpbm9kZQotICogcmVmZXJlbmNlcyBhbmQgcGVyLUFHIHJlZmVyZW5jZXMgYXMgYXBwcm9wcmlhdGUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQotICogbV9wZXJhZ2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCisgKiByZWZlcmVuY2VzIGFuZCBwZXItQUcgcmVmZXJlbmNlcyBhcyBhcHByb3ByaWF0ZS4KICAqLwogc3RhdGljIGludAogX3hmc19maWxlc3RyZWFtX3VwZGF0ZV9hZygKQEAgLTQ1MSwyMCArNDU1LDYgQEAKIH0KIAogLyoKLSAqIElmIHRoZSBtb3VudCBwb2ludCdzIG1fcGVyYWcgYXJyYXkgaXMgZ29pbmcgdG8gYmUgcmVhbGxvY2F0ZWQsIGFsbAotICogb3V0c3RhbmRpbmcgY2FjaGUgZW50cmllcyBtdXN0IGJlIGZsdXNoZWQgdG8gYXZvaWQgYWNjZXNzaW5nIHJlZmVyZW5jZSBjb3VudAotICogYWRkcmVzc2VzIHRoYXQgaGF2ZSBiZWVuIGZyZWVkLiAgVGhlIGNhbGwgdG8geGZzX2ZpbGVzdHJlYW1fZmx1c2goKSBtdXN0IGJlCi0gKiBtYWRlIGluc2lkZSB0aGUgYmxvY2sgdGhhdCBob2xkcyB0aGUgbV9wZXJhZ2xvY2sgaW4gd3JpdGUgbW9kZSB0byBkbyB0aGUKLSAqIHJlYWxsb2NhdGlvbi4KLSAqLwotdm9pZAoteGZzX2ZpbGVzdHJlYW1fZmx1c2goCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhmc19tcnVfY2FjaGVfZmx1c2gobXAtPm1fZmlsZXN0cmVhbSk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gdGhlIEFHIG9mIHRoZSBmaWxlc3RyZWFtIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBiZWxvbmdzIHRvLCBvcgogICogTlVMTEFHTlVNQkVSIG90aGVyd2lzZS4KICAqLwpAQCAtNTI2LDcgKzUxNiw2IEBACiAKIAltcCA9IHBpcC0+aV9tb3VudDsKIAljYWNoZSA9IG1wLT5tX2ZpbGVzdHJlYW07Ci0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCiAJLyoKIAkgKiBXZSBoYXZlIGEgcHJvYmxlbSwgSG91c3Rvbi4KQEAgLTU0MywxMCArNTMyLDggQEAKIAkgKgogCSAqIFNvLCBpZiB3ZSBjYW4ndCBnZXQgdGhlIGlvbG9jayB3aXRob3V0IHNsZWVwaW5nIHRoZW4ganVzdCBnaXZlIHVwCiAJICovCi0JaWYgKCF4ZnNfaWxvY2tfbm93YWl0KHBpcCwgWEZTX0lPTE9DS19FWENMKSkgewotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCWlmICgheGZzX2lsb2NrX25vd2FpdChwaXAsIFhGU19JT0xPQ0tfRVhDTCkpCiAJCXJldHVybiAxOwotCX0KIAogCS8qIElmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB1c2UgaXRzIEFHLiAqLwogCWl0ZW0gPSB4ZnNfbXJ1X2NhY2hlX2xvb2t1cChjYWNoZSwgcGlwLT5pX2lubyk7CkBAIC02MDEsNyArNTg4LDYgQEAKIAogZXhpdDoKIAl4ZnNfaXVubG9jayhwaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAlyZXR1cm4gLWVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmggYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAppbmRleCA0YWJhNjdjLi4yNjBmNzU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAorKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaApAQCAtNzksMTIgKzc5LDIxIEBACiAgKiB0aGUgY2FjaGUgdGhhdCByZWZlcmVuY2UgcGVyLWFnIGFycmF5IGVsZW1lbnRzIHRoYXQgaGF2ZSBzaW5jZSBiZWVuCiAgKiByZWFsbG9jYXRlZC4KICAqLworLyoKKyAqIHhmc19maWxlc3RyZWFtX3BlZWtfYWcgaXMgb25seSB1c2VkIGluIHRyYWNpbmcgY29kZQorICovCiBzdGF0aWMgaW5saW5lIGludAogeGZzX2ZpbGVzdHJlYW1fcGVla19hZygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC05Miw3ICsxMDEsMTMgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMDAsNyArMTE1LDEzIEBACiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19hZ251bWJlcl90CWFnbm8pCiB7Ci0JcmV0dXJuIGF0b21pY19kZWNfcmV0dXJuKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdmX2ZzdHJtcyk7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOworCWludAkJcmV0OworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJcmV0ID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnZl9mc3RybXMpOworCXhmc19wZXJhZ19wdXQocGFnKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBhbGxvY2F0aW9uIHNlbGVjdGlvbiBmbGFncyAqLwpAQCAtMTE0LDcgKzEzNSw2IEBACiB2b2lkIHhmc19maWxlc3RyZWFtX3VuaW5pdCh2b2lkKTsKIGludCB4ZnNfZmlsZXN0cmVhbV9tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19maWxlc3RyZWFtX3VubW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwotdm9pZCB4ZnNfZmlsZXN0cmVhbV9mbHVzaChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB4ZnNfYWdudW1iZXJfdCB4ZnNfZmlsZXN0cmVhbV9sb29rdXBfYWcoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19maWxlc3RyZWFtX2Fzc29jaWF0ZShzdHJ1Y3QgeGZzX2lub2RlICpkaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIHZvaWQgeGZzX2ZpbGVzdHJlYW1fZGVhc3NvY2lhdGUoc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGExMzkxOWEuLjM3YTZmNjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTE2NywyNyArMTY3LDE0IEBACiAJfQogCW5ldyA9IG5iIC0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKIAlvYWdjb3VudCA9IG1wLT5tX3NiLnNiX2FnY291bnQ7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbmV3IHBlci1hZyBzdHJ1Y3R1cmVzICovCiAJaWYgKG5hZ2NvdW50ID4gb2FnY291bnQpIHsKLQkJdm9pZCAqbmV3X3BlcmFnLCAqb2xkX3BlcmFnOwotCi0JCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKLQotCQluZXdfcGVyYWcgPSBrbWVtX3phbGxvYyhzaXplb2YoeGZzX3BlcmFnX3QpICogbmFnY291bnQsCi0JCQkJCUtNX01BWUZBSUwpOwotCQlpZiAoIW5ld19wZXJhZykKLQkJCXJldHVybiBYRlNfRVJST1IoRU5PTUVNKTsKLQotCQlkb3duX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltZW1jcHkobmV3X3BlcmFnLCBtcC0+bV9wZXJhZywgc2l6ZW9mKHhmc19wZXJhZ190KSAqIG9hZ2NvdW50KTsKLQkJb2xkX3BlcmFnID0gbXAtPm1fcGVyYWc7Ci0JCW1wLT5tX3BlcmFnID0gbmV3X3BlcmFnOwotCi0JCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF8zMkJJVElOT0RFUzsKLQkJbmFnaW1heCA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCk7Ci0JCXVwX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCi0JCWttZW1fZnJlZShvbGRfcGVyYWcpOworCQllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCwgJm5hZ2ltYXgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQorCiAJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19HUk9XRlMpOwogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19SRVNFUlZFOwogCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgWEZTX0dST1dGU19TUEFDRV9SRVMobXApLApAQCAtMTk2LDYgKzE4MywxMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJLyoKKwkgKiBXcml0ZSBuZXcgQUcgaGVhZGVycyB0byBkaXNrLiBOb24tdHJhbnNhY3Rpb25hbCwgYnV0IHdyaXR0ZW4KKwkgKiBzeW5jaHJvbm91c2x5IHNvIHRoZXkgYXJlIGNvbXBsZXRlZCBwcmlvciB0byB0aGUgZ3Jvd2ZzIHRyYW5zYWN0aW9uCisJICogYmVpbmcgbG9nZ2VkLgorCSAqLwogCW5mcmVlID0gMDsKIAlmb3IgKGFnbm8gPSBuYWdjb3VudCAtIDE7IGFnbm8gPj0gb2FnY291bnQ7IGFnbm8tLSwgbmV3IC09IGFnc2l6ZSkgewogCQkvKgpAQCAtMzU5LDYgKzM1MSwxMiBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAl9CisKKwkvKgorCSAqIFVwZGF0ZSBjaGFuZ2VkIHN1cGVyYmxvY2sgZmllbGRzIHRyYW5zYWN0aW9uYWxseS4gVGhlc2UgYXJlIG5vdAorCSAqIHNlZW4gYnkgdGhlIHJlc3Qgb2YgdGhlIHdvcmxkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgYXBwbGllcworCSAqIHRoZW0gYXRvbWljYWxseSB0byB0aGUgc3VwZXJibG9jay4KKwkgKi8KIAlpZiAobmFnY291bnQgPiBvYWdjb3VudCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0FHQ09VTlQsIG5hZ2NvdW50IC0gb2FnY291bnQpOwogCWlmIChuYiA+IG1wLT5tX3NiLnNiX2RibG9ja3MpCkBAIC0zNjksOSArMzY3LDkgQEAKIAlpZiAoZHBjdCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lNQVhQQ1QsIGRwY3QpOwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JfQorCiAJLyogTmV3IGFsbG9jYXRpb24gZ3JvdXBzIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB1cGRhdGUgbW91bnQgc3RydWN0ICovCiAJaWYgKG5hZ2ltYXgpCiAJCW1wLT5tX21heGFnaSA9IG5hZ2ltYXg7CkBAIC0zODEsNiArMzc5LDggQEAKIAkJbXAtPm1fbWF4aWNvdW50ID0gaWNvdW50IDw8IG1wLT5tX3NiLnNiX2lub3BibG9nOwogCX0gZWxzZQogCQltcC0+bV9tYXhpY291bnQgPSAwOworCisJLyogdXBkYXRlIHNlY29uZGFyeSBzdXBlcmJsb2Nrcy4gKi8KIAlmb3IgKGFnbm8gPSAxOyBhZ25vIDwgbmFnY291bnQ7IGFnbm8rKykgewogCQllcnJvciA9IHhmc19yZWFkX2J1ZihtcCwgbXAtPm1fZGRldl90YXJncCwKIAkJCQkgIFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIFhGU19TQl9CTE9DSyhtcCkpLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggY2I5MDdiYS4uOWQ4ODRjMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJZCA9IFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIGFnYm5vICsgKGogKiBibGtzX3Blcl9jbHVzdGVyKSk7CiAJCWZidWYgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgZCwKIAkJCQkJIG1wLT5tX2JzaXplICogYmxrc19wZXJfY2x1c3RlciwKLQkJCQkJIFhGU19CVUZfTE9DSyk7CisJCQkJCSBYQkZfTE9DSyk7CiAJCUFTU0VSVChmYnVmKTsKIAkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGZidWYpKTsKIApAQCAtMjUzLDYgKzI1Myw3IEBACiAJeGZzX2FnaW5vX3QJdGhpc2lubzsJLyogY3VycmVudCBpbm9kZSBudW1iZXIsIGZvciBsb29wICovCiAJaW50CQlpc2FsaWduZWQgPSAwOwkvKiBpbm9kZSBhbGxvY2F0aW9uIGF0IHN0cmlwZSB1bml0ICovCiAJCQkJCS8qIGJvdW5kYXJ5ICovCisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCiAJYXJncy50cCA9IHRwOwogCWFyZ3MubXAgPSB0cC0+dF9tb3VudHA7CkBAIC0zODIsOSArMzgzLDkgQEAKIAluZXdpbm8gPSBYRlNfT0ZGQk5PX1RPX0FHSU5PKGFyZ3MubXAsIGFyZ3MuYWdibm8sIDApOwogCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfY291bnQsIG5ld2xlbik7CiAJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIG5ld2xlbik7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5tcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47Ci0JdXBfcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOworCXBhZyA9IHhmc19wZXJhZ19nZXQoYXJncy5tcCwgYWdubyk7CisJcGFnLT5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCWFnaS0+YWdpX25ld2lubyA9IGNwdV90b19iZTMyKG5ld2lubyk7CiAKIAkvKgpAQCAtNDg2LDkgKzQ4Nyw4IEBACiAJICovCiAJYWdubyA9IHBhZ25vOwogCWZsYWdzID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJZm9yICg7OykgewotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCQlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCQlpZiAoeGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKSkgewogCQkJCWFnYnAgPSBOVUxMOwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCQkJCWFnYnAgPSBOVUxMOwogCQkJCQlnb3RvIG5leHRhZzsKIAkJCQl9Ci0JCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkJcmV0dXJuIGFnYnA7CiAJCQl9CiAJCX0KQEAgLTUzNSwyMiArNTM1LDE5IEBACiAJCWlmIChhZ2JwKQogCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdicCk7CiBuZXh0YWc6CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJLyoKIAkJICogTm8gcG9pbnQgaW4gaXRlcmF0aW5nIG92ZXIgdGhlIHJlc3QsIGlmIHdlJ3JlIHNodXR0aW5nCiAJCSAqIGRvd24uCiAJCSAqLwotCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiBOVUxMOwotCQl9CiAJCWFnbm8rKzsKIAkJaWYgKGFnbm8gPj0gYWdjb3VudCkKIAkJCWFnbm8gPSAwOwogCQlpZiAoYWdubyA9PSBwYWdubykgewotCQkJaWYgKGZsYWdzID09IDApIHsKLQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJaWYgKGZsYWdzID09IDApCiAJCQkJcmV0dXJuIE5VTEw7Ci0JCQl9CiAJCQlmbGFncyA9IDA7CiAJCX0KIAl9CkBAIC02NzIsNiArNjY5LDcgQEAKIAl4ZnNfYWdudW1iZXJfdAl0YWdubzsJCS8qIHRlc3RpbmcgYWxsb2NhdGlvbiBncm91cCBudW1iZXIgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJKnRjdXI7CQkvKiB0ZW1wIGN1cnNvciAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgdHJlYzsJLyogdGVtcCBpbm9kZSBhbGxvY2F0aW9uIHJlY29yZCAqLworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCiAJaWYgKCpJT19hZ2JwID09IE5VTEwpIHsKQEAgLTc3MSwxMyArNzY5LDEzIEBACiAJCQkqaW5vcCA9IE5VTExGU0lOTzsKIAkJCXJldHVybiBub3Jvb20gPyBFTk9TUEMgOiAwOwogCQl9Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJaWYgKG1wLT5tX3BlcmFnW3RhZ25vXS5wYWdpX2lub2Rlb2sgPT0gMCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgdGFnbm8pOworCQlpZiAocGFnLT5wYWdpX2lub2Rlb2sgPT0gMCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJZ290byBuZXh0YWc7CiAJCX0KIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgdGFnbm8sICZhZ2JwKTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG5leHRhZzsKIAkJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CkBAIC03OTAsNiArNzg4LDcgQEAKIAkgKi8KIAlhZ25vID0gdGFnbm87CiAJKklPX2FnYnAgPSBOVUxMOworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCiAgcmVzdGFydF9wYWdubzoKIAljdXIgPSB4ZnNfaW5vYnRfaW5pdF9jdXJzb3IobXAsIHRwLCBhZ2JwLCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9zZXFubykpOwpAQCAtODA4LDcgKzgwNyw2IEBACiAJICogSWYgaW4gdGhlIHNhbWUgQUcgYXMgdGhlIHBhcmVudCwgdHJ5IHRvIGdldCBuZWFyIHRoZSBwYXJlbnQuCiAJICovCiAJaWYgKHBhZ25vID09IGFnbm8pIHsKLQkJeGZzX3BlcmFnX3QJKnBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKIAkJaW50CQlkb25lbGVmdDsJLyogZG9uZSwgdG8gdGhlIGxlZnQgKi8KIAkJaW50CQlkb25lcmlnaHQ7CS8qIGRvbmUsIHRvIHRoZSByaWdodCAqLwogCQlpbnQJCXNlYXJjaGRpc3RhbmNlID0gMTA7CkBAIC0xMDA2LDkgKzEwMDQsNyBAQAogCQlnb3RvIGVycm9yMDsKIAliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgLTEpOwogCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9GUkVFQ09VTlQpOwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQltcC0+bV9wZXJhZ1t0YWdub10ucGFnaV9mcmVlY291bnQtLTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCXBhZy0+cGFnaV9mcmVlY291bnQtLTsKIAogCWVycm9yID0geGZzX2NoZWNrX2FnaV9mcmVlY291bnQoY3VyLCBhZ2kpOwogCWlmIChlcnJvcikKQEAgLTEwMTYsMTIgKzEwMTIsMTQgQEAKIAogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JRlJFRSwgLTEpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAkqaW5vcCA9IGlubzsKIAlyZXR1cm4gMDsKIGVycm9yMToKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcih0Y3VyLCBYRlNfQlRSRUVfRVJST1IpOwogZXJyb3IwOgogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX0VSUk9SKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMDUyLDYgKzEwNTAsNyBAQAogCXhmc19tb3VudF90CSptcDsJLyogbW91bnQgc3RydWN0dXJlIGZvciBmaWxlc3lzdGVtICovCiAJaW50CQlvZmY7CS8qIG9mZnNldCBvZiBpbm9kZSBpbiBpbm9kZSBjaHVuayAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgcmVjOwkvKiBidHJlZSByZWNvcmQgKi8KKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAltcCA9IHRwLT50X21vdW50cDsKIApAQCAtMTA4OCw5ICsxMDg3LDcgQEAKIAkvKgogCSAqIEdldCB0aGUgYWxsb2NhdGlvbiBncm91cCBoZWFkZXIuCiAJICovCi0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWlmIChlcnJvcikgewogCQljbW5fZXJyKENFX1dBUk4sCiAJCQkieGZzX2RpZnJlZTogeGZzX2lhbGxvY19yZWFkX2FnaSgpIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0xMTU3LDkgKzExNTQsOSBAQAogCQliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2NvdW50LCAtaWxlbik7CiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAtKGlsZW4gLSAxKSk7CiAJCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9DT1VOVCB8IFhGU19BR0lfRlJFRUNPVU5UKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCAtPSBpbGVuIC0gMTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQgLT0gaWxlbiAtIDE7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lDT1VOVCwgLWlsZW4pOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIC0oaWxlbiAtIDEpKTsKIApAQCAtMTE4OCw5ICsxMTg1LDkgQEAKIAkJICovCiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAxKTsKIAkJeGZzX2lhbGxvY19sb2dfYWdpKHRwLCBhZ2JwLCBYRlNfQUdJX0ZSRUVDT1VOVCk7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJbXAtPm1fcGVyYWdbYWdub10ucGFnaV9mcmVlY291bnQrKzsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQrKzsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIDEpOwogCX0KIApAQCAtMTMxMiw5ICsxMzA5LDcgQEAKIAkJeGZzX2J1Zl90CSphZ2JwOwkvKiBhZ2kgYnVmZmVyICovCiAJCWludAkJaTsJLyogdGVtcCBzdGF0ZSAqLwogCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgYWdubywgJmFnYnApOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwgInhmc19pbWFwOiAiCiAJCQkJCSJ4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgIgpAQCAtMTM3OSw3ICsxMzc0LDYgQEAKIAkJCVhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDggKzE1MTcsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlhZ2kgPSBYRlNfQlVGX1RPX0FHSSgqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107Ci0KKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCXBhZy0+cGFnaV9mcmVlY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9mcmVlY291bnQpOwogCQlwYWctPnBhZ2lfY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9jb3VudCk7CkBAIC0xNTM3LDYgKzE1MzAsNyBAQAogCSAqLwogCUFTU0VSVChwYWctPnBhZ2lfZnJlZWNvdW50ID09IGJlMzJfdG9fY3B1KGFnaS0+YWdpX2ZyZWVjb3VudCkgfHwKIAkJWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCAxNTVlNzk4Li5lMjgxZWI0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCXJldHVybiBFSU5WQUw7CiAKIAkvKiBnZXQgdGhlIHBlcmFnIHN0cnVjdHVyZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBpbm9kZSBjYXBhYmxlICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlubykpOwogCWlmICghcGFnLT5wYWdpX2lub2Rlb2spCiAJCXJldHVybiBFSU5WQUw7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKQEAgLTM5OCw3ICszOTgsNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9lcnJvcl9vcl9hZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkqaXBwID0gaXA7CiAKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlkZWxheSgxKTsKIAkJZ290byBhZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00ODgsMTIgKzQ4OCwxMiBAQAogCSAqIGFkZGVkIHRvIHRoZSB0cmVlIGFzc2VydCB0aGF0IGl0J3MgYmVlbiB0aGVyZSBiZWZvcmUgdG8gY2F0Y2gKIAkgKiBwcm9ibGVtcyB3aXRoIHRoZSBpbm9kZSBsaWZlIHRpbWUgZWFybHkgb24uCiAJICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlpZiAoIXJhZGl4X3RyZWVfZGVsZXRlKCZwYWctPnBhZ19pY2lfcm9vdCwgYWdpbm8pKQogCQlBU1NFUlQoMCk7CiAJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkvKgogCSAqIEhlcmUgd2UgZG8gYW4gKGFsbW9zdCkgc3B1cmlvdXMgaW5vZGUgbG9jayBpbiBvcmRlciB0byBjb29yZGluYXRlCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggZWY3N2ZkOC4uZmEzMTM2MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQkJImFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCiAJCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEZTX0JVRl9UUllMT0NLKTsKKwkJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIzOSw3ICsyMzksNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhGU19CVUZfTE9DSywgaW1hcF9mbGFncyk7CisJZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhCRl9MT0NLLCBpbWFwX2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjg1LDcgKzI4NSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghYnApIHsKLQkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhGU19CVUZfVFJZTE9DSyk7CisJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCUFTU0VSVCh0cCA9PSBOVUxMKTsKIAkJKmJwcCA9IE5VTEw7CiAJCXJldHVybiBFQUdBSU47CkBAIC04MDcsNyArODA3LDcgQEAKIAkgKiBHZXQgcG9pbnRlcnMgdG8gdGhlIG9uLWRpc2sgaW5vZGUgYW5kIHRoZSBidWZmZXIgY29udGFpbmluZyBpdC4KIAkgKi8KIAllcnJvciA9IHhmc19pbWFwX3RvX2JwKG1wLCB0cCwgJmlwLT5pX2ltYXAsICZicCwKLQkJCSAgICAgICBYRlNfQlVGX0xPQ0ssIGlnZXRfZmxhZ3MpOworCQkJICAgICAgIFhCRl9MT0NLLCBpZ2V0X2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGlwLT5pX2ltYXAuaW1fYm9mZnNldCk7CkBAIC0xNzUxLDcgKzE3NTEsNyBAQAogCQkgKiBIZXJlIHdlIHB1dCB0aGUgaGVhZCBwb2ludGVyIGludG8gb3VyIG5leHQgcG9pbnRlciwKIAkJICogYW5kIHRoZW4gd2UgZmFsbCB0aHJvdWdoIHRvIHBvaW50IHRoZSBoZWFkIGF0IHVzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE4MzMsNyArMTgzMyw3IEBACiAJCSAqIG9mIGRlYWxpbmcgd2l0aCB0aGUgYnVmZmVyIHdoZW4gdGhlcmUgaXMgbm8gbmVlZCB0bwogCQkgKiBjaGFuZ2UgaXQuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMTg5NSw3ICsxODk1LDcgQEAKIAkJICogTm93IGxhc3RfaWJwIHBvaW50cyB0byB0aGUgYnVmZmVyIHByZXZpb3VzIHRvIHVzIG9uCiAJCSAqIHRoZSB1bmxpbmtlZCBsaXN0LiAgUHVsbCB1cyBmcm9tIHRoZSBsaXN0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTE5NDYsOCArMTk0Niw5IEBACiAJeGZzX2lub2RlX3QJCSppcCwgKippcF9mb3VuZDsKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwOwogCXhmc19sb2dfaXRlbV90CQkqbGlwOwotCXhmc19wZXJhZ190CQkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW51bSk7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpbnVtKSk7CiAJaWYgKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSA+PSBYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSkgewogCQlibGtzX3Blcl9jbHVzdGVyID0gMTsKIAkJbmlub2RlcyA9IG1wLT5tX3NiLnNiX2lub3BibG9jazsKQEAgLTIwMzksNyArMjA0MCw3IEBACiAKIAkJYnAgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgYmxrbm8sIAogCQkJCQltcC0+bV9ic2l6ZSAqIGJsa3NfcGVyX2NsdXN0ZXIsCi0JCQkJCVhGU19CVUZfTE9DSyk7CisJCQkJCVhCRl9MT0NLKTsKIAogCQlwcmVfZmx1c2hlZCA9IDA7CiAJCWxpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKQEAgLTIwODgsNyArMjA4OSw3IEBACiAJfQogCiAJa21lbV9mcmVlKGlwX2ZvdW5kKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogLyoKQEAgLTIxNTAsNyArMjE1MSw3IEBACiAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAKLQllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCWVycm9yID0geGZzX2l0b2JwKGlwLT5pX21vdW50LCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjQ4MywxMyArMjQ4NCwxNiBAQAogCQlyZXR1cm47CiAKIAkvKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHRvIHN0YXJ0IHRoZSB1bnBpbm5pbmcgSS9PICovCi0JeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikgPwotCQkJCWlpcC0+aWxpX2xhc3RfbHNuIDogMCwgWEZTX0xPR19GT1JDRSk7CisJaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikKKwkJeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsIGlpcC0+aWxpX2xhc3RfbHNuLCAwKTsKKwllbHNlCisJCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIDApOworCiAJaWYgKHdhaXQpCiAJCXdhaXRfZXZlbnQoaXAtPmlfaXBpbl93YWl0LCAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAordm9pZAogeGZzX2l1bnBpbl93YWl0KAogCXhmc19pbm9kZV90CSppcCkKIHsKQEAgLTI2NzUsNyArMjY3OSw3IEBACiAJeGZzX2J1Zl90CSpicCkKIHsKIAl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0JeGZzX3BlcmFnX3QJCSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAl1bnNpZ25lZCBsb25nCQlmaXJzdF9pbmRleCwgbWFzazsKIAl1bnNpZ25lZCBsb25nCQlpbm9kZXNfcGVyX2NsdXN0ZXI7CiAJaW50CQkJaWxpc3Rfc2l6ZTsKQEAgLTI2ODYsNiArMjY5MCw3IEBACiAJaW50CQkJYnVmd2FzZGVsd3JpOwogCWludAkJCWk7CiAKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCUFTU0VSVChwYWctPnBhZ2lfaW5vZGVvayk7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKIApAQCAtMjY5Myw3ICsyNjk4LDcgQEAKIAlpbGlzdF9zaXplID0gaW5vZGVzX3Blcl9jbHVzdGVyICogc2l6ZW9mKHhmc19pbm9kZV90ICopOwogCWlsaXN0ID0ga21lbV9hbGxvYyhpbGlzdF9zaXplLCBLTV9NQVlGQUlMfEtNX05PRlMpOwogCWlmICghaWxpc3QpCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9wdXQ7CiAKIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKIAlmaXJzdF9pbmRleCA9IFhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubykgJiBtYXNrOwpAQCAtMjc2Miw2ICsyNzY3LDggQEAKIG91dF9mcmVlOgogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJa21lbV9mcmVlKGlsaXN0KTsKK291dF9wdXQ6CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogCiAKQEAgLTI4MDUsNiArMjgxMiw3IEBACiAJICovCiAJeGZzX2lmbHVzaF9hYm9ydChpcSk7CiAJa21lbV9mcmVlKGlsaXN0KTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogfQogCkBAIC0yODI3LDggKzI4MzUsNiBAQAogCXhmc19kaW5vZGVfdAkJKmRpcDsKIAl4ZnNfbW91bnRfdAkJKm1wOwogCWludAkJCWVycm9yOwotCWludAkJCW5vYmxvY2sgPSAoZmxhZ3MgPT0gWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKLQllbnVtIHsgSU5UX0RFTFdSSSA9ICgxIDw8IDApLCBJTlRfQVNZTkMgPSAoMSA8PCAxKSB9OwogCiAJWEZTX1NUQVRTX0lOQyh4c19pZmx1c2hfY291bnQpOwogCkBAIC0yODQxLDE1ICsyODQ3LDYgQEAKIAltcCA9IGlwLT5pX21vdW50OwogCiAJLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXNuJ3QgZGlydHksIHRoZW4ganVzdCByZWxlYXNlIHRoZSBpbm9kZSBmbHVzaCBsb2NrIGFuZAotCSAqIGRvIG5vdGhpbmcuCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKLQkJeGZzX2lmdW5sb2NrKGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKIAkgKiBXZSBjYW4ndCBmbHVzaCB0aGUgaW5vZGUgdW50aWwgaXQgaXMgdW5waW5uZWQsIHNvIHdhaXQgZm9yIGl0IGlmIHdlCiAJICogYXJlIGFsbG93ZWQgdG8gYmxvY2suICBXZSBrbm93IG5vb25lIG5ldyBjYW4gcGluIGl0LCBiZWNhdXNlIHdlIGFyZQogCSAqIGhvbGRpbmcgdGhlIGlub2RlIGxvY2sgc2hhcmVkIGFuZCB5b3UgbmVlZCB0byBob2xkIGl0IGV4Y2x1c2l2ZWx5IHRvCkBAIC0yODYwLDcgKzI4NTcsNyBAQAogCSAqIGluIHRoZSBzYW1lIGNsdXN0ZXIgYXJlIGRpcnR5LCB0aGV5IHdpbGwgcHJvYmFibHkgd3JpdGUgdGhlIGlub2RlCiAJICogb3V0IGZvciB1cyBpZiB0aGV5IG9jY3VyIGFmdGVyIHRoZSBsb2cgZm9yY2UgY29tcGxldGVzLgogCSAqLwotCWlmIChub2Jsb2NrICYmIHhmc19pcGluY291bnQoaXApKSB7CisJaWYgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIHhmc19pcGluY291bnQoaXApKSB7CiAJCXhmc19pdW5waW5fbm93YWl0KGlwKTsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIEVBR0FJTjsKQEAgLTI4OTQsNjAgKzI4OTEsMTAgQEAKIAl9CiAKIAkvKgotCSAqIERlY2lkZSBob3cgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZCBvdXQuICBUaGlzIGlzIGRvbmUgYmVmb3JlCi0JICogdGhlIGNhbGwgdG8geGZzX2lmbHVzaF9pbnQgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIHplcm9lZCBieSBpdC4KLQkgKi8KLQlpZiAoaWlwICE9IE5VTEwgJiYgaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgIT0gMCkgewotCQkvKgotCQkgKiBGbHVzaCBvdXQgdGhlIGlub2RlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbnMKLQkJICogb2YgdGhlIGNhbGxlci4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGUgY2FsbGVyIGhhcyBnaXZlbgotCQkgKiB1cyBhIGNob2ljZSBjaG9vc2UgdGhlIG5vbi1kZWx3cmkgY2FzZS4gIFRoaXMgaXMgYmVjYXVzZQotCQkgKiB0aGUgaW5vZGUgaXMgaW4gdGhlIEFJTCBhbmQgd2UgbmVlZCB0byBnZXQgaXQgb3V0IHNvb24uCi0JCSAqLwotCQlzd2l0Y2ggKGZsYWdzKSB7Ci0JCWNhc2UgWEZTX0lGTFVTSF9TWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfU1lOQzoKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkM6Ci0JCQlmbGFncyA9IElOVF9BU1lOQzsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJOgotCQkJZmxhZ3MgPSBJTlRfREVMV1JJOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZmxhZ3MpIHsKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX1NZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSToKLQkJCWZsYWdzID0gSU5UX0RFTFdSSTsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQkJZmxhZ3MgPSBJTlRfQVNZTkM7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX1NZTkM6Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKIAkgKiBHZXQgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBvbi1kaXNrIGlub2RlLgogCSAqLwogCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwgJmRpcCwgJmJwLAotCQkJCW5vYmxvY2sgPyBYRlNfQlVGX1RSWUxPQ0sgOiBYRlNfQlVGX0xPQ0spOworCQkJCShmbGFncyAmIFNZTkNfV0FJVCkgPyBYQkZfTE9DSyA6IFhCRl9UUllMT0NLKTsKIAlpZiAoZXJyb3IgfHwgIWJwKSB7CiAJCXhmc19pZnVubG9jayhpcCk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTI5NjUsNyArMjkxMiw3IEBACiAJICogZ2V0IHN0dWNrIHdhaXRpbmcgaW4gdGhlIHdyaXRlIGZvciB0b28gbG9uZy4KIAkgKi8KIAlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCi0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCiAJLyoKIAkgKiBpbm9kZSBjbHVzdGVyaW5nOgpAQCAtMjk3NSwxMyArMjkyMiwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBjbHVzdGVyX2NvcnJ1cHRfb3V0OwogCi0JaWYgKGZsYWdzICYgSU5UX0RFTFdSSSkgewotCQl4ZnNfYmR3cml0ZShtcCwgYnApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBJTlRfQVNZTkMpIHsKLQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCX0gZWxzZSB7CisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKLQl9CisJZWxzZQorCQl4ZnNfYmR3cml0ZShtcCwgYnApOwogCXJldHVybiBlcnJvcjsKIAogY29ycnVwdF9vdXQ6CkBAIC0zMDE2LDE2ICsyOTYwLDYgQEAKIAlpaXAgPSBpcC0+aV9pdGVtcDsKIAltcCA9IGlwLT5pX21vdW50OwogCi0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlCi0JICogZmx1c2ggbG9jayBhbmQgZG8gbm90aGluZy4KLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgewotCQl4ZnNfaWZ1bmxvY2soaXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBzZXQgKmRpcCA9IGlub2RlJ3MgcGxhY2UgaW4gdGhlIGJ1ZmZlciAqLwogCWRpcCA9ICh4ZnNfZGlub2RlX3QgKil4ZnNfYnVmX29mZnNldChicCwgaXAtPmlfaW1hcC5pbV9ib2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGVjMWYyOGMuLjZjOTEyYjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQyMCwxNiArNDIwLDYgQEAKICNkZWZpbmUgWEZTX0lMT0NLX0RFUChmbGFncykJKCgoZmxhZ3MpICYgWEZTX0lMT0NLX0RFUF9NQVNLKSA+PiBYRlNfSUxPQ0tfU0hJRlQpCiAKIC8qCi0gKiBGbGFncyBmb3IgeGZzX2lmbHVzaCgpCi0gKi8KLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DCTEKLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQwkyCi0jZGVmaW5lCVhGU19JRkxVU0hfU1lOQwkJCTMKLSNkZWZpbmUJWEZTX0lGTFVTSF9BU1lOQwkJNAotI2RlZmluZQlYRlNfSUZMVVNIX0RFTFdSSQkJNQotI2RlZmluZQlYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0sJNgotCi0vKgogICogRmxhZ3MgZm9yIHhmc19pdHJ1bmNhdGVfc3RhcnQoKS4KICAqLwogI2RlZmluZQlYRlNfSVRSVU5DX0RFRklOSVRFCTB4MQpAQCAtNDgzLDYgKzQ3Myw3IEBACiB2b2lkCQl4ZnNfaWV4dF9yZWFsbG9jKHhmc19pbm9kZV90ICosIGludCwgaW50KTsKIHZvaWQJCXhmc19pcGluKHhmc19pbm9kZV90ICopOwogdm9pZAkJeGZzX2l1bnBpbih4ZnNfaW5vZGVfdCAqKTsKK3ZvaWQJCXhmc19pdW5waW5fd2FpdCh4ZnNfaW5vZGVfdCAqKTsKIGludAkJeGZzX2lmbHVzaCh4ZnNfaW5vZGVfdCAqLCB1aW50KTsKIHZvaWQJCXhmc19pY2hndGltZSh4ZnNfaW5vZGVfdCAqLCBpbnQpOwogdm9pZAkJeGZzX2xvY2tfaW5vZGVzKHhmc19pbm9kZV90ICoqLCBpbnQsIHVpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCBmMzg4NTVkLi5kNGRjMDYzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmlpcC0+aWxpX2Zvcm1hdDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRk9STUFUKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lGT1JNQVQ7CiAJdmVjcCsrOwogCW52ZWNzCSAgICAgPSAxOwogCkBAIC0yNzksNyArMjc5LDcgQEAKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQ09SRSk7CisJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQ09SRTsKIAl2ZWNwKys7CiAJbnZlY3MrKzsKIAlpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyB8PSBYRlNfSUxPR19DT1JFOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCQkJdmVjcC0+aV9hZGRyID0KIAkJCQkJKGNoYXIgKikoaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50cyk7CiAJCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9kZi5pZl9ieXRlczsKLQkJCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lFWFQpOworCQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUVYVDsKIAkJCX0gZWxzZQogI2VuZGlmCiAJCQl7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpZXh0X2J1ZmZlcjsKIAkJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAogCQkJCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRVhUKTsKKwkJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lFWFQ7CiAJCQl9CiAJCQlBU1NFUlQodmVjcC0+aV9sZW4gPD0gaXAtPmlfZGYuaWZfYnl0ZXMpOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IHZlY3AtPmlfbGVuOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJCQlBU1NFUlQoaXAtPmlfZGYuaWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfZGYuaWZfYnJvb3Q7CiAJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQlJPT1Q7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCQlBU1NFUlQoKGlwLT5pX2RmLmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSBkYXRhX2J5dGVzKSk7CiAJCQl2ZWNwLT5pX2xlbiA9IChpbnQpZGF0YV9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUxPQ0FMKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUxPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCQkJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwKIAkJCQkJWEZTX0FUVFJfRk9SSyk7CiAjZW5kaWYKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9IHZlY3AtPmlfbGVuOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfYWZwLT5pZl9icm9vdDsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9CUk9PVDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2FzaXplID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKQEAgLTUxNiw3ICs1MTYsNyBAQAogCQkJQVNTRVJUKChpcC0+aV9hZnAtPmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfYWZwLT5pZl9yZWFsX2J5dGVzID09IGRhdGFfYnl0ZXMpKTsKIAkJCXZlY3AtPmlfbGVuID0gKGludClkYXRhX2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQVRUUl9MT0NBTCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0xPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTYwMiwzMyArNjAyLDIwIEBACiAKIAlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgewogCQkvKgotCQkgKiBJZiBzb21lb25lIGVsc2UgaXNuJ3QgYWxyZWFkeSB0cnlpbmcgdG8gcHVzaCB0aGUgaW5vZGUKLQkJICogYnVmZmVyLCB3ZSBnZXQgdG8gZG8gaXQuCisJCSAqIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byB0aGUgYmFja2luZyBidWZmZXIsCisJCSAqIGxlYXZlIGl0IGxvY2tlZCBpbiBzaGFyZWQgbW9kZSwgcHVzaGJ1ZiByb3V0aW5lIHdpbGwKKwkJICogdW5sb2NrIGl0LgogCQkgKi8KLQkJaWYgKGlpcC0+aWxpX3B1c2hidWZfZmxhZyA9PSAwKSB7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAxOwotI2lmZGVmIERFQlVHCi0JCQlpaXAtPmlsaV9wdXNoX293bmVyID0gY3VycmVudF9waWQoKTsKLSNlbmRpZgotCQkJLyoKLQkJCSAqIElub2RlIGlzIGxlZnQgbG9ja2VkIGluIHNoYXJlZCBtb2RlLgotCQkJICogUHVzaGJ1ZiByb3V0aW5lIGdldHMgdG8gdW5sb2NrIGl0LgotCQkJICovCi0JCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBob2xkIHRoZSBBSUwgbG9jaywgc28gd2UgbXVzdCBzcGVjaWZ5IHRoZQotCQkJICogTk9OT1RJRlkgZmxhZyBzbyB0aGF0IHdlIHdvbid0IGRvdWJsZSB0cmlwLgotCQkJICovCi0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRHxYRlNfSVVOTE9DS19OT05PVElGWSk7Ci0JCQlyZXR1cm4gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCX0KLQkJLyogTk9UUkVBQ0hFRCAqLworCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAkvKiBTdGFsZSBpdGVtcyBzaG91bGQgZm9yY2Ugb3V0IHRoZSBpY2xvZyAqLwogCWlmIChpcC0+aV9mbGFncyAmIFhGU19JU1RBTEUpIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKKwkJLyoKKwkJICogd2UgaG9sZCB0aGUgQUlMIGxvY2sgLSBub3RpZnkgdGhlIHVubG9jayByb3V0aW5lIG9mIHRoaXMKKwkJICogc28gaXQgZG9lc24ndCB0cnkgdG8gZ2V0IHRoZSBsb2NrIGFnYWluLgorCQkgKi8KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUR8WEZTX0lVTkxPQ0tfTk9OT1RJRlkpOwogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwogCX0KQEAgLTc0NiwxMSArNzMzLDggQEAKICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgeGZzX3RyYW5zX3B1c2hfYWlsKCksIHdoZW4gSU9QX1RSWUxPQ0sKICAqIGZhaWxlZCB0byBnZXQgdGhlIGlub2RlIGZsdXNoIGxvY2sgYnV0IGRpZCBnZXQgdGhlIGlub2RlIGxvY2tlZCBTSEFSRUQuCiAgKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBzZWUgaWYgdGhlIGlub2RlIGJ1ZmZlciBpcyBpbmNvcmUsIGFuZCBpZiBzbyB3aGV0aGVyIGl0J3MKLSAqIG1hcmtlZCBkZWxheWVkIHdyaXRlLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIGluaXRpYXRlIGEgYmF3cml0ZSBvbiB0aGF0Ci0gKiBidWZmZXIgdG8gZXhwZWRpdGUgdGhlIHByb2Nlc3MuCi0gKgotICogV2UgYXJlbid0IGhvbGRpbmcgdGhlIEFJTCBsb2NrIChvciB0aGUgZmx1c2ggbG9jaykgd2hlbiB0aGlzIGdldHMgY2FsbGVkLAotICogc28gaXQgaXMgaW5oZXJlbnRseSByYWNlLXkuCisgKiBtYXJrZWQgZGVsYXllZCB3cml0ZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB3ZSdsbCBwcm9tb3RlIGl0IGFuZCB0aGF0IHdpbGwKKyAqIGFsbG93IHRoZSBjYWxsZXIgdG8gd3JpdGUgdGhlIGJ1ZmZlciBieSB0cmlnZ2VyaW5nIHRoZSB4ZnNidWZkIHRvIHJ1bi4KICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3B1c2hidWYoCkBAIC03NTksODIgKzc0MywzMCBAQAogCXhmc19pbm9kZV90CSppcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlpcCA9IGlpcC0+aWxpX2lub2RlOwotCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19TSEFSRUQpKTsKIAogCS8qCi0JICogVGhlIGlsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKGlpcC0+aWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQoaWlwLT5pbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgYSBmbHVzaCBpcyBub3QgaW4gcHJvZ3Jlc3MgYW55bW9yZSwgY2hhbmNlcyBhcmUgdGhhdCB0aGUKIAkgKiBpbm9kZSB3YXMgdGFrZW4gb2ZmIHRoZSBBSUwuIFNvLCBqdXN0IGdldCBvdXQuCiAJICovCiAJaWYgKGNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpIHx8CiAJICAgICgoaWlwLT5pbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJcmV0dXJuOwogCX0KIAogCW1wID0gaXAtPmlfbW91bnQ7CiAJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGlpcC0+aWxpX2Zvcm1hdC5pbGZfYmxrbm8sCi0JCSAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2xlbiwgWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJICAgIGlpcC0+aWxpX2Zvcm1hdC5pbGZfbGVuLCBYQkZfVFJZTE9DSyk7CiAKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQkvKgotCQkJICogV2Ugd2VyZSByYWNpbmcgd2l0aCBpZmx1c2ggYmVjYXVzZSB3ZSBkb24ndCBob2xkCi0JCQkgKiB0aGUgQUlMIGxvY2sgb3IgdGhlIGZsdXNoIGxvY2suIEhvd2V2ZXIsIGF0IHRoaXMgcG9pbnQsCi0JCQkgKiB3ZSBoYXZlIHRoZSBidWZmZXIsIGFuZCB3ZSBrbm93IHRoYXQgaXQncyBkaXJ0eS4KLQkJCSAqIFNvLCBpdCdzIHBvc3NpYmxlIHRoYXQgaWZsdXNoIHJhY2VkIHdpdGggdXMsIGFuZAotCQkJICogdGhpcyBpdGVtIGlzIGFscmVhZHkgdGFrZW4gb2ZmIHRoZSBBSUwuCi0JCQkgKiBJZiBub3QsIHdlIGNhbiBmbHVzaCBpdCBhc3luYy4KLQkJCSAqLwotCQkJZG9wdXNoID0gKChpaXAtPmlsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgJiYKLQkJCQkgICFjb21wbGV0aW9uX2RvbmUoJmlwLT5pX2ZsdXNoKSk7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCi0JCQl0cmFjZV94ZnNfaW5vZGVfaXRlbV9wdXNoKGJwLCBfUkVUX0lQXyk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCQkieGZzX2lub2RlX2l0ZW1fcHVzaGJ1ZjogcHVzaGJ1ZiBlcnJvciAlZCBvbiBpaXAgJXAsIGJwICVwIiwKLQkJCQkJCQllcnJvciwgaWlwLCBicCk7Ci0JCQl9IGVsc2UgewotCQkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCXhmc19idWZfcmVsc2UoYnApOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgcmVzZXR0aW5nIHB1c2hidWYgZmxhZyB0b28gZWFybHkgKGFib3ZlKS4KLQkgKiBFdmVuIHRob3VnaCBpbiB0aGVvcnkgd2UgY2FuIGRvIGl0IGFzIHNvb24gYXMgd2UgaGF2ZSB0aGUgYnVmbG9jaywKLQkgKiB3ZSBkb24ndCB3YW50IG90aGVycyB0byBiZSBkb2luZyB3b3JrIG5lZWRsZXNzbHkuIFRoZXknbGwgY29tZSB0bwotCSAqIHRoaXMgZnVuY3Rpb24gdGhpbmtpbmcgdGhhdCBwdXNoaW5nIHRoZSBidWZmZXIgaXMgdGhlaXIKLQkgKiByZXNwb25zaWJpbGl0eSBvbmx5IHRvIGZpbmQgdGhhdCB0aGUgYnVmZmVyIGlzIHN0aWxsIGxvY2tlZCBieQotCSAqIGFub3RoZXIgZG9pbmcgdGhlIHNhbWUgdGhpbmcKLQkgKi8KLQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwlpZiAoIWJwKQorCQlyZXR1cm47CisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKKwkJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJeGZzX2J1Zl9yZWxzZShicCk7CiAJcmV0dXJuOwogfQogCkBAIC04NjcsMTAgKzc5OSwxNCBAQAogCSAgICAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKTsKIAogCS8qCi0JICogV3JpdGUgb3V0IHRoZSBpbm9kZS4gIFRoZSBjb21wbGV0aW9uIHJvdXRpbmUgKCdpZmx1c2hfZG9uZScpIHdpbGwKLQkgKiBwdWxsIGl0IGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiwgdW5sb2NrIHRoZSBmbHVzaCBsb2NrLgorCSAqIFB1c2ggdGhlIGlub2RlIHRvIGl0J3MgYmFja2luZyBidWZmZXIuIFRoaXMgd2lsbCBub3QgcmVtb3ZlIHRoZQorCSAqIGlub2RlIGZyb20gdGhlIEFJTCAtIGEgZnVydGhlciBwdXNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBhCisJICogYnVmZmVyIHB1c2guIEhvd2V2ZXIsIHRoaXMgYWxsb3dzIGFsbCB0aGUgZGlydHkgaW5vZGVzIHRvIGJlIHB1c2hlZAorCSAqIHRvIHRoZSBidWZmZXIgYmVmb3JlIGl0IGlzIHB1c2hlZCB0byBkaXNrLiBUSGUgYnVmZmVyIElPIGNvbXBsZXRpb24KKwkgKiB3aWxsIHB1bGwgdGggZWlub2RlIGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiBhbmQgdW5sb2NrIHRoZSBmbHVzaAorCSAqIGxvY2suCiAJICovCi0JKHZvaWQpIHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfQVNZTkMpOworCSh2b2lkKSB4ZnNfaWZsdXNoKGlwLCAwKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAKIAlyZXR1cm47CkBAIC05MzQsNyArODcwLDYgQEAKIAkvKgogCSAgIFdlIGhhdmUgemVyb2VkIG1lbW9yeS4gTm8gbmVlZCAuLi4KIAkgICBpaXAtPmlsaV9leHRlbnRzX2J1ZiA9IE5VTEw7Ci0JICAgaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkgKi8KIAogCWlpcC0+aWxpX2Zvcm1hdC5pbGZfdHlwZSA9IFhGU19MSV9JTk9ERTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggY2M4ZGYxYS4uOWE0Njc5NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKQEAgLTE0NCwxMiArMTQ0LDYgQEAKIAkJCQkJCSAgICAgIGRhdGEgZXh0cyAqLwogCXN0cnVjdCB4ZnNfYm1idF9yZWMJKmlsaV9hZXh0ZW50c19idWY7IC8qIGFycmF5IG9mIGxvZ2dlZAogCQkJCQkJICAgICAgYXR0ciBleHRzICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgaWxpX3B1c2hidWZfZmxhZzsgIC8qIG9uZSBiaXQgdXNlZCBpbiBwdXNoX2FpbCAqLwotCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdCAgICAgICAgICAgICAgICBpbGlfcHVzaF9vd25lcjsgICAgLyogb25lIHdobyBzZXRzIHB1c2hidWZfZmxhZwotCQkJCQkJICAgICAgYWJvdmUgZ2V0cyB0byBwdXNoIHRoZSBidWYgKi8KLSNlbmRpZgogI2lmZGVmIFhGU19UUkFOU19ERUJVRwogCWludAkJCWlsaV9yb290X3NpemU7CiAJY2hhcgkJCSppbGlfb3JpZ19yb290OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pdGFibGUuYyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKaW5kZXggNjJlZmFiMi4uM2FmMDIzMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pdGFibGUuYworKysgYi9mcy94ZnMveGZzX2l0YWJsZS5jCkBAIC00MDgsOCArNDA4LDEwIEBACiAJCShYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CiAJbmltYXNrID0gfihuaWNsdXN0ZXIgLSAxKTsKIAluYmNsdXN0ZXIgPSBuaWNsdXN0ZXIgPj4gbXAtPm1fc2Iuc2JfaW5vcGJsb2c7Ci0JaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCwKLQkJCQkgICBLTV9TTEVFUCB8IEtNX01BWUZBSUwgfCBLTV9MQVJHRSk7CisJaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCk7CisJaWYgKCFpcmJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKwogCW5pcmJ1ZiA9IGlyYnNpemUgLyBzaXplb2YoKmlyYnVmKTsKIAogCS8qCkBAIC00MjAsOSArNDIyLDcgQEAKIAl3aGlsZSAoWEZTX0JVTEtTVEFUX1VCTEVGVCh1YmxlZnQpICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlicCA9IE5VTEw7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCBOVUxMLCBhZ25vLCAmYWdicCk7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJLyoKIAkJCSAqIFNraXAgdGhpcyBhbGxvY2F0aW9uIGdyb3VwIGFuZCBnbyB0byB0aGUgbmV4dCBvbmUuCkBAIC03MjksNyArNzI5LDcgQEAKIAkvKgogCSAqIERvbmUsIHdlJ3JlIGVpdGhlciBvdXQgb2YgZmlsZXN5c3RlbSBvciBzcGFjZSB0byBwdXQgdGhlIGRhdGEuCiAJICovCi0Ja21lbV9mcmVlKGlyYnVmKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoaXJidWYpOwogCSp1YmNvdW50cCA9IHViZWxlbTsKIAkvKgogCSAqIEZvdW5kIHNvbWUgaW5vZGVzLCByZXR1cm4gdGhlbSBub3cgYW5kIHJldHVybiB0aGUgZXJyb3IgbmV4dCB0aW1lLgpAQCAtODQ5LDkgKzg0OSw3IEBACiAJYWdicCA9IE5VTEw7CiAJd2hpbGUgKGxlZnQgPiAwICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWlmIChhZ2JwID09IE5VTEwpIHsKLQkJCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgTlVMTCwgYWdubywgJmFnYnApOwotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWlmIChlcnJvcikgewogCQkJCS8qCiAJCQkJICogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgQUdJIG9mIHRoaXMgYWcsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCA2MDBiNWIwLi40ZjE2YmU0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkgIChvZmYpICs9IChieXRlcyk7fQogCiAvKiBMb2NhbCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLVNUQVRJQyBpbnQJIHhsb2dfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqKTsKIFNUQVRJQyBpbnQJIHhsb2dfY29tbWl0X3JlY29yZCh4ZnNfbW91bnRfdCAqbXAsIHhsb2dfdGlja2V0X3QgKnRpY2tldCwKIAkJCQkgICAgeGxvZ19pbl9jb3JlX3QgKiosIHhmc19sc25fdCAqKTsKIFNUQVRJQyB4bG9nX3QgKiAgeGxvZ19hbGxvY19sb2coeGZzX21vdW50X3QJKm1wLApAQCAtODAsMTEgKzc5LDYgQEAKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyh4bG9nX3QJCSpsb2csCiAJCQkJICAgICB4bG9nX2luX2NvcmVfdCAqaWNsb2csCiAJCQkJICAgICBpbnQJCWV2ZW50dWFsX3NpemUpOwotU1RBVElDIGludCAgeGxvZ19zdGF0ZV9zeW5jKHhsb2dfdAkJCSpsb2csCi0JCQkgICAgeGZzX2xzbl90IAkJCWxzbiwKLQkJCSAgICB1aW50CQkJZmxhZ3MsCi0JCQkgICAgaW50CQkJCSpsb2dfZmx1c2hlZCk7Ci1TVEFUSUMgaW50ICB4bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKTsKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfd2FudF9zeW5jKHhsb2dfdAkqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2cpOwogCiAvKiBsb2NhbCBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBncmFudCBoZWFkICovCkBAIC0yOTcsNjUgKzI5MSw2IEBACiAJcmV0dXJuIGxzbjsKIH0JLyogeGZzX2xvZ19kb25lICovCiAKLQotLyoKLSAqIEZvcmNlIHRoZSBpbi1jb3JlIGxvZyB0byBkaXNrLiAgSWYgZmxhZ3MgPT0gWEZTX0xPR19TWU5DLAotICoJdGhlIGZvcmNlIGlzIGRvbmUgc3luY2hyb25vdXNseS4KLSAqCi0gKiBBc3luY2hyb25vdXMgZm9yY2VzIGFyZSBpbXBsZW1lbnRlZCBieSBzZXR0aW5nIHRoZSBXQU5UX1NZTkMKLSAqIGJpdCBpbiB0aGUgYXBwcm9wcmlhdGUgaW4tY29yZSBsb2cgYW5kIHRoZW4gcmV0dXJuaW5nLgotICoKLSAqIFN5bmNocm9ub3VzIGZvcmNlcyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpZ25hbCB2YXJpYWJsZS4gQWxsIGNhbGxlcnMKLSAqIHRvIGZvcmNlIGEgZ2l2ZW4gbHNuIHRvIGRpc2sgd2lsbCB3YWl0IG9uIGEgdGhlIHN2IGF0dGFjaGVkIHRvIHRoZQotICogc3BlY2lmaWMgaW4tY29yZSBsb2cuICBXaGVuIGdpdmVuIGluLWNvcmUgbG9nIGZpbmFsbHkgY29tcGxldGVzIGl0cwotICogd3JpdGUgdG8gZGlzaywgdGhhdCB0aHJlYWQgd2lsbCB3YWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhlCi0gKiBzdi4KLSAqLwotaW50Ci1feGZzX2xvZ19mb3JjZSgKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2xzbl90CWxzbiwKLQl1aW50CQlmbGFncywKLQlpbnQJCSpsb2dfZmx1c2hlZCkKLXsKLQl4bG9nX3QJCSpsb2cgPSBtcC0+bV9sb2c7Ci0JaW50CQlkdW1teTsKLQotCWlmICghbG9nX2ZsdXNoZWQpCi0JCWxvZ19mbHVzaGVkID0gJmR1bW15OwotCi0JQVNTRVJUKGZsYWdzICYgWEZTX0xPR19GT1JDRSk7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7Ci0KLQlpZiAobG9nLT5sX2ZsYWdzICYgWExPR19JT19FUlJPUikKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCWlmIChsc24gPT0gMCkKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luY19hbGwobG9nLCBmbGFncywgbG9nX2ZsdXNoZWQpOwotCWVsc2UKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luYyhsb2csIGxzbiwgZmxhZ3MsIGxvZ19mbHVzaGVkKTsKLX0JLyogX3hmc19sb2dfZm9yY2UgKi8KLQotLyoKLSAqIFdyYXBwZXIgZm9yIF94ZnNfbG9nX2ZvcmNlKCksIHRvIGJlIHVzZWQgd2hlbiBjYWxsZXIgZG9lc24ndCBjYXJlCi0gKiBhYm91dCBlcnJvcnMgb3Igd2hldGhlciB0aGUgbG9nIHdhcyBmbHVzaGVkIG9yIG5vdC4gVGhpcyBpcyB0aGUgbm9ybWFsCi0gKiBpbnRlcmZhY2UgdG8gdXNlIHdoZW4gdHJ5aW5nIHRvIHVucGluIGl0ZW1zIG9yIG1vdmUgdGhlIGxvZyBmb3J3YXJkLgotICovCi12b2lkCi14ZnNfbG9nX2ZvcmNlKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfbHNuX3QJbHNuLAotCXVpbnQJCWZsYWdzKQotewotCWludAllcnJvcjsKLQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBsc24sIGZsYWdzLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCi0JCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOwotCX0KLX0KLQotCiAvKgogICogQXR0YWNoZXMgYSBuZXcgaWNsb2cgSS9PIGNvbXBsZXRpb24gY2FsbGJhY2sgcm91dGluZSBkdXJpbmcKICAqIHRyYW5zYWN0aW9uIGNvbW1pdC4gIElmIHRoZSBsb2cgaXMgaW4gZXJyb3Igc3RhdGUsIGEgbm9uLXplcm8KQEAgLTYwMiw3ICs1MzcsNyBAQAogCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCiAJCXJldHVybiAwOwogCi0JZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsIE5VTEwpOworCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQywgTlVMTCk7CiAJQVNTRVJUKGVycm9yIHx8ICEoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkpOwogCiAjaWZkZWYgREVCVUcKQEAgLTYxOCw3ICs1NTMsNyBAQAogCWlmICghIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSkgewogCQlyZWdbMF0uaV9hZGRyID0gKHZvaWQqKSZtYWdpYzsKIAkJcmVnWzBdLmlfbGVuICA9IHNpemVvZihtYWdpYyk7Ci0JCVhMT0dfVkVDX1NFVF9UWVBFKCZyZWdbMF0sIFhMT0dfUkVHX1RZUEVfVU5NT1VOVCk7CisJCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1VOTU9VTlQ7CiAKIAkJZXJyb3IgPSB4ZnNfbG9nX3Jlc2VydmUobXAsIDYwMCwgMSwgJnRpYywKIAkJCQkJWEZTX0xPRywgMCwgWExPR19VTk1PVU5UX1JFQ19UWVBFKTsKQEAgLTk4OCwzNSArOTIzLDYgQEAKIH0JLyogeGxvZ19pb2RvbmUgKi8KIAogLyoKLSAqIFRoZSBiZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2cgYnVmcy4gVGhpcyBnaXZlcyB1cyBhIGNlbnRyYWwKLSAqIHBsYWNlIHRvIHRyYXAgYnVmcyBpbiBjYXNlIHdlIGdldCBoaXQgYnkgYSBsb2cgSS9PIGVycm9yIGFuZCBuZWVkIHRvCi0gKiBzaHV0ZG93bi4gQWN0dWFsbHksIGluIHByYWN0aWNlLCBldmVuIHdoZW4gd2UgZGlkbid0IGdldCBhIGxvZyBlcnJvciwKLSAqIHdlIHRyYW5zaXRpb24gdGhlIGljbG9ncyB0byBJT0VSUk9SIHN0YXRlICphZnRlciogZmx1c2hpbmcgYWxsIGV4aXN0aW5nCi0gKiBpY2xvZ3MgdG8gZGlzay4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55bW9yZSBuZXcgdHJhbnNhY3Rpb25zIHRvIGJlCi0gKiBzdGFydGVkIG9yIGNvbXBsZXRlZCBhZnRlcndhcmRzLgotICovCi1TVEFUSUMgaW50Ci14bG9nX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKmJwKQotewotCXhsb2dfaW5fY29yZV90ICppY2xvZzsKLQotCWljbG9nID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhsb2dfaW5fY29yZV90ICopOwotCi0JaWYgKChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpID09IDApIHsKLQkgIC8qIG5vdGUgZm9yIGlyaXggYnN0cmF0IHdpbGwgbmVlZCAgc3RydWN0IGJkZXZzdyBwYXNzZWQKLQkgICAqIEZpeCB0aGUgZm9sbG93aW5nIG1hY3JvIGlmIHRoZSBjb2RlIGV2ZXIgaXMgbWVyZ2VkCi0JICAgKi8KLQkgICAgWEZTX2Jkc3RyYXQoYnApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCVhGU19CVUZfU1RBTEUoYnApOwotCXhmc19iaW9kb25lKGJwKTsKLQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gc2l6ZSBvZiBlYWNoIGluLWNvcmUgbG9nIHJlY29yZCBidWZmZXIuCiAgKgogICogQWxsIG1hY2hpbmVzIGdldCA4IHggMzJrQiBidWZmZXJzIGJ5IGRlZmF1bHQsIHVubGVzcyB0dW5lZCBvdGhlcndpc2UuCkBAIC0xMTU4LDcgKzEwNjQsNiBAQAogCWlmICghYnApCiAJCWdvdG8gb3V0X2ZyZWVfbG9nOwogCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX2lvZG9uZSk7Ci0JWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4bG9nX2Jkc3RyYXRfY2IpOwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKQEAgLTExOTYsNyArMTEwMSw2IEBACiAJCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKQogCQkJQVNTRVJUKDApOwogCQlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGxvZ19pb2RvbmUpOwotCQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhsb2dfYmRzdHJhdF9jYik7CiAJCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCQlpY2xvZy0+aWNfYnAgPSBicDsKIAkJaWNsb2ctPmljX2RhdGEgPSBicC0+Yl9hZGRyOwpAQCAtMTI2OCw3ICsxMTcyLDcgQEAKIAogCXJlZ1swXS5pX2FkZHIgPSBOVUxMOwogCXJlZ1swXS5pX2xlbiA9IDA7Ci0JWExPR19WRUNfU0VUX1RZUEUoJnJlZ1swXSwgWExPR19SRUdfVFlQRV9DT01NSVQpOworCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0NPTU1JVDsKIAogCUFTU0VSVF9BTFdBWVMoaWNsb2cpOwogCWlmICgoZXJyb3IgPSB4bG9nX3dyaXRlKG1wLCByZWcsIDEsIHRpY2tldCwgY29tbWl0bHNucCwKQEAgLTEzNDMsNiArMTI0NywzNyBAQAogCSAgICB4ZnNfdHJhbnNfYWlsX3B1c2gobG9nLT5sX2FpbHAsIHRocmVzaG9sZF9sc24pOwogfQkvKiB4bG9nX2dyYW50X3B1c2hfYWlsICovCiAKKy8qCisgKiBUaGUgYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbG9nIGJ1ZnMuIFRoaXMgZ2l2ZXMgdXMgYSBjZW50cmFsCisgKiBwbGFjZSB0byB0cmFwIGJ1ZnMgaW4gY2FzZSB3ZSBnZXQgaGl0IGJ5IGEgbG9nIEkvTyBlcnJvciBhbmQgbmVlZCB0bworICogc2h1dGRvd24uIEFjdHVhbGx5LCBpbiBwcmFjdGljZSwgZXZlbiB3aGVuIHdlIGRpZG4ndCBnZXQgYSBsb2cgZXJyb3IsCisgKiB3ZSB0cmFuc2l0aW9uIHRoZSBpY2xvZ3MgdG8gSU9FUlJPUiBzdGF0ZSAqYWZ0ZXIqIGZsdXNoaW5nIGFsbCBleGlzdGluZworICogaWNsb2dzIHRvIGRpc2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueW1vcmUgbmV3IHRyYW5zYWN0aW9ucyB0byBiZQorICogc3RhcnRlZCBvciBjb21wbGV0ZWQgYWZ0ZXJ3YXJkcy4KKyAqLworU1RBVElDIGludAoreGxvZ19iZHN0cmF0KAorCXN0cnVjdCB4ZnNfYnVmCQkqYnApCit7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisKKwlpY2xvZyA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4bG9nX2luX2NvcmVfdCAqKTsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfU1RBTEUoYnApOworCQl4ZnNfYmlvZG9uZShicCk7CisJCS8qCisJCSAqIEl0IHdvdWxkIHNlZW0gbG9naWNhbCB0byByZXR1cm4gRUlPIGhlcmUsIGJ1dCB3ZSByZWx5IG9uCisJCSAqIHRoZSBsb2cgc3RhdGUgbWFjaGluZSB0byBwcm9wYWdhdGUgSS9PIGVycm9ycyBpbnN0ZWFkIG9mCisJCSAqIGRvaW5nIGl0IGhlcmUuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlicC0+Yl9mbGFncyB8PSBfWEJGX1JVTl9RVUVVRVM7CisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworCXJldHVybiAwOworfQogCiAvKgogICogRmx1c2ggb3V0IHRoZSBpbi1jb3JlIGxvZyAoaWNsb2cpIHRvIHRoZSBvbi1kaXNrIGxvZyBpbiBhbiBhc3luY2hyb25vdXMgCkBAIC0xNDYyLDcgKzEzOTcsNyBAQAogCSAqLwogCVhGU19CVUZfV1JJVEUoYnApOwogCi0JaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCWlmICgoZXJyb3IgPSB4bG9nX2Jkc3RyYXQoYnApKSkgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19zeW5jIiwgbG9nLT5sX21wLCBicCwKIAkJCQkgIFhGU19CVUZfQUREUihicCkpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xNTAyLDcgKzE0MzcsNyBAQAogCQkvKiBhY2NvdW50IGZvciBpbnRlcm5hbCBsb2cgd2hpY2ggZG9lc24ndCBzdGFydCBhdCBibG9jayAjMCAqLwogCQlYRlNfQlVGX1NFVF9BRERSKGJwLCBYRlNfQlVGX0FERFIoYnApICsgbG9nLT5sX2xvZ0JCc3RhcnQpOwogCQlYRlNfQlVGX1dSSVRFKGJwKTsKLQkJaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCQlpZiAoKGVycm9yID0geGxvZ19iZHN0cmF0KGJwKSkpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3N5bmMgKHNwbGl0KSIsIGxvZy0+bF9tcCwKIAkJCQkJICBicCwgWEZTX0JVRl9BRERSKGJwKSk7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0yODU0LDcgKzI3ODksNiBAQAogCWxvZy0+bF9pY2xvZyA9IGljbG9nLT5pY19uZXh0OwogfQkvKiB4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MgKi8KIAotCiAvKgogICogV3JpdGUgb3V0IGFsbCBkYXRhIGluIHRoZSBpbi1jb3JlIGxvZyBhcyBvZiB0aGlzIGV4YWN0IG1vbWVudCBpbiB0aW1lLgogICoKQEAgLTI4ODIsMTEgKzI4MTYsMTcgQEAKICAqCSAgIGIpIHdoZW4gd2UgcmV0dXJuIGZyb20gZmx1c2hpbmcgb3V0IHRoaXMgaWNsb2csIGl0IGlzIHN0aWxsCiAgKgkJbm90IGluIHRoZSBhY3RpdmUgbm9yIGRpcnR5IHN0YXRlLgogICovCi1TVEFUSUMgaW50Ci14bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKQoraW50CitfeGZzX2xvZ19mb3JjZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwl1aW50CQkJZmxhZ3MsCisJaW50CQkJKmxvZ19mbHVzaGVkKQogewotCXhsb2dfaW5fY29yZV90CSppY2xvZzsKLQl4ZnNfbHNuX3QJbHNuOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJeGZzX2xzbl90CQlsc247CisKKwlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7CiAKIAlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCkBAIC0yOTMyLDcgKzI4NzIsOSBAQAogCiAJCQkJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkJCSpsb2dfZmx1c2hlZCA9IDE7CisKKwkJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJCSpsb2dfZmx1c2hlZCA9IDE7CiAJCQkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCQlpZiAoYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbikgPT0gbHNuICYmCiAJCQkJICAgIGljbG9nLT5pY19zdGF0ZSAhPSBYTE9HX1NUQVRFX0RJUlRZKQpAQCAtMjk3NiwxOSArMjkxOCwzNyBAQAogCQkgKi8KIAkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQorCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkqbG9nX2ZsdXNoZWQgPSAxOwogCX0gZWxzZSB7CiAKIG5vX3NsZWVwOgogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJfQogCXJldHVybiAwOwotfQkvKiB4bG9nX3N0YXRlX3N5bmNfYWxsICovCi0KK30KIAogLyoKLSAqIFVzZWQgYnkgY29kZSB3aGljaCBpbXBsZW1lbnRzIHN5bmNocm9ub3VzIGxvZyBmb3JjZXMuCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZSgpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQorICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAorICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KKyAqLwordm9pZAoreGZzX2xvZ19mb3JjZSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJdWludAkJZmxhZ3MpCit7CisJaW50CWVycm9yOworCisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgZmxhZ3MsIE5VTEwpOworCWlmIChlcnJvcikgeworCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKKwkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7CisJfQorfQorCisvKgorICogRm9yY2UgdGhlIGluLWNvcmUgbG9nIHRvIGRpc2sgZm9yIGEgc3BlY2lmaWMgTFNOLgogICoKICAqIEZpbmQgaW4tY29yZSBsb2cgd2l0aCBsc24uCiAgKglJZiBpdCBpcyBpbiB0aGUgRElSVFkgc3RhdGUsIGp1c3QgcmV0dXJuLgpAQCAtMjk5NiwxMDkgKzI5NTYsMTQyIEBACiAgKgkJc3RhdGUgYW5kIGdvIHRvIHNsZWVwIG9yIHJldHVybi4KICAqCUlmIGl0IGlzIGluIGFueSBvdGhlciBzdGF0ZSwgZ28gdG8gc2xlZXAgb3IgcmV0dXJuLgogICoKLSAqIElmIGZpbGVzeXN0ZW0gYWN0aXZpdHkgZ29lcyB0byB6ZXJvLCB0aGUgaWNsb2cgd2lsbCBnZXQgZmx1c2hlZCBvbmx5IGJ5Ci0gKiBiZGZsdXNoKCkuCisgKiBTeW5jaHJvbm91cyBmb3JjZXMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBzaWduYWwgdmFyaWFibGUuIEFsbCBjYWxsZXJzCisgKiB0byBmb3JjZSBhIGdpdmVuIGxzbiB0byBkaXNrIHdpbGwgd2FpdCBvbiBhIHRoZSBzdiBhdHRhY2hlZCB0byB0aGUKKyAqIHNwZWNpZmljIGluLWNvcmUgbG9nLiAgV2hlbiBnaXZlbiBpbi1jb3JlIGxvZyBmaW5hbGx5IGNvbXBsZXRlcyBpdHMKKyAqIHdyaXRlIHRvIGRpc2ssIHRoYXQgdGhyZWFkIHdpbGwgd2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZQorICogc3YuCiAgKi8KLVNUQVRJQyBpbnQKLXhsb2dfc3RhdGVfc3luYyh4bG9nX3QJICAqbG9nLAotCQl4ZnNfbHNuX3QgbHNuLAotCQl1aW50CSAgZmxhZ3MsCi0JCWludAkgICpsb2dfZmx1c2hlZCkKK2ludAorX3hmc19sb2dfZm9yY2VfbHNuKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXhmc19sc25fdAkJbHNuLAorCXVpbnQJCQlmbGFncywKKwlpbnQJCQkqbG9nX2ZsdXNoZWQpCiB7Ci0gICAgeGxvZ19pbl9jb3JlX3QJKmljbG9nOwotICAgIGludAkJCWFscmVhZHlfc2xlcHQgPSAwOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJaW50CQkJYWxyZWFkeV9zbGVwdCA9IDA7CisKKwlBU1NFUlQobHNuICE9IDApOworCisJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2UpOwogCiB0cnlfYWdhaW46Ci0gICAgc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICBpY2xvZyA9IGxvZy0+bF9pY2xvZzsKLQotICAgIGlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKLQkgICAgc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCSAgICByZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0gICAgfQotCi0gICAgZG8gewotCWlmIChiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSAhPSBsc24pIHsKLQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKLQkJY29udGludWU7Ci0JfQotCi0JaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlpY2xvZyA9IGxvZy0+bF9pY2xvZzsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CiAKLQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFKSB7Ci0JCS8qCi0JCSAqIFdlIHNsZWVwIGhlcmUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNsZXB0IChlLmcuCi0JCSAqIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgbG9va2VkIGF0IHRoZSBjb3JyZWN0Ci0JCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCi0JCSAqIGJlIHN5bmMnZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpZiB3ZQotCQkgKiBhcmUgZG9pbmcgc3luYyB0cmFuc2FjdGlvbnMgaGVyZSwgYnkgd2FpdGluZyBmb3IKLQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3Ci0JCSAqIG1vcmUgdHJhbnNhY3Rpb25zIGludG8gdGhpcyBpY2xvZyBiZWZvcmUgd2UgY2xvc2UKLQkJICogaXQgZG93bi4KLQkJICoKLQkJICogT3RoZXJ3aXNlLCB3ZSBtYXJrIHRoZSBidWZmZXIgV0FOVF9TWU5DLCBhbmQgYnVtcAotCQkgKiB1cCB0aGUgcmVmY250IHNvIHdlIGNhbiByZWxlYXNlIHRoZSBsb2cgKHdoaWNoIGRyb3BzCi0JCSAqIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcgdHJhbnNhY3Rpb24KLQkJICogY29tbWl0cyBmcm9tIHVzaW5nIHRoaXMgYnVmZmVyLiAgV2hlbiB0aGUgY3VycmVudCBjb21taXRzCi0JCSAqIGZpbmlzaCB3cml0aW5nIGludG8gdGhlIGJ1ZmZlciwgdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0bwotCQkgKiB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwgZ28gb3V0IHRoZW4uCi0JCSAqLwotCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKLQkJICAgIChpY2xvZy0+aWNfcHJldi0+aWNfc3RhdGUgJiAoWExPR19TVEFURV9XQU5UX1NZTkMgfAotCQkJCQkJIFhMT0dfU1RBVEVfU1lOQ0lORykpKSB7Ci0JCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKLQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKLQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LCBQU1dQLAotCQkJCSZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7Ci0JCQlhbHJlYWR5X3NsZXB0ID0gMTsKLQkJCWdvdG8gdHJ5X2FnYWluOwotCQl9IGVsc2UgeworCWRvIHsKKwkJaWYgKGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pICE9IGxzbikgeworCQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9BQ1RJVkUpIHsKKwkJCS8qCisJCQkgKiBXZSBzbGVlcCBoZXJlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBzbGVwdCAoZS5nLgorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGNvcnJlY3QKKwkJCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCisJCQkgKiBiZSBzeW5jJ2VkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaWYgd2UKKwkJCSAqIGFyZSBkb2luZyBzeW5jIHRyYW5zYWN0aW9ucyBoZXJlLCBieSB3YWl0aW5nIGZvcgorCQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3CisJCQkgKiBtb3JlIHRyYW5zYWN0aW9ucyBpbnRvIHRoaXMgaWNsb2cgYmVmb3JlIHdlIGNsb3NlCisJCQkgKiBpdCBkb3duLgorCQkJICoKKwkJCSAqIE90aGVyd2lzZSwgd2UgbWFyayB0aGUgYnVmZmVyIFdBTlRfU1lOQywgYW5kIGJ1bXAKKwkJCSAqIHVwIHRoZSByZWZjbnQgc28gd2UgY2FuIHJlbGVhc2UgdGhlIGxvZyAod2hpY2gKKwkJCSAqIGRyb3BzIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcKKwkJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdHMgZnJvbSB1c2luZyB0aGlzIGJ1ZmZlci4gIFdoZW4KKwkJCSAqIHRoZSBjdXJyZW50IGNvbW1pdHMgZmluaXNoIHdyaXRpbmcgaW50byB0aGUgYnVmZmVyLAorCQkJICogdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0byB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwKKwkJCSAqIGdvIG91dCB0aGVuLgorCQkJICovCisJCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKKwkJCSAgICAoaWNsb2ctPmljX3ByZXYtPmljX3N0YXRlICYKKwkJCSAgICAgKFhMT0dfU1RBVEVfV0FOVF9TWU5DIHwgWExPR19TVEFURV9TWU5DSU5HKSkpIHsKKwkJCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKKworCQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKKworCQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LAorCQkJCQlQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7CisJCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQkJCWFscmVhZHlfc2xlcHQgPSAxOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQogCQkJYXRvbWljX2luYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCQl4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MobG9nLCBpY2xvZywgMCk7CiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCQlpZiAoeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpKQogCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7CisJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJKmxvZ19mbHVzaGVkID0gMTsKIAkJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCX0KLQl9CiAKLQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLwotCSAgICAhKGljbG9nLT5pY19zdGF0ZSAmIChYTE9HX1NUQVRFX0FDVElWRSB8IFhMT0dfU1RBVEVfRElSVFkpKSkgeworCQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLworCQkgICAgIShpY2xvZy0+aWNfc3RhdGUgJgorCQkgICAgICAoWExPR19TVEFURV9BQ1RJVkUgfCBYTE9HX1NUQVRFX0RJUlRZKSkpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCisJCQkgKiBnb3R0ZW4gYSBsb2cgd3JpdGUgZXJyb3IuCisJCQkgKi8KKwkJCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCQkJfQorCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOworCQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCS8qCisJCQkgKiBObyBuZWVkIHRvIGdyYWIgdGhlIGxvZyBsb2NrIGhlcmUgc2luY2Ugd2UncmUKKwkJCSAqIG9ubHkgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIEVJTworCQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgorCQkJICovCisJCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKQorCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCQkvKgotCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCi0JCSAqIGdvdHRlbiBhIGxvZyB3cml0ZSBlcnJvci4KLQkJICovCi0JCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KIAkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7Ci0JCXN2X3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCBQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7Ci0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gZ3JhYiB0aGUgbG9nIGxvY2sgaGVyZSBzaW5jZSB3ZSdyZQotCQkgKiBvbmx5IGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBFSU8KLQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgotCQkgKi8KLQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KLQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCX0KKworCQlyZXR1cm4gMDsKKwl9IHdoaWxlIChpY2xvZyAhPSBsb2ctPmxfaWNsb2cpOworCisJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCXJldHVybiAwOworfQogCi0gICAgfSB3aGlsZSAoaWNsb2cgIT0gbG9nLT5sX2ljbG9nKTsKKy8qCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZV9sc24oKSwgdG8gYmUgdXNlZCB3aGVuIGNhbGxlciBkb2Vzbid0IGNhcmUKKyAqIGFib3V0IGVycm9ycyBvciB3aGV0aGVyIHRoZSBsb2cgd2FzIGZsdXNoZWQgb3Igbm90LiBUaGlzIGlzIHRoZSBub3JtYWwKKyAqIGludGVyZmFjZSB0byB1c2Ugd2hlbiB0cnlpbmcgdG8gdW5waW4gaXRlbXMgb3IgbW92ZSB0aGUgbG9nIGZvcndhcmQuCisgKi8KK3ZvaWQKK3hmc19sb2dfZm9yY2VfbHNuKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfbHNuX3QJbHNuLAorCXVpbnQJCWZsYWdzKQoreworCWludAllcnJvcjsKIAotICAgIHNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICByZXR1cm4gMDsKLX0JLyogeGxvZ19zdGF0ZV9zeW5jICovCi0KKwllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgbHNuLCBmbGFncywgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgorCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKKwl9Cit9CiAKIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIG1hcmsgdGhlIGN1cnJlbnQgaWNsb2cgYXMgYmVpbmcgcmVhZHkgdG8gc3luYyB0bwpAQCAtMzQ2Myw3ICszNDU2LDYgQEAKIAl4bG9nX3RpY2tldF90CSp0aWM7CiAJeGxvZ190CQkqbG9nOwogCWludAkJcmV0dmFsOwotCWludAkJZHVtbXk7CiAKIAlsb2cgPSBtcC0+bV9sb2c7CiAKQEAgLTM1MzcsMTMgKzM1MjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAotCWlmICghIChsb2ctPmxfaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSkgeworCWlmICghKGxvZy0+bF9pY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKSB7CiAJCUFTU0VSVCghbG9nZXJyb3IpOwogCQkvKgogCQkgKiBGb3JjZSB0aGUgaW5jb3JlIGxvZ3MgdG8gZGlzayBiZWZvcmUgc2h1dHRpbmcgdGhlCiAJCSAqIGxvZyBkb3duIGNvbXBsZXRlbHkuCiAJCSAqLwotCQl4bG9nX3N0YXRlX3N5bmNfYWxsKGxvZywgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsICZkdW1teSk7CisJCV94ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMsIE5VTEwpOworCiAJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCXJldHZhbCA9IHhsb2dfc3RhdGVfaW9lcnJvcihsb2cpOwogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCBkMGM5YmFhLi43MDc0YmU5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTcwLDE0ICs3MCw4IEBACiAgKiBGbGFncyB0byB4ZnNfbG9nX2ZvcmNlKCkKICAqCiAgKglYRlNfTE9HX1NZTkM6CVN5bmNocm9ub3VzIGZvcmNlIGluLWNvcmUgbG9nIHRvIGRpc2sKLSAqCVhGU19MT0dfRk9SQ0U6CVN0YXJ0IGluLWNvcmUgbG9nIHdyaXRlIG5vdy4KLSAqCVhGU19MT0dfVVJHRToJU3RhcnQgd3JpdGUgd2l0aGluIHNvbWUgd2luZG93IG9mIHRpbWUuCi0gKgotICogTm90ZTogRWl0aGVyIFhGU19MT0dfRk9SQ0Ugb3IgWEZTX0xPR19VUkdFIG11c3QgYmUgc2V0LgogICovCiAjZGVmaW5lIFhGU19MT0dfU1lOQwkJMHgxCi0jZGVmaW5lIFhGU19MT0dfRk9SQ0UJCTB4MgotI2RlZmluZSBYRlNfTE9HX1VSR0UJCTB4NAogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCkBAIC0xMTAsMTAgKzEwNCw4IEBACiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfVFJBTlNIRFIJCTE5CiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfTUFYCQkxOQogCi0jZGVmaW5lIFhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIHQpICgodmVjcCktPmlfdHlwZSA9ICh0KSkKLQogdHlwZWRlZiBzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyB7Ci0JeGZzX2NhZGRyX3QJCWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLworCXhmc19jYWRkcl90CWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLwogCWludAkJaV9sZW47CQkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgcmVnaW9uICovCiAJdWludAkJaV90eXBlOwkJLyogdHlwZSBvZiByZWdpb24gKi8KIH0geGZzX2xvZ19pb3ZlY190OwpAQCAtMTQwLDEyICsxMzIsMTcgQEAKIAkJICAgICAgIHZvaWQJCSoqaWNsb2csCiAJCSAgICAgICB1aW50CQlmbGFncyk7CiBpbnQJICBfeGZzX2xvZ19mb3JjZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQkJCSB4ZnNfbHNuX3QJbHNuLAogCQkJIHVpbnQJCWZsYWdzLAogCQkJIGludAkJKmxvZ19mb3JjZWQpOwogdm9pZAkgIHhmc19sb2dfZm9yY2Uoc3RydWN0IHhmc19tb3VudAkqbXAsCi0JCQl4ZnNfbHNuX3QJCWxzbiwKIAkJCXVpbnQJCQlmbGFncyk7CitpbnQJICBfeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudCAqbXAsCisJCQkgICAgIHhmc19sc25fdAkJbHNuLAorCQkJICAgICB1aW50CQlmbGFncywKKwkJCSAgICAgaW50CQkqbG9nX2ZvcmNlZCk7Cit2b2lkCSAgeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudAkqbXAsCisJCQkgICAgeGZzX2xzbl90CQlsc24sCisJCQkgICAgdWludAkJZmxhZ3MpOwogaW50CSAgeGZzX2xvZ19tb3VudChzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAkJCXN0cnVjdCB4ZnNfYnVmdGFyZwkqbG9nX3RhcmdldCwKIAkJCXhmc19kYWRkcl90CQlzdGFydF9ibG9jaywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaCBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAppbmRleCBkNTU2NjJkLi5mZDAyYTE4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19wcml2LmgKKysrIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCkBAIC00NDMsMTQgKzQ0Myw5IEBACiAKIC8qIGNvbW1vbiByb3V0aW5lcyAqLwogZXh0ZXJuIHhmc19sc25fdCB4bG9nX2Fzc2lnbl90YWlsX2xzbihzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci1leHRlcm4gaW50CSB4bG9nX2ZpbmRfdGFpbCh4bG9nX3QJKmxvZywKLQkJCQl4ZnNfZGFkZHJfdCAqaGVhZF9ibGssCi0JCQkJeGZzX2RhZGRyX3QgKnRhaWxfYmxrKTsKIGV4dGVybiBpbnQJIHhsb2dfcmVjb3Zlcih4bG9nX3QgKmxvZyk7CiBleHRlcm4gaW50CSB4bG9nX3JlY292ZXJfZmluaXNoKHhsb2dfdCAqbG9nKTsKIGV4dGVybiB2b2lkCSB4bG9nX3BhY2tfZGF0YSh4bG9nX3QgKmxvZywgeGxvZ19pbl9jb3JlX3QgKmljbG9nLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB4ZnNfYnVmICp4bG9nX2dldF9icCh4bG9nX3QgKiwgaW50KTsKLWV4dGVybiB2b2lkCSB4bG9nX3B1dF9icChzdHJ1Y3QgeGZzX2J1ZiAqKTsKIAogZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggNjlhYzJlNS4uMjJlNmVmZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtNTAsOCArNTAsNiBAQAogCiBTVEFUSUMgaW50CXhsb2dfZmluZF96ZXJvZWQoeGxvZ190ICosIHhmc19kYWRkcl90ICopOwogU1RBVElDIGludAl4bG9nX2NsZWFyX3N0YWxlX2Jsb2Nrcyh4bG9nX3QgKiwgeGZzX2xzbl90KTsKLVNUQVRJQyB2b2lkCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcSh4bG9nX3JlY292ZXJfaXRlbV90ICoqcSwKLQkJCQkJICAgICAgIHhsb2dfcmVjb3Zlcl9pdGVtX3QgKml0ZW0pOwogI2lmIGRlZmluZWQoREVCVUcpCiBTVEFUSUMgdm9pZAl4bG9nX3JlY292ZXJfY2hlY2tfc3VtbWFyeSh4bG9nX3QgKik7CiAjZWxzZQpAQCAtNjgsNyArNjYsNyBAQAogCSgoYmJzICsgKGxvZyktPmxfc2VjdGJiX21hc2sgKyAxKSAmIH4obG9nKS0+bF9zZWN0YmJfbWFzaykgOiAoYmJzKSApCiAjZGVmaW5lIFhMT0dfU0VDVE9SX1JPVU5ERE9XTl9CTEtOTyhsb2csIGJubykJKChibm8pICYgfihsb2cpLT5sX3NlY3RiYl9tYXNrKQogCi14ZnNfYnVmX3QgKgorU1RBVElDIHhmc19idWZfdCAqCiB4bG9nX2dldF9icCgKIAl4bG9nX3QJCSpsb2csCiAJaW50CQluYmJsa3MpCkBAIC04OCw3ICs4Niw3IEBACiAJcmV0dXJuIHhmc19idWZfZ2V0X25vYWRkcihCQlRPQihuYmJsa3MpLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIH0KIAotdm9pZAorU1RBVElDIHZvaWQKIHhsb2dfcHV0X2JwKAogCXhmc19idWZfdAkqYnApCiB7CkBAIC04MDUsNyArODAzLDcgQEAKICAqIFdlIGNvdWxkIHNwZWVkIHVwIHNlYXJjaCBieSB1c2luZyBjdXJyZW50IGhlYWRfYmxrIGJ1ZmZlciwgYnV0IGl0IGlzIG5vdAogICogYXZhaWxhYmxlLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhsb2dfZmluZF90YWlsKAogCXhsb2dfdAkJCSpsb2csCiAJeGZzX2RhZGRyX3QJCSpoZWFkX2JsaywKQEAgLTEzNjcsMzYgKzEzNjUsNDUgQEAKIAogU1RBVElDIHhsb2dfcmVjb3Zlcl90ICoKIHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKnEsCisJc3RydWN0IGhsaXN0X2hlYWQJKmhlYWQsCiAJeGxvZ190aWRfdAkJdGlkKQogewotCXhsb2dfcmVjb3Zlcl90CQkqcCA9IHE7CisJeGxvZ19yZWNvdmVyX3QJCSp0cmFuczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkqbjsKIAotCXdoaWxlIChwICE9IE5VTEwpIHsKLQkJaWYgKHAtPnJfbG9nX3RpZCA9PSB0aWQpCi0JCSAgICBicmVhazsKLQkJcCA9IHAtPnJfbmV4dDsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgbiwgaGVhZCwgcl9saXN0KSB7CisJCWlmICh0cmFucy0+cl9sb2dfdGlkID09IHRpZCkKKwkJCXJldHVybiB0cmFuczsKIAl9Ci0JcmV0dXJuIHA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIFNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfcHV0X2hhc2hxKAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCi0JeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKK3hsb2dfcmVjb3Zlcl9uZXdfdGlkKAorCXN0cnVjdCBobGlzdF9oZWFkCSpoZWFkLAorCXhsb2dfdGlkX3QJCXRpZCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKLQl0cmFucy0+cl9uZXh0ID0gKnE7Ci0JKnEgPSB0cmFuczsKKwl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOworCisJdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7CisJdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOworCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnMtPnJfaXRlbXEpOworCisJSU5JVF9ITElTVF9OT0RFKCZ0cmFucy0+cl9saXN0KTsKKwlobGlzdF9hZGRfaGVhZCgmdHJhbnMtPnJfbGlzdCwgaGVhZCk7CiB9CiAKIFNUQVRJQyB2b2lkCiB4bG9nX3JlY292ZXJfYWRkX2l0ZW0oCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKml0ZW1xKQorCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQpCiB7CiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbTsKIAogCWl0ZW0gPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX2l0ZW1fdCksIEtNX1NMRUVQKTsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoaXRlbXEsIGl0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZpdGVtLT5yaV9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZpdGVtLT5yaV9saXN0LCBoZWFkKTsKIH0KIAogU1RBVElDIGludApAQCAtMTQwOSw4ICsxNDE2LDcgQEAKIAl4ZnNfY2FkZHJfdAkJcHRyLCBvbGRfcHRyOwogCWludAkJCW9sZF9sZW47CiAKLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaWYgKGl0ZW0gPT0gTlVMTCkgeworCWlmIChsaXN0X2VtcHR5KCZ0cmFucy0+cl9pdGVtcSkpIHsKIAkJLyogZmluaXNoIGNvcHlpbmcgcmVzdCBvZiB0cmFucyBoZWFkZXIgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CiAJCXB0ciA9ICh4ZnNfY2FkZHJfdCkgJnRyYW5zLT5yX3RoZWFkZXIgKwpAQCAtMTQxOCw3ICsxNDI0LDggQEAKIAkJbWVtY3B5KHB0ciwgZHAsIGxlbik7IC8qIGQsIHMsIGwgKi8KIAkJcmV0dXJuIDA7CiAJfQotCWl0ZW0gPSBpdGVtLT5yaV9wcmV2OworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKIAogCW9sZF9wdHIgPSBpdGVtLT5yaV9idWZbaXRlbS0+cmlfY250LTFdLmlfYWRkcjsKIAlvbGRfbGVuID0gaXRlbS0+cmlfYnVmW2l0ZW0tPnJpX2NudC0xXS5pX2xlbjsKQEAgLTE0NTUsOCArMTQ2Miw3IEBACiAKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWlmIChpdGVtID09IE5VTEwpIHsKKwlpZiAobGlzdF9lbXB0eSgmdHJhbnMtPnJfaXRlbXEpKSB7CiAJCS8qIHdlIG5lZWQgdG8gY2F0Y2ggbG9nIGNvcnJ1cHRpb25zIGhlcmUgKi8KIAkJaWYgKCoodWludCAqKWRwICE9IFhGU19UUkFOU19IRUFERVJfTUFHSUMpIHsKIAkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfYWRkX3RvX3RyYW5zOiAiCkBAIC0xNDc0LDEyICsxNDgwLDE1IEBACiAJbWVtY3B5KHB0ciwgZHAsIGxlbik7CiAJaW5fZiA9ICh4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90ICopcHRyOwogCi0JaWYgKGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsICE9IDAgJiYKLQkgICAgIGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsID09IGl0ZW0tPnJpX3ByZXYtPnJpX2NudCkgeworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKKwlpZiAoaXRlbS0+cmlfdG90YWwgIT0gMCAmJgorCSAgICAgaXRlbS0+cmlfdG90YWwgPT0gaXRlbS0+cmlfY250KSB7CisJCS8qIHRhaWwgaXRlbSBpcyBpbiB1c2UsIGdldCBhIG5ldyBvbmUgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KHRyYW5zLT5yX2l0ZW1xLnByZXYsCisJCQkJCXhsb2dfcmVjb3Zlcl9pdGVtX3QsIHJpX2xpc3QpOwogCX0KLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaXRlbSA9IGl0ZW0tPnJpX3ByZXY7CiAKIAlpZiAoaXRlbS0+cmlfdG90YWwgPT0gMCkgewkJLyogZmlyc3QgcmVnaW9uIHRvIGJlIGFkZGVkICovCiAJCWlmIChpbl9mLT5pbGZfc2l6ZSA9PSAwIHx8CkBAIC0xNTA0LDk2ICsxNTEzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLVNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfbmV3X3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKipxLAotCXhsb2dfdGlkX3QJCXRpZCwKLQl4ZnNfbHNuX3QJCWxzbikKLXsKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOwotCi0JdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7Ci0JdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOwotCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKLQl4bG9nX3JlY292ZXJfcHV0X2hhc2hxKHEsIHRyYW5zKTsKLX0KLQotU1RBVElDIGludAoteGxvZ19yZWNvdmVyX3VubGlua190aWQoCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQotewotCXhsb2dfcmVjb3Zlcl90CQkqdHA7Ci0JaW50CQkJZm91bmQgPSAwOwotCi0JQVNTRVJUKHRyYW5zICE9IE5VTEwpOwotCWlmICh0cmFucyA9PSAqcSkgewotCQkqcSA9ICgqcSktPnJfbmV4dDsKLQl9IGVsc2UgewotCQl0cCA9ICpxOwotCQl3aGlsZSAodHApIHsKLQkJCWlmICh0cC0+cl9uZXh0ID09IHRyYW5zKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdHAgPSB0cC0+cl9uZXh0OwotCQl9Ci0JCWlmICghZm91bmQpIHsKLQkJCXhsb2dfd2FybigKLQkJCSAgICAgIlhGUzogeGxvZ19yZWNvdmVyX3VubGlua190aWQ6IHRyYW5zIG5vdCBmb3VuZCIpOwotCQkJQVNTRVJUKDApOwotCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQl9Ci0JCXRwLT5yX25leHQgPSB0cC0+cl9uZXh0LT5yX25leHQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1TVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKipxLAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0pCi17Ci0JaWYgKCpxID09IE5VTEwpIHsKLQkJaXRlbS0+cmlfcHJldiA9IGl0ZW0tPnJpX25leHQgPSBpdGVtOwotCQkqcSA9IGl0ZW07Ci0JfSBlbHNlIHsKLQkJaXRlbS0+cmlfbmV4dAkJPSAqcTsKLQkJaXRlbS0+cmlfcHJldgkJPSAoKnEpLT5yaV9wcmV2OwotCQkoKnEpLT5yaV9wcmV2CQk9IGl0ZW07Ci0JCWl0ZW0tPnJpX3ByZXYtPnJpX25leHQJPSBpdGVtOwotCX0KLX0KLQotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9mcm9udHEoCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKnEsCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKLXsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EocSwgaXRlbSk7Ci0JKnEgPSBpdGVtOwotfQotCisvKgorICogU29ydCB0aGUgbG9nIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbi4gQ2FuY2VsbGVkIGJ1ZmZlcnMgbmVlZAorICogdG8gYmUgcHV0IGZpcnN0IHNvIHRoZXkgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IGl0ZW1zIHRoYXQgbWlnaHQKKyAqIG1vZGlmeSB0aGUgYnVmZmVycy4gSWYgdGhleSBhcmUgY2FuY2VsbGVkLCB0aGVuIHRoZSBtb2RpZmljYXRpb25zCisgKiBkb24ndCBuZWVkIHRvIGJlIHJlcGxheWVkLgorICovCiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucygKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQogewotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKmZpcnN0X2l0ZW0sICppdGVtcSwgKml0ZW1xX25leHQ7Ci0JeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwotCXVzaG9ydAkJCWZsYWdzID0gMDsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKKwlMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotCWZpcnN0X2l0ZW0gPSBpdGVtcSA9IHRyYW5zLT5yX2l0ZW1xOwotCXRyYW5zLT5yX2l0ZW1xID0gTlVMTDsKLQlkbyB7Ci0JCWl0ZW1xX25leHQgPSBpdGVtcS0+cmlfbmV4dDsKLQkJYnVmX2YgPSAoeGZzX2J1Zl9sb2dfZm9ybWF0X3QgKilpdGVtcS0+cmlfYnVmWzBdLmlfYWRkcjsKKwlsaXN0X3NwbGljZV9pbml0KCZ0cmFucy0+cl9pdGVtcSwgJnNvcnRfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZzb3J0X2xpc3QsIHJpX2xpc3QpIHsKKwkJeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwogCi0JCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW1xKSkgeworCQlidWZfZiA9ICh4ZnNfYnVmX2xvZ19mb3JtYXRfdCAqKWl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CisKKwkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbSkpIHsKIAkJY2FzZSBYRlNfTElfQlVGOgotCQkJZmxhZ3MgPSBidWZfZi0+YmxmX2ZsYWdzOwotCQkJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpIHsKLQkJCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fZnJvbnRxKCZ0cmFucy0+cl9pdGVtcSwKLQkJCQkJCQkJaXRlbXEpOworCQkJaWYgKCEoYnVmX2YtPmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSkgeworCQkJCWxpc3RfbW92ZSgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBYRlNfTElfSU5PREU6CkBAIC0xNjAxLDcgKzE1NDMsNyBAQAogCQljYXNlIFhGU19MSV9RVU9UQU9GRjoKIAkJY2FzZSBYRlNfTElfRUZEOgogCQljYXNlIFhGU19MSV9FRkk6Ci0JCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoJnRyYW5zLT5yX2l0ZW1xLCBpdGVtcSk7CisJCQlsaXN0X21vdmVfdGFpbCgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJeGxvZ193YXJuKApAQCAtMTYwOSw4ICsxNTUxLDggQEAKIAkJCUFTU0VSVCgwKTsKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlpdGVtcSA9IGl0ZW1xX25leHQ7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtcSk7CisJfQorCUFTU0VSVChsaXN0X2VtcHR5KCZzb3J0X2xpc3QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0Miw5ICsyMTg0LDkgQEAKIAl9CiAKIAltcCA9IGxvZy0+bF9tcDsKLQlidWZfZmxhZ3MgPSBYRlNfQlVGX0xPQ0s7CisJYnVmX2ZsYWdzID0gWEJGX0xPQ0s7CiAJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0JVRikpCi0JCWJ1Zl9mbGFncyB8PSBYRlNfQlVGX01BUFBFRDsKKwkJYnVmX2ZsYWdzIHw9IFhCRl9NQVBQRUQ7CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBibGtubywgbGVuLCBidWZfZmxhZ3MpOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CkBAIC0yMzQ2LDcgKzIyODgsNyBAQAogCX0KIAogCWJwID0geGZzX2J1Zl9yZWFkKG1wLT5tX2RkZXZfdGFyZ3AsIGluX2YtPmlsZl9ibGtubywgaW5fZi0+aWxmX2xlbiwKLQkJCSAgWEZTX0JVRl9MT0NLKTsKKwkJCSAgWEJGX0xPQ0spOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CiAJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3JlY292ZXJfZG8uLihyZWFkIzIpIiwgbXAsCiAJCQkJICBicCwgaW5fZi0+aWxmX2Jsa25vKTsKQEAgLTI4MTQsMTQgKzI3NTYsMTMgQEAKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yID0gMDsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqZmlyc3RfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtOwogCiAJZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlmaXJzdF9pdGVtID0gaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWRvIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZW0sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgewogCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtKSkgewogCQljYXNlIFhGU19MSV9CVUY6CiAJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19idWZmZXJfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKQEAgLTI4NTQsOCArMjc5NSw3IEBACiAKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKLQl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjg2OSwyMSArMjgwOSwxOCBAQAogeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnMoCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKIHsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSpmaXJzdF9pdGVtLCAqaXRlbSwgKmZyZWVfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKIAlpbnQJCQlpOwogCi0JaXRlbSA9IGZpcnN0X2l0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlkbyB7Ci0JCWZyZWVfaXRlbSA9IGl0ZW07Ci0JCWl0ZW0gPSBpdGVtLT5yaV9uZXh0OwotCQkgLyogRnJlZSB0aGUgcmVnaW9ucyBpbiB0aGUgaXRlbS4gKi8KLQkJZm9yIChpID0gMDsgaSA8IGZyZWVfaXRlbS0+cmlfY250OyBpKyspIHsKLQkJCWttZW1fZnJlZShmcmVlX2l0ZW0tPnJpX2J1ZltpXS5pX2FkZHIpOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgeworCQkvKiBGcmVlIHRoZSByZWdpb25zIGluIHRoZSBpdGVtLiAqLworCQlsaXN0X2RlbCgmaXRlbS0+cmlfbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBpdGVtLT5yaV9jbnQ7IGkrKykKKwkJCWttZW1fZnJlZShpdGVtLT5yaV9idWZbaV0uaV9hZGRyKTsKIAkJLyogRnJlZSB0aGUgaXRlbSBpdHNlbGYgKi8KLQkJa21lbV9mcmVlKGZyZWVfaXRlbS0+cmlfYnVmKTsKLQkJa21lbV9mcmVlKGZyZWVfaXRlbSk7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtKTsKKwkJa21lbV9mcmVlKGl0ZW0tPnJpX2J1Zik7CisJCWttZW1fZnJlZShpdGVtKTsKKwl9CiAJLyogRnJlZSB0aGUgdHJhbnNhY3Rpb24gcmVjb3ZlciBzdHJ1Y3R1cmUgKi8KIAlrbWVtX2ZyZWUodHJhbnMpOwogfQpAQCAtMjg5MSwxNCArMjgyOCwxMiBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucygKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucywKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yOwogCi0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl91bmxpbmtfdGlkKHEsIHRyYW5zKSkpCi0JCXJldHVybiBlcnJvcjsKKwlobGlzdF9kZWwoJnRyYW5zLT5yX2xpc3QpOwogCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fdHJhbnMobG9nLCB0cmFucywgcGFzcykpKQogCQlyZXR1cm4gZXJyb3I7CiAJeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnModHJhbnMpOwkJCS8qIG5vIGVycm9yICovCkBAIC0yOTI2LDcgKzI4NjEsNyBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YSgKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbXSwKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtdLAogCXhsb2dfcmVjX2hlYWRlcl90CSpyaGVhZCwKIAl4ZnNfY2FkZHJfdAkJZHAsCiAJaW50CQkJcGFzcykKQEAgLTI5NjAsNyArMjg5NSw3IEBACiAJCX0KIAkJdGlkID0gYmUzMl90b19jcHUob2hlYWQtPm9oX3RpZCk7CiAJCWhhc2ggPSBYTE9HX1JIQVNIKHRpZCk7Ci0JCXRyYW5zID0geGxvZ19yZWNvdmVyX2ZpbmRfdGlkKHJoYXNoW2hhc2hdLCB0aWQpOworCQl0cmFucyA9IHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgmcmhhc2hbaGFzaF0sIHRpZCk7CiAJCWlmICh0cmFucyA9PSBOVUxMKSB7CQkgICAvKiBub3QgZm91bmQ7IGFkZCBuZXcgdGlkICovCiAJCQlpZiAob2hlYWQtPm9oX2ZsYWdzICYgWExPR19TVEFSVF9UUkFOUykKIAkJCQl4bG9nX3JlY292ZXJfbmV3X3RpZCgmcmhhc2hbaGFzaF0sIHRpZCwKQEAgLTI5NzgsNyArMjkxMyw3IEBACiAJCQlzd2l0Y2ggKGZsYWdzKSB7CiAJCQljYXNlIFhMT0dfQ09NTUlUX1RSQU5TOgogCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucyhsb2csCi0JCQkJCQkmcmhhc2hbaGFzaF0sIHRyYW5zLCBwYXNzKTsKKwkJCQkJCQkJdHJhbnMsIHBhc3MpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYTE9HX1VOTU9VTlRfVFJBTlM6CiAJCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfdW5tb3VudF90cmFucyh0cmFucyk7CkBAIC0zMjExLDcgKzMxNDYsNyBAQAogCS8qCiAJICogR2V0IHRoZSBvbiBkaXNrIGlub2RlIHRvIGZpbmQgdGhlIG5leHQgaW5vZGUgaW4gdGhlIGJ1Y2tldC4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfaXB1dDsKIApAQCAtMzUxNyw3ICszNDUyLDcgQEAKIAlpbnQJCQllcnJvciA9IDAsIGhfc2l6ZTsKIAlpbnQJCQliYmxrcywgc3BsaXRfYmJsa3M7CiAJaW50CQkJaGJsa3MsIHNwbGl0X2hibGtzLCB3cmFwcGVkX2hibGtzOwotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbWExPR19SSEFTSF9TSVpFXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtYTE9HX1JIQVNIX1NJWkVdOwogCiAJQVNTRVJUKGhlYWRfYmxrICE9IHRhaWxfYmxrKTsKIApAQCAtMzk3OCw4ICszOTEzLDcgQEAKIAkJICogY2FzZSB0aGUgdW5saW5rIHRyYW5zYWN0aW9ucyB3b3VsZCBoYXZlIHByb2JsZW1zCiAJCSAqIHB1c2hpbmcgdGhlIEVGSXMgb3V0IG9mIHRoZSB3YXkuCiAJCSAqLwotCQl4ZnNfbG9nX2ZvcmNlKGxvZy0+bF9tcCwgKHhmc19sc25fdCkwLAotCQkJICAgICAgKFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpKTsKKwkJeGZzX2xvZ19mb3JjZShsb2ctPmxfbXAsIFhGU19MT0dfU1lOQyk7CiAKIAkJeGxvZ19yZWNvdmVyX3Byb2Nlc3NfaXVubGlua3MobG9nKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oCmluZGV4IGIyMjU0NTUuLjc1ZDc0OTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaAorKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmgKQEAgLTM1LDIyICszNSwyMSBAQAogICogaXRlbSBoZWFkZXJzIGFyZSBpbiByaV9idWZbMF0uICBBZGRpdGlvbmFsIGJ1ZmZlcnMgZm9sbG93LgogICovCiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSB7Ci0Jc3RydWN0IHhsb2dfcmVjb3Zlcl9pdGVtICpyaV9uZXh0OwotCXN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSAqcmlfcHJldjsKLQlpbnQJCQkgcmlfdHlwZTsKLQlpbnQJCQkgcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCi0JaW50CQkJIHJpX3RvdGFsOwkvKiB0b3RhbCByZWdpb25zICovCi0JeGZzX2xvZ19pb3ZlY190CQkgKnJpX2J1ZjsJLyogcHRyIHRvIHJlZ2lvbnMgYnVmZmVyICovCisJc3RydWN0IGxpc3RfaGVhZAlyaV9saXN0OworCWludAkJCXJpX3R5cGU7CisJaW50CQkJcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCisJaW50CQkJcmlfdG90YWw7CS8qIHRvdGFsIHJlZ2lvbnMgKi8KKwl4ZnNfbG9nX2lvdmVjX3QJCSpyaV9idWY7CS8qIHB0ciB0byByZWdpb25zIGJ1ZmZlciAqLwogfSB4bG9nX3JlY292ZXJfaXRlbV90OwogCiBzdHJ1Y3QgeGxvZ190aWQ7CiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXIgewotCXN0cnVjdCB4bG9nX3JlY292ZXIgKnJfbmV4dDsKLQl4bG9nX3RpZF90CSAgICByX2xvZ190aWQ7CQkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLwotCXhmc190cmFuc19oZWFkZXJfdCAgcl90aGVhZGVyOwkJLyogdHJhbnMgaGVhZGVyIGZvciBwYXJ0aWFsICovCi0JaW50CQkgICAgcl9zdGF0ZTsJCS8qIG5vdCBuZWVkZWQgKi8KLQl4ZnNfbHNuX3QJICAgIHJfbHNuOwkJLyogeGFjdCBsc24gKi8KLQl4bG9nX3JlY292ZXJfaXRlbV90ICpyX2l0ZW1xOwkJLyogcSBmb3IgaXRlbXMgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlyX2xpc3Q7CisJeGxvZ190aWRfdAkJcl9sb2dfdGlkOwkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLworCXhmc190cmFuc19oZWFkZXJfdAlyX3RoZWFkZXI7CS8qIHRyYW5zIGhlYWRlciBmb3IgcGFydGlhbCAqLworCWludAkJCXJfc3RhdGU7CS8qIG5vdCBuZWVkZWQgKi8KKwl4ZnNfbHNuX3QJCXJfbHNuOwkJLyogeGFjdCBsc24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJfaXRlbXE7CS8qIHEgZm9yIGl0ZW1zICovCiB9IHhsb2dfcmVjb3Zlcl90OwogCiAjZGVmaW5lIElURU1fVFlQRShpKQkoKih1c2hvcnQgKikoaSktPnJpX2J1ZlswXS5pX2FkZHIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggZWI0MDNiNC4uNmFmYWFlYjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTIwMSw2ICsyMDEsMzggQEAKIAogCiAvKgorICogUmVmZXJlbmNlIGNvdW50aW5nIGFjY2VzcyB3cmFwcGVycyB0byB0aGUgcGVyYWcgc3RydWN0dXJlcy4KKyAqLworc3RydWN0IHhmc19wZXJhZyAqCit4ZnNfcGVyYWdfZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfYWdudW1iZXJfdCBhZ25vKQoreworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKKwlpbnQJCQlyZWYgPSAwOworCisJc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwlwYWcgPSByYWRpeF90cmVlX2xvb2t1cCgmbXAtPm1fcGVyYWdfdHJlZSwgYWdubyk7CisJaWYgKHBhZykgeworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPj0gMCk7CisJCS8qIGNhdGNoIGxlYWtzIGluIHRoZSBwb3NpdGl2ZSBkaXJlY3Rpb24gZHVyaW5nIHRlc3RpbmcgKi8KKwkJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpIDwgMTAwMCk7CisJCXJlZiA9IGF0b21pY19pbmNfcmV0dXJuKCZwYWctPnBhZ19yZWYpOworCX0KKwlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJdHJhY2VfeGZzX3BlcmFnX2dldChtcCwgYWdubywgcmVmLCBfUkVUX0lQXyk7CisJcmV0dXJuIHBhZzsKK30KKwordm9pZAoreGZzX3BlcmFnX3B1dChzdHJ1Y3QgeGZzX3BlcmFnICpwYWcpCit7CisJaW50CXJlZjsKKworCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA+IDApOworCXJlZiA9IGF0b21pY19kZWNfcmV0dXJuKCZwYWctPnBhZ19yZWYpOworCXRyYWNlX3hmc19wZXJhZ19wdXQocGFnLT5wYWdfbW91bnQsIHBhZy0+cGFnX2Fnbm8sIHJlZiwgX1JFVF9JUF8pOworfQorCisvKgogICogRnJlZSB1cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIG1vdW50IHN0cnVjdHVyZS4gIEFzc3VtZSB0aGF0CiAgKiB0aGUgc3RydWN0dXJlIHdhcyBpbml0aWFsbHkgemVyb2VkLCBzbyB3ZSBjYW4gdGVsbCB3aGljaCBmaWVsZHMgZ290CiAgKiBpbml0aWFsaXplZC4KQEAgLTIwOSwxMyArMjQxLDE2IEBACiB4ZnNfZnJlZV9wZXJhZygKIAl4ZnNfbW91bnRfdAkqbXApCiB7Ci0JaWYgKG1wLT5tX3BlcmFnKSB7Ci0JCWludAlhZ25vOworCXhmc19hZ251bWJlcl90CWFnbm87CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCi0JCWZvciAoYWdubyA9IDA7IGFnbm8gPCBtcC0+bV9tYXhhZ2k7IGFnbm8rKykKLQkJCWlmIChtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3QpCi0JCQkJa21lbV9mcmVlKG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCk7Ci0JCWttZW1fZnJlZShtcC0+bV9wZXJhZyk7CisJZm9yIChhZ25vID0gMDsgYWdubyA8IG1wLT5tX3NiLnNiX2FnY291bnQ7IGFnbm8rKykgeworCQlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlwYWcgPSByYWRpeF90cmVlX2RlbGV0ZSgmbXAtPm1fcGVyYWdfdHJlZSwgYWdubyk7CisJCUFTU0VSVChwYWcpOworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPT0gMCk7CisJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJa21lbV9mcmVlKHBhZyk7CiAJfQogfQogCkBAIC0zODksMjIgKzQyNCw1NyBAQAogCX0KIH0KIAoteGZzX2FnbnVtYmVyX3QKK2ludAogeGZzX2luaXRpYWxpemVfcGVyYWcoCiAJeGZzX21vdW50X3QJKm1wLAotCXhmc19hZ251bWJlcl90CWFnY291bnQpCisJeGZzX2FnbnVtYmVyX3QJYWdjb3VudCwKKwl4ZnNfYWdudW1iZXJfdAkqbWF4YWdpKQogewogCXhmc19hZ251bWJlcl90CWluZGV4LCBtYXhfbWV0YWRhdGE7CisJeGZzX2FnbnVtYmVyX3QJZmlyc3RfaW5pdGlhbGlzZWQgPSAwOwogCXhmc19wZXJhZ190CSpwYWc7CiAJeGZzX2FnaW5vX3QJYWdpbm87CiAJeGZzX2lub190CWlubzsKIAl4ZnNfc2JfdAkqc2JwID0gJm1wLT5tX3NiOwogCXhmc19pbm9fdAltYXhfaW51bSA9IFhGU19NQVhJTlVNQkVSXzMyOworCWludAkJZXJyb3IgPSAtRU5PTUVNOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIGNhbiBvdmVyZmxvdyAzMiBiaXQgaW5vZGVzICovCiAJYWdpbm8gPSBYRlNfT0ZGQk5PX1RPX0FHSU5PKG1wLCBzYnAtPnNiX2FnYmxvY2tzIC0gMSwgMCk7CiAJaW5vID0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdjb3VudCAtIDEsIGFnaW5vKTsKIAorCS8qCisJICogV2FsayB0aGUgY3VycmVudCBwZXItYWcgdHJlZSBzbyB3ZSBkb24ndCB0cnkgdG8gaW5pdGlhbGlzZSBBR3MKKwkgKiB0aGF0IGFscmVhZHkgZXhpc3QgKGdyb3dmcyBjYXNlKS4gQWxsb2NhdGUgYW5kIGluc2VydCBhbGwgdGhlCisJICogQUdzIHdlIGRvbid0IGZpbmQgcmVhZHkgZm9yIGluaXRpYWxpc2F0aW9uLgorCSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFnY291bnQ7IGluZGV4KyspIHsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOworCQlpZiAocGFnKSB7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWZpcnN0X2luaXRpYWxpc2VkKQorCQkJZmlyc3RfaW5pdGlhbGlzZWQgPSBpbmRleDsKKwkJcGFnID0ga21lbV96YWxsb2Moc2l6ZW9mKCpwYWcpLCBLTV9NQVlGQUlMKTsKKwkJaWYgKCFwYWcpCisJCQlnb3RvIG91dF91bndpbmQ7CisJCWlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PRlMpKQorCQkJZ290byBvdXRfdW53aW5kOworCQlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJm1wLT5tX3BlcmFnX3RyZWUsIGluZGV4LCBwYWcpKSB7CisJCQlCVUcoKTsKKwkJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwkJCWVycm9yID0gLUVFWElTVDsKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwkJfQorCQlwYWctPnBhZ19hZ25vID0gaW5kZXg7CisJCXBhZy0+cGFnX21vdW50ID0gbXA7CisJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCX0KKwogCS8qIENsZWFyIHRoZSBtb3VudCBmbGFnIGlmIG5vIGlub2RlIGNhbiBvdmVyZmxvdyAzMiBiaXRzCiAJICogb24gdGhpcyBmaWxlc3lzdGVtLCBvciBpZiBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLi4KIAkgKi8KQEAgLTQzOCwyMSArNTA4LDMzIEBACiAJCQl9CiAKIAkJCS8qIFRoaXMgYWcgaXMgcHJlZmVycmVkIGZvciBpbm9kZXMgKi8KLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCQlwYWctPnBhZ2lfaW5vZGVvayA9IDE7CiAJCQlpZiAoaW5kZXggPCBtYXhfbWV0YWRhdGEpCiAJCQkJcGFnLT5wYWdmX21ldGFkYXRhID0gMTsKIAkJCXhmc19pbml0aWFsaXplX3BlcmFnX2ljYWNoZShwYWcpOworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogU2V0dXAgZGVmYXVsdCBiZWhhdmlvciBmb3Igc21hbGxlciBmaWxlc3lzdGVtcyAqLwogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhZ2NvdW50OyBpbmRleCsrKSB7Ci0JCQlwYWcgPSAmbXAtPm1fcGVyYWdbaW5kZXhdOworCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOwogCQkJcGFnLT5wYWdpX2lub2Rlb2sgPSAxOwogCQkJeGZzX2luaXRpYWxpemVfcGVyYWdfaWNhY2hlKHBhZyk7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCX0KIAl9Ci0JcmV0dXJuIGluZGV4OworCWlmIChtYXhhZ2kpCisJCSptYXhhZ2kgPSBpbmRleDsKKwlyZXR1cm4gMDsKKworb3V0X3Vud2luZDoKKwlrbWVtX2ZyZWUocGFnKTsKKwlmb3IgKDsgaW5kZXggPiBmaXJzdF9pbml0aWFsaXNlZDsgaW5kZXgtLSkgeworCQlwYWcgPSByYWRpeF90cmVlX2RlbGV0ZSgmbXAtPm1fcGVyYWdfdHJlZSwgaW5kZXgpOworCQlrbWVtX2ZyZWUocGFnKTsKKwl9CisJcmV0dXJuIGVycm9yOwogfQogCiB2b2lkCkBAIC01ODMsNyArNjY1LDcgQEAKIAkgKiBhY2Nlc3MgdG8gdGhlIHN1cGVyYmxvY2suCiAJICovCiAJc2VjdG9yX3NpemUgPSB4ZnNfZ2V0c2l6ZV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApOwotCWV4dHJhX2ZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQU5BR0UgfCBYRlNfQlVGX01BUFBFRDsKKwlleHRyYV9mbGFncyA9IFhCRl9MT0NLIHwgWEJGX0ZTX01BTkFHRUQgfCBYQkZfTUFQUEVEOwogCiAJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgWEZTX1NCX0RBRERSLCBCVE9CQihzZWN0b3Jfc2l6ZSksCiAJCQkgIGV4dHJhX2ZsYWdzKTsKQEAgLTczMSwxMiArODEzLDEzIEBACiAJCWVycm9yID0geGZzX2lhbGxvY19wYWdpX2luaXQobXAsIE5VTEwsIGluZGV4KTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbaW5kZXhdOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCWlmcmVlICs9IHBhZy0+cGFnaV9mcmVlY291bnQ7CiAJCWlhbGxvYyArPSBwYWctPnBhZ2lfY291bnQ7CiAJCWJmcmVlICs9IHBhZy0+cGFnZl9mcmVlYmxrczsKIAkJYmZyZWVsc3QgKz0gcGFnLT5wYWdmX2ZsY291bnQ7CiAJCWJ0cmVlICs9IHBhZy0+cGFnZl9idHJlZWJsa3M7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAl9CiAJLyoKIAkgKiBPdmVyd3JpdGUgaW5jb3JlIHN1cGVyYmxvY2sgY291bnRlcnMgd2l0aCBqdXN0LXJlYWQgZGF0YQpAQCAtMTAwOCw2ICsxMDkxLDIyIEBACiAJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIDApOwogfQogCitfX3VpbnQ2NF90Cit4ZnNfZGVmYXVsdF9yZXNibGtzKHhmc19tb3VudF90ICptcCkKK3sKKwlfX3VpbnQ2NF90IHJlc2Jsa3M7CisKKwkvKgorCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKKwkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KKwkgKi8KKwlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKKwlkb19kaXYocmVzYmxrcywgMjApOworCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKKwlyZXR1cm4gcmVzYmxrczsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nIG9uIGFuIGluaXRpYWwgbW91bnQgb2YgYSBmaWxlIHN5c3RlbToKICAqCS0gcmVhZHMgdGhlIHN1cGVyYmxvY2sgZnJvbSBkaXNrIGFuZCBpbml0IHRoZSBtb3VudCBzdHJ1Y3QKQEAgLTExNTIsMTMgKzEyNTEsMTMgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItYWcgZGF0YS4KIAkgKi8KLQlpbml0X3J3c2VtKCZtcC0+bV9wZXJhZ2xvY2spOwotCW1wLT5tX3BlcmFnID0ga21lbV96YWxsb2Moc2JwLT5zYl9hZ2NvdW50ICogc2l6ZW9mKHhmc19wZXJhZ190KSwKLQkJCQkgIEtNX01BWUZBSUwpOwotCWlmICghbXAtPm1fcGVyYWcpCisJc3Bpbl9sb2NrX2luaXQoJm1wLT5tX3BlcmFnX2xvY2spOworCUlOSVRfUkFESVhfVFJFRSgmbXAtPm1fcGVyYWdfdHJlZSwgR0ZQX05PRlMpOworCWVycm9yID0geGZzX2luaXRpYWxpemVfcGVyYWcobXAsIHNicC0+c2JfYWdjb3VudCwgJm1wLT5tX21heGFnaSk7CisJaWYgKGVycm9yKSB7CisJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogRmFpbGVkIHBlci1hZyBpbml0OiAlZCIsIGVycm9yKTsKIAkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7Ci0KLQltcC0+bV9tYXhhZ2kgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgc2JwLT5zYl9hZ2NvdW50KTsKKwl9CiAKIAlpZiAoIXNicC0+c2JfbG9nYmxvY2tzKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gbG9nIGRlZmluZWQiKTsKQEAgLTEzMTgsMTggKzE0MTcsMTQgQEAKIAkgKiB3aGVuIGF0IEVOT1NQQy4gVGhpcyBpcyBuZWVkZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBjcmVhdGUgd2l0aAogCSAqIGF0dHIsIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiBhdCBFTk9TUEMsIGV0Yy4gRGF0YSBhbGxvY2F0aW9ucwogCSAqIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgdGhpcyByZXNlcnZlZCBzcGFjZS4KLQkgKgotCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KLQkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKLQkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KIAkgKi8KLQlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKLQlkb19kaXYocmVzYmxrcywgMjApOwotCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKLQllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOwotCWlmIChlcnJvcikKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gYWxsb2NhdGUgcmVzZXJ2ZSBibG9ja3MuICIKLQkJCQkiQ29udGludWluZyB3aXRob3V0IGEgcmVzZXJ2ZSBwb29sLiIpOworCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKKwkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOworCQllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworCQlpZiAoZXJyb3IpCisJCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBhbGxvY2F0ZSByZXNlcnZlICIKKwkJCQkiYmxvY2tzLiBDb250aW51aW5nIHdpdGhvdXQgYSByZXNlcnZlIHBvb2wuIik7CisJfQogCiAJcmV0dXJuIDA7CiAKQEAgLTEzNzIsOCArMTQ2NywxOSBAQAogCSAqIHB1c2ggb3V0IHRoZSBpY2xvZyB3ZSB3aWxsIG5ldmVyIGdldCB0aGF0IHVubG9ja2VkLiBoZW5jZSB3ZQogCSAqIG5lZWQgdG8gZm9yY2UgdGhlIGxvZyBmaXJzdC4KIAkgKi8KLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOwotCXhmc19yZWNsYWltX2lub2RlcyhtcCwgWEZTX0lGTFVTSF9BU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKKworCS8qCisJICogRG8gYSBkZWx3cmkgcmVjbGFpbSBwYXNzIGZpcnN0IHNvIHRoYXQgYXMgbWFueSBkaXJ0eSBpbm9kZXMgYXJlCisJICogcXVldWVkIHVwIGZvciBJTyBhcyBwb3NzaWJsZS4gVGhlbiBmbHVzaCB0aGUgYnVmZmVycyBiZWZvcmUgbWFraW5nCisJICogYSBzeW5jaHJvbm91cyBwYXRoIHRvIGNhdGNoIGFsbCB0aGUgcmVtYWluaW5nIGlub2RlcyBhcmUgcmVjbGFpbWVkLgorCSAqIFRoaXMgbWFrZXMgdGhlIHJlY2xhaW0gcHJvY2VzcyBhcyBxdWljayBhcyBwb3NzaWJsZSBieSBhdm9pZGluZworCSAqIHN5bmNocm9ub3VzIHdyaXRlb3V0IGFuZCBibG9ja2luZyBvbiBpbm9kZXMgYWxyZWFkeSBpbiB0aGUgZGVsd3JpCisJICogc3RhdGUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgKi8KKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIDApOworCVhGU19iZmx1c2gobXAtPm1fZGRldl90YXJncCk7CisJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1dBSVQpOwogCiAJeGZzX3FtX3VubW91bnQobXApOwogCkBAIC0xMzgyLDcgKzE0ODgsNyBAQAogCSAqIHRoYXQgbm90aGluZyBpcyBwaW5uZWQuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGJmbHVzaCgpCiAJICogd2lsbCBza2lwIHBpbm5lZCBidWZmZXJzLgogCSAqLwotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKIAogCXhmc19iaW52YWwobXAtPm1fZGRldl90YXJncCk7CiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKSB7CkBAIC0xNTQ4LDE1ICsxNjU0LDE0IEBACiAJeGZzX3NiX3RvX2Rpc2soWEZTX0JVRl9UT19TQlAoYnApLCAmbXAtPm1fc2IsIGZpZWxkcyk7CiAKIAkvKiBmaW5kIG1vZGlmaWVkIHJhbmdlICovCisJZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfaGlnaGJpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7CisJQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOworCWxhc3QgPSB4ZnNfc2JfaW5mb1tmICsgMV0ub2Zmc2V0IC0gMTsKIAogCWYgPSAoeGZzX3NiX2ZpZWxkX3QpeGZzX2xvd2JpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7CiAJQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOwogCWZpcnN0ID0geGZzX3NiX2luZm9bZl0ub2Zmc2V0OwogCi0JZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfaGlnaGJpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7Ci0JQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOwotCWxhc3QgPSB4ZnNfc2JfaW5mb1tmICsgMV0ub2Zmc2V0IC0gMTsKLQogCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgZmlyc3QsIGxhc3QpOwogfQogCkBAIC0xODg3LDcgKzE5OTIsNyBAQAogCiAJQVNTRVJUKG1wLT5tX3NiX2JwICE9IE5VTEwpOwogCWJwID0gbXAtPm1fc2JfYnA7Ci0JaWYgKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSB7CisJaWYgKGZsYWdzICYgWEJGX1RSWUxPQ0spIHsKIAkJaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpIHsKIAkJCXJldHVybiBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggMWRmN2U0NS4uMTRkYWZkNjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTc4LDcgKzc4LDggQEAKIHR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbmFtZXNwX3QpKGRtX2V2ZW50dHlwZV90LCBzdHJ1Y3QgeGZzX21vdW50ICosCiAJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCiAJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCi0JCQljb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBpbnQsIGludCk7CisJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCW1vZGVfdCwgaW50LCBpbnQpOwogdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIGRtX3JpZ2h0X3QsCiAJCQljaGFyICosIGNoYXIgKik7CiB0eXBlZGVmIHZvaWQJKCp4ZnNfc2VuZF91bm1vdW50X3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19pbm9kZSAqLApAQCAtMjA3LDggKzIwOCw4IEBACiAJdWludAkJCW1fYWdfbWF4bGV2ZWxzOwkvKiBYRlNfQUdfTUFYTEVWRUxTICovCiAJdWludAkJCW1fYm1fbWF4bGV2ZWxzWzJdOyAvKiBYRlNfQk1fTUFYTEVWRUxTICovCiAJdWludAkJCW1faW5fbWF4bGV2ZWxzOwkvKiBtYXggaW5vYnQgYnRyZWUgbGV2ZWxzLiAqLwotCXN0cnVjdCB4ZnNfcGVyYWcJKm1fcGVyYWc7CS8qIHBlci1hZyBhY2NvdW50aW5nIGluZm8gKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlCW1fcGVyYWdsb2NrOwkvKiBsb2NrIGZvciBtX3BlcmFnIChwb2ludGVyKSAqLworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJbV9wZXJhZ190cmVlOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCisJc3BpbmxvY2tfdAkJbV9wZXJhZ19sb2NrOwkvKiBsb2NrIGZvciBtX3BlcmFnX3RyZWUgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1fZ3Jvd2xvY2s7CS8qIGdyb3dmcyBtdXRleCAqLwogCWludAkJCW1fZml4ZWRmc2lkWzJdOwkvKiB1bmNoYW5nZWQgZm9yIGxpZmUgb2YgRlMgKi8KIAl1aW50CQkJbV9kbWV2bWFzazsJLyogRE1JIGV2ZW50cyBmb3IgdGhpcyBGUyAqLwpAQCAtMjI0LDYgKzIyNSw3IEBACiAJX191aW50NjRfdAkJbV9tYXhpb2Zmc2V0OwkvKiBtYXhpbXVtIGlub2RlIG9mZnNldCAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrczsJLyogdG90YWwgcmVzZXJ2ZWQgYmxvY2tzICovCiAJX191aW50NjRfdAkJbV9yZXNibGtzX2F2YWlsOy8qIGF2YWlsYWJsZSByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3VpbnQ2NF90CQltX3Jlc2Jsa3Nfc2F2ZTsJLyogcmVzZXJ2ZWQgYmxrcyBAIHJlbW91bnQscm8gKi8KIAlpbnQJCQltX2RhbGlnbjsJLyogc3RyaXBlIHVuaXQgKi8KIAlpbnQJCQltX3N3aWR0aDsJLyogc3RyaXBlIHdpZHRoICovCiAJaW50CQkJbV9zaW5vYWxpZ247CS8qIHN0cmlwZSB1bml0IGlub2RlIGFsaWdubWVudCAqLwpAQCAtMjQzLDcgKzI0NSw3IEBACiAJc3RydWN0IHhmc19xbW9wcwkqbV9xbV9vcHM7CS8qIHZlY3RvciBvZiBYUU0gb3BzICovCiAJYXRvbWljX3QJCW1fYWN0aXZlX3RyYW5zOwkvKiBudW1iZXIgdHJhbnMgZnJvemVuICovCiAjaWZkZWYgSEFWRV9QRVJDUFVfU0IKLQl4ZnNfaWNzYl9jbnRzX3QJCSptX3NiX2NudHM7CS8qIHBlci1jcHUgc3VwZXJibG9jayBjb3VudGVycyAqLworCXhmc19pY3NiX2NudHNfdCBfX3BlcmNwdSAqbV9zYl9jbnRzOwkvKiBwZXItY3B1IHN1cGVyYmxvY2sgY291bnRlcnMgKi8KIAl1bnNpZ25lZCBsb25nCQltX2ljc2JfY291bnRlcnM7IC8qIGRpc2FibGVkIHBlci1jcHUgY291bnRlcnMgKi8KIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbV9pY3NiX25vdGlmaWVyOyAvKiBob3RwbHVnIGNwdSBub3RpZmllciAqLwogCXN0cnVjdCBtdXRleAkJbV9pY3NiX211dGV4OwkvKiBiYWxhbmNlciBzeW5jIGxvY2sgKi8KQEAgLTM4NCwxOSArMzg2LDEwIEBACiB9CiAKIC8qCi0gKiBwZXJhZyBnZXQvcHV0IHdyYXBwZXJzIGZvciBldmVudHVhbCByZWYgY291bnRpbmcKKyAqIHBlcmFnIGdldC9wdXQgd3JhcHBlcnMgZm9yIHJlZiBjb3VudGluZwogICovCi1zdGF0aWMgaW5saW5lIHhmc19wZXJhZ190ICoKLXhmc19nZXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19pbm9fdCBpbm8pCi17Ci0JcmV0dXJuICZtcC0+bV9wZXJhZ1tYRlNfSU5PX1RPX0FHTk8obXAsIGlubyldOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhmc19wdXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19wZXJhZ190ICpwYWcpCi17Ci0JLyogbm90aGluZyB0byBzZWUgaGVyZSwgbW92ZSBhbG9uZyAqLwotfQorc3RydWN0IHhmc19wZXJhZyAqeGZzX3BlcmFnX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubyk7Cit2b2lkCXhmc19wZXJhZ19wdXQoc3RydWN0IHhmc19wZXJhZyAqcGFnKTsKIAogLyoKICAqIFBlci1jcHUgc3VwZXJibG9jayBsb2NraW5nIGZ1bmN0aW9ucwpAQCAtNDI4LDYgKzQyMSw3IEBACiB9IHhmc19tb2Rfc2JfdDsKIAogZXh0ZXJuIGludAl4ZnNfbG9nX3NiY291bnQoeGZzX21vdW50X3QgKiwgdWludCk7CitleHRlcm4gX191aW50NjRfdCB4ZnNfZGVmYXVsdF9yZXNibGtzKHhmc19tb3VudF90ICptcCk7CiBleHRlcm4gaW50CXhmc19tb3VudGZzKHhmc19tb3VudF90ICptcCk7CiAKIGV4dGVybiB2b2lkCXhmc191bm1vdW50ZnMoeGZzX21vdW50X3QgKik7CkBAIC00NTAsNyArNDQ0LDggQEAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKIGV4dGVybiB2b2lkCXhmc19tb2Rfc2Ioc3RydWN0IHhmc190cmFucyAqLCBfX2ludDY0X3QpOwotZXh0ZXJuIHhmc19hZ251bWJlcl90CXhmc19pbml0aWFsaXplX3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2FnbnVtYmVyX3QpOworZXh0ZXJuIGludAl4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19hZ251bWJlcl90LAorCQkJCQl4ZnNfYWdudW1iZXJfdCAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl9mcm9tX2Rpc2soc3RydWN0IHhmc19zYiAqLCBzdHJ1Y3QgeGZzX2RzYiAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl90b19kaXNrKHN0cnVjdCB4ZnNfZHNiICosIHN0cnVjdCB4ZnNfc2IgKiwgX19pbnQ2NF90KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKaW5kZXggNGIwNjEzZC4uNDVjZTE1ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYworKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5jCkBAIC0zOTgsNyArMzk4LDcgQEAKICAqIGd1YXJhbnRlZWQgdGhhdCBhbGwgdGhlIGZyZWUgZnVuY3Rpb25zIGZvciBhbGwgdGhlIGVsZW1lbnRzIGhhdmUgZmluaXNoZWQKICAqIGV4ZWN1dGluZyBhbmQgdGhlIHJlYXBlciBpcyBub3QgcnVubmluZy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIHhmc19tcnVfY2FjaGVfZmx1c2goCiAJeGZzX21ydV9jYWNoZV90CQkqbXJ1KQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaCBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmgKaW5kZXggNWQ0MzlmMy4uMzZkZDNlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaAorKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5oCkBAIC00Miw3ICs0Miw2IEBACiBpbnQgeGZzX21ydV9jYWNoZV9jcmVhdGUoc3RydWN0IHhmc19tcnVfY2FjaGUgKiptcnVwLCB1bnNpZ25lZCBpbnQgbGlmZXRpbWVfbXMsCiAJCQkgICAgIHVuc2lnbmVkIGludCBncnBfY291bnQsCiAJCQkgICAgIHhmc19tcnVfY2FjaGVfZnJlZV9mdW5jX3QgZnJlZV9mdW5jKTsKLXZvaWQgeGZzX21ydV9jYWNoZV9mbHVzaCh4ZnNfbXJ1X2NhY2hlX3QgKm1ydSk7CiB2b2lkIHhmc19tcnVfY2FjaGVfZGVzdHJveShzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1KTsKIGludCB4ZnNfbXJ1X2NhY2hlX2luc2VydChzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1LCB1bnNpZ25lZCBsb25nIGtleSwKIAkJCQl2b2lkICp2YWx1ZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggOTFiZmQ2MC4uZmRjYWIzZjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcXVvdGEuaAorKysgYi9mcy94ZnMveGZzX3F1b3RhLmgKQEAgLTIyMywxNiArMjIzLDkgQEAKICNkZWZpbmUgWEZTX1FNT1BUX1JFU19JTk9TCTB4MDgwMDAwMAogCiAvKgotICogZmxhZ3MgZm9yIGRxZmx1c2ggYW5kIGRxZmx1c2hfYWxsLgotICovCi0jZGVmaW5lIFhGU19RTU9QVF9TWU5DCQkweDEwMDAwMDAKLSNkZWZpbmUgWEZTX1FNT1BUX0FTWU5DCQkweDIwMDAwMDAKLSNkZWZpbmUgWEZTX1FNT1BUX0RFTFdSSQkweDQwMDAwMDAKLQotLyoKICAqIGZsYWdzIGZvciBkcWFsbG9jLgogICovCi0jZGVmaW5lIFhGU19RTU9QVF9JTkhFUklUCTB4ODAwMDAwMAorI2RlZmluZSBYRlNfUU1PUFRfSU5IRVJJVAkweDEwMDAwMDAKIAogLyoKICAqIGZsYWdzIHRvIHhmc190cmFuc19tb2RfZHF1b3QuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggNWFhMDdjYS4uZTMzNjc0MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtNDcsNDggKzQ3LDYgQEAKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKLSAqIFRoaXMgaXMgYSBzdWJyb3V0aW5lIGZvciB4ZnNfd3JpdGUoKSBhbmQgb3RoZXIgd3JpdGVycyAoeGZzX2lvY3RsKQotICogd2hpY2ggY2xlYXJzIHRoZSBzZXR1aWQgYW5kIHNldGdpZCBiaXRzIHdoZW4gYSBmaWxlIGlzIHdyaXR0ZW4uCi0gKi8KLWludAoteGZzX3dyaXRlX2NsZWFyX3NldHVpZCgKLQl4ZnNfaW5vZGVfdAkqaXApCi17Ci0JeGZzX21vdW50X3QJKm1wOwotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yOwotCi0JbXAgPSBpcC0+aV9tb3VudDsKLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1dSSVRFSUQpOwotCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKLQkJCQkgICAgICBYRlNfV1JJVEVJRF9MT0dfUkVTKG1wKSwKLQkJCQkgICAgICAwLCAwLCAwKSkpIHsKLQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOwotCWlwLT5pX2QuZGlfbW9kZSAmPSB+U19JU1VJRDsKLQotCS8qCi0JICogTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWFuZGF0b3J5Ci0JICogZmlsZSBsb2NraW5nIGJlaW5nIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB3ZSBvbmx5Ci0JICogY2xlYXIgdGhlIFNfSVNHSUQgYml0IGlmIHRoZSBHcm91cCBleGVjdXRlIGJpdCBpcwotCSAqIG9uLCBidXQgaWYgaXQgd2FzIG9uIHRoZW4gbWFuZGF0b3J5IGxvY2tpbmcgd291bGRuJ3QKLQkgKiBoYXZlIGJlZW4gZW5hYmxlZC4KLQkgKi8KLQlpZiAoaXAtPmlfZC5kaV9tb2RlICYgU19JWEdSUCkgewotCQlpcC0+aV9kLmRpX21vZGUgJj0gflNfSVNHSUQ7Ci0JfQotCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIEZvcmNlIGEgc2h1dGRvd24gb2YgdGhlIGZpbGVzeXN0ZW0gaW5zdGFudGx5IHdoaWxlIGtlZXBpbmcKICAqIHRoZSBmaWxlc3lzdGVtIGNvbnNpc3RlbnQuIFdlIGRvbid0IGRvIGFuIHVubW91bnQgaGVyZTsganVzdCBzaHV0ZG93bgogICogdGhlIHNob3AsIG1ha2Ugc3VyZSB0aGF0IGFic29sdXRlbHkgbm90aGluZyBwZXJzaXN0ZW50IGhhcHBlbnMgdG8KQEAgLTE1Myw4OCArMTExLDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3RvcCBhIGJ1ZmZlciBmcm9tIGdldHRpbmcgd3JpdHRlbiBvciByZWFkLgotICogV2UgYXR0YWNoIHRoZSBFSU8gZXJyb3IsIG11Y2sgd2l0aCBpdHMgZmxhZ3MsIGFuZCBjYWxsIGJpb2RvbmUKLSAqIHNvIHRoYXQgdGhlIHByb3BlciBpb2RvbmUgY2FsbGJhY2tzIGdldCBjYWxsZWQuCi0gKi8KLWludAoteGZzX2Jpb2Vycm9yKAotCXhmc19idWZfdCAqYnApCi17Ci0KLSNpZmRlZiBYRlNFUlJPUkRFQlVHCi0JQVNTRVJUKFhGU19CVUZfSVNSRUFEKGJwKSB8fCBicC0+Yl9pb2RvbmUpOwotI2VuZGlmCi0KLQkvKgotCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgotCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KLQkgKi8KLQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCS8qCi0JICogV2UncmUgY2FsbGluZyBiaW9kb25lLCBzbyBkZWxldGUgQl9ET05FIGZsYWcuIEVpdGhlciB3YXkKLQkgKiB3ZSBoYXZlIHRvIGNhbGwgdGhlIGlvZG9uZSBjYWxsYmFjaywgYW5kIGNhbGxpbmcgYmlvZG9uZQotCSAqIHByb2JhYmx5IGlzIHRoZSBiZXN0IHdheSBzaW5jZSBpdCB0YWtlcyBjYXJlIG9mCi0JICogR1JJTyBhcyB3ZWxsLgotCSAqLwotCVhGU19CVUZfVU5SRUFEKGJwKTsKLQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7Ci0JWEZTX0JVRl9VTkRPTkUoYnApOwotCVhGU19CVUZfU1RBTEUoYnApOwotCi0JWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKLQl4ZnNfYmlvZG9uZShicCk7Ci0KLQlyZXR1cm4gKEVJTyk7Ci19Ci0KLS8qCi0gKiBTYW1lIGFzIHhmc19iaW9lcnJvciwgZXhjZXB0IHRoYXQgd2UgYXJlIHJlbGVhc2luZyB0aGUgYnVmZmVyCi0gKiBoZXJlIG91cnNlbHZlcywgYW5kIGF2b2lkaW5nIHRoZSBiaW9kb25lIGNhbGwuCi0gKiBUaGlzIGlzIG1lYW50IGZvciB1c2VyZGF0YSBlcnJvcnM7IG1ldGFkYXRhIGJ1ZnMgY29tZSB3aXRoCi0gKiBpb2RvbmUgZnVuY3Rpb25zIGF0dGFjaGVkLCBzbyB0aGF0IHdlIGNhbiB0cmFjayBkb3duIGVycm9ycy4KLSAqLwotaW50Ci14ZnNfYmlvZXJyb3JfcmVsc2UoCi0JeGZzX2J1Zl90ICpicCkKLXsKLQlpbnQ2NF90IGZsOwotCi0JQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhmc19idWZfaW9kb25lX2NhbGxiYWNrcyk7Ci0JQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhsb2dfaW9kb25lKTsKLQotCWZsID0gWEZTX0JVRl9CRkxBR1MoYnApOwotCS8qCi0JICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQuCi0JICogV2UgYXJlbid0IGZsdXNoaW5nIGl0LgotCSAqCi0JICogY2h1bmtob2xkIGV4cGVjdHMgQl9ET05FIHRvIGJlIHNldCwgd2hldGhlcgotCSAqIHdlIGFjdHVhbGx5IGZpbmlzaCB0aGUgSS9PIG9yIG5vdC4gV2UgZG9uJ3Qgd2FudCB0bwotCSAqIGNoYW5nZSB0aGF0IGludGVyZmFjZS4KLQkgKi8KLQlYRlNfQlVGX1VOUkVBRChicCk7Ci0JWEZTX0JVRl9VTkRFTEFZV1JJVEUoYnApOwotCVhGU19CVUZfRE9ORShicCk7Ci0JWEZTX0JVRl9TVEFMRShicCk7Ci0JWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApOwotCVhGU19CVUZfQ0xSX0JEU1RSQVRfRlVOQyhicCk7Ci0JaWYgKCEoZmwgJiBYRlNfQl9BU1lOQykpIHsKLQkJLyoKLQkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KLQkJICogTG90J3Mgb2YgY2h1bmtjYWNoZSBjb2RlIGFzc3VtZXMgdGhhdC4KLQkJICogVGhlcmUncyBubyByZWFzb24gdG8gbWFyayBlcnJvciBmb3IKLQkJICogQVNZTkMgYnVmZmVycy4KLQkJICovCi0JCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7Ci0JCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7Ci0JfSBlbHNlIHsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQotCXJldHVybiAoRUlPKTsKLX0KLQogLyoKICAqIFByaW50cyBvdXQgYW4gQUxFUlQgbWVzc2FnZSBhYm91dCBJL08gZXJyb3IuCiAgKi8KQEAgLTMwNiwzNyArMTgyLDYgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgYXJvdW5kIGJ3cml0ZSgpIHNvIHRoYXQgd2UgY2FuIHRyYXAKLSAqIHdyaXRlIGVycm9ycywgYW5kIGFjdCBhY2NvcmRpbmdseS4KLSAqLwotaW50Ci14ZnNfYndyaXRlKAotCXN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCXN0cnVjdCB4ZnNfYnVmCSAqYnApCi17Ci0JaW50CWVycm9yOwotCi0JLyoKLQkgKiBYWFhzdXAgaG93IGRvZXMgdGhpcyB3b3JrIGZvciBxdW90YXMuCi0JICovCi0JWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4ZnNfYmRzdHJhdF9jYik7Ci0JYnAtPmJfbW91bnQgPSBtcDsKLQlYRlNfQlVGX1dSSVRFKGJwKTsKLQotCWlmICgoZXJyb3IgPSBYRlNfYndyaXRlKGJwKSkpIHsKLQkJQVNTRVJUKG1wKTsKLQkJLyoKLQkJICogQ2Fubm90IHB1dCBhIGJ1ZnRyYWNlIGhlcmUgc2luY2UgaWYgdGhlIGJ1ZmZlciBpcyBub3QKLQkJICogQl9IT0xEIHRoZW4gd2Ugd2lsbCBicmVsc2UoKSB0aGUgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcKLQkJICogZnJvbSBid3JpdGUgYW5kIHdlIGNvdWxkIGJlIHRyYWNpbmcgYSBidWZmZXIgdGhhdCBoYXMKLQkJICogYmVlbiByZXVzZWQuCi0JCSAqLwotCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX01FVEFfSU9fRVJST1IpOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotLyoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IGV4dGVudCBzaXplIGhpbnQgZnJvbSBpbm9kZQogICovCiB4ZnNfZXh0bGVuX3QKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcncuaCBiL2ZzL3hmcy94ZnNfcncuaAppbmRleCA1NzFmMjE3Li4xMWM0MWVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J3LmgKKysrIGIvZnMveGZzL3hmc19ydy5oCkBAIC0zOSwxMCArMzksNiBAQAogLyoKICAqIFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB4ZnNfcncuYy4KICAqLwotZXh0ZXJuIGludCB4ZnNfd3JpdGVfY2xlYXJfc2V0dWlkKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKLWV4dGVybiBpbnQgeGZzX2J3cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19idWYgKmJwKTsKLWV4dGVybiBpbnQgeGZzX2Jpb2Vycm9yKHN0cnVjdCB4ZnNfYnVmICpicCk7Ci1leHRlcm4gaW50IHhmc19iaW9lcnJvcl9yZWxzZShzdHJ1Y3QgeGZzX2J1ZiAqYnApOwogZXh0ZXJuIGludCB4ZnNfcmVhZF9idWYoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19idWZ0YXJnX3QgKmJ0cCwKIAkJCXhmc19kYWRkcl90IGJsa25vLCBpbnQgbGVuLCB1aW50IGZsYWdzLAogCQkJc3RydWN0IHhmc19idWYgKipicHApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDIzN2JhZGMuLmJlOTQyZDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTk4MSw5ICs5ODEsOCBAQAogCSAqLwogCWlmIChzeW5jKSB7CiAJCWlmICghZXJyb3IpIHsKLQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIGNvbW1pdF9sc24sCi0JCQkJICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQywKLQkJCQkgICAgICBsb2dfZmx1c2hlZCk7CisJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgY29tbWl0X2xzbiwKKwkJCQkgICAgICBYRlNfTE9HX1NZTkMsIGxvZ19mbHVzaGVkKTsKIAkJfQogCQlYRlNfU1RBVFNfSU5DKHhzX3RyYW5zX3N5bmMpOwogCX0gZWxzZSB7CkBAIC0xMTIxLDcgKzExMjAsNyBAQAogCXRwLT50X2hlYWRlci50aF9udW1faXRlbXMgPSBuaXRlbXM7CiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZ0cC0+dF9oZWFkZXI7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplb2YoeGZzX3RyYW5zX2hlYWRlcl90KTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2dfdmVjdG9yLCBYTE9HX1JFR19UWVBFX1RSQU5TSERSKTsKKwlsb2dfdmVjdG9yLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1RSQU5TSERSOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBjYTY0ZjMzLi5jOTNlM2ExIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC04NjEsOCArODYxLDcgQEAKICNkZWZpbmUJWEZTX0lURU1fU1VDQ0VTUwkwCiAjZGVmaW5lCVhGU19JVEVNX1BJTk5FRAkJMQogI2RlZmluZQlYRlNfSVRFTV9MT0NLRUQJCTIKLSNkZWZpbmUJWEZTX0lURU1fRkxVU0hJTkcJMwotI2RlZmluZSBYRlNfSVRFTV9QVVNIQlVGCTQKKyNkZWZpbmUgWEZTX0lURU1fUFVTSEJVRgkzCiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBibG9jayByYW5nZXMgdGhhdCBoYXZlIGJlZW4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDJmZmM1NzAuLmU3OTk4MjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjM3LDE0ICsyMzcsMTUgQEAKIH0KIAogLyoKLSAqIEZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgd29yayBvZiBwdXNoaW5nIG9uIHRoZSBBSUwKKyAqIHhmc2FpbGRfcHVzaCBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTC4gIFJldHVybmluZyBhIHRpbWVvdXQgb2YKKyAqIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgc2xlZXAgdW50aWwgd29rZW4uCiAgKi8KIGxvbmcKIHhmc2FpbGRfcHVzaCgKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKIAl4ZnNfbHNuX3QJKmxhc3RfbHNuKQogewotCWxvbmcJCXRvdXQgPSAxMDAwOyAvKiBtaWxsaXNlY29uZHMgKi8KKwlsb25nCQl0b3V0ID0gMDsKIAl4ZnNfbHNuX3QJbGFzdF9wdXNoZWRfbHNuID0gKmxhc3RfbHNuOwogCXhmc19sc25fdAl0YXJnZXQgPSAgYWlscC0+eGFfdGFyZ2V0OwogCXhmc19sc25fdAlsc247CkBAIC0yNTIsNiArMjUzLDcgQEAKIAlpbnQJCWZsdXNoX2xvZywgY291bnQsIHN0dWNrOwogCXhmc19tb3VudF90CSptcCA9IGFpbHAtPnhhX21vdW50OwogCXN0cnVjdCB4ZnNfYWlsX2N1cnNvcgkqY3VyID0gJmFpbHAtPnhhX2N1cnNvcnM7CisJaW50CQlwdXNoX3hmc2J1ZmQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9pbml0KGFpbHAsIGN1cik7CkBAIC0yNjIsNyArMjY0LDcgQEAKIAkJICovCiAJCXhmc190cmFuc19haWxfY3Vyc29yX2RvbmUoYWlscCwgY3VyKTsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwotCQlsYXN0X3B1c2hlZF9sc24gPSAwOworCQkqbGFzdF9sc24gPSAwOwogCQlyZXR1cm4gdG91dDsKIAl9CiAKQEAgLTI3OSw3ICsyODEsNiBAQAogCSAqIHByZXZlbnRzIHVzZSBmcm9tIHNwaW5uaW5nIHdoZW4gd2UgY2FuJ3QgZG8gYW55dGhpbmcgb3IgdGhlcmUgaXMKIAkgKiBsb3RzIG9mIGNvbnRlbnRpb24gb24gdGhlIEFJTCBsaXN0cy4KIAkgKi8KLQl0b3V0ID0gMTA7CiAJbHNuID0gbGlwLT5saV9sc247CiAJZmx1c2hfbG9nID0gc3R1Y2sgPSBjb3VudCA9IDA7CiAJd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8IDApKSB7CkBAIC0zMDgsNiArMzA5LDcgQEAKIAkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfcHVzaGJ1Zik7CiAJCQlJT1BfUFVTSEJVRihsaXApOwogCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOworCQkJcHVzaF94ZnNidWZkID0gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgWEZTX0lURU1fUElOTkVEOgpAQCAtMzIyLDEyICszMjQsNiBAQAogCQkJc3R1Y2srKzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgWEZTX0lURU1fRkxVU0hJTkc6Ci0JCQlYRlNfU1RBVFNfSU5DKHhzX3B1c2hfYWlsX2ZsdXNoaW5nKTsKLQkJCWxhc3RfcHVzaGVkX2xzbiA9IGxzbjsKLQkJCXN0dWNrKys7Ci0JCQlicmVhazsKLQogCQlkZWZhdWx0OgogCQkJQVNTRVJUKDApOwogCQkJYnJlYWs7CkBAIC0zNzEsMTkgKzM2NywyNCBAQAogCQkgKiBtb3ZlIGZvcndhcmQgaW4gdGhlIEFJTC4KIAkJICovCiAJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfZmx1c2gpOwotCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOworCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKKwl9CisKKwlpZiAocHVzaF94ZnNidWZkKSB7CisJCS8qIHdlJ3ZlIGdvdCBkZWxheWVkIHdyaXRlIGJ1ZmZlcnMgdG8gZmx1c2ggKi8KKwkJd2FrZV91cF9wcm9jZXNzKG1wLT5tX2RkZXZfdGFyZ3AtPmJ0X3Rhc2spOwogCX0KIAogCWlmICghY291bnQpIHsKIAkJLyogV2UncmUgcGFzdCBvdXIgdGFyZ2V0IG9yIGVtcHR5LCBzbyBpZGxlICovCi0JCXRvdXQgPSAxMDAwOworCQlsYXN0X3B1c2hlZF9sc24gPSAwOwogCX0gZWxzZSBpZiAoWEZTX0xTTl9DTVAobHNuLCB0YXJnZXQpID49IDApIHsKIAkJLyoKIAkJICogV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHNvIHdhaXQgYSBiaXQgbG9uZ2VyIGZvciBJL08gdG8KIAkJICogY29tcGxldGUgYW5kIHJlbW92ZSBwdXNoZWQgaXRlbXMgZnJvbSB0aGUgQUlMIGJlZm9yZSB3ZQogCQkgKiBzdGFydCB0aGUgbmV4dCBzY2FuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBBSUwuCiAJCSAqLwotCQl0b3V0ICs9IDIwOworCQl0b3V0ID0gNTA7CiAJCWxhc3RfcHVzaGVkX2xzbiA9IDA7CiAJfSBlbHNlIGlmICgoc3R1Y2sgKiAxMDApIC8gY291bnQgPiA5MCkgewogCQkvKgpAQCAtMzk1LDExICszOTYsMTQgQEAKIAkJICogQmFja29mZiBhIGJpdCBtb3JlIHRvIGFsbG93IHNvbWUgSS9PIHRvIGNvbXBsZXRlIGJlZm9yZQogCQkgKiBjb250aW51aW5nIGZyb20gd2hlcmUgd2Ugd2VyZS4KIAkJICovCi0JCXRvdXQgKz0gMTA7CisJCXRvdXQgPSAyMDsKKwl9IGVsc2UgeworCQkvKiBtb3JlIHRvIGRvLCBidXQgd2FpdCBhIHNob3J0IHdoaWxlIGJlZm9yZSBjb250aW51aW5nICovCisJCXRvdXQgPSAxMDsKIAl9CiAJKmxhc3RfbHNuID0gbGFzdF9wdXNoZWRfbHNuOwogCXJldHVybiB0b3V0OwotfQkvKiB4ZnNhaWxkX3B1c2ggKi8KK30KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggNDkxMzA2Mi4uNWZmZDU0NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC03NSwxMyArNzUsMTQgQEAKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcDsKIAogCWlmIChmbGFncyA9PSAwKQotCQlmbGFncyA9IFhGU19CVUZfTE9DSyB8IFhGU19CVUZfTUFQUEVEOworCQlmbGFncyA9IFhCRl9MT0NLIHwgWEJGX01BUFBFRDsKIAogCS8qCiAJICogRGVmYXVsdCB0byBhIG5vcm1hbCBnZXRfYnVmKCkgY2FsbCBpZiB0aGUgdHAgaXMgTlVMTC4KIAkgKi8KIAlpZiAodHAgPT0gTlVMTCkKLQkJcmV0dXJuIHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sIGZsYWdzIHwgQlVGX0JVU1kpOworCQlyZXR1cm4geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwKKwkJCQkgICBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAogCS8qCiAJICogSWYgd2UgZmluZCB0aGUgYnVmZmVyIGluIHRoZSBjYWNoZSB3aXRoIHRoaXMgdHJhbnNhY3Rpb24KQEAgLTExNywxNCArMTE4LDE0IEBACiAJfQogCiAJLyoKLQkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgQlVGX0JVU1kgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBzbwotCSAqIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgorCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBYQkZfRE9OVF9CTE9DSyBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uCisJICogc28gdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCiAJICogd2hpY2ggbWlnaHQgY2F1c2UgYW5vdGhlciB0cmFuc2FjdGlvbiB0byB0YWtlIHBsYWNlIChpZiB0aGUKIAkgKiBidWZmZXIgd2FzIGRlbGF5ZWQgYWxsb2MpLiAgU3VjaCByZWN1cnNpdmUgdHJhbnNhY3Rpb25zIGNhbgogCSAqIGVhc2lseSBkZWFkbG9jayB3aXRoIG91ciBjdXJyZW50IHRyYW5zYWN0aW9uIGFzIHdlbGwgYXMgY2F1c2UKIAkgKiB1cyB0byBydW4gb3V0IG9mIHN0YWNrIHNwYWNlLgogCSAqLwotCWJwID0geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJYnAgPSB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAlpZiAoYnAgPT0gTlVMTCkgewogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yOTAsMTUgKzI5MSwxNSBAQAogCWludAkJCWVycm9yOwogCiAJaWYgKGZsYWdzID09IDApCi0JCWZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQVBQRUQ7CisJCWZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfTUFQUEVEOwogCiAJLyoKIAkgKiBEZWZhdWx0IHRvIGEgbm9ybWFsIGdldF9idWYoKSBjYWxsIGlmIHRoZSB0cCBpcyBOVUxMLgogCSAqLwogCWlmICh0cCA9PSBOVUxMKSB7Ci0JCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBYQkZfRE9OVF9CTE9DSyk7CiAJCWlmICghYnApCi0JCQlyZXR1cm4gKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSA/CisJCQlyZXR1cm4gKGZsYWdzICYgWEJGX1RSWUxPQ0spID8KIAkJCQkJRUFHQUlOIDogWEZTX0VSUk9SKEVOT01FTSk7CiAKIAkJaWYgKFhGU19CVUZfR0VURVJST1IoYnApICE9IDApIHsKQEAgLTM4NSwxNCArMzg2LDE0IEBACiAJfQogCiAJLyoKLQkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgQlVGX0JVU1kgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBzbwotCSAqIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgorCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBYQkZfRE9OVF9CTE9DSyBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uCisJICogc28gdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCiAJICogd2hpY2ggbWlnaHQgY2F1c2UgYW5vdGhlciB0cmFuc2FjdGlvbiB0byB0YWtlIHBsYWNlIChpZiB0aGUKIAkgKiBidWZmZXIgd2FzIGRlbGF5ZWQgYWxsb2MpLiAgU3VjaCByZWN1cnNpdmUgdHJhbnNhY3Rpb25zIGNhbgogCSAqIGVhc2lseSBkZWFkbG9jayB3aXRoIG91ciBjdXJyZW50IHRyYW5zYWN0aW9uIGFzIHdlbGwgYXMgY2F1c2UKIAkgKiB1cyB0byBydW4gb3V0IG9mIHN0YWNrIHNwYWNlLgogCSAqLwotCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAlpZiAoYnAgPT0gTlVMTCkgewogCQkqYnBwID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC00NzIsOCArNDczLDggQEAKIAlpZiAoWEZTX0JVRl9JU1NUQUxFKGJwKSAmJiBYRlNfQlVGX0lTREVMQVlXUklURShicCkpCiAJCWNtbl9lcnIoQ0VfTk9URSwgImFib3V0IHRvIHBvcCBhc3NlcnQsIGJwID09IDB4JXAiLCBicCk7CiAjZW5kaWYKLQlBU1NFUlQoKFhGU19CVUZfQkZMQUdTKGJwKSAmIChYRlNfQl9TVEFMRXxYRlNfQl9ERUxXUkkpKSAhPQotCQkJCQkJKFhGU19CX1NUQUxFfFhGU19CX0RFTFdSSSkpOworCUFTU0VSVCgoWEZTX0JVRl9CRkxBR1MoYnApICYgKFhCRl9TVEFMRXxYQkZfREVMV1JJKSkgIT0KKwkJCQkgICAgIChYQkZfU1RBTEV8WEJGX0RFTFdSSSkpOwogCiAJdHJhY2VfeGZzX3RyYW5zX3JlYWRfYnVmX3NodXQoYnAsIF9SRVRfSVBfKTsKIAl4ZnNfYnVmX3JlbHNlKGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHlwZXMuaCBiL2ZzL3hmcy94ZnNfdHlwZXMuaAppbmRleCBkNzI1NDI4Li5iMDk5MDQ1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3R5cGVzLmgKKysrIGIvZnMveGZzL3hmc190eXBlcy5oCkBAIC0xNTEsOCArMTUxLDggQEAKIH0geGZzX2J0bnVtX3Q7CiAKIHN0cnVjdCB4ZnNfbmFtZSB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQlpbnQJCWxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyCSpuYW1lOworCWludAkJCWxlbjsKIH07CiAKICNlbmRpZgkvKiBfX1hGU19UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCA2ZjI2ODc1Li5kZGQyYzVkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJICAgIGlhdHRyLT5pYV9zaXplID4gaXAtPmlfZC5kaV9zaXplKSB7CiAJCQljb2RlID0geGZzX2ZsdXNoX3BhZ2VzKGlwLAogCQkJCQlpcC0+aV9kLmRpX3NpemUsIGlhdHRyLT5pYV9zaXplLAotCQkJCQlYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQkJCVhCRl9BU1lOQywgRklfTk9ORSk7CiAJCX0KIAogCQkvKiB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlICovCkBAIC01OTcsNyArNTk3LDcgQEAKIHsKIAl4ZnNfdHJhbnNfdAkqdHA7CiAJaW50CQllcnJvciA9IDA7Ci0JaW50CQlsb2dfZmx1c2hlZCA9IDAsIGNoYW5nZWQgPSAxOworCWludAkJbG9nX2ZsdXNoZWQgPSAwOwogCiAJeGZzX2l0cmFjZV9lbnRyeShpcCk7CiAKQEAgLTYyNywxOSArNjI3LDE2IEBACiAJCSAqIGRpc2sgeWV0LCB0aGUgaW5vZGUgd2lsbCBiZSBzdGlsbCBiZSBwaW5uZWQuICBJZiBpdCBpcywKIAkJICogZm9yY2UgdGhlIGxvZy4KIAkJICovCi0KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCiAJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgewotCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgKHhmc19sc25fdCkwLAotCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMsCi0JCQkJICAgICAgJmxvZ19mbHVzaGVkKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCBhbmQgbm90aGluZyBoYXMgY2hhbmdlZAotCQkJICogd2UgZG9uJ3QgbmVlZCB0byBmbHVzaCB0aGUgY2FjaGUuCi0JCQkgKi8KLQkJCWNoYW5nZWQgPSAwOworCQkJaWYgKGlwLT5pX2l0ZW1wLT5pbGlfbGFzdF9sc24pIHsKKwkJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihpcC0+aV9tb3VudCwKKwkJCQkJCWlwLT5pX2l0ZW1wLT5pbGlfbGFzdF9sc24sCisJCQkJCQlYRlNfTE9HX1NZTkMsICZsb2dfZmx1c2hlZCk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsCisJCQkJCQlYRlNfTE9HX1NZTkMsICZsb2dfZmx1c2hlZCk7CisJCQl9CiAJCX0KIAl9IGVsc2UJewogCQkvKgpAQCAtNjc0LDcgKzY3MSw3IEBACiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJfQogCi0JaWYgKChpcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSAmJiBjaGFuZ2VkKSB7CisJaWYgKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpIHsKIAkJLyoKIAkJICogSWYgdGhlIGxvZyB3cml0ZSBkaWRuJ3QgaXNzdWUgYW4gb3JkZXJlZCB0YWcgd2UgbmVlZAogCQkgKiB0byBmbHVzaCB0aGUgZGlzayBjYWNoZSBmb3IgdGhlIGRhdGEgZGV2aWNlIG5vdy4KQEAgLTEwOTYsNyArMTA5Myw3IEBACiAJCSAqLwogCQl0cnVuY2F0ZWQgPSB4ZnNfaWZsYWdzX3Rlc3RfYW5kX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJCWlmICh0cnVuY2F0ZWQgJiYgVk5fRElSVFkoVkZTX0koaXApKSAmJiBpcC0+aV9kZWxheWVkX2Jsa3MgPiAwKQotCQkJeGZzX2ZsdXNoX3BhZ2VzKGlwLCAwLCAtMSwgWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJeGZzX2ZsdXNoX3BhZ2VzKGlwLCAwLCAtMSwgWEJGX0FTWU5DLCBGSV9OT05FKTsKIAl9CiAKIAlpZiAoaXAtPmlfZC5kaV9ubGluayAhPSAwKSB7CkBAIC0yMTk5LDcgKzIxOTYsOCBAQAogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9TWU1MSU5LKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfU1lNTElOSywgZHAsCiAJCQkJCURNX1JJR0hUX05VTEwsIE5VTEwsIERNX1JJR0hUX05VTEwsCi0JCQkJCWxpbmtfbmFtZS0+bmFtZSwgdGFyZ2V0X3BhdGgsIDAsIDAsIDApOworCQkJCQlsaW5rX25hbWUtPm5hbWUsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopdGFyZ2V0X3BhdGgsIDAsIDAsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjM5NSw3ICsyMzkzLDggQEAKIAkJCQkJZHAsIERNX1JJR0hUX05VTEwsCiAJCQkJCWVycm9yID8gTlVMTCA6IGlwLAogCQkJCQlETV9SSUdIVF9OVUxMLCBsaW5rX25hbWUtPm5hbWUsCi0JCQkJCXRhcmdldF9wYXRoLCAwLCBlcnJvciwgMCk7CisJCQkJCSh1bnNpZ25lZCBjaGFyICopdGFyZ2V0X3BhdGgsCisJCQkJCTAsIGVycm9yLCAwKTsKIAl9CiAKIAlpZiAoIWVycm9yKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5oIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCmluZGV4IDE2N2E0NjcuLjc3NGY0MDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAorKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKQEAgLTQzLDExICs0MywxMSBAQAogaW50IHhmc19yZW5hbWUoc3RydWN0IHhmc19pbm9kZSAqc3JjX2RwLCBzdHJ1Y3QgeGZzX25hbWUgKnNyY19uYW1lLAogCQlzdHJ1Y3QgeGZzX2lub2RlICpzcmNfaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRhcmdldF9kcCwKIAkJc3RydWN0IHhmc19uYW1lICp0YXJnZXRfbmFtZSwgc3RydWN0IHhmc19pbm9kZSAqdGFyZ2V0X2lwKTsKLWludCB4ZnNfYXR0cl9nZXQoc3RydWN0IHhmc19pbm9kZSAqaXAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAotCQlpbnQgKnZhbHVlbGVucCwgaW50IGZsYWdzKTsKLWludCB4ZnNfYXR0cl9zZXQoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAotCQlpbnQgdmFsdWVsZW4sIGludCBmbGFncyk7Ci1pbnQgeGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX2dldChzdHJ1Y3QgeGZzX2lub2RlICppcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJdW5zaWduZWQgY2hhciAqdmFsdWUsIGludCAqdmFsdWVsZW5wLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX3NldChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJdW5zaWduZWQgY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKTsKK2ludCB4ZnNfYXR0cl9yZW1vdmUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBmbGFncyk7CiBpbnQgeGZzX2F0dHJfbGlzdChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwKIAkJaW50IGZsYWdzLCBzdHJ1Y3QgYXR0cmxpc3RfY3Vyc29yX2tlcm4gKmN1cnNvcik7CiBzc2l6ZV90IHhmc19yZWFkKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAppbmRleCA0NzNkNTg0Li41YjJlNWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNuYW1lcy5oIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXMuaAppbmRleCBjMTM0M2E5Li45Y2Y3MzZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNuYW1lcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY25hbWVzLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaCBiL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oCmluZGV4IGQ4MTRkYTQuLmQ3NzI2NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGkuaCBiL2luY2x1ZGUvYWNwaS9hY3BpLmgKaW5kZXggNDcyYjdiZi4uYTA5MWNhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGkuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAzY2Q5Y2NkLi43YmY4M2RkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtMjQyLDYgKzI0Miw4IEBACiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX2ZsYWdzIHsKIAl1OCB2YWxpZDoxOwkJLyogQ2FuIHN1Y2Nlc3NmdWxseSBlbmFibGUgd2FrZXVwPyAqLwogCXU4IHJ1bl93YWtlOjE7CQkvKiBSdW4tV2FrZSBHUEUgZGV2aWNlcyAqLworCXU4IGFsd2F5c19lbmFibGVkOjE7CS8qIFJ1bi13YWtlIGRldmljZXMgdGhhdCBhcmUgYWx3YXlzIGVuYWJsZWQgKi8KKwl1OCBub3RpZmllcl9wcmVzZW50OjE7ICAvKiBXYWtlLXVwIG5vdGlmeSBoYW5kbGVyIGhhcyBiZWVuIGluc3RhbGxlZCAqLwogfTsKIAogc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSB7CkBAIC0yNTAsMTIgKzI1MiwxMyBAQAogCiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwIHsKIAlhY3BpX2hhbmRsZSBncGVfZGV2aWNlOwotCWFjcGlfaW50ZWdlciBncGVfbnVtYmVyOwotCWFjcGlfaW50ZWdlciBzbGVlcF9zdGF0ZTsKKwl1NjQgZ3BlX251bWJlcjsKKwl1NjQgc2xlZXBfc3RhdGU7CiAJc3RydWN0IGFjcGlfaGFuZGxlX2xpc3QgcmVzb3VyY2VzOwogCXN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfc3RhdGUgc3RhdGU7CiAJc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9mbGFncyBmbGFnczsKIAlpbnQgcHJlcGFyZV9jb3VudDsKKwlpbnQgcnVuX3dha2VfY291bnQ7CiB9OwogCiAvKiBEZXZpY2UgKi8KQEAgLTM4MCwxMiArMzgzLDE1IEBACiB9OwogCiAvKiBoZWxwZXIgKi8KLWFjcGlfaGFuZGxlIGFjcGlfZ2V0X2NoaWxkKGFjcGlfaGFuZGxlLCBhY3BpX2ludGVnZXIpOworYWNwaV9oYW5kbGUgYWNwaV9nZXRfY2hpbGQoYWNwaV9oYW5kbGUsIHU2NCk7CiBpbnQgYWNwaV9pc19yb290X2JyaWRnZShhY3BpX2hhbmRsZSk7CiBhY3BpX2hhbmRsZSBhY3BpX2dldF9wY2lfcm9vdGJyaWRnZV9oYW5kbGUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RydWN0IGFjcGlfcGNpX3Jvb3QgKmFjcGlfcGNpX2ZpbmRfcm9vdChhY3BpX2hhbmRsZSBoYW5kbGUpOwogI2RlZmluZSBERVZJQ0VfQUNQSV9IQU5ETEUoZGV2KSAoKGFjcGlfaGFuZGxlKSgoZGV2KS0+YXJjaGRhdGEuYWNwaV9oYW5kbGUpKQogCitpbnQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKTsKK2ludCBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CisKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIGludCBhY3BpX3BtX2RldmljZV9zbGVlcF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICosIGludCAqKTsKIGludCBhY3BpX3BtX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBkZXZpY2UgKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKaW5kZXggZjQ5MDZmNi4uM2E0NzY3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAKIHN0cnVjdCBwY2lfYnVzICpwY2lfYWNwaV9zY2FuX3Jvb3Qoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBkb21haW4sCiAJCQkJICAgaW50IGJ1cyk7Cit2b2lkIHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggZWIwZTcxOC4uYjM5Njg1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTgsNyArOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xOTYsNyArMTk2LDcgQEAKIAogdm9pZCBhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpOwogCi12b2lkIGFjcGlfb3Nfc2xlZXAoYWNwaV9pbnRlZ2VyIG1pbGxpc2Vjb25kcyk7Cit2b2lkIGFjcGlfb3Nfc2xlZXAodTY0IG1pbGxpc2Vjb25kcyk7CiAKIHZvaWQgYWNwaV9vc19zdGFsbCh1MzIgbWljcm9zZWNvbmRzKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3dyaXRlX3BjaV9jb25maWd1cmF0aW9uKHN0cnVjdCBhY3BpX3BjaV9pZCAqcGNpX2lkLAotCQkJCXUzMiByZWcsIGFjcGlfaW50ZWdlciB2YWx1ZSwgdTMyIHdpZHRoKTsKKwkJCQl1MzIgcmVnLCB1NjQgdmFsdWUsIHUzMiB3aWR0aCk7CiAKIC8qCiAgKiBJbnRlcmltIGZ1bmN0aW9uIG5lZWRlZCBmb3IgUENJIElSUSByb3V0aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggODZlOTczNS4uNDQ0N2EwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkxMjE0CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDEwMDEyMQogCiAjaW5jbHVkZSAiYWN0eXBlcy5oIgogI2luY2x1ZGUgImFjdGJsLmgiCkBAIC0yODEsMTEgKzI4MSwxMSBAQAogLyoKICAqIEdQRSBJbnRlcmZhY2VzCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZV90eXBlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKK2FjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggYWN0aW9uKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKTsKK2FjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOworYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfY2xlYXJfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNyZXN0eXAuaCBiL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCmluZGV4IDlmZmUwMGYuLmU1NTI2MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzk3LDcgKzM5Nyw3IEBACiBzdHJ1Y3QgYWNwaV9wY2lfcm91dGluZ190YWJsZSB7CiAJdTMyIGxlbmd0aDsKIAl1MzIgcGluOwotCWFjcGlfaW50ZWdlciBhZGRyZXNzOwkvKiBoZXJlIGZvciA2NC1iaXQgYWxpZ25tZW50ICovCisJdTY0IGFkZHJlc3M7CQkvKiBoZXJlIGZvciA2NC1iaXQgYWxpZ25tZW50ICovCiAJdTMyIHNvdXJjZV9pbmRleDsKIAljaGFyIHNvdXJjZVs0XTsJCS8qIHBhZCB0byA2NCBiaXRzIHNvIHNpemVvZigpIHdvcmtzIGluIGFsbCBjYXNlcyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibC5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsLmgKaW5kZXggMWI2NTg3OS4uYWQyMDAxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKaW5kZXggMGI5YjQzMC4uYzYzN2I3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaAppbmRleCA2ZjNkY2U5Li41YjAyZTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCkBAIC0xLDMgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3RibDIuaCAtIEFDUEkgU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAyLjAgVGFibGVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCiAjaWZuZGVmIF9fQUNUQkwyX0hfXwogI2RlZmluZSBfX0FDVEJMMl9IX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggMTUzZjEyZC4uM2YwOGU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzg1LDE5ICszODUsNiBAQAogCXN0cnVjdCB1aW50NjRfc3RydWN0IHBhcnQ7CiB9OwogCi1zdHJ1Y3QgdWludDMyX3N0cnVjdCB7Ci0JdTMyIGxvOwotCXUzMiBoaTsKLX07Ci0KLS8qCi0gKiBBY3BpIGludGVnZXIgd2lkdGguIEluIEFDUEkgdmVyc2lvbiAxLCBpbnRlZ2VycyBhcmUgMzIgYml0cy4gSW4gQUNQSQotICogdmVyc2lvbiAyLCBpbnRlZ2VycyBhcmUgNjQgYml0cy4gTm90ZSB0aGF0IHRoaXMgcGVydGFpbnMgdG8gdGhlIEFDUEkgaW50ZWdlcgotICogdHlwZSBvbmx5LCBub3Qgb3RoZXIgaW50ZWdlcnMgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFDUEkgQ0EKLSAqIHN1YnN5c3RlbS4KLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgYWNwaV9pbnRlZ2VyOwotI2RlZmluZSBBQ1BJX0lOVEVHRVJfTUFYICAgICAgICAgICAgICAgIEFDUElfVUlOVDY0X01BWAogI2RlZmluZSBBQ1BJX0lOVEVHRVJfQklUX1NJWkUgICAgICAgICAgIDY0CiAjZGVmaW5lIEFDUElfTUFYX0RFQ0lNQUxfRElHSVRTICAgICAgICAgMjAJLyogMl42NCA9IDE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE2ICovCiAKQEAgLTQyMSw2ICs0MDgsMTkgQEAKICNkZWZpbmUgQUNQSV9XQUlUX0ZPUkVWRVIgICAgICAgICAgICAgICAweEZGRkYJLyogdTE2LCBhcyBwZXIgQUNQSSBzcGVjICovCiAjZGVmaW5lIEFDUElfRE9fTk9UX1dBSVQgICAgICAgICAgICAgICAgMAogCisvKgorICogT2Jzb2xldGU6IEFjcGkgaW50ZWdlciB3aWR0aC4gSW4gQUNQSSB2ZXJzaW9uIDEgKDE5OTYpLCBpbnRlZ2VycyBhcmUgMzIgYml0cy4KKyAqIEluIEFDUEkgdmVyc2lvbiAyICgyMDAwKSBhbmQgbGF0ZXIsIGludGVnZXJzIGFyZSA2NCBiaXRzLiBOb3RlIHRoYXQgdGhpcworICogcGVydGFpbnMgdG8gdGhlIEFDUEkgaW50ZWdlciB0eXBlIG9ubHksIG5vdCB0byBvdGhlciBpbnRlZ2VycyB1c2VkIGluIHRoZQorICogaW1wbGVtZW50YXRpb24gb2YgdGhlIEFDUElDQSBzdWJzeXN0ZW0uCisgKgorICogMDEvMjAxMDogVGhpcyB0eXBlIGlzIG9ic29sZXRlIGFuZCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGVudGlyZSBBQ1BJQ0EKKyAqIGNvZGUgYmFzZS4gSXQgcmVtYWlucyBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZGV2aWNlIGRyaXZlcnMgdGhhdCB1c2UKKyAqIHRoZSB0eXBlLiBIb3dldmVyLCBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqLwordHlwZWRlZiB1NjQgYWNwaV9pbnRlZ2VyOworI2RlZmluZSBBQ1BJX0lOVEVHRVJfTUFYICAgICAgICAgICAgICAgIEFDUElfVUlOVDY0X01BWAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIENvbW1vbmx5IHVzZWQgbWFjcm9zCkBAIC02NjgsMTUgKzY2OCwxNiBAQAogCiAvKgogICogR1BFIGluZm8gZmxhZ3MgLSBQZXIgR1BFCi0gKiArLSstKy0rLS0tKy0tLSstKwotICogfDd8Nnw1fDQ6M3wyOjF8MHwKLSAqICstKy0rLSstLS0rLS0tKy0rCi0gKiAgfCB8IHwgIHwgICB8ICB8Ci0gKiAgfCB8IHwgIHwgICB8ICArLS0tIEludGVycnVwdCB0eXBlOiBFZGdlIG9yIExldmVsIFRyaWdnZXJlZAotICogIHwgfCB8ICB8ICAgKy0tLSBUeXBlOiBXYWtlLW9ubHksIFJ1bnRpbWUtb25seSwgb3Igd2FrZS9ydW50aW1lCisgKiArLSstKy0rLS0tKy0rLSstKworICogfDd8Nnw1fDQ6M3wyfDF8MHwKKyAqICstKy0rLSstLS0rLSstKy0rCisgKiAgfCB8IHwgIHwgIHwgfCB8CisgKiAgfCB8IHwgIHwgIHwgfCArLS0tIEludGVycnVwdCB0eXBlOiBFZGdlIG9yIExldmVsIFRyaWdnZXJlZAorICogIHwgfCB8ICB8ICB8ICstLS0gR1BFIGNhbiB3YWtlIHRoZSBzeXN0ZW0KKyAqICB8IHwgfCAgfCAgKy0tLSBVbnVzZWQKICAqICB8IHwgfCAgKy0tLSBUeXBlIG9mIGRpc3BhdGNoIC0tIHRvIG1ldGhvZCwgaGFuZGxlciwgb3Igbm9uZQotICogIHwgfCArLS0tIEVuYWJsZWQgZm9yIHJ1bnRpbWU/Ci0gKiAgfCArLS0tIEVuYWJsZWQgZm9yIHdha2U/CisgKiAgfCB8ICstLS0gVW51c2VkCisgKiAgfCArLS0tIFVudXNlZAogICogICstLS0gVW51c2VkCiAgKi8KICNkZWZpbmUgQUNQSV9HUEVfWFJVUFRfVFlQRV9NQVNLICAgICAgICAodTgpIDB4MDEKQEAgLTY4NywyMiArNjg4LDEzIEBACiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4gICAgICAgICAgKHU4KSAweDA2CiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRSAgICAgICAgICAgICAgKHU4KSAweDAyCiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfUlVOVElNRSAgICAgICAgICAgKHU4KSAweDA0CS8qIERlZmF1bHQgKi8KKyNkZWZpbmUgQUNQSV9HUEVfQ0FOX1dBS0UJCSh1OCkgMHgwMgogCiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX01BU0sgICAgICAgICAgKHU4KSAweDE4CiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIgICAgICAgKHU4KSAweDA4CiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCAgICAgICAgKHU4KSAweDEwCiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX05PVF9VU0VEICAgICAgKHU4KSAweDAwCS8qIERlZmF1bHQgKi8KIAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRU5BQkxFX01BU0sgICAgICAgICh1OCkgMHgyMAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRU5BQkxFRCAgICAgICAgICAgICh1OCkgMHgyMAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRElTQUJMRUQgICAgICAgICAgICh1OCkgMHgwMAkvKiBEZWZhdWx0ICovCi0KLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9FTkFCTEVfTUFTSyAgICAgICAodTgpIDB4NDAKLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9FTkFCTEVEICAgICAgICAgICAodTgpIDB4NDAKLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9ESVNBQkxFRCAgICAgICAgICAodTgpIDB4MDAJLyogRGVmYXVsdCAqLwotCi0jZGVmaW5lIEFDUElfR1BFX0VOQUJMRV9NQVNLICAgICAgICAgICAgKHU4KSAweDYwCS8qIEJvdGggcnVuL3dha2UgKi8KLQogLyoKICAqIEZsYWdzIGZvciBHUEUgYW5kIExvY2sgaW50ZXJmYWNlcwogICovCkBAIC04MDEsNyArNzkzLDcgQEAKIAlhY3BpX29iamVjdF90eXBlIHR5cGU7CS8qIFNlZSBkZWZpbml0aW9uIG9mIGFjcGlfbnNfdHlwZSBmb3IgdmFsdWVzICovCiAJc3RydWN0IHsKIAkJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwkvKiBBQ1BJX1RZUEVfSU5URUdFUiAqLwotCQlhY3BpX2ludGVnZXIgdmFsdWU7CS8qIFRoZSBhY3R1YWwgbnVtYmVyICovCisJCXU2NCB2YWx1ZTsJLyogVGhlIGFjdHVhbCBudW1iZXIgKi8KIAl9IGludGVnZXI7CiAKIAlzdHJ1Y3QgewpAQCAtOTQ1LDcgKzkzNyw3IEBACiBhY3BpX3N0YXR1cygqYWNwaV9hZHJfc3BhY2VfaGFuZGxlcikgKHUzMiBmdW5jdGlvbiwKIAkJCQkgICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgICAgICB1MzIgYml0X3dpZHRoLAotCQkJCSAgICAgIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJCSAgICAgIHU2NCAqdmFsdWUsCiAJCQkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LAogCQkJCSAgICAgIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIApAQCAtMTAwNSw3ICs5OTcsNyBAQAogCXU4IGhpZ2hlc3RfZHN0YXRlc1s0XTsJLyogX3N4X2QgdmFsdWVzOiAweEZGIGluZGljYXRlcyBub3QgdmFsaWQgKi8KIAl1OCBsb3dlc3RfZHN0YXRlc1s1XTsJLyogX3N4X3cgdmFsdWVzOiAweEZGIGluZGljYXRlcyBub3QgdmFsaWQgKi8KIAl1MzIgY3VycmVudF9zdGF0dXM7CS8qIF9TVEEgdmFsdWUgKi8KLQlhY3BpX2ludGVnZXIgYWRkcmVzczsJLyogX0FEUiB2YWx1ZSAqLworCXU2NCBhZGRyZXNzOwkvKiBfQURSIHZhbHVlICovCiAJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgaGFyZHdhcmVfaWQ7CS8qIF9ISUQgdmFsdWUgKi8KIAlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCB1bmlxdWVfaWQ7CS8qIF9VSUQgdmFsdWUgKi8KIAlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0IGNvbXBhdGlibGVfaWRfbGlzdDsJLyogX0NJRCBsaXN0IDxtdXN0IGJlIGxhc3Q+ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCmluZGV4IGU2MmYxMGQuLmMwNWFlYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzExLDggKzMxMSw4IEBACiAjZGVmaW5lIEFDUElfTUVNQ01QKHMxLHMyLG4pICAgIGFjcGlfdXRfbWVtY21wKChjb25zdCBjaGFyICopKHMxKSwgKGNvbnN0IGNoYXIgKikoczIpLCAoYWNwaV9zaXplKShuKSkKICNkZWZpbmUgQUNQSV9NRU1DUFkoZCxzLG4pICAgICAgKHZvaWQpIGFjcGlfdXRfbWVtY3B5ICgoZCksIChzKSwgKGFjcGlfc2l6ZSkobikpCiAjZGVmaW5lIEFDUElfTUVNU0VUKGQsdixuKSAgICAgICh2b2lkKSBhY3BpX3V0X21lbXNldCAoKGQpLCAodiksIChhY3BpX3NpemUpKG4pKQotI2RlZmluZSBBQ1BJX1RPVVBQRVIgICAgICAgICAgICBhY3BpX3V0X3RvX3VwcGVyCi0jZGVmaW5lIEFDUElfVE9MT1dFUiAgICAgICAgICAgIGFjcGlfdXRfdG9fbG93ZXIKKyNkZWZpbmUgQUNQSV9UT1VQUEVSKGMpICAgICAgICAgYWNwaV91dF90b191cHBlciAoKGludCkgKGMpKQorI2RlZmluZSBBQ1BJX1RPTE9XRVIoYykgICAgICAgICBhY3BpX3V0X3RvX2xvd2VyICgoaW50KSAoYykpCiAKICNlbmRpZgkJCQkvKiBBQ1BJX1VTRV9TWVNURU1fQ0xJQlJBUlkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaAppbmRleCA2YWFkYmY4Li4wY2Q1M2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IDA5NDY5OTcuLmU1MDM5YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCAwZWE1ZWY0Li4xMTcyYzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC05MiwxMSArOTIsMTEgQEAKIC8qIFBlcmZvcm1hbmNlIE1hbmFnZW1lbnQgKi8KIAogc3RydWN0IGFjcGlfcHNkX3BhY2thZ2UgewotCWFjcGlfaW50ZWdlciBudW1fZW50cmllczsKLQlhY3BpX2ludGVnZXIgcmV2aXNpb247Ci0JYWNwaV9pbnRlZ2VyIGRvbWFpbjsKLQlhY3BpX2ludGVnZXIgY29vcmRfdHlwZTsKLQlhY3BpX2ludGVnZXIgbnVtX3Byb2Nlc3NvcnM7CisJdTY0IG51bV9lbnRyaWVzOworCXU2NCByZXZpc2lvbjsKKwl1NjQgZG9tYWluOworCXU2NCBjb29yZF90eXBlOworCXU2NCBudW1fcHJvY2Vzc29yczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWNwaV9wY3RfcmVnaXN0ZXIgewpAQCAtMTEwLDEyICsxMTAsMTIgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcHggewotCWFjcGlfaW50ZWdlciBjb3JlX2ZyZXF1ZW5jeTsJLyogbWVnYWhlcnR6ICovCi0JYWNwaV9pbnRlZ2VyIHBvd2VyOwkvKiBtaWxsaVdhdHRzICovCi0JYWNwaV9pbnRlZ2VyIHRyYW5zaXRpb25fbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCi0JYWNwaV9pbnRlZ2VyIGJ1c19tYXN0ZXJfbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCi0JYWNwaV9pbnRlZ2VyIGNvbnRyb2w7CS8qIGNvbnRyb2wgdmFsdWUgKi8KLQlhY3BpX2ludGVnZXIgc3RhdHVzOwkvKiBzdWNjZXNzIGluZGljYXRvciAqLworCXU2NCBjb3JlX2ZyZXF1ZW5jeTsJLyogbWVnYWhlcnR6ICovCisJdTY0IHBvd2VyOwkvKiBtaWxsaVdhdHRzICovCisJdTY0IHRyYW5zaXRpb25fbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCisJdTY0IGJ1c19tYXN0ZXJfbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCisJdTY0IGNvbnRyb2w7CS8qIGNvbnRyb2wgdmFsdWUgKi8KKwl1NjQgc3RhdHVzOwkvKiBzdWNjZXNzIGluZGljYXRvciAqLwogfTsKIAogc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlIHsKQEAgLTEzMywxMSArMTMzLDExIEBACiAvKiBUaHJvdHRsaW5nIENvbnRyb2wgKi8KIAogc3RydWN0IGFjcGlfdHNkX3BhY2thZ2UgewotCWFjcGlfaW50ZWdlciBudW1fZW50cmllczsKLQlhY3BpX2ludGVnZXIgcmV2aXNpb247Ci0JYWNwaV9pbnRlZ2VyIGRvbWFpbjsKLQlhY3BpX2ludGVnZXIgY29vcmRfdHlwZTsKLQlhY3BpX2ludGVnZXIgbnVtX3Byb2Nlc3NvcnM7CisJdTY0IG51bV9lbnRyaWVzOworCXU2NCByZXZpc2lvbjsKKwl1NjQgZG9tYWluOworCXU2NCBjb29yZF90eXBlOworCXU2NCBudW1fcHJvY2Vzc29yczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWNwaV9wdGNfcmVnaXN0ZXIgewpAQCAtMTUxLDExICsxNTEsMTEgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdHhfdHNzIHsKLQlhY3BpX2ludGVnZXIgZnJlcXBlcmNlbnRhZ2U7CS8qICovCi0JYWNwaV9pbnRlZ2VyIHBvd2VyOwkvKiBtaWxsaVdhdHRzICovCi0JYWNwaV9pbnRlZ2VyIHRyYW5zaXRpb25fbGF0ZW5jeTsJLyogbWljcm9zZWNvbmRzICovCi0JYWNwaV9pbnRlZ2VyIGNvbnRyb2w7CS8qIGNvbnRyb2wgdmFsdWUgKi8KLQlhY3BpX2ludGVnZXIgc3RhdHVzOwkvKiBzdWNjZXNzIGluZGljYXRvciAqLworCXU2NCBmcmVxcGVyY2VudGFnZTsJLyogKi8KKwl1NjQgcG93ZXI7CS8qIG1pbGxpV2F0dHMgKi8KKwl1NjQgdHJhbnNpdGlvbl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KKwl1NjQgY29udHJvbDsJLyogY29udHJvbCB2YWx1ZSAqLworCXU2NCBzdGF0dXM7CS8qIHN1Y2Nlc3MgaW5kaWNhdG9yICovCiB9Owogc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4IHsKIAl1MTYgcG93ZXI7CkBAIC0yMzgsNyArMjM4LDcgQEAKIAogZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZShzdHJ1Y3QKIAkJCQkJCSAgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UKLQkJCQkJCSAgKnBlcmZvcm1hbmNlKTsKKwkJCQkJCSAgX19wZXJjcHUgKnBlcmZvcm1hbmNlKTsKIAogZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UKIAkJCQkJICAgICAgICpwZXJmb3JtYW5jZSwgdW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKaW5kZXggZmMyMTg0NC4uYzhhNWQ2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaApAQCAtNTIsMjMgKzUyLDQgQEAKICNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKQlsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpICsgKGkpKQogI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCWxvY2FsX3NldCgobCksIGxvY2FsX3JlYWQobCkgLSAoaSkpCiAKLS8qIFVzZSB0aGVzZSBmb3IgcGVyLWNwdSBsb2NhbF90IHZhcmlhYmxlczogb24gc29tZSBhcmNocyB0aGV5IGFyZQotICogbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZXNlIG5haXZlIGltcGxlbWVudGF0aW9ucy4gIE5vdGUgdGhleSB0YWtlCi0gKiBhIHZhcmlhYmxlIChlZy4gbXlzdHJ1Y3QuZm9vKSwgbm90IGFuIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWMobCkJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKQotCi0vKiBOb24tYXRvbWljIGluY3JlbWVudHMsIGllLiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkCi0gKiBpbiBpbnRlcnJ1cHQsIGV0Yy4gIFNvbWUgYXJjaHMgY2FuIG9wdGltaXplIHRoaXMgY2FzZSB3ZWxsLgotICovCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2luYyhsKQlfX2xvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCV9fbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJX19sb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCV9fbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0KICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKaW5kZXggODA4N2I5MC4uMDRmOTFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCkBAIC00MSw3ICs0MSwxMSBAQAogICogT25seSBTMzkwIHByb3ZpZGVzIGl0cyBvd24gbWVhbnMgb2YgbW92aW5nIHRoZSBwb2ludGVyLgogICovCiAjaWZuZGVmIFNISUZUX1BFUkNQVV9QVFIKLSNkZWZpbmUgU0hJRlRfUEVSQ1BVX1BUUihfX3AsIF9fb2Zmc2V0KQlSRUxPQ19ISURFKChfX3ApLCAoX19vZmZzZXQpKQorLyogV2VpcmQgY2FzdCBrZWVwcyBib3RoIEdDQyBhbmQgc3BhcnNlIGhhcHB5LiAqLworI2RlZmluZSBTSElGVF9QRVJDUFVfUFRSKF9fcCwgX19vZmZzZXQpCSh7CQkJCVwKKwlfX3ZlcmlmeV9wY3B1X3B0cigoX19wKSk7CQkJCQlcCisJUkVMT0NfSElERSgodHlwZW9mKCooX19wKSkgX19rZXJuZWwgX19mb3JjZSAqKShfX3ApLCAoX19vZmZzZXQpKTsgXAorfSkKICNlbmRpZgogCiAvKgpAQCAtNTAsMTEgKzU0LDExIEBACiAgKiBvZmZzZXQuCiAgKi8KICNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgXAotCSgqU0hJRlRfUEVSQ1BVX1BUUigmcGVyX2NwdV92YXIodmFyKSwgcGVyX2NwdV9vZmZzZXQoY3B1KSkpCisJKCpTSElGVF9QRVJDUFVfUFRSKCYodmFyKSwgcGVyX2NwdV9vZmZzZXQoY3B1KSkpCiAjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBcCi0JKCpTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3Zhcih2YXIpLCBteV9jcHVfb2Zmc2V0KSkKKwkoKlNISUZUX1BFUkNQVV9QVFIoJih2YXIpLCBteV9jcHVfb2Zmc2V0KSkKICNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKSBcCi0JKCpTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3Zhcih2YXIpLCBfX215X2NwdV9vZmZzZXQpKQorCSgqU0hJRlRfUEVSQ1BVX1BUUigmKHZhciksIF9fbXlfY3B1X29mZnNldCkpCiAKICNkZWZpbmUgdGhpc19jcHVfcHRyKHB0cikgU0hJRlRfUEVSQ1BVX1BUUihwdHIsIG15X2NwdV9vZmZzZXQpCiAjZGVmaW5lIF9fdGhpc19jcHVfcHRyKHB0cikgU0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fbXlfY3B1X29mZnNldCkKQEAgLTY2LDkgKzcwLDkgQEAKIAogI2Vsc2UgLyogISBTTVAgKi8KIAotI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KQkJCSgqKCh2b2lkKShjcHUpLCAmcGVyX2NwdV92YXIodmFyKSkpCi0jZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKQkJCXBlcl9jcHVfdmFyKHZhcikKLSNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKQkJCXBlcl9jcHVfdmFyKHZhcikKKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkJCQkoKigodm9pZCkoY3B1KSwgJih2YXIpKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpCQkJKHZhcikKKyNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKQkJCSh2YXIpCiAjZGVmaW5lIHRoaXNfY3B1X3B0cihwdHIpIHBlcl9jcHVfcHRyKHB0ciwgMCkKICNkZWZpbmUgX190aGlzX2NwdV9wdHIocHRyKSB0aGlzX2NwdV9wdHIocHRyKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9tZDUuaCBiL2luY2x1ZGUvY3J5cHRvL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9tZDUuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9DUllQVE9fTUQ1X0gKKyNkZWZpbmUgX0NSWVBUT19NRDVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNRDVfRElHRVNUX1NJWkUJCTE2CisjZGVmaW5lIE1ENV9ITUFDX0JMT0NLX1NJWkUJNjQKKyNkZWZpbmUgTUQ1X0JMT0NLX1dPUkRTCQkxNgorI2RlZmluZSBNRDVfSEFTSF9XT1JEUwkJNAorCitzdHJ1Y3QgbWQ1X3N0YXRlIHsKKwl1MzIgaGFzaFtNRDVfSEFTSF9XT1JEU107CisJdTMyIGJsb2NrW01ENV9CTE9DS19XT1JEU107CisJdTY0IGJ5dGVfY291bnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL3BjcnlwdC5oIGIvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkOGJkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL3BjcnlwdC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBwY3J5cHQgLSBQYXJhbGxlbCBjcnlwdG8gZW5naW5lLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX0NSWVBUT19QQ1JZUFRfSAorI2RlZmluZSBfQ1JZUFRPX1BDUllQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWRhdGEuaD4KKworc3RydWN0IHBjcnlwdF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYJcGFkYXRhOworCXZvaWQJCQkqZGF0YTsKKwl2b2lkCQkJKl9fY3R4W10gQ1JZUFRPX01JTkFMSUdOX0FUVFI7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBjcnlwdF9yZXF1ZXN0X2N0eChzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gcmVxLT5fX2N0eDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHBhZGF0YV9wcml2ICpwY3J5cHRfcmVxdWVzdF9wYWRhdGEoc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuICZyZXEtPnBhZGF0YTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwY3J5cHRfcGFkYXRhX3JlcXVlc3Qoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYWRhdGEsIHN0cnVjdCBwY3J5cHRfcmVxdWVzdCwgcGFkYXRhKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggZmZhYzE1Ny4uNGEzYzRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtODAxLDYgKzgwMSw3IEBACiAJICovCiAJaW50ICgqZ2VtX2luaXRfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCXZvaWQgKCpnZW1fZnJlZV9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisJdm9pZCAoKmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAogCS8qIHZnYSBhcmIgaXJxIGhhbmRsZXIgKi8KIAl2b2lkICgqdmdhYXJiX2lycSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzdGF0ZSk7CkBAIC0xNDI3LDYgKzE0MjgsNyBAQAogaW50IGRybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgZHJtX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKK3ZvaWQgZHJtX2dlbV9vYmplY3RfZnJlZV91bmxvY2tlZChzdHJ1Y3Qga3JlZiAqa3JlZik7CiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9nZW1fb2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICBzaXplX3Qgc2l6ZSk7CiB2b2lkIGRybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKQEAgLTE0NDMsMTAgKzE0NDUsMTUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKG9iaiAhPSBOVUxMKQorCQlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cit9CiAKLQlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7CitzdGF0aWMgaW5saW5lIHZvaWQKK2RybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogIT0gTlVMTCkKKwkJa3JlZl9wdXQoJm9iai0+cmVmY291bnQsIGRybV9nZW1fb2JqZWN0X2ZyZWVfdW5sb2NrZWQpOwogfQogCiBpbnQgZHJtX2dlbV9oYW5kbGVfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LApAQCAtMTQ3NSw2ICsxNDgyLDIxIEBACiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSogTXVzdCBidW1wIGhhbmRsZSBjb3VudCBmaXJzdCBhcyB0aGlzIG1heSBiZSB0aGUgbGFzdAorCSogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSogY2hlY2tlZCBmb3IgYSBuYW1lCisJKi8KKwlrcmVmX3B1dCgmb2JqLT5oYW5kbGVjb3VudCwgZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7Cit9CisKIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAogCQkJCQkgICAgIHUzMiBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2J1ZmZlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmRiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fYnVmZmVyLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDEwIFBhdWxpIE5pZW1pbmVuLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBNdWx0aXBhcnQgYnVmZmVyIGZvciBjb3BpbmcgZGF0YSB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgcGFnZSBzaXplLgorICoKKyAqIEF1dGhvcnM6CisgKiBQYXVsaSBOaWVtaW5lbiA8c3Vva2tvcy1hdC1nbWFpbC1kb3QtY29tPgorICovCisKKyNpZm5kZWYgX0RSTV9CVUZGRVJfSF8KKyNkZWZpbmUgX0RSTV9CVUZGRVJfSF8KKworI2luY2x1ZGUgImRybVAuaCIKKworc3RydWN0IGRybV9idWZmZXIgeworCWludCBpdGVyYXRvcjsKKwlpbnQgc2l6ZTsKKwljaGFyICpkYXRhW107Cit9OworCisKKy8qKgorICogUmV0dXJuIHRoZSBpbmRleCBvZiBwYWdlIHRoYXQgYnVmZmVyIGlzIGN1cnJlbnRseSBwb2ludGluZyBhdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHJtX2J1ZmZlcl9wYWdlKHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGJ1Zi0+aXRlcmF0b3IgLyBQQUdFX1NJWkU7Cit9CisvKioKKyAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYnl0ZSBpbiB0aGUgcGFnZQorICovCitzdGF0aWMgaW5saW5lIGludCBkcm1fYnVmZmVyX2luZGV4KHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGJ1Zi0+aXRlcmF0b3IgJiAoUEFHRV9TSVpFIC0gMSk7Cit9CisvKioKKyAqIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpcyBsZWZ0IHRvIHByb2Nlc3MKKyAqLworc3RhdGljIGlubGluZSBpbnQgZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBidWYtPnNpemUgLSBidWYtPml0ZXJhdG9yOworfQorCisvKioKKyAqIEFkdmFuY2UgdGhlIGJ1ZmZlciBpdGVyYXRvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpcyBnaXZlbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRybV9idWZmZXJfYWR2YW5jZShzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmLCBpbnQgYnl0ZXMpCit7CisJYnVmLT5pdGVyYXRvciArPSBieXRlczsKK30KKworLyoqCisgKiBBbGxvY2F0ZSB0aGUgZHJtIGJ1ZmZlciBvYmplY3QuCisgKgorICogICBidWY6IEEgcG9pbnRlciB0byBhIHBvaW50ZXIgd2hlcmUgdGhlIG9iamVjdCBpcyBzdG9yZWQuCisgKiAgIHNpemU6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuCisgKi8KK2V4dGVybiBpbnQgZHJtX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZHJtX2J1ZmZlciAqKmJ1ZiwgaW50IHNpemUpOworCisvKioKKyAqIENvcHkgdGhlIHVzZXIgZGF0YSB0byB0aGUgYmVnaW4gb2YgdGhlIGJ1ZmZlciBhbmQgcmVzZXQgdGhlIHByb2Nlc3NpbmcKKyAqIGl0ZXJhdG9yLgorICoKKyAqICAgdXNlcl9kYXRhOiBBIHBvaW50ZXIgdGhlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdGhlIGJ1ZmZlci4KKyAqICAgc2l6ZTogVGhlIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICovCitleHRlcm4gaW50IGRybV9idWZmZXJfY29weV9mcm9tX3VzZXIoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJdm9pZCBfX3VzZXIgKnVzZXJfZGF0YSwgaW50IHNpemUpOworCisvKioKKyAqIEZyZWUgdGhlIGRybSBidWZmZXIgb2JqZWN0CisgKi8KK2V4dGVybiB2b2lkIGRybV9idWZmZXJfZnJlZShzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmKTsKKworLyoqCisgKiBSZWFkIGFuIG9iamVjdCBmcm9tIGJ1ZmZlciB0aGF0IG1heSBiZSBzcGxpdCB0byBtdWx0aXBsZSBwYXJ0cy4gSWYgb2JqZWN0CisgKiBpcyBub3Qgc3BsaXQgZnVuY3Rpb24ganVzdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIG9iamVjdCBpbiBidWZmZXIuIEJ1dCBpbgorICogY2FzZSBvZiBzcGxpdCBvYmplY3QgZGF0YSBpcyBjb3BpZWQgdG8gZ2l2ZW4gc3RhY2sgb2JqZWN0IHRoYXQgaXMgc3VwbGllZAorICogYnkgY2FsbGVyLgorICoKKyAqIFRoZSBwcm9jZXNzaW5nIGxvY2F0aW9uIG9mIHRoZSBidWZmZXIgaXMgYWxzbyBhZHZhbmNlZCB0byB0aGUgbmV4dCBieXRlCisgKiBhZnRlciB0aGUgb2JqZWN0LgorICoKKyAqICAgb2Jqc2l6ZTogVGhlIHNpemUgb2YgdGhlIG9iamV0IGluIGJ5dGVzLgorICogICBzdGFja19vYmo6IEEgcG9pbnRlciB0byBhIG1lbW9yeSBsb2NhdGlvbiB3aGVyZSBvYmplY3QgY2FuIGJlIGNvcGllZC4KKyAqLworZXh0ZXJuIHZvaWQgKmRybV9idWZmZXJfcmVhZF9vYmplY3Qoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJaW50IG9ianNpemUsIHZvaWQgKnN0YWNrX29iaik7CisKKy8qKgorICogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgZHdvcmQgd2hpY2ggaXMgb2Zmc2V0IG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoZQorICogY3VycmVudCBwcm9jZXNzaW5nIGxvY2F0aW9uLgorICoKKyAqIENhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IGR3b3JkIGlzIG5vdCBzcGxpdCBpbiB0aGUgYnVmZmVyLiBUaGlzCisgKiByZXF1aXJlbWVudCBpcyBlYXNpbHkgbWV0IGlmIGFsbCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBpbiBidWZmZXIgYXJlCisgKiBtdWx0aXBsZXMgb2YgZHdvcmQgYW5kIFBBR0VfU0laRSBpcyBtdWx0aXBsZSBkd29yZC4KKyAqCisgKiBDYWxsIHRvIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGFuZ2UgdGhlIHByb2Nlc3NpbmcgbG9jYXRpb24uCisgKgorICogICBvZmZzZXQ6IFRoZSBpbmRleCBvZiB0aGUgZHdvcmQgcmVsYXRpdmUgdG8gdGhlIGludGVybmF0IGl0ZXJhdG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmZmVyLAorCQlpbnQgb2Zmc2V0KQoreworCWludCBpdGVyID0gYnVmZmVyLT5pdGVyYXRvciArIG9mZnNldCAqIDQ7CisJcmV0dXJuICZidWZmZXItPmRhdGFbaXRlciAvIFBBR0VfU0laRV1baXRlciAmIChQQUdFX1NJWkUgLSAxKV07Cit9CisvKioKKyAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGR3b3JkIHdoaWNoIGlzIG9mZnNldCBudW1iZXIgb2YgZWxlbWVudHMgZnJvbQorICogdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBsb2NhdGlvbi4KKyAqCisgKiBDYWxsIHRvIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGFuZ2UgdGhlIHByb2Nlc3NpbmcgbG9jYXRpb24uCisgKgorICogICBvZmZzZXQ6IFRoZSBpbmRleCBvZiB0aGUgYnl0ZSByZWxhdGl2ZSB0byB0aGUgaW50ZXJuYXQgaXRlcmF0b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2J5dGUoc3RydWN0IGRybV9idWZmZXIgKmJ1ZmZlciwKKwkJaW50IG9mZnNldCkKK3sKKwlpbnQgaXRlciA9IGJ1ZmZlci0+aXRlcmF0b3IgKyBvZmZzZXQ7CisJcmV0dXJuICZidWZmZXItPmRhdGFbaXRlciAvIFBBR0VfU0laRV1baXRlciAmIChQQUdFX1NJWkUgLSAxKV07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggZmRmNDNhYi4uMTM0NzUyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC04MDEsNCArODAxLDYgQEAKIAkJCQlib29sIGludGVybGFjZWQsIGludCBtYXJnaW5zKTsKIGV4dGVybiBpbnQgZHJtX2FkZF9tb2Rlc19ub2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSk7CisKK2V4dGVybiBib29sIGRybV9lZGlkX2lzX3ZhbGlkKHN0cnVjdCBlZGlkICplZGlkKTsKICNlbmRpZiAvKiBfX0RSTV9DUlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaCBiL2luY2x1ZGUvZHJtL2RybV9lZGlkLmgKaW5kZXggZDMzYzNlMC4uYjQyMDk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZWRpZC5oCkBAIC0yMDEsNCArMjAxLDcgQEAKIAogI2RlZmluZSBFRElEX1BST0RVQ1RfSUQoZSkgKChlKS0+cHJvZF9jb2RlWzBdIHwgKChlKS0+cHJvZF9jb2RlWzFdIDw8IDgpKQogCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBFeHRlbnNpb24gRURJRCBibG9jayAqLworI2RlZmluZSBEUk1fTUFYX0VESURfRVhUX05VTSA0CisKICNlbmRpZiAvKiBfX0RSTV9FRElEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGU2ZjNiMTIuLjY3NjEwNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTE0MSw2ICsxNDEsNDEgQEAKIAl7MHgxMDAyLCAweDVlNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODhBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODk5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODljLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODlkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODllLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhhMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGJlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhjMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhlMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhlOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhmOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNTIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzEwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNTIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjUyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC01NTgsNCArNTkzLDUgQEAKIAl7MHg4MDg2LCAweDM1ZTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDAwNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDAwNDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKKwl7MHg4MDg2LCAweDAxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MCwgMCwgMH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmggYi9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCmluZGV4IGY3NDU5NDhiLi5hNmE5ZjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKQEAgLTI1LDEzICsyNSwxNCBAQAogI2lmbmRlZiBfX05PVVZFQVVfRFJNX0hfXwogI2RlZmluZSBfX05PVVZFQVVfRFJNX0hfXwogCi0jZGVmaW5lIE5PVVZFQVVfRFJNX0hFQURFUl9QQVRDSExFVkVMIDE1CisjZGVmaW5lIE5PVVZFQVVfRFJNX0hFQURFUl9QQVRDSExFVkVMIDE2CiAKIHN0cnVjdCBkcm1fbm91dmVhdV9jaGFubmVsX2FsbG9jIHsKIAl1aW50MzJfdCAgICAgZmJfY3R4ZG1hX2hhbmRsZTsKIAl1aW50MzJfdCAgICAgdHRfY3R4ZG1hX2hhbmRsZTsKIAogCWludCAgICAgICAgICBjaGFubmVsOworCXVpbnQzMl90ICAgICBwdXNoYnVmX2RvbWFpbnM7CiAKIAkvKiBOb3RpZmllciBtZW1vcnkgKi8KIAl1aW50MzJfdCAgICAgbm90aWZpZXJfaGFuZGxlOwpAQCAtMTA5LDY4ICsxMTAsNTggQEAKIAl1aW50MzJfdCBhbGlnbjsKIH07CiAKKyNkZWZpbmUgTk9VVkVBVV9HRU1fTUFYX0JVRkZFUlMgMTAyNAorc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvX3ByZXN1bWVkIHsKKwl1aW50MzJfdCB2YWxpZDsKKwl1aW50MzJfdCBkb21haW47CisJdWludDY0X3Qgb2Zmc2V0OworfTsKKwogc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvIHsKIAl1aW50NjRfdCB1c2VyX3ByaXY7CiAJdWludDMyX3QgaGFuZGxlOwogCXVpbnQzMl90IHJlYWRfZG9tYWluczsKIAl1aW50MzJfdCB3cml0ZV9kb21haW5zOwogCXVpbnQzMl90IHZhbGlkX2RvbWFpbnM7Ci0JdWludDMyX3QgcHJlc3VtZWRfb2s7Ci0JdWludDMyX3QgcHJlc3VtZWRfZG9tYWluOwotCXVpbnQ2NF90IHByZXN1bWVkX29mZnNldDsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm9fcHJlc3VtZWQgcHJlc3VtZWQ7CiB9OwogCiAjZGVmaW5lIE5PVVZFQVVfR0VNX1JFTE9DX0xPVyAgKDEgPDwgMCkKICNkZWZpbmUgTk9VVkVBVV9HRU1fUkVMT0NfSElHSCAoMSA8PCAxKQogI2RlZmluZSBOT1VWRUFVX0dFTV9SRUxPQ19PUiAgICgxIDw8IDIpCisjZGVmaW5lIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MgMTAyNAogc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jIHsKKwl1aW50MzJfdCByZWxvY19ib19pbmRleDsKKwl1aW50MzJfdCByZWxvY19ib19vZmZzZXQ7CiAJdWludDMyX3QgYm9faW5kZXg7Ci0JdWludDMyX3QgcmVsb2NfaW5kZXg7CiAJdWludDMyX3QgZmxhZ3M7CiAJdWludDMyX3QgZGF0YTsKIAl1aW50MzJfdCB2b3I7CiAJdWludDMyX3QgdG9yOwogfTsKIAotI2RlZmluZSBOT1VWRUFVX0dFTV9NQVhfQlVGRkVSUyAxMDI0Ci0jZGVmaW5lIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MgMTAyNAorI2RlZmluZSBOT1VWRUFVX0dFTV9NQVhfUFVTSCA1MTIKK3N0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9wdXNoIHsKKwl1aW50MzJfdCBib19pbmRleDsKKwl1aW50MzJfdCBwYWQ7CisJdWludDY0X3Qgb2Zmc2V0OworCXVpbnQ2NF90IGxlbmd0aDsKK307CiAKIHN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1ZiB7CiAJdWludDMyX3QgY2hhbm5lbDsKLQl1aW50MzJfdCBucl9kd29yZHM7CiAJdWludDMyX3QgbnJfYnVmZmVyczsKLQl1aW50MzJfdCBucl9yZWxvY3M7Ci0JdWludDY0X3QgZHdvcmRzOwogCXVpbnQ2NF90IGJ1ZmZlcnM7Ci0JdWludDY0X3QgcmVsb2NzOwotfTsKLQotc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2NhbGwgewotCXVpbnQzMl90IGNoYW5uZWw7Ci0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBucl9idWZmZXJzOwogCXVpbnQzMl90IG5yX3JlbG9jczsKLQl1aW50MzJfdCBucl9kd29yZHM7Ci0JdWludDY0X3QgYnVmZmVyczsKKwl1aW50MzJfdCBucl9wdXNoOwogCXVpbnQ2NF90IHJlbG9jczsKKwl1aW50NjRfdCBwdXNoOwogCXVpbnQzMl90IHN1ZmZpeDA7CiAJdWludDMyX3Qgc3VmZml4MTsKLQkvKiBiZWxvdyBvbmx5IGFjY2Vzc2VkIGZvciBDQUxMMiAqLwogCXVpbnQ2NF90IHZyYW1fYXZhaWxhYmxlOwogCXVpbnQ2NF90IGdhcnRfYXZhaWxhYmxlOwogfTsKIAotc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9waW4gewotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBkb21haW47Ci0JdWludDY0X3Qgb2Zmc2V0OwotfTsKLQotc3RydWN0IGRybV9ub3V2ZWF1X2dlbV91bnBpbiB7Ci0JdWludDMyX3QgaGFuZGxlOwotfTsKLQogI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNApAQCAtMTgzLDE0ICsxNzQsNiBAQAogCXVpbnQzMl90IGhhbmRsZTsKIH07CiAKLXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fdGlsZSB7Ci0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOwotCXVpbnQzMl90IHRpbGVfbW9kZTsKLQl1aW50MzJfdCB0aWxlX2ZsYWdzOwotfTsKLQogZW51bSBub3V2ZWF1X2J1c190eXBlIHsKIAlOVl9BR1AgICAgID0gMCwKIAlOVl9QQ0kgICAgID0gMSwKQEAgLTIwMCwyMiArMTgzLDE3IEBACiBzdHJ1Y3QgZHJtX25vdXZlYXVfc2FyZWEgewogfTsKIAotI2RlZmluZSBEUk1fTk9VVkVBVV9DQVJEX0lOSVQgICAgICAgICAgMHgwMAotI2RlZmluZSBEUk1fTk9VVkVBVV9HRVRQQVJBTSAgICAgICAgICAgMHgwMQotI2RlZmluZSBEUk1fTk9VVkVBVV9TRVRQQVJBTSAgICAgICAgICAgMHgwMgotI2RlZmluZSBEUk1fTk9VVkVBVV9DSEFOTkVMX0FMTE9DICAgICAgMHgwMwotI2RlZmluZSBEUk1fTk9VVkVBVV9DSEFOTkVMX0ZSRUUgICAgICAgMHgwNAotI2RlZmluZSBEUk1fTk9VVkVBVV9HUk9CSl9BTExPQyAgICAgICAgMHgwNQotI2RlZmluZSBEUk1fTk9VVkVBVV9OT1RJRklFUk9CSl9BTExPQyAgMHgwNgotI2RlZmluZSBEUk1fTk9VVkVBVV9HUFVPQkpfRlJFRSAgICAgICAgMHgwNworI2RlZmluZSBEUk1fTk9VVkVBVV9HRVRQQVJBTSAgICAgICAgICAgMHgwMAorI2RlZmluZSBEUk1fTk9VVkVBVV9TRVRQQVJBTSAgICAgICAgICAgMHgwMQorI2RlZmluZSBEUk1fTk9VVkVBVV9DSEFOTkVMX0FMTE9DICAgICAgMHgwMgorI2RlZmluZSBEUk1fTk9VVkVBVV9DSEFOTkVMX0ZSRUUgICAgICAgMHgwMworI2RlZmluZSBEUk1fTk9VVkVBVV9HUk9CSl9BTExPQyAgICAgICAgMHgwNAorI2RlZmluZSBEUk1fTk9VVkVBVV9OT1RJRklFUk9CSl9BTExPQyAgMHgwNQorI2RlZmluZSBEUk1fTk9VVkVBVV9HUFVPQkpfRlJFRSAgICAgICAgMHgwNgogI2RlZmluZSBEUk1fTk9VVkVBVV9HRU1fTkVXICAgICAgICAgICAgMHg0MAogI2RlZmluZSBEUk1fTk9VVkVBVV9HRU1fUFVTSEJVRiAgICAgICAgMHg0MQotI2RlZmluZSBEUk1fTk9VVkVBVV9HRU1fUFVTSEJVRl9DQUxMICAgMHg0MgotI2RlZmluZSBEUk1fTk9VVkVBVV9HRU1fUElOICAgICAgICAgICAgMHg0MyAvKiAhS01TIG9ubHkgKi8KLSNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX1VOUElOICAgICAgICAgIDB4NDQgLyogIUtNUyBvbmx5ICovCi0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfUFJFUCAgICAgICAweDQ1Ci0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfRklOSSAgICAgICAweDQ2Ci0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9JTkZPICAgICAgICAgICAweDQ3Ci0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGX0NBTEwyICAweDQ4CisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfUFJFUCAgICAgICAweDQyCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9DUFVfRklOSSAgICAgICAweDQzCisjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9JTkZPICAgICAgICAgICAweDQ0CiAKICNlbmRpZiAvKiBfX05PVVZFQVVfRFJNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDM5NTM3ZjMuLjgxZTYxNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTgwOCw2ICs4MDgsNyBAQAogI2RlZmluZSBSQURFT05fVElMSU5HX1NXQVBfMzJCSVQgIDB4OAogI2RlZmluZSBSQURFT05fVElMSU5HX1NVUkZBQ0UgICAgIDB4MTAgLyogdGhpcyBvYmplY3QgcmVxdWlyZXMgYSBzdXJmYWNlCiAJCQkJCSogd2hlbiBtYXBwZWQgLSBpLmUuIGZyb250IGJ1ZmZlciAqLworI2RlZmluZSBSQURFT05fVElMSU5HX01JQ1JPX1NRVUFSRSAweDIwCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfdGlsaW5nIHsKIAl1aW50MzJfdAloYW5kbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAppbmRleCA0YzRlMGY4Li5lM2YxYjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKQEAgLTkwOCw3ICs5MDgsNyBAQAogICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHBncHJvdF90IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCiAgKiBzZXR0aW5nIHVwIGEgUFRFIHdpdGggdGhlIGNhY2hpbmcgbW9kZWwgaW5kaWNhdGVkIGJ5IEBjX3N0YXRlLgogICovCi1leHRlcm4gcGdwcm90X3QgdHRtX2lvX3Byb3QoZW51bSB0dG1fY2FjaGluZ19zdGF0ZSBjX3N0YXRlLCBwZ3Byb3RfdCB0bXApOworZXh0ZXJuIHBncHJvdF90IHR0bV9pb19wcm90KHVpbnQzMl90IGNhY2hpbmdfZmxhZ3MsIHBncHJvdF90IHRtcCk7CiAKICNpZiAoZGVmaW5lZChDT05GSUdfQUdQKSB8fCAoZGVmaW5lZChDT05GSUdfQUdQX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKSkKICNkZWZpbmUgVFRNX0hBU19BR1AKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggNzU2ZjgzMS4uZTJlYTBiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTQzLDYgKzQzLDcgQEAKIGhlYWRlci15ICs9IGJwcWV0aGVyLmgKIGhlYWRlci15ICs9IGJzZy5oCiBoZWFkZXIteSArPSBjYW4uaAoraGVhZGVyLXkgKz0gY2Npc3NfZGVmcy5oCiBoZWFkZXIteSArPSBjZGsuaAogaGVhZGVyLXkgKz0gY2hpby5oCiBoZWFkZXIteSArPSBjb2RhX3BzZGV2LmgKQEAgLTEyNSw2ICsxMjYsNyBAQAogaGVhZGVyLXkgKz0gbmZzNF9tb3VudC5oCiBoZWFkZXIteSArPSBuZnNfbW91bnQuaAogaGVhZGVyLXkgKz0gbmw4MDIxMS5oCitoZWFkZXIteSArPSBvbWFwZmIuaAogaGVhZGVyLXkgKz0gcGFyYW0uaAogaGVhZGVyLXkgKz0gcGNpX3JlZ3MuaAogaGVhZGVyLXkgKz0gcGVyZl9ldmVudC5oCkBAIC0zNjIsNiArMzY0LDcgQEAKIHVuaWZkZWYteSArPSB1bmlzdGQuaAogdW5pZmRlZi15ICs9IHVzYmRldmljZV9mcy5oCiB1bmlmZGVmLXkgKz0gdXRzbmFtZS5oCit1bmlmZGVmLXkgKz0gdmhvc3QuaAogdW5pZmRlZi15ICs9IHZpZGVvZGV2Mi5oCiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYuaAogdW5pZmRlZi15ICs9IHZpcnRpb19jb25maWcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggMjBmMzE1NjcuLmI0Yzg1ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtODQxLDcgKzg0MSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGF0YV9pZF9pc19jZmEoY29uc3QgdTE2ICppZCkKIHsKLQlpZiAoaWRbQVRBX0lEX0NPTkZJR10gPT0gMHg4NDhBKQkvKiBUcmFkaXRpb25hbCBDRiAqLworCWlmICgoaWRbQVRBX0lEX0NPTkZJR10gPT0gMHg4NDhBKSB8fAkvKiBUcmFkaXRpb25hbCBDRiAqLworCSAgICAoaWRbQVRBX0lEX0NPTkZJR10gPT0gMHg4NDRBKSkJLyogRGVsa2luIERldmljZXMgQ0YgKi8KIAkJcmV0dXJuIDE7CiAJLyoKIAkgKiBDRiBzcGVjcyBkb24ndCByZXF1aXJlIHNwZWNpZmljIHZhbHVlIGluIHRoZSB3b3JkIDAgYW55bW9yZSBhbmQgeWV0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBjMDVhMjljLi4yNWI4YjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTI1LDcgKzI1LDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfYml0bWFza19vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IG9yZGVyOwotCQorCiAJb3JkZXIgPSBmbHMoY291bnQpOwogCXJldHVybiBvcmRlcjsJLyogV2UgY291bGQgYmUgc2xpZ2h0bHkgbW9yZSBjbGV2ZXIgd2l0aCAtMSBoZXJlLi4uICovCiB9CkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2NvdW50X29yZGVyKHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpbnQgb3JkZXI7Ci0JCisKIAlvcmRlciA9IGZscyhjb3VudCkgLSAxOwogCWlmIChjb3VudCAmIChjb3VudCAtIDEpKQogCQlvcmRlcisrOwpAQCAtNDUsNiArNDUsMzEgQEAKIAlyZXR1cm4gc2l6ZW9mKHcpID09IDQgPyBod2VpZ2h0MzIodykgOiBod2VpZ2h0NjQodyk7CiB9CiAKKy8qCisgKiBDbGVhcmx5IHNsb3cgdmVyc2lvbnMgb2YgdGhlIGh3ZWlnaHROKCkgZnVuY3Rpb25zLCB0aGVpciBiZW5lZml0IGlzCisgKiBvZiBjb3Vyc2UgY29tcGlsZSB0aW1lIGV2YWx1YXRpb24gb2YgY29uc3RhbnQgYXJndW1lbnRzLgorICovCisjZGVmaW5lIEhXRUlHSFQ4KHcpCQkJCQlcCisgICAgICAoCUJVSUxEX0JVR19PTl9aRVJPKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh3KSkgKwlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDApKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMSkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCAyKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDMpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNCkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA1KSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDYpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNykpKQkpCisKKyNkZWZpbmUgSFdFSUdIVDE2KHcpIChIV0VJR0hUOCh3KSAgKyBIV0VJR0hUOCgodykgPj4gOCkpCisjZGVmaW5lIEhXRUlHSFQzMih3KSAoSFdFSUdIVDE2KHcpICsgSFdFSUdIVDE2KCh3KSA+PiAxNikpCisjZGVmaW5lIEhXRUlHSFQ2NCh3KSAoSFdFSUdIVDMyKHcpICsgSFdFSUdIVDMyKCh3KSA+PiAzMikpCisKKy8qCisgKiBUeXBlIGludmFyaWFudCB2ZXJzaW9uIHRoYXQgc2ltcGx5IGNhc3RzIHRoaW5ncyB0byB0aGUKKyAqIGxhcmdlc3QgdHlwZS4KKyAqLworI2RlZmluZSBIV0VJR0hUKHcpICAgSFdFSUdIVDY0KCh1NjQpKHcpKQorCiAvKioKICAqIHJvbDMyIC0gcm90YXRlIGEgMzItYml0IHZhbHVlIGxlZnQKICAqIEB3b3JkOiB2YWx1ZSB0byByb3RhdGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDE4OTZlODYuLmViZDIyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMzE2LDggKzMxNiw3IEBACiAJdW5zaWduZWQgaW50CQlkaXNjYXJkX2FsaWdubWVudDsKIAogCXVuc2lnbmVkIHNob3J0CQlsb2dpY2FsX2Jsb2NrX3NpemU7Ci0JdW5zaWduZWQgc2hvcnQJCW1heF9od19zZWdtZW50czsKLQl1bnNpZ25lZCBzaG9ydAkJbWF4X3BoeXNfc2VnbWVudHM7CisJdW5zaWduZWQgc2hvcnQJCW1heF9zZWdtZW50czsKIAogCXVuc2lnbmVkIGNoYXIJCW1pc2FsaWduZWQ7CiAJdW5zaWduZWQgY2hhcgkJZGlzY2FyZF9taXNhbGlnbmVkOwpAQCAtNDYyLDYgKzQ2MSw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNgkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTcJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCkBAIC01ODcsNiArNTg3LDggQEAKICNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdG9wcGVkKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9ub21lcmdlcyhxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX05PTUVSR0VTLCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX25veG1lcmdlcyhxKQlcCisJdGVzdF9iaXQoUVVFVUVfRkxBR19OT1hNRVJHRVMsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9ucm90KHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9OUk9ULCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2lvX3N0YXQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19JT19TVEFULCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpCSgocSktPm9yZHNlcSkKQEAgLTkxOCwxMCArOTIwLDI3IEBACiBleHRlcm4gdm9pZCBibGtfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgbWFrZV9yZXF1ZXN0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1NjQpOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIHNob3J0KTsKKworLyogVGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgd3JhcHBlciAqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heCkKK3sKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4KTsKK30KKworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIHNob3J0IG1heCkKK3sKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIG1heCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBzaG9ydCBtYXgpCit7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtYXgpOworfQorCisKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpOwpAQCAtMTAxNCwxMSArMTAzMywxNSBAQAogI2RlZmluZSBNQVhfUEhZU19TRUdNRU5UUyAxMjgKICNkZWZpbmUgTUFYX0hXX1NFR01FTlRTIDEyOAogI2RlZmluZSBTQUZFX01BWF9TRUNUT1JTIDI1NQotI2RlZmluZSBCTEtfREVGX01BWF9TRUNUT1JTIDEwMjQKLQogI2RlZmluZSBNQVhfU0VHTUVOVF9TSVpFCTY1NTM2CiAKLSNkZWZpbmUgQkxLX1NFR19CT1VOREFSWV9NQVNLCTB4RkZGRkZGRkZVTAorZW51bSBibGtfZGVmYXVsdF9saW1pdHMgeworCUJMS19NQVhfU0VHTUVOVFMJPSAxMjgsCisJQkxLX1NBRkVfTUFYX1NFQ1RPUlMJPSAyNTUsCisJQkxLX0RFRl9NQVhfU0VDVE9SUwk9IDEwMjQsCisJQkxLX01BWF9TRUdNRU5UX1NJWkUJPSA2NTUzNiwKKwlCTEtfU0VHX0JPVU5EQVJZX01BU0sJPSAweEZGRkZGRkZGVUwsCit9OwogCiAjZGVmaW5lIGJsa2Rldl9lbnRyeV90b19yZXF1ZXN0KGVudHJ5KSBsaXN0X2VudHJ5KChlbnRyeSksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCiAKQEAgLTEwNDIsMTQgKzEwNjUsOSBAQAogCXJldHVybiBxLT5saW1pdHMubWF4X2h3X3NlY3RvcnM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBxdWV1ZV9tYXhfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JcmV0dXJuIHEtPmxpbWl0cy5tYXhfaHdfc2VnbWVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0JcmV0dXJuIHEtPmxpbWl0cy5tYXhfcGh5c19zZWdtZW50czsKKwlyZXR1cm4gcS0+bGltaXRzLm1heF9zZWdtZW50czsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKQEAgLTExMTAsMTggKzExMjgsMTMgQEAKIAlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBzZWN0b3JfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgc2VjdG9yX3Qgc2VjdG9yKQogewogCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IG1heChsaW0tPnBoeXNpY2FsX2Jsb2NrX3NpemUsIGxpbS0+aW9fbWluKTsKKwl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gKHNlY3RvciA8PCA5KSAmIChncmFudWxhcml0eSAtIDEpOwogCi0Jb2Zmc2V0ICY9IGdyYW51bGFyaXR5IC0gMTsKLQlyZXR1cm4gKGdyYW51bGFyaXR5ICsgbGltLT5hbGlnbm1lbnRfb2Zmc2V0IC0gb2Zmc2V0KSAmIChncmFudWxhcml0eSAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9zZWN0b3JfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkJCXNlY3Rvcl90IHNlY3RvcikKLXsKLQlyZXR1cm4gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmcS0+bGltaXRzLCBzZWN0b3IgPDwgOSk7CisJcmV0dXJuIChncmFudWxhcml0eSArIGxpbS0+YWxpZ25tZW50X29mZnNldCAtIGFsaWdubWVudCkKKwkJJiAoZ3JhbnVsYXJpdHkgLSAxKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCkBAIC0xMTQ1LDEwICsxMTU4LDggQEAKIAlyZXR1cm4gcS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9zZWN0b3JfZGlzY2FyZF9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJCQkgc2VjdG9yX3Qgc2VjdG9yKQorc3RhdGljIGlubGluZSBpbnQgcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBzZWN0b3JfdCBzZWN0b3IpCiB7Ci0Jc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gJnEtPmxpbWl0czsKIAl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gKHNlY3RvciA8PCA5KSAmIChsaW0tPmRpc2NhcmRfZ3JhbnVsYXJpdHkgLSAxKTsKIAogCXJldHVybiAobGltLT5kaXNjYXJkX2dyYW51bGFyaXR5ICsgbGltLT5kaXNjYXJkX2FsaWdubWVudCAtIGFsaWdubWVudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDNiNzNiOTkuLjQxNmJmNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTUwLDggKzE1MCw4IEBACiBzdHJ1Y3QgYmxrX3RyYWNlIHsKIAlpbnQgdHJhY2Vfc3RhdGU7CiAJc3RydWN0IHJjaGFuICpyY2hhbjsKLQl1bnNpZ25lZCBsb25nICpzZXF1ZW5jZTsKLQl1bnNpZ25lZCBjaGFyICptc2dfZGF0YTsKKwl1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICpzZXF1ZW5jZTsKKwl1bnNpZ25lZCBjaGFyIF9fcGVyY3B1ICptc2dfZGF0YTsKIAl1MTYgYWN0X21hc2s7CiAJdTY0IHN0YXJ0X2xiYTsKIAl1NjQgZW5kX2xiYTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggYjEwZWM0OS4uMjY2YWI5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTIzLDYgKzIzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX21heF9wZm47CiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogLyoKICAqIG5vZGVfYm9vdG1lbV9tYXAgaXMgYSBtYXAgcG9pbnRlciAtIHRoZSBiaXRzIHJlcHJlc2VudCBhbGwgcGh5c2ljYWwgCiAgKiBtZW1vcnkgcGFnZXMgKGluY2x1ZGluZyBob2xlcykgb24gdGhlIG5vZGUuCkBAIC0zNyw2ICszOCw3IEBACiB9IGJvb3RtZW1fZGF0YV90OwogCiBleHRlcm4gYm9vdG1lbV9kYXRhX3QgYm9vdG1lbV9ub2RlX2RhdGFbXTsKKyNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBib290bWVtX2Jvb3RtYXBfcGFnZXModW5zaWduZWQgbG9uZyk7CiAKQEAgLTQ2LDYgKzQ4LDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmRwZm4pOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9ib290bWVtKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtZW1lbmQpOwogCit1bnNpZ25lZCBsb25nIGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KGludCBub2RlaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnJlZV9hbGxfYm9vdG1lbSh2b2lkKTsKIApAQCAtODQsNiArODcsMTAgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICB1bnNpZ25lZCBsb25nIGdvYWwpOwordm9pZCAqX19hbGxvY19ib290bWVtX25vZGVfaGlnaChwZ19kYXRhX3QgKnBnZGF0LAorCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ29hbCk7CiBleHRlcm4gdm9pZCAqX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ19kYXRhX3QgKnBnZGF0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhbGlnbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnJjbXBoeS5oIGIvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKaW5kZXggMmIzMWI5MS4uN2Y0MzdjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKQEAgLTEsMyArMSwxNCBAQAorI2RlZmluZSBQSFlfSURfQkNNNTA2MTAJCQkweDAxNDNiZDYwCisjZGVmaW5lIFBIWV9JRF9CQ001MDYxME0JCTB4MDE0M2JkNzAKKyNkZWZpbmUgUEhZX0lEX0JDTUFDMTMxCQkJMHgwMTQzYmM3MAorI2RlZmluZSBQSFlfSURfQkNNNTc3ODAJCQkweDAzNjI1ZDkwCisKKyNkZWZpbmUgUEhZX0JDTV9PVUlfTUFTSwkJMHhmZmZmZmMwMAorI2RlZmluZSBQSFlfQkNNX09VSV8xCQkJMHgwMDIwNjAwMAorI2RlZmluZSBQSFlfQkNNX09VSV8yCQkJMHgwMTQzYmMwMAorI2RlZmluZSBQSFlfQkNNX09VSV8zCQkJMHgwMzYyNWMwMAorCisKICNkZWZpbmUgUEhZX0JDTV9GTEFHU19NT0RFX0NPUFBFUgkweDAwMDAwMDAxCiAjZGVmaW5lIFBIWV9CQ01fRkxBR1NfTU9ERV8xMDAwQlgJMHgwMDAwMDAwMgogI2RlZmluZSBQSFlfQkNNX0ZMQUdTX0lOVEZfU0dNSUkJMHgwMDAwMDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAppbmRleCAzZGI3NzY3Li42ZTVhN2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaApAQCAtMzgsNiArMzgsNyBAQAogCiAJZW51bSBjYW5fc3RhdGUgc3RhdGU7CiAJdTMyIGN0cmxtb2RlOworCXUzMiBjdHJsbW9kZV9zdXBwb3J0ZWQ7CiAKIAlpbnQgcmVzdGFydF9tczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByZXN0YXJ0X3RpbWVyOwpAQCAtNDYsNiArNDcsOCBAQAogCWludCAoKmRvX3NldF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIGNhbl9tb2RlIG1vZGUpOwogCWludCAoKmRvX2dldF9zdGF0ZSkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBlbnVtIGNhbl9zdGF0ZSAqc3RhdGUpOworCWludCAoKmRvX2dldF9iZXJyX2NvdW50ZXIpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYyk7CiAKIAl1bnNpZ25lZCBpbnQgZWNob19za2JfbWF4OwogCXN0cnVjdCBza19idWZmICoqZWNob19za2I7CkBAIC02MCw2ICs2MywyMSBAQAogICovCiAjZGVmaW5lIGdldF9jYW5fZGxjKGkpCShtaW5fdChfX3U4LCAoaSksIDgpKQogCisvKiBEcm9wIGEgZ2l2ZW4gc29ja2V0YnVmZmVyIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBDQU4gZnJhbWUuICovCitzdGF0aWMgaW5saW5lIGludCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiAhPSBzaXplb2YoKmNmKSB8fCBjZi0+Y2FuX2RsYyA+IDgpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19jYW5kZXYoaW50IHNpemVvZl9wcml2LCB1bnNpZ25lZCBpbnQgZWNob19za2JfbWF4KTsKIHZvaWQgZnJlZV9jYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaAppbmRleCA5ZWNiYjc4Li4zMjUwZGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCkBAIC03MCw2ICs3MCwxNCBAQAogfTsKIAogLyoKKyAqIENBTiBidXMgZXJyb3IgY291bnRlcnMKKyAqLworc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgeworCV9fdTE2IHR4ZXJyOworCV9fdTE2IHJ4ZXJyOworfTsKKworLyoKICAqIENBTiBjb250cm9sbGVyIG1vZGUKICAqLwogc3RydWN0IGNhbl9jdHJsbW9kZSB7CkBAIC03Nyw5ICs4NSwxMSBAQAogCV9fdTMyIGZsYWdzOwogfTsKIAotI2RlZmluZSBDQU5fQ1RSTE1PREVfTE9PUEJBQ0sJMHgxCS8qIExvb3BiYWNrIG1vZGUgKi8KLSNkZWZpbmUgQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkJMHgyIAkvKiBMaXN0ZW4tb25seSBtb2RlICovCi0jZGVmaW5lIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMJMHg0CS8qIFRyaXBsZSBzYW1wbGluZyBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MT09QQkFDSwkJMHgwMQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZCQkweDAyIAkvKiBMaXN0ZW4tb25seSBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMJCTB4MDQJLyogVHJpcGxlIHNhbXBsaW5nIG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UCQkweDA4CS8qIE9uZS1TaG90IG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HCTB4MTAJLyogQnVzLWVycm9yIHJlcG9ydGluZyAqLwogCiAvKgogICogQ0FOIGRldmljZSBzdGF0aXN0aWNzCkBAIC0xMDUsNiArMTE1LDcgQEAKIAlJRkxBX0NBTl9DVFJMTU9ERSwKIAlJRkxBX0NBTl9SRVNUQVJUX01TLAogCUlGTEFfQ0FOX1JFU1RBUlQsCisJSUZMQV9DQU5fQkVSUl9DT1VOVEVSLAogCV9fSUZMQV9DQU5fTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmgKaW5kZXggNDY4OGM3Yi4uYWYxN2NiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vdGlfaGVjYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL3BsYXRmb3JtL3RpX2hlY2MuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgX19DQU5fUExBVEZPUk1fVElfSEVDQ19IX18KKyNkZWZpbmUgX19DQU5fUExBVEZPUk1fVElfSEVDQ19IX18KKwogLyoKICAqIFRJIEhFQ0MgKEhpZ2ggRW5kIENBTiBDb250cm9sbGVyKSBkcml2ZXIgcGxhdGZvcm0gaGVhZGVyCiAgKgpAQCAtMjMsNiArMjYsNyBAQAogICogQG1ieF9vZmZzZXQ6CQlNYWlsYm94IFJBTSBvZmZzZXQKICAqIEBpbnRfbGluZToJCUludGVycnVwdCBsaW5lIHRvIHVzZSAtIDAgb3IgMQogICogQHZlcnNpb246CQl2ZXJzaW9uIGZvciBmdXR1cmUgdXNlCisgKiBAdHJhbnNjZWl2ZXJfc3dpdGNoOglwbGF0Zm9ybSBzcGVjaWZpYyBjYWxsYmFjayBmbiBmb3IgdHJhbnNjZWl2ZXIgY29udHJvbAogICoKICAqIFBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIHRvIGdldCBhbGwgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MuCiAgKiB0aGlzIHN0cnVjdHVyZSBhbHNvIGFjY291bnRzIHRoZSBmYWN0IHRoYXQgdGhlIElQIG1heSBoYXZlIGRpZmZlcmVudApAQCAtMzUsNiArMzksNiBAQAogCXUzMiBtYnhfb2Zmc2V0OwogCXUzMiBpbnRfbGluZTsKIAl1MzIgdmVyc2lvbjsKKwl2b2lkICgqdHJhbnNjZWl2ZXJfc3dpdGNoKSAoaW50KTsKIH07Ci0KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvY2Npc3NfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNmI2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBDQ0lTU19ERUZTX0gKKyNkZWZpbmUgQ0NJU1NfREVGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyIC8qIG5vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSB2YXJ5CisJCQkJICAgICAgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucyAqLworCisvKiBDb21tYW5kIFN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCisjZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgorI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKKyNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQorI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3CisjZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKKyNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCisjZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQworCisvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgWEZFUl9OT05FICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBYRkVSX1dSSVRFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFhGRVJfUkVBRCAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgWEZFUl9SU1ZEICAgICAgICAgICAgICAgMHgwMworCisvKiB0YXNrIGF0dHJpYnV0ZSAqLworI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQorI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKKworLyogY2RiIHR5cGUgKi8KKyNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAorI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCisKKy8qIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cyAqLworI2RlZmluZSBCWVRFIF9fdTgKKyNkZWZpbmUgV09SRCBfX3UxNgorI2RlZmluZSBIV09SRCBfX3UxNgorI2RlZmluZSBEV09SRCBfX3UzMgorCisjZGVmaW5lIENJU1NfTUFYX0xVTgkxMDI0CisKKyNkZWZpbmUgTEVWRUwyTFVOICAgMSAvKiBpbmRleCBpbnRvIFRhcmdldCh4KSBzdHJ1Y3R1cmUsIGR1ZSB0byBieXRlIHN3YXBwaW5nICovCisjZGVmaW5lIExFVkVMM0xVTiAgIDAKKworI3ByYWdtYSBwYWNrKDEpCisKKy8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgdW5pb24gX1NDU0kzQWRkcl9zdHJ1Y3QgeworICAgc3RydWN0IHsKKyAgICBCWVRFIERldjsKKyAgICBCWVRFIEJ1czo2OworICAgIEJZVEUgTW9kZToyOyAgICAgICAgLyogYjAwICovCisgIH0gUGVyaXBEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2TFNCOworICAgIEJZVEUgRGV2TVNCOjY7CisgICAgQllURSBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KKyAgfSBMb2dEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2OjU7CisgICAgQllURSBCdXM6MzsKKyAgICBCWVRFIFRhcmc6NjsKKyAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLworICB9IExvZ1VuaXQ7Cit9IFNDU0kzQWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9QaHlzRGV2QWRkcl9zdHJ1Y3QgeworICBEV09SRCAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKyAgRFdPUkQgICAgICAgICAgICAgQnVzOjY7CisgIERXT1JEICAgICAgICAgICAgIE1vZGU6MjsKKyAgU0NTSTNBZGRyX3N0cnVjdCAgVGFyZ2V0WzJdOyAvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLworfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9Mb2dEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgVm9sSWQ6MzA7CisgIERXT1JEICAgICAgICAgICAgTW9kZToyOworICBCWVRFICAgICAgICAgICAgIHJlc2VydmVkWzRdOworfSBMb2dEZXZBZGRyX3N0cnVjdDsKKwordHlwZWRlZiB1bmlvbiBfTFVOQWRkcl9zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworICBTQ1NJM0FkZHJfc3RydWN0ICAgU0NTSTNMdW5bNF07CisgIFBoeXNEZXZBZGRyX3N0cnVjdCBQaHlzRGV2OworICBMb2dEZXZBZGRyX3N0cnVjdCAgTG9nRGV2OworfSBMVU5BZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgeworICBCWVRFICAgQ0RCTGVuOworICBzdHJ1Y3QgeworICAgIEJZVEUgVHlwZTozOworICAgIEJZVEUgQXR0cmlidXRlOjM7CisgICAgQllURSBEaXJlY3Rpb246MjsKKyAgfSBUeXBlOworICBIV09SRCAgVGltZW91dDsKKyAgQllURSAgIENEQlsxNl07Cit9IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CisKK3R5cGVkZWYgdW5pb24gX01vcmVFcnJJbmZvX3N0cnVjdHsKKyAgc3RydWN0IHsKKyAgICBCWVRFICBSZXNlcnZlZFszXTsKKyAgICBCWVRFICBUeXBlOworICAgIERXT1JEIEVycm9ySW5mbzsKKyAgfSBDb21tb25fSW5mbzsKKyAgc3RydWN0eworICAgIEJZVEUgIFJlc2VydmVkWzJdOworICAgIEJZVEUgIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KKyAgICBCWVRFICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLworICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7CisgIH0gSW52YWxpZF9DbWQ7Cit9IE1vcmVFcnJJbmZvX3N0cnVjdDsKK3R5cGVkZWYgc3RydWN0IF9FcnJvckluZm9fc3RydWN0IHsKKyAgQllURSAgICAgICAgICAgICAgIFNjc2lTdGF0dXM7CisgIEJZVEUgICAgICAgICAgICAgICBTZW5zZUxlbjsKKyAgSFdPUkQgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7CisgIERXT1JEICAgICAgICAgICAgICBSZXNpZHVhbENudDsKKyAgTW9yZUVyckluZm9fc3RydWN0IE1vcmVFcnJJbmZvOworICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKK30gRXJyb3JJbmZvX3N0cnVjdDsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIENDSVNTX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oCmluZGV4IGViMTMwYjQuLjk4NjQ5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Npc3NfZGVmcy5oPgogCiAjZGVmaW5lIENDSVNTX0lPQ19NQUdJQyAnQicKIApAQCAtMzYsMTMzICszNyw2IEBACiAKICNkZWZpbmUgTUFYX0tNQUxMT0NfU0laRSAxMjgwMDAKIAotI2lmbmRlZiBDQ0lTU19DTURfSAotLy8gVGhpcyBkZWZpbmVzIGFyZSBkdXBsaWNhdGVkIGluIGNjaXNzX2NtZC5oIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IAotCi0vL2dlbmVyYWwgYm91bmRhcnkgZGVmaW5pdGlvbnMKLSNkZWZpbmUgU0VOU0VJTkZPQllURVMgICAgICAgICAgMzIvL25vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSB2YXJ5IGJldHdlZW4gaG9zdCBpbXBsZW1lbnRhdGlvbnMKLQotLy9Db21tYW5kIFN0YXR1cyB2YWx1ZQotI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCi0jZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgotI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKLSNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQotI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKLSNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3Ci0jZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKLSNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCi0jZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgotI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQwotCi0vL3RyYW5zZmVyIGRpcmVjdGlvbgotI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCi0KLS8vdGFzayBhdHRyaWJ1dGUKLSNkZWZpbmUgQVRUUl9VTlRBR0dFRCAgICAgICAgICAgMHgwMAotI2RlZmluZSBBVFRSX1NJTVBMRSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUVFJfSEVBRE9GUVVFVUUgICAgICAgIDB4MDUKLSNkZWZpbmUgQVRUUl9PUkRFUkVEICAgICAgICAgICAgMHgwNgotI2RlZmluZSBBVFRSX0FDQSAgICAgICAgICAgICAgICAweDA3Ci0KLS8vY2RiIHR5cGUKLSNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAotI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCi0KLS8vIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cwotI2RlZmluZSBCWVRFIF9fdTgKLSNkZWZpbmUgV09SRCBfX3UxNgotI2RlZmluZSBIV09SRCBfX3UxNgotI2RlZmluZSBEV09SRCBfX3UzMgotCi0jZGVmaW5lIENJU1NfTUFYX0xVTgkxMDI0Ci0KLSNkZWZpbmUgTEVWRUwyTFVOICAgMSAgIC8vIGluZGV4IGludG8gVGFyZ2V0KHgpIHN0cnVjdHVyZSwgZHVlIHRvIGJ5dGUgc3dhcHBpbmcKLSNkZWZpbmUgTEVWRUwzTFVOICAgMAotCi0jcHJhZ21hIHBhY2soMSkKLQotLy9Db21tYW5kIExpc3QgU3RydWN0dXJlCi10eXBlZGVmIHVuaW9uIF9TQ1NJM0FkZHJfc3RydWN0IHsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXY7Ci0gICAgQllURSBCdXM6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMAotICB9IFBlcmlwRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldkxTQjsKLSAgICBCWVRFIERldk1TQjo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjAxCi0gIH0gTG9nRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldjo1OwotICAgIEJZVEUgQnVzOjM7Ci0gICAgQllURSBUYXJnOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMTAKLSAgfSBMb2dVbml0OwotfSBTQ1NJM0FkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUGh5c0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0gIERXT1JEICAgICAgICAgICAgIEJ1czo2OwotICBEV09SRCAgICAgICAgICAgICBNb2RlOjI7Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgIFRhcmdldFsyXTsgLy8yIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkcgotfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7Ci0gIAotdHlwZWRlZiBzdHJ1Y3QgX0xvZ0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICBWb2xJZDozMDsKLSAgRFdPUkQgICAgICAgICAgICBNb2RlOjI7Ci0gIEJZVEUgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Ci19IExvZ0RldkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHVuaW9uIF9MVU5BZGRyX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgICBTQ1NJM0x1bls0XTsKLSAgUGh5c0RldkFkZHJfc3RydWN0IFBoeXNEZXY7Ci0gIExvZ0RldkFkZHJfc3RydWN0ICBMb2dEZXY7Ci19IExVTkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUmVxdWVzdEJsb2NrX3N0cnVjdCB7Ci0gIEJZVEUgICBDREJMZW47Ci0gIHN0cnVjdCB7Ci0gICAgQllURSBUeXBlOjM7Ci0gICAgQllURSBBdHRyaWJ1dGU6MzsKLSAgICBCWVRFIERpcmVjdGlvbjoyOwotICB9IFR5cGU7Ci0gIEhXT1JEICBUaW1lb3V0OwotICBCWVRFICAgQ0RCWzE2XTsKLX0gUmVxdWVzdEJsb2NrX3N0cnVjdDsKLQotdHlwZWRlZiB1bmlvbiBfTW9yZUVyckluZm9fc3RydWN0ewotICBzdHJ1Y3QgewotICAgIEJZVEUgIFJlc2VydmVkWzNdOwotICAgIEJZVEUgIFR5cGU7Ci0gICAgRFdPUkQgRXJyb3JJbmZvOwotICB9Q29tbW9uX0luZm87Ci0gIHN0cnVjdHsKLSAgICBCWVRFICBSZXNlcnZlZFsyXTsKLSAgICBCWVRFICBvZmZlbnNlX3NpemU7Ly9zaXplIG9mIG9mZmVuZGluZyBlbnRyeQotICAgIEJZVEUgIG9mZmVuc2VfbnVtOyAvL2J5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZQotICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7Ci0gIH1JbnZhbGlkX0NtZDsKLX1Nb3JlRXJySW5mb19zdHJ1Y3Q7Ci10eXBlZGVmIHN0cnVjdCBfRXJyb3JJbmZvX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0gIEhXT1JEICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOwotICBEV09SRCAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7Ci0gIE1vcmVFcnJJbmZvX3N0cnVjdCBNb3JlRXJySW5mbzsKLSAgQllURSAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107Ci19IEVycm9ySW5mb19zdHJ1Y3Q7Ci0KLSNwcmFnbWEgcGFjaygpCi0jZW5kaWYgLyogQ0NJU1NfQ01EX0ggKi8gCi0KIHR5cGVkZWYgc3RydWN0IF9JT0NUTF9Db21tYW5kX3N0cnVjdCB7CiAgIExVTkFkZHJfc3RydWN0CSAgIExVTl9pbmZvOwogICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IDAwMDhkZWU2Li5jOWJiY2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKQEAgLTI4LDYgKzI4LDcgQEAKIGV4dGVybiBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gaW50IGNncm91cF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2dyb3VwX2xvY2sodm9pZCk7CitleHRlcm4gaW50IGNncm91cF9sb2NrX2lzX2hlbGQodm9pZCk7CiBleHRlcm4gYm9vbCBjZ3JvdXBfbG9ja19saXZlX2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncnApOwogZXh0ZXJuIHZvaWQgY2dyb3VwX3VubG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CkBAIC00ODYsNyArNDg3LDkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnRhc2tfc3Vic3lzX3N0YXRlKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHN1YnN5c19pZCkKIHsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHRhc2stPmNncm91cHMtPnN1YnN5c1tzdWJzeXNfaWRdKTsKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRhc2stPmNncm91cHMtPnN1YnN5c1tzdWJzeXNfaWRdLAorCQkJCSAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgIGNncm91cF9sb2NrX2lzX2hlbGQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCogdGFza19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IDhhNGExMzAuLjRiY2E4YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTE1NCw2ICsxNTQsNyBAQAogICogQG1heF9pZGxlX25zOgltYXggaWRsZSB0aW1lIHBlcm1pdHRlZCBieSB0aGUgY2xvY2tzb3VyY2UgKG5zZWNzKQogICogQGZsYWdzOgkJZmxhZ3MgZGVzY3JpYmluZyBzcGVjaWFsIHByb3BlcnRpZXMKICAqIEB2cmVhZDoJCXZzeXNjYWxsIGJhc2VkIHJlYWQKKyAqIEBzdXNwZW5kOgkJc3VzcGVuZCBmdW5jdGlvbiBmb3IgdGhlIGNsb2Nrc291cmNlLCBpZiBuZWNlc3NhcnkKICAqIEByZXN1bWU6CQlyZXN1bWUgZnVuY3Rpb24gZm9yIHRoZSBjbG9ja3NvdXJjZSwgaWYgbmVjZXNzYXJ5CiAgKi8KIHN0cnVjdCBjbG9ja3NvdXJjZSB7CkBAIC0xNzIsNyArMTczLDggQEAKIAl1NjQgbWF4X2lkbGVfbnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljeWNsZV90ICgqdnJlYWQpKHZvaWQpOwotCXZvaWQgKCpyZXN1bWUpKHZvaWQpOworCXZvaWQgKCpzdXNwZW5kKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKKwl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKICNpZmRlZiBDT05GSUdfSUE2NAogCXZvaWQgKmZzeXNfbW1pbzsgICAgICAgIC8qIHVzZWQgYnkgZnN5c2NhbGwgYXNtIGNvZGUgKi8KICNkZWZpbmUgQ0xLU1JDX0ZTWVNfTU1JT19TRVQobW1pbywgYWRkcikgICAgICAoKG1taW8pID0gKGFkZHIpKQpAQCAtMjc3LDYgKzI3OSw3IEBACiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UqIGNsb2Nrc291cmNlX2dldF9uZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfY2hhbmdlX3JhdGluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCBpbnQgcmF0aW5nKTsKK2V4dGVybiB2b2lkIGNsb2Nrc291cmNlX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9yZXN1bWUodm9pZCk7CiBleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlICogX19pbml0IF9fd2VhayBjbG9ja3NvdXJjZV9kZWZhdWx0X2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfbWFya191bnN0YWJsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCAxODhmY2FlLi5hNWE0NzJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC01LDcgKzUsNyBAQAogCiAjaWZkZWYgX19DSEVDS0VSX18KICMgZGVmaW5lIF9fdXNlcgkJX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgxKSkpCi0jIGRlZmluZSBfX2tlcm5lbAkvKiBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgKi8KKyMgZGVmaW5lIF9fa2VybmVsCV9fYXR0cmlidXRlX18oKGFkZHJlc3Nfc3BhY2UoMCkpKQogIyBkZWZpbmUgX19zYWZlCQlfX2F0dHJpYnV0ZV9fKChzYWZlKSkKICMgZGVmaW5lIF9fZm9yY2UJX19hdHRyaWJ1dGVfXygoZm9yY2UpKQogIyBkZWZpbmUgX19ub2Nhc3QJX19hdHRyaWJ1dGVfXygobm9jYXN0KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggZDc3YjU0Ny4uZGJjZWU3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTE0Myw2ICsxNDMsOCBAQAogCiAjZGVmaW5lIGZvcl9lYWNoX2NwdShjcHUsIG1hc2spCQkJXAogCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9ub3QoY3B1LCBtYXNrKQkJXAorCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCiAjZGVmaW5lIGZvcl9lYWNoX2NwdV9hbmQoY3B1LCBtYXNrLCBhbmQpCVwKIAlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrLCAodm9pZClhbmQpCiAjZWxzZQpAQCAtMjAzLDYgKzIwNSwxOCBAQAogCQkoY3B1KSA8IG5yX2NwdV9pZHM7KQogCiAvKioKKyAqIGZvcl9lYWNoX2NwdV9ub3QgLSBpdGVyYXRlIG92ZXIgZXZlcnkgY3B1IGluIGEgY29tcGxlbWVudGVkIG1hc2sKKyAqIEBjcHU6IHRoZSAob3B0aW9uYWxseSB1bnNpZ25lZCkgaW50ZWdlciBpdGVyYXRvcgorICogQG1hc2s6IHRoZSBjcHVtYXNrIHBvaW50ZXIKKyAqCisgKiBBZnRlciB0aGUgbG9vcCwgY3B1IGlzID49IG5yX2NwdV9pZHMuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfY3B1X25vdChjcHUsIG1hc2spCQkJCVwKKwlmb3IgKChjcHUpID0gLTE7CQkJCQlcCisJCShjcHUpID0gY3B1bWFza19uZXh0X3plcm8oKGNwdSksIChtYXNrKSksCVwKKwkJKGNwdSkgPCBucl9jcHVfaWRzOykKKworLyoqCiAgKiBmb3JfZWFjaF9jcHVfYW5kIC0gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGNwdSBpbiBib3RoIG1hc2tzCiAgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkgdW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKICAqIEBtYXNrOiB0aGUgZmlyc3QgY3B1bWFzayBwb2ludGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDRlMzM4N2EuLjRkYjA5ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0yODAsNyArMjgwLDcgQEAKICAqIHRhc2sgb3IgYnkgaG9sZGluZyB0YXNrbGlzdF9sb2NrIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyB1bmxpbmtlZC4KICAqLwogI2RlZmluZSBfX3Rhc2tfY3JlZCh0YXNrKSBcCi0JKChjb25zdCBzdHJ1Y3QgY3JlZCAqKShyY3VfZGVyZWZlcmVuY2UoKHRhc2spLT5yZWFsX2NyZWQpKSkKKwkoKGNvbnN0IHN0cnVjdCBjcmVkICopKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygodGFzayktPnJlYWxfY3JlZCwgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSkpKQogCiAvKioKICAqIGdldF90YXNrX2NyZWQgLSBHZXQgYW5vdGhlciB0YXNrJ3Mgb2JqZWN0aXZlIGNyZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhdmluY2lfZW1hYy5oIGIvaW5jbHVkZS9saW51eC9kYXZpbmNpX2VtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzkzMGRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kYXZpbmNpX2VtYWMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogVEkgRGFWaW5jaSBFTUFDIHBsYXRmb3JtIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IEtldmluIEhpbG1hbiwgRGVlcCBSb290IFN5c3RlbXMsIExMQworICoKKyAqIDIwMDcgKGMpIERlZXAgUm9vdCBTeXN0ZW1zLCBMTEMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9MSU5VWF9EQVZJTkNJX0VNQUNfSAorI2RlZmluZSBfTElOVVhfREFWSU5DSV9FTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisKK3N0cnVjdCBlbWFjX3BsYXRmb3JtX2RhdGEgeworCWNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOworCXUzMiBjdHJsX3JlZ19vZmZzZXQ7CisJdTMyIGN0cmxfbW9kX3JlZ19vZmZzZXQ7CisJdTMyIGN0cmxfcmFtX29mZnNldDsKKwl1MzIgaHdfcmFtX2FkZHI7CisJdTMyIG1kaW9fcmVnX29mZnNldDsKKwl1MzIgY3RybF9yYW1fc2l6ZTsKKwl1MzIgcGh5X21hc2s7CisJdTMyIG1kaW9fbWF4X2ZyZXE7CisJdTggcm1paV9lbjsKKwl1OCB2ZXJzaW9uOworCXZvaWQgKCppbnRlcnJ1cHRfZW5hYmxlKSAodm9pZCk7CisJdm9pZCAoKmludGVycnVwdF9kaXNhYmxlKSAodm9pZCk7Cit9OworCitlbnVtIHsKKwlFTUFDX1ZFUlNJT05fMSwJLyogRE02NDR4ICovCisJRU1BQ19WRVJTSU9OXzIsCS8qIERNNjQ2eCAqLworfTsKKwordm9pZCBkYXZpbmNpX2dldF9tYWNfYWRkcihzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptZW1fYWNjLCB2b2lkICpjb250ZXh0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYTYyNzk5Zi4uYjMwNTI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC00NzIsNiArNDcyLDIzIEBACiAJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9kaXNhYmxlX2FzeW5jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pCisJCWRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZCA9IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX2FzeW5jX3N1c3BlbmRfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICEhZGV2LT5wb3dlci5hc3luY19zdXNwZW5kOworfQorCiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggNzg3ODQ5OC4uMjFmZDliNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5fZGV2ICpkZXY7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9ub2RlOwotCXN0cnVjdCBkbWFfY2hhbl9wZXJjcHUgKmxvY2FsOworCXN0cnVjdCBkbWFfY2hhbl9wZXJjcHUgX19wZXJjcHUgKmxvY2FsOwogCWludCBjbGllbnRfY291bnQ7CiAJaW50IHRhYmxlX2NvdW50OwogCXZvaWQgKnByaXZhdGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vhcmx5X3Jlcy5oIGIvaW5jbHVkZS9saW51eC9lYXJseV9yZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMwOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lYXJseV9yZXMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9MSU5VWF9FQVJMWV9SRVNfSAorI2RlZmluZSBfTElOVVhfRUFSTFlfUkVTX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiB2b2lkIHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpOwordm9pZCBmcmVlX2Vhcmx5X3BhcnRpYWwodTY0IHN0YXJ0LCB1NjQgZW5kKTsKK2V4dGVybiB2b2lkIGVhcmx5X3Jlc190b19ib290bWVtKHU2NCBzdGFydCwgdTY0IGVuZCk7CisKK3ZvaWQgcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSk7Cit1NjQgZmluZF9lYXJseV9hcmVhKHU2NCBlaV9zdGFydCwgdTY0IGVpX2xhc3QsIHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCSB1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK3U2NCBmaW5kX2Vhcmx5X2FyZWFfc2l6ZSh1NjQgZWlfc3RhcnQsIHU2NCBlaV9sYXN0LCB1NjQgc3RhcnQsCisJCQkgdTY0ICpzaXplcCwgdTY0IGFsaWduKTsKK3U2NCBmaW5kX2Z3X21lbW1hcF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7Cit1NjQgZ2V0X21heF9tYXBwZWQodm9pZCk7CisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KK2ludCBnZXRfZnJlZV9hbGxfbWVtb3J5X3JhbmdlKHN0cnVjdCByYW5nZSAqKnJhbmdlcCwgaW50IG5vZGVpZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRUFSTFlfUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IDBjYzRkNTUuLmFkOTkwYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMzQ5LDcgKzM0OSwxMSBAQAogI2RlZmluZSBFTEZfT1NBQkkgRUxGT1NBQklfTk9ORQogI2VuZGlmCiAKLS8qIE5vdGVzIHVzZWQgaW4gRVRfQ09SRSAqLworLyoKKyAqIE5vdGVzIHVzZWQgaW4gRVRfQ09SRS4gQXJjaGl0ZWN0dXJlcyBleHBvcnQgc29tZSBvZiB0aGUgYXJjaCByZWdpc3RlciBzZXRzCisgKiB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBub3RlIHR5cGVzIHZpYSB0aGUgUFRSQUNFX0dFVFJFR1NFVCBhbmQKKyAqIFBUUkFDRV9TRVRSRUdTRVQgcmVxdWVzdHMuCisgKi8KICNkZWZpbmUgTlRfUFJTVEFUVVMJMQogI2RlZmluZSBOVF9QUkZQUkVHCTIKICNkZWZpbmUgTlRfUFJQU0lORk8JMwpAQCAtMzYxLDcgKzM2NSwxMyBAQAogI2RlZmluZSBOVF9QUENfVlNYCTB4MTAyCQkvKiBQb3dlclBDIFZTWCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTlRfMzg2X1RMUwkweDIwMAkJLyogaTM4NiBUTFMgc2xvdHMgKHN0cnVjdCB1c2VyX2Rlc2MpICovCiAjZGVmaW5lIE5UXzM4Nl9JT1BFUk0JMHgyMDEJCS8qIHg4NiBpbyBwZXJtaXNzaW9uIGJpdG1hcCAoMT1kZW55KSAqLworI2RlZmluZSBOVF9YODZfWFNUQVRFCTB4MjAyCQkvKiB4ODYgZXh0ZW5kZWQgc3RhdGUgdXNpbmcgeHNhdmUgKi8KICNkZWZpbmUgTlRfUzM5MF9ISUdIX0dQUlMJMHgzMDAJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KKyNkZWZpbmUgTlRfUzM5MF9USU1FUgkweDMwMQkJLyogczM5MCB0aW1lciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRENNUAkweDMwMgkJLyogczM5MCBUT0QgY2xvY2sgY29tcGFyYXRvciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRFBSRUcJMHgzMDMJCS8qIHMzOTAgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX0NUUlMJMHgzMDQJCS8qIHMzOTAgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlRfUzM5MF9QUkVGSVgJMHgzMDUJCS8qIHMzOTAgcHJlZml4IHJlZ2lzdGVyICovCiAKIAogLyogTm90ZSBoZWFkZXIgaW4gYSBQVF9OT1RFIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggZWY0YTJkOC4uY2NhMWMzZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0yNDIsNiArMjQyLDcgQEAKIAlFVEhfU1NfVEVTVAkJPSAwLAogCUVUSF9TU19TVEFUUywKIAlFVEhfU1NfUFJJVl9GTEFHUywKKwlFVEhfU1NfTlRVUExFX0ZJTFRFUlMsCiB9OwogCiAvKiBmb3IgcGFzc2luZyBzdHJpbmcgc2V0cyBmb3IgZGF0YSB0YWdnaW5nICovCkBAIC0yOTAsNiArMjkxLDcgQEAKICAqLwogZW51bSBldGh0b29sX2ZsYWdzIHsKIAlFVEhfRkxBR19MUk8JCT0gKDEgPDwgMTUpLAkvKiBMUk8gaXMgZW5hYmxlZCAqLworCUVUSF9GTEFHX05UVVBMRQkJPSAoMSA8PCAyNyksCS8qIE4tdHVwbGUgZmlsdGVycyBlbmFibGVkICovCiB9OwogCiAvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYXJlIGZvciBzdXBwb3J0aW5nIFJYIG5ldHdvcmsgZmxvdwpAQCAtMzYzLDYgKzM2NSwzNSBAQAogCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKK3N0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgeworCV9fdTMyCQkgZmxvd190eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMJCXJhd19pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYwkJZXRoZXJfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKKwkJX191OAkJCQkJaGRhdGFbNjRdOworCX0gaF91LCBtX3U7IC8qIGVudHJ5LCBtYXNrICovCisKKwlfX3UxNgkgICAgICAgIHZsYW5fdGFnOworCV9fdTE2CSAgICAgICAgdmxhbl90YWdfbWFzazsKKwlfX3U2NAkJZGF0YTsgICAgICAvKiB1c2VyLWRlZmluZWQgZmxvdyBzcGVjIGRhdGEgKi8KKwlfX3U2NAkJZGF0YV9tYXNrOyAvKiB1c2VyLWRlZmluZWQgZmxvdyBzcGVjIG1hc2sgKi8KKworCS8qIHNpZ25lZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHF1ZXVlIGFuZCBhY3Rpb25zIChEUk9QKSAqLworCV9fczMyCQlhY3Rpb247CisjZGVmaW5lIEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1AgLTEKK307CisKK3N0cnVjdCBldGh0b29sX3J4X250dXBsZSB7CisJX191MzIJCQkJCWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjCWZzOworfTsKKwogI2RlZmluZSBFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRQkxMjgKIGVudW0gZXRodG9vbF9mbGFzaF9vcF90eXBlIHsKIAlFVEhUT09MX0ZMQVNIX0FMTF9SRUdJT05TCT0gMCwKQEAgLTM3Nyw2ICs0MDgsMjAgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKworc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlY19jb250YWluZXIgeworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgZnM7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2xpc3QgeworI2RlZmluZSBFVEhUT09MX01BWF9OVFVQTEVfTElTVF9FTlRSWSAxMDI0CisjZGVmaW5lIEVUSFRPT0xfTUFYX05UVVBMRV9TVFJJTkdfUEVSX0VOVFJZIDE0CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJY291bnQ7Cit9OworCiBzdHJ1Y3QgbmV0X2RldmljZTsKIAogLyogU29tZSBnZW5lcmljIG1ldGhvZHMgZHJpdmVycyBtYXkgdXNlIGluIHRoZWlyIGV0aHRvb2xfb3BzICovCkBAIC0zOTQsNiArNDM5LDcgQEAKIGludCBldGh0b29sX29wX3NldF91Zm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpOwogdTMyIGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKK3ZvaWQgZXRodG9vbF9udHVwbGVfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qKgogICogJmV0aHRvb2xfb3BzIC0gQWx0ZXIgYW5kIHJlcG9ydCBuZXR3b3JrIGRldmljZSBzZXR0aW5ncwpAQCAtNTAwLDYgKzU0Niw4IEBACiAJaW50CSgqc2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKIAlpbnQgICAgICgqZmxhc2hfZGV2aWNlKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9mbGFzaCAqKTsKIAlpbnQJKCpyZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyICopOworCWludAkoKnNldF9yeF9udHVwbGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4X250dXBsZSAqKTsKKwlpbnQJKCpnZXRfcnhfbnR1cGxlKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIgc3RyaW5nc2V0LCB2b2lkICopOwogfTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKQEAgLTU1OSw2ICs2MDcsOSBAQAogI2RlZmluZQlFVEhUT09MX0ZMQVNIREVWCTB4MDAwMDAwMzMgLyogRmxhc2ggZmlybXdhcmUgdG8gZGV2aWNlICovCiAjZGVmaW5lCUVUSFRPT0xfUkVTRVQJCTB4MDAwMDAwMzQgLyogUmVzZXQgaGFyZHdhcmUgKi8KIAorI2RlZmluZSBFVEhUT09MX1NSWE5UVVBMRQkweDAwMDAwMDM1IC8qIEFkZCBhbiBuLXR1cGxlIGZpbHRlciB0byBkZXZpY2UgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhOVFVQTEUJMHgwMDAwMDAzNiAvKiBHZXQgbi10dXBsZSBmaWx0ZXJzIGZyb20gZGV2aWNlICovCisKIC8qIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBjb2RlICovCiAjZGVmaW5lIFNQQVJDX0VUSF9HU0VUCQlFVEhUT09MX0dTRVQKICNkZWZpbmUgU1BBUkNfRVRIX1NTRVQJCUVUSFRPT0xfU1NFVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IDM2OTc2N2JkLi5jMTAxNjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC01NDMsNiArNTQzLDggQEAKICNkZWZpbmUgRkJfRVZFTlRfR0VUX1JFUSAgICAgICAgICAgICAgICAweDBECiAvKiAgICAgIFVuYmluZCBmcm9tIHRoZSBjb25zb2xlIGlmIHBvc3NpYmxlICovCiAjZGVmaW5lIEZCX0VWRU5UX0ZCX1VOQklORCAgICAgICAgICAgICAgMHgwRQorLyogICAgICBDT05TT0xFLVNQRUNJRklDOiByZW1hcCBhbGwgY29uc29sZXMgdG8gbmV3IGZiIC0gZm9yIHZnYSBzd2l0Y2hlcm9vICovCisjZGVmaW5lIEZCX0VWRU5UX1JFTUFQX0FMTF9DT05TT0xFICAgICAgMHgwRgogCiBzdHJ1Y3QgZmJfZXZlbnQgewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAppbmRleCBhMmVjNzRiLi4wMTNkYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaApAQCAtNTcsNyArNTcsMTQgQEAKIAlzdHJ1Y3QgZmlsZSAqIGZkX2FycmF5W05SX09QRU5fREVGQVVMVF07CiB9OwogCi0jZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIChyY3VfZGVyZWZlcmVuY2UoKGZpbGVzKS0+ZmR0KSkKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX2ZkdGFibGUoZmlsZXMsIGZkdGZkKSBcCisJKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygoZmR0ZmQpLCBcCisJCQkgICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgXAorCQkJICAgICAgIGxvY2tkZXBfaXNfaGVsZCgmKGZpbGVzKS0+ZmlsZV9sb2NrKSB8fCBcCisJCQkgICAgICAgYXRvbWljX3JlYWQoJihmaWxlcyktPmNvdW50KSA9PSAxKSkKKworI2RlZmluZSBmaWxlc19mZHRhYmxlKGZpbGVzKSBcCisJCShyY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZSgoZmlsZXMpLCAoZmlsZXMpLT5mZHQpKQogCiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zOwogc3RydWN0IHZmc21vdW50OwpAQCAtNzgsNyArODUsNyBAQAogCXN0cnVjdCBmZHRhYmxlICpmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAogCWlmIChmZCA8IGZkdC0+bWF4X2ZkcykKLQkJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZShmZHQtPmZkW2ZkXSk7CisJCWZpbGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZShmaWxlcywgZmR0LT5mZFtmZF0pOwogCXJldHVybiBmaWxlOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCmluZGV4IDUyMGVjZjguLjQwYjExMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCkBAIC0yNDgsMTMgKzI0OCwyMCBAQAogI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX0JST0FEQ0FTVF9SRVFVRVNUICAgICAgIF9JT1coJyMnLCAweDEyLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QpCiAjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfU1RSRUFNX1BBQ0tFVCAgICAgICAgICAgX0lPVygnIycsIDB4MTMsIHN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCkKIAorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4zNCAqLworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIyICAgX0lPV1IoJyMnLCAweDE0LCBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyKQorCiAvKgogICogRldfQ0RFVl9WRVJTSU9OIEhpc3RvcnkKICAqICAxICAoMi42LjIyKSAgLSBpbml0aWFsIHZlcnNpb24KICAqICAyICAoMi42LjMwKSAgLSBjaGFuZ2VkICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQuaGVhZGVyIGlmCiAgKiAgICAgICAgICAgICAgICAgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplIGlzIDggb3IgbW9yZQorICogICAgICgyLjYuMzIpICAtIGFkZGVkIHRpbWUgc3RhbXAgdG8geG1pdCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0CisgKiAgICAgKDIuNi4zMykgIC0gSVIgaGFzIGFsd2F5cyBwYWNrZXQtcGVyLWJ1ZmZlciBzZW1hbnRpY3Mgbm93LCBub3Qgb25lIG9mCisgKiAgICAgICAgICAgICAgICAgZHVhbC1idWZmZXIgb3IgcGFja2V0LXBlci1idWZmZXIgZGVwZW5kaW5nIG9uIGhhcmR3YXJlCisgKiAgMyAgKDIuNi4zNCkgIC0gbWFkZSAmZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgcmVsaWFibGUKICAqLwotI2RlZmluZSBGV19DREVWX1ZFUlNJT04gMgorI2RlZmluZSBGV19DREVWX1ZFUlNJT04gMwogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2dldF9pbmZvIC0gR2VuZXJhbCBwdXJwb3NlIGluZm9ybWF0aW9uIGlvY3RsCkBAIC01NDQsMTQgKzU1MSwxOCBAQAogLyoqCiAgKiBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgLSByZWFkIGN5Y2xlIHRpbWVyIHJlZ2lzdGVyCiAgKiBAbG9jYWxfdGltZTogICBzeXN0ZW0gdGltZSwgaW4gbWljcm9zZWNvbmRzIHNpbmNlIHRoZSBFcG9jaAotICogQGN5Y2xlX3RpbWVyOiAgaXNvY2hyb25vdXMgY3ljbGUgdGltZXIsIGFzIHBlciBPSENJIDEuMSBjbGF1c2UgNS4xMworICogQGN5Y2xlX3RpbWVyOiAgQ3ljbGUgVGltZSByZWdpc3RlciBjb250ZW50cwogICoKICAqIFRoZSAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSIGlvY3RsIHJlYWRzIHRoZSBpc29jaHJvbm91cyBjeWNsZSB0aW1lcgotICogYW5kIGFsc28gdGhlIHN5c3RlbSBjbG9jay4gIFRoaXMgYWxsb3dzIHRvIGV4cHJlc3MgdGhlIHJlY2VpdmUgdGltZSBvZiBhbgotICogaXNvY2hyb25vdXMgcGFja2V0IGFzIGEgc3lzdGVtIHRpbWUgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeS4KKyAqIGFuZCBhbHNvIHRoZSBzeXN0ZW0gY2xvY2sgKCVDTE9DS19SRUFMVElNRSkuICBUaGlzIGFsbG93cyB0byBleHByZXNzIHRoZQorICogcmVjZWl2ZSB0aW1lIG9mIGFuIGlzb2Nocm9ub3VzIHBhY2tldCBhcyBhIHN5c3RlbSB0aW1lLgogICoKICAqIEBjeWNsZV90aW1lciBjb25zaXN0cyBvZiA3IGJpdHMgY3ljbGVTZWNvbmRzLCAxMyBiaXRzIGN5Y2xlQ291bnQsIGFuZAotICogMTIgYml0cyBjeWNsZU9mZnNldCwgaW4gaG9zdCBieXRlIG9yZGVyLgorICogMTIgYml0cyBjeWNsZU9mZnNldCwgaW4gaG9zdCBieXRlIG9yZGVyLiAgQ2YuIHRoZSBDeWNsZSBUaW1lIHJlZ2lzdGVyCisgKiBwZXIgSUVFRSAxMzk0IG9yIElzb2Nocm9ub3VzIEN5Y2xlIFRpbWVyIHJlZ2lzdGVyIHBlciBPSENJLTEzOTQuCisgKgorICogSW4gdmVyc2lvbiAxIGFuZCAyIG9mIHRoZSBBQkksIHRoaXMgaW9jdGwgcmV0dXJuZWQgdW5yZWxpYWJsZSAobm9uLQorICogbW9ub3RvbmljKSBAY3ljbGVfdGltZXIgdmFsdWVzIG9uIGNlcnRhaW4gY29udHJvbGxlcnMuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lciB7CiAJX191NjQgbG9jYWxfdGltZTsKQEAgLTU1OSw2ICs1NzAsMjUgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyMiAtIHJlYWQgY3ljbGUgdGltZXIgcmVnaXN0ZXIKKyAqIEB0dl9zZWM6ICAgICAgIHN5c3RlbSB0aW1lLCBzZWNvbmRzCisgKiBAdHZfbnNlYzogICAgICBzeXN0ZW0gdGltZSwgc3ViLXNlY29uZHMgcGFydCBpbiBuYW5vc2Vjb25kcworICogQGNsa19pZDogICAgICAgaW5wdXQgcGFyYW1ldGVyLCBjbG9jayBmcm9tIHdoaWNoIHRvIGdldCB0aGUgc3lzdGVtIHRpbWUKKyAqIEBjeWNsZV90aW1lcjogIEN5Y2xlIFRpbWUgcmVnaXN0ZXIgY29udGVudHMKKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUjIgd29ya3MgbGlrZQorICogJUZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUiBidXQgbGV0cyB5b3UgY2hvb3NlIGEgY2xvY2sgbGlrZSB3aXRoIFBPU0lYJworICogY2xvY2tfZ2V0dGltZSBmdW5jdGlvbi4gIFN1cHBvcnRlZCBAY2xrX2lkIHZhbHVlcyBhcmUgUE9TSVgnICVDTE9DS19SRUFMVElNRQorICogYW5kICVDTE9DS19NT05PVE9OSUMgYW5kIExpbnV4JyAlQ0xPQ0tfTU9OT1RPTklDX1JBVy4KKyAqLworc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyMiB7CisJX19zNjQgdHZfc2VjOworCV9fczMyIHR2X25zZWM7CisJX19zMzIgY2xrX2lkOworCV9fdTMyIGN5Y2xlX3RpbWVyOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgLSAoRGUpYWxsb2NhdGUgYSBjaGFubmVsIG9yIGJhbmR3aWR0aAogICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiBjb3JyZXBvbmRpbmcgaXNvIHJlc291cmNlIGV2ZW50cwogICogQGNoYW5uZWxzOglJc29jaHJvbm91cyBjaGFubmVscyBvZiB3aGljaCBvbmUgaXMgdG8gYmUgKGRlKWFsbG9jYXRlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCmluZGV4IGEwZTY3MTUwLi40YmQ5NGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCkBAIC02NSwxMiArNjUsMTMgQEAKICNkZWZpbmUgQ1NSX0RJUkVDVE9SWV9JRAkweDIwCiAKIHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgewotCXUzMiAqcDsKLQl1MzIgKmVuZDsKKwljb25zdCB1MzIgKnA7CisJY29uc3QgdTMyICplbmQ7CiB9OwogCi12b2lkIGZ3X2Nzcl9pdGVyYXRvcl9pbml0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLCB1MzIgKnApOwordm9pZCBmd19jc3JfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgY29uc3QgdTMyICpwKTsKIGludCBmd19jc3JfaXRlcmF0b3JfbmV4dChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgaW50ICprZXksIGludCAqdmFsdWUpOworaW50IGZ3X2Nzcl9zdHJpbmcoY29uc3QgdTMyICpkaXJlY3RvcnksIGludCBrZXksIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIGZ3X2J1c190eXBlOwogCkBAIC0xNjIsNyArMTYzLDcgQEAKIAlzdHJ1Y3QgbXV0ZXggY2xpZW50X2xpc3RfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKIAotCXUzMiAqY29uZmlnX3JvbTsKKwljb25zdCB1MzIgKmNvbmZpZ19yb207CiAJc2l6ZV90IGNvbmZpZ19yb21fbGVuZ3RoOwogCWludCBjb25maWdfcm9tX3JldHJpZXM7CiAJdW5zaWduZWQgaXNfbG9jYWw6MTsKQEAgLTIwNCw3ICsyMDUsNyBAQAogICovCiBzdHJ1Y3QgZndfdW5pdCB7CiAJc3RydWN0IGRldmljZSBkZXZpY2U7Ci0JdTMyICpkaXJlY3Rvcnk7CisJY29uc3QgdTMyICpkaXJlY3Rvcnk7CiAJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCBhdHRyaWJ1dGVfZ3JvdXA7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCAwYjRmOTdkLi4wMWU2YWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEzNCw2ICsxMzQsOCBAQAogdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfZnVuYyhjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2FsbChjaGFyICpnbG9iKTsKIAorZXh0ZXJuIGludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKKwogZW51bSB7CiAJRlRSQUNFX0ZMX0ZSRUUJCT0gKDEgPDwgMCksCiAJRlRSQUNFX0ZMX0ZBSUxFRAk9ICgxIDw8IDEpLApAQCAtMTQxLDcgKzE0Myw2IEBACiAJRlRSQUNFX0ZMX0VOQUJMRUQJPSAoMSA8PCAzKSwKIAlGVFJBQ0VfRkxfTk9UUkFDRQk9ICgxIDw8IDQpLAogCUZUUkFDRV9GTF9DT05WRVJURUQJPSAoMSA8PCA1KSwKLQlGVFJBQ0VfRkxfRlJPWkVOCT0gKDEgPDwgNiksCiB9OwogCiBzdHJ1Y3QgZHluX2Z0cmFjZSB7CkBAIC0yNTAsNiArMjUxLDEwIEBACiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CitzdGF0aWMgaW5saW5lIGludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAvKiB0b3RhbGx5IGRpc2FibGUgZnRyYWNlIC0gY2FuIG5vdCByZS1lbmFibGUgYWZ0ZXIgdGhpcyAqLwpAQCAtNTExLDQgKzUxNiwxMCBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgKi8KIAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKKwordW5zaWduZWQgbG9uZyBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpOworCisjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLworCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAyMjMzYzk4Li42YjdjNDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogc3RydWN0IHRyYWNlX2FycmF5Owogc3RydWN0IHRyYWNlcjsKQEAgLTEyMSw5ICsxMjIsOCBAQAogCWludAkJCSgqcmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCXZvaWQJCQkoKnVucmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCWludAkJCWlkOworCWNvbnN0IGNoYXIJCSpwcmludF9mbXQ7CiAJaW50CQkJKCpyYXdfaW5pdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwotCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqLAotCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqKTsKIAlpbnQJCQkoKmRlZmluZV9maWVsZHMpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWZpZWxkczsKIAlpbnQJCQlmaWx0ZXJfYWN0aXZlOwpAQCAtMTM4LDkgKzEzOCw2IEBACiAKICNkZWZpbmUgRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUJMjA0OAogCi1leHRlcm4gY2hhciAqcGVyZl90cmFjZV9idWY7Ci1leHRlcm4gY2hhciAqcGVyZl90cmFjZV9idWZfbm1pOwotCiAjZGVmaW5lIE1BWF9GSUxURVJfUFJFRAkJMzIKICNkZWZpbmUgTUFYX0ZJTFRFUl9TVFJfVkFMCTI1NgkvKiBTaG91bGQgaGFuZGxlIEtTWU1fU1lNQk9MX0xFTiAqLwogCkBAIC0xODgsMTMgKzE4NSwyNyBAQAogCQlfX3RyYWNlX3ByaW50ayhpcCwgZm10LCAjI2FyZ3MpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogc3RydWN0IHBlcmZfZXZlbnQ7CiBleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQgZXZlbnRfaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShpbnQgZXZlbnRfaWQpOwogZXh0ZXJuIGludCBmdHJhY2VfcHJvZmlsZV9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGV2ZW50X2lkLAogCQkJCSAgICAgY2hhciAqZmlsdGVyX3N0cik7CiBleHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworZXh0ZXJuIHZvaWQgKgorZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHR5cGUsIGludCAqcmN0eHAsCisJCQkgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKTsKKworc3RhdGljIGlubGluZSB2b2lkCitmdHJhY2VfcGVyZl9idWZfc3VibWl0KHZvaWQgKnJhd19kYXRhLCBpbnQgc2l6ZSwgaW50IHJjdHgsIHU2NCBhZGRyLAorCQkgICAgICAgdTY0IGNvdW50LCB1bnNpZ25lZCBsb25nIGlycV9mbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gcmF3X2RhdGE7CisKKwlwZXJmX3RwX2V2ZW50KGVudHJ5LT50eXBlLCBhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUpOworCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKK30KICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmggYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKaW5kZXggMWJjMDg1NC4uNDhlNjhkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaApAQCAtNDYsNyArNDYsNiBAQAogCXN0cnVjdCBtdXRleCBkcnZfbXV0ZXg7CQkvKiBwcm90ZWN0cyBzZXJpby0+ZHJ2IHNvIGF0dHJpYnV0ZXMgY2FuIHBpbiBkcml2ZXIgKi8KIAogCXN0cnVjdCBkZXZpY2UgZGV2OwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwkvKiBwb3J0IGhhcyBiZWVuIGZ1bGx5IHJlZ2lzdGVyZWQgd2l0aCBkcml2ZXIgY29yZSAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCA5NzE3MDgxLi41NmI1MDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YW1wOwogCWludCBpbl9mbGlnaHRbMl07CiAjaWZkZWYJQ09ORklHX1NNUAotCXN0cnVjdCBkaXNrX3N0YXRzICpka3N0YXRzOworCXN0cnVjdCBkaXNrX3N0YXRzIF9fcGVyY3B1ICpka3N0YXRzOwogI2Vsc2UKIAlzdHJ1Y3QgZGlza19zdGF0cyBka3N0YXRzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmggYi9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggODFmOTBhNS4uNGY0NDYyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZzMl9vbmRpc2suaApAQCAtMTgwLDMzICsxODAsNiBAQAogfTsKIAogLyoKLSAqIHF1b3RhIGxpbmtlZCBsaXN0OiB1c2VyIHF1b3RhcyBhbmQgZ3JvdXAgcXVvdGFzIGZvcm0gdHdvIHNlcGFyYXRlIAotICogc2luZ2x5IGxpbmtlZCBsaXN0cy4gbGxfbmV4dCBzdG9yZXMgdWlkcyBvciBnaWRzIG9mIG5leHQgcXVvdGFzIGluIHRoZSAKLSAqIGxpbmtlZCBsaXN0LgotCi1HaXZlbiB0aGUgdWlkL2dpZCwgaG93IHRvIGNhbGN1bGF0ZSB0aGUgcXVvdGEgZmlsZSBvZmZzZXRzIGZvciB0aGUgY29ycmVzcG9uZGluZwotZ2ZzMl9xdW90YSBzdHJ1Y3R1cmVzIG9uIGRpc2s6Ci0KLWZvciB1c2VyIHF1b3RhcywgZ2l2ZW4gdWlkLAotb2Zmc2V0ID0gdWlkICogc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKTsKLQotZm9yIGdyb3VwIHF1b3RhcywgZ2l2ZW4gZ2lkLAotb2Zmc2V0ID0gKGdpZCAqIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSkpICsgc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKTsKLQotCi0gIHVpZDowICAgZ2lkOjAgICAgICAgdWlkOjEyICAgZ2lkOjEyICAgICAgdWlkOjE3ICAgZ2lkOjE3ICAgICB1aWQ6NTE0MiBnaWQ6NTE0MgotKy0tLS0tLS0rLS0tLS0tLSsgICAgKy0tLS0tLS0rLS0tLS0tLSsgICAgKy0tLS0tLS0rLSAtIC0gLSsgICAgKy0gLSAtIC0rLS0tLS0tLSsKLXwgdmFsaWQgfCB2YWxpZCB8IDo6IHwgdmFsaWQgfCB2YWxpZCB8IDo6IHwgdmFsaWQgfCBpbnZhbCB8IDo6IHwgaW52YWwgfCB2YWxpZCB8Ci0rLS0tLS0tLSstLS0tLS0tKyAgICArLS0tLS0tLSstLS0tLS0tKyAgICArLS0tLS0tLSstIC0gLSAtKyAgICArLSAtIC0gLSstLS0tLS0tKwotbmV4dDoxMiAgIG5leHQ6MTIgICAgbmV4dDoxNyBuZXh0OjUxNDIgICAgbmV4dDpOVUxMICAgICAgICAgICAgICAgICAgICBuZXh0Ok5VTEwKLSAgICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICB8PC0tIHVzZXIgcXVvdGEgbGlzdCAgICAgICAgIHwKLSAgICAgXF9fX19fX3xfX19fX19fX19fXy8gXF9fX19fX3xfX19fX19fX19fXy8gICAgICAgICBncm91cCBxdW90YSBsaXN0IC0tPnwKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICBcX19fX19fX19fX19fX19fX19fLyBcX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLwotCi0qLwotCi0vKgogICogcXVvdGEgc3RydWN0dXJlCiAgKi8KIApAQCAtMjE0LDggKzE4Nyw3IEBACiAJX19iZTY0IHF1X2xpbWl0OwogCV9fYmU2NCBxdV93YXJuOwogCV9fYmU2NCBxdV92YWx1ZTsKLQlfX2JlMzIgcXVfbGxfbmV4dDsgLyogbG9jYXRpb24gb2YgbmV4dCBxdW90YSBpbiBsaXN0ICovCi0JX191OCBxdV9yZXNlcnZlZFs2MF07CisJX191OCBxdV9yZXNlcnZlZFs2NF07CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaCBiL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmgKaW5kZXggMTI4OWZhNy4uY2QwYjNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW9fa2V5cy5oCkBAIC0xMCw2ICsxMCw3IEBACiAJaW50IHR5cGU7CQkvKiBpbnB1dCBldmVudCB0eXBlIChFVl9LRVksIEVWX1NXKSAqLwogCWludCB3YWtldXA7CQkvKiBjb25maWd1cmUgdGhlIGJ1dHRvbiBhcyBhIHdha2UtdXAgc291cmNlICovCiAJaW50IGRlYm91bmNlX2ludGVydmFsOwkvKiBkZWJvdW5jZSB0aWNrcyBpbnRlcnZhbCBpbiBtc2VjcyAqLworCWJvb2wgY2FuX2Rpc2FibGU7CiB9OwogCiBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggODcwOTM2NS4uYjEzNDRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC01MDEsNyArNTAxLDcgQEAKIAl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwogCiAJLyogaGFuZGxlciBmb3IgcmF3IG91dHB1dCBkYXRhLCB1c2VkIGJ5IGhpZHJhdyAqLwotCWludCAoKmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIF9fdTggKiwgc2l6ZV90KTsKKwlpbnQgKCpoaWRfb3V0cHV0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBfX3U4ICosIHNpemVfdCwgdW5zaWduZWQgY2hhcik7CiAKIAkvKiBkZWJ1Z2dpbmcgc3VwcG9ydCB2aWEgZGVidWdmcyAqLwogCXVuc2lnbmVkIHNob3J0IGRlYnVnOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKIC8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCiAvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLwotI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSB8fCAoYSA9PSAweDAwMGQwMDAyKSkKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKChhID49IDB4MDAwZDAwMDIpICYmIChhIDw9IDB4MDAwZDAwMDYpKSkKIAogLyogSElEIGNvcmUgQVBJICovCiAKQEAgLTY5MCw2ICs2OTAsNyBAQAogaW50IGhpZGlucHV0X2ZpbmRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBzdHJ1Y3QgaGlkX2ZpZWxkICoqZmllbGQpOwogdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKTsKIHN0cnVjdCBoaWRfZGV2aWNlICpoaWRfYWxsb2NhdGVfZGV2aWNlKHZvaWQpOworc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpOwogaW50IGhpZF9wYXJzZV9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpOwogaW50IGhpZF9jaGVja19rZXlzX3ByZXNzZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IGFiMmNjMjAuLjc0MTUyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xNyw2ICsxNywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaCBiL2luY2x1ZGUvbGludXgvaTJjLXBueC5oCmluZGV4IDllYjA3YmIuLmE4NzEyNGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaApAQCAtMTIsOSArMTIsOCBAQAogI2lmbmRlZiBfX0kyQ19QTlhfSF9fCiAjZGVmaW5lIF9fSTJDX1BOWF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CitzdHJ1Y3QgY2xrOwogCiBzdHJ1Y3QgaTJjX3BueF9taWYgewogCWludAkJCXJldDsJCS8qIFJldHVybiB2YWx1ZSAqLwpAQCAtMjYsMjAgKzI1LDE4IEBACiB9OwogCiBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgewotCXUzMgkJCWJhc2U7Ci0JdTMyCQkJaW9hZGRyOwotCWludAkJCWlycTsKKwl2b2lkIF9faW9tZW0JCSppb2FkZHI7CiAJc3RydWN0IGkyY19wbnhfbWlmCW1pZjsKIAlpbnQJCQlsYXN0OworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IGkyY19wbnhfZGF0YQkqaTJjX3BueDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJYWRhcHRlcjsKIH07CiAKIHN0cnVjdCBpMmNfcG54X2RhdGEgewotCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCXUzMiAoKmNhbGN1bGF0ZV9pbnB1dF9mcmVxKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0JaW50ICgqc2V0X2Nsb2NrX3J1bikgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCWludCAoKnNldF9jbG9ja19zdG9wKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGJhc2U7CisJaW50IGlycTsKIH07CiAKICNlbmRpZiAvKiBfX0kyQ19QTlhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1zbWJ1cy5oIGIvaW5jbHVkZS9saW51eC9pMmMtc21idXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y1N2E4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtc21idXMuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogaTJjLXNtYnVzLmggLSBTTUJ1cyBleHRlbnNpb25zIHRvIHRoZSBJMkMgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSTJDX1NNQlVTX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19TTUJVU19ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworCisvKioKKyAqIGkyY19zbWJ1c19hbGVydF9zZXR1cCAtIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBzbWJ1c19hbGVydCBpMmMgY2xpZW50CisgKiBAYWxlcnRfZWRnZV90cmlnZ2VyZWQ6IHdoZXRoZXIgdGhlIGFsZXJ0IGludGVycnVwdCBpcyBlZGdlICgxKSBvciBsZXZlbCAoMCkKKyAqCQl0cmlnZ2VyZWQKKyAqIEBpcnE6IElSUSBudW1iZXIsIGlmIHRoZSBzbWJ1c19hbGVydCBkcml2ZXIgc2hvdWxkIHRha2UgY2FyZSBvZiBpbnRlcnJ1cHQKKyAqCQloYW5kbGluZworICoKKyAqIElmIGlycSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc21idXNfYWxlcnQgZHJpdmVyIGRvZXNuJ3QgdGFrZSBjYXJlIG9mCisgKiBpbnRlcnJ1cHQgaGFuZGxpbmcuIEluIHRoYXQgY2FzZSBpdCBpcyB1cCB0byB0aGUgSTJDIGJ1cyBkcml2ZXIgdG8gZWl0aGVyCisgKiBoYW5kbGUgdGhlIGludGVycnVwdHMgb3IgdG8gcG9sbCBmb3IgYWxlcnRzLgorICoKKyAqIElmIGlycSBpcyBzcGVjaWZpZWQgdGhlbiBpdCBpdCBjcnVjaWFsIHRoYXQgYWxlcnRfZWRnZV90cmlnZ2VyZWQgaXMKKyAqIHByb3Blcmx5IHNldC4KKyAqLworc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCB7CisJdW5zaWduZWQgaW50CQlhbGVydF9lZGdlX3RyaWdnZXJlZDoxOworCWludAkJCWlycTsKK307CisKK3N0cnVjdCBpMmNfY2xpZW50ICppMmNfc2V0dXBfc21idXNfYWxlcnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCAqc2V0dXApOworaW50IGkyY19oYW5kbGVfc21idXNfYWxlcnQoc3RydWN0IGkyY19jbGllbnQgKmFyYSk7CisKKyNlbmRpZiAvKiBfTElOVVhfSTJDX1NNQlVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDAyZmM2MTcuLjBhNWRhNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtNTMsNiArNTMsNyBAQAogICogb24gYSBidXMgKG9yIHJlYWQgZnJvbSB0aGVtKS4gQXBhcnQgZnJvbSB0d28gYmFzaWMgdHJhbnNmZXIgZnVuY3Rpb25zIHRvCiAgKiB0cmFuc21pdCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUsIGEgbW9yZSBjb21wbGV4IHZlcnNpb24gY2FuIGJlIHVzZWQgdG8KICAqIHRyYW5zbWl0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWVzc2FnZXMgd2l0aG91dCBpbnRlcnJ1cHRpb24uCisgKiBAY291bnQgbXVzdCBiZSBiZSBsZXNzIHRoYW4gNjRrIHNpbmNlIG1zZy5sZW4gaXMgdTE2LgogICovCiBleHRlcm4gaW50IGkyY19tYXN0ZXJfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpidWYsCiAJCQkgICBpbnQgY291bnQpOwpAQCAtMTUyLDYgKzE1MywxMyBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBpMmNfY2xpZW50ICosIHBtX21lc3NhZ2VfdCBtZXNnKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBpMmNfY2xpZW50ICopOwogCisJLyogQWxlcnQgY2FsbGJhY2ssIGZvciBleGFtcGxlIGZvciB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wuCisJICogVGhlIGZvcm1hdCBhbmQgbWVhbmluZyBvZiB0aGUgZGF0YSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBwcm90b2NvbC4KKwkgKiBGb3IgdGhlIFNNQnVzIGFsZXJ0IHByb3RvY29sLCB0aGVyZSBpcyBhIHNpbmdsZSBiaXQgb2YgZGF0YSBwYXNzZWQKKwkgKiBhcyB0aGUgYWxlcnQgcmVzcG9uc2UncyBsb3cgYml0ICgiZXZlbnQgZmxhZyIpLgorCSAqLworCXZvaWQgKCphbGVydCkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50IGRhdGEpOworCiAJLyogYSBpb2N0bCBsaWtlIGNvbW1hbmQgdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucwogCSAqIHdpdGggdGhlIGRldmljZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKaW5kZXggYmYxYzViZS4uNzg5N2YzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKQEAgLTU0Nyw2ICs1NDcsMTAgQEAKIAl1bnNpZ25lZCBpbnQJYXVkaW9fbWNsazsKIAlzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhCQkqYXVkaW87CiAJc3RydWN0IHR3bDQwMzBfY29kZWNfdmlicmFfZGF0YQkJKnZpYnJhOworCisJLyogdHdsNjAzMCAqLworCWludCBhdWRwd3Jvbl9ncGlvOyAgICAgIC8qIGF1ZGlvIHBvd2VyLW9uIGdwaW8gKi8KKwlpbnQgbmF1ZGludF9pcnE7ICAgICAgICAvKiBhdWRpbyBpbnRlcnJ1cHQgKi8KIH07CiAKIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKaW5kZXggNGM0ZTU3ZC4uODcwMThkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby5oCkBAIC0zODUsNyArMzg1LDcgQEAKIC8qIGRlZmluZXMgZm9yIG1heF9zZWN0b3JzIGFuZCBtYXhfcGh5c19zZWdtZW50cyAqLwogI2RlZmluZSBJMk9fTUFYX1NFQ1RPUlMJCQkxMDI0CiAjZGVmaW5lIEkyT19NQVhfU0VDVE9SU19MSU1JVEVECQkxMjgKLSNkZWZpbmUgSTJPX01BWF9QSFlTX1NFR01FTlRTCQlNQVhfUEhZU19TRUdNRU5UUworI2RlZmluZSBJMk9fTUFYX1BIWVNfU0VHTUVOVFMJCUJMS19NQVhfU0VHTUVOVFMKIAogLyoKICAqCU1lc3NhZ2Ugc3RydWN0dXJlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pY21wdjYuaCBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKaW5kZXggYzBkODM1Ny4uNGM0Yzc0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaApAQCAtMTc0LDggKzE3NCw3IEBACiAKIGV4dGVybiB2b2lkCQkJCWljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgdTggdHlwZSwgdTggY29kZSwKLQkJCQkJCSAgICBfX3UzMiBpbmZvLCAKLQkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkJCQkJCSAgICBfX3UzMiBpbmZvKTsKIAogZXh0ZXJuIGludAkJCQlpY21wdjZfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQJCQkJaWNtcHY2X2Vycl9jb252ZXJ0KHU4IHR5cGUsIHU4IGNvZGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCAxNjNjODQwLi4xOTk4NDk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTEyMCw2ICsxMjAsMjYgQEAKICNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0sJMHgwMDBGCiAjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0sJMHgwMDA3CiAKKy8qIFUtQVBTRCBxdWV1ZSBmb3IgV01NIElFcyBzZW50IGJ5IEFQICovCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19VQVBTRAkoMTw8NykKKworLyogVS1BUFNEIHF1ZXVlcyBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZPCSgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZJCSgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JLCSgxPDwyKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JFCSgxPDwzKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX01BU0sJMHgwZgorCisvKiBVLUFQU0QgbWF4IFNQIGxlbmd0aCBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX1NQX0FMTAkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfMgkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNAkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNgkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfTUFTSwkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfU0hJRlQJNQorCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DVExfTEVOCQk0CisKIHN0cnVjdCBpZWVlODAyMTFfaGRyIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC0xMzAsNiArMTUwLDI1IEBACiAJdTggYWRkcjRbNl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgeworCV9fbGUxNiBmcmFtZV9jb250cm9sOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVs2XTsKKwl1OCBhZGRyMls2XTsKKwl1OCBhZGRyM1s2XTsKKwlfX2xlMTYgc2VxX2N0cmw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbNl07CisJdTggYWRkcjJbNl07CisJdTggYWRkcjNbNl07CisJX19sZTE2IHNlcV9jdHJsOworCV9fbGUxNiBxb3NfY3RybDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGllZWU4MDIxMV9oYXNfdG9kcyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1RPRFMgaXMgc2V0CiAgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKQEAgLTcwNyw2ICs3NDYsMTAgQEAKIAkJCQkJdTggYWN0aW9uOwogCQkJCQl1OCB0cmFuc19pZFtXTEFOX1NBX1FVRVJZX1RSX0lEX0xFTl07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2FfcXVlcnk7CisJCQkJc3RydWN0IHsKKwkJCQkJdTggYWN0aW9uOworCQkJCQl1OCBzbXBzX2NvbnRyb2w7CisJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaHRfc21wczsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTc3MSw3ICs4MTQsMTAgQEAKIC8qKgogICogc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbyAtIE1DUyBpbmZvcm1hdGlvbgogICogQHJ4X21hc2s6IFJYIG1hc2sKLSAqIEByeF9oaWdoZXN0OiBoaWdoZXN0IHN1cHBvcnRlZCBSWCByYXRlCisgKiBAcnhfaGlnaGVzdDogaGlnaGVzdCBzdXBwb3J0ZWQgUlggcmF0ZS4gSWYgc2V0IHJlcHJlc2VudHMKKyAqCXRoZSBoaWdoZXN0IHN1cHBvcnRlZCBSWCBkYXRhIHJhdGUgaW4gdW5pdHMgb2YgMSBNYnBzLgorICoJSWYgdGhpcyBmaWVsZCBpcyAwIHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSB1c2VkIHRvCisgKgljb25zaWRlciB0aGUgaGlnaGVzdCBSWCBkYXRhIHJhdGUgc3VwcG9ydGVkLgogICogQHR4X3BhcmFtczogVFggcGFyYW1ldGVycwogICovCiBzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIHsKQEAgLTgyNCw2ICs4NzAsNyBAQAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09ESU5HCQkweDAwMDEKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAJMHgwMDAyCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfU01fUFMJCQkweDAwMEMKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQJMgogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQJCTB4MDAxMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMAkJCTB4MDAyMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MAkJCTB4MDA0MApAQCAtODM5LDYgKzg4Niw3IEBACiAvKiA4MDIuMTFuIEhUIGNhcGFiaWxpdHkgQU1QRFUgc2V0dGluZ3MgKGZvciBhbXBkdV9wYXJhbXNfaW5mbykgKi8KICNkZWZpbmUgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fRkFDVE9SCQkweDAzCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFkJCTB4MUMKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFlfU0hJRlQJMgogCiAvKgogICogTWF4aW11bSBsZW5ndGggb2YgQU1QRFUgdGhhdCB0aGUgU1RBIGNhbiByZWNlaXZlLgpAQCAtOTIyLDEyICs5NzAsMTcgQEAKICNkZWZpbmUgSUVFRTgwMjExX01BWF9BTVBEVV9CVUYgMHg0MAogCiAKLS8qIFNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2VyIFNhdmUgTW9kZXMgKi8KKy8qIFNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2VyIFNhdmUgTW9kZXMgKGZvciBjYXBhYmlsaXR5KSAqLwogI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUMJMAogI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDCTEKICNkZWZpbmUgV0xBTl9IVF9DQVBfU01fUFNfSU5WQUxJRAkyCiAjZGVmaW5lIFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVECTMKIAorLyogZm9yIFNNIHBvd2VyIGNvbnRyb2wgZmllbGQgbG93ZXIgdHdvIGJpdHMgKi8KKyNkZWZpbmUgV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQJMAorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUMJMQorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDCTMKKwogLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwogI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCiAjZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKQEAgLTEwNzEsMTIgKzExMjQsMTIgQEAKIAlXTEFOX0VJRF9USU0gPSA1LAogCVdMQU5fRUlEX0lCU1NfUEFSQU1TID0gNiwKIAlXTEFOX0VJRF9DSEFMTEVOR0UgPSAxNiwKLQkvKiA4MDIuMTFkICovCisKIAlXTEFOX0VJRF9DT1VOVFJZID0gNywKIAlXTEFOX0VJRF9IUF9QQVJBTVMgPSA4LAogCVdMQU5fRUlEX0hQX1RBQkxFID0gOSwKIAlXTEFOX0VJRF9SRVFVRVNUID0gMTAsCi0JLyogODAyLjExZSAqLworCiAJV0xBTl9FSURfUUJTU19MT0FEID0gMTEsCiAJV0xBTl9FSURfRURDQV9QQVJBTV9TRVQgPSAxMiwKIAlXTEFOX0VJRF9UU1BFQyA9IDEzLApAQCAtMTA5OSw3ICsxMTUyLDcgQEAKIAlXTEFOX0VJRF9QUkVQID0gNjksCiAJV0xBTl9FSURfUEVSUiA9IDcwLAogCVdMQU5fRUlEX1JBTk4gPSA0OSwJLyogY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgKi8KLQkvKiA4MDIuMTFoICovCisKIAlXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVCA9IDMyLAogCVdMQU5fRUlEX1BXUl9DQVBBQklMSVRZID0gMzMsCiAJV0xBTl9FSURfVFBDX1JFUVVFU1QgPSAzNCwKQEAgLTExMTAsMjAgKzExNjMsNDEgQEAKIAlXTEFOX0VJRF9NRUFTVVJFX1JFUE9SVCA9IDM5LAogCVdMQU5fRUlEX1FVSUVUID0gNDAsCiAJV0xBTl9FSURfSUJTU19ERlMgPSA0MSwKLQkvKiA4MDIuMTFnICovCisKIAlXTEFOX0VJRF9FUlBfSU5GTyA9IDQyLAogCVdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTID0gNTAsCi0JLyogODAyLjExbiAqLworCiAJV0xBTl9FSURfSFRfQ0FQQUJJTElUWSA9IDQ1LAogCVdMQU5fRUlEX0hUX0lORk9STUFUSU9OID0gNjEsCi0JLyogODAyLjExaSAqLworCiAJV0xBTl9FSURfUlNOID0gNDgsCi0JV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTCA9IDU2LAotCVdMQU5fRUlEX01NSUUgPSA3NiAvKiA4MDIuMTF3ICovLAorCVdMQU5fRUlEX01NSUUgPSA3NiwKIAlXTEFOX0VJRF9XUEEgPSAyMjEsCiAJV0xBTl9FSURfR0VORVJJQyA9IDIyMSwKIAlXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMgPSAyMjEsCi0JV0xBTl9FSURfUU9TX1BBUkFNRVRFUiA9IDIyMgorCVdMQU5fRUlEX1FPU19QQVJBTUVURVIgPSAyMjIsCisKKwlXTEFOX0VJRF9BUF9DSEFOX1JFUE9SVCA9IDUxLAorCVdMQU5fRUlEX05FSUdIQk9SX1JFUE9SVCA9IDUyLAorCVdMQU5fRUlEX1JDUEkgPSA1MywKKwlXTEFOX0VJRF9CU1NfQVZHX0FDQ0VTU19ERUxBWSA9IDYzLAorCVdMQU5fRUlEX0FOVEVOTkFfSU5GTyA9IDY0LAorCVdMQU5fRUlEX1JTTkkgPSA2NSwKKwlXTEFOX0VJRF9NRUFTVVJFTUVOVF9QSUxPVF9UWF9JTkZPID0gNjYsCisJV0xBTl9FSURfQlNTX0FWQUlMQUJMRV9DQVBBQ0lUWSA9IDY3LAorCVdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVkgPSA2OCwKKwlXTEFOX0VJRF9SUk1fRU5BQkxFRF9DQVBBQklMSVRJRVMgPSA3MCwKKwlXTEFOX0VJRF9NVUxUSVBMRV9CU1NJRCA9IDcxLAorCisJV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOID0gNTQsCisJV0xBTl9FSURfRkFTVF9CU1NfVFJBTlNJVElPTiA9IDU1LAorCVdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUwgPSA1NiwKKwlXTEFOX0VJRF9SSUNfREFUQSA9IDU3LAorCVdMQU5fRUlEX1JJQ19ERVNDUklQVE9SID0gNzUsCisKKwlXTEFOX0VJRF9EU0VfUkVHSVNURVJFRF9MT0NBVElPTiA9IDU4LAorCVdMQU5fRUlEX1NVUFBPUlRFRF9SRUdVTEFUT1JZX0NMQVNTRVMgPSA1OSwKKwlXTEFOX0VJRF9FWFRfQ0hBTlNXSVRDSF9BTk4gPSA2MCwKIH07CiAKIC8qIEFjdGlvbiBjYXRlZ29yeSBjb2RlICovCkBAIC0xMTUwLDYgKzEyMjQsMTggQEAKIAlXTEFOX0FDVElPTl9TUENUX0NITF9TV0lUQ0ggPSA0LAogfTsKIAorLyogSFQgYWN0aW9uIGNvZGVzICovCitlbnVtIGllZWU4MDIxMV9odF9hY3Rpb25jb2RlIHsKKwlXTEFOX0hUX0FDVElPTl9OT1RJRllfQ0hBTldJRFRIID0gMCwKKwlXTEFOX0hUX0FDVElPTl9TTVBTID0gMSwKKwlXTEFOX0hUX0FDVElPTl9QU01QID0gMiwKKwlXTEFOX0hUX0FDVElPTl9QQ09fUEhBU0UgPSAzLAorCVdMQU5fSFRfQUNUSU9OX0NTSSA9IDQsCisJV0xBTl9IVF9BQ1RJT05fTk9OQ09NUFJFU1NFRF9CRiA9IDUsCisJV0xBTl9IVF9BQ1RJT05fQ09NUFJFU1NFRF9CRiA9IDYsCisJV0xBTl9IVF9BQ1RJT05fQVNFTF9JRFhfRkVFREJBQ0sgPSA3LAorfTsKKwogLyogU2VjdXJpdHkga2V5IGxlbmd0aCAqLwogZW51bSBpZWVlODAyMTFfa2V5X2xlbiB7CiAJV0xBTl9LRVlfTEVOX1dFUDQwID0gNSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKaW5kZXggNjY3NDc5MS4uYzliZjkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKQEAgLTc4LDYgKzc4LDExIEBACiAjZGVmaW5lIElGTEFfTElOS0lORk8gSUZMQV9MSU5LSU5GTwogCUlGTEFfTkVUX05TX1BJRCwKIAlJRkxBX0lGQUxJQVMsCisJSUZMQV9OVU1fVkYsCQkvKiBOdW1iZXIgb2YgVkZzIGlmIGRldmljZSBpcyBTUi1JT1YgUEYgKi8KKwlJRkxBX1ZGX01BQywJCS8qIEhhcmR3YXJlIHF1ZXVlIHNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KKwlJRkxBX1ZGX1ZMQU4sCisJSUZMQV9WRl9UWF9SQVRFLAkvKiBUWCBCYW5kd2lkdGggQWxsb2NhdGlvbiAqLworCUlGTEFfVkZJTkZPLAogCV9fSUZMQV9NQVgKIH07CiAKQEAgLTE5Niw0ICsyMDEsMjkgQEAKIAlNQUNWTEFOX01PREVfQlJJREdFICA9IDQsIC8qIHRhbGsgdG8gYnJpZGdlIHBvcnRzIGRpcmVjdGx5ICovCiB9OwogCisvKiBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbiBtYW5hZ21lbnQgc2VjdGlvbiAqLworCitzdHJ1Y3QgaWZsYV92Zl9tYWMgeworCV9fdTMyIHZmOworCV9fdTggbWFjWzMyXTsgLyogTUFYX0FERFJfTEVOICovCit9OworCitzdHJ1Y3QgaWZsYV92Zl92bGFuIHsKKwlfX3UzMiB2ZjsKKwlfX3UzMiB2bGFuOyAvKiAwIC0gNDA5NSwgMCBkaXNhYmxlcyBWTEFOIGZpbHRlciAqLworCV9fdTMyIHFvczsKK307CisKK3N0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgeworCV9fdTMyIHZmOworCV9fdTMyIHJhdGU7IC8qIE1heCBUWCBiYW5kd2lkdGggaW4gTWJwcywgMCBkaXNhYmxlcyB0aHJvdHRsaW5nICovCit9OworCitzdHJ1Y3QgaWZsYV92Zl9pbmZvIHsKKwlfX3UzMiB2ZjsKKwlfX3U4IG1hY1szMl07CisJX191MzIgdmxhbjsKKwlfX3UzMiBxb3M7CisJX191MzIgdHhfcmF0ZTsKK307CiAjZW5kaWYgLyogX0xJTlVYX0lGX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9tYWN2bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAppbmRleCA1ZjIwMGJhLi5iNzhhNzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaApAQCAtMSw2ICsxLDkwIEBACiAjaWZuZGVmIF9MSU5VWF9JRl9NQUNWTEFOX0gKICNkZWZpbmUgX0xJTlVYX0lGX01BQ1ZMQU5fSAogCisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01BQ1ZUQVApIHx8IGRlZmluZWQoQ09ORklHX01BQ1ZUQVBfTU9EVUxFKQorc3RydWN0IHNvY2tldCAqbWFjdnRhcF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOworI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorc3RydWN0IGZpbGU7CitzdHJ1Y3Qgc29ja2V0Oworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2V0ICptYWN2dGFwX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmYpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX01BQ1ZUQVAgKi8KKworc3RydWN0IG1hY3ZsYW5fcG9ydDsKK3N0cnVjdCBtYWN2dGFwX3F1ZXVlOworCisvKioKKyAqCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIC0gTUFDVkxBTiBwZXJjcHUgcnggc3RhdHMKKyAqCUByeF9wYWNrZXRzOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cworICoJQHJ4X2J5dGVzOiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMKKyAqCUBtdWx0aWNhc3Q6IG51bWJlciBvZiByZWNlaXZlZCBtdWx0aWNhc3QgcGFja2V0cworICoJQHJ4X2Vycm9yczogbnVtYmVyIG9mIGVycm9ycworICovCitzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CisJdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7Cit9OworCitzdHJ1Y3QgbWFjdmxhbl9kZXYgeworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OworCXN0cnVjdCBtYWN2bGFuX3BvcnQJKnBvcnQ7CisJc3RydWN0IG5ldF9kZXZpY2UJKmxvd2VyZGV2OworCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIF9fcGVyY3B1ICpyeF9zdGF0czsKKwllbnVtIG1hY3ZsYW5fbW9kZQltb2RlOworCWludCAoKnJlY2VpdmUpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKmZvcndhcmQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlCSp0YXA7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywKKwkJCQkgICAgYm9vbCBtdWx0aWNhc3QpCit7CisJc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgKnJ4X3N0YXRzOworCisJcnhfc3RhdHMgPSBwZXJfY3B1X3B0cih2bGFuLT5yeF9zdGF0cywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAobGlrZWx5KHN1Y2Nlc3MpKSB7CisJCXJ4X3N0YXRzLT5yeF9wYWNrZXRzKys7OworCQlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOworCQlpZiAobXVsdGljYXN0KQorCQkJcnhfc3RhdHMtPm11bHRpY2FzdCsrOworCX0gZWxzZSB7CisJCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKKwl9Cit9CisKK2V4dGVybiBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAorCQkJCSAgaW50ICgqcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiksCisJCQkJICBpbnQgKCpmb3J3YXJkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpKTsKKworZXh0ZXJuIHZvaWQgbWFjdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkgICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywKKwkJCSAgICAgYm9vbCBtdWx0aWNhc3QpOworCitleHRlcm4gdm9pZCBtYWN2bGFuX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKK2V4dGVybiBpbnQgbWFjdmxhbl9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpOworCitleHRlcm4gbmV0ZGV2X3R4X3QgbWFjdmxhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKwogZXh0ZXJuIHN0cnVjdCBza19idWZmICooKm1hY3ZsYW5faGFuZGxlX2ZyYW1lX2hvb2spKHN0cnVjdCBza19idWZmICopOwogCiAjZW5kaWYgLyogX0xJTlVYX0lGX01BQ1ZMQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKaW5kZXggNDAyMWQ0N2MuLmFhNTdhNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtNDYsNiArNDYsNyBAQAogI2RlZmluZSBQQUNLRVRfUkVTRVJWRQkJCTEyCiAjZGVmaW5lIFBBQ0tFVF9UWF9SSU5HCQkJMTMKICNkZWZpbmUgUEFDS0VUX0xPU1MJCQkxNAorI2RlZmluZSBQQUNLRVRfVk5FVF9IRFIJCQkxNQogCiBzdHJ1Y3QgdHBhY2tldF9zdGF0cyB7CiAJdW5zaWduZWQgaW50CXRwX3BhY2tldHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCAzZjVmZDUyLi4xMzUwYTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KIAogLyogUmVhZCBxdWV1ZSBzaXplICovCiAjZGVmaW5lIFRVTl9SRUFEUV9TSVpFCTUwMApAQCAtNDgsNiArNDksOCBAQAogI2RlZmluZSBUVU5HRVRJRkYgICAgICBfSU9SKCdUJywgMjEwLCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTkdFVFNOREJVRiAgIF9JT1IoJ1QnLCAyMTEsIGludCkKICNkZWZpbmUgVFVOU0VUU05EQlVGICAgX0lPVygnVCcsIDIxMiwgaW50KQorI2RlZmluZSBUVU5BVFRBQ0hGSUxURVIgX0lPVygnVCcsIDIxMywgc3RydWN0IHNvY2tfZnByb2cpCisjZGVmaW5lIFRVTkRFVEFDSEZJTFRFUiBfSU9XKCdUJywgMjE0LCBzdHJ1Y3Qgc29ja19mcHJvZykKIAogLyogVFVOU0VUSUZGIGlmciBmbGFncyAqLwogI2RlZmluZSBJRkZfVFVOCQkweDAwMDEKQEAgLTg2LDQgKzg5LDE4IEBACiAJX191OCAgIGFkZHJbMF1bRVRIX0FMRU5dOwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpCitzdHJ1Y3Qgc29ja2V0ICp0dW5fZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqKTsKKyNlbHNlCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KK3N0cnVjdCBmaWxlOworc3RydWN0IHNvY2tldDsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmYpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1RVTiAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0lGX1RVTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IDcyNGMyN2UuLjkzZmMyNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC0xNTMsNiArMTUzLDcgQEAKIHN0cnVjdCBpcF9zZl9zb2NrbGlzdCB7CiAJdW5zaWduZWQgaW50CQlzbF9tYXg7CiAJdW5zaWduZWQgaW50CQlzbF9jb3VudDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIAlfX2JlMzIJCQlzbF9hZGRyWzBdOwogfTsKIApAQCAtMTcwLDYgKzE3MSw3IEBACiAJc3RydWN0IGlwX21yZXFuCQltdWx0aTsKIAl1bnNpZ25lZCBpbnQJCXNmbW9kZTsJCS8qIE1DQVNUX3tJTkNMVURFLEVYQ0xVREV9ICovCiAJc3RydWN0IGlwX3NmX3NvY2tsaXN0CSpzZmxpc3Q7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiB9OwogCiBzdHJ1Y3QgaXBfc2ZfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luLmggYi9pbmNsdWRlL2xpbnV4L2luLmgKaW5kZXggYjYxNTY0OS4uNTgzYzc2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaW4uaApAQCAtODQsNiArODQsOCBAQAogI2RlZmluZSBJUF9PUklHRFNUQUREUiAgICAgICAyMAogI2RlZmluZSBJUF9SRUNWT1JJR0RTVEFERFIgICBJUF9PUklHRFNUQUREUgogCisjZGVmaW5lIElQX01JTlRUTCAgICAgICAyMQorCiAvKiBJUF9NVFVfRElTQ09WRVIgdmFsdWVzICovCiAjZGVmaW5lIElQX1BNVFVESVNDX0RPTlQJCTAJLyogTmV2ZXIgc2VuZCBERiBmcmFtZXMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfV0FOVAkJMQkvKiBVc2UgcGVyIHJvdXRlIGhpbnRzCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IGIyMzA0OTIuLjJiZTFhMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC0xMCwxMCArMTAsNDAgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCitlbnVtCit7CisJSVBWNF9ERVZDT05GX0ZPUldBUkRJTkc9MSwKKwlJUFY0X0RFVkNPTkZfTUNfRk9SV0FSRElORywKKwlJUFY0X0RFVkNPTkZfUFJPWFlfQVJQLAorCUlQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTLAorCUlQVjRfREVWQ09ORl9TRUNVUkVfUkVESVJFQ1RTLAorCUlQVjRfREVWQ09ORl9TRU5EX1JFRElSRUNUUywKKwlJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBLAorCUlQVjRfREVWQ09ORl9SUF9GSUxURVIsCisJSVBWNF9ERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUsCisJSVBWNF9ERVZDT05GX0JPT1RQX1JFTEFZLAorCUlQVjRfREVWQ09ORl9MT0dfTUFSVElBTlMsCisJSVBWNF9ERVZDT05GX1RBRywKKwlJUFY0X0RFVkNPTkZfQVJQRklMVEVSLAorCUlQVjRfREVWQ09ORl9NRURJVU1fSUQsCisJSVBWNF9ERVZDT05GX05PWEZSTSwKKwlJUFY0X0RFVkNPTkZfTk9QT0xJQ1ksCisJSVBWNF9ERVZDT05GX0ZPUkNFX0lHTVBfVkVSU0lPTiwKKwlJUFY0X0RFVkNPTkZfQVJQX0FOTk9VTkNFLAorCUlQVjRfREVWQ09ORl9BUlBfSUdOT1JFLAorCUlQVjRfREVWQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTLAorCUlQVjRfREVWQ09ORl9BUlBfQUNDRVBULAorCUlQVjRfREVWQ09ORl9BUlBfTk9USUZZLAorCUlQVjRfREVWQ09ORl9BQ0NFUFRfTE9DQUwsCisJSVBWNF9ERVZDT05GX1NSQ19WTUFSSywKKwlJUFY0X0RFVkNPTkZfUFJPWFlfQVJQX1BWTEFOLAorCV9fSVBWNF9ERVZDT05GX01BWAorfTsKKwogc3RydWN0IGlwdjRfZGV2Y29uZiB7CiAJdm9pZAkqc3lzY3RsOwotCWludAlkYXRhW19fTkVUX0lQVjRfQ09ORl9NQVggLSAxXTsKLQlERUNMQVJFX0JJVE1BUChzdGF0ZSwgX19ORVRfSVBWNF9DT05GX01BWCAtIDEpOworCWludAlkYXRhW19fSVBWNF9ERVZDT05GX01BWCAtIDFdOworCURFQ0xBUkVfQklUTUFQKHN0YXRlLCBfX0lQVjRfREVWQ09ORl9NQVggLSAxKTsKIH07CiAKIHN0cnVjdCBpbl9kZXZpY2UgewpAQCAtNDAsNyArNzAsNyBAQAogCXN0cnVjdCByY3VfaGVhZAkJcmN1X2hlYWQ7CiB9OwogCi0jZGVmaW5lIElQVjRfREVWQ09ORihjbmYsIGF0dHIpICgoY25mKS5kYXRhW05FVF9JUFY0X0NPTkZfICMjIGF0dHIgLSAxXSkKKyNkZWZpbmUgSVBWNF9ERVZDT05GKGNuZiwgYXR0cikgKChjbmYpLmRhdGFbSVBWNF9ERVZDT05GXyAjIyBhdHRyIC0gMV0pCiAjZGVmaW5lIElQVjRfREVWQ09ORl9BTEwobmV0LCBhdHRyKSBcCiAJSVBWNF9ERVZDT05GKCgqKG5ldCktPmlwdjQuZGV2Y29uZl9hbGwpLCBhdHRyKQogCkBAIC02MCwxMyArOTAsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlwdjRfZGV2Y29uZl9zZXRhbGwoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQogewotCWJpdG1hcF9maWxsKGluX2Rldi0+Y25mLnN0YXRlLCBfX05FVF9JUFY0X0NPTkZfTUFYIC0gMSk7CisJYml0bWFwX2ZpbGwoaW5fZGV2LT5jbmYuc3RhdGUsIF9fSVBWNF9ERVZDT05GX01BWCAtIDEpOwogfQogCiAjZGVmaW5lIElOX0RFVl9DT05GX0dFVChpbl9kZXYsIGF0dHIpIFwKLQlpcHY0X2RldmNvbmZfZ2V0KChpbl9kZXYpLCBORVRfSVBWNF9DT05GXyAjIyBhdHRyKQorCWlwdjRfZGV2Y29uZl9nZXQoKGluX2RldiksIElQVjRfREVWQ09ORl8gIyMgYXR0cikKICNkZWZpbmUgSU5fREVWX0NPTkZfU0VUKGluX2RldiwgYXR0ciwgdmFsKSBcCi0JaXB2NF9kZXZjb25mX3NldCgoaW5fZGV2KSwgTkVUX0lQVjRfQ09ORl8gIyMgYXR0ciwgKHZhbCkpCisJaXB2NF9kZXZjb25mX3NldCgoaW5fZGV2KSwgSVBWNF9ERVZDT05GXyAjIyBhdHRyLCAodmFsKSkKIAogI2RlZmluZSBJTl9ERVZfQU5EQ09ORihpbl9kZXYsIGF0dHIpIFwKIAkoSVBWNF9ERVZDT05GX0FMTChkZXZfbmV0KGluX2Rldi0+ZGV2KSwgYXR0cikgJiYgXApAQCAtODksNiArMTE5LDcgQEAKIAogI2RlZmluZSBJTl9ERVZfTE9HX01BUlRJQU5TKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgTE9HX01BUlRJQU5TKQogI2RlZmluZSBJTl9ERVZfUFJPWFlfQVJQKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgUFJPWFlfQVJQKQorI2RlZmluZSBJTl9ERVZfUFJPWFlfQVJQX1BWTEFOKGluX2RldikJSU5fREVWX0NPTkZfR0VUKGluX2RldiwgUFJPWFlfQVJQX1BWTEFOKQogI2RlZmluZSBJTl9ERVZfU0hBUkVEX01FRElBKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgU0hBUkVEX01FRElBKQogI2RlZmluZSBJTl9ERVZfVFhfUkVESVJFQ1RTKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgU0VORF9SRURJUkVDVFMpCiAjZGVmaW5lIElOX0RFVl9TRUNfUkVESVJFQ1RTKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDY2MzIwOGEuLmRjMjRlZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTM3OCw3ICszNzgsNyBAQAogI2RlZmluZSBLRVlfV0lNQVgJCTI0NgogI2RlZmluZSBLRVlfUkZLSUxMCQkyNDcJLyogS2V5IHRoYXQgY29udHJvbHMgYWxsIHJhZGlvcyAqLwogCi0vKiBSYW5nZSAyNDggLSAyNTUgaXMgcmVzZXJ2ZWQgZm9yIHNwZWNpYWwgbmVlZHMgb2YgQVQga2V5Ym9hcmQgZHJpdmVyICovCisvKiBDb2RlIDI1NSBpcyByZXNlcnZlZCBmb3Igc3BlY2lhbCBuZWVkcyBvZiBBVCBrZXlib2FyZCBkcml2ZXIgKi8KIAogI2RlZmluZSBCVE5fTUlTQwkJMHgxMDAKICNkZWZpbmUgQlROXzAJCQkweDEwMApAQCAtNTk3LDYgKzU5Nyw0OSBAQAogI2RlZmluZSBLRVlfTlVNRVJJQ19QT1VORAkweDIwYgogCiAjZGVmaW5lIEtFWV9DQU1FUkFfRk9DVVMJMHgyMTAKKyNkZWZpbmUgS0VZX1dQU19CVVRUT04JCTB4MjExCS8qIFdpRmkgUHJvdGVjdGVkIFNldHVwIGtleSAqLworCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZCQkweDJjMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEJCTB4MmMwCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMgkJMHgyYzEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzCQkweDJjMgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQJCTB4MmMzCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNQkJMHgyYzQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk2CQkweDJjNQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTcJCTB4MmM2CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOAkJMHgyYzcKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk5CQkweDJjOAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEwCQkweDJjOQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTExCQkweDJjYQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEyCQkweDJjYgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEzCQkweDJjYworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE0CQkweDJjZAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE1CQkweDJjZQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE2CQkweDJjZgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE3CQkweDJkMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE4CQkweDJkMQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE5CQkweDJkMgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIwCQkweDJkMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIxCQkweDJkNAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIyCQkweDJkNQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIzCQkweDJkNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI0CQkweDJkNworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI1CQkweDJkOAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI2CQkweDJkOQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI3CQkweDJkYQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI4CQkweDJkYgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI5CQkweDJkYworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMwCQkweDJkZAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMxCQkweDJkZQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMyCQkweDJkZgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMzCQkweDJlMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM0CQkweDJlMQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM1CQkweDJlMgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM2CQkweDJlMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM3CQkweDJlNAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM4CQkweDJlNQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM5CQkweDJlNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQwCQkweDJlNwogCiAvKiBXZSBhdm9pZCBsb3cgY29tbW9uIGtleXMgaW4gbW9kdWxlIGFsaWFzZXMgc28gdGhleSBkb24ndCBnZXQgaHVnZS4gKi8KICNkZWZpbmUgS0VZX01JTl9JTlRFUkVTVElORwlLRVlfTVVURQpAQCAtMTIwMCw2ICsxMjQzLDEwIEBACiAgKiBAZXZlbnQ6IGV2ZW50IGhhbmRsZXIuIFRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBieSBpbnB1dCBjb3JlIHdpdGgKICAqCWludGVycnVwdHMgZGlzYWJsZWQgYW5kIGRldi0+ZXZlbnRfbG9jayBzcGlubG9jayBoZWxkIGFuZCBzbwogICoJaXQgbWF5IG5vdCBzbGVlcAorICogQGZpbHRlcjogc2ltaWxhciB0byBAZXZlbnQ7IHNlcGFyYXRlcyBub3JtYWwgZXZlbnQgaGFuZGxlcnMgZnJvbQorICoJImZpbHRlcnMiLgorICogQG1hdGNoOiBjYWxsZWQgYWZ0ZXIgY29tcGFyaW5nIGRldmljZSdzIGlkIHdpdGggaGFuZGxlcidzIGlkX3RhYmxlCisgKgl0byBwZXJmb3JtIGZpbmUtZ3JhaW5lZCBtYXRjaGluZyBiZXR3ZWVuIGRldmljZSBhbmQgaGFuZGxlcgogICogQGNvbm5lY3Q6IGNhbGxlZCB3aGVuIGF0dGFjaGluZyBhIGhhbmRsZXIgdG8gYW4gaW5wdXQgZGV2aWNlCiAgKiBAZGlzY29ubmVjdDogZGlzY29ubmVjdHMgYSBoYW5kbGVyIGZyb20gaW5wdXQgZGV2aWNlCiAgKiBAc3RhcnQ6IHN0YXJ0cyBoYW5kbGVyIGZvciBnaXZlbiBoYW5kbGUuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5CkBAIC0xMjExLDggKzEyNTgsNiBAQAogICogQG5hbWU6IG5hbWUgb2YgdGhlIGhhbmRsZXIsIHRvIGJlIHNob3duIGluIC9wcm9jL2J1cy9pbnB1dC9oYW5kbGVycwogICogQGlkX3RhYmxlOiBwb2ludGVyIHRvIGEgdGFibGUgb2YgaW5wdXRfZGV2aWNlX2lkcyB0aGlzIGRyaXZlciBjYW4KICAqCWhhbmRsZQotICogQGJsYWNrbGlzdDogcG9pbnRlciB0byBhIHRhYmxlIG9mIGlucHV0X2RldmljZV9pZHMgdGhpcyBkcml2ZXIgc2hvdWxkCi0gKglpZ25vcmUgZXZlbiBpZiB0aGV5IG1hdGNoIEBpZF90YWJsZQogICogQGhfbGlzdDogbGlzdCBvZiBpbnB1dCBoYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGFuZGxlcgogICogQG5vZGU6IGZvciBwbGFjaW5nIHRoZSBkcml2ZXIgb250byBpbnB1dF9oYW5kbGVyX2xpc3QKICAqCkBAIC0xMjIxLDYgKzEyNjYsMTEgQEAKICAqIHNhbWUgdGltZS4gQWxsIG9mIHRoZW0gd2lsbCBnZXQgdGhlaXIgY29weSBvZiBpbnB1dCBldmVudCBnZW5lcmF0ZWQgYnkKICAqIHRoZSBkZXZpY2UuCiAgKgorICogVGhlIHZlcnkgc2FtZSBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBpbXBsZW1lbnQgaW5wdXQgZmlsdGVycy4gSW5wdXQgY29yZQorICogYWxsb3dzIGZpbHRlcnMgdG8gcnVuIGZpcnN0IGFuZCB3aWxsIG5vdCBwYXNzIGV2ZW50IHRvIHJlZ3VsYXIgaGFuZGxlcnMKKyAqIGlmIGFueSBvZiB0aGUgZmlsdGVycyBpbmRpY2F0ZSB0aGF0IHRoZSBldmVudCBzaG91bGQgYmUgZmlsdGVyZWQgKGJ5CisgKiByZXR1cm5pbmcgJXRydWUgZnJvbSB0aGVpciBmaWx0ZXIoKSBtZXRob2QpLgorICoKICAqIE5vdGUgdGhhdCBpbnB1dCBjb3JlIHNlcmlhbGl6ZXMgY2FsbHMgdG8gY29ubmVjdCgpIGFuZCBkaXNjb25uZWN0KCkKICAqIG1ldGhvZHMuCiAgKi8KQEAgLTEyMjksNiArMTI3OSw4IEBACiAJdm9pZCAqcHJpdmF0ZTsKIAogCXZvaWQgKCpldmVudCkoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CisJYm9vbCAoKmZpbHRlcikoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CisJYm9vbCAoKm1hdGNoKShzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGlucHV0X2RldiAqZGV2KTsKIAlpbnQgKCpjb25uZWN0KShzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGlucHV0X2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppZCk7CiAJdm9pZCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSk7CiAJdm9pZCAoKnN0YXJ0KShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpOwpAQCAtMTIzOCw3ICsxMjkwLDYgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCiAJY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWRfdGFibGU7Ci0JY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqYmxhY2tsaXN0OwogCiAJc3RydWN0IGxpc3RfaGVhZAloX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oCmluZGV4IGMyMTFiNWNmLi42NDlkYzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L3NoX2tleXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oCkBAIC0xLDE0ICsxLDE1IEBACiAjaWZuZGVmIF9fU0hfS0VZU0NfSF9fCiAjZGVmaW5lIF9fU0hfS0VZU0NfSF9fCiAKLSNkZWZpbmUgU0hfS0VZU0NfTUFYS0VZUyAzMAorI2RlZmluZSBTSF9LRVlTQ19NQVhLRVlTIDQ5CiAKIHN0cnVjdCBzaF9rZXlzY19pbmZvIHsKLQllbnVtIHsgU0hfS0VZU0NfTU9ERV8xLCBTSF9LRVlTQ19NT0RFXzIsIFNIX0tFWVNDX01PREVfMyB9IG1vZGU7CisJZW51bSB7IFNIX0tFWVNDX01PREVfMSwgU0hfS0VZU0NfTU9ERV8yLCBTSF9LRVlTQ19NT0RFXzMsCisJICAgICAgIFNIX0tFWVNDX01PREVfNCwgU0hfS0VZU0NfTU9ERV81LCBTSF9LRVlTQ19NT0RFXzYgfSBtb2RlOwogCWludCBzY2FuX3RpbWluZzsgLyogMCAtPiA3LCBzZWUgS1lDUjEsIFNDTlsyOjBdICovCiAJaW50IGRlbGF5OwogCWludCBreWNyMl9kZWxheTsKLQlpbnQga2V5Y29kZXNbU0hfS0VZU0NfTUFYS0VZU107CisJaW50IGtleWNvZGVzW1NIX0tFWVNDX01BWEtFWVNdOyAvKiBLRVlJTiAqIEtFWU9VVCAqLwogfTsKIAogI2VuZGlmIC8qIF9fU0hfS0VZU0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaAppbmRleCA3OGVmMDIzLi4xMTk1YTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmgKQEAgLTQ5LDggKzQ5LDggQEAKIAkvKgogCSAqIEZvciByZXF1ZXN0IGJhdGNoaW5nCiAJICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZDsgLyogVGltZSBsYXN0IHdva2VuIGFmdGVyIHdhaXQgZm9yIHJlcXVlc3QgKi8KIAlpbnQgbnJfYmF0Y2hfcmVxdWVzdHM7ICAgICAvKiBOdW1iZXIgb2YgcmVxdWVzdHMgbGVmdCBpbiB0aGUgYmF0Y2ggKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkOyAvKiBUaW1lIGxhc3Qgd29rZW4gYWZ0ZXIgd2FpdCBmb3IgcmVxdWVzdCAqLwogCiAJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCByYWRpeF9yb290OwogCXN0cnVjdCBobGlzdF9oZWFkIGNpY19saXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNzEyOTUwNC4uZGRhOTg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogZXh0ZXJuIGludCByZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIGludCByZWxlYXNlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9yZWdpb25fd2l0aF9zcGxpdChzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xMjAsOCArMTIxLDEwIEBACiBleHRlcm4gaW50IGFsbG9jYXRlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJICAgICByZXNvdXJjZV9zaXplX3QgbWF4LCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCi0JCQkgICAgIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCSAgICByZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgICAgIHJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgICAgICByZXNvdXJjZV9zaXplX3QpLAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CiBpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA0NTE0ODFjLi43MDdhYjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAqIEBzdGFydHVwOgkJc3RhcnQgdXAgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5lbmFibGUgaWYgTlVMTCkKICAqIEBzaHV0ZG93bjoJCXNodXQgZG93biB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byAtPmRpc2FibGUgaWYgTlVMTCkKICAqIEBlbmFibGU6CQllbmFibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+dW5tYXNrIGlmIE5VTEwpCi0gKiBAZGlzYWJsZToJCWRpc2FibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+bWFzayBpZiBOVUxMKQorICogQGRpc2FibGU6CQlkaXNhYmxlIHRoZSBpbnRlcnJ1cHQKICAqIEBhY2s6CQlzdGFydCBvZiBhIG5ldyBpbnRlcnJ1cHQKICAqIEBtYXNrOgkJbWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCiAgKiBAbWFza19hY2s6CQlhY2sgYW5kIG1hc2sgYW4gaW50ZXJydXB0IHNvdXJjZQpAQCAtNDAwLDcgKzQwMCw5IEBACiAKIC8qIER5bmFtaWMgaXJxIGhlbHBlciBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIGR5bmFtaWNfaXJxX2luaXQodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIGR5bmFtaWNfaXJxX2luaXRfa2VlcF9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpOwordm9pZCBkeW5hbWljX2lycV9jbGVhbnVwX2tlZXBfY2hpcF9kYXRhKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBTZXQvZ2V0IGNoaXAvZGF0YSBmb3IgYW4gSVJROiAqLwogZXh0ZXJuIGludCBzZXRfaXJxX2NoaXAodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9jaGlwICpjaGlwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpbGxpLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWxsaS5oCmluZGV4IDdhY2I4N2EuLjExYjU3YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpbGxpLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuL2NhcGlsbGkuaApAQCAtNTAsOCArNTAsNyBAQAogCXUxNiAgKCpzZW5kX21lc3NhZ2UpKHN0cnVjdCBjYXBpX2N0ciAqLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAkKIAljaGFyICooKnByb2NpbmZvKShzdHJ1Y3QgY2FwaV9jdHIgKik7Ci0JaW50ICgqY3RyX3JlYWRfcHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgIGludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY2FyZCk7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqcHJvY19mb3BzOwogCiAJLyogZmlsbGVkIGluIGJlZm9yZSBjYWxsaW5nIHJlYWR5IGNhbGxiYWNrICovCiAJdTggbWFudVtDQVBJX01BTlVGQUNUVVJFUl9MRU5dOwkJLyogQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSICovCkBAIC02Nyw5ICs2NiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgbnNlbnRkYXRhcGt0OwogCiAJaW50IGNucjsJCQkJLyogY29udHJvbGxlciBudW1iZXIgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBjYXJkc3RhdGU7CS8qIGNvbnRyb2xsZXIgc3RhdGUgKi8KLQl2b2xhdGlsZSBpbnQgYmxvY2tlZDsJCQkvKiBvdXRwdXQgYmxvY2tlZCAqLworCXVuc2lnbmVkIHNob3J0IHN0YXRlOwkJCS8qIGNvbnRyb2xsZXIgc3RhdGUgKi8KKwlpbnQgYmxvY2tlZDsJCQkJLyogb3V0cHV0IGJsb2NrZWQgKi8KIAlpbnQgdHJhY2VmbGFnOwkJCQkvKiBjYXBpIHRyYWNlICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc3RhdGVfd2FpdF9xdWV1ZTsKIAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2VudDsKICAgICAgICAgY2hhciBwcm9jZm5bMTI4XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaCBiL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaAppbmRleCA4YmRiMTZiLi41MDZhZDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCkBAIC0xNjEsNyArMTYxLDQgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnQtPmJ1Zi53b3JrLCAwKTsKIH0KIAotLyogbWFjX2hpZC5jICovCi1leHRlcm4gaW50IG1hY19oaWRfbW91c2VfZW11bGF0ZV9idXR0b25zKGludCwgdW5zaWduZWQgaW50LCBpbnQpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDMyOGJjYTYuLjdmMDcwNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNDQsNiArNDQsMTYgQEAKIAogI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSArIF9fbXVzdF9iZV9hcnJheShhcnIpKQogCisvKgorICogVGhpcyBsb29rcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBzaG91bGQgYmUuIEJ1dCB3ZSBuZWVkIHRvCisgKiBnZXQgdGhlIHR5cGUgZm9yIHRoZSB+IHJpZ2h0IGluIHJvdW5kX2Rvd24gKGl0IG5lZWRzIHRvIGJlCisgKiBhcyB3aWRlIGFzIHRoZSByZXN1bHQhKSwgYW5kIHdlIHdhbnQgdG8gZXZhbHVhdGUgdGhlIG1hY3JvCisgKiBhcmd1bWVudHMganVzdCBvbmNlIGVhY2guCisgKi8KKyNkZWZpbmUgX19yb3VuZF9tYXNrKHgsIHkpICgoX190eXBlb2ZfXyh4KSkoKHkpLTEpKQorI2RlZmluZSByb3VuZF91cCh4LCB5KSAoKCgoeCktMSkgfCBfX3JvdW5kX21hc2soeCwgeSkpKzEpCisjZGVmaW5lIHJvdW5kX2Rvd24oeCwgeSkgKCh4KSAmIH5fX3JvdW5kX21hc2soeCwgeSkpCisKICNkZWZpbmUgRklFTERfU0laRU9GKHQsIGYpIChzaXplb2YoKCh0KikwKS0+ZikpCiAjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCiAjZGVmaW5lIHJvdW5kdXAoeCwgeSkgKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpCkBAIC0xMjQsNyArMTM0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQCi0gIHZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKKyAgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcAogICoKQEAgLTEzOCw3ICsxNDgsOCBAQAogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBcCiAJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbHNlCi0gIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQorICBzdGF0aWMgaW5saW5lIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBkbyB7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaCBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCmluZGV4IGE1M2U5MzIuLjljMjY4MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCkBAIC00OCw5ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0jZGVmaW5lCUtDSV9DT05UUlVQCTAJLyogYXJnOiBzdHJ1Y3QgY2FwaV9wcm9maWxlICovCi0jZGVmaW5lCUtDSV9DT05UUkRPV04JMQkvKiBhcmc6IE5VTEwgKi8KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiBzdHJ1Y3QgY2FwaTIwX2FwcGwgewogCXUxNiBhcHBsaWQ7CkBAIC02NywxMSArNjUsNiBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgcmVjdl9xdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjdl93b3JrOwogCWludCByZWxlYXNlX2luX3Byb2dyZXNzOwotCi0JLyogdWdseSBoYWNrIHRvIGFsbG93IGZvciBub3RpZmljYXRpb24gb2YgYWRkZWQvcmVtb3ZlZAotCSAqIGNvbnRyb2xsZXJzLiBUaGUgUmlnaHQgV2F5ICh0bSkgaXMga25vd24uIFhYWAotCSAqLwotCXZvaWQgKCpjYWxsYmFjaykgKHVuc2lnbmVkIGludCBjbWQsIF9fdTMyIGNvbnRyLCB2b2lkICpkYXRhKTsKIH07CiAKIHUxNiBjYXBpMjBfaXNpbnN0YWxsZWQodm9pZCk7CkBAIC04NCwxMSArNzcsMTEgQEAKIHUxNiBjYXBpMjBfZ2V0X3Byb2ZpbGUodTMyIGNvbnRyLCBzdHJ1Y3QgY2FwaV9wcm9maWxlICpwcm9mcCk7CiBpbnQgY2FwaTIwX21hbnVmYWN0dXJlcih1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqZGF0YSk7CiAKLS8qIHRlbXBvcmFyeSBoYWNrIFhYWCAqLwotdm9pZCBjYXBpMjBfc2V0X2NhbGxiYWNrKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsIAotCQkJIHZvaWQgKCpjYWxsYmFjaykgKHVuc2lnbmVkIGludCBjbWQsIF9fdTMyIGNvbnRyLCB2b2lkICpkYXRhKSk7CisjZGVmaW5lIENBUElDVFJfVVAJCQkwCisjZGVmaW5lIENBUElDVFJfRE9XTgkJCTEKIAotCitpbnQgcmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2ludCB1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAKICNkZWZpbmUgQ0FQSV9OT0VSUk9SICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKaW5kZXggYzM1NmI2OS4uMDNlOGU4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlYy5oCisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaApAQCAtMTk5LDcgKzE5OSw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgY3Jhc2hrX3JlczsKIHR5cGVkZWYgdTMyIG5vdGVfYnVmX3RbS0VYRUNfTk9URV9CWVRFUy80XTsKLWV4dGVybiBub3RlX2J1Zl90ICpjcmFzaF9ub3RlczsKK2V4dGVybiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlczsKIGV4dGVybiB1MzIgdm1jb3JlaW5mb19ub3RlW1ZNQ09SRUlORk9fTk9URV9TSVpFLzRdOwogZXh0ZXJuIHNpemVfdCB2bWNvcmVpbmZvX3NpemU7CiBleHRlcm4gc2l6ZV90IHZtY29yZWluZm9fbWF4X3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA3MzExMjI1Li5mOGVhNzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTg1Nyw2ICs4NTcsNyBAQAogCXVuc2lnbmVkIGludCAoKnNmZl9kYXRhX3hmZXIpKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydyk7CiAJdTggICAoKnNmZl9pcnFfb24pKHN0cnVjdCBhdGFfcG9ydCAqKTsKKwlib29sICgqc2ZmX2lycV9jaGVjaykoc3RydWN0IGF0YV9wb3J0ICopOwogCXZvaWQgKCpzZmZfaXJxX2NsZWFyKShzdHJ1Y3QgYXRhX3BvcnQgKik7CiAKIAl2b2lkICgqYm1kbWFfc2V0dXApKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtMTY0Miw4ICsxNjQzLDggQEAKIAkJCQkgICAgIGlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIsCiAJCQkJICAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogZXh0ZXJuIGludCBhdGFfcGNpX3NmZl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAotCQkJCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2KTsKKwkJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSwKKwkJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LCB2b2lkICpob3N0X3ByaXYsIGludCBoZmxhZ3MpOwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDk2OWY2ZTkuLjVkOWM2NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0yMDYsNiArMjA2LDIwIEBACiB9CiAKIC8qKgorICogbGlzdF9yb3RhdGVfbGVmdCAtIHJvdGF0ZSB0aGUgbGlzdCB0byB0aGUgbGVmdAorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JvdGF0ZV9sZWZ0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3Q7CisKKwlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJZmlyc3QgPSBoZWFkLT5uZXh0OworCQlsaXN0X21vdmVfdGFpbChmaXJzdCwgaGVhZCk7CisJfQorfQorCisvKioKICAqIGxpc3RfaXNfc2luZ3VsYXIgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBoYXMganVzdCBvbmUgZW50cnkuCiAgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbGMuaCBiL2luY2x1ZGUvbGludXgvbGxjLmgKaW5kZXggNzczMzU4NTYuLmFkNzA3NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGxjLmgKKysrIGIvaW5jbHVkZS9saW51eC9sbGMuaApAQCAtMzYsNiArMzYsNyBAQAogCUxMQ19PUFRfQlVTWV9UTVJfRVhQLAkvKiBidXN5IHN0YXRlIGV4cGlyZSB0aW1lIChzZWNzKS4gKi8KIAlMTENfT1BUX1RYX1dJTiwJCS8qIHR4IHdpbmRvdyBzaXplLiAqLwogCUxMQ19PUFRfUlhfV0lOLAkJLyogcnggd2luZG93IHNpemUuICovCisJTExDX09QVF9QS1RJTkZPLAkvKiBhbmNpbGxhcnkgcGFja2V0IGluZm9ybWF0aW9uLiAqLwogCUxMQ19PUFRfTUFYCiB9OwogCkBAIC03MCw2ICs3MSwxMiBAQAogI2RlZmluZSBMTENfU0FQX1JNCTB4RDQJCS8qIFJlc291cmNlIE1hbmFnZW1lbnQgCQkqLwogI2RlZmluZSBMTENfU0FQX0dMT0JBTAkweEZGCQkvKiBHbG9iYWwgU0FQLiAJCQkqLwogCitzdHJ1Y3QgbGxjX3BrdGluZm8geworCWludCBscGlfaWZpbmRleDsKKwl1bnNpZ25lZCBjaGFyIGxwaV9zYXA7CisJdW5zaWduZWQgY2hhciBscGlfbWFjW0lGSFdBRERSTEVOXTsKK307CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIExMQ19TQVBfRFlOX1NUQVJUCTB4QzAKICNkZWZpbmUgTExDX1NBUF9EWU5fU1RPUAkweERFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtYi5oIGIvaW5jbHVkZS9saW51eC9sbWIuaAppbmRleCBlZjgyYjhmLi5mM2QxNDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbG1iLmgKQEAgLTQyLDYgKzQyLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBsbWJfYW5hbHl6ZSh2b2lkKTsKIGV4dGVybiBsb25nIGxtYl9hZGQodTY0IGJhc2UsIHU2NCBzaXplKTsKIGV4dGVybiBsb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiBsb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpOwogZXh0ZXJuIGxvbmcgX19pbml0IGxtYl9yZXNlcnZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkKHU2NCBzaXplLCB1NjQgYWxpZ24sIGludCBuaWQsCiAJCQkJdTY0ICgqbmlkX3JhbmdlKSh1NjQsIHU2NCwgaW50ICopKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggOWNjZjBlMi4uMTAyMDZhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTUzNCw0ICs1MzQsOCBAQAogIyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorZXh0ZXJuIHZvaWQgbG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpOworI2VuZGlmCisKICNlbmRpZiAvKiBfX0xJTlVYX0xPQ0tERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCmluZGV4IDM1NjgwNDA5Li45NGNiNTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCkBAIC0xMDgsNiArMTA4LDggQEAKICNkZWZpbmUJTUMxMzc4M19SRUdVX1YyCQkyOAogI2RlZmluZQlNQzEzNzgzX1JFR1VfVjMJCTI5CiAjZGVmaW5lCU1DMTM3ODNfUkVHVV9WNAkJMzAKKyNkZWZpbmUJTUMxMzc4M19SRUdVX1BXR1QxU1BJCTMxCisjZGVmaW5lCU1DMTM3ODNfUkVHVV9QV0dUMlNQSQkzMgogCiAjZGVmaW5lIE1DMTM3ODNfSVJRX0FEQ0RPTkUJMAogI2RlZmluZSBNQzEzNzgzX0lSUV9BRENCSVNET05FCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKaW5kZXggYWRhZjNjMS4uOGI1ZjdjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgSFBFVF9NSU5PUgkJMjI4CiAjZGVmaW5lIEZVU0VfTUlOT1IJCTIyOQogI2RlZmluZSBLVk1fTUlOT1IJCTIzMgorI2RlZmluZSBWSE9TVF9ORVRfTUlOT1IJCTIzMwogI2RlZmluZSBNSVNDX0RZTkFNSUNfTUlOT1IJMjU1CiAKIHN0cnVjdCBkZXZpY2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNjBjNDY3Yi4uOTA5NTdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IGFub25fdm1hOwpAQCAtMjY1LDYgKzI2Niw4IEBACiAJcmV0dXJuIGF0b21pY19pbmNfbm90X3plcm8oJnBhZ2UtPl9jb3VudCk7CiB9CiAKK2V4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwZm4pOworCiAvKiBTdXBwb3J0IGZvciB2aXJ0dWFsbHkgbWFwcGVkIHBhZ2VzICovCiBzdHJ1Y3QgcGFnZSAqdm1hbGxvY190b19wYWdlKGNvbnN0IHZvaWQgKmFkZHIpOwogdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTsKQEAgLTEwNDcsNiArMTA1MCwxMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9taW5fcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLAogCQkJCQkJdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbik7CitpbnQgYWRkX2Zyb21fZWFybHlfbm9kZV9tYXAoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6LAorCQkJCSAgIGludCBucl9yYW5nZSwgaW50IG5pZCk7Cit2b2lkICpfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KGludCBub2RlaWQsIHU2NCBzaXplLCB1NjQgYWxpZ24sCisJCQkJIHU2NCBnb2FsLCB1NjQgbGltaXQpOwogdHlwZWRlZiBpbnQgKCp3b3JrX2ZuX3QpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiBleHRlcm4gdm9pZCB3b3JrX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwgd29ya19mbl90IHdvcmtfZm4sIHZvaWQgKmRhdGEpOwogZXh0ZXJuIHZvaWQgc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCk7CkBAIC0xMDc5LDExICsxMDg2LDcgQEAKIGV4dGVybiB2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKTsKIGV4dGVybiBpbnQgYWZ0ZXJfYm9vdG1lbTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gdm9pZCBzZXR1cF9wZXJfY3B1X3BhZ2VzZXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKSB7fQotI2VuZGlmCiAKIGV4dGVybiB2b2lkIHpvbmVfcGNwX3VwZGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSk7CiAKQEAgLTEzMTksMTIgKzEzMjIsMTkgQEAKIGNvbnN0IGNoYXIgKiBhcmNoX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgcHJpbnRfdm1hX2FkZHIoY2hhciAqcHJlZml4LCB1bnNpZ25lZCBsb25nIHJpcCk7CiAKK3ZvaWQgc3BhcnNlX21lbV9tYXBzX3BvcHVsYXRlX25vZGUoc3RydWN0IHBhZ2UgKiptYXBfbWFwLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcG51bV9iZWdpbiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBudW1fZW5kLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbWFwX2NvdW50LAorCQkJCSAgIGludCBub2RlaWQpOworCiBzdHJ1Y3QgcGFnZSAqc3BhcnNlX21lbV9tYXBfcG9wdWxhdGUodW5zaWduZWQgbG9uZyBwbnVtLCBpbnQgbmlkKTsKIHBnZF90ICp2bWVtbWFwX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlKTsKIHB1ZF90ICp2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlKTsKIHBtZF90ICp2bWVtbWFwX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlKTsKIHB0ZV90ICp2bWVtbWFwX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlKTsKIHZvaWQgKnZtZW1tYXBfYWxsb2NfYmxvY2sodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSk7Cit2b2lkICp2bWVtbWFwX2FsbG9jX2Jsb2NrX2J1Zih1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKTsKIHZvaWQgdm1lbW1hcF92ZXJpZnkocHRlX3QgKiwgaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIGludCB2bWVtbWFwX3BvcHVsYXRlX2Jhc2VwYWdlcyhzdHJ1Y3QgcGFnZSAqc3RhcnRfcGFnZSwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgcGFnZXMsIGludCBub2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDMwZmU2NjguLmEwMWExMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTg0LDEzICsxODQsNyBAQAogCXM4IHN0YXRfdGhyZXNob2xkOwogCXM4IHZtX3N0YXRfZGlmZltOUl9WTV9aT05FX1NUQVRfSVRFTVNdOwogI2VuZGlmCi19IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotI2RlZmluZSB6b25lX3BjcChfX3osIF9fY3B1KSAoKF9feiktPnBhZ2VzZXRbKF9fY3B1KV0pCi0jZWxzZQotI2RlZmluZSB6b25lX3BjcChfX3osIF9fY3B1KSAoJihfX3opLT5wYWdlc2V0WyhfX2NwdSldKQotI2VuZGlmCit9OwogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFMuSCAqLwogCkBAIC0zMDYsMTAgKzMwMCw4IEBACiAJICovCiAJdW5zaWduZWQgbG9uZwkJbWluX3VubWFwcGVkX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCW1pbl9zbGFiX3BhZ2VzOwotCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJKnBhZ2VzZXRbTlJfQ1BVU107Ci0jZWxzZQotCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJcGFnZXNldFtOUl9DUFVTXTsKICNlbmRpZgorCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBhZ2VzZXQ7CiAJLyoKIAkgKiBmcmVlIGFyZWFzIG9mIGRpZmZlcmVudCBzaXplcwogCSAqLwpAQCAtNjIwLDcgKzYxMiw5IEBACiAJc3RydWN0IHBhZ2VfY2dyb3VwICpub2RlX3BhZ2VfY2dyb3VwOwogI2VuZGlmCiAjZW5kaWYKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KIAlzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogCS8qCiAJICogTXVzdCBiZSBoZWxkIGFueSB0aW1lIHlvdSBleHBlY3Qgbm9kZV9zdGFydF9wZm4sIG5vZGVfcHJlc2VudF9wYWdlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNmNiMWEzYy4uZGQ2MThlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKLSNpbmNsdWRlIDxhc20vbG9jYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vbW9kdWxlLmg+CiAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvbW9kdWxlLmg+CkBAIC0zNjMsMTEgKzM2Myw5IEBACiAJLyogRGVzdHJ1Y3Rpb24gZnVuY3Rpb24uICovCiAJdm9pZCAoKmV4aXQpKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCWNoYXIgKnJlZnB0cjsKLSNlbHNlCi0JbG9jYWxfdCByZWY7Ci0jZW5kaWYKKwlzdHJ1Y3QgbW9kdWxlX3JlZiB7CisJCWludCBjb3VudDsKKwl9IF9fcGVyY3B1ICpyZWZwdHI7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DT05TVFJVQ1RPUlMKQEAgLTQ1NCwyNSArNDUyLDE2IEBACiAjZGVmaW5lIHN5bWJvbF9wdXQoeCkgX19zeW1ib2xfcHV0KE1PRFVMRV9TWU1CT0xfUFJFRklYICN4KQogdm9pZCBzeW1ib2xfcHV0X2FkZHIodm9pZCAqYWRkcik7CiAKLXN0YXRpYyBpbmxpbmUgbG9jYWxfdCAqX19tb2R1bGVfcmVmX2FkZHIoc3RydWN0IG1vZHVsZSAqbW9kLCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gKGxvY2FsX3QgKikgKG1vZC0+cmVmcHRyICsgcGVyX2NwdV9vZmZzZXQoY3B1KSk7Ci0jZWxzZQotCXJldHVybiAmbW9kLT5yZWY7Ci0jZW5kaWYKLX0KLQogLyogU29tZXRpbWVzIHdlIGtub3cgd2UgYWxyZWFkeSBoYXZlIGEgcmVmY291bnQsIGFuZCBpdCdzIGVhc2llciBub3QKICAgIHRvIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSAod2hpY2ggb25seSBoYXBwZW5zIHdpdGggcm1tb2QgLS13YWl0KS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewogCWlmIChtb2R1bGUpIHsKLQkJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKLQkJbG9jYWxfaW5jKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlfX3RoaXNfY3B1X2luYyhtb2R1bGUtPnJlZnB0ci0+Y291bnQpOwogCQl0cmFjZV9tb2R1bGVfZ2V0KG1vZHVsZSwgX1RISVNfSVBfLAotCQkJCSBsb2NhbF9yZWFkKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSkpOwotCQlwdXRfY3B1KCk7CisJCQkJIF9fdGhpc19jcHVfcmVhZChtb2R1bGUtPnJlZnB0ci0+Y291bnQpKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CiB9CiAKQEAgLTQ4MSwxNSArNDcwLDE3IEBACiAJaW50IHJldCA9IDE7CiAKIAlpZiAobW9kdWxlKSB7Ci0JCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCiAJCWlmIChsaWtlbHkobW9kdWxlX2lzX2xpdmUobW9kdWxlKSkpIHsKLQkJCWxvY2FsX2luYyhfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpOworCQkJX190aGlzX2NwdV9pbmMobW9kdWxlLT5yZWZwdHItPmNvdW50KTsKIAkJCXRyYWNlX21vZHVsZV9nZXQobW9kdWxlLCBfVEhJU19JUF8sCi0JCQkJbG9jYWxfcmVhZChfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpKTsKKwkJCQlfX3RoaXNfY3B1X3JlYWQobW9kdWxlLT5yZWZwdHItPmNvdW50KSk7CiAJCX0KIAkJZWxzZQogCQkJcmV0ID0gMDsKLQkJcHV0X2NwdSgpOworCisJCXByZWVtcHRfZW5hYmxlKCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggY2E3MjZlYi4uNGJkMDU0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtNzcsNyArNzcsNyBAQAogCWludCBtbnRfcGlubmVkOwogCWludCBtbnRfZ2hvc3RzOwogI2lmZGVmIENPTkZJR19TTVAKLQlpbnQgKm1udF93cml0ZXJzOworCWludCBfX3BlcmNwdSAqbW50X3dyaXRlcnM7CiAjZWxzZQogCWludCBtbnRfd3JpdGVyczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKaW5kZXggZTc3YzFjZS4uYWI3NzYwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCkBAIC01MSw2ICs1MSw4IEBACiAjZGVmaW5lIF80RUNDQ05URU4JKDB4MSA8PCAyNCkKICNkZWZpbmUgXzRFQ0NFTgkJKDB4MSA8PCAyMykKICNkZWZpbmUgXzRFQ0NDT1JSRUNUCSgweDEgPDwgMjIpCisjZGVmaW5lIFNIQlVTU0VMCSgweDEgPDwgMjApCisjZGVmaW5lIFNFTF8xNkJJVAkoMHgxIDw8IDE5KQogI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCiAjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCiAjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KQEAgLTk2LDYgKzk4LDcgQEAKIHN0cnVjdCBzaF9mbGN0bCB7CiAJc3RydWN0IG10ZF9pbmZvCQltdGQ7CiAJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJdm9pZCBfX2lvbWVtCQkqcmVnOwogCiAJdWludDhfdAlkb25lX2J1ZmZbMjA0OCArIDY0XTsJLyogbWF4IHNpemUgMjA0OCArIDY0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA1ZTgwODNjLi40MTU3YjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTE3NCwxOCArMTc0LDIyIEBACiAJCQkJICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKIAlpbnQJCSgqaW9jdGwpICAgICAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisjaWZkZWYgQ09ORklHX0NPTVBBVAogCWludAkgCSgqY29tcGF0X2lvY3RsKSAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisjZW5kaWYKIAlpbnQJCSgqbGlzdGVuKSAgICAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxlbik7CiAJaW50CQkoKnNodXRkb3duKSAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAJaW50CQkoKnNldHNvY2tvcHQpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwKIAkJCQkgICAgICBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbik7CiAJaW50CQkoKmdldHNvY2tvcHQpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwKIAkJCQkgICAgICBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaW50CQkoKmNvbXBhdF9zZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pOwogCWludAkJKCpjb21wYXRfZ2V0c29ja29wdCkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAogCQkJCSAgICAgIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworI2VuZGlmCiAJaW50CQkoKnNlbmRtc2cpICAgKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKTsKIAlpbnQJCSgqcmVjdm1zZykgICAoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYTNmY2NjOC4uYzc5YTg4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2xpbmsuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMTM2LDcgKzEzNyw3IEBACiAgKgl1c2VkLgogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19XTEFOXzgwMjExKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19XTEFOKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKICMgaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTUVTSCkKICMgIGRlZmluZSBMTF9NQVhfSEVBREVSIDEyOAogIyBlbHNlCkBAIC0yNjMsNiArMjY0LDE3IEBACiAJaW50CQkJY291bnQ7CiB9OwogCisjZGVmaW5lIG5ldGRldl91Y19jb3VudChkZXYpICgoZGV2KS0+dWMuY291bnQpCisjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpICgoZGV2KS0+dWMuY291bnQgPT0gMCkKKyNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZkZXYtPnVjLmxpc3QsIGxpc3QpCisKKyNkZWZpbmUgbmV0ZGV2X21jX2NvdW50KGRldikgKChkZXYpLT5tY19jb3VudCkKKyNkZWZpbmUgbmV0ZGV2X21jX2VtcHR5KGRldikgKG5ldGRldl9tY19jb3VudChkZXYpID09IDApCisKKyNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIFwKKwlmb3IgKG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0OyBtY2xpc3QgPSBtY2xpc3QtPm5leHQpCisKIHN0cnVjdCBoaF9jYWNoZSB7CiAJc3RydWN0IGhoX2NhY2hlICpoaF9uZXh0OwkvKiBOZXh0IGVudHJ5CQkJICAgICAqLwogCWF0b21pY190CWhoX3JlZmNudDsJLyogbnVtYmVyIG9mIHVzZXJzICAgICAgICAgICAgICAgICAgICovCkBAIC02MTAsNiArNjIyLDEzIEBACiAgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgVkxBTiBpZCBpcyB1bnJlZ2lzdGVyZWQuCiAgKgogICogdm9pZCAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworICoKKyAqCVNSLUlPViBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4KKyAqIGludCAoKm5kb19zZXRfdmZfbWFjKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmYsIHU4KiBtYWMpOworICogaW50ICgqbmRvX3NldF92Zl92bGFuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmYsIHUxNiB2bGFuLCB1OCBxb3MpOworICogaW50ICgqbmRvX3NldF92Zl90eF9yYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmYsIGludCByYXRlKTsKKyAqIGludCAoKm5kb19nZXRfdmZfY29uZmlnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICoJCQkgICAgaW50IHZmLCBzdHJ1Y3QgaWZsYV92Zl9pbmZvICppdmYpOwogICovCiAjZGVmaW5lIEhBVkVfTkVUX0RFVklDRV9PUFMKIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7CkBAIC02MjEsMzAgKzY0MCwyMSBAQAogCQkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJdTE2CQkJKCpuZG9fc2VsZWN0X3F1ZXVlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotI2RlZmluZSBIQVZFX0NIQU5HRV9SWF9GTEFHUwogCXZvaWQJCQkoKm5kb19jaGFuZ2VfcnhfZmxhZ3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICAgaW50IGZsYWdzKTsKLSNkZWZpbmUgSEFWRV9TRVRfUlhfTU9ERQogCXZvaWQJCQkoKm5kb19zZXRfcnhfbW9kZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jZGVmaW5lIEhBVkVfTVVMVElDQVNUCiAJdm9pZAkJCSgqbmRvX3NldF9tdWx0aWNhc3RfbGlzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jZGVmaW5lIEhBVkVfU0VUX01BQ19BRERSCiAJaW50CQkJKCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgICAgIHZvaWQgKmFkZHIpOwotI2RlZmluZSBIQVZFX1ZBTElEQVRFX0FERFIKIAlpbnQJCQkoKm5kb192YWxpZGF0ZV9hZGRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNkZWZpbmUgSEFWRV9QUklWQVRFX0lPQ1RMCiAJaW50CQkJKCpuZG9fZG9faW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwotI2RlZmluZSBIQVZFX1NFVF9DT05GSUcKIAlpbnQJCQkoKm5kb19zZXRfY29uZmlnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICAgICAgc3RydWN0IGlmbWFwICptYXApOwotI2RlZmluZSBIQVZFX0NIQU5HRV9NVFUKIAlpbnQJCQkoKm5kb19jaGFuZ2VfbXR1KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICBpbnQgbmV3X210dSk7CiAJaW50CQkJKCpuZG9fbmVpZ2hfc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICBzdHJ1Y3QgbmVpZ2hfcGFybXMgKik7Ci0jZGVmaW5lIEhBVkVfVFhfVElNRU9VVAogCXZvaWQJCQkoKm5kb190eF90aW1lb3V0KSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogKCpuZG9fZ2V0X3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTY1Niw5ICs2NjYsMTcgQEAKIAl2b2lkCQkJKCpuZG9fdmxhbl9yeF9raWxsX3ZpZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgdmlkKTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotI2RlZmluZSBIQVZFX05FVERFVl9QT0xMCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCpuZG9fcG9sbF9jb250cm9sbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgorCWludAkJCSgqbmRvX3NldF92Zl9tYWMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgIGludCBxdWV1ZSwgdTggKm1hYyk7CisJaW50CQkJKCpuZG9fc2V0X3ZmX3ZsYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICBpbnQgcXVldWUsIHUxNiB2bGFuLCB1OCBxb3MpOworCWludAkJCSgqbmRvX3NldF92Zl90eF9yYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgaW50IHZmLCBpbnQgcmF0ZSk7CisJaW50CQkJKCpuZG9fZ2V0X3ZmX2NvbmZpZykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgaW50IHZmLAorCQkJCQkJICAgICBzdHJ1Y3QgaWZsYV92Zl9pbmZvICppdmYpOwogI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQogCWludAkJCSgqbmRvX2Zjb2VfZW5hYmxlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQJCQkoKm5kb19mY29lX2Rpc2FibGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNzQ1LDYgKzc2Myw3IEBACiAjZGVmaW5lIE5FVElGX0ZfRkNPRV9DUkMJKDEgPDwgMjQpIC8qIEZDb0UgQ1JDMzIgKi8KICNkZWZpbmUgTkVUSUZfRl9TQ1RQX0NTVU0JKDEgPDwgMjUpIC8qIFNDVFAgY2hlY2tzdW0gb2ZmbG9hZCAqLwogI2RlZmluZSBORVRJRl9GX0ZDT0VfTVRVCSgxIDw8IDI2KSAvKiBTdXBwb3J0cyBtYXggRkNvRSBNVFUsIDIxNTggYnl0ZXMqLworI2RlZmluZSBORVRJRl9GX05UVVBMRQkJKDEgPDwgMjcpIC8qIE4tdHVwbGUgZmlsdGVycyBzdXBwb3J0ZWQgKi8KIAogCS8qIFNlZ21lbnRhdGlvbiBvZmZsb2FkIGZlYXR1cmVzICovCiAjZGVmaW5lIE5FVElGX0ZfR1NPX1NISUZUCTE2CkBAIC05MDUsNyArOTI0LDEyIEBACiAJICAgICAgIE5FVFJFR19VTlJFR0lTVEVSRUQsCS8qIGNvbXBsZXRlZCB1bnJlZ2lzdGVyIHRvZG8gKi8KIAkgICAgICAgTkVUUkVHX1JFTEVBU0VELAkJLyogY2FsbGVkIGZyZWVfbmV0ZGV2ICovCiAJICAgICAgIE5FVFJFR19EVU1NWSwJCS8qIGR1bW15IGRldmljZSBmb3IgTkFQSSBwb2xsICovCi0JfSByZWdfc3RhdGU7CisJfSByZWdfc3RhdGU6MTY7CisKKwllbnVtIHsKKwkJUlROTF9MSU5LX0lOSVRJQUxJWkVELAorCQlSVE5MX0xJTktfSU5JVElBTElaSU5HLAorCX0gcnRubF9saW5rX3N0YXRlOjE2OwogCiAJLyogQ2FsbGVkIGZyb20gdW5yZWdpc3RlciwgY2FuIGJlIHVzZWQgdG8gY2FsbCBmcmVlX25ldGRldiAqLwogCXZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk1Myw2ICs5NzcsOCBAQAogCS8qIG1heCBleGNoYW5nZSBpZCBmb3IgRkNvRSBMUk8gYnkgZGRwICovCiAJdW5zaWduZWQgaW50CQlmY29lX2RkcF94aWQ7CiAjZW5kaWYKKwkvKiBuLXR1cGxlIGZpbHRlciBsaXN0IGF0dGFjaGVkIHRvIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2xpc3QgZXRodG9vbF9udHVwbGVfbGlzdDsKIH07CiAjZGVmaW5lIHRvX25ldF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBuZXRfZGV2aWNlLCBkZXYpCiAKQEAgLTEwMDksNiArMTAzNSwxNSBAQAogCXJldHVybiAwOwogfQogCisjaWZuZGVmIENPTkZJR19ORVRfTlMKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNrYi0+ZGV2ID0gZGV2OworfQorI2Vsc2UgLyogQ09ORklHX05FVF9OUyAqLwordm9pZCBza2Jfc2V0X2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X3VzZXNfdHJhaWxlcl90YWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIKQEAgLTE1MjcsNyArMTU2Miw2IEBACiBleHRlcm4gaW50CQluZXRpZl9yeF9uaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNkZWZpbmUgSEFWRV9ORVRJRl9SRUNFSVZFX1NLQiAxCiBleHRlcm4gaW50CQluZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiB2b2lkCQluYXBpX2dyb19mbHVzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogZXh0ZXJuIGdyb19yZXN1bHRfdAlkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBncm9fcmVzdWx0X3QJbmFwaV9za2JfZmluaXNoKGdyb19yZXN1bHRfdCByZXQsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTU1Myw3ICsxNTg3LDkgQEAKIGV4dGVybiBpbnQJCWRldl9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICopOwogZXh0ZXJuIGludAkJZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKik7CiBleHRlcm4gdW5zaWduZWQJCWRldl9nZXRfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gaW50CQlfX2Rldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQJCWRldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgdW5zaWduZWQpOworZXh0ZXJuIHZvaWQJCV9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzKTsKIGV4dGVybiBpbnQJCWRldl9jaGFuZ2VfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludAkJZGV2X3NldF9hbGlhcyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50CQlkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKiwKQEAgLTIwODMsNiArMjExOSwxMzAgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyhkZXYpOwogfQorCisvKiBMb2dnaW5nLCBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy9kaWFnbm9zdGljIGhlbHBlcnMuICovCisKKy8qIG5ldGRldl9wcmludGsgaGVscGVycywgc2ltaWxhciB0byBkZXZfcHJpbnRrICovCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbmV0ZGV2X25hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpCisJCXJldHVybiAiKHVucmVnaXN0ZXJlZCBuZXRfZGV2aWNlKSI7CisJcmV0dXJuIGRldi0+bmFtZTsKK30KKworI2RlZmluZSBuZXRkZXZfcHJpbnRrKGxldmVsLCBuZXRkZXYsIGZvcm1hdCwgYXJncy4uLikJCVwKKwlkZXZfcHJpbnRrKGxldmVsLCAobmV0ZGV2KS0+ZGV2LnBhcmVudCwJCQlcCisJCSAgICIlczogIiBmb3JtYXQsCQkJCVwKKwkJICAgbmV0ZGV2X25hbWUobmV0ZGV2KSwgIyNhcmdzKQorCisjZGVmaW5lIG5ldGRldl9lbWVyZyhkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX0VNRVJHLCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBuZXRkZXZfYWxlcnQoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCW5ldGRldl9wcmludGsoS0VSTl9BTEVSVCwgZGV2LCBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgbmV0ZGV2X2NyaXQoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCW5ldGRldl9wcmludGsoS0VSTl9DUklULCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBuZXRkZXZfZXJyKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwluZXRkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBuZXRkZXZfd2FybihkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGRldl9ub3RpY2UoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCW5ldGRldl9wcmludGsoS0VSTl9OT1RJQ0UsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGRldl9pbmZvKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwluZXRkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LCBmb3JtYXQsICMjYXJncykKKworI2lmIGRlZmluZWQoREVCVUcpCisjZGVmaW5lIG5ldGRldl9kYmcoX19kZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBfX2RldiwgZm9ybWF0LCAjI2FyZ3MpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorI2RlZmluZSBuZXRkZXZfZGJnKF9fZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorZG8gewkJCQkJCQkJXAorCWR5bmFtaWNfZGV2X2RiZygoX19kZXYpLT5kZXYucGFyZW50LCAiJXM6ICIgZm9ybWF0LAlcCisJCQluZXRkZXZfbmFtZShfX2RldiksICMjYXJncyk7CQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgbmV0ZGV2X2RiZyhfX2RldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCVwKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBfX2RldiwgZm9ybWF0LCAjI2FyZ3MpOyBcCisJMDsJCQkJCQkJXAorfSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChWRVJCT1NFX0RFQlVHKQorI2RlZmluZSBuZXRkZXZfdmRiZwluZXRkZXZfZGJnCisjZWxzZQorCisjZGVmaW5lIG5ldGRldl92ZGJnKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCVwKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsIGZvcm1hdCwgIyNhcmdzKTsJXAorCTA7CQkJCQkJCVwKK30pCisjZW5kaWYKKworLyoKKyAqIG5ldGRldl9XQVJOKCkgYWN0cyBsaWtlIGRldl9wcmludGsoKSwgYnV0IHdpdGggdGhlIGtleSBkaWZmZXJlbmNlCisgKiBvZiB1c2luZyBhIFdBUk4vV0FSTl9PTiB0byBnZXQgdGhlIG1lc3NhZ2Ugb3V0LCBpbmNsdWRpbmcgdGhlCisgKiBmaWxlL2xpbmUgaW5mb3JtYXRpb24gYW5kIGEgYmFja3RyYWNlLgorICovCisjZGVmaW5lIG5ldGRldl9XQVJOKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwlXQVJOKDEsICJuZXRkZXZpY2U6ICVzXG4iIGZvcm1hdCwgbmV0ZGV2X25hbWUoZGV2KSwgIyNhcmdzKTsKKworLyogbmV0aWYgcHJpbnRrIGhlbHBlcnMsIHNpbWlsYXIgdG8gbmV0ZGV2X3ByaW50ayAqLworCisjZGVmaW5lIG5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBsZXZlbCwgZGV2LCBmbXQsIGFyZ3MuLi4pCVwKK2RvIHsJCQkJCSAgCQkJXAorCWlmIChuZXRpZl9tc2dfIyN0eXBlKHByaXYpKQkJCQlcCisJCW5ldGRldl9wcmludGsobGV2ZWwsIChkZXYpLCBmbXQsICMjYXJncyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgbmV0aWZfZW1lcmcocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fRU1FUkcsIGRldiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGlmX2FsZXJ0KHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAorCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0FMRVJULCBkZXYsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBuZXRpZl9jcml0KHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAorCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0NSSVQsIGRldiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGlmX2Vycihwcml2LCB0eXBlLCBkZXYsIGZtdCwgYXJncy4uLikJCVwKKwluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9FUlIsIGRldiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGlmX3dhcm4ocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fV0FSTklORywgZGV2LCBmbXQsICMjYXJncykKKyNkZWZpbmUgbmV0aWZfbm90aWNlKHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAorCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX05PVElDRSwgZGV2LCBmbXQsICMjYXJncykKKyNkZWZpbmUgbmV0aWZfaW5mbyhwcml2LCB0eXBlLCBkZXYsIGZtdCwgYXJncy4uLikJCVwKKwluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9JTkZPLCAoZGV2KSwgZm10LCAjI2FyZ3MpCisKKyNpZiBkZWZpbmVkKERFQlVHKQorI2RlZmluZSBuZXRpZl9kYmcocHJpdiwgdHlwZSwgZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorI2RlZmluZSBuZXRpZl9kYmcocHJpdiwgdHlwZSwgbmV0ZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKG5ldGlmX21zZ18jI3R5cGUocHJpdikpCQkJCVwKKwkJZHluYW1pY19kZXZfZGJnKChuZXRkZXYpLT5kZXYucGFyZW50LAkJXAorCQkJCSIlczogIiBmb3JtYXQsCQkJXAorCQkJCW5ldGRldl9uYW1lKG5ldGRldiksICMjYXJncyk7CVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBuZXRpZl9kYmcocHJpdiwgdHlwZSwgZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorKHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0RFQlVHLCBkZXYsIGZvcm1hdCwgIyNhcmdzKTsgXAorCTA7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZFUkJPU0VfREVCVUcpCisjZGVmaW5lIG5ldGlmX3ZkYmcJbmV0ZGV2X2RiZworI2Vsc2UKKyNkZWZpbmUgbmV0aWZfdmRiZyhwcml2LCB0eXBlLCBkZXYsIGZvcm1hdCwgYXJncy4uLikJCVwKKyh7CQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCVwKKwkJbmV0aWZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpOwlcCisJMDsJCQkJCQkJXAorfSkKKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0xJTlVYX05FVERFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCA0OGM1NDk2Li44OTM0MWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKQEAgLTExNCwxNSArMTE0LDE3IEBACiAJaW50IHNldF9vcHRtaW47CiAJaW50IHNldF9vcHRtYXg7CiAJaW50ICgqc2V0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHR2YWwsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaW50ICgqY29tcGF0X3NldCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLAogCQkJdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pOwotCisjZW5kaWYKIAlpbnQgZ2V0X29wdG1pbjsKIAlpbnQgZ2V0X29wdG1heDsKIAlpbnQgKCpnZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaW50ICgqY29tcGF0X2dldCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLAogCQkJdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKTsKLQorI2VuZGlmCiAJLyogVXNlIHRoZSBtb2R1bGUgc3RydWN0IHRvIGxvY2sgc2V0L2dldCBjb2RlIGluIHBsYWNlICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiB9OwpAQCAtMTYxLDExICsxNjMsOCBAQAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsCi0JCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBpbnQgdGhyZXNoLAotCQkJCSBpbnQgY29uZCkKKwkJCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKiksIGludCB0aHJlc2gpCiB7Ci0JaWYgKCFjb25kKQotCQlyZXR1cm4gMTsKICNpZm5kZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCWlmIChsaXN0X2VtcHR5KCZuZl9ob29rc1twZl1baG9va10pKQogCQlyZXR1cm4gMTsKQEAgLTE3Nyw3ICsxNzYsNyBAQAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsCiAJCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCXJldHVybiBuZl9ob29rX3RocmVzaChwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCBJTlRfTUlOLCAxKTsKKwlyZXR1cm4gbmZfaG9va190aHJlc2gocGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbiwgSU5UX01JTik7CiB9CiAgICAgICAgICAgICAgICAgICAgCiAvKiBBY3RpdmF0ZSBob29rOyBlaXRoZXIgb2tmbiBvciBrZnJlZV9za2IgY2FsbGVkLCB1bmxlc3MgYSBob29rCkBAIC0xOTcsMzYgKzE5Niw0OSBAQAogICAgY29kZXJzIDopCiAqLwogCi0vKiBUaGlzIGlzIGdyb3NzLCBidXQgaW5saW5lIGRvZXNuJ3QgY3V0IGl0IGZvciBhdm9pZGluZyB0aGUgZnVuY3Rpb24KLSAgIGNhbGwgaW4gZmFzdCBwYXRoOiBnY2MgZG9lc24ndCBpbmxpbmUgKG5lZWRzIHZhbHVlIHRyYWNraW5nPykuIC0tUlIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitORl9IT09LX1RIUkVTSCh1aW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwgaW50IHRocmVzaCkKK3sKKwlpbnQgcmV0ID0gbmZfaG9va190aHJlc2gocGYsIGhvb2ssIHNrYiwgaW4sIG91dCwgb2tmbiwgdGhyZXNoKTsKKwlpZiAocmV0ID09IDEpCisJCXJldCA9IG9rZm4oc2tiKTsKKwlyZXR1cm4gcmV0OworfQogCi0vKiBIWDogSXQncyBzbGlnaHRseSBsZXNzIGdyb3NzIG5vdy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50CitORl9IT09LX0NPTkQodWludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwgYm9vbCBjb25kKQoreworCWludCByZXQ7CiAKLSNkZWZpbmUgTkZfSE9PS19USFJFU0gocGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbiwgdGhyZXNoKQkgICAgICAgXAotKHtpbnQgX19yZXQ7CQkJCQkJCQkgICAgICAgXAotaWYgKChfX3JldD1uZl9ob29rX3RocmVzaChwZiwgaG9vaywgKHNrYiksIGluZGV2LCBvdXRkZXYsIG9rZm4sIHRocmVzaCwgMSkpID09IDEpXAotCV9fcmV0ID0gKG9rZm4pKHNrYik7CQkJCQkJICAgICAgIFwKLV9fcmV0O30pCisJaWYgKCFjb25kIHx8CisJICAgIChyZXQgPSBuZl9ob29rX3RocmVzaChwZiwgaG9vaywgc2tiLCBpbiwgb3V0LCBva2ZuLCBJTlRfTUlOKSA9PSAxKSkKKwkJcmV0ID0gb2tmbihza2IpOworCXJldHVybiByZXQ7Cit9CiAKLSNkZWZpbmUgTkZfSE9PS19DT05EKHBmLCBob29rLCBza2IsIGluZGV2LCBvdXRkZXYsIG9rZm4sIGNvbmQpCQkgICAgICAgXAotKHtpbnQgX19yZXQ7CQkJCQkJCQkgICAgICAgXAotaWYgKChfX3JldD1uZl9ob29rX3RocmVzaChwZiwgaG9vaywgKHNrYiksIGluZGV2LCBvdXRkZXYsIG9rZm4sIElOVF9NSU4sIGNvbmQpKSA9PSAxKVwKLQlfX3JldCA9IChva2ZuKShza2IpOwkJCQkJCSAgICAgICBcCi1fX3JldDt9KQotCi0jZGVmaW5lIE5GX0hPT0socGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbikgXAotCU5GX0hPT0tfVEhSRVNIKHBmLCBob29rLCBza2IsIGluZGV2LCBvdXRkZXYsIG9rZm4sIElOVF9NSU4pCitzdGF0aWMgaW5saW5lIGludAorTkZfSE9PSyh1aW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJcmV0dXJuIE5GX0hPT0tfVEhSRVNIKHBmLCBob29rLCBza2IsIGluLCBvdXQsIG9rZm4sIElOVF9NSU4pOworfQogCiAvKiBDYWxsIHNldHNvY2tvcHQoKSAqLwogaW50IG5mX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCB1X2ludDhfdCBwZiwgaW50IG9wdHZhbCwgY2hhciBfX3VzZXIgKm9wdCwKIAkJICB1bnNpZ25lZCBpbnQgbGVuKTsKIGludCBuZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgdV9pbnQ4X3QgcGYsIGludCBvcHR2YWwsIGNoYXIgX191c2VyICpvcHQsCiAJCSAgaW50ICpsZW4pOwotCisjaWZkZWYgQ09ORklHX0NPTVBBVAogaW50IGNvbXBhdF9uZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgdV9pbnQ4X3QgcGYsIGludCBvcHR2YWwsCiAJCWNoYXIgX191c2VyICpvcHQsIHVuc2lnbmVkIGludCBsZW4pOwogaW50IGNvbXBhdF9uZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgdV9pbnQ4X3QgcGYsIGludCBvcHR2YWwsCiAJCWNoYXIgX191c2VyICpvcHQsIGludCAqbGVuKTsKKyNlbmRpZgogCiAvKiBDYWxsIHRoaXMgYmVmb3JlIG1vZGlmeWluZyBhbiBleGlzdGluZyBwYWNrZXQ6IGVuc3VyZXMgaXQgaXMKICAgIG1vZGlmaWFibGUgYW5kIGxpbmVhciB0byB0aGUgcG9pbnQgeW91IGNhcmUgYWJvdXQgKHdyaXRhYmxlX2xlbikuCkBAIC0zMjUsOCArMzM3LDcgQEAKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2LAotCQkJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwgaW50IHRocmVzaCwKLQkJCQkgaW50IGNvbmQpCisJCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBpbnQgdGhyZXNoKQogewogCXJldHVybiBva2ZuKHNrYik7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKaW5kZXggMmFlYTUwMy4uYTVhNjNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZApAQCAtNiw2ICs2LDcgQEAKIGhlYWRlci15ICs9IHh0X0NMQVNTSUZZLmgKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKK2hlYWRlci15ICs9IHh0X0NULmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAogaGVhZGVyLXkgKz0geHRfTEVELmgKIGhlYWRlci15ICs9IHh0X01BUksuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IGEzNzQ3ODcuLmM2MDg2NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTcyLDYgKzcyLDI4IEBACiAJLyogQ29ubmVjdGlvbiBoYXMgZml4ZWQgdGltZW91dC4gKi8KIAlJUFNfRklYRURfVElNRU9VVF9CSVQgPSAxMCwKIAlJUFNfRklYRURfVElNRU9VVCA9ICgxIDw8IElQU19GSVhFRF9USU1FT1VUX0JJVCksCisKKwkvKiBDb25udHJhY2sgaXMgYSB0ZW1wbGF0ZSAqLworCUlQU19URU1QTEFURV9CSVQgPSAxMSwKKwlJUFNfVEVNUExBVEUgPSAoMSA8PCBJUFNfVEVNUExBVEVfQklUKSwKK307CisKKy8qIENvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnQgdHlwZXMgKi8KK2VudW0gaXBfY29ubnRyYWNrX2V2ZW50cyB7CisJSVBDVF9ORVcsCQkvKiBuZXcgY29ubnRyYWNrICovCisJSVBDVF9SRUxBVEVELAkJLyogcmVsYXRlZCBjb25udHJhY2sgKi8KKwlJUENUX0RFU1RST1ksCQkvKiBkZXN0cm95ZWQgY29ubnRyYWNrICovCisJSVBDVF9SRVBMWSwJCS8qIGNvbm5lY3Rpb24gaGFzIHNlZW4gdHdvLXdheSB0cmFmZmljICovCisJSVBDVF9BU1NVUkVELAkJLyogY29ubmVjdGlvbiBzdGF0dXMgaGFzIGNoYW5nZWQgdG8gYXNzdXJlZCAqLworCUlQQ1RfUFJPVE9JTkZPLAkJLyogcHJvdG9jb2wgaW5mb3JtYXRpb24gaGFzIGNoYW5nZWQgKi8KKwlJUENUX0hFTFBFUiwJCS8qIG5ldyBoZWxwZXIgaGFzIGJlZW4gc2V0ICovCisJSVBDVF9NQVJLLAkJLyogbmV3IG1hcmsgaGFzIGJlZW4gc2V0ICovCisJSVBDVF9OQVRTRVFBREosCQkvKiBOQVQgaXMgZG9pbmcgc2VxdWVuY2UgYWRqdXN0bWVudCAqLworCUlQQ1RfU0VDTUFSSywJCS8qIG5ldyBzZWN1cml0eSBtYXJrIGhhcyBiZWVuIHNldCAqLworfTsKKworZW51bSBpcF9jb25udHJhY2tfZXhwZWN0X2V2ZW50cyB7CisJSVBFWFBfTkVXLAkJLyogbmV3IGV4cGVjdGF0aW9uICovCiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCmluZGV4IDIzYWEyZWMuLmZmOGNmYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAlTSVBfRVhQRUNUX1NJR05BTExJTkcsCiAJU0lQX0VYUEVDVF9BVURJTywKIAlTSVBfRVhQRUNUX1ZJREVPLAorCVNJUF9FWFBFQ1RfSU1BR0UsCiAJX19TSVBfRVhQRUNUX01BWAogfTsKICNkZWZpbmUgU0lQX0VYUEVDVF9NQVgJKF9fU0lQX0VYUEVDVF9NQVggLSAxKQpAQCAtMzQsMTAgKzM1LDEwIEBACiBzdHJ1Y3Qgc2lwX2hhbmRsZXIgewogCWNvbnN0IGNoYXIJKm1ldGhvZDsKIAl1bnNpZ25lZCBpbnQJbGVuOwotCWludAkJKCpyZXF1ZXN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCWludAkJKCpyZXF1ZXN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgIHVuc2lnbmVkIGludCBjc2VxKTsKLQlpbnQJCSgqcmVzcG9uc2UpKHN0cnVjdCBza19idWZmICpza2IsCisJaW50CQkoKnJlc3BvbnNlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNzZXEsIHVuc2lnbmVkIGludCBjb2RlKTsKIH07CkBAIC04NCw3ICs4NSw4IEBACiAJU0lQX0hEUl9GUk9NLAogCVNJUF9IRFJfVE8sCiAJU0lQX0hEUl9DT05UQUNULAotCVNJUF9IRFJfVklBLAorCVNJUF9IRFJfVklBX1VEUCwKKwlTSVBfSERSX1ZJQV9UQ1AsCiAJU0lQX0hEUl9FWFBJUkVTLAogCVNJUF9IRFJfQ09OVEVOVF9MRU5HVEgsCiB9OwpAQCAtMTAwLDMzICsxMDIsNDAgQEAKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKTsKK2V4dGVybiB2b2lkICgqbmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsIHMxNiBvZmYpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfZXhwZWN0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCQkgICAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbik7CiBleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9hZGRyX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLAogCQkJCQkgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHR5cGUsCiAJCQkJCSAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSwKIAkJCQkJICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcik7CiBleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9wb3J0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAogCQkJCQkgICAgdV9pbnQxNl90IHBvcnQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfc2Vzc2lvbl9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHNkcG9mZiwKIAkJCQkJICAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcik7CiBleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9tZWRpYV9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggNDlkMzIxZi4uNTM5MjM4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTczLDExICs3MywxMSBAQAogZXh0ZXJuIGludCBuZm5ldGxpbmtfc3Vic3lzX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpuKTsKIGV4dGVybiBpbnQgbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpuKTsKIAotZXh0ZXJuIGludCBuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyh1bnNpZ25lZCBpbnQgZ3JvdXApOwotZXh0ZXJuIGludCBuZm5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1bnNpZ25lZCBncm91cCwgCitleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGdyb3VwKTsKK2V4dGVybiBpbnQgbmZuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1bnNpZ25lZCBncm91cCwKIAkJCSAgaW50IGVjaG8sIGdmcF90IGZsYWdzKTsKLWV4dGVybiB2b2lkIG5mbmV0bGlua19zZXRfZXJyKHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVycm9yKTsKLWV4dGVybiBpbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIG5mbmV0bGlua19zZXRfZXJyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOworZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncyk7CiAKIGV4dGVybiB2b2lkIG5mbmxfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIG5mbmxfdW5sb2NrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCmluZGV4IGVkNGVmOGQuLjllZDUzNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAlDVEFfTkFUX1NFUV9BREpfT1JJRywKIAlDVEFfTkFUX1NFUV9BREpfUkVQTFksCiAJQ1RBX1NFQ01BUkssCisJQ1RBX1pPTkUsCiAJX19DVEFfTUFYCiB9OwogI2RlZmluZSBDVEFfTUFYIChfX0NUQV9NQVggLSAxKQpAQCAtMTU5LDYgKzE2MCw3IEBACiAJQ1RBX0VYUEVDVF9USU1FT1VULAogCUNUQV9FWFBFQ1RfSUQsCiAJQ1RBX0VYUEVDVF9IRUxQX05BTUUsCisJQ1RBX0VYUEVDVF9aT05FLAogCV9fQ1RBX0VYUEVDVF9NQVgKIH07CiAjZGVmaW5lIENUQV9FWFBFQ1RfTUFYIChfX0NUQV9FWFBFQ1RfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCmluZGV4IDM3OGYyN2EuLjg0YzdjOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaApAQCAtOTMsOCArOTMsNyBAQAogCV9fdTY0IHU2NDsKIH07CiAKLSNkZWZpbmUgWFRfQUxJR04ocykgKCgocykgKyAoX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpIAlcCi0JCQkmIH4oX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpCisjZGVmaW5lIFhUX0FMSUdOKHMpIEFMSUdOKChzKSwgX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbikpCiAKIC8qIFN0YW5kYXJkIHJldHVybiB2ZXJkaWN0LCBvciBkbyBqdW1wLiAqLwogI2RlZmluZSBYVF9TVEFOREFSRF9UQVJHRVQgIiIKQEAgLTEyMSw2ICsxMjAsNyBAQAogCiAjZGVmaW5lIFhUX0lOVl9QUk9UTwkJMHg0MAkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIFBST1RPLiAqLwogCisjaWZuZGVmIF9fS0VSTkVMX18KIC8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KICNkZWZpbmUgWFRfTUFUQ0hfSVRFUkFURSh0eXBlLCBlLCBmbiwgYXJncy4uLikJCQlcCiAoewkJCQkJCQkJXApAQCAtMTY0LDYgKzE2NCwyMiBAQAogI2RlZmluZSBYVF9FTlRSWV9JVEVSQVRFKHR5cGUsIGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSBcCiAJWFRfRU5UUllfSVRFUkFURV9DT05USU5VRSh0eXBlLCBlbnRyaWVzLCBzaXplLCAwLCBmbiwgYXJncykKIAorI2VuZGlmIC8qICFfX0tFUk5FTF9fICovCisKKy8qIHBvcyBpcyBub3JtYWxseSBhIHN0cnVjdCBpcHRfZW50cnkvaXA2dF9lbnRyeS9ldGMuICovCisjZGVmaW5lIHh0X2VudHJ5X2ZvcmVhY2gocG9zLCBlaGVhZCwgZXNpemUpIFwKKwlmb3IgKChwb3MpID0gKHR5cGVvZihwb3MpKShlaGVhZCk7IFwKKwkgICAgIChwb3MpIDwgKHR5cGVvZihwb3MpKSgoY2hhciAqKShlaGVhZCkgKyAoZXNpemUpKTsgXAorCSAgICAgKHBvcykgPSAodHlwZW9mKHBvcykpKChjaGFyICopKHBvcykgKyAocG9zKS0+bmV4dF9vZmZzZXQpKQorCisvKiBjYW4gb25seSBiZSB4dF9lbnRyeV9tYXRjaCwgc28gbm8gdXNlIG9mIHR5cGVvZiBoZXJlICovCisjZGVmaW5lIHh0X2VtYXRjaF9mb3JlYWNoKHBvcywgZW50cnkpIFwKKwlmb3IgKChwb3MpID0gKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqKWVudHJ5LT5lbGVtczsgXAorCSAgICAgKHBvcykgPCAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopKChjaGFyICopKGVudHJ5KSArIFwKKwkgICAgICAgICAgICAgKGVudHJ5KS0+dGFyZ2V0X29mZnNldCk7IFwKKwkgICAgIChwb3MpID0gKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqKSgoY2hhciAqKShwb3MpICsgXAorCSAgICAgICAgICAgICAocG9zKS0+dS5tYXRjaF9zaXplKSkKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMjA1LDYgKzIyMSw3IEBACiAgKiBAaG9va19tYXNrOgl2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZQogICovCiBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0geworCXN0cnVjdCBuZXQgKm5ldDsKIAljb25zdCBjaGFyICp0YWJsZTsKIAljb25zdCB2b2lkICplbnRyeWluZm87CiAJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaDsKQEAgLTIxNSw2ICsyMzIsNyBAQAogCiAvKiBNYXRjaCBkZXN0cnVjdG9yIHBhcmFtZXRlcnMgKi8KIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0geworCXN0cnVjdCBuZXQgKm5ldDsKIAljb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwogCXZvaWQgKm1hdGNoaW5mbzsKIAl1X2ludDhfdCBmYW1pbHk7CkBAIC0yNDcsNiArMjY1LDcgQEAKICAqIE90aGVyIGZpZWxkcyBzZWUgYWJvdmUuCiAgKi8KIHN0cnVjdCB4dF90Z2Noa19wYXJhbSB7CisJc3RydWN0IG5ldCAqbmV0OwogCWNvbnN0IGNoYXIgKnRhYmxlOwogCWNvbnN0IHZvaWQgKmVudHJ5aW5mbzsKIAljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CkBAIC0yNTcsNiArMjc2LDcgQEAKIAogLyogVGFyZ2V0IGRlc3RydWN0b3IgcGFyYW1ldGVycyAqLwogc3RydWN0IHh0X3RnZHRvcl9wYXJhbSB7CisJc3RydWN0IG5ldCAqbmV0OwogCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAl2b2lkICp0YXJnaW5mbzsKIAl1X2ludDhfdCBmYW1pbHk7CkBAIC0yODEsMTEgKzMwMSwxMSBAQAogCiAJLyogQ2FsbGVkIHdoZW4gZW50cnkgb2YgdGhpcyB0eXBlIGRlbGV0ZWQuICovCiAJdm9pZCAoKmRlc3Ryb3kpKGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKik7Ci0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLyogQ2FsbGVkIHdoZW4gdXNlcnNwYWNlIGFsaWduIGRpZmZlcnMgZnJvbSBrZXJuZWwgc3BhY2Ugb25lICovCi0Jdm9pZCAoKmNvbXBhdF9mcm9tX3VzZXIpKHZvaWQgKmRzdCwgdm9pZCAqc3JjKTsKLQlpbnQgKCpjb21wYXRfdG9fdXNlcikodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKTsKLQorCXZvaWQgKCpjb21wYXRfZnJvbV91c2VyKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyk7CisJaW50ICgqY29tcGF0X3RvX3VzZXIpKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYyk7CisjZW5kaWYKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCkBAIC0yOTQsNyArMzE0LDkgQEAKIAogCWNvbnN0IGNoYXIgKnRhYmxlOwogCXVuc2lnbmVkIGludCBtYXRjaHNpemU7CisjaWZkZWYgQ09ORklHX0NPTVBBVAogCXVuc2lnbmVkIGludCBjb21wYXRzaXplOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGhvb2tzOwogCXVuc2lnbmVkIHNob3J0IHByb3RvOwogCkBAIC0zMjEsMTcgKzM0MywxOSBAQAogCiAJLyogQ2FsbGVkIHdoZW4gZW50cnkgb2YgdGhpcyB0eXBlIGRlbGV0ZWQuICovCiAJdm9pZCAoKmRlc3Ryb3kpKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKik7Ci0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLyogQ2FsbGVkIHdoZW4gdXNlcnNwYWNlIGFsaWduIGRpZmZlcnMgZnJvbSBrZXJuZWwgc3BhY2Ugb25lICovCi0Jdm9pZCAoKmNvbXBhdF9mcm9tX3VzZXIpKHZvaWQgKmRzdCwgdm9pZCAqc3JjKTsKLQlpbnQgKCpjb21wYXRfdG9fdXNlcikodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKTsKLQorCXZvaWQgKCpjb21wYXRfZnJvbV91c2VyKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyk7CisJaW50ICgqY29tcGF0X3RvX3VzZXIpKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYyk7CisjZW5kaWYKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJY29uc3QgY2hhciAqdGFibGU7CiAJdW5zaWduZWQgaW50IHRhcmdldHNpemU7CisjaWZkZWYgQ09ORklHX0NPTVBBVAogCXVuc2lnbmVkIGludCBjb21wYXRzaXplOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGhvb2tzOwogCXVuc2lnbmVkIHNob3J0IHByb3RvOwogCkBAIC0zNTMsNiArMzc3LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptZTsKIAogCXVfaW50OF90IGFmOwkJLyogYWRkcmVzcy9wcm90b2NvbCBmYW1pbHkgKi8KKwlpbnQgcHJpb3JpdHk7CQkvKiBob29rIG9yZGVyICovCiAKIAkvKiBBIHVuaXF1ZSBuYW1lLi4uICovCiAJY29uc3QgY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOwpAQCAtNTE0LDYgKzUzOSw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIHN0cnVjdCBuZl9ob29rX29wcyAqeHRfaG9va19saW5rKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqLCBuZl9ob29rZm4gKik7CitleHRlcm4gdm9pZCB4dF9ob29rX3VubGluayhjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKiwgc3RydWN0IG5mX2hvb2tfb3BzICopOworCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KIApAQCAtNTU0LDExICs1ODIsNyBAQAogICogY3VycmVudCB0YXNrIGFsaWdubWVudCAqLwogCiBzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzIHsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCi0JdV9pbnQzMl90IGNudFs0XTsKLSNlbHNlCi0JdV9pbnQ2NF90IGNudFsyXTsKLSNlbmRpZgorCWNvbXBhdF91NjQgcGNudCwgYmNudDsJCQkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgKi8KIH07CiAKIHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyB7CkBAIC01NjcsMjYgKzU5MSwzMiBAQAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnMgY291bnRlcnNbMF07CiB9OwogCi0jZGVmaW5lIENPTVBBVF9YVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzKS0xKSkgXAotCQkmIH4oX19hbGlnbm9mX18oc3RydWN0IGNvbXBhdF94dF9jb3VudGVycyktMSkpCitzdHJ1Y3QgX2NvbXBhdF94dF9hbGlnbiB7CisJX191OCB1ODsKKwlfX3UxNiB1MTY7CisJX191MzIgdTMyOworCWNvbXBhdF91NjQgdTY0OworfTsKKworI2RlZmluZSBDT01QQVRfWFRfQUxJR04ocykgQUxJR04oKHMpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgX2NvbXBhdF94dF9hbGlnbikpCiAKIGV4dGVybiB2b2lkIHh0X2NvbXBhdF9sb2NrKHVfaW50OF90IGFmKTsKIGV4dGVybiB2b2lkIHh0X2NvbXBhdF91bmxvY2sodV9pbnQ4X3QgYWYpOwogCiBleHRlcm4gaW50IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaG9ydCBkZWx0YSk7CiBleHRlcm4gdm9pZCB4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyh1X2ludDhfdCBhZik7Ci1leHRlcm4gc2hvcnQgeHRfY29tcGF0X2NhbGNfanVtcCh1X2ludDhfdCBhZiwgdW5zaWduZWQgaW50IG9mZnNldCk7CitleHRlcm4gaW50IHh0X2NvbXBhdF9jYWxjX2p1bXAodV9pbnQ4X3QgYWYsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiBleHRlcm4gaW50IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCk7CiBleHRlcm4gaW50IHh0X2NvbXBhdF9tYXRjaF9mcm9tX3VzZXIoc3RydWN0IHh0X2VudHJ5X21hdGNoICptLAogCQkJCSAgICAgdm9pZCAqKmRzdHB0ciwgdW5zaWduZWQgaW50ICpzaXplKTsKLWV4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX3RvX3VzZXIoc3RydWN0IHh0X2VudHJ5X21hdGNoICptLAorZXh0ZXJuIGludCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlcihjb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sCiAJCQkJICAgdm9pZCBfX3VzZXIgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSk7CiAKIGV4dGVybiBpbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KTsKIGV4dGVybiB2b2lkIHh0X2NvbXBhdF90YXJnZXRfZnJvbV91c2VyKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQsCiAJCQkJICAgICAgIHZvaWQgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSk7Ci1leHRlcm4gaW50IHh0X2NvbXBhdF90YXJnZXRfdG9fdXNlcihzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0LAorZXh0ZXJuIGludCB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIoY29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdCwKIAkJCQkgICAgdm9pZCBfX3VzZXIgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DVC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ1QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU2NDEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ1QuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9YVF9DVF9ICisjZGVmaW5lIF9YVF9DVF9ICisKKyNkZWZpbmUgWFRfQ1RfTk9UUkFDSwkweDEKKworc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvIHsKKwl1X2ludDE2X3QJZmxhZ3M7CisJdV9pbnQxNl90CXpvbmU7CisJdV9pbnQzMl90CWN0X2V2ZW50czsKKwl1X2ludDMyX3QJZXhwX2V2ZW50czsKKwljaGFyCQloZWxwZXJbMTZdOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwlzdHJ1Y3QgbmZfY29ubgkqY3QgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmIC8qIF9YVF9DVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAppbmRleCBmMjMzNjUyLi5lOTk0OGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKQEAgLTIxMSw5ICsyMTEsMTEgQEAKIAlyZXR1cm4gKHZvaWQgKillICsgZS0+dGFyZ2V0X29mZnNldDsKIH0KIAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCiAjZGVmaW5lIEFSUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAogCVhUX0VOVFJZX0lURVJBVEUoc3RydWN0IGFycHRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQorI2VuZGlmCiAKIC8qCiAgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgpAQCAtMjU4LDYgKzI2MCw3IEBACiAJLnRhcmdldC5lcnJvcm5hbWUgPSAiRVJST1IiLAkJCQkJICAgICAgIFwKIH0KIAorZXh0ZXJuIHZvaWQgKmFycHRfYWxsb2NfaW5pdGlhbF90YWJsZShjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKik7CiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICphcnB0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsKTsKQEAgLTI5MCwxNCArMjkzLDYgQEAKIAogI2RlZmluZSBDT01QQVRfQVJQVF9BTElHTihzKQlDT01QQVRfWFRfQUxJR04ocykKIAotLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwotI2RlZmluZSBDT01QQVRfQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSBcCi0JWFRfRU5UUllfSVRFUkFURShzdHJ1Y3QgY29tcGF0X2FycHRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQotCi0jZGVmaW5lIENPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUoZW50cmllcywgc2l6ZSwgbiwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgbiwgXAotCQkJCSAgZm4sICMjIGFyZ3MpCi0KICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAjZW5kaWYgLypfX0tFUk5FTF9fKi8KICNlbmRpZiAvKiBfQVJQVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKaW5kZXggM2NjNDBjMS4uMWM2ZjBjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmgKQEAgLTI4OSw3ICsyODksNyBAQAogCQkgICAgIH4oX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKS0xKSkKIGV4dGVybiBzdHJ1Y3QgZWJ0X3RhYmxlICplYnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGVidF90YWJsZSAqdGFibGUpOwotZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3RhYmxlICp0YWJsZSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVidF9kb190YWJsZSh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKICAgIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCmluZGV4IDI3YjNmNTguLjcwNGE3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApAQCAtMjIzLDYgKzIyMyw3IEBACiAJcmV0dXJuICh2b2lkICopZSArIGUtPnRhcmdldF9vZmZzZXQ7CiB9CiAKKyNpZm5kZWYgX19LRVJORUxfXwogLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBJUFRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgXAogCVhUX01BVENIX0lURVJBVEUoc3RydWN0IGlwdF9lbnRyeSwgZSwgZm4sICMjIGFyZ3MpCkBAIC0yMzAsNiArMjMxLDcgQEAKIC8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KICNkZWZpbmUgSVBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKIAlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBpcHRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQorI2VuZGlmCiAKIC8qCiAgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgpAQCAtMjQyLDcgKzI0NCw3IEBACiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGwpOwotZXh0ZXJuIHZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CitleHRlcm4gdm9pZCBpcHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUpOwogCiAvKiBTdGFuZGFyZCBlbnRyeS4gKi8KIHN0cnVjdCBpcHRfc3RhbmRhcmQgewpAQCAtMjgyLDYgKzI4NCw3IEBACiAJLnRhcmdldC5lcnJvcm5hbWUgPSAiRVJST1IiLAkJCQkJICAgICAgIFwKIH0KIAorZXh0ZXJuIHZvaWQgKmlwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHVuc2lnbmVkIGludCBob29rLAogCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCkBAIC0zMTIsMTkgKzMxNSw2IEBACiAKICNkZWZpbmUgQ09NUEFUX0lQVF9BTElHTihzKSAJQ09NUEFUX1hUX0FMSUdOKHMpCiAKLS8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KLSNkZWZpbmUgQ09NUEFUX0lQVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSBcCi0JWFRfTUFUQ0hfSVRFUkFURShzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSwgZSwgZm4sICMjIGFyZ3MpCi0KLS8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KLSNkZWZpbmUgQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSBcCi0JWFRfRU5UUllfSVRFUkFURShzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgZm4sICMjIGFyZ3MpCi0KLS8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KLSNkZWZpbmUgQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKGVudHJpZXMsIHNpemUsIG4sIGZuLCBhcmdzLi4uKSBcCi0JWFRfRU5UUllfSVRFUkFURV9DT05USU5VRShzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgbiwgXAotCQkJCSAgZm4sICMjIGFyZ3MpCi0KICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAjZW5kaWYgLypfX0tFUk5FTF9fKi8KICNlbmRpZiAvKiBfSVBUQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAppbmRleCBiMzEwNTBkLi5lNWJhMDNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtMjgwLDYgKzI4MCw3IEBACiAJcmV0dXJuICh2b2lkICopZSArIGUtPnRhcmdldF9vZmZzZXQ7CiB9CiAKKyNpZm5kZWYgX19LRVJORUxfXwogLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBJUDZUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pIFwKIAlYVF9NQVRDSF9JVEVSQVRFKHN0cnVjdCBpcDZ0X2VudHJ5LCBlLCBmbiwgIyMgYXJncykKQEAgLTI4Nyw2ICsyODgsNyBAQAogLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKIAlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBpcDZ0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBmbiwgIyMgYXJncykKKyNlbmRpZgogCiAvKgogICoJTWFpbiBmaXJld2FsbCBjaGFpbnMgZGVmaW5pdGlvbnMgYW5kIGdsb2JhbCB2YXIncyBkZWZpbml0aW9ucy4KQEAgLTI5NywxMCArMjk5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogZXh0ZXJuIHZvaWQgaXA2dF9pbml0KHZvaWQpIF9faW5pdDsKIAorZXh0ZXJuIHZvaWQgKmlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZShjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKik7CiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICppcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsKTsKLWV4dGVybiB2b2lkIGlwNnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKTsKK2V4dGVybiB2b2lkIGlwNnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpcDZ0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKQEAgLTM0MCwxOCArMzQzLDYgQEAKIAogI2RlZmluZSBDT01QQVRfSVA2VF9BTElHTihzKQlDT01QQVRfWFRfQUxJR04ocykKIAotLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwotI2RlZmluZSBDT01QQVRfSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSBcCi0JWFRfTUFUQ0hfSVRFUkFURShzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnksIGUsIGZuLCAjIyBhcmdzKQotCi0vKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCi0jZGVmaW5lIENPTVBBVF9JUDZUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSwgZW50cmllcywgc2l6ZSwgZm4sICMjIGFyZ3MpCi0KLSNkZWZpbmUgQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURV9DT05USU5VRShlbnRyaWVzLCBzaXplLCBuLCBmbiwgYXJncy4uLikgXAotCVhUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBuLCBcCi0JCQkJICBmbiwgIyMgYXJncykKLQogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KICNlbmRpZiAvKl9fS0VSTkVMX18qLwogI2VuZGlmIC8qIF9JUDZfVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggMjUyNDI2NzIuLmE3NjVlYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0yMSwxNSArMjEsMjAgQEAKIAlfX2JlMzIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7CiAJdTggcmVtb3RlX21hY1tFVEhfQUxFTl07CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4OyAvKiByeF9ucCBsaXN0IGVsZW1lbnQgKi8KIH07CiAKIHN0cnVjdCBuZXRwb2xsX2luZm8gewogCWF0b21pY190IHJlZmNudDsKKwogCWludCByeF9mbGFnczsKIAlzcGlubG9ja190IHJ4X2xvY2s7Ci0Jc3RydWN0IG5ldHBvbGwgKnJ4X25wOyAvKiBuZXRwb2xsIHRoYXQgcmVnaXN0ZXJlZCBhbiByeF9ob29rICovCisJc3RydWN0IGxpc3RfaGVhZCByeF9ucDsgLyogbmV0cG9sbHMgdGhhdCByZWdpc3RlcmVkIGFuIHJ4X2hvb2sgKi8KKwogCXN0cnVjdCBza19idWZmX2hlYWQgYXJwX3R4OyAvKiBsaXN0IG9mIGFycCByZXF1ZXN0cyB0byByZXBseSB0byAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhxOworCiAJc3RydWN0IGRlbGF5ZWRfd29yayB0eF93b3JrOwogfTsKIApAQCAtNTEsNyArNTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIW5waW5mbyB8fCAoIW5waW5mby0+cnhfbnAgJiYgIW5waW5mby0+cnhfZmxhZ3MpKQorCWlmICghbnBpbmZvIHx8IChsaXN0X2VtcHR5KCZucGluZm8tPnJ4X25wKSAmJiAhbnBpbmZvLT5yeF9mbGFncykpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwpAQCAtNjcsNyArNzIsNyBAQAogewogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHNrYi0+ZGV2LT5ucGluZm87CiAKLQlyZXR1cm4gbnBpbmZvICYmIChucGluZm8tPnJ4X25wIHx8IG5waW5mby0+cnhfZmxhZ3MpOworCXJldHVybiBucGluZm8gJiYgKCFsaXN0X2VtcHR5KCZucGluZm8tPnJ4X25wKSB8fCBucGluZm8tPnJ4X2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggMzRmYzZiZS4uNmEyZTQ0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzdHJ1Y3QgcnBjX2NsbnQgKgljbGllbnQ7CQkvKiBSUEMgY2xpZW50IGhhbmRsZSAqLwogCXN0cnVjdCBycGNfY2xudCAqCWNsaWVudF9hY2w7CS8qIEFDTCBSUEMgY2xpZW50IGhhbmRsZSAqLwogCXN0cnVjdCBubG1faG9zdAkJKm5sbV9ob3N0OwkvKiBOTE0gY2xpZW50IGhhbmRsZSAqLwotCXN0cnVjdCBuZnNfaW9zdGF0cyAqCWlvX3N0YXRzOwkvKiBJL08gc3RhdGlzdGljcyAqLworCXN0cnVjdCBuZnNfaW9zdGF0cyBfX3BlcmNwdSAqaW9fc3RhdHM7CS8qIEkvTyBzdGF0aXN0aWNzICovCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmFja2luZ19kZXZfaW5mbzsKIAlhdG9taWNfbG9uZ190CQl3cml0ZWJhY2s7CS8qIG51bWJlciBvZiB3cml0ZWJhY2sgcGFnZXMgKi8KIAlpbnQJCQlmbGFnczsJCS8qIHZhcmlvdXMgZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCmluZGV4IDNmZTAyY2YuLjY0MDcwMmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogCQkJCQkJICAgc2VtYW50aWNzIGFsc28gZm9yIGRhdGEgKi8KICNkZWZpbmUgTklMRlNfTU9VTlRfTk9SRUNPVkVSWQkJMHg0MDAwICAvKiBEaXNhYmxlIHdyaXRlIGFjY2VzcyBkdXJpbmcKIAkJCQkJCSAgIG1vdW50LXRpbWUgcmVjb3ZlcnkgKi8KKyNkZWZpbmUgTklMRlNfTU9VTlRfRElTQ0FSRAkJMHg4MDAwICAvKiBJc3N1ZSBESVNDQVJEIHJlcXVlc3RzICovCiAKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGRhOGVhMmUxOS4uMjhiYTIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTMsNyArMyw3IEBACiAvKgogICogODAyLjExIG5ldGxpbmsgaW50ZXJmYWNlIHB1YmxpYyBoZWFkZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICogQ29weXJpZ2h0IDIwMDggTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CiAgKiBDb3B5cmlnaHQgMjAwOCBMdWlzIENhcmxvcyBDb2JvIDxsdWlzY2FAY296eWJpdC5jb20+CiAgKiBDb3B5cmlnaHQgMjAwOCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgpAQCAtMjcwLDYgKzI3MCw2MCBAQAogICogQE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUzogU2V0IGEgd2lwaHkncyBuZXRucy4gTm90ZSB0aGF0IGFsbCBkZXZpY2VzCiAgKglhc3NvY2lhdGVkIHdpdGggdGhpcyB3aXBoeSBtdXN0IGJlIGRvd24gYW5kIHdpbGwgZm9sbG93LgogICoKKyAqIEBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTDogUmVxdWVzdCB0byByZW1haW4gYXdha2Ugb24gdGhlIHNwZWNpZmllZAorICoJY2hhbm5lbCBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBkbworICoJb2ZmLWNoYW5uZWwgb3BlcmF0aW9ucyBsaWtlIHRyYW5zbWl0IGEgUHVibGljIEFjdGlvbiBmcmFtZSBhbmQgd2FpdCBmb3IKKyAqCWEgcmVzcG9uc2Ugd2hpbGUgYmVpbmcgYXNzb2NpYXRlZCB0byBhbiBBUCBvbiBhbm90aGVyIGNoYW5uZWwuCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIG9yICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2gKKyAqCXJhZGlvIGlzIHVzZWQuICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCisgKglmcmVxdWVuY3kgZm9yIHRoZSBvcGVyYXRpb24gYW5kICVOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIG1heSBiZQorICoJb3B0aW9uYWxseSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjaGFubmVsIHBhcmFtZXRlcnMuCisgKgklTkw4MDIxMV9BVFRSX0RVUkFUSU9OIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzCisgKgl0byByZW1haW4gb24gdGhlIGNoYW5uZWwuIFRoaXMgY29tbWFuZCBpcyBhbHNvIHVzZWQgYXMgYW4gZXZlbnQgdG8KKyAqCW5vdGlmeSB3aGVuIHRoZSByZXF1ZXN0ZWQgZHVyYXRpb24gc3RhcnRzIChpdCBtYXkgdGFrZSBhIHdoaWxlIGZvciB0aGUKKyAqCWRyaXZlciB0byBzY2hlZHVsZSB0aGlzIHRpbWUgZHVlIHRvIG90aGVyIGNvbmN1cnJlbnQgbmVlZHMgZm9yIHRoZQorICoJcmFkaW8pLgorICoJV2hlbiBjYWxsZWQsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSBjb29raWUgKCVOTDgwMjExX0FUVFJfQ09PS0lFKQorICoJdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggYW55IGV2ZW50cyBwZXJ0YWluaW5nIHRvIHRoaXMgcmVxdWVzdDsKKyAqCXRoZSBjb29raWUgaXMgYWxzbyB1c2VkIHRvIGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqIEBOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUw6IFRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgYQorICoJcGVuZGluZyByZW1haW4tb24tY2hhbm5lbCBkdXJhdGlvbiBpZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24gaGFzIGJlZW4KKyAqCWNvbXBsZXRlZCBwcmlvciB0byBleHBpcmF0aW9uIG9mIHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZCBkdXJhdGlvbi4KKyAqCSVOTDgwMjExX0FUVFJfV0lQSFkgb3IgJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAqCXJhZGlvLiBUaGUgJU5MODAyMTFfQVRUUl9DT09LSUUgYXR0cmlidXRlIG11c3QgYmUgZ2l2ZW4gYXMgd2VsbCB0bworICoJdW5pcXVlbHkgaWRlbnRpZnkgdGhlIHJlcXVlc3QuCisgKglUaGlzIGNvbW1hbmQgaXMgYWxzbyB1c2VkIGFzIGFuIGV2ZW50IHRvIG5vdGlmeSB3aGVuIGEgcmVxdWVzdGVkCisgKglyZW1haW4tb24tY2hhbm5lbCBkdXJhdGlvbiBoYXMgZXhwaXJlZC4KKyAqCisgKiBATkw4MDIxMV9DTURfU0VUX1RYX0JJVFJBVEVfTUFTSzogU2V0IHRoZSBtYXNrIG9mIHJhdGVzIHRvIGJlIHVzZWQgaW4gVFgKKyAqCXJhdGUgc2VsZWN0aW9uLiAlTkw4MDIxMV9BVFRSX0lGSU5ERVggaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBpbnRlcmZhY2UKKyAqCWFuZCBATkw4MDIxMV9BVFRSX1RYX1JBVEVTIHRoZSBzZXQgb2YgYWxsb3dlZCByYXRlcy4KKyAqCisgKiBATkw4MDIxMV9DTURfUkVHSVNURVJfQUNUSU9OOiBSZWdpc3RlciBmb3IgcmVjZWl2aW5nIGNlcnRhaW4gYWN0aW9uIGZyYW1lcworICoJKHZpYSBATkw4MDIxMV9DTURfQUNUSU9OKSBmb3IgcHJvY2Vzc2luZyBpbiB1c2Vyc3BhY2UuIFRoaXMgY29tbWFuZAorICoJcmVxdWlyZXMgYW4gaW50ZXJmYWNlIGluZGV4IGFuZCBhIG1hdGNoIGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSBmaXJzdAorICoJZmV3IGJ5dGVzIG9mIHRoZSBmcmFtZSB0aGF0IHNob3VsZCBtYXRjaCwgZS5nLiBhIHNpbmdsZSBieXRlIGZvciBvbmx5CisgKglhIGNhdGVnb3J5IG1hdGNoIG9yIGZvdXIgYnl0ZXMgZm9yIHZlbmRvciBmcmFtZXMgaW5jbHVkaW5nIHRoZSBPVUkuCisgKglUaGUgcmVnaXN0cmF0aW9uIGNhbm5vdCBiZSBkcm9wcGVkLCBidXQgaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5CisgKgl3aGVuIHRoZSBuZXRsaW5rIHNvY2tldCBpcyBjbG9zZWQuIE11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgY2FuIGJlIG1hZGUuCisgKiBATkw4MDIxMV9DTURfQUNUSU9OOiBBY3Rpb24gZnJhbWUgVFggcmVxdWVzdCBhbmQgUlggbm90aWZpY2F0aW9uLiBUaGlzCisgKgljb21tYW5kIGlzIHVzZWQgYm90aCBhcyBhIHJlcXVlc3QgdG8gdHJhbnNtaXQgYW4gQWN0aW9uIGZyYW1lIGFuZCBhcyBhbgorICoJZXZlbnQgaW5kaWNhdGluZyByZWNlcHRpb24gb2YgYW4gQWN0aW9uIGZyYW1lIHRoYXQgd2FzIG5vdCBwcm9jZXNzZWQgaW4KKyAqCWtlcm5lbCBjb2RlLCBidXQgaXMgZm9yIHVzIChpLmUuLCB3aGljaCBtYXkgbmVlZCB0byBiZSBwcm9jZXNzZWQgaW4gYQorICoJdXNlciBzcGFjZSBhcHBsaWNhdGlvbikuICVOTDgwMjExX0FUVFJfRlJBTUUgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZQorICoJZnJhbWUgY29udGVudHMgKGluY2x1ZGluZyBoZWFkZXIpLiAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgKGFuZAorICoJb3B0aW9uYWxseSAlTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSkgaXMgdXNlZCB0byBpbmRpY2F0ZSBvbgorICoJd2hpY2ggY2hhbm5lbCB0aGUgZnJhbWUgaXMgdG8gYmUgdHJhbnNtaXR0ZWQgb3Igd2FzIHJlY2VpdmVkLiBUaGlzCisgKgljaGFubmVsIGhhcyB0byBiZSB0aGUgY3VycmVudCBjaGFubmVsIChyZW1haW4tb24tY2hhbm5lbCBvciB0aGUKKyAqCW9wZXJhdGlvbmFsIGNoYW5uZWwpLiBXaGVuIGNhbGxlZCwgdGhpcyBvcGVyYXRpb24gcmV0dXJucyBhIGNvb2tpZQorICoJKCVOTDgwMjExX0FUVFJfQ09PS0lFKSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgd2l0aCB0aGUgVFggc3RhdHVzIGV2ZW50CisgKglwZXJ0YWluaW5nIHRvIHRoZSBUWCByZXF1ZXN0LgorICogQE5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVM6IFJlcG9ydCBUWCBzdGF0dXMgb2YgYW4gQWN0aW9uIGZyYW1lCisgKgl0cmFuc21pdHRlZCB3aXRoICVOTDgwMjExX0NNRF9BQ1RJT04uICVOTDgwMjExX0FUVFJfQ09PS0lFIGlkZW50aWZpZXMKKyAqCXRoZSBUWCBjb21tYW5kIGFuZCAlTkw4MDIxMV9BVFRSX0ZSQU1FIGluY2x1ZGVzIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqCWZyYW1lLiAlTkw4MDIxMV9BVFRSX0FDSyBmbGFnIGlzIGluY2x1ZGVkIGlmIHRoZSByZWNpcGllbnQgYWNrbm93bGVkZ2VkCisgKgl0aGUgZnJhbWUuCisgKgogICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyCiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzUzLDYgKzQwNywxOCBAQAogCU5MODAyMTFfQ01EX0RFTF9QTUtTQSwKIAlOTDgwMjExX0NNRF9GTFVTSF9QTUtTQSwKIAorCU5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMLAorCU5MODAyMTFfQ01EX0NBTkNFTF9SRU1BSU5fT05fQ0hBTk5FTCwKKworCU5MODAyMTFfQ01EX1NFVF9UWF9CSVRSQVRFX01BU0ssCisKKwlOTDgwMjExX0NNRF9SRUdJU1RFUl9BQ1RJT04sCisJTkw4MDIxMV9DTURfQUNUSU9OLAorCU5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVMsCisKKwlOTDgwMjExX0NNRF9TRVRfUE9XRVJfU0FWRSwKKwlOTDgwMjExX0NNRF9HRVRfUE9XRVJfU0FWRSwKKwogCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLwogCiAJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCkBAIC00MDIsNiArNDY4LDggQEAKICAqIEBOTDgwMjExX0FUVFJfV0lQSFlfUlRTX1RIUkVTSE9MRDogUlRTIHRocmVzaG9sZCAoVFggZnJhbWVzIHdpdGggbGVuZ3RoCiAgKglsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzIHVzZSBSVFMvQ1RTIGhhbmRzaGFrZSk7IGFsbG93ZWQgcmFuZ2U6CiAgKgkwLi42NTUzNiwgZGlzYWJsZSB3aXRoICh1MzIpLTE7IGRvdDExUlRTVGhyZXNob2xkOyB1MzIKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfQ09WRVJBR0VfQ0xBU1M6IENvdmVyYWdlIENsYXNzIGFzIGRlZmluZWQgYnkgSUVFRSA4MDIuMTEKKyAqCXNlY3Rpb24gNy4zLjIuOTsgZG90MTFDb3ZlcmFnZUNsYXNzOyB1OAogICoKICAqIEBOTDgwMjExX0FUVFJfSUZJTkRFWDogbmV0d29yayBpbnRlcmZhY2UgaW5kZXggb2YgdGhlIGRldmljZSB0byBvcGVyYXRlIG9uCiAgKiBATkw4MDIxMV9BVFRSX0lGTkFNRTogbmV0d29yayBpbnRlcmZhY2UgbmFtZQpAQCAtNjA2LDYgKzY3NCwyMyBAQAogICogQE5MODAyMTFfQVRUUl9NQVhfTlVNX1BNS0lEUzogbWF4aW11bSBudW1iZXIgb2YgUE1LSURzIGEgZmlybXdhcmUgY2FuCiAgKgljYWNoZSwgYSB3aXBoeSBhdHRyaWJ1dGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9EVVJBVElPTjogRHVyYXRpb24gb2YgYW4gb3BlcmF0aW9uIGluIG1pbGxpc2Vjb25kcywgdTMyLgorICoKKyAqIEBOTDgwMjExX0FUVFJfQ09PS0lFOiBHZW5lcmljIDY0LWJpdCBjb29raWUgdG8gaWRlbnRpZnkgb2JqZWN0cy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1RYX1JBVEVTOiBOZXN0ZWQgc2V0IG9mIGF0dHJpYnV0ZXMKKyAqCShlbnVtIG5sODAyMTFfdHhfcmF0ZV9hdHRyaWJ1dGVzKSBkZXNjcmliaW5nIFRYIHJhdGVzIHBlciBiYW5kLiBUaGUKKyAqCWVudW0gbmw4MDIxMV9iYW5kIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGluZGV4IChubGFfdHlwZSgpIG9mIHRoZSBuZXN0ZWQKKyAqCWRhdGEuIElmIGEgYmFuZCBpcyBub3QgaW5jbHVkZWQsIGl0IHdpbGwgYmUgY29uZmlndXJlZCB0byBhbGxvdyBhbGwKKyAqCXJhdGVzIGJhc2VkIG9uIG5lZ290aWF0ZWQgc3VwcG9ydGVkIHJhdGVzIGluZm9ybWF0aW9uLiBUaGlzIGF0dHJpYnV0ZQorICoJaXMgdXNlZCB3aXRoICVOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLgorICoKKyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0g6IEEgYmluYXJ5IGF0dHJpYnV0ZSB3aGljaCB0eXBpY2FsbHkgbXVzdCBjb250YWluCisgKglhdCBsZWFzdCBvbmUgYnl0ZSwgY3VycmVudGx5IHVzZWQgd2l0aCBATkw4MDIxMV9DTURfUkVHSVNURVJfQUNUSU9OLgorICoKKyAqIEBOTDgwMjExX0FUVFJfQUNLOiBGbGFnIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGZyYW1lIHdhcworICoJYWNrbm93bGVkZ2VkIGJ5IHRoZSByZWNpcGllbnQuCisgKgogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC03NDMsNiArODI4LDIwIEBACiAJTkw4MDIxMV9BVFRSX1BNS0lELAogCU5MODAyMTFfQVRUUl9NQVhfTlVNX1BNS0lEUywKIAorCU5MODAyMTFfQVRUUl9EVVJBVElPTiwKKworCU5MODAyMTFfQVRUUl9DT09LSUUsCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfQ09WRVJBR0VfQ0xBU1MsCisKKwlOTDgwMjExX0FUVFJfVFhfUkFURVMsCisKKwlOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0gsCisKKwlOTDgwMjExX0FUVFJfQUNLLAorCisJTkw4MDIxMV9BVFRSX1BTX1NUQVRFLAorCiAJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCiAKIAlfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULApAQCAtMTMyMywxMyArMTQyMiwyMCBAQAogICogQE5MODAyMTFfQlNTX0JFQUNPTl9JTlRFUlZBTDogYmVhY29uIGludGVydmFsIG9mIHRoZSAoSSlCU1MgKHUxNikKICAqIEBOTDgwMjExX0JTU19DQVBBQklMSVRZOiBjYXBhYmlsaXR5IGZpZWxkIChDUFUgb3JkZXIsIHUxNikKICAqIEBOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUzogYmluYXJ5IGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZQotICoJcmF3IGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbiAoYmluKQorICoJcmF3IGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbiAoYmluKTsKKyAqCWlmIHRoZSAlTkw4MDIxMV9CU1NfQkVBQ09OX0lFUyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIElFcyBoZXJlIGFyZQorICoJZnJvbSBhIFByb2JlIFJlc3BvbnNlIGZyYW1lOyBvdGhlcndpc2UgdGhleSBhcmUgZnJvbSBhIEJlYWNvbiBmcmFtZS4KKyAqCUhvd2V2ZXIsIGlmIHRoZSBkcml2ZXIgZG9lcyBub3QgaW5kaWNhdGUgdGhlIHNvdXJjZSBvZiB0aGUgSUVzLCB0aGVzZQorICoJSUVzIG1heSBiZSBmcm9tIGVpdGhlciBmcmFtZSBzdWJ0eXBlLgogICogQE5MODAyMTFfQlNTX1NJR05BTF9NQk06IHNpZ25hbCBzdHJlbmd0aCBvZiBwcm9iZSByZXNwb25zZS9iZWFjb24KICAqCWluIG1CbSAoMTAwICogZEJtKSAoczMyKQogICogQE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUM6IHNpZ25hbCBzdHJlbmd0aCBvZiB0aGUgcHJvYmUgcmVzcG9uc2UvYmVhY29uCiAgKglpbiB1bnNwZWNpZmllZCB1bml0cywgc2NhbGVkIHRvIDAuLjEwMCAodTgpCiAgKiBATkw4MDIxMV9CU1NfU1RBVFVTOiBzdGF0dXMsIGlmIHRoaXMgQlNTIGlzICJ1c2VkIgogICogQE5MODAyMTFfQlNTX1NFRU5fTVNfQUdPOiBhZ2Ugb2YgdGhpcyBCU1MgZW50cnkgaW4gbXMKKyAqIEBOTDgwMjExX0JTU19CRUFDT05fSUVTOiBiaW5hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlIHJhdyBpbmZvcm1hdGlvbgorICoJZWxlbWVudHMgZnJvbSBhIEJlYWNvbiBmcmFtZSAoYmluKTsgbm90IHByZXNlbnQgaWYgbm8gQmVhY29uIGZyYW1lIGhhcworICoJeWV0IGJlZW4gcmVjZWl2ZWQKICAqIEBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1Q6IGludGVybmFsCiAgKiBATkw4MDIxMV9CU1NfTUFYOiBoaWdoZXN0IEJTUyBhdHRyaWJ1dGUKICAqLwpAQCAtMTM0NSw2ICsxNDUxLDcgQEAKIAlOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLAogCU5MODAyMTFfQlNTX1NUQVRVUywKIAlOTDgwMjExX0JTU19TRUVOX01TX0FHTywKKwlOTDgwMjExX0JTU19CRUFDT05fSUVTLAogCiAJLyoga2VlcCBsYXN0ICovCiAJX19OTDgwMjExX0JTU19BRlRFUl9MQVNULApAQCAtMTQ0Miw0ICsxNTQ5LDM4IEBACiAJTkw4MDIxMV9LRVlfTUFYID0gX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUIC0gMQogfTsKIAorLyoqCisgKiBlbnVtIG5sODAyMTFfdHhfcmF0ZV9hdHRyaWJ1dGVzIC0gVFggcmF0ZSBzZXQgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9UWFJBVEVfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfVFhSQVRFX0xFR0FDWTogTGVnYWN5IChub24tTUNTKSByYXRlcyBhbGxvd2VkIGZvciBUWCByYXRlIHNlbGVjdGlvbgorICoJaW4gYW4gYXJyYXkgb2YgcmF0ZXMgYXMgZGVmaW5lZCBpbiBJRUVFIDgwMi4xMSA3LjMuMi4yICh1OCB2YWx1ZXMgd2l0aAorICoJMSA9IDUwMCBrYnBzKSBidXQgd2l0aG91dCB0aGUgSUUgbGVuZ3RoIHJlc3RyaWN0aW9uIChhdCBtb3N0CisgKgklTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyBpbiBhIHNpbmdsZSBhcnJheSkuCisgKiBAX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNUOiBpbnRlcm5hbAorICogQE5MODAyMTFfVFhSQVRFX01BWDogaGlnaGVzdCBUWCByYXRlIGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfdHhfcmF0ZV9hdHRyaWJ1dGVzIHsKKwlfX05MODAyMTFfVFhSQVRFX0lOVkFMSUQsCisJTkw4MDIxMV9UWFJBVEVfTEVHQUNZLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNULAorCU5MODAyMTFfVFhSQVRFX01BWCA9IF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2JhbmQgLSBGcmVxdWVuY3kgYmFuZAorICogQE5MODAyMTFfQkFORF8yR0haIC0gMi40IEdIeiBJU00gYmFuZAorICogQE5MODAyMTFfQkFORF81R0haIC0gYXJvdW5kIDUgR0h6IGJhbmQgKDQuOSAtIDUuNyBHSHopCisgKi8KK2VudW0gbmw4MDIxMV9iYW5kIHsKKwlOTDgwMjExX0JBTkRfMkdIWiwKKwlOTDgwMjExX0JBTkRfNUdIWiwKK307CisKK2VudW0gbmw4MDIxMV9wc19zdGF0ZSB7CisJTkw4MDIxMV9QU19ESVNBQkxFRCwKKwlOTDgwMjExX1BTX0VOQUJMRUQsCit9OworCiAjZW5kaWYgLyogX19MSU5VWF9OTDgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCBlN2ZhY2Q4Li5mNmQ5Y2JjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC0xOSw2ICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgQ09ORklHX09GCiAKIHR5cGVkZWYgdTMyIHBoYW5kbGU7CiB0eXBlZGVmIHUzMiBpaGFuZGxlOwpAQCAtMzksMTAgKzQ0LDcgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICp0eXBlOwotCXBoYW5kbGUJbm9kZTsKLSNpZiAhZGVmaW5lZChDT05GSUdfU1BBUkMpCi0JcGhhbmRsZSBsaW51eF9waGFuZGxlOwotI2VuZGlmCisJcGhhbmRsZSBwaGFuZGxlOwogCWNoYXIJKmZ1bGxfbmFtZTsKIAogCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKQEAgLTYzLDYgKzY1LDExIEBACiAjZW5kaWYKIH07CiAKKy8qIFBvaW50ZXIgZm9yIGZpcnN0IGVudHJ5IGluIGNoYWluIG9mIGFsbCBub2Rlcy4gKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOworZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsKKwogc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV9jaGVja19mbGFnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbiwgdW5zaWduZWQgbG9uZyBmbGFnKQogewogCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKQEAgLTczLDEyICs4MCw2IEBACiAJc2V0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCi17Ci0JZG4tPnBkZSA9IGRlOwotfQotCiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX2FsbF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpCkBAIC0xMDEsMjYgKzEwMiwzNiBAQAogICovCiAKIC8qIEhlbHBlciB0byByZWFkIGEgYmlnIG51bWJlcjsgc2l6ZSBpcyBpbiBjZWxscyAobm90IGJ5dGVzKSAqLwotc3RhdGljIGlubGluZSB1NjQgb2ZfcmVhZF9udW1iZXIoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfbnVtYmVyKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7CiAJdTY0IHIgPSAwOwogCXdoaWxlIChzaXplLS0pCi0JCXIgPSAociA8PCAzMikgfCAqKGNlbGwrKyk7CisJCXIgPSAociA8PCAzMikgfCBiZTMyX3RvX2NwdSgqKGNlbGwrKykpOwogCXJldHVybiByOwogfQogCiAvKiBMaWtlIG9mX3JlYWRfbnVtYmVyLCBidXQgd2Ugd2FudCBhbiB1bnNpZ25lZCBsb25nIHJlc3VsdCAqLwotI2lmZGVmIENPTkZJR19QUEMzMgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9mX3JlYWRfdWxvbmcoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7Ci0JcmV0dXJuIGNlbGxbc2l6ZS0xXTsKKwkvKiB0b3NzIGF3YXkgdXBwZXIgYml0cyBpZiB1bnNpZ25lZCBsb25nIGlzIHNtYWxsZXIgdGhhbiB1NjQgKi8KKwlyZXR1cm4gb2ZfcmVhZF9udW1iZXIoY2VsbCwgc2l6ZSk7CiB9Ci0jZWxzZQotI2RlZmluZSBvZl9yZWFkX3Vsb25nKGNlbGwsIHNpemUpCW9mX3JlYWRfbnVtYmVyKGNlbGwsIHNpemUpCi0jZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKKy8qIERlZmF1bHQgI2FkZHJlc3MgYW5kICNzaXplIGNlbGxzLiAgQWxsb3cgYXJjaCBhc20vcHJvbS5oIHRvIG92ZXJyaWRlICovCisjaWYgIWRlZmluZWQoT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCkKKyNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCAxCisjZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQgMQorI2VuZGlmCisKKy8qIERlZmF1bHQgc3RyaW5nIGNvbXBhcmUgZnVuY3Rpb25zLCBBbGxvdyBhcmNoIGFzbS9wcm9tLmggdG8gb3ZlcnJpZGUgKi8KKyNpZiAhZGVmaW5lZChvZl9jb21wYXRfY21wKQorI2RlZmluZSBvZl9jb21wYXRfY21wKHMxLCBzMiwgbCkJc3RybmNhc2VjbXAoKHMxKSwgKHMyKSwgKGwpKQorI2RlZmluZSBvZl9wcm9wX2NtcChzMSwgczIpCQlzdHJjbXAoKHMxKSwgKHMyKSkKKyNkZWZpbmUgb2Zfbm9kZV9jbXAoczEsIHMyKQkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQorI2VuZGlmCisKIC8qIGZsYWcgZGVzY3JpcHRpb25zICovCiAjZGVmaW5lIE9GX0RZTkFNSUMJMSAvKiBub2RlIGFuZCBwcm9wZXJ0aWVzIHdlcmUgYWxsb2NhdGVkIHZpYSBrbWFsbG9jICovCiAjZGVmaW5lIE9GX0RFVEFDSEVECTIgLyogbm9kZSBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZSAqLwpAQCAtMTg3LDQgKzE5OCwxOSBAQAogCWNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgY29uc3QgY2hhciAqY2VsbHNfbmFtZSwgaW50IGluZGV4LAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKm91dF9ub2RlLCBjb25zdCB2b2lkICoqb3V0X2FyZ3MpOwogCitleHRlcm4gaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOworCitleHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7CitleHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CitleHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKQorLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCitleHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CitleHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19PRiAqLwogI2VuZGlmIC8qIF9MSU5VWF9PRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oIGIvaW5jbHVkZS9saW51eC9vZl9mZHQuaAppbmRleCA0MWQ0MzJiLi5hMWNhOTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfZmR0LmgKQEAgLTQyLDQ1ICs0Miw2MiBAQAogICogZW5kcyB3aGVuIHNpemUgaXMgMAogICovCiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgewotCXUzMgltYWdpYzsJCQkvKiBtYWdpYyB3b3JkIE9GX0RUX0hFQURFUiAqLwotCXUzMgl0b3RhbHNpemU7CQkvKiB0b3RhbCBzaXplIG9mIERUIGJsb2NrICovCi0JdTMyCW9mZl9kdF9zdHJ1Y3Q7CQkvKiBvZmZzZXQgdG8gc3RydWN0dXJlICovCi0JdTMyCW9mZl9kdF9zdHJpbmdzOwkJLyogb2Zmc2V0IHRvIHN0cmluZ3MgKi8KLQl1MzIJb2ZmX21lbV9yc3ZtYXA7CQkvKiBvZmZzZXQgdG8gbWVtb3J5IHJlc2VydmUgbWFwICovCi0JdTMyCXZlcnNpb247CQkvKiBmb3JtYXQgdmVyc2lvbiAqLwotCXUzMglsYXN0X2NvbXBfdmVyc2lvbjsJLyogbGFzdCBjb21wYXRpYmxlIHZlcnNpb24gKi8KKwlfX2JlMzIJbWFnaWM7CQkJLyogbWFnaWMgd29yZCBPRl9EVF9IRUFERVIgKi8KKwlfX2JlMzIJdG90YWxzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLworCV9fYmUzMglvZmZfZHRfc3RydWN0OwkJLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLworCV9fYmUzMglvZmZfZHRfc3RyaW5nczsJCS8qIG9mZnNldCB0byBzdHJpbmdzICovCisJX19iZTMyCW9mZl9tZW1fcnN2bWFwOwkJLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLworCV9fYmUzMgl2ZXJzaW9uOwkJLyogZm9ybWF0IHZlcnNpb24gKi8KKwlfX2JlMzIJbGFzdF9jb21wX3ZlcnNpb247CS8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCiAJLyogdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyAqLwotCXUzMglib290X2NwdWlkX3BoeXM7CS8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCisJX19iZTMyCWJvb3RfY3B1aWRfcGh5czsJLyogUGh5c2ljYWwgQ1BVIGlkIHdlJ3JlIGJvb3Rpbmcgb24gKi8KIAkvKiB2ZXJzaW9uIDMgZmllbGRzIGJlbG93ICovCi0JdTMyCWR0X3N0cmluZ3Nfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgRFQgc3RyaW5ncyBibG9jayAqLworCV9fYmUzMglkdF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KIAkvKiB2ZXJzaW9uIDE3IGZpZWxkcyBiZWxvdyAqLwotCXUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLworCV9fYmUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLwogfTsKIAorLyogVEJEOiBUZW1wb3JhcnkgZXhwb3J0IG9mIGZkdCBnbG9iYWxzIC0gcmVtb3ZlIHdoZW4gY29kZSBmdWxseSBtZXJnZWQgKi8KK2V4dGVybiBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7CitleHRlcm4gaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworZXh0ZXJuIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKKwogLyogRm9yIHNjYW5uaW5nIHRoZSBmbGF0IGRldmljZS10cmVlIGF0IGJvb3QgdGltZSAqLwotZXh0ZXJuIGludCBfX2luaXQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCQkgICAgdm9pZCAqZGF0YSksCi0JCQkJICB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUpOwotZXh0ZXJuIGludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKTsKK2V4dGVybiBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpOworZXh0ZXJuIGludCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpOworZXh0ZXJuIGludCBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKTsKK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbih1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpOworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiB1NjQgZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaCh1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK2V4dGVybiB1NjQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApOworCisvKgorICogSWYgQkxLX0RFVl9JTklUUkQsIHRoZSBmZHQgZWFybHkgaW5pdCBjb2RlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICogdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGFyY2ggY29kZS4gc3RhcnQgYW5kIGVuZCBhcmUgc3BlY2lmaWVkIGFzCisgKiBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZgorCisvKiBFYXJseSBmbGF0IHRyZWUgc2NhbiBob29rcyAqLworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CiAKIC8qIE90aGVyIFByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICopOwotZXh0ZXJuIGludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKLWV4dGVybiB2b2lkIHByaW50X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKLWV4dGVybiBpbnQgcHJvbV9uX2ludHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7Ci1leHRlcm4gdm9pZCBwcm9tX2dldF9pcnFfc2Vuc2VzKHVuc2lnbmVkIGNoYXIgKnNlbnNlcywgaW50IG9mZiwgaW50IG1heCk7Ci1leHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7Ci1leHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7Ci1leHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAotCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfT0ZfRkRUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb21hcGZiLmggYi9pbmNsdWRlL2xpbnV4L29tYXBmYi5oCmluZGV4IGY0NmM0MGEuLjliZGQ5MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb21hcGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9vbWFwZmIuaApAQCAtNTcsNiArNTcsNyBAQAogI2RlZmluZSBPTUFQRkJfV0FJVEZPUkdPCU9NQVBfSU8oNjApCiAjZGVmaW5lIE9NQVBGQl9HRVRfVlJBTV9JTkZPCU9NQVBfSU9SKDYxLCBzdHJ1Y3Qgb21hcGZiX3ZyYW1faW5mbykKICNkZWZpbmUgT01BUEZCX1NFVF9URUFSU1lOQwlPTUFQX0lPVyg2Miwgc3RydWN0IG9tYXBmYl90ZWFyc3luY19pbmZvKQorI2RlZmluZSBPTUFQRkJfR0VUX0RJU1BMQVlfSU5GTwlPTUFQX0lPUig2Mywgc3RydWN0IG9tYXBmYl9kaXNwbGF5X2luZm8pCiAKICNkZWZpbmUgT01BUEZCX0NBUFNfR0VORVJJQ19NQVNLCTB4MDAwMDBmZmYKICNkZWZpbmUgT01BUEZCX0NBUFNfTENEQ19NQVNLCQkweDAwZmZmMDAwCkBAIC0yMDYsNiArMjA3LDE0IEBACiAJX191MTYgcmVzZXJ2ZWQyOwogfTsKIAorc3RydWN0IG9tYXBmYl9kaXNwbGF5X2luZm8geworCV9fdTE2IHhyZXM7CisJX191MTYgeXJlczsKKwlfX3UzMiB3aWR0aDsJLyogcGh5cyB3aWR0aCBvZiB0aGUgZGlzcGxheSBpbiBtaWNyb21ldGVycyAqLworCV9fdTMyIGhlaWdodDsJLyogcGh5cyBoZWlnaHQgb2YgdGhlIGRpc3BsYXkgaW4gbWljcm9tZXRlcnMgKi8KKwlfX3UzMiByZXNlcnZlZFs1XTsKK307CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYxMWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogcGFkYXRhLmggLSBoZWFkZXIgZm9yIHRoZSBwYWRhdGEgcGFyYWxsZWxpemF0aW9uIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgUEFEQVRBX0gKKyNkZWZpbmUgUEFEQVRBX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcGFkYXRhX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJaW50CQkJY2JfY3B1OworCWludAkJCXNlcV9ucjsKKwlpbnQJCQlpbmZvOworCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcGFyYWxsZWwpKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKTsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAoKnNlcmlhbCkoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOworfTsKKworc3RydWN0IHBhZGF0YV9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdHJ1Y3QgcGFkYXRhX3F1ZXVlIHsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJcGFyYWxsZWw7CisJc3RydWN0IHBhZGF0YV9saXN0CXJlb3JkZXI7CisJc3RydWN0IHBhZGF0YV9saXN0CXNlcmlhbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0CXN3b3JrOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICAgICpwZDsKKwlhdG9taWNfdAkJbnVtX29iajsKKwlpbnQJCQljcHVfaW5kZXg7Cit9OworCitzdHJ1Y3QgcGFyYWxsZWxfZGF0YSB7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZQkqcGluc3Q7CisJc3RydWN0IHBhZGF0YV9xdWV1ZQkqcXVldWU7CisJYXRvbWljX3QJCXNlcV9ucjsKKwlhdG9taWNfdAkJcmVvcmRlcl9vYmplY3RzOworCWF0b21pY190ICAgICAgICAgICAgICAgIHJlZmNudDsKKwl1bnNpZ25lZCBpbnQJCW1heF9zZXFfbnI7CisJY3B1bWFza192YXJfdAkJY3B1bWFzazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOworfTsKKworc3RydWN0IHBhZGF0YV9pbnN0YW5jZSB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICAgY3B1X25vdGlmaWVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJY3B1bWFza192YXJfdCAgICAgICAgICAgY3B1bWFzazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJdTgJCQlmbGFnczsKKyNkZWZpbmUJUEFEQVRBX0lOSVQJCTEKKyNkZWZpbmUJUEFEQVRBX1JFU0VUCQkyCit9OworCitleHRlcm4gc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKK2V4dGVybiB2b2lkIHBhZGF0YV9mcmVlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiBpbnQgcGFkYXRhX2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICAgc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEsIGludCBjYl9jcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX2RvX3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSk7CitleHRlcm4gaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICAgIGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7CitleHRlcm4gaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiB2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDkzYTdjMDhmLi5jOGI2NDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC0xMSw2ICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAogI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOworCiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5idXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBjMTk2OGY0Li5lYzk1ZWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE4Nyw2ICsxODcsMzMgQEAKIAlQQ0lfQlVTX0ZMQUdTX05PX01NUkJDID0gKF9fZm9yY2UgcGNpX2J1c19mbGFnc190KSAyLAogfTsKIAorLyogQmFzZWQgb24gdGhlIFBDSSBIb3RwbHVnIFNwZWMsIGJ1dCBzb21lIHZhbHVlcyBhcmUgbWFkZSB1cCBieSB1cyAqLworZW51bSBwY2lfYnVzX3NwZWVkIHsKKwlQQ0lfU1BFRURfMzNNSHoJCQk9IDB4MDAsCisJUENJX1NQRUVEXzY2TUh6CQkJPSAweDAxLAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYCQk9IDB4MDIsCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYCQk9IDB4MDMsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYCQk9IDB4MDQsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDCT0gMHgwNSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDCT0gMHgwNiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDCT0gMHgwNywKKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYJPSAweDA5LAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYJPSAweDBhLAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjYJPSAweDBiLAorCUFHUF9VTktOT1dOCQkJPSAweDBjLAorCUFHUF8xWAkJCQk9IDB4MGQsCisJQUdQXzJYCQkJCT0gMHgwZSwKKwlBR1BfNFgJCQkJPSAweDBmLAorCUFHUF84WAkJCQk9IDB4MTAsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzCT0gMHgxMSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzCT0gMHgxMiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCT0gMHgxMywKKwlQQ0lFX1NQRUVEXzJfNUdUCQk9IDB4MTQsCisJUENJRV9TUEVFRF81XzBHVAkJPSAweDE1LAorCVBDSUVfU1BFRURfOF8wR1QJCT0gMHgxNiwKKwlQQ0lfU1BFRURfVU5LTk9XTgkJPSAweGZmLAorfTsKKwogc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgewogCXN0cnVjdCBobGlzdF9ub2RlIG5leHQ7CiAJY2hhciBjYXBfbnI7CkBAIC0yMzksNiArMjY2LDcgQEAKIAkJCQkJICAgY29uZmlndXJhdGlvbiBzcGFjZSAqLwogCXVuc2lnbmVkIGludAlwbWVfc3VwcG9ydDo1OwkvKiBCaXRtYXNrIG9mIHN0YXRlcyBmcm9tIHdoaWNoIFBNRSMKIAkJCQkJICAgY2FuIGJlIGdlbmVyYXRlZCAqLworCXVuc2lnbmVkIGludAlwbWVfaW50ZXJydXB0OjE7CiAJdW5zaWduZWQgaW50CWQxX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQxIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLwpAQCAtMjc1LDcgKzMwMyw4IEBACiAJdW5zaWduZWQgaW50CW1zaXhfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGludAlhcmlfZW5hYmxlZDoxOwkvKiBBUkkgZm9yd2FyZGluZyAqLwogCXVuc2lnbmVkIGludAlpc19tYW5hZ2VkOjE7Ci0JdW5zaWduZWQgaW50CWlzX3BjaWU6MTsKKwl1bnNpZ25lZCBpbnQJaXNfcGNpZToxOwkvKiBPYnNvbGV0ZS4gV2lsbCBiZSByZW1vdmVkLgorCQkJCQkgICBVc2UgcGNpX2lzX3BjaWUoKSBpbnN0ZWFkICovCiAJdW5zaWduZWQgaW50ICAgIG5lZWRzX2ZyZXNldDoxOyAvKiBEZXYgcmVxdWlyZXMgZnVuZGFtZW50YWwgcmVzZXQgKi8KIAl1bnNpZ25lZCBpbnQJc3RhdGVfc2F2ZWQ6MTsKIAl1bnNpZ25lZCBpbnQJaXNfcGh5c2ZuOjE7CkBAIC0zMzUsOSArMzY0LDI2IEBACiAJaGxpc3RfYWRkX2hlYWQoJm5ld19jYXAtPm5leHQsICZwY2lfZGV2LT5zYXZlZF9jYXBfc3BhY2UpOwogfQogCi0jaWZuZGVmIFBDSV9CVVNfTlVNX1JFU09VUkNFUwotI2RlZmluZSBQQ0lfQlVTX05VTV9SRVNPVVJDRVMJMTYKLSNlbmRpZgorLyoKKyAqIFRoZSBmaXJzdCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSBQQ0kgYnVzIHJlc291cmNlcyAodGhvc2UgdGhhdCBjb3JyZXNwb25kCisgKiB0byBQMlAgb3IgQ2FyZEJ1cyBicmlkZ2Ugd2luZG93cykgZ28gaW4gYSB0YWJsZS4gIEFkZGl0aW9uYWwgb25lcyAoZm9yCisgKiBidXNlcyBiZWxvdyBob3N0IGJyaWRnZXMgb3Igc3VidHJhY3RpdmUgZGVjb2RlIGJyaWRnZXMpIGdvIGluIHRoZSBsaXN0LgorICogVXNlIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoKSB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZXMuCisgKi8KKworLyoKKyAqIFBDSV9TVUJUUkFDVElWRV9ERUNPREUgbWVhbnMgdGhlIGJyaWRnZSBmb3J3YXJkcyB0aGUgd2luZG93IGltcGxpY2l0bHkKKyAqIGFuZCB0aGVyZSdzIG5vIHdheSB0byBwcm9ncmFtIHRoZSBicmlkZ2Ugd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgd2luZG93LgorICogVGhpcyBkb2VzIG5vdCBhcHBseSB0byBBQ1BJIF9DUlMgd2luZG93cywgZXZlbiB3aXRoIHRoZSBfREVDIHN1YnRyYWN0aXZlLQorICogZGVjb2RlIGJpdCBzZXQsIGJlY2F1c2UgdGhleSBhcmUgZXhwbGljaXQgYW5kIGNhbiBiZSBwcm9ncmFtbWVkIHdpdGggX1NSUy4KKyAqLworI2RlZmluZSBQQ0lfU1VCVFJBQ1RJVkVfREVDT0RFCTB4MQorCitzdHJ1Y3QgcGNpX2J1c19yZXNvdXJjZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CiAKICNkZWZpbmUgUENJX1JFR0lPTl9GTEFHX01BU0sJMHgwZlUJLyogVGhlc2UgYml0cyBvZiByZXNvdXJjZSBmbGFncyB0ZWxsIHVzIHRoZSBQQ0kgcmVnaW9uIGZsYWdzICovCiAKQEAgLTM0OCw4ICszOTQsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsJLyogbGlzdCBvZiBkZXZpY2VzIG9uIHRoaXMgYnVzICovCiAJc3RydWN0IHBjaV9kZXYJKnNlbGY7CQkvKiBicmlkZ2UgZGV2aWNlIGFzIHNlZW4gYnkgcGFyZW50ICovCiAJc3RydWN0IGxpc3RfaGVhZCBzbG90czsJCS8qIGxpc3Qgb2Ygc2xvdHMgb24gdGhpcyBidXMgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlc291cmNlW1BDSV9CVVNfTlVNX1JFU09VUkNFU107Ci0JCQkJCS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFX05VTV07CisJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZXM7CS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCiAKIAlzdHJ1Y3QgcGNpX29wcwkqb3BzOwkJLyogY29uZmlndXJhdGlvbiBhY2Nlc3MgZnVuY3Rpb25zICovCiAJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KQEAgLTM1OSw2ICs0MDUsOCBAQAogCXVuc2lnbmVkIGNoYXIJcHJpbWFyeTsJLyogbnVtYmVyIG9mIHByaW1hcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzZWNvbmRhcnk7CS8qIG51bWJlciBvZiBzZWNvbmRhcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzdWJvcmRpbmF0ZTsJLyogbWF4IG51bWJlciBvZiBzdWJvcmRpbmF0ZSBidXNlcyAqLworCXVuc2lnbmVkIGNoYXIJbWF4X2J1c19zcGVlZDsJLyogZW51bSBwY2lfYnVzX3NwZWVkICovCisJdW5zaWduZWQgY2hhcgljdXJfYnVzX3NwZWVkOwkvKiBlbnVtIHBjaV9idXNfc3BlZWQgKi8KIAogCWNoYXIJCW5hbWVbNDhdOwogCkBAIC01NjMsNyArNjExLDggQEAKIGNoYXIgKnBjaWJpb3Nfc2V0dXAoY2hhciAqc3RyKTsKIAogLyogVXNlZCBvbmx5IHdoZW4gZHJpdmVycy9wY2kvc2V0dXAuYyBpcyB1c2VkICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQlyZXNvdXJjZV9zaXplX3QsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90KTsKIHZvaWQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwogCkBAIC01ODksNiArNjM4LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfYWRkX25ld19idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQlpbnQgYnVzbnIpOwordm9pZCBwY2llX3VwZGF0ZV9saW5rX3NwZWVkKHN0cnVjdCBwY2lfYnVzICpidXMsIHUxNiBsaW5rX3N0YXR1cyk7CiBzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9jcmVhdGVfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBpbnQgc2xvdF9uciwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Zyk7CkBAIC02MTIsMTUgKzY2MiwxMiBAQAogZXh0ZXJuIHZvaWQgcGNpX3N0b3BfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX3NldHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBleHRlcm4gdm9pZCBwY2lfc29ydF9icmVhZHRoZmlyc3Qodm9pZCk7CisjZGVmaW5lIGRldl9pc19wY2koZCkgKChkKS0+YnVzID09ICZwY2lfYnVzX3R5cGUpCisjZGVmaW5lIGRldl9pc19wZihkKSAoKGRldl9pc19wY2koZCkgPyB0b19wY2lfZGV2KGQpLT5pc19waHlzZm4gOiBmYWxzZSkpCisjZGVmaW5lIGRldl9udW1fdmYoZCkgKChkZXZfaXNfcGNpKGQpID8gcGNpX251bV92Zih0b19wY2lfZGV2KGQpKSA6IDApKQogCiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gY2FyZCBkcml2ZXJzICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQotc3RydWN0IHBjaV9kZXYgX19kZXByZWNhdGVkICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKLSNlbmRpZiAvKiBDT05GSUdfUENJX0xFR0FDWSAqLwotCiBlbnVtIHBjaV9sb3N0X2ludGVycnVwdF9yZWFzb24gewogCVBDSV9MT1NUX0lSUV9OT19JTkZPUk1BVElPTiA9IDAsCiAJUENJX0xPU1RfSVJRX0RJU0FCTEVfTVNJLApAQCAtNzUwLDExICs3OTcsMTkgQEAKIHBjaV9wb3dlcl90IHBjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGJvb2wgcGNpX3BtZV9jYXBhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTsKIHZvaWQgcGNpX3BtZV9hY3RpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwotaW50IHBjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwgYm9vbCBlbmFibGUpOworaW50IF9fcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLAorCQkgICAgICBib29sIHJ1bnRpbWUsIGJvb2wgZW5hYmxlKTsKIGludCBwY2lfd2FrZV9mcm9tX2QzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIHBjaV9wb3dlcl90IHBjaV90YXJnZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3ByZXBhcmVfdG9fc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2JhY2tfZnJvbV9zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2Jvb2wgcGNpX2Rldl9ydW5fd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLAorCQkJCSAgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIF9fcGNpX2VuYWJsZV93YWtlKGRldiwgc3RhdGUsIGZhbHNlLCBlbmFibGUpOworfQogCiAvKiBGb3IgdXNlIGJ5IGFyY2ggd2l0aCBjdXN0b20gcHJvYmUgY29kZSAqLwogdm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtNzc2LDYgKzgzMSw3IEBACiB2b2lkIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwordm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKTsKIHZvaWQgcGRldl9lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICopOwogdm9pZCBwZGV2X3NvcnRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCByZXNvdXJjZV9saXN0ICopOwogaW50IHBjaV9lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIGludCBtYXNrKTsKQEAgLTc5MywxMiArODQ5LDIzIEBACiB2b2lkIHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogZHJpdmVycy9wY2kvYnVzLmMgKi8KK3ZvaWQgcGNpX2J1c19hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBmbGFncyk7CitzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9idXNfcmVzb3VyY2Vfbihjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgbik7Cit2b2lkIHBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKworI2RlZmluZSBwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKQkJCQlcCisJZm9yIChpID0gMDsJCQkJCQkJXAorCSAgICAocmVzID0gcGNpX2J1c19yZXNvdXJjZV9uKGJ1cywgaSkpIHx8IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgXAorCSAgICAgaSsrKQorCiBpbnQgX19tdXN0X2NoZWNrIHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKIAkJCXJlc291cmNlX3NpemVfdCBhbGlnbiwgcmVzb3VyY2Vfc2l6ZV90IG1pbiwKIAkJCXVuc2lnbmVkIGludCB0eXBlX21hc2ssCi0JCQl2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCXJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJCXJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJICByZXNvdXJjZV9zaXplX3QpLAogCQkJdm9pZCAqYWxpZ25mX2RhdGEpOwogdm9pZCBwY2lfZW5hYmxlX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKQEAgLTk1OSw2ICsxMDI2LDExIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BDSV9ET01BSU5TICovCiAKKy8qIHNvbWUgYXJjaGl0ZWN0dXJlcyByZXF1aXJlIGFkZGl0aW9uYWwgc2V0dXAgdG8gZGlyZWN0IFZHQSB0cmFmZmljICovCit0eXBlZGVmIGludCAoKmFyY2hfc2V0X3ZnYV9zdGF0ZV90KShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBkZWNvZGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSk7CitleHRlcm4gdm9pZCBwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZShhcmNoX3NldF92Z2Ffc3RhdGVfdCBmdW5jKTsKKwogI2Vsc2UgLyogQ09ORklHX1BDSSBpcyBub3QgZW5hYmxlZCAqLwogCiAvKgpAQCAtOTc3LDEzICsxMDQ5LDYgQEAKIF9QQ0lfTk9QX0FMTChyZWFkLCAqKQogX1BDSV9OT1BfQUxMKHdyaXRlLCkKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCi0JCQkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCiAJCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCkBAIC0xMTMzLDYgKzExOTgsOSBAQAogCQkJCQkJdW5zaWduZWQgaW50IGRldmZuKQogeyByZXR1cm4gTlVMTDsgfQogCisjZGVmaW5lIGRldl9pc19wY2koZCkgKGZhbHNlKQorI2RlZmluZSBkZXZfaXNfcGYoZCkgKGZhbHNlKQorI2RlZmluZSBkZXZfbnVtX3ZmKGQpICgwKQogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogLyogSW5jbHVkZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgKi8KQEAgLTEyNDEsOCArMTMwOSwxMiBAQAogCURFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oLnBjaV9maXh1cF9zdXNwZW5kLAkJCVwKIAkJCXN1c3BlbmQjI3ZlbmRvciMjZGV2aWNlIyNob29rLCB2ZW5kb3IsIGRldmljZSwgaG9vaykKIAotCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywKKwkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikge30KKyNlbmRpZgogCiB2b2lkIF9faW9tZW0gKnBjaW1faW9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuKTsKIHZvaWQgcGNpbV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwpAQCAtMTI5MCw2ICsxMzYyLDcgQEAKIGV4dGVybiBpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKTsKIGV4dGVybiB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IHBjaV9zcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQogewpAQCAtMTMwMiw2ICsxMzc1LDEwIEBACiB7CiAJcmV0dXJuIElSUV9OT05FOwogfQorc3RhdGljIGlubGluZSBpbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfSE9UUExVR19QQ0lfTU9EVUxFKQpAQCAtMTMzOCw1ICsxNDE1LDkzIEBACiAKIHZvaWQgcGNpX3JlcXVlc3RfYWNzKHZvaWQpOwogCisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUCQkJMHg4MAkvKiBMYXJnZSBSZXNvdXJjZSBEYXRhIFR5cGUgKi8KKyNkZWZpbmUgUENJX1ZQRF9MUkRUX0lEKHgpCQkoeCB8IFBDSV9WUERfTFJEVCkKKworLyogTGFyZ2UgUmVzb3VyY2UgRGF0YSBUeXBlIFRhZyBJdGVtIE5hbWVzICovCisjZGVmaW5lIFBDSV9WUERfTFRJTl9JRF9TVFJJTkcJCTB4MDIJLyogSWRlbnRpZmllciBTdHJpbmcgKi8KKyNkZWZpbmUgUENJX1ZQRF9MVElOX1JPX0RBVEEJCTB4MTAJLyogUmVhZC1Pbmx5IERhdGEgKi8KKyNkZWZpbmUgUENJX1ZQRF9MVElOX1JXX0RBVEEJCTB4MTEJLyogUmVhZC1Xcml0ZSBEYXRhICovCisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUX0lEX1NUUklORwkJUENJX1ZQRF9MUkRUX0lEKFBDSV9WUERfTFRJTl9JRF9TVFJJTkcpCisjZGVmaW5lIFBDSV9WUERfTFJEVF9ST19EQVRBCQlQQ0lfVlBEX0xSRFRfSUQoUENJX1ZQRF9MVElOX1JPX0RBVEEpCisjZGVmaW5lIFBDSV9WUERfTFJEVF9SV19EQVRBCQlQQ0lfVlBEX0xSRFRfSUQoUENJX1ZQRF9MVElOX1JXX0RBVEEpCisKKy8qIFNtYWxsIFJlc291cmNlIERhdGEgVHlwZSBUYWcgSXRlbSBOYW1lcyAqLworI2RlZmluZSBQQ0lfVlBEX1NUSU5fRU5ECQkweDc4CS8qIEVuZCAqLworCisjZGVmaW5lIFBDSV9WUERfU1JEVF9FTkQJCVBDSV9WUERfU1RJTl9FTkQKKworI2RlZmluZSBQQ0lfVlBEX1NSRFRfVElOX01BU0sJCTB4NzgKKyNkZWZpbmUgUENJX1ZQRF9TUkRUX0xFTl9NQVNLCQkweDA3CisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUX1RBR19TSVpFCQkzCisjZGVmaW5lIFBDSV9WUERfU1JEVF9UQUdfU0laRQkJMQorCisjZGVmaW5lIFBDSV9WUERfSU5GT19GTERfSERSX1NJWkUJMworCisjZGVmaW5lIFBDSV9WUERfUk9fS0VZV09SRF9QQVJUTk8JIlBOIgorI2RlZmluZSBQQ0lfVlBEX1JPX0tFWVdPUkRfTUZSX0lECSJNTiIKKyNkZWZpbmUgUENJX1ZQRF9ST19LRVlXT1JEX1ZFTkRPUjAJIlYwIgorCisvKioKKyAqIHBjaV92cGRfbHJkdF9zaXplIC0gRXh0cmFjdHMgdGhlIExhcmdlIFJlc291cmNlIERhdGEgVHlwZSBsZW5ndGgKKyAqIEBscmR0OiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIExhcmdlIFJlc291cmNlIERhdGEgVHlwZSB0YWcKKyAqCisgKiBSZXR1cm5zIHRoZSBleHRyYWN0ZWQgTGFyZ2UgUmVzb3VyY2UgRGF0YSBUeXBlIGxlbmd0aC4KKyAqLworc3RhdGljIGlubGluZSB1MTYgcGNpX3ZwZF9scmR0X3NpemUoY29uc3QgdTggKmxyZHQpCit7CisJcmV0dXJuICh1MTYpbHJkdFsxXSArICgodTE2KWxyZHRbMl0gPDwgOCk7Cit9CisKKy8qKgorICogcGNpX3ZwZF9zcmR0X3NpemUgLSBFeHRyYWN0cyB0aGUgU21hbGwgUmVzb3VyY2UgRGF0YSBUeXBlIGxlbmd0aAorICogQGxyZHQ6IFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgU21hbGwgUmVzb3VyY2UgRGF0YSBUeXBlIHRhZworICoKKyAqIFJldHVybnMgdGhlIGV4dHJhY3RlZCBTbWFsbCBSZXNvdXJjZSBEYXRhIFR5cGUgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIHU4IHBjaV92cGRfc3JkdF9zaXplKGNvbnN0IHU4ICpzcmR0KQoreworCXJldHVybiAoKnNyZHQpICYgUENJX1ZQRF9TUkRUX0xFTl9NQVNLOworfQorCisvKioKKyAqIHBjaV92cGRfaW5mb19maWVsZF9zaXplIC0gRXh0cmFjdHMgdGhlIGluZm9ybWF0aW9uIGZpZWxkIGxlbmd0aAorICogQGxyZHQ6IFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBhbiBpbmZvcm1hdGlvbiBmaWVsZCBoZWFkZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBleHRyYWN0ZWQgaW5mb3JtYXRpb24gZmllbGQgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIHU4IHBjaV92cGRfaW5mb19maWVsZF9zaXplKGNvbnN0IHU4ICppbmZvX2ZpZWxkKQoreworCXJldHVybiBpbmZvX2ZpZWxkWzJdOworfQorCisvKioKKyAqIHBjaV92cGRfZmluZF90YWcgLSBMb2NhdGVzIHRoZSBSZXNvdXJjZSBEYXRhIFR5cGUgdGFnIHByb3ZpZGVkCisgKiBAYnVmOiBQb2ludGVyIHRvIGJ1ZmZlcmVkIHZwZCBkYXRhCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSB2cGQgYnVmZmVyCisgKiBAcmR0OiBUaGUgUmVzb3VyY2UgRGF0YSBUeXBlIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBSZXR1cm5zIHRoZSBpbmRleCB3aGVyZSB0aGUgUmVzb3VyY2UgRGF0YSBUeXBlIHdhcyBmb3VuZCBvcgorICogLUVOT0VOVCBvdGhlcndpc2UuCisgKi8KK2ludCBwY2lfdnBkX2ZpbmRfdGFnKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBsZW4sIHU4IHJkdCk7CisKKy8qKgorICogcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZCAtIExvY2F0ZXMgYW4gaW5mb3JtYXRpb24gZmllbGQga2V5d29yZCBpbiB0aGUgVlBECisgKiBAYnVmOiBQb2ludGVyIHRvIGJ1ZmZlcmVkIHZwZCBkYXRhCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgYXJlYSwgcmVsYXRpdmUgdG8gb2ZmLCBpbiB3aGljaCB0byBzZWFyY2gKKyAqIEBrdzogVGhlIGtleXdvcmQgdG8gc2VhcmNoIGZvcgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBmaWVsZCBrZXl3b3JkIHdhcyBmb3VuZCBvcgorICogLUVOT0VOVCBvdGhlcndpc2UuCisgKi8KK2ludCBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICprdyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogTElOVVhfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaAppbmRleCA2NTJiYTc5Ny4uNWQwOWNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaApAQCAtMjgsMjYgKzI4LDYgQEAKICNpZm5kZWYgX1BDSV9IT1RQTFVHX0gKICNkZWZpbmUgX1BDSV9IT1RQTFVHX0gKIAotCi0vKiBUaGVzZSB2YWx1ZXMgY29tZSBmcm9tIHRoZSBQQ0kgSG90cGx1ZyBTcGVjICovCi1lbnVtIHBjaV9idXNfc3BlZWQgewotCVBDSV9TUEVFRF8zM01IegkJCT0gMHgwMCwKLQlQQ0lfU1BFRURfNjZNSHoJCQk9IDB4MDEsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVgJCT0gMHgwMiwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVgJCT0gMHgwMywKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVgJCT0gMHgwNCwKLQlQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0MJPSAweDA1LAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0MJPSAweDA2LAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MJPSAweDA3LAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2Ngk9IDB4MDksCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2Ngk9IDB4MGEsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2Ngk9IDB4MGIsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzCT0gMHgxMSwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzCT0gMHgxMiwKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCT0gMHgxMywKLQlQQ0lfU1BFRURfVU5LTk9XTgkJPSAweGZmLAotfTsKLQogLyogVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgUENJIEV4cHJlc3MgU3BlYyAqLwogZW51bSBwY2llX2xpbmtfd2lkdGggewogCVBDSUVfTE5LX1dJRFRIX1JFU1JWCT0gMHgwMCwKQEAgLTYxLDEyICs0MSw2IEBACiAJUENJRV9MTktfV0lEVEhfVU5LTk9XTiAgPSAweEZGLAogfTsKIAotZW51bSBwY2llX2xpbmtfc3BlZWQgewotCVBDSUVfMl81R0IJCT0gMHgxNCwKLQlQQ0lFXzVfMEdCCQk9IDB4MTUsCi0JUENJRV9MTktfU1BFRURfVU5LTk9XTgk9IDB4RkYsCi19OwotCiAvKioKICAqIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIC10aGUgY2FsbGJhY2tzIHRoYXQgdGhlIGhvdHBsdWcgcGNpIGNvcmUgY2FuIHVzZQogICogQG93bmVyOiBUaGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgc3RydWN0dXJlCkBAIC04OSwxMiArNjMsNiBAQAogICogQGdldF9hZGFwdGVyX3N0YXR1czogQ2FsbGVkIHRvIGdldCBzZWUgaWYgYW4gYWRhcHRlciBpcyBwcmVzZW50IGluIHRoZSBzbG90IG9yIG5vdC4KICAqCUlmIHRoaXMgZmllbGQgaXMgTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCBpbiB0aGUgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvCiAgKgl3aWxsIGJlIHVzZWQgd2hlbiB0aGlzIHZhbHVlIGlzIHJlcXVlc3RlZCBieSBhIHVzZXIuCi0gKiBAZ2V0X21heF9idXNfc3BlZWQ6IENhbGxlZCB0byBnZXQgdGhlIG1heCBidXMgc3BlZWQgZm9yIGEgc2xvdC4KLSAqCUlmIHRoaXMgZmllbGQgaXMgTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCBpbiB0aGUgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvCi0gKgl3aWxsIGJlIHVzZWQgd2hlbiB0aGlzIHZhbHVlIGlzIHJlcXVlc3RlZCBieSBhIHVzZXIuCi0gKiBAZ2V0X2N1cl9idXNfc3BlZWQ6IENhbGxlZCB0byBnZXQgdGhlIGN1cnJlbnQgYnVzIHNwZWVkIGZvciBhIHNsb3QuCi0gKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwotICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgogICoKICAqIFRoZSB0YWJsZSBvZiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGlzIHBhc3NlZCB0byB0aGUgaG90cGx1ZyBwY2kgY29yZSBieSBhCiAgKiBob3RwbHVnIHBjaSBkcml2ZXIuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgaG90cGx1ZyBwY2kgY29yZSB3aGVuCkBAIC0xMTIsMTcgKzgwLDE0IEBACiAJaW50ICgqZ2V0X2F0dGVudGlvbl9zdGF0dXMpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogCWludCAoKmdldF9sYXRjaF9zdGF0dXMpCQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIAlpbnQgKCpnZXRfYWRhcHRlcl9zdGF0dXMpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwotCWludCAoKmdldF9tYXhfYnVzX3NwZWVkKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7Ci0JaW50ICgqZ2V0X2N1cl9idXNfc3BlZWQpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKIH07CiAKIC8qKgogICogc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvIC0gdXNlZCB0byBub3RpZnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgb2YgdGhlIHN0YXRlIG9mIHRoZSBzbG90Ci0gKiBAcG93ZXI6IGlmIHBvd2VyIGlzIGVuYWJsZWQgb3Igbm90ICgxLzApCisgKiBAcG93ZXJfc3RhdHVzOiBpZiBwb3dlciBpcyBlbmFibGVkIG9yIG5vdCAoMS8wKQogICogQGF0dGVudGlvbl9zdGF0dXM6IGlmIHRoZSBhdHRlbnRpb24gbGlnaHQgaXMgZW5hYmxlZCBvciBub3QgKDEvMCkKICAqIEBsYXRjaF9zdGF0dXM6IGlmIHRoZSBsYXRjaCAoaWYgYW55KSBpcyBvcGVuIG9yIGNsb3NlZCAoMS8wKQotICogQGFkYXB0ZXJfcHJlc2VudDogaWYgdGhlcmUgaXMgYSBwY2kgYm9hcmQgcHJlc2VudCBpbiB0aGUgc2xvdCBvciBub3QgKDEvMCkKLSAqIEBhZGRyZXNzOiAoZG9tYWluIDw8IDE2IHwgYnVzIDw8IDggfCBkZXYpCisgKiBAYWRhcHRlcl9zdGF0dXM6IGlmIHRoZXJlIGlzIGEgcGNpIGJvYXJkIHByZXNlbnQgaW4gdGhlIHNsb3Qgb3Igbm90ICgxLzApCiAgKgogICogVXNlZCB0byBub3RpZnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgb2YgdGhlIHN0YXR1cyBvZiBhIHNwZWNpZmljIHNsb3QuCiAgKi8KQEAgLTEzMSw4ICs5Niw2IEBACiAJdTgJYXR0ZW50aW9uX3N0YXR1czsKIAl1OAlsYXRjaF9zdGF0dXM7CiAJdTgJYWRhcHRlcl9zdGF0dXM7Ci0JZW51bSBwY2lfYnVzX3NwZWVkCW1heF9idXNfc3BlZWQ7Ci0JZW51bSBwY2lfYnVzX3NwZWVkCWN1cl9idXNfc3BlZWQ7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggY2NhOGEwNC4uOWY2ODhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTc3MCw3ICs3NzAsNiBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJCQkweDEwNGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDIwCTB4M2QwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0NTAJCTB4ODAxMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMgkweDgwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDIxX1hYMTEJMHg4MDMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExX0ZNCTB4ODAzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRAkweDgwMzQKQEAgLTIzMzMsNiArMjMzMiw4IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfS09SRU5JWAkJMHgxOTgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjAJMHgxNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjEJMHgxNmZmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjIJMHgxNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjMJMHgxN2ZmCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTUkJCTB4MWEzMgogCkBAIC0yNDE3LDYgKzI0MTgsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMxCTB4MWM0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyCTB4MWM0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMAkweDI0MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEJMHgyNDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zCTB4MjQxMwpAQCAtMjY5NCw2ICsyNjk4LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNQkweDk4MzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg0NQkweDk4NDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NQkweDk4NTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg2NQkweDk4NjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTkwMQkweDk5MDEKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNDT01fMgkJMHhhNzI3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmgKaW5kZXggNWE1ZDZjZS4uNjg1NjdjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LWRlZnMuaApAQCAtMiwxMiArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9QRVJDUFVfREVGU19ICiAKIC8qCi0gKiBEZXRlcm1pbmUgdGhlIHJlYWwgdmFyaWFibGUgbmFtZSBmcm9tIHRoZSBuYW1lIHZpc2libGUgaW4gdGhlCi0gKiBrZXJuZWwgc291cmNlcy4KLSAqLwotI2RlZmluZSBwZXJfY3B1X3Zhcih2YXIpIHBlcl9jcHVfXyMjdmFyCi0KLS8qCiAgKiBCYXNlIGltcGxlbWVudGF0aW9ucyBvZiBwZXItQ1BVIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMsIHdoZXJlCiAgKiB0aGUgc2VjdGlvbiBpbiB3aGljaCB0aGUgdmFyaWFibGUgaXMgdG8gYmUgcGxhY2VkIGlzIHByb3ZpZGVkIGJ5IHRoZQogICogJ3NlYycgYXJndW1lbnQuICBUaGlzIG1heSBiZSB1c2VkIHRvIGFmZmVjdCB0aGUgcGFyYW1ldGVycyBnb3Zlcm5pbmcgdGhlCkBAIC0xOCwxMyArMTIsMjMgQEAKICAqIHRoYXQgc2VjdGlvbi4KICAqLwogI2RlZmluZSBfX1BDUFVfQVRUUlMoc2VjKQkJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFBFUl9DUFVfQkFTRV9TRUNUSU9OIHNlYykpKQkJXAorCV9fcGVyY3B1IF9fYXR0cmlidXRlX18oKHNlY3Rpb24oUEVSX0NQVV9CQVNFX1NFQ1RJT04gc2VjKSkpCVwKIAlQRVJfQ1BVX0FUVFJJQlVURVMKIAogI2RlZmluZSBfX1BDUFVfRFVNTVlfQVRUUlMJCQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRpc2NhcmQiKSwgdW51c2VkKSkKIAogLyoKKyAqIE1hY3JvIHdoaWNoIHZlcmlmaWVzIEBwdHIgaXMgYSBwZXJjcHUgcG9pbnRlciB3aXRob3V0IGV2YWx1YXRpbmcKKyAqIEBwdHIuICBUaGlzIGlzIHRvIGJlIHVzZWQgaW4gcGVyY3B1IGFjY2Vzc29ycyB0byB2ZXJpZnkgdGhhdCB0aGUKKyAqIGlucHV0IHBhcmFtZXRlciBpcyBhIHBlcmNwdSBwb2ludGVyLgorICovCisjZGVmaW5lIF9fdmVyaWZ5X3BjcHVfcHRyKHB0cikJZG8gewkJCQkJXAorCWNvbnN0IHZvaWQgX19wZXJjcHUgKl9fdnBwX3ZlcmlmeSA9ICh0eXBlb2YocHRyKSlOVUxMOwkJXAorCSh2b2lkKV9fdnBwX3ZlcmlmeTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgogICogczM5MCBhbmQgYWxwaGEgbW9kdWxlcyByZXF1aXJlIHBlcmNwdSB2YXJpYWJsZXMgdG8gYmUgZGVmaW5lZCBhcwogICogd2VhayB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgR09UIGJhc2VkIGV4dGVybmFsCiAgKiByZWZlcmVuY2VzIGZvciB0aGVtLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBwZXJjcHUgc2VjdGlvbnMKQEAgLTU2LDI0ICs2MCwyNCBAQAogICovCiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlYykJCQlcCiAJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV9zY29wZV8jI25hbWU7CQlcCi0JZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisJZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgbmFtZQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCiAJX19QQ1BVX0RVTU1ZX0FUVFJTIGNoYXIgX19wY3B1X3Njb3BlXyMjbmFtZTsJCQlcCiAJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJXAogCV9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJCVwKIAlfX1BDUFVfQVRUUlMoc2VjKSBQRVJfQ1BVX0RFRl9BVFRSSUJVVEVTIF9fd2VhawkJCVwKLQlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCV9fdHlwZW9mX18odHlwZSkgbmFtZQogI2Vsc2UKIC8qCiAgKiBOb3JtYWwgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gbWFjcm9zLgogICovCiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlYykJCQlcCi0JZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisJZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgbmFtZQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCiAJX19QQ1BVX0FUVFJTKHNlYykgUEVSX0NQVV9ERUZfQVRUUklCVVRFUwkJCVwKLQlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCV9fdHlwZW9mX18odHlwZSkgbmFtZQogI2VuZGlmCiAKIC8qCkBAIC0xMzUsMTAgKzEzOSwxNiBAQAogCV9fYWxpZ25lZChQQUdFX1NJWkUpCiAKIC8qCi0gKiBJbnRlcm1vZHVsZSBleHBvcnRzIGZvciBwZXItQ1BVIHZhcmlhYmxlcy4KKyAqIEludGVybW9kdWxlIGV4cG9ydHMgZm9yIHBlci1DUFUgdmFyaWFibGVzLiAgc3BhcnNlIGZvcmdldHMgYWJvdXQKKyAqIGFkZHJlc3Mgc3BhY2UgYWNyb3NzIEVYUE9SVF9TWU1CT0woKSwgY2hhbmdlIEVYUE9SVF9TWU1CT0woKSB0bworICogbm9vcCBpZiBfX0NIRUNLRVJfXy4KICAqLwotI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQotI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCi0KKyNpZm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHZhcikgRVhQT1JUX1NZTUJPTCh2YXIpCisjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwodmFyKSBFWFBPUlRfU1lNQk9MX0dQTCh2YXIpCisjZWxzZQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikKKyNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1BFUkNQVV9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IGNmNWVmYmMuLmE5M2U1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaApAQCAtMjcsMTAgKzI3LDE3IEBACiAgKiB3ZSBmb3JjZSBhIHN5bnRheCBlcnJvciBoZXJlIGlmIGl0IGlzbid0LgogICovCiAjZGVmaW5lIGdldF9jcHVfdmFyKHZhcikgKCooewkJCQlcCi0JZXh0ZXJuIGludCBzaW1wbGVfaWRlbnRpZmllcl8jI3Zhcih2b2lkKTsJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCQlcCiAJJl9fZ2V0X2NwdV92YXIodmFyKTsgfSkpCi0jZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgcHJlZW1wdF9lbmFibGUoKQorCisvKgorICogVGhlIHdlaXJkICYgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc3BhcnNlIGNvbnNpZGVycyAodm9pZCkodmFyKSB0byBiZQorICogYSBkaXJlY3QgZGVyZWZlcmVuY2Ugb2YgcGVyY3B1IHZhcmlhYmxlICh2YXIpLgorICovCisjZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgZG8gewkJCQlcCisJKHZvaWQpJih2YXIpOwkJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCVwKK30gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTEyNyw5ICsxMzQsOSBAQAogICovCiAjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQlTSElGVF9QRVJDUFVfUFRSKChwdHIpLCBwZXJfY3B1X29mZnNldCgoY3B1KSkpCiAKLWV4dGVybiB2b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKLWV4dGVybiB2b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKLWV4dGVybiB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpOworZXh0ZXJuIHZvaWQgX19wZXJjcHUgKl9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworZXh0ZXJuIHZvaWQgX19wZXJjcHUgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworZXh0ZXJuIHZvaWQgZnJlZV9wZXJjcHUodm9pZCBfX3BlcmNwdSAqX19wZGF0YSk7CiBleHRlcm4gcGh5c19hZGRyX3QgcGVyX2NwdV9wdHJfdG9fcGh5cyh2b2lkICphZGRyKTsKIAogI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKQEAgLTE0MCw3ICsxNDcsNyBAQAogCiAjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KSAoeyAodm9pZCkoY3B1KTsgKHB0cik7IH0pCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAkvKgogCSAqIENhbid0IGVhc2lseSBtYWtlIGxhcmdlciBhbGlnbm1lbnQgd29yayB3aXRoIGttYWxsb2MuICBXQVJOCkBAIC0xNTEsNyArMTU4LDcgQEAKIAlyZXR1cm4ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKnApCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZXJjcHUodm9pZCBfX3BlcmNwdSAqcCkKIHsKIAlrZnJlZShwKTsKIH0KQEAgLTE3MSw3ICsxNzgsNyBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJXAotCSh0eXBlb2YodHlwZSkgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIF9fYWxpZ25vZl9fKHR5cGUpKQorCSh0eXBlb2YodHlwZSkgX19wZXJjcHUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIF9fYWxpZ25vZl9fKHR5cGUpKQogCiAvKgogICogT3B0aW9uYWwgbWV0aG9kcyBmb3Igb3B0aW1pemVkIG5vbi1sdmFsdWUgcGVyLWNwdSB2YXJpYWJsZSBhY2Nlc3MuCkBAIC0xODgsMTcgKzE5NSwxOSBAQAogI2lmbmRlZiBwZXJjcHVfcmVhZAogIyBkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQkJCQkJCVwKICAgKHsJCQkJCQkJCQlcCi0JdHlwZW9mKHBlcl9jcHVfdmFyKHZhcikpIF9fdG1wX3Zhcl9fOwkJCQlcCi0JX190bXBfdmFyX18gPSBnZXRfY3B1X3Zhcih2YXIpOwkJCQkJXAotCXB1dF9jcHVfdmFyKHZhcik7CQkJCQkJXAotCV9fdG1wX3Zhcl9fOwkJCQkJCQlcCisJdHlwZW9mKHZhcikgKnByX3B0cl9fID0gJih2YXIpOwkJCQkJXAorCXR5cGVvZih2YXIpIHByX3JldF9fOwkJCQkJCVwKKwlwcl9yZXRfXyA9IGdldF9jcHVfdmFyKCpwcl9wdHJfXyk7CQkJCVwKKwlwdXRfY3B1X3ZhcigqcHJfcHRyX18pOwkJCQkJCVwKKwlwcl9yZXRfXzsJCQkJCQkJXAogICB9KQogI2VuZGlmCiAKICNkZWZpbmUgX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsIHZhbCwgb3ApCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JZ2V0X2NwdV92YXIodmFyKSBvcCB2YWw7CQkJCQlcCi0JcHV0X2NwdV92YXIodmFyKTsJCQkJCQlcCisJdHlwZW9mKHZhcikgKnBndG9fcHRyX18gPSAmKHZhcik7CQkJCVwKKwlnZXRfY3B1X3ZhcigqcGd0b19wdHJfXykgb3AgdmFsOwkJCQlcCisJcHV0X2NwdV92YXIoKnBndG9fcHRyX18pOwkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2lmbmRlZiBwZXJjcHVfd3JpdGUKQEAgLTIzNCw2ICsyNDMsNyBAQAogCiAjZGVmaW5lIF9fcGNwdV9zaXplX2NhbGxfcmV0dXJuKHN0ZW0sIHZhcmlhYmxlKQkJCQlcCiAoewl0eXBlb2YodmFyaWFibGUpIHBzY3JfcmV0X187CQkJCQlcCisJX192ZXJpZnlfcGNwdV9wdHIoJih2YXJpYWJsZSkpOwkJCQkJXAogCXN3aXRjaChzaXplb2YodmFyaWFibGUpKSB7CQkJCQlcCiAJY2FzZSAxOiBwc2NyX3JldF9fID0gc3RlbSMjMSh2YXJpYWJsZSk7YnJlYWs7CQkJXAogCWNhc2UgMjogcHNjcl9yZXRfXyA9IHN0ZW0jIzIodmFyaWFibGUpO2JyZWFrOwkJCVwKQEAgLTI0Nyw2ICsyNTcsNyBAQAogCiAjZGVmaW5lIF9fcGNwdV9zaXplX2NhbGwoc3RlbSwgdmFyaWFibGUsIC4uLikJCQkJXAogZG8gewkJCQkJCQkJCVwKKwlfX3ZlcmlmeV9wY3B1X3B0cigmKHZhcmlhYmxlKSk7CQkJCQlcCiAJc3dpdGNoKHNpemVvZih2YXJpYWJsZSkpIHsJCQkJCVwKIAkJY2FzZSAxOiBzdGVtIyMxKHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7YnJlYWs7CQlcCiAJCWNhc2UgMjogc3RlbSMjMih2YXJpYWJsZSwgX19WQV9BUkdTX18pO2JyZWFrOwkJXApAQCAtMjU5LDggKzI3MCw3IEBACiAKIC8qCiAgKiBPcHRpbWl6ZWQgbWFuaXB1bGF0aW9uIGZvciBtZW1vcnkgYWxsb2NhdGVkIHRocm91Z2ggdGhlIHBlciBjcHUKLSAqIGFsbG9jYXRvciBvciBmb3IgYWRkcmVzc2VzIG9mIHBlciBjcHUgdmFyaWFibGVzIChjYW4gYmUgZGV0ZXJtaW5lZAotICogdXNpbmcgcGVyX2NwdV92YXIoeHgpLgorICogYWxsb2NhdG9yIG9yIGZvciBhZGRyZXNzZXMgb2YgcGVyIGNwdSB2YXJpYWJsZXMuCiAgKgogICogVGhlc2Ugb3BlcmF0aW9uIGd1YXJhbnRlZSBleGNsdXNpdml0eSBvZiBhY2Nlc3MgZm9yIG90aGVyIG9wZXJhdGlvbnMKICAqIG9uIHRoZSAqc2FtZSogcHJvY2Vzc29yLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHBlciBjcHUgZGF0YSBpcyBvbmx5CkBAIC0zMTEsNyArMzIxLDcgQEAKICNkZWZpbmUgX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AocGNwLCB2YWwsIG9wKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJCVwKLQkqX190aGlzX2NwdV9wdHIoJnBjcCkgb3AgdmFsOwkJCQkJXAorCSpfX3RoaXNfY3B1X3B0cigmKHBjcCkpIG9wIHZhbDsJCQkJCVwKIAlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAppbmRleCBhNzY4NGE1Li5jODhkNjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBBbGwgcGVyY3B1X2NvdW50ZXJzIGFyZSBvbiBhIGxpc3QgKi8KICNlbmRpZgotCXMzMiAqY291bnRlcnM7CisJczMyIF9fcGVyY3B1ICpjb3VudGVyczsKIH07CiAKIGV4dGVybiBpbnQgcGVyY3B1X2NvdW50ZXJfYmF0Y2g7CkBAIC05OCw5ICs5OCw2IEBACiAJZmJjLT5jb3VudCA9IGFtb3VudDsKIH0KIAotI2RlZmluZSBfX3BlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCwgYmF0Y2gpIFwKLQlwZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQpCi0KIHN0YXRpYyBpbmxpbmUgdm9pZAogcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQogewpAQCAtMTA5LDYgKzEwNiwxMiBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19wZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQsIHMzMiBiYXRjaCkKK3sKKwlwZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQpOworfQorCiBzdGF0aWMgaW5saW5lIHM2NCBwZXJjcHVfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQogewogCXJldHVybiBmYmMtPmNvdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCBhMTc3Njk4Li43YjE4YjRmZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0yODgsNyArMjg4LDcgQEAKIH07CiAKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0sJCSgzIDw8IDApCi0jZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9VTktOT1dOCQkoMCA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfVU5LTk9XTgkoMCA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfVVNFUgkJCSgyIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUgkJKDMgPDwgMCkKQEAgLTM1NCw4ICszNTQsOCBAQAogCSAqCXU2NAkJCQlzdHJlYW1faWQ7CiAJICogfTsKIAkgKi8KLQlQRVJGX1JFQ09SRF9USFJPVFRMRQkJPSA1LAotCVBFUkZfUkVDT1JEX1VOVEhST1RUTEUJCT0gNiwKKwlQRVJGX1JFQ09SRF9USFJPVFRMRQkJCT0gNSwKKwlQRVJGX1JFQ09SRF9VTlRIUk9UVExFCQkJPSA2LAogCiAJLyoKIAkgKiBzdHJ1Y3QgewpAQCAtMzY5LDEwICszNjksMTAgQEAKIAogCS8qCiAJICogc3RydWN0IHsKLQkgKiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKiAJdTMyCQkJCXBpZCwgdGlkOworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTMyCQkJCXBpZCwgdGlkOwogCSAqCi0JICogCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOworCSAqCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOwogCSAqIH07CiAJICovCiAJUEVSRl9SRUNPUkRfUkVBRAkJCT0gOCwKQEAgLTQxMCw3ICs0MTAsNyBAQAogCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwogCSAqIH07CiAJICovCi0JUEVSRl9SRUNPUkRfU0FNUExFCQk9IDksCisJUEVSRl9SRUNPUkRfU0FNUExFCQkJPSA5LAogCiAJUEVSRl9SRUNPUkRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KIH07CkBAIC00NzYsOSArNDc2LDExIEBACiAJdW5pb24gewogCQlzdHJ1Y3QgeyAvKiBoYXJkd2FyZSAqLwogCQkJdTY0CQljb25maWc7CisJCQl1NjQJCWxhc3RfdGFnOwogCQkJdW5zaWduZWQgbG9uZwljb25maWdfYmFzZTsKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OworCQkJaW50CQlsYXN0X2NwdTsKIAkJfTsKIAkJc3RydWN0IHsgLyogc29mdHdhcmUgKi8KIAkJCXM2NAkJcmVtYWluaW5nOwpAQCAtNDk2LDkgKzQ5OCw4IEBACiAJYXRvbWljNjRfdAkJCXBlcmlvZF9sZWZ0OwogCXU2NAkJCQlpbnRlcnJ1cHRzOwogCi0JdTY0CQkJCWZyZXFfY291bnQ7Ci0JdTY0CQkJCWZyZXFfaW50ZXJydXB0czsKLQl1NjQJCQkJZnJlcV9zdGFtcDsKKwl1NjQJCQkJZnJlcV90aW1lX3N0YW1wOworCXU2NAkJCQlmcmVxX2NvdW50X3N0YW1wOwogI2VuZGlmCiB9OwogCkBAIC01MTAsNiArNTExLDggQEAKIHN0cnVjdCBwbXUgewogCWludCAoKmVuYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqZGlzYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpzdGFydCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwl2b2lkICgqc3RvcCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqcmVhZCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqdW50aHJvdHRsZSkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogfTsKQEAgLTU2Myw2ICs1NjYsMTAgQEAKIAkJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKiwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCitlbnVtIHBlcmZfZ3JvdXBfZmxhZyB7CisJUEVSRl9HUk9VUF9TT0ZUV0FSRSA9IDB4MSwKK307CisKIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnQgLSBwZXJmb3JtYW5jZSBldmVudCBrZXJuZWwgcmVwcmVzZW50YXRpb246CiAgKi8KQEAgLTU3Miw2ICs1NzksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2VudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQJCXNpYmxpbmdfbGlzdDsKIAlpbnQJCQkJbnJfc2libGluZ3M7CisJaW50CQkJCWdyb3VwX2ZsYWdzOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqZ3JvdXBfbGVhZGVyOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqb3V0cHV0OwogCWNvbnN0IHN0cnVjdCBwbXUJCSpwbXU7CkBAIC02NTYsNyArNjY0LDcgQEAKIAogCXBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90CQlvdmVyZmxvd19oYW5kbGVyOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCXN0cnVjdCBldmVudF9maWx0ZXIJCSpmaWx0ZXI7CiAjZW5kaWYKIApAQCAtNjgxLDcgKzY4OSw4IEBACiAJICovCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlncm91cF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCXBpbm5lZF9ncm91cHM7CisJc3RydWN0IGxpc3RfaGVhZAkJZmxleGlibGVfZ3JvdXBzOwogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2xpc3Q7CiAJaW50CQkJCW5yX2V2ZW50czsKIAlpbnQJCQkJbnJfYWN0aXZlOwpAQCAtNzQ0LDEwICs3NTMsOSBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAKLWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtNzYyLDcgKzc3MCw3IEBACiBleHRlcm4gaW50IHBlcmZfZXZlbnRfdGFza19lbmFibGUodm9pZCk7CiBleHRlcm4gaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KTsKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIGV4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCkBAIC04NTEsOCArODU5LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGU7CiAKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAotCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKK2V4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKIGV4dGVybiB2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKTsKIAogI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKQEAgLTg3MywxMiArODgwLDEyIEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KK3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSkJCXsgfQorCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJCXsgfQorcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQpAQCAtODkzLDEzICs5MDAsMTMgQEAKIHBlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCiAJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCXsgfQorcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCQkJeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCkJCQkJeyB9Ci1zdGF0aWMgaW5saW5lIGludCAgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKSAgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50ICBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpCQl7IHJldHVybiAtMTsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQkJeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDIyOGIwYjYuLjBiODBjODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0zMTUsNiArMzE1LDcgQEAKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0dDTV9JQ1YxMgkxOQogI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjE2CTIwCiAjZGVmaW5lIFNBREJfWF9FQUxHX0NBTUVMTElBQ0JDCQkyMgorI2RlZmluZSBTQURCX1hfRUFMR19OVUxMX0FFU19HTUFDCTIzCiAjZGVmaW5lIFNBREJfRUFMR19NQVggICAgICAgICAgICAgICAgICAgMjUzIC8qIGxhc3QgRUFMRyAqLwogLyogcHJpdmF0ZSBhbGxvY2F0aW9ucyBzaG91bGQgdXNlIDI0OS0yNTUgKFJGQzI0MDcpICovCiAjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgIDI1MiAgICAgLyogZHJhZnQtaWV0Zi1pcHNlYy1jaXBoLWFlcy1jYmMtMDAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDZhN2ViNDAuLjE0ZDdmZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtNDUyLDYgKzQ1Miw3IEBACiAJCXUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CiBzdHJ1Y3QgcGh5X2RldmljZSAqIHBoeV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJY29uc3QgY2hhciAqYnVzX2lkLCB1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOworc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9maW5kX2ZpcnN0KHN0cnVjdCBtaWlfYnVzICpidXMpOwogaW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQl2b2lkICgqaGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKiksIHUzMiBmbGFncywKIAkJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdGNkdmQuaCBiL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCmluZGV4IDc2ZTUwNTMuLjcyMTMwMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCkBAIC0xNjMsMTAgKzE2Myw4IEBACiAJYXRvbWljX3QJCWF0dGVudGlvbjsJLyogU2V0IHRvIG5vbi16ZXJvIHdoZW4gcXVldWUgcHJvY2Vzc2luZyBpcyBuZWVkZWQgKi8KIAlpbnQJCQl3cml0aW5nOwkvKiBOb24temVybyB3aGVuIHdyaXRpbmcsIHplcm8gd2hlbiByZWFkaW5nICovCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIFByb3RlY3RpbmcgcmVhZC93cml0ZSBxdWV1ZSBtYW5pcHVsYXRpb25zICovCi0Jc3RydWN0IGJpbwkJKnJlYWRfcXVldWU7Ci0Jc3RydWN0IGJpbwkJKnJlYWRfcXVldWVfdGFpbDsKLQlzdHJ1Y3QgYmlvCQkqd3JpdGVfcXVldWU7Ci0Jc3RydWN0IGJpbwkJKndyaXRlX3F1ZXVlX3RhaWw7CisJc3RydWN0IGJpb19saXN0CQlyZWFkX3F1ZXVlOworCXN0cnVjdCBiaW9fbGlzdAkJd3JpdGVfcXVldWU7CiAJc2VjdG9yX3QJCWxhc3Rfd3JpdGU7CS8qIFRoZSBzZWN0b3Igd2hlcmUgdGhlIGxhc3Qgd3JpdGUgZW5kZWQgKi8KIAlpbnQJCQlzdWNjZXNzaXZlX3JlYWRzOwogfTsKQEAgLTIwNiw4ICsyMDQsOCBAQAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBMb2NrIHByb3RlY3Rpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kICovCiAJCQkJCQkvKiBvcmlnX2Jpb3MgbGlzdCAqLwogCi0Jc3RydWN0IGJpbwkJKm9yaWdfYmlvczsJLyogT3JpZ2luYWwgYmlvcyBwYXNzZWQgdG8gcGt0X21ha2VfcmVxdWVzdCAqLwotCXN0cnVjdCBiaW8JCSpvcmlnX2Jpb3NfdGFpbDsvKiB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIHBhY2tldCAqLworCXN0cnVjdCBiaW9fbGlzdAkJb3JpZ19iaW9zOwkvKiBPcmlnaW5hbCBiaW9zIHBhc3NlZCB0byBwa3RfbWFrZV9yZXF1ZXN0ICovCisJCQkJCQkvKiB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIHBhY2tldCAqLwogCWludAkJCXdyaXRlX3NpemU7CS8qIFRvdGFsIHNpemUgb2YgYWxsIGJpb3MgaW4gdGhlIG9yaWdfYmlvcyAqLwogCQkJCQkJLyogbGlzdCwgbWVhc3VyZWQgaW4gbnVtYmVyIG9mIGZyYW1lcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggODIyN2Y3MS4uNjg5ODk4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtNDUsNyArNDUsNyBAQAogICogdGhlIGluc2VydGlvbiBvZiBuZXcgbm9kZXMuIFRoZXJlIGFyZSBubyBub2RlcyB3aXRoIGR1cGxpY2F0ZQogICogcHJpb3JpdGVzIG9uIHRoZSBsaXN0LgogICoKLSAqIFRoZSBub2RlcyBvbiB0aGUgbm9kZV9saXN0IGlzIG9yZGVyZWQgYnkgcHJpb3JpdHkgYW5kIGNhbiBjb250YWluCisgKiBUaGUgbm9kZXMgb24gdGhlIG5vZGVfbGlzdCBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSBhbmQgY2FuIGNvbnRhaW4KICAqIGVudHJpZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eS4gVGhvc2UgZW50cmllcyBhcmUgb3JkZXJlZAogICogRklGTwogICoKQEAgLTI2NSw3ICsyNjUsNyBAQAogICoKICAqIEFzc3VtZXMgdGhlIHBsaXN0IGlzIF9ub3RfIGVtcHR5LgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwbGlzdF9ub2RlKiBwbGlzdF9maXJzdChjb25zdCBzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsaXN0X25vZGUgKnBsaXN0X2ZpcnN0KGNvbnN0IHN0cnVjdCBwbGlzdF9oZWFkICpoZWFkKQogewogCXJldHVybiBsaXN0X2VudHJ5KGhlYWQtPm5vZGVfbGlzdC5uZXh0LAogCQkJICBzdHJ1Y3QgcGxpc3Rfbm9kZSwgcGxpc3Qubm9kZV9saXN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCAxOThiOGY5Li5lODBkZjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKIC8qCiAgKiBDYWxsYmFja3MgZm9yIHBsYXRmb3JtIGRyaXZlcnMgdG8gaW1wbGVtZW50LgpAQCAtNDEyLDkgKzQxMywxMSBAQAogCXBtX21lc3NhZ2VfdAkJcG93ZXJfc3RhdGU7CiAJdW5zaWduZWQgaW50CQljYW5fd2FrZXVwOjE7CiAJdW5zaWduZWQgaW50CQlzaG91bGRfd2FrZXVwOjE7CisJdW5zaWduZWQJCWFzeW5jX3N1c3BlbmQ6MTsKIAllbnVtIGRwbV9zdGF0ZQkJc3RhdHVzOwkJLyogT3duZWQgYnkgdGhlIFBNIGNvcmUgKi8KICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCXN0cnVjdCB0aW1lcl9saXN0CXN1c3BlbmRfdGltZXI7CkBAIC00MzAsNiArNDMzLDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlcXVlc3RfcGVuZGluZzoxOwogCXVuc2lnbmVkIGludAkJZGVmZXJyZWRfcmVzdW1lOjE7CiAJdW5zaWduZWQgaW50CQlydW5fd2FrZToxOworCXVuc2lnbmVkIGludAkJcnVudGltZV9hdXRvOjE7CiAJZW51bSBycG1fcmVxdWVzdAlyZXF1ZXN0OwogCWVudW0gcnBtX3N0YXR1cwkJcnVudGltZV9zdGF0dXM7CiAJaW50CQkJcnVudGltZV9lcnJvcjsKQEAgLTUwOCw2ICs1MTIsNyBAQAogCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX2Z1bmNfXywgZm4sIHJldCk7CQlcCiAJfSB3aGlsZSAoMCkKIAorZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICpzdWIsIHN0cnVjdCBkZXZpY2UgKmRldik7CiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKICNkZWZpbmUgZGV2aWNlX3BtX2xvY2soKSBkbyB7fSB3aGlsZSAoMCkKQEAgLTUyMCw2ICs1MjUsNyBAQAogCiAjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KQkJZG8ge30gd2hpbGUgKDApCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KHN0cnVjdCBkZXZpY2UgKmEsIHN0cnVjdCBkZXZpY2UgKmIpIHt9CiAjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAvKiBIb3cgdG8gcmVvcmRlciBkcG1fbGlzdCBhZnRlciBkZXZpY2VfbW92ZSgpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaCBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCmluZGV4IDM3MGNlMGEuLjdkNzczYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCkBAIC0yOCw2ICsyOCw4IEBACiBleHRlcm4gaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjaGVja19yZXN1bWUpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KTsKIAogc3RhdGljIGlubGluZSBib29sIHBtX2NoaWxkcmVuX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC03OCw2ICs4MCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2JhcnJpZXIoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfYWxsb3coc3RydWN0IGRldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZm9yYmlkKHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogc3RhdGljIGlubGluZSBib29sIHBtX2NoaWxkcmVuX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggNTZmMmQ2My4uYzVlYWI4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC0yNyw2ICsyNywyNiBAQAogI2RlZmluZSBQVFJBQ0VfR0VUU0lHSU5GTwkweDQyMDIKICNkZWZpbmUgUFRSQUNFX1NFVFNJR0lORk8JMHg0MjAzCiAKKy8qCisgKiBHZW5lcmljIHB0cmFjZSBpbnRlcmZhY2UgdGhhdCBleHBvcnRzIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVnc2V0cworICogdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgTlRfKiB0eXBlcyAod2hpY2ggYXJlIGFsc28gdXNlZCBpbiB0aGUgY29yZSBkdW1wKS4KKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIE5UX1BSU1RBVFVTIG5vdGUgdHlwZSBpbiBhIGNvcmUgZHVtcCBjb250YWlucyBhIGZ1bGwKKyAqICdzdHJ1Y3QgZWxmX3Byc3RhdHVzJy4gQnV0IHRoZSB1c2VyX3JlZ3NldCBmb3IgTlRfUFJTVEFUVVMgY29udGFpbnMganVzdCB0aGUKKyAqIGVsZl9ncmVnc2V0X3QgdGhhdCBpcyB0aGUgcHJfcmVnIGZpZWxkIG9mICdzdHJ1Y3QgZWxmX3Byc3RhdHVzJy4gRm9yIGFsbCB0aGUKKyAqIG90aGVyIHVzZXJfcmVnc2V0IGZsYXZvcnMsIHRoZSB1c2VyX3JlZ3NldCBsYXlvdXQgYW5kIHRoZSBFTEYgY29yZSBkdW1wIG5vdGUKKyAqIHBheWxvYWQgYXJlIGV4YWN0bHkgdGhlIHNhbWUgbGF5b3V0LgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIHVzYWdlIGlzIGFzIGZvbGxvd3M6CisgKglzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYsIGxlbn07CisgKgorICoJcmV0ID0gcHRyYWNlKFBUUkFDRV9HRVRSRUdTRVQvUFRSQUNFX1NFVFJFR1NFVCwgcGlkLCBOVF9YWFhfVFlQRSwgJmlvdik7CisgKgorICogT24gdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgaW92LmxlbiB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCwKKyAqIHNwZWNpZnlpbmcgaG93IG11Y2ggdGhlIGtlcm5lbCBoYXMgd3JpdHRlbi9yZWFkIHRvL2Zyb20gdGhlIHVzZXIncyBpb3YuYnVmLgorICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTRVQJMHg0MjA0CisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTRVQJMHg0MjA1CisKIC8qIG9wdGlvbnMgc2V0IHVzaW5nIFBUUkFDRV9TRVRPUFRJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRAkweDAwMDAwMDAxCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRk9SSwkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaCBiL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCmluZGV4IDZiNTM3ZjEuLjMxZTFmZjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaApAQCAtMzIsNiArMzIsNyBAQAogCVJBSURfTEVWRUxfMCwKIAlSQUlEX0xFVkVMXzEsCiAJUkFJRF9MRVZFTF8xMCwKKwlSQUlEX0xFVkVMXzFFLAogCVJBSURfTEVWRUxfMywKIAlSQUlEX0xFVkVMXzQsCiAJUkFJRF9MRVZFTF81LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW5nZS5oIGIvaW5jbHVkZS9saW51eC9yYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTg0YTVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYW5nZS5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX0xJTlVYX1JBTkdFX0gKKyNkZWZpbmUgX0xJTlVYX1JBTkdFX0gKKworc3RydWN0IHJhbmdlIHsKKwl1NjQgICBzdGFydDsKKwl1NjQgICBlbmQ7Cit9OworCitpbnQgYWRkX3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgaW50IG5yX3JhbmdlLAorCQl1NjQgc3RhcnQsIHU2NCBlbmQpOworCisKK2ludCBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosIGludCBucl9yYW5nZSwKKwkJCQl1NjQgc3RhcnQsIHU2NCBlbmQpOworCit2b2lkIHN1YnRyYWN0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKKworaW50IGNsZWFuX3NvcnRfcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6KTsKKwordm9pZCBzb3J0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSk7CisKKyNkZWZpbmUgTUFYX1JFU09VUkNFICgocmVzb3VyY2Vfc2l6ZV90KX4wKQorc3RhdGljIGlubGluZSByZXNvdXJjZV9zaXplX3QgY2FwX3Jlc291cmNlKHU2NCB2YWwpCit7CisJaWYgKHZhbCA+IE1BWF9SRVNPVVJDRSkKKwkJcmV0dXJuIE1BWF9SRVNPVVJDRTsKKworCXJldHVybiB2YWw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKaW5kZXggMWJmMGY3MC4uMmM5YjQ2Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCkBAIC0yMDgsNyArMjA4LDcgQEAKICAqIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKSBhcyBsb25nIGFzIGl0J3MgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9lbnRyeV9yY3UocHRyLCB0eXBlLCBtZW1iZXIpIFwKLQljb250YWluZXJfb2YocmN1X2RlcmVmZXJlbmNlKHB0ciksIHR5cGUsIG1lbWJlcikKKwljb250YWluZXJfb2YocmN1X2RlcmVmZXJlbmNlX3JhdyhwdHIpLCB0eXBlLCBtZW1iZXIpCiAKIC8qKgogICogbGlzdF9maXJzdF9lbnRyeV9yY3UgLSBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIGxpc3QKQEAgLTIyNSw5ICsyMjUsOSBAQAogCWxpc3RfZW50cnlfcmN1KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCiAKICNkZWZpbmUgX19saXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoaGVhZCktPm5leHQpOyBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+bmV4dCk7IFwKIAkJcG9zICE9IChoZWFkKTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CS0JaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKQEAgLTI1Nyw5ICsyNTcsOSBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KHBvcywgaGVhZCkgXAotCWZvciAoKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpOyBcCisJZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKHBvcyktPm5leHQpOyBcCiAJCXByZWZldGNoKChwb3MpLT5uZXh0KSwgKHBvcykgIT0gKGhlYWQpOyBcCi0JCShwb3MpID0gcmN1X2RlcmVmZXJlbmNlKChwb3MpLT5uZXh0KSkKKwkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChwb3MpLT5uZXh0KSkKIAogLyoqCiAgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSAtIGNvbnRpbnVlIGl0ZXJhdGlvbiBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtNDA2LDYgKzQwNiwxMSBAQAogCQluLT5uZXh0LT5wcHJldiA9ICZuLT5uZXh0OwogfQogCisjZGVmaW5lIF9faGxpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkJCQlcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CVwKKwkgICAgIHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KTsJXAorCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisKIC8qKgogICogaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1IC0gaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKICAqIEB0cG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgpAQCAtNDE4LDEwICs0MjMsMTAgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHBvcywgcG9zLCBoZWFkLCBtZW1iZXIpCQkgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+Zmlyc3QpOwkJCSBcCiAJCXBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KSAmJgkJCSBcCiAJCSh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7IH0pOyBcCi0JCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdF9udWxscy5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKaW5kZXggNTg5YTQwOS4uYjcwZmZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgKgogICovCiAjZGVmaW5lIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+Zmlyc3QpOwkJCSBcCiAJCSghaXNfYV9udWxscyhwb3MpKSAmJgkJCVwKIAkJKHsgdHBvcyA9IGhsaXN0X251bGxzX2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKLQkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLT5uZXh0KSkKIAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCAyNDQ0MGY0Li5jODQzNzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC02Miw2ICs2Miw4IEBACiAKIC8qIEludGVybmFsIHRvIGtlcm5lbCAqLwogZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CitleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOworZXh0ZXJuIHZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQogI2luY2x1ZGUgPGxpbnV4L3JjdXRyZWUuaD4KQEAgLTc4LDE0ICs4MCwxMjAgQEAKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCiBleHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcDsKLSMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlcCi0JCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3VfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKICMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlsb2NrX3JlbGVhc2UoJnJjdV9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQotI2Vsc2UKLSMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2JoX2xvY2tfbWFwOworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9iaCgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3VfYmhfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2VfYmgoKQlsb2NrX3JlbGVhc2UoJnJjdV9iaF9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorCitleHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9zY2hlZF9sb2NrX21hcDsKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmVfc2NoZWQoKSBcCisJCWxvY2tfYWNxdWlyZSgmcmN1X3NjaGVkX2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlX3NjaGVkKCkgXAorCQlsb2NrX3JlbGVhc2UoJnJjdV9zY2hlZF9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19oZWxkKHZvaWQpCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZyY3VfbG9ja19tYXApOworCXJldHVybiAxOworfQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVS1iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19iaF9oZWxkKHZvaWQpCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZyY3VfYmhfbG9ja19tYXApOworCXJldHVybiAxOworfQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbiBhbgorICogUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdAorICogY2FuIHByb3ZlIG90aGVyd2lzZS4gIE5vdGUgdGhhdCBkaXNhYmxpbmcgb2YgcHJlZW1wdGlvbiAoaW5jbHVkaW5nCisgKiBkaXNhYmxpbmcgaXJxcykgY291bnRzIGFzIGFuIFJDVS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKHZvaWQpCit7CisJaW50IGxvY2tkZXBfb3BpbmlvbiA9IDA7CisKKwlpZiAoZGVidWdfbG9ja3MpCisJCWxvY2tkZXBfb3BpbmlvbiA9IGxvY2tfaXNfaGVsZCgmcmN1X3NjaGVkX2xvY2tfbWFwKTsKKwlyZXR1cm4gbG9ja2RlcF9vcGluaW9uIHx8IHByZWVtcHRfY291bnQoKSAhPSAwIHx8ICFyY3Vfc2NoZWR1bGVyX2FjdGl2ZTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX2JoKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2VfYmgoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2Vfc2NoZWQoKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9yZWFkX2xvY2tfaGVsZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2JoX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKHZvaWQpCit7CisJcmV0dXJuIHByZWVtcHRfY291bnQoKSAhPSAwIHx8ICFyY3Vfc2NoZWR1bGVyX2FjdGl2ZTsKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorCisvKioKKyAqIHJjdV9kZXJlZmVyZW5jZV9jaGVjayAtIHJjdV9kZXJlZmVyZW5jZSB3aXRoIGRlYnVnIGNoZWNraW5nCisgKgorICogRG8gYW4gcmN1X2RlcmVmZXJlbmNlKCksIGJ1dCBjaGVjayB0aGF0IHRoZSBjb250ZXh0IGlzIGNvcnJlY3QuCisgKiBGb3IgZXhhbXBsZSwgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGdwLCByY3VfcmVhZF9sb2NrX2hlbGQoKSkgdG8KKyAqIGVuc3VyZSB0aGF0IHRoZSByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBleGVjdXRlcyB3aXRoaW4gYW4gUkNVCisgKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgZm9yCisgKiBsb2NrcyBiZWluZyBoZWxkLCBmb3IgZXhhbXBsZSwgYnkgdXNpbmcgbG9ja2RlcF9pc19oZWxkKCkuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpIFwKKwkoeyBcCisJCWlmIChkZWJ1Z19sb2NrcyAmJiAhKGMpKSBcCisJCQlsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZShfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJCXJjdV9kZXJlZmVyZW5jZV9yYXcocCk7IFwKKwl9KQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX1JDVSAqLworCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBjKQlyY3VfZGVyZWZlcmVuY2VfcmF3KHApCisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BST1ZFX1JDVSAqLwogCiAvKioKICAqIHJjdV9yZWFkX2xvY2sgLSBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgpAQCAtMTYwLDcgKzI2OCw3IEBACiB7CiAJX19yY3VfcmVhZF9sb2NrX2JoKCk7CiAJX19hY3F1aXJlKFJDVV9CSCk7Ci0JcmN1X3JlYWRfYWNxdWlyZSgpOworCXJjdV9yZWFkX2FjcXVpcmVfYmgoKTsKIH0KIAogLyoKQEAgLTE3MCw3ICsyNzgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrX2JoKHZvaWQpCiB7Ci0JcmN1X3JlYWRfcmVsZWFzZSgpOworCXJjdV9yZWFkX3JlbGVhc2VfYmgoKTsKIAlfX3JlbGVhc2UoUkNVX0JIKTsKIAlfX3JjdV9yZWFkX3VubG9ja19iaCgpOwogfQpAQCAtMTg4LDcgKzI5Niw3IEBACiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJX19hY3F1aXJlKFJDVV9TQ0hFRCk7Ci0JcmN1X3JlYWRfYWNxdWlyZSgpOworCXJjdV9yZWFkX2FjcXVpcmVfc2NoZWQoKTsKIH0KIAogLyogVXNlZCBieSBsb2NrZGVwIGFuZCB0cmFjaW5nOiBjYW5ub3QgYmUgdHJhY2VkLCBjYW5ub3QgY2FsbCBsb2NrZGVwLiAqLwpAQCAtMjA1LDcgKzMxMyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWQodm9pZCkKIHsKLQlyY3VfcmVhZF9yZWxlYXNlKCk7CisJcmN1X3JlYWRfcmVsZWFzZV9zY2hlZCgpOwogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC0yMTksMjIgKzMyNyw0OSBAQAogCiAKIC8qKgotICogcmN1X2RlcmVmZXJlbmNlIC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyIGluIGFuCi0gKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGlzIHBvaW50ZXIgbWF5IGxhdGVyCi0gKiBiZSBzYWZlbHkgZGVyZWZlcmVuY2VkLgorICogcmN1X2RlcmVmZXJlbmNlX3JhdyAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlcgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBiZSB3aXRoaW4gc29tZSBmbGF2b3Igb2YgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbiwgb3IgbXVzdCBiZSBvdGhlcndpc2UgcHJldmVudGluZyB0aGUgcG9pbnRlciBmcm9tIGNoYW5naW5nLAorICogZm9yIGV4YW1wbGUsIGJ5IGhvbGRpbmcgYW4gYXBwcm9wcmlhdGUgbG9jay4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKKyAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gaGF2ZQorICogZG9uZSB0aGUgcmlnaHQgdGhpbmcsIGFzIHRoaXMgcHJpbWl0aXZlIGRvZXMgbm8gY2hlY2tpbmcgb2YgYW55IGtpbmQuCiAgKgogICogSW5zZXJ0cyBtZW1vcnkgYmFycmllcnMgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHJlcXVpcmUgdGhlbQogICogKGN1cnJlbnRseSBvbmx5IHRoZSBBbHBoYSksIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZG9jdW1lbnRzCiAgKiBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgogICovCi0KLSNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlKHApICAgICAoeyBcCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9yYXcocCkJKHsgXAogCQkJCXR5cGVvZihwKSBfX19fX19fX19wMSA9IEFDQ0VTU19PTkNFKHApOyBcCiAJCQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7IFwKIAkJCQkoX19fX19fX19fcDEpOyBcCiAJCQkJfSkKIAogLyoqCisgKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1UKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2UocCkgXAorCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCByY3VfcmVhZF9sb2NrX2hlbGQoKSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2VfYmggLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1UtYmgKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfYmgocCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpCisKKy8qKgorICogcmN1X2RlcmVmZXJlbmNlX3NjaGVkIC0gZmV0Y2ggUkNVLXByb3RlY3RlZCBwb2ludGVyLCBjaGVja2luZyBmb3IgUkNVLXNjaGVkCisgKgorICogTWFrZXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgZG8gdGhlIGRpcnR5IHdvcmsuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHApIFwKKwkJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpKQorCisvKioKICAqIHJjdV9hc3NpZ25fcG9pbnRlciAtIGFzc2lnbiAocHVibGljaXplKSBhIHBvaW50ZXIgdG8gYSBuZXdseQogICogaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBkZXJlZmVyZW5jZWQgYnkgUkNVIHJlYWQtc2lkZQogICogY3JpdGljYWwgc2VjdGlvbnMuICBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NpZ25lZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggOTZjYzMwNy4uYTUxOTU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTYyLDYgKzYyLDE4IEBACiAKIGV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCiAjZGVmaW5lIHN5bmNocm9uaXplX3JjdSBzeW5jaHJvbml6ZV9zY2hlZAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQpAQCAtOTMsMTAgKzEwNSw2IEBACiAKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JjdSh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA4MDQ0YjFiLi40MmNjM2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzUsNyArMzUsNiBAQAogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKTsKIGV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKQEAgLTk5LDYgKzk4LDkgQEAKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19OT19IWgogdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDAzMGQ5MjIuLjI4YzlmZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtODksOCArODksOSBAQAogICogUkVHVUxBVElPTl9PVVQgUmVndWxhdG9yIG91dHB1dCBpcyBvdXQgb2YgcmVndWxhdGlvbi4KICAqIEZBSUwgICAgICAgICAgIFJlZ3VsYXRvciBvdXRwdXQgaGFzIGZhaWxlZC4KICAqIE9WRVJfVEVNUCAgICAgIFJlZ3VsYXRvciBvdmVyIHRlbXAuCi0gKiBGT1JDRV9ESVNBQkxFICBSZWd1bGF0b3Igc2h1dCBkb3duIGJ5IHNvZnR3YXJlLgorICogRk9SQ0VfRElTQUJMRSAgUmVndWxhdG9yIGZvcmNpYmx5IHNodXQgZG93biBieSBzb2Z0d2FyZS4KICAqIFZPTFRBR0VfQ0hBTkdFIFJlZ3VsYXRvciB2b2x0YWdlIGNoYW5nZWQuCisgKiBESVNBQkxFICAgICAgICBSZWd1bGF0b3Igd2FzIGRpc2FibGVkLgogICoKICAqIE5PVEU6IFRoZXNlIGV2ZW50cyBjYW4gYmUgT1InZWQgdG9nZXRoZXIgd2hlbiBwYXNzZWQgaW50byBoYW5kbGVyLgogICovCkBAIC0xMDIsNiArMTAzLDcgQEAKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX09WRVJfVEVNUAkJMHgxMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRQkJMHgyMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfVk9MVEFHRV9DSEFOR0UJCTB4NDAKKyNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUgCQkweDgwCiAKIHN0cnVjdCByZWd1bGF0b3I7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKaW5kZXggMzFmMjA1NS4uNTkyY2Q3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKQEAgLTU4LDYgKzU4LDkgQEAKICAqIEBnZXRfb3B0aW11bV9tb2RlOiBHZXQgdGhlIG1vc3QgZWZmaWNpZW50IG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yCiAgKiAgICAgICAgICAgICAgICAgICAgd2hlbiBydW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLgogICoKKyAqIEBlbmFibGVfdGltZTogVGltZSB0YWtlbiBmb3IgdGhlIHJlZ3VsYXRvciB2b2x0YWdlIG91dHB1dCB2b2x0YWdlIHRvCisgKiAgICAgICAgICAgICAgIHN0YWJhbGlzZSBhZnRlciBiZWluZyBlbmFibGVkLCBpbiBtaWNyb3NlY29uZHMuCisgKgogICogQHNldF9zdXNwZW5kX3ZvbHRhZ2U6IFNldCB0aGUgdm9sdGFnZSBmb3IgdGhlIHJlZ3VsYXRvciB3aGVuIHRoZSBzeXN0ZW0KICAqICAgICAgICAgICAgICAgICAgICAgICBpcyBzdXNwZW5kZWQuCiAgKiBAc2V0X3N1c3BlbmRfZW5hYmxlOiBNYXJrIHRoZSByZWd1bGF0b3IgYXMgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMKQEAgLTkzLDYgKzk2LDkgQEAKIAlpbnQgKCpzZXRfbW9kZSkgKHN0cnVjdCByZWd1bGF0b3JfZGV2ICosIHVuc2lnbmVkIGludCBtb2RlKTsKIAl1bnNpZ25lZCBpbnQgKCpnZXRfbW9kZSkgKHN0cnVjdCByZWd1bGF0b3JfZGV2ICopOwogCisJLyogVGltZSB0YWtlbiB0byBlbmFibGUgdGhlIHJlZ3VsYXRvciAqLworCWludCAoKmVuYWJsZV90aW1lKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKik7CisKIAkvKiByZXBvcnQgcmVndWxhdG9yIHN0YXR1cyAuLi4gbW9zdCBvdGhlciBhY2Nlc3NvcnMgcmVwb3J0CiAJICogY29udHJvbCBpbnB1dHMsIHRoaXMgcmVwb3J0cyByZXN1bHRzIG9mIGNvbWJpbmluZyBpbnB1dHMKIAkgKiBmcm9tIExpbnV4IChhbmQgb3RoZXIgc291cmNlcykgd2l0aCB0aGUgYWN0dWFsIGxvYWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaAppbmRleCBlOTRhNGExLi5mZmQ3ZDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIEBtaWNyb3ZvbHRzOgkJT3V0cHV0IHZvbHRhZ2Ugb2YgcmVndWxhdG9yCiAgKiBAZ3BpbzoJCUdQSU8gdG8gdXNlIGZvciBlbmFibGUgY29udHJvbAogICogCQkJc2V0IHRvIC1FSU5WQUwgaWYgbm90IHVzZWQKKyAqIEBzdGFydHVwX2RlbGF5OglTdGFydC11cCB0aW1lIGluIG1pY3Jvc2Vjb25kcwogICogQGVuYWJsZV9oaWdoOglQb2xhcml0eSBvZiBlbmFibGUgR1BJTwogICoJCQkxID0gQWN0aXZlIGhpZ2gsIDAgPSBBY3RpdmUgbG93CiAgKiBAZW5hYmxlZF9hdF9ib290OglXaGV0aGVyIHJlZ3VsYXRvciBoYXMgYmVlbiBlbmFibGVkIGF0CkBAIC00MSw2ICs0Miw3IEBACiAJY29uc3QgY2hhciAqc3VwcGx5X25hbWU7CiAJaW50IG1pY3Jvdm9sdHM7CiAJaW50IGdwaW87CisJdW5zaWduZWQgc3RhcnR1cF9kZWxheTsKIAl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOwogCXVuc2lnbmVkIGVuYWJsZWRfYXRfYm9vdDoxOwogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYXg4NjQ5LmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYXg4NjQ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3ZDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDg2NDkuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogSW50ZXJmYWNlIG9mIE1heGltIG1heDg2NDkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogICAgICBIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfUkVHVUxBVE9SX01BWDg2NDlfSAorI2RlZmluZQlfX0xJTlVYX1JFR1VMQVRPUl9NQVg4NjQ5X0gKKworI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKK2VudW0geworCU1BWDg2NDlfRVhUQ0xLXzI2TUhaID0gMCwKKwlNQVg4NjQ5X0VYVENMS18xM01IWiwKKwlNQVg4NjQ5X0VYVENMS18xOU1IWiwJLyogMTkuMk1IeiAqLworfTsKKworZW51bSB7CisJTUFYODY0OV9SQU1QXzMyTVYgPSAwLAorCU1BWDg2NDlfUkFNUF8xNk1WLAorCU1BWDg2NDlfUkFNUF84TVYsCisJTUFYODY0OV9SQU1QXzRNViwKKwlNQVg4NjQ5X1JBTVBfMk1WLAorCU1BWDg2NDlfUkFNUF8xTVYsCisJTUFYODY0OV9SQU1QXzBfNU1WLAorCU1BWDg2NDlfUkFNUF8wXzI1TVYsCit9OworCitzdHJ1Y3QgbWF4ODY0OV9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVndWxhdG9yOworCisJdW5zaWduZWQJbW9kZToyOwkJLyogYml0WzE6MF0gPSBWSUQxLFZJRDAgKi8KKwl1bnNpZ25lZAlleHRjbGtfZnJlcToyOworCXVuc2lnbmVkCWV4dGNsazoxOworCXVuc2lnbmVkCXJhbXBfdGltaW5nOjM7CisJdW5zaWduZWQJcmFtcF9kb3duOjE7Cit9OworCisjZW5kaWYJLyogX19MSU5VWF9SRUdVTEFUT1JfTUFYODY0OV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oIGIvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaAppbmRleCBjOWJhMmZkLi5iYzhjMzg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmgKQEAgLTYsNiArNiwxMSBAQAogCiBleHRlcm4gaW50IHBtX3RyYWNlX2VuYWJsZWQ7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3RyYWNlX2lzX2VuYWJsZWQodm9pZCkKK3sKKyAgICAgICByZXR1cm4gcG1fdHJhY2VfZW5hYmxlZDsKK30KKwogc3RydWN0IGRldmljZTsKIGV4dGVybiB2b2lkIHNldF90cmFjZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGdlbmVyYXRlX3Jlc3VtZV90cmFjZShjb25zdCB2b2lkICp0cmFjZWRhdGEsIHVuc2lnbmVkIGludCB1c2VyKTsKQEAgLTE3LDYgKzIyLDggQEAKIAogI2Vsc2UKIAorc3RhdGljIGlubGluZSBpbnQgcG1fdHJhY2VfaXNfZW5hYmxlZCh2b2lkKSB7IHJldHVybiAwOyB9CisKICNkZWZpbmUgVFJBQ0VfREVWSUNFKGRldikgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBUUkFDRV9SRVNVTUUoZGV2KSBkbyB7IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDA1MzMwZmMuLmQxYzdjOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzYyLDYgKzM2Miw4IEBACiAjZGVmaW5lIFJUQVhfRkVBVFVSRVMgUlRBWF9GRUFUVVJFUwogCVJUQVhfUlRPX01JTiwKICNkZWZpbmUgUlRBWF9SVE9fTUlOIFJUQVhfUlRPX01JTgorCVJUQVhfSU5JVFJXTkQsCisjZGVmaW5lIFJUQVhfSU5JVFJXTkQgUlRBWF9JTklUUldORAogCV9fUlRBWF9NQVgKIH07CiAKQEAgLTczNSw2ICs3MzcsOSBAQAogZXh0ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CiBleHRlcm4gaW50IHJ0bmxfdHJ5bG9jayh2b2lkKTsKIGV4dGVybiBpbnQgcnRubF9pc19sb2NrZWQodm9pZCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2V4dGVybiBpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiAKIGV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19ydG5sX3VubG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA3OGVmZTdjLi40YjE3NTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC05Nyw3ICs5Nyw3IEBACiBzdHJ1Y3QgZXhlY19kb21haW47CiBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGU7CiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZDsKLXN0cnVjdCBiaW87CitzdHJ1Y3QgYmlvX2xpc3Q7CiBzdHJ1Y3QgZnNfc3RydWN0Owogc3RydWN0IGJ0c19jb250ZXh0Owogc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dDsKQEAgLTc0MCwxNCArNzQwLDYgQEAKIAl1aWRfdCB1aWQ7CiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlzdHJ1Y3QgdGFza19ncm91cCAqdGc7Ci0jaWZkZWYgQ09ORklHX1NZU0ZTCi0Jc3RydWN0IGtvYmplY3Qga29iajsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAJYXRvbWljX2xvbmdfdCBsb2NrZWRfdm07CiAjZW5kaWYKQEAgLTg3OCw3ICs4NzAsMTAgQEAKIAlpZiAoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRTsKIAotCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKKwlpZiAoIXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpCisJCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZF9iYWxhbmNlX2Zvcl9wYWNrYWdlX3Bvd2VyKHZvaWQpCkBAIC0xMDg0LDcgKzEwNzksOCBAQAogc3RydWN0IHNjaGVkX2NsYXNzIHsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHQ7CiAKLQl2b2lkICgqZW5xdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKTsKKwl2b2lkICgqZW5xdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLAorCQkJICAgICAgYm9vbCBoZWFkKTsKIAl2b2lkICgqZGVxdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApOwogCXZvaWQgKCp5aWVsZF90YXNrKSAoc3RydWN0IHJxICpycSk7CiAKQEAgLTEwOTYsMTQgKzEwOTIsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgICgqc2VsZWN0X3Rhc2tfcnEpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWcsIGludCBmbGFncyk7CiAKLQl1bnNpZ25lZCBsb25nICgqbG9hZF9iYWxhbmNlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsCi0JCQlzdHJ1Y3QgcnEgKmJ1c2llc3QsIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKLQkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJCWludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbyk7Ci0KLQlpbnQgKCptb3ZlX29uZV90YXNrKSAoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsCi0JCQkgICAgICBzdHJ1Y3QgcnEgKmJ1c2llc3QsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCp0YXNrX3dha2luZykgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKQEAgLTE0NjYsNyArMTQ1NCw3IEBACiAJdm9pZCAqam91cm5hbF9pbmZvOwogCiAvKiBzdGFja2VkIGJsb2NrIGRldmljZSBpbmZvICovCi0Jc3RydWN0IGJpbyAqYmlvX2xpc3QsICoqYmlvX3RhaWw7CisJc3RydWN0IGJpb19saXN0ICpiaW9fbGlzdDsKIAogLyogVk0gc3RhdGUgKi8KIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcmVjbGFpbV9zdGF0ZTsKQEAgLTI1MTcsMTMgKzI1MDUsOSBAQAogCiBleHRlcm4gdm9pZCBub3JtYWxpemVfcnRfdGFza3Modm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAKIGV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXA7Ci0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLWV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCByb290X3Rhc2tfZ3JvdXA7Ci1leHRlcm4gdm9pZCBzZXRfdGdfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7Ci0jZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwICpzY2hlZF9jcmVhdGVfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBzY2hlZF9kZXN0cm95X2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMmM2MjdkMy4uMjMzZDIwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNzYsNyArNzYsNyBAQAogZXh0ZXJuIGludCBjYXBfdGFza19zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKmxwKTsKIGV4dGVybiBpbnQgY2FwX3Rhc2tfc2V0aW9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGlvcHJpbyk7CiBleHRlcm4gaW50IGNhcF90YXNrX3NldG5pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSk7Ci1leHRlcm4gaW50IGNhcF9zeXNsb2coaW50IHR5cGUpOworZXh0ZXJuIGludCBjYXBfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CiBleHRlcm4gaW50IGNhcF92bV9lbm91Z2hfbWVtb3J5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBsb25nIHBhZ2VzKTsKIAogc3RydWN0IG1zZ2hkcjsKQEAgLTk1LDYgKzk1LDggQEAKIGV4dGVybiBpbnQgY2FwX25ldGxpbmtfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBjYXBfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXApOwogCit2b2lkIHJlc2V0X3NlY3VyaXR5X29wcyh2b2lkKTsKKwogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1tYXBfbWluX2FkZHI7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBkYWNfbW1hcF9taW5fYWRkcjsKQEAgLTk4NSw2ICs5ODcsNyBAQAogICoJQ2hlY2sgcGVybWlzc2lvbnMgb24gaW5jb21pbmcgbmV0d29yayBwYWNrZXRzLiAgVGhpcyBob29rIGlzIGRpc3RpbmN0CiAgKglmcm9tIE5ldGZpbHRlcidzIElQIGlucHV0IGhvb2tzIHNpbmNlIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhlCiAgKglpbmNvbWluZyBza19idWZmIEBza2IgaGFzIGJlZW4gYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzb2NrZXQsIEBzay4KKyAqCU11c3Qgbm90IHNsZWVwIGluc2lkZSB0aGlzIGhvb2sgYmVjYXVzZSBzb21lIGNhbGxlcnMgaG9sZCBzcGlubG9ja3MuCiAgKglAc2sgY29udGFpbnMgdGhlIHNvY2sgKG5vdCBzb2NrZXQpIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5jb21pbmcgc2tfYnVmZi4KICAqCUBza2IgY29udGFpbnMgdGhlIGluY29taW5nIG5ldHdvcmsgZGF0YS4KICAqIEBzb2NrZXRfZ2V0cGVlcnNlY19zdHJlYW06CkBAIC0xMzQ4LDYgKzEzNTEsNyBAQAogICoJbG9nZ2luZyB0byB0aGUgY29uc29sZS4KICAqCVNlZSB0aGUgc3lzbG9nKDIpIG1hbnVhbCBwYWdlIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgQHR5cGUgdmFsdWVzLgogICoJQHR5cGUgY29udGFpbnMgdGhlIHR5cGUgb2YgYWN0aW9uLgorICoJQGZyb21fZmlsZSBpbmRpY2F0ZXMgdGhlIGNvbnRleHQgb2YgYWN0aW9uIChpZiBpdCBjYW1lIGZyb20gL3Byb2MpLgogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICogQHNldHRpbWU6CiAgKglDaGVjayBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgc3lzdGVtIHRpbWUuCkBAIC0xNDYyLDcgKzE0NjYsNyBAQAogCWludCAoKnN5c2N0bCkgKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApOwogCWludCAoKnF1b3RhY3RsKSAoaW50IGNtZHMsIGludCB0eXBlLCBpbnQgaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCWludCAoKnF1b3RhX29uKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLQlpbnQgKCpzeXNsb2cpIChpbnQgdHlwZSk7CisJaW50ICgqc3lzbG9nKSAoaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKTsKIAlpbnQgKCpzZXR0aW1lKSAoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IHRpbWV6b25lICp0eik7CiAJaW50ICgqdm1fZW5vdWdoX21lbW9yeSkgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBsb25nIHBhZ2VzKTsKIApAQCAtMTc2MSw3ICsxNzY1LDcgQEAKIGludCBzZWN1cml0eV9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBvcCk7CiBpbnQgc2VjdXJpdHlfcXVvdGFjdGwoaW50IGNtZHMsIGludCB0eXBlLCBpbnQgaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IHNlY3VyaXR5X3F1b3RhX29uKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlKTsKK2ludCBzZWN1cml0eV9zeXNsb2coaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKTsKIGludCBzZWN1cml0eV9zZXR0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopOwogaW50IHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnkobG9uZyBwYWdlcyk7CiBpbnQgc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbG9uZyBwYWdlcyk7CkBAIC0yMDA3LDkgKzIwMTEsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zeXNsb2coaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zeXNsb2coaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKQogewotCXJldHVybiBjYXBfc3lzbG9nKHR5cGUpOworCXJldHVybiBjYXBfc3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NldHRpbWUoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IHRpbWV6b25lICp0eikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAppbmRleCA4MzY2ZDhmLi4wM2MwMjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC0xMzUsNCArMTM1LDIyIEBACiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqc2VxX2xpc3RfbmV4dCh2b2lkICp2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQlsb2ZmX3QgKnBwb3MpOwogCisvKgorICogSGVscGVycyBmb3IgaXRlcmF0aW9uIG92ZXIgaGxpc3RfaGVhZC1zIGluIHNlcV9maWxlcworICovCisKK2V4dGVybiBzdHJ1Y3QgaGxpc3Rfbm9kZSAqc2VxX2hsaXN0X3N0YXJ0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkgIGxvZmZfdCBwb3MpOworZXh0ZXJuIHN0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfaGVhZChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgIGxvZmZfdCBwb3MpOworZXh0ZXJuIHN0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3RfbmV4dCh2b2lkICp2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJIGxvZmZfdCAqcHBvcyk7CisKK2V4dGVybiBzdHJ1Y3QgaGxpc3Rfbm9kZSAqc2VxX2hsaXN0X3N0YXJ0X3JjdShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgbG9mZl90IHBvcyk7CitleHRlcm4gc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9zdGFydF9oZWFkX3JjdShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCSAgIGxvZmZfdCBwb3MpOworZXh0ZXJuIHN0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3RfbmV4dF9yY3Uodm9pZCAqdiwKKwkJCQkJCSAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkJICAgbG9mZl90ICpwcG9zKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpby5oIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCmluZGV4IDgxM2QyNmMuLjY0YjQ3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKQEAgLTMwLDcgKzMwLDYgQEAKIAljaGFyIHBoeXNbMzJdOwogCiAJYm9vbCBtYW51YWxfYmluZDsKLQlib29sIHJlZ2lzdGVyZWQ7CS8qIHBvcnQgaGFzIGJlZW4gZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIGRyaXZlciBjb3JlICovCiAKIAlzdHJ1Y3Qgc2VyaW9fZGV2aWNlX2lkIGlkOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCmluZGV4IDRlZjI0NmYuLjUxZDI4OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpCiAjZW5kaWYKIAotc3RydWN0IGludGNfZGVzYyB7CitzdHJ1Y3QgaW50Y19od19kZXNjIHsKIAlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOwogCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOwogCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7CkBAIC01NiwyOSArNTYsNDAgQEAKIAl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOwogCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKIAl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKLQljaGFyICpuYW1lOwogCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKIAl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7CiB9OwogCiAjZGVmaW5lIF9JTlRDX0FSUkFZKGEpIGEsIHNpemVvZihhKS9zaXplb2YoKmEpCisjZGVmaW5lIElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVncywJXAorCQkgICAgIHByaW9fcmVncywJc2Vuc2VfcmVncywgYWNrX3JlZ3MpCVwKK3sJCQkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJXAorCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLCBfSU5UQ19BUlJBWShhY2tfcmVncyksCVwKK30KKworc3RydWN0IGludGNfZGVzYyB7CisJY2hhciAqbmFtZTsKKwlpbnRjX2VudW0gZm9yY2VfZW5hYmxlOworCWludGNfZW51bSBmb3JjZV9kaXNhYmxlOworCXN0cnVjdCBpbnRjX2h3X2Rlc2MgaHc7Cit9OworCiAjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJCVwKIAltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncykJCQkJXAogc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKKwkubmFtZSA9IGNoaXBuYW1lLAkJCQkJCVwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCQkJXAorCQkJICAgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBOVUxMKSwJCVwKIH0KIAogI2RlZmluZSBERUNMQVJFX0lOVENfREVTQ19BQ0soc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAlcCiAJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MsIGFja19yZWdzKQkJCVwKIHN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCi0JX0lOVENfQVJSQVkoYWNrX3JlZ3MpLAkJCQkJCVwKKwkubmFtZSA9IGNoaXBuYW1lLAkJCQkJCVwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCQkJXAorCQkJICAgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncyksCQlcCiB9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGFlODM2ZmQuLjAzZjgxNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMzE1LDIyICszMTUsMjMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkJKm5leHQ7CiAJc3RydWN0IHNrX2J1ZmYJCSpwcmV2OwogCi0Jc3RydWN0IHNvY2sJCSpzazsKIAlrdGltZV90CQkJdHN0YW1wOworCisJc3RydWN0IHNvY2sJCSpzazsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCi0JdW5zaWduZWQgbG9uZwkJX3NrYl9kc3Q7Ci0jaWZkZWYgQ09ORklHX1hGUk0KLQlzdHJ1Y3QJc2VjX3BhdGgJKnNwOwotI2VuZGlmCiAJLyoKIAkgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5CiAJICogbGF5ZXIuIFBsZWFzZSBwdXQgeW91ciBwcml2YXRlIHZhcmlhYmxlcyB0aGVyZS4gSWYgeW91CiAJICogd2FudCB0byBrZWVwIHRoZW0gYWNyb3NzIGxheWVycyB5b3UgaGF2ZSB0byBkbyBhIHNrYl9jbG9uZSgpCiAJICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLgogCSAqLwotCWNoYXIJCQljYls0OF07CisJY2hhcgkJCWNiWzQ4XSBfX2FsaWduZWQoOCk7CiAKKwl1bnNpZ25lZCBsb25nCQlfc2tiX2RzdDsKKyNpZmRlZiBDT05GSUdfWEZSTQorCXN0cnVjdAlzZWNfcGF0aAkqc3A7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQJCWxlbiwKIAkJCQlkYXRhX2xlbjsKIAlfX3UxNgkJCW1hY19sZW4sCkBAIC0zNTQsOCArMzU1LDggQEAKIAkJCQlpcHZzX3Byb3BlcnR5OjEsCiAJCQkJcGVla2VkOjEsCiAJCQkJbmZfdHJhY2U6MTsKLQlfX2JlMTYJCQlwcm90b2NvbDoxNjsKIAlrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzMSk7CisJX19iZTE2CQkJcHJvdG9jb2w7CiAKIAl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCkBAIC03MzgsNyArNzM5LDcgQEAKIH0KIAogLyoqCi0gKglza2JfcGVlaworICoJc2tiX3BlZWsgLSBwZWVrIGF0IHRoZSBoZWFkIG9mIGFuICZza19idWZmX2hlYWQKICAqCUBsaXN0XzogbGlzdCB0byBwZWVrIGF0CiAgKgogICoJUGVlayBhbiAmc2tfYnVmZi4gVW5saWtlIG1vc3Qgb3RoZXIgb3BlcmF0aW9ucyB5b3UgX01VU1RfCkBAIC03NTksNyArNzYwLDcgQEAKIH0KIAogLyoqCi0gKglza2JfcGVla190YWlsCisgKglza2JfcGVla190YWlsIC0gcGVlayBhdCB0aGUgdGFpbCBvZiBhbiAmc2tfYnVmZl9oZWFkCiAgKglAbGlzdF86IGxpc3QgdG8gcGVlayBhdAogICoKICAqCVBlZWsgYW4gJnNrX2J1ZmYuIFVubGlrZSBtb3N0IG90aGVyIG9wZXJhdGlvbnMgeW91IF9NVVNUXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbm1wLmggYi9pbmNsdWRlL2xpbnV4L3NubXAuaAppbmRleCAwZjk1M2ZlLi5lMjhmNWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NubXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NubXAuaApAQCAtMjU3LDYgKzI1Nyw3IEBACiAJTElOVVhfTUlCX1hGUk1PVVRQT0xCTE9DSywJCS8qIFhmcm1PdXRQb2xCbG9jayAqLwogCUxJTlVYX01JQl9YRlJNT1VUUE9MREVBRCwJCS8qIFhmcm1PdXRQb2xEZWFkICovCiAJTElOVVhfTUlCX1hGUk1PVVRQT0xFUlJPUiwJCS8qIFhmcm1PdXRQb2xFcnJvciAqLworCUxJTlVYX01JQl9YRlJNRldESERSRVJST1IsCQkvKiBYZnJtRndkSGRyRXJyb3IqLwogCV9fTElOVVhfTUlCX1hGUk1NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKaW5kZXggNTFiM2U3Ny4uY2M4MTNmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKQEAgLTkwLDYgKzkwLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlwYWRkcjsKIAl1MzIJCQlpb2xlbjsKIAlpbnQJCQlpcnE7CisJdTMyCQkJZmlmb19sZW47CS8qIGRlcHRoIG9mIHRoZSBGSUZPIGJ1ZmZlciAqLwogCXUzMgkJCW1heF9mcmVxOwkvKiBtYXggYnVzIGZyZXEgc3VwcG9ydGVkICovCiAKIAl1MTYJCQlidXNfbnVtOwpAQCAtMTcxLDYgKzE3MiwxMCBAQAogewogCWlmIChjcyA+IGR3cy0+bnVtX2NzKQogCQlyZXR1cm47CisKKwlpZiAoZHdzLT5jc19jb250cm9sKQorCQlkd3MtPmNzX2NvbnRyb2woMSk7CisKIAlkd193cml0ZWwoZHdzLCBzZXIsIDEgPDwgY3MpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3UuaCBiL2luY2x1ZGUvbGludXgvc3JjdS5oCmluZGV4IDQ3NjVkOTcuLjRkNWVjYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3JjdS5oCkBAIC0zMyw4ICszMywxMSBAQAogCiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewogCWludCBjb21wbGV0ZWQ7Ci0Jc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5ICpwZXJfY3B1X3JlZjsKKwlzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkgX19wZXJjcHUgKnBlcl9jcHVfcmVmOwogCXN0cnVjdCBtdXRleCBtdXRleDsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLwogfTsKIAogI2lmbmRlZiBDT05GSUdfUFJFRU1QVApAQCAtNDMsMTIgKzQ2LDEwMCBAQAogI2RlZmluZSBzcmN1X2JhcnJpZXIoKQogI2VuZGlmIC8qICNlbHNlICNpZm5kZWYgQ09ORklHX1BSRUVNUFQgKi8KIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKK2ludCBfX2luaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2RlZmluZSBpbml0X3NyY3Vfc3RydWN0KHNwKSBcCisoeyBcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX3NyY3Vfa2V5OyBcCisJXAorCV9faW5pdF9zcmN1X3N0cnVjdCgoc3ApLCAjc3AsICZfX3NyY3Vfa2V5KTsgXAorfSkKKworIyBkZWZpbmUgc3JjdV9yZWFkX2FjcXVpcmUoc3ApIFwKKwkJbG9ja19hY3F1aXJlKCYoc3ApLT5kZXBfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSBzcmN1X3JlYWRfcmVsZWFzZShzcCkgXAorCQlsb2NrX3JlbGVhc2UoJihzcCktPmRlcF9tYXAsIDEsIF9USElTX0lQXykKKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIGludCBpbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOworCisjIGRlZmluZSBzcmN1X3JlYWRfYWNxdWlyZShzcCkgIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNyY3VfcmVhZF9yZWxlYXNlKHNwKSAgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKLWludCBzcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKSBfX2FjcXVpcmVzKHNwKTsKLXZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KSBfX3JlbGVhc2VzKHNwKTsKK2ludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApOwordm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkgX19yZWxlYXNlcyhzcCk7CiB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CiB2b2lkIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogbG9uZyBzcmN1X2JhdGNoZXNfY29tcGxldGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKworLyoqCisgKiBzcmN1X3JlYWRfbG9ja19oZWxkIC0gbWlnaHQgd2UgYmUgaW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEluIGFic2VuY2Ugb2YgQ09ORklHX1BST1ZFX0xPQ0tJTkcsCisgKiB0aGlzIGFzc3VtZXMgd2UgYXJlIGluIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzcmN1X3JlYWRfbG9ja19oZWxkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZzcC0+ZGVwX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCitzdGF0aWMgaW5saW5lIGludCBzcmN1X3JlYWRfbG9ja19oZWxkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworLyoqCisgKiBzcmN1X2RlcmVmZXJlbmNlIC0gZmV0Y2ggU1JDVS1wcm90ZWN0ZWQgcG9pbnRlciB3aXRoIGNoZWNraW5nCisgKgorICogTWFrZXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgZG8gdGhlIGRpcnR5IHdvcmsuCisgKi8KKyNkZWZpbmUgc3JjdV9kZXJlZmVyZW5jZShwLCBzcCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgc3JjdV9yZWFkX2xvY2tfaGVsZChzcCkpCisKKy8qKgorICogc3JjdV9yZWFkX2xvY2sgLSByZWdpc3RlciBhIG5ldyByZWFkZXIgZm9yIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KKyAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIG5ldyByZWFkZXIuCisgKgorICogRW50ZXIgYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIE5vdGUgdGhhdCBTUkNVIHJlYWQtc2lkZQorICogY3JpdGljYWwgc2VjdGlvbnMgbWF5IGJlIG5lc3RlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkgX19hY3F1aXJlcyhzcCkKK3sKKwlpbnQgcmV0dmFsID0gX19zcmN1X3JlYWRfbG9jayhzcCk7CisKKwlzcmN1X3JlYWRfYWNxdWlyZShzcCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBzcmN1X3JlYWRfdW5sb2NrIC0gdW5yZWdpc3RlciBhIG9sZCByZWFkZXIgZnJvbSBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCisgKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHVucmVnaXN0ZXIgdGhlIG9sZCByZWFkZXIuCisgKiBAaWR4OiByZXR1cm4gdmFsdWUgZnJvbSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCisgKgorICogRXhpdCBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQorCV9fcmVsZWFzZXMoc3ApCit7CisJc3JjdV9yZWFkX3JlbGVhc2Uoc3ApOworCV9fc3JjdV9yZWFkX3VubG9jayhzcCwgaWR4KTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oIGIvaW5jbHVkZS9saW51eC9zdG1tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmJmZDFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdG1tYWMuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEhlYWRlciBmaWxlIGZvciBzdG1tYWMgcGxhdGZvcm0gZGF0YQorCisgIENvcHlyaWdodCAoQykgMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1NUTU1BQ19QTEFURk9STV9EQVRBCisjZGVmaW5lIF9fU1RNTUFDX1BMQVRGT1JNX0RBVEEKKworLyogcGxhdGZyb20gZGF0YSBmb3IgcGxhdGZyb20gZGV2aWNlIHN0cnVjdHVyZSdzIHBsYXRmcm9tX2RhdGEgZmllbGQgKi8KKworLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgU1RNIG9uLWJvYXJkIGV0aGVybmV0IGRyaXZlciAqLworc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhIHsKKwlpbnQgYnVzX2lkOworCWludCBwYmw7CisJaW50IGhhc19nbWFjOworCXZvaWQgKCpmaXhfbWFjX3NwZWVkKSh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOworCXZvaWQgKCpidXNfc2V0dXApKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKyNpZmRlZiBDT05GSUdfU1RNX0RSSVZFUlMKKwlzdHJ1Y3Qgc3RtX3BhZF9jb25maWcgKnBhZF9jb25maWc7CisjZW5kaWYKKwl2b2lkICpic3BfcHJpdjsKK307CisKK3N0cnVjdCBwbGF0X3N0bW1hY3BoeV9kYXRhIHsKKwlpbnQgYnVzX2lkOworCWludCBwaHlfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGh5X21hc2s7CisJaW50IGludGVyZmFjZTsKKwlpbnQgKCpwaHlfcmVzZXQpKHZvaWQgKnByaXYpOworCXZvaWQgKnByaXY7Cit9OworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCAyMDc0NjZhNC4uODEyNmYyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtOTksNyArOTksNyBAQAogI2RlZmluZSBfX1NDX1RFU1Q1KHQ1LCBhNSwgLi4uKQlfX1NDX1RFU1QodDUpOyBfX1NDX1RFU1Q0KF9fVkFfQVJHU19fKQogI2RlZmluZSBfX1NDX1RFU1Q2KHQ2LCBhNiwgLi4uKQlfX1NDX1RFU1QodDYpOyBfX1NDX1RFU1Q1KF9fVkFfQVJHU19fKQogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQkJCQkgICAgICAgXAogCS5wcm9maWxlX2VuYWJsZSA9IHByb2Zfc3lzZW50ZXJfZW5hYmxlLAkJCQkgICAgICAgXApAQCAtMTEzLDcgKzExMyw3IEBACiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFX0lOSVQoc25hbWUpCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEUoc25hbWUpCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEVfSU5JVChzbmFtZSkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwogI2RlZmluZSBfX1NDX1NUUl9BREVDTDEodCwgYSkJCSNhCkBAIC0xMzIsNyArMTMyLDggQEAKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfZW50ZXJfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZW50ZXIsCQlcCiAJfTsJCQkJCQkJCVwKQEAgLTE0Myw4ICsxNDQsNyBAQAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZW50ZXIiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAogCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAotCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9lbnRlcl9mb3JtYXQsCQlcCisJCS5yYXdfaW5pdAkJPSBpbml0X3N5c2NhbGxfdHJhY2UsCQlcCiAJCS5kZWZpbmVfZmllbGRzCQk9IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcywJXAogCQkucmVnZnVuYwkJPSByZWdfZXZlbnRfc3lzY2FsbF9lbnRlciwJXAogCQkudW5yZWdmdW5jCQk9IHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKQEAgLTE1NCw3ICsxNTQsOCBAQAogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJXAotCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfZXhpdF8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50X2V4aXRfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewlcCiAJCS50cmFjZSAgICAgICAgICAgICAgICAgID0gcHJpbnRfc3lzY2FsbF9leGl0LAkJXAogCX07CQkJCQkJCQlcCkBAIC0xNjUsOCArMTY2LDcgQEAKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2V4aXQiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAogCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSwJXAotCQkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQlcCi0JCS5zaG93X2Zvcm1hdAkJPSBzeXNjYWxsX2V4aXRfZm9ybWF0LAkJXAorCQkucmF3X2luaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlLAkJXAogCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2V4aXRfZGVmaW5lX2ZpZWxkcywJXAogCQkucmVnZnVuYwkJPSByZWdfZXZlbnRfc3lzY2FsbF9leGl0LAlcCiAJCS51bnJlZ2Z1bmMJCT0gdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0LAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCBiZDI3ZmJjLi5mNjYwMTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTQ4MSw5ICs0ODEsNiBAQAogCU5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUz0yMCwKIAlORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQ9MjEsCiAJTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZPTIyLAotCU5FVF9JUFY0X0NPTkZfQUNDRVBUX0xPQ0FMPTIzLAotCU5FVF9JUFY0X0NPTkZfU1JDX1ZNQVJLPTI0LAotCV9fTkVUX0lQVjRfQ09ORl9NQVgKIH07CiAKIC8qIC9wcm9jL3N5cy9uZXQvaXB2NC9uZXRmaWx0ZXIgKi8KQEAgLTU5OSw3ICs1OTYsNiBAQAogCU5FVF9ORUlHSF9HQ19USFJFU0gzPTE2LAogCU5FVF9ORUlHSF9SRVRSQU5TX1RJTUVfTVM9MTcsCiAJTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FX01TPTE4LAotCV9fTkVUX05FSUdIX01BWAogfTsKIAogLyogL3Byb2Mvc3lzL25ldC9kY2NwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2xvZy5oIGIvaW5jbHVkZS9saW51eC9zeXNsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODkxMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeXNsb2cuaApAQCAtMCwwICsxLDUyIEBACisvKiAgU3lzbG9nIGludGVybmFscworICoKKyAqICBDb3B5cmlnaHQgMjAxMCBDYW5vbmljYWwsIEx0ZC4KKyAqICBBdXRob3I6IEtlZXMgQ29vayA8a2Vlcy5jb29rQGNhbm9uaWNhbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZU0xPR19ICisjZGVmaW5lIF9MSU5VWF9TWVNMT0dfSAorCisvKiBDbG9zZSB0aGUgbG9nLiAgQ3VycmVudGx5IGEgTk9QLiAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX0NMT1NFICAgICAgICAgIDAKKy8qIE9wZW4gdGhlIGxvZy4gQ3VycmVudGx5IGEgTk9QLiAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX09QRU4gICAgICAgICAgIDEKKy8qIFJlYWQgZnJvbSB0aGUgbG9nLiAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX1JFQUQgICAgICAgICAgIDIKKy8qIFJlYWQgYWxsIG1lc3NhZ2VzIHJlbWFpbmluZyBpbiB0aGUgcmluZyBidWZmZXIuICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgICAgICAgMworLyogUmVhZCBhbmQgY2xlYXIgYWxsIG1lc3NhZ2VzIHJlbWFpbmluZyBpbiB0aGUgcmluZyBidWZmZXIgKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9SRUFEX0NMRUFSICAgICA0CisvKiBDbGVhciByaW5nIGJ1ZmZlci4gKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9DTEVBUiAgICAgICAgICA1CisvKiBEaXNhYmxlIHByaW50aydzIHRvIGNvbnNvbGUgKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9DT05TT0xFX09GRiAgICA2CisvKiBFbmFibGUgcHJpbnRrJ3MgdG8gY29uc29sZSAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX0NPTlNPTEVfT04gICAgIDcKKy8qIFNldCBsZXZlbCBvZiBtZXNzYWdlcyBwcmludGVkIHRvIGNvbnNvbGUgKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9DT05TT0xFX0xFVkVMICA4CisvKiBSZXR1cm4gbnVtYmVyIG9mIHVucmVhZCBjaGFyYWN0ZXJzIGluIHRoZSBsb2cgYnVmZmVyICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fU0laRV9VTlJFQUQgICAgOQorLyogUmV0dXJuIHNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUiAgIDEwCisKKyNkZWZpbmUgU1lTTE9HX0ZST01fQ0FMTCAwCisjZGVmaW5lIFNZU0xPR19GUk9NX0ZJTEUgMQorCitpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgY291bnQsIGJvb2wgZnJvbV9maWxlKTsKKworI2VuZGlmIC8qIF9MSU5VWF9TWVNMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggN2ZlZThhNC4uYTc3OGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xMDMsNiArMTAzLDggQEAKICNkZWZpbmUgVENQX0NPTkdFU1RJT04JCTEzCS8qIENvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gKi8KICNkZWZpbmUgVENQX01ENVNJRwkJMTQJLyogVENQIE1ENSBTaWduYXR1cmUgKFJGQzIzODUpICovCiAjZGVmaW5lIFRDUF9DT09LSUVfVFJBTlNBQ1RJT05TCTE1CS8qIFRDUCBDb29raWUgVHJhbnNhY3Rpb25zICovCisjZGVmaW5lIFRDUF9USElOX0xJTkVBUl9USU1FT1VUUyAxNiAgICAgIC8qIFVzZSBsaW5lYXIgdGltZW91dHMgZm9yIHRoaW4gc3RyZWFtcyovCisjZGVmaW5lIFRDUF9USElOX0RVUEFDSyAgICAgICAgIDE3ICAgICAgLyogRmFzdCByZXRyYW5zLiBhZnRlciAxIGR1cGFjayAqLwogCiAvKiBmb3IgVENQX0lORk8gc29ja2V0IG9wdGlvbiAqLwogI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTCTEKQEAgLTM0MCw3ICszNDIsMTAgQEAKIAl1MzIJZnJ0b19oaWdobWFyazsJLyogc25kX254dCB3aGVuIFJUTyBvY2N1cnJlZCAqLwogCXUxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCiAJdTgJZnJ0b19jb3VudGVyOwkvKiBOdW1iZXIgb2YgbmV3IGFja3MgYWZ0ZXIgUlRPICovCi0JdTgJbm9uYWdsZTsJLyogRGlzYWJsZSBOYWdsZSBhbGdvcml0aG0/ICAgICAgICAgICAgICovCisJdTgJbm9uYWdsZSAgICAgOiA0LC8qIERpc2FibGUgTmFnbGUgYWxnb3JpdGhtPyAgICAgICAgICAgICAqLworCQl0aGluX2x0byAgICA6IDEsLyogVXNlIGxpbmVhciB0aW1lb3V0cyBmb3IgdGhpbiBzdHJlYW1zICovCisJCXRoaW5fZHVwYWNrIDogMSwvKiBGYXN0IHJldHJhbnNtaXQgb24gZmlyc3QgZHVwYWNrICAgICAgKi8KKwkJdW51c2VkICAgICAgOiAyOwogCiAvKiBSVFQgbWVhc3VyZW1lbnQgKi8KIAl1MzIJc3J0dDsJCS8qIHNtb290aGVkIHJvdW5kIHRyaXAgdGltZSA8PCAzCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOTRmOGZhZS4uN2EwODJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMjM4LDkgKzIzOCw2IEBACiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCiAgKi8KIGV4dGVybiBpbnQgdGltZV9zdGF0dXM7CQkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzIGJpdHMgKi8KLWV4dGVybiBsb25nIHRpbWVfbWF4ZXJyb3I7CS8qIG1heGltdW0gZXJyb3IgKi8KLWV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CS8qIGVzdGltYXRlZCBlcnJvciAqLwotCiBleHRlcm4gbG9uZyB0aW1lX2FkanVzdDsJLyogVGhlIGFtb3VudCBvZiBhZGp0aW1lIGxlZnQgKi8KIAogZXh0ZXJuIHZvaWQgbnRwX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCA2YWJmY2Y1Li5kOTZlNTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTY4LDYgKzY4LDE2IEBACiAJdW5zaWduZWQgbG9uZyBkYXRhWzBdOwogfTsKIAorLyoKKyAqIFdlIGRlZmF1bHQgdG8gZGljaW5nIHR0eSBidWZmZXIgYWxsb2NhdGlvbnMgdG8gdGhpcyBtYW55IGNoYXJhY3RlcnMKKyAqIGluIG9yZGVyIHRvIGF2b2lkIG11bHRpcGxlIHBhZ2UgYWxsb2NhdGlvbnMuIFdlIGFzc3VtZSB0dHlfYnVmZmVyIGl0c2VsZgorICogaXMgdW5kZXIgMjU2IGJ5dGVzLiBTZWUgdHR5X2J1ZmZlcl9maW5kIGZvciB0aGUgYWxsb2NhdGlvbiBsb2dpYyB0aGlzCisgKiBtdXN0IG1hdGNoCisgKi8KKworI2RlZmluZSBUVFlfQlVGRkVSX1BBR0UJCSgoUEFHRV9TSVpFICAtIDI1NikgLyAyKQorCisKIHN0cnVjdCB0dHlfYnVmaGVhZCB7CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXNwaW5sb2NrX3QgbG9jazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaCBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaAppbmRleCBlYjY3N2NmNS4uOTIzOWQwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX0xJTlVYX1RUWV9GTElQX0gKIAogZXh0ZXJuIGludCB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjaGFyIGZsYWcsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqKmNoYXJzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgY2hhciAqKmZsYWdzLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtMjAsNCArMjAsOSBAQAogCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHR0eSwgJmNoLCAmZmxhZywgMSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKQoreworCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcodHR5LCBjaGFycywgVFRZX05PUk1BTCwgc2l6ZSk7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfVFRZX0ZMSVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDdhY2UxYi4uMzQ5MmFiZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMTIyLDcgKzEyMiw2IEBACiAgKgludW1iZXIgZnJvbSB0aGUgVVNCIGNvcmUgYnkgY2FsbGluZyB1c2JfcmVnaXN0ZXJfZGV2KCkuCiAgKiBAY29uZGl0aW9uOiBiaW5kaW5nIHN0YXRlIG9mIHRoZSBpbnRlcmZhY2U6IG5vdCBib3VuZCwgYmluZGluZwogICoJKGluIHByb2JlKCkpLCBib3VuZCB0byBhIGRyaXZlciwgb3IgdW5iaW5kaW5nIChpbiBkaXNjb25uZWN0KCkpCi0gKiBAaXNfYWN0aXZlOiBmbGFnIHNldCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYm91bmQgYW5kIG5vdCBzdXNwZW5kZWQuCiAgKiBAc3lzZnNfZmlsZXNfY3JlYXRlZDogc3lzZnMgYXR0cmlidXRlcyBleGlzdAogICogQGVwX2RldnNfY3JlYXRlZDogZW5kcG9pbnQgY2hpbGQgcHNldWRvLWRldmljZXMgZXhpc3QKICAqIEB1bnJlZ2lzdGVyaW5nOiBmbGFnIHNldCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYmVpbmcgdW5yZWdpc3RlcmVkCkBAIC0xMzUsOCArMTM0LDcgQEAKICAqIEBkZXY6IGRyaXZlciBtb2RlbCdzIHZpZXcgb2YgdGhpcyBkZXZpY2UKICAqIEB1c2JfZGV2OiBpZiBhbiBpbnRlcmZhY2UgaXMgYm91bmQgdG8gdGhlIFVTQiBtYWpvciwgdGhpcyB3aWxsIHBvaW50CiAgKgl0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gZm9yIHRoYXQgZGV2aWNlLgotICogQHBtX3VzYWdlX2NudDogUE0gdXNhZ2UgY291bnRlciBmb3IgdGhpcyBpbnRlcmZhY2U7IGF1dG9zdXNwZW5kIGlzIG5vdAotICoJYWxsb3dlZCB1bmxlc3MgdGhlIGNvdW50ZXIgaXMgMC4KKyAqIEBwbV91c2FnZV9jbnQ6IFBNIHVzYWdlIGNvdW50ZXIgZm9yIHRoaXMgaW50ZXJmYWNlCiAgKiBAcmVzZXRfd3M6IFVzZWQgZm9yIHNjaGVkdWxpbmcgcmVzZXRzIGZyb20gYXRvbWljIGNvbnRleHQuCiAgKiBAcmVzZXRfcnVubmluZzogc2V0IHRvIDEgaWYgdGhlIGludGVyZmFjZSBpcyBjdXJyZW50bHkgcnVubmluZyBhCiAgKiAgICAgIHF1ZXVlZCByZXNldCBzbyB0aGF0IHVzYl9jYW5jZWxfcXVldWVkX3Jlc2V0KCkgZG9lc24ndCB0cnkgdG8KQEAgLTE4NCw3ICsxODIsNiBAQAogCWludCBtaW5vcjsJCQkvKiBtaW5vciBudW1iZXIgdGhpcyBpbnRlcmZhY2UgaXMKIAkJCQkJICogYm91bmQgdG8gKi8KIAllbnVtIHVzYl9pbnRlcmZhY2VfY29uZGl0aW9uIGNvbmRpdGlvbjsJCS8qIHN0YXRlIG9mIGJpbmRpbmcgKi8KLQl1bnNpZ25lZCBpc19hY3RpdmU6MTsJCS8qIHRoZSBpbnRlcmZhY2UgaXMgbm90IHN1c3BlbmRlZCAqLwogCXVuc2lnbmVkIHN5c2ZzX2ZpbGVzX2NyZWF0ZWQ6MTsJLyogdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgZXhpc3QgKi8KIAl1bnNpZ25lZCBlcF9kZXZzX2NyZWF0ZWQ6MTsJLyogZW5kcG9pbnQgImRldmljZXMiIGV4aXN0ICovCiAJdW5zaWduZWQgdW5yZWdpc3RlcmluZzoxOwkvKiB1bnJlZ2lzdHJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLwpAQCAtMzM5LDYgKzMzNiw3IEBACiAKIAlzdHJ1Y3QgdXNiX2Rldm1hcCBkZXZtYXA7CS8qIGRldmljZSBhZGRyZXNzIGFsbG9jYXRpb24gbWFwICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKnJvb3RfaHViOwkvKiBSb290IGh1YiAqLworCXN0cnVjdCB1c2JfYnVzICpoc19jb21wYW5pb247CS8qIENvbXBhbmlvbiBFSENJIGJ1cywgaWYgYW55ICovCiAJc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsJLyogbGlzdCBvZiBidXNzZXMgKi8KIAogCWludCBiYW5kd2lkdGhfYWxsb2NhdGVkOwkvKiBvbiB0aGlzIGJ1czogaG93IG11Y2ggb2YgdGhlIHRpbWUKQEAgLTQwMCw3ICszOTgsNiBAQAogICogQHBvcnRudW06IHBhcmVudCBwb3J0IG51bWJlciAob3JpZ2luIDEpCiAgKiBAbGV2ZWw6IG51bWJlciBvZiBVU0IgaHViIGFuY2VzdG9ycwogICogQGNhbl9zdWJtaXQ6IFVSQnMgbWF5IGJlIHN1Ym1pdHRlZAotICogQGRpc2Nvbl9zdXNwZW5kZWQ6IGRpc2Nvbm5lY3RlZCB3aGlsZSBzdXNwZW5kZWQKICAqIEBwZXJzaXN0X2VuYWJsZWQ6ICBVU0JfUEVSU0lTVCBlbmFibGVkIGZvciB0aGlzIGRldmljZQogICogQGhhdmVfbGFuZ2lkOiB3aGV0aGVyIHN0cmluZ19sYW5naWQgaXMgdmFsaWQKICAqIEBhdXRob3JpemVkOiBwb2xpY3kgaGFzIHNhaWQgd2UgY2FuIHVzZSBpdDsKQEAgLTQyMCwyMCArNDE3LDE1IEBACiAgKiBAdXNiZnNfZGVudHJ5OiB1c2JmcyBkZW50cnkgZW50cnkgZm9yIHRoZSBkZXZpY2UKICAqIEBtYXhjaGlsZDogbnVtYmVyIG9mIHBvcnRzIGlmIGh1YgogICogQGNoaWxkcmVuOiBjaGlsZCBkZXZpY2VzIC0gVVNCIGRldmljZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gdGhpcyBodWIKLSAqIEBwbV91c2FnZV9jbnQ6IHVzYWdlIGNvdW50ZXIgZm9yIGF1dG9zdXNwZW5kCiAgKiBAcXVpcmtzOiBxdWlya3Mgb2YgdGhlIHdob2xlIGRldmljZQogICogQHVyYm51bTogbnVtYmVyIG9mIFVSQnMgc3VibWl0dGVkIGZvciB0aGUgd2hvbGUgZGV2aWNlCiAgKiBAYWN0aXZlX2R1cmF0aW9uOiB0b3RhbCB0aW1lIGRldmljZSBpcyBub3Qgc3VzcGVuZGVkCi0gKiBAYXV0b3N1c3BlbmQ6IGZvciBkZWxheWVkIGF1dG9zdXNwZW5kcwotICogQGF1dG9yZXN1bWU6IGZvciBhdXRvcmVzdW1lcyByZXF1ZXN0ZWQgd2hpbGUgaW5faW50ZXJydXB0Ci0gKiBAcG1fbXV0ZXg6IHByb3RlY3RzIFBNIG9wZXJhdGlvbnMKICAqIEBsYXN0X2J1c3k6IHRpbWUgb2YgbGFzdCB1c2UKICAqIEBhdXRvc3VzcGVuZF9kZWxheTogaW4gamlmZmllcwogICogQGNvbm5lY3RfdGltZTogdGltZSBkZXZpY2Ugd2FzIGZpcnN0IGNvbm5lY3RlZAogICogQGRvX3JlbW90ZV93YWtldXA6ICByZW1vdGUgd2FrZXVwIHNob3VsZCBiZSBlbmFibGVkCiAgKiBAcmVzZXRfcmVzdW1lOiBuZWVkcyByZXNldCBpbnN0ZWFkIG9mIHJlc3VtZQogICogQGF1dG9zdXNwZW5kX2Rpc2FibGVkOiBhdXRvc3VzcGVuZCBkaXNhYmxlZCBieSB0aGUgdXNlcgotICogQHNraXBfc3lzX3Jlc3VtZTogc2tpcCB0aGUgbmV4dCBzeXN0ZW0gcmVzdW1lCiAgKiBAd3VzYl9kZXY6IGlmIHRoaXMgaXMgYSBXaXJlbGVzcyBVU0IgZGV2aWNlLCBsaW5rIHRvIHRoZSBXVVNCCiAgKglzcGVjaWZpYyBkYXRhIGZvciB0aGUgZGV2aWNlLgogICogQHNsb3RfaWQ6IFNsb3QgSUQgYXNzaWduZWQgYnkgeEhDSQpAQCAtNDc0LDcgKzQ2Niw2IEBACiAJdTggbGV2ZWw7CiAKIAl1bnNpZ25lZCBjYW5fc3VibWl0OjE7Ci0JdW5zaWduZWQgZGlzY29uX3N1c3BlbmRlZDoxOwogCXVuc2lnbmVkIHBlcnNpc3RfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGhhdmVfbGFuZ2lkOjE7CiAJdW5zaWduZWQgYXV0aG9yaXplZDoxOwpAQCAtNDk4LDE3ICs0ODksMTIgQEAKIAlpbnQgbWF4Y2hpbGQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmNoaWxkcmVuW1VTQl9NQVhDSElMRFJFTl07CiAKLQlpbnQgcG1fdXNhZ2VfY250OwogCXUzMiBxdWlya3M7CiAJYXRvbWljX3QgdXJibnVtOwogCiAJdW5zaWduZWQgbG9uZyBhY3RpdmVfZHVyYXRpb247CiAKICNpZmRlZiBDT05GSUdfUE0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGF1dG9zdXNwZW5kOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhdXRvcmVzdW1lOwotCXN0cnVjdCBtdXRleCBwbV9tdXRleDsKLQogCXVuc2lnbmVkIGxvbmcgbGFzdF9idXN5OwogCWludCBhdXRvc3VzcGVuZF9kZWxheTsKIAl1bnNpZ25lZCBsb25nIGNvbm5lY3RfdGltZTsKQEAgLTUxNiw3ICs1MDIsNiBAQAogCXVuc2lnbmVkIGRvX3JlbW90ZV93YWtldXA6MTsKIAl1bnNpZ25lZCByZXNldF9yZXN1bWU6MTsKIAl1bnNpZ25lZCBhdXRvc3VzcGVuZF9kaXNhYmxlZDoxOwotCXVuc2lnbmVkIHNraXBfc3lzX3Jlc3VtZToxOwogI2VuZGlmCiAJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldjsKIAlpbnQgc2xvdF9pZDsKQEAgLTU0MSwyMSArNTI2LDE1IEBACiAKIC8qIFVTQiBhdXRvc3VzcGVuZCBhbmQgYXV0b3Jlc3VtZSAqLwogI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAorZXh0ZXJuIGludCB1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworCiBleHRlcm4gaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBleHRlcm4gdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogZXh0ZXJuIGludCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogZXh0ZXJuIHZvaWQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9ub19yZXN1bWUoCi0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCWF0b21pY19pbmMoJmludGYtPnBtX3VzYWdlX2NudCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQoCi0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7Ci19CitleHRlcm4gdm9pZCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiB2b2lkIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVzYl9tYXJrX2xhc3RfYnVzeShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKQEAgLTU2NCw2ICs1NDMsMTEgQEAKIAogI2Vsc2UKIAorc3RhdGljIGlubGluZSBpbnQgdXNiX2VuYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreyByZXR1cm4gMDsgfQorCiBzdGF0aWMgaW5saW5lIGludCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xNTgyLDE0ICsxNTY2LDE4IEBACiBleHRlcm4gdm9pZCB1c2JfdW5yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiAsIFwKLQlfX0ZJTEVfXyAsICMjIGFyZykKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fRklMRV9fLCAjI2FyZykKICNlbHNlCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICgwKQkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fRklMRV9fLCAjI2FyZyk7IFwKK30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiIFwKLQlmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCAiXG4iLCAjI2FyZykKIAogLyogZGVidWdmcyBzdHVmZiAqLwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnVzYl9kZWJ1Z19yb290OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkIGIvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCmluZGV4IDU0YzQ0NjMuLjI5ZmQ3M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKQEAgLTUsNCArNSwzIEBACiBoZWFkZXIteSArPSBtaWRpLmgKIGhlYWRlci15ICs9IGdfcHJpbnRlci5oCiBoZWFkZXIteSArPSB0bWMuaAotaGVhZGVyLXkgKz0gdnN0dXNiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2F0bWVsX3VzYmFfdWRjLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oCmluZGV4IDYzMTFmYTIuLmJhZjQxYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2F0bWVsX3VzYmFfdWRjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaApAQCAtMTUsNiArMTUsNyBAQAogCiBzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQJCQl2YnVzX3BpbjsKKwlpbnQJCSAJdmJ1c19waW5faW52ZXJ0ZWQ7CiAJaW50CQkJbnVtX2VwOwogCXN0cnVjdCB1c2JhX2VwX2RhdGEJZXBbMF07CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKaW5kZXggZWFmOWRmZi4uNmJiMjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCkBAIC0yNSw2ICsyNSw5IEBACiAjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORwkweDAyCiAjZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCTB4MDMKIAorI2RlZmluZSBVQUNfVkVSU0lPTl8xCQkJMHgwMAorI2RlZmluZSBVQUNfVkVSU0lPTl8yCQkJMHgyMAorCiAvKiBBLjUgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0hFQURFUgkJCTB4MDEKICNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMCQkweDAyCkBAIC0zMiw4ICszNSwxNyBAQAogI2RlZmluZSBVQUNfTUlYRVJfVU5JVAkJCTB4MDQKICNkZWZpbmUgVUFDX1NFTEVDVE9SX1VOSVQJCTB4MDUKICNkZWZpbmUgVUFDX0ZFQVRVUkVfVU5JVAkJMHgwNgotI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUCQkweDA3Ci0jZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVAkJMHgwOAorI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxCQkweDA3CisjZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVF9WMQkJMHgwOAorCisvKiBVQUMgdjIuMCB0eXBlcyAqLworI2RlZmluZSBVQUNfRUZGRUNUX1VOSVQJCQkweDA3CisjZGVmaW5lIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjIJCTB4MDgKKyNkZWZpbmUgVUFDX0VYVEVOU0lPTl9VTklUX1YyCQkweDA5CisjZGVmaW5lIFVBQ19DTE9DS19TT1VSQ0UJCTB4MGEKKyNkZWZpbmUgVUFDX0NMT0NLX1NFTEVDVE9SCQkweDBiCisjZGVmaW5lIFVBQ19DTE9DS19NVUxUSVBMSUVSCQkweDBjCisjZGVmaW5lIFVBQ19TQU1QTEVfUkFURV9DT05WRVJURVIJMHgwZAogCiAvKiBBLjYgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0FTX0dFTkVSQUwJCQkweDAxCkBAIC02Niw2ICs3OCwxMCBAQAogCiAjZGVmaW5lIFVBQ19HRVRfU1RBVAkJCTB4ZmYKIAorLyogQXVkaW8gY2xhc3MgdjIuMCBoYW5kbGVzIGFsbCB0aGUgcGFyYW1ldGVyIGNhbGxzIGRpZmZlcmVudGx5ICovCisjZGVmaW5lIFVBQzJfQ1NfQ1VSCQkJMHgwMQorI2RlZmluZSBVQUMyX0NTX1JBTkdFCQkJMHgwMgorCiAvKiBNSURJIC0gQS4xIE1TIENsYXNzLVNwZWNpZmljIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCiAjZGVmaW5lIFVBQ19NU19IRUFERVIJCQkweDAxCiAjZGVmaW5lIFVBQ19NSURJX0lOX0pBQ0sJCTB4MDIKQEAgLTgxLDcgKzk3LDcgQEAKIAogLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KIC8qIDQuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIDggKyBuICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogVUFDX01TX0hFQURFUiAqLwpAQCAtOTUsNyArMTExLDcgQEAKIAogLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCiAjZGVmaW5lIERFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKG4pIAkJCVwKLXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MV8jI24gewkJCVwKIAlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCkBAIC0xMzAsOCArMTQ2LDEyIEBACiAjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FX0FSUkFZCQkweDIwNQogI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfUFJPQ19NSUNST1BIT05FX0FSUkFZCTB4MjA2CiAKKy8qIFRlcm1pbmFscyAtIGNvbnRyb2wgc2VsZWN0b3JzICovCisKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX0NTX0NPUFlfUFJPVEVDVF9DT05UUk9MCQkweDAxCisKIC8qIDQuMy4yLjIgT3V0cHV0IFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogOSAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIENTX0lOVEVSRkFDRSBkZXNjcmlwdG9yIHR5cGUgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9yIHN1YnR5cGUgKi8KQEAgLTE3MSw3ICsxOTEsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKIAogLyogNC41LjIgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogNyAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEFTX0dFTkVSQUwgKi8KQEAgLTE4MCw2ICsyMDAsMTkgQEAKIAlfX2xlMTYgd0Zvcm1hdFRhZzsJCS8qIFRoZSBBdWRpbyBEYXRhIEZvcm1hdCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjIgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJUZXJtaW5hbExpbms7CisJX191OCBibUNvbnRyb2xzOworCV9fdTggYkZvcm1hdFR5cGU7CisJX191MzIgYm1Gb3JtYXRzOworCV9fdTggYk5yQ2hhbm5lbHM7CisJX191MzIgYm1DaGFubmVsQ29uZmlnOworCV9fdTggaUNoYW5uZWxOYW1lczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNkZWZpbmUgVUFDX0RUX0FTX0hFQURFUl9TSVpFCQk3CiAKIC8qIEZvcm1hdHMgLSBBLjEuMSBBdWRpbyBEYXRhIEZvcm1hdCBUeXBlIEkgQ29kZXMgKi8KQEAgLTIzMiwxMSArMjY1LDYyIEBACiAKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKG4pCSg4ICsgKG4gKiAzKSkKIAorc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2V4dF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiU3Vic2xvdFNpemU7CisJX191OCBiRm9ybWF0VHlwZTsKKwlfX3U4IGJCaXRSZXNvbHV0aW9uOworCV9fdTggYkhlYWRlckxlbmd0aDsKKwlfX3U4IGJDb250cm9sU2l6ZTsKKwlfX3U4IGJTaWRlQmFuZFByb3RvY29sOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBGb3JtYXRzIC0gQXVkaW8gRGF0YSBGb3JtYXQgVHlwZSBJIENvZGVzICovCisKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJX01QRUcJMHgxMDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzMJMHgxMDAyCisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZGlzY3JldGVfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkZvcm1hdFR5cGU7CisJX19sZTE2IHdNYXhCaXRSYXRlOworCV9fbGUxNiB3U2FtcGxlc1BlckZyYW1lOworCV9fdTggYlNhbUZyZXFUeXBlOworCV9fdTggdFNhbUZyZXFbXVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTE2IHdNYXhCaXRSYXRlOworCV9fdTE2IHdTYW1wbGVzUGVyRnJhbWU7CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiB0eXBlIElJSSAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfQUMzCTB4MjAwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgorCiAvKiBGb3JtYXRzIC0gQS4yIEZvcm1hdCBUeXBlIENvZGVzICovCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9VTkRFRklORUQJMHgwCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JCQkweDEKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJCQkweDIKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSQkJMHgzCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSQkJMHg4MQorI2RlZmluZSBVQUNfRVhUX0ZPUk1BVF9UWVBFX0lJCQkweDgyCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSUlJCQkweDgzCiAKIHN0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KQEAgLTI1Miw3ICszMzYsMzEgQEAKICNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCiAjZGVmaW5lIFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCiAKKy8qIEF1ZGlvIGNsYXNzIHYyLjA6IENMT0NLX1NPVVJDRSBkZXNjcmlwdG9yICovCisKK3N0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJDbG9ja0lEOworCV9fdTggYm1BdHRyaWJ1dGVzOworCV9fdTggYm1Db250cm9sczsKKwlfX3U4IGJBc3NvY1Rlcm1pbmFsOworCV9fdTggaUNsb2NrU291cmNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogLyogQS4xMC4yIEZlYXR1cmUgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworCitzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiVW5pdElEOworCV9fdTggYlNvdXJjZUlEOworCV9fdTggYkNvbnRyb2xTaXplOworCV9fdTggY29udHJvbHNbMF07IC8qIHZhcmlhYmxlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2RlZmluZSBVQUNfRlVfQ09OVFJPTF9VTkRFRklORUQJMHgwMAogI2RlZmluZSBVQUNfTVVURV9DT05UUk9MCQkweDAxCiAjZGVmaW5lIFVBQ19WT0xVTUVfQ09OVFJPTAkJMHgwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCA5NDAxMmU2Li5lNTgzNjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtNzc1LDcgKzc3NSw3IEBACiAJVVNCX1NQRUVEX1VOS05PV04gPSAwLAkJCS8qIGVudW1lcmF0aW5nICovCiAJVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCQkvKiB1c2IgMS4xICovCiAJVVNCX1NQRUVEX0hJR0gsCQkJCS8qIHVzYiAyLjAgKi8KLQlVU0JfU1BFRURfVkFSSUFCTEUsCQkJLyogd2lyZWxlc3MgKHVzYiAyLjUpICovCisJVVNCX1NQRUVEX1dJUkVMRVNTLAkJCS8qIHdpcmVsZXNzICh1c2IgMi41KSAqLwogCVVTQl9TUEVFRF9TVVBFUiwJCQkvKiB1c2IgMy4wICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmgKaW5kZXggZDQzNzU1Ni4uN2FjZWYwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbXVzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL211c2IuaApAQCAtMzAsMjYgKzMwLDI2IEBACiBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyB7CiAJLyogTVVTQiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRldGFpbHMgKi8KIAl1bnNpZ25lZAltdWx0aXBvaW50OjE7CS8qIG11bHRpcG9pbnQgZGV2aWNlICovCi0JdW5zaWduZWQJZHluX2ZpZm86MTsJLyogc3VwcG9ydHMgZHluYW1pYyBmaWZvIHNpemluZyAqLwotCXVuc2lnbmVkCXNvZnRfY29uOjE7CS8qIHNvZnQgY29ubmVjdCByZXF1aXJlZCAqLwotCXVuc2lnbmVkCXV0bV8xNjoxOwkvKiB1dG0gZGF0YSB3aXRkaCBpcyAxNiBiaXRzICovCisJdW5zaWduZWQJZHluX2ZpZm86MSBfX2RlcHJlY2F0ZWQ7IC8qIHN1cHBvcnRzIGR5bmFtaWMgZmlmbyBzaXppbmcgKi8KKwl1bnNpZ25lZAlzb2Z0X2NvbjoxIF9fZGVwcmVjYXRlZDsgLyogc29mdCBjb25uZWN0IHJlcXVpcmVkICovCisJdW5zaWduZWQJdXRtXzE2OjEgX19kZXByZWNhdGVkOyAvKiB1dG0gZGF0YSB3aXRkaCBpcyAxNiBiaXRzICovCiAJdW5zaWduZWQJYmlnX2VuZGlhbjoxOwkvKiB0cnVlIGlmIENQVSB1c2VzIGJpZy1lbmRpYW4gKi8KIAl1bnNpZ25lZAltdWx0X2J1bGtfdHg6MTsJLyogVHggZXAgcmVxdWlyZWQgZm9yIG11bHRidWxrIHBrdHMgKi8KIAl1bnNpZ25lZAltdWx0X2J1bGtfcng6MTsJLyogUnggZXAgcmVxdWlyZWQgZm9yIG11bHRidWxrIHBrdHMgKi8KIAl1bnNpZ25lZAloaWdoX2lzb190eDoxOwkvKiBUeCBlcCByZXF1aXJlZCBmb3IgSEIgaXNvICovCiAJdW5zaWduZWQJaGlnaF9pc29fcng6MTsJLyogUnggZXAgcmVxdWlyZWQgZm9yIEhEIGlzbyAqLwotCXVuc2lnbmVkCWRtYToxOwkJLyogc3VwcG9ydHMgRE1BICovCi0JdW5zaWduZWQJdmVuZG9yX3JlcToxOwkvKiB2ZW5kb3IgcmVnaXN0ZXJzIHJlcXVpcmVkICovCisJdW5zaWduZWQJZG1hOjEgX19kZXByZWNhdGVkOyAvKiBzdXBwb3J0cyBETUEgKi8KKwl1bnNpZ25lZAl2ZW5kb3JfcmVxOjEgX19kZXByZWNhdGVkOyAvKiB2ZW5kb3IgcmVnaXN0ZXJzIHJlcXVpcmVkICovCiAKIAl1OAkJbnVtX2VwczsJLyogbnVtYmVyIG9mIGVuZHBvaW50cyBfd2l0aF8gZXAwICovCi0JdTgJCWRtYV9jaGFubmVsczsJLyogbnVtYmVyIG9mIGRtYSBjaGFubmVscyAqLworCXU4CQlkbWFfY2hhbm5lbHMgX19kZXByZWNhdGVkOyAvKiBudW1iZXIgb2YgZG1hIGNoYW5uZWxzICovCiAJdTgJCWR5bl9maWZvX3NpemU7CS8qIGR5bmFtaWMgc2l6ZSBpbiBieXRlcyAqLwotCXU4CQl2ZW5kb3JfY3RybDsJLyogdmVuZG9yIGNvbnRyb2wgcmVnIHdpZHRoICovCi0JdTgJCXZlbmRvcl9zdGF0OwkvKiB2ZW5kb3Igc3RhdHVzIHJlZyB3aXRkaCAqLwotCXU4CQlkbWFfcmVxX2NoYW47CS8qIGJpdG1hc2sgZm9yIHJlcXVpcmVkIGRtYSBjaGFubmVscyAqLworCXU4CQl2ZW5kb3JfY3RybCBfX2RlcHJlY2F0ZWQ7IC8qIHZlbmRvciBjb250cm9sIHJlZyB3aWR0aCAqLworCXU4CQl2ZW5kb3Jfc3RhdCBfX2RlcHJlY2F0ZWQ7IC8qIHZlbmRvciBzdGF0dXMgcmVnIHdpdGRoICovCisJdTgJCWRtYV9yZXFfY2hhbiBfX2RlcHJlY2F0ZWQ7IC8qIGJpdG1hc2sgZm9yIHJlcXVpcmVkIGRtYSBjaGFubmVscyAqLwogCXU4CQlyYW1fYml0czsJLyogcmFtIGFkZHJlc3Mgc2l6ZSAqLwogCi0Jc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyAqZXBzX2JpdHM7CisJc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyAqZXBzX2JpdHMgX19kZXByZWNhdGVkOwogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogICAgICAgICAvKiBBIEdQSU8gY29udHJvbGxpbmcgVlJTRUwgaW4gQmxhY2tmaW4gKi8KICAgICAgICAgdW5zaWduZWQgaW50ICAgIGdwaW9fdnJzZWw7CkBAIC03Niw2ICs3Niw5IEBACiAJLyogKEhPU1Qgb3IgT1RHKSBtc2VjLzIgYWZ0ZXIgVkJVUyBvbiB0aWxsIHBvd2VyIGdvb2QgKi8KIAl1OAkJcG90cGd0OwogCisJLyogKEhPU1Qgb3IgT1RHKSBwcm9ncmFtIFBIWSBmb3IgZXh0ZXJuYWwgVmJ1cyAqLworCXVuc2lnbmVkCWV4dHZidXM6MTsKKwogCS8qIFBvd2VyIHRoZSBkZXZpY2Ugb24gb3Igb2ZmICovCiAJaW50CQkoKnNldF9wb3dlcikoaW50IHN0YXRlKTsKIApAQCAtODQsNiArODcsOSBAQAogCiAJLyogTVVTQiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRldGFpbHMgKi8KIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOworCisJLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJvYXJkIGRhdGEJKi8KKwl2b2lkCQkqYm9hcmRfZGF0YTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAppbmRleCA1MmJiOTE3Li5mODMwMmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaApAQCAtOSw2ICs5LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfT1RHX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfT1RHX0gKIAorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKIC8qIE9URyBkZWZpbmVzIGxvdHMgb2YgZW51bWVyYXRpb24gc3RhdGVzIGJlZm9yZSBkZXZpY2UgcmVzZXQgKi8KIGVudW0gdXNiX290Z19zdGF0ZSB7CiAJT1RHX1NUQVRFX1VOREVGSU5FRCA9IDAsCkBAIC0zMyw2ICszNSwxNCBAQAogCU9UR19TVEFURV9BX1ZCVVNfRVJSLAogfTsKIAorZW51bSB1c2JfeGNlaXZfZXZlbnRzIHsKKwlVU0JfRVZFTlRfTk9ORSwgICAgICAgICAvKiBubyBldmVudHMgb3IgY2FibGUgZGlzY29ubmVjdGVkICovCisJVVNCX0VWRU5UX1ZCVVMsICAgICAgICAgLyogdmJ1cyB2YWxpZCBldmVudCAqLworCVVTQl9FVkVOVF9JRCwgICAgICAgICAgIC8qIGlkIHdhcyBncm91bmRlZCAqLworCVVTQl9FVkVOVF9DSEFSR0VSLCAgICAgIC8qIHVzYiBkZWRpY2F0ZWQgY2hhcmdlciAqLworCVVTQl9FVkVOVF9FTlVNRVJBVEVELCAgIC8qIGdhZGdldCBkcml2ZXIgZW51bWVyYXRlZCAqLworfTsKKwogI2RlZmluZSBVU0JfT1RHX1BVTExVUF9JRAkJKDEgPDwgMCkKICNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9EUAkJKDEgPDwgMSkKICNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9ETQkJKDEgPDwgMikKQEAgLTcwLDYgKzgwLDkgQEAKIAlzdHJ1Y3Qgb3RnX2lvX2FjY2Vzc19vcHMJKmlvX29wczsKIAl2b2lkIF9faW9tZW0JCQkqaW9fcHJpdjsKIAorCS8qIGZvciBub3RpZmljYXRpb24gb2YgdXNiX3hjZWl2X2V2ZW50cyAqLworCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkCW5vdGlmaWVyOworCiAJLyogdG8gcGFzcyBleHRyYSBwb3J0IHN0YXR1cyB0byB0aGUgcm9vdCBodWIgKi8KIAl1MTYJCQlwb3J0X3N0YXR1czsKIAl1MTYJCQlwb3J0X2NoYW5nZTsKQEAgLTExMCw5ICsxMjMsMTkgQEAKIC8qIGZvciBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljICovCiBleHRlcm4gaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVYpIHx8IGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVZfTU9EVUxFKQogLyogc29tZXRpbWVzIHRyYW5zY2VpdmVycyBhcmUgYWNjZXNzZWQgb25seSB0aHJvdWdoIGUuZy4gVUxQSSAqLwogZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKHZvaWQpCit7Cit9CisjZW5kaWYKIAogLyogaGVscGVycyBmb3IgZGlyZWN0IGFjY2VzcyB0aHJ1IGxvdy1sZXZlbCBpbyBpbnRlcmZhY2UgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG90Z19pb19yZWFkKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgdTMyIHJlZykKQEAgLTIwMyw2ICsyMjYsMTggQEAKIAlyZXR1cm4gb3RnLT5zdGFydF9zcnAob3RnKTsKIH0KIAorLyogbm90aWZpZXJzICovCitzdGF0aWMgaW5saW5lIGludAorb3RnX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Zywgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm90Zy0+bm90aWZpZXIsIG5iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitvdGdfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmb3RnLT5ub3RpZmllciwgbmIpOworfQogCiAvKiBmb3IgT1RHIGNvbnRyb2xsZXIgZHJpdmVycyAoYW5kIG1heWJlIG90aGVyIHN0dWZmKSAqLwogZXh0ZXJuIGludCB1c2JfYnVzX3N0YXJ0X2VudW0oc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydF9udW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAppbmRleCAyNTI2ZjNiLi4wYTU1NWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaApAQCAtMTksNCArMTksNyBAQAogLyogZGV2aWNlIGNhbid0IGhhbmRsZSBpdHMgQ29uZmlndXJhdGlvbiBvciBJbnRlcmZhY2Ugc3RyaW5ncyAqLwogI2RlZmluZSBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUwkweDAwMDAwMDA4CiAKKy8qZGV2aWNlIHdpbGwgbW9ycGggaWYgcmVzZXQsIGRvbid0IHVzZSByZXNldCBmb3IgaGFuZGxpbmcgZXJyb3JzICovCisjZGVmaW5lIFVTQl9RVUlSS19SRVNFVF9NT1JQSFMJCTB4MDAwMDAwMTAKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX1FVSVJLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDE4MTkzOTYuLjBhNDU4YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0zNTEsMTQgKzM1MSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZykgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCBcCi0JCQkJIyMgYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoZGVidWcpCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX0ZJTEVfXywgIyNhcmcpOwlcCit9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfU0VSSUFMX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAppbmRleCA4Y2U2MTM1Li5kZjFlODNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaApAQCAtMjE0LDI1ICsyMTQsNCBAQAogZXh0ZXJuIHZvaWQgdXNibmV0X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICopOwogZXh0ZXJuIGludCB1c2JuZXRfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKIAotLyogbWVzc2FnaW5nIHN1cHBvcnQgaW5jbHVkZXMgdGhlIGludGVyZmFjZSBuYW1lLCBzbyBpdCBtdXN0IG5vdCBiZQotICogdXNlZCBiZWZvcmUgaXQgaGFzIG9uZSAuLi4gbm90YWJseSwgaW4gbWluaWRyaXZlciBiaW5kKCkgY2FsbHMuCi0gKi8KLSNpZmRlZiBERUJVRwotI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgXAotCSh7IGlmICgwKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgXAotCQkjIyBhcmcpOyAwOyB9KQotI2VuZGlmCi0KLSNkZWZpbmUgZGV2ZXJyKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZykKLSNkZWZpbmUgZGV2d2Fybih1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKQotCi0jZGVmaW5lIGRldmluZm8odXNibmV0LCBmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZyk7IFwKLQotCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfVVNCTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZmFjNjcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBGaWxlOiBkcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5oCi0gKgotICogIFB1cnBvc2U6IFN1cHBvcnQgZm9yIHRoZSBidWxrIFVTQiBWZXJuaWVyIFNwZWN0cm9waG90b21ldGVycwotICoKLSAqICBBdXRob3I6ICAgICBFUXdhcmUgRW5naW5lZXJpbmcsIEluYy4KLSAqICAgICAgICAgICAgICBPcmVnb24gQ2l0eSwgT1IsIFVTQSA5NzA0NQotICoKLSAqICBDb3B5cmlnaHQ6ICAyMDA3LCAyMDA4Ci0gKiAgICAgICAgICAgICAgVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kKLSAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKLSAqCi0gKiAgV2ViOiAgICAgICAgd3d3LnZlcm5pZXIuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgVGhlIHZzdHVzYiBtb2R1bGUgaXMgYSBzdGFuZGFyZCB1c2IgJ2NsaWVudCcgZHJpdmVyIHJ1bm5pbmcgb24gdG9wIG9mIHRoZQotICogIHN0YW5kYXJkIHVzYiBob3N0IGNvbnRyb2xsZXIgc3RhY2suCi0gKgotICogIEluIGdlbmVyYWwsIHZzdHVzYiBzdXBwb3J0cyBzdGFuZGFyZCBidWxrIHVzYiBwaXBlcy4gIEl0IHN1cHBvcnRzIG11bHRpcGxlCi0gKiAgZGV2aWNlcyBhbmQgbXVsdGlwbGUgcGlwZXMgcGVyIGRldmljZS4KLSAqCi0gKiAgVGhlIHZzdHVzYiBkcml2ZXIgc3VwcG9ydHMgdHdvIGludGVyZmFjZXM6Ci0gKiAgMSAtIGlvY3RsIFNFTkRfUElQRS9SRUNWX1BJUEUgLSBhIGdlbmVyYWwgYnVsayB3cml0ZS9yZWFkIG1zZwotICogIAlpbnRlcmZhY2UgdG8gYW55IHBpcGUgd2l0aCB0aW1lb3V0IHN1cHBvcnQ7Ci0gKiAgMiAtIHN0YW5kYXJkIHJlYWQvd3JpdGUgd2l0aCBpb2N0bCBjb25maWcgLSBvZmZlcnMgc3RhbmRhcmQgcmVhZC93cml0ZQotICogIAlpbnRlcmZhY2Ugd2l0aCBpb2N0bCBjb25maWd1cmVkIHBpcGVzIGFuZCB0aW1lb3V0cy4KLSAqCi0gKiAgQm90aCBpbnRlcmZhY2VzIGNhbiBiZSBzaWduYWwgZnJvbSBvdGhlciBwcm9jZXNzIGFuZCB3aWxsIGFib3J0IGl0cyBpL28KLSAqICBvcGVyYXRpb24uCi0gKgotICogIEEgdGltZW91dCBvZiAwIG1lYW5zIE5PIHRpbWVvdXQuICBUaGUgdXNlciBjYW4gc3RpbGwgdGVybWluYXRlIHRoZSByZWFkIHZpYQotICogIHNpZ25hbC4KLSAqCi0gKiAgSWYgdXNpbmcgbXVsdGlwbGUgdGhyZWFkcyB3aXRoIHRoaXMgZHJpdmVyLCB0aGUgdXNlciBzaG91bGQgZW5zdXJlIHRoYXQKLSAqICBhbnkgcmVhZHMsIHdyaXRlcywgb3IgaW9jdGxzIGFyZSBjb21wbGV0ZSBiZWZvcmUgY2xvc2luZyB0aGUgZGV2aWNlLgotICogIENoYW5naW5nIHJlYWQvd3JpdGUgdGltZW91dHMgb3IgcGlwZXMgdGFrZXMgZWZmZWN0IG9uIG5leHQgcmVhZC93cml0ZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCB2c3R1c2JfYXJncyB7Ci0JdW5pb24gewotCQkvKiB0aGlzIHN0cnVjdCBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfU0VORF9QSVBFLAkqCi0JCSAqIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUsIGFuZCByZWFkKCkvd3JpdGUoKSBmb3BzCSovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkIF9fdXNlcgkqYnVmZmVyOwotCQkJc2l6ZV90ICAgICAgICAgIGNvdW50OwotCQkJdW5zaWduZWQgaW50ICAgIHRpbWVvdXRfbXM7Ci0JCQlpbnQgICAgICAgICAgICAgcGlwZTsKLQkJfTsKLQotCQkvKiB0aGlzIG9uZSBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfQ09ORklHX1JXICAJKi8KLQkJc3RydWN0IHsKLQkJCWludCByZF9waXBlOwotCQkJaW50IHJkX3RpbWVvdXRfbXM7Ci0JCQlpbnQgd3JfcGlwZTsKLQkJCWludCB3cl90aW1lb3V0X21zOwotCQl9OwotCX07Ci19OwotCi0jZGVmaW5lIFZTVF9JT0NfTUFHSUMgJ0wnCi0jZGVmaW5lIFZTVF9JT0NfRklSU1QgMHgyMAotI2RlZmluZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUKQotI2RlZmluZSBJT0NUTF9WU1RVU0JfUkVDVl9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMSkKLSNkZWZpbmUgSU9DVExfVlNUVVNCX0NPTkZJR19SVwlfSU8oVlNUX0lPQ19NQUdJQywgVlNUX0lPQ19GSVJTVCArIDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmggYi9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5YWIxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFJlZCBIYXQgSW5jLgorICogQXV0aG9yIDogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2MgorICoKKyAqIHZnYV9zd2l0Y2hlcm9vLmggLSBTdXBwb3J0IGZvciBsYXB0b3Agd2l0aCBkdWFsIEdQVSB1c2luZyBvbmUgc2V0IG9mIG91dHB1dHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSB7CisJVkdBX1NXSVRDSEVST09fT0ZGLAorCVZHQV9TV0lUQ0hFUk9PX09OLAorfTsKKworZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgeworCVZHQV9TV0lUQ0hFUk9PX0lHRCwKKwlWR0FfU1dJVENIRVJPT19ESVMsCisJVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFMsCit9OworCitzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciB7CisJaW50ICgqc3dpdGNodG8pKGVudW0gdmdhX3N3aXRjaGVyb29fY2xpZW50X2lkIGlkKTsKKwlpbnQgKCpwb3dlcl9zdGF0ZSkoZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQsCisJCQkgICBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKTsKKwlpbnQgKCppbml0KSh2b2lkKTsKKwlpbnQgKCpnZXRfY2xpZW50X2lkKShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit9OworCisKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfU1dJVENIRVJPTykKK3ZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCSAgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSk7CisKK3ZvaWQgdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciAqaGFuZGxlcik7Cit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcih2b2lkKTsKKworaW50IHZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2godm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorc3RhdGljIGlubGluZSBpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCQkgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGZiX2luZm8gKmluZm8pIHt9CitzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9oYW5kbGVyKHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9oYW5kbGVyKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKHZvaWQpIHsgcmV0dXJuIDA7IH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Zob3N0LmggYi9pbmNsdWRlL2xpbnV4L3Zob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0N2YxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmhvc3QuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBfTElOVVhfVkhPU1RfSAorI2RlZmluZSBfTElOVVhfVkhPU1RfSAorLyogVXNlcnNwYWNlIGludGVyZmFjZSBmb3IgaW4ta2VybmVsIHZpcnRpbyBhY2NlbGVyYXRvcnMuICovCisKKy8qIHZob3N0IGlzIHVzZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGNhbGxzIGludm9sdmVkIGluIHZpcnRpby4KKyAqCisgKiBFeGlzdGluZyB2aXJ0aW8gbmV0IGNvZGUgaXMgdXNlZCBpbiB0aGUgZ3Vlc3Qgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKgorICogVGhpcyBoZWFkZXIgaW5jbHVkZXMgaW50ZXJmYWNlIHVzZWQgYnkgdXNlcnNwYWNlIGh5cGVydmlzb3IgZm9yCisgKiBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisKK3N0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCBudW07Cit9OworCitzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSB7CisJdW5zaWduZWQgaW50IGluZGV4OworCWludCBmZDsgLyogUGFzcyAtMSB0byB1bmJpbmQgZnJvbSBmaWxlLiAqLworCit9OworCitzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkciB7CisJdW5zaWduZWQgaW50IGluZGV4OworCS8qIE9wdGlvbiBmbGFncy4gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJLyogRmxhZyB2YWx1ZXM6ICovCisJLyogV2hldGhlciBsb2cgYWRkcmVzcyBpcyB2YWxpZC4gSWYgc2V0IGVuYWJsZXMgbG9nZ2luZy4gKi8KKyNkZWZpbmUgVkhPU1RfVlJJTkdfRl9MT0cgMAorCisJLyogU3RhcnQgb2YgYXJyYXkgb2YgZGVzY3JpcHRvcnMgKHZpcnR1YWxseSBjb250aWd1b3VzKSAqLworCV9fdTY0IGRlc2NfdXNlcl9hZGRyOworCS8qIFVzZWQgc3RydWN0dXJlIGFkZHJlc3MuIE11c3QgYmUgMzIgYml0IGFsaWduZWQgKi8KKwlfX3U2NCB1c2VkX3VzZXJfYWRkcjsKKwkvKiBBdmFpbGFibGUgc3RydWN0dXJlIGFkZHJlc3MuIE11c3QgYmUgMTYgYml0IGFsaWduZWQgKi8KKwlfX3U2NCBhdmFpbF91c2VyX2FkZHI7CisJLyogTG9nZ2luZyBzdXBwb3J0LiAqLworCS8qIExvZyB3cml0ZXMgdG8gdXNlZCBzdHJ1Y3R1cmUsIGF0IG9mZnNldCBjYWxjdWxhdGVkIGZyb20gc3BlY2lmaWVkCisJICogYWRkcmVzcy4gQWRkcmVzcyBtdXN0IGJlIDMyIGJpdCBhbGlnbmVkLiAqLworCV9fdTY0IGxvZ19ndWVzdF9hZGRyOworfTsKKworc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24geworCV9fdTY0IGd1ZXN0X3BoeXNfYWRkcjsKKwlfX3U2NCBtZW1vcnlfc2l6ZTsgLyogYnl0ZXMgKi8KKwlfX3U2NCB1c2Vyc3BhY2VfYWRkcjsKKwlfX3U2NCBmbGFnc19wYWRkaW5nOyAvKiBObyBmbGFncyBhcmUgY3VycmVudGx5IHNwZWNpZmllZC4gKi8KK307CisKKy8qIEFsbCByZWdpb24gYWRkcmVzc2VzIGFuZCBzaXplcyBtdXN0IGJlIDRLIGFsaWduZWQuICovCisjZGVmaW5lIFZIT1NUX1BBR0VfU0laRSAweDEwMDAKKworc3RydWN0IHZob3N0X21lbW9yeSB7CisJX191MzIgbnJlZ2lvbnM7CisJX191MzIgcGFkZGluZzsKKwlzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiByZWdpb25zWzBdOworfTsKKworLyogaW9jdGxzICovCisKKyNkZWZpbmUgVkhPU1RfVklSVElPIDB4QUYKKworLyogRmVhdHVyZXMgYml0bWFzayBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5LiAgVHJhbnNwb3J0IGJpdHMgYXJlIHVzZWQgZm9yCisgKiB2aG9zdCBzcGVjaWZpYyBmZWF0dXJlcy4gKi8KKyNkZWZpbmUgVkhPU1RfR0VUX0ZFQVRVUkVTCV9JT1IoVkhPU1RfVklSVElPLCAweDAwLCBfX3U2NCkKKyNkZWZpbmUgVkhPU1RfU0VUX0ZFQVRVUkVTCV9JT1coVkhPU1RfVklSVElPLCAweDAwLCBfX3U2NCkKKworLyogU2V0IGN1cnJlbnQgcHJvY2VzcyBhcyB0aGUgKGV4Y2x1c2l2ZSkgb3duZXIgb2YgdGhpcyBmaWxlIGRlc2NyaXB0b3IuICBUaGlzCisgKiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZob3N0IGNvbW1hbmQuICBGdXJ0aGVyIGNhbGxzIHRvCisgKiBWSE9TVF9PV05FUl9TRVQgZmFpbCB1bnRpbCBWSE9TVF9PV05FUl9SRVNFVCBpcyBjYWxsZWQuICovCisjZGVmaW5lIFZIT1NUX1NFVF9PV05FUiBfSU8oVkhPU1RfVklSVElPLCAweDAxKQorLyogR2l2ZSB1cCBvd25lcnNoaXAsIGFuZCByZXNldCB0aGUgZGV2aWNlIHRvIGRlZmF1bHQgdmFsdWVzLgorICogQWxsb3dzIHN1YnNlcXVlbnQgY2FsbCB0byBWSE9TVF9PV05FUl9TRVQgdG8gc3VjY2VlZC4gKi8KKyNkZWZpbmUgVkhPU1RfUkVTRVRfT1dORVIgX0lPKFZIT1NUX1ZJUlRJTywgMHgwMikKKworLyogU2V0IHVwL21vZGlmeSBtZW1vcnkgbGF5b3V0ICovCisjZGVmaW5lIFZIT1NUX1NFVF9NRU1fVEFCTEUJX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDMsIHN0cnVjdCB2aG9zdF9tZW1vcnkpCisKKy8qIFdyaXRlIGxvZ2dpbmcgc2V0dXAuICovCisvKiBNZW1vcnkgd3JpdGVzIGNhbiBvcHRpb25hbGx5IGJlIGxvZ2dlZCBieSBzZXR0aW5nIGJpdCBhdCBhbiBvZmZzZXQKKyAqIChjYWxjdWxhdGVkIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MpIGZyb20gc3BlY2lmaWVkIGxvZyBiYXNlLgorICogVGhlIGJpdCBpcyBzZXQgdXNpbmcgYW4gYXRvbWljIDMyIGJpdCBvcGVyYXRpb24uICovCisvKiBTZXQgYmFzZSBhZGRyZXNzIGZvciBsb2dnaW5nLiAqLworI2RlZmluZSBWSE9TVF9TRVRfTE9HX0JBU0UgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDQsIF9fdTY0KQorLyogU3BlY2lmeSBhbiBldmVudGZkIGZpbGUgZGVzY3JpcHRvciB0byBzaWduYWwgb24gbG9nIHdyaXRlLiAqLworI2RlZmluZSBWSE9TVF9TRVRfTE9HX0ZEIF9JT1coVkhPU1RfVklSVElPLCAweDA3LCBpbnQpCisKKy8qIFJpbmcgc2V0dXAuICovCisvKiBTZXQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcuIFRoaXMgcGFyYW1ldGVyIGNhbiBub3QKKyAqIGJlIG1vZGlmaWVkIHdoaWxlIHJpbmcgaXMgcnVubmluZyAoYm91bmQgdG8gYSBkZXZpY2UpLiAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfTlVNIF9JT1coVkhPU1RfVklSVElPLCAweDEwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpCisvKiBTZXQgYWRkcmVzc2VzIGZvciB0aGUgcmluZy4gKi8KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0FERFIgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MTEsIHN0cnVjdCB2aG9zdF92cmluZ19hZGRyKQorLyogQmFzZSB2YWx1ZSB3aGVyZSBxdWV1ZSBsb29rcyBmb3IgYXZhaWxhYmxlIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIFZIT1NUX1NFVF9WUklOR19CQVNFIF9JT1coVkhPU1RfVklSVElPLCAweDEyLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpCisvKiBHZXQgYWNjZXNzb3I6IHJlYWRzIGluZGV4LCB3cml0ZXMgdmFsdWUgaW4gbnVtICovCisjZGVmaW5lIFZIT1NUX0dFVF9WUklOR19CQVNFIF9JT1dSKFZIT1NUX1ZJUlRJTywgMHgxMiwgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlKQorCisvKiBUaGUgZm9sbG93aW5nIGlvY3RscyB1c2UgZXZlbnRmZCBmaWxlIGRlc2NyaXB0b3JzIHRvIHNpZ25hbCBhbmQgcG9sbAorICogZm9yIGV2ZW50cy4gKi8KKworLyogU2V0IGV2ZW50ZmQgdG8gcG9sbCBmb3IgYWRkZWQgYnVmZmVycyAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfS0lDSyBfSU9XKFZIT1NUX1ZJUlRJTywgMHgyMCwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpCisvKiBTZXQgZXZlbnRmZCB0byBzaWduYWwgd2hlbiBidWZmZXJzIGhhdmUgYmVlZCB1c2VkICovCisjZGVmaW5lIFZIT1NUX1NFVF9WUklOR19DQUxMIF9JT1coVkhPU1RfVklSVElPLCAweDIxLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKy8qIFNldCBldmVudGZkIHRvIHNpZ25hbCBhbiBlcnJvciAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfRVJSIF9JT1coVkhPU1RfVklSVElPLCAweDIyLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKworLyogVkhPU1RfTkVUIHNwZWNpZmljIGRlZmluZXMgKi8KKworLyogQXR0YWNoIHZpcnRpbyBuZXQgcmluZyB0byBhIHJhdyBzb2NrZXQsIG9yIHRhcCBkZXZpY2UuCisgKiBUaGUgc29ja2V0IG11c3QgYmUgYWxyZWFkeSBib3VuZCB0byBhbiBldGhlcm5ldCBkZXZpY2UsIHRoaXMgZGV2aWNlIHdpbGwgYmUKKyAqIHVzZWQgZm9yIHRyYW5zbWl0LiAgUGFzcyBmZCAtMSB0byB1bmJpbmQgZnJvbSB0aGUgc29ja2V0IGFuZCB0aGUgdHJhbnNtaXQKKyAqIGRldmljZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3RvcCB0aGUgcmluZyAoZS5nLiBmb3IgbWlncmF0aW9uKS4gKi8KKyNkZWZpbmUgVkhPU1RfTkVUX1NFVF9CQUNLRU5EIF9JT1coVkhPU1RfVklSVElPLCAweDMwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKworLyogRmVhdHVyZSBiaXRzICovCisvKiBMb2cgYWxsIHdyaXRlIGRlc2NyaXB0b3JzLiBDYW4gYmUgY2hhbmdlZCB3aGlsZSBkZXZpY2UgaXMgYWN0aXZlLiAqLworI2RlZmluZSBWSE9TVF9GX0xPR19BTEwgMjYKKy8qIHZob3N0LW5ldCBzaG91bGQgYWRkIHZpcnRpb19uZXRfaGRyIGZvciBSWCwgYW5kIHN0cmlwIGZvciBUWCBwYWNrZXRzLiAqLworI2RlZmluZSBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUiAyNworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGQ0OTYyYTc4Li4zNzkzZDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTM1MCw2ICszNTAsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80ICAgICovCiAKIC8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8qIGNwaWExIFlVViAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfV05WQSAgICAgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAvKiBXaW5ub3YgaHcgY29tcHJlc3MgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykgLyogU045QzIweCBZVVYgNDoyOjAgKi8KQEAgLTM2Miw2ICszNjMsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTU2MSAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BBQzIwNyAgIHY0bDJfZm91cmNjKCdQJywgJzInLCAnMCcsICc3JykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSB2NGwyX2ZvdXJjYygnTScsICczJywgJzEnLCAnMCcpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwMjggdjRsMl9mb3VyY2MoJ1MnLCAnTycsICdOJywgJ1gnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NROTA1QyAgIHY0bDJfZm91cmNjKCc5JywgJzAnLCAnNScsICdDJykgLyogY29tcHJlc3NlZCBSR0dCIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX09WNTExICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykgLyogb3Y1MTEgSlBFRyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKaW5kZXggMDU3YTJlMC4uZjUwOGM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCkBAIC01MSw2ICs1MSw5IEBACiAgKglUaGlzIHJlLWVuYWJsZXMgY2FsbGJhY2tzOyBpdCByZXR1cm5zICJmYWxzZSIgaWYgdGhlcmUgYXJlIHBlbmRpbmcKICAqCWJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLCB0byBkZXRlY3QgYSBwb3NzaWJsZSByYWNlIGJldHdlZW4gdGhlIGRyaXZlcgogICoJY2hlY2tpbmcgZm9yIG1vcmUgd29yaywgYW5kIGVuYWJsaW5nIGNhbGxiYWNrcy4KKyAqIEBkZXRhY2hfdW51c2VkX2J1ZjogZGV0YWNoIGZpcnN0IHVudXNlZCBidWZmZXIKKyAqIAl2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KKyAqIAlSZXR1cm5zIE5VTEwgb3IgdGhlICJkYXRhIiB0b2tlbiBoYW5kZWQgdG8gYWRkX2J1ZgogICoKICAqIExvY2tpbmcgcnVsZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKICAqIGxvY2tpbmcuICBObyB0d28gb3BlcmF0aW9ucyBtYXkgYmUgaW52b2tlZCBzaW11bHRhbmVvdXNseSwgd2l0aCB0aGUgZXhjZXB0aW9uCkBAIC03MSw2ICs3NCw3IEBACiAKIAl2b2lkICgqZGlzYWJsZV9jYikoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOwogCWJvb2wgKCplbmFibGVfY2IpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKKwl2b2lkICooKmRldGFjaF91bnVzZWRfYnVmKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCAxNDE4ZjA0Li5hNTBlY2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC03LDYgKzcsNyBAQAogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCiAjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QJMCAvKiBUZWxsIGJlZm9yZSByZWNsYWltaW5nIHBhZ2VzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEJMSAvKiBNZW1vcnkgU3RhdHMgdmlydHF1ZXVlICovCiAKIC8qIFNpemUgb2YgYSBQRk4gaW4gdGhlIGJhbGxvb24gaW50ZXJmYWNlLiAqLwogI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQgMTIKQEAgLTE4LDQgKzE5LDE4IEBACiAJLyogTnVtYmVyIG9mIHBhZ2VzIHdlJ3ZlIGFjdHVhbGx5IGdvdCBpbiBiYWxsb29uLiAqLwogCV9fbGUzMiBhY3R1YWw7CiB9OworCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9JTiAgMCAgIC8qIEFtb3VudCBvZiBtZW1vcnkgc3dhcHBlZCBpbiAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfT1VUIDEgICAvKiBBbW91bnQgb2YgbWVtb3J5IHN3YXBwZWQgb3V0ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUFKRkxUICAgMiAgIC8qIE51bWJlciBvZiBtYWpvciBmYXVsdHMgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NSU5GTFQgICAzICAgLyogTnVtYmVyIG9mIG1pbm9yIGZhdWx0cyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01FTUZSRUUgIDQgICAvKiBUb3RhbCBhbW91bnQgb2YgZnJlZSBtZW1vcnkgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NRU1UT1QgICA1ICAgLyogVG90YWwgYW1vdW50IG9mIG1lbW9yeSAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX05SICAgICAgIDYKKworc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgeworCXUxNiB0YWc7CisJdTY0IHZhbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0JBTExPT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAppbmRleCBmZDI5NGM1Li5lNTIwMjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9UT1BPTE9HWQkxMAkvKiBUb3BvbG9neSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgKi8KIAogc3RydWN0IHZpcnRpb19ibGtfY29uZmlnIHsKIAkvKiBUaGUgY2FwYWNpdHkgKGluIDUxMi1ieXRlIHNlY3RvcnMpLiAqLwpAQCAtMjksOCArMzAsMjAgQEAKIAkJX191OCBoZWFkczsKIAkJX191OCBzZWN0b3JzOwogCX0gZ2VvbWV0cnk7CisKIAkvKiBibG9jayBzaXplIG9mIGRldmljZSAoaWYgVklSVElPX0JMS19GX0JMS19TSVpFKSAqLwogCV9fdTMyIGJsa19zaXplOworCisJLyogdGhlIG5leHQgNCBlbnRyaWVzIGFyZSBndWFyZGVkIGJ5IFZJUlRJT19CTEtfRl9UT1BPTE9HWSAgKi8KKwkvKiBleHBvbmVudCBmb3IgcGh5c2ljYWwgYmxvY2sgcGVyIGxvZ2ljYWwgYmxvY2suICovCisJX191OCBwaHlzaWNhbF9ibG9ja19leHA7CisJLyogYWxpZ25tZW50IG9mZnNldCBpbiBsb2dpY2FsIGJsb2Nrcy4gKi8KKwlfX3U4IGFsaWdubWVudF9vZmZzZXQ7CisJLyogbWluaW11bSBJL08gc2l6ZSB3aXRob3V0IHBlcmZvcm1hbmNlIHBlbmFsdHkgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MTYgbWluX2lvX3NpemU7CisJLyogb3B0aW1hbCBzdXN0YWluZWQgSS9PIHNpemUgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MzIgb3B0X2lvX3NpemU7CisKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggZmU4ODUxNy4uYWU0ZjAzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMywxOSArMyw0NSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KLS8qIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbwotICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKy8qCisgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KKyAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKi8KIAogLyogRmVhdHVyZSBiaXRzICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfU0laRQkwCS8qIERvZXMgaG9zdCBwcm92aWRlIGNvbnNvbGUgc2l6ZT8gKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQgMQkvKiBEb2VzIGhvc3QgcHJvdmlkZSBtdWx0aXBsZSBwb3J0cz8gKi8KIAogc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyB7CiAJLyogY29sdW1zIG9mIHRoZSBzY3JlZW5zICovCiAJX191MTYgY29sczsKIAkvKiByb3dzIG9mIHRoZSBzY3JlZW5zICovCiAJX191MTYgcm93czsKKwkvKiBtYXguIG51bWJlciBvZiBwb3J0cyB0aGlzIGRldmljZSBjYW4gaG9sZCAqLworCV9fdTMyIG1heF9ucl9wb3J0czsKKwkvKiBudW1iZXIgb2YgcG9ydHMgYWRkZWQgc28gZmFyICovCisJX191MzIgbnJfcG9ydHM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKgorICogQSBtZXNzYWdlIHRoYXQncyBwYXNzZWQgYmV0d2VlbiB0aGUgSG9zdCBhbmQgdGhlIEd1ZXN0IGZvciBhCisgKiBwYXJ0aWN1bGFyIHBvcnQuCisgKi8KK3N0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sIHsKKwlfX3UzMiBpZDsJCS8qIFBvcnQgbnVtYmVyICovCisJX191MTYgZXZlbnQ7CQkvKiBUaGUga2luZCBvZiBjb250cm9sIGV2ZW50IChzZWUgYmVsb3cpICovCisJX191MTYgdmFsdWU7CQkvKiBFeHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhlIGtleSAqLworfTsKKworLyogU29tZSBldmVudHMgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRUFEWQkwCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0NPTlNPTEVfUE9SVAkxCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1JFU0laRQkJMgorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4JMworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUUJNAorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFTU9WRQk1CiAKICNpZmRlZiBfX0tFUk5FTF9fCiBpbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCBlZTAzYmJhLi4xMTdmMGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTc4LDIyICs3OCwyMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19jb3VudF92bV9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSkKIHsKLQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dKTsKKwlfX3RoaXNfY3B1X2luYyh2bV9ldmVudF9zdGF0ZXMuZXZlbnRbaXRlbV0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfdm1fZXZlbnQoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pCiB7Ci0JdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKHZtX2V2ZW50X3N0YXRlcykuZXZlbnRbaXRlbV0pOworCXRoaXNfY3B1X2luYyh2bV9ldmVudF9zdGF0ZXMuZXZlbnRbaXRlbV0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19jb3VudF92bV9ldmVudHMoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0sIGxvbmcgZGVsdGEpCiB7Ci0JX190aGlzX2NwdV9hZGQocGVyX2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSwgZGVsdGEpOworCV9fdGhpc19jcHVfYWRkKHZtX2V2ZW50X3N0YXRlcy5ldmVudFtpdGVtXSwgZGVsdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfdm1fZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKQogewotCXRoaXNfY3B1X2FkZChwZXJfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dLCBkZWx0YSk7CisJdGhpc19jcHVfYWRkKHZtX2V2ZW50X3N0YXRlcy5ldmVudFtpdGVtXSwgZGVsdGEpOwogfQogCiBleHRlcm4gdm9pZCBhbGxfdm1fZXZlbnRzKHVuc2lnbmVkIGxvbmcgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0LmggYi9pbmNsdWRlL2xpbnV4L3Z0LmgKaW5kZXggZDVkZDBiYy4uNzc4YjdiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dC5oCisrKyBiL2luY2x1ZGUvbGludXgvdnQuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBWVF9TRVRNT0RFCTB4NTYwMgkvKiBzZXQgbW9kZSBvZiBhY3RpdmUgdnQgKi8KICNkZWZpbmUJCVZUX0FVVE8JCTB4MDAJLyogYXV0byB2dCBzd2l0Y2hpbmcgKi8KICNkZWZpbmUJCVZUX1BST0NFU1MJMHgwMQkvKiBwcm9jZXNzIGNvbnRyb2xzIHN3aXRjaGluZyAqLwotI2RlZmluZQkJVlRfQUNLQUNRCTB4MDIJLyogYWNrbm93bGVkZ2Ugc3dpdGNoICovCisjZGVmaW5lCQlWVF9QUk9DRVNTX0FVVE8gMHgwMgkvKiBwcm9jZXNzIGlzIG5vdGlmaWVkIG9mIHN3aXRjaGluZyAqLwogCiBzdHJ1Y3QgdnRfc3RhdCB7CiAJdW5zaWduZWQgc2hvcnQgdl9hY3RpdmU7CS8qIGFjdGl2ZSB2dCAqLwpAQCAtMzgsNiArMzgsNyBAQAogI2RlZmluZSBWVF9TRU5EU0lHCTB4NTYwNAkvKiBzaWduYWwgdG8gc2VuZCB0byBiaXRtYXNrIG9mIHZ0cyAqLwogCiAjZGVmaW5lIFZUX1JFTERJU1AJMHg1NjA1CS8qIHJlbGVhc2UgZGlzcGxheSAqLworI2RlZmluZQkJVlRfQUNLQUNRCTB4MDIJLyogYWNrbm93bGVkZ2Ugc3dpdGNoICovCiAKICNkZWZpbmUgVlRfQUNUSVZBVEUJMHg1NjA2CS8qIG1ha2UgdnQgYWN0aXZlICovCiAjZGVmaW5lIFZUX1dBSVRBQ1RJVkUJMHg1NjA3CS8qIHdhaXQgZm9yIHZ0IGFjdGl2ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaAppbmRleCAyOWUwNGJlLi5iOTcxZTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hmcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApAQCAtMjY3LDggKzI2Nyw4IEBACiAJWEZSTUFfQUxHX0NPTVAsCQkvKiBzdHJ1Y3QgeGZybV9hbGdvICovCiAJWEZSTUFfRU5DQVAsCQkvKiBzdHJ1Y3QgeGZybV9hbGdvICsgc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqLwogCVhGUk1BX1RNUEwsCQkvKiAxIG9yIG1vcmUgc3RydWN0IHhmcm1fdXNlcl90bXBsICovCi0JWEZSTUFfU0EsCi0JWEZSTUFfUE9MSUNZLAorCVhGUk1BX1NBLAkJLyogc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gICovCisJWEZSTUFfUE9MSUNZLAkJLypzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8gKi8KIAlYRlJNQV9TRUNfQ1RYLAkJLyogc3RydWN0IHhmcm1fc2VjX2N0eCAqLwogCVhGUk1BX0xUSU1FX1ZBTCwKIAlYRlJNQV9SRVBMQVlfVkFMLApAQCAtMjc2LDE3ICsyNzYsMjMgQEAKIAlYRlJNQV9FVElNRVJfVEhSRVNILAogCVhGUk1BX1NSQ0FERFIsCQkvKiB4ZnJtX2FkZHJlc3NfdCAqLwogCVhGUk1BX0NPQUREUiwJCS8qIHhmcm1fYWRkcmVzc190ICovCi0JWEZSTUFfTEFTVFVTRUQsCisJWEZSTUFfTEFTVFVTRUQsCQkvKiB1bnNpZ25lZCBsb25nICAqLwogCVhGUk1BX1BPTElDWV9UWVBFLAkvKiBzdHJ1Y3QgeGZybV91c2VycG9saWN5X3R5cGUgKi8KIAlYRlJNQV9NSUdSQVRFLAogCVhGUk1BX0FMR19BRUFELAkJLyogc3RydWN0IHhmcm1fYWxnb19hZWFkICovCiAJWEZSTUFfS01BRERSRVNTLCAgICAgICAgLyogc3RydWN0IHhmcm1fdXNlcl9rbWFkZHJlc3MgKi8KIAlYRlJNQV9BTEdfQVVUSF9UUlVOQywJLyogc3RydWN0IHhmcm1fYWxnb19hdXRoICovCisJWEZSTUFfTUFSSywJCS8qIHN0cnVjdCB4ZnJtX21hcmsgKi8KIAlfX1hGUk1BX01BWAogCiAjZGVmaW5lIFhGUk1BX01BWCAoX19YRlJNQV9NQVggLSAxKQogfTsKIAorc3RydWN0IHhmcm1fbWFyayB7CisJX191MzIgICAgICAgICAgIHY7IC8qIHZhbHVlICovCisJX191MzIgICAgICAgICAgIG07IC8qIG1hc2sgKi8KK307CisKIGVudW0geGZybV9zYWRhdHRyX3R5cGVfdCB7CiAJWEZSTUFfU0FEX1VOU1BFQywKIAlYRlJNQV9TQURfQ05ULApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiNzRhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogaXNpZiBoZWFkZXIgZmlsZQorICovCisjaWZuZGVmIF9JU0lGX0gKKyNkZWZpbmUgX0lTSUZfSAorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmg+CisKKy8qIGlzaWYgZmxvYXQgdHlwZSBTOFE4L1U4UTggKi8KK3N0cnVjdCBpc2lmX2Zsb2F0XzggeworCS8qIDggYml0IGludGVnZXIgcGFydCAqLworCV9fdTggaW50ZWdlcjsKKwkvKiA4IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3U4IGRlY2ltYWw7Cit9OworCisvKiBpc2lmIGZsb2F0IHR5cGUgVTE2UTE2L1MxNlExNiAqLworc3RydWN0IGlzaWZfZmxvYXRfMTYgeworCS8qIDE2IGJpdCBpbnRlZ2VyIHBhcnQgKi8KKwlfX3UxNiBpbnRlZ2VyOworCS8qIDE2IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3UxNiBkZWNpbWFsOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBWZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbiBwYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZlY3QgQ29ycmVjdGlvbiAoREZDKSB0YWJsZSBlbnRyeSAqLworc3RydWN0IGlzaWZfdmRmY19lbnRyeSB7CisJLyogdmVydGljYWwgcG9zaXRpb24gb2YgZGVmZWN0ICovCisJX191MTYgcG9zX3ZlcnQ7CisJLyogaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiBkZWZlY3QgKi8KKwlfX3UxNiBwb3NfaG9yejsKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBvZiBWZXJ0aWNhbCBsaW5lIGRlZmVjdCBwb3NpdGlvbi4gVGhpcyBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSB0aGUgZGF0YSBhdCB0aGUgZGVmZWN0IHBvc2l0aW9uCisJICovCisJX191OCBsZXZlbF9hdF9wb3M7CisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgb2YgdGhlIHBpeGVscyB1cHBlciB0aGFuIHRoZSB2ZXJ0aWNhbCBsaW5lIGRlZmVjdC4KKwkgKiBUaGlzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZGF0YQorCSAqLworCV9fdTggbGV2ZWxfdXBfcGl4ZWxzOworCS8qCisJICogRGVmZWN0IGxldmVsIG9mIHRoZSBwaXhlbHMgbG93ZXIgdGhhbiB0aGUgdmVydGljYWwgbGluZSBkZWZlY3QuCisJICogVGhpcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGRhdGEKKwkgKi8KKwlfX3U4IGxldmVsX2xvd19waXhlbHM7Cit9OworCisjZGVmaW5lIElTSUZfVkRGQ19UQUJMRV9TSVpFCQk4CitzdHJ1Y3QgaXNpZl9kZmMgeworCS8qIGVuYWJsZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiAqLworCV9fdTggZW47CisJLyogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBKdXN0IGZlZCB0aHJvdWdoIGlmIHNhdHVyYXRpbmcgKi8KKyNkZWZpbmUJSVNJRl9WREZDX05PUk1BTAkJMAorCS8qCisJICogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBIb3Jpem9udGFsIGludGVycG9sYXRpb24gKChpLTIpKyhpKzIpKS8yCisJICogaWYgZGF0YSBzYXR1cmF0aW5nCisJICovCisjZGVmaW5lIElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVAkxCisJLyogSG9yaXpvbnRhbCBpbnRlcnBvbGF0aW9uICgoKGktMikrKGkrMikpLzIpICovCisjZGVmaW5lCUlTSUZfVkRGQ19IT1JaX0lOVEVSUE9MCQkyCisJLyogb25lIG9mIHRoZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiBtb2RlcyBhYm92ZSAqLworCV9fdTggY29ycl9tb2RlOworCS8qIDAgLSB3aG9sZSBsaW5lIGNvcnJlY3RlZCwgMSAtIG5vdCBwaXhlbHMgdXBwZXIgdGhhbiB0aGUgZGVmZWN0ICovCisJX191OCBjb3JyX3dob2xlX2xpbmU7CisjZGVmaW5lIElTSUZfVkRGQ19OT19TSElGVAkJMAorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMQkJMQorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMgkJMgorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMwkJMworI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfNAkJNAorCS8qCisJICogZGVmZWN0IGxldmVsIHNoaWZ0IHZhbHVlLiBsZXZlbF9hdF9wb3MsIGxldmVsX3VwcGVyX3BvcywKKwkgKiBhbmQgbGV2ZWxfbG93ZXJfcG9zIGNhbiBiZSBzaGlmdGVkIHVwIGJ5IHRoaXMgdmFsdWUuIENob29zZQorCSAqIG9uZSBvZiB0aGUgdmFsdWVzIGFib3ZlCisJICovCisJX191OCBkZWZfbGV2ZWxfc2hpZnQ7CisJLyogZGVmZWN0IHNhdHVyYXRpb24gbGV2ZWwgKi8KKwlfX3UxNiBkZWZfc2F0X2xldmVsOworCS8qIG51bWJlciBvZiB2ZXJ0aWNhbCBkZWZlY3RzLiBNYXggaXMgSVNJRl9WREZDX1RBQkxFX1NJWkUgKi8KKwlfX3UxNiBudW1fdmRlZmVjdHM7CisJLyogVkRGQyB0YWJsZSBwdHIgKi8KKwlzdHJ1Y3QgaXNpZl92ZGZjX2VudHJ5IHRhYmxlW0lTSUZfVkRGQ19UQUJMRV9TSVpFXTsKK307CisKK3N0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIHsKKworCS8qIEhvcml6b250YWwgY2xhbXAgZGlzYWJsZWQuIE9ubHkgdmVydGljYWwgY2xhbXAgdmFsdWUgaXMgc3VidHJhY3RlZCAqLworI2RlZmluZQlJU0lGX0hPUlpfQkNfRElTQUJMRQkJMAorCS8qCisJICogSG9yaXpvbnRhbCBjbGFtcCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFuZCBzdWJ0cmFjdGVkIGZyb20gaW1hZ2UgZGF0YQorCSAqIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUKKwkgKi8KKyNkZWZpbmUgSVNJRl9IT1JaX0JDX0NMQU1QX0NBTENfRU5BQkxFRAkxCisJLyoKKwkgKiBIb3Jpem9udGFsIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgZnJvbSBwcmV2aW91cyBpbWFnZSBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSBpbWFnZSBkYXRhIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUuCisJICovCisjZGVmaW5lIElTSUZfSE9SWl9CQ19DTEFNUF9OT1RfVVBEQVRFRAkyCisJLyogaG9yaXpvbnRhbCBjbGFtcCBtb2RlLiBPbmUgb2YgdGhlIHZhbHVlcyBhYm92ZSAqLworCV9fdTggbW9kZTsKKwkvKgorCSAqIHBpeGVsIHZhbHVlIGxpbWl0IGVuYWJsZS4KKwkgKiAgMCAtIGxpbWl0IGRpc2FibGVkCisJICogIDEgLSBwaXhlbCB2YWx1ZSBsaW1pdGVkIHRvIDEwMjMKKwkgKi8KKwlfX3U4IGNsYW1wX3BpeF9saW1pdDsKKwkvKiBTZWxlY3QgTW9zdCBsZWZ0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUJSVNJRl9TRUxfTU9TVF9MRUZUX1dJTgkJMAorCS8qIFNlbGVjdCBNb3N0IHJpZ2h0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgSVNJRl9TRUxfTU9TVF9SSUdIVF9XSU4JCTEKKwkvKiBTZWxlY3QgbW9zdCBsZWZ0IG9yIHJpZ2h0IHdpbmRvdyBmb3IgY2xhbXAgdmFsIGNhbGN1bGF0aW9uICovCisJX191OCBiYXNlX3dpbl9zZWxfY2FsYzsKKwkvKiBXaW5kb3cgY291bnQgcGVyIGNvbG9yIGZvciBjYWxjdWxhdGlvbi4gcmFuZ2UgMS0zMiAqLworCV9fdTggd2luX2NvdW50X2NhbGM7CisJLyogV2luZG93IHN0YXJ0IHBvc2l0aW9uIC0gaG9yaXpvbnRhbCBmb3IgY2FsY3VsYXRpb24uIDAgLSA4MTkxICovCisJX191MTYgd2luX3N0YXJ0X2hfY2FsYzsKKwkvKiBXaW5kb3cgc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCBmb3IgY2FsY3VsYXRpb24gMCAtIDgxOTEgKi8KKwlfX3UxNiB3aW5fc3RhcnRfdl9jYWxjOworI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8yUElYRUxTCTAKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfNFBJWEVMUwkxCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzhQSVhFTFMJMgorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8xNlBJWEVMUwkzCisJLyogV2lkdGggb2YgdGhlIHNhbXBsZSB3aW5kb3cgaW4gcGl4ZWxzIGZvciBjYWxjdWxhdGlvbiAqLworCV9fdTggd2luX2hfc3pfY2FsYzsKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX1ZfMzJQSVhFTFMJMAorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfVl82NFBJWEVMUwkxCisjZGVmaW5lCUlTSUZfSE9SWl9CQ19TWl9WXzEyOFBJWEVMUwkyCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9WXzI1NlBJWEVMUwkzCisJLyogSGVpZ2h0IG9mIHRoZSBzYW1wbGUgd2luZG93IGluIHBpeGVscyBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3U4IHdpbl92X3N6X2NhbGM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQmxhY2sgQ2xhbXAgcGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfdmVydF9iY2xhbXAgeworCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgdGhlIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9IT1JaX0NMQU1QX1ZBTAkJMAorCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgcmVzZXRfY2xhbXBfdmFsIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9DT05GSUdfQ0xBTVBfVkFMCTEKKwkvKiBObyB1cGRhdGUsIHByZXZpb3VzIGltYWdlIHZhbHVlIGlzIHVzZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX05PX1VQREFURQkJCTIKKwkvKgorCSAqIFJlc2V0IHZhbHVlIHNlbGVjdG9yIGZvciB2ZXJ0aWNhbCBjbGFtcCBjYWxjdWxhdGlvbi4gVXNlIG9uZSBvZgorCSAqIHRoZSBhYm92ZSB2YWx1ZXMKKwkgKi8KKwlfX3U4IHJlc2V0X3ZhbF9zZWw7CisJLyogVThROC4gTGluZSBhdmVyYWdlIGNvZWZmaWNpZW50IHVzZWQgaW4gdmVydGljYWwgY2xhbXAgY2FsY3VsYXRpb24gKi8KKwlfX3U4IGxpbmVfYXZlX2NvZWY7CisJLyogSGVpZ2h0IG9mIHRoZSBvcHRpY2FsIGJsYWNrIHJlZ2lvbiBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3UxNiBvYl92X3N6X2NhbGM7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSBob3Jpem9udGFsLiAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X2g7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X3Y7Cit9OworCitzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCB7CisJLyoKKwkgKiBUaGlzIG9mZnNldCB2YWx1ZSBpcyBhZGRlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGNsYW1wIGVuYWJsZSBzdGF0dXMuCisJICogUzEzCisJICovCisJX191MTYgZGNfb2Zmc2V0OworCS8qCisJICogRW5hYmxlIGJsYWNrL2RpZ2l0YWwgY2xhbXAgdmFsdWUgdG8gYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbWFnZSBkYXRhCisJICovCisJX191OCBlbjsKKwkvKgorCSAqIGJsYWNrIGNsYW1wIG1vZGUuIHNhbWUvc2VwYXJhdGUgY2xhbXAgZm9yIDQgY29sb3JzCisJICogMCAtIGRpc2FibGUgLSBzYW1lIGNsYW1wIHZhbHVlIGZvciBhbGwgY29sb3JzCisJICogMSAtIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgc2VwYXJhdGVseSBmb3IgYWxsIGNvbG9ycworCSAqLworCV9fdTggYmNfbW9kZV9jb2xvcjsKKwkvKiBWcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIGZvciBiYyBzdWJ0cmFjdGlvbiAqLworCV9fdTE2IHZlcnRfc3RhcnRfc3ViOworCS8qIEJsYWNrIGNsYW1wIGZvciBob3Jpem9udGFsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIGhvcno7CisJLyogQmxhY2sgY2xhbXAgZm9yIHZlcnRpY2FsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX3ZlcnRfYmNsYW1wIHZlcnQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogQ29sb3IgU3BhY2UgQ29udmVydGlvbiAoQ1NDKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVNJRl9DU0NfTlVNX0NPRUZGCTE2CitzdHJ1Y3QgaXNpZl9jb2xvcl9zcGFjZV9jb252IHsKKwkvKiBFbmFibGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiAqLworCV9fdTggZW47CisJLyoKKwkgKiBjc2MgY29lZmZpZW50IHRhYmxlLiBTOFE1LCBNMDAgYXQgaW5kZXggMCwgTTAxIGF0IGluZGV4IDEsIGFuZAorCSAqIHNvIGZvcnRoCisJICovCisJc3RydWN0IGlzaWZfZmxvYXRfOCBjb2VmZltJU0lGX0NTQ19OVU1fQ09FRkZdOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIEJsYWNrICBDb21wZW5zYXRpb24gcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2JsYWNrX2NvbXAgeworCS8qIENvbXAgZm9yIFJlZCAqLworCV9fczggcl9jb21wOworCS8qIENvbXAgZm9yIEdyICovCisJX19zOCBncl9jb21wOworCS8qIENvbXAgZm9yIEJsdWUgKi8KKwlfX3M4IGJfY29tcDsKKwkvKiBDb21wIGZvciBHYiAqLworCV9fczggZ2JfY29tcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgR2FpbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZ2FpbiB7CisJLyogR2FpbiBmb3IgUmVkIG9yIHllICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgcl95ZTsKKwkvKiBHYWluIGZvciBHciBvciBjeSAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IGdyX2N5OworCS8qIEdhaW4gZm9yIEdiIG9yIGcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBnYl9nOworCS8qIEdhaW4gZm9yIEJsdWUgb3IgbWcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBiX21nOworfTsKKworI2RlZmluZSBJU0lGX0xJTkVBUl9UQUJfU0laRQkxOTIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgTGluZWFyaXphdGlvbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfbGluZWFyaXplIHsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBsaW5lYXJpemF0aW9uIG9mIGRhdGEgKi8KKwlfX3U4IGVuOworCS8qIFNoaWZ0IHZhbHVlIGFwcGxpZWQgKi8KKwlfX3U4IGNvcnJfc2hmdDsKKwkvKiBzY2FsZSBmYWN0b3IgYXBwbGllZCBVMTFRMTAgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBzY2FsZV9mYWN0OworCS8qIFNpemUgb2YgdGhlIGxpbmVhciB0YWJsZSAqLworCV9fdTE2IHRhYmxlW0lTSUZfTElORUFSX1RBQl9TSVpFXTsKK307CisKKy8qIENvbG9yIHBhdHRlcm5zICovCisjZGVmaW5lIElTSUZfUkVECTAKKyNkZWZpbmUJSVNJRl9HUkVFTl9SRUQJMQorI2RlZmluZSBJU0lGX0dSRUVOX0JMVUUJMgorI2RlZmluZSBJU0lGX0JMVUUJMworc3RydWN0IGlzaWZfY29sX3BhdCB7CisJX191OCBvbG9wOworCV9fdTggb2xlcDsKKwlfX3U4IGVsb3A7CisJX191OCBlbGVwOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBEYXRhIGZvcm1hdHRlciBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZm10cGxlbiB7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQwLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjA7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQxLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjE7CisJLyoqCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMiwgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4yOworCS8qKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDMsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMzsKK307CisKK3N0cnVjdCBpc2lmX2ZtdF9jZmcgeworI2RlZmluZSBJU0lGX1NQTElUCQkwCisjZGVmaW5lIElTSUZfQ09NQklORQkJMQorCS8qIFNwbGl0IG9yIGNvbWJpbmUgb3IgbGluZSBhbHRlcm5hdGUgKi8KKwlfX3U4IGZtdG1vZGU7CisJLyogZW5hYmxlIG9yIGRpc2FibGUgbGluZSBhbHRlcm5hdGluZyBtb2RlICovCisJX191OCBsbl9hbHRlcl9lbjsKKyNkZWZpbmUgSVNJRl8xTElORQkJMAorI2RlZmluZQlJU0lGXzJMSU5FUwkJMQorI2RlZmluZQlJU0lGXzNMSU5FUwkJMgorI2RlZmluZQlJU0lGXzRMSU5FUwkJMworCS8qIFNwbGl0L2NvbWJpbmUgbGluZSBudW1iZXIgKi8KKwlfX3U4IGxudW07CisJLyogQWRkcmVzcyBpbmNyZW1lbnQgUmFuZ2UgMSAtIDE2ICovCisJX191OCBhZGRyaW5jOworfTsKKworc3RydWN0IGlzaWZfZm10X2FkZHJfcHRyIHsKKwkvKiBJbml0aWFsIGFkZHJlc3MgKi8KKwlfX3UzMiBpbml0X2FkZHI7CisJLyogb3V0cHV0IGxpbmUgbnVtYmVyICovCisjZGVmaW5lIElTSUZfMVNUTElORQkJMAorI2RlZmluZQlJU0lGXzJORExJTkUJCTEKKyNkZWZpbmUJSVNJRl8zUkRMSU5FCQkyCisjZGVmaW5lCUlTSUZfNFRITElORQkJMworCV9fdTggb3V0X2xpbmU7Cit9OworCitzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgeworCS8qIHByb2dyYW0gYWRkcmVzcyBwb2ludGVyICovCisJX191OCBwZ21fYXB0cjsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgaW5jcmVtZW50IG9yIGRlY3JlbWVudCAqLworCV9fdTggcGdtdXBkdDsKK307CisKK3N0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIHsKKwkvKiBFbmFibGUvRGlzYWJsZSBkYXRhIGZvcm1hdHRlciAqLworCV9fdTggZW47CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2ZtdF9jZmcgY2ZnOworCS8qIEZvcm1hdHRlciBwcm9ncmFtIGVudHJpZXMgbGVuZ3RoICovCisJc3RydWN0IGlzaWZfZm10cGxlbiBwbGVuOworCS8qIGZpcnN0IHBpeGVsIGluIGEgbGluZSBmZWQgdG8gZm9ybWF0dGVyICovCisJX191MTYgZm10cmxlbjsKKwkvKiBIRCBpbnRlcnZhbCBmb3Igb3V0cHV0IGxpbmUuIE9ubHkgdmFsaWQgd2hlbiBzcGxpdCBsaW5lICovCisJX191MTYgZm10aGNudDsKKwkvKiBmb3JtYXR0ZXIgYWRkcmVzcyBwb2ludGVycyAqLworCXN0cnVjdCBpc2lmX2ZtdF9hZGRyX3B0ciBmbXRhZGRyX3B0clsxNl07CisJLyogcHJvZ3JhbSBlbmFibGUvZGlzYWJsZSAqLworCV9fdTggcGdtX2VuWzMyXTsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgZm10cGdtX2FwWzMyXTsKK307CisKK3N0cnVjdCBpc2lmX2RmX2NzYyB7CisJLyogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiBjb25mZ3VyYXRpb24sIDAgLSBjc2MsIDEgLSBkZiAqLworCV9fdTggZGZfb3JfY3NjOworCS8qIGNzYyBjb25maWd1cmF0aW9uIHZhbGlkIGlmIGRmX29yX2NzYyBpcyAwICovCisJc3RydWN0IGlzaWZfY29sb3Jfc3BhY2VfY29udiBjc2M7CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiB2YWxpZCBpZiBkZl9vcl9jc2MgaXMgMSAqLworCXN0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIGRmOworCS8qIHN0YXJ0IHBpeGVsIGluIGEgbGluZSBhdCB0aGUgaW5wdXQgKi8KKwlfX3UzMiBzdGFydF9waXg7CisJLyogbnVtYmVyIG9mIHBpeGVscyBpbiBpbnB1dCBsaW5lICovCisJX191MzIgbnVtX3BpeGVsczsKKwkvKiBzdGFydCBsaW5lIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIHN0YXJ0X2xpbmU7CisJLyogbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIG51bV9saW5lczsKK307CisKK3N0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogeworCS8qIEdhaW4gYWRqdXN0bWVudCBwZXIgY29sb3IgKi8KKwlzdHJ1Y3QgaXNpZl9nYWluIGdhaW47CisJLyogT2Zmc2V0IGFkanVzdG1lbnQgKi8KKwlfX3UxNiBvZmZzZXQ7CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBTRFJBTSBkYXRhICovCisJX191OCBnYWluX3NkcmFtX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSVBJUEUgZGF0YSAqLworCV9fdTggZ2Fpbl9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBnYWluX2gzYV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIFNEUkFNIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9zZHJhbV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIElQSVBFIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBvZmZzZXRfaDNhX2VuOworfTsKKworc3RydWN0IGlzaWZfY3VsIHsKKwkvKiBIb3Jpem9udGFsIEN1bGwgcGF0dGVybiBmb3Igb2RkIGxpbmVzICovCisJX191OCBoY3BhdF9vZGQ7CisJLyogSG9yaXpvbnRhbCBDdWxsIHBhdHRlcm4gZm9yIGV2ZW4gbGluZXMgKi8KKwlfX3U4IGhjcGF0X2V2ZW47CisJLyogVmVydGljYWwgQ3VsbCBwYXR0ZXJuICovCisJX191OCB2Y3BhdDsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBscGYuIEFwcGx5IHdoZW4gY3VsbCBpcyBlbmFibGVkICovCisJX191OCBlbl9scGY7Cit9OworCitzdHJ1Y3QgaXNpZl9jb21wcmVzcyB7CisjZGVmaW5lIElTSUZfQUxBVwkJMAorI2RlZmluZSBJU0lGX0RQQ00JCTEKKyNkZWZpbmUgSVNJRl9OT19DT01QUkVTU0lPTgkyCisJLyogQ29tcHJlc3Npb24gQWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IGFsZzsKKwkvKiBDaG9vc2UgUHJlZGljdG9yMSBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDEJCTAKKwkvKiBDaG9vc2UgUHJlZGljdG9yMiBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDIJCTEKKwkvKiBQcmVkaWN0b3IgZm9yIERQQ00gY29tcHJlc3Npb24gKi8KKwlfX3U4IHByZWQ7Cit9OworCisvKiBhbGwgdGhlIHN0dWZmIGluIHRoaXMgc3RydWN0IHdpbGwgYmUgcHJvdmlkZWQgYnkgdXNlcmxhbmQgKi8KK3N0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IHsKKwkvKiBMaW5lYXJpemF0aW9uIHBhcmFtZXRlcnMgZm9yIGltYWdlIHNlbnNvciBkYXRhIGlucHV0ICovCisJc3RydWN0IGlzaWZfbGluZWFyaXplIGxpbmVhcml6ZTsKKwkvKiBEYXRhIGZvcm1hdHRlciBvciBDU0MgKi8KKwlzdHJ1Y3QgaXNpZl9kZl9jc2MgZGZfY3NjOworCS8qIERlZmVjdCBQaXhlbCBDb3JyZWN0aW9uIChERkMpIGNvbmZndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2RmYyBkZmM7CisJLyogQmxhY2svRGlnaXRhbCBDbGFtcCBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGlzaWZfYmxhY2tfY2xhbXAgYmNsYW1wOworCS8qIEdhaW4sIG9mZnNldCBhZGp1c3RtZW50cyAqLworCXN0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogZ2Fpbl9vZmZzZXQ7CisJLyogQ3VsbGluZyAqLworCXN0cnVjdCBpc2lmX2N1bCBjdWxsaW5nOworCS8qIEEtTGF3IGFuZCBEUENNIGNvbXByZXNzaW9uIG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaXNpZl9jb21wcmVzcyBjb21wcmVzczsKKwkvKiBob3Jpem9udGFsIG9mZnNldCBmb3IgR2Fpbi9MU0MvREZDICovCisJX191MTYgaG9yel9vZmZzZXQ7CisJLyogdmVydGljYWwgb2Zmc2V0IGZvciBHYWluL0xTQy9ERkMgKi8KKwlfX3UxNiB2ZXJ0X29mZnNldDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAwICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAxICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMTsKKyNkZWZpbmUgSVNJRl9OT19TSElGVAkJMAorI2RlZmluZQlJU0lGXzFCSVRfU0hJRlQJCTEKKyNkZWZpbmUJSVNJRl8yQklUX1NISUZUCQkyCisjZGVmaW5lCUlTSUZfM0JJVF9TSElGVAkJMworI2RlZmluZQlJU0lGXzRCSVRfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl81QklUX1NISUZUCQk1CisjZGVmaW5lIElTSUZfNkJJVF9TSElGVAkJNgorCS8qIERhdGEgc2hpZnQgYXBwbGllZCBiZWZvcmUgc3RvcmluZyB0byBTRFJBTSAqLworCV9fdTggZGF0YV9zaGlmdDsKKwkvKiBlbmFibGUgaW5wdXQgdGVzdCBwYXR0ZXJuIGdlbmVyYXRpb24gKi8KKwlfX3U4IHRlc3RfcGF0X2dlbjsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIElTSUYgY3JvcCB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogaW50ZXJmYWNlIFZEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGludGVyZmFjZSBIRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBpc2lmIHBpeCBvcmRlci4gT25seSB1c2VkIGZvciB5Y2JjciBjYXB0dXJlICovCisJZW51bSBjY2RjX3BpeG9yZGVyIHBpeF9vcmRlcjsKKwkvKiBpc2lmIGJ1ZmZlciB0eXBlLiBPbmx5IHVzZWQgZm9yIHljYmNyIGNhcHR1cmUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKK307CisKKy8qIE1TQiBvZiBpbWFnZSBkYXRhIGNvbm5lY3RlZCB0byBzZW5zb3IgcG9ydCAqLworZW51bSBpc2lmX2RhdGFfbXNiIHsKKwlJU0lGX0JJVF9NU0JfMTUsCisJSVNJRl9CSVRfTVNCXzE0LAorCUlTSUZfQklUX01TQl8xMywKKwlJU0lGX0JJVF9NU0JfMTIsCisJSVNJRl9CSVRfTVNCXzExLAorCUlTSUZfQklUX01TQl8xMCwKKwlJU0lGX0JJVF9NU0JfOSwKKwlJU0lGX0JJVF9NU0JfOCwKKwlJU0lGX0JJVF9NU0JfNworfTsKKworZW51bSBpc2lmX2NmYV9wYXR0ZXJuIHsKKwlJU0lGX0NGQV9QQVRfTU9TQUlDLAorCUlTSUZfQ0ZBX1BBVF9TVFJJUEUKK307CisKK3N0cnVjdCBpc2lmX3BhcmFtc19yYXcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiBpbnRlcmZhY2UgVkQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaW50ZXJmYWNlIEhEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGJ1ZmZlciB0eXBlLiBBcHBsaWNhYmxlIGZvciBpbnRlcmxhY2VkIG1vZGUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwkvKiBHYWluIHZhbHVlcyAqLworCXN0cnVjdCBpc2lmX2dhaW4gZ2FpbjsKKwkvKiBjZmEgcGF0dGVybiAqLworCWVudW0gaXNpZl9jZmFfcGF0dGVybiBjZmFfcGF0OworCS8qIERhdGEgTVNCIHBvc2l0aW9uICovCisJZW51bSBpc2lmX2RhdGFfbXNiIGRhdGFfbXNiOworCS8qIEVuYWJsZSBob3Jpem9udGFsIGZsaXAgKi8KKwl1bnNpZ25lZCBjaGFyIGhvcnpfZmxpcF9lbjsKKwkvKiBFbmFibGUgaW1hZ2UgaW52ZXJ0IHZlcnRpY2FsbHkgKi8KKwl1bnNpZ25lZCBjaGFyIGltYWdlX2ludmVydF9lbjsKKworCS8qIGFsbCB0aGUgdXNlcmxhbmQgZGVmaW5lZCBzdHVmZiovCisJc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgY29uZmlnX3BhcmFtczsKK307CisKK2VudW0gaXNpZl9kYXRhX3BhY2sgeworCUlTSUZfUEFDS18xNkJJVCwKKwlJU0lGX1BBQ0tfMTJCSVQsCisJSVNJRl9QQUNLXzhCSVQKK307CisKKyNkZWZpbmUgSVNJRl9XSU5fTlRTQwkJCQl7MCwgMCwgNzIwLCA0ODB9CisjZGVmaW5lIElTSUZfV0lOX1ZHQQkJCQl7MCwgMCwgNjQwLCA0ODB9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaAppbmRleCBmY2RmZjc0Li5jNTljYzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKQEAgLTI5LDcgKzI5LDE5IEBACiAvKiBzZWxlY3RvciBmb3IgY2NkYyBpbnB1dCBzZWxlY3Rpb24gb24gRE0zNTUgKi8KIGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgewogCVZQU1NfQ0NEQ0lOLAotCVZQU1NfSFNTSUlOCisJVlBTU19IU1NJSU4sCisJVlBTU19QR0xQQkssCS8qIGZvciBETTM2NSBvbmx5ICovCisJVlBTU19DQ0RDUEcJLyogZm9yIERNMzY1IG9ubHkgKi8KK307CisKK3N0cnVjdCB2cHNzX3N5bmNfcG9sIHsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfaGRwb2w6MTsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfdmRwb2w6MTsKK307CisKK3N0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgeworCXNob3J0IGhscGZyOworCXNob3J0IHBwbGVuOwogfTsKIAogLyogVXNlZCBmb3IgZW5hYmxlL2RpYWJsZSBWUFNTIENsb2NrICovCkBAIC00NywxMiArNTksMzggQEAKIAkgKi8KIAlWUFNTX1ZFTkNfQ0xPQ0tfU0VMLAogCVZQU1NfVlBCRV9DTE9DSywKKwkvKiBETTM2NSBvbmx5IGNsb2NrcyAqLworCVZQU1NfSVBJUEVJRl9DTE9DSywKKwlWUFNTX1JTWl9DTE9DSywKKwlWUFNTX0JMX0NMT0NLLAorCS8qCisJICogV2hlbiB1c2luZyBWUFNTX1BDTEtfSU5URVJOQUwgaW4gdnBzc19lbmFibGVfY2xvY2soKSBhcGkKKwkgKiBmb2xsb3dpbmcgYXBwbGllczotCisJICogZW4gPSAwIGRpc2FibGUgaW50ZXJuYWwgUENMSworCSAqIGVuID0gMSBlbmFibGVzIGludGVybmFsIFBDTEsKKwkgKi8KKwlWUFNTX1BDTEtfSU5URVJOQUwsCisJLyoKKwkgKiBXaGVuIHVzaW5nIFZQU1NfUFNZTkNfQ0xPQ0tfU0VMIGluIHZwc3NfZW5hYmxlX2Nsb2NrKCkgYXBpCisJICogZm9sbG93aW5nIGFwcGxpZXM6LQorCSAqIGVuID0gMCBlbmFibGVzIE1NUiBjbG9jaworCSAqIGVuID0gMSBlbmFibGVzIFZQU1MgY2xvY2sKKwkgKi8KKwlWUFNTX1BTWU5DX0NMT0NLX1NFTCwKKwlWUFNTX0xEQ19DTE9DS19TRUwsCisJVlBTU19PU0RfQ0xPQ0tfU0VMLAorCVZQU1NfRkRJRl9DTE9DSywKKwlWUFNTX0xEQ19DTE9DSwogfTsKIAogLyogc2VsZWN0IGlucHV0IHRvIGNjZGMgb24gZG0zNTUgKi8KIGludCB2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpOwogLyogZW5hYmxlL2Rpc2FibGUgYSB2cHNzIGNsb2NrLCAwIC0gc3VjY2VzcywgLTEgLSBmYWlsdXJlICovCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbik7CisvKiBzZXQgc3luYyBwb2xhcml0eSwgb25seSBmb3IgRE0zNjUqLwordm9pZCBkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzdHJ1Y3QgdnBzc19zeW5jX3BvbCk7CisvKiBzZXQgdGhlIFBHX0ZSQU1FX1NJWkUgcmVnaXN0ZXIsIG9ubHkgZm9yIERNMzY1ICovCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSk7CiAKIC8qIHdibCByZXNldCBmb3IgZG02NDR4ICovCiBlbnVtIHZwc3Nfd2JsX3NlbCB7CkBAIC02NSw1ICsxMDMsNiBAQAogCVZQU1NfUENSX1BSRVZfV0JMXzAsCiAJVlBTU19QQ1JfQ0NEQ19XQkxfTywKIH07CisvKiBjbGVhciB3Ymwgb3ZlcmZsb3cgZmxhZyBmb3IgRE02NDQ2ICovCiBpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDJjNmFmMjQuLmM2NjI5ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtMzUsNyArMzUsNyBAQAogCiBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgewogCS8qIGNvbmZpZ3VyYXRpb24gKi8KLQlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKKwl1NjQgICAgICBpcl90eXBlOwogCiAJLyoga2V5IGluZm8gKi8KIAl1MzIgICAgICAgICAgICAgICAgaXJfa2V5OyAgICAgIC8qIGlyIHNjYW5jb2RlICovCkBAIC04NCw3ICs4NCw3IEBACiAvKiBSb3V0aW5lcyBmcm9tIGlyLWZ1bmN0aW9ucy5jICovCiAKIGludCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgaW50IGlyX3R5cGUpOworCQkgICBjb25zdCB1NjQgaXJfdHlwZSk7CiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7CiB2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAogCQkgICAgICB1MzIgaXJfa2V5KTsKQEAgLTE2Miw0ICsxNjIsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2FkbWVpX3JtMDA4el90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAppbmRleCAyOTlkMjAxLi42MWMyMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaApAQCAtMjEsMTMgKzIxLDExIEBACiAjZGVmaW5lIElSX2RwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoaXJfY29yZV9kZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgLCBfX2Z1bmNfXywgIyMgYXJnKQogCi1lbnVtIGlyX3R5cGUgewotCUlSX1RZUEVfVU5LTk9XTgk9IDAsCi0JSVJfVFlQRV9SQzUJPSAxLAotCUlSX1RZUEVfUEQJPSAyLAkJIC8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KLQlJUl9UWVBFX05FQwk9IDMsCi0JSVJfVFlQRV9PVEhFUgk9IDk5LAotfTsKKyNkZWZpbmUgSVJfVFlQRV9VTktOT1dOCTAKKyNkZWZpbmUgSVJfVFlQRV9SQzUJKDEgIDw8IDApCS8qIFBoaWxpcHMgUkM1IHByb3RvY29sICovCisjZGVmaW5lIElSX1RZUEVfUEQJKDEgIDw8IDEpCS8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KKyNkZWZpbmUgSVJfVFlQRV9ORUMJKDEgIDw8IDIpCisjZGVmaW5lIElSX1RZUEVfT1RIRVIJKCgodTY0KTEpIDw8IDYzbCkKIAogc3RydWN0IGlyX3NjYW5jb2RlIHsKIAl1MTYJc2NhbmNvZGU7CkBAIC0zNywyNiArMzUsNDAgQEAKIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB7CiAJc3RydWN0IGlyX3NjYW5jb2RlCSpzY2FuOwogCWludAkJCXNpemU7Ci0JZW51bQkJCWlyX3R5cGUgaXJfdHlwZTsKKwl1NjQJCWlyX3R5cGU7CiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0cnVjdCBpcl9pbnB1dF9kZXYgewotCXN0cnVjdCBpbnB1dF9kZXYJCSpkZXY7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlCXJjX3RhYjsKK3N0cnVjdCBpcl9kZXZfcHJvcHMgeworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZF9wcm90b3M7CisJdm9pZCAJCSpwcml2OworCWludCAoKmNoYW5nZV9wcm90b2NvbCkodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpOwogfTsKIAorCitzdHJ1Y3QgaXJfaW5wdXRfZGV2IHsKKwlzdHJ1Y3QgaW5wdXRfZGV2CQkqZGV2OwkJLyogSW5wdXQgZGV2aWNlKi8KKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUJcmNfdGFiOwkJLyogc2Nhbi9rZXkgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCQkJZGV2bm87CQkvKiBkZXZpY2UgbnVtYmVyICovCisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkJYXR0cjsJCS8qIElSIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmNsYXNzX2RldjsJLyogdmlydHVhbCBjbGFzcyBkZXYgKi8KKwljb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzCSpwcm9wczsJCS8qIERldmljZSBwcm9wZXJ0aWVzICovCit9OworI2RlZmluZSB0b19pcl9pbnB1dF9kZXYoX2F0dHIpIGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IGlyX2lucHV0X2RldiwgYXR0cikKKwogLyogUm91dGluZXMgZnJvbSBpci1rZXl0YWJsZS5jICovCiAKIHUzMiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCiAJCQkgICAgdTMyIHNjYW5jb2RlKTsKIAotaW50IGlyX3NldF9rZXljb2RlX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYik7Ci0KLWludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcyk7CiBpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzKTsKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcywKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpOwogdm9pZCBpcl9pbnB1dF91bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CiAKKy8qIFJvdXRpbmVzIGZyb20gaXItc3lzZnMuYyAqLworCitpbnQgaXJfcmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKK3ZvaWQgaXJfdW5yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKaW5kZXggYWFmNjVlOC4uOTE0MjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKQEAgLTM2LDcgKzM2LDcgQEAKIHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogCWNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOyAvKiBJUl9UWVBFX1JDNSwgSVJfVFlQRV9QRCwgZXRjICovCisJdTY0ICAgICAgICAgIHR5cGU7IC8qIElSX1RZUEVfUkM1LCBJUl9UWVBFX1BELCBldGMgKi8KIAkvKgogCSAqIFNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHZhbHVlIGluZGljYXRpbmcgb25lIG9mCiAJICogaXJfa2JkX2kyYydzIGludGVybmFsIGdldF9rZXkgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292NzcyeC5oIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAppbmRleCAxNGM3N2VmLi41NDhiZjExIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL292NzcyeC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKQEAgLTE1LDggKzE1LDkgQEAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKIC8qIGZvciBmbGFncyAqLwotI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUCAgICAgMHgwMDAwMDAwMSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCi0jZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQICAgICAweDAwMDAwMDAyIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUAkoMSA8PCAwKSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQCSgxIDw8IDEpIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR184QklUCSgxIDw8IDIpIC8qIGRlZmF1bHQgMTAgYml0ICovCiAKIC8qCiAgKiBmb3IgRWRnZSBjdHJsCkBAIC01Myw5ICs1NCw4IEBACiAgKiBvdjc3MnggY2FtZXJhIGluZm8KICAqLwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwotCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsIGVkZ2VjdHJsOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsCWVkZ2VjdHJsOwogfTsKIAogI2VuZGlmIC8qIF9fT1Y3NzJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCA0YWVmZjk2Li5iOWRhMWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMTg4LDYgKzE4OCw3IEBACiB2b2lkIHNhYTcxNDZfZG1hX2ZyZWUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAogCQkJCQkJc3RydWN0IHNhYTcxNDZfYnVmICpidWYpOwogCitpbnQgc2FhNzE0Nl92dl9kZXZpbml0KHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KTsKIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KTsKIGludCBzYWE3MTQ2X3Z2X3JlbGVhc2Uoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCmluZGV4IGRjYzViODYuLjlkNjlmMDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaApAQCAtODEsNiArODEsOCBAQAogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMik7CiAJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwogCWludCAoKnNldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKKwlpbnQgKCpnZXRfcGFybSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKik7CisJaW50ICgqc2V0X3Bhcm0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjb250cm9sczsKIAlpbnQgbnVtX2NvbnRyb2xzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmggYi9pbmNsdWRlL21lZGlhL3RpbWJfcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2QzMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIHRpbWJfcmFkaW8uaCBQbGF0Zm9ybSBzdHJ1Y3QgZm9yIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVElNQl9SQURJT18KKyNkZWZpbmUgX1RJTUJfUkFESU9fIDEKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgaTJjX2FkYXB0ZXI7IC8qIEkyQyBhZGFwdGVyIHdoZXJlIHRoZSB0dW5lciBhbmQgZHNwIGFyZSBhdHRhY2hlZCAqLworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm87CisJfSB0dW5lcjsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvOworCX0gZHNwOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNGQ1YjUzZi4uNTUwNWM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTI5LDYgKzEyOSw3IEBACiAjZGVmaW5lIFRVTkVSX1BBUlRTTklDX1BUSV81TkYwNQk4MQogI2RlZmluZSBUVU5FUl9QSElMSVBTX0NVMTIxNkwgICAgICAgICAgIDgyCiAjZGVmaW5lIFRVTkVSX05YUF9UREExODI3MQkJODMKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUFhOMDFaCQk4NAogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmggYi9pbmNsdWRlL21lZGlhL3R2cDcwMDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQzNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmgKQEAgLTAsMCArMSw1NiBAQAorLyogVGV4YXMgSW5zdHJ1bWVudHMgVHJpcGxlIDgtLzEwLUJJVCAxNjUtLzExMC1NU1BTIFZpZGVvIGFuZCBHcmFwaGljcworICogRGlnaXRpemVyIHdpdGggSG9yaXpvbnRhbCBQTEwgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgdXBvbiB0aGUgVFZQNTE1MCBkcml2ZXIKKyAqIHdyaXR0ZW4gYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGluZnJhZGVhZC5vcmcpLAorICogdGhlIFRWUDUxNHggZHJpdmVyIHdyaXR0ZW4gYnkgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICogYW5kIHRoZSBUVlA3MDAyIGRyaXZlciBpbiB0aGUgVEkgTFNQIDIuMTAuMDAuMTQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfVFZQNzAwMl9IXworI2RlZmluZSBfVFZQNzAwMl9IXworCisvKiBQbGF0Zm9ybS1kZXBlbmRlbnQgZGF0YQorICoKKyAqIGNsa19wb2xhcml0eToKKyAqIAkJCTAgLT4gZGF0YSBjbG9ja2VkIG91dCBvbiByaXNpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogCQkJMSAtPiBkYXRhIGNsb2NrZWQgb3V0IG9uIGZhbGxpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogaHNfcG9sYXJpdHk6CisgKiAJCQkwIC0+IGFjdGl2ZSBsb3cgSFNZTkMgb3V0cHV0CisgKiAJCQkxIC0+IGFjdGl2ZSBoaWdoIEhTWU5DIG91dHB1dAorICogc29nX3BvbGFyaXR5OgorICogCQkJMCAtPiBub3JtYWwgb3BlcmF0aW9uCisgKiAJCQkxIC0+IG9wZXJhdGlvbiB3aXRoIHBvbGFyaXR5IGludmVydGVkCisgKiB2c19wb2xhcml0eToKKyAqIAkJCTAgLT4gYWN0aXZlIGxvdyBWU1lOQyBvdXRwdXQKKyAqIAkJCTEgLT4gYWN0aXZlIGhpZ2ggVlNZTkMgb3V0cHV0CisgKiBmaWRfcG9sYXJpdHk6CisgKgkJCTAgLT4gdGhlIGZpZWxkIElEIG91dHB1dCBpcyBzZXQgdG8gbG9naWMgMSBmb3IgYW4gb2RkCisgKgkJCSAgICAgZmllbGQgKGZpZWxkIDEpIGFuZCBzZXQgdG8gbG9naWMgMCBmb3IgYW4gZXZlbgorICoJCQkgICAgIGZpZWxkIChmaWVsZCAwKS4KKyAqCQkJMSAtPiBvcGVyYXRpb24gd2l0aCBwb2xhcml0eSBpbnZlcnRlZC4KKyAqLworc3RydWN0IHR2cDcwMDJfY29uZmlnIHsKKwl1OCBjbGtfcG9sYXJpdHk7CisJdTggaHNfcG9sYXJpdHk7CisJdTggdnNfcG9sYXJpdHk7CisJdTggZmlkX3BvbGFyaXR5OworCXU4IHNvZ19wb2xhcml0eTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmggYi9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCmluZGV4IDVlMjg5NWEuLjkwYmNmMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dzk5MTAuaApAQCAtMzAsOCArMzAsOCBAQAogfTsKIAogc3RydWN0IHR3OTkxMF92aWRlb19pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOwotCWVudW0gdHc5OTEwX21wb3V0X3BpbiAgbXBvdXQ7CisJdW5zaWduZWQgbG9uZwkJYnVzd2lkdGg7CisJZW51bSB0dzk5MTBfbXBvdXRfcGluCW1wb3V0OwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAppbmRleCA2Y2MxMDdkLi41NmFiZjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDEtMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTExID0gMTAxLAorCVY0TDJfSURFTlRfU0FBNzExMUEgPSAxMDIsCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC0xMzQsNiArMTM1LDkgQEAKIAkvKiBtb2R1bGVzIHRlZjY4NjI6IGp1c3QgaWRlbnQgNjg2MiAqLwogCVY0TDJfSURFTlRfVEVGNjg2MiA9IDY4NjIsCiAKKwkvKiBtb2R1bGUgdHZwNzAwMjoganVzdCBpZGVudCA3MDAyICovCisJVjRMMl9JREVOVF9UVlA3MDAyID0gNzAwMiwKKwogCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KIAlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAogCkBAIC0xNTUsNiArMTU5LDkgQEAKIAkvKiBtb2R1bGUgYWR2NzM0MzoganVzdCBpZGVudCA3MzQzICovCiAJVjRMMl9JREVOVF9BRFY3MzQzID0gNzM0MywKIAorCS8qIG1vZHVsZSBzYWE3NzA2aDoganVzdCBpZGVudCA3NzA2ICovCisJVjRMMl9JREVOVF9TQUE3NzA2SCA9IDc3MDYsCisKIAkvKiBtb2R1bGUgd204NzM5OiBqdXN0IGlkZW50IDg3MzkgKi8KIAlWNEwyX0lERU5UX1dNODczOSA9IDg3MzksCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCA5YmE5OWNkLi4yYmNkY2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0xODAsNiArMTgwLDcgQEAKIAlpbnQgKCpzX2Nsb2NrX2ZyZXEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIAlpbnQgKCpzX2kyc19jbG9ja19mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CiAJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpOworCWludCAoKnNfc3RyZWFtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCAwZjdjMzc4Li40NTM3NWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTE3Nyw3ICsxNzcsOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICoKIF9faW42X2Rldl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKGRldi0+aXA2X3B0cik7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkZXYtPmlwNl9wdHIsCisJCQkJICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggZWQzYWVhMS4uZmMwYzUwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtNDMsNyArNDMsNyBAQAogI2RlZmluZSBIQ0lfTk9USUZZX0NPTk5fREVMCQkyCiAjZGVmaW5lIEhDSV9OT1RJRllfVk9JQ0VfU0VUVElORwkzCiAKLS8qIEhDSSBkZXZpY2UgdHlwZXMgKi8KKy8qIEhDSSBidXMgdHlwZXMgKi8KICNkZWZpbmUgSENJX1ZJUlRVQUwJMAogI2RlZmluZSBIQ0lfVVNCCQkxCiAjZGVmaW5lIEhDSV9QQ0NBUkQJMgpAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUgSENJX1BDSQkJNQogI2RlZmluZSBIQ0lfU0RJTwk2CiAKKy8qIEhDSSBjb250cm9sbGVyIHR5cGVzICovCisjZGVmaW5lIEhDSV9CUkVEUgkweDAwCisjZGVmaW5lIEhDSV84MDIxMQkweDAxCisKIC8qIEhDSSBkZXZpY2UgcXVpcmtzICovCiBlbnVtIHsKIAlIQ0lfUVVJUktfTk9fUkVTRVQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDdiODYwOTRhLi5jZTNjOTllNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTcwLDcgKzcwLDggQEAKIAljaGFyCQluYW1lWzhdOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJX191MTYJCWlkOwotCV9fdTgJCXR5cGU7CisJX191OAkJYnVzOworCV9fdTgJCWRldl90eXBlOwogCWJkYWRkcl90CWJkYWRkcjsKIAlfX3U4CQlkZXZfbmFtZVsyNDhdOwogCV9fdTgJCWRldl9jbGFzc1szXTsKQEAgLTEzNCw2ICsxMzUsOCBAQAogCiAJYXRvbWljX3QgCQlwcm9taXNjOwogCisJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnM7CisKIAlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50OwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggMDg4NGI5YS4uM2QxMzRhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqIDgwMi4xMSBkZXZpY2UgYW5kIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlCiAgKgotICogQ29weXJpZ2h0IDIwMDYtMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzksOCArMzksOCBAQAogICogQElFRUU4MDIxMV9CQU5EXzVHSFo6IGFyb3VuZCA1R0h6IGJhbmQgKDQuOS01LjcpCiAgKi8KIGVudW0gaWVlZTgwMjExX2JhbmQgewotCUlFRUU4MDIxMV9CQU5EXzJHSFosCi0JSUVFRTgwMjExX0JBTkRfNUdIWiwKKwlJRUVFODAyMTFfQkFORF8yR0haID0gTkw4MDIxMV9CQU5EXzJHSFosCisJSUVFRTgwMjExX0JBTkRfNUdIWiA9IE5MODAyMTFfQkFORF81R0haLAogCiAJLyoga2VlcCBsYXN0ICovCiAJSUVFRTgwMjExX05VTV9CQU5EUwpAQCAtNjI2LDggKzYyNiwxNCBAQAogICogQGJlYWNvbl9pbnRlcnZhbDogdGhlIGJlYWNvbiBpbnRlcnZhbCBhcyBmcm9tIHRoZSBmcmFtZQogICogQGNhcGFiaWxpdHk6IHRoZSBjYXBhYmlsaXR5IGZpZWxkIGluIGhvc3QgYnl0ZSBvcmRlcgogICogQGluZm9ybWF0aW9uX2VsZW1lbnRzOiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgKE5vdGUgdGhhdCB0aGVyZQotICoJaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlc2UgYXJlIHdlbGwtZm9ybWVkISkKKyAqCWlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZXNlIGFyZSB3ZWxsLWZvcm1lZCEpOyB0aGlzIGlzIGEgcG9pbnRlciB0bworICoJZWl0aGVyIHRoZSBiZWFjb25faWVzIG9yIHByb2JlcmVzcF9pZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgUHJvYmUKKyAqCVJlc3BvbnNlIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkCiAgKiBAbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOiB0b3RhbCBsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKiBAYmVhY29uX2llczogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIGxhc3QgQmVhY29uIGZyYW1lCisgKiBAbGVuX2JlYWNvbl9pZXM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgYmVhY29uX2llcworICogQHByb2JlcmVzcF9pZXM6IHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBsYXN0IFByb2JlIFJlc3BvbnNlIGZyYW1lCisgKiBAbGVuX3Byb2JlcmVzcF9pZXM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgcHJvYmVyZXNwX2llcwogICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIHZhbHVlICh0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUpCiAgKiBAZnJlZV9wcml2OiBmdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgcHJpdmF0ZSBkYXRhCiAgKiBAcHJpdjogcHJpdmF0ZSBhcmVhIGZvciBkcml2ZXIgdXNlLCBoYXMgYXQgbGVhc3Qgd2lwaHktPmJzc19wcml2X3NpemUgYnl0ZXMKQEAgLTY0MSw2ICs2NDcsMTAgQEAKIAl1MTYgY2FwYWJpbGl0eTsKIAl1OCAqaW5mb3JtYXRpb25fZWxlbWVudHM7CiAJc2l6ZV90IGxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKKwl1OCAqYmVhY29uX2llczsKKwlzaXplX3QgbGVuX2JlYWNvbl9pZXM7CisJdTggKnByb2JlcmVzcF9pZXM7CisJc2l6ZV90IGxlbl9wcm9iZXJlc3BfaWVzOwogCiAJczMyIHNpZ25hbDsKIApAQCAtODM3LDYgKzg0Nyw3IEBACiAJV0lQSFlfUEFSQU1fUkVUUllfTE9ORwkJPSAxIDw8IDEsCiAJV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQJPSAxIDw8IDIsCiAJV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRAk9IDEgPDwgMywKKwlXSVBIWV9QQVJBTV9DT1ZFUkFHRV9DTEFTUwk9IDEgPDwgNCwKIH07CiAKIC8qKgpAQCAtODU2LDIwICs4NjcsMTEgQEAKICAqIGNmZzgwMjExX2JpdHJhdGVfbWFzayAtIG1hc2tzIGZvciBiaXRyYXRlIGNvbnRyb2wKICAqLwogc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayB7Ci0vKgotICogQXMgZGlzY3Vzc2VkIGluIEJlcmxpbiwgdGhpcyBzdHJ1Y3QgcmVhbGx5Ci0gKiBzaG91bGQgbG9vayBsaWtlIHRoaXM6Ci0KIAlzdHJ1Y3QgewogCQl1MzIgbGVnYWN5OwotCQl1OCBtY3NbSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTl07CisJCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtYXNraW5nIE1DUyByYXRlczsgZS5nLjogKi8KKwkJLyogdTggbWNzW0lFRUU4MDIxMV9IVF9NQ1NfTUFTS19MRU5dOyAqLwogCX0gY29udHJvbFtJRUVFODAyMTFfTlVNX0JBTkRTXTsKLQotICogU2luY2Ugd2UgY2FuIGFsd2F5cyBmaXggaW4ta2VybmVsIHVzZXJzLCBsZXQncyBrZWVwCi0gKiBpdCBzaW1wbGVyIGZvciBub3c6Ci0gKi8KLQl1MzIgZml4ZWQ7ICAgLyogZml4ZWQgYml0cmF0ZSwgMCA9PSBub3QgZml4ZWQgKi8KLQl1MzIgbWF4cmF0ZTsgLyogaW4ga2JwcywgMCA9PSBubyBsaW1pdCAqLwogfTsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX3Bta3NhIC0gUE1LIFNlY3VyaXR5IEFzc29jaWF0aW9uCkBAIC05ODgsNiArOTkwLDE2IEBACiAgKgogICogQGR1bXBfc3VydmV5OiBnZXQgc2l0ZSBzdXJ2ZXkgaW5mb3JtYXRpb24uCiAgKgorICogQHJlbWFpbl9vbl9jaGFubmVsOiBSZXF1ZXN0IHRoZSBkcml2ZXIgdG8gcmVtYWluIGF3YWtlIG9uIHRoZSBzcGVjaWZpZWQKKyAqCWNoYW5uZWwgZm9yIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gdG8gY29tcGxldGUgYW4gb2ZmLWNoYW5uZWwKKyAqCW9wZXJhdGlvbiAoZS5nLiwgcHVibGljIGFjdGlvbiBmcmFtZSBleGNoYW5nZSkuIFdoZW4gdGhlIGRyaXZlciBpcworICoJcmVhZHkgb24gdGhlIHJlcXVlc3RlZCBjaGFubmVsLCBpdCBtdXN0IGluZGljYXRlIHRoaXMgd2l0aCBhbiBldmVudAorICoJbm90aWZpY2F0aW9uIGJ5IGNhbGxpbmcgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbCgpLgorICogQGNhbmNlbF9yZW1haW5fb25fY2hhbm5lbDogQ2FuY2VsIGFuIG9uLWdvaW5nIHJlbWFpbi1vbi1jaGFubmVsIG9wZXJhdGlvbi4KKyAqCVRoaXMgYWxsb3dzIHRoZSBvcGVyYXRpb24gdG8gYmUgdGVybWluYXRlZCBwcmlvciB0byB0aW1lb3V0IGJhc2VkIG9uCisgKgl0aGUgZHVyYXRpb24gdmFsdWUuCisgKiBAYWN0aW9uOiBUcmFuc21pdCBhbiBhY3Rpb24gZnJhbWUKKyAqCiAgKiBAdGVzdG1vZGVfY21kOiBydW4gYSB0ZXN0IG1vZGUgY29tbWFuZAogICoKICAqIEBzZXRfcG1rc2E6IENhY2hlIGEgUE1LSUQgZm9yIGEgQlNTSUQuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZnVsbG1hYwpAQCAtMTEyMyw3ICsxMTM1LDIxIEBACiAJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpOwogCWludAkoKmZsdXNoX3Bta3NhKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAotCS8qIHNvbWUgdGVtcG9yYXJ5IHN0dWZmIHRvIGZpbmlzaCB3ZXh0ICovCisJaW50CSgqcmVtYWluX29uX2NoYW5uZWwpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sCisJCQkJICAgICB1NjQgKmNvb2tpZSk7CisJaW50CSgqY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHU2NCBjb29raWUpOworCisJaW50CSgqYWN0aW9uKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CisKIAlpbnQJKCpzZXRfcG93ZXJfbWdtdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpOwogfTsKQEAgLTExNzQsNiArMTIwMCwxMCBAQAogCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTgk9IEJJVCg2KSwKIH07CiAKK3N0cnVjdCBtYWNfYWRkcmVzcyB7CisJdTggYWRkcltFVEhfQUxFTl07Cit9OworCiAvKioKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCiAgKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCkBAIC0xMTkyLDEyICsxMjIyLDI4IEBACiAgKgktMSA9IGZyYWdtZW50YXRpb24gZGlzYWJsZWQsIG9ubHkgb2RkIHZhbHVlcyA+PSAyNTYgdXNlZAogICogQHJ0c190aHJlc2hvbGQ6IFJUUyB0aHJlc2hvbGQgKGRvdDExUlRTVGhyZXNob2xkKTsgLTEgPSBSVFMvQ1RTIGRpc2FibGVkCiAgKiBAbmV0OiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhpcyB3aXBoeSBjdXJyZW50bHkgbGl2ZXMgaW4KKyAqIEBwZXJtX2FkZHI6IHBlcm1hbmVudCBNQUMgYWRkcmVzcyBvZiB0aGlzIGRldmljZQorICogQGFkZHJfbWFzazogSWYgdGhlIGRldmljZSBzdXBwb3J0cyBtdWx0aXBsZSBNQUMgYWRkcmVzc2VzIGJ5IG1hc2tpbmcsCisgKglzZXQgdGhpcyB0byBhIG1hc2sgd2l0aCB2YXJpYWJsZSBiaXRzIHNldCB0byAxLCBlLmcuIGlmIHRoZSBsYXN0CisgKglmb3VyIGJpdHMgYXJlIHZhcmlhYmxlIHRoZW4gc2V0IGl0IHRvIDAwOi4uLjowMDowZi4gVGhlIGFjdHVhbAorICoJdmFyaWFibGUgYml0cyBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbnRlcmZhY2VzIGFkZGVkLCB3aXRoCisgKglpbnRlcmZhY2VzIG5vdCBtYXRjaGluZyB0aGUgbWFzayBiZWluZyByZWplY3RlZCB0byBiZSBicm91Z2h0IHVwLgorICogQG5fYWRkcmVzc2VzOiBudW1iZXIgb2YgYWRkcmVzc2VzIGluIEBhZGRyZXNzZXMuCisgKiBAYWRkcmVzc2VzOiBJZiB0aGUgZGV2aWNlIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MsIHNldCB0aGlzIHBvaW50ZXIKKyAqCXRvIGEgbGlzdCBvZiBhZGRyZXNzZXMgKDYgYnl0ZXMgZWFjaCkuIFRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkCisgKglieSBkZWZhdWx0IGZvciBwZXJtX2FkZHIuIEluIHRoaXMgY2FzZSwgdGhlIG1hc2sgc2hvdWxkIGJlIHNldCB0bworICoJYWxsLXplcm9lcy4gSW4gdGhpcyBjYXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGV2aWNlIGNhbiBoYW5kbGUKKyAqCXRoZSBzYW1lIG51bWJlciBvZiBhcmJpdHJhcnkgTUFDIGFkZHJlc3Nlcy4KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCiAKLQkvKiBwZXJtYW5lbnQgTUFDIGFkZHJlc3MgKi8KKwkvKiBwZXJtYW5lbnQgTUFDIGFkZHJlc3MoZXMpICovCiAJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKKwl1OCBhZGRyX21hc2tbRVRIX0FMRU5dOworCisJdTE2IG5fYWRkcmVzc2VzOworCXN0cnVjdCBtYWNfYWRkcmVzcyAqYWRkcmVzc2VzOwogCiAJLyogU3VwcG9ydGVkIGludGVyZmFjZSBtb2RlcywgT1IgdG9nZXRoZXIgQklUKE5MODAyMTFfSUZUWVBFXy4uLikgKi8KIAl1MTYgaW50ZXJmYWNlX21vZGVzOwpAQCAtMTIxNyw2ICsxMjYzLDcgQEAKIAl1OCByZXRyeV9sb25nOwogCXUzMiBmcmFnX3RocmVzaG9sZDsKIAl1MzIgcnRzX3RocmVzaG9sZDsKKwl1OCBjb3ZlcmFnZV9jbGFzczsKIAogCWNoYXIgZndfdmVyc2lvbltFVEhUT09MX0JVU0lORk9fTEVOXTsKIAl1MzIgaHdfdmVyc2lvbjsKQEAgLTE0MDMsNiArMTQ1MCw4IEBACiAgKglzZXQgYnkgZHJpdmVyIChpZiBzdXBwb3J0ZWQpIG9uIGFkZF9pbnRlcmZhY2UgQkVGT1JFIHJlZ2lzdGVyaW5nIHRoZQogICoJbmV0ZGV2IGFuZCBtYXkgb3RoZXJ3aXNlIGJlIHVzZWQgYnkgZHJpdmVyIHJlYWQtb25seSwgd2lsbCBiZSB1cGRhdGUKICAqCWJ5IGNmZzgwMjExIG9uIGNoYW5nZV9pbnRlcmZhY2UKKyAqIEBhY3Rpb25fcmVnaXN0cmF0aW9uczogbGlzdCBvZiByZWdpc3RyYXRpb25zIGZvciBhY3Rpb24gZnJhbWVzCisgKiBAYWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jazogbG9jayBmb3IgdGhlIGxpc3QKICAqLwogc3RydWN0IHdpcmVsZXNzX2RldiB7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKQEAgLTE0MTIsNiArMTQ2MSw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGlvbl9yZWdpc3RyYXRpb25zOworCXNwaW5sb2NrX3QgYWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jazsKKwogCXN0cnVjdCBtdXRleCBtdHg7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2xlYW51cF93b3JrOwpAQCAtMTQzNiw2ICsxNDg4LDkgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICphdXRoX2Jzc2VzW01BWF9BVVRIX0JTU0VTXTsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzczsgLyogYXNzb2NpYXRlZCAvIGpvaW5lZCAqLwogCisJYm9vbCBwczsKKwlpbnQgcHNfdGltZW91dDsKKwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJLyogd2V4dCBkYXRhICovCiAJc3RydWN0IHsKQEAgLTE0NDcsOCArMTUwMiw3IEBACiAJCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CiAJCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CiAJCXM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5OwotCQlib29sIHBzLCBwcmV2X2Jzc2lkX3ZhbGlkOwotCQlpbnQgcHNfdGltZW91dDsKKwkJYm9vbCBwcmV2X2Jzc2lkX3ZhbGlkOwogCX0gd2V4dDsKICNlbmRpZgogfTsKQEAgLTE1MTksMzcgKzE1NzMsODIgQEAKICAqIERvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JhZGlvdGFwLWhlYWRlcnMudHh0CiAgKi8KIAorc3RydWN0IHJhZGlvdGFwX2FsaWduX3NpemUgeworCXVpbnQ4X3QgYWxpZ246NCwgc2l6ZTo0OworfTsKKworc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgeworCWNvbnN0IHN0cnVjdCByYWRpb3RhcF9hbGlnbl9zaXplICphbGlnbl9zaXplOworCWludCBuX2JpdHM7CisJdWludDMyX3Qgb3VpOworCXVpbnQ4X3Qgc3VibnM7Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1lc3BhY2VzIHsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSAqbnM7CisJaW50IG5fbnM7Cit9OworCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgLSB0cmFja3Mgd2FsayB0aHJ1IHByZXNlbnQgcmFkaW90YXAgYXJncwotICogQHJ0aGVhZGVyOiBwb2ludGVyIHRvIHRoZSByYWRpb3RhcCBoZWFkZXIgd2UgYXJlIHdhbGtpbmcgdGhyb3VnaAotICogQG1heF9sZW5ndGg6IGxlbmd0aCBvZiByYWRpb3RhcCBoZWFkZXIgaW4gY3B1IGJ5dGUgb3JkZXJpbmcKLSAqIEB0aGlzX2FyZ19pbmRleDogSUVFRTgwMjExX1JBRElPVEFQXy4uLiBpbmRleCBvZiBjdXJyZW50IGFyZwotICogQHRoaXNfYXJnOiBwb2ludGVyIHRvIGN1cnJlbnQgcmFkaW90YXAgYXJnCi0gKiBAYXJnX2luZGV4OiBpbnRlcm5hbCBuZXh0IGFyZ3VtZW50IGluZGV4Ci0gKiBAYXJnOiBpbnRlcm5hbCBuZXh0IGFyZ3VtZW50IHBvaW50ZXIKLSAqIEBuZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQgdTMyCi0gKiBAYml0bWFwX3NoaWZ0ZXI6IGludGVybmFsIHNoaWZ0ZXIgZm9yIGN1cnIgdTMyIGJpdG1hcCwgYjAgc2V0ID09IGFyZyBwcmVzZW50CisgKiBAdGhpc19hcmdfaW5kZXg6IGluZGV4IG9mIGN1cnJlbnQgYXJnLCB2YWxpZCBhZnRlciBlYWNoIHN1Y2Nlc3NmdWwgY2FsbAorICoJdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoKQorICogQHRoaXNfYXJnOiBwb2ludGVyIHRvIGN1cnJlbnQgcmFkaW90YXAgYXJnOyBpdCBpcyB2YWxpZCBhZnRlciBlYWNoCisgKgljYWxsIHRvIGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KCkgYnV0IGFsc28gYWZ0ZXIKKyAqCWllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCkgd2hlcmUgaXQgd2lsbCBwb2ludCB0bworICoJdGhlIGJlZ2lubmluZyBvZiB0aGUgYWN0dWFsIGRhdGEgcG9ydGlvbgorICogQHRoaXNfYXJnX3NpemU6IGxlbmd0aCBvZiB0aGUgY3VycmVudCBhcmcsIGZvciBjb252ZW5pZW5jZQorICogQGN1cnJlbnRfbmFtZXNwYWNlOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBkZWZpbml0aW9uCisgKgkob3IgaW50ZXJuYWxseSAlTlVMTCBpZiB0aGUgY3VycmVudCBuYW1lc3BhY2UgaXMgdW5rbm93bikKKyAqIEBpc19yYWRpb3RhcF9uczogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIHRoZSBkZWZhdWx0CisgKglyYWRpb3RhcCBuYW1lc3BhY2Ugb3Igbm90CisgKgorICogQG92ZXJyaWRlczogb3ZlcnJpZGUgc3RhbmRhcmQgcmFkaW90YXAgZmllbGRzCisgKiBAbl9vdmVycmlkZXM6IG51bWJlciBvZiBvdmVycmlkZXMKKyAqCisgKiBAX3J0aGVhZGVyOiBwb2ludGVyIHRvIHRoZSByYWRpb3RhcCBoZWFkZXIgd2UgYXJlIHdhbGtpbmcgdGhyb3VnaAorICogQF9tYXhfbGVuZ3RoOiBsZW5ndGggb2YgcmFkaW90YXAgaGVhZGVyIGluIGNwdSBieXRlIG9yZGVyaW5nCisgKiBAX2FyZ19pbmRleDogbmV4dCBhcmd1bWVudCBpbmRleAorICogQF9hcmc6IG5leHQgYXJndW1lbnQgcG9pbnRlcgorICogQF9uZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQgdTMyCisgKiBAX2JpdG1hcF9zaGlmdGVyOiBpbnRlcm5hbCBzaGlmdGVyIGZvciBjdXJyIHUzMiBiaXRtYXAsIGIwIHNldCA9PSBhcmcgcHJlc2VudAorICogQF92bnM6IHZlbmRvciBuYW1lc3BhY2UgZGVmaW5pdGlvbnMKKyAqIEBfbmV4dF9uc19kYXRhOiBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbmFtZXNwYWNlJ3MgZGF0YQorICogQF9yZXNldF9vbl9leHQ6IGludGVybmFsOyByZXNldCB0aGUgYXJnIGluZGV4IHRvIDAgd2hlbiBnb2luZyB0byB0aGUKKyAqCW5leHQgYml0bWFwIHdvcmQKKyAqCisgKiBEZXNjcmliZXMgdGhlIHJhZGlvdGFwIHBhcnNlciBzdGF0ZS4gRmllbGRzIHByZWZpeGVkIHdpdGggYW4gdW5kZXJzY29yZQorICogbXVzdCBub3QgYmUgdXNlZCBieSB1c2VycyBvZiB0aGUgcGFyc2VyLCBvbmx5IGJ5IHRoZSBwYXJzZXIgaW50ZXJuYWxseS4KICAqLwogCiBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZWFkZXI7Ci0JaW50IG1heF9sZW5ndGg7Ci0JaW50IHRoaXNfYXJnX2luZGV4OwotCXU4ICp0aGlzX2FyZzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqX3J0aGVhZGVyOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKl92bnM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgKmN1cnJlbnRfbmFtZXNwYWNlOwogCi0JaW50IGFyZ19pbmRleDsKLQl1OCAqYXJnOwotCV9fbGUzMiAqbmV4dF9iaXRtYXA7Ci0JdTMyIGJpdG1hcF9zaGlmdGVyOworCXVuc2lnbmVkIGNoYXIgKl9hcmcsICpfbmV4dF9uc19kYXRhOworCXVpbnQzMl90ICpfbmV4dF9iaXRtYXA7CisKKwl1bnNpZ25lZCBjaGFyICp0aGlzX2FyZzsKKwlpbnQgdGhpc19hcmdfaW5kZXg7CisJaW50IHRoaXNfYXJnX3NpemU7CisKKwlpbnQgaXNfcmFkaW90YXBfbnM7CisKKwlpbnQgX21heF9sZW5ndGg7CisJaW50IF9hcmdfaW5kZXg7CisJdWludDMyX3QgX2JpdG1hcF9zaGlmdGVyOworCWludCBfcmVzZXRfb25fZXh0OwogfTsKIAogZXh0ZXJuIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgKLSAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAotICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwX2hlYWRlciwKLSAgIGludCBtYXhfbGVuZ3RoKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXBfaGVhZGVyLAorCWludCBtYXhfbGVuZ3RoLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1lc3BhY2VzICp2bnMpOwogCiBleHRlcm4gaW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KAotICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0b3IpOworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKTsKKwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZmMxMDQyX2hlYWRlcls2XTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGJyaWRnZV90dW5uZWxfaGVhZGVyWzZdOwpAQCAtMTU3OCw3ICsxNjc3LDcgQEAKICAqIEBhZGRyOiB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzCiAgKiBAaWZ0eXBlOiB0aGUgdmlydHVhbCBpbnRlcmZhY2UgdHlwZQogICovCi1pbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYWRkciwKK2ludCBpZWVlODAyMTFfZGF0YV90b184MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpOwogCiAvKioKQEAgLTE1ODksMTUgKzE2ODgsNDkgQEAKICAqIEBic3NpZDogdGhlIG5ldHdvcmsgYnNzaWQgKHVzZWQgb25seSBmb3IgaWZ0eXBlIFNUQVRJT04gYW5kIEFESE9DKQogICogQHFvczogYnVpbGQgODAyLjExIFFvUyBkYXRhIGZyYW1lCiAgKi8KLWludCBpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTggKmJzc2lkLCBib29sIHFvcyk7CiAKIC8qKgorICogaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzIC0gZGVjb2RlIGFuIElFRUUgODAyLjExbiBBLU1TRFUgZnJhbWUKKyAqCisgKiBEZWNvZGUgYW4gSUVFRSA4MDIuMTFuIEEtTVNEVSBmcmFtZSBhbmQgY29udmVydCBpdCB0byBhIGxpc3Qgb2YKKyAqIDgwMi4zIGZyYW1lcy4gVGhlIEBsaXN0IHdpbGwgYmUgZW1wdHkgaWYgdGhlIGRlY29kZSBmYWlscy4gVGhlCisgKiBAc2tiIGlzIGNvbnN1bWVkIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICoKKyAqIEBza2I6IFRoZSBpbnB1dCBJRUVFIDgwMi4xMW4gQS1NU0RVIGZyYW1lLgorICogQGxpc3Q6IFRoZSBvdXRwdXQgbGlzdCBvZiA4MDIuMyBmcmFtZXMuIEl0IG11c3QgYmUgYWxsb2NhdGVkIGFuZAorICoJaW5pdGlhbGl6ZWQgYnkgYnkgdGhlIGNhbGxlci4KKyAqIEBhZGRyOiBUaGUgZGV2aWNlIE1BQyBhZGRyZXNzLgorICogQGlmdHlwZTogVGhlIGRldmljZSBpbnRlcmZhY2UgdHlwZS4KKyAqIEBleHRyYV9oZWFkcm9vbTogVGhlIGhhcmR3YXJlIGV4dHJhIGhlYWRyb29tIGZvciBTS0JzIGluIHRoZSBAbGlzdC4KKyAqLwordm9pZCBpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IHU4ICphZGRyLCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSk7CisKKy8qKgogICogY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCAtIGRldGVybWluZSB0aGUgODAyLjFwLzFkIHRhZyBmb3IgYSBkYXRhIGZyYW1lCiAgKiBAc2tiOiB0aGUgZGF0YSBmcmFtZQogICovCiB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorLyoqCisgKiBjZmc4MDIxMV9maW5kX2llIC0gZmluZCBpbmZvcm1hdGlvbiBlbGVtZW50IGluIGRhdGEKKyAqCisgKiBAZWlkOiBlbGVtZW50IElECisgKiBAaWVzOiBkYXRhIGNvbnNpc3Rpbmcgb2YgSUVzCisgKiBAbGVuOiBsZW5ndGggb2YgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gJU5VTEwgaWYgdGhlIGVsZW1lbnQgSUQgY291bGQKKyAqIG5vdCBiZSBmb3VuZCBvciBpZiB0aGUgZWxlbWVudCBpcyBpbnZhbGlkIChjbGFpbXMgdG8gYmUKKyAqIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBkYXRhKSwgb3IgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisgKiBvZiB0aGUgcmVxdWVzdGVkIGVsZW1lbnQsIHRoYXQgaXMgdGhlIGJ5dGUgY29udGFpbmluZyB0aGUKKyAqIGVsZW1lbnQgSUQuIFRoZXJlIGFyZSBubyBjaGVja3Mgb24gdGhlIGVsZW1lbnQgbGVuZ3RoCisgKiBvdGhlciB0aGFuIGhhdmluZyB0byBmaXQgaW50byB0aGUgZ2l2ZW4gZGF0YS4KKyAqLworY29uc3QgdTggKmNmZzgwMjExX2ZpbmRfaWUodTggZWlkLCBjb25zdCB1OCAqaWVzLCBpbnQgbGVuKTsKKwogLyoKICAqIFJlZ3VsYXRvcnkgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd2lwaHlzCiAgKi8KQEAgLTIxMjksNSArMjI2Miw3OSBAQAogdm9pZCBjZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKIAkJCSAgIHU4ICppZSwgc2l6ZV90IGllX2xlbiwgZ2ZwX3QgZ2ZwKTsKIAorLyoqCisgKiBjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsIC0gbm90aWZpY2F0aW9uIG9mIHJlbWFpbl9vbl9jaGFubmVsIHN0YXJ0CisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGNvb2tpZTogdGhlIHJlcXVlc3QgY29va2llCisgKiBAY2hhbjogVGhlIGN1cnJlbnQgY2hhbm5lbCAoZnJvbSByZW1haW5fb25fY2hhbm5lbCByZXF1ZXN0KQorICogQGNoYW5uZWxfdHlwZTogQ2hhbm5lbCB0eXBlCisgKiBAZHVyYXRpb246IER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBkcml2ZXIgaW50ZW50cyB0byByZW1haW4gb24gdGhlCisgKgljaGFubmVsCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKi8KK3ZvaWQgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCk7CisKKy8qKgorICogY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCAtIHJlbWFpbl9vbl9jaGFubmVsIGR1cmF0aW9uIGV4cGlyZWQKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAY29va2llOiB0aGUgcmVxdWVzdCBjb29raWUKKyAqIEBjaGFuOiBUaGUgY3VycmVudCBjaGFubmVsIChmcm9tIHJlbWFpbl9vbl9jaGFubmVsIHJlcXVlc3QpCisgKiBAY2hhbm5lbF90eXBlOiBDaGFubmVsIHR5cGUKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU2NCBjb29raWUsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCWdmcF90IGdmcCk7CisKKworLyoqCisgKiBjZmc4MDIxMV9uZXdfc3RhIC0gbm90aWZ5IHVzZXJzcGFjZSBhYm91dCBzdGF0aW9uCisgKgorICogQGRldjogdGhlIG5ldGRldgorICogQG1hY19hZGRyOiB0aGUgc3RhdGlvbidzIGFkZHJlc3MKKyAqIEBzaW5mbzogdGhlIHN0YXRpb24gaW5mb3JtYXRpb24KKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9uZXdfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7CisKKy8qKgorICogY2ZnODAyMTFfcnhfYWN0aW9uIC0gbm90aWZpY2F0aW9uIG9mIHJlY2VpdmVkLCB1bnByb2Nlc3NlZCBBY3Rpb24gZnJhbWUKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAZnJlcTogRnJlcXVlbmN5IG9uIHdoaWNoIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgaW4gTUh6CisgKiBAYnVmOiBBY3Rpb24gZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqIFJldHVybnMgJXRydWUgaWYgYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWplY3RpbmcgdGhlCisgKgl1bnJlY29nbml6ZWQgQWN0aW9uIGZyYW1lOyAlZmFsc2UgaWYgbm8gc3VjaCBhcHBsaWNhdGlvbiBpcyByZWdpc3RlcmVkCisgKgkoaS5lLiwgdGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgcmVqZWN0aW5nIHRoZSB1bnJlY29nbml6ZWQgQWN0aW9uCisgKglmcmFtZSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBBY3Rpb24gZnJhbWUgaXMgcmVjZWl2ZWQgZm9yIGEgc3RhdGlvbgorICogbW9kZSBpbnRlcmZhY2UsIGJ1dCBpcyBub3QgcHJvY2Vzc2VkIGluIGtlcm5lbC4KKyAqLworYm9vbCBjZmc4MDIxMV9yeF9hY3Rpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsCisJCQlzaXplX3QgbGVuLCBnZnBfdCBnZnApOworCisvKioKKyAqIGNmZzgwMjExX2FjdGlvbl90eF9zdGF0dXMgLSBub3RpZmljYXRpb24gb2YgVFggc3RhdHVzIGZvciBBY3Rpb24gZnJhbWUKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAY29va2llOiBDb29raWUgcmV0dXJuZWQgYnkgY2ZnODAyMTFfb3BzOjphY3Rpb24oKQorICogQGJ1ZjogQWN0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKiBAYWNrOiBXaGV0aGVyIGZyYW1lIHdhcyBhY2tub3dsZWRnZWQKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBBY3Rpb24gZnJhbWUgd2FzIHJlcXVlc3RlZCB0byBiZQorICogdHJhbnNtaXR0ZWQgd2l0aCBjZmc4MDIxMV9vcHM6OmFjdGlvbigpIHRvIHJlcG9ydCB0aGUgVFggc3RhdHVzIG9mIHRoZQorICogdHJhbnNtaXNzaW9uIGF0dGVtcHQuCisgKi8KK3ZvaWQgY2ZnODAyMTFfYWN0aW9uX3R4X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYWNrLCBnZnBfdCBnZnApOwogCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCAzOWM0YTU5Li5jZTA3OGNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTgzLDggKzgzLDYgQEAKIAkgKiAoTDFfQ0FDSEVfU0laRSB3b3VsZCBiZSB0b28gbXVjaCkKIAkgKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKLQlsb25nCQkJX19wYWRfdG9fYWxpZ25fcmVmY250WzJdOwotI2Vsc2UKIAlsb25nCQkJX19wYWRfdG9fYWxpZ25fcmVmY250WzFdOwogI2VuZGlmCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCBkZmE3MmQ0Li4xNWIzZGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pY21wLmgKKysrIGIvaW5jbHVkZS9uZXQvaWNtcC5oCkBAIC0yOCw3ICsyOCw3IEBACiAgIHVuc2lnbmVkCWZhdGFsOjE7CiB9OwogCi1leHRlcm4gc3RydWN0IGljbXBfZXJyIGljbXBfZXJyX2NvbnZlcnRbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWNtcF9lcnIgaWNtcF9lcnJfY29udmVydFtdOwogI2RlZmluZSBJQ01QX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLmljbXBfc3RhdGlzdGljcywgZmllbGQpCiAjZGVmaW5lIElDTVBfSU5DX1NUQVRTX0JIKG5ldCwgZmllbGQpCVNOTVBfSU5DX1NUQVRTX0JIKChuZXQpLT5taWIuaWNtcF9zdGF0aXN0aWNzLCBmaWVsZCkKICNkZWZpbmUgSUNNUE1TR09VVF9JTkNfU1RBVFMobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFMoKG5ldCktPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsIGZpZWxkKzI1NikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKaW5kZXggOWQzZDg2YS4uYWY0OWY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKQEAgLTE5OCw2ICsxOTgsMTAgQEAKIAlJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1MgPSAxNSwKIAlJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVMgPSAxNiwKIAlJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTID0gMTcsCisKKwkvKiB2YWxpZCBpbiBldmVyeSBpdF9wcmVzZW50IGJpdG1hcCwgZXZlbiB2ZW5kb3IgbmFtZXNwYWNlcyAqLworCUlFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9OQU1FU1BBQ0UgPSAyOSwKKwlJRUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRSA9IDMwLAogCUlFRUU4MDIxMV9SQURJT1RBUF9FWFQgPSAzMQogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaCBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKaW5kZXggZTlkNjlkMTkuLjU0NWQ4YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIAlzdHJ1Y3QgaWZtY2FkZHI2CSptY19saXN0OwogCXN0cnVjdCBpZm1jYWRkcjYJKm1jX3RvbWI7Ci0Jcndsb2NrX3QJCW1jX2xvY2s7CisJc3BpbmxvY2tfdAkJbWNfbG9jazsKIAl1bnNpZ25lZCBjaGFyCQltY19xcnY7CiAJdW5zaWduZWQgY2hhcgkJbWNfZ3FfcnVubmluZzsKIAl1bnNpZ25lZCBjaGFyCQltY19pZmNfY291bnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfc29jay5oCmluZGV4IGJkNGM1M2YuLjgzZmQzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfc29jay5oCkBAIC0xMjIsMTAgKzEyMiwxMiBAQAogCV9fYmUzMgkJCWluZXRfc2FkZHI7CiAJX19zMTYJCQl1Y190dGw7CiAJX191MTYJCQljbXNnX2ZsYWdzOwotCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CiAJX19iZTE2CQkJaW5ldF9zcG9ydDsKIAlfX3UxNgkJCWluZXRfaWQ7CisKKwlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OwogCV9fdTgJCQl0b3M7CisJX191OAkJCW1pbl90dGw7CiAJX191OAkJCW1jX3R0bDsKIAlfX3U4CQkJcG10dWRpc2M7CiAJX191OAkJCXJlY3ZlcnI6MSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGZiNjMzNzEuLjUwMzk5NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMTc0LDkgKzE3NCw5IEBACiAjZGVmaW5lIE5FVF9BRERfU1RBVFNfQkgobmV0LCBmaWVsZCwgYWRuZCkgU05NUF9BRERfU1RBVFNfQkgoKG5ldCktPm1pYi5uZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCiAjZGVmaW5lIE5FVF9BRERfU1RBVFNfVVNFUihuZXQsIGZpZWxkLCBhZG5kKSBTTk1QX0FERF9TVEFUU19VU0VSKChuZXQpLT5taWIubmV0X3N0YXRpc3RpY3MsIGZpZWxkLCBhZG5kKQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzbm1wX2ZvbGRfZmllbGQodm9pZCAqbWliW10sIGludCBvZmZ0KTsKLWV4dGVybiBpbnQgc25tcF9taWJfaW5pdCh2b2lkICpwdHJbMl0sIHNpemVfdCBtaWJzaXplKTsKLWV4dGVybiB2b2lkIHNubXBfbWliX2ZyZWUodm9pZCAqcHRyWzJdKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNubXBfZm9sZF9maWVsZCh2b2lkIF9fcGVyY3B1ICptaWJbXSwgaW50IG9mZnQpOworZXh0ZXJuIGludCBzbm1wX21pYl9pbml0KHZvaWQgX19wZXJjcHUgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpOworZXh0ZXJuIHZvaWQgc25tcF9taWJfZnJlZSh2b2lkIF9fcGVyY3B1ICpwdHJbMl0pOwogCiBleHRlcm4gc3RydWN0IGxvY2FsX3BvcnRzIHsKIAlzZXFsb2NrX3QJbG9jazsKQEAgLTM1Miw4ICszNTIsMTEgQEAKIAlJUF9ERUZSQUdfTE9DQUxfREVMSVZFUiwKIAlJUF9ERUZSQUdfQ0FMTF9SQV9DSEFJTiwKIAlJUF9ERUZSQUdfQ09OTlRSQUNLX0lOLAorCV9fSVBfREVGUkFHX0NPTk5UUkFDS19JTl9FTkQJPSBJUF9ERUZSQUdfQ09OTlRSQUNLX0lOICsgVVNIT1JUX01BWCwKIAlJUF9ERUZSQUdfQ09OTlRSQUNLX09VVCwKKwlfX0lQX0RFRlJBR19DT05OVFJBQ0tfT1VUX0VORAk9IElQX0RFRlJBR19DT05OVFJBQ0tfT1VUICsgVVNIT1JUX01BWCwKIAlJUF9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiwKKwlfX0lQX0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOID0gSVBfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU4gKyBVU0hPUlRfTUFYLAogCUlQX0RFRlJBR19WU19JTiwKIAlJUF9ERUZSQUdfVlNfT1VULAogCUlQX0RFRlJBR19WU19GV0QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCAyNTc4MDgxLi44NmY0NmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC0xMjQsMTEgKzEyNCwxMyBAQAogfQogCiBzdHJ1Y3QgZmliNl93YWxrZXJfdCB7Ci0Jc3RydWN0IGZpYjZfd2Fsa2VyX3QgKnByZXYsICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGg7CiAJc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgKm5vZGU7CiAJc3RydWN0IHJ0Nl9pbmZvICpsZWFmOwogCXVuc2lnbmVkIGNoYXIgc3RhdGU7CiAJdW5zaWduZWQgY2hhciBwcnVuZTsKKwl1bnNpZ25lZCBpbnQgc2tpcDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CiAJaW50ICgqZnVuYykoc3RydWN0IGZpYjZfd2Fsa2VyX3QgKik7CiAJdm9pZCAqYXJnczsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA4ZGMzMjk2Li5mZTgyYjFlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0yNiw2ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4JCQkvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi8KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgkJCS8qIGZvciBpcHY2X2FkZHJfY29weSAqLwogCisKKy8qIENvbm5lY3Rpb25zJyBzaXplIHZhbHVlIG5lZWRlZCBieSBpcF92c19jdGwuYyAqLworZXh0ZXJuIGludCBpcF92c19jb25uX3RhYl9zaXplOworCisKIHN0cnVjdCBpcF92c19pcGhkciB7CiAJaW50IGxlbjsKIAlfX3U4IHByb3RvY29sOwpAQCAtMjIwLDYgKzIyNSwyNiBAQAogfTsKIAogLyoKKyAqCVNDVFAgU3RhdGUgVmFsdWVzCisgKi8KK2VudW0gaXBfdnNfc2N0cF9zdGF0ZXMgeworCUlQX1ZTX1NDVFBfU19OT05FLAorCUlQX1ZTX1NDVFBfU19JTklUX0NMSSwKKwlJUF9WU19TQ1RQX1NfSU5JVF9TRVIsCisJSVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSLAorCUlQX1ZTX1NDVFBfU19FQ0hPX0NMSSwKKwlJUF9WU19TQ1RQX1NfRUNIT19TRVIsCisJSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVELAorCUlQX1ZTX1NDVFBfU19TSFVUX0NMSSwKKwlJUF9WU19TQ1RQX1NfU0hVVF9TRVIsCisJSVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSLAorCUlQX1ZTX1NDVFBfU19DTE9TRUQsCisJSVBfVlNfU0NUUF9TX0xBU1QKK307CisKKy8qCiAgKglEZWx0YSBzZXF1ZW5jZSBpbmZvIHN0cnVjdHVyZQogICoJRWFjaCBpcF92c19jb25uIGhhcyAyIChvdXRwdXQgQU5EIGlucHV0IHNlcS4gY2hhbmdlcykuCiAgKiAgICAgIE9ubHkgdXNlZCBpbiB0aGUgVlMvTkFULgpAQCAtNTkyLDE3ICs2MTcsNiBAQAogICogICAgIChmcm9tIGlwX3ZzX2Nvbm4uYykKICAqLwogCi0vKgotICogICAgIElQVlMgY29ubmVjdGlvbiBlbnRyeSBoYXNoIHRhYmxlCi0gKi8KLSNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTCi0jZGVmaW5lIENPTkZJR19JUF9WU19UQUJfQklUUyAgIDEyCi0jZW5kaWYKLQotI2RlZmluZSBJUF9WU19DT05OX1RBQl9CSVRTCUNPTkZJR19JUF9WU19UQUJfQklUUwotI2RlZmluZSBJUF9WU19DT05OX1RBQl9TSVpFICAgICAoMSA8PCBJUF9WU19DT05OX1RBQl9CSVRTKQotI2RlZmluZSBJUF9WU19DT05OX1RBQl9NQVNLICAgICAoSVBfVlNfQ09OTl9UQUJfU0laRSAtIDEpCi0KIGVudW0gewogCUlQX1ZTX0RJUl9JTlBVVCA9IDAsCiAJSVBfVlNfRElSX09VVFBVVCwKQEAgLTc0Nyw3ICs3NjEsNyBAQAogZXh0ZXJuIHN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF9pY21wOwogZXh0ZXJuIHN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF9lc3A7CiBleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX2FoOwotCitleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHA7CiAKIC8qCiAgKiAgICAgIFJlZ2lzdGVyaW5nL3VucmVnaXN0ZXJpbmcgc2NoZWR1bGVyIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBjb21wLmggYi9pbmNsdWRlL25ldC9pcGNvbXAuaAppbmRleCAyYTEwOTJhLi5jYzRmMzBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcGNvbXAuaAorKysgYi9pbmNsdWRlL25ldC9pcGNvbXAuaApAQCAtOSw3ICs5LDcgQEAKIAogc3RydWN0IGlwY29tcF9kYXRhIHsKIAl1MTYgdGhyZXNob2xkOwotCXN0cnVjdCBjcnlwdG9fY29tcCAqKnRmbXM7CisJc3RydWN0IGNyeXB0b19jb21wICogX19wZXJjcHUgKnRmbXM7CiB9OwogCiBzdHJ1Y3QgaXBfY29tcF9oZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggY2NhYjU5NC4uZTcyZmIxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtNzMsNyArNzMsNiBAQAogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfTUFTSwkweDAwZjBVCiAKICNkZWZpbmUgSVBWNl9BRERSX01BUFBFRAkweDEwMDBVCi0jZGVmaW5lIElQVjZfQUREUl9SRVNFUlZFRAkweDIwMDBVCS8qIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2UgKi8KIAogLyoKICAqCUFkZHIgc2NvcGVzCkBAIC0yNDYsNyArMjQ1LDkgQEAKIGludCBpcDZfZnJhZ19ucXVldWVzKHN0cnVjdCBuZXQgKm5ldCk7CiBpbnQgaXA2X2ZyYWdfbWVtKHN0cnVjdCBuZXQgKm5ldCk7CiAKLSNkZWZpbmUgSVBWNl9GUkFHX1RJTUVPVVQJKDYwKkhaKQkJLyogNjAgc2Vjb25kcyAqLworI2RlZmluZSBJUFY2X0ZSQUdfSElHSF9USFJFU0gJKDI1NiAqIDEwMjQpCS8qIDI2MjE0NCAqLworI2RlZmluZSBJUFY2X0ZSQUdfTE9XX1RIUkVTSAkoMTkyICogMTAyNCkJLyogMTk2NjA4ICovCisjZGVmaW5lIElQVjZfRlJBR19USU1FT1VUCSg2MCAqIEhaKQkvKiA2MCBzZWNvbmRzICovCiAKIGV4dGVybiBpbnQgX19pcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX3R5cGUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtMzUzLDggKzM1NCwxMSBAQAogZW51bSBpcDZfZGVmcmFnX3VzZXJzIHsKIAlJUDZfREVGUkFHX0xPQ0FMX0RFTElWRVIsCiAJSVA2X0RFRlJBR19DT05OVFJBQ0tfSU4sCisJX19JUDZfREVGUkFHX0NPTk5UUkFDS19JTgk9IElQNl9ERUZSQUdfQ09OTlRSQUNLX0lOICsgVVNIT1JUX01BWCwKIAlJUDZfREVGUkFHX0NPTk5UUkFDS19PVVQsCisJX19JUDZfREVGUkFHX0NPTk5UUkFDS19PVVQJPSBJUDZfREVGUkFHX0NPTk5UUkFDS19PVVQgKyBVU0hPUlRfTUFYLAogCUlQNl9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiwKKwlfX0lQNl9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiA9IElQNl9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiArIFVTSE9SVF9NQVgsCiB9OwogCiBzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjLmggYi9pbmNsdWRlL25ldC9sbGMuaAppbmRleCA3OTQwZGExLi41NTAzYjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGMuaAorKysgYi9pbmNsdWRlL25ldC9sbGMuaApAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0zMSw2ICszNCwxMiBAQAogI2RlZmluZSBMTENfU0FQX1NUQVRFX0lOQUNUSVZFCTEKICNkZWZpbmUgTExDX1NBUF9TVEFURV9BQ1RJVkUJMgogCisjZGVmaW5lIExMQ19TS19ERVZfSEFTSF9CSVRTIDYKKyNkZWZpbmUgTExDX1NLX0RFVl9IQVNIX0VOVFJJRVMgKDE8PExMQ19TS19ERVZfSEFTSF9CSVRTKQorCisjZGVmaW5lIExMQ19TS19MQUREUl9IQVNIX0JJVFMgNgorI2RlZmluZSBMTENfU0tfTEFERFJfSEFTSF9FTlRSSUVTICgxPDxMTENfU0tfTEFERFJfSEFTSF9CSVRTKQorCiAvKioKICAqIHN0cnVjdCBsbGNfc2FwIC0gRGVmaW5lcyB0aGUgU0FQIGNvbXBvbmVudAogICoKQEAgLTUzLDE4ICs2MiwzOCBAQAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAlzdHJ1Y3QgbGxjX2FkZHIJIGxhZGRyOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlzdHJ1Y3QgewotCQlyd2xvY2tfdAkgIGxvY2s7Ci0JCXN0cnVjdCBobGlzdF9oZWFkIGxpc3Q7Ci0JfSBza19saXN0OworCXNwaW5sb2NrX3Qgc2tfbG9jazsKKwlpbnQgc2tfY291bnQ7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgc2tfbGFkZHJfaGFzaFtMTENfU0tfTEFERFJfSEFTSF9FTlRSSUVTXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBza19kZXZfaGFzaFtMTENfU0tfREVWX0hBU0hfRU5UUklFU107CiB9OwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaGxpc3RfaGVhZCAqbGxjX3NrX2Rldl9oYXNoKHN0cnVjdCBsbGNfc2FwICpzYXAsIGludCBpZmluZGV4KQoreworCXJldHVybiAmc2FwLT5za19kZXZfaGFzaFtpZmluZGV4ICUgTExDX1NLX0RFVl9IQVNIX0VOVFJJRVNdOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgbGxjX3NrX2xhZGRyX2hhc2hmbihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQoreworCXJldHVybiBoYXNoXzMyKGpoYXNoKGxhZGRyLT5tYWMsIHNpemVvZihsYWRkci0+bWFjKSwgMCksCisJCSAgICAgICBMTENfU0tfTEFERFJfSEFTSF9CSVRTKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxsY19za19sYWRkcl9oYXNoKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCit7CisJcmV0dXJuICZzYXAtPnNrX2xhZGRyX2hhc2hbbGxjX3NrX2xhZGRyX2hhc2hmbihzYXAsIGxhZGRyKV07Cit9CisKICNkZWZpbmUgTExDX0RFU1RfSU5WQUxJRCAgICAgICAgIDAgICAgICAvKiBJbnZhbGlkIExMQyBQRFUgdHlwZSAqLwogI2RlZmluZSBMTENfREVTVF9TQVAgICAgICAgICAgICAgMSAgICAgIC8qIFR5cGUgMSBnb2VzIGhlcmUgKi8KICNkZWZpbmUgTExDX0RFU1RfQ09OTiAgICAgICAgICAgIDIgICAgICAvKiBUeXBlIDIgZ29lcyBoZXJlICovCiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxsY19zYXBfbGlzdDsKLWV4dGVybiByd2xvY2tfdCBsbGNfc2FwX2xpc3RfbG9jazsKK2V4dGVybiBzcGlubG9ja190IGxsY19zYXBfbGlzdF9sb2NrOwogCiBleHRlcm4gaW50IGxsY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUyMzc0ZTMuLjJmOTdkOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNzYsNiArNzYsOCBAQAogCXUzMgkJICAgIHJ4X3BkdV9oZHI7CSAgIC8qIHVzZWQgZm9yIHNhdmluZyBoZWFkZXIgb2YgbGFzdCBwZHUKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCisJdTMyCQkgICAgY21zZ19mbGFnczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfc29jayAqbGxjX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDBiZjM2OTcuLjgwZWI3Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMDcsMjUgKzEwNywxNCBAQAogICoJMl5uLTEgaW4gdGhlIHJhbmdlIDEuLjMyNzY3XQogICogQGN3X21heDogbWF4aW11bSBjb250ZW50aW9uIHdpbmRvdyBbbGlrZSBAY3dfbWluXQogICogQHR4b3A6IG1heGltdW0gYnVyc3QgdGltZSBpbiB1bml0cyBvZiAzMiB1c2VjcywgMCBtZWFuaW5nIGRpc2FibGVkCisgKiBAdWFwc2Q6IGlzIFUtQVBTRCBtb2RlIGVuYWJsZWQgZm9yIHRoZSBxdWV1ZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB7CiAJdTE2IHR4b3A7CiAJdTE2IGN3X21pbjsKIAl1MTYgY3dfbWF4OwogCXU4IGFpZnM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgLSB0cmFuc21pdCBxdWV1ZSBzdGF0aXN0aWNzCi0gKgotICogQGxlbjogbnVtYmVyIG9mIHBhY2tldHMgaW4gcXVldWUKLSAqIEBsaW1pdDogcXVldWUgbGVuZ3RoIGxpbWl0Ci0gKiBAY291bnQ6IG51bWJlciBvZiBmcmFtZXMgc2VudAotICovCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7CisJYm9vbCB1YXBzZDsKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIHsKQEAgLTE4NCw3ICsxNzMsOCBAQAogICogQHVzZV9zaG9ydF9zbG90OiB1c2Ugc2hvcnQgc2xvdCB0aW1lIChvbmx5IHJlbGV2YW50IGZvciBFUlApOwogICoJaWYgdGhlIGhhcmR3YXJlIGNhbm5vdCBoYW5kbGUgdGhpcyBpdCBtdXN0IHNldCB0aGUKICAqCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFIGhhcmR3YXJlIGZsYWcKLSAqIEBkdGltX3BlcmlvZDogbnVtIG9mIGJlYWNvbnMgYmVmb3JlIHRoZSBuZXh0IERUSU0sIGZvciBQU00KKyAqIEBkdGltX3BlcmlvZDogbnVtIG9mIGJlYWNvbnMgYmVmb3JlIHRoZSBuZXh0IERUSU0sIGZvciBiZWFjb25pbmcsCisgKglub3QgdmFsaWQgaW4gc3RhdGlvbiBtb2RlIChjZi4gaHcgY29uZiBwc19kdGltX3BlcmlvZCkKICAqIEB0aW1lc3RhbXA6IGJlYWNvbiB0aW1lc3RhbXAKICAqIEBiZWFjb25faW50OiBiZWFjb24gaW50ZXJ2YWwKICAqIEBhc3NvY19jYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBhc3NvYyByZXNwCkBAIC0yNTUsOSArMjQ1LDYgQEAKICAqIEBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTogaW50ZXJuYWwgdG8gbWFjODAyMTEsIGNhbiBiZQogICoJc2V0IGJ5IHJhdGUgY29udHJvbCBhbGdvcml0aG1zIHRvIGluZGljYXRlIHByb2JlIHJhdGUsIHdpbGwKICAqCWJlIGNsZWFyZWQgZm9yIGZyYWdtZW50ZWQgZnJhbWVzIChleGNlcHQgb24gdGhlIGxhc3QgZnJhZ21lbnQpCi0gKiBASUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTzogbWFjODAyMTEgaW50ZXJuYWwgZmxhZywgZG8gbm90IHRlc3Qgb3IKLSAqCXNldCB0aGlzIGZsYWcgaW4gdGhlIGRyaXZlcjsgaW5kaWNhdGVzIHRoYXQgdGhlIHJhdGUgY29udHJvbAotICoJYWxnb3JpdGhtIHdhcyB1c2VkIGFuZCBzaG91bGQgYmUgbm90aWZpZWQgb2YgVFggc3RhdHVzCiAgKiBASUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOiBjb21wbGV0ZWx5IGludGVybmFsIHRvIG1hYzgwMjExLAogICoJdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGVuZGluZyBmcmFtZSByZXF1aXJlcyBUWCBwcm9jZXNzaW5nIGJlZm9yZQogICoJaXQgY2FuIGJlIHNlbnQgb3V0LgpAQCAtMjcyLDYgKzI1OSwxNCBAQAogICoJdHJhbnNtaXQgZnVuY3Rpb24gYWZ0ZXIgdGhlIGN1cnJlbnQgZnJhbWUsIHRoaXMgY2FuIGJlIHVzZWQKICAqCWJ5IGRyaXZlcnMgdG8ga2ljayB0aGUgRE1BIHF1ZXVlIG9ubHkgaWYgdW5zZXQgb3Igd2hlbiB0aGUKICAqCXF1ZXVlIGdldHMgZnVsbC4KKyAqIEBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT046IFRoaXMgZnJhbWUgaXMgYmVpbmcgcmV0cmFuc21pdHRlZAorICoJYWZ0ZXIgVFggc3RhdHVzIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHdhcyBhc2xlZXAsIGl0IG11c3Qgbm90CisgKgliZSBtb2RpZmllZCBhZ2FpbiAobm8gc2Vxbm8gYXNzaWdubWVudCwgY3J5cHRvLCBldGMuKQorICogQElFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVA6IFRoaXMgZnJhbWUgd2FzIGluamVjdGVkIGFuZCBzdGlsbAorICoJaGFzIGEgcmFkaW90YXAgaGVhZGVyIGF0IHNrYi0+ZGF0YS4KKyAqIEBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWDogRnJhbWUgd2FzIHJlcXVlc3RlZCB0aHJvdWdoIG5sODAyMTEKKyAqCU1MTUUgY29tbWFuZCAoaW50ZXJuYWwgdG8gbWFjODAyMTEgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRvIHNlbmQgVFgKKyAqCXN0YXR1cyB0byB1c2VyIHNwYWNlKQogICovCiBlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MgewogCUlFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUwkJPSBCSVQoMCksCkBAIC0yODcsMTIgKzI4MiwxNCBAQAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVCQkJPSBCSVQoMTApLAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0sJCT0gQklUKDExKSwKIAlJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRQk9IEJJVCgxMiksCi0JSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTwkJPSBCSVQoMTMpLAogCUlFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORwk9IEJJVCgxNCksCiAJSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJJRUQJCT0gQklUKDE1KSwKIAlJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUCQk9IEJJVCgxNiksCiAJSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0UJPSBCSVQoMTcpLAogCUlFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVMJCT0gQklUKDE4KSwKKwlJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT04JPSBCSVQoMTkpLAorCUlFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVAJCT0gQklUKDIwKSwKKwlJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWAk9IEJJVCgyMSksCiB9OwogCiAvKioKQEAgLTU3MSw3ICs1NjgsMTMgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9NT05JVE9SOiB0aGVyZSdzIGEgbW9uaXRvciBpbnRlcmZhY2UgcHJlc2VudCAtLSB1c2UgdGhpcwogICoJdG8gZGV0ZXJtaW5lIGZvciBleGFtcGxlIHdoZXRoZXIgdG8gY2FsY3VsYXRlIHRpbWVzdGFtcHMgZm9yIHBhY2tldHMKICAqCW9yIG5vdCwgZG8gbm90IHVzZSBpbnN0ZWFkIG9mIGZpbHRlciBmbGFncyEKLSAqIEBJRUVFODAyMTFfQ09ORl9QUzogRW5hYmxlIDgwMi4xMSBwb3dlciBzYXZlIG1vZGUgKG1hbmFnZWQgbW9kZSBvbmx5KQorICogQElFRUU4MDIxMV9DT05GX1BTOiBFbmFibGUgODAyLjExIHBvd2VyIHNhdmUgbW9kZSAobWFuYWdlZCBtb2RlIG9ubHkpLgorICoJVGhpcyBpcyB0aGUgcG93ZXIgc2F2ZSBtb2RlIGRlZmluZWQgYnkgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDExLjIsCisgKgltZWFuaW5nIHRoYXQgdGhlIGhhcmR3YXJlIHN0aWxsIHdha2VzIHVwIGZvciBiZWFjb25zLCBpcyBhYmxlIHRvCisgKgl0cmFuc21pdCBmcmFtZXMgYW5kIHJlY2VpdmUgdGhlIHBvc3NpYmxlIGFja25vd2xlZGdtZW50IGZyYW1lcy4KKyAqCU5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGhhcmR3YXJlIHNwZWNpZmljIHdha2V1cC9zbGVlcCBzdGF0ZXMsCisgKglkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuIFNlZSB0aGUgc2VjdGlvbiAiUG93ZXJzYXZlIHN1cHBvcnQiCisgKglmb3IgbW9yZS4KICAqIEBJRUVFODAyMTFfQ09ORl9JRExFOiBUaGUgZGV2aWNlIGlzIHJ1bm5pbmcsIGJ1dCBpZGxlOyBpZiB0aGUgZmxhZyBpcyBzZXQKICAqCXRoZSBkcml2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzIGJ1dAogICoJbWF5IHR1cm4gdGhlIGRldmljZSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVHlwaWNhbGx5LCB0aGlzIGZsYWcgd2lsbApAQCAtNTk1LDggKzU5OCwxMCBAQAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOiB0aGUgY2hhbm5lbC9jaGFubmVsX3R5cGUgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFM6IHJldHJ5IGxpbWl0cyBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEU6IElkbGUgZmxhZyBjaGFuZ2VkCisgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFM6IFNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2Vyc2F2ZSBtb2RlIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfU01QUwkJPSBCSVQoMSksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUgkJPSBCSVQoMyksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTCQk9IEJJVCg0KSwKQEAgLTYwNyw2ICs2MTIsMjUgQEAKIH07CiAKIC8qKgorICogZW51bSBpZWVlODAyMTFfc21wc19tb2RlIC0gc3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZSBtb2RlCisgKgorICogQElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQzogYXV0b21hdGljCisgKiBASUVFRTgwMjExX1NNUFNfT0ZGOiBvZmYKKyAqIEBJRUVFODAyMTFfU01QU19TVEFUSUM6IHN0YXRpYworICogQElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6IGR5bmFtaWMKKyAqIEBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM6IGludGVybmFsLCBkb24ndCB1c2UKKyAqLworZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHsKKwlJRUVFODAyMTFfU01QU19BVVRPTUFUSUMsCisJSUVFRTgwMjExX1NNUFNfT0ZGLAorCUlFRUU4MDIxMV9TTVBTX1NUQVRJQywKKwlJRUVFODAyMTFfU01QU19EWU5BTUlDLAorCisJLyoga2VlcCBsYXN0ICovCisJSUVFRTgwMjExX1NNUFNfTlVNX01PREVTLAorfTsKKworLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgLSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2UKICAqCiAgKiBUaGlzIHN0cnVjdCBpbmRpY2F0ZXMgaG93IHRoZSBkcml2ZXIgc2hhbGwgY29uZmlndXJlIHRoZSBoYXJkd2FyZS4KQEAgLTYxOSw2ICs2NDMsOSBAQAogICoJdmFsdWUgd2lsbCBiZSBvbmx5IGFjaGlldmFibGUgYmV0d2VlbiBEVElNIGZyYW1lcywgdGhlIGhhcmR3YXJlCiAgKgluZWVkcyB0byBjaGVjayBmb3IgdGhlIG11bHRpY2FzdCB0cmFmZmljIGJpdCBpbiBEVElNIGJlYWNvbnMuCiAgKglUaGlzIHZhcmlhYmxlIGlzIHZhbGlkIG9ubHkgd2hlbiB0aGUgQ09ORl9QUyBmbGFnIGlzIHNldC4KKyAqIEBwc19kdGltX3BlcmlvZDogVGhlIERUSU0gcGVyaW9kIG9mIHRoZSBBUCB3ZSdyZSBjb25uZWN0ZWQgdG8sIGZvciB1c2UKKyAqCWluIHBvd2VyIHNhdmluZy4gUG93ZXIgc2F2aW5nIHdpbGwgbm90IGJlIGVuYWJsZWQgdW50aWwgYSBiZWFjb24KKyAqCWhhcyBiZWVuIHJlY2VpdmVkIGFuZCB0aGUgRFRJTSBwZXJpb2QgaXMga25vd24uCiAgKiBAZHluYW1pY19wc190aW1lb3V0OiBUaGUgZHluYW1pYyBwb3dlcnNhdmUgdGltZW91dCAoaW4gbXMpLCBzZWUgdGhlCiAgKglwb3dlcnNhdmUgZG9jdW1lbnRhdGlvbiBiZWxvdy4gVGhpcyB2YXJpYWJsZSBpcyB2YWxpZCBvbmx5IHdoZW4KICAqCXRoZSBDT05GX1BTIGZsYWcgaXMgc2V0LgpAQCAtNjM0LDYgKzY2MSwxMCBAQAogICogQHNob3J0X2ZyYW1lX21heF90eF9jb3VudDogTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBmb3IgYSAic2hvcnQiCiAgKiAgICBmcmFtZSwgY2FsbGVkICJkb3QxMVNob3J0UmV0cnlMaW1pdCIgaW4gODAyLjExLCBidXQgYWN0dWFsbHkgbWVhbnMgdGhlCiAgKiAgICBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCisgKgorICogQHNtcHNfbW9kZTogc3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXJzYXZlIG1vZGU7IG5vdGUgdGhhdAorICoJJUlFRUU4MDIxMV9TTVBTX1NUQVRJQyBpcyB1c2VkIHdoZW4gdGhlIGRldmljZSBpcyBub3QKKyAqCWNvbmZpZ3VyZWQgZm9yIGFuIEhUIGNoYW5uZWwKICAqLwogc3RydWN0IGllZWU4MDIxMV9jb25mIHsKIAl1MzIgZmxhZ3M7CkBAIC02NDEsMTEgKzY3MiwxMyBAQAogCWludCBtYXhfc2xlZXBfcGVyaW9kOwogCiAJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBwc19kdGltX3BlcmlvZDsKIAogCXU4IGxvbmdfZnJhbWVfbWF4X3R4X2NvdW50LCBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CisJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZTsKIH07CiAKIC8qKgpAQCAtNjU3LDEyICs2OTAsMTQgQEAKICAqIEB0eXBlOiB0eXBlIG9mIHRoaXMgdmlydHVhbCBpbnRlcmZhY2UKICAqIEBic3NfY29uZjogQlNTIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgaW50ZXJmYWNlLCBlaXRoZXIgb3VyIG93bgogICoJb3IgdGhlIEJTUyB3ZSdyZSBhc3NvY2lhdGVkIHRvCisgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGlzIGludGVyZmFjZQogICogQGRydl9wcml2OiBkYXRhIGFyZWEgZm9yIGRyaXZlciB1c2UsIHdpbGwgYWx3YXlzIGJlIGFsaWduZWQgdG8KICAqCXNpemVvZih2b2lkICopLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiB7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2NvbmY7CisJdTggYWRkcltFVEhfQUxFTl07CiAJLyogbXVzdCBiZSBsYXN0ICovCiAJdTggZHJ2X3ByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oc2l6ZW9mKHZvaWQgKikpKSk7CiB9OwpAQCAtNjc2LDMzICs3MTEsNiBAQAogfQogCiAvKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIC0gaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIGFuIGludGVyZmFjZQotICoKLSAqIEB2aWY6IHBvaW50ZXIgdG8gYSBkcml2ZXItdXNlIHBlci1pbnRlcmZhY2Ugc3RydWN0dXJlLiBUaGUgcG9pbnRlcgotICoJaXRzZWxmIGlzIGFsc28gdXNlZCBmb3IgdmFyaW91cyBmdW5jdGlvbnMgaW5jbHVkaW5nCi0gKglpZWVlODAyMTFfYmVhY29uX2dldCgpIGFuZCBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKCkuCi0gKiBAdHlwZTogb25lIG9mICZlbnVtIG5sODAyMTFfaWZ0eXBlIGNvbnN0YW50cy4gRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgotICoJYWRkZWQvcmVtb3ZlZCBpbnRlcmZhY2UuCi0gKiBAbWFjX2FkZHI6IHBvaW50ZXIgdG8gTUFDIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS4gVGhpcyBwb2ludGVyIGlzIHZhbGlkCi0gKgl1bnRpbCB0aGUgaW50ZXJmYWNlIGlzIHJlbW92ZWQgKGkuZS4gaXQgY2Fubm90IGJlIHVzZWQgYWZ0ZXIKLSAqCXJlbW92ZV9pbnRlcmZhY2UoKSBjYWxsYmFjayB3YXMgY2FsbGVkIGZvciB0aGlzIGludGVyZmFjZSkuCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBhZGRfaW50ZXJmYWNlKCkgYW5kIHJlbW92ZV9pbnRlcmZhY2UoKQotICogY2FsbGJhY2tzIG9mICZzdHJ1Y3QgaWVlZTgwMjExX2h3LgotICoKLSAqIFdoZW4geW91IGFsbG93IG11bHRpcGxlIGludGVyZmFjZXMgdG8gYmUgYWRkZWQgdG8geW91ciBQSFksIHRha2UgY2FyZQotICogdGhhdCB0aGUgaGFyZHdhcmUgY2FuIGFjdHVhbGx5IGhhbmRsZSBtdWx0aXBsZSBNQUMgYWRkcmVzc2VzLiBIb3dldmVyLAotICogYWxzbyB0YWtlIGNhcmUgdGhhdCB3aGVuIHRoZXJlJ3Mgbm8gaW50ZXJmYWNlIGxlZnQgd2l0aCBtYWNfYWRkciAhPSAlTlVMTAotICogeW91IHJlbW92ZSB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIHRvIGF2b2lkIGFja25vd2xlZGdpbmcgcGFja2V0cwotICogaW4gcHVyZSBtb25pdG9yIG1vZGUuCi0gKi8KLXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIHsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQl2b2lkICptYWNfYWRkcjsKLX07Ci0KLS8qKgogICogZW51bSBpZWVlODAyMTFfa2V5X2FsZyAtIGtleSBhbGdvcml0aG0KICAqIEBBTEdfV0VQOiBXRVA0MCBvciBXRVAxMDQKICAqIEBBTEdfVEtJUDogVEtJUApAQCAtNzk3LDcgKzgwNSw3IEBACiAgKiBtYWM4MDIxMSwgYW55IGllZWU4MDIxMV9zdGEgcG9pbnRlciB5b3UgZ2V0IGFjY2VzcyB0byBtdXN0CiAgKiBlaXRoZXIgYmUgcHJvdGVjdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksCiAgKiBvciB5b3UgbXVzdCB0YWtlIGdvb2QgY2FyZSB0byBub3QgdXNlIHN1Y2ggYSBwb2ludGVyIGFmdGVyIGEKLSAqIGNhbGwgdG8geW91ciBzdGFfbm90aWZ5IGNhbGxiYWNrIHRoYXQgcmVtb3ZlZCBpdC4KKyAqIGNhbGwgdG8geW91ciBzdGFfcmVtb3ZlIGNhbGxiYWNrIHRoYXQgcmVtb3ZlZCBpdC4KICAqCiAgKiBAYWRkcjogTUFDIGFkZHJlc3MKICAqIEBhaWQ6IEFJRCB3ZSBhc3NpZ25lZCB0byB0aGUgc3RhdGlvbiBpZiB3ZSdyZSBhbiBBUApAQCAtODIzLDggKzgzMSw4IEBACiAgKiBpbmRpY2F0ZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgYSBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGUsCiAgKiBvciBpZiBhIGFzc29jaWF0ZWQgc3RhdGlvbiBtYWRlIGEgcG93ZXIgc3RhdGUgdHJhbnNpdGlvbi4KICAqCi0gKiBAU1RBX05PVElGWV9BREQ6IGEgc3RhdGlvbiB3YXMgYWRkZWQgdG8gdGhlIHN0YXRpb24gdGFibGUKLSAqIEBTVEFfTk9USUZZX1JFTU9WRTogYSBzdGF0aW9uIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGlvbiB0YWJsZQorICogQFNUQV9OT1RJRllfQUREOiAoREVQUkVDQVRFRCkgYSBzdGF0aW9uIHdhcyBhZGRlZCB0byB0aGUgc3RhdGlvbiB0YWJsZQorICogQFNUQV9OT1RJRllfUkVNT1ZFOiAoREVQUkVDQVRFRCkgYSBzdGF0aW9uIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGlvbiB0YWJsZQogICogQFNUQV9OT1RJRllfU0xFRVA6IGEgc3RhdGlvbiBpcyBub3cgc2xlZXBpbmcKICAqIEBTVEFfTk9USUZZX0FXQUtFOiBhIHNsZWVwaW5nIHN0YXRpb24gd29rZSB1cAogICovCkBAIC05MjYsNiArOTM0LDI2IEBACiAgKiBASUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVI6CiAgKglIYXJkd2FyZSBzdXBwb3J0cyBkcm9wcGluZyBvZiBpcnJlbGV2YW50IGJlYWNvbiBmcmFtZXMgdG8KICAqCWF2b2lkIHdha2luZyB1cCBjcHUuCisgKgorICogQElFRUU4MDIxMV9IV19TVVBQT1JUU19TVEFUSUNfU01QUzoKKyAqCUhhcmR3YXJlIHN1cHBvcnRzIHN0YXRpYyBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUsCisgKglpZS4gY2FuIHR1cm4gb2ZmIGFsbCBidXQgb25lIGNoYWluIGV2ZW4gb24gSFQgY29ubmVjdGlvbnMKKyAqCXRoYXQgc2hvdWxkIGJlIHVzaW5nIG1vcmUgY2hhaW5zLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgZHluYW1pYyBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUsCisgKglpZS4gY2FuIHR1cm4gb2ZmIGFsbCBidXQgb25lIGNoYWluIGFuZCB0aGVuIHdha2UgdGhlIHJlc3QKKyAqCXVwIGFzIHJlcXVpcmVkIGFmdGVyLCBmb3IgZXhhbXBsZSwgcnRzL2N0cyBoYW5kc2hha2UuCisgKgorICogQElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRDoKKyAqCUhhcmR3YXJlIHN1cHBvcnRzIFVuc2NoZWR1bGVkIEF1dG9tYXRpYyBQb3dlciBTYXZlIERlbGl2ZXJ5CisgKgkoVS1BUFNEKSBpbiBtYW5hZ2VkIG1vZGUuIFRoZSBtb2RlIGlzIGNvbmZpZ3VyZWQgd2l0aAorICoJY29uZl90eCgpIG9wZXJhdGlvbi4KKyAqCisgKiBASUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUzoKKyAqCUhhcmR3YXJlIGNhbiBwcm92aWRlIGFjayBzdGF0dXMgcmVwb3J0cyBvZiBUeCBmcmFtZXMgdG8KKyAqCXRoZSBzdGFjay4KKyAqCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTAkJCT0gMTw8MCwKQEAgLTk0Myw2ICs5NzEsMTAgQEAKIAlJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUwkJPSAxPDwxMiwKIAlJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUJCQk9IDE8PDEzLAogCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSCQkJPSAxPDwxNCwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMJCT0gMTw8MTUsCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUwkJPSAxPDwxNiwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QJCQk9IDE8PDE3LAorCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMJCT0gMTw8MTgsCiB9OwogCiAvKioKQEAgLTExMjEsMTggKzExNTMsMjQgQEAKICAqCiAgKiBtYWM4MDIxMSBoYXMgc3VwcG9ydCBmb3IgdmFyaW91cyBwb3dlcnNhdmUgaW1wbGVtZW50YXRpb25zLgogICoKLSAqIEZpcnN0LCBpdCBjYW4gc3VwcG9ydCBoYXJkd2FyZSB0aGF0IGhhbmRsZXMgYWxsIHBvd2Vyc2F2aW5nIGJ5Ci0gKiBpdHNlbGYsIHN1Y2ggaGFyZHdhcmUgc2hvdWxkIHNpbXBseSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMKLSAqIGhhcmR3YXJlIGZsYWcuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZSB0b2xkIGFib3V0IHRoZSBkZXNpcmVkCi0gKiBwb3dlcnNhdmUgbW9kZSBkZXBlbmRpbmcgb24gdGhlIGFzc29jaWF0aW9uIHN0YXR1cywgYW5kIHRoZSBkcml2ZXIKLSAqIG11c3QgdGFrZSBjYXJlIG9mIHNlbmRpbmcgbnVsbGZ1bmMgZnJhbWVzIHdoZW4gbmVjZXNzYXJ5LCBpLmUuIHdoZW4KLSAqIGVudGVyaW5nIGFuZCBsZWF2aW5nIHBvd2Vyc2F2ZSBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGxvb2sgYXQKLSAqIHRoZSBBSUQgaW4gYmVhY29ucyBhbmQgc2lnbmFsIHRvIHRoZSBBUCB0aGF0IGl0IHdva2UgdXAgd2hlbiBpdCBmaW5kcwotICogdHJhZmZpYyBkaXJlY3RlZCB0byBpdC4gVGhpcyBtb2RlIHN1cHBvcnRzIGR5bmFtaWMgUFMgYnkgc2ltcGx5Ci0gKiBlbmFibGluZy9kaXNhYmxpbmcgUFMuCisgKiBGaXJzdCwgaXQgY2FuIHN1cHBvcnQgaGFyZHdhcmUgdGhhdCBoYW5kbGVzIGFsbCBwb3dlcnNhdmluZyBieSBpdHNlbGYsCisgKiBzdWNoIGhhcmR3YXJlIHNob3VsZCBzaW1wbHkgc2V0IHRoZSAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIGhhcmR3YXJlCisgKiBmbGFnLiBJbiB0aGF0IGNhc2UsIGl0IHdpbGwgYmUgdG9sZCBhYm91dCB0aGUgZGVzaXJlZCBwb3dlcnNhdmUgbW9kZQorICogd2l0aCB0aGUgJUlFRUU4MDIxMV9DT05GX1BTIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBhc3NvY2lhdGlvbiBzdGF0dXMuCisgKiBUaGUgaGFyZHdhcmUgbXVzdCB0YWtlIGNhcmUgb2Ygc2VuZGluZyBudWxsZnVuYyBmcmFtZXMgd2hlbiBuZWNlc3NhcnksCisgKiBpLmUuIHdoZW4gZW50ZXJpbmcgYW5kIGxlYXZpbmcgcG93ZXJzYXZlIG1vZGUuIFRoZSBoYXJkd2FyZSBpcyByZXF1aXJlZAorICogdG8gbG9vayBhdCB0aGUgQUlEIGluIGJlYWNvbnMgYW5kIHNpZ25hbCB0byB0aGUgQVAgdGhhdCBpdCB3b2tlIHVwIHdoZW4KKyAqIGl0IGZpbmRzIHRyYWZmaWMgZGlyZWN0ZWQgdG8gaXQuCiAgKgotICogQWRkaXRpb25hbGx5LCBzdWNoIGhhcmR3YXJlIG1heSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUwotICogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGl0IGNhbiBzdXBwb3J0IGR5bmFtaWMgUFMgbW9kZSBpdHNlbGYgKHNlZSBiZWxvdykuCisgKiAlSUVFRTgwMjExX0NPTkZfUFMgZmxhZyBlbmFibGVkIG1lYW5zIHRoYXQgdGhlIHBvd2Vyc2F2ZSBtb2RlIGRlZmluZWQgaW4KKyAqIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxMS4yIGlzIGVuYWJsZWQuIFRoaXMgaXMgbm90IHRvIGJlIGNvbmZ1c2VkCisgKiB3aXRoIGhhcmR3YXJlIHdha2V1cCBhbmQgc2xlZXAgc3RhdGVzLiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHdha2luZworICogdXAgdGhlIGhhcmR3YXJlIGJlZm9yZSBpc3N1ZWluZyBjb21tYW5kcyB0byB0aGUgaGFyZHdhcmUgYW5kIHB1dHRpbmcgaXQKKyAqIGJhY2sgdG8gc2xlZXAgYXQgYXBwcm9yaWF0ZSB0aW1lcy4KKyAqCisgKiBXaGVuIFBTIGlzIGVuYWJsZWQsIGhhcmR3YXJlIG5lZWRzIHRvIHdha2V1cCBmb3IgYmVhY29ucyBhbmQgcmVjZWl2ZSB0aGUKKyAqIGJ1ZmZlcmVkIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzIGFmdGVyIHRoZSBiZWFjb24uIEFsc28gaXQgbXVzdCBiZQorICogcG9zc2libGUgdG8gc2VuZCBmcmFtZXMgYW5kIHJlY2VpdmUgdGhlIGFja25vd2xlZG1lbnQgZnJhbWUuCiAgKgogICogT3RoZXIgaGFyZHdhcmUgZGVzaWducyBjYW5ub3Qgc2VuZCBudWxsZnVuYyBmcmFtZXMgYnkgdGhlbXNlbHZlcyBhbmQgYWxzbwogICogbmVlZCBzb2Z0d2FyZSBzdXBwb3J0IGZvciBwYXJzaW5nIHRoZSBUSU0gYml0bWFwLiBUaGlzIGlzIGFsc28gc3VwcG9ydGVkCkBAIC0xMTQwLDE0ICsxMTc4LDM1IEBACiAgKiAlSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGZsYWdzLiBUaGUgaGFyZHdhcmUgaXMgb2YgY291cnNlIHN0aWxsCiAgKiByZXF1aXJlZCB0byBwYXNzIHVwIGJlYWNvbnMuIFRoZSBoYXJkd2FyZSBpcyBzdGlsbCByZXF1aXJlZCB0byBoYW5kbGUKICAqIHdha2luZyB1cCBmb3IgbXVsdGljYXN0IHRyYWZmaWM7IGlmIGl0IGNhbm5vdCB0aGUgZHJpdmVyIG11c3QgaGFuZGxlIHRoYXQKLSAqIGFzIGJlc3QgYXMgaXQgY2FuLCBtYWM4MDIxMSBpcyB0b28gc2xvdy4KKyAqIGFzIGJlc3QgYXMgaXQgY2FuLCBtYWM4MDIxMSBpcyB0b28gc2xvdyB0byBkbyB0aGF0LgogICoKLSAqIER5bmFtaWMgcG93ZXJzYXZlIG1vZGUgaXMgYW4gZXh0ZW5zaW9uIHRvIG5vcm1hbCBwb3dlcnNhdmUgbW9kZSBpbiB3aGljaAotICogdGhlIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcKLSAqIGEgZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkCi0gKiB0byB0aGUgbmV4dCB3YWtldXAuIFRoaXMgY2FuIGVpdGhlciBiZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIGluIHdoaWNoIGNhc2UKLSAqIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9vayBhdCB0aGUgQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uCi0gKiB2YWx1ZSwgb3IgYnkgdGhlIHN0YWNrIGlmIGFsbCBudWxsZnVuYyBoYW5kbGluZyBpcyBpbiB0aGUgc3RhY2suCisgKiBEeW5hbWljIHBvd2Vyc2F2ZSBpcyBhbiBleHRlbnNpb24gdG8gbm9ybWFsIHBvd2Vyc2F2ZSBpbiB3aGljaCB0aGUKKyAqIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcgYQorICogZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkIHRvCisgKiB0aGUgbmV4dCB3YWtldXAuIEl0J3MgY29tcHJvbWlzZSBvZiBnZXR0aW5nIGdvb2QgZW5vdWdoIGxhdGVuY3kgd2hlbgorICogdGhlcmUncyBkYXRhIHRyYWZmaWMgYW5kIHN0aWxsIHNhdmluZyBzaWduaWZpY2FudGx5IHBvd2VyIGluIGlkbGUKKyAqIHBlcmlvZHMuCisgKgorICogRHluYW1pYyBwb3dlcnNhdmUgaXMgc3VwcG9ydGVkIGJ5IHNpbXBseSBtYWM4MDIxMSBlbmFibGluZyBhbmQgZGlzYWJsaW5nCisgKiBQUyBiYXNlZCBvbiB0cmFmZmljLiBEcml2ZXIgbmVlZHMgdG8gb25seSBzZXQgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUworICogZmxhZyBhbmQgbWFjODAyMTEgd2lsbCBoYW5kbGUgZXZlcnl0aGluZyBhdXRvbWF0aWNhbGx5LiBBZGRpdGlvbmFsbHksCisgKiBoYXJkd2FyZSBoYXZpbmcgc3VwcG9ydCBmb3IgdGhlIGR5bmFtaWMgUFMgZmVhdHVyZSBtYXkgc2V0IHRoZQorICogJUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCBjYW4gc3VwcG9ydAorICogZHluYW1pYyBQUyBtb2RlIGl0c2VsZi4gVGhlIGRyaXZlciBuZWVkcyB0byBsb29rIGF0IHRoZQorICogQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHZhbHVlIGFuZCB1c2UgaXQgdGhhdCB2YWx1ZQorICogd2hlbmV2ZXIgJUlFRUU4MDIxMV9DT05GX1BTIGlzIHNldC4gSW4gdGhpcyBjYXNlIG1hYzgwMjExIHdpbGwgZGlzYWJsZQorICogZHluYW1pYyBQUyBmZWF0dXJlIGluIHN0YWNrIGFuZCB3aWxsIGp1c3Qga2VlcCAlSUVFRTgwMjExX0NPTkZfUFMKKyAqIGVuYWJsZWQgd2hlbmV2ZXIgdXNlciBoYXMgZW5hYmxlZCBwb3dlcnNhdmUuCisgKgorICogRHJpdmVyIGluZm9ybXMgVS1BUFNEIGNsaWVudCBzdXBwb3J0IGJ5IGVuYWJsaW5nCisgKiAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEIGZsYWcuIFRoZSBtb2RlIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUKKyAqIHVhcHNkIHBhcmFtYXRlciBpbiBjb25mX3R4KCkgb3BlcmF0aW9uLiBIYXJkd2FyZSBuZWVkcyB0byBzZW5kIHRoZSBRb1MKKyAqIE51bGxmdW5jIGZyYW1lcyBhbmQgc3RheSBhd2FrZSB1bnRpbCB0aGUgc2VydmljZSBwZXJpb2QgaGFzIGVuZGVkLiBUbworICogdXRpbGl6ZSBVLUFQU0QsIGR5bmFtaWMgcG93ZXJzYXZlIGlzIGRpc2FibGVkIGZvciB2b2lwIEFDIGFuZCBhbGwgZnJhbWVzCisgKiBmcm9tIHRoYXQgQUMgYXJlIHRyYW5zbWl0dGVkIHdpdGggcG93ZXJzYXZlIGVuYWJsZWQuCisgKgorICogTm90ZTogVS1BUFNEIGNsaWVudCBtb2RlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGgKKyAqICVJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0suCiAgKi8KIAogLyoqCkBAIC0xMjExLDYgKzEyNzAsMzEgQEAKICAqLwogCiAvKioKKyAqIERPQzogU3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZQorICoKKyAqIFNNUFMgKFNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2VyIHNhdmUpIGlzIGEgbWVjaGFuaXNtIHRvIGNvbnNlcnZlCisgKiBwb3dlciBpbiBhbiA4MDIuMTFuIGltcGxlbWVudGF0aW9uLiBGb3IgZGV0YWlscyBvbiB0aGUgbWVjaGFuaXNtCisgKiBhbmQgcmF0aW9uYWxlLCBwbGVhc2UgcmVmZXIgdG8gODAyLjExIChhcyBhbWVuZGVkIGJ5IDgwMi4xMW4tMjAwOSkKKyAqICIxMS4yLjMgU00gcG93ZXIgc2F2ZSIuCisgKgorICogVGhlIG1hYzgwMjExIGltcGxlbWVudGF0aW9uIGlzIGNhcGFibGUgb2Ygc2VuZGluZyBhY3Rpb24gZnJhbWVzCisgKiB0byB1cGRhdGUgdGhlIEFQIGFib3V0IHRoZSBzdGF0aW9uJ3MgU01QUyBtb2RlLCBhbmQgd2lsbCBpbnN0cnVjdAorICogdGhlIGRyaXZlciB0byBlbnRlciB0aGUgc3BlY2lmaWMgbW9kZS4gSXQgd2lsbCBhbHNvIGFubm91bmNlIHRoZQorICogcmVxdWVzdGVkIFNNUFMgbW9kZSBkdXJpbmcgdGhlIGFzc29jaWF0aW9uIGhhbmRzaGFrZS4gSGFyZHdhcmUKKyAqIHN1cHBvcnQgZm9yIHRoaXMgZmVhdHVyZSBpcyByZXF1aXJlZCwgYW5kIGNhbiBiZSBpbmRpY2F0ZWQgYnkKKyAqIGhhcmR3YXJlIGZsYWdzLgorICoKKyAqIFRoZSBkZWZhdWx0IG1vZGUgd2lsbCBiZSAiYXV0b21hdGljIiwgd2hpY2ggbmw4MDIxMS9jZmc4MDIxMQorICogZGVmaW5lcyB0byBiZSBkeW5hbWljIFNNUFMgaW4gKHJlZ3VsYXIpIHBvd2Vyc2F2ZSwgYW5kIFNNUFMKKyAqIHR1cm5lZCBvZmYgb3RoZXJ3aXNlLgorICoKKyAqIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCB0aGUgZHJpdmVyIG11c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZQorICogaGFyZHdhcmUgc3VwcG9ydCBmbGFncywgYW5kIGhhbmRsZSB0aGUgU01QUyBmbGFnIHRvIHRoZSBjb25maWcoKQorICogb3BlcmF0aW9uLiBJdCB3aWxsIHRoZW4gd2l0aCB0aGlzIG1lY2hhbmlzbSBiZSBpbnN0cnVjdGVkIHRvCisgKiBlbnRlciB0aGUgcmVxdWVzdGVkIFNNUFMgbW9kZSB3aGlsZSBhc3NvY2lhdGVkIHRvIGFuIEhUIEFQLgorICovCisKKy8qKgogICogRE9DOiBGcmFtZSBmaWx0ZXJpbmcKICAqCiAgKiBtYWM4MDIxMSByZXF1aXJlcyB0byBzZWUgbWFueSBtYW5hZ2VtZW50IGZyYW1lcyBmb3IgcHJvcGVyCkBAIC0xMzQ3LDcgKzE0MzEsNyBAQAogICoJV2hlbiB0aGUgZGV2aWNlIGlzIHN0YXJ0ZWQgaXQgc2hvdWxkIG5vdCBoYXZlIGEgTUFDIGFkZHJlc3MKICAqCXRvIGF2b2lkIGFja25vd2xlZGdpbmcgZnJhbWVzIGJlZm9yZSBhIG5vbi1tb25pdG9yIGRldmljZQogICoJaXMgYWRkZWQuCi0gKglNdXN0IGJlIGltcGxlbWVudGVkLgorICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBzdG9wOiBDYWxsZWQgYWZ0ZXIgbGFzdCBuZXRkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIGhhcmR3YXJlCiAgKglpcyBkaXNhYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvZmYgdGhlIGhhcmR3YXJlIChhdCBsZWFzdApAQCAtMTM1NSw3ICsxNDM5LDcgQEAKICAqCU1heSBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgYWRkX2ludGVyZmFjZSBpZiB0aGF0IHJlamVjdHMKICAqCWFuIGludGVyZmFjZS4gSWYgeW91IGFkZGVkIGFueSB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZQogICoJeW91IHNob3VsZCBlbnN1cmUgdG8gY2FuY2VsIGl0IG9uIHRoaXMgY2FsbGJhY2suCi0gKglNdXN0IGJlIGltcGxlbWVudGVkLgorICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBhZGRfaW50ZXJmYWNlOiBDYWxsZWQgd2hlbiBhIG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUgaXMKICAqCWVuYWJsZWQuIEJlY2F1c2UgaXQgaXMgbm90IGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlIGRldmljZXMsIEBzdGFydApAQCAtMTM2NSw3ICsxNDQ5LDcgQEAKICAqCWludGVyZmFjZSBpcyBnaXZlbiBpbiB0aGUgY29uZiBwYXJhbWV0ZXIuCiAgKglUaGUgY2FsbGJhY2sgbWF5IHJlZnVzZSB0byBhZGQgYW4gaW50ZXJmYWNlIGJ5IHJldHVybmluZyBhCiAgKgluZWdhdGl2ZSBlcnJvciBjb2RlICh3aGljaCB3aWxsIGJlIHNlZW4gaW4gdXNlcnNwYWNlLikKLSAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCisgKglNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCiAgKgogICogQHJlbW92ZV9pbnRlcmZhY2U6IE5vdGlmaWVzIGEgZHJpdmVyIHRoYXQgYW4gaW50ZXJmYWNlIGlzIGdvaW5nIGRvd24uCiAgKglUaGUgQHN0b3AgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIHRoaXMgaWYgaXQgaXMgdGhlIGxhc3QgaW50ZXJmYWNlCkBAIC0xMzc0LDE5ICsxNDU4LDIwIEBACiAgKgltdXN0IGJlIGNsZWFyZWQgc28gdGhlIGRldmljZSBubyBsb25nZXIgYWNrbm93bGVkZ2VzIHBhY2tldHMsCiAgKgl0aGUgbWFjX2FkZHIgbWVtYmVyIG9mIHRoZSBjb25mIHN0cnVjdHVyZSBpcywgaG93ZXZlciwgc2V0IHRvIHRoZQogICoJTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBnb2luZyBhd2F5LgotICoJSGVuY2UsIHRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZC4KKyAqCUhlbmNlLCB0aGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQuIEl0IGNhbiBzbGVlcC4KICAqCiAgKiBAY29uZmlnOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzLiBJRUVFIDgwMi4xMSBjb2RlIGNhbGxzIHRoaXMKICAqCWZ1bmN0aW9uIHRvIGNoYW5nZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBlLmcuLCBjaGFubmVsLgogICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgZmFpbCBidXQgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKLSAqCWlmIGl0IGRvZXMuCisgKglpZiBpdCBkb2VzLiBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBic3NfaW5mb19jaGFuZ2VkOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gQlNTCiAgKglwYXJhbWV0ZXJzIHRoYXQgbWF5IHZhcnkgZHVyaW5nIEJTUydzIGxpZmVzcGFuLCBhbmQgbWF5IGFmZmVjdCBsb3cKICAqCWxldmVsIGRyaXZlciAoZS5nLiBhc3NvYy9kaXNhc3NvYyBzdGF0dXMsIGVycCBwYXJhbWV0ZXJzKS4KICAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG5vIEJTUyBoYXMgYmVlbiBzZXQsIHVubGVzcwogICoJZm9yIGFzc29jaWF0aW9uIGluZGljYXRpb24uIFRoZSBAY2hhbmdlZCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoaWNoCi0gKglvZiB0aGUgYnNzIHBhcmFtZXRlcnMgaGFzIGNoYW5nZWQgd2hlbiBhIGNhbGwgaXMgbWFkZS4KKyAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLiBUaGUgY2FsbGJhY2sKKyAqCWNhbiBzbGVlcC4KICAqCiAgKiBAcHJlcGFyZV9tdWx0aWNhc3Q6IFByZXBhcmUgZm9yIG11bHRpY2FzdCBmaWx0ZXIgY29uZmlndXJhdGlvbi4KICAqCVRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHBhc3NlZApAQCAtMTM5NCwyMCArMTQ3OSwyMiBAQAogICoKICAqIEBjb25maWd1cmVfZmlsdGVyOiBDb25maWd1cmUgdGhlIGRldmljZSdzIFJYIGZpbHRlci4KICAqCVNlZSB0aGUgc2VjdGlvbiAiRnJhbWUgZmlsdGVyaW5nIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCVRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZC4KKyAqCVRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBzZXRfdGltOiBTZXQgVElNIGJpdC4gbWFjODAyMTEgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aGVuIGEgVElNIGJpdAogICogCW11c3QgYmUgc2V0IG9yIGNsZWFyZWQgZm9yIGEgZ2l2ZW4gU1RBLiBNdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAc2V0X2tleTogU2VlIHRoZSBzZWN0aW9uICJIYXJkd2FyZSBjcnlwdG8gYWNjZWxlcmF0aW9uIgotICoJVGhpcyBjYWxsYmFjayBjYW4gc2xlZXAsIGFuZCBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIGFkZF9pbnRlcmZhY2UKLSAqCWFuZCByZW1vdmVfaW50ZXJmYWNlIGNhbGxzLCBpLmUuIHdoaWxlIHRoZSBnaXZlbiB2aXJ0dWFsIGludGVyZmFjZQorICoJVGhpcyBjYWxsYmFjayBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIGFkZF9pbnRlcmZhY2UgYW5kCisgKglyZW1vdmVfaW50ZXJmYWNlIGNhbGxzLCBpLmUuIHdoaWxlIHRoZSBnaXZlbiB2aXJ0dWFsIGludGVyZmFjZQogICoJaXMgZW5hYmxlZC4KICAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSBrZXkgY2FuJ3QgYmUgYWRkZWQuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEB1cGRhdGVfdGtpcF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqIAlUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIFJ4LiBDYWxsZWQgZm9yIGRyaXZlcnMKICAqIAl3aGljaCBzZXQgSUVFRTgwMjExX0tFWV9GTEFHX1RLSVBfUkVRX1JYX1AxX0tFWS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAaHdfc2NhbjogQXNrIHRoZSBoYXJkd2FyZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5lZWQgdG8gc3RhcnQKICAqCXRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgaW4gc3RhY2suIFRoZSBzY2FuIG11c3QgaG9ub3VyIHRoZSBjaGFubmVsCkBAIC0xNDIxLDUzICsxNTA4LDY0IEBACiAgKglXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlIGNhbGxlZDsKICAqCW5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaCBkdWUgdG8KICAqCWFueSBlcnJvciB1bmxlc3MgdGhpcyBjYWxsYmFjayByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KICAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgotICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYSBzb2Z0d2FyZSBzY2FuCi0gKglmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYQorICoJc29mdHdhcmUgc2NhbiBmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkCisgKgl0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgogICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBnZXRfdGtpcF9zZXE6IElmIHlvdXIgZGV2aWNlIGltcGxlbWVudHMgVEtJUCBlbmNyeXB0aW9uIGluIGhhcmR3YXJlIHRoaXMKICAqCWNhbGxiYWNrIHNob3VsZCBiZSBwcm92aWRlZCB0byByZWFkIHRoZSBUS0lQIHRyYW5zbWl0IElWcyAoYm90aCBJVjMyCiAgKglhbmQgSVYxNikgZm9yIHRoZSBnaXZlbiBrZXkgZnJvbSBoYXJkd2FyZS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAc2V0X3J0c190aHJlc2hvbGQ6IENvbmZpZ3VyYXRpb24gb2YgUlRTIHRocmVzaG9sZCAoaWYgZGV2aWNlIG5lZWRzIGl0KQorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCi0gKiBAc3RhX25vdGlmeTogTm90aWZpZXMgbG93IGxldmVsIGRyaXZlciBhYm91dCBhZGRpdGlvbiwgcmVtb3ZhbCBvciBwb3dlcgotICoJc3RhdGUgdHJhbnNpdGlvbiBvZiBhbiBhc3NvY2lhdGVkIHN0YXRpb24sIEFQLCAgSUJTUy9XRFMvbWVzaCBwZWVyIGV0Yy4KLSAqCU11c3QgYmUgYXRvbWljLgorICogQHN0YV9hZGQ6IE5vdGlmaWVzIGxvdyBsZXZlbCBkcml2ZXIgYWJvdXQgYWRkaXRpb24gb2YgYW4gYXNzb2NpYXRlZCBzdGF0aW9uLAorICoJQVAsIElCU1MvV0RTL21lc2ggcGVlciBldGMuIFRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzdGFfcmVtb3ZlOiBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFib3V0IHJlbW92YWwgb2YgYW4gYXNzb2NpYXRlZAorICoJc3RhdGlvbiwgQVAsIElCU1MvV0RTL21lc2ggcGVlciBldGMuIFRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzdGFfbm90aWZ5OiBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFib3V0IHBvd2VyIHN0YXRlIHRyYW5zaXRpb24gb2YgYW4KKyAqCWFzc29jaWF0ZWQgc3RhdGlvbiwgQVAsICBJQlNTL1dEUy9tZXNoIHBlZXIgZXRjLiBNdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAY29uZl90eDogQ29uZmlndXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3dfbWF4KSwKICAqCWJ1cnN0aW5nKSBmb3IgYSBoYXJkd2FyZSBUWCBxdWV1ZS4KICAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKgotICogQGdldF90eF9zdGF0czogR2V0IHN0YXRpc3RpY3Mgb2YgdGhlIGN1cnJlbnQgVFggcXVldWUgc3RhdHVzLiBUaGlzIGlzIHVzZWQKLSAqCXRvIGdldCBudW1iZXIgb2YgY3VycmVudGx5IHF1ZXVlZCBwYWNrZXRzIChxdWV1ZSBsZW5ndGgpLCBtYXhpbXVtIHF1ZXVlCi0gKglzaXplIChsaW1pdCksIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IHVzaW5nIGVhY2ggVFggcXVldWUKLSAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMKLSAqCWl0ZW1zLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAZ2V0X3RzZjogR2V0IHRoZSBjdXJyZW50IFRTRiB0aW1lciB2YWx1ZSBmcm9tIGZpcm13YXJlL2hhcmR3YXJlLiBDdXJyZW50bHksCiAgKgl0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIEJTU0lEIG1lcmdpbmcgYW5kIGRlYnVnZ2luZy4gSXMgbm90IGEKICAqCXJlcXVpcmVkIGZ1bmN0aW9uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAc2V0X3RzZjogU2V0IHRoZSBUU0YgdGltZXIgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgZmlybXdhcmUvaGFyZHdhcmUuCiAgKiAgICAgIEN1cnJlbnRseSwgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcuIElzIG5vdCBhCiAgKglyZXF1aXJlZCBmdW5jdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQHJlc2V0X3RzZjogUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3luY2hyb25pemUKICAqCXdpdGggb3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBUaGlzCiAgKglmdW5jdGlvbiBpcyBvcHRpb25hbCBpZiB0aGUgZmlybXdhcmUvaGFyZHdhcmUgdGFrZXMgZnVsbCBjYXJlIG9mCiAgKglUU0Ygc3luY2hyb25pemF0aW9uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCiAgKglSZXR1cm5zIG5vbi16ZXJvIGlmIHRoaXMgZGV2aWNlIHNlbnQgdGhlIGxhc3QgYmVhY29uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAYW1wZHVfYWN0aW9uOiBQZXJmb3JtIGEgY2VydGFpbiBBLU1QRFUgYWN0aW9uCiAgKiAJVGhlIFJBL1RJRCBjb21iaW5hdGlvbiBkZXRlcm1pbmVzIHRoZSBkZXN0aW5hdGlvbiBhbmQgVElEIHdlIHdhbnQKQEAgLTE0NzYsMjEgKzE1NzQsMzIgQEAKICAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gTm90aWNlCiAgKiAJdGhhdCBUWC9SWF9TVE9QIGNhbiBwYXNzIE5VTEwgZm9yIHRoaXMgcGFyYW1ldGVyLgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAcmZraWxsX3BvbGw6IFBvbGwgcmZraWxsIGhhcmR3YXJlIHN0YXRlLiBJZiB5b3UgbmVlZCB0aGlzLCB5b3UgYWxzbwogICoJbmVlZCB0byBzZXQgd2lwaHktPnJma2lsbF9wb2xsIHRvICV0cnVlIGJlZm9yZSByZWdpc3RyYXRpb24sCiAgKglhbmQgbmVlZCB0byBjYWxsIHdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoKSBpbiB0aGUgY2FsbGJhY2suCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzZXRfY292ZXJhZ2VfY2xhc3M6IFNldCBzbG90IHRpbWUgZm9yIGdpdmVuIGNvdmVyYWdlIGNsYXNzIGFzIHNwZWNpZmllZAorICoJaW4gSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC42IGFuZCBtb2RpZnkgQUNLIHRpbWVvdXQKKyAqCWFjY29yZGluZ2x5LiBUaGlzIGNhbGxiYWNrIGlzIG5vdCByZXF1aXJlZCBhbmQgbWF5IHNsZWVwLgogICoKICAqIEB0ZXN0bW9kZV9jbWQ6IEltcGxlbWVudCBhIGNmZzgwMjExIHRlc3QgbW9kZSBjb21tYW5kLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KKyAqCisgKiBAZmx1c2g6IEZsdXNoIGFsbCBwZW5kaW5nIGZyYW1lcyBmcm9tIHRoZSBoYXJkd2FyZSBxdWV1ZSwgbWFraW5nIHN1cmUKKyAqCXRoYXQgdGhlIGhhcmR3YXJlIHF1ZXVlcyBhcmUgZW1wdHkuIElmIHRoZSBwYXJhbWV0ZXIgQGRyb3AgaXMgc2V0CisgKgl0byAldHJ1ZSwgcGVuZGluZyBmcmFtZXMgbWF5IGJlIGRyb3BwZWQuIFRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogCWludCAoKnN0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCphZGRfaW50ZXJmYWNlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAl2b2lkICgqcmVtb3ZlX2ludGVyZmFjZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAJaW50ICgqY29uZmlnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwogCXZvaWQgKCpic3NfaW5mb19jaGFuZ2VkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKQEAgLTE1MDgsOCArMTYxNywxMCBAQAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAJdm9pZCAoKnVwZGF0ZV90a2lwX2tleSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLCBjb25zdCB1OCAqYWRkcmVzcywKLQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7CisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KTsKIAlpbnQgKCpod19zY2FuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiAJdm9pZCAoKnN3X3NjYW5fc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTE1MTksMTIgKzE2MzAsMTQgQEAKIAl2b2lkICgqZ2V0X3RraXBfc2VxKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfa2V5X2lkeCwKIAkJCSAgICAgdTMyICppdjMyLCB1MTYgKml2MTYpOwogCWludCAoKnNldF9ydHNfdGhyZXNob2xkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsKKwlpbnQgKCpzdGFfYWRkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOworCWludCAoKnN0YV9yZW1vdmUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKIAl2b2lkICgqc3RhX25vdGlmeSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQllbnVtIHN0YV9ub3RpZnlfY21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKIAlpbnQgKCpjb25mX3R4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7Ci0JaW50ICgqZ2V0X3R4X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiAJdTY0ICgqZ2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCpzZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiAJdm9pZCAoKnJlc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTUzNSw5ICsxNjQ4LDExIEBACiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pOwogCiAJdm9pZCAoKnJma2lsbF9wb2xsKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNldF9jb3ZlcmFnZV9jbGFzcykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKTsKICNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQogCWludCAoKnRlc3Rtb2RlX2NtZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogI2VuZGlmCisJdm9pZCAoKmZsdXNoKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKIH07CiAKIC8qKgpAQCAtMTc3Nyw3ICsxODkyLDcgQEAKIC8qKgogICogaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIC0gYmVhY29uIGdlbmVyYXRpb24gZnVuY3Rpb24KICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQHRpbV9vZmZzZXQ6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBvZmZzZXQuCiAgKglTZXQgdG8gMCBpZiBpbnZhbGlkIChpbiBub24tQVAgbW9kZXMpLgogICogQHRpbV9sZW5ndGg6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBsZW5ndGgsCkBAIC0xODA1LDcgKzE5MjAsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqCiAgKiBTZWUgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKCkuCiAgKi8KQEAgLTE4MTYsOSArMTkzMSw1NiBAQAogfQogCiAvKioKKyAqIGllZWU4MDIxMV9wc3BvbGxfZ2V0IC0gcmV0cmlldmUgYSBQUyBQb2xsIHRlbXBsYXRlCisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCisgKgorICogQ3JlYXRlcyBhIFBTIFBvbGwgYSB0ZW1wbGF0ZSB3aGljaCBjYW4sIGZvciBleGFtcGxlLCB1cGxvYWRlZCB0bworICogaGFyZHdhcmUuIFRoZSB0ZW1wbGF0ZSBtdXN0IGJlIHVwZGF0ZWQgYWZ0ZXIgYXNzb2NpYXRpb24gc28gdGhhdCBjb3JyZWN0CisgKiBBSUQsIEJTU0lEIGFuZCBNQUMgYWRkcmVzcyBpcyB1c2VkLgorICoKKyAqIE5vdGU6IENhbGxlciAob3IgaGFyZHdhcmUpIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZQorICogJklFRUU4MDIxMV9GQ1RMX1BNIGJpdC4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wc3BvbGxfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisKKy8qKgorICogaWVlZTgwMjExX251bGxmdW5jX2dldCAtIHJldHJpZXZlIGEgbnVsbGZ1bmMgdGVtcGxhdGUKKyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KKyAqCisgKiBDcmVhdGVzIGEgTnVsbGZ1bmMgdGVtcGxhdGUgd2hpY2ggY2FuLCBmb3IgZXhhbXBsZSwgdXBsb2FkZWQgdG8KKyAqIGhhcmR3YXJlLiBUaGUgdGVtcGxhdGUgbXVzdCBiZSB1cGRhdGVkIGFmdGVyIGFzc29jaWF0aW9uIHNvIHRoYXQgY29ycmVjdAorICogQlNTSUQgYW5kIGFkZHJlc3MgaXMgdXNlZC4KKyAqCisgKiBOb3RlOiBDYWxsZXIgKG9yIGhhcmR3YXJlKSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUKKyAqICZJRUVFODAyMTFfRkNUTF9QTSBiaXQgYXMgd2VsbCBhcyBEdXJhdGlvbiBhbmQgU2VxdWVuY2UgQ29udHJvbCBmaWVsZHMuCisgKi8KK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKKworLyoqCisgKiBpZWVlODAyMTFfcHJvYmVyZXFfZ2V0IC0gcmV0cmlldmUgYSBQcm9iZSBSZXF1ZXN0IHRlbXBsYXRlCisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCisgKiBAc3NpZDogU1NJRCBidWZmZXIKKyAqIEBzc2lkX2xlbjogbGVuZ3RoIG9mIFNTSUQKKyAqIEBpZTogYnVmZmVyIGNvbnRhaW5pbmcgYWxsIElFcyBleGNlcHQgU1NJRCBmb3IgdGhlIHRlbXBsYXRlCisgKiBAaWVfbGVuOiBsZW5ndGggb2YgdGhlIElFIGJ1ZmZlcgorICoKKyAqIENyZWF0ZXMgYSBQcm9iZSBSZXF1ZXN0IHRlbXBsYXRlIHdoaWNoIGNhbiwgZm9yIGV4YW1wbGUsIGJlIHVwbG9hZGVkIHRvCisgKiBoYXJkd2FyZS4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wcm9iZXJlcV9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbik7CisKKy8qKgogICogaWVlZTgwMjExX3J0c19nZXQgLSBSVFMgZnJhbWUgZ2VuZXJhdGlvbiBmdW5jdGlvbgogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWU6IHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBSVFMuCiAgKiBAZnJhbWVfbGVuOiB0aGUgZnJhbWUgbGVuZ3RoIChpbiBvY3RldHMpLgogICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIG9mIHRoZSBmcmFtZS4KQEAgLTE4MzcsNyArMTk5OSw3IEBACiAvKioKICAqIGllZWU4MDIxMV9ydHNfZHVyYXRpb24gLSBHZXQgdGhlIGR1cmF0aW9uIGZpZWxkIGZvciBhbiBSVFMgZnJhbWUKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQGZyYW1lX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUUy4KICAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCiAgKgpAQCAtMTg1Miw3ICsyMDE0LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQgLSBDVFMtdG8tc2VsZiBmcmFtZSBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqIEBmcmFtZTogcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIENUUy10by1zZWxmLgogICogQGZyYW1lX2xlbjogdGhlIGZyYW1lIGxlbmd0aCAoaW4gb2N0ZXRzKS4KICAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCkBAIC0xODcyLDcgKzIwMzQsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uIC0gR2V0IHRoZSBkdXJhdGlvbiBmaWVsZCBmb3IgYSBDVFMtdG8tc2VsZiBmcmFtZQogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWVfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSB0aGF0IGlzIGdvaW5nIHRvIGJlIHByb3RlY3RlZCBieSB0aGUgQ1RTLXRvLXNlbGYuCiAgKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gb2YgdGhlIGZyYW1lLgogICoKQEAgLTE4ODgsNyArMjA1MCw3IEBACiAvKioKICAqIGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uIC0gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmaWVsZCBmb3IgYSBmcmFtZQogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWVfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZS4KICAqIEByYXRlOiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgZnJhbWUgaXMgZ29pbmcgdG8gYmUgdHJhbnNtaXR0ZWQuCiAgKgpAQCAtMTkwMyw3ICsyMDY1LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyAtIGFjY2Vzc2luZyBidWZmZXJlZCBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmcmFtZXMKICAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICoKICAqIEZ1bmN0aW9uIGZvciBhY2Nlc3NpbmcgYnVmZmVyZWQgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgZnJhbWVzLiBJZgogICogaGFyZHdhcmUvZmlybXdhcmUgZG9lcyBub3QgaW1wbGVtZW50IGJ1ZmZlcmluZyBvZiBicm9hZGNhc3QvbXVsdGljYXN0CkBAIC0yMDcxLDcgKzIyMzMsNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gYWdncmVnYXRlLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYKKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2sKICAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCiAgKiBAdGlkOiB0aGUgVElEIHRvIEJBIG9uLgogICoKQEAgLTIwODIsNyArMjI0NCw3IEBACiAKIC8qKgogICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMTEwLDcgKzIyNzIsNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiIC0gbG93IGxldmVsIGRyaXZlciByZWFkeSB0byBzdG9wIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIGRlc2lyZWQgVElEIHRvIEJBIG9uLgogICoKQEAgLTIxMjEsNyArMjI4Myw3IEBACiAKIC8qKgogICogaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjawogICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudC4KICAqIEB0aWQ6IHRoZSBkZXNpcmVkIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMjAwLDcgKzIzNjIsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2xvc3MgLSBpbmZvcm0gaGFyZHdhcmUgZG9lcyBub3QgcmVjZWl2ZSBiZWFjb25zCiAgKgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICoKICAqIFdoZW4gYmVhY29uIGZpbHRlcmluZyBpcyBlbmFibGVkIHdpdGggSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVJJTkcgYW5kCiAgKiBJRUVFODAyMTFfQ09ORl9QUyBpcyBzZXQsIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5mb3JtIHdoZW5ldmVyIHRoZQpAQCAtMjIzNCw4ICsyMzk2LDEyIEBACiAgKiBAc2hvcnRfcHJlYW1ibGU6IHdoZXRoZXIgbWFjODAyMTEgd2lsbCByZXF1ZXN0IHNob3J0LXByZWFtYmxlIHRyYW5zbWlzc2lvbgogICoJaWYgdGhlIHNlbGVjdGVkIHJhdGUgc3VwcG9ydHMgaXQKICAqIEBtYXhfcmF0ZV9pZHg6IHVzZXItcmVxdWVzdGVkIG1heGltdW0gcmF0ZSAobm90IE1DUyBmb3Igbm93KQorICoJKGRlcHJlY2F0ZWQ7IHRoaXMgd2lsbCBiZSByZW1vdmVkIG9uY2UgZHJpdmVycyBnZXQgdXBkYXRlZCB0byB1c2UKKyAqCXJhdGVfaWR4X21hc2spCisgKiBAcmF0ZV9pZHhfbWFzazogdXNlci1yZXF1ZXN0ZWQgcmF0ZSBtYXNrIChub3QgTUNTIGZvciBub3cpCiAgKiBAc2tiOiB0aGUgc2tiIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCwgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24gaW4gaXQgbmVlZHMKICAqCXRvIGJlIGZpbGxlZCBpbgorICogQGFwOiB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgc2VudCBvdXQgaW4gQVAgbW9kZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CkBAIC0yMjQ1LDYgKzI0MTEsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSByZXBvcnRlZF9yYXRlOwogCWJvb2wgcnRzLCBzaG9ydF9wcmVhbWJsZTsKIAl1OCBtYXhfcmF0ZV9pZHg7CisJdTMyIHJhdGVfaWR4X21hc2s7CisJYm9vbCBhcDsKIH07CiAKIHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggYjAxNzMyMC4uZGExZDU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJ3bG9ja190CQlsb2NrOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfcmFuZDsKIAlzdHJ1Y3Qga21lbV9jYWNoZQkJKmttZW1fY2FjaGVwOwotCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCSpzdGF0czsKKwlzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljcwlfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IG5laWdoYm91cgkqKmhhc2hfYnVja2V0czsKIAl1bnNpZ25lZCBpbnQJCWhhc2hfbWFzazsKIAlfX3UzMgkJCWhhc2hfcm5kOwpAQCAtMjUxLDcgKzI1MSw2IEBACiAKIGV4dGVybiBpbnQJCQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCiAJCQkJCQkgICAgICBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCi0JCQkJCQkgICAgICBpbnQgcF9pZCwgaW50IHBkZXZfaWQsCiAJCQkJCQkgICAgICBjaGFyICpwX25hbWUsCiAJCQkJCQkgICAgICBwcm9jX2hhbmRsZXIgKnByb2NfaGFuZGxlcik7CiBleHRlcm4gdm9pZAkJCW5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZWlnaF9wYXJtcyAqcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggZjMwN2UxMy4uODJiN2JlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtODEsNiArODEsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKIAlzdHJ1Y3QgbmV0bnNfY3QJCWN0OwogI2VuZGlmCisJc3RydWN0IHNvY2sJCSpuZm5sOworCXN0cnVjdCBzb2NrCQkqbmZubF9zdGFzaDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YRlJNCiAJc3RydWN0IG5ldG5zX3hmcm0JeGZybTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCBhMDkwNGFkLi5iZGUwOTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC03MCw3ICs3MCw3IEBACiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcjsKIAogLyogTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgY2xhc3NlcyBkZWZpbmVkIGJ5IGhlbHBlcnMgKi8KLSNkZWZpbmUgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTCTMKKyNkZWZpbmUgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTCTQKIAogLyogbmZfY29ubiBmZWF0dXJlIGZvciBjb25uZWN0aW9ucyB0aGF0IGhhdmUgYSBoZWxwZXIgKi8KIHN0cnVjdCBuZl9jb25uX2hlbHAgewpAQCAtMTk4LDcgKzE5OCw4IEBACiBleHRlcm4gdm9pZCBuZl9jdF9mcmVlX2hhc2h0YWJsZSh2b2lkICpoYXNoLCBpbnQgdm1hbGxvY2VkLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgotX19uZl9jb25udHJhY2tfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKK19fbmZfY29ubnRyYWNrX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIAogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KHN0cnVjdCBuZl9jb25uICpjdCk7CiBleHRlcm4gdm9pZCBuZl9jdF9kZWxldGVfZnJvbV9saXN0cyhzdHJ1Y3QgbmZfY29ubiAqY3QpOwpAQCAtMjY3LDExICsyNjgsMTYgQEAKIG5mX2N0X2l0ZXJhdGVfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQsIGludCAoKml0ZXIpKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfZnJlZShzdHJ1Y3QgbmZfY29ubiAqY3QpOwogZXh0ZXJuIHN0cnVjdCBuZl9jb25uICoKLW5mX2Nvbm50cmFja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsCituZl9jb25udHJhY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKIAkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZywKIAkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVwbCwKIAkJICAgZ2ZwX3QgZ2ZwKTsKIAorc3RhdGljIGlubGluZSBpbnQgbmZfY3RfaXNfdGVtcGxhdGUoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiB0ZXN0X2JpdChJUFNfVEVNUExBVEVfQklULCAmY3QtPnN0YXR1cyk7Cit9CisKIC8qIEl0J3MgY29uZmlybWVkIGlmIGl0IGlzLCBvciBoYXMgYmVlbiBpbiB0aGUgaGFzaCB0YWJsZS4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2lzX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCmluZGV4IDVhNDQ5YjQuLmRmZmRlOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCkBAIC00OSw3ICs0OSw4IEBACiAKIC8qIEZpbmQgYSBjb25uZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgotbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIAogZXh0ZXJuIGludCBfX25mX2Nvbm50cmFja19jb25maXJtKHN0cnVjdCBza19idWZmICpza2IpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaAppbmRleCA0NzVmYWNjLi45NmJhNWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKQEAgLTEyLDI3ICsxMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CiAKLS8qIENvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnQgdHlwZXMgKi8KLWVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyB7Ci0JSVBDVF9ORVcJCT0gMCwJLyogbmV3IGNvbm50cmFjayAqLwotCUlQQ1RfUkVMQVRFRAkJPSAxLAkvKiByZWxhdGVkIGNvbm50cmFjayAqLwotCUlQQ1RfREVTVFJPWQkJPSAyLAkvKiBkZXN0cm95ZWQgY29ubnRyYWNrICovCi0JSVBDVF9TVEFUVVMJCT0gMywJLyogc3RhdHVzIGhhcyBjaGFuZ2VkICovCi0JSVBDVF9QUk9UT0lORk8JCT0gNCwJLyogcHJvdG9jb2wgaW5mb3JtYXRpb24gaGFzIGNoYW5nZWQgKi8KLQlJUENUX0hFTFBFUgkJPSA1LAkvKiBuZXcgaGVscGVyIGhhcyBiZWVuIHNldCAqLwotCUlQQ1RfTUFSSwkJPSA2LAkvKiBuZXcgbWFyayBoYXMgYmVlbiBzZXQgKi8KLQlJUENUX05BVFNFUUFESgkJPSA3LAkvKiBOQVQgaXMgZG9pbmcgc2VxdWVuY2UgYWRqdXN0bWVudCAqLwotCUlQQ1RfU0VDTUFSSwkJPSA4LAkvKiBuZXcgc2VjdXJpdHkgbWFyayBoYXMgYmVlbiBzZXQgKi8KLX07Ci0KLWVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgewotCUlQRVhQX05FVwkJPSAwLAkvKiBuZXcgZXhwZWN0YXRpb24gKi8KLX07Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlIHsKLQl1bnNpZ25lZCBsb25nIGNhY2hlOwkJLyogYml0b3BzIHdhbnQgbG9uZyAqLwotCXVuc2lnbmVkIGxvbmcgbWlzc2VkOwkJLyogbWlzc2VkIGV2ZW50cyAqLwotCXUzMiBwaWQ7CQkJLyogbmV0bGluayBwaWQgb2YgZGVzdHJveWVyICovCisJdW5zaWduZWQgbG9uZyBjYWNoZTsJLyogYml0b3BzIHdhbnQgbG9uZyAqLworCXVuc2lnbmVkIGxvbmcgbWlzc2VkOwkvKiBtaXNzZWQgZXZlbnRzICovCisJdTE2IGN0bWFzazsJCS8qIGJpdG1hc2sgb2YgY3QgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCAqLworCXUxNiBleHBtYXNrOwkJLyogYml0bWFzayBvZiBleHBlY3QgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCAqLworCXUzMiBwaWQ7CQkvKiBuZXRsaW5rIHBpZCBvZiBkZXN0cm95ZXIgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKgpAQCAtNDIsMTQgKzI3LDI0IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKgotbmZfY3RfZWNhY2hlX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApCituZl9jdF9lY2FjaGVfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIHUxNiBjdG1hc2ssIHUxNiBleHBtYXNrLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZTsKIAotCWlmICghbmV0LT5jdC5zeXNjdGxfZXZlbnRzKQorCWlmICghY3RtYXNrICYmICFleHBtYXNrICYmIG5ldC0+Y3Quc3lzY3RsX2V2ZW50cykgeworCQljdG1hc2sgPSB+MDsKKwkJZXhwbWFzayA9IH4wOworCX0KKwlpZiAoIWN0bWFzayAmJiAhZXhwbWFzaykKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0VDQUNIRSwgZ2ZwKTsKKwllID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0VDQUNIRSwgZ2ZwKTsKKwlpZiAoZSkgeworCQllLT5jdG1hc2sgID0gY3RtYXNrOworCQllLT5leHBtYXNrID0gZXhwbWFzazsKKwl9CisJcmV0dXJuIGU7CiB9OwogCiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMKQEAgLTgyLDYgKzc3LDkgQEAKIAlpZiAoZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwlpZiAoIShlLT5jdG1hc2sgJiAoMSA8PCBldmVudCkpKQorCQlyZXR1cm47CisKIAlzZXRfYml0KGV2ZW50LCAmZS0+Y2FjaGUpOwogfQogCkBAIC05Miw3ICs5MCw2IEBACiAJCQkgICAgICBpbnQgcmVwb3J0KQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAJc3RydWN0IG5mX2N0X2V2ZW50X25vdGlmaWVyICpub3RpZnk7CiAJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmU7CiAKQEAgLTEwMSw5ICs5OCw2IEBACiAJaWYgKG5vdGlmeSA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoIW5ldC0+Y3Quc3lzY3RsX2V2ZW50cykKLQkJZ290byBvdXRfdW5sb2NrOwotCiAJZSA9IG5mX2N0X2VjYWNoZV9maW5kKGN0KTsKIAlpZiAoZSA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMTcsNiArMTExLDkgQEAKIAkJLyogVGhpcyBpcyBhIHJlc2VudCBvZiBhIGRlc3Ryb3kgZXZlbnQ/IElmIHNvLCBza2lwIG1pc3NlZCAqLwogCQl1bnNpZ25lZCBsb25nIG1pc3NlZCA9IGUtPnBpZCA/IDAgOiBlLT5taXNzZWQ7CiAKKwkJaWYgKCEoKGV2ZW50bWFzayB8IG1pc3NlZCkgJiBlLT5jdG1hc2spKQorCQkJZ290byBvdXRfdW5sb2NrOworCiAJCXJldCA9IG5vdGlmeS0+ZmNuKGV2ZW50bWFzayB8IG1pc3NlZCwgJml0ZW0pOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCB8fCBtaXNzZWQpKSB7CiAJCQlzcGluX2xvY2tfYmgoJmN0LT5sb2NrKTsKQEAgLTE3MiwxOCArMTY5LDE5IEBACiAJCQkgIHUzMiBwaWQsCiAJCQkgIGludCByZXBvcnQpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfZXhwX25ldChleHApOwogCXN0cnVjdCBuZl9leHBfZXZlbnRfbm90aWZpZXIgKm5vdGlmeTsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlub3RpZnkgPSByY3VfZGVyZWZlcmVuY2UobmZfZXhwZWN0X2V2ZW50X2NiKTsKIAlpZiAobm90aWZ5ID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmICghbmV0LT5jdC5zeXNjdGxfZXZlbnRzKQorCWUgPSBuZl9jdF9lY2FjaGVfZmluZChleHAtPm1hc3Rlcik7CisJaWYgKGUgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JeworCWlmIChlLT5leHBtYXNrICYgKDEgPDwgZXZlbnQpKSB7CiAJCXN0cnVjdCBuZl9leHBfZXZlbnQgaXRlbSA9IHsKIAkJCS5leHAJPSBleHAsCiAJCQkucGlkCT0gcGlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKaW5kZXggOWEyYjljYi4uMTFlODE1MDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKQEAgLTU2LDE2ICs1NiwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5mX2N0X2V4cF9uZXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKLSNpZmRlZiBDT05GSUdfTkVUX05TCi0JcmV0dXJuIGV4cC0+bWFzdGVyLT5jdF9uZXQ7CS8qIGJ5IGRlZmluaXRpb24gKi8KLSNlbHNlCi0JcmV0dXJuICZpbml0X25ldDsKLSNlbmRpZgorCXJldHVybiBuZl9jdF9uZXQoZXhwLT5tYXN0ZXIpOwogfQogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgewogCXVuc2lnbmVkIGludAltYXhfZXhwZWN0ZWQ7CiAJdW5zaWduZWQgaW50CXRpbWVvdXQ7CisJY29uc3QgY2hhcgkqbmFtZTsKIH07CiAKICNkZWZpbmUgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQJMApAQCAtNzcsMTMgKzc0LDE2IEBACiB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfZmluaShzdHJ1Y3QgbmV0ICpuZXQpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1fX25mX2N0X2V4cGVjdF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworX19uZl9jdF9leHBlY3RfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1uZl9jdF9leHBlY3RfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CituZl9jdF9leHBlY3RfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1uZl9jdF9maW5kX2V4cGVjdGF0aW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworbmZfY3RfZmluZF9leHBlY3RhdGlvbihzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiB2b2lkIG5mX2N0X3VubGlua19leHBlY3Qoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CiB2b2lkIG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoc3RydWN0IG5mX2Nvbm4gKmN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oCmluZGV4IGUxOTJkYzEuLjJkMmExZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaApAQCAtOCw2ICs4LDcgQEAKIAlORl9DVF9FWFRfTkFULAogCU5GX0NUX0VYVF9BQ0NULAogCU5GX0NUX0VYVF9FQ0FDSEUsCisJTkZfQ1RfRVhUX1pPTkUsCiAJTkZfQ1RfRVhUX05VTSwKIH07CiAKQEAgLTE1LDYgKzE2LDcgQEAKICNkZWZpbmUgTkZfQ1RfRVhUX05BVF9UWVBFIHN0cnVjdCBuZl9jb25uX25hdAogI2RlZmluZSBORl9DVF9FWFRfQUNDVF9UWVBFIHN0cnVjdCBuZl9jb25uX2NvdW50ZXIKICNkZWZpbmUgTkZfQ1RfRVhUX0VDQUNIRV9UWVBFIHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlCisjZGVmaW5lIE5GX0NUX0VYVF9aT05FX1RZUEUgc3RydWN0IG5mX2Nvbm50cmFja196b25lCiAKIC8qIEV4dGVuc2lvbnM6IG9wdGlvbmFsIHN0dWZmIHdoaWNoIGlzbid0IHBlcm1hbmVudGx5IGluIHN0cnVjdC4gKi8KIHN0cnVjdCBuZl9jdF9leHQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKaW5kZXggZDAxNWRlOS4uMzJjMzA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCkBAIC00MCwxNCArNDAsMTggQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCi1fX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKTsKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKK25mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSk7CiAKIGV4dGVybiBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKTsKIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTsKIAotZXh0ZXJuIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCisJCQkJICAgICBnZnBfdCBmbGFncyk7CiAKIGV4dGVybiB2b2lkIG5mX2N0X2hlbHBlcl9kZXN0cm95KHN0cnVjdCBuZl9jb25uICpjdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKaW5kZXggY2E2ZGNmMy4uZTNkM2VlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKQEAgLTQ5LDggKzQ5LDggQEAKIAkvKiBDYWxsZWQgd2hlbiBhIGNvbm50cmFjayBlbnRyeSBpcyBkZXN0cm95ZWQgKi8KIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAotCWludCAoKmVycm9yKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKKwlpbnQgKCplcnJvcikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSk7CiAKIAkvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gUmV0dXJuIGxpa2Ugc2VxXyogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRlZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19aT05FU19ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfWk9ORVNfSAorCisjZGVmaW5lIE5GX0NUX0RFRkFVTFRfWk9ORQkwCisKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CisKK3N0cnVjdCBuZl9jb25udHJhY2tfem9uZSB7CisJdTE2CWlkOworfTsKKworc3RhdGljIGlubGluZSB1MTYgbmZfY3Rfem9uZShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCXN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqbmZfY3Rfem9uZTsKKwluZl9jdF96b25lID0gbmZfY3RfZXh0X2ZpbmQoY3QsIE5GX0NUX0VYVF9aT05FKTsKKwlpZiAobmZfY3Rfem9uZSkKKwkJcmV0dXJuIG5mX2N0X3pvbmUtPmlkOworI2VuZGlmCisJcmV0dXJuIE5GX0NUX0RFRkFVTFRfWk9ORTsKK30KKworI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0sgfHwgQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUgKi8KKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX1pPTkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oCmluZGV4IDQyMjIyMjAuLjAyYmI2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaApAQCAtNywxMyArNywyNyBAQAogc3RydWN0IHNrX2J1ZmY7CiAKIC8qIFRoZXNlIHJldHVybiB0cnVlIG9yIGZhbHNlLiAqLwotZXh0ZXJuIGludCBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKLQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX2xlbiwKLQkJCQkgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcF9sZW4pOworZXh0ZXJuIGludCBfX25mX25hdF9tYW5nbGVfdGNwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkJICAgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVwX2xlbiwgYm9vbCBhZGp1c3QpOworCitzdGF0aWMgaW5saW5lIGludCBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKKwkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNoX2xlbiwKKwkJCQkJICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcF9sZW4pCit7CisJcmV0dXJuIF9fbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICBtYXRjaF9vZmZzZXQsIG1hdGNoX2xlbiwKKwkJCQkJICByZXBfYnVmZmVyLCByZXBfbGVuLCB0cnVlKTsKK30KKwogZXh0ZXJuIGludCBuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKQEAgLTIxLDYgKzM1LDEwIEBACiAJCQkJICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCiAJCQkJICAgIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZXBfbGVuKTsKKworZXh0ZXJuIHZvaWQgbmZfbmF0X3NldF9zZXFfYWRqdXN0KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgX19iZTMyIHNlcSwgczE2IG9mZik7CiBleHRlcm4gaW50IG5mX25hdF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IGE2M2IyMTkuLmY4MmU0NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTE5Niw3ICsxOTYsNyBAQAogICogICAgQWxsIG90aGVyICAgICAgICAgICAgRXhhY3QgbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCiAgKgogICogRXhhbXBsZToKLSAqIHN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBteV9wb2xpY3lbQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKKyAqIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBteV9wb2xpY3lbQVRUUl9NQVgrMV0gPSB7CiAgKiAJW0FUVFJfRk9PXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAgKglbQVRUUl9CQVJdID0geyAudHlwZSA9IE5MQV9TVFJJTkcsIC5sZW4gPSBCQVJTSVogfSwKICAqCVtBVFRSX0JBWl0gPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IG15c3RydWN0KSB9LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAppbmRleCA2M2Q0NDk4Li5kNDk1OGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaApAQCAtMTcsNyArMTcsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkCSpleHBlY3RfaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAl1bmNvbmZpcm1lZDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAlkeWluZzsKLQlzdHJ1Y3QgaXBfY29ubnRyYWNrX3N0YXQgKnN0YXQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19zdGF0IF9fcGVyY3B1ICpzdGF0OwogCWludAkJCXN5c2N0bF9ldmVudHM7CiAJdW5zaWduZWQgaW50CQlzeXNjdGxfZXZlbnRzX3JldHJ5X3RpbWVvdXQ7CiAJaW50CQkJc3lzY3RsX2FjY3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRucy9jb3JlLmgKaW5kZXggMjRkNGJlNy4uNzhlYjFmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2NvcmUuaApAQCAtMTAsNyArMTAsNyBAQAogCiAJaW50CXN5c2N0bF9zb21heGNvbm47CiAKLQlzdHJ1Y3QgcHJvdF9pbnVzZQkqaW51c2U7CisJc3RydWN0IHByb3RfaW51c2UgX19wZXJjcHUgKmludXNlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKaW5kZXggOWE0YjhiNy4uMjc2NDk5NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKQEAgLTM3LDcgKzM3LDkgQEAKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX21hbmdsZTsKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX3JhdzsKIAlzdHJ1Y3QgeHRfdGFibGUJCSphcnB0YWJsZV9maWx0ZXI7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJc3RydWN0IHh0X3RhYmxlCQkqaXB0YWJsZV9zZWN1cml0eTsKKyNlbmRpZgogCXN0cnVjdCB4dF90YWJsZQkJKm5hdF90YWJsZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkqbmF0X2J5c291cmNlOwogCXVuc2lnbmVkIGludAkJbmF0X2h0YWJsZV9zaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCmluZGV4IGRmZWIyZDcuLjFmMTFlYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKQEAgLTM2LDggKzM2LDEwIEBACiAJc3RydWN0IHh0X3RhYmxlCQkqaXA2dGFibGVfZmlsdGVyOwogCXN0cnVjdCB4dF90YWJsZQkJKmlwNnRhYmxlX21hbmdsZTsKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcDZ0YWJsZV9yYXc7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJc3RydWN0IHh0X3RhYmxlCQkqaXA2dGFibGVfc2VjdXJpdHk7CiAjZW5kaWYKKyNlbmRpZgogCXN0cnVjdCBydDZfaW5mbyAgICAgICAgICppcDZfbnVsbF9lbnRyeTsKIAlzdHJ1Y3QgcnQ2X3N0YXRpc3RpY3MgICAqcnQ2X3N0YXRzOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIGlwNl9maWJfdGltZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9wYWNrZXQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL3BhY2tldC5oCmluZGV4IDYzN2RhZjY5Li5jYjRlODk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9wYWNrZXQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9wYWNrZXQuaApAQCAtNCwxMSArNCwxMSBAQAogI2lmbmRlZiBfX05FVE5TX1BBQ0tFVF9IX18KICNkZWZpbmUgX19ORVROU19QQUNLRVRfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIHN0cnVjdCBuZXRuc19wYWNrZXQgewotCXJ3bG9ja190CQlza2xpc3RfbG9jazsKKwlzcGlubG9ja190CQlza2xpc3RfbG9jazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAlza2xpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcGVwLmggYi9pbmNsdWRlL25ldC9waG9uZXQvcGVwLmgKaW5kZXggNGM2MWNkYy4uMzU2NzJiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BlcC5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9wZXAuaApAQCAtNDQsNiArNDQsNyBAQAogCXU4CQkJcnhfZmM7CS8qIFJYIGZsb3cgY29udHJvbCAqLwogCXU4CQkJdHhfZmM7CS8qIFRYIGZsb3cgY29udHJvbCAqLwogCXU4CQkJaW5pdF9lbmFibGU7CS8qIGF1dG8tZW5hYmxlIGF0IGNyZWF0aW9uICovCisJdTgJCQlhbGlnbmVkOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGVwX3NvY2sgKnBlcF9zayhzdHJ1Y3Qgc29jayAqc2spCkBAIC03Nyw2ICs3OCw3IEBACiAKIGVudW0gewogCVBOU19QSVBFX0RBVEEgPSAweDIwLAorCVBOU19QSVBFX0FMSUdORURfREFUQSwKIAogCVBOU19QRVBfQ09OTkVDVF9SRVEgPSAweDQwLAogCVBOU19QRVBfQ09OTkVDVF9SRVNQLApAQCAtMTM4LDYgKzE0MCw3IEBACiAJUE5fUElQRV9TQl9ORUdPVElBVEVEX0ZDLAogCVBOX1BJUEVfU0JfUkVRVUlSRURfRkNfVFgsCiAJUE5fUElQRV9TQl9QUkVGRVJSRURfRkNfUlgsCisJUE5fUElQRV9TQl9BTElHTkVEX0RBVEEsCiB9OwogCiAvKiBQaG9uZXQgcGlwZSBmbG93IGNvbnRyb2wgbW9kZWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDJkNTY3MjYuLmI2Y2RjMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC03MSw2ICs3MSw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX3FkaXNjX29wczsKIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIGJmaWZvX3FkaXNjX29wczsKK2V4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2hlYWRfZHJvcF9xZGlzY19vcHM7CiAKIGV4dGVybiBpbnQgZmlmb19zZXRfbGltaXQoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBpbnQgbGltaXQpOwogZXh0ZXJuIHN0cnVjdCBRZGlzYyAqZmlmb19jcmVhdGVfZGZsdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IFFkaXNjX29wcyAqb3BzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oIGIvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCmluZGV4IDQ3OTk1YjguLmY4NzNlZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaAorKysgYi9pbmNsdWRlL25ldC9yZWd1bGF0b3J5LmgKQEAgLTM5LDYgKzM5LDcgQEAKICAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCiAgKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICoJOTcgLSByZWd1bGF0b3J5IGRvbWFpbiBoYXMgbm90IHlldCBiZWVuIGNvbmZpZ3VyZWQKICAqIEBpbnRlcnNlY3Q6IGluZGljYXRlcyB3aGV0aGVyIHRoZSB3aXJlbGVzcyBjb3JlIHNob3VsZCBpbnRlcnNlY3QKICAqIAl0aGUgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluIHdpdGggdGhlIHByZXNlbnRseSBzZXQgcmVndWxhdG9yeQogICogCWRvbWFpbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKaW5kZXggYzliNTBlYi4uOTllNmUxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKQEAgLTQ1LDYgKzQ1LDggQEAKIAl2b2lkCQkoKnNlbmRfcmVzZXQpKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAl2b2lkCQkoKmRlc3RydWN0b3IpKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CisJdm9pZAkJKCpzeW5fYWNrX3RpbWVvdXQpKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIH07CiAKIC8qIHN0cnVjdCByZXF1ZXN0X3NvY2sgLSBtaW5pIHNvY2sgdG8gcmVwcmVzZW50IGEgY29ubmVjdGlvbiByZXF1ZXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCBiY2U2ZGQ2Li4yYzlmYmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgb3V0X2hsaXN0X3NlYXJjaDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgaXBfcnRfYWNjdCAqaXBfcnRfYWNjdDsKK2V4dGVybiBzdHJ1Y3QgaXBfcnRfYWNjdCBfX3BlcmNwdSAqaXBfcnRfYWNjdDsKIAogc3RydWN0IGluX2RldmljZTsKIGV4dGVybiBpbnQJCWlwX3J0X2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCmluZGV4IDQ4ZDNlZmMuLmFmNjBmZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCkBAIC04Nyw2ICs4Nyw4IEBACiBleHRlcm4gc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXQoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKnJ0bmxfY3JlYXRlX2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldCAqbmV0LAogCWNoYXIgKmlmbmFtZSwgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcywgc3RydWN0IG5sYXR0ciAqdGJbXSk7CitleHRlcm4gaW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0pOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlmbGFfcG9saWN5W0lGTEFfTUFYKzFdOwogCiAjZGVmaW5lIE1PRFVMRV9BTElBU19SVE5MX0xJTksoa2luZCkgTU9EVUxFX0FMSUFTKCJydG5sLWxpbmstIiBraW5kKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZGFkNTU4Yi4uNjdkYzA4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00MjcsNiArNDI3LDI1IEBACiAJcmV0dXJuIF9fcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCwgJnNjaC0+cSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLAorCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBfX3FkaXNjX2RlcXVldWVfaGVhZChzY2gsIGxpc3QpOworCisJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKKwkJdW5zaWduZWQgaW50IGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBsZW47CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlyZXR1cm4gX19xZGlzY19xdWV1ZV9kcm9wX2hlYWQoc2NoLCAmc2NoLT5xKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19xZGlzY19kZXF1ZXVlX3RhaWwoc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IGYwZDc1NmYuLjY5MmVlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTMyLDcgKzMyLDcgQEAKICAqICAtIG5hbWUgb2YgZW50cmllcy4KICAqLwogc3RydWN0IHNubXBfbWliIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGVudHJ5OwogfTsKIApAQCAtMTI5LDkgKzEyOSw5IEBACiAgKiBub25sb2NrZWRfYXRvbWljX2luYygpIHByaW1pdGl2ZXMgLUFLCiAgKi8gCiAjZGVmaW5lIERFRklORV9TTk1QX1NUQVQodHlwZSwgbmFtZSkJXAotCV9fdHlwZW9mX18odHlwZSkgKm5hbWVbMl0KKwlfX3R5cGVvZl9fKHR5cGUpIF9fcGVyY3B1ICpuYW1lWzJdCiAjZGVmaW5lIERFQ0xBUkVfU05NUF9TVEFUKHR5cGUsIG5hbWUpCVwKLQlleHRlcm4gX190eXBlb2ZfXyh0eXBlKSAqbmFtZVsyXQorCWV4dGVybiBfX3R5cGVvZl9fKHR5cGUpIF9fcGVyY3B1ICpuYW1lWzJdCiAKICNkZWZpbmUgU05NUF9TVEFUX0JIUFRSKG5hbWUpCShuYW1lWzBdKQogI2RlZmluZSBTTk1QX1NUQVRfVVNSUFRSKG5hbWUpCShuYW1lWzFdKQpAQCAtMTQ4LDkgKzE0OCwxMyBAQAogCQkJX190aGlzX2NwdV9hZGQobWliWzBdLT5taWJzW2ZpZWxkXSwgYWRkZW5kKQogI2RlZmluZSBTTk1QX0FERF9TVEFUU19VU0VSKG1pYiwgZmllbGQsIGFkZGVuZCkJXAogCQkJdGhpc19jcHVfYWRkKG1pYlsxXS0+bWlic1tmaWVsZF0sIGFkZGVuZCkKKy8qCisgKiBVc2UgIl9fdHlwZW9mX18oKm1pYlswXSkgKnB0ciIgaW5zdGVhZCBvZiAiX190eXBlb2ZfXyhtaWJbMF0pIHB0ciIKKyAqIHRvIG1ha2UgQHB0ciBhIG5vbi1wZXJjcHUgcG9pbnRlci4KKyAqLwogI2RlZmluZSBTTk1QX1VQRF9QT19TVEFUUyhtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKQlcCiAJZG8geyBcCi0JCV9fdHlwZW9mX18obWliWzBdKSBwdHI7IFwKKwkJX190eXBlb2ZfXygqbWliWzBdKSAqcHRyOyBcCiAJCXByZWVtcHRfZGlzYWJsZSgpOyBcCiAJCXB0ciA9IHRoaXNfY3B1X3B0cigobWliKVshaW5fc29mdGlycSgpXSk7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjUEtUU10rKzsgXApAQCAtMTU5LDcgKzE2Myw3IEBACiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgU05NUF9VUERfUE9fU1RBVFNfQkgobWliLCBiYXNlZmllbGQsIGFkZGVuZCkJXAogCWRvIHsgXAotCQlfX3R5cGVvZl9fKG1pYlswXSkgcHRyID0gXAorCQlfX3R5cGVvZl9fKCptaWJbMF0pICpwdHIgPSBcCiAJCQlfX3RoaXNfY3B1X3B0cigobWliKVshaW5fc29mdGlycSgpXSk7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjUEtUU10rKzsgXAogCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNPQ1RFVFNdICs9IGFkZGVuZDtcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggM2YxYTQ4MDQuLjZjYjE2NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTMxNyw2ICszMTcsMTEgQEAKIC8qCiAgKiBIYXNoZWQgbGlzdHMgaGVscGVyIHJvdXRpbmVzCiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrX2VudHJ5KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQoreworCXJldHVybiBobGlzdF9lbnRyeShub2RlLCBzdHJ1Y3Qgc29jaywgc2tfbm9kZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKl9fc2tfaGVhZChjb25zdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlyZXR1cm4gaGxpc3RfZW50cnkoaGVhZC0+Zmlyc3QsIHN0cnVjdCBzb2NrLCBza19ub2RlKTsKQEAgLTM3Niw2ICszODEsNyBAQAogCV9faGxpc3RfZGVsKCZzay0+c2tfbm9kZSk7CiB9CiAKKy8qIE5COiBlcXVpdmFsZW50IHRvIGhsaXN0X2RlbF9pbml0X3JjdSAqLwogc3RhdGljIF9faW5saW5lX18gaW50IF9fc2tfZGVsX25vZGVfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKHNrX2hhc2hlZChzaykpIHsKQEAgLTQxNiw2ICs0MjIsNyBAQAogCX0KIAlyZXR1cm4gcmM7CiB9CisjZGVmaW5lIHNrX2RlbF9ub2RlX2luaXRfcmN1KHNrKQlza19kZWxfbm9kZV9pbml0KHNrKQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19za19udWxsc19kZWxfbm9kZV9pbml0X3JjdShzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC00NDksNiArNDU2LDEyIEBACiAJX19za19hZGRfbm9kZShzaywgbGlzdCk7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2tfYWRkX25vZGVfcmN1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QpCit7CisJc29ja19ob2xkKHNrKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnNrLT5za19ub2RlLCBsaXN0KTsKK30KKwogc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NrX251bGxzX2FkZF9ub2RlX3JjdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpsaXN0KQogewogCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmc2stPnNrX251bGxzX25vZGUsIGxpc3QpOwpAQCAtNDczLDYgKzQ4Niw4IEBACiAKICNkZWZpbmUgc2tfZm9yX2VhY2goX19zaywgbm9kZSwgbGlzdCkgXAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fc2ssIG5vZGUsIGxpc3QsIHNrX25vZGUpCisjZGVmaW5lIHNrX2Zvcl9lYWNoX3JjdShfX3NrLCBub2RlLCBsaXN0KSBcCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KF9fc2ssIG5vZGUsIGxpc3QsIHNrX25vZGUpCiAjZGVmaW5lIHNrX251bGxzX2Zvcl9lYWNoKF9fc2ssIG5vZGUsIGxpc3QpIFwKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShfX3NrLCBub2RlLCBsaXN0LCBza19udWxsc19ub2RlKQogI2RlZmluZSBza19udWxsc19mb3JfZWFjaF9yY3UoX19zaywgbm9kZSwgbGlzdCkgXApAQCAtMTA0NCw3ICsxMDU5LDcgQEAKIGV4dGVybiB2b2lkIHNvY2tfaW5pdF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrICpzayk7CiAKIC8qKgotICoJc2tfZmlsdGVyX3JlbGVhc2U6IFJlbGVhc2UgYSBzb2NrZXQgZmlsdGVyCisgKglza19maWx0ZXJfcmVsZWFzZSAtIHJlbGVhc2UgYSBzb2NrZXQgZmlsdGVyCiAgKglAZnA6IGZpbHRlciB0byByZW1vdmUKICAqCiAgKglSZW1vdmUgYSBmaWx0ZXIgZnJvbSBhIHNvY2tldCBhbmQgcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCAzNGY1Y2MyLi41NmYwYWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMTk2LDYgKzE5Niw5IEBACiAjZGVmaW5lIFRDUF9OQUdMRV9DT1JLCQkyCS8qIFNvY2tldCBpcyBjb3JrZWQJICAgICovCiAjZGVmaW5lIFRDUF9OQUdMRV9QVVNICQk0CS8qIENvcmsgaXMgb3ZlcnJpZGRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLwogCisvKiBUQ1AgdGhpbi1zdHJlYW0gbGltaXRzICovCisjZGVmaW5lIFRDUF9USElOX0xJTkVBUl9SRVRSSUVTIDYgICAgICAgLyogQWZ0ZXIgNiBsaW5lYXIgcmV0cmllcywgZG8gZXhwLiBiYWNrb2ZmICovCisKIGV4dGVybiBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9kZWF0aF9yb3cgdGNwX2RlYXRoX3JvdzsKIAogLyogc3lzY3RsIHZhcmlhYmxlcyBmb3IgdGNwICovCkBAIC0yNDEsNiArMjQ0LDggQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9zbG93X3N0YXJ0X2FmdGVyX2lkbGU7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfbWF4X3NzdGhyZXNoOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX2Nvb2tpZV9zaXplOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3RoaW5fZHVwYWNrOwogCiBleHRlcm4gYXRvbWljX3QgdGNwX21lbW9yeV9hbGxvY2F0ZWQ7CiBleHRlcm4gc3RydWN0IHBlcmNwdV9jb3VudGVyIHRjcF9zb2NrZXRzX2FsbG9jYXRlZDsKQEAgLTQwMCw2ICs0MDUsOCBAQAogCQkJCQlpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKTsKIGV4dGVybiB2b2lkCQkJdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTsKK2V4dGVybiB2b2lkCQkJdGNwX3N5bl9hY2tfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGV4dGVybiBpbnQJCQl0Y3BfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCQkJICAgIHNpemVfdCBsZW4sIGludCBub25ibG9jaywgCkBAIC04NTYsMTMgKzg2Myw2IEBACiAJCQkJCSAgaWNzay0+aWNza19ydG8sIFRDUF9SVE9fTUFYKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKLXsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQotCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzayksIHRwLT5ub25hZ2xlKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEpCiB7CiAJdHAtPnNuZF93bDEgPSBzZXE7CkBAIC05NzIsNyArOTcyLDggQEAKIC8qIERldGVybWluZSBhIHdpbmRvdyBzY2FsaW5nIGFuZCBpbml0aWFsIHdpbmRvdyB0byBvZmZlci4gKi8KIGV4dGVybiB2b2lkIHRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3coaW50IF9fc3BhY2UsIF9fdTMyIG1zcywKIAkJCQkgICAgICBfX3UzMiAqcmN2X3duZCwgX191MzIgKndpbmRvd19jbGFtcCwKLQkJCQkgICAgICBpbnQgd3NjYWxlX29rLCBfX3U4ICpyY3Zfd3NjYWxlKTsKKwkJCQkgICAgICBpbnQgd3NjYWxlX29rLCBfX3U4ICpyY3Zfd3NjYWxlLAorCQkJCSAgICAgIF9fdTMyIGluaXRfcmN2X3duZCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRjcF93aW5fZnJvbV9zcGFjZShpbnQgc3BhY2UpCiB7CkBAIC0xMTkzLDcgKzExOTQsNyBAQAogI2RlZmluZSB0Y3BfdHdza19tZDVfa2V5KHR3c2spCU5VTEwKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkqKnRjcF9hbGxvY19tZDVzaWdfcG9vbChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKnRjcF9hbGxvY19tZDVzaWdfcG9vbChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkCQkJdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCSpfX3RjcF9nZXRfbWQ1c2lnX3Bvb2woaW50IGNwdSk7CkBAIC0xMzQyLDYgKzEzNDMsMTUgQEAKIAlyZXR1cm4gc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQoreworCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSkgeworCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKworCQlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spLCB0cC0+bm9uYWdsZSk7CisJfQorfQorCiAvKiBTdGFydCBzZXF1ZW5jZSBvZiB0aGUgaGlnaGVzdCBza2Igd2l0aCBTQUNLZWQgYml0LCB2YWxpZCBvbmx5IGlmCiAgKiBzYWNrZWQgPiAwIG9yIHdoZW4gdGhlIGNhbGxlciBoYXMgZW5zdXJlZCB2YWxpZGl0eSBieSBpdHNlbGYuCiAgKi8KQEAgLTEzODEsNiArMTM5MSwxNCBAQAogCQl0Y3Bfc2soc2spLT5oaWdoZXN0X3NhY2sgPSBuZXc7CiB9CiAKKy8qIERldGVybWluZXMgd2hldGhlciB0aGlzIGlzIGEgdGhpbiBzdHJlYW0gKHdoaWNoIG1heSBzdWZmZXIgZnJvbQorICogaW5jcmVhc2VkIGxhdGVuY3kpLiBVc2VkIHRvIHRyaWdnZXIgbGF0ZW5jeS1yZWR1Y2luZyBtZWNoYW5pc21zLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0Y3Bfc3RyZWFtX2lzX3RoaW4oc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlyZXR1cm4gdHAtPnBhY2tldHNfb3V0IDwgNCAmJiAhdGNwX2luX2luaXRpYWxfc2xvd3N0YXJ0KHRwKTsKK30KKwogLyogL3Byb2MgKi8KIGVudW0gdGNwX3NlcV9zdGF0ZXMgewogCVRDUF9TRVFfU1RBVEVfTElTVEVOSU5HLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDYwYzI3NzAuLmE3ZGYzMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTE0MCw2ICsxNDAsNyBAQAogCiAJc3RydWN0IHhmcm1faWQJCWlkOwogCXN0cnVjdCB4ZnJtX3NlbGVjdG9yCXNlbDsKKwlzdHJ1Y3QgeGZybV9tYXJrCW1hcms7CiAKIAl1MzIJCQlnZW5pZDsKIApAQCAtMzE3LDggKzMxOCw4IEBACiBzdHJ1Y3QgeGZybV90eXBlIHsKIAljaGFyCQkJKmRlc2NyaXB0aW9uOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQlfX3U4CQkJcHJvdG87Ci0JX191OAkJCWZsYWdzOworCXU4CQkJcHJvdG87CisJdTgJCQlmbGFnczsKICNkZWZpbmUgWEZSTV9UWVBFX05PTl9GUkFHTUVOVAkxCiAjZGVmaW5lIFhGUk1fVFlQRV9SRVBMQVlfUFJPVAkyCiAjZGVmaW5lIFhGUk1fVFlQRV9MT0NBTF9DT0FERFIJNApAQCAtNDM0LDI0ICs0MzUsMjQgQEAKIAogCXVuc2lnbmVkIHNob3J0CQllbmNhcF9mYW1pbHk7CiAKLQlfX3UzMgkJCXJlcWlkOworCXUzMgkJCXJlcWlkOwogCiAvKiBNb2RlOiB0cmFuc3BvcnQsIHR1bm5lbCBldGMuICovCi0JX191OAkJCW1vZGU7CisJdTgJCQltb2RlOwogCiAvKiBTaGFyaW5nIG1vZGU6IHVuaXF1ZSwgdGhpcyBzZXNzaW9uIG9ubHksIHRoaXMgdXNlciBvbmx5IGV0Yy4gKi8KLQlfX3U4CQkJc2hhcmU7CisJdTgJCQlzaGFyZTsKIAogLyogTWF5IHNraXAgdGhpcyB0cmFuc2ZvbXJhdGlvbiBpZiBubyBTQSBpcyBmb3VuZCAqLwotCV9fdTgJCQlvcHRpb25hbDsKKwl1OAkJCW9wdGlvbmFsOwogCiAvKiBTa2lwIGFhbGdvcy9lYWxnb3MvY2FsZ29zIGNoZWNrcy4gKi8KLQlfX3U4CQkJYWxsYWxnczsKKwl1OAkJCWFsbGFsZ3M7CiAKIC8qIEJpdCBtYXNrIG9mIGFsZ29zIGFsbG93ZWQgZm9yIGFjcXVpc2l0aW9uICovCi0JX191MzIJCQlhYWxnb3M7Ci0JX191MzIJCQllYWxnb3M7Ci0JX191MzIJCQljYWxnb3M7CisJdTMyCQkJYWFsZ29zOworCXUzMgkJCWVhbGdvczsKKwl1MzIJCQljYWxnb3M7CiB9OwogCiAjZGVmaW5lIFhGUk1fTUFYX0RFUFRICQk2CkBAIC00ODEsNiArNDgyLDcgQEAKIAogCXUzMgkJCXByaW9yaXR5OwogCXUzMgkJCWluZGV4OworCXN0cnVjdCB4ZnJtX21hcmsJbWFyazsKIAlzdHJ1Y3QgeGZybV9zZWxlY3RvcglzZWxlY3RvcjsKIAlzdHJ1Y3QgeGZybV9saWZldGltZV9jZmcgbGZ0OwogCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1ciBjdXJsZnQ7CkBAIC03NzAsNyArNzcyLDcgQEAKIAlpbnQgcGR3OwogCWludCBwYmk7CiAKLQlwZHcgPSBwcmVmaXhsZW4gPj4gNTsJICAvKiBudW0gb2Ygd2hvbGUgX191MzIgaW4gcHJlZml4ICovCisJcGR3ID0gcHJlZml4bGVuID4+IDU7CSAgLyogbnVtIG9mIHdob2xlIHUzMiBpbiBwcmVmaXggKi8KIAlwYmkgPSBwcmVmaXhsZW4gJiAgMHgxZjsgIC8qIG51bSBvZiBiaXRzIGluIGluY29tcGxldGUgdTMyIGluIHByZWZpeCAqLwogCiAJaWYgKHBkdykKQEAgLTEyNTksNyArMTI2MSw3IEBACiAvKiBYRlJNIHR1bm5lbCBoYW5kbGVycy4gICovCiBzdHJ1Y3QgeGZybV90dW5uZWwgewogCWludCAoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IpOwotCWludCAoKmVycl9oYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBpbmZvKTsKKwlpbnQgKCplcnJfaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pOwogCiAJc3RydWN0IHhmcm1fdHVubmVsICpuZXh0OwogCWludCBwcmlvcml0eTsKQEAgLTEzMTcsNyArMTMxOSw3IEBACiAJCQkJCSAgc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHhmcm1fdG1wbCAqdG1wbCwKIAkJCQkJICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50ICplcnIsCiAJCQkJCSAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKLWV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHhmcm1fc3RhdGVvbmx5X2ZpbmQoc3RydWN0IG5ldCAqbmV0LAorZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJCQkJCSAgICAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkJCSAgICAgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCkBAIC0xMzI2LDggKzEzMjgsMTQgQEAKIGV4dGVybiB2b2lkIHhmcm1fc3RhdGVfaW5zZXJ0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7Ci1leHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKLWV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAorCQkJCQkgICAgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLAorCQkJCQkgICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CitleHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAorCQkJCQkJICAgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAorCQkJCQkJICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAorCQkJCQkJICAgdTggcHJvdG8sCisJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogI2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kKIGV4dGVybiBpbnQgeGZybV90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywKIAkJCSAgaW50IG4sIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CkBAIC0xMzY0LDcgKzEzNzIsOCBAQAogCXUzMiBzcGRobWNudDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9maW5kX2FjcV9ieXNlcShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBzZXEpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCisJCQkJCSAgICAgIHUzMiBzZXEpOwogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90bywgc3RydWN0IHhmcm1fYXVkaXQgKmF1ZGl0X2luZm8pOwogZXh0ZXJuIHZvaWQgeGZybV9zYWRfZ2V0aW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJta19zYWRpbmZvICpzaSk7CkBAIC0xNDA4LDkgKzE0MTcsOSBAQAogCQkJICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pOwogZXh0ZXJuIGludCB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlciwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlciwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKLWV4dGVybiBfX2JlMzIgeGZybTZfdHVubmVsX2FsbG9jX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOwotZXh0ZXJuIHZvaWQgeGZybTZfdHVubmVsX2ZyZWVfc3BpKHhmcm1fYWRkcmVzc190ICpzYWRkcik7Ci1leHRlcm4gX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHhmcm1fYWRkcmVzc190ICpzYWRkcik7CitleHRlcm4gX19iZTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIHZvaWQgeGZybTZfdHVubmVsX2ZyZWVfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKK2V4dGVybiBfX2JlMzIgeGZybTZfdHVubmVsX3NwaV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOwogZXh0ZXJuIGludCB4ZnJtNl9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTQ0MSwxNyArMTQ1MCwyMCBAQAogCWludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3BvbGljeSAqLCBpbnQsIGludCwgdm9pZCopLCB2b2lkICopOwogZXh0ZXJuIHZvaWQgeGZybV9wb2xpY3lfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrKTsKIGludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKTsKLXN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwgaW50IGRpciwKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCisJCQkJCSAgdTggdHlwZSwgaW50IGRpciwKIAkJCQkJICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLAogCQkJCQkgIHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCwgaW50IGRlbGV0ZSwKIAkJCQkJICBpbnQgKmVycik7Ci1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCB1OCwgaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlLCBpbnQgKmVycik7CitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTgsIGludCBkaXIsIHUzMiBpZCwgaW50IGRlbGV0ZSwgaW50ICplcnIpOwogaW50IHhmcm1fcG9saWN5X2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwgc3RydWN0IHhmcm1fYXVkaXQgKmF1ZGl0X2luZm8pOwogdTMyIHhmcm1fZ2V0X2FjcXNlcSh2b2lkKTsKIGV4dGVybiBpbnQgeGZybV9hbGxvY19zcGkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBtaW5zcGksIHUzMiBtYXhzcGkpOwotc3RydWN0IHhmcm1fc3RhdGUgKiB4ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgdTggbW9kZSwgdTMyIHJlcWlkLCB1OCBwcm90bywKLQkJCQkgIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAotCQkJCSAgaW50IGNyZWF0ZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKKwkJCQkgdTggbW9kZSwgdTMyIHJlcWlkLCB1OCBwcm90bywKKwkJCQkgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAorCQkJCSB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIGludCBjcmVhdGUsCisJCQkJIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm1fc2tfcG9saWN5X2luc2VydChzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKTsKIGV4dGVybiBpbnQgeGZybV9idW5kbGVfb2soc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIHN0cnVjdCB4ZnJtX2RzdCAqeGRzdCwKIAkJCSAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZhbWlseSwgaW50IHN0cmljdCk7CkBAIC0xNTAwLDcgKzE1MTIsNyBAQAogCXN3aXRjaCAoZmFtaWx5KSB7CiAJZGVmYXVsdDoKIAljYXNlIEFGX0lORVQ6Ci0JCXJldHVybiAoX19mb3JjZSBfX3UzMilhLT5hNCAtIChfX2ZvcmNlIF9fdTMyKWItPmE0OworCQlyZXR1cm4gKF9fZm9yY2UgdTMyKWEtPmE0IC0gKF9fZm9yY2UgdTMyKWItPmE0OwogCWNhc2UgQUZfSU5FVDY6CiAJCXJldHVybiBpcHY2X2FkZHJfY21wKChzdHJ1Y3QgaW42X2FkZHIgKilhLAogCQkJCSAgICAgKHN0cnVjdCBpbjZfYWRkciAqKWIpOwpAQCAtMTU3MCw0ICsxNTgyLDI0IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBpbnQgeGZybV9tYXJrX2dldChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCB4ZnJtX21hcmsgKm0pCit7CisJaWYgKGF0dHJzW1hGUk1BX01BUktdKQorCQltZW1jcHkobSwgbmxhX2RhdGEoYXR0cnNbWEZSTUFfTUFSS10pLCBzaXplb2YobSkpOworCWVsc2UKKwkJbS0+diA9IG0tPm0gPSAwOworCisJcmV0dXJuIG0tPnYgJiBtLT5tOworfQorCitzdGF0aWMgaW5saW5lIGludCB4ZnJtX21hcmtfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX21hcmsgKm0pCit7CisJaWYgKG0tPm0gfCBtLT52KQorCQlOTEFfUFVUKHNrYiwgWEZSTUFfTUFSSywgc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspLCBtKTsKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiAtMTsKK30KKwogI2VuZGlmCS8qIF9ORVRfWEZSTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaCBiL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCmluZGV4IGMzM2VhMDguLjYzZTViOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCkBAIC0zNCw2ICszNCwxMSBAQAogCS5wcm9kX2lkID0geyBOVUxMLCAodjIpLCBOVUxMLCBOVUxMIH0sICBcCiAJLnByb2RfaWRfaGFzaCA9IHsgMCwgKHZoMiksIDAsIDAgfSwgfQogCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfUFJPRF9JRDModjMsIHZoMykgeyBcCisJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9QUk9EX0lEMywgXAorCS5wcm9kX2lkID0geyBOVUxMLCBOVUxMLCAodjMpLCBOVUxMIH0sICBcCisJLnByb2RfaWRfaGFzaCA9IHsgMCwgMCwgKHZoMyksIDAgfSwgfQorCiAjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKHYxLCB2MiwgdmgxLCB2aDIpIHsgXAogCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDF8IFwKIAkJCVBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDIsIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IGVlMTQ4NTcuLmQ1Nzg0N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtNDAsNyArNDAsNyBAQAogICogRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLnR4dCBmb3IgZGV0YWlscy4KICovCiBzdHJ1Y3QgcGNtY2lhX2R5bmlkcyB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggY2JmYmE4OC4uMzI4OTZhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xMzQsOSArMTM0LDkgQEAKIAogc3RydWN0IHBjbWNpYV9zb2NrZXQgewogCXN0cnVjdCBtb2R1bGUJCQkqb3duZXI7Ci0Jc3BpbmxvY2tfdAkJCWxvY2s7CiAJc29ja2V0X3N0YXRlX3QJCQlzb2NrZXQ7CiAJdV9pbnQJCQkJc3RhdGU7CisJdV9pbnQJCQkJc3VzcGVuZGVkX3N0YXRlOwkvKiBzdGF0ZSBiZWZvcmUgc3VzcGVuZCAqLwogCXVfc2hvcnQJCQkJZnVuY3Rpb25zOwogCXVfc2hvcnQJCQkJbG9ja19jb3VudDsKIAlwY2NhcmRfbWVtX21hcAkJCWNpc19tZW07CkBAIC0yMDAsOSArMjAwLDE0IEBACiAJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBjb21wbGV0aW9uCQl0aHJlYWRfZG9uZTsKIAl1bnNpZ25lZCBpbnQJCQl0aHJlYWRfZXZlbnRzOwotCS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJCQlzeXNmc19ldmVudHM7CisKKwkvKiBGb3IgdGhlIG5vbi10cml2aWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgbG9ja3MsCisJICogc2VlIERvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0ICovCiAJc3RydWN0IG11dGV4CQkJc2t0X211dGV4OwotCS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlvcHNfbXV0ZXg7CisKKwkvKiBwcm90ZWN0cyB0aHJlYWRfZXZlbnRzIGFuZCBzeXNmc19ldmVudHMgKi8KIAlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CiAKIAkvKiBwY21jaWEgKDE2LWJpdCkgKi8KQEAgLTIyNSwzMCArMjMwLDE5IEBACiAJCXU4CQkJYnVzeToxOwogCQkvKiBwY21jaWEgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkICovCiAJCXU4CQkJZGVhZDoxOwotCQkvKiBhIG11bHRpZnVuY3Rpb24tZGV2aWNlIGFkZCBldmVudCBpcyBwZW5kaW5nICovCi0JCXU4CQkJZGV2aWNlX2FkZF9wZW5kaW5nOjE7Ci0JCS8qIHRoZSBwZW5kaW5nIGV2ZW50IGFkZHMgYSBtZmMgKDEpIG9yIHBmYyAoMCkgKi8KLQkJdTgJCQltZmNfcGZjOjE7CisJCS8qIHRoZSBQQ01DSUEgY2FyZCBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMgKi8KKwkJdTgJCQloYXNfcGZjOjE7CiAKLQkJdTgJCQlyZXNlcnZlZDozOworCQl1OAkJCXJlc2VydmVkOjQ7CiAJfSBwY21jaWFfc3RhdGU7CiAKIAotCS8qIGZvciBhZGRpbmcgZnVydGhlciBwc2V1ZG8tbXVsdGlmdW5jdGlvbiBkZXZpY2VzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlkZXZpY2VfYWRkOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCXN0cnVjdCB1c2VyX2luZm9fdAkJKnVzZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXF1ZXVlOwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICovCiAKLQkvKiBjYXJkYnVzICgzMi1iaXQpICovCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlzdHJ1Y3QgcmVzb3VyY2UJCQkqY2JfY2lzX3JlczsKLQl2b2lkIF9faW9tZW0JCQkqY2JfY2lzX3ZpcnQ7Ci0jZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi8KLQogCS8qIHNvY2tldCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KQEAgLTI2MywxMyArMjU3LDI1IEBACiAgKiAtIHBjY2FyZF9zdGF0aWNfb3BzCQlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBzdGF0aWNhbGx5CiAgKiAtIHBjY2FyZF9pb2R5bl9vcHMJCWlvbWVtIGFyZWFzIGlzIGFzc2lnbmVkIHN0YXRpY2FsbHksIGlvcG9ydAogICoJCQkJYXJlYXMgZHluYW1pY2FsbHkKKyAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKKyAqCQkJCSJzZWxlY3QgUENDQVJEX0lPRFlOIiBpbiBLY29uZmlnLgogICogLSBwY2NhcmRfbm9uc3RhdGljX29wcwlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KICAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKICAqCQkJCSJzZWxlY3QgUENDQVJEX05PTlNUQVRJQyIgaW4gS2NvbmZpZy4KKyAqCiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfc3RhdGljX29wczsKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9NT0RVTEUpCiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX2lvZHluX29wczsKIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKKyNlbHNlCisvKiBJZiBQQ01DSUEgaXMgbm90IHVzZWQsIGJ1dCBvbmx5IENBUkRCVVMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHVzZWQKKyAqIGF0IGFsbC4gVGhlcmVmb3JlLCBkbyBub3QgdXNlIHRoZSBsYXJnZSAoMjQwSyEpIHJzcmNfbm9uc3RhdGljIG1vZHVsZQorICovCisjZGVmaW5lIHBjY2FyZF9pb2R5bl9vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNkZWZpbmUgcGNjYXJkX25vbnN0YXRpY19vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNlbmRpZgorCiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9wYWNrLmggYi9pbmNsdWRlL3JkbWEvaWJfcGFjay5oCmluZGV4IGQ3ZmM0NWM0Li5jYmI1MGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfcGFjay5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9wYWNrLmgKQEAgLTIzMiw2ICsyMzIsNyBAQAogCiB2b2lkIGliX3VkX2hlYWRlcl9pbml0KGludCAgICAgCQkgICBwYXlsb2FkX2J5dGVzLAogCQkgICAgICAgaW50ICAgIAkJICAgZ3JoX3ByZXNlbnQsCisJCSAgICAgICBpbnQJCSAgIGltbWVkaWF0ZV9wcmVzZW50LAogCQkgICAgICAgc3RydWN0IGliX3VkX2hlYWRlciAqaGVhZGVyKTsKIAogaW50IGliX3VkX2hlYWRlcl9wYWNrKHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggMDk1MDllZC4uYTU4NWUwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTk4NCw5ICs5ODQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGV2ZW50X2hhbmRsZXJfbGlzdDsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICBldmVudF9oYW5kbGVyX2xvY2s7CiAKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICBjbGllbnRfZGF0YV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGNvcmVfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBjbGllbnRfZGF0YV9saXN0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgIGNsaWVudF9kYXRhX2xvY2s7CiAKIAlzdHJ1Y3QgaWJfY2FjaGUgICAgICAgICAgICAgICBjYWNoZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICpwa2V5X3RibF9sZW47CkBAIC0xMTQ0LDggKzExNDQsOCBAQAogCQlJQl9ERVZfVU5SRUdJU1RFUkVECiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3RhdGU7CiAKLQl1NjQJCQkgICAgIHV2ZXJic19jbWRfbWFzazsKIAlpbnQJCQkgICAgIHV2ZXJic19hYmlfdmVyOworCXU2NAkJCSAgICAgdXZlcmJzX2NtZF9tYXNrOwogCiAJY2hhcgkJCSAgICAgbm9kZV9kZXNjWzY0XTsKIAlfX2JlNjQJCQkgICAgIG5vZGVfZ3VpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCmluZGV4IGM2YjI5NjIuLjRmYWU5MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaApAQCAtNjcsNyArNjcsNiBAQAogCVJETUFfUFNfSVBPSUIgPSAweDAwMDIsCiAJUkRNQV9QU19UQ1AgICA9IDB4MDEwNiwKIAlSRE1BX1BTX1VEUCAgID0gMHgwMTExLAotCVJETUFfUFNfU0NUUCAgPSAweDAxODMKIH07CiAKIHN0cnVjdCByZG1hX2FkZHIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCA3YzQ0NDk5Li5kODBiNmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMzQ4LDcgKzM0OCw4IEBACiAJCQkgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwogZXh0ZXJuIGludCBzY3NpX3Rlc3RfdW5pdF9yZWFkeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0aW1lb3V0LAogCQkJCWludCByZXRyaWVzLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTggcGFnZSk7CitleHRlcm4gaW50IHNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqLCB1OCBwYWdlLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICAgIGludCBidWZfbGVuKTsKIGV4dGVybiBpbnQgc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCQkgZW51bSBzY3NpX2RldmljZV9zdGF0ZSBzdGF0ZSk7CiBleHRlcm4gc3RydWN0IHNjc2lfZXZlbnQgKnNkZXZfZXZ0X2FsbG9jKGVudW0gc2NzaV9kZXZpY2VfZXZlbnQgZXZ0X3R5cGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKaW5kZXggNjFhZDM1OS4uZmZlZWJjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaApAQCAtMTA3LDYgKzEwNyw4IEBACiAJc3RydWN0IHNhc19ycGh5CQlycGh5OwogCS8qIGZsYWdzICovCiAJdW5zaWduZWQJCXJlYWR5X2xlZF9tZWFuaW5nOjE7CisJdW5zaWduZWQJCXRscl9zdXBwb3J0ZWQ6MTsKKwl1bnNpZ25lZAkJdGxyX2VuYWJsZWQ6MTsKIAkvKiBwYXJhbWV0ZXJzICovCiAJdTE2CQkJSV9UX25leHVzX2xvc3NfdGltZW91dDsKIAl1MTYJCQlpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dDsKQEAgLTE4MSw2ICsxODMsMTEgQEAKIGV4dGVybiB2b2lkIHNhc19waHlfZGVsZXRlKHN0cnVjdCBzYXNfcGh5ICopOwogZXh0ZXJuIGludCBzY3NpX2lzX3Nhc19waHkoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKIAordW5zaWduZWQgaW50IHNhc190bHJfc3VwcG9ydGVkKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3Vuc2lnbmVkIGludCBzYXNfaXNfdGxyX2VuYWJsZWQoc3RydWN0IHNjc2lfZGV2aWNlICopOwordm9pZCBzYXNfZGlzYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICopOwordm9pZCBzYXNfZW5hYmxlX3RscihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CisKIGV4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19lbmRfZGV2aWNlX2FsbG9jKHN0cnVjdCBzYXNfcG9ydCAqKTsKIGV4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKiwgZW51bSBzYXNfZGV2aWNlX3R5cGUpOwogdm9pZCBzYXNfcnBoeV9mcmVlKHN0cnVjdCBzYXNfcnBoeSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKaW5kZXggYTYxNDk5Yy4uODllMGFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKQEAgLTQ1OCw1ICs0NTgsOCBAQAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgogc25kX3BjaV9xdWlya19sb29rdXAoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpOwogCitjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqCitzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCh1MTYgdmVuZG9yLCB1MTYgZGV2aWNlLAorCQkJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpOwogCiAjZW5kaWYgLyogX19TT1VORF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmggYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCmluZGV4IDdjNDQ2NjcuLjQ5YjAzYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaApAQCAtMTE4LDkgKzExOCwxMSBAQAogCiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2luZm87CiAJaW50IHJlZl9jb3VudDsKLQlzcGlubG9ja190IGxvY2s7CiAKLQlpbnQgZGVsZXRlZDsKKwl1MTYgdm9sdW1lWzJdOworCXVuc2lnbmVkIGludCBkZWxldGVkIDoxOworCXVuc2lnbmVkIGludCB1cGRhdGVkIDoxOworCXVuc2lnbmVkIGludCB2b2x1bWVfc2V0IDoxOwogfTsKIAogc3RydWN0IGRzcF90YXNrX2Rlc2NyaXB0b3IgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggYzgzYTRhNy4uOGI2MTFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0yNjIsNiArMjYyLDggQEAKIAl1bnNpZ25lZCBpbnQgbWFzazsKIH07CiAKK3N0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZzsKKwogc3RydWN0IHNuZF9wY21fcnVudGltZSB7CiAJLyogLS0gU3RhdHVzIC0tICovCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICp0cmlnZ2VyX21hc3RlcjsKQEAgLTMxMCw3ICszMTIsOSBAQAogCXN0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCAqY29udHJvbDsKIAogCS8qIC0tIGxvY2tpbmcgLyBzY2hlZHVsaW5nIC0tICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJdW5zaWduZWQgaW50IHR3YWtlOiAxOwkJLyogZG8gdHJhbnNmZXIgKCFwb2xsKSB3YWtldXAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsJLyogcG9sbCBzbGVlcCAqLworCXdhaXRfcXVldWVfaGVhZF90IHRzbGVlcDsJLyogdHJhbnNmZXIgc2xlZXAgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogCiAJLyogLS0gcHJpdmF0ZSBzZWN0aW9uIC0tICovCkBAIC0zNDAsNiArMzQ0LDEwIEBACiAJLyogLS0gT1NTIHRoaW5ncyAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX29zc19ydW50aW1lIG9zczsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCXN0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZyAqaHdwdHJfbG9nOworI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9ncm91cCB7CQkvKiBrZWVwIGxpbmtlZCBzdWJzdHJlYW1zICovCkBAIC04MzQsNiArODQyLDggQEAKIGludCBzbmRfcGNtX2xpYl9pbnRlcmxlYXZlX2xlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9saWJfaW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7ICAgICAgICAgICAgICAgICAgICAgIAoraW50IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOwogaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9wbGF5YmFja194cnVuX2NoZWNrKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX2NhcHR1cmVfeHJ1bl9jaGVjayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC05MDUsNiArOTE1LDQ0IEBACiBpbnQgc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CiBpbnQgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiAKK2ludCBfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncyk7CitpbnQgc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitzdHJ1Y3QgcGFnZSAqc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisjaWYgMCAvKiBmb3Iga2VybmVsLWRvYyAqLworLyoqCisgKiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlciAtIGFsbG9jYXRlIHZpcnR1YWwgRE1BIGJ1ZmZlcgorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvCisgKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgaW4gYnl0ZXMKKyAqCisgKiBBbGxvY2F0ZXMgdGhlIFBDTSBzdWJzdHJlYW0gYnVmZmVyIHVzaW5nIHZtYWxsb2MoKSwgaS5lLiwgdGhlIG1lbW9yeSBpcworICogY29udGlndW91cyBpbiBrZXJuZWwgdmlydHVhbCBzcGFjZSwgYnV0IG5vdCBpbiBwaHlzaWNhbCBtZW1vcnkuICBVc2UgdGhpcworICogaWYgdGhlIGJ1ZmZlciBpcyBhY2Nlc3NlZCBieSBrZXJuZWwgY29kZSBidXQgbm90IGJ5IGRldmljZSBETUEuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQsIDAgaWYgbm90IGNoYW5nZWQsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIKKwkJCShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc2l6ZV90IHNpemUpOworLyoqCisgKiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlciAtIGFsbG9jYXRlIDMyLWJpdC1hZGRyZXNzYWJsZSBidWZmZXIKKyAqIEBzdWJzdHJlYW06IHRoZSBzdWJzdHJlYW0gdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciB0bworICogQHNpemU6IHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGluIGJ5dGVzCisgKgorICogVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKCksIGJ1dCB1c2VzCisgKiB2bWFsbG9jXzMyKCksIGkuZS4sIHRoZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gMzItYml0LWFkZHJlc3NhYmxlIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcgorCQkJKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKyNkZWZpbmUgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vicywgc2l6ZSkgXAorCV9zbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlciBcCisJCQkoc3Vicywgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPKQorI2RlZmluZSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcihzdWJzLCBzaXplKSBcCisJX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyIFwKKwkJCShzdWJzLCBzaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTykKKwogI2lmZGVmIENPTkZJR19TTkRfRE1BX1NHQlVGCiAvKgogICogU0ctYnVmZmVyIGhhbmRsaW5nCkBAIC05NzUsNiArMTAyMywxMCBAQAogI2RlZmluZSBzbmRfcGNtX2xpYl9tbWFwX2lvbWVtCU5VTEwKICNlbmRpZgogCitpbnQgc25kX3BjbV9saWJfbW1hcF9ub25jYWNoZWQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKTsKKyNkZWZpbmUgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jCXNuZF9wY21fbGliX21tYXBfbm9uY2FjaGVkCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcGNtX2xpbWl0X2lzYV9kbWFfc2l6ZShpbnQgZG1hLCBzaXplX3QgKm1heCkKIHsKIAkqbWF4ID0gZG1hIDwgNCA/IDY0ICogMTAyNCA6IDEyOCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaCBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCmluZGV4IGNjNGUyMjYuLjc2MGM5NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCkBAIC02MSw3ICs2MSw3IEBACiAJc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW5fZmlyc3Q7CiAJc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW5fbGFzdDsKICNlbmRpZgotCXVuc2lnbmVkIGludCBwcmV2X2h3X3B0cl9pbnRlcnJ1cHQ7CisJdW5zaWduZWQgaW50IHByZXZfaHdfcHRyX3BlcmlvZDsKIH07CiAKIHN0cnVjdCBzbmRfcGNtX29zc19maWxlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2IuaCBiL2luY2x1ZGUvc291bmQvc2IuaAppbmRleCA0ZTYyZWUxLi45NTM1MzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NiLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zYi5oCkBAIC0zMyw2ICszMyw3IEBACiAJU0JfSFdfMjAsCiAJU0JfSFdfMjAxLAogCVNCX0hXX1BSTywKKwlTQl9IV19KQVpaMTYsCQkvKiBNZWRpYSBWaXNpb24gSmF6ejE2ICovCiAJU0JfSFdfMTYsCiAJU0JfSFdfMTZDU1AsCQkvKiBTQjE2IHdpdGggQ1NQIGNoaXAgKi8KIAlTQl9IV19BTFMxMDAsCQkvKiBBdmFuY2UgTG9naWMgQUxTMTAwIGNoaXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggY2EyNGU3Zi4uMDYxZjE2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTE2LDYgKzE2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCiBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggYzVjOTVlMWQuLmMwOTIyYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTk1LDYgKzk1LDIxIEBACiAJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gMX0KIAorLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KKyNkZWZpbmUgU09DX1BHQV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LFwKKwkgd2NvbnRyb2xzKSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CisjZGVmaW5lIFNPQ19NSVhFUl9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scylcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKX0KKyNkZWZpbmUgU09DX01JWEVSX05BTUVEX0NUTF9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scylcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCBcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQorCiAvKiBwYXRoIGRvbWFpbiB3aXRoIGV2ZW50IC0gZXZlbnQgaGFuZGxlciBtdXN0IHJldHVybiAwIGZvciBzdWNjZXNzICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QR0FfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXApAQCAtMTI2LDYgKzE0MSwyMyBAQAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDEsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KIAorLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KKyNkZWZpbmUgU09DX1BHQV9FX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAorCXdldmVudCwgd2ZsYWdzKSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyksIFwKKwkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKyNkZWZpbmUgU09DX01JWEVSX0VfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCisJd2V2ZW50LCB3ZmxhZ3MpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCBcCisJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNPQ19NSVhFUl9OQU1FRF9DVExfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJd2NvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKwogLyogZXZlbnRzIHRoYXQgYXJlIHByZSBhbmQgcG9zdCBEQVBNICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QUkUod25hbWUsIHdldmVudCkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fcHJlLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xzID0gTlVMTCwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggMGQ3NzE4ZjkuLjVkMjM0YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTY5LDYgKzE2OSwyMyBAQAogCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KIAogLyoKKyAqIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBkZWNsYXJpbmcgYSBzdHJ1Y3QgYW5kIGNhbGN1bGF0aW5nCisgKiBBUlJBWV9TSVpFIGludGVybmFsbHkKKyAqLworI2RlZmluZSBTT0NfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnRfbCwgeHNoaWZ0X3IsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgXAorCQkJCQkJQVJSQVlfU0laRSh4dGV4dHMpLCB4dGV4dHMpCisjZGVmaW5lIFNPQ19FTlVNX1NJTkdMRV9ERUNMKG5hbWUsIHhyZWcsIHhzaGlmdCwgeHRleHRzKSBcCisJU09DX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHh0ZXh0cykKKyNkZWZpbmUgU09DX0VOVU1fU0lOR0xFX0VYVF9ERUNMKG5hbWUsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKHh0ZXh0cyksIHh0ZXh0cykKKyNkZWZpbmUgU09DX1ZBTFVFX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgeHRleHRzLCB4dmFsdWVzKSBcCisJc3RydWN0IHNvY19lbnVtIG5hbWUgPSBTT0NfVkFMVUVfRU5VTV9ET1VCTEUoeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgXAorCQkJCQkJCUFSUkFZX1NJWkUoeHRleHRzKSwgeHRleHRzLCB4dmFsdWVzKQorI2RlZmluZSBTT0NfVkFMVUVfRU5VTV9TSU5HTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMsIHh2YWx1ZXMpIFwKKwlTT0NfVkFMVUVfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhzaGlmdCwgeG1hc2ssIHh0ZXh0cywgeHZhbHVlcykKKworLyoKICAqIEJpYXMgbGV2ZWxzCiAgKgogICogQE9OOiAgICAgIEJpYXMgaXMgZnVsbHkgb24gZm9yIGF1ZGlvIHBsYXliYWNrIGFuZCBjYXB0dXJlIG9wZXJhdGlvbnMuCkBAIC0yNTMsNiArMjcwLDkgQEAKIC8qIGNvZGVjIHJlZ2lzdGVyIGJpdCBhY2Nlc3MgKi8KIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworaW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSk7CiBpbnQgc25kX3NvY190ZXN0X2JpdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKQEAgLTQwMiw2ICs0MjIsMTAgQEAKIAlzaG9ydCByZWdfY2FjaGVfc2l6ZTsKIAlzaG9ydCByZWdfY2FjaGVfc3RlcDsKIAorCXVuc2lnbmVkIGludCBpZGxlX2JpYXNfb2ZmOjE7IC8qIFVzZSBCSUFTX09GRiBpbnN0ZWFkIG9mIFNUQU5EQlkgKi8KKwl1bnNpZ25lZCBpbnQgY2FjaGVfb25seToxOyAgLyogU3VwcHJlc3Mgd3JpdGVzIHRvIGhhcmR3YXJlICovCisJdW5zaWduZWQgaW50IGNhY2hlX3N5bmM6MTsgLyogQ2FjaGUgbmVlZHMgdG8gYmUgc3luY2VkIHRvIGhhcmR3YXJlICovCisKIAkvKiBkYXBtICovCiAJdTMyIHBvcF90aW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgZGFwbV93aWRnZXRzOwpAQCAtNDk3LDYgKzUyMSw4IEBACiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NhcmQgKiwKIAkJCSAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKTsKIAorCWxvbmcgcG1kb3duX3RpbWU7CisKIAkvKiBDUFUgPC0tPiBDb2RlYyBEQUkgbGlua3MgICovCiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOwogCWludCBudW1fbGlua3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCmluZGV4IDU4NThkMDYuLmFjMDY2NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIHN0cnVjdCB0bHYzMjBkYWMzM19wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcG93ZXJfZ3BpbzsKKwl1OCBidXJzdF9iY2xrZGl2OwogfTsKIAogI2VuZGlmIC8qIF9fVExWMzIwREFDMzNfUExBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmggYi9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmgKaW5kZXggZThjOTAxZS4uZTI5ZmRlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaApAQCAtMjMsNyArMjMsMTMgQEAKICNpZm5kZWYgVFBBNjEzMEEyX1BMQVRfSAogI2RlZmluZSBUUEE2MTMwQTJfUExBVF9ICiAKK2VudW0gdHBhX21vZGVsIHsKKwlUUEE2MTMwQTIsCisJVFBBNjE0MEEyLAorfTsKKwogc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhIHsKKwllbnVtIHRwYV9tb2RlbCBpZDsKIAlpbnQgcG93ZXJfZ3BpbzsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggMjI5MzkxNC4uN2ZlZDIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaCAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4yMSIKKyNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMjIuMSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtMjAwMC5oIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM4OGNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogbGludXgvc291bmQvd20yMDAwLmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV00yMDAwCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1dNMjAwMF9ICisjZGVmaW5lIF9fTElOVVhfU05EX1dNMjAwMF9ICisKK3N0cnVjdCB3bTIwMDBfcGxhdGZvcm1fZGF0YSB7CisJLyoqIEZpbGVuYW1lIGZvciBzeXN0ZW0tc3BlY2lmaWMgaW1hZ2UgdG8gZG93bmxvYWQgdG8gZGV2aWNlLiAqLworCWNvbnN0IGNoYXIgKmRvd25sb2FkX2ZpbGU7CisKKwkvKiogRGl2aWRlIE1DTEsgYnkgMiBmb3Igc3lzdGVtIGNsb2NrPyAqLworCXVuc2lnbmVkIGludCBtY2xrZGl2MjoxOworCisJLyoqIERpc2FibGUgc3BlZWNoIGNsYXJpdHkgZW5oYW5jZW1lbnQsIGZvciB1c2Ugd2hlbiBhbgorCSAqIGV4dGVybmFsIGFsZ29yaXRobSBpcyB1c2VkLiAqLworCXVuc2lnbmVkIGludCBzcGVlY2hfZW5oX2Rpc2FibGU6MTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5MDQuaCBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2NTc1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODkwNAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisjZGVmaW5lIF9fTUZEX1dNODk5NF9QREFUQV9IX18KKworI2RlZmluZSBXTTg5MDRfRFJDX1JFR1MgNAorI2RlZmluZSBXTTg5MDRfRVFfUkVHUyAgMjUKKworLyoqCisgKiBEUkMgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGEgc2V0IG9mIHJlZ2lzdGVyCisgKiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLiAgQXQgcnVudGltZSBhbgorICogZW51bWVyYXRlZCBjb250cm9sIHdpbGwgYmUgcHJlc2VudGVkIGZvciBlYWNoIERSQyBibG9jayBhbGxvd2luZworICogdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSBjb25maWdyYXRpb24gdG8gdXNlLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIG1heSBiZSBnZW5lcmF0ZWQgYnkgaGFuZCBvciBieSB1c2luZyB0aGUgRFJDIGNvbnRyb2wKKyAqIHBhbmVsIHByb3ZpZGVkIGJ5IHRoZSBXSVNDRSAtIHNlZSAgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICogZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB3bTg5MDRfZHJjX2NmZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MTYgcmVnc1tXTTg5MDRfRFJDX1JFR1NdOworfTsKKworLyoqCisgKiBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsLCBzYW1wbGUKKyAqIHJhdGUgYW5kIHNldCBvZiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIFJlVHVuZSBNb2JpbGUKKyAqIGNvbnRyb2wgcGFuZWwgaW4gV0lTQ0UgLSBzZWUgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTA0X3JldHVuZV9tb2JpbGVfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByYXRlOworCXUxNiByZWdzW1dNODkwNF9FUV9SRUdTXTsKK307CisKK3N0cnVjdCB3bTg5MDRfcGRhdGEgeworCWludCBudW1fZHJjX2NmZ3M7CisJc3RydWN0IHdtODkwNF9kcmNfY2ZnICpkcmNfY2ZnczsKKworCWludCBudW1fcmV0dW5lX21vYmlsZV9jZmdzOworCXN0cnVjdCB3bTg5MDRfcmV0dW5lX21vYmlsZV9jZmcgKnJldHVuZV9tb2JpbGVfY2ZnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5NTUuaCBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODk1NQorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1dNODk1NV9QREFUQV9IX18KKyNkZWZpbmUgX19XTTg5NTVfUERBVEFfSF9fCisKK3N0cnVjdCB3bTg5NTVfcGRhdGEgeworCS8qIENvbmZpZ3VyZSBMT1VUMi9ST1VUMiB0byBkcml2ZSBhIHNwZWFrZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3V0Ml9zcGVha2VyOjE7CisKKwkvKiBDb25maWd1cmUgTU9OT0lOKy8tIGluIGRpZmZlcmVudGlhbCBtb2RlICovCisJdW5zaWduZWQgaW50IG1vbm9pbl9kaWZmOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaAppbmRleCBhODcwYmExLi41YzFkY2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCkBAIC0yMCwxNCArMjAsMTcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5mbGFncyA9ICh0cnlsb2NrID8gMSA6IDApIHwgKHJlYWQgPyAyIDogMCk7CiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyVzJXMiLCAoX19lbnRyeS0+ZmxhZ3MgJiAxKSA/ICJ0cnkgIiA6ICIiLAorCVRQX3ByaW50aygiJXAgJXMlcyVzIiwgX19lbnRyeS0+bG9ja2RlcF9hZGRyLAorCQkgIChfX2VudHJ5LT5mbGFncyAmIDEpID8gInRyeSAiIDogIiIsCiAJCSAgKF9fZW50cnktPmZsYWdzICYgMikgPyAicmVhZCAiIDogIiIsCiAJCSAgX19nZXRfc3RyKG5hbWUpKQogKTsKQEAgLTQwLDEzICs0MywxNiBAQAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19zdHJpbmcobmFtZSwgbG9jay0+bmFtZSkKKwkJX19maWVsZCh2b2lkICosIGxvY2tkZXBfYWRkcikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyIsIF9fZ2V0X3N0cihuYW1lKSkKKwlUUF9wcmludGsoIiVwICVzIiwKKwkJICBfX2VudHJ5LT5sb2NrZGVwX2FkZHIsIF9fZ2V0X3N0cihuYW1lKSkKICk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCkBAIC01OSwxMyArNjUsMTYgQEAKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCisJVFBfcHJpbnRrKCIlcCAlcyIsCisJCSAgX19lbnRyeS0+bG9ja2RlcF9hZGRyLCBfX2dldF9zdHIobmFtZSkpCiApOwogCiBUUkFDRV9FVkVOVChsb2NrX2FjcXVpcmVkLApAQCAtNzUsMTYgKzg0LDE4IEBACiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIHdhaXRfdXNlYykKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB3YWl0X25zZWNfcmVtKQorCQlfX2ZpZWxkKHM2NCwgd2FpdF9uc2VjKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCisKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19hc3NpZ25fc3RyKG5hbWUsIGxvY2stPm5hbWUpOwotCQlfX2VudHJ5LT53YWl0X25zZWNfcmVtID0gZG9fZGl2KHdhaXR0aW1lLCBOU0VDX1BFUl9VU0VDKTsKLQkJX19lbnRyeS0+d2FpdF91c2VjID0gKHVuc2lnbmVkIGxvbmcpIHdhaXR0aW1lOworCQlfX2VudHJ5LT53YWl0X25zZWMgPSB3YWl0dGltZTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAotCVRQX3ByaW50aygiJXMgKCVsdS4lMDNsdSB1cykiLCBfX2dldF9zdHIobmFtZSksIF9fZW50cnktPndhaXRfdXNlYywKLQkJCQkgICAgICAgX19lbnRyeS0+d2FpdF9uc2VjX3JlbSkKKwlUUF9wcmludGsoIiVwICVzICglbGx1IG5zKSIsIF9fZW50cnktPmxvY2tkZXBfYWRkciwKKwkJICBfX2dldF9zdHIobmFtZSksCisJCSAgX19lbnRyeS0+d2FpdF9uc2VjKQogKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBjNmZlMDNlLi4wODA0Y2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTY1LDcgKzY1LDggQEAKIAl9OwogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI25hbWUKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfIyNuYW1lCiAKICN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKQEAgLTEzMSwxMzAgKzEzMiw2IEBACiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogLyoKLSAqIFNldHVwIHRoZSBzaG93aW5nIGZvcm1hdCBvZiB0cmFjZSBwb2ludC4KLSAqCi0gKiBpbnQKLSAqIGZ0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCi0gKiB7Ci0gKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7Ci0gKglpbnQgcmV0OwotICoKLSAqCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgI3R5cGUgIiAiICNpdGVtICI7IgotICoJCQkgICAgICAgIiBvZmZzZXQ6JXU7IHNpemU6JXU7XG4iLAotICoJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsLCBpdGVtKSwKLSAqCQkJICAgICAgIHNpemVvZihmaWVsZC50eXBlKSk7Ci0gKgotICogfQotICovCi0KLSN1bmRlZiBUUF9TVFJVQ1RfX2VudHJ5Ci0jZGVmaW5lIFRQX1NUUlVDVF9fZW50cnkoYXJncy4uLikgYXJncwotCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZmllbGRfZXh0Ci0jZGVmaW5lIF9fZmllbGRfZXh0KHR5cGUsIGl0ZW0sIGZpbHRlcl90eXBlKQlfX2ZpZWxkKHR5cGUsIGl0ZW0pCi0KLSN1bmRlZiBfX2FycmF5Ci0jZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6X19kYXRhX2xvYyAiICN0eXBlICJbXSAiICNpdGVtICI7XHQiXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJICAgICAgIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksCSAgICAgICBcCi0JCQkJCV9fZGF0YV9sb2NfIyNpdGVtKSwJCSAgICAgICBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJICAgICAgIFwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX3N0cmluZwotI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKLQotI3VuZGVmIF9fZW50cnkKLSNkZWZpbmUgX19lbnRyeSBSRUMKLQotI3VuZGVmIF9fcHJpbnRfc3ltYm9saWMKLSN1bmRlZiBfX2dldF9keW5hbWljX2FycmF5Ci0jdW5kZWYgX19nZXRfc3RyCi0KLSN1bmRlZiBUUF9wcmludGsKLSNkZWZpbmUgVFBfcHJpbnRrKGZtdCwgYXJncy4uLikgIlwiJXNcIiwgJXNcbiIsIGZtdCwgX19zdHJpbmdpZnkoYXJncykKLQotI3VuZGVmIFRQX2Zhc3RfYXNzaWduCi0jZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKLQotI3VuZGVmIFRQX3BlcmZfYXNzaWduCi0jZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCi0KLSN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCi0jZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCVwKLQkJCSAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHN0cnVjdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyNjYWxsKHVudXNlZCwgcyk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19Ci0KLSN1bmRlZiBERUZJTkVfRVZFTlQKLSNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykKLQotI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAotI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKLQkJICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyN0ZW1wbGF0ZSh1bnVzZWQsIHMpOwkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLQotLyoKICAqIFN0YWdlIDMgb2YgdGhlIHRyYWNlIGV2ZW50cy4KICAqCiAgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudHMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgpAQCAtMzIzLDcgKzIwMCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIGVudW0gcHJpbnRfbGluZV90CQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI2NhbGwoaW50IGV2ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLAkJXAogCQkJICAgIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXApAQCAtMzU2LDcgKzIzMyw3IEBACiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJCQlcCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitzdGF0aWMgbm90cmFjZSBlbnVtIHByaW50X2xpbmVfdAkJCQkJXAogZnRyYWNlX3Jhd19vdXRwdXRfIyNuYW1lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI3RlbXBsYXRlKGV2ZW50XyMjbmFtZS5pZCwJCVwKQEAgLTM2NSw3ICsyNDIsNyBAQAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CQkJCQkJXAorc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKIGZ0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXApAQCAtNDMxLDcgKzMwOCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCitzdGF0aWMgaW50IG5vdHJhY2UJCQkJCQkJXAogZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCkBAIC00NzksNyArMzU2LDcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgJCQkJXAorc3RhdGljIGlubGluZSBub3RyYWNlIGludCBmdHJhY2VfZ2V0X29mZnNldHNfIyNjYWxsKAkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgKl9fZGF0YV9vZmZzZXRzLCBwcm90bykgICAgICAgXAogewkJCQkJCQkJCVwKIAlpbnQgX19kYXRhX3NpemUgPSAwOwkJCQkJCVwKQEAgLTQ5OSw3ICszNzYsNyBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIC8qCiAgKiBHZW5lcmF0ZSB0aGUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJhY2Vwb2ludCBwZXJmX2V2ZW50IHN1cHBvcnQuCkBAIC01MjYsMTIgKzQwMywxNCBAQAogCQkJCQkJCQkJXAogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKHByb3RvKTsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKK3N0YXRpYyBub3RyYWNlIGludAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNuYW1lKGZ0cmFjZV9wcm9maWxlXyMjbmFtZSk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI25hbWUoZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKTsJCQlcCiB9CkBAIC01NDIsNyArNDIxLDcgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAvKgogICogU3RhZ2UgNCBvZiB0aGUgdHJhY2UgZXZlbnRzLgpAQCAtNjIyLDEyICs1MDEsMTEgQEAKICAqCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwKICAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAogICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAotICoJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfPGNhbGw+LAogICogfQogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2RlZmluZSBfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCiAJLnByb2ZpbGVfZW5hYmxlID0gZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCwJCQlcCkBAIC02MzUsNyArNTEzLDcgQEAKIAogI2Vsc2UKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKICN1bmRlZiBfX2VudHJ5CiAjZGVmaW5lIF9fZW50cnkgZW50cnkKQEAgLTY1NywxMCArNTM1LDE3IEBACiAjZGVmaW5lIF9fYXNzaWduX3N0cihkc3QsIHNyYykJCQkJCQlcCiAJc3RyY3B5KF9fZ2V0X3N0cihkc3QpLCBzcmMpOwogCisjdW5kZWYgVFBfZmFzdF9hc3NpZ24KKyNkZWZpbmUgVFBfZmFzdF9hc3NpZ24oYXJncy4uLikgYXJncworCisjdW5kZWYgVFBfcGVyZl9hc3NpZ24KKyNkZWZpbmUgVFBfcGVyZl9hc3NpZ24oYXJncy4uLikKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF9pZF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsLCBcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJCSAgICAgICBwcm90bykJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XApAQCAtNjk3LDE3ICs1ODIsMTkgQEAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQkJXAorc3RhdGljIG5vdHJhY2Ugdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQlcCiB7CQkJCQkJCQkJXAogCWZ0cmFjZV9yYXdfZXZlbnRfaWRfIyN0ZW1wbGF0ZSgmZXZlbnRfIyNjYWxsLCBhcmdzKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSBpbnQJCQkJCQkJXAorZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXApAQCAtNzIyLDggKzYwOSwyMCBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAorI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBSRUMKKworI3VuZGVmIF9fcHJpbnRfZmxhZ3MKKyN1bmRlZiBfX3ByaW50X3N5bWJvbGljCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI3VuZGVmIF9fZ2V0X3N0cgorCisjdW5kZWYgVFBfcHJpbnRrCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiIgZm10ICJcIiwgIiAgX19zdHJpbmdpZnkoYXJncykKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKLSNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCkBAIC03MzcsNyArNjM2LDcgQEAKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyN0ZW1wbGF0ZSwJCVwKKwkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI3RlbXBsYXRlLAlcCiAJX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAogfQpAQCAtNzQ1LDYgKzY0NCw4IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKKwkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKQEAgLTc1NCw3ICs2NTUsNyBAQAogCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCQlcCiAJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAogCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKLQkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KQEAgLTgzNSw3ICs3MzYsMTcgQEAKICAqIH0KICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBlbnRyeQorCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI2RlZmluZSBfX2dldF9keW5hbWljX2FycmF5KGZpZWxkKQlcCisJCSgodm9pZCAqKV9fZW50cnkgKyAoX19lbnRyeS0+X19kYXRhX2xvY18jI2ZpZWxkICYgMHhmZmZmKSkKKworI3VuZGVmIF9fZ2V0X3N0cgorI2RlZmluZSBfX2dldF9zdHIoZmllbGQpIChjaGFyICopX19nZXRfZHluYW1pY19hcnJheShmaWVsZCkKIAogI3VuZGVmIF9fcGVyZl9hZGRyCiAjZGVmaW5lIF9fcGVyZl9hZGRyKGEpIF9fYWRkciA9IChhKQpAQCAtODQ1LDI3ICs3NTYsMTcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIHZvaWQJCQkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIHZvaWQJCQkJCQkJXAogZnRyYWNlX3Byb2ZpbGVfdGVtcGxfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJICAgIHByb3RvKQkJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XAotCWV4dGVybiBpbnQgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKTsJCVwKLQlleHRlcm4gdm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KTsJXAotCWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50LCB1NjQsIHU2NCwgdm9pZCAqLCBpbnQpOwkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCi0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCiAJaW50IF9fZW50cnlfc2l6ZTsJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplOwkJCQkJCVwKLQljaGFyICp0cmFjZV9idWY7CQkJCQkJXAotCWNoYXIgKnJhd19kYXRhOwkJCQkJCQlcCi0JaW50IF9fY3B1OwkJCQkJCQlcCiAJaW50IHJjdHg7CQkJCQkJCVwKLQlpbnQgcGM7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJX19lbnRyeV9zaXplID0gQUxJR04oX19kYXRhX3NpemUgKyBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1MzIpLFwKQEAgLTg3NSw0NyArNzc2LDIxIEBACiAJaWYgKFdBUk5fT05DRShfX2VudHJ5X3NpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwJCVwKIAkJICAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkJCVwKIAkJcmV0dXJuOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwkJCVwKLQlpZiAocmN0eCA8IDApCQkJCQkJCVwKLQkJZ290byBlbmRfcmVjdXJzaW9uOwkJCQkJXAotCQkJCQkJCQkJXAotCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChpbl9ubWkoKSkJCQkJCQkJXAotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsJXAotCWVsc2UJCQkJCQkJCVwKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsJCVwKLQkJCQkJCQkJCVwKLQlpZiAoIXRyYWNlX2J1ZikJCQkJCQkJXAotCQlnb3RvIGVuZDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsJCQlcCi0JCQkJCQkJCQlcCi0JKih1NjQgKikoJnJhd19kYXRhW19fZW50cnlfc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwkJXAotCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKXJhd19kYXRhOwkJCVwKLQllbnQgPSAmZW50cnktPmVudDsJCQkJCQlcCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwkJXAotCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOwkJCQkJXAotCQkJCQkJCQkJXAorCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKAlcCisJCV9fZW50cnlfc2l6ZSwgZXZlbnRfY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsJXAorCWlmICghZW50cnkpCQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCiAJdHN0cnVjdAkJCQkJCQkJXAogCQkJCQkJCQkJXAogCXsgYXNzaWduOyB9CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAotCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCi0JCQkJCQkJCQlcCi1lbmQ6CQkJCQkJCQkJXAotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CQkJXAotZW5kX3JlY3Vyc2lvbjoJCQkJCQkJCVwKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwkJCQkJXAorCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQoZW50cnksIF9fZW50cnlfc2l6ZSwgcmN0eCwgX19hZGRyLAlcCisJCQkgICAgICAgX19jb3VudCwgaXJxX2ZsYWdzKTsJCQlcCiB9CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCQlcCitzdGF0aWMgbm90cmFjZSB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCVwKIHsJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwlcCiAJCQkJCQkJCVwKQEAgLTkyNyw3ICs4MDIsNyBAQAogCURFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjdW5kZWYgX1RSQUNFX1BST0ZJTEVfSU5JVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaCBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCmluZGV4IDk2MWZkYTMuLjAzODcxMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCkBAIC0zNCwxMCArMzQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKTsKIGV4dGVybiBpbnQgaW5pdF9zeXNjYWxsX3RyYWNlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKLWV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOwotZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CkBAIC00OSwxMiArNDUsMTIgQEAKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpOwogZW51bSBwcmludF9saW5lX3QgcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7Ci0KICNlbmRpZgogCiAjZW5kaWYgLyogX1RSQUNFX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCmluZGV4IDI4ODIwNTQuLjJjYzg5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KICNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLwogCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DIF9JT1coJ0YnLCAweDIwLCBfX3UzMikKKwogc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHsKIAl1bnNpZ25lZCBsb25nIGxkbXQycjsKIAl1bnNpZ25lZCBsb25nIGxkbXQzcjsKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBkOTVjYTdjLi4wODlhMjMwIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0zOTYsNiArMzk2LDIyIEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIFJDVV9GQVNUX05PX0haCisJYm9vbCAiQWNjZWxlcmF0ZSBsYXN0IG5vbi1keW50aWNrLWlkbGUgQ1BVJ3MgZ3JhY2UgcGVyaW9kcyIKKwlkZXBlbmRzIG9uIFRSRUVfUkNVICYmIE5PX0haICYmIFNNUAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gYXR0ZW1wdCB0byBhY2NlbGVyYXRlIGdyYWNlIHBlcmlvZHMKKwkgIGluIG9yZGVyIHRvIGFsbG93IHRoZSBmaW5hbCBDUFUgdG8gZW50ZXIgZHludGlja3MtaWRsZSBzdGF0ZQorCSAgbW9yZSBxdWlja2x5LiAgT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgb3B0aW9uIGluY3JlYXNlcyB0aGUKKwkgIG92ZXJoZWFkIG9mIHRoZSBkeW50aWNrcy1pZGxlIGNoZWNraW5nLCBwYXJ0aWN1bGFybHkgb24gc3lzdGVtcworCSAgd2l0aCBsYXJnZSBudW1iZXJzIG9mIENQVXMuCisKKwkgIFNheSBZIGlmIGVuZXJneSBlZmZpY2llbmN5IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50LCBwYXJ0aWN1bGFybHkKKwkgIAlpZiB5b3UgaGF2ZSByZWxhdGl2ZWx5IGZldyBDUFVzLgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIFRSRUVfUkNVX1RSQUNFCiAJZGVmX2Jvb2wgUkNVX1RSQUNFICYmICggVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC00NDUsNTcgKzQ2MSw2IEBACiBjb25maWcgSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSwogCWJvb2wKIAotY29uZmlnIEdST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVQotCSAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4KLQkgIEluIG9yZGVyIHRvIGNyZWF0ZSBhIGdyb3VwIGZyb20gYXJiaXRyYXJ5IHNldCBvZiBwcm9jZXNzZXMsIHVzZQotCSAgQ09ORklHX0NHUk9VUFMuIChTZWUgQ29udHJvbCBHcm91cCBzdXBwb3J0LikKLQotY29uZmlnIEZBSVJfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUiIKLQlkZXBlbmRzIG9uIEdST1VQX1NDSEVECi0JZGVmYXVsdCBHUk9VUF9TQ0hFRAotCi1jb25maWcgUlRfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIHlvdSBleHBsaWNpdGx5IGFsbG9jYXRlIHJlYWwgQ1BVIGJhbmR3aWR0aAotCSAgdG8gdXNlcnMgb3IgY29udHJvbCBncm91cHMgKGRlcGVuZGluZyBvbiB0aGUgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQkgIHNldHRpbmcgYmVsb3cuIElmIGVuYWJsZWQsIGl0IHdpbGwgYWxzbyBtYWtlIGl0IGltcG9zc2libGUgdG8KLQkgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGUKLQkgIHJlYWx0aW1lIGJhbmR3aWR0aCBmb3IgdGhlbS4KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLWNob2ljZQotCWRlcGVuZHMgb24gR1JPVVBfU0NIRUQKLQlwcm9tcHQgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQlkZWZhdWx0IFVTRVJfU0NIRUQKLQotY29uZmlnIFVTRVJfU0NIRUQKLQlib29sICJ1c2VyIGlkIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHdpbGwgY2hvb3NlIHVzZXJpZCBhcyB0aGUgYmFzaXMgZm9yIGdyb3VwaW5nCi0JICB0YXNrcywgdGh1cyBwcm92aWRpbmcgZXF1YWwgQ1BVIGJhbmR3aWR0aCB0byBlYWNoIHVzZXIuCi0KLWNvbmZpZyBDR1JPVVBfU0NIRUQKLQlib29sICJDb250cm9sIGdyb3VwcyIKLSAJZGVwZW5kcyBvbiBDR1JPVVBTCi0gCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFyYml0cmFyeSB0YXNrIGdyb3VwcwotCSAgdXNpbmcgdGhlICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtIGFuZCBjb250cm9sCi0JICB0aGUgY3B1IGJhbmR3aWR0aCBhbGxvY2F0ZWQgdG8gZWFjaCBzdWNoIHRhc2sgZ3JvdXAuCi0JICBSZWZlciB0byBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uIG9uICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtLgotCi1lbmRjaG9pY2UKLQogbWVudWNvbmZpZyBDR1JPVVBTCiAJYm9vbGVhbiAiQ29udHJvbCBHcm91cCBzdXBwb3J0IgogCWhlbHAKQEAgLTYxNiw2ICs1ODEsMzYgQEAKIAkgIE5vdywgbWVtb3J5IHVzYWdlIG9mIHN3YXBfY2dyb3VwIGlzIDIgYnl0ZXMgcGVyIGVudHJ5LiBJZiBzd2FwIHBhZ2UKIAkgIHNpemUgaXMgNDA5NmJ5dGVzLCA1MTJrIHBlciAxR2J5dGVzIG9mIHN3YXAuCiAKK21lbnVjb25maWcgQ0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDR1JPVVBTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIGxldHMgQ1BVIHNjaGVkdWxlciByZWNvZ25pemUgdGFzayBncm91cHMgYW5kIGNvbnRyb2wgQ1BVCisJICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXAKKwkgIHRhc2tzLgorCitpZiBDR1JPVVBfU0NIRUQKK2NvbmZpZyBGQUlSX0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfT1RIRVIiCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IENHUk9VUF9TQ0hFRAorCitjb25maWcgUlRfR1JPVVBfU0NIRUQKKwlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGZlYXR1cmUgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsIENQVSBiYW5kd2lkdGgKKwkgIHRvIHVzZXJzIG9yIGNvbnRyb2wgZ3JvdXBzIChkZXBlbmRpbmcgb24gdGhlICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCisJICBzZXR0aW5nIGJlbG93LiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvCisJICBzY2hlZHVsZSByZWFsdGltZSB0YXNrcyBmb3Igbm9uLXJvb3QgdXNlcnMgdW50aWwgeW91IGFsbG9jYXRlCisJICByZWFsdGltZSBiYW5kd2lkdGggZm9yIHRoZW0uCisJICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitlbmRpZiAjQ0dST1VQX1NDSEVECisKIGVuZGlmICMgQ0dST1VQUwogCiBjb25maWcgTU1fT1dORVIKQEAgLTk3NiwxOSArOTcxLDYgQEAKIAogCSAgU2F5IFkgaWYgdW5zdXJlLgogCi1jb25maWcgRVZFTlRfUFJPRklMRQotCWJvb2wgIlRyYWNlcG9pbnQgcHJvZmlsaW5nIHNvdXJjZXMiCi0JZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBFVkVOVF9UUkFDSU5HCi0JZGVmYXVsdCB5Ci0JaGVscAotCSBBbGxvdyB0aGUgdXNlIG9mIHRyYWNlcG9pbnRzIGFzIHNvZnR3YXJlIHBlcmZvcm1hbmNlIGV2ZW50cy4KLQotCSBXaGVuIHRoaXMgaXMgZW5hYmxlZCwgeW91IGNhbiBjcmVhdGUgcGVyZiBldmVudHMgYmFzZWQgb24KLQkgdHJhY2Vwb2ludHMgdXNpbmcgUEVSRl9UWVBFX1RSQUNFUE9JTlQgYW5kIHRoZSB0cmFjZXBvaW50IElECi0JIGZvdW5kIGluIGRlYnVnZnM6Ly90cmFjaW5nL2V2ZW50cy8qLyovaWQuIChUaGUgLWUvLS1ldmVudHMKLQkgb3B0aW9uIHRvIHRoZSBwZXJmIHRvb2wgY2FuIHBhcnNlIGFuZCBpbnRlcnByZXQgc3ltYm9saWMKLQkgdHJhY2Vwb2ludHMsIGluIHRoZSBzdWJzeXN0ZW06dHJhY2Vwb2ludF9uYW1lIGZvcm1hdC4pCi0KIGNvbmZpZyBQRVJGX0NPVU5URVJTCiAJYm9vbCAiS2VybmVsIHBlcmZvcm1hbmNlIGNvdW50ZXJzIChvbGQgY29uZmlnIG9wdGlvbikiCiAJZGVwZW5kcyBvbiBIQVZFX1BFUkZfRVZFTlRTCkBAIC0xMTEyLDcgKzEwOTQsNyBAQAogCSAgU2VlIERvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJQcm9maWxpbmcgc3VwcG9ydCIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCiAJICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KQEAgLTEyNjIsNCArMTI0NCw4IEBACiBjb25maWcgUFJFRU1QVF9OT1RJRklFUlMKIAlib29sCiAKK2NvbmZpZyBQQURBVEEKKwlkZXBlbmRzIG9uIFNNUAorCWJvb2wKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5sb2NrcyIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMTA2ZTAyZC4uNDBhYWEwMiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTE0OSw2ICsxNDksMjAgQEAKIAogZWFybHlfcGFyYW0oIm5vc21wIiwgbm9zbXApOwogCisvKiB0aGlzIGlzIGhhcmQgbGltaXQgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5yY3B1cyhjaGFyICpzdHIpCit7CisJaW50IG5yX2NwdXM7CisKKwlnZXRfb3B0aW9uKCZzdHIsICZucl9jcHVzKTsKKwlpZiAobnJfY3B1cyA+IDAgJiYgbnJfY3B1cyA8IG5yX2NwdV9pZHMpCisJCW5yX2NwdV9pZHMgPSBucl9jcHVzOworCisJcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJucl9jcHVzIiwgbnJjcHVzKTsKKwogc3RhdGljIGludCBfX2luaXQgbWF4Y3B1cyhjaGFyICpzdHIpCiB7CiAJZ2V0X29wdGlvbigmc3RyLCAmc2V0dXBfbWF4X2NwdXMpOwpAQCAtNDE2LDcgKzQzMCw5IEBACiAJa2VybmVsX3RocmVhZChrZXJuZWxfaW5pdCwgTlVMTCwgQ0xPTkVfRlMgfCBDTE9ORV9TSUdIQU5EKTsKIAludW1hX2RlZmF1bHRfcG9saWN5KCk7CiAJcGlkID0ga2VybmVsX3RocmVhZChrdGhyZWFkZCwgTlVMTCwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyk7CisJcmN1X3JlYWRfbG9jaygpOwogCWt0aHJlYWRkX3Rhc2sgPSBmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZCwgJmluaXRfcGlkX25zKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAkvKgpAQCAtNTg0LDYgKzYwMCw3IEBACiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJfQogCXJjdV9pbml0KCk7CisJcmFkaXhfdHJlZV9pbml0KCk7CiAJLyogaW5pdCBzb21lIGxpbmtzIGJlZm9yZSBpbml0X0lTQV9pcnFzKCkgKi8KIAllYXJseV9pcnFfaW5pdCgpOwogCWluaXRfSVJRKCk7CkBAIC02NTcsNyArNjc0LDYgQEAKIAlwcm9jX2NhY2hlc19pbml0KCk7CiAJYnVmZmVyX2luaXQoKTsKIAlrZXlfaW5pdCgpOwotCXJhZGl4X3RyZWVfaW5pdCgpOwogCXNlY3VyaXR5X2luaXQoKTsKIAl2ZnNfY2FjaGVzX2luaXQodG90YWxyYW1fcGFnZXMpOwogCXNpZ25hbHNfaW5pdCgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDg2NGZmNzUuLjdiOTc0NjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDggQEAKIAkgICAga3RocmVhZC5vIHdhaXQubyBrZmlmby5vIHN5c19uaS5vIHBvc2l4LWNwdS10aW1lcnMubyBtdXRleC5vIFwKIAkgICAgaHJ0aW1lci5vIHJ3c2VtLm8gbnNwcm94eS5vIHNyY3UubyBzZW1hcGhvcmUubyBcCiAJICAgIG5vdGlmaWVyLm8ga3N5c2ZzLm8gcG1fcW9zX3BhcmFtcy5vIHNjaGVkX2Nsb2NrLm8gY3JlZC5vIFwKLQkgICAgYXN5bmMubworCSAgICBhc3luYy5vIHJhbmdlLm8KK29iai0kKENPTkZJR19IQVZFX0VBUkxZX1JFUykgKz0gZWFybHlfcmVzLm8KIG9iai15ICs9IGdyb3Vwcy5vCiAKIGlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKQEAgLTEwMCw2ICsxMDEsNyBAQAogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBwZXJmX2V2ZW50Lm8KIG9iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpICs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSKSArPSB1c2VyLXJldHVybi1ub3RpZmllci5vCitvYmotJChDT05GSUdfUEFEQVRBKSArPSBwYWRhdGEubwogCiBpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KQogIyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSA8YWxhbkBsaW51eGNhcmUuY29tLmF1PiwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzCmRpZmYgLS1naXQgYS9rZXJuZWwvY2FwYWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuYwppbmRleCA3Zjg3NmU2Li45ZTQ2OTdlIDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCisrKyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCWlmIChwaWQgJiYgKHBpZCAhPSB0YXNrX3BpZF92bnIoY3VycmVudCkpKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0OwogCi0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAogCQl0YXJnZXQgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAoIXRhcmdldCkKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBzZWN1cml0eV9jYXBnZXQodGFyZ2V0LCBwRXAsIHBJcCwgcFBwKTsKIAotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0gZWxzZQogCQlyZXQgPSBzZWN1cml0eV9jYXBnZXQoY3VycmVudCwgcEVwLCBwSXAsIHBQcCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBhYTNiZWU1Li40ZmQ5MGUxIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTY2LDYgKzE2NywyMCBAQAogICovCiBzdGF0aWMgaW50IG5lZWRfZm9ya2V4aXRfY2FsbGJhY2sgX19yZWFkX21vc3RseTsKIAorI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitpbnQgY2dyb3VwX2xvY2tfaXNfaGVsZCh2b2lkKQoreworCXJldHVybiBsb2NrZGVwX2lzX2hlbGQoJmNncm91cF9tdXRleCk7Cit9CisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KK2ludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIG11dGV4X2lzX2xvY2tlZCgmY2dyb3VwX211dGV4KTsKK30KKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KKworRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX2xvY2tfaXNfaGVsZCk7CisKIC8qIGNvbnZlbmllbnQgdGVzdHMgZm9yIHRoZXNlIGJpdHMgKi8KIGlubGluZSBpbnQgY2dyb3VwX2lzX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9lYXJseV9yZXMuYyBiL2tlcm5lbC9lYXJseV9yZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2IyYzY2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2Vhcmx5X3Jlcy5jCkBAIC0wLDAgKzEsNTc4IEBACisvKgorICogZWFybHlfcmVzLCBjb3VsZCBiZSB1c2VkIHRvIHJlcGxhY2UgYm9vdG1lbQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZWFybHlfcmVzLmg+CisKKy8qCisgKiBFYXJseSByZXNlcnZlZCBtZW1vcnkgYXJlYXMuCisgKi8KKy8qCisgKiBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBiaWdnZXIgZW5vdWdoIGJlZm9yZQorICogZmluZF9md19tZW1tYXBfYXJlYSBjb3VsZCBiZSB1c2VkCisgKi8KKyNkZWZpbmUgTUFYX0VBUkxZX1JFU19YIDMyCisKK3N0cnVjdCBlYXJseV9yZXMgeworCXU2NCBzdGFydCwgZW5kOworCWNoYXIgbmFtZVsxNV07CisJY2hhciBvdmVybGFwX29rOworfTsKK3N0YXRpYyBzdHJ1Y3QgZWFybHlfcmVzIGVhcmx5X3Jlc194W01BWF9FQVJMWV9SRVNfWF0gX19pbml0ZGF0YTsKKworc3RhdGljIGludCBtYXhfZWFybHlfcmVzIF9faW5pdGRhdGEgPSBNQVhfRUFSTFlfUkVTX1g7CitzdGF0aWMgc3RydWN0IGVhcmx5X3JlcyAqZWFybHlfcmVzIF9faW5pdGRhdGEgPSAmZWFybHlfcmVzX3hbMF07CitzdGF0aWMgaW50IGVhcmx5X3Jlc19jb3VudCBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBmaW5kX292ZXJsYXBwZWRfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWludCBpOworCXN0cnVjdCBlYXJseV9yZXMgKnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Vhcmx5X3JlcyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspIHsKKwkJciA9ICZlYXJseV9yZXNbaV07CisJCWlmIChlbmQgPiByLT5zdGFydCAmJiBzdGFydCA8IHItPmVuZCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpOworfQorCisvKgorICogRHJvcCB0aGUgaS10aCByYW5nZSBmcm9tIHRoZSBlYXJseSByZXNlcnZhdGlvbiBtYXAsCisgKiBieSBjb3B5aW5nIGFueSBoaWdoZXIgcmFuZ2VzIGRvd24gb25lIG92ZXIgaXQsIGFuZAorICogY2xlYXJpbmcgd2hhdCBoYWQgYmVlbiB0aGUgbGFzdCBzbG90LgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZHJvcF9yYW5nZShpbnQgaSkKK3sKKwlpbnQgajsKKworCWZvciAoaiA9IGkgKyAxOyBqIDwgbWF4X2Vhcmx5X3JlcyAmJiBlYXJseV9yZXNbal0uZW5kOyBqKyspCisJCTsKKworCW1lbW1vdmUoJmVhcmx5X3Jlc1tpXSwgJmVhcmx5X3Jlc1tpICsgMV0sCisJICAgICAgIChqIC0gMSAtIGkpICogc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpKTsKKworCWVhcmx5X3Jlc1tqIC0gMV0uZW5kID0gMDsKKwllYXJseV9yZXNfY291bnQtLTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGRyb3BfcmFuZ2VfcGFydGlhbChpbnQgaSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCXU2NCBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CisJdTY0IG9sZF9zdGFydCwgb2xkX2VuZDsKKworCW9sZF9zdGFydCA9IGVhcmx5X3Jlc1tpXS5zdGFydDsKKwlvbGRfZW5kID0gZWFybHlfcmVzW2ldLmVuZDsKKwljb21tb25fc3RhcnQgPSBtYXgob2xkX3N0YXJ0LCBzdGFydCk7CisJY29tbW9uX2VuZCA9IG1pbihvbGRfZW5kLCBlbmQpOworCisJLyogbm8gb3ZlcmxhcCA/ICovCisJaWYgKGNvbW1vbl9zdGFydCA+PSBjb21tb25fZW5kKQorCQlyZXR1cm47CisKKwlpZiAob2xkX3N0YXJ0IDwgY29tbW9uX3N0YXJ0KSB7CisJCS8qIG1ha2UgaGVhZCBzZWdtZW50ICovCisJCWVhcmx5X3Jlc1tpXS5lbmQgPSBjb21tb25fc3RhcnQ7CisJCWlmIChvbGRfZW5kID4gY29tbW9uX2VuZCkgeworCQkJY2hhciBuYW1lWzE1XTsKKworCQkJLyoKKwkJCSAqIFNhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSBuYW1lLCBzaW5jZSB0aGUKKwkJCSAqIGVhcmx5X3JlcyBhcnJheSBjb3VsZCBnZXQgcmVzaXplZCBpbnNpZGUKKwkJCSAqIHJlc2VydmVfZWFybHlfd2l0aG91dF9jaGVjaygpIC0+CisJCQkgKiBfX2NoZWNrX2FuZF9kb3VibGVfZWFybHlfcmVzKCksIHdoaWNoIHdvdWxkCisJCQkgKiBtYWtlIHRoZSBjdXJyZW50IG5hbWUgcG9pbnRlciBpbnZhbGlkLgorCQkJICovCisJCQlzdHJuY3B5KG5hbWUsIGVhcmx5X3Jlc1tpXS5uYW1lLAorCQkJCQkgc2l6ZW9mKGVhcmx5X3Jlc1tpXS5uYW1lKSAtIDEpOworCQkJLyogYWRkIGFub3RoZXIgZm9yIGxlZnQgb3ZlciBvbiB0YWlsICovCisJCQlyZXNlcnZlX2Vhcmx5X3dpdGhvdXRfY2hlY2soY29tbW9uX2VuZCwgb2xkX2VuZCwgbmFtZSk7CisJCX0KKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChvbGRfZW5kID4gY29tbW9uX2VuZCkgeworCQkJLyogcmV1c2UgdGhlIGVudHJ5IGZvciB0YWlsIGxlZnQgKi8KKwkJCWVhcmx5X3Jlc1tpXS5zdGFydCA9IGNvbW1vbl9lbmQ7CisJCQlyZXR1cm47CisJCX0KKwkJLyogYWxsIGNvdmVyZWQgKi8KKwkJZHJvcF9yYW5nZShpKTsKKwl9Cit9CisKKy8qCisgKiBTcGxpdCBhbnkgZXhpc3RpbmcgcmFuZ2VzIHRoYXQ6CisgKiAgMSkgYXJlIG1hcmtlZCAnb3ZlcmxhcF9vaycsIGFuZAorICogIDIpIG92ZXJsYXAgd2l0aCB0aGUgc3RhdGVkIHJhbmdlIFtzdGFydCwgZW5kKQorICogaW50byB3aGF0ZXZlciBwb3J0aW9uIChpZiBhbnkpIG9mIHRoZSBleGlzdGluZyByYW5nZSBpcyBlbnRpcmVseQorICogYmVsb3cgb3IgZW50aXJlbHkgYWJvdmUgdGhlIHN0YXRlZCByYW5nZS4gIERyb3AgdGhlIHBvcnRpb24KKyAqIG9mIHRoZSBleGlzdGluZyByYW5nZSB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXRlZCByYW5nZSwKKyAqIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGNhbGxlciBvZiB0aGlzIHJvdXRpbmUgdG8gdGhlbiBhZGQgdGhhdAorICogc3RhdGVkIHJhbmdlIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCBhbnkgZXhpc3RpbmcgcmFuZ2UuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZWFybHlfcmVzICpyOworCXU2NCBsb3dlcl9zdGFydCwgbG93ZXJfZW5kOworCXU2NCB1cHBlcl9zdGFydCwgdXBwZXJfZW5kOworCWNoYXIgbmFtZVsxNV07CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Vhcmx5X3JlcyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspIHsKKwkJciA9ICZlYXJseV9yZXNbaV07CisKKwkJLyogQ29udGludWUgcGFzdCBub24tb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisJCWlmIChlbmQgPD0gci0+c3RhcnQgfHwgc3RhcnQgPj0gci0+ZW5kKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTGVhdmUgbm9uLW9rIG92ZXJsYXBzIGFzIGlzOyBsZXQgY2FsbGVyCisJCSAqIHBhbmljICJPdmVybGFwcGluZyBlYXJseSByZXNlcnZhdGlvbnMiCisJCSAqIHdoZW4gaXQgaGl0cyB0aGlzIG92ZXJsYXAuCisJCSAqLworCQlpZiAoIXItPm92ZXJsYXBfb2spCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhbiBvayBvdmVybGFwLiAgV2Ugd2lsbCBkcm9wIGl0IGZyb20gdGhlIGVhcmx5CisJCSAqIHJlc2VydmF0aW9uIG1hcCwgYW5kIGFkZCBiYWNrIGluIGFueSBub24tb3ZlcmxhcHBpbmcKKwkJICogcG9ydGlvbnMgKGxvd2VyIG9yIHVwcGVyKSBhcyBzZXBhcmF0ZSwgb3ZlcmxhcF9vaywKKwkJICogbm9uLW92ZXJsYXBwaW5nIHJhbmdlcy4KKwkJICovCisKKwkJLyogMS4gTm90ZSBhbnkgbm9uLW92ZXJsYXBwaW5nIChsb3dlciBvciB1cHBlcikgcmFuZ2VzLiAqLworCQlzdHJuY3B5KG5hbWUsIHItPm5hbWUsIHNpemVvZihuYW1lKSAtIDEpOworCisJCWxvd2VyX3N0YXJ0ID0gbG93ZXJfZW5kID0gMDsKKwkJdXBwZXJfc3RhcnQgPSB1cHBlcl9lbmQgPSAwOworCQlpZiAoci0+c3RhcnQgPCBzdGFydCkgeworCQkJbG93ZXJfc3RhcnQgPSByLT5zdGFydDsKKwkJCWxvd2VyX2VuZCA9IHN0YXJ0OworCQl9CisJCWlmIChyLT5lbmQgPiBlbmQpIHsKKwkJCXVwcGVyX3N0YXJ0ID0gZW5kOworCQkJdXBwZXJfZW5kID0gci0+ZW5kOworCQl9CisKKwkJLyogMi4gRHJvcCB0aGUgb3JpZ2luYWwgb2sgb3ZlcmxhcHBpbmcgcmFuZ2UgKi8KKwkJZHJvcF9yYW5nZShpKTsKKworCQlpLS07CQkvKiByZXN1bWUgZm9yLWxvb3Agb24gY29waWVkIGRvd24gZW50cnkgKi8KKworCQkvKiAzLiBBZGQgYmFjayBpbiBhbnkgbm9uLW92ZXJsYXBwaW5nIHJhbmdlcy4gKi8KKwkJaWYgKGxvd2VyX2VuZCkKKwkJCXJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayhsb3dlcl9zdGFydCwgbG93ZXJfZW5kLCBuYW1lKTsKKwkJaWYgKHVwcGVyX2VuZCkKKwkJCXJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1cHBlcl9zdGFydCwgdXBwZXJfZW5kLCBuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX3Jlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lLAorCQkJCQkJaW50IG92ZXJsYXBfb2spCit7CisJaW50IGk7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKKworCWkgPSBmaW5kX292ZXJsYXBwZWRfZWFybHkoc3RhcnQsIGVuZCk7CisJaWYgKGkgPj0gbWF4X2Vhcmx5X3JlcykKKwkJcGFuaWMoIlRvbyBtYW55IGVhcmx5IHJlc2VydmF0aW9ucyIpOworCXIgPSAmZWFybHlfcmVzW2ldOworCWlmIChyLT5lbmQpCisJCXBhbmljKCJPdmVybGFwcGluZyBlYXJseSByZXNlcnZhdGlvbnMgIgorCQkgICAgICAiJWxseC0lbGx4ICVzIHRvICVsbHgtJWxseCAlc1xuIiwKKwkJICAgICAgc3RhcnQsIGVuZCAtIDEsIG5hbWUgPyBuYW1lIDogIiIsIHItPnN0YXJ0LAorCQkgICAgICByLT5lbmQgLSAxLCByLT5uYW1lKTsKKwlyLT5zdGFydCA9IHN0YXJ0OworCXItPmVuZCA9IGVuZDsKKwlyLT5vdmVybGFwX29rID0gb3ZlcmxhcF9vazsKKwlpZiAobmFtZSkKKwkJc3RybmNweShyLT5uYW1lLCBuYW1lLCBzaXplb2Yoci0+bmFtZSkgLSAxKTsKKwllYXJseV9yZXNfY291bnQrKzsKK30KKworLyoKKyAqIEEgZmV3IGVhcmx5IHJlc2VydnRhdGlvbnMgY29tZSBoZXJlLgorICoKKyAqIFRoZSAnb3ZlcmxhcF9vaycgaW4gdGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIGRvZXMgLW5vdC0gbWVhbiBpdAorICogaXMgb2sgZm9yIHRoZXNlIHJlc2VydmF0aW9ucyB0byBvdmVybGFwIGFuIGVhcmxpZXIgcmVzZXJ2YXRpb24uCisgKiBSYXRoZXIgaXQgbWVhbnMgdGhhdCBpdCBpcyBvayBmb3Igc3Vic2VxdWVudCByZXNlcnZhdGlvbnMgdG8KKyAqIG92ZXJsYXAgdGhpcyBvbmUuCisgKgorICogVXNlIHRoaXMgZW50cnkgcG9pbnQgdG8gcmVzZXJ2ZSBlYXJseSByYW5nZXMgd2hlbiB5b3UgYXJlIGRvaW5nCisgKiBzbyBvdXQgb2YgIlBhcmFub2lhIiwgcmVzZXJ2aW5nIHBlcmhhcHMgbW9yZSBtZW1vcnkgdGhhbiB5b3UgbmVlZCwKKyAqIGp1c3QgaW4gY2FzZSwgYW5kIGRvbid0IG1pbmQgYSBzdWJzZXF1ZW50IG92ZXJsYXBwaW5nIHJlc2VydmF0aW9uCisgKiB0aGF0IGlzIGtub3duIHRvIGJlIG5lZWRlZC4KKyAqCisgKiBUaGUgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vaygpIGNhbGwgaGVyZSBpc24ndCByZWFsbHkgbmVlZGVkLgorICogSXQgd291bGQgYmUgbmVlZGVkIGlmIHdlIGhhZCB0d28gY29sbGlkaW5nICdvdmVybGFwX29rJworICogcmVzZXJ2YXRpb25zLCBzbyB0aGF0IHRoZSBzZWNvbmQgc3VjaCB3b3VsZCBub3QgcGFuaWMgb24gdGhlCisgKiBvdmVybGFwIHdpdGggdGhlIGZpcnN0LiAgV2UgZG9uJ3QgaGF2ZSBhbnkgc3VjaCBhcyBvZiB0aGlzCisgKiB3cml0aW5nLCBidXQgbWlnaHQgYXMgd2VsbCB0b2xlcmF0ZSBzdWNoIGlmIGl0IGhhcHBlbnMgaW4KKyAqIHRoZSBmdXR1cmUuCisgKi8KK3ZvaWQgX19pbml0IHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpCit7CisJZHJvcF9vdmVybGFwc190aGF0X2FyZV9vayhzdGFydCwgZW5kKTsKKwlfX3Jlc2VydmVfZWFybHkoc3RhcnQsIGVuZCwgbmFtZSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2NoZWNrX2FuZF9kb3VibGVfZWFybHlfcmVzKHU2NCBleF9zdGFydCwgdTY0IGV4X2VuZCkKK3sKKwl1NjQgc3RhcnQsIGVuZCwgc2l6ZSwgbWVtOworCXN0cnVjdCBlYXJseV9yZXMgKm5ldzsKKworCS8qIGRvIHdlIGhhdmUgZW5vdWdoIHNsb3RzIGxlZnQgPyAqLworCWlmICgobWF4X2Vhcmx5X3JlcyAtIGVhcmx5X3Jlc19jb3VudCkgPiBtYXgobWF4X2Vhcmx5X3Jlcy84LCAyKSkKKwkJcmV0dXJuOworCisJLyogZG91YmxlIGl0ICovCisJbWVtID0gLTFVTEw7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSAqIG1heF9lYXJseV9yZXMgKiAyOworCWlmIChlYXJseV9yZXMgPT0gZWFybHlfcmVzX3gpCisJCXN0YXJ0ID0gMDsKKwllbHNlCisJCXN0YXJ0ID0gZWFybHlfcmVzWzBdLmVuZDsKKwllbmQgPSBleF9zdGFydDsKKwlpZiAoc3RhcnQgKyBzaXplIDwgZW5kKQorCQltZW0gPSBmaW5kX2Z3X21lbW1hcF9hcmVhKHN0YXJ0LCBlbmQsIHNpemUsCisJCQkJCSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykpOworCWlmIChtZW0gPT0gLTFVTEwpIHsKKwkJc3RhcnQgPSBleF9lbmQ7CisJCWVuZCA9IGdldF9tYXhfbWFwcGVkKCk7CisJCWlmIChzdGFydCArIHNpemUgPCBlbmQpCisJCQltZW0gPSBmaW5kX2Z3X21lbW1hcF9hcmVhKHN0YXJ0LCBlbmQsIHNpemUsCisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpKTsKKwl9CisJaWYgKG1lbSA9PSAtMVVMTCkKKwkJcGFuaWMoImNhbiBub3QgZmluZCBtb3JlIHNwYWNlIGZvciBlYXJseV9yZXMgYXJyYXkiKTsKKworCW5ldyA9IF9fdmEobWVtKTsKKwkvKiBzYXZlIHRoZSBmaXJzdCBvbmUgZm9yIG93biAqLworCW5ld1swXS5zdGFydCA9IG1lbTsKKwluZXdbMF0uZW5kID0gbWVtICsgc2l6ZTsKKwluZXdbMF0ub3ZlcmxhcF9vayA9IDA7CisJLyogY29weSBvbGQgdG8gbmV3ICovCisJaWYgKGVhcmx5X3JlcyA9PSBlYXJseV9yZXNfeCkgeworCQltZW1jcHkoJm5ld1sxXSwgJmVhcmx5X3Jlc1swXSwKKwkJCSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiBtYXhfZWFybHlfcmVzKTsKKwkJbWVtc2V0KCZuZXdbbWF4X2Vhcmx5X3JlcysxXSwgMCwKKwkJCSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiAobWF4X2Vhcmx5X3JlcyAtIDEpKTsKKwkJZWFybHlfcmVzX2NvdW50Kys7CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZuZXdbMV0sICZlYXJseV9yZXNbMV0sCisJCQkgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpICogKG1heF9lYXJseV9yZXMgLSAxKSk7CisJCW1lbXNldCgmbmV3W21heF9lYXJseV9yZXNdLCAwLAorCQkJIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSAqIG1heF9lYXJseV9yZXMpOworCX0KKwltZW1zZXQoJmVhcmx5X3Jlc1swXSwgMCwgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpICogbWF4X2Vhcmx5X3Jlcyk7CisJZWFybHlfcmVzID0gbmV3OworCW1heF9lYXJseV9yZXMgKj0gMjsKKwlwcmludGsoS0VSTl9ERUJVRyAiZWFybHlfcmVzIGFycmF5IGlzIGRvdWJsZWQgdG8gJWQgYXQgWyVsbHggLSAlbGx4XVxuIiwKKwkJbWF4X2Vhcmx5X3JlcywgbWVtLCBtZW0gKyBzaXplIC0gMSk7Cit9CisKKy8qCisgKiBNb3N0IGVhcmx5IHJlc2VydmF0aW9ucyBjb21lIGhlcmUuCisgKgorICogV2UgZmlyc3QgaGF2ZSBkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKCkgZHJvcCBhbnkgcHJlLWV4aXN0aW5nCisgKiAnb3ZlcmxhcF9vaycgcmFuZ2VzLCBzbyB0aGF0IHdlIGNhbiB0aGVuIHJlc2VydmUgdGhpcyBtZW1vcnkKKyAqIHJhbmdlIHdpdGhvdXQgcmlzayBvZiBwYW5pYydpbmcgb24gYW4gb3ZlcmxhcHBpbmcgb3ZlcmxhcF9vaworICogZWFybHkgcmVzZXJ2YXRpb24uCisgKi8KK3ZvaWQgX19pbml0IHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKQoreworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKworCV9fY2hlY2tfYW5kX2RvdWJsZV9lYXJseV9yZXMoc3RhcnQsIGVuZCk7CisKKwlkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKHN0YXJ0LCBlbmQpOworCV9fcmVzZXJ2ZV9lYXJseShzdGFydCwgZW5kLCBuYW1lLCAwKTsKK30KKwordm9pZCBfX2luaXQgcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZWFybHlfcmVzICpyOworCisJaWYgKHN0YXJ0ID49IGVuZCkKKwkJcmV0dXJuOworCisJX19jaGVja19hbmRfZG91YmxlX2Vhcmx5X3JlcyhzdGFydCwgZW5kKTsKKworCXIgPSAmZWFybHlfcmVzW2Vhcmx5X3Jlc19jb3VudF07CisKKwlyLT5zdGFydCA9IHN0YXJ0OworCXItPmVuZCA9IGVuZDsKKwlyLT5vdmVybGFwX29rID0gMDsKKwlpZiAobmFtZSkKKwkJc3RybmNweShyLT5uYW1lLCBuYW1lLCBzaXplb2Yoci0+bmFtZSkgLSAxKTsKKwllYXJseV9yZXNfY291bnQrKzsKK30KKwordm9pZCBfX2luaXQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKKwlpbnQgaTsKKworCWkgPSBmaW5kX292ZXJsYXBwZWRfZWFybHkoc3RhcnQsIGVuZCk7CisJciA9ICZlYXJseV9yZXNbaV07CisJaWYgKGkgPj0gbWF4X2Vhcmx5X3JlcyB8fCByLT5lbmQgIT0gZW5kIHx8IHItPnN0YXJ0ICE9IHN0YXJ0KQorCQlwYW5pYygiZnJlZV9lYXJseSBvbiBub3QgcmVzZXJ2ZWQgYXJlYTogJWxseC0lbGx4ISIsCisJCQkgc3RhcnQsIGVuZCAtIDEpOworCisJZHJvcF9yYW5nZShpKTsKK30KKwordm9pZCBfX2luaXQgZnJlZV9lYXJseV9wYXJ0aWFsKHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlzdHJ1Y3QgZWFybHlfcmVzICpyOworCWludCBpOworCit0cnlfbmV4dDoKKwlpID0gZmluZF9vdmVybGFwcGVkX2Vhcmx5KHN0YXJ0LCBlbmQpOworCWlmIChpID49IG1heF9lYXJseV9yZXMpCisJCXJldHVybjsKKworCXIgPSAmZWFybHlfcmVzW2ldOworCS8qIGhvbGUgPyAqLworCWlmIChyLT5lbmQgPj0gZW5kICYmIHItPnN0YXJ0IDw9IHN0YXJ0KSB7CisJCWRyb3BfcmFuZ2VfcGFydGlhbChpLCBzdGFydCwgZW5kKTsKKwkJcmV0dXJuOworCX0KKworCWRyb3BfcmFuZ2VfcGFydGlhbChpLCBzdGFydCwgZW5kKTsKKwlnb3RvIHRyeV9uZXh0OworfQorCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KK3N0YXRpYyB2b2lkIF9faW5pdCBzdWJ0cmFjdF9lYXJseV9yZXMoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6KQoreworCWludCBpLCBjb3VudDsKKwl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwlpbnQgaWR4ID0gMDsKKworCWNvdW50ICA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKQorCQljb3VudCsrOworCisJLyogbmVlZCB0byBza2lwIGZpcnN0IG9uZSA/Ki8KKwlpZiAoZWFybHlfcmVzICE9IGVhcmx5X3Jlc194KQorCQlpZHggPSAxOworCisjZGVmaW5lIERFQlVHX1BSSU5UX0VBUkxZX1JFUyAxCisKKyNpZiBERUJVR19QUklOVF9FQVJMWV9SRVMKKwlwcmludGsoS0VSTl9JTkZPICJTdWJ0cmFjdCAoJWQgZWFybHkgcmVzZXJ2YXRpb25zKVxuIiwgY291bnQpOworI2VuZGlmCisJZm9yIChpID0gaWR4OyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZWFybHlfcmVzICpyID0gJmVhcmx5X3Jlc1tpXTsKKyNpZiBERUJVR19QUklOVF9FQVJMWV9SRVMKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAjJWQgWyUwMTBsbHggLSAlMDEwbGx4XSAlMTVzXG4iLCBpLAorCQkJci0+c3RhcnQsIHItPmVuZCwgci0+bmFtZSk7CisjZW5kaWYKKwkJZmluYWxfc3RhcnQgPSBQRk5fRE9XTihyLT5zdGFydCk7CisJCWZpbmFsX2VuZCA9IFBGTl9VUChyLT5lbmQpOworCQlpZiAoZmluYWxfc3RhcnQgPj0gZmluYWxfZW5kKQorCQkJY29udGludWU7CisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBheiwgZmluYWxfc3RhcnQsIGZpbmFsX2VuZCk7CisJfQorCit9CisKK2ludCBfX2luaXQgZ2V0X2ZyZWVfYWxsX21lbW9yeV9yYW5nZShzdHJ1Y3QgcmFuZ2UgKipyYW5nZXAsIGludCBub2RlaWQpCit7CisJaW50IGksIGNvdW50OworCXU2NCBzdGFydCA9IDAsIGVuZDsKKwl1NjQgc2l6ZTsKKwl1NjQgbWVtOworCXN0cnVjdCByYW5nZSAqcmFuZ2U7CisJaW50IG5yX3JhbmdlOworCisJY291bnQgID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Vhcmx5X3JlcyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspCisJCWNvdW50Kys7CisKKwljb3VudCAqPSAyOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmFuZ2UpICogY291bnQ7CisJZW5kID0gZ2V0X21heF9tYXBwZWQoKTsKKyNpZmRlZiBNQVhfRE1BMzJfUEZOCisJaWYgKGVuZCA+IChNQVhfRE1BMzJfUEZOIDw8IFBBR0VfU0hJRlQpKQorCQlzdGFydCA9IE1BWF9ETUEzMl9QRk4gPDwgUEFHRV9TSElGVDsKKyNlbmRpZgorCW1lbSA9IGZpbmRfZndfbWVtbWFwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCByYW5nZSkpOworCWlmIChtZW0gPT0gLTFVTEwpCisJCXBhbmljKCJjYW4gbm90IGZpbmQgbW9yZSBzcGFjZSBmb3IgcmFuZ2UgZnJlZSIpOworCisJcmFuZ2UgPSBfX3ZhKG1lbSk7CisJLyogdXNlIGVhcmx5X25vZGVfbWFwW10gYW5kIGVhcmx5X3JlcyB0byBnZXQgcmFuZ2UgYXJyYXkgYXQgZmlyc3QgKi8KKwltZW1zZXQocmFuZ2UsIDAsIHNpemUpOworCW5yX3JhbmdlID0gMDsKKworCS8qIG5lZWQgdG8gZ28gb3ZlciBlYXJseV9ub2RlX21hcCB0byBmaW5kIG91dCBnb29kIHJhbmdlIGZvciBub2RlICovCisJbnJfcmFuZ2UgPSBhZGRfZnJvbV9lYXJseV9ub2RlX21hcChyYW5nZSwgY291bnQsIG5yX3JhbmdlLCBub2RlaWQpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgY291bnQsIG1heF9sb3dfcGZuLCAtMVVMTCk7CisjZW5kaWYKKwlzdWJ0cmFjdF9lYXJseV9yZXMocmFuZ2UsIGNvdW50KTsKKwlucl9yYW5nZSA9IGNsZWFuX3NvcnRfcmFuZ2UocmFuZ2UsIGNvdW50KTsKKworCS8qIG5lZWQgdG8gY2xlYXIgaXQgPyAqLworCWlmIChub2RlaWQgPT0gTUFYX05VTU5PREVTKSB7CisJCW1lbXNldCgmZWFybHlfcmVzWzBdLCAwLAorCQkJIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSAqIG1heF9lYXJseV9yZXMpOworCQllYXJseV9yZXMgPSBOVUxMOworCQltYXhfZWFybHlfcmVzID0gMDsKKwl9CisKKwkqcmFuZ2VwID0gcmFuZ2U7CisJcmV0dXJuIG5yX3JhbmdlOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGVhcmx5X3Jlc190b19ib290bWVtKHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaSwgY291bnQ7CisJdTY0IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJaW50IGlkeCA9IDA7CisKKwljb3VudCAgPSAwOworCWZvciAoaSA9IDA7IGkgPCBtYXhfZWFybHlfcmVzICYmIGVhcmx5X3Jlc1tpXS5lbmQ7IGkrKykKKwkJY291bnQrKzsKKworCS8qIG5lZWQgdG8gc2tpcCBmaXJzdCBvbmUgPyovCisJaWYgKGVhcmx5X3JlcyAhPSBlYXJseV9yZXNfeCkKKwkJaWR4ID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gIiglZC8lZCBlYXJseSByZXNlcnZhdGlvbnMpID09PiBib290bWVtIFslMDEwbGx4IC0gJTAxMGxseF1cbiIsCisJCQkgY291bnQgLSBpZHgsIG1heF9lYXJseV9yZXMsIHN0YXJ0LCBlbmQpOworCWZvciAoaSA9IGlkeDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGVhcmx5X3JlcyAqciA9ICZlYXJseV9yZXNbaV07CisJCXByaW50ayhLRVJOX0lORk8gIiAgIyVkIFslMDEwbGx4IC0gJTAxMGxseF0gJTE2cyIsIGksCisJCQlyLT5zdGFydCwgci0+ZW5kLCByLT5uYW1lKTsKKwkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIHItPnN0YXJ0KTsKKwkJZmluYWxfZW5kID0gbWluKGVuZCwgci0+ZW5kKTsKKwkJaWYgKGZpbmFsX3N0YXJ0ID49IGZpbmFsX2VuZCkgeworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gWyUwMTBsbHggLSAlMDEwbGx4XVxuIiwKKwkJCWZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQpOworCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhmaW5hbF9zdGFydCwgZmluYWxfZW5kIC0gZmluYWxfc3RhcnQsCisJCQkJQk9PVE1FTV9ERUZBVUxUKTsKKwl9CisJLyogY2xlYXIgdGhlbSAqLworCW1lbXNldCgmZWFybHlfcmVzWzBdLCAwLCBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiBtYXhfZWFybHlfcmVzKTsKKwllYXJseV9yZXMgPSBOVUxMOworCW1heF9lYXJseV9yZXMgPSAwOworCWVhcmx5X3Jlc19jb3VudCA9IDA7Cit9CisjZW5kaWYKKworLyogQ2hlY2sgZm9yIGFscmVhZHkgcmVzZXJ2ZWQgYXJlYXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBiYWRfYWRkcih1NjQgKmFkZHJwLCB1NjQgc2l6ZSwgdTY0IGFsaWduKQoreworCWludCBpOworCXU2NCBhZGRyID0gKmFkZHJwOworCWludCBjaGFuZ2VkID0gMDsKKwlzdHJ1Y3QgZWFybHlfcmVzICpyOworYWdhaW46CisJaSA9IGZpbmRfb3ZlcmxhcHBlZF9lYXJseShhZGRyLCBhZGRyICsgc2l6ZSk7CisJciA9ICZlYXJseV9yZXNbaV07CisJaWYgKGkgPCBtYXhfZWFybHlfcmVzICYmIHItPmVuZCkgeworCQkqYWRkcnAgPSBhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7CisJCWNoYW5nZWQgPSAxOworCQlnb3RvIGFnYWluOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworLyogQ2hlY2sgZm9yIGFscmVhZHkgcmVzZXJ2ZWQgYXJlYXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBiYWRfYWRkcl9zaXplKHU2NCAqYWRkcnAsIHU2NCAqc2l6ZXAsIHU2NCBhbGlnbikKK3sKKwlpbnQgaTsKKwl1NjQgYWRkciA9ICphZGRycCwgbGFzdDsKKwl1NjQgc2l6ZSA9ICpzaXplcDsKKwlpbnQgY2hhbmdlZCA9IDA7CithZ2FpbjoKKwlsYXN0ID0gYWRkciArIHNpemU7CisJZm9yIChpID0gMDsgaSA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7CisJCXN0cnVjdCBlYXJseV9yZXMgKnIgPSAmZWFybHlfcmVzW2ldOworCQlpZiAobGFzdCA+IHItPnN0YXJ0ICYmIGFkZHIgPCByLT5zdGFydCkgeworCQkJc2l6ZSA9IHItPnN0YXJ0IC0gYWRkcjsKKwkJCWNoYW5nZWQgPSAxOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlpZiAobGFzdCA+IHItPmVuZCAmJiBhZGRyIDwgci0+ZW5kKSB7CisJCQlhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7CisJCQlzaXplID0gbGFzdCAtIGFkZHI7CisJCQljaGFuZ2VkID0gMTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJaWYgKGxhc3QgPD0gci0+ZW5kICYmIGFkZHIgPj0gci0+c3RhcnQpIHsKKwkJCSgqc2l6ZXApKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoY2hhbmdlZCkgeworCQkqYWRkcnAgPSBhZGRyOworCQkqc2l6ZXAgPSBzaXplOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworLyoKKyAqIEZpbmQgYSBmcmVlIGFyZWEgd2l0aCBzcGVjaWZpZWQgYWxpZ25tZW50IGluIGEgc3BlY2lmaWMgcmFuZ2UuCisgKiBvbmx5IHdpdGggdGhlIGFyZWEuYmV0d2VlbiBzdGFydCB0byBlbmQgaXMgYWN0aXZlIHJhbmdlIGZyb20gZWFybHlfbm9kZV9tYXAKKyAqIHNvIHRoZXkgYXJlIGdvb2QgYXMgUkFNCisgKi8KK3U2NCBfX2luaXQgZmluZF9lYXJseV9hcmVhKHU2NCBlaV9zdGFydCwgdTY0IGVpX2xhc3QsIHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCSB1NjQgc2l6ZSwgdTY0IGFsaWduKQoreworCXU2NCBhZGRyLCBsYXN0OworCisJYWRkciA9IHJvdW5kX3VwKGVpX3N0YXJ0LCBhbGlnbik7CisJaWYgKGFkZHIgPCBzdGFydCkKKwkJYWRkciA9IHJvdW5kX3VwKHN0YXJ0LCBhbGlnbik7CisJaWYgKGFkZHIgPj0gZWlfbGFzdCkKKwkJZ290byBvdXQ7CisJd2hpbGUgKGJhZF9hZGRyKCZhZGRyLCBzaXplLCBhbGlnbikgJiYgYWRkcitzaXplIDw9IGVpX2xhc3QpCisJCTsKKwlsYXN0ID0gYWRkciArIHNpemU7CisJaWYgKGxhc3QgPiBlaV9sYXN0KQorCQlnb3RvIG91dDsKKwlpZiAobGFzdCA+IGVuZCkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gYWRkcjsKKworb3V0OgorCXJldHVybiAtMVVMTDsKK30KKwordTY0IF9faW5pdCBmaW5kX2Vhcmx5X2FyZWFfc2l6ZSh1NjQgZWlfc3RhcnQsIHU2NCBlaV9sYXN0LCB1NjQgc3RhcnQsCisJCQkgdTY0ICpzaXplcCwgdTY0IGFsaWduKQoreworCXU2NCBhZGRyLCBsYXN0OworCisJYWRkciA9IHJvdW5kX3VwKGVpX3N0YXJ0LCBhbGlnbik7CisJaWYgKGFkZHIgPCBzdGFydCkKKwkJYWRkciA9IHJvdW5kX3VwKHN0YXJ0LCBhbGlnbik7CisJaWYgKGFkZHIgPj0gZWlfbGFzdCkKKwkJZ290byBvdXQ7CisJKnNpemVwID0gZWlfbGFzdCAtIGFkZHI7CisJd2hpbGUgKGJhZF9hZGRyX3NpemUoJmFkZHIsIHNpemVwLCBhbGlnbikgJiYgYWRkciArICpzaXplcCA8PSBlaV9sYXN0KQorCQk7CisJbGFzdCA9IGFkZHIgKyAqc2l6ZXA7CisJaWYgKGxhc3QgPiBlaV9sYXN0KQorCQlnb3RvIG91dDsKKworCXJldHVybiBhZGRyOworCitvdXQ6CisJcmV0dXJuIC0xVUxMOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNTQ2Nzc0YS4uNDVlZDA0MyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04NSw3ICs4NSw5IEBACiAJQlVHX09OKCFzaWcpOwogCUJVR19PTighYXRvbWljX3JlYWQoJnNpZy0+Y291bnQpKTsKIAotCXNpZ2hhbmQgPSByY3VfZGVyZWZlcmVuY2UodHNrLT5zaWdoYW5kKTsKKwlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRzay0+c2lnaGFuZCwKKwkJCQkJcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSk7CiAJc3Bpbl9sb2NrKCZzaWdoYW5kLT5zaWdsb2NrKTsKIAogCXBvc2l4X2NwdV90aW1lcnNfZXhpdCh0c2spOwpAQCAtMTcwLDggKzE3MiwxMCBAQAogcmVwZWF0OgogCXRyYWNlaG9va19wcmVwYXJlX3JlbGVhc2VfdGFzayhwKTsKIAkvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZAotCSAqIGNhbid0IGJlIG1vZGlmeWluZyBpdHMgb3duIGNyZWRlbnRpYWxzICovCisJICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuIEJ1dCBzaHV0IFJDVS1sb2NrZGVwIHVwICovCisJcmN1X3JlYWRfbG9jaygpOwogCWF0b21pY19kZWMoJl9fdGFza19jcmVkKHApLT51c2VyLT5wcm9jZXNzZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcHJvY19mbHVzaF90YXNrKHApOwogCkBAIC00NzMsOSArNDc3LDExIEBACiAJLyoKIAkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZSBmZCB0YWJsZSB3aXRob3V0IFJDVSBvcgogCSAqIC0+ZmlsZV9sb2NrIGJlY2F1c2UgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlCi0JICogZmlsZXMgc3RydWN0dXJlLgorCSAqIGZpbGVzIHN0cnVjdHVyZS4gIEJ1dCB1c2UgUkNVIHRvIHNodXQgUkNVLWxvY2tkZXAgdXAuCiAJICovCisJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBzZXQ7CiAJCWkgPSBqICogX19ORkRCSVRTOwpAQCAtNTIxLDEwICs1MjcsMTIgQEAKIAkJICogYXQgdGhlIGVuZCBvZiB0aGUgUkNVIGdyYWNlIHBlcmlvZC4gT3RoZXJ3aXNlLAogCQkgKiB5b3UgY2FuIGZyZWUgZmlsZXMgaW1tZWRpYXRlbHkuCiAJCSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCQlpZiAoZmR0ICE9ICZmaWxlcy0+ZmR0YWIpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoZmlsZXNfY2FjaGVwLCBmaWxlcyk7CiAJCWZyZWVfZmR0YWJsZShmZHQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGY4OGJkOTguLjE3YmJmMDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtODYsNiArODYsNyBAQAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJvY2Vzc19jb3VudHMpID0gMDsKIAogX19jYWNoZWxpbmVfYWxpZ25lZCBERUZJTkVfUldMT0NLKHRhc2tsaXN0X2xvY2spOyAgLyogb3V0ZXIgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHRhc2tsaXN0X2xvY2spOwogCiBpbnQgbnJfcHJvY2Vzc2VzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKaW5kZXggMjM1NzE2NS4uZDQ5YWZiMiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jCisrKyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCQlyZXQgPSAtRVNSQ0g7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJCWlmICghcCkKIAkJCWdvdG8gZXJyX3VubG9jazsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkgICAgIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQogCQkJZ290byBlcnJfdW5sb2NrOwogCQloZWFkID0gcC0+Y29tcGF0X3JvYnVzdF9saXN0OwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAogCWlmIChwdXRfdXNlcihzaXplb2YoKmhlYWQpLCBsZW5fcHRyKSkKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXJldHVybiBwdXRfdXNlcihwdHJfdG9fY29tcGF0KGhlYWQpLCBoZWFkX3B0cik7CiAKIGVycl91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggZWNjM2ZhMi4uZDcwMzk0ZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTE4LDExICsxOCw3IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKIAotLyoqCi0gKglkeW5hbWljX2lycV9pbml0IC0gaW5pdGlhbGl6ZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpcnEKLSAqCUBpcnE6CWlycSBudW1iZXIgdG8gaW5pdGlhbGl6ZQotICovCi12b2lkIGR5bmFtaWNfaXJxX2luaXQodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGR5bmFtaWNfaXJxX2luaXRfeCh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGtlZXBfY2hpcF9kYXRhKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDEsNyArMzcsOCBAQAogCWRlc2MtPmRlcHRoID0gMTsKIAlkZXNjLT5tc2lfZGVzYyA9IE5VTEw7CiAJZGVzYy0+aGFuZGxlcl9kYXRhID0gTlVMTDsKLQlkZXNjLT5jaGlwX2RhdGEgPSBOVUxMOworCWlmICgha2VlcF9jaGlwX2RhdGEpCisJCWRlc2MtPmNoaXBfZGF0YSA9IE5VTEw7CiAJZGVzYy0+YWN0aW9uID0gTlVMTDsKIAlkZXNjLT5pcnFfY291bnQgPSAwOwogCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKQEAgLTU1LDEwICs1MiwyNiBAQAogfQogCiAvKioKLSAqCWR5bmFtaWNfaXJxX2NsZWFudXAgLSBjbGVhbnVwIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlycQorICoJZHluYW1pY19pcnFfaW5pdCAtIGluaXRpYWxpemUgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaXJxCiAgKglAaXJxOglpcnEgbnVtYmVyIHRvIGluaXRpYWxpemUKICAqLwotdm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpCit2b2lkIGR5bmFtaWNfaXJxX2luaXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlkeW5hbWljX2lycV9pbml0X3goaXJxLCBmYWxzZSk7Cit9CisKKy8qKgorICoJZHluYW1pY19pcnFfaW5pdF9rZWVwX2NoaXBfZGF0YSAtIGluaXRpYWxpemUgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaXJxCisgKglAaXJxOglpcnEgbnVtYmVyIHRvIGluaXRpYWxpemUKKyAqCisgKglkb2VzIG5vdCBzZXQgaXJxX3RvX2Rlc2MoaXJxKS0+Y2hpcF9kYXRhIHRvIE5VTEwKKyAqLwordm9pZCBkeW5hbWljX2lycV9pbml0X2tlZXBfY2hpcF9kYXRhKHVuc2lnbmVkIGludCBpcnEpCit7CisJZHluYW1pY19pcnFfaW5pdF94KGlycSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR5bmFtaWNfaXJxX2NsZWFudXBfeCh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGtlZXBfY2hpcF9kYXRhKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc3LDcgKzkwLDggQEAKIAl9CiAJZGVzYy0+bXNpX2Rlc2MgPSBOVUxMOwogCWRlc2MtPmhhbmRsZXJfZGF0YSA9IE5VTEw7Ci0JZGVzYy0+Y2hpcF9kYXRhID0gTlVMTDsKKwlpZiAoIWtlZXBfY2hpcF9kYXRhKQorCQlkZXNjLT5jaGlwX2RhdGEgPSBOVUxMOwogCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfYmFkX2lycTsKIAlkZXNjLT5jaGlwID0gJm5vX2lycV9jaGlwOwogCWRlc2MtPm5hbWUgPSBOVUxMOwpAQCAtODUsNiArOTksMjYgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCisvKioKKyAqCWR5bmFtaWNfaXJxX2NsZWFudXAgLSBjbGVhbnVwIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlycQorICoJQGlycToJaXJxIG51bWJlciB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgZHluYW1pY19pcnFfY2xlYW51cCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWR5bmFtaWNfaXJxX2NsZWFudXBfeChpcnEsIGZhbHNlKTsKK30KKworLyoqCisgKglkeW5hbWljX2lycV9jbGVhbnVwX2tlZXBfY2hpcF9kYXRhIC0gY2xlYW51cCBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpcnEKKyAqCUBpcnE6CWlycSBudW1iZXIgdG8gaW5pdGlhbGl6ZQorICoKKyAqCWRvZXMgbm90IHNldCBpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGEgdG8gTlVMTAorICovCit2b2lkIGR5bmFtaWNfaXJxX2NsZWFudXBfa2VlcF9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSkKK3sKKwlkeW5hbWljX2lycV9jbGVhbnVwX3goaXJxLCB0cnVlKTsKK30KKwogCiAvKioKICAqCXNldF9pcnFfY2hpcCAtIHNldCB0aGUgaXJxIGNoaXAgZm9yIGFuIGlycQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggODE0OTQwZS4uNzZkNWE2NyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2lycS5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCkBAIC04NywxMiArODcsOCBAQAogewogCXZvaWQgKnB0cjsKIAotCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQotCQlwdHIgPSBremFsbG9jX25vZGUobnIgKiBzaXplb2YoKmRlc2MtPmtzdGF0X2lycXMpLAotCQkJCSAgIEdGUF9BVE9NSUMsIG5vZGUpOwotCWVsc2UKLQkJcHRyID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwKLQkJCQluciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcykpOworCXB0ciA9IGt6YWxsb2Nfbm9kZShuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcyksCisJCQkgICBHRlBfQVRPTUlDLCBub2RlKTsKIAogCS8qCiAJICogZG9uJ3Qgb3ZlcndpdGUgaWYgY2FuIG5vdCBnZXQgbmV3IG9uZQpAQCAtMTMyLDcgKzEyOCwyNiBAQAogICovCiBERUZJTkVfUkFXX1NQSU5MT0NLKHNwYXJzZV9pcnFfbG9jayk7CiAKLXN0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnMgX19yZWFkX21vc3RseTsKK3N0YXRpYyBSQURJWF9UUkVFKGlycV9kZXNjX3RyZWUsIEdGUF9BVE9NSUMpOworCitzdGF0aWMgdm9pZCBzZXRfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXJhZGl4X3RyZWVfaW5zZXJ0KCZpcnFfZGVzY190cmVlLCBpcnEsIGRlc2MpOworfQorCitzdHJ1Y3QgaXJxX2Rlc2MgKmlycV90b19kZXNjKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIHJhZGl4X3RyZWVfbG9va3VwKCZpcnFfZGVzY190cmVlLCBpcnEpOworfQorCit2b2lkIHJlcGxhY2VfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXZvaWQgKipwdHI7CisKKwlwdHIgPSByYWRpeF90cmVlX2xvb2t1cF9zbG90KCZpcnFfZGVzY190cmVlLCBpcnEpOworCWlmIChwdHIpCisJCXJhZGl4X3RyZWVfcmVwbGFjZV9zbG90KHB0ciwgZGVzYyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NfbGVnYWN5W05SX0lSUVNfTEVHQUNZXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKIAlbMCAuLi4gTlJfSVJRU19MRUdBQ1ktMV0gPSB7CkBAIC0xNjQsOSArMTc5LDYgQEAKIAlsZWdhY3lfY291bnQgPSBBUlJBWV9TSVpFKGlycV9kZXNjX2xlZ2FjeSk7CiAJbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOwogCi0JLyogYWxsb2NhdGUgaXJxX2Rlc2NfcHRycyBhcnJheSBiYXNlZCBvbiBucl9pcnFzICovCi0JaXJxX2Rlc2NfcHRycyA9IGtjYWxsb2MobnJfaXJxcywgc2l6ZW9mKHZvaWQgKiksIEdGUF9OT1dBSVQpOwotCiAJLyogYWxsb2NhdGUgYmFzZWQgb24gbnJfY3B1X2lkcyAqLwogCWtzdGF0X2lycXNfbGVnYWN5ID0ga3phbGxvY19ub2RlKE5SX0lSUVNfTEVHQUNZICogbnJfY3B1X2lkcyAqCiAJCQkJCSAgc2l6ZW9mKGludCksIEdGUF9OT1dBSVQsIG5vZGUpOwpAQCAtMTgwLDIzICsxOTIsMTIgQEAKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2NbaV0ubG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogCQlhbGxvY19kZXNjX21hc2tzKCZkZXNjW2ldLCBub2RlLCB0cnVlKTsKIAkJaW5pdF9kZXNjX21hc2tzKCZkZXNjW2ldKTsKLQkJaXJxX2Rlc2NfcHRyc1tpXSA9IGRlc2MgKyBpOworCQlzZXRfaXJxX2Rlc2MoaSwgJmRlc2NbaV0pOwogCX0KIAotCWZvciAoaSA9IGxlZ2FjeV9jb3VudDsgaSA8IG5yX2lycXM7IGkrKykKLQkJaXJxX2Rlc2NfcHRyc1tpXSA9IE5VTEw7Ci0KIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQogCi1zdHJ1Y3QgaXJxX2Rlc2MgKmlycV90b19kZXNjKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKGlycV9kZXNjX3B0cnMgJiYgaXJxIDwgbnJfaXJxcykKLQkJcmV0dXJuIGlycV9kZXNjX3B0cnNbaXJxXTsKLQotCXJldHVybiBOVUxMOwotfQotCiBzdHJ1Y3QgaXJxX2Rlc2MgKiBfX3JlZiBpcnFfdG9fZGVzY19hbGxvY19ub2RlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKQEAgLTIwOCwyMSArMjA5LDE4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzY19wdHJzW2lycV07CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJaWYgKGRlc2MpCiAJCXJldHVybiBkZXNjOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKIAogCS8qIFdlIGhhdmUgdG8gY2hlY2sgaXQgdG8gYXZvaWQgcmFjZXMgd2l0aCBhbm90aGVyIENQVSAqLwotCWRlc2MgPSBpcnFfZGVzY19wdHJzW2lycV07CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJaWYgKGRlc2MpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQotCQlkZXNjID0ga3phbGxvY19ub2RlKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMsIG5vZGUpOwotCWVsc2UKLQkJZGVzYyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZSksIHNpemVvZigqZGVzYykpOworCWRlc2MgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQywgbm9kZSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBpcnFfZGVzYyBmb3IgJWQgb24gbm9kZSAlZFxuIiwgaXJxLCBub2RlKTsKIAlpZiAoIWRlc2MpIHsKQEAgLTIzMSw3ICsyMjksNyBAQAogCX0KIAlpbml0X29uZV9pcnFfZGVzYyhpcnEsIGRlc2MsIG5vZGUpOwogCi0JaXJxX2Rlc2NfcHRyc1tpcnFdID0gZGVzYzsKKwlzZXRfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKIAogb3V0X3VubG9jazoKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BhcnNlX2lycV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2ludGVybmFscy5oIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaAppbmRleCBiMjgyMWYwLi5jNjNmM2JjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTIxLDExICsyMSw3IEBACiBleHRlcm4gcmF3X3NwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOwogCiAjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKLS8qIGlycV9kZXNjX3B0cnMgYWxsb2NhdGVkIGF0IGJvb3QgdGltZSAqLwotZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnM7Ci0jZWxzZQotLyogaXJxX2Rlc2NfcHRycyBpcyBhIGZpeGVkIHNpemUgYXJyYXkgKi8KLWV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjX3B0cnNbTlJfSVJRU107Cit2b2lkIHJlcGxhY2VfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCmluZGV4IDI2YmFjOWQuLjk2MzU1OWRiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCisrKyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOwogCiAJLyogV2UgaGF2ZSB0byBjaGVjayBpdCB0byBhdm9pZCByYWNlcyB3aXRoIGFub3RoZXIgQ1BVICovCi0JZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmIChkZXNjICYmIG9sZF9kZXNjICE9IGRlc2MpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTkwLDcgKzkwLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlycV9kZXNjX3B0cnNbaXJxXSA9IGRlc2M7CisJcmVwbGFjZV9pcnFfZGVzYyhpcnEsIGRlc2MpOwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKIAogCS8qIGZyZWUgdGhlIG9sZCBvbmUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggZWYwNzdmYi4uODdlYmU4YSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogLyogUGVyIGNwdSBtZW1vcnkgZm9yIHN0b3JpbmcgY3B1IHN0YXRlcyBpbiBjYXNlIG9mIHN5c3RlbSBjcmFzaC4gKi8KLW5vdGVfYnVmX3QqIGNyYXNoX25vdGVzOworbm90ZV9idWZfdCBfX3BlcmNwdSAqY3Jhc2hfbm90ZXM7CiAKIC8qIHZtY29yZWluZm8gc3R1ZmYgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHZtY29yZWluZm9fZGF0YVtWTUNPUkVJTkZPX0JZVEVTXTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGI3ZGYzMDIuLmNjZWM3NzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTkzLDYgKzk0LDcgQEAKIAl7Im5hdGl2ZV9nZXRfZGVidWdyZWciLH0sCiAJeyJpcnFfZW50cmllc19zdGFydCIsfSwKIAl7ImNvbW1vbl9pbnRlcnJ1cHQiLH0sCisJeyJtY291bnQiLH0sCS8qIG1jb3VudCBjYW4gYmUgY2FsbGVkIGZyb20gZXZlcnl3aGVyZSAqLwogCXtOVUxMfSAgICAvKiBUZXJtaW5hdG9yICovCiB9OwogCkBAIC0xMjQsMzAgKzEyNiw2IEBACiBzdGF0aWMgaW50IGtwcm9iZV9nYXJiYWdlX3Nsb3RzOwogc3RhdGljIGludCBjb2xsZWN0X2dhcmJhZ2Vfc2xvdHModm9pZCk7CiAKLXN0YXRpYyBpbnQgX19rcHJvYmVzIGNoZWNrX3NhZmV0eSh2b2lkKQotewotCWludCByZXQgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpICYmIGRlZmluZWQoQ09ORklHX0ZSRUVaRVIpCi0JcmV0ID0gZnJlZXplX3Byb2Nlc3NlcygpOwotCWlmIChyZXQgPT0gMCkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpxOwotCQlkb19lYWNoX3RocmVhZChwLCBxKSB7Ci0JCQlpZiAocCAhPSBjdXJyZW50ICYmIHAtPnN0YXRlID09IFRBU0tfUlVOTklORyAmJgotCQkJICAgIHAtPnBpZCAhPSAwKSB7Ci0JCQkJcHJpbnRrKCJDaGVjayBmYWlsZWQ6ICVzIGlzIHJ1bm5pbmdcbiIscC0+Y29tbSk7Ci0JCQkJcmV0ID0gLTE7Ci0JCQkJZ290byBsb29wX2VuZDsKLQkJCX0KLQkJfSB3aGlsZV9lYWNoX3RocmVhZChwLCBxKTsKLQl9Ci1sb29wX2VuZDoKLQl0aGF3X3Byb2Nlc3NlcygpOwotI2Vsc2UKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiBfX2dldF9pbnNuX3Nsb3QoKSAtIEZpbmQgYSBzbG90IG9uIGFuIGV4ZWN1dGFibGUgcGFnZSBmb3IgYW4gaW5zdHJ1Y3Rpb24uCiAgKiBXZSBhbGxvY2F0ZSBhbiBleGVjdXRhYmxlIHBhZ2UgaWYgdGhlcmUncyBubyByb29tIG9uIGV4aXN0aW5nIG9uZXMuCkBAIC0yMzUsOSArMjEzLDggQEAKIHsKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwLCAqbmV4dDsKIAotCS8qIEVuc3VyZSBuby1vbmUgaXMgcHJlZXBtdGVkIG9uIHRoZSBnYXJiYWdlcyAqLwotCWlmIChjaGVja19zYWZldHkoKSkKLQkJcmV0dXJuIC1FQUdBSU47CisJLyogRW5zdXJlIG5vLW9uZSBpcyBpbnRlcnJ1cHRlZCBvbiB0aGUgZ2FyYmFnZXMgKi8KKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtpcCwgbmV4dCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBsaXN0KSB7CiAJCWludCBpOwpAQCAtNzI4LDcgKzcwNSw4IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoIWtlcm5lbF90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8Ci0JICAgIGluX2twcm9iZXNfZnVuY3Rpb25zKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSkgeworCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikgfHwKKwkgICAgZnRyYWNlX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpIHsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IDNmZWFmNWEuLjZiMWNjYzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTE5NywxNiArMTk3LDggQEAKIAkJCWdvdG8gZ3JvdXBfZXhpdDsKIAl9CiAKLQkvKiBjcmVhdGUgdGhlIC9zeXMva2VybmVsL3VpZHMvIGRpcmVjdG9yeSAqLwotCWVycm9yID0gdWlkc19zeXNmc19pbml0KCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG5vdGVzX2V4aXQ7Ci0KIAlyZXR1cm4gMDsKIAotbm90ZXNfZXhpdDoKLQlpZiAobm90ZXNfc2l6ZSA+IDApCi0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShrZXJuZWxfa29iaiwgJm5vdGVzX2F0dHIpOwogZ3JvdXBfZXhpdDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoa2VybmVsX2tvYmosICZrZXJuZWxfYXR0cl9ncm91cCk7CiBrc2V0X2V4aXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBmYmI2MjIyLi44MmVkMGVhIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIGFuZCBuYW1lcyBhIGtlcm5lbAogICogdGhyZWFkLiAgVGhlIHRocmVhZCB3aWxsIGJlIHN0b3BwZWQ6IHVzZSB3YWtlX3VwX3Byb2Nlc3MoKSB0byBzdGFydAotICogaXQuICBTZWUgYWxzbyBrdGhyZWFkX3J1bigpLCBrdGhyZWFkX2NyZWF0ZV9vbl9jcHUoKS4KKyAqIGl0LiAgU2VlIGFsc28ga3RocmVhZF9ydW4oKS4KICAqCiAgKiBXaGVuIHdva2VuLCB0aGUgdGhyZWFkIHdpbGwgcnVuIEB0aHJlYWRmbigpIHdpdGggQGRhdGEgYXMgaXRzCiAgKiBhcmd1bWVudC4gQHRocmVhZGZuKCkgY2FuIGVpdGhlciBjYWxsIGRvX2V4aXQoKSBkaXJlY3RseSBpZiBpdCBpcyBhCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCBjNjJlYzE0Li4wYzMwZDA0IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTM4MDksMyArMzgwOSwyMSBAQAogCQlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAJfQogfQorCit2b2lkIGxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisKKwlpZiAoIWRlYnVnX2xvY2tzX29mZigpKQorCQlyZXR1cm47CisJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRrKCAgIlsgSU5GTzogc3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZS4gXVxuIik7CisJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCIlczolZCBpbnZva2VkIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIHdpdGhvdXQgcHJvdGVjdGlvbiFcbiIsCisJCQlmaWxlLCBsaW5lKTsKKwlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcblxuIik7CisJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZjgyMzg2Yi4uZTU1MzhkNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTQ3NCw5ICs0NzQsMTAgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZtb2QtPm1vZHVsZXNfd2hpY2hfdXNlX21lKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlsb2NhbF9zZXQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCBjcHUpLCAwKTsKKwkJcGVyX2NwdV9wdHIobW9kLT5yZWZwdHIsIGNwdSktPmNvdW50ID0gMDsKKwogCS8qIEhvbGQgcmVmZXJlbmNlIGNvdW50IGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KLQlsb2NhbF9zZXQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSwgMSk7CisJX190aGlzX2NwdV93cml0ZShtb2QtPnJlZnB0ci0+Y291bnQsIDEpOwogCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1hY3JvcyBwdXQgcmVmY291bnQgZHVyaW5nIGluaXQuICovCiAJbW9kLT53YWl0ZXIgPSBjdXJyZW50OwogfQpAQCAtNjE5LDcgKzYyMCw3IEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXRvdGFsICs9IGxvY2FsX3JlYWQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCBjcHUpKTsKKwkJdG90YWwgKz0gcGVyX2NwdV9wdHIobW9kLT5yZWZwdHIsIGNwdSktPmNvdW50OwogCXJldHVybiB0b3RhbDsKIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX3JlZmNvdW50KTsKQEAgLTc5NiwxNCArNzk3LDE1IEBACiB2b2lkIG1vZHVsZV9wdXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewogCWlmIChtb2R1bGUpIHsKLQkJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKLQkJbG9jYWxfZGVjKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlfX3RoaXNfY3B1X2RlYyhtb2R1bGUtPnJlZnB0ci0+Y291bnQpOworCiAJCXRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXywKLQkJCQkgbG9jYWxfcmVhZChfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpKTsKKwkJCQkgX190aGlzX2NwdV9yZWFkKG1vZHVsZS0+cmVmcHRyLT5jb3VudCkpOwogCQkvKiBNYXliZSB0aGV5J3JlIHdhaXRpbmcgZm9yIHVzIHRvIGRyb3AgcmVmZXJlbmNlPyAqLwogCQlpZiAodW5saWtlbHkoIW1vZHVsZV9pc19saXZlKG1vZHVsZSkpKQogCQkJd2FrZV91cF9wcm9jZXNzKG1vZHVsZS0+d2FpdGVyKTsKLQkJcHV0X2NwdSgpOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX3B1dCk7CkBAIC0xMzk3LDkgKzEzOTksOSBAQAogCWtmcmVlKG1vZC0+YXJncyk7CiAJaWYgKG1vZC0+cGVyY3B1KQogCQlwZXJjcHVfbW9kZnJlZShtb2QtPnBlcmNwdSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpCiAJaWYgKG1vZC0+cmVmcHRyKQotCQlwZXJjcHVfbW9kZnJlZShtb2QtPnJlZnB0cik7CisJCWZyZWVfcGVyY3B1KG1vZC0+cmVmcHRyKTsKICNlbmRpZgogCS8qIEZyZWUgbG9jay1jbGFzc2VzOiAqLwogCWxvY2tkZXBfZnJlZV9rZXlfcmFuZ2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOwpAQCAtMjE2Miw5ICsyMTY0LDggQEAKIAltb2QgPSAodm9pZCAqKXNlY2hkcnNbbW9kaW5kZXhdLnNoX2FkZHI7CiAJa21lbWxlYWtfbG9hZF9tb2R1bGUobW9kLCBoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCW1vZC0+cmVmcHRyID0gcGVyY3B1X21vZGFsbG9jKHNpemVvZihsb2NhbF90KSwgX19hbGlnbm9mX18obG9jYWxfdCksCi0JCQkJICAgICAgbW9kLT5uYW1lKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKQorCW1vZC0+cmVmcHRyID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtb2R1bGVfcmVmKTsKIAlpZiAoIW1vZC0+cmVmcHRyKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9pbml0OwpAQCAtMjM5Niw4ICsyMzk3LDggQEAKIAlrb2JqZWN0X3B1dCgmbW9kLT5ta29iai5rb2JqKTsKICBmcmVlX3VubG9hZDoKIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKLSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JcGVyY3B1X21vZGZyZWUobW9kLT5yZWZwdHIpOworI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpCisJZnJlZV9wZXJjcHUobW9kLT5yZWZwdHIpOwogIGZyZWVfaW5pdDoKICNlbmRpZgogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbm90aWZpZXIuYyBiL2tlcm5lbC9ub3RpZmllci5jCmluZGV4IGFjZDI0ZTcuLjI0ODhiYTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ub3RpZmllci5jCisrKyBiL2tlcm5lbC9ub3RpZmllci5jCkBAIC03OCwxMCArNzgsMTAgQEAKIAlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgKm5leHRfbmI7CiAKLQluYiA9IHJjdV9kZXJlZmVyZW5jZSgqbmwpOworCW5iID0gcmN1X2RlcmVmZXJlbmNlX3JhdygqbmwpOwogCiAJd2hpbGUgKG5iICYmIG5yX3RvX2NhbGwpIHsKLQkJbmV4dF9uYiA9IHJjdV9kZXJlZmVyZW5jZShuYi0+bmV4dCk7CisJCW5leHRfbmIgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5iLT5uZXh0KTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19OT1RJRklFUlMKIAkJaWYgKHVubGlrZWx5KCFmdW5jX3B0cl9pc19rZXJuZWxfdGV4dChuYi0+bm90aWZpZXJfY2FsbCkpKSB7CkBAIC0zMDksNyArMzA5LDcgQEAKIAkgKiByYWN5IHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIHdoYXQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdAogCSAqIGlzLCB3ZSByZS1jaGVjayB0aGUgbGlzdCBhZnRlciBoYXZpbmcgdGFrZW4gdGhlIGxvY2sgYW55d2F5OgogCSAqLwotCWlmIChyY3VfZGVyZWZlcmVuY2UobmgtPmhlYWQpKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcobmgtPmhlYWQpKSB7CiAJCWRvd25fcmVhZCgmbmgtPnJ3c2VtKTsKIAkJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdiwgbnJfdG9fY2FsbCwKIAkJCQkJbnJfY2FsbHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhZGF0YS5jIGIva2VybmVsL3BhZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOWJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcGFkYXRhLmMKQEAgLTAsMCArMSw2OTAgQEAKKy8qCisgKiBwYWRhdGEuYyAtIGdlbmVyaWMgaW50ZXJmYWNlIHRvIHByb2Nlc3MgZGF0YSBzdHJlYW1zIGluIHBhcmFsbGVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworI2RlZmluZSBNQVhfU0VRX05SIElOVF9NQVggLSBOUl9DUFVTCisjZGVmaW5lIE1BWF9PQkpfTlVNIDEwMDAwICogTlJfQ1BVUworCitzdGF0aWMgaW50IHBhZGF0YV9pbmRleF90b19jcHUoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkLCBpbnQgY3B1X2luZGV4KQoreworCWludCBjcHUsIHRhcmdldF9jcHU7CisKKwl0YXJnZXRfY3B1ID0gY3B1bWFza19maXJzdChwZC0+Y3B1bWFzayk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfaW5kZXg7IGNwdSsrKQorCQl0YXJnZXRfY3B1ID0gY3B1bWFza19uZXh0KHRhcmdldF9jcHUsIHBkLT5jcHVtYXNrKTsKKworCXJldHVybiB0YXJnZXRfY3B1OworfQorCitzdGF0aWMgaW50IHBhZGF0YV9jcHVfaGFzaChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlpbnQgY3B1X2luZGV4OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBkID0gIHBhZGF0YS0+cGQ7CisKKwkvKgorCSAqIEhhc2ggdGhlIHNlcXVlbmNlIG51bWJlcnMgdG8gdGhlIGNwdXMgYnkgdGFraW5nCisJICogc2VxX25yIG1vZC4gbnVtYmVyIG9mIGNwdXMgaW4gdXNlLgorCSAqLworCWNwdV9pbmRleCA9ICBwYWRhdGEtPnNlcV9uciAlIGNwdW1hc2tfd2VpZ2h0KHBkLT5jcHVtYXNrKTsKKworCXJldHVybiBwYWRhdGFfaW5kZXhfdG9fY3B1KHBkLCBjcHVfaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcGFyYWxsZWxfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CisJTElTVF9IRUFEKGxvY2FsX2xpc3QpOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCXF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwYWRhdGFfcXVldWUsIHB3b3JrKTsKKwlwZCA9IHF1ZXVlLT5wZDsKKwlwaW5zdCA9IHBkLT5waW5zdDsKKworCXNwaW5fbG9jaygmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZxdWV1ZS0+cGFyYWxsZWwubGlzdCwgJmxvY2FsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxvY2FsX2xpc3QpKSB7CisJCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhOworCisJCXBhZGF0YSA9IGxpc3RfZW50cnkobG9jYWxfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJnBhZGF0YS0+bGlzdCk7CisKKwkJcGFkYXRhLT5wYXJhbGxlbChwYWRhdGEpOworCX0KKworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisvKgorICogcGFkYXRhX2RvX3BhcmFsbGVsIC0gcGFkYXRhIHBhcmFsbGVsaXphdGlvbiBmdW5jdGlvbgorICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlCisgKiBAcGFkYXRhOiBvYmplY3QgdG8gYmUgcGFyYWxsZWxpemVkCisgKiBAY2JfY3B1OiBjcHUgdGhlIHNlcmlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBydW4gb24sCisgKiAgICAgICAgICBtdXN0IGJlIGluIHRoZSBjcHVtYXNrIG9mIHBhZGF0YS4KKyAqCisgKiBUaGUgcGFyYWxsZWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIHdpdGggQkhzIG9mZi4KKyAqIE5vdGU6IEV2ZXJ5IG9iamVjdCB3aGljaCBpcyBwYXJhbGxlbGl6ZWQgYnkgcGFkYXRhX2RvX3BhcmFsbGVsCisgKiBtdXN0IGJlIHNlZW4gYnkgcGFkYXRhX2RvX3NlcmlhbC4KKyAqLworaW50IHBhZGF0YV9kb19wYXJhbGxlbChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJICAgICAgIHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCBpbnQgY2JfY3B1KQoreworCWludCB0YXJnZXRfY3B1LCBlcnI7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJcmN1X3JlYWRfbG9ja19iaCgpOworCisJcGQgPSByY3VfZGVyZWZlcmVuY2UocGluc3QtPnBkKTsKKworCWVyciA9IDA7CisJaWYgKCEocGluc3QtPmZsYWdzICYgUEFEQVRBX0lOSVQpKQorCQlnb3RvIG91dDsKKworCWVyciA9ICAtRUJVU1k7CisJaWYgKChwaW5zdC0+ZmxhZ3MgJiBQQURBVEFfUkVTRVQpKQorCQlnb3RvIG91dDsKKworCWlmIChhdG9taWNfcmVhZCgmcGQtPnJlZmNudCkgPj0gTUFYX09CSl9OVU0pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY2JfY3B1LCBwZC0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlBST0dSRVNTOworCWF0b21pY19pbmMoJnBkLT5yZWZjbnQpOworCXBhZGF0YS0+cGQgPSBwZDsKKwlwYWRhdGEtPmNiX2NwdSA9IGNiX2NwdTsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmcGQtPnNlcV9ucikgPT0gcGQtPm1heF9zZXFfbnIpKQorCQlhdG9taWNfc2V0KCZwZC0+c2VxX25yLCAtMSk7CisKKwlwYWRhdGEtPnNlcV9uciA9IGF0b21pY19pbmNfcmV0dXJuKCZwZC0+c2VxX25yKTsKKworCXRhcmdldF9jcHUgPSBwYWRhdGFfY3B1X2hhc2gocGFkYXRhKTsKKwlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgdGFyZ2V0X2NwdSk7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+cGFyYWxsZWwubGlzdCk7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKworCXF1ZXVlX3dvcmtfb24odGFyZ2V0X2NwdSwgcGluc3QtPndxLCAmcXVldWUtPnB3b3JrKTsKKworb3V0OgorCXJjdV9yZWFkX3VubG9ja19iaCgpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2RvX3BhcmFsbGVsKTsKKworc3RhdGljIHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhX2dldF9uZXh0KHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKK3sKKwlpbnQgY3B1LCBudW1fY3B1cywgZW1wdHksIGNhbGNfc2VxX25yOworCWludCBzZXFfbnIsIG5leHRfbnIsIG92ZXJydW4sIG5leHRfb3ZlcnJ1bjsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZSwgKm5leHRfcXVldWU7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisJc3RydWN0IHBhZGF0YV9saXN0ICpyZW9yZGVyOworCisJZW1wdHkgPSAwOworCW5leHRfbnIgPSAtMTsKKwluZXh0X292ZXJydW4gPSAwOworCW5leHRfcXVldWUgPSBOVUxMOworCisJbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzaykgeworCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKwkJcmVvcmRlciA9ICZxdWV1ZS0+cmVvcmRlcjsKKworCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIHNlcV9uciBvZiB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkIGJlCisJCSAqIG5leHQgaW4gdGhpcyBxdWV1ZS4KKwkJICovCisJCW92ZXJydW4gPSAwOworCQljYWxjX3NlcV9uciA9IChhdG9taWNfcmVhZCgmcXVldWUtPm51bV9vYmopICogbnVtX2NwdXMpCisJCQkgICAgICAgKyBxdWV1ZS0+Y3B1X2luZGV4OworCisJCWlmICh1bmxpa2VseShjYWxjX3NlcV9uciA+IHBkLT5tYXhfc2VxX25yKSkgeworCQkJY2FsY19zZXFfbnIgPSBjYWxjX3NlcV9uciAtIHBkLT5tYXhfc2VxX25yIC0gMTsKKwkJCW92ZXJydW4gPSAxOworCQl9CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZyZW9yZGVyLT5saXN0KSkgeworCQkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCisJCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCQlzZXFfbnIgID0gcGFkYXRhLT5zZXFfbnI7CisJCQlCVUdfT04oY2FsY19zZXFfbnIgIT0gc2VxX25yKTsKKwkJfSBlbHNlIHsKKwkJCXNlcV9uciA9IGNhbGNfc2VxX25yOworCQkJZW1wdHkrKzsKKwkJfQorCisJCWlmIChuZXh0X25yIDwgMCB8fCBzZXFfbnIgPCBuZXh0X25yCisJCSAgICB8fCAobmV4dF9vdmVycnVuICYmICFvdmVycnVuKSkgeworCQkJbmV4dF9uciA9IHNlcV9ucjsKKwkJCW5leHRfb3ZlcnJ1biA9IG92ZXJydW47CisJCQluZXh0X3F1ZXVlID0gcXVldWU7CisJCX0KKwl9CisKKwlwYWRhdGEgPSBOVUxMOworCisJaWYgKGVtcHR5ID09IG51bV9jcHVzKQorCQlnb3RvIG91dDsKKworCXJlb3JkZXIgPSAmbmV4dF9xdWV1ZS0+cmVvcmRlcjsKKworCWlmICghbGlzdF9lbXB0eSgmcmVvcmRlci0+bGlzdCkpIHsKKwkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBwYWRhdGFfcHJpdiwgbGlzdCk7CisKKwkJaWYgKHVubGlrZWx5KG5leHRfb3ZlcnJ1bikpIHsKKwkJCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrKSB7CisJCQkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisJCQkJYXRvbWljX3NldCgmcXVldWUtPm51bV9vYmosIDApOworCQkJfQorCQl9CisKKwkJc3Bpbl9sb2NrKCZyZW9yZGVyLT5sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmcGFkYXRhLT5saXN0KTsKKwkJYXRvbWljX2RlYygmcGQtPnJlb3JkZXJfb2JqZWN0cyk7CisJCXNwaW5fdW5sb2NrKCZyZW9yZGVyLT5sb2NrKTsKKworCQlhdG9taWNfaW5jKCZuZXh0X3F1ZXVlLT5udW1fb2JqKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobmV4dF9uciAlIG51bV9jcHVzID09IG5leHRfcXVldWUtPmNwdV9pbmRleCkgeworCQlwYWRhdGEgPSBFUlJfUFRSKC1FTk9EQVRBKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGFkYXRhID0gRVJSX1BUUigtRUlOUFJPR1JFU1MpOworb3V0OgorCXJldHVybiBwYWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHBhZGF0YV9yZW9yZGVyKHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKK3sKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCA9IHBkLT5waW5zdDsKKwordHJ5X2FnYWluOgorCWlmICghc3Bpbl90cnlsb2NrX2JoKCZwZC0+bG9jaykpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKDEpIHsKKwkJcGFkYXRhID0gcGFkYXRhX2dldF9uZXh0KHBkKTsKKworCQlpZiAoIXBhZGF0YSB8fCBQVFJfRVJSKHBhZGF0YSkgPT0gLUVJTlBST0dSRVNTKQorCQkJYnJlYWs7CisKKwkJaWYgKFBUUl9FUlIocGFkYXRhKSA9PSAtRU5PREFUQSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnBkLT5sb2NrKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIHBhZGF0YS0+Y2JfY3B1KTsKKworCQlzcGluX2xvY2soJnF1ZXVlLT5zZXJpYWwubG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZGF0YS0+bGlzdCwgJnF1ZXVlLT5zZXJpYWwubGlzdCk7CisJCXNwaW5fdW5sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJCXF1ZXVlX3dvcmtfb24ocGFkYXRhLT5jYl9jcHUsIHBpbnN0LT53cSwgJnF1ZXVlLT5zd29yayk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnBkLT5sb2NrKTsKKworCWlmIChhdG9taWNfcmVhZCgmcGQtPnJlb3JkZXJfb2JqZWN0cykpCisJCWdvdG8gdHJ5X2FnYWluOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfc2VyaWFsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCUxJU1RfSEVBRChsb2NhbF9saXN0KTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGFkYXRhX3F1ZXVlLCBzd29yayk7CisJcGQgPSBxdWV1ZS0+cGQ7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5zZXJpYWwubG9jayk7CisJbGlzdF9yZXBsYWNlX2luaXQoJnF1ZXVlLT5zZXJpYWwubGlzdCwgJmxvY2FsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbF9saXN0KSkgeworCQlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKworCQlwYWRhdGEgPSBsaXN0X2VudHJ5KGxvY2FsX2xpc3QubmV4dCwKKwkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQlsaXN0X2RlbF9pbml0KCZwYWRhdGEtPmxpc3QpOworCisJCXBhZGF0YS0+c2VyaWFsKHBhZGF0YSk7CisJCWF0b21pY19kZWMoJnBkLT5yZWZjbnQpOworCX0KKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworLyoKKyAqIHBhZGF0YV9kb19zZXJpYWwgLSBwYWRhdGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbgorICoKKyAqIEBwYWRhdGE6IG9iamVjdCB0byBiZSBzZXJpYWxpemVkLgorICoKKyAqIHBhZGF0YV9kb19zZXJpYWwgbXVzdCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHBhcmFsbGVsaXplZCBvYmplY3QuCisgKiBUaGUgc2VyaWFsaXphdGlvbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJ1biB3aXRoIEJIcyBvZmYuCisgKi8KK3ZvaWQgcGFkYXRhX2RvX3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBkID0gcGFkYXRhLT5wZDsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKworCXNwaW5fbG9jaygmcXVldWUtPnJlb3JkZXIubG9jayk7CisJYXRvbWljX2luYygmcGQtPnJlb3JkZXJfb2JqZWN0cyk7CisJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcXVldWUtPnJlb3JkZXIubGlzdCk7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCisJcHV0X2NwdSgpOworCisJcGFkYXRhX3Jlb3JkZXIocGQpOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfZG9fc2VyaWFsKTsKKworc3RhdGljIHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwYWRhdGFfYWxsb2NfcGQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJaW50IGNwdSwgY3B1X2luZGV4LCBudW1fY3B1czsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwljcHVfaW5kZXggPSAwOworCisJcGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFyYWxsZWxfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGQpCisJCWdvdG8gZXJyOworCisJcGQtPnF1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwYWRhdGFfcXVldWUpOworCWlmICghcGQtPnF1ZXVlKQorCQlnb3RvIGVycl9mcmVlX3BkOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcGQtPmNwdW1hc2ssIEdGUF9LRVJORUwpKQorCQlnb3RvIGVycl9mcmVlX3F1ZXVlOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKworCQlxdWV1ZS0+cGQgPSBwZDsKKworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdW1hc2spCisJCSAgICAmJiBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkgeworCQkJcXVldWUtPmNwdV9pbmRleCA9IGNwdV9pbmRleDsKKwkJCWNwdV9pbmRleCsrOworCQl9IGVsc2UKKwkJCXF1ZXVlLT5jcHVfaW5kZXggPSAtMTsKKworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnJlb3JkZXIubGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+cGFyYWxsZWwubGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+c2VyaWFsLmxpc3QpOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnJlb3JkZXIubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJCUlOSVRfV09SSygmcXVldWUtPnB3b3JrLCBwYWRhdGFfcGFyYWxsZWxfd29ya2VyKTsKKwkJSU5JVF9XT1JLKCZxdWV1ZS0+c3dvcmssIHBhZGF0YV9zZXJpYWxfd29ya2VyKTsKKwkJYXRvbWljX3NldCgmcXVldWUtPm51bV9vYmosIDApOworCX0KKworCWNwdW1hc2tfYW5kKHBkLT5jcHVtYXNrLCBjcHVtYXNrLCBjcHVfYWN0aXZlX21hc2spOworCisJbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisJcGQtPm1heF9zZXFfbnIgPSAoTUFYX1NFUV9OUiAvIG51bV9jcHVzKSAqIG51bV9jcHVzIC0gMTsKKworCWF0b21pY19zZXQoJnBkLT5zZXFfbnIsIC0xKTsKKwlhdG9taWNfc2V0KCZwZC0+cmVvcmRlcl9vYmplY3RzLCAwKTsKKwlhdG9taWNfc2V0KCZwZC0+cmVmY250LCAwKTsKKwlwZC0+cGluc3QgPSBwaW5zdDsKKwlzcGluX2xvY2tfaW5pdCgmcGQtPmxvY2spOworCisJcmV0dXJuIHBkOworCitlcnJfZnJlZV9xdWV1ZToKKwlmcmVlX3BlcmNwdShwZC0+cXVldWUpOworZXJyX2ZyZWVfcGQ6CisJa2ZyZWUocGQpOworZXJyOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfZnJlZV9wZChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJZnJlZV9jcHVtYXNrX3ZhcihwZC0+Y3B1bWFzayk7CisJZnJlZV9wZXJjcHUocGQtPnF1ZXVlKTsKKwlrZnJlZShwZCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhZGF0YV9yZXBsYWNlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkX25ldykKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGRfb2xkID0gcGluc3QtPnBkOworCisJcGluc3QtPmZsYWdzIHw9IFBBREFUQV9SRVNFVDsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihwaW5zdC0+cGQsIHBkX25ldyk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGRfb2xkLT5yZWZjbnQpICE9IDApCisJCXlpZWxkKCk7CisKKwlmbHVzaF93b3JrcXVldWUocGluc3QtPndxKTsKKworCXBhZGF0YV9mcmVlX3BkKHBkX29sZCk7CisKKwlwaW5zdC0+ZmxhZ3MgJj0gflBBREFUQV9SRVNFVDsKK30KKworLyoKKyAqIHBhZGF0YV9zZXRfY3B1bWFzayAtIHNldCB0aGUgY3B1bWFzayB0aGF0IHBhZGF0YSBzaG91bGQgdXNlCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHVtYXNrOiB0aGUgY3B1bWFzayB0byB1c2UKKyAqLworaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCWNwdW1hc2tfdmFyX3QgY3B1bWFzaykKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisJaW50IGVyciA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIGNwdW1hc2spOworCWlmICghcGQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3B1bWFza19jb3B5KHBpbnN0LT5jcHVtYXNrLCBjcHVtYXNrKTsKKworCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9zZXRfY3B1bWFzayk7CisKK3N0YXRpYyBpbnQgX19wYWRhdGFfYWRkX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpIHsKKwkJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIHBpbnN0LT5jcHVtYXNrKTsKKwkJaWYgKCFwZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwYWRhdGFfYWRkX2NwdSAtIGFkZCBhIGNwdSB0byB0aGUgcGFkYXRhIGNwdW1hc2sKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQGNwdTogY3B1IHRvIGFkZAorICovCitpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJaW50IGVycjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljcHVtYXNrX3NldF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzayk7CisJZXJyID0gX19wYWRhdGFfYWRkX2NwdShwaW5zdCwgY3B1KTsKKworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2FkZF9jcHUpOworCitzdGF0aWMgaW50IF9fcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKSB7CisJCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBwaW5zdC0+Y3B1bWFzayk7CisJCWlmICghcGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcGFkYXRhX3JlbW92ZV9jcHUgLSByZW1vdmUgYSBjcHUgZnJvbSB0aGUgcGFkYXRhIGNwdW1hc2sKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQGNwdTogY3B1IHRvIHJlbW92ZQorICovCitpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJaW50IGVycjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKTsKKwllcnIgPSBfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfcmVtb3ZlX2NwdSk7CisKKy8qCisgKiBwYWRhdGFfc3RhcnQgLSBzdGFydCB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZworICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIHN0YXJ0CisgKi8KK3ZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJcGluc3QtPmZsYWdzIHw9IFBBREFUQV9JTklUOworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfc3RhcnQpOworCisvKgorICogcGFkYXRhX3N0b3AgLSBzdG9wIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UgdG8gc3RvcAorICovCit2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfSU5JVDsKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3N0b3ApOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwYWRhdGFfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdDsKKwlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKworCXBpbnN0ID0gY29udGFpbmVyX29mKG5mYiwgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSwgY3B1X25vdGlmaWVyKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCWVyciA9IF9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCWJyZWFrOworCisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCWVyciA9IF9fcGFkYXRhX3JlbW92ZV9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCWJyZWFrOworCisJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQlfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spKQorCQkJYnJlYWs7CisJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKwkJX19wYWRhdGFfYWRkX2NwdShwaW5zdCwgY3B1KTsKKwkJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoKKyAqIHBhZGF0YV9hbGxvYyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcGFkYXRhIGluc3RhbmNlCisgKgorICogQGNwdW1hc2s6IGNwdW1hc2sgdGhhdCBwYWRhdGEgdXNlcyBmb3IgcGFyYWxsZWxpemF0aW9uCisgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0ZWQgcGFkYXRhIGluc3RhbmNlCisgKi8KK3N0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBpbnN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSksIEdGUF9LRVJORUwpOworCWlmICghcGluc3QpCisJCWdvdG8gZXJyOworCisJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIGNwdW1hc2spOworCWlmICghcGQpCisJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihwaW5zdC0+cGQsIHBkKTsKKworCXBpbnN0LT53cSA9IHdxOworCisJY3B1bWFza19jb3B5KHBpbnN0LT5jcHVtYXNrLCBjcHVtYXNrKTsKKworCXBpbnN0LT5mbGFncyA9IDA7CisKKwlwaW5zdC0+Y3B1X25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBwYWRhdGFfY3B1X2NhbGxiYWNrOworCXBpbnN0LT5jcHVfbm90aWZpZXIucHJpb3JpdHkgPSAwOworCWVyciA9IHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9wZDsKKworCW11dGV4X2luaXQoJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBwaW5zdDsKKworZXJyX2ZyZWVfcGQ6CisJcGFkYXRhX2ZyZWVfcGQocGQpOworZXJyX2ZyZWVfaW5zdDoKKwlrZnJlZShwaW5zdCk7CitlcnI6CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9hbGxvYyk7CisKKy8qCisgKiBwYWRhdGFfZnJlZSAtIGZyZWUgYSBwYWRhdGEgaW5zdGFuY2UKKyAqCisgKiBAIHBhZGF0YV9pbnN0OiBwYWRhdGEgaW5zdGFuY2UgdG8gZnJlZQorICovCit2b2lkIHBhZGF0YV9mcmVlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXBhZGF0YV9zdG9wKHBpbnN0KTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZwaW5zdC0+cGQtPnJlZmNudCkgIT0gMCkKKwkJeWllbGQoKTsKKworCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwaW5zdC0+Y3B1X25vdGlmaWVyKTsKKwlwYWRhdGFfZnJlZV9wZChwaW5zdC0+cGQpOworCWtmcmVlKHBpbnN0KTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2ZyZWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMmFlNzQwOS4uYTY2MWU3OSAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC05OCwxMSArOTgsMTIgQEAKIAogdm9pZCBfX3dlYWsgaHdfcGVyZl9ldmVudF9zZXR1cChpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQogdm9pZCBfX3dlYWsgaHdfcGVyZl9ldmVudF9zZXR1cF9vbmxpbmUoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQogCiBpbnQgX193ZWFrCiBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXJldHVybiAwOwogfQpAQCAtMjQ4LDcgKzI0OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfY2xvY2sodm9pZCkKIHsKLQlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKQEAgLTI4OSw2ICsyOTAsMTUgQEAKIAlldmVudC0+dG90YWxfdGltZV9ydW5uaW5nID0gcnVuX2VuZCAtIGV2ZW50LT50c3RhbXBfcnVubmluZzsKIH0KIAorc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgorY3R4X2dyb3VwX2xpc3Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKGV2ZW50LT5hdHRyLnBpbm5lZCkKKwkJcmV0dXJuICZjdHgtPnBpbm5lZF9ncm91cHM7CisJZWxzZQorCQlyZXR1cm4gJmN0eC0+ZmxleGlibGVfZ3JvdXBzOworfQorCiAvKgogICogQWRkIGEgZXZlbnQgZnJvbSB0aGUgbGlzdHMgZm9yIGl0cyBjb250ZXh0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGFuZCBjdHgtPmxvY2sgaGVsZC4KQEAgLTMwMyw5ICszMTMsMTkgQEAKIAkgKiBhZGQgaXQgc3RyYWlnaHQgdG8gdGhlIGNvbnRleHQncyBldmVudCBsaXN0LCBvciB0byB0aGUgZ3JvdXAKIAkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6CiAJICovCi0JaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkKLQkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmY3R4LT5ncm91cF9saXN0KTsKLQllbHNlIHsKKwlpZiAoZ3JvdXBfbGVhZGVyID09IGV2ZW50KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwkJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJCWV2ZW50LT5ncm91cF9mbGFncyB8PSBQRVJGX0dST1VQX1NPRlRXQVJFOworCisJCWxpc3QgPSBjdHhfZ3JvdXBfbGlzdChldmVudCwgY3R4KTsKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCBsaXN0KTsKKwl9IGVsc2UgeworCQlpZiAoZ3JvdXBfbGVhZGVyLT5ncm91cF9mbGFncyAmIFBFUkZfR1JPVVBfU09GVFdBUkUgJiYKKwkJICAgICFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlncm91cF9sZWFkZXItPmdyb3VwX2ZsYWdzICY9IH5QRVJGX0dST1VQX1NPRlRXQVJFOworCiAJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0KTsKIAkJZ3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5ncysrOwogCX0KQEAgLTM1NSw5ICszNzUsMTQgQEAKIAkgKiB0byB0aGUgY29udGV4dCBsaXN0IGRpcmVjdGx5OgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCB0bXAsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCWxpc3QgPSBjdHhfZ3JvdXBfbGlzdChldmVudCwgY3R4KTsKKwkJbGlzdF9tb3ZlX3RhaWwoJnNpYmxpbmctPmdyb3VwX2VudHJ5LCBsaXN0KTsKIAkJc2libGluZy0+Z3JvdXBfbGVhZGVyID0gc2libGluZzsKKworCQkvKiBJbmhlcml0IGdyb3VwIGZsYWdzIGZyb20gdGhlIHByZXZpb3VzIGxlYWRlciAqLworCQlzaWJsaW5nLT5ncm91cF9mbGFncyA9IGV2ZW50LT5ncm91cF9mbGFnczsKIAl9CiB9CiAKQEAgLTYwOCwxNCArNjMzLDEzIEBACiBzdGF0aWMgaW50CiBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCSBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkgaW50IGNwdSkKKwkJIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIAogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwotCWV2ZW50LT5vbmNwdSA9IGNwdTsJLyogVE9ETzogcHV0ICdjcHUnIGludG8gY3B1Y3R4LT5jcHUgKi8KKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJLyoKIAkgKiBUaGUgbmV3IHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdHVybiBpdCBvbiBpbiB0aGUgaGFyZHdhcmU6CiAJICovCkBAIC02NDIsOCArNjY2LDcgQEAKIHN0YXRpYyBpbnQKIGdyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9ldmVudCwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCSAgICAgICBpbnQgY3B1KQorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqcGFydGlhbF9ncm91cDsKIAlpbnQgcmV0OwpAQCAtNjUxLDE4ICs2NzQsMTggQEAKIAlpZiAoZ3JvdXBfZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiAKLQlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQorCWlmIChldmVudF9zY2hlZF9pbihncm91cF9ldmVudCwgY3B1Y3R4LCBjdHgpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCS8qCiAJICogU2NoZWR1bGUgaW4gc2libGluZ3MgYXMgb25lIGdyb3VwIChpZiBhbnkpOgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cF9ldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKSB7CisJCWlmIChldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpKSB7CiAJCQlwYXJ0aWFsX2dyb3VwID0gZXZlbnQ7CiAJCQlnb3RvIGdyb3VwX2Vycm9yOwogCQl9CkBAIC02ODYsMjQgKzcwOSw2IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gMSBmb3IgYSBncm91cCBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHNvZnR3YXJlIGV2ZW50cywKLSAqIDAgaWYgdGhlIGdyb3VwIGNvbnRhaW5zIGFueSBoYXJkd2FyZSBldmVudHMuCi0gKi8KLXN0YXRpYyBpbnQgaXNfc29mdHdhcmVfb25seV9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyKQotewotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKLQotCWlmICghaXNfc29mdHdhcmVfZXZlbnQobGVhZGVyKSkKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQotCQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKLQkJCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCiAgKiBXb3JrIG91dCB3aGV0aGVyIHdlIGNhbiBwdXQgdGhpcyBldmVudCBncm91cCBvbiB0aGUgQ1BVIG5vdy4KICAqLwogc3RhdGljIGludCBncm91cF9jYW5fZ29fb24oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LApAQCAtNzEzLDcgKzcxOCw3IEBACiAJLyoKIAkgKiBHcm91cHMgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMgY2FuIGFsd2F5cyBnbyBvbi4KIAkgKi8KLQlpZiAoaXNfc29mdHdhcmVfb25seV9ncm91cChldmVudCkpCisJaWYgKGV2ZW50LT5ncm91cF9mbGFncyAmIFBFUkZfR1JPVVBfU09GVFdBUkUpCiAJCXJldHVybiAxOwogCS8qCiAJICogSWYgYW4gZXhjbHVzaXZlIGdyb3VwIGlzIGFscmVhZHkgb24sIG5vIG90aGVyIGhhcmR3YXJlCkBAIC03NTQsNyArNzU5LDYgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyOwogCiAJLyoKQEAgLTgwMSw3ICs4MDUsNyBAQAogCWlmICghZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQogCQllcnIgPSAtRUVYSVNUOwogCWVsc2UKLQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpOwogCiAJaWYgKGVycikgewogCQkvKgpAQCAtOTQzLDExICs5NDcsOSBAQAogCX0gZWxzZSB7CiAJCXBlcmZfZGlzYWJsZSgpOwogCQlpZiAoZXZlbnQgPT0gbGVhZGVyKQotCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAotCQkJCQkgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQllcnIgPSBncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpOwogCQllbHNlCi0JCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsCi0JCQkJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAkJcGVyZl9lbmFibGUoKTsKIAl9CiAKQEAgLTEwNDMsOCArMTA0NSwxNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fcGVyZl9ldmVudF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK2VudW0gZXZlbnRfdHlwZV90IHsKKwlFVkVOVF9GTEVYSUJMRSA9IDB4MSwKKwlFVkVOVF9QSU5ORUQgPSAweDIsCisJRVZFTlRfQUxMID0gRVZFTlRfRkxFWElCTEUgfCBFVkVOVF9QSU5ORUQsCit9OworCitzdGF0aWMgdm9pZCBjdHhfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJCSAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAKQEAgLTEwNTUsMTAgKzEwNjQsMTggQEAKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKIAlwZXJmX2Rpc2FibGUoKTsKLQlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJaWYgKCFjdHgtPm5yX2FjdGl2ZSkKKwkJZ290byBvdXRfZW5hYmxlOworCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9QSU5ORUQpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQogCQkJZ3JvdXBfc2NoZWRfb3V0KGV2ZW50LCBjcHVjdHgsIGN0eCk7Ci0JfQorCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9GTEVYSUJMRSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkKKwkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCisgb3V0X2VuYWJsZToKIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CkBAIC0xMTcwLDkgKzExODcsOSBAQAogICogbm90IHJlc3RhcnQgdGhlIGV2ZW50LgogICovCiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpCisJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKm5leHRfY3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBhcmVudDsKQEAgLTEyMjAsMTUgKzEyMzcsMTMgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkb19zd2l0Y2gpIHsKLQkJX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJCWN0eF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgsIEVWRU5UX0FMTCk7CiAJCWNwdWN0eC0+dGFza19jdHggPSBOVUxMOwogCX0KIH0KIAotLyoKLSAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3N0YXRpYyB2b2lkIHRhc2tfY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKIHsKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAKQEAgLTEyMzgsMjUgKzEyNTMsODIgQEAKIAlpZiAoV0FSTl9PTl9PTkNFKGN0eCAhPSBjcHVjdHgtPnRhc2tfY3R4KSkKIAkJcmV0dXJuOwogCi0JX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJY3R4X3NjaGVkX291dChjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CiAJY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7CiB9CiAKIC8qCiAgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCiAgKi8KLXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQorc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKLQlfX3BlcmZfZXZlbnRfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4KTsKKwl0YXNrX2N0eF9zY2hlZF9vdXQoY3R4LCBFVkVOVF9BTEwpOworfQorCisvKgorICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAorICovCitzdGF0aWMgdm9pZCBjcHVfY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkJICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKKwljdHhfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4LCBldmVudF90eXBlKTsKIH0KIAogc3RhdGljIHZvaWQKLV9fcGVyZl9ldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCi0JCQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQorY3R4X3Bpbm5lZF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCSAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudC0+c3RhdGUgPD0gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCQljb250aW51ZTsKKwkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQorCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCQkvKgorCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCisJCSAqIHB1dCBpdCBpbiBlcnJvciBzdGF0ZS4KKwkJICovCisJCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKKwkJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfRVJST1I7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjdHhfZmxleGlibGVfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlpbnQgY2FuX2FkZF9odyA9IDE7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCS8qIElnbm9yZSBldmVudHMgaW4gT0ZGIG9yIEVSUk9SIHN0YXRlICovCisJCWlmIChldmVudC0+c3RhdGUgPD0gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50CisJCSAqIG9mIGV2ZW50czoKKwkJICovCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKKwkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpKQorCQkJCWNhbl9hZGRfaHcgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQKK2N0eF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCWN0eC0+aXNfYWN0aXZlID0gMTsKIAlpZiAobGlrZWx5KCFjdHgtPm5yX2V2ZW50cykpCkBAIC0xMjcwLDUxICsxMzQyLDM5IEBACiAJICogRmlyc3QgZ28gdGhyb3VnaCB0aGUgbGlzdCBhbmQgcHV0IG9uIGFueSBwaW5uZWQgZ3JvdXBzCiAJICogaW4gb3JkZXIgdG8gZ2l2ZSB0aGVtIHRoZSBiZXN0IGNoYW5jZSBvZiBnb2luZyBvbi4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGIHx8Ci0JCSAgICAhZXZlbnQtPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQotCQkJY29udGludWU7CisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9QSU5ORUQpCisJCWN0eF9waW5uZWRfc2NoZWRfaW4oY3R4LCBjcHVjdHgpOwogCi0JCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCi0JCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7CisJLyogVGhlbiB3YWxrIHRocm91Z2ggdGhlIGxvd2VyIHByaW8gZmxleGlibGUgZ3JvdXBzICovCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9GTEVYSUJMRSkKKwkJY3R4X2ZsZXhpYmxlX3NjaGVkX2luKGN0eCwgY3B1Y3R4KTsKIAotCQkvKgotCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCi0JCSAqIHB1dCBpdCBpbiBlcnJvciBzdGF0ZS4KLQkJICovCi0JCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkgewotCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKLQkJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfRVJST1I7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQkvKgotCQkgKiBJZ25vcmUgZXZlbnRzIGluIE9GRiBvciBFUlJPUiBzdGF0ZSwgYW5kCi0JCSAqIGlnbm9yZSBwaW5uZWQgZXZlbnRzIHNpbmNlIHdlIGRpZCB0aGVtIGFscmVhZHkuCi0JCSAqLwotCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGIHx8Ci0JCSAgICBldmVudC0+YXR0ci5waW5uZWQpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBMaXN0ZW4gdG8gdGhlICdjcHUnIHNjaGVkdWxpbmcgZmlsdGVyIGNvbnN0cmFpbnQKLQkJICogb2YgZXZlbnRzOgotCQkgKi8KLQkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKQotCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKLQkJCQljYW5fYWRkX2h3ID0gMDsKLQl9CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCitzdGF0aWMgdm9pZCBjcHVfY3R4X3NjaGVkX2luKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OworCisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBldmVudF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgdGFza19jdHhfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKGxpa2VseSghY3R4KSkKKwkJcmV0dXJuOworCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKKwkJcmV0dXJuOworCWN0eF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CisJY3B1Y3R4LT50YXNrX2N0eCA9IGN0eDsKK30KIC8qCiAgKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gYWRkIHRoZSBldmVudHMgb2YgdGhlIGN1cnJlbnQgdGFzawogICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgpAQCAtMTMyNiwzOCArMTM4NiwxMjggQEAKICAqIGFjY2Vzc2luZyB0aGUgZXZlbnQgY29udHJvbCByZWdpc3Rlci4gSWYgYSBOTUkgaGl0cywgdGhlbiBpdCB3aWxsCiAgKiBrZWVwIHRoZSBldmVudCBydW5uaW5nLgogICovCi12b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCit2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKIAogCWlmIChsaWtlbHkoIWN0eCkpCiAJCXJldHVybjsKKwogCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKIAkJcmV0dXJuOwotCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKKworCS8qCisJICogV2Ugd2FudCB0byBrZWVwIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHkgb3JkZXI6CisJICogY3B1IHBpbm5lZCAodGhhdCBkb24ndCBuZWVkIHRvIG1vdmUpLCB0YXNrIHBpbm5lZCwKKwkgKiBjcHUgZmxleGlibGUsIHRhc2sgZmxleGlibGUuCisJICovCisJY3B1X2N0eF9zY2hlZF9vdXQoY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIEVWRU5UX1BJTk5FRCk7CisJY3B1X2N0eF9zY2hlZF9pbihjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKKwogCWNwdWN0eC0+dGFza19jdHggPSBjdHg7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX2luKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OwotCi0JX19wZXJmX2V2ZW50X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotfQotCiAjZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKIAogc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgcGVyZl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGV2ZW50cykKK3N0YXRpYyB1NjQgcGVyZl9jYWxjdWxhdGVfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKK3sKKwl1NjQgZnJlcXVlbmN5ID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CisJdTY0IHNlYyA9IE5TRUNfUEVSX1NFQzsKKwl1NjQgZGl2aXNvciwgZGl2aWRlbmQ7CisKKwlpbnQgY291bnRfZmxzLCBuc2VjX2ZscywgZnJlcXVlbmN5X2Zscywgc2VjX2ZsczsKKworCWNvdW50X2ZscyA9IGZsczY0KGNvdW50KTsKKwluc2VjX2ZscyA9IGZsczY0KG5zZWMpOworCWZyZXF1ZW5jeV9mbHMgPSBmbHM2NChmcmVxdWVuY3kpOworCXNlY19mbHMgPSAzMDsKKworCS8qCisJICogV2UgZ290IEBjb3VudCBpbiBAbnNlYywgd2l0aCBhIHRhcmdldCBvZiBzYW1wbGVfZnJlcSBIWgorCSAqIHRoZSB0YXJnZXQgcGVyaW9kIGJlY29tZXM6CisJICoKKwkgKiAgICAgICAgICAgICBAY291bnQgKiAxMF45CisJICogcGVyaW9kID0gLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgICAgIEBuc2VjICogc2FtcGxlX2ZyZXEKKwkgKgorCSAqLworCisJLyoKKwkgKiBSZWR1Y2UgYWNjdXJhY3kgYnkgb25lIGJpdCBzdWNoIHRoYXQgQGEgYW5kIEBiIGNvbnZlcmdlCisJICogdG8gYSBzaW1pbGFyIG1hZ25pdHVkZS4KKwkgKi8KKyNkZWZpbmUgUkVEVUNFX0ZMUyhhLCBiKSAJCVwKK2RvIHsJCQkJCVwKKwlpZiAoYSMjX2ZscyA+IGIjI19mbHMpIHsJXAorCQlhID4+PSAxOwkJXAorCQlhIyNfZmxzLS07CQlcCisJfSBlbHNlIHsJCQlcCisJCWIgPj49IDE7CQlcCisJCWIjI19mbHMtLTsJCVwKKwl9CQkJCVwKK30gd2hpbGUgKDApCisKKwkvKgorCSAqIFJlZHVjZSBhY2N1cmFjeSB1bnRpbCBlaXRoZXIgdGVybSBmaXRzIGluIGEgdTY0LCB0aGVuIHByb2NlZWQgd2l0aAorCSAqIHRoZSBvdGhlciwgc28gdGhhdCBmaW5hbGx5IHdlIGNhbiBkbyBhIHU2NC91NjQgZGl2aXNpb24uCisJICovCisJd2hpbGUgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCAmJiBuc2VjX2ZscyArIGZyZXF1ZW5jeV9mbHMgPiA2NCkgeworCQlSRURVQ0VfRkxTKG5zZWMsIGZyZXF1ZW5jeSk7CisJCVJFRFVDRV9GTFMoc2VjLCBjb3VudCk7CisJfQorCisJaWYgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCkgeworCQlkaXZpc29yID0gbnNlYyAqIGZyZXF1ZW5jeTsKKworCQl3aGlsZSAoY291bnRfZmxzICsgc2VjX2ZscyA+IDY0KSB7CisJCQlSRURVQ0VfRkxTKGNvdW50LCBzZWMpOworCQkJZGl2aXNvciA+Pj0gMTsKKwkJfQorCisJCWRpdmlkZW5kID0gY291bnQgKiBzZWM7CisJfSBlbHNlIHsKKwkJZGl2aWRlbmQgPSBjb3VudCAqIHNlYzsKKworCQl3aGlsZSAobnNlY19mbHMgKyBmcmVxdWVuY3lfZmxzID4gNjQpIHsKKwkJCVJFRFVDRV9GTFMobnNlYywgZnJlcXVlbmN5KTsKKwkJCWRpdmlkZW5kID4+PSAxOworCQl9CisKKwkJZGl2aXNvciA9IG5zZWMgKiBmcmVxdWVuY3k7CisJfQorCisJcmV0dXJuIGRpdjY0X3U2NChkaXZpZGVuZCwgZGl2aXNvcik7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudC0+cG11LT5zdG9wKQorCQlyZXR1cm4gZXZlbnQtPnBtdS0+ZGlzYWJsZShldmVudCk7CisKKwlyZXR1cm4gZXZlbnQtPnBtdS0+c3RvcChldmVudCk7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudC0+cG11LT5zdGFydCkKKwkJcmV0dXJuIGV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CisKKwlyZXR1cm4gZXZlbnQtPnBtdS0+c3RhcnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2FkanVzdF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnNlYywgdTY0IGNvdW50KQogewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXU2NCBwZXJpb2QsIHNhbXBsZV9wZXJpb2Q7CiAJczY0IGRlbHRhOwogCi0JZXZlbnRzICo9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQlwZXJpb2QgPSBkaXY2NF91NjQoZXZlbnRzLCBldmVudC0+YXR0ci5zYW1wbGVfZnJlcSk7CisJcGVyaW9kID0gcGVyZl9jYWxjdWxhdGVfcGVyaW9kKGV2ZW50LCBuc2VjLCBjb3VudCk7CiAKIAlkZWx0YSA9IChzNjQpKHBlcmlvZCAtIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJZGVsdGEgPSAoZGVsdGEgKyA3KSAvIDg7IC8qIGxvdyBwYXNzIGZpbHRlciAqLwpAQCAtMTM2OCwxMyArMTUxOCwyMiBAQAogCQlzYW1wbGVfcGVyaW9kID0gMTsKIAogCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2Q7CisKKwlpZiAoYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCkgPiA4KnNhbXBsZV9wZXJpb2QpIHsKKwkJcGVyZl9kaXNhYmxlKCk7CisJCXBlcmZfZXZlbnRfc3RvcChldmVudCk7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7CisJCXBlcmZfZXZlbnRfc3RhcnQoZXZlbnQpOworCQlwZXJmX2VuYWJsZSgpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcGVyZl9jdHhfYWRqdXN0X2ZyZXEoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwotCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOworCXU2NCBpbnRlcnJ1cHRzLCBub3c7CisJczY0IGRlbHRhOwogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKQEAgLTEzOTUsNDQgKzE1NTQsMTggQEAKIAkJaWYgKGludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpIHsKIAkJCXBlcmZfbG9nX3Rocm90dGxlKGV2ZW50LCAxKTsKIAkJCWV2ZW50LT5wbXUtPnVudGhyb3R0bGUoZXZlbnQpOwotCQkJaW50ZXJydXB0cyA9IDIqc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUvSFo7CiAJCX0KIAogCQlpZiAoIWV2ZW50LT5hdHRyLmZyZXEgfHwgIWV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogaWYgdGhlIHNwZWNpZmllZCBmcmVxIDwgSFogdGhlbiB3ZSBuZWVkIHRvIHNraXAgdGlja3MKLQkJICovCi0JCWlmIChldmVudC0+YXR0ci5zYW1wbGVfZnJlcSA8IEhaKSB7Ci0JCQlmcmVxID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CisJCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOworCQlub3cgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+Y291bnQpOworCQlkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9jb3VudF9zdGFtcDsKKwkJaHdjLT5mcmVxX2NvdW50X3N0YW1wID0gbm93OwogCi0JCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7Ci0KLQkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKLQkJCQljb250aW51ZTsKLQotCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOwotCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOwotCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOwotCQl9IGVsc2UKLQkJCWZyZXEgPSBIWjsKLQotCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIGZyZXEgKiBpbnRlcnJ1cHRzKTsKLQotCQkvKgotCQkgKiBJbiBvcmRlciB0byBhdm9pZCBiZWluZyBzdGFsbGVkIGJ5IGFuIChhY2NpZGVudGFsKSBodWdlCi0JCSAqIHNhbXBsZSBwZXJpb2QsIGZvcmNlIHJlc2V0IHRoZSBzYW1wbGUgcGVyaW9kIGlmIHdlIGRpZG4ndAotCQkgKiBnZXQgYW55IGV2ZW50cyBpbiB0aGlzIGZyZXEgcGVyaW9kLgotCQkgKi8KLQkJaWYgKCFpbnRlcnJ1cHRzKSB7Ci0JCQlwZXJmX2Rpc2FibGUoKTsKLQkJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOwotCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKLQkJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7Ci0JCQlwZXJmX2VuYWJsZSgpOwotCQl9CisJCWlmIChkZWx0YSA+IDApCisJCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIFRJQ0tfTlNFQywgZGVsdGEpOwogCX0KIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiB9CkBAIC0xNDQyLDI2ICsxNTc1LDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJvdGF0ZV9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKLQogCWlmICghY3R4LT5ucl9ldmVudHMpCiAJCXJldHVybjsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBSb3RhdGUgdGhlIGZpcnN0IGVudHJ5IGxhc3QgKHdvcmtzIGp1c3QgZmluZSBmb3IgZ3JvdXAgZXZlbnRzIHRvbyk6Ci0JICovCi0JcGVyZl9kaXNhYmxlKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7Ci0JCWJyZWFrOwotCX0KLQlwZXJmX2VuYWJsZSgpOworCisJLyogUm90YXRlIHRoZSBmaXJzdCBlbnRyeSBsYXN0IG9mIG5vbi1waW5uZWQgZ3JvdXBzICovCisJbGlzdF9yb3RhdGVfbGVmdCgmY3R4LT5mbGV4aWJsZV9ncm91cHMpOwogCiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCi12b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IGNwdSkKK3ZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQogewogCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwpAQCAtMTQ2OSwyNCArMTU5NCw0MyBAQAogCWlmICghYXRvbWljX3JlYWQoJm5yX2V2ZW50cykpCiAJCXJldHVybjsKIAotCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJY3R4ID0gY3Vyci0+cGVyZl9ldmVudF9jdHhwOwogCisJcGVyZl9kaXNhYmxlKCk7CisKIAlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOwogCWlmIChjdHgpCiAJCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7CiAKLQlwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoY3B1Y3R4KTsKKwljcHVfY3R4X3NjaGVkX291dChjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAlpZiAoY3R4KQotCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoY3R4KTsKKwkJdGFza19jdHhfc2NoZWRfb3V0KGN0eCwgRVZFTlRfRkxFWElCTEUpOwogCiAJcm90YXRlX2N0eCgmY3B1Y3R4LT5jdHgpOwogCWlmIChjdHgpCiAJCXJvdGF0ZV9jdHgoY3R4KTsKIAotCXBlcmZfZXZlbnRfY3B1X3NjaGVkX2luKGNwdWN0eCwgY3B1KTsKKwljcHVfY3R4X3NjaGVkX2luKGNwdWN0eCwgRVZFTlRfRkxFWElCTEUpOwogCWlmIChjdHgpCi0JCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyLCBjcHUpOworCQl0YXNrX2N0eF9zY2hlZF9pbihjdXJyLCBFVkVOVF9GTEVYSUJMRSk7CisKKwlwZXJmX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IGV2ZW50X2VuYWJsZV9vbl9leGVjKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKCFldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYykKKwkJcmV0dXJuIDA7CisKKwlldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYyA9IDA7CisJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlyZXR1cm4gMDsKKworCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTE0OTksNiArMTY0Myw3IEBACiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVuYWJsZWQgPSAwOworCWludCByZXQ7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOwpAQCAtMTUwOSwxNCArMTY1NCwxNiBAQAogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWlmICghZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCi0JCQljb250aW51ZTsKLQkJZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMgPSAwOwotCQlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCi0JCQljb250aW51ZTsKLQkJX19wZXJmX2V2ZW50X21hcmtfZW5hYmxlZChldmVudCwgY3R4KTsKLQkJZW5hYmxlZCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gZXZlbnRfZW5hYmxlX29uX2V4ZWMoZXZlbnQsIGN0eCk7CisJCWlmIChyZXQpCisJCQllbmFibGVkID0gMTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGV2ZW50X2VuYWJsZV9vbl9leGVjKGV2ZW50LCBjdHgpOworCQlpZiAocmV0KQorCQkJZW5hYmxlZCA9IDE7CiAJfQogCiAJLyoKQEAgLTE1MjcsNyArMTY3NCw3IEBACiAKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiAKLQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4odGFzaywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4odGFzayk7CiAgb3V0OgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTE1OTAsNyArMTczNyw4IEBACiB7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwogCW11dGV4X2luaXQoJmN0eC0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjdHgtPmdyb3VwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjdHgtPnBpbm5lZF9ncm91cHMpOworCUlOSVRfTElTVF9IRUFEKCZjdHgtPmZsZXhpYmxlX2dyb3Vwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7CiAJYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7CiAJY3R4LT50YXNrID0gdGFzazsKQEAgLTM2MDgsNyArMzc1Niw3IEBACiAJCQkvKiAudGlkICovCiAJCQkuc3RhcnQgID0gdm1hLT52bV9zdGFydCwKIAkJCS5sZW4gICAgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCi0JCQkucGdvZmYgID0gdm1hLT52bV9wZ29mZiwKKwkJCS5wZ29mZiAgPSAodTY0KXZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCwKIAkJfSwKIAl9OwogCkBAIC0zNjg4LDEyICszODM2LDEyIEBACiAKIAlpZiAoZXZlbnQtPmF0dHIuZnJlcSkgewogCQl1NjQgbm93ID0gcGVyZl9jbG9jaygpOwotCQlzNjQgZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfc3RhbXA7CisJCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV90aW1lX3N0YW1wOwogCi0JCWh3Yy0+ZnJlcV9zdGFtcCA9IG5vdzsKKwkJaHdjLT5mcmVxX3RpbWVfc3RhbXAgPSBub3c7CiAKLQkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IFRJQ0tfTlNFQykKLQkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgTlNFQ19QRVJfU0VDIC8gKGludClkZWx0YSk7CisJCWlmIChkZWx0YSA+IDAgJiYgZGVsdGEgPCAyKlRJQ0tfTlNFQykKKwkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgZGVsdGEsIGh3Yy0+bGFzdF9wZXJpb2QpOwogCX0KIAogCS8qCkBAIC00MTg0LDcgKzQzMzIsNyBAQAogCS5yZWFkCQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAogfTsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKIAogdm9pZCBwZXJmX3RwX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLAogCQkJICBpbnQgZW50cnlfc2l6ZSkKQEAgLTQyODksNyArNDQzNyw3IEBACiB7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19FVkVOVF9UUkFDSU5HICovCiAKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiBzdGF0aWMgdm9pZCBicF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDg3MCw4ICs1MDE4LDE1IEBACiAJZWxzZQogCQljaGlsZF9ldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKIAotCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkKLQkJY2hpbGRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPSBwYXJlbnRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJaWYgKHBhcmVudF9ldmVudC0+YXR0ci5mcmVxKSB7CisJCXU2NCBzYW1wbGVfcGVyaW9kID0gcGFyZW50X2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmNoaWxkX2V2ZW50LT5odzsKKworCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOworCQlod2MtPmxhc3RfcGVyaW9kICAgPSBzYW1wbGVfcGVyaW9kOworCisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgc2FtcGxlX3BlcmlvZCk7CisJfQogCiAJY2hpbGRfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXIgPSBwYXJlbnRfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXI7CiAKQEAgLTUwMzksNyArNTE5NCwxMSBAQAogCW11dGV4X2xvY2tfbmVzdGVkKCZjaGlsZF9jdHgtPm11dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIGFnYWluOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZF9ldmVudCwgdG1wLCAmY2hpbGRfY3R4LT5ncm91cF9saXN0LAorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZF9ldmVudCwgdG1wLCAmY2hpbGRfY3R4LT5waW5uZWRfZ3JvdXBzLAorCQkJCSBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+ZmxleGlibGVfZ3JvdXBzLAogCQkJCSBncm91cF9lbnRyeSkKIAkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7CiAKQEAgLTUwNDgsNyArNTIwNyw4IEBACiAJICogaXRzIHNpYmxpbmdzIHRvIHRoZSBsaXN0LCBidXQgd2Ugb2J0YWluZWQgJ3RtcCcgYmVmb3JlIHRoYXQgd2hpY2gKIAkgKiB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBsaXN0IGhlYWQgdGVybWluYXRpbmcgdGhlIGl0ZXJhdGlvbi4KIAkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCkpCisJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPnBpbm5lZF9ncm91cHMpIHx8CisJICAgICFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmZsZXhpYmxlX2dyb3VwcykpCiAJCWdvdG8gYWdhaW47CiAKIAltdXRleF91bmxvY2soJmNoaWxkX2N0eC0+bXV0ZXgpOwpAQCAtNTA1Niw2ICs1MjE2LDI0IEBACiAJcHV0X2N0eChjaGlsZF9jdHgpOwogfQogCitzdGF0aWMgdm9pZCBwZXJmX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKworCWlmIChXQVJOX09OX09OQ0UoIXBhcmVudCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOworCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOworCisJZnB1dChwYXJlbnQtPmZpbHApOworCisJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisJZnJlZV9ldmVudChldmVudCk7Cit9CisKIC8qCiAgKiBmcmVlIGFuIHVuZXhwb3NlZCwgdW51c2VkIGNvbnRleHQgYXMgY3JlYXRlZCBieSBpbmhlcml0YW5jZSBieQogICogaW5pdF90YXNrIGJlbG93LCB1c2VkIGJ5IGZvcmsoKSBpbiBjYXNlIG9mIGZhaWwuCkBAIC01MDcwLDIzICs1MjQ4LDE1IEBACiAKIAltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKIGFnYWluOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpCisJCXBlcmZfZnJlZV9ldmVudChldmVudCwgY3R4KTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQotCQkJY29udGludWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywKKwkJCQkgZ3JvdXBfZW50cnkpCisJCXBlcmZfZnJlZV9ldmVudChldmVudCwgY3R4KTsKIAotCQltdXRleF9sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKLQkJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPmNoaWxkX2xpc3QpOwotCQltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOwotCi0JCWZwdXQocGFyZW50LT5maWxwKTsKLQotCQlsaXN0X2RlbF9ldmVudChldmVudCwgY3R4KTsKLQkJZnJlZV9ldmVudChldmVudCk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZjdHgtPmdyb3VwX2xpc3QpKQorCWlmICghbGlzdF9lbXB0eSgmY3R4LT5waW5uZWRfZ3JvdXBzKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmY3R4LT5mbGV4aWJsZV9ncm91cHMpKQogCQlnb3RvIGFnYWluOwogCiAJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKQEAgLTUwOTQsMTIgKzUyNjQsNTQgQEAKIAlwdXRfY3R4KGN0eCk7CiB9CiAKK3N0YXRpYyBpbnQKK2luaGVyaXRfdGFza19ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAorCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnRfY3R4LAorCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkgICBpbnQgKmluaGVyaXRlZF9hbGwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7CisJCSppbmhlcml0ZWRfYWxsID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFjaGlsZF9jdHgpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbworCQkgKiBpbmhlcml0IGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCisJCSAqIEZpcnN0IGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgY29udGV4dCBmb3IgdGhlCisJCSAqIGNoaWxkLgorCQkgKi8KKworCQljaGlsZF9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0KSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpbGRfY3R4KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZF9jdHgsIGNoaWxkKTsKKwkJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IGNoaWxkX2N0eDsKKwkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKwl9CisKKwlyZXQgPSBpbmhlcml0X2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsCisJCQkgICAgY2hpbGQsIGNoaWxkX2N0eCk7CisKKwlpZiAocmV0KQorCQkqaW5oZXJpdGVkX2FsbCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBwZXJmX2V2ZW50IGNvbnRleHQgaW4gdGFza19zdHJ1Y3QKICAqLwogaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4ID0gTlVMTCwgKnBhcmVudF9jdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjbG9uZWRfY3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7CkBAIC01MTM3LDQxICs1MzQ5LDIyIEBACiAJICogV2UgZG9udCBoYXZlIHRvIGRpc2FibGUgTk1JcyAtIHdlIGFyZSBvbmx5IGxvb2tpbmcgYXQKIAkgKiB0aGUgbGlzdCwgbm90IG1hbmlwdWxhdGluZyBpdDoKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQotCQlpZiAoIWV2ZW50LT5hdHRyLmluaGVyaXQpIHsKLQkJCWluaGVyaXRlZF9hbGwgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIWNoaWxkLT5wZXJmX2V2ZW50X2N0eHApIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHBhcmVudCB0YXNrIGNvbnRleHQsIHNvCi0JCQkgKiBpbmhlcml0IGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCi0JCQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZQotCQkJICogY2hpbGQuCi0JCQkgKi8KLQotCQkJY2hpbGRfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksCi0JCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICghY2hpbGRfY3R4KSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZF9jdHgsIGNoaWxkKTsKLQkJCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7Ci0JCQlnZXRfdGFza19zdHJ1Y3QoY2hpbGQpOwotCQl9Ci0KLQkJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAotCQkJCQkgICAgIGNoaWxkLCBjaGlsZF9jdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gaW5oZXJpdF90YXNrX2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsIGNoaWxkLAorCQkJCQkgJmluaGVyaXRlZF9hbGwpOworCQlpZiAocmV0KQogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlyZXQgPSBpbmhlcml0X3Rhc2tfZ3JvdXAoZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwgY2hpbGQsCisJCQkJCSAmaW5oZXJpdGVkX2FsbCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwljaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwOworCiAJaWYgKGNoaWxkX2N0eCAmJiBpbmhlcml0ZWRfYWxsKSB7CiAJCS8qCiAJCSAqIE1hcmsgdGhlIGNoaWxkIGNvbnRleHQgYXMgYSBjbG9uZSBvZiB0aGUgcGFyZW50CkBAIC01MjIwLDcgKzU0MTMsOSBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsICp0bXA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQorCQlfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpCiAJCV9fcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0KGV2ZW50KTsKIH0KIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfZXhpdF9jcHUoaW50IGNwdSkKQEAgLTUyNTgsNiArNTQ1MywxMCBAQAogCQlwZXJmX2V2ZW50X2V4aXRfY3B1KGNwdSk7CiAJCWJyZWFrOwogCisJY2FzZSBDUFVfREVBRDoKKwkJaHdfcGVyZl9ldmVudF9zZXR1cF9vZmZsaW5lKGNwdSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IDJlMTdjOWMuLmIwOGU2OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdWx0ID0gTlVMTDsKIAlpZiAocGlkKSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpmaXJzdDsKLQkJZmlyc3QgPSByY3VfZGVyZWZlcmVuY2UocGlkLT50YXNrc1t0eXBlXS5maXJzdCk7CisJCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QsIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpOwogCQlpZiAoZmlyc3QpCiAJCQlyZXN1bHQgPSBobGlzdF9lbnRyeShmaXJzdCwgc3RydWN0IHRhc2tfc3RydWN0LCBwaWRzWyh0eXBlKV0ubm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IDQ5NTQ0MDcuLjAwZDFmZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcG9zaXhfZ2V0X2NvYXJzZV9yZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQorc3RhdGljIGludCBwb3NpeF9nZXRfY29hcnNlX3Jlcyhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCiB7CiAJKnRwID0ga3RpbWVfdG9fdGltZXNwZWMoS1RJTUVfTE9XX1JFUyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDkxZTA5ZDMuLjVjMzZlYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0yNyw2ICsyNywxNSBAQAogCWNvZGUuIFRoaXMgaXMgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhbmQgcmVwb3J0aW5nIFBNIGJ1Z3MsIGxpa2UKIAlzdXNwZW5kIHN1cHBvcnQuCiAKK2NvbmZpZyBQTV9BRFZBTkNFRF9ERUJVRworCWJvb2wgIkV4dHJhIFBNIGF0dHJpYnV0ZXMgaW4gc3lzZnMgZm9yIGxvdy1sZXZlbCBkZWJ1Z2dpbmcvdGVzdGluZyIKKwlkZXBlbmRzIG9uIFBNX0RFQlVHCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCUFkZCBleHRyYSBzeXNmcyBhdHRyaWJ1dGVzIGFsbG93aW5nIG9uZSB0byBhY2Nlc3Mgc29tZSBQb3dlciBNYW5hZ2VtZW50CisJZmllbGRzIG9mIGRldmljZSBvYmplY3RzIGZyb20gdXNlciBzcGFjZS4gIElmIHlvdSBhcmUgbm90IGEga2VybmVsCisJZGV2ZWxvcGVyIGludGVyZXN0ZWQgaW4gZGVidWdnaW5nL3Rlc3RpbmcgUG93ZXIgTWFuYWdlbWVudCwgc2F5ICJubyIuCisKIGNvbmZpZyBQTV9WRVJCT1NFCiAJYm9vbCAiVmVyYm9zZSBQb3dlciBNYW5hZ2VtZW50IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBNX0RFQlVHCkBAIC04NSw2ICs5NCwxMSBAQAogCWRlcGVuZHMgb24gU1VTUEVORCB8fCBISUJFUk5BVElPTiB8fCBYRU5fU0FWRV9SRVNUT1JFCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBQTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworCWJvb2wKKwlkZXBlbmRzIG9uIFBNX0FEVkFOQ0VEX0RFQlVHCisJZGVmYXVsdCBuCisKIGNvbmZpZyBTVVNQRU5ECiAJYm9vbCAiU3VzcGVuZCB0byBSQU0gYW5kIHN0YW5kYnkiCiAJZGVwZW5kcyBvbiBQTSAmJiBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKQEAgLTIyMiwzICsyMzYsOCBAQAogCSAgYW5kIHRoZSBidXMgdHlwZSBkcml2ZXJzIG9mIHRoZSBidXNlcyB0aGUgZGV2aWNlcyBhcmUgb24gYXJlCiAJICByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBoYW5kbGluZyBvZiB0aGUgYXV0b3N1c3BlbmQgcmVxdWVzdHMgYW5kCiAJICB3YWtlLXVwIGV2ZW50cy4KKworY29uZmlnIFBNX09QUworCWJvb2wKKwlkZXBlbmRzIG9uIFBNX1NMRUVQIHx8IFBNX1JVTlRJTUUKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDA5OThjNzEuLmI1ODgwMGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtNDQsNiArNDQsMzIgQEAKIAkJCT09IE5PVElGWV9CQUQpID8gLUVJTlZBTCA6IDA7CiB9CiAKKy8qIElmIHNldCwgZGV2aWNlcyBtYXkgYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIGFzeW5jaHJvbm91c2x5LiAqLworaW50IHBtX2FzeW5jX2VuYWJsZWQgPSAxOworCitzdGF0aWMgc3NpemVfdCBwbV9hc3luY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG1fYXN5bmNfZW5hYmxlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBtX2FzeW5jX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBtX2FzeW5jX2VuYWJsZWQgPSB2YWw7CisJcmV0dXJuIG47Cit9CisKK3Bvd2VyX2F0dHIocG1fYXN5bmMpOworCiAjaWZkZWYgQ09ORklHX1BNX0RFQlVHCiBpbnQgcG1fdGVzdF9sZXZlbCA9IFRFU1RfTk9ORTsKIApAQCAtMjA4LDkgKzIzNCwxMiBAQAogI2lmZGVmIENPTkZJR19QTV9UUkFDRQogCSZwbV90cmFjZV9hdHRyLmF0dHIsCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgZGVmaW5lZChDT05GSUdfUE1fREVCVUcpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisJJnBtX2FzeW5jX2F0dHIuYXR0ciwKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKIAkmcG1fdGVzdF9hdHRyLmF0dHIsCiAjZW5kaWYKKyNlbmRpZgogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDM2Y2IxNjguLjgzMGNhZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0xMTgxLDcgKzExODEsNyBAQAogCiAJbWVtb3J5X2JtX3Bvc2l0aW9uX3Jlc2V0KCZjb3B5X2JtKTsKIAotCXdoaWxlICh0b19mcmVlX25vcm1hbCA+IDAgJiYgdG9fZnJlZV9oaWdobWVtID4gMCkgeworCXdoaWxlICh0b19mcmVlX25vcm1hbCA+IDAgfHwgdG9fZnJlZV9oaWdobWVtID4gMCkgewogCQl1bnNpZ25lZCBsb25nIHBmbiA9IG1lbW9yeV9ibV9uZXh0X3BmbigmY29weV9ibSk7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIApAQCAtMTUwMCw3ICsxNTAwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIG5yX2hpZ2htZW07CiAKLQlwcmludGsoS0VSTl9JTkZPICJQTTogQ3JlYXRpbmcgaGliZXJuYXRpb24gaW1hZ2U6IFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiUE06IENyZWF0aW5nIGhpYmVybmF0aW9uIGltYWdlOlxuIik7CiAKIAlkcmFpbl9sb2NhbF9wYWdlcyhOVUxMKTsKIAlucl9wYWdlcyA9IGNvdW50X2RhdGFfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd2FwLmMgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCmluZGV4IDA5YjJiMGEuLjFkNTc1NzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd2FwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtNjU3LDEwICs2NTcsNiBAQAogCXN0cnVjdCBzd3N1c3BfaW5mbyAqaGVhZGVyOwogCiAJKmZsYWdzX3AgPSBzd3N1c3BfaGVhZGVyLT5mbGFnczsKLQlpZiAoSVNfRVJSKHJlc3VtZV9iZGV2KSkgewotCQlwcl9kZWJ1ZygiUE06IEltYWdlIGRldmljZSBub3QgaW5pdGlhbGlzZWRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihyZXN1bWVfYmRldik7Ci0JfQogCiAJbWVtc2V0KCZzbmFwc2hvdCwgMCwgc2l6ZW9mKHN0cnVjdCBzbmFwc2hvdF9oYW5kbGUpKTsKIAllcnJvciA9IHNuYXBzaG90X3dyaXRlX25leHQoJnNuYXBzaG90LCBQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjM2MDFiLi4wMDAwMDAwCi0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKLSAqCi0gKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29kZSB0byB3cml0ZSBzdXNwZW5kIGltYWdlIHRvIHN3YXAgYW5kIHJlYWQgaXQgYmFjay4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBHYWJvciBLdXRpIDxzZWFzb25zQGZvcm5heC5odT4KLSAqIENvcHlyaWdodCAoQykgMTk5OCwyMDAxLTIwMDUgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCi0gKgotICogSSdkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIHdvcms6Ci0gKgotICogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+OgotICogTW9kaWZpY2F0aW9ucywgZGVmZWN0aXZlbmVzcyBwb2ludGluZywgYmVpbmcgd2l0aCBtZSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcsCi0gKiBzdXNwZW5kIHRvIHN3YXAgc3BhY2UsIHN0b3AgYWxsIHRhc2tzLiBQb3J0IHRvIDIuNC4xOC1hYyBhbmQgMi41LjE3LgotICoKLSAqIFN0ZXZlIERvZGRpIDxkaXJrQGxvdGguZGVtb24uY28udWs+OgotICogU3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgb2YgaGFyZHdhcmUgc3RhdGUgcmVzdG9yaW5nLgotICoKLSAqIFJhcGggPGdyZXkuaGF2ZW5zQGVhcnRobGluZy5uZXQ+OgotICogU3VwcG9ydCBmb3IgcHJlc2VydmluZyBzdGF0ZXMgb2YgbmV0d29yayBkZXZpY2VzIGFuZCB2aXJ0dWFsIGNvbnNvbGUKLSAqIChpbmNsdWRpbmcgWCBhbmQgc3ZnYXRleHRtb2RlKQotICoKLSAqIEt1cnQgR2FybG9mZiA8Z2FybG9mZkBzdXNlLmRlPjoKLSAqIFN0cmFpZ2h0ZW5lZCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcHJldmVudCBjb21waWxlcnMgZnJvbQotICogcGxheWluZyB0cmlja3Mgd2l0aCBsb2NhbCB2YXJpYWJsZXMuCi0gKgotICogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgotICoKLSAqIEFsZXggQmFkZWEgPHZhbXBpcmVAZ28ucm8+OgotICogRml4ZWQgcnVuYXdheSBpbml0Ci0gKgotICogUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgotICogUmV3b3JrZWQgdGhlIGZyZWVpbmcgb2YgbWVtb3J5IGFuZCB0aGUgaGFuZGxpbmcgb2Ygc3dhcAotICoKLSAqIE1vcmUgc3RhdGUgc2F2ZXJzIGFyZSB3ZWxjb21lLiBFc3BlY2lhbGx5IGZvciB0aGUgc2NzaSBsYXllci4uLgotICoKLSAqIEZvciBUT0RPcyxGSVhNRXMgYWxzbyBsb29rIGluIERvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgInBvd2VyLmgiCi0KLWludCBpbl9zdXNwZW5kIF9fbm9zYXZlZGF0YSA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCBiZjAwMTRkNi4uNGQyMjg5NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xOTUsNiArMTk1LDE1IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHZvaWQgc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kKQoreworCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX05PVElDRSAiJXBmOiBpb2N0bCAnJS44eCcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCAiCisJCQkJImJlIHJlbW92ZWQgc29vbiwgdXBkYXRlIHlvdXIgc3VzcGVuZC10by1kaXNrICIKKwkJCQkidXRpbGl0aWVzXG4iLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY21kKTsKK30KKwogc3RhdGljIGxvbmcgc25hcHNob3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNDYsOCArMjU1LDkgQEAKIAkJZGF0YS0+ZnJvemVuID0gMDsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0NSRUFURV9JTUFHRToKIAljYXNlIFNOQVBTSE9UX0FUT01JQ19TTkFQU0hPVDoKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfQ1JFQVRFX0lNQUdFOgogCQlpZiAoZGF0YS0+bW9kZSAhPSBPX1JET05MWSB8fCAhZGF0YS0+ZnJvemVuICB8fCBkYXRhLT5yZWFkeSkgewogCQkJZXJyb3IgPSAtRVBFUk07CiAJCQlicmVhazsKQEAgLTI3NSw4ICsyODUsOSBAQAogCQlkYXRhLT5yZWFkeSA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9TRVRfSU1BR0VfU0laRToKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFOgogCQlpbWFnZV9zaXplID0gYXJnOwogCQlicmVhazsKIApAQCAtMjkwLDE1ICszMDEsMTcgQEAKIAkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCAobG9mZl90IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJCXNpemUgPSBjb3VudF9zd2FwX3BhZ2VzKGRhdGEtPnN3YXAsIDEpOwogCQlzaXplIDw8PSBQQUdFX1NISUZUOwogCQllcnJvciA9IHB1dF91c2VyKHNpemUsIChsb2ZmX3QgX191c2VyICopYXJnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAljYXNlIFNOQVBTSE9UX0dFVF9TV0FQX1BBR0U6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAkJaWYgKGRhdGEtPnN3YXAgPCAwIHx8IGRhdGEtPnN3YXAgPj0gTUFYX1NXQVBGSUxFUykgewogCQkJZXJyb3IgPSAtRU5PREVWOwogCQkJYnJlYWs7CkBAIC0zMjEsNiArMzM0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOQVBTSE9UX1NFVF9TV0FQX0ZJTEU6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWlmICghc3dzdXNwX3N3YXBfaW5fdXNlKCkpIHsKIAkJCS8qCiAJCQkgKiBVc2VyIHNwYWNlIGVuY29kZXMgZGV2aWNlIHR5cGVzIGFzIHR3by1ieXRlIHZhbHVlcywKQEAgLTM2Miw2ICszNzYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfUE1PUFM6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAogCQlzd2l0Y2ggKGFyZykgewpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDE3NTFjNDU2Li40MDY3NDEyIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTI1OCwzOCArMjU5LDIzIEBACiB9CiAjZW5kaWYKIAotLyoKLSAqIENvbW1hbmRzIHRvIGRvX3N5c2xvZzoKLSAqCi0gKiAJMCAtLSBDbG9zZSB0aGUgbG9nLiAgQ3VycmVudGx5IGEgTk9QLgotICogCTEgLS0gT3BlbiB0aGUgbG9nLiBDdXJyZW50bHkgYSBOT1AuCi0gKiAJMiAtLSBSZWFkIGZyb20gdGhlIGxvZy4KLSAqIAkzIC0tIFJlYWQgYWxsIG1lc3NhZ2VzIHJlbWFpbmluZyBpbiB0aGUgcmluZyBidWZmZXIuCi0gKiAJNCAtLSBSZWFkIGFuZCBjbGVhciBhbGwgbWVzc2FnZXMgcmVtYWluaW5nIGluIHRoZSByaW5nIGJ1ZmZlcgotICogCTUgLS0gQ2xlYXIgcmluZyBidWZmZXIuCi0gKiAJNiAtLSBEaXNhYmxlIHByaW50aydzIHRvIGNvbnNvbGUKLSAqIAk3IC0tIEVuYWJsZSBwcmludGsncyB0byBjb25zb2xlCi0gKgk4IC0tIFNldCBsZXZlbCBvZiBtZXNzYWdlcyBwcmludGVkIHRvIGNvbnNvbGUKLSAqCTkgLS0gUmV0dXJuIG51bWJlciBvZiB1bnJlYWQgY2hhcmFjdGVycyBpbiB0aGUgbG9nIGJ1ZmZlcgotICogICAgIDEwIC0tIFJldHVybiBzaXplIG9mIHRoZSBsb2cgYnVmZmVyCi0gKi8KLWludCBkb19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWYsIGludCBsZW4pCitpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBib29sIGZyb21fZmlsZSkKIHsKIAl1bnNpZ25lZCBpLCBqLCBsaW1pdCwgY291bnQ7CiAJaW50IGRvX2NsZWFyID0gMDsKIAljaGFyIGM7CiAJaW50IGVycm9yID0gMDsKIAotCWVycm9yID0gc2VjdXJpdHlfc3lzbG9nKHR5cGUpOworCWVycm9yID0gc2VjdXJpdHlfc3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIDA6CQkvKiBDbG9zZSBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fQ0xPU0U6CS8qIENsb3NlIGxvZyAqLwogCQlicmVhazsKLQljYXNlIDE6CQkvKiBPcGVuIGxvZyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9PUEVOOgkvKiBPcGVuIGxvZyAqLwogCQlicmVhazsKLQljYXNlIDI6CQkvKiBSZWFkIGZyb20gbG9nICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX1JFQUQ6CS8qIFJlYWQgZnJvbSBsb2cgKi8KIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQogCQkJZ290byBvdXQ7CkBAIC0zMjAsMTAgKzMwNiwxMiBAQAogCQlpZiAoIWVycm9yKQogCQkJZXJyb3IgPSBpOwogCQlicmVhazsKLQljYXNlIDQ6CQkvKiBSZWFkL2NsZWFyIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJLyogUmVhZC9jbGVhciBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9SRUFEX0NMRUFSOgogCQlkb19jbGVhciA9IDE7CiAJCS8qIEZBTEwgVEhSVSAqLwotCWNhc2UgMzoJCS8qIFJlYWQgbGFzdCBrZXJuZWwgbWVzc2FnZXMgKi8KKwkvKiBSZWFkIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMOgogCQllcnJvciA9IC1FSU5WQUw7CiAJCWlmICghYnVmIHx8IGxlbiA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTM3NiwyMSArMzY0LDI1IEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSA1OgkJLyogQ2xlYXIgcmluZyBidWZmZXIgKi8KKwkvKiBDbGVhciByaW5nIGJ1ZmZlciAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DTEVBUjoKIAkJbG9nZ2VkX2NoYXJzID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSA2OgkJLyogRGlzYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KKwkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX09GRjoKIAkJaWYgKHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPT0gLTEpCiAJCQlzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gY29uc29sZV9sb2dsZXZlbDsKIAkJY29uc29sZV9sb2dsZXZlbCA9IG1pbmltdW1fY29uc29sZV9sb2dsZXZlbDsKIAkJYnJlYWs7Ci0JY2FzZSA3OgkJLyogRW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLworCS8qIEVuYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fQ09OU09MRV9PTjoKIAkJaWYgKHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgIT0gLTEpIHsKIAkJCWNvbnNvbGVfbG9nbGV2ZWwgPSBzYXZlZF9jb25zb2xlX2xvZ2xldmVsOwogCQkJc2F2ZWRfY29uc29sZV9sb2dsZXZlbCA9IC0xOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgODoJCS8qIFNldCBsZXZlbCBvZiBtZXNzYWdlcyBwcmludGVkIHRvIGNvbnNvbGUgKi8KKwkvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NPTlNPTEVfTEVWRUw6CiAJCWVycm9yID0gLUVJTlZBTDsKIAkJaWYgKGxlbiA8IDEgfHwgbGVuID4gOCkKIAkJCWdvdG8gb3V0OwpAQCAtNDAxLDEwICszOTMsMTIgQEAKIAkJc2F2ZWRfY29uc29sZV9sb2dsZXZlbCA9IC0xOwogCQllcnJvciA9IDA7CiAJCWJyZWFrOwotCWNhc2UgOToJCS8qIE51bWJlciBvZiBjaGFycyBpbiB0aGUgbG9nIGJ1ZmZlciAqLworCS8qIE51bWJlciBvZiBjaGFycyBpbiB0aGUgbG9nIGJ1ZmZlciAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9TSVpFX1VOUkVBRDoKIAkJZXJyb3IgPSBsb2dfZW5kIC0gbG9nX3N0YXJ0OwogCQlicmVhazsKLQljYXNlIDEwOgkvKiBTaXplIG9mIHRoZSBsb2cgYnVmZmVyICovCisJLyogU2l6ZSBvZiB0aGUgbG9nIGJ1ZmZlciAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUjoKIAkJZXJyb3IgPSBsb2dfYnVmX2xlbjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQxNyw3ICs0MTEsNyBAQAogCiBTWVNDQUxMX0RFRklORTMoc3lzbG9nLCBpbnQsIHR5cGUsIGNoYXIgX191c2VyICosIGJ1ZiwgaW50LCBsZW4pCiB7Ci0JcmV0dXJuIGRvX3N5c2xvZyh0eXBlLCBidWYsIGxlbik7CisJcmV0dXJuIGRvX3N5c2xvZyh0eXBlLCBidWYsIGxlbiwgU1lTTE9HX0ZST01fQ0FMTCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjNiZDA5Yy4uNDJhZDhhZSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KIAogCiAvKgpAQCAtNTExLDYgKzUxMiw0NyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqCitmaW5kX3JlZ3NldChjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldywgdW5zaWduZWQgaW50IHR5cGUpCit7CisJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQ7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgdmlldy0+bjsgKytuKSB7CisJCXJlZ3NldCA9IHZpZXctPnJlZ3NldHMgKyBuOworCQlpZiAocmVnc2V0LT5jb3JlX25vdGVfdHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHJlZ3NldDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwdHJhY2VfcmVnc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlcSwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgc3RydWN0IGlvdmVjICpraW92KQoreworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp2aWV3ID0gdGFza191c2VyX3JlZ3NldF92aWV3KHRhc2spOworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0ID0gZmluZF9yZWdzZXQodmlldywgdHlwZSk7CisJaW50IHJlZ3NldF9ubzsKKworCWlmICghcmVnc2V0IHx8IChraW92LT5pb3ZfbGVuICUgcmVnc2V0LT5zaXplKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZ3NldF9ubyA9IHJlZ3NldCAtIHZpZXctPnJlZ3NldHM7CisJa2lvdi0+aW92X2xlbiA9IG1pbihraW92LT5pb3ZfbGVuLAorCQkJICAgIChfX2tlcm5lbF9zaXplX3QpIChyZWdzZXQtPm4gKiByZWdzZXQtPnNpemUpKTsKKworCWlmIChyZXEgPT0gUFRSQUNFX0dFVFJFR1NFVCkKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIodGFzaywgdmlldywgcmVnc2V0X25vLCAwLAorCQkJCQkgICBraW92LT5pb3ZfbGVuLCBraW92LT5pb3ZfYmFzZSk7CisJZWxzZQorCQlyZXR1cm4gY29weV9yZWdzZXRfZnJvbV91c2VyKHRhc2ssIHZpZXcsIHJlZ3NldF9ubywgMCwKKwkJCQkJICAgICBraW92LT5pb3ZfbGVuLCBraW92LT5pb3ZfYmFzZSk7Cit9CisKKyNlbmRpZgorCiBpbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LAogCQkgICBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKQEAgLTU3Myw2ICs2MTUsMjYgQEAKIAkJCXJldHVybiAwOwogCQlyZXR1cm4gcHRyYWNlX3Jlc3VtZShjaGlsZCwgcmVxdWVzdCwgU0lHS0lMTCk7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSworCWNhc2UgUFRSQUNFX0dFVFJFR1NFVDoKKwljYXNlIFBUUkFDRV9TRVRSRUdTRVQ6CisJeworCQlzdHJ1Y3QgaW92ZWMga2lvdjsKKwkJc3RydWN0IGlvdmVjIF9fdXNlciAqdWlvdiA9IChzdHJ1Y3QgaW92ZWMgX191c2VyICopIGRhdGE7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1aW92LCBzaXplb2YoKnVpb3YpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChfX2dldF91c2VyKGtpb3YuaW92X2Jhc2UsICZ1aW92LT5pb3ZfYmFzZSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXQgPSBwdHJhY2VfcmVnc2V0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCAma2lvdik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gX19wdXRfdXNlcihraW92Lmlvdl9sZW4sICZ1aW92LT5pb3ZfbGVuKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNzExLDYgKzc3MywzMiBAQAogCQllbHNlCiAJCQlyZXQgPSBwdHJhY2Vfc2V0c2lnaW5mbyhjaGlsZCwgJnNpZ2luZm8pOwogCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSworCWNhc2UgUFRSQUNFX0dFVFJFR1NFVDoKKwljYXNlIFBUUkFDRV9TRVRSRUdTRVQ6CisJeworCQlzdHJ1Y3QgaW92ZWMga2lvdjsKKwkJc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnVpb3YgPQorCQkJKHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICopIGRhdGFwOworCQljb21wYXRfdXB0cl90IHB0cjsKKwkJY29tcGF0X3NpemVfdCBsZW47CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1aW92LCBzaXplb2YoKnVpb3YpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChfX2dldF91c2VyKHB0ciwgJnVpb3YtPmlvdl9iYXNlKSB8fAorCQkgICAgX19nZXRfdXNlcihsZW4sICZ1aW92LT5pb3ZfbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWtpb3YuaW92X2Jhc2UgPSBjb21wYXRfcHRyKHB0cik7CisJCWtpb3YuaW92X2xlbiA9IGxlbjsKKworCQlyZXQgPSBwdHJhY2VfcmVnc2V0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCAma2lvdik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gX19wdXRfdXNlcihraW92Lmlvdl9sZW4sICZ1aW92LT5pb3ZfbGVuKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAKIAlkZWZhdWx0OgogCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmFuZ2UuYyBiL2tlcm5lbC9yYW5nZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTJlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcmFuZ2UuYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIFJhbmdlIGFkZCBhbmQgc3VidHJhY3QKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgorCisjaWZuZGVmIEFSUkFZX1NJWkUKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisjZW5kaWYKKworaW50IGFkZF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosIGludCBucl9yYW5nZSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybiBucl9yYW5nZTsKKworCS8qIE91dCBvZiBzbG90czogKi8KKwlpZiAobnJfcmFuZ2UgPj0gYXopCisJCXJldHVybiBucl9yYW5nZTsKKworCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0OworCXJhbmdlW25yX3JhbmdlXS5lbmQgPSBlbmQ7CisKKwlucl9yYW5nZSsrOworCisJcmV0dXJuIG5yX3JhbmdlOworfQorCitpbnQgYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6LCBpbnQgbnJfcmFuZ2UsCisJCSAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWludCBpOworCisJaWYgKHN0YXJ0ID49IGVuZCkKKwkJcmV0dXJuIG5yX3JhbmdlOworCisJLyogVHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZTogKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgeworCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJdTY0IGNvbW1vbl9zdGFydCwgY29tbW9uX2VuZDsKKworCQlpZiAoIXJhbmdlW2ldLmVuZCkKKwkJCWNvbnRpbnVlOworCisJCWNvbW1vbl9zdGFydCA9IG1heChyYW5nZVtpXS5zdGFydCwgc3RhcnQpOworCQljb21tb25fZW5kID0gbWluKHJhbmdlW2ldLmVuZCwgZW5kKTsKKwkJaWYgKGNvbW1vbl9zdGFydCA+IGNvbW1vbl9lbmQpCisJCQljb250aW51ZTsKKworCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOworCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOworCisJCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7CisJCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7CisJCXJldHVybiBucl9yYW5nZTsKKwl9CisKKwkvKiBOZWVkIHRvIGFkZCBpdDogKi8KKwlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBheiwgbnJfcmFuZ2UsIHN0YXJ0LCBlbmQpOworfQorCit2b2lkIHN1YnRyYWN0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWludCBpLCBqOworCisJaWYgKHN0YXJ0ID49IGVuZCkKKwkJcmV0dXJuOworCisJZm9yIChqID0gMDsgaiA8IGF6OyBqKyspIHsKKwkJaWYgKCFyYW5nZVtqXS5lbmQpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kID49IHJhbmdlW2pdLmVuZCkgeworCQkJcmFuZ2Vbal0uc3RhcnQgPSAwOworCQkJcmFuZ2Vbal0uZW5kID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCAmJgorCQkgICAgcmFuZ2Vbal0uc3RhcnQgPCBlbmQpIHsKKwkJCXJhbmdlW2pdLnN0YXJ0ID0gZW5kOworCQkJY29udGludWU7CisJCX0KKworCisJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0KSB7CisJCQlyYW5nZVtqXS5lbmQgPSBzdGFydDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0ID4gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kKSB7CisJCQkvKiBGaW5kIHRoZSBuZXcgc3BhcmU6ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgYXo7IGkrKykgeworCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaSA8IGF6KSB7CisJCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOworCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInJ1biBvZiBzbG90IGluIHJhbmdlc1xuIik7CisJCQl9CisJCQlyYW5nZVtqXS5lbmQgPSBzdGFydDsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNtcF9yYW5nZShjb25zdCB2b2lkICp4MSwgY29uc3Qgdm9pZCAqeDIpCit7CisJY29uc3Qgc3RydWN0IHJhbmdlICpyMSA9IHgxOworCWNvbnN0IHN0cnVjdCByYW5nZSAqcjIgPSB4MjsKKwlzNjQgc3RhcnQxLCBzdGFydDI7CisKKwlzdGFydDEgPSByMS0+c3RhcnQ7CisJc3RhcnQyID0gcjItPnN0YXJ0OworCisJcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKK30KKworaW50IGNsZWFuX3NvcnRfcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6KQoreworCWludCBpLCBqLCBrID0gYXogLSAxLCBucl9yYW5nZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7CisJCWlmIChyYW5nZVtpXS5lbmQpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gazsgaiA+IGk7IGotLSkgeworCQkJaWYgKHJhbmdlW2pdLmVuZCkgeworCQkJCWsgPSBqOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChqID09IGkpCisJCQlicmVhazsKKwkJcmFuZ2VbaV0uc3RhcnQgPSByYW5nZVtrXS5zdGFydDsKKwkJcmFuZ2VbaV0uZW5kICAgPSByYW5nZVtrXS5lbmQ7CisJCXJhbmdlW2tdLnN0YXJ0ID0gMDsKKwkJcmFuZ2Vba10uZW5kICAgPSAwOworCQlrLS07CisJfQorCS8qIGNvdW50IGl0ICovCisJZm9yIChpID0gMDsgaSA8IGF6OyBpKyspIHsKKwkJaWYgKCFyYW5nZVtpXS5lbmQpIHsKKwkJCW5yX3JhbmdlID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogc29ydCB0aGVtICovCisJc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOworCisJcmV0dXJuIG5yX3JhbmdlOworfQorCit2b2lkIHNvcnRfcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQoreworCS8qIHNvcnQgdGhlbSAqLworCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggOWI3ZmQ0Ny4uZjExMjVjMSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ0LDE0ICs0NCw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQogCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrIiwgJnJjdV9sb2NrX2tleSk7CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9iaF9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrX2JoIiwgJnJjdV9iaF9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmhfbG9ja19tYXApOworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9zY2hlZF9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3Vfc2NoZWRfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrX3NjaGVkIiwgJnJjdV9zY2hlZF9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWRfbG9ja19tYXApOwogI2VuZGlmCiAKK2ludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkdWxlcl9hY3RpdmUpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyJ3MgaW5pdGlhbGl6YXRpb24KKyAqIHByb2Nlc3MuICBCZWZvcmUgdGhpcyBpcyBjYWxsZWQsIHRoZSBpZGxlIHRhc2sgbWlnaHQgY29udGFpbgorICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyAoZHVyaW5nIHdoaWNoIHRpbWUsIHRoaXMgaWRsZQorICogdGFzayBpcyBib290aW5nIHRoZSBzeXN0ZW0pLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZQorICogaWRsZSB0YXNrcyBhcmUgcHJvaGliaXRlZCBmcm9tIGNvbnRhaW5pbmcgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMuCisgKi8KK3ZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKQoreworCVdBUk5fT04obnVtX29ubGluZV9jcHVzKCkgIT0gMSk7CisJV0FSTl9PTihucl9jb250ZXh0X3N3aXRjaGVzKCkgPiAwKTsKKwlyY3Vfc2NoZWR1bGVyX2FjdGl2ZSA9IDE7Cit9CisKIC8qCiAgKiBBd2FrZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemVfcmN1KCkgaW5zdGFuY2Ugbm93IHRoYXQgYQogICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOWJiNTIxNy4uNThkZjU1YiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC02MSw2ICs2MSw5IEBACiBzdGF0aWMgaW50IHNodWZmbGVfaW50ZXJ2YWwgPSAzOyAvKiBJbnRlcnZhbCBiZXR3ZWVuIHNodWZmbGVzIChpbiBzZWMpKi8KIHN0YXRpYyBpbnQgc3R1dHRlciA9IDU7CQkvKiBTdGFydC9zdG9wIHRlc3RpbmcgaW50ZXJ2YWwgKGluIHNlYykgKi8KIHN0YXRpYyBpbnQgaXJxcmVhZGVyID0gMTsJLyogUkNVIHJlYWRlcnMgZnJvbSBpcnEgKHRpbWVycykuICovCitzdGF0aWMgaW50IGZxc19kdXJhdGlvbiA9IDA7CS8qIER1cmF0aW9uIG9mIGJ1cnN0cyAodXMpLCAwIHRvIGRpc2FibGUuICovCitzdGF0aWMgaW50IGZxc19ob2xkb2ZmID0gMDsJLyogSG9sZCB0aW1lIHdpdGhpbiBidXJzdCAodXMpLiAqLworc3RhdGljIGludCBmcXNfc3R1dHRlciA9IDM7CS8qIFdhaXQgdGltZSBiZXR3ZWVuIGJ1cnN0cyAocykuICovCiBzdGF0aWMgY2hhciAqdG9ydHVyZV90eXBlID0gInJjdSI7IC8qIFdoYXQgUkNVIGltcGxlbWVudGF0aW9uIHRvIHRvcnR1cmUuICovCiAKIG1vZHVsZV9wYXJhbShucmVhZGVycywgaW50LCAwNDQ0KTsKQEAgLTc5LDYgKzgyLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHN0dXR0ZXIsICJOdW1iZXIgb2Ygc2Vjb25kcyB0byBydW4vaGFsdCB0ZXN0Iik7CiBtb2R1bGVfcGFyYW0oaXJxcmVhZGVyLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFyZWFkZXIsICJBbGxvdyBSQ1UgcmVhZGVycyBmcm9tIGlycSBoYW5kbGVycyIpOworbW9kdWxlX3BhcmFtKGZxc19kdXJhdGlvbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX2R1cmF0aW9uLCAiRHVyYXRpb24gb2YgZnFzIGJ1cnN0cyAodXMpIik7Cittb2R1bGVfcGFyYW0oZnFzX2hvbGRvZmYsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZxc19ob2xkb2ZmLCAiSG9sZG9mZiB0aW1lIHdpdGhpbiBmcXMgYnVyc3RzICh1cykiKTsKK21vZHVsZV9wYXJhbShmcXNfc3R1dHRlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX3N0dXR0ZXIsICJXYWl0IHRpbWUgYmV0d2VlbiBmcXMgYnVyc3RzIChzKSIpOwogbW9kdWxlX3BhcmFtKHRvcnR1cmVfdHlwZSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0b3J0dXJlX3R5cGUsICJUeXBlIG9mIFJDVSB0byB0b3J0dXJlIChyY3UsIHJjdV9iaCwgc3JjdSkiKTsKIApAQCAtOTksNiArMTA4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXRzX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzaHVmZmxlcl90YXNrOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3R1dHRlcl90YXNrOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZnFzX3Rhc2s7CiAKICNkZWZpbmUgUkNVX1RPUlRVUkVfUElQRV9MRU4gMTAKIApAQCAtMjYzLDYgKzI3Myw3IEBACiAJdm9pZCAoKmRlZmVycmVkX2ZyZWUpKHN0cnVjdCByY3VfdG9ydHVyZSAqcCk7CiAJdm9pZCAoKnN5bmMpKHZvaWQpOwogCXZvaWQgKCpjYl9iYXJyaWVyKSh2b2lkKTsKKwl2b2lkICgqZnFzKSh2b2lkKTsKIAlpbnQgKCpzdGF0cykoY2hhciAqcGFnZSk7CiAJaW50IGlycV9jYXBhYmxlOwogCWNoYXIgKm5hbWU7CkBAIC0zNDcsNiArMzU4LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXIsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdSIKQEAgLTM4OCw2ICs0MDAsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9zeW5jIgpAQCAtNDAzLDYgKzQxNiw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9leHBlZGl0ZWQiCkBAIC00NjUsNiArNDc5LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9iaF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllcl9iaCwKKwkuZnFzCQk9IHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X2JoIgpAQCAtNDgwLDYgKzQ5NSw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3VfYmhfc3luYyIKQEAgLTYyMSw2ICs2MzcsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3NjaGVkX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXJfc2NoZWQsCisJLmZxcwkJPSByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInNjaGVkIgpAQCAtNjM2LDYgKzY1Myw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc2NoZWRfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5uYW1lCQk9ICJzY2hlZF9zeW5jIgogfTsKQEAgLTY1MCwxMiArNjY4LDQ1IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cywKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJzY2hlZF9leHBlZGl0ZWQiCiB9OwogCiAvKgorICogUkNVIHRvcnR1cmUgZm9yY2UtcXVpZXNjZW50LXN0YXRlIGt0aHJlYWQuICBSZXBlYXRlZGx5IGluZHVjZXMKKyAqIGJ1cnN0cyBvZiBjYWxscyB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgaW5jcmVhc2luZyB0aGUgcHJvYmFiaWxpdHkKKyAqIG9mIG9jY3VycmVuY2Ugb2Ygc29tZSBpbXBvcnRhbnQgdHlwZXMgb2YgcmFjZSBjb25kaXRpb25zLgorICovCitzdGF0aWMgaW50CityY3VfdG9ydHVyZV9mcXModm9pZCAqYXJnKQoreworCXVuc2lnbmVkIGxvbmcgZnFzX3Jlc3VtZV90aW1lOworCWludCBmcXNfYnVyc3RfcmVtYWluaW5nOworCisJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9mcXMgdGFzayBzdGFydGVkIik7CisJZG8geworCQlmcXNfcmVzdW1lX3RpbWUgPSBqaWZmaWVzICsgZnFzX3N0dXR0ZXIgKiBIWjsKKwkJd2hpbGUgKGppZmZpZXMgLSBmcXNfcmVzdW1lX3RpbWUgPiBMT05HX01BWCkgeworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOworCQl9CisJCWZxc19idXJzdF9yZW1haW5pbmcgPSBmcXNfZHVyYXRpb247CisJCXdoaWxlIChmcXNfYnVyc3RfcmVtYWluaW5nID4gMCkgeworCQkJY3VyX29wcy0+ZnFzKCk7CisJCQl1ZGVsYXkoZnFzX2hvbGRvZmYpOworCQkJZnFzX2J1cnN0X3JlbWFpbmluZyAtPSBmcXNfaG9sZG9mZjsKKwkJfQorCQlyY3Vfc3R1dHRlcl93YWl0KCJyY3VfdG9ydHVyZV9mcXMiKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmIGZ1bGxzdG9wID09IEZVTExTVE9QX0RPTlRTVE9QKTsKKwlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX2ZxcyB0YXNrIHN0b3BwaW5nIik7CisJcmN1dG9ydHVyZV9zaHV0ZG93bl9hYnNvcmIoInJjdV90b3J0dXJlX2ZxcyIpOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFJDVSB0b3J0dXJlIHdyaXRlciBrdGhyZWFkLiAgUmVwZWF0ZWRseSBzdWJzdGl0dXRlcyBhIG5ldyBzdHJ1Y3R1cmUKICAqIGZvciB0aGF0IHBvaW50ZWQgdG8gYnkgcmN1X3RvcnR1cmVfY3VycmVudCwgZnJlZWluZyB0aGUgb2xkIHN0cnVjdHVyZQogICogYWZ0ZXIgYSBzZXJpZXMgb2YgZ3JhY2UgcGVyaW9kcyAodGhlICJwaXBlbGluZSIpLgpAQCAtNzQ1LDcgKzc5NiwxMSBAQAogCiAJaWR4ID0gY3VyX29wcy0+cmVhZGxvY2soKTsKIAljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKLQlwID0gcmN1X2RlcmVmZXJlbmNlKHJjdV90b3J0dXJlX2N1cnJlbnQpOworCXAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKKwkJCQkgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSB8fAorCQkJCSAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwKKwkJCQkgIHNyY3VfcmVhZF9sb2NrX2hlbGQoJnNyY3VfY3RsKSk7CiAJaWYgKHAgPT0gTlVMTCkgewogCQkvKiBMZWF2ZSBiZWNhdXNlIHJjdV90b3J0dXJlX3dyaXRlciBpcyBub3QgeWV0IHVuZGVyd2F5ICovCiAJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKQEAgLTc2MywxMyArODE4LDEzIEBACiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCX0KLQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihyY3VfdG9ydHVyZV9jb3VudClbcGlwZV9jb3VudF0pOworCV9fdGhpc19jcHVfaW5jKHJjdV90b3J0dXJlX2NvdW50W3BpcGVfY291bnRdKTsKIAljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKSAtIGNvbXBsZXRlZDsKIAlpZiAoY29tcGxldGVkID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pIHsKIAkJLyogU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiAqLwogCQljb21wbGV0ZWQgPSBSQ1VfVE9SVFVSRV9QSVBFX0xFTjsKIAl9Ci0JX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIocmN1X3RvcnR1cmVfYmF0Y2gpW2NvbXBsZXRlZF0pOworCV9fdGhpc19jcHVfaW5jKHJjdV90b3J0dXJlX2JhdGNoW2NvbXBsZXRlZF0pOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJY3VyX29wcy0+cmVhZHVubG9jayhpZHgpOwogfQpAQCAtNzk4LDExICs4NTMsMTUgQEAKIAlkbyB7CiAJCWlmIChpcnFyZWFkZXIgJiYgY3VyX29wcy0+aXJxX2NhcGFibGUpIHsKIAkJCWlmICghdGltZXJfcGVuZGluZygmdCkpCi0JCQkJbW9kX3RpbWVyKCZ0LCAxKTsKKwkJCQltb2RfdGltZXIoJnQsIGppZmZpZXMgKyAxKTsKIAkJfQogCQlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwogCQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKLQkJcCA9IHJjdV9kZXJlZmVyZW5jZShyY3VfdG9ydHVyZV9jdXJyZW50KTsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyY3VfdG9ydHVyZV9jdXJyZW50LAorCQkJCQkgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJCSAgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgfHwKKwkJCQkJICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fAorCQkJCQkgIHNyY3VfcmVhZF9sb2NrX2hlbGQoJnNyY3VfY3RsKSk7CiAJCWlmIChwID09IE5VTEwpIHsKIAkJCS8qIFdhaXQgZm9yIHJjdV90b3J0dXJlX3dyaXRlciB0byBnZXQgdW5kZXJ3YXkgKi8KIAkJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKQEAgLTgxOCwxMyArODc3LDEzIEBACiAJCQkvKiBTaG91bGQgbm90IGhhcHBlbiwgYnV0Li4uICovCiAJCQlwaXBlX2NvdW50ID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CiAJCX0KLQkJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIocmN1X3RvcnR1cmVfY291bnQpW3BpcGVfY291bnRdKTsKKwkJX190aGlzX2NwdV9pbmMocmN1X3RvcnR1cmVfY291bnRbcGlwZV9jb3VudF0pOwogCQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKSAtIGNvbXBsZXRlZDsKIAkJaWYgKGNvbXBsZXRlZCA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKSB7CiAJCQkvKiBTaG91bGQgbm90IGhhcHBlbiwgYnV0Li4uICovCiAJCQljb21wbGV0ZWQgPSBSQ1VfVE9SVFVSRV9QSVBFX0xFTjsKIAkJfQotCQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihyY3VfdG9ydHVyZV9iYXRjaClbY29tcGxldGVkXSk7CisJCV9fdGhpc19jcHVfaW5jKHJjdV90b3J0dXJlX2JhdGNoW2NvbXBsZXRlZF0pOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQljdXJfb3BzLT5yZWFkdW5sb2NrKGlkeCk7CiAJCXNjaGVkdWxlKCk7CkBAIC0xMDMwLDEwICsxMDg5LDExIEBACiAJcHJpbnRrKEtFUk5fQUxFUlQgIiVzIiBUT1JUVVJFX0ZMQUcKIAkJIi0tLSAlczogbnJlYWRlcnM9JWQgbmZha2V3cml0ZXJzPSVkICIKIAkJInN0YXRfaW50ZXJ2YWw9JWQgdmVyYm9zZT0lZCB0ZXN0X25vX2lkbGVfaHo9JWQgIgotCQkic2h1ZmZsZV9pbnRlcnZhbD0lZCBzdHV0dGVyPSVkIGlycXJlYWRlcj0lZFxuIiwKKwkJInNodWZmbGVfaW50ZXJ2YWw9JWQgc3R1dHRlcj0lZCBpcnFyZWFkZXI9JWQgIgorCQkiZnFzX2R1cmF0aW9uPSVkIGZxc19ob2xkb2ZmPSVkIGZxc19zdHV0dGVyPSVkXG4iLAogCQl0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBuZmFrZXdyaXRlcnMsCiAJCXN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCwKLQkJc3R1dHRlciwgaXJxcmVhZGVyKTsKKwkJc3R1dHRlciwgaXJxcmVhZGVyLCBmcXNfZHVyYXRpb24sIGZxc19ob2xkb2ZmLCBmcXNfc3R1dHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmN1dG9ydHVyZV9uYiA9IHsKQEAgLTExMDksNiArMTE2OSwxMiBAQAogCX0KIAlzdGF0c190YXNrID0gTlVMTDsKIAorCWlmIChmcXNfdGFzaykgeworCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX2ZxcyB0YXNrIik7CisJCWt0aHJlYWRfc3RvcChmcXNfdGFzayk7CisJfQorCWZxc190YXNrID0gTlVMTDsKKwogCS8qIFdhaXQgZm9yIGFsbCBSQ1UgY2FsbGJhY2tzIHRvIGZpcmUuICAqLwogCiAJaWYgKGN1cl9vcHMtPmNiX2JhcnJpZXIgIT0gTlVMTCkKQEAgLTExNTQsNiArMTIyMCwxMSBAQAogCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChjdXJfb3BzLT5mcXMgPT0gTlVMTCAmJiBmcXNfZHVyYXRpb24gIT0gMCkgeworCQlwcmludGsoS0VSTl9BTEVSVCAicmN1LXRvcnR1cmU6IC0+ZnFzIE5VTEwgYW5kIG5vbi16ZXJvICIKKwkJCQkgICJmcXNfZHVyYXRpb24sIGZxcyBkaXNhYmxlZC5cbiIpOworCQlmcXNfZHVyYXRpb24gPSAwOworCX0KIAlpZiAoY3VyX29wcy0+aW5pdCkKIAkJY3VyX29wcy0+aW5pdCgpOyAvKiBubyAiZ290byB1bndpbmQiIHByaW9yIHRvIHRoaXMgcG9pbnQhISEgKi8KIApAQCAtMTI4Miw2ICsxMzUzLDE5IEBACiAJCQlnb3RvIHVud2luZDsKIAkJfQogCX0KKwlpZiAoZnFzX2R1cmF0aW9uIDwgMCkKKwkJZnFzX2R1cmF0aW9uID0gMDsKKwlpZiAoZnFzX2R1cmF0aW9uKSB7CisJCS8qIENyZWF0ZSB0aGUgc3R1dHRlciB0aHJlYWQgKi8KKwkJZnFzX3Rhc2sgPSBrdGhyZWFkX3J1bihyY3VfdG9ydHVyZV9mcXMsIE5VTEwsCisJCQkJICAgICAgICJyY3VfdG9ydHVyZV9mcXMiKTsKKwkJaWYgKElTX0VSUihmcXNfdGFzaykpIHsKKwkJCWZpcnN0ZXJyID0gUFRSX0VSUihmcXNfdGFzayk7CisJCQlWRVJCT1NFX1BSSU5US19FUlJTVFJJTkcoIkZhaWxlZCB0byBjcmVhdGUgZnFzIik7CisJCQlmcXNfdGFzayA9IE5VTEw7CisJCQlnb3RvIHVud2luZDsKKwkJfQorCX0KIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnJjdXRvcnR1cmVfbmIpOwogCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNTNhZTk1OS4uM2VjODE2MCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAogI2luY2x1ZGUgInJjdXRyZWUuaCIKIApAQCAtNjYsMTEgKzY1LDExIEBACiAJLnNpZ25hbGVkID0gUkNVX0dQX0lETEUsIFwKIAkuZ3BudW0gPSAtMzAwLCBcCiAJLmNvbXBsZXRlZCA9IC0zMDAsIFwKLQkub25vZmZsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAorCS5vbm9mZmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAogCS5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMLCBcCiAJLm9ycGhhbl9jYnNfdGFpbCA9ICZuYW1lLm9ycGhhbl9jYnNfbGlzdCwgXAogCS5vcnBoYW5fcWxlbiA9IDAsIFwKLQkuZnFzbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLmZxc2xvY2spLCBcCisJLmZxc2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKIAkubl9mb3JjZV9xcyA9IDAsIFwKIAkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCiB9CkBAIC04MSw5ICs4MCw2IEBACiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9iaF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfYmhfc3RhdGUpOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CiAKLXN0YXRpYyBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmUgX19yZWFkX21vc3RseTsKLQotCiAvKgogICogUmV0dXJuIHRydWUgaWYgYW4gUkNVIGdyYWNlIHBlcmlvZCBpcyBpbiBwcm9ncmVzcy4gIFRoZSBBQ0NFU1NfT05DRSgpcwogICogcGVybWl0IHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aXRob3V0IGhvbGRpbmcgdGhlIHJvb3QgcmN1X25vZGUKQEAgLTE1Nyw2ICsxNTMsMjQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVIEJILgorICovCit2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9iaF9zdGF0ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1Utc2NoZWQuCisgKi8KK3ZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X3NjaGVkX3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgogICogRG9lcyB0aGUgQ1BVIGhhdmUgY2FsbGJhY2tzIHJlYWR5IHRvIGJlIGludm9rZWQ/CiAgKi8KIHN0YXRpYyBpbnQKQEAgLTQzOSwxMCArNDUzLDEwIEBACiAKIAkvKiBPbmx5IGxldCBvbmUgQ1BVIGNvbXBsYWluIGFib3V0IG90aGVycyBwZXIgdGltZSBpbnRlcnZhbC4gKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWRlbHRhID0gamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbDsKIAlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8ICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCXJzcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7CkBAIC00NTIsMTMgKzQ2NiwxNSBAQAogCSAqIGR1ZSB0byBDUFUgb2ZmbGluaW5nLgogCSAqLwogCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJLyogT0ssIHRpbWUgdG8gcmF0IG9uIG91ciBidWRkeS4uLiAqLwogCiAJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVIHN0YWxsczoiKTsKIAlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJucC0+cXNtYXNrID09IDApCiAJCQljb250aW51ZTsKIAkJZm9yIChjcHUgPSAwOyBjcHUgPD0gcm5wLT5ncnBoaSAtIHJucC0+Z3JwbG87IGNwdSsrKQpAQCAtNDY5LDYgKzQ4NSwxMCBAQAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIChsb25nKShqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCkpOwogCXRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKIAorCS8qIElmIHNvIGNvbmZpZ3VyZWQsIGNvbXBsYWluIGFib3V0IHRhc2tzIGJsb2NraW5nIHRoZSBncmFjZSBwZXJpb2QuICovCisKKwlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwocnNwKTsKKwogCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOyAgLyogS2ljayB0aGVtIGFsbC4gKi8KIH0KIApAQCAtNDgxLDExICs1MDEsMTEgQEAKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpOwogCXRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoKGxvbmcpKGppZmZpZXMgLSByc3AtPmppZmZpZXNfc3RhbGwpID49IDApCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJzcC0+amlmZmllc19zdGFsbCkpCiAJCXJzcC0+amlmZmllc19zdGFsbCA9CiAJCQlqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAogCXNldF9uZWVkX3Jlc2NoZWQoKTsgIC8qIGtpY2sgb3Vyc2VsdmVzIHRvIGdldCB0aGluZ3MgZ29pbmcuICovCiB9CkBAIC01NDUsMTIgKzU2NSwxMiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAocmRwLT5ncG51bSA9PSBBQ0NFU1NfT05DRShybnAtPmdwbnVtKSB8fCAvKiBvdXRzaWRlIGxvY2suICovCi0JICAgICFzcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgcmV0cnkgbGF0ZXIuICovCisJICAgICFyYXdfc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHNvIGxhdGVyLiAqLwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJX19ub3RlX25ld19ncG51bShyc3AsIHJucCwgcmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02MDksMTIgKzYyOSwxMiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAocmRwLT5jb21wbGV0ZWQgPT0gQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpIHx8IC8qIG91dHNpZGUgbG9jay4gKi8KLQkgICAgIXNwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCByZXRyeSBsYXRlci4gKi8KKwkgICAgIXJhd19zcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgc28gbGF0ZXIuICovCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlfX3JjdV9wcm9jZXNzX2dwX2VuZChyc3AsIHJucCwgcmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02NTksMTIgKzY3OSwxNCBAQAogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCi0JaWYgKCFjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKKwlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSB8fCByc3AtPmZxc19hY3RpdmUpIHsKKwkJaWYgKGNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkKKwkJCXJzcC0+ZnFzX25lZWRfZ3AgPSAxOwogCQlpZiAocm5wLT5jb21wbGV0ZWQgPT0gcnNwLT5jb21wbGV0ZWQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCiAJCS8qCiAJCSAqIFByb3BhZ2F0ZSBuZXcgLT5jb21wbGV0ZWQgdmFsdWUgdG8gcmN1X25vZGUgc3RydWN0dXJlcwpAQCAtNjcyLDkgKzY5NCw5IEBACiAJCSAqIG9mIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCB0byBwcm9jZXNzIHRoZWlyIGNhbGxiYWNrcy4KIAkJICovCiAJCXJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKLQkJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtNjk1LDE1ICs3MTcsMTUgQEAKIAkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKIAkJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIE9LLiAqLwogCQlyY3Vfc3RhcnRfZ3BfcGVyX2NwdShyc3AsIHJucCwgcmRwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogbGVhdmUgaXJxcyBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBsZWF2ZSBpcnFzIGRpc2FibGVkLiAqLwogCiAKIAkvKiBFeGNsdWRlIGFueSBjb25jdXJyZW50IENQVS1ob3RwbHVnIG9wZXJhdGlvbnMuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyoKIAkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIHJjdV9ub2RlCkBAIC03MjMsMjEgKzc0NSwyMSBAQAogCSAqIGlycXMgZGlzYWJsZWQuCiAJICovCiAJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhybnApOwogCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKIAkJcm5wLT5ncG51bSA9IHJzcC0+Z3BudW07CiAJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCiAJCQlyY3Vfc3RhcnRfZ3BfcGVyX2NwdShyc3AsIHJucCwgcmRwKTsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCX0KIAogCXJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgbm93IE9LLiAqLwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTc3NiwxNCArNzk4LDE0IEBACiAJCWlmICghKHJucC0+cXNtYXNrICYgbWFzaykpIHsKIAogCQkJLyogT3VyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQsIHNvIGRvbmUuICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlybnAtPnFzbWFzayAmPSB+bWFzazsKIAkJaWYgKHJucC0+cXNtYXNrICE9IDAgfHwgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAogCQkJLyogT3RoZXIgYml0cyBzdGlsbCBzZXQgYXQgdGhpcyBsZXZlbCwgc28gZG9uZS4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CkBAIC03OTMsMTAgKzgxNSwxMCBAQAogCiAJCQlicmVhazsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlybnBfYyA9IHJucDsKIAkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJV0FSTl9PTl9PTkNFKHJucF9jLT5xc21hc2spOwogCX0KIApAQCAtODI1LDcgKzg0Nyw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlybnAgPSByZHAtPm15bm9kZTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobGFzdGNvbXAgIT0gcm5wLT5jb21wbGV0ZWQpIHsKIAogCQkvKgpAQCAtODM3LDEyICs4NTksMTIgQEAKIAkJICogcmFjZSBvY2N1cnJlZC4KIAkJICovCiAJCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDA7CS8qIHRyeSBhZ2FpbiBsYXRlciEgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAltYXNrID0gcmRwLT5ncnBtYXNrOwogCWlmICgocm5wLT5xc21hc2sgJiBtYXNrKSA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJcmRwLT5xc19wZW5kaW5nID0gMDsKIApAQCAtOTA2LDcgKzkyOCw3IEBACiAKIAlpZiAocmRwLT5ueHRsaXN0ID09IE5VTEwpCiAJCXJldHVybjsgIC8qIGlycXMgZGlzYWJsZWQsIHNvIGNvbXBhcmlzb24gaXMgc3RhYmxlLiAqLwotCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkqcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dGxpc3Q7CiAJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CiAJcmRwLT5ueHRsaXN0ID0gTlVMTDsKQEAgLTkxNCw3ICs5MzYsNyBAQAogCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OwogCXJzcC0+b3JwaGFuX3FsZW4gKz0gcmRwLT5xbGVuOwogCXJkcC0+cWxlbiA9IDA7Ci0Jc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiB9CiAKIC8qCkBAIC05MjUsMTAgKzk0NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAocnNwLT5vcnBoYW5fY2JzX2xpc3QgPT0gTlVMTCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAkqcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CkBAIC05MzcsNyArOTU5LDcgQEAKIAlyc3AtPm9ycGhhbl9jYnNfbGlzdCA9IE5VTEw7CiAJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSAmcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CiAJcnNwLT5vcnBoYW5fcWxlbiA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTk1MywyMyArOTc1LDIzIEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCiAJLyogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgbWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsJLyogdGhpcyBpcyB0aGUgb3V0Z29pbmcgQ1BVJ3Mgcm5wLiAqLwogCW1hc2sgPSByZHAtPmdycG1hc2s7CS8qIHJucC0+Z3JwbG8gaXMgY29uc3RhbnQuICovCiAJZG8gewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5xc21hc2tpbml0ICY9IH5tYXNrOwogCQlpZiAocm5wLT5xc21hc2tpbml0ICE9IDApIHsKIAkJCWlmIChybnAgIT0gcmRwLT5teW5vZGUpCi0JCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQogCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQogCQkJbmVlZF9yZXBvcnQgPSByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOwogCQllbHNlCi0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCk7CkBAIC05ODAsMTIgKzEwMDIsMTIgQEAKIAkgKiBiZWNhdXNlIGludm9raW5nIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSB3aXRoIC0+b25vZmZsb2NrCiAJICogaGVsZCBsZWFkcyB0byBkZWFkbG9jay4KIAkgKi8KLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJcm5wID0gcmRwLT5teW5vZGU7CiAJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19OT1JNX0dQKQogCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOwogCWVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX0VYUF9HUCkKIAkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wKTsKIApAQCAtMTE0NCwxMSArMTE2Niw5IEBACiAvKgogICogU2NhbiB0aGUgbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLCBwcm9jZXNzaW5nIGR5bnRpY2sgc3RhdGUgZm9yIGFueSB0aGF0CiAgKiBoYXZlIG5vdCB5ZXQgZW5jb3VudGVyZWQgYSBxdWllc2NlbnQgc3RhdGUsIHVzaW5nIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQuCi0gKiBSZXR1cm5zIDEgaWYgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGVuZHMgd2hpbGUgc2Nhbm5pbmcgKHBvc3NpYmx5Ci0gKiBiZWNhdXNlIHdlIG1hZGUgaXQgZW5kKS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHN1cHByZXNzZWQgc3RhcnQgb2YgbmV3IGdyYWNlIHBlcmlvZHMuCiAgKi8KLXN0YXRpYyBpbnQgcmN1X3Byb2Nlc3NfZHludGljayhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGxvbmcgbGFzdGNvbXAsCi0JCQkgICAgICAgaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICopKQorc3RhdGljIHZvaWQgZm9yY2VfcXNfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICopKQogewogCXVuc2lnbmVkIGxvbmcgYml0OwogCWludCBjcHU7CkBAIC0xMTU4LDEzICsxMTc4LDEzIEBACiAKIAlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCW1hc2sgPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChybnAtPmNvbXBsZXRlZCAhPSBsYXN0Y29tcCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gMTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgeworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOwogCQl9CiAJCWlmIChybnAtPnFzbWFzayA9PSAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNwdSA9IHJucC0+Z3JwbG87CkBAIC0xMTczLDE1ICsxMTkzLDE0IEBACiAJCQlpZiAoKHJucC0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCiAJCQkJbWFzayB8PSBiaXQ7CiAJCX0KLQkJaWYgKG1hc2sgIT0gMCAmJiBybnAtPmNvbXBsZXRlZCA9PSBsYXN0Y29tcCkgeworCQlpZiAobWFzayAhPSAwKSB7CiAKIAkJCS8qIHJjdV9yZXBvcnRfcXNfcm5wKCkgcmVsZWFzZXMgcm5wLT5sb2NrLiAqLwogCQkJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTE5MSwzMiArMTIxMCwyNiBAQAogc3RhdGljIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHJlbGF4ZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGxhc3Rjb21wOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0JdTggc2lnbmFsZWQ7Ci0JdTggZm9yY2Vub3c7CiAKIAlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm47ICAvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZm9yY2UuICovCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKKwlpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX2xoKys7IC8qIEluZXhhY3QsIGNhbiBsb3NlIGNvdW50cy4gIFRvdWdoISAqLwogCQlyZXR1cm47CS8qIFNvbWVvbmUgZWxzZSBpcyBhbHJlYWR5IG9uIHRoZSBqb2IuICovCiAJfQotCWlmIChyZWxheGVkICYmCi0JICAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSA+PSAwKQotCQlnb3RvIHVubG9ja19yZXQ7IC8qIG5vIGVtZXJnZW5jeSBhbmQgZG9uZSByZWNlbnRseS4gKi8KKwlpZiAocmVsYXhlZCAmJiBVTE9OR19DTVBfR0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzLCBqaWZmaWVzKSkKKwkJZ290byB1bmxvY2tfZnFzX3JldDsgLyogbm8gZW1lcmdlbmN5IGFuZCBkb25lIHJlY2VudGx5LiAqLwogCXJzcC0+bl9mb3JjZV9xcysrOwotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQlsYXN0Y29tcCA9IHJzcC0+Z3BudW0gLSAxOwotCXNpZ25hbGVkID0gcnNwLT5zaWduYWxlZDsKKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJcnNwLT5qaWZmaWVzX2ZvcmNlX3FzID0gamlmZmllcyArIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVM7CiAJaWYoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19uZ3ArKzsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7Ci0JCWdvdG8gdW5sb2NrX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCWdvdG8gdW5sb2NrX2Zxc19yZXQ7ICAvKiBubyBHUCBpbiBwcm9ncmVzcywgdGltZSB1cGRhdGVkLiAqLwogCX0KLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQlzd2l0Y2ggKHNpZ25hbGVkKSB7CisJcnNwLT5mcXNfYWN0aXZlID0gMTsKKwlzd2l0Y2ggKHJzcC0+c2lnbmFsZWQpIHsKIAljYXNlIFJDVV9HUF9JRExFOgogCWNhc2UgUkNVX0dQX0lOSVQ6CiAKQEAgLTEyMjQsNDUgKzEyMzcsMzggQEAKIAogCWNhc2UgUkNVX1NBVkVfRFlOVElDSzoKIAorCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQlpZiAoUkNVX1NJR05BTF9JTklUICE9IFJDVV9TQVZFX0RZTlRJQ0spCiAJCQlicmVhazsgLyogU28gZ2NjIHJlY29nbml6ZXMgdGhlIGRlYWQgY29kZS4gKi8KIAogCQkvKiBSZWNvcmQgZHludGljay1pZGxlIHN0YXRlLiAqLwotCQlpZiAocmN1X3Byb2Nlc3NfZHludGljayhyc3AsIGxhc3Rjb21wLAotCQkJCQlkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcikpCi0JCQlnb3RvIHVubG9ja19yZXQ7Ci0JCS8qIGZhbGwgaW50byBuZXh0IGNhc2UuICovCi0KLQljYXNlIFJDVV9TQVZFX0NPTVBMRVRFRDoKLQotCQkvKiBVcGRhdGUgc3RhdGUsIHJlY29yZCBjb21wbGV0aW9uIGNvdW50ZXIuICovCi0JCWZvcmNlbm93ID0gMDsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwotCQlpZiAobGFzdGNvbXAgKyAxID09IHJzcC0+Z3BudW0gJiYKLQkJICAgIGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkICYmCi0JCSAgICByc3AtPnNpZ25hbGVkID09IHNpZ25hbGVkKSB7CisJCWZvcmNlX3FzX3JucChyc3AsIGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKTsKKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQlpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpCiAJCQlyc3AtPnNpZ25hbGVkID0gUkNVX0ZPUkNFX1FTOwotCQkJcnNwLT5jb21wbGV0ZWRfZnFzID0gbGFzdGNvbXA7Ci0JCQlmb3JjZW5vdyA9IHNpZ25hbGVkID09IFJDVV9TQVZFX0NPTVBMRVRFRDsKLQkJfQotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQkJaWYgKCFmb3JjZW5vdykKLQkJCWJyZWFrOwotCQkvKiBmYWxsIGludG8gbmV4dCBjYXNlLiAqLworCQlicmVhazsKIAogCWNhc2UgUkNVX0ZPUkNFX1FTOgogCiAJCS8qIENoZWNrIGR5bnRpY2staWRsZSBzdGF0ZSwgc2VuZCBJUEkgdG8gbGFnZ2FydHMuICovCi0JCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgcnNwLT5jb21wbGV0ZWRfZnFzLAotCQkJCQlyY3VfaW1wbGljaXRfZHludGlja3NfcXMpKQotCQkJZ290byB1bmxvY2tfcmV0OworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlmb3JjZV9xc19ybnAocnNwLCByY3VfaW1wbGljaXRfZHludGlja3NfcXMpOwogCiAJCS8qIExlYXZlIHN0YXRlIGluIGNhc2UgbW9yZSBmb3JjaW5nIGlzIHJlcXVpcmVkLiAqLwogCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJYnJlYWs7CiAJfQotdW5sb2NrX3JldDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKTsKKwlyc3AtPmZxc19hY3RpdmUgPSAwOworCWlmIChyc3AtPmZxc19uZWVkX2dwKSB7CisJCXJhd19zcGluX3VubG9jaygmcnNwLT5mcXNsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJcnNwLT5mcXNfbmVlZF9ncCA9IDA7CisJCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrICovCisJCXJldHVybjsKKwl9CisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KK3VubG9ja19mcXNfcmV0OgorCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19TTVAgKi8KQEAgLTEyOTAsNyArMTI5Niw3IEBACiAJICogSWYgYW4gUkNVIEdQIGhhcyBnb25lIGxvbmcgZW5vdWdoLCBnbyBjaGVjayBmb3IgZHludGljawogCSAqIGlkbGUgQ1BVcyBhbmQsIGlmIG5lZWRlZCwgc2VuZCByZXNjaGVkIElQSXMuCiAJICovCi0JaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQorCWlmIChVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSwgamlmZmllcykpCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCiAJLyoKQEAgLTEzMDQsNyArMTMxMCw3IEBACiAKIAkvKiBEb2VzIHRoaXMgQ1BVIHJlcXVpcmUgYSBub3QteWV0LXN0YXJ0ZWQgZ3JhY2UgcGVyaW9kPyAqLwogCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2dldF9yb290KHJzcCktPmxvY2ssIGZsYWdzKTsKIAkJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgYWJvdmUgbG9jayAqLwogCX0KIApAQCAtMTMzNSw2ICsxMzQxLDkgQEAKIAkgKiBncmFjZS1wZXJpb2QgbWFuaXB1bGF0aW9ucyBhYm92ZS4KIAkgKi8KIAlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCisKKwkvKiBJZiB3ZSBhcmUgbGFzdCBDUFUgb24gd2F5IHRvIGR5bnRpY2staWRsZSBtb2RlLCBhY2NlbGVyYXRlIGl0LiAqLworCXJjdV9uZWVkc19jcHVfZmx1c2goKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEzNjksNyArMTM3OCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbmVzdGZsYWc7CiAJCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wX3Jvb3QtPmxvY2ssIG5lc3RmbGFnKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnBfcm9vdC0+bG9jaywgbmVzdGZsYWcpOwogCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiByZWxlYXNlcyBybnBfcm9vdC0+bG9jay4gKi8KIAl9CiAKQEAgLTEzODcsNyArMTM5Niw3IEBACiAJCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKIAkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKLQl9IGVsc2UgaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQorCX0gZWxzZSBpZiAoVUxPTkdfQ01QX0xUKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcyksIGppZmZpZXMpKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNTIwLDcgKzE1MjksNyBAQAogCiAJLyogSGFzIGFuIFJDVSBHUCBnb25lIGxvbmcgZW5vdWdoIHRvIHNlbmQgcmVzY2hlZCBJUElzICZjPyAqLwogCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJgotCSAgICAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApKSB7CisJICAgIFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkgewogCQlyZHAtPm5fcnBfbmVlZF9mcXMrKzsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTU0NSwxMCArMTU1NCw5IEBACiAvKgogICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQogICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKLSAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KLSAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqIDEgaWYgc28uCiAgKi8KLWludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soaW50IGNwdSkKIHsKIAkvKiBSQ1UgY2FsbGJhY2tzIGVpdGhlciByZWFkeSBvciBwZW5kaW5nPyAqLwogCXJldHVybiBwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpLm54dGxpc3QgfHwKQEAgLTE1NTYsMjEgKzE1NjQsNiBAQAogCSAgICAgICByY3VfcHJlZW1wdF9uZWVkc19jcHUoY3B1KTsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlcidzIGluaXRpYWxpemF0aW9uCi0gKiBwcm9jZXNzLiAgQmVmb3JlIHRoaXMgaXMgY2FsbGVkLCB0aGUgaWRsZSB0YXNrIG1pZ2h0IGNvbnRhaW4KLSAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgKGR1cmluZyB3aGljaCB0aW1lLCB0aGlzIGlkbGUKLSAqIHRhc2sgaXMgYm9vdGluZyB0aGUgc3lzdGVtKS4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUKLSAqIGlkbGUgdGFza3MgYXJlIHByb2hpYml0ZWQgZnJvbSBjb250YWluaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKLSAqIHNlY3Rpb25zLgotICovCi12b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKLXsKLQlXQVJOX09OKG51bV9vbmxpbmVfY3B1cygpICE9IDEpOwotCVdBUk5fT04obnJfY29udGV4dF9zd2l0Y2hlcygpID4gMCk7Ci0JcmN1X3NjaGVkdWxlcl9hY3RpdmUgPSAxOwotfQotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKIHN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKQEAgLTE2NTksNyArMTY1Miw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAogCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7CiAJcmRwLT5ueHRsaXN0ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQpAQCAtMTY2OSw3ICsxNjYyLDcgQEAKIAlyZHAtPmR5bnRpY2tzID0gJnBlcl9jcHUocmN1X2R5bnRpY2tzLCBjcHUpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAlyZHAtPmNwdSA9IGNwdTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xNjg3LDcgKzE2ODAsNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKIAkvKiBTZXQgdXAgbG9jYWwgc3RhdGUsIGVuc3VyaW5nIGNvbnNpc3RlbnQgdmlldyBvZiBnbG9iYWwgc3RhdGUuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsgIC8qIFdlIGNvdWxkIGJlIHJhY2luZyB3aXRoIG5ldyBHUCwgKi8KIAlyZHAtPnFzX3BlbmRpbmcgPSAxOwkgLyogIHNvIHNldCB1cCB0byByZXNwb25kIHRvIGN1cnJlbnQgR1AuICovCiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwpAQCAtMTY5NSw3ICsxNjg4LDcgQEAKIAlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOwogCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKIAkvKgogCSAqIEEgbmV3IGdyYWNlIHBlcmlvZCBtaWdodCBzdGFydCBoZXJlLiAgSWYgc28sIHdlIHdvbid0IGJlIHBhcnQKQEAgLTE3MDMsMTQgKzE2OTYsMTQgQEAKIAkgKi8KIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IEdQIG9uIGxhcmdlIHN5c3RlbXMuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyogQWRkIENQVSB0byByY3Vfbm9kZSBiaXRtYXNrcy4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsKIAltYXNrID0gcmRwLT5ncnBtYXNrOwogCWRvIHsKIAkJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgR1Agb24gc21hbGwgc3lzdGVtcy4gKi8KLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5xc21hc2tpbml0IHw9IG1hc2s7CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpIHsKQEAgLTE3MTgsMTEgKzE3MTEsMTEgQEAKIAkJCXJkcC0+Y29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQ7CiAJCQlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQgLSAxOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCAmJiAhKHJucC0+cXNtYXNraW5pdCAmIG1hc2spKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQpAQCAtMTgwNiwxMSArMTc5OSwxNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2luaXRfb25lKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKKwlzdGF0aWMgY2hhciAqYnVmW10gPSB7ICJyY3Vfbm9kZV9sZXZlbF8wIiwKKwkJCSAgICAgICAicmN1X25vZGVfbGV2ZWxfMSIsCisJCQkgICAgICAgInJjdV9ub2RlX2xldmVsXzIiLAorCQkJICAgICAgICJyY3Vfbm9kZV9sZXZlbF8zIiB9OyAgLyogTWF0Y2ggTUFYX1JDVV9MVkxTICovCiAJaW50IGNwdXN0cmlkZSA9IDE7CiAJaW50IGk7CiAJaW50IGo7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKKwlCVUlMRF9CVUdfT04oTUFYX1JDVV9MVkxTID4gQVJSQVlfU0laRShidWYpKTsgIC8qIEZpeCBidWZbXSBpbml0ISAqLworCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGV2ZWwtdHJhY2tpbmcgYXJyYXlzLiAqLwogCiAJZm9yIChpID0gMTsgaSA8IE5VTV9SQ1VfTFZMUzsgaSsrKQpAQCAtMTgyMyw4ICsxODIyLDkgQEAKIAkJY3B1c3RyaWRlICo9IHJzcC0+bGV2ZWxzcHJlYWRbaV07CiAJCXJucCA9IHJzcC0+bGV2ZWxbaV07CiAJCWZvciAoaiA9IDA7IGogPCByc3AtPmxldmVsY250W2ldOyBqKyssIHJucCsrKSB7Ci0JCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKLQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZybnAtPmxvY2ssICZyY3Vfbm9kZV9jbGFzc1tpXSk7CisJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CisJCQlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZSgmcm5wLT5sb2NrLAorCQkJCQkJICAgJnJjdV9ub2RlX2NsYXNzW2ldLCBidWZbaV0pOwogCQkJcm5wLT5ncG51bSA9IDA7CiAJCQlybnAtPnFzbWFzayA9IDA7CiAJCQlybnAtPnFzbWFza2luaXQgPSAwOwpAQCAtMTg3Niw3ICsxODc2LDcgQEAKIAogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgY3B1OwogCiAJcmN1X2Jvb3R1cF9hbm5vdW5jZSgpOwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCkBAIC0xODk2LDggKzE4OTYsOCBAQAogCSAqIG9yIHRoZSBzY2hlZHVsZXIgYXJlIG9wZXJhdGlvbmFsLgogCSAqLwogCWNwdV9ub3RpZmllcihyY3VfY3B1X25vdGlmeSwgMCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlyY3VfY3B1X25vdGlmeShOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZylpKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJcmN1X2NwdV9ub3RpZnkoTlVMTCwgQ1BVX1VQX1BSRVBBUkUsICh2b2lkICopKGxvbmcpY3B1KTsKIH0KIAogI2luY2x1ZGUgInJjdXRyZWVfcGx1Z2luLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCBkMmEwMDQ2Li4xNDM5ZWI1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTkwLDEyICs5MCwxMiBAQAogICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KICAqLwogc3RydWN0IHJjdV9ub2RlIHsKLQlzcGlubG9ja190IGxvY2s7CS8qIFJvb3QgcmN1X25vZGUncyBsb2NrIHByb3RlY3RzIHNvbWUgKi8KKwlyYXdfc3BpbmxvY2tfdCBsb2NrOwkvKiBSb290IHJjdV9ub2RlJ3MgbG9jayBwcm90ZWN0cyBzb21lICovCiAJCQkJLyogIHJjdV9zdGF0ZSBmaWVsZHMgYXMgd2VsbCBhcyBmb2xsb3dpbmcuICovCi0JbG9uZwlncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCisJdW5zaWduZWQgbG9uZyBncG51bTsJLyogQ3VycmVudCBncmFjZSBwZXJpb2QgZm9yIHRoaXMgbm9kZS4gKi8KIAkJCQkvKiAgVGhpcyB3aWxsIGVpdGhlciBiZSBlcXVhbCB0byBvciBvbmUgKi8KIAkJCQkvKiAgYmVoaW5kIHRoZSByb290IHJjdV9ub2RlJ3MgZ3BudW0uICovCi0JbG9uZwljb21wbGV0ZWQ7CS8qIExhc3QgZ3JhY2UgcGVyaW9kIGNvbXBsZXRlZCBmb3IgdGhpcyBub2RlLiAqLworCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkOyAvKiBMYXN0IEdQIGNvbXBsZXRlZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFzazsJLyogQ1BVcyBvciBncm91cHMgdGhhdCBuZWVkIHRvIHN3aXRjaCBpbiAqLwpAQCAtMTYxLDExICsxNjEsMTEgQEAKIC8qIFBlci1DUFUgZGF0YSBmb3IgcmVhZC1jb3B5IHVwZGF0ZS4gKi8KIHN0cnVjdCByY3VfZGF0YSB7CiAJLyogMSkgcXVpZXNjZW50LXN0YXRlIGFuZCBncmFjZS1wZXJpb2QgaGFuZGxpbmcgOiAqLwotCWxvbmcJCWNvbXBsZXRlZDsJLyogVHJhY2sgcnNwLT5jb21wbGV0ZWQgZ3AgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwljb21wbGV0ZWQ7CS8qIFRyYWNrIHJzcC0+Y29tcGxldGVkIGdwIG51bWJlciAqLwogCQkJCQkvKiAgaW4gb3JkZXIgdG8gZGV0ZWN0IEdQIGVuZC4gKi8KLQlsb25nCQlncG51bTsJCS8qIEhpZ2hlc3QgZ3AgbnVtYmVyIHRoYXQgdGhpcyBDUFUgKi8KKwl1bnNpZ25lZCBsb25nCWdwbnVtOwkJLyogSGlnaGVzdCBncCBudW1iZXIgdGhhdCB0aGlzIENQVSAqLwogCQkJCQkvKiAgaXMgYXdhcmUgb2YgaGF2aW5nIHN0YXJ0ZWQuICovCi0JbG9uZwkJcGFzc2VkX3F1aWVzY19jb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZwlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKIAkJCQkJLyogVmFsdWUgb2YgY29tcGxldGVkIGF0IHRpbWUgb2YgcXMuICovCiAJYm9vbAkJcGFzc2VkX3F1aWVzYzsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCiAJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLwpAQCAtMjIxLDE0ICsyMjEsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHJlc2NoZWRfaXBpOwkvKiBTZW50IGEgcmVzY2hlZCBJUEkuICovCiAKIAkvKiA1KSBfX3JjdV9wZW5kaW5nKCkgc3RhdGlzdGljcy4gKi8KLQlsb25nIG5fcmN1X3BlbmRpbmc7CQkvKiByY3VfcGVuZGluZygpIGNhbGxzIHNpbmNlIGJvb3QuICovCi0JbG9uZyBuX3JwX3FzX3BlbmRpbmc7Ci0JbG9uZyBuX3JwX2NiX3JlYWR5OwotCWxvbmcgbl9ycF9jcHVfbmVlZHNfZ3A7Ci0JbG9uZyBuX3JwX2dwX2NvbXBsZXRlZDsKLQlsb25nIG5fcnBfZ3Bfc3RhcnRlZDsKLQlsb25nIG5fcnBfbmVlZF9mcXM7Ci0JbG9uZyBuX3JwX25lZWRfbm90aGluZzsKKwl1bnNpZ25lZCBsb25nIG5fcmN1X3BlbmRpbmc7CS8qIHJjdV9wZW5kaW5nKCkgY2FsbHMgc2luY2UgYm9vdC4gKi8KKwl1bnNpZ25lZCBsb25nIG5fcnBfcXNfcGVuZGluZzsKKwl1bnNpZ25lZCBsb25nIG5fcnBfY2JfcmVhZHk7CisJdW5zaWduZWQgbG9uZyBuX3JwX2NwdV9uZWVkc19ncDsKKwl1bnNpZ25lZCBsb25nIG5fcnBfZ3BfY29tcGxldGVkOworCXVuc2lnbmVkIGxvbmcgbl9ycF9ncF9zdGFydGVkOworCXVuc2lnbmVkIGxvbmcgbl9ycF9uZWVkX2ZxczsKKwl1bnNpZ25lZCBsb25nIG5fcnBfbmVlZF9ub3RoaW5nOwogCiAJaW50IGNwdTsKIH07CkBAIC0yMzcsMTIgKzIzNywxMSBAQAogI2RlZmluZSBSQ1VfR1BfSURMRQkJMAkvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MuICovCiAjZGVmaW5lIFJDVV9HUF9JTklUCQkxCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KICNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkyCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLwotI2RlZmluZSBSQ1VfU0FWRV9DT01QTEVURUQJMwkvKiBOZWVkIHRvIHNhdmUgcnNwLT5jb21wbGV0ZWQuICovCi0jZGVmaW5lIFJDVV9GT1JDRV9RUwkJNAkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkzCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLwogI2lmZGVmIENPTkZJR19OT19IWgogI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0RZTlRJQ0sKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLSNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9DT01QTEVURUQKKyNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfRk9SQ0VfUVMKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKICNkZWZpbmUgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUwkgMwkvKiBmb3IgcnNwLT5qaWZmaWVzX2ZvcmNlX3FzICovCkBAIC0yNTYsNiArMjU1LDkgQEAKIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwogCisjZGVmaW5lIFVMT05HX0NNUF9HRShhLCBiKQkoVUxPTkdfTUFYIC8gMiA+PSAoYSkgLSAoYikpCisjZGVmaW5lIFVMT05HX0NNUF9MVChhLCBiKQkoVUxPTkdfTUFYIC8gMiA8IChhKSAtIChiKSkKKwogLyoKICAqIFJDVSBnbG9iYWwgc3RhdGUsIGluY2x1ZGluZyBub2RlIGhpZXJhcmNoeS4gIFRoaXMgaGllcmFyY2h5IGlzCiAgKiByZXByZXNlbnRlZCBpbiAiaGVhcCIgZm9ybSBpbiBhIGRlbnNlIGFycmF5LiAgVGhlIHJvb3QgKGZpcnN0IGxldmVsKQpAQCAtMjc3LDEyICsyNzksMTkgQEAKIAogCXU4CXNpZ25hbGVkIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAJCQkJCQkvKiBGb3JjZSBRUyBzdGF0ZS4gKi8KLQlsb25nCWdwbnVtOwkJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KLQlsb25nCWNvbXBsZXRlZDsJCQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLworCXU4CWZxc19hY3RpdmU7CQkJLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgKi8KKwkJCQkJCS8qICBpcyBydW5uaW5nLiAqLworCXU4CWZxc19uZWVkX2dwOwkJCS8qIEEgQ1BVIHdhcyBwcmV2ZW50ZWQgZnJvbSAqLworCQkJCQkJLyogIHN0YXJ0aW5nIGEgbmV3IGdyYWNlICovCisJCQkJCQkvKiAgcGVyaW9kIGJlY2F1c2UgKi8KKwkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSAqLworCQkJCQkJLyogIHdhcyBydW5uaW5nLiAqLworCXVuc2lnbmVkIGxvbmcgZ3BudW07CQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7CQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLwogCiAJLyogRW5kIG9mIGZpZWxkcyBndWFyZGVkIGJ5IHJvb3QgcmN1X25vZGUncyBsb2NrLiAqLwogCi0Jc3BpbmxvY2tfdCBvbm9mZmxvY2s7CQkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLworCXJhd19zcGlubG9ja190IG9ub2ZmbG9jazsJCS8qIGV4Y2x1ZGUgb24vb2ZmbGluZSBhbmQgKi8KIAkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICBBbHNvICovCiAJCQkJCQkvKiAgcHJvdGVjdHMgdGhlIGZvbGxvd2luZyAqLwogCQkJCQkJLyogIG9ycGhhbl9jYnMgZmllbGRzLiAqLwpAQCAtMjkyLDEwICszMDEsOCBAQAogCQkJCQkJLyogIGdvaW5nIG9mZmxpbmUuICovCiAJc3RydWN0IHJjdV9oZWFkICoqb3JwaGFuX2Nic190YWlsOwkvKiBBbmQgdGFpbCBwb2ludGVyLiAqLwogCWxvbmcgb3JwaGFuX3FsZW47CQkJLyogTnVtYmVyIG9mIG9ycGhhbmVkIGNicy4gKi8KLQlzcGlubG9ja190IGZxc2xvY2s7CQkJLyogT25seSBvbmUgdGFzayBmb3JjaW5nICovCisJcmF3X3NwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KIAkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLwotCWxvbmcJY29tcGxldGVkX2ZxczsJCQkvKiBWYWx1ZSBvZiBjb21wbGV0ZWQgQCBzbmFwLiAqLwotCQkJCQkJLyogIFByb3RlY3RlZCBieSBmcXNsb2NrLiAqLwogCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCiAJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCiAJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzOwkJLyogTnVtYmVyIG9mIGNhbGxzIHRvICovCkBAIC0zMTksOCArMzI2LDYgQEAKICNkZWZpbmUgUkNVX09GTF9UQVNLU19FWFBfR1AJMHgyCQkvKiBUYXNrcyBibG9ja2luZyBleHBlZGl0ZWQgKi8KIAkJCQkJCS8qICBHUCB3ZXJlIG1vdmVkIHRvIHJvb3QuICovCiAKLSNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFCi0KIC8qCiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaW50ZXJuYWwgZGVjbGFyYXRpb25zOgogICovCkBAIC0zMzUsNyArMzQwLDcgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9wcmVlbXB0X2RhdGEpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwogCi0jZWxzZSAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciByY3V0cmVlX3BsdWdpbi5oICovCiBzdGF0aWMgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOwpAQCAtMzQ3LDYgKzM1Miw3IEBACiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOwpAQCAtMzY3LDUgKzM3Myw2IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKTsKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpOwogCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KKyNlbmRpZiAvKiAjaWZuZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKaW5kZXggMzdmYmNjZC4uNDY0YWQyYyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKKysrIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKQEAgLTYyLDYgKzYyLDE1IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWQpOwogCiAvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHByZWVtcHRpYmxlIFJDVS4KKyAqLwordm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3VfcHJlZW1wdF9zdGF0ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKICAqIFJlY29yZCBhIHByZWVtcHRhYmxlLVJDVSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLiAgTm90ZQogICogdGhhdCB0aGlzIGp1c3QgbWVhbnMgdGhhdCB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgQ1BVIGlzCiAgKiBub3QgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBUaGVyZSBtaWdodCBiZSBhbnkgbnVtYmVyIG9mIHRhc2tzIGJsb2NrZWQKQEAgLTEwMiw3ICsxMTEsNyBAQAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCiAJCXJkcCA9IHJjdV9wcmVlbXB0X3N0YXRlLnJkYVtjcHVdOwogCQlybnAgPSByZHAtPm15bm9kZTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCB8PSBSQ1VfUkVBRF9VTkxPQ0tfQkxPQ0tFRDsKIAkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IHJucDsKIApAQCAtMTIzLDcgKzEzMiw3IEBACiAJCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmdC0+cmN1X25vZGVfZW50cnkpKTsKIAkJcGhhc2UgPSAocm5wLT5ncG51bSArICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spKSAmIDB4MTsKIAkJbGlzdF9hZGQoJnQtPnJjdV9ub2RlX2VudHJ5LCAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyoKQEAgLTE4MCw3ICsxODksNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3A7CiAKIAlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47ICAvKiBTdGlsbCBuZWVkIG1vcmUgcXVpZXNjZW50IHN0YXRlcyEgKi8KIAl9CiAKQEAgLTE5Nyw4ICsyMDYsOCBAQAogCiAJLyogUmVwb3J0IHVwIHRoZSByZXN0IG9mIHRoZSBoaWVyYXJjaHkuICovCiAJbWFzayA9IHJucC0+Z3JwbWFzazsKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCi0Jc3Bpbl9sb2NrKCZybnBfcC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJucF9wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJjdV9yZXBvcnRfcXNfcm5wKG1hc2ssICZyY3VfcHJlZW1wdF9zdGF0ZSwgcm5wX3AsIGZsYWdzKTsKIH0KIApAQCAtMjQ4LDEwICsyNTcsMTAgQEAKIAkJICovCiAJCWZvciAoOzspIHsKIAkJCXJucCA9IHQtPnJjdV9ibG9ja2VkX25vZGU7Ci0JCQlzcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQkJaWYgKHJucCA9PSB0LT5yY3VfYmxvY2tlZF9ub2RlKQogCQkJCWJyZWFrOwotCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJZW1wdHkgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJCWVtcHR5X2V4cCA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCk7CkBAIC0yNjUsNyArMjc0LDcgQEAKIAkJICogTm90ZSB0aGF0IHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSByZWxlYXNlcyBybnAtPmxvY2suCiAJCSAqLwogCQlpZiAoZW1wdHkpCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJZWxzZQogCQkJcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChybnAsIGZsYWdzKTsKIApAQCAtMjk1LDE2ICszMDQsMjEgQEAKIAlpZiAoLS1BQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpID09IDAgJiYKIAkgICAgdW5saWtlbHkoQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwpKSkKIAkJcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwodCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKKwlXQVJOX09OX09OQ0UoQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nKSA8IDApOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19yY3VfcmVhZF91bmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAorI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKKwogLyoKLSAqIFNjYW4gdGhlIGN1cnJlbnQgbGlzdCBvZiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0gKiBzZWN0aW9ucywgcHJpbnRpbmcgb3V0IHRoZSB0aWQgb2YgZWFjaC4KKyAqIER1bXAgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGFsbCB0YXNrcyBibG9ja2luZyB0aGUgY3VycmVudCBSQ1UKKyAqIGdyYWNlIHBlcmlvZCBvbiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CkBAIC0zMTIsMTIgKzMyNiw1MSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKKwkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCisJCQlzY2hlZF9zaG93X3Rhc2sodCk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBEdW1wIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhbGwgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVCisgKiBncmFjZSBwZXJpb2QuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKworCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKQorCQlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHJucCk7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCisKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAqLworCisvKgorICogU2NhbiB0aGUgY3VycmVudCBsaXN0IG9mIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zLCBwcmludGluZyBvdXQgdGhlIHRpZCBvZiBlYWNoLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKKwlpbnQgcGhhc2U7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKIAkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCiAJCQlwcmludGsoIiBQJWQiLCB0LT5waWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTM4OCwxMSArNDQxLDExIEBACiAJCWxwX3Jvb3QgPSAmcm5wX3Jvb3QtPmJsb2NrZWRfdGFza3NbaV07CiAJCXdoaWxlICghbGlzdF9lbXB0eShscCkpIHsKIAkJCXRwID0gbGlzdF9lbnRyeShscC0+bmV4dCwgdHlwZW9mKCp0cCksIHJjdV9ub2RlX2VudHJ5KTsKLQkJCXNwaW5fbG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCQlsaXN0X2RlbCgmdHAtPnJjdV9ub2RlX2VudHJ5KTsKIAkJCXRwLT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wX3Jvb3Q7CiAJCQlsaXN0X2FkZCgmdHAtPnJjdV9ub2RlX2VudHJ5LCBscF9yb290KTsKLQkJCXNwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTE2LDcgKzU2OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKDs7KSB7CiAJCWlmICghc3luY19yY3VfcHJlZW1wdF9leHBfZG9uZShybnApKQogCQkJYnJlYWs7CkBAIC01MjUsMTIgKzU3OCwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCQlybnAtPmV4cG1hc2sgJj0gfm1hc2s7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTU0NSwxMSArNTk4LDExIEBACiB7CiAJaW50IG11c3Rfd2FpdDsKIAotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJbGlzdF9zcGxpY2VfaW5pdCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdLCAmcm5wLT5ibG9ja2VkX3Rhc2tzWzJdKTsKIAlsaXN0X3NwbGljZV9pbml0KCZybnAtPmJsb2NrZWRfdGFza3NbMV0sICZybnAtPmJsb2NrZWRfdGFza3NbM10pOwogCW11c3Rfd2FpdCA9IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJaWYgKCFtdXN0X3dhaXQpCiAJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7CiB9CkBAIC01OTQsMTMgKzY0NywxMyBAQAogCS8qIGZvcmNlIGFsbCBSQ1UgcmVhZGVycyBvbnRvIGJsb2NrZWRfdGFza3NbXS4gKi8KIAlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIEluaXRpYWxpemUgLT5leHBtYXNrIGZvciBhbGwgbm9uLWxlYWYgcmN1X25vZGUgc3RydWN0dXJlcy4gKi8KIAlyY3VfZm9yX2VhY2hfbm9ubGVhZl9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5leHBtYXNrID0gcm5wLT5xc21hc2tpbml0OwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCiAJLyogU25hcHNob3QgY3VycmVudCBzdGF0ZSBvZiAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cy4gKi8KQEAgLTYwOSw3ICs2NjIsNyBAQAogCWlmIChOVU1fUkNVX05PREVTID4gMSkKIAkJc3luY19yY3VfcHJlZW1wdF9leHBfaW5pdChyc3AsIHJjdV9nZXRfcm9vdChyc3ApKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciBzbmFwc2hvdHRlZCAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cyB0byBkcmFpbi4gKi8KIAlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKQEAgLTcxMyw2ICs3NjYsMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVLCB3aGljaCwgYmVjYXVzZSB0aGVyZSBpcyBubyBwcmVlbXB0aWJsZQorICogUkNVLCBiZWNvbWVzIHRoZSBzYW1lIGFzIHJjdS1zY2hlZC4KKyAqLwordm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKICAqIENQVXMgYmVpbmcgaW4gcXVpZXNjZW50IHN0YXRlcy4KICAqLwpAQCAtNzM0LDcgKzc5Nyw3IEBACiAvKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbm8gcXVpZXRpbmcgb2YgdGFza3MuICovCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KQEAgLTc0NSw2ICs4MDgsMTQgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KICAqLworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgorICogdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KKyAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCiB7CiB9CkBAIC04ODQsMyArOTU1LDExMyBAQAogfQogCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfUkNVX0ZBU1RfTk9fSFopCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZworICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQorICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICoKKyAqIEJlY2F1c2Ugd2UgaGF2ZSBwcmVlbXB0aWJsZSBSQ1UsIGp1c3QgY2hlY2sgd2hldGhlciB0aGlzIENQVSBuZWVkcworICogYW55IGZsYXZvciBvZiBSQ1UuICBEbyBub3QgY2hldyB1cCBsb3RzIG9mIENQVSBjeWNsZXMgd2l0aCBwcmVlbXB0aW9uCisgKiBkaXNhYmxlZCBpbiBhIG1vc3QtbGlrZWx5IHZhaW4gYXR0ZW1wdCB0byBjYXVzZSBSQ1Ugbm90IHRvIG5lZWQgdGhpcyBDUFUuCisgKi8KK2ludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCit7CisJcmV0dXJuIHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soY3B1KTsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIGEgY2FsbGJhY2stZmx1c2ggb3BlcmF0aW9ucyB0bworICogYWxsb3cgdGhlIGxhc3QgQ1BVIHRvIGVudGVyIGR5bnRpY2staWRsZSBtb2RlLiAgQnV0IGZhc3QgZHludGljay1pZGxlCisgKiBlbnRyeSBpcyBub3QgY29uZmlndXJlZCwgc28gd2UgbmV2ZXIgZG8gbmVlZCB0by4KKyAqLworc3RhdGljIHZvaWQgcmN1X25lZWRzX2NwdV9mbHVzaCh2b2lkKQoreworfQorCisjZWxzZSAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKSAqLworCisjZGVmaW5lIFJDVV9ORUVEU19DUFVfRkxVU0hFUyA1CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCByY3VfZHludGlja19kcmFpbik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcmN1X2R5bnRpY2tfaG9sZG9mZik7CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZworICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQorICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICoKKyAqIEJlY2F1c2Ugd2UgYXJlIG5vdCBzdXBwb3J0aW5nIHByZWVtcHRpYmxlIFJDVSwgYXR0ZW1wdCB0byBhY2NlbGVyYXRlCisgKiBhbnkgY3VycmVudCBncmFjZSBwZXJpb2RzIHNvIHRoYXQgUkNVIG5vIGxvbmdlciBuZWVkcyB0aGlzIENQVSwgYnV0CisgKiBvbmx5IGlmIGFsbCBvdGhlciBDUFVzIGFyZSBhbHJlYWR5IGluIGR5bnRpY2tzLWlkbGUgbW9kZS4gIFRoaXMgd2lsbAorICogYWxsb3cgdGhlIENQVSBjb3JlcyB0byBiZSBwb3dlcmVkIGRvd24gaW1tZWRpYXRlbHksIGFzIG9wcG9zZWQgdG8gYWZ0ZXIKKyAqIHdhaXRpbmcgbWFueSBtaWxsaXNlY29uZHMgZm9yIGdyYWNlIHBlcmlvZHMgdG8gZWxhcHNlLgorICoKKyAqIEJlY2F1c2UgaXQgaXMgbm90IGxlZ2FsIHRvIGludm9rZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB3aXRoIGlycXMKKyAqIGRpc2FibGVkLCB3ZSBkbyBvbmUgcGFzcyBvZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlbiBkbyBhCisgKiByYWlzZV9zb2Z0aXJxKCkgdG8gY2F1c2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8gYmUgaW52b2tlZCBsYXRlci4KKyAqIFRoZSBwZXItY3B1IHJjdV9keW50aWNrX2RyYWluIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBzZXF1ZW5jaW5nLgorICovCitpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQoreworCWludCBjID0gMDsKKwlpbnQgdGhhdGNwdTsKKworCS8qIERvbid0IGJvdGhlciB1bmxlc3Mgd2UgYXJlIHRoZSBsYXN0IG5vbi1keW50aWNrLWlkbGUgQ1BVLiAqLworCWZvcl9lYWNoX2NwdV9ub3QodGhhdGNwdSwgbm9oel9jcHVfbWFzaykKKwkJaWYgKHRoYXRjcHUgIT0gY3B1KSB7CisJCQlwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpID0gMDsKKwkJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXMgLSAxOworCQkJcmV0dXJuIHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soY3B1KTsKKwkJfQorCisJLyogQ2hlY2sgYW5kIHVwZGF0ZSB0aGUgcmN1X2R5bnRpY2tfZHJhaW4gc2VxdWVuY2luZy4gKi8KKwlpZiAocGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKSB7CisJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSB0aGUgY291bnRlci4gKi8KKwkJcGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA9IFJDVV9ORUVEU19DUFVfRkxVU0hFUzsKKwl9IGVsc2UgaWYgKC0tcGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKSB7CisJCS8qIFdlIGhhdmUgaGl0IHRoZSBsaW1pdCwgc28gdGltZSB0byBnaXZlIHVwLiAqLworCQlwZXJfY3B1KHJjdV9keW50aWNrX2hvbGRvZmYsIGNwdSkgPSBqaWZmaWVzOworCQlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworCX0KKworCS8qIERvIG9uZSBzdGVwIHB1c2hpbmcgcmVtYWluaW5nIFJDVSBjYWxsYmFja3MgdGhyb3VnaC4gKi8KKwlpZiAocGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KS5ueHRsaXN0KSB7CisJCXJjdV9zY2hlZF9xcyhjcHUpOworCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9zY2hlZF9zdGF0ZSwgMCk7CisJCWMgPSBjIHx8IHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdDsKKwl9CisJaWYgKHBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkubnh0bGlzdCkgeworCQlyY3VfYmhfcXMoY3B1KTsKKwkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3VfYmhfc3RhdGUsIDApOworCQljID0gYyB8fCBwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpLm54dGxpc3Q7CisJfQorCisJLyogSWYgUkNVIGNhbGxiYWNrcyBhcmUgc3RpbGwgcGVuZGluZywgUkNVIHN0aWxsIG5lZWRzIHRoaXMgQ1BVLiAqLworCWlmIChjKSB7CisJCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworCQlwZXJfY3B1KHJjdV9keW50aWNrX2hvbGRvZmYsIGNwdSkgPSBqaWZmaWVzOworCX0KKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIGEgY2FsbGJhY2stZmx1c2ggb3BlcmF0aW9ucyB0bworICogYWxsb3cgdGhlIGxhc3QgQ1BVIHRvIGVudGVyIGR5bnRpY2staWRsZSBtb2RlLgorICovCitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPD0gMCkKKwkJcmV0dXJuOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkodm9pZClyY3VfbmVlZHNfY3B1KGNwdSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmICFkZWZpbmVkKENPTkZJR19SQ1VfRkFTVF9OT19IWikgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCmluZGV4IDlkMmM4ODQuLmQ0NWRiMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKKysrIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwpAQCAtNTAsNyArNTAsNyBAQAogewogCWlmICghcmRwLT5iZWVub25saW5lKQogCQlyZXR1cm47Ci0Jc2VxX3ByaW50ZihtLCAiJTNkJWNjPSVsZCBnPSVsZCBwcT0lZCBwcWM9JWxkIHFwPSVkIiwKKwlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWx1IGc9JWx1IHBxPSVkIHBxYz0lbHUgcXA9JWQiLAogCQkgICByZHAtPmNwdSwKIAkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gJyEnIDogJyAnLAogCQkgICByZHAtPmNvbXBsZXRlZCwgcmRwLT5ncG51bSwKQEAgLTEwNSw3ICsxMDUsNyBAQAogewogCWlmICghcmRwLT5iZWVub25saW5lKQogCQlyZXR1cm47Ci0Jc2VxX3ByaW50ZihtLCAiJWQsJXMsJWxkLCVsZCwlZCwlbGQsJWQiLAorCXNlcV9wcmludGYobSwgIiVkLCVzLCVsdSwlbHUsJWQsJWx1LCVkIiwKIAkJICAgcmRwLT5jcHUsCiAJCSAgIGNwdV9pc19vZmZsaW5lKHJkcC0+Y3B1KSA/ICJcIk5cIiIgOiAiXCJZXCIiLAogCQkgICByZHAtPmNvbXBsZXRlZCwgcmRwLT5ncG51bSwKQEAgLTE1NSwxMyArMTU1LDEzIEBACiAKIHN0YXRpYyB2b2lkIHByaW50X29uZV9yY3Vfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7Ci0JbG9uZyBncG51bTsKKwl1bnNpZ25lZCBsb25nIGdwbnVtOwogCWludCBsZXZlbCA9IDA7CiAJaW50IHBoYXNlOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJZ3BudW0gPSByc3AtPmdwbnVtOwotCXNlcV9wcmludGYobSwgImM9JWxkIGc9JWxkIHM9JWQgamZxPSVsZCBqPSV4ICIKKwlzZXFfcHJpbnRmKG0sICJjPSVsdSBnPSVsdSBzPSVkIGpmcT0lbGQgaj0leCAiCiAJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHUgb3FsZW49JWxkXG4iLAogCQkgICByc3AtPmNvbXBsZXRlZCwgZ3BudW0sIHJzcC0+c2lnbmFsZWQsCiAJCSAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSwKQEAgLTIxNSwxMiArMjE1LDEyIEBACiBzdGF0aWMgaW50IHNob3dfcmN1Z3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLQlzZXFfcHJpbnRmKG0sICJyY3VfcHJlZW1wdDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9wcmVlbXB0OiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9wcmVlbXB0X3N0YXRlLmNvbXBsZXRlZCwgcmN1X3ByZWVtcHRfc3RhdGUuZ3BudW0pOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCXNlcV9wcmludGYobSwgInJjdV9zY2hlZDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9zY2hlZDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAogCQkgICByY3Vfc2NoZWRfc3RhdGUuY29tcGxldGVkLCByY3Vfc2NoZWRfc3RhdGUuZ3BudW0pOwotCXNlcV9wcmludGYobSwgInJjdV9iaDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9iaDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAogCQkgICByY3VfYmhfc3RhdGUuY29tcGxldGVkLCByY3VfYmhfc3RhdGUuZ3BudW0pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCBhZjk2YzFlNC4uMmQ1YmU1ZCAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTE4OCw2ICsxODgsMzYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIHZvaWQgX19yZWxlYXNlX2NoaWxkX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJc3RydWN0IHJlc291cmNlICp0bXAsICpwOworCXJlc291cmNlX3NpemVfdCBzaXplOworCisJcCA9IHItPmNoaWxkOworCXItPmNoaWxkID0gTlVMTDsKKwl3aGlsZSAocCkgeworCQl0bXAgPSBwOworCQlwID0gcC0+c2libGluZzsKKworCQl0bXAtPnBhcmVudCA9IE5VTEw7CisJCXRtcC0+c2libGluZyA9IE5VTEw7CisJCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXModG1wKTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAicmVsZWFzZSBjaGlsZCByZXNvdXJjZSAlcFJcbiIsIHRtcCk7CisJCS8qIG5lZWQgdG8gcmVzdG9yZSBzaXplLCBhbmQga2VlcCBmbGFncyAqLworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZSh0bXApOworCQl0bXAtPnN0YXJ0ID0gMDsKKwkJdG1wLT5lbmQgPSBzaXplIC0gMTsKKwl9Cit9CisKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQoreworCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOworCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKK30KKwogLyoqCiAgKiByZXF1ZXN0X3Jlc291cmNlIC0gcmVxdWVzdCBhbmQgcmVzZXJ2ZSBhbiBJL08gb3IgbWVtb3J5IHJlc291cmNlCiAgKiBAcm9vdDogcm9vdCByZXNvdXJjZSBkZXNjcmlwdG9yCkBAIC0yNzQsNyArMzA0LDcgQEAKIAkJdm9pZCAqYXJnLCBpbnQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkICopKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JdW5zaWduZWQgbG9uZyBwZm4sIGxlbjsKKwl1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjsKIAl1NjQgb3JpZ19lbmQ7CiAJaW50IHJldCA9IC0xOwogCkBAIC0yODQsOSArMzE0LDEwIEBACiAJb3JpZ19lbmQgPSByZXMuZW5kOwogCXdoaWxlICgocmVzLnN0YXJ0IDwgcmVzLmVuZCkgJiYKIAkJKGZpbmRfbmV4dF9zeXN0ZW1fcmFtKCZyZXMsICJTeXN0ZW0gUkFNIikgPj0gMCkpIHsKLQkJcGZuID0gKHVuc2lnbmVkIGxvbmcpKHJlcy5zdGFydCA+PiBQQUdFX1NISUZUKTsKLQkJbGVuID0gKHVuc2lnbmVkIGxvbmcpKChyZXMuZW5kICsgMSAtIHJlcy5zdGFydCkgPj4gUEFHRV9TSElGVCk7Ci0JCXJldCA9ICgqZnVuYykocGZuLCBsZW4sIGFyZyk7CisJCXBmbiA9IChyZXMuc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCQllbmRfcGZuID0gKHJlcy5lbmQgKyAxKSA+PiBQQUdFX1NISUZUOworCQlpZiAoZW5kX3BmbiA+IHBmbikKKwkJCXJldCA9ICgqZnVuYykocGZuLCBlbmRfcGZuIC0gcGZuLCBhcmcpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCXJlcy5zdGFydCA9IHJlcy5lbmQgKyAxOwpAQCAtMjk3LDE0ICszMjgsMjkgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19pc19yYW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gMTsKK30KKy8qCisgKiBUaGlzIGdlbmVyaWMgcGFnZV9pc19yYW0oKSByZXR1cm5zIHRydWUgaWYgc3BlY2lmaWVkIGFkZHJlc3MgaXMKKyAqIHJlZ2lzdGVyZWQgYXMgIlN5c3RlbSBSQU0iIGluIGlvbWVtX3Jlc291cmNlIGxpc3QuCisgKi8KK2ludCBfX3dlYWsgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwZm4pCit7CisJcmV0dXJuIHdhbGtfc3lzdGVtX3JhbV9yYW5nZShwZm4sIDEsIE5VTEwsIF9faXNfcmFtKSA9PSAxOworfQorCiAvKgogICogRmluZCBlbXB0eSBzbG90IGluIHRoZSByZXNvdXJjZSB0cmVlIGdpdmVuIHJhbmdlIGFuZCBhbGlnbm1lbnQuCiAgKi8KIHN0YXRpYyBpbnQgZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogCQkJIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJCSB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCQlyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCksCiAJCQkgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJc3RydWN0IHJlc291cmNlICp0aGlzID0gcm9vdC0+Y2hpbGQ7CkBAIC0zMzAsNyArMzc2LDcgQEAKIAkJCXRtcC5lbmQgPSBtYXg7CiAJCXRtcC5zdGFydCA9IEFMSUdOKHRtcC5zdGFydCwgYWxpZ24pOwogCQlpZiAoYWxpZ25mKQotCQkJYWxpZ25mKGFsaWduZl9kYXRhLCAmdG1wLCBzaXplLCBhbGlnbik7CisJCQl0bXAuc3RhcnQgPSBhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKIAkJaWYgKHRtcC5zdGFydCA8IHRtcC5lbmQgJiYgdG1wLmVuZCAtIHRtcC5zdGFydCA+PSBzaXplIC0gMSkgewogCQkJbmV3LT5zdGFydCA9IHRtcC5zdGFydDsKIAkJCW5ldy0+ZW5kID0gdG1wLnN0YXJ0ICsgc2l6ZSAtIDE7CkBAIC0zNTgsOCArNDA0LDEwIEBACiBpbnQgYWxsb2NhdGVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCSAgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJICAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkgICAgIHJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJICAgICAgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCXJlc291cmNlX3NpemVfdCwKKwkJCQkJCXJlc291cmNlX3NpemVfdCksCiAJCSAgICAgIHZvaWQgKmFsaWduZl9kYXRhKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDNhOGZiMzAuLmFiYjM2YjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9kb21haW5zX211dGV4KTsKIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogCkBAIC0yNDMsMTMgKzI0Myw3IEBACiAKIC8qIHRhc2sgZ3JvdXAgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwogc3RydWN0IHRhc2tfZ3JvdXAgewotI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JdWlkX3QgdWlkOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCS8qIHNjaGVkdWxhYmxlIGVudGl0aWVzIG9mIHRoaXMgZ3JvdXAgb24gZWFjaCBjcHUgKi8KQEAgLTI3NCwzNSArMjY4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogfTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0KLS8qIEhlbHBlciBmdW5jdGlvbiB0byBwYXNzIHVpZCBpbmZvcm1hdGlvbiB0byBjcmVhdGVfc2NoZWRfdXNlcigpICovCi12b2lkIHNldF90Z191aWQoc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQotewotCXVzZXItPnRnLT51aWQgPSB1c2VyLT51aWQ7Ci19Ci0KLS8qCi0gKiBSb290IHRhc2sgZ3JvdXAuCi0gKglFdmVyeSBVSUQgdGFzayBncm91cCAoaW5jbHVkaW5nIGluaXRfdGFza19ncm91cCBha2EgVUlELTApIHdpbGwKLSAqCWJlIGEgY2hpbGQgdG8gdGhpcyBncm91cC4KLSAqLwotc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOwotCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIHNjaGVkIGVudGl0eSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9lbnRpdHksIGluaXRfc2NoZWRfZW50aXR5KTsKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIGNmc19ycSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjZnNfcnEsIGluaXRfdGdfY2ZzX3JxKTsKLSNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwotCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgaW5pdF9zY2hlZF9ydF9lbnRpdHkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBydF9ycSwgaW5pdF9ydF9ycV92YXIpOwotI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwotI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjZGVmaW5lIHJvb3RfdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKiB0YXNrX2dyb3VwX2xvY2sgc2VyaWFsaXplcyBhZGQvcmVtb3ZlIG9mIHRhc2sgZ3JvdXBzIGFuZCBhbHNvIGNoYW5nZXMgdG8KICAqIGEgdGFzayBncm91cCdzIGNwdSBzaGFyZXMuCkBAIC0zMTgsMTEgKzI4NCw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0jIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAkoMipOSUNFXzBfTE9BRCkKLSNlbHNlIC8qICFDT05GSUdfVVNFUl9TQ0hFRCAqLwogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJTklDRV8wX0xPQUQKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKgogICogQSB3ZWlnaHQgb2YgMCBvciAxIGNhbiBjYXVzZSBhcml0aG1ldGljcyBwcm9ibGVtcy4KQEAgLTM0OCwxMSArMzEwLDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCXJjdV9yZWFkX2xvY2soKTsKLQl0ZyA9IF9fdGFza19jcmVkKHApLT51c2VyLT50ZzsKLQlyY3VfcmVhZF91bmxvY2soKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9TQ0hFRCkKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJdGcgPSBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUocCwgY3B1X2Nncm91cF9zdWJzeXNfaWQpLAogCQkJCXN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogI2Vsc2UKQEAgLTM4Myw3ICszNDEsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi0jZW5kaWYJLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYJLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAvKiBDRlMtcmVsYXRlZCBmaWVsZHMgaW4gYSBydW5xdWV1ZSAqLwogc3RydWN0IGNmc19ycSB7CkBAIC00NzgsNyArNDM2LDYgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9ydF9ycV9saXN0OwogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKICNlbmRpZgogfTsKIApAQCAtNjQ1LDYgKzYwMiwxMSBAQAogI2VuZGlmCiB9CiAKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX3NjaGVkX2RvbWFpbihwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKChwKSwgXAorCQkJICAgICAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwgXAorCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZzY2hlZF9kb21haW5zX211dGV4KSkKKwogLyoKICAqIFRoZSBkb21haW4gdHJlZSAocnEtPnNkKSBpcyBwcm90ZWN0ZWQgYnkgUkNVJ3MgcXVpZXNjZW50IHN0YXRlIHRyYW5zaXRpb24uCiAgKiBTZWUgZGV0YWNoX2Rlc3Ryb3lfZG9tYWluczogc3luY2hyb25pemVfc2NoZWQgZm9yIGRldGFpbHMuCkBAIC02NTMsNyArNjE1LDcgQEAKICAqIHByZWVtcHQtZGlzYWJsZWQgc2VjdGlvbnMuCiAgKi8KICNkZWZpbmUgZm9yX2VhY2hfZG9tYWluKGNwdSwgX19zZCkgXAotCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOyBfX3NkOyBfX3NkID0gX19zZC0+cGFyZW50KQorCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVja19zY2hlZF9kb21haW4oY3B1X3JxKGNwdSktPnNkKTsgX19zZDsgX19zZCA9IF9fc2QtPnBhcmVudCkKIAogI2RlZmluZSBjcHVfcnEoY3B1KQkJKCZwZXJfY3B1KHJ1bnF1ZXVlcywgKGNwdSkpKQogI2RlZmluZSB0aGlzX3JxKCkJCSgmX19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpKQpAQCAtOTQxLDE2ICs5MDMsMzMgQEAKICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVyAqLwogCiAvKgorICogQ2hlY2sgd2hldGhlciB0aGUgdGFzayBpcyB3YWtpbmcsIHdlIHVzZSB0aGlzIHRvIHN5bmNocm9uaXplIGFnYWluc3QKKyAqIHR0d3UoKSBzbyB0aGF0IHRhc2tfY3B1KCkgcmVwb3J0cyBhIHN0YWJsZSBudW1iZXIuCisgKgorICogV2UgbmVlZCB0byBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgUEZfU1RBUlRJTkcgdGFza3MgYmVjYXVzZSB0aGUgZm9yaworICogcGF0aCBtaWdodCByZXF1aXJlIHRhc2tfcnFfbG9jaygpIHRvIHdvcmssIGVnLiBpdCBjYW4gY2FsbAorICogc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBmcm9tIHRoZSBjcHVzZXQgY2xvbmVfbnMgY29kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19pc193YWtpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiB1bmxpa2VseSgocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpICYmICEocC0+ZmxhZ3MgJiBQRl9TVEFSVElORykpOworfQorCisvKgogICogX190YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBydW5xdWV1ZSBhIGdpdmVuIHRhc2sgcmVzaWRlcyBvbi4KICAqIE11c3QgYmUgY2FsbGVkIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpfX3Rhc2tfcnFfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJX19hY3F1aXJlcyhycS0+bG9jaykKIHsKKwlzdHJ1Y3QgcnEgKnJxOworCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKwkJd2hpbGUgKHRhc2tfaXNfd2FraW5nKHApKQorCQkJY3B1X3JlbGF4KCk7CisJCXJxID0gdGFza19ycShwKTsKIAkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkpKQorCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkgJiYgIXRhc2tfaXNfd2FraW5nKHApKSkKIAkJCXJldHVybiBycTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJfQpAQCAtOTY3LDEwICs5NDYsMTIgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCiAJZm9yICg7OykgeworCQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCisJCQljcHVfcmVsYXgoKTsKIAkJbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsKIAkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci0JCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCisJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSAmJiAhdGFza19pc193YWtpbmcocCkpKQogCQkJcmV0dXJuIHJxOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssICpmbGFncyk7CiAJfQpAQCAtMTM5MCwzMiArMTM3MSw2IEBACiAgLyogIDE1ICovIDExOTMwNDY0NywgMTQ4MTAyMzIwLCAxODY3Mzc3MDgsIDIzODYwOTI5NCwgMjg2MzMxMTUzLAogfTsKIAotc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApOwotCi0vKgotICogcnVucXVldWUgaXRlcmF0b3IsIHRvIHN1cHBvcnQgU01QIGxvYWQtYmFsYW5jaW5nIGJldHdlZW4gZGlmZmVyZW50Ci0gKiBzY2hlZHVsaW5nIGNsYXNzZXMsIHdpdGhvdXQgaGF2aW5nIHRvIGV4cG9zZSB0aGVpciBpbnRlcm5hbCBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHRvIHRoZSBsb2FkLWJhbGFuY2luZyBwcm9wZXI6Ci0gKi8KLXN0cnVjdCBycV9pdGVyYXRvciB7Ci0Jdm9pZCAqYXJnOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqKCpzdGFydCkodm9pZCAqKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKigqbmV4dCkodm9pZCAqKTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKLQkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKTsKLQotc3RhdGljIGludAotaXRlcl9tb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcik7Ci0jZW5kaWYKLQogLyogVGltZSBzcGVudCBieSB0aGUgdGFza3Mgb2YgdGhlIGNwdSBhY2NvdW50aW5nIGdyb3VwIGV4ZWN1dGluZyBpbiAuLi4gKi8KIGVudW0gY3B1YWNjdF9zdGF0X2luZGV4IHsKIAlDUFVBQ0NUX1NUQVRfVVNFUiwJLyogLi4uIHVzZXIgbW9kZSAqLwpAQCAtMTUzMSw3ICsxNDg2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfb2YoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGNwdV9ycShjcHUpLT5zZCk7CiAKIAlpZiAoIXNkKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE1NjYsNyArMTUyMSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCi1zdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nICp1cGRhdGVfc2hhcmVzX2RhdGE7CitzdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICp1cGRhdGVfc2hhcmVzX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwogCkBAIC0xNzAxLDE2ICsxNjU2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9zaGFyZXNfbG9ja2VkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQotewotCWlmIChyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkKLQkJcmV0dXJuOwotCi0JcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7Ci0JdXBkYXRlX3NoYXJlcyhzZCk7Ci0JcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVfaF9sb2FkKGxvbmcgY3B1KQogewogCWlmIChyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkKQEAgLTE3MjUsMTAgKzE2NzAsNiBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NoYXJlc19sb2NrZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci19Ci0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKQEAgLTE4MDUsNiArMTc0Niw1MSBAQAogCXJhd19zcGluX3VubG9jaygmYnVzaWVzdC0+bG9jayk7CiAJbG9ja19zZXRfc3ViY2xhc3MoJnRoaXNfcnEtPmxvY2suZGVwX21hcCwgMCwgX1JFVF9JUF8pOwogfQorCisvKgorICogZG91YmxlX3JxX2xvY2sgLSBzYWZlbHkgbG9jayB0d28gcnVucXVldWVzCisgKgorICogTm90ZSB0aGlzIGRvZXMgbm90IGRpc2FibGUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfbG9jaywKKyAqIHlvdSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5IGJlZm9yZSBjYWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBkb3VibGVfcnFfbG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCisJX19hY3F1aXJlcyhycTEtPmxvY2spCisJX19hY3F1aXJlcyhycTItPmxvY2spCit7CisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCWlmIChycTEgPT0gcnEyKSB7CisJCXJhd19zcGluX2xvY2soJnJxMS0+bG9jayk7CisJCV9fYWNxdWlyZShycTItPmxvY2spOwkvKiBGYWtlIGl0IG91dCA7KSAqLworCX0gZWxzZSB7CisJCWlmIChycTEgPCBycTIpIHsKKwkJCXJhd19zcGluX2xvY2soJnJxMS0+bG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnEyLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCX0gZWxzZSB7CisJCQlyYXdfc3Bpbl9sb2NrKCZycTItPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQl9CisJfQorCXVwZGF0ZV9ycV9jbG9jayhycTEpOworCXVwZGF0ZV9ycV9jbG9jayhycTIpOworfQorCisvKgorICogZG91YmxlX3JxX3VubG9jayAtIHNhZmVseSB1bmxvY2sgdHdvIHJ1bnF1ZXVlcworICoKKyAqIE5vdGUgdGhpcyBkb2VzIG5vdCByZXN0b3JlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX3VubG9jaywKKyAqIHlvdSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5IGFmdGVyIGNhbGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRvdWJsZV9ycV91bmxvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQorCV9fcmVsZWFzZXMocnExLT5sb2NrKQorCV9fcmVsZWFzZXMocnEyLT5sb2NrKQoreworCXJhd19zcGluX3VubG9jaygmcnExLT5sb2NrKTsKKwlpZiAocnExICE9IHJxMikKKwkJcmF3X3NwaW5fdW5sb2NrKCZycTItPmxvY2spOworCWVsc2UKKwkJX19yZWxlYXNlKHJxMi0+bG9jayk7Cit9CisKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKQEAgLTE4MzQsMTggKzE4MjAsMTQgQEAKICNlbmRpZgogfQogCi0jaW5jbHVkZSAic2NoZWRfc3RhdHMuaCIKLSNpbmNsdWRlICJzY2hlZF9pZGxldGFzay5jIgotI2luY2x1ZGUgInNjaGVkX2ZhaXIuYyIKLSNpbmNsdWRlICJzY2hlZF9ydC5jIgotI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwotIyBpbmNsdWRlICJzY2hlZF9kZWJ1Zy5jIgotI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzIHJ0X3NjaGVkX2NsYXNzOwogCiAjZGVmaW5lIHNjaGVkX2NsYXNzX2hpZ2hlc3QgKCZydF9zY2hlZF9jbGFzcykKICNkZWZpbmUgZm9yX2VhY2hfY2xhc3MoY2xhc3MpIFwKICAgIGZvciAoY2xhc3MgPSBzY2hlZF9jbGFzc19oaWdoZXN0OyBjbGFzczsgY2xhc3MgPSBjbGFzcy0+bmV4dCkKIAorI2luY2x1ZGUgInNjaGVkX3N0YXRzLmgiCisKIHN0YXRpYyB2b2lkIGluY19ucl9ydW5uaW5nKHN0cnVjdCBycSAqcnEpCiB7CiAJcnEtPm5yX3J1bm5pbmcrKzsKQEAgLTE4ODMsMTMgKzE4NjUsMTQgQEAKIAkqYXZnICs9IGRpZmYgPj4gMzsKIH0KIAotc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3N0YXRpYyB2b2lkCitlbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLCBib29sIGhlYWQpCiB7CiAJaWYgKHdha2V1cCkKIAkJcC0+c2Uuc3RhcnRfcnVudGltZSA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWU7CiAKIAlzY2hlZF9pbmZvX3F1ZXVlZChwKTsKLQlwLT5zY2hlZF9jbGFzcy0+ZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXApOworCXAtPnNjaGVkX2NsYXNzLT5lbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCwgaGVhZCk7CiAJcC0+c2Uub25fcnEgPSAxOwogfQogCkBAIC0xOTEyLDYgKzE4OTUsMzcgQEAKIH0KIAogLyoKKyAqIGFjdGl2YXRlX3Rhc2sgLSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQoreworCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCisJCXJxLT5ucl91bmludGVycnVwdGlibGUtLTsKKworCWVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwLCBmYWxzZSk7CisJaW5jX25yX3J1bm5pbmcocnEpOworfQorCisvKgorICogZGVhY3RpdmF0ZV90YXNrIC0gcmVtb3ZlIGEgdGFzayBmcm9tIHRoZSBydW5xdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNsZWVwKQoreworCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCisJCXJxLT5ucl91bmludGVycnVwdGlibGUrKzsKKworCWRlcXVldWVfdGFzayhycSwgcCwgc2xlZXApOworCWRlY19ucl9ydW5uaW5nKHJxKTsKK30KKworI2luY2x1ZGUgInNjaGVkX2lkbGV0YXNrLmMiCisjaW5jbHVkZSAic2NoZWRfZmFpci5jIgorI2luY2x1ZGUgInNjaGVkX3J0LmMiCisjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCisjIGluY2x1ZGUgInNjaGVkX2RlYnVnLmMiCisjZW5kaWYKKworLyoKICAqIF9fbm9ybWFsX3ByaW8gLSByZXR1cm4gdGhlIHByaW9yaXR5IHRoYXQgaXMgYmFzZWQgb24gdGhlIHN0YXRpYyBwcmlvCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fbm9ybWFsX3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTk1NywzMCArMTk3MSw2IEBACiAJcmV0dXJuIHAtPnByaW87CiB9CiAKLS8qCi0gKiBhY3RpdmF0ZV90YXNrIC0gbW92ZSBhIHRhc2sgdG8gdGhlIHJ1bnF1ZXVlLgotICovCi1zdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKLXsKLQlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQotCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07Ci0KLQllbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCk7Ci0JaW5jX25yX3J1bm5pbmcocnEpOwotfQotCi0vKgotICogZGVhY3RpdmF0ZV90YXNrIC0gcmVtb3ZlIGEgdGFzayBmcm9tIHRoZSBydW5xdWV1ZS4KLSAqLwotc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNsZWVwKQotewotCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCi0JCXJxLT5ucl91bmludGVycnVwdGlibGUrKzsKLQotCWRlcXVldWVfdGFzayhycSwgcCwgc2xlZXApOwotCWRlY19ucl9ydW5uaW5nKHJxKTsKLX0KLQogLyoqCiAgKiB0YXNrX2N1cnIgLSBpcyB0aGlzIHRhc2sgY3VycmVudGx5IGV4ZWN1dGluZyBvbiBhIENQVT8KICAqIEBwOiB0aGUgdGFzayBpbiBxdWVzdGlvbi4KQEAgLTI0MDgsMTQgKzIzOTgsMjcgQEAKIAlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKGNwdSAhPSBvcmlnX2NwdSkKKwlpZiAoY3B1ICE9IG9yaWdfY3B1KSB7CisJCS8qCisJCSAqIFNpbmNlIHdlIG1pZ3JhdGUgdGhlIHRhc2sgd2l0aG91dCBob2xkaW5nIGFueSBycS0+bG9jaywKKwkJICogd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGFza19ycV9sb2NrKCksIHNpbmNlIHRoYXQKKwkJICogbWlnaHQgZW5kIHVwIGxvY2tpbmcgYW4gaW52YWxpZCBycS4KKwkJICovCiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KIAotCXJxID0gX190YXNrX3JxX2xvY2socCk7CisJcnEgPSBjcHVfcnEoY3B1KTsKKwlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAorCS8qCisJICogV2UgbWlncmF0ZWQgdGhlIHRhc2sgd2l0aG91dCBob2xkaW5nIGVpdGhlciBycS0+bG9jaywgaG93ZXZlcgorCSAqIHNpbmNlIHRoZSB0YXNrIGlzIG5vdCBvbiB0aGUgdGFzayBsaXN0IGl0c2VsZiwgbm9ib2R5IGVsc2UKKwkgKiB3aWxsIHRyeSBhbmQgbWlncmF0ZSB0aGUgdGFzaywgaGVuY2UgdGhlIHJxIHNob3VsZCBtYXRjaCB0aGUKKwkgKiBjcHUgd2UganVzdCBtb3ZlZCBpdCB0by4KKwkgKi8KKwlXQVJOX09OKHRhc2tfY3B1KHApICE9IGNwdSk7CiAJV0FSTl9PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7Ci0JY3B1ID0gdGFza19jcHUocCk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfY291bnQpOwpAQCAtMjY2Myw3ICsyNjY2LDEzIEBACiAJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CiAjZW5kaWYKIAotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJLyoKKwkgKiBTaW5jZSB0aGUgdGFzayBpcyBub3Qgb24gdGhlIHJxIGFuZCB3ZSBzdGlsbCBoYXZlIFRBU0tfV0FLSU5HIHNldAorCSAqIG5vYm9keSBlbHNlIHdpbGwgbWlncmF0ZSB0aGlzIHRhc2suCisJICovCisJcnEgPSBjcHVfcnEoY3B1KTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisKIAlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwogCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CkBAIC0yNzk0LDcgKzI4MDMsMTMgQEAKIAkgKi8KIAlwcmV2X3N0YXRlID0gcHJldi0+c3RhdGU7CiAJZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpOwotCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyZW50LCBjcHVfb2YocnEpKTsKKyNpZmRlZiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKyNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXICovCisJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKGN1cnJlbnQpOworI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisjZW5kaWYgLyogX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVyAqLwogCWZpbmlzaF9sb2NrX3N3aXRjaChycSwgcHJldik7CiAKIAlmaXJlX3NjaGVkX2luX3ByZWVtcHRfbm90aWZpZXJzKGN1cnJlbnQpOwpAQCAtMzA5OSw1MCArMzExNCw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCiAvKgotICogZG91YmxlX3JxX2xvY2sgLSBzYWZlbHkgbG9jayB0d28gcnVucXVldWVzCi0gKgotICogTm90ZSB0aGlzIGRvZXMgbm90IGRpc2FibGUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfbG9jaywKLSAqIHlvdSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5IGJlZm9yZSBjYWxsaW5nLgotICovCi1zdGF0aWMgdm9pZCBkb3VibGVfcnFfbG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCi0JX19hY3F1aXJlcyhycTEtPmxvY2spCi0JX19hY3F1aXJlcyhycTItPmxvY2spCi17Ci0JQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwotCWlmIChycTEgPT0gcnEyKSB7Ci0JCXJhd19zcGluX2xvY2soJnJxMS0+bG9jayk7Ci0JCV9fYWNxdWlyZShycTItPmxvY2spOwkvKiBGYWtlIGl0IG91dCA7KSAqLwotCX0gZWxzZSB7Ci0JCWlmIChycTEgPCBycTIpIHsKLQkJCXJhd19zcGluX2xvY2soJnJxMS0+bG9jayk7Ci0JCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnEyLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7Ci0JCX0gZWxzZSB7Ci0JCQlyYXdfc3Bpbl9sb2NrKCZycTItPmxvY2spOwotCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCQl9Ci0JfQotCXVwZGF0ZV9ycV9jbG9jayhycTEpOwotCXVwZGF0ZV9ycV9jbG9jayhycTIpOwotfQotCi0vKgotICogZG91YmxlX3JxX3VubG9jayAtIHNhZmVseSB1bmxvY2sgdHdvIHJ1bnF1ZXVlcwotICoKLSAqIE5vdGUgdGhpcyBkb2VzIG5vdCByZXN0b3JlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX3VubG9jaywKLSAqIHlvdSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5IGFmdGVyIGNhbGxpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9ycV91bmxvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQotCV9fcmVsZWFzZXMocnExLT5sb2NrKQotCV9fcmVsZWFzZXMocnEyLT5sb2NrKQotewotCXJhd19zcGluX3VubG9jaygmcnExLT5sb2NrKTsKLQlpZiAocnExICE9IHJxMikKLQkJcmF3X3NwaW5fdW5sb2NrKCZycTItPmxvY2spOwotCWVsc2UKLQkJX19yZWxlYXNlKHJxMi0+bG9jayk7Ci19Ci0KLS8qCiAgKiBzY2hlZF9leGVjIC0gZXhlY3ZlKCkgaXMgYSB2YWx1YWJsZSBiYWxhbmNpbmcgb3Bwb3J0dW5pdHksIGJlY2F1c2UgYXQKICAqIHRoaXMgcG9pbnQgdGhlIHRhc2sgaGFzIHRoZSBzbWFsbGVzdCBlZmZlY3RpdmUgbWVtb3J5IGFuZCBjYWNoZSBmb290cHJpbnQuCiAgKi8KQEAgLTMxOTAsMTc3MSArMzE2MSw2IEBACiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiB9CiAKLS8qCi0gKiBwdWxsX3Rhc2sgLSBtb3ZlIGEgdGFzayBmcm9tIGEgcmVtb3RlIHJ1bnF1ZXVlIHRvIHRoZSBsb2NhbCBydW5xdWV1ZS4KLSAqIEJvdGggcnVucXVldWVzIG11c3QgYmUgbG9ja2VkLgotICovCi1zdGF0aWMgdm9pZCBwdWxsX3Rhc2soc3RydWN0IHJxICpzcmNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJICAgICAgc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUpCi17Ci0JZGVhY3RpdmF0ZV90YXNrKHNyY19ycSwgcCwgMCk7Ci0Jc2V0X3Rhc2tfY3B1KHAsIHRoaXNfY3B1KTsKLQlhY3RpdmF0ZV90YXNrKHRoaXNfcnEsIHAsIDApOwotCWNoZWNrX3ByZWVtcHRfY3Vycih0aGlzX3JxLCBwLCAwKTsKLX0KLQotLyoKLSAqIGNhbl9taWdyYXRlX3Rhc2sgLSBtYXkgdGFzayBwIGZyb20gcnVucXVldWUgcnEgYmUgbWlncmF0ZWQgdG8gdGhpc19jcHU/Ci0gKi8KLXN0YXRpYwotaW50IGNhbl9taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgdGhpc19jcHUsCi0JCSAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICAgIGludCAqYWxsX3Bpbm5lZCkKLXsKLQlpbnQgdHNrX2NhY2hlX2hvdCA9IDA7Ci0JLyoKLQkgKiBXZSBkbyBub3QgbWlncmF0ZSB0YXNrcyB0aGF0IGFyZToKLQkgKiAxKSBydW5uaW5nIChvYnZpb3VzbHkpLCBvcgotCSAqIDIpIGNhbm5vdCBiZSBtaWdyYXRlZCB0byB0aGlzIENQVSBkdWUgdG8gY3B1c19hbGxvd2VkLCBvcgotCSAqIDMpIGFyZSBjYWNoZS1ob3Qgb24gdGhlaXIgY3VycmVudCBDUFUuCi0JICovCi0JaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkgewotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZSk7Ci0JCXJldHVybiAwOwotCX0KLQkqYWxsX3Bpbm5lZCA9IDA7Ci0KLQlpZiAodGFza19ydW5uaW5nKHJxLCBwKSkgewotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX3J1bm5pbmcpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIEFnZ3Jlc3NpdmUgbWlncmF0aW9uIGlmOgotCSAqIDEpIHRhc2sgaXMgY2FjaGUgY29sZCwgb3IKLQkgKiAyKSB0b28gbWFueSBiYWxhbmNlIGF0dGVtcHRzIGhhdmUgZmFpbGVkLgotCSAqLwotCi0JdHNrX2NhY2hlX2hvdCA9IHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpOwotCWlmICghdHNrX2NhY2hlX2hvdCB8fAotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcykgewotI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi0JCWlmICh0c2tfY2FjaGVfaG90KSB7Ci0JCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ob3RfZ2FpbmVkW2lkbGVdKTsKLQkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOwotCQl9Ci0jZW5kaWYKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHRza19jYWNoZV9ob3QpIHsKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1iYWxhbmNlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLAotCSAgICAgIGludCAqdGhpc19iZXN0X3ByaW8sIHN0cnVjdCBycV9pdGVyYXRvciAqaXRlcmF0b3IpCi17Ci0JaW50IGxvb3BzID0gMCwgcHVsbGVkID0gMCwgcGlubmVkID0gMDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKLQotCWlmIChtYXhfbG9hZF9tb3ZlID09IDApCi0JCWdvdG8gb3V0OwotCi0JcGlubmVkID0gMTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGxvYWQtYmFsYW5jaW5nIGl0ZXJhdG9yOgotCSAqLwotCXAgPSBpdGVyYXRvci0+c3RhcnQoaXRlcmF0b3ItPmFyZyk7Ci1uZXh0OgotCWlmICghcCB8fCBsb29wcysrID4gc3lzY3RsX3NjaGVkX25yX21pZ3JhdGUpCi0JCWdvdG8gb3V0OwotCi0JaWYgKChwLT5zZS5sb2FkLndlaWdodCA+PiAxKSA+IHJlbV9sb2FkX21vdmUgfHwKLQkgICAgIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLCAmcGlubmVkKSkgewotCQlwID0gaXRlcmF0b3ItPm5leHQoaXRlcmF0b3ItPmFyZyk7Ci0JCWdvdG8gbmV4dDsKLQl9Ci0KLQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOwotCXB1bGxlZCsrOwotCXJlbV9sb2FkX21vdmUgLT0gcC0+c2UubG9hZC53ZWlnaHQ7Ci0KLSNpZmRlZiBDT05GSUdfUFJFRU1QVAotCS8qCi0JICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUga2VybmVscwotCSAqIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUgdGhlIGNyaXRpY2FsCi0JICogc2VjdGlvbi4KLQkgKi8KLQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkKLQkJZ290byBvdXQ7Ci0jZW5kaWYKLQotCS8qCi0JICogV2Ugb25seSB3YW50IHRvIHN0ZWFsIHVwIHRvIHRoZSBwcmVzY3JpYmVkIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkLgotCSAqLwotCWlmIChyZW1fbG9hZF9tb3ZlID4gMCkgewotCQlpZiAocC0+cHJpbyA8ICp0aGlzX2Jlc3RfcHJpbykKLQkJCSp0aGlzX2Jlc3RfcHJpbyA9IHAtPnByaW87Ci0JCXAgPSBpdGVyYXRvci0+bmV4dChpdGVyYXRvci0+YXJnKTsKLQkJZ290byBuZXh0OwotCX0KLW91dDoKLQkvKgotCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmUgb2Ygb25seSB0d28gcGxhY2VzIHB1bGxfdGFzaygpIGlzIGNhbGxlZCwKLQkgKiBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkgc3RhdHMgaGVyZSByYXRoZXIgdGhhbgotCSAqIGluc2lkZSBwdWxsX3Rhc2soKS4KLQkgKi8KLQlzY2hlZHN0YXRfYWRkKHNkLCBsYl9nYWluZWRbaWRsZV0sIHB1bGxlZCk7Ci0KLQlpZiAoYWxsX3Bpbm5lZCkKLQkJKmFsbF9waW5uZWQgPSBwaW5uZWQ7Ci0KLQlyZXR1cm4gbWF4X2xvYWRfbW92ZSAtIHJlbV9sb2FkX21vdmU7Ci19Ci0KLS8qCi0gKiBtb3ZlX3Rhc2tzIHRyaWVzIHRvIG1vdmUgdXAgdG8gbWF4X2xvYWRfbW92ZSB3ZWlnaHRlZCBsb2FkIGZyb20gYnVzaWVzdCB0bwotICogdGhpc19ycSwgYXMgcGFydCBvZiBhIGJhbGFuY2luZyBvcGVyYXRpb24gd2l0aGluIGRvbWFpbiAic2QiLgotICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KLSAqLwotc3RhdGljIGludCBtb3ZlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKLQkJICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICAgICBpbnQgKmFsbF9waW5uZWQpCi17Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcyA9IHNjaGVkX2NsYXNzX2hpZ2hlc3Q7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkX21vdmVkID0gMDsKLQlpbnQgdGhpc19iZXN0X3ByaW8gPSB0aGlzX3JxLT5jdXJyLT5wcmlvOwotCi0JZG8gewotCQl0b3RhbF9sb2FkX21vdmVkICs9Ci0JCQljbGFzcy0+bG9hZF9iYWxhbmNlKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJCW1heF9sb2FkX21vdmUgLSB0b3RhbF9sb2FkX21vdmVkLAotCQkJCXNkLCBpZGxlLCBhbGxfcGlubmVkLCAmdGhpc19iZXN0X3ByaW8pOwotCQljbGFzcyA9IGNsYXNzLT5uZXh0OwotCi0jaWZkZWYgQ09ORklHX1BSRUVNUFQKLQkJLyoKLQkJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUKLQkJICoga2VybmVscyB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplCi0JCSAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLgotCQkgKi8KLQkJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUgJiYgdGhpc19ycS0+bnJfcnVubmluZykKLQkJCWJyZWFrOwotI2VuZGlmCi0JfSB3aGlsZSAoY2xhc3MgJiYgbWF4X2xvYWRfbW92ZSA+IHRvdGFsX2xvYWRfbW92ZWQpOwotCi0JcmV0dXJuIHRvdGFsX2xvYWRfbW92ZWQgPiAwOwotfQotCi1zdGF0aWMgaW50Ci1pdGVyX21vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGl0ZXJhdG9yLT5zdGFydChpdGVyYXRvci0+YXJnKTsKLQlpbnQgcGlubmVkID0gMDsKLQotCXdoaWxlIChwKSB7Ci0JCWlmIChjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpIHsKLQkJCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7Ci0JCQkvKgotCQkJICogUmlnaHQgbm93LCB0aGlzIGlzIG9ubHkgdGhlIHNlY29uZCBwbGFjZSBwdWxsX3Rhc2soKQotCQkJICogaXMgY2FsbGVkLCBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkKLQkJCSAqIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4gaW5zaWRlIHB1bGxfdGFzaygpLgotCQkJICovCi0JCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9nYWluZWRbaWRsZV0pOwotCi0JCQlyZXR1cm4gMTsKLQkJfQotCQlwID0gaXRlcmF0b3ItPm5leHQoaXRlcmF0b3ItPmFyZyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBtb3ZlX29uZV90YXNrIHRyaWVzIHRvIG1vdmUgZXhhY3RseSBvbmUgdGFzayBmcm9tIGJ1c2llc3QgdG8gdGhpc19ycSwgYXMKLSAqIHBhcnQgb2YgYWN0aXZlIGJhbGFuY2luZyBvcGVyYXRpb25zIHdpdGhpbiAiZG9tYWluIi4KLSAqIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGFuZCAwIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQgbW92ZV9vbmVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkJIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzOwotCi0JZm9yX2VhY2hfY2xhc3MoY2xhc3MpIHsKLQkJaWYgKGNsYXNzLT5tb3ZlX29uZV90YXNrKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LCBzZCwgaWRsZSkpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLS8qKioqKioqKioqIEhlbHBlcnMgZm9yIGZpbmRfYnVzaWVzdF9ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogc2RfbGJfc3RhdHMgLSBTdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHN0YXRpc3RpY3Mgb2YgYSBzY2hlZF9kb21haW4KLSAqIAkJZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgotICovCi1zdHJ1Y3Qgc2RfbGJfc3RhdHMgewotCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdDsgLyogQnVzaWVzdCBncm91cCBpbiB0aGlzIHNkICovCi0Jc3RydWN0IHNjaGVkX2dyb3VwICp0aGlzOyAgLyogTG9jYWwgZ3JvdXAgaW4gdGhpcyBzZCAqLwotCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZDsgIC8qIFRvdGFsIGxvYWQgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLwotCXVuc2lnbmVkIGxvbmcgdG90YWxfcHdyOyAgIC8qCVRvdGFsIHBvd2VyIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KLQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOwkgICAvKiBBdmVyYWdlIGxvYWQgYWNyb3NzIGFsbCBncm91cHMgaW4gc2QgKi8KLQotCS8qKiBTdGF0aXN0aWNzIG9mIHRoaXMgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZDsKLQl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZF9wZXJfdGFzazsKLQl1bnNpZ25lZCBsb25nIHRoaXNfbnJfcnVubmluZzsKLQotCS8qIFN0YXRpc3RpY3Mgb2YgdGhlIGJ1c2llc3QgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIG1heF9sb2FkOwotCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9ucl9ydW5uaW5nOwotCi0JaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgaW1iYWxhbmNlIGluIHRoaXMgc2QgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2U7IC8qIElzIHBvd2Vyc2F2ZSBiYWxhbmNlIG5lZWRlZCBmb3IgdGhpcyBzZCAqLwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbWluOyAvKiBMZWFzdCBsb2FkZWQgZ3JvdXAgaW4gc2QgKi8KLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX2xlYWRlcjsgLyogR3JvdXAgd2hpY2ggcmVsaWV2ZXMgZ3JvdXBfbWluICovCi0JdW5zaWduZWQgbG9uZyBtaW5fbG9hZF9wZXJfdGFzazsgLyogbG9hZF9wZXJfdGFzayBpbiBncm91cF9taW4gKi8KLQl1bnNpZ25lZCBsb25nIGxlYWRlcl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX2xlYWRlciAqLwotCXVuc2lnbmVkIGxvbmcgbWluX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbWluICovCi0jZW5kaWYKLX07Ci0KLS8qCi0gKiBzZ19sYl9zdGF0cyAtIHN0YXRzIG9mIGEgc2NoZWRfZ3JvdXAgcmVxdWlyZWQgZm9yIGxvYWRfYmFsYW5jaW5nCi0gKi8KLXN0cnVjdCBzZ19sYl9zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsgLypBdmcgbG9hZCBhY3Jvc3MgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBncm91cF9sb2FkOyAvKiBUb3RhbCBsb2FkIG92ZXIgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZzsgLyogTnIgdGFza3MgcnVubmluZyBpbiB0aGUgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIHN1bV93ZWlnaHRlZF9sb2FkOyAvKiBXZWlnaHRlZCBsb2FkIG9mIGdyb3VwJ3MgdGFza3MgKi8KLQl1bnNpZ25lZCBsb25nIGdyb3VwX2NhcGFjaXR5OwotCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGFuIGltYmFsYW5jZSBpbiB0aGUgZ3JvdXAgPyAqLwotfTsKLQotLyoqCi0gKiBncm91cF9maXJzdF9jcHUgLSBSZXR1cm5zIHRoZSBmaXJzdCBjcHUgaW4gdGhlIGNwdW1hc2sgb2YgYSBzY2hlZF9ncm91cC4KLSAqIEBncm91cDogVGhlIGdyb3VwIHdob3NlIGZpcnN0IGNwdSBpcyB0byBiZSByZXR1cm5lZC4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3JvdXBfZmlyc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCi17Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwotfQotCi0vKioKLSAqIGdldF9zZF9sb2FkX2lkeCAtIE9idGFpbiB0aGUgbG9hZCBpbmRleCBmb3IgYSBnaXZlbiBzY2hlZCBkb21haW4uCi0gKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgbG9hZF9pZHggaXMgdG8gYmUgb2J0YWluZWQuCi0gKiBAaWRsZTogVGhlIElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgZm9yIHdob3NlIHNkIGxvYWRfaWN4IGlzIG9idGFpbmVkLgotICovCi1zdGF0aWMgaW5saW5lIGludCBnZXRfc2RfbG9hZF9pZHgoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCWludCBsb2FkX2lkeDsKLQotCXN3aXRjaCAoaWRsZSkgewotCWNhc2UgQ1BVX05PVF9JRExFOgotCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9ORVdMWV9JRExFOgotCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBsb2FkX2lkeDsKLX0KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLS8qKgotICogaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gSW5pdGlhbGl6ZSBwb3dlciBzYXZpbmdzIHN0YXRpc3RpY3MgZm9yCi0gKiB0aGUgZ2l2ZW4gc2NoZWRfZG9tYWluLCBkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCi0gKgotICogQHNkOiBTY2hlZCBkb21haW4gd2hvc2UgcG93ZXItc2F2aW5ncyBzdGF0aXN0aWNzIGFyZSB0byBiZSBpbml0aWFsaXplZC4KLSAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHNkLgotICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgYXQgd2hpY2ggd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JLyoKLQkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncwotCSAqIGJhbGFuY2UuCi0JICovCi0JaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7Ci0JZWxzZSB7Ci0JCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKLQkJc2RzLT5taW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKLQkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IDA7Ci0JfQotfQotCi0vKioKLSAqIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gVXBkYXRlIHRoZSBwb3dlciBzYXZpbmcgc3RhdHMgZm9yIGEKLSAqIHNjaGVkX2RvbWFpbiB3aGlsZSBwZXJmb3JtaW5nIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEBncm91cDogc2NoZWRfZ3JvdXAgYmVsb25naW5nIHRvIHRoZSBzY2hlZF9kb21haW4gdW5kZXIgY29uc2lkZXJhdGlvbi4KLSAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgotICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhlIENQVSBmb3Igd2hpY2ggd2UncmUgcGVyZm9ybWluZwotICogCQlsb2FkIGJhbGFuY2luZyA/Ci0gKiBAc2dzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBncm91cC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCi17Ci0KLQlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCi0JICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KLQkgKi8KLQlpZiAobG9jYWxfZ3JvdXAgJiYgKHNkcy0+dGhpc19ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKLQkJCQkhc2RzLT50aGlzX25yX3J1bm5pbmcpKQotCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7Ci0KLQkvKgotCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKLQkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKLQkgKi8KLQlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8Ci0JCXNncy0+c3VtX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAotCQkhc2dzLT5zdW1fbnJfcnVubmluZykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KLQkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAotCSAqIGZvciBzYXZpbmcgcG93ZXIKLQkgKi8KLQlpZiAoKHNncy0+c3VtX25yX3J1bm5pbmcgPCBzZHMtPm1pbl9ucl9ydW5uaW5nKSB8fAotCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPm1pbl9ucl9ydW5uaW5nICYmCi0JICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApID4gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbWluKSkpIHsKLQkJc2RzLT5ncm91cF9taW4gPSBncm91cDsKLQkJc2RzLT5taW5fbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7Ci0JCXNkcy0+bWluX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8KLQkJCQkJCXNncy0+c3VtX25yX3J1bm5pbmc7Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cwotCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAotCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgotCSAqLwotCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nICsgMSA+IHNncy0+Z3JvdXBfY2FwYWNpdHkpCi0JCXJldHVybjsKLQotCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2RzLT5sZWFkZXJfbnJfcnVubmluZyB8fAotCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nICYmCi0JICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApIDwgZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKSkpIHsKLQkJc2RzLT5ncm91cF9sZWFkZXIgPSBncm91cDsKLQkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7Ci0JfQotfQotCi0vKioKLSAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlCi0gKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KLSAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCi0gKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KLSAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLgotICogSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUgdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUKLSAqIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlLgotICoKLSAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCi0gKiBFbHNlIHJldHVybnMgMC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAotCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKLXsKLQlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQotCQlyZXR1cm4gMDsKLQotCWlmIChzZHMtPnRoaXMgIT0gc2RzLT5ncm91cF9sZWFkZXIgfHwKLQkJCXNkcy0+Z3JvdXBfbGVhZGVyID09IHNkcy0+Z3JvdXBfbWluKQotCQlyZXR1cm4gMDsKLQotCSppbWJhbGFuY2UgPSBzZHMtPm1pbl9sb2FkX3Blcl90YXNrOwotCXNkcy0+YnVzaWVzdCA9IHNkcy0+Z3JvdXBfbWluOwotCi0JcmV0dXJuIDE7Ci0KLX0KLSNlbHNlIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAotCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLwotCi0KLXVuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXJldHVybiBTQ0hFRF9MT0FEX1NDQUxFOwotfQotCi11bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JcmV0dXJuIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLX0KLQotdW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7Ci0JdW5zaWduZWQgbG9uZyBzbXRfZ2FpbiA9IHNkLT5zbXRfZ2FpbjsKLQotCXNtdF9nYWluIC89IHdlaWdodDsKLQotCXJldHVybiBzbXRfZ2FpbjsKLX0KLQotdW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JcmV0dXJuIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOwotfQotCi11bnNpZ25lZCBsb25nIHNjYWxlX3J0X3Bvd2VyKGludCBjcHUpCi17Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXU2NCB0b3RhbCwgYXZhaWxhYmxlOwotCi0Jc2NoZWRfYXZnX3VwZGF0ZShycSk7Ci0KLQl0b3RhbCA9IHNjaGVkX2F2Z19wZXJpb2QoKSArIChycS0+Y2xvY2sgLSBycS0+YWdlX3N0YW1wKTsKLQlhdmFpbGFibGUgPSB0b3RhbCAtIHJxLT5ydF9hdmc7Ci0KLQlpZiAodW5saWtlbHkoKHM2NCl0b3RhbCA8IFNDSEVEX0xPQURfU0NBTEUpKQotCQl0b3RhbCA9IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQl0b3RhbCA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQotCXJldHVybiBkaXZfdTY0KGF2YWlsYWJsZSwgdG90YWwpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfY3B1X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKLQl1bnNpZ25lZCBsb25nIHBvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNkZyA9IHNkLT5ncm91cHM7Ci0KLQlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKLQkJcG93ZXIgKj0gYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOwotCWVsc2UKLQkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOwotCi0JcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0KLQlpZiAoKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSAmJiB3ZWlnaHQgPiAxKSB7Ci0JCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQotCQkJcG93ZXIgKj0gYXJjaF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Ci0JCWVsc2UKLQkJCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOwotCi0JCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCX0KLQotCXBvd2VyICo9IHNjYWxlX3J0X3Bvd2VyKGNwdSk7Ci0JcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0KLQlpZiAoIXBvd2VyKQotCQlwb3dlciA9IDE7Ci0KLQlzZGctPmNwdV9wb3dlciA9IHBvd2VyOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgKnNkZyA9IHNkLT5ncm91cHM7Ci0JdW5zaWduZWQgbG9uZyBwb3dlcjsKLQotCWlmICghY2hpbGQpIHsKLQkJdXBkYXRlX2NwdV9wb3dlcihzZCwgY3B1KTsKLQkJcmV0dXJuOwotCX0KLQotCXBvd2VyID0gMDsKLQotCWdyb3VwID0gY2hpbGQtPmdyb3VwczsKLQlkbyB7Ci0JCXBvd2VyICs9IGdyb3VwLT5jcHVfcG93ZXI7Ci0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gY2hpbGQtPmdyb3Vwcyk7Ci0KLQlzZGctPmNwdV9wb3dlciA9IHBvd2VyOwotfQotCi0vKioKLSAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCi0gKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCi0gKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCi0gKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKLSAqIEBsb2FkX2lkeDogTG9hZCBpbmRleCBvZiBzY2hlZF9kb21haW4gb2YgdGhpc19jcHUgZm9yIGxvYWQgY2FsYy4KLSAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCi0gKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGlzX2NwdS4KLSAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KLSAqIEBzZ3M6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZ3JvdXAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBpbnQgdGhpc19jcHUsCi0JCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50IGxvYWRfaWR4LCBpbnQgKnNkX2lkbGUsCi0JCQlpbnQgbG9jYWxfZ3JvdXAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAotCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKLXsKLQl1bnNpZ25lZCBsb25nIGxvYWQsIG1heF9jcHVfbG9hZCwgbWluX2NwdV9sb2FkOwotCWludCBpOwotCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdW1fYXZnX2xvYWRfcGVyX3Rhc2s7Ci0JdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzazsKLQotCWlmIChsb2NhbF9ncm91cCkgewotCQliYWxhbmNlX2NwdSA9IGdyb3VwX2ZpcnN0X2NwdShncm91cCk7Ci0JCWlmIChiYWxhbmNlX2NwdSA9PSB0aGlzX2NwdSkKLQkJCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgdGhpc19jcHUpOwotCX0KLQotCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLwotCXN1bV9hdmdfbG9hZF9wZXJfdGFzayA9IGF2Z19sb2FkX3Blcl90YXNrID0gMDsKLQltYXhfY3B1X2xvYWQgPSAwOwotCW1pbl9jcHVfbG9hZCA9IH4wVUw7Ci0KLQlmb3JfZWFjaF9jcHVfYW5kKGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApLCBjcHVzKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoaSk7Ci0KLQkJaWYgKCpzZF9pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQotCQkJKnNkX2lkbGUgPSAwOwotCi0JCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KLQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQlpZiAoaWRsZV9jcHUoaSkgJiYgIWZpcnN0X2lkbGVfY3B1KSB7Ci0JCQkJZmlyc3RfaWRsZV9jcHUgPSAxOwotCQkJCWJhbGFuY2VfY3B1ID0gaTsKLQkJCX0KLQotCQkJbG9hZCA9IHRhcmdldF9sb2FkKGksIGxvYWRfaWR4KTsKLQkJfSBlbHNlIHsKLQkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7Ci0JCQlpZiAobG9hZCA+IG1heF9jcHVfbG9hZCkKLQkJCQltYXhfY3B1X2xvYWQgPSBsb2FkOwotCQkJaWYgKG1pbl9jcHVfbG9hZCA+IGxvYWQpCi0JCQkJbWluX2NwdV9sb2FkID0gbG9hZDsKLQkJfQotCi0JCXNncy0+Z3JvdXBfbG9hZCArPSBsb2FkOwotCQlzZ3MtPnN1bV9ucl9ydW5uaW5nICs9IHJxLT5ucl9ydW5uaW5nOwotCQlzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkICs9IHdlaWdodGVkX2NwdWxvYWQoaSk7Ci0KLQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICs9IGNwdV9hdmdfbG9hZF9wZXJfdGFzayhpKTsKLQl9Ci0KLQkvKgotCSAqIEZpcnN0IGlkbGUgY3B1IG9yIHRoZSBmaXJzdCBjcHUoYnVzaWVzdCkgaW4gdGhpcyBzY2hlZCBncm91cAotCSAqIGlzIGVsaWdpYmxlIGZvciBkb2luZyBsb2FkIGJhbGFuY2luZyBhdCB0aGlzIGFuZCBhYm92ZQotCSAqIGRvbWFpbnMuIEluIHRoZSBuZXdseSBpZGxlIGNhc2UsIHdlIHdpbGwgYWxsb3cgYWxsIHRoZSBjcHUncwotCSAqIHRvIGRvIHRoZSBuZXdseSBpZGxlIGxvYWQgYmFsYW5jZS4KLQkgKi8KLQlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCAmJgotCSAgICBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSAmJiBiYWxhbmNlKSB7Ci0JCSpiYWxhbmNlID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCi0Jc2dzLT5hdmdfbG9hZCA9IChzZ3MtPmdyb3VwX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7Ci0KLQotCS8qCi0JICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgotCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KLQkgKgotCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCi0JICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCi0JICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKLQkgKiAgICAgIHRoZSBoaWVyYXJjaHk/Ci0JICovCi0JYXZnX2xvYWRfcGVyX3Rhc2sgPSAoc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLwotCQlncm91cC0+Y3B1X3Bvd2VyOwotCi0JaWYgKChtYXhfY3B1X2xvYWQgLSBtaW5fY3B1X2xvYWQpID4gMiphdmdfbG9hZF9wZXJfdGFzaykKLQkJc2dzLT5ncm91cF9pbWIgPSAxOwotCi0Jc2dzLT5ncm91cF9jYXBhY2l0eSA9Ci0JCURJVl9ST1VORF9DTE9TRVNUKGdyb3VwLT5jcHVfcG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOwotfQotCi0vKioKLSAqIHVwZGF0ZV9zZF9sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQHNkOiBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KLSAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KLSAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQotICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KLSAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KLSAqIEBzZHM6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgc2NoZWRfZG9tYWluLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCi0JCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICpzZF9pZGxlLAotCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSwKLQkJCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAgPSBzZC0+Z3JvdXBzOwotCXN0cnVjdCBzZ19sYl9zdGF0cyBzZ3M7Ci0JaW50IGxvYWRfaWR4LCBwcmVmZXJfc2libGluZyA9IDA7Ci0KLQlpZiAoY2hpbGQgJiYgY2hpbGQtPmZsYWdzICYgU0RfUFJFRkVSX1NJQkxJTkcpCi0JCXByZWZlcl9zaWJsaW5nID0gMTsKLQotCWluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzZCwgc2RzLCBpZGxlKTsKLQlsb2FkX2lkeCA9IGdldF9zZF9sb2FkX2lkeChzZCwgaWRsZSk7Ci0KLQlkbyB7Ci0JCWludCBsb2NhbF9ncm91cDsKLQotCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCi0JCQkJCSAgICAgICBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci0JCW1lbXNldCgmc2dzLCAwLCBzaXplb2Yoc2dzKSk7Ci0JCXVwZGF0ZV9zZ19sYl9zdGF0cyhzZCwgZ3JvdXAsIHRoaXNfY3B1LCBpZGxlLCBsb2FkX2lkeCwgc2RfaWRsZSwKLQkJCQlsb2NhbF9ncm91cCwgY3B1cywgYmFsYW5jZSwgJnNncyk7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwICYmIGJhbGFuY2UgJiYgISgqYmFsYW5jZSkpCi0JCQlyZXR1cm47Ci0KLQkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOwotCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+Y3B1X3Bvd2VyOwotCi0JCS8qCi0JCSAqIEluIGNhc2UgdGhlIGNoaWxkIGRvbWFpbiBwcmVmZXJzIHRhc2tzIGdvIHRvIHNpYmxpbmdzCi0JCSAqIGZpcnN0LCBsb3dlciB0aGUgZ3JvdXAgY2FwYWNpdHkgdG8gb25lIHNvIHRoYXQgd2UnbGwgdHJ5Ci0JCSAqIGFuZCBtb3ZlIGFsbCB0aGUgZXhjZXNzIHRhc2tzIGF3YXkuCi0JCSAqLwotCQlpZiAocHJlZmVyX3NpYmxpbmcpCi0JCQlzZ3MuZ3JvdXBfY2FwYWNpdHkgPSBtaW4oc2dzLmdyb3VwX2NhcGFjaXR5LCAxVUwpOwotCi0JCWlmIChsb2NhbF9ncm91cCkgewotCQkJc2RzLT50aGlzX2xvYWQgPSBzZ3MuYXZnX2xvYWQ7Ci0JCQlzZHMtPnRoaXMgPSBncm91cDsKLQkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOwotCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgotCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAotCQkJCXNncy5ncm91cF9pbWIpKSB7Ci0JCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOwotCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7Ci0JCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKLQkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOwotCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOwotCQl9Ci0KLQkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOwotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOwotfQotCi0vKioKLSAqIGZpeF9zbWFsbF9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIG1pbm9yIGltYmFsYW5jZSB0aGF0IGV4aXN0cwotICoJCQlhbW9uZ3N0IHRoZSBncm91cHMgb2YgYSBzY2hlZF9kb21haW4sIGR1cmluZwotICoJCQlsb2FkIGJhbGFuY2luZy4KLSAqIEBzZHM6IFN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KLSAqIEB0aGlzX2NwdTogVGhlIGNwdSBhdCB3aG9zZSBzY2hlZF9kb21haW4gd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2UuCi0gKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZml4X3NtYWxsX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKLQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcCwgcHdyX25vdyA9IDAsIHB3cl9tb3ZlID0gMDsKLQl1bnNpZ25lZCBpbnQgaW1ibiA9IDI7Ci0KLQlpZiAoc2RzLT50aGlzX25yX3J1bm5pbmcpIHsKLQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgLz0gc2RzLT50aGlzX25yX3J1bm5pbmc7Ci0JCWlmIChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA+Ci0JCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2spCi0JCQlpbWJuID0gMTsKLQl9IGVsc2UKLQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPQotCQkJY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKLQotCWlmIChzZHMtPm1heF9sb2FkIC0gc2RzLT50aGlzX2xvYWQgKyBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA+PQotCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBpbWJuKSB7Ci0JCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKLQkgKiBob3dldmVyIHdlIG1heSBiZSBhYmxlIHRvIGluY3JlYXNlIHRvdGFsIENQVSBwb3dlciB1c2VkIGJ5Ci0JICogbW92aW5nIHRoZW0uCi0JICovCi0KLQlwd3Jfbm93ICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCk7Ci0JcHdyX25vdyArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKLQlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCi0JdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLwotCQlzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKLQlpZiAoc2RzLT5tYXhfbG9hZCA+IHRtcCkKLQkJcHdyX21vdmUgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkIC0gdG1wKTsKLQotCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCi0JaWYgKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciA8Ci0JCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKLQkJdG1wID0gKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcikgLwotCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7Ci0JZWxzZQotCQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCi0JCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKLQlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKLQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KLQlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQotCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci19Ci0KLS8qKgotICogY2FsY3VsYXRlX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGltYmFsYW5jZSBwcmVzZW50IHdpdGhpbiB0aGUKLSAqCQkJIGdyb3VwcyBvZiBhIGdpdmVuIHNjaGVkX2RvbWFpbiBkdXJpbmcgbG9hZCBiYWxhbmNlLgotICogQHNkczogc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgotICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGN1cnJlbnRseSBsb2FkIGJhbGFuY2UgaXMgYmVpbmcgcGVyZm9ybWVkLgotICogQGltYmFsYW5jZTogVGhlIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgdGhpc19jcHUsCi0JCXVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKLXsKLQl1bnNpZ25lZCBsb25nIG1heF9wdWxsOwotCS8qCi0JICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKLQkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93Ci0JICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKLQkgKi8KLQlpZiAoc2RzLT5tYXhfbG9hZCA8IHNkcy0+YXZnX2xvYWQpIHsKLQkJKmltYmFsYW5jZSA9IDA7Ci0JCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7Ci0JfQotCi0JLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KLQltYXhfcHVsbCA9IG1pbihzZHMtPm1heF9sb2FkIC0gc2RzLT5hdmdfbG9hZCwKLQkJCXNkcy0+bWF4X2xvYWQgLSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayk7Ci0KLQkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLwotCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciwKLQkJKHNkcy0+YXZnX2xvYWQgLSBzZHMtPnRoaXNfbG9hZCkgKiBzZHMtPnRoaXMtPmNwdV9wb3dlcikKLQkJCS8gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qCi0JICogaWYgKmltYmFsYW5jZSBpcyBsZXNzIHRoYW4gdGhlIGF2ZXJhZ2UgbG9hZCBwZXIgcnVubmFibGUgdGFzawotCSAqIHRoZXJlIGlzIG5vIGdhdXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKLQkgKiBhIHRoaW5rIGFib3V0IGJ1bXBpbmcgaXRzIHZhbHVlIHRvIGZvcmNlIGF0IGxlYXN0IG9uZSB0YXNrIHRvIGJlCi0JICogbW92ZWQKLQkgKi8KLQlpZiAoKmltYmFsYW5jZSA8IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKQotCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOwotCi19Ci0vKioqKioqKiBmaW5kX2J1c2llc3RfZ3JvdXAoKSBoZWxwZXJzIGVuZCBoZXJlICoqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBmaW5kX2J1c2llc3RfZ3JvdXAgLSBSZXR1cm5zIHRoZSBidXNpZXN0IGdyb3VwIHdpdGhpbiB0aGUgc2NoZWRfZG9tYWluCi0gKiBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIElmIHRoZXJlIGlzbid0IGFuIGltYmFsYW5jZSwgYW5kCi0gKiB0aGUgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MsIGl0IHJldHVybnMgYSBncm91cCB3aG9zZQotICogQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgdGhvc2UgdGFza3MgZWxzZXdoZXJlLCBpZgotICogc3VjaCBhIGdyb3VwIGV4aXN0cy4KLSAqCi0gKiBBbHNvIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZCBiZSBtb3ZlZAotICogdG8gcmVzdG9yZSBiYWxhbmNlLgotICoKLSAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBidXNpZXN0IGdyb3VwIGlzIHRvIGJlIHJldHVybmVkLgotICogQHRoaXNfY3B1OiBUaGUgY3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2luZyBpcyBjdXJyZW50bHkgYmVpbmcgcGVyZm9ybWVkLgotICogQGltYmFsYW5jZTogVmFyaWFibGUgd2hpY2ggc3RvcmVzIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZAotICoJCWJlIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZS9wdXQgYSBncm91cCB0byBpZGxlLgotICogQGlkbGU6IFRoZSBpZGxlIHN0YXR1cyBvZiB0aGlzX2NwdS4KLSAqIEBzZF9pZGxlOiBUaGUgaWRsZW5lc3Mgb2Ygc2QKLSAqIEBjcHVzOiBUaGUgc2V0IG9mIENQVXMgdW5kZXIgY29uc2lkZXJhdGlvbiBmb3IgbG9hZC1iYWxhbmNpbmcuCi0gKiBAYmFsYW5jZTogUG9pbnRlciB0byBhIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgdGhpc19jcHUKLSAqCWlzIHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZyBhdCB0aGlzX2xldmVsLgotICoKLSAqIFJldHVybnM6CS0gdGhlIGJ1c2llc3QgZ3JvdXAgaWYgaW1iYWxhbmNlIGV4aXN0cy4KLSAqCQktIElmIG5vIGltYmFsYW5jZSBhbmQgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MgYmFsYW5jZSwKLSAqCQkgICByZXR1cm4gdGhlIGxlYXN0IGxvYWRlZCBncm91cCB3aG9zZSBDUFVzIGNhbiBiZQotICoJCSAgIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIGl0cyB0YXNrcyBvbnRvIG91ciBncm91cC4KLSAqLwotc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqCi1maW5kX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKLQkJICAgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgaW50ICpzZF9pZGxlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlKQotewotCXN0cnVjdCBzZF9sYl9zdGF0cyBzZHM7Ci0KLQltZW1zZXQoJnNkcywgMCwgc2l6ZW9mKHNkcykpOwotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSB2YXJpb3VzIHN0YXRpc3RpY3MgcmVsYXZlbnQgZm9yIGxvYWQgYmFsYW5jaW5nIGF0Ci0JICogdGhpcyBsZXZlbC4KLQkgKi8KLQl1cGRhdGVfc2RfbGJfc3RhdHMoc2QsIHRoaXNfY3B1LCBpZGxlLCBzZF9pZGxlLCBjcHVzLAotCQkJCQliYWxhbmNlLCAmc2RzKTsKLQotCS8qIENhc2VzIHdoZXJlIGltYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBmcm9tIFBPViBvZiB0aGlzX2NwdSAqLwotCS8qIDEpIHRoaXNfY3B1IGlzIG5vdCB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcKLQkgKiAgICBhdCB0aGlzIGxldmVsLgotCSAqIDIpIFRoZXJlIGlzIG5vIGJ1c3kgc2libGluZyBncm91cCB0byBwdWxsIGZyb20uCi0JICogMykgVGhpcyBncm91cCBpcyB0aGUgYnVzaWVzdCBncm91cC4KLQkgKiA0KSBUaGlzIGdyb3VwIGlzIG1vcmUgYnVzeSB0aGFuIHRoZSBhdmcgYnVzaWVuZXNzIGF0IHRoaXMKLQkgKiAgICBzY2hlZF9kb21haW4uCi0JICogNSkgVGhlIGltYmFsYW5jZSBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdC4KLQkgKiA2KSBBbnkgcmViYWxhbmNlIHdvdWxkIGxlYWQgdG8gcGluZy1wb25nCi0JICovCi0JaWYgKGJhbGFuY2UgJiYgISgqYmFsYW5jZSkpCi0JCWdvdG8gcmV0OwotCi0JaWYgKCFzZHMuYnVzaWVzdCB8fCBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nID09IDApCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0JaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLm1heF9sb2FkKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKLQotCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5hdmdfbG9hZCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlpZiAoMTAwICogc2RzLm1heF9sb2FkIDw9IHNkLT5pbWJhbGFuY2VfcGN0ICogc2RzLnRoaXNfbG9hZCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrIC89IHNkcy5idXNpZXN0X25yX3J1bm5pbmc7Ci0JaWYgKHNkcy5ncm91cF9pbWIpCi0JCXNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPQotCQkJbWluKHNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy5hdmdfbG9hZCk7Ci0KLQkvKgotCSAqIFdlJ3JlIHRyeWluZyB0byBnZXQgYWxsIHRoZSBjcHVzIHRvIHRoZSBhdmVyYWdlX2xvYWQsIHNvIHdlIGRvbid0Ci0JICogd2FudCB0byBwdXNoIG91cnNlbHZlcyBhYm92ZSB0aGUgYXZlcmFnZSBsb2FkLCBub3IgZG8gd2Ugd2lzaCB0bwotCSAqIHJlZHVjZSB0aGUgbWF4IGxvYWRlZCBjcHUgYmVsb3cgdGhlIGF2ZXJhZ2UgbG9hZCwgYXMgZWl0aGVyIG9mIHRoZXNlCi0JICogYWN0aW9ucyB3b3VsZCBqdXN0IHJlc3VsdCBpbiBtb3JlIHJlYmFsYW5jaW5nIGxhdGVyLCBhbmQgcGluZy1wb25nCi0JICogdGFza3MgYXJvdW5kLiBUaHVzIHdlIGxvb2sgZm9yIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGltYmFsYW5jZS4KLQkgKiBOZWdhdGl2ZSBpbWJhbGFuY2VzICgqd2UqIGFyZSBtb3JlIGxvYWRlZCB0aGFuIGFueW9uZSBlbHNlKSB3aWxsCi0JICogYmUgY291bnRlZCBhcyBubyBpbWJhbGFuY2UgZm9yIHRoZXNlIHB1cnBvc2VzIC0tIHdlIGNhbid0IGZpeCB0aGF0Ci0JICogYnkgcHVsbGluZyB0YXNrcyB0byB1cy4gQmUgY2FyZWZ1bCBvZiBuZWdhdGl2ZSBudW1iZXJzIGFzIHRoZXknbGwKLQkgKiBhcHBlYXIgYXMgdmVyeSBsYXJnZSB2YWx1ZXMgd2l0aCB1bnNpZ25lZCBsb25ncy4KLQkgKi8KLQlpZiAoc2RzLm1heF9sb2FkIDw9IHNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0JLyogTG9va3MgbGlrZSB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIENvbXB1dGUgaXQgKi8KLQljYWxjdWxhdGVfaW1iYWxhbmNlKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOwotCXJldHVybiBzZHMuYnVzaWVzdDsKLQotb3V0X2JhbGFuY2VkOgotCS8qCi0JICogVGhlcmUgaXMgbm8gb2J2aW91cyBpbWJhbGFuY2UuIEJ1dCBjaGVjayBpZiB3ZSBjYW4gZG8gc29tZSBiYWxhbmNpbmcKLQkgKiB0byBzYXZlIHBvd2VyLgotCSAqLwotCWlmIChjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSkpCi0JCXJldHVybiBzZHMuYnVzaWVzdDsKLXJldDoKLQkqaW1iYWxhbmNlID0gMDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcnEgKgotZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMpCi17Ci0Jc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTCwgKnJxOwotCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQgPSAwOwotCWludCBpOwotCi0JZm9yX2VhY2hfY3B1KGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBwb3dlcl9vZihpKTsKLQkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IERJVl9ST1VORF9DTE9TRVNUKHBvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKLQkJdW5zaWduZWQgbG9uZyB3bDsKLQotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1cykpCi0JCQljb250aW51ZTsKLQotCQlycSA9IGNwdV9ycShpKTsKLQkJd2wgPSB3ZWlnaHRlZF9jcHVsb2FkKGkpICogU0NIRURfTE9BRF9TQ0FMRTsKLQkJd2wgLz0gcG93ZXI7Ci0KLQkJaWYgKGNhcGFjaXR5ICYmIHJxLT5ucl9ydW5uaW5nID09IDEgJiYgd2wgPiBpbWJhbGFuY2UpCi0JCQljb250aW51ZTsKLQotCQlpZiAod2wgPiBtYXhfbG9hZCkgewotCQkJbWF4X2xvYWQgPSB3bDsKLQkJCWJ1c2llc3QgPSBycTsKLQkJfQotCX0KLQotCXJldHVybiBidXNpZXN0OwotfQotCi0vKgotICogTWF4IGJhY2tvZmYgaWYgd2UgZW5jb3VudGVyIHBpbm5lZCB0YXNrcy4gUHJldHR5IGFyYml0cmFyeSB2YWx1ZSwgYnV0Ci0gKiBzbyBsb25nIGFzIGl0IGlzIGxhcmdlIGVub3VnaC4KLSAqLwotI2RlZmluZSBNQVhfUElOTkVEX0lOVEVSVkFMCTUxMgotCi0vKiBXb3JraW5nIGNwdW1hc2sgZm9yIGxvYWRfYmFsYW5jZSBhbmQgbG9hZF9iYWxhbmNlX25ld2lkbGUuICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9hZF9iYWxhbmNlX3RtcG1hc2spOwotCi0vKgotICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQotICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgotICovCi1zdGF0aWMgaW50IGxvYWRfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwKLQkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJCWludCAqYmFsYW5jZSkKLXsKLQlpbnQgbGRfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7Ci0JdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7Ci0Jc3RydWN0IHJxICpidXNpZXN0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKLQotCWNwdW1hc2tfY29weShjcHVzLCBjcHVfYWN0aXZlX21hc2spOwotCi0JLyoKLQkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCi0JICogc2libGluZyBjYW4gcGljayB1cCBsb2FkIGlycmVzcGVjdGl2ZSBvZiBidXN5IHNpYmxpbmdzLiBJbiB0aGlzIGNhc2UsCi0JICogbGV0IHRoZSBzdGF0ZSBvZiBpZGxlIHNpYmxpbmcgcGVyY29sYXRlIHVwIGFzIENQVV9JRExFLCBpbnN0ZWFkIG9mCi0JICogcG9ydHJheWluZyBpdCBhcyBDUFVfTk9UX0lETEUuCi0JICovCi0JaWYgKGlkbGUgIT0gQ1BVX05PVF9JRExFICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlzZF9pZGxlID0gMTsKLQotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W2lkbGVdKTsKLQotcmVkbzoKLQl1cGRhdGVfc2hhcmVzKHNkKTsKLQlncm91cCA9IGZpbmRfYnVzaWVzdF9ncm91cChzZCwgdGhpc19jcHUsICZpbWJhbGFuY2UsIGlkbGUsICZzZF9pZGxlLAotCQkJCSAgIGNwdXMsIGJhbGFuY2UpOwotCi0JaWYgKCpiYWxhbmNlID09IDApCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0JaWYgKCFncm91cCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW2lkbGVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKLQlpZiAoIWJ1c2llc3QpIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCUJVR19PTihidXNpZXN0ID09IHRoaXNfcnEpOwotCi0Jc2NoZWRzdGF0X2FkZChzZCwgbGJfaW1iYWxhbmNlW2lkbGVdLCBpbWJhbGFuY2UpOwotCi0JbGRfbW92ZWQgPSAwOwotCWlmIChidXNpZXN0LT5ucl9ydW5uaW5nID4gMSkgewotCQkvKgotCQkgKiBBdHRlbXB0IHRvIG1vdmUgdGFza3MuIElmIGZpbmRfYnVzaWVzdF9ncm91cCBoYXMgZm91bmQKLQkJICogYW4gaW1iYWxhbmNlIGJ1dCBidXNpZXN0LT5ucl9ydW5uaW5nIDw9IDEsIHRoZSBncm91cCBpcwotCQkgKiBzdGlsbCB1bmJhbGFuY2VkLiBsZF9tb3ZlZCBzaW1wbHkgc3RheXMgemVybywgc28gaXQgaXMKLQkJICogY29ycmVjdGx5IHRyZWF0ZWQgYXMgYW4gaW1iYWxhbmNlLgotCQkgKi8KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKLQkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJCSAgICAgIGltYmFsYW5jZSwgc2QsIGlkbGUsICZhbGxfcGlubmVkKTsKLQkJZG91YmxlX3JxX3VubG9jayh0aGlzX3JxLCBidXNpZXN0KTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JCS8qCi0JCSAqIHNvbWUgb3RoZXIgY3B1IGRpZCB0aGUgbG9hZCBiYWxhbmNlIGZvciB1cy4KLQkJICovCi0JCWlmIChsZF9tb3ZlZCAmJiB0aGlzX2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQlyZXNjaGVkX2NwdSh0aGlzX2NwdSk7Ci0KLQkJLyogQWxsIHRhc2tzIG9uIHRoaXMgcnVucXVldWUgd2VyZSBwaW5uZWQgYnkgQ1BVIGFmZmluaXR5ICovCi0JCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgewotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKLQkJCWlmICghY3B1bWFza19lbXB0eShjcHVzKSkKLQkJCQlnb3RvIHJlZG87Ci0JCQlnb3RvIG91dF9iYWxhbmNlZDsKLQkJfQotCX0KLQotCWlmICghbGRfbW92ZWQpIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW2lkbGVdKTsKLQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkKys7Ci0KLQkJaWYgKHVubGlrZWx5KHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzIpKSB7Ci0KLQkJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOwotCi0JCQkvKiBkb24ndCBraWNrIHRoZSBtaWdyYXRpb25fdGhyZWFkLCBpZiB0aGUgY3VycgotCQkJICogdGFzayBvbiBidXNpZXN0IGNwdSBjYW4ndCBiZSBtb3ZlZCB0byB0aGlzX2NwdQotCQkJICovCi0JCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCi0JCQkJCSAgICAgICZidXNpZXN0LT5jdXJyLT5jcHVzX2FsbG93ZWQpKSB7Ci0JCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssCi0JCQkJCQkJICAgIGZsYWdzKTsKLQkJCQlhbGxfcGlubmVkID0gMTsKLQkJCQlnb3RvIG91dF9vbmVfcGlubmVkOwotCQkJfQotCi0JCQlpZiAoIWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlKSB7Ci0JCQkJYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UgPSAxOwotCQkJCWJ1c2llc3QtPnB1c2hfY3B1ID0gdGhpc19jcHU7Ci0JCQkJYWN0aXZlX2JhbGFuY2UgPSAxOwotCQkJfQotCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChhY3RpdmVfYmFsYW5jZSkKLQkJCQl3YWtlX3VwX3Byb2Nlc3MoYnVzaWVzdC0+bWlncmF0aW9uX3RocmVhZCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSd2ZSBraWNrZWQgYWN0aXZlIGJhbGFuY2luZywgcmVzZXQgdGhlIGZhaWx1cmUKLQkJCSAqIGNvdW50ZXIuCi0JCQkgKi8KLQkJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzE7Ci0JCX0KLQl9IGVsc2UKLQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotCWlmIChsaWtlbHkoIWFjdGl2ZV9iYWxhbmNlKSkgewotCQkvKiBXZSB3ZXJlIHVuYmFsYW5jZWQsIHNvIHJlc2V0IHRoZSBiYWxhbmNpbmcgaW50ZXJ2YWwgKi8KLQkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPSBzZC0+bWluX2ludGVydmFsOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElmIHdlJ3ZlIGJlZ3VuIGFjdGl2ZSBiYWxhbmNpbmcsIHN0YXJ0IHRvIGJhY2sgb2ZmLiBUaGlzCi0JCSAqIGNhc2UgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IHRoZSBhbGxfcGlubmVkIGxvZ2ljIGlmIHRoZXJlCi0JCSAqIGlzIG9ubHkgMSB0YXNrIG9uIHRoZSBidXN5IHJ1bnF1ZXVlIChiZWNhdXNlIHdlIGRvbid0IGNhbGwKLQkJICogbW92ZV90YXNrcykuCi0JCSAqLwotCQlpZiAoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKQotCQkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKLQl9Ci0KLQlpZiAoIWxkX21vdmVkICYmICFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlsZF9tb3ZlZCA9IC0xOwotCi0JZ290byBvdXQ7Ci0KLW91dF9iYWxhbmNlZDoKLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9iYWxhbmNlZFtpZGxlXSk7Ci0KLQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi1vdXRfb25lX3Bpbm5lZDoKLQkvKiB0dW5lIHVwIHRoZSBiYWxhbmNpbmcgaW50ZXJ2YWwgKi8KLQlpZiAoKGFsbF9waW5uZWQgJiYgc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBNQVhfUElOTkVEX0lOVEVSVkFMKSB8fAotCQkJKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkpCi0JCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7Ci0KLQlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCWxkX21vdmVkID0gLTE7Ci0JZWxzZQotCQlsZF9tb3ZlZCA9IDA7Ci1vdXQ6Ci0JaWYgKGxkX21vdmVkKQotCQl1cGRhdGVfc2hhcmVzKHNkKTsKLQlyZXR1cm4gbGRfbW92ZWQ7Ci19Ci0KLS8qCi0gKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCi0gKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCi0gKgotICogQ2FsbGVkIGZyb20gc2NoZWR1bGUgd2hlbiB0aGlzX3JxIGlzIGFib3V0IHRvIGJlY29tZSBpZGxlIChDUFVfTkVXTFlfSURMRSkuCi0gKiB0aGlzX3JxIGlzIGxvY2tlZC4KLSAqLwotc3RhdGljIGludAotbG9hZF9iYWxhbmNlX25ld2lkbGUoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQotewotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7Ci0Jc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGltYmFsYW5jZTsKLQlpbnQgbGRfbW92ZWQgPSAwOwotCWludCBzZF9pZGxlID0gMDsKLQlpbnQgYWxsX3Bpbm5lZCA9IDA7Ci0Jc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKLQotCWNwdW1hc2tfY29weShjcHVzLCBjcHVfYWN0aXZlX21hc2spOwotCi0JLyoKLQkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCi0JICogc2libGluZyBjYW4gcGljayB1cCBsb2FkIGlycmVzcGVjdGl2ZSBvZiBidXN5IHNpYmxpbmdzLiBJbiB0aGlzIGNhc2UsCi0JICogbGV0IHRoZSBzdGF0ZSBvZiBpZGxlIHNpYmxpbmcgcGVyY29sYXRlIHVwIGFzIElETEUsIGluc3RlYWQgb2YKLQkgKiBwb3J0cmF5aW5nIGl0IGFzIENQVV9OT1RfSURMRS4KLQkgKi8KLQlpZiAoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXNkX2lkbGUgPSAxOwotCi0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfY291bnRbQ1BVX05FV0xZX0lETEVdKTsKLXJlZG86Ci0JdXBkYXRlX3NoYXJlc19sb2NrZWQodGhpc19ycSwgc2QpOwotCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgQ1BVX05FV0xZX0lETEUsCi0JCQkJICAgJnNkX2lkbGUsIGNwdXMsIE5VTEwpOwotCWlmICghZ3JvdXApIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5Z1tDUFVfTkVXTFlfSURMRV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBDUFVfTkVXTFlfSURMRSwgaW1iYWxhbmNlLCBjcHVzKTsKLQlpZiAoIWJ1c2llc3QpIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtDUFVfTkVXTFlfSURMRV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlCVUdfT04oYnVzaWVzdCA9PSB0aGlzX3JxKTsKLQotCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2ltYmFsYW5jZVtDUFVfTkVXTFlfSURMRV0sIGltYmFsYW5jZSk7Ci0KLQlsZF9tb3ZlZCA9IDA7Ci0JaWYgKGJ1c2llc3QtPm5yX3J1bm5pbmcgPiAxKSB7Ci0JCS8qIEF0dGVtcHQgdG8gbW92ZSB0YXNrcyAqLwotCQlkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCQkvKiB0aGlzX3JxLT5jbG9jayBpcyBhbHJlYWR5IHVwZGF0ZWQgKi8KLQkJdXBkYXRlX3JxX2Nsb2NrKGJ1c2llc3QpOwotCQlsZF9tb3ZlZCA9IG1vdmVfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJCWltYmFsYW5jZSwgc2QsIENQVV9ORVdMWV9JRExFLAotCQkJCQkmYWxsX3Bpbm5lZCk7Ci0JCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQotCQlpZiAodW5saWtlbHkoYWxsX3Bpbm5lZCkpIHsKLQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdV9vZihidXNpZXN0KSwgY3B1cyk7Ci0JCQlpZiAoIWNwdW1hc2tfZW1wdHkoY3B1cykpCi0JCQkJZ290byByZWRvOwotCQl9Ci0JfQotCi0JaWYgKCFsZF9tb3ZlZCkgewotCQlpbnQgYWN0aXZlX2JhbGFuY2UgPSAwOwotCi0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2ZhaWxlZFtDUFVfTkVXTFlfSURMRV0pOwotCQlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQkJcmV0dXJuIC0xOwotCi0JCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzIDwgUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKQotCQkJcmV0dXJuIC0xOwotCi0JCWlmIChzZC0+bnJfYmFsYW5jZV9mYWlsZWQrKyA8IDIpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJLyoKLQkJICogVGhlIG9ubHkgdGFzayBydW5uaW5nIGluIGEgbm9uLWlkbGUgY3B1IGNhbiBiZSBtb3ZlZCB0byB0aGlzCi0JCSAqIGNwdSBpbiBhbiBhdHRlbXB0IHRvIGNvbXBsZXRlbHkgZnJlZXVwIHRoZSBvdGhlciBDUFUKLQkJICogcGFja2FnZS4gVGhlIHNhbWUgbWV0aG9kIHVzZWQgdG8gbW92ZSB0YXNrIGluIGxvYWRfYmFsYW5jZSgpCi0JCSAqIGhhdmUgYmVlbiBleHRlbmRlZCBmb3IgbG9hZF9iYWxhbmNlX25ld2lkbGUoKSB0byBzcGVlZHVwCi0JCSAqIGNvbnNvbGlkYXRpb24gYXQgc2NoZWRfbWM9UE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQICgyKQotCQkgKgotCQkgKiBUaGUgcGFja2FnZSBwb3dlciBzYXZpbmcgbG9naWMgY29tZXMgZnJvbQotCQkgKiBmaW5kX2J1c2llc3RfZ3JvdXAoKS4gIElmIHRoZXJlIGFyZSBubyBpbWJhbGFuY2UsIHRoZW4KLQkJICogZl9iX2coKSB3aWxsIHJldHVybiBOVUxMLiAgSG93ZXZlciB3aGVuIHNjaGVkX21jPXsxLDJ9IHRoZW4KLQkJICogZl9iX2coKSB3aWxsIHNlbGVjdCBhIGdyb3VwIGZyb20gd2hpY2ggYSBydW5uaW5nIHRhc2sgbWF5IGJlCi0JCSAqIHB1bGxlZCB0byB0aGlzIGNwdSBpbiBvcmRlciB0byBtYWtlIHRoZSBvdGhlciBwYWNrYWdlIGlkbGUuCi0JCSAqIElmIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIG1ha2UgYSBwYWNrYWdlIGlkbGUgYW5kIGlmCi0JCSAqIHRoZXJlIGFyZSBubyBpbWJhbGFuY2UsIHRoZW4gZl9iX2coKSB3aWxsIHJldHVybiBOVUxMIGFuZCBubwotCQkgKiBhY3Rpb24gd2lsbCBiZSB0YWtlbiBpbiBsb2FkX2JhbGFuY2VfbmV3aWRsZSgpLgotCQkgKgotCQkgKiBVbmRlciBub3JtYWwgdGFzayBwdWxsIG9wZXJhdGlvbiBkdWUgdG8gaW1iYWxhbmNlLCB0aGVyZQotCQkgKiB3aWxsIGJlIG1vcmUgdGhhbiBvbmUgdGFzayBpbiB0aGUgc291cmNlIHJ1biBxdWV1ZSBhbmQKLQkJICogbW92ZV90YXNrcygpIHdpbGwgc3VjY2VlZC4gIGxkX21vdmVkIHdpbGwgYmUgdHJ1ZSBhbmQgdGhpcwotCQkgKiBhY3RpdmUgYmFsYW5jZSBjb2RlIHdpbGwgbm90IGJlIHRyaWdnZXJlZC4KLQkJICovCi0KLQkJLyogTG9jayBidXNpZXN0IGluIGNvcnJlY3Qgb3JkZXIgd2hpbGUgdGhpc19ycSBpcyBoZWxkICovCi0JCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0KLQkJLyoKLQkJICogZG9uJ3Qga2ljayB0aGUgbWlncmF0aW9uX3RocmVhZCwgaWYgdGhlIGN1cnIKLQkJICogdGFzayBvbiBidXNpZXN0IGNwdSBjYW4ndCBiZSBtb3ZlZCB0byB0aGlzX2NwdQotCQkgKi8KLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCAmYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgewotCQkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCQkJYWxsX3Bpbm5lZCA9IDE7Ci0JCQlyZXR1cm4gbGRfbW92ZWQ7Ci0JCX0KLQotCQlpZiAoIWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlKSB7Ci0JCQlidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OwotCQkJYWN0aXZlX2JhbGFuY2UgPSAxOwotCQl9Ci0KLQkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCQkvKgotCQkgKiBTaG91bGQgbm90IGNhbGwgdHR3dSB3aGlsZSBob2xkaW5nIGEgcnEtPmxvY2sKLQkJICovCi0JCXJhd19zcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7Ci0JCWlmIChhY3RpdmVfYmFsYW5jZSkKLQkJCXdha2VfdXBfcHJvY2VzcyhidXNpZXN0LT5taWdyYXRpb25fdGhyZWFkKTsKLQkJcmF3X3NwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7Ci0KLQl9IGVsc2UKLQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotCXVwZGF0ZV9zaGFyZXNfbG9ja2VkKHRoaXNfcnEsIHNkKTsKLQlyZXR1cm4gbGRfbW92ZWQ7Ci0KLW91dF9iYWxhbmNlZDoKLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9iYWxhbmNlZFtDUFVfTkVXTFlfSURMRV0pOwotCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJcmV0dXJuIC0xOwotCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGlkbGVfYmFsYW5jZSBpcyBjYWxsZWQgYnkgc2NoZWR1bGUoKSBpZiB0aGlzX2NwdSBpcyBhYm91dCB0byBiZWNvbWUKLSAqIGlkbGUuIEF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvdGhlciBDUFVzLgotICovCi1zdGF0aWMgdm9pZCBpZGxlX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0JaW50IHB1bGxlZF90YXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyBIWjsKLQotCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSB0aGlzX3JxLT5jbG9jazsKLQotCWlmICh0aGlzX3JxLT5hdmdfaWRsZSA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCkKLQkJcmV0dXJuOwotCi0JZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewotCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCi0JCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2QtPmZsYWdzICYgU0RfQkFMQU5DRV9ORVdJRExFKQotCQkJLyogSWYgd2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc3RvcCBzZWFyY2hpbmc6ICovCi0JCQlwdWxsZWRfdGFzayA9IGxvYWRfYmFsYW5jZV9uZXdpZGxlKHRoaXNfY3B1LCB0aGlzX3JxLAotCQkJCQkJCSAgIHNkKTsKLQotCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc2QtPmJhbGFuY2VfaW50ZXJ2YWwpOwotCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpCi0JCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7Ci0JCWlmIChwdWxsZWRfdGFzaykgewotCQkJdGhpc19ycS0+aWRsZV9zdGFtcCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAocHVsbGVkX3Rhc2sgfHwgdGltZV9hZnRlcihqaWZmaWVzLCB0aGlzX3JxLT5uZXh0X2JhbGFuY2UpKSB7Ci0JCS8qCi0JCSAqIFdlIGFyZSBnb2luZyBpZGxlLiBuZXh0X2JhbGFuY2UgbWF5IGJlIHNldCBiYXNlZCBvbgotCQkgKiBhIGJ1c3kgcHJvY2Vzc29yLiBTbyByZXNldCBuZXh0X2JhbGFuY2UuCi0JCSAqLwotCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7Ci0JfQotfQotCi0vKgotICogYWN0aXZlX2xvYWRfYmFsYW5jZSBpcyBydW4gYnkgbWlncmF0aW9uIHRocmVhZHMuIEl0IHB1c2hlcyBydW5uaW5nIHRhc2tzCi0gKiBvZmYgdGhlIGJ1c2llc3QgQ1BVIG9udG8gaWRsZSBDUFVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdCAxIHRhc2sgdG8gYmUKLSAqIHJ1bm5pbmcgb24gZWFjaCBwaHlzaWNhbCBDUFUgd2hlcmUgcG9zc2libGUsIGFuZCBhdm9pZHMgcGh5c2ljYWwgLwotICogbG9naWNhbCBpbWJhbGFuY2VzLgotICoKLSAqIENhbGxlZCB3aXRoIGJ1c2llc3RfcnEgbG9ja2VkLgotICovCi1zdGF0aWMgdm9pZCBhY3RpdmVfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqYnVzaWVzdF9ycSwgaW50IGJ1c2llc3RfY3B1KQotewotCWludCB0YXJnZXRfY3B1ID0gYnVzaWVzdF9ycS0+cHVzaF9jcHU7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0Jc3RydWN0IHJxICp0YXJnZXRfcnE7Ci0KLQkvKiBJcyB0aGVyZSBhbnkgdGFzayB0byBtb3ZlPyAqLwotCWlmIChidXNpZXN0X3JxLT5ucl9ydW5uaW5nIDw9IDEpCi0JCXJldHVybjsKLQotCXRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTsKLQotCS8qCi0JICogVGhpcyBjb25kaXRpb24gaXMgImltcG9zc2libGUiLCBpZiBpdCBvY2N1cnMKLQkgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieQotCSAqIEJqb3JuIEhlbGdhYXMgb24gYSAxMjgtY3B1IHNldHVwLgotCSAqLwotCUJVR19PTihidXNpZXN0X3JxID09IHRhcmdldF9ycSk7Ci0KLQkvKiBtb3ZlIGEgdGFzayBmcm9tIGJ1c2llc3RfcnEgdG8gdGFyZ2V0X3JxICovCi0JZG91YmxlX2xvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOwotCXVwZGF0ZV9ycV9jbG9jayhidXNpZXN0X3JxKTsKLQl1cGRhdGVfcnFfY2xvY2sodGFyZ2V0X3JxKTsKLQotCS8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqLwotCWZvcl9lYWNoX2RvbWFpbih0YXJnZXRfY3B1LCBzZCkgewotCQlpZiAoKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkgJiYKLQkJICAgIGNwdW1hc2tfdGVzdF9jcHUoYnVzaWVzdF9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCi0JCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGxpa2VseShzZCkpIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2NvdW50KTsKLQotCQlpZiAobW92ZV9vbmVfdGFzayh0YXJnZXRfcnEsIHRhcmdldF9jcHUsIGJ1c2llc3RfcnEsCi0JCQkJICBzZCwgQ1BVX0lETEUpKQotCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX3B1c2hlZCk7Ci0JCWVsc2UKLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9mYWlsZWQpOwotCX0KLQlkb3VibGVfdW5sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKLX0KLQotI2lmZGVmIENPTkZJR19OT19IWgotc3RhdGljIHN0cnVjdCB7Ci0JYXRvbWljX3QgbG9hZF9iYWxhbmNlcjsKLQljcHVtYXNrX3Zhcl90IGNwdV9tYXNrOwotCWNwdW1hc2tfdmFyX3QgaWxiX2dycF9ub2h6X21hc2s7Ci19IG5vaHogX19fX2NhY2hlbGluZV9hbGlnbmVkID0gewotCS5sb2FkX2JhbGFuY2VyID0gQVRPTUlDX0lOSVQoLTEpLAotfTsKLQotaW50IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIodm9pZCkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcik7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotLyoqCi0gKiBsb3dlc3RfZmxhZ19kb21haW4gLSBSZXR1cm4gbG93ZXN0IHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGZsYWcuCi0gKiBAY3B1OglUaGUgY3B1IHdob3NlIGxvd2VzdCBsZXZlbCBvZiBzY2hlZCBkb21haW4gaXMgdG8KLSAqCQliZSByZXR1cm5lZC4KLSAqIEBmbGFnOglUaGUgZmxhZyB0byBjaGVjayBmb3IgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4KLSAqCQlmb3IgdGhlIGdpdmVuIGNwdS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIG9mIGEgY3B1IHdoaWNoIGNvbnRhaW5zIHRoZSBnaXZlbiBmbGFnLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9kb21haW4gKmxvd2VzdF9mbGFnX2RvbWFpbihpbnQgY3B1LCBpbnQgZmxhZykKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQotCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKQotCQlpZiAoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gc2Q7Ci19Ci0KLS8qKgotICogZm9yX2VhY2hfZmxhZ19kb21haW4gLSBJdGVyYXRlcyBvdmVyIHNjaGVkX2RvbWFpbnMgY29udGFpbmluZyB0aGUgZmxhZy4KLSAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgZG9tYWlucyB3ZSdyZSBpdGVyYXRpbmcgb3Zlci4KLSAqIEBzZDoJCXZhcmlhYmxlIGhvbGRpbmcgdGhlIHZhbHVlIG9mIHRoZSBwb3dlcl9zYXZpbmdzX3NkCi0gKgkJZm9yIGNwdS4KLSAqIEBmbGFnOglUaGUgZmxhZyB0byBmaWx0ZXIgdGhlIHNjaGVkX2RvbWFpbnMgdG8gYmUgaXRlcmF0ZWQuCi0gKgotICogSXRlcmF0ZXMgb3ZlciBhbGwgdGhlIHNjaGVkdWxlciBkb21haW5zIGZvciBhIGdpdmVuIGNwdSB0aGF0IGhhcyB0aGUgJ2ZsYWcnCi0gKiBzZXQsIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gdG8gdGhlIGhpZ2hlc3QuCi0gKi8KLSNkZWZpbmUgZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgZmxhZykgXAotCWZvciAoc2QgPSBsb3dlc3RfZmxhZ19kb21haW4oY3B1LCBmbGFnKTsgXAotCQkoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKTsgc2QgPSBzZC0+cGFyZW50KQotCi0vKioKLSAqIGlzX3NlbWlfaWRsZV9ncm91cCAtIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlLgotICogQGlsYl9ncm91cDoJZ3JvdXAgdG8gYmUgY2hlY2tlZCBmb3Igc2VtaS1pZGxlbmVzcwotICoKLSAqIFJldHVybnM6CTEgaWYgdGhlIGdyb3VwIGlzIHNlbWktaWRsZS4gMCBvdGhlcndpc2UuCi0gKgotICogV2UgZGVmaW5lIGEgc2NoZWRfZ3JvdXAgdG8gYmUgc2VtaSBpZGxlIGlmIGl0IGhhcyBhdGxlYXN0IG9uZSBpZGxlLUNQVQotICogYW5kIGF0bGVhc3Qgb25lIG5vbi1pZGxlIENQVS4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBnaXZlbgotICogc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIG9yIG5vdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfc2VtaV9pZGxlX2dyb3VwKHN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwKQotewotCWNwdW1hc2tfYW5kKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIG5vaHouY3B1X21hc2ssCi0JCQkJCXNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSk7Ci0KLQkvKgotCSAqIEEgc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIHdoZW4gaXQgaGFzIGF0bGVhc3Qgb25lIGJ1c3kgY3B1Ci0JICogYW5kIGF0bGVhc3Qgb25lIGlkbGUgY3B1LgotCSAqLwotCWlmIChjcHVtYXNrX2VtcHR5KG5vaHouaWxiX2dycF9ub2h6X21hc2spKQotCQlyZXR1cm4gMDsKLQotCWlmIChjcHVtYXNrX2VxdWFsKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIHNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0vKioKLSAqIGZpbmRfbmV3X2lsYiAtIEZpbmRzIHRoZSBvcHRpbXVtIGlkbGUgbG9hZCBiYWxhbmNlciBmb3Igbm9taW5hdGlvbi4KLSAqIEBjcHU6CVRoZSBjcHUgd2hpY2ggaXMgbm9taW5hdGluZyBhIG5ldyBpZGxlX2xvYWRfYmFsYW5jZXIuCi0gKgotICogUmV0dXJuczoJUmV0dXJucyB0aGUgaWQgb2YgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBpZiBpdCBleGlzdHMsCi0gKgkJRWxzZSwgcmV0dXJucyA+PSBucl9jcHVfaWRzLgotICoKLSAqIFRoaXMgYWxnb3JpdGhtIHBpY2tzIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgc3VjaCB0aGF0IGl0IGJlbG9uZ3MgdG8gYQotICogc2VtaS1pZGxlIHBvd2Vyc2F2aW5ncyBzY2hlZF9kb21haW4uIFRoZSBpZGVhIGlzIHRvIHRyeSBhbmQgYXZvaWQKLSAqIGNvbXBsZXRlbHkgaWRsZSBwYWNrYWdlcy9jb3JlcyBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBpZGxlIGxvYWQgYmFsYW5jaW5nCi0gKiB3aGVuIHRoZXJlIGFyZSBvdGhlciBpZGxlIGNwdSdzIHdoaWNoIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciB0aGF0IGpvYi4KLSAqLwotc3RhdGljIGludCBmaW5kX25ld19pbGIoaW50IGNwdSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cDsKLQotCS8qCi0JICogSGF2ZSBpZGxlIGxvYWQgYmFsYW5jZXIgc2VsZWN0aW9uIGZyb20gc2VtaS1pZGxlIHBhY2thZ2VzIG9ubHkKLQkgKiB3aGVuIHBvd2VyLWF3YXJlIGxvYWQgYmFsYW5jaW5nIGlzIGVuYWJsZWQKLQkgKi8KLQlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKLQkJZ290byBvdXRfZG9uZTsKLQotCS8qCi0JICogT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZW4gd2UgaGF2ZSBubyBpZGxlIENQVXMgb3Igb25seSBvbmUKLQkgKiBpZGxlIENQVS4gRG9uJ3Qgd2FsayB0aGUgc2NoZWRfZG9tYWluIGhpZXJhcmNoeSBpbiBzdWNoIGNhc2VzCi0JICovCi0JaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spIDwgMikKLQkJZ290byBvdXRfZG9uZTsKLQotCWZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSB7Ci0JCWlsYl9ncm91cCA9IHNkLT5ncm91cHM7Ci0KLQkJZG8gewotCQkJaWYgKGlzX3NlbWlfaWRsZV9ncm91cChpbGJfZ3JvdXApKQotCQkJCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouaWxiX2dycF9ub2h6X21hc2spOwotCi0JCQlpbGJfZ3JvdXAgPSBpbGJfZ3JvdXAtPm5leHQ7Ci0KLQkJfSB3aGlsZSAoaWxiX2dyb3VwICE9IHNkLT5ncm91cHMpOwotCX0KLQotb3V0X2RvbmU6Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Ci19Ci0jZWxzZSAvKiAgKENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UKSAqLwotc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXdfaWxiKGludCBjYWxsX2NwdSkKLXsKLQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKLX0KLSNlbmRpZgotCi0vKgotICogVGhpcyByb3V0aW5lIHdpbGwgdHJ5IHRvIG5vbWluYXRlIHRoZSBpbGIgKGlkbGUgbG9hZCBiYWxhbmNpbmcpCi0gKiBvd25lciBhbW9uZyB0aGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUgc3RvcHBlZC4gaWxiIG93bmVyIHdpbGwgZG8gdGhlIGlkbGUKLSAqIGxvYWQgYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiBhbGwgdGhvc2UgY3B1cy4gSWYgYWxsIHRoZSBjcHVzIGluIHRoZSBzeXN0ZW0KLSAqIGdvIGludG8gdGhpcyB0aWNrbGVzcyBtb2RlLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gaWxiIG93bmVyIChhcyB0aGVyZSBpcwotICogbm8gbmVlZCBmb3Igb25lKSBhbmQgYWxsIHRoZSBjcHVzIHdpbGwgc2xlZXAgdGlsbCB0aGUgbmV4dCB3YWtldXAgZXZlbnQKLSAqIGFycml2ZXMuLi4KLSAqCi0gKiBGb3IgdGhlIGlsYiBvd25lciwgdGljayBpcyBub3Qgc3RvcHBlZC4gQW5kIHRoaXMgdGljayB3aWxsIGJlIHVzZWQKLSAqIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLiBpbGIgb3duZXIgd2lsbCBzdGlsbCBiZSBwYXJ0IG9mCi0gKiBub2h6LmNwdV9tYXNrLi4KLSAqCi0gKiBXaGlsZSBzdG9wcGluZyB0aGUgdGljaywgdGhpcyBjcHUgd2lsbCBiZWNvbWUgdGhlIGlsYiBvd25lciBpZiB0aGVyZQotICogaXMgbm8gb3RoZXIgb3duZXIuIEFuZCB3aWxsIGJlIHRoZSBvd25lciB0aWxsIHRoYXQgY3B1IGJlY29tZXMgYnVzeQotICogb3IgaWYgYWxsIGNwdXMgaW4gdGhlIHN5c3RlbSBzdG9wIHRoZWlyIHRpY2tzIGF0IHdoaWNoIHBvaW50Ci0gKiB0aGVyZSBpcyBubyBuZWVkIGZvciBpbGIgb3duZXIuCi0gKgotICogV2hlbiB0aGUgaWxiIG93bmVyIGJlY29tZXMgYnVzeSwgaXQgbm9taW5hdGVzIGFub3RoZXIgb3duZXIsIGR1cmluZyB0aGUKLSAqIG5leHQgYnVzeSBzY2hlZHVsZXJfdGljaygpCi0gKi8KLWludCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChzdG9wX3RpY2spIHsKLQkJY3B1X3JxKGNwdSktPmluX25vaHpfcmVjZW50bHkgPSAxOwotCi0JCWlmICghY3B1X2FjdGl2ZShjcHUpKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1KQotCQkJCXJldHVybiAwOwotCi0JCQkvKgotCQkJICogSWYgd2UgYXJlIGdvaW5nIG9mZmxpbmUgYW5kIHN0aWxsIHRoZSBsZWFkZXIsCi0JCQkgKiBnaXZlIHVwIQotCQkJICovCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQotCQkJCUJVRygpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCi0JCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCi0JCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fYWN0aXZlX2NwdXMoKSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKLQkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7Ci0JCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSwgY3B1KSA9PSAtMSkKLQkJCQlyZXR1cm4gMTsKLQkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKLQkJCWludCBuZXdfaWxiOwotCi0JCQlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fAotCQkJCQkJc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCi0JCQkJcmV0dXJuIDE7Ci0JCQkvKgotCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSBwb3dlci1lZmZpY2llbnQKLQkJCSAqIGlsYi4KLQkJCSAqLwotCQkJbmV3X2lsYiA9IGZpbmRfbmV3X2lsYihjcHUpOwotCQkJaWYgKG5ld19pbGIgPCBucl9jcHVfaWRzICYmIG5ld19pbGIgIT0gY3B1KSB7Ci0JCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCQkJcmVzY2hlZF9jcHUobmV3X2lsYik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQotCQkJcmV0dXJuIDA7Ci0KLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKLQkJCQlCVUcoKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhiYWxhbmNpbmcpOwotCi0vKgotICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKLSAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgotICoKLSAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCi0gKi8KLXN0YXRpYyB2b2lkIHJlYmFsYW5jZV9kb21haW5zKGludCBjcHUsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCWludCBiYWxhbmNlID0gMTsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQkvKiBFYXJsaWVzdCB0aW1lIHdoZW4gd2UgaGF2ZSB0byBkbyByZWJhbGFuY2UgYWdhaW4gKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKLQlpbnQgdXBkYXRlX25leHRfYmFsYW5jZSA9IDA7Ci0JaW50IG5lZWRfc2VyaWFsaXplOwotCi0JZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKLQkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKLQkJCWNvbnRpbnVlOwotCi0JCWludGVydmFsID0gc2QtPmJhbGFuY2VfaW50ZXJ2YWw7Ci0JCWlmIChpZGxlICE9IENQVV9JRExFKQotCQkJaW50ZXJ2YWwgKj0gc2QtPmJ1c3lfZmFjdG9yOwotCi0JCS8qIHNjYWxlIG1zIHRvIGppZmZpZXMgKi8KLQkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKLQkJaWYgKHVubGlrZWx5KCFpbnRlcnZhbCkpCi0JCQlpbnRlcnZhbCA9IDE7Ci0JCWlmIChpbnRlcnZhbCA+IEhaKk5SX0NQVVMvMTApCi0JCQlpbnRlcnZhbCA9IEhaKk5SX0NQVVMvMTA7Ci0KLQkJbmVlZF9zZXJpYWxpemUgPSBzZC0+ZmxhZ3MgJiBTRF9TRVJJQUxJWkU7Ci0KLQkJaWYgKG5lZWRfc2VyaWFsaXplKSB7Ci0JCQlpZiAoIXNwaW5fdHJ5bG9jaygmYmFsYW5jaW5nKSkKLQkJCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKLQkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlKSkgewotCQkJCS8qCi0JCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCi0JCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCi0JCQkJICogbm90IGlkbGUuCi0JCQkJICovCi0JCQkJaWRsZSA9IENQVV9OT1RfSURMRTsKLQkJCX0KLQkJCXNkLT5sYXN0X2JhbGFuY2UgPSBqaWZmaWVzOwotCQl9Ci0JCWlmIChuZWVkX3NlcmlhbGl6ZSkKLQkJCXNwaW5fdW5sb2NrKCZiYWxhbmNpbmcpOwotb3V0OgotCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKLQkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKLQkJCXVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAxOwotCQl9Ci0KLQkJLyoKLQkJICogU3RvcCB0aGUgbG9hZCBiYWxhbmNlIGF0IHRoaXMgbGV2ZWwuIFRoZXJlIGlzIGFub3RoZXIKLQkJICogQ1BVIGluIG91ciBzY2hlZCBncm91cCB3aGljaCBpcyBkb2luZyBsb2FkIGJhbGFuY2luZyBtb3JlCi0JCSAqIGFjdGl2ZWx5LgotCQkgKi8KLQkJaWYgKCFiYWxhbmNlKQotCQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBuZXh0X2JhbGFuY2Ugd2lsbCBiZSB1cGRhdGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIG5lZWQuCi0JICogV2hlbiB0aGUgY3B1IGlzIGF0dGFjaGVkIHRvIG51bGwgZG9tYWluIGZvciBleCwgaXQgd2lsbCBub3QgYmUKLQkgKiB1cGRhdGVkLgotCSAqLwotCWlmIChsaWtlbHkodXBkYXRlX25leHRfYmFsYW5jZSkpCi0JCXJxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7Ci19Ci0KLS8qCi0gKiBydW5fcmViYWxhbmNlX2RvbWFpbnMgaXMgdHJpZ2dlcmVkIHdoZW4gbmVlZGVkIGZyb20gdGhlIHNjaGVkdWxlciB0aWNrLgotICogSW4gQ09ORklHX05PX0haIGNhc2UsIHRoZSBpZGxlIGxvYWQgYmFsYW5jZSBvd25lciB3aWxsIGRvIHRoZQotICogcmViYWxhbmNpbmcgZm9yIGFsbCB0aGUgY3B1cyBmb3Igd2hvbSBzY2hlZHVsZXIgdGlja3MgYXJlIHN0b3BwZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCi17Ci0JaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7Ci0JZW51bSBjcHVfaWRsZV90eXBlIGlkbGUgPSB0aGlzX3JxLT5pZGxlX2F0X3RpY2sgPwotCQkJCQkJQ1BVX0lETEUgOiBDUFVfTk9UX0lETEU7Ci0KLQlyZWJhbGFuY2VfZG9tYWlucyh0aGlzX2NwdSwgaWRsZSk7Ci0KLSNpZmRlZiBDT05GSUdfTk9fSFoKLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvd25lciBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZywgdGhlbiBkbyB0aGUKLQkgKiBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIHRoZSBvdGhlciBpZGxlIGNwdXMgd2hvc2UgdGlja3MgYXJlCi0JICogc3RvcHBlZC4KLQkgKi8KLQlpZiAodGhpc19ycS0+aWRsZV9hdF90aWNrICYmCi0JICAgIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IHRoaXNfY3B1KSB7Ci0JCXN0cnVjdCBycSAqcnE7Ci0JCWludCBiYWxhbmNlX2NwdTsKLQotCQlmb3JfZWFjaF9jcHUoYmFsYW5jZV9jcHUsIG5vaHouY3B1X21hc2spIHsKLQkJCWlmIChiYWxhbmNlX2NwdSA9PSB0aGlzX2NwdSkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgY3B1IGdldHMgd29yayB0byBkbywgc3RvcCB0aGUgbG9hZCBiYWxhbmNpbmcKLQkJCSAqIHdvcmsgYmVpbmcgZG9uZSBmb3Igb3RoZXIgY3B1cy4gTmV4dCBsb2FkCi0JCQkgKiBiYWxhbmNpbmcgb3duZXIgd2lsbCBwaWNrIGl0IHVwLgotCQkJICovCi0JCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQkJYnJlYWs7Ci0KLQkJCXJlYmFsYW5jZV9kb21haW5zKGJhbGFuY2VfY3B1LCBDUFVfSURMRSk7Ci0KLQkJCXJxID0gY3B1X3JxKGJhbGFuY2VfY3B1KTsKLQkJCWlmICh0aW1lX2FmdGVyKHRoaXNfcnEtPm5leHRfYmFsYW5jZSwgcnEtPm5leHRfYmFsYW5jZSkpCi0JCQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gcnEtPm5leHRfYmFsYW5jZTsKLQkJfQotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQotewotCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Ci19Ci0KLS8qCi0gKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCi0gKgotICogSW4gY2FzZSBvZiBDT05GSUdfTk9fSFosIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIG5vbWluYXRlIGEgbmV3Ci0gKiBpZGxlIGxvYWQgYmFsYW5jaW5nIG93bmVyIG9yIGRlY2lkZSB0byBzdG9wIHRoZSBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZywKLSAqIGlmIHRoZSB3aG9sZSBzeXN0ZW0gaXMgaWRsZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqcnEsIGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX05PX0haCi0JLyoKLQkgKiBJZiB3ZSB3ZXJlIGluIHRoZSBub2h6IG1vZGUgcmVjZW50bHkgYW5kIGJ1c3kgYXQgdGhlIGN1cnJlbnQKLQkgKiBzY2hlZHVsZXIgdGljaywgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIG5vbWluYXRlIG5ldyBpZGxlCi0JICogbG9hZCBiYWxhbmNlci4KLQkgKi8KLQlpZiAocnEtPmluX25vaHpfcmVjZW50bHkgJiYgIXJxLT5pZGxlX2F0X3RpY2spIHsKLQkJcnEtPmluX25vaHpfcmVjZW50bHkgPSAwOwotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKLQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0JCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJfQotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgewotCQkJaW50IGlsYiA9IGZpbmRfbmV3X2lsYihjcHUpOwotCi0JCQlpZiAoaWxiIDwgbnJfY3B1X2lkcykKLQkJCQlyZXNjaGVkX2NwdShpbGIpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCBkb2luZyBpZGxlIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlCi0JICogY3B1cyB3aXRoIHRpY2tzIHN0b3BwZWQsIGlzIGl0IHRpbWUgZm9yIHRoYXQgdG8gc3RvcD8KLQkgKi8KLQlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUgJiYKLQkgICAgY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKLQkJcmVzY2hlZF9jcHUoY3B1KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgdGhlIGlkbGUgbG9hZCBiYWxhbmNpbmcgaXMgZG9uZSBieQotCSAqIHNvbWVvbmUgZWxzZSwgdGhlbiBubyBuZWVkIHJhaXNlIHRoZSBTQ0hFRF9TT0ZUSVJRCi0JICovCi0JaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1ICYmCi0JICAgIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKLQkJcmV0dXJuOwotI2VuZGlmCi0JLyogRG9uJ3QgbmVlZCB0byByZWJhbGFuY2Ugd2hpbGUgYXR0YWNoZWQgdG8gTlVMTCBkb21haW4gKi8KLQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSAmJgotCSAgICBsaWtlbHkoIW9uX251bGxfZG9tYWluKGNwdSkpKQotCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOwotfQotCi0jZWxzZQkvKiBDT05GSUdfU01QICovCi0KLS8qCi0gKiBvbiBVUCB3ZSBkbyBub3QgbmVlZCB0byBiYWxhbmNlIGJldHdlZW4gQ1BVczoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkbGVfYmFsYW5jZShpbnQgY3B1LCBzdHJ1Y3QgcnEgKnJxKQotewotfQotCiAjZW5kaWYKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGtlcm5lbF9zdGF0LCBrc3RhdCk7CkBAIC01MzA5LDcgKzM1MTUsNyBAQAogCWN1cnItPnNjaGVkX2NsYXNzLT50YXNrX3RpY2socnEsIGN1cnIsIDApOwogCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCi0JcGVyZl9ldmVudF90YXNrX3RpY2soY3VyciwgY3B1KTsKKwlwZXJmX2V2ZW50X3Rhc2tfdGljayhjdXJyKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlycS0+aWRsZV9hdF90aWNrID0gaWRsZV9jcHUoY3B1KTsKQEAgLTU1MjMsNyArMzcyOSw3IEBACiAKIAlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKIAkJc2NoZWRfaW5mb19zd2l0Y2gocHJldiwgbmV4dCk7Ci0JCXBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCwgY3B1KTsKKwkJcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChwcmV2LCBuZXh0KTsKIAogCQlycS0+bnJfc3dpdGNoZXMrKzsKIAkJcnEtPmN1cnIgPSBuZXh0OwpAQCAtNjA1NCw3ICs0MjYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBvbGRwcmlvLCBvbl9ycSwgcnVubmluZzsKIAlzdHJ1Y3QgcnEgKnJxOwotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOworCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzczsKIAogCUJVR19PTihwcmlvIDwgMCB8fCBwcmlvID4gTUFYX1BSSU8pOwogCkBAIC02MDYyLDYgKzQyNjgsNyBAQAogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKIAlvbGRwcmlvID0gcC0+cHJpbzsKKwlwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CiAJb25fcnEgPSBwLT5zZS5vbl9ycTsKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCBwKTsKIAlpZiAob25fcnEpCkBAIC02MDc5LDcgKzQyODYsNyBAQAogCWlmIChydW5uaW5nKQogCQlwLT5zY2hlZF9jbGFzcy0+c2V0X2N1cnJfdGFzayhycSk7CiAJaWYgKG9uX3JxKSB7Ci0JCWVucXVldWVfdGFzayhycSwgcCwgMCk7CisJCWVucXVldWVfdGFzayhycSwgcCwgMCwgb2xkcHJpbyA8IHByaW8pOwogCiAJCWNoZWNrX2NsYXNzX2NoYW5nZWQocnEsIHAsIHByZXZfY2xhc3MsIG9sZHByaW8sIHJ1bm5pbmcpOwogCX0KQEAgLTYxMjMsNyArNDMzMCw3IEBACiAJZGVsdGEgPSBwLT5wcmlvIC0gb2xkX3ByaW87CiAKIAlpZiAob25fcnEpIHsKLQkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwKTsKKwkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwLCBmYWxzZSk7CiAJCS8qCiAJCSAqIElmIHRoZSB0YXNrIGluY3JlYXNlZCBpdHMgcHJpb3JpdHkgb3IgaXMgcnVubmluZyBhbmQKIAkJICogbG93ZXJlZCBpdHMgcHJpb3JpdHksIHRoZW4gcmVzY2hlZHVsZSBpdHMgQ1BVOgpAQCAtNjI4MSw3ICs0NDg4LDcgQEAKIHsKIAlpbnQgcmV0dmFsLCBvbGRwcmlvLCBvbGRwb2xpY3kgPSAtMSwgb25fcnEsIHJ1bm5pbmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKKwljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3M7CiAJc3RydWN0IHJxICpycTsKIAlpbnQgcmVzZXRfb25fZm9yazsKIApAQCAtNjM5NSw2ICs0NjAyLDcgQEAKIAlwLT5zY2hlZF9yZXNldF9vbl9mb3JrID0gcmVzZXRfb25fZm9yazsKIAogCW9sZHByaW8gPSBwLT5wcmlvOworCXByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKIAlfX3NldHNjaGVkdWxlcihycSwgcCwgcG9saWN5LCBwYXJhbS0+c2NoZWRfcHJpb3JpdHkpOwogCiAJaWYgKHJ1bm5pbmcpCkBAIC03MTQ1LDI3ICs1MzUzLDggQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXQgPSAwOwogCi0JLyoKLQkgKiBTaW5jZSB3ZSByZWx5IG9uIHdha2UtdXBzIHRvIG1pZ3JhdGUgc2xlZXBpbmcgdGFza3MsIGRvbid0IGNoYW5nZQotCSAqIHRoZSAtPmNwdXNfYWxsb3dlZCBtYXNrIGZyb20gdW5kZXIgd2FraW5nIHRhc2tzLCB3aGljaCB3b3VsZCBiZQotCSAqIHBvc3NpYmxlIHdoZW4gd2UgY2hhbmdlIHJxLT5sb2NrIGluIHR0d3UoKSwgc28gc3luY2hyb25pemUgYWdhaW5zdAotCSAqIFRBU0tfV0FLSU5HIHRvIGF2b2lkIHRoYXQuCi0JICoKLQkgKiBNYWtlIGFuIGV4Y2VwdGlvbiBmb3IgZnJlc2hseSBjbG9uZWQgdGFza3MsIHNpbmNlIGNwdXNldCBuYW1lc3BhY2VzCi0JICogbWlnaHQgbW92ZSB0aGUgdGFzayBhYm91dCwgd2UgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgdGFyZ2V0IGluCi0JICogd2FrZV91cF9uZXdfdGFzaygpIGFueXdheSBzaW5jZSB0aGUgY3B1IG1pZ2h0IGhhdmUgZ29uZSBhd2F5LgotCSAqLwotYWdhaW46Ci0Jd2hpbGUgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HICYmICEocC0+ZmxhZ3MgJiBQRl9TVEFSVElORykpCi0JCWNwdV9yZWxheCgpOwotCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAotCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORyAmJiAhKHAtPmZsYWdzICYgUEZfU1RBUlRJTkcpKSB7Ci0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCQlnb3RvIGFnYWluOwotCX0KLQogCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG5ld19tYXNrLCBjcHVfYWN0aXZlX21hc2spKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtOTQ1Miw3ICs3NjQxLDYgQEAKIAl0Zy0+cnRfcnFbY3B1XSA9IHJ0X3JxOwogCWluaXRfcnRfcnEocnRfcnEsIHJxKTsKIAlydF9ycS0+dGcgPSB0ZzsKLQlydF9ycS0+cnRfc2UgPSBydF9zZTsKIAlydF9ycS0+cnRfcnVudGltZSA9IHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKIAlpZiAoYWRkKQogCQlsaXN0X2FkZCgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwgJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwpAQCAtOTQ4Myw5ICs3NjcxLDYgQEAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlhbGxvY19zaXplICs9IDIgKiBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlhbGxvY19zaXplICo9IDI7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSwogCWFsbG9jX3NpemUgKz0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGNwdW1hc2tfc2l6ZSgpOwogI2VuZGlmCkBAIC05NDk5LDEzICs3Njg0LDYgQEAKIAkJaW5pdF90YXNrX2dyb3VwLmNmc19ycSA9IChzdHJ1Y3QgY2ZzX3JxICoqKXB0cjsKIAkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCQlyb290X3Rhc2tfZ3JvdXAuc2UgPSAoc3RydWN0IHNjaGVkX2VudGl0eSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotCi0JCXJvb3RfdGFza19ncm91cC5jZnNfcnEgPSAoc3RydWN0IGNmc19ycSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAkJaW5pdF90YXNrX2dyb3VwLnJ0X3NlID0gKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKiopcHRyOwpAQCAtOTUxNCwxMyArNzY5Miw2IEBACiAJCWluaXRfdGFza19ncm91cC5ydF9ycSA9IChzdHJ1Y3QgcnRfcnEgKiopcHRyOwogCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5ydF9zZSA9IChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0KLQkJcm9vdF90YXNrX2dyb3VwLnJ0X3JxID0gKHN0cnVjdCBydF9ycSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTk1NDAsMjIgKzc3MTEsMTMgQEAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlpbml0X3J0X2JhbmR3aWR0aCgmaW5pdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKIAkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgZ2xvYmFsX3J0X3J1bnRpbWUoKSk7Ci0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlpbml0X3J0X2JhbmR3aWR0aCgmcm9vdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKLQkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgUlVOVElNRV9JTkYpOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJbGlzdF9hZGQoJmluaXRfdGFza19ncm91cC5saXN0LCAmdGFza19ncm91cHMpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlJTklUX0xJU1RfSEVBRCgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKLQlpbml0X3Rhc2tfZ3JvdXAucGFyZW50ID0gJnJvb3RfdGFza19ncm91cDsKLQlsaXN0X2FkZCgmaW5pdF90YXNrX2dyb3VwLnNpYmxpbmdzLCAmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwotI2VuZGlmIC8qIENPTkZJR19HUk9VUF9TQ0hFRCAqLworI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi8KIAogI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCiAJdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKQEAgLTk1OTUsMjUgKzc3NTcsNiBAQAogCQkgKiBkaXJlY3RseSBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdID0gTlVMTCkuCiAJCSAqLwogCQlpbml0X3RnX2Nmc19lbnRyeSgmaW5pdF90YXNrX2dyb3VwLCAmcnEtPmNmcywgTlVMTCwgaSwgMSwgTlVMTCk7Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5zaGFyZXMgPSBOSUNFXzBfTE9BRDsKLQkJaW5pdF90Z19jZnNfZW50cnkoJnJvb3RfdGFza19ncm91cCwgJnJxLT5jZnMsIE5VTEwsIGksIDAsIE5VTEwpOwotCQkvKgotCQkgKiBJbiBjYXNlIG9mIHRhc2stZ3JvdXBzIGZvcm1lZCB0aHInIHRoZSB1c2VyIGlkIG9mIHRhc2tzLAotCQkgKiBpbml0X3Rhc2tfZ3JvdXAgcmVwcmVzZW50cyB0YXNrcyBiZWxvbmdpbmcgdG8gcm9vdCB1c2VyLgotCQkgKiBIZW5jZSBpdCBmb3JtcyBhIHNpYmxpbmcgb2YgYWxsIHN1YnNlcXVlbnQgZ3JvdXBzIGZvcm1lZC4KLQkJICogSW4gdGhpcyBjYXNlLCBpbml0X3Rhc2tfZ3JvdXAgZ2V0cyBvbmx5IGEgZnJhY3Rpb24gb2Ygb3ZlcmFsbAotCQkgKiBzeXN0ZW0gY3B1IHJlc291cmNlLCBiYXNlZCBvbiB0aGUgd2VpZ2h0IGFzc2lnbmVkIHRvIHJvb3QKLQkJICogdXNlcidzIGNwdSBzaGFyZSAoSU5JVF9UQVNLX0dST1VQX0xPQUQpLiBUaGlzIGlzIGFjY29tcGxpc2hlZAotCQkgKiBieSBsZXR0aW5nIHRhc2tzIG9mIGluaXRfdGFza19ncm91cCBzaXQgaW4gYSBzZXBhcmF0ZSBjZnNfcnEKLQkJICogKGluaXRfdGdfY2ZzX3JxKSBhbmQgaGF2aW5nIG9uZSBlbnRpdHkgcmVwcmVzZW50IHRoaXMgZ3JvdXAgb2YKLQkJICogdGFza3MgaW4gcnEtPmNmcyAoaS5lIGluaXRfdGFza19ncm91cC0+c2VbXSAhPSBOVUxMKS4KLQkJICovCi0JCWluaXRfdGdfY2ZzX2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsCi0JCQkJJnBlcl9jcHUoaW5pdF90Z19jZnNfcnEsIGkpLAotCQkJCSZwZXJfY3B1KGluaXRfc2NoZWRfZW50aXR5LCBpKSwgaSwgMSwKLQkJCQlyb290X3Rhc2tfZ3JvdXAuc2VbaV0pOwotCiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogCkBAIC05NjIyLDEyICs3NzY1LDYgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwogI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAkJaW5pdF90Z19ydF9lbnRyeSgmaW5pdF90YXNrX2dyb3VwLCAmcnEtPnJ0LCBOVUxMLCBpLCAxLCBOVUxMKTsKLSNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKLQkJaW5pdF90Z19ydF9lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPnJ0LCBOVUxMLCBpLCAwLCBOVUxMKTsKLQkJaW5pdF90Z19ydF9lbnRyeSgmaW5pdF90YXNrX2dyb3VwLAotCQkJCSZwZXJfY3B1KGluaXRfcnRfcnFfdmFyLCBpKSwKLQkJCQkmcGVyX2NwdShpbml0X3NjaGVkX3J0X2VudGl0eSwgaSksIGksIDEsCi0JCQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlW2ldKTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTk3MTIsNyArNzg0OSw3IEBACiAJcmV0dXJuIChuZXN0ZWQgPT0gUFJFRU1QVF9JTkFUT01JQ19CQVNFICsgcHJlZW1wdF9vZmZzZXQpOwogfQogCi12b2lkIF9fbWlnaHRfc2xlZXAoY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkKK3ZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQogewogI2lmZGVmIGluX2F0b21pYwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfamlmZnk7CS8qIHJhdGVsaW1pdGluZyAqLwpAQCAtMTAwMjMsNyArODE2MCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiBzdGF0aWMgdm9pZCBmcmVlX3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIHsKIAlmcmVlX2ZhaXJfc2NoZWRfZ3JvdXAodGcpOwpAQCAtMTAxMjgsMTEgKzgyNjUsMTEgQEAKIAlpZiAodW5saWtlbHkocnVubmluZykpCiAJCXRzay0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkKLQkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHRzaywgMCwgZmFsc2UpOwogCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCkBAIC0xMDI3NCwxMyArODQxMSw2IEBACiAJCXJ1bnRpbWUgPSBkLT5ydF9ydW50aW1lOwogCX0KIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JaWYgKHRnID09ICZyb290X3Rhc2tfZ3JvdXApIHsKLQkJcGVyaW9kID0gZ2xvYmFsX3J0X3BlcmlvZCgpOwotCQlydW50aW1lID0gZ2xvYmFsX3J0X3J1bnRpbWUoKTsKLQl9Ci0jZW5kaWYKLQogCS8qCiAJICogQ2Fubm90IGhhdmUgbW9yZSBydW50aW1lIHRoYW4gdGhlIHBlcmlvZC4KIAkgKi8KQEAgLTEwNjgzLDcgKzg4MTMsNyBAQAogc3RydWN0IGNwdWFjY3QgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAkvKiBjcHV1c2FnZSBob2xkcyBwb2ludGVyIHRvIGEgdTY0LXR5cGUgb2JqZWN0IG9uIGV2ZXJ5IGNwdSAqLwotCXU2NCAqY3B1dXNhZ2U7CisJdTY0IF9fcGVyY3B1ICpjcHV1c2FnZTsKIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgY3B1c3RhdFtDUFVBQ0NUX1NUQVRfTlNUQVRTXTsKIAlzdHJ1Y3QgY3B1YWNjdCAqcGFyZW50OwogfTsKQEAgLTEwOTAwLDEyICs5MDMwLDMwIEBACiB9CiAKIC8qCisgKiBXaGVuIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGlzIGVuYWJsZWQgb25lIGppZmZ5IGNhbiBiZSB2ZXJ5IGxhcmdlCisgKiBpbiBjcHV0aW1lX3QgdW5pdHMuIEFzIGEgcmVzdWx0LCBjcHVhY2N0X3VwZGF0ZV9zdGF0cyBjYWxscworICogcGVyY3B1X2NvdW50ZXJfYWRkIHdpdGggdmFsdWVzIGxhcmdlIGVub3VnaCB0byBhbHdheXMgb3ZlcmZsb3cgdGhlCisgKiBwZXIgY3B1IGJhdGNoIGxpbWl0IGNhdXNpbmcgYmFkIFNNUCBzY2FsYWJpbGl0eS4KKyAqCisgKiBUbyBmaXggdGhpcyB3ZSBzY2FsZSBwZXJjcHVfY291bnRlcl9iYXRjaCBieSBjcHV0aW1lX29uZV9qaWZmeSBzbyB3ZQorICogYmF0Y2ggdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUgd2l0aCBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBkaXNhYmxlZAorICogYW5kIGVuYWJsZWQuIFdlIGNhcCBpdCBhdCBJTlRfTUFYIHdoaWNoIGlzIHRoZSBsYXJnZXN0IGFsbG93ZWQgYmF0Y2ggdmFsdWUuCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIENQVUFDQ1RfQkFUQ0gJXAorCW1pbl90KGxvbmcsIHBlcmNwdV9jb3VudGVyX2JhdGNoICogY3B1dGltZV9vbmVfamlmZnksIElOVF9NQVgpCisjZWxzZQorI2RlZmluZSBDUFVBQ0NUX0JBVENICTAKKyNlbmRpZgorCisvKgogICogQ2hhcmdlIHRoZSBzeXN0ZW0vdXNlciB0aW1lIHRvIHRoZSB0YXNrJ3MgYWNjb3VudGluZyBncm91cC4KICAqLwogc3RhdGljIHZvaWQgY3B1YWNjdF91cGRhdGVfc3RhdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCWVudW0gY3B1YWNjdF9zdGF0X2luZGV4IGlkeCwgY3B1dGltZV90IHZhbCkKIHsKIAlzdHJ1Y3QgY3B1YWNjdCAqY2E7CisJaW50IGJhdGNoID0gQ1BVQUNDVF9CQVRDSDsKIAogCWlmICh1bmxpa2VseSghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKSkKIAkJcmV0dXJuOwpAQCAtMTA5MTQsNyArOTA2Miw3IEBACiAJY2EgPSB0YXNrX2NhKHRzayk7CiAKIAlkbyB7Ci0JCXBlcmNwdV9jb3VudGVyX2FkZCgmY2EtPmNwdXN0YXRbaWR4XSwgdmFsKTsKKwkJX19wZXJjcHVfY291bnRlcl9hZGQoJmNhLT5jcHVzdGF0W2lkeF0sIHZhbCwgYmF0Y2gpOwogCQljYSA9IGNhLT5wYXJlbnQ7CiAJfSB3aGlsZSAoY2EpOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2NwdXByaS5jIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCmluZGV4IDU5N2IzMzAuLmVlYjM1MDZjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKKysrIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCkBAIC00Nyw5ICs0Nyw3IEBACiB9CiAKICNkZWZpbmUgZm9yX2VhY2hfY3B1cHJpX2FjdGl2ZShhcnJheSwgaWR4KSAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGlkeCA9IGZpbmRfZmlyc3RfYml0KGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUyk7ICAgICBcCi0gICAgICAgaWR4IDwgQ1BVUFJJX05SX1BSSU9SSVRJRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBpZHggPSBmaW5kX25leHRfYml0KGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUywgaWR4KzEpKQorCWZvcl9lYWNoX2JpdChpZHgsIGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUykKIAogLyoqCiAgKiBjcHVwcmlfZmluZCAtIGZpbmQgdGhlIGJlc3QgKGxvd2VzdC1wcmkpIENQVSBpbiB0aGUgc3lzdGVtCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCA4ZmU3ZWU4Li4zZTFmZDk2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEwNTMsNyArMTA1Myw4IEBACiAgKiBpbmNyZWFzZWQuIEhlcmUgd2UgdXBkYXRlIHRoZSBmYWlyIHNjaGVkdWxpbmcgc3RhdHMgYW5kCiAgKiB0aGVuIHB1dCB0aGUgdGFzayBpbnRvIHRoZSByYnRyZWU6CiAgKi8KLXN0YXRpYyB2b2lkIGVucXVldWVfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3N0YXRpYyB2b2lkCitlbnF1ZXVlX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsIGJvb2wgaGVhZCkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CkBAIC0xODE1LDU3ICsxODE2LDE2NCBAQAogICovCiAKIC8qCi0gKiBMb2FkLWJhbGFuY2luZyBpdGVyYXRvci4gTm90ZTogd2hpbGUgdGhlIHJ1bnF1ZXVlIHN0YXlzIGxvY2tlZAotICogZHVyaW5nIHRoZSB3aG9sZSBpdGVyYXRpb24sIHRoZSBjdXJyZW50IHRhc2sgbWlnaHQgYmUKLSAqIGRlcXVldWVkIHNvIHRoZSBpdGVyYXRvciBoYXMgdG8gYmUgZGVxdWV1ZS1zYWZlLiBIZXJlIHdlCi0gKiBhY2hpZXZlIHRoYXQgYnkgYWx3YXlzIHByZS1pdGVyYXRpbmcgYmVmb3JlIHJldHVybmluZwotICogdGhlIGN1cnJlbnQgdGFzazoKKyAqIHB1bGxfdGFzayAtIG1vdmUgYSB0YXNrIGZyb20gYSByZW1vdGUgcnVucXVldWUgdG8gdGhlIGxvY2FsIHJ1bnF1ZXVlLgorICogQm90aCBydW5xdWV1ZXMgbXVzdCBiZSBsb2NrZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKgotX19sb2FkX2JhbGFuY2VfaXRlcmF0b3Ioc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQorc3RhdGljIHZvaWQgcHVsbF90YXNrKHN0cnVjdCBycSAqc3JjX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCSAgICAgIHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1KQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IE5VTEw7Ci0Jc3RydWN0IHNjaGVkX2VudGl0eSAqc2U7Ci0KLQlpZiAobmV4dCA9PSAmY2ZzX3JxLT50YXNrcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzZSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHNjaGVkX2VudGl0eSwgZ3JvdXBfbm9kZSk7Ci0JcCA9IHRhc2tfb2Yoc2UpOwotCWNmc19ycS0+YmFsYW5jZV9pdGVyYXRvciA9IG5leHQtPm5leHQ7Ci0KLQlyZXR1cm4gcDsKKwlkZWFjdGl2YXRlX3Rhc2soc3JjX3JxLCBwLCAwKTsKKwlzZXRfdGFza19jcHUocCwgdGhpc19jcHUpOworCWFjdGl2YXRlX3Rhc2sodGhpc19ycSwgcCwgMCk7CisJY2hlY2tfcHJlZW1wdF9jdXJyKHRoaXNfcnEsIHAsIDApOwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcih2b2lkICphcmcpCisvKgorICogY2FuX21pZ3JhdGVfdGFzayAtIG1heSB0YXNrIHAgZnJvbSBydW5xdWV1ZSBycSBiZSBtaWdyYXRlZCB0byB0aGlzX2NwdT8KKyAqLworc3RhdGljCitpbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCB0aGlzX2NwdSwKKwkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgICAgaW50ICphbGxfcGlubmVkKQogewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGFyZzsKKwlpbnQgdHNrX2NhY2hlX2hvdCA9IDA7CisJLyoKKwkgKiBXZSBkbyBub3QgbWlncmF0ZSB0YXNrcyB0aGF0IGFyZToKKwkgKiAxKSBydW5uaW5nIChvYnZpb3VzbHkpLCBvcgorCSAqIDIpIGNhbm5vdCBiZSBtaWdyYXRlZCB0byB0aGlzIENQVSBkdWUgdG8gY3B1c19hbGxvd2VkLCBvcgorCSAqIDMpIGFyZSBjYWNoZS1ob3Qgb24gdGhlaXIgY3VycmVudCBDUFUuCisJICovCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkgeworCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZSk7CisJCXJldHVybiAwOworCX0KKwkqYWxsX3Bpbm5lZCA9IDA7CiAKLQlyZXR1cm4gX19sb2FkX2JhbGFuY2VfaXRlcmF0b3IoY2ZzX3JxLCBjZnNfcnEtPnRhc2tzLm5leHQpOworCWlmICh0YXNrX3J1bm5pbmcocnEsIHApKSB7CisJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQWdncmVzc2l2ZSBtaWdyYXRpb24gaWY6CisJICogMSkgdGFzayBpcyBjYWNoZSBjb2xkLCBvcgorCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCisJICovCisKKwl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7CisJaWYgKCF0c2tfY2FjaGVfaG90IHx8CisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwkJaWYgKHRza19jYWNoZV9ob3QpIHsKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOworCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWRfbWlncmF0aW9ucyk7CisJCX0KKyNlbmRpZgorCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAodHNrX2NhY2hlX2hvdCkgeworCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqbG9hZF9iYWxhbmNlX25leHRfZmFpcih2b2lkICphcmcpCisvKgorICogbW92ZV9vbmVfdGFzayB0cmllcyB0byBtb3ZlIGV4YWN0bHkgb25lIHRhc2sgZnJvbSBidXNpZXN0IHRvIHRoaXNfcnEsIGFzCisgKiBwYXJ0IG9mIGFjdGl2ZSBiYWxhbmNpbmcgb3BlcmF0aW9ucyB3aXRoaW4gImRvbWFpbiIuCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgorICovCitzdGF0aWMgaW50Cittb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCisJICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQogewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGFyZzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOworCXN0cnVjdCBjZnNfcnEgKmNmc19ycTsKKwlpbnQgcGlubmVkID0gMDsKIAotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihjZnNfcnEsIGNmc19ycS0+YmFsYW5jZV9pdGVyYXRvcik7CisJZm9yX2VhY2hfbGVhZl9jZnNfcnEoYnVzaWVzdCwgY2ZzX3JxKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmY2ZzX3JxLT50YXNrcywgc2UuZ3JvdXBfbm9kZSkgeworCisJCQlpZiAoIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsCisJCQkJCQlzZCwgaWRsZSwgJnBpbm5lZCkpCisJCQkJY29udGludWU7CisKKwkJCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7CisJCQkvKgorCQkJICogUmlnaHQgbm93LCB0aGlzIGlzIG9ubHkgdGhlIHNlY29uZCBwbGFjZSBwdWxsX3Rhc2soKQorCQkJICogaXMgY2FsbGVkLCBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkKKwkJCSAqIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4gaW5zaWRlIHB1bGxfdGFzaygpLgorCQkJICovCisJCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9nYWluZWRbaWRsZV0pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKLV9fbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbywKLQkJc3RydWN0IGNmc19ycSAqY2ZzX3JxKQorYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKKwkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgY2ZzX3JxICpidXNpZXN0X2Nmc19ycSkKIHsKLQlzdHJ1Y3QgcnFfaXRlcmF0b3IgY2ZzX3JxX2l0ZXJhdG9yOworCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDAsIHBpbm5lZCA9IDA7CisJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOwogCi0JY2ZzX3JxX2l0ZXJhdG9yLnN0YXJ0ID0gbG9hZF9iYWxhbmNlX3N0YXJ0X2ZhaXI7Ci0JY2ZzX3JxX2l0ZXJhdG9yLm5leHQgPSBsb2FkX2JhbGFuY2VfbmV4dF9mYWlyOwotCWNmc19ycV9pdGVyYXRvci5hcmcgPSBjZnNfcnE7CisJaWYgKG1heF9sb2FkX21vdmUgPT0gMCkKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCW1heF9sb2FkX21vdmUsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAotCQkJdGhpc19iZXN0X3ByaW8sICZjZnNfcnFfaXRlcmF0b3IpOworCXBpbm5lZCA9IDE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmJ1c2llc3RfY2ZzX3JxLT50YXNrcywgc2UuZ3JvdXBfbm9kZSkgeworCQlpZiAobG9vcHMrKyA+IHN5c2N0bF9zY2hlZF9ucl9taWdyYXRlKQorCQkJYnJlYWs7CisKKwkJaWYgKChwLT5zZS5sb2FkLndlaWdodCA+PiAxKSA+IHJlbV9sb2FkX21vdmUgfHwKKwkJICAgICFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpCisJCQljb250aW51ZTsKKworCQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOworCQlwdWxsZWQrKzsKKwkJcmVtX2xvYWRfbW92ZSAtPSBwLT5zZS5sb2FkLndlaWdodDsKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJCS8qCisJCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCisJCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQorCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KKwkJICovCisJCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvKgorCQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgdXAgdG8gdGhlIHByZXNjcmliZWQgYW1vdW50IG9mCisJCSAqIHdlaWdodGVkIGxvYWQuCisJCSAqLworCQlpZiAocmVtX2xvYWRfbW92ZSA8PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHAtPnByaW8gPCAqdGhpc19iZXN0X3ByaW8pCisJCQkqdGhpc19iZXN0X3ByaW8gPSBwLT5wcmlvOworCX0KK291dDoKKwkvKgorCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmUgb2Ygb25seSB0d28gcGxhY2VzIHB1bGxfdGFzaygpIGlzIGNhbGxlZCwKKwkgKiBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkgc3RhdHMgaGVyZSByYXRoZXIgdGhhbgorCSAqIGluc2lkZSBwdWxsX3Rhc2soKS4KKwkgKi8KKwlzY2hlZHN0YXRfYWRkKHNkLCBsYl9nYWluZWRbaWRsZV0sIHB1bGxlZCk7CisKKwlpZiAoYWxsX3Bpbm5lZCkKKwkJKmFsbF9waW5uZWQgPSBwaW5uZWQ7CisKKwlyZXR1cm4gbWF4X2xvYWRfbW92ZSAtIHJlbV9sb2FkX21vdmU7CiB9CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRApAQCAtMTg5Nyw5ICsyMDA1LDkgQEAKIAkJcmVtX2xvYWQgPSAodTY0KXJlbV9sb2FkX21vdmUgKiBidXNpZXN0X3dlaWdodDsKIAkJcmVtX2xvYWQgPSBkaXZfdTY0KHJlbV9sb2FkLCBidXNpZXN0X2hfbG9hZCArIDEpOwogCi0JCW1vdmVkX2xvYWQgPSBfX2xvYWRfYmFsYW5jZV9mYWlyKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQltb3ZlZF9sb2FkID0gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKIAkJCQlyZW1fbG9hZCwgc2QsIGlkbGUsIGFsbF9waW5uZWQsIHRoaXNfYmVzdF9wcmlvLAotCQkJCXRnLT5jZnNfcnFbYnVzaWVzdF9jcHVdKTsKKwkJCQlidXNpZXN0X2Nmc19ycSk7CiAKIAkJaWYgKCFtb3ZlZF9sb2FkKQogCQkJY29udGludWU7CkBAIC0xOTIyLDM1ICsyMDMwLDE1MDkgQEAKIAkJICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKQogewotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9mYWlyKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCXJldHVybiBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAogCQkJbWF4X2xvYWRfbW92ZSwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCiAJCQl0aGlzX2Jlc3RfcHJpbywgJmJ1c2llc3QtPmNmcyk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludAotbW92ZV9vbmVfdGFza19mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKKy8qCisgKiBtb3ZlX3Rhc2tzIHRyaWVzIHRvIG1vdmUgdXAgdG8gbWF4X2xvYWRfbW92ZSB3ZWlnaHRlZCBsb2FkIGZyb20gYnVzaWVzdCB0bworICogdGhpc19ycSwgYXMgcGFydCBvZiBhIGJhbGFuY2luZyBvcGVyYXRpb24gd2l0aGluIGRvbWFpbiAic2QiLgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KKyAqLworc3RhdGljIGludCBtb3ZlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKKwkJICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICAgICBpbnQgKmFsbF9waW5uZWQpCiB7Ci0Jc3RydWN0IGNmc19ycSAqYnVzeV9jZnNfcnE7Ci0Jc3RydWN0IHJxX2l0ZXJhdG9yIGNmc19ycV9pdGVyYXRvcjsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWRfbW92ZWQgPSAwLCBsb2FkX21vdmVkOworCWludCB0aGlzX2Jlc3RfcHJpbyA9IHRoaXNfcnEtPmN1cnItPnByaW87CiAKLQljZnNfcnFfaXRlcmF0b3Iuc3RhcnQgPSBsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcjsKLQljZnNfcnFfaXRlcmF0b3IubmV4dCA9IGxvYWRfYmFsYW5jZV9uZXh0X2ZhaXI7CisJZG8geworCQlsb2FkX21vdmVkID0gbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJCQkJbWF4X2xvYWRfbW92ZSAtIHRvdGFsX2xvYWRfbW92ZWQsCisJCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7CiAKLQlmb3JfZWFjaF9sZWFmX2Nmc19ycShidXNpZXN0LCBidXN5X2Nmc19ycSkgeworCQl0b3RhbF9sb2FkX21vdmVkICs9IGxvYWRfbW92ZWQ7CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAogCQkvKgotCQkgKiBwYXNzIGJ1c3lfY2ZzX3JxIGFyZ3VtZW50IGludG8KLQkJICogbG9hZF9iYWxhbmNlX1tzdGFydHxuZXh0XV9mYWlyIGl0ZXJhdG9ycworCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQorCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKKwkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiAJCSAqLwotCQljZnNfcnFfaXRlcmF0b3IuYXJnID0gYnVzeV9jZnNfcnE7Ci0JCWlmIChpdGVyX21vdmVfb25lX3Rhc2sodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsIHNkLCBpZGxlLAotCQkJCSAgICAgICAmY2ZzX3JxX2l0ZXJhdG9yKSkKLQkJICAgIHJldHVybiAxOworCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQorCQkJYnJlYWs7CisKKwkJaWYgKHJhd19zcGluX2lzX2NvbnRlbmRlZCgmdGhpc19ycS0+bG9jaykgfHwKKwkJCQlyYXdfc3Bpbl9pc19jb250ZW5kZWQoJmJ1c2llc3QtPmxvY2spKQorCQkJYnJlYWs7CisjZW5kaWYKKwl9IHdoaWxlIChsb2FkX21vdmVkICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKKworCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKK30KKworLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgorICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKi8KK3N0cnVjdCBzZF9sYl9zdGF0cyB7CisJc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLworCisJLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOworCisJLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2dyb3VwX2NhcGFjaXR5OworCisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgaW1iYWxhbmNlIGluIHRoaXMgc2QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2U7IC8qIElzIHBvd2Vyc2F2ZSBiYWxhbmNlIG5lZWRlZCBmb3IgdGhpcyBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbWluOyAvKiBMZWFzdCBsb2FkZWQgZ3JvdXAgaW4gc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX2xlYWRlcjsgLyogR3JvdXAgd2hpY2ggcmVsaWV2ZXMgZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBtaW5fbG9hZF9wZXJfdGFzazsgLyogbG9hZF9wZXJfdGFzayBpbiBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIGxlYWRlcl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX2xlYWRlciAqLworCXVuc2lnbmVkIGxvbmcgbWluX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbWluICovCisjZW5kaWYKK307CisKKy8qCisgKiBzZ19sYl9zdGF0cyAtIHN0YXRzIG9mIGEgc2NoZWRfZ3JvdXAgcmVxdWlyZWQgZm9yIGxvYWRfYmFsYW5jaW5nCisgKi8KK3N0cnVjdCBzZ19sYl9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsgLypBdmcgbG9hZCBhY3Jvc3MgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBncm91cF9sb2FkOyAvKiBUb3RhbCBsb2FkIG92ZXIgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZzsgLyogTnIgdGFza3MgcnVubmluZyBpbiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV93ZWlnaHRlZF9sb2FkOyAvKiBXZWlnaHRlZCBsb2FkIG9mIGdyb3VwJ3MgdGFza3MgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2NhcGFjaXR5OworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGFuIGltYmFsYW5jZSBpbiB0aGUgZ3JvdXAgPyAqLworfTsKKworLyoqCisgKiBncm91cF9maXJzdF9jcHUgLSBSZXR1cm5zIHRoZSBmaXJzdCBjcHUgaW4gdGhlIGNwdW1hc2sgb2YgYSBzY2hlZF9ncm91cC4KKyAqIEBncm91cDogVGhlIGdyb3VwIHdob3NlIGZpcnN0IGNwdSBpcyB0byBiZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3JvdXBfZmlyc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCit7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworfQorCisvKioKKyAqIGdldF9zZF9sb2FkX2lkeCAtIE9idGFpbiB0aGUgbG9hZCBpbmRleCBmb3IgYSBnaXZlbiBzY2hlZCBkb21haW4uCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgbG9hZF9pZHggaXMgdG8gYmUgb2J0YWluZWQuCisgKiBAaWRsZTogVGhlIElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgZm9yIHdob3NlIHNkIGxvYWRfaWN4IGlzIG9idGFpbmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfc2RfbG9hZF9pZHgoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBsb2FkX2lkeDsKKworCXN3aXRjaCAoaWRsZSkgeworCWNhc2UgQ1BVX05PVF9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9ORVdMWV9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJCWJyZWFrOwogCX0KIAorCXJldHVybiBsb2FkX2lkeDsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKy8qKgorICogaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gSW5pdGlhbGl6ZSBwb3dlciBzYXZpbmdzIHN0YXRpc3RpY3MgZm9yCisgKiB0aGUgZ2l2ZW4gc2NoZWRfZG9tYWluLCBkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQHNkOiBTY2hlZCBkb21haW4gd2hvc2UgcG93ZXItc2F2aW5ncyBzdGF0aXN0aWNzIGFyZSB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHNkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgYXQgd2hpY2ggd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJLyoKKwkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncworCSAqIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisJZWxzZSB7CisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IDA7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gVXBkYXRlIHRoZSBwb3dlciBzYXZpbmcgc3RhdHMgZm9yIGEKKyAqIHNjaGVkX2RvbWFpbiB3aGlsZSBwZXJmb3JtaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgYmVsb25naW5nIHRvIHRoZSBzY2hlZF9kb21haW4gdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhlIENQVSBmb3Igd2hpY2ggd2UncmUgcGVyZm9ybWluZworICogCQlsb2FkIGJhbGFuY2luZyA/CisgKiBAc2dzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCisJICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KKwkgKi8KKwlpZiAobG9jYWxfZ3JvdXAgJiYgKHNkcy0+dGhpc19ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJCQkhc2RzLT50aGlzX25yX3J1bm5pbmcpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisKKwkvKgorCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKKwkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKKwkgKi8KKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8CisJCXNncy0+c3VtX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkhc2dzLT5zdW1fbnJfcnVubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KKwkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAorCSAqIGZvciBzYXZpbmcgcG93ZXIKKwkgKi8KKwlpZiAoKHNncy0+c3VtX25yX3J1bm5pbmcgPCBzZHMtPm1pbl9ucl9ydW5uaW5nKSB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPm1pbl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApID4gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbWluKSkpIHsKKwkJc2RzLT5ncm91cF9taW4gPSBncm91cDsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJCXNkcy0+bWluX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8KKwkJCQkJCXNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cworCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAorCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgorCSAqLworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nICsgMSA+IHNncy0+Z3JvdXBfY2FwYWNpdHkpCisJCXJldHVybjsKKworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2RzLT5sZWFkZXJfbnJfcnVubmluZyB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApIDwgZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKSkpIHsKKwkJc2RzLT5ncm91cF9sZWFkZXIgPSBncm91cDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorfQorCisvKioKKyAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUgdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUKKyAqIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBFbHNlIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm4gMDsKKworCWlmIChzZHMtPnRoaXMgIT0gc2RzLT5ncm91cF9sZWFkZXIgfHwKKwkJCXNkcy0+Z3JvdXBfbGVhZGVyID09IHNkcy0+Z3JvdXBfbWluKQorCQlyZXR1cm4gMDsKKworCSppbWJhbGFuY2UgPSBzZHMtPm1pbl9sb2FkX3Blcl90YXNrOworCXNkcy0+YnVzaWVzdCA9IHNkcy0+Z3JvdXBfbWluOworCisJcmV0dXJuIDE7CisKK30KKyNlbHNlIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworCisKK3Vuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXJldHVybiBTQ0hFRF9MT0FEX1NDQUxFOworfQorCit1bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJcmV0dXJuIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJdW5zaWduZWQgbG9uZyBzbXRfZ2FpbiA9IHNkLT5zbXRfZ2FpbjsKKworCXNtdF9nYWluIC89IHdlaWdodDsKKworCXJldHVybiBzbXRfZ2FpbjsKK30KKwordW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJcmV0dXJuIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworfQorCit1bnNpZ25lZCBsb25nIHNjYWxlX3J0X3Bvd2VyKGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXU2NCB0b3RhbCwgYXZhaWxhYmxlOworCisJc2NoZWRfYXZnX3VwZGF0ZShycSk7CisKKwl0b3RhbCA9IHNjaGVkX2F2Z19wZXJpb2QoKSArIChycS0+Y2xvY2sgLSBycS0+YWdlX3N0YW1wKTsKKwlhdmFpbGFibGUgPSB0b3RhbCAtIHJxLT5ydF9hdmc7CisKKwlpZiAodW5saWtlbHkoKHM2NCl0b3RhbCA8IFNDSEVEX0xPQURfU0NBTEUpKQorCQl0b3RhbCA9IFNDSEVEX0xPQURfU0NBTEU7CisKKwl0b3RhbCA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKworCXJldHVybiBkaXZfdTY0KGF2YWlsYWJsZSwgdG90YWwpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKKwl1bnNpZ25lZCBsb25nIHBvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNkZyA9IHNkLT5ncm91cHM7CisKKwlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKKwkJcG93ZXIgKj0gYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCWVsc2UKKwkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCisJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlpZiAoKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSAmJiB3ZWlnaHQgPiAxKSB7CisJCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQorCQkJcG93ZXIgKj0gYXJjaF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7CisJCWVsc2UKKwkJCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworCisJCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCX0KKworCXBvd2VyICo9IHNjYWxlX3J0X3Bvd2VyKGNwdSk7CisJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlpZiAoIXBvd2VyKQorCQlwb3dlciA9IDE7CisKKwlzZGctPmNwdV9wb3dlciA9IHBvd2VyOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgKnNkZyA9IHNkLT5ncm91cHM7CisJdW5zaWduZWQgbG9uZyBwb3dlcjsKKworCWlmICghY2hpbGQpIHsKKwkJdXBkYXRlX2NwdV9wb3dlcihzZCwgY3B1KTsKKwkJcmV0dXJuOworCX0KKworCXBvd2VyID0gMDsKKworCWdyb3VwID0gY2hpbGQtPmdyb3VwczsKKwlkbyB7CisJCXBvd2VyICs9IGdyb3VwLT5jcHVfcG93ZXI7CisJCWdyb3VwID0gZ3JvdXAtPm5leHQ7CisJfSB3aGlsZSAoZ3JvdXAgIT0gY2hpbGQtPmdyb3Vwcyk7CisKKwlzZGctPmNwdV9wb3dlciA9IHBvd2VyOworfQorCisvKioKKyAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKKyAqIEBsb2FkX2lkeDogTG9hZCBpbmRleCBvZiBzY2hlZF9kb21haW4gb2YgdGhpc19jcHUgZm9yIGxvYWQgY2FsYy4KKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGlzX2NwdS4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZ3M6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50IGxvYWRfaWR4LCBpbnQgKnNkX2lkbGUsCisJCQlpbnQgbG9jYWxfZ3JvdXAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAorCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwl1bnNpZ25lZCBsb25nIGxvYWQsIG1heF9jcHVfbG9hZCwgbWluX2NwdV9sb2FkOworCWludCBpOworCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzayA9IDA7CisKKwlpZiAobG9jYWxfZ3JvdXApCisJCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKKworCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLworCW1heF9jcHVfbG9hZCA9IDA7CisJbWluX2NwdV9sb2FkID0gfjBVTDsKKworCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKKwkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKKworCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCisJCQkqc2RfaWRsZSA9IDA7CisKKwkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLworCQlpZiAobG9jYWxfZ3JvdXApIHsKKwkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKKwkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7CisJCQkJYmFsYW5jZV9jcHUgPSBpOworCQkJfQorCisJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOworCQl9IGVsc2UgeworCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKKwkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQorCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7CisJCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKKwkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOworCQl9CisKKwkJc2dzLT5ncm91cF9sb2FkICs9IGxvYWQ7CisJCXNncy0+c3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7CisJCXNncy0+c3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKworCX0KKworCS8qCisJICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCisJICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCisJICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCisJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgorCSAqLworCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCisJICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1KSB7CisJCSpiYWxhbmNlID0gMDsKKwkJcmV0dXJuOworCX0KKworCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgdGhpc19jcHUpOworCisJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KKwlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKKworCS8qCisJICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgorCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KKwkgKgorCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCisJICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCisJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKKwkgKiAgICAgIHRoZSBoaWVyYXJjaHk/CisJICovCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcpCisJCWF2Z19sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvIHNncy0+c3VtX25yX3J1bm5pbmc7CisKKwlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQorCQlzZ3MtPmdyb3VwX2ltYiA9IDE7CisKKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KKwkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Cit9CisKKy8qKgorICogdXBkYXRlX3NkX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgorICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKnNkX2lkbGUsCisJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAorCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7CisJc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKKwlpbnQgbG9hZF9pZHgsIHByZWZlcl9zaWJsaW5nID0gMDsKKworCWlmIChjaGlsZCAmJiBjaGlsZC0+ZmxhZ3MgJiBTRF9QUkVGRVJfU0lCTElORykKKwkJcHJlZmVyX3NpYmxpbmcgPSAxOworCisJaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOworCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKKworCWRvIHsKKwkJaW50IGxvY2FsX2dyb3VwOworCisJCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKKwkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKKwkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKKwkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAorCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKKworCQlpZiAobG9jYWxfZ3JvdXAgJiYgISgqYmFsYW5jZSkpCisJCQlyZXR1cm47CisKKwkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOworCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+Y3B1X3Bvd2VyOworCisJCS8qCisJCSAqIEluIGNhc2UgdGhlIGNoaWxkIGRvbWFpbiBwcmVmZXJzIHRhc2tzIGdvIHRvIHNpYmxpbmdzCisJCSAqIGZpcnN0LCBsb3dlciB0aGUgZ3JvdXAgY2FwYWNpdHkgdG8gb25lIHNvIHRoYXQgd2UnbGwgdHJ5CisJCSAqIGFuZCBtb3ZlIGFsbCB0aGUgZXhjZXNzIHRhc2tzIGF3YXkuCisJCSAqLworCQlpZiAocHJlZmVyX3NpYmxpbmcpCisJCQlzZ3MuZ3JvdXBfY2FwYWNpdHkgPSBtaW4oc2dzLmdyb3VwX2NhcGFjaXR5LCAxVUwpOworCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJc2RzLT50aGlzX2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPnRoaXMgPSBncm91cDsKKwkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgorCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAorCQkJCXNncy5ncm91cF9pbWIpKSB7CisJCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7CisJCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+YnVzaWVzdF9ncm91cF9jYXBhY2l0eSA9IHNncy5ncm91cF9jYXBhY2l0eTsKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOworCQl9CisKKwkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOworfQorCisvKioKKyAqIGZpeF9zbWFsbF9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIG1pbm9yIGltYmFsYW5jZSB0aGF0IGV4aXN0cworICoJCQlhbW9uZ3N0IHRoZSBncm91cHMgb2YgYSBzY2hlZF9kb21haW4sIGR1cmluZworICoJCQlsb2FkIGJhbGFuY2luZy4KKyAqIEBzZHM6IFN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBhdCB3aG9zZSBzY2hlZF9kb21haW4gd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2UuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZml4X3NtYWxsX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgcHdyX25vdyA9IDAsIHB3cl9tb3ZlID0gMDsKKwl1bnNpZ25lZCBpbnQgaW1ibiA9IDI7CisJdW5zaWduZWQgbG9uZyBzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrOworCisJaWYgKHNkcy0+dGhpc19ucl9ydW5uaW5nKSB7CisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrIC89IHNkcy0+dGhpc19ucl9ydW5uaW5nOworCQlpZiAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPgorCQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrKQorCQkJaW1ibiA9IDE7CisJfSBlbHNlCisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0KKwkJCWNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7CisKKwlzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sKKwkJCQkJCSAqIFNDSEVEX0xPQURfU0NBTEU7CisJc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayAvPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKworCWlmIChzZHMtPm1heF9sb2FkIC0gc2RzLT50aGlzX2xvYWQgKyBzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrID49CisJCQkoc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayAqIGltYm4pKSB7CisJCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKKwkgKiBob3dldmVyIHdlIG1heSBiZSBhYmxlIHRvIGluY3JlYXNlIHRvdGFsIENQVSBwb3dlciB1c2VkIGJ5CisJICogbW92aW5nIHRoZW0uCisJICovCisKKwlwd3Jfbm93ICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCk7CisJcHdyX25vdyArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKKwlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCisJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLworCQlzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKwlpZiAoc2RzLT5tYXhfbG9hZCA+IHRtcCkKKwkJcHdyX21vdmUgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkIC0gdG1wKTsKKworCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCisJaWYgKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciA8CisJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKKwkJdG1wID0gKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcikgLworCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7CisJZWxzZQorCQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCisJCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKKwlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKKwlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KKwlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQorCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Cit9CisKKy8qKgorICogY2FsY3VsYXRlX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGltYmFsYW5jZSBwcmVzZW50IHdpdGhpbiB0aGUKKyAqCQkJIGdyb3VwcyBvZiBhIGdpdmVuIHNjaGVkX2RvbWFpbiBkdXJpbmcgbG9hZCBiYWxhbmNlLgorICogQHNkczogc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGN1cnJlbnRseSBsb2FkIGJhbGFuY2UgaXMgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVGhlIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgdGhpc19jcHUsCisJCXVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9wdWxsLCBsb2FkX2Fib3ZlX2NhcGFjaXR5ID0gfjBVTDsKKworCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrIC89IHNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nOworCWlmIChzZHMtPmdyb3VwX2ltYikgeworCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9CisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+YXZnX2xvYWQpOworCX0KKworCS8qCisJICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKKwkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93CisJICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKKwkgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCA8IHNkcy0+YXZnX2xvYWQpIHsKKwkJKmltYmFsYW5jZSA9IDA7CisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJfQorCisJaWYgKCFzZHMtPmdyb3VwX2ltYikgeworCQkvKgorCQkgKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZS4KKwkJICovCisJCWxvYWRfYWJvdmVfY2FwYWNpdHkgPSAoc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgLQorCQkJCQkJc2RzLT5idXNpZXN0X2dyb3VwX2NhcGFjaXR5KTsKKworCQlsb2FkX2Fib3ZlX2NhcGFjaXR5ICo9IChTQ0hFRF9MT0FEX1NDQUxFICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKwkJbG9hZF9hYm92ZV9jYXBhY2l0eSAvPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKwl9CisKKwkvKgorCSAqIFdlJ3JlIHRyeWluZyB0byBnZXQgYWxsIHRoZSBjcHVzIHRvIHRoZSBhdmVyYWdlX2xvYWQsIHNvIHdlIGRvbid0CisJICogd2FudCB0byBwdXNoIG91cnNlbHZlcyBhYm92ZSB0aGUgYXZlcmFnZSBsb2FkLCBub3IgZG8gd2Ugd2lzaCB0bworCSAqIHJlZHVjZSB0aGUgbWF4IGxvYWRlZCBjcHUgYmVsb3cgdGhlIGF2ZXJhZ2UgbG9hZC4gQXQgdGhlIHNhbWUgdGltZSwKKwkgKiB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gcmVkdWNlIHRoZSBncm91cCBsb2FkIGJlbG93IHRoZSBncm91cCBjYXBhY2l0eQorCSAqIChzbyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgcG93ZXItc2F2aW5ncyBwb2xpY2llcyBldGMpLiBUaHVzIHdlIGxvb2sKKwkgKiBmb3IgdGhlIG1pbmltdW0gcG9zc2libGUgaW1iYWxhbmNlLgorCSAqIEJlIGNhcmVmdWwgb2YgbmVnYXRpdmUgbnVtYmVycyBhcyB0aGV5J2xsIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcworCSAqIHdpdGggdW5zaWduZWQgbG9uZ3MuCisJICovCisJbWF4X3B1bGwgPSBtaW4oc2RzLT5tYXhfbG9hZCAtIHNkcy0+YXZnX2xvYWQsIGxvYWRfYWJvdmVfY2FwYWNpdHkpOworCisJLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KKwkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCisJCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5jcHVfcG93ZXIpCisJCQkvIFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKgorCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKKwkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCisJICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQorCSAqIG1vdmVkCisJICovCisJaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKworfQorLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgorICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAorICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKKyAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKKyAqIHN1Y2ggYSBncm91cCBleGlzdHMuCisgKgorICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKKyAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KKyAqCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKKyAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KKyAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCisgKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCisgKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1CisgKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KKyAqCisgKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCisgKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCisgKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKKyAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgorZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCisJCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKK3sKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgc2RzOworCisJbWVtc2V0KCZzZHMsIDAsIHNpemVvZihzZHMpKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgdmFyaW91cyBzdGF0aXN0aWNzIHJlbGF2ZW50IGZvciBsb2FkIGJhbGFuY2luZyBhdAorCSAqIHRoaXMgbGV2ZWwuCisJICovCisJdXBkYXRlX3NkX2xiX3N0YXRzKHNkLCB0aGlzX2NwdSwgaWRsZSwgc2RfaWRsZSwgY3B1cywKKwkJCQkJYmFsYW5jZSwgJnNkcyk7CisKKwkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KKwkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCisJICogICAgYXQgdGhpcyBsZXZlbC4KKwkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgorCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCisJICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCisJICogICAgc2NoZWRfZG9tYWluLgorCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCisJICovCisJaWYgKCEoKmJhbGFuY2UpKQorCQlnb3RvIHJldDsKKworCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7CisKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJLyogTG9va3MgbGlrZSB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIENvbXB1dGUgaXQgKi8KKwljYWxjdWxhdGVfaW1iYWxhbmNlKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCXJldHVybiBzZHMuYnVzaWVzdDsKKworb3V0X2JhbGFuY2VkOgorCS8qCisJICogVGhlcmUgaXMgbm8gb2J2aW91cyBpbWJhbGFuY2UuIEJ1dCBjaGVjayBpZiB3ZSBjYW4gZG8gc29tZSBiYWxhbmNpbmcKKwkgKiB0byBzYXZlIHBvd2VyLgorCSAqLworCWlmIChjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSkpCisJCXJldHVybiBzZHMuYnVzaWVzdDsKK3JldDoKKwkqaW1iYWxhbmNlID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcnEgKgorZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMpCit7CisJc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTCwgKnJxOworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQgPSAwOworCWludCBpOworCisJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKSB7CisJCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBwb3dlcl9vZihpKTsKKwkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IERJVl9ST1VORF9DTE9TRVNUKHBvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKKwkJdW5zaWduZWQgbG9uZyB3bDsKKworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1cykpCisJCQljb250aW51ZTsKKworCQlycSA9IGNwdV9ycShpKTsKKwkJd2wgPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOworCisJCS8qCisJCSAqIFdoZW4gY29tcGFyaW5nIHdpdGggaW1iYWxhbmNlLCB1c2Ugd2VpZ2h0ZWRfY3B1bG9hZCgpCisJCSAqIHdoaWNoIGlzIG5vdCBzY2FsZWQgd2l0aCB0aGUgY3B1IHBvd2VyLgorCQkgKi8KKwkJaWYgKGNhcGFjaXR5ICYmIHJxLT5ucl9ydW5uaW5nID09IDEgJiYgd2wgPiBpbWJhbGFuY2UpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgdGhlIGxvYWQgY29tcGFyaXNvbnMgd2l0aCB0aGUgb3RoZXIgY3B1J3MsIGNvbnNpZGVyCisJCSAqIHRoZSB3ZWlnaHRlZF9jcHVsb2FkKCkgc2NhbGVkIHdpdGggdGhlIGNwdSBwb3dlciwgc28gdGhhdAorCQkgKiB0aGUgbG9hZCBjYW4gYmUgbW92ZWQgYXdheSBmcm9tIHRoZSBjcHUgdGhhdCBpcyBwb3RlbnRpYWxseQorCQkgKiBydW5uaW5nIGF0IGEgbG93ZXIgY2FwYWNpdHkuCisJCSAqLworCQl3bCA9ICh3bCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gcG93ZXI7CisKKwkJaWYgKHdsID4gbWF4X2xvYWQpIHsKKwkJCW1heF9sb2FkID0gd2w7CisJCQlidXNpZXN0ID0gcnE7CisJCX0KKwl9CisKKwlyZXR1cm4gYnVzaWVzdDsKK30KKworLyoKKyAqIE1heCBiYWNrb2ZmIGlmIHdlIGVuY291bnRlciBwaW5uZWQgdGFza3MuIFByZXR0eSBhcmJpdHJhcnkgdmFsdWUsIGJ1dAorICogc28gbG9uZyBhcyBpdCBpcyBsYXJnZSBlbm91Z2guCisgKi8KKyNkZWZpbmUgTUFYX1BJTk5FRF9JTlRFUlZBTAk1MTIKKworLyogV29ya2luZyBjcHVtYXNrIGZvciBsb2FkX2JhbGFuY2UgYW5kIGxvYWRfYmFsYW5jZV9uZXdpZGxlLiAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKKworc3RhdGljIGludCBuZWVkX2FjdGl2ZV9iYWxhbmNlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgc2RfaWRsZSwgaW50IGlkbGUpCit7CisJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpIHsKKwkJLyoKKwkJICogVGhlIG9ubHkgdGFzayBydW5uaW5nIGluIGEgbm9uLWlkbGUgY3B1IGNhbiBiZSBtb3ZlZCB0byB0aGlzCisJCSAqIGNwdSBpbiBhbiBhdHRlbXB0IHRvIGNvbXBsZXRlbHkgZnJlZXVwIHRoZSBvdGhlciBDUFUKKwkJICogcGFja2FnZS4KKwkJICoKKwkJICogVGhlIHBhY2thZ2UgcG93ZXIgc2F2aW5nIGxvZ2ljIGNvbWVzIGZyb20KKwkJICogZmluZF9idXNpZXN0X2dyb3VwKCkuIElmIHRoZXJlIGFyZSBubyBpbWJhbGFuY2UsIHRoZW4KKwkJICogZl9iX2coKSB3aWxsIHJldHVybiBOVUxMLiBIb3dldmVyIHdoZW4gc2NoZWRfbWM9ezEsMn0gdGhlbgorCQkgKiBmX2JfZygpIHdpbGwgc2VsZWN0IGEgZ3JvdXAgZnJvbSB3aGljaCBhIHJ1bm5pbmcgdGFzayBtYXkgYmUKKwkJICogcHVsbGVkIHRvIHRoaXMgY3B1IGluIG9yZGVyIHRvIG1ha2UgdGhlIG90aGVyIHBhY2thZ2UgaWRsZS4KKwkJICogSWYgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gbWFrZSBhIHBhY2thZ2UgaWRsZSBhbmQgaWYKKwkJICogdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwgYW5kIG5vCisJCSAqIGFjdGlvbiB3aWxsIGJlIHRha2VuIGluIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkuCisJCSAqCisJCSAqIFVuZGVyIG5vcm1hbCB0YXNrIHB1bGwgb3BlcmF0aW9uIGR1ZSB0byBpbWJhbGFuY2UsIHRoZXJlCisJCSAqIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSB0YXNrIGluIHRoZSBzb3VyY2UgcnVuIHF1ZXVlIGFuZAorCQkgKiBtb3ZlX3Rhc2tzKCkgd2lsbCBzdWNjZWVkLiAgbGRfbW92ZWQgd2lsbCBiZSB0cnVlIGFuZCB0aGlzCisJCSAqIGFjdGl2ZSBiYWxhbmNlIGNvZGUgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLgorCQkgKi8KKwkJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJCXJldHVybiAwOworCisJCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzIDwgUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHVubGlrZWx5KHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzIpOworfQorCisvKgorICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQorICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW50IGxvYWRfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwKKwkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJCWludCAqYmFsYW5jZSkKK3sKKwlpbnQgbGRfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7CisJc3RydWN0IHJxICpidXNpZXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKKworCWNwdW1hc2tfY29weShjcHVzLCBjcHVfYWN0aXZlX21hc2spOworCisJLyoKKwkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCisJICogc2libGluZyBjYW4gcGljayB1cCBsb2FkIGlycmVzcGVjdGl2ZSBvZiBidXN5IHNpYmxpbmdzLiBJbiB0aGlzIGNhc2UsCisJICogbGV0IHRoZSBzdGF0ZSBvZiBpZGxlIHNpYmxpbmcgcGVyY29sYXRlIHVwIGFzIENQVV9JRExFLCBpbnN0ZWFkIG9mCisJICogcG9ydHJheWluZyBpdCBhcyBDUFVfTk9UX0lETEUuCisJICovCisJaWYgKGlkbGUgIT0gQ1BVX05PVF9JRExFICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZF9pZGxlID0gMTsKKworCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W2lkbGVdKTsKKworcmVkbzoKKwl1cGRhdGVfc2hhcmVzKHNkKTsKKwlncm91cCA9IGZpbmRfYnVzaWVzdF9ncm91cChzZCwgdGhpc19jcHUsICZpbWJhbGFuY2UsIGlkbGUsICZzZF9pZGxlLAorCQkJCSAgIGNwdXMsIGJhbGFuY2UpOworCisJaWYgKCpiYWxhbmNlID09IDApCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKCFncm91cCkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW2lkbGVdKTsKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisJfQorCisJYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKKwlpZiAoIWJ1c2llc3QpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7CisJCWdvdG8gb3V0X2JhbGFuY2VkOworCX0KKworCUJVR19PTihidXNpZXN0ID09IHRoaXNfcnEpOworCisJc2NoZWRzdGF0X2FkZChzZCwgbGJfaW1iYWxhbmNlW2lkbGVdLCBpbWJhbGFuY2UpOworCisJbGRfbW92ZWQgPSAwOworCWlmIChidXNpZXN0LT5ucl9ydW5uaW5nID4gMSkgeworCQkvKgorCQkgKiBBdHRlbXB0IHRvIG1vdmUgdGFza3MuIElmIGZpbmRfYnVzaWVzdF9ncm91cCBoYXMgZm91bmQKKwkJICogYW4gaW1iYWxhbmNlIGJ1dCBidXNpZXN0LT5ucl9ydW5uaW5nIDw9IDEsIHRoZSBncm91cCBpcworCQkgKiBzdGlsbCB1bmJhbGFuY2VkLiBsZF9tb3ZlZCBzaW1wbHkgc3RheXMgemVybywgc28gaXQgaXMKKwkJICogY29ycmVjdGx5IHRyZWF0ZWQgYXMgYW4gaW1iYWxhbmNlLgorCQkgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKwkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQkJCSAgICAgIGltYmFsYW5jZSwgc2QsIGlkbGUsICZhbGxfcGlubmVkKTsKKwkJZG91YmxlX3JxX3VubG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCS8qCisJCSAqIHNvbWUgb3RoZXIgY3B1IGRpZCB0aGUgbG9hZCBiYWxhbmNlIGZvciB1cy4KKwkJICovCisJCWlmIChsZF9tb3ZlZCAmJiB0aGlzX2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQlyZXNjaGVkX2NwdSh0aGlzX2NwdSk7CisKKwkJLyogQWxsIHRhc2tzIG9uIHRoaXMgcnVucXVldWUgd2VyZSBwaW5uZWQgYnkgQ1BVIGFmZmluaXR5ICovCisJCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgeworCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKKwkJCWlmICghY3B1bWFza19lbXB0eShjcHVzKSkKKwkJCQlnb3RvIHJlZG87CisJCQlnb3RvIG91dF9iYWxhbmNlZDsKKwkJfQorCX0KKworCWlmICghbGRfbW92ZWQpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW2lkbGVdKTsKKwkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkKys7CisKKwkJaWYgKG5lZWRfYWN0aXZlX2JhbGFuY2Uoc2QsIHNkX2lkbGUsIGlkbGUpKSB7CisJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKKworCQkJLyogZG9uJ3Qga2ljayB0aGUgbWlncmF0aW9uX3RocmVhZCwgaWYgdGhlIGN1cnIKKwkJCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKKwkJCSAqLworCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAorCQkJCQkgICAgICAmYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgeworCQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLAorCQkJCQkJCSAgICBmbGFncyk7CisJCQkJYWxsX3Bpbm5lZCA9IDE7CisJCQkJZ290byBvdXRfb25lX3Bpbm5lZDsKKwkJCX0KKworCQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgeworCQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKKwkJCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OworCQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKKwkJCX0KKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CisJCQlpZiAoYWN0aXZlX2JhbGFuY2UpCisJCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOworCisJCQkvKgorCQkJICogV2UndmUga2lja2VkIGFjdGl2ZSBiYWxhbmNpbmcsIHJlc2V0IHRoZSBmYWlsdXJlCisJCQkgKiBjb3VudGVyLgorCQkJICovCisJCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSBzZC0+Y2FjaGVfbmljZV90cmllcysxOworCQl9CisJfSBlbHNlCisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7CisKKwlpZiAobGlrZWx5KCFhY3RpdmVfYmFsYW5jZSkpIHsKKwkJLyogV2Ugd2VyZSB1bmJhbGFuY2VkLCBzbyByZXNldCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCisJCXNkLT5iYWxhbmNlX2ludGVydmFsID0gc2QtPm1pbl9pbnRlcnZhbDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB3ZSd2ZSBiZWd1biBhY3RpdmUgYmFsYW5jaW5nLCBzdGFydCB0byBiYWNrIG9mZi4gVGhpcworCQkgKiBjYXNlIG1heSBub3QgYmUgY292ZXJlZCBieSB0aGUgYWxsX3Bpbm5lZCBsb2dpYyBpZiB0aGVyZQorCQkgKiBpcyBvbmx5IDEgdGFzayBvbiB0aGUgYnVzeSBydW5xdWV1ZSAoYmVjYXVzZSB3ZSBkb24ndCBjYWxsCisJCSAqIG1vdmVfdGFza3MpLgorCQkgKi8KKwkJaWYgKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkKKwkJCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7CisJfQorCisJaWYgKCFsZF9tb3ZlZCAmJiAhc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgorCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJbGRfbW92ZWQgPSAtMTsKKworCWdvdG8gb3V0OworCitvdXRfYmFsYW5jZWQ6CisJc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbaWRsZV0pOworCisJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKKworb3V0X29uZV9waW5uZWQ6CisJLyogdHVuZSB1cCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCisJaWYgKChhbGxfcGlubmVkICYmIHNkLT5iYWxhbmNlX2ludGVydmFsIDwgTUFYX1BJTk5FRF9JTlRFUlZBTCkgfHwKKwkJCShzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpKQorCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOworCisJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlsZF9tb3ZlZCA9IC0xOworCWVsc2UKKwkJbGRfbW92ZWQgPSAwOworb3V0OgorCWlmIChsZF9tb3ZlZCkKKwkJdXBkYXRlX3NoYXJlcyhzZCk7CisJcmV0dXJuIGxkX21vdmVkOworfQorCisvKgorICogaWRsZV9iYWxhbmNlIGlzIGNhbGxlZCBieSBzY2hlZHVsZSgpIGlmIHRoaXNfY3B1IGlzIGFib3V0IHRvIGJlY29tZQorICogaWRsZS4gQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG90aGVyIENQVXMuCisgKi8KK3N0YXRpYyB2b2lkIGlkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlpbnQgcHVsbGVkX3Rhc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIEhaOworCisJdGhpc19ycS0+aWRsZV9zdGFtcCA9IHRoaXNfcnEtPmNsb2NrOworCisJaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIERyb3AgdGhlIHJxLT5sb2NrLCBidXQga2VlcCBJUlEvcHJlZW1wdCBkaXNhYmxlZC4KKwkgKi8KKwlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOworCisJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgeworCQl1bnNpZ25lZCBsb25nIGludGVydmFsOworCQlpbnQgYmFsYW5jZSA9IDE7CisKKwkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpIHsKKwkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLworCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsCisJCQkJCQkgICBzZCwgQ1BVX05FV0xZX0lETEUsICZiYWxhbmNlKTsKKwkJfQorCisJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7CisJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKKwkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKwkJaWYgKHB1bGxlZF90YXNrKSB7CisJCQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF3X3NwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7CisKKwlpZiAocHVsbGVkX3Rhc2sgfHwgdGltZV9hZnRlcihqaWZmaWVzLCB0aGlzX3JxLT5uZXh0X2JhbGFuY2UpKSB7CisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyBpZGxlLiBuZXh0X2JhbGFuY2UgbWF5IGJlIHNldCBiYXNlZCBvbgorCQkgKiBhIGJ1c3kgcHJvY2Vzc29yLiBTbyByZXNldCBuZXh0X2JhbGFuY2UuCisJCSAqLworCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CisJfQorfQorCisvKgorICogYWN0aXZlX2xvYWRfYmFsYW5jZSBpcyBydW4gYnkgbWlncmF0aW9uIHRocmVhZHMuIEl0IHB1c2hlcyBydW5uaW5nIHRhc2tzCisgKiBvZmYgdGhlIGJ1c2llc3QgQ1BVIG9udG8gaWRsZSBDUFVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdCAxIHRhc2sgdG8gYmUKKyAqIHJ1bm5pbmcgb24gZWFjaCBwaHlzaWNhbCBDUFUgd2hlcmUgcG9zc2libGUsIGFuZCBhdm9pZHMgcGh5c2ljYWwgLworICogbG9naWNhbCBpbWJhbGFuY2VzLgorICoKKyAqIENhbGxlZCB3aXRoIGJ1c2llc3RfcnEgbG9ja2VkLgorICovCitzdGF0aWMgdm9pZCBhY3RpdmVfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqYnVzaWVzdF9ycSwgaW50IGJ1c2llc3RfY3B1KQoreworCWludCB0YXJnZXRfY3B1ID0gYnVzaWVzdF9ycS0+cHVzaF9jcHU7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJc3RydWN0IHJxICp0YXJnZXRfcnE7CisKKwkvKiBJcyB0aGVyZSBhbnkgdGFzayB0byBtb3ZlPyAqLworCWlmIChidXNpZXN0X3JxLT5ucl9ydW5uaW5nIDw9IDEpCisJCXJldHVybjsKKworCXRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTsKKworCS8qCisJICogVGhpcyBjb25kaXRpb24gaXMgImltcG9zc2libGUiLCBpZiBpdCBvY2N1cnMKKwkgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieQorCSAqIEJqb3JuIEhlbGdhYXMgb24gYSAxMjgtY3B1IHNldHVwLgorCSAqLworCUJVR19PTihidXNpZXN0X3JxID09IHRhcmdldF9ycSk7CisKKwkvKiBtb3ZlIGEgdGFzayBmcm9tIGJ1c2llc3RfcnEgdG8gdGFyZ2V0X3JxICovCisJZG91YmxlX2xvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOworCXVwZGF0ZV9ycV9jbG9jayhidXNpZXN0X3JxKTsKKwl1cGRhdGVfcnFfY2xvY2sodGFyZ2V0X3JxKTsKKworCS8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqLworCWZvcl9lYWNoX2RvbWFpbih0YXJnZXRfY3B1LCBzZCkgeworCQlpZiAoKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkgJiYKKwkJICAgIGNwdW1hc2tfdGVzdF9jcHUoYnVzaWVzdF9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCisJCQkJYnJlYWs7CisJfQorCisJaWYgKGxpa2VseShzZCkpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2NvdW50KTsKKworCQlpZiAobW92ZV9vbmVfdGFzayh0YXJnZXRfcnEsIHRhcmdldF9jcHUsIGJ1c2llc3RfcnEsCisJCQkJICBzZCwgQ1BVX0lETEUpKQorCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX3B1c2hlZCk7CisJCWVsc2UKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9mYWlsZWQpOworCX0KKwlkb3VibGVfdW5sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKK30KKworI2lmZGVmIENPTkZJR19OT19IWgorc3RhdGljIHN0cnVjdCB7CisJYXRvbWljX3QgbG9hZF9iYWxhbmNlcjsKKwljcHVtYXNrX3Zhcl90IGNwdV9tYXNrOworCWNwdW1hc2tfdmFyX3QgaWxiX2dycF9ub2h6X21hc2s7Cit9IG5vaHogX19fX2NhY2hlbGluZV9hbGlnbmVkID0geworCS5sb2FkX2JhbGFuY2VyID0gQVRPTUlDX0lOSVQoLTEpLAorfTsKKworaW50IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIodm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorLyoqCisgKiBsb3dlc3RfZmxhZ19kb21haW4gLSBSZXR1cm4gbG93ZXN0IHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGZsYWcuCisgKiBAY3B1OglUaGUgY3B1IHdob3NlIGxvd2VzdCBsZXZlbCBvZiBzY2hlZCBkb21haW4gaXMgdG8KKyAqCQliZSByZXR1cm5lZC4KKyAqIEBmbGFnOglUaGUgZmxhZyB0byBjaGVjayBmb3IgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4KKyAqCQlmb3IgdGhlIGdpdmVuIGNwdS4KKyAqCisgKiBSZXR1cm5zIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIG9mIGEgY3B1IHdoaWNoIGNvbnRhaW5zIHRoZSBnaXZlbiBmbGFnLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9kb21haW4gKmxvd2VzdF9mbGFnX2RvbWFpbihpbnQgY3B1LCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKQorCQlpZiAoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gc2Q7Cit9CisKKy8qKgorICogZm9yX2VhY2hfZmxhZ19kb21haW4gLSBJdGVyYXRlcyBvdmVyIHNjaGVkX2RvbWFpbnMgY29udGFpbmluZyB0aGUgZmxhZy4KKyAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgZG9tYWlucyB3ZSdyZSBpdGVyYXRpbmcgb3Zlci4KKyAqIEBzZDoJCXZhcmlhYmxlIGhvbGRpbmcgdGhlIHZhbHVlIG9mIHRoZSBwb3dlcl9zYXZpbmdzX3NkCisgKgkJZm9yIGNwdS4KKyAqIEBmbGFnOglUaGUgZmxhZyB0byBmaWx0ZXIgdGhlIHNjaGVkX2RvbWFpbnMgdG8gYmUgaXRlcmF0ZWQuCisgKgorICogSXRlcmF0ZXMgb3ZlciBhbGwgdGhlIHNjaGVkdWxlciBkb21haW5zIGZvciBhIGdpdmVuIGNwdSB0aGF0IGhhcyB0aGUgJ2ZsYWcnCisgKiBzZXQsIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gdG8gdGhlIGhpZ2hlc3QuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgZmxhZykgXAorCWZvciAoc2QgPSBsb3dlc3RfZmxhZ19kb21haW4oY3B1LCBmbGFnKTsgXAorCQkoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKTsgc2QgPSBzZC0+cGFyZW50KQorCisvKioKKyAqIGlzX3NlbWlfaWRsZV9ncm91cCAtIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlLgorICogQGlsYl9ncm91cDoJZ3JvdXAgdG8gYmUgY2hlY2tlZCBmb3Igc2VtaS1pZGxlbmVzcworICoKKyAqIFJldHVybnM6CTEgaWYgdGhlIGdyb3VwIGlzIHNlbWktaWRsZS4gMCBvdGhlcndpc2UuCisgKgorICogV2UgZGVmaW5lIGEgc2NoZWRfZ3JvdXAgdG8gYmUgc2VtaSBpZGxlIGlmIGl0IGhhcyBhdGxlYXN0IG9uZSBpZGxlLUNQVQorICogYW5kIGF0bGVhc3Qgb25lIG5vbi1pZGxlIENQVS4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBnaXZlbgorICogc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIG9yIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfc2VtaV9pZGxlX2dyb3VwKHN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwKQoreworCWNwdW1hc2tfYW5kKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIG5vaHouY3B1X21hc2ssCisJCQkJCXNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSk7CisKKwkvKgorCSAqIEEgc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIHdoZW4gaXQgaGFzIGF0bGVhc3Qgb25lIGJ1c3kgY3B1CisJICogYW5kIGF0bGVhc3Qgb25lIGlkbGUgY3B1LgorCSAqLworCWlmIChjcHVtYXNrX2VtcHR5KG5vaHouaWxiX2dycF9ub2h6X21hc2spKQorCQlyZXR1cm4gMDsKKworCWlmIChjcHVtYXNrX2VxdWFsKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIHNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisvKioKKyAqIGZpbmRfbmV3X2lsYiAtIEZpbmRzIHRoZSBvcHRpbXVtIGlkbGUgbG9hZCBiYWxhbmNlciBmb3Igbm9taW5hdGlvbi4KKyAqIEBjcHU6CVRoZSBjcHUgd2hpY2ggaXMgbm9taW5hdGluZyBhIG5ldyBpZGxlX2xvYWRfYmFsYW5jZXIuCisgKgorICogUmV0dXJuczoJUmV0dXJucyB0aGUgaWQgb2YgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBpZiBpdCBleGlzdHMsCisgKgkJRWxzZSwgcmV0dXJucyA+PSBucl9jcHVfaWRzLgorICoKKyAqIFRoaXMgYWxnb3JpdGhtIHBpY2tzIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgc3VjaCB0aGF0IGl0IGJlbG9uZ3MgdG8gYQorICogc2VtaS1pZGxlIHBvd2Vyc2F2aW5ncyBzY2hlZF9kb21haW4uIFRoZSBpZGVhIGlzIHRvIHRyeSBhbmQgYXZvaWQKKyAqIGNvbXBsZXRlbHkgaWRsZSBwYWNrYWdlcy9jb3JlcyBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBpZGxlIGxvYWQgYmFsYW5jaW5nCisgKiB3aGVuIHRoZXJlIGFyZSBvdGhlciBpZGxlIGNwdSdzIHdoaWNoIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciB0aGF0IGpvYi4KKyAqLworc3RhdGljIGludCBmaW5kX25ld19pbGIoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cDsKKworCS8qCisJICogSGF2ZSBpZGxlIGxvYWQgYmFsYW5jZXIgc2VsZWN0aW9uIGZyb20gc2VtaS1pZGxlIHBhY2thZ2VzIG9ubHkKKwkgKiB3aGVuIHBvd2VyLWF3YXJlIGxvYWQgYmFsYW5jaW5nIGlzIGVuYWJsZWQKKwkgKi8KKwlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKKwkJZ290byBvdXRfZG9uZTsKKworCS8qCisJICogT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZW4gd2UgaGF2ZSBubyBpZGxlIENQVXMgb3Igb25seSBvbmUKKwkgKiBpZGxlIENQVS4gRG9uJ3Qgd2FsayB0aGUgc2NoZWRfZG9tYWluIGhpZXJhcmNoeSBpbiBzdWNoIGNhc2VzCisJICovCisJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spIDwgMikKKwkJZ290byBvdXRfZG9uZTsKKworCWZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSB7CisJCWlsYl9ncm91cCA9IHNkLT5ncm91cHM7CisKKwkJZG8geworCQkJaWYgKGlzX3NlbWlfaWRsZV9ncm91cChpbGJfZ3JvdXApKQorCQkJCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouaWxiX2dycF9ub2h6X21hc2spOworCisJCQlpbGJfZ3JvdXAgPSBpbGJfZ3JvdXAtPm5leHQ7CisKKwkJfSB3aGlsZSAoaWxiX2dyb3VwICE9IHNkLT5ncm91cHMpOworCX0KKworb3V0X2RvbmU6CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Cit9CisjZWxzZSAvKiAgKENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UKSAqLworc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXdfaWxiKGludCBjYWxsX2NwdSkKK3sKKwlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKK30KKyNlbmRpZgorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgdHJ5IHRvIG5vbWluYXRlIHRoZSBpbGIgKGlkbGUgbG9hZCBiYWxhbmNpbmcpCisgKiBvd25lciBhbW9uZyB0aGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUgc3RvcHBlZC4gaWxiIG93bmVyIHdpbGwgZG8gdGhlIGlkbGUKKyAqIGxvYWQgYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiBhbGwgdGhvc2UgY3B1cy4gSWYgYWxsIHRoZSBjcHVzIGluIHRoZSBzeXN0ZW0KKyAqIGdvIGludG8gdGhpcyB0aWNrbGVzcyBtb2RlLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gaWxiIG93bmVyIChhcyB0aGVyZSBpcworICogbm8gbmVlZCBmb3Igb25lKSBhbmQgYWxsIHRoZSBjcHVzIHdpbGwgc2xlZXAgdGlsbCB0aGUgbmV4dCB3YWtldXAgZXZlbnQKKyAqIGFycml2ZXMuLi4KKyAqCisgKiBGb3IgdGhlIGlsYiBvd25lciwgdGljayBpcyBub3Qgc3RvcHBlZC4gQW5kIHRoaXMgdGljayB3aWxsIGJlIHVzZWQKKyAqIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLiBpbGIgb3duZXIgd2lsbCBzdGlsbCBiZSBwYXJ0IG9mCisgKiBub2h6LmNwdV9tYXNrLi4KKyAqCisgKiBXaGlsZSBzdG9wcGluZyB0aGUgdGljaywgdGhpcyBjcHUgd2lsbCBiZWNvbWUgdGhlIGlsYiBvd25lciBpZiB0aGVyZQorICogaXMgbm8gb3RoZXIgb3duZXIuIEFuZCB3aWxsIGJlIHRoZSBvd25lciB0aWxsIHRoYXQgY3B1IGJlY29tZXMgYnVzeQorICogb3IgaWYgYWxsIGNwdXMgaW4gdGhlIHN5c3RlbSBzdG9wIHRoZWlyIHRpY2tzIGF0IHdoaWNoIHBvaW50CisgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBpbGIgb3duZXIuCisgKgorICogV2hlbiB0aGUgaWxiIG93bmVyIGJlY29tZXMgYnVzeSwgaXQgbm9taW5hdGVzIGFub3RoZXIgb3duZXIsIGR1cmluZyB0aGUKKyAqIG5leHQgYnVzeSBzY2hlZHVsZXJfdGljaygpCisgKi8KK2ludCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChzdG9wX3RpY2spIHsKKwkJY3B1X3JxKGNwdSktPmluX25vaHpfcmVjZW50bHkgPSAxOworCisJCWlmICghY3B1X2FjdGl2ZShjcHUpKSB7CisJCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1KQorCQkJCXJldHVybiAwOworCisJCQkvKgorCQkJICogSWYgd2UgYXJlIGdvaW5nIG9mZmxpbmUgYW5kIHN0aWxsIHRoZSBsZWFkZXIsCisJCQkgKiBnaXZlIHVwIQorCQkJICovCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQorCQkJCUJVRygpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouY3B1X21hc2spOworCisJCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCisJCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fYWN0aXZlX2NwdXMoKSkgeworCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKKwkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7CisJCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSwgY3B1KSA9PSAtMSkKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJCWludCBuZXdfaWxiOworCisJCQlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fAorCQkJCQkJc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCisJCQkJcmV0dXJuIDE7CisJCQkvKgorCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSBwb3dlci1lZmZpY2llbnQKKwkJCSAqIGlsYi4KKwkJCSAqLworCQkJbmV3X2lsYiA9IGZpbmRfbmV3X2lsYihjcHUpOworCQkJaWYgKG5ld19pbGIgPCBucl9jcHVfaWRzICYmIG5ld19pbGIgIT0gY3B1KSB7CisJCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CisJCQkJcmVzY2hlZF9jcHUobmV3X2lsYik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKKworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQorCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKKwkJCQlCVUcoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIERFRklORV9TUElOTE9DSyhiYWxhbmNpbmcpOworCisvKgorICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKKyAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgorICoKKyAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCisgKi8KK3N0YXRpYyB2b2lkIHJlYmFsYW5jZV9kb21haW5zKGludCBjcHUsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBiYWxhbmNlID0gMTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwkvKiBFYXJsaWVzdCB0aW1lIHdoZW4gd2UgaGF2ZSB0byBkbyByZWJhbGFuY2UgYWdhaW4gKi8KKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKKwlpbnQgdXBkYXRlX25leHRfYmFsYW5jZSA9IDA7CisJaW50IG5lZWRfc2VyaWFsaXplOworCisJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKKwkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCisJCWludGVydmFsID0gc2QtPmJhbGFuY2VfaW50ZXJ2YWw7CisJCWlmIChpZGxlICE9IENQVV9JRExFKQorCQkJaW50ZXJ2YWwgKj0gc2QtPmJ1c3lfZmFjdG9yOworCisJCS8qIHNjYWxlIG1zIHRvIGppZmZpZXMgKi8KKwkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKKwkJaWYgKHVubGlrZWx5KCFpbnRlcnZhbCkpCisJCQlpbnRlcnZhbCA9IDE7CisJCWlmIChpbnRlcnZhbCA+IEhaKk5SX0NQVVMvMTApCisJCQlpbnRlcnZhbCA9IEhaKk5SX0NQVVMvMTA7CisKKwkJbmVlZF9zZXJpYWxpemUgPSBzZC0+ZmxhZ3MgJiBTRF9TRVJJQUxJWkU7CisKKwkJaWYgKG5lZWRfc2VyaWFsaXplKSB7CisJCQlpZiAoIXNwaW5fdHJ5bG9jaygmYmFsYW5jaW5nKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlKSkgeworCQkJCS8qCisJCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCisJCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCisJCQkJICogbm90IGlkbGUuCisJCQkJICovCisJCQkJaWRsZSA9IENQVV9OT1RfSURMRTsKKwkJCX0KKwkJCXNkLT5sYXN0X2JhbGFuY2UgPSBqaWZmaWVzOworCQl9CisJCWlmIChuZWVkX3NlcmlhbGl6ZSkKKwkJCXNwaW5fdW5sb2NrKCZiYWxhbmNpbmcpOworb3V0OgorCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKKwkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKwkJCXVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAxOworCQl9CisKKwkJLyoKKwkJICogU3RvcCB0aGUgbG9hZCBiYWxhbmNlIGF0IHRoaXMgbGV2ZWwuIFRoZXJlIGlzIGFub3RoZXIKKwkJICogQ1BVIGluIG91ciBzY2hlZCBncm91cCB3aGljaCBpcyBkb2luZyBsb2FkIGJhbGFuY2luZyBtb3JlCisJCSAqIGFjdGl2ZWx5LgorCQkgKi8KKwkJaWYgKCFiYWxhbmNlKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBuZXh0X2JhbGFuY2Ugd2lsbCBiZSB1cGRhdGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIG5lZWQuCisJICogV2hlbiB0aGUgY3B1IGlzIGF0dGFjaGVkIHRvIG51bGwgZG9tYWluIGZvciBleCwgaXQgd2lsbCBub3QgYmUKKwkgKiB1cGRhdGVkLgorCSAqLworCWlmIChsaWtlbHkodXBkYXRlX25leHRfYmFsYW5jZSkpCisJCXJxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7Cit9CisKKy8qCisgKiBydW5fcmViYWxhbmNlX2RvbWFpbnMgaXMgdHJpZ2dlcmVkIHdoZW4gbmVlZGVkIGZyb20gdGhlIHNjaGVkdWxlciB0aWNrLgorICogSW4gQ09ORklHX05PX0haIGNhc2UsIHRoZSBpZGxlIGxvYWQgYmFsYW5jZSBvd25lciB3aWxsIGRvIHRoZQorICogcmViYWxhbmNpbmcgZm9yIGFsbCB0aGUgY3B1cyBmb3Igd2hvbSBzY2hlZHVsZXIgdGlja3MgYXJlIHN0b3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCit7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7CisJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUgPSB0aGlzX3JxLT5pZGxlX2F0X3RpY2sgPworCQkJCQkJQ1BVX0lETEUgOiBDUFVfTk9UX0lETEU7CisKKwlyZWJhbGFuY2VfZG9tYWlucyh0aGlzX2NwdSwgaWRsZSk7CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvd25lciBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZywgdGhlbiBkbyB0aGUKKwkgKiBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIHRoZSBvdGhlciBpZGxlIGNwdXMgd2hvc2UgdGlja3MgYXJlCisJICogc3RvcHBlZC4KKwkgKi8KKwlpZiAodGhpc19ycS0+aWRsZV9hdF90aWNrICYmCisJICAgIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IHRoaXNfY3B1KSB7CisJCXN0cnVjdCBycSAqcnE7CisJCWludCBiYWxhbmNlX2NwdTsKKworCQlmb3JfZWFjaF9jcHUoYmFsYW5jZV9jcHUsIG5vaHouY3B1X21hc2spIHsKKwkJCWlmIChiYWxhbmNlX2NwdSA9PSB0aGlzX2NwdSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIElmIHRoaXMgY3B1IGdldHMgd29yayB0byBkbywgc3RvcCB0aGUgbG9hZCBiYWxhbmNpbmcKKwkJCSAqIHdvcmsgYmVpbmcgZG9uZSBmb3Igb3RoZXIgY3B1cy4gTmV4dCBsb2FkCisJCQkgKiBiYWxhbmNpbmcgb3duZXIgd2lsbCBwaWNrIGl0IHVwLgorCQkJICovCisJCQlpZiAobmVlZF9yZXNjaGVkKCkpCisJCQkJYnJlYWs7CisKKwkJCXJlYmFsYW5jZV9kb21haW5zKGJhbGFuY2VfY3B1LCBDUFVfSURMRSk7CisKKwkJCXJxID0gY3B1X3JxKGJhbGFuY2VfY3B1KTsKKwkJCWlmICh0aW1lX2FmdGVyKHRoaXNfcnEtPm5leHRfYmFsYW5jZSwgcnEtPm5leHRfYmFsYW5jZSkpCisJCQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gcnEtPm5leHRfYmFsYW5jZTsKKwkJfQorCX0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQoreworCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Cit9CisKKy8qCisgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCisgKgorICogSW4gY2FzZSBvZiBDT05GSUdfTk9fSFosIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIG5vbWluYXRlIGEgbmV3CisgKiBpZGxlIGxvYWQgYmFsYW5jaW5nIG93bmVyIG9yIGRlY2lkZSB0byBzdG9wIHRoZSBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZywKKyAqIGlmIHRoZSB3aG9sZSBzeXN0ZW0gaXMgaWRsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqcnEsIGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX05PX0haCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGluIHRoZSBub2h6IG1vZGUgcmVjZW50bHkgYW5kIGJ1c3kgYXQgdGhlIGN1cnJlbnQKKwkgKiBzY2hlZHVsZXIgdGljaywgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIG5vbWluYXRlIG5ldyBpZGxlCisJICogbG9hZCBiYWxhbmNlci4KKwkgKi8KKwlpZiAocnEtPmluX25vaHpfcmVjZW50bHkgJiYgIXJxLT5pZGxlX2F0X3RpY2spIHsKKwkJcnEtPmluX25vaHpfcmVjZW50bHkgPSAwOworCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJfQorCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgeworCQkJaW50IGlsYiA9IGZpbmRfbmV3X2lsYihjcHUpOworCisJCQlpZiAoaWxiIDwgbnJfY3B1X2lkcykKKwkJCQlyZXNjaGVkX2NwdShpbGIpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCBkb2luZyBpZGxlIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlCisJICogY3B1cyB3aXRoIHRpY2tzIHN0b3BwZWQsIGlzIGl0IHRpbWUgZm9yIHRoYXQgdG8gc3RvcD8KKwkgKi8KKwlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUgJiYKKwkgICAgY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKKwkJcmVzY2hlZF9jcHUoY3B1KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgdGhlIGlkbGUgbG9hZCBiYWxhbmNpbmcgaXMgZG9uZSBieQorCSAqIHNvbWVvbmUgZWxzZSwgdGhlbiBubyBuZWVkIHJhaXNlIHRoZSBTQ0hFRF9TT0ZUSVJRCisJICovCisJaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1ICYmCisJICAgIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKKwkJcmV0dXJuOworI2VuZGlmCisJLyogRG9uJ3QgbmVlZCB0byByZWJhbGFuY2Ugd2hpbGUgYXR0YWNoZWQgdG8gTlVMTCBkb21haW4gKi8KKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSAmJgorCSAgICBsaWtlbHkoIW9uX251bGxfZG9tYWluKGNwdSkpKQorCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOworfQogCiBzdGF0aWMgdm9pZCBycV9vbmxpbmVfZmFpcihzdHJ1Y3QgcnEgKnJxKQogewpAQCAtMTk2Miw2ICszNTQ0LDE1IEBACiAJdXBkYXRlX3N5c2N0bCgpOwogfQogCisjZWxzZQkvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBvbiBVUCB3ZSBkbyBub3QgbmVlZCB0byBiYWxhbmNlIGJldHdlZW4gQ1BVczoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlkbGVfYmFsYW5jZShpbnQgY3B1LCBzdHJ1Y3QgcnEgKnJxKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpAQCAtMjA3Niw3ICszNjY3LDcgQEAKIH0KICNlbmRpZgogCi11bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmdGFzay0+c2U7CiAJdW5zaWduZWQgaW50IHJyX2ludGVydmFsID0gMDsKQEAgLTIxMDgsOCArMzY5OSw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZWxlY3RfdGFza19ycQkJPSBzZWxlY3RfdGFza19ycV9mYWlyLAogCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfZmFpciwKLQkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX2ZhaXIsCiAJLnJxX29ubGluZQkJPSBycV9vbmxpbmVfZmFpciwKIAkucnFfb2ZmbGluZQkJPSBycV9vZmZsaW5lX2ZhaXIsCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKaW5kZXggNWY5M2I1Ny4uYThhNmQ4YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKKysrIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKQEAgLTQ0LDI0ICs0NCw2IEBACiB7CiB9CiAKLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbG9hZF9iYWxhbmNlX2lkbGUoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCSAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbW92ZV9vbmVfdGFza19pZGxlKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpCiB7CiB9CkBAIC05Nyw3ICs3OSw3IEBACiAJCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiB9CiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9pZGxlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTExOSw5ICsxMDEsNiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZWxlY3RfdGFza19ycQkJPSBzZWxlY3RfdGFza19ycV9pZGxlLAotCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfaWRsZSwKLQkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX2lkbGUsCiAjZW5kaWYKIAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19pZGxlLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBmNDgzMjhhLi5iZjNlMzhmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTk0LDE3ICsxOTQsMjAgQEAKIAlyZXR1cm4gcnRfc2UtPm15X3E7CiB9CiAKLXN0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKTsKK3N0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpOwogc3RhdGljIHZvaWQgZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpOwogCiBzdGF0aWMgdm9pZCBzY2hlZF9ydF9ycV9lbnF1ZXVlKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IHJxX29mX3J0X3JxKHJ0X3JxKS0+Y3VycjsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSA9IHJ0X3JxLT5ydF9zZTsKKwlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKKworCXJ0X3NlID0gcnRfcnEtPnRnLT5ydF9zZVt0aGlzX2NwdV07CiAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKIAkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCi0JCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgZmFsc2UpOwogCQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyIDwgY3Vyci0+cHJpbykKIAkJCXJlc2NoZWRfdGFzayhjdXJyKTsKIAl9CkBAIC0yMTIsNyArMjE1LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNjaGVkX3J0X3JxX2RlcXVldWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSA9IHJ0X3JxLT5ydF9zZTsKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CisKKwlydF9zZSA9IHJ0X3JxLT50Zy0+cnRfc2VbdGhpc19jcHVdOwogCiAJaWYgKHJ0X3NlICYmIG9uX3J0X3JxKHJ0X3NlKSkKIAkJZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwpAQCAtODAzLDcgKzgwOSw3IEBACiAJZGVjX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpCiB7CiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3JxX29mX3NlKHJ0X3NlKTsKIAlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKQEAgLTgxOSw3ICs4MjUsMTAgQEAKIAlpZiAoZ3JvdXBfcnEgJiYgKHJ0X3JxX3Rocm90dGxlZChncm91cF9ycSkgfHwgIWdyb3VwX3JxLT5ydF9ucl9ydW5uaW5nKSkKIAkJcmV0dXJuOwogCi0JbGlzdF9hZGRfdGFpbCgmcnRfc2UtPnJ1bl9saXN0LCBxdWV1ZSk7CisJaWYgKGhlYWQpCisJCWxpc3RfYWRkKCZydF9zZS0+cnVuX2xpc3QsIHF1ZXVlKTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJnJ0X3NlLT5ydW5fbGlzdCwgcXVldWUpOwogCV9fc2V0X2JpdChydF9zZV9wcmlvKHJ0X3NlKSwgYXJyYXktPmJpdG1hcCk7CiAKIAlpbmNfcnRfdGFza3MocnRfc2UsIHJ0X3JxKTsKQEAgLTg1NiwxMSArODY1LDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpCiB7CiAJZGVxdWV1ZV9ydF9zdGFjayhydF9zZSk7CiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKQotCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwkJX19lbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgaGVhZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQpAQCAtODcxLDIxICs4ODAsMjIgQEAKIAkJc3RydWN0IHJ0X3JxICpydF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKIAogCQlpZiAocnRfcnEgJiYgcnRfcnEtPnJ0X25yX3J1bm5pbmcpCi0JCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwkJCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGZhbHNlKTsKIAl9CiB9CiAKIC8qCiAgKiBBZGRpbmcvcmVtb3ZpbmcgYSB0YXNrIHRvL2Zyb20gYSBwcmlvcml0eSBhcnJheToKICAqLwotc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3N0YXRpYyB2b2lkCitlbnF1ZXVlX3Rhc2tfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLCBib29sIGhlYWQpCiB7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UgPSAmcC0+cnQ7CiAKIAlpZiAod2FrZXVwKQogCQlydF9zZS0+dGltZW91dCA9IDA7CiAKLQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGhlYWQpOwogCiAJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApICYmIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCiAJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CkBAIC0xNDgxLDI0ICsxNDkxLDYgQEAKIAkJcHVzaF9ydF90YXNrcyhycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1sb2FkX2JhbGFuY2VfcnQoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCWludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKLXsKLQkvKiBkb24ndCB0b3VjaCBSVCB0YXNrcyAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tb3ZlX29uZV90YXNrX3J0KHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JLyogZG9uJ3QgdG91Y2ggUlQgdGFza3MgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgc2V0X2NwdXNfYWxsb3dlZF9ydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKQogewpAQCAtMTcyMSw3ICsxNzEzLDcgQEAKIAlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCi11bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAkvKgogCSAqIFRpbWUgc2xpY2UgaXMgMCBmb3IgU0NIRURfRklGTyB0YXNrcwpAQCAtMTc0Niw4ICsxNzM4LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNlbGVjdF90YXNrX3JxCQk9IHNlbGVjdF90YXNrX3JxX3J0LAogCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfcnQsCi0JLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19ydCwKIAkuc2V0X2NwdXNfYWxsb3dlZCAgICAgICA9IHNldF9jcHVzX2FsbG93ZWRfcnQsCiAJLnJxX29ubGluZSAgICAgICAgICAgICAgPSBycV9vbmxpbmVfcnQsCiAJLnJxX29mZmxpbmUgICAgICAgICAgICAgPSBycV9vZmZsaW5lX3J0LApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDkzNGFlNWUuLjViYjliYWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTE1OSw2ICsxNTksMTAgQEAKIAogLyogR2l2ZW4gdGhlIG1hc2ssIGZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBzaWduYWwgdGhhdCBzaG91bGQgYmUgc2VydmljZWQuICovCiAKKyNkZWZpbmUgU1lOQ0hST05PVVNfTUFTSyBcCisJKHNpZ21hc2soU0lHU0VHVikgfCBzaWdtYXNrKFNJR0JVUykgfCBzaWdtYXNrKFNJR0lMTCkgfCBcCisJIHNpZ21hc2soU0lHVFJBUCkgfCBzaWdtYXNrKFNJR0ZQRSkpCisKIGludCBuZXh0X3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBpLCAqcywgKm0sIHg7CkBAIC0xNjYsMjYgKzE3MCwzOSBAQAogCiAJcyA9IHBlbmRpbmctPnNpZ25hbC5zaWc7CiAJbSA9IG1hc2stPnNpZzsKKworCS8qCisJICogSGFuZGxlIHRoZSBmaXJzdCB3b3JkIHNwZWNpYWxseTogaXQgY29udGFpbnMgdGhlCisJICogc3luY2hyb25vdXMgc2lnbmFscyB0aGF0IG5lZWQgdG8gYmUgZGVxdWV1ZWQgZmlyc3QuCisJICovCisJeCA9ICpzICZ+ICptOworCWlmICh4KSB7CisJCWlmICh4ICYgU1lOQ0hST05PVVNfTUFTSykKKwkJCXggJj0gU1lOQ0hST05PVVNfTUFTSzsKKwkJc2lnID0gZmZ6KH54KSArIDE7CisJCXJldHVybiBzaWc7CisJfQorCiAJc3dpdGNoIChfTlNJR19XT1JEUykgewogCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBfTlNJR19XT1JEUzsgKytpLCArK3MsICsrbSkKLQkJCWlmICgoeCA9ICpzICZ+ICptKSAhPSAwKSB7Ci0JCQkJc2lnID0gZmZ6KH54KSArIGkqX05TSUdfQlBXICsgMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJYnJlYWs7Ci0KLQljYXNlIDI6IGlmICgoeCA9IHNbMF0gJn4gbVswXSkgIT0gMCkKLQkJCXNpZyA9IDE7Ci0JCWVsc2UgaWYgKCh4ID0gc1sxXSAmfiBtWzFdKSAhPSAwKQotCQkJc2lnID0gX05TSUdfQlBXICsgMTsKLQkJZWxzZQorCQlmb3IgKGkgPSAxOyBpIDwgX05TSUdfV09SRFM7ICsraSkgeworCQkJeCA9ICorK3MgJn4gKisrbTsKKwkJCWlmICgheCkKKwkJCQljb250aW51ZTsKKwkJCXNpZyA9IGZmeih+eCkgKyBpKl9OU0lHX0JQVyArIDE7CiAJCQlicmVhazsKLQkJc2lnICs9IGZmeih+eCk7CisJCX0KIAkJYnJlYWs7CiAKLQljYXNlIDE6IGlmICgoeCA9ICpzICZ+ICptKSAhPSAwKQotCQkJc2lnID0gZmZ6KH54KSArIDE7CisJY2FzZSAyOgorCQl4ID0gc1sxXSAmfiBtWzFdOworCQlpZiAoIXgpCisJCQlicmVhazsKKwkJc2lnID0gZmZ6KH54KSArIF9OU0lHX0JQVyArIDE7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQkvKiBOb3RoaW5nIHRvIGRvICovCiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IGYxMDQwODQuLjk4NjdiNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTEyLDggKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSwgY2FsbF9zaW5nbGVfcXVldWUpOwotCiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOwogCXJhd19zcGlubG9ja190CQlsb2NrOwpAQCAtMzMsMTIgKzMxLDE0IEBACiAJY3B1bWFza192YXJfdAkJY3B1bWFzazsKIH07CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CisKIHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXJhd19zcGlubG9ja190CQlsb2NrOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEsIGNmZF9kYXRhKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUsIGNhbGxfc2luZ2xlX3F1ZXVlKTsKIAogc3RhdGljIGludAogaG90cGx1Z19jZmQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQpAQCAtMjU2LDcgKzI1Niw3IEBACiAJfQogfQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIGNzZF9kYXRhKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSwgY3NkX2RhdGEpOwogCiAvKgogICogc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIC0gUnVuIGEgZnVuY3Rpb24gb24gYSBzcGVjaWZpYyBDUFUKZGlmZiAtLWdpdCBhL2tlcm5lbC9zcmN1LmMgYi9rZXJuZWwvc3JjdS5jCmluZGV4IDgxOGQ3ZDkuLmJkZTQyOTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zcmN1LmMKKysrIGIva2VybmVsL3NyY3UuYwpAQCAtMzQsNiArMzQsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAKK3N0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlzcC0+Y29tcGxldGVkID0gMDsKKwltdXRleF9pbml0KCZzcC0+bXV0ZXgpOworCXNwLT5wZXJfY3B1X3JlZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkpOworCXJldHVybiBzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKK2ludCBfX2luaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQoreworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJLyogRG9uJ3QgcmUtaW5pdGlhbGl6ZSBhIGxvY2sgd2hpbGUgaXQgaXMgaGVsZC4gKi8KKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZCgodm9pZCAqKXNwLCBzaXplb2YoKnNwKSk7CisJbG9ja2RlcF9pbml0X21hcCgmc3AtPmRlcF9tYXAsIG5hbWUsIGtleSwgMCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdCk7CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiAvKioKICAqIGluaXRfc3JjdV9zdHJ1Y3QgLSBpbml0aWFsaXplIGEgc2xlZXAtUkNVIHN0cnVjdHVyZQogICogQHNwOiBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZS4KQEAgLTQ0LDEzICs2OCwxMiBAQAogICovCiBpbnQgaW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQogewotCXNwLT5jb21wbGV0ZWQgPSAwOwotCW11dGV4X2luaXQoJnNwLT5tdXRleCk7Ci0Jc3AtPnBlcl9jcHVfcmVmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSk7Ci0JcmV0dXJuIChzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTSk7CisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3QpOwogCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIC8qCiAgKiBzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeCAtLSByZXR1cm5zIGFwcHJveGltYXRlIG51bWJlciBvZiByZWFkZXJzCiAgKglhY3RpdmUgb24gdGhlIHNwZWNpZmllZCByYW5rIG9mIHBlci1DUFUgY291bnRlcnMuCkBAIC0xMDAsMTUgKzEyMywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xlYW51cF9zcmN1X3N0cnVjdCk7CiAKLS8qKgotICogc3JjdV9yZWFkX2xvY2sgLSByZWdpc3RlciBhIG5ldyByZWFkZXIgZm9yIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KLSAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIG5ldyByZWFkZXIuCi0gKgorLyoKICAqIENvdW50cyB0aGUgbmV3IHJlYWRlciBpbiB0aGUgYXBwcm9wcmlhdGUgcGVyLUNQVSBlbGVtZW50IG9mIHRoZQogICogc3JjdV9zdHJ1Y3QuICBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KICAqIFJldHVybnMgYW4gaW5kZXggdGhhdCBtdXN0IGJlIHBhc3NlZCB0byB0aGUgbWF0Y2hpbmcgc3JjdV9yZWFkX3VubG9jaygpLgogICovCi1pbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK2ludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCiB7CiAJaW50IGlkeDsKIApAQCAtMTIwLDMxICsxNDAsMjcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiBpZHg7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTsKIAotLyoqCi0gKiBzcmN1X3JlYWRfdW5sb2NrIC0gdW5yZWdpc3RlciBhIG9sZCByZWFkZXIgZnJvbSBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCi0gKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHVucmVnaXN0ZXIgdGhlIG9sZCByZWFkZXIuCi0gKiBAaWR4OiByZXR1cm4gdmFsdWUgZnJvbSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCi0gKgorLyoKICAqIFJlbW92ZXMgdGhlIGNvdW50IGZvciB0aGUgb2xkIHJlYWRlciBmcm9tIHRoZSBhcHByb3ByaWF0ZSBwZXItQ1BVCiAgKiBlbGVtZW50IG9mIHRoZSBzcmN1X3N0cnVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSB3ZWxsIGJlIGEgZGlmZmVyZW50CiAgKiBDUFUgdGhhbiB0aGF0IHdoaWNoIHdhcyBpbmNyZW1lbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgogICogTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKi8KLXZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQordm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcmN1X2JhcnJpZXIoKTsgIC8qIGVuc3VyZSBjb21waWxlciB3b24ndCBtaXNvcmRlciBjcml0aWNhbCBzZWN0aW9uLiAqLwogCXBlcl9jcHVfcHRyKHNwLT5wZXJfY3B1X3JlZiwgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+Y1tpZHhdLS07CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF91bmxvY2spOworRVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3luY2hyb25pemVfc3JjdSgpIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgogICovCi12b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKK3N0YXRpYyB2b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKIHsKIAlpbnQgaWR4OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggOTEyODIzZS4uOWJiOWZiMSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdG9wX21hY2hpbmVfd3E7CiBzdGF0aWMgc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhIGFjdGl2ZSwgaWRsZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWN0aXZlX2NwdXM7Ci1zdGF0aWMgdm9pZCAqc3RvcF9tYWNoaW5lX3dvcms7CitzdGF0aWMgdm9pZCBfX3BlcmNwdSAqc3RvcF9tYWNoaW5lX3dvcms7CiAKIHN0YXRpYyB2b2lkIHNldF9zdGF0ZShlbnVtIHN0b3BtYWNoaW5lX3N0YXRlIG5ld3N0YXRlKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDE4YmRlOTcuLjg3N2ZlNGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTU3MSwxMSArNTcxLDYgQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmICghdGFza19jYW5fc3dpdGNoX3VzZXIobmV3X3VzZXIsIGN1cnJlbnQpKSB7Ci0JCWZyZWVfdWlkKG5ld191c2VyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGF0b21pY19yZWFkKCZuZXdfdXNlci0+cHJvY2Vzc2VzKSA+PQogCQkJCWN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyICYmCiAJCQluZXdfdXNlciAhPSBJTklUX1VTRVIpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA4YTY4YjI0Li4zM2U3YTM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNDQxLDcgKzE0NDEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGVidWdfdGFibGVbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCiAJewogCQkucHJvY25hbWUJPSAiZXhjZXB0aW9uLXRyYWNlIiwKIAkJLmRhdGEJCT0gJnNob3dfdW5oYW5kbGVkX3NpZ25hbHMsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggZWE4Mzg0ZC4uODk5Y2E1MSAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtNDYsMTUgKzQ2LDEzIEBACiAJLm1heGF0dHIJPSBUQVNLU1RBVFNfQ01EX0FUVFJfTUFYLAogfTsKIAotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IHRhc2tzdGF0c19jbWRfZ2V0X3BvbGljeVtUQVNLU1RBVFNfQ01EX0FUVFJfTUFYKzFdCi1fX3JlYWRfbW9zdGx5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHRhc2tzdGF0c19jbWRfZ2V0X3BvbGljeVtUQVNLU1RBVFNfQ01EX0FUVFJfTUFYKzFdID0gewogCVtUQVNLU1RBVFNfQ01EX0FUVFJfUElEXSAgPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtUQVNLU1RBVFNfQ01EX0FUVFJfVEdJRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtUQVNLU1RBVFNfQ01EX0FUVFJfUkVHSVNURVJfQ1BVTUFTS10gPSB7IC50eXBlID0gTkxBX1NUUklORyB9LAogCVtUQVNLU1RBVFNfQ01EX0FUVFJfREVSRUdJU1RFUl9DUFVNQVNLXSA9IHsgLnR5cGUgPSBOTEFfU1RSSU5HIH0sfTsKIAotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5Ci1jZ3JvdXBzdGF0c19jbWRfZ2V0X3BvbGljeVtDR1JPVVBTVEFUU19DTURfQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjZ3JvdXBzdGF0c19jbWRfZ2V0X3BvbGljeVtDR1JPVVBTVEFUU19DTURfQVRUUl9NQVgrMV0gPSB7CiAJW0NHUk9VUFNUQVRTX0NNRF9BVFRSX0ZEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCAxMzcwMDgzLi4xZjY2M2QyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTQ1Myw2ICs0NTMsMTggQEAKICNlbmRpZiAvKiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0cgKi8KIAogLyoqCisgKiBjbG9ja3NvdXJjZV9zdXNwZW5kIC0gc3VzcGVuZCB0aGUgY2xvY2tzb3VyY2UocykKKyAqLwordm9pZCBjbG9ja3NvdXJjZV9zdXNwZW5kKHZvaWQpCit7CisJc3RydWN0IGNsb2Nrc291cmNlICpjczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjcywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpCisJCWlmIChjcy0+c3VzcGVuZCkKKwkJCWNzLT5zdXNwZW5kKGNzKTsKK30KKworLyoqCiAgKiBjbG9ja3NvdXJjZV9yZXN1bWUgLSByZXN1bWUgdGhlIGNsb2Nrc291cmNlKHMpCiAgKi8KIHZvaWQgY2xvY2tzb3VyY2VfcmVzdW1lKHZvaWQpCkBAIC00NjEsNyArNDczLDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZjbG9ja3NvdXJjZV9saXN0LCBsaXN0KQogCQlpZiAoY3MtPnJlc3VtZSkKLQkJCWNzLT5yZXN1bWUoKTsKKwkJCWNzLT5yZXN1bWUoY3MpOwogCiAJY2xvY2tzb3VyY2VfcmVzdW1lX3dhdGNoZG9nKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IDQ4MDBmOTMuLjdjMGYxODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC01OCwxMCArNTgsMTAgQEAKIHN0YXRpYyBsb25nCQkJdGltZV9jb25zdGFudCA9IDI7CiAKIC8qIG1heGltdW0gZXJyb3IgKHVzZWNzKToJCQkJCQkqLwotbG9uZwkJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworc3RhdGljIGxvbmcJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwogCiAvKiBlc3RpbWF0ZWQgZXJyb3IgKHVzZWNzKToJCQkJCQkqLwotbG9uZwkJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworc3RhdGljIGxvbmcJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwogCiAvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnNlY3Mvc2Vjcyk6CQkJCSovCiBzdGF0aWMgczY0CQkJdGltZV9mcmVxOwpAQCAtMTQyLDExICsxNDIsMTEgQEAKIAkgKiBTZWxlY3QgaG93IHRoZSBmcmVxdWVuY3kgaXMgdG8gYmUgY29udHJvbGxlZAogCSAqIGFuZCBpbiB3aGljaCBtb2RlIChQTEwgb3IgRkxMKS4KIAkgKi8KLQlzZWNzID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOworCXNlY3MgPSBnZXRfc2Vjb25kcygpIC0gdGltZV9yZWZ0aW1lOwogCWlmICh1bmxpa2VseSh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCkpCiAJCXNlY3MgPSAwOwogCi0JdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCXRpbWVfcmVmdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKIAlvZmZzZXQ2NCAgICA9IG9mZnNldDsKIAlmcmVxX2FkaiAgICA9IChvZmZzZXQ2NCAqIHNlY3MpIDw8CkBAIC0zNjgsNyArMzY4LDcgQEAKIAkgKiByZWZlcmVuY2UgdGltZSB0byBjdXJyZW50IHRpbWUuCiAJICovCiAJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkKLQkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCQl0aW1lX3JlZnRpbWUgPSBnZXRfc2Vjb25kcygpOwogCiAJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCiAJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggZTJhYjA2NC4uMTY3MzYzNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC02MjIsNiArNjIyLDcgQEAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCiAJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfU1VTUEVORCwgTlVMTCk7CisJY2xvY2tzb3VyY2Vfc3VzcGVuZCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDYwZTJjZTAuLjEzZTEzZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC0zMjgsMTUgKzMyOCw2IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAotY29uZmlnIFBPV0VSX1RSQUNFUgotCWJvb2wgIlRyYWNlIHBvd2VyIGNvbnN1bXB0aW9uIGJlaGF2aW9yIgotCWRlcGVuZHMgb24gWDg2Ci0Jc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCi0JaGVscAotCSAgVGhpcyB0cmFjZXIgaGVscHMgZGV2ZWxvcGVycyB0byBhbmFseXplIGFuZCBvcHRpbWl6ZSB0aGUga2VybmVsJ3MKLQkgIHBvd2VyIG1hbmFnZW1lbnQgZGVjaXNpb25zLCBzcGVjaWZpY2FsbHkgdGhlIEMtc3RhdGUgYW5kIFAtc3RhdGUKLQkgIGJlaGF2aW9yLgotCiBjb25maWcgS1NZTV9UUkFDRVIKIAlib29sICJUcmFjZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3Mgb24ga2VybmVsIG1lbW9yeSBsb2NhdGlvbnMiCiAJZGVwZW5kcyBvbiBIQVZFX0hXX0JSRUFLUE9JTlQKQEAgLTQ0OSw3ICs0NDAsNyBAQAogCiBjb25maWcgS1BST0JFX0VWRU5UCiAJZGVwZW5kcyBvbiBLUFJPQkVTCi0JZGVwZW5kcyBvbiBYODYKKwlkZXBlbmRzIG9uIEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCWJvb2wgIkVuYWJsZSBrcHJvYmVzLWJhc2VkIGR5bmFtaWMgZXZlbnRzIgogCXNlbGVjdCBUUkFDSU5HCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKaW5kZXggY2Q5ZWNkOC4uZDAwYzZmZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL01ha2VmaWxlCisrKyBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQpAQCAtNTEsNyArNTEsOSBAQAogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V2ZW50cy5vCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXhwb3J0Lm8KIG9iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KLW9iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KK2lmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KQorb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V2ZW50X3Byb2ZpbGUubworZW5kaWYKIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KIG9iai0kKENPTkZJR19LUFJPQkVfRVZFTlQpICs9IHRyYWNlX2twcm9iZS5vCiBvYmotJChDT05GSUdfS1NZTV9UUkFDRVIpICs9IHRyYWNlX2tzeW0ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCBkOWQ2MjA2Li4wN2Y5NDVhOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKQEAgLTU0MCw5ICs1NDAsMTAgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZidXRzLCBzaXplb2YoYnV0cykpKQorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkgeworCQlibGtfdHJhY2VfcmVtb3ZlKHEpOwogCQlyZXR1cm4gLUVGQVVMVDsKLQorCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMWU2NjQwZi4uODM3ODM1NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpAQCAtODk4LDM2ICs4OTcsNiBAQAogCQl9CQkJCVwKIAl9CiAKLSNpZmRlZiBDT05GSUdfS1BST0JFUwotCi1zdGF0aWMgaW50IGZyb3plbl9yZWNvcmRfY291bnQ7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlemVfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCi17Ci0JaWYgKCEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUk9aRU4pKSB7Ci0JCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZST1pFTjsKLQkJZnJvemVuX3JlY29yZF9jb3VudCsrOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVuZnJlZXplX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZST1pFTikgewotCQlyZWMtPmZsYWdzICY9IH5GVFJBQ0VfRkxfRlJPWkVOOwotCQlmcm96ZW5fcmVjb3JkX2NvdW50LS07Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCByZWNvcmRfZnJvemVuKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCi17Ci0JcmV0dXJuIHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJPWkVOOwotfQotI2Vsc2UKLSMgZGVmaW5lIGZyZWV6ZV9yZWNvcmQocmVjKQkJCSh7IDA7IH0pCi0jIGRlZmluZSB1bmZyZWV6ZV9yZWNvcmQocmVjKQkJCSh7IDA7IH0pCi0jIGRlZmluZSByZWNvcmRfZnJvemVuKHJlYykJCQkoeyAwOyB9KQotI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCi0KIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewogCXJlYy0+ZnJlZWxpc3QgPSBmdHJhY2VfZnJlZV9yZWNvcmRzOwpAQCAtMTAyNSw2ICs5OTQsMjEgQEAKIH0KIAogCisvKiBSZXR1cm4gMSBpZiB0aGUgYWRkcmVzcyByYW5nZSBpcyByZXNlcnZlZCBmb3IgZnRyYWNlICovCitpbnQgZnRyYWNlX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaWYgKHJlYy0+aXAgPD0gKHVuc2lnbmVkIGxvbmcpZW5kICYmCisJCSAgICByZWMtPmlwICsgTUNPVU5UX0lOU05fU0laRSA+ICh1bnNpZ25lZCBsb25nKXN0YXJ0KQorCQkJcmV0dXJuIDE7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludAogX19mdHJhY2VfcmVwbGFjZV9jb2RlKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBlbmFibGUpCiB7CkBAIC0xMDc2LDE0ICsxMDYwLDYgQEAKIAkJICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpKQogCQkJY29udGludWU7CiAKLQkJLyogaWdub3JlIHVwZGF0ZXMgdG8gdGhpcyByZWNvcmQncyBtY291bnQgc2l0ZSAqLwotCQlpZiAoZ2V0X2twcm9iZSgodm9pZCAqKXJlYy0+aXApKSB7Ci0JCQlmcmVlemVfcmVjb3JkKHJlYyk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCXVuZnJlZXplX3JlY29yZChyZWMpOwotCQl9Ci0KIAkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKIAkJaWYgKGZhaWxlZCkgewogCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwpAQCAtMjQyNiw2ICsyNDAyLDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZ3JhcGhfbG9jayk7CiAKIGludCBmdHJhY2VfZ3JhcGhfY291bnQ7CitpbnQgZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkOwogdW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfZnVuY3NbRlRSQUNFX0dSQVBIX01BWF9GVU5DU10gX19yZWFkX21vc3RseTsKIAogc3RhdGljIHZvaWQgKgpAQCAtMjQ0OCw3ICsyNDI1LDcgQEAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAogCS8qIE5vdGhpbmcsIHRlbGwgZ19zaG93IHRvIHByaW50IGFsbCBmdW5jdGlvbnMgYXJlIGVuYWJsZWQgKi8KLQlpZiAoIWZ0cmFjZV9ncmFwaF9jb3VudCAmJiAhKnBvcykKKwlpZiAoIWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCAmJiAhKnBvcykKIAkJcmV0dXJuICh2b2lkICopMTsKIAogCXJldHVybiBfX2dfbmV4dChtLCBwb3MpOwpAQCAtMjQ5NCw2ICsyNDcxLDcgQEAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCSAgICAoZmlsZS0+Zl9mbGFncyAmIE9fVFJVTkMpKSB7CisJCWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCA9IDA7CiAJCWZ0cmFjZV9ncmFwaF9jb3VudCA9IDA7CiAJCW1lbXNldChmdHJhY2VfZ3JhcGhfZnVuY3MsIDAsIHNpemVvZihmdHJhY2VfZ3JhcGhfZnVuY3MpKTsKIAl9CkBAIC0yNTE5LDcgKzI0OTcsNyBAQAogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAlpbnQgc2VhcmNoX2xlbjsKLQlpbnQgZm91bmQgPSAwOworCWludCBmYWlsID0gMTsKIAlpbnQgdHlwZSwgbm90OwogCWNoYXIgKnNlYXJjaDsKIAlib29sIGV4aXN0czsKQEAgLTI1MzAsMzcgKzI1MDgsNTEgQEAKIAogCS8qIGRlY29kZSByZWdleCAqLwogCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgJnNlYXJjaCwgJm5vdCk7Ci0JaWYgKG5vdCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFub3QgJiYgKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewogCi0JCWlmICgqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCi0JCQlicmVhazsKLQogCQlpZiAocmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRkFJTEVEIHwgRlRSQUNFX0ZMX0ZSRUUpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7Ci0JCQkvKiBlbnN1cmUgaXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIGFycmF5ICovCisJCQkvKiBpZiBpdCBpcyBpbiB0aGUgYXJyYXkgKi8KIAkJCWV4aXN0cyA9IGZhbHNlOwotCQkJZm9yIChpID0gMDsgaSA8ICppZHg7IGkrKykKKwkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspIHsKIAkJCQlpZiAoYXJyYXlbaV0gPT0gcmVjLT5pcCkgewogCQkJCQlleGlzdHMgPSB0cnVlOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQlpZiAoIWV4aXN0cykKLQkJCQlhcnJheVsoKmlkeCkrK10gPSByZWMtPmlwOwotCQkJZm91bmQgPSAxOworCQkJfQorCisJCQlpZiAoIW5vdCkgeworCQkJCWZhaWwgPSAwOworCQkJCWlmICghZXhpc3RzKSB7CisJCQkJCWFycmF5WygqaWR4KSsrXSA9IHJlYy0+aXA7CisJCQkJCWlmICgqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCisJCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChleGlzdHMpIHsKKwkJCQkJYXJyYXlbaV0gPSBhcnJheVstLSgqaWR4KV07CisJCQkJCWFycmF5WyppZHhdID0gMDsKKwkJCQkJZmFpbCA9IDA7CisJCQkJfQorCQkJfQogCQl9CiAJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7Ci0KK291dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAotCXJldHVybiBmb3VuZCA/IDAgOiAtRUlOVkFMOworCWlmIChmYWlsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCA9IDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNTcwLDE2ICsyNTYyLDExIEBACiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7CiAJc3NpemVfdCByZWFkLCByZXQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmdyYXBoX2xvY2spOwogCi0JaWYgKGZ0cmFjZV9ncmFwaF9jb3VudCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQogCWlmICh0cmFjZV9wYXJzZXJfZ2V0X2luaXQoJnBhcnNlciwgRlRSQUNFX0JVRkZfTUFYKSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDhjMWIyZDIuLjAyODdmOWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAorI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMKaW5kZXggYjI0NzdjYS4uZGY3NGM3OSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogCiBzdHJ1Y3QgcmJfcGFnZSB7CiAJdTY0CQl0czsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggZWFjNjg3NS4uZWQwMWZkYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGxpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KQEAgLTkxLDIwICs5MiwxNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kaXNhYmxlX2NwdSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKTsKKwlfX3RoaXNfY3B1X2luYyhmdHJhY2VfY3B1X2Rpc2FibGVkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9lbmFibGVfY3B1KHZvaWQpCiB7Ci0JX190aGlzX2NwdV9kZWMocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpOworCV9fdGhpc19jcHVfZGVjKGZ0cmFjZV9jcHVfZGlzYWJsZWQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IF9fcmVhZF9tb3N0bHkJdHJhY2luZ19idWZmZXJfbWFzazsKIAotLyogRGVmaW5lIHdoaWNoIGNwdSBidWZmZXJzIGFyZSBjdXJyZW50bHkgcmVhZCBpbiB0cmFjZV9waXBlICovCi1zdGF0aWMgY3B1bWFza192YXJfdAkJCXRyYWNpbmdfcmVhZGVyX2NwdW1hc2s7Ci0KICNkZWZpbmUgZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQlcCiAJZm9yX2VhY2hfY3B1KGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKIApAQCAtMjQzLDEyICsyNDEsOTEgQEAKIAogLyoKICAqIHRyYWNlX3R5cGVzX2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSB0cmFjZV90eXBlcyBsaXN0LgotICogVGhpcyBsb2NrIGlzIGFsc28gdXNlZCB0byBrZWVwIHVzZXIgYWNjZXNzIHNlcmlhbGl6ZWQuCi0gKiBBY2Nlc3NlcyBmcm9tIHVzZXJzcGFjZSB3aWxsIGdyYWIgdGhpcyBsb2NrIHdoaWxlIHVzZXJzcGFjZQotICogYWN0aXZpdGllcyBoYXBwZW4gaW5zaWRlIHRoZSBrZXJuZWwuCiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgodHJhY2VfdHlwZXNfbG9jayk7CiAKKy8qCisgKiBzZXJpYWxpemUgdGhlIGFjY2VzcyBvZiB0aGUgcmluZyBidWZmZXIKKyAqCisgKiByaW5nIGJ1ZmZlciBzZXJpYWxpemVzIHJlYWRlcnMsIGJ1dCBpdCBpcyBsb3cgbGV2ZWwgcHJvdGVjdGlvbi4KKyAqIFRoZSB2YWxpZGl0eSBvZiB0aGUgZXZlbnRzICh3aGljaCByZXR1cm5zIGJ5IHJpbmdfYnVmZmVyX3BlZWsoKSAuLmV0YykKKyAqIGFyZSBub3QgcHJvdGVjdGVkIGJ5IHJpbmcgYnVmZmVyLgorICoKKyAqIFRoZSBjb250ZW50IG9mIGV2ZW50cyBtYXkgYmVjb21lIGdhcmJhZ2UgaWYgd2UgYWxsb3cgb3RoZXIgcHJvY2VzcyBjb25zdW1lcworICogdGhlc2UgZXZlbnRzIGNvbmN1cnJlbnRseToKKyAqICAgQSkgdGhlIHBhZ2Ugb2YgdGhlIGNvbnN1bWVkIGV2ZW50cyBtYXkgYmVjb21lIGEgbm9ybWFsIHBhZ2UKKyAqICAgICAgKG5vdCByZWFkZXIgcGFnZSkgaW4gcmluZyBidWZmZXIsIGFuZCB0aGlzIHBhZ2Ugd2lsbCBiZSByZXdyaXRlZAorICogICAgICBieSBldmVudHMgcHJvZHVjZXIuCisgKiAgIEIpIFRoZSBwYWdlIG9mIHRoZSBjb25zdW1lZCBldmVudHMgbWF5IGJlY29tZSBhIHBhZ2UgZm9yIHNwbGljZV9yZWFkLAorICogICAgICBhbmQgdGhpcyBwYWdlIHdpbGwgYmUgcmV0dXJuZWQgdG8gc3lzdGVtLgorICoKKyAqIFRoZXNlIHByaW1pdGl2ZXMgYWxsb3cgbXVsdGkgcHJvY2VzcyBhY2Nlc3MgdG8gZGlmZmVyZW50IGNwdSByaW5nIGJ1ZmZlcgorICogY29uY3VycmVudGx5LgorICoKKyAqIFRoZXNlIHByaW1pdGl2ZXMgZG9uJ3QgZGlzdGluZ3Vpc2ggcmVhZC1vbmx5IGFuZCByZWFkLWNvbnN1bWUgYWNjZXNzLgorICogTXVsdGkgcmVhZC1vbmx5IGFjY2VzcyBhcmUgYWxzbyBzZXJpYWxpemVkLgorICovCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgREVDTEFSRV9SV1NFTShhbGxfY3B1X2FjY2Vzc19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbXV0ZXgsIGNwdV9hY2Nlc3NfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9jayhpbnQgY3B1KQoreworCWlmIChjcHUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCS8qIGdhaW4gaXQgZm9yIGFjY2Vzc2luZyB0aGUgd2hvbGUgcmluZyBidWZmZXIuICovCisJCWRvd25fd3JpdGUoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCX0gZWxzZSB7CisJCS8qIGdhaW4gaXQgZm9yIGFjY2Vzc2luZyBhIGNwdSByaW5nIGJ1ZmZlci4gKi8KKworCQkvKiBGaXJzdGx5IGJsb2NrIG90aGVyIHRyYWNlX2FjY2Vzc19sb2NrKFRSQUNFX1BJUEVfQUxMX0NQVSkuICovCisJCWRvd25fcmVhZCgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisKKwkJLyogU2Vjb25kbHkgYmxvY2sgb3RoZXIgYWNjZXNzIHRvIHRoaXMgQGNwdSByaW5nIGJ1ZmZlci4gKi8KKwkJbXV0ZXhfbG9jaygmcGVyX2NwdShjcHVfYWNjZXNzX2xvY2ssIGNwdSkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc191bmxvY2soaW50IGNwdSkKK3sKKwlpZiAoY3B1ID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQl1cF93cml0ZSgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7CisJCXVwX3JlYWQoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJbXV0ZXhfaW5pdCgmcGVyX2NwdShjcHVfYWNjZXNzX2xvY2ssIGNwdSkpOworfQorCisjZWxzZQorCitzdGF0aWMgREVGSU5FX01VVEVYKGFjY2Vzc19sb2NrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrKGludCBjcHUpCit7CisJKHZvaWQpY3B1OworCW11dGV4X2xvY2soJmFjY2Vzc19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc191bmxvY2soaW50IGNwdSkKK3sKKwkodm9pZCljcHU7CisJbXV0ZXhfdW5sb2NrKCZhY2Nlc3NfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9ja19pbml0KHZvaWQpCit7Cit9CisKKyNlbmRpZgorCiAvKiB0cmFjZV93YWl0IGlzIGEgd2FpdHF1ZXVlIGZvciB0YXNrcyBibG9ja2VkIG9uIHRyYWNlX3BvbGwgKi8KIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0cmFjZV93YWl0KTsKIApAQCAtMTA4OSw3ICsxMTY2LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKIAogCS8qIElmIHdlIGFyZSByZWFkaW5nIHRoZSByaW5nIGJ1ZmZlciwgZG9uJ3QgdHJhY2UgKi8KLQlpZiAodW5saWtlbHkoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCisJaWYgKHVubGlrZWx5KF9fdGhpc19jcHVfcmVhZChmdHJhY2VfY3B1X2Rpc2FibGVkKSkpCiAJCXJldHVybjsKIAogCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0ZOLCBzaXplb2YoKmVudHJ5KSwKQEAgLTEzMjAsOCArMTM5NywxMCBAQAogCWVudHJ5LT5mbXQJCQk9IGZtdDsKIAogCW1lbWNweShlbnRyeS0+YnVmLCB0cmFjZV9idWYsIHNpemVvZih1MzIpICogbGVuKTsKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkgewogCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOworCQlmdHJhY2VfdHJhY2Vfc3RhY2soYnVmZmVyLCBmbGFncywgNiwgcGMpOworCX0KIAogb3V0X3VubG9jazoKIAlhcmNoX3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CkBAIC0xMzk0LDggKzE0NzMsMTAgQEAKIAogCW1lbWNweSgmZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBsZW4pOwogCWVudHJ5LT5idWZbbGVuXSA9ICdcMCc7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpIHsKIAkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKKwkJZnRyYWNlX3RyYWNlX3N0YWNrKGJ1ZmZlciwgaXJxX2ZsYWdzLCA2LCBwYyk7CisJfQogCiAgb3V0X3VubG9jazoKIAlhcmNoX3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CkBAIC0xNTg1LDEyICsxNjY2LDYgQEAKIH0KIAogLyoKLSAqIE5vIG5lY2Vzc2FyeSBsb2NraW5nIGhlcmUuIFRoZSB3b3JzdCB0aGluZyB3aGljaCBjYW4KLSAqIGhhcHBlbiBpcyBsb29zaW5nIGV2ZW50cyBjb25zdW1lZCBhdCB0aGUgc2FtZSB0aW1lCi0gKiBieSBhIHRyYWNlX3BpcGUgcmVhZGVyLgotICogT3RoZXIgdGhhbiB0aGF0LCB3ZSBkb24ndCByaXNrIHRvIGNyYXNoIHRoZSByaW5nIGJ1ZmZlcgotICogYmVjYXVzZSBpdCBzZXJpYWxpemVzIHRoZSByZWFkZXJzLgotICoKICAqIFRoZSBjdXJyZW50IHRyYWNlciBpcyBjb3BpZWQgdG8gYXZvaWQgYSBnbG9iYWwgbG9ja2luZwogICogYWxsIGFyb3VuZC4KICAqLwpAQCAtMTY0NSwxMiArMTcyMCwxNiBAQAogCX0KIAogCXRyYWNlX2V2ZW50X3JlYWRfbG9jaygpOworCXRyYWNlX2FjY2Vzc19sb2NrKGNwdV9maWxlKTsKIAlyZXR1cm4gcDsKIH0KIAogc3RhdGljIHZvaWQgc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKIHsKKwlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCiAJYXRvbWljX2RlYygmdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQpOworCXRyYWNlX2FjY2Vzc191bmxvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXRyYWNlX2V2ZW50X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTI4NDEsMjIgKzI5MjAsNiBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQkvKiBXZSBvbmx5IGFsbG93IG9uZSByZWFkZXIgcGVyIGNwdSAqLwotCWlmIChjcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKLQkJaWYgKCFjcHVtYXNrX2VtcHR5KHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQljcHVtYXNrX3NldGFsbCh0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQl9IGVsc2UgewotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spKQotCQkJY3B1bWFza19zZXRfY3B1KGNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQkJZWxzZSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCS8qIGNyZWF0ZSBhIGJ1ZmZlciB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gdG8gcGFzcyB0byB1c2Vyc3BhY2UgKi8KIAlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWl0ZXIpIHsKQEAgLTI5MTIsMTIgKzI5NzUsNiBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlpZiAoaXRlci0+Y3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKQotCQljcHVtYXNrX2NsZWFyKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCWVsc2UKLQkJY3B1bWFza19jbGVhcl9jcHUoaXRlci0+Y3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCi0KIAlpZiAoaXRlci0+dHJhY2UtPnBpcGVfY2xvc2UpCiAJCWl0ZXItPnRyYWNlLT5waXBlX2Nsb3NlKGl0ZXIpOwogCkBAIC0zMDc5LDYgKzMxMzYsNyBAQAogCWl0ZXItPnBvcyA9IC0xOwogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CisJdHJhY2VfYWNjZXNzX2xvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXdoaWxlIChmaW5kX25leHRfZW50cnlfaW5jKGl0ZXIpICE9IE5VTEwpIHsKIAkJZW51bSBwcmludF9saW5lX3QgcmV0OwogCQlpbnQgbGVuID0gaXRlci0+c2VxLmxlbjsKQEAgLTMwOTUsNiArMzE1Myw3IEBACiAJCWlmIChpdGVyLT5zZXEubGVuID49IGNudCkKIAkJCWJyZWFrOwogCX0KKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwogCiAJLyogTm93IGNvcHkgd2hhdCB3ZSBoYXZlIHRvIHRoZSB1c2VyICovCkBAIC0zMjIwLDYgKzMyNzksNyBAQAogCX0KIAogCXRyYWNlX2V2ZW50X3JlYWRfbG9jaygpOworCXRyYWNlX2FjY2Vzc19sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAogCS8qIEZpbGwgYXMgbWFueSBwYWdlcyBhcyBwb3NzaWJsZS4gKi8KIAlmb3IgKGkgPSAwLCByZW0gPSBsZW47IGkgPCBQSVBFX0JVRkZFUlMgJiYgcmVtOyBpKyspIHsKQEAgLTMyNDMsNiArMzMwMyw3IEBACiAJCXRyYWNlX3NlcV9pbml0KCZpdGVyLT5zZXEpOwogCX0KIAorCXRyYWNlX2FjY2Vzc191bmxvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXRyYWNlX2V2ZW50X3JlYWRfdW5sb2NrKCk7CiAJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CiAKQEAgLTM1NDQsMTAgKzM2MDUsMTIgQEAKIAogCWluZm8tPnJlYWQgPSAwOwogCisJdHJhY2VfYWNjZXNzX2xvY2soaW5mby0+Y3B1KTsKIAlyZXQgPSByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UoaW5mby0+dHItPmJ1ZmZlciwKIAkJCQkgICAgJmluZm8tPnNwYXJlLAogCQkJCSAgICBjb3VudCwKIAkJCQkgICAgaW5mby0+Y3B1LCAwKTsKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGluZm8tPmNwdSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCkBAIC0zNjc1LDYgKzM3MzgsNyBAQAogCQlsZW4gJj0gUEFHRV9NQVNLOwogCX0KIAorCXRyYWNlX2FjY2Vzc19sb2NrKGluZm8tPmNwdSk7CiAJZW50cmllcyA9IHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KGluZm8tPnRyLT5idWZmZXIsIGluZm8tPmNwdSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTICYmIGxlbiAmJiBlbnRyaWVzOyBpKyssIGxlbiAtPSBQQUdFX1NJWkUpIHsKQEAgLTM3MjIsNiArMzc4Niw3IEBACiAJCWVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShpbmZvLT50ci0+YnVmZmVyLCBpbmZvLT5jcHUpOwogCX0KIAorCXRyYWNlX2FjY2Vzc191bmxvY2soaW5mby0+Y3B1KTsKIAlzcGQubnJfcGFnZXMgPSBpOwogCiAJLyogZGlkIHdlIHJlYWQgYW55dGhpbmc/ICovCkBAIC00MTU4LDYgKzQyMjMsOCBAQAogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCWludCBjcHU7CiAKKwl0cmFjZV9hY2Nlc3NfbG9ja19pbml0KCk7CisKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKIAogCXRyYWNlX2NyZWF0ZV9maWxlKCJ0cmFjaW5nX2VuYWJsZWQiLCAwNjQ0LCBkX3RyYWNlciwKQEAgLTQzOTIsOSArNDQ1OSw2IEBACiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19jcHVtYXNrLCBHRlBfS0VSTkVMKSkKIAkJZ290byBvdXRfZnJlZV9idWZmZXJfbWFzazsKIAotCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZ0cmFjaW5nX3JlYWRlcl9jcHVtYXNrLCBHRlBfS0VSTkVMKSkKLQkJZ290byBvdXRfZnJlZV90cmFjaW5nX2NwdW1hc2s7Ci0KIAkvKiBUbyBzYXZlIG1lbW9yeSwga2VlcCB0aGUgcmluZyBidWZmZXIgc2l6ZSB0byBpdHMgbWluaW11bSAqLwogCWlmIChyaW5nX2J1ZmZlcl9leHBhbmRlZCkKIAkJcmluZ19idWZfc2l6ZSA9IHRyYWNlX2J1Zl9zaXplOwpAQCAtNDQ1Miw4ICs0NTE2LDYgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfY3B1bWFzazoKLQlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotb3V0X2ZyZWVfdHJhY2luZ19jcHVtYXNrOgogCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19jcHVtYXNrKTsKIG91dF9mcmVlX2J1ZmZlcl9tYXNrOgogCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19idWZmZXJfbWFzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDRkZjZhNzcuLmZkMDViY2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC00OTcsNiArNDk3LDcgQEAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIC8qIFRPRE86IG1ha2UgdGhpcyB2YXJpYWJsZSAqLwogI2RlZmluZSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTCQkzMgorZXh0ZXJuIGludCBmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQ7CiBleHRlcm4gaW50IGZ0cmFjZV9ncmFwaF9jb3VudDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZ0cmFjZV9ncmFwaF9mdW5jc1tGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTXTsKIApAQCAtNTA0LDcgKzUwNSw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoIWZ0cmFjZV9ncmFwaF9jb3VudCB8fCB0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKKwlpZiAoIWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCkKIAkJcmV0dXJuIDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnRyYWNlX2dyYXBoX2NvdW50OyBpKyspIHsKQEAgLTc5MSw3ICs3OTIsOCBAQAogCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXAotCWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNjYWxsOworCWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50XyMjY2FsbDsKICN1bmRlZiBGVFJBQ0VfRU5UUllfRFVQCiAjZGVmaW5lIEZUUkFDRV9FTlRSWV9EVVAoY2FsbCwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKIAlGVFJBQ0VfRU5UUlkoY2FsbCwgc3RydWN0X25hbWUsIGlkLCBQQVJBTVModHN0cnVjdCksIFBBUkFNUyhwcmludCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggNGExOTRmMC4uYjliYzRkNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMzA3LDggKzMwNywyMyBAQAogCQlyZXR1cm4gLTE7CiAJaWYgKHBlcmNlbnRfYSA+IHBlcmNlbnRfYikKIAkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKworCWlmIChhLT5pbmNvcnJlY3QgPCBiLT5pbmNvcnJlY3QpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+aW5jb3JyZWN0ID4gYi0+aW5jb3JyZWN0KQorCQlyZXR1cm4gMTsKKworCS8qCisJICogU2luY2UgdGhlIGFib3ZlIHNob3dzIHdvcnNlIChpbmNvcnJlY3QpIGNhc2VzCisJICogZmlyc3QsIHdlIGNvbnRpbnVlIHRoYXQgYnkgc2hvd2luZyBiZXN0IChjb3JyZWN0KQorCSAqIGNhc2VzIGxhc3QuCisJICovCisJaWYgKGEtPmNvcnJlY3QgPiBiLT5jb3JyZWN0KQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmNvcnJlY3QgPCBiLT5jb3JyZWN0KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHRyYWNlcl9zdGF0IGFubm90YXRlZF9icmFuY2hfc3RhdHMgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwppbmRleCA5ZTI1NTczLi5mMGQ2OTMwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKQEAgLTYsMTQgKzYsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKIAotY2hhciAqcGVyZl90cmFjZV9idWY7Ci1FWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RyYWNlX2J1Zik7Ci0KLWNoYXIgKnBlcmZfdHJhY2VfYnVmX25taTsKLUVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmX25taSk7CitzdGF0aWMgY2hhciAqcGVyZl90cmFjZV9idWY7CitzdGF0aWMgY2hhciAqcGVyZl90cmFjZV9idWZfbm1pOwogCiB0eXBlZGVmIHR5cGVvZihjaGFyIFtGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRV0pIHBlcmZfdHJhY2VfdCA7CiAKQEAgLTEyMCwzICsxMTgsNDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7CiB9CisKK19fa3Byb2JlcyB2b2lkICpmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgdHlwZSwKKwkJCQkJaW50ICpyY3R4cCwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CisJY2hhciAqdHJhY2VfYnVmLCAqcmF3X2RhdGE7CisJaW50IHBjLCBjcHU7CisKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKworCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLworCWxvY2FsX2lycV9zYXZlKCppcnFfZmxhZ3MpOworCisJKnJjdHhwID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOworCWlmICgqcmN0eHAgPCAwKQorCQlnb3RvIGVycl9yZWN1cnNpb247CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoaW5fbm1pKCkpCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOworCWVsc2UKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKKworCWlmICghdHJhY2VfYnVmKQorCQlnb3RvIGVycjsKKworCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBjcHUpOworCisJLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KKwkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOworCisJZW50cnkgPSAoc3RydWN0IHRyYWNlX2VudHJ5ICopcmF3X2RhdGE7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgKmlycV9mbGFncywgcGMpOworCWVudHJ5LT50eXBlID0gdHlwZTsKKworCXJldHVybiByYXdfZGF0YTsKK2VycjoKKwlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KCpyY3R4cCk7CitlcnJfcmVjdXJzaW9uOgorCWxvY2FsX2lycV9yZXN0b3JlKCppcnFfZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDE4OWIwOWIuLjNmOTcyYWQ5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC02MCwxMCArNjAsOCBAQAogCXJldHVybiAwOwogCiBlcnI6Ci0JaWYgKGZpZWxkKSB7CisJaWYgKGZpZWxkKQogCQlrZnJlZShmaWVsZC0+bmFtZSk7Ci0JCWtmcmVlKGZpZWxkLT50eXBlKTsKLQl9CiAJa2ZyZWUoZmllbGQpOwogCiAJcmV0dXJuIC1FTk9NRU07CkBAIC01MjAsNDEgKzUxOCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWV4dGVybiBjaGFyICpfX2JhZF90eXBlX3NpemUodm9pZCk7Ci0KLSN1bmRlZiBGSUVMRAotI2RlZmluZSBGSUVMRCh0eXBlLCBuYW1lKQkJCQkJCVwKLQlzaXplb2YodHlwZSkgIT0gc2l6ZW9mKGZpZWxkLm5hbWUpID8gX19iYWRfdHlwZV9zaXplKCkgOglcCi0JI3R5cGUsICJjb21tb25fIiAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgbmFtZSksCQlcCi0JCXNpemVvZihmaWVsZC5uYW1lKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkKLQotc3RhdGljIGludCB0cmFjZV93cml0ZV9oZWFkZXIoc3RydWN0IHRyYWNlX3NlcSAqcykKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgZmllbGQ7Ci0KLQkvKiBzdHJ1Y3QgdHJhY2VfZW50cnkgKi8KLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcbiIsCi0JCQlGSUVMRCh1bnNpZ25lZCBzaG9ydCwgdHlwZSksCi0JCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBmbGFncyksCi0JCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KSwKLQkJCUZJRUxEKGludCwgcGlkKSwKLQkJCUZJRUxEKGludCwgbG9ja19kZXB0aCkpOwotfQotCiBzdGF0aWMgc3NpemVfdAogZXZlbnRfZm9ybWF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAogCQkgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7CiAJc3RydWN0IHRyYWNlX3NlcSAqczsKKwlpbnQgY29tbW9uX2ZpZWxkX2NvdW50ID0gNTsKIAljaGFyICpidWY7Ci0JaW50IHI7CisJaW50IHIgPSAwOwogCiAJaWYgKCpwcG9zKQogCQlyZXR1cm4gMDsKQEAgLTU2NSwxNCArNTM4LDQ4IEBACiAKIAl0cmFjZV9zZXFfaW5pdChzKTsKIAotCS8qIElmIGFueSBvZiB0aGUgZmlyc3Qgd3JpdGVzIGZhaWwsIHNvIHdpbGwgdGhlIHNob3dfZm9ybWF0LiAqLwotCiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAibmFtZTogJXNcbiIsIGNhbGwtPm5hbWUpOwogCXRyYWNlX3NlcV9wcmludGYocywgIklEOiAlZFxuIiwgY2FsbC0+aWQpOwogCXRyYWNlX3NlcV9wcmludGYocywgImZvcm1hdDpcbiIpOwotCXRyYWNlX3dyaXRlX2hlYWRlcihzKTsKIAotCXIgPSBjYWxsLT5zaG93X2Zvcm1hdChjYWxsLCBzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoZmllbGQsICZjYWxsLT5maWVsZHMsIGxpbmspIHsKKwkJLyoKKwkJICogU21hcnRseSBzaG93cyB0aGUgYXJyYXkgdHlwZShleGNlcHQgZHluYW1pYyBhcnJheSkuCisJCSAqIE5vcm1hbDoKKwkJICoJZmllbGQ6VFlQRSBWQVIKKwkJICogSWYgVFlQRSA6PSBUWVBFW0xFTl0sIGl0IGlzIHNob3duOgorCQkgKglmaWVsZDpUWVBFIFZBUltMRU5dCisJCSAqLworCQljb25zdCBjaGFyICphcnJheV9kZXNjcmlwdG9yID0gc3RyY2hyKGZpZWxkLT50eXBlLCAnWycpOworCisJCWlmICghc3RybmNtcChmaWVsZC0+dHlwZSwgIl9fZGF0YV9sb2MiLCAxMCkpCisJCQlhcnJheV9kZXNjcmlwdG9yID0gTlVMTDsKKworCQlpZiAoIWFycmF5X2Rlc2NyaXB0b3IpIHsKKwkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV1OyIKKwkJCQkJIlx0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsCisJCQkJCWZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSwgZmllbGQtPm9mZnNldCwKKwkJCQkJZmllbGQtPnNpemUsICEhZmllbGQtPmlzX3NpZ25lZCk7CisJCX0gZWxzZSB7CisJCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolLipzICVzJXM7XHRvZmZzZXQ6JXU7IgorCQkJCQkiXHRzaXplOiV1O1x0c2lnbmVkOiVkO1xuIiwKKwkJCQkJKGludCkoYXJyYXlfZGVzY3JpcHRvciAtIGZpZWxkLT50eXBlKSwKKwkJCQkJZmllbGQtPnR5cGUsIGZpZWxkLT5uYW1lLAorCQkJCQlhcnJheV9kZXNjcmlwdG9yLCBmaWVsZC0+b2Zmc2V0LAorCQkJCQlmaWVsZC0+c2l6ZSwgISFmaWVsZC0+aXNfc2lnbmVkKTsKKwkJfQorCisJCWlmICgtLWNvbW1vbl9maWVsZF9jb3VudCA9PSAwKQorCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlxuIik7CisKKwkJaWYgKCFyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHIpCisJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogJXNcbiIsCisJCQkJY2FsbC0+cHJpbnRfZm10KTsKKwogCWlmICghcikgewogCQkvKgogCQkgKiB1ZyEgIFRoZSBmb3JtYXQgb3V0cHV0IGlzIGJpZ2dlciB0aGFuIGEgUEFHRSEhCkBAIC05NDgsMTAgKzk1NSw2IEBACiAJCQkJICBmaWx0ZXIpOwogCX0KIAotCS8qIEEgdHJhY2UgbWF5IG5vdCB3YW50IHRvIGV4cG9ydCBpdHMgZm9ybWF0ICovCi0JaWYgKCFjYWxsLT5zaG93X2Zvcm1hdCkKLQkJcmV0dXJuIDA7Ci0KIAl0cmFjZV9jcmVhdGVfZmlsZSgiZm9ybWF0IiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAogCQkJICBmb3JtYXQpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwppbmRleCBlNDJhZjlhLi40NjE1ZjYyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKQEAgLTEzNzEsNyArMTM3MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZnJlZV9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewpAQCAtMTQzOSw1ICsxNDM5LDUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCmluZGV4IGQ0ZmE1ZGMuLmUwOTFmNjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKQEAgLTYyLDc4ICs2Miw2IEBACiAKICNpbmNsdWRlICJ0cmFjZV9lbnRyaWVzLmgiCiAKLQotI3VuZGVmIF9fZmllbGQKLSNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkpOyBcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2ZpZWxkX2Rlc2MKLSNkZWZpbmUgX19maWVsZF9kZXNjKHR5cGUsIGNvbnRhaW5lciwgaXRlbSkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgY29udGFpbmVyLml0ZW0pLAlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLmNvbnRhaW5lci5pdGVtKSwJCVwKLQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19hcnJheQotI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IiBcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuaXRlbSksIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsgXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19hcnJheV9kZXNjCi0jZGVmaW5lIF9fYXJyYXlfZGVzYyh0eXBlLCBjb250YWluZXIsIGl0ZW0sIGxlbikJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIgXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgY29udGFpbmVyLml0ZW0pLAlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLmNvbnRhaW5lci5pdGVtKSwJCVwKLQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19keW5hbWljX2FycmF5Ci0jZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTowO1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBGX3ByaW50awotI2RlZmluZSBGX3ByaW50ayhmbXQsIGFyZ3MuLi4pICIlcywgJXNcbiIsICNmbXQsIF9fc3RyaW5naWZ5KGFyZ3MpCi0KLSN1bmRlZiBfX2VudHJ5Ci0jZGVmaW5lIF9fZW50cnkgUkVDCi0KLSN1bmRlZiBGVFJBQ0VfRU5UUlkKLSNkZWZpbmUgRlRSQUNFX0VOVFJZKG5hbWUsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc3RydWN0X25hbWUgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0c3RydWN0OwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICIgcHJpbnQpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19Ci0KLSNpbmNsdWRlICJ0cmFjZV9lbnRyaWVzLmgiCi0KICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCQlcCiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKQEAgLTE3NSw3ICsxMDMsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAogI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkKKyNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKKwkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCisJCQkJIDAsIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpO1wKKwlpZiAocmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CiAKICN1bmRlZiBGVFJBQ0VfRU5UUlkKICNkZWZpbmUgRlRSQUNFX0VOVFJZKG5hbWUsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCkBAIC0xOTgsNiArMTMxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBSRUMKKwogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQogCkBAIC0yMTMsNiArMTQ5LDkgQEAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKICNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCiAKKyN1bmRlZiBGX3ByaW50aworI2RlZmluZSBGX3ByaW50ayhmbXQsIGFyZ3MuLi4pICNmbXQgIiwgIiAgX19zdHJpbmdpZnkoYXJncykKKwogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkoY2FsbCwgc3RydWN0X25hbWUsIHR5cGUsIHRzdHJ1Y3QsIHByaW50KQkJXAogCQkJCQkJCQkJXApAQCAtMjIzLDcgKzE2Miw3IEBACiAJLmlkCQkJPSB0eXBlLAkJCQkJXAogCS5zeXN0ZW0JCQk9IF9fc3RyaW5naWZ5KFRSQUNFX1NZU1RFTSksCQlcCiAJLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudCwJCVwKLQkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorCS5wcmludF9mbXQJCT0gcHJpbnQsCQkJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCiB9OwkJCQkJCQkJCVwKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IGIxMzQyYzUuLjNmYzJhNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAlwaWRfdAkJbGFzdF9waWQ7CiAJaW50CQlkZXB0aDsKIAlpbnQJCWlnbm9yZTsKKwl1bnNpZ25lZCBsb25nCWVudGVyX2Z1bmNzW0ZUUkFDRV9SRVRGVU5DX0RFUFRIXTsKIH07CiAKIHN0cnVjdCBmZ3JhcGhfZGF0YSB7CkBAIC0xODcsNyArMTg4LDcgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5OwogCi0JaWYgKHVubGlrZWx5KF9fdGhpc19jcHVfcmVhZChwZXJfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQorCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKQogCQlyZXR1cm4gMDsKIAogCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0dSQVBIX0VOVCwKQEAgLTIxMiwxMyArMjEzLDExIEBACiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKLQlpZiAodW5saWtlbHkoIXRyKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIWZ0cmFjZV90cmFjZV90YXNrKGN1cnJlbnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKQorCS8qIHRyYWNlIGl0IHdoZW4gaXQgaXMtbmVzdGVkLWluIG9yIGlzIGEgZnVuY3Rpb24gZW5hYmxlZC4gKi8KKwlpZiAoISh0cmFjZS0+ZGVwdGggfHwgZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKSkKIAkJcmV0dXJuIDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0yMzEsOSArMjMwLDYgQEAKIAl9IGVsc2UgewogCQlyZXQgPSAwOwogCX0KLQkvKiBPbmx5IGRvIHRoZSBhdG9taWMgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0ICovCi0JaWYgKCF0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKLQkJc2V0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yNTEsNyArMjQ3LDcgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmVudHJ5OwogCi0JaWYgKHVubGlrZWx5KF9fdGhpc19jcHVfcmVhZChwZXJfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQorCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKQogCQlyZXR1cm47CiAKIAlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9HUkFQSF9SRVQsCkBAIC0yODEsMTcgKzI3NywyNCBAQAogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOwogCX0KLQlpZiAoIXRyYWNlLT5kZXB0aCkKLQkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3ZvaWQgc2V0X2dyYXBoX2FycmF5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJZ3JhcGhfYXJyYXkgPSB0cjsKKworCS8qIE1ha2UgZ3JhcGhfYXJyYXkgdmlzaWJsZSBiZWZvcmUgd2Ugc3RhcnQgdHJhY2luZyAqLworCisJc21wX21iKCk7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CiAKLQlncmFwaF9hcnJheSA9IHRyOworCXNldF9ncmFwaF9hcnJheSh0cik7CiAJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCiAJCQkJICAgICZ0cmFjZV9ncmFwaF9lbnRyeSk7CiAJaWYgKHJldCkKQEAgLTMwMSwxMSArMzA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzZXRfZ3JhcGhfYXJyYXkoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlncmFwaF9hcnJheSA9IHRyOwotfQotCiBzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwpAQCAtNjczLDE1ICs2NzEsMjEgQEAKIAlkdXJhdGlvbiA9IGdyYXBoX3JldC0+cmV0dGltZSAtIGdyYXBoX3JldC0+Y2FsbHRpbWU7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKworCQljcHVfZGF0YSA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpOwogCiAJCS8qCiAJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBTaW5jZQogCQkgKiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiwga2VlcCB0aGUgY29tbWVudHMKIAkJICogZXF1YWwgdG8gdGhpcyBkZXB0aC4KIAkJICovCi0JCSpkZXB0aCA9IGNhbGwtPmRlcHRoIC0gMTsKKwkJY3B1X2RhdGEtPmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOworCisJCS8qIE5vIG5lZWQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uIGFyb3VuZCBmb3IgdGhpcyBkZXB0aCAqLworCQlpZiAoY2FsbC0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkKKwkJCWNwdV9kYXRhLT5lbnRlcl9mdW5jc1tjYWxsLT5kZXB0aF0gPSAwOwogCX0KIAogCS8qIE92ZXJoZWFkICovCkBAIC03MjEsMTAgKzcyNSwxNSBAQAogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CiAKLQkJKmRlcHRoID0gY2FsbC0+ZGVwdGg7CisJCWNwdV9kYXRhID0gcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSk7CisJCWNwdV9kYXRhLT5kZXB0aCA9IGNhbGwtPmRlcHRoOworCisJCS8qIFNhdmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIHRvIHNlZSBpZiB0aGUgZXhpdCBtYXRjaGVzICovCisJCWlmIChjYWxsLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKQorCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW2NhbGwtPmRlcHRoXSA9IGNhbGwtPmZ1bmM7CiAJfQogCiAJLyogTm8gb3ZlcmhlYWQgKi8KQEAgLTg1NCwxOSArODYzLDI4IEBACiAJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlwaWRfdCBwaWQgPSBlbnQtPnBpZDsKIAlpbnQgY3B1ID0gaXRlci0+Y3B1OworCWludCBmdW5jX21hdGNoID0gMTsKIAlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KTsKIAogCQkvKgogCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gVGhpcyBpcyB0aGUKIAkJICogcmV0dXJuIGZyb20gYSBmdW5jdGlvbiwgd2Ugbm93IHdhbnQgdGhlIGNvbW1lbnRzCiAJCSAqIHRvIGRpc3BsYXkgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgdGhlIGJyYWNrZXQuCiAJCSAqLwotCQkqZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCQljcHVfZGF0YS0+ZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCisJCWlmICh0cmFjZS0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkgeworCQkJaWYgKGNwdV9kYXRhLT5lbnRlcl9mdW5jc1t0cmFjZS0+ZGVwdGhdICE9IHRyYWNlLT5mdW5jKQorCQkJCWZ1bmNfbWF0Y2ggPSAwOworCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW3RyYWNlLT5kZXB0aF0gPSAwOworCQl9CiAJfQogCiAJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDApKQpAQCAtODkxLDkgKzkwOSwyMSBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn1cbiIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJLyoKKwkgKiBJZiB0aGUgcmV0dXJuIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBlbnRyeSwKKwkgKiB0aGVuIHRoZSBlbnRyeSB3YXMgbG9zdC4gSW5zdGVhZCBvZiBqdXN0IHByaW50aW5nCisJICogdGhlICd9JyBhbmQgbGV0dGluZyB0aGUgdXNlciBndWVzcyB3aGF0IGZ1bmN0aW9uIHRoaXMKKwkgKiBiZWxvbmdzIHRvLCB3cml0ZSBvdXQgdGhlIGZ1bmN0aW9uIG5hbWUuCisJICovCisJaWYgKGZ1bmNfbWF0Y2gpIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifVxuIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0gZWxzZSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn0gKCVwcylcbiIsICh2b2lkICopdHJhY2UtPmZ1bmMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CiAKIAkvKiBPdmVycnVuICovCiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSUlVOKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggNTBiMWI4Mi4uNTA1YzkyMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtOTEsMTEgKzkxLDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfYXJndW1lbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKm51bSkKLXsKLQlyZXR1cm4gcmVnc19nZXRfYXJndW1lbnRfbnRoKHJlZ3MsICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW51bSkpOwotfQotCiBzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfcmV0dmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCSAgICAgIHZvaWQgKmR1bW15KQogewpAQCAtMjMxLDkgKzIyNiw3IEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfYXJndW1lbnQpCi0JCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiRhcmclbHUiLCAodW5zaWduZWQgbG9uZylmZi0+ZGF0YSk7Ci0JZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKKwlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJbmFtZSA9IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgodW5zaWduZWQgaW50KSgobG9uZylmZi0+ZGF0YSkpOwogCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIlJSVzIiwgbmFtZSk7CkBAIC00ODksMTQgKzQ4Miw2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoYXJnLCAiYXJnIiwgMykgPT0gMCAmJiBpc2RpZ2l0KGFyZ1szXSkpIHsKLQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMywgMTAsICZwYXJhbSk7Ci0JCWlmIChyZXQgfHwgcGFyYW0gPiBQQVJBTV9NQVhfQVJHUykKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJZmYtPmZ1bmMgPSBmZXRjaF9hcmd1bWVudDsKLQkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKLQkJfQogCX0gZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCXJldHVybiByZXQ7CkBAIC02MTEsNyArNTk2LDYgQEAKIAkgKiAgLSBBZGQga3Byb2JlOiBwWzpbR1JQL11FVkVOVF0gS1NZTVsrT0ZGU118S0FERFIgW0ZFVENIQVJHU10KIAkgKiAgLSBBZGQga3JldHByb2JlOiByWzpbR1JQL11FVkVOVF0gS1NZTVsrMF0gW0ZFVENIQVJHU10KIAkgKiBGZXRjaCBhcmdzOgotCSAqICAkYXJnTgk6IGZldGNoIE50aCBvZiBmdW5jdGlvbiBhcmd1bWVudC4gKE46MC0pCiAJICogICRyZXR2YWwJOiBmZXRjaCByZXR1cm4gdmFsdWUKIAkgKiAgJHN0YWNrCTogZmV0Y2ggc3RhY2sgYWRkcmVzcwogCSAqICAkc3RhY2tOCTogZmV0Y2ggTnRoIG9mIHN0YWNrIChOOjAtKQpAQCAtNjUxLDEyICs2MzUsMTIgQEAKIAkJCWV2ZW50ID0gc3RyY2hyKGdyb3VwLCAnLycpICsgMTsKIAkJCWV2ZW50Wy0xXSA9ICdcMCc7CiAJCQlpZiAoc3RybGVuKGdyb3VwKSA9PSAwKSB7Ci0JCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWxlZFxuIik7CisJCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCQlpZiAoc3RybGVuKGV2ZW50KSA9PSAwKSB7Ci0JCQlwcl9pbmZvKCJFdmVudCBuYW1lIGlzIG5vdCBzcGVjaWZpbGVkXG4iKTsKKwkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmllZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTk1OCw3ICs5NDIsNyBAQAogfTsKIAogLyogS3Byb2JlIGhhbmRsZXIgKi8KLXN0YXRpYyBfX2twcm9iZXMgaW50IGtwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcHJvYmVfdHJhY2VfZnVuYyhzdHJ1Y3Qga3Byb2JlICprcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7CkBAIC05NzgsNyArOTYyLDcgQEAKIAlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKIAkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CkBAIC05ODgsMTEgKzk3MiwxMCBAQAogCiAJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncywgcGMpOwotCXJldHVybiAwOwogfQogCiAvKiBLcmV0cHJvYmUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3JldHByb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCitzdGF0aWMgX19rcHJvYmVzIHZvaWQga3JldHByb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihyaS0+cnAsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnApOwpAQCAtMTAxMSw3ICs5OTQsNyBAQAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmlkLCBzaXplLAogCQkJCQkJICBpcnFfZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKQEAgLTEwMjIsOCArMTAwNSw2IEBACiAKIAlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBjYWxsLCBlbnRyeSwgZXZlbnQpKQogCQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogRXZlbnQgZW50cnkgcHJpbnRlcnMgKi8KQEAgLTExNzQsMjEzICsxMTU1LDEyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJCQkgICAgIHN0cnVjdCB0cmFjZV9wcm9iZSAqdHAsIGNvbnN0IGNoYXIgKmZtdCwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmFyZykKK3N0YXRpYyBpbnQgX19zZXRfcHJpbnRfZm10KHN0cnVjdCB0cmFjZV9wcm9iZSAqdHAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKKwlpbnQgcG9zID0gMDsKIAotCS8qIFNob3cgZm9ybWF0ICovCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogXCIlcyIsIGZtdCkpCi0JCXJldHVybiAwOworCWNvbnN0IGNoYXIgKmZtdCwgKmFyZzsKIAotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0lJWx4IiwgdHAtPmFyZ3NbaV0ubmFtZSkpCi0JCQlyZXR1cm4gMDsKKwlpZiAoIXByb2JlX2lzX3JldHVybih0cCkpIHsKKwkJZm10ID0gIiglbHgpIjsKKwkJYXJnID0gIlJFQy0+IiBGSUVMRF9TVFJJTkdfSVA7CisJfSBlbHNlIHsKKwkJZm10ID0gIiglbHggPC0gJWx4KSI7CisJCWFyZyA9ICJSRUMtPiIgRklFTERfU1RSSU5HX0ZVTkMgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUDsKKwl9CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlwiLCAlcyIsIGFyZykpCi0JCXJldHVybiAwOworCS8qIFdoZW4gbGVuPTAsIHdlIGp1c3QgY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisjZGVmaW5lIExFTl9PUl9aRVJPIChsZW4gPyBsZW4gLSBwb3MgOiAwKQogCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCBSRUMtPiVzIiwgdHAtPmFyZ3NbaV0ubmFtZSkpCi0JCQlyZXR1cm4gMDsKKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiJXMiLCBmbXQpOwogCi0JcmV0dXJuIHRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiICVzPSUlbHgiLAorCQkJCXRwLT5hcmdzW2ldLm5hbWUpOworCX0KKworCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIsICVzIiwgYXJnKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiLCBSRUMtPiVzIiwKKwkJCQl0cC0+YXJnc1tpXS5uYW1lKTsKKwl9CisKKyN1bmRlZiBMRU5fT1JfWkVSTworCisJLyogcmV0dXJuIHRoZSBsZW5ndGggb2YgcHJpbnRfZm10ICovCisJcmV0dXJuIHBvczsKIH0KIAotI3VuZGVmIFNIT1dfRklFTEQKLSNkZWZpbmUgU0hPV19GSUVMRCh0eXBlLCBpdGVtLCBuYW1lKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgJXM7XHQiCVwKLQkJCQkib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsIG5hbWUsXAotCQkJCSh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksXAotCQkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKHR5cGUpLAkJXAotCQkJCWlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JCWlmICghcmV0KQkJCQkJCVwKLQkJCXJldHVybiAwOwkJCQkJXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbnQga3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQkgICAgc3RydWN0IHRyYWNlX3NlcSAqcykKK3N0YXRpYyBpbnQgc2V0X3ByaW50X2ZtdChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQogewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7Ci0JaW50IHJldCwgaTsKLQlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisJaW50IGxlbjsKKwljaGFyICpwcmludF9mbXQ7CiAKLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVApOwotCVNIT1dfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTKTsKKwkvKiBGaXJzdDogY2FsbGVkIHdpdGggMCBsZW5ndGggdG8gY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisJbGVuID0gX19zZXRfcHJpbnRfZm10KHRwLCBOVUxMLCAwKTsKKwlwcmludF9mbXQgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghcHJpbnRfZm10KQorCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFNob3cgZmllbGRzICovCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSk7Ci0JdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CisJLyogU2Vjb25kOiBhY3R1YWxseSB3cml0ZSB0aGUgQHByaW50X2ZtdCAqLworCV9fc2V0X3ByaW50X2ZtdCh0cCwgcHJpbnRfZm10LCBsZW4gKyAxKTsKKwl0cC0+Y2FsbC5wcmludF9mbXQgPSBwcmludF9mbXQ7CiAKLQlyZXR1cm4gX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzLCB0cCwgIiglbHgpIiwKLQkJCQkJICJSRUMtPiIgRklFTERfU1RSSU5HX0lQKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7Ci0JaW50IHJldCwgaTsKLQlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7Ci0KLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGZ1bmMsIEZJRUxEX1NUUklOR19GVU5DKTsKLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldF9pcCwgRklFTERfU1RSSU5HX1JFVElQKTsKLQlTSE9XX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUyk7Ci0KLQkvKiBTaG93IGZpZWxkcyAqLwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUpOwotCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwotCi0JcmV0dXJuIF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQocywgdHAsICIoJWx4IDwtICVseCkiLAotCQkJCQkgIlJFQy0+IiBGSUVMRF9TVFJJTkdfRlVOQwotCQkJCQkgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiAvKiBLcHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLAorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsCiAJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKGtwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwLmtwKTsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7Ci0JaW50IHNpemUsIF9fc2l6ZSwgaSwgcGMsIF9fY3B1OworCWludCBzaXplLCBfX3NpemUsIGk7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCByY3R4OwogCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAJX19zaXplID0gU0laRU9GX0tQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CiAJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CiAJc2l6ZSAtPSBzaXplb2YodTMyKTsKIAlpZiAoV0FSTl9PTkNFKHNpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwKIAkJICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBQcm90ZWN0IHRoZSBub24gbm1pIGJ1ZmZlcgotCSAqIFRoaXMgYWxzbyBwcm90ZWN0cyB0aGUgcmN1IHJlYWQgc2lkZQotCSAqLwotCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJZW50cnkgPSBmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLCBjYWxsLT5pZCwgJnJjdHgsICZpcnFfZmxhZ3MpOworCWlmICghZW50cnkpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChpbl9ubWkoKSkKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7Ci0JZWxzZQotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKLQotCS8qIFplcm8gZGVhZCBieXRlcyBmcm9tIGFsaWdubWVudCB0byBhdm9pZCBidWZmZXIgbGVhayB0byB1c2Vyc3BhY2UgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCWVudHJ5ID0gKHN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKilyYXdfZGF0YTsKLQllbnQgPSAmZW50cnktPmVudDsKLQotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQllbnQtPnR5cGUgPSBjYWxsLT5pZDsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKIAllbnRyeS0+aXAgPSAodW5zaWduZWQgbG9uZylrcC0+YWRkcjsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7Ci0JcGVyZl90cF9ldmVudChjYWxsLT5pZCwgZW50cnktPmlwLCAxLCBlbnRyeSwgc2l6ZSk7CiAKLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwotCi0JcmV0dXJuIDA7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPmlwLCAxLCBpcnFfZmxhZ3MpOwogfQogCiAvKiBLcmV0cHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtyZXRwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKHJpLT5ycCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycCk7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwotCWludCBzaXplLCBfX3NpemUsIGksIHBjLCBfX2NwdTsKKwlpbnQgc2l6ZSwgX19zaXplLCBpOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgcmN0eDsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCV9fc2l6ZSA9IFNJWkVPRl9LUkVUUFJPQkVfVFJBQ0VfRU5UUlkodHAtPm5yX2FyZ3MpOwogCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCiAJCSAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCS8qCi0JICogUHJvdGVjdCB0aGUgbm9uIG5taSBidWZmZXIKLQkgKiBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCWVudHJ5ID0gZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JX19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaW5fbm1pKCkpCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwotCWVsc2UKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7Ci0KLQkvKiBaZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgYnVmZmVyIGxlYWsgdG8gdXNlcnNwYWNlICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQllbnRyeSA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICopcmF3X2RhdGE7Ci0JZW50ID0gJmVudHJ5LT5lbnQ7Ci0KLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0JZW50LT50eXBlID0gY2FsbC0+aWQ7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CiAJZW50cnktPmZ1bmMgPSAodW5zaWduZWQgbG9uZyl0cC0+cnAua3AuYWRkcjsKIAllbnRyeS0+cmV0X2lwID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQogCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKLQlwZXJmX3RwX2V2ZW50KGNhbGwtPmlkLCBlbnRyeS0+cmV0X2lwLCAxLCBlbnRyeSwgc2l6ZSk7CiAKLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwotCi0JcmV0dXJuIDA7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPnJldF9pcCwgMSwgaXJxX2ZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwcm9iZV9wcm9maWxlX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCkBAIC0xNDA4LDcgKzEyOTksNyBAQAogCQkJZGlzYWJsZV9rcHJvYmUoJnRwLT5ycC5rcCk7CiAJfQogfQotI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYJLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKIAogc3RhdGljIF9fa3Byb2JlcwpAQCAtMTQxOCwxMCArMTMwOSwxMCBAQAogCiAJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpCiAJCWtwcm9iZV90cmFjZV9mdW5jKGtwLCByZWdzKTsKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1BST0ZJTEUpCiAJCWtwcm9iZV9wcm9maWxlX2Z1bmMoa3AsIHJlZ3MpOwotI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYKIAlyZXR1cm4gMDsJLyogV2UgZG9uJ3QgdHdlZWsga2VybmVsLCBzbyBqdXN0IHJldHVybiAwICovCiB9CiAKQEAgLTE0MzIsMTAgKzEzMjMsMTAgQEAKIAogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1RSQUNFKQogCQlrcmV0cHJvYmVfdHJhY2VfZnVuYyhyaSwgcmVncyk7Ci0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19QUk9GSUxFKQogCQlrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHJpLCByZWdzKTsKLSNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmCiAJcmV0dXJuIDA7CS8qIFdlIGRvbid0IHR3ZWVrIGtlcm5lbCwgc28ganVzdCByZXR1cm4gMCAqLwogfQogCkBAIC0xNDQ4LDIzICsxMzM5LDI1IEBACiAJaWYgKHByb2JlX2lzX3JldHVybih0cCkpIHsKIAkJdHAtPmV2ZW50LnRyYWNlID0gcHJpbnRfa3JldHByb2JlX2V2ZW50OwogCQljYWxsLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OwotCQljYWxsLT5zaG93X2Zvcm1hdCA9IGtyZXRwcm9iZV9ldmVudF9zaG93X2Zvcm1hdDsKIAkJY2FsbC0+ZGVmaW5lX2ZpZWxkcyA9IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOwogCX0gZWxzZSB7CiAJCXRwLT5ldmVudC50cmFjZSA9IHByaW50X2twcm9iZV9ldmVudDsKIAkJY2FsbC0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKLQkJY2FsbC0+c2hvd19mb3JtYXQgPSBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQ7CiAJCWNhbGwtPmRlZmluZV9maWVsZHMgPSBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKIAl9CisJaWYgKHNldF9wcmludF9mbXQodHApIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJY2FsbC0+ZXZlbnQgPSAmdHAtPmV2ZW50OwogCWNhbGwtPmlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cC0+ZXZlbnQpOwotCWlmICghY2FsbC0+aWQpCisJaWYgKCFjYWxsLT5pZCkgeworCQlrZnJlZShjYWxsLT5wcmludF9mbXQpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJY2FsbC0+ZW5hYmxlZCA9IDA7CiAJY2FsbC0+cmVnZnVuYyA9IHByb2JlX2V2ZW50X2VuYWJsZTsKIAljYWxsLT51bnJlZ2Z1bmMgPSBwcm9iZV9ldmVudF9kaXNhYmxlOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAljYWxsLT5wcm9maWxlX2VuYWJsZSA9IHByb2JlX3Byb2ZpbGVfZW5hYmxlOwogCWNhbGwtPnByb2ZpbGVfZGlzYWJsZSA9IHByb2JlX3Byb2ZpbGVfZGlzYWJsZTsKICNlbmRpZgpAQCAtMTQ3Miw2ICsxMzY1LDcgQEAKIAlyZXQgPSB0cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsKTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oIkZhaWxlZCB0byByZWdpc3RlciBrcHJvYmUgZXZlbnQ6ICVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJa2ZyZWUoY2FsbC0+cHJpbnRfZm10KTsKIAkJdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRwLT5ldmVudCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xNDgxLDYgKzEzNzUsNyBAQAogewogCS8qIHRwLT5ldmVudCBpcyB1bnJlZ2lzdGVyZWQgaW4gdHJhY2VfcmVtb3ZlX2V2ZW50X2NhbGwoKSAqLwogCXRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKCZ0cC0+Y2FsbCk7CisJa2ZyZWUodHAtPmNhbGwucHJpbnRfZm10KTsKIH0KIAogLyogTWFrZSBhIGRlYnVnZnMgaW50ZXJmYWNlIGZvciBjb250cm9saW5nIHByb2JlIHBvaW50cyAqLwpAQCAtMTUyMywyOCArMTQxOCw2NyBAQAogCiBzdGF0aWMgX19pbml0IGludCBrcHJvYmVfdHJhY2Vfc2VsZl90ZXN0c19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB3YXJuID0gMDsKIAlpbnQgKCp0YXJnZXQpKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CiAKIAl0YXJnZXQgPSBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0OwogCiAJcHJfaW5mbygiVGVzdGluZyBrcHJvYmUgdHJhY2luZzogIik7CiAKIAlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCJwOnRlc3Rwcm9iZSBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0ICIKLQkJCQkgICIkYXJnMSAkYXJnMiAkYXJnMyAkYXJnNCAkc3RhY2sgJHN0YWNrMCIpOwotCWlmIChXQVJOX09OX09OQ0UocmV0KSkKLQkJcHJfd2FybmluZygiZXJyb3IgZW5hYmxpbmcgZnVuY3Rpb24gZW50cnlcbiIpOworCQkJCSAgIiRzdGFjayAkc3RhY2swICswKCRzdGFjaykiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gcHJvYmluZyBmdW5jdGlvbiBlbnRyeS5cbiIpOworCQl3YXJuKys7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIHRyYWNlIHBvaW50ICovCisJCXRwID0gZmluZF9wcm9iZV9ldmVudCgidGVzdHByb2JlIiwgS1BST0JFX0VWRU5UX1NZU1RFTSk7CisJCWlmIChXQVJOX09OX09OQ0UodHAgPT0gTlVMTCkpIHsKKwkJCXByX3dhcm5pbmcoImVycm9yIG9uIGdldHRpbmcgbmV3IHByb2JlLlxuIik7CisJCQl3YXJuKys7CisJCX0gZWxzZQorCQkJcHJvYmVfZXZlbnRfZW5hYmxlKCZ0cC0+Y2FsbCk7CisJfQogCiAJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgicjp0ZXN0cHJvYmUyIGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQgIgogCQkJCSAgIiRyZXR2YWwiKTsKLQlpZiAoV0FSTl9PTl9PTkNFKHJldCkpCi0JCXByX3dhcm5pbmcoImVycm9yIGVuYWJsaW5nIGZ1bmN0aW9uIHJldHVyblxuIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIHByb2JpbmcgZnVuY3Rpb24gcmV0dXJuLlxuIik7CisJCXdhcm4rKzsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgdHJhY2UgcG9pbnQgKi8KKwkJdHAgPSBmaW5kX3Byb2JlX2V2ZW50KCJ0ZXN0cHJvYmUyIiwgS1BST0JFX0VWRU5UX1NZU1RFTSk7CisJCWlmIChXQVJOX09OX09OQ0UodHAgPT0gTlVMTCkpIHsKKwkJCXByX3dhcm5pbmcoImVycm9yIG9uIGdldHRpbmcgbmV3IHByb2JlLlxuIik7CisJCQl3YXJuKys7CisJCX0gZWxzZQorCQkJcHJvYmVfZXZlbnRfZW5hYmxlKCZ0cC0+Y2FsbCk7CisJfQorCisJaWYgKHdhcm4pCisJCWdvdG8gZW5kOwogCiAJcmV0ID0gdGFyZ2V0KDEsIDIsIDMsIDQsIDUsIDYpOwogCi0JY2xlYW51cF9hbGxfcHJvYmVzKCk7CisJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgiLTp0ZXN0cHJvYmUiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gZGVsZXRpbmcgYSBwcm9iZS5cbiIpOworCQl3YXJuKys7CisJfQogCi0JcHJfY29udCgiT0tcbiIpOworCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoIi06dGVzdHByb2JlMiIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBkZWxldGluZyBhIHByb2JlLlxuIik7CisJCXdhcm4rKzsKKwl9CisKK2VuZDoKKwljbGVhbnVwX2FsbF9wcm9iZXMoKTsKKwlpZiAod2FybikKKwkJcHJfY29udCgiTkc6IFNvbWUgdGVzdHMgYXJlIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZW0uXG4iKTsKKwllbHNlCisJCXByX2NvbnQoIk9LXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA3NTI4OWYzNy4uY2JhNDdkNyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKQEAgLTE0Myw3MCArMTQzLDY1IEBACiAJCSN0eXBlLCAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKHRyYWNlKSwgbmFtZSksCQlcCiAJCXNpemVvZih0cmFjZS5uYW1lKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkKIAotaW50IHN5c2NhbGxfZW50ZXJfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IHRyYWNlX3NlcSAqcykKK3N0YXRpYworaW50ICBfX3NldF9lbnRlcl9wcmludF9mbXQoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5LCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOwotCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyIHRyYWNlOwotCWludCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciwgYXJncyk7CisJaW50IHBvcyA9IDA7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKLQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBucikpOwotCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkvKiBXaGVuIGxlbj0wLCB3ZSBqdXN0IGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworI2RlZmluZSBMRU5fT1JfWkVSTyAobGVuID8gbGVuIC0gcG9zIDogMCkKKworCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiVzOiAweCUlMCV6dWx4JXMiLAorCQkJCWVudHJ5LT5hcmdzW2ldLCBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiIiA6ICIsICIpOworCX0KKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzOyIsIGVudHJ5LT50eXBlc1tpXSwKLQkJCQkgICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRvZmZzZXQ6JWQ7XHRzaXplOiV6dTsiCi0JCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsIG9mZnNldCwKLQkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAotCQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh1bnNpZ25lZCBsb25nKSk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JCW9mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLAorCQkJCSIsICgodW5zaWduZWQgbG9uZykoUkVDLT4lcykpIiwgZW50cnktPmFyZ3NbaV0pOwogCX0KIAotCXRyYWNlX3NlcV9wdXRzKHMsICJcbnByaW50IGZtdDogXCIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogMHglJTAlenVseCVzIiwgZW50cnktPmFyZ3NbaV0sCi0JCQkJICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCi0JCQkJCWkgPT0gZW50cnktPm5iX2FyZ3MgLSAxID8gIiIgOiAiLCAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JdHJhY2Vfc2VxX3B1dGMocywgJyInKTsKKyN1bmRlZiBMRU5fT1JfWkVSTwogCi0JZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCAoKHVuc2lnbmVkIGxvbmcpKFJFQy0+JXMpKSIsCi0JCQkJICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJLyogcmV0dXJuIHRoZSBsZW5ndGggb2YgcHJpbnRfZm10ICovCisJcmV0dXJuIHBvczsKIH0KIAotaW50IHN5c2NhbGxfZXhpdF9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljIGludCBzZXRfc3lzY2FsbF9wcmludF9mbXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCB0cmFjZTsKKwljaGFyICpwcmludF9mbXQ7CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJICAgICAgICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKLQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iCi0JCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCkpOwotCWlmICghcmV0KQorCWlmIChlbnRyeS0+ZW50ZXJfZXZlbnQgIT0gY2FsbCkgeworCQljYWxsLT5wcmludF9mbXQgPSAiXCIweCVseFwiLCBSRUMtPnJldCI7CiAJCXJldHVybiAwOworCX0KIAotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogXCIweCUlbHhcIiwgUkVDLT5yZXRcbiIpOworCS8qIEZpcnN0OiBjYWxsZWQgd2l0aCAwIGxlbmd0aCB0byBjYWxjdWxhdGUgdGhlIG5lZWRlZCBsZW5ndGggKi8KKwlsZW4gPSBfX3NldF9lbnRlcl9wcmludF9mbXQoZW50cnksIE5VTEwsIDApOworCisJcHJpbnRfZm10ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2ZtdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZWNvbmQ6IGFjdHVhbGx5IHdyaXRlIHRoZSBAcHJpbnRfZm10ICovCisJX19zZXRfZW50ZXJfcHJpbnRfZm10KGVudHJ5LCBwcmludF9mbXQsIGxlbiArIDEpOworCWNhbGwtPnByaW50X2ZtdCA9IHByaW50X2ZtdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N5c2NhbGxfcHJpbnRfZm10KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOworCisJaWYgKGVudHJ5LT5lbnRlcl9ldmVudCA9PSBjYWxsKQorCQlrZnJlZShjYWxsLT5wcmludF9mbXQpOwogfQogCiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTM4NiwxMiArMzgxLDIyIEBACiB7CiAJaW50IGlkOwogCi0JaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoY2FsbC0+ZXZlbnQpOwotCWlmICghaWQpCi0JCXJldHVybiAtRU5PREVWOwotCWNhbGwtPmlkID0gaWQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmZpZWxkcyk7Ci0JcmV0dXJuIDA7CisJaWYgKHNldF9zeXNjYWxsX3ByaW50X2ZtdChjYWxsKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWQgPSB0cmFjZV9ldmVudF9yYXdfaW5pdChjYWxsKTsKKworCWlmIChpZCA8IDApIHsKKwkJZnJlZV9zeXNjYWxsX3ByaW50X2ZtdChjYWxsKTsKKwkJcmV0dXJuIGlkOworCX0KKworCXJldHVybiBpZDsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07CiB9CiAKIGludCBfX2luaXQgaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKQEAgLTQyMSw3ICs0MjYsNyBAQAogfQogY29yZV9pbml0Y2FsbChpbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKQEAgLTQzMywxMiArNDM4LDkgQEAKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzX2RhdGE7CiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKnJlYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgc3lzY2FsbF9ucjsKIAlpbnQgcmN0eDsKIAlpbnQgc2l6ZTsKLQlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzKSkKQEAgLTQ1NywzNyArNDU5LDE1IEBACiAJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCiAJCXJldHVybjsKIAotCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKilmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLAorCQkJCXN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQsICZyY3R4LCAmZmxhZ3MpOworCWlmICghcmVjKQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBjcHUpOwotCi0JLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCi0JcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopIHJhd19kYXRhOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZDsKIAlyZWMtPm5yID0gc3lzY2FsbF9ucjsKIAlzeXNjYWxsX2dldF9hcmd1bWVudHMoY3VycmVudCwgcmVncywgMCwgc3lzX2RhdGEtPm5iX2FyZ3MsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmcmVjLT5hcmdzKTsKLQlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQsIDAsIDEsIHJlYywgc2l6ZSk7Ci0KLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChyZWMsIHNpemUsIHJjdHgsIDAsIDEsIGZsYWdzKTsKIH0KIAogaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTUzMSwxMSArNTExLDggQEAKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICpyZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3lzY2FsbF9ucjsKLQljaGFyICp0cmFjZV9idWY7Ci0JY2hhciAqcmF3X2RhdGE7CiAJaW50IHJjdHg7CiAJaW50IHNpemU7Ci0JaW50IGNwdTsKIAogCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKIAlpZiAoIXRlc3RfYml0KHN5c2NhbGxfbnIsIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKSkKQEAgLTU1NywzOCArNTM0LDE1IEBACiAJCSJleGl0IGV2ZW50IGhhcyBncm93biBhYm92ZSBwcm9maWxlIGJ1ZmZlciBzaXplIikpCiAJCXJldHVybjsKIAotCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsCisJCQkJc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkLCAmcmN0eCwgJmZsYWdzKTsKKwlpZiAoIXJlYykKKwkJcmV0dXJuOwogCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKLQlpZiAocmN0eCA8IDApCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7Ci0KLQlpZiAoIXRyYWNlX2J1ZikKLQkJZ290byBlbmQ7Ci0KLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgY3B1KTsKLQotCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQotCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICopcmF3X2RhdGE7Ci0KLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMtPmVudCwgMCwgMCk7Ci0JcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5leGl0X2V2ZW50LT5pZDsKIAlyZWMtPm5yID0gc3lzY2FsbF9ucjsKIAlyZWMtPnJldCA9IHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKTsKIAotCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkLCAwLCAxLCByZWMsIHNpemUpOwotCi1lbmQ6Ci0JcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKLWVuZF9yZWN1cnNpb246Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQocmVjLCBzaXplLCByY3R4LCAwLCAxLCBmbGFncyk7CiB9CiAKIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTYwMyw3ICs1NTcsNyBAQAogCQlyZXQgPSByZWdpc3Rlcl90cmFjZV9zeXNfZXhpdChwcm9mX3N5c2NhbGxfZXhpdCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIgotCQkJCSJzeXNjYWxsIGVudHJ5IHRyYWNlIHBvaW50Iik7CisJCQkJInN5c2NhbGwgZXhpdCB0cmFjZSBwb2ludCIpOwogCX0gZWxzZSB7CiAJCXNldF9iaXQobnVtLCBlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscyk7CiAJCXN5c19wcm9mX3JlZmNvdW50X2V4aXQrKzsKQEAgLTYyNiw2ICs1ODAsNSBAQAogCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKIH0KIAotI2VuZGlmCi0KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggNDZkMDE2NS4uNzY2NDY3YiAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC01Niw5ICs1Niw2IEBACiAJLnNpZ3BlbmRpbmcJPSBBVE9NSUNfSU5JVCgwKSwKIAkubG9ja2VkX3NobSAgICAgPSAwLAogCS51c2VyX25zCT0gJmluaXRfdXNlcl9ucywKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCS50ZwkJPSAmaW5pdF90YXNrX2dyb3VwLAotI2VuZGlmCiB9OwogCiAvKgpAQCAtNzUsMjY4ICs3Miw2IEBACiAJcHV0X3VzZXJfbnModXAtPnVzZXJfbnMpOwogfQogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQotc3RhdGljIHZvaWQgc2NoZWRfZGVzdHJveV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApCi17Ci0Jc2NoZWRfZGVzdHJveV9ncm91cCh1cC0+dGcpOwotfQotCi1zdGF0aWMgaW50IHNjaGVkX2NyZWF0ZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApCi17Ci0JaW50IHJjID0gMDsKLQotCXVwLT50ZyA9IHNjaGVkX2NyZWF0ZV9ncm91cCgmcm9vdF90YXNrX2dyb3VwKTsKLQlpZiAoSVNfRVJSKHVwLT50ZykpCi0JCXJjID0gLUVOT01FTTsKLQotCXNldF90Z191aWQodXApOwotCi0JcmV0dXJuIHJjOwotfQotCi0jZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwotCi1zdGF0aWMgdm9pZCBzY2hlZF9kZXN0cm95X3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyB9Ci1zdGF0aWMgaW50IHNjaGVkX2NyZWF0ZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApIHsgcmV0dXJuIDA7IH0KLQotI2VuZGlmCS8qIENPTkZJR19VU0VSX1NDSEVEICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0VSX1NDSEVEKSAmJiBkZWZpbmVkKENPTkZJR19TWVNGUykKLQotc3RhdGljIHN0cnVjdCB1c2VyX3N0cnVjdCAqdWlkX2hhc2hfZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBobGlzdF9oZWFkICpoYXNoZW50KQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzZXIsIGgsIGhhc2hlbnQsIHVpZGhhc2hfbm9kZSkgewotCQlpZiAodXNlci0+dWlkID09IHVpZCkgewotCQkJLyogcG9zc2libHkgcmVzdXJyZWN0IGFuICJhbG1vc3QgZGVsZXRlZCIgb2JqZWN0ICovCi0JCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnVzZXItPl9fY291bnQpID09IDEpCi0JCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmdXNlci0+d29yayk7Ci0JCQlyZXR1cm4gdXNlcjsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGtzZXQgKnVpZHNfa3NldDsgLyogcmVwcmVzZW50cyB0aGUgL3N5cy9rZXJuZWwvdWlkcy8gZGlyZWN0b3J5ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKHVpZHNfbXV0ZXgpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF9sb2NrKHZvaWQpCi17Ci0JbXV0ZXhfbG9jaygmdWlkc19tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X3VubG9jayh2b2lkKQotewotCW11dGV4X3VubG9jaygmdWlkc19tdXRleCk7Ci19Ci0KLS8qIHVpZCBkaXJlY3RvcnkgYXR0cmlidXRlcyAqLwotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi1zdGF0aWMgc3NpemVfdCBjcHVfc2hhcmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHNjaGVkX2dyb3VwX3NoYXJlcyh1cC0+dGcpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgY3B1X3NoYXJlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBzaGFyZXM7Ci0JaW50IHJjOwotCi0Jc3NjYW5mKGJ1ZiwgIiVsdSIsICZzaGFyZXMpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfc2hhcmVzKHVwLT50Zywgc2hhcmVzKTsKLQotCXJldHVybiAocmMgPyByYyA6IHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9zaGFyZV9hdHRyID0KLQlfX0FUVFIoY3B1X3NoYXJlLCAwNjQ0LCBjcHVfc2hhcmVzX3Nob3csIGNwdV9zaGFyZXNfc3RvcmUpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9ydW50aW1lX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCSAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHNjaGVkX2dyb3VwX3J0X3J1bnRpbWUodXAtPnRnKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9ydW50aW1lX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCXVuc2lnbmVkIGxvbmcgcnRfcnVudGltZTsKLQlpbnQgcmM7Ci0KLQlzc2NhbmYoYnVmLCAiJWxkIiwgJnJ0X3J1bnRpbWUpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfcnRfcnVudGltZSh1cC0+dGcsIHJ0X3J1bnRpbWUpOwotCi0JcmV0dXJuIChyYyA/IHJjIDogc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3B1X3J0X3J1bnRpbWVfYXR0ciA9Ci0JX19BVFRSKGNwdV9ydF9ydW50aW1lLCAwNjQ0LCBjcHVfcnRfcnVudGltZV9zaG93LCBjcHVfcnRfcnVudGltZV9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9wZXJpb2Rfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgc2NoZWRfZ3JvdXBfcnRfcGVyaW9kKHVwLT50ZykpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjcHVfcnRfcGVyaW9kX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCXVuc2lnbmVkIGxvbmcgcnRfcGVyaW9kOwotCWludCByYzsKLQotCXNzY2FuZihidWYsICIlbHUiLCAmcnRfcGVyaW9kKTsKLQotCXJjID0gc2NoZWRfZ3JvdXBfc2V0X3J0X3BlcmlvZCh1cC0+dGcsIHJ0X3BlcmlvZCk7Ci0KLQlyZXR1cm4gKHJjID8gcmMgOiBzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfcnRfcGVyaW9kX2F0dHIgPQotCV9fQVRUUihjcHVfcnRfcGVyaW9kLCAwNjQ0LCBjcHVfcnRfcGVyaW9kX3Nob3csIGNwdV9ydF9wZXJpb2Rfc3RvcmUpOwotI2VuZGlmCi0KLS8qIGRlZmF1bHQgYXR0cmlidXRlcyBwZXIgdWlkIGRpcmVjdG9yeSAqLwotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnVpZHNfYXR0cmlidXRlc1tdID0gewotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi0JJmNwdV9zaGFyZV9hdHRyLmF0dHIsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQkmY3B1X3J0X3J1bnRpbWVfYXR0ci5hdHRyLAotCSZjcHVfcnRfcGVyaW9kX2F0dHIuYXR0ciwKLSNlbmRpZgotCU5VTEwKLX07Ci0KLS8qIHRoZSBsaWZldGltZSBvZiB1c2VyX3N0cnVjdCBpcyBub3QgbWFuYWdlZCBieSB0aGUgY29yZSAobm93KSAqLwotc3RhdGljIHZvaWQgdWlkc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdWlkc19rdHlwZSA9IHsKLQkuc3lzZnNfb3BzID0gJmtvYmpfc3lzZnNfb3BzLAotCS5kZWZhdWx0X2F0dHJzID0gdWlkc19hdHRyaWJ1dGVzLAotCS5yZWxlYXNlID0gdWlkc19yZWxlYXNlLAotfTsKLQotLyoKLSAqIENyZWF0ZSAvc3lzL2tlcm5lbC91aWRzLzx1aWQ+L2NwdV9zaGFyZSBmaWxlIGZvciB0aGlzIHVzZXIKLSAqIFdlIGRvIG5vdCBjcmVhdGUgdGhpcyBmaWxlIGZvciB1c2VycyBpbiBhIHVzZXIgbmFtZXNwYWNlICh1bnRpbAotICogc3lzZnMgdGFnZ2luZyBpcyBpbXBsZW1lbnRlZCkuCi0gKgotICogU2VlIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMudHh0IGZvciByYW1pZmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHVpZHNfdXNlcl9jcmVhdGUoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlzdHJ1Y3Qga29iamVjdCAqa29iaiA9ICZ1cC0+a29iajsKLQlpbnQgZXJyb3I7Ci0KLQltZW1zZXQoa29iaiwgMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7Ci0JaWYgKHVwLT51c2VyX25zICE9ICZpbml0X3VzZXJfbnMpCi0JCXJldHVybiAwOwotCWtvYmotPmtzZXQgPSB1aWRzX2tzZXQ7Ci0JZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChrb2JqLCAmdWlkc19rdHlwZSwgTlVMTCwgIiVkIiwgdXAtPnVpZCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWtvYmplY3RfcHV0KGtvYmopOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0Ja29iamVjdF91ZXZlbnQoa29iaiwgS09CSl9BREQpOwotZG9uZToKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIGNyZWF0ZSB0aGVzZSBlbnRyaWVzIGluIHN5c2ZzOgotICogCSIvc3lzL2tlcm5lbC91aWRzIiBkaXJlY3RvcnkKLSAqIAkiL3N5cy9rZXJuZWwvdWlkcy8wIiBkaXJlY3RvcnkgKGZvciByb290IHVzZXIpCi0gKiAJIi9zeXMva2VybmVsL3VpZHMvMC9jcHVfc2hhcmUiIGZpbGUgKGZvciByb290IHVzZXIpCi0gKi8KLWludCBfX2luaXQgdWlkc19zeXNmc19pbml0KHZvaWQpCi17Ci0JdWlkc19rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgidWlkcyIsIE5VTEwsIGtlcm5lbF9rb2JqKTsKLQlpZiAoIXVpZHNfa3NldCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gdWlkc191c2VyX2NyZWF0ZSgmcm9vdF91c2VyKTsKLX0KLQotLyogZGVsYXllZCB3b3JrIGZ1bmN0aW9uIHRvIHJlbW92ZSBzeXNmcyBkaXJlY3RvcnkgZm9yIGEgdXNlciBhbmQgZnJlZSB1cAotICogY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmVzLgotICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX3VzZXJfc3RydWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB1c2VyX3N0cnVjdCwgd29yay53b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZW1vdmVfdXNlciA9IDA7Ci0KLQkvKiBNYWtlIHVpZF9oYXNoX3JlbW92ZSgpICsgc3lzZnNfcmVtb3ZlX2ZpbGUoKSArIGtvYmplY3RfZGVsKCkKLQkgKiBhdG9taWMuCi0JICovCi0JdWlkc19tdXRleF9sb2NrKCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZ1cC0+X19jb3VudCkgPT0gMCkgewotCQl1aWRfaGFzaF9yZW1vdmUodXApOwotCQlyZW1vdmVfdXNlciA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFyZW1vdmVfdXNlcikKLQkJZ290byBkb25lOwotCi0JaWYgKHVwLT51c2VyX25zID09ICZpbml0X3VzZXJfbnMpIHsKLQkJa29iamVjdF91ZXZlbnQoJnVwLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZ1cC0+a29iaik7Ci0JCWtvYmplY3RfcHV0KCZ1cC0+a29iaik7Ci0JfQotCi0Jc2NoZWRfZGVzdHJveV91c2VyKHVwKTsKLQlrZXlfcHV0KHVwLT51aWRfa2V5cmluZyk7Ci0Ja2V5X3B1dCh1cC0+c2Vzc2lvbl9rZXlyaW5nKTsKLQlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgdXApOwotCi1kb25lOgotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7Ci19Ci0KLS8qIElSUXMgYXJlIGRpc2FibGVkIGFuZCB1aWRoYXNoX2xvY2sgaXMgaGVsZCB1cG9uIGZ1bmN0aW9uIGVudHJ5LgotICogSVJRIHN0YXRlIChhcyBzdG9yZWQgaW4gZmxhZ3MpIGlzIHJlc3RvcmVkIGFuZCB1aWRoYXNoX2xvY2sgcmVsZWFzZWQKLSAqIHVwb24gZnVuY3Rpb24gZXhpdC4KLSAqLwotc3RhdGljIHZvaWQgZnJlZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnVwLT53b3JrLCBjbGVhbnVwX3VzZXJfc3RydWN0KTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVwLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgJiYgQ09ORklHX1NZU0ZTICovCi0KIHN0YXRpYyBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVpZF9oYXNoX2ZpbmQodWlkX3QgdWlkLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaGVudCkKIHsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CkBAIC0zNTIsMTEgKzg3LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IHVpZHNfc3lzZnNfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCB1aWRzX3VzZXJfY3JlYXRlKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X2xvY2sodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF91bmxvY2sodm9pZCkgeyB9Ci0KIC8qIElSUXMgYXJlIGRpc2FibGVkIGFuZCB1aWRoYXNoX2xvY2sgaXMgaGVsZCB1cG9uIGZ1bmN0aW9uIGVudHJ5LgogICogSVJRIHN0YXRlIChhcyBzdG9yZWQgaW4gZmxhZ3MpIGlzIHJlc3RvcmVkIGFuZCB1aWRoYXNoX2xvY2sgcmVsZWFzZWQKICAqIHVwb24gZnVuY3Rpb24gZXhpdC4KQEAgLTM2NSwzMiArOTUsMTEgQEAKIHsKIAl1aWRfaGFzaF9yZW1vdmUodXApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotCXNjaGVkX2Rlc3Ryb3lfdXNlcih1cCk7CiAJa2V5X3B1dCh1cC0+dWlkX2tleXJpbmcpOwogCWtleV9wdXQodXAtPnNlc3Npb25fa2V5cmluZyk7CiAJa21lbV9jYWNoZV9mcmVlKHVpZF9jYWNoZXAsIHVwKTsKIH0KIAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVF9HUk9VUF9TQ0hFRCkgJiYgZGVmaW5lZChDT05GSUdfVVNFUl9TQ0hFRCkKLS8qCi0gKiBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgc2V0dWlkIGNhbiB0YWtlIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQKLSAqIGJlZm9yZSBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgc2V0dWlkLgotICovCi1pbnQgdGFza19jYW5fc3dpdGNoX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0KLQlyZXR1cm4gc2NoZWRfcnRfY2FuX2F0dGFjaCh1cC0+dGcsIHRzayk7Ci0KLX0KLSNlbHNlCi1pbnQgdGFza19jYW5fc3dpdGNoX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQogLyoKICAqIExvY2F0ZSB0aGUgdXNlcl9zdHJ1Y3QgZm9yIHRoZSBwYXNzZWQgVUlELiAgSWYgZm91bmQsIHRha2UgYSByZWYgb24gaXQuICBUaGUKICAqIGNhbGxlciBtdXN0IHVuZG8gdGhhdCByZWYgd2l0aCBmcmVlX3VpZCgpLgpAQCAtNDMxLDggKzE0MCw2IEBACiAJLyogTWFrZSB1aWRfaGFzaF9maW5kKCkgKyB1aWRzX3VzZXJfY3JlYXRlKCkgKyB1aWRfaGFzaF9pbnNlcnQoKQogCSAqIGF0b21pYy4KIAkgKi8KLQl1aWRzX211dGV4X2xvY2soKTsKLQogCXNwaW5fbG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CiAJdXAgPSB1aWRfaGFzaF9maW5kKHVpZCwgaGFzaGVudCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ1aWRoYXNoX2xvY2spOwpAQCAtNDQ1LDE0ICsxNTIsOCBAQAogCQluZXctPnVpZCA9IHVpZDsKIAkJYXRvbWljX3NldCgmbmV3LT5fX2NvdW50LCAxKTsKIAotCQlpZiAoc2NoZWRfY3JlYXRlX3VzZXIobmV3KSA8IDApCi0JCQlnb3RvIG91dF9mcmVlX3VzZXI7Ci0KIAkJbmV3LT51c2VyX25zID0gZ2V0X3VzZXJfbnMobnMpOwogCi0JCWlmICh1aWRzX3VzZXJfY3JlYXRlKG5ldykpCi0JCQlnb3RvIG91dF9kZXN0b3lfc2NoZWQ7Ci0KIAkJLyoKIAkJICogQmVmb3JlIGFkZGluZyB0aGlzLCBjaGVjayB3aGV0aGVyIHdlIHJhY2VkCiAJCSAqIG9uIGFkZGluZyB0aGUgc2FtZSB1c2VyIGFscmVhZHkuLgpAQCAtNDc1LDE3ICsxNzYsMTEgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZ1aWRoYXNoX2xvY2spOwogCX0KIAotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7Ci0KIAlyZXR1cm4gdXA7CiAKLW91dF9kZXN0b3lfc2NoZWQ6Ci0Jc2NoZWRfZGVzdHJveV91c2VyKG5ldyk7CiAJcHV0X3VzZXJfbnMobmV3LT51c2VyX25zKTsKLW91dF9mcmVlX3VzZXI6CiAJa21lbV9jYWNoZV9mcmVlKHVpZF9jYWNoZXAsIG5ldyk7CiBvdXRfdW5sb2NrOgotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMjVjM2VkNS4uNWUzNDA3ZCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM1NSw3ICszNTUsNyBAQAogY29uZmlnIERFQlVHX0tNRU1MRUFLCiAJYm9vbCAiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAhTUVNT1JZX0hPVFBMVUcgJiYgXAotCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCkKKwkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IFMzOTAgfHwgU1VQRVJIKQogCiAJc2VsZWN0IERFQlVHX0ZTIGlmIFNZU0ZTCiAJc2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUCkBAIC00OTksNiArNDk5LDE4IEBACiAKIAkgRm9yIG1vcmUgZGV0YWlscywgc2VlIERvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0LgogCitjb25maWcgUFJPVkVfUkNVCisJYm9vbCAiUkNVIGRlYnVnZ2luZzogcHJvdmUgUkNVIGNvcnJlY3RuZXNzIgorCWRlcGVuZHMgb24gUFJPVkVfTE9DS0lORworCWRlZmF1bHQgbgorCWhlbHAKKwkgVGhpcyBmZWF0dXJlIGVuYWJsZXMgbG9ja2RlcCBleHRlbnNpb25zIHRoYXQgY2hlY2sgZm9yIGNvcnJlY3QKKwkgdXNlIG9mIFJDVSBBUElzLiAgVGhpcyBpcyBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQuICBTYXkgWQorCSBpZiB5b3Ugd2FudCB0byBkZWJ1ZyBSQ1UgdXNhZ2Ugb3IgaGVscCB3b3JrIG9uIHRoZSBQUk9WRV9SQ1UKKwkgZmVhdHVyZS4KKworCSBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIExPQ0tERVAKIAlib29sCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCkBAIC03NjUsMTAgKzc3NywyMiBAQAogCSAgQ1BVcyBhcmUgZGVsYXlpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLCBidXQgb25seSB3aGVuCiAJICB0aGUgZ3JhY2UgcGVyaW9kIGV4dGVuZHMgZm9yIGV4Y2Vzc2l2ZSB0aW1lIHBlcmlvZHMuCiAKLQkgIFNheSBZIGlmIHlvdSB3YW50IFJDVSB0byBwZXJmb3JtIHN1Y2ggY2hlY2tzLgorCSAgU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBzdWNoIGNoZWNrcy4KKworCSAgU2F5IFkgaWYgeW91IGFyZSB1bnN1cmUuCisKK2NvbmZpZyBSQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKKwlib29sICJQcmludCBhZGRpdGlvbmFsIHBlci10YXNrIGluZm9ybWF0aW9uIGZvciBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIgorCWRlcGVuZHMgb24gUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAmJiBUUkVFX1BSRUVNUFRfUkNVCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIFJDVSB0byBwcmludGsgZGV0YWlsZWQgcGVyLXRhc2sgaW5mb3JtYXRpb24KKwkgIGZvciBhbnkgdGFza3MgdGhhdCBhcmUgc3RhbGxpbmcgdGhlIGN1cnJlbnQgUkNVIGdyYWNlIHBlcmlvZC4KIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdWNoIGNoZWNrcy4KKwogY29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1QKIAlib29sICJLcHJvYmVzIHNhbml0eSB0ZXN0cyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvbGliL2RlYnVnX2xvY2tzLmMgYi9saWIvZGVidWdfbG9ja3MuYwppbmRleCBiYzNiMTE3Li41YmYwMDIwIDEwMDY0NAotLS0gYS9saWIvZGVidWdfbG9ja3MuYworKysgYi9saWIvZGVidWdfbG9ja3MuYwpAQCAtMjMsNiArMjMsNyBAQAogICogc2h1dCB1cCBhZnRlciB0aGF0LgogICovCiBpbnQgZGVidWdfbG9ja3MgPSAxOworRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdfbG9ja3MpOwogCiAvKgogICogVGhlIGxvY2tpbmctdGVzdHN1aXRlIHVzZXMgPGRlYnVnX2xvY2tzX3NpbGVudD4gdG8gZ2V0IGEKZGlmZiAtLWdpdCBhL2xpYi9od2VpZ2h0LmMgYi9saWIvaHdlaWdodC5jCmluZGV4IDM4OTQyNGUuLjYzZWU0ZWIgMTAwNjQ0Ci0tLSBhL2xpYi9od2VpZ2h0LmMKKysrIGIvbGliL2h3ZWlnaHQuYwpAQCAtMTEsMTEgKzExLDE4IEBACiAKIHVuc2lnbmVkIGludCBod2VpZ2h0MzIodW5zaWduZWQgaW50IHcpCiB7CisjaWZkZWYgQVJDSF9IQVNfRkFTVF9NVUxUSVBMSUVSCisJdyAtPSAodyA+PiAxKSAmIDB4NTU1NTU1NTU7CisJdyA9ICAodyAmIDB4MzMzMzMzMzMpICsgKCh3ID4+IDIpICYgMHgzMzMzMzMzMyk7CisJdyA9ICAodyArICh3ID4+IDQpKSAmIDB4MGYwZjBmMGY7CisJcmV0dXJuICh3ICogMHgwMTAxMDEwMSkgPj4gMjQ7CisjZWxzZQogCXVuc2lnbmVkIGludCByZXMgPSB3IC0gKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CiAJcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKIAlyZXMgPSAocmVzICsgKHJlcyA+PiA0KSkgJiAweDBGMEYwRjBGOwogCXJlcyA9IHJlcyArIChyZXMgPj4gOCk7CiAJcmV0dXJuIChyZXMgKyAocmVzID4+IDE2KSkgJiAweDAwMDAwMEZGOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKGh3ZWlnaHQzMik7CiAKZGlmZiAtLWdpdCBhL2xpYi9pZHIuYyBiL2xpYi9pZHIuYwppbmRleCAwZGM3ODIyLi4yZWIxZGNhIDEwMDY0NAotLS0gYS9saWIvaWRyLmMKKysrIGIvbGliL2lkci5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAlpbnQgbjsKIAlzdHJ1Y3QgaWRyX2xheWVyICpwOwogCi0JcCA9IHJjdV9kZXJlZmVyZW5jZShpZHAtPnRvcCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaWRwLT50b3ApOwogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJbiA9IChwLT5sYXllcisxKSAqIElEUl9CSVRTOwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJd2hpbGUgKG4gPiAwICYmIHApIHsKIAkJbiAtPSBJRFJfQklUUzsKIAkJQlVHX09OKG4gIT0gcC0+bGF5ZXIqSURSX0JJVFMpOwotCQlwID0gcmN1X2RlcmVmZXJlbmNlKHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOworCQlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKIAl9CiAJcmV0dXJuKCh2b2lkICopcCk7CiB9CkBAIC01NTIsNyArNTUyLDcgQEAKIAlzdHJ1Y3QgaWRyX2xheWVyICoqcGFhID0gJnBhWzBdOwogCiAJbiA9IGlkcC0+bGF5ZXJzICogSURSX0JJVFM7Ci0JcCA9IHJjdV9kZXJlZmVyZW5jZShpZHAtPnRvcCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaWRwLT50b3ApOwogCW1heCA9IDEgPDwgbjsKIAogCWlkID0gMDsKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQl3aGlsZSAobiA+IDAgJiYgcCkgewogCQkJbiAtPSBJRFJfQklUUzsKIAkJCSpwYWErKyA9IHA7Ci0JCQlwID0gcmN1X2RlcmVmZXJlbmNlKHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOworCQkJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CiAJCX0KIAogCQlpZiAocCkgewpkaWZmIC0tZ2l0IGEvbGliL2xtYi5jIGIvbGliL2xtYi5jCmluZGV4IDljZWUxNzEuLmIxZmM1MjYgMTAwNjQ0Ci0tLSBhL2xpYi9sbWIuYworKysgYi9saWIvbG1iLmMKQEAgLTIwNSw5ICsyMDUsOCBAQAogCiB9CiAKLWxvbmcgbG1iX3JlbW92ZSh1NjQgYmFzZSwgdTY0IHNpemUpCitzdGF0aWMgbG9uZyBfX2xtYl9yZW1vdmUoc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdTY0IGJhc2UsIHU2NCBzaXplKQogewotCXN0cnVjdCBsbWJfcmVnaW9uICpyZ24gPSAmKGxtYi5tZW1vcnkpOwogCXU2NCByZ25iZWdpbiwgcmduZW5kOwogCXU2NCBlbmQgPSBiYXNlICsgc2l6ZTsKIAlpbnQgaTsKQEAgLTI1NCw2ICsyNTMsMTYgQEAKIAlyZXR1cm4gbG1iX2FkZF9yZWdpb24ocmduLCBlbmQsIHJnbmVuZCAtIGVuZCk7CiB9CiAKK2xvbmcgbG1iX3JlbW92ZSh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJcmV0dXJuIF9fbG1iX3JlbW92ZSgmbG1iLm1lbW9yeSwgYmFzZSwgc2l6ZSk7Cit9CisKK2xvbmcgX19pbml0IGxtYl9mcmVlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gX19sbWJfcmVtb3ZlKCZsbWIucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworfQorCiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1NjQgYmFzZSwgdTY0IHNpemUpCiB7CiAJc3RydWN0IGxtYl9yZWdpb24gKl9yZ24gPSAmbG1iLnJlc2VydmVkOwpkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggOTJjZGQ5OS4uNmI5NjcwZCAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAl1bnNpZ25lZCBpbnQgaGVpZ2h0LCBzaGlmdDsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlLCAqKnNsb3Q7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKG5vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCWRvIHsKIAkJc2xvdCA9IChzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICoqKQogCQkJKG5vZGUtPnNsb3RzICsgKChpbmRleD4+c2hpZnQpICYgUkFESVhfVFJFRV9NQVBfTUFTSykpOwotCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKCpzbG90KTsKKwkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKnNsb3QpOwogCQlpZiAobm9kZSA9PSBOVUxMKQogCQkJcmV0dXJuIE5VTEw7CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAwOwogCkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCUJVR19PTihyZXQgJiYgc2F3X3Vuc2V0X3RhZyk7CiAJCQlyZXR1cm4gISFyZXQ7CiAJCX0KLQkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShub2RlLT5zbG90c1tvZmZzZXRdKTsKKwkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+c2xvdHNbb2Zmc2V0XSk7CiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwogCQloZWlnaHQtLTsKIAl9CkBAIC03MTEsNyArNzExLDcgQEAKIAkJfQogCiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwotCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QtPnNsb3RzW2ldKTsKKwkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdC0+c2xvdHNbaV0pOwogCQlpZiAoc2xvdCA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNzU4LDcgKzc1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXggPSBmaXJzdF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCQkJc2xvdCA9ICooKCh2b2lkICoqKilyZXN1bHRzKVtyZXQgKyBpXSk7CiAJCQlpZiAoIXNsb3QpCiAJCQkJY29udGludWU7Ci0JCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZShzbG90KTsKKwkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90KTsKIAkJCW5yX2ZvdW5kKys7CiAJCX0KIAkJcmV0ICs9IG5yX2ZvdW5kOwpAQCAtODI2LDcgKzgyNiw3IEBACiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXggPSBmaXJzdF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTkxNSw3ICs5MTUsNyBAQAogCQkJfQogCQl9CiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwotCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QtPnNsb3RzW2ldKTsKKwkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdC0+c2xvdHNbaV0pOwogCQlpZiAoc2xvdCA9PSBOVUxMKQogCQkJYnJlYWs7CiAJfQpAQCAtOTUxLDcgKzk1MSw3IEBACiAJaWYgKCFyb290X3RhZ19nZXQocm9vdCwgdGFnKSkKIAkJcmV0dXJuIDA7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gMDsKIApAQCAtOTgwLDcgKzk4MCw3IEBACiAJCQlzbG90ID0gKigoKHZvaWQgKioqKXJlc3VsdHMpW3JldCArIGldKTsKIAkJCWlmICghc2xvdCkKIAkJCQljb250aW51ZTsKLQkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QpOworCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QpOwogCQkJbnJfZm91bmQrKzsKIAkJfQogCQlyZXQgKz0gbnJfZm91bmQ7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggM2I4YWVlYy4uYWY0YWFhNiAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTY4MSwyNCArNjgxLDU1IEBACiAJY2hhciBtYWNfYWRkcltzaXplb2YoInh4Onh4Onh4Onh4Onh4Onh4IildOwogCWNoYXIgKnAgPSBtYWNfYWRkcjsKIAlpbnQgaTsKKwljaGFyIHNlcGFyYXRvcjsKKworCWlmIChmbXRbMV0gPT0gJ0YnKSB7CQkvKiBGRERJIGNhbm9uaWNhbCBmb3JtYXQgKi8KKwkJc2VwYXJhdG9yID0gJy0nOworCX0gZWxzZSB7CisJCXNlcGFyYXRvciA9ICc6JzsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbaV0pOwogCQlpZiAoZm10WzBdID09ICdNJyAmJiBpICE9IDUpCi0JCQkqcCsrID0gJzonOworCQkJKnArKyA9IHNlcGFyYXRvcjsKIAl9CiAJKnAgPSAnXDAnOwogCiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgbWFjX2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA0X3N0cmluZyhjaGFyICpwLCBjb25zdCB1OCAqYWRkciwgYm9vbCBsZWFkaW5nX3plcm9zKQorc3RhdGljIGNoYXIgKmlwNF9zdHJpbmcoY2hhciAqcCwgY29uc3QgdTggKmFkZHIsIGNvbnN0IGNoYXIgKmZtdCkKIHsKIAlpbnQgaTsKKwlib29sIGxlYWRpbmdfemVyb3MgPSAoZm10WzBdID09ICdpJyk7CisJaW50IGluZGV4OworCWludCBzdGVwOwogCisJc3dpdGNoIChmbXRbMl0pIHsKKwljYXNlICdoJzoKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaW5kZXggPSAwOworCQlzdGVwID0gMTsKKyNlbHNlCisJCWluZGV4ID0gMzsKKwkJc3RlcCA9IC0xOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ2wnOgorCQlpbmRleCA9IDM7CisJCXN0ZXAgPSAtMTsKKwkJYnJlYWs7CisJY2FzZSAnbic6CisJY2FzZSAnYic6CisJZGVmYXVsdDoKKwkJaW5kZXggPSAwOworCQlzdGVwID0gMTsKKwkJYnJlYWs7CisJfQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJY2hhciB0ZW1wWzNdOwkvKiBob2xkIGVhY2ggSVAgcXVhZCBpbiByZXZlcnNlIG9yZGVyICovCi0JCWludCBkaWdpdHMgPSBwdXRfZGVjX3RydW5jKHRlbXAsIGFkZHJbaV0pIC0gdGVtcDsKKwkJaW50IGRpZ2l0cyA9IHB1dF9kZWNfdHJ1bmModGVtcCwgYWRkcltpbmRleF0pIC0gdGVtcDsKIAkJaWYgKGxlYWRpbmdfemVyb3MpIHsKIAkJCWlmIChkaWdpdHMgPCAzKQogCQkJCSpwKysgPSAnMCc7CkBAIC03MTAsNiArNzQxLDcgQEAKIAkJCSpwKysgPSB0ZW1wW2RpZ2l0c107CiAJCWlmIChpIDwgMykKIAkJCSpwKysgPSAnLic7CisJCWluZGV4ICs9IHN0ZXA7CiAJfQogCSpwID0gJ1wwJzsKIApAQCAtNzg5LDcgKzgyMSw3IEBACiAJaWYgKHVzZUlQdjQpIHsKIAkJaWYgKG5lZWRjb2xvbikKIAkJCSpwKysgPSAnOic7Ci0JCXAgPSBpcDRfc3RyaW5nKHAsICZpbjYuczZfYWRkclsxMl0sIGZhbHNlKTsKKwkJcCA9IGlwNF9zdHJpbmcocCwgJmluNi5zNl9hZGRyWzEyXSwgIkk0Iik7CiAJfQogCSpwID0gJ1wwJzsKIApAQCAtODI5LDcgKzg2MSw3IEBACiB7CiAJY2hhciBpcDRfYWRkcltzaXplb2YoIjI1NS4yNTUuMjU1LjI1NSIpXTsKIAotCWlwNF9zdHJpbmcoaXA0X2FkZHIsIGFkZHIsIGZtdFswXSA9PSAnaScpOworCWlwNF9zdHJpbmcoaXA0X2FkZHIsIGFkZHIsIGZtdCk7CiAKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDRfYWRkciwgc3BlYyk7CiB9CkBAIC04OTYsMTIgKzkyOCwxNSBAQAogICogLSAnTScgRm9yIGEgNi1ieXRlIE1BQyBhZGRyZXNzLCBpdCBwcmludHMgdGhlIGFkZHJlc3MgaW4gdGhlCiAgKiAgICAgICB1c3VhbCBjb2xvbi1zZXBhcmF0ZWQgaGV4IG5vdGF0aW9uCiAgKiAtICdtJyBGb3IgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIGl0IHByaW50cyB0aGUgaGV4IGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqIC0gJ01GJyBGb3IgYSA2LWJ5dGUgTUFDIEZEREkgYWRkcmVzcywgaXQgcHJpbnRzIHRoZSBhZGRyZXNzCisgKiAgICAgICB3aXRoIGEgZGFzaC1zZXBhcmF0ZWQgaGV4IG5vdGF0aW9uCiAgKiAtICdJJyBbNDZdIGZvciBJUHY0L0lQdjYgYWRkcmVzc2VzIHByaW50ZWQgaW4gdGhlIHVzdWFsIHdheQogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRob3V0IGxlYWRpbmcgMCdzICgxLjIuMy40KQogICogICAgICAgSVB2NiB1c2VzIGNvbG9uIHNlcGFyYXRlZCBuZXR3b3JrLW9yZGVyIDE2IGJpdCBoZXggd2l0aCBsZWFkaW5nIDAncwogICogLSAnaScgWzQ2XSBmb3IgJ3JhdycgSVB2NC9JUHY2IGFkZHJlc3NlcwogICogICAgICAgSVB2NiBvbWl0cyB0aGUgY29sb25zICgwMTAyMDMwNC4uLjBmKQogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRoIGxlYWRpbmcgMCdzICgwMTAuMTIzLjA0NS4wMDYpCisgKiAtICdbSWldNFtobmJsXScgSVB2NCBhZGRyZXNzZXMgaW4gaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5CiAgKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTAwCiAgKiAtICdVJyBGb3IgYSAxNiBieXRlIFVVSUQvR1VJRCwgaXQgcHJpbnRzIHRoZSBVVUlEL0dVSUQgaW4gdGhlIGZvcm0KQEAgLTkzOSw2ICs5NzQsNyBAQAogCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CiAJY2FzZSAnTSc6CQkJLyogQ29sb24gc2VwYXJhdGVkOiAwMDowMTowMjowMzowNDowNSAqLwogCWNhc2UgJ20nOgkJCS8qIENvbnRpZ3VvdXM6IDAwMDEwMjAzMDQwNSAqLworCQkJCQkvKiBbbU1dRiAoRkRESSwgYml0IHJldmVyc2VkKSAqLwogCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CiAJY2FzZSAnSSc6CQkJLyogRm9ybWF0dGVkIElQIHN1cHBvcnRlZAogCQkJCQkgKiA0OgkxLjIuMy40CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAxN2I4OTQ3Li45YzYxMTU4IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTExNSw2ICsxMTUsMTAgQEAKIGNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKIAlib29sCiAKK2NvbmZpZyBTUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBYODZfNjQKKwogY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQCiAJYm9vbCAiU3BhcnNlIE1lbW9yeSB2aXJ0dWFsIG1lbW1hcCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKQEAgLTE5NSw3ICsxOTksNyBAQAogY29uZmlnIE5SX1FVSUNLCiAJaW50CiAJZGVwZW5kcyBvbiBRVUlDS0xJU1QKLQlkZWZhdWx0ICIyIiBpZiBTVVBFUkggfHwgQVZSMzIKKwlkZWZhdWx0ICIyIiBpZiBBVlIzMgogCWRlZmF1bHQgIjEiCiAKIGNvbmZpZyBWSVJUX1RPX0JVUwpkaWZmIC0tZ2l0IGEvbW0vYm9vdG1lbS5jIGIvbW0vYm9vdG1lbS5jCmluZGV4IDdkMTQ4NjguLmQ3Yzc5MWUgMTAwNjQ0Ci0tLSBhL21tL2Jvb3RtZW0uYworKysgYi9tbS9ib290bWVtLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzIsNiArMzMsNyBAQAogdW5zaWduZWQgbG9uZyBzYXZlZF9tYXhfcGZuOwogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KIGJvb3RtZW1fZGF0YV90IGJvb3RtZW1fbm9kZV9kYXRhW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYmRhdGFfbGlzdCBfX2luaXRkYXRhID0gTElTVF9IRUFEX0lOSVQoYmRhdGFfbGlzdCk7CkBAIC0xNDIsNyArMTQ0LDcgQEAKIAltaW5fbG93X3BmbiA9IHN0YXJ0OwogCXJldHVybiBpbml0X2Jvb3RtZW1fY29yZShOT0RFX0RBVEEoMCktPmJkYXRhLCBzdGFydCwgMCwgcGFnZXMpOwogfQotCisjZW5kaWYKIC8qCiAgKiBmcmVlX2Jvb3RtZW1fbGF0ZSAtIGZyZWUgYm9vdG1lbSBwYWdlcyBkaXJlY3RseSB0byBwYWdlIGFsbG9jYXRvcgogICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHJhbmdlCkBAIC0xNjcsNiArMTY5LDYwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KK3N0YXRpYyB2b2lkIF9faW5pdCBfX2ZyZWVfcGFnZXNfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWxpZ25lZCwgZW5kX2FsaWduZWQ7CisJaW50IG9yZGVyID0gaWxvZzIoQklUU19QRVJfTE9ORyk7CisKKwlzdGFydF9hbGlnbmVkID0gKHN0YXJ0ICsgKEJJVFNfUEVSX0xPTkcgLSAxKSkgJiB+KEJJVFNfUEVSX0xPTkcgLSAxKTsKKwllbmRfYWxpZ25lZCA9IGVuZCAmIH4oQklUU19QRVJfTE9ORyAtIDEpOworCisJaWYgKGVuZF9hbGlnbmVkIDw9IHN0YXJ0X2FsaWduZWQpIHsKKyNpZiAxCisJCXByaW50ayhLRVJOX0RFQlVHICIgJWx4IC0gJWx4XG4iLCBzdGFydCwgZW5kKTsKKyNlbmRpZgorCQlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorCQkJX19mcmVlX3BhZ2VzX2Jvb3RtZW0ocGZuX3RvX3BhZ2UoaSksIDApOworCisJCXJldHVybjsKKwl9CisKKyNpZiAxCisJcHJpbnRrKEtFUk5fREVCVUcgIiAlbHggJWx4IC0gJWx4ICVseFxuIiwKKwkJIHN0YXJ0LCBzdGFydF9hbGlnbmVkLCBlbmRfYWxpZ25lZCwgZW5kKTsKKyNlbmRpZgorCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnRfYWxpZ25lZDsgaSsrKQorCQlfX2ZyZWVfcGFnZXNfYm9vdG1lbShwZm5fdG9fcGFnZShpKSwgMCk7CisKKwlmb3IgKGkgPSBzdGFydF9hbGlnbmVkOyBpIDwgZW5kX2FsaWduZWQ7IGkgKz0gQklUU19QRVJfTE9ORykKKwkJX19mcmVlX3BhZ2VzX2Jvb3RtZW0ocGZuX3RvX3BhZ2UoaSksIG9yZGVyKTsKKworCWZvciAoaSA9IGVuZF9hbGlnbmVkOyBpIDwgZW5kOyBpKyspCisJCV9fZnJlZV9wYWdlc19ib290bWVtKHBmbl90b19wYWdlKGkpLCAwKTsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9hbGxfbWVtb3J5X2NvcmVfZWFybHkoaW50IG5vZGVpZCkKK3sKKwlpbnQgaTsKKwl1NjQgc3RhcnQsIGVuZDsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwlzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gTlVMTDsKKwlpbnQgbnJfcmFuZ2U7CisKKwlucl9yYW5nZSA9IGdldF9mcmVlX2FsbF9tZW1vcnlfcmFuZ2UoJnJhbmdlLCBub2RlaWQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKKwkJc3RhcnQgPSByYW5nZVtpXS5zdGFydDsKKwkJZW5kID0gcmFuZ2VbaV0uZW5kOworCQljb3VudCArPSBlbmQgLSBzdGFydDsKKwkJX19mcmVlX3BhZ2VzX21lbW9yeShzdGFydCwgZW5kKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisjZWxzZQogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX2Jvb3RtZW1fY29yZShib290bWVtX2RhdGFfdCAqYmRhdGEpCiB7CiAJaW50IGFsaWduZWQ7CkBAIC0yMjcsNiArMjgzLDcgQEAKIAogCXJldHVybiBjb3VudDsKIH0KKyNlbmRpZgogCiAvKioKICAqIGZyZWVfYWxsX2Jvb3RtZW1fbm9kZSAtIHJlbGVhc2UgYSBub2RlJ3MgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yCkBAIC0yMzcsNyArMjk0LDEyIEBACiB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2FsbF9ib290bWVtX25vZGUocGdfZGF0YV90ICpwZ2RhdCkKIHsKIAlyZWdpc3Rlcl9wYWdlX2Jvb3RtZW1faW5mb19ub2RlKHBnZGF0KTsKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCS8qIGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KE1BWF9OVU1OT0RFUykgd2lsbCBiZSBjYWxsZWQgbGF0ZXIgKi8KKwlyZXR1cm4gMDsKKyNlbHNlCiAJcmV0dXJuIGZyZWVfYWxsX2Jvb3RtZW1fY29yZShwZ2RhdC0+YmRhdGEpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMjQ3LDkgKzMwOSwxNCBAQAogICovCiB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2FsbF9ib290bWVtKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlyZXR1cm4gZnJlZV9hbGxfbWVtb3J5X2NvcmVfZWFybHkoTk9ERV9EQVRBKDApLT5ub2RlX2lkKTsKKyNlbHNlCiAJcmV0dXJuIGZyZWVfYWxsX2Jvb3RtZW1fY29yZShOT0RFX0RBVEEoMCktPmJkYXRhKTsKKyNlbmRpZgogfQogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBzdGF0aWMgdm9pZCBfX2luaXQgX19mcmVlKGJvb3RtZW1fZGF0YV90ICpiZGF0YSwKIAkJCXVuc2lnbmVkIGxvbmcgc2lkeCwgdW5zaWduZWQgbG9uZyBlaWR4KQogewpAQCAtMzQ0LDYgKzQxMSw3IEBACiAJfQogCUJVRygpOwogfQorI2VuZGlmCiAKIC8qKgogICogZnJlZV9ib290bWVtX25vZGUgLSBtYXJrIGEgcGFnZSByYW5nZSBhcyB1c2FibGUKQEAgLTM1OCw2ICs0MjYsMTIgQEAKIHZvaWQgX19pbml0IGZyZWVfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlmcmVlX2Vhcmx5KHBoeXNhZGRyLCBwaHlzYWRkciArIHNpemUpOworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAiZnJlZSAlbHggJWx4XG4iLCBwaHlzYWRkciwgc2l6ZSk7CisjZW5kaWYKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCiAJa21lbWxlYWtfZnJlZV9wYXJ0KF9fdmEocGh5c2FkZHIpLCBzaXplKTsKQEAgLTM2Niw2ICs0NDAsNyBAQAogCWVuZCA9IFBGTl9ET1dOKHBoeXNhZGRyICsgc2l6ZSk7CiAKIAltYXJrX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHN0YXJ0LCBlbmQsIDAsIDApOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMzc5LDYgKzQ1NCwxMiBAQAogICovCiB2b2lkIF9faW5pdCBmcmVlX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlmcmVlX2Vhcmx5KGFkZHIsIGFkZHIgKyBzaXplKTsKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgImZyZWUgJWx4ICVseFxuIiwgYWRkciwgc2l6ZSk7CisjZW5kaWYKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCiAJa21lbWxlYWtfZnJlZV9wYXJ0KF9fdmEoYWRkciksIHNpemUpOwpAQCAtMzg3LDYgKzQ2OCw3IEBACiAJZW5kID0gUEZOX0RPV04oYWRkciArIHNpemUpOwogCiAJbWFya19ib290bWVtKHN0YXJ0LCBlbmQsIDAsIDApOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtNDAzLDEyICs0ODUsMTcgQEAKIGludCBfX2luaXQgcmVzZXJ2ZV9ib290bWVtX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBwaHlzYWRkciwKIAkJCQkgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZmxhZ3MpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlwYW5pYygibm8gYm9vdG1lbSIpOworCXJldHVybiAwOworI2Vsc2UKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKIAlzdGFydCA9IFBGTl9ET1dOKHBoeXNhZGRyKTsKIAllbmQgPSBQRk5fVVAocGh5c2FkZHIgKyBzaXplKTsKIAogCXJldHVybiBtYXJrX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHN0YXJ0LCBlbmQsIDEsIGZsYWdzKTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTQyNCwxNCArNTExLDIwIEBACiBpbnQgX19pbml0IHJlc2VydmVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICBpbnQgZmxhZ3MpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlwYW5pYygibm8gYm9vdG1lbSIpOworCXJldHVybiAwOworI2Vsc2UKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKIAlzdGFydCA9IFBGTl9ET1dOKGFkZHIpOwogCWVuZCA9IFBGTl9VUChhZGRyICsgc2l6ZSk7CiAKIAlyZXR1cm4gbWFya19ib290bWVtKHN0YXJ0LCBlbmQsIDEsIGZsYWdzKTsKKyNlbmRpZgogfQogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgYWxpZ25faWR4KHN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaWR4LCB1bnNpZ25lZCBsb25nIHN0ZXApCiB7CkBAIC01ODIsMTIgKzY3NSwzMyBAQAogI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgKiBfX2luaXQgX19fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCQkJdW5zaWduZWQgbG9uZyBnb2FsLAogCQkJCQl1bnNpZ25lZCBsb25nIGxpbWl0KQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJdm9pZCAqcHRyOworCisJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKKwkJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX05PV0FJVCk7CisKK3Jlc3RhcnQ6CisKKwlwdHIgPSBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KE1BWF9OVU1OT0RFUywgc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KTsKKworCWlmIChwdHIpCisJCXJldHVybiBwdHI7CisKKwlpZiAoZ29hbCAhPSAwKSB7CisJCWdvYWwgPSAwOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCisJcmV0dXJuIE5VTEw7CisjZWxzZQogCWJvb3RtZW1fZGF0YV90ICpiZGF0YTsKIAl2b2lkICpyZWdpb247CiAKQEAgLTYxMyw2ICs3MjcsNyBAQAogCX0KIAogCXJldHVybiBOVUxMOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtNjMxLDcgKzc0NiwxMyBAQAogdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCkKIHsKLQlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLCBnb2FsLCAwKTsKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gMDsKKworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJbGltaXQgPSAtMVVMOworI2VuZGlmCisKKwlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CiB9CiAKIHN0YXRpYyB2b2lkICogX19pbml0IF9fX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLApAQCAtNjY1LDkgKzc4NiwxNiBAQAogdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBnb2FsKQogewotCXJldHVybiBfX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLCBnb2FsLCAwKTsKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gMDsKKworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJbGltaXQgPSAtMVVMOworI2VuZGlmCisKKwlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOwogfQogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBzdGF0aWMgdm9pZCAqIF9faW5pdCBfX19hbGxvY19ib290bWVtX25vZGUoYm9vdG1lbV9kYXRhX3QgKmJkYXRhLAogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCQl1bnNpZ25lZCBsb25nIGdvYWwsIHVuc2lnbmVkIGxvbmcgbGltaXQpCkBAIC02ODQsNiArODEyLDcgQEAKIAogCXJldHVybiBfX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CiB9CisjZW5kaWYKIAogLyoqCiAgKiBfX2FsbG9jX2Jvb3RtZW1fbm9kZSAtIGFsbG9jYXRlIGJvb3QgbWVtb3J5IGZyb20gYSBzcGVjaWZpYyBub2RlCkBAIC03MDYsNyArODM1LDQ2IEBACiAJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKIAkJcmV0dXJuIGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfTk9XQUlULCBwZ2RhdC0+bm9kZV9pZCk7CiAKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXJldHVybiBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KHBnZGF0LT5ub2RlX2lkLCBzaXplLCBhbGlnbiwKKwkJCQkJIGdvYWwsIC0xVUxMKTsKKyNlbHNlCiAJcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCAwKTsKKyNlbmRpZgorfQorCit2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub2RlX2hpZ2gocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3sKKyNpZmRlZiBNQVhfRE1BMzJfUEZOCisJdW5zaWduZWQgbG9uZyBlbmRfcGZuOworCisJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKKwkJcmV0dXJuIGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfTk9XQUlULCBwZ2RhdC0+bm9kZV9pZCk7CisKKwkvKiB1cGRhdGUgZ29hbCBhY2NvcmRpbmcgLi4uTUFYX0RNQTMyX1BGTiAqLworCWVuZF9wZm4gPSBwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzOworCisJaWYgKGVuZF9wZm4gPiBNQVhfRE1BMzJfUEZOICsgKDEyOCA+PiAoMjAgLSBQQUdFX1NISUZUKSkgJiYKKwkgICAgKGdvYWwgPj4gUEFHRV9TSElGVCkgPCBNQVhfRE1BMzJfUEZOKSB7CisJCXZvaWQgKnB0cjsKKwkJdW5zaWduZWQgbG9uZyBuZXdfZ29hbDsKKworCQluZXdfZ29hbCA9IE1BWF9ETUEzMl9QRk4gPDwgUEFHRV9TSElGVDsKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCQlwdHIgPSAgX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShwZ2RhdC0+bm9kZV9pZCwgc2l6ZSwgYWxpZ24sCisJCQkJCQkgbmV3X2dvYWwsIC0xVUxMKTsKKyNlbHNlCisJCXB0ciA9IGFsbG9jX2Jvb3RtZW1fY29yZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLAorCQkJCQkJIG5ld19nb2FsLCAwKTsKKyNlbmRpZgorCQlpZiAocHRyKQorCQkJcmV0dXJuIHB0cjsKKwl9CisjZW5kaWYKKworCXJldHVybiBfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgc2l6ZSwgYWxpZ24sIGdvYWwpOworCiB9CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCkBAIC03MjAsNiArODg4LDE2IEBACiB2b2lkICogX19pbml0IGFsbG9jX2Jvb3RtZW1fc2VjdGlvbih1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2VjdGlvbl9ucikKIHsKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXVuc2lnbmVkIGxvbmcgcGZuLCBnb2FsLCBsaW1pdDsKKworCXBmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKHNlY3Rpb25fbnIpOworCWdvYWwgPSBwZm4gPDwgUEFHRV9TSElGVDsKKwlsaW1pdCA9IHNlY3Rpb25fbnJfdG9fcGZuKHNlY3Rpb25fbnIgKyAxKSA8PCBQQUdFX1NISUZUOworCisJcmV0dXJuIF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkoZWFybHlfcGZuX3RvX25pZChwZm4pLCBzaXplLAorCQkJCQkgU01QX0NBQ0hFX0JZVEVTLCBnb2FsLCBsaW1pdCk7CisjZWxzZQogCWJvb3RtZW1fZGF0YV90ICpiZGF0YTsKIAl1bnNpZ25lZCBsb25nIHBmbiwgZ29hbCwgbGltaXQ7CiAKQEAgLTcyOSw2ICs5MDcsNyBAQAogCWJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhW2Vhcmx5X3Bmbl90b19uaWQocGZuKV07CiAKIAlyZXR1cm4gYWxsb2NfYm9vdG1lbV9jb3JlKGJkYXRhLCBzaXplLCBTTVBfQ0FDSEVfQllURVMsIGdvYWwsIGxpbWl0KTsKKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTc0MCwxMSArOTE5LDE2IEBACiAJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKIAkJcmV0dXJuIGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfTk9XQUlULCBwZ2RhdC0+bm9kZV9pZCk7CiAKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXB0ciA9ICBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KHBnZGF0LT5ub2RlX2lkLCBzaXplLCBhbGlnbiwKKwkJCQkJCSBnb2FsLCAtMVVMTCk7CisjZWxzZQogCXB0ciA9IGFsbG9jX2FyY2hfcHJlZmVycmVkX2Jvb3RtZW0ocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CiAJaWYgKHB0cikKIAkJcmV0dXJuIHB0cjsKIAogCXB0ciA9IGFsbG9jX2Jvb3RtZW1fY29yZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCAwKTsKKyNlbmRpZgogCWlmIChwdHIpCiAJCXJldHVybiBwdHI7CiAKQEAgLTc5NSw2ICs5NzksMTEgQEAKIAlpZiAoV0FSTl9PTl9PTkNFKHNsYWJfaXNfYXZhaWxhYmxlKCkpKQogCQlyZXR1cm4ga3phbGxvY19ub2RlKHNpemUsIEdGUF9OT1dBSVQsIHBnZGF0LT5ub2RlX2lkKTsKIAorI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJcmV0dXJuIF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkocGdkYXQtPm5vZGVfaWQsIHNpemUsIGFsaWduLAorCQkJCWdvYWwsIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOworI2Vsc2UKIAlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sCiAJCQkJZ29hbCwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAyZDE2ZmE2Li4zYTVhZWIzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yMDg3LDcgKzIwODcsNyBAQAogCiAJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIDEpKSB7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTsKIAl9CiB9CiAKQEAgLTI1NTgsNyArMjU1OCw3IEBACiAJZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksCiAJCQkJCQlmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiAKIG91dF9wYWdlX3RhYmxlX2xvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAwOWU0YjFiLi43MmZiNWYzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTU5Myw3ICsxNTkzLDcgQEAKIAkvKiBPaywgZmluYWxseSBqdXN0IGluc2VydCB0aGUgdGhpbmcuLiAqLwogCWVudHJ5ID0gcHRlX21rc3BlY2lhbChwZm5fcHRlKHBmbiwgcHJvdCkpOwogCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnkpOwotCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBlbnRyeSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCisJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCiAKIAlyZXR2YWwgPSAwOwogb3V0X3VubG9jazoKQEAgLTIxMTYsNyArMjExNiw3IEBACiAJCWVudHJ5ID0gcHRlX21reW91bmcob3JpZ19wdGUpOwogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwogCQlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnksMSkpCi0JCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwogCQlyZXQgfD0gVk1fRkFVTFRfV1JJVEU7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIxODUsNyArMjE4NSw3IEBACiAJCSAqIG5ldyBwYWdlIHRvIGJlIG1hcHBlZCBkaXJlY3RseSBpbnRvIHRoZSBzZWNvbmRhcnkgcGFnZSB0YWJsZS4KIAkJICovCiAJCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgogCQkJICogT25seSBhZnRlciBzd2l0Y2hpbmcgdGhlIHB0ZSB0byB0aGUgbmV3IHBhZ2UgbWF5CkBAIC0yNjI5LDcgKzI2MjksNyBAQAogCX0KIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogb3V0OgpAQCAtMjY5NCw3ICsyNjk0LDcgQEAKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCi0JdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogCXJldHVybiAwOwpAQCAtMjg1NSw3ICsyODU1LDcgQEAKIAkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCiAJCS8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqLwotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGNoYXJnZWQpCiAJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CkBAIC0yOTkyLDcgKzI5OTIsNyBAQAogCX0KIAllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKIAlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlLCBlbnRyeSwgZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkgewotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGlzIG5lZWRlZCBvbmx5IGZvciBwcm90ZWN0aW9uIGZhdWx0cyBidXQgdGhlIGFyY2ggY29kZQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDg4MGJkNTkuLmVkYjYxMDEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQlwYWdlX2FkZF9maWxlX3JtYXAobmV3KTsKIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbW0vbW11X2NvbnRleHQuYyBiL21tL21tdV9jb250ZXh0LmMKaW5kZXggZGVkOTA4MS4uMDc3NzY1NCAxMDA2NDQKLS0tIGEvbW0vbW11X2NvbnRleHQuYworKysgYi9tbS9tbXVfY29udGV4dC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTM3LDYgKzM4LDcgQEAKIAlpZiAoYWN0aXZlX21tICE9IG1tKQogCQltbWRyb3AoYWN0aXZlX21tKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzZV9tbSk7CiAKIC8qCiAgKiB1bnVzZV9tbQpAQCAtNTYsMyArNTgsNCBAQAogCWVudGVyX2xhenlfdGxiKG1tLCB0c2spOwogCXRhc2tfdW5sb2NrKHRzayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnVzZV9tbSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOGRlYjlkMC4uYTZiMTdhYSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTAwOSwxMCArMTAwOSwxMCBAQAogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwc2V0OwogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCi0JCXBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBzZXQgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCXBjcCA9ICZwc2V0LT5wY3A7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7CiAJCXBjcC0+Y291bnQgPSAwOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xMDk2LDcgKzEwOTYsNiBAQAogCWFyY2hfZnJlZV9wYWdlKHBhZ2UsIDApOwogCWtlcm5lbF9tYXBfcGFnZXMocGFnZSwgMSwgMCk7CiAKLQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgZ2V0X2NwdSgpKS0+cGNwOwogCW1pZ3JhdGV0eXBlID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG1pZ3JhdGV0eXBlKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0xMTE5LDYgKzExMTgsNyBAQAogCQltaWdyYXRldHlwZSA9IE1JR1JBVEVfTU9WQUJMRTsKIAl9CiAKKwlwY3AgPSAmdGhpc19jcHVfcHRyKHpvbmUtPnBhZ2VzZXQpLT5wY3A7CiAJaWYgKGNvbGQpCiAJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBjcC0+bGlzdHNbbWlncmF0ZXR5cGVdKTsKIAllbHNlCkBAIC0xMTMxLDcgKzExMzEsNiBAQAogCiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXB1dF9jcHUoKTsKIH0KIAogdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMTE4MSwxNyArMTE4MCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGNvbGQgPSAhIShnZnBfZmxhZ3MgJiBfX0dGUF9DT0xEKTsKLQlpbnQgY3B1OwogCiBhZ2FpbjoKLQljcHUgID0gZ2V0X2NwdSgpOwogCWlmIChsaWtlbHkob3JkZXIgPT0gMCkpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKIAkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgY3B1KS0+cGNwOwotCQlsaXN0ID0gJnBjcC0+bGlzdHNbbWlncmF0ZXR5cGVdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBjcCA9ICZ0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCktPnBjcDsKKwkJbGlzdCA9ICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXTsKIAkJaWYgKGxpc3RfZW1wdHkobGlzdCkpIHsKIAkJCXBjcC0+Y291bnQgKz0gcm1xdWV1ZV9idWxrKHpvbmUsIDAsCiAJCQkJCXBjcC0+YmF0Y2gsIGxpc3QsCkBAIC0xMjMyLDcgKzEyMjksNiBAQAogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdBTExPQywgem9uZSwgMSA8PCBvcmRlcik7CiAJem9uZV9zdGF0aXN0aWNzKHByZWZlcnJlZF96b25lLCB6b25lKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHV0X2NwdSgpOwogCiAJVk1fQlVHX09OKGJhZF9yYW5nZSh6b25lLCBwYWdlKSk7CiAJaWYgKHByZXBfbmV3X3BhZ2UocGFnZSwgb3JkZXIsIGdmcF9mbGFncykpCkBAIC0xMjQxLDcgKzEyMzcsNiBAQAogCiBmYWlsZWQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXB1dF9jcHUoKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjE4MCw3ICsyMTc1LDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CiAKLQkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQkJcGFnZXNldCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7CiAKIAkJCXByaW50aygiQ1BVICU0ZDogaGk6JTVkLCBidGNoOiU0ZCB1c2Q6JTRkXG4iLAogCQkJICAgICAgIGNwdSwgcGFnZXNldC0+cGNwLmhpZ2gsCkBAIC0yNzQ1LDEwICsyNzQwLDI5IEBACiAKICNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwogCisvKgorICogQm9vdCBwYWdlc2V0IHRhYmxlLiBPbmUgcGVyIGNwdSB3aGljaCBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBhbGwKKyAqIHpvbmVzIGFuZCBhbGwgbm9kZXMuIFRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2V0IGluIHN1Y2ggYSB3YXkKKyAqIHRoYXQgYW4gaXRlbSBwdXQgb24gYSBsaXN0IHdpbGwgaW1tZWRpYXRlbHkgYmUgaGFuZGVkIG92ZXIgdG8KKyAqIHRoZSBidWRkeSBsaXN0LiBUaGlzIGlzIHNhZmUgc2luY2UgcGFnZXNldCBtYW5pcHVsYXRpb24gaXMgZG9uZQorICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqIFRoZSBib290X3BhZ2VzZXRzIG11c3QgYmUga2VwdCBldmVuIGFmdGVyIGJvb3R1cCBpcyBjb21wbGV0ZSBmb3IKKyAqIHVudXNlZCBwcm9jZXNzb3JzIGFuZC9vciB6b25lcy4gVGhleSBkbyBwbGF5IGEgcm9sZSBmb3IgYm9vdHN0cmFwcGluZworICogaG90cGx1Z2dlZCBwcm9jZXNzb3JzLgorICoKKyAqIHpvbmVpbmZvX3Nob3coKSBhbmQgbWF5YmUgb3RoZXIgZnVuY3Rpb25zIGRvCisgKiBub3QgY2hlY2sgaWYgdGhlIHByb2Nlc3NvciBpcyBvbmxpbmUgYmVmb3JlIGZvbGxvd2luZyB0aGUgcGFnZXNldCBwb2ludGVyLgorICogT3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBtYXkgbm90IGNoZWNrIGlmIHRoZSB6b25lIGlzIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHZvaWQgc2V0dXBfcGFnZXNldChzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwLCB1bnNpZ25lZCBsb25nIGJhdGNoKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0LCBib290X3BhZ2VzZXQpOworCiAvKiByZXR1cm4gdmFsdWVzIGludCAuLi4uanVzdCBmb3Igc3RvcF9tYWNoaW5lKCkgKi8KIHN0YXRpYyBpbnQgX19idWlsZF9hbGxfem9uZWxpc3RzKHZvaWQgKmR1bW15KQogewogCWludCBuaWQ7CisJaW50IGNwdTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAJbWVtc2V0KG5vZGVfbG9hZCwgMCwgc2l6ZW9mKG5vZGVfbG9hZCkpOwpAQCAtMjc1OSw2ICsyNzczLDIzIEBACiAJCWJ1aWxkX3pvbmVsaXN0cyhwZ2RhdCk7CiAJCWJ1aWxkX3pvbmVsaXN0X2NhY2hlKHBnZGF0KTsKIAl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJvb3RfcGFnZXNldHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgdXNlZAorCSAqIGZvciBib290c3RyYXBwaW5nIHByb2Nlc3NvcnMuIFRoZSByZWFsIHBhZ2VzZXRzIGZvcgorCSAqIGVhY2ggem9uZSB3aWxsIGJlIGFsbG9jYXRlZCBsYXRlciB3aGVuIHRoZSBwZXIgY3B1CisJICogYWxsb2NhdG9yIGlzIGF2YWlsYWJsZS4KKwkgKgorCSAqIGJvb3RfcGFnZXNldHMgYXJlIHVzZWQgYWxzbyBmb3IgYm9vdHN0cmFwcGluZyBvZmZsaW5lCisJICogY3B1cyBpZiB0aGUgc3lzdGVtIGlzIGFscmVhZHkgYm9vdGVkIGJlY2F1c2UgdGhlIHBhZ2VzZXRzCisJICogYXJlIG5lZWRlZCB0byBpbml0aWFsaXplIGFsbG9jYXRvcnMgb24gYSBzcGVjaWZpYyBjcHUgdG9vLgorCSAqIEYuZS4gdGhlIHBlcmNwdSBhbGxvY2F0b3IgbmVlZHMgdGhlIHBhZ2UgYWxsb2NhdG9yIHdoaWNoCisJICogbmVlZHMgdGhlIHBlcmNwdSBhbGxvY2F0b3IgaW4gb3JkZXIgdG8gYWxsb2NhdGUgaXRzIHBhZ2VzZXRzCisJICogKGEgY2hpY2tlbi1lZ2cgZGlsZW1tYSkuCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc2V0dXBfcGFnZXNldCgmcGVyX2NwdShib290X3BhZ2VzZXQsIGNwdSksIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwOTYsMTIxICszMTI3LDMzIEBACiAJCXBjcC0+YmF0Y2ggPSBQQUdFX1NISUZUICogODsKIH0KIAotCi0jaWZkZWYgQ09ORklHX05VTUEKIC8qCi0gKiBCb290IHBhZ2VzZXQgdGFibGUuIE9uZSBwZXIgY3B1IHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIGFsbAotICogem9uZXMgYW5kIGFsbCBub2Rlcy4gVGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZXQgaW4gc3VjaCBhIHdheQotICogdGhhdCBhbiBpdGVtIHB1dCBvbiBhIGxpc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSBoYW5kZWQgb3ZlciB0bwotICogdGhlIGJ1ZGR5IGxpc3QuIFRoaXMgaXMgc2FmZSBzaW5jZSBwYWdlc2V0IG1hbmlwdWxhdGlvbiBpcyBkb25lCi0gKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCi0gKgotICogU29tZSBOVU1BIGNvdW50ZXIgdXBkYXRlcyBtYXkgYWxzbyBiZSBjYXVnaHQgYnkgdGhlIGJvb3QgcGFnZXNldHMuCi0gKgotICogVGhlIGJvb3RfcGFnZXNldHMgbXVzdCBiZSBrZXB0IGV2ZW4gYWZ0ZXIgYm9vdHVwIGlzIGNvbXBsZXRlIGZvcgotICogdW51c2VkIHByb2Nlc3NvcnMgYW5kL29yIHpvbmVzLiBUaGV5IGRvIHBsYXkgYSByb2xlIGZvciBib290c3RyYXBwaW5nCi0gKiBob3RwbHVnZ2VkIHByb2Nlc3NvcnMuCi0gKgotICogem9uZWluZm9fc2hvdygpIGFuZCBtYXliZSBvdGhlciBmdW5jdGlvbnMgZG8KLSAqIG5vdCBjaGVjayBpZiB0aGUgcHJvY2Vzc29yIGlzIG9ubGluZSBiZWZvcmUgZm9sbG93aW5nIHRoZSBwYWdlc2V0IHBvaW50ZXIuCi0gKiBPdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG1heSBub3QgY2hlY2sgaWYgdGhlIHpvbmUgaXMgYXZhaWxhYmxlLgorICogQWxsb2NhdGUgcGVyIGNwdSBwYWdlc2V0cyBhbmQgaW5pdGlhbGl6ZSB0aGVtLgorICogQmVmb3JlIHRoaXMgY2FsbCBvbmx5IGJvb3QgcGFnZXNldHMgd2VyZSBhdmFpbGFibGUuCisgKiBCb290IHBhZ2VzZXRzIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgYnkgdGhpcyBwcm9jZXNzb3JyCisgKiBhZnRlciBzZXR1cF9wZXJfY3B1X3BhZ2VzZXQoKS4KICAqLwotc3RhdGljIHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgYm9vdF9wYWdlc2V0W05SX0NQVVNdOwotCi0vKgotICogRHluYW1pY2FsbHkgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKLSAqIHBlciBjcHUgcGFnZXNldCBhcnJheSBpbiBzdHJ1Y3Qgem9uZS4KLSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgcHJvY2Vzc196b25lcyhpbnQgY3B1KQotewotCXN0cnVjdCB6b25lICp6b25lLCAqZHpvbmU7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCi0Jbm9kZV9zZXRfc3RhdGUobm9kZSwgTl9DUFUpOwkvKiB0aGlzIG5vZGUgaGFzIGEgY3B1ICovCi0KLQlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7Ci0JCXpvbmVfcGNwKHpvbmUsIGNwdSkgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQpLAotCQkJCQkgR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCWlmICghem9uZV9wY3Aoem9uZSwgY3B1KSkKLQkJCWdvdG8gYmFkOwotCi0JCXNldHVwX3BhZ2VzZXQoem9uZV9wY3Aoem9uZSwgY3B1KSwgem9uZV9iYXRjaHNpemUoem9uZSkpOwotCi0JCWlmIChwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pCi0JCQlzZXR1cF9wYWdlbGlzdF9oaWdobWFyayh6b25lX3BjcCh6b25lLCBjcHUpLAotCQkJICAgICh6b25lLT5wcmVzZW50X3BhZ2VzIC8gcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci1iYWQ6Ci0JZm9yX2VhY2hfem9uZShkem9uZSkgewotCQlpZiAoIXBvcHVsYXRlZF96b25lKGR6b25lKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZHpvbmUgPT0gem9uZSkKLQkJCWJyZWFrOwotCQlrZnJlZSh6b25lX3BjcChkem9uZSwgY3B1KSk7Ci0JCXpvbmVfcGNwKGR6b25lLCBjcHUpID0gJmJvb3RfcGFnZXNldFtjcHVdOwotCX0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfem9uZV9wYWdlc2V0cyhpbnQgY3B1KQotewotCXN0cnVjdCB6b25lICp6b25lOwotCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0JCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwotCi0JCS8qIEZyZWUgcGVyX2NwdV9wYWdlc2V0IGlmIGl0IGlzIHNsYWIgYWxsb2NhdGVkICovCi0JCWlmIChwc2V0ICE9ICZib290X3BhZ2VzZXRbY3B1XSkKLQkJCWtmcmVlKHBzZXQpOwotCQl6b25lX3BjcCh6b25lLCBjcHUpID0gJmJvb3RfcGFnZXNldFtjcHVdOwotCX0KLX0KLQotc3RhdGljIGludCBfX2NwdWluaXQgcGFnZXNldF9jcHV1cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKLQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCi0JCXZvaWQgKmhjcHUpCi17Ci0JaW50IGNwdSA9IChsb25nKWhjcHU7Ci0JaW50IHJldCA9IE5PVElGWV9PSzsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJaWYgKHByb2Nlc3Nfem9uZXMoY3B1KSkKLQkJCXJldCA9IE5PVElGWV9CQUQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQljYXNlIENQVV9ERUFEOgotCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgotCQlmcmVlX3pvbmVfcGFnZXNldHMoY3B1KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBwYWdlc2V0X25vdGlmaWVyID0KLQl7ICZwYWdlc2V0X2NwdXVwX2NhbGxiYWNrLCBOVUxMLCAwIH07Ci0KIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKQogewotCWludCBlcnI7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJaW50IGNwdTsKIAotCS8qIEluaXRpYWxpemUgcGVyX2NwdV9wYWdlc2V0IGZvciBjcHUgMC4KLQkgKiBBIGNwdXVwIGNhbGxiYWNrIHdpbGwgZG8gdGhpcyBmb3IgZXZlcnkgY3B1Ci0JICogYXMgaXQgY29tZXMgb25saW5lCi0JICovCi0JZXJyID0gcHJvY2Vzc196b25lcyhzbXBfcHJvY2Vzc29yX2lkKCkpOwotCUJVR19PTihlcnIpOwotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGFnZXNldF9ub3RpZmllcik7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgeworCQl6b25lLT5wYWdlc2V0ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQpOworCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBjcCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7CisKKwkJCXNldHVwX3BhZ2VzZXQocGNwLCB6b25lX2JhdGNoc2l6ZSh6b25lKSk7CisKKwkJCWlmIChwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pCisJCQkJc2V0dXBfcGFnZWxpc3RfaGlnaG1hcmsocGNwLAorCQkJCQkoem9uZS0+cHJlc2VudF9wYWdlcyAvCisJCQkJCQlwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pKTsKKwkJfQorCX0KIH0KIAotI2VuZGlmCi0KIHN0YXRpYyBub2lubGluZSBfX2luaXRfcmVmb2sKIGludCB6b25lX3dhaXRfdGFibGVfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyB6b25lX3NpemVfcGFnZXMpCiB7CkBAIC0zMjY0LDcgKzMyMDcsNyBAQAogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwc2V0OwogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCi0JCXBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKIAkJcGNwID0gJnBzZXQtPnBjcDsKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0zMjgyLDIxICszMjI1LDE3IEBACiAKIHN0YXRpYyBfX21lbWluaXQgdm9pZCB6b25lX3BjcF9pbml0KHN0cnVjdCB6b25lICp6b25lKQogewotCWludCBjcHU7Ci0JdW5zaWduZWQgbG9uZyBiYXRjaCA9IHpvbmVfYmF0Y2hzaXplKHpvbmUpOworCS8qCisJICogcGVyIGNwdSBzdWJzeXN0ZW0gaXMgbm90IHVwIGF0IHRoaXMgcG9pbnQuIFRoZSBmb2xsb3dpbmcgY29kZQorCSAqIHJlbGllcyBvbiB0aGUgYWJpbGl0eSBvZiB0aGUgbGlua2VyIHRvIHByb3ZpZGUgdGhlCisJICogb2Zmc2V0IG9mIGEgKHN0YXRpYykgcGVyIGNwdSB2YXJpYWJsZSBpbnRvIHRoZSBwZXIgY3B1IGFyZWEuCisJICovCisJem9uZS0+cGFnZXNldCA9ICZib290X3BhZ2VzZXQ7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQkJLyogRWFybHkgYm9vdC4gU2xhYiBhbGxvY2F0b3Igbm90IGZ1bmN0aW9uYWwgeWV0ICovCi0JCXpvbmVfcGNwKHpvbmUsIGNwdSkgPSAmYm9vdF9wYWdlc2V0W2NwdV07Ci0JCXNldHVwX3BhZ2VzZXQoJmJvb3RfcGFnZXNldFtjcHVdLDApOwotI2Vsc2UKLQkJc2V0dXBfcGFnZXNldCh6b25lX3BjcCh6b25lLGNwdSksIGJhdGNoKTsKLSNlbmRpZgotCX0KIAlpZiAoem9uZS0+cHJlc2VudF9wYWdlcykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzLCBMSUZPIGJhdGNoOiVsdVxuIiwKLQkJCXpvbmUtPm5hbWUsIHpvbmUtPnByZXNlbnRfcGFnZXMsIGJhdGNoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzLCBMSUZPIGJhdGNoOiV1XG4iLAorCQkJem9uZS0+bmFtZSwgem9uZS0+cHJlc2VudF9wYWdlcywKKwkJCQkJIHpvbmVfYmF0Y2hzaXplKHpvbmUpKTsKIH0KIAogX19tZW1pbml0IGludCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLApAQCAtMzQzNSw2ICszMzc0LDYxIEBACiAJfQogfQogCitpbnQgX19pbml0IGFkZF9mcm9tX2Vhcmx5X25vZGVfbWFwKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwKKwkJCQkgICBpbnQgbnJfcmFuZ2UsIGludCBuaWQpCit7CisJaW50IGk7CisJdTY0IHN0YXJ0LCBlbmQ7CisKKwkvKiBuZWVkIHRvIGdvIG92ZXIgZWFybHlfbm9kZV9tYXAgdG8gZmluZCBvdXQgZ29vZCByYW5nZSBmb3Igbm9kZSAqLworCWZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKSB7CisJCXN0YXJ0ID0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuOworCQllbmQgPSBlYXJseV9ub2RlX21hcFtpXS5lbmRfcGZuOworCQlucl9yYW5nZSA9IGFkZF9yYW5nZShyYW5nZSwgYXosIG5yX3JhbmdlLCBzdGFydCwgZW5kKTsKKwl9CisJcmV0dXJuIG5yX3JhbmdlOworfQorCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KK3ZvaWQgKiBfX2luaXQgX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShpbnQgbmlkLCB1NjQgc2l6ZSwgdTY0IGFsaWduLAorCQkJCQl1NjQgZ29hbCwgdTY0IGxpbWl0KQoreworCWludCBpOworCXZvaWQgKnB0cjsKKworCS8qIG5lZWQgdG8gZ28gb3ZlciBlYXJseV9ub2RlX21hcCB0byBmaW5kIG91dCBnb29kIHJhbmdlIGZvciBub2RlICovCisJZm9yX2VhY2hfYWN0aXZlX3JhbmdlX2luZGV4X2luX25pZChpLCBuaWQpIHsKKwkJdTY0IGFkZHI7CisJCXU2NCBlaV9zdGFydCwgZWlfbGFzdDsKKworCQllaV9sYXN0ID0gZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbjsKKwkJZWlfbGFzdCA8PD0gUEFHRV9TSElGVDsKKwkJZWlfc3RhcnQgPSBlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm47CisJCWVpX3N0YXJ0IDw8PSBQQUdFX1NISUZUOworCQlhZGRyID0gZmluZF9lYXJseV9hcmVhKGVpX3N0YXJ0LCBlaV9sYXN0LAorCQkJCQkgZ29hbCwgbGltaXQsIHNpemUsIGFsaWduKTsKKworCQlpZiAoYWRkciA9PSAtMVVMTCkKKwkJCWNvbnRpbnVlOworCisjaWYgMAorCQlwcmludGsoS0VSTl9ERUJVRyAiYWxsb2MgKG5pZD0lZCAlbGx4IC0gJWxseCkgKCVsbHggLSAlbGx4KSAlbGx4ICVsbHggPT4gJWxseFxuIiwKKwkJCQluaWQsCisJCQkJZWlfc3RhcnQsIGVpX2xhc3QsIGdvYWwsIGxpbWl0LCBzaXplLAorCQkJCWFsaWduLCBhZGRyKTsKKyNlbmRpZgorCisJCXB0ciA9IHBoeXNfdG9fdmlydChhZGRyKTsKKwkJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisJCXJlc2VydmVfZWFybHlfd2l0aG91dF9jaGVjayhhZGRyLCBhZGRyICsgc2l6ZSwgIkJPT1RNRU0iKTsKKwkJcmV0dXJuIHB0cjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisKIHZvaWQgX19pbml0IHdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB3b3JrX2ZuX3Qgd29ya19mbiwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgaTsKQEAgLTQ0NjcsNyArNDQ2MSwxMSBAQAogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi1zdHJ1Y3QgcGdsaXN0X2RhdGEgX19yZWZkYXRhIGNvbnRpZ19wYWdlX2RhdGEgPSB7IC5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVswXSB9Oworc3RydWN0IHBnbGlzdF9kYXRhIF9fcmVmZGF0YSBjb250aWdfcGFnZV9kYXRhID0geworI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQorIC5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVswXQorI2VuZGlmCisgfTsKIEVYUE9SVF9TWU1CT0woY29udGlnX3BhZ2VfZGF0YSk7CiAjZW5kaWYKIApAQCAtNDgxMCwxMCArNDgwOCwxMSBAQAogCWlmICghd3JpdGUgfHwgKHJldCA9PSAtRUlOVkFMKSkKIAkJcmV0dXJuIHJldDsKIAlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCXVuc2lnbmVkIGxvbmcgIGhpZ2g7CiAJCQloaWdoID0gem9uZS0+cHJlc2VudF9wYWdlcyAvIHBlcmNwdV9wYWdlbGlzdF9mcmFjdGlvbjsKLQkJCXNldHVwX3BhZ2VsaXN0X2hpZ2htYXJrKHpvbmVfcGNwKHpvbmUsIGNwdSksIGhpZ2gpOworCQkJc2V0dXBfcGFnZWxpc3RfaGlnaG1hcmsoCisJCQkJcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KSwgaGlnaCk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDA4M2U3YzkuLjc2ODQxOWQgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC04MCwxMyArODAsMTUgQEAKIC8qIGRlZmF1bHQgYWRkciA8LT4gcGNwdV9wdHIgbWFwcGluZywgb3ZlcnJpZGUgaW4gYXNtL3BlcmNwdS5oIGlmIG5lY2Vzc2FyeSAqLwogI2lmbmRlZiBfX2FkZHJfdG9fcGNwdV9wdHIKICNkZWZpbmUgX19hZGRyX3RvX3BjcHVfcHRyKGFkZHIpCQkJCQlcCi0JKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIJXAotCQkgKyAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQpCisJKHZvaWQgX19wZXJjcHUgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0JCQlcCisJCQkgICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyCSsJCVwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0KQogI2VuZGlmCiAjaWZuZGVmIF9fcGNwdV9wdHJfdG9fYWRkcgogI2RlZmluZSBfX3BjcHVfcHRyX3RvX2FkZHIocHRyKQkJCQkJCVwKLQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykocHRyKSArICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyCVwKLQkJIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0KQorCSh2b2lkIF9fZm9yY2UgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgKwkJCQlcCisJCQkgKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLQkJXAorCQkJICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKICNlbmRpZgogCiBzdHJ1Y3QgcGNwdV9jaHVuayB7CkBAIC05MTMsMTEgKzkxNSwxMCBAQAogCWludCBycywgcmU7CiAKIAkvKiBxdWljayBwYXRoLCBjaGVjayB3aGV0aGVyIGl0J3MgZW1wdHkgYWxyZWFkeSAqLwotCXBjcHVfZm9yX2VhY2hfdW5wb3BfcmVnaW9uKGNodW5rLCBycywgcmUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKSB7Ci0JCWlmIChycyA9PSBwYWdlX3N0YXJ0ICYmIHJlID09IHBhZ2VfZW5kKQotCQkJcmV0dXJuOwotCQlicmVhazsKLQl9CisJcnMgPSBwYWdlX3N0YXJ0OworCXBjcHVfbmV4dF91bnBvcChjaHVuaywgJnJzLCAmcmUsIHBhZ2VfZW5kKTsKKwlpZiAocnMgPT0gcGFnZV9zdGFydCAmJiByZSA9PSBwYWdlX2VuZCkKKwkJcmV0dXJuOwogCiAJLyogaW1tdXRhYmxlIGNodW5rcyBjYW4ndCBiZSBkZXBvcHVsYXRlZCAqLwogCVdBUk5fT04oY2h1bmstPmltbXV0YWJsZSk7CkBAIC05NjgsMTEgKzk2OSwxMCBAQAogCWludCBycywgcmUsIHJjOwogCiAJLyogcXVpY2sgcGF0aCwgY2hlY2sgd2hldGhlciBhbGwgcGFnZXMgYXJlIGFscmVhZHkgdGhlcmUgKi8KLQlwY3B1X2Zvcl9lYWNoX3BvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpIHsKLQkJaWYgKHJzID09IHBhZ2Vfc3RhcnQgJiYgcmUgPT0gcGFnZV9lbmQpCi0JCQlnb3RvIGNsZWFyOwotCQlicmVhazsKLQl9CisJcnMgPSBwYWdlX3N0YXJ0OworCXBjcHVfbmV4dF9wb3AoY2h1bmssICZycywgJnJlLCBwYWdlX2VuZCk7CisJaWYgKHJzID09IHBhZ2Vfc3RhcnQgJiYgcmUgPT0gcGFnZV9lbmQpCisJCWdvdG8gY2xlYXI7CiAKIAkvKiBuZWVkIHRvIGFsbG9jYXRlIGFuZCBtYXAgcGFnZXMsIHRoaXMgY2h1bmsgY2FuJ3QgYmUgaW1tdXRhYmxlICovCiAJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKQEAgLTEwNjcsNyArMTA2Nyw3IEBACiAgKiBSRVRVUk5TOgogICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKK3N0YXRpYyB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQpCiB7CiAJc3RhdGljIGludCB3YXJuX2xpbWl0ID0gMTA7CiAJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAKICAqIFJFVFVSTlM6CiAgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCi12b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQordm9pZCBfX3BlcmNwdSAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgZmFsc2UpOwogfQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAKICAqIFJFVFVSTlM6CiAgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCi12b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQordm9pZCBfX3BlcmNwdSAqX19hbGxvY19yZXNlcnZlZF9wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgdHJ1ZSk7CiB9CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogICogQ09OVEVYVDoKICAqIENhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4KICAqLwotdm9pZCBmcmVlX3BlcmNwdSh2b2lkICpwdHIpCit2b2lkIGZyZWVfcGVyY3B1KHZvaWQgX19wZXJjcHUgKnB0cikKIHsKIAl2b2lkICphZGRyOwogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IGQ5NzE0YmQuLjM5MmI5YmIgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS12bWVtbWFwLmMKKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuYwpAQCAtNDAsOSArNDAsMTEgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCkKIHsKLQlyZXR1cm4gX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwgZ29hbCk7CisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub2RlX2hpZ2goTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwgZ29hbCk7CiB9CiAKK3N0YXRpYyB2b2lkICp2bWVtbWFwX2J1ZjsKK3N0YXRpYyB2b2lkICp2bWVtbWFwX2J1Zl9lbmQ7CiAKIHZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9jayh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKQogewpAQCAtNjQsNiArNjYsMjQgQEAKIAkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogfQogCisvKiBuZWVkIHRvIG1ha2Ugc3VyZSBzaXplIGlzIGFsbCB0aGUgc2FtZSBkdXJpbmcgZWFybHkgc3RhZ2UgKi8KK3ZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9ja19idWYodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSkKK3sKKwl2b2lkICpwdHI7CisKKwlpZiAoIXZtZW1tYXBfYnVmKQorCQlyZXR1cm4gdm1lbW1hcF9hbGxvY19ibG9jayhzaXplLCBub2RlKTsKKworCS8qIHRha2UgdGhlIGZyb20gYnVmICovCisJcHRyID0gKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZyl2bWVtbWFwX2J1Ziwgc2l6ZSk7CisJaWYgKHB0ciArIHNpemUgPiB2bWVtbWFwX2J1Zl9lbmQpCisJCXJldHVybiB2bWVtbWFwX2FsbG9jX2Jsb2NrKHNpemUsIG5vZGUpOworCisJdm1lbW1hcF9idWYgPSBwdHIgKyBzaXplOworCisJcmV0dXJuIHB0cjsKK30KKwogdm9pZCBfX21lbWluaXQgdm1lbW1hcF92ZXJpZnkocHRlX3QgKnB0ZSwgaW50IG5vZGUsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC04MCw3ICsxMDAsNyBAQAogCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOwogCWlmIChwdGVfbm9uZSgqcHRlKSkgewogCQlwdGVfdCBlbnRyeTsKLQkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2soUEFHRV9TSVpFLCBub2RlKTsKKwkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBBR0VfU0laRSwgbm9kZSk7CiAJCWlmICghcCkKIAkJCXJldHVybiBOVUxMOwogCQllbnRyeSA9IHBmbl9wdGUoX19wYShwKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCk7CkBAIC0xNjMsMyArMTgzLDU1IEBACiAKIAlyZXR1cm4gbWFwOwogfQorCit2b2lkIF9faW5pdCBzcGFyc2VfbWVtX21hcHNfcG9wdWxhdGVfbm9kZShzdHJ1Y3QgcGFnZSAqKm1hcF9tYXAsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwbnVtX2JlZ2luLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcG51bV9lbmQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBtYXBfY291bnQsIGludCBub2RlaWQpCit7CisJdW5zaWduZWQgbG9uZyBwbnVtOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTjsKKwl2b2lkICp2bWVtbWFwX2J1Zl9zdGFydDsKKworCXNpemUgPSBBTElHTihzaXplLCBQTURfU0laRSk7CisJdm1lbW1hcF9idWZfc3RhcnQgPSBfX2Vhcmx5b25seV9ib290bWVtX2FsbG9jKG5vZGVpZCwgc2l6ZSAqIG1hcF9jb3VudCwKKwkJCSBQTURfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKKworCWlmICh2bWVtbWFwX2J1Zl9zdGFydCkgeworCQl2bWVtbWFwX2J1ZiA9IHZtZW1tYXBfYnVmX3N0YXJ0OworCQl2bWVtbWFwX2J1Zl9lbmQgPSB2bWVtbWFwX2J1Zl9zdGFydCArIHNpemUgKiBtYXBfY291bnQ7CisJfQorCisJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKworCQlpZiAoIXByZXNlbnRfc2VjdGlvbl9ucihwbnVtKSkKKwkJCWNvbnRpbnVlOworCisJCW1hcF9tYXBbcG51bV0gPSBzcGFyc2VfbWVtX21hcF9wb3B1bGF0ZShwbnVtLCBub2RlaWQpOworCQlpZiAobWFwX21hcFtwbnVtXSkKKwkJCWNvbnRpbnVlOworCQltcyA9IF9fbnJfdG9fc2VjdGlvbihwbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc3BhcnNlbWVtIG1lbW9yeSBtYXAgYmFja2luZyBmYWlsZWQgIgorCQkJInNvbWUgbWVtb3J5IHdpbGwgbm90IGJlIGF2YWlsYWJsZS5cbiIsIF9fZnVuY19fKTsKKwkJbXMtPnNlY3Rpb25fbWVtX21hcCA9IDA7CisJfQorCisJaWYgKHZtZW1tYXBfYnVmX3N0YXJ0KSB7CisJCS8qIG5lZWQgdG8gZnJlZSBsZWZ0IGJ1ZiAqLworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJCWZyZWVfZWFybHkoX19wYSh2bWVtbWFwX2J1Zl9zdGFydCksIF9fcGEodm1lbW1hcF9idWZfZW5kKSk7CisJCWlmICh2bWVtbWFwX2J1Zl9zdGFydCA8IHZtZW1tYXBfYnVmKSB7CisJCQljaGFyIG5hbWVbMTVdOworCisJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJNRU1NQVAgJWQiLCBub2RlaWQpOworCQkJcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKF9fcGEodm1lbW1hcF9idWZfc3RhcnQpLAorCQkJCQkJICAgIF9fcGEodm1lbW1hcF9idWYpLCBuYW1lKTsKKwkJfQorI2Vsc2UKKwkJZnJlZV9ib290bWVtKF9fcGEodm1lbW1hcF9idWYpLCB2bWVtbWFwX2J1Zl9lbmQgLSB2bWVtbWFwX2J1Zik7CisjZW5kaWYKKwkJdm1lbW1hcF9idWYgPSBOVUxMOworCQl2bWVtbWFwX2J1Zl9lbmQgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggNmNlNGFhYi4uMjI4OTZkNSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKIHN0YXRpYyB1bnNpZ25lZCBsb25nICogX19pbml0Ci1zcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jX3BnZGF0X3NlY3Rpb24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3NwYXJzZV9lYXJseV91c2VtYXBzX2FsbG9jX3BnZGF0X3NlY3Rpb24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBzZWN0aW9uX25yOwogCkBAIC0yODYsNyArMjg3LDcgQEAKIAkgKiB0aGlzIHByb2JsZW0uCiAJICovCiAJc2VjdGlvbl9uciA9IHBmbl90b19zZWN0aW9uX25yKF9fcGEocGdkYXQpID4+IFBBR0VfU0hJRlQpOwotCXJldHVybiBhbGxvY19ib290bWVtX3NlY3Rpb24odXNlbWFwX3NpemUoKSwgc2VjdGlvbl9ucik7CisJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fc2VjdGlvbih1c2VtYXBfc2l6ZSgpICogY291bnQsIHNlY3Rpb25fbnIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfdXNlbWFwX3NlY3Rpb25fbnIoaW50IG5pZCwgdW5zaWduZWQgbG9uZyAqdXNlbWFwKQpAQCAtMzI5LDcgKzMzMCw4IEBACiB9CiAjZWxzZQogc3RhdGljIHVuc2lnbmVkIGxvbmcgKiBfX2luaXQKLXNwYXJzZV9lYXJseV91c2VtYXBfYWxsb2NfcGdkYXRfc2VjdGlvbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQorc3BhcnNlX2Vhcmx5X3VzZW1hcHNfYWxsb2NfcGdkYXRfc2VjdGlvbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTMzOSwyNyArMzQxLDQwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgKl9faW5pdCBzcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jKHVuc2lnbmVkIGxvbmcgcG51bSkKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcqKnVzZW1hcF9tYXAsCisJCQkJIHVuc2lnbmVkIGxvbmcgcG51bV9iZWdpbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkgdW5zaWduZWQgbG9uZyB1c2VtYXBfY291bnQsIGludCBub2RlaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyAqdXNlbWFwOwotCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7Ci0JaW50IG5pZCA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCXZvaWQgKnVzZW1hcDsKKwl1bnNpZ25lZCBsb25nIHBudW07CisJaW50IHNpemUgPSB1c2VtYXBfc2l6ZSgpOwogCi0JdXNlbWFwID0gc3BhcnNlX2Vhcmx5X3VzZW1hcF9hbGxvY19wZ2RhdF9zZWN0aW9uKE5PREVfREFUQShuaWQpKTsKLQlpZiAodXNlbWFwKQotCQlyZXR1cm4gdXNlbWFwOwotCi0JdXNlbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCB1c2VtYXBfc2l6ZSgpKTsKKwl1c2VtYXAgPSBzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19wZ2RhdF9zZWN0aW9uKE5PREVfREFUQShub2RlaWQpLAorCQkJCQkJCQkgdXNlbWFwX2NvdW50KTsKIAlpZiAodXNlbWFwKSB7Ci0JCWNoZWNrX3VzZW1hcF9zZWN0aW9uX25yKG5pZCwgdXNlbWFwKTsKLQkJcmV0dXJuIHVzZW1hcDsKKwkJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQorCQkJCWNvbnRpbnVlOworCQkJdXNlbWFwX21hcFtwbnVtXSA9IHVzZW1hcDsKKwkJCXVzZW1hcCArPSBzaXplOworCQl9CisJCXJldHVybjsKIAl9CiAKLQkvKiBTdHVwaWQ6IHN1cHByZXNzIGdjYyB3YXJuaW5nIGZvciBTUEFSU0VNRU0gJiYgIU5VTUEgKi8KLQluaWQgPSAwOworCXVzZW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgc2l6ZSAqIHVzZW1hcF9jb3VudCk7CisJaWYgKHVzZW1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQl1c2VtYXBfbWFwW3BudW1dID0gdXNlbWFwOworCQkJdXNlbWFwICs9IHNpemU7CisJCQljaGVja191c2VtYXBfc2VjdGlvbl9ucihub2RlaWQsIHVzZW1hcF9tYXBbcG51bV0pOworCQl9CisJCXJldHVybjsKKwl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYWxsb2NhdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKQEAgLTM3NSw4ICszOTAsNjUgQEAKIAkJICAgICAgIFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWdlKSAqIFBBR0VTX1BFUl9TRUNUSU9OKSk7CiAJcmV0dXJuIG1hcDsKIH0KK3ZvaWQgX19pbml0IHNwYXJzZV9tZW1fbWFwc19wb3B1bGF0ZV9ub2RlKHN0cnVjdCBwYWdlICoqbWFwX21hcCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBudW1fYmVnaW4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG1hcF9jb3VudCwgaW50IG5vZGVpZCkKK3sKKwl2b2lkICptYXA7CisJdW5zaWduZWQgbG9uZyBwbnVtOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTjsKKworCW1hcCA9IGFsbG9jX3JlbWFwKG5vZGVpZCwgc2l6ZSAqIG1hcF9jb3VudCk7CisJaWYgKG1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQltYXBfbWFwW3BudW1dID0gbWFwOworCQkJbWFwICs9IHNpemU7CisJCX0KKwkJcmV0dXJuOworCX0KKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1hcCA9IGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgc2l6ZSAqIG1hcF9jb3VudCk7CisJaWYgKG1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQltYXBfbWFwW3BudW1dID0gbWFwOworCQkJbWFwICs9IHNpemU7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIGZhbGxiYWNrICovCisJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKworCQlpZiAoIXByZXNlbnRfc2VjdGlvbl9ucihwbnVtKSkKKwkJCWNvbnRpbnVlOworCQltYXBfbWFwW3BudW1dID0gc3BhcnNlX21lbV9tYXBfcG9wdWxhdGUocG51bSwgbm9kZWlkKTsKKwkJaWYgKG1hcF9tYXBbcG51bV0pCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNwYXJzZW1lbSBtZW1vcnkgbWFwIGJhY2tpbmcgZmFpbGVkICIKKwkJCSJzb21lIG1lbW9yeSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuXG4iLCBfX2Z1bmNfXyk7CisJCW1zLT5zZWN0aW9uX21lbV9tYXAgPSAwOworCX0KK30KICNlbmRpZiAvKiAhQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCiAKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0FMTE9DX01FTV9NQVBfVE9HRVRIRVIKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGFyc2VfZWFybHlfbWVtX21hcHNfYWxsb2Nfbm9kZShzdHJ1Y3QgcGFnZSAqKm1hcF9tYXAsCisJCQkJIHVuc2lnbmVkIGxvbmcgcG51bV9iZWdpbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBtYXBfY291bnQsIGludCBub2RlaWQpCit7CisJc3BhcnNlX21lbV9tYXBzX3BvcHVsYXRlX25vZGUobWFwX21hcCwgcG51bV9iZWdpbiwgcG51bV9lbmQsCisJCQkJCSBtYXBfY291bnQsIG5vZGVpZCk7Cit9CisjZWxzZQogc3RhdGljIHN0cnVjdCBwYWdlIF9faW5pdCAqc3BhcnNlX2Vhcmx5X21lbV9tYXBfYWxsb2ModW5zaWduZWQgbG9uZyBwbnVtKQogewogCXN0cnVjdCBwYWdlICptYXA7CkBAIC0zOTIsMTAgKzQ2NCwxMiBAQAogCW1zLT5zZWN0aW9uX21lbV9tYXAgPSAwOwogCXJldHVybiBOVUxMOwogfQorI2VuZGlmCiAKIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX3ByaW50X2xhc3Qodm9pZCkKIHsKIH0KKwogLyoKICAqIEFsbG9jYXRlIHRoZSBhY2N1bXVsYXRlZCBub24tbGluZWFyIHNlY3Rpb25zLCBhbGxvY2F0ZSBhIG1lbV9tYXAKICAqIGZvciBlYWNoIGFuZCByZWNvcmQgdGhlIHBoeXNpY2FsIHRvIHNlY3Rpb24gbWFwcGluZy4KQEAgLTQwNyw2ICs0ODEsMTQgQEAKIAl1bnNpZ25lZCBsb25nICp1c2VtYXA7CiAJdW5zaWduZWQgbG9uZyAqKnVzZW1hcF9tYXA7CiAJaW50IHNpemU7CisJaW50IG5vZGVpZF9iZWdpbiA9IDA7CisJdW5zaWduZWQgbG9uZyBwbnVtX2JlZ2luID0gMDsKKwl1bnNpZ25lZCBsb25nIHVzZW1hcF9jb3VudDsKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0FMTE9DX01FTV9NQVBfVE9HRVRIRVIKKwl1bnNpZ25lZCBsb25nIG1hcF9jb3VudDsKKwlpbnQgc2l6ZTI7CisJc3RydWN0IHBhZ2UgKiptYXBfbWFwOworI2VuZGlmCiAKIAkvKgogCSAqIG1hcCBpcyB1c2luZyBiaWcgcGFnZSAoYWthIDJNIGluIHg4NiA2NCBiaXQpCkBAIC00MjUsMTAgKzUwNyw4MSBAQAogCQlwYW5pYygiY2FuIG5vdCBhbGxvY2F0ZSB1c2VtYXBfbWFwXG4iKTsKIAogCWZvciAocG51bSA9IDA7IHBudW0gPCBOUl9NRU1fU0VDVElPTlM7IHBudW0rKykgeworCQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCiAJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQogCQkJY29udGludWU7Ci0JCXVzZW1hcF9tYXBbcG51bV0gPSBzcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jKHBudW0pOworCQltcyA9IF9fbnJfdG9fc2VjdGlvbihwbnVtKTsKKwkJbm9kZWlkX2JlZ2luID0gc3BhcnNlX2Vhcmx5X25pZChtcyk7CisJCXBudW1fYmVnaW4gPSBwbnVtOworCQlicmVhazsKIAl9CisJdXNlbWFwX2NvdW50ID0gMTsKKwlmb3IgKHBudW0gPSBwbnVtX2JlZ2luICsgMTsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CisJCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXM7CisJCWludCBub2RlaWQ7CisKKwkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCW5vZGVpZCA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCQlpZiAobm9kZWlkID09IG5vZGVpZF9iZWdpbikgeworCQkJdXNlbWFwX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBvaywgd2UgbmVlZCB0byB0YWtlIGNha2Ugb2YgZnJvbSBwbnVtX2JlZ2luIHRvIHBudW0gLSAxKi8KKwkJc3BhcnNlX2Vhcmx5X3VzZW1hcHNfYWxsb2Nfbm9kZSh1c2VtYXBfbWFwLCBwbnVtX2JlZ2luLCBwbnVtLAorCQkJCQkJIHVzZW1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKwkJLyogbmV3IHN0YXJ0LCB1cGRhdGUgY291bnQgZXRjKi8KKwkJbm9kZWlkX2JlZ2luID0gbm9kZWlkOworCQlwbnVtX2JlZ2luID0gcG51bTsKKwkJdXNlbWFwX2NvdW50ID0gMTsKKwl9CisJLyogb2ssIGxhc3QgY2h1bmsgKi8KKwlzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19ub2RlKHVzZW1hcF9tYXAsIHBudW1fYmVnaW4sIE5SX01FTV9TRUNUSU9OUywKKwkJCQkJIHVzZW1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUgorCXNpemUyID0gc2l6ZW9mKHN0cnVjdCBwYWdlICopICogTlJfTUVNX1NFQ1RJT05TOworCW1hcF9tYXAgPSBhbGxvY19ib290bWVtKHNpemUyKTsKKwlpZiAoIW1hcF9tYXApCisJCXBhbmljKCJjYW4gbm90IGFsbG9jYXRlIG1hcF9tYXBcbiIpOworCisJZm9yIChwbnVtID0gMDsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CisJCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXM7CisKKwkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCW5vZGVpZF9iZWdpbiA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCQlwbnVtX2JlZ2luID0gcG51bTsKKwkJYnJlYWs7CisJfQorCW1hcF9jb3VudCA9IDE7CisJZm9yIChwbnVtID0gcG51bV9iZWdpbiArIDE7IHBudW0gPCBOUl9NRU1fU0VDVElPTlM7IHBudW0rKykgeworCQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCQlpbnQgbm9kZWlkOworCisJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQorCQkJY29udGludWU7CisJCW1zID0gX19ucl90b19zZWN0aW9uKHBudW0pOworCQlub2RlaWQgPSBzcGFyc2VfZWFybHlfbmlkKG1zKTsKKwkJaWYgKG5vZGVpZCA9PSBub2RlaWRfYmVnaW4pIHsKKwkJCW1hcF9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKwkJLyogb2ssIHdlIG5lZWQgdG8gdGFrZSBjYWtlIG9mIGZyb20gcG51bV9iZWdpbiB0byBwbnVtIC0gMSovCisJCXNwYXJzZV9lYXJseV9tZW1fbWFwc19hbGxvY19ub2RlKG1hcF9tYXAsIHBudW1fYmVnaW4sIHBudW0sCisJCQkJCQkgbWFwX2NvdW50LCBub2RlaWRfYmVnaW4pOworCQkvKiBuZXcgc3RhcnQsIHVwZGF0ZSBjb3VudCBldGMqLworCQlub2RlaWRfYmVnaW4gPSBub2RlaWQ7CisJCXBudW1fYmVnaW4gPSBwbnVtOworCQltYXBfY291bnQgPSAxOworCX0KKwkvKiBvaywgbGFzdCBjaHVuayAqLworCXNwYXJzZV9lYXJseV9tZW1fbWFwc19hbGxvY19ub2RlKG1hcF9tYXAsIHBudW1fYmVnaW4sIE5SX01FTV9TRUNUSU9OUywKKwkJCQkJIG1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKyNlbmRpZgogCiAJZm9yIChwbnVtID0gMDsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CiAJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQpAQCAtNDM4LDcgKzU5MSwxMSBAQAogCQlpZiAoIXVzZW1hcCkKIAkJCWNvbnRpbnVlOwogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9BTExPQ19NRU1fTUFQX1RPR0VUSEVSCisJCW1hcCA9IG1hcF9tYXBbcG51bV07CisjZWxzZQogCQltYXAgPSBzcGFyc2VfZWFybHlfbWVtX21hcF9hbGxvYyhwbnVtKTsKKyNlbmRpZgogCQlpZiAoIW1hcCkKIAkJCWNvbnRpbnVlOwogCkBAIC00NDgsNiArNjA1LDkgQEAKIAogCXZtZW1tYXBfcG9wdWxhdGVfcHJpbnRfbGFzdCgpOwogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9BTExPQ19NRU1fTUFQX1RPR0VUSEVSCisJZnJlZV9ib290bWVtKF9fcGEobWFwX21hcCksIHNpemUyKTsKKyNlbmRpZgogCWZyZWVfYm9vdG1lbShfX3BhKHVzZW1hcF9tYXApLCBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCA2MDUxZmJhLi5mYzVhYTE4IDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtMTM5LDcgKzEzOSw4IEBACiAJCXRocmVzaG9sZCA9IGNhbGN1bGF0ZV90aHJlc2hvbGQoem9uZSk7CiAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQl6b25lX3BjcCh6b25lLCBjcHUpLT5zdGF0X3RocmVzaG9sZCA9IHRocmVzaG9sZDsKKwkJCXBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSktPnN0YXRfdGhyZXNob2xkCisJCQkJCQkJPSB0aHJlc2hvbGQ7CiAJfQogfQogCkBAIC0xNDksNyArMTUwLDggQEAKIHZvaWQgX19tb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sCiAJCQkJaW50IGRlbHRhKQogewotCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBjcCA9IHpvbmVfcGNwKHpvbmUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gdGhpc19jcHVfcHRyKHpvbmUtPnBhZ2VzZXQpOworCiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAJbG9uZyB4OwogCkBAIC0yMDIsNyArMjA0LDcgQEAKICAqLwogdm9pZCBfX2luY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCk7CiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAKIAkoKnApKys7CkBAIC0yMjMsNyArMjI1LDcgQEAKIAogdm9pZCBfX2RlY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCk7CiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAKIAkoKnApLS07CkBAIC0zMDAsNyArMzAyLDcgQEAKIAlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnA7CiAKLQkJcCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CisJCXAgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9aT05FX1NUQVRfSVRFTVM7IGkrKykKIAkJCWlmIChwLT52bV9zdGF0X2RpZmZbaV0pIHsKQEAgLTc0MSw3ICs3NDMsNyBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwYWdlc2V0OwogCi0JCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBpKTsKKwkJcGFnZXNldCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGkpOwogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAiXG4gICAgY3B1OiAlaSIKIAkJCSAgICJcbiAgICAgICAgICAgICAgY291bnQ6ICVpIgpAQCAtOTA2LDYgKzkwOCw3IEBACiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCXN0YXJ0X2NwdV90aW1lcihjcHUpOworCQlub2RlX3NldF9zdGF0ZShjcHVfdG9fbm9kZShjcHUpLCBOX0NQVSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggMzNmOTBlNy4uNDUzNTEyMiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZsYW5faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHZsYW5faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCB2bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZsYW5fbmV0X2lkKTsKIAlpbnQgZXJyOwpAQCAtNjc1LDcgKzY3NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdmxhbl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHZsYW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXZsYW5fcHJvY19jbGVhbnVwKG5ldCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCA1Njg1Mjk2Li42YWJkY2FjIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCisrKyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJCQkqZGVudDsKIAl1bnNpZ25lZCBsb25nCQkJCWNudF9pbmNfaGVhZHJvb21fb25fdHg7CiAJdW5zaWduZWQgbG9uZwkJCQljbnRfZW5jYXBfb25feG1pdDsKLQlzdHJ1Y3Qgdmxhbl9yeF9zdGF0cwkJCSp2bGFuX3J4X3N0YXRzOworCXN0cnVjdCB2bGFuX3J4X3N0YXRzIF9fcGVyY3B1CQkqdmxhbl9yeF9zdGF0czsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW5fZGV2X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCBlNzVhMmYzLi5jMDMxNmUwIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpCiAJCWdvdG8gZHJvcDsKIAorCXNrYi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJc2tiLT5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOwogCkBAIC04NSw2ICs4Niw3IEBACiAJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpCiAJCWdvdG8gZHJvcDsKIAorCXNrYi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJc2tiLT5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGMxYjkyY2EuLjllODMyNzIgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0yNjMsMTEgKzI2MywxMCBAQAogCQl2aGRyLT5oX3ZsYW5fVENJID0gaHRvbnModmxhbl90Y2kpOwogCiAJCS8qCi0JCSAqICBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zIHdlCi0JCSAqICBwdXQgdGhlIGxlbmd0aCBpbiBoZXJlIGluc3RlYWQuIEl0IGlzIHVwIHRvIHRoZSA4MDIuMgotCQkgKiAgbGF5ZXIgdG8gY2FycnkgcHJvdG9jb2wgaW5mb3JtYXRpb24uCisJCSAqICBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zLzIgd2UKKwkJICogIHB1dCB0aGUgbGVuZ3RoIGluIGhlcmUgaW5zdGVhZC4KIAkJICovCi0JCWlmICh0eXBlICE9IEVUSF9QXzgwMl8zKQorCQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMyAmJiB0eXBlICE9IEVUSF9QXzgwMl8yKQogCQkJdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IGh0b25zKHR5cGUpOwogCQllbHNlCiAJCQl2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gaHRvbnMobGVuKTsKQEAgLTMyMyw3ICszMjIsNyBAQAogCX0KIAogCi0Jc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCXNrYl9zZXRfZGV2KHNrYiwgdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2Rldik7CiAJbGVuID0gc2tiLT5sZW47CiAJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCA5ZWMxZjA1Li5hZmVhZDM1IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgKglDcmVhdGUgL3Byb2MvbmV0L3ZsYW4gZW50cmllcwogICovCiAKLWludCB2bGFuX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCB2bGFuX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOwogCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYyBiL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCmluZGV4IDgwY2FhZDEuLjZlZjBlNzYxIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYworKysgYi9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYwpAQCAtMTQ0LDQwICsxNDQsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHNvY2sgKmF0YWxrX2dldF9zb2NrZXRfaWR4KGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IHNvY2sgKnM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQlza19mb3JfZWFjaChzLCBub2RlLCAmYXRhbGtfc29ja2V0cykKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JcyA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gczsKLX0KLQogc3RhdGljIHZvaWQgKmF0YWxrX3NlcV9zb2NrZXRfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoYXRhbGtfc29ja2V0c19sb2NrKQogewotCWxvZmZfdCBsID0gKnBvczsKLQogCXJlYWRfbG9ja19iaCgmYXRhbGtfc29ja2V0c19sb2NrKTsKLQlyZXR1cm4gbCA/IGF0YWxrX2dldF9zb2NrZXRfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZhdGFsa19zb2NrZXRzLCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmF0YWxrX3NlcV9zb2NrZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNvY2sgKmk7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCWkgPSBza19oZWFkKCZhdGFsa19zb2NrZXRzKTsKLQkJZ290byBvdXQ7Ci0JfQotCWkgPSBza19uZXh0KHYpOwotb3V0OgotCXJldHVybiBpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmYXRhbGtfc29ja2V0cywgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgYXRhbGtfc2VxX3NvY2tldF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTk3LDcgKzE3Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXMgPSB2OworCXMgPSBza19lbnRyeSh2KTsKIAlhdCA9IGF0X3NrKHMpOwogCiAJc2VxX3ByaW50ZihzZXEsICIlMDJYICAgJTA0WDolMDJYOiUwMlggICUwNFg6JTAyWDolMDJYICAlMDhYOiUwOFggIgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9hZGRyLmMgYi9uZXQvYXRtL2FkZHIuYwppbmRleCA4MmU4NWFiLi5jZjNhZThiNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9hZGRyLmMKKysrIGIvbmV0L2F0bS9hZGRyLmMKQEAgLTQsNyArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInNpZ25hbGluZy5oIgogI2luY2x1ZGUgImFkZHIuaCIKZGlmZiAtLWdpdCBhL25ldC9hdG0vYXRtX21pc2MuYyBiL25ldC9hdG0vYXRtX21pc2MuYwppbmRleCAwMmNjN2U3Li5mYzYzNTI2IDEwMDY0NAotLS0gYS9uZXQvYXRtL2F0bV9taXNjLmMKKysrIGIvbmV0L2F0bS9hdG1fbWlzYy5jCkBAIC0yLDM3ICsyLDM1IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBJQ0EgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc29uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAotCi1pbnQgYXRtX2NoYXJnZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCB0cnVlc2l6ZSkKK2ludCBhdG1fY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCB0cnVlc2l6ZSkKIHsKLQlhdG1fZm9yY2VfY2hhcmdlKHZjYyx0cnVlc2l6ZSk7CisJYXRtX2ZvcmNlX2NoYXJnZSh2Y2MsIHRydWVzaXplKTsKIAlpZiAoYXRvbWljX3JlYWQoJnNrX2F0bSh2Y2MpLT5za19ybWVtX2FsbG9jKSA8PSBza19hdG0odmNjKS0+c2tfcmN2YnVmKQogCQlyZXR1cm4gMTsKLQlhdG1fcmV0dXJuKHZjYyx0cnVlc2l6ZSk7CisJYXRtX3JldHVybih2Y2MsIHRydWVzaXplKTsKIAlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woYXRtX2NoYXJnZSk7CiAKLQotc3RydWN0IHNrX2J1ZmYgKmF0bV9hbGxvY19jaGFyZ2Uoc3RydWN0IGF0bV92Y2MgKnZjYyxpbnQgcGR1X3NpemUsCi0gICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RydWN0IHNrX2J1ZmYgKmF0bV9hbGxvY19jaGFyZ2Uoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHBkdV9zaXplLAorCQkJCSBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CiAJaW50IGd1ZXNzID0gYXRtX2d1ZXNzX3BkdTJ0cnVlc2l6ZShwZHVfc2l6ZSk7CiAKLQlhdG1fZm9yY2VfY2hhcmdlKHZjYyxndWVzcyk7CisJYXRtX2ZvcmNlX2NoYXJnZSh2Y2MsIGd1ZXNzKTsKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSBzay0+c2tfcmN2YnVmKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IocGR1X3NpemUsZ2ZwX2ZsYWdzKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihwZHVfc2l6ZSwgZ2ZwX2ZsYWdzKTsKIAogCQlpZiAoc2tiKSB7CiAJCQlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUtZ3Vlc3MsCkBAIC00MCwxMCArMzgsMTEgQEAKIAkJCXJldHVybiBza2I7CiAJCX0KIAl9Ci0JYXRtX3JldHVybih2Y2MsZ3Vlc3MpOworCWF0bV9yZXR1cm4odmNjLCBndWVzcyk7CiAJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZHJvcCk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGF0bV9hbGxvY19jaGFyZ2UpOwogCiAKIC8qCkBAIC03Myw3ICs3Miw2IEBACiAgKgkgZWxzZSAqCiAgKi8KIAotCiBpbnQgYXRtX3Bjcl9nb2FsKGNvbnN0IHN0cnVjdCBhdG1fdHJhZnBybSAqdHApCiB7CiAJaWYgKHRwLT5wY3IgJiYgdHAtPnBjciAhPSBBVE1fTUFYX1BDUikKQEAgLTg0LDI2ICs4MiwyMCBAQAogCQlyZXR1cm4gLXRwLT5tYXhfcGNyOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChhdG1fcGNyX2dvYWwpOwogCi0KLXZvaWQgc29uZXRfY29weV9zdGF0cyhzdHJ1Y3Qga19zb25ldF9zdGF0cyAqZnJvbSxzdHJ1Y3Qgc29uZXRfc3RhdHMgKnRvKQordm9pZCBzb25ldF9jb3B5X3N0YXRzKHN0cnVjdCBrX3NvbmV0X3N0YXRzICpmcm9tLCBzdHJ1Y3Qgc29uZXRfc3RhdHMgKnRvKQogewogI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIHRvLT5pID0gYXRvbWljX3JlYWQoJmZyb20tPmkpCiAJX19TT05FVF9JVEVNUwogI3VuZGVmIF9fSEFORExFX0lURU0KIH0KK0VYUE9SVF9TWU1CT0woc29uZXRfY29weV9zdGF0cyk7CiAKLQotdm9pZCBzb25ldF9zdWJ0cmFjdF9zdGF0cyhzdHJ1Y3Qga19zb25ldF9zdGF0cyAqZnJvbSxzdHJ1Y3Qgc29uZXRfc3RhdHMgKnRvKQordm9pZCBzb25ldF9zdWJ0cmFjdF9zdGF0cyhzdHJ1Y3Qga19zb25ldF9zdGF0cyAqZnJvbSwgc3RydWN0IHNvbmV0X3N0YXRzICp0bykKIHsKLSNkZWZpbmUgX19IQU5ETEVfSVRFTShpKSBhdG9taWNfc3ViKHRvLT5pLCZmcm9tLT5pKQorI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIGF0b21pY19zdWIodG8tPmksICZmcm9tLT5pKQogCV9fU09ORVRfSVRFTVMKICN1bmRlZiBfX0hBTkRMRV9JVEVNCiB9Ci0KLQotRVhQT1JUX1NZTUJPTChhdG1fY2hhcmdlKTsKLUVYUE9SVF9TWU1CT0woYXRtX2FsbG9jX2NoYXJnZSk7Ci1FWFBPUlRfU1lNQk9MKGF0bV9wY3JfZ29hbCk7Ci1FWFBPUlRfU1lNQk9MKHNvbmV0X2NvcHlfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChzb25ldF9zdWJ0cmFjdF9zdGF0cyk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2F0bV9zeXNmcy5jIGIvbmV0L2F0bS9hdG1fc3lzZnMuYwppbmRleCBiNTY3NGRjMi4uZjY5M2I3OCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9hdG1fc3lzZnMuYworKysgYi9uZXQvYXRtL2F0bV9zeXNmcy5jCkBAIC00MiwxMyArNDIsMTQgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGV2LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhYWRkciwgJmFkZXYtPmxvY2FsLCBlbnRyeSkgewotCQlmb3IoaSA9IDAsIGogPSAwOyBpIDwgQVRNX0VTQV9MRU47ICsraSwgKytqKSB7CisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQVRNX0VTQV9MRU47ICsraSwgKytqKSB7CiAJCQlpZiAoaiA9PSAqZm10KSB7CiAJCQkJcG9zICs9IHNwcmludGYocG9zLCAiLiIpOwogCQkJCSsrZm10OwogCQkJCWogPSAwOwogCQkJfQotCQkJcG9zICs9IHNwcmludGYocG9zLCAiJTAyeCIsIGFhZGRyLT5hZGRyLnNhc19hZGRyLnBydltpXSk7CisJCQlwb3MgKz0gc3ByaW50Zihwb3MsICIlMDJ4IiwKKwkJCQkgICAgICAgYWFkZHItPmFkZHIuc2FzX2FkZHIucHJ2W2ldKTsKIAkJfQogCQlwb3MgKz0gc3ByaW50Zihwb3MsICJcbiIpOwogCX0KQEAgLTc4LDE3ICs3OSwxNyBAQAogCiAJLyogc2hvdyB0aGUgbGluayByYXRlLCBub3QgdGhlIGRhdGEgcmF0ZSAqLwogCXN3aXRjaCAoYWRldi0+bGlua19yYXRlKSB7Ci0JCWNhc2UgQVRNX09DM19QQ1I6Ci0JCQlsaW5rX3JhdGUgPSAxNTU1MjAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fT0MxMl9QQ1I6Ci0JCQlsaW5rX3JhdGUgPSA2MjIwODAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fMjVfUENSOgotCQkJbGlua19yYXRlID0gMjU2MDAwMDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWxpbmtfcmF0ZSA9IGFkZXYtPmxpbmtfcmF0ZSAqIDggKiA1MzsKKwljYXNlIEFUTV9PQzNfUENSOgorCQlsaW5rX3JhdGUgPSAxNTU1MjAwMDA7CisJCWJyZWFrOworCWNhc2UgQVRNX09DMTJfUENSOgorCQlsaW5rX3JhdGUgPSA2MjIwODAwMDA7CisJCWJyZWFrOworCWNhc2UgQVRNXzI1X1BDUjoKKwkJbGlua19yYXRlID0gMjU2MDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxpbmtfcmF0ZSA9IGFkZXYtPmxpbmtfcmF0ZSAqIDggKiA1MzsKIAl9CiAJcG9zICs9IHNwcmludGYocG9zLCAiJWRcbiIsIGxpbmtfcmF0ZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IGM5MjMwYzMuLjRkNjRkODcgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYnIyNjg0LmMKKysrIGIvbmV0L2F0bS9icjI2ODQuYwpAQCAtNiw2ICs2LDggQEAKICAqICAgICAgICAgIEVyaWMgS2luemllLCAyMDA2LTIwMDcsIFVTIE5hdmFsIFJlc2VhcmNoIExhYm9yYXRvcnkKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTUsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CkBAIC0yNiwyMCArMjgsMTQgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0jaWZkZWYgU0tCX0RFQlVHCiBzdGF0aWMgdm9pZCBza2JfZGVidWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKyNpZmRlZiBTS0JfREVCVUcKICNkZWZpbmUgTlVNMlBSSU5UIDUwCi0JY2hhciBidWZbTlVNMlBSSU5UICogMyArIDFdOwkvKiAzIGNoYXJzIHBlciBieXRlICovCi0JaW50IGkgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgTlVNMlBSSU5UOyBpKyspIHsKLQkJc3ByaW50ZihidWYgKyBpICogMywgIiUyLjJ4ICIsIDB4ZmYgJiBza2ItPmRhdGFbaV0pOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiYnIyNjg0OiBza2I6ICVzXG4iLCBidWYpOwotfQotI2Vsc2UKLSNkZWZpbmUgc2tiX2RlYnVnKHNrYikJZG8ge30gd2hpbGUgKDApCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgImJyMjY4NDogc2tiOiAiLCBEVU1QX09GRlNFVCwKKwkJICAgICAgIDE2LCAxLCBza2ItPmRhdGEsIG1pbihOVU0yUFJJTlQsIHNrYi0+bGVuKSwgdHJ1ZSk7CiAjZW5kaWYKK30KIAogI2RlZmluZSBCUjI2ODRfRVRIRVJUWVBFX0xFTgkyCiAjZGVmaW5lIEJSMjY4NF9QQURfTEVOCQkyCkBAIC02OCw3ICs2NCw3IEBACiAJc3RydWN0IGF0bV92Y2MgKmF0bXZjYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlOwogCS8qIGtlZXAgb2xkIHB1c2gsIHBvcCBmdW5jdGlvbnMgZm9yIGNoYWluaW5nICovCi0Jdm9pZCAoKm9sZF9wdXNoKSAoc3RydWN0IGF0bV92Y2MgKiB2Y2MsIHN0cnVjdCBza19idWZmICogc2tiKTsKKwl2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQgKCpvbGRfcG9wKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAllbnVtIGJyMjY4NF9lbmNhcHMgZW5jYXBzOwogCXN0cnVjdCBsaXN0X2hlYWQgYnJ2Y2NzOwpAQCAtMTQ4LDcgKzE0NCw3IEBACiAJc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjID0gQlIyNjg0X1ZDQyh2Y2MpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gc2tiLT5kZXY7CiAKLQlwcl9kZWJ1ZygiYnIyNjg0X3BvcCh2Y2MgJXAgOyBuZXRfZGV2ICVwIClcbiIsIHZjYywgbmV0X2Rldik7CisJcHJfZGVidWcoIih2Y2MgJXAgOyBuZXRfZGV2ICVwIClcbiIsIHZjYywgbmV0X2Rldik7CiAJYnJ2Y2MtPm9sZF9wb3AodmNjLCBza2IpOwogCiAJaWYgKCFuZXRfZGV2KQpAQCAtMjQ0LDcgKzI0MCw3IEBACiAJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKGRldik7CiAJc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjOwogCi0JcHJfZGVidWcoImJyMjY4NF9zdGFydF94bWl0LCBza2JfZHN0KHNrYik9JXBcbiIsIHNrYl9kc3Qoc2tiKSk7CisJcHJfZGVidWcoInNrYl9kc3Qoc2tiKT0lcFxuIiwgc2tiX2RzdChza2IpKTsKIAlyZWFkX2xvY2soJmRldnNfbG9jayk7CiAJYnJ2Y2MgPSBwaWNrX291dGdvaW5nX3ZjYyhza2IsIGJyZGV2KTsKIAlpZiAoYnJ2Y2MgPT0gTlVMTCkgewpAQCAtMzAwLDcgKzI5Niw4IEBACiAJCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldjsKIAkJcmVhZF9sb2NrKCZkZXZzX2xvY2spOwogCQlicmRldiA9IEJSUFJJVihicjI2ODRfZmluZF9kZXYoJmZzLmlmc3BlYykpOwotCQlpZiAoYnJkZXYgPT0gTlVMTCB8fCBsaXN0X2VtcHR5KCZicmRldi0+YnJ2Y2NzKSB8fCBicmRldi0+YnJ2Y2NzLm5leHQgIT0gYnJkZXYtPmJydmNjcy5wcmV2KQkvKiA+MSBWQ0MgKi8KKwkJaWYgKGJyZGV2ID09IE5VTEwgfHwgbGlzdF9lbXB0eSgmYnJkZXYtPmJydmNjcykgfHwKKwkJICAgIGJyZGV2LT5icnZjY3MubmV4dCAhPSBicmRldi0+YnJ2Y2NzLnByZXYpCS8qID4xIFZDQyAqLwogCQkJYnJ2Y2MgPSBOVUxMOwogCQllbHNlCiAJCQlicnZjYyA9IGxpc3RfZW50cnlfYnJ2Y2MoYnJkZXYtPmJydmNjcy5uZXh0KTsKQEAgLTM1Miw3ICszNDksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gYnJ2Y2MtPmRldmljZTsKIAlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYobmV0X2Rldik7CiAKLQlwcl9kZWJ1ZygiYnIyNjg0X3B1c2hcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCiAJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewogCQkvKiBza2I9PU5VTEwgbWVhbnMgVkNDIGlzIGJlaW5nIGRlc3Ryb3llZCAqLwpAQCAtMzc2LDI5ICszNzMsMjUgQEAKIAkJCV9fc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDQpOwogCiAJCS8qIGFjY2VwdCBwYWNrZXRzIHRoYXQgaGF2ZSAiaXB2WzQ2XSIgaW4gdGhlIHNuYXAgaGVhZGVyICovCi0JCWlmICgoc2tiLT5sZW4gPj0gKHNpemVvZihsbGNfb3VpX2lwdjQpKSkKLQkJICAgICYmCi0JCSAgICAobWVtY21wCi0JCSAgICAgKHNrYi0+ZGF0YSwgbGxjX291aV9pcHY0LAotCQkgICAgICBzaXplb2YobGxjX291aV9pcHY0KSAtIEJSMjY4NF9FVEhFUlRZUEVfTEVOKSA9PSAwKSkgewotCQkJaWYgKG1lbWNtcAotCQkJICAgIChza2ItPmRhdGEgKyA2LCBldGhlcnR5cGVfaXB2NiwKLQkJCSAgICAgc2l6ZW9mKGV0aGVydHlwZV9pcHY2KSkgPT0gMCkKKwkJaWYgKChza2ItPmxlbiA+PSAoc2l6ZW9mKGxsY19vdWlfaXB2NCkpKSAmJgorCQkgICAgKG1lbWNtcChza2ItPmRhdGEsIGxsY19vdWlfaXB2NCwKKwkJCSAgICBzaXplb2YobGxjX291aV9pcHY0KSAtIEJSMjY4NF9FVEhFUlRZUEVfTEVOKSA9PSAwKSkgeworCQkJaWYgKG1lbWNtcChza2ItPmRhdGEgKyA2LCBldGhlcnR5cGVfaXB2NiwKKwkJCQkgICBzaXplb2YoZXRoZXJ0eXBlX2lwdjYpKSA9PSAwKQogCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKLQkJCWVsc2UgaWYgKG1lbWNtcAotCQkJCSAoc2tiLT5kYXRhICsgNiwgZXRoZXJ0eXBlX2lwdjQsCi0JCQkJICBzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKQorCQkJZWxzZSBpZiAobWVtY21wKHNrYi0+ZGF0YSArIDYsIGV0aGVydHlwZV9pcHY0LAorCQkJCQlzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKQogCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJCQllbHNlCiAJCQkJZ290byBlcnJvcjsKIAkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKGxsY19vdWlfaXB2NCkpOwogCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JCQkvKgotCQkJICogTGV0IHVzIHdhc3RlIHNvbWUgdGltZSBmb3IgY2hlY2tpbmcgdGhlIGVuY2Fwc3VsYXRpb24uCi0JCQkgKiBOb3RlLCB0aGF0IG9ubHkgNyBjaGFyIGlzIGNoZWNrZWQgc28gZnJhbWVzIHdpdGggYSB2YWxpZCBGQ1MKLQkJCSAqIGFyZSBhbHNvIGFjY2VwdGVkIChidXQgRkNTIGlzIG5vdCBjaGVja2VkIG9mIGNvdXJzZSkuCi0JCQkgKi8KKwkJLyoKKwkJICogTGV0IHVzIHdhc3RlIHNvbWUgdGltZSBmb3IgY2hlY2tpbmcgdGhlIGVuY2Fwc3VsYXRpb24uCisJCSAqIE5vdGUsIHRoYXQgb25seSA3IGNoYXIgaXMgY2hlY2tlZCBzbyBmcmFtZXMgd2l0aCBhIHZhbGlkIEZDUworCQkgKiBhcmUgYWxzbyBhY2NlcHRlZCAoYnV0IEZDUyBpcyBub3QgY2hlY2tlZCBvZiBjb3Vyc2UpLgorCQkgKi8KIAkJfSBlbHNlIGlmICgoc2tiLT5sZW4gPj0gc2l6ZW9mKGxsY19vdWlfcGlkX3BhZCkpICYmCiAJCQkgICAobWVtY21wKHNrYi0+ZGF0YSwgbGxjX291aV9waWRfcGFkLCA3KSA9PSAwKSkgewogCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YobGxjX291aV9waWRfcGFkKSk7CkBAIC00NzksOCArNDcyLDcgQEAKIAl3cml0ZV9sb2NrX2lycSgmZGV2c19sb2NrKTsKIAluZXRfZGV2ID0gYnIyNjg0X2ZpbmRfZGV2KCZiZS5pZnNwZWMpOwogCWlmIChuZXRfZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYnIyNjg0OiB0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0YW50IGRldmljZVxuIik7CisJCXByX2VycigidHJpZWQgdG8gYXR0YWNoIHRvIG5vbi1leGlzdGFudCBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtNDk0LDE3ICs0ODYsMTYgQEAKIAkJZXJyID0gLUVFWElTVDsKIAkJZ290byBlcnJvcjsKIAl9Ci0JaWYgKGJlLmZjc19pbiAhPSBCUjI2ODRfRkNTSU5fTk8gfHwgYmUuZmNzX291dCAhPSBCUjI2ODRfRkNTT1VUX05PIHx8Ci0JICAgIGJlLmZjc19hdXRvIHx8IGJlLmhhc192cGlpZCB8fCBiZS5zZW5kX3BhZGRpbmcgfHwgKGJlLmVuY2FwcyAhPQotCQkJCQkJCSAgICAgICBCUjI2ODRfRU5DQVBTX1ZDCi0JCQkJCQkJICAgICAgICYmIGJlLmVuY2FwcyAhPQotCQkJCQkJCSAgICAgICBCUjI2ODRfRU5DQVBTX0xMQykKLQkgICAgfHwgYmUubWluX3NpemUgIT0gMCkgeworCWlmIChiZS5mY3NfaW4gIT0gQlIyNjg0X0ZDU0lOX05PIHx8CisJICAgIGJlLmZjc19vdXQgIT0gQlIyNjg0X0ZDU09VVF9OTyB8fAorCSAgICBiZS5mY3NfYXV0byB8fCBiZS5oYXNfdnBpaWQgfHwgYmUuc2VuZF9wYWRkaW5nIHx8CisJICAgIChiZS5lbmNhcHMgIT0gQlIyNjg0X0VOQ0FQU19WQyAmJgorCSAgICAgYmUuZW5jYXBzICE9IEJSMjY4NF9FTkNBUFNfTExDKSB8fAorCSAgICBiZS5taW5fc2l6ZSAhPSAwKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CiAJfQotCXByX2RlYnVnKCJicjI2ODRfcmVndmNjIHZjYz0lcCwgZW5jYXBzPSVkLCBicnZjYz0lcFxuIiwgYXRtdmNjLAotCQkgYmUuZW5jYXBzLCBicnZjYyk7CisJcHJfZGVidWcoInZjYz0lcCwgZW5jYXBzPSVkLCBicnZjYz0lcFxuIiwgYXRtdmNjLCBiZS5lbmNhcHMsIGJydmNjKTsKIAlpZiAobGlzdF9lbXB0eSgmYnJkZXYtPmJydmNjcykgJiYgIWJyZGV2LT5tYWNfd2FzX3NldCkgewogCQl1bnNpZ25lZCBjaGFyICplc2kgPSBhdG12Y2MtPmRldi0+ZXNpOwogCQlpZiAoZXNpWzBdIHwgZXNpWzFdIHwgZXNpWzJdIHwgZXNpWzNdIHwgZXNpWzRdIHwgZXNpWzVdKQpAQCAtNTQxLDcgKzUzMiw4IEBACiAJfQogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJcmV0dXJuIDA7Ci0gICAgICBlcnJvcjoKKworZXJyb3I6CiAJd3JpdGVfdW5sb2NrX2lycSgmZGV2c19sb2NrKTsKIAlrZnJlZShicnZjYyk7CiAJcmV0dXJuIGVycjsKQEAgLTU4Nyw3ICs1NzksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZicmRldi0+YnJ2Y2NzKTsKIH0KIAotc3RhdGljIGludCBicjI2ODRfY3JlYXRlKHZvaWQgX191c2VyICogYXJnKQorc3RhdGljIGludCBicjI2ODRfY3JlYXRlKHZvaWQgX191c2VyICphcmcpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwpAQCAtNTk1LDExICs1ODcsMTAgQEAKIAlzdHJ1Y3QgYXRtX25ld2lmX2JyMjY4NCBuaTsKIAllbnVtIGJyMjY4NF9wYXlsb2FkIHBheWxvYWQ7CiAKLQlwcl9kZWJ1ZygiYnIyNjg0X2NyZWF0ZVxuIik7CisJcHJfZGVidWcoIlxuIik7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJm5pLCBhcmcsIHNpemVvZiBuaSkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5pLCBhcmcsIHNpemVvZiBuaSkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWlmIChuaS5tZWRpYSAmIEJSMjY4NF9GTEFHX1JPVVRFRCkKIAkJcGF5bG9hZCA9IHBfcm91dGVkOwpAQCAtNjA3LDkgKzU5OCw4IEBACiAJCXBheWxvYWQgPSBwX2JyaWRnZWQ7CiAJbmkubWVkaWEgJj0gMHhmZmZmOwkvKiBzdHJpcCBmbGFncyAqLwogCi0JaWYgKG5pLm1lZGlhICE9IEJSMjY4NF9NRURJQV9FVEhFUk5FVCB8fCBuaS5tdHUgIT0gMTUwMCkgeworCWlmIChuaS5tZWRpYSAhPSBCUjI2ODRfTUVESUFfRVRIRVJORVQgfHwgbmkubXR1ICE9IDE1MDApCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGJyMjY4NF9kZXYpLAogCQkJICAgICAgbmkuaWZuYW1lWzBdID8gbmkuaWZuYW1lIDogIm5hcyVkIiwKQEAgLTYyNCw3ICs2MTQsNyBAQAogCS8qIG9wZW4sIHN0b3AsIGRvX2lvY3RsID8gKi8KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImJyMjY4NF9jcmVhdGU6IHJlZ2lzdGVyX25ldGRldiBmYWlsZWRcbiIpOworCQlwcl9lcnIoInJlZ2lzdGVyX25ldGRldiBmYWlsZWRcbiIpOwogCQlmcmVlX25ldGRldihuZXRkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggNjQ2MjljMy4uZWJmYTAyMiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIsNiArMiw4IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvKiBmb3IgVUlOVF9NQVggKi8KQEAgLTMwLDEwICszMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+IC8qIGZvciBzdHJ1Y3QgcnRhYmxlIGFuZCByb3V0aW5nICovCiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4gLyogaWNtcF9zZW5kICovCi0jaW5jbHVkZSA8YXNtL3BhcmFtLmg+IC8qIGZvciBIWiAqLworI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+IC8qIGZvciBIWiAqLworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+IC8qIGZvciBodG9ucyBldGMuICovCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPiAvKiBzYXZlL3Jlc3RvcmVfZmxhZ3MgKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNTEsMTMgKzUzLDEzIEBACiAJc3RydWN0IGF0bWFycF9jdHJsICpjdHJsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlwcl9kZWJ1ZygidG9fYXRtYXJwZCglZClcbiIsIHR5cGUpOworCXByX2RlYnVnKCIoJWQpXG4iLCB0eXBlKTsKIAlpZiAoIWF0bWFycGQpCiAJCXJldHVybiAtRVVOQVRDSDsKLQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1hcnBfY3RybCksR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY3RybCA9IChzdHJ1Y3QgYXRtYXJwX2N0cmwgKikgc2tiX3B1dChza2Isc2l6ZW9mKHN0cnVjdCBhdG1hcnBfY3RybCkpOworCWN0cmwgPSAoc3RydWN0IGF0bWFycF9jdHJsICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpKTsKIAljdHJsLT50eXBlID0gdHlwZTsKIAljdHJsLT5pdGZfbnVtID0gaXRmOwogCWN0cmwtPmlwID0gaXA7CkBAIC03MSw4ICs3Myw3IEBACiAKIHN0YXRpYyB2b2lkIGxpbmtfdmNjKHN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MsIHN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5KQogewotCXByX2RlYnVnKCJsaW5rX3ZjYyAlcCB0byBlbnRyeSAlcCAobmVpZ2ggJXApXG4iLCBjbGlwX3ZjYywgZW50cnksCi0JCWVudHJ5LT5uZWlnaCk7CisJcHJfZGVidWcoIiVwIHRvIGVudHJ5ICVwIChuZWlnaCAlcClcbiIsIGNsaXBfdmNjLCBlbnRyeSwgZW50cnktPm5laWdoKTsKIAljbGlwX3ZjYy0+ZW50cnkgPSBlbnRyeTsKIAljbGlwX3ZjYy0+eG9mZiA9IDA7CS8qIEBAQCBtYXkgb3ZlcnJ1biBidWZmZXIgYnkgb25lIHBhY2tldCAqLwogCWNsaXBfdmNjLT5uZXh0ID0gZW50cnktPnZjY3M7CkBAIC04Niw3ICs4Nyw3IEBACiAJc3RydWN0IGNsaXBfdmNjICoqd2FsazsKIAogCWlmICghZW50cnkpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiIWNsaXBfdmNjLT5lbnRyeSAoY2xpcF92Y2MgJXApXG4iLCBjbGlwX3ZjYyk7CisJCXByX2NyaXQoIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIiwgY2xpcF92Y2MpOwogCQlyZXR1cm47CiAJfQogCW5ldGlmX3R4X2xvY2tfYmgoZW50cnktPm5laWdoLT5kZXYpOwkvKiBibG9jayBjbGlwX3N0YXJ0X3htaXQoKSAqLwpAQCAtMTA2LDEzICsxMDcsMTEgQEAKIAkJCWVycm9yID0gbmVpZ2hfdXBkYXRlKGVudHJ5LT5uZWlnaCwgTlVMTCwgTlVEX05PTkUsCiAJCQkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOwogCQkJaWYgKGVycm9yKQotCQkJCXByaW50ayhLRVJOX0NSSVQgInVubGlua19jbGlwX3ZjYzogIgotCQkJCSAgICAgICAibmVpZ2hfdXBkYXRlIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CisJCQkJcHJfY3JpdCgibmVpZ2hfdXBkYXRlIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CiAJCQlnb3RvIG91dDsKIAkJfQotCXByaW50ayhLRVJOX0NSSVQgIkFUTUFSUDogdW5saW5rX2NsaXBfdmNjIGZhaWxlZCAoZW50cnkgJXAsIHZjYyAiCi0JICAgICAgICIweCVwKVxuIiwgZW50cnksIGNsaXBfdmNjKTsKLSAgICAgIG91dDoKKwlwcl9jcml0KCJBVE1BUlA6IGZhaWxlZCAoZW50cnkgJXAsIHZjYyAweCVwKVxuIiwgZW50cnksIGNsaXBfdmNjKTsKK291dDoKIAluZXRpZl90eF91bmxvY2tfYmgoZW50cnktPm5laWdoLT5kZXYpOwogfQogCkBAIC0xMjcsNyArMTI2LDcgQEAKIAogCQlpZiAoY3YtPmlkbGVfdGltZW91dCAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGV4cCkpIHsKIAkJCXByX2RlYnVnKCJyZWxlYXNpbmcgdmNjICVwLT4lcCBvZiBlbnRyeSAlcFxuIiwKLQkJCQljdiwgY3YtPnZjYywgZW50cnkpOworCQkJCSBjdiwgY3YtPnZjYywgZW50cnkpOwogCQkJdmNjX3JlbGVhc2VfYXN5bmMoY3YtPnZjYywgLUVUSU1FRE9VVCk7CiAJCX0KIAl9CkBAIC0xMzksNyArMTM4LDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQlwcl9kZWJ1ZygiZGVzdHJ1Y3Rpb24gcG9zdHBvbmVkIHdpdGggcmVmICVkXG4iLAotCQkJYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOworCQkJIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKIAogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZuLT5hcnBfcXVldWUpKSAhPSBOVUxMKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTYzLDcgKzE2Miw3IEBACiB7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAotCXByX2RlYnVnKCJjbGlwX2FycF9yY3ZcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCXZjYyA9IEFUTV9TS0Ioc2tiKS0+dmNjOwogCWlmICghdmNjIHx8ICFhdG1fY2hhcmdlKHZjYywgc2tiLT50cnVlc2l6ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTE4OCw3ICsxODcsNyBAQAogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MgPSBDTElQX1ZDQyh2Y2MpOwogCi0JcHJfZGVidWcoImNsaXAgcHVzaFxuIik7CisJcHJfZGVidWcoIlxuIik7CiAJaWYgKCFza2IpIHsKIAkJcHJfZGVidWcoInJlbW92aW5nIFZDQyAlcFxuIiwgY2xpcF92Y2MpOwogCQlpZiAoY2xpcF92Y2MtPmVudHJ5KQpAQCAtMjA2LDEyICsyMDUsMTIgQEAKIAl9CiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlpZiAoIWNsaXBfdmNjLT5lbmNhcAotCSAgICB8fCBza2ItPmxlbiA8IFJGQzE0ODNMTENfTEVOCi0JICAgIHx8IG1lbWNtcChza2ItPmRhdGEsIGxsY19vdWksIHNpemVvZiAobGxjX291aSkpKQorCWlmICghY2xpcF92Y2MtPmVuY2FwIHx8CisJICAgIHNrYi0+bGVuIDwgUkZDMTQ4M0xMQ19MRU4gfHwKKwkgICAgbWVtY21wKHNrYi0+ZGF0YSwgbGxjX291aSwgc2l6ZW9mKGxsY19vdWkpKSkKIAkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAllbHNlIHsKLQkJc2tiLT5wcm90b2NvbCA9ICgoX19iZTE2ICopIHNrYi0+ZGF0YSlbM107CisJCXNrYi0+cHJvdG9jb2wgPSAoKF9fYmUxNiAqKXNrYi0+ZGF0YSlbM107CiAJCXNrYl9wdWxsKHNrYiwgUkZDMTQ4M0xMQ19MRU4pOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKSB7CiAJCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMjM5LDcgKzIzOCw3IEBACiAJaW50IG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHJfZGVidWcoImNsaXBfcG9wKHZjYyAlcClcbiIsIHZjYyk7CisJcHJfZGVidWcoIih2Y2MgJXApXG4iLCB2Y2MpOwogCWNsaXBfdmNjLT5vbGRfcG9wKHZjYywgc2tiKTsKIAkvKiBza2ItPmRldiA9PSBOVUxMIGluIG91dGJvdW5kIEFSUCBwYWNrZXRzICovCiAJaWYgKCFkZXYpCkBAIC0yNTUsNyArMjU0LDcgQEAKIAogc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXByX2RlYnVnKCJjbGlwX25laWdoX3NvbGljaXQgKG5laWdoICVwLCBza2IgJXApXG4iLCBuZWlnaCwgc2tiKTsKKwlwcl9kZWJ1ZygiKG5laWdoICVwLCBza2IgJXApXG4iLCBuZWlnaCwgc2tiKTsKIAl0b19hdG1hcnBkKGFjdF9uZWVkLCBQUklWKG5laWdoLT5kZXYpLT5udW1iZXIsIE5FSUdIMkVOVFJZKG5laWdoKS0+aXApOwogfQogCkBAIC0yODQsNyArMjgzLDcgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtczsKIAotCXByX2RlYnVnKCJjbGlwX2NvbnN0cnVjdG9yIChuZWlnaCAlcCwgZW50cnkgJXApXG4iLCBuZWlnaCwgZW50cnkpOworCXByX2RlYnVnKCIobmVpZ2ggJXAsIGVudHJ5ICVwKVxuIiwgbmVpZ2gsIGVudHJ5KTsKIAluZWlnaC0+dHlwZSA9IGluZXRfYWRkcl90eXBlKCZpbml0X25ldCwgZW50cnktPmlwKTsKIAlpZiAobmVpZ2gtPnR5cGUgIT0gUlROX1VOSUNBU1QpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY5LDkgKzM2OCw5IEBACiAJaW50IG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHJfZGVidWcoImNsaXBfc3RhcnRfeG1pdCAoc2tiICVwKVxuIiwgc2tiKTsKKwlwcl9kZWJ1ZygiKHNrYiAlcClcbiIsIHNrYik7CiAJaWYgKCFza2JfZHN0KHNrYikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IHNrYl9kc3Qoc2tiKSA9PSBOVUxMXG4iKTsKKwkJcHJfZXJyKCJza2JfZHN0KHNrYikgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0zODUsNyArMzg0LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAjZW5kaWYKLQkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IE5PIE5FSUdIQk9VUiAhXG4iKTsKKwkJcHJfZXJyKCJOTyBORUlHSEJPVVIgIVxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC00MjEsNyArNDIwLDcgQEAKIAlwcl9kZWJ1ZygiYXRtX3NrYiglcCktPnZjYyglcCktPmRldiglcClcbiIsIHNrYiwgdmNjLCB2Y2MtPmRldik7CiAJb2xkID0geGNoZygmZW50cnktPnZjY3MtPnhvZmYsIDEpOwkvKiBhc3N1bWUgWE9GRiAuLi4gKi8KIAlpZiAob2xkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsaXBfc3RhcnRfeG1pdDogWE9GRi0+WE9GRiB0cmFuc2l0aW9uXG4iKTsKKwkJcHJfd2FybmluZygiWE9GRi0+WE9GRiB0cmFuc2l0aW9uXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC00NTYsNyArNDU1LDcgQEAKIAljbGlwX3ZjYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGlwX3ZjYyksIEdGUF9LRVJORUwpOwogCWlmICghY2xpcF92Y2MpCiAJCXJldHVybiAtRU5PTUVNOwotCXByX2RlYnVnKCJta2lwIGNsaXBfdmNjICVwIHZjYyAlcFxuIiwgY2xpcF92Y2MsIHZjYyk7CisJcHJfZGVidWcoIiVwIHZjYyAlcFxuIiwgY2xpcF92Y2MsIHZjYyk7CiAJY2xpcF92Y2MtPnZjYyA9IHZjYzsKIAl2Y2MtPnVzZXJfYmFjayA9IGNsaXBfdmNjOwogCXNldF9iaXQoQVRNX1ZGX0lTX0NMSVAsICZ2Y2MtPmZsYWdzKTsKQEAgLTUwNiwxNiArNTA1LDE2IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKIAlpZiAodmNjLT5wdXNoICE9IGNsaXBfcHVzaCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3NldGVudHJ5OiBub24tQ0xJUCBWQ0NcbiIpOworCQlwcl93YXJuaW5nKCJub24tQ0xJUCBWQ0NcbiIpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KIAljbGlwX3ZjYyA9IENMSVBfVkNDKHZjYyk7CiAJaWYgKCFpcCkgewogCQlpZiAoIWNsaXBfdmNjLT5lbnRyeSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJoaWRpbmcgaGlkZGVuIEFUTUFSUCBlbnRyeVxuIik7CisJCQlwcl9lcnIoImhpZGluZyBoaWRkZW4gQVRNQVJQIGVudHJ5XG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXByX2RlYnVnKCJzZXRlbnRyeTogcmVtb3ZlXG4iKTsKKwkJcHJfZGVidWcoInJlbW92ZVxuIik7CiAJCXVubGlua19jbGlwX3ZjYyhjbGlwX3ZjYyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTUyOSw5ICs1MjgsOSBAQAogCWVudHJ5ID0gTkVJR0gyRU5UUlkobmVpZ2gpOwogCWlmIChlbnRyeSAhPSBjbGlwX3ZjYy0+ZW50cnkpIHsKIAkJaWYgKCFjbGlwX3ZjYy0+ZW50cnkpCi0JCQlwcl9kZWJ1Zygic2V0ZW50cnk6IGFkZFxuIik7CisJCQlwcl9kZWJ1ZygiYWRkXG4iKTsKIAkJZWxzZSB7Ci0JCQlwcl9kZWJ1Zygic2V0ZW50cnk6IHVwZGF0ZVxuIik7CisJCQlwcl9kZWJ1ZygidXBkYXRlXG4iKTsKIAkJCXVubGlua19jbGlwX3ZjYyhjbGlwX3ZjYyk7CiAJCX0KIAkJbGlua192Y2MoY2xpcF92Y2MsIGVudHJ5KTsKQEAgLTYxNCwxNiArNjEzLDE2IEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBORVRERVZfVVA6Ci0JCXByX2RlYnVnKCJjbGlwX2RldmljZV9ldmVudCBORVRERVZfVVBcbiIpOworCQlwcl9kZWJ1ZygiTkVUREVWX1VQXG4iKTsKIAkJdG9fYXRtYXJwZChhY3RfdXAsIFBSSVYoZGV2KS0+bnVtYmVyLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKLQkJcHJfZGVidWcoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9ET1dOXG4iKTsKKwkJcHJfZGVidWcoIk5FVERFVl9ET1dOXG4iKTsKIAkJdG9fYXRtYXJwZChhY3RfZG93biwgUFJJVihkZXYpLT5udW1iZXIsIDApOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0U6CiAJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQlwcl9kZWJ1ZygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX0NIQU5HRSpcbiIpOworCQlwcl9kZWJ1ZygiTkVUREVWX0NIQU5HRSpcbiIpOwogCQl0b19hdG1hcnBkKGFjdF9jaGFuZ2UsIFBSSVYoZGV2KS0+bnVtYmVyLCAwKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjQ1LDcgKzY0NCw2IEBACiAJcmV0dXJuIGNsaXBfZGV2aWNlX2V2ZW50KHRoaXMsIE5FVERFVl9DSEFOR0UsIGluX2Rldi0+ZGV2KTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNsaXBfZGV2X25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gY2xpcF9kZXZpY2VfZXZlbnQsCiB9OwpAQCAtNjYwLDcgKzY1OCw3IEBACiAKIHN0YXRpYyB2b2lkIGF0bWFycGRfY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlwcl9kZWJ1ZygiYXRtYXJwZF9jbG9zZVxuIik7CisJcHJfZGVidWcoIlxuIik7CiAKIAlydG5sX2xvY2soKTsKIAlhdG1hcnBkID0gTlVMTDsKQEAgLTY3MSw3ICs2NjksNiBAQAogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgYXRtZGV2X29wcyBhdG1hcnBkX2Rldl9vcHMgPSB7CiAJLmNsb3NlID0gYXRtYXJwZF9jbG9zZQogfTsKQEAgLTY5MywxMSArNjkwLDExIEBACiAJCXJldHVybiAtRUFERFJJTlVTRTsKIAl9CiAKLQltb2RfdGltZXIoJmlkbGVfdGltZXIsIGppZmZpZXMrQ0xJUF9DSEVDS19JTlRFUlZBTCpIWik7CisJbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzICsgQ0xJUF9DSEVDS19JTlRFUlZBTCAqIEhaKTsKIAogCWF0bWFycGQgPSB2Y2M7Ci0Jc2V0X2JpdChBVE1fVkZfTUVUQSwmdmNjLT5mbGFncyk7Ci0Jc2V0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX01FVEEsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCSAgICAvKiBhbGxvdyByZXBsaWVzIGFuZCBhdm9pZCBnZXR0aW5nIGNsb3NlZCBpZiBzaWduYWxpbmcgZGllcyAqLwogCXZjYy0+ZGV2ID0gJmF0bWFycGRfZGV2OwogCXZjY19pbnNlcnRfc29ja2V0KHNrX2F0bSh2Y2MpKTsKQEAgLTk1MCw4ICs5NDcsNyBAQAogCiAJCXAgPSBwcm9jX2NyZWF0ZSgiYXJwIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCwgJmFycF9zZXFfZm9wcyk7CiAJCWlmICghcCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAiCi0JCQkgICAgICAgIi9wcm9jL25ldC9hdG0vYXJwXG4iKTsKKwkJCXByX2VycigiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0L2F0bS9hcnBcbiIpOwogCQkJYXRtX2NsaXBfZXhpdF9ub3Byb2MoKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5jIGIvbmV0L2F0bS9jb21tb24uYwppbmRleCBkNjFlMDUxLi43NGQwOTVhIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NvbW1vbi5jCisrKyBiL25ldC9hdG0vY29tbW9uLmMKQEAgLTIsNiArMiw3IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CkBAIC0xOCwxMSArMTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4JCS8qIHN0cnVjdCBzb2NrICovCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9wb2xsLmg+Ci0KIAogI2luY2x1ZGUgInJlc291cmNlcy5oIgkJLyogYXRtX2ZpbmRfZGV2ICovCiAjaW5jbHVkZSAiY29tbW9uLmgiCQkvKiBwcm90b3R5cGVzICovCkBAIC0zMSwxMyArMzEsMTUgQEAKICNpbmNsdWRlICJzaWduYWxpbmcuaCIJCS8qIGZvciBXQUlUSU5HIGFuZCBzaWdkX2F0dGFjaCAqLwogCiBzdHJ1Y3QgaGxpc3RfaGVhZCB2Y2NfaGFzaFtWQ0NfSFRBQkxFX1NJWkVdOworRVhQT1JUX1NZTUJPTCh2Y2NfaGFzaCk7CisKIERFRklORV9SV0xPQ0sodmNjX3NrbGlzdF9sb2NrKTsKK0VYUE9SVF9TWU1CT0wodmNjX3NrbGlzdF9sb2NrKTsKIAogc3RhdGljIHZvaWQgX192Y2NfaW5zZXJ0X3NvY2tldChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGF0bV9zayhzayk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbdmNjLT52Y2kgJgotCQkJCQkoVkNDX0hUQUJMRV9TSVpFIC0gMSldOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJnZjY19oYXNoW3ZjYy0+dmNpICYgKFZDQ19IVEFCTEVfU0laRSAtIDEpXTsKIAlzay0+c2tfaGFzaCA9IHZjYy0+dmNpICYgKFZDQ19IVEFCTEVfU0laRSAtIDEpOwogCXNrX2FkZF9ub2RlKHNrLCBoZWFkKTsKIH0KQEAgLTQ4LDYgKzUwLDcgQEAKIAlfX3ZjY19pbnNlcnRfc29ja2V0KHNrKTsKIAl3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOwogfQorRVhQT1JUX1NZTUJPTCh2Y2NfaW5zZXJ0X3NvY2tldCk7CiAKIHN0YXRpYyB2b2lkIHZjY19yZW1vdmVfc29ja2V0KHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTU2LDM3ICs1OSwzMiBAQAogCXdyaXRlX3VubG9ja19pcnEoJnZjY19za2xpc3RfbG9jayk7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBza19idWZmICphbGxvY190eChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIHN0cnVjdCBza19idWZmICphbGxvY190eChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCiAJaWYgKHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSAmJiAhYXRtX21heV9zZW5kKHZjYywgc2l6ZSkpIHsKIAkJcHJfZGVidWcoIlNvcnJ5OiB3bWVtX2FsbG9jID0gJWQsIHNpemUgPSAlZCwgc25kYnVmID0gJWRcbiIsCi0JCQlza193bWVtX2FsbG9jX2dldChzayksIHNpemUsCi0JCQlzay0+c2tfc25kYnVmKTsKKwkJCSBza193bWVtX2FsbG9jX2dldChzayksIHNpemUsIHNrLT5za19zbmRidWYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJd2hpbGUgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9LRVJORUwpKSkKIAkJc2NoZWR1bGUoKTsKLQlwcl9kZWJ1ZygiQWxUeCAlZCArPSAlZFxuIiwgc2tfd21lbV9hbGxvY19nZXQoc2spLCBza2ItPnRydWVzaXplKTsKKwlwcl9kZWJ1ZygiJWQgKz0gJWRcbiIsIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwgc2tiLT50cnVlc2l6ZSk7CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2stPnNrX3dtZW1fYWxsb2MpOwogCXJldHVybiBza2I7CiB9CiAKLQotRVhQT1JUX1NZTUJPTCh2Y2NfaGFzaCk7Ci1FWFBPUlRfU1lNQk9MKHZjY19za2xpc3RfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHZjY19pbnNlcnRfc29ja2V0KTsKLQogc3RhdGljIHZvaWQgdmNjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQogewogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpKQotCQlwcmludGsoS0VSTl9ERUJVRyAidmNjX3NvY2tfZGVzdHJ1Y3Q6IHJtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcm1lbSBsZWFrYWdlICglZCBieXRlcykgZGV0ZWN0ZWQuXG4iLAorCQkgICAgICAgX19mdW5jX18sIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpOwogCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykpCi0JCXByaW50ayhLRVJOX0RFQlVHICJ2Y2Nfc29ja19kZXN0cnVjdDogd21lbSBsZWFrYWdlICglZCBieXRlcykgZGV0ZWN0ZWQuXG4iLCBhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3bWVtIGxlYWthZ2UgKCVkIGJ5dGVzKSBkZXRlY3RlZC5cbiIsCisJCSAgICAgICBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZjY19kZWZfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKQEAgLTE0Miw4ICsxNDAsOCBAQAogCiAJdmNjID0gYXRtX3NrKHNrKTsKIAl2Y2MtPmRldiA9IE5VTEw7Ci0JbWVtc2V0KCZ2Y2MtPmxvY2FsLDAsc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpKTsKLQltZW1zZXQoJnZjYy0+cmVtb3RlLDAsc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpKTsKKwltZW1zZXQoJnZjYy0+bG9jYWwsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7CisJbWVtc2V0KCZ2Y2MtPnJlbW90ZSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpKTsKIAl2Y2MtPnFvcy50eHRwLm1heF9zZHUgPSAxIDw8IDE2OyAvKiBmb3IgbWV0YSBWQ3MgKi8KIAlhdG9taWNfc2V0KCZzay0+c2tfd21lbV9hbGxvYywgMSk7CiAJYXRvbWljX3NldCgmc2stPnNrX3JtZW1fYWxsb2MsIDApOwpAQCAtMTU2LDcgKzE1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgdmNjX2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gYXRtX3NrKHNrKTsKQEAgLTE3MSw3ICsxNjgsNyBAQAogCQkJdmNjLT5wdXNoKHZjYywgTlVMTCk7IC8qIGF0bWFycGQgaGFzIG5vIHB1c2ggKi8KIAogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKLQkJCWF0bV9yZXR1cm4odmNjLHNrYi0+dHJ1ZXNpemUpOworCQkJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KIApAQCAtMTgyLDcgKzE3OSw2IEBACiAJdmNjX3JlbW92ZV9zb2NrZXQoc2spOwogfQogCi0KIGludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTk3LDcgKzE5Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogdm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CkBAIC0yMDgsOCArMjAzLDYgQEAKIAljbGVhcl9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKIAlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKIH0KLQotCiBFWFBPUlRfU1lNQk9MKHZjY19yZWxlYXNlX2FzeW5jKTsKIAogCkBAIC0yMzUsMzcgKzIyOCwzNyBAQAogCXdyaXRlX3VubG9ja19pcnEoJnZjY19za2xpc3RfbG9jayk7CiB9CiAKLQotc3RhdGljIGludCBhZGp1c3RfdHAoc3RydWN0IGF0bV90cmFmcHJtICp0cCx1bnNpZ25lZCBjaGFyIGFhbCkKK3N0YXRpYyBpbnQgYWRqdXN0X3RwKHN0cnVjdCBhdG1fdHJhZnBybSAqdHAsIHVuc2lnbmVkIGNoYXIgYWFsKQogewogCWludCBtYXhfc2R1OwogCi0JaWYgKCF0cC0+dHJhZmZpY19jbGFzcykgcmV0dXJuIDA7CisJaWYgKCF0cC0+dHJhZmZpY19jbGFzcykKKwkJcmV0dXJuIDA7CiAJc3dpdGNoIChhYWwpIHsKLQkJY2FzZSBBVE1fQUFMMDoKLQkJCW1heF9zZHUgPSBBVE1fQ0VMTF9TSVpFLTE7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fQUFMMzQ6Ci0JCQltYXhfc2R1ID0gQVRNX01BWF9BQUwzNF9QRFU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFUTTogQUFMIHByb2JsZW1zIC4uLiAiCi0JCQkgICAgIiglZClcbiIsYWFsKTsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIEFUTV9BQUw1OgotCQkJbWF4X3NkdSA9IEFUTV9NQVhfQUFMNV9QRFU7CisJY2FzZSBBVE1fQUFMMDoKKwkJbWF4X3NkdSA9IEFUTV9DRUxMX1NJWkUtMTsKKwkJYnJlYWs7CisJY2FzZSBBVE1fQUFMMzQ6CisJCW1heF9zZHUgPSBBVE1fTUFYX0FBTDM0X1BEVTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfd2FybmluZygiQUFMIHByb2JsZW1zIC4uLiAoJWQpXG4iLCBhYWwpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUTV9BQUw1OgorCQltYXhfc2R1ID0gQVRNX01BWF9BQUw1X1BEVTsKIAl9Ci0JaWYgKCF0cC0+bWF4X3NkdSkgdHAtPm1heF9zZHUgPSBtYXhfc2R1OwotCWVsc2UgaWYgKHRwLT5tYXhfc2R1ID4gbWF4X3NkdSkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCF0cC0+bWF4X2NkdikgdHAtPm1heF9jZHYgPSBBVE1fTUFYX0NEVjsKKwlpZiAoIXRwLT5tYXhfc2R1KQorCQl0cC0+bWF4X3NkdSA9IG1heF9zZHU7CisJZWxzZSBpZiAodHAtPm1heF9zZHUgPiBtYXhfc2R1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRwLT5tYXhfY2R2KQorCQl0cC0+bWF4X2NkdiA9IEFUTV9NQVhfQ0RWOwogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgY2hlY2tfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKQogewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJnZjY19oYXNoW3ZjaSAmCi0JCQkJCShWQ0NfSFRBQkxFX1NJWkUgLSAxKV07CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbdmNpICYgKFZDQ19IVEFCTEVfU0laRSAtIDEpXTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3Qgc29jayAqczsKIAlzdHJ1Y3QgYXRtX3ZjYyAqd2FsazsKQEAgLTI4OSw3ICsyODIsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSkKIHsKIAlzdGF0aWMgc2hvcnQgcDsgICAgICAgIC8qIHBvb3IgbWFuJ3MgcGVyLWRldmljZSBjYWNoZSAqLwpAQCAtMzI3LDE0ICszMTksMTMgQEAKIAkJaWYgKChjID09IEFUTV9OT1RfUlNWX1ZDSSB8fCAqdmNpICE9IEFUTV9WQ0lfQU5ZKSAmJgogCQkgICAgKnZwaSA9PSBBVE1fVlBJX0FOWSkgewogCQkJcCsrOwotCQkJaWYgKHAgPj0gMSA8PCB2Y2MtPmRldi0+Y2lfcmFuZ2UudnBpX2JpdHMpIHAgPSAwOworCQkJaWYgKHAgPj0gMSA8PCB2Y2MtPmRldi0+Y2lfcmFuZ2UudnBpX2JpdHMpCisJCQkJcCA9IDA7CiAJCX0KLQl9Ci0Jd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CisJfSB3aGlsZSAob2xkX3AgIT0gcCB8fCBvbGRfYyAhPSBjKTsKIAlyZXR1cm4gLUVBRERSSU5VU0U7CiB9CiAKLQogc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwKIAkJCSBpbnQgdmNpKQogewpAQCAtMzYyLDM3ICszNTMsNDYgQEAKIAlfX3ZjY19pbnNlcnRfc29ja2V0KHNrKTsKIAl3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOwogCXN3aXRjaCAodmNjLT5xb3MuYWFsKSB7Ci0JCWNhc2UgQVRNX0FBTDA6Ci0JCQllcnJvciA9IGF0bV9pbml0X2FhbDAodmNjKTsKLQkJCXZjYy0+c3RhdHMgPSAmZGV2LT5zdGF0cy5hYWwwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX0FBTDM0OgotCQkJZXJyb3IgPSBhdG1faW5pdF9hYWwzNCh2Y2MpOwotCQkJdmNjLT5zdGF0cyA9ICZkZXYtPnN0YXRzLmFhbDM0OwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX05PX0FBTDoKLQkJCS8qIEFUTV9BQUw1IGlzIGFsc28gdXNlZCBpbiB0aGUgIjAgZm9yIGRlZmF1bHQiIGNhc2UgKi8KLQkJCXZjYy0+cW9zLmFhbCA9IEFUTV9BQUw1OwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgQVRNX0FBTDU6Ci0JCQllcnJvciA9IGF0bV9pbml0X2FhbDUodmNjKTsKLQkJCXZjYy0+c3RhdHMgPSAmZGV2LT5zdGF0cy5hYWw1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvciA9IC1FUFJPVE9UWVBFOworCWNhc2UgQVRNX0FBTDA6CisJCWVycm9yID0gYXRtX2luaXRfYWFsMCh2Y2MpOworCQl2Y2MtPnN0YXRzID0gJmRldi0+c3RhdHMuYWFsMDsKKwkJYnJlYWs7CisJY2FzZSBBVE1fQUFMMzQ6CisJCWVycm9yID0gYXRtX2luaXRfYWFsMzQodmNjKTsKKwkJdmNjLT5zdGF0cyA9ICZkZXYtPnN0YXRzLmFhbDM0OworCQlicmVhazsKKwljYXNlIEFUTV9OT19BQUw6CisJCS8qIEFUTV9BQUw1IGlzIGFsc28gdXNlZCBpbiB0aGUgIjAgZm9yIGRlZmF1bHQiIGNhc2UgKi8KKwkJdmNjLT5xb3MuYWFsID0gQVRNX0FBTDU7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRNX0FBTDU6CisJCWVycm9yID0gYXRtX2luaXRfYWFsNSh2Y2MpOworCQl2Y2MtPnN0YXRzID0gJmRldi0+c3RhdHMuYWFsNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IgPSAtRVBST1RPVFlQRTsKIAl9Ci0JaWYgKCFlcnJvcikgZXJyb3IgPSBhZGp1c3RfdHAoJnZjYy0+cW9zLnR4dHAsdmNjLT5xb3MuYWFsKTsKLQlpZiAoIWVycm9yKSBlcnJvciA9IGFkanVzdF90cCgmdmNjLT5xb3Mucnh0cCx2Y2MtPnFvcy5hYWwpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gYWRqdXN0X3RwKCZ2Y2MtPnFvcy50eHRwLCB2Y2MtPnFvcy5hYWwpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gYWRqdXN0X3RwKCZ2Y2MtPnFvcy5yeHRwLCB2Y2MtPnFvcy5hYWwpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwotCXByX2RlYnVnKCJWQ0MgJWQuJWQsIEFBTCAlZFxuIix2cGksdmNpLHZjYy0+cW9zLmFhbCk7Ci0JcHJfZGVidWcoIiAgVFg6ICVkLCBQQ1IgJWQuLiVkLCBTRFUgJWRcbiIsdmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzLAotCSAgICB2Y2MtPnFvcy50eHRwLm1pbl9wY3IsdmNjLT5xb3MudHh0cC5tYXhfcGNyLHZjYy0+cW9zLnR4dHAubWF4X3NkdSk7Ci0JcHJfZGVidWcoIiAgUlg6ICVkLCBQQ1IgJWQuLiVkLCBTRFUgJWRcbiIsdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzLAotCSAgICB2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsdmNjLT5xb3Mucnh0cC5tYXhfcGNyLHZjYy0+cW9zLnJ4dHAubWF4X3NkdSk7CisJcHJfZGVidWcoIlZDQyAlZC4lZCwgQUFMICVkXG4iLCB2cGksIHZjaSwgdmNjLT5xb3MuYWFsKTsKKwlwcl9kZWJ1ZygiICBUWDogJWQsIFBDUiAlZC4uJWQsIFNEVSAlZFxuIiwKKwkJIHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcywKKwkJIHZjYy0+cW9zLnR4dHAubWluX3BjciwKKwkJIHZjYy0+cW9zLnR4dHAubWF4X3BjciwKKwkJIHZjYy0+cW9zLnR4dHAubWF4X3NkdSk7CisJcHJfZGVidWcoIiAgUlg6ICVkLCBQQ1IgJWQuLiVkLCBTRFUgJWRcbiIsCisJCSB2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MsCisJCSB2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsCisJCSB2Y2MtPnFvcy5yeHRwLm1heF9wY3IsCisJCSB2Y2MtPnFvcy5yeHRwLm1heF9zZHUpOwogCiAJaWYgKGRldi0+b3BzLT5vcGVuKSB7Ci0JCWlmICgoZXJyb3IgPSBkZXYtPm9wcy0+b3Blbih2Y2MpKSkKKwkJZXJyb3IgPSBkZXYtPm9wcy0+b3Blbih2Y2MpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGZhaWw7CiAJfQogCXJldHVybiAwOwpAQCAtNDA2LDE0ICs0MDYsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogaW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSkKIHsKIAlzdHJ1Y3QgYXRtX2RldiAqZGV2OwogCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBBVE1fU0Qoc29jayk7CiAJaW50IGVycm9yOwogCi0JcHJfZGVidWcoInZjY19jb25uZWN0ICh2cGkgJWQsIHZjaSAlZClcbiIsdnBpLHZjaSk7CisJcHJfZGVidWcoIih2cGkgJWQsIHZjaSAlZClcbiIsIHZwaSwgdmNpKTsKIAlpZiAoc29jay0+c3RhdGUgPT0gU1NfQ09OTkVDVEVEKQogCQlyZXR1cm4gLUVJU0NPTk47CiAJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQpAQCAtNDIyLDMwICs0MjEsMzMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodnBpICE9IEFUTV9WUElfVU5TUEVDICYmIHZjaSAhPSBBVE1fVkNJX1VOU1BFQykKLQkJY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncyk7CiAJZWxzZQotCQlpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCXByX2RlYnVnKCJ2Y2NfY29ubmVjdCAoVFg6IGNsICVkLGJ3ICVkLSVkLHNkdSAlZDsgIgotCSAgICAiUlg6IGNsICVkLGJ3ICVkLSVkLHNkdSAlZCxBQUwgJXMlZClcbiIsCi0JICAgIHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyx2Y2MtPnFvcy50eHRwLm1pbl9wY3IsCi0JICAgIHZjYy0+cW9zLnR4dHAubWF4X3Bjcix2Y2MtPnFvcy50eHRwLm1heF9zZHUsCi0JICAgIHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyx2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsCi0JICAgIHZjYy0+cW9zLnJ4dHAubWF4X3Bjcix2Y2MtPnFvcy5yeHRwLm1heF9zZHUsCi0JICAgIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMNSA/ICIiIDogdmNjLT5xb3MuYWFsID09IEFUTV9BQUwwID8gIiIgOgotCSAgICAiID8/PyBjb2RlICIsdmNjLT5xb3MuYWFsID09IEFUTV9BQUwwID8gMCA6IHZjYy0+cW9zLmFhbCk7CisJcHJfZGVidWcoIihUWDogY2wgJWQsYncgJWQtJWQsc2R1ICVkOyAiCisJCSAiUlg6IGNsICVkLGJ3ICVkLSVkLHNkdSAlZCxBQUwgJXMlZClcbiIsCisJCSB2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MsIHZjYy0+cW9zLnR4dHAubWluX3BjciwKKwkJIHZjYy0+cW9zLnR4dHAubWF4X3BjciwgdmNjLT5xb3MudHh0cC5tYXhfc2R1LAorCQkgdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzLCB2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsCisJCSB2Y2MtPnFvcy5yeHRwLm1heF9wY3IsIHZjYy0+cW9zLnJ4dHAubWF4X3NkdSwKKwkJIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMNSA/ICIiIDoKKwkJIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCA/ICIiIDogIiA/Pz8gY29kZSAiLAorCQkgdmNjLT5xb3MuYWFsID09IEFUTV9BQUwwID8gMCA6IHZjYy0+cW9zLmFhbCk7CiAJaWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCAmdmNjLT5mbGFncykpCiAJCXJldHVybiAtRUJBREZEOwogCWlmICh2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTIHx8CiAJICAgIHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChsaWtlbHkoaXRmICE9IEFUTV9JVEZfQU5ZKSkgewotCQlkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLCAiYXRtLWRldmljZS0lZCIsIGl0Zik7CisJCWRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKGl0ZiksCisJCQkJCSAgICAgICJhdG0tZGV2aWNlLSVkIiwgaXRmKTsKIAl9IGVsc2UgewogCQlkZXYgPSBOVUxMOwogCQltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZhdG1fZGV2cykpIHsKLQkJCWRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKKwkJCWRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCwKKwkJCQkJIHN0cnVjdCBhdG1fZGV2LCBkZXZfbGlzdCk7CiAJCQlhdG1fZGV2X2hvbGQoZGV2KTsKIAkJfQogCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwpAQCAtNDU4LDEzICs0NjAsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlpZiAodnBpID09IEFUTV9WUElfVU5TUEVDIHx8IHZjaSA9PSBBVE1fVkNJX1VOU1BFQykKLQkJc2V0X2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncyk7Ci0JaWYgKHRlc3RfYml0KEFUTV9WRl9SRUFEWSwmQVRNX1NEKHNvY2spLT5mbGFncykpCisJCXNldF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmQVRNX1NEKHNvY2spLT5mbGFncykpCiAJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOwogCXJldHVybiAwOwogfQogCi0KIGludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKQEAgLTQ3OCw4ICs0NzksOCBAQAogCWlmIChmbGFncyAmIH5NU0dfRE9OVFdBSVQpCQkvKiBvbmx5IGhhbmRsZSBNU0dfRE9OVFdBSVQgKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCXZjYyA9IEFUTV9TRChzb2NrKTsKLQlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCZ2Y2MtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsJnZjYy0+ZmxhZ3MpIHx8CisJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgJnZjYy0+ZmxhZ3MpIHx8CiAJICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ5NywxMyArNDk4LDEyIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJc29ja19yZWN2X3RzX2FuZF9kcm9wcyhtc2csIHNrLCBza2IpOwotCXByX2RlYnVnKCJSY3ZNICVkIC09ICVkXG4iLCBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpLCBza2ItPnRydWVzaXplKTsKKwlwcl9kZWJ1ZygiJWQgLT0gJWRcbiIsIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYyksIHNrYi0+dHJ1ZXNpemUpOwogCWF0bV9yZXR1cm4odmNjLCBza2ItPnRydWVzaXplKTsKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIAlyZXR1cm4gY29waWVkOwogfQogCi0KIGludCB2Y2Nfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sCiAJCXNpemVfdCB0b3RhbF9sZW4pCiB7CkBAIC01MTEsNyArNTExLDcgQEAKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGVmZixlcnJvcjsKKwlpbnQgZWZmLCBlcnJvcjsKIAljb25zdCB2b2lkIF9fdXNlciAqYnVmZjsKIAlpbnQgc2l6ZTsKIApAQCAtNTUwLDcgKzU1MCw3IEBACiAJZWZmID0gKHNpemUrMykgJiB+MzsgLyogYWxpZ24gdG8gd29yZCBib3VuZGFyeSAqLwogCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCWVycm9yID0gMDsKLQl3aGlsZSAoIShza2IgPSBhbGxvY190eCh2Y2MsZWZmKSkpIHsKKwl3aGlsZSAoIShza2IgPSBhbGxvY190eCh2Y2MsIGVmZikpKSB7CiAJCWlmIChtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpIHsKIAkJCWVycm9yID0gLUVBR0FJTjsKIAkJCWJyZWFrOwpAQCAtNTYwLDkgKzU2MCw5IEBACiAJCQllcnJvciA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpIHx8Ci0JCSAgICB0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsJnZjYy0+ZmxhZ3MpIHx8Ci0JCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCAmdmNjLT5mbGFncykgfHwKKwkJICAgIHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgJnZjYy0+ZmxhZ3MpIHx8CisJCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncykpIHsKIAkJCWVycm9yID0gLUVQSVBFOwogCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCQlicmVhazsKQEAgLTU3NCwyMCArNTc0LDIwIEBACiAJCWdvdG8gb3V0OwogCXNrYi0+ZGV2ID0gTlVMTDsgLyogZm9yIHBhdGhzIHNoYXJlZCB3aXRoIG5ldF9kZXZpY2UgaW50ZXJmYWNlcyAqLwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSB2Y2MtPmF0bV9vcHRpb25zOwotCWlmIChjb3B5X2Zyb21fdXNlcihza2JfcHV0KHNrYixzaXplKSxidWZmLHNpemUpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHNrYl9wdXQoc2tiLCBzaXplKSwgYnVmZiwgc2l6ZSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWVycm9yID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChlZmYgIT0gc2l6ZSkgbWVtc2V0KHNrYi0+ZGF0YStzaXplLDAsZWZmLXNpemUpOwotCWVycm9yID0gdmNjLT5kZXYtPm9wcy0+c2VuZCh2Y2Msc2tiKTsKKwlpZiAoZWZmICE9IHNpemUpCisJCW1lbXNldChza2ItPmRhdGEgKyBzaXplLCAwLCBlZmYtc2l6ZSk7CisJZXJyb3IgPSB2Y2MtPmRldi0+b3BzLT5zZW5kKHZjYywgc2tiKTsKIAllcnJvciA9IGVycm9yID8gZXJyb3IgOiBzaXplOwogb3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycm9yOwogfQogCi0KIHVuc2lnbmVkIGludCB2Y2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTYyMyw4ICs2MjMsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi0KLXN0YXRpYyBpbnQgYXRtX2NoYW5nZV9xb3Moc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3QgYXRtX3FvcyAqcW9zKQorc3RhdGljIGludCBhdG1fY2hhbmdlX3FvcyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQogewogCWludCBlcnJvcjsKIApAQCAtNjM2LDI1ICs2MzUsMzEgQEAKIAkgICAgcW9zLT5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzIHx8CiAJICAgIHFvcy0+dHh0cC50cmFmZmljX2NsYXNzICE9IHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZXJyb3IgPSBhZGp1c3RfdHAoJnFvcy0+dHh0cCxxb3MtPmFhbCk7Ci0JaWYgKCFlcnJvcikgZXJyb3IgPSBhZGp1c3RfdHAoJnFvcy0+cnh0cCxxb3MtPmFhbCk7Ci0JaWYgKGVycm9yKSByZXR1cm4gZXJyb3I7Ci0JaWYgKCF2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKSByZXR1cm4gLUVPUE5PVFNVUFA7CisJZXJyb3IgPSBhZGp1c3RfdHAoJnFvcy0+dHh0cCwgcW9zLT5hYWwpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gYWRqdXN0X3RwKCZxb3MtPnJ4dHAsIHFvcy0+YWFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoIXZjYy0+ZGV2LT5vcHMtPmNoYW5nZV9xb3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoc2tfYXRtKHZjYyktPnNrX2ZhbWlseSA9PSBBRl9BVE1QVkMpCi0JCXJldHVybiB2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKHZjYyxxb3MsQVRNX01GX1NFVCk7Ci0JcmV0dXJuIHN2Y19jaGFuZ2VfcW9zKHZjYyxxb3MpOworCQlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+Y2hhbmdlX3Fvcyh2Y2MsIHFvcywgQVRNX01GX1NFVCk7CisJcmV0dXJuIHN2Y19jaGFuZ2VfcW9zKHZjYywgcW9zKTsKIH0KIAotCiBzdGF0aWMgaW50IGNoZWNrX3RwKGNvbnN0IHN0cnVjdCBhdG1fdHJhZnBybSAqdHApCiB7CiAJLyogQEBAIFNob3VsZCBiZSBtZXJnZWQgd2l0aCBhZGp1c3RfdHAgKi8KLQlpZiAoIXRwLT50cmFmZmljX2NsYXNzIHx8IHRwLT50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUykgcmV0dXJuIDA7CisJaWYgKCF0cC0+dHJhZmZpY19jbGFzcyB8fCB0cC0+dHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpCisJCXJldHVybiAwOwogCWlmICh0cC0+dHJhZmZpY19jbGFzcyAhPSBBVE1fVUJSICYmICF0cC0+bWluX3BjciAmJiAhdHAtPnBjciAmJgotCSAgICAhdHAtPm1heF9wY3IpIHJldHVybiAtRUlOVkFMOwotCWlmICh0cC0+bWluX3BjciA9PSBBVE1fTUFYX1BDUikgcmV0dXJuIC1FSU5WQUw7CisJICAgICF0cC0+bWF4X3BjcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRwLT5taW5fcGNyID09IEFUTV9NQVhfUENSKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodHAtPm1pbl9wY3IgJiYgdHAtPm1heF9wY3IgJiYgdHAtPm1heF9wY3IgIT0gQVRNX01BWF9QQ1IgJiYKLQkgICAgdHAtPm1pbl9wY3IgPiB0cC0+bWF4X3BjcikgcmV0dXJuIC1FSU5WQUw7CisJICAgIHRwLT5taW5fcGNyID4gdHAtPm1heF9wY3IpCisJCXJldHVybiAtRUlOVkFMOwogCS8qCiAJICogV2UgYWxsb3cgcGNyIHRvIGJlIG91dHNpZGUgW21pbl9wY3IsbWF4X3Bjcl0sIGJlY2F1c2UgbGF0ZXIKIAkgKiBhZGp1c3RtZW50IG1heSBzdGlsbCBwdXNoIGl0IGluIHRoZSB2YWxpZCByYW5nZS4KQEAgLTY2Miw3ICs2NjcsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgY2hlY2tfcW9zKGNvbnN0IHN0cnVjdCBhdG1fcW9zICpxb3MpCiB7CiAJaW50IGVycm9yOwpAQCAtNjcyLDkgKzY3NiwxMSBAQAogCWlmIChxb3MtPnR4dHAudHJhZmZpY19jbGFzcyAhPSBxb3MtPnJ4dHAudHJhZmZpY19jbGFzcyAmJgogCSAgICBxb3MtPnR4dHAudHJhZmZpY19jbGFzcyAmJiBxb3MtPnJ4dHAudHJhZmZpY19jbGFzcyAmJgogCSAgICBxb3MtPnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fQU5ZQ0xBU1MgJiYKLQkgICAgcW9zLT5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX0FOWUNMQVNTKSByZXR1cm4gLUVJTlZBTDsKKwkgICAgcW9zLT5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX0FOWUNMQVNTKQorCQlyZXR1cm4gLUVJTlZBTDsKIAllcnJvciA9IGNoZWNrX3RwKCZxb3MtPnR4dHApOwotCWlmIChlcnJvcikgcmV0dXJuIGVycm9yOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCXJldHVybiBjaGVja190cCgmcW9zLT5yeHRwKTsKIH0KIApAQCAtNjkwLDM3ICs2OTYsNDEgQEAKIAogCXZjYyA9IEFUTV9TRChzb2NrKTsKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKLQkJY2FzZSBTT19BVE1RT1M6Ci0JCQl7Ci0JCQkJc3RydWN0IGF0bV9xb3MgcW9zOworCWNhc2UgU09fQVRNUU9TOgorCXsKKwkJc3RydWN0IGF0bV9xb3MgcW9zOwogCi0JCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZxb3Msb3B0dmFsLHNpemVvZihxb3MpKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJZXJyb3IgPSBjaGVja19xb3MoJnFvcyk7Ci0JCQkJaWYgKGVycm9yKSByZXR1cm4gZXJyb3I7Ci0JCQkJaWYgKHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RFRCkKLQkJCQkJcmV0dXJuIGF0bV9jaGFuZ2VfcW9zKHZjYywmcW9zKTsKLQkJCQlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCi0JCQkJCXJldHVybiAtRUJBREZEOwotCQkJCXZjYy0+cW9zID0gcW9zOwotCQkJCXNldF9iaXQoQVRNX1ZGX0hBU1FPUywmdmNjLT5mbGFncyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCWNhc2UgU09fU0VUQ0xQOgotCQkJaWYgKGdldF91c2VyKHZhbHVlLCh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW9wdHZhbCkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodmFsdWUpIHZjYy0+YXRtX29wdGlvbnMgfD0gQVRNX0FUTU9QVF9DTFA7Ci0JCQllbHNlIHZjYy0+YXRtX29wdGlvbnMgJj0gfkFUTV9BVE1PUFRfQ0xQOwotCQkJcmV0dXJuIDA7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkgcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZxb3MsIG9wdHZhbCwgc2l6ZW9mKHFvcykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVycm9yID0gY2hlY2tfcW9zKCZxb3MpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpCisJCQlyZXR1cm4gYXRtX2NoYW5nZV9xb3ModmNjLCAmcW9zKTsKKwkJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQorCQkJcmV0dXJuIC1FQkFERkQ7CisJCXZjYy0+cW9zID0gcW9zOworCQlzZXRfYml0KEFUTV9WRl9IQVNRT1MsICZ2Y2MtPmZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQotCWlmICghdmNjLT5kZXYgfHwgIXZjYy0+ZGV2LT5vcHMtPnNldHNvY2tvcHQpIHJldHVybiAtRUlOVkFMOwotCXJldHVybiB2Y2MtPmRldi0+b3BzLT5zZXRzb2Nrb3B0KHZjYyxsZXZlbCxvcHRuYW1lLG9wdHZhbCxvcHRsZW4pOworCWNhc2UgU09fU0VUQ0xQOgorCQlpZiAoZ2V0X3VzZXIodmFsdWUsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZhbHVlKQorCQkJdmNjLT5hdG1fb3B0aW9ucyB8PSBBVE1fQVRNT1BUX0NMUDsKKwkJZWxzZQorCQkJdmNjLT5hdG1fb3B0aW9ucyAmPSB+QVRNX0FUTU9QVF9DTFA7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlpZiAoIXZjYy0+ZGV2IHx8ICF2Y2MtPmRldi0+b3BzLT5zZXRzb2Nrb3B0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+c2V0c29ja29wdCh2Y2MsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAKLQogaW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKQEAgLTczNCwzMyArNzQ0LDMzIEBACiAKIAl2Y2MgPSBBVE1fU0Qoc29jayk7CiAJc3dpdGNoIChvcHRuYW1lKSB7Ci0JCWNhc2UgU09fQVRNUU9TOgotCQkJaWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCZ2Y2MtPmZsYWdzKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiBjb3B5X3RvX3VzZXIob3B0dmFsLCZ2Y2MtPnFvcyxzaXplb2YodmNjLT5xb3MpKSA/Ci0JCQkgICAgLUVGQVVMVCA6IDA7Ci0JCWNhc2UgU09fU0VUQ0xQOgotCQkJcmV0dXJuIHB1dF91c2VyKHZjYy0+YXRtX29wdGlvbnMgJiBBVE1fQVRNT1BUX0NMUCA/IDEgOgotCQkJICAwLCh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW9wdHZhbCkgPyAtRUZBVUxUIDogMDsKLQkJY2FzZSBTT19BVE1QVkM6Ci0JCQl7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2F0bXB2YyBwdmM7CisJY2FzZSBTT19BVE1RT1M6CisJCWlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgJnZjYy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBjb3B5X3RvX3VzZXIob3B0dmFsLCAmdmNjLT5xb3MsIHNpemVvZih2Y2MtPnFvcykpCisJCQk/IC1FRkFVTFQgOiAwOworCWNhc2UgU09fU0VUQ0xQOgorCQlyZXR1cm4gcHV0X3VzZXIodmNjLT5hdG1fb3B0aW9ucyAmIEFUTV9BVE1PUFRfQ0xQID8gMSA6IDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopb3B0dmFsKSA/IC1FRkFVTFQgOiAwOworCWNhc2UgU09fQVRNUFZDOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2F0bXB2YyBwdmM7CiAKLQkJCQlpZiAoIXZjYy0+ZGV2IHx8Ci0JCQkJICAgICF0ZXN0X2JpdChBVE1fVkZfQUREUiwmdmNjLT5mbGFncykpCi0JCQkJCXJldHVybiAtRU5PVENPTk47Ci0JCQkJcHZjLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7Ci0JCQkJcHZjLnNhcF9hZGRyLml0ZiA9IHZjYy0+ZGV2LT5udW1iZXI7Ci0JCQkJcHZjLnNhcF9hZGRyLnZwaSA9IHZjYy0+dnBpOwotCQkJCXB2Yy5zYXBfYWRkci52Y2kgPSB2Y2MtPnZjaTsKLQkJCQlyZXR1cm4gY29weV90b191c2VyKG9wdHZhbCwmcHZjLHNpemVvZihwdmMpKSA/Ci0JCQkJICAgIC1FRkFVTFQgOiAwOwotCQkJfQotCQlkZWZhdWx0OgotCQkJaWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHJldHVybiAtRUlOVkFMOworCQlpZiAoIXZjYy0+ZGV2IHx8ICF0ZXN0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9UQ09OTjsKKwkJcHZjLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7CisJCXB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtPmRldi0+bnVtYmVyOworCQlwdmMuc2FwX2FkZHIudnBpID0gdmNjLT52cGk7CisJCXB2Yy5zYXBfYWRkci52Y2kgPSB2Y2MtPnZjaTsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihvcHR2YWwsICZwdmMsIHNpemVvZihwdmMpKSA/IC1FRkFVTFQgOiAwOworCX0KKwlkZWZhdWx0OgorCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkKKwkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJfQotCWlmICghdmNjLT5kZXYgfHwgIXZjYy0+ZGV2LT5vcHMtPmdldHNvY2tvcHQpIHJldHVybiAtRUlOVkFMOworCWlmICghdmNjLT5kZXYgfHwgIXZjYy0+ZGV2LT5vcHMtPmdldHNvY2tvcHQpCisJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiB2Y2MtPmRldi0+b3BzLT5nZXRzb2Nrb3B0KHZjYywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgbGVuKTsKIH0KIApAQCAtNzY4LDIzICs3NzgsMjcgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoKGVycm9yID0gcHJvdG9fcmVnaXN0ZXIoJnZjY19wcm90bywgMCkpIDwgMCkKKwllcnJvciA9IHByb3RvX3JlZ2lzdGVyKCZ2Y2NfcHJvdG8sIDApOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwotCi0JaWYgKChlcnJvciA9IGF0bXB2Y19pbml0KCkpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0bXB2Y19pbml0KCkgZmFpbGVkIHdpdGggJWRcbiIsIGVycm9yKTsKKwllcnJvciA9IGF0bXB2Y19pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcl9lcnIoImF0bXB2Y19pbml0KCkgZmFpbGVkIHdpdGggJWRcbiIsIGVycm9yKTsKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl92Y2NfcHJvdG87CiAJfQotCWlmICgoZXJyb3IgPSBhdG1zdmNfaW5pdCgpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1zdmNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CisJZXJyb3IgPSBhdG1zdmNfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJcHJfZXJyKCJhdG1zdmNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CiAJCWdvdG8gb3V0X2F0bXB2Y19leGl0OwogCX0KLQlpZiAoKGVycm9yID0gYXRtX3Byb2NfaW5pdCgpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1fcHJvY19pbml0KCkgZmFpbGVkIHdpdGggJWRcbiIsZXJyb3IpOworCWVycm9yID0gYXRtX3Byb2NfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJcHJfZXJyKCJhdG1fcHJvY19pbml0KCkgZmFpbGVkIHdpdGggJWRcbiIsIGVycm9yKTsKIAkJZ290byBvdXRfYXRtc3ZjX2V4aXQ7CiAJfQotCWlmICgoZXJyb3IgPSBhdG1fc3lzZnNfaW5pdCgpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1fc3lzZnNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLGVycm9yKTsKKwllcnJvciA9IGF0bV9zeXNmc19pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcl9lcnIoImF0bV9zeXNmc19pbml0KCkgZmFpbGVkIHdpdGggJWRcbiIsIGVycm9yKTsKIAkJZ290byBvdXRfYXRtcHJvY19leGl0OwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9hdG0vaW9jdGwuYyBiL25ldC9hdG0vaW9jdGwuYwppbmRleCAyZWE0MDk5Li42MmRjOGJmIDEwMDY0NAotLS0gYS9uZXQvYXRtL2lvY3RsLmMKKysrIGIvbmV0L2F0bS9pb2N0bC5jCkBAIC0zLDYgKzMsNyBAQAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KIC8qIDIwMDMgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtMzYsNiArMzcsNyBAQAogCWxpc3RfYWRkX3RhaWwoJmlvY3RsLT5saXN0LCAmaW9jdGxfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZpb2N0bF9tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2F0bV9pb2N0bCk7CiAKIHZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpCiB7CkBAIC00MywxMjkgKzQ1LDEyOCBAQAogCWxpc3RfZGVsKCZpb2N0bC0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZpb2N0bF9tdXRleCk7CiB9Ci0KLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfYXRtX2lvY3RsKTsKIEVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpOwogCi1zdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCBlcnJvcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCXZjYyA9IEFUTV9TRChzb2NrKTsKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFNJT0NPVVRROgotCQkJaWYgKHNvY2stPnN0YXRlICE9IFNTX0NPTk5FQ1RFRCB8fAotCQkJICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKSkgewotCQkJCWVycm9yID0gIC1FSU5WQUw7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJZXJyb3IgPSBwdXRfdXNlcihzay0+c2tfc25kYnVmIC0gc2tfd21lbV9hbGxvY19nZXQoc2spLAotCQkJCQkgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDsKKwljYXNlIFNJT0NPVVRROgorCQlpZiAoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEIHx8CisJCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncykpIHsKKwkJCWVycm9yID0gIC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7Ci0JCWNhc2UgU0lPQ0lOUToKLQkJCXsKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl9CisJCWVycm9yID0gcHV0X3VzZXIoc2stPnNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwKKwkJCQkgKGludCBfX3VzZXIgKilhcmdwKSA/IC1FRkFVTFQgOiAwOworCQlnb3RvIGRvbmU7CisJY2FzZSBTSU9DSU5ROgorCXsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCQkJCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19DT05ORUNURUQpIHsKLQkJCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCQkJZXJyb3IgPSBwdXRfdXNlcihza2IgPyBza2ItPmxlbiA6IDAsCi0JCQkJCQkgKGludCBfX3VzZXIgKilhcmdwKSA/IC1FRkFVTFQgOiAwOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJY2FzZSBTSU9DR1NUQU1QOiAvKiBib3Jyb3dlZCBmcm9tIElQICovCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkJaWYgKGNvbXBhdCkKLQkJCQllcnJvciA9IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXAoc2ssIGFyZ3ApOwotCQkJZWxzZQotI2VuZGlmCi0JCQkJZXJyb3IgPSBzb2NrX2dldF90aW1lc3RhbXAoc2ssIGFyZ3ApOworCQlpZiAoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7Ci0JCWNhc2UgU0lPQ0dTVEFNUE5TOiAvKiBib3Jyb3dlZCBmcm9tIElQICovCisJCX0KKwkJc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJZXJyb3IgPSBwdXRfdXNlcihza2IgPyBza2ItPmxlbiA6IDAsCisJCQkJIChpbnQgX191c2VyICopYXJncCkgPyAtRUZBVUxUIDogMDsKKwkJZ290byBkb25lOworCX0KKwljYXNlIFNJT0NHU1RBTVA6IC8qIGJvcnJvd2VkIGZyb20gSVAgKi8KICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCQlpZiAoY29tcGF0KQotCQkJCWVycm9yID0gY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcG5zKHNrLCBhcmdwKTsKLQkJCWVsc2UKKwkJaWYgKGNvbXBhdCkKKwkJCWVycm9yID0gY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzaywgYXJncCk7CisJCWVsc2UKICNlbmRpZgotCQkJCWVycm9yID0gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIGFyZ3ApOworCQkJZXJyb3IgPSBzb2NrX2dldF90aW1lc3RhbXAoc2ssIGFyZ3ApOworCQlnb3RvIGRvbmU7CisJY2FzZSBTSU9DR1NUQU1QTlM6IC8qIGJvcnJvd2VkIGZyb20gSVAgKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCWlmIChjb21wYXQpCisJCQllcnJvciA9IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXBucyhzaywgYXJncCk7CisJCWVsc2UKKyNlbmRpZgorCQkJZXJyb3IgPSBzb2NrX2dldF90aW1lc3RhbXBucyhzaywgYXJncCk7CisJCWdvdG8gZG9uZTsKKwljYXNlIEFUTV9TRVRTQzoKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByX3dhcm5pbmcoIkFUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxuIiwKKwkJCQkgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCWVycm9yID0gMDsKKwkJZ290byBkb25lOworCWNhc2UgQVRNU0lHRF9DVFJMOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVycm9yID0gLUVQRVJNOwogCQkJZ290byBkb25lOwotCQljYXNlIEFUTV9TRVRTQzoKKwkJfQorCQkvKgorCQkgKiBUaGUgdXNlci9rZXJuZWwgcHJvdG9jb2wgZm9yIGV4Y2hhbmdpbmcgc2lnbmFsbGluZworCQkgKiBpbmZvIHVzZXMga2VybmVsIHBvaW50ZXJzIGFzIG9wYXF1ZSByZWZlcmVuY2VzLAorCQkgKiBzbyB0aGUgaG9sZGVyIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2FuIHNjcmliYmxlCisJCSAqIG9uIHRoZSBrZXJuZWwuLi4gc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHdlCisJCSAqIGhhdmUgdGhlIHNhbWUgcHJpdmlsZWdlcyB0aGF0IC9wcm9jL2tjb3JlIG5lZWRzCisJCSAqLworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBkb25lOworCQl9CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQkvKiBXVEY/IEkgZG9uJ3QgZXZlbiB3YW50IHRvIF90aGlua18gYWJvdXQgbWFraW5nIHRoaXMKKwkJICAgd29yayBmb3IgMzItYml0IHVzZXJzcGFjZS4gVEJIIEkgZG9uJ3QgcmVhbGx5IHdhbnQKKwkJICAgdG8gdGhpbmsgYWJvdXQgaXQgYXQgYWxsLiBkd213Mi4gKi8KKwkJaWYgKGNvbXBhdCkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVE1fU0VUU0MgaXMgb2Jzb2xldGU7IHVzZWQgYnkgJXM6JWRcbiIsCi0JCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJCWVycm9yID0gMDsKKwkJCQlwcl93YXJuaW5nKCIzMi1iaXQgdGFzayBjYW5ub3QgYmUgYXRtc2lnZFxuIik7CisJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7Ci0JCWNhc2UgQVRNU0lHRF9DVFJMOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQkJZXJyb3IgPSAtRVBFUk07Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJLyoKLQkJCSAqIFRoZSB1c2VyL2tlcm5lbCBwcm90b2NvbCBmb3IgZXhjaGFuZ2luZyBzaWduYWxsaW5nCi0JCQkgKiBpbmZvIHVzZXMga2VybmVsIHBvaW50ZXJzIGFzIG9wYXF1ZSByZWZlcmVuY2VzLAotCQkJICogc28gdGhlIGhvbGRlciBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBzY3JpYmJsZQotCQkJICogb24gdGhlIGtlcm5lbC4uLiBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgd2UKLQkJCSAqIGhhdmUgdGhlIHNhbWUgcHJpdmlsZWdlcyB0aGF0IC9wcm9jL2tjb3JlIG5lZWRzCi0JCQkgKi8KLQkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkgewotCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCQkvKiBXVEY/IEkgZG9uJ3QgZXZlbiB3YW50IHRvIF90aGlua18gYWJvdXQgbWFraW5nIHRoaXMKLQkJCSAgIHdvcmsgZm9yIDMyLWJpdCB1c2Vyc3BhY2UuIFRCSCBJIGRvbid0IHJlYWxseSB3YW50Ci0JCQkgICB0byB0aGluayBhYm91dCBpdCBhdCBhbGwuIGR3bXcyLiAqLwotCQkJaWYgKGNvbXBhdCkgewotCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjMyLWJpdCB0YXNrIGNhbm5vdCBiZSBhdG1zaWdkXG4iKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJZ290byBkb25lOwotCQkJfQorCQl9CiAjZW5kaWYKLQkJCWVycm9yID0gc2lnZF9hdHRhY2godmNjKTsKLQkJCWlmICghZXJyb3IpCi0JCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CisJCWVycm9yID0gc2lnZF9hdHRhY2godmNjKTsKKwkJaWYgKCFlcnJvcikKKwkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQlnb3RvIGRvbmU7CisJY2FzZSBBVE1fU0VUQkFDS0VORDoKKwljYXNlIEFUTV9ORVdCQUNLRU5ESUY6CisJeworCQlhdG1fYmFja2VuZF90IGJhY2tlbmQ7CisJCWVycm9yID0gZ2V0X3VzZXIoYmFja2VuZCwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopYXJncCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gZG9uZTsKLQkJY2FzZSBBVE1fU0VUQkFDS0VORDoKLQkJY2FzZSBBVE1fTkVXQkFDS0VORElGOgotCQkJewotCQkJCWF0bV9iYWNrZW5kX3QgYmFja2VuZDsKLQkJCQllcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKSBhcmdwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCWdvdG8gZG9uZTsKLQkJCQlzd2l0Y2ggKGJhY2tlbmQpIHsKLQkJCQkJY2FzZSBBVE1fQkFDS0VORF9QUFA6Ci0JCQkJCQlyZXF1ZXN0X21vZHVsZSgicHBwb2F0bSIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgQVRNX0JBQ0tFTkRfQlIyNjg0OgotCQkJCQkJcmVxdWVzdF9tb2R1bGUoImJyMjY4NCIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQorCQlzd2l0Y2ggKGJhY2tlbmQpIHsKKwkJY2FzZSBBVE1fQkFDS0VORF9QUFA6CisJCQlyZXF1ZXN0X21vZHVsZSgicHBwb2F0bSIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQVRNTVBDX0NUUkw6Ci0JCWNhc2UgQVRNTVBDX0RBVEE6Ci0JCQlyZXF1ZXN0X21vZHVsZSgibXBvYSIpOworCQljYXNlIEFUTV9CQUNLRU5EX0JSMjY4NDoKKwkJCXJlcXVlc3RfbW9kdWxlKCJicjI2ODQiKTsKIAkJCWJyZWFrOwotCQljYXNlIEFUTUFSUERfQ1RSTDoKLQkJCXJlcXVlc3RfbW9kdWxlKCJjbGlwIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1MRUNfQ1RSTDoKLQkJCXJlcXVlc3RfbW9kdWxlKCJsZWMiKTsKLQkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIEFUTU1QQ19DVFJMOgorCWNhc2UgQVRNTVBDX0RBVEE6CisJCXJlcXVlc3RfbW9kdWxlKCJtcG9hIik7CisJCWJyZWFrOworCWNhc2UgQVRNQVJQRF9DVFJMOgorCQlyZXF1ZXN0X21vZHVsZSgiY2xpcCIpOworCQlicmVhazsKKwljYXNlIEFUTUxFQ19DVFJMOgorCQlyZXF1ZXN0X21vZHVsZSgibGVjIik7CisJCWJyZWFrOwogCX0KIAogCWVycm9yID0gLUVOT0lPQ1RMQ01EOwogCiAJbXV0ZXhfbG9jaygmaW9jdGxfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocG9zLCAmaW9jdGxfbGlzdCkgewotCQlzdHJ1Y3QgYXRtX2lvY3RsICogaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7CisJCXN0cnVjdCBhdG1faW9jdGwgKmljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhdG1faW9jdGwsIGxpc3QpOwogCQlpZiAodHJ5X21vZHVsZV9nZXQoaWMtPm93bmVyKSkgewogCQkJZXJyb3IgPSBpYy0+aW9jdGwoc29jaywgY21kLCBhcmcpOwogCQkJbW9kdWxlX3B1dChpYy0+b3duZXIpOwpAQCAtMTg0LDcgKzE4NSw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIGludCB2Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIGRvX3ZjY19pb2N0bChzb2NrLCBjbWQsIGFyZywgMCk7CkBAIC0yODcsOCArMjg3LDggQEAKIAlzaW9jID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpzaW9jKSk7CiAJc2lvYzMyID0gY29tcGF0X3B0cihhcmcpOwogCi0JaWYgKGNvcHlfaW5fdXNlcigmc2lvYy0+bnVtYmVyLCAmc2lvYzMyLT5udW1iZXIsIDIgKiBzaXplb2YoaW50KSkKLQkgICAgfHwgZ2V0X3VzZXIoZGF0YSwgJnNpb2MzMi0+YXJnKSkKKwlpZiAoY29weV9pbl91c2VyKCZzaW9jLT5udW1iZXIsICZzaW9jMzItPm51bWJlciwgMiAqIHNpemVvZihpbnQpKSB8fAorCSAgICBnZXRfdXNlcihkYXRhLCAmc2lvYzMyLT5hcmcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlkYXRhcCA9IGNvbXBhdF9wdHIoZGF0YSk7CiAJaWYgKHB1dF91c2VyKGRhdGFwLCAmc2lvYy0+YXJnKSkKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IDQyNzQ5YjcuLjVkYTU3NTMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtNCw2ICs0LDggQEAKICAqIE1hcmtvIEtpaXNraWxhIDxta2lpc2tpbGFAeWFob28uY29tPgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CkBAIC0xNiw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC04NSwxNyArODcsMTkgQEAKIAkJCQkgICAgICAgaW50IGlzX3JkZXNjLAogCQkJCSAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKnJldF9lbnRyeSk7CiBzdGF0aWMgdm9pZCBsZWNfYXJwX3VwZGF0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLAotCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYXRtX2FkZHIsIHVuc2lnbmVkIGxvbmcgcmVtb3RlZmxhZywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyByZW1vdGVmbGFnLAogCQkJICAgdW5zaWduZWQgaW50IHRhcmdldGxlc3NfbGVfYXJwKTsKIHN0YXRpYyB2b2lkIGxlY19mbHVzaF9jb21wbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgdHJhbl9pZCk7CiBzdGF0aWMgaW50IGxlY19tY2FzdF9tYWtlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bV92Y2MgKnZjYyk7CiBzdGF0aWMgdm9pZCBsZWNfc2V0X2ZsdXNoX3RyYW5faWQoc3RydWN0IGxlY19wcml2ICpwcml2LAogCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYXRtX2FkZHIsCiAJCQkJICB1bnNpZ25lZCBsb25nIHRyYW5faWQpOwotc3RhdGljIHZvaWQgbGVjX3ZjY19hZGRlZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGNvbnN0IHN0cnVjdCBhdG1sZWNfaW9jICppb2NfZGF0YSwKK3N0YXRpYyB2b2lkIGxlY192Y2NfYWRkZWQoc3RydWN0IGxlY19wcml2ICpwcml2LAorCQkJICBjb25zdCBzdHJ1Y3QgYXRtbGVjX2lvYyAqaW9jX2RhdGEsCiAJCQkgIHN0cnVjdCBhdG1fdmNjICp2Y2MsCi0JCQkgIHZvaWQgKCpvbGRfcHVzaCkgKHN0cnVjdCBhdG1fdmNjICp2Y2MsCi0JCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CisJCQkgIHZvaWQgKCpvbGRfcHVzaCkoc3RydWN0IGF0bV92Y2MgKnZjYywKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwogc3RhdGljIHZvaWQgbGVjX3ZjY19jbG9zZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHN0cnVjdCBhdG1fdmNjICp2Y2MpOwogCiAvKiBtdXN0IGJlIGRvbmUgdW5kZXIgbGVjX2FycF9sb2NrICovCkBAIC0xMTAsNyArMTE0LDYgQEAKIAkJa2ZyZWUoZW50cnkpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgbGFuZTJfb3BzIGxhbmUyX29wcyA9IHsKIAlsYW5lMl9yZXNvbHZlLAkJLyogcmVzb2x2ZSwgICAgICAgICAgICAgc3BlYyAzLjEuMyAqLwogCWxhbmUyX2Fzc29jaWF0ZV9yZXEsCS8qIGFzc29jaWF0ZV9yZXEsICAgICAgIHNwZWMgMy4xLjQgKi8KQEAgLTE0OCw3ICsxNTEsOCBAQAogCQltZXNnID0gKHN0cnVjdCBhdG1sZWNfbXNnICopc2tiMi0+ZGF0YTsKIAkJbWVzZy0+dHlwZSA9IGxfdG9wb2xvZ3lfY2hhbmdlOwogCQlidWZmICs9IDQ7Ci0JCW1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcgPSAqYnVmZiAmIDB4MDE7CS8qIDB4MDEgaXMgdG9wb2xvZ3kgY2hhbmdlICovCisJCW1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcgPSAqYnVmZiAmIDB4MDE7CisJCQkJCS8qIDB4MDEgaXMgdG9wb2xvZ3kgY2hhbmdlICovCiAKIAkJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJCWF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgc2tiMi0+dHJ1ZXNpemUpOwpAQCAtMjQyLDcgKzI0Niw3IEBACiAKIHN0YXRpYyB2b2lkIGxlY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHR4IHRpbWVvdXRcbiIsIGRldi0+bmFtZSk7CisJcHJfaW5mbygiJXNcbiIsIGRldi0+bmFtZSk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpAQCAtMjYxLDE0ICsyNjUsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHJkZXNjW0VUSF9BTEVOXTsJLyogVG9rZW4gUmluZyByb3V0ZSBkZXNjcmlwdG9yICovCiAjZW5kaWYKIAlpbnQgaXNfcmRlc2M7Ci0jaWYgRFVNUF9QQUNLRVRTID4gMAotCWNoYXIgYnVmWzMwMF07Ci0JaW50IGkgPSAwOwotI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+MCAqLwogCi0JcHJfZGVidWcoImxlY19zdGFydF94bWl0IGNhbGxlZFxuIik7CisJcHJfZGVidWcoImNhbGxlZFxuIik7CiAJaWYgKCFwcml2LT5sZWNkKSB7Ci0JCXByaW50aygiJXM6Tm8gbGVjZCBhdHRhY2hlZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiJXM6Tm8gbGVjZCBhdHRhY2hlZFxuIiwgZGV2LT5uYW1lKTsKIAkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTI3Niw4ICsyNzYsOCBAQAogCX0KIAogCXByX2RlYnVnKCJza2J1ZmYgaGVhZDolbHggZGF0YTolbHggdGFpbDolbHggZW5kOiVseFxuIiwKLQkJKGxvbmcpc2tiLT5oZWFkLCAobG9uZylza2ItPmRhdGEsIChsb25nKXNrYl90YWlsX3BvaW50ZXIoc2tiKSwKLQkJKGxvbmcpc2tiX2VuZF9wb2ludGVyKHNrYikpOworCQkgKGxvbmcpc2tiLT5oZWFkLCAobG9uZylza2ItPmRhdGEsIChsb25nKXNrYl90YWlsX3BvaW50ZXIoc2tiKSwKKwkJIChsb25nKXNrYl9lbmRfcG9pbnRlcihza2IpKTsKICNpZiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQoQ09ORklHX0JSSURHRV9NT0RVTEUpCiAJaWYgKG1lbWNtcChza2ItPmRhdGEsIGJyaWRnZV91bGFfbGVjLCBzaXplb2YoYnJpZGdlX3VsYV9sZWMpKSA9PSAwKQogCQlsZWNfaGFuZGxlX2JyaWRnZShza2IsIGRldik7CkBAIC0yODUsOCArMjg1LDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20gZm9yIGxlY19pZCAqLwogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IDIpIHsKLQotCQlwcl9kZWJ1ZygibGVjX3N0YXJ0X3htaXQ6IHJlYWxsb2NhdGluZyBza2JcbiIpOworCQlwcl9kZWJ1ZygicmVhbGxvY2F0aW5nIHNrYlxuIik7CiAJCXNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExFQ19IRUFERVJfTEVOKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWlmIChza2IyID09IE5VTEwpCkBAIC0zMTMsMjMgKzMxMiwxNyBAQAogCX0KICNlbmRpZgogCi0jaWYgRFVNUF9QQUNLRVRTID4gMAotCXByaW50aygiJXM6IHNlbmQgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKICNpZiBEVU1QX1BBQ0tFVFMgPj0gMgotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgOTk7IGkrKykgewotCQlzcHJpbnRmKGJ1ZiArIGkgKiAzLCAiJTIuMnggIiwgMHhmZiAmIHNrYi0+ZGF0YVtpXSk7Ci0JfQorI2RlZmluZSBNQVhfRFVNUF9TS0IgOTkKICNlbGlmIERVTVBfUEFDS0VUUyA+PSAxCi0JZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuICYmIGkgPCAzMDsgaSsrKSB7Ci0JCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKLQl9CisjZGVmaW5lIE1BWF9EVU1QX1NLQiAzMAorI2VuZGlmCisjaWYgRFVNUF9QQUNLRVRTID49IDEKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNlbmQgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9PRkZTRVQsIDE2LCAxLAorCQkgICAgICAgc2tiLT5kYXRhLCBtaW4oc2tiLT5sZW4sIE1BWF9EVU1QX1NLQiksIHRydWUpOwogI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+PSAxICovCi0JaWYgKGkgPT0gc2tiLT5sZW4pCi0JCXByaW50aygiJXNcbiIsIGJ1Zik7Ci0JZWxzZQotCQlwcmludGsoIiVzLi4uXG4iLCBidWYpOwotI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+IDAgKi8KIAogCS8qIE1pbmltdW0gZXRoZXJuZXQtZnJhbWUgc2l6ZSAqLwogI2lmZGVmIENPTkZJR19UUgpAQCAtMzY3LDMxICszNjAsMjggQEAKICNlbmRpZgogCWVudHJ5ID0gTlVMTDsKIAl2Y2MgPSBsZWNfYXJwX3Jlc29sdmUocHJpdiwgZHN0LCBpc19yZGVzYywgJmVudHJ5KTsKLQlwcl9kZWJ1ZygiJXM6dmNjOiVwIHZjY19mbGFnczolbHgsIGVudHJ5OiVwXG4iLCBkZXYtPm5hbWUsCi0JCXZjYywgdmNjID8gdmNjLT5mbGFncyA6IDAsIGVudHJ5KTsKKwlwcl9kZWJ1ZygiJXM6dmNjOiVwIHZjY19mbGFnczolbHgsIGVudHJ5OiVwXG4iLAorCQkgZGV2LT5uYW1lLCB2Y2MsIHZjYyA/IHZjYy0+ZmxhZ3MgOiAwLCBlbnRyeSk7CiAJaWYgKCF2Y2MgfHwgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKSB7CiAJCWlmIChlbnRyeSAmJiAoZW50cnktPnR4X3dhaXQucWxlbiA8IExFQ19VTlJFU19RVUVfTEVOKSkgewotCQkJcHJfZGVidWcoIiVzOmxlY19zdGFydF94bWl0OiBxdWV1aW5nIHBhY2tldCwgIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7CisJCQlwcl9kZWJ1ZygiJXM6cXVldWluZyBwYWNrZXQsIE1BQyBhZGRyZXNzICVwTVxuIiwKKwkJCQkgZGV2LT5uYW1lLCBsZWNfaC0+aF9kZXN0KTsKIAkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+dHhfd2FpdCwgc2tiKTsKIAkJfSBlbHNlIHsKLQkJCXByX2RlYnVnCi0JCQkgICAgKCIlczpsZWNfc3RhcnRfeG1pdDogdHggcXVldWUgZnVsbCBvciBubyBhcnAgZW50cnksIGRyb3BwaW5nLCAiLAotCQkJICAgICBkZXYtPm5hbWUpOwotCQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7CisJCQlwcl9kZWJ1ZygiJXM6dHggcXVldWUgZnVsbCBvciBubyBhcnAgZW50cnksIGRyb3BwaW5nLCBNQUMgYWRkcmVzczogJXBNXG4iLAorCQkJCSBkZXYtPm5hbWUsIGxlY19oLT5oX2Rlc3QpOwogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0KIAkJZ290byBvdXQ7CiAJfQogI2lmIERVTVBfUEFDS0VUUyA+IDAKLQlwcmludGsoIiVzOnNlbmRpbmcgdG8gdnBpOiVkIHZjaTolZFxuIiwgZGV2LT5uYW1lLCB2Y2MtPnZwaSwgdmNjLT52Y2kpOworCXByaW50ayhLRVJOX0RFQlVHICIlczpzZW5kaW5nIHRvIHZwaTolZCB2Y2k6JWRcbiIsCisJICAgICAgIGRldi0+bmFtZSwgdmNjLT52cGksIHZjYy0+dmNpKTsKICNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPiAwICovCiAKIAl3aGlsZSAoZW50cnkgJiYgKHNrYjIgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkgewotCQlwcl9kZWJ1ZygibGVjLmM6IGVtcHR5aW5nIHR4IHF1ZXVlLCAiKTsKLQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7CisJCXByX2RlYnVnKCJlbXB0eWluZyB0eCBxdWV1ZSwgTUFDIGFkZHJlc3MgJXBNXG4iLCBsZWNfaC0+aF9kZXN0KTsKIAkJbGVjX3NlbmQodmNjLCBza2IyKTsKIAl9CiAKQEAgLTQ0NCwxNCArNDM0LDEyIEBACiAJcHJfZGVidWcoIiVzOiBtc2cgZnJvbSB6ZXBwZWxpbjolZFxuIiwgZGV2LT5uYW1lLCBtZXNnLT50eXBlKTsKIAlzd2l0Y2ggKG1lc2ctPnR5cGUpIHsKIAljYXNlIGxfc2V0X21hY19hZGRyOgotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCQlkZXYtPmRldl9hZGRyW2ldID0gbWVzZy0+Y29udGVudC5ub3JtYWwubWFjX2FkZHJbaV07Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBsX2RlbF9tYWNfYWRkcjoKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJZGV2LT5kZXZfYWRkcltpXSA9IDA7Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBsX2FkZHJfZGVsZXRlOgogCQlsZWNfYWRkcl9kZWxldGUocHJpdiwgbWVzZy0+Y29udGVudC5ub3JtYWwuYXRtX2FkZHIsCkBAIC00NzcsMTAgKzQ2NSwxMCBAQAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQubm9ybWFsLmF0bV9hZGRyLAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcsCiAJCQkgICAgICAgbWVzZy0+Y29udGVudC5ub3JtYWwudGFyZ2V0bGVzc19sZV9hcnApOwotCQlwcl9kZWJ1ZygibGVjOiBpbiBsX2FycF91cGRhdGVcbiIpOworCQlwcl9kZWJ1ZygiaW4gbF9hcnBfdXBkYXRlXG4iKTsKIAkJaWYgKG1lc2ctPnNpemVvZnRsdnMgIT0gMCkgewkvKiBMQU5FMiAzLjEuNSAqLwotCQkJcHJfZGVidWcoImxlYzogTEFORTIgMy4xLjUsIGdvdCB0bHZzLCBzaXplICVkXG4iLAotCQkJCW1lc2ctPnNpemVvZnRsdnMpOworCQkJcHJfZGVidWcoIkxBTkUyIDMuMS41LCBnb3QgdGx2cywgc2l6ZSAlZFxuIiwKKwkJCQkgbWVzZy0+c2l6ZW9mdGx2cyk7CiAJCQlsYW5lMl9hc3NvY2lhdGVfaW5kKGRldiwgbWVzZy0+Y29udGVudC5ub3JtYWwubWFjX2FkZHIsCiAJCQkJCSAgICB0bXAsIG1lc2ctPnNpemVvZnRsdnMpOwogCQl9CkBAIC00OTksMTMgKzQ4NywxNCBAQAogCQlwcml2LT5mbHVzaF90aW1lb3V0ID0gKG1lc2ctPmNvbnRlbnQuY29uZmlnLmZsdXNoX3RpbWVvdXQgKiBIWik7CiAJCXByaXYtPnBhdGhfc3dpdGNoaW5nX2RlbGF5ID0KIAkJICAgIChtZXNnLT5jb250ZW50LmNvbmZpZy5wYXRoX3N3aXRjaGluZ19kZWxheSAqIEhaKTsKLQkJcHJpdi0+bGFuZV92ZXJzaW9uID0gbWVzZy0+Y29udGVudC5jb25maWcubGFuZV92ZXJzaW9uOwkvKiBMQU5FMiAqLworCQlwcml2LT5sYW5lX3ZlcnNpb24gPSBtZXNnLT5jb250ZW50LmNvbmZpZy5sYW5lX3ZlcnNpb247CisJCQkJCS8qIExBTkUyICovCiAJCXByaXYtPmxhbmUyX29wcyA9IE5VTEw7CiAJCWlmIChwcml2LT5sYW5lX3ZlcnNpb24gPiAxKQogCQkJcHJpdi0+bGFuZTJfb3BzID0gJmxhbmUyX29wczsKIAkJaWYgKGRldl9zZXRfbXR1KGRldiwgbWVzZy0+Y29udGVudC5jb25maWcubXR1KSkKLQkJCXByaW50aygiJXM6IGNoYW5nZV9tdHUgdG8gJWQgZmFpbGVkXG4iLCBkZXYtPm5hbWUsCi0JCQkgICAgICAgbWVzZy0+Y29udGVudC5jb25maWcubXR1KTsKKwkJCXByX2luZm8oIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CiAJCXByaXYtPmlzX3Byb3h5ID0gbWVzZy0+Y29udGVudC5jb25maWcuaXNfcHJveHk7CiAJCWJyZWFrOwogCWNhc2UgbF9mbHVzaF90cmFuX2lkOgpAQCAtNTE4LDQwICs1MDcsMzUgQEAKIAkJYnJlYWs7CiAJY2FzZSBsX3Nob3VsZF9icmlkZ2U6CiAjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19CUklER0VfTU9EVUxFKQotCQl7Ci0JCQlwcl9kZWJ1ZygiJXM6IGJyaWRnZSB6ZXBwZWxpbiBhc2tzIGFib3V0ICVwTVxuIiwKLQkJCQkgZGV2LT5uYW1lLCBtZXNnLT5jb250ZW50LnByb3h5Lm1hY19hZGRyKTsKKwl7CisJCXByX2RlYnVnKCIlczogYnJpZGdlIHplcHBlbGluIGFza3MgYWJvdXQgJXBNXG4iLAorCQkJIGRldi0+bmFtZSwgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcik7CiAKLQkJCWlmIChicl9mZGJfdGVzdF9hZGRyX2hvb2sgPT0gTlVMTCkKKwkJaWYgKGJyX2ZkYl90ZXN0X2FkZHJfaG9vayA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJaWYgKGJyX2ZkYl90ZXN0X2FkZHJfaG9vayhkZXYsIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHIpKSB7CisJCQkvKiBoaXQgZnJvbSBicmlkZ2UgdGFibGUsIHNlbmQgTEVfQVJQX1JFU1BPTlNFICovCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKwkJCXN0cnVjdCBzb2NrICpzazsKKworCQkJcHJfZGVidWcoIiVzOiBlbnRyeSBmb3VuZCwgcmVzcG9uZGluZyB0byB6ZXBwZWxpblxuIiwKKwkJCQkgZGV2LT5uYW1lKTsKKwkJCXNrYjIgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoc2tiMiA9PSBOVUxMKQogCQkJCWJyZWFrOwotCi0JCQlpZiAoYnJfZmRiX3Rlc3RfYWRkcl9ob29rKGRldiwKLQkJCQkJbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcikpIHsKLQkJCQkvKiBoaXQgZnJvbSBicmlkZ2UgdGFibGUsIHNlbmQgTEVfQVJQX1JFU1BPTlNFICovCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7Ci0JCQkJc3RydWN0IHNvY2sgKnNrOwotCi0JCQkJcHJfZGVidWcKLQkJCQkgICAgKCIlczogZW50cnkgZm91bmQsIHJlc3BvbmRpbmcgdG8gemVwcGVsaW5cbiIsCi0JCQkJICAgICBkZXYtPm5hbWUpOwotCQkJCXNrYjIgPQotCQkJCSAgICBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwKLQkJCQkJICAgICAgR0ZQX0FUT01JQyk7Ci0JCQkJaWYgKHNrYjIgPT0gTlVMTCkKLQkJCQkJYnJlYWs7Ci0JCQkJc2tiMi0+bGVuID0gc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKTsKLQkJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IyLCBtZXNnLAotCQkJCQkJCXNpemVvZigqbWVzZykpOwotCQkJCWF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgc2tiMi0+dHJ1ZXNpemUpOwotCQkJCXNrID0gc2tfYXRtKHByaXYtPmxlY2QpOwotCQkJCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiMik7Ci0JCQkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYjItPmxlbik7Ci0JCQl9CisJCQlza2IyLT5sZW4gPSBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpOworCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiMiwgbWVzZywgc2l6ZW9mKCptZXNnKSk7CisJCQlhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYjItPnRydWVzaXplKTsKKwkJCXNrID0gc2tfYXRtKHByaXYtPmxlY2QpOworCQkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IyKTsKKwkJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2IyLT5sZW4pOwogCQl9CisJfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX01PRFVMRSkgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVW5rbm93biBtZXNzYWdlIHR5cGUgJWRcbiIsIGRldi0+bmFtZSwgbWVzZy0+dHlwZSk7CisJCXByX2luZm8oIiVzOiBVbmtub3duIG1lc3NhZ2UgdHlwZSAlZFxuIiwgZGV2LT5uYW1lLCBtZXNnLT50eXBlKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NzIsMTQgKzU1NiwxMyBAQAogCWxlY19hcnBfZGVzdHJveShwcml2KTsKIAogCWlmIChza2JfcGVlaygmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKQotCQlwcmludGsoIiVzIGxlY19hdG1fY2xvc2U6IGNsb3Npbmcgd2l0aCBtZXNzYWdlcyBwZW5kaW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJcHJfaW5mbygiJXMgY2xvc2luZyB3aXRoIG1lc3NhZ2VzIHBlbmRpbmdcbiIsIGRldi0+bmFtZSk7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKSkgewogCQlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlwcmludGsoIiVzOiBTaHV0IGRvd24hXG4iLCBkZXYtPm5hbWUpOworCXByX2luZm8oIiVzOiBTaHV0IGRvd24hXG4iLCBkZXYtPm5hbWUpOwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCkBAIC02MDgsOSArNTkxLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdG1sZWNfbXNnICptZXNnOwogCi0JaWYgKCFwcml2IHx8ICFwcml2LT5sZWNkKSB7CisJaWYgKCFwcml2IHx8ICFwcml2LT5sZWNkKQogCQlyZXR1cm4gLTE7Ci0JfQogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC0xOwpAQCAtNjMzLDcgKzYxNSw3IEBACiAJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKIAogCWlmIChkYXRhICE9IE5VTEwpIHsKLQkJcHJfZGVidWcoImxlYzogYWJvdXQgdG8gc2VuZCAlZCBieXRlcyBvZiBkYXRhXG4iLCBkYXRhLT5sZW4pOworCQlwcl9kZWJ1ZygiYWJvdXQgdG8gc2VuZCAlZCBieXRlcyBvZiBkYXRhXG4iLCBkYXRhLT5sZW4pOwogCQlhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIGRhdGEtPnRydWVzaXplKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBkYXRhKTsKIAkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKQEAgLTY5MSwzNiArNjczLDI4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXZjYy0+cHJvdG9fZGF0YTsKIAlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0jaWYgRFVNUF9QQUNLRVRTID4wCi0JaW50IGkgPSAwOwotCWNoYXIgYnVmWzMwMF07Ci0KLQlwcmludGsoIiVzOiBsZWNfcHVzaCB2Y2MgdnBpOiVkIHZjaTolZFxuIiwgZGV2LT5uYW1lLAotCSAgICAgICB2Y2MtPnZwaSwgdmNjLT52Y2kpOworI2lmIERVTVBfUEFDS0VUUyA+IDAKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZjYyB2cGk6JWQgdmNpOiVkXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CiAjZW5kaWYKIAlpZiAoIXNrYikgewogCQlwcl9kZWJ1ZygiJXM6IG51bGwgc2tiXG4iLCBkZXYtPm5hbWUpOwogCQlsZWNfdmNjX2Nsb3NlKHByaXYsIHZjYyk7CiAJCXJldHVybjsKIAl9Ci0jaWYgRFVNUF9QQUNLRVRTID4gMAotCXByaW50aygiJXM6IHJjdiBkYXRhbGVuOiVsZCBsZWNpZDolNC40eFxuIiwgZGV2LT5uYW1lLAotCSAgICAgICBza2ItPmxlbiwgcHJpdi0+bGVjaWQpOwogI2lmIERVTVBfUEFDS0VUUyA+PSAyCi0JZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuICYmIGkgPCA5OTsgaSsrKSB7Ci0JCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKLQl9CisjZGVmaW5lIE1BWF9TS0JfRFVNUCA5OQogI2VsaWYgRFVNUF9QQUNLRVRTID49IDEKLQlmb3IgKGkgPSAwOyBpIDwgc2tiLT5sZW4gJiYgaSA8IDMwOyBpKyspIHsKLQkJc3ByaW50ZihidWYgKyBpICogMywgIiUyLjJ4ICIsIDB4ZmYgJiBza2ItPmRhdGFbaV0pOwotCX0KLSNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPj0gMSAqLwotCWlmIChpID09IHNrYi0+bGVuKQotCQlwcmludGsoIiVzXG4iLCBidWYpOwotCWVsc2UKLQkJcHJpbnRrKCIlcy4uLlxuIiwgYnVmKTsKKyNkZWZpbmUgTUFYX1NLQl9EVU1QIDMwCisjZW5kaWYKKyNpZiBEVU1QX1BBQ0tFVFMgPiAwCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByY3YgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9PRkZTRVQsIDE2LCAxLAorCQkgICAgICAgc2tiLT5kYXRhLCBtaW4oTUFYX1NLQl9EVU1QLCBza2ItPmxlbiksIHRydWUpOwogI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+IDAgKi8KLQlpZiAobWVtY21wKHNrYi0+ZGF0YSwgbGVjX2N0cmxfbWFnaWMsIDQpID09IDApIHsJLyogQ29udHJvbCBmcmFtZSwgdG8gZGFlbW9uICovCisJaWYgKG1lbWNtcChza2ItPmRhdGEsIGxlY19jdHJsX21hZ2ljLCA0KSA9PSAwKSB7CisJCQkJLyogQ29udHJvbCBmcmFtZSwgdG8gZGFlbW9uICovCiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCiAJCXByX2RlYnVnKCIlczogVG8gZGFlbW9uXG4iLCBkZXYtPm5hbWUpOwpAQCAtNzc4LDkgKzc1Miw4IEBACiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSkgeworCQlpZiAoIWhsaXN0X2VtcHR5KCZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMpKQogCQkJbGVjX2FycF9jaGVja19lbXB0aWVzKHByaXYsIHZjYywgc2tiKTsKLQkJfQogCQlza2JfcHVsbChza2IsIDIpOwkvKiBza2lwIGxlY19pZCAqLwogI2lmZGVmIENPTkZJR19UUgogCQlpZiAocHJpdi0+aXNfdHJkZXYpCkBAIC04MDEsNyArNzc0LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAKIAlpZiAodnByaXYgPT0gTlVMTCkgewotCQlwcmludGsoImxlY19wb3AoKTogdnByaXYgPSBOVUxMIT8hPyE/XG4iKTsKKwkJcHJfaW5mbygidnByaXYgPSBOVUxMIT8hPyE/XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODIyLDE1ICs3OTUsMTMgQEAKIAogCS8qIExlY2QgbXVzdCBiZSB1cCBpbiB0aGlzIGNhc2UgKi8KIAlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXIoJmlvY19kYXRhLCBhcmcsIHNpemVvZihzdHJ1Y3QgYXRtbGVjX2lvYykpOwotCWlmIChieXRlc19sZWZ0ICE9IDApIHsKLQkJcHJpbnRrCi0JCSAgICAoImxlYzogbGVjX3ZjY19hdHRhY2gsIGNvcHkgZnJvbSB1c2VyIGZhaWxlZCBmb3IgJWQgYnl0ZXNcbiIsCi0JCSAgICAgYnl0ZXNfbGVmdCk7Ci0JfQorCWlmIChieXRlc19sZWZ0ICE9IDApCisJCXByX2luZm8oImNvcHkgZnJvbSB1c2VyIGZhaWxlZCBmb3IgJWQgYnl0ZXNcbiIsIGJ5dGVzX2xlZnQpOwogCWlmIChpb2NfZGF0YS5kZXZfbnVtIDwgMCB8fCBpb2NfZGF0YS5kZXZfbnVtID49IE1BWF9MRUNfSVRGIHx8CiAJICAgICFkZXZfbGVjW2lvY19kYXRhLmRldl9udW1dKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoISh2cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWNfdmNjX3ByaXYpLCBHRlBfS0VSTkVMKSkpCisJdnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX3ZjY19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAJdnByaXYtPnhvZmYgPSAwOwogCXZwcml2LT5vbGRfcG9wID0gdmNjLT5wb3A7CkBAIC05MjEsOSArODkyLDggQEAKIAlwcml2LT5mbHVzaF90aW1lb3V0ID0gKDQgKiBIWik7CiAJcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkgPSAoNiAqIEhaKTsKIAotCWlmIChkZXZfbGVjW2ldLT5mbGFncyAmIElGRl9VUCkgeworCWlmIChkZXZfbGVjW2ldLT5mbGFncyAmIElGRl9VUCkKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2X2xlY1tpXSk7Ci0JfQogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJcmV0dXJuIGk7CiB9CkBAIC0xMTI1LDcgKzEwOTUsOSBAQAogCWVsc2UgewogCQlzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7Ci0JCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSA9IGhsaXN0X2VudHJ5KHN0YXRlLT5ub2RlLCBzdHJ1Y3QgbGVjX2FycF90YWJsZSwgbmV4dCk7CisJCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSA9IGhsaXN0X2VudHJ5KHN0YXRlLT5ub2RlLAorCQkJCQkJCSAgc3RydWN0IGxlY19hcnBfdGFibGUsCisJCQkJCQkJICBuZXh0KTsKIAogCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIGRldi0+bmFtZSk7CiAJCWxlY19pbmZvKHNlcSwgZW50cnkpOwpAQCAtMTE5OSwxMyArMTE3MSwxMyBAQAogCiAJcCA9IHByb2NfY3JlYXRlKCJsZWMiLCBTX0lSVUdPLCBhdG1fcHJvY19yb290LCAmbGVjX3NlcV9mb3BzKTsKIAlpZiAoIXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAvcHJvYy9uZXQvYXRtL2xlY1xuIik7CisJCXByX2VycigiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0L2F0bS9sZWNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAjZW5kaWYKIAogCXJlZ2lzdGVyX2F0bV9pb2N0bCgmbGFuZV9pb2N0bF9vcHMpOwotCXByaW50aygibGVjLmM6ICIgX19EQVRFX18gIiAiIF9fVElNRV9fICIgaW5pdGlhbGl6ZWRcbiIpOworCXByX2luZm8oImxlYy5jOiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiIGluaXRpYWxpemVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI5NCwxMyArMTI2NiwxMyBAQAogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGxhbl9kc3QsIGRldi0+ZGV2X2FkZHIpKQotCQlyZXR1cm4gKDApOwkvKiBub3Qgb3VyIG1hYyBhZGRyZXNzICovCisJCXJldHVybiAwOwkvKiBub3Qgb3VyIG1hYyBhZGRyZXNzICovCiAKIAlrZnJlZShwcml2LT50bHZzKTsJLyogTlVMTCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgYXNzb2NpYXRpb24gKi8KIAogCXByaXYtPnRsdnMgPSBrbWVtZHVwKHRsdnMsIHNpemVvZnRsdnMsIEdGUF9LRVJORUwpOwogCWlmIChwcml2LT50bHZzID09IE5VTEwpCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCXByaXYtPnNpemVvZnRsdnMgPSBzaXplb2Z0bHZzOwogCiAJc2tiID0gYWxsb2Nfc2tiKHNpemVvZnRsdnMsIEdGUF9BVE9NSUMpOwpAQCAtMTMxMCwxMiArMTI4MiwxMiBAQAogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgdGx2cywgc2l6ZW9mdGx2cyk7CiAJcmV0dmFsID0gc2VuZF90b19sZWNkKHByaXYsIGxfYXNzb2NpYXRlX3JlcSwgTlVMTCwgTlVMTCwgc2tiKTsKIAlpZiAocmV0dmFsICE9IDApCi0JCXByaW50aygibGVjLmM6IGxhbmUyX2Fzc29jaWF0ZV9yZXEoKSBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJsZWMuYzogbGFuZTJfYXNzb2NpYXRlX3JlcSgpIGZhaWxlZFxuIik7CiAJLyoKIAkgKiBJZiB0aGUgcHJldmlvdXMgYXNzb2NpYXRpb24gaGFzIGNoYW5nZWQgd2UgbXVzdAogCSAqIHNvbWVob3cgbm90aWZ5IG90aGVyIExBTkUgZW50aXRpZXMgYWJvdXQgdGhlIGNoYW5nZQogCSAqLwotCXJldHVybiAoMSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC0xMzQ4LDEyICsxMzIwLDEyIEBACiAJZW50cnktPnNpemVvZnRsdnMgPSBzaXplb2Z0bHZzOwogI2VuZGlmCiAjaWYgMAotCXByaW50aygibGVjLmM6IGxhbmUyX2Fzc29jaWF0ZV9pbmQoKVxuIik7Ci0JcHJpbnRrKCJkdW1wIG9mIHRsdnMsIHNpemVvZnRsdnM9JWRcbiIsIHNpemVvZnRsdnMpOworCXByX2luZm8oIlxuIik7CisJcHJfaW5mbygiZHVtcCBvZiB0bHZzLCBzaXplb2Z0bHZzPSVkXG4iLCBzaXplb2Z0bHZzKTsKIAl3aGlsZSAoaSA8IHNpemVvZnRsdnMpCi0JCXByaW50aygiJTAyeCAiLCB0bHZzW2krK10pOworCQlwcl9jb250KCIlMDJ4ICIsIHRsdnNbaSsrXSk7CiAKLQlwcmludGsoIlxuIik7CisJcHJfY29udCgiXG4iKTsKICNlbmRpZgogCiAJLyogdGVsbCBNUE9BIGFib3V0IHRoZSBUTFZzIHdlIHNhdyAqLwpAQCAtMTM3MywxNSArMTM0NSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAogI2lmIDAKLSNkZWZpbmUgcHJfZGVidWcoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIHByX2RlYnVnKGZvcm1hdCwgYXJncy4uLikKIC8qCi0jZGVmaW5lIHByX2RlYnVnIHByaW50aworICAjZGVmaW5lIHByX2RlYnVnIHByaW50awogKi8KICNlbmRpZgogI2RlZmluZSBERUJVR19BUlBfVEFCTEUgMApAQCAtMTM5NSw3ICsxMzY3LDcgQEAKICAqIEFycCB0YWJsZSBmdW5jcwogICovCiAKLSNkZWZpbmUgSEFTSChjaCkgKGNoICYgKExFQ19BUlBfVEFCTEVfU0laRSAtMSkpCisjZGVmaW5lIEhBU0goY2gpIChjaCAmIChMRUNfQVJQX1RBQkxFX1NJWkUgLSAxKSkKIAogLyoKICAqIEluaXRpYWxpemF0aW9uIG9mIGFycC1jYWNoZQpAQCAtMTQwNCw5ICsxMzc2LDggQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCBpOwogCi0JZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJnByaXYtPmxlY19hcnBfdGFibGVzW2ldKTsKLQl9CiAJSU5JVF9ITElTVF9IRUFEKCZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMpOwogCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX25vX2ZvcndhcmQpOwogCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bWNhc3RfZndkcyk7CkBAIC0xNDUwLDEwICsxNDIxLDcgQEAKIAl0bXAgPSAmcHJpdi0+bGVjX2FycF90YWJsZXNbSEFTSChlbnRyeS0+bWFjX2FkZHJbRVRIX0FMRU4gLSAxXSldOwogCWhsaXN0X2FkZF9oZWFkKCZlbnRyeS0+bmV4dCwgdG1wKTsKIAotCXByX2RlYnVnKCJMRUNfQVJQOiBBZGRlZCBlbnRyeTolMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeFxuIiwKLQkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkclswXSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkclsxXSwKLQkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkclsyXSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkclszXSwKLQkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkcls0XSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkcls1XSk7CisJcHJfZGVidWcoIkFkZGVkIGVudHJ5OiVwTVxuIiwgZW50cnktPm1hY19hZGRyKTsKIH0KIAogLyoKQEAgLTE0NjYsMjAgKzE0MzQsMjMgQEAKIAlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CiAJaW50IGksIHJlbW92ZV92Y2MgPSAxOwogCi0JaWYgKCF0b19yZW1vdmUpIHsKKwlpZiAoIXRvX3JlbW92ZSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCWhsaXN0X2RlbCgmdG9fcmVtb3ZlLT5uZXh0KTsKIAlkZWxfdGltZXIoJnRvX3JlbW92ZS0+dGltZXIpOwogCi0JLyogSWYgdGhpcyBpcyB0aGUgb25seSBNQUMgY29ubmVjdGVkIHRvIHRoaXMgVkNDLCBhbHNvIHRlYXIgZG93biB0aGUgVkNDICovCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSBvbmx5IE1BQyBjb25uZWN0ZWQgdG8gdGhpcyBWQ0MsCisJICogYWxzbyB0ZWFyIGRvd24gdGhlIFZDQworCSAqLwogCWlmICh0b19yZW1vdmUtPnN0YXR1cyA+PSBFU0lfRkxVU0hfUEVORElORykgewogCQkvKgogCQkgKiBFU0lfRkxVU0hfUEVORElORywgRVNJX0ZPUldBUkRfRElSRUNUCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLAorCQkJCQkgICAgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJCWlmIChtZW1jbXAodG9fcmVtb3ZlLT5hdG1fYWRkciwKIAkJCQkJICAgZW50cnktPmF0bV9hZGRyLCBBVE1fRVNBX0xFTikgPT0gMCkgewogCQkJCQlyZW1vdmVfdmNjID0gMDsKQEAgLTE0OTIsMTAgKzE0NjMsNyBAQAogCX0KIAlza2JfcXVldWVfcHVyZ2UoJnRvX3JlbW92ZS0+dHhfd2FpdCk7CS8qIEZJWE1FOiBnb29kIHBsYWNlIGZvciB0aGlzPyAqLwogCi0JcHJfZGVidWcoIkxFQ19BUlA6IFJlbW92ZWQgZW50cnk6JTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnhcbiIsCi0JCTB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzBdLCAweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkclsxXSwKLQkJMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbMl0sIDB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzNdLAotCQkweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkcls0XSwgMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbNV0pOworCXByX2RlYnVnKCJSZW1vdmVkIGVudHJ5OiVwTVxuIiwgdG9fcmVtb3ZlLT5tYWNfYWRkcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MTMsOSArMTQ4MSw4IEBACiAJCXJldHVybiAiRVNJX0ZMVVNIX1BFTkRJTkciOwogCWNhc2UgRVNJX0ZPUldBUkRfRElSRUNUOgogCQlyZXR1cm4gIkVTSV9GT1JXQVJEX0RJUkVDVCI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICI8VU5LTk9XTj4iOwogCX0KKwlyZXR1cm4gIjxVTktOT1dOPiI7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfYXJwX3RhYmxlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKQEAgLTE1MjUsMTggKzE0OTIsMTUgQEAKIAljaGFyIGJ1ZlsyNTZdOwogCWludCBpLCBqLCBvZmZzZXQ7CiAKLQlwcmludGsoIkR1bXAgJXA6XG4iLCBwcml2KTsKKwlwcl9pbmZvKCJEdW1wICVwOlxuIiwgcHJpdik7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ1bGxhLCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsCisJCQkJICAgICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKIAkJCW9mZnNldCA9IDA7CiAJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYsICIlZDogJXBcbiIsIGksIHJ1bGxhKTsKLQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzoiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBFVEhfQUxFTjsgaisrKSB7Ci0JCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LAotCQkJCQkJICAiJTIuMnggIiwKLQkJCQkJCSAgcnVsbGEtPm1hY19hZGRyW2pdICYgMHhmZik7Ci0JCQl9Ci0JCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJBdG06Iik7CisJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6ICVwTSIsCisJCQkJCSAgcnVsbGEtPm1hY19hZGRyKTsKKwkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiBBdG06Iik7CiAJCQlmb3IgKGogPSAwOyBqIDwgQVRNX0VTQV9MRU47IGorKykgewogCQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwKIAkJCQkJCSAgIiUyLjJ4ICIsCkBAIC0xNTU2LDIwICsxNTIwLDE2IEBACiAJCQkJICAgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCiAJCQkJICAgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKIAkJCQkgICAgZ2V0X3N0YXR1c19zdHJpbmcocnVsbGEtPnN0YXR1cykpOwotCQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwkJCXByX2luZm8oIiVzXG4iLCBidWYpOwogCQl9CiAJfQogCiAJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX25vX2ZvcndhcmQpKQotCQlwcmludGsoIk5vIGZvcndhcmRcbiIpOworCQlwcl9pbmZvKCJObyBmb3J3YXJkXG4iKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShydWxsYSwgbm9kZSwgJnByaXYtPmxlY19ub19mb3J3YXJkLCBuZXh0KSB7CiAJCW9mZnNldCA9IDA7Ci0JCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzoiKTsKLQkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKLQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCi0JCQkJCSAgcnVsbGEtPm1hY19hZGRyW2pdICYgMHhmZik7Ci0JCX0KLQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiQXRtOiIpOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6ICVwTSIsIHJ1bGxhLT5tYWNfYWRkcik7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiBBdG06Iik7CiAJCWZvciAoaiA9IDA7IGogPCBBVE1fRVNBX0xFTjsgaisrKSB7CiAJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAogCQkJCQkgIHJ1bGxhLT5hdG1fYWRkcltqXSAmIDB4ZmYpOwpAQCAtMTU4NiwxOSArMTU0NiwxNSBAQAogCQkJCSAgIkZsYWdzOiV4LCBQYWNrZXRzX2Zsb29kZWQ6JXgsIFN0YXR1czogJXMgIiwKIAkJCQkgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKIAkJCQkgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwkJcHJfaW5mbygiJXNcbiIsIGJ1Zik7CiAJfQogCiAJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSkKLQkJcHJpbnRrKCJFbXB0eSBvbmVzXG4iKTsKKwkJcHJfaW5mbygiRW1wdHkgb25lc1xuIik7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKIAkJb2Zmc2V0ID0gMDsKLQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiIpOwotCQlmb3IgKGogPSAwOyBqIDwgRVRIX0FMRU47IGorKykgewotCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiJTIuMnggIiwKLQkJCQkJICBydWxsYS0+bWFjX2FkZHJbal0gJiAweGZmKTsKLQkJfQotCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJBdG06Iik7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzogJXBNIiwgcnVsbGEtPm1hY19hZGRyKTsKKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiIEF0bToiKTsKIAkJZm9yIChqID0gMDsgaiA8IEFUTV9FU0FfTEVOOyBqKyspIHsKIAkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCiAJCQkJCSAgcnVsbGEtPmF0bV9hZGRyW2pdICYgMHhmZik7CkBAIC0xNjE1LDE5ICsxNTcxLDE1IEBACiAJCQkJICAiRmxhZ3M6JXgsIFBhY2tldHNfZmxvb2RlZDoleCwgU3RhdHVzOiAlcyAiLAogCQkJCSAgcnVsbGEtPmZsYWdzLCBydWxsYS0+cGFja2V0c19mbG9vZGVkLAogCQkJCSAgZ2V0X3N0YXR1c19zdHJpbmcocnVsbGEtPnN0YXR1cykpOwotCQlwcmludGsoIiVzIiwgYnVmKTsKKwkJcHJfaW5mbygiJXMiLCBidWYpOwogCX0KIAogCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPm1jYXN0X2Z3ZHMpKQotCQlwcmludGsoIk11bHRpY2FzdCBGb3J3YXJkIFZDQ3NcbiIpOworCQlwcl9pbmZvKCJNdWx0aWNhc3QgRm9yd2FyZCBWQ0NzXG4iKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShydWxsYSwgbm9kZSwgJnByaXYtPm1jYXN0X2Z3ZHMsIG5leHQpIHsKIAkJb2Zmc2V0ID0gMDsKLQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiIpOwotCQlmb3IgKGogPSAwOyBqIDwgRVRIX0FMRU47IGorKykgewotCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiJTIuMnggIiwKLQkJCQkJICBydWxsYS0+bWFjX2FkZHJbal0gJiAweGZmKTsKLQkJfQotCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJBdG06Iik7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzogJXBNIiwgcnVsbGEtPm1hY19hZGRyKTsKKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiIEF0bToiKTsKIAkJZm9yIChqID0gMDsgaiA8IEFUTV9FU0FfTEVOOyBqKyspIHsKIAkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCiAJCQkJCSAgcnVsbGEtPmF0bV9hZGRyW2pdICYgMHhmZik7CkBAIC0xNjQ0LDcgKzE1OTYsNyBAQAogCQkJCSAgIkZsYWdzOiV4LCBQYWNrZXRzX2Zsb29kZWQ6JXgsIFN0YXR1czogJXMgIiwKIAkJCQkgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKIAkJCQkgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwkJcHJfaW5mbygiJXNcbiIsIGJ1Zik7CiAJfQogCiB9CkBAIC0xNjcwLDE0ICsxNjIyLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCQkgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOwogCQkJbGVjX2FycF9wdXQoZW50cnkpOwogCQl9CiAJCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0pOwogCX0KIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCSAgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgewogCQlkZWxfdGltZXJfc3luYygmZW50cnktPnRpbWVyKTsKIAkJbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKIAkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CkBAIC0xNjg1LDcgKzE2MzksOCBAQAogCX0KIAlJTklUX0hMSVNUX0hFQUQoJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcyk7CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX25vX2ZvcndhcmQsIG5leHQpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCSAgJnByaXYtPmxlY19ub19mb3J3YXJkLCBuZXh0KSB7CiAJCWRlbF90aW1lcl9zeW5jKCZlbnRyeS0+dGltZXIpOwogCQlsZWNfYXJwX2NsZWFyX3ZjY3MoZW50cnkpOwogCQlobGlzdF9kZWwoJmVudHJ5LT5uZXh0KTsKQEAgLTE3MTQsMTUgKzE2NjksMTIgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CiAKLQlwcl9kZWJ1ZygiTEVDX0FSUDogbGVjX2FycF9maW5kIDolMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeFxuIiwKLQkJbWFjX2FkZHJbMF0gJiAweGZmLCBtYWNfYWRkclsxXSAmIDB4ZmYsIG1hY19hZGRyWzJdICYgMHhmZiwKLQkJbWFjX2FkZHJbM10gJiAweGZmLCBtYWNfYWRkcls0XSAmIDB4ZmYsIG1hY19hZGRyWzVdICYgMHhmZik7CisJcHJfZGVidWcoIiVwTVxuIiwgbWFjX2FkZHIpOwogCiAJaGVhZCA9ICZwcml2LT5sZWNfYXJwX3RhYmxlc1tIQVNIKG1hY19hZGRyW0VUSF9BTEVOIC0gMV0pXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgaGVhZCwgbmV4dCkgewotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtYWNfYWRkciwgZW50cnktPm1hY19hZGRyKSkgeworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtYWNfYWRkciwgZW50cnktPm1hY19hZGRyKSkKIAkJCXJldHVybiBlbnRyeTsKLQkJfQogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE3MzQsNyArMTY4Niw3IEBACiAKIAl0b19yZXR1cm4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX2FycF90YWJsZSksIEdGUF9BVE9NSUMpOwogCWlmICghdG9fcmV0dXJuKSB7Ci0JCXByaW50aygiTEVDOiBBcnAgZW50cnkga21hbGxvYyBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJMRUM6IEFycCBlbnRyeSBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAltZW1jcHkodG9fcmV0dXJuLT5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTE3NTUsNyArMTcwNyw3IEBACiAKIAllbnRyeSA9IChzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKWRhdGE7CiAKLQlwcl9kZWJ1ZygibGVjX2FycF9leHBpcmVfYXJwXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAlpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfQVJQX1BFTkRJTkcpIHsKIAkJaWYgKGVudHJ5LT5ub190cmllcyA8PSBlbnRyeS0+cHJpdi0+bWF4X3JldHJ5X2NvdW50KSB7CiAJCQlpZiAoZW50cnktPmlzX3JkZXNjKQpAQCAtMTc3OSwxMCArMTczMSwxMCBAQAogCiAJZGVsX3RpbWVyKCZ0b19yZW1vdmUtPnRpbWVyKTsKIAotCXByX2RlYnVnKCJMRUNfQVJQICVwICVwOiBsZWNfYXJwX2V4cGlyZV92Y2MgdnBpOiVkIHZjaTolZFxuIiwKLQkJdG9fcmVtb3ZlLCBwcml2LAotCQl0b19yZW1vdmUtPnZjYyA/IHRvX3JlbW92ZS0+cmVjdl92Y2MtPnZwaSA6IDAsCi0JCXRvX3JlbW92ZS0+dmNjID8gdG9fcmVtb3ZlLT5yZWN2X3ZjYy0+dmNpIDogMCk7CisJcHJfZGVidWcoIiVwICVwOiB2cGk6JWQgdmNpOiVkXG4iLAorCQkgdG9fcmVtb3ZlLCBwcml2LAorCQkgdG9fcmVtb3ZlLT52Y2MgPyB0b19yZW1vdmUtPnJlY3ZfdmNjLT52cGkgOiAwLAorCQkgdG9fcmVtb3ZlLT52Y2MgPyB0b19yZW1vdmUtPnJlY3ZfdmNjLT52Y2kgOiAwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAlobGlzdF9kZWwoJnRvX3JlbW92ZS0+bmV4dCk7CkBAIC0xNzkyLDYgKzE3NDQsNTAgQEAKIAlsZWNfYXJwX3B1dCh0b19yZW1vdmUpOwogfQogCitzdGF0aWMgYm9vbCBfX2xlY19hcnBfY2hlY2tfZXhwaXJlKHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIG5vdywKKwkJCQkgICBzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lX3RvX2NoZWNrOworCisJaWYgKChlbnRyeS0+ZmxhZ3MpICYgTEVDX1JFTU9URV9GTEFHICYmIHByaXYtPnRvcG9sb2d5X2NoYW5nZSkKKwkJdGltZV90b19jaGVjayA9IHByaXYtPmZvcndhcmRfZGVsYXlfdGltZTsKKwllbHNlCisJCXRpbWVfdG9fY2hlY2sgPSBwcml2LT5hZ2luZ190aW1lOworCisJcHJfZGVidWcoIkFib3V0IHRvIGV4cGlyZTogJWx4IC0gJWx4ID4gJWx4XG4iLAorCQkgbm93LCBlbnRyeS0+bGFzdF91c2VkLCB0aW1lX3RvX2NoZWNrKTsKKwlpZiAodGltZV9hZnRlcihub3csIGVudHJ5LT5sYXN0X3VzZWQgKyB0aW1lX3RvX2NoZWNrKSAmJgorCSAgICAhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykgJiYKKwkgICAgIShlbnRyeS0+bWFjX2FkZHJbMF0gJiAweDAxKSkgewkvKiBMQU5FMjogNy4xLjIwICovCisJCS8qIFJlbW92ZSBlbnRyeSAqLworCQlwcl9kZWJ1ZygiRW50cnkgdGltZWQgb3V0XG4iKTsKKwkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOworCQlsZWNfYXJwX3B1dChlbnRyeSk7CisJfSBlbHNlIHsKKwkJLyogU29tZXRoaW5nIGVsc2UgKi8KKwkJaWYgKChlbnRyeS0+c3RhdHVzID09IEVTSV9WQ19QRU5ESU5HIHx8CisJCSAgICAgZW50cnktPnN0YXR1cyA9PSBFU0lfQVJQX1BFTkRJTkcpICYmCisJCSAgICB0aW1lX2FmdGVyX2VxKG5vdywgZW50cnktPnRpbWVzdGFtcCArCisJCQkJICAgICAgIHByaXYtPm1heF91bmtub3duX2ZyYW1lX3RpbWUpKSB7CisJCQllbnRyeS0+dGltZXN0YW1wID0gamlmZmllczsKKwkJCWVudHJ5LT5wYWNrZXRzX2Zsb29kZWQgPSAwOworCQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX1ZDX1BFTkRJTkcpCisJCQkJc2VuZF90b19sZWNkKHByaXYsIGxfc3ZjX3NldHVwLAorCQkJCQkgICAgIGVudHJ5LT5tYWNfYWRkciwKKwkJCQkJICAgICBlbnRyeS0+YXRtX2FkZHIsCisJCQkJCSAgICAgTlVMTCk7CisJCX0KKwkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0ZMVVNIX1BFTkRJTkcgJiYKKwkJICAgIHRpbWVfYWZ0ZXJfZXEobm93LCBlbnRyeS0+dGltZXN0YW1wICsKKwkJCQkgICAgICAgcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkpKSB7CisJCQlsZWNfYXJwX2hvbGQoZW50cnkpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CiAvKgogICogRXhwaXJlIGVudHJpZXMuCiAgKiAxLiBSZS1zZXQgdGltZXIKQEAgLTE4MTYsNjIgKzE4MTIsMjggQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgbm93OwotCXVuc2lnbmVkIGxvbmcgdGltZV90b19jaGVjazsKIAlpbnQgaTsKIAotCXByX2RlYnVnKCJsZWNfYXJwX2NoZWNrX2V4cGlyZSAlcFxuIiwgcHJpdik7CisJcHJfZGVidWcoIiVwXG4iLCBwcml2KTsKIAlub3cgPSBqaWZmaWVzOwogcmVzdGFydDoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewotCQkJaWYgKChlbnRyeS0+ZmxhZ3MpICYgTEVDX1JFTU9URV9GTEFHICYmCi0JCQkgICAgcHJpdi0+dG9wb2xvZ3lfY2hhbmdlKQotCQkJCXRpbWVfdG9fY2hlY2sgPSBwcml2LT5mb3J3YXJkX2RlbGF5X3RpbWU7Ci0JCQllbHNlCi0JCQkJdGltZV90b19jaGVjayA9IHByaXYtPmFnaW5nX3RpbWU7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsCisJCQkJCSAgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCQlpZiAoX19sZWNfYXJwX2NoZWNrX2V4cGlyZShlbnRyeSwgbm93LCBwcml2KSkgeworCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGVudHJ5LT52Y2M7CiAKLQkJCXByX2RlYnVnKCJBYm91dCB0byBleHBpcmU6ICVseCAtICVseCA+ICVseFxuIiwKLQkJCQlub3csIGVudHJ5LT5sYXN0X3VzZWQsIHRpbWVfdG9fY2hlY2spOwotCQkJaWYgKHRpbWVfYWZ0ZXIobm93LCBlbnRyeS0+bGFzdF91c2VkICsgdGltZV90b19jaGVjaykKLQkJCSAgICAmJiAhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykKLQkJCSAgICAmJiAhKGVudHJ5LT5tYWNfYWRkclswXSAmIDB4MDEpKSB7CS8qIExBTkUyOiA3LjEuMjAgKi8KLQkJCQkvKiBSZW1vdmUgZW50cnkgKi8KLQkJCQlwcl9kZWJ1ZygiTEVDOkVudHJ5IHRpbWVkIG91dFxuIik7Ci0JCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkKKwkJCQkJbGVjX3NlbmQodmNjLCBza2IpOworCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQkJbGVjX2FycF9wdXQoZW50cnkpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBTb21ldGhpbmcgZWxzZSAqLwotCQkJCWlmICgoZW50cnktPnN0YXR1cyA9PSBFU0lfVkNfUEVORElORyB8fAotCQkJCSAgICAgZW50cnktPnN0YXR1cyA9PSBFU0lfQVJQX1BFTkRJTkcpCi0JCQkJICAgICYmIHRpbWVfYWZ0ZXJfZXEobm93LAotCQkJCQkJICAgICBlbnRyeS0+dGltZXN0YW1wICsKLQkJCQkJCSAgICAgcHJpdi0+Ci0JCQkJCQkgICAgIG1heF91bmtub3duX2ZyYW1lX3RpbWUpKSB7Ci0JCQkJCWVudHJ5LT50aW1lc3RhbXAgPSBqaWZmaWVzOwotCQkJCQllbnRyeS0+cGFja2V0c19mbG9vZGVkID0gMDsKLQkJCQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX1ZDX1BFTkRJTkcpCi0JCQkJCQlzZW5kX3RvX2xlY2QocHJpdiwgbF9zdmNfc2V0dXAsCi0JCQkJCQkJICAgICBlbnRyeS0+bWFjX2FkZHIsCi0JCQkJCQkJICAgICBlbnRyeS0+YXRtX2FkZHIsCi0JCQkJCQkJICAgICBOVUxMKTsKLQkJCQl9Ci0JCQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0ZMVVNIX1BFTkRJTkcKLQkJCQkgICAgJiYKLQkJCQkgICAgdGltZV9hZnRlcl9lcShub3csIGVudHJ5LT50aW1lc3RhbXAgKwotCQkJCQkJICBwcml2LT5wYXRoX3N3aXRjaGluZ19kZWxheSkpIHsKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCQkJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGVudHJ5LT52Y2M7CiAKLQkJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0JCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKLQkJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7Ci0JCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7Ci0JCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKLQkJCQkJZ290byByZXN0YXJ0OwotCQkJCX0KKwkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl9CiAJCX0KIAl9CkBAIC0xODg1LDcgKzE4NDcsOCBAQAogICoKICAqLwogc3RhdGljIHN0cnVjdCBhdG1fdmNjICpsZWNfYXJwX3Jlc29sdmUoc3RydWN0IGxlY19wcml2ICpwcml2LAotCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfdG9fZmluZCwgaW50IGlzX3JkZXNjLAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfdG9fZmluZCwKKwkJCQkgICAgICAgaW50IGlzX3JkZXNjLAogCQkJCSAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKnJldF9lbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTkyMSw5ICsxODg0LDggQEAKIAkJICogSWYgdGhlIExFX0FSUCBjYWNoZSBlbnRyeSBpcyBzdGlsbCBwZW5kaW5nLCByZXNldCBjb3VudCB0byAwCiAJCSAqIHNvIGFub3RoZXIgTEVfQVJQIHJlcXVlc3QgY2FuIGJlIG1hZGUgZm9yIHRoaXMgZnJhbWUuCiAJCSAqLwotCQlpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfQVJQX1BFTkRJTkcpIHsKKwkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKQogCQkJZW50cnktPm5vX3RyaWVzID0gMDsKLQkJfQogCQkvKgogCQkgKiBEYXRhIGRpcmVjdCBWQyBub3QgeWV0IHNldCB1cCwgY2hlY2sgdG8gc2VlIGlmIHRoZSB1bmtub3duCiAJCSAqIGZyYW1lIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQuIElmIHRoZSBsaW1pdCBoYXMKQEAgLTE5MzQsNyArMTg5Niw3IEBACiAJCSAgICBlbnRyeS0+cGFja2V0c19mbG9vZGVkIDwKIAkJICAgIHByaXYtPm1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudCkgewogCQkJZW50cnktPnBhY2tldHNfZmxvb2RlZCsrOwotCQkJcHJfZGVidWcoIkxFQ19BUlA6IEZsb29kaW5nLi5cbiIpOworCQkJcHJfZGVidWcoIkZsb29kaW5nLi5cbiIpOwogCQkJZm91bmQgPSBwcml2LT5tY2FzdF92Y2M7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTk0NSwxMyArMTkwNywxMyBAQAogCQkgKi8KIAkJbGVjX2FycF9ob2xkKGVudHJ5KTsKIAkJKnJldF9lbnRyeSA9IGVudHJ5OwotCQlwcl9kZWJ1ZygibGVjOiBlbnRyeS0+c3RhdHVzICVkIGVudHJ5LT52Y2MgJXBcbiIsIGVudHJ5LT5zdGF0dXMsCi0JCQllbnRyeS0+dmNjKTsKKwkJcHJfZGVidWcoImVudHJ5LT5zdGF0dXMgJWQgZW50cnktPnZjYyAlcFxuIiwgZW50cnktPnN0YXR1cywKKwkJCSBlbnRyeS0+dmNjKTsKIAkJZm91bmQgPSBOVUxMOwogCX0gZWxzZSB7CiAJCS8qIE5vIG1hdGNoaW5nIGVudHJ5IHdhcyBmb3VuZCAqLwogCQllbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgbWFjX3RvX2ZpbmQpOwotCQlwcl9kZWJ1ZygiTEVDX0FSUDogTWFraW5nIGVudHJ5XG4iKTsKKwkJcHJfZGVidWcoIk1ha2luZyBlbnRyeVxuIik7CiAJCWlmICghZW50cnkpIHsKIAkJCWZvdW5kID0gcHJpdi0+bWNhc3RfdmNjOwogCQkJZ290byBvdXQ7CkBAIC0xOTg4LDEzICsxOTUwLDE0IEBACiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCWludCBpOwogCi0JcHJfZGVidWcoImxlY19hZGRyX2RlbGV0ZVxuIik7CisJcHJfZGVidWcoIlxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKLQkJCWlmICghbWVtY21wKGF0bV9hZGRyLCBlbnRyeS0+YXRtX2FkZHIsIEFUTV9FU0FfTEVOKQotCQkJICAgICYmIChwZXJtYW5lbnQgfHwKLQkJCQkhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykpKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsCisJCQkJCSAgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCQlpZiAoIW1lbWNtcChhdG1fYWRkciwgZW50cnktPmF0bV9hZGRyLCBBVE1fRVNBX0xFTikgJiYKKwkJCSAgICAocGVybWFuZW50IHx8CisJCQkgICAgICEoZW50cnktPmZsYWdzICYgTEVDX1BFUk1BTkVOVF9GTEFHKSkpIHsKIAkJCQlsZWNfYXJwX3JlbW92ZShwcml2LCBlbnRyeSk7CiAJCQkJbGVjX2FycF9wdXQoZW50cnkpOwogCQkJfQpAQCAtMjAxOSwxMCArMTk4Miw4IEBACiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqdG1wOwogCWludCBpOwogCi0JcHJfZGVidWcoImxlYzolcyIsICh0YXJnZXRsZXNzX2xlX2FycCkgPyAidGFyZ2V0bGVzcyAiIDogIiAiKTsKLQlwcl9kZWJ1ZygibGVjX2FycF91cGRhdGUgbWFjOiUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKLQkJbWFjX2FkZHJbMF0sIG1hY19hZGRyWzFdLCBtYWNfYWRkclsyXSwgbWFjX2FkZHJbM10sCi0JCW1hY19hZGRyWzRdLCBtYWNfYWRkcls1XSk7CisJcHJfZGVidWcoIiVzbWFjOiVwTVxuIiwKKwkJICh0YXJnZXRsZXNzX2xlX2FycCkgPyAidGFyZ2V0bGVzcyAiIDogIiIsIG1hY19hZGRyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAllbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfYWRkcik7CkBAIC0yMDMyLDcgKzE5OTMsOCBAQAogCQkJCSAqIHdlIGhhdmUgbm8gZW50cnkgaW4gdGhlIGNhY2hlLiA3LjEuMzAKIAkJCQkgKi8KIAlpZiAoIWhsaXN0X2VtcHR5KCZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMpKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkJICAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CiAJCQlpZiAobWVtY21wKGVudHJ5LT5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKSA9PSAwKSB7CiAJCQkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CiAJCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwpAQCAtMjA3Niw3ICsyMDM4LDggQEAKIAltZW1jcHkoZW50cnktPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pOwogCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBub2RlLAorCQkJCSAgICAgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CiAJCQlpZiAoZW50cnkgIT0gdG1wICYmCiAJCQkgICAgIW1lbWNtcCh0bXAtPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pKSB7CiAJCQkJLyogVmNjIHRvIHRoaXMgaG9zdCBleGlzdHMgKi8KQEAgLTIxMjEsMTQgKzIwODQsMTMgQEAKIAlpbnQgaSwgZm91bmRfZW50cnkgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOworCS8qIFZjYyBmb3IgTXVsdGljYXN0IEZvcndhcmQuIE5vIHRpbWVyLCBMQU5FdjIgNy4xLjIwIGFuZCAyLjMuNS4zICovCiAJaWYgKGlvY19kYXRhLT5yZWNlaXZlID09IDIpIHsKLQkJLyogVmNjIGZvciBNdWx0aWNhc3QgRm9yd2FyZC4gTm8gdGltZXIsIExBTkV2MiA3LjEuMjAgYW5kIDIuMy41LjMgKi8KLQogCQlwcl9kZWJ1ZygiTEVDX0FSUDogQXR0YWNoaW5nIG1jYXN0IGZvcndhcmRcbiIpOwogI2lmIDAKIAkJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgYnVzX21hYyk7CiAJCWlmICghZW50cnkpIHsKLQkJCXByaW50aygiTEVDX0FSUDogTXVsdGljYXN0IGVudHJ5IG5vdCBmb3VuZCFcbiIpOworCQkJcHJfaW5mbygiTEVDX0FSUDogTXVsdGljYXN0IGVudHJ5IG5vdCBmb3VuZCFcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7CkBAIC0yMTQ5LDE5ICsyMTExLDE3IEBACiAJCSAqIFZjYyB3aGljaCB3ZSBkb24ndCB3YW50IHRvIG1ha2UgZGVmYXVsdCB2Y2MsCiAJCSAqIGF0dGFjaCBpdCBhbnl3YXkuCiAJCSAqLwotCQlwcl9kZWJ1ZwotCQkgICAgKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgbm90IGRlZmF1bHQ6ICIKLQkJICAgICAiJTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxXSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMl0sIGlvY19kYXRhLT5hdG1fYWRkclszXSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNF0sIGlvY19kYXRhLT5hdG1fYWRkcls1XSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNl0sIGlvY19kYXRhLT5hdG1fYWRkcls3XSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbOF0sIGlvY19kYXRhLT5hdG1fYWRkcls5XSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAotCQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxMl0sIGlvY19kYXRhLT5hdG1fYWRkclsxM10sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE1XSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAotCQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxOF0sIGlvY19kYXRhLT5hdG1fYWRkclsxOV0pOworCQlwcl9kZWJ1ZygiTEVDX0FSUDpBdHRhY2hpbmcgZGF0YSBkaXJlY3QsIG5vdCBkZWZhdWx0OiAlMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4XG4iLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclswXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzFdLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclsyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzNdLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkcls0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzVdLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkcls2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzddLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkcls4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzldLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclsxMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxMV0sCisJCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzEyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzEzXSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTVdLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclsxNl0sIGlvY19kYXRhLT5hdG1fYWRkclsxN10sCisJCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzE4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE5XSk7CiAJCWVudHJ5ID0gbWFrZV9lbnRyeShwcml2LCBidXNfbWFjKTsKIAkJaWYgKGVudHJ5ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKQEAgLTIxNzcsMjkgKzIxMzcsMjggQEAKIAkJZHVtcF9hcnBfdGFibGUocHJpdik7CiAJCWdvdG8gb3V0OwogCX0KLQlwcl9kZWJ1ZwotCSAgICAoIkxFQ19BUlA6QXR0YWNoaW5nIGRhdGEgZGlyZWN0LCBkZWZhdWx0OiAiCi0JICAgICAiJTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclswXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzFdLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzJdLCBpb2NfZGF0YS0+YXRtX2FkZHJbM10sCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNF0sIGlvY19kYXRhLT5hdG1fYWRkcls1XSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkcls2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzddLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzhdLCBpb2NfZGF0YS0+YXRtX2FkZHJbOV0sCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzEzXSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxNF0sIGlvY19kYXRhLT5hdG1fYWRkclsxNV0sCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE5XSk7CisJcHJfZGVidWcoIkxFQ19BUlA6QXR0YWNoaW5nIGRhdGEgZGlyZWN0LCBkZWZhdWx0OiAlMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4XG4iLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMV0sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMl0sIGlvY19kYXRhLT5hdG1fYWRkclszXSwKKwkJIGlvY19kYXRhLT5hdG1fYWRkcls0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzVdLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbN10sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbOF0sIGlvY19kYXRhLT5hdG1fYWRkcls5XSwKKwkJIGlvY19kYXRhLT5hdG1fYWRkclsxMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxMV0sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTJdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTNdLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzE0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE1XSwKKwkJIGlvY19kYXRhLT5hdG1fYWRkclsxNl0sIGlvY19kYXRhLT5hdG1fYWRkclsxN10sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMThdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTldKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwKKwkJCQkgICAgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJaWYgKG1lbWNtcAogCQkJICAgIChpb2NfZGF0YS0+YXRtX2FkZHIsIGVudHJ5LT5hdG1fYWRkciwKIAkJCSAgICAgQVRNX0VTQV9MRU4pID09IDApIHsKIAkJCQlwcl9kZWJ1ZygiTEVDX0FSUDogQXR0YWNoaW5nIGRhdGEgZGlyZWN0XG4iKTsKIAkJCQlwcl9kZWJ1ZygiQ3VycmVudGx5IC0+IFZjYzogJWQsIFJ2Y2M6JWRcbiIsCi0JCQkJCWVudHJ5LT52Y2MgPyBlbnRyeS0+dmNjLT52Y2kgOiAwLAotCQkJCQllbnRyeS0+cmVjdl92Y2MgPyBlbnRyeS0+cmVjdl92Y2MtPgotCQkJCQl2Y2kgOiAwKTsKKwkJCQkJIGVudHJ5LT52Y2MgPyBlbnRyeS0+dmNjLT52Y2kgOiAwLAorCQkJCQkgZW50cnktPnJlY3ZfdmNjID8gZW50cnktPnJlY3ZfdmNjLT4KKwkJCQkJIHZjaSA6IDApOwogCQkJCWZvdW5kX2VudHJ5ID0gMTsKIAkJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CiAJCQkJZW50cnktPnZjYyA9IHZjYzsKQEAgLTIyNzEsMTkgKzIyMzAsMjEgQEAKIAlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CiAJaW50IGk7CiAKLQlwcl9kZWJ1ZygiTEVDOmxlY19mbHVzaF9jb21wbGV0ZSAlbHhcbiIsIHRyYW5faWQpOworCXByX2RlYnVnKCIlbHhcbiIsIHRyYW5faWQpOwogcmVzdGFydDoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKLQkJCWlmIChlbnRyeS0+Zmx1c2hfdHJhbl9pZCA9PSB0cmFuX2lkCi0JCQkgICAgJiYgZW50cnktPnN0YXR1cyA9PSBFU0lfRkxVU0hfUEVORElORykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwKKwkJCQkgICAgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJaWYgKGVudHJ5LT5mbHVzaF90cmFuX2lkID09IHRyYW5faWQgJiYKKwkJCSAgICBlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HKSB7CiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCQlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gZW50cnktPnZjYzsKIAogCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0JCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkKIAkJCQkJbGVjX3NlbmQodmNjLCBza2IpOwogCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CkBAIC0yMzA4LDExICsyMjY5LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKQotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLAorCQkJCSAgICAgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CiAJCQlpZiAoIW1lbWNtcChhdG1fYWRkciwgZW50cnktPmF0bV9hZGRyLCBBVE1fRVNBX0xFTikpIHsKIAkJCQllbnRyeS0+Zmx1c2hfdHJhbl9pZCA9IHRyYW5faWQ7CiAJCQkJcHJfZGVidWcoIlNldCBmbHVzaCB0cmFuc2FjdGlvbiBpZCB0byAlbHggZm9yICVwXG4iLAotCQkJCQl0cmFuX2lkLCBlbnRyeSk7CisJCQkJCSB0cmFuX2lkLCBlbnRyeSk7CiAJCQl9CiAJCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKQEAgLTIzMjgsNyArMjI5MCw4IEBACiAJc3RydWN0IGxlY192Y2NfcHJpdiAqdnByaXY7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoISh2cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWNfdmNjX3ByaXYpLCBHRlBfS0VSTkVMKSkpCisJdnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX3ZjY19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAJdnByaXYtPnhvZmYgPSAwOwogCXZwcml2LT5vbGRfcG9wID0gdmNjLT5wb3A7CkBAIC0yMzY4LDE4ICsyMzMxLDE5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCQkgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJaWYgKHZjYyA9PSBlbnRyeS0+dmNjKSB7CiAJCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOwogCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKLQkJCQlpZiAocHJpdi0+bWNhc3RfdmNjID09IHZjYykgeworCQkJCWlmIChwcml2LT5tY2FzdF92Y2MgPT0gdmNjKQogCQkJCQlwcml2LT5tY2FzdF92Y2MgPSBOVUxMOwotCQkJCX0KIAkJCX0KIAkJfQogCX0KIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCSAgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgewogCQlpZiAoZW50cnktPnZjYyA9PSB2Y2MpIHsKIAkJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CiAJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CkBAIC0yMzg4LDcgKzIzNTIsOCBAQAogCQl9CiAJfQogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19ub19mb3J3YXJkLCBuZXh0KSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkgICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgewogCQlpZiAoZW50cnktPnJlY3ZfdmNjID09IHZjYykgewogCQkJbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKIAkJCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKQEAgLTI0MjksMTQgKzIzOTQsMTYgQEAKIAkJc3JjID0gaGRyLT5oX3NvdXJjZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkgICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKIAkJaWYgKHZjYyA9PSBlbnRyeS0+dmNjKSB7CiAJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CiAJCQltZW1jcHkoZW50cnktPm1hY19hZGRyLCBzcmMsIEVUSF9BTEVOKTsKIAkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCS8qIFdlIG1pZ2h0IGhhdmUgZ290IGFuIGVudHJ5ICovCi0JCQlpZiAoKHRtcCA9IGxlY19hcnBfZmluZChwcml2LCBzcmMpKSkgeworCQkJdG1wID0gbGVjX2FycF9maW5kKHByaXYsIHNyYyk7CisJCQlpZiAodG1wKSB7CiAJCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgdG1wKTsKIAkJCQlsZWNfYXJwX3B1dCh0bXApOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuYyBiL25ldC9hdG0vbXBjLmMKaW5kZXggMzhhNmNiMC4uYTY1MjFjOCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuYworKysgYi9uZXQvYXRtL21wYy5jCkBAIC0xLDMgKzEsNSBAQAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0xMyw4ICsxNSw4IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4gICAvKiBmb3IgaXBfZmFzdF9jc3VtKCkgKi8KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMzYsMzEgKzM4LDQ3IEBACiAgKi8KIAogI2lmIDAKLSNkZWZpbmUgZHByaW50ayBwcmludGsgICAvKiBkZWJ1ZyAqLworI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjYXJncykKKyNkZWZpbmUgZHByaW50a19jb250KGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fQ09OVCBmb3JtYXQsICMjYXJncykKICNlbHNlCi0jZGVmaW5lIGRwcmludGsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsgaWYgKDApCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyNhcmdzKTtcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHByaW50a19jb250KGZvcm1hdCwgYXJncy4uLikJCQlcCisJZG8geyBpZiAoMCkgcHJpbnRrKEtFUk5fQ09OVCBmb3JtYXQsICMjYXJncyk7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIDAKLSNkZWZpbmUgZGRwcmludGsgcHJpbnRrICAvKiBtb3JlIGRlYnVnICovCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjYXJncykKKyNkZWZpbmUgZGRwcmludGtfY29udChmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0NPTlQgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBkZHByaW50ayhmb3JtYXQsYXJncy4uLikKKyNkZWZpbmUgZGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsgaWYgKDApCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyNhcmdzKTtcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGRwcmludGtfY29udChmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCWRvIHsgaWYgKDApIHByaW50ayhLRVJOX0NPTlQgZm9ybWF0LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLQotCiAjZGVmaW5lIE1QT0FfVEFHX0xFTiA0CiAKIC8qIG1wY19kYWVtb24gLT4ga2VybmVsICovCi1zdGF0aWMgdm9pZCBNUE9BX3RyaWdnZXJfcmN2ZCAoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CitzdGF0aWMgdm9pZCBNUE9BX3RyaWdnZXJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKIHN0YXRpYyB2b2lkIE1QT0FfcmVzX3JlcGx5X3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CiBzdGF0aWMgdm9pZCBpbmdyZXNzX3B1cmdlX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CiBzdGF0aWMgdm9pZCBlZ3Jlc3NfcHVyZ2VfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKIHN0YXRpYyB2b2lkIG1wc19kZWF0aChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKLXN0YXRpYyB2b2lkIGNsZWFuX3VwKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMsIGludCBhY3Rpb24pOwotc3RhdGljIHZvaWQgTVBPQV9jYWNoZV9pbXBvc19yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOwotc3RhdGljIHZvaWQgc2V0X21wY19jdHJsX2FkZHJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptZXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7Ci1zdGF0aWMgdm9pZCBzZXRfbXBzX21hY19hZGRyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbWVzZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOworc3RhdGljIHZvaWQgY2xlYW5fdXAoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYywKKwkJICAgICBpbnQgYWN0aW9uKTsKK3N0YXRpYyB2b2lkIE1QT0FfY2FjaGVfaW1wb3NfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csCisJCQkJICBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CitzdGF0aWMgdm9pZCBzZXRfbXBjX2N0cmxfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1lc2csCisJCQkJICAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOworc3RhdGljIHZvaWQgc2V0X21wc19tYWNfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1lc2csCisJCQkJICBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CiAKIHN0YXRpYyBjb25zdCB1aW50OF90ICpjb3B5X21hY3Moc3RydWN0IG1wb2FfY2xpZW50ICptcGMsCiAJCQkJY29uc3QgdWludDhfdCAqcm91dGVyX21hYywKQEAgLTc0LDEwICs5MiwxMSBAQAogCiBzdGF0aWMgdm9pZCBtcGNfcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBuZXRkZXZfdHhfdCBtcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBtcG9hX2V2ZW50X2xpc3RlbmVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbXBvYV9ub3RpZmllciwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGV2KTsKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbXBvYV9ldmVudF9saXN0ZW5lcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1wb2Ffbm90aWZpZXIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGV2KTsKIHN0YXRpYyB2b2lkIG1wY190aW1lcl9yZWZyZXNoKHZvaWQpOwotc3RhdGljIHZvaWQgbXBjX2NhY2hlX2NoZWNrKCB1bnNpZ25lZCBsb25nIGNoZWNraW5nX3RpbWUgICk7CitzdGF0aWMgdm9pZCBtcGNfY2FjaGVfY2hlY2sodW5zaWduZWQgbG9uZyBjaGVja2luZ190aW1lKTsKIAogc3RhdGljIHN0cnVjdCBsbGNfc25hcF9oZHIgbGxjX3NuYXBfbXBvYV9jdHJsID0gewogCTB4YWEsIDB4YWEsIDB4MDMsCkBAIC0xNjcsNyArMTg2LDcgQEAKIAogCWVudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0bV9tcG9hX3FvcyksIEdGUF9LRVJORUwpOwogCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogYXRtX21wb2FfYWRkX3Fvczogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2luZm8oIm1wb2E6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gZW50cnk7CiAJfQogCkBAIC0xODUsMTAgKzIwNCw5IEBACiAJc3RydWN0IGF0bV9tcG9hX3FvcyAqcW9zOwogCiAJcW9zID0gcW9zX2hlYWQ7Ci0Jd2hpbGUoIHFvcyAhPSBOVUxMICl7Ci0JCWlmKHFvcy0+aXBhZGRyID09IGRzdF9pcCkgeworCXdoaWxlIChxb3MpIHsKKwkJaWYgKHFvcy0+aXBhZGRyID09IGRzdF9pcCkKIAkJCWJyZWFrOwotCQl9CiAJCXFvcyA9IHFvcy0+bmV4dDsKIAl9CiAKQEAgLTIwMCwxMCArMjE4LDEwIEBACiAgKi8KIGludCBhdG1fbXBvYV9kZWxldGVfcW9zKHN0cnVjdCBhdG1fbXBvYV9xb3MgKmVudHJ5KQogewotCiAJc3RydWN0IGF0bV9tcG9hX3FvcyAqY3VycjsKIAotCWlmIChlbnRyeSA9PSBOVUxMKSByZXR1cm4gMDsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAJaWYgKGVudHJ5ID09IHFvc19oZWFkKSB7CiAJCXFvc19oZWFkID0gcW9zX2hlYWQtPm5leHQ7CiAJCWtmcmVlKGVudHJ5KTsKQEAgLTIzNCw5ICsyNTIsMTcgQEAKIAogCXdoaWxlIChxb3MgIT0gTlVMTCkgewogCQlzZXFfcHJpbnRmKG0sICIlcEk0XG4gICAgICUtN2QgJS03ZCAlLTdkICUtN2QgJS03ZFxuICAgICAlLTdkICUtN2QgJS03ZCAlLTdkICUtN2RcbiIsCi0JCQkJJnFvcy0+aXBhZGRyLAotCQkJCXFvcy0+cW9zLnR4dHAubWF4X3BjciwgcW9zLT5xb3MudHh0cC5wY3IsIHFvcy0+cW9zLnR4dHAubWluX3BjciwgcW9zLT5xb3MudHh0cC5tYXhfY2R2LCBxb3MtPnFvcy50eHRwLm1heF9zZHUsCi0JCQkJcW9zLT5xb3Mucnh0cC5tYXhfcGNyLCBxb3MtPnFvcy5yeHRwLnBjciwgcW9zLT5xb3Mucnh0cC5taW5fcGNyLCBxb3MtPnFvcy5yeHRwLm1heF9jZHYsIHFvcy0+cW9zLnJ4dHAubWF4X3NkdSk7CisJCQkgICAmcW9zLT5pcGFkZHIsCisJCQkgICBxb3MtPnFvcy50eHRwLm1heF9wY3IsCisJCQkgICBxb3MtPnFvcy50eHRwLnBjciwKKwkJCSAgIHFvcy0+cW9zLnR4dHAubWluX3BjciwKKwkJCSAgIHFvcy0+cW9zLnR4dHAubWF4X2NkdiwKKwkJCSAgIHFvcy0+cW9zLnR4dHAubWF4X3NkdSwKKwkJCSAgIHFvcy0+cW9zLnJ4dHAubWF4X3BjciwKKwkJCSAgIHFvcy0+cW9zLnJ4dHAucGNyLAorCQkJICAgcW9zLT5xb3Mucnh0cC5taW5fcGNyLAorCQkJICAgcW9zLT5xb3Mucnh0cC5tYXhfY2R2LAorCQkJICAgcW9zLT5xb3Mucnh0cC5tYXhfc2R1KTsKIAkJcW9zID0gcW9zLT5uZXh0OwogCX0KIH0KQEAgLTI1Niw3ICsyODIsNyBAQAogewogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCi0JbXBjID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBtcG9hX2NsaWVudCksIEdGUF9LRVJORUwpOworCW1wYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcG9hX2NsaWVudCksIEdGUF9LRVJORUwpOwogCWlmIChtcGMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJcndsb2NrX2luaXQoJm1wYy0+aW5ncmVzc19sb2NrKTsKQEAgLTI2Niw3ICsyOTIsNyBAQAogCiAJbXBjLT5wYXJhbWV0ZXJzLm1wY19wMSA9IE1QQ19QMTsKIAltcGMtPnBhcmFtZXRlcnMubXBjX3AyID0gTVBDX1AyOwotCW1lbXNldChtcGMtPnBhcmFtZXRlcnMubXBjX3AzLDAsc2l6ZW9mKG1wYy0+cGFyYW1ldGVycy5tcGNfcDMpKTsKKwltZW1zZXQobXBjLT5wYXJhbWV0ZXJzLm1wY19wMywgMCwgc2l6ZW9mKG1wYy0+cGFyYW1ldGVycy5tcGNfcDMpKTsKIAltcGMtPnBhcmFtZXRlcnMubXBjX3A0ID0gTVBDX1A0OwogCW1wYy0+cGFyYW1ldGVycy5tcGNfcDUgPSBNUENfUDU7CiAJbXBjLT5wYXJhbWV0ZXJzLm1wY19wNiA9IE1QQ19QNjsKQEAgLTI4Niw5ICszMTIsOSBAQAogc3RhdGljIHZvaWQgc3RhcnRfbXBjKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCi0JZHByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGM6XG4iLCBtcGMtPmRldi0+bmFtZSk7CisJZHByaW50aygiKCVzKVxuIiwgbXBjLT5kZXYtPm5hbWUpOwogCWlmICghZGV2LT5uZXRkZXZfb3BzKQotCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjICBub3Qgc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgbm90IHN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOwogCWVsc2UgewogCQltcGMtPm9sZF9vcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAJCW1wYy0+bmV3X29wcyA9ICptcGMtPm9sZF9vcHM7CkBAIC0zMDAsMTQgKzMyNiwxNCBAQAogc3RhdGljIHZvaWQgc3RvcF9tcGMoc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wYy0+ZGV2OwotCWRwcmludGsoIm1wb2E6ICglcykgc3RvcF9tcGM6IiwgbXBjLT5kZXYtPm5hbWUpOworCWRwcmludGsoIiglcykiLCBtcGMtPmRldi0+bmFtZSk7CiAKIAkvKiBMZXRzIG5vdCBudWxsaWZ5IGxlYyBkZXZpY2UncyBkZXYtPmhhcmRfc3RhcnRfeG1pdCAqLwogCWlmIChkZXYtPm5ldGRldl9vcHMgIT0gJm1wYy0+bmV3X29wcykgewotCQlkcHJpbnRrKCIgbXBjIGFscmVhZHkgc3RvcHBlZCwgbm90IGZhdGFsXG4iKTsKKwkJZHByaW50a19jb250KCIgbXBjIGFscmVhZHkgc3RvcHBlZCwgbm90IGZhdGFsXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlkcHJpbnRrKCJcbiIpOworCWRwcmludGtfY29udCgiXG4iKTsKIAogCWRldi0+bmV0ZGV2X29wcyA9IG1wYy0+b2xkX29wczsKIAltcGMtPm9sZF9vcHMgPSBOVUxMOwpAQCAtMzE5LDI1ICszNDUsMTggQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKm1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKGNoYXIgdHlwZSkKIHsKLQlzd2l0Y2godHlwZSkgeworCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTk9OX01QT0E6CiAJCXJldHVybiAibm9uLU1QT0EgZGV2aWNlIjsKLQkJYnJlYWs7CiAJY2FzZSBNUFM6CiAJCXJldHVybiAiTVBTIjsKLQkJYnJlYWs7CiAJY2FzZSBNUEM6CiAJCXJldHVybiAiTVBDIjsKLQkJYnJlYWs7CiAJY2FzZSBNUFNfQU5EX01QQzoKIAkJcmV0dXJuICJib3RoIE1QUyBhbmQgTVBDIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJ1bnNwZWNpZmllZCAobm9uLU1QT0EpIGRldmljZSI7Ci0JCWJyZWFrOwogCX0KIAotCXJldHVybiAiIjsgLyogbm90IHJlYWNoZWQgKi8KKwlyZXR1cm4gInVuc3BlY2lmaWVkIChub24tTVBPQSkgZGV2aWNlIjsKIH0KIAogLyoKQEAgLTM2MiwyNiArMzgxLDI4IEBACiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGM7CiAKIAltcG9hX2RldmljZV90eXBlID0gbnVtYmVyX29mX21wc19tYWNzID0gMDsgLyogc2lsZW5jZSBnY2MgKi8KLQlkcHJpbnRrKCJtcG9hOiAoJXMpIGxhbmUyX2Fzc29jX2luZDogcmVjZWl2ZWQgVExWKHMpLCAiLCBkZXYtPm5hbWUpOworCWRwcmludGsoIiglcykgcmVjZWl2ZWQgVExWKHMpLCAiLCBkZXYtPm5hbWUpOwogCWRwcmludGsoInRvdGFsIGxlbmd0aCBvZiBhbGwgVExWcyAlZFxuIiwgc2l6ZW9mdGx2cyk7CiAJbXBjID0gZmluZF9tcGNfYnlfbGVjKGRldik7IC8qIFNhbXBvLUZpeDogbW92ZWQgaGVyZSBmcm9tIGJlbG93ICovCiAJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBsYW5lMl9hc3NvY19pbmQ6IG5vIG1wY1xuIiwgZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiKCVzKSBubyBtcGNcbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAJZW5kX29mX3RsdnMgPSB0bHZzICsgc2l6ZW9mdGx2czsKIAl3aGlsZSAoZW5kX29mX3RsdnMgLSB0bHZzID49IDUpIHsKLQkJdHlwZSA9ICh0bHZzWzBdIDw8IDI0KSB8ICh0bHZzWzFdIDw8IDE2KSB8ICh0bHZzWzJdIDw8IDgpIHwgdGx2c1szXTsKKwkJdHlwZSA9ICgodGx2c1swXSA8PCAyNCkgfCAodGx2c1sxXSA8PCAxNikgfAorCQkJKHRsdnNbMl0gPDwgOCkgfCB0bHZzWzNdKTsKIAkJbGVuZ3RoID0gdGx2c1s0XTsKIAkJdGx2cyArPSA1OwogCQlkcHJpbnRrKCIgICAgdHlwZSAweCV4IGxlbmd0aCAlMDJ4XG4iLCB0eXBlLCBsZW5ndGgpOwogCQlpZiAodGx2cyArIGxlbmd0aCA+IGVuZF9vZl90bHZzKSB7Ci0JCQlwcmludGsoIlRMViB2YWx1ZSBleHRlbmRzIHBhc3QgaXRzIGJ1ZmZlciwgYWJvcnRpbmcgcGFyc2VcbiIpOworCQkJcHJfaW5mbygiVExWIHZhbHVlIGV4dGVuZHMgcGFzdCBpdHMgYnVmZmVyLCBhYm9ydGluZyBwYXJzZVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAodHlwZSA9PSAwKSB7Ci0JCQlwcmludGsoIm1wb2E6ICglcykgbGFuZTJfYXNzb2NfaW5kOiBUTFYgdHlwZSB3YXMgMCwgcmV0dXJuaW5nXG4iLCBkZXYtPm5hbWUpOworCQkJcHJfaW5mbygibXBvYTogKCVzKSBUTFYgdHlwZSB3YXMgMCwgcmV0dXJuaW5nXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMzkxLDM5ICs0MTIsNDggQEAKIAkJfQogCQltcG9hX2RldmljZV90eXBlID0gKnRsdnMrKzsKIAkJbnVtYmVyX29mX21wc19tYWNzID0gKnRsdnMrKzsKLQkJZHByaW50aygibXBvYTogKCVzKSBNUE9BIGRldmljZSB0eXBlICclcycsICIsIGRldi0+bmFtZSwgbXBvYV9kZXZpY2VfdHlwZV9zdHJpbmcobXBvYV9kZXZpY2VfdHlwZSkpOworCQlkcHJpbnRrKCIoJXMpIE1QT0EgZGV2aWNlIHR5cGUgJyVzJywgIiwKKwkJCWRldi0+bmFtZSwgbXBvYV9kZXZpY2VfdHlwZV9zdHJpbmcobXBvYV9kZXZpY2VfdHlwZSkpOwogCQlpZiAobXBvYV9kZXZpY2VfdHlwZSA9PSBNUFNfQU5EX01QQyAmJgogCQkgICAgbGVuZ3RoIDwgKDQyICsgbnVtYmVyX29mX21wc19tYWNzKkVUSF9BTEVOKSkgeyAvKiA6KSAqLwotCQkJcHJpbnRrKCJcbm1wb2E6ICglcykgbGFuZTJfYXNzb2NfaW5kOiBzaG9ydCBNUE9BIERldmljZSBUeXBlIFRMVlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChtcG9hX2RldmljZV90eXBlID09IE1QUyB8fCBtcG9hX2RldmljZV90eXBlID09IE1QQykKLQkJICAgICYmIGxlbmd0aCA8IDIyICsgbnVtYmVyX29mX21wc19tYWNzKkVUSF9BTEVOKSB7Ci0JCQlwcmludGsoIlxubXBvYTogKCVzKSBsYW5lMl9hc3NvY19pbmQ6IHNob3J0IE1QT0EgRGV2aWNlIFR5cGUgVExWXG4iLAorCQkJcHJfaW5mbygiKCVzKSBzaG9ydCBNUE9BIERldmljZSBUeXBlIFRMVlxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKG1wb2FfZGV2aWNlX3R5cGUgIT0gTVBTICYmIG1wb2FfZGV2aWNlX3R5cGUgIT0gTVBTX0FORF9NUEMpIHsKLQkJCWRwcmludGsoImlnbm9yaW5nIG5vbi1NUFMgZGV2aWNlXG4iKTsKLQkJCWlmIChtcG9hX2RldmljZV90eXBlID09IE1QQykgdGx2cyArPSAyMDsKKwkJaWYgKChtcG9hX2RldmljZV90eXBlID09IE1QUyB8fCBtcG9hX2RldmljZV90eXBlID09IE1QQykgJiYKKwkJICAgIGxlbmd0aCA8IDIyICsgbnVtYmVyX29mX21wc19tYWNzKkVUSF9BTEVOKSB7CisJCQlwcl9pbmZvKCIoJXMpIHNob3J0IE1QT0EgRGV2aWNlIFR5cGUgVExWXG4iLCBkZXYtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG1wb2FfZGV2aWNlX3R5cGUgIT0gTVBTICYmCisJCSAgICBtcG9hX2RldmljZV90eXBlICE9IE1QU19BTkRfTVBDKSB7CisJCQlkcHJpbnRrKCJpZ25vcmluZyBub24tTVBTIGRldmljZSAiKTsKKwkJCWlmIChtcG9hX2RldmljZV90eXBlID09IE1QQykKKwkJCQl0bHZzICs9IDIwOwogCQkJY29udGludWU7ICAvKiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIE1QU3MgKi8KIAkJfQotCQlpZiAobnVtYmVyX29mX21wc19tYWNzID09IDAgJiYgbXBvYV9kZXZpY2VfdHlwZSA9PSBNUFNfQU5EX01QQykgewotCQkJcHJpbnRrKCJcbm1wb2E6ICglcykgbGFuZTJfYXNzb2NfaW5kOiBNUFNfQU5EX01QQyBoYXMgemVybyBNQUNzXG4iLCBkZXYtPm5hbWUpOworCQlpZiAobnVtYmVyX29mX21wc19tYWNzID09IDAgJiYKKwkJICAgIG1wb2FfZGV2aWNlX3R5cGUgPT0gTVBTX0FORF9NUEMpIHsKKwkJCXByX2luZm8oIiglcykgTVBTX0FORF9NUEMgaGFzIHplcm8gTUFDc1xuIiwgZGV2LT5uYW1lKTsKIAkJCWNvbnRpbnVlOyAgLyogc29tZW9uZSBzaG91bGQgcmVhZCB0aGUgc3BlYyAqLwogCQl9Ci0JCWRwcmludGsoInRoaXMgTVBTIGhhcyAlZCBNQUMgYWRkcmVzc2VzXG4iLCBudW1iZXJfb2ZfbXBzX21hY3MpOworCQlkcHJpbnRrX2NvbnQoInRoaXMgTVBTIGhhcyAlZCBNQUMgYWRkcmVzc2VzXG4iLAorCQkJICAgICBudW1iZXJfb2ZfbXBzX21hY3MpOwogCi0JCS8qIG9rLCBub3cgd2UgY2FuIGdvIGFuZCB0ZWxsIG91ciBkYWVtb24gdGhlIGNvbnRyb2wgYWRkcmVzcyBvZiBNUFMgKi8KKwkJLyoKKwkJICogb2ssIG5vdyB3ZSBjYW4gZ28gYW5kIHRlbGwgb3VyIGRhZW1vbgorCQkgKiB0aGUgY29udHJvbCBhZGRyZXNzIG9mIE1QUworCQkgKi8KIAkJc2VuZF9zZXRfbXBzX2N0cmxfYWRkcih0bHZzLCBtcGMpOwogCi0JCXRsdnMgPSBjb3B5X21hY3MobXBjLCBtYWNfYWRkciwgdGx2cywgbnVtYmVyX29mX21wc19tYWNzLCBtcG9hX2RldmljZV90eXBlKTsKLQkJaWYgKHRsdnMgPT0gTlVMTCkgcmV0dXJuOworCQl0bHZzID0gY29weV9tYWNzKG1wYywgbWFjX2FkZHIsIHRsdnMsCisJCQkJIG51bWJlcl9vZl9tcHNfbWFjcywgbXBvYV9kZXZpY2VfdHlwZSk7CisJCWlmICh0bHZzID09IE5VTEwpCisJCQlyZXR1cm47CiAJfQogCWlmIChlbmRfb2ZfdGx2cyAtIHRsdnMgIT0gMCkKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIGxhbmUyX2Fzc29jX2luZDogaWdub3JpbmcgJVpkIGJ5dGVzIG9mIHRyYWlsaW5nIFRMViBjYXJiYWdlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlbmRfb2ZfdGx2cyAtIHRsdnMpOworCQlwcl9pbmZvKCIoJXMpIGlnbm9yaW5nICVaZCBieXRlcyBvZiB0cmFpbGluZyBUTFYgZ2FyYmFnZVxuIiwKKwkJCWRldi0+bmFtZSwgZW5kX29mX3RsdnMgLSB0bHZzKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ0MSwxMSArNDcxLDEyIEBACiAJbnVtX21hY3MgPSAobXBzX21hY3MgPiAxKSA/IG1wc19tYWNzIDogMTsKIAogCWlmIChtcGMtPm51bWJlcl9vZl9tcHNfbWFjcyAhPSBudW1fbWFjcykgeyAvKiBuZWVkIHRvIHJlYWxsb2NhdGU/ICovCi0JCWlmIChtcGMtPm51bWJlcl9vZl9tcHNfbWFjcyAhPSAwKSBrZnJlZShtcGMtPm1wc19tYWNzKTsKKwkJaWYgKG1wYy0+bnVtYmVyX29mX21wc19tYWNzICE9IDApCisJCQlrZnJlZShtcGMtPm1wc19tYWNzKTsKIAkJbXBjLT5udW1iZXJfb2ZfbXBzX21hY3MgPSAwOwotCQltcGMtPm1wc19tYWNzID0ga21hbGxvYyhudW1fbWFjcypFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CisJCW1wYy0+bXBzX21hY3MgPSBrbWFsbG9jKG51bV9tYWNzICogRVRIX0FMRU4sIEdGUF9LRVJORUwpOwogCQlpZiAobXBjLT5tcHNfbWFjcyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoIm1wb2E6ICglcykgY29weV9tYWNzOiBvdXQgb2YgbWVtXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJCQlwcl9pbmZvKCIoJXMpIG91dCBvZiBtZW1cbiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQpAQCAtNDc4LDI0ICs1MDksMzAgQEAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopYnVmZjsKIAlpcGFkZHIgPSBpcGgtPmRhZGRyOwogCi0JZGRwcmludGsoIm1wb2E6ICglcykgc2VuZF92aWFfc2hvcnRjdXQ6IGlwYWRkciAweCV4XG4iLCBtcGMtPmRldi0+bmFtZSwgaXBhZGRyKTsKKwlkZHByaW50aygiKCVzKSBpcGFkZHIgMHgleFxuIiwKKwkJIG1wYy0+ZGV2LT5uYW1lLCBpcGFkZHIpOwogCiAJZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0KGlwYWRkciwgbXBjKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkgewogCQllbnRyeSA9IG1wYy0+aW5fb3BzLT5hZGRfZW50cnkoaXBhZGRyLCBtcGMpOwotCQlpZiAoZW50cnkgIT0gTlVMTCkgbXBjLT5pbl9vcHMtPnB1dChlbnRyeSk7CisJCWlmIChlbnRyeSAhPSBOVUxMKQorCQkJbXBjLT5pbl9vcHMtPnB1dChlbnRyeSk7CiAJCXJldHVybiAxOwogCX0KLQlpZiAobXBjLT5pbl9vcHMtPmNhY2hlX2hpdChlbnRyeSwgbXBjKSAhPSBPUEVOKXsgICAvKiB0aHJlc2hvbGQgbm90IGV4Y2VlZGVkIG9yIFZDQyBub3QgcmVhZHkgKi8KLQkJZGRwcmludGsoIm1wb2E6ICglcykgc2VuZF92aWFfc2hvcnRjdXQ6IGNhY2hlX2hpdDogcmV0dXJucyAhPSBPUEVOXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJLyogdGhyZXNob2xkIG5vdCBleGNlZWRlZCBvciBWQ0Mgbm90IHJlYWR5ICovCisJaWYgKG1wYy0+aW5fb3BzLT5jYWNoZV9oaXQoZW50cnksIG1wYykgIT0gT1BFTikgeworCQlkZHByaW50aygiKCVzKSBjYWNoZV9oaXQ6IHJldHVybnMgIT0gT1BFTlxuIiwKKwkJCSBtcGMtPmRldi0+bmFtZSk7CiAJCW1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlkZHByaW50aygibXBvYTogKCVzKSBzZW5kX3ZpYV9zaG9ydGN1dDogdXNpbmcgc2hvcnRjdXRcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwlkZHByaW50aygiKCVzKSB1c2luZyBzaG9ydGN1dFxuIiwKKwkJIG1wYy0+ZGV2LT5uYW1lKTsKIAkvKiBNUE9BIHNwZWMgQS4xLjQsIE1QT0EgY2xpZW50IG11c3QgZGVjcmVtZW50IElQIHR0bCBhdCBsZWFzdCBieSBvbmUgKi8KIAlpZiAoaXBoLT50dGwgPD0gMSkgewotCQlkZHByaW50aygibXBvYTogKCVzKSBzZW5kX3ZpYV9zaG9ydGN1dDogSVAgdHRsID0gJXUsIHVzaW5nIExBTkVcbiIsIG1wYy0+ZGV2LT5uYW1lLCBpcGgtPnR0bCk7CisJCWRkcHJpbnRrKCIoJXMpIElQIHR0bCA9ICV1LCB1c2luZyBMQU5FXG4iLAorCQkJIG1wYy0+ZGV2LT5uYW1lLCBpcGgtPnR0bCk7CiAJCW1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC01MDQsMTUgKzU0MSwxOCBAQAogCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC0+aWhsKTsKIAogCWlmIChlbnRyeS0+Y3RybF9pbmZvLnRhZyAhPSAwKSB7Ci0JCWRkcHJpbnRrKCJtcG9hOiAoJXMpIHNlbmRfdmlhX3Nob3J0Y3V0OiBhZGRpbmcgdGFnIDB4JXhcbiIsIG1wYy0+ZGV2LT5uYW1lLCBlbnRyeS0+Y3RybF9pbmZvLnRhZyk7CisJCWRkcHJpbnRrKCIoJXMpIGFkZGluZyB0YWcgMHgleFxuIiwKKwkJCSBtcGMtPmRldi0+bmFtZSwgZW50cnktPmN0cmxfaW5mby50YWcpOwogCQl0YWdnZWRfbGxjX3NuYXBfaGRyLnRhZyA9IGVudHJ5LT5jdHJsX2luZm8udGFnOwotCQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCByaWQgb2YgRXRoIGhlYWRlciAqLwotCQlza2JfcHVzaChza2IsIHNpemVvZih0YWdnZWRfbGxjX3NuYXBfaGRyKSk7ICAgIC8qIGFkZCBMTEMvU05BUCBoZWFkZXIgICAqLworCQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsJLyogZ2V0IHJpZCBvZiBFdGggaGVhZGVyICovCisJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHRhZ2dlZF9sbGNfc25hcF9oZHIpKTsKKwkJCQkJCS8qIGFkZCBMTEMvU05BUCBoZWFkZXIgICAqLwogCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsICZ0YWdnZWRfbGxjX3NuYXBfaGRyLAogCQkJCQlzaXplb2YodGFnZ2VkX2xsY19zbmFwX2hkcikpOwogCX0gZWxzZSB7Ci0JCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCByaWQgb2YgRXRoIGhlYWRlciAqLwotCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSk7ICAgICAvKiBhZGQgTExDL1NOQVAgaGVhZGVyICsgdGFnICAqLworCQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsJLyogZ2V0IHJpZCBvZiBFdGggaGVhZGVyICovCisJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpKTsKKwkJCQkJCS8qIGFkZCBMTEMvU05BUCBoZWFkZXIgKyB0YWcgICovCiAJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgJmxsY19zbmFwX21wb2FfZGF0YSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpKTsKIAl9CkBAIC01MzcsOCArNTc3LDggQEAKIAlpbnQgaSA9IDA7CiAKIAltcGMgPSBmaW5kX21wY19ieV9sZWMoZGV2KTsgLyogdGhpcyBzaG91bGQgTkVWRVIgZmFpbCAqLwotCWlmKG1wYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfc2VuZF9wYWNrZXQ6IG5vIE1QQyBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKKwlpZiAobXBjID09IE5VTEwpIHsKKwkJcHJfaW5mbygiKCVzKSBubyBNUEMgZm91bmRcbiIsIGRldi0+bmFtZSk7CiAJCWdvdG8gbm9uX2lwOwogCX0KIApAQCAtNTU0LDE0ICs1OTQsMTUgQEAKIAkJZ290byBub25faXA7CiAKIAl3aGlsZSAoaSA8IG1wYy0+bnVtYmVyX29mX21wc19tYWNzKSB7Ci0JCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aC0+aF9kZXN0LCAobXBjLT5tcHNfbWFjcyArIGkqRVRIX0FMRU4pKSkKLQkJCWlmICggc2VuZF92aWFfc2hvcnRjdXQoc2tiLCBtcGMpID09IDAgKSAgICAgICAgICAgLyogdHJ5IHNob3J0Y3V0ICovCi0JCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsgICAgICAgICAgICAgICAgICAgICAgLyogc3VjY2VzcyEgICAgICovCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aC0+aF9kZXN0LAorCQkJCQkobXBjLT5tcHNfbWFjcyArIGkqRVRIX0FMRU4pKSkKKwkJCWlmIChzZW5kX3ZpYV9zaG9ydGN1dChza2IsIG1wYykgPT0gMCkgLyogdHJ5IHNob3J0Y3V0ICovCisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJaSsrOwogCX0KIAotIG5vbl9pcDoKLQlyZXR1cm4gbXBjLT5vbGRfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsZGV2KTsKK25vbl9pcDoKKwlyZXR1cm4gbXBjLT5vbGRfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXRtX21wb2FfdmNjX2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB2b2lkIF9fdXNlciAqYXJnKQpAQCAtNTc0LDcgKzYxNSw4IEBACiAKIAlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXIoJmlvY19kYXRhLCBhcmcsIHNpemVvZihzdHJ1Y3QgYXRtbXBjX2lvYykpOwogCWlmIChieXRlc19sZWZ0ICE9IDApIHsKLQkJcHJpbnRrKCJtcG9hOiBtcGNfdmNjX2F0dGFjaDogU2hvcnQgcmVhZCAobWlzc2VkICVkIGJ5dGVzKSBmcm9tIHVzZXJsYW5kXG4iLCBieXRlc19sZWZ0KTsKKwkJcHJfaW5mbygibXBvYTpTaG9ydCByZWFkIChtaXNzZWQgJWQgYnl0ZXMpIGZyb20gdXNlcmxhbmRcbiIsCisJCQlieXRlc19sZWZ0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWlwYWRkciA9IGlvY19kYXRhLmlwYWRkcjsKQEAgLTU4NywxOCArNjI5LDIwIEBACiAKIAlpZiAoaW9jX2RhdGEudHlwZSA9PSBNUENfU09DS0VUX0lOR1JFU1MpIHsKIAkJaW5fZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0KGlwYWRkciwgbXBjKTsKLQkJaWYgKGluX2VudHJ5ID09IE5VTEwgfHwgaW5fZW50cnktPmVudHJ5X3N0YXRlIDwgSU5HUkVTU19SRVNPTFZFRCkgewotCQkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfYXR0YWNoOiBkaWQgbm90IGZpbmQgUkVTT0xWRUQgZW50cnkgZnJvbSBpbmdyZXNzIGNhY2hlXG4iLAorCQlpZiAoaW5fZW50cnkgPT0gTlVMTCB8fAorCQkgICAgaW5fZW50cnktPmVudHJ5X3N0YXRlIDwgSU5HUkVTU19SRVNPTFZFRCkgeworCQkJcHJfaW5mbygiKCVzKSBkaWQgbm90IGZpbmQgUkVTT0xWRUQgZW50cnkgZnJvbSBpbmdyZXNzIGNhY2hlXG4iLAogCQkJCW1wYy0+ZGV2LT5uYW1lKTsKLQkJCWlmIChpbl9lbnRyeSAhPSBOVUxMKSBtcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKKwkJCWlmIChpbl9lbnRyeSAhPSBOVUxMKQorCQkJCW1wYy0+aW5fb3BzLT5wdXQoaW5fZW50cnkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfYXR0YWNoOiBhdHRhY2hpbmcgaW5ncmVzcyBTVkMsIGVudHJ5ID0gJXBJNFxuIiwKLQkJICAgICAgIG1wYy0+ZGV2LT5uYW1lLCAmaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOworCQlwcl9pbmZvKCIoJXMpIGF0dGFjaGluZyBpbmdyZXNzIFNWQywgZW50cnkgPSAlcEk0XG4iLAorCQkJbXBjLT5kZXYtPm5hbWUsICZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CiAJCWluX2VudHJ5LT5zaG9ydGN1dCA9IHZjYzsKIAkJbXBjLT5pbl9vcHMtPnB1dChpbl9lbnRyeSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfYXR0YWNoOiBhdHRhY2hpbmcgZWdyZXNzIFNWQ1xuIiwgbXBjLT5kZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIGF0dGFjaGluZyBlZ3Jlc3MgU1ZDXG4iLCBtcGMtPmRldi0+bmFtZSk7CiAJfQogCiAJdmNjLT5wcm90b19kYXRhID0gbXBjLT5kZXY7CkBAIC02MTgsMjcgKzY2MiwyNyBAQAogCiAJbXBjID0gZmluZF9tcGNfYnlfbGVjKGRldik7CiAJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2Nsb3NlOiBjbG9zZSBmb3IgdW5rbm93biBNUENcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgY2xvc2UgZm9yIHVua25vd24gTVBDXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCi0JZHByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2Nsb3NlOlxuIiwgZGV2LT5uYW1lKTsKKwlkcHJpbnRrKCIoJXMpXG4iLCBkZXYtPm5hbWUpOwogCWluX2VudHJ5ID0gbXBjLT5pbl9vcHMtPmdldF9ieV92Y2ModmNjLCBtcGMpOwogCWlmIChpbl9lbnRyeSkgewotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfY2xvc2U6IGluZ3Jlc3MgU1ZDIGNsb3NlZCBpcCA9ICVwSTRcbiIsCi0JCSAgICAgICBtcGMtPmRldi0+bmFtZSwgJmluX2VudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKKwkJZHByaW50aygiKCVzKSBpbmdyZXNzIFNWQyBjbG9zZWQgaXAgPSAlcEk0XG4iLAorCQkJbXBjLT5kZXYtPm5hbWUsICZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CiAJCWluX2VudHJ5LT5zaG9ydGN1dCA9IE5VTEw7CiAJCW1wYy0+aW5fb3BzLT5wdXQoaW5fZW50cnkpOwogCX0KIAllZ19lbnRyeSA9IG1wYy0+ZWdfb3BzLT5nZXRfYnlfdmNjKHZjYywgbXBjKTsKIAlpZiAoZWdfZW50cnkpIHsKLQkJZHByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2Nsb3NlOiBlZ3Jlc3MgU1ZDIGNsb3NlZFxuIiwgbXBjLT5kZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIGVncmVzcyBTVkMgY2xvc2VkXG4iLCBtcGMtPmRldi0+bmFtZSk7CiAJCWVnX2VudHJ5LT5zaG9ydGN1dCA9IE5VTEw7CiAJCW1wYy0+ZWdfb3BzLT5wdXQoZWdfZW50cnkpOwogCX0KIAogCWlmIChpbl9lbnRyeSA9PSBOVUxMICYmIGVnX2VudHJ5ID09IE5VTEwpCi0JCWRwcmludGsoIm1wb2E6ICglcykgbXBjX3ZjY19jbG9zZTogIHVudXNlZCB2Y2MgY2xvc2VkXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIHVudXNlZCB2Y2MgY2xvc2VkXG4iLCBkZXYtPm5hbWUpOwogCiAJcmV0dXJuOwogfQpAQCAtNjUyLDE4ICs2OTYsMTkgQEAKIAlfX2JlMzIgdGFnOwogCWNoYXIgKnRtcDsKIAotCWRkcHJpbnRrKCJtcG9hOiAoJXMpIG1wY19wdXNoOlxuIiwgZGV2LT5uYW1lKTsKKwlkZHByaW50aygiKCVzKVxuIiwgZGV2LT5uYW1lKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJZHByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogbnVsbCBza2IsIGNsb3NpbmcgVkNDXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIG51bGwgc2tiLCBjbG9zaW5nIFZDQ1xuIiwgZGV2LT5uYW1lKTsKIAkJbXBjX3ZjY19jbG9zZSh2Y2MsIGRldik7CiAJCXJldHVybjsKIAl9CiAKIAlza2ItPmRldiA9IGRldjsKLQlpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmxsY19zbmFwX21wb2FfY3RybCwgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpKSA9PSAwKSB7CisJaWYgKG1lbWNtcChza2ItPmRhdGEsICZsbGNfc25hcF9tcG9hX2N0cmwsCisJCSAgIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSkgPT0gMCkgewogCQlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wY19wdXNoOiBjb250cm9sIHBhY2tldCBhcnJpdmVkXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIGNvbnRyb2wgcGFja2V0IGFycml2ZWRcbiIsIGRldi0+bmFtZSk7CiAJCS8qIFBhc3MgY29udHJvbCBwYWNrZXRzIHRvIGRhZW1vbiAqLwogCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CkBAIC02NzUsMjAgKzcyMCwyMiBAQAogCiAJbXBjID0gZmluZF9tcGNfYnlfbGVjKGRldik7CiAJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogdW5rbm93biBNUENcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgdW5rbm93biBNUENcbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmxsY19zbmFwX21wb2FfZGF0YV90YWdnZWQsIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSkgPT0gMCkgeyAvKiBNUE9BIHRhZ2dlZCBkYXRhICovCi0JCWRkcHJpbnRrKCJtcG9hOiAoJXMpIG1wY19wdXNoOiB0YWdnZWQgZGF0YSBwYWNrZXQgYXJyaXZlZFxuIiwgZGV2LT5uYW1lKTsKKwlpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmxsY19zbmFwX21wb2FfZGF0YV90YWdnZWQsCisJCSAgIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSkgPT0gMCkgeyAvKiBNUE9BIHRhZ2dlZCBkYXRhICovCisJCWRkcHJpbnRrKCIoJXMpIHRhZ2dlZCBkYXRhIHBhY2tldCBhcnJpdmVkXG4iLCBkZXYtPm5hbWUpOwogCi0JfSBlbHNlIGlmIChtZW1jbXAoc2tiLT5kYXRhLCAmbGxjX3NuYXBfbXBvYV9kYXRhLCBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpID09IDApIHsgLyogTVBPQSBkYXRhICovCi0JCXByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogbm9uLXRhZ2dlZCBkYXRhIHBhY2tldCBhcnJpdmVkXG4iLCBkZXYtPm5hbWUpOwotCQlwcmludGsoIiAgICAgICAgICAgbXBjX3B1c2g6IG5vbi10YWdnZWQgZGF0YSB1bnN1cHBvcnRlZCwgcHVyZ2luZ1xuIik7CisJfSBlbHNlIGlmIChtZW1jbXAoc2tiLT5kYXRhLCAmbGxjX3NuYXBfbXBvYV9kYXRhLAorCQkJICBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpID09IDApIHsgLyogTVBPQSBkYXRhICovCisJCXByX2luZm8oIiglcykgVW5zdXBwb3J0ZWQgbm9uLXRhZ2dlZCBkYXRhIHBhY2tldCBhcnJpdmVkLiAgUHVyZ2luZ1xuIiwKKwkJCWRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9IGVsc2UgewotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IGdhcmJhZ2UgYXJyaXZlZCwgcHVyZ2luZ1xuIiwgZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiKCVzKSBnYXJiYWdlIGFycml2ZWQsIHB1cmdpbmdcbiIsIGRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC02OTgsOCArNzQ1LDggQEAKIAogCWVnID0gbXBjLT5lZ19vcHMtPmdldF9ieV90YWcodGFnLCBtcGMpOwogCWlmIChlZyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogRGlkbid0IGZpbmQgZWdyZXNzIGNhY2hlIGVudHJ5LCB0YWcgPSAldVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSx0YWcpOworCQlwcl9pbmZvKCJtcG9hOiAoJXMpIERpZG4ndCBmaW5kIGVncmVzcyBjYWNoZSBlbnRyeSwgdGFnID0gJXVcbiIsCisJCQlkZXYtPm5hbWUsIHRhZyk7CiAJCXB1cmdlX2VncmVzc19zaG9ydGN1dCh2Y2MsIE5VTEwpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm47CkBAIC03MTEsMTMgKzc1OCwxNSBAQAogCSAqLwogCWlmIChlZy0+c2hvcnRjdXQgPT0gTlVMTCkgewogCQllZy0+c2hvcnRjdXQgPSB2Y2M7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogZWdyZXNzIFNWQyBpbiB1c2VcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgZWdyZXNzIFNWQyBpbiB1c2VcbiIsIGRldi0+bmFtZSk7CiAJfQogCi0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikgKyBzaXplb2YodGFnKSk7IC8qIGdldCByaWQgb2YgTExDL1NOQVAgaGVhZGVyICovCi0JbmV3X3NrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgZWctPmN0cmxfaW5mby5ESF9sZW5ndGgpOyAvKiBMTEMvU05BUCBpcyBzaG9ydGVyIHRoYW4gTUFDIGhlYWRlciA6KCAqLworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpICsgc2l6ZW9mKHRhZykpOworCQkJCQkvKiBnZXQgcmlkIG9mIExMQy9TTkFQIGhlYWRlciAqLworCW5ld19za2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIGVnLT5jdHJsX2luZm8uREhfbGVuZ3RoKTsKKwkJCQkJLyogTExDL1NOQVAgaXMgc2hvcnRlciB0aGFuIE1BQyBoZWFkZXIgOiggKi8KIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCWlmIChuZXdfc2tiID09IE5VTEwpeworCWlmIChuZXdfc2tiID09IE5VTEwpIHsKIAkJbXBjLT5lZ19vcHMtPnB1dChlZyk7CiAJCXJldHVybjsKIAl9CkBAIC03NTAsNyArNzk5LDcgQEAKIAkvKiBtZW1iZXJzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpc2VkIHdpbGwgYmUgMCAqLwogfTsKIAotc3RhdGljIGludCBhdG1fbXBvYV9tcG9hZF9hdHRhY2ggKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCBhcmcpCitzdGF0aWMgaW50IGF0bV9tcG9hX21wb2FkX2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgYXJnKQogewogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdjsKQEAgLTc3MCwxNSArODE5LDE2IEBACiAKIAltcGMgPSBmaW5kX21wY19ieV9pdGZudW0oYXJnKTsKIAlpZiAobXBjID09IE5VTEwpIHsKLQkJZHByaW50aygibXBvYTogbXBvYWRfYXR0YWNoOiBhbGxvY2F0aW5nIG5ldyBtcGMgZm9yIGl0ZiAlZFxuIiwgYXJnKTsKKwkJZHByaW50aygiYWxsb2NhdGluZyBuZXcgbXBjIGZvciBpdGYgJWRcbiIsIGFyZyk7CiAJCW1wYyA9IGFsbG9jX21wYygpOwogCQlpZiAobXBjID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbXBjLT5kZXZfbnVtID0gYXJnOwotCQltcGMtPmRldiA9IGZpbmRfbGVjX2J5X2l0Zm51bShhcmcpOyAvKiBOVUxMIGlmIHRoZXJlIHdhcyBubyBsZWMgKi8KKwkJbXBjLT5kZXYgPSBmaW5kX2xlY19ieV9pdGZudW0oYXJnKTsKKwkJCQkJLyogTlVMTCBpZiB0aGVyZSB3YXMgbm8gbGVjICovCiAJfQogCWlmIChtcGMtPm1wb2FkX3ZjYykgewotCQlwcmludGsoIm1wb2E6IG1wb2FkX2F0dGFjaDogbXBvYWQgaXMgYWxyZWFkeSBwcmVzZW50IGZvciBpdGYgJWRcbiIsIGFyZyk7CisJCXByX2luZm8oIm1wb2FkIGlzIGFscmVhZHkgcHJlc2VudCBmb3IgaXRmICVkXG4iLCBhcmcpOwogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJfQogCkBAIC03OTQsOCArODQ0LDggQEAKIAltcGMtPm1wb2FkX3ZjYyA9IHZjYzsKIAl2Y2MtPmRldiA9ICZtcGNfZGV2OwogCXZjY19pbnNlcnRfc29ja2V0KHNrX2F0bSh2Y2MpKTsKLQlzZXRfYml0KEFUTV9WRl9NRVRBLCZ2Y2MtPmZsYWdzKTsKLQlzZXRfYml0KEFUTV9WRl9SRUFEWSwmdmNjLT5mbGFncyk7CisJc2V0X2JpdChBVE1fVkZfTUVUQSwgJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CiAKIAlpZiAobXBjLT5kZXYpIHsKIAkJY2hhciBlbXB0eVtBVE1fRVNBX0xFTl07CkBAIC04MDUsNyArODU1LDcgQEAKIAkJLyogc2V0IGFkZHJlc3MgaWYgbXBjZCBlLmcuIGdldHMga2lsbGVkIGFuZCByZXN0YXJ0ZWQuCiAJCSAqIElmIHdlIGRvIG5vdCBkbyBpdCBub3cgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgbmV4dCBMRV9BUlAKIAkJICovCi0JCWlmICggbWVtY21wKG1wYy0+bXBzX2N0cmxfYWRkciwgZW1wdHksIEFUTV9FU0FfTEVOKSAhPSAwICkKKwkJaWYgKG1lbWNtcChtcGMtPm1wc19jdHJsX2FkZHIsIGVtcHR5LCBBVE1fRVNBX0xFTikgIT0gMCkKIAkJCXNlbmRfc2V0X21wc19jdHJsX2FkZHIobXBjLT5tcHNfY3RybF9hZGRyLCBtcGMpOwogCX0KIApAQCAtODE3LDcgKzg2Nyw3IEBACiB7CiAJc3RydWN0IGtfbWVzc2FnZSBtZXNnOwogCi0JbWVtY3B5IChtcGMtPm1wc19jdHJsX2FkZHIsIGFkZHIsIEFUTV9FU0FfTEVOKTsKKwltZW1jcHkobXBjLT5tcHNfY3RybF9hZGRyLCBhZGRyLCBBVE1fRVNBX0xFTik7CiAKIAltZXNnLnR5cGUgPSBTRVRfTVBTX0NUUkxfQUREUjsKIAltZW1jcHkobWVzZy5NUFNfY3RybCwgYWRkciwgQVRNX0VTQV9MRU4pOwpAQCAtODMzLDExICs4ODMsMTEgQEAKIAogCW1wYyA9IGZpbmRfbXBjX2J5X3ZjYyh2Y2MpOwogCWlmIChtcGMgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IG1wb2FkX2Nsb3NlOiBkaWQgbm90IGZpbmQgTVBDXG4iKTsKKwkJcHJfaW5mbygiZGlkIG5vdCBmaW5kIE1QQ1xuIik7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFtcGMtPm1wb2FkX3ZjYykgewotCQlwcmludGsoIm1wb2E6IG1wb2FkX2Nsb3NlOiBjbG9zZSBmb3Igbm9uLXByZXNlbnQgbXBvYWRcbiIpOworCQlwcl9pbmZvKCJjbG9zZSBmb3Igbm9uLXByZXNlbnQgbXBvYWRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC04NTcsNyArOTA3LDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCi0JcHJpbnRrKCJtcG9hOiAoJXMpIGdvaW5nIGRvd25cbiIsCisJcHJfaW5mbygiKCVzKSBnb2luZyBkb3duXG4iLAogCQkobXBjLT5kZXYpID8gbXBjLT5kZXYtPm5hbWUgOiAiPHVua25vd24+Iik7CiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAKQEAgLTg3MSw2MSArOTIxLDYxIEBACiB7CiAKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyA9IGZpbmRfbXBjX2J5X3ZjYyh2Y2MpOwotCXN0cnVjdCBrX21lc3NhZ2UgKm1lc2cgPSAoc3RydWN0IGtfbWVzc2FnZSopc2tiLT5kYXRhOworCXN0cnVjdCBrX21lc3NhZ2UgKm1lc2cgPSAoc3RydWN0IGtfbWVzc2FnZSAqKXNrYi0+ZGF0YTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAKIAlpZiAobXBjID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiBtc2dfZnJvbV9tcG9hZDogbm8gbXBjIGZvdW5kXG4iKTsKKwkJcHJfaW5mbygibm8gbXBjIGZvdW5kXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRwcmludGsoIm1wb2E6ICglcykgbXNnX2Zyb21fbXBvYWQ6IiwgKG1wYy0+ZGV2KSA/IG1wYy0+ZGV2LT5uYW1lIDogIjx1bmtub3duPiIpOwotCXN3aXRjaChtZXNnLT50eXBlKSB7CisJZHByaW50aygiKCVzKSIsIG1wYy0+ZGV2ID8gbXBjLT5kZXYtPm5hbWUgOiAiPHVua25vd24+Iik7CisJc3dpdGNoIChtZXNnLT50eXBlKSB7CiAJY2FzZSBNUE9BX1JFU19SRVBMWV9SQ1ZEOgotCQlkcHJpbnRrKCIgbXBvYV9yZXNfcmVwbHlfcmN2ZFxuIik7CisJCWRwcmludGtfY29udCgibXBvYV9yZXNfcmVwbHlfcmN2ZFxuIik7CiAJCU1QT0FfcmVzX3JlcGx5X3JjdmQobWVzZywgbXBjKTsKIAkJYnJlYWs7CiAJY2FzZSBNUE9BX1RSSUdHRVJfUkNWRDoKLQkJZHByaW50aygiIG1wb2FfdHJpZ2dlcl9yY3ZkXG4iKTsKKwkJZHByaW50a19jb250KCJtcG9hX3RyaWdnZXJfcmN2ZFxuIik7CiAJCU1QT0FfdHJpZ2dlcl9yY3ZkKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgSU5HUkVTU19QVVJHRV9SQ1ZEOgotCQlkcHJpbnRrKCIgbmhycF9wdXJnZV9yY3ZkXG4iKTsKKwkJZHByaW50a19jb250KCJuaHJwX3B1cmdlX3JjdmRcbiIpOwogCQlpbmdyZXNzX3B1cmdlX3JjdmQobWVzZywgbXBjKTsKIAkJYnJlYWs7CiAJY2FzZSBFR1JFU1NfUFVSR0VfUkNWRDoKLQkJZHByaW50aygiIGVncmVzc19wdXJnZV9yZXBseV9yY3ZkXG4iKTsKKwkJZHByaW50a19jb250KCJlZ3Jlc3NfcHVyZ2VfcmVwbHlfcmN2ZFxuIik7CiAJCWVncmVzc19wdXJnZV9yY3ZkKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgTVBTX0RFQVRIOgotCQlkcHJpbnRrKCIgbXBzX2RlYXRoXG4iKTsKKwkJZHByaW50a19jb250KCJtcHNfZGVhdGhcbiIpOwogCQltcHNfZGVhdGgobWVzZywgbXBjKTsKIAkJYnJlYWs7CiAJY2FzZSBDQUNIRV9JTVBPU19SQ1ZEOgotCQlkcHJpbnRrKCIgY2FjaGVfaW1wb3NfcmN2ZFxuIik7CisJCWRwcmludGtfY29udCgiY2FjaGVfaW1wb3NfcmN2ZFxuIik7CiAJCU1QT0FfY2FjaGVfaW1wb3NfcmN2ZChtZXNnLCBtcGMpOwogCQlicmVhazsKIAljYXNlIFNFVF9NUENfQ1RSTF9BRERSOgotCQlkcHJpbnRrKCIgc2V0X21wY19jdHJsX2FkZHJcbiIpOworCQlkcHJpbnRrX2NvbnQoInNldF9tcGNfY3RybF9hZGRyXG4iKTsKIAkJc2V0X21wY19jdHJsX2FkZHJfcmN2ZChtZXNnLCBtcGMpOwogCQlicmVhazsKIAljYXNlIFNFVF9NUFNfTUFDX0FERFI6Ci0JCWRwcmludGsoIiBzZXRfbXBzX21hY19hZGRyXG4iKTsKKwkJZHByaW50a19jb250KCJzZXRfbXBzX21hY19hZGRyXG4iKTsKIAkJc2V0X21wc19tYWNfYWRkcl9yY3ZkKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgQ0xFQU5fVVBfQU5EX0VYSVQ6Ci0JCWRwcmludGsoIiBjbGVhbl91cF9hbmRfZXhpdFxuIik7CisJCWRwcmludGtfY29udCgiY2xlYW5fdXBfYW5kX2V4aXRcbiIpOwogCQljbGVhbl91cChtZXNnLCBtcGMsIERJRSk7CiAJCWJyZWFrOwogCWNhc2UgUkVMT0FEOgotCQlkcHJpbnRrKCIgcmVsb2FkXG4iKTsKKwkJZHByaW50a19jb250KCJyZWxvYWRcbiIpOwogCQljbGVhbl91cChtZXNnLCBtcGMsIFJFTE9BRCk7CiAJCWJyZWFrOwogCWNhc2UgU0VUX01QQ19QQVJBTVM6Ci0JCWRwcmludGsoIiBzZXRfbXBjX3BhcmFtc1xuIik7CisJCWRwcmludGtfY29udCgic2V0X21wY19wYXJhbXNcbiIpOwogCQltcGMtPnBhcmFtZXRlcnMgPSBtZXNnLT5jb250ZW50LnBhcmFtczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZHByaW50aygiIHVua25vd24gbWVzc2FnZSAlZFxuIiwgbWVzZy0+dHlwZSk7CisJCWRwcmludGtfY29udCgidW5rbm93biBtZXNzYWdlICVkXG4iLCBtZXNnLT50eXBlKTsKIAkJYnJlYWs7CiAJfQogCWtmcmVlX3NrYihza2IpOwpAQCAtOTQwLDcgKzk5MCw3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCiAJaWYgKG1wYyA9PSBOVUxMIHx8ICFtcGMtPm1wb2FkX3ZjYykgewotCQlwcmludGsoIm1wb2E6IG1zZ190b19tcG9hZDogbWVzZyAlZCB0byBhIG5vbi1leGlzdGVudCBtcG9hZFxuIiwgbWVzZy0+dHlwZSk7CisJCXByX2luZm8oIm1lc2cgJWQgdG8gYSBub24tZXhpc3RlbnQgbXBvYWRcbiIsIG1lc2ctPnR5cGUpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtOTU4LDcgKzEwMDgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1wb2FfZXZlbnRfbGlzdGVuZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICptcG9hX25vdGlmaWVyLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkZXZfcHRyKQorc3RhdGljIGludCBtcG9hX2V2ZW50X2xpc3RlbmVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbXBvYV9ub3RpZmllciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkZXZfcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGM7CkBAIC05ODAsMjUgKzEwMzEsMjQgQEAKIAkJcHJpdi0+bGFuZTJfb3BzLT5hc3NvY2lhdGVfaW5kaWNhdG9yID0gbGFuZTJfYXNzb2NfaW5kOwogCQltcGMgPSBmaW5kX21wY19ieV9pdGZudW0ocHJpdi0+aXRmbnVtKTsKIAkJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCQlkcHJpbnRrKCJtcG9hOiBtcG9hX2V2ZW50X2xpc3RlbmVyOiBhbGxvY2F0aW5nIG5ldyBtcGMgZm9yICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkcHJpbnRrKCJhbGxvY2F0aW5nIG5ldyBtcGMgZm9yICVzXG4iLCBkZXYtPm5hbWUpOwogCQkJbXBjID0gYWxsb2NfbXBjKCk7CiAJCQlpZiAobXBjID09IE5VTEwpIHsKLQkJCQlwcmludGsoIm1wb2E6IG1wb2FfZXZlbnRfbGlzdGVuZXI6IG5vIG5ldyBtcGMiKTsKKwkJCQlwcl9pbmZvKCJubyBuZXcgbXBjIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJbXBjLT5kZXZfbnVtID0gcHJpdi0+aXRmbnVtOwogCQltcGMtPmRldiA9IGRldjsKIAkJZGV2X2hvbGQoZGV2KTsKLQkJZHByaW50aygibXBvYTogKCVzKSB3YXMgaW5pdGlhbGl6ZWRcbiIsIGRldi0+bmFtZSk7CisJCWRwcmludGsoIiglcykgd2FzIGluaXRpYWxpemVkXG4iLCBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQkvKiB0aGUgbGVjIGRldmljZSB3YXMgZGVhbGxvY2F0ZWQgKi8KIAkJbXBjID0gZmluZF9tcGNfYnlfbGVjKGRldik7CiAJCWlmIChtcGMgPT0gTlVMTCkKIAkJCWJyZWFrOwotCQlkcHJpbnRrKCJtcG9hOiBkZXZpY2UgKCVzKSB3YXMgZGVhbGxvY2F0ZWRcbiIsIGRldi0+bmFtZSk7CisJCWRwcmludGsoImRldmljZSAoJXMpIHdhcyBkZWFsbG9jYXRlZFxuIiwgZGV2LT5uYW1lKTsKIAkJc3RvcF9tcGMobXBjKTsKIAkJZGV2X3B1dChtcGMtPmRldik7CiAJCW1wYy0+ZGV2ID0gTlVMTDsKQEAgLTEwMDgsOSArMTA1OCw4IEBACiAJCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOwogCQlpZiAobXBjID09IE5VTEwpCiAJCQlicmVhazsKLQkJaWYgKG1wYy0+bXBvYWRfdmNjICE9IE5VTEwpIHsKKwkJaWYgKG1wYy0+bXBvYWRfdmNjICE9IE5VTEwpCiAJCQlzdGFydF9tcGMobXBjLCBkZXYpOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0RPV046CiAJCS8qIHRoZSBkZXYgd2FzIGlmY29uZmlnJ2VkIGRvd24gKi8KQEAgLTEwMjAsOSArMTA2OSw4IEBACiAJCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOwogCQlpZiAobXBjID09IE5VTEwpCiAJCQlicmVhazsKLQkJaWYgKG1wYy0+bXBvYWRfdmNjICE9IE5VTEwpIHsKKwkJaWYgKG1wYy0+bXBvYWRfdmNjICE9IE5VTEwpCiAJCQlzdG9wX21wYyhtcGMpOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFQk9PVDoKIAljYXNlIE5FVERFVl9DSEFOR0U6CkBAIC0xMDQ5LDcgKzEwOTcsNyBAQAogCWluX2NhY2hlX2VudHJ5ICplbnRyeTsKIAogCWVudHJ5ID0gbXBjLT5pbl9vcHMtPmdldChkc3RfaXAsIG1wYyk7Ci0JaWYoZW50cnkgPT0gTlVMTCl7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKIAkJZW50cnkgPSBtcGMtPmluX29wcy0+YWRkX2VudHJ5KGRzdF9pcCwgbXBjKTsKIAkJZW50cnktPmVudHJ5X3N0YXRlID0gSU5HUkVTU19SRVNPTFZJTkc7CiAJCW1zZy0+dHlwZSA9IFNORF9NUE9BX1JFU19SUVNUOwpAQCAtMTA2MCw3ICsxMTA4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX0lOVkFMSUQpeworCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19JTlZBTElEKSB7CiAJCWVudHJ5LT5lbnRyeV9zdGF0ZSA9IElOR1JFU1NfUkVTT0xWSU5HOwogCQltc2ctPnR5cGUgPSBTTkRfTVBPQV9SRVNfUlFTVDsKIAkJbXNnLT5jb250ZW50LmluX2luZm8gPSBlbnRyeS0+Y3RybF9pbmZvOwpAQCAtMTA3MCw3ICsxMTE4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXByaW50aygibXBvYTogKCVzKSBNUE9BX3RyaWdnZXJfcmN2ZDogZW50cnkgYWxyZWFkeSBpbiByZXNvbHZpbmcgc3RhdGVcbiIsCisJcHJfaW5mbygiKCVzKSBlbnRyeSBhbHJlYWR5IGluIHJlc29sdmluZyBzdGF0ZVxuIiwKIAkJKG1wYy0+ZGV2KSA/IG1wYy0+ZGV2LT5uYW1lIDogIjx1bmtub3duPiIpOwogCW1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOwogCXJldHVybjsKQEAgLTEwODAsMjMgKzExMjgsMjUgQEAKICAqIFRoaW5ncyBnZXQgY29tcGxpY2F0ZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW4gZWdyZXNzCiAgKiBzaG9ydGN1dCB3aXRoIHN1aXRhYmxlIHRyYWZmaWMgcGFyYW1ldGVycyB3ZSBjb3VsZCB1c2UuCiAgKi8KLXN0YXRpYyB2b2lkIGNoZWNrX3Fvc19hbmRfb3Blbl9zaG9ydGN1dChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50LCBpbl9jYWNoZV9lbnRyeSAqZW50cnkpCitzdGF0aWMgdm9pZCBjaGVja19xb3NfYW5kX29wZW5fc2hvcnRjdXQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLAorCQkJCQlzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCwKKwkJCQkJaW5fY2FjaGVfZW50cnkgKmVudHJ5KQogewogCV9fYmUzMiBkc3RfaXAgPSBtc2ctPmNvbnRlbnQuaW5faW5mby5pbl9kc3RfaXA7CiAJc3RydWN0IGF0bV9tcG9hX3FvcyAqcW9zID0gYXRtX21wb2Ffc2VhcmNoX3Fvcyhkc3RfaXApOwogCWVnX2NhY2hlX2VudHJ5ICplZ19lbnRyeSA9IGNsaWVudC0+ZWdfb3BzLT5nZXRfYnlfc3JjX2lwKGRzdF9pcCwgY2xpZW50KTsKIAotCWlmKGVnX2VudHJ5ICYmIGVnX2VudHJ5LT5zaG9ydGN1dCl7Ci0JCWlmKGVnX2VudHJ5LT5zaG9ydGN1dC0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAmCi0JCSAgIG1zZy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAmCi0JCSAgIChxb3MgPyBxb3MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgOiBBVE1fVUJSIHwgQVRNX0NCUikpewotCQkJICAgIGlmKGVnX2VudHJ5LT5zaG9ydGN1dC0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fVUJSKQotCQkJCSAgICBlbnRyeS0+c2hvcnRjdXQgPSBlZ19lbnRyeS0+c2hvcnRjdXQ7Ci0JCQkgICAgZWxzZSBpZihlZ19lbnRyeS0+c2hvcnRjdXQtPnFvcy50eHRwLm1heF9wY3IgPiAwKQotCQkJCSAgICBlbnRyeS0+c2hvcnRjdXQgPSBlZ19lbnRyeS0+c2hvcnRjdXQ7CisJaWYgKGVnX2VudHJ5ICYmIGVnX2VudHJ5LT5zaG9ydGN1dCkgeworCQlpZiAoZWdfZW50cnktPnNob3J0Y3V0LT5xb3MudHh0cC50cmFmZmljX2NsYXNzICYKKwkJICAgIG1zZy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAmCisJCSAgICAocW9zID8gcW9zLT5xb3MudHh0cC50cmFmZmljX2NsYXNzIDogQVRNX1VCUiB8IEFUTV9DQlIpKSB7CisJCQlpZiAoZWdfZW50cnktPnNob3J0Y3V0LT5xb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9VQlIpCisJCQkJZW50cnktPnNob3J0Y3V0ID0gZWdfZW50cnktPnNob3J0Y3V0OworCQkJZWxzZSBpZiAoZWdfZW50cnktPnNob3J0Y3V0LT5xb3MudHh0cC5tYXhfcGNyID4gMCkKKwkJCQllbnRyeS0+c2hvcnRjdXQgPSBlZ19lbnRyeS0+c2hvcnRjdXQ7CiAJCX0KLQkJaWYoZW50cnktPnNob3J0Y3V0KXsKLQkJCWRwcmludGsoIm1wb2E6ICglcykgdXNpbmcgZWdyZXNzIFNWQyB0byByZWFjaCAlcEk0XG4iLAorCQlpZiAoZW50cnktPnNob3J0Y3V0KSB7CisJCQlkcHJpbnRrKCIoJXMpIHVzaW5nIGVncmVzcyBTVkMgdG8gcmVhY2ggJXBJNFxuIiwKIAkJCQljbGllbnQtPmRldi0+bmFtZSwgJmRzdF9pcCk7CiAJCQljbGllbnQtPmVnX29wcy0+cHV0KGVnX2VudHJ5KTsKIAkJCXJldHVybjsKQEAgLTExMDcsMTIgKzExNTcsMTMgQEAKIAogCS8qIE5vIGx1Y2sgaW4gdGhlIGVncmVzcyBjYWNoZSB3ZSBtdXN0IG9wZW4gYW4gaW5ncmVzcyBTVkMgKi8KIAltc2ctPnR5cGUgPSBPUEVOX0lOR1JFU1NfU1ZDOwotCWlmIChxb3MgJiYgKHFvcy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBtc2ctPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MpKQotCXsKKwlpZiAocW9zICYmCisJICAgIChxb3MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gbXNnLT5xb3MudHh0cC50cmFmZmljX2NsYXNzKSkgewogCQltc2ctPnFvcyA9IHFvcy0+cW9zOwotCQlwcmludGsoIm1wb2E6ICglcykgdHJ5aW5nIHRvIGdldCBhIENCUiBzaG9ydGN1dFxuIixjbGllbnQtPmRldi0+bmFtZSk7Ci0JfQotCWVsc2UgbWVtc2V0KCZtc2ctPnFvcywwLHNpemVvZihzdHJ1Y3QgYXRtX3FvcykpOworCQlwcl9pbmZvKCIoJXMpIHRyeWluZyB0byBnZXQgYSBDQlIgc2hvcnRjdXRcbiIsCisJCQljbGllbnQtPmRldi0+bmFtZSk7CisJfSBlbHNlCisJCW1lbXNldCgmbXNnLT5xb3MsIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3FvcykpOwogCW1zZ190b19tcG9hZChtc2csIGNsaWVudCk7CiAJcmV0dXJuOwogfQpAQCAtMTEyMiwxNyArMTE3MywxOSBAQAogCV9fYmUzMiBkc3RfaXAgPSBtc2ctPmNvbnRlbnQuaW5faW5mby5pbl9kc3RfaXA7CiAJaW5fY2FjaGVfZW50cnkgKmVudHJ5ID0gbXBjLT5pbl9vcHMtPmdldChkc3RfaXAsIG1wYyk7CiAKLQlkcHJpbnRrKCJtcG9hOiAoJXMpIE1QT0FfcmVzX3JlcGx5X3JjdmQ6IGlwICVwSTRcbiIsCisJZHByaW50aygiKCVzKSBpcCAlcEk0XG4iLAogCQltcGMtPmRldi0+bmFtZSwgJmRzdF9pcCk7Ci0JZGRwcmludGsoIm1wb2E6ICglcykgTVBPQV9yZXNfcmVwbHlfcmN2ZCgpIGVudHJ5ID0gJXAiLCBtcGMtPmRldi0+bmFtZSwgZW50cnkpOwotCWlmKGVudHJ5ID09IE5VTEwpewotCQlwcmludGsoIlxubXBvYTogKCVzKSBBUkdILCByZWNlaXZlZCByZXMuIHJlcGx5IGZvciBhbiBlbnRyeSB0aGF0IGRvZXNuJ3QgZXhpc3QuXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJZGRwcmludGsoIiglcykgZW50cnkgPSAlcCIsCisJCSBtcGMtPmRldi0+bmFtZSwgZW50cnkpOworCWlmIChlbnRyeSA9PSBOVUxMKSB7CisJCXByX2luZm8oIiglcykgQVJHSCwgcmVjZWl2ZWQgcmVzLiByZXBseSBmb3IgYW4gZW50cnkgdGhhdCBkb2Vzbid0IGV4aXN0LlxuIiwKKwkJCW1wYy0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KLQlkZHByaW50aygiIGVudHJ5X3N0YXRlID0gJWQgIiwgZW50cnktPmVudHJ5X3N0YXRlKTsKKwlkZHByaW50a19jb250KCIgZW50cnlfc3RhdGUgPSAlZCAiLCBlbnRyeS0+ZW50cnlfc3RhdGUpOwogCiAJaWYgKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVkVEKSB7Ci0JCXByaW50aygiXG5tcG9hOiAoJXMpIE1QT0FfcmVzX3JlcGx5X3JjdmQgZm9yIFJFU09MVkVEIGVudHJ5IVxuIiwgbXBjLT5kZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIFJFU09MVkVEIGVudHJ5IVxuIiwgbXBjLT5kZXYtPm5hbWUpOwogCQltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNDEsMTcgKzExOTQsMTggQEAKIAlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+dHYpKTsKIAlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+cmVwbHlfd2FpdCkpOyAvKiBVc2VkIGluIHJlZnJlc2hpbmcgZnVuYyBmcm9tIG5vdyBvbiAqLwogCWVudHJ5LT5yZWZyZXNoX3RpbWUgPSAwOwotCWRkcHJpbnRrKCJlbnRyeS0+c2hvcnRjdXQgPSAlcFxuIiwgZW50cnktPnNob3J0Y3V0KTsKKwlkZHByaW50a19jb250KCJlbnRyeS0+c2hvcnRjdXQgPSAlcFxuIiwgZW50cnktPnNob3J0Y3V0KTsKIAotCWlmKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVklORyAmJiBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCl7CisJaWYgKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVklORyAmJgorCSAgICBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkgewogCQllbnRyeS0+ZW50cnlfc3RhdGUgPSBJTkdSRVNTX1JFU09MVkVEOwogCQltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAkJcmV0dXJuOyAvKiBTaG9ydGN1dCBhbHJlYWR5IG9wZW4uLi4gKi8KIAl9CiAKIAlpZiAoZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIE1QT0FfcmVzX3JlcGx5X3JjdmQ6IGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMLCBpbXBvc3NpYmxlIVxuIiwKLQkJICAgICAgIG1wYy0+ZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiKCVzKSBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCwgaW1wb3NzaWJsZSFcbiIsCisJCQltcGMtPmRldi0+bmFtZSk7CiAJCW1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOwogCQlyZXR1cm47CiAJfQpAQCAtMTE3MCwxNCArMTIyNCwxNCBAQAogCV9fYmUzMiBtYXNrID0gbXNnLT5pcF9tYXNrOwogCWluX2NhY2hlX2VudHJ5ICplbnRyeSA9IG1wYy0+aW5fb3BzLT5nZXRfd2l0aF9tYXNrKGRzdF9pcCwgbXBjLCBtYXNrKTsKIAotCWlmKGVudHJ5ID09IE5VTEwpewotCQlwcmludGsoIm1wb2E6ICglcykgaW5ncmVzc19wdXJnZV9yY3ZkOiBwdXJnZSBmb3IgYSBub24tZXhpc3RpbmcgZW50cnksIGlwID0gJXBJNFxuIiwKLQkJICAgICAgIG1wYy0+ZGV2LT5uYW1lLCAmZHN0X2lwKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkgeworCQlwcl9pbmZvKCIoJXMpIHB1cmdlIGZvciBhIG5vbi1leGlzdGluZyBlbnRyeSwgaXAgPSAlcEk0XG4iLAorCQkJbXBjLT5kZXYtPm5hbWUsICZkc3RfaXApOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIGluZ3Jlc3NfcHVyZ2VfcmN2ZDogcmVtb3ZpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAlcEk0XG4iLAorCQlkcHJpbnRrKCIoJXMpIHJlbW92aW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXBJNFxuIiwKIAkJCW1wYy0+ZGV2LT5uYW1lLCAmZHN0X2lwKTsKIAkJd3JpdGVfbG9ja19iaCgmbXBjLT5pbmdyZXNzX2xvY2spOwogCQltcGMtPmluX29wcy0+cmVtb3ZlX2VudHJ5KGVudHJ5LCBtcGMpOwpAQCAtMTE5NSw3ICsxMjQ5LDggQEAKIAllZ19jYWNoZV9lbnRyeSAqZW50cnkgPSBtcGMtPmVnX29wcy0+Z2V0X2J5X2NhY2hlX2lkKGNhY2hlX2lkLCBtcGMpOwogCiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJZHByaW50aygibXBvYTogKCVzKSBlZ3Jlc3NfcHVyZ2VfcmN2ZDogcHVyZ2UgZm9yIGEgbm9uLWV4aXN0aW5nIGVudHJ5XG4iLCBtcGMtPmRldi0+bmFtZSk7CisJCWRwcmludGsoIiglcykgcHVyZ2UgZm9yIGEgbm9uLWV4aXN0aW5nIGVudHJ5XG4iLAorCQkJbXBjLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjE0LDE1ICsxMjY5LDE1IEBACiAJc3RydWN0IGtfbWVzc2FnZSAqcHVyZ2VfbXNnOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlkcHJpbnRrKCJtcG9hOiBwdXJnZV9lZ3Jlc3Nfc2hvcnRjdXQ6IGVudGVyaW5nXG4iKTsKKwlkcHJpbnRrKCJlbnRlcmluZ1xuIik7CiAJaWYgKHZjYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogcHVyZ2VfZWdyZXNzX3Nob3J0Y3V0OiB2Y2MgPT0gTlVMTFxuIik7CisJCXByX2luZm8oInZjYyA9PSBOVUxMXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGtfbWVzc2FnZSksIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewotCQkgcHJpbnRrKCJtcG9hOiBwdXJnZV9lZ3Jlc3Nfc2hvcnRjdXQ6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9pbmZvKCJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIzOCw3ICsxMjkzLDcgQEAKIAlzayA9IHNrX2F0bSh2Y2MpOwogCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOwotCWRwcmludGsoIm1wb2E6IHB1cmdlX2VncmVzc19zaG9ydGN1dDogZXhpdGluZzpcbiIpOworCWRwcmludGsoImV4aXRpbmdcbiIpOwogCiAJcmV0dXJuOwogfQpAQCAtMTI0NywxNCArMTMwMiwxNCBAQAogICogT3VyIE1QUyBkaWVkLiBUZWxsIG91ciBkYWVtb24gdG8gc2VuZCBOSFJQIGRhdGEgcGxhbmUgcHVyZ2UgdG8gZWFjaAogICogb2YgdGhlIGVncmVzcyBzaG9ydGN1dHMgd2UgaGF2ZS4KICAqLwotc3RhdGljIHZvaWQgbXBzX2RlYXRoKCBzdHJ1Y3Qga19tZXNzYWdlICogbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKiBtcGMgKQorc3RhdGljIHZvaWQgbXBzX2RlYXRoKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5OwogCi0JZHByaW50aygibXBvYTogKCVzKSBtcHNfZGVhdGg6XG4iLCBtcGMtPmRldi0+bmFtZSk7CisJZHByaW50aygiKCVzKVxuIiwgbXBjLT5kZXYtPm5hbWUpOwogCi0JaWYobWVtY21wKG1zZy0+TVBTX2N0cmwsIG1wYy0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4pKXsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wc19kZWF0aDogd3JvbmcgTVBTXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJaWYgKG1lbWNtcChtc2ctPk1QU19jdHJsLCBtcGMtPm1wc19jdHJsX2FkZHIsIEFUTV9FU0FfTEVOKSkgeworCQlwcl9pbmZvKCIoJXMpIHdyb25nIE1QU1xuIiwgbXBjLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjczLDIwICsxMzI4LDIxIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBNUE9BX2NhY2hlX2ltcG9zX3JjdmQoIHN0cnVjdCBrX21lc3NhZ2UgKiBtc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqIG1wYykKK3N0YXRpYyB2b2lkIE1QT0FfY2FjaGVfaW1wb3NfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csCisJCQkJICBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKIAl1aW50MTZfdCBob2xkaW5nX3RpbWU7CiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5ID0gbXBjLT5lZ19vcHMtPmdldF9ieV9jYWNoZV9pZChtc2ctPmNvbnRlbnQuZWdfaW5mby5jYWNoZV9pZCwgbXBjKTsKIAogCWhvbGRpbmdfdGltZSA9IG1zZy0+Y29udGVudC5lZ19pbmZvLmhvbGRpbmdfdGltZTsKLQlkcHJpbnRrKCJtcG9hOiAoJXMpIE1QT0FfY2FjaGVfaW1wb3NfcmN2ZDogZW50cnkgPSAlcCwgaG9sZGluZ190aW1lID0gJXVcbiIsCi0JICAgICAgIG1wYy0+ZGV2LT5uYW1lLCBlbnRyeSwgaG9sZGluZ190aW1lKTsKLQlpZihlbnRyeSA9PSBOVUxMICYmIGhvbGRpbmdfdGltZSkgeworCWRwcmludGsoIiglcykgZW50cnkgPSAlcCwgaG9sZGluZ190aW1lID0gJXVcbiIsCisJCW1wYy0+ZGV2LT5uYW1lLCBlbnRyeSwgaG9sZGluZ190aW1lKTsKKwlpZiAoZW50cnkgPT0gTlVMTCAmJiBob2xkaW5nX3RpbWUpIHsKIAkJZW50cnkgPSBtcGMtPmVnX29wcy0+YWRkX2VudHJ5KG1zZywgbXBjKTsKIAkJbXBjLT5lZ19vcHMtPnB1dChlbnRyeSk7CiAJCXJldHVybjsKIAl9Ci0JaWYoaG9sZGluZ190aW1lKXsKKwlpZiAoaG9sZGluZ190aW1lKSB7CiAJCW1wYy0+ZWdfb3BzLT51cGRhdGUoZW50cnksIGhvbGRpbmdfdGltZSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzAwLDcgKzEzNTYsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgc2V0X21wY19jdHJsX2FkZHJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptZXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKK3N0YXRpYyB2b2lkIHNldF9tcGNfY3RybF9hZGRyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbWVzZywKKwkJCQkgICBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKIAlzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CiAJaW50IGksIHJldHZhbCA7CkBAIC0xMzE1LDM0ICsxMzcyLDM5IEBACiAJbWVtY3B5KCZ0bHZbN10sIG1lc2ctPk1QU19jdHJsLCBBVE1fRVNBX0xFTik7IC8qIE1QQyBjdHJsIEFUTSBhZGRyICovCiAJbWVtY3B5KG1wYy0+b3VyX2N0cmxfYWRkciwgbWVzZy0+TVBTX2N0cmwsIEFUTV9FU0FfTEVOKTsKIAotCWRwcmludGsoIm1wb2E6ICglcykgc2V0dGluZyBNUEMgY3RybCBBVE0gYWRkcmVzcyB0byAiLAotCSAgICAgICAobXBjLT5kZXYpID8gbXBjLT5kZXYtPm5hbWUgOiAiPHVua25vd24+Iik7CisJZHByaW50aygiKCVzKSBzZXR0aW5nIE1QQyBjdHJsIEFUTSBhZGRyZXNzIHRvIiwKKwkJbXBjLT5kZXYgPyBtcGMtPmRldi0+bmFtZSA6ICI8dW5rbm93bj4iKTsKIAlmb3IgKGkgPSA3OyBpIDwgc2l6ZW9mKHRsdik7IGkrKykKLQkJZHByaW50aygiJTAyeCAiLCB0bHZbaV0pOwotCWRwcmludGsoIlxuIik7CisJCWRwcmludGtfY29udCgiICUwMngiLCB0bHZbaV0pOworCWRwcmludGtfY29udCgiXG4iKTsKIAogCWlmIChtcGMtPmRldikgewogCQlwcml2ID0gbmV0ZGV2X3ByaXYobXBjLT5kZXYpOwotCQlyZXR2YWwgPSBwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9yZXEobXBjLT5kZXYsIG1wYy0+ZGV2LT5kZXZfYWRkciwgdGx2LCBzaXplb2YodGx2KSk7CisJCXJldHZhbCA9IHByaXYtPmxhbmUyX29wcy0+YXNzb2NpYXRlX3JlcShtcGMtPmRldiwKKwkJCQkJCQltcGMtPmRldi0+ZGV2X2FkZHIsCisJCQkJCQkJdGx2LCBzaXplb2YodGx2KSk7CiAJCWlmIChyZXR2YWwgPT0gMCkKLQkJCXByaW50aygibXBvYTogKCVzKSBNUE9BIGRldmljZSB0eXBlIFRMViBhc3NvY2lhdGlvbiBmYWlsZWRcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwkJCXByX2luZm8oIiglcykgTVBPQSBkZXZpY2UgdHlwZSBUTFYgYXNzb2NpYXRpb24gZmFpbGVkXG4iLAorCQkJCW1wYy0+ZGV2LT5uYW1lKTsKIAkJcmV0dmFsID0gcHJpdi0+bGFuZTJfb3BzLT5yZXNvbHZlKG1wYy0+ZGV2LCBOVUxMLCAxLCBOVUxMLCBOVUxMKTsKIAkJaWYgKHJldHZhbCA8IDApCi0JCQlwcmludGsoIm1wb2E6ICglcykgdGFyZ2V0bGVzcyBMRV9BUlAgcmVxdWVzdCBmYWlsZWRcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwkJCXByX2luZm8oIiglcykgdGFyZ2V0bGVzcyBMRV9BUlAgcmVxdWVzdCBmYWlsZWRcbiIsCisJCQkJbXBjLT5kZXYtPm5hbWUpOwogCX0KIAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgc2V0X21wc19tYWNfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBzZXRfbXBzX21hY19hZGRyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLAorCQkJCSAgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpCiB7CiAKLQlpZihjbGllbnQtPm51bWJlcl9vZl9tcHNfbWFjcykKKwlpZiAoY2xpZW50LT5udW1iZXJfb2ZfbXBzX21hY3MpCiAJCWtmcmVlKGNsaWVudC0+bXBzX21hY3MpOwogCWNsaWVudC0+bnVtYmVyX29mX21wc19tYWNzID0gMDsKIAljbGllbnQtPm1wc19tYWNzID0ga21lbWR1cChtc2ctPk1QU19jdHJsLCBFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNsaWVudC0+bXBzX21hY3MgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IHNldF9tcHNfbWFjX2FkZHJfcmN2ZDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2luZm8oIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm47CiAJfQogCWNsaWVudC0+bnVtYmVyX29mX21wc19tYWNzID0gMTsKQEAgLTEzNjMsMTEgKzE0MjUsMTEgQEAKIAkvKiBGSVhNRTogVGhpcyBrbm93cyB0b28gbXVjaCBvZiB0aGUgY2FjaGUgc3RydWN0dXJlICovCiAJcmVhZF9sb2NrX2lycSgmbXBjLT5lZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBtcGMtPmVnX2NhY2hlOwotCXdoaWxlIChlbnRyeSAhPSBOVUxMKXsKLQkJICAgIG1zZy0+Y29udGVudC5lZ19pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKLQkJICAgIGRwcmludGsoIm1wb2E6IGNhY2hlX2lkICV1XG4iLCBlbnRyeS0+Y3RybF9pbmZvLmNhY2hlX2lkKTsKLQkJICAgIG1zZ190b19tcG9hZChtc2csIG1wYyk7Ci0JCSAgICBlbnRyeSA9IGVudHJ5LT5uZXh0OworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCW1zZy0+Y29udGVudC5lZ19pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKKwkJZHByaW50aygiY2FjaGVfaWQgJXVcbiIsIGVudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQpOworCQltc2dfdG9fbXBvYWQobXNnLCBtcGMpOworCQllbnRyeSA9IGVudHJ5LT5uZXh0OwogCX0KIAlyZWFkX3VubG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCkBAIC0xMzg2LDIwICsxNDQ4LDIyIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBtcGNfY2FjaGVfY2hlY2soIHVuc2lnbmVkIGxvbmcgY2hlY2tpbmdfdGltZSAgKQorc3RhdGljIHZvaWQgbXBjX2NhY2hlX2NoZWNrKHVuc2lnbmVkIGxvbmcgY2hlY2tpbmdfdGltZSkKIHsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyA9IG1wY3M7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfcmVzb2x2aW5nX2NoZWNrX3RpbWU7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfcmVmcmVzaF90aW1lOwogCi0Jd2hpbGUoIG1wYyAhPSBOVUxMICl7CisJd2hpbGUgKG1wYyAhPSBOVUxMKSB7CiAJCW1wYy0+aW5fb3BzLT5jbGVhcl9jb3VudChtcGMpOwogCQltcGMtPmVnX29wcy0+Y2xlYXJfZXhwaXJlZChtcGMpOwotCQlpZihjaGVja2luZ190aW1lIC0gcHJldmlvdXNfcmVzb2x2aW5nX2NoZWNrX3RpbWUgPiBtcGMtPnBhcmFtZXRlcnMubXBjX3A0ICogSFogKXsKKwkJaWYgKGNoZWNraW5nX3RpbWUgLSBwcmV2aW91c19yZXNvbHZpbmdfY2hlY2tfdGltZSA+CisJCSAgICBtcGMtPnBhcmFtZXRlcnMubXBjX3A0ICogSFopIHsKIAkJCW1wYy0+aW5fb3BzLT5jaGVja19yZXNvbHZpbmcobXBjKTsKIAkJCXByZXZpb3VzX3Jlc29sdmluZ19jaGVja190aW1lID0gY2hlY2tpbmdfdGltZTsKIAkJfQotCQlpZihjaGVja2luZ190aW1lIC0gcHJldmlvdXNfcmVmcmVzaF90aW1lID4gbXBjLT5wYXJhbWV0ZXJzLm1wY19wNSAqIEhaICl7CisJCWlmIChjaGVja2luZ190aW1lIC0gcHJldmlvdXNfcmVmcmVzaF90aW1lID4KKwkJICAgIG1wYy0+cGFyYW1ldGVycy5tcGNfcDUgKiBIWikgewogCQkJbXBjLT5pbl9vcHMtPnJlZnJlc2gobXBjKTsKIAkJCXByZXZpb3VzX3JlZnJlc2hfdGltZSA9IGNoZWNraW5nX3RpbWU7CiAJCX0KQEAgLTE0MTAsNyArMTQ3NCw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGF0bV9tcG9hX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBhdG1fbXBvYV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwpAQCAtMTQyMiwyMSArMTQ4NywyMCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBBVE1NUENfQ1RSTDoKLQkJCWVyciA9IGF0bV9tcG9hX21wb2FkX2F0dGFjaCh2Y2MsIChpbnQpYXJnKTsKLQkJCWlmIChlcnIgPj0gMCkKLQkJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKLQkJCWJyZWFrOwotCQljYXNlIEFUTU1QQ19EQVRBOgotCQkJZXJyID0gYXRtX21wb2FfdmNjX2F0dGFjaCh2Y2MsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWNhc2UgQVRNTVBDX0NUUkw6CisJCWVyciA9IGF0bV9tcG9hX21wb2FkX2F0dGFjaCh2Y2MsIChpbnQpYXJnKTsKKwkJaWYgKGVyciA+PSAwKQorCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CisJCWJyZWFrOworCWNhc2UgQVRNTVBDX0RBVEE6CisJCWVyciA9IGF0bV9tcG9hX3ZjY19hdHRhY2godmNjLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBhdG1faW9jdGxfb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAk9IGF0bV9tcG9hX2lvY3RsLApAQCAtMTQ0Nyw5ICsxNTExLDkgQEAKIAlyZWdpc3Rlcl9hdG1faW9jdGwoJmF0bV9pb2N0bF9vcHMpOwogCiAJaWYgKG1wY19wcm9jX2luaXQoKSAhPSAwKQotCQlwcmludGsoS0VSTl9JTkZPICJtcG9hOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAvcHJvYy9tcG9hXG4iKTsKKwkJcHJfaW5mbygiZmFpbGVkIHRvIGluaXRpYWxpemUgL3Byb2MvbXBvYVxuIik7CiAKLQlwcmludGsoIm1wYy5jOiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiIGluaXRpYWxpemVkXG4iKTsKKwlwcl9pbmZvKCJtcGMuYzogIiBfX0RBVEVfXyAiICIgX19USU1FX18gIiBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NzYsMTUgKzE1NDAsMTUgQEAKIAkJCWlmIChwcml2LT5sYW5lMl9vcHMgIT0gTlVMTCkKIAkJCQlwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9pbmRpY2F0b3IgPSBOVUxMOwogCQl9Ci0JCWRkcHJpbnRrKCJtcG9hOiBjbGVhbnVwX21vZHVsZTogYWJvdXQgdG8gY2xlYXIgY2FjaGVzXG4iKTsKKwkJZGRwcmludGsoImFib3V0IHRvIGNsZWFyIGNhY2hlc1xuIik7CiAJCW1wYy0+aW5fb3BzLT5kZXN0cm95X2NhY2hlKG1wYyk7CiAJCW1wYy0+ZWdfb3BzLT5kZXN0cm95X2NhY2hlKG1wYyk7Ci0JCWRkcHJpbnRrKCJtcG9hOiBjbGVhbnVwX21vZHVsZTogY2FjaGVzIGNsZWFyZWRcbiIpOworCQlkZHByaW50aygiY2FjaGVzIGNsZWFyZWRcbiIpOwogCQlrZnJlZShtcGMtPm1wc19tYWNzKTsKIAkJbWVtc2V0KG1wYywgMCwgc2l6ZW9mKHN0cnVjdCBtcG9hX2NsaWVudCkpOwotCQlkZHByaW50aygibXBvYTogY2xlYW51cF9tb2R1bGU6IGFib3V0IHRvIGtmcmVlICVwXG4iLCBtcGMpOworCQlkZHByaW50aygiYWJvdXQgdG8ga2ZyZWUgJXBcbiIsIG1wYyk7CiAJCWtmcmVlKG1wYyk7Ci0JCWRkcHJpbnRrKCJtcG9hOiBjbGVhbnVwX21vZHVsZTogbmV4dCBtcGMgaXMgYXQgJXBcbiIsIHRtcCk7CisJCWRkcHJpbnRrKCJuZXh0IG1wYyBpcyBhdCAlcFxuIiwgdG1wKTsKIAkJbXBjID0gdG1wOwogCX0KIApAQCAtMTQ5Miw3ICsxNTU2LDcgQEAKIAlxb3NfaGVhZCA9IE5VTEw7CiAJd2hpbGUgKHFvcyAhPSBOVUxMKSB7CiAJCW5leHRxb3MgPSBxb3MtPm5leHQ7Ci0JCWRwcmludGsoIm1wb2E6IGNsZWFudXBfbW9kdWxlOiBmcmVlaW5nIHFvcyBlbnRyeSAlcFxuIiwgcW9zKTsKKwkJZHByaW50aygiZnJlZWluZyBxb3MgZW50cnkgJXBcbiIsIHFvcyk7CiAJCWtmcmVlKHFvcyk7CiAJCXFvcyA9IG5leHRxb3M7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcG9hX2NhY2hlcy5jIGIvbmV0L2F0bS9tcG9hX2NhY2hlcy5jCmluZGV4IDQ1MDRhNGIuLjRjMTQxODEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBvYV9jYWNoZXMuYworKysgYi9uZXQvYXRtL21wb2FfY2FjaGVzLmMKQEAgLTExLDE1ICsxMSwyMyBAQAogICovCiAKICNpZiAwCi0jZGVmaW5lIGRwcmludGsgcHJpbnRrICAgIC8qIGRlYnVnICovCisjZGVmaW5lIGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQkJCQkJXAorCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sICMjYXJncykgIC8qIGRlYnVnICovCiAjZWxzZQotI2RlZmluZSBkcHJpbnRrKGZvcm1hdCxhcmdzLi4uKQorI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7IGlmICgwKQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sICMjYXJncyk7XAorCX0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIDAKLSNkZWZpbmUgZGRwcmludGsgcHJpbnRrICAvKiBtb3JlIGRlYnVnICovCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpICAvKiBkZWJ1ZyAqLwogI2Vsc2UKLSNkZWZpbmUgZGRwcmludGsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7IGlmICgwKQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sICMjYXJncyk7XAorCX0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9nZXQoX19iZTMyIGRzdF9pcCwKQEAgLTI5LDggKzM3LDggQEAKIAogCXJlYWRfbG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwogCWVudHJ5ID0gY2xpZW50LT5pbl9jYWNoZTsKLQl3aGlsZShlbnRyeSAhPSBOVUxMKXsKLQkJaWYoIGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwID09IGRzdF9pcCApeworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCWlmIChlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCA9PSBkc3RfaXApIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAkJCXJldHVybiBlbnRyeTsKQEAgLTUwLDggKzU4LDggQEAKIAogCXJlYWRfbG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwogCWVudHJ5ID0gY2xpZW50LT5pbl9jYWNoZTsKLQl3aGlsZShlbnRyeSAhPSBOVUxMKXsKLQkJaWYoKGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwICYgbWFzaykgID09IChkc3RfaXAgJiBtYXNrICkpeworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCWlmICgoZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXAgJiBtYXNrKSA9PSAoZHN0X2lwICYgbWFzaykpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAkJCXJldHVybiBlbnRyeTsKQEAgLTY1LDE0ICs3MywxNCBAQAogfQogCiBzdGF0aWMgaW5fY2FjaGVfZW50cnkgKmluX2NhY2hlX2dldF9ieV92Y2Moc3RydWN0IGF0bV92Y2MgKnZjYywKLQkJCQkJICAgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQgKQorCQkJCQkgICBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKIHsKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnk7CiAKIAlyZWFkX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAllbnRyeSA9IGNsaWVudC0+aW5fY2FjaGU7Ci0Jd2hpbGUoZW50cnkgIT0gTlVMTCl7Ci0JCWlmKGVudHJ5LT5zaG9ydGN1dCA9PSB2Y2MpIHsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoZW50cnktPnNob3J0Y3V0ID09IHZjYykgewogCQkJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAJCQlyZWFkX3VubG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwogCQkJcmV0dXJuIGVudHJ5OwpAQCAtOTAsMTQgKzk4LDE0IEBACiAJaW5fY2FjaGVfZW50cnkgKmVudHJ5ID0ga3phbGxvYyhzaXplb2YoaW5fY2FjaGVfZW50cnkpLCBHRlBfS0VSTkVMKTsKIAogCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogbmV3X2luX2NhY2hlX2VudHJ5OiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJfaW5mbygibXBvYTogbXBvYV9jYWNoZXMuYzogbmV3X2luX2NhY2hlX2VudHJ5OiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogYWRkaW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXBJNFxuIiwgJmRzdF9pcCk7CisJZHByaW50aygiYWRkaW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXBJNFxuIiwgJmRzdF9pcCk7CiAKIAlhdG9taWNfc2V0KCZlbnRyeS0+dXNlLCAxKTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfaW5fY2FjaGVfZW50cnk6IGFib3V0IHRvIGxvY2tcbiIpOworCWRwcmludGsoIm5ld19pbl9jYWNoZV9lbnRyeTogYWJvdXQgdG8gbG9ja1xuIik7CiAJd3JpdGVfbG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwogCWVudHJ5LT5uZXh0ID0gY2xpZW50LT5pbl9jYWNoZTsKIAllbnRyeS0+cHJldiA9IE5VTEw7CkBAIC0xMTUsNyArMTIzLDcgQEAKIAlhdG9taWNfaW5jKCZlbnRyeS0+dXNlKTsKIAogCXdyaXRlX3VubG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19pbl9jYWNoZV9lbnRyeTogdW5sb2NrZWRcbiIpOworCWRwcmludGsoIm5ld19pbl9jYWNoZV9lbnRyeTogdW5sb2NrZWRcbiIpOwogCiAJcmV0dXJuIGVudHJ5OwogfQpAQCAtMTI2LDM5ICsxMzQsNDEgQEAKIAlzdHJ1Y3Qga19tZXNzYWdlIG1zZzsKIAogCWVudHJ5LT5jb3VudCsrOwotCWlmKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVkVEICYmIGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMKQorCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZFRCAmJiBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkKIAkJcmV0dXJuIE9QRU47CiAKLQlpZihlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRUZSRVNISU5HKXsKLQkJaWYoZW50cnktPmNvdW50ID4gbXBjLT5wYXJhbWV0ZXJzLm1wY19wMSl7CisJaWYgKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFRlJFU0hJTkcpIHsKKwkJaWYgKGVudHJ5LT5jb3VudCA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDEpIHsKIAkJCW1zZy50eXBlID0gU05EX01QT0FfUkVTX1JRU1Q7CiAJCQltc2cuY29udGVudC5pbl9pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKIAkJCW1lbWNweShtc2cuTVBTX2N0cmwsIG1wYy0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4pOwogCQkJcW9zID0gYXRtX21wb2Ffc2VhcmNoX3FvcyhlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7Ci0JCQlpZiAocW9zICE9IE5VTEwpIG1zZy5xb3MgPSBxb3MtPnFvczsKKwkJCWlmIChxb3MgIT0gTlVMTCkKKwkJCQltc2cucW9zID0gcW9zLT5xb3M7CiAJCQltc2dfdG9fbXBvYWQoJm1zZywgbXBjKTsKIAkJCWRvX2dldHRpbWVvZmRheSgmKGVudHJ5LT5yZXBseV93YWl0KSk7CiAJCQllbnRyeS0+ZW50cnlfc3RhdGUgPSBJTkdSRVNTX1JFU09MVklORzsKIAkJfQotCQlpZihlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkKKwkJaWYgKGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMKQogCQkJcmV0dXJuIE9QRU47CiAJCXJldHVybiBDTE9TRUQ7CiAJfQogCi0JaWYoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWSU5HICYmIGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMKQorCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZJTkcgJiYgZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpCiAJCXJldHVybiBPUEVOOwogCi0JaWYoIGVudHJ5LT5jb3VudCA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDEgJiYKLQkgICAgZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfSU5WQUxJRCl7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgbXBvYV9jYWNoZXMuYzogdGhyZXNob2xkIGV4Y2VlZGVkIGZvciBpcCAlcEk0LCBzZW5kaW5nIE1QT0EgcmVzIHJlcVxuIiwKKwlpZiAoZW50cnktPmNvdW50ID4gbXBjLT5wYXJhbWV0ZXJzLm1wY19wMSAmJgorCSAgICBlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19JTlZBTElEKSB7CisJCWRwcmludGsoIiglcykgdGhyZXNob2xkIGV4Y2VlZGVkIGZvciBpcCAlcEk0LCBzZW5kaW5nIE1QT0EgcmVzIHJlcVxuIiwKIAkJCW1wYy0+ZGV2LT5uYW1lLCAmZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwogCQllbnRyeS0+ZW50cnlfc3RhdGUgPSBJTkdSRVNTX1JFU09MVklORzsKLQkJbXNnLnR5cGUgPSAgU05EX01QT0FfUkVTX1JRU1Q7Ci0JCW1lbWNweShtc2cuTVBTX2N0cmwsIG1wYy0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4gKTsKKwkJbXNnLnR5cGUgPSBTTkRfTVBPQV9SRVNfUlFTVDsKKwkJbWVtY3B5KG1zZy5NUFNfY3RybCwgbXBjLT5tcHNfY3RybF9hZGRyLCBBVE1fRVNBX0xFTik7CiAJCW1zZy5jb250ZW50LmluX2luZm8gPSBlbnRyeS0+Y3RybF9pbmZvOwogCQlxb3MgPSBhdG1fbXBvYV9zZWFyY2hfcW9zKGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKLQkJaWYgKHFvcyAhPSBOVUxMKSBtc2cucW9zID0gcW9zLT5xb3M7Ci0JCW1zZ190b19tcG9hZCggJm1zZywgbXBjKTsKKwkJaWYgKHFvcyAhPSBOVUxMKQorCQkJbXNnLnFvcyA9IHFvcy0+cW9zOworCQltc2dfdG9fbXBvYWQoJm1zZywgbXBjKTsKIAkJZG9fZ2V0dGltZW9mZGF5KCYoZW50cnktPnJlcGx5X3dhaXQpKTsKIAl9CiAKQEAgLTE4NSw3ICsxOTUsNyBAQAogCXN0cnVjdCBrX21lc3NhZ2UgbXNnOwogCiAJdmNjID0gZW50cnktPnNob3J0Y3V0OwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IHJlbW92aW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXBJNFxuIiwKKwlkcHJpbnRrKCJyZW1vdmluZyBhbiBpbmdyZXNzIGVudHJ5LCBpcCA9ICVwSTRcbiIsCiAJCSZlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CiAKIAlpZiAoZW50cnktPnByZXYgIT0gTlVMTCkKQEAgLTE5NSwxNCArMjA1LDE1IEBACiAJaWYgKGVudHJ5LT5uZXh0ICE9IE5VTEwpCiAJCWVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnktPnByZXY7CiAJY2xpZW50LT5pbl9vcHMtPnB1dChlbnRyeSk7Ci0JaWYoY2xpZW50LT5pbl9jYWNoZSA9PSBOVUxMICYmIGNsaWVudC0+ZWdfY2FjaGUgPT0gTlVMTCl7CisJaWYgKGNsaWVudC0+aW5fY2FjaGUgPT0gTlVMTCAmJiBjbGllbnQtPmVnX2NhY2hlID09IE5VTEwpIHsKIAkJbXNnLnR5cGUgPSBTVE9QX0tFRVBfQUxJVkVfU007Ci0JCW1zZ190b19tcG9hZCgmbXNnLGNsaWVudCk7CisJCW1zZ190b19tcG9hZCgmbXNnLCBjbGllbnQpOwogCX0KIAogCS8qIENoZWNrIGlmIHRoZSBlZ3Jlc3Mgc2lkZSBzdGlsbCB1c2VzIHRoaXMgVkNDICovCiAJaWYgKHZjYyAhPSBOVUxMKSB7Ci0JCWVnX2NhY2hlX2VudHJ5ICplZ19lbnRyeSA9IGNsaWVudC0+ZWdfb3BzLT5nZXRfYnlfdmNjKHZjYywgY2xpZW50KTsKKwkJZWdfY2FjaGVfZW50cnkgKmVnX2VudHJ5ID0gY2xpZW50LT5lZ19vcHMtPmdldF9ieV92Y2ModmNjLAorCQkJCQkJCQkgICAgICBjbGllbnQpOwogCQlpZiAoZWdfZW50cnkgIT0gTlVMTCkgewogCQkJY2xpZW50LT5lZ19vcHMtPnB1dChlZ19lbnRyeSk7CiAJCQlyZXR1cm47CkBAIC0yMTMsNyArMjI0LDYgQEAKIAlyZXR1cm47CiB9CiAKLQogLyogQ2FsbCB0aGlzIGV2ZXJ5IE1QQy1wMiBzZWNvbmRzLi4uIE5vdCBleGFjdGx5IGNvcnJlY3Qgc29sdXRpb24sCiAgICBidXQgYW4gZWFzeSBvbmUuLi4gKi8KIHN0YXRpYyB2b2lkIGNsZWFyX2NvdW50X2FuZF9leHBpcmVkKHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQpAQCAtMjI1LDEyICsyMzUsMTIgQEAKIAogCXdyaXRlX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAllbnRyeSA9IGNsaWVudC0+aW5fY2FjaGU7Ci0Jd2hpbGUoZW50cnkgIT0gTlVMTCl7Ci0JCWVudHJ5LT5jb3VudD0wOworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCWVudHJ5LT5jb3VudCA9IDA7CiAJCW5leHRfZW50cnkgPSBlbnRyeS0+bmV4dDsKLQkJaWYoKG5vdy50dl9zZWMgLSBlbnRyeS0+dHYudHZfc2VjKQotCQkgICA+IGVudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lKXsKLQkJCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IGhvbGRpbmcgdGltZSBleHBpcmVkLCBpcCA9ICVwSTRcbiIsCisJCWlmICgobm93LnR2X3NlYyAtIGVudHJ5LT50di50dl9zZWMpCisJCSAgID4gZW50cnktPmN0cmxfaW5mby5ob2xkaW5nX3RpbWUpIHsKKwkJCWRwcmludGsoImhvbGRpbmcgdGltZSBleHBpcmVkLCBpcCA9ICVwSTRcbiIsCiAJCQkJJmVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKIAkJCWNsaWVudC0+aW5fb3BzLT5yZW1vdmVfZW50cnkoZW50cnksIGNsaWVudCk7CiAJCX0KQEAgLTI1MCwzMyArMjYwLDM4IEBACiAJc3RydWN0IHRpbWV2YWwgbm93OwogCXN0cnVjdCBrX21lc3NhZ2UgbXNnOwogCi0JZG9fZ2V0dGltZW9mZGF5KCAmbm93ICk7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCiAJcmVhZF9sb2NrX2JoKCZjbGllbnQtPmluZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBjbGllbnQtPmluX2NhY2hlOwotCXdoaWxlKCBlbnRyeSAhPSBOVUxMICl7Ci0JCWlmKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVklORyl7Ci0JCQlpZihub3cudHZfc2VjIC0gZW50cnktPmhvbGRfZG93bi50dl9zZWMgPCBjbGllbnQtPnBhcmFtZXRlcnMubXBjX3A2KXsKLQkJCQllbnRyeSA9IGVudHJ5LT5uZXh0OyAgICAgICAgICAgICAgICAgICAgICAvKiBFbnRyeSBpbiBob2xkIGRvd24gKi8KKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWSU5HKSB7CisJCQlpZiAoKG5vdy50dl9zZWMgLSBlbnRyeS0+aG9sZF9kb3duLnR2X3NlYykgPAorCQkJICAgIGNsaWVudC0+cGFyYW1ldGVycy5tcGNfcDYpIHsKKwkJCQllbnRyeSA9IGVudHJ5LT5uZXh0OwkvKiBFbnRyeSBpbiBob2xkIGRvd24gKi8KIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmKCAobm93LnR2X3NlYyAtIGVudHJ5LT5yZXBseV93YWl0LnR2X3NlYykgPgotCQkJICAgIGVudHJ5LT5yZXRyeV90aW1lICl7Ci0JCQkJZW50cnktPnJldHJ5X3RpbWUgPSBNUENfQzEqKCBlbnRyeS0+cmV0cnlfdGltZSApOwotCQkJCWlmKGVudHJ5LT5yZXRyeV90aW1lID4gY2xpZW50LT5wYXJhbWV0ZXJzLm1wY19wNSl7Ci0JCQkJCS8qIFJldHJ5IHRpbWUgbWF4aW11bSBleGNlZWRlZCwgcHV0IGVudHJ5IGluIGhvbGQgZG93bi4gKi8KKwkJCWlmICgobm93LnR2X3NlYyAtIGVudHJ5LT5yZXBseV93YWl0LnR2X3NlYykgPgorCQkJICAgIGVudHJ5LT5yZXRyeV90aW1lKSB7CisJCQkJZW50cnktPnJldHJ5X3RpbWUgPSBNUENfQzEgKiAoZW50cnktPnJldHJ5X3RpbWUpOworCQkJCS8qCisJCQkJICogUmV0cnkgdGltZSBtYXhpbXVtIGV4Y2VlZGVkLAorCQkJCSAqIHB1dCBlbnRyeSBpbiBob2xkIGRvd24uCisJCQkJICovCisJCQkJaWYgKGVudHJ5LT5yZXRyeV90aW1lID4gY2xpZW50LT5wYXJhbWV0ZXJzLm1wY19wNSkgewogCQkJCQlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+aG9sZF9kb3duKSk7CiAJCQkJCWVudHJ5LT5yZXRyeV90aW1lID0gY2xpZW50LT5wYXJhbWV0ZXJzLm1wY19wNDsKIAkJCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCS8qIEFzayBkYWVtb24gdG8gc2VuZCBhIHJlc29sdXRpb24gcmVxdWVzdC4gKi8KLQkJCQltZW1zZXQoJihlbnRyeS0+aG9sZF9kb3duKSwwLHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOworCQkJCW1lbXNldCgmKGVudHJ5LT5ob2xkX2Rvd24pLCAwLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKIAkJCQltc2cudHlwZSA9IFNORF9NUE9BX1JFU19SVFJZOwogCQkJCW1lbWNweShtc2cuTVBTX2N0cmwsIGNsaWVudC0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4pOwogCQkJCW1zZy5jb250ZW50LmluX2luZm8gPSBlbnRyeS0+Y3RybF9pbmZvOwogCQkJCXFvcyA9IGF0bV9tcG9hX3NlYXJjaF9xb3MoZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwotCQkJCWlmIChxb3MgIT0gTlVMTCkgbXNnLnFvcyA9IHFvcy0+cW9zOworCQkJCWlmIChxb3MgIT0gTlVMTCkKKwkJCQkJbXNnLnFvcyA9IHFvcy0+cW9zOwogCQkJCW1zZ190b19tcG9hZCgmbXNnLCBjbGllbnQpOwogCQkJCWRvX2dldHRpbWVvZmRheSgmKGVudHJ5LT5yZXBseV93YWl0KSk7CiAJCQl9CkBAIC0yOTIsMTYgKzMwNywxNyBAQAogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlzdHJ1Y3QgaW5fY2FjaGVfZW50cnkgKmVudHJ5ID0gY2xpZW50LT5pbl9jYWNoZTsKIAotCWRkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiByZWZyZXNoX2VudHJpZXNcbiIpOworCWRkcHJpbnRrKCJyZWZyZXNoX2VudHJpZXNcbiIpOwogCWRvX2dldHRpbWVvZmRheSgmbm93KTsKIAogCXJlYWRfbG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwotCXdoaWxlKCBlbnRyeSAhPSBOVUxMICl7Ci0JCWlmKCBlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZFRCApewotCQkJaWYoIShlbnRyeS0+cmVmcmVzaF90aW1lKSkKLQkJCQllbnRyeS0+cmVmcmVzaF90aW1lID0gKDIqKGVudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lKSkvMzsKLQkJCWlmKCAobm93LnR2X3NlYyAtIGVudHJ5LT5yZXBseV93YWl0LnR2X3NlYykgPiBlbnRyeS0+cmVmcmVzaF90aW1lICl7Ci0JCQkJZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogcmVmcmVzaGluZyBhbiBlbnRyeS5cbiIpOworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZFRCkgeworCQkJaWYgKCEoZW50cnktPnJlZnJlc2hfdGltZSkpCisJCQkJZW50cnktPnJlZnJlc2hfdGltZSA9ICgyICogKGVudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lKSkvMzsKKwkJCWlmICgobm93LnR2X3NlYyAtIGVudHJ5LT5yZXBseV93YWl0LnR2X3NlYykgPgorCQkJICAgIGVudHJ5LT5yZWZyZXNoX3RpbWUpIHsKKwkJCQlkcHJpbnRrKCJyZWZyZXNoaW5nIGFuIGVudHJ5LlxuIik7CiAJCQkJZW50cnktPmVudHJ5X3N0YXRlID0gSU5HUkVTU19SRUZSRVNISU5HOwogCiAJCQl9CkBAIC0zMTQsMjEgKzMzMCwyMiBAQAogc3RhdGljIHZvaWQgaW5fZGVzdHJveV9jYWNoZShzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKIAl3cml0ZV9sb2NrX2lycSgmbXBjLT5pbmdyZXNzX2xvY2spOwotCXdoaWxlKG1wYy0+aW5fY2FjaGUgIT0gTlVMTCkKKwl3aGlsZSAobXBjLT5pbl9jYWNoZSAhPSBOVUxMKQogCQltcGMtPmluX29wcy0+cmVtb3ZlX2VudHJ5KG1wYy0+aW5fY2FjaGUsIG1wYyk7CiAJd3JpdGVfdW5sb2NrX2lycSgmbXBjLT5pbmdyZXNzX2xvY2spOwogCiAJcmV0dXJuOwogfQogCi1zdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9jYWNoZV9pZChfX2JlMzIgY2FjaGVfaWQsIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQorc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfY2FjaGVfaWQoX19iZTMyIGNhY2hlX2lkLAorCQkJCQkJc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5OwogCiAJcmVhZF9sb2NrX2lycSgmbXBjLT5lZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBtcGMtPmVnX2NhY2hlOwotCXdoaWxlKGVudHJ5ICE9IE5VTEwpewotCQlpZihlbnRyeS0+Y3RybF9pbmZvLmNhY2hlX2lkID09IGNhY2hlX2lkKXsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCA9PSBjYWNoZV9pZCkgewogCQkJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAJCQlyZWFkX3VubG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCQkJcmV0dXJuIGVudHJ5OwpAQCAtMzQ4LDcgKzM2NSw3IEBACiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmbXBjLT5lZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCWVudHJ5ID0gbXBjLT5lZ19jYWNoZTsKLQl3aGlsZSAoZW50cnkgIT0gTlVMTCl7CisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKIAkJaWYgKGVudHJ5LT5jdHJsX2luZm8udGFnID09IHRhZykgewogCQkJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZtcGMtPmVncmVzc19sb2NrLCBmbGFncyk7CkBAIC0zNjIsMTQgKzM3OSwxNSBAQAogfQogCiAvKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCBzaW5jZSBpdCBzYXZlcyBDUFUgZmxhZ3MgKi8KLXN0YXRpYyBlZ19jYWNoZV9lbnRyeSAqZWdfY2FjaGVfZ2V0X2J5X3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKK3N0YXRpYyBlZ19jYWNoZV9lbnRyeSAqZWdfY2FjaGVfZ2V0X2J5X3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLAorCQkJCQkgICBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWVnX2NhY2hlX2VudHJ5ICplbnRyeTsKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZtcGMtPmVncmVzc19sb2NrLCBmbGFncyk7CiAJZW50cnkgPSBtcGMtPmVnX2NhY2hlOwotCXdoaWxlIChlbnRyeSAhPSBOVUxMKXsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgewogCQlpZiAoZW50cnktPnNob3J0Y3V0ID09IHZjYykgewogCQkJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZtcGMtPmVncmVzc19sb2NrLCBmbGFncyk7CkBAIC0zODIsMTQgKzQwMCwxNSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9zcmNfaXAoX19iZTMyIGlwYWRkciwgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9zcmNfaXAoX19iZTMyIGlwYWRkciwKKwkJCQkJICAgICAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5OwogCiAJcmVhZF9sb2NrX2lycSgmbXBjLT5lZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBtcGMtPmVnX2NhY2hlOwotCXdoaWxlKGVudHJ5ICE9IE5VTEwpewotCQlpZihlbnRyeS0+bGF0ZXN0X2lwX2FkZHIgPT0gaXBhZGRyKSB7CisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKwkJaWYgKGVudHJ5LT5sYXRlc3RfaXBfYWRkciA9PSBpcGFkZHIpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfaXJxKCZtcGMtPmVncmVzc19sb2NrKTsKIAkJCXJldHVybiBlbnRyeTsKQEAgLTQyMSw3ICs0NDAsNyBAQAogCXN0cnVjdCBrX21lc3NhZ2UgbXNnOwogCiAJdmNjID0gZW50cnktPnNob3J0Y3V0OwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IHJlbW92aW5nIGFuIGVncmVzcyBlbnRyeS5cbiIpOworCWRwcmludGsoInJlbW92aW5nIGFuIGVncmVzcyBlbnRyeS5cbiIpOwogCWlmIChlbnRyeS0+cHJldiAhPSBOVUxMKQogCQllbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OwogCWVsc2UKQEAgLTQyOSw5ICs0NDgsOSBAQAogCWlmIChlbnRyeS0+bmV4dCAhPSBOVUxMKQogCQllbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5LT5wcmV2OwogCWNsaWVudC0+ZWdfb3BzLT5wdXQoZW50cnkpOwotCWlmKGNsaWVudC0+aW5fY2FjaGUgPT0gTlVMTCAmJiBjbGllbnQtPmVnX2NhY2hlID09IE5VTEwpeworCWlmIChjbGllbnQtPmluX2NhY2hlID09IE5VTEwgJiYgY2xpZW50LT5lZ19jYWNoZSA9PSBOVUxMKSB7CiAJCW1zZy50eXBlID0gU1RPUF9LRUVQX0FMSVZFX1NNOwotCQltc2dfdG9fbXBvYWQoJm1zZyxjbGllbnQpOworCQltc2dfdG9fbXBvYWQoJm1zZywgY2xpZW50KTsKIAl9CiAKIAkvKiBDaGVjayBpZiB0aGUgaW5ncmVzcyBzaWRlIHN0aWxsIHVzZXMgdGhpcyBWQ0MgKi8KQEAgLTQ0NywyMCArNDY2LDIxIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2FkZF9lbnRyeShzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9hZGRfZW50cnkoc3RydWN0IGtfbWVzc2FnZSAqbXNnLAorCQkJCQkgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQogewogCWVnX2NhY2hlX2VudHJ5ICplbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKGVnX2NhY2hlX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19lZ19jYWNoZV9lbnRyeTogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2luZm8oIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBhZGRpbmcgYW4gZWdyZXNzIGVudHJ5LCBpcCA9ICVwSTQsIHRoaXMgc2hvdWxkIGJlIG91ciBJUFxuIiwKKwlkcHJpbnRrKCJhZGRpbmcgYW4gZWdyZXNzIGVudHJ5LCBpcCA9ICVwSTQsIHRoaXMgc2hvdWxkIGJlIG91ciBJUFxuIiwKIAkJJm1zZy0+Y29udGVudC5lZ19pbmZvLmVnX2RzdF9pcCk7CiAKIAlhdG9taWNfc2V0KCZlbnRyeS0+dXNlLCAxKTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfZWdfY2FjaGVfZW50cnk6IGFib3V0IHRvIGxvY2tcbiIpOworCWRwcmludGsoIm5ld19lZ19jYWNoZV9lbnRyeTogYWJvdXQgdG8gbG9ja1xuIik7CiAJd3JpdGVfbG9ja19pcnEoJmNsaWVudC0+ZWdyZXNzX2xvY2spOwogCWVudHJ5LT5uZXh0ID0gY2xpZW50LT5lZ19jYWNoZTsKIAllbnRyeS0+cHJldiA9IE5VTEw7CkBAIC00NzIsMTggKzQ5MiwxOCBAQAogCWVudHJ5LT5jdHJsX2luZm8gPSBtc2ctPmNvbnRlbnQuZWdfaW5mbzsKIAlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+dHYpKTsKIAllbnRyeS0+ZW50cnlfc3RhdGUgPSBFR1JFU1NfUkVTT0xWRUQ7Ci0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogbmV3X2VnX2NhY2hlX2VudHJ5IGNhY2hlX2lkICVsdVxuIiwgbnRvaGwoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCkpOwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG1wc19pcCA9ICVwSTRcbiIsCi0JCSZlbnRyeS0+Y3RybF9pbmZvLm1wc19pcCk7CisJZHByaW50aygibmV3X2VnX2NhY2hlX2VudHJ5IGNhY2hlX2lkICV1XG4iLAorCQludG9obChlbnRyeS0+Y3RybF9pbmZvLmNhY2hlX2lkKSk7CisJZHByaW50aygibXBzX2lwID0gJXBJNFxuIiwgJmVudHJ5LT5jdHJsX2luZm8ubXBzX2lwKTsKIAlhdG9taWNfaW5jKCZlbnRyeS0+dXNlKTsKIAogCXdyaXRlX3VubG9ja19pcnEoJmNsaWVudC0+ZWdyZXNzX2xvY2spOwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19lZ19jYWNoZV9lbnRyeTogdW5sb2NrZWRcbiIpOworCWRwcmludGsoIm5ld19lZ19jYWNoZV9lbnRyeTogdW5sb2NrZWRcbiIpOwogCiAJcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfZWdfY2FjaGVfZW50cnkoZWdfY2FjaGVfZW50cnkgKiBlbnRyeSwgdWludDE2X3QgaG9sZGluZ190aW1lKQorc3RhdGljIHZvaWQgdXBkYXRlX2VnX2NhY2hlX2VudHJ5KGVnX2NhY2hlX2VudHJ5ICplbnRyeSwgdWludDE2X3QgaG9sZGluZ190aW1lKQogewogCWRvX2dldHRpbWVvZmRheSgmKGVudHJ5LT50dikpOwogCWVudHJ5LT5lbnRyeV9zdGF0ZSA9IEVHUkVTU19SRVNPTFZFRDsKQEAgLTUwMiwxMyArNTIyLDE0IEBACiAKIAl3cml0ZV9sb2NrX2lycSgmY2xpZW50LT5lZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBjbGllbnQtPmVnX2NhY2hlOwotCXdoaWxlKGVudHJ5ICE9IE5VTEwpeworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CiAJCW5leHRfZW50cnkgPSBlbnRyeS0+bmV4dDsKLQkJaWYoKG5vdy50dl9zZWMgLSBlbnRyeS0+dHYudHZfc2VjKQotCQkgICA+IGVudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lKXsKKwkJaWYgKChub3cudHZfc2VjIC0gZW50cnktPnR2LnR2X3NlYykKKwkJICAgPiBlbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSkgewogCQkJbXNnLnR5cGUgPSBTTkRfRUdSRVNTX1BVUkdFOwogCQkJbXNnLmNvbnRlbnQuZWdfaW5mbyA9IGVudHJ5LT5jdHJsX2luZm87Ci0JCQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBlZ3Jlc3NfY2FjaGU6IGhvbGRpbmcgdGltZSBleHBpcmVkLCBjYWNoZV9pZCA9ICVsdS5cbiIsbnRvaGwoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCkpOworCQkJZHByaW50aygiZWdyZXNzX2NhY2hlOiBob2xkaW5nIHRpbWUgZXhwaXJlZCwgY2FjaGVfaWQgPSAldS5cbiIsCisJCQkJbnRvaGwoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCkpOwogCQkJbXNnX3RvX21wb2FkKCZtc2csIGNsaWVudCk7CiAJCQljbGllbnQtPmVnX29wcy0+cmVtb3ZlX2VudHJ5KGVudHJ5LCBjbGllbnQpOwogCQl9CkBAIC01MjIsNyArNTQzLDcgQEAKIHN0YXRpYyB2b2lkIGVnX2Rlc3Ryb3lfY2FjaGUoc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJd3JpdGVfbG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwotCXdoaWxlKG1wYy0+ZWdfY2FjaGUgIT0gTlVMTCkKKwl3aGlsZSAobXBjLT5lZ19jYWNoZSAhPSBOVUxMKQogCQltcGMtPmVnX29wcy0+cmVtb3ZlX2VudHJ5KG1wYy0+ZWdfY2FjaGUsIG1wYyk7CiAJd3JpdGVfdW5sb2NrX2lycSgmbXBjLT5lZ3Jlc3NfbG9jayk7CiAKQEAgLTUzMCw3ICs1NTEsNiBAQAogfQogCiAKLQogc3RhdGljIHN0cnVjdCBpbl9jYWNoZV9vcHMgaW5ncmVzc19vcHMgPSB7CiAJaW5fY2FjaGVfYWRkX2VudHJ5LCAgICAgICAgICAgICAgIC8qIGFkZF9lbnRyeSAgICAgICAqLwogCWluX2NhY2hlX2dldCwgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBvYV9wcm9jLmMgYi9uZXQvYXRtL21wb2FfcHJvYy5jCmluZGV4IDFhMGY1Y2MuLmI5YmRiOTggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBvYV9wcm9jLmMKKysrIGIvbmV0L2F0bS9tcG9hX3Byb2MuYwpAQCAtMSwzICsxLDQgQEAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC04LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1tcGMuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlICJtcGMuaCIKQEAgLTIwLDkgKzIxLDIzIEBACiAgKi8KIAogI2lmIDEKLSNkZWZpbmUgZHByaW50ayBwcmludGsgICAvKiBkZWJ1ZyAqLworI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpICAvKiBkZWJ1ZyAqLwogI2Vsc2UKLSNkZWZpbmUgZHByaW50ayhmb3JtYXQsYXJncy4uLikKKyNkZWZpbmUgZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8geyBpZiAoMCkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpO1wKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAwCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpICAvKiBkZWJ1ZyAqLworI2Vsc2UKKyNkZWZpbmUgZGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsgaWYgKDApCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgIyNhcmdzKTtcCisJfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIFNUQVRfRklMRV9OQU1FICJtcGMiICAgICAvKiBPdXIgc3RhdGlzdGljIGZpbGUncyBuYW1lICovCkBAIC01MSw0MiArNjYsMzcgQEAKIC8qCiAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiBhbiBpbmdyZXNzIGNhY2hlIGVudHJ5IGFzIGEgc3RyaW5nCiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICppbmdyZXNzX3N0YXRlX3N0cmluZyhpbnQgc3RhdGUpewotCXN3aXRjaChzdGF0ZSkgeworc3RhdGljIGNvbnN0IGNoYXIgKmluZ3Jlc3Nfc3RhdGVfc3RyaW5nKGludCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBJTkdSRVNTX1JFU09MVklORzoKIAkJcmV0dXJuICJyZXNvbHZpbmcgICI7Ci0JCWJyZWFrOwogCWNhc2UgSU5HUkVTU19SRVNPTFZFRDoKIAkJcmV0dXJuICJyZXNvbHZlZCAgICI7Ci0JCWJyZWFrOwogCWNhc2UgSU5HUkVTU19JTlZBTElEOgogCQlyZXR1cm4gImludmFsaWQgICAgIjsKLQkJYnJlYWs7CiAJY2FzZSBJTkdSRVNTX1JFRlJFU0hJTkc6CiAJCXJldHVybiAicmVmcmVzaGluZyAiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCSAgICAgICByZXR1cm4gIiI7CiAJfQorCisJcmV0dXJuICIiOwogfQogCiAvKgogICogUmV0dXJucyB0aGUgc3RhdGUgb2YgYW4gZWdyZXNzIGNhY2hlIGVudHJ5IGFzIGEgc3RyaW5nCiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICplZ3Jlc3Nfc3RhdGVfc3RyaW5nKGludCBzdGF0ZSl7Ci0Jc3dpdGNoKHN0YXRlKSB7CitzdGF0aWMgY29uc3QgY2hhciAqZWdyZXNzX3N0YXRlX3N0cmluZyhpbnQgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgRUdSRVNTX1JFU09MVkVEOgogCQlyZXR1cm4gInJlc29sdmVkICAgIjsKLQkJYnJlYWs7CiAJY2FzZSBFR1JFU1NfUFVSR0U6CiAJCXJldHVybiAicHVyZ2UgICAgICAiOwotCQlicmVhazsKIAljYXNlIEVHUkVTU19JTlZBTElEOgogCQlyZXR1cm4gImludmFsaWQgICAgIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgICAgcmV0dXJuICIiOwogCX0KKworCXJldHVybiAiIjsKIH0KIAogLyoKQEAgLTEyMyw3ICsxMzMsNiBAQAogc3RhdGljIGludCBtcGNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGMgPSB2OwotCXVuc2lnbmVkIGNoYXIgKnRlbXA7CiAJaW50IGk7CiAJaW5fY2FjaGVfZW50cnkgKmluX2VudHJ5OwogCWVnX2NhY2hlX2VudHJ5ICplZ19lbnRyeTsKQEAgLTE0MCwxNSArMTQ5LDE3IEBACiAJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCiAJZm9yIChpbl9lbnRyeSA9IG1wYy0+aW5fY2FjaGU7IGluX2VudHJ5OyBpbl9lbnRyeSA9IGluX2VudHJ5LT5uZXh0KSB7Ci0JCXRlbXAgPSAodW5zaWduZWQgY2hhciAqKSZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcDsKLQkJc3ByaW50ZihpcF9zdHJpbmcsIiVkLiVkLiVkLiVkIiwgdGVtcFswXSwgdGVtcFsxXSwgdGVtcFsyXSwgdGVtcFszXSk7CisJCXNwcmludGYoaXBfc3RyaW5nLCAiJXBJNCIsICZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CiAJCXNlcV9wcmludGYobSwgIiUtMTZzJXMlLTE0bHUlLTEydSIsCi0JCQkgICAgICBpcF9zdHJpbmcsCi0JCQkgICAgICBpbmdyZXNzX3N0YXRlX3N0cmluZyhpbl9lbnRyeS0+ZW50cnlfc3RhdGUpLAotCQkJICAgICAgaW5fZW50cnktPmN0cmxfaW5mby5ob2xkaW5nX3RpbWUtKG5vdy50dl9zZWMtaW5fZW50cnktPnR2LnR2X3NlYyksCi0JCQkgICAgICBpbl9lbnRyeS0+cGFja2V0c19md2RlZCk7CisJCQkgICBpcF9zdHJpbmcsCisJCQkgICBpbmdyZXNzX3N0YXRlX3N0cmluZyhpbl9lbnRyeS0+ZW50cnlfc3RhdGUpLAorCQkJICAgaW5fZW50cnktPmN0cmxfaW5mby5ob2xkaW5nX3RpbWUgLQorCQkJICAgKG5vdy50dl9zZWMtaW5fZW50cnktPnR2LnR2X3NlYyksCisJCQkgICBpbl9lbnRyeS0+cGFja2V0c19md2RlZCk7CiAJCWlmIChpbl9lbnRyeS0+c2hvcnRjdXQpCi0JCQlzZXFfcHJpbnRmKG0sICIgICAlLTNkICAlLTNkIixpbl9lbnRyeS0+c2hvcnRjdXQtPnZwaSxpbl9lbnRyeS0+c2hvcnRjdXQtPnZjaSk7CisJCQlzZXFfcHJpbnRmKG0sICIgICAlLTNkICAlLTNkIiwKKwkJCQkgICBpbl9lbnRyeS0+c2hvcnRjdXQtPnZwaSwKKwkJCQkgICBpbl9lbnRyeS0+c2hvcnRjdXQtPnZjaSk7CiAJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQogCkBAIC0xNTYsMjEgKzE2NywyMyBAQAogCXNlcV9wcmludGYobSwgIkVncmVzcyBFbnRyaWVzOlxuSW5ncmVzcyBNUEMgQVRNIGFkZHJcbkNhY2hlLWlkICAgICAgICBTdGF0ZSAgICAgIEhvbGRpbmcgdGltZSAgUGFja2V0cyByZWN2ZCAgTGF0ZXN0IElQIGFkZHIgICBWUEkgVkNJXG4iKTsKIAlmb3IgKGVnX2VudHJ5ID0gbXBjLT5lZ19jYWNoZTsgZWdfZW50cnk7IGVnX2VudHJ5ID0gZWdfZW50cnktPm5leHQpIHsKIAkJdW5zaWduZWQgY2hhciAqcCA9IGVnX2VudHJ5LT5jdHJsX2luZm8uaW5fTVBDX2RhdGFfQVRNX2FkZHI7Ci0JCWZvcihpID0gMDsgaSA8IEFUTV9FU0FfTEVOOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBBVE1fRVNBX0xFTjsgaSsrKQogCQkJc2VxX3ByaW50ZihtLCAiJTAyeCIsIHBbaV0pOwogCQlzZXFfcHJpbnRmKG0sICJcbiUtMTZsdSVzJS0xNGx1JS0xNXUiLAogCQkJICAgKHVuc2lnbmVkIGxvbmcpbnRvaGwoZWdfZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCksCiAJCQkgICBlZ3Jlc3Nfc3RhdGVfc3RyaW5nKGVnX2VudHJ5LT5lbnRyeV9zdGF0ZSksCi0JCQkgICAoZWdfZW50cnktPmN0cmxfaW5mby5ob2xkaW5nX3RpbWUtKG5vdy50dl9zZWMtZWdfZW50cnktPnR2LnR2X3NlYykpLAorCQkJICAgKGVnX2VudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lIC0KKwkJCSAgICAobm93LnR2X3NlYy1lZ19lbnRyeS0+dHYudHZfc2VjKSksCiAJCQkgICBlZ19lbnRyeS0+cGFja2V0c19yY3ZkKTsKIAogCQkvKiBsYXRlc3QgSVAgYWRkcmVzcyAqLwotCQl0ZW1wID0gKHVuc2lnbmVkIGNoYXIgKikmZWdfZW50cnktPmxhdGVzdF9pcF9hZGRyOwotCQlzcHJpbnRmKGlwX3N0cmluZywgIiVkLiVkLiVkLiVkIiwgdGVtcFswXSwgdGVtcFsxXSwgdGVtcFsyXSwgdGVtcFszXSk7CisJCXNwcmludGYoaXBfc3RyaW5nLCAiJXBJNCIsICZlZ19lbnRyeS0+bGF0ZXN0X2lwX2FkZHIpOwogCQlzZXFfcHJpbnRmKG0sICIlLTE2cyIsIGlwX3N0cmluZyk7CiAKIAkJaWYgKGVnX2VudHJ5LT5zaG9ydGN1dCkKLQkJCXNlcV9wcmludGYobSwgIiAlLTNkICUtM2QiLGVnX2VudHJ5LT5zaG9ydGN1dC0+dnBpLGVnX2VudHJ5LT5zaG9ydGN1dC0+dmNpKTsKKwkJCXNlcV9wcmludGYobSwgIiAlLTNkICUtM2QiLAorCQkJCSAgIGVnX2VudHJ5LT5zaG9ydGN1dC0+dnBpLAorCQkJCSAgIGVnX2VudHJ5LT5zaG9ydGN1dC0+dmNpKTsKIAkJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAl9CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKQEAgLTI1OCwxMiArMjcxLDkgQEAKIAlxb3Mucnh0cC5tYXhfcGNyID0gcnhfcGNyOwogCXFvcy5yeHRwLm1heF9zZHUgPSByeF9zZHU7CiAJcW9zLmFhbCA9IEFUTV9BQUw1OwotCWRwcmludGsoIm1wb2E6IG1wb2FfcHJvYy5jOiBwYXJzZV9xb3MoKTogc2V0dGluZyBxb3MgcGFyYW1hbWV0ZXJzIHRvIHR4PSVkLCVkIHJ4PSVkLCVkXG4iLAotCQlxb3MudHh0cC5tYXhfcGNyLAotCQlxb3MudHh0cC5tYXhfc2R1LAotCQlxb3Mucnh0cC5tYXhfcGNyLAotCQlxb3Mucnh0cC5tYXhfc2R1Ci0JCSk7CisJZHByaW50aygicGFyc2VfcW9zKCk6IHNldHRpbmcgcW9zIHBhcmFtYW1ldGVycyB0byB0eD0lZCwlZCByeD0lZCwlZFxuIiwKKwkJcW9zLnR4dHAubWF4X3BjciwgcW9zLnR4dHAubWF4X3NkdSwKKwkJcW9zLnJ4dHAubWF4X3BjciwgcW9zLnJ4dHAubWF4X3NkdSk7CiAKIAlhdG1fbXBvYV9hZGRfcW9zKGlwYWRkciwgJnFvcyk7CiAJcmV0dXJuIDE7CkBAIC0yNzgsNyArMjg4LDcgQEAKIAogCXAgPSBwcm9jX2NyZWF0ZShTVEFUX0ZJTEVfTkFNRSwgMCwgYXRtX3Byb2Nfcm9vdCwgJm1wY19maWxlX29wZXJhdGlvbnMpOwogCWlmICghcCkgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL2F0bS8lc1xuIiwgU1RBVF9GSUxFX05BTUUpOworCQlwcl9lcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL2F0bS8lc1xuIiwgU1RBVF9GSUxFX05BTUUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yODksMTAgKzI5OSw5IEBACiAgKi8KIHZvaWQgbXBjX3Byb2NfY2xlYW4odm9pZCkKIHsKLQlyZW1vdmVfcHJvY19lbnRyeShTVEFUX0ZJTEVfTkFNRSxhdG1fcHJvY19yb290KTsKKwlyZW1vdmVfcHJvY19lbnRyeShTVEFUX0ZJTEVfTkFNRSwgYXRtX3Byb2Nfcm9vdCk7CiB9CiAKLQogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCAwYWY4NGNkLi40MDA4MzkyIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYworKysgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMzMsNiArMzMsOCBAQAogICogVGhlc2UgaG9va3MgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHBwcF9nZW5lcmljCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTEzMiw3ICsxMzQsNyBAQAogc3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTsKLQlwcl9kZWJ1ZygicHBwb2F0bSBwdXNoXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAlpZiAoc2tiID09IE5VTEwpIHsJCQkvKiBWQ0Mgd2FzIGNsb3NlZCAqLwogCQlwcl9kZWJ1ZygicmVtb3ZpbmcgQVRNUFBQIFZDQyAlcFxuIiwgcHZjYyk7CiAJCXBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7CkBAIC0xNjUsMTcgKzE2NywxNyBAQAogCQkJcHZjYy0+Y2hhbi5tdHUgKz0gTExDX0xFTjsKIAkJCWJyZWFrOwogCQl9Ci0JCXByX2RlYnVnKCJDb3VsZG4ndCBhdXRvZGV0ZWN0IHlldCAiCi0JCSAgICAiKHNrYjogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgpXG4iLAotCQkgICAgc2tiLT5kYXRhWzBdLCBza2ItPmRhdGFbMV0sIHNrYi0+ZGF0YVsyXSwKLQkJICAgIHNrYi0+ZGF0YVszXSwgc2tiLT5kYXRhWzRdLCBza2ItPmRhdGFbNV0pOworCQlwcl9kZWJ1ZygiQ291bGRuJ3QgYXV0b2RldGVjdCB5ZXQgKHNrYjogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgpXG4iLAorCQkJIHNrYi0+ZGF0YVswXSwgc2tiLT5kYXRhWzFdLCBza2ItPmRhdGFbMl0sCisJCQkgc2tiLT5kYXRhWzNdLCBza2ItPmRhdGFbNF0sIHNrYi0+ZGF0YVs1XSk7CiAJCWdvdG8gZXJyb3I7CiAJY2FzZSBlX3ZjOgogCQlicmVhazsKIAl9CiAJcHBwX2lucHV0KCZwdmNjLT5jaGFuLCBza2IpOwogCXJldHVybjsKLSAgICBlcnJvcjoKKworZXJyb3I6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcHBwX2lucHV0X2Vycm9yKCZwdmNjLT5jaGFuLCAwKTsKIH0KQEAgLTE5NCw3ICsxOTYsNyBAQAogewogCXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTsKIAlBVE1fU0tCKHNrYiktPnZjYyA9IHB2Y2MtPmF0bXZjYzsKLQlwcl9kZWJ1ZygicHBwb2F0bV9zZW5kIChza2I9MHglcCwgdmNjPTB4JXApXG4iLCBza2IsIHB2Y2MtPmF0bXZjYyk7CisJcHJfZGVidWcoIihza2I9MHglcCwgdmNjPTB4JXApXG4iLCBza2IsIHB2Y2MtPmF0bXZjYyk7CiAJaWYgKHNrYi0+ZGF0YVswXSA9PSAnXDAnICYmIChwdmNjLT5mbGFncyAmIFNDX0NPTVBfUFJPVCkpCiAJCSh2b2lkKSBza2JfcHVsbChza2IsIDEpOwogCXN3aXRjaCAocHZjYy0+ZW5jYXBzKSB7CQkvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi8KQEAgLTIwOCw3ICsyMTAsOCBAQAogCQkJCWdvdG8gbm9zcGFjZTsKIAkJCX0KIAkJCWtmcmVlX3NrYihza2IpOwotCQkJaWYgKChza2IgPSBuKSA9PSBOVUxMKQorCQkJc2tiID0gbjsKKwkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQlyZXR1cm4gRFJPUF9QQUNLRVQ7CiAJCX0gZWxzZSBpZiAoIWF0bV9tYXlfc2VuZChwdmNjLT5hdG12Y2MsIHNrYi0+dHJ1ZXNpemUpKQogCQkJZ290byBub3NwYWNlOwpAQCAtMjI2LDExICsyMjksMTEgQEAKIAogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bShBVE1fU0tCKHNrYiktPnZjYyktPnNrX3dtZW1fYWxsb2MpOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSBBVE1fU0tCKHNrYiktPnZjYy0+YXRtX29wdGlvbnM7Ci0JcHJfZGVidWcoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLCBza2IsIEFUTV9TS0Ioc2tiKS0+dmNjLAotCSAgICBBVE1fU0tCKHNrYiktPnZjYy0+ZGV2KTsKKwlwcl9kZWJ1ZygiYXRtX3NrYiglcCktPnZjYyglcCktPmRldiglcClcbiIsCisJCSBza2IsIEFUTV9TS0Ioc2tiKS0+dmNjLCBBVE1fU0tCKHNrYiktPnZjYy0+ZGV2KTsKIAlyZXR1cm4gQVRNX1NLQihza2IpLT52Y2MtPnNlbmQoQVRNX1NLQihza2IpLT52Y2MsIHNrYikKIAkgICAgPyBEUk9QX1BBQ0tFVCA6IDE7Ci0gICAgbm9zcGFjZToKK25vc3BhY2U6CiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIHNwYWNlIHRvIHNlbmQgdGhpcyBTS0Igbm93LCBidXQgd2UgbWlnaHQgaGF2ZQogCSAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG8KQEAgLTI4OSw3ICsyOTIsOCBAQAogCSAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7CiAJcHZjYy0+d2FrZXVwX3Rhc2tsZXQgPSB0YXNrbGV0X3Byb3RvOwogCXB2Y2MtPndha2V1cF90YXNrbGV0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgJnB2Y2MtPmNoYW47Ci0JaWYgKChlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmcHZjYy0+Y2hhbikpICE9IDApIHsKKwllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmcHZjYy0+Y2hhbik7CisJaWYgKGVyciAhPSAwKSB7CiAJCWtmcmVlKHB2Y2MpOwogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL25ldC9hdG0vcHJvYy5jIGIvbmV0L2F0bS9wcm9jLmMKaW5kZXggYWI4NDE5YS4uN2E5NmIyMyAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcm9jLmMKKysrIGIvbmV0L2F0bS9wcm9jLmMKQEAgLTI0LDE1ICsyNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4gLyogZm9yIF9faW5pdCAqLwogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L2F0bWNsaXAuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPiAvKiBmb3IgSFogKi8KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BhcmFtLmg+IC8qIGZvciBIWiAqLwogI2luY2x1ZGUgInJlc291cmNlcy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIiAvKiBhdG1fcHJvY19pbml0IHByb3RvdHlwZSAqLwogI2luY2x1ZGUgInNpZ25hbGluZy5oIiAvKiB0byBnZXQgc2lnZCAtIHVnbHkgdG9vICovCiAKLXN0YXRpYyBzc2l6ZV90IHByb2NfZGV2X2F0bV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLGNoYXIgX191c2VyICpidWYsc2l6ZV90IGNvdW50LAotICAgIGxvZmZfdCAqcG9zKTsKK3N0YXRpYyBzc2l6ZV90IHByb2NfZGV2X2F0bV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19hdG1fZGV2X29wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKQEAgLTQzLDkgKzQzLDkgQEAKICAgY29uc3Qgc3RydWN0IGtfYXRtX2FhbF9zdGF0cyAqc3RhdHMpCiB7CiAJc2VxX3ByaW50ZihzZXEsICIlcyAoICVkICVkICVkICVkICVkICkiLCBhYWwsCi0JICAgIGF0b21pY19yZWFkKCZzdGF0cy0+dHgpLGF0b21pY19yZWFkKCZzdGF0cy0+dHhfZXJyKSwKLQkgICAgYXRvbWljX3JlYWQoJnN0YXRzLT5yeCksYXRvbWljX3JlYWQoJnN0YXRzLT5yeF9lcnIpLAotCSAgICBhdG9taWNfcmVhZCgmc3RhdHMtPnJ4X2Ryb3ApKTsKKwkJICAgYXRvbWljX3JlYWQoJnN0YXRzLT50eCksIGF0b21pY19yZWFkKCZzdGF0cy0+dHhfZXJyKSwKKwkJICAgYXRvbWljX3JlYWQoJnN0YXRzLT5yeCksIGF0b21pY19yZWFkKCZzdGF0cy0+cnhfZXJyKSwKKwkJICAgYXRvbWljX3JlYWQoJnN0YXRzLT5yeF9kcm9wKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0bV9kZXZfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3Qgc3RydWN0IGF0bV9kZXYgKmRldikKQEAgLTE1MSw4ICsxNTEsOCBAQAogCiBzdGF0aWMgdm9pZCBwdmNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2xhc3NfbmFtZVtdID0KLQkJeyJvZmYiLCJVQlIiLCJDQlIiLCJWQlIiLCJBQlIifTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2xhc3NfbmFtZVtdID0geworCQkib2ZmIiwgIlVCUiIsICJDQlIiLCAiVkJSIiwgIkFCUiJ9OwogCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhYWxfbmFtZVtdID0gewogCQkiLS0tIiwJIjEiLAkiMiIsCSIzLzQiLAkvKiAgMC0gMyAqLwogCQkiPz8/IiwJIjUiLAkiPz8/IiwJIj8/PyIsCS8qICA0LSA3ICovCkBAIC0xNjAsMTEgKzE2MCwxMiBAQAogCQkiPz8/IiwJIjAiLAkiPz8/IiwJIj8/PyJ9OwkvKiAxMi0xNSAqLwogCiAJc2VxX3ByaW50ZihzZXEsICIlM2QgJTNkICU1ZCAlLTNzICU3ZCAlLTVzICU3ZCAlLTZzIiwKLQkgICAgdmNjLT5kZXYtPm51bWJlcix2Y2MtPnZwaSx2Y2MtPnZjaSwKLQkgICAgdmNjLT5xb3MuYWFsID49IEFSUkFZX1NJWkUoYWFsX25hbWUpID8gImVyciIgOgotCSAgICBhYWxfbmFtZVt2Y2MtPnFvcy5hYWxdLHZjYy0+cW9zLnJ4dHAubWluX3BjciwKLQkgICAgY2xhc3NfbmFtZVt2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3NdLHZjYy0+cW9zLnR4dHAubWluX3BjciwKLQkgICAgY2xhc3NfbmFtZVt2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3NdKTsKKwkJICAgdmNjLT5kZXYtPm51bWJlciwgdmNjLT52cGksIHZjYy0+dmNpLAorCQkgICB2Y2MtPnFvcy5hYWwgPj0gQVJSQVlfU0laRShhYWxfbmFtZSkgPyAiZXJyIiA6CisJCSAgIGFhbF9uYW1lW3ZjYy0+cW9zLmFhbF0sIHZjYy0+cW9zLnJ4dHAubWluX3BjciwKKwkJICAgY2xhc3NfbmFtZVt2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3NdLAorCQkgICB2Y2MtPnFvcy50eHRwLm1pbl9wY3IsCisJCSAgIGNsYXNzX25hbWVbdmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzXSk7CiAJaWYgKHRlc3RfYml0KEFUTV9WRl9JU19DTElQLCAmdmNjLT5mbGFncykpIHsKIAkJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYyA9IENMSVBfVkNDKHZjYyk7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xOTUsMTkgKzE5NiwyMCBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIiUzZCAlM2QgJTVkICIsIHZjYy0+ZGV2LT5udW1iZXIsIHZjYy0+dnBpLAogCQkJdmNjLT52Y2kpOwogCXN3aXRjaCAoc2stPnNrX2ZhbWlseSkgewotCQljYXNlIEFGX0FUTVBWQzoKLQkJCXNlcV9wcmludGYoc2VxLCAiUFZDIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBRl9BVE1TVkM6Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlNWQyIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiUzZCIsIHNrLT5za19mYW1pbHkpOworCWNhc2UgQUZfQVRNUFZDOgorCQlzZXFfcHJpbnRmKHNlcSwgIlBWQyIpOworCQlicmVhazsKKwljYXNlIEFGX0FUTVNWQzoKKwkJc2VxX3ByaW50ZihzZXEsICJTVkMiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2VxX3ByaW50ZihzZXEsICIlM2QiLCBzay0+c2tfZmFtaWx5KTsKIAl9Ci0Jc2VxX3ByaW50ZihzZXEsICIgJTA0bHggICU1ZCAlN2QvJTdkICU3ZC8lN2QgWyVkXVxuIiwgdmNjLT5mbGFncywgc2stPnNrX2VyciwKLQkJICBza193bWVtX2FsbG9jX2dldChzayksIHNrLT5za19zbmRidWYsCi0JCSAgc2tfcm1lbV9hbGxvY19nZXQoc2spLCBzay0+c2tfcmN2YnVmLAotCQkgIGF0b21pY19yZWFkKCZzay0+c2tfcmVmY250KSk7CisJc2VxX3ByaW50ZihzZXEsICIgJTA0bHggICU1ZCAlN2QvJTdkICU3ZC8lN2QgWyVkXVxuIiwKKwkJICAgdmNjLT5mbGFncywgc2stPnNrX2VyciwKKwkJICAgc2tfd21lbV9hbGxvY19nZXQoc2spLCBzay0+c2tfc25kYnVmLAorCQkgICBza19ybWVtX2FsbG9jX2dldChzayksIHNrLT5za19yY3ZidWYsCisJCSAgIGF0b21pY19yZWFkKCZzay0+c2tfcmVmY250KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2Y19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQpAQCAtMjM2LDcgKzIzOCw3IEBACiAJCSJJdGYgVHlwZSAgICBFU0kvXCJNQUNcImFkZHIgIgogCQkiQUFMKFRYLGVycixSWCxlcnIsZHJvcCkgLi4uICAgICAgICAgICAgICAgW3JlZmNudF1cbiI7CiAKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJaWYgKHYgPT0gJmF0bV9kZXZzKQogCQlzZXFfcHV0cyhzZXEsIGF0bV9kZXZfYmFubmVyKTsKIAllbHNlIHsKIAkJc3RydWN0IGF0bV9kZXYgKmRldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKQEAgLTM3NiwzMiArMzc4LDM1IEBACiAJdW5zaWduZWQgbG9uZyBwYWdlOwogCWludCBsZW5ndGg7CiAKLQlpZiAoY291bnQgPT0gMCkgcmV0dXJuIDA7CisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOwogCXBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWdlKSByZXR1cm4gLUVOT01FTTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOwogCWRldiA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlpZiAoIWRldi0+b3BzLT5wcm9jX3JlYWQpCiAJCWxlbmd0aCA9IC1FSU5WQUw7CiAJZWxzZSB7Ci0JCWxlbmd0aCA9IGRldi0+b3BzLT5wcm9jX3JlYWQoZGV2LHBvcywoY2hhciAqKSBwYWdlKTsKLQkJaWYgKGxlbmd0aCA+IGNvdW50KSBsZW5ndGggPSAtRUlOVkFMOworCQlsZW5ndGggPSBkZXYtPm9wcy0+cHJvY19yZWFkKGRldiwgcG9zLCAoY2hhciAqKXBhZ2UpOworCQlpZiAobGVuZ3RoID4gY291bnQpCisJCQlsZW5ndGggPSAtRUlOVkFMOwogCX0KIAlpZiAobGVuZ3RoID49IDApIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsKGNoYXIgKikgcGFnZSxsZW5ndGgpKSBsZW5ndGggPSAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgKGNoYXIgKilwYWdlLCBsZW5ndGgpKQorCQkJbGVuZ3RoID0gLUVGQVVMVDsKIAkJKCpwb3MpKys7CiAJfQogCWZyZWVfcGFnZShwYWdlKTsKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi0KIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYXRtX3Byb2Nfcm9vdDsKIEVYUE9SVF9TWU1CT0woYXRtX3Byb2Nfcm9vdCk7CiAKIAogaW50IGF0bV9wcm9jX2Rldl9yZWdpc3RlcihzdHJ1Y3QgYXRtX2RldiAqZGV2KQogewotCWludCBkaWdpdHMsbnVtOworCWludCBkaWdpdHMsIG51bTsKIAlpbnQgZXJyb3I7CiAKIAkvKiBObyBwcm9jIGluZm8gKi8KQEAgLTQxMCwyNiArNDE1LDI4IEBACiAKIAllcnJvciA9IC1FTk9NRU07CiAJZGlnaXRzID0gMDsKLQlmb3IgKG51bSA9IGRldi0+bnVtYmVyOyBudW07IG51bSAvPSAxMCkgZGlnaXRzKys7Ci0JaWYgKCFkaWdpdHMpIGRpZ2l0cysrOworCWZvciAobnVtID0gZGV2LT5udW1iZXI7IG51bTsgbnVtIC89IDEwKQorCQlkaWdpdHMrKzsKKwlpZiAoIWRpZ2l0cykKKwkJZGlnaXRzKys7CiAKIAlkZXYtPnByb2NfbmFtZSA9IGttYWxsb2Moc3RybGVuKGRldi0+dHlwZSkgKyBkaWdpdHMgKyAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+cHJvY19uYW1lKQogCQlnb3RvIGVycl9vdXQ7Ci0Jc3ByaW50ZihkZXYtPnByb2NfbmFtZSwiJXM6JWQiLGRldi0+dHlwZSwgZGV2LT5udW1iZXIpOworCXNwcmludGYoZGV2LT5wcm9jX25hbWUsICIlczolZCIsIGRldi0+dHlwZSwgZGV2LT5udW1iZXIpOwogCiAJZGV2LT5wcm9jX2VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShkZXYtPnByb2NfbmFtZSwgMCwgYXRtX3Byb2Nfcm9vdCwKIAkJCQkJICAgJnByb2NfYXRtX2Rldl9vcHMsIGRldik7CiAJaWYgKCFkZXYtPnByb2NfZW50cnkpCiAJCWdvdG8gZXJyX2ZyZWVfbmFtZTsKIAlyZXR1cm4gMDsKKwogZXJyX2ZyZWVfbmFtZToKIAlrZnJlZShkZXYtPnByb2NfbmFtZSk7CiBlcnJfb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAotCiB2b2lkIGF0bV9wcm9jX2Rldl9kZXJlZ2lzdGVyKHN0cnVjdCBhdG1fZGV2ICpkZXYpCiB7CiAJaWYgKCFkZXYtPm9wcy0+cHJvY19yZWFkKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wdmMuYyBiL25ldC9hdG0vcHZjLmMKaW5kZXggOGQ3NGU2Mi4uNDM3ZWU3MCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wdmMuYworKysgYi9uZXQvYXRtL3B2Yy5jCkBAIC0xNywzMiArMTcsMzUgQEAKICNpbmNsdWRlICJjb21tb24uaCIJCS8qIGNvbW1vbiBmb3IgUFZDcyBhbmQgU1ZDcyAqLwogCiAKLXN0YXRpYyBpbnQgcHZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssaW50IGhvdykKK3N0YXRpYyBpbnQgcHZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCi0gICAgaW50IHNvY2thZGRyX2xlbikKK3N0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKKwkJICAgIGludCBzb2NrYWRkcl9sZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkcjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCBlcnJvcjsKIAotCWlmIChzb2NrYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSByZXR1cm4gLUVJTlZBTDsKLQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKikgc29ja2FkZHI7Ci0JaWYgKGFkZHItPnNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKSByZXR1cm4gLUVBRk5PU1VQUE9SVDsKKwlpZiAoc29ja2FkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7CisJaWYgKGFkZHItPnNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAlsb2NrX3NvY2soc2spOwogCXZjYyA9IEFUTV9TRChzb2NrKTsKIAlpZiAoIXRlc3RfYml0KEFUTV9WRl9IQVNRT1MsICZ2Y2MtPmZsYWdzKSkgewogCQllcnJvciA9IC1FQkFERkQ7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpKSB7Ci0JCWlmICh2Y2MtPnZwaSAhPSBBVE1fVlBJX1VOU1BFQykgYWRkci0+c2FwX2FkZHIudnBpID0gdmNjLT52cGk7Ci0JCWlmICh2Y2MtPnZjaSAhPSBBVE1fVkNJX1VOU1BFQykgYWRkci0+c2FwX2FkZHIudmNpID0gdmNjLT52Y2k7CisJaWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncykpIHsKKwkJaWYgKHZjYy0+dnBpICE9IEFUTV9WUElfVU5TUEVDKQorCQkJYWRkci0+c2FwX2FkZHIudnBpID0gdmNjLT52cGk7CisJCWlmICh2Y2MtPnZjaSAhPSBBVE1fVkNJX1VOU1BFQykKKwkJCWFkZHItPnNhcF9hZGRyLnZjaSA9IHZjYy0+dmNpOwogCX0KIAllcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItPnNhcF9hZGRyLml0ZiwgYWRkci0+c2FwX2FkZHIudnBpLAogCQkJICAgIGFkZHItPnNhcF9hZGRyLnZjaSk7CkBAIC01MSwxMSArNTQsMTAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotc3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCi0gICAgaW50IHNvY2thZGRyX2xlbixpbnQgZmxhZ3MpCitzdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCisJCSAgICAgICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIHB2Y19iaW5kKHNvY2ssc29ja2FkZHIsc29ja2FkZHJfbGVuKTsKKwlyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7CiB9CiAKIHN0YXRpYyBpbnQgcHZjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKQEAgLTcwLDcgKzcyLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogc3RhdGljIGludCBwdmNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CkBAIC04MywxNiArODQsMTYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotc3RhdGljIGludCBwdmNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCi0gICAgaW50ICpzb2NrYWRkcl9sZW4saW50IHBlZXIpCitzdGF0aWMgaW50IHB2Y19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCisJCSAgICAgICBpbnQgKnNvY2thZGRyX2xlbiwgaW50IHBlZXIpCiB7CiAJc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkcjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwogCi0JaWYgKCF2Y2MtPmRldiB8fCAhdGVzdF9iaXQoQVRNX1ZGX0FERFIsJnZjYy0+ZmxhZ3MpKSByZXR1cm4gLUVOT1RDT05OOworCWlmICghdmNjLT5kZXYgfHwgIXRlc3RfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncykpCisJCXJldHVybiAtRU5PVENPTk47CiAJKnNvY2thZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKTsKLQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKikgc29ja2FkZHI7CisJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7CiAJYWRkci0+c2FwX2ZhbWlseSA9IEFGX0FUTVBWQzsKIAlhZGRyLT5zYXBfYWRkci5pdGYgPSB2Y2MtPmRldi0+bnVtYmVyOwogCWFkZHItPnNhcF9hZGRyLnZwaSA9IHZjYy0+dnBpOwpAQCAtMTAwLDcgKzEwMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfQVRNUFZDLAogCS5vd25lciA9CVRISVNfTU9EVUxFLApAQCAtMTM3LDcgKzEzNyw2IEBACiAJcmV0dXJuIHZjY19jcmVhdGUobmV0LCBzb2NrLCBwcm90b2NvbCwgUEZfQVRNUFZDKTsKIH0KIAotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgcHZjX2ZhbWlseV9vcHMgPSB7CiAJLmZhbWlseSA9IFBGX0FUTVBWQywKIAkuY3JlYXRlID0gcHZjX2NyZWF0ZSwKZGlmZiAtLWdpdCBhL25ldC9hdG0vcmF3LmMgYi9uZXQvYXRtL3Jhdy5jCmluZGV4IGNiZmNjNzEuLmQwYzRiZDAgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcmF3LmMKKysrIGIvbmV0L2F0bS9yYXcuYwpAQCAtMiw2ICsyLDcgQEAKIAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgpAQCAtMTcsNyArMTgsNyBAQAogICogU0tCID09IE5VTEwgaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgYmVpbmcgY2xvc2VkCiAgKi8KIAotc3RhdGljIHZvaWQgYXRtX3B1c2hfcmF3KHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGF0bV9wdXNoX3JhdyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChza2IpIHsKIAkJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CkBAIC0yNywzNiArMjgsMzMgQEAKIAl9CiB9CiAKLQotc3RhdGljIHZvaWQgYXRtX3BvcF9yYXcoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYXRtX3BvcF9yYXcoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAotCXByX2RlYnVnKCJBUG9wUiAoJWQpICVkIC09ICVkXG4iLCB2Y2MtPnZjaSwKLQkJc2tfd21lbV9hbGxvY19nZXQoc2spLCBza2ItPnRydWVzaXplKTsKKwlwcl9kZWJ1ZygiKCVkKSAlZCAtPSAlZFxuIiwKKwkJIHZjYy0+dmNpLCBza193bWVtX2FsbG9jX2dldChzayksIHNrYi0+dHJ1ZXNpemUpOwogCWF0b21pY19zdWIoc2tiLT50cnVlc2l6ZSwgJnNrLT5za193bWVtX2FsbG9jKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXNrLT5za193cml0ZV9zcGFjZShzayk7CiB9CiAKLQotc3RhdGljIGludCBhdG1fc2VuZF9hYWwwKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYXRtX3NlbmRfYWFsMChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCiAJICogTm90ZSB0aGF0IGlmIHZwaS92Y2kgYXJlIF9BTlkgb3IgX1VOU1BFQyB0aGUgYmVsb3cgd2lsbAogCSAqIHN0aWxsIHdvcmsKIAkgKi8KIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYKLQkgICAgKCgodTMyICopIHNrYi0+ZGF0YSlbMF0gJiAoQVRNX0hEUl9WUElfTUFTSyB8IEFUTV9IRFJfVkNJX01BU0spKSAhPQotCSAgICAoKHZjYy0+dnBpIDw8IEFUTV9IRFJfVlBJX1NISUZUKSB8ICh2Y2MtPnZjaSA8PCBBVE1fSERSX1ZDSV9TSElGVCkpKQotCSAgICB7CisJICAgICgoKHUzMiAqKXNrYi0+ZGF0YSlbMF0gJiAoQVRNX0hEUl9WUElfTUFTSyB8IEFUTV9IRFJfVkNJX01BU0spKSAhPQorCSAgICAoKHZjYy0+dnBpIDw8IEFUTV9IRFJfVlBJX1NISUZUKSB8CisJICAgICAodmNjLT52Y2kgPDwgQVRNX0hEUl9WQ0lfU0hJRlQpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KLQlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+c2VuZCh2Y2Msc2tiKTsKKwlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+c2VuZCh2Y2MsIHNrYik7CiB9CiAKLQogaW50IGF0bV9pbml0X2FhbDAoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAl2Y2MtPnB1c2ggPSBhdG1fcHVzaF9yYXc7CkBAIC02Niw3ICs2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogaW50IGF0bV9pbml0X2FhbDM0KHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJdmNjLT5wdXNoID0gYXRtX3B1c2hfcmF3OwpAQCAtNzYsNyArNzMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIGludCBhdG1faW5pdF9hYWw1KHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJdmNjLT5wdXNoID0gYXRtX3B1c2hfcmF3OwpAQCAtODUsNiArODEsNCBAQAogCXZjYy0+c2VuZCA9IHZjYy0+ZGV2LT5vcHMtPnNlbmQ7CiAJcmV0dXJuIDA7CiB9Ci0KLQogRVhQT1JUX1NZTUJPTChhdG1faW5pdF9hYWw1KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcmVzb3VyY2VzLmMgYi9uZXQvYXRtL3Jlc291cmNlcy5jCmluZGV4IDU2YjczMjIuLjkwMDgyOTAgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcmVzb3VyY2VzLmMKKysrIGIvbmV0L2F0bS9yZXNvdXJjZXMuYwpAQCAtNyw2ICs3LDcgQEAKICAqIDIwMDIvMDEgLSBkb24ndCBmcmVlIHRoZSB3aG9sZSBzdHJ1Y3Qgc29jayBvbiBzay0+ZGVzdHJ1Y3QgdGltZSwKICAqIAkgICAgIHVzZSB0aGUgZGVmYXVsdCBkZXN0cnVjdCBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBzb2NrX2luaXRfZGF0YSAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTcwLDcgKzcxLDcgQEAKIAltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwogCXJldHVybiBkZXY7CiB9Ci0KK0VYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApOwogCiBzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLAogCQkJCSBpbnQgbnVtYmVyLCB1bnNpZ25lZCBsb25nICpmbGFncykKQEAgLTc5LDEzICs4MCwxMyBAQAogCiAJZGV2ID0gX19hbGxvY19hdG1fZGV2KHR5cGUpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtX2Rldl9yZWdpc3Rlcjogbm8gc3BhY2UgZm9yIGRldiAlc1xuIiwKLQkJICAgIHR5cGUpOworCQlwcl9lcnIoIm5vIHNwYWNlIGZvciBkZXYgJXNcbiIsIHR5cGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7CiAJaWYgKG51bWJlciAhPSAtMSkgewotCQlpZiAoKGludXNlID0gX19hdG1fZGV2X2xvb2t1cChudW1iZXIpKSkgeworCQlpbnVzZSA9IF9fYXRtX2Rldl9sb29rdXAobnVtYmVyKTsKKwkJaWYgKGludXNlKSB7CiAJCQlhdG1fZGV2X3B1dChpbnVzZSk7CiAJCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwogCQkJa2ZyZWUoZGV2KTsKQEAgLTEwOSwxNiArMTEwLDEyIEBACiAJYXRvbWljX3NldCgmZGV2LT5yZWZjbnQsIDEpOwogCiAJaWYgKGF0bV9wcm9jX2Rldl9yZWdpc3RlcihkZXYpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0bV9kZXZfcmVnaXN0ZXI6ICIKLQkJICAgICAgICJhdG1fcHJvY19kZXZfcmVnaXN0ZXIgZmFpbGVkIGZvciBkZXYgJXNcbiIsCi0JCSAgICAgICB0eXBlKTsKKwkJcHJfZXJyKCJhdG1fcHJvY19kZXZfcmVnaXN0ZXIgZmFpbGVkIGZvciBkZXYgJXNcbiIsIHR5cGUpOwogCQlnb3RvIG91dF9mYWlsOwogCX0KIAogCWlmIChhdG1fcmVnaXN0ZXJfc3lzZnMoZGV2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1fZGV2X3JlZ2lzdGVyOiAiCi0JCSAgICAgICAiYXRtX3JlZ2lzdGVyX3N5c2ZzIGZhaWxlZCBmb3IgZGV2ICVzXG4iLAotCQkgICAgICAgdHlwZSk7CisJCXByX2VycigiYXRtX3JlZ2lzdGVyX3N5c2ZzIGZhaWxlZCBmb3IgZGV2ICVzXG4iLCB0eXBlKTsKIAkJYXRtX3Byb2NfZGV2X2RlcmVnaXN0ZXIoZGV2KTsKIAkJZ290byBvdXRfZmFpbDsKIAl9CkBAIC0xMzQsNyArMTMxLDcgQEAKIAlkZXYgPSBOVUxMOwogCWdvdG8gb3V0OwogfQotCitFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpOwogCiB2b2lkIGF0bV9kZXZfZGVyZWdpc3RlcihzdHJ1Y3QgYXRtX2RldiAqZGV2KQogewpAQCAtMTU2LDcgKzE1Myw3IEBACiAKIAlhdG1fZGV2X3B1dChkZXYpOwogfQotCitFWFBPUlRfU1lNQk9MKGF0bV9kZXZfZGVyZWdpc3Rlcik7CiAKIHN0YXRpYyB2b2lkIGNvcHlfYWFsX3N0YXRzKHN0cnVjdCBrX2F0bV9hYWxfc3RhdHMgKmZyb20sCiAgICAgc3RydWN0IGF0bV9hYWxfc3RhdHMgKnRvKQpAQCAtMTY2LDcgKzE2Myw2IEBACiAjdW5kZWYgX19IQU5ETEVfSVRFTQogfQogCi0KIHN0YXRpYyB2b2lkIHN1YnRyYWN0X2FhbF9zdGF0cyhzdHJ1Y3Qga19hdG1fYWFsX3N0YXRzICpmcm9tLAogICAgIHN0cnVjdCBhdG1fYWFsX3N0YXRzICp0bykKIHsKQEAgLTE3NSw4ICsxNzEsOCBAQAogI3VuZGVmIF9fSEFORExFX0lURU0KIH0KIAotCi1zdGF0aWMgaW50IGZldGNoX3N0YXRzKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBhdG1fZGV2X3N0YXRzIF9fdXNlciAqYXJnLCBpbnQgemVybykKK3N0YXRpYyBpbnQgZmV0Y2hfc3RhdHMoc3RydWN0IGF0bV9kZXYgKmRldiwgc3RydWN0IGF0bV9kZXZfc3RhdHMgX191c2VyICphcmcsCisJCSAgICAgICBpbnQgemVybykKIHsKIAlzdHJ1Y3QgYXRtX2Rldl9zdGF0cyB0bXA7CiAJaW50IGVycm9yID0gMDsKQEAgLTE5NCw3ICsxOTAsNiBAQAogCXJldHVybiBlcnJvciA/IC1FRkFVTFQgOiAwOwogfQogCi0KIGludCBhdG1fZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcsIGludCBjb21wYXQpCiB7CiAJdm9pZCBfX3VzZXIgKmJ1ZjsKQEAgLTIxMCw1MCArMjA1LDQ5IEBACiAjZW5kaWYKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgQVRNX0dFVE5BTUVTOgotCi0JCQlpZiAoY29tcGF0KSB7CisJY2FzZSBBVE1fR0VUTkFNRVM6CisJCWlmIChjb21wYXQpIHsKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCQkJc3RydWN0IGNvbXBhdF9hdG1faW9idWYgX191c2VyICpjaW9idWYgPSBhcmc7Ci0JCQkJY29tcGF0X3VwdHJfdCBjYnVmOwotCQkJCWlvYnVmX2xlbiA9ICZjaW9idWYtPmxlbmd0aDsKLQkJCQlpZiAoZ2V0X3VzZXIoY2J1ZiwgJmNpb2J1Zi0+YnVmZmVyKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJYnVmID0gY29tcGF0X3B0cihjYnVmKTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgYXRtX2lvYnVmIF9fdXNlciAqaW9idWYgPSBhcmc7Ci0JCQkJaW9idWZfbGVuID0gJmlvYnVmLT5sZW5ndGg7Ci0JCQkJaWYgKGdldF91c2VyKGJ1ZiwgJmlvYnVmLT5idWZmZXIpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCWlmIChnZXRfdXNlcihsZW4sIGlvYnVmX2xlbikpCisJCQlzdHJ1Y3QgY29tcGF0X2F0bV9pb2J1ZiBfX3VzZXIgKmNpb2J1ZiA9IGFyZzsKKwkJCWNvbXBhdF91cHRyX3QgY2J1ZjsKKwkJCWlvYnVmX2xlbiA9ICZjaW9idWYtPmxlbmd0aDsKKwkJCWlmIChnZXRfdXNlcihjYnVmLCAmY2lvYnVmLT5idWZmZXIpKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7Ci0JCQlsaXN0X2Zvcl9lYWNoKHAsICZhdG1fZGV2cykKLQkJCQlzaXplICs9IHNpemVvZihpbnQpOwotCQkJaWYgKHNpemUgPiBsZW4pIHsKLQkJCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwotCQkJCXJldHVybiAtRTJCSUc7Ci0JCQl9Ci0JCQl0bXBfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghdG1wX2J1ZikgewotCQkJCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCQl0bXBfcCA9IHRtcF9idWY7Ci0JCQlsaXN0X2Zvcl9lYWNoKHAsICZhdG1fZGV2cykgewotCQkJCWRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKLQkJCQkqdG1wX3ArKyA9IGRldi0+bnVtYmVyOwotCQkJfQorCQkJYnVmID0gY29tcGF0X3B0cihjYnVmKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJc3RydWN0IGF0bV9pb2J1ZiBfX3VzZXIgKmlvYnVmID0gYXJnOworCQkJaW9idWZfbGVuID0gJmlvYnVmLT5sZW5ndGg7CisJCQlpZiAoZ2V0X3VzZXIoYnVmLCAmaW9idWYtPmJ1ZmZlcikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKGdldF91c2VyKGxlbiwgaW9idWZfbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKKwkJbGlzdF9mb3JfZWFjaChwLCAmYXRtX2RldnMpCisJCQlzaXplICs9IHNpemVvZihpbnQpOworCQlpZiAoc2l6ZSA+IGxlbikgewogCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKLQkJCWVycm9yID0gKChjb3B5X3RvX3VzZXIoYnVmLCB0bXBfYnVmLCBzaXplKSkgfHwKLQkJCQkJcHV0X3VzZXIoc2l6ZSwgaW9idWZfbGVuKSkKLQkJCQkJCT8gLUVGQVVMVCA6IDA7Ci0JCQlrZnJlZSh0bXBfYnVmKTsKLQkJCXJldHVybiBlcnJvcjsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQkJcmV0dXJuIC1FMkJJRzsKKwkJfQorCQl0bXBfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF0bXBfYnVmKSB7CisJCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdG1wX3AgPSB0bXBfYnVmOworCQlsaXN0X2Zvcl9lYWNoKHAsICZhdG1fZGV2cykgeworCQkJZGV2ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpOworCQkJKnRtcF9wKysgPSBkZXYtPm51bWJlcjsKKwkJfQorCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOworCQllcnJvciA9ICgoY29weV90b191c2VyKGJ1ZiwgdG1wX2J1Ziwgc2l6ZSkpIHx8CisJCQkgcHV0X3VzZXIoc2l6ZSwgaW9idWZfbGVuKSkKKwkJCT8gLUVGQVVMVCA6IDA7CisJCWtmcmVlKHRtcF9idWYpOworCQlyZXR1cm4gZXJyb3I7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGNvbXBhdCkgewpAQCAtMjgyLDE2NiArMjc2LDE2NyBAQAogCQlpZiAoZ2V0X3VzZXIobnVtYmVyLCAmc2lvYy0+bnVtYmVyKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KLQlpZiAoIShkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChudW1iZXIpLAotCQkJCQkgICAgImF0bS1kZXZpY2UtJWQiLCBudW1iZXIpKSkKKworCWRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKG51bWJlciksICJhdG0tZGV2aWNlLSVkIiwKKwkJCQkgICAgICBudW1iZXIpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgQVRNX0dFVFRZUEU6Ci0JCQlzaXplID0gc3RybGVuKGRldi0+dHlwZSkgKyAxOwotCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRldi0+dHlwZSwgc2l6ZSkpIHsKLQkJCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX0dFVEVTSToKLQkJCXNpemUgPSBFU0lfTEVOOwotCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRldi0+ZXNpLCBzaXplKSkgewotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fU0VURVNJOgotCQkJewotCQkJCWludCBpOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IEVTSV9MRU47IGkrKykKLQkJCQkJaWYgKGRldi0+ZXNpW2ldKSB7Ci0JCQkJCQllcnJvciA9IC1FRVhJU1Q7Ci0JCQkJCQlnb3RvIGRvbmU7Ci0JCQkJCX0KLQkJCX0KLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIEFUTV9TRVRFU0lGOgotCQkJewotCQkJCXVuc2lnbmVkIGNoYXIgZXNpW0VTSV9MRU5dOwotCi0JCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCWlmIChjb3B5X2Zyb21fdXNlcihlc2ksIGJ1ZiwgRVNJX0xFTikpIHsKLQkJCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCW1lbWNweShkZXYtPmVzaSwgZXNpLCBFU0lfTEVOKTsKLQkJCQllcnJvciA9ICBFU0lfTEVOOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJY2FzZSBBVE1fR0VUU1RBVFo6Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCQllcnJvciA9IC1FUEVSTTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBBVE1fR0VUU1RBVDoKLQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGF0bV9kZXZfc3RhdHMpOwotCQkJZXJyb3IgPSBmZXRjaF9zdGF0cyhkZXYsIGJ1ZiwgY21kID09IEFUTV9HRVRTVEFUWik7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBkb25lOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX0dFVENJUkFOR0U6Ci0JCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdG1fY2lyYW5nZSk7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmRldi0+Y2lfcmFuZ2UsIHNpemUpKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFUTV9HRVRMSU5LUkFURToKLQkJCXNpemUgPSBzaXplb2YoaW50KTsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZGV2LT5saW5rX3JhdGUsIHNpemUpKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFUTV9SU1RBRERSOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQkJZXJyb3IgPSAtRVBFUk07Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJYXRtX3Jlc2V0X2FkZHIoZGV2LCBBVE1fQUREUl9MT0NBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fQUREQUREUjoKLQkJY2FzZSBBVE1fREVMQUREUjoKLQkJY2FzZSBBVE1fQURETEVDU0FERFI6Ci0JCWNhc2UgQVRNX0RFTExFQ1NBRERSOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQkJZXJyb3IgPSAtRVBFUk07Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgYWRkcjsKLQotCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmYWRkciwgYnVmLCBzaXplb2YoYWRkcikpKSB7Ci0JCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlpZiAoY21kID09IEFUTV9BRERBRERSIHx8IGNtZCA9PSBBVE1fQURETEVDU0FERFIpCi0JCQkJCWVycm9yID0gYXRtX2FkZF9hZGRyKGRldiwgJmFkZHIsCi0JCQkJCQkJICAgICAoY21kID09IEFUTV9BRERBRERSID8KLQkJCQkJCQkgICAgICBBVE1fQUREUl9MT0NBTCA6IEFUTV9BRERSX0xFQ1MpKTsKLQkJCQllbHNlCi0JCQkJCWVycm9yID0gYXRtX2RlbF9hZGRyKGRldiwgJmFkZHIsCi0JCQkJCQkJICAgICAoY21kID09IEFUTV9ERUxBRERSID8KLQkJCQkJCQkgICAgICBBVE1fQUREUl9MT0NBTCA6IEFUTV9BRERSX0xFQ1MpKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCWNhc2UgQVRNX0dFVEFERFI6Ci0JCWNhc2UgQVRNX0dFVExFQ1NBRERSOgotCQkJZXJyb3IgPSBhdG1fZ2V0X2FkZHIoZGV2LCBidWYsIGxlbiwKLQkJCQkJICAgICAoY21kID09IEFUTV9HRVRBRERSID8KLQkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7Ci0JCQlpZiAoZXJyb3IgPCAwKQotCQkJCWdvdG8gZG9uZTsKLQkJCXNpemUgPSBlcnJvcjsKLQkJCS8qIG1heSByZXR1cm4gMCwgYnV0IGxhdGVyIG9uIHNpemUgPT0gMCBtZWFucyAiZG9uJ3QKLQkJCSAgIHdyaXRlIHRoZSBsZW5ndGgiICovCi0JCQllcnJvciA9IHB1dF91c2VyKHNpemUsIHNpb2NfbGVuKQotCQkJCT8gLUVGQVVMVCA6IDA7CisJY2FzZSBBVE1fR0VUVFlQRToKKwkJc2l6ZSA9IHN0cmxlbihkZXYtPnR5cGUpICsgMTsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRldi0+dHlwZSwgc2l6ZSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKIAkJCWdvdG8gZG9uZTsKLQkJY2FzZSBBVE1fU0VUTE9PUDoKLQkJCWlmIChfX0FUTV9MTV9YVFJNVCgoaW50KSAodW5zaWduZWQgbG9uZykgYnVmKSAmJgotCQkJICAgIF9fQVRNX0xNX1hUTE9DKChpbnQpICh1bnNpZ25lZCBsb25nKSBidWYpID4KLQkJCSAgICBfX0FUTV9MTV9YVFJNVCgoaW50KSAodW5zaWduZWQgbG9uZykgYnVmKSkgewotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBBVE1fU0VUQ0lSQU5HRToKLQkJY2FzZSBTT05FVF9HRVRTVEFUWjoKLQkJY2FzZSBTT05FVF9TRVRESUFHOgotCQljYXNlIFNPTkVUX0NMUkRJQUc6Ci0JCWNhc2UgU09ORVRfU0VURlJBTUlORzoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQlkZWZhdWx0OgotCQkJaWYgKGNvbXBhdCkgewotI2lmZGVmIENPTkZJR19DT01QQVQKLQkJCQlpZiAoIWRldi0+b3BzLT5jb21wYXRfaW9jdGwpIHsKLQkJCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCXNpemUgPSBkZXYtPm9wcy0+Y29tcGF0X2lvY3RsKGRldiwgY21kLCBidWYpOwotI2VuZGlmCi0JCQl9IGVsc2UgewotCQkJCWlmICghZGV2LT5vcHMtPmlvY3RsKSB7Ci0JCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlzaXplID0gZGV2LT5vcHMtPmlvY3RsKGRldiwgY21kLCBidWYpOwotCQkJfQotCQkJaWYgKHNpemUgPCAwKSB7Ci0JCQkJZXJyb3IgPSAoc2l6ZSA9PSAtRU5PSU9DVExDTUQgPyAtRUlOVkFMIDogc2l6ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVE1fR0VURVNJOgorCQlzaXplID0gRVNJX0xFTjsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRldi0+ZXNpLCBzaXplKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJZ290byBkb25lOworCQl9CisJCWJyZWFrOworCWNhc2UgQVRNX1NFVEVTSToKKwl7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBFU0lfTEVOOyBpKyspCisJCQlpZiAoZGV2LT5lc2lbaV0pIHsKKwkJCQllcnJvciA9IC1FRVhJU1Q7CiAJCQkJZ290byBkb25lOwogCQkJfQogCX0KKwkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUTV9TRVRFU0lGOgorCXsKKwkJdW5zaWduZWQgY2hhciBlc2lbRVNJX0xFTl07CisKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQllcnJvciA9IC1FUEVSTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoZXNpLCBidWYsIEVTSV9MRU4pKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJbWVtY3B5KGRldi0+ZXNpLCBlc2ksIEVTSV9MRU4pOworCQllcnJvciA9ICBFU0lfTEVOOworCQlnb3RvIGRvbmU7CisJfQorCWNhc2UgQVRNX0dFVFNUQVRaOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBkb25lOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRNX0dFVFNUQVQ6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IGF0bV9kZXZfc3RhdHMpOworCQllcnJvciA9IGZldGNoX3N0YXRzKGRldiwgYnVmLCBjbWQgPT0gQVRNX0dFVFNUQVRaKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkb25lOworCQlicmVhazsKKwljYXNlIEFUTV9HRVRDSVJBTkdFOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdG1fY2lyYW5nZSk7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZGV2LT5jaV9yYW5nZSwgc2l6ZSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFUTV9HRVRMSU5LUkFURToKKwkJc2l6ZSA9IHNpemVvZihpbnQpOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmRldi0+bGlua19yYXRlLCBzaXplKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJZ290byBkb25lOworCQl9CisJCWJyZWFrOworCWNhc2UgQVRNX1JTVEFERFI6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJZXJyb3IgPSAtRVBFUk07CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYXRtX3Jlc2V0X2FkZHIoZGV2LCBBVE1fQUREUl9MT0NBTCk7CisJCWJyZWFrOworCWNhc2UgQVRNX0FEREFERFI6CisJY2FzZSBBVE1fREVMQUREUjoKKwljYXNlIEFUTV9BRERMRUNTQUREUjoKKwljYXNlIEFUTV9ERUxMRUNTQUREUjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgYWRkcjsKKworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhZGRyLCBidWYsIHNpemVvZihhZGRyKSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoY21kID09IEFUTV9BRERBRERSIHx8IGNtZCA9PSBBVE1fQURETEVDU0FERFIpCisJCQllcnJvciA9IGF0bV9hZGRfYWRkcihkZXYsICZhZGRyLAorCQkJCQkgICAgIChjbWQgPT0gQVRNX0FEREFERFIgPworCQkJCQkgICAgICBBVE1fQUREUl9MT0NBTCA6IEFUTV9BRERSX0xFQ1MpKTsKKwkJZWxzZQorCQkJZXJyb3IgPSBhdG1fZGVsX2FkZHIoZGV2LCAmYWRkciwKKwkJCQkJICAgICAoY21kID09IEFUTV9ERUxBRERSID8KKwkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJY2FzZSBBVE1fR0VUQUREUjoKKwljYXNlIEFUTV9HRVRMRUNTQUREUjoKKwkJZXJyb3IgPSBhdG1fZ2V0X2FkZHIoZGV2LCBidWYsIGxlbiwKKwkJCQkgICAgIChjbWQgPT0gQVRNX0dFVEFERFIgPworCQkJCSAgICAgIEFUTV9BRERSX0xPQ0FMIDogQVRNX0FERFJfTEVDUykpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBkb25lOworCQlzaXplID0gZXJyb3I7CisJCS8qIG1heSByZXR1cm4gMCwgYnV0IGxhdGVyIG9uIHNpemUgPT0gMCBtZWFucyAiZG9uJ3QKKwkJICAgd3JpdGUgdGhlIGxlbmd0aCIgKi8KKwkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCBzaW9jX2xlbikgPyAtRUZBVUxUIDogMDsKKwkJZ290byBkb25lOworCWNhc2UgQVRNX1NFVExPT1A6CisJCWlmIChfX0FUTV9MTV9YVFJNVCgoaW50KSAodW5zaWduZWQgbG9uZykgYnVmKSAmJgorCQkgICAgX19BVE1fTE1fWFRMT0MoKGludCkgKHVuc2lnbmVkIGxvbmcpIGJ1ZikgPgorCQkgICAgX19BVE1fTE1fWFRSTVQoKGludCkgKHVuc2lnbmVkIGxvbmcpIGJ1ZikpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUTV9TRVRDSVJBTkdFOgorCWNhc2UgU09ORVRfR0VUU1RBVFo6CisJY2FzZSBTT05FVF9TRVRESUFHOgorCWNhc2UgU09ORVRfQ0xSRElBRzoKKwljYXNlIFNPTkVUX1NFVEZSQU1JTkc6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJZXJyb3IgPSAtRVBFUk07CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJaWYgKGNvbXBhdCkgeworI2lmZGVmIENPTkZJR19DT01QQVQKKwkJCWlmICghZGV2LT5vcHMtPmNvbXBhdF9pb2N0bCkgeworCQkJCWVycm9yID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlzaXplID0gZGV2LT5vcHMtPmNvbXBhdF9pb2N0bChkZXYsIGNtZCwgYnVmKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaWYgKCFkZXYtPm9wcy0+aW9jdGwpIHsKKwkJCQllcnJvciA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJc2l6ZSA9IGRldi0+b3BzLT5pb2N0bChkZXYsIGNtZCwgYnVmKTsKKwkJfQorCQlpZiAoc2l6ZSA8IDApIHsKKwkJCWVycm9yID0gKHNpemUgPT0gLUVOT0lPQ1RMQ01EID8gLUVJTlZBTCA6IHNpemUpOworCQkJZ290byBkb25lOworCQl9CisJfQogCiAJaWYgKHNpemUpCi0JCWVycm9yID0gcHV0X3VzZXIoc2l6ZSwgc2lvY19sZW4pCi0JCQk/IC1FRkFVTFQgOiAwOworCQllcnJvciA9IHB1dF91c2VyKHNpemUsIHNpb2NfbGVuKSA/IC1FRkFVTFQgOiAwOwogCWVsc2UKIAkJZXJyb3IgPSAwOwogZG9uZToKQEAgLTQ0OSwyMSArNDQ0LDEwIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICpkZXZfZ2V0X2lkeChsb2ZmX3QgbGVmdCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOwotCi0JbGlzdF9mb3JfZWFjaChwLCAmYXRtX2RldnMpIHsKLQkJaWYgKCEtLWxlZnQpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIChwICE9ICZhdG1fZGV2cykgPyBwIDogTlVMTDsKLX0KLQogdm9pZCAqYXRtX2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCW11dGV4X2xvY2soJmF0bV9kZXZfbXV0ZXgpOwotCXJldHVybiAqcG9zID8gZGV2X2dldF9pZHgoKnBvcykgOiBTRVFfU1RBUlRfVE9LRU47CisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0X2hlYWQoJmF0bV9kZXZzLCAqcG9zKTsKIH0KIAogdm9pZCBhdG1fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtNDczLDEzICs0NTcsNSBAQAogCiB2b2lkICphdG1fZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkrKypwb3M7Ci0JdiA9ICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJPyBhdG1fZGV2cy5uZXh0IDogKChzdHJ1Y3QgbGlzdF9oZWFkICopdiktPm5leHQ7Ci0JcmV0dXJuICh2ID09ICZhdG1fZGV2cykgPyBOVUxMIDogdjsKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmYXRtX2RldnMsIHBvcyk7CiB9Ci0KLQotRVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woYXRtX2Rldl9kZXJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9zaWduYWxpbmcuYyBiL25ldC9hdG0vc2lnbmFsaW5nLmMKaW5kZXggMjI5OTIxNC4uYWQxZDI4YSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9zaWduYWxpbmcuYworKysgYi9uZXQvYXRtL3NpZ25hbGluZy5jCkBAIC0yLDYgKzIsNyBAQAogCiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrICovCkBAIC0xNyw3ICsxOCw2IEBACiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAic2lnbmFsaW5nLmgiCiAKLQogI3VuZGVmIFdBSVRfRk9SX0RFTU9OCQkvKiAjZGVmaW5lIHRoaXMgaWYgc3lzdGVtIGNhbGxzIG9uIFNWQyBzb2NrZXRzCiAJCQkJICAgc2hvdWxkIGJsb2NrIHVudGlsIHRoZSBkZW1vbiBydW5zLgogCQkJCSAgIERhbmdlcjogbWF5IGNhdXNlIG5hc3R5IGhhbmdzIGlmIHRoZSBkZW1vbgpAQCAtMjgsNjAgKzI4LDU5IEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc2lnZF9zbGVlcCk7CiAjZW5kaWYKIAotCiBzdGF0aWMgdm9pZCBzaWdkX3B1dF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKICNpZmRlZiBXQUlUX0ZPUl9ERU1PTgotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsY3VycmVudCk7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKLQlhZGRfd2FpdF9xdWV1ZSgmc2lnZF9zbGVlcCwmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnNpZ2Rfc2xlZXAsICZ3YWl0KTsKIAl3aGlsZSAoIXNpZ2QpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlwcl9kZWJ1ZygiYXRtc3ZjOiB3YWl0aW5nIGZvciBzaWduYWxpbmcgZGVtb24uLi5cbiIpOworCQlwcl9kZWJ1ZygiYXRtc3ZjOiB3YWl0aW5nIGZvciBzaWduYWxpbmcgZGFlbW9uLi4uXG4iKTsKIAkJc2NoZWR1bGUoKTsKIAl9CiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNpZ2Rfc2xlZXAsJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZzaWdkX3NsZWVwLCAmd2FpdCk7CiAjZWxzZQogCWlmICghc2lnZCkgewotCQlwcl9kZWJ1ZygiYXRtc3ZjOiBubyBzaWduYWxpbmcgZGVtb25cbiIpOworCQlwcl9kZWJ1ZygiYXRtc3ZjOiBubyBzaWduYWxpbmcgZGFlbW9uXG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQlhdG1fZm9yY2VfY2hhcmdlKHNpZ2Qsc2tiLT50cnVlc2l6ZSk7Ci0Jc2tiX3F1ZXVlX3RhaWwoJnNrX2F0bShzaWdkKS0+c2tfcmVjZWl2ZV9xdWV1ZSxza2IpOworCWF0bV9mb3JjZV9jaGFyZ2Uoc2lnZCwgc2tiLT50cnVlc2l6ZSk7CisJc2tiX3F1ZXVlX3RhaWwoJnNrX2F0bShzaWdkKS0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAlza19hdG0oc2lnZCktPnNrX2RhdGFfcmVhZHkoc2tfYXRtKHNpZ2QpLCBza2ItPmxlbik7CiB9CiAKLQotc3RhdGljIHZvaWQgbW9kaWZ5X3FvcyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBhdG1zdmNfbXNnICptc2cpCitzdGF0aWMgdm9pZCBtb2RpZnlfcW9zKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1zdmNfbXNnICptc2cpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpIHx8Ci0JICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsICZ2Y2MtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncykpCiAJCXJldHVybjsKIAltc2ctPnR5cGUgPSBhc19lcnJvcjsKLQlpZiAoIXZjYy0+ZGV2LT5vcHMtPmNoYW5nZV9xb3MpIG1zZy0+cmVwbHkgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIXZjYy0+ZGV2LT5vcHMtPmNoYW5nZV9xb3MpCisJCW1zZy0+cmVwbHkgPSAtRU9QTk9UU1VQUDsKIAllbHNlIHsKIAkJLyogc2hvdWxkIGxvY2sgVkNDICovCi0JCW1zZy0+cmVwbHkgPSB2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKHZjYywmbXNnLT5xb3MsCi0JCSAgICBtc2ctPnJlcGx5KTsKLQkJaWYgKCFtc2ctPnJlcGx5KSBtc2ctPnR5cGUgPSBhc19va2F5OworCQltc2ctPnJlcGx5ID0gdmNjLT5kZXYtPm9wcy0+Y2hhbmdlX3Fvcyh2Y2MsICZtc2ctPnFvcywKKwkJCQkJCSAgICAgICBtc2ctPnJlcGx5KTsKKwkJaWYgKCFtc2ctPnJlcGx5KQorCQkJbXNnLT50eXBlID0gYXNfb2theTsKIAl9CiAJLyoKIAkgKiBTaG91bGQgcHJvYmFibHkganVzdCB0dXJuIGFyb3VuZCB0aGUgb2xkIHNrYi4gQnV0IHRoZSwgdGhlIGJ1ZmZlcgogCSAqIHNwYWNlIGFjY291bnRpbmcgbmVlZHMgdG8gZm9sbG93IHRoZSBjaGFuZ2UgdG9vLiBNYXliZSBsYXRlci4KIAkgKi8KLQl3aGlsZSAoIShza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1zdmNfbXNnKSxHRlBfS0VSTkVMKSkpCisJd2hpbGUgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZyksIEdGUF9LRVJORUwpKSkKIAkJc2NoZWR1bGUoKTsKLQkqKHN0cnVjdCBhdG1zdmNfbXNnICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZykpID0gKm1zZzsKKwkqKHN0cnVjdCBhdG1zdmNfbXNnICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZykpID0gKm1zZzsKIAlzaWdkX3B1dF9za2Ioc2tiKTsKIH0KIAotCi1zdGF0aWMgaW50IHNpZ2Rfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHNpZ2Rfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdG1zdmNfbXNnICptc2c7CiAJc3RydWN0IGF0bV92Y2MgKnNlc3Npb25fdmNjOwpAQCAtOTAsNjkgKzg5LDY4IEBACiAJbXNnID0gKHN0cnVjdCBhdG1zdmNfbXNnICopIHNrYi0+ZGF0YTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJdmNjID0gKihzdHJ1Y3QgYXRtX3ZjYyAqKikgJm1zZy0+dmNjOwotCXByX2RlYnVnKCJzaWdkX3NlbmQgJWQgKDB4JWx4KVxuIiwoaW50KSBtc2ctPnR5cGUsCi0JICAodW5zaWduZWQgbG9uZykgdmNjKTsKKwlwcl9kZWJ1ZygiJWQgKDB4JWx4KVxuIiwgKGludCltc2ctPnR5cGUsICh1bnNpZ25lZCBsb25nKXZjYyk7CiAJc2sgPSBza19hdG0odmNjKTsKIAogCXN3aXRjaCAobXNnLT50eXBlKSB7Ci0JCWNhc2UgYXNfb2theToKLQkJCXNrLT5za19lcnIgPSAtbXNnLT5yZXBseTsKLQkJCWNsZWFyX2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOwotCQkJaWYgKCEqdmNjLT5sb2NhbC5zYXNfYWRkci5wcnYgJiYKLQkJCSAgICAhKnZjYy0+bG9jYWwuc2FzX2FkZHIucHViKSB7Ci0JCQkJdmNjLT5sb2NhbC5zYXNfZmFtaWx5ID0gQUZfQVRNU1ZDOwotCQkJCW1lbWNweSh2Y2MtPmxvY2FsLnNhc19hZGRyLnBydiwKLQkJCQkgICAgbXNnLT5sb2NhbC5zYXNfYWRkci5wcnYsQVRNX0VTQV9MRU4pOwotCQkJCW1lbWNweSh2Y2MtPmxvY2FsLnNhc19hZGRyLnB1YiwKLQkJCQkgICAgbXNnLT5sb2NhbC5zYXNfYWRkci5wdWIsQVRNX0UxNjRfTEVOKzEpOwotCQkJfQotCQkJc2Vzc2lvbl92Y2MgPSB2Y2MtPnNlc3Npb24gPyB2Y2MtPnNlc3Npb24gOiB2Y2M7Ci0JCQlpZiAoc2Vzc2lvbl92Y2MtPnZwaSB8fCBzZXNzaW9uX3ZjYy0+dmNpKSBicmVhazsKLQkJCXNlc3Npb25fdmNjLT5pdGYgPSBtc2ctPnB2Yy5zYXBfYWRkci5pdGY7Ci0JCQlzZXNzaW9uX3ZjYy0+dnBpID0gbXNnLT5wdmMuc2FwX2FkZHIudnBpOwotCQkJc2Vzc2lvbl92Y2MtPnZjaSA9IG1zZy0+cHZjLnNhcF9hZGRyLnZjaTsKLQkJCWlmIChzZXNzaW9uX3ZjYy0+dnBpIHx8IHNlc3Npb25fdmNjLT52Y2kpCi0JCQkJc2Vzc2lvbl92Y2MtPnFvcyA9IG1zZy0+cW9zOworCWNhc2UgYXNfb2theToKKwkJc2stPnNrX2VyciA9IC1tc2ctPnJlcGx5OworCQljbGVhcl9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKKwkJaWYgKCEqdmNjLT5sb2NhbC5zYXNfYWRkci5wcnYgJiYgISp2Y2MtPmxvY2FsLnNhc19hZGRyLnB1YikgeworCQkJdmNjLT5sb2NhbC5zYXNfZmFtaWx5ID0gQUZfQVRNU1ZDOworCQkJbWVtY3B5KHZjYy0+bG9jYWwuc2FzX2FkZHIucHJ2LAorCQkJICAgICAgIG1zZy0+bG9jYWwuc2FzX2FkZHIucHJ2LCBBVE1fRVNBX0xFTik7CisJCQltZW1jcHkodmNjLT5sb2NhbC5zYXNfYWRkci5wdWIsCisJCQkgICAgICAgbXNnLT5sb2NhbC5zYXNfYWRkci5wdWIsIEFUTV9FMTY0X0xFTiArIDEpOworCQl9CisJCXNlc3Npb25fdmNjID0gdmNjLT5zZXNzaW9uID8gdmNjLT5zZXNzaW9uIDogdmNjOworCQlpZiAoc2Vzc2lvbl92Y2MtPnZwaSB8fCBzZXNzaW9uX3ZjYy0+dmNpKQogCQkJYnJlYWs7Ci0JCWNhc2UgYXNfZXJyb3I6Ci0JCQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCZ2Y2MtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpOwotCQkJc2stPnNrX2VyciA9IC1tc2ctPnJlcGx5OwotCQkJY2xlYXJfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJY2FzZSBhc19pbmRpY2F0ZToKLQkJCXZjYyA9ICooc3RydWN0IGF0bV92Y2MgKiopICZtc2ctPmxpc3Rlbl92Y2M7Ci0JCQlzayA9IHNrX2F0bSh2Y2MpOwotCQkJcHJfZGVidWcoImFzX2luZGljYXRlISEhXG4iKTsKLQkJCWxvY2tfc29jayhzayk7Ci0JCQlpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkgewotCQkJCXNpZ2RfZW5xKE5VTEwsYXNfcmVqZWN0LHZjYyxOVUxMLE5VTEwpOwotCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQlnb3RvIGFzX2luZGljYXRlX2NvbXBsZXRlOwotCQkJfQotCQkJc2stPnNrX2Fja19iYWNrbG9nKys7Ci0JCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7Ci0JCQlwcl9kZWJ1Zygid2FraW5nIHNrLT5za19zbGVlcCAweCVwXG4iLCBzay0+c2tfc2xlZXApOwotCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CisJCXNlc3Npb25fdmNjLT5pdGYgPSBtc2ctPnB2Yy5zYXBfYWRkci5pdGY7CisJCXNlc3Npb25fdmNjLT52cGkgPSBtc2ctPnB2Yy5zYXBfYWRkci52cGk7CisJCXNlc3Npb25fdmNjLT52Y2kgPSBtc2ctPnB2Yy5zYXBfYWRkci52Y2k7CisJCWlmIChzZXNzaW9uX3ZjYy0+dnBpIHx8IHNlc3Npb25fdmNjLT52Y2kpCisJCQlzZXNzaW9uX3ZjYy0+cW9zID0gbXNnLT5xb3M7CisJCWJyZWFrOworCWNhc2UgYXNfZXJyb3I6CisJCWNsZWFyX2JpdChBVE1fVkZfUkVHSVMsICZ2Y2MtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCQlzay0+c2tfZXJyID0gLW1zZy0+cmVwbHk7CisJCWNsZWFyX2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOworCQlicmVhazsKKwljYXNlIGFzX2luZGljYXRlOgorCQl2Y2MgPSAqKHN0cnVjdCBhdG1fdmNjICoqKSZtc2ctPmxpc3Rlbl92Y2M7CisJCXNrID0gc2tfYXRtKHZjYyk7CisJCXByX2RlYnVnKCJhc19pbmRpY2F0ZSEhIVxuIik7CisJCWxvY2tfc29jayhzayk7CisJCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7CisJCQlzaWdkX2VucShOVUxMLCBhc19yZWplY3QsIHZjYywgTlVMTCwgTlVMTCk7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIGFzX2luZGljYXRlX2NvbXBsZXRlOworCQl9CisJCXNrLT5za19hY2tfYmFja2xvZysrOworCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CisJCXByX2RlYnVnKCJ3YWtpbmcgc2stPnNrX3NsZWVwIDB4JXBcbiIsIHNrLT5za19zbGVlcCk7CisJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogYXNfaW5kaWNhdGVfY29tcGxldGU6Ci0JCQlyZWxlYXNlX3NvY2soc2spOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgYXNfY2xvc2U6Ci0JCQlzZXRfYml0KEFUTV9WRl9SRUxFQVNFRCwmdmNjLT5mbGFncyk7Ci0JCQl2Y2NfcmVsZWFzZV9hc3luYyh2Y2MsIG1zZy0+cmVwbHkpOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgYXNfbW9kaWZ5OgotCQkJbW9kaWZ5X3Fvcyh2Y2MsbXNnKTsKLQkJCWJyZWFrOwotCQljYXNlIGFzX2FkZHBhcnR5OgotCQljYXNlIGFzX2Ryb3BwYXJ0eToKLQkJCXNrLT5za19lcnJfc29mdCA9IG1zZy0+cmVwbHk7CS8qIDwgMCBmYWlsdXJlLCBvdGhlcndpc2UgZXBfcmVmICovCi0JCQljbGVhcl9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fQUxFUlQgInNpZ2Rfc2VuZDogYmFkIG1lc3NhZ2UgdHlwZSAlZFxuIiwKLQkJCSAgICAoaW50KSBtc2ctPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlbGVhc2Vfc29jayhzayk7CisJCXJldHVybiAwOworCWNhc2UgYXNfY2xvc2U6CisJCXNldF9iaXQoQVRNX1ZGX1JFTEVBU0VELCAmdmNjLT5mbGFncyk7CisJCXZjY19yZWxlYXNlX2FzeW5jKHZjYywgbXNnLT5yZXBseSk7CisJCWdvdG8gb3V0OworCWNhc2UgYXNfbW9kaWZ5OgorCQltb2RpZnlfcW9zKHZjYywgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBhc19hZGRwYXJ0eToKKwljYXNlIGFzX2Ryb3BwYXJ0eToKKwkJc2stPnNrX2Vycl9zb2Z0ID0gbXNnLT5yZXBseTsKKwkJCQkJLyogPCAwIGZhaWx1cmUsIG90aGVyd2lzZSBlcF9yZWYgKi8KKwkJY2xlYXJfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2FsZXJ0KCJiYWQgbWVzc2FnZSB0eXBlICVkXG4iLCAoaW50KW1zZy0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKIG91dDoKQEAgLTE2MCw0OCArMTU4LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLQotdm9pZCBzaWdkX2VucTIoc3RydWN0IGF0bV92Y2MgKnZjYyxlbnVtIGF0bXN2Y19tc2dfdHlwZSB0eXBlLAotICAgIHN0cnVjdCBhdG1fdmNjICpsaXN0ZW5fdmNjLGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnB2YywKLSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICpzdmMsY29uc3Qgc3RydWN0IGF0bV9xb3MgKnFvcyxpbnQgcmVwbHkpCit2b2lkIHNpZ2RfZW5xMihzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBlbnVtIGF0bXN2Y19tc2dfdHlwZSB0eXBlLAorCSAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqbGlzdGVuX3ZjYywgY29uc3Qgc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqcHZjLAorCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICpzdmMsIGNvbnN0IHN0cnVjdCBhdG1fcW9zICpxb3MsCisJICAgICAgIGludCByZXBseSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdG1zdmNfbXNnICptc2c7CiAJc3RhdGljIHVuc2lnbmVkIHNlc3Npb24gPSAwOwogCi0JcHJfZGVidWcoInNpZ2RfZW5xICVkICgweCVwKVxuIiwoaW50KSB0eXBlLHZjYyk7Ci0Jd2hpbGUgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZyksR0ZQX0tFUk5FTCkpKQorCXByX2RlYnVnKCIlZCAoMHglcClcbiIsIChpbnQpdHlwZSwgdmNjKTsKKwl3aGlsZSAoIShza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1zdmNfbXNnKSwgR0ZQX0tFUk5FTCkpKQogCQlzY2hlZHVsZSgpOwotCW1zZyA9IChzdHJ1Y3QgYXRtc3ZjX21zZyAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGF0bXN2Y19tc2cpKTsKLQltZW1zZXQobXNnLDAsc2l6ZW9mKCptc2cpKTsKKwltc2cgPSAoc3RydWN0IGF0bXN2Y19tc2cgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBhdG1zdmNfbXNnKSk7CisJbWVtc2V0KG1zZywgMCwgc2l6ZW9mKCptc2cpKTsKIAltc2ctPnR5cGUgPSB0eXBlOwogCSooc3RydWN0IGF0bV92Y2MgKiopICZtc2ctPnZjYyA9IHZjYzsKIAkqKHN0cnVjdCBhdG1fdmNjICoqKSAmbXNnLT5saXN0ZW5fdmNjID0gbGlzdGVuX3ZjYzsKIAltc2ctPnJlcGx5ID0gcmVwbHk7Ci0JaWYgKHFvcykgbXNnLT5xb3MgPSAqcW9zOwotCWlmICh2Y2MpIG1zZy0+c2FwID0gdmNjLT5zYXA7Ci0JaWYgKHN2YykgbXNnLT5zdmMgPSAqc3ZjOwotCWlmICh2Y2MpIG1zZy0+bG9jYWwgPSB2Y2MtPmxvY2FsOwotCWlmIChwdmMpIG1zZy0+cHZjID0gKnB2YzsKKwlpZiAocW9zKQorCQltc2ctPnFvcyA9ICpxb3M7CisJaWYgKHZjYykKKwkJbXNnLT5zYXAgPSB2Y2MtPnNhcDsKKwlpZiAoc3ZjKQorCQltc2ctPnN2YyA9ICpzdmM7CisJaWYgKHZjYykKKwkJbXNnLT5sb2NhbCA9IHZjYy0+bG9jYWw7CisJaWYgKHB2YykKKwkJbXNnLT5wdmMgPSAqcHZjOwogCWlmICh2Y2MpIHsKIAkJaWYgKHR5cGUgPT0gYXNfY29ubmVjdCAmJiB0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpKQogCQkJbXNnLT5zZXNzaW9uID0gKytzZXNzaW9uOwogCQkJLyogZXZlcnkgbmV3IHBtcCBjb25uZWN0IGdldHMgdGhlIG5leHQgc2Vzc2lvbiBudW1iZXIgKi8KIAl9CiAJc2lnZF9wdXRfc2tiKHNrYik7Ci0JaWYgKHZjYykgc2V0X2JpdChBVE1fVkZfUkVHSVMsJnZjYy0+ZmxhZ3MpOworCWlmICh2Y2MpCisJCXNldF9iaXQoQVRNX1ZGX1JFR0lTLCAmdmNjLT5mbGFncyk7CiB9CiAKLQotdm9pZCBzaWdkX2VucShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGVudW0gYXRtc3ZjX21zZ190eXBlIHR5cGUsCi0gICAgc3RydWN0IGF0bV92Y2MgKmxpc3Rlbl92Y2MsY29uc3Qgc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqcHZjLAotICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKnN2YykKK3ZvaWQgc2lnZF9lbnEoc3RydWN0IGF0bV92Y2MgKnZjYywgZW51bSBhdG1zdmNfbXNnX3R5cGUgdHlwZSwKKwkgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqbGlzdGVuX3ZjYywgY29uc3Qgc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqcHZjLAorCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKnN2YykKIHsKLQlzaWdkX2VucTIodmNjLHR5cGUsbGlzdGVuX3ZjYyxwdmMsc3ZjLHZjYyA/ICZ2Y2MtPnFvcyA6IE5VTEwsMCk7CisJc2lnZF9lbnEyKHZjYywgdHlwZSwgbGlzdGVuX3ZjYywgcHZjLCBzdmMsIHZjYyA/ICZ2Y2MtPnFvcyA6IE5VTEwsIDApOwogCS8qIG90aGVyIElTUCBhcHBsaWNhdGlvbnMgbWF5IHVzZSAicmVwbHkiICovCiB9CiAKLQogc3RhdGljIHZvaWQgcHVyZ2VfdmNjKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaWYgKHNrX2F0bSh2Y2MpLT5za19mYW1pbHkgPT0gUEZfQVRNU1ZDICYmCkBAIC0yMTIsMjEgKzIxNCwyMCBAQAogCX0KIH0KIAotCiBzdGF0aWMgdm9pZCBzaWdkX2Nsb3NlKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IHNvY2sgKnM7CiAJaW50IGk7CiAKLQlwcl9kZWJ1Zygic2lnZF9jbG9zZVxuIik7CisJcHJfZGVidWcoIlxuIik7CiAJc2lnZCA9IE5VTEw7CiAJaWYgKHNrYl9wZWVrKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSkpCi0JCXByaW50ayhLRVJOX0VSUiAic2lnZF9jbG9zZTogY2xvc2luZyB3aXRoIHJlcXVlc3RzIHBlbmRpbmdcbiIpOworCQlwcl9lcnIoImNsb3Npbmcgd2l0aCByZXF1ZXN0cyBwZW5kaW5nXG4iKTsKIAlza2JfcXVldWVfcHVyZ2UoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKTsKIAogCXJlYWRfbG9jaygmdmNjX3NrbGlzdF9sb2NrKTsKLQlmb3IoaSA9IDA7IGkgPCBWQ0NfSFRBQkxFX1NJWkU7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBWQ0NfSFRBQkxFX1NJWkU7ICsraSkgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKIAogCQlza19mb3JfZWFjaChzLCBub2RlLCBoZWFkKSB7CkBAIC0yMzgsMTMgKzIzOSwxMSBAQAogCXJlYWRfdW5sb2NrKCZ2Y2Nfc2tsaXN0X2xvY2spOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgYXRtZGV2X29wcyBzaWdkX2Rldl9vcHMgPSB7CiAJLmNsb3NlID0gc2lnZF9jbG9zZSwKIAkuc2VuZCA9CXNpZ2Rfc2VuZAogfTsKIAotCiBzdGF0aWMgc3RydWN0IGF0bV9kZXYgc2lnZF9kZXYgPSB7CiAJLm9wcyA9CQkmc2lnZF9kZXZfb3BzLAogCS50eXBlID0JCSJzaWciLApAQCAtMjUyLDE2ICsyNTEsMTYgQEAKIAkubG9jayA9CQlfX1NQSU5fTE9DS19VTkxPQ0tFRChzaWdkX2Rldi5sb2NrKQogfTsKIAotCiBpbnQgc2lnZF9hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlpZiAoc2lnZCkgcmV0dXJuIC1FQUREUklOVVNFOwotCXByX2RlYnVnKCJzaWdkX2F0dGFjaFxuIik7CisJaWYgKHNpZ2QpCisJCXJldHVybiAtRUFERFJJTlVTRTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAlzaWdkID0gdmNjOwogCXZjYy0+ZGV2ID0gJnNpZ2RfZGV2OwogCXZjY19pbnNlcnRfc29ja2V0KHNrX2F0bSh2Y2MpKTsKLQlzZXRfYml0KEFUTV9WRl9NRVRBLCZ2Y2MtPmZsYWdzKTsKLQlzZXRfYml0KEFUTV9WRl9SRUFEWSwmdmNjLT5mbGFncyk7CisJc2V0X2JpdChBVE1fVkZfTUVUQSwgJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CiAjaWZkZWYgV0FJVF9GT1JfREVNT04KIAl3YWtlX3VwKCZzaWdkX3NsZWVwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9zdmMuYyBiL25ldC9hdG0vc3ZjLmMKaW5kZXggNjZlMWQ5Yi4uM2JhOWE0NSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9zdmMuYworKysgYi9uZXQvYXRtL3N2Yy5jCkBAIC0yLDYgKzIsNyBAQAogCiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CQkvKiBzdHJ1Y3Qgc29ja2V0LCBzdHJ1Y3QgcHJvdG9fb3BzICovCkBAIC0xOCwxNCArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgkJLyogZm9yIHNvY2tfbm9fKiAqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCQkvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi8KICNpbmNsdWRlICJzaWduYWxpbmcuaCIKICNpbmNsdWRlICJhZGRyLmgiCiAKLXN0YXRpYyBpbnQgc3ZjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwgaW50IGtlcm4pOworc3RhdGljIGludCBzdmNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAorCQkgICAgICBpbnQga2Vybik7CiAKIC8qCiAgKiBOb3RlOiBzaW5jZSBhbGwgdGhpcyBpcyBzdGlsbCBuaWNlbHkgc3luY2hyb25pemVkIHdpdGggdGhlIHNpZ25hbGluZyBkZW1vbiwKQEAgLTM0LDI1ICszNiwyNSBAQAogICovCiAKIAotc3RhdGljIGludCBzdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jayxpbnQgaG93KQorc3RhdGljIGludCBzdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCBzdmNfZGlzY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CiAKLQlwcl9kZWJ1Zygic3ZjX2Rpc2Nvbm5lY3QgJXBcbiIsdmNjKTsKLQlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFR0lTLCZ2Y2MtPmZsYWdzKSkgeworCXByX2RlYnVnKCIlcFxuIiwgdmNjKTsKKwlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFR0lTLCAmdmNjLT5mbGFncykpIHsKIAkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc2lnZF9lbnEodmNjLGFzX2Nsb3NlLE5VTEwsTlVMTCxOVUxMKTsKLQkJd2hpbGUgKCF0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKKwkJc2lnZF9lbnEodmNjLCBhc19jbG9zZSwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCXdoaWxlICghdGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCAmdmNjLT5mbGFncykgJiYgc2lnZCkgewogCQkJc2NoZWR1bGUoKTsKLQkJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQl9CiAJCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwogCX0KQEAgLTYxLDM1ICs2MywzNSBAQAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgewogCQlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJCXByX2RlYnVnKCJMSVNURU4gUkVMXG4iKTsKLQkJc2lnZF9lbnEyKE5VTEwsYXNfcmVqZWN0LHZjYyxOVUxMLE5VTEwsJnZjYy0+cW9zLDApOworCQlzaWdkX2VucTIoTlVMTCwgYXNfcmVqZWN0LCB2Y2MsIE5VTEwsIE5VTEwsICZ2Y2MtPnFvcywgMCk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAJY2xlYXJfYml0KEFUTV9WRl9SRUdJUywgJnZjYy0+ZmxhZ3MpOwogCS8qIC4uLiBtYXkgcmV0cnkgbGF0ZXIgKi8KIH0KIAotCiBzdGF0aWMgaW50IHN2Y19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAotCWlmIChzaykgIHsKKwlpZiAoc2spIHsKIAkJdmNjID0gQVRNX1NEKHNvY2spOwotCQlwcl9kZWJ1Zygic3ZjX3JlbGVhc2UgJXBcbiIsIHZjYyk7CisJCXByX2RlYnVnKCIlcFxuIiwgdmNjKTsKIAkJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwotCQkvKiBWQ0MgcG9pbnRlciBpcyB1c2VkIGFzIGEgcmVmZXJlbmNlLCBzbyB3ZSBtdXN0IG5vdCBmcmVlIGl0Ci0JCSAgICh0aGVyZWJ5IHN1YmplY3RpbmcgaXQgdG8gcmUtdXNlKSBiZWZvcmUgYWxsIHBlbmRpbmcgY29ubmVjdGlvbnMKLQkJICAgYXJlIGNsb3NlZCAqLworCQkvKgorCQkgKiBWQ0MgcG9pbnRlciBpcyB1c2VkIGFzIGEgcmVmZXJlbmNlLAorCQkgKiBzbyB3ZSBtdXN0IG5vdCBmcmVlIGl0ICh0aGVyZWJ5IHN1YmplY3RpbmcgaXQgdG8gcmUtdXNlKQorCQkgKiBiZWZvcmUgYWxsIHBlbmRpbmcgY29ubmVjdGlvbnMgYXJlIGNsb3NlZAorCQkgKi8KIAkJc3ZjX2Rpc2Nvbm5lY3QodmNjKTsKIAkJdmNjX3JlbGVhc2Uoc29jayk7CiAJfQogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgc3ZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCBzb2NrYWRkcl9sZW4pCitzdGF0aWMgaW50IHN2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCisJCSAgICBpbnQgc29ja2FkZHJfbGVuKQogewogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTE0LDM4ICsxMTYsMzcgQEAKIAkJZXJyb3IgPSAtRUFGTk9TVVBQT1JUOwogCQlnb3RvIG91dDsKIAl9Ci0JY2xlYXJfYml0KEFUTV9WRl9CT1VORCwmdmNjLT5mbGFncyk7CisJY2xlYXJfYml0KEFUTV9WRl9CT1VORCwgJnZjYy0+ZmxhZ3MpOwogCSAgICAvKiBmYWlsaW5nIHJlYmluZCB3aWxsIGtpbGwgb2xkIGJpbmRpbmcgKi8KIAkvKiBAQEAgY2hlY2sgbWVtb3J5IChkZSlhbGxvY2F0aW9uIG9uIHJlYmluZCAqLwotCWlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywmdmNjLT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KEFUTV9WRl9IQVNRT1MsICZ2Y2MtPmZsYWdzKSkgewogCQllcnJvciA9IC1FQkFERkQ7CiAJCWdvdG8gb3V0OwogCX0KIAl2Y2MtPmxvY2FsID0gKmFkZHI7CiAJc2V0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOwogCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0Jc2lnZF9lbnEodmNjLGFzX2JpbmQsTlVMTCxOVUxMLCZ2Y2MtPmxvY2FsKTsKKwlzaWdkX2VucSh2Y2MsIGFzX2JpbmQsIE5VTEwsIE5VTEwsICZ2Y2MtPmxvY2FsKTsKIAl3aGlsZSAodGVzdF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CiAJCXNjaGVkdWxlKCk7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJfQogCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwotCWNsZWFyX2JpdChBVE1fVkZfUkVHSVMsJnZjYy0+ZmxhZ3MpOyAvKiBkb2Vzbid0IGNvdW50ICovCisJY2xlYXJfYml0KEFUTV9WRl9SRUdJUywgJnZjYy0+ZmxhZ3MpOyAvKiBkb2Vzbid0IGNvdW50ICovCiAJaWYgKCFzaWdkKSB7CiAJCWVycm9yID0gLUVVTkFUQ0g7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoIXNrLT5za19lcnIpCi0JCXNldF9iaXQoQVRNX1ZGX0JPVU5ELCZ2Y2MtPmZsYWdzKTsKKwkJc2V0X2JpdChBVE1fVkZfQk9VTkQsICZ2Y2MtPmZsYWdzKTsKIAllcnJvciA9IC1zay0+c2tfZXJyOwogb3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycm9yOwogfQogCi0KLXN0YXRpYyBpbnQgc3ZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCBzb2NrYWRkcl9sZW4saW50IGZsYWdzKQorc3RhdGljIGludCBzdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAorCQkgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKQogewogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTUzLDcgKzE1NCw3IEBACiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTsKIAlpbnQgZXJyb3I7CiAKLQlwcl9kZWJ1Zygic3ZjX2Nvbm5lY3QgJXBcbiIsdmNjKTsKKwlwcl9kZWJ1ZygiJXBcbiIsIHZjYyk7CiAJbG9ja19zb2NrKHNrKTsKIAlpZiAoc29ja2FkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSkgewogCQllcnJvciA9IC1FSU5WQUw7CkBAIC0yMDEsNyArMjAyLDcgQEAKIAkJdmNjLT5yZW1vdGUgPSAqYWRkcjsKIAkJc2V0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOwogCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2lnZF9lbnEodmNjLGFzX2Nvbm5lY3QsTlVMTCxOVUxMLCZ2Y2MtPnJlbW90ZSk7CisJCXNpZ2RfZW5xKHZjYywgYXNfY29ubmVjdCwgTlVMTCwgTlVMTCwgJnZjYy0+cmVtb3RlKTsKIAkJaWYgKGZsYWdzICYgT19OT05CTE9DSykgewogCQkJZmluaXNoX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCk7CiAJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RJTkc7CkBAIC0yMTIsNyArMjEzLDggQEAKIAkJd2hpbGUgKHRlc3RfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncykgJiYgc2lnZCkgewogCQkJc2NoZWR1bGUoKTsKIAkJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlwcl9kZWJ1ZygiKkFCT1JUKlxuIik7CkBAIC0yMjgsMjAgKzIzMCwyMiBAQAogCQkJICogICBLZXJuZWwgPC0tb2theS0tLS0gRGVtb24KIAkJCSAqICAgS2VybmVsIDwtLWNsb3NlLS0tIERlbW9uCiAJCQkgKi8KLQkJCXNpZ2RfZW5xKHZjYyxhc19jbG9zZSxOVUxMLE5VTEwsTlVMTCk7CisJCQlzaWdkX2VucSh2Y2MsIGFzX2Nsb3NlLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJCXdoaWxlICh0ZXN0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQkJc2NoZWR1bGUoKTsKIAkJCX0KIAkJCWlmICghc2stPnNrX2VycikKLQkJCQl3aGlsZSAoIXRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwmdmNjLT5mbGFncykKLQkJCQkgICAgJiYgc2lnZCkgewotCQkJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl3aGlsZSAoIXRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpICYmCisJCQkJICAgICAgIHNpZ2QpIHsKKwkJCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsCisJCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCQkJc2NoZWR1bGUoKTsKIAkJCQl9Ci0JCQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCZ2Y2MtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpOwotCQkJY2xlYXJfYml0KEFUTV9WRl9DTE9TRSwmdmNjLT5mbGFncyk7CisJCQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCAmdmNjLT5mbGFncyk7CisJCQljbGVhcl9iaXQoQVRNX1ZGX1JFTEVBU0VELCAmdmNjLT5mbGFncyk7CisJCQljbGVhcl9iaXQoQVRNX1ZGX0NMT1NFLCAmdmNjLT5mbGFncyk7CiAJCQkgICAgLyogd2UncmUgZ29uZSBub3cgYnV0IG1heSBjb25uZWN0IGxhdGVyICovCiAJCQllcnJvciA9IC1FSU5UUjsKIAkJCWJyZWFrOwpAQCAtMjY5LDM3ICsyNzMsMzcgQEAKIC8qCiAgKiAjZW5kaWYKICAqLwotCWlmICghKGVycm9yID0gdmNjX2Nvbm5lY3Qoc29jaywgdmNjLT5pdGYsIHZjYy0+dnBpLCB2Y2MtPnZjaSkpKQorCWVycm9yID0gdmNjX2Nvbm5lY3Qoc29jaywgdmNjLT5pdGYsIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CisJaWYgKCFlcnJvcikKIAkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CiAJZWxzZQotCQkodm9pZCkgc3ZjX2Rpc2Nvbm5lY3QodmNjKTsKKwkJKHZvaWQpc3ZjX2Rpc2Nvbm5lY3QodmNjKTsKIG91dDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jayxpbnQgYmFja2xvZykKK3N0YXRpYyBpbnQgc3ZjX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwogCWludCBlcnJvcjsKIAotCXByX2RlYnVnKCJzdmNfbGlzdGVuICVwXG4iLHZjYyk7CisJcHJfZGVidWcoIiVwXG4iLCB2Y2MpOwogCWxvY2tfc29jayhzayk7CiAJLyogbGV0IHNlcnZlciBoYW5kbGUgbGlzdGVuIG9uIHVuYm91bmQgc29ja2V0cyAqLwotCWlmICh0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwmdmNjLT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKSkgewogCQllcnJvciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAodGVzdF9iaXQoQVRNX1ZGX0xJU1RFTiwgJnZjYy0+ZmxhZ3MpKSB7CiAJCWVycm9yID0gLUVBRERSSU5VU0U7CiAJCWdvdG8gb3V0OwotICAgICAgICB9CisJfQogCXNldF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKIAlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCXNpZ2RfZW5xKHZjYyxhc19saXN0ZW4sTlVMTCxOVUxMLCZ2Y2MtPmxvY2FsKTsKKwlzaWdkX2VucSh2Y2MsIGFzX2xpc3RlbiwgTlVMTCwgTlVMTCwgJnZjYy0+bG9jYWwpOwogCXdoaWxlICh0ZXN0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKIAkJc2NoZWR1bGUoKTsKIAkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKQEAgLTMwOSw3ICszMTMsNyBAQAogCQllcnJvciA9IC1FVU5BVENIOwogCQlnb3RvIG91dDsKIAl9Ci0Jc2V0X2JpdChBVE1fVkZfTElTVEVOLCZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9MSVNURU4sICZ2Y2MtPmZsYWdzKTsKIAl2Y2NfaW5zZXJ0X3NvY2tldChzayk7CiAJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2cgPiAwID8gYmFja2xvZyA6IEFUTV9CQUNLTE9HX0RFRkFVTFQ7CiAJZXJyb3IgPSAtc2stPnNrX2VycjsKQEAgLTMxOCw4ICszMjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLGludCBmbGFncykKK3N0YXRpYyBpbnQgc3ZjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTMzNiwxNSArMzM5LDE2IEBACiAKIAluZXdfdmNjID0gQVRNX1NEKG5ld3NvY2spOwogCi0JcHJfZGVidWcoInN2Y19hY2NlcHQgJXAgLT4gJXBcbiIsb2xkX3ZjYyxuZXdfdmNjKTsKKwlwcl9kZWJ1ZygiJXAgLT4gJXBcbiIsIG9sZF92Y2MsIG5ld192Y2MpOwogCXdoaWxlICgxKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwogCiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQl3aGlsZSAoIShza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAmJgogCQkgICAgICAgc2lnZCkgewotCQkJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwmb2xkX3ZjYy0+ZmxhZ3MpKSBicmVhazsKLQkJCWlmICh0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsJm9sZF92Y2MtPmZsYWdzKSkgeworCQkJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJm9sZF92Y2MtPmZsYWdzKSkKKwkJCQlicmVhazsKKwkJCWlmICh0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsICZvbGRfdmNjLT5mbGFncykpIHsKIAkJCQllcnJvciA9IC1zay0+c2tfZXJyOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzU5LDcgKzM2Myw4IEBACiAJCQkJZXJyb3IgPSAtRVJFU1RBUlRTWVM7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LAorCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCQl9CiAJCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwogCQlpZiAoZXJyb3IpCkBAIC0zNjgsMzEgKzM3MywzNCBAQAogCQkJZXJyb3IgPSAtRVVOQVRDSDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW1zZyA9IChzdHJ1Y3QgYXRtc3ZjX21zZyAqKSBza2ItPmRhdGE7CisJCW1zZyA9IChzdHJ1Y3QgYXRtc3ZjX21zZyAqKXNrYi0+ZGF0YTsKIAkJbmV3X3ZjYy0+cW9zID0gbXNnLT5xb3M7Ci0JCXNldF9iaXQoQVRNX1ZGX0hBU1FPUywmbmV3X3ZjYy0+ZmxhZ3MpOworCQlzZXRfYml0KEFUTV9WRl9IQVNRT1MsICZuZXdfdmNjLT5mbGFncyk7CiAJCW5ld192Y2MtPnJlbW90ZSA9IG1zZy0+c3ZjOwogCQluZXdfdmNjLT5sb2NhbCA9IG1zZy0+bG9jYWw7CiAJCW5ld192Y2MtPnNhcCA9IG1zZy0+c2FwOwogCQllcnJvciA9IHZjY19jb25uZWN0KG5ld3NvY2ssIG1zZy0+cHZjLnNhcF9hZGRyLml0ZiwKLQkJCQkgICAgbXNnLT5wdmMuc2FwX2FkZHIudnBpLCBtc2ctPnB2Yy5zYXBfYWRkci52Y2kpOworCQkJCSAgICBtc2ctPnB2Yy5zYXBfYWRkci52cGksCisJCQkJICAgIG1zZy0+cHZjLnNhcF9hZGRyLnZjaSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJc2stPnNrX2Fja19iYWNrbG9nLS07CiAJCWlmIChlcnJvcikgewotCQkJc2lnZF9lbnEyKE5VTEwsYXNfcmVqZWN0LG9sZF92Y2MsTlVMTCxOVUxMLAotCQkJICAgICZvbGRfdmNjLT5xb3MsZXJyb3IpOworCQkJc2lnZF9lbnEyKE5VTEwsIGFzX3JlamVjdCwgb2xkX3ZjYywgTlVMTCwgTlVMTCwKKwkJCQkgICZvbGRfdmNjLT5xb3MsIGVycm9yKTsKIAkJCWVycm9yID0gZXJyb3IgPT0gLUVBR0FJTiA/IC1FQlVTWSA6IGVycm9yOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJLyogd2FpdCBzaG91bGQgYmUgc2hvcnQsIHNvIHdlIGlnbm9yZSB0aGUgbm9uLWJsb2NraW5nIGZsYWcgKi8KIAkJc2V0X2JpdChBVE1fVkZfV0FJVElORywgJm5ld192Y2MtPmZsYWdzKTsKLQkJcHJlcGFyZV90b193YWl0KHNrX2F0bShuZXdfdmNjKS0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXNpZ2RfZW5xKG5ld192Y2MsYXNfYWNjZXB0LG9sZF92Y2MsTlVMTCxOVUxMKTsKKwkJcHJlcGFyZV90b193YWl0KHNrX2F0bShuZXdfdmNjKS0+c2tfc2xlZXAsICZ3YWl0LAorCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2lnZF9lbnEobmV3X3ZjYywgYXNfYWNjZXB0LCBvbGRfdmNjLCBOVUxMLCBOVUxMKTsKIAkJd2hpbGUgKHRlc3RfYml0KEFUTV9WRl9XQUlUSU5HLCAmbmV3X3ZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKIAkJCXJlbGVhc2Vfc29jayhzayk7CiAJCQlzY2hlZHVsZSgpOwogCQkJbG9ja19zb2NrKHNrKTsKLQkJCXByZXBhcmVfdG9fd2FpdChza19hdG0obmV3X3ZjYyktPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJcHJlcGFyZV90b193YWl0KHNrX2F0bShuZXdfdmNjKS0+c2tfc2xlZXAsICZ3YWl0LAorCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCX0KIAkJZmluaXNoX3dhaXQoc2tfYXRtKG5ld192Y2MpLT5za19zbGVlcCwgJndhaXQpOwogCQlpZiAoIXNpZ2QpIHsKQEAgLTQxMiwzOSArNDIwLDM3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KLXN0YXRpYyBpbnQgc3ZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCAqc29ja2FkZHJfbGVuLGludCBwZWVyKQorc3RhdGljIGludCBzdmNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAorCQkgICAgICAgaW50ICpzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewogCXN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHI7CiAKIAkqc29ja2FkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpOwogCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqKSBzb2NrYWRkcjsKLQltZW1jcHkoYWRkcixwZWVyID8gJkFUTV9TRChzb2NrKS0+cmVtb3RlIDogJkFUTV9TRChzb2NrKS0+bG9jYWwsCi0JICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7CisJbWVtY3B5KGFkZHIsIHBlZXIgPyAmQVRNX1NEKHNvY2spLT5yZW1vdGUgOiAmQVRNX1NEKHNvY2spLT5sb2NhbCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1pbnQgc3ZjX2NoYW5nZV9xb3Moc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3QgYXRtX3FvcyAqcW9zKQoraW50IHN2Y19jaGFuZ2VfcW9zKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fcW9zICpxb3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKIAlzZXRfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CiAJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlzaWdkX2VucTIodmNjLGFzX21vZGlmeSxOVUxMLE5VTEwsJnZjYy0+bG9jYWwscW9zLDApOworCXNpZ2RfZW5xMih2Y2MsIGFzX21vZGlmeSwgTlVMTCwgTlVMTCwgJnZjYy0+bG9jYWwsIHFvcywgMCk7CiAJd2hpbGUgKHRlc3RfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncykgJiYKIAkgICAgICAgIXRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKIAkJc2NoZWR1bGUoKTsKIAkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAl9CiAJZmluaXNoX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCk7Ci0JaWYgKCFzaWdkKSByZXR1cm4gLUVVTkFUQ0g7CisJaWYgKCFzaWdkKQorCQlyZXR1cm4gLUVVTkFUQ0g7CiAJcmV0dXJuIC1zay0+c2tfZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgc3ZjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKQEAgLTQ1NCwzNyArNDYwLDM1IEBACiAKIAlsb2NrX3NvY2soc2spOwogCXN3aXRjaCAob3B0bmFtZSkgewotCQljYXNlIFNPX0FUTVNBUDoKLQkJCWlmIChsZXZlbCAhPSBTT0xfQVRNIHx8IG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IGF0bV9zYXApKSB7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2Y2MtPnNhcCwgb3B0dmFsLCBvcHRsZW4pKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJc2V0X2JpdChBVE1fVkZfSEFTU0FQLCAmdmNjLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJY2FzZSBTT19NVUxUSVBPSU5UOgotCQkJaWYgKGxldmVsICE9IFNPTF9BVE0gfHwgb3B0bGVuICE9IHNpemVvZihpbnQpKSB7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKGdldF91c2VyKHZhbHVlLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKHZhbHVlID09IDEpIHsKLQkJCQlzZXRfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncyk7Ci0JCQl9IGVsc2UgaWYgKHZhbHVlID09IDApIHsKLQkJCQljbGVhcl9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvciA9IHZjY19zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLAotCQkJCQkgICAgICAgb3B0dmFsLCBvcHRsZW4pOworCWNhc2UgU09fQVRNU0FQOgorCQlpZiAobGV2ZWwgIT0gU09MX0FUTSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBhdG1fc2FwKSkgeworCQkJZXJyb3IgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2Y2MtPnNhcCwgb3B0dmFsLCBvcHRsZW4pKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzZXRfYml0KEFUTV9WRl9IQVNTQVAsICZ2Y2MtPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBTT19NVUxUSVBPSU5UOgorCQlpZiAobGV2ZWwgIT0gU09MX0FUTSB8fCBvcHRsZW4gIT0gc2l6ZW9mKGludCkpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChnZXRfdXNlcih2YWx1ZSwgKGludCBfX3VzZXIgKilvcHR2YWwpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAodmFsdWUgPT0gMSkKKwkJCXNldF9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKTsKKwkJZWxzZSBpZiAodmFsdWUgPT0gMCkKKwkJCWNsZWFyX2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpOworCQllbHNlCisJCQllcnJvciA9IC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIAl9CiAKIG91dDoKQEAgLTQ5Miw5ICs0OTYsOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssaW50IGxldmVsLGludCBvcHRuYW1lLAotICAgIGNoYXIgX191c2VyICpvcHR2YWwsaW50IF9fdXNlciAqb3B0bGVuKQorc3RhdGljIGludCBzdmNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJaW50IGVycm9yID0gMCwgbGVuOwpAQCAtNTIxLDcgKzUyNCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIHN0YXRpYyBpbnQgc3ZjX2FkZHBhcnR5KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCiAJCQlpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpCiB7CkBAIC01NDAsNyArNTQyLDcgQEAKIAkJZXJyb3IgPSAtRUlOUFJPR1JFU1M7CiAJCWdvdG8gb3V0OwogCX0KLQlwcl9kZWJ1Zygic3ZjX2FkZHBhcnR5IGFkZGVkIHdhaXQgcXVldWVcbiIpOworCXByX2RlYnVnKCJhZGRlZCB3YWl0IHF1ZXVlXG4iKTsKIAl3aGlsZSAodGVzdF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CiAJCXNjaGVkdWxlKCk7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtNTUyLDcgKzU1NCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIHN0YXRpYyBpbnQgc3ZjX2Ryb3BwYXJ0eShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXBfcmVmKQogewogCURFRklORV9XQUlUKHdhaXQpOwpAQCAtNTc5LDcgKzU4MCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIHN0YXRpYyBpbnQgc3ZjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCBlcnJvciwgZXBfcmVmOwpAQCAtNTg3LDI5ICs1ODcsMzEgQEAKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBBVE1fQUREUEFSVFk6Ci0JCQlpZiAoIXRlc3RfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncykpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnNhLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2Yoc2EpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWVycm9yID0gc3ZjX2FkZHBhcnR5KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhLCBzaXplb2Yoc2EpLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTV9EUk9QUEFSVFk6Ci0JCQlpZiAoIXRlc3RfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncykpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmVwX3JlZiwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKGludCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJZXJyb3IgPSBzdmNfZHJvcHBhcnR5KHNvY2ssIGVwX3JlZik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycm9yID0gdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnKTsKKwljYXNlIEFUTV9BRERQQVJUWToKKwkJaWYgKCF0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc2EsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihzYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVycm9yID0gc3ZjX2FkZHBhcnR5KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSksCisJCQkJICAgICAwKTsKKwkJYnJlYWs7CisJY2FzZSBBVE1fRFJPUFBBUlRZOgorCQlpZiAoIXRlc3RfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZlcF9yZWYsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnJvciA9IHN2Y19kcm9wcGFydHkoc29jaywgZXBfcmVmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IgPSB2Y2NfaW9jdGwoc29jaywgY21kLCBhcmcpOwogCX0KIAogCXJldHVybiBlcnJvcjsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBpbnQgc3ZjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc3ZjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCS8qIFRoZSBkZWZpbml0aW9uIG9mIEFUTV9BRERQQVJUWSB1c2VzIHRoZSBzaXplIG9mIHN0cnVjdCBhdG1faW9idWYuCiAJICAgQnV0IGFjdHVhbGx5IGl0IHRha2VzIGEgc3RydWN0IHNvY2thZGRyX2F0bXN2Yywgd2hpY2ggZG9lc24ndCBuZWVkCkBAIC02NjAsMTMgKzY2MiwxMyBAQAogCiAJc29jay0+b3BzID0gJnN2Y19wcm90b19vcHM7CiAJZXJyb3IgPSB2Y2NfY3JlYXRlKG5ldCwgc29jaywgcHJvdG9jb2wsIEFGX0FUTVNWQyk7Ci0JaWYgKGVycm9yKSByZXR1cm4gZXJyb3I7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJQVRNX1NEKHNvY2spLT5sb2NhbC5zYXNfZmFtaWx5ID0gQUZfQVRNU1ZDOwogCUFUTV9TRChzb2NrKS0+cmVtb3RlLnNhc19mYW1pbHkgPSBBRl9BVE1TVkM7CiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHN2Y19mYW1pbHlfb3BzID0gewogCS5mYW1pbHkgPSBQRl9BVE1TVkMsCiAJLmNyZWF0ZSA9IHN2Y19jcmVhdGUsCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggNTU4OGJhNi4uYTViZWVkZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTg2MywyNSArMTg2MywxMyBAQAogc3RhdGljIHZvaWQgKmF4MjVfaW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhheDI1X2xpc3RfbG9jaykKIHsKLQlzdHJ1Y3QgYXgyNV9jYiAqYXgyNTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgaSA9IDA7Ci0KIAlzcGluX2xvY2tfYmgoJmF4MjVfbGlzdF9sb2NrKTsKLQlheDI1X2Zvcl9lYWNoKGF4MjUsIG5vZGUsICZheDI1X2xpc3QpIHsKLQkJaWYgKGkgPT0gKnBvcykKLQkJCXJldHVybiBheDI1OwotCQkrK2k7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnQoJmF4MjVfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICpheDI1X2luZm9fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0JKysqcG9zOwotCi0JcmV0dXJuIGhsaXN0X2VudHJ5KCAoKHN0cnVjdCBheDI1X2NiICopdiktPmF4MjVfbm9kZS5uZXh0LAotCQkJICAgIHN0cnVjdCBheDI1X2NiLCBheDI1X25vZGUpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmYXgyNV9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCBheDI1X2luZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTE4OTIsNyArMTg4MCw3IEBACiAKIHN0YXRpYyBpbnQgYXgyNV9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0JYXgyNV9jYiAqYXgyNSA9IHY7CisJYXgyNV9jYiAqYXgyNSA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBheDI1X2NiLCBheDI1X25vZGUpOwogCWNoYXIgYnVmWzExXTsKIAlpbnQgazsKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV91aWQuYyBiL25ldC9heDI1L2F4MjVfdWlkLmMKaW5kZXggODMyYmNmMC4uOWYxM2Y2ZSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV91aWQuYworKysgYi9uZXQvYXgyNS9heDI1X3VpZC5jCkBAIC0xNDYsMzEgKzE0NiwxMyBAQAogc3RhdGljIHZvaWQgKmF4MjVfdWlkX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhheDI1X3VpZF9sb2NrKQogewotCXN0cnVjdCBheDI1X3VpZF9hc3NvYyAqcHQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGkgPSAxOwotCiAJcmVhZF9sb2NrKCZheDI1X3VpZF9sb2NrKTsKLQotCWlmICgqcG9zID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0KLQlheDI1X3VpZF9mb3JfZWFjaChwdCwgbm9kZSwgJmF4MjVfdWlkX2xpc3QpIHsKLQkJaWYgKGkgPT0gKnBvcykKLQkJCXJldHVybiBwdDsKLQkJKytpOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWQoJmF4MjVfdWlkX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqYXgyNV91aWRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiBheDI1X3VpZF9saXN0LmZpcnN0OwotCWVsc2UKLQkJcmV0dXJuIGhsaXN0X2VudHJ5KCgoYXgyNV91aWRfYXNzb2MgKil2KS0+dWlkX25vZGUubmV4dCwKLQkJCSAgIGF4MjVfdWlkX2Fzc29jLCB1aWRfbm9kZSk7CisJcmV0dXJuIHNlcV9obGlzdF9uZXh0KHYsICZheDI1X3VpZF9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCBheDI1X3VpZF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTE4Niw4ICsxNjgsOSBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3ByaW50ZihzZXEsICJQb2xpY3k6ICVkXG4iLCBheDI1X3VpZF9wb2xpY3kpOwogCWVsc2UgewotCQlzdHJ1Y3QgYXgyNV91aWRfYXNzb2MgKnB0ID0gdjsKKwkJc3RydWN0IGF4MjVfdWlkX2Fzc29jICpwdDsKIAorCQlwdCA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBheDI1X3VpZF9hc3NvYywgdWlkX25vZGUpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiU2ZCAlc1xuIiwgcHQtPnVpZCwgYXgyYXNjKGJ1ZiwgJnB0LT5jYWxsKSk7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCmluZGV4IDI2ZmI4MzEuLmI2MjM0YjcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBzaXplOwogCi0JQlRfREJHKCIlcyBtY19jb3VudCAlZCIsIGRldi0+bmFtZSwgZGV2LT5tY19jb3VudCk7CisJQlRfREJHKCIlcyBtY19jb3VudCAlZCIsIGRldi0+bmFtZSwgbmV0ZGV2X21jX2NvdW50KGRldikpOwogCiAJc2l6ZSA9IHNpemVvZigqcikgKyAoQk5FUF9NQVhfTVVMVElDQVNUX0ZJTFRFUlMgKyAxKSAqIEVUSF9BTEVOICogMjsKIAlza2IgID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwpAQCAtOTcsNyArOTcsOSBAQAogCiAJCS8qIEZJWE1FOiBXZSBzaG91bGQgZ3JvdXAgYWRkcmVzc2VzIGhlcmUuICovCiAKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQgJiYgaSA8IEJORVBfTUFYX01VTFRJQ0FTVF9GSUxURVJTOyBpKyspIHsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgbmV0ZGV2X21jX2NvdW50KGRldikgJiYgaSA8IEJORVBfTUFYX01VTFRJQ0FTVF9GSUxURVJTOworCQkgICAgIGkrKykgewogCQkJbWVtY3B5KF9fc2tiX3B1dChza2IsIEVUSF9BTEVOKSwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQkJbWVtY3B5KF9fc2tiX3B1dChza2IsIEVUSF9BTEVOKSwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQkJZG1pID0gZG1pLT5uZXh0OwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKaW5kZXggOTdmOGQ2OC4uMzQ4N2NmZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYworKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCkBAIC0yMSw3ICsyMSw4IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MTYsMzMgKzUxNywzNyBAQAogCXJldHVybiAiQ0FQSSBNZXNzYWdlIFRyYW5zcG9ydCBQcm90b2NvbCI7CiB9CiAKLXN0YXRpYyBpbnQgY210cF9jdHJfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGNtdHBfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwgPSBtLT5wcml2YXRlOwogCXN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24gPSBjdHJsLT5kcml2ZXJkYXRhOwogCXN0cnVjdCBjbXRwX2FwcGxpY2F0aW9uICphcHA7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47Ci0JaW50IGxlbiA9IDA7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJXNcblxuIiwgY210cF9wcm9jaW5mbyhjdHJsKSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgImFkZHIgJXNcbiIsIHNlc3Npb24tPm5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJjdHJsICVkXG4iLCBzZXNzaW9uLT5udW0pOworCXNlcV9wcmludGYobSwgIiVzXG5cbiIsIGNtdHBfcHJvY2luZm8oY3RybCkpOworCXNlcV9wcmludGYobSwgImFkZHIgJXNcbiIsIHNlc3Npb24tPm5hbWUpOworCXNlcV9wcmludGYobSwgImN0cmwgJWRcbiIsIHNlc3Npb24tPm51bSk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnNlc3Npb24tPmFwcGxpY2F0aW9ucykgewogCQlhcHAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBjbXRwX2FwcGxpY2F0aW9uLCBsaXN0KTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgImFwcGwgJWQgLT4gJWRcbiIsIGFwcC0+YXBwbCwgYXBwLT5tYXBwaW5nKTsKKwkJc2VxX3ByaW50ZihtLCAiYXBwbCAlZCAtPiAlZFxuIiwgYXBwLT5hcHBsLCBhcHAtPm1hcHBpbmcpOwogCX0KIAotCWlmIChvZmYgKyBjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCi0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0KLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCi0JcmV0dXJuICgoY291bnQgPCBsZW4gLSBvZmYpID8gY291bnQgOiBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNtdHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjbXRwX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNtdHBfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjbXRwX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAogaW50IGNtdHBfYXR0YWNoX2RldmljZShzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uKQogewpAQCAtNTgyLDcgKzU4Nyw3IEBACiAJc2Vzc2lvbi0+Y3RybC5zZW5kX21lc3NhZ2UgID0gY210cF9zZW5kX21lc3NhZ2U7CiAKIAlzZXNzaW9uLT5jdHJsLnByb2NpbmZvICAgICAgPSBjbXRwX3Byb2NpbmZvOwotCXNlc3Npb24tPmN0cmwuY3RyX3JlYWRfcHJvYyA9IGNtdHBfY3RyX3JlYWRfcHJvYzsKKwlzZXNzaW9uLT5jdHJsLnByb2NfZm9wcyA9ICZjbXRwX3Byb2NfZm9wczsKIAogCWlmIChhdHRhY2hfY2FwaV9jdHIoJnNlc3Npb24tPmN0cmwpIDwgMCkgewogCQlCVF9FUlIoIkNhbid0IGF0dGFjaCBuZXcgY29udHJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDk0YmEzNDkuLjRhZDIzMTkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTQ5MSw2ICs0OTEsMTAgQEAKIAlpZiAodGVzdF9iaXQoSENJX1FVSVJLX1JBV19ERVZJQ0UsICZoZGV2LT5xdWlya3MpKQogCQlzZXRfYml0KEhDSV9SQVcsICZoZGV2LT5mbGFncyk7CiAKKwkvKiBUcmVhdCBhbGwgbm9uIEJSL0VEUiBjb250cm9sbGVycyBhcyByYXcgZGV2aWNlcyBmb3Igbm93ICovCisJaWYgKGhkZXYtPmRldl90eXBlICE9IEhDSV9CUkVEUikKKwkJc2V0X2JpdChIQ0lfUkFXLCAmaGRldi0+ZmxhZ3MpOworCiAJaWYgKGhkZXYtPm9wZW4oaGRldikpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNzk3LDcgKzgwMSw3IEBACiAKIAlzdHJjcHkoZGkubmFtZSwgaGRldi0+bmFtZSk7CiAJZGkuYmRhZGRyICAgPSBoZGV2LT5iZGFkZHI7Ci0JZGkudHlwZSAgICAgPSBoZGV2LT50eXBlOworCWRpLnR5cGUgICAgID0gKGhkZXYtPmJ1cyAmIDB4MGYpIHwgKGhkZXYtPmRldl90eXBlIDw8IDQpOwogCWRpLmZsYWdzICAgID0gaGRldi0+ZmxhZ3M7CiAJZGkucGt0X3R5cGUgPSBoZGV2LT5wa3RfdHlwZTsKIAlkaS5hY2xfbXR1ICA9IGhkZXYtPmFjbF9tdHU7CkBAIC04NjksOCArODczLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmhjaV9kZXZfbGlzdCwgKnA7CiAJaW50IGksIGlkID0gMDsKIAotCUJUX0RCRygiJXAgbmFtZSAlcyB0eXBlICVkIG93bmVyICVwIiwgaGRldiwgaGRldi0+bmFtZSwKLQkJCQkJCWhkZXYtPnR5cGUsIGhkZXYtPm93bmVyKTsKKwlCVF9EQkcoIiVwIG5hbWUgJXMgYnVzICVkIG93bmVyICVwIiwgaGRldiwgaGRldi0+bmFtZSwKKwkJCQkJCWhkZXYtPmJ1cywgaGRldi0+b3duZXIpOwogCiAJaWYgKCFoZGV2LT5vcGVuIHx8ICFoZGV2LT5jbG9zZSB8fCAhaGRldi0+ZGVzdHJ1Y3QpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTQ2LDcgKzk1MCw3IEBACiB7CiAJaW50IGk7CiAKLQlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOworCUJUX0RCRygiJXAgbmFtZSAlcyBidXMgJWQiLCBoZGV2LCBoZGV2LT5uYW1lLCBoZGV2LT5idXMpOwogCiAJd3JpdGVfbG9ja19iaCgmaGNpX2Rldl9saXN0X2xvY2spOwogCWxpc3RfZGVsKCZoZGV2LT5saXN0KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDU5MmRhNWMuLjZjNTdmYzcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtMTY5OCw2ICsxNjk4LDcgQEAKIAkJaGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pOwogCQlicmVhazsKIAorCWNhc2UgMHgxMToJLyogVW5zdXBwb3J0ZWQgRmVhdHVyZSBvciBQYXJhbWV0ZXIgVmFsdWUgKi8KIAljYXNlIDB4MWM6CS8qIFNDTyBpbnRlcnZhbCByZWplY3RlZCAqLwogCWNhc2UgMHgxYToJLyogVW5zdXBwb3J0ZWQgUmVtb3RlIEZlYXR1cmUgKi8KIAljYXNlIDB4MWY6CS8qIFVuc3BlY2lmaWVkIGVycm9yICovCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggNjg4Y2ZlYi4uMzhmMDhmNiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtMzI5LDYgKzMyOSw5IEBACiAJfQogCiAJaWYgKG1hc2sgJiBIQ0lfQ01TR19UU1RBTVApIHsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBjdHY7CisjZW5kaWYKIAkJc3RydWN0IHRpbWV2YWwgdHY7CiAJCXZvaWQgKmRhdGE7CiAJCWludCBsZW47CkBAIC0zMzksNyArMzQyLDYgQEAKIAkJbGVuID0gc2l6ZW9mKHR2KTsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19DTVNHX0NPTVBBVCkgewotCQkJc3RydWN0IGNvbXBhdF90aW1ldmFsIGN0djsKIAkJCWN0di50dl9zZWMgPSB0di50dl9zZWM7CiAJCQljdHYudHZfdXNlYyA9IHR2LnR2X3VzZWM7CiAJCQlkYXRhID0gJmN0djsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDJiYzZmNmE4Li4xYTc5YTZjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTIsNiArMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CkBAIC05LDYgKzEwLDkgQEAKIHN0cnVjdCBjbGFzcyAqYnRfY2xhc3MgPSBOVUxMOwogRVhQT1JUX1NZTUJPTF9HUEwoYnRfY2xhc3MpOwogCitzdHJ1Y3QgZGVudHJ5ICpidF9kZWJ1Z2ZzID0gTlVMTDsKK0VYUE9SVF9TWU1CT0xfR1BMKGJ0X2RlYnVnZnMpOworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJ0X3dvcmtxOwogCiBzdGF0aWMgaW5saW5lIGNoYXIgKmxpbmtfdHlwZXRvc3RyKGludCB0eXBlKQpAQCAtMTY2LDkgKzE3MCw5IEBACiAJcXVldWVfd29yayhidF93b3JrcSwgJmNvbm4tPndvcmtfZGVsKTsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyICpob3N0X3R5cGV0b3N0cihpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgY2hhciAqaG9zdF9idXN0b3N0cihpbnQgYnVzKQogewotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAoYnVzKSB7CiAJY2FzZSBIQ0lfVklSVFVBTDoKIAkJcmV0dXJuICJWSVJUVUFMIjsKIAljYXNlIEhDSV9VU0I6CkBAIC0xODgsMTAgKzE5MiwyOCBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBjaGFyICpob3N0X3R5cGV0b3N0cihpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEhDSV9CUkVEUjoKKwkJcmV0dXJuICJCUi9FRFIiOworCWNhc2UgSENJXzgwMjExOgorCQlyZXR1cm4gIjgwMi4xMSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBob3N0X2J1c3Rvc3RyKGhkZXYtPmJ1cykpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGhvc3RfdHlwZXRvc3RyKGhkZXYtPnR5cGUpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaG9zdF90eXBldG9zdHIoaGRldi0+ZGV2X3R5cGUpKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI1MSwzMiArMjczLDYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+aGNpX3Jldik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5xdWlyeV9jYWNoZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaW5xdWlyeV9jYWNoZSAqY2FjaGUgPSAmaGRldi0+aW5xX2NhY2hlOwotCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICplOwotCWludCBuID0gMDsKLQotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKLQotCWZvciAoZSA9IGNhY2hlLT5saXN0OyBlOyBlID0gZS0+bmV4dCkgewotCQlzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhID0gJmUtPmRhdGE7Ci0JCWJkYWRkcl90IGJkYWRkcjsKLQkJYmFzd2FwKCZiZGFkZHIsICZkYXRhLT5iZGFkZHIpOwotCQluICs9IHNwcmludGYoYnVmICsgbiwgIiVzICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKLQkJCQliYXRvc3RyKCZiZGFkZHIpLAotCQkJCWRhdGEtPnBzY2FuX3JlcF9tb2RlLCBkYXRhLT5wc2Nhbl9wZXJpb2RfbW9kZSwKLQkJCQlkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCi0JCQkJZGF0YS0+ZGV2X2NsYXNzWzFdLCBkYXRhLT5kZXZfY2xhc3NbMF0sCi0JCQkJX19sZTE2X3RvX2NwdShkYXRhLT5jbG9ja19vZmZzZXQpLAotCQkJCWRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOwotCX0KLQotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOwotCXJldHVybiBuOwotfQotCiBzdGF0aWMgc3NpemVfdCBzaG93X2lkbGVfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTM1NSw2ICszNTEsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIERFVklDRV9BVFRSKGJ1cywgU19JUlVHTywgc2hvd19idXMsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfdHlwZSwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihjbGFzcywgU19JUlVHTywgc2hvd19jbGFzcywgTlVMTCk7CkBAIC0zNjMsNyArMzYwLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihtYW51ZmFjdHVyZXIsIFNfSVJVR08sIHNob3dfbWFudWZhY3R1cmVyLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihoY2lfdmVyc2lvbiwgU19JUlVHTywgc2hvd19oY2lfdmVyc2lvbiwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoaGNpX3JldmlzaW9uLCBTX0lSVUdPLCBzaG93X2hjaV9yZXZpc2lvbiwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoaW5xdWlyeV9jYWNoZSwgU19JUlVHTywgc2hvd19pbnF1aXJ5X2NhY2hlLCBOVUxMKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGlkbGVfdGltZW91dCwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJc2hvd19pZGxlX3RpbWVvdXQsIHN0b3JlX2lkbGVfdGltZW91dCk7CkBAIC0zNzMsNiArMzY5LDcgQEAKIAkJCQlzaG93X3NuaWZmX21pbl9pbnRlcnZhbCwgc3RvcmVfc25pZmZfbWluX2ludGVydmFsKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmJ0X2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfYnVzLmF0dHIsCiAJJmRldl9hdHRyX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCSZkZXZfYXR0cl9jbGFzcy5hdHRyLApAQCAtMzgxLDcgKzM3OCw2IEBACiAJJmRldl9hdHRyX21hbnVmYWN0dXJlci5hdHRyLAogCSZkZXZfYXR0cl9oY2lfdmVyc2lvbi5hdHRyLAogCSZkZXZfYXR0cl9oY2lfcmV2aXNpb24uYXR0ciwKLQkmZGV2X2F0dHJfaW5xdWlyeV9jYWNoZS5hdHRyLAogCSZkZXZfYXR0cl9pZGxlX3RpbWVvdXQuYXR0ciwKIAkmZGV2X2F0dHJfc25pZmZfbWF4X2ludGVydmFsLmF0dHIsCiAJJmRldl9hdHRyX3NuaWZmX21pbl9pbnRlcnZhbC5hdHRyLApAQCAtNDA5LDEyICs0MDUsNTIgQEAKIAkucmVsZWFzZSA9IGJ0X2hvc3RfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgaW5xdWlyeV9jYWNoZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlucXVpcnlfY2FjaGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW5xdWlyeV9jYWNoZSAqY2FjaGUgPSAmaGRldi0+aW5xX2NhY2hlOworCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICplOworCWNoYXIgYnVmWzQwOTZdOworCWludCBuID0gMDsKKworCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKworCWZvciAoZSA9IGNhY2hlLT5saXN0OyBlOyBlID0gZS0+bmV4dCkgeworCQlzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhID0gJmUtPmRhdGE7CisJCWJkYWRkcl90IGJkYWRkcjsKKwkJYmFzd2FwKCZiZGFkZHIsICZkYXRhLT5iZGFkZHIpOworCQluICs9IHNwcmludGYoYnVmICsgbiwgIiVzICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKKwkJCQliYXRvc3RyKCZiZGFkZHIpLAorCQkJCWRhdGEtPnBzY2FuX3JlcF9tb2RlLCBkYXRhLT5wc2Nhbl9wZXJpb2RfbW9kZSwKKwkJCQlkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCisJCQkJZGF0YS0+ZGV2X2NsYXNzWzFdLCBkYXRhLT5kZXZfY2xhc3NbMF0sCisJCQkJX19sZTE2X3RvX2NwdShkYXRhLT5jbG9ja19vZmZzZXQpLAorCQkJCWRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOworCX0KKworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIG4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnF1aXJ5X2NhY2hlX2ZvcHMgPSB7CisJLm9wZW4gPSBpbnF1aXJ5X2NhY2hlX29wZW4sCisJLnJlYWQgPSBpbnF1aXJ5X2NhY2hlX3JlYWQsCit9OworCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZGV2LT5kZXY7CiAJaW50IGVycjsKIAotCUJUX0RCRygiJXAgbmFtZSAlcyB0eXBlICVkIiwgaGRldiwgaGRldi0+bmFtZSwgaGRldi0+dHlwZSk7CisJQlRfREJHKCIlcCBuYW1lICVzIGJ1cyAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPmJ1cyk7CiAKIAlkZXYtPnR5cGUgPSAmYnRfaG9zdDsKIAlkZXYtPmNsYXNzID0gYnRfY2xhc3M7CkBAIC00MjgsMTIgKzQ2NCwyNCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKCFidF9kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWhkZXYtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoaGRldi0+bmFtZSwgYnRfZGVidWdmcyk7CisJaWYgKCFoZGV2LT5kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlucXVpcnlfY2FjaGUiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAorCQkJCQkJaGRldiwgJmlucXVpcnlfY2FjaGVfZm9wcyk7CisKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBoY2lfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKLQlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOworCUJUX0RCRygiJXAgbmFtZSAlcyBidXMgJWQiLCBoZGV2LCBoZGV2LT5uYW1lLCBoZGV2LT5idXMpOworCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGhkZXYtPmRlYnVnZnMpOwogCiAJZGV2aWNlX2RlbCgmaGRldi0+ZGV2KTsKIH0KQEAgLTQ0NCw2ICs0OTIsOCBAQAogCWlmICghYnRfd29ya3EpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYnRfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmx1ZXRvb3RoIiwgTlVMTCk7CisKIAlidF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImJsdWV0b290aCIpOwogCWlmIChJU19FUlIoYnRfY2xhc3MpKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGJ0X3dvcmtxKTsKQEAgLTQ1NSw3ICs1MDUsOSBAQAogCiB2b2lkIGJ0X3N5c2ZzX2NsZWFudXAodm9pZCkKIHsKLQlkZXN0cm95X3dvcmtxdWV1ZShidF93b3JrcSk7Ci0KIAljbGFzc19kZXN0cm95KGJ0X2NsYXNzKTsKKworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShidF9kZWJ1Z2ZzKTsKKworCWRlc3Ryb3lfd29ya3F1ZXVlKGJ0X3dvcmtxKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IGZjNmVjMWUuLjI4MDUyOWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtMzEzLDEwICszMTMsMjEgQEAKIAlyZXR1cm4gaGlkcF9xdWV1ZV9yZXBvcnQoc2Vzc2lvbiwgYnVmLCByc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgaGlkcF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IGhpZHBfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewotCWlmIChoaWRwX3NlbmRfY3RybF9tZXNzYWdlKGhpZC0+ZHJpdmVyX2RhdGEsCi0JCQlISURQX1RSQU5TX1NFVF9SRVBPUlQgfCBISURQX0RBVEFfUlRZUEVfRkVBVFVSRSwKKwlzd2l0Y2ggKHJlcG9ydF90eXBlKSB7CisJY2FzZSBISURfRkVBVFVSRV9SRVBPUlQ6CisJCXJlcG9ydF90eXBlID0gSElEUF9UUkFOU19TRVRfUkVQT1JUIHwgSElEUF9EQVRBX1JUWVBFX0ZFQVRVUkU7CisJCWJyZWFrOworCWNhc2UgSElEX09VVFBVVF9SRVBPUlQ6CisJCXJlcG9ydF90eXBlID0gSElEUF9UUkFOU19EQVRBIHwgSElEUF9EQVRBX1JUWVBFX09VUFVUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaGlkcF9zZW5kX2N0cmxfbWVzc2FnZShoaWQtPmRyaXZlcl9kYXRhLCByZXBvcnRfdHlwZSwKIAkJCWRhdGEsIGNvdW50KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIGNvdW50OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9LY29uZmlnIGIvbmV0L2JyaWRnZS9LY29uZmlnCmluZGV4IGUxNDNjYTYuLjE5YTZiOTYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvS2NvbmZpZworKysgYi9uZXQvYnJpZGdlL0tjb25maWcKQEAgLTMxLDMgKzMxLDE2IEBACiAJICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBCUklER0VfSUdNUF9TTk9PUElORworCWJvb2wgIklHTVAgc25vb3BpbmciCisJZGVwZW5kcyBvbiBCUklER0UKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseQorCSAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbSBlYWNoCisJICBwb3J0LgorCisJICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvTWFrZWZpbGUgYi9uZXQvYnJpZGdlL01ha2VmaWxlCmluZGV4IGY0NDRjMTIuLmQwMzU5ZWEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvTWFrZWZpbGUKKysrIGIvbmV0L2JyaWRnZS9NYWtlZmlsZQpAQCAtMTIsNCArMTIsNiBAQAogCiBicmlkZ2UtJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm8KIAorYnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubworCiBvYmotJChDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTKSArPSBuZXRmaWx0ZXIvCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAxYTk5YzRlLi5lYjcwNjJkIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTI1LDYgKzI1LDkgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBza2ItPmRhdGE7CiAJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpkc3Q7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0OworCisJQlJfSU5QVVRfU0tCX0NCKHNrYiktPmJyZGV2ID0gZGV2OwogCiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTMyLDEzICszNSwyMSBAQAogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CiAKLQlpZiAoZGVzdFswXSAmIDEpCi0JCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7Ci0JZWxzZSBpZiAoKGRzdCA9IF9fYnJfZmRiX2dldChiciwgZGVzdCkpICE9IE5VTEwpCisJaWYgKGRlc3RbMF0gJiAxKSB7CisJCWlmIChicl9tdWx0aWNhc3RfcmN2KGJyLCBOVUxMLCBza2IpKQorCQkJZ290byBvdXQ7CisKKwkJbWRzdCA9IGJyX21kYl9nZXQoYnIsIHNrYik7CisJCWlmIChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQihza2IpLT5tcm91dGVyc19vbmx5KQorCQkJYnJfbXVsdGljYXN0X2RlbGl2ZXIobWRzdCwgc2tiKTsKKwkJZWxzZQorCQkJYnJfZmxvb2RfZGVsaXZlcihiciwgc2tiKTsKKwl9IGVsc2UgaWYgKChkc3QgPSBfX2JyX2ZkYl9nZXQoYnIsIGRlc3QpKSAhPSBOVUxMKQogCQlicl9kZWxpdmVyKGRzdC0+ZHN0LCBza2IpOwogCWVsc2UKIAkJYnJfZmxvb2RfZGVsaXZlcihiciwgc2tiKTsKIAorb3V0OgogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ5LDYgKzYwLDcgQEAKIAlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJYnJfc3RwX2VuYWJsZV9icmlkZ2UoYnIpOworCWJyX211bHRpY2FzdF9vcGVuKGJyKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTksNyArNzEsMTAgQEAKIAogc3RhdGljIGludCBicl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWJyX3N0cF9kaXNhYmxlX2JyaWRnZShuZXRkZXZfcHJpdihkZXYpKTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJYnJfc3RwX2Rpc2FibGVfYnJpZGdlKGJyKTsKKwlicl9tdWx0aWNhc3Rfc3RvcChicik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKaW5kZXggYmMxNzA0YS4uZDYxZTZmNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtMTAzLDUxICsxMDQsMTUyIEBACiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLS8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwotc3RhdGljIHZvaWQgYnJfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBkZWxpdmVyX2Nsb25lKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnByZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgdm9pZCAoKl9fcGFja2V0X2hvb2spKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKK3sKKwlza2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gQlJfSU5QVVRfU0tCX0NCKHNrYiktPmJyZGV2OworCisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlfX3BhY2tldF9ob29rKHByZXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICptYXliZV9kZWxpdmVyKAorCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnByZXYsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl2b2lkICgqX19wYWNrZXRfaG9vaykoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpKQogeworCWludCBlcnI7CisKKwlpZiAoIXNob3VsZF9kZWxpdmVyKHAsIHNrYikpCisJCXJldHVybiBwcmV2OworCisJaWYgKCFwcmV2KQorCQlnb3RvIG91dDsKKworCWVyciA9IGRlbGl2ZXJfY2xvbmUocHJldiwgc2tiLCBfX3BhY2tldF9ob29rKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCitvdXQ6CisJcmV0dXJuIHA7Cit9CisKKy8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLworc3RhdGljIHZvaWQgYnJfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IwLAorCQkgICAgIHZvaWQgKCpfX3BhY2tldF9ob29rKShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKK3sKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnByZXY7CiAKIAlwcmV2ID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZici0+cG9ydF9saXN0LCBsaXN0KSB7Ci0JCWlmIChzaG91bGRfZGVsaXZlcihwLCBza2IpKSB7Ci0JCQlpZiAocHJldiAhPSBOVUxMKSB7Ci0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7Ci0KLQkJCQlpZiAoKHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewotCQkJCQlici0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCi0JCQkJX19wYWNrZXRfaG9vayhwcmV2LCBza2IyKTsKLQkJCX0KLQotCQkJcHJldiA9IHA7Ci0JCX0KKwkJcHJldiA9IG1heWJlX2RlbGl2ZXIocHJldiwgcCwgc2tiLCBfX3BhY2tldF9ob29rKTsKKwkJaWYgKElTX0VSUihwcmV2KSkKKwkJCWdvdG8gb3V0OwogCX0KIAotCWlmIChwcmV2ICE9IE5VTEwpIHsKKwlpZiAoIXByZXYpCisJCWdvdG8gb3V0OworCisJaWYgKHNrYjApCisJCWRlbGl2ZXJfY2xvbmUocHJldiwgc2tiLCBfX3BhY2tldF9ob29rKTsKKwllbHNlCiAJCV9fcGFja2V0X2hvb2socHJldiwgc2tiKTsKLQkJcmV0dXJuOwotCX0KKwlyZXR1cm47CiAKLQlrZnJlZV9za2Ioc2tiKTsKK291dDoKKwlpZiAoIXNrYjApCisJCWtmcmVlX3NrYihza2IpOwogfQogCiAKIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KIHZvaWQgYnJfZmxvb2RfZGVsaXZlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JYnJfZmxvb2QoYnIsIHNrYiwgX19icl9kZWxpdmVyKTsKKwlicl9mbG9vZChiciwgc2tiLCBOVUxMLCBfX2JyX2RlbGl2ZXIpOwogfQogCiAvKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KLXZvaWQgYnJfZmxvb2RfZm9yd2FyZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGJyX2Zsb29kX2ZvcndhcmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMikKIHsKLQlicl9mbG9vZChiciwgc2tiLCBfX2JyX2ZvcndhcmQpOworCWJyX2Zsb29kKGJyLCBza2IsIHNrYjIsIF9fYnJfZm9yd2FyZCk7CiB9CisKKyNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcKKy8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjAsCisJCQkgICAgICAgdm9pZCAoKl9fcGFja2V0X2hvb2spKAorCQkJCQljb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gQlJfSU5QVVRfU0tCX0NCKHNrYiktPmJyZGV2OworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpscG9ydCwgKnJwb3J0OworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnByZXY7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcnA7CisKKwlwcmV2ID0gTlVMTDsKKworCXJwID0gYnItPnJvdXRlcl9saXN0LmZpcnN0OworCXAgPSBtZHN0ID8gbWRzdC0+cG9ydHMgOiBOVUxMOworCXdoaWxlIChwIHx8IHJwKSB7CisJCWxwb3J0ID0gcCA/IHAtPnBvcnQgOiBOVUxMOworCQlycG9ydCA9IHJwID8gaGxpc3RfZW50cnkocnAsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQsIHJsaXN0KSA6CisJCQkgICAgIE5VTEw7CisKKwkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKWxwb3J0ID4gKHVuc2lnbmVkIGxvbmcpcnBvcnQgPworCQkgICAgICAgbHBvcnQgOiBycG9ydDsKKworCQlwcmV2ID0gbWF5YmVfZGVsaXZlcihwcmV2LCBwb3J0LCBza2IsIF9fcGFja2V0X2hvb2spOworCQlpZiAoSVNfRVJSKHByZXYpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWxwb3J0ID49ICh1bnNpZ25lZCBsb25nKXBvcnQpCisJCQlwID0gcC0+bmV4dDsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXJwb3J0ID49ICh1bnNpZ25lZCBsb25nKXBvcnQpCisJCQlycCA9IHJwLT5uZXh0OworCX0KKworCWlmICghcHJldikKKwkJZ290byBvdXQ7CisKKwlpZiAoc2tiMCkKKwkJZGVsaXZlcl9jbG9uZShwcmV2LCBza2IsIF9fcGFja2V0X2hvb2spOworCWVsc2UKKwkJX19wYWNrZXRfaG9vayhwcmV2LCBza2IpOworCXJldHVybjsKKworb3V0OgorCWlmICghc2tiMCkKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KK3ZvaWQgYnJfbXVsdGljYXN0X2RlbGl2ZXIoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWJyX211bHRpY2FzdF9mbG9vZChtZHN0LCBza2IsIE5VTEwsIF9fYnJfZGVsaXZlcik7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KK3ZvaWQgYnJfbXVsdGljYXN0X2ZvcndhcmQoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMikKK3sKKwlicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBza2IyLCBfX2JyX2ZvcndhcmQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggYTJjYmU2MS4uYjZhMzg3MiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMTQ3LDYgKzE0Nyw4IEBACiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5icl9wb3J0LCBOVUxMKTsKIAorCWJyX211bHRpY2FzdF9kZWxfcG9ydChwKTsKKwogCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX1JFTU9WRSk7CiAJa29iamVjdF9kZWwoJnAtPmtvYmopOwogCkBAIC0yMDYsOSArMjA4LDggQEAKIAogCWJyX25ldGZpbHRlcl9ydGFibGVfaW5pdChicik7CiAKLQlJTklUX0xJU1RfSEVBRCgmYnItPmFnZV9saXN0KTsKLQogCWJyX3N0cF90aW1lcl9pbml0KGJyKTsKKwlicl9tdWx0aWNhc3RfaW5pdChicik7CiAKIAlyZXR1cm4gZGV2OwogfQpAQCAtMjYwLDYgKzI2MSw3IEBACiAJYnJfaW5pdF9wb3J0KHApOwogCXAtPnN0YXRlID0gQlJfU1RBVEVfRElTQUJMRUQ7CiAJYnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTsKKwlicl9tdWx0aWNhc3RfYWRkX3BvcnQocCk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTQ2Nyw3ICs0NjksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGJyX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBicl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlMSVNUX0hFQUQobGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggNWVlMWEzNi4uNTNiMzk4NSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMjAsOSArMjAsOSBAQAogLyogQnJpZGdlIGdyb3VwIG11bHRpY2FzdCBhZGRyZXNzIDgwMi4xZCAocGcgNTEpLiAqLwogY29uc3QgdTggYnJfZ3JvdXBfYWRkcmVzc1tFVEhfQUxFTl0gPSB7IDB4MDEsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAotc3RhdGljIHZvaWQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IGJyLT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+YnJkZXY7CiAKIAlicmRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCWJyZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTMwLDggKzMwLDggQEAKIAlpbmRldiA9IHNrYi0+ZGV2OwogCXNrYi0+ZGV2ID0gYnJkZXY7CiAKLQlORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sIHNrYiwgaW5kZXYsIE5VTEwsCi0JCW5ldGlmX3JlY2VpdmVfc2tiKTsKKwlyZXR1cm4gTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIGluZGV2LCBOVUxMLAorCQkgICAgICAgbmV0aWZfcmVjZWl2ZV9za2IpOwogfQogCiAvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKHByZWVtcHRfZGlzYWJsZWQpICovCkBAIC00MSw2ICs0MSw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IHJjdV9kZXJlZmVyZW5jZShza2ItPmRldi0+YnJfcG9ydCk7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0OworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKIAogCWlmICghcCB8fCBwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkKQEAgLTUwLDkgKzUxLDE1IEBACiAJYnIgPSBwLT5icjsKIAlicl9mZGJfdXBkYXRlKGJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKIAorCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSAmJgorCSAgICBicl9tdWx0aWNhc3RfcmN2KGJyLCBwLCBza2IpKQorCQlnb3RvIGRyb3A7CisKIAlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpCiAJCWdvdG8gZHJvcDsKIAorCUJSX0lOUFVUX1NLQl9DQihza2IpLT5icmRldiA9IGJyLT5kZXY7CisKIAkvKiBUaGUgcGFja2V0IHNrYjIgZ29lcyB0byB0aGUgbG9jYWwgaG9zdCAoTlVMTCB0byBza2lwKS4gKi8KIAlza2IyID0gTlVMTDsKIApAQCAtNjIsMjcgKzY5LDM1IEBACiAJZHN0ID0gTlVMTDsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgeworCQltZHN0ID0gYnJfbWRiX2dldChiciwgc2tiKTsKKwkJaWYgKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCKHNrYiktPm1yb3V0ZXJzX29ubHkpIHsKKwkJCWlmICgobWRzdCAmJiAhaGxpc3RfdW5oYXNoZWQoJm1kc3QtPm1nbGlzdCkpIHx8CisJCQkgICAgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihicikpCisJCQkJc2tiMiA9IHNrYjsKKwkJCWJyX211bHRpY2FzdF9mb3J3YXJkKG1kc3QsIHNrYiwgc2tiMik7CisJCQlza2IgPSBOVUxMOworCQkJaWYgKCFza2IyKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UKKwkJCXNrYjIgPSBza2I7CisKIAkJYnItPmRldi0+c3RhdHMubXVsdGljYXN0Kys7Ci0JCXNrYjIgPSBza2I7CiAJfSBlbHNlIGlmICgoZHN0ID0gX19icl9mZGJfZ2V0KGJyLCBkZXN0KSkgJiYgZHN0LT5pc19sb2NhbCkgewogCQlza2IyID0gc2tiOwogCQkvKiBEbyBub3QgZm9yd2FyZCB0aGUgcGFja2V0IHNpbmNlIGl0J3MgbG9jYWwuICovCiAJCXNrYiA9IE5VTEw7CiAJfQogCi0JaWYgKHNrYjIgPT0gc2tiKQotCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAoc2tiMikKLQkJYnJfcGFzc19mcmFtZV91cChiciwgc2tiMik7Ci0KIAlpZiAoc2tiKSB7CiAJCWlmIChkc3QpCiAJCQlicl9mb3J3YXJkKGRzdC0+ZHN0LCBza2IpOwogCQllbHNlCi0JCQlicl9mbG9vZF9mb3J3YXJkKGJyLCBza2IpOworCQkJYnJfZmxvb2RfZm9yd2FyZChiciwgc2tiLCBza2IyKTsKIAl9CiAKKwlpZiAoc2tiMikKKwkJcmV0dXJuIGJyX3Bhc3NfZnJhbWVfdXAoc2tiMik7CisKIG91dDoKIAlyZXR1cm4gMDsKIGRyb3A6CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU5ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtMCwwICsxLDEzMDQgQEAKKy8qCisgKiBCcmlkZ2UgbXVsdGljYXN0IHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKKworc3RhdGljIGlubGluZSBpbnQgYnJfaXBfaGFzaChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIsIF9fYmUzMiBpcCkKK3sKKwlyZXR1cm4gamhhc2hfMXdvcmQobWRiLT5zZWNyZXQsICh1MzIpaXApICYgKG1kYi0+bWF4IC0gMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKl9fYnJfbWRiX2lwX2dldCgKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIsIF9fYmUzMiBkc3QsIGludCBoYXNoKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IGhsaXN0X25vZGUgKnA7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShtcCwgcCwgJm1kYi0+bWhhc2hbaGFzaF0sIGhsaXN0W21kYi0+dmVyXSkgeworCQlpZiAoZHN0ID09IG1wLT5hZGRyKQorCQkJcmV0dXJuIG1wOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tZGJfaXBfZ2V0KAorCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiwgX19iZTMyIGRzdCkKK3sKKwlyZXR1cm4gX19icl9tZGJfaXBfZ2V0KG1kYiwgZHN0LCBicl9pcF9oYXNoKG1kYiwgZHN0KSk7Cit9CisKK3N0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqYnJfbWRiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gYnItPm1kYjsKKworCWlmICghbWRiIHx8IGJyLT5tdWx0aWNhc3RfZGlzYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJY2FzZSBodG9ucyhFVEhfUF9JUCk6CisJCWlmIChCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+aWdtcCkKKwkJCWJyZWFrOworCQlyZXR1cm4gYnJfbWRiX2lwX2dldChtZGIsIGlwX2hkcihza2IpLT5kYWRkcik7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGJyX21kYl9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIgPQorCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSwgcmN1KTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpvbGQgPSBtZGItPm9sZDsKKworCW1kYi0+b2xkID0gTlVMTDsKKwlrZnJlZShvbGQtPm1oYXNoKTsKKwlrZnJlZShvbGQpOworfQorCitzdGF0aWMgaW50IGJyX21kYl9jb3B5KHN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm5ldywKKwkJICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm9sZCwKKwkJICAgICAgIGludCBlbGFzdGljaXR5KQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IGhsaXN0X25vZGUgKnA7CisJaW50IG1heGxlbjsKKwlpbnQgbGVuOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG9sZC0+bWF4OyBpKyspCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wLCBwLCAmb2xkLT5taGFzaFtpXSwgaGxpc3Rbb2xkLT52ZXJdKQorCQkJaGxpc3RfYWRkX2hlYWQoJm1wLT5obGlzdFtuZXctPnZlcl0sCisJCQkJICAgICAgICZuZXctPm1oYXNoW2JyX2lwX2hhc2gobmV3LCBtcC0+YWRkcildKTsKKworCWlmICghZWxhc3RpY2l0eSkKKwkJcmV0dXJuIDA7CisKKwltYXhsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBuZXctPm1heDsgaSsrKSB7CisJCWxlbiA9IDA7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wLCBwLCAmbmV3LT5taGFzaFtpXSwgaGxpc3RbbmV3LT52ZXJdKQorCQkJbGVuKys7CisJCWlmIChsZW4gPiBtYXhsZW4pCisJCQltYXhsZW4gPSBsZW47CisJfQorCisJcmV0dXJuIG1heGxlbiA+IGVsYXN0aWNpdHkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2ZyZWVfcGcoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnAgPQorCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgcmN1KTsKKworCWtmcmVlKHApOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZnJlZV9ncm91cChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCA9CisJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnksIHJjdSk7CisKKwlrZnJlZShtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9ncm91cF9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG1wLT5icjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikpCisJCWdvdG8gb3V0OworCisJaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkpCisJCWhsaXN0X2RlbF9pbml0KCZtcC0+bWdsaXN0KTsKKworCWlmIChtcC0+cG9ydHMpCisJCWdvdG8gb3V0OworCisJbWRiID0gYnItPm1kYjsKKwlobGlzdF9kZWxfcmN1KCZtcC0+aGxpc3RbbWRiLT52ZXJdKTsKKwltZGItPnNpemUtLTsKKworCWRlbF90aW1lcigmbXAtPnF1ZXJ5X3RpbWVyKTsKKwljYWxsX3JjdV9iaCgmbXAtPnJjdSwgYnJfbXVsdGljYXN0X2ZyZWVfZ3JvdXApOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiA9IGJyLT5tZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKipwcDsKKworCW1wID0gYnJfbWRiX2lwX2dldChtZGIsIHBnLT5hZGRyKTsKKwlpZiAoV0FSTl9PTighbXApKQorCQlyZXR1cm47CisKKwlmb3IgKHBwID0gJm1wLT5wb3J0czsgKHAgPSAqcHApOyBwcCA9ICZwLT5uZXh0KSB7CisJCWlmIChwICE9IHBnKQorCQkJY29udGludWU7CisKKwkJKnBwID0gcC0+bmV4dDsKKwkJaGxpc3RfZGVsX2luaXQoJnAtPm1nbGlzdCk7CisJCWRlbF90aW1lcigmcC0+dGltZXIpOworCQlkZWxfdGltZXIoJnAtPnF1ZXJ5X3RpbWVyKTsKKwkJY2FsbF9yY3VfYmgoJnAtPnJjdSwgYnJfbXVsdGljYXN0X2ZyZWVfcGcpOworCisJCWlmICghbXAtPnBvcnRzICYmIGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQkgICAgbmV0aWZfcnVubmluZyhici0+ZGV2KSkKKwkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBqaWZmaWVzKTsKKworCQlyZXR1cm47CisJfQorCisJV0FSTl9PTigxKTsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcGctPnBvcnQtPmJyOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCB0aW1lcl9wZW5kaW5nKCZwZy0+dGltZXIpIHx8CisJICAgIGhsaXN0X3VuaGFzaGVkKCZwZy0+bWdsaXN0KSkKKwkJZ290byBvdXQ7CisKKwlicl9tdWx0aWNhc3RfZGVsX3BnKGJyLCBwZyk7CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKworc3RhdGljIGludCBicl9tZGJfcmVoYXNoKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKiptZGJwLCBpbnQgbWF4LAorCQkJIGludCBlbGFzdGljaXR5KQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm9sZCA9ICptZGJwOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYjsKKwlpbnQgZXJyOworCisJbWRiID0ga21hbGxvYyhzaXplb2YoKm1kYiksIEdGUF9BVE9NSUMpOworCWlmICghbWRiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1kYi0+bWF4ID0gbWF4OworCW1kYi0+b2xkID0gb2xkOworCisJbWRiLT5taGFzaCA9IGt6YWxsb2MobWF4ICogc2l6ZW9mKCptZGItPm1oYXNoKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFtZGItPm1oYXNoKSB7CisJCWtmcmVlKG1kYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1kYi0+c2l6ZSA9IG9sZCA/IG9sZC0+c2l6ZSA6IDA7CisJbWRiLT52ZXIgPSBvbGQgPyBvbGQtPnZlciBeIDEgOiAwOworCisJaWYgKCFvbGQgfHwgZWxhc3RpY2l0eSkKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbWRiLT5zZWNyZXQsIHNpemVvZihtZGItPnNlY3JldCkpOworCWVsc2UKKwkJbWRiLT5zZWNyZXQgPSBvbGQtPnNlY3JldDsKKworCWlmICghb2xkKQorCQlnb3RvIG91dDsKKworCWVyciA9IGJyX21kYl9jb3B5KG1kYiwgb2xkLCBlbGFzdGljaXR5KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKG1kYi0+bWhhc2gpOworCQlrZnJlZShtZGIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNhbGxfcmN1X2JoKCZtZGItPnJjdSwgYnJfbWRiX2ZyZWUpOworCitvdXQ6CisJcmN1X2Fzc2lnbl9wb2ludGVyKCptZGJwLCBtZGIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYnJfbXVsdGljYXN0X2FsbG9jX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkJCV9fYmUzMiBncm91cCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZ21waGRyICppaDsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc3RydWN0IGlwaGRyICppcGg7CisKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGJyLT5kZXYsIHNpemVvZigqZXRoKSArIHNpemVvZigqaXBoKSArCisJCQkJCQkgc2l6ZW9mKCppaCkgKyA0KTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlldGggPSBldGhfaGRyKHNrYik7CisKKwltZW1jcHkoZXRoLT5oX3NvdXJjZSwgYnItPmRldi0+ZGV2X2FkZHIsIDYpOworCWV0aC0+aF9kZXN0WzBdID0gMTsKKwlldGgtPmhfZGVzdFsxXSA9IDA7CisJZXRoLT5oX2Rlc3RbMl0gPSAweDVlOworCWV0aC0+aF9kZXN0WzNdID0gMDsKKwlldGgtPmhfZGVzdFs0XSA9IDA7CisJZXRoLT5oX2Rlc3RbNV0gPSAxOworCWV0aC0+aF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKKwlza2JfcHV0KHNrYiwgc2l6ZW9mKCpldGgpKTsKKworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItPmxlbik7CisJaXBoID0gaXBfaGRyKHNrYik7CisKKwlpcGgtPnZlcnNpb24gPSA0OworCWlwaC0+aWhsID0gNjsKKwlpcGgtPnRvcyA9IDB4YzA7CisJaXBoLT50b3RfbGVuID0gaHRvbnMoc2l6ZW9mKCppcGgpICsgc2l6ZW9mKCppaCkgKyA0KTsKKwlpcGgtPmlkID0gMDsKKwlpcGgtPmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOworCWlwaC0+dHRsID0gMTsKKwlpcGgtPnByb3RvY29sID0gSVBQUk9UT19JR01QOworCWlwaC0+c2FkZHIgPSAwOworCWlwaC0+ZGFkZHIgPSBodG9ubChJTkFERFJfQUxMSE9TVFNfR1JPVVApOworCSgodTggKikmaXBoWzFdKVswXSA9IElQT1BUX1JBOworCSgodTggKikmaXBoWzFdKVsxXSA9IDQ7CisJKCh1OCAqKSZpcGhbMV0pWzJdID0gMDsKKwkoKHU4ICopJmlwaFsxXSlbM10gPSAwOworCWlwX3NlbmRfY2hlY2soaXBoKTsKKwlza2JfcHV0KHNrYiwgMjQpOworCisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiLT5sZW4pOworCWloID0gaWdtcF9oZHIoc2tiKTsKKwlpaC0+dHlwZSA9IElHTVBfSE9TVF9NRU1CRVJTSElQX1FVRVJZOworCWloLT5jb2RlID0gKGdyb3VwID8gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCA6CisJCQkgICAgYnItPm11bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCkgLworCQkgICAoSFogLyBJR01QX1RJTUVSX1NDQUxFKTsKKwlpaC0+Z3JvdXAgPSBncm91cDsKKwlpaC0+Y3N1bSA9IDA7CisJaWgtPmNzdW0gPSBpcF9jb21wdXRlX2NzdW0oKHZvaWQgKilpaCwgc2l6ZW9mKHN0cnVjdCBpZ21waGRyKSk7CisJc2tiX3B1dChza2IsIHNpemVvZigqaWgpKTsKKworCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmV0aCkpOworCitvdXQ6CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3NlbmRfZ3JvdXBfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBtcC0+YnI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGJyX211bHRpY2FzdF9hbGxvY19xdWVyeShiciwgbXAtPmFkZHIpOworCWlmICghc2tiKQorCQlnb3RvIHRpbWVyOworCisJbmV0aWZfcngoc2tiKTsKKwordGltZXI6CisJaWYgKCsrbXAtPnF1ZXJpZXNfc2VudCA8IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpCisJCW1vZF90aW1lcigmbXAtPnF1ZXJ5X3RpbWVyLAorCQkJICBqaWZmaWVzICsgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9ncm91cF9xdWVyeV9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG1wLT5icjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpIHx8CisJICAgIG1wLT5xdWVyaWVzX3NlbnQgPj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCkKKwkJZ290byBvdXQ7CisKKwlicl9tdWx0aWNhc3Rfc2VuZF9ncm91cF9xdWVyeShtcCk7CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3NlbmRfcG9ydF9ncm91cF9xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZykKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcGctPnBvcnQ7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0+YnI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGJyX211bHRpY2FzdF9hbGxvY19xdWVyeShiciwgcGctPmFkZHIpOworCWlmICghc2tiKQorCQlnb3RvIHRpbWVyOworCisJYnJfZGVsaXZlcihwb3J0LCBza2IpOworCit0aW1lcjoKKwlpZiAoKytwZy0+cXVlcmllc19zZW50IDwgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCkKKwkJbW9kX3RpbWVyKCZwZy0+cXVlcnlfdGltZXIsCisJCQkgIGppZmZpZXMgKyBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsKTsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcXVlcnlfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHBnLT5wb3J0OworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCBobGlzdF91bmhhc2hlZCgmcGctPm1nbGlzdCkgfHwKKwkgICAgcGctPnF1ZXJpZXNfc2VudCA+PSBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KQorCQlnb3RvIG91dDsKKworCWJyX211bHRpY2FzdF9zZW5kX3BvcnRfZ3JvdXBfcXVlcnkocGcpOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX211bHRpY2FzdF9nZXRfZ3JvdXAoCisJc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBfX2JlMzIgZ3JvdXAsCisJaW50IGhhc2gpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gYnItPm1kYjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOworCXN0cnVjdCBobGlzdF9ub2RlICpwOworCXVuc2lnbmVkIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBtYXg7CisJaW50IGVsYXN0aWNpdHk7CisJaW50IGVycjsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wLCBwLCAmbWRiLT5taGFzaFtoYXNoXSwgaGxpc3RbbWRiLT52ZXJdKSB7CisJCWNvdW50Kys7CisJCWlmICh1bmxpa2VseShncm91cCA9PSBtcC0+YWRkcikpIHsKKwkJCXJldHVybiBtcDsKKwkJfQorCX0KKworCWVsYXN0aWNpdHkgPSAwOworCW1heCA9IG1kYi0+bWF4OworCisJaWYgKHVubGlrZWx5KGNvdW50ID4gYnItPmhhc2hfZWxhc3RpY2l0eSAmJiBjb3VudCkpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNdWx0aWNhc3QgaGFzaCB0YWJsZSAiCisJCQkgICAgICAgImNoYWluIGxpbWl0IHJlYWNoZWQ6ICVzXG4iLAorCQkJICAgICAgIGJyLT5kZXYtPm5hbWUsIHBvcnQgPyBwb3J0LT5kZXYtPm5hbWUgOgorCQkJCQkJICAgICBici0+ZGV2LT5uYW1lKTsKKworCQllbGFzdGljaXR5ID0gYnItPmhhc2hfZWxhc3RpY2l0eTsKKwl9CisKKwlpZiAobWRiLT5zaXplID49IG1heCkgeworCQltYXggKj0gMjsKKwkJaWYgKHVubGlrZWx5KG1heCA+PSBici0+aGFzaF9tYXgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTXVsdGljYXN0IGhhc2ggdGFibGUgbWF4aW11bSAiCisJCQkgICAgICAgInJlYWNoZWQsIGRpc2FibGluZyBzbm9vcGluZzogJXMsICVkXG4iLAorCQkJICAgICAgIGJyLT5kZXYtPm5hbWUsIHBvcnQgPyBwb3J0LT5kZXYtPm5hbWUgOgorCQkJCQkJICAgICBici0+ZGV2LT5uYW1lLAorCQkJICAgICAgIG1heCk7CisJCQllcnIgPSAtRTJCSUc7CitkaXNhYmxlOgorCQkJYnItPm11bHRpY2FzdF9kaXNhYmxlZCA9IDE7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmIChtYXggPiBtZGItPm1heCB8fCBlbGFzdGljaXR5KSB7CisJCWlmIChtZGItPm9sZCkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGljYXN0IGhhc2ggdGFibGUgIgorCQkJCSAgICAgICAib24gZmlyZTogJXNcbiIsCisJCQkJICAgICAgIGJyLT5kZXYtPm5hbWUsIHBvcnQgPyBwb3J0LT5kZXYtPm5hbWUgOgorCQkJCQkJCSAgICAgYnItPmRldi0+bmFtZSk7CisJCQllcnIgPSAtRUVYSVNUOworCQkJZ290byBlcnI7CisJCX0KKworCQllcnIgPSBicl9tZGJfcmVoYXNoKCZici0+bWRiLCBtYXgsIGVsYXN0aWNpdHkpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IHJlaGFzaCBtdWx0aWNhc3QgIgorCQkJICAgICAgICJoYXNoIHRhYmxlLCBkaXNhYmxpbmcgc25vb3Bpbmc6ICIKKwkJCSAgICAgICAiJXMsICVkLCAlZFxuIiwKKwkJCSAgICAgICBici0+ZGV2LT5uYW1lLCBwb3J0ID8gcG9ydC0+ZGV2LT5uYW1lIDoKKwkJCQkJCSAgICAgYnItPmRldi0+bmFtZSwKKwkJCSAgICAgICBtZGItPnNpemUsIGVycik7CisJCQlnb3RvIGRpc2FibGU7CisJCX0KKworCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKKworZXJyOgorCW1wID0gRVJSX1BUUihlcnIpOworCXJldHVybiBtcDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqYnJfbXVsdGljYXN0X25ld19ncm91cCgKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIF9fYmUzMiBncm91cCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIgPSBici0+bWRiOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJaW50IGhhc2g7CisKKwlpZiAoIW1kYikgeworCQlpZiAoYnJfbWRiX3JlaGFzaCgmYnItPm1kYiwgQlJfSEFTSF9TSVpFLCAwKSkKKwkJCXJldHVybiBOVUxMOworCQlnb3RvIHJlaGFzaDsKKwl9CisKKwloYXNoID0gYnJfaXBfaGFzaChtZGIsIGdyb3VwKTsKKwltcCA9IGJyX211bHRpY2FzdF9nZXRfZ3JvdXAoYnIsIHBvcnQsIGdyb3VwLCBoYXNoKTsKKwlzd2l0Y2ggKFBUUl9FUlIobXApKSB7CisJY2FzZSAwOgorCQlicmVhazsKKworCWNhc2UgLUVBR0FJTjoKK3JlaGFzaDoKKwkJbWRiID0gYnItPm1kYjsKKwkJaGFzaCA9IGJyX2lwX2hhc2gobWRiLCBncm91cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCisJbXAgPSBremFsbG9jKHNpemVvZigqbXApLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIW1wKSkKKwkJZ290byBvdXQ7CisKKwltcC0+YnIgPSBicjsKKwltcC0+YWRkciA9IGdyb3VwOworCXNldHVwX3RpbWVyKCZtcC0+dGltZXIsIGJyX211bHRpY2FzdF9ncm91cF9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpbXApOworCXNldHVwX3RpbWVyKCZtcC0+cXVlcnlfdGltZXIsIGJyX211bHRpY2FzdF9ncm91cF9xdWVyeV9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpbXApOworCisJaGxpc3RfYWRkX2hlYWRfcmN1KCZtcC0+aGxpc3RbbWRiLT52ZXJdLCAmbWRiLT5taGFzaFtoYXNoXSk7CisJbWRiLT5zaXplKys7CisKK291dDoKKwlyZXR1cm4gbXA7Cit9CisKK3N0YXRpYyBpbnQgYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBfX2JlMzIgZ3JvdXApCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKipwcDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJaW50IGVycjsKKworCWlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fAorCSAgICAocG9ydCAmJiBwb3J0LT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkpCisJCWdvdG8gb3V0OworCisJbXAgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwKGJyLCBwb3J0LCBncm91cCk7CisJZXJyID0gUFRSX0VSUihtcCk7CisJaWYgKHVubGlrZWx5KElTX0VSUihtcCkgfHwgIW1wKSkKKwkJZ290byBlcnI7CisKKwlpZiAoIXBvcnQpIHsKKwkJaGxpc3RfYWRkX2hlYWQoJm1wLT5tZ2xpc3QsICZici0+bWdsaXN0KTsKKwkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIG5vdyArIGJyLT5tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAocHAgPSAmbXAtPnBvcnRzOyAocCA9ICpwcCk7IHBwID0gJnAtPm5leHQpIHsKKwkJaWYgKHAtPnBvcnQgPT0gcG9ydCkKKwkJCWdvdG8gZm91bmQ7CisJCWlmICgodW5zaWduZWQgbG9uZylwLT5wb3J0IDwgKHVuc2lnbmVkIGxvbmcpcG9ydCkKKwkJCWJyZWFrOworCX0KKworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9BVE9NSUMpOworCWVyciA9IC1FTk9NRU07CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBlcnI7CisKKwlwLT5hZGRyID0gZ3JvdXA7CisJcC0+cG9ydCA9IHBvcnQ7CisJcC0+bmV4dCA9ICpwcDsKKwlobGlzdF9hZGRfaGVhZCgmcC0+bWdsaXN0LCAmcG9ydC0+bWdsaXN0KTsKKwlzZXR1cF90aW1lcigmcC0+dGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsCisJCSAgICAodW5zaWduZWQgbG9uZylwKTsKKwlzZXR1cF90aW1lcigmcC0+cXVlcnlfdGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3F1ZXJ5X2V4cGlyZWQsCisJCSAgICAodW5zaWduZWQgbG9uZylwKTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIHApOworCitmb3VuZDoKKwltb2RfdGltZXIoJnAtPnRpbWVyLCBub3cgKyBici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwpOworb3V0OgorCWVyciA9IDA7CisKK2VycjoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfcm91dGVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0+YnI7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKHBvcnQtPm11bHRpY2FzdF9yb3V0ZXIgIT0gMSB8fAorCSAgICB0aW1lcl9wZW5kaW5nKCZwb3J0LT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyKSB8fAorCSAgICBobGlzdF91bmhhc2hlZCgmcG9ydC0+cmxpc3QpKQorCQlnb3RvIG91dDsKKworCWhsaXN0X2RlbF9pbml0X3JjdSgmcG9ydC0+cmxpc3QpOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9sb2NhbF9yb3V0ZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZW5kX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTMyIHNlbnQpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgYnItPm11bHRpY2FzdF9kaXNhYmxlZCB8fAorCSAgICB0aW1lcl9wZW5kaW5nKCZici0+bXVsdGljYXN0X3F1ZXJpZXJfdGltZXIpKQorCQlyZXR1cm47CisKKwlza2IgPSBicl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoYnIsIDApOworCWlmICghc2tiKQorCQlnb3RvIHRpbWVyOworCisJaWYgKHBvcnQpIHsKKwkJX19za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJCXNrYi0+ZGV2ID0gcG9ydC0+ZGV2OworCQlORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAorCQkJZGV2X3F1ZXVlX3htaXQpOworCX0gZWxzZQorCQluZXRpZl9yeChza2IpOworCit0aW1lcjoKKwl0aW1lID0gamlmZmllczsKKwl0aW1lICs9IHNlbnQgPCBici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQgPworCQlici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwgOgorCQlici0+bXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsOworCW1vZF90aW1lcihwb3J0ID8gJnBvcnQtPm11bHRpY2FzdF9xdWVyeV90aW1lciA6CisJCQkgJmJyLT5tdWx0aWNhc3RfcXVlcnlfdGltZXIsIHRpbWUpOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfcG9ydF9xdWVyeV9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmIChwb3J0ICYmIChwb3J0LT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCB8fAorCQkgICAgIHBvcnQtPnN0YXRlID09IEJSX1NUQVRFX0JMT0NLSU5HKSkKKwkJZ290byBvdXQ7CisKKwlpZiAocG9ydC0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50IDwKKwkgICAgYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50KQorCQlwb3J0LT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyaWVzX3NlbnQrKzsKKworCWJyX211bHRpY2FzdF9zZW5kX3F1ZXJ5KHBvcnQtPmJyLCBwb3J0LAorCQkJCXBvcnQtPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCk7CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKwordm9pZCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKKwlwb3J0LT5tdWx0aWNhc3Rfcm91dGVyID0gMTsKKworCXNldHVwX3RpbWVyKCZwb3J0LT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyLCBicl9tdWx0aWNhc3Rfcm91dGVyX2V4cGlyZWQsCisJCSAgICAodW5zaWduZWQgbG9uZylwb3J0KTsKKwlzZXR1cF90aW1lcigmcG9ydC0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyLAorCQkgICAgYnJfbXVsdGljYXN0X3BvcnRfcXVlcnlfZXhwaXJlZCwgKHVuc2lnbmVkIGxvbmcpcG9ydCk7Cit9CisKK3ZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7CisJZGVsX3RpbWVyX3N5bmMoJnBvcnQtPm11bHRpY2FzdF9yb3V0ZXJfdGltZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCXBvcnQtPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCA9IDA7CisKKwlpZiAodHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwb3J0LT5tdWx0aWNhc3RfcXVlcnlfdGltZXIpID49IDAgfHwKKwkgICAgZGVsX3RpbWVyKCZwb3J0LT5tdWx0aWNhc3RfcXVlcnlfdGltZXIpKQorCQltb2RfdGltZXIoJnBvcnQtPm11bHRpY2FzdF9xdWVyeV90aW1lciwgamlmZmllcyk7Cit9CisKK3ZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0+YnI7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKGJyLT5tdWx0aWNhc3RfZGlzYWJsZWQgfHwgIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCisJCWdvdG8gb3V0OworCisJX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQocG9ydCk7CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKwordm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0+YnI7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGc7CisJc3RydWN0IGhsaXN0X25vZGUgKnAsICpuOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIHAsIG4sICZwb3J0LT5tZ2xpc3QsIG1nbGlzdCkKKwkJYnJfbXVsdGljYXN0X2RlbF9wZyhiciwgcGcpOworCisJaWYgKCFobGlzdF91bmhhc2hlZCgmcG9ydC0+cmxpc3QpKQorCQlobGlzdF9kZWxfaW5pdF9yY3UoJnBvcnQtPnJsaXN0KTsKKwlkZWxfdGltZXIoJnBvcnQtPm11bHRpY2FzdF9yb3V0ZXJfdGltZXIpOworCWRlbF90aW1lcigmcG9ydC0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyKTsKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKworc3RhdGljIGludCBicl9tdWx0aWNhc3RfaWdtcDNfcmVwb3J0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZ21wdjNfcmVwb3J0ICppaDsKKwlzdHJ1Y3QgaWdtcHYzX2dyZWMgKmdyZWM7CisJaW50IGk7CisJaW50IGxlbjsKKwlpbnQgbnVtOworCWludCB0eXBlOworCWludCBlcnIgPSAwOworCV9fYmUzMiBncm91cDsKKworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaWgpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpaCA9IGlnbXB2M19yZXBvcnRfaGRyKHNrYik7CisJbnVtID0gbnRvaHMoaWgtPm5ncmVjKTsKKwlsZW4gPSBzaXplb2YoKmloKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlsZW4gKz0gc2l6ZW9mKCpncmVjKTsKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWdyZWMgPSAodm9pZCAqKShza2ItPmRhdGEgKyBsZW4pOworCQlncm91cCA9IGdyZWMtPmdyZWNfbWNhOworCQl0eXBlID0gZ3JlYy0+Z3JlY190eXBlOworCisJCWxlbiArPSBncmVjLT5ncmVjX25zcmNzICogNDsKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIFdlIHRyZWF0IHRoaXMgYXMgYW4gSUdNUHYyIHJlcG9ydCBmb3Igbm93LiAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBJR01QVjNfTU9ERV9JU19JTkNMVURFOgorCQljYXNlIElHTVBWM19NT0RFX0lTX0VYQ0xVREU6CisJCWNhc2UgSUdNUFYzX0NIQU5HRV9UT19JTkNMVURFOgorCQljYXNlIElHTVBWM19DSEFOR0VfVE9fRVhDTFVERToKKwkJY2FzZSBJR01QVjNfQUxMT1dfTkVXX1NPVVJDRVM6CisJCWNhc2UgSUdNUFYzX0JMT0NLX09MRF9TT1VSQ0VTOgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gYnJfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgZ3JvdXApOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2FkZF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBobGlzdF9ub2RlICpwOworCXN0cnVjdCBobGlzdF9ub2RlICoqaDsKKworCWZvciAoaCA9ICZici0+cm91dGVyX2xpc3QuZmlyc3Q7CisJICAgICAocCA9ICpoKSAmJgorCSAgICAgKHVuc2lnbmVkIGxvbmcpY29udGFpbmVyX29mKHAsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQsIHJsaXN0KSA+CisJICAgICAodW5zaWduZWQgbG9uZylwb3J0OworCSAgICAgaCA9ICZwLT5uZXh0KQorCQk7CisKKwlwb3J0LT5ybGlzdC5wcHJldiA9IGg7CisJcG9ydC0+cmxpc3QubmV4dCA9IHA7CisJcmN1X2Fzc2lnbl9wb2ludGVyKCpoLCAmcG9ydC0+cmxpc3QpOworCWlmIChwKQorCQlwLT5wcHJldiA9ICZwb3J0LT5ybGlzdC5uZXh0OworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfbWFya19yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisKKwlpZiAoIXBvcnQpIHsKKwkJaWYgKGJyLT5tdWx0aWNhc3Rfcm91dGVyID09IDEpCisJCQltb2RfdGltZXIoJmJyLT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyLAorCQkJCSAgbm93ICsgYnItPm11bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0LT5tdWx0aWNhc3Rfcm91dGVyICE9IDEpCisJCXJldHVybjsKKworCWlmICghaGxpc3RfdW5oYXNoZWQoJnBvcnQtPnJsaXN0KSkKKwkJZ290byB0aW1lcjsKKworCWJyX211bHRpY2FzdF9hZGRfcm91dGVyKGJyLCBwb3J0KTsKKwordGltZXI6CisJbW9kX3RpbWVyKCZwb3J0LT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyLAorCQkgIG5vdyArIGJyLT5tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9xdWVyeV9yZWNlaXZlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkJCV9fYmUzMiBzYWRkcikKK3sKKwlpZiAoc2FkZHIpCisJCW1vZF90aW1lcigmYnItPm11bHRpY2FzdF9xdWVyaWVyX3RpbWVyLAorCQkJICBqaWZmaWVzICsgYnItPm11bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsKTsKKwllbHNlIGlmICh0aW1lcl9wZW5kaW5nKCZici0+bXVsdGljYXN0X3F1ZXJpZXJfdGltZXIpKQorCQlyZXR1cm47CisKKwlicl9tdWx0aWNhc3RfbWFya19yb3V0ZXIoYnIsIHBvcnQpOworfQorCitzdGF0aWMgaW50IGJyX211bHRpY2FzdF9xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCXN0cnVjdCBpZ21waGRyICppaCA9IGlnbXBfaGRyKHNrYik7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICppaDM7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICoqcHA7CisJdW5zaWduZWQgbG9uZyBtYXhfZGVsYXk7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCV9fYmUzMiBncm91cDsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwKKwkgICAgKHBvcnQgJiYgcG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpKQorCQlnb3RvIG91dDsKKworCWJyX211bHRpY2FzdF9xdWVyeV9yZWNlaXZlZChiciwgcG9ydCwgaXBoLT5zYWRkcik7CisKKwlncm91cCA9IGloLT5ncm91cDsKKworCWlmIChza2ItPmxlbiA9PSBzaXplb2YoKmloKSkgeworCQltYXhfZGVsYXkgPSBpaC0+Y29kZSAqIChIWiAvIElHTVBfVElNRVJfU0NBTEUpOworCisJCWlmICghbWF4X2RlbGF5KSB7CisJCQltYXhfZGVsYXkgPSAxMCAqIEhaOworCQkJZ3JvdXAgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpZ21wdjNfcXVlcnkpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWloMyA9IGlnbXB2M19xdWVyeV9oZHIoc2tiKTsKKwkJaWYgKGloMy0+bnNyY3MpCisJCQlyZXR1cm4gMDsKKworCQltYXhfZGVsYXkgPSBpaDMtPmNvZGUgPyAxIDoKKwkJCSAgICBJR01QVjNfTVJDKGloMy0+Y29kZSkgKiAoSFogLyBJR01QX1RJTUVSX1NDQUxFKTsKKwl9CisKKwlpZiAoIWdyb3VwKQorCQlnb3RvIG91dDsKKworCW1wID0gYnJfbWRiX2lwX2dldChici0+bWRiLCBncm91cCk7CisJaWYgKCFtcCkKKwkJZ290byBvdXQ7CisKKwltYXhfZGVsYXkgKj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKKworCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpICYmCisJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KKwkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgorCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQorCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKKworCWZvciAocHAgPSAmbXAtPnBvcnRzOyAocCA9ICpwcCk7IHBwID0gJnAtPm5leHQpIHsKKwkJaWYgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CisJCSAgICB0aW1lX2FmdGVyKHAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgorCQkgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkKKwkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKKwkJCQkgICAgIF9fYmUzMiBncm91cCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOworCXVuc2lnbmVkIGxvbmcgbm93OworCXVuc2lnbmVkIGxvbmcgdGltZTsKKworCWlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwKKwkgICAgKHBvcnQgJiYgcG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHx8CisJICAgIHRpbWVyX3BlbmRpbmcoJmJyLT5tdWx0aWNhc3RfcXVlcmllcl90aW1lcikpCisJCWdvdG8gb3V0OworCisJbWRiID0gYnItPm1kYjsKKwltcCA9IGJyX21kYl9pcF9nZXQobWRiLCBncm91cCk7CisJaWYgKCFtcCkKKwkJZ290byBvdXQ7CisKKwlub3cgPSBqaWZmaWVzOworCXRpbWUgPSBub3cgKyBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50ICoKKwkJICAgICBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsOworCisJaWYgKCFwb3J0KSB7CisJCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpICYmCisJCSAgICAodGltZXJfcGVuZGluZygmbXAtPnRpbWVyKSA/CisJCSAgICAgdGltZV9hZnRlcihtcC0+dGltZXIuZXhwaXJlcywgdGltZSkgOgorCQkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmbXAtPnRpbWVyKSA+PSAwKSkgeworCQkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIHRpbWUpOworCisJCQltcC0+cXVlcmllc19zZW50ID0gMDsKKwkJCW1vZF90aW1lcigmbXAtPnF1ZXJ5X3RpbWVyLCBub3cpOworCQl9CisKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChwID0gbXAtPnBvcnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cG9ydCAhPSBwb3J0KQorCQkJY29udGludWU7CisKKwkJaWYgKCFobGlzdF91bmhhc2hlZCgmcC0+bWdsaXN0KSAmJgorCQkgICAgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CisJCSAgICAgdGltZV9hZnRlcihwLT50aW1lci5leHBpcmVzLCB0aW1lKSA6CisJCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkpIHsKKwkJCW1vZF90aW1lcigmcC0+dGltZXIsIHRpbWUpOworCisJCQlwLT5xdWVyaWVzX3NlbnQgPSAwOworCQkJbW9kX3RpbWVyKCZwLT5xdWVyeV90aW1lciwgbm93KTsKKwkJfQorCisJCWJyZWFrOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworfQorCitzdGF0aWMgaW50IGJyX211bHRpY2FzdF9pcHY0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2I7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGlnbXBoZHIgKmloOworCXVuc2lnbmVkIGxlbjsKKwl1bnNpZ25lZCBvZmZzZXQ7CisJaW50IGVycjsKKworCUJSX0lOUFVUX1NLQl9DQihza2IpLT5pZ21wID0gMDsKKwlCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+bXJvdXRlcnNfb25seSA9IDA7CisKKwkvKiBXZSB0cmVhdCBPT00gYXMgcGFja2V0IGxvc3MgZm9yIG5vdy4gKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlwaCA9IGlwX2hkcihza2IpOworCisJaWYgKGlwaC0+aWhsIDwgNSB8fCBpcGgtPnZlcnNpb24gIT0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpcF9oZHJsZW4oc2tiKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaXBoID0gaXBfaGRyKHNrYik7CisKKwlpZiAodW5saWtlbHkoaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX0lHTVApCisJCXJldHVybiAwOworCisJbGVuID0gbnRvaHMoaXBoLT50b3RfbGVuKTsKKwlpZiAoc2tiLT5sZW4gPCBsZW4gfHwgbGVuIDwgaXBfaGRybGVuKHNrYikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNrYi0+bGVuID4gbGVuKSB7CisJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IyKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZXJyID0gcHNrYl90cmltX3Jjc3VtKHNrYjIsIGxlbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWxlbiAtPSBpcF9oZHJsZW4oc2tiMik7CisJb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYjIpICsgaXBfaGRybGVuKHNrYjIpOworCV9fc2tiX3B1bGwoc2tiMiwgb2Zmc2V0KTsKKwlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IyKTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKCFwc2tiX21heV9wdWxsKHNrYjIsIHNpemVvZigqaWgpKSkKKwkJZ290byBvdXQ7CisKKwlpcGggPSBpcF9oZHIoc2tiMik7CisKKwlzd2l0Y2ggKHNrYjItPmlwX3N1bW1lZCkgeworCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6CisJCWlmICghY3N1bV9mb2xkKHNrYjItPmNzdW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJc2tiMi0+Y3N1bSA9IDA7CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiMikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSAwOworCisJQlJfSU5QVVRfU0tCX0NCKHNrYiktPmlnbXAgPSAxOworCWloID0gaWdtcF9oZHIoc2tiMik7CisKKwlzd2l0Y2ggKGloLT50eXBlKSB7CisJY2FzZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CisJY2FzZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKKwkJQlJfSU5QVVRfU0tCX0NCKHNrYjIpLT5tcm91dGVyc19vbmx5ID0gMTsKKwkJZXJyID0gYnJfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgaWgtPmdyb3VwKTsKKwkJYnJlYWs7CisJY2FzZSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKKwkJZXJyID0gYnJfbXVsdGljYXN0X2lnbXAzX3JlcG9ydChiciwgcG9ydCwgc2tiMik7CisJCWJyZWFrOworCWNhc2UgSUdNUF9IT1NUX01FTUJFUlNISVBfUVVFUlk6CisJCWVyciA9IGJyX211bHRpY2FzdF9xdWVyeShiciwgcG9ydCwgc2tiMik7CisJCWJyZWFrOworCWNhc2UgSUdNUF9IT1NUX0xFQVZFX01FU1NBR0U6CisJCWJyX211bHRpY2FzdF9sZWF2ZV9ncm91cChiciwgcG9ydCwgaWgtPmdyb3VwKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJX19za2JfcHVzaChza2IyLCBvZmZzZXQpOworCWlmIChza2IyICE9IHNrYikKKwkJa2ZyZWVfc2tiKHNrYjIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorCQlyZXR1cm4gYnJfbXVsdGljYXN0X2lwdjRfcmN2KGJyLCBwb3J0LCBza2IpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfcXVlcnlfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gKHZvaWQgKilkYXRhOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmIChici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50IDwKKwkgICAgYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50KQorCQlici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50Kys7CisKKwlicl9tdWx0aWNhc3Rfc2VuZF9xdWVyeShiciwgTlVMTCwgYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCk7CisKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKwordm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7CisJYnItPmhhc2hfZWxhc3RpY2l0eSA9IDQ7CisJYnItPmhhc2hfbWF4ID0gNTEyOworCisJYnItPm11bHRpY2FzdF9yb3V0ZXIgPSAxOworCWJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQgPSAyOworCWJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCA9IDI7CisKKwlici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsID0gSFo7CisJYnItPm11bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCA9IDEwICogSFo7CisJYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsID0gMTI1ICogSFogLyA0OworCWJyLT5tdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwgPSAxMjUgKiBIWjsKKwlici0+bXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwgPSAyNTUgKiBIWjsKKwlici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwgPSAyNjAgKiBIWjsKKworCXNwaW5fbG9ja19pbml0KCZici0+bXVsdGljYXN0X2xvY2spOworCXNldHVwX3RpbWVyKCZici0+bXVsdGljYXN0X3JvdXRlcl90aW1lciwKKwkJICAgIGJyX211bHRpY2FzdF9sb2NhbF9yb3V0ZXJfZXhwaXJlZCwgMCk7CisJc2V0dXBfdGltZXIoJmJyLT5tdWx0aWNhc3RfcXVlcmllcl90aW1lciwKKwkJICAgIGJyX211bHRpY2FzdF9sb2NhbF9yb3V0ZXJfZXhwaXJlZCwgMCk7CisJc2V0dXBfdGltZXIoJmJyLT5tdWx0aWNhc3RfcXVlcnlfdGltZXIsIGJyX211bHRpY2FzdF9xdWVyeV9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpYnIpOworfQorCit2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKKwlici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50ID0gMDsKKworCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwltb2RfdGltZXIoJmJyLT5tdWx0aWNhc3RfcXVlcnlfdGltZXIsIGppZmZpZXMpOworfQorCit2b2lkIGJyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKm47CisJdTMyIHZlcjsKKwlpbnQgaTsKKworCWRlbF90aW1lcl9zeW5jKCZici0+bXVsdGljYXN0X3JvdXRlcl90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmJyLT5tdWx0aWNhc3RfcXVlcmllcl90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmJyLT5tdWx0aWNhc3RfcXVlcnlfdGltZXIpOworCisJc3Bpbl9sb2NrX2JoKCZici0+bXVsdGljYXN0X2xvY2spOworCW1kYiA9IGJyLT5tZGI7CisJaWYgKCFtZGIpCisJCWdvdG8gb3V0OworCisJYnItPm1kYiA9IE5VTEw7CisKKwl2ZXIgPSBtZGItPnZlcjsKKwlmb3IgKGkgPSAwOyBpIDwgbWRiLT5tYXg7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wLCBwLCBuLCAmbWRiLT5taGFzaFtpXSwKKwkJCQkJICBobGlzdFt2ZXJdKSB7CisJCQlkZWxfdGltZXIoJm1wLT50aW1lcik7CisJCQlkZWxfdGltZXIoJm1wLT5xdWVyeV90aW1lcik7CisJCQljYWxsX3JjdV9iaCgmbXAtPnJjdSwgYnJfbXVsdGljYXN0X2ZyZWVfZ3JvdXApOworCQl9CisJfQorCisJaWYgKG1kYi0+b2xkKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZici0+bXVsdGljYXN0X2xvY2spOworCQlzeW5jaHJvbml6ZV9yY3VfYmgoKTsKKwkJc3Bpbl9sb2NrX2JoKCZici0+bXVsdGljYXN0X2xvY2spOworCQlXQVJOX09OKG1kYi0+b2xkKTsKKwl9CisKKwltZGItPm9sZCA9IG1kYjsKKwljYWxsX3JjdV9iaCgmbWRiLT5yY3UsIGJyX21kYl9mcmVlKTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZici0+bXVsdGljYXN0X2xvY2spOworfQorCitpbnQgYnJfbXVsdGljYXN0X3NldF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCXNwaW5fbG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCisJCWdvdG8gdW5sb2NrOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJY2FzZSAyOgorCQlkZWxfdGltZXIoJmJyLT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAxOgorCQlici0+bXVsdGljYXN0X3JvdXRlciA9IHZhbDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBicl9tdWx0aWNhc3Rfc2V0X3BvcnRfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtPmJyOworCWludCBlcnIgPSAtRU5PRU5UOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCBwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkKKwkJZ290byB1bmxvY2s7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCQlwLT5tdWx0aWNhc3Rfcm91dGVyID0gdmFsOworCQllcnIgPSAwOworCisJCWlmICh2YWwgPCAyICYmICFobGlzdF91bmhhc2hlZCgmcC0+cmxpc3QpKQorCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZwLT5ybGlzdCk7CisKKwkJaWYgKHZhbCA9PSAxKQorCQkJYnJlYWs7CisKKwkJZGVsX3RpbWVyKCZwLT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyKTsKKworCQlpZiAodmFsID09IDApCisJCQlicmVhazsKKworCQlicl9tdWx0aWNhc3RfYWRkX3JvdXRlcihiciwgcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQorCQlnb3RvIHVubG9jazsKKworCWVyciA9IDA7CisJaWYgKGJyLT5tdWx0aWNhc3RfZGlzYWJsZWQgPT0gIXZhbCkKKwkJZ290byB1bmxvY2s7CisKKwlici0+bXVsdGljYXN0X2Rpc2FibGVkID0gIXZhbDsKKwlpZiAoYnItPm11bHRpY2FzdF9kaXNhYmxlZCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYnItPm1kYikgeworCQlpZiAoYnItPm1kYi0+b2xkKSB7CisJCQllcnIgPSAtRUVYSVNUOworcm9sbGJhY2s6CisJCQlici0+bXVsdGljYXN0X2Rpc2FibGVkID0gISF2YWw7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCWVyciA9IGJyX21kYl9yZWhhc2goJmJyLT5tZGIsIGJyLT5tZGItPm1heCwKKwkJCQkgICAgYnItPmhhc2hfZWxhc3RpY2l0eSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJvbGxiYWNrOworCX0KKworCWJyX211bHRpY2FzdF9vcGVuKGJyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZici0+cG9ydF9saXN0LCBsaXN0KSB7CisJCWlmIChwb3J0LT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCB8fAorCQkgICAgcG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfQkxPQ0tJTkcpCisJCQljb250aW51ZTsKKworCQlfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydChwb3J0KTsKKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBicl9tdWx0aWNhc3Rfc2V0X2hhc2hfbWF4KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaW50IGVyciA9IC1FTk9FTlQ7CisJdTMyIG9sZDsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCisJCWdvdG8gdW5sb2NrOworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoIWlzX3Bvd2VyX29mXzIodmFsKSkKKwkJZ290byB1bmxvY2s7CisJaWYgKGJyLT5tZGIgJiYgdmFsIDwgYnItPm1kYi0+c2l6ZSkKKwkJZ290byB1bmxvY2s7CisKKwllcnIgPSAwOworCisJb2xkID0gYnItPmhhc2hfbWF4OworCWJyLT5oYXNoX21heCA9IHZhbDsKKworCWlmIChici0+bWRiKSB7CisJCWlmIChici0+bWRiLT5vbGQpIHsKKwkJCWVyciA9IC1FRVhJU1Q7Cityb2xsYmFjazoKKwkJCWJyLT5oYXNoX21heCA9IG9sZDsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisKKwkJZXJyID0gYnJfbWRiX3JlaGFzaCgmYnItPm1kYiwgYnItPmhhc2hfbWF4LAorCQkJCSAgICBici0+aGFzaF9lbGFzdGljaXR5KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcm9sbGJhY2s7CisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCAyMTE0ZTQ1Li4xY2YyY2VmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtNTcsNiArNTcsNDEgQEAKIAl1bnNpZ25lZCBjaGFyCQkJaXNfc3RhdGljOwogfTsKIAorc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCB7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkJKnBvcnQ7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cAkqbmV4dDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbWdsaXN0OworCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCXF1ZXJ5X3RpbWVyOworCV9fYmUzMgkJCQlhZGRyOworCXUzMgkJCQlxdWVyaWVzX3NlbnQ7Cit9OworCitzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkJaGxpc3RbMl07CisJc3RydWN0IGhsaXN0X25vZGUJCW1nbGlzdDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZQkJKmJyOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAJKnBvcnRzOworCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCXF1ZXJ5X3RpbWVyOworCV9fYmUzMgkJCQlhZGRyOworCXUzMgkJCQlxdWVyaWVzX3NlbnQ7Cit9OworCitzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlCit7CisJc3RydWN0IGhsaXN0X2hlYWQJCSptaGFzaDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZQkqb2xkOworCXUzMgkJCQlzaXplOworCXUzMgkJCQltYXg7CisJdTMyCQkJCXNlY3JldDsKKwl1MzIJCQkJdmVyOworfTsKKwogc3RydWN0IG5ldF9icmlkZ2VfcG9ydAogewogCXN0cnVjdCBuZXRfYnJpZGdlCQkqYnI7CkBAIC04NCw2ICsxMTksMTUgQEAKIAogCXVuc2lnbmVkIGxvbmcgCQkJZmxhZ3M7CiAjZGVmaW5lIEJSX0hBSVJQSU5fTU9ERQkJMHgwMDAwMDAwMQorCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCisJdTMyCQkJCW11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudDsKKwl1bnNpZ25lZCBjaGFyCQkJbXVsdGljYXN0X3JvdXRlcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3JvdXRlcl90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3F1ZXJ5X3RpbWVyOworCXN0cnVjdCBobGlzdF9oZWFkCQltZ2xpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUJCXJsaXN0OworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgbmV0X2JyaWRnZQpAQCAtOTMsNyArMTM3LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAlzcGlubG9ja190CQkJaGFzaF9sb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkCQloYXNoW0JSX0hBU0hfU0laRV07Ci0Jc3RydWN0IGxpc3RfaGVhZAkJYWdlX2xpc3Q7CiAJdW5zaWduZWQgbG9uZwkJCWZlYXR1cmVfbWFzazsKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCXN0cnVjdCBydGFibGUgCQkJZmFrZV9ydGFibGU7CkBAIC0xMjUsNiArMTY4LDM1IEBACiAJdW5zaWduZWQgY2hhcgkJCXRvcG9sb2d5X2NoYW5nZTsKIAl1bnNpZ25lZCBjaGFyCQkJdG9wb2xvZ3lfY2hhbmdlX2RldGVjdGVkOwogCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCisJdW5zaWduZWQgY2hhcgkJCW11bHRpY2FzdF9yb3V0ZXI7CisKKwl1OAkJCQltdWx0aWNhc3RfZGlzYWJsZWQ6MTsKKworCXUzMgkJCQloYXNoX2VsYXN0aWNpdHk7CisJdTMyCQkJCWhhc2hfbWF4OworCisJdTMyCQkJCW11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKKwl1MzIJCQkJbXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50OworCXUzMgkJCQltdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudDsKKworCXVuc2lnbmVkIGxvbmcJCQltdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZwkJCW11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsOworCXVuc2lnbmVkIGxvbmcJCQltdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbDsKKwl1bnNpZ25lZCBsb25nCQkJbXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsOworCXVuc2lnbmVkIGxvbmcJCQltdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZwkJCW11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsOworCisJc3BpbmxvY2tfdAkJCW11bHRpY2FzdF9sb2NrOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUJKm1kYjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkJcm91dGVyX2xpc3Q7CisJc3RydWN0IGhsaXN0X2hlYWQJCW1nbGlzdDsKKworCXN0cnVjdCB0aW1lcl9saXN0CQltdWx0aWNhc3Rfcm91dGVyX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CQltdWx0aWNhc3RfcXVlcmllcl90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3F1ZXJ5X3RpbWVyOworI2VuZGlmCisKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJaGVsbG9fdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXRjbl90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdG9wb2xvZ3lfY2hhbmdlX3RpbWVyOwpAQCAtMTMyLDYgKzIwNCwxNCBAQAogCXN0cnVjdCBrb2JqZWN0CQkJKmlmb2JqOwogfTsKIAorc3RydWN0IGJyX2lucHV0X3NrYl9jYiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2OworCWludCBpZ21wOworCWludCBtcm91dGVyc19vbmx5OworfTsKKworI2RlZmluZSBCUl9JTlBVVF9TS0JfQ0IoX19za2IpCSgoc3RydWN0IGJyX2lucHV0X3NrYl9jYiAqKShfX3NrYiktPmNiKQorCiBleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJyX2RldmljZV9ub3RpZmllcjsKIGV4dGVybiBjb25zdCB1OCBicl9ncm91cF9hZGRyZXNzW0VUSF9BTEVOXTsKIApAQCAtMTc1LDcgKzI1NSw4IEBACiAJCXN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBicl9mb3J3YXJkX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkIGJyX2Zsb29kX2RlbGl2ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiB2b2lkIGJyX2Zsb29kX2ZvcndhcmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGJyX2Zsb29kX2ZvcndhcmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMik7CiAKIC8qIGJyX2lmLmMgKi8KIGV4dGVybiB2b2lkIGJyX3BvcnRfY2Fycmllcl9jaGVjayhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTsKQEAgLTE5OCw2ICsyNzksOTQgQEAKIGV4dGVybiBpbnQgYnJfZGV2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogZXh0ZXJuIGludCBicl9pb2N0bF9kZXZpY2VsZXNzX3N0dWIoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIAorLyogYnJfbXVsdGljYXN0LmMgKi8KKyNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcKK2V4dGVybiBpbnQgYnJfbXVsdGljYXN0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX21kYl9nZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKK2V4dGVybiB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2RlbGl2ZXIoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGJyX211bHRpY2FzdF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjIpOworZXh0ZXJuIGludCBicl9tdWx0aWNhc3Rfc2V0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2V4dGVybiBpbnQgYnJfbXVsdGljYXN0X3NldF9wb3J0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCQl1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gaW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gaW50IGJyX211bHRpY2FzdF9zZXRfaGFzaF9tYXgoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfaXNfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKKwlyZXR1cm4gYnItPm11bHRpY2FzdF9yb3V0ZXIgPT0gMiB8fAorCSAgICAgICAoYnItPm11bHRpY2FzdF9yb3V0ZXIgPT0gMSAmJgorCQl0aW1lcl9wZW5kaW5nKCZici0+bXVsdGljYXN0X3JvdXRlcl90aW1lcikpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX21kYl9nZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9hZGRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIpCit7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogLyogYnJfbmV0ZmlsdGVyLmMgKi8KICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogZXh0ZXJuIGludCBicl9uZXRmaWx0ZXJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwLmMgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCmluZGV4IGZkM2Y4ZDYuLmVkY2YxNGIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHAuYwpAQCAtMzg2LDYgKzM4Niw4IEBACiAJZWxzZQogCQlwLT5zdGF0ZSA9IEJSX1NUQVRFX0xFQVJOSU5HOwogCisJYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHApOworCiAJYnJfbG9nX3N0YXRlKHApOwogCiAJaWYgKGJyLT5mb3J3YXJkX2RlbGF5ICE9IDApCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwppbmRleCA5YTUyYWM1Li5kNTI3MTE5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogCWRlbF90aW1lcigmcC0+aG9sZF90aW1lcik7CiAKIAlicl9mZGJfZGVsZXRlX2J5X3BvcnQoYnIsIHAsIDApOworCWJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQocCk7CiAKIAlicl9jb25maWd1cmF0aW9uX3VwZGF0ZShicik7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwppbmRleCBiZWU0ZjMwLi5kZDMyMWUzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCkBAIC0zNDUsNiArMzQ1LDI3MyBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGZsdXNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9mbHVzaCk7CiAKKyNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJyLT5tdWx0aWNhc3Rfcm91dGVyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIGJyX211bHRpY2FzdF9zZXRfcm91dGVyKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3Rfcm91dGVyLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19tdWx0aWNhc3Rfcm91dGVyLAorCQkgICBzdG9yZV9tdWx0aWNhc3Rfcm91dGVyKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3Rfc25vb3Bpbmcoc3RydWN0IGRldmljZSAqZCwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICFici0+bXVsdGljYXN0X2Rpc2FibGVkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3Nub29waW5nKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBicl9tdWx0aWNhc3RfdG9nZ2xlKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3Rfc25vb3BpbmcsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9zbm9vcGluZywgc3RvcmVfbXVsdGljYXN0X3Nub29waW5nKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19oYXNoX2VsYXN0aWNpdHkoc3RydWN0IGRldmljZSAqZCwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5oYXNoX2VsYXN0aWNpdHkpOworfQorCitzdGF0aWMgaW50IHNldF9lbGFzdGljaXR5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJYnItPmhhc2hfZWxhc3RpY2l0eSA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFzaF9lbGFzdGljaXR5KHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9lbGFzdGljaXR5KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihoYXNoX2VsYXN0aWNpdHksIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2hhc2hfZWxhc3RpY2l0eSwKKwkJICAgc3RvcmVfaGFzaF9lbGFzdGljaXR5KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19oYXNoX21heChzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYnItPmhhc2hfbWF4KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFzaF9tYXgoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBicl9tdWx0aWNhc3Rfc2V0X2hhc2hfbWF4KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihoYXNoX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaGFzaF9tYXgsCisJCSAgIHN0b3JlX2hhc2hfbWF4KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQoc3RydWN0IGRldmljZSAqZCwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2xhc3RfbWVtYmVyX2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X2xhc3RfbWVtYmVyX2NvdW50KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCwKKwkJICAgc3RvcmVfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50KTsKK30KKworc3RhdGljIGludCBzZXRfc3RhcnR1cF9xdWVyeV9jb3VudChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwlzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X3N0YXJ0dXBfcXVlcnlfY291bnQpOworfQorc3RhdGljIERFVklDRV9BVFRSKG11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCwKKwkJICAgc3RvcmVfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQpOworCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsCisJCSAgICAgICBqaWZmaWVzX3RvX2Nsb2NrX3QoYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHNldF9sYXN0X21lbWJlcl9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9sYXN0X21lbWJlcl9pbnRlcnZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwsCisJCSAgIHN0b3JlX211bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLAorCQkgICAgICAgamlmZmllc190b19jbG9ja190KGJyLT5tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHNldF9tZW1iZXJzaGlwX2ludGVydmFsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJYnItPm11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9tZW1iZXJzaGlwX2ludGVydmFsKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwsCisJCSAgIHN0b3JlX211bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwKKwkJICAgICAgIGppZmZpZXNfdG9fY2xvY2tfdChici0+bXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfcXVlcmllcl9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCA9IGNsb2NrX3RfdG9famlmZmllcyh2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfcXVlcmllcl9pbnRlcnZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsCisJCSAgICAgICBqaWZmaWVzX3RvX2Nsb2NrX3QoYnItPm11bHRpY2FzdF9xdWVyeV9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHNldF9xdWVyeV9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfcXVlcnlfaW50ZXJ2YWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKG11bHRpY2FzdF9xdWVyeV9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZigKKwkJYnVmLCAiJWx1XG4iLAorCQlqaWZmaWVzX3RvX2Nsb2NrX3QoYnItPm11bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHNldF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwsCisJCSAgIHN0b3JlX211bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoCisJCWJ1ZiwgIiVsdVxuIiwKKwkJamlmZmllc190b19jbG9ja190KGJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHNldF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwsCisJCSAgIHN0b3JlX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZvcndhcmRfZGVsYXkuYXR0ciwKIAkmZGV2X2F0dHJfaGVsbG9fdGltZS5hdHRyLApAQCAtMzY0LDYgKzYzMSwyMCBAQAogCSZkZXZfYXR0cl9nY190aW1lci5hdHRyLAogCSZkZXZfYXR0cl9ncm91cF9hZGRyLmF0dHIsCiAJJmRldl9hdHRyX2ZsdXNoLmF0dHIsCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCisJJmRldl9hdHRyX211bHRpY2FzdF9yb3V0ZXIuYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X3Nub29waW5nLmF0dHIsCisJJmRldl9hdHRyX2hhc2hfZWxhc3RpY2l0eS5hdHRyLAorCSZkZXZfYXR0cl9oYXNoX21heC5hdHRyLAorCSZkZXZfYXR0cl9tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQuYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQuYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsLmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsLmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsLmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9xdWVyeV9pbnRlcnZhbC5hdHRyLAorCSZkZXZfYXR0cl9tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwuYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYwppbmRleCA4MjA2NDNhLi42OTY1OTZjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCkBAIC0xNTksNiArMTU5LDIxIEBACiBzdGF0aWMgQlJQT1JUX0FUVFIoaGFpcnBpbl9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgc2hvd19oYWlycGluX21vZGUsIHN0b3JlX2hhaXJwaW5fbW9kZSk7CiAKKyNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHAtPm11bHRpY2FzdF9yb3V0ZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tdWx0aWNhc3Rfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB2KQoreworCXJldHVybiBicl9tdWx0aWNhc3Rfc2V0X3BvcnRfcm91dGVyKHAsIHYpOworfQorc3RhdGljIEJSUE9SVF9BVFRSKG11bHRpY2FzdF9yb3V0ZXIsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X211bHRpY2FzdF9yb3V0ZXIsCisJCSAgIHN0b3JlX211bHRpY2FzdF9yb3V0ZXIpOworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgYnJwb3J0X2F0dHJpYnV0ZSAqYnJwb3J0X2F0dHJzW10gPSB7CiAJJmJycG9ydF9hdHRyX3BhdGhfY29zdCwKIAkmYnJwb3J0X2F0dHJfcHJpb3JpdHksCkBAIC0xNzYsNiArMTkxLDkgQEAKIAkmYnJwb3J0X2F0dHJfaG9sZF90aW1lciwKIAkmYnJwb3J0X2F0dHJfZmx1c2gsCiAJJmJycG9ydF9hdHRyX2hhaXJwaW5fbW9kZSwKKyNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcKKwkmYnJwb3J0X2F0dHJfbXVsdGljYXN0X3JvdXRlciwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF84MDJfMy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0XzgwMl8zLmMKaW5kZXggYmQ5MWRjNS4uNWQxMTc2NyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0XzgwMl8zLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0XzgwMl8zLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfODAyXzNfbXQsCiAJLmNoZWNrZW50cnkJPSBlYnRfODAyXzNfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0XzgwMl8zX2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfODAyXzNfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycC5jCmluZGV4IGI3YWQ2MDQuLmU3Mjc2OTcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnAuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLm1hdGNoCQk9IGVidF9hcnBfbXQsCiAJLmNoZWNrZW50cnkJPSBlYnRfYXJwX210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9hcnBfaW5mbykpLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9hcnBfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycHJlcGx5LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwcmVwbHkuYwppbmRleCA3NjU4NGNkLi5mMzkyZTlkIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwcmVwbHkuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwcmVwbHkuYwpAQCAtNzgsNyArNzgsNyBAQAogCS5ob29rcwkJPSAoMSA8PCBORl9CUl9OVU1IT09LUykgfCAoMSA8PCBORl9CUl9QUkVfUk9VVElORyksCiAJLnRhcmdldAkJPSBlYnRfYXJwcmVwbHlfdGcsCiAJLmNoZWNrZW50cnkJPSBlYnRfYXJwcmVwbHlfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9hcnByZXBseV9pbmZvKSksCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9hcnByZXBseV9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfZG5hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2RuYXQuYwppbmRleCA2YjQ5ZWE5Li4yYmI0MGQ3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfZG5hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9kbmF0LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkJCSAgKDEgPDwgTkZfQlJfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0JSX0JST1VUSU5HKSwKIAkudGFyZ2V0CQk9IGVidF9kbmF0X3RnLAogCS5jaGVja2VudHJ5CT0gZWJ0X2RuYXRfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9uYXRfaW5mbykpLAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfbmF0X2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwLmMKaW5kZXggZDc3MWJiZi4uNWRlNmRmNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLm1hdGNoCQk9IGVidF9pcF9tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF9pcF9tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfaXBfaW5mbykpLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9pcF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXA2LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXA2LmMKaW5kZXggNzg0YTY1Ny4uYmJmMjUzNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwNi5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcDYuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkubWF0Y2gJCT0gZWJ0X2lwNl9tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF9pcDZfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X2lwNl9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2lwNl9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbGltaXQuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9saW1pdC5jCmluZGV4IGY3YmQ5MTkuLjdhODE4MjcxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbGltaXQuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbGltaXQuYwpAQCAtODQsMTMgKzg0LDI5IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKKworI2lmZGVmIENPTkZJR19DT01QQVQKKy8qCisgKiBubyBjb252ZXJzaW9uIGZ1bmN0aW9uIG5lZWRlZCAtLQorICogb25seSBhdmcvYnVyc3QgaGF2ZSBtZWFuaW5nZnVsIHZhbHVlcyBpbiB1c2Vyc3BhY2UuCisgKi8KK3N0cnVjdCBlYnRfY29tcGF0X2xpbWl0X2luZm8geworCWNvbXBhdF91aW50X3QgYXZnLCBidXJzdDsKKwljb21wYXRfdWxvbmdfdCBwcmV2OworCWNvbXBhdF91aW50X3QgY3JlZGl0LCBjcmVkaXRfY2FwLCBjb3N0OworfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGVidF9saW1pdF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAibGltaXQiLAogCS5yZXZpc2lvbgk9IDAsCiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkubWF0Y2gJCT0gZWJ0X2xpbWl0X210LAogCS5jaGVja2VudHJ5CT0gZWJ0X2xpbWl0X210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9saW1pdF9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2xpbWl0X2luZm8pLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2NvbXBhdF9saW1pdF9pbmZvKSwKKyNlbmRpZgogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBlNGVhM2ZkZC4uZTg3MzkyNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkudGFyZ2V0CQk9IGVidF9sb2dfdGcsCiAJLmNoZWNrZW50cnkJPSBlYnRfbG9nX3RnX2NoZWNrLAotCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbG9nX2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2xvZ19pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFyay5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmsuYwppbmRleCAyZmVlN2U4Li4yYjVjZTUzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFyay5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrLmMKQEAgLTUyLDYgKzUyLDMyIEBACiAJCXJldHVybiBmYWxzZTsKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X2VidF9tYXJrX3RfaW5mbyB7CisJY29tcGF0X3Vsb25nX3QgbWFyazsKKwljb21wYXRfdWludF90IHRhcmdldDsKK307CisKK3N0YXRpYyB2b2lkIG1hcmtfdGdfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKK3sKKwljb25zdCBzdHJ1Y3QgY29tcGF0X2VidF9tYXJrX3RfaW5mbyAqdXNlciA9IHNyYzsKKwlzdHJ1Y3QgZWJ0X21hcmtfdF9pbmZvICprZXJuID0gZHN0OworCisJa2Vybi0+bWFyayA9IHVzZXItPm1hcms7CisJa2Vybi0+dGFyZ2V0ID0gdXNlci0+dGFyZ2V0OworfQorCitzdGF0aWMgaW50IG1hcmtfdGdfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X21hcmtfdF9pbmZvIF9fdXNlciAqdXNlciA9IGRzdDsKKwljb25zdCBzdHJ1Y3QgZWJ0X21hcmtfdF9pbmZvICprZXJuID0gc3JjOworCisJaWYgKHB1dF91c2VyKGtlcm4tPm1hcmssICZ1c2VyLT5tYXJrKSB8fAorCSAgICBwdXRfdXNlcihrZXJuLT50YXJnZXQsICZ1c2VyLT50YXJnZXQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBlYnRfbWFya190Z19yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAibWFyayIsCkBAIC01OSw3ICs4NSwxMiBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLnRhcmdldAkJPSBlYnRfbWFya190ZywKIAkuY2hlY2tlbnRyeQk9IGVidF9tYXJrX3RnX2NoZWNrLAotCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbWFya190X2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X21hcmtfdF9pbmZvKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfbWFya190X2luZm8pLAorCS5jb21wYXRfZnJvbV91c2VyID0gbWFya190Z19jb21wYXRfZnJvbV91c2VyLAorCS5jb21wYXRfdG9fdXNlcgk9IG1hcmtfdGdfY29tcGF0X3RvX3VzZXIsCisjZW5kaWYKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFya19tLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFya19tLmMKaW5kZXggZWE1NzBmMi4uOGRlOGMzOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmtfbS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrX20uYwpAQCAtMzUsMTMgKzM1LDUwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfZWJ0X21hcmtfbV9pbmZvIHsKKwljb21wYXRfdWxvbmdfdCBtYXJrLCBtYXNrOworCXVpbnQ4X3QgaW52ZXJ0LCBiaXRtYXNrOworfTsKKworc3RhdGljIHZvaWQgbWFya19tdF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQoreworCWNvbnN0IHN0cnVjdCBjb21wYXRfZWJ0X21hcmtfbV9pbmZvICp1c2VyID0gc3JjOworCXN0cnVjdCBlYnRfbWFya19tX2luZm8gKmtlcm4gPSBkc3Q7CisKKwlrZXJuLT5tYXJrID0gdXNlci0+bWFyazsKKwlrZXJuLT5tYXNrID0gdXNlci0+bWFzazsKKwlrZXJuLT5pbnZlcnQgPSB1c2VyLT5pbnZlcnQ7CisJa2Vybi0+Yml0bWFzayA9IHVzZXItPmJpdG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWFya19tdF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCit7CisJc3RydWN0IGNvbXBhdF9lYnRfbWFya19tX2luZm8gX191c2VyICp1c2VyID0gZHN0OworCWNvbnN0IHN0cnVjdCBlYnRfbWFya19tX2luZm8gKmtlcm4gPSBzcmM7CisKKwlpZiAocHV0X3VzZXIoa2Vybi0+bWFyaywgJnVzZXItPm1hcmspIHx8CisJICAgIHB1dF91c2VyKGtlcm4tPm1hc2ssICZ1c2VyLT5tYXNrKSB8fAorCSAgICBwdXRfdXNlcihrZXJuLT5pbnZlcnQsICZ1c2VyLT5pbnZlcnQpIHx8CisJICAgIHB1dF91c2VyKGtlcm4tPmJpdG1hc2ssICZ1c2VyLT5iaXRtYXNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBlYnRfbWFya19tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAibWFya19tIiwKIAkucmV2aXNpb24JPSAwLAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLm1hdGNoCQk9IGVidF9tYXJrX210LAogCS5jaGVja2VudHJ5CT0gZWJ0X21hcmtfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X21hcmtfbV9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X21hcmtfbV9pbmZvKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfbWFya19tX2luZm8pLAorCS5jb21wYXRfZnJvbV91c2VyID0gbWFya19tdF9jb21wYXRfZnJvbV91c2VyLAorCS5jb21wYXRfdG9fdXNlcgk9IG1hcmtfbXRfY29tcGF0X3RvX3VzZXIsCisjZW5kaWYKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9uZmxvZy5jCmluZGV4IDJhNjNkOTk2Li40MGRiZDI0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYwpAQCAtNTEsNyArNTEsNyBAQAogCS5mYW1pbHkgICAgID0gTkZQUk9UT19CUklER0UsCiAJLnRhcmdldCAgICAgPSBlYnRfbmZsb2dfdGcsCiAJLmNoZWNrZW50cnkgPSBlYnRfbmZsb2dfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUgPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9uZmxvZ19pbmZvKSksCisJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGVidF9uZmxvZ19pbmZvKSwKIAkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3BrdHR5cGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9wa3R0eXBlLmMKaW5kZXggODgzZTk2ZS4uZTJhMDdlNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3BrdHR5cGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcGt0dHlwZS5jCkBAIC0zNiw3ICszNiw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkubWF0Y2gJCT0gZWJ0X3BrdHR5cGVfbXQsCiAJLmNoZWNrZW50cnkJPSBlYnRfcGt0dHlwZV9tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfcGt0dHlwZV9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X3BrdHR5cGVfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcmVkaXJlY3QuYwppbmRleCBjOGE0OWY3Li45YmU4ZmJjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcmVkaXJlY3QuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcmVkaXJlY3QuYwpAQCAtNTksNyArNTksNyBAQAogCQkJICAoMSA8PCBORl9CUl9CUk9VVElORyksCiAJLnRhcmdldAkJPSBlYnRfcmVkaXJlY3RfdGcsCiAJLmNoZWNrZW50cnkJPSBlYnRfcmVkaXJlY3RfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9yZWRpcmVjdF9pbmZvKSksCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9yZWRpcmVjdF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYwppbmRleCA4ZDA0ZDRjMy4uOWM3YjUyMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc25hdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJLmhvb2tzCQk9ICgxIDw8IE5GX0JSX05VTUhPT0tTKSB8ICgxIDw8IE5GX0JSX1BPU1RfUk9VVElORyksCiAJLnRhcmdldAkJPSBlYnRfc25hdF90ZywKIAkuY2hlY2tlbnRyeQk9IGVidF9zbmF0X3RnX2NoZWNrLAotCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbmF0X2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X25hdF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMKaW5kZXggNzVlMjlhOS4uOTJhOTNkMzYzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3N0cC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfc3RwX210LAogCS5jaGVja2VudHJ5CT0gZWJ0X3N0cF9tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfc3RwX2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfc3RwX2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IGNlNTA2ODguLmM2YWM2NTcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkudGFyZ2V0CQk9IGVidF91bG9nX3RnLAogCS5jaGVja2VudHJ5CT0gZWJ0X3Vsb2dfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF91bG9nX2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X3Vsb2dfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF92bGFuLmMKaW5kZXggM2RkZGQ0OC4uYmUxZGQyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdmxhbi5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfdmxhbl9tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF92bGFuX210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF92bGFuX2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfdmxhbl9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwppbmRleCBkMzJhYjEzLi5hZTNmMTA2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm91dGVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWVidF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+eHQuYnJvdXRlX3RhYmxlKTsKKwllYnRfdW5yZWdpc3Rlcl90YWJsZShuZXQsIG5ldC0+eHQuYnJvdXRlX3RhYmxlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm91dGVfbmV0X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCmluZGV4IDYwYjFhNmMuLjQyZTZiZDAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZnJhbWVfZmlsdGVyX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQllYnRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPnh0LmZyYW1lX2ZpbHRlcik7CisJZWJ0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPnh0LmZyYW1lX2ZpbHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZnJhbWVfZmlsdGVyX25ldF9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCA0YTk4ODA0Li42ZGMyZjg3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGZyYW1lX25hdF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JZWJ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT54dC5mcmFtZV9uYXQpOworCWVidF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT54dC5mcmFtZV9uYXQpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGZyYW1lX25hdF9uZXRfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMGI3ZjI2Mi4uZGZiNTgwNSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0zMywxMSArMzMsNiBAQAogI2RlZmluZSBCVUdQUklOVChmb3JtYXQsIGFyZ3MuLi4pIHByaW50aygia2VybmVsIG1zZzogZWJ0YWJsZXMgYnVnOiBwbGVhc2UgIlwKIAkJCQkJICJyZXBvcnQgdG8gYXV0aG9yOiAiZm9ybWF0LCAjIyBhcmdzKQogLyogI2RlZmluZSBCVUdQUklOVChmb3JtYXQsIGFyZ3MuLi4pICovCi0jZGVmaW5lIE1FTVBSSU5UKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKCJrZXJuZWwgbXNnOiBlYnRhYmxlcyAiXAotCQkJCQkgIjogb3V0IG9mIG1lbW9yeTogImZvcm1hdCwgIyMgYXJncykKLS8qICNkZWZpbmUgTUVNUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSAqLwotCi0KIAogLyoKICAqIEVhY2ggY3B1IGhhcyBpdHMgb3duIHNldCBvZiBjb3VudGVycywgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3Igd3JpdGVfbG9jayBpbgpAQCAtNTYsMTEgKzUxLDM3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZWJ0X211dGV4KTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyB2b2lkIGVidF9zdGFuZGFyZF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQoreworCWludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7CisKKwlpZiAodiA+PSAwKQorCQl2ICs9IHh0X2NvbXBhdF9jYWxjX2p1bXAoTkZQUk9UT19CUklER0UsIHYpOworCW1lbWNweShkc3QsICZ2LCBzaXplb2YodikpOworfQorCitzdGF0aWMgaW50IGVidF9zdGFuZGFyZF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCit7CisJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CisKKwlpZiAoY3YgPj0gMCkKKwkJY3YgLT0geHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgY3YpOworCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCAmY3YsIHNpemVvZihjdikpID8gLUVGQVVMVCA6IDA7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBlYnRfc3RhbmRhcmRfdGFyZ2V0ID0gewogCS5uYW1lICAgICAgID0gInN0YW5kYXJkIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX0JSSURHRSwKIAkudGFyZ2V0c2l6ZSA9IHNpemVvZihpbnQpLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0c2l6ZSA9IHNpemVvZihjb21wYXRfaW50X3QpLAorCS5jb21wYXRfZnJvbV91c2VyID0gZWJ0X3N0YW5kYXJkX2NvbXBhdF9mcm9tX3VzZXIsCisJLmNvbXBhdF90b191c2VyID0gIGVidF9zdGFuZGFyZF9jb21wYXRfdG9fdXNlciwKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTgyLDcgKzEwMyw4IEBACiAJcmV0dXJuIG0tPnUubWF0Y2gtPm1hdGNoKHNrYiwgcGFyKSA/IEVCVF9NQVRDSCA6IEVCVF9OT01BVENIOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlYnRfZGV2X2NoZWNrKGNoYXIgKmVudHJ5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlKQorc3RhdGljIGlubGluZSBpbnQKK2VidF9kZXZfY2hlY2soY29uc3QgY2hhciAqZW50cnksIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IGkgPSAwOwogCWNvbnN0IGNoYXIgKmRldm5hbWU7CkBAIC0xMDAsOCArMTIyLDkgQEAKIAogI2RlZmluZSBGV0lOVjIoYm9vbCxpbnZmbGcpICgoYm9vbCkgXiAhIShlLT5pbnZmbGFncyAmIGludmZsZykpCiAvKiBwcm9jZXNzIHN0YW5kYXJkIG1hdGNoZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGVidF9iYXNpY19tYXRjaChzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZXRoaGRyICpoLAotICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQorc3RhdGljIGlubGluZSBpbnQKK2VidF9iYXNpY19tYXRjaChjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBjb25zdCBzdHJ1Y3QgZXRoaGRyICpoLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCkKIHsKIAlpbnQgdmVyZGljdCwgaTsKIApAQCAtMTU2LDEyICsxNzksMTIgQEAKIAlpbnQgaSwgbmVudHJpZXM7CiAJc3RydWN0IGVidF9lbnRyeSAqcG9pbnQ7CiAJc3RydWN0IGVidF9jb3VudGVyICpjb3VudGVyX2Jhc2UsICpjYl9iYXNlOwotCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OwogCWludCB2ZXJkaWN0LCBzcCA9IDA7CiAJc3RydWN0IGVidF9jaGFpbnN0YWNrICpjczsKIAlzdHJ1Y3QgZWJ0X2VudHJpZXMgKmNoYWluaW5mbzsKLQljaGFyICpiYXNlOwotCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwljb25zdCBjaGFyICpiYXNlOworCWNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAlib29sIGhvdGRyb3AgPSBmYWxzZTsKIAlzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gbXRwYXI7CiAJc3RydWN0IHh0X3RhcmdldF9wYXJhbSB0Z3BhcjsKQEAgLTM5NSw3ICs0MTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVidF92ZXJpZnlfcG9pbnRlcnMoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAorc3RhdGljIGludCBlYnRfdmVyaWZ5X3BvaW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCwKIAkJCSAgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CiAJdW5zaWduZWQgaW50IGxpbWl0ID0gcmVwbC0+ZW50cmllc19zaXplOwpAQCAtNDQyLDYgKzQ2NSw4IEBACiAJCQkJYnJlYWs7CiAJCQlpZiAobGVmdCA8IGUtPm5leHRfb2Zmc2V0KQogCQkJCWJyZWFrOworCQkJaWYgKGUtPm5leHRfb2Zmc2V0IDwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnkpKQorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJb2Zmc2V0ICs9IGUtPm5leHRfb2Zmc2V0OwogCQl9CiAJfQpAQCAtNDY2LDggKzQ5MSw4IEBACiAgKiB0byBwYXJzZSB0aGUgdXNlcnNwYWNlIGRhdGEKICAqLwogc3RhdGljIGlubGluZSBpbnQKLWVidF9jaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgZWJ0X2VudHJ5ICplLAotICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLAorZWJ0X2NoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsCisgICBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAgICB1bnNpZ25lZCBpbnQgKm4sIHVuc2lnbmVkIGludCAqY250LAogICAgdW5zaWduZWQgaW50ICp0b3RhbGNudCwgdW5zaWduZWQgaW50ICp1ZGNfY250KQogewpAQCAtNTYxLDEzICs1ODYsMTQgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWVidF9jbGVhbnVwX21hdGNoKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sIHVuc2lnbmVkIGludCAqaSkKK2VidF9jbGVhbnVwX21hdGNoKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50ICppKQogewogCXN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gcGFyOwogCiAJaWYgKGkgJiYgKCppKS0tID09IDApCiAJCXJldHVybiAxOwogCisJcGFyLm5ldCAgICAgICA9IG5ldDsKIAlwYXIubWF0Y2ggICAgID0gbS0+dS5tYXRjaDsKIAlwYXIubWF0Y2hpbmZvID0gbS0+ZGF0YTsKIAlwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19CUklER0U7CkBAIC01NzgsMTMgKzYwNCwxNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotZWJ0X2NsZWFudXBfd2F0Y2hlcihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgKncsIHVuc2lnbmVkIGludCAqaSkKK2VidF9jbGVhbnVwX3dhdGNoZXIoc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LCBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCAqaSkKIHsKIAlzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHBhcjsKIAogCWlmIChpICYmICgqaSktLSA9PSAwKQogCQlyZXR1cm4gMTsKIAorCXBhci5uZXQgICAgICA9IG5ldDsKIAlwYXIudGFyZ2V0ICAgPSB3LT51LndhdGNoZXI7CiAJcGFyLnRhcmdpbmZvID0gdy0+ZGF0YTsKIAlwYXIuZmFtaWx5ICAgPSBORlBST1RPX0JSSURHRTsKQEAgLTU5NSw3ICs2MjIsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotZWJ0X2NsZWFudXBfZW50cnkoc3RydWN0IGVidF9lbnRyeSAqZSwgdW5zaWduZWQgaW50ICpjbnQpCitlYnRfY2xlYW51cF9lbnRyeShzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCAqY250KQogewogCXN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gcGFyOwogCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OwpAQCAtNjA1LDEwICs2MzIsMTEgQEAKIAkvKiB3ZSdyZSBkb25lICovCiAJaWYgKGNudCAmJiAoKmNudCktLSA9PSAwKQogCQlyZXR1cm4gMTsKLQlFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX3dhdGNoZXIsIE5VTEwpOwotCUVCVF9NQVRDSF9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX21hdGNoLCBOVUxMKTsKKwlFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX3dhdGNoZXIsIG5ldCwgTlVMTCk7CisJRUJUX01BVENIX0lURVJBVEUoZSwgZWJ0X2NsZWFudXBfbWF0Y2gsIG5ldCwgTlVMTCk7CiAJdCA9IChzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqKSgoKGNoYXIgKillKSArIGUtPnRhcmdldF9vZmZzZXQpOwogCisJcGFyLm5ldCAgICAgID0gbmV0OwogCXBhci50YXJnZXQgICA9IHQtPnUudGFyZ2V0OwogCXBhci50YXJnaW5mbyA9IHQtPmRhdGE7CiAJcGFyLmZhbWlseSAgID0gTkZQUk9UT19CUklER0U7CkBAIC02MTksNyArNjQ3LDggQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWVidF9jaGVja19lbnRyeShzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCitlYnRfY2hlY2tfZW50cnkoc3RydWN0IGVidF9lbnRyeSAqZSwgc3RydWN0IG5ldCAqbmV0LAorICAgY29uc3Qgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLAogICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICpjbnQsCiAgICBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICpjbF9zLCB1bnNpZ25lZCBpbnQgdWRjX2NudCkKIHsKQEAgLTY3MSw2ICs3MDAsNyBAQAogCX0KIAlpID0gMDsKIAorCW10cGFyLm5ldAk9IHRncGFyLm5ldCAgICAgICA9IG5ldDsKIAltdHBhci50YWJsZSAgICAgPSB0Z3Bhci50YWJsZSAgICAgPSBuYW1lOwogCW10cGFyLmVudHJ5aW5mbyA9IHRncGFyLmVudHJ5aW5mbyA9IGU7CiAJbXRwYXIuaG9va19tYXNrID0gdGdwYXIuaG9va19tYXNrID0gaG9va21hc2s7CkBAIC03MjYsOSArNzU2LDkgQEAKIAkoKmNudCkrKzsKIAlyZXR1cm4gMDsKIGNsZWFudXBfd2F0Y2hlcnM6Ci0JRUJUX1dBVENIRVJfSVRFUkFURShlLCBlYnRfY2xlYW51cF93YXRjaGVyLCAmaik7CisJRUJUX1dBVENIRVJfSVRFUkFURShlLCBlYnRfY2xlYW51cF93YXRjaGVyLCBuZXQsICZqKTsKIGNsZWFudXBfbWF0Y2hlczoKLQlFQlRfTUFUQ0hfSVRFUkFURShlLCBlYnRfY2xlYW51cF9tYXRjaCwgJmkpOworCUVCVF9NQVRDSF9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX21hdGNoLCBuZXQsICZpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03MzcsMTIgKzc2NywxMiBAQAogICogdGhlIGhvb2sgbWFzayBmb3IgdWRjIHRlbGxzIHVzIGZyb20gd2hpY2ggYmFzZSBjaGFpbnMgdGhlIHVkYyBjYW4gYmUKICAqIGFjY2Vzc2VkLiBUaGlzIG1hc2sgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGNoZWNrKCkgZnVuY3Rpb25zIG9mIHRoZSBleHRlbnNpb25zCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfY2hhaW5sb29wcyhzdHJ1Y3QgZWJ0X2VudHJpZXMgKmNoYWluLCBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICpjbF9zLAorc3RhdGljIGludCBjaGVja19jaGFpbmxvb3BzKGNvbnN0IHN0cnVjdCBlYnRfZW50cmllcyAqY2hhaW4sIHN0cnVjdCBlYnRfY2xfc3RhY2sgKmNsX3MsCiAgICB1bnNpZ25lZCBpbnQgdWRjX2NudCwgdW5zaWduZWQgaW50IGhvb2tuciwgY2hhciAqYmFzZSkKIHsKIAlpbnQgaSwgY2hhaW5fbnIgPSAtMSwgcG9zID0gMCwgbmVudHJpZXMgPSBjaGFpbi0+bmVudHJpZXMsIHZlcmRpY3Q7Ci0Jc3RydWN0IGVidF9lbnRyeSAqZSA9IChzdHJ1Y3QgZWJ0X2VudHJ5ICopY2hhaW4tPmRhdGE7Ci0Jc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeSAqZSA9IChzdHJ1Y3QgZWJ0X2VudHJ5ICopY2hhaW4tPmRhdGE7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CiAKIAl3aGlsZSAocG9zIDwgbmVudHJpZXMgfHwgY2hhaW5fbnIgIT0gLTEpIHsKIAkJLyogZW5kIG9mIHVkYywgZ28gYmFjayBvbmUgJ3JlY3Vyc2lvbicgc3RlcCAqLwpAQCAtODA4LDcgKzgzOCw4IEBACiB9CiAKIC8qIGRvIHRoZSBwYXJzaW5nIG9mIHRoZSB0YWJsZS9jaGFpbnMvZW50cmllcy9tYXRjaGVzL3dhdGNoZXJzL3RhcmdldHMsIGhlaCAqLwotc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoY2hhciAqbmFtZSwgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQorc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQogewogCXVuc2lnbmVkIGludCBpLCBqLCBrLCB1ZGNfY250OwogCWludCByZXQ7CkBAIC05MTcsMTcgKzk0OCwxNyBAQAogCS8qIHVzZWQgdG8ga25vdyB3aGF0IHdlIG5lZWQgdG8gY2xlYW4gdXAgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgKi8KIAlpID0gMDsKIAlyZXQgPSBFQlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5lbnRyaWVzX3NpemUsCi0JICAgZWJ0X2NoZWNrX2VudHJ5LCBuZXdpbmZvLCBuYW1lLCAmaSwgY2xfcywgdWRjX2NudCk7CisJICAgZWJ0X2NoZWNrX2VudHJ5LCBuZXQsIG5ld2luZm8sIG5hbWUsICZpLCBjbF9zLCB1ZGNfY250KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCQkgICBlYnRfY2xlYW51cF9lbnRyeSwgJmkpOworCQkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgJmkpOwogCX0KIAl2ZnJlZShjbF9zKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBjYWxsZWQgdW5kZXIgd3JpdGVfbG9jayAqLwotc3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsCitzdGF0aWMgdm9pZCBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IGVidF9jb3VudGVyICpvbGRjb3VudGVycywKICAgIHN0cnVjdCBlYnRfY291bnRlciAqY291bnRlcnMsIHVuc2lnbmVkIGludCBuZW50cmllcykKIHsKIAlpbnQgaSwgY3B1OwpAQCAtOTQ5LDE2ICs5ODAsMTE3IEBACiAJfQogfQogCi0vKiByZXBsYWNlIHRoZSB0YWJsZSAqLwotc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAorCQkJICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQogewotCWludCByZXQsIGksIGNvdW50ZXJzaXplOwotCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKLQlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOwotCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisJaW50IHJldCwgaTsKIAlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKmNvdW50ZXJzdG1wID0gTlVMTDsKIAkvKiB1c2VkIHRvIGJlIGFibGUgdG8gdW5sb2NrIGVhcmxpZXIgKi8KIAlzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKnRhYmxlOworCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisKKwkvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrCisJICAgdGhlIGNoZWNrIG9uIHRoZSBzaXplIGlzIGRvbmUgbGF0ZXIsIHdoZW4gd2UgaGF2ZSB0aGUgbG9jayAqLworCWlmIChyZXBsLT5udW1fY291bnRlcnMpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcmVwbC0+bnVtX2NvdW50ZXJzICogc2l6ZW9mKCpjb3VudGVyc3RtcCk7CisJCWNvdW50ZXJzdG1wID0gdm1hbGxvYyhzaXplKTsKKwkJaWYgKCFjb3VudGVyc3RtcCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCW5ld2luZm8tPmNoYWluc3RhY2sgPSBOVUxMOworCXJldCA9IGVidF92ZXJpZnlfcG9pbnRlcnMocmVwbCwgbmV3aW5mbyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZyZWVfY291bnRlcnN0bXA7CisKKwlyZXQgPSB0cmFuc2xhdGVfdGFibGUobmV0LCByZXBsLT5uYW1lLCBuZXdpbmZvKTsKKworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmcmVlX2NvdW50ZXJzdG1wOworCisJdCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIHJlcGwtPm5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOworCWlmICghdCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfaXRlcmF0ZTsKKwl9CisKKwkvKiB0aGUgdGFibGUgZG9lc24ndCBsaWtlIGl0ICovCisJaWYgKHQtPmNoZWNrICYmIChyZXQgPSB0LT5jaGVjayhuZXdpbmZvLCByZXBsLT52YWxpZF9ob29rcykpKQorCQlnb3RvIGZyZWVfdW5sb2NrOworCisJaWYgKHJlcGwtPm51bV9jb3VudGVycyAmJiByZXBsLT5udW1fY291bnRlcnMgIT0gdC0+cHJpdmF0ZS0+bmVudHJpZXMpIHsKKwkJQlVHUFJJTlQoIldyb25nIG5yLiBvZiBjb3VudGVycyByZXF1ZXN0ZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfdW5sb2NrOworCX0KKworCS8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqLworCXRhYmxlID0gdC0+cHJpdmF0ZTsKKwkvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovCisJaWYgKCF0YWJsZS0+bmVudHJpZXMgJiYgbmV3aW5mby0+bmVudHJpZXMgJiYgIXRyeV9tb2R1bGVfZ2V0KHQtPm1lKSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfdW5sb2NrOworCX0gZWxzZSBpZiAodGFibGUtPm5lbnRyaWVzICYmICFuZXdpbmZvLT5uZW50cmllcykKKwkJbW9kdWxlX3B1dCh0LT5tZSk7CisJLyogd2UgbmVlZCBhbiBhdG9taWMgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzICovCisJd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJaWYgKHJlcGwtPm51bV9jb3VudGVycykKKwkJZ2V0X2NvdW50ZXJzKHQtPnByaXZhdGUtPmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKKwkJICAgdC0+cHJpdmF0ZS0+bmVudHJpZXMpOworCisJdC0+cHJpdmF0ZSA9IG5ld2luZm87CisJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CisJLyogc28sIGEgdXNlciBjYW4gY2hhbmdlIHRoZSBjaGFpbnMgd2hpbGUgaGF2aW5nIG1lc3NlZCB1cCBoZXIgY291bnRlcgorCSAgIGFsbG9jYXRpb24uIE9ubHkgcmVhc29uIHdoeSB0aGlzIGlzIGRvbmUgaXMgYmVjYXVzZSB0aGlzIHdheSB0aGUgbG9jaworCSAgIGlzIGhlbGQgb25seSBvbmNlLCB3aGlsZSB0aGlzIGRvZXNuJ3QgYnJpbmcgdGhlIGtlcm5lbCBpbnRvIGEKKwkgICBkYW5nZXJvdXMgc3RhdGUuICovCisJaWYgKHJlcGwtPm51bV9jb3VudGVycyAmJgorCSAgIGNvcHlfdG9fdXNlcihyZXBsLT5jb3VudGVycywgY291bnRlcnN0bXAsCisJICAgcmVwbC0+bnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJfQorCWVsc2UKKwkJcmV0ID0gMDsKKworCS8qIGRlY3JlYXNlIG1vZHVsZSBjb3VudCBhbmQgZnJlZSByZXNvdXJjZXMgKi8KKwlFQlRfRU5UUllfSVRFUkFURSh0YWJsZS0+ZW50cmllcywgdGFibGUtPmVudHJpZXNfc2l6ZSwKKwkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgTlVMTCk7CisKKwl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7CisJaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOworCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7CisJfQorCXZmcmVlKHRhYmxlKTsKKworCXZmcmVlKGNvdW50ZXJzdG1wKTsKKwlyZXR1cm4gcmV0OworCitmcmVlX3VubG9jazoKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CitmcmVlX2l0ZXJhdGU6CisJRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAorCQkJICBlYnRfY2xlYW51cF9lbnRyeSwgbmV0LCBOVUxMKTsKK2ZyZWVfY291bnRlcnN0bXA6CisJdmZyZWUoY291bnRlcnN0bXApOworCS8qIGNhbiBiZSBpbml0aWFsaXplZCBpbiB0cmFuc2xhdGVfdGFibGUoKSAqLworCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CisJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiByZXBsYWNlIHRoZSB0YWJsZSAqLworc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisJCSAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IHJldCwgY291bnRlcnNpemU7CisJc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvOworCXN0cnVjdCBlYnRfcmVwbGFjZSB0bXA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtOTczLDggKzExMDUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogb3ZlcmZsb3cgY2hlY2sgKi8KLQlpZiAodG1wLm5lbnRyaWVzID49ICgoSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pKSAvIE5SX0NQVVMgLQotCQkJU01QX0NBQ0hFX0JZVEVTKSAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCWlmICh0bXAubmVudHJpZXMgPj0gKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC8KKwkJCU5SX0NQVVMgLSBTTVBfQ0FDSEVfQllURVMpIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICh0bXAubnVtX2NvdW50ZXJzID49IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05OTksMTAzICsxMTMxLDkgQEAKIAkJZ290byBmcmVlX2VudHJpZXM7CiAJfQogCi0JLyogdGhlIHVzZXIgd2FudHMgY291bnRlcnMgYmFjawotCSAgIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2sgKi8KLQlpZiAodG1wLm51bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IHZtYWxsb2ModG1wLm51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnN0bXApKTsKLQkJaWYgKCFjb3VudGVyc3RtcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZnJlZV9lbnRyaWVzOwotCQl9Ci0JfQotCWVsc2UKLQkJY291bnRlcnN0bXAgPSBOVUxMOwotCi0JLyogdGhpcyBjYW4gZ2V0IGluaXRpYWxpemVkIGJ5IHRyYW5zbGF0ZV90YWJsZSgpICovCi0JbmV3aW5mby0+Y2hhaW5zdGFjayA9IE5VTEw7Ci0JcmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycygmdG1wLCBuZXdpbmZvKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKLQotCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0bXAubmFtZSwgbmV3aW5mbyk7Ci0KLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKLQotCXQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCB0bXAubmFtZSwgJnJldCwgJmVidF9tdXRleCk7Ci0JaWYgKCF0KSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZnJlZV9pdGVyYXRlOwotCX0KLQotCS8qIHRoZSB0YWJsZSBkb2Vzbid0IGxpa2UgaXQgKi8KLQlpZiAodC0+Y2hlY2sgJiYgKHJldCA9IHQtPmNoZWNrKG5ld2luZm8sIHRtcC52YWxpZF9ob29rcykpKQotCQlnb3RvIGZyZWVfdW5sb2NrOwotCi0JaWYgKHRtcC5udW1fY291bnRlcnMgJiYgdG1wLm51bV9jb3VudGVycyAhPSB0LT5wcml2YXRlLT5uZW50cmllcykgewotCQlCVUdQUklOVCgiV3JvbmcgbnIuIG9mIGNvdW50ZXJzIHJlcXVlc3RlZFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJlZV91bmxvY2s7Ci0JfQotCi0JLyogd2UgaGF2ZSB0aGUgbXV0ZXggbG9jaywgc28gbm8gZGFuZ2VyIGluIHJlYWRpbmcgdGhpcyBwb2ludGVyICovCi0JdGFibGUgPSB0LT5wcml2YXRlOwotCS8qIG1ha2Ugc3VyZSB0aGUgdGFibGUgY2FuIG9ubHkgYmUgcm1tb2QnZWQgaWYgaXQgY29udGFpbnMgbm8gcnVsZXMgKi8KLQlpZiAoIXRhYmxlLT5uZW50cmllcyAmJiBuZXdpbmZvLT5uZW50cmllcyAmJiAhdHJ5X21vZHVsZV9nZXQodC0+bWUpKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZnJlZV91bmxvY2s7Ci0JfSBlbHNlIGlmICh0YWJsZS0+bmVudHJpZXMgJiYgIW5ld2luZm8tPm5lbnRyaWVzKQotCQltb2R1bGVfcHV0KHQtPm1lKTsKLQkvKiB3ZSBuZWVkIGFuIGF0b21pYyBzbmFwc2hvdCBvZiB0aGUgY291bnRlcnMgKi8KLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKLQlpZiAodG1wLm51bV9jb3VudGVycykKLQkJZ2V0X2NvdW50ZXJzKHQtPnByaXZhdGUtPmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKLQkJICAgdC0+cHJpdmF0ZS0+bmVudHJpZXMpOwotCi0JdC0+cHJpdmF0ZSA9IG5ld2luZm87Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKLQltdXRleF91bmxvY2soJmVidF9tdXRleCk7Ci0JLyogc28sIGEgdXNlciBjYW4gY2hhbmdlIHRoZSBjaGFpbnMgd2hpbGUgaGF2aW5nIG1lc3NlZCB1cCBoZXIgY291bnRlcgotCSAgIGFsbG9jYXRpb24uIE9ubHkgcmVhc29uIHdoeSB0aGlzIGlzIGRvbmUgaXMgYmVjYXVzZSB0aGlzIHdheSB0aGUgbG9jawotCSAgIGlzIGhlbGQgb25seSBvbmNlLCB3aGlsZSB0aGlzIGRvZXNuJ3QgYnJpbmcgdGhlIGtlcm5lbCBpbnRvIGEKLQkgICBkYW5nZXJvdXMgc3RhdGUuICovCi0JaWYgKHRtcC5udW1fY291bnRlcnMgJiYKLQkgICBjb3B5X3RvX3VzZXIodG1wLmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKLQkgICB0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSB7Ci0JCUJVR1BSSU5UKCJDb3VsZG4ndCBjb3B5IGNvdW50ZXJzIHRvIHVzZXJzcGFjZVxuIik7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfQotCWVsc2UKLQkJcmV0ID0gMDsKLQotCS8qIGRlY3JlYXNlIG1vZHVsZSBjb3VudCBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQlFQlRfRU5UUllfSVRFUkFURSh0YWJsZS0+ZW50cmllcywgdGFibGUtPmVudHJpZXNfc2l6ZSwKLQkgICBlYnRfY2xlYW51cF9lbnRyeSwgTlVMTCk7Ci0KLQl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7Ci0JaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQotCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOwotCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7Ci0JfQotCXZmcmVlKHRhYmxlKTsKLQotCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQlyZXR1cm4gcmV0OwotCi1mcmVlX3VubG9jazoKLQltdXRleF91bmxvY2soJmVidF9tdXRleCk7Ci1mcmVlX2l0ZXJhdGU6Ci0JRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCSAgIGVidF9jbGVhbnVwX2VudHJ5LCBOVUxMKTsKLWZyZWVfY291bnRlcnN0bXA6Ci0JdmZyZWUoY291bnRlcnN0bXApOwotCS8qIGNhbiBiZSBpbml0aWFsaXplZCBpbiB0cmFuc2xhdGVfdGFibGUoKSAqLwotCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQotCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7Ci0JCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwotCX0KKwlyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsICZ0bXAsIG5ld2luZm8pOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHJldDsKIGZyZWVfZW50cmllczoKIAl2ZnJlZShuZXdpbmZvLT5lbnRyaWVzKTsKIGZyZWVfbmV3aW5mbzoKQEAgLTExNTQsNyArMTE5Miw3IEBACiAJCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldID0gcCArCiAJCQkJKChjaGFyICopcmVwbC0+aG9va19lbnRyeVtpXSAtIHJlcGwtPmVudHJpZXMpOwogCX0KLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUocmVwbC0+bmFtZSwgbmV3aW5mbyk7CisJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKG5ldCwgcmVwbC0+bmFtZSwgbmV3aW5mbyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCUJVR1BSSU5UKCJUcmFuc2xhdGVfdGFibGUgZmFpbGVkXG4iKTsKIAkJZ290byBmcmVlX2NoYWluc3RhY2s7CkBAIC0xMjA0LDcgKzEyNDIsNyBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpCit2b2lkIGVidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpCiB7CiAJaW50IGk7CiAKQEAgLTEyMTYsNyArMTI1NCw3IEBACiAJbGlzdF9kZWwoJnRhYmxlLT5saXN0KTsKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJRUJUX0VOVFJZX0lURVJBVEUodGFibGUtPnByaXZhdGUtPmVudHJpZXMsIHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzX3NpemUsCi0JCQkgIGVidF9jbGVhbnVwX2VudHJ5LCBOVUxMKTsKKwkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgTlVMTCk7CiAJaWYgKHRhYmxlLT5wcml2YXRlLT5uZW50cmllcykKIAkJbW9kdWxlX3B1dCh0YWJsZS0+bWUpOwogCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzKTsKQEAgLTEyMzAsMzkgKzEyNjgsMzMgQEAKIH0KIAogLyogdXNlcnNwYWNlIGp1c3Qgc3VwcGxpZWQgdXMgd2l0aCBjb3VudGVycyAqLwotc3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgZG9fdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgZWJ0X2NvdW50ZXIgX191c2VyICpjb3VudGVycywKKwkJCQl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLAorCQkJCWNvbnN0IHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCBpLCByZXQ7CiAJc3RydWN0IGVidF9jb3VudGVyICp0bXA7Ci0Jc3RydWN0IGVidF9yZXBsYWNlIGhscDsKIAlzdHJ1Y3QgZWJ0X3RhYmxlICp0OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZobHAsIHVzZXIsIHNpemVvZihobHApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAobGVuICE9IHNpemVvZihobHApICsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaGxwLm51bV9jb3VudGVycyA9PSAwKQorCWlmIChudW1fY291bnRlcnMgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoISh0bXAgPSB2bWFsbG9jKGhscC5udW1fY291bnRlcnMgKiBzaXplb2YoKnRtcCkpKSkgewotCQlNRU1QUklOVCgiVXBkYXRlX2NvdW50ZXJzICYmIG5vbWVtb3J5XG4iKTsKKwl0bXAgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZigqdG1wKSk7CisJaWYgKCF0bXApCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCXQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBobHAubmFtZSwgJnJldCwgJmVidF9tdXRleCk7CisJdCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIG5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOwogCWlmICghdCkKIAkJZ290byBmcmVlX3RtcDsKIAotCWlmIChobHAubnVtX2NvdW50ZXJzICE9IHQtPnByaXZhdGUtPm5lbnRyaWVzKSB7CisJaWYgKG51bV9jb3VudGVycyAhPSB0LT5wcml2YXRlLT5uZW50cmllcykgewogCQlCVUdQUklOVCgiV3JvbmcgbnIgb2YgY291bnRlcnNcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKHRtcCwgaGxwLmNvdW50ZXJzLAotCSAgIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkgKSB7Ci0JCUJVR1BSSU5UKCJVcGRhdGFfY291bnRlcnMgJiYgIWNmdVxuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgY291bnRlcnMsIG51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnMpKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CkBAIC0xMjcxLDcgKzEzMDMsNyBAQAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCiAJLyogd2UgYWRkIHRvIHRoZSBjb3VudGVycyBvZiB0aGUgZmlyc3QgY3B1ICovCi0JZm9yIChpID0gMDsgaSA8IGhscC5udW1fY291bnRlcnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7IGkrKykgewogCQl0LT5wcml2YXRlLT5jb3VudGVyc1tpXS5wY250ICs9IHRtcFtpXS5wY250OwogCQl0LT5wcml2YXRlLT5jb3VudGVyc1tpXS5iY250ICs9IHRtcFtpXS5iY250OwogCX0KQEAgLTEyODUsOCArMTMxNywyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGVidF9tYWtlX21hdGNobmFtZShzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLAotICAgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkIF9fdXNlciAqdXNlciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBlYnRfcmVwbGFjZSBobHA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmhscCwgdXNlciwgc2l6ZW9mKGhscCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsZW4gIT0gc2l6ZW9mKGhscCkgKyBobHAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsCisJCQkJaGxwLm51bV9jb3VudGVycywgdXNlciwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2VfbWF0Y2huYW1lKGNvbnN0IHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sCisgICAgY29uc3QgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQogewogCWNoYXIgX191c2VyICpobHAgPSB1YmFzZSArICgoY2hhciAqKW0gLSBiYXNlKTsKIAlpZiAoY29weV90b191c2VyKGhscCwgbS0+dS5tYXRjaC0+bmFtZSwgRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU4pKQpAQCAtMTI5NCw4ICsxMzQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2Vfd2F0Y2hlcm5hbWUoc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LAotICAgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2Vfd2F0Y2hlcm5hbWUoY29uc3Qgc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LAorICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKIAljaGFyIF9fdXNlciAqaGxwID0gdWJhc2UgKyAoKGNoYXIgKil3IC0gYmFzZSk7CiAJaWYgKGNvcHlfdG9fdXNlcihobHAgLCB3LT51LndhdGNoZXItPm5hbWUsIEVCVF9GVU5DVElPTl9NQVhOQU1FTEVOKSkKQEAgLTEzMDMsMTEgKzEzNTAsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2VfbmFtZXMoc3RydWN0IGVidF9lbnRyeSAqZSwgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGlubGluZSBpbnQKK2VidF9tYWtlX25hbWVzKHN0cnVjdCBlYnRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKIAlpbnQgcmV0OwogCWNoYXIgX191c2VyICpobHA7Ci0Jc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CiAKIAlpZiAoZS0+Yml0bWFzayA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTEzMjYsMTMgKzEzNzQsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjb3B5X2NvdW50ZXJzX3RvX3VzZXIoc3RydWN0IGVidF90YWJsZSAqdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsCisJCQkJICB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywKKwkJCQkgIHVuc2lnbmVkIGludCBuZW50cmllcykKK3sKKwlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKmNvdW50ZXJzdG1wOworCWludCByZXQgPSAwOworCisJLyogdXNlcnNwYWNlIG1pZ2h0IG5vdCBuZWVkIHRoZSBjb3VudGVycyAqLworCWlmIChudW1fY291bnRlcnMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobnVtX2NvdW50ZXJzICE9IG5lbnRyaWVzKSB7CisJCUJVR1BSSU5UKCJOdW1fY291bnRlcnMgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb3VudGVyc3RtcCA9IHZtYWxsb2MobmVudHJpZXMgKiBzaXplb2YoKmNvdW50ZXJzdG1wKSk7CisJaWYgKCFjb3VudGVyc3RtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwlnZXRfY291bnRlcnMob2xkY291bnRlcnMsIGNvdW50ZXJzdG1wLCBuZW50cmllcyk7CisJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlciwgY291bnRlcnN0bXAsCisJICAgbmVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkpCisJCXJldCA9IC1FRkFVTFQ7CisJdmZyZWUoY291bnRlcnN0bXApOworCXJldHVybiByZXQ7Cit9CisKIC8qIGNhbGxlZCB3aXRoIGVidF9tdXRleCBsb2NrZWQgKi8KIHN0YXRpYyBpbnQgY29weV9ldmVyeXRoaW5nX3RvX3VzZXIoc3RydWN0IGVidF90YWJsZSAqdCwgdm9pZCBfX3VzZXIgKnVzZXIsCi0gICBpbnQgKmxlbiwgaW50IGNtZCkKKyAgICBjb25zdCBpbnQgKmxlbiwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOwotCXN0cnVjdCBlYnRfY291bnRlciAqY291bnRlcnN0bXAsICpvbGRjb3VudGVyczsKKwljb25zdCBzdHJ1Y3QgZWJ0X2NvdW50ZXIgKm9sZGNvdW50ZXJzOwogCXVuc2lnbmVkIGludCBlbnRyaWVzX3NpemUsIG5lbnRyaWVzOworCWludCByZXQ7CiAJY2hhciAqZW50cmllczsKIAogCWlmIChjbWQgPT0gRUJUX1NPX0dFVF9FTlRSSUVTKSB7CkBAIC0xMzQ3LDE2ICsxNDI4LDEyIEBACiAJCW9sZGNvdW50ZXJzID0gdC0+dGFibGUtPmNvdW50ZXJzOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkpIHsKLQkJQlVHUFJJTlQoIkNmdSBkaWRuJ3Qgd29ya1xuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJaWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBlYnRfcmVwbGFjZSkgKyBlbnRyaWVzX3NpemUgKwotCSAgICh0bXAubnVtX2NvdW50ZXJzPyBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpOiAwKSkgewotCQlCVUdQUklOVCgiV3Jvbmcgc2l6ZVxuIik7CisJICAgKHRtcC5udW1fY291bnRlcnM/IG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcik6IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpZiAodG1wLm5lbnRyaWVzICE9IG5lbnRyaWVzKSB7CiAJCUJVR1BSSU5UKCJOZW50cmllcyB3cm9uZ1xuIik7CkBAIC0xMzY4LDI5ICsxNDQ1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHVzZXJzcGFjZSBtaWdodCBub3QgbmVlZCB0aGUgY291bnRlcnMgKi8KLQlpZiAodG1wLm51bV9jb3VudGVycykgewotCQlpZiAodG1wLm51bV9jb3VudGVycyAhPSBuZW50cmllcykgewotCQkJQlVHUFJJTlQoIk51bV9jb3VudGVycyB3cm9uZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljb3VudGVyc3RtcCA9IHZtYWxsb2MobmVudHJpZXMgKiBzaXplb2YoKmNvdW50ZXJzdG1wKSk7Ci0JCWlmICghY291bnRlcnN0bXApIHsKLQkJCU1FTVBSSU5UKCJDb3VsZG4ndCBjb3B5IGNvdW50ZXJzLCBvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwotCQlnZXRfY291bnRlcnMob2xkY291bnRlcnMsIGNvdW50ZXJzdG1wLCBuZW50cmllcyk7Ci0JCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzdG1wLAotCQkgICBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKSkgewotCQkJQlVHUFJJTlQoIkNvdWxkbid0IGNvcHkgY291bnRlcnMgdG8gdXNlcnNwYWNlXG4iKTsKLQkJCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQl9CisJcmV0ID0gY29weV9jb3VudGVyc190b191c2VyKHQsIG9sZGNvdW50ZXJzLCB0bXAuY291bnRlcnMsCisJCQkJCXRtcC5udW1fY291bnRlcnMsIG5lbnRyaWVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGNvcHlfdG9fdXNlcih0bXAuZW50cmllcywgZW50cmllcywgZW50cmllc19zaXplKSkgewogCQlCVUdQUklOVCgiQ291bGRuJ3QgY29weSBlbnRyaWVzIHRvIHVzZXJzcGFjZVxuIik7CkBAIC0xNDE4LDcgKzE0NzYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwotICB9CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NzgsMTUgKzE1MzYsODkyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKKy8qIDMyIGJpdC11c2Vyc3BhY2UgY29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucy4gKi8KK3N0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgeworCWNoYXIgbmFtZVtFQlRfVEFCTEVfTUFYTkFNRUxFTl07CisJY29tcGF0X3VpbnRfdCB2YWxpZF9ob29rczsKKwljb21wYXRfdWludF90IG5lbnRyaWVzOworCWNvbXBhdF91aW50X3QgZW50cmllc19zaXplOworCS8qIHN0YXJ0IG9mIHRoZSBjaGFpbnMgKi8KKwljb21wYXRfdXB0cl90IGhvb2tfZW50cnlbTkZfQlJfTlVNSE9PS1NdOworCS8qIG5yIG9mIGNvdW50ZXJzIHVzZXJzcGFjZSBleHBlY3RzIGJhY2sgKi8KKwljb21wYXRfdWludF90IG51bV9jb3VudGVyczsKKwkvKiB3aGVyZSB0aGUga2VybmVsIHdpbGwgcHV0IHRoZSBvbGQgY291bnRlcnMuICovCisJY29tcGF0X3VwdHJfdCBjb3VudGVyczsKKwljb21wYXRfdXB0cl90IGVudHJpZXM7Cit9OworCisvKiBzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoLCBfdGFyZ2V0IGFuZCBfd2F0Y2hlciBoYXZlIHNhbWUgbGF5b3V0ICovCitzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgeworCXVuaW9uIHsKKwkJY2hhciBuYW1lW0VCVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwkJY29tcGF0X3VwdHJfdCBwdHI7CisJfSB1OworCWNvbXBhdF91aW50X3QgbWF0Y2hfc2l6ZTsKKwljb21wYXRfdWludF90IGRhdGFbMF07Cit9OworCisvKiBhY2NvdW50IGZvciBwb3NzaWJsZSBwYWRkaW5nIGJldHdlZW4gbWF0Y2hfc2l6ZSBhbmQgLT5kYXRhICovCitzdGF0aWMgaW50IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSh2b2lkKQoreworCUJVSUxEX0JVR19PTihYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9lbnRyeV9tYXRjaCkpIDwKKwkJCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkpOworCXJldHVybiAoaW50KSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9lbnRyeV9tYXRjaCkpIC0KKwkJCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSk7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2NvbXBhdF9tYXRjaF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdXNlcmxlbikKK3sKKwkvKgorCSAqIGVidF9hbW9uZyBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGUga2VybmVsIC5tYXRjaHNpemUgaXMKKwkgKiBzZXQgdG8gLTEgYXQgcmVnaXN0cmF0aW9uIHRpbWU7IGF0IHJ1bnRpbWUgYW4gRUJUX0FMSUdOKCllZAorCSAqIHZhbHVlIGlzIGV4cGVjdGVkLgorCSAqIEV4YW1wbGU6IHVzZXJzcGFjZSBzZW5kcyA0NTAwLCBlYnRfYW1vbmcuYyB3YW50cyA0NTA0LgorCSAqLworCWlmICh1bmxpa2VseShtYXRjaC0+bWF0Y2hzaXplID09IC0xKSkKKwkJcmV0dXJuIFhUX0FMSUdOKHVzZXJsZW4pIC0gQ09NUEFUX1hUX0FMSUdOKHVzZXJsZW4pOworCXJldHVybiB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KG1hdGNoKTsKK30KKworc3RhdGljIGludCBjb21wYXRfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLCB2b2lkIF9fdXNlciAqKmRzdHB0ciwKKwkJCQl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCA9IG0tPnUubWF0Y2g7CisJc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0IF9fdXNlciAqY20gPSAqZHN0cHRyOworCWludCBvZmYgPSBlYnRfY29tcGF0X21hdGNoX29mZnNldChtYXRjaCwgbS0+bWF0Y2hfc2l6ZSk7CisJY29tcGF0X3VpbnRfdCBtc2l6ZSA9IG0tPm1hdGNoX3NpemUgLSBvZmY7CisKKwlCVUdfT04ob2ZmID49IG0tPm1hdGNoX3NpemUpOworCisJaWYgKGNvcHlfdG9fdXNlcihjbS0+dS5uYW1lLCBtYXRjaC0+bmFtZSwKKwkgICAgc3RybGVuKG1hdGNoLT5uYW1lKSArIDEpIHx8IHB1dF91c2VyKG1zaXplLCAmY20tPm1hdGNoX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChtYXRjaC0+Y29tcGF0X3RvX3VzZXIpIHsKKwkJaWYgKG1hdGNoLT5jb21wYXRfdG9fdXNlcihjbS0+ZGF0YSwgbS0+ZGF0YSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKGNvcHlfdG9fdXNlcihjbS0+ZGF0YSwgbS0+ZGF0YSwgbXNpemUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKSArIG9mZjsKKwkqZHN0cHRyID0gY20tPmRhdGE7CisJKmRzdHB0ciArPSBtc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfdGFyZ2V0X3RvX3VzZXIoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQsCisJCQkJIHZvaWQgX191c2VyICoqZHN0cHRyLAorCQkJCSB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0ID0gdC0+dS50YXJnZXQ7CisJc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0IF9fdXNlciAqY20gPSAqZHN0cHRyOworCWludCBvZmYgPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh0YXJnZXQpOworCWNvbXBhdF91aW50X3QgdHNpemUgPSB0LT50YXJnZXRfc2l6ZSAtIG9mZjsKKworCUJVR19PTihvZmYgPj0gdC0+dGFyZ2V0X3NpemUpOworCisJaWYgKGNvcHlfdG9fdXNlcihjbS0+dS5uYW1lLCB0YXJnZXQtPm5hbWUsCisJICAgIHN0cmxlbih0YXJnZXQtPm5hbWUpICsgMSkgfHwgcHV0X3VzZXIodHNpemUsICZjbS0+bWF0Y2hfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHRhcmdldC0+Y29tcGF0X3RvX3VzZXIpIHsKKwkJaWYgKHRhcmdldC0+Y29tcGF0X3RvX3VzZXIoY20tPmRhdGEsIHQtPmRhdGEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIGlmIChjb3B5X3RvX3VzZXIoY20tPmRhdGEsIHQtPmRhdGEsIHRzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKSArIG9mZjsKKwkqZHN0cHRyID0gY20tPmRhdGE7CisJKmRzdHB0ciArPSB0c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfd2F0Y2hlcl90b191c2VyKHN0cnVjdCBlYnRfZW50cnlfd2F0Y2hlciAqdywKKwkJCQkgIHZvaWQgX191c2VyICoqZHN0cHRyLAorCQkJCSAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXJldHVybiBjb21wYXRfdGFyZ2V0X3RvX3VzZXIoKHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICopdywKKwkJCQkJCQlkc3RwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGVidF9lbnRyeSAqZSwgdm9pZCBfX3VzZXIgKipkc3RwdHIsCisJCQkJdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OworCXN0cnVjdCBlYnRfZW50cnkgX191c2VyICpjZTsKKwl1MzIgd2F0Y2hlcnNfb2Zmc2V0LCB0YXJnZXRfb2Zmc2V0LCBuZXh0X29mZnNldDsKKwljb21wYXRfdWludF90IG9yaWdzaXplOworCWludCByZXQ7CisKKwlpZiAoZS0+Yml0bWFzayA9PSAwKSB7CisJCWlmICgqc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb3B5X3RvX3VzZXIoKmRzdHB0ciwgZSwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyaWVzKTsKKwkJKnNpemUgLT0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcyk7CisJCXJldHVybiAwOworCX0KKworCWlmICgqc2l6ZSA8IHNpemVvZigqY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNlID0gKHN0cnVjdCBlYnRfZW50cnkgX191c2VyICopKmRzdHB0cjsKKwlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2YoKmNlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJb3JpZ3NpemUgPSAqc2l6ZTsKKwkqZHN0cHRyICs9IHNpemVvZigqY2UpOworCisJcmV0ID0gRUJUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X21hdGNoX3RvX3VzZXIsIGRzdHB0ciwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl3YXRjaGVyc19vZmZzZXQgPSBlLT53YXRjaGVyc19vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CisKKwlyZXQgPSBFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGNvbXBhdF93YXRjaGVyX3RvX3VzZXIsIGRzdHB0ciwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKworCXQgPSAoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKikgKChjaGFyICopIGUgKyBlLT50YXJnZXRfb2Zmc2V0KTsKKworCXJldCA9IGNvbXBhdF90YXJnZXRfdG9fdXNlcih0LCBkc3RwdHIsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbmV4dF9vZmZzZXQgPSBlLT5uZXh0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKworCWlmIChwdXRfdXNlcih3YXRjaGVyc19vZmZzZXQsICZjZS0+d2F0Y2hlcnNfb2Zmc2V0KSB8fAorCSAgICBwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpIHx8CisJICAgIHB1dF91c2VyKG5leHRfb2Zmc2V0LCAmY2UtPm5leHRfb2Zmc2V0KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBzaXplb2YoKmNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfY2FsY19tYXRjaChzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLCBpbnQgKm9mZikKK3sKKwkqb2ZmICs9IGVidF9jb21wYXRfbWF0Y2hfb2Zmc2V0KG0tPnUubWF0Y2gsIG0tPm1hdGNoX3NpemUpOworCSpvZmYgKz0gZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NhbGNfd2F0Y2hlcihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgKncsIGludCAqb2ZmKQoreworCSpvZmYgKz0geHRfY29tcGF0X3RhcmdldF9vZmZzZXQody0+dS53YXRjaGVyKTsKKwkqb2ZmICs9IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqaW5mbywKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwKKwkJCSAgICAgc3RydWN0IGNvbXBhdF9lYnRfcmVwbGFjZSAqbmV3aW5mbykKK3sKKwljb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqdDsKKwl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OworCWludCBvZmYsIHJldCwgaTsKKworCWlmIChlLT5iaXRtYXNrID09IDApCisJCXJldHVybiAwOworCisJb2ZmID0gMDsKKwllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSBiYXNlOworCisJRUJUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfbWF0Y2gsICZvZmYpOworCUVCVF9XQVRDSEVSX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfd2F0Y2hlciwgJm9mZik7CisKKwl0ID0gKGNvbnN0IHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICopICgoY2hhciAqKSBlICsgZS0+dGFyZ2V0X29mZnNldCk7CisKKwlvZmYgKz0geHRfY29tcGF0X3RhcmdldF9vZmZzZXQodC0+dS50YXJnZXQpOworCW9mZiArPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKTsKKworCW5ld2luZm8tPmVudHJpZXNfc2l6ZSAtPSBvZmY7CisKKwlyZXQgPSB4dF9jb21wYXRfYWRkX29mZnNldChORlBST1RPX0JSSURHRSwgZW50cnlfb2Zmc2V0LCBvZmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgeworCQljb25zdCB2b2lkICpob29rcHRyID0gaW5mby0+aG9va19lbnRyeVtpXTsKKwkJaWYgKGluZm8tPmhvb2tfZW50cnlbaV0gJiYKKwkJICAgIChlIDwgKHN0cnVjdCBlYnRfZW50cnkgKikoYmFzZSAtIGhvb2twdHIpKSkgeworCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSAtPSBvZmY7CisJCQlwcl9kZWJ1ZygiMHglMDhYIC0+IDB4JTA4WFxuIiwKKwkJCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSArIG9mZiwKKwkJCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGNvbXBhdF9lYnRfcmVwbGFjZSAqbmV3aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGluZm8tPmVudHJpZXNfc2l6ZTsKKwljb25zdCB2b2lkICplbnRyaWVzID0gaW5mby0+ZW50cmllczsKKworCW5ld2luZm8tPmVudHJpZXNfc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gRUJUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgY29tcGF0X2NhbGNfZW50cnksIGluZm8sCisJCQkJCQkJZW50cmllcywgbmV3aW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZXZlcnl0aGluZ190b191c2VyKHN0cnVjdCBlYnRfdGFibGUgKnQsCisJCQkJCSAgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuLCBpbnQgY21kKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgcmVwbCwgdG1wOworCXN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnM7CisJc3RydWN0IGVidF90YWJsZV9pbmZvIHRpbmZvOworCWludCByZXQ7CisJdm9pZCBfX3VzZXIgKnBvczsKKworCW1lbXNldCgmdGluZm8sIDAsIHNpemVvZih0aW5mbykpOworCisJaWYgKGNtZCA9PSBFQlRfU09fR0VUX0VOVFJJRVMpIHsKKwkJdGluZm8uZW50cmllc19zaXplID0gdC0+cHJpdmF0ZS0+ZW50cmllc19zaXplOworCQl0aW5mby5uZW50cmllcyA9IHQtPnByaXZhdGUtPm5lbnRyaWVzOworCQl0aW5mby5lbnRyaWVzID0gdC0+cHJpdmF0ZS0+ZW50cmllczsKKwkJb2xkY291bnRlcnMgPSB0LT5wcml2YXRlLT5jb3VudGVyczsKKwl9IGVsc2UgeworCQl0aW5mby5lbnRyaWVzX3NpemUgPSB0LT50YWJsZS0+ZW50cmllc19zaXplOworCQl0aW5mby5uZW50cmllcyA9IHQtPnRhYmxlLT5uZW50cmllczsKKwkJdGluZm8uZW50cmllcyA9IHQtPnRhYmxlLT5lbnRyaWVzOworCQlvbGRjb3VudGVycyA9IHQtPnRhYmxlLT5jb3VudGVyczsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh0bXAubmVudHJpZXMgIT0gdGluZm8ubmVudHJpZXMgfHwKKwkgICAodG1wLm51bV9jb3VudGVycyAmJiB0bXAubnVtX2NvdW50ZXJzICE9IHRpbmZvLm5lbnRyaWVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoJnJlcGwsICZ0bXAsIHNpemVvZihyZXBsKSk7CisJaWYgKGNtZCA9PSBFQlRfU09fR0VUX0VOVFJJRVMpCisJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHQtPnByaXZhdGUsICZyZXBsKTsKKwllbHNlCisJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKCZ0aW5mbywgJnJlcGwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKmxlbiAhPSBzaXplb2YodG1wKSArIHJlcGwuZW50cmllc19zaXplICsKKwkgICAodG1wLm51bV9jb3VudGVycz8gdGluZm8ubmVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKTogMCkpIHsKKwkJcHJfZXJyKCJ3cm9uZyBzaXplOiAqbGVuICVkLCBlbnRyaWVzX3NpemUgJXUsIHJlcGxzeiAlZFxuIiwKKwkJCQkqbGVuLCB0aW5mby5lbnRyaWVzX3NpemUsIHJlcGwuZW50cmllc19zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdXNlcnNwYWNlIG1pZ2h0IG5vdCBuZWVkIHRoZSBjb3VudGVycyAqLworCXJldCA9IGNvcHlfY291bnRlcnNfdG9fdXNlcih0LCBvbGRjb3VudGVycywgY29tcGF0X3B0cih0bXAuY291bnRlcnMpLAorCQkJCQl0bXAubnVtX2NvdW50ZXJzLCB0aW5mby5uZW50cmllcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBvcyA9IGNvbXBhdF9wdHIodG1wLmVudHJpZXMpOworCXJldHVybiBFQlRfRU5UUllfSVRFUkFURSh0aW5mby5lbnRyaWVzLCB0aW5mby5lbnRyaWVzX3NpemUsCisJCQljb21wYXRfY29weV9lbnRyeV90b191c2VyLCAmcG9zLCAmdG1wLmVudHJpZXNfc2l6ZSk7Cit9CisKK3N0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgeworCWNoYXIgKmJ1Zl9rZXJuX3N0YXJ0OwkvKiBrZXJuZWwgYnVmZmVyIHRvIGNvcHkgKHRyYW5zbGF0ZWQpIGRhdGEgdG8gKi8KKwl1MzIgYnVmX2tlcm5fbGVuOwkvKiB0b3RhbCBzaXplIG9mIGtlcm5lbCBidWZmZXIgKi8KKwl1MzIgYnVmX2tlcm5fb2Zmc2V0OwkvKiBhbW91bnQgb2YgZGF0YSBjb3BpZWQgc28gZmFyICovCisJdTMyIGJ1Zl91c2VyX29mZnNldDsJLyogcmVhZCBwb3NpdGlvbiBpbiB1c2Vyc3BhY2UgYnVmZmVyICovCit9OworCitzdGF0aWMgaW50IGVidF9idWZfY291bnQoc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBzeikKK3sKKwlzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0ICs9IHN6OworCXJldHVybiBzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0ID49IHN6ID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2J1Zl9hZGQoc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc3opCit7CisJaWYgKHN0YXRlLT5idWZfa2Vybl9zdGFydCA9PSBOVUxMKQorCQlnb3RvIGNvdW50X29ubHk7CisKKwlCVUdfT04oc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArIHN6ID4gc3RhdGUtPmJ1Zl9rZXJuX2xlbik7CisKKwltZW1jcHkoc3RhdGUtPmJ1Zl9rZXJuX3N0YXJ0ICsgc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCwgZGF0YSwgc3opOworCisgY291bnRfb25seToKKwlzdGF0ZS0+YnVmX3VzZXJfb2Zmc2V0ICs9IHN6OworCXJldHVybiBlYnRfYnVmX2NvdW50KHN0YXRlLCBzeik7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2J1Zl9hZGRfcGFkKHN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgc3opCit7CisJY2hhciAqYiA9IHN0YXRlLT5idWZfa2Vybl9zdGFydDsKKworCUJVR19PTihiICYmIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQgPiBzdGF0ZS0+YnVmX2tlcm5fbGVuKTsKKworCWlmIChiICE9IE5VTEwgJiYgc3ogPiAwKQorCQltZW1zZXQoYiArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQsIDAsIHN6KTsKKwkvKiBkbyBub3QgYWRqdXN0IC0+YnVmX3VzZXJfb2Zmc2V0IGhlcmUsIHdlIGFkZGVkIGtlcm5lbC1zaWRlIHBhZGRpbmcgKi8KKwlyZXR1cm4gZWJ0X2J1Zl9jb3VudChzdGF0ZSwgc3opOworfQorCitlbnVtIGNvbXBhdF9td3QgeworCUVCVF9DT01QQVRfTUFUQ0gsCisJRUJUX0NPTVBBVF9XQVRDSEVSLAorCUVCVF9DT01QQVRfVEFSR0VULAorfTsKKworc3RhdGljIGludCBjb21wYXRfbXR3X2Zyb21fdXNlcihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKm13dCwKKwkJCQllbnVtIGNvbXBhdF9td3QgY29tcGF0X213dCwKKwkJCQlzdHJ1Y3QgZWJ0X2VudHJpZXNfYnVmX3N0YXRlICpzdGF0ZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlKQoreworCWNoYXIgbmFtZVtFQlRfRlVOQ1RJT05fTUFYTkFNRUxFTl07CisJc3RydWN0IHh0X21hdGNoICptYXRjaDsKKwlzdHJ1Y3QgeHRfdGFyZ2V0ICp3dDsKKwl2b2lkICpkc3QgPSBOVUxMOworCWludCBvZmYsIHBhZCA9IDAsIHJldCA9IDA7CisJdW5zaWduZWQgaW50IHNpemVfa2VybiwgZW50cnlfb2Zmc2V0LCBtYXRjaF9zaXplID0gbXd0LT5tYXRjaF9zaXplOworCisJc3RybGNweShuYW1lLCBtd3QtPnUubmFtZSwgc2l6ZW9mKG5hbWUpKTsKKworCWlmIChzdGF0ZS0+YnVmX2tlcm5fc3RhcnQpCisJCWRzdCA9IHN0YXRlLT5idWZfa2Vybl9zdGFydCArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQ7CisKKwllbnRyeV9vZmZzZXQgPSAodW5zaWduZWQgY2hhciAqKSBtd3QgLSBiYXNlOworCXN3aXRjaCAoY29tcGF0X213dCkgeworCWNhc2UgRUJUX0NPTVBBVF9NQVRDSDoKKwkJbWF0Y2ggPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX21hdGNoKE5GUFJPVE9fQlJJREdFLAorCQkJCQkJbmFtZSwgMCksICJlYnRfJXMiLCBuYW1lKTsKKwkJaWYgKG1hdGNoID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJaWYgKElTX0VSUihtYXRjaCkpCisJCQlyZXR1cm4gUFRSX0VSUihtYXRjaCk7CisKKwkJb2ZmID0gZWJ0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gsIG1hdGNoX3NpemUpOworCQlpZiAoZHN0KSB7CisJCQlpZiAobWF0Y2gtPmNvbXBhdF9mcm9tX3VzZXIpCisJCQkJbWF0Y2gtPmNvbXBhdF9mcm9tX3VzZXIoZHN0LCBtd3QtPmRhdGEpOworCQkJZWxzZQorCQkJCW1lbWNweShkc3QsIG13dC0+ZGF0YSwgbWF0Y2hfc2l6ZSk7CisJCX0KKworCQlzaXplX2tlcm4gPSBtYXRjaC0+bWF0Y2hzaXplOworCQlpZiAodW5saWtlbHkoc2l6ZV9rZXJuID09IC0xKSkKKwkJCXNpemVfa2VybiA9IG1hdGNoX3NpemU7CisJCW1vZHVsZV9wdXQobWF0Y2gtPm1lKTsKKwkJYnJlYWs7CisJY2FzZSBFQlRfQ09NUEFUX1dBVENIRVI6IC8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFQlRfQ09NUEFUX1RBUkdFVDoKKwkJd3QgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChORlBST1RPX0JSSURHRSwKKwkJCQkJCW5hbWUsIDApLCAiZWJ0XyVzIiwgbmFtZSk7CisJCWlmICh3dCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCWlmIChJU19FUlIod3QpKQorCQkJcmV0dXJuIFBUUl9FUlIod3QpOworCQlvZmYgPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh3dCk7CisKKwkJaWYgKGRzdCkgeworCQkJaWYgKHd0LT5jb21wYXRfZnJvbV91c2VyKQorCQkJCXd0LT5jb21wYXRfZnJvbV91c2VyKGRzdCwgbXd0LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoZHN0LCBtd3QtPmRhdGEsIG1hdGNoX3NpemUpOworCQl9CisKKwkJc2l6ZV9rZXJuID0gd3QtPnRhcmdldHNpemU7CisJCW1vZHVsZV9wdXQod3QtPm1lKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkc3QpIHsKKwkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIGVudHJ5X29mZnNldCwKKwkJCQkJb2ZmICsgZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArPSBtYXRjaF9zaXplICsgb2ZmOworCXN0YXRlLT5idWZfdXNlcl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZTsKKwlwYWQgPSBYVF9BTElHTihzaXplX2tlcm4pIC0gc2l6ZV9rZXJuOworCisJaWYgKHBhZCA+IDAgJiYgZHN0KSB7CisJCUJVR19PTihzdGF0ZS0+YnVmX2tlcm5fbGVuIDw9IHBhZCk7CisJCUJVR19PTihzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0IC0gKG1hdGNoX3NpemUgKyBvZmYpICsgc2l6ZV9rZXJuID4gc3RhdGUtPmJ1Zl9rZXJuX2xlbiAtIHBhZCk7CisJCW1lbXNldChkc3QgKyBzaXplX2tlcm4sIDAsIHBhZCk7CisJfQorCXJldHVybiBvZmYgKyBtYXRjaF9zaXplOworfQorCisvKgorICogcmV0dXJuIHNpemUgb2YgYWxsIG1hdGNoZXMsIHdhdGNoZXJzIG9yIHRhcmdldCwgaW5jbHVkaW5nIG5lY2Vzc2FyeQorICogYWxpZ25tZW50IGFuZCBwYWRkaW5nLgorICovCitzdGF0aWMgaW50IGVidF9zaXplX213dChzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKm1hdGNoMzIsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZV9sZWZ0LCBlbnVtIGNvbXBhdF9td3QgdHlwZSwKKwkJCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpiYXNlKQoreworCWludCBncm93dGggPSAwOworCWNoYXIgKmJ1ZjsKKworCWlmIChzaXplX2xlZnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlidWYgPSAoY2hhciAqKSBtYXRjaDMyOworCisJd2hpbGUgKHNpemVfbGVmdCA+PSBzaXplb2YoKm1hdGNoMzIpKSB7CisJCXN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm1hdGNoX2tlcm47CisJCWludCByZXQ7CisKKwkJbWF0Y2hfa2VybiA9IChzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICopIHN0YXRlLT5idWZfa2Vybl9zdGFydDsKKwkJaWYgKG1hdGNoX2tlcm4pIHsKKwkJCWNoYXIgKnRtcDsKKwkJCXRtcCA9IHN0YXRlLT5idWZfa2Vybl9zdGFydCArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQ7CisJCQltYXRjaF9rZXJuID0gKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKikgdG1wOworCQl9CisJCXJldCA9IGVidF9idWZfYWRkKHN0YXRlLCBidWYsIHNpemVvZigqbWF0Y2gzMikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXNpemVfbGVmdCAtPSBzaXplb2YoKm1hdGNoMzIpOworCisJCS8qIGFkZCBwYWRkaW5nIGJlZm9yZSBtYXRjaC0+ZGF0YSAoaWYgYW55KSAqLworCQlyZXQgPSBlYnRfYnVmX2FkZF9wYWQoc3RhdGUsIGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChtYXRjaDMyLT5tYXRjaF9zaXplID4gc2l6ZV9sZWZ0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc2l6ZV9sZWZ0IC09IG1hdGNoMzItPm1hdGNoX3NpemU7CisKKwkJcmV0ID0gY29tcGF0X210d19mcm9tX3VzZXIobWF0Y2gzMiwgdHlwZSwgc3RhdGUsIGJhc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJQlVHX09OKHJldCA8IG1hdGNoMzItPm1hdGNoX3NpemUpOworCQlncm93dGggKz0gcmV0IC0gbWF0Y2gzMi0+bWF0Y2hfc2l6ZTsKKwkJZ3Jvd3RoICs9IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpOworCisJCWJ1ZiArPSBzaXplb2YoKm1hdGNoMzIpOworCQlidWYgKz0gbWF0Y2gzMi0+bWF0Y2hfc2l6ZTsKKworCQlpZiAobWF0Y2hfa2VybikKKwkJCW1hdGNoX2tlcm4tPm1hdGNoX3NpemUgPSByZXQ7CisKKwkJV0FSTl9PTih0eXBlID09IEVCVF9DT01QQVRfVEFSR0VUICYmIHNpemVfbGVmdCk7CisJCW1hdGNoMzIgPSAoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICopIGJ1ZjsKKwl9CisKKwlyZXR1cm4gZ3Jvd3RoOworfQorCisjZGVmaW5lIEVCVF9DT01QQVRfV0FUQ0hFUl9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqX193YXRjaGVyOyAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKF9faSA9IGUtPndhdGNoZXJzX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgX19pIDwgKGUpLT50YXJnZXRfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgKz0gX193YXRjaGVyLT53YXRjaGVyX3NpemUgKyAgICAgICAgICAgICAgIFwKKwkgICAgIHNpemVvZihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QpKSB7ICAgICAgICAgXAorCQlfX3dhdGNoZXIgPSAodm9pZCAqKShlKSArIF9faTsgICAgICAgICAgICAgIFwKKwkJX19yZXQgPSBmbihfX3dhdGNoZXIgLCAjIyBhcmdzKTsgICAgICAgICAgICBcCisJCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoZSktPnRhcmdldF9vZmZzZXQpICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBFQlRfQ09NUEFUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKl9fbWF0Y2g7ICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChfX2kgPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyeSk7ICAgICAgICAgICAgICAgIFwKKwkgICAgIF9faSA8IChlKS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgX19pICs9IF9fbWF0Y2gtPm1hdGNoX3NpemUgKyAgICAgICAgICAgICAgICAgICBcCisJICAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkgeyAgICAgICAgIFwKKwkJX19tYXRjaCA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19tYXRjaCAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX2kgIT0gKGUpLT53YXRjaGVyc19vZmZzZXQpICAgICAgICAgICAgXAorCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKy8qIGNhbGxlZCBmb3IgYWxsIGVidF9lbnRyeSBzdHJ1Y3R1cmVzLiAqLworc3RhdGljIGludCBzaXplX2VudHJ5X213dChzdHJ1Y3QgZWJ0X2VudHJ5ICplbnRyeSwgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbCwKKwkJCSAgc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGksIGosIHN0YXJ0b2ZmLCBuZXdfb2Zmc2V0ID0gMDsKKwkvKiBzdG9yZXMgbWF0Y2gvd2F0Y2hlcnMvdGFyZ2V0cyAmIG9mZnNldCBvZiBuZXh0IHN0cnVjdCBlYnRfZW50cnk6ICovCisJdW5zaWduZWQgaW50IG9mZnNldHNbNF07CisJdW5zaWduZWQgaW50ICpvZmZzZXRzX3VwZGF0ZSA9IE5VTEw7CisJaW50IHJldDsKKwljaGFyICpidWZfc3RhcnQ7CisKKwlpZiAoKnRvdGFsIDwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFlbnRyeS0+Yml0bWFzaykgeworCQkqdG90YWwgLT0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcyk7CisJCXJldHVybiBlYnRfYnVmX2FkZChzdGF0ZSwgZW50cnksIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpKTsKKwl9CisJaWYgKCp0b3RhbCA8IHNpemVvZigqZW50cnkpIHx8IGVudHJ5LT5uZXh0X29mZnNldCA8IHNpemVvZigqZW50cnkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldDsKKwkvKiBwdWxsIGluIG1vc3QgcGFydCBvZiBlYnRfZW50cnksIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgY2hhbmdlZC4gKi8KKwlyZXQgPSBlYnRfYnVmX2FkZChzdGF0ZSwgZW50cnksCisJCQlvZmZzZXRvZihzdHJ1Y3QgZWJ0X2VudHJ5LCB3YXRjaGVyc19vZmZzZXQpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW9mZnNldHNbMF0gPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyeSk7IC8qIG1hdGNoZXMgY29tZSBmaXJzdCAqLworCW1lbWNweSgmb2Zmc2V0c1sxXSwgJmVudHJ5LT53YXRjaGVyc19vZmZzZXQsCisJCQlzaXplb2Yob2Zmc2V0cykgLSBzaXplb2Yob2Zmc2V0c1swXSkpOworCisJaWYgKHN0YXRlLT5idWZfa2Vybl9zdGFydCkgeworCQlidWZfc3RhcnQgPSBzdGF0ZS0+YnVmX2tlcm5fc3RhcnQgKyBzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0OworCQlvZmZzZXRzX3VwZGF0ZSA9ICh1bnNpZ25lZCBpbnQgKikgYnVmX3N0YXJ0OworCX0KKwlyZXQgPSBlYnRfYnVmX2FkZChzdGF0ZSwgJm9mZnNldHNbMV0sCisJCQlzaXplb2Yob2Zmc2V0cykgLSBzaXplb2Yob2Zmc2V0c1swXSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWJ1Zl9zdGFydCA9IChjaGFyICopIGVudHJ5OworCS8qCisJICogMDogbWF0Y2hlcyBvZmZzZXQsIGFsd2F5cyBmb2xsb3dzIGVidF9lbnRyeS4KKwkgKiAxOiB3YXRjaGVycyBvZmZzZXQsIGZyb20gZWJ0X2VudHJ5IHN0cnVjdHVyZQorCSAqIDI6IHRhcmdldCBvZmZzZXQsIGZyb20gZWJ0X2VudHJ5IHN0cnVjdHVyZQorCSAqIDM6IG5leHQgZWJ0X2VudHJ5IG9mZnNldCwgZnJvbSBlYnRfZW50cnkgc3RydWN0dXJlCisJICoKKwkgKiBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3RydWN0IGVidF9lbnRyeSAoaS5lLiwgMCkuCisJICovCisJZm9yIChpID0gMCwgaiA9IDEgOyBqIDwgNCA7IGorKywgaSsrKSB7CisJCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqbWF0Y2gzMjsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCWNoYXIgKmJ1ZiA9IGJ1Zl9zdGFydDsKKworCQlidWYgPSBidWZfc3RhcnQgKyBvZmZzZXRzW2ldOworCQlpZiAob2Zmc2V0c1tpXSA+IG9mZnNldHNbal0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltYXRjaDMyID0gKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqKSBidWY7CisJCXNpemUgPSBvZmZzZXRzW2pdIC0gb2Zmc2V0c1tpXTsKKwkJcmV0ID0gZWJ0X3NpemVfbXd0KG1hdGNoMzIsIHNpemUsIGksIHN0YXRlLCBiYXNlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQluZXdfb2Zmc2V0ICs9IHJldDsKKwkJaWYgKG9mZnNldHNfdXBkYXRlICYmIG5ld19vZmZzZXQpIHsKKwkJCXByX2RlYnVnKCJlYnRhYmxlczogY2hhbmdlIG9mZnNldCAlZCB0byAlZFxuIiwKKwkJCQlvZmZzZXRzX3VwZGF0ZVtpXSwgb2Zmc2V0c1tqXSArIG5ld19vZmZzZXQpOworCQkJb2Zmc2V0c191cGRhdGVbaV0gPSBvZmZzZXRzW2pdICsgbmV3X29mZnNldDsKKwkJfQorCX0KKworCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldCAtIHN0YXJ0b2ZmOworCisJQlVHX09OKCp0b3RhbCA8IHN0YXJ0b2ZmKTsKKwkqdG90YWwgLT0gc3RhcnRvZmY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXBsLT5lbnRyaWVzX3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIGVidF9lbnRyeSBibG9iIGluIHVzZXJzcGFjZS4KKyAqIEl0IG1pZ2h0IG5lZWQgbW9yZSBtZW1vcnkgd2hlbiBjb3BpZWQgdG8gYSA2NCBiaXQga2VybmVsIGluIGNhc2UKKyAqIHVzZXJzcGFjZSBpcyAzMi1iaXQuIFNvLCBmaXJzdCB0YXNrOiBmaW5kIG91dCBob3cgbXVjaCBtZW1vcnkgaXMgbmVlZGVkLgorICoKKyAqIENhbGxlZCBiZWZvcmUgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQuCisgKi8KK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cmllcyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZV91c2VyLAorCQkJCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGludCBzaXplX3JlbWFpbmluZyA9IHNpemVfdXNlcjsKKwlpbnQgcmV0OworCisJcmV0ID0gRUJUX0VOVFJZX0lURVJBVEUoZGF0YSwgc2l6ZV91c2VyLCBzaXplX2VudHJ5X213dCwgZGF0YSwKKwkJCQkJJnNpemVfcmVtYWluaW5nLCBzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlXQVJOX09OKHNpemVfcmVtYWluaW5nKTsKKwlyZXR1cm4gc3RhdGUtPmJ1Zl9rZXJuX29mZnNldDsKK30KKworCitzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsCisJCQkJCSAgICB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY29tcGF0X2VidF9yZXBsYWNlIHRtcDsKKwlpbnQgaTsKKworCWlmIChsZW4gPCBzaXplb2YodG1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsZW4gIT0gc2l6ZW9mKHRtcCkgKyB0bXAuZW50cmllc19zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0bXAuZW50cmllc19zaXplID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRtcC5uZW50cmllcyA+PSAoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgLworCQkJTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHRtcC5udW1fY291bnRlcnMgPj0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShyZXBsLCAmdG1wLCBvZmZzZXRvZihzdHJ1Y3QgZWJ0X3JlcGxhY2UsIGhvb2tfZW50cnkpKTsKKworCS8qIHN0YXJ0aW5nIHdpdGggaG9va19lbnRyeSwgMzIgdnMuIDY0IGJpdCBzdHJ1Y3R1cmVzIGFyZSBkaWZmZXJlbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykKKwkJcmVwbC0+aG9va19lbnRyeVtpXSA9IGNvbXBhdF9wdHIodG1wLmhvb2tfZW50cnlbaV0pOworCisJcmVwbC0+bnVtX2NvdW50ZXJzID0gdG1wLm51bV9jb3VudGVyczsKKwlyZXBsLT5jb3VudGVycyA9IGNvbXBhdF9wdHIodG1wLmNvdW50ZXJzKTsKKwlyZXBsLT5lbnRyaWVzID0gY29tcGF0X3B0cih0bXAuZW50cmllcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKwkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0LCBpLCBjb3VudGVyc2l6ZSwgc2l6ZTY0OworCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKKwlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOworCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgc3RhdGU7CisJdm9pZCAqZW50cmllc190bXA7CisKKwlyZXQgPSBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgbGVuKTsKKwlpZiAocmV0KSB7CisJCS8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqLworCQlpZiAocmV0ID09IC1FSU5WQUwgJiYgZG9fcmVwbGFjZShuZXQsIHVzZXIsIGxlbikgPT0gMCkKKwkJCXJldCA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVCh0bXAubmVudHJpZXMpICogbnJfY3B1X2lkczsKKwluZXdpbmZvID0gdm1hbGxvYyhzaXplb2YoKm5ld2luZm8pICsgY291bnRlcnNpemUpOworCWlmICghbmV3aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY291bnRlcnNpemUpCisJCW1lbXNldChuZXdpbmZvLT5jb3VudGVycywgMCwgY291bnRlcnNpemUpOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisKKwluZXdpbmZvLT5lbnRyaWVzID0gdm1hbGxvYyh0bXAuZW50cmllc19zaXplKTsKKwlpZiAoIW5ld2luZm8tPmVudHJpZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25ld2luZm87CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigKKwkgICBuZXdpbmZvLT5lbnRyaWVzLCB0bXAuZW50cmllcywgdG1wLmVudHJpZXNfc2l6ZSkgIT0gMCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfZW50cmllczsKKwl9CisKKwllbnRyaWVzX3RtcCA9IG5ld2luZm8tPmVudHJpZXM7CisKKwl4dF9jb21wYXRfbG9jayhORlBST1RPX0JSSURHRSk7CisKKwlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlwcl9kZWJ1ZygidG1wLmVudHJpZXNfc2l6ZSAlZCwga2VybiBvZmYgJWQsIHVzZXIgb2ZmICVkIGRlbHRhICVkXG4iLAorCQl0bXAuZW50cmllc19zaXplLCBzdGF0ZS5idWZfa2Vybl9vZmZzZXQsIHN0YXRlLmJ1Zl91c2VyX29mZnNldCwKKwkJeHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgdG1wLmVudHJpZXNfc2l6ZSkpOworCisJc2l6ZTY0ID0gcmV0OworCW5ld2luZm8tPmVudHJpZXMgPSB2bWFsbG9jKHNpemU2NCk7CisJaWYgKCFuZXdpbmZvLT5lbnRyaWVzKSB7CisJCXZmcmVlKGVudHJpZXNfdG1wKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLmJ1Zl9rZXJuX3N0YXJ0ID0gbmV3aW5mby0+ZW50cmllczsKKwlzdGF0ZS5idWZfa2Vybl9sZW4gPSBzaXplNjQ7CisKKwlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOworCUJVR19PTihyZXQgPCAwKTsJLyogcGFyc2VzIHNhbWUgZGF0YSBhZ2FpbiAqLworCisJdmZyZWUoZW50cmllc190bXApOworCXRtcC5lbnRyaWVzX3NpemUgPSBzaXplNjQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgeworCQljaGFyIF9fdXNlciAqdXNycHRyOworCQlpZiAodG1wLmhvb2tfZW50cnlbaV0pIHsKKwkJCXVuc2lnbmVkIGludCBkZWx0YTsKKwkJCXVzcnB0ciA9IChjaGFyIF9fdXNlciAqKSB0bXAuaG9va19lbnRyeVtpXTsKKwkJCWRlbHRhID0gdXNycHRyIC0gdG1wLmVudHJpZXM7CisJCQl1c3JwdHIgKz0geHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgZGVsdGEpOworCQkJdG1wLmhvb2tfZW50cnlbaV0gPSAoc3RydWN0IGVidF9lbnRyaWVzIF9fdXNlciAqKXVzcnB0cjsKKwkJfQorCX0KKworCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFKTsKKwl4dF9jb21wYXRfdW5sb2NrKE5GUFJPVE9fQlJJREdFKTsKKworCXJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgJnRtcCwgbmV3aW5mbyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gcmV0OworZnJlZV9lbnRyaWVzOgorCXZmcmVlKG5ld2luZm8tPmVudHJpZXMpOworZnJlZV9uZXdpbmZvOgorCXZmcmVlKG5ld2luZm8pOworCXJldHVybiByZXQ7CitvdXRfdW5sb2NrOgorCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFKTsKKwl4dF9jb21wYXRfdW5sb2NrKE5GUFJPVE9fQlJJREdFKTsKKwlnb3RvIGZyZWVfZW50cmllczsKK30KKworc3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsCisJCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgaGxwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZobHAsIHVzZXIsIHNpemVvZihobHApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi8KKwlpZiAobGVuICE9IHNpemVvZihobHApICsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCQlyZXR1cm4gdXBkYXRlX2NvdW50ZXJzKG5ldCwgdXNlciwgbGVuKTsKKworCXJldHVybiBkb191cGRhdGVfY291bnRlcnMobmV0LCBobHAubmFtZSwgY29tcGF0X3B0cihobHAuY291bnRlcnMpLAorCQkJCQlobHAubnVtX2NvdW50ZXJzLCB1c2VyLCBsZW4pOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssCisJCWludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRUJUX1NPX1NFVF9FTlRSSUVTOgorCQlyZXQgPSBjb21wYXRfZG9fcmVwbGFjZShzb2NrX25ldChzayksIHVzZXIsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRUJUX1NPX1NFVF9DT1VOVEVSUzoKKwkJcmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhzb2NrX25ldChzayksIHVzZXIsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisgIH0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsCisJCXZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgdG1wOworCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi8KKwlpZiAoKGNtZCA9PSBFQlRfU09fR0VUX0lORk8gfHwKKwkgICAgIGNtZCA9PSBFQlRfU09fR0VUX0lOSVRfSU5GTykgJiYgKmxlbiAhPSBzaXplb2YodG1wKSkKKwkJCXJldHVybiBkb19lYnRfZ2V0X2N0bChzaywgY21kLCB1c2VyLCBsZW4pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl0ID0gZmluZF90YWJsZV9sb2NrKHNvY2tfbmV0KHNrKSwgdG1wLm5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOworCWlmICghdCkKKwkJcmV0dXJuIHJldDsKKworCXh0X2NvbXBhdF9sb2NrKE5GUFJPVE9fQlJJREdFKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRUJUX1NPX0dFVF9JTkZPOgorCQl0bXAubmVudHJpZXMgPSB0LT5wcml2YXRlLT5uZW50cmllczsKKwkJcmV0ID0gY29tcGF0X3RhYmxlX2luZm8odC0+cHJpdmF0ZSwgJnRtcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJdG1wLnZhbGlkX2hvb2tzID0gdC0+dmFsaWRfaG9va3M7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmdG1wLCAqbGVuKSAhPSAwKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFQlRfU09fR0VUX0lOSVRfSU5GTzoKKwkJdG1wLm5lbnRyaWVzID0gdC0+dGFibGUtPm5lbnRyaWVzOworCQl0bXAuZW50cmllc19zaXplID0gdC0+dGFibGUtPmVudHJpZXNfc2l6ZTsKKwkJdG1wLnZhbGlkX2hvb2tzID0gdC0+dGFibGUtPnZhbGlkX2hvb2tzOworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJnRtcCwgKmxlbikgIT0gMCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgRUJUX1NPX0dFVF9FTlRSSUVTOgorCWNhc2UgRUJUX1NPX0dFVF9JTklUX0VOVFJJRVM6CisJCS8qCisJCSAqIHRyeSByZWFsIGhhbmRsZXIgZmlyc3QgaW4gY2FzZSBvZiB1c2VybGFuZC1zaWRlIHBhZGRpbmcuCisJCSAqIGluIGNhc2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhbiAnb3JkaW5hcnknIDMyIGJpdCBiaW5hcnkKKwkJICogd2l0aG91dCA2NGJpdCBjb21wYXRpYmlsaXR5IHBhZGRpbmcsIHRoaXMgd2lsbCBmYWlsIHJpZ2h0CisJCSAqIGFmdGVyIGNvcHlfZnJvbV91c2VyIHdoZW4gdGhlICpsZW4gYXJndW1lbnQgaXMgdmFsaWRhdGVkLgorCQkgKgorCQkgKiB0aGUgY29tcGF0XyB2YXJpYW50IG5lZWRzIHRvIGRvIG9uZSBwYXNzIG92ZXIgdGhlIGtlcm5lbAorCQkgKiBkYXRhIHNldCB0byBhZGp1c3QgZm9yIHNpemUgZGlmZmVyZW5jZXMgYmVmb3JlIGl0IHRoZSBjaGVjay4KKwkJICovCisJCWlmIChjb3B5X2V2ZXJ5dGhpbmdfdG9fdXNlcih0LCB1c2VyLCBsZW4sIGNtZCkgPT0gMCkKKwkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IGNvbXBhdF9jb3B5X2V2ZXJ5dGhpbmdfdG9fdXNlcih0LCB1c2VyLCBsZW4sIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorIG91dDoKKwl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhORlBST1RPX0JSSURHRSk7CisJeHRfY29tcGF0X3VubG9jayhORlBST1RPX0JSSURHRSk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPQogewogCS5wZgkJPSBQRl9JTkVULAogCS5zZXRfb3B0bWluCT0gRUJUX0JBU0VfQ1RMLAogCS5zZXRfb3B0bWF4CT0gRUJUX1NPX1NFVF9NQVggKyAxLAogCS5zZXQJCT0gZG9fZWJ0X3NldF9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0CT0gY29tcGF0X2RvX2VidF9zZXRfY3RsLAorI2VuZGlmCiAJLmdldF9vcHRtaW4JPSBFQlRfQkFTRV9DVEwsCiAJLmdldF9vcHRtYXgJPSBFQlRfU09fR0VUX01BWCArIDEsCiAJLmdldAkJPSBkb19lYnRfZ2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9nZXQJPSBjb21wYXRfZG9fZWJ0X2dldF9jdGwsCisjZW5kaWYKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA1MWFkYzRjLi43MDJiZTVhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTc3LDggKzc3LDggQEAKIG1vZHVsZV9wYXJhbShzdGF0c190aW1lciwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moc3RhdHNfdGltZXIsICJlbmFibGUgdGltZXIgZm9yIHN0YXRpc3RpY3MgKGRlZmF1bHQ6b24pIik7CiAKLUhMSVNUX0hFQUQoY2FuX3J4X2Rldl9saXN0KTsKLXN0YXRpYyBzdHJ1Y3QgZGV2X3Jjdl9saXN0cyBjYW5fcnhfYWxsZGV2X2xpc3Q7CisvKiByZWNlaXZlIGZpbHRlcnMgc3Vic2NyaWJlZCBmb3IgJ2FsbCcgQ0FOIGRldmljZXMgKi8KK3N0cnVjdCBkZXZfcmN2X2xpc3RzIGNhbl9yeF9hbGxkZXZfbGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FuX3Jjdmxpc3RzX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJjdl9jYWNoZSBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDI4ICsyOTIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBkZXZfcmN2X2xpc3RzICpmaW5kX2Rldl9yY3ZfbGlzdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZCA9IE5VTEw7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47Ci0KLQkvKgotCSAqIGZpbmQgcmVjZWl2ZSBsaXN0IGZvciB0aGlzIGRldmljZQotCSAqCi0JICogVGhlIGhsaXN0X2Zvcl9lYWNoX2VudHJ5KigpIG1hY3JvcyBjdXJzZSB0aHJvdWdoIHRoZSBsaXN0Ci0JICogdXNpbmcgdGhlIHBvaW50ZXIgdmFyaWFibGUgbiBhbmQgc2V0IGQgdG8gdGhlIGNvbnRhaW5pbmcKLQkgKiBzdHJ1Y3QgaW4gZWFjaCBsaXN0IGl0ZXJhdGlvbi4gIFRoZXJlZm9yZSwgYWZ0ZXIgbGlzdAotCSAqIGl0ZXJhdGlvbiwgZCBpcyB1bm1vZGlmaWVkIHdoZW4gdGhlIGxpc3QgaXMgZW1wdHksIGFuZCBpdAotCSAqIHBvaW50cyB0byBsYXN0IGxpc3QgZWxlbWVudCwgd2hlbiB0aGUgbGlzdCBpcyBub24tZW1wdHkKLQkgKiBidXQgbm8gbWF0Y2ggaW4gdGhlIGxvb3AgYm9keSBpcyBmb3VuZC4gIEkuZS4gZCBpcyAqbm90KgotCSAqIE5VTEwgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gIFdlIGNhbiwgaG93ZXZlciwgdXNlIHRoZQotCSAqIGN1cnNvciB2YXJpYWJsZSBuIHRvIGRlY2lkZSBpZiBhIG1hdGNoIHdhcyBmb3VuZC4KLQkgKi8KLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCBuLCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkLT5kZXYgPT0gZGV2KQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG4gPyBkIDogTlVMTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuICZjYW5fcnhfYWxsZGV2X2xpc3Q7CisJZWxzZQorCQlyZXR1cm4gKHN0cnVjdCBkZXZfcmN2X2xpc3RzICopZGV2LT5tbF9wcml2OwogfQogCiAvKioKQEAgLTQzMyw2ICs0MTUsOSBAQAogCiAJLyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtPiAoZnVuYyxkYXRhKSAqLwogCisJaWYgKGRldiAmJiBkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyID0ga21lbV9jYWNoZV9hbGxvYyhyY3ZfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00NjgsMTYgKzQ1Myw2IEBACiBFWFBPUlRfU1lNQk9MKGNhbl9yeF9yZWdpc3Rlcik7CiAKIC8qCi0gKiBjYW5fcnhfZGVsZXRlX2RldmljZSAtIHJjdSBjYWxsYmFjayBmb3IgZGV2X3Jjdl9saXN0cyBzdHJ1Y3R1cmUgcmVtb3ZhbAotICovCi1zdGF0aWMgdm9pZCBjYW5fcnhfZGVsZXRlX2RldmljZShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQotewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgZGV2X3Jjdl9saXN0cywgcmN1KTsKLQotCWtmcmVlKGQpOwotfQotCi0vKgogICogY2FuX3J4X2RlbGV0ZV9yZWNlaXZlciAtIHJjdSBjYWxsYmFjayBmb3Igc2luZ2xlIHJlY2VpdmVyIGVudHJ5IHJlbW92YWwKICAqLwogc3RhdGljIHZvaWQgY2FuX3J4X2RlbGV0ZV9yZWNlaXZlcihzdHJ1Y3QgcmN1X2hlYWQgKnJwKQpAQCAtNTA2LDYgKzQ4MSw5IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7CiAKKwlpZiAoZGV2ICYmIGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FOKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKIAogCWQgPSBmaW5kX2Rldl9yY3ZfbGlzdHMoZGV2KTsKQEAgLTU0MSw3ICs1MTksNiBAQAogCQkgICAgICAgImRldiAlcywgaWQgJTAzWCwgbWFzayAlMDNYXG4iLAogCQkgICAgICAgRE5BTUUoZGV2KSwgY2FuX2lkLCBtYXNrKTsKIAkJciA9IE5VTEw7Ci0JCWQgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU1MiwxMCArNTI5LDEwIEBACiAJCWNhbl9wc3RhdHMucmN2X2VudHJpZXMtLTsKIAogCS8qIHJlbW92ZSBkZXZpY2Ugc3RydWN0dXJlIHJlcXVlc3RlZCBieSBORVRERVZfVU5SRUdJU1RFUiAqLwotCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKQotCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKLQllbHNlCi0JCWQgPSBOVUxMOworCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKSB7CisJCWtmcmVlKGQpOworCQlkZXYtPm1sX3ByaXYgPSBOVUxMOworCX0KIAogIG91dDoKIAlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwpAQCAtNTYzLDEwICs1NDAsNiBAQAogCS8qIHNjaGVkdWxlIHRoZSByZWNlaXZlciBpdGVtIGZvciBkZWxldGlvbiAqLwogCWlmIChyKQogCQljYWxsX3JjdSgmci0+cmN1LCBjYW5fcnhfZGVsZXRlX3JlY2VpdmVyKTsKLQotCS8qIHNjaGVkdWxlIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciBkZWxldGlvbiAqLwotCWlmIChkKQotCQljYWxsX3JjdSgmZC0+cmN1LCBjYW5fcnhfZGVsZXRlX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGNhbl9yeF91bnJlZ2lzdGVyKTsKIApAQCAtNzgwLDQ4ICs3NTMsMzUgQEAKIAogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCi0JCS8qCi0JCSAqIGNyZWF0ZSBuZXcgZGV2X3Jjdl9saXN0cyBmb3IgdGhpcyBkZXZpY2UKLQkJICoKLQkJICogTi5CLiB6ZXJvaW5nIHRoZSBzdHJ1Y3QgaXMgdGhlIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24KLQkJICogZm9yIHRoZSBlbWJlZGRlZCBobGlzdF9oZWFkIHN0cnVjdHMuCi0JCSAqIEFub3RoZXIgbGlzdCB0eXBlLCBlLmcuIGxpc3RfaGVhZCwgd291bGQgcmVxdWlyZQotCQkgKiBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4KLQkJICovCi0KKwkJLyogY3JlYXRlIG5ldyBkZXZfcmN2X2xpc3RzIGZvciB0aGlzIGRldmljZSAqLwogCQlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiY2FuOiBhbGxvY2F0aW9uIG9mIHJlY2VpdmUgbGlzdCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIE5PVElGWV9ET05FOwogCQl9Ci0JCWQtPmRldiA9IGRldjsKLQotCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKLQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZkLT5saXN0LCAmY2FuX3J4X2Rldl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwkJQlVHX09OKGRldi0+bWxfcHJpdik7CisJCWRldi0+bWxfcHJpdiA9IGQ7CiAKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKIAotCQlkID0gZmluZF9kZXZfcmN2X2xpc3RzKGRldik7CisJCWQgPSBkZXYtPm1sX3ByaXY7CiAJCWlmIChkKSB7Ci0JCQlpZiAoZC0+ZW50cmllcykgeworCQkJaWYgKGQtPmVudHJpZXMpCiAJCQkJZC0+cmVtb3ZlX29uX3plcm9fZW50cmllcyA9IDE7Ci0JCQkJZCA9IE5VTEw7Ci0JCQl9IGVsc2UKLQkJCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKKwkJCWVsc2UgeworCQkJCWtmcmVlKGQpOworCQkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCQl9CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJjYW46IG5vdGlmaWVyOiByZWNlaXZlIGxpc3Qgbm90ICIKIAkJCSAgICAgICAiZm91bmQgZm9yIGRldiAlc1xuIiwgZGV2LT5uYW1lKTsKIAogCQlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwogCi0JCWlmIChkKQotCQkJY2FsbF9yY3UoJmQtPnJjdSwgY2FuX3J4X2RlbGV0ZV9kZXZpY2UpOwotCiAJCWJyZWFrOwogCX0KIApAQCAtODUzLDIxICs4MTMsMTMgQEAKIHsKIAlwcmludGsoYmFubmVyKTsKIAorCW1lbXNldCgmY2FuX3J4X2FsbGRldl9saXN0LCAwLCBzaXplb2YoY2FuX3J4X2FsbGRldl9saXN0KSk7CisKIAlyY3ZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY2FuX3JlY2VpdmVyIiwgc2l6ZW9mKHN0cnVjdCByZWNlaXZlciksCiAJCQkJICAgICAgMCwgMCwgTlVMTCk7CiAJaWYgKCFyY3ZfY2FjaGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyoKLQkgKiBJbnNlcnQgY2FuX3J4X2FsbGRldl9saXN0IGZvciByZWNlcHRpb24gb24gYWxsIGRldmljZXMuCi0JICogVGhpcyBzdHJ1Y3QgaXMgemVybyBpbml0aWFsaXplZCB3aGljaCBpcyBjb3JyZWN0IGZvciB0aGUKLQkgKiBlbWJlZGRlZCBobGlzdCBoZWFkcywgdGhlIGRldiBwb2ludGVyLCBhbmQgdGhlIGVudHJpZXMgY291bnRlci4KLQkgKi8KLQotCXNwaW5fbG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmY2FuX3J4X2FsbGRldl9saXN0Lmxpc3QsICZjYW5fcnhfZGV2X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0KIAlpZiAoc3RhdHNfdGltZXIpIHsKIAkJLyogdGhlIHN0YXRpc3RpY3MgYXJlIHVwZGF0ZWQgZXZlcnkgc2Vjb25kICh0aW1lciB0cmlnZ2VyZWQpICovCiAJCXNldHVwX3RpbWVyKCZjYW5fc3RhdHRpbWVyLCBjYW5fc3RhdF91cGRhdGUsIDApOwpAQCAtODg3LDggKzgzOSw3IEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBjYW5fZXhpdCh2b2lkKQogewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJaWYgKHN0YXRzX3RpbWVyKQogCQlkZWxfdGltZXIoJmNhbl9zdGF0dGltZXIpOwpAQCAtOTAwLDE0ICs4NTEsMTkgQEAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2FuX25ldGRldl9ub3RpZmllcik7CiAJc29ja191bnJlZ2lzdGVyKFBGX0NBTik7CiAKLQkvKiByZW1vdmUgY2FuX3J4X2Rldl9saXN0ICovCi0Jc3Bpbl9sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0JaGxpc3RfZGVsKCZjYW5fcnhfYWxsZGV2X2xpc3QubGlzdCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkLCBuLCBuZXh0LCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7Ci0JCWhsaXN0X2RlbCgmZC0+bGlzdCk7Ci0JCWtmcmVlKGQpOworCS8qIHJlbW92ZSBjcmVhdGVkIGRldl9yY3ZfbGlzdHMgZnJvbSBzdGlsbCByZWdpc3RlcmVkIENBTiBkZXZpY2VzICovCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBkZXYpIHsKKwkJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfQ0FOICYmIGRldi0+bWxfcHJpdil7CisKKwkJCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gZGV2LT5tbF9wcml2OworCisJCQlCVUdfT04oZC0+ZW50cmllcyk7CisJCQlrZnJlZShkKTsKKwkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmggYi9uZXQvY2FuL2FmX2Nhbi5oCmluZGV4IDE4ZjkxZTMuLjM0MjUzYjggMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmgKKysrIGIvbmV0L2Nhbi9hZl9jYW4uaApAQCAtNjMsMTAgKzYzLDggQEAKIAogZW51bSB7IFJYX0VSUiwgUlhfQUxMLCBSWF9GSUwsIFJYX0lOViwgUlhfRUZGLCBSWF9NQVggfTsKIAorLyogcGVyIGRldmljZSByZWNlaXZlIGZpbHRlcnMgbGlua2VkIGF0IGRldi0+bWxfcHJpdiAqLwogc3RydWN0IGRldl9yY3ZfbGlzdHMgewotCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBobGlzdF9oZWFkIHJ4W1JYX01BWF07CiAJc3RydWN0IGhsaXN0X2hlYWQgcnhfc2ZmWzB4ODAwXTsKIAlpbnQgcmVtb3ZlX29uX3plcm9fZW50cmllczsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcHJvYy5jIGIvbmV0L2Nhbi9wcm9jLmMKaW5kZXggOWI5YWQyOS4uZjQyNjVjYyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9wcm9jLmMKKysrIGIvbmV0L2Nhbi9wcm9jLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FuL2NvcmUuaD4KIAogI2luY2x1ZGUgImFmX2Nhbi5oIgpAQCAtODQsNiArODUsOSBAQAogCVtSWF9FRkZdID0gInJ4X2VmZiIsCiB9OwogCisvKiByZWNlaXZlIGZpbHRlcnMgc3Vic2NyaWJlZCBmb3IgJ2FsbCcgQ0FOIGRldmljZXMgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2X3Jjdl9saXN0cyBjYW5fcnhfYWxsZGV2X2xpc3Q7CisKIC8qCiAgKiBhZl9jYW4gc3RhdGlzdGljcyBzdHVmZgogICovCkBAIC0xOTAsMTAgKzE5NCw2IEBACiAKIC8qCiAgKiBwcm9jIHJlYWQgZnVuY3Rpb25zCi0gKgotICogRnJvbSBrbm93biB1c2UtY2FzZXMgd2UgZXhwZWN0IGFib3V0IDEwIGVudHJpZXMgaW4gYSByZWNlaXZlIGxpc3QgdG8gYmUKLSAqIHByaW50ZWQgaW4gdGhlIHByb2NfZnMuIFNvIFBBR0VfU0laRSBpcyBkZWZpbml0ZWx5IGVub3VnaCBzcGFjZSBoZXJlLgotICoKICAqLwogCiBzdGF0aWMgdm9pZCBjYW5fcHJpbnRfcmN2bGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBobGlzdF9oZWFkICpyeF9saXN0LApAQCAtMjAyLDcgKzIwMiw2IEBACiAJc3RydWN0IHJlY2VpdmVyICpyOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyLCBuLCByeF9saXN0LCBsaXN0KSB7CiAJCWNoYXIgKmZtdCA9IChyLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpPwogCQkJIiAgICUtNXMgICUwOFggICUwOHggICUwOHggICUwOHggICU4bGQgICVzXG4iIDoKQEAgLTIxMiw3ICsyMTEsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKXItPmZ1bmMsICh1bnNpZ25lZCBsb25nKXItPmRhdGEsCiAJCQkJci0+bWF0Y2hlcywgci0+aWRlbnQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgY2FuX3ByaW50X3JlY3ZfYmFubmVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTM0NiwyNCArMzQ0LDM5IEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZfcmN2X2xpc3RzICpkKQoreworCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7CisJCWNhbl9wcmludF9yZWN2X2Jhbm5lcihtKTsKKwkJY2FuX3ByaW50X3Jjdmxpc3QobSwgJmQtPnJ4W2lkeF0sIGRldik7CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworCit9CisKIHN0YXRpYyBpbnQgY2FuX3Jjdmxpc3RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAkvKiBkb3VibGUgY2FzdCB0byBwcmV2ZW50IEdDQyB3YXJuaW5nICovCiAJaW50IGlkeCA9IChpbnQpKGxvbmcpbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCiAJc2VxX3ByaW50ZihtLCAiXG5yZWNlaXZlIGxpc3QgJyVzJzpcbiIsIHJ4X2xpc3RfbmFtZVtpZHhdKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewogCi0JCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhbaWR4XSwgZC0+ZGV2KTsKLQkJfSBlbHNlCi0JCQlzZXFfcHJpbnRmKG0sICIgICglczogbm8gZW50cnkpXG4iLCBETkFNRShkLT5kZXYpKTsKKwkvKiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgTlVMTCwgZCk7CisKKwkvKiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgZGV2LCBkZXYtPm1sX3ByaXYpOwogCX0KKwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJc2VxX3B1dGMobSwgJ1xuJyk7CkBAIC0zODMsMzQgKzM5Niw1MCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgY2FuX3Jjdmxpc3Rfc2ZmX3Byb2Nfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICptLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQpCit7CisJaW50IGk7CisJaW50IGFsbF9lbXB0eSA9IDE7CisKKwkvKiBjaGVjayB3ZXRoZXIgYXQgbGVhc3Qgb25lIGxpc3QgaXMgbm9uLWVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IDB4ODAwOyBpKyspCisJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKKwkJCWFsbF9lbXB0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFhbGxfZW1wdHkpIHsKKwkJY2FuX3ByaW50X3JlY3ZfYmFubmVyKG0pOworCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgeworCQkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhfc2ZmW2ldKSkKKwkJCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhfc2ZmW2ldLCBkZXYpOworCQl9CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworfQorCiBzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3NmZl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAkvKiBSWF9TRkYgKi8KIAlzZXFfcHV0cyhtLCAiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewotCQlpbnQgaSwgYWxsX2VtcHR5ID0gMTsKLQkJLyogY2hlY2sgd2V0aGVyIGF0IGxlYXN0IG9uZSBsaXN0IGlzIG5vbi1lbXB0eSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykKLQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKLQkJCQlhbGxfZW1wdHkgPSAwOwotCQkJCWJyZWFrOwotCQkJfQogCi0JCWlmICghYWxsX2VtcHR5KSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgewotCQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpCi0JCQkJCWNhbl9wcmludF9yY3ZsaXN0KG0sICZkLT5yeF9zZmZbaV0sCi0JCQkJCQkJICBkLT5kZXYpOwotCQkJfQotCQl9IGVsc2UKLQkJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBOVUxMLCBkKTsKKworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBkZXYsIGRldi0+bWxfcHJpdik7CiAJfQorCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlzZXFfcHV0YyhtLCAnXG4nKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZWM4NzQyMS4uYmNjNDkwYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMTMsMTkgKzExMTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkZXZfbG9hZCk7CiAKLS8qKgotICoJZGV2X29wZW4JLSBwcmVwYXJlIGFuIGludGVyZmFjZSBmb3IgdXNlLgotICoJQGRldjoJZGV2aWNlIHRvIG9wZW4KLSAqCi0gKglUYWtlcyBhIGRldmljZSBmcm9tIGRvd24gdG8gdXAgc3RhdGUuIFRoZSBkZXZpY2UncyBwcml2YXRlIG9wZW4KLSAqCWZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHRoZW4gdGhlIG11bHRpY2FzdCBsaXN0cyBhcmUgbG9hZGVkLiBGaW5hbGx5Ci0gKgl0aGUgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIHVwIHN0YXRlIGFuZCBhICVORVRERVZfVVAgbWVzc2FnZSBpcwotICoJc2VudCB0byB0aGUgbmV0ZGV2IG5vdGlmaWVyIGNoYWluLgotICoKLSAqCUNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbiBhY3RpdmUgaW50ZXJmYWNlIGlzIGEgbm9wLiBPbiBhIGZhaWx1cmUKLSAqCWEgbmVnYXRpdmUgZXJybm8gY29kZSBpcyByZXR1cm5lZC4KLSAqLwotaW50IGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAlpbnQgcmV0OwpAQCAtMTEzMywxMyArMTEyMSw2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCS8qCi0JICoJSXMgaXQgYWxyZWFkeSB1cD8KLQkgKi8KLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQotCQlyZXR1cm4gMDsKLQotCS8qCiAJICoJSXMgaXQgZXZlbiBwcmVzZW50PwogCSAqLwogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKQEAgLTExODcsMzYgKzExNjgsNTcgQEAKIAkJICoJV2FrZXVwIHRyYW5zbWl0IHF1ZXVlIGVuZ2luZQogCQkgKi8KIAkJZGV2X2FjdGl2YXRlKGRldik7Ci0KLQkJLyoKLQkJICoJLi4uIGFuZCBhbm5vdW5jZSBuZXcgaW50ZXJmYWNlLgotCQkgKi8KLQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9VUCwgZGV2KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQorCisvKioKKyAqCWRldl9vcGVuCS0gcHJlcGFyZSBhbiBpbnRlcmZhY2UgZm9yIHVzZS4KKyAqCUBkZXY6CWRldmljZSB0byBvcGVuCisgKgorICoJVGFrZXMgYSBkZXZpY2UgZnJvbSBkb3duIHRvIHVwIHN0YXRlLiBUaGUgZGV2aWNlJ3MgcHJpdmF0ZSBvcGVuCisgKglmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuIHRoZSBtdWx0aWNhc3QgbGlzdHMgYXJlIGxvYWRlZC4gRmluYWxseQorICoJdGhlIGRldmljZSBpcyBtb3ZlZCBpbnRvIHRoZSB1cCBzdGF0ZSBhbmQgYSAlTkVUREVWX1VQIG1lc3NhZ2UgaXMKKyAqCXNlbnQgdG8gdGhlIG5ldGRldiBub3RpZmllciBjaGFpbi4KKyAqCisgKglDYWxsaW5nIHRoaXMgZnVuY3Rpb24gb24gYW4gYWN0aXZlIGludGVyZmFjZSBpcyBhIG5vcC4gT24gYSBmYWlsdXJlCisgKglhIG5lZ2F0aXZlIGVycm5vIGNvZGUgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwkvKgorCSAqCUlzIGl0IGFscmVhZHkgdXA/CisJICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCXJldHVybiAwOworCisJLyoKKwkgKglPcGVuIGRldmljZQorCSAqLworCXJldCA9IF9fZGV2X29wZW4oZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICoJLi4uIGFuZCBhbm5vdW5jZSBuZXcgaW50ZXJmYWNlLgorCSAqLworCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCBJRkZfVVB8SUZGX1JVTk5JTkcpOworCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfVVAsIGRldik7CisKKwlyZXR1cm4gcmV0OworfQogRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7CiAKLS8qKgotICoJZGV2X2Nsb3NlIC0gc2h1dGRvd24gYW4gaW50ZXJmYWNlLgotICoJQGRldjogZGV2aWNlIHRvIHNodXRkb3duCi0gKgotICoJVGhpcyBmdW5jdGlvbiBtb3ZlcyBhbiBhY3RpdmUgZGV2aWNlIGludG8gZG93biBzdGF0ZS4gQQotICoJJU5FVERFVl9HT0lOR19ET1dOIGlzIHNlbnQgdG8gdGhlIG5ldGRldiBub3RpZmllciBjaGFpbi4gVGhlIGRldmljZQotICoJaXMgdGhlbiBkZWFjdGl2YXRlZCBhbmQgZmluYWxseSBhICVORVRERVZfRE9XTiBpcyBzZW50IHRvIHRoZSBub3RpZmllcgotICoJY2hhaW4uCi0gKi8KLWludCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKKwogCUFTU0VSVF9SVE5MKCk7Ci0KIAltaWdodF9zbGVlcCgpOwogCi0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCXJldHVybiAwOwotCiAJLyoKIAkgKglUZWxsIHBlb3BsZSB3ZSBhcmUgZ29pbmcgZG93biwgc28gdGhhdCB0aGV5IGNhbgogCSAqCXByZXBhcmUgdG8gZGVhdGgsIHdoZW4gZGV2aWNlIGlzIHN0aWxsIG9wZXJhdGluZy4KQEAgLTEyNTIsMTcgKzEyNTQsMzcgQEAKIAlkZXYtPmZsYWdzICY9IH5JRkZfVVA7CiAKIAkvKgotCSAqIFRlbGwgcGVvcGxlIHdlIGFyZSBkb3duCi0JICovCi0JY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ET1dOLCBkZXYpOwotCi0JLyoKIAkgKglTaHV0ZG93biBORVRfRE1BCiAJICovCiAJbmV0X2RtYWVuZ2luZV9wdXQoKTsKIAogCXJldHVybiAwOwogfQorCisvKioKKyAqCWRldl9jbG9zZSAtIHNodXRkb3duIGFuIGludGVyZmFjZS4KKyAqCUBkZXY6IGRldmljZSB0byBzaHV0ZG93bgorICoKKyAqCVRoaXMgZnVuY3Rpb24gbW92ZXMgYW4gYWN0aXZlIGRldmljZSBpbnRvIGRvd24gc3RhdGUuIEEKKyAqCSVORVRERVZfR09JTkdfRE9XTiBpcyBzZW50IHRvIHRoZSBuZXRkZXYgbm90aWZpZXIgY2hhaW4uIFRoZSBkZXZpY2UKKyAqCWlzIHRoZW4gZGVhY3RpdmF0ZWQgYW5kIGZpbmFsbHkgYSAlTkVUREVWX0RPV04gaXMgc2VudCB0byB0aGUgbm90aWZpZXIKKyAqCWNoYWluLgorICovCitpbnQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCXJldHVybiAwOworCisJX19kZXZfY2xvc2UoZGV2KTsKKworCS8qCisJICogVGVsbCBwZW9wbGUgd2UgYXJlIGRvd24KKwkgKi8KKwlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgSUZGX1VQfElGRl9SVU5OSU5HKTsKKwljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RPV04sIGRldik7CisKKwlyZXR1cm4gMDsKK30KIEVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKIAogCkBAIC0xNDQ4LDEzICsxNDcwLDEwIEBACiAJaWYgKHNrYi0+bGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlza2JfZHN0X2Ryb3Aoc2tiKTsKKwlza2Jfc2V0X2Rldihza2IsIGRldik7CiAJc2tiLT50c3RhbXAudHY2NCA9IDA7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0Jc2tiLT5tYXJrID0gMDsKLQlzZWNwYXRoX3Jlc2V0KHNrYik7Ci0JbmZfcmVzZXQoc2tiKTsKIAlyZXR1cm4gbmV0aWZfcngoc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9mb3J3YXJkX3NrYik7CkBAIC0xNjE0LDYgKzE2MzMsMzYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qKgorICogc2tiX2Rldl9zZXQgLS0gYXNzaWduIGEgbmV3IGRldmljZSB0byBhIGJ1ZmZlcgorICogQHNrYjogYnVmZmVyIGZvciB0aGUgbmV3IGRldmljZQorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKiBJZiBhbiBza2IgaXMgb3duZWQgYnkgYSBkZXZpY2UgYWxyZWFkeSwgd2UgaGF2ZSB0byByZXNldAorICogYWxsIGRhdGEgcHJpdmF0ZSB0byB0aGUgbmFtZXNwYWNlIGEgZGV2aWNlIGJlbG9uZ3MgdG8KKyAqIGJlZm9yZSBhc3NpZ25pbmcgaXQgYSBuZXcgZGV2aWNlLgorICovCisjaWZkZWYgQ09ORklHX05FVF9OUwordm9pZCBza2Jfc2V0X2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNrYl9kc3RfZHJvcChza2IpOworCWlmIChza2ItPmRldiAmJiAhbmV0X2VxKGRldl9uZXQoc2tiLT5kZXYpLCBkZXZfbmV0KGRldikpKSB7CisJCXNlY3BhdGhfcmVzZXQoc2tiKTsKKwkJbmZfcmVzZXQoc2tiKTsKKwkJc2tiX2luaXRfc2VjbWFyayhza2IpOworCQlza2ItPm1hcmsgPSAwOworCQlza2ItPnByaW9yaXR5ID0gMDsKKwkJc2tiLT5uZl90cmFjZSA9IDA7CisJCXNrYi0+aXB2c19wcm9wZXJ0eSA9IDA7CisjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAorCQlza2ItPnRjX2luZGV4ID0gMDsKKyNlbmRpZgorCX0KKwlza2ItPmRldiA9IGRldjsKK30KK0VYUE9SVF9TWU1CT0woc2tiX3NldF9kZXYpOworI2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi8KKwogLyoKICAqIEludmFsaWRhdGUgaGFyZHdhcmUgY2hlY2tzdW0gd2hlbiBwYWNrZXQgaXMgdG8gYmUgbWFuZ2xlZCwgYW5kCiAgKiBjb21wbGV0ZSBjaGVja3N1bSBtYW51YWxseSBvbiBvdXRnb2luZyBwYXRoLgpAQCAtMTg1Myw2ICsxOTAyLDE0IEBACiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgZGV2aWNlIGRvZXNudCBuZWVkIG5za2ItPmRzdCwgcmVsZWFzZSBpdCByaWdodCBub3cgd2hpbGUKKwkJICogaXRzIGhvdCBpbiB0aGlzIGNwdSBjYWNoZQorCQkgKi8KKwkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9YTUlUX0RTVF9SRUxFQVNFKQorCQkJc2tiX2RzdF9kcm9wKG5za2IpOworCiAJCXJjID0gb3BzLT5uZG9fc3RhcnRfeG1pdChuc2tiLCBkZXYpOwogCQlpZiAodW5saWtlbHkocmMgIT0gTkVUREVWX1RYX09LKSkgewogCQkJaWYgKHJjICYgfk5FVERFVl9UWF9NQVNLKQpAQCAtMTk3NCw2ICsyMDMxLDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKgorICogUmV0dXJucyB0cnVlIGlmIGVpdGhlcjoKKyAqCTEuIHNrYiBoYXMgZnJhZ19saXN0IGFuZCB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBGUkFHTElTVCwgb3IKKyAqCTIuIHNrYiBpcyBmcmFnbWVudGVkIGFuZCB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgU0csIG9yIGlmCisgKgkgICBhdCBsZWFzdCBvbmUgb2YgZnJhZ21lbnRzIGlzIGluIGhpZ2htZW0gYW5kIGRldmljZSBkb2VzIG5vdAorICoJICAgc3VwcG9ydCBETUEgZnJvbSBpdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tiX25lZWRzX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChza2JfaGFzX2ZyYWdzKHNrYikgJiYgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GUkFHTElTVCkpIHx8CisJICAgICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICYmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB8fAorCQkJCQkgICAgICBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpKSk7Cit9CisKIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0yMDEwLDE4ICsyMDgyLDggQEAKIAlpZiAobmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiKSkKIAkJZ290byBnc287CiAKLQlpZiAoc2tiX2hhc19mcmFncyhza2IpICYmCi0JICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlJBR0xJU1QpICYmCi0JICAgIF9fc2tiX2xpbmVhcml6ZShza2IpKQotCQlnb3RvIG91dF9rZnJlZV9za2I7Ci0KLQkvKiBGcmFnbWVudGVkIHNrYiBpcyBsaW5lYXJpemVkIGlmIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFNHLAotCSAqIG9yIGlmIGF0IGxlYXN0IG9uZSBvZiBmcmFnbWVudHMgaXMgaW4gaGlnaG1lbSBhbmQgZGV2aWNlCi0JICogZG9lcyBub3Qgc3VwcG9ydCBETUEgZnJvbSBpdC4KLQkgKi8KLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJgotCSAgICAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgfHwgaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSkgJiYKLQkgICAgX19za2JfbGluZWFyaXplKHNrYikpCisJLyogQ29udmVydCBhIHBhZ2VkIHNrYiB0byBsaW5lYXIsIGlmIHJlcXVpcmVkICovCisJaWYgKHNrYl9uZWVkc19saW5lYXJpemUoc2tiLCBkZXYpICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKQogCQlnb3RvIG91dF9rZnJlZV9za2I7CiAKIAkvKiBJZiBwYWNrZXQgaXMgbm90IGNoZWNrc3VtbWVkIGFuZCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydApAQCAtMjA0MSw3ICsyMTAzLDcgQEAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAKIAl0eHEgPSBkZXZfcGlja190eChkZXYsIHNrYik7Ci0JcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKKwlxID0gcmN1X2RlcmVmZXJlbmNlX2JoKHR4cS0+cWRpc2MpOwogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJc2tiLT50Y192ZXJkID0gU0VUX1RDX0FUKHNrYi0+dGNfdmVyZCwgQVRfRUdSRVNTKTsKQEAgLTI0MjIsNiArMjQ4NCw3IEBACiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgKnB0X3ByZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpudWxsX29yX29yaWc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm51bGxfb3JfYm9uZDsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAJX19iZTE2IHR5cGU7CiAKQEAgLTI0ODcsMTIgKzI1NTAsMjQgQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIE1ha2Ugc3VyZSBmcmFtZXMgcmVjZWl2ZWQgb24gVkxBTiBpbnRlcmZhY2VzIHN0YWNrZWQgb24KKwkgKiBib25kaW5nIGludGVyZmFjZXMgc3RpbGwgbWFrZSB0aGVpciB3YXkgdG8gYW55IGJhc2UgYm9uZGluZworCSAqIGRldmljZSB0aGF0IG1heSBoYXZlIHJlZ2lzdGVyZWQgZm9yIGEgc3BlY2lmaWMgcHR5cGUuICBUaGUKKwkgKiBoYW5kbGVyIG1heSBoYXZlIHRvIGFkanVzdCBza2ItPmRldiBhbmQgb3JpZ19kZXYuCisJICovCisJbnVsbF9vcl9ib25kID0gTlVMTDsKKwlpZiAoKHNrYi0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSAmJgorCSAgICAodmxhbl9kZXZfcmVhbF9kZXYoc2tiLT5kZXYpLT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpKSB7CisJCW51bGxfb3JfYm9uZCA9IHZsYW5fZGV2X3JlYWxfZGV2KHNrYi0+ZGV2KTsKKwl9CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewotCQlpZiAocHR5cGUtPnR5cGUgPT0gdHlwZSAmJgotCQkgICAgKHB0eXBlLT5kZXYgPT0gbnVsbF9vcl9vcmlnIHx8IHB0eXBlLT5kZXYgPT0gc2tiLT5kZXYgfHwKLQkJICAgICBwdHlwZS0+ZGV2ID09IG9yaWdfZGV2KSkgeworCQlpZiAocHR5cGUtPnR5cGUgPT0gdHlwZSAmJiAocHR5cGUtPmRldiA9PSBudWxsX29yX29yaWcgfHwKKwkJICAgICBwdHlwZS0+ZGV2ID09IHNrYi0+ZGV2IHx8IHB0eXBlLT5kZXYgPT0gb3JpZ19kZXYgfHwKKwkJICAgICBwdHlwZS0+ZGV2ID09IG51bGxfb3JfYm9uZCkpIHsKIAkJCWlmIChwdF9wcmV2KQogCQkJCXJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgcHRfcHJldiwgb3JpZ19kZXYpOwogCQkJcHRfcHJldiA9IHB0eXBlOwpAQCAtMjU2MSw3ICsyNjM2LDcgQEAKIAlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIH0KIAotdm9pZCBuYXBpX2dyb19mbHVzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCitzdGF0aWMgdm9pZCBuYXBpX2dyb19mbHVzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7CiAKQEAgLTI1NzQsNyArMjY0OSw2IEBACiAJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZsdXNoKTsKIAogZW51bSBncm9fcmVzdWx0IGRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0yOTY2LDcgKzMwNDAsNyBAQAogCQkgKiBlbnRyaWVzIHRvIHRoZSB0YWlsIG9mIHRoaXMgbGlzdCwgYW5kIG9ubHkgLT5wb2xsKCkKIAkJICogY2FsbHMgY2FuIHJlbW92ZSB0aGlzIGhlYWQgZW50cnkgZnJvbSB0aGUgbGlzdC4KIAkJICovCi0JCW4gPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBuYXBpX3N0cnVjdCwgcG9sbF9saXN0KTsKKwkJbiA9IGxpc3RfZmlyc3RfZW50cnkobGlzdCwgc3RydWN0IG5hcGlfc3RydWN0LCBwb2xsX2xpc3QpOwogCiAJCWhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuKTsKIApAQCAtMzE4NSw3ICszMjU5LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKGRldik7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIiU2czolOGx1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlMTBsdSAlOWx1ICIKKwlzZXFfcHJpbnRmKHNlcSwgIiU2czogJTdsdSAlN2x1ICU0bHUgJTRsdSAlNGx1ICU1bHUgJTEwbHUgJTlsdSAiCiAJCSAgICIlOGx1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlN2x1ICUxMGx1XG4iLAogCQkgICBkZXYtPm5hbWUsIHN0YXRzLT5yeF9ieXRlcywgc3RhdHMtPnJ4X3BhY2tldHMsCiAJCSAgIHN0YXRzLT5yeF9lcnJvcnMsCkBAIC0zNjQwLDEwICszNzE0LDEwIEBACiAJCS8qIFVuaWNhc3QgYWRkcmVzc2VzIGNoYW5nZXMgbWF5IG9ubHkgaGFwcGVuIHVuZGVyIHRoZSBydG5sLAogCQkgKiB0aGVyZWZvcmUgY2FsbGluZyBfX2Rldl9zZXRfcHJvbWlzY3VpdHkgaGVyZSBpcyBzYWZlLgogCQkgKi8KLQkJaWYgKGRldi0+dWMuY291bnQgPiAwICYmICFkZXYtPnVjX3Byb21pc2MpIHsKKwkJaWYgKCFuZXRkZXZfdWNfZW1wdHkoZGV2KSAmJiAhZGV2LT51Y19wcm9taXNjKSB7CiAJCQlfX2Rldl9zZXRfcHJvbWlzY3VpdHkoZGV2LCAxKTsKIAkJCWRldi0+dWNfcHJvbWlzYyA9IDE7Ci0JCX0gZWxzZSBpZiAoZGV2LT51Yy5jb3VudCA9PSAwICYmIGRldi0+dWNfcHJvbWlzYykgeworCQl9IGVsc2UgaWYgKG5ldGRldl91Y19lbXB0eShkZXYpICYmIGRldi0+dWNfcHJvbWlzYykgewogCQkJX19kZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgLTEpOwogCQkJZGV2LT51Y19wcm9taXNjID0gMDsKIAkJfQpAQCAtNDIxMSw3ICs0Mjg1LDcgQEAKIAluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKIAogCV9fZGV2X2FkZHJfZGlzY2FyZCgmZGV2LT5tY19saXN0KTsKLQlkZXYtPm1jX2NvdW50ID0gMDsKKwluZXRkZXZfbWNfY291bnQoZGV2KSA9IDA7CiAKIAluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogfQpAQCAtNDI0NywxOCArNDMyMSwxMCBAQAogfQogRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2ZsYWdzKTsKIAotLyoqCi0gKglkZXZfY2hhbmdlX2ZsYWdzIC0gY2hhbmdlIGRldmljZSBzZXR0aW5ncwotICoJQGRldjogZGV2aWNlCi0gKglAZmxhZ3M6IGRldmljZSBzdGF0ZSBmbGFncwotICoKLSAqCUNoYW5nZSBzZXR0aW5ncyBvbiBkZXZpY2UgYmFzZWQgc3RhdGUgZmxhZ3MuIFRoZSBmbGFncyBhcmUKLSAqCWluIHRoZSB1c2Vyc3BhY2UgZXhwb3J0ZWQgZm9ybWF0LgotICovCi1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBmbGFncykKK2ludCBfX2Rldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWludCByZXQsIGNoYW5nZXM7CiAJaW50IG9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CisJaW50IHJldDsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTQyODksMTcgKzQzNTUsMTIgQEAKIAogCXJldCA9IDA7CiAJaWYgKChvbGRfZmxhZ3MgXiBmbGFncykgJiBJRkZfVVApIHsJLyogQml0IGlzIGRpZmZlcmVudCAgPyAqLwotCQlyZXQgPSAoKG9sZF9mbGFncyAmIElGRl9VUCkgPyBkZXZfY2xvc2UgOiBkZXZfb3BlbikoZGV2KTsKKwkJcmV0ID0gKChvbGRfZmxhZ3MgJiBJRkZfVVApID8gX19kZXZfY2xvc2UgOiBfX2Rldl9vcGVuKShkZXYpOwogCiAJCWlmICghcmV0KQogCQkJZGV2X3NldF9yeF9tb2RlKGRldik7CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYKLQkgICAgKChvbGRfZmxhZ3MgXiBkZXYtPmZsYWdzKSAmIH4oSUZGX1VQIHwgSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkgfAotCQkJCQkgIElGRl9WT0xBVElMRSkpKQotCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRSwgZGV2KTsKLQogCWlmICgoZmxhZ3MgXiBkZXYtPmdmbGFncykgJiBJRkZfUFJPTUlTQykgewogCQlpbnQgaW5jID0gKGZsYWdzICYgSUZGX1BST01JU0MpID8gMSA6IC0xOwogCkBAIC00MzE4LDExICs0Mzc5LDQ3IEBACiAJCWRldl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMpOwogCX0KIAotCS8qIEV4Y2x1ZGUgc3RhdGUgdHJhbnNpdGlvbiBmbGFncywgYWxyZWFkeSBub3RpZmllZCAqLwotCWNoYW5nZXMgPSAob2xkX2ZsYWdzIF4gZGV2LT5mbGFncykgJiB+KElGRl9VUCB8IElGRl9SVU5OSU5HKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzKQoreworCXVuc2lnbmVkIGludCBjaGFuZ2VzID0gZGV2LT5mbGFncyBeIG9sZF9mbGFnczsKKworCWlmIChjaGFuZ2VzICYgSUZGX1VQKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQorCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9VUCwgZGV2KTsKKwkJZWxzZQorCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ET1dOLCBkZXYpOworCX0KKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQICYmCisJICAgIChjaGFuZ2VzICYgfihJRkZfVVAgfCBJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSB8IElGRl9WT0xBVElMRSkpKQorCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRSwgZGV2KTsKK30KKworLyoqCisgKglkZXZfY2hhbmdlX2ZsYWdzIC0gY2hhbmdlIGRldmljZSBzZXR0aW5ncworICoJQGRldjogZGV2aWNlCisgKglAZmxhZ3M6IGRldmljZSBzdGF0ZSBmbGFncworICoKKyAqCUNoYW5nZSBzZXR0aW5ncyBvbiBkZXZpY2UgYmFzZWQgc3RhdGUgZmxhZ3MuIFRoZSBmbGFncyBhcmUKKyAqCWluIHRoZSB1c2Vyc3BhY2UgZXhwb3J0ZWQgZm9ybWF0LgorICovCitpbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0LCBjaGFuZ2VzOworCWludCBvbGRfZmxhZ3MgPSBkZXYtPmZsYWdzOworCisJcmV0ID0gX19kZXZfY2hhbmdlX2ZsYWdzKGRldiwgZmxhZ3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2hhbmdlcyA9IG9sZF9mbGFncyBeIGRldi0+ZmxhZ3M7CiAJaWYgKGNoYW5nZXMpCiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCBjaGFuZ2VzKTsKIAorCV9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2NoYW5nZV9mbGFncyk7CkBAIC00ODEzLDYgKzQ5MTAsMTAgQEAKIAkJKi8KIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9VTlJFR0lTVEVSLCBkZXYpOwogCisJCWlmICghZGV2LT5ydG5sX2xpbmtfb3BzIHx8CisJCSAgICBkZXYtPnJ0bmxfbGlua19zdGF0ZSA9PSBSVE5MX0xJTktfSU5JVElBTElaRUQpCisJCQlydG1zZ19pZmluZm8oUlRNX0RFTExJTkssIGRldiwgfjBVKTsKKwogCQkvKgogCQkgKglGbHVzaCB0aGUgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGNoYWlucwogCQkgKi8KQEAgLTQ4MzAsNyArNDkzMSw3IEBACiAJfQogCiAJLyogUHJvY2VzcyBhbnkgd29yayBkZWxheWVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoICovCi0JZGV2ID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0X2RldmljZSwgdW5yZWdfbGlzdCk7CisJZGV2ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgbmV0X2RldmljZSwgdW5yZWdfbGlzdCk7CiAJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9VTlJFR0lTVEVSX0JBVENILCBkZXYpOwogCiAJc3luY2hyb25pemVfbmV0KCk7CkBAIC01MDM5LDcgKzUxNDAsOSBAQAogCSAqCVByZXZlbnQgdXNlcnNwYWNlIHJhY2VzIGJ5IHdhaXRpbmcgdW50aWwgdGhlIG5ldHdvcmsKIAkgKglkZXZpY2UgaXMgZnVsbHkgc2V0dXAgYmVmb3JlIHNlbmRpbmcgbm90aWZpY2F0aW9ucy4KIAkgKi8KLQlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgfjBVKTsKKwlpZiAoIWRldi0+cnRubF9saW5rX29wcyB8fAorCSAgICBkZXYtPnJ0bmxfbGlua19zdGF0ZSA9PSBSVE5MX0xJTktfSU5JVElBTElaRUQpCisJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCB+MFUpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTUyMTYsNyArNTMxOSw3IEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKLQkJCT0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBuZXRfZGV2aWNlLCB0b2RvX2xpc3QpOworCQkJPSBsaXN0X2ZpcnN0X2VudHJ5KCZsaXN0LCBzdHJ1Y3QgbmV0X2RldmljZSwgdG9kb19saXN0KTsKIAkJbGlzdF9kZWwoJmRldi0+dG9kb19saXN0KTsKIAogCQlpZiAodW5saWtlbHkoZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOUkVHSVNURVJJTkcpKSB7CkBAIC01MzY3LDYgKzU0NzAsOCBAQAogCiAJbmV0ZGV2X2luaXRfcXVldWVzKGRldik7CiAKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5ldGh0b29sX250dXBsZV9saXN0Lmxpc3QpOworCWRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5jb3VudCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+bmFwaV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT51bnJlZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5saW5rX3dhdGNoX2xpc3QpOwpAQCAtNTQwMyw2ICs1NTA4LDkgQEAKIAkvKiBGbHVzaCBkZXZpY2UgYWRkcmVzc2VzICovCiAJZGV2X2FkZHJfZmx1c2goZGV2KTsKIAorCS8qIENsZWFyIGV0aHRvb2wgbi10dXBsZSBsaXN0ICovCisJZXRodG9vbF9udHVwbGVfZmx1c2goZGV2KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZGV2LT5uYXBpX2xpc3QsIGRldl9saXN0KQogCQluZXRpZl9uYXBpX2RlbChwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X21jYXN0LmMgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwppbmRleCA5ZTJmYTM5Li5mZDkxNTY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfbWNhc3QuYworKysgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwpAQCAtOTYsNiArOTYsOCBAQAogCWludCBlcnI7CiAKIAluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKKwlpZiAoYWxlbiAhPSBkZXYtPmFkZHJfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKIAllcnIgPSBfX2Rldl9hZGRyX2FkZCgmZGV2LT5tY19saXN0LCAmZGV2LT5tY19jb3VudCwgYWRkciwgYWxlbiwgZ2xibCk7CiAJaWYgKCFlcnIpCiAJCV9fZGV2X3NldF9yeF9tb2RlKGRldik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCmluZGV4IGI4ZTlkM2EuLmY4Yzg3NDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0yOTYsNyArMjk2LDYgQEAKIAogCQluZXdfc3RhdC0+ZGV2ID0gZGV2OwogCQluZXdfc3RhdC0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCUlOSVRfUkNVX0hFQUQoJm5ld19zdGF0LT5yY3UpOwogCQlzcGluX2xvY2soJnRyYWNlX3N0YXRlX2xvY2spOwogCQlsaXN0X2FkZF9yY3UoJm5ld19zdGF0LT5saXN0LCAmaHdfc3RhdHNfbGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZ0cmFjZV9zdGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCAyMzZhOTk4Li4wZjJmODIxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIE5FVElGX0ZfeHh4IHZhbHVlcyBpbiBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiAgKi8KIHN0YXRpYyBjb25zdCB1MzIgZmxhZ3NfZHVwX2ZlYXR1cmVzID0KLQlFVEhfRkxBR19MUk87CisJKEVUSF9GTEFHX0xSTyB8IEVUSF9GTEFHX05UVVBMRSk7CiAKIHUzMiBldGh0b29sX29wX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTM0LDE5ICsxMzQsNDQgQEAKIAogaW50IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewotCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOwogCisJaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pCisJCWZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCWVsc2UKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCisJaWYgKGRhdGEgJiBFVEhfRkxBR19OVFVQTEUpIHsKKwkJaWYgKCFvcHMtPnNldF9yeF9udHVwbGUpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWZlYXR1cmVzIHw9IE5FVElGX0ZfTlRVUExFOworCX0gZWxzZSB7CisJCS8qIHNhZmUgdG8gY2xlYXIgcmVnYXJkbGVzcyAqLworCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9OVFVQTEU7CisJfQorCisJZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwogCXJldHVybiAwOwogfQogCit2b2lkIGV0aHRvb2xfbnR1cGxlX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlY19jb250YWluZXIgKmZzYywgKmY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnNjLCBmLCAmZGV2LT5ldGh0b29sX250dXBsZV9saXN0Lmxpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmZzYy0+bGlzdCk7CisJCWtmcmVlKGZzYyk7CisJfQorCWRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5jb3VudCA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGV0aHRvb2xfbnR1cGxlX2ZsdXNoKTsKKwogLyogSGFuZGxlcnMgZm9yIGVhY2ggZXRodG9vbCBjb21tYW5kICovCiAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewotCXN0cnVjdCBldGh0b29sX2NtZCBjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OworCXN0cnVjdCBldGh0b29sX2NtZCBjbWQgPSB7IC5jbWQgPSBFVEhUT09MX0dTRVQgfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpCkBAIC0xNzQsNyArMTk5LDEwIEBACiAJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9zZXR0aW5ncyhkZXYsICZjbWQpOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorLyoKKyAqIG5vaW5saW5lIGF0dHJpYnV0ZSBzbyB0aGF0IGdjYyBkb2VzbnQgdXNlIHRvbyBtdWNoIHN0YWNrIGluIGRldl9ldGh0b29sKCkKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm87CiAJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwpAQCAtMjA5LDcgKzIzNywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKKy8qCisgKiBub2lubGluZSBhdHRyaWJ1dGUgc28gdGhhdCBnY2MgZG9lc250IHVzZSB0b28gbXVjaCBzdGFjayBpbiBkZXZfZXRodG9vbCgpCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZXRodG9vbF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGNtZDsKIApAQCAtMjIyLDcgKzI1MywxMCBAQAogCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhuZmMoZGV2LCAmY21kKTsKIH0KIAotc3RhdGljIGludCBldGh0b29sX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCisvKgorICogbm9pbmxpbmUgYXR0cmlidXRlIHNvIHRoYXQgZ2NjIGRvZXNudCB1c2UgdG9vIG11Y2ggc3RhY2sgaW4gZGV2X2V0aHRvb2woKQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGV0aHRvb2xfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9yeG5mYyBpbmZvOwogCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKQEAgLTI2Niw2ICszMDAsMzE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX19yeF9udHVwbGVfZmlsdGVyX2FkZChzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfbGlzdCAqbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgKnNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjX2NvbnRhaW5lciAqZnNjKQoreworCisJLyogZG9uJ3QgYWRkIGZpbHRlcnMgZm9yZXZlciAqLworCWlmIChsaXN0LT5jb3VudCA+PSBFVEhUT09MX01BWF9OVFVQTEVfTElTVF9FTlRSWSkgeworCQkvKiBmcmVlIHRoZSBjb250YWluZXIgKi8KKwkJa2ZyZWUoZnNjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENvcHkgdGhlIHdob2xlIGZpbHRlciBvdmVyICovCisJZnNjLT5mcy5mbG93X3R5cGUgPSBzcGVjLT5mbG93X3R5cGU7CisJbWVtY3B5KCZmc2MtPmZzLmhfdSwgJnNwZWMtPmhfdSwgc2l6ZW9mKHNwZWMtPmhfdSkpOworCW1lbWNweSgmZnNjLT5mcy5tX3UsICZzcGVjLT5tX3UsIHNpemVvZihzcGVjLT5tX3UpKTsKKworCWZzYy0+ZnMudmxhbl90YWcgPSBzcGVjLT52bGFuX3RhZzsKKwlmc2MtPmZzLnZsYW5fdGFnX21hc2sgPSBzcGVjLT52bGFuX3RhZ19tYXNrOworCWZzYy0+ZnMuZGF0YSA9IHNwZWMtPmRhdGE7CisJZnNjLT5mcy5kYXRhX21hc2sgPSBzcGVjLT5kYXRhX21hc2s7CisJZnNjLT5mcy5hY3Rpb24gPSBzcGVjLT5hY3Rpb247CisKKwkvKiBhZGQgdG8gdGhlIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsX3JjdSgmZnNjLT5saXN0LCAmbGlzdC0+bGlzdCk7CisJbGlzdC0+Y291bnQrKzsKK30KKworLyoKKyAqIG5vaW5saW5lIGF0dHJpYnV0ZSBzbyB0aGF0IGdjYyBkb2VzbnQgdXNlIHRvbyBtdWNoIHN0YWNrIGluIGRldl9ldGh0b29sKCkKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBldGh0b29sX3NldF9yeF9udHVwbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZSBjbWQ7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWNfY29udGFpbmVyICpmc2MgPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OVFVQTEUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyYWRkciwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qCisJICogQ2FjaGUgZmlsdGVyIGluIGRldiBzdHJ1Y3QgZm9yIEdFVCBvcGVyYXRpb24gb25seSBpZgorCSAqIHRoZSB1bmRlcmx5aW5nIGRyaXZlciBkb2Vzbid0IGhhdmUgaXRzIG93biBHRVQgb3BlcmF0aW9uLCBhbmQKKwkgKiBvbmx5IGlmIHRoZSBmaWx0ZXIgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseS4gIEZpcnN0IG1ha2Ugc3VyZSB3ZQorCSAqIGNhbiBhbGxvY2F0ZSB0aGUgZmlsdGVyLCB0aGVuIGNvbnRpbnVlIGlmIHN1Y2Nlc3NmdWwuCisJICovCisJaWYgKCFvcHMtPmdldF9yeF9udHVwbGUpIHsKKwkJZnNjID0ga21hbGxvYyhzaXplb2YoKmZzYyksIEdGUF9BVE9NSUMpOworCQlpZiAoIWZzYykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IG9wcy0+c2V0X3J4X250dXBsZShkZXYsICZjbWQpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoZnNjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIW9wcy0+Z2V0X3J4X250dXBsZSkKKwkJX19yeF9udHVwbGVfZmlsdGVyX2FkZCgmZGV2LT5ldGh0b29sX250dXBsZV9saXN0LCAmY21kLmZzLCBmc2MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBldGh0b29sX2dldF9yeF9udHVwbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCXN0cnVjdCBldGh0b29sX2dzdHJpbmdzIGdzdHJpbmdzOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjX2NvbnRhaW5lciAqZnNjOworCXU4ICpkYXRhOworCWNoYXIgKnA7CisJaW50IHJldCwgaSwgbnVtX3N0cmluZ3MgPSAwOworCisJaWYgKCFvcHMtPmdldF9zc2V0X2NvdW50KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmdzdHJpbmdzLCB1c2VyYWRkciwgc2l6ZW9mKGdzdHJpbmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gb3BzLT5nZXRfc3NldF9jb3VudChkZXYsIGdzdHJpbmdzLnN0cmluZ19zZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZ3N0cmluZ3MubGVuID0gcmV0OworCisJZGF0YSA9IGttYWxsb2MoZ3N0cmluZ3MubGVuICogRVRIX0dTVFJJTkdfTEVOLCBHRlBfVVNFUik7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChvcHMtPmdldF9yeF9udHVwbGUpIHsKKwkJLyogZHJpdmVyLXNwZWNpZmljIGZpbHRlciBncmFiICovCisJCXJldCA9IG9wcy0+Z2V0X3J4X250dXBsZShkZXYsIGdzdHJpbmdzLnN0cmluZ19zZXQsIGRhdGEpOworCQlnb3RvIGNvcHk7CisJfQorCisJLyogZGVmYXVsdCBldGh0b29sIGZpbHRlciBncmFiICovCisJaSA9IDA7CisJcCA9IChjaGFyICopZGF0YTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZzYywgJmRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5saXN0LCBsaXN0KSB7CisJCXNwcmludGYocCwgIkZpbHRlciAlZDpcbiIsIGkpOworCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJbnVtX3N0cmluZ3MrKzsKKworCQlzd2l0Y2ggKGZzYy0+ZnMuZmxvd190eXBlKSB7CisJCWNhc2UgVENQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogVENQXG4iKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIFVEUF9WNF9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRGbG93IFR5cGU6IFVEUFxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogU0NUUFxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJY2FzZSBBSF9FU1BfVjRfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBBSCBFU1BcbiIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogRVNQXG4iKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIElQX1VTRVJfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBSYXcgSVBcbiIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgSVBWNF9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRGbG93IFR5cGU6IElQdjRcbiIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogVW5rbm93blxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlnb3RvIHVua25vd25fZmlsdGVyOworCQl9OworCisJCS8qIG5vdyB0aGUgcmVzdCBvZiB0aGUgZmlsdGVycyAqLworCQlzd2l0Y2ggKGZzYy0+ZnMuZmxvd190eXBlKSB7CisJCWNhc2UgVENQX1Y0X0ZMT1c6CisJCWNhc2UgVURQX1Y0X0ZMT1c6CisJCWNhc2UgU0NUUF9WNF9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdFNyYyBJUCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0U3JjIFBvcnQ6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS50Y3BfaXA0X3NwZWMucHNyYywKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IFBvcnQ6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS50Y3BfaXA0X3NwZWMucGRzdCwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRUT1M6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS50Y3BfaXA0X3NwZWMudG9zLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS50Y3BfaXA0X3NwZWMudG9zKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCQljYXNlIEVTUF9WNF9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UuYWhfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0U3JjIElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LmFoX2lwNF9zcGVjLmlwNHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UuYWhfaXA0X3NwZWMuaXA0ZHN0KTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS5haF9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRTUEk6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS5haF9pcDRfc3BlYy5zcGksCisJCQkgICAgICAgIGZzYy0+ZnMubV91LmFoX2lwNF9zcGVjLnNwaSk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdFRPUzogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LmFoX2lwNF9zcGVjLnRvcywKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UuYWhfaXA0X3NwZWMudG9zKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIElQX1VTRVJfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0U3JjIElQIGFkZHI6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnJhd19pcDRfc3BlYy5pcDRzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UucmF3X2lwNF9zcGVjLmlwNHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UucmF3X2lwNF9zcGVjLmlwNGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgSVAgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UucmF3X2lwNF9zcGVjLmlwNGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJY2FzZSBJUFY0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdFNyYyBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS51c3JfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0U3JjIElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnVzcl9pcDRfc3BlYy5pcDRzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IElQIGFkZHI6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnVzcl9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnVzcl9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRMNCBieXRlczogMHgleCwgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0VE9TOiAlZCwgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UudXNyX2lwNF9zcGVjLnRvcywKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudXNyX2lwNF9zcGVjLnRvcyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdElQIFZlcnNpb246ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS51c3JfaXA0X3NwZWMuaXBfdmVyLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS51c3JfaXA0X3NwZWMuaXBfdmVyKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0UHJvdG9jb2w6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS51c3JfaXA0X3NwZWMucHJvdG8sCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnVzcl9pcDRfc3BlYy5wcm90byk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJfTsKKwkJc3ByaW50ZihwLCAiXHRWTEFOOiAlZCwgbWFzazogMHgleFxuIiwKKwkJICAgICAgICBmc2MtPmZzLnZsYW5fdGFnLCBmc2MtPmZzLnZsYW5fdGFnX21hc2spOworCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJbnVtX3N0cmluZ3MrKzsKKwkJc3ByaW50ZihwLCAiXHRVc2VyLWRlZmluZWQ6IDB4JUx4XG4iLCBmc2MtPmZzLmRhdGEpOworCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJbnVtX3N0cmluZ3MrKzsKKwkJc3ByaW50ZihwLCAiXHRVc2VyLWRlZmluZWQgbWFzazogMHglTHhcbiIsIGZzYy0+ZnMuZGF0YV9tYXNrKTsKKwkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCW51bV9zdHJpbmdzKys7CisJCWlmIChmc2MtPmZzLmFjdGlvbiA9PSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKQorCQkJc3ByaW50ZihwLCAiXHRBY3Rpb246IERyb3BcbiIpOworCQllbHNlCisJCQlzcHJpbnRmKHAsICJcdEFjdGlvbjogRGlyZWN0IHRvIHF1ZXVlICVkXG4iLAorCQkJICAgICAgICBmc2MtPmZzLmFjdGlvbik7CisJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQludW1fc3RyaW5ncysrOwordW5rbm93bl9maWx0ZXI6CisJCWkrKzsKKwl9Citjb3B5OgorCS8qIGluZGljYXRlIHRvIHVzZXJzcGFjZSBob3cgbWFueSBzdHJpbmdzIHdlIGFjdHVhbGx5IGhhdmUgKi8KKwlnc3RyaW5ncy5sZW4gPSBudW1fc3RyaW5nczsKKwlyZXQgPSAtRUZBVUxUOworCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZnc3RyaW5ncywgc2l6ZW9mKGdzdHJpbmdzKSkpCisJCWdvdG8gb3V0OworCXVzZXJhZGRyICs9IHNpemVvZihnc3RyaW5ncyk7CisJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgZGF0YSwgZ3N0cmluZ3MubGVuICogRVRIX0dTVFJJTkdfTEVOKSkKKwkJZ290byBvdXQ7CisJcmV0ID0gMDsKKworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcmVncyByZWdzOwpAQCAtMzI0LDcgKzY2Nyw3IEBACiAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKIHsKLQlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHdvbCA9IHsgRVRIVE9PTF9HV09MIH07CisJc3RydWN0IGV0aHRvb2xfd29saW5mbyB3b2wgPSB7IC5jbWQgPSBFVEhUT09MX0dXT0wgfTsKIAogCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X3dvbCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNDU2LDkgKzc5OSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorLyoKKyAqIG5vaW5saW5lIGF0dHJpYnV0ZSBzbyB0aGF0IGdjYyBkb2VzbnQgdXNlIHRvbyBtdWNoIHN0YWNrIGluIGRldl9ldGh0b29sKCkKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBldGh0b29sX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7Ci0Jc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgY29hbGVzY2UgPSB7IEVUSFRPT0xfR0NPQUxFU0NFIH07CisJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgY29hbGVzY2UgPSB7IC5jbWQgPSBFVEhUT09MX0dDT0FMRVNDRSB9OwogCiAJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfY29hbGVzY2UpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTQ3MCw3ICs4MTYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBldGh0b29sX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCisvKgorICogbm9pbmxpbmUgYXR0cmlidXRlIHNvIHRoYXQgZ2NjIGRvZXNudCB1c2UgdG9vIG11Y2ggc3RhY2sgaW4gZGV2X2V0aHRvb2woKQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGV0aHRvb2xfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSBjb2FsZXNjZTsKIApAQCAtNDg1LDcgKzgzNCw3IEBACiAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKLQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gcmluZ3BhcmFtID0geyBFVEhUT09MX0dSSU5HUEFSQU0gfTsKKwlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gcmluZ3BhcmFtID0geyAuY21kID0gRVRIVE9PTF9HUklOR1BBUkFNIH07CiAKIAlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9yaW5ncGFyYW0pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTgzOSw3ICsxMTg4LDcgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdmFsdWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyLAogCQkJICAgICB1MzIgY21kLCB1MzIgKCphY3Rvcikoc3RydWN0IG5ldF9kZXZpY2UgKikpCiB7Ci0Jc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGEgPSB7IGNtZCB9OworCXN0cnVjdCBldGh0b29sX3ZhbHVlIGVkYXRhID0geyAuY21kID0gY21kIH07CiAKIAlpZiAoIWFjdG9yKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC04ODAsNyArMTIyOSwxMCBAQAogCXJldHVybiBhY3RvcihkZXYsIGVkYXRhLmRhdGEpOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfZmxhc2hfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKKy8qCisgKiBub2lubGluZSBhdHRyaWJ1dGUgc28gdGhhdCBnY2MgZG9lc250IHVzZSB0b28gbXVjaCBzdGFjayBpbiBkZXZfZXRodG9vbCgpCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZXRodG9vbF9mbGFzaF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX2ZsYXNoIGVmbDsKIApAQCAtMTExMyw2ICsxNDY1LDEyIEBACiAJY2FzZSBFVEhUT09MX1JFU0VUOgogCQlyYyA9IGV0aHRvb2xfcmVzZXQoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhOVFVQTEU6CisJCXJjID0gZXRodG9vbF9zZXRfcnhfbnR1cGxlKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYTlRVUExFOgorCQlyYyA9IGV0aHRvb2xfZ2V0X3J4X250dXBsZShkZXYsIHVzZXJhZGRyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDAyYTNiMmMuLjlhMjQzNzcxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBmaWJfcnVsZXNfZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IGZpYl9ydWxlc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgZmliX3J1bGVzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmbmV0LT5ydWxlc19vcHMpOwogCXNwaW5fbG9ja19pbml0KCZuZXQtPnJ1bGVzX21vZF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMDhkYjdiOS4uZDM4ZWY3ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIpIHsKIAkJdW5zaWduZWQgaW50IHBrdF9sZW4gPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucywKIAkJCQlmaWx0ZXItPmxlbik7CkBAIC01MjEsNyArNTIxLDcgQEAKIAl9CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0Jb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCW9sZF9mcCA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgZnApOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCkBAIC01MjksNiArNTI5LDcgQEAKIAkJc2tfZmlsdGVyX2RlbGF5ZWRfdW5jaGFyZ2Uoc2ssIG9sZF9mcCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza19hdHRhY2hfZmlsdGVyKTsKIAogaW50IHNrX2RldGFjaF9maWx0ZXIoc3RydWN0IHNvY2sgKnNrKQogewpAQCAtNTM2LDcgKzUzNyw3IEBACiAJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlcikgewogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CiAJCXNrX2ZpbHRlcl9kZWxheWVkX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOwpAQCAtNTQ1LDMgKzU0Niw0IEBACiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrX2RldGFjaF9maWx0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCBmMzUzNzdiLi5kMTAyZjZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjQxNyw4ICsyNDE3LDcgQEAKIAogc3RhdGljIHZvaWQgKm5laWdoX3N0YXRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgY3B1OwogCiAJaWYgKCpwb3MgPT0gMCkKQEAgLTI0MzUsOCArMjQzNCw3IEBACiAKIHN0YXRpYyB2b2lkICpuZWlnaF9zdGF0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgY3B1OwogCiAJZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBucl9jcHVfaWRzOyArK2NwdSkgewpAQCAtMjQ1NSw4ICsyNDUzLDcgQEAKIAogc3RhdGljIGludCBuZWlnaF9zdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gcGRlLT5kYXRhOworCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzICpzdCA9IHY7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKQEAgLTI1MDEsNyArMjQ5OCw3IEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzZi0+cHJpdmF0ZSA9IFBERShpbm9kZSk7CisJCXNmLT5wcml2YXRlID0gUERFKGlub2RlKS0+ZGF0YTsKIAl9CiAJcmV0dXJuIHJldDsKIH07CkBAIC0yNTU5LDkgKzI1NTYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAorI2RlZmluZSBORUlHSF9WQVJTX01BWCAxOQorCiBzdGF0aWMgc3RydWN0IG5laWdoX3N5c2N0bF90YWJsZSB7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7Ci0Jc3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW19fTkVUX05FSUdIX01BWF07CisJc3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW05FSUdIX1ZBUlNfTUFYXTsKIAljaGFyICpkZXZfbmFtZTsKIH0gbmVpZ2hfc3lzY3RsX3RlbXBsYXRlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5laWdoX3ZhcnMgPSB7CkBAIC0yNjc4LDggKzI2NzcsNyBAQAogfTsKIAogaW50IG5laWdoX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCi0JCQkgIGludCBwX2lkLCBpbnQgcGRldl9pZCwgY2hhciAqcF9uYW1lLAotCQkJICBwcm9jX2hhbmRsZXIgKmhhbmRsZXIpCisJCQkgIGNoYXIgKnBfbmFtZSwgcHJvY19oYW5kbGVyICpoYW5kbGVyKQogewogCXN0cnVjdCBuZWlnaF9zeXNjdGxfdGFibGUgKnQ7CiAJY29uc3QgY2hhciAqZGV2X25hbWVfc291cmNlID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAwYjRkMGQzLi43YWE2OTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC00MDcsMTEgKzQwNywyNCBAQAogCV9fYmUzMiBzaXAsIHRpcDsKIAl1bnNpZ25lZCBjaGFyICpzaGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNlbmRfc2tiOwotCXN0cnVjdCBuZXRwb2xsICpucCA9IE5VTEw7CisJc3RydWN0IG5ldHBvbGwgKm5wLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGhpdHMgPSAwOwogCi0JaWYgKG5waW5mby0+cnhfbnAgJiYgbnBpbmZvLT5yeF9ucC0+ZGV2ID09IHNrYi0+ZGV2KQotCQlucCA9IG5waW5mby0+cnhfbnA7Ci0JaWYgKCFucCkKKwlpZiAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpCisJCXJldHVybjsKKworCS8qIEJlZm9yZSBjaGVja2luZyB0aGUgcGFja2V0LCB3ZSBkbyBzb21lIGVhcmx5CisJICAgaW5zcGVjdGlvbiB3aGV0aGVyIHRoaXMgaXMgaW50ZXJlc3RpbmcgYXQgYWxsICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgdG1wLCAmbnBpbmZvLT5yeF9ucCwgcngpIHsKKwkJaWYgKG5wLT5kZXYgPT0gc2tiLT5kZXYpCisJCQloaXRzKys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCisJLyogTm8gbmV0cG9sbCBzdHJ1Y3QgaXMgdXNpbmcgdGhpcyBkZXYgKi8KKwlpZiAoIWhpdHMpCiAJCXJldHVybjsKIAogCS8qIE5vIGFycCBvbiB0aGlzIGludGVyZmFjZSAqLwpAQCAtNDM3LDc3ICs0NTAsOTEgQEAKIAlhcnBfcHRyICs9IHNrYi0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnNpcCwgYXJwX3B0ciwgNCk7CiAJYXJwX3B0ciArPSA0OwotCS8qIGlmIHdlIGFjdHVhbGx5IGNhcmVkIGFib3V0IGRzdCBodyBhZGRyLCBpdCB3b3VsZCBnZXQgY29waWVkIGhlcmUgKi8KKwkvKiBJZiB3ZSBhY3R1YWxseSBjYXJlZCBhYm91dCBkc3QgaHcgYWRkciwKKwkgICBpdCB3b3VsZCBnZXQgY29waWVkIGhlcmUgKi8KIAlhcnBfcHRyICs9IHNrYi0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnRpcCwgYXJwX3B0ciwgNCk7CiAKIAkvKiBTaG91bGQgd2UgaWdub3JlIGFycD8gKi8KLQlpZiAodGlwICE9IG5wLT5sb2NhbF9pcCB8fAotCSAgICBpcHY0X2lzX2xvb3BiYWNrKHRpcCkgfHwgaXB2NF9pc19tdWx0aWNhc3QodGlwKSkKKwlpZiAoaXB2NF9pc19sb29wYmFjayh0aXApIHx8IGlwdjRfaXNfbXVsdGljYXN0KHRpcCkpCiAJCXJldHVybjsKIAogCXNpemUgPSBhcnBfaGRyX2xlbihza2ItPmRldik7Ci0Jc2VuZF9za2IgPSBmaW5kX3NrYihucCwgc2l6ZSArIExMX0FMTE9DQVRFRF9TUEFDRShucC0+ZGV2KSwKLQkJCSAgICBMTF9SRVNFUlZFRF9TUEFDRShucC0+ZGV2KSk7CiAKLQlpZiAoIXNlbmRfc2tiKQotCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgdG1wLCAmbnBpbmZvLT5yeF9ucCwgcngpIHsKKwkJaWYgKHRpcCAhPSBucC0+bG9jYWxfaXApCisJCQljb250aW51ZTsKIAotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihzZW5kX3NrYik7Ci0JYXJwID0gKHN0cnVjdCBhcnBoZHIgKikgc2tiX3B1dChzZW5kX3NrYiwgc2l6ZSk7Ci0Jc2VuZF9za2ItPmRldiA9IHNrYi0+ZGV2OwotCXNlbmRfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FSUCk7CisJCXNlbmRfc2tiID0gZmluZF9za2IobnAsIHNpemUgKyBMTF9BTExPQ0FURURfU1BBQ0UobnAtPmRldiksCisJCQkJICAgIExMX1JFU0VSVkVEX1NQQUNFKG5wLT5kZXYpKTsKKwkJaWYgKCFzZW5kX3NrYikKKwkJCWNvbnRpbnVlOwogCi0JLyogRmlsbCB0aGUgZGV2aWNlIGhlYWRlciBmb3IgdGhlIEFSUCBmcmFtZSAqLwotCWlmIChkZXZfaGFyZF9oZWFkZXIoc2VuZF9za2IsIHNrYi0+ZGV2LCBwdHlwZSwKLQkJCSAgICBzaGEsIG5wLT5kZXYtPmRldl9hZGRyLAotCQkJICAgIHNlbmRfc2tiLT5sZW4pIDwgMCkgewotCQlrZnJlZV9za2Ioc2VuZF9za2IpOwotCQlyZXR1cm47CisJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihzZW5kX3NrYik7CisJCWFycCA9IChzdHJ1Y3QgYXJwaGRyICopIHNrYl9wdXQoc2VuZF9za2IsIHNpemUpOworCQlzZW5kX3NrYi0+ZGV2ID0gc2tiLT5kZXY7CisJCXNlbmRfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FSUCk7CisKKwkJLyogRmlsbCB0aGUgZGV2aWNlIGhlYWRlciBmb3IgdGhlIEFSUCBmcmFtZSAqLworCQlpZiAoZGV2X2hhcmRfaGVhZGVyKHNlbmRfc2tiLCBza2ItPmRldiwgcHR5cGUsCisJCQkJICAgIHNoYSwgbnAtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgIHNlbmRfc2tiLT5sZW4pIDwgMCkgeworCQkJa2ZyZWVfc2tiKHNlbmRfc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRmlsbCBvdXQgdGhlIGFycCBwcm90b2NvbCBwYXJ0LgorCQkgKgorCQkgKiB3ZSBvbmx5IHN1cHBvcnQgZXRoZXJuZXQgZGV2aWNlIHR5cGUsCisJCSAqIHdoaWNoIChhY2NvcmRpbmcgdG8gUkZDIDEzOTApIHNob3VsZAorCQkgKiBhbHdheXMgZXF1YWwgMSAoRXRoZXJuZXQpLgorCQkgKi8KKworCQlhcnAtPmFyX2hyZCA9IGh0b25zKG5wLT5kZXYtPnR5cGUpOworCQlhcnAtPmFyX3BybyA9IGh0b25zKEVUSF9QX0lQKTsKKwkJYXJwLT5hcl9obG4gPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJYXJwLT5hcl9wbG4gPSA0OworCQlhcnAtPmFyX29wID0gaHRvbnModHlwZSk7CisKKwkJYXJwX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopKGFycCArIDEpOworCQltZW1jcHkoYXJwX3B0ciwgbnAtPmRldi0+ZGV2X2FkZHIsIG5wLT5kZXYtPmFkZHJfbGVuKTsKKwkJYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJbWVtY3B5KGFycF9wdHIsICZ0aXAsIDQpOworCQlhcnBfcHRyICs9IDQ7CisJCW1lbWNweShhcnBfcHRyLCBzaGEsIG5wLT5kZXYtPmFkZHJfbGVuKTsKKwkJYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJbWVtY3B5KGFycF9wdHIsICZzaXAsIDQpOworCisJCW5ldHBvbGxfc2VuZF9za2IobnAsIHNlbmRfc2tiKTsKKworCQkvKiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCByeF9ob29rcyBmb3IgdGhlIHNhbWUgYWRkcmVzcywKKwkJICAgd2UncmUgZmluZSBieSBzZW5kaW5nIGEgc2luZ2xlIHJlcGx5ICovCisJCWJyZWFrOwogCX0KLQotCS8qCi0JICogRmlsbCBvdXQgdGhlIGFycCBwcm90b2NvbCBwYXJ0LgotCSAqCi0JICogd2Ugb25seSBzdXBwb3J0IGV0aGVybmV0IGRldmljZSB0eXBlLAotCSAqIHdoaWNoIChhY2NvcmRpbmcgdG8gUkZDIDEzOTApIHNob3VsZCBhbHdheXMgZXF1YWwgMSAoRXRoZXJuZXQpLgotCSAqLwotCi0JYXJwLT5hcl9ocmQgPSBodG9ucyhucC0+ZGV2LT50eXBlKTsKLQlhcnAtPmFyX3BybyA9IGh0b25zKEVUSF9QX0lQKTsKLQlhcnAtPmFyX2hsbiA9IG5wLT5kZXYtPmFkZHJfbGVuOwotCWFycC0+YXJfcGxuID0gNDsKLQlhcnAtPmFyX29wID0gaHRvbnModHlwZSk7Ci0KLQlhcnBfcHRyPSh1bnNpZ25lZCBjaGFyICopKGFycCArIDEpOwotCW1lbWNweShhcnBfcHRyLCBucC0+ZGV2LT5kZXZfYWRkciwgbnAtPmRldi0+YWRkcl9sZW4pOwotCWFycF9wdHIgKz0gbnAtPmRldi0+YWRkcl9sZW47Ci0JbWVtY3B5KGFycF9wdHIsICZ0aXAsIDQpOwotCWFycF9wdHIgKz0gNDsKLQltZW1jcHkoYXJwX3B0ciwgc2hhLCBucC0+ZGV2LT5hZGRyX2xlbik7Ci0JYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKLQltZW1jcHkoYXJwX3B0ciwgJnNpcCwgNCk7Ci0KLQluZXRwb2xsX3NlbmRfc2tiKG5wLCBzZW5kX3NrYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBfX25ldHBvbGxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcHJvdG8sIGxlbiwgdWxlbjsKKwlpbnQgaGl0cyA9IDA7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHVkcGhkciAqdWg7Ci0Jc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpID0gc2tiLT5kZXYtPm5waW5mbzsKLQlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBucGktPnJ4X25wOworCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHNrYi0+ZGV2LT5ucGluZm87CisJc3RydWN0IG5ldHBvbGwgKm5wLCAqdG1wOwogCi0JaWYgKCFucCkKKwlpZiAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpCiAJCWdvdG8gb3V0OworCiAJaWYgKHNrYi0+ZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikKIAkJZ290byBvdXQ7CiAKIAkvKiBjaGVjayBpZiBuZXRwb2xsIGNsaWVudHMgbmVlZCBBUlAgKi8KIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApICYmCiAJICAgIGF0b21pY19yZWFkKCZ0cmFwcGVkKSkgewotCQlza2JfcXVldWVfdGFpbCgmbnBpLT5hcnBfdHgsIHNrYik7CisJCXNrYl9xdWV1ZV90YWlsKCZucGluZm8tPmFycF90eCwgc2tiKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC01NTEsMTYgKzU3OCwyMyBAQAogCQlnb3RvIG91dDsKIAlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKLQlpZiAobnAtPmxvY2FsX2lwICYmIG5wLT5sb2NhbF9pcCAhPSBpcGgtPmRhZGRyKQotCQlnb3RvIG91dDsKLQlpZiAobnAtPnJlbW90ZV9pcCAmJiBucC0+cmVtb3RlX2lwICE9IGlwaC0+c2FkZHIpCi0JCWdvdG8gb3V0OwotCWlmIChucC0+bG9jYWxfcG9ydCAmJiBucC0+bG9jYWxfcG9ydCAhPSBudG9ocyh1aC0+ZGVzdCkpCi0JCWdvdG8gb3V0OwogCi0JbnAtPnJ4X2hvb2sobnAsIG50b2hzKHVoLT5zb3VyY2UpLAotCQkgICAgKGNoYXIgKikodWgrMSksCi0JCSAgICB1bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnAsIHRtcCwgJm5waW5mby0+cnhfbnAsIHJ4KSB7CisJCWlmIChucC0+bG9jYWxfaXAgJiYgbnAtPmxvY2FsX2lwICE9IGlwaC0+ZGFkZHIpCisJCQljb250aW51ZTsKKwkJaWYgKG5wLT5yZW1vdGVfaXAgJiYgbnAtPnJlbW90ZV9pcCAhPSBpcGgtPnNhZGRyKQorCQkJY29udGludWU7CisJCWlmIChucC0+bG9jYWxfcG9ydCAmJiBucC0+bG9jYWxfcG9ydCAhPSBudG9ocyh1aC0+ZGVzdCkpCisJCQljb250aW51ZTsKKworCQlucC0+cnhfaG9vayhucCwgbnRvaHModWgtPnNvdXJjZSksCisJCQkgICAgICAgKGNoYXIgKikodWgrMSksCisJCQkgICAgICAgdWxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCWhpdHMrKzsKKwl9CisKKwlpZiAoIWhpdHMpCisJCWdvdG8gb3V0OwogCiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDE7CkBAIC02ODQsNiArNzE4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbzsKKwlzdHJ1Y3QgbmV0cG9sbCAqbnBlLCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtNzA0LDcgKzczOSw3IEBACiAJCX0KIAogCQlucGluZm8tPnJ4X2ZsYWdzID0gMDsKLQkJbnBpbmZvLT5yeF9ucCA9IE5VTEw7CisJCUlOSVRfTElTVF9IRUFEKCZucGluZm8tPnJ4X25wKTsKIAogCQlzcGluX2xvY2tfaW5pdCgmbnBpbmZvLT5yeF9sb2NrKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbnBpbmZvLT5hcnBfdHgpOwpAQCAtNzg1LDcgKzgyMCw3IEBACiAJaWYgKG5wLT5yeF9ob29rKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKIAkJbnBpbmZvLT5yeF9mbGFncyB8PSBORVRQT0xMX1JYX0VOQUJMRUQ7Ci0JCW5waW5mby0+cnhfbnAgPSBucDsKKwkJbGlzdF9hZGRfdGFpbCgmbnAtPnJ4LCAmbnBpbmZvLT5yeF9ucCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCX0KIApAQCAtODAxLDkgKzgzNiwxNiBAQAogCXJldHVybiAwOwogCiAgcmVsZWFzZToKLQlpZiAoIW5kZXYtPm5waW5mbykKKwlpZiAoIW5kZXYtPm5waW5mbykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucGUsIHRtcCwgJm5waW5mby0+cnhfbnAsIHJ4KSB7CisJCQlucGUtPmRldiA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisKIAkJa2ZyZWUobnBpbmZvKTsKLQlucC0+ZGV2ID0gTlVMTDsKKwl9CisKIAlkZXZfcHV0KG5kZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC04MjMsMTAgKzg2NSwxMSBAQAogCWlmIChucC0+ZGV2KSB7CiAJCW5waW5mbyA9IG5wLT5kZXYtPm5waW5mbzsKIAkJaWYgKG5waW5mbykgewotCQkJaWYgKG5waW5mby0+cnhfbnAgPT0gbnApIHsKKwkJCWlmICghbGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7Ci0JCQkJbnBpbmZvLT5yeF9ucCA9IE5VTEw7Ci0JCQkJbnBpbmZvLT5yeF9mbGFncyAmPSB+TkVUUE9MTF9SWF9FTkFCTEVEOworCQkJCWxpc3RfZGVsKCZucC0+cngpOworCQkJCWlmIChsaXN0X2VtcHR5KCZucGluZm8tPnJ4X25wKSkKKwkJCQkJbnBpbmZvLT5yeF9mbGFncyAmPSB+TkVUUE9MTF9SWF9FTkFCTEVEOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCQkJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDJlNjkyYWYuLjQzOTIzODEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yMTg4LDEyICsyMTg4LDEzIEBACiAvKiBJZiB0aGVyZSB3YXMgYWxyZWFkeSBhbiBJUFNFQyBTQSwgd2Uga2VlcCBpdCBhcyBpcywgZWxzZQogICogd2UgZ28gbG9vayBmb3IgaXQgLi4uCiAqLworI2RlZmluZSBEVU1NWV9NQVJLIDAKIHN0YXRpYyB2b2lkIGdldF9pcHNlY19zYShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgaW50IGZsb3cpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBwa3RfZGV2LT5mbG93c1tmbG93XS54OwogCWlmICgheCkgewogCQkvKnNsb3cgcGF0aDogd2UgZG9udCBhbHJlYWR5IGhhdmUgeGZybV9zdGF0ZSovCi0JCXggPSB4ZnJtX3N0YXRlb25seV9maW5kKCZpbml0X25ldCwKKwkJeCA9IHhmcm1fc3RhdGVvbmx5X2ZpbmQoJmluaXRfbmV0LCBEVU1NWV9NQVJLLAogCQkJCQkoeGZybV9hZGRyZXNzX3QgKikmcGt0X2Rldi0+Y3VyX2RhZGRyLAogCQkJCQkoeGZybV9hZGRyZXNzX3QgKikmcGt0X2Rldi0+Y3VyX3NhZGRyLAogCQkJCQlBRl9JTkVULApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTRiY2I4Li40NTY4MTIwZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYWRkci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC04OSw2ICs5MCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChydG5sX2lzX2xvY2tlZCk7CiAKKyNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworaW50IGxvY2tkZXBfcnRubF9pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIGxvY2tkZXBfaXNfaGVsZCgmcnRubF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGxvY2tkZXBfcnRubF9pc19oZWxkKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KKwogc3RhdGljIHN0cnVjdCBydG5sX2xpbmsgKnJ0bmxfbXNnX2hhbmRsZXJzW05QUk9UT107CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0bV9tc2dpbmRleChpbnQgbXNndHlwZSkKQEAgLTU0OCw2ICs1NTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRubF9kZXZfY29tYmluZV9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0pCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gaWZtLT5pZmlfZmxhZ3M7CisKKwkvKiBidWd3YXJkcyBjb21wYXRpYmlsaXR5OiBpZmlfY2hhbmdlID09IDAgaXMgdHJlYXRlZCBhcyB+MCAqLworCWlmIChpZm0tPmlmaV9jaGFuZ2UpCisJCWZsYWdzID0gKGZsYWdzICYgaWZtLT5pZmlfY2hhbmdlKSB8CisJCQkoZGV2LT5mbGFncyAmIH5pZm0tPmlmaV9jaGFuZ2UpOworCisJcmV0dXJuIGZsYWdzOworfQorCiBzdGF0aWMgdm9pZCBjb3B5X3J0bmxfbGlua19zdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzICphLAogCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYikKIHsKQEAgLTU4MCw2ICs2MDIsMTUgQEAKIAlhLT50eF9jb21wcmVzc2VkID0gYi0+dHhfY29tcHJlc3NlZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5kZXYucGFyZW50ICYmIGRldl9pc19wY2koZGV2LT5kZXYucGFyZW50KSkKKwkJcmV0dXJuIGRldl9udW1fdmYoZGV2LT5kZXYucGFyZW50KSAqCisJCQlzaXplb2Yoc3RydWN0IGlmbGFfdmZfaW5mbyk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBzaXplX3QgaWZfbmxtc2dfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCkBAIC01OTcsNiArNjI4LDggQEAKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX01BU1RFUiAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIElGTEFfT1BFUlNUQVRFICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogSUZMQV9MSU5LTU9ERSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTlVNX1ZGICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUocnRubF92ZmluZm9fc2l6ZShkZXYpKSAvKiBJRkxBX1ZGSU5GTyAqLwogCSAgICAgICArIHJ0bmxfbGlua19nZXRfc2l6ZShkZXYpOyAvKiBJRkxBX0xJTktJTkZPICovCiB9CiAKQEAgLTY2NSw2ICs2OTgsMTcgQEAKIAlzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2KTsKIAljb3B5X3J0bmxfbGlua19zdGF0cyhubGFfZGF0YShhdHRyKSwgc3RhdHMpOwogCisJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dldF92Zl9jb25maWcgJiYgZGV2LT5kZXYucGFyZW50KSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWZsYV92Zl9pbmZvIGl2aTsKKworCQlOTEFfUFVUX1UzMihza2IsIElGTEFfTlVNX1ZGLCBkZXZfbnVtX3ZmKGRldi0+ZGV2LnBhcmVudCkpOworCQlmb3IgKGkgPSAwOyBpIDwgZGV2X251bV92ZihkZXYtPmRldi5wYXJlbnQpOyBpKyspIHsKKwkJCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19nZXRfdmZfY29uZmlnKGRldiwgaSwgJml2aSkpCisJCQkJYnJlYWs7CisJCQlOTEFfUFVUKHNrYiwgSUZMQV9WRklORk8sIHNpemVvZihpdmkpLCAmaXZpKTsKKwkJfQorCX0KIAlpZiAoZGV2LT5ydG5sX2xpbmtfb3BzKSB7CiAJCWlmIChydG5sX2xpbmtfZmlsbChza2IsIGRldikgPCAwKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC03MjUsNiArNzY5LDEyIEBACiAJW0lGTEFfTElOS0lORk9dCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW0lGTEFfTkVUX05TX1BJRF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX0lGQUxJQVNdCSAgICAgICAgPSB7IC50eXBlID0gTkxBX1NUUklORywgLmxlbiA9IElGQUxJQVNaLTEgfSwKKwlbSUZMQV9WRl9NQUNdCQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJCSAgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX21hYykgfSwKKwlbSUZMQV9WRl9WTEFOXQkJPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkgICAgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92Zl92bGFuKSB9LAorCVtJRkxBX1ZGX1RYX1JBVEVdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJICAgIC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfdHhfcmF0ZSkgfSwKIH07CiBFWFBPUlRfU1lNQk9MKGlmbGFfcG9saWN5KTsKIApAQCAtODc1LDEzICs5MjUsNyBAQAogCX0KIAogCWlmIChpZm0tPmlmaV9mbGFncyB8fCBpZm0tPmlmaV9jaGFuZ2UpIHsKLQkJdW5zaWduZWQgaW50IGZsYWdzID0gaWZtLT5pZmlfZmxhZ3M7Ci0KLQkJLyogYnVnd2FyZHMgY29tcGF0aWJpbGl0eTogaWZpX2NoYW5nZSA9PSAwIGlzIHRyZWF0ZWQgYXMgfjAgKi8KLQkJaWYgKGlmbS0+aWZpX2NoYW5nZSkKLQkJCWZsYWdzID0gKGZsYWdzICYgaWZtLT5pZmlfY2hhbmdlKSB8Ci0JCQkJKGRldi0+ZmxhZ3MgJiB+aWZtLT5pZmlfY2hhbmdlKTsKLQkJZXJyID0gZGV2X2NoYW5nZV9mbGFncyhkZXYsIGZsYWdzKTsKKwkJZXJyID0gZGV2X2NoYW5nZV9mbGFncyhkZXYsIHJ0bmxfZGV2X2NvbWJpbmVfZmxhZ3MoZGV2LCBpZm0pKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycm91dDsKIAl9CkBAIC04OTgsNiArOTQyLDQxIEBACiAJCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CiAJfQogCisJaWYgKHRiW0lGTEFfVkZfTUFDXSkgeworCQlzdHJ1Y3QgaWZsYV92Zl9tYWMgKml2bTsKKwkJaXZtID0gbmxhX2RhdGEodGJbSUZMQV9WRl9NQUNdKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWlmIChvcHMtPm5kb19zZXRfdmZfbWFjKQorCQkJZXJyID0gb3BzLT5uZG9fc2V0X3ZmX21hYyhkZXYsIGl2bS0+dmYsIGl2bS0+bWFjKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm91dDsKKwkJbW9kaWZpZWQgPSAxOworCX0KKworCWlmICh0YltJRkxBX1ZGX1ZMQU5dKSB7CisJCXN0cnVjdCBpZmxhX3ZmX3ZsYW4gKml2djsKKwkJaXZ2ID0gbmxhX2RhdGEodGJbSUZMQV9WRl9WTEFOXSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlpZiAob3BzLT5uZG9fc2V0X3ZmX3ZsYW4pCisJCQllcnIgPSBvcHMtPm5kb19zZXRfdmZfdmxhbihkZXYsIGl2di0+dmYsCisJCQkJCQkgICBpdnYtPnZsYW4sCisJCQkJCQkgICBpdnYtPnFvcyk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvdXQ7CisJCW1vZGlmaWVkID0gMTsKKwl9CisJZXJyID0gMDsKKworCWlmICh0YltJRkxBX1ZGX1RYX1JBVEVdKSB7CisJCXN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgKml2dDsKKwkJaXZ0ID0gbmxhX2RhdGEodGJbSUZMQV9WRl9UWF9SQVRFXSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlpZiAob3BzLT5uZG9fc2V0X3ZmX3R4X3JhdGUpCisJCQllcnIgPSBvcHMtPm5kb19zZXRfdmZfdHhfcmF0ZShkZXYsIGl2dC0+dmYsIGl2dC0+cmF0ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvdXQ7CisJCW1vZGlmaWVkID0gMTsKKwl9CiAJZXJyID0gMDsKIAogZXJyb3V0OgpAQCAtOTg5LDYgKzEwNjgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtKQoreworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7CisJaW50IGVycjsKKworCW9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CisJaWYgKGlmbSAmJiAoaWZtLT5pZmlfZmxhZ3MgfHwgaWZtLT5pZmlfY2hhbmdlKSkgeworCQllcnIgPSBfX2Rldl9jaGFuZ2VfZmxhZ3MoZGV2LCBydG5sX2Rldl9jb21iaW5lX2ZsYWdzKGRldiwgaWZtKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkZXYtPnJ0bmxfbGlua19zdGF0ZSA9IFJUTkxfTElOS19JTklUSUFMSVpFRDsKKwlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgfjBVKTsKKworCV9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bmxfY29uZmlndXJlX2xpbmspOworCiBzdHJ1Y3QgbmV0X2RldmljZSAqcnRubF9jcmVhdGVfbGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJY2hhciAqaWZuYW1lLCBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogewpAQCAtMTAxMCw2ICsxMTA5LDcgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAlkZXYtPnJ0bmxfbGlua19vcHMgPSBvcHM7CisJZGV2LT5ydG5sX2xpbmtfc3RhdGUgPSBSVE5MX0xJTktfSU5JVElBTElaSU5HOwogCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9udW1fcXVldWVzOwogCiAJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKQEAgLTExMzksNyArMTIzOSw3IEBACiAJCWlmICghKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJaWYgKGlmbS0+aWZpX2luZGV4IHx8IGlmbS0+aWZpX2ZsYWdzIHx8IGlmbS0+aWZpX2NoYW5nZSkKKwkJaWYgKGlmbS0+aWZpX2luZGV4KQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQlpZiAodGJbSUZMQV9NQVBdIHx8IHRiW0lGTEFfTUFTVEVSXSB8fCB0YltJRkxBX1BST1RJTkZPXSkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTExNzAsOSArMTI3MCwxNSBAQAogCQkJZXJyID0gb3BzLT5uZXdsaW5rKG5ldCwgZGV2LCB0YiwgZGF0YSk7CiAJCWVsc2UKIAkJCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwotCQlpZiAoZXJyIDwgMCAmJiAhSVNfRVJSKGRldikpCisJCWlmIChlcnIgPCAwICYmICFJU19FUlIoZGV2KSkgewogCQkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKKwkJZXJyID0gcnRubF9jb25maWd1cmVfbGluayhkZXYsIGlmbSk7CisJCWlmIChlcnIgPCAwKQorCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKK291dDoKIAkJcHV0X25ldChkZXN0X25ldCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTM2MSwxNyArMTQ2NywxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKLQkJcnRtc2dfaWZpbmZvKFJUTV9ERUxMSU5LLCBkZXYsIH4wVSk7Ci0JCWJyZWFrOwogCWNhc2UgTkVUREVWX1VQOgogCWNhc2UgTkVUREVWX0RPV046Ci0JCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCBJRkZfVVB8SUZGX1JVTk5JTkcpOwotCQlicmVhazsKKwljYXNlIE5FVERFVl9QUkVfVVA6CiAJY2FzZSBORVRERVZfUE9TVF9JTklUOgogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRToKIAljYXNlIE5FVERFVl9HT0lOR19ET1dOOgorCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUl9CQVRDSDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEzODYsNyArMTQ4OSw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgcnRuZXRsaW5rX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBydG5ldGxpbmtfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShuZXQsIE5FVExJTktfUk9VVEUsIFJUTkxHUlBfTUFYLApAQCAtMTM5Nyw3ICsxNTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRuZXRsaW5rX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcnRuZXRsaW5rX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKG5ldC0+cnRubCk7CiAJbmV0LT5ydG5sID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmMKaW5kZXggYjdiYTkxYi4uOWIyNjQ2MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2NtLmMKKysrIGIvbmV0L2NvcmUvc2NtLmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkKIAkJewogCQljYXNlIFNDTV9SSUdIVFM6CisJCQlpZiAoIXNvY2stPm9wcyB8fCBzb2NrLT5vcHMtPmZhbWlseSAhPSBQRl9VTklYKQorCQkJCWdvdG8gZXJyb3I7CiAJCQllcnI9c2NtX2ZwX2NvcHkoY21zZywgJnAtPmZwKTsKIAkJCWlmIChlcnI8MCkKIAkJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGUxZjZmMjIuLmZjZDM5N2EgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogCQlzdHJ1Y3QgdGltZXZhbCB0bTsKIAl9IHY7CiAKLQl1bnNpZ25lZCBpbnQgbHYgPSBzaXplb2YoaW50KTsKKwlpbnQgbHYgPSBzaXplb2YoaW50KTsKIAlpbnQgbGVuOwogCiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKQEAgLTEwNzMsNyArMTA3Myw4IEBACiAJaWYgKHNrLT5za19kZXN0cnVjdCkKIAkJc2stPnNrX2Rlc3RydWN0KHNrKTsKIAotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stPnNrX2ZpbHRlciwKKwkJCQkgICAgICAgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA9PSAwKTsKIAlpZiAoZmlsdGVyKSB7CiAJCXNrX2ZpbHRlcl91bmNoYXJnZShzaywgZmlsdGVyKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwpAQCAtMjE0MCwxMyArMjE0MSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2dldCk7CiAKLXN0YXRpYyBpbnQgc29ja19pbnVzZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgc29ja19pbnVzZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJbmV0LT5jb3JlLmludXNlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwcm90X2ludXNlKTsKIAlyZXR1cm4gbmV0LT5jb3JlLmludXNlID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIHNvY2tfaW51c2VfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBzb2NrX2ludXNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlmcmVlX3BlcmNwdShuZXQtPmNvcmUuaW51c2UpOwogfQpAQCAtMjIyOCwxMyArMjIyOSwxMCBAQAogCQl9CiAKIAkJaWYgKHByb3QtPnJza19wcm90ICE9IE5VTEwpIHsKLQkJCXN0YXRpYyBjb25zdCBjaGFyIG1hc2tbXSA9ICJyZXF1ZXN0X3NvY2tfJXMiOwotCi0JCQlwcm90LT5yc2tfcHJvdC0+c2xhYl9uYW1lID0ga21hbGxvYyhzdHJsZW4ocHJvdC0+bmFtZSkgKyBzaXplb2YobWFzaykgLSAxLCBHRlBfS0VSTkVMKTsKKwkJCXByb3QtPnJza19wcm90LT5zbGFiX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInJlcXVlc3Rfc29ja18lcyIsIHByb3QtPm5hbWUpOwogCQkJaWYgKHByb3QtPnJza19wcm90LT5zbGFiX25hbWUgPT0gTlVMTCkKIAkJCQlnb3RvIG91dF9mcmVlX3NvY2tfc2xhYjsKIAotCQkJc3ByaW50Zihwcm90LT5yc2tfcHJvdC0+c2xhYl9uYW1lLCBtYXNrLCBwcm90LT5uYW1lKTsKIAkJCXByb3QtPnJza19wcm90LT5zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUocHJvdC0+cnNrX3Byb3QtPnNsYWJfbmFtZSwKIAkJCQkJCQkJIHByb3QtPnJza19wcm90LT5vYmpfc2l6ZSwgMCwKIAkJCQkJCQkJIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CkBAIC0yMjQ3LDE0ICsyMjQ1LDExIEBACiAJCX0KIAogCQlpZiAocHJvdC0+dHdza19wcm90ICE9IE5VTEwpIHsKLQkJCXN0YXRpYyBjb25zdCBjaGFyIG1hc2tbXSA9ICJ0d19zb2NrXyVzIjsKLQotCQkJcHJvdC0+dHdza19wcm90LT50d3NrX3NsYWJfbmFtZSA9IGttYWxsb2Moc3RybGVuKHByb3QtPm5hbWUpICsgc2l6ZW9mKG1hc2spIC0gMSwgR0ZQX0tFUk5FTCk7CisJCQlwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYl9uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJ0d19zb2NrXyVzIiwgcHJvdC0+bmFtZSk7CiAKIAkJCWlmIChwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYl9uYW1lID09IE5VTEwpCiAJCQkJZ290byBvdXRfZnJlZV9yZXF1ZXN0X3NvY2tfc2xhYjsKIAotCQkJc3ByaW50Zihwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYl9uYW1lLCBtYXNrLCBwcm90LT5uYW1lKTsKIAkJCXByb3QtPnR3c2tfcHJvdC0+dHdza19zbGFiID0KIAkJCQlrbWVtX2NhY2hlX2NyZWF0ZShwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYl9uYW1lLAogCQkJCQkJICBwcm90LT50d3NrX3Byb3QtPnR3c2tfb2JqX3NpemUsCmRpZmYgLS1naXQgYS9uZXQvZGNiL2RjYm5sLmMgYi9uZXQvZGNiL2RjYm5sLmMKaW5kZXggZGI5ZjViMy4uODEzZTM5OSAxMDA2NDQKLS0tIGEvbmV0L2RjYi9kY2JubC5jCisrKyBiL25ldC9kY2IvZGNibmwuYwpAQCAtNTQsNyArNTQsNyBAQAogLyoqKioqKioqKioqKioqKiogRENCIGF0dHJpYnV0ZSBwb2xpY2llcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBEQ0IgbmV0bGluayBhdHRyaWJ1dGVzIHBvbGljeSAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3J0bmxfcG9saWN5W0RDQl9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3J0bmxfcG9saWN5W0RDQl9BVFRSX01BWCArIDFdID0gewogCVtEQ0JfQVRUUl9JRk5BTUVdICAgICAgPSB7LnR5cGUgPSBOTEFfTlVMX1NUUklORywgLmxlbiA9IElGTkFNU0laIC0gMX0sCiAJW0RDQl9BVFRSX1NUQVRFXSAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9BVFRSX1BGQ19DRkddICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LApAQCAtNjgsNyArNjgsNyBAQAogfTsKIAogLyogRENCIHByaW9yaXR5IGZsb3cgY29udHJvbCB0byBVc2VyIFByaW9yaXR5IG5lc3RlZCBhdHRyaWJ1dGVzICovCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfcGZjX3VwX25lc3RbRENCX1BGQ19VUF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3BmY191cF9uZXN0W0RDQl9QRkNfVVBfQVRUUl9NQVggKyAxXSA9IHsKIAlbRENCX1BGQ19VUF9BVFRSXzBdICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfUEZDX1VQX0FUVFJfMV0gICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9QRkNfVVBfQVRUUl8yXSAgID0gey50eXBlID0gTkxBX1U4fSwKQEAgLTgxLDcgKzgxLDcgQEAKIH07CiAKIC8qIERDQiBwcmlvcml0eSBncm91cGluZyBuZXN0ZWQgYXR0cmlidXRlcyAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3BnX25lc3RbRENCX1BHX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfcGdfbmVzdFtEQ0JfUEdfQVRUUl9NQVggKyAxXSA9IHsKIAlbRENCX1BHX0FUVFJfVENfMF0gICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LAogCVtEQ0JfUEdfQVRUUl9UQ18xXSAgICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCiAJW0RDQl9QR19BVFRSX1RDXzJdICAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKQEAgLTEwMyw3ICsxMDMsNyBAQAogfTsKIAogLyogRENCIHRyYWZmaWMgY2xhc3MgbmVzdGVkIGF0dHJpYnV0ZXMuICovCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfdGNfcGFyYW1fbmVzdFtEQ0JfVENfQVRUUl9QQVJBTV9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF90Y19wYXJhbV9uZXN0W0RDQl9UQ19BVFRSX1BBUkFNX01BWCArIDFdID0gewogCVtEQ0JfVENfQVRUUl9QQVJBTV9QR0lEXSAgICAgICAgICAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX1RDX0FUVFJfUEFSQU1fVVBfTUFQUElOR10gICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9UQ19BVFRSX1BBUkFNX1NUUklDVF9QUklPXSAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LApAQCAtMTEyLDcgKzExMiw3IEBACiB9OwogCiAvKiBEQ0IgY2FwYWJpbGl0aWVzIG5lc3RlZCBhdHRyaWJ1dGVzLiAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX2NhcF9uZXN0W0RDQl9DQVBfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9jYXBfbmVzdFtEQ0JfQ0FQX0FUVFJfTUFYICsgMV0gPSB7CiAJW0RDQl9DQVBfQVRUUl9BTExdICAgICA9IHsudHlwZSA9IE5MQV9GTEFHfSwKIAlbRENCX0NBUF9BVFRSX1BHXSAgICAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX0NBUF9BVFRSX1BGQ10gICAgID0gey50eXBlID0gTkxBX1U4fSwKQEAgLTEyNCwxNCArMTI0LDE0IEBACiB9OwogCiAvKiBEQ0IgY2FwYWJpbGl0aWVzIG5lc3RlZCBhdHRyaWJ1dGVzLiAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX251bXRjc19uZXN0W0RDQl9OVU1UQ1NfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9udW10Y3NfbmVzdFtEQ0JfTlVNVENTX0FUVFJfTUFYICsgMV0gPSB7CiAJW0RDQl9OVU1UQ1NfQVRUUl9BTExdICAgICA9IHsudHlwZSA9IE5MQV9GTEFHfSwKIAlbRENCX05VTVRDU19BVFRSX1BHXSAgICAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX05VTVRDU19BVFRSX1BGQ10gICAgID0gey50eXBlID0gTkxBX1U4fSwKIH07CiAKIC8qIERDQiBCQ04gbmVzdGVkIGF0dHJpYnV0ZXMuICovCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfYmNuX25lc3RbRENCX0JDTl9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX2Jjbl9uZXN0W0RDQl9CQ05fQVRUUl9NQVggKyAxXSA9IHsKIAlbRENCX0JDTl9BVFRSX1JQXzBdICAgICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQkNOX0FUVFJfUlBfMV0gICAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9CQ05fQVRUUl9SUF8yXSAgICAgICAgID0gey50eXBlID0gTkxBX1U4fSwKQEAgLTE2MCw3ICsxNjAsNyBAQAogfTsKIAogLyogRENCIEFQUCBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9hcHBfbmVzdFtEQ0JfQVBQX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfYXBwX25lc3RbRENCX0FQUF9BVFRSX01BWCArIDFdID0gewogCVtEQ0JfQVBQX0FUVFJfSURUWVBFXSAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9BUFBfQVRUUl9JRF0gICAgICAgICAgID0gey50eXBlID0gTkxBX1UxNn0sCiAJW0RDQl9BUFBfQVRUUl9QUklPUklUWV0gICAgID0gey50eXBlID0gTkxBX1U4fSwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWQuYyBiL25ldC9kY2NwL2NjaWQuYwppbmRleCBmZjE2ZTlkLi40OWQyN2M1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkLmMKKysrIGIvbmV0L2RjY3AvY2NpZC5jCkBAIC02MywxNCArNjMsMTMgQEAKIAl1OCAqY2NpZF9hcnJheSwgYXJyYXlfbGVuOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGxlbiA8IEFSUkFZX1NJWkUoY2NpZHMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChjY2lkX2dldF9idWlsdGluX2NjaWRzKCZjY2lkX2FycmF5LCAmYXJyYXlfbGVuKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JaWYgKHB1dF91c2VyKGFycmF5X2xlbiwgb3B0bGVuKSB8fAotCSAgICBjb3B5X3RvX3VzZXIob3B0dmFsLCBjY2lkX2FycmF5LCBhcnJheV9sZW4pKQorCWlmIChwdXRfdXNlcihhcnJheV9sZW4sIG9wdGxlbikpCisJCWVyciA9IC1FRkFVTFQ7CisJZWxzZSBpZiAobGVuID4gMCAmJiBjb3B5X3RvX3VzZXIob3B0dmFsLCBjY2lkX2FycmF5LAorCQkJCQkgbGVuID4gYXJyYXlfbGVuID8gYXJyYXlfbGVuIDogbGVuKSkKIAkJZXJyID0gLUVGQVVMVDsKIAogCWtmcmVlKGNjaWRfYXJyYXkpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IGRhZDdiYzQuLmIxOTVjNGYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTk5Niw3ICs5OTYsNyBAQAogCS5mbGFncwkJPSBJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKLXN0YXRpYyBpbnQgZGNjcF92NF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgZGNjcF92NF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycjsKIApAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBkY2NwX3Y0X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGNjcF92NF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+ZGNjcC52NF9jdGxfc2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IGJhZjA1Y2YuLjFhZWM2MzQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTExODksNyArMTE4OSw3IEBACiAJLmZsYWdzCQk9IElORVRfUFJPVE9TV19JQ1NLLAogfTsKIAotc3RhdGljIGludCBkY2NwX3Y2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBkY2NwX3Y2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfdjZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkY2NwX3Y2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3kobmV0LT5kY2NwLnY2X2N0bF9zayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCA2NzFjZDE0Li4wZWY3MDYxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTgzNSw2ICs4MzUsOCBAQAogCQkJbGVuID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CisJCWlmIChmbGFncyAmIE1TR19UUlVOQykKKwkJCWxlbiA9IHNrYi0+bGVuOwogCWZvdW5kX2Zpbl9vazoKIAkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpCiAJCQlza19lYXRfc2tiKHNrLCBza2IsIDApOwpAQCAtMTAwMywxMiArMTAwNSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBkY2NwX21pYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQqKilkY2NwX3N0YXRpc3RpY3MsIHNpemVvZihzdHJ1Y3QgZGNjcF9taWIpKTsKKwlyZXR1cm4gc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilkY2NwX3N0YXRpc3RpY3MsCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9taWIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRjY3BfbWliX2V4aXQodm9pZCkKIHsKLQlzbm1wX21pYl9mcmVlKCh2b2lkKiopZGNjcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWRjY3Bfc3RhdGlzdGljcyk7CiB9CiAKIHN0YXRpYyBpbnQgdGhhc2hfZW50cmllczsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBhMDMyODQwLi5hN2JmMDNjIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMTU1LDggKzExNTUsOCBAQAogCiAJaWYgKCEoZmxhZ3MgJiBNU0dfVFJZSEFSRCkpIHsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpKSB7CiAJCQlpZiAoKGZscC0+ZmxkX2RzdCA9PSBydC0+ZmwuZmxkX2RzdCkgJiYKIAkJCSAgICAoZmxwLT5mbGRfc3JjID09IHJ0LT5mbC5mbGRfc3JjKSAmJgogCQkJICAgIChmbHAtPm1hcmsgPT0gcnQtPmZsLm1hcmspICYmCkBAIC0xNjE4LDkgKzE2MTgsOSBAQAogCQlpZiAoaCA+IHNfaCkKIAkJCXNfaWR4ID0gMDsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7CisJCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKIAkJCXJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgeworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgewogCQkJaWYgKGlkeCA8IHNfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoJnJ0LT51LmRzdCkpOwpAQCAtMTY1NCwxMiArMTY1NCwxMiBAQAogCiAJZm9yKHMtPmJ1Y2tldCA9IGRuX3J0X2hhc2hfbWFzazsgcy0+YnVja2V0ID49IDA7IC0tcy0+YnVja2V0KSB7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CisJCXJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbik7CiAJCWlmIChydCkKIAkJCWJyZWFrOwogCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAl9Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShydCk7CisJcmV0dXJuIHJ0OwogfQogCiBzdGF0aWMgc3RydWN0IGRuX3JvdXRlICpkbl9ydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRuX3JvdXRlICpydCkKQEAgLTE2NzQsNyArMTY3NCw3IEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CiAJfQotCXJldHVybiByY3VfZGVyZWZlcmVuY2UocnQpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocnQpOwogfQogCiBzdGF0aWMgdm9pZCAqZG5fcnRfY2FjaGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9ldGguYyBiL25ldC9ldGhlcm5ldC9ldGguYwppbmRleCBkZDNkYjg4Zi4uMjA1YTFjMSAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtNzMsOCArNzMsOCBAQAogICogQGxlbjogICBwYWNrZXQgbGVuZ3RoICg8PSBza2ItPmxlbikKICAqCiAgKgotICogU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZSBwdXQgdGhlIGxlbmd0aAotICogaW4gaGVyZSBpbnN0ZWFkLiBJdCBpcyB1cCB0byB0aGUgODAyLjIgbGF5ZXIgdG8gY2FycnkgcHJvdG9jb2wgaW5mb3JtYXRpb24uCisgKiBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zLzIgd2UgcHV0IHRoZSBsZW5ndGgKKyAqIGluIGhlcmUgaW5zdGVhZC4KICAqLwogaW50IGV0aF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCi0JaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMpCisJaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMgJiYgdHlwZSAhPSBFVEhfUF84MDJfMikKIAkJZXRoLT5oX3Byb3RvID0gaHRvbnModHlwZSk7CiAJZWxzZQogCQlldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDdkMTJjNmEuLjMzYjdkZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEzODUsNyArMTM4NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2N0bF9zb2NrX2NyZWF0ZSk7CiAKLXVuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgKm1pYltdLCBpbnQgb2ZmdCkKK3Vuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCkKIHsKIAl1bnNpZ25lZCBsb25nIHJlcyA9IDA7CiAJaW50IGk7CkBAIC0xMzk4LDcgKzEzOTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25tcF9mb2xkX2ZpZWxkKTsKIAotaW50IHNubXBfbWliX2luaXQodm9pZCAqcHRyWzJdLCBzaXplX3QgbWlic2l6ZSkKK2ludCBzbm1wX21pYl9pbml0KHZvaWQgX19wZXJjcHUgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKIAlwdHJbMF0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplLCBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKTsKQEAgLTE0MTYsNyArMTQxNiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbm1wX21pYl9pbml0KTsKIAotdm9pZCBzbm1wX21pYl9mcmVlKHZvaWQgKnB0clsyXSkKK3ZvaWQgc25tcF9taWJfZnJlZSh2b2lkIF9fcGVyY3B1ICpwdHJbMl0pCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKIAlmcmVlX3BlcmNwdShwdHJbMF0pOwpAQCAtMTQ2MCwyNSArMTQ2MCwyNSBAQAogCiBzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9taWJfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IHRjcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3RjcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgbGludXhfbWliKSkgPCAwKQogCQlnb3RvIGVycl9uZXRfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlnb3RvIGVycl91ZHBsaXRlX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXBfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXBtc2dfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wbXNnX21pYjsKIApAQCAtMTQ4NiwzMCArMTQ4NiwzMCBAQAogCXJldHVybiAwOwogCiBlcnJfaWNtcG1zZ19taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzKTsKIGVycl9pY21wX21pYjoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MpOwogZXJyX3VkcGxpdGVfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOwogZXJyX3VkcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CiBlcnJfbmV0X21pYjoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcyk7CiBlcnJfaXBfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MpOwogZXJyX3RjcF9taWI6CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgaXB2NF9taWJfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzKTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXBfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzKTsKIH0KIAogc3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHY0X21pYl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9haDQuYyBiL25ldC9pcHY0L2FoNC5jCmluZGV4IDdlZDNlNGEuLjk4N2I0N2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FoNC5jCisrKyBiL25ldC9pcHY0L2FoNC5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkgICAgaWNtcF9oZHIoc2tiKS0+Y29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEKQogCQlyZXR1cm47CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAJcHJpbnRrKEtFUk5fREVCVUcgInBtdHUgZGlzY292ZXJ5IG9uIFNBIEFILyUwOHgvJTA4eFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggYzk1Y2Q5My4uYzRkZDEzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTcwLDYgKzcwLDcgQEAKICAqCQkJCQlib25kaW5nIGNhbiBjaGFuZ2UgdGhlIHNrYiBiZWZvcmUKICAqCQkJCQlzZW5kaW5nIChlLmcuIGluc2VydCA4MDIxcSB0YWcpLgogICoJCUhhcmFsZCBXZWx0ZQk6CWNvbnZlcnQgdG8gbWFrZSB1c2Ugb2YgamVua2lucyBoYXNoCisgKgkJSmVzcGVyIEQuIEJyb3VlcjogICAgICAgUHJveHkgQVJQIFBWTEFOIFJGQyAzMDY5IHN1cHBvcnQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTI0LDEyICs1MjUsMTUgQEAKIC8qCiAgKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHByb3h5IEFSUCBmb3IgdGhpcyBwYXRoCiAgKi8KLQotc3RhdGljIGlubGluZSBpbnQgYXJwX2Z3ZF9wcm94eShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBydGFibGUgKnJ0KQorc3RhdGljIGlubGluZSBpbnQgYXJwX2Z3ZF9wcm94eShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJc3RydWN0IHJ0YWJsZSAqcnQpCiB7CiAJc3RydWN0IGluX2RldmljZSAqb3V0X2RldjsKIAlpbnQgaW1pLCBvbWkgPSAtMTsKIAorCWlmIChydC0+dS5kc3QuZGV2ID09IGRldikKKwkJcmV0dXJuIDA7CisKIAlpZiAoIUlOX0RFVl9QUk9YWV9BUlAoaW5fZGV2KSkKIAkJcmV0dXJuIDA7CiAKQEAgLTU0OCw2ICs1NTIsNDMgQEAKIH0KIAogLyoKKyAqIENoZWNrIGZvciBSRkMzMDY5IHByb3h5IGFycCBwcml2YXRlIFZMQU4gKGFsbG93IHRvIHNlbmQgYmFjayB0byBzYW1lIGRldikKKyAqCisgKiBSRkMzMDY5IHN1cHBvcnRzIHByb3h5IGFycCByZXBsaWVzIGJhY2sgdG8gdGhlIHNhbWUgaW50ZXJmYWNlLiAgVGhpcworICogaXMgZG9uZSB0byBzdXBwb3J0IChldGhlcm5ldCkgc3dpdGNoIGZlYXR1cmVzLCBsaWtlIFJGQyAzMDY5LCB3aGVyZQorICogdGhlIGluZGl2aWR1YWwgcG9ydHMgYXJlIG5vdCBhbGxvd2VkIHRvIGNvbW11bmljYXRlIHdpdGggZWFjaAorICogb3RoZXIsIEJVVCB0aGV5IGFyZSBhbGxvd2VkIHRvIHRhbGsgdG8gdGhlIHVwc3RyZWFtIHJvdXRlci4gIEFzCisgKiBkZXNjcmliZWQgaW4gUkZDIDMwNjksIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG93IHRoZXNlIGhvc3RzIHRvCisgKiBjb21tdW5pY2F0ZSB0aHJvdWdoIHRoZSB1cHN0cmVhbSByb3V0ZXIsIGJ5IHByb3h5X2FycCdpbmcuCisgKgorICogUkZDIDMwNjk6ICJWTEFOIEFnZ3JlZ2F0aW9uIGZvciBFZmZpY2llbnQgSVAgQWRkcmVzcyBBbGxvY2F0aW9uIgorICoKKyAqICBUaGlzIHRlY2hub2xvZ3kgaXMga25vd24gYnkgZGlmZmVyZW50IG5hbWVzOgorICogICAgSW4gUkZDIDMwNjkgaXQgaXMgY2FsbGVkIFZMQU4gQWdncmVnYXRpb24uCisgKiAgICBDaXNjbyBhbmQgQWxsaWVkIFRlbGVzeW4gY2FsbCBpdCBQcml2YXRlIFZMQU4uCisgKiAgICBIZXdsZXR0LVBhY2thcmQgY2FsbCBpdCBTb3VyY2UtUG9ydCBmaWx0ZXJpbmcgb3IgcG9ydC1pc29sYXRpb24uCisgKiAgICBFcmljc3NvbiBjYWxsIGl0IE1BQy1Gb3JjZWQgRm9yd2FyZGluZyAoUkZDIERyYWZ0KS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHZsYW4oc3RydWN0IGluX2RldmljZSAqaW5fZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCXN0cnVjdCBydGFibGUgKnJ0LAorCQkJCV9fYmUzMiBzaXAsIF9fYmUzMiB0aXApCit7CisJLyogUHJpdmF0ZSBWTEFOIGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHRoZSBzYW1lIGV0aGVybmV0IHNlZ21lbnQgKi8KKwlpZiAocnQtPnUuZHN0LmRldiAhPSBkZXYpCisJCXJldHVybiAwOworCisJLyogRG9uJ3QgcmVwbHkgb24gc2VsZiBwcm9iZXMgKG9mdGVuIGRvbmUgYnkgd2luZG93eiBib3hlcykqLworCWlmIChzaXAgPT0gdGlwKQorCQlyZXR1cm4gMDsKKworCWlmIChJTl9ERVZfUFJPWFlfQVJQX1BWTEFOKGluX2RldikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCiAgKglJbnRlcmZhY2UgdG8gbGluayBsYXllcjogc2VuZCByb3V0aW5lIGFuZCByZWNlaXZlIGhhbmRsZXIuCiAgKi8KIApAQCAtODMzLDggKzg3NCwxMSBAQAogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkgewotCQkJICAgIGlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgICYmIHJ0LT51LmRzdC5kZXYgIT0gZGV2ICYmCi0JCQkgICAgIChhcnBfZndkX3Byb3h5KGluX2RldiwgcnQpIHx8IHBuZWlnaF9sb29rdXAoJmFycF90YmwsIG5ldCwgJnRpcCwgZGV2LCAwKSkpIHsKKwkJCWlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgICYmCisJCQkgICAgKGFycF9md2RfcHJveHkoaW5fZGV2LCBkZXYsIHJ0KSB8fAorCQkJICAgICBhcnBfZndkX3B2bGFuKGluX2RldiwgZGV2LCBydCwgc2lwLCB0aXApIHx8CisJCQkgICAgIHBuZWlnaF9sb29rdXAoJmFycF90YmwsIG5ldCwgJnRpcCwgZGV2LCAwKSkpCisJCQl7CiAJCQkJbiA9IG5laWdoX2V2ZW50X25zKCZhcnBfdGJsLCBzaGEsICZzaXAsIGRldik7CiAJCQkJaWYgKG4pCiAJCQkJCW5laWdoX3JlbGVhc2Uobik7CkBAIC04NjMsNyArOTA3LDggQEAKIAkJICAgZGV2aWNlcyAoc3RyaXAgaXMgY2FuZGlkYXRlKQogCQkgKi8KIAkJaWYgKG4gPT0gTlVMTCAmJgotCQkgICAgYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVBMWSkgJiYKKwkJICAgIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUExZKSB8fAorCQkgICAgIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpICYmIHRpcCA9PSBzaXApKSAmJgogCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCBzaXApID09IFJUTl9VTklDQVNUKQogCQkJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmc2lwLCBkZXYsIDEpOwogCX0KQEAgLTEyMzksOCArMTI4NCw3IEBACiAJZGV2X2FkZF9wYWNrKCZhcnBfcGFja2V0X3R5cGUpOwogCWFycF9wcm9jX2luaXQoKTsKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKE5VTEwsICZhcnBfdGJsLnBhcm1zLCBORVRfSVBWNCwKLQkJCSAgICAgIE5FVF9JUFY0X05FSUdILCAiaXB2NCIsIE5VTEwpOworCW5laWdoX3N5c2N0bF9yZWdpc3RlcihOVUxMLCAmYXJwX3RibC5wYXJtcywgImlwdjQiLCBOVUxMKTsKICNlbmRpZgogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYXJwX25ldGRldl9ub3RpZmllcik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMjZkZWMyYi4uNTFjYTk0NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtNjQsMjAgKzY0LDIwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXB2NF9kZXZjb25mIGlwdjRfZGV2Y29uZiA9IHsKIAkuZGF0YSA9IHsKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUyAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfU0VORF9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQSAtIDFdID0gMSwKKwkJW0lQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFTkRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCisJCVtJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBIC0gMV0gPSAxLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGlwdjRfZGV2Y29uZiBpcHY0X2RldmNvbmZfZGZsdCA9IHsKIAkuZGF0YSA9IHsKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUyAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfU0VORF9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQSAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSAtIDFdID0gMSwKKwkJW0lQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFTkRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCisJCVtJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUgLSAxXSA9IDEsCiAJfSwKIH07CiAKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAJeyBcCiAJCS5wcm9jbmFtZQk9IG5hbWUsIFwKIAkJLmRhdGEJCT0gaXB2NF9kZXZjb25mLmRhdGEgKyBcCi0JCQkJICBORVRfSVBWNF9DT05GXyAjIyBhdHRyIC0gMSwgXAorCQkJCSAgSVBWNF9ERVZDT05GXyAjIyBhdHRyIC0gMSwgXAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLCBcCiAJCS5tb2RlCQk9IG12YWwsIFwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2MsIFwKQEAgLTEzODYsNyArMTM4Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aW5ldF9zeXNjdGxfdGFibGUgewogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyOwotCXN0cnVjdCBjdGxfdGFibGUgZGV2aW5ldF92YXJzW19fTkVUX0lQVjRfQ09ORl9NQVhdOworCXN0cnVjdCBjdGxfdGFibGUgZGV2aW5ldF92YXJzW19fSVBWNF9ERVZDT05GX01BWF07CiAJY2hhciAqZGV2X25hbWU7CiB9IGRldmluZXRfc3lzY3RsID0gewogCS5kZXZpbmV0X3ZhcnMgPSB7CkBAIC0xNDEzLDYgKzE0MTMsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfSUdOT1JFLCAiYXJwX2lnbm9yZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQUNDRVBULCAiYXJwX2FjY2VwdCIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfTk9USUZZLCAiYXJwX25vdGlmeSIpLAorCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShQUk9YWV9BUlBfUFZMQU4sICJwcm94eV9hcnBfcHZsYW4iKSwKIAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1hGUk0sICJkaXNhYmxlX3hmcm0iKSwKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLApAQCAtMTQ5MSw4ICsxNDkyLDcgQEAKIAogc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldikKIHsKLQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoaWRldi0+ZGV2LCBpZGV2LT5hcnBfcGFybXMsIE5FVF9JUFY0LAotCQkJTkVUX0lQVjRfTkVJR0gsICJpcHY0IiwgTlVMTCk7CisJbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKGlkZXYtPmRldiwgaWRldi0+YXJwX3Bhcm1zLCAiaXB2NCIsIE5VTEwpOwogCV9fZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoZGV2X25ldChpZGV2LT5kZXYpLCBpZGV2LT5kZXYtPm5hbWUsCiAJCQkJCSZpZGV2LT5jbmYpOwogfQpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJpcF9mb3J3YXJkIiwKIAkJLmRhdGEJCT0gJmlwdjRfZGV2Y29uZi5kYXRhWwotCQkJCQlORVRfSVBWNF9DT05GX0ZPUldBUkRJTkcgLSAxXSwKKwkJCQkJSVBWNF9ERVZDT05GX0ZPUldBUkRJTkcgLSAxXSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IGRldmluZXRfc3lzY3RsX2ZvcndhcmQsCkBAIC0xNTUxLDcgKzE1NTEsNyBAQAogCQlpZiAodGJsID09IE5VTEwpCiAJCQlnb3RvIGVycl9hbGxvY19jdGw7CiAKLQkJdGJsWzBdLmRhdGEgPSAmYWxsLT5kYXRhW05FVF9JUFY0X0NPTkZfRk9SV0FSRElORyAtIDFdOworCQl0YmxbMF0uZGF0YSA9ICZhbGwtPmRhdGFbSVBWNF9ERVZDT05GX0ZPUldBUkRJTkcgLSAxXTsKIAkJdGJsWzBdLmV4dHJhMSA9IGFsbDsKIAkJdGJsWzBdLmV4dHJhMiA9IG5ldDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNC5jIGIvbmV0L2lwdjQvZXNwNC5jCmluZGV4IDE5NDg4OTUuLjE0Y2ExZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDQuYworKysgYi9uZXQvaXB2NC9lc3A0LmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCSAgICBpY21wX2hkcihza2IpLT5jb2RlICE9IElDTVBfRlJBR19ORUVERUQpCiAJCXJldHVybjsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUKTsKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUKTsKIAlpZiAoIXgpCiAJCXJldHVybjsKIAlORVRERUJVRyhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBFU1AvJTA4eC8lMDh4XG4iLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA4MmRiZjcxLi45YjNlMjhlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtODgzLDcgKzg4Myw3IEBACiAJbmV0bGlua191bmljYXN0KG5ldC0+aXB2NC5maWJubCwgc2tiLCBwaWQsIE1TR19ET05UV0FJVCk7CiB9CiAKLXN0YXRpYyBpbnQgbmxfZmliX2xvb2t1cF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBubF9maWJfbG9va3VwX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShuZXQsIE5FVExJTktfRklCX0xPT0tVUCwgMCwKQEAgLTEwMDQsNyArMTAwNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcF9maWJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgaXBfZmliX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IGVkMTlhYTYuLjFhZjBlYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTYyLDggKzYyLDggQEAKICNkZWZpbmUgZm9yX25leHRob3BzKGZpKSB7IGludCBuaHNlbDsgY29uc3Qgc3RydWN0IGZpYl9uaCAqIG5oOyBcCiBmb3IgKG5oc2VsPTAsIG5oID0gKGZpKS0+ZmliX25oOyBuaHNlbCA8IChmaSktPmZpYl9uaHM7IG5oKyssIG5oc2VsKyspCiAKLSNkZWZpbmUgY2hhbmdlX25leHRob3BzKGZpKSB7IGludCBuaHNlbDsgc3RydWN0IGZpYl9uaCAqIG5oOyBcCi1mb3IgKG5oc2VsPTAsIG5oID0gKHN0cnVjdCBmaWJfbmggKikoKGZpKS0+ZmliX25oKTsgbmhzZWwgPCAoZmkpLT5maWJfbmhzOyBuaCsrLCBuaHNlbCsrKQorI2RlZmluZSBjaGFuZ2VfbmV4dGhvcHMoZmkpIHsgaW50IG5oc2VsOyBzdHJ1Y3QgZmliX25oICpuZXh0aG9wX25oOyBcCitmb3IgKG5oc2VsPTAsIG5leHRob3BfbmggPSAoc3RydWN0IGZpYl9uaCAqKSgoZmkpLT5maWJfbmgpOyBuaHNlbCA8IChmaSktPmZpYl9uaHM7IG5leHRob3BfbmgrKywgbmhzZWwrKykKIAogI2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqLwogCkBAIC03Miw3ICs3Miw3IEBACiAjZGVmaW5lIGZvcl9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBjb25zdCBzdHJ1Y3QgZmliX25oICogbmggPSAoZmkpLT5maWJfbmg7IFwKIGZvciAobmhzZWw9MDsgbmhzZWwgPCAxOyBuaHNlbCsrKQogCi0jZGVmaW5lIGNoYW5nZV9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBzdHJ1Y3QgZmliX25oICogbmggPSAoc3RydWN0IGZpYl9uaCAqKSgoZmkpLT5maWJfbmgpOyBcCisjZGVmaW5lIGNoYW5nZV9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBzdHJ1Y3QgZmliX25oICpuZXh0aG9wX25oID0gKHN0cnVjdCBmaWJfbmggKikoKGZpKS0+ZmliX25oKTsgXAogZm9yIChuaHNlbD0wOyBuaHNlbCA8IDE7IG5oc2VsKyspCiAKICNlbmRpZiAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovCkBAIC0xNDUsOSArMTQ1LDkgQEAKIAkJcmV0dXJuOwogCX0KIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJaWYgKG5oLT5uaF9kZXYpCi0JCQlkZXZfcHV0KG5oLT5uaF9kZXYpOwotCQluaC0+bmhfZGV2ID0gTlVMTDsKKwkJaWYgKG5leHRob3BfbmgtPm5oX2RldikKKwkJCWRldl9wdXQobmV4dGhvcF9uaC0+bmhfZGV2KTsKKwkJbmV4dGhvcF9uaC0+bmhfZGV2ID0gTlVMTDsKIAl9IGVuZGZvcl9uZXh0aG9wcyhmaSk7CiAJZmliX2luZm9fY250LS07CiAJcmVsZWFzZV9uZXQoZmktPmZpYl9uZXQpOwpAQCAtMTYyLDkgKzE2Miw5IEBACiAJCWlmIChmaS0+ZmliX3ByZWZzcmMpCiAJCQlobGlzdF9kZWwoJmZpLT5maWJfbGhhc2gpOwogCQljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJCWlmICghbmgtPm5oX2RldikKKwkJCWlmICghbmV4dGhvcF9uaC0+bmhfZGV2KQogCQkJCWNvbnRpbnVlOwotCQkJaGxpc3RfZGVsKCZuaC0+bmhfaGFzaCk7CisJCQlobGlzdF9kZWwoJm5leHRob3BfbmgtPm5oX2hhc2gpOwogCQl9IGVuZGZvcl9uZXh0aG9wcyhmaSkKIAkJZmktPmZpYl9kZWFkID0gMTsKIAkJZmliX2luZm9fcHV0KGZpKTsKQEAgLTM5NSwxOSArMzk1LDIwIEBACiAJCWlmICghcnRuaF9vayhydG5oLCByZW1haW5pbmcpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJbmgtPm5oX2ZsYWdzID0gKGNmZy0+ZmNfZmxhZ3MgJiB+MHhGRikgfCBydG5oLT5ydG5oX2ZsYWdzOwotCQluaC0+bmhfb2lmID0gcnRuaC0+cnRuaF9pZmluZGV4OwotCQluaC0+bmhfd2VpZ2h0ID0gcnRuaC0+cnRuaF9ob3BzICsgMTsKKwkJbmV4dGhvcF9uaC0+bmhfZmxhZ3MgPQorCQkJKGNmZy0+ZmNfZmxhZ3MgJiB+MHhGRikgfCBydG5oLT5ydG5oX2ZsYWdzOworCQluZXh0aG9wX25oLT5uaF9vaWYgPSBydG5oLT5ydG5oX2lmaW5kZXg7CisJCW5leHRob3BfbmgtPm5oX3dlaWdodCA9IHJ0bmgtPnJ0bmhfaG9wcyArIDE7CiAKIAkJYXR0cmxlbiA9IHJ0bmhfYXR0cmxlbihydG5oKTsKIAkJaWYgKGF0dHJsZW4gPiAwKSB7CiAJCQlzdHJ1Y3QgbmxhdHRyICpubGEsICphdHRycyA9IHJ0bmhfYXR0cnMocnRuaCk7CiAKIAkJCW5sYSA9IG5sYV9maW5kKGF0dHJzLCBhdHRybGVuLCBSVEFfR0FURVdBWSk7Ci0JCQluaC0+bmhfZ3cgPSBubGEgPyBubGFfZ2V0X2JlMzIobmxhKSA6IDA7CisJCQluZXh0aG9wX25oLT5uaF9ndyA9IG5sYSA/IG5sYV9nZXRfYmUzMihubGEpIDogMDsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQogCQkJbmxhID0gbmxhX2ZpbmQoYXR0cnMsIGF0dHJsZW4sIFJUQV9GTE9XKTsKLQkJCW5oLT5uaF90Y2xhc3NpZCA9IG5sYSA/IG5sYV9nZXRfdTMyKG5sYSkgOiAwOworCQkJbmV4dGhvcF9uaC0+bmhfdGNsYXNzaWQgPSBubGEgPyBubGFfZ2V0X3UzMihubGEpIDogMDsKICNlbmRpZgogCQl9CiAKQEAgLTUyNywxMCArNTI4LDYgQEAKIAlpZiAobmgtPm5oX2d3KSB7CiAJCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKIAotI2lmZGVmIENPTkZJR19JUF9ST1VURV9QRVJWQVNJVkUKLQkJaWYgKG5oLT5uaF9mbGFncyZSVE5IX0ZfUEVSVkFTSVZFKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKIAkJaWYgKG5oLT5uaF9mbGFncyZSVE5IX0ZfT05MSU5LKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCkBAIC03MzgsNyArNzM1LDcgQEAKIAogCWZpLT5maWJfbmhzID0gbmhzOwogCWNoYW5nZV9uZXh0aG9wcyhmaSkgewotCQluaC0+bmhfcGFyZW50ID0gZmk7CisJCW5leHRob3BfbmgtPm5oX3BhcmVudCA9IGZpOwogCX0gZW5kZm9yX25leHRob3BzKGZpKQogCiAJaWYgKGNmZy0+ZmNfbXgpIHsKQEAgLTgwOCw3ICs4MDUsNyBAQAogCQkJZ290byBmYWlsdXJlOwogCX0gZWxzZSB7CiAJCWNoYW5nZV9uZXh0aG9wcyhmaSkgewotCQkJaWYgKChlcnIgPSBmaWJfY2hlY2tfbmgoY2ZnLCBmaSwgbmgpKSAhPSAwKQorCQkJaWYgKChlcnIgPSBmaWJfY2hlY2tfbmgoY2ZnLCBmaSwgbmV4dGhvcF9uaCkpICE9IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVuZGZvcl9uZXh0aG9wcyhmaSkKIAl9CkBAIC04NDMsMTEgKzg0MCwxMSBAQAogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAkJdW5zaWduZWQgaW50IGhhc2g7CiAKLQkJaWYgKCFuaC0+bmhfZGV2KQorCQlpZiAoIW5leHRob3BfbmgtPm5oX2RldikKIAkJCWNvbnRpbnVlOwotCQloYXNoID0gZmliX2RldmluZGV4X2hhc2hmbihuaC0+bmhfZGV2LT5pZmluZGV4KTsKKwkJaGFzaCA9IGZpYl9kZXZpbmRleF9oYXNoZm4obmV4dGhvcF9uaC0+bmhfZGV2LT5pZmluZGV4KTsKIAkJaGVhZCA9ICZmaWJfaW5mb19kZXZoYXNoW2hhc2hdOwotCQlobGlzdF9hZGRfaGVhZCgmbmgtPm5oX2hhc2gsIGhlYWQpOworCQlobGlzdF9hZGRfaGVhZCgmbmV4dGhvcF9uaC0+bmhfaGFzaCwgaGVhZCk7CiAJfSBlbmRmb3JfbmV4dGhvcHMoZmkpCiAJc3Bpbl91bmxvY2tfYmgoJmZpYl9pbmZvX2xvY2spOwogCXJldHVybiBmaTsKQEAgLTEwODAsMjEgKzEwNzcsMjEgQEAKIAkJcHJldl9maSA9IGZpOwogCQlkZWFkID0gMDsKIAkJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCQlpZiAobmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKQorCQkJaWYgKG5leHRob3BfbmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKQogCQkJCWRlYWQrKzsKLQkJCWVsc2UgaWYgKG5oLT5uaF9kZXYgPT0gZGV2ICYmCi0JCQkJCW5oLT5uaF9zY29wZSAhPSBzY29wZSkgewotCQkJCW5oLT5uaF9mbGFncyB8PSBSVE5IX0ZfREVBRDsKKwkJCWVsc2UgaWYgKG5leHRob3BfbmgtPm5oX2RldiA9PSBkZXYgJiYKKwkJCQkgbmV4dGhvcF9uaC0+bmhfc2NvcGUgIT0gc2NvcGUpIHsKKwkJCQluZXh0aG9wX25oLT5uaF9mbGFncyB8PSBSVE5IX0ZfREVBRDsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRICiAJCQkJc3Bpbl9sb2NrX2JoKCZmaWJfbXVsdGlwYXRoX2xvY2spOwotCQkJCWZpLT5maWJfcG93ZXIgLT0gbmgtPm5oX3Bvd2VyOwotCQkJCW5oLT5uaF9wb3dlciA9IDA7CisJCQkJZmktPmZpYl9wb3dlciAtPSBuZXh0aG9wX25oLT5uaF9wb3dlcjsKKwkJCQluZXh0aG9wX25oLT5uaF9wb3dlciA9IDA7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmZpYl9tdWx0aXBhdGhfbG9jayk7CiAjZW5kaWYKIAkJCQlkZWFkKys7CiAJCQl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSAotCQkJaWYgKGZvcmNlID4gMSAmJiBuaC0+bmhfZGV2ID09IGRldikgeworCQkJaWYgKGZvcmNlID4gMSAmJiBuZXh0aG9wX25oLT5uaF9kZXYgPT0gZGV2KSB7CiAJCQkJZGVhZCA9IGZpLT5maWJfbmhzOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE0NCwxOCArMTE0MSwyMCBAQAogCQlwcmV2X2ZpID0gZmk7CiAJCWFsaXZlID0gMDsKIAkJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCQlpZiAoIShuaC0+bmhfZmxhZ3MmUlROSF9GX0RFQUQpKSB7CisJCQlpZiAoIShuZXh0aG9wX25oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKIAkJCQlhbGl2ZSsrOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaWYgKG5oLT5uaF9kZXYgPT0gTlVMTCB8fCAhKG5oLT5uaF9kZXYtPmZsYWdzJklGRl9VUCkpCisJCQlpZiAobmV4dGhvcF9uaC0+bmhfZGV2ID09IE5VTEwgfHwKKwkJCSAgICAhKG5leHRob3BfbmgtPm5oX2Rldi0+ZmxhZ3MmSUZGX1VQKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChuaC0+bmhfZGV2ICE9IGRldiB8fCAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkKKwkJCWlmIChuZXh0aG9wX25oLT5uaF9kZXYgIT0gZGV2IHx8CisJCQkgICAgIV9faW5fZGV2X2dldF9ydG5sKGRldikpCiAJCQkJY29udGludWU7CiAJCQlhbGl2ZSsrOwogCQkJc3Bpbl9sb2NrX2JoKCZmaWJfbXVsdGlwYXRoX2xvY2spOwotCQkJbmgtPm5oX3Bvd2VyID0gMDsKLQkJCW5oLT5uaF9mbGFncyAmPSB+UlROSF9GX0RFQUQ7CisJCQluZXh0aG9wX25oLT5uaF9wb3dlciA9IDA7CisJCQluZXh0aG9wX25oLT5uaF9mbGFncyAmPSB+UlROSF9GX0RFQUQ7CiAJCQlzcGluX3VubG9ja19iaCgmZmliX211bHRpcGF0aF9sb2NrKTsKIAkJfSBlbmRmb3JfbmV4dGhvcHMoZmkpCiAKQEAgLTExODIsOSArMTE4MSw5IEBACiAJaWYgKGZpLT5maWJfcG93ZXIgPD0gMCkgewogCQlpbnQgcG93ZXIgPSAwOwogCQljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJCWlmICghKG5oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKLQkJCQlwb3dlciArPSBuaC0+bmhfd2VpZ2h0OwotCQkJCW5oLT5uaF9wb3dlciA9IG5oLT5uaF93ZWlnaHQ7CisJCQlpZiAoIShuZXh0aG9wX25oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKKwkJCQlwb3dlciArPSBuZXh0aG9wX25oLT5uaF93ZWlnaHQ7CisJCQkJbmV4dGhvcF9uaC0+bmhfcG93ZXIgPSBuZXh0aG9wX25oLT5uaF93ZWlnaHQ7CiAJCQl9CiAJCX0gZW5kZm9yX25leHRob3BzKGZpKTsKIAkJZmktPmZpYl9wb3dlciA9IHBvd2VyOwpAQCAtMTIwNCw5ICsxMjAzLDEwIEBACiAJdyA9IGppZmZpZXMgJSBmaS0+ZmliX3Bvd2VyOwogCiAJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCWlmICghKG5oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkgJiYgbmgtPm5oX3Bvd2VyKSB7Ci0JCQlpZiAoKHcgLT0gbmgtPm5oX3Bvd2VyKSA8PSAwKSB7Ci0JCQkJbmgtPm5oX3Bvd2VyLS07CisJCWlmICghKG5leHRob3BfbmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKSAmJgorCQkgICAgbmV4dGhvcF9uaC0+bmhfcG93ZXIpIHsKKwkJCWlmICgodyAtPSBuZXh0aG9wX25oLT5uaF9wb3dlcikgPD0gMCkgeworCQkJCW5leHRob3BfbmgtPm5oX3Bvd2VyLS07CiAJCQkJZmktPmZpYl9wb3dlci0tOwogCQkJCXJlcy0+bmhfc2VsID0gbmhzZWw7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmZpYl9tdWx0aXBhdGhfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZmUxMWY2MC4uNGI0YzJiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAvKiBBbiBhcnJheSBvZiBlcnJubyBmb3IgZXJyb3IgbWVzc2FnZXMgZnJvbSBkZXN0IHVucmVhY2guICovCiAvKiBSRkMgMTEyMjogMy4yLjIuMSBTdGF0ZXMgdGhhdCBORVRfVU5SRUFDSCwgSE9TVF9VTlJFQUNIIGFuZCBTUl9GQUlMRUQgTVVTVCBiZSBjb25zaWRlcmVkICd0cmFuc2llbnQgZXJycycuICovCiAKLXN0cnVjdCBpY21wX2VyciBpY21wX2Vycl9jb252ZXJ0W10gPSB7Citjb25zdCBzdHJ1Y3QgaWNtcF9lcnIgaWNtcF9lcnJfY29udmVydFtdID0gewogCXsKIAkJLmVycm5vID0gRU5FVFVOUkVBQ0gsCS8qIElDTVBfTkVUX1VOUkVBQ0ggKi8KIAkJLmZhdGFsID0gMCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCBhNDJmNjU4Li42M2JmMjk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCWltbC0+bmV4dCA9IGluZXQtPm1jX2xpc3Q7CiAJaW1sLT5zZmxpc3QgPSBOVUxMOwogCWltbC0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKLQlpbmV0LT5tY19saXN0ID0gaW1sOworCXJjdV9hc3NpZ25fcG9pbnRlcihpbmV0LT5tY19saXN0LCBpbWwpOwogCWlwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIpOwogCWVyciA9IDA7CiBkb25lOgpAQCAtMTgwNywyNCArMTgwNyw0NiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpycCkKK3sKKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzZjsKKworCXBzZiA9IGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGlwX3NmX3NvY2tsaXN0LCByY3UpOworCS8qIHNrX29tZW1fYWxsb2Mgc2hvdWxkIGhhdmUgYmVlbiBkZWNyZWFzZWQgYnkgdGhlIGNhbGxlciovCisJa2ZyZWUocHNmKTsKK30KKwogc3RhdGljIGludCBpcF9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbCwKIAkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzZiA9IGltbC0+c2ZsaXN0OwogCWludCBlcnI7CiAKLQlpZiAoaW1sLT5zZmxpc3QgPT0gTlVMTCkgeworCWlmIChwc2YgPT0gTlVMTCkgewogCQkvKiBhbnktc291cmNlIGVtcHR5IGV4Y2x1ZGUgY2FzZSAqLwogCQlyZXR1cm4gaXBfbWNfZGVsX3NyYyhpbl9kZXYsICZpbWwtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyLAogCQkJaW1sLT5zZm1vZGUsIDAsIE5VTEwsIDApOwogCX0KIAllcnIgPSBpcF9tY19kZWxfc3JjKGluX2RldiwgJmltbC0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIsCi0JCQlpbWwtPnNmbW9kZSwgaW1sLT5zZmxpc3QtPnNsX2NvdW50LAotCQkJaW1sLT5zZmxpc3QtPnNsX2FkZHIsIDApOwotCXNvY2tfa2ZyZWVfcyhzaywgaW1sLT5zZmxpc3QsIElQX1NGTFNJWkUoaW1sLT5zZmxpc3QtPnNsX21heCkpOwotCWltbC0+c2ZsaXN0ID0gTlVMTDsKKwkJCWltbC0+c2Ztb2RlLCBwc2YtPnNsX2NvdW50LCBwc2YtPnNsX2FkZHIsIDApOworCXJjdV9hc3NpZ25fcG9pbnRlcihpbWwtPnNmbGlzdCwgTlVMTCk7CisJLyogZGVjcmVhc2UgbWVtIG5vdyB0byBhdm9pZCB0aGUgbWVtbGVhayB3YXJuaW5nICovCisJYXRvbWljX3N1YihJUF9TRkxTSVpFKHBzZi0+c2xfbWF4KSwgJnNrLT5za19vbWVtX2FsbG9jKTsKKwljYWxsX3JjdSgmcHNmLT5yY3UsIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0pOwogCXJldHVybiBlcnI7CiB9CiAKKworc3RhdGljIHZvaWQgaXBfbWNfc29ja2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQoreworCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqaW1sOworCisJaW1sID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QsIHJjdSk7CisJLyogc2tfb21lbV9hbGxvYyBzaG91bGQgaGF2ZSBiZWVuIGRlY3JlYXNlZCBieSB0aGUgY2FsbGVyKi8KKwlrZnJlZShpbWwpOworfQorCisKIC8qCiAgKglBc2sgYSBzb2NrZXQgdG8gbGVhdmUgYSBncm91cC4KICAqLwpAQCAtMTg1NCwxMiArMTg3NiwxNCBAQAogCiAJCSh2b2lkKSBpcF9tY19sZWF2ZV9zcmMoc2ssIGltbCwgaW5fZGV2KTsKIAotCQkqaW1scCA9IGltbC0+bmV4dDsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKCppbWxwLCBpbWwtPm5leHQpOwogCiAJCWlmIChpbl9kZXYpCiAJCQlpcF9tY19kZWNfZ3JvdXAoaW5fZGV2LCBncm91cCk7CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOworCQkvKiBkZWNyZWFzZSBtZW0gbm93IHRvIGF2b2lkIHRoZSBtZW1sZWFrIHdhcm5pbmcgKi8KKwkJYXRvbWljX3N1YihzaXplb2YoKmltbCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZpbWwtPnJjdSwgaXBfbWNfc29ja2xpc3RfcmVjbGFpbSk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIWluX2RldikKQEAgLTE5NzQsOSArMTk5OCwxMiBAQAogCQlpZiAocHNsKSB7CiAJCQlmb3IgKGk9MDsgaTxwc2wtPnNsX2NvdW50OyBpKyspCiAJCQkJbmV3cHNsLT5zbF9hZGRyW2ldID0gcHNsLT5zbF9hZGRyW2ldOwotCQkJc29ja19rZnJlZV9zKHNrLCBwc2wsIElQX1NGTFNJWkUocHNsLT5zbF9tYXgpKTsKKwkJCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLworCQkJYXRvbWljX3N1YihJUF9TRkxTSVpFKHBzbC0+c2xfbWF4KSwgJnNrLT5za19vbWVtX2FsbG9jKTsKKwkJCWNhbGxfcmN1KCZwc2wtPnJjdSwgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbSk7CiAJCX0KLQkJcG1jLT5zZmxpc3QgPSBwc2wgPSBuZXdwc2w7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwbWMtPnNmbGlzdCwgbmV3cHNsKTsKKwkJcHNsID0gbmV3cHNsOwogCX0KIAlydiA9IDE7CS8qID4gMCBmb3IgaW5zZXJ0IGxvZ2ljIGJlbG93IGlmIHNsX2NvdW50IGlzIDAgKi8KIAlmb3IgKGk9MDsgaTxwc2wtPnNsX2NvdW50OyBpKyspIHsKQEAgLTIwNzIsMTEgKzIwOTksMTMgQEAKIAlpZiAocHNsKSB7CiAJCSh2b2lkKSBpcF9tY19kZWxfc3JjKGluX2RldiwgJm1zZi0+aW1zZl9tdWx0aWFkZHIsIHBtYy0+c2Ztb2RlLAogCQkJcHNsLT5zbF9jb3VudCwgcHNsLT5zbF9hZGRyLCAwKTsKLQkJc29ja19rZnJlZV9zKHNrLCBwc2wsIElQX1NGTFNJWkUocHNsLT5zbF9tYXgpKTsKKwkJLyogZGVjcmVhc2UgbWVtIG5vdyB0byBhdm9pZCB0aGUgbWVtbGVhayB3YXJuaW5nICovCisJCWF0b21pY19zdWIoSVBfU0ZMU0laRShwc2wtPnNsX21heCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZwc2wtPnJjdSwgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbSk7CiAJfSBlbHNlCiAJCSh2b2lkKSBpcF9tY19kZWxfc3JjKGluX2RldiwgJm1zZi0+aW1zZl9tdWx0aWFkZHIsIHBtYy0+c2Ztb2RlLAogCQkJMCwgTlVMTCwgMCk7Ci0JcG1jLT5zZmxpc3QgPSBuZXdwc2w7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHBtYy0+c2ZsaXN0LCBuZXdwc2wpOwogCXBtYy0+c2Ztb2RlID0gbXNmLT5pbXNmX2Ztb2RlOwogCWVyciA9IDA7CiBkb25lOgpAQCAtMjIwOSwzMCArMjIzOCw0MCBAQAogCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jOwogCXN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNsOwogCWludCBpOworCWludCByZXQ7CiAKKwlyZXQgPSAxOwogCWlmICghaXB2NF9pc19tdWx0aWNhc3QobG9jX2FkZHIpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAKLQlmb3IgKHBtYz1pbmV0LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yIChwbWM9cmN1X2RlcmVmZXJlbmNlKGluZXQtPm1jX2xpc3QpOyBwbWM7IHBtYz1yY3VfZGVyZWZlcmVuY2UocG1jLT5uZXh0KSkgewogCQlpZiAocG1jLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBsb2NfYWRkciAmJgogCQkgICAgcG1jLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBkaWYpCiAJCQlicmVhazsKIAl9CisJcmV0ID0gaW5ldC0+bWNfYWxsOwogCWlmICghcG1jKQotCQlyZXR1cm4gaW5ldC0+bWNfYWxsOworCQlnb3RvIHVubG9jazsKIAlwc2wgPSBwbWMtPnNmbGlzdDsKKwlyZXQgPSAocG1jLT5zZm1vZGUgPT0gTUNBU1RfRVhDTFVERSk7CiAJaWYgKCFwc2wpCi0JCXJldHVybiBwbWMtPnNmbW9kZSA9PSBNQ0FTVF9FWENMVURFOworCQlnb3RvIHVubG9jazsKIAogCWZvciAoaT0wOyBpPHBzbC0+c2xfY291bnQ7IGkrKykgewogCQlpZiAocHNsLT5zbF9hZGRyW2ldID09IHJtdF9hZGRyKQogCQkJYnJlYWs7CiAJfQorCXJldCA9IDA7CiAJaWYgKHBtYy0+c2Ztb2RlID09IE1DQVNUX0lOQ0xVREUgJiYgaSA+PSBwc2wtPnNsX2NvdW50KQotCQlyZXR1cm4gMDsKKwkJZ290byB1bmxvY2s7CiAJaWYgKHBtYy0+c2Ztb2RlID09IE1DQVNUX0VYQ0xVREUgJiYgaSA8IHBzbC0+c2xfY291bnQpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCQlnb3RvIHVubG9jazsKKwlyZXQgPSAxOwordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0yMjUxLDcgKzIyOTAsNyBAQAogCXJ0bmxfbG9jaygpOwogCXdoaWxlICgoaW1sID0gaW5ldC0+bWNfbGlzdCkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JCWluZXQtPm1jX2xpc3QgPSBpbWwtPm5leHQ7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihpbmV0LT5tY19saXN0LCBpbWwtPm5leHQpOwogCiAJCWluX2RldiA9IGluZXRkZXZfYnlfaW5kZXgobmV0LCBpbWwtPm11bHRpLmltcl9pZmluZGV4KTsKIAkJKHZvaWQpIGlwX21jX2xlYXZlX3NyYyhzaywgaW1sLCBpbl9kZXYpOwpAQCAtMjI1OSw3ICsyMjk4LDkgQEAKIAkJCWlwX21jX2RlY19ncm91cChpbl9kZXYsIGltbC0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIpOwogCQkJaW5fZGV2X3B1dChpbl9kZXYpOwogCQl9Ci0JCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOworCQkvKiBkZWNyZWFzZSBtZW0gbm93IHRvIGF2b2lkIHRoZSBtZW1sZWFrIHdhcm5pbmcgKi8KKwkJYXRvbWljX3N1YihzaXplb2YoKmltbCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZpbWwtPnJjdSwgaXBfbWNfc29ja2xpc3RfcmVjbGFpbSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC0yNjAzLDcgKzI2NDQsNyBAQAogCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBpZ21wX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpZ21wX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKIApAQCAtMjYyMSw3ICsyNjYyLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaWdtcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlnbXBfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsICJtY2ZpbHRlciIpOwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpZ21wIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCBlZTE2NDc1Li44ZGE2NDI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTUyOSw2ICs1MjksOCBAQAogCQkJCXN5bl9hY2tfcmVjYWxjKHJlcSwgdGhyZXNoLCBtYXhfcmV0cmllcywKIAkJCQkJICAgICAgIHF1ZXVlLT5yc2txX2RlZmVyX2FjY2VwdCwKIAkJCQkJICAgICAgICZleHBpcmUsICZyZXNlbmQpOworCQkJCWlmIChyZXEtPnJza19vcHMtPnN5bl9hY2tfdGltZW91dCkKKwkJCQkJcmVxLT5yc2tfb3BzLT5zeW5fYWNrX3RpbWVvdXQocGFyZW50LCByZXEpOwogCQkJCWlmICghZXhwaXJlICYmCiAJCQkJICAgICghcmVzZW5kIHx8CiAJCQkJICAgICAhcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhwYXJlbnQsIHJlcSwgTlVMTCkgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDg2OTY0YjM1My4uYjU5NDMwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvamhhc2guaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgpAQCAtMjA1LDExICsyMDcsMzQgQEAKIAlpZiAoKHFwLT5xLmxhc3RfaW4gJiBJTkVUX0ZSQUdfRklSU1RfSU4pICYmIHFwLT5xLmZyYWdtZW50cyAhPSBOVUxMKSB7CiAJCXN0cnVjdCBza19idWZmICpoZWFkID0gcXAtPnEuZnJhZ21lbnRzOwogCi0JCS8qIFNlbmQgYW4gSUNNUCAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLiAqLwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhlYWQtPmRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgcXAtPmlpZik7Ci0JCWlmIChoZWFkLT5kZXYpCi0JCQlpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7CisJCWlmICghaGVhZC0+ZGV2KQorCQkJZ290byBvdXRfcmN1X3VubG9jazsKKworCQkvKgorCQkgKiBPbmx5IHNlYXJjaCByb3V0ZXIgdGFibGUgZm9yIHRoZSBoZWFkIGZyYWdtZW50LAorCQkgKiB3aGVuIGRlZnJhZ2luZyB0aW1lb3V0IGF0IFBSRV9ST1VUSU5HIEhPT0suCisJCSAqLworCQlpZiAocXAtPnVzZXIgPT0gSVBfREVGUkFHX0NPTk5UUkFDS19JTiAmJiAhc2tiX2RzdChoZWFkKSkgeworCQkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoaGVhZCk7CisJCQlpbnQgZXJyID0gaXBfcm91dGVfaW5wdXQoaGVhZCwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKKwkJCQkJCSBpcGgtPnRvcywgaGVhZC0+ZGV2KTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKKwkJCS8qCisJCQkgKiBPbmx5IGFuIGVuZCBob3N0IG5lZWRzIHRvIHNlbmQgYW4gSUNNUAorCQkJICogIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZSwgcGVyIFJGQzc5Mi4KKwkJCSAqLworCQkJaWYgKHNrYl9ydGFibGUoaGVhZCktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQorCQkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKKwkJfQorCisJCS8qIFNlbmQgYW4gSUNNUCAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLiAqLworCQlpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7CitvdXRfcmN1X3VubG9jazoKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogb3V0OgpAQCAtNjQ2LDcgKzY3MSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgaW50IGlwNF9mcmFnc19uc19jdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwNF9mcmFnc19uc19jdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CkBAIC02NzYsNyArNzAxLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaXA0X2ZyYWdzX25zX2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA0X2ZyYWdzX25zX2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIApAQCAtNzA0LDcgKzcyOSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBpcHY0X2ZyYWdzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY0X2ZyYWdzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAkvKgogCSAqIEZyYWdtZW50IGNhY2hlIGxpbWl0cy4gV2Ugd2lsbCBjb21taXQgMjU2SyBhdCBvbmUgdGltZS4gU2hvdWxkIHdlCkBAIC03MjYsNyArNzUxLDcgQEAKIAlyZXR1cm4gaXA0X2ZyYWdzX25zX2N0bF9yZWdpc3RlcihuZXQpOwogfQogCi1zdGF0aWMgdm9pZCBpcHY0X2ZyYWdzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2NF9mcmFnc19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaXA0X2ZyYWdzX25zX2N0bF91bnJlZ2lzdGVyKG5ldCk7CiAJaW5ldF9mcmFnc19leGl0X25ldCgmbmV0LT5pcHY0LmZyYWdzLCAmaXA0X2ZyYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggZjM2Y2UxNS4uYzBjNTI3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTc5Myw3ICs3OTMsNyBAQAogCQl9CiAKIAkJaWYgKG10dSA+PSBJUFY2X01JTl9NVFUgJiYgbXR1IDwgc2tiLT5sZW4gLSB0dW5uZWwtPmhsZW4gKyBncmVfaGxlbikgewotCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBkZXYpOworCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJCWlwX3J0X3B1dChydCk7CiAJCQlnb3RvIHR4X2Vycm9yOwogCQl9CkBAIC0xMzA3LDcgKzEzMDcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpcGdyZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIAlpbnQgZXJyOwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpcGdyZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwZ3JlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXBncmVfbmV0ICppZ247CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMTY2NSwxNCArMTY2NSwxNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiR1JFIG92ZXIgSVB2NCB0dW5uZWxpbmcgZHJpdmVyXG4iKTsKIAotCWlmIChpbmV0X2FkZF9wcm90b2NvbCgmaXBncmVfcHJvdG9jb2wsIElQUFJPVE9fR1JFKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaXBncmUgaW5pdDogY2FuJ3QgYWRkIHByb3RvY29sXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBncmVfbmV0X29wcyk7CiAJaWYgKGVyciA8IDApCi0JCWdvdG8gZ2VuX2RldmljZV9mYWlsZWQ7CisJCXJldHVybiBlcnI7CisKKwllcnIgPSBpbmV0X2FkZF9wcm90b2NvbCgmaXBncmVfcHJvdG9jb2wsIElQUFJPVE9fR1JFKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJpcGdyZSBpbml0OiBjYW4ndCBhZGQgcHJvdG9jb2xcbiIpOworCQlnb3RvIGFkZF9wcm90b19mYWlsZWQ7CisJfQogCiAJZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKCZpcGdyZV9saW5rX29wcyk7CiAJaWYgKGVyciA8IDApCkBAIC0xNjg4LDkgKzE2ODksOSBAQAogdGFwX29wc19mYWlsZWQ6CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmlwZ3JlX2xpbmtfb3BzKTsKIHJ0bmxfbGlua19mYWlsZWQ6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcGdyZV9uZXRfb3BzKTsKLWdlbl9kZXZpY2VfZmFpbGVkOgogCWluZXRfZGVsX3Byb3RvY29sKCZpcGdyZV9wcm90b2NvbCwgSVBQUk9UT19HUkUpOworYWRkX3Byb3RvX2ZhaWxlZDoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwZ3JlX25ldF9vcHMpOwogCWdvdG8gb3V0OwogfQogCkBAIC0xNjk4LDkgKzE2OTksOSBAQAogewogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZpcGdyZV90YXBfb3BzKTsKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmaXBncmVfbGlua19vcHMpOwotCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBncmVfbmV0X29wcyk7CiAJaWYgKGluZXRfZGVsX3Byb3RvY29sKCZpcGdyZV9wcm90b2NvbCwgSVBQUk9UT19HUkUpIDwgMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXBncmUgY2xvc2U6IGNhbid0IHJlbW92ZSBwcm90b2NvbFxuIik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcGdyZV9uZXRfb3BzKTsKIH0KIAogbW9kdWxlX2luaXQoaXBncmVfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBjYWZhZDliLi42NDRkYzQzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTQ1MSw3ICs0NTEsOCBAQAogCQkJICAgICAoMTw8SVBfVFRMKSB8ICgxPDxJUF9IRFJJTkNMKSB8CiAJCQkgICAgICgxPDxJUF9NVFVfRElTQ09WRVIpIHwgKDE8PElQX1JFQ1ZFUlIpIHwKIAkJCSAgICAgKDE8PElQX1JPVVRFUl9BTEVSVCkgfCAoMTw8SVBfRlJFRUJJTkQpIHwKLQkJCSAgICAgKDE8PElQX1BBU1NTRUMpIHwgKDE8PElQX1RSQU5TUEFSRU5UKSkpIHx8CisJCQkgICAgICgxPDxJUF9QQVNTU0VDKSB8ICgxPDxJUF9UUkFOU1BBUkVOVCkgfAorCQkJICAgICAoMTw8SVBfTUlOVFRMKSkpIHx8CiAJICAgIG9wdG5hbWUgPT0gSVBfTVVMVElDQVNUX1RUTCB8fAogCSAgICBvcHRuYW1lID09IElQX01VTFRJQ0FTVF9BTEwgfHwKIAkgICAgb3B0bmFtZSA9PSBJUF9NVUxUSUNBU1RfTE9PUCB8fApAQCAtOTM2LDYgKzkzNywxNCBAQAogCQlpbmV0LT50cmFuc3BhcmVudCA9ICEhdmFsOwogCQlicmVhazsKIAorCWNhc2UgSVBfTUlOVFRMOgorCQlpZiAob3B0bGVuIDwgMSkKKwkJCWdvdG8gZV9pbnZhbDsKKwkJaWYgKHZhbCA8IDAgfHwgdmFsID4gMjU1KQorCQkJZ290byBlX2ludmFsOworCQlpbmV0LT5taW5fdHRsID0gdmFsOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAkJYnJlYWs7CkBAIC0xMTk4LDYgKzEyMDcsOSBAQAogCWNhc2UgSVBfVFJBTlNQQVJFTlQ6CiAJCXZhbCA9IGluZXQtPnRyYW5zcGFyZW50OwogCQlicmVhazsKKwljYXNlIElQX01JTlRUTDoKKwkJdmFsID0gaW5ldC0+bWluX3R0bDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29tcC5jIGIvbmV0L2lwdjQvaXBjb21wLmMKaW5kZXggNTQ0Y2UwOC4uNjI5MDY3NTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yNSw2ICsyNSw3IEBACiAKIHN0YXRpYyB2b2lkIGlwY29tcDRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCV9fYmUzMiBzcGk7CiAJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjaCA9IChzdHJ1Y3QgaXBfY29tcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwpAQCAtMzUsNyArMzYsNyBAQAogCQlyZXR1cm47CiAKIAlzcGkgPSBodG9ubChudG9ocyhpcGNoLT5jcGkpKTsKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAoJmluaXRfbmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAogCQkJICAgICAgc3BpLCBJUFBST1RPX0NPTVAsIEFGX0lORVQpOwogCWlmICgheCkKIAkJcmV0dXJuOwpAQCAtNDcsOSArNDgsMTAgQEAKIC8qIFdlIGFsd2F5cyBob2xkIG9uZSB0dW5uZWwgdXNlciByZWZlcmVuY2UgdG8gaW5kaWNhdGUgYSB0dW5uZWwgKi8KIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqaXBjb21wX3R1bm5lbF9jcmVhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0OwogCi0JdCA9IHhmcm1fc3RhdGVfYWxsb2MoJmluaXRfbmV0KTsKKwl0ID0geGZybV9zdGF0ZV9hbGxvYyhuZXQpOwogCWlmICh0ID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC02MSw2ICs2Myw3IEBACiAJdC0+cHJvcHMubW9kZSA9IHgtPnByb3BzLm1vZGU7CiAJdC0+cHJvcHMuc2FkZHIuYTQgPSB4LT5wcm9wcy5zYWRkci5hNDsKIAl0LT5wcm9wcy5mbGFncyA9IHgtPnByb3BzLmZsYWdzOworCW1lbWNweSgmdC0+bWFyaywgJngtPm1hcmssIHNpemVvZih0LT5tYXJrKSk7CiAKIAlpZiAoeGZybV9pbml0X3N0YXRlKHQpKQogCQlnb3RvIGVycm9yOwpAQCAtODIsMTAgKzg1LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgaXBjb21wX3R1bm5lbF9hdHRhY2goc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0OworCXUzMiBtYXJrID0geC0+bWFyay52ICYgeC0+bWFyay5tOwogCi0JdCA9IHhmcm1fc3RhdGVfbG9va3VwKCZpbml0X25ldCwgKHhmcm1fYWRkcmVzc190ICopJngtPmlkLmRhZGRyLmE0LAorCXQgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5pZC5kYWRkci5hNCwKIAkJCSAgICAgIHgtPnByb3BzLnNhZGRyLmE0LCBJUFBST1RPX0lQSVAsIEFGX0lORVQpOwogCWlmICghdCkgewogCQl0ID0gaXBjb21wX3R1bm5lbF9jcmVhdGUoeCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWRhMDRmZS4uMmYzMDJkMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMTMwLDcgKzEzMCw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmZiX3R1bm5lbF9kZXY7CiB9OwogCi1zdGF0aWMgdm9pZCBpcGlwX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC03MzAsNyArNzI5LDcgQEAKIAlpcGlwX3R1bm5lbF9iaW5kX2RldihkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpcGlwX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwpAQCAtNzczLDcgKzc3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBpcGlwX25ldCAqaXBuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7CiAJaW50IGVycjsKQEAgLTgwNiw3ICs4MDUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGlwaXBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGlwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXBpcF9uZXQgKmlwbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBpcF9uZXRfaWQpOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTgzMSwxNSArODMwLDE0IEBACiAKIAlwcmludGsoYmFubmVyKTsKIAotCWlmICh4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoJmlwaXBfaGFuZGxlciwgQUZfSU5FVCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaXBpcCBpbml0OiBjYW4ndCByZWdpc3RlciB0dW5uZWxcbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcGlwX25ldF9vcHMpOwotCWlmIChlcnIpCi0JCXhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKCZpcGlwX2hhbmRsZXIsIEFGX0lORVQpOwotCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0geGZybTRfdHVubmVsX3JlZ2lzdGVyKCZpcGlwX2hhbmRsZXIsIEFGX0lORVQpOworCWlmIChlcnIgPCAwKSB7CisJCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBpcF9uZXRfb3BzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXBpcCBpbml0OiBjYW4ndCByZWdpc3RlciB0dW5uZWxcbiIpOworCX0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggNTQ1OTZmNy4uODU4MmUxMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTE2Myw5ICsxMTYzLDYgQEAKIAlpbnQgY3Q7CiAJTElTVF9IRUFEKGxpc3QpOwogCi0JaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KIAlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbMF07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA5MDIwM2UxLi5mMDdkNzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oPgorI2luY2x1ZGUgIi4uLy4uL25ldGZpbHRlci94dF9yZXBsZGF0YS5oIgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+Iik7CkBAIC01OCw2ICs1OSwxMiBAQAogI2RlZmluZSBBUlBfTkZfQVNTRVJUKHgpCiAjZW5kaWYKIAordm9pZCAqYXJwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqaW5mbykKK3sKKwlyZXR1cm4geHRfYWxsb2NfaW5pdGlhbF90YWJsZShhcnB0LCBBUlBUKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFycHRfYWxsb2NfaW5pdGlhbF90YWJsZSk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGFycF9kZXZhZGRyX2NvbXBhcmUoY29uc3Qgc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvICphcCwKIAkJCQkgICAgICBjb25zdCBjaGFyICpoZHJfYWRkciwgaW50IGxlbikKIHsKQEAgLTIyNiw3ICsyMzMsMTQgQEAKIAlyZXR1cm4gTkZfRFJPUDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXJwdF9lbnRyeSAqZ2V0X2VudHJ5KHZvaWQgKmJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqCithcnB0X2dldF90YXJnZXRfYyhjb25zdCBzdHJ1Y3QgYXJwdF9lbnRyeSAqZSkKK3sKKwlyZXR1cm4gYXJwdF9nZXRfdGFyZ2V0KChzdHJ1Y3QgYXJwdF9lbnRyeSAqKWUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhcnB0X2VudHJ5ICoKK2dldF9lbnRyeShjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXJldHVybiAoc3RydWN0IGFycHRfZW50cnkgKikoYmFzZSArIG9mZnNldCk7CiB9CkBAIC0yNzMsNyArMjg3LDcgQEAKIAogCWFycCA9IGFycF9oZHIoc2tiKTsKIAlkbyB7Ci0JCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKKwkJY29uc3Qgc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OwogCQlpbnQgaGRyX2xlbjsKIAogCQlpZiAoIWFycF9wYWNrZXRfbWF0Y2goYXJwLCBza2ItPmRldiwgaW5kZXYsIG91dGRldiwgJmUtPmFycCkpIHsKQEAgLTI4NSw3ICsyOTksNyBAQAogCQkJKDIgKiBza2ItPmRldi0+YWRkcl9sZW4pOwogCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgaGRyX2xlbiwgMSk7CiAKLQkJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwkJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCiAJCS8qIFN0YW5kYXJkIHRhcmdldD8gKi8KIAkJaWYgKCF0LT51Lmtlcm5lbC50YXJnZXQtPnRhcmdldCkgewpAQCAtMzUxLDcgKzM2NSw3IEBACiAvKiBGaWd1cmVzIG91dCBmcm9tIHdoYXQgaG9vayBlYWNoIHJ1bGUgY2FuIGJlIGNhbGxlZDogcmV0dXJucyAwIGlmCiAgKiB0aGVyZSBhcmUgbG9vcHMuICBQdXRzIGhvb2sgYml0bWFzayBpbiBjb21lZnJvbS4KICAqLwotc3RhdGljIGludCBtYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCitzdGF0aWMgaW50IG1hcmtfc291cmNlX2NoYWlucyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKIAkJCSAgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwpAQCAtMzcyLDcgKzM4Niw3IEBACiAKIAkJZm9yICg7OykgewogCQkJY29uc3Qgc3RydWN0IGFycHRfc3RhbmRhcmRfdGFyZ2V0ICp0Ci0JCQkJPSAodm9pZCAqKWFycHRfZ2V0X3RhcmdldChlKTsKKwkJCQk9ICh2b2lkICopYXJwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJCQlpbnQgdmlzaXRlZCA9IGUtPmNvbWVmcm9tICYgKDEgPDwgaG9vayk7CiAKIAkJCWlmIChlLT5jb21lZnJvbSAmICgxIDw8IE5GX0FSUF9OVU1IT09LUykpIHsKQEAgLTQ1Niw3ICs0NzAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQogewogCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIApAQCAtNDY4LDcgKzQ4Miw3IEBACiAJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0KSA+IGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgdC0+dS50YXJnZXRfc2l6ZSA+IGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDk4LDggKzUxMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1maW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CkBAIC01MjQsOCArNTM3LDYgQEAKIAlyZXQgPSBjaGVja190YXJnZXQoZSwgbmFtZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiBlcnI6CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKQEAgLTUzMywxNCArNTQ0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBhcnB0X2VudHJ5ICplKQorc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplKQogewogCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdDsKIAogCWlmICghdW5jb25kaXRpb25hbCgmZS0+YXJwKSkKIAkJcmV0dXJuIGZhbHNlOwotCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCXZlcmRpY3QgPSAoKHN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OwpAQCAtNTUwLDEyICs1NjEsMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGFycHRfZW50cnkgKmUsCiAJCQkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYmFzZSwKLQkJCQkJICAgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxpbWl0LAogCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50ICppKQorCQkJCQkgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcykKIHsKIAl1bnNpZ25lZCBpbnQgaDsKIApAQCAtNTkyLDE5ICs2MDIsMTQgQEAKIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAllLT5jb3VudGVycyA9ICgoc3RydWN0IHh0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CiAJZS0+Y29tZWZyb20gPSAwOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjbGVhbnVwX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSkKIHsKIAlzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHBhcjsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAKLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7Ci0KIAl0ID0gYXJwdF9nZXRfdGFyZ2V0KGUpOwogCXBhci50YXJnZXQgICA9IHQtPnUua2VybmVsLnRhcmdldDsKIAlwYXIudGFyZ2luZm8gPSB0LT5kYXRhOwpAQCAtNjEyLDI2ICs2MTcsMjAgQEAKIAlpZiAocGFyLnRhcmdldC0+ZGVzdHJveSAhPSBOVUxMKQogCQlwYXIudGFyZ2V0LT5kZXN0cm95KCZwYXIpOwogCW1vZHVsZV9wdXQocGFyLnRhcmdldC0+bWUpOwotCXJldHVybiAwOwogfQogCiAvKiBDaGVja3MgYW5kIHRyYW5zbGF0ZXMgdGhlIHVzZXItc3VwcGxpZWQgdGFibGUgc2VnbWVudCAoaGVsZCBpbgogICogbmV3aW5mbykuCiAgKi8KLXN0YXRpYyBpbnQgdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKLQkJCSAgIHZvaWQgKmVudHJ5MCwKLQkJCSAgIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgdW5zaWduZWQgaW50IG51bWJlciwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAotCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzKQorc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHZvaWQgKmVudHJ5MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcnB0X3JlcGxhY2UgKnJlcGwpCiB7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAotCW5ld2luZm8tPnNpemUgPSBzaXplOwotCW5ld2luZm8tPm51bWJlciA9IG51bWJlcjsKKwluZXdpbmZvLT5zaXplID0gcmVwbC0+c2l6ZTsKKwluZXdpbmZvLT5udW1iZXIgPSByZXBsLT5udW1fZW50cmllczsKIAogCS8qIEluaXQgYWxsIGhvb2tzIHRvIGltcG9zc2libGUgdmFsdWUuICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0FSUF9OVU1IT09LUzsgaSsrKSB7CkBAIC02NDMsNTIgKzY0Miw2MyBAQAogCWkgPSAwOwogCiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQkgY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3MsCi0JCQkJIG5ld2luZm8sCi0JCQkJIGVudHJ5MCwKLQkJCQkgZW50cnkwICsgc2l6ZSwKLQkJCQkgaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgZW50cnkwLCBuZXdpbmZvLT5zaXplKSB7CisJCXJldCA9IGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIsIG5ld2luZm8sIGVudHJ5MCwKKwkJCQkJCSBlbnRyeTAgKyByZXBsLT5zaXplLAorCQkJCQkJIHJlcGwtPmhvb2tfZW50cnksCisJCQkJCQkgcmVwbC0+dW5kZXJmbG93LAorCQkJCQkJIHJlcGwtPnZhbGlkX2hvb2tzKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCSsraTsKKwl9CiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogQVJQVF9FTlRSWV9JVEVSQVRFIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChpICE9IG51bWJlcikgeworCWlmIChpICE9IHJlcGwtPm51bV9lbnRyaWVzKSB7CiAJCWR1cHJpbnRmKCJ0cmFuc2xhdGVfdGFibGU6ICV1IG5vdCAldSBlbnRyaWVzXG4iLAotCQkJIGksIG51bWJlcik7CisJCQkgaSwgcmVwbC0+bnVtX2VudHJpZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBDaGVjayBob29rcyBhbGwgYXNzaWduZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfQVJQX05VTUhPT0tTOyBpKyspIHsKIAkJLyogT25seSBob29rcyB3aGljaCBhcmUgdmFsaWQgKi8KLQkJaWYgKCEodmFsaWRfaG9va3MgJiAoMSA8PCBpKSkpCisJCWlmICghKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQogCQkJY29udGludWU7CiAJCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2ldID09IDB4RkZGRkZGRkYpIHsKIAkJCWR1cHJpbnRmKCJJbnZhbGlkIGhvb2sgZW50cnkgJXUgJXVcbiIsCi0JCQkJIGksIGhvb2tfZW50cmllc1tpXSk7CisJCQkJIGksIHJlcGwtPmhvb2tfZW50cnlbaV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKG5ld2luZm8tPnVuZGVyZmxvd1tpXSA9PSAweEZGRkZGRkZGKSB7CiAJCQlkdXByaW50ZigiSW52YWxpZCB1bmRlcmZsb3cgJXUgJXVcbiIsCi0JCQkJIGksIHVuZGVyZmxvd3NbaV0pOworCQkJCSBpLCByZXBsLT51bmRlcmZsb3dbaV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkgeworCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHJlcGwtPnZhbGlkX2hvb2tzLCBlbnRyeTApKSB7CiAJCWR1cHJpbnRmKCJMb29waW5nIGhvb2tcbiIpOwogCQlyZXR1cm4gLUVMT09QOwogCX0KIAogCS8qIEZpbmFsbHksIGVhY2ggc2FuaXR5IGNoZWNrIG11c3QgcGFzcyAqLwogCWkgPSAwOwotCXJldCA9IEFSUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCi0JCQkJIGZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX2VudHJ5KGl0ZXIsIHJlcGwtPm5hbWUsIHJlcGwtPnNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJKytpOworCX0KIAogCWlmIChyZXQgIT0gMCkgewotCQlBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWNsZWFudXBfZW50cnksICZpKTsKKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpIHsKKwkJCWlmIChpLS0gPT0gMCkKKwkJCQlicmVhazsKKwkJCWNsZWFudXBfZW50cnkoaXRlcik7CisJCX0KIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTcwMSwzMCArNzExLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogR2V0cyBjb3VudGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFkZF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgdG90YWxbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCUFERF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNldF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgdG90YWxbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCVNFVF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKIAkJCSBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBjdXJjcHU7CkBAIC03NDAsMzIgKzczMCwzMiBAQAogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWkgPSAwOwotCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2N1cmNwdV0sCi0JCQkgICB0LT5zaXplLAotCQkJICAgc2V0X2VudHJ5X3RvX2NvdW50ZXIsCi0JCQkgICBjb3VudGVycywKLQkJCSAgICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3VyY3B1XSwgdC0+c2l6ZSkgeworCQlTRVRfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCSAgICBpdGVyLT5jb3VudGVycy5wY250KTsKKwkJKytpOworCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CiAJCXh0X2luZm9fd3Jsb2NrKGNwdSk7Ci0JCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCi0JCQkJICAgdC0+c2l6ZSwKLQkJCQkgICBhZGRfZW50cnlfdG9fY291bnRlciwKLQkJCQkgICBjb3VudGVycywKLQkJCQkgICAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CisJCQlBRERfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCQkgICAgaXRlci0+Y291bnRlcnMucGNudCk7CisJCQkrK2k7CisJCX0KIAkJeHRfaW5mb193cnVubG9jayhjcHUpOwogCX0KIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKK3N0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtNzgzLDExICs3NzMsMTEgQEAKIH0KIAogc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJCQlzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkJCWNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJdm9pZCBfX3VzZXIgKnVzZXJwdHIpCiB7CiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwotCXN0cnVjdCBhcnB0X2VudHJ5ICplOworCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKQEAgLTgwNyw3ICs3OTcsNyBAQAogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgPCB0b3RhbF9zaXplOyBvZmYgKz0gZS0+bmV4dF9vZmZzZXQsIG51bSsrKXsKLQkJc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCQljb25zdCBzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAKIAkJZSA9IChzdHJ1Y3QgYXJwdF9lbnRyeSAqKShsb2NfY3B1X2VudHJ5ICsgb2ZmKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmCkBAIC04MTgsNyArODA4LDcgQEAKIAkJCWdvdG8gZnJlZV9jb3VudGVyczsKIAkJfQogCi0JCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJCXQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS0+dGFyZ2V0X29mZnNldAogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCwKIAkJCQkJICAgIHUudXNlci5uYW1lKSwKQEAgLTgzNSw3ICs4MjUsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3RhdGljIHZvaWQgY29tcGF0X3N0YW5kYXJkX2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJaW50IHYgPSAqKGNvbXBhdF9pbnRfdCAqKXNyYzsKIApAQCAtODQ0LDcgKzgzNCw3IEBACiAJbWVtY3B5KGRzdCwgJnYsIHNpemVvZih2KSk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBjb21wYXRfc3RhbmRhcmRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CiAKQEAgLTg1MywxOCArODQzLDE4IEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjdiwgc2l6ZW9mKGN2KSkgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RhdGljIGludCBjb21wYXRfY2FsY19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKK3N0YXRpYyBpbnQgY29tcGF0X2NhbGNfZW50cnkoY29uc3Qgc3RydWN0IGFycHRfZW50cnkgKmUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAotCQkJICAgICB2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7Ci0Jc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OwogCWludCBvZmYsIGksIHJldDsKIAogCW9mZiA9IHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5KTsKIAllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSBiYXNlOwogCi0JdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwl0ID0gYXJwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJb2ZmICs9IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KHQtPnUua2VybmVsLnRhcmdldCk7CiAJbmV3aW5mby0+c2l6ZSAtPSBvZmY7CiAJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19BUlAsIGVudHJ5X29mZnNldCwgb2ZmKTsKQEAgLTg4NSw3ICs4NzUsOSBAQAogc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlpbnQgcmV0OwogCiAJaWYgKCFuZXdpbmZvIHx8ICFpbmZvKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg5NCwxMyArODg2LDE3IEBACiAJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gMDsKIAlsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlyZXR1cm4gQVJQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIGluZm8tPnNpemUsCi0JCQkJICBjb21wYXRfY2FsY19lbnRyeSwgaW5mbywgbG9jX2NwdV9lbnRyeSwKLQkJCQkgIG5ld2luZm8pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbiwgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZW4sIGludCBjb21wYXQpCiB7CiAJY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CiAJc3RydWN0IHh0X3RhYmxlICp0OwpAQCAtOTU5LDcgKzk1NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCi0JCSAgICAgICBpbnQgKmxlbikKKwkJICAgICAgIGNvbnN0IGludCAqbGVuKQogewogCWludCByZXQ7CiAJc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0OwpAQCAtMTAxMCw2ICsxMDA2LDcgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbzsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwogCXZvaWQgKmxvY19jcHVfb2xkX2VudHJ5OworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJcmV0ID0gMDsKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSwKQEAgLTEwNTMsOCArMTA1MCw4IEBACiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCiAJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwKLQkJCSAgIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9vbGRfZW50cnksIG9sZGluZm8tPnNpemUpCisJCWNsZWFudXBfZW50cnkoaXRlcik7CiAKIAl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLApAQCAtMTA3MywxMiArMTA3MCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBhcnB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA5OSw5ICsxMDk4LDcgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAJfQogCi0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCB0bXAuc2l6ZSwgdG1wLm51bV9lbnRyaWVzLAotCQkJICAgICAgdG1wLmhvb2tfZW50cnksIHRtcC51bmRlcmZsb3cpOworCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCAmdG1wKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCkBAIC0xMTE0LDI3ICsxMTExLDE1IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbnQKLWFkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKLQkJCSAgIGludCBjb21wYXQpCitzdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHZvaWQgX191c2VyICp1c2VyLAorCQkJICAgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3VyY3B1OwogCXN0cnVjdCB4dF9jb3VudGVyc19pbmZvIHRtcDsKQEAgLTExNDcsNiArMTEzMiw3IEBACiAJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJc3RydWN0IGNvbXBhdF94dF9jb3VudGVyc19pbmZvIGNvbXBhdF90bXA7CiAKQEAgLTEyMDQsMTEgKzExOTAsMTAgQEAKIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKIAl4dF9pbmZvX3dybG9jayhjdXJjcHUpOwotCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LAotCQkJICAgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAotCQkJICAgcGFkZGMsCi0JCQkgICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CisJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKKwkJKytpOworCX0KIAl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CiAgdW5sb2NrX3VwX2ZyZWU6CiAJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC0xMjIxLDI4ICsxMjA2LDIyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW5saW5lIGludAotY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplKQogewogCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQogCXQgPSBjb21wYXRfYXJwdF9nZXRfdGFyZ2V0KGUpOwogCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqbGltaXQsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKLQkJCQkgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkgIHVuc2lnbmVkIGludCAqaSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CkBAIC0xMzAyLDggKzEyODEsNiBAQAogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCW1lbXNldCgmZS0+Y291bnRlcnMsIDAsIHNpemVvZihlLT5jb3VudGVycykpOwogCWUtPmNvbWVmcm9tID0gMDsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogcmVsZWFzZV90YXJnZXQ6CkBAIC0xMzQ3LDE5ICsxMzI0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb21wYXRfY2hlY2tfZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCQkgIHN0cnVjdCB4dF90YWJsZV9pbmZvICoqcGluZm8sCkBAIC0xMzcyLDggKzEzMzYsMTAgQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKmluZm87CiAJdm9pZCAqcG9zLCAqZW50cnkwLCAqZW50cnkxOworCXN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSAqaXRlcjA7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXIxOwogCXVuc2lnbmVkIGludCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpbmZvID0gKnBpbmZvOwogCWVudHJ5MCA9ICpwZW50cnkwOwpAQCAtMTM5MCwxMyArMTM1NiwxNyBAQAogCWogPSAwOwogCXh0X2NvbXBhdF9sb2NrKE5GUFJPVE9fQVJQKTsKIAkvKiBXYWxrIHRocm91Z2ggZW50cmllcywgY2hlY2tpbmcgb2Zmc2V0cy4gKi8KLQlyZXQgPSBDT01QQVRfQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwKLQkJCQkJY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCQlpbmZvLCAmc2l6ZSwgZW50cnkwLAotCQkJCQllbnRyeTAgKyB0b3RhbF9zaXplLAotCQkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZqLCBuYW1lKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJcmV0ID0gY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIwLCBpbmZvLCAmc2l6ZSwKKwkJCQkJCQllbnRyeTAsCisJCQkJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKKwkJCQkJCQlob29rX2VudHJpZXMsCisJCQkJCQkJdW5kZXJmbG93cywKKwkJCQkJCQluYW1lKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkrK2o7CisJfQogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoaiAhPSBudW1iZXIpIHsKQEAgLTE0MzUsOSArMTQwNSwxMiBAQAogCWVudHJ5MSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gZW50cnkxOwogCXNpemUgPSB0b3RhbF9zaXplOwotCXJldCA9IENPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAotCQkJCQljb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIsCi0JCQkJCSZwb3MsICZzaXplLCBuYW1lLCBuZXdpbmZvLCBlbnRyeTEpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIoaXRlcjAsICZwb3MsICZzaXplLAorCQkJCQkJICBuYW1lLCBuZXdpbmZvLCBlbnRyeTEpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwl9CiAJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoTkZQUk9UT19BUlApOwogCXh0X2NvbXBhdF91bmxvY2soTkZQUk9UT19BUlApOwogCWlmIChyZXQpCkBAIC0xNDQ4LDEzICsxNDIxLDMyIEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCiAJaSA9IDA7Ci0JcmV0ID0gQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MSwgbmV3aW5mby0+c2l6ZSwgY29tcGF0X2NoZWNrX2VudHJ5LAotCQkJCSBuYW1lLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCXJldCA9IGNoZWNrX3RhcmdldChpdGVyMSwgbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCWlmIChyZXQpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGkgbWF0Y2hlcyBuZWVkIGNsZWFudXBfZW50cnkgKGNhbGxzIC0+ZGVzdHJveSkKKwkJICogYmVjYXVzZSB0aGV5IGhhZCBjYWxsZWQgLT5jaGVjayBhbHJlYWR5LiBUaGUgb3RoZXIgai1pCisJCSAqIGVudHJpZXMgbmVlZCBvbmx5IHJlbGVhc2UuCisJCSAqLworCQlpbnQgc2tpcCA9IGk7CiAJCWogLT0gaTsKLQkJQ09NUEFUX0FSUFRfRU5UUllfSVRFUkFURV9DT05USU5VRShlbnRyeTAsIG5ld2luZm8tPnNpemUsIGksCi0JCQkJCQkgICBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOwotCQlBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKHNraXAtLSA+IDApCisJCQkJY29udGludWU7CisJCQlpZiAoai0tID09IDApCisJCQkJYnJlYWs7CisJCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJCX0KKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIxKTsKKwkJfQogCQl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQ3Miw3ICsxNDY0LDExIEBACiBmcmVlX25ld2luZm86CiAJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogb3V0OgotCUNPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLCBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlpZiAoai0tID09IDApCisJCQlicmVhazsKKwkJY29tcGF0X3JlbGVhc2VfZW50cnkoaXRlcjApOworCX0KIAlyZXR1cm4gcmV0Owogb3V0X3VubG9jazoKIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhORlBST1RPX0FSUCk7CkBAIC0xNDk5LDYgKzE0OTUsNyBAQAogCXN0cnVjdCBjb21wYXRfYXJwdF9yZXBsYWNlIHRtcDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE1MzYsNyArMTUzMyw4IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTE1NzAsNyArMTU2OCw3IEBACiBzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGFycHRfZW50cnkgKmUsIHZvaWQgX191c2VyICoqZHN0cHRyLAogCQkJCSAgICAgY29tcGF0X3VpbnRfdCAqc2l6ZSwKIAkJCQkgICAgIHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnMsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaSkKIHsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5IF9fdXNlciAqY2U7CkBAIC0xNTc4LDE0ICsxNTc2LDEyIEBACiAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVGQVVMVDsKIAlvcmlnc2l6ZSA9ICpzaXplOwogCWNlID0gKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSBfX3VzZXIgKikqZHN0cHRyOwotCWlmIChjb3B5X3RvX3VzZXIoY2UsIGUsIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSkpKQotCQlnb3RvIG91dDsKLQotCWlmIChjb3B5X3RvX3VzZXIoJmNlLT5jb3VudGVycywgJmNvdW50ZXJzWyppXSwgc2l6ZW9mKGNvdW50ZXJzWyppXSkpKQotCQlnb3RvIG91dDsKKwlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpKSAhPSAwIHx8CisJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCisJICAgIHNpemVvZihjb3VudGVyc1tpXSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5KTsKIAkqc2l6ZSAtPSBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpIC0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSk7CkBAIC0xNTk1LDE4ICsxNTkxLDEyIEBACiAJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKIAlyZXQgPSB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIodCwgZHN0cHRyLCBzaXplKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXQgPSAtRUZBVUxUOworCQlyZXR1cm4gcmV0OwogCW5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7Ci0JaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCWlmIChwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCi0JKCppKSsrOworCWlmIChwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpICE9IDAgfHwKKwkgICAgcHV0X3VzZXIobmV4dF9vZmZzZXQsICZjZS0+bmV4dF9vZmZzZXQpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLApAQCAtMTYyMCw2ICsxNjEwLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwogCWlmIChJU19FUlIoY291bnRlcnMpKQpAQCAtMTYyOSw5ICsxNjIwLDEyIEBACiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gdXNlcnB0cjsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSwKLQkJCQkgY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlciwKLQkJCQkgJnBvcywgJnNpemUsIGNvdW50ZXJzLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgJnBvcywKKwkJCQkJCSZzaXplLCBjb3VudGVycywgaSsrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc5OSwxMiArMTc5Myw3IEBACiAJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJbWVtY3B5KGxvY19jcHVfZW50cnksIHJlcGwtPmVudHJpZXMsIHJlcGwtPnNpemUpOwogCi0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRhYmxlLT5uYW1lLCB0YWJsZS0+dmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsLT5zaXplLAotCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCi0JCQkgICAgICByZXBsLT5ob29rX2VudHJ5LAotCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKLQorCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsKTsKIAlkdXByaW50ZigiYXJwdF9yZWdpc3Rlcl90YWJsZTogdHJhbnNsYXRlIHRhYmxlIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTE4MjcsMTMgKzE4MTYsMTQgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBtb2R1bGUgKnRhYmxlX293bmVyID0gdGFibGUtPm1lOworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJcHJpdmF0ZSA9IHh0X3VucmVnaXN0ZXJfdGFibGUodGFibGUpOwogCiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZXMgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyKTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyID4gcHJpdmF0ZS0+aW5pdGlhbF9lbnRyaWVzKQogCQltb2R1bGVfcHV0KHRhYmxlX293bmVyKTsKIAl4dF9mcmVlX3RhYmxlX2luZm8ocHJpdmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKaW5kZXggOTczMzc2MC4uYmZlMjZmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE1LDkzICsxNiwzNyBAQAogI2RlZmluZSBGSUxURVJfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0FSUF9JTikgfCAoMSA8PCBORl9BUlBfT1VUKSB8IFwKIAkJCSAgICgxIDw8IE5GX0FSUF9GT1JXQVJEKSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBhcnB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgYXJwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBhcnB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gImZpbHRlciIsCi0JCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmQpICogMyArIHNpemVvZihzdHJ1Y3QgYXJwdF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0FSUF9JTl0gPSAwLAotCQkJW05GX0FSUF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJCVtORl9BUlBfRk9SV0FSRF0gPSAyICogc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9BUlBfSU5dID0gMCwKLQkJCVtORl9BUlBfT1VUXSA9IHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksCi0JCQlbTkZfQVJQX0ZPUldBUkRdID0gMiAqIHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJQVJQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEFSUF9JTiAqLwotCQlBUlBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogQVJQX09VVCAqLwotCQlBUlBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogQVJQX0ZPUldBUkQgKi8KLQl9LAotCS50ZXJtID0gQVJQVF9FUlJPUl9JTklULAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fQVJQLAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJwdF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQorc3RhdGljIHVuc2lnbmVkIGludAorYXJwdGFibGVfZmlsdGVyX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCXJldHVybiBhcnB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChpbiktPmlwdjQuYXJwdGFibGVfZmlsdGVyKTsKKwljb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKworCXJldHVybiBhcnB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY0LmFycHRhYmxlX2ZpbHRlcik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJwdF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGFycHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KG91dCktPmlwdjQuYXJwdGFibGVfZmlsdGVyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBhcnB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkuaG9vawkJPSBhcnB0X2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fQVJQLAotCQkuaG9va251bQk9IE5GX0FSUF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gYXJwdF9vdXRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19BUlAsCi0JCS5ob29rbnVtCT0gTkZfQVJQX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gYXJwdF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0FSUCwKLQkJLmhvb2tudW0JPSBORl9BUlBfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKmFycGZpbHRlcl9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGFycHRhYmxlX2ZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsOworCQorCXJlcGwgPSBhcnB0X2FsbG9jX2luaXRpYWxfdGFibGUoJnBhY2tldF9maWx0ZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2NC5hcnB0YWJsZV9maWx0ZXIgPQotCQlhcnB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsICZpbml0aWFsX3RhYmxlLnJlcGwpOworCQlhcnB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY0LmFycHRhYmxlX2ZpbHRlcikpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5hcnB0YWJsZV9maWx0ZXIpOwogCXJldHVybiAwOwpAQCAtMTI1LDkgKzcwLDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOwotCWlmIChyZXQgPCAwKQorCWFycGZpbHRlcl9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9maWx0ZXIsIGFycHRhYmxlX2ZpbHRlcl9ob29rKTsKKwlpZiAoSVNfRVJSKGFycGZpbHRlcl9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoYXJwZmlsdGVyX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAJcmV0dXJuIHJldDsKIAogY2xlYW51cF90YWJsZToKQEAgLTEzNyw3ICs4NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhcnB0YWJsZV9maWx0ZXJfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoYXJwdF9vcHMsIEFSUkFZX1NJWkUoYXJwdF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmcGFja2V0X2ZpbHRlciwgYXJwZmlsdGVyX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhcnB0YWJsZV9maWx0ZXJfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCAzY2U1M2NmLi5iMjljNjZkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KKyNpbmNsdWRlICIuLi8uLi9uZXRmaWx0ZXIveHRfcmVwbGRhdGEuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKQEAgLTY2LDYgKzY3LDEyIEBACiAjZGVmaW5lIGlubGluZQogI2VuZGlmCiAKK3ZvaWQgKmlwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqaW5mbykKK3sKKwlyZXR1cm4geHRfYWxsb2NfaW5pdGlhbF90YWJsZShpcHQsIElQVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSk7CisKIC8qCiAgICBXZSBrZWVwIGEgc2V0IG9mIHJ1bGVzIGZvciBlYWNoIENQVSwgc28gd2UgY2FuIGF2b2lkIHdyaXRlLWxvY2tpbmcKICAgIHRoZW0gaW4gdGhlIHNvZnRpcnEgd2hlbiB1cGRhdGluZyB0aGUgY291bnRlcnMgYW5kIHRoZXJlZm9yZQpAQCAtMTY5LDcgKzE3Niw3IEBACiAKIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAotZG9fbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2RvX21hdGNoKGNvbnN0IHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJIHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCXBhci0+bWF0Y2ggICAgID0gbS0+dS5rZXJuZWwubWF0Y2g7CkBAIC0xODQsNyArMTkxLDcgQEAKIAogLyogUGVyZm9ybWFuY2UgY3JpdGljYWwgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwdF9lbnRyeSAqCi1nZXRfZW50cnkodm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK2dldF9lbnRyeShjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXJldHVybiAoc3RydWN0IGlwdF9lbnRyeSAqKShiYXNlICsgb2Zmc2V0KTsKIH0KQEAgLTE5OSw2ICsyMDYsMTMgQEAKICN1bmRlZiBGV0lOVgogfQogCisvKiBmb3IgY29uc3QtY29ycmVjdG5lc3MgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKgoraXB0X2dldF90YXJnZXRfYyhjb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplKQoreworCXJldHVybiBpcHRfZ2V0X3RhcmdldCgoc3RydWN0IGlwdF9lbnRyeSAqKWUpOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0VfTU9EVUxFKQogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhvb2tuYW1lc1tdID0gewpAQCAtMjMzLDExICsyNDcsMTEgQEAKIAogLyogTWlsZGx5IHBlcmYgY3JpdGljYWwgKG9ubHkgaWYgcGFja2V0IHRyYWNpbmcgaXMgb24pICovCiBzdGF0aWMgaW5saW5lIGludAotZ2V0X2NoYWlubmFtZV9ydWxlbnVtKHN0cnVjdCBpcHRfZW50cnkgKnMsIHN0cnVjdCBpcHRfZW50cnkgKmUsCitnZXRfY2hhaW5uYW1lX3J1bGVudW0oY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqcywgY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJICAgICAgY29uc3QgY2hhciAqaG9va25hbWUsIGNvbnN0IGNoYXIgKipjaGFpbm5hbWUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKipjb21tZW50LCB1bnNpZ25lZCBpbnQgKnJ1bGVudW0pCiB7Ci0Jc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQgKnQgPSAodm9pZCAqKWlwdF9nZXRfdGFyZ2V0KHMpOworCWNvbnN0IHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0ICp0ID0gKHZvaWQgKilpcHRfZ2V0X3RhcmdldF9jKHMpOwogCiAJaWYgKHN0cmNtcCh0LT50YXJnZXQudS5rZXJuZWwudGFyZ2V0LT5uYW1lLCBJUFRfRVJST1JfVEFSR0VUKSA9PSAwKSB7CiAJCS8qIEhlYWQgb2YgdXNlciBjaGFpbjogRVJST1IgdGFyZ2V0IHdpdGggY2hhaW5uYW1lICovCkBAIC0yNjMsMTcgKzI3NywxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0cmFjZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyB2b2lkIHRyYWNlX3BhY2tldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHVuc2lnbmVkIGludCBob29rLAogCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJIGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkJCSBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSwKLQkJCSBzdHJ1Y3QgaXB0X2VudHJ5ICplKQorCQkJIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUpCiB7Ci0Jdm9pZCAqdGFibGVfYmFzZTsKKwljb25zdCB2b2lkICp0YWJsZV9iYXNlOwogCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKnJvb3Q7CiAJY29uc3QgY2hhciAqaG9va25hbWUsICpjaGFpbm5hbWUsICpjb21tZW50OworCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IHJ1bGVudW0gPSAwOwogCiAJdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTI4MiwxMCArMjk3LDEwIEBACiAJaG9va25hbWUgPSBjaGFpbm5hbWUgPSBob29rbmFtZXNbaG9va107CiAJY29tbWVudCA9IGNvbW1lbnRzW05GX0lQX1RSQUNFX0NPTU1FTlRfUlVMRV07CiAKLQlJUFRfRU5UUllfSVRFUkFURShyb290LAotCQkJICBwcml2YXRlLT5zaXplIC0gcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSwKLQkJCSAgZ2V0X2NoYWlubmFtZV9ydWxlbnVtLAotCQkJICBlLCBob29rbmFtZSwgJmNoYWlubmFtZSwgJmNvbW1lbnQsICZydWxlbnVtKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHJvb3QsIHByaXZhdGUtPnNpemUgLSBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKQorCQlpZiAoZ2V0X2NoYWlubmFtZV9ydWxlbnVtKGl0ZXIsIGUsIGhvb2tuYW1lLAorCQkgICAgJmNoYWlubmFtZSwgJmNvbW1lbnQsICZydWxlbnVtKSAhPSAwKQorCQkJYnJlYWs7CiAKIAluZl9sb2dfcGFja2V0KEFGX0lORVQsIGhvb2ssIHNrYiwgaW4sIG91dCwgJnRyYWNlX2xvZ2luZm8sCiAJCSAgICAgICJUUkFDRTogJXM6JXM6JXM6JXUgIiwKQEAgLTMxNSw5ICszMzAsOSBAQAogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAljb25zdCBjaGFyICppbmRldiwgKm91dGRldjsKLQl2b2lkICp0YWJsZV9iYXNlOworCWNvbnN0IHZvaWQgKnRhYmxlX2Jhc2U7CiAJc3RydWN0IGlwdF9lbnRyeSAqZSwgKmJhY2s7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJc3RydWN0IHh0X21hdGNoX3BhcmFtIG10cGFyOwogCXN0cnVjdCB4dF90YXJnZXRfcGFyYW0gdGdwYXI7CiAKQEAgLTM1MCwxNyArMzY1LDIyIEBACiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCiAJZG8gewotCQlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKKwkJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJCUlQX05GX0FTU0VSVChlKTsKIAkJSVBfTkZfQVNTRVJUKGJhY2spOwogCQlpZiAoIWlwX3BhY2tldF9tYXRjaChpcCwgaW5kZXYsIG91dGRldiwKLQkJICAgICZlLT5pcCwgbXRwYXIuZnJhZ29mZikgfHwKLQkJICAgIElQVF9NQVRDSF9JVEVSQVRFKGUsIGRvX21hdGNoLCBza2IsICZtdHBhcikgIT0gMCkgeworCQkgICAgJmUtPmlwLCBtdHBhci5mcmFnb2ZmKSkgeworIG5vX21hdGNoOgogCQkJZSA9IGlwdF9uZXh0X2VudHJ5KGUpOwogCQkJY29udGludWU7CiAJCX0KIAorCQl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCQlpZiAoZG9fbWF0Y2goZW1hdGNoLCBza2IsICZtdHBhcikgIT0gMCkKKwkJCQlnb3RvIG5vX21hdGNoOworCiAJCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBudG9ocyhpcC0+dG90X2xlbiksIDEpOwogCiAJCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKQEAgLTQ0Myw3ICs0NjMsNyBAQAogLyogRmlndXJlcyBvdXQgZnJvbSB3aGF0IGhvb2sgZWFjaCBydWxlIGNhbiBiZSBjYWxsZWQ6IHJldHVybnMgMCBpZgogICAgdGhlcmUgYXJlIGxvb3BzLiAgUHV0cyBob29rIGJpdG1hc2sgaW4gY29tZWZyb20uICovCiBzdGF0aWMgaW50Ci1tYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCittYXJrX3NvdXJjZV9jaGFpbnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwpAQCAtNDYxLDggKzQ4MSw4IEBACiAJCWUtPmNvdW50ZXJzLnBjbnQgPSBwb3M7CiAKIAkJZm9yICg7OykgewotCQkJc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQgKnQKLQkJCQk9ICh2b2lkICopaXB0X2dldF90YXJnZXQoZSk7CisJCQljb25zdCBzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCAqdAorCQkJCT0gKHZvaWQgKilpcHRfZ2V0X3RhcmdldF9jKGUpOwogCQkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCiAJCQlpZiAoZS0+Y29tZWZyb20gJiAoMSA8PCBORl9JTkVUX05VTUhPT0tTKSkgewpAQCAtNTUyLDI3ICs1NzIsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAotY2xlYW51cF9tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZCBjbGVhbnVwX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHBhcjsKIAotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQorCXBhci5uZXQgICAgICAgPSBuZXQ7CiAJcGFyLm1hdGNoICAgICA9IG0tPnUua2VybmVsLm1hdGNoOwogCXBhci5tYXRjaGluZm8gPSBtLT5kYXRhOwogCXBhci5mYW1pbHkgICAgPSBORlBST1RPX0lQVjQ7CiAJaWYgKHBhci5tYXRjaC0+ZGVzdHJveSAhPSBOVUxMKQogCQlwYXIubWF0Y2gtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIubWF0Y2gtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK2NoZWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAKIAlpZiAoIWlwX2NoZWNrZW50cnkoJmUtPmlwKSkgewogCQlkdXByaW50ZigiaXBfdGFibGVzOiBpcCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKQEAgLTU4Myw3ICs1OTksNyBAQAogCSAgICBlLT5uZXh0X29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJdCA9IGlwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01OTEsOCArNjA3LDcgQEAKIH0KIAogc3RhdGljIGludAotY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCi0JICAgIHVuc2lnbmVkIGludCAqaSkKK2NoZWNrX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwID0gcGFyLT5lbnRyeWluZm87CiAJaW50IHJldDsKQEAgLTYwNywxMyArNjIyLDExIEBACiAJCQkgcGFyLm1hdGNoLT5uYW1lKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JKysqaTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotZmluZF9jaGVja19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhciwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAlpbnQgcmV0OwpAQCAtNjI3LDcgKzY0MCw3IEBACiAJfQogCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CiAKLQlyZXQgPSBjaGVja19tYXRjaChtLCBwYXIsIGkpOworCXJldCA9IGNoZWNrX21hdGNoKG0sIHBhcik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTYzNywxMCArNjUwLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjaGVja190YXJnZXQoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgY2hlY2tfdGFyZ2V0KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwogCXN0cnVjdCB4dF90Z2Noa19wYXJhbSBwYXIgPSB7CisJCS5uZXQgICAgICAgPSBuZXQsCiAJCS50YWJsZSAgICAgPSBuYW1lLAogCQkuZW50cnlpbmZvID0gZSwKIAkJLnRhcmdldCAgICA9IHQtPnUua2VybmVsLnRhcmdldCwKQEAgLTY2MSwyNyArNjc1LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQKLWZpbmRfY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JCSB1bnNpZ25lZCBpbnQgKmkpCitmaW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OwogCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBqOwogCXN0cnVjdCB4dF9tdGNoa19wYXJhbSBtdHBhcjsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCXJldCA9IGNoZWNrX2VudHJ5KGUsIG5hbWUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlqID0gMDsKKwltdHBhci5uZXQJPSBuZXQ7CiAJbXRwYXIudGFibGUgICAgID0gbmFtZTsKIAltdHBhci5lbnRyeWluZm8gPSAmZS0+aXA7CiAJbXRwYXIuaG9va19tYXNrID0gZS0+Y29tZWZyb207CiAJbXRwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY0OwotCXJldCA9IElQVF9NQVRDSF9JVEVSQVRFKGUsIGZpbmRfY2hlY2tfbWF0Y2gsICZtdHBhciwgJmopOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGZpbmRfY2hlY2tfbWF0Y2goZW1hdGNoLCAmbXRwYXIpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKKwkJKytqOworCX0KIAogCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULApAQCAtNjk1LDI3ICs3MTQsMjkgQEAKIAl9CiAJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OwogCi0JcmV0ID0gY2hlY2tfdGFyZ2V0KGUsIG5hbWUpOworCXJldCA9IGNoZWNrX3RhcmdldChlLCBuZXQsIG5hbWUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogIGVycjoKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogIGNsZWFudXBfbWF0Y2hlczoKLQlJUFRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBpcHRfZW50cnkgKmUpCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSkKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdDsKIAogCWlmICghdW5jb25kaXRpb25hbCgmZS0+aXApKQogCQlyZXR1cm4gZmFsc2U7Ci0JdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCXQgPSBpcHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCXZlcmRpY3QgPSAoKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0ICopdCktPnZlcmRpY3Q7CkBAIC03MjYsMTIgKzc0NywxMSBAQAogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLAotCQkJICAgdW5zaWduZWQgY2hhciAqYmFzZSwKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKmxpbWl0LAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxpbWl0LAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MsCi0JCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkgICB1bnNpZ25lZCBpbnQgKmkpCisJCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MpCiB7CiAJdW5zaWduZWQgaW50IGg7CiAKQEAgLTc2OCw1MCArNzg4LDQyIEBACiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJZS0+Y291bnRlcnMgPSAoKHN0cnVjdCB4dF9jb3VudGVycykgeyAwLCAwIH0pOwogCWUtPmNvbWVmcm9tID0gMDsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY2xlYW51cF9lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZAorY2xlYW51cF9lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHh0X3RnZHRvcl9wYXJhbSBwYXI7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JSVBUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgTlVMTCk7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKQorCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKIAl0ID0gaXB0X2dldF90YXJnZXQoZSk7CiAKKwlwYXIubmV0ICAgICAgPSBuZXQ7CiAJcGFyLnRhcmdldCAgID0gdC0+dS5rZXJuZWwudGFyZ2V0OwogCXBhci50YXJnaW5mbyA9IHQtPmRhdGE7CiAJcGFyLmZhbWlseSAgID0gTkZQUk9UT19JUFY0OwogCWlmIChwYXIudGFyZ2V0LT5kZXN0cm95ICE9IE5VTEwpCiAJCXBhci50YXJnZXQtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIudGFyZ2V0LT5tZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIENoZWNrcyBhbmQgdHJhbnNsYXRlcyB0aGUgdXNlci1zdXBwbGllZCB0YWJsZSBzZWdtZW50IChoZWxkIGluCiAgICBuZXdpbmZvKSAqLwogc3RhdGljIGludAotdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKLQkJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCXZvaWQgKmVudHJ5MCwKLQkJdW5zaWduZWQgaW50IHNpemUsCi0JCXVuc2lnbmVkIGludCBudW1iZXIsCi0JCWNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAotCQljb25zdCB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MpCit0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdm9pZCAqZW50cnkwLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbCkKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBpOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQluZXdpbmZvLT5zaXplID0gc2l6ZTsKLQluZXdpbmZvLT5udW1iZXIgPSBudW1iZXI7CisJbmV3aW5mby0+c2l6ZSA9IHJlcGwtPnNpemU7CisJbmV3aW5mby0+bnVtYmVyID0gcmVwbC0+bnVtX2VudHJpZXM7CiAKIAkvKiBJbml0IGFsbCBob29rcyB0byBpbXBvc3NpYmxlIHZhbHVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBORl9JTkVUX05VTUhPT0tTOyBpKyspIHsKQEAgLTgyMiw0OSArODM0LDU4IEBACiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogc2l6ZSAldVxuIiwgbmV3aW5mby0+c2l6ZSk7CiAJaSA9IDA7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCW5ld2luZm8sCi0JCQkJZW50cnkwLAotCQkJCWVudHJ5MCArIHNpemUsCi0JCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhpdGVyLCBuZXdpbmZvLCBlbnRyeTAsCisJCQkJCQkgZW50cnkwICsgcmVwbC0+c2l6ZSwKKwkJCQkJCSByZXBsLT5ob29rX2VudHJ5LAorCQkJCQkJIHJlcGwtPnVuZGVyZmxvdywKKwkJCQkJCSByZXBsLT52YWxpZF9ob29rcyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCSsraTsKKwl9CiAKLQlpZiAoaSAhPSBudW1iZXIpIHsKKwlpZiAoaSAhPSByZXBsLT5udW1fZW50cmllcykgewogCQlkdXByaW50ZigidHJhbnNsYXRlX3RhYmxlOiAldSBub3QgJXUgZW50cmllc1xuIiwKLQkJCSBpLCBudW1iZXIpOworCQkJIGksIHJlcGwtPm51bV9lbnRyaWVzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQ2hlY2sgaG9va3MgYWxsIGFzc2lnbmVkICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0lORVRfTlVNSE9PS1M7IGkrKykgewogCQkvKiBPbmx5IGhvb2tzIHdoaWNoIGFyZSB2YWxpZCAqLwotCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSkKKwkJaWYgKCEocmVwbC0+dmFsaWRfaG9va3MgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG5ld2luZm8tPmhvb2tfZW50cnlbaV0gPT0gMHhGRkZGRkZGRikgewogCQkJZHVwcmludGYoIkludmFsaWQgaG9vayBlbnRyeSAldSAldVxuIiwKLQkJCQkgaSwgaG9va19lbnRyaWVzW2ldKTsKKwkJCQkgaSwgcmVwbC0+aG9va19lbnRyeVtpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAobmV3aW5mby0+dW5kZXJmbG93W2ldID09IDB4RkZGRkZGRkYpIHsKIAkJCWR1cHJpbnRmKCJJbnZhbGlkIHVuZGVyZmxvdyAldSAldVxuIiwKLQkJCQkgaSwgdW5kZXJmbG93c1tpXSk7CisJCQkJIGksIHJlcGwtPnVuZGVyZmxvd1tpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTApKQorCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHJlcGwtPnZhbGlkX2hvb2tzLCBlbnRyeTApKQogCQlyZXR1cm4gLUVMT09QOwogCiAJLyogRmluYWxseSwgZWFjaCBzYW5pdHkgY2hlY2sgbXVzdCBwYXNzICovCiAJaSA9IDA7Ci0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX2VudHJ5KGl0ZXIsIG5ldCwgcmVwbC0+bmFtZSwgcmVwbC0+c2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQljbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgZW50cnkwLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CisJCX0KIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTg3NywzMyArODk4LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogR2V0cyBjb3VudGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfZW50cnlfdG9fY291bnRlcihjb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplLAotCQkgICAgIHN0cnVjdCB4dF9jb3VudGVycyB0b3RhbFtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotc2V0X2VudHJ5X3RvX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBzdHJ1Y3QgaXB0X2NvdW50ZXJzIHRvdGFsW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotCVNFVF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCiAJICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGN1cmNwdTsKQEAgLTkxOSwzMiArOTE4LDMyIEBACiAJY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaSA9IDA7Ci0JSVBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjdXJjcHVdLAotCQkJICB0LT5zaXplLAotCQkJICBzZXRfZW50cnlfdG9fY291bnRlciwKLQkJCSAgY291bnRlcnMsCi0JCQkgICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3VyY3B1XSwgdC0+c2l6ZSkgeworCQlTRVRfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCSAgICBpdGVyLT5jb3VudGVycy5wY250KTsKKwkJKytpOworCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CiAJCXh0X2luZm9fd3Jsb2NrKGNwdSk7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKLQkJCQkgIHQtPnNpemUsCi0JCQkJICBhZGRfZW50cnlfdG9fY291bnRlciwKLQkJCQkgIGNvdW50ZXJzLAotCQkJCSAgJmkpOworCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgeworCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCisJCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJKytpOyAvKiBtYWNybyBkb2VzIG11bHRpIGV2YWwgb2YgaSAqLworCQl9CiAJCXh0X2luZm9fd3J1bmxvY2soY3B1KTsKIAl9CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQorc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjIsMTEgKzk2MSwxMSBAQAogCiBzdGF0aWMgaW50CiBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJICAgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJwdHIpCiB7CiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwotCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xMDE4LDcgKzEwMTcsNyBAQAogCQkJfQogCQl9CiAKLQkJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCQl0ID0gaXB0X2dldF90YXJnZXRfYyhlKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS0+dGFyZ2V0X29mZnNldAogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0LAogCQkJCQkgICAgdS51c2VyLm5hbWUpLApAQCAtMTAzNSw3ICsxMDM0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMpCitzdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7CiAKQEAgLTEwNDQsNyArMTA0Myw3IEBACiAJbWVtY3B5KGRzdCwgJnYsIHNpemVvZih2KSk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBjb21wYXRfc3RhbmRhcmRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CiAKQEAgLTEwNTMsMjUgKzEwNTIsMjAgQEAKIAlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmN2LCBzaXplb2YoY3YpKSA/IC1FRkFVTFQgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotY29tcGF0X2NhbGNfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgaW50ICpzaXplKQotewotCSpzaXplICs9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobS0+dS5rZXJuZWwubWF0Y2gpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAotCQkJICAgICB2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7Ci0Jc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAJdW5zaWduZWQgaW50IGVudHJ5X29mZnNldDsKIAlpbnQgb2ZmLCBpLCByZXQ7CiAKIAlvZmYgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtIGJhc2U7Ci0JSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfbWF0Y2gsICZvZmYpOwotCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCW9mZiArPSB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gpOworCXQgPSBpcHRfZ2V0X3RhcmdldF9jKGUpOwogCW9mZiArPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh0LT51Lmtlcm5lbC50YXJnZXQpOwogCW5ld2luZm8tPnNpemUgLT0gb2ZmOwogCXJldCA9IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KEFGX0lORVQsIGVudHJ5X29mZnNldCwgb2ZmKTsKQEAgLTEwOTIsNyArMTA4Niw5IEBACiBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJaW50IHJldDsKIAogCWlmICghbmV3aW5mbyB8fCAhaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTAxLDEzICsxMDk3LDE3IEBACiAJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gMDsKIAlsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlyZXR1cm4gSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSwKLQkJCQkgY29tcGF0X2NhbGNfZW50cnksIGluZm8sIGxvY19jcHVfZW50cnksCi0JCQkJIG5ld2luZm8pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbiwgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZW4sIGludCBjb21wYXQpCiB7CiAJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CkBAIC0xMTY3LDcgKzExNjcsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLCBpbnQgKmxlbikKK2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCisJICAgIGNvbnN0IGludCAqbGVuKQogewogCWludCByZXQ7CiAJc3RydWN0IGlwdF9nZXRfZW50cmllcyBnZXQ7CkBAIC0xMjE1LDYgKzEyMTYsNyBAQAogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCXJldCA9IDA7CiAJY291bnRlcnMgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKQEAgLTEyNTcsOCArMTI1OSw5IEBACiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCiAJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LAotCQkJICBOVUxMKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CisKIAl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogbnVtX2NvdW50ZXJzKSAhPSAwKQpAQCAtMTI3NywxMiArMTI4MCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCitkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzAzLDkgKzEzMDcsNyBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCi0JCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CisJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKG5ldCwgbmV3aW5mbywgbG9jX2NwdV9lbnRyeSwgJnRtcCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIApAQCAtMTMxOCwyNyArMTMyMCwxNiBAQAogCXJldHVybiAwOwogCiAgZnJlZV9uZXdpbmZvX3VudHJhbnM6Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAgZnJlZV9uZXdpbmZvOgogCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwogc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgY29tcGF0KQorZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3VyY3B1OwogCXN0cnVjdCB4dF9jb3VudGVyc19pbmZvIHRtcDsKQEAgLTEzNTEsNiArMTM0Miw3IEBACiAJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogI2lmZGVmIENPTkZJR19DT01QQVQKIAlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzX2luZm8gY29tcGF0X3RtcDsKIApAQCAtMTQwOCwxMSArMTQwMCwxMCBAQAogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tjdXJjcHVdOwogCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwKLQkJCSAgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCi0JCQkgIHBhZGRjLAotCQkJICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CisJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKKwkJKytpOworCX0KIAl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CiAgdW5sb2NrX3VwX2ZyZWU6CiAJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC0xNDQwLDQ1ICsxNDMxLDQwIEBACiBzdGF0aWMgaW50CiBjb21wYXRfY29weV9lbnRyeV90b191c2VyKHN0cnVjdCBpcHRfZW50cnkgKmUsIHZvaWQgX191c2VyICoqZHN0cHRyLAogCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnMsCi0JCQkgIHVuc2lnbmVkIGludCAqaSkKKwkJCSAgdW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgX191c2VyICpjZTsKIAl1X2ludDE2X3QgdGFyZ2V0X29mZnNldCwgbmV4dF9vZmZzZXQ7CiAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKLQlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOworCWludCByZXQgPSAwOwogCi0JcmV0ID0gLUVGQVVMVDsKIAlvcmlnc2l6ZSA9ICpzaXplOwogCWNlID0gKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IF9fdXNlciAqKSpkc3RwdHI7Ci0JaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoY29weV90b191c2VyKCZjZS0+Y291bnRlcnMsICZjb3VudGVyc1sqaV0sIHNpemVvZihjb3VudGVyc1sqaV0pKSkKLQkJZ290byBvdXQ7CisJaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSAhPSAwIHx8CisJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCisJICAgIHNpemVvZihjb3VudGVyc1tpXSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCSpzaXplIC09IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CiAKLQlyZXQgPSBJUFRfTUFUQ0hfSVRFUkFURShlLCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlciwgZHN0cHRyLCBzaXplKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0geHRfY29tcGF0X21hdGNoX3RvX3VzZXIoZW1hdGNoLCBkc3RwdHIsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KIAl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKIAl0ID0gaXB0X2dldF90YXJnZXQoZSk7CiAJcmV0ID0geHRfY29tcGF0X3RhcmdldF90b191c2VyKHQsIGRzdHB0ciwgc2l6ZSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVGQVVMVDsKKwkJcmV0dXJuIHJldDsKIAluZXh0X29mZnNldCA9IGUtPm5leHRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOwotCWlmIChwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpKQotCQlnb3RvIG91dDsKLQlpZiAocHV0X3VzZXIobmV4dF9vZmZzZXQsICZjZS0+bmV4dF9vZmZzZXQpKQotCQlnb3RvIG91dDsKLQotCSgqaSkrKzsKKwlpZiAocHV0X3VzZXIodGFyZ2V0X29mZnNldCwgJmNlLT50YXJnZXRfb2Zmc2V0KSAhPSAwIHx8CisJICAgIHB1dF91c2VyKG5leHRfb2Zmc2V0LCAmY2UtPm5leHRfb2Zmc2V0KSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDg2LDcgKzE0NzIsNyBAQAogCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrLAotCQkgICAgICAgaW50ICpzaXplLCB1bnNpZ25lZCBpbnQgKmkpCisJCSAgICAgICBpbnQgKnNpemUpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIApAQCAtMTUwMCw0NyArMTQ4NiwzMiBAQAogCX0KIAltLT51Lmtlcm5lbC5tYXRjaCA9IG1hdGNoOwogCSpzaXplICs9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gpOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOwotCi0JbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9lbnRyeShzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSAqZSwgdW5zaWduZWQgaW50ICppKQorc3RhdGljIHZvaWQgY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgKmUpCiB7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JQ09NUEFUX0lQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9yZWxlYXNlX21hdGNoLCBOVUxMKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCW1vZHVsZV9wdXQoZW1hdGNoLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwogCXQgPSBjb21wYXRfaXB0X2dldF90YXJnZXQoZSk7CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqbGltaXQsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKLQkJCQkgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkgIHVuc2lnbmVkIGludCAqaSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJdW5zaWduZWQgaW50IGVudHJ5X29mZnNldDsKQEAgLTE1NjksMTAgKzE1NDAsMTMgQEAKIAlvZmYgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtICh2b2lkICopYmFzZTsKIAlqID0gMDsKLQlyZXQgPSBDT01QQVRfSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2ZpbmRfY2FsY19tYXRjaCwgbmFtZSwKLQkJCQkgICAgICAgJmUtPmlwLCBlLT5jb21lZnJvbSwgJm9mZiwgJmopOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byByZWxlYXNlX21hdGNoZXM7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNvbXBhdF9maW5kX2NhbGNfbWF0Y2goZW1hdGNoLCBuYW1lLAorCQkJCQkgICAgICZlLT5pcCwgZS0+Y29tZWZyb20sICZvZmYpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIHJlbGVhc2VfbWF0Y2hlczsKKwkJKytqOworCX0KIAogCXQgPSBjb21wYXRfaXB0X2dldF90YXJnZXQoZSk7CiAJdGFyZ2V0ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF90YXJnZXQoQUZfSU5FVCwKQEAgLTE2MDQsMTQgKzE1NzgsMTYgQEAKIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAltZW1zZXQoJmUtPmNvdW50ZXJzLCAwLCBzaXplb2YoZS0+Y291bnRlcnMpKTsKIAllLT5jb21lZnJvbSA9IDA7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogcmVsZWFzZV9tYXRjaGVzOgotCUlQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9yZWxlYXNlX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQltb2R1bGVfcHV0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTYyNSw2ICsxNjAxLDcgQEAKIAlzdHJ1Y3QgaXB0X2VudHJ5ICpkZTsKIAl1bnNpZ25lZCBpbnQgb3JpZ3NpemU7CiAJaW50IHJldCwgaDsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCXJldCA9IDA7CiAJb3JpZ3NpemUgPSAqc2l6ZTsKQEAgLTE2MzUsMTAgKzE2MTIsMTEgQEAKIAkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTsKIAkqc2l6ZSArPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCi0JcmV0ID0gQ09NUEFUX0lQVF9NQVRDSF9JVEVSQVRFKGUsIHh0X2NvbXBhdF9tYXRjaF9mcm9tX3VzZXIsCi0JCQkJICAgICAgIGRzdHB0ciwgc2l6ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0geHRfY29tcGF0X21hdGNoX2Zyb21fdXNlcihlbWF0Y2gsIGRzdHB0ciwgc2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQogCWRlLT50YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKIAl0ID0gY29tcGF0X2lwdF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKQEAgLTE2NTUsMzYgKzE2MzMsNDMgQEAKIH0KIAogc3RhdGljIGludAotY29tcGF0X2NoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCitjb21wYXRfY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQogeworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCXN0cnVjdCB4dF9tdGNoa19wYXJhbSBtdHBhcjsKIAl1bnNpZ25lZCBpbnQgajsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaiA9IDA7CisJbXRwYXIubmV0CT0gbmV0OwogCW10cGFyLnRhYmxlICAgICA9IG5hbWU7CiAJbXRwYXIuZW50cnlpbmZvID0gJmUtPmlwOwogCW10cGFyLmhvb2tfbWFzayA9IGUtPmNvbWVmcm9tOwogCW10cGFyLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNDsKLQlyZXQgPSBJUFRfTUFUQ0hfSVRFUkFURShlLCBjaGVja19tYXRjaCwgJm10cGFyLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNoZWNrX21hdGNoKGVtYXRjaCwgJm10cGFyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJCSsrajsKKwl9CisKKwlyZXQgPSBjaGVja190YXJnZXQoZSwgbmV0LCBuYW1lKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKLQlpZiAocmV0KQotCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogIGNsZWFudXBfbWF0Y2hlczoKLQlJUFRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotdHJhbnNsYXRlX2NvbXBhdF90YWJsZShjb25zdCBjaGFyICpuYW1lLAordHJhbnNsYXRlX2NvbXBhdF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkgICAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKipwaW5mbywKIAkJICAgICAgIHZvaWQgKipwZW50cnkwLApAQCAtMTY5Niw2ICsxNjgxLDggQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKmluZm87CiAJdm9pZCAqcG9zLCAqZW50cnkwLCAqZW50cnkxOworCXN0cnVjdCBjb21wYXRfaXB0X2VudHJ5ICppdGVyMDsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyMTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgcmV0OwogCkBAIC0xNzE0LDEzICsxNzAxLDE3IEBACiAJaiA9IDA7CiAJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwKLQkJCQkgICAgICAgY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCSAgICAgICBpbmZvLCAmc2l6ZSwgZW50cnkwLAotCQkJCSAgICAgICBlbnRyeTAgKyB0b3RhbF9zaXplLAotCQkJCSAgICAgICBob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZqLCBuYW1lKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJcmV0ID0gY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIwLCBpbmZvLCAmc2l6ZSwKKwkJCQkJCQllbnRyeTAsCisJCQkJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKKwkJCQkJCQlob29rX2VudHJpZXMsCisJCQkJCQkJdW5kZXJmbG93cywKKwkJCQkJCQluYW1lKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkrK2o7CisJfQogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoaiAhPSBudW1iZXIpIHsKQEAgLTE3NTksOSArMTc1MCwxMiBAQAogCWVudHJ5MSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gZW50cnkxOwogCXNpemUgPSB0b3RhbF9zaXplOwotCXJldCA9IENPTVBBVF9JUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsCi0JCQkJICAgICAgIGNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlciwKLQkJCQkgICAgICAgJnBvcywgJnNpemUsIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMCwgZW50cnkwLCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlcihpdGVyMCwgJnBvcywgJnNpemUsCisJCQkJCQkgIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCX0KIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTsKIAl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogCWlmIChyZXQpCkBAIC0xNzcyLDEzICsxNzY2LDMyIEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCiAJaSA9IDA7Ci0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjb21wYXRfY2hlY2tfZW50cnksCi0JCQkJbmFtZSwgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjEsIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2hlY2tfZW50cnkoaXRlcjEsIG5ldCwgbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCWlmIChyZXQpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGkgbWF0Y2hlcyBuZWVkIGNsZWFudXBfZW50cnkgKGNhbGxzIC0+ZGVzdHJveSkKKwkJICogYmVjYXVzZSB0aGV5IGhhZCBjYWxsZWQgLT5jaGVjayBhbHJlYWR5LiBUaGUgb3RoZXIgai1pCisJCSAqIGVudHJpZXMgbmVlZCBvbmx5IHJlbGVhc2UuCisJCSAqLworCQlpbnQgc2tpcCA9IGk7CiAJCWogLT0gaTsKLQkJQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwgaSwKLQkJCQkJCSAgY29tcGF0X3JlbGVhc2VfZW50cnksICZqKTsKLQkJSVBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKHNraXAtLSA+IDApCisJCQkJY29udGludWU7CisJCQlpZiAoai0tID09IDApCisJCQkJYnJlYWs7CisJCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJCX0KKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIxLCBuZXQpOworCQl9CiAJCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzk2LDcgKzE4MDksMTEgQEAKIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiBvdXQ6Ci0JQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwgY29tcGF0X3JlbGVhc2VfZW50cnksICZqKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJaWYgKGotLSA9PSAwKQorCQkJYnJlYWs7CisJCWNvbXBhdF9yZWxlYXNlX2VudHJ5KGl0ZXIwKTsKKwl9CiAJcmV0dXJuIHJldDsKIG91dF91bmxvY2s6CiAJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoQUZfSU5FVCk7CkBAIC0xODExLDYgKzE4MjgsNyBAQAogCXN0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xODMzLDcgKzE4NTEsNyBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9CiAKLQlyZXQgPSB0cmFuc2xhdGVfY29tcGF0X3RhYmxlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCisJcmV0ID0gdHJhbnNsYXRlX2NvbXBhdF90YWJsZShuZXQsIHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCiAJCQkJICAgICAmbmV3aW5mbywgJmxvY19jcHVfZW50cnksIHRtcC5zaXplLAogCQkJCSAgICAgdG1wLm51bV9lbnRyaWVzLCB0bXAuaG9va19lbnRyeSwKIAkJCQkgICAgIHRtcC51bmRlcmZsb3cpOwpAQCAtMTg0OSw3ICsxODY3LDggQEAKIAlyZXR1cm4gMDsKIAogIGZyZWVfbmV3aW5mb191bnRyYW5zOgotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTgsNiArMTkxNyw3IEBACiAJaW50IHJldCA9IDA7CiAJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwogCWlmIChJU19FUlIoY291bnRlcnMpKQpAQCAtMTkxMCw5ICsxOTMwLDEyIEBACiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gdXNlcnB0cjsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplLAotCQkJCWNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIsCi0JCQkJJnBvcywgJnNpemUsIGNvdW50ZXJzLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgJnBvcywKKwkJCQkJCSZzaXplLCBjb3VudGVycywgaSsrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CkBAIC0yMDg2LDExICsyMTA5LDcgQEAKIAlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5hbWUsIHRhYmxlLT52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwtPnNpemUsCi0JCQkgICAgICByZXBsLT5udW1fZW50cmllcywKLQkJCSAgICAgIHJlcGwtPmhvb2tfZW50cnksCi0JCQkgICAgICByZXBsLT51bmRlcmZsb3cpOworCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXQsIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjEwOCwxNyArMjEyNywxOSBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKK3ZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CiAJc3RydWN0IG1vZHVsZSAqdGFibGVfb3duZXIgPSB0YWJsZS0+bWU7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCXByaXZhdGUgPSB4dF91bnJlZ2lzdGVyX3RhYmxlKHRhYmxlKTsKIAogCS8qIERlY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2VzICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAJaWYgKHByaXZhdGUtPm51bWJlciA+IHByaXZhdGUtPmluaXRpYWxfZW50cmllcykKIAkJbW9kdWxlX3B1dCh0YWJsZV9vd25lcik7CiAJeHRfZnJlZV90YWJsZV9pbmZvKHByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggNDBjYTJkMi4uMDg4NmY5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC01NjAsOCArNTYwLDcgQEAKIAogc3RhdGljIHZvaWQgKmNsdXN0ZXJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIHsKLQljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7CisJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBzLT5wcml2YXRlOwogCXVuc2lnbmVkIGludCB3ZWlnaHQ7CiAJdV9pbnQzMl90IGxvY2FsX25vZGVzOwogCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHg7CkBAIC02MzIsMTAgKzYzMSw5IEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShpbm9kZSk7Ci0JCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOworCQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IFBERShpbm9kZSktPmRhdGE7CiAKLQkJc2YtPnByaXZhdGUgPSBwZGU7CisJCXNmLT5wcml2YXRlID0gYzsKIAogCQljbHVzdGVyaXBfY29uZmlnX2dldChjKTsKIAl9CkBAIC02NDUsOCArNjQzLDcgQEAKIAogc3RhdGljIGludCBjbHVzdGVyaXBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGlub2RlKTsKLQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IFBERShpbm9kZSktPmRhdGE7CiAJaW50IHJldDsKIAogCXJldCA9IHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKQEAgLTY2MCwxMCArNjU3LDkgQEAKIHN0YXRpYyBzc2l6ZV90IGNsdXN0ZXJpcF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqaW5wdXQsCiAJCQkJc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZzKQogeworCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogI2RlZmluZSBQUk9DX1dSSVRFTEVOCTEwCiAJY2hhciBidWZmZXJbUFJPQ19XUklURUxFTisxXTsKLQljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IHBkZS0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIG5vZGVudW07CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBpbnB1dCwgUFJPQ19XUklURUxFTikpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDM5OTA2MWMuLjA5YTVkM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAljaGFyCQlwcmVmaXhbVUxPR19QUkVGSVhfTEVOXTsKIH07CiAKLXN0YXRpYyB2b2lkIHVsb2dfdGdfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyB2b2lkIHVsb2dfdGdfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKIAljb25zdCBzdHJ1Y3QgY29tcGF0X2lwdF91bG9nX2luZm8gKmNsID0gc3JjOwogCXN0cnVjdCBpcHRfdWxvZ19pbmZvIGwgPSB7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAltZW1jcHkoZHN0LCAmbCwgc2l6ZW9mKGwpKTsKIH0KIAotc3RhdGljIGludCB1bG9nX3RnX2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyBpbnQgdWxvZ190Z19jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29uc3Qgc3RydWN0IGlwdF91bG9nX2luZm8gKmwgPSBzcmM7CiAJc3RydWN0IGNvbXBhdF9pcHRfdWxvZ19pbmZvIGNsID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwppbmRleCBkZjU2NmNiLi5jOGRjOTgwMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTIzLDEwNCArMjMsMzIgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwgXAogCQkJICAgICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIHN0cnVjdAotewotCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1szXTsKLQlzdHJ1Y3QgaXB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gImZpbHRlciIsCi0JCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSA9IDAsCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dID0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KLQl9LAotCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0lQVjQsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKIH07CiAKLS8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9sb2NhbF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcHRhYmxlX2ZpbHRlcl9ob29rKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9maWx0ZXIpOwotfQorCWNvbnN0IHN0cnVjdCBuZXQgKm5ldDsKIAotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9maWx0ZXIpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfbG9jYWxfb3V0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCi0JaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgfHwKLQkgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKKwlpZiAoaG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCAmJgorCSAgICAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAorCSAgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCS8qIHJvb3QgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLwogCQlyZXR1cm4gTkZfQUNDRVBUOwotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgIGRldl9uZXQob3V0KS0+aXB2NC5pcHRhYmxlX2ZpbHRlcik7CisKKwluZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JCS5ob29rCQk9IGlwdF9sb2NhbF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwdF9sb2NhbF9vdXRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAotCX0sCi19Oworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqZmlsdGVyX29wcyBfX3JlYWRfbW9zdGx5OwogCiAvKiBEZWZhdWx0IHRvIGZvcndhcmQgYmVjYXVzZSBJIGdvdCB0b28gbXVjaCBtYWlsIGFscmVhZHkuICovCiBzdGF0aWMgaW50IGZvcndhcmQgPSBORl9BQ0NFUFQ7CkBAIC0xMjgsOSArNTYsMTggQEAKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwdGFibGVfZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQkvKiBSZWdpc3RlciB0YWJsZSAqLworCXN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbDsKKworCXJlcGwgPSBpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X2ZpbHRlcik7CisJaWYgKHJlcGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogRW50cnkgMSBpcyB0aGUgRk9SV0FSRCBob29rICovCisJKChzdHJ1Y3QgaXB0X3N0YW5kYXJkICopcmVwbC0+ZW50cmllcylbMV0udGFyZ2V0LnZlcmRpY3QgPQorCQktZm9yd2FyZCAtIDE7CisKIAluZXQtPmlwdjQuaXB0YWJsZV9maWx0ZXIgPQotCQlpcHRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X2ZpbHRlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CisJCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfZmlsdGVyLCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX2ZpbHRlcikpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX2ZpbHRlcik7CiAJcmV0dXJuIDA7CkBAIC0xMzgsNyArNzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdGFibGVfZmlsdGVyX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjQuaXB0YWJsZV9maWx0ZXIpOworCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHRhYmxlX2ZpbHRlcl9uZXRfb3BzID0gewpAQCAtMTU1LDE3ICs5MiwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBFbnRyeSAxIGlzIHRoZSBGT1JXQVJEIGhvb2sgKi8KLQlpbml0aWFsX3RhYmxlLmVudHJpZXNbMV0udGFyZ2V0LnZlcmRpY3QgPSAtZm9yd2FyZCAtIDE7Ci0KIAlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHRhYmxlX2ZpbHRlcl9uZXRfb3BzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7Ci0JaWYgKHJldCA8IDApCisJZmlsdGVyX29wcyA9IHh0X2hvb2tfbGluaygmcGFja2V0X2ZpbHRlciwgaXB0YWJsZV9maWx0ZXJfaG9vayk7CisJaWYgKElTX0VSUihmaWx0ZXJfb3BzKSkgeworCQlyZXQgPSBQVFJfRVJSKGZpbHRlcl9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTc2LDcgKzExMiw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmcGFja2V0X2ZpbHRlciwgZmlsdGVyX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHRhYmxlX2ZpbHRlcl9uZXRfb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCBmYWU3OGMzLi5iOWI4MzQ2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtMjcsMTAxICsyNywxNiBAQAogCQkJICAgICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSB8IFwKIAkJCSAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykpCiAKLS8qIE91Y2ggLSBmaXZlIGRpZmZlcmVudCBob29rcz8gTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBjb25maWcgb3B0aW9uLi4uLi4gLS0gQkMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLQlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbNV07Ci0Jc3RydWN0IGlwdF9lcnJvciB0ZXJtOwotfSBpbml0aWFsX3RhYmxlIF9fbmV0X2luaXRkYXRhID0gewotCS5yZXBsID0gewotCQkubmFtZSA9ICJtYW5nbGUiLAotCQkudmFsaWRfaG9va3MgPSBNQU5HTEVfVkFMSURfSE9PS1MsCi0JCS5udW1fZW50cmllcyA9IDYsCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogNSArIHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gCT0gMCwKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzLAotCQkJW05GX0lORVRfUE9TVF9ST1VUSU5HXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA0LAotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfUFJFX1JPVVRJTkddIAk9IDAsCi0JCQlbTkZfSU5FVF9MT0NBTF9JTl0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMywKLQkJCVtORl9JTkVUX1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA0LAotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBSRV9ST1VUSU5HICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX0lOICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEZPUldBUkQgKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBPU1RfUk9VVElORyAqLwotCX0sCi0JLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0lQVjQsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIH07CiAKLS8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9wcmVfcm91dGluZ19ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfcG9zdF9yb3V0aW5nX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChvdXQpLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2xvY2FsX2luX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9mb3J3YXJkX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfbG9jYWxfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwdF9tYW5nbGVfb3V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQpCiB7CiAJdW5zaWduZWQgaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKQEAgLTE0MSw3ICs1Niw3IEBACiAJZGFkZHIgPSBpcGgtPmRhZGRyOwogCXRvcyA9IGlwaC0+dG9zOwogCi0JcmV0ID0gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwlyZXQgPSBpcHRfZG9fdGFibGUoc2tiLCBORl9JTkVUX0xPQ0FMX09VVCwgTlVMTCwgb3V0LAogCQkJICAgZGV2X25ldChvdXQpLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKIAkvKiBSZXJvdXRlIGZvciBBTlkgY2hhbmdlLiAqLwogCWlmIChyZXQgIT0gTkZfRFJPUCAmJiByZXQgIT0gTkZfU1RPTEVOICYmIHJldCAhPSBORl9RVUVVRSkgewpAQCAtMTU4LDQ5ICs3MywzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkuaG9vawkJPSBpcHRfcHJlX3JvdXRpbmdfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfUFJFX1JPVVRJTkcsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwdF9sb2NhbF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2ZvcndhcmRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X3Bvc3Rfcm91dGluZ19ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCi0JfSwKLX07CisvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCitzdGF0aWMgdW5zaWduZWQgaW50CitpcHRhYmxlX21hbmdsZV9ob29rKHVuc2lnbmVkIGludCBob29rLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJaWYgKGhvb2sgPT0gTkZfSU5FVF9MT0NBTF9PVVQpCisJCXJldHVybiBpcHRfbWFuZ2xlX291dChza2IsIG91dCk7CisJaWYgKGhvb2sgPT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcpCisJCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJCSAgICBkZXZfbmV0KG91dCktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOworCS8qIFBSRVJPVVRJTkcvSU5QVVQvRk9SV0FSRDogKi8KKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKm1hbmdsZV9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwdGFibGVfbWFuZ2xlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQkvKiBSZWdpc3RlciB0YWJsZSAqLworCXN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbDsKKworCXJlcGwgPSBpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X21hbmdsZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2NC5pcHRhYmxlX21hbmdsZSA9Ci0JCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfbWFuZ2xlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CisJCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfbWFuZ2xlciwgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjQuaXB0YWJsZV9tYW5nbGUpKQogCQlyZXR1cm4gUFRSX0VSUihuZXQtPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwogCXJldHVybiAwOwpAQCAtMjA4LDcgKzExMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB0YWJsZV9tYW5nbGVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2NC5pcHRhYmxlX21hbmdsZSk7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdGFibGVfbWFuZ2xlX25ldF9vcHMgPSB7CkBAIC0yMjUsOSArMTI3LDExIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwotCWlmIChyZXQgPCAwKQorCW1hbmdsZV9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9tYW5nbGVyLCBpcHRhYmxlX21hbmdsZV9ob29rKTsKKwlpZiAoSVNfRVJSKG1hbmdsZV9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIobWFuZ2xlX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0yMzgsNyArMTQyLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfbWFuZ2xlciwgbWFuZ2xlX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHRhYmxlX21hbmdsZV9uZXRfb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwppbmRleCA5OTNlZGMyLi4wNmZiOWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYwpAQCAtOSw5MCArOSw0NCBAQAogCiAjZGVmaW5lIFJBV19WQUxJRF9IT09LUyAoKDEgPDwgTkZfSU5FVF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLQlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbMl07Ci0Jc3RydWN0IGlwdF9lcnJvciB0ZXJtOwotfSBpbml0aWFsX3RhYmxlIF9fbmV0X2luaXRkYXRhID0gewotCS5yZXBsID0gewotCQkubmFtZSA9ICJyYXciLAotCQkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCi0JCS5udW1fZW50cmllcyA9IDMsCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiArIHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gPSAwLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKQotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfUFJFX1JPVVRJTkddID0gMCwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUFJFX1JPVVRJTkcgKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSAgUkFXX1ZBTElEX0hPT0tTLAogCS5tZSA9IFRISVNfTU9EVUxFLAogCS5hZiA9IE5GUFJPVE9fSVBWNCwKKwkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAogfTsKIAogLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLwogc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcHRhYmxlX3Jhd19ob29rKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9yYXcpOwotfQorCWNvbnN0IHN0cnVjdCBuZXQgKm5ldDsKIAotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2xvY2FsX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCi0JaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgfHwKLQkgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKKwlpZiAoaG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCAmJiAKKwkgICAgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgfHwKKwkgICAgIGlwX2hkcmxlbihza2IpIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQorCQkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KG91dCktPmlwdjQuaXB0YWJsZV9yYXcpOworCisJbmV0ID0gZGV2X25ldCgoaW4gIT0gTlVMTCkgPyBpbiA6IG91dCk7CisJcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIG5ldC0+aXB2NC5pcHRhYmxlX3Jhdyk7CiB9CiAKLS8qICdyYXcnIGlzIHRoZSB2ZXJ5IGZpcnN0IHRhYmxlLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JCS5ob29rID0gaXB0X2hvb2ssCi0JCS5wZiA9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLAotCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkJLmhvb2sgPSBpcHRfbG9jYWxfaG9vaywKLQkJLnBmID0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bSA9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKnJhd3RhYmxlX29wcyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB0YWJsZV9yYXdfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCS8qIFJlZ2lzdGVyIHRhYmxlICovCisJc3RydWN0IGlwdF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKCZwYWNrZXRfcmF3KTsKKwlpZiAocmVwbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAluZXQtPmlwdjQuaXB0YWJsZV9yYXcgPQotCQlpcHRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X3JhdywgJmluaXRpYWxfdGFibGUucmVwbCk7CisJCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfcmF3LCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX3JhdykpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX3Jhdyk7CiAJcmV0dXJuIDA7CkBAIC0xMDAsNyArNTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdGFibGVfcmF3X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjQuaXB0YWJsZV9yYXcpOworCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY0LmlwdGFibGVfcmF3KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHRhYmxlX3Jhd19uZXRfb3BzID0gewpAQCAtMTE3LDkgKzcxLDExIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwotCWlmIChyZXQgPCAwKQorCXJhd3RhYmxlX29wcyA9IHh0X2hvb2tfbGluaygmcGFja2V0X3JhdywgaXB0YWJsZV9yYXdfaG9vayk7CisJaWYgKElTX0VSUihyYXd0YWJsZV9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIocmF3dGFibGVfb3BzKTsKIAkJZ290byBjbGVhbnVwX3RhYmxlOworCX0KIAogCXJldHVybiByZXQ7CiAKQEAgLTEzMCw3ICs4Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHRhYmxlX3Jhd19maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmcGFja2V0X3JhdywgcmF3dGFibGVfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfcmF3X25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCAzYmQzZDYzLi5jY2UyZjY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKQEAgLTI3LDEwOSArMjcsNDQgQEAKIAkJCQkoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwgXAogCQkJCSgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwdF9yZXBsYWNlIHJlcGw7Ci0Jc3RydWN0IGlwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcHRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAic2VjdXJpdHkiLAotCQkudmFsaWRfaG9va3MgPSBTRUNVUklUWV9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSAwLAotCQkJW05GX0lORVRfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dIAk9IDAsCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KLQl9LAotCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5IiwKIAkudmFsaWRfaG9va3MJPSBTRUNVUklUWV9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNCwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfU0VDVVJJVFksCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfbG9jYWxfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoraXB0YWJsZV9zZWN1cml0eV9ob29rKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgIGRldl9uZXQoaW4pLT5pcHY0LmlwdGFibGVfc2VjdXJpdHkpOwotfQorCWNvbnN0IHN0cnVjdCBuZXQgKm5ldDsKIAotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2ZvcndhcmRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJIHN0cnVjdCBza19idWZmICpza2IsCi0JCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9sb2NhbF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQkvKiBTb21lYm9keSBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCi0JaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgfHwKLQkgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKKwlpZiAoaG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCAmJgorCSAgICAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAorCSAgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCS8qIFNvbWVib2R5IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KG91dCktPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7CisKKwluZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY0LmlwdGFibGVfc2VjdXJpdHkpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfU0VDVVJJVFksCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwdF9mb3J3YXJkX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX291dF9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKnNlY3RibF9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwdGFibGVfc2VjdXJpdHlfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCW5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5ID0KLQkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnNlY3VyaXR5X3RhYmxlLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwlzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGw7CiAKKwlyZXBsID0gaXB0X2FsbG9jX2luaXRpYWxfdGFibGUoJnNlY3VyaXR5X3RhYmxlKTsKKwlpZiAocmVwbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwluZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSA9CisJCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZzZWN1cml0eV90YWJsZSwgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSkpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKIApAQCAtMTM4LDcgKzczLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcHRhYmxlX3NlY3VyaXR5X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB0YWJsZV9zZWN1cml0eV9uZXRfb3BzID0gewpAQCAtMTU0LDkgKzg5LDExIEBACiAgICAgICAgIGlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7Ci0JaWYgKHJldCA8IDApCisJc2VjdGJsX29wcyA9IHh0X2hvb2tfbGluaygmc2VjdXJpdHlfdGFibGUsIGlwdGFibGVfc2VjdXJpdHlfaG9vayk7CisJaWYgKElTX0VSUihzZWN0Ymxfb3BzKSkgeworCQlyZXQgPSBQVFJfRVJSKHNlY3RibF9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTY3LDcgKzEwNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHRhYmxlX3NlY3VyaXR5X2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZzZWN1cml0eV90YWJsZSwgc2VjdGJsX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHRhYmxlX3NlY3VyaXR5X25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCBkMWVhMzhhLi4yYmIxZjg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oPgpAQCAtMjY2LDcgKzI2Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQoc29ja19uZXQoc2spLCAmdHVwbGUpOworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQoc29ja19uZXQoc2spLCBORl9DVF9ERUZBVUxUX1pPTkUsICZ0dXBsZSk7CiAJaWYgKGgpIHsKIAkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKIAkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggN2FmZDM5Yi4uNzQwNGJkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2ljbXBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7CkBAIC0xMTQsMTMgKzExNSwxNCBAQAogCiAvKiBSZXR1cm5zIGNvbm50cmFjayBpZiBpdCBkZWFsdCB3aXRoIElDTVAsIGFuZCBmaWxsZWQgaW4gc2tiIGZpZWxkcyAqLwogc3RhdGljIGludAotaWNtcF9lcnJvcl9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ljbXBfZXJyb3JfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBpbm5lcnR1cGxlLCBvcmlndHVwbGU7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICppbm5lcnByb3RvOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwl1MTYgem9uZSA9IHRtcGwgPyBuZl9jdF96b25lKHRtcGwpIDogTkZfQ1RfREVGQVVMVF9aT05FOwogCiAJTkZfQ1RfQVNTRVJUKHNrYi0+bmZjdCA9PSBOVUxMKTsKIApAQCAtMTQ2LDcgKzE0OCw3IEBACiAKIAkqY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKIAotCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCAmaW5uZXJ0dXBsZSk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZpbm5lcnR1cGxlKTsKIAlpZiAoIWgpIHsKIAkJcHJfZGVidWcoImljbXBfZXJyb3JfbWVzc2FnZTogbm8gbWF0Y2hcbiIpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKQEAgLTE2Myw3ICsxNjUsOCBAQAogCiAvKiBTbWFsbCBhbmQgbW9kaWZpZWQgdmVyc2lvbiBvZiBpY21wX3JjdiAqLwogc3RhdGljIGludAotaWNtcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAoraWNtcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAorCSAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCWNvbnN0IHN0cnVjdCBpY21waGRyICppY21waDsKQEAgLTIwOCw3ICsyMTEsNyBAQAogCSAgICBpY21waC0+dHlwZSAhPSBJQ01QX1JFRElSRUNUKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JcmV0dXJuIGljbXBfZXJyb3JfbWVzc2FnZShuZXQsIHNrYiwgY3RpbmZvLCBob29rbnVtKTsKKwlyZXR1cm4gaWNtcF9lcnJvcl9tZXNzYWdlKG5ldCwgdG1wbCwgc2tiLCBjdGluZm8sIGhvb2tudW0pOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCmluZGV4IDMzMWVhZDMuLmNiNzYzYWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCkBAIC0xNyw2ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kZWZyYWdfaXB2NC5oPgorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KIAogLyogUmV0dXJucyBuZXcgc2tfYnVmZiwgb3IgTlVMTCAqLwogc3RhdGljIGludCBuZl9jdF9pcHY0X2dhdGhlcl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgdXNlcikKQEAgLTM4LDE1ICs0MiwyMiBAQAogc3RhdGljIGVudW0gaXBfZGVmcmFnX3VzZXJzIG5mX2N0X2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXUxNiB6b25lID0gTkZfQ1RfREVGQVVMVF9aT05FOworCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorCWlmIChza2ItPm5mY3QpCisJCXpvbmUgPSBuZl9jdF96b25lKChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJaWYgKHNrYi0+bmZfYnJpZGdlICYmCiAJICAgIHNrYi0+bmZfYnJpZGdlLT5tYXNrICYgQlJORl9ORl9CUklER0VfUFJFUk9VVElORykKLQkJcmV0dXJuIElQX0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOOworCQlyZXR1cm4gSVBfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU4gKyB6b25lOwogI2VuZGlmCiAJaWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORykKLQkJcmV0dXJuIElQX0RFRlJBR19DT05OVFJBQ0tfSU47CisJCXJldHVybiBJUF9ERUZSQUdfQ09OTlRSQUNLX0lOICsgem9uZTsKIAllbHNlCi0JCXJldHVybiBJUF9ERUZSQUdfQ09OTlRSQUNLX09VVDsKKwkJcmV0dXJuIElQX0RFRlJBR19DT05OVFJBQ0tfT1VUICsgem9uZTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2Nvbm50cmFja19kZWZyYWcodW5zaWduZWQgaW50IGhvb2tudW0sCkBAIC01OSw3ICs3MCw3IEBACiAjaWYgIWRlZmluZWQoQ09ORklHX05GX05BVCkgJiYgIWRlZmluZWQoQ09ORklHX05GX05BVF9NT0RVTEUpCiAJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayk/ICBJZ25vcmUuICBEbyB0aGlzIGJlZm9yZQogCSAgIGZyYWdtZW50IGNoZWNrLiAqLwotCWlmIChza2ItPm5mY3QpCisJaWYgKHNrYi0+bmZjdCAmJiAhbmZfY3RfaXNfdGVtcGxhdGUoKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDI2MDY2YTIuLjQ1OTUyODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX25hdF9sb2NrKTsKIApAQCAtNjksMTMgKzcwLDE0IEBACiAKIC8qIFdlIGtlZXAgYW4gZXh0cmEgaGFzaCBmb3IgZWFjaCBjb25udHJhY2ssIGZvciBmYXN0IHNlYXJjaGluZy4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1oYXNoX2J5X3NyYyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoraGFzaF9ieV9zcmMoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJdW5zaWduZWQgaW50IGhhc2g7CiAKIAkvKiBPcmlnaW5hbCBzcmMsIHRvIGVuc3VyZSB3ZSBtYXAgaXQgY29uc2lzdGVudGx5IGlmIHBvc3MuICovCiAJaGFzaCA9IGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51My5pcCwKLQkJCSAgICAoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51LmFsbCwKKwkJCSAgICAoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51LmFsbCBeIHpvbmUsCiAJCQkgICAgdHVwbGUtPmRzdC5wcm90b251bSwgMCk7CiAJcmV0dXJuICgodTY0KWhhc2ggKiBuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplKSA+PiAzMjsKIH0KQEAgLTEzOSwxMiArMTQxLDEyIEBACiAKIC8qIE9ubHkgY2FsbGVkIGZvciBTUkMgbWFuaXAgKi8KIHN0YXRpYyBpbnQKLWZpbmRfYXBwcm9wcmlhdGVfc3JjKHN0cnVjdCBuZXQgKm5ldCwKK2ZpbmRfYXBwcm9wcmlhdGVfc3JjKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCiAJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVzdWx0LAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewotCXVuc2lnbmVkIGludCBoID0gaGFzaF9ieV9zcmMobmV0LCB0dXBsZSk7CisJdW5zaWduZWQgaW50IGggPSBoYXNoX2J5X3NyYyhuZXQsIHpvbmUsIHR1cGxlKTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdDsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm47CkBAIC0xNTIsNyArMTU0LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5hdCwgbiwgJm5ldC0+aXB2NC5uYXRfYnlzb3VyY2VbaF0sIGJ5c291cmNlKSB7CiAJCWN0ID0gbmF0LT5jdDsKLQkJaWYgKHNhbWVfc3JjKGN0LCB0dXBsZSkpIHsKKwkJaWYgKHNhbWVfc3JjKGN0LCB0dXBsZSkgJiYgbmZfY3Rfem9uZShjdCkgPT0gem9uZSkgewogCQkJLyogQ29weSBzb3VyY2UgcGFydCBmcm9tIHJlcGx5IHR1cGxlLiAqLwogCQkJbmZfY3RfaW52ZXJ0X3R1cGxlcHIocmVzdWx0LAogCQkJCSAgICAgICAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKQEAgLTE3NSw3ICsxNzcsNyBAQAogICAgdGhlIGlwIHdpdGggdGhlIGxvd2VzdCBzcmMtaXAvZHN0LWlwL3Byb3RvIHVzYWdlLgogKi8KIHN0YXRpYyB2b2lkCi1maW5kX2Jlc3RfaXBzX3Byb3RvKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorZmluZF9iZXN0X2lwc19wcm90byh1MTYgem9uZSwgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKIAkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKIAkJICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKQpAQCAtMjA5LDcgKzIxMSw3IEBACiAJbWF4aXAgPSBudG9obChyYW5nZS0+bWF4X2lwKTsKIAlqID0gamhhc2hfMndvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUzLmlwLAogCQkJIHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QRVJTSVNURU5UID8KLQkJCQkwIDogKF9fZm9yY2UgdTMyKXR1cGxlLT5kc3QudTMuaXAsIDApOworCQkJCTAgOiAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCBeIHpvbmUsIDApOwogCWogPSAoKHU2NClqICogKG1heGlwIC0gbWluaXAgKyAxKSkgPj4gMzI7CiAJKnZhcl9pcHAgPSBodG9ubChtaW5pcCArIGopOwogfQpAQCAtMjI5LDYgKzIzMSw3IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpwcm90bzsKKwl1MTYgem9uZSA9IG5mX2N0X3pvbmUoY3QpOwogCiAJLyogMSkgSWYgdGhpcyBzcmNpcC9wcm90by9zcmMtcHJvdG8tcGFydCBpcyBjdXJyZW50bHkgbWFwcGVkLAogCSAgIGFuZCB0aGF0IHNhbWUgbWFwcGluZyBnaXZlcyBhIHVuaXF1ZSB0dXBsZSB3aXRoaW4gdGhlIGdpdmVuCkBAIC0yMzksNyArMjQyLDcgQEAKIAkgICBtYW5pcHMgbm90IGFuIGlzc3VlLiAgKi8KIAlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMgJiYKIAkgICAgIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSkgewotCQlpZiAoZmluZF9hcHByb3ByaWF0ZV9zcmMobmV0LCBvcmlnX3R1cGxlLCB0dXBsZSwgcmFuZ2UpKSB7CisJCWlmIChmaW5kX2FwcHJvcHJpYXRlX3NyYyhuZXQsIHpvbmUsIG9yaWdfdHVwbGUsIHR1cGxlLCByYW5nZSkpIHsKIAkJCXByX2RlYnVnKCJnZXRfdW5pcXVlX3R1cGxlOiBGb3VuZCBjdXJyZW50IHNyYyBtYXBcbiIpOwogCQkJaWYgKCFuZl9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY3QpKQogCQkJCXJldHVybjsKQEAgLTI0OSw3ICsyNTIsNyBAQAogCS8qIDIpIFNlbGVjdCB0aGUgbGVhc3QtdXNlZCBJUC9wcm90byBjb21iaW5hdGlvbiBpbiB0aGUgZ2l2ZW4KIAkgICByYW5nZS4gKi8KIAkqdHVwbGUgPSAqb3JpZ190dXBsZTsKLQlmaW5kX2Jlc3RfaXBzX3Byb3RvKHR1cGxlLCByYW5nZSwgY3QsIG1hbmlwdHlwZSk7CisJZmluZF9iZXN0X2lwc19wcm90byh6b25lLCB0dXBsZSwgcmFuZ2UsIGN0LCBtYW5pcHR5cGUpOwogCiAJLyogMykgVGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSBtYW5pcCBpcyBtYWRlIHRvIG1hcCBpbnRvCiAJICAgdGhlIHJhbmdlIHRvIG1ha2UgYSB1bmlxdWUgdHVwbGUuICovCkBAIC0zMjcsNyArMzMwLDggQEAKIAlpZiAoaGF2ZV90b19oYXNoKSB7CiAJCXVuc2lnbmVkIGludCBzcmNoYXNoOwogCi0JCXNyY2hhc2ggPSBoYXNoX2J5X3NyYyhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOworCQlzcmNoYXNoID0gaGFzaF9ieV9zcmMobmV0LCBuZl9jdF96b25lKGN0KSwKKwkJCQkgICAgICAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKIAkJc3Bpbl9sb2NrX2JoKCZuZl9uYXRfbG9jayk7CiAJCS8qIG5mX2Nvbm50cmFja19hbHRlcl9yZXBseSBtaWdodCByZS1hbGxvY2F0ZSBleG50ZW5zaW9uIGFlcmEgKi8KIAkJbmF0ID0gbmZjdF9uYXQoY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMKaW5kZXggYTFkNWQ1OC4uODZlMGU4NGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYwpAQCAtMjcsNzYgKzI3LDI5IEBACiAKIC8qIEZJWE1FOiBUaW1lIG91dD8gLS1SUiAqLwogCi1zdGF0aWMgaW50Ci1tYW5nbGVfcmZjOTU5X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgIF9fYmUzMiBuZXdpcCwKLQkJICAgICB1X2ludDE2X3QgcG9ydCwKLQkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCi0JCSAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAotCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3N0YXRpYyBpbnQgbmZfbmF0X2Z0cF9mbXRfY21kKGVudW0gbmZfY3RfZnRwX3R5cGUgdHlwZSwKKwkJCSAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwKKwkJCSAgICAgIF9fYmUzMiBhZGRyLCB1MTYgcG9ydCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubixubm4sbm5uLG5ubixubm4sbm5uIildOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTkZfQ1RfRlRQX1BPUlQ6CisJY2FzZSBORl9DVF9GVFBfUEFTVjoKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgYnVmbGVuLCAiJXUsJXUsJXUsJXUsJXUsJXUiLAorCQkJCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVswXSwKKwkJCQkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMV0sCisJCQkJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzJdLAorCQkJCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVszXSwKKwkJCQlwb3J0ID4+IDgsCisJCQkJcG9ydCAmIDB4RkYpOworCWNhc2UgTkZfQ1RfRlRQX0VQUlQ6CisJCXJldHVybiBzbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgInwxfCVwSTR8JXV8IiwgJmFkZHIsIHBvcnQpOworCWNhc2UgTkZfQ1RfRlRQX0VQU1Y6CisJCXJldHVybiBzbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgInx8fCV1fCIsIHBvcnQpOworCX0KIAotCXNwcmludGYoYnVmZmVyLCAiJXUsJXUsJXUsJXUsJXUsJXUiLAotCQlOSVBRVUFEKG5ld2lwKSwgcG9ydD4+OCwgcG9ydCYweEZGKTsKLQotCXByX2RlYnVnKCJjYWxsaW5nIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldFxuIik7Ci0KLQlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCi0JCQkJCW1hdGNobGVuLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKKwlyZXR1cm4gMDsKIH0KIAotLyogfDF8MTMyLjIzNS4xLjJ8NjI3NXwgKi8KLXN0YXRpYyBpbnQKLW1hbmdsZV9lcHJ0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBfX2JlMzIgbmV3aXAsCi0JCSAgIHVfaW50MTZfdCBwb3J0LAotCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCi0JCSAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKLQkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKLXsKLQljaGFyIGJ1ZmZlcltzaXplb2YoInwxfDI1NS4yNTUuMjU1LjI1NXw2NTUzNXwiKV07Ci0KLQlzcHJpbnRmKGJ1ZmZlciwgInwxfCV1LiV1LiV1LiV1fCV1fCIsIE5JUFFVQUQobmV3aXApLCBwb3J0KTsKLQotCXByX2RlYnVnKCJjYWxsaW5nIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldFxuIik7Ci0KLQlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCi0JCQkJCW1hdGNobGVuLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLX0KLQotLyogfDF8MTMyLjIzNS4xLjJ8NjI3NXwgKi8KLXN0YXRpYyBpbnQKLW1hbmdsZV9lcHN2X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBfX2JlMzIgbmV3aXAsCi0JCSAgIHVfaW50MTZfdCBwb3J0LAotCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCi0JCSAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKLQkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKLXsKLQljaGFyIGJ1ZmZlcltzaXplb2YoInx8fDY1NTM1fCIpXTsKLQotCXNwcmludGYoYnVmZmVyLCAifHx8JXV8IiwgcG9ydCk7Ci0KLQlwcl9kZWJ1ZygiY2FsbGluZyBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXRcbiIpOwotCi0JcmV0dXJuIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLAotCQkJCQltYXRjaGxlbiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyBpbnQgKCptYW5nbGVbXSkoc3RydWN0IHNrX2J1ZmYgKiwgX19iZTMyLCB1X2ludDE2X3QsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IG5mX2Nvbm4gKiwKLQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8pCi09IHsKLQlbTkZfQ1RfRlRQX1BPUlRdID0gbWFuZ2xlX3JmYzk1OV9wYWNrZXQsCi0JW05GX0NUX0ZUUF9QQVNWXSA9IG1hbmdsZV9yZmM5NTlfcGFja2V0LAotCVtORl9DVF9GVFBfRVBSVF0gPSBtYW5nbGVfZXBydF9wYWNrZXQsCi0JW05GX0NUX0ZUUF9FUFNWXSA9IG1hbmdsZV9lcHN2X3BhY2tldAotfTsKLQogLyogU28sIHRoaXMgcGFja2V0IGhhcyBoaXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2hpbmcgY29kZS4KICAgIE1hbmdsZSBpdCwgYW5kIGNoYW5nZSB0aGUgZXhwZWN0YXRpb24gdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfZnRwKHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMTAsNiArNjMsOCBAQAogCXVfaW50MTZfdCBwb3J0OwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gZXhwLT5tYXN0ZXI7CisJY2hhciBidWZmZXJbc2l6ZW9mKCJ8MXwyNTUuMjU1LjI1NS4yNTV8NjU1MzV8IildOworCXVuc2lnbmVkIGludCBidWZsZW47CiAKIAlwcl9kZWJ1ZygiRlRQX05BVDogdHlwZSAlaSwgb2ZmICV1IGxlbiAldVxuIiwgdHlwZSwgbWF0Y2hvZmYsIG1hdGNobGVuKTsKIApAQCAtMTMyLDExICs4NywyMSBAQAogCWlmIChwb3J0ID09IDApCiAJCXJldHVybiBORl9EUk9QOwogCi0JaWYgKCFtYW5nbGVbdHlwZV0oc2tiLCBuZXdpcCwgcG9ydCwgbWF0Y2hvZmYsIG1hdGNobGVuLCBjdCwgY3RpbmZvKSkgewotCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKGV4cCk7Ci0JCXJldHVybiBORl9EUk9QOwotCX0KKwlidWZsZW4gPSBuZl9uYXRfZnRwX2ZtdF9jbWQodHlwZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgbmV3aXAsIHBvcnQpOworCWlmICghYnVmbGVuKQorCQlnb3RvIG91dDsKKworCXByX2RlYnVnKCJjYWxsaW5nIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldFxuIik7CisKKwlpZiAoIW5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLAorCQkJCSAgICAgIG1hdGNobGVuLCBidWZmZXIsIGJ1ZmxlbikpCisJCWdvdG8gb3V0OworCiAJcmV0dXJuIE5GX0FDQ0VQVDsKKworb3V0OgorCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKKwlyZXR1cm4gTkZfRFJPUDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9mdHBfZmluaSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKaW5kZXggN2YxMGE2Yi4uNGI2YWY0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCkBAIC0xNDEsNiArMTQxLDE3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3ZvaWQgbmZfbmF0X3NldF9zZXFfYWRqdXN0KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICBfX2JlMzIgc2VxLCBzMTYgb2ZmKQoreworCWlmICghb2ZmKQorCQlyZXR1cm47CisJc2V0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKTsKKwlhZGp1c3RfdGNwX3NlcXVlbmNlKG50b2hsKHNlcSksIG9mZiwgY3QsIGN0aW5mbyk7CisJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfTkFUU0VRQURKLCBjdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2V0X3NlcV9hZGp1c3QpOworCiAvKiBHZW5lcmljIGZ1bmN0aW9uIGZvciBtYW5nbGluZyB2YXJpYWJsZS1sZW5ndGggYWRkcmVzcyBjaGFuZ2VzIGluc2lkZQogICogTkFUZWQgVENQIGNvbm5lY3Rpb25zIChsaWtlIHRoZSBQT1JUIFhYWCxYWFgsWFhYLFhYWCxYWFgsWFhYCiAgKiBjb21tYW5kIGluIEZUUCkuCkBAIC0xNDksMTQgKzE2MCwxMyBAQAogICogc2tiIGVubGFyZ2VtZW50LCAuLi4KICAqCiAgKiAqLwotaW50Ci1uZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKLQkJCSB1bnNpZ25lZCBpbnQgbWF0Y2hfbGVuLAotCQkJIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCi0JCQkgdW5zaWduZWQgaW50IHJlcF9sZW4pCitpbnQgX19uZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJlcF9sZW4sIGJvb2wgYWRqdXN0KQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBpcGhkciAqaXBoOwpAQCAtMjAyLDE2ICsyMTIsMTMgQEAKIAkJaW5ldF9wcm90b19jc3VtX3JlcGxhY2UyKCZ0Y3BoLT5jaGVjaywgc2tiLAogCQkJCQkgaHRvbnMob2xkbGVuKSwgaHRvbnMoZGF0YWxlbiksIDEpOwogCi0JaWYgKHJlcF9sZW4gIT0gbWF0Y2hfbGVuKSB7Ci0JCXNldF9iaXQoSVBTX1NFUV9BREpVU1RfQklULCAmY3QtPnN0YXR1cyk7Ci0JCWFkanVzdF90Y3Bfc2VxdWVuY2UobnRvaGwodGNwaC0+c2VxKSwKLQkJCQkgICAgKGludClyZXBfbGVuIC0gKGludCltYXRjaF9sZW4sCi0JCQkJICAgIGN0LCBjdGluZm8pOwotCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9OQVRTRVFBREosIGN0KTsKLQl9CisJaWYgKGFkanVzdCAmJiByZXBfbGVuICE9IG1hdGNoX2xlbikKKwkJbmZfbmF0X3NldF9zZXFfYWRqdXN0KGN0LCBjdGluZm8sIHRjcGgtPnNlcSwKKwkJCQkgICAgICAoaW50KXJlcF9sZW4gLSAoaW50KW1hdGNoX2xlbik7CisKIAlyZXR1cm4gMTsKIH0KLUVYUE9SVF9TWU1CT0wobmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KTsKK0VYUE9SVF9TWU1CT0woX19uZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQpOwogCiAvKiBHZW5lcmljIGZ1bmN0aW9uIGZvciBtYW5nbGluZyB2YXJpYWJsZS1sZW5ndGggYWRkcmVzcyBjaGFuZ2VzIGluc2lkZQogICogTkFUZWQgVURQIGNvbm5lY3Rpb25zIChsaWtlIHRoZSBDT05ORUNUIERBVEEgWFhYWFggTUVTRyBYWFhYWCBJTkRFWCBYWFhYWApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwppbmRleCA5ZWIxNzEwLi40YzA2MDAzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmg+CiAKQEAgLTc0LDcgKzc1LDcgQEAKIAogCXByX2RlYnVnKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKIAluZl9jdF9kdW1wX3R1cGxlX2lwKCZ0KTsKLQlvdGhlcl9leHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCAmdCk7CisJb3RoZXJfZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgbmZfY3Rfem9uZShjdCksICZ0KTsKIAlpZiAob3RoZXJfZXhwKSB7CiAJCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQob3RoZXJfZXhwKTsKIAkJbmZfY3RfZXhwZWN0X3B1dChvdGhlcl9leHApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCA5ZTgxZTBkLi5hYjc0Y2MwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtMjgsMzYgKzI4LDYgQEAKIAkJCSAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykgfCBcCiAJCQkgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwdF9yZXBsYWNlIHJlcGw7Ci0Jc3RydWN0IGlwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcHRfZXJyb3IgdGVybTsKLX0gbmF0X2luaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gIm5hdCIsCi0JCS52YWxpZF9ob29rcyA9IE5BVF9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSA9IDAsCi0JCQlbTkZfSU5FVF9QT1NUX1JPVVRJTkddID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSA9IDAsCi0JCQlbTkZfSU5FVF9QT1NUX1JPVVRJTkddID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIKLQkJfSwKLQl9LAotCS5lbnRyaWVzID0gewotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQT1NUX1JPVVRJTkcgKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCkBAIC0xODYsOCArMTU2LDEzIEBACiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9uYXRfcnVsZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JbmV0LT5pcHY0Lm5hdF90YWJsZSA9IGlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZuYXRfdGFibGUsCi0JCQkJCQkgJm5hdF9pbml0aWFsX3RhYmxlLnJlcGwpOworCXN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbDsKKworCXJlcGwgPSBpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSgmbmF0X3RhYmxlKTsKKwlpZiAocmVwbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwluZXQtPmlwdjQubmF0X3RhYmxlID0gaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJm5hdF90YWJsZSwgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjQubmF0X3RhYmxlKSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY0Lm5hdF90YWJsZSk7CiAJcmV0dXJuIDA7CkBAIC0xOTUsNyArMTcwLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBuZl9uYXRfcnVsZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY0Lm5hdF90YWJsZSk7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjQubmF0X3RhYmxlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9uYXRfcnVsZV9uZXRfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMKaW5kZXggMDdkNjFhNS4uMTFiNTM4ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCkBAIC0xLDQgKzEsNCBAQAotLyogU0lQIGV4dGVuc2lvbiBmb3IgVURQIE5BVCBhbHRlcmF0aW9uLgorLyogU0lQIGV4dGVuc2lvbiBmb3IgTkFUIGFsdGVyYXRpb24uCiAgKgogICogKEMpIDIwMDUgYnkgQ2hyaXN0aWFuIEhlbnRzY2hlbCA8Y2hlbnRzY2hlbEBhcm5ldC5jb20uYXI+CiAgKiBiYXNlZCBvbiBSUidzIGlwX25hdF9mdHAuYyBhbmQgb3RoZXIgbW9kdWxlcy4KQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogCiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KQEAgLTI5LDI1ICszMCw0MiBAQAogTU9EVUxFX0FMSUFTKCJpcF9uYXRfc2lwIik7CiAKIAotc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgdW5zaWduZWQgaW50IG1hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgdW5zaWduZWQgaW50IG1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCQkJICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4pCiB7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJc3RydWN0IHRjcGhkciAqdGg7CisJdW5zaWduZWQgaW50IGJhc2VvZmY7CiAKLQlpZiAoIW5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLCBtYXRjaGxlbiwKLQkJCQkgICAgICBidWZmZXIsIGJ1ZmxlbikpCi0JCXJldHVybiAwOworCWlmIChuZl9jdF9wcm90b251bShjdCkgPT0gSVBQUk9UT19UQ1ApIHsKKwkJdGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItPmRhdGEgKyBpcF9oZHJsZW4oc2tiKSk7CisJCWJhc2VvZmYgPSBpcF9oZHJsZW4oc2tiKSArIHRoLT5kb2ZmICogNDsKKwkJbWF0Y2hvZmYgKz0gZGF0YW9mZiAtIGJhc2VvZmY7CisKKwkJaWYgKCFfX25mX25hdF9tYW5nbGVfdGNwX3BhY2tldChza2IsIGN0LCBjdGluZm8sCisJCQkJCQltYXRjaG9mZiwgbWF0Y2hsZW4sCisJCQkJCQlidWZmZXIsIGJ1ZmxlbiwgZmFsc2UpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJYmFzZW9mZiA9IGlwX2hkcmxlbihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQltYXRjaG9mZiArPSBkYXRhb2ZmIC0gYmFzZW9mZjsKKworCQlpZiAoIW5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChza2IsIGN0LCBjdGluZm8sCisJCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCQkJICAgICAgYnVmZmVyLCBidWZsZW4pKQorCQkJcmV0dXJuIDA7CisJfQogCiAJLyogUmVsb2FkIGRhdGEgcG9pbnRlciBhbmQgYWRqdXN0IGRhdGFsZW4gdmFsdWUgKi8KLQkqZHB0ciA9IHNrYi0+ZGF0YSArIGlwX2hkcmxlbihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCSpkcHRyID0gc2tiLT5kYXRhICsgZGF0YW9mZjsKIAkqZGF0YWxlbiArPSBidWZsZW4gLSBtYXRjaGxlbjsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBtYXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBtYXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKIAkJICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2IHBvcnQpCkBAIC03NiwxMSArOTQsMTEgQEAKIAogCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXBJNDoldSIsICZuZXdhZGRyLCBudG9ocyhuZXdwb3J0KSk7CiAKLQlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgICAgYnVmZmVyLCBidWZsZW4pOwogfQogCi1zdGF0aWMgaW50IG1hcF9zaXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBtYXBfc2lwX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQljb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJZW51bSBzaXBfaGVhZGVyX3R5cGVzIHR5cGUpCiB7CkBAIC05MywxNiArMTExLDE4IEBACiAJaWYgKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgTlVMTCwgKmRhdGFsZW4sIHR5cGUsIE5VTEwsCiAJCQkJICAgICZtYXRjaG9mZiwgJm1hdGNobGVuLCAmYWRkciwgJnBvcnQpIDw9IDApCiAJCXJldHVybiAxOwotCXJldHVybiBtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwgJmFkZHIsIHBvcnQpOworCXJldHVybiBtYXBfYWRkcihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCSZhZGRyLCBwb3J0KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2lwKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwotCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJdW5zaWduZWQgaW50IGNvZmYsIG1hdGNob2ZmLCBtYXRjaGxlbjsKKwllbnVtIHNpcF9oZWFkZXJfdHlwZXMgaGRyOwogCXVuaW9uIG5mX2luZXRfYWRkciBhZGRyOwogCV9fYmUxNiBwb3J0OwogCWludCByZXF1ZXN0LCBpbl9oZWFkZXI7CkBAIC0xMTIsMTYgKzEzMiwyMSBAQAogCQlpZiAoY3Rfc2lwX3BhcnNlX3JlcXVlc3QoY3QsICpkcHRyLCAqZGF0YWxlbiwKIAkJCQkJICZtYXRjaG9mZiwgJm1hdGNobGVuLAogCQkJCQkgJmFkZHIsICZwb3J0KSA+IDAgJiYKLQkJICAgICFtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJICAgICFtYXBfYWRkcihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgICAgICZhZGRyLCBwb3J0KSkKIAkJCXJldHVybiBORl9EUk9QOwogCQlyZXF1ZXN0ID0gMTsKIAl9IGVsc2UKIAkJcmVxdWVzdCA9IDA7CiAKKwlpZiAobmZfY3RfcHJvdG9udW0oY3QpID09IElQUFJPVE9fVENQKQorCQloZHIgPSBTSVBfSERSX1ZJQV9UQ1A7CisJZWxzZQorCQloZHIgPSBTSVBfSERSX1ZJQV9VRFA7CisKIAkvKiBUcmFuc2xhdGUgdG9wbW9zdCBWaWEgaGVhZGVyIGFuZCBwYXJhbWV0ZXJzICovCiAJaWYgKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgTlVMTCwgKmRhdGFsZW4sCi0JCQkJICAgIFNJUF9IRFJfVklBLCBOVUxMLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKKwkJCQkgICAgaGRyLCBOVUxMLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKIAkJCQkgICAgJmFkZHIsICZwb3J0KSA+IDApIHsKIAkJdW5zaWduZWQgaW50IG1hdGNoZW5kLCBwb2ZmLCBwbGVuLCBidWZsZW4sIG47CiAJCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uOm5ubm5uIildOwpAQCAtMTM4LDcgKzE2Myw3IEBACiAJCQkJZ290byBuZXh0OwogCQl9CiAKLQkJaWYgKCFtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJaWYgKCFtYXBfYWRkcihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgICAgICZhZGRyLCBwb3J0KSkKIAkJCXJldHVybiBORl9EUk9QOwogCkBAIC0xNTMsOCArMTc4LDggQEAKIAkJICAgIGFkZHIuaXAgIT0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMuaXApIHsKIAkJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXBJNCIsCiAJCQkJCSZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcCk7Ci0JCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBwb2ZmLCBwbGVuLAotCQkJCQkgICBidWZmZXIsIGJ1ZmxlbikpCisJCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCQkgICBwb2ZmLCBwbGVuLCBidWZmZXIsIGJ1ZmxlbikpCiAJCQkJcmV0dXJuIE5GX0RST1A7CiAJCX0KIApAQCAtMTY3LDggKzE5Miw4IEBACiAJCSAgICBhZGRyLmlwICE9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLmlwKSB7CiAJCQlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiVwSTQiLAogCQkJCQkmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMuaXApOwotCQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgcG9mZiwgcGxlbiwKLQkJCQkJICAgYnVmZmVyLCBidWZsZW4pKQorCQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkJICAgcG9mZiwgcGxlbiwgYnVmZmVyLCBidWZsZW4pKQogCQkJCXJldHVybiBORl9EUk9QOwogCQl9CiAKQEAgLTE4MSwzMSArMjA2LDQ1IEBACiAJCSAgICBodG9ucyhuKSAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51LnVkcC5wb3J0KSB7CiAJCQlfX2JlMTYgcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudWRwLnBvcnQ7CiAJCQlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgbnRvaHMocCkpOwotCQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgcG9mZiwgcGxlbiwKLQkJCQkJICAgYnVmZmVyLCBidWZsZW4pKQorCQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkJICAgcG9mZiwgcGxlbiwgYnVmZmVyLCBidWZsZW4pKQogCQkJCXJldHVybiBORl9EUk9QOwogCQl9CiAJfQogCiBuZXh0OgogCS8qIFRyYW5zbGF0ZSBDb250YWN0IGhlYWRlcnMgKi8KLQlkYXRhb2ZmID0gMDsKKwljb2ZmID0gMDsKIAlpbl9oZWFkZXIgPSAwOwotCXdoaWxlIChjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjdCwgKmRwdHIsICZkYXRhb2ZmLCAqZGF0YWxlbiwKKwl3aGlsZSAoY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCAmY29mZiwgKmRhdGFsZW4sCiAJCQkJICAgICAgIFNJUF9IRFJfQ09OVEFDVCwgJmluX2hlYWRlciwKIAkJCQkgICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCiAJCQkJICAgICAgICZhZGRyLCAmcG9ydCkgPiAwKSB7Ci0JCWlmICghbWFwX2FkZHIoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJCWlmICghbWFwX2FkZHIoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCiAJCQkgICAgICAmYWRkciwgcG9ydCkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAl9CiAKLQlpZiAoIW1hcF9zaXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIFNJUF9IRFJfRlJPTSkgfHwKLQkgICAgIW1hcF9zaXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIFNJUF9IRFJfVE8pKQorCWlmICghbWFwX3NpcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgU0lQX0hEUl9GUk9NKSB8fAorCSAgICAhbWFwX3NpcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgU0lQX0hEUl9UTykpCiAJCXJldHVybiBORl9EUk9QOworCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAorc3RhdGljIHZvaWQgaXBfbmF0X3NpcF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsIHMxNiBvZmYpCit7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CisKKwlpZiAobmZfY3RfcHJvdG9udW0oY3QpICE9IElQUFJPVE9fVENQIHx8IG9mZiA9PSAwKQorCQlyZXR1cm47CisKKwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIGlwX2hkcmxlbihza2IpKTsKKwluZl9uYXRfc2V0X3NlcV9hZGp1c3QoY3QsIGN0aW5mbywgdGgtPnNlcSwgb2ZmKTsKK30KKwogLyogSGFuZGxlcyBleHBlY3RlZCBzaWduYWxsaW5nIGNvbm5lY3Rpb25zIGFuZCBtZWRpYSBzdHJlYW1zICovCiBzdGF0aWMgdm9pZCBpcF9uYXRfc2lwX2V4cGVjdGVkKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQpAQCAtMjMyLDcgKzI3MSw3IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCkBAIC0yNzksOCArMzE4LDggQEAKIAlpZiAoZXhwLT50dXBsZS5kc3QudTMuaXAgIT0gZXhwLT5zYXZlZF9pcCB8fAogCSAgICBleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ICE9IGV4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQpIHsKIAkJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIlcEk0OiV1IiwgJm5ld2lwLCBwb3J0KTsKLQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAotCQkJCSAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGJ1ZmZlciwgYnVmbGVuKSkKIAkJCWdvdG8gZXJyOwogCX0KIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtMjkwLDcgKzMyOSw3IEBACiAJcmV0dXJuIE5GX0RST1A7CiB9CiAKLXN0YXRpYyBpbnQgbWFuZ2xlX2NvbnRlbnRfbGVuKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IG1hbmdsZV9jb250ZW50X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCiB7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CkBAIC0zMTIsMTIgKzM1MSwxMyBAQAogCQlyZXR1cm4gMDsKIAogCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBjX2xlbik7Ci0JcmV0dXJuIG1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJcmV0dXJuIG1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCiAJCQkgICAgIGJ1ZmZlciwgYnVmbGVuKTsKIH0KIAotc3RhdGljIGludCBtYW5nbGVfc2RwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICoqZHB0ciwKLQkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKK3N0YXRpYyBpbnQgbWFuZ2xlX3NkcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkgICAgIHVuc2lnbmVkIGludCBzZHBvZmYsCiAJCQkgICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAogCQkJICAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSwKIAkJCSAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQpAQCAtMzI2LDE2ICszNjYsMTYgQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmOwogCi0JaWYgKGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjdCwgKmRwdHIsIGRhdGFvZmYsICpkYXRhbGVuLCB0eXBlLCB0ZXJtLAorCWlmIChjdF9zaXBfZ2V0X3NkcF9oZWFkZXIoY3QsICpkcHRyLCBzZHBvZmYsICpkYXRhbGVuLCB0eXBlLCB0ZXJtLAogCQkJCSAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCiAJCXJldHVybiAtRU5PRU5UOwotCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAogCQkJICAgICBidWZmZXIsIGJ1ZmxlbikgPyAwIDogLUVJTlZBTDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqKmRwdHIsCi0JCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNkcG9mZiwKIAkJCQkgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHR5cGUsCiAJCQkJICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAogCQkJCSAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCkBAIC0zNDQsMTYgKzM4NCwxNSBAQAogCXVuc2lnbmVkIGludCBidWZsZW47CiAKIAlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiVwSTQiLCAmYWRkci0+aXApOwotCWlmIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sIHR5cGUsIHRlcm0sCisJaWYgKG1hbmdsZV9zZHBfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgc2Rwb2ZmLCB0eXBlLCB0ZXJtLAogCQkJICAgICAgYnVmZmVyLCBidWZsZW4pKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBkcHRyLCBkYXRhbGVuKTsKKwlyZXR1cm4gbWFuZ2xlX2NvbnRlbnRfbGVuKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIGNvbnN0IGNoYXIgKipkcHRyLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCQkJICAgIHVfaW50MTZfdCBwb3J0KQpAQCAtMzYyLDE2ICs0MDEsMTYgQEAKIAl1bnNpZ25lZCBpbnQgYnVmbGVuOwogCiAJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsIHBvcnQpOwotCWlmICghbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCiAJCQkgICBidWZmZXIsIGJ1ZmxlbikpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOworCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX3Nlc3Npb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqKmRwdHIsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNkcG9mZiwKIAkJCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQogewogCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uIildOwpAQCAtMzc5LDEyICs0MTgsMTIgQEAKIAogCS8qIE1hbmdsZSBzZXNzaW9uIGRlc2NyaXB0aW9uIG93bmVyIGFuZCBjb250YWN0IGFkZHJlc3NlcyAqLwogCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXBJNCIsICZhZGRyLT5pcCk7Ci0JaWYgKG1hbmdsZV9zZHBfcGFja2V0KHNrYiwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwKKwlpZiAobWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBzZHBvZmYsCiAJCQkgICAgICAgU0RQX0hEUl9PV05FUl9JUDQsIFNEUF9IRFJfTUVESUEsCiAJCQkgICAgICAgYnVmZmVyLCBidWZsZW4pKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAobWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhb2ZmLCBkYXRhbGVuLAorCXN3aXRjaCAobWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBzZHBvZmYsCiAJCQkJICBTRFBfSERSX0NPTk5FQ1RJT05fSVA0LCBTRFBfSERSX01FRElBLAogCQkJCSAgYnVmZmVyLCBidWZsZW4pKSB7CiAJY2FzZSAwOgpAQCAtNDAxLDE0ICs0NDAsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOworCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuKTsKIH0KIAogLyogU28sIHRoaXMgcGFja2V0IGhhcyBoaXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2hpbmcgY29kZS4KICAgIE1hbmdsZSBpdCwgYW5kIGNoYW5nZSB0aGUgZXhwZWN0YXRpb24gdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICBjb25zdCBjaGFyICoqZHB0ciwKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKIAkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBtZWRpYW9mZiwKQEAgLTQ1Niw3ICs0OTQsOCBAQAogCiAJLyogVXBkYXRlIG1lZGlhIHBvcnQuICovCiAJaWYgKHJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ICE9IHJ0cF9leHAtPnNhdmVkX3Byb3RvLnVkcC5wb3J0ICYmCi0JICAgICFpcF9uYXRfc2RwX3BvcnQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtZWRpYW9mZiwgbWVkaWFsZW4sIHBvcnQpKQorCSAgICAhaXBfbmF0X3NkcF9wb3J0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCSAgICAgbWVkaWFvZmYsIG1lZGlhbGVuLCBwb3J0KSkKIAkJZ290byBlcnIyOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTQ3MSw2ICs1MTAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9zaXBfZmluaSh2b2lkKQogewogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vaywgTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfZXhwZWN0X2hvb2ssIE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX2FkZHJfaG9vaywgTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfcG9ydF9ob29rLCBOVUxMKTsKQEAgLTQ4MiwxMiArNTIyLDE0IEBACiBzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc2lwX2luaXQodm9pZCkKIHsKIAlCVUdfT04obmZfbmF0X3NpcF9ob29rICE9IE5VTEwpOworCUJVR19PTihuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vayAhPSBOVUxMKTsKIAlCVUdfT04obmZfbmF0X3NpcF9leHBlY3RfaG9vayAhPSBOVUxMKTsKIAlCVUdfT04obmZfbmF0X3NkcF9hZGRyX2hvb2sgIT0gTlVMTCk7CiAJQlVHX09OKG5mX25hdF9zZHBfcG9ydF9ob29rICE9IE5VTEwpOwogCUJVR19PTihuZl9uYXRfc2RwX3Nlc3Npb25faG9vayAhPSBOVUxMKTsKIAlCVUdfT04obmZfbmF0X3NkcF9tZWRpYV9ob29rICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2hvb2ssIGlwX25hdF9zaXApOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vaywgaXBfbmF0X3NpcF9zZXFfYWRqdXN0KTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NpcF9leHBlY3RfaG9vaywgaXBfbmF0X3NpcF9leHBlY3QpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX2FkZHJfaG9vaywgaXBfbmF0X3NkcF9hZGRyKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9wb3J0X2hvb2ssIGlwX25hdF9zZHBfcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCmluZGV4IGQ5NTIxZjYuLjBiOWM3Y2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCXVuc2lnbmVkIGludCBjbHMsIGNvbiwgdGFnLCB2ZXJzLCBwZHV0eXBlOwogCXN0cnVjdCBhc24xX2N0eCBjdHg7CiAJc3RydWN0IGFzbjFfb2N0c3RyIGNvbW07Ci0Jc3RydWN0IHNubXBfb2JqZWN0ICoqb2JqOworCXN0cnVjdCBzbm1wX29iamVjdCAqb2JqOwogCiAJaWYgKGRlYnVnID4gMSkKIAkJaGV4X2R1bXAobXNnLCBsZW4pOwpAQCAtMTE0OCw0MyArMTE0OCwzNCBAQAogCWlmIChjbHMgIT0gQVNOMV9VTkkgfHwgY29uICE9IEFTTjFfQ09OIHx8IHRhZyAhPSBBU04xX1NFUSkKIAkJcmV0dXJuIDA7CiAKLQlvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpLCBHRlBfQVRPTUlDKTsKLQlpZiAob2JqID09IE5VTEwpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9PTSBpbiBic2FsZyglZClcbiIsIF9fTElORV9fKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJd2hpbGUgKCFhc24xX2VvY19kZWNvZGUoJmN0eCwgZW9jKSkgewogCQl1bnNpZ25lZCBpbnQgaTsKIAotCQlpZiAoIXNubXBfb2JqZWN0X2RlY29kZSgmY3R4LCBvYmopKSB7Ci0JCQlpZiAoKm9iaikgewotCQkJCWtmcmVlKCgqb2JqKS0+aWQpOwotCQkJCWtmcmVlKCpvYmopOworCQlpZiAoIXNubXBfb2JqZWN0X2RlY29kZSgmY3R4LCAmb2JqKSkgeworCQkJaWYgKG9iaikgeworCQkJCWtmcmVlKG9iai0+aWQpOworCQkJCWtmcmVlKG9iaik7CiAJCQl9Ci0JCQlrZnJlZShvYmopOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlpZiAoZGVidWcgPiAxKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiYnNhbGc6IG9iamVjdDogIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKCpvYmopLT5pZF9sZW47IGkrKykgeworCQkJZm9yIChpID0gMDsgaSA8IG9iai0+aWRfbGVuOyBpKyspIHsKIAkJCQlpZiAoaSA+IDApCiAJCQkJCXByaW50aygiLiIpOwotCQkJCXByaW50aygiJWx1IiwgKCpvYmopLT5pZFtpXSk7CisJCQkJcHJpbnRrKCIlbHUiLCBvYmotPmlkW2ldKTsKIAkJCX0KLQkJCXByaW50aygiOiB0eXBlPSV1XG4iLCAoKm9iaiktPnR5cGUpOworCQkJcHJpbnRrKCI6IHR5cGU9JXVcbiIsIG9iai0+dHlwZSk7CiAKIAkJfQogCi0JCWlmICgoKm9iaiktPnR5cGUgPT0gU05NUF9JUEFERFIpCisJCWlmIChvYmotPnR5cGUgPT0gU05NUF9JUEFERFIpCiAJCQltYW5nbGVfYWRkcmVzcyhjdHguYmVnaW4sIGN0eC5wb2ludGVyIC0gNCAsIG1hcCwgY2hlY2spOwogCi0JCWtmcmVlKCgqb2JqKS0+aWQpOwotCQlrZnJlZSgqb2JqKTsKKwkJa2ZyZWUob2JqLT5pZCk7CisJCWtmcmVlKG9iaik7CiAJfQotCWtmcmVlKG9iaik7CiAKIAlpZiAoIWFzbjFfZW9jX2RlY29kZSgmY3R4LCBlb2MpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCBmMjU1NDJjLi4yNDJlZDIzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC0xMjcsOCArMTI3LDggQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHN0cnVjdCB7Ci0JY2hhciAqbmFtZTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGluZGV4OwogfSBpY21wbWlibWFwW10gPSB7CiAJeyAiRGVzdFVucmVhY2hzIiwgSUNNUF9ERVNUX1VOUkVBQ0ggfSwKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBJQ01QTVNHX01JQl9NQVg7IGkrKykgewotCQl2YWwgPSBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywgaSk7CisJCXZhbCA9IHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKikgbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLCBpKTsKIAkJaWYgKHZhbCkgewogCQkJdHlwZVtjb3VudF0gPSBpOwogCQkJdmFsc1tjb3VudCsrXSA9IHZhbDsKQEAgLTMwNywxOCArMzA3LDE4IEBACiAJZm9yIChpPTA7IGljbXBtaWJtYXBbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiIE91dCVzIiwgaWNtcG1pYm1hcFtpXS5uYW1lKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlxuSWNtcDogJWx1ICVsdSIsCi0JCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9JTk1TR1MpLAotCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfSU5FUlJPUlMpKTsKKwkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX0lOTVNHUyksCisJCXNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9JTkVSUk9SUykpOwogCWZvciAoaT0wOyBpY21wbWlibWFwW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCisJCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywKIAkJCQlpY21wbWlibWFwW2ldLmluZGV4KSk7CiAJc2VxX3ByaW50ZihzZXEsICIgJWx1ICVsdSIsCi0JCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9PVVRNU0dTKSwKLQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX09VVEVSUk9SUykpOworCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfT1VUTVNHUyksCisJCXNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9PVVRFUlJPUlMpKTsKIAlmb3IgKGk9MDsgaWNtcG1pYm1hcFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAorCQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKSBuZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCiAJCQkJaWNtcG1pYm1hcFtpXS5pbmRleCB8IDB4MTAwKSk7CiB9CiAKQEAgLTM0MSw3ICszNDEsNyBAQAogCiAJZm9yIChpID0gMDsgc25tcDRfaXBzdGF0c19saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfaXBzdGF0c19saXN0W2ldLmVudHJ5KSk7CiAKIAlpY21wX3B1dChzZXEpOwkvKiBSRkMgMjAxMSBjb21wYXRpYmlsaXR5ICovCkBAIC0zNTYsMTEgKzM1NiwxMSBAQAogCQkvKiBNYXhDb25uIGZpZWxkIGlzIHNpZ25lZCwgUkZDIDIwMTIgKi8KIAkJaWYgKHNubXA0X3RjcF9saXN0W2ldLmVudHJ5ID09IFRDUF9NSUJfTUFYQ09OTikKIAkJCXNlcV9wcmludGYoc2VxLCAiICVsZCIsCi0JCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAorCQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcywKIAkJCQkJCSAgIHNubXA0X3RjcF9saXN0W2ldLmVudHJ5KSk7CiAJCWVsc2UKIAkJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAorCQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcywKIAkJCQkJCSAgIHNubXA0X3RjcF9saXN0W2ldLmVudHJ5KSk7CiAJfQogCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlzZXFfcHV0cyhzZXEsICJcblVkcDoiKTsKIAlmb3IgKGkgPSAwOyBzbm1wNF91ZHBfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi51ZHBfc3RhdGlzdGljcywKKwkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfdWRwX2xpc3RbaV0uZW50cnkpKTsKIAogCS8qIHRoZSBVRFAgYW5kIFVEUC1MaXRlIE1JQnMgYXJlIHRoZSBzYW1lICovCkBAIC0zODIsNyArMzgyLDcgQEAKIAlzZXFfcHV0cyhzZXEsICJcblVkcExpdGU6Iik7CiAJZm9yIChpID0gMDsgc25tcDRfdWRwX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfdWRwX2xpc3RbaV0uZW50cnkpKTsKIAogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CkBAIC00MTksNyArNDE5LDcgQEAKIAlzZXFfcHV0cyhzZXEsICJcblRjcEV4dDoiKTsKIAlmb3IgKGkgPSAwOyBzbm1wNF9uZXRfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcywKKwkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfbmV0X2xpc3RbaV0uZW50cnkpKTsKIAogCXNlcV9wdXRzKHNlcSwgIlxuSXBFeHQ6Iik7CkBAIC00MjksNyArNDI5LDcgQEAKIAlzZXFfcHV0cyhzZXEsICJcbklwRXh0OiIpOwogCWZvciAoaSA9IDA7IHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MsCiAJCQkJCSAgIHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5lbnRyeSkpOwogCiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGQ2MmIwNWQzLi5iMmJhNTU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI4NywxMiArMjg3LDEyIEBACiAJCWlmICghcnRfaGFzaF90YWJsZVtzdC0+YnVja2V0XS5jaGFpbikKIAkJCWNvbnRpbnVlOwogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCXIgPSByY3VfZGVyZWZlcmVuY2UocnRfaGFzaF90YWJsZVtzdC0+YnVja2V0XS5jaGFpbik7CisJCXIgPSByY3VfZGVyZWZlcmVuY2VfYmgocnRfaGFzaF90YWJsZVtzdC0+YnVja2V0XS5jaGFpbik7CiAJCXdoaWxlIChyKSB7CiAJCQlpZiAoZGV2X25ldChyLT51LmRzdC5kZXYpID09IHNlcV9maWxlX25ldChzZXEpICYmCiAJCQkgICAgci0+cnRfZ2VuaWQgPT0gc3QtPmdlbmlkKQogCQkJCXJldHVybiByOwotCQkJciA9IHJjdV9kZXJlZmVyZW5jZShyLT51LmRzdC5ydF9uZXh0KTsKKwkJCXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoci0+dS5kc3QucnRfbmV4dCk7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJfQpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJciA9IHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW47CiAJfQotCXJldHVybiByY3VfZGVyZWZlcmVuY2Uocik7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9iaChyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBydGFibGUgKnJ0X2NhY2hlX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLApAQCAtMTk5MCw4ICsxOTkwLDEzIEBACiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCS8qIE5vdCBJUCAoaS5lLiBBUlApLiBEbyBub3QgY3JlYXRlIHJvdXRlLCBpZiBpdCBpcwogCQkgKiBpbnZhbGlkIGZvciBwcm94eSBhcnAuIEROQVQgcm91dGVzIGFyZSBhbHdheXMgdmFsaWQuCisJCSAqCisJCSAqIFByb3h5IGFycCBmZWF0dXJlIGhhdmUgYmVlbiBleHRlbmRlZCB0byBhbGxvdywgQVJQCisJCSAqIHJlcGxpZXMgYmFjayB0byB0aGUgc2FtZSBpbnRlcmZhY2UsIHRvIHN1cHBvcnQKKwkJICogUHJpdmF0ZSBWTEFOIHN3aXRjaCB0ZWNobm9sb2dpZXMuIFNlZSBhcnAuYy4KIAkJICovCi0JCWlmIChvdXRfZGV2ID09IGluX2RldikgeworCQlpZiAob3V0X2RldiA9PSBpbl9kZXYgJiYKKwkJICAgIElOX0RFVl9QUk9YWV9BUlBfUFZMQU4oaW5fZGV2KSA9PSAwKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC0yNjg5LDggKzI2OTQsOCBAQAogCWhhc2ggPSBydF9oYXNoKGZscC0+Zmw0X2RzdCwgZmxwLT5mbDRfc3JjLCBmbHAtPm9pZiwgcnRfZ2VuaWQobmV0KSk7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JZm9yIChydGggPSByY3VfZGVyZWZlcmVuY2UocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0aDsKLQkJcnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0aC0+dS5kc3QucnRfbmV4dCkpIHsKKwlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOworCQlydGggPSByY3VfZGVyZWZlcmVuY2VfYmgocnRoLT51LmRzdC5ydF9uZXh0KSkgewogCQlpZiAocnRoLT5mbC5mbDRfZHN0ID09IGZscC0+Zmw0X2RzdCAmJgogCQkgICAgcnRoLT5mbC5mbDRfc3JjID09IGZscC0+Zmw0X3NyYyAmJgogCQkgICAgcnRoLT5mbC5paWYgPT0gMCAmJgpAQCAtMzAwOCw4ICszMDEzLDggQEAKIAkJaWYgKCFydF9oYXNoX3RhYmxlW2hdLmNoYWluKQogCQkJY29udGludWU7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQkJZm9yIChydCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsgcnQ7Ci0JCSAgICAgcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LnJ0X25leHQpLCBpZHgrKykgeworCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKKwkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CiAJCQlpZiAoIW5ldF9lcShkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCBuZXQpIHx8IGlkeCA8IHNfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnQpKQpAQCAtMzMyOSw3ICszMzM0LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKLXN0cnVjdCBpcF9ydF9hY2N0ICppcF9ydF9hY2N0IF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3QgaXBfcnRfYWNjdCBfX3BlcmNwdSAqaXBfcnRfYWNjdCBfX3JlYWRfbW9zdGx5OwogI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX1JPVVRFICovCiAKIHN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgcmhhc2hfZW50cmllczsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCA2NmZkODBlLi41YzI0ZGI0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwpAQCAtMzU4LDcgKzM1OCw4IEBACiAKIAl0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KHRjcF9mdWxsX3NwYWNlKHNrKSwgcmVxLT5tc3MsCiAJCQkJICAmcmVxLT5yY3Zfd25kLCAmcmVxLT53aW5kb3dfY2xhbXAsCi0JCQkJICBpcmVxLT53c2NhbGVfb2ssICZyY3Zfd3NjYWxlKTsKKwkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUsCisJCQkJICBkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAogCWlyZXEtPnJjdl93c2NhbGUgID0gcmN2X3dzY2FsZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCA3ZTM3MTJjLi5jMWJjMDc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNTc2LDYgKzU3NiwyMCBAQAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYwogCX0sCiAJeworCQkucHJvY25hbWUgICAgICAgPSAidGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzIiwKKwkJLmRhdGEgICAgICAgICAgID0gJnN5c2N0bF90Y3BfdGhpbl9saW5lYXJfdGltZW91dHMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjCisJfSwKKyAgICAgICAgeworCQkucHJvY25hbWUgICAgICAgPSAidGNwX3RoaW5fZHVwYWNrIiwKKwkJLmRhdGEgICAgICAgICAgID0gJnN5c2N0bF90Y3BfdGhpbl9kdXBhY2ssCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjCisJfSwKKwl7CiAJCS5wcm9jbmFtZQk9ICJ1ZHBfbWVtIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF91ZHBfbWVtLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfdWRwX21lbSksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGIwYTI2YmIuLjU5MDEwMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC01MzYsOCArNTM2LDcgQEAKIAkJdHAtPm5vbmFnbGUgJj0gflRDUF9OQUdMRV9QVVNIOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX21hcmtfdXJnKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBmbGFncywKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9tYXJrX3VyZyhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC01NDYsMTMgKzU0NSwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgbXNzX25vdywKIAkJCSAgICBpbnQgbm9uYWdsZSkKIHsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOworCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwogCQlpZiAoIShmbGFncyAmIE1TR19NT1JFKSB8fCBmb3JjZWRfcHVzaCh0cCkpCi0JCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwotCQl0Y3BfbWFya191cmcodHAsIGZsYWdzLCBza2IpOworCQkJdGNwX21hcmtfcHVzaCh0cCwgdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spKTsKKworCQl0Y3BfbWFya191cmcodHAsIGZsYWdzKTsKIAkJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgbXNzX25vdywKIAkJCQkJICAoZmxhZ3MgJiBNU0dfTU9SRSkgPyBUQ1BfTkFHTEVfQ09SSyA6IG5vbmFnbGUpOwogCX0KQEAgLTg3NywxMiArODc2LDEyIEBACiAjZGVmaW5lIFRDUF9QQUdFKHNrKQkoc2stPnNrX3NuZG1zZ19wYWdlKQogI2RlZmluZSBUQ1BfT0ZGKHNrKQkoc2stPnNrX3NuZG1zZ19vZmYpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaywgaW50IHNnKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB0bXAgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgeworCWlmIChzZykgewogCQlpZiAoc2tfY2FuX2dzbyhzaykpCiAJCQl0bXAgPSAwOwogCQllbHNlIHsKQEAgLTkwNiw3ICs5MDUsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGlvdmxlbiwgZmxhZ3M7CiAJaW50IG1zc19ub3csIHNpemVfZ29hbDsKLQlpbnQgZXJyLCBjb3BpZWQ7CisJaW50IHNnLCBlcnIsIGNvcGllZDsKIAlsb25nIHRpbWVvOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTkzNCw2ICs5MzMsOCBAQAogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKIAkJZ290byBvdXRfZXJyOwogCisJc2cgPSBzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfU0c7CisKIAl3aGlsZSAoLS1pb3ZsZW4gPj0gMCkgewogCQlpbnQgc2VnbGVuID0gaW92LT5pb3ZfbGVuOwogCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZnJvbSA9IGlvdi0+aW92X2Jhc2U7CkBAIC05NTksOCArOTYwLDkgQEAKIAkJCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCiAJCQkJCWdvdG8gd2FpdF9mb3Jfc25kYnVmOwogCi0JCQkJc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywgc2VsZWN0X3NpemUoc2spLAotCQkJCQkJc2stPnNrX2FsbG9jYXRpb24pOworCQkJCXNrYiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssCisJCQkJCQkJICBzZWxlY3Rfc2l6ZShzaywgc2cpLAorCQkJCQkJCSAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJCWlmICghc2tiKQogCQkJCQlnb3RvIHdhaXRfZm9yX21lbW9yeTsKIApAQCAtOTk3LDkgKzk5OSw3IEBACiAJCQkJCS8qIFdlIGNhbiBleHRlbmQgdGhlIGxhc3QgcGFnZQogCQkJCQkgKiBmcmFnbWVudC4gKi8KIAkJCQkJbWVyZ2UgPSAxOwotCQkJCX0gZWxzZSBpZiAoaSA9PSBNQVhfU0tCX0ZSQUdTIHx8Ci0JCQkJCSAgICghaSAmJgotCQkJCQkgICAhKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykpKSB7CisJCQkJfSBlbHNlIGlmIChpID09IE1BWF9TS0JfRlJBR1MgfHwgIXNnKSB7CiAJCQkJCS8qIE5lZWQgdG8gYWRkIG5ldyBmcmFnbWVudCBhbmQgY2Fubm90CiAJCQkJCSAqIGRvIHRoaXMgYmVjYXVzZSBpbnRlcmZhY2UgaXMgbm9uLVNHLAogCQkJCQkgKiBvciBiZWNhdXNlIGFsbCB0aGUgcGFnZSBzbG90cyBhcmUKQEAgLTIyMjksNiArMjIyOSwyMCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6CisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQl0cC0+dGhpbl9sdG8gPSB2YWw7CisJCWJyZWFrOworCisJY2FzZSBUQ1BfVEhJTl9EVVBBQ0s6CisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQl0cC0+dGhpbl9kdXBhY2sgPSB2YWw7CisJCWJyZWFrOworCiAJY2FzZSBUQ1BfQ09SSzoKIAkJLyogV2hlbiBzZXQgaW5kaWNhdGVzIHRvIGFsd2F5cyBxdWV1ZSBub24tZnVsbCBmcmFtZXMuCiAJCSAqIExhdGVyIHRoZSB1c2VyIGNsZWFycyB0aGlzIG9wdGlvbiBhbmQgd2UgdHJhbnNtaXQKQEAgLTI3ODgsMTAgKzI4MDIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0Y3BfbWQ1c2lnX3VzZXJzOwotc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfbWQ1c2lnX3Bvb2w7CitzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICp0Y3BfbWQ1c2lnX3Bvb2w7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKIAotc3RhdGljIHZvaWQgX190Y3BfZnJlZV9tZDVzaWdfcG9vbChzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbCkKK3N0YXRpYyB2b2lkIF9fdGNwX2ZyZWVfbWQ1c2lnX3Bvb2woc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwb29sKQogewogCWludCBjcHU7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewpAQCAtMjgwOCw3ICsyODIyLDcgQEAKIAogdm9pZCB0Y3BfZnJlZV9tZDVzaWdfcG9vbCh2b2lkKQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sID0gTlVMTDsKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKnBvb2wgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CiAJaWYgKC0tdGNwX21kNXNpZ191c2VycyA9PSAwKSB7CkBAIC0yODIyLDEwICsyODM2LDExIEBACiAKIEVYUE9SVF9TWU1CT0wodGNwX2ZyZWVfbWQ1c2lnX3Bvb2wpOwogCi1zdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKl9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKgorX190Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQogewogCWludCBjcHU7Ci0Jc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnBvb2w7CisJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwb29sOwogCiAJcG9vbCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICopOwogCWlmICghcG9vbCkKQEAgLTI4NTIsOSArMjg2Nyw5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQorc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICp0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiBfX3BlcmNwdSAqcG9vbDsKIAlpbnQgYWxsb2MgPSAwOwogCiByZXRyeToKQEAgLTI4NzMsNyArMjg4OCw5IEBACiAKIAlpZiAoYWxsb2MpIHsKIAkJLyogd2UgY2Fubm90IGhvbGQgc3BpbmxvY2sgaGVyZSBiZWNhdXNlIHRoaXMgbWF5IHNsZWVwLiAqLwotCQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcCA9IF9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHNrKTsKKwkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwOworCisJCXAgPSBfX3RjcF9hbGxvY19tZDVzaWdfcG9vbChzayk7CiAJCXNwaW5fbG9ja19iaCgmdGNwX21kNXNpZ19wb29sX2xvY2spOwogCQlpZiAoIXApIHsKIAkJCXRjcF9tZDVzaWdfdXNlcnMtLTsKQEAgLTI4OTcsNyArMjkxNCw3IEBACiAKIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKl9fdGNwX2dldF9tZDVzaWdfcG9vbChpbnQgY3B1KQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiBfX3BlcmNwdSAqcDsKIAlzcGluX2xvY2tfYmgoJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKIAlwID0gdGNwX21kNXNpZ19wb29sOwogCWlmIChwKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAzZmRkYzY5Li43ODg4NTFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtODksNiArODksOCBAQAogaW50IHN5c2N0bF90Y3BfZnJ0b19yZXNwb25zZSBfX3JlYWRfbW9zdGx5OwogaW50IHN5c2N0bF90Y3Bfbm9tZXRyaWNzX3NhdmUgX19yZWFkX21vc3RseTsKIAoraW50IHN5c2N0bF90Y3BfdGhpbl9kdXBhY2sgX19yZWFkX21vc3RseTsKKwogaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmIF9fcmVhZF9tb3N0bHkgPSAxOwogaW50IHN5c2N0bF90Y3BfYWJjIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTI0NDcsNiArMjQ0OSwxNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwkvKiBJZiBhIHRoaW4gc3RyZWFtIGlzIGRldGVjdGVkLCByZXRyYW5zbWl0IGFmdGVyIGZpcnN0CisJICogcmVjZWl2ZWQgZHVwYWNrLiBFbXBsb3kgb25seSBpZiBTQUNLIGlzIHN1cHBvcnRlZCBpbiBvcmRlcgorCSAqIHRvIGF2b2lkIHBvc3NpYmxlIGNvcm5lci1jYXNlIHNlcmllcyBvZiBzcHVyaW91cyByZXRyYW5zbWlzc2lvbnMKKwkgKiBVc2Ugb25seSBpZiB0aGVyZSBhcmUgbm8gdW5zZW50IGRhdGEuCisJICovCisJaWYgKCh0cC0+dGhpbl9kdXBhY2sgfHwgc3lzY3RsX3RjcF90aGluX2R1cGFjaykgJiYKKwkgICAgdGNwX3N0cmVhbV9pc190aGluKHRwKSAmJiB0Y3BfZHVwYWNrX2hldXJpc3RpY3ModHApID4gMSAmJgorCSAgICB0Y3BfaXNfc2Fjayh0cCkgJiYgIXRjcF9zZW5kX2hlYWQoc2spKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2NWI4ZWJmLi5jMzU4OGI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTc0Miw5ICs3NDIsOSBAQAogICoJVGhpcyBzdGlsbCBvcGVyYXRlcyBvbiBhIHJlcXVlc3Rfc29jayBvbmx5LCBub3Qgb24gYSBiaWcKICAqCXNvY2tldC4KICAqLwotc3RhdGljIGludCBfX3RjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJc3RydWN0IHJlcXVlc3RfdmFsdWVzICpydnApCitzdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3ZhbHVlcyAqcnZwKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJaW50IGVyciA9IC0xOwpAQCAtNzc1LDEwICs3NzUsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKK3N0YXRpYyBpbnQgdGNwX3Y0X3J0eF9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKnJ2cCkKIHsKLQlyZXR1cm4gX190Y3BfdjRfc2VuZF9zeW5hY2soc2ssIE5VTEwsIHJlcSwgcnZwKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9SRVRSQU5TU0VHUyk7CisJcmV0dXJuIHRjcF92NF9zZW5kX3N5bmFjayhzaywgTlVMTCwgcmVxLCBydnApOwogfQogCiAvKgpAQCAtMTE5MiwxMCArMTE5MywxMSBAQAogc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZmFtaWx5CQk9CVBGX0lORVQsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrKSwKLQkucnR4X3N5bl9hY2sJPQl0Y3BfdjRfc2VuZF9zeW5hY2ssCisJLnJ0eF9zeW5fYWNrCT0JdGNwX3Y0X3J0eF9zeW5hY2ssCiAJLnNlbmRfYWNrCT0JdGNwX3Y0X3JlcXNrX3NlbmRfYWNrLAogCS5kZXN0cnVjdG9yCT0JdGNwX3Y0X3JlcXNrX2Rlc3RydWN0b3IsCiAJLnNlbmRfcmVzZXQJPQl0Y3BfdjRfc2VuZF9yZXNldCwKKwkuc3luX2Fja190aW1lb3V0ID0gCXRjcF9zeW5fYWNrX3RpbWVvdXQsCiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKQEAgLTEzNzMsOCArMTM3NSw4IEBACiAJfQogCXRjcF9yc2socmVxKS0+c250X2lzbiA9IGlzbjsKIAotCWlmIChfX3RjcF92NF9zZW5kX3N5bmFjayhzaywgZHN0LCByZXEsCi0JCQkJIChzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKikmdG1wX2V4dCkgfHwKKwlpZiAodGNwX3Y0X3NlbmRfc3luYWNrKHNrLCBkc3QsIHJlcSwKKwkJCSAgICAgICAoc3RydWN0IHJlcXVlc3RfdmFsdWVzICopJnRtcF9leHQpIHx8CiAJICAgIHdhbnRfY29va2llKQogCQlnb3RvIGRyb3BfYW5kX2ZyZWU7CiAKQEAgLTE2NDksNiArMTY1MSw5IEBACiAJaWYgKCFzaykKIAkJZ290byBub190Y3Bfc29ja2V0OwogCisJaWYgKGlwaC0+dHRsIDwgaW5ldF9zayhzayktPm1pbl90dGwpCisJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CisKIHByb2Nlc3M6CiAJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKQogCQlnb3RvIGRvX3RpbWVfd2FpdDsKQEAgLTI0MjUsMTIgKzI0MzAsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB0Y3A0X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHRjcDRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIHRjcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnRjcDRfc2VxX2FmaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHRjcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdGNwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ0Y3A0X3NlcV9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDM4M2NlMjMuLjRhMTYwNWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTE4Myw3ICsxODMsOCBAQAogICovCiB2b2lkIHRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3coaW50IF9fc3BhY2UsIF9fdTMyIG1zcywKIAkJCSAgICAgICBfX3UzMiAqcmN2X3duZCwgX191MzIgKndpbmRvd19jbGFtcCwKLQkJCSAgICAgICBpbnQgd3NjYWxlX29rLCBfX3U4ICpyY3Zfd3NjYWxlKQorCQkJICAgICAgIGludCB3c2NhbGVfb2ssIF9fdTggKnJjdl93c2NhbGUsCisJCQkgICAgICAgX191MzIgaW5pdF9yY3Zfd25kKQogewogCXVuc2lnbmVkIGludCBzcGFjZSA9IChfX3NwYWNlIDwgMCA/IDAgOiBfX3NwYWNlKTsKIApAQCAtMjMyLDcgKzIzMywxMyBAQAogCQkJaW5pdF9jd25kID0gMjsKIAkJZWxzZSBpZiAobXNzID4gMTQ2MCkKIAkJCWluaXRfY3duZCA9IDM7Ci0JCWlmICgqcmN2X3duZCA+IGluaXRfY3duZCAqIG1zcykKKwkJLyogd2hlbiBpbml0aWFsaXppbmcgdXNlIHRoZSB2YWx1ZSBmcm9tIGluaXRfcmN2X3duZAorCQkgKiByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmcm9tIGFib3ZlCisJCSAqLworCQlpZiAoaW5pdF9yY3Zfd25kICYmCisJCSAgICAoKnJjdl93bmQgPiBpbml0X3Jjdl93bmQgKiBtc3MpKQorCQkJKnJjdl93bmQgPSBpbml0X3Jjdl93bmQgKiBtc3M7CisJCWVsc2UgaWYgKCpyY3Zfd25kID4gaW5pdF9jd25kICogbXNzKQogCQkJKnJjdl93bmQgPSBpbml0X2N3bmQgKiBtc3M7CiAJfQogCkBAIC0xNzk0LDExICsxODAxLDYgQEAKIHZvaWQgX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjdXJfbXNzLAogCQkJICAgICAgIGludCBub25hZ2xlKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKTsKLQotCWlmICghc2tiKQotCQlyZXR1cm47Ci0KIAkvKiBJZiB3ZSBhcmUgY2xvc2VkLCB0aGUgYnl0ZXMgd2lsbCBoYXZlIHRvIHJlbWFpbiBoZXJlLgogCSAqIEluIHRpbWUgY2xvc2Vkb3duIHdpbGwgZmluaXNoLCB3ZSBlbXB0eSB0aGUgd3JpdGUgcXVldWUgYW5kCiAJICogYWxsIHdpbGwgYmUgaGFwcHkuCkBAIC0yNDIyLDcgKzI0MjQsOCBAQAogCQkJJnJlcS0+cmN2X3duZCwKIAkJCSZyZXEtPndpbmRvd19jbGFtcCwKIAkJCWlyZXEtPndzY2FsZV9vaywKLQkJCSZyY3Zfd3NjYWxlKTsKKwkJCSZyY3Zfd3NjYWxlLAorCQkJZHN0X21ldHJpYyhkc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAkJaXJlcS0+cmN2X3dzY2FsZSA9IHJjdl93c2NhbGU7CiAJfQogCkBAIC0yNTQ5LDcgKzI1NTIsOCBAQAogCQkJCSAgJnRwLT5yY3Zfd25kLAogCQkJCSAgJnRwLT53aW5kb3dfY2xhbXAsCiAJCQkJICBzeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nLAotCQkJCSAgJnJjdl93c2NhbGUpOworCQkJCSAgJnJjdl93c2NhbGUsCisJCQkJICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpOwogCiAJdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gcmN2X3dzY2FsZTsKIAl0cC0+cmN2X3NzdGhyZXNoID0gdHAtPnJjdl93bmQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDg4MTZhMjAuLmExNzYyOWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0yOSw2ICsyOSw3IEBACiBpbnQgc3lzY3RsX3RjcF9yZXRyaWVzMSBfX3JlYWRfbW9zdGx5ID0gVENQX1JFVFIxOwogaW50IHN5c2N0bF90Y3BfcmV0cmllczIgX19yZWFkX21vc3RseSA9IFRDUF9SRVRSMjsKIGludCBzeXNjdGxfdGNwX29ycGhhbl9yZXRyaWVzIF9fcmVhZF9tb3N0bHk7CitpbnQgc3lzY3RsX3RjcF90aGluX2xpbmVhcl90aW1lb3V0cyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdm9pZCB0Y3Bfd3JpdGVfdGltZXIodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCB0Y3BfZGVsYWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcpOwpAQCAtNDE1LDcgKzQxNiwyNSBAQAogCWljc2stPmljc2tfcmV0cmFuc21pdHMrKzsKIAogb3V0X3Jlc2V0X3RpbWVyOgotCWljc2stPmljc2tfcnRvID0gbWluKGljc2stPmljc2tfcnRvIDw8IDEsIFRDUF9SVE9fTUFYKTsKKwkvKiBJZiBzdHJlYW0gaXMgdGhpbiwgdXNlIGxpbmVhciB0aW1lb3V0cy4gU2luY2UgJ2ljc2tfYmFja29mZicgaXMKKwkgKiB1c2VkIHRvIHJlc2V0IHRpbWVyLCBzZXQgdG8gMC4gUmVjYWxjdWxhdGUgJ2ljc2tfcnRvJyBhcyB0aGlzCisJICogbWlnaHQgYmUgaW5jcmVhc2VkIGlmIHRoZSBzdHJlYW0gb3NjaWxsYXRlcyBiZXR3ZWVuIHRoaW4gYW5kIHRoaWNrLAorCSAqIHRodXMgdGhlIG9sZCB2YWx1ZSBtaWdodCBhbHJlYWR5IGJlIHRvbyBoaWdoIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZQorCSAqIHNldCBieSAndGNwX3NldF9ydG8nIGluIHRjcF9pbnB1dC5jIHdoaWNoIHJlc2V0cyB0aGUgcnRvIHdpdGhvdXQKKwkgKiBiYWNrb2ZmLiBMaW1pdCB0byBUQ1BfVEhJTl9MSU5FQVJfUkVUUklFUyBiZWZvcmUgaW5pdGlhdGluZworCSAqIGV4cG9uZW50aWFsIGJhY2tvZmYgYmVoYXZpb3VyIHRvIGF2b2lkIGNvbnRpbnVlIGhhbW1lcmluZworCSAqIGxpbmVhci10aW1lb3V0IHJldHJhbnNtaXNzaW9ucyBpbnRvIGEgYmxhY2sgaG9sZQorCSAqLworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEICYmCisJICAgICh0cC0+dGhpbl9sdG8gfHwgc3lzY3RsX3RjcF90aGluX2xpbmVhcl90aW1lb3V0cykgJiYKKwkgICAgdGNwX3N0cmVhbV9pc190aGluKHRwKSAmJgorCSAgICBpY3NrLT5pY3NrX3JldHJhbnNtaXRzIDw9IFRDUF9USElOX0xJTkVBUl9SRVRSSUVTKSB7CisJCWljc2stPmljc2tfYmFja29mZiA9IDA7CisJCWljc2stPmljc2tfcnRvID0gbWluKF9fdGNwX3NldF9ydG8odHApLCBUQ1BfUlRPX01BWCk7CisJfSBlbHNlIHsKKwkJLyogVXNlIG5vcm1hbCAoZXhwb25lbnRpYWwpIGJhY2tvZmYgKi8KKwkJaWNzay0+aWNza19ydG8gPSBtaW4oaWNzay0+aWNza19ydG8gPDwgMSwgVENQX1JUT19NQVgpOworCX0KIAlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywgaWNzay0+aWNza19ydG8sIFRDUF9SVE9fTUFYKTsKIAlpZiAocmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCBzeXNjdGxfdGNwX3JldHJpZXMxICsgMSkpCiAJCV9fc2tfZHN0X3Jlc2V0KHNrKTsKQEAgLTQ3NCw2ICs0OTMsMTIgQEAKIAkJCQkgICBUQ1BfVElNRU9VVF9JTklULCBUQ1BfUlRPX01BWCk7CiB9CiAKK3ZvaWQgdGNwX3N5bl9hY2tfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFRJTUVPVVRTKTsKK30KK0VYUE9SVF9TWU1CT0wodGNwX3N5bl9hY2tfdGltZW91dCk7CisKIHZvaWQgdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQogewogCWlmICgoMSA8PCBzay0+c2tfc3RhdGUpICYgKFRDUEZfQ0xPU0UgfCBUQ1BGX0xJU1RFTikpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IGYwMTI2ZmQuLjYwOGE1NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IHVsZW4sIGNvcGllZDsKKwl1bnNpZ25lZCBpbnQgdWxlbjsKIAlpbnQgcGVla2VkOwogCWludCBlcnI7CiAJaW50IGlzX3VkcGxpdGUgPSBJU19VRFBMSVRFKHNrKTsKQEAgLTExMzgsMTAgKzExMzgsOSBAQAogCQlnb3RvIG91dDsKIAogCXVsZW4gPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQljb3BpZWQgPSBsZW47Ci0JaWYgKGNvcGllZCA+IHVsZW4pCi0JCWNvcGllZCA9IHVsZW47Ci0JZWxzZSBpZiAoY29waWVkIDwgdWxlbikKKwlpZiAobGVuID4gdWxlbikKKwkJbGVuID0gdWxlbjsKKwllbHNlIGlmIChsZW4gPCB1bGVuKQogCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CiAKIAkvKgpAQCAtMTE1MCwxNCArMTE0OSwxNCBAQAogCSAqIGNvdmVyYWdlIGNoZWNrc3VtIChVRFAtTGl0ZSksIGRvIGl0IGJlZm9yZSB0aGUgY29weS4KIAkgKi8KIAotCWlmIChjb3BpZWQgPCB1bGVuIHx8IFVEUF9TS0JfQ0Ioc2tiKS0+cGFydGlhbF9jb3YpIHsKKwlpZiAobGVuIDwgdWxlbiB8fCBVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292KSB7CiAJCWlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fY29weV9lcnI7CiAJfQogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAotCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CisJCQkJCSAgICAgIG1zZy0+bXNnX2lvdiwgbGVuKTsKIAllbHNlIHsKIAkJZXJyID0gc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoc2tiLAogCQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKQEAgLTExODYsNyArMTE4NSw3IEBACiAJaWYgKGluZXQtPmNtc2dfZmxhZ3MpCiAJCWlwX2Ntc2dfcmVjdihtc2csIHNrYik7CiAKLQllcnIgPSBjb3BpZWQ7CisJZXJyID0gbGVuOwogCWlmIChmbGFncyAmIE1TR19UUlVOQykKIAkJZXJyID0gdWxlbjsKIApAQCAtMjAyNywxMiArMjAyNiwxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IHVkcDRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgdWRwNF9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gdWRwX3Byb2NfcmVnaXN0ZXIobmV0LCAmdWRwNF9zZXFfYWZpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgdWRwNF9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdWRwNF9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1ZHBfcHJvY191bnJlZ2lzdGVyKG5ldCwgJnVkcDRfc2VxX2FmaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBsaXRlLmMgYi9uZXQvaXB2NC91ZHBsaXRlLmMKaW5kZXggNjZmNzk1MS4uNjYxMGJmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwbGl0ZS5jCisrKyBiL25ldC9pcHY0L3VkcGxpdGUuYwpAQCAtODEsMTIgKzgxLDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgdWRwbGl0ZTRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgdWRwbGl0ZTRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIHVkcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnVkcGxpdGU0X3NlcV9hZmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCB1ZHBsaXRlNF9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdWRwbGl0ZTRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdWRwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNF9zZXFfYWZpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDE0Mzc5MWQuLjg4ZmQ4YzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjc4LDMxICsyNzgsMzEgQEAKIAogc3RhdGljIGludCBzbm1wNl9hbGxvY19kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2LAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsCiAJCQkgIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2lwOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2NiwKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYsCiAJCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2X21pYikpIDwgMCkKIAkJZ290byBlcnJfaWNtcDsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjZtc2csCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2bXNnLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nm1zZ19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXBtc2c7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2ljbXBtc2c6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2KTsKIGVycl9pY21wOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2Nik7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2KTsKIGVycl9pcDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgc25tcDZfZnJlZV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2Nik7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjZtc2cpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogfQogCiAvKiBOb2JvZHkgcmVmZXJzIHRvIHRoaXMgZGV2aWNlLCB3ZSBtYXkgZGVzdHJveSBpdC4gKi8KQEAgLTk5Miw4ICs5OTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBpcHY2X3NhZGRyX3ByZWZlcnJlZChpbnQgdHlwZSkKIHsKLQlpZiAodHlwZSAmIChJUFY2X0FERFJfTUFQUEVEfElQVjZfQUREUl9DT01QQVR2NHwKLQkJICAgIElQVjZfQUREUl9MT09QQkFDS3xJUFY2X0FERFJfUkVTRVJWRUQpKQorCWlmICh0eXBlICYgKElQVjZfQUREUl9NQVBQRUR8SVBWNl9BRERSX0NPTVBBVHY0fElQVjZfQUREUl9MT09QQkFDSykpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMjY0OSw3ICsyNjQ4LDggQEAKIAogCQl3cml0ZV9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwogCQl3aGlsZSAoKGlmYSA9ICpiaWZhKSAhPSBOVUxMKSB7Ci0JCQlpZiAoaWZhLT5pZGV2ID09IGlkZXYpIHsKKwkJCWlmIChpZmEtPmlkZXYgPT0gaWRldiAmJgorCQkJICAgIChob3cgfHwgIShpZmEtPmZsYWdzJklGQV9GX1BFUk1BTkVOVCkpKSB7CiAJCQkJKmJpZmEgPSBpZmEtPmxzdF9uZXh0OwogCQkJCWlmYS0+bHN0X25leHQgPSBOVUxMOwogCQkJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOwpAQCAtMjY4OSwxOCArMjY4OSwzMCBAQAogCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAl9CiAjZW5kaWYKLQl3aGlsZSAoKGlmYSA9IGlkZXYtPmFkZHJfbGlzdCkgIT0gTlVMTCkgewotCQlpZGV2LT5hZGRyX2xpc3QgPSBpZmEtPmlmX25leHQ7Ci0JCWlmYS0+aWZfbmV4dCA9IE5VTEw7Ci0JCWlmYS0+ZGVhZCA9IDE7Ci0JCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOwotCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOworCWJpZmEgPSAmaWRldi0+YWRkcl9saXN0OworCXdoaWxlICgoaWZhID0gKmJpZmEpICE9IE5VTEwpIHsKKwkJaWYgKGhvdyA9PSAwICYmIChpZmEtPmZsYWdzJklGQV9GX1BFUk1BTkVOVCkpIHsKKwkJCS8qIFJldGFpbiBwZXJtYW5lbnQgYWRkcmVzcyBvbiBhZG1pbiBkb3duICovCisJCQliaWZhID0gJmlmYS0+aWZfbmV4dDsKIAotCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKLQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmluZXQ2YWRkcl9jaGFpbiwgTkVUREVWX0RPV04sIGlmYSk7Ci0JCWluNl9pZmFfcHV0KGlmYSk7CisJCQkvKiBSZXN0YXJ0IERBRCBpZiBuZWVkZWQgd2hlbiBsaW5rIGNvbWVzIGJhY2sgdXAgKi8KKwkJCWlmICggISgoZGV2LT5mbGFncyYoSUZGX05PQVJQfElGRl9MT09QQkFDSykpIHx8CisJCQkgICAgICAgaWRldi0+Y25mLmFjY2VwdF9kYWQgPD0gMCB8fAorCQkJICAgICAgIChpZmEtPmZsYWdzICYgSUZBX0ZfTk9EQUQpKSkKKwkJCQlpZmEtPmZsYWdzIHw9IElGQV9GX1RFTlRBVElWRTsKKwkJfSBlbHNlIHsKKwkJCSpiaWZhID0gaWZhLT5pZl9uZXh0OworCQkJaWZhLT5pZl9uZXh0ID0gTlVMTDsKIAotCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwkJCWlmYS0+ZGVhZCA9IDE7CisJCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOworCisJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKKwkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sIE5FVERFVl9ET1dOLCBpZmEpOworCQkJaW42X2lmYV9wdXQoaWZhKTsKKworCQkJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CisJCX0KIAl9CiAJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIApAQCAtMjc5MiwxNCArMjgwNCwxNCBAQAogCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7CiAJaWYgKGlmcC0+ZGVhZCkKIAkJZ290byBvdXQ7Ci0Jc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwogCisJc3Bpbl9sb2NrKCZpZnAtPmxvY2spOwogCWlmIChkZXYtPmZsYWdzJihJRkZfTk9BUlB8SUZGX0xPT1BCQUNLKSB8fAogCSAgICBpZGV2LT5jbmYuYWNjZXB0X2RhZCA8IDEgfHwKIAkgICAgIShpZnAtPmZsYWdzJklGQV9GX1RFTlRBVElWRSkgfHwKIAkgICAgaWZwLT5mbGFncyAmIElGQV9GX05PREFEKSB7CiAJCWlmcC0+ZmxhZ3MgJj0gfihJRkFfRl9URU5UQVRJVkV8SUZBX0ZfT1BUSU1JU1RJQ3xJRkFfRl9EQURGQUlMRUQpOwotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCQlhZGRyY29uZl9kYWRfY29tcGxldGVkKGlmcCk7CkBAIC0yODA3LDcgKzI4MTksNyBAQAogCX0KIAogCWlmICghKGlkZXYtPmlmX2ZsYWdzICYgSUZfUkVBRFkpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQlzcGluX3VubG9jaygmaWZwLT5sb2NrKTsKIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCQkvKgogCQkgKiBJZiB0aGUgZGV2aWNlIGlzIG5vdCByZWFkeToKQEAgLTI4MjcsNyArMjgzOSw3IEBACiAJCWlwNl9pbnNfcnQoaWZwLT5ydCk7CiAKIAlhZGRyY29uZl9kYWRfa2ljayhpZnApOwotCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIH0KQEAgLTI4NDMsMTQgKzI4NTUsMTUgQEAKIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOworCisJc3Bpbl9sb2NrKCZpZnAtPmxvY2spOwogCWlmIChpZnAtPnByb2JlcyA9PSAwKSB7CiAJCS8qCiAJCSAqIERBRCB3YXMgc3VjY2Vzc2Z1bAogCQkgKi8KIAogCQlpZnAtPmZsYWdzICY9IH4oSUZBX0ZfVEVOVEFUSVZFfElGQV9GX09QVElNSVNUSUN8SUZBX0ZfREFERkFJTEVEKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKIAkJYWRkcmNvbmZfZGFkX2NvbXBsZXRlZChpZnApOwpAQCAtMjg2MCw3ICsyODczLDcgQEAKIAogCWlmcC0+cHJvYmVzLS07CiAJYWRkcmNvbmZfbW9kX3RpbWVyKGlmcCwgQUNfREFELCBpZnAtPmlkZXYtPm5kX3Bhcm1zLT5yZXRyYW5zX3RpbWUpOwotCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCS8qIHNlbmQgYSBuZWlnaGJvdXIgc29saWNpdGF0aW9uIGZvciBvdXIgYWRkciAqLwpAQCAtMjkwOCwxMiArMjkyMSwxMiBAQAogCiAJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlmb3IgKGlmcCA9IGlkZXYtPmFkZHJfbGlzdDsgaWZwOyBpZnAgPSBpZnAtPmlmX25leHQpIHsKLQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOworCQlzcGluX2xvY2soJmlmcC0+bG9jayk7CiAJCWlmICghKGlmcC0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCQkJY29udGludWU7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCQlhZGRyY29uZl9kYWRfa2ljayhpZnApOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CkBAIC0zMDMwLDE0ICszMDQzLDE0IEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgaW50IGlmNl9wcm9jX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpZjZfcHJvY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpZl9pbmV0NiIsIFNfSVJVR08sICZpZjZfZm9wcykpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZjZfcHJvY19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlmNl9wcm9jX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKICAgICAgICBwcm9jX25ldF9yZW1vdmUobmV0LCAiaWZfaW5ldDYiKTsKIH0KQEAgLTM3NTUsOCArMzc2OCw4IEBACiAJCSApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zbm1wNl9maWxsX3N0YXRzKHU2NCAqc3RhdHMsIHZvaWQgKiptaWIsIGludCBpdGVtcywKLQkJCQkgICAgICBpbnQgYnl0ZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19zbm1wNl9maWxsX3N0YXRzKHU2NCAqc3RhdHMsIHZvaWQgX19wZXJjcHUgKiptaWIsCisJCQkJICAgICAgaW50IGl0ZW1zLCBpbnQgYnl0ZXMpCiB7CiAJaW50IGk7CiAJaW50IHBhZCA9IGJ5dGVzIC0gc2l6ZW9mKHU2NCkgKiBpdGVtczsKQEAgLTM3NzUsMTAgKzM3ODgsMTAgQEAKIHsKIAlzd2l0Y2goYXR0cnR5cGUpIHsKIAljYXNlIElGTEFfSU5FVDZfU1RBVFM6Ci0JCV9fc25tcDZfZmlsbF9zdGF0cyhzdGF0cywgKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2NiwgSVBTVEFUU19NSUJfTUFYLCBieXRlcyk7CisJCV9fc25tcDZfZmlsbF9zdGF0cyhzdGF0cywgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaXB2NiwgSVBTVEFUU19NSUJfTUFYLCBieXRlcyk7CiAJCWJyZWFrOwogCWNhc2UgSUZMQV9JTkVUNl9JQ01QNlNUQVRTOgotCQlfX3NubXA2X2ZpbGxfc3RhdHMoc3RhdHMsICh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2NiwgSUNNUDZfTUlCX01BWCwgYnl0ZXMpOworCQlfX3NubXA2X2ZpbGxfc3RhdHMoc3RhdHMsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2NiwgSUNNUDZfTUlCX01BWCwgYnl0ZXMpOwogCQlicmVhazsKIAl9CiB9CkBAIC00NDE0LDggKzQ0MjcsNyBAQAogCiBzdGF0aWMgdm9pZCBhZGRyY29uZl9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoaWRldi0+ZGV2LCBpZGV2LT5uZF9wYXJtcywgTkVUX0lQVjYsCi0JCQkgICAgICBORVRfSVBWNl9ORUlHSCwgImlwdjYiLAorCW5laWdoX3N5c2N0bF9yZWdpc3RlcihpZGV2LT5kZXYsIGlkZXYtPm5kX3Bhcm1zLCAiaXB2NiIsCiAJCQkgICAgICAmbmRpc2NfaWZpbmZvX3N5c2N0bF9jaGFuZ2UpOwogCV9fYWRkcmNvbmZfc3lzY3RsX3JlZ2lzdGVyKGRldl9uZXQoaWRldi0+ZGV2KSwgaWRldi0+ZGV2LT5uYW1lLAogCQkJCQlpZGV2LCAmaWRldi0+Y25mKTsKQEAgLTQ0MzAsNyArNDQ0Miw3IEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW50IGFkZHJjb25mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBhZGRyY29uZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaXB2Nl9kZXZjb25mICphbGwsICpkZmx0OwpAQCAtNDQ3OSw3ICs0NDkxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhZGRyY29uZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGFkZHJjb25mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJX19hZGRyY29uZl9zeXNjdGxfdW5yZWdpc3RlcihuZXQtPmlwdjYuZGV2Y29uZl9kZmx0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mX2NvcmUuYyBiL25ldC9pcHY2L2FkZHJjb25mX2NvcmUuYwppbmRleCAzZjgyZTk1Li42YjAzODI2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZl9jb3JlLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmZfY29yZS5jCkBAIC03Miw3ICs3Miw3IEBACiAJCQkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0dMT0JBTCkpOwkvKiBhZGRyLXNlbGVjdCAzLjMgKi8KIAl9CiAKLQlyZXR1cm4gKElQVjZfQUREUl9SRVNFUlZFRCB8CisJcmV0dXJuIChJUFY2X0FERFJfVU5JQ0FTVCB8CiAJCUlQVjZfQUREUl9TQ09QRV9UWVBFKElQVjZfQUREUl9TQ09QRV9HTE9CQUwpKTsJLyogYWRkci1zZWxlY3QgMy40ICovCiB9CiBFWFBPUlRfU1lNQk9MKF9faXB2Nl9hZGRyX3R5cGUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMTJlNjlkMy4uMzdkMTRlNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC05NzEsNDEgKzk3MSw0MSBAQAogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB2Nl9pbml0X21pYnMoc3RydWN0IG5ldCAqbmV0KQogewotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwX3N0YXRzX2luNiwKIAkJCSAgc2l6ZW9mIChzdHJ1Y3QgdWRwX21pYikpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYsCiAJCQkgIHNpemVvZiAoc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcGxpdGVfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcHY2X3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2lwX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZtc2dfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wbXNnX21pYjsKIAlyZXR1cm4gMDsKIAogZXJyX2ljbXBtc2dfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaWNtcHY2X3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2X3N0YXRpc3RpY3MpOwogZXJyX2ljbXBfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcyk7CiBlcnJfaXBfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYpOwogZXJyX3VkcGxpdGVfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRzX2luNik7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcHY2X2NsZWFudXBfbWlicyhzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBpcHY2X2NsZWFudXBfbWlicyhzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42KTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdHNfaW42KTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdHNfaW42KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcyk7CiB9CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBpbmV0Nl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGluZXQ2X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaW5ldDZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJdWRwNl9wcm9jX2V4aXQobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggYzJmMzAwYy4uNWFjODkwMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTYxNCw3ICs2MTQsNyBAQAogCSAgICB0eXBlICE9IElDTVBWNl9QS1RfVE9PQklHKQogCQlyZXR1cm47CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVDYpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIGFoLT5zcGksIElQUFJPVE9fQUgsIEFGX0lORVQ2KTsKIAlpZiAoIXgpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYW55Y2FzdC5jIGIvbmV0L2lwdjYvYW55Y2FzdC5jCmluZGV4IGYxYzc0YzhlLi5jNGY2Y2EzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hbnljYXN0LmMKKysrIGIvbmV0L2lwdjYvYW55Y2FzdC5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAkucmVsZWFzZQk9CXNlcV9yZWxlYXNlX25ldCwKIH07CiAKLWludCBhYzZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IGFjNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiYW55Y2FzdDYiLCBTX0lSVUdPLCAmYWM2X3NlcV9mb3BzKSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggNjY4YTQ2Yi4uZWU5YjkzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJICAgIHR5cGUgIT0gSUNNUFY2X1BLVF9UT09CSUcpCiAJCXJldHVybjsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUNik7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCXByaW50ayhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBFU1AvJTA4eC8lcEk2XG4iLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jCmluZGV4IDRiYWMzNjIuLjA3NGYyYzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2V4dGhkcnMuYworKysgYi9uZXQvaXB2Ni9leHRoZHJzLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCQkJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLAogCQkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsCi0JCQkJICAgIDAsIHNrYi0+ZGV2KTsKKwkJCQkgICAgMCk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZmliNl9ydWxlcy5jIGIvbmV0L2lwdjYvZmliNl9ydWxlcy5jCmluZGV4IGI3YWE3YzYuLjU1MTg4MmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ZpYjZfcnVsZXMuYworKysgYi9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCS5mcm9fbmV0CQk9ICZpbml0X25ldCwKIH07CiAKLXN0YXRpYyBpbnQgZmliNl9ydWxlc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgZmliNl9ydWxlc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wczsKIAlpbnQgZXJyID0gLUVOT01FTTsKQEAgLTI5MSw3ICsyOTEsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBmaWI2X3J1bGVzX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZmliNl9ydWxlc19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJZmliX3J1bGVzX3VucmVnaXN0ZXIobmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCA0YWU2NjFiLi5lYjlhYmUyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC02NywxMSArNjcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1ERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpY21wdjZfbWliLCBpY21wdjZfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0woaWNtcHY2X3N0YXRpc3RpY3MpOwotREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2bXNnX21pYiwgaWNtcHY2bXNnX3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKGljbXB2Nm1zZ19zdGF0aXN0aWNzKTsKLQogLyoKICAqCVRoZSBJQ01QIHNvY2tldChzKS4gVGhpcyBpcyB0aGUgbW9zdCBjb252ZW5pZW50IHdheSB0byBmbG93IGNvbnRyb2wKICAqCW91ciBJQ01QIG91dHB1dCBhcyB3ZWxsIGFzIG1haW50YWluIGEgY2xlYW4gaW50ZXJmYWNlIHRocm91Z2hvdXQKQEAgLTExOSw3ICsxMTQsNyBAQAogICovCiB2b2lkIGljbXB2Nl9wYXJhbV9wcm9iKHN0cnVjdCBza19idWZmICpza2IsIHU4IGNvZGUsIGludCBwb3MpCiB7Ci0JaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEFSQU1QUk9CLCBjb2RlLCBwb3MsIHNrYi0+ZGV2KTsKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QQVJBTVBST0IsIGNvZGUsIHBvcyk7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKQEAgLTMwNSw4ICszMDAsNyBAQAogLyoKICAqCVNlbmQgYW4gSUNNUCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIGEgcGFja2V0IGluIGVycm9yCiAgKi8KLXZvaWQgaWNtcHY2X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSwgdTggY29kZSwgX191MzIgaW5mbywKLQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIGljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IE5VTEw7CkBAIC05NTEsNyArOTQ1LDcgQEAKIAl7IH0sCiB9OwogCi1zdHJ1Y3QgY3RsX3RhYmxlICppcHY2X2ljbXBfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RydWN0IGN0bF90YWJsZSAqIF9fbmV0X2luaXQgaXB2Nl9pY21wX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IDBlOTNjYTUuLjJmOTg0NzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTkzLDI5ICs5MywyMCBAQAogCiBzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotc3RhdGljIHN0cnVjdCBmaWI2X3dhbGtlcl90IGZpYjZfd2Fsa2VyX2xpc3QgPSB7Ci0JLnByZXYJPSAmZmliNl93YWxrZXJfbGlzdCwKLQkubmV4dAk9ICZmaWI2X3dhbGtlcl9saXN0LAotfTsKLQotI2RlZmluZSBGT1JfV0FMS0VSUyh3KSBmb3IgKCh3KT1maWI2X3dhbGtlcl9saXN0Lm5leHQ7ICh3KSAhPSAmZmliNl93YWxrZXJfbGlzdDsgKHcpPSh3KS0+bmV4dCkKK3N0YXRpYyBMSVNUX0hFQUQoZmliNl93YWxrZXJzKTsKKyNkZWZpbmUgRk9SX1dBTEtFUlModykgbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZmliNl93YWxrZXJzLCBsaCkKIAogc3RhdGljIGlubGluZSB2b2lkIGZpYjZfd2Fsa2VyX2xpbmsoc3RydWN0IGZpYjZfd2Fsa2VyX3QgKncpCiB7CiAJd3JpdGVfbG9ja19iaCgmZmliNl93YWxrZXJfbG9jayk7Ci0Jdy0+bmV4dCA9IGZpYjZfd2Fsa2VyX2xpc3QubmV4dDsKLQl3LT5wcmV2ID0gJmZpYjZfd2Fsa2VyX2xpc3Q7Ci0Jdy0+bmV4dC0+cHJldiA9IHc7Ci0Jdy0+cHJldi0+bmV4dCA9IHc7CisJbGlzdF9hZGQoJnctPmxoLCAmZmliNl93YWxrZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJmZpYjZfd2Fsa2VyX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl93YWxrZXJfdW5saW5rKHN0cnVjdCBmaWI2X3dhbGtlcl90ICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmZpYjZfd2Fsa2VyX2xvY2spOwotCXctPm5leHQtPnByZXYgPSB3LT5wcmV2OwotCXctPnByZXYtPm5leHQgPSB3LT5uZXh0OwotCXctPnByZXYgPSB3LT5uZXh0ID0gdzsKKwlsaXN0X2RlbCgmdy0+bGgpOwogCXdyaXRlX3VubG9ja19iaCgmZmliNl93YWxrZXJfbG9jayk7CiB9CiBzdGF0aWMgX19pbmxpbmVfXyB1MzIgZmliNl9uZXdfc2VybnVtKHZvaWQpCkBAIC0yMzksNyArMjMwLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgZmliNl90YWJsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGZpYjZfdGFibGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCWZpYjZfbGlua190YWJsZShuZXQsIG5ldC0+aXB2Ni5maWI2X21haW5fdGJsKTsKIAlmaWI2X2xpbmtfdGFibGUobmV0LCBuZXQtPmlwdjYuZmliNl9sb2NhbF90YmwpOwpAQCAtMjYyLDcgKzI1Myw3IEBACiAJcmV0dXJuIChzdHJ1Y3QgZHN0X2VudHJ5ICopIGxvb2t1cChuZXQsIG5ldC0+aXB2Ni5maWI2X21haW5fdGJsLCBmbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBmaWI2X3RhYmxlc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2luaXQgZmliNl90YWJsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJZmliNl9saW5rX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwpOwogfQpAQCAtMzE5LDEyICszMTAsMjYgQEAKIAl3LT5yb290ID0gJnRhYmxlLT50YjZfcm9vdDsKIAogCWlmIChjYi0+YXJnc1s0XSA9PSAwKSB7CisJCXctPmNvdW50ID0gMDsKKwkJdy0+c2tpcCA9IDA7CisKIAkJcmVhZF9sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCQlyZXMgPSBmaWI2X3dhbGsodyk7CiAJCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwotCQlpZiAocmVzID4gMCkKKwkJaWYgKHJlcyA+IDApIHsKIAkJCWNiLT5hcmdzWzRdID0gMTsKKwkJCWNiLT5hcmdzWzVdID0gdy0+cm9vdC0+Zm5fc2VybnVtOworCQl9CiAJfSBlbHNlIHsKKwkJaWYgKGNiLT5hcmdzWzVdICE9IHctPnJvb3QtPmZuX3Nlcm51bSkgeworCQkJLyogQmVnaW4gYXQgdGhlIHJvb3QgaWYgdGhlIHRyZWUgY2hhbmdlZCAqLworCQkJY2ItPmFyZ3NbNV0gPSB3LT5yb290LT5mbl9zZXJudW07CisJCQl3LT5zdGF0ZSA9IEZXU19JTklUOworCQkJdy0+bm9kZSA9IHctPnJvb3Q7CisJCQl3LT5za2lwID0gdy0+Y291bnQ7CisJCX0gZWxzZQorCQkJdy0+c2tpcCA9IDA7CisKIAkJcmVhZF9sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCQlyZXMgPSBmaWI2X3dhbGtfY29udGludWUodyk7CiAJCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwpAQCAtMTI1MCw5ICsxMjU1LDE4IEBACiAJCQl3LT5sZWFmID0gZm4tPmxlYWY7CiAJCWNhc2UgRldTX0M6CiAJCQlpZiAody0+bGVhZiAmJiBmbi0+Zm5fZmxhZ3MmUlROX1JUSU5GTykgewotCQkJCWludCBlcnIgPSB3LT5mdW5jKHcpOworCQkJCWludCBlcnI7CisKKwkJCQlpZiAody0+Y291bnQgPCB3LT5za2lwKSB7CisJCQkJCXctPmNvdW50Kys7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWVyciA9IHctPmZ1bmModyk7CiAJCQkJaWYgKGVycikKIAkJCQkJcmV0dXJuIGVycjsKKworCQkJCXctPmNvdW50Kys7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQl3LT5zdGF0ZSA9IEZXU19VOwpAQCAtMTM0Niw2ICsxMzYwLDggQEAKIAljLncucm9vdCA9IHJvb3Q7CiAJYy53LmZ1bmMgPSBmaWI2X2NsZWFuX25vZGU7CiAJYy53LnBydW5lID0gcHJ1bmU7CisJYy53LmNvdW50ID0gMDsKKwljLncuc2tpcCA9IDA7CiAJYy5mdW5jID0gZnVuYzsKIAljLmFyZyA9IGFyZzsKIAljLm5ldCA9IG5ldDsKQEAgLTE0NjksNyArMTQ4NSw3IEBACiAJZmliNl9ydW5fZ2MoMCwgKHN0cnVjdCBuZXQgKilhcmcpOwogfQogCi1zdGF0aWMgaW50IGZpYjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGZpYjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXNldHVwX3RpbWVyKCZuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgZmliNl9nY190aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpbmV0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jIGIvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCmluZGV4IDZlN2JmZmEuLmU0MWViYTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYworKysgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXdyaXRlX3VubG9jaygmaXA2X2ZsX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBpcDZfZmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZfZmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0KQogewogCWludCBpOwogCkBAIC03MzUsNyArNzM1LDcgQEAKIAkucmVsZWFzZQk9CXNlcV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBpbnQgaXA2X2Zsb3dsYWJlbF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwNl9mbG93bGFiZWxfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwNl9mbG93bGFiZWwiLAogCQkJCSAgU19JUlVHTywgJmlwNmZsX3NlcV9mb3BzKSkKQEAgLTc0Myw3ICs3NDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcDZfZmxvd2xhYmVsX3Byb2NfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNl9mbG93bGFiZWxfcHJvY19maW5pKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXA2X2Zsb3dsYWJlbCIpOwogfQpAQCAtNzU0LDExICs3NTQsMTAgQEAKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcDZfZmxvd2xhYmVsX3Byb2NfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcmV0dXJuIDsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXA2X2Zsb3dsYWJlbF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNl9mbG93bGFiZWxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCWlwNl9mbF9wdXJnZShuZXQpOwogCWlwNl9mbG93bGFiZWxfcHJvY19maW5pKG5ldCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDIzN2UyZGIuLmUyOGY5MjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC0yMTYsOCArMjE2LDcgQEAKIAkJCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwKIAkJCQkJCSBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpOwogCQkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BBUkFNUFJPQiwKLQkJCQkJICAgIElDTVBWNl9VTktfTkVYVEhEUiwgbmhvZmYsCi0JCQkJCSAgICBza2ItPmRldik7CisJCQkJCSAgICBJQ01QVjZfVU5LX05FWFRIRFIsIG5ob2ZmKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggZWI2ZDA5Ny4uZGFiZjEwOGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJJUHY2OiBzZW5kaW5nIHBrdF90b29fYmlnIHRvIHNlbGZcbiIpOwogCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTQwMiw2ICs0MDIsNyBAQAogCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRzdC0+ZGV2KTsKKwl1MzIgbXR1OwogCiAJaWYgKG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZyA9PSAwKQogCQlnb3RvIGVycm9yOwpAQCAtNDQxLDggKzQ0Miw3IEBACiAJaWYgKGhkci0+aG9wX2xpbWl0IDw9IDEpIHsKIAkJLyogRm9yY2UgT1VUUFVUIGRldmljZSB1c2VkIGFzIHNvdXJjZSBhZGRyZXNzICovCiAJCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAotCQkJICAgIDAsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwKIAkJCQkgaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIApAQCAtNTA0LDE1ICs1MDQsMTkgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCWlmIChhZGRydHlwZSAmIElQVjZfQUREUl9MSU5LTE9DQUwpIHsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwKLQkJCQlJQ01QVjZfTk9UX05FSUdIQk9VUiwgMCwgc2tiLT5kZXYpOworCQkJCSAgICBJQ01QVjZfTk9UX05FSUdIQk9VUiwgMCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCi0JaWYgKHNrYi0+bGVuID4gZHN0X210dShkc3QpKSB7CisJbXR1ID0gZHN0X210dShkc3QpOworCWlmIChtdHUgPCBJUFY2X01JTl9NVFUpCisJCW10dSA9IElQVjZfTUlOX01UVTsKKworCWlmIChza2ItPmxlbiA+IG10dSkgewogCQkvKiBBZ2FpbiwgZm9yY2UgT1VUUFVUIGRldmljZSB1c2VkIGFzIHNvdXJjZSBhZGRyZXNzICovCiAJCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIGRzdF9tdHUoZHN0KSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwKIAkJCQkgaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOVE9PQklHRVJST1JTKTsKIAkJSVA2X0lOQ19TVEFUU19CSChuZXQsCkBAIC02MjIsMTIgKzYyNiwxMSBAQAogCW10dSA9IGlwNl9za2JfZHN0X210dShza2IpOwogCiAJLyogV2UgbXVzdCBub3QgZnJhZ21lbnQgaWYgdGhlIHNvY2tldCBpcyBzZXQgdG8gZm9yY2UgTVRVIGRpc2NvdmVyeQotCSAqIG9yIGlmIHRoZSBza2IgaXQgbm90IGdlbmVyYXRlZCBieSBhIGxvY2FsIHNvY2tldC4gIChUaGlzIGxhc3QKLQkgKiBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50LCBidXQgaXQncyBmcmVlLikKKwkgKiBvciBpZiB0aGUgc2tiIGl0IG5vdCBnZW5lcmF0ZWQgYnkgYSBsb2NhbCBzb2NrZXQuCiAJICovCiAJaWYgKCFza2ItPmxvY2FsX2RmKSB7CiAJCXNrYi0+ZGV2ID0gc2tiX2RzdChza2IpLT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksCiAJCQkgICAgICBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCQlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBkNDUzZDA3Yi4uMTM4OTgwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNzQsNyArNzQsNiBAQAogCQkgICAgIChhZGRyKS0+czZfYWRkcjMyWzJdIF4gKGFkZHIpLT5zNl9hZGRyMzJbM10pICYgXAogCQkgICAgKEhBU0hfU0laRSAtIDEpKQogCi1zdGF0aWMgdm9pZCBpcDZfZmJfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC02MjMsNyArNjIyLDcgQEAKIAkJaWYgKHJ0ICYmIHJ0LT5ydDZpX2RldikKIAkJCXNrYjItPmRldiA9IHJ0LT5ydDZpX2RldjsKIAotCQlpY21wdjZfc2VuZChza2IyLCByZWxfdHlwZSwgcmVsX2NvZGUsIHJlbF9pbmZvLCBza2IyLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IyLCByZWxfdHlwZSwgcmVsX2NvZGUsIHJlbF9pbmZvKTsKIAogCQlpZiAocnQpCiAJCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKQEAgLTEwMTUsNyArMTAxNCw3IEBACiAJCXRlbCA9IChzdHJ1Y3QgaXB2Nl90bHZfdG5sX2VuY19saW0gKikmc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbb2Zmc2V0XTsKIAkJaWYgKHRlbC0+ZW5jYXBfbGltaXQgPT0gMCkgewogCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEFSQU1QUk9CLAotCQkJCSAgICBJQ01QVjZfSERSX0ZJRUxELCBvZmZzZXQgKyAyLCBza2ItPmRldik7CisJCQkJICAgIElDTVBWNl9IRFJfRklFTEQsIG9mZnNldCArIDIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWVuY2FwX2xpbWl0ID0gdGVsLT5lbmNhcF9saW1pdCAtIDE7CkBAIC0xMDM0LDcgKzEwMzMsNyBAQAogCWVyciA9IGlwNl90bmxfeG1pdDIoc2tiLCBkZXYsIGRzZmllbGQsICZmbCwgZW5jYXBfbGltaXQsICZtdHUpOwogCWlmIChlcnIgIT0gMCkgewogCQlpZiAoZXJyID09IC1FTVNHU0laRSkKLQkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgZGV2KTsKKwkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEzNjQsNyArMTM2Myw3IEBACiAgKiBSZXR1cm46IDAKICAqKi8KIAotc3RhdGljIHZvaWQgaXA2X2ZiX3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19uZXRfaW5pdCBpcDZfZmJfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKQEAgLTEzODgsNyArMTM4Nyw3IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKLXN0YXRpYyB2b2lkIGlwNl90bmxfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2bikKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2X3RubF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwNl90bmxfbmV0ICppcDZuKQogewogCWludCBoOwogCXN0cnVjdCBpcDZfdG5sICp0OwpAQCAtMTQwNyw3ICsxNDA2LDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZsaXN0KTsKIH0KIAotc3RhdGljIGludCBpcDZfdG5sX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfdG5sX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKIAlpbnQgZXJyOwpAQCAtMTQzNiw3ICsxNDM1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpcDZfdG5sX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2X3RubF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGlwNl90bmxfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CiAKQEAgLTE0NjIsMjcgKzE0NjEsMjkgQEAKIHsKIAlpbnQgIGVycjsKIAotCWlmICh4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJmlwNGlwNl9oYW5kbGVyLCBBRl9JTkVUKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwNl90dW5uZWwgaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaXA0aXA2XG4iKTsKLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHhmcm02X3R1bm5lbF9yZWdpc3RlcigmaXA2aXA2X2hhbmRsZXIsIEFGX0lORVQ2KSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwNl90dW5uZWwgaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaXA2aXA2XG4iKTsKLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byB1bnJlZ19pcDRpcDY7Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXA2X3RubF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfcGVybmV0OworCQlnb3RvIG91dF9wZXJuZXQ7CisKKwllcnIgPSB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJmlwNGlwNl9oYW5kbGVyLCBBRl9JTkVUKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImlwNl90dW5uZWwgaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaXA0aXA2XG4iKTsKKwkJZ290byBvdXRfaXA0aXA2OworCX0KKworCWVyciA9IHhmcm02X3R1bm5lbF9yZWdpc3RlcigmaXA2aXA2X2hhbmRsZXIsIEFGX0lORVQ2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImlwNl90dW5uZWwgaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaXA2aXA2XG4iKTsKKwkJZ290byBvdXRfaXA2aXA2OworCX0KKwogCXJldHVybiAwOwotZXJyX3Blcm5ldDoKLQl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmaXA2aXA2X2hhbmRsZXIsIEFGX0lORVQ2KTsKLXVucmVnX2lwNGlwNjoKKworb3V0X2lwNmlwNjoKIAl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmaXA0aXA2X2hhbmRsZXIsIEFGX0lORVQpOwotb3V0Ogorb3V0X2lwNGlwNjoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwNl90bmxfbmV0X29wcyk7CitvdXRfcGVybmV0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCAwMDJlNmVlLi44NWNjY2Q2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC01Myw2ICs1Myw3IEBACiBzdGF0aWMgdm9pZCBpcGNvbXA2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKIAkJCQl1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlfX2JlMzIgc3BpOwogCXN0cnVjdCBpcHY2aGRyICppcGggPSAoc3RydWN0IGlwdjZoZHIqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXBfY29tcF9oZHIgKmlwY29tcGggPQpAQCAtNjMsNyArNjQsNyBAQAogCQlyZXR1cm47CiAKIAlzcGkgPSBodG9ubChudG9ocyhpcGNvbXBoLT5jcGkpKTsKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAoJmluaXRfbmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgc3BpLCBJUFBST1RPX0NPTVAsIEFGX0lORVQ2KTsKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCkBAIC03NCwxNCArNzUsMTUgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICppcGNvbXA2X3R1bm5lbF9jcmVhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0ID0gTlVMTDsKIAotCXQgPSB4ZnJtX3N0YXRlX2FsbG9jKCZpbml0X25ldCk7CisJdCA9IHhmcm1fc3RhdGVfYWxsb2MobmV0KTsKIAlpZiAoIXQpCiAJCWdvdG8gb3V0OwogCiAJdC0+aWQucHJvdG8gPSBJUFBST1RPX0lQVjY7Ci0JdC0+aWQuc3BpID0geGZybTZfdHVubmVsX2FsbG9jX3NwaSgoeGZybV9hZGRyZXNzX3QgKikmeC0+cHJvcHMuc2FkZHIpOworCXQtPmlkLnNwaSA9IHhmcm02X3R1bm5lbF9hbGxvY19zcGkobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmeC0+cHJvcHMuc2FkZHIpOwogCWlmICghdC0+aWQuc3BpKQogCQlnb3RvIGVycm9yOwogCkBAIC05MCw2ICs5Miw3IEBACiAJdC0+cHJvcHMuZmFtaWx5ID0gQUZfSU5FVDY7CiAJdC0+cHJvcHMubW9kZSA9IHgtPnByb3BzLm1vZGU7CiAJbWVtY3B5KHQtPnByb3BzLnNhZGRyLmE2LCB4LT5wcm9wcy5zYWRkci5hNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCW1lbWNweSgmdC0+bWFyaywgJngtPm1hcmssIHNpemVvZih0LT5tYXJrKSk7CiAKIAlpZiAoeGZybV9pbml0X3N0YXRlKHQpKQogCQlnb3RvIGVycm9yOwpAQCAtMTA4LDEzICsxMTEsMTUgQEAKIAogc3RhdGljIGludCBpcGNvbXA2X3R1bm5lbF9hdHRhY2goc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0ID0gTlVMTDsKIAlfX2JlMzIgc3BpOworCXUzMiBtYXJrID0geC0+bWFyay5tICYgeC0+bWFyay52OwogCi0Jc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAoKHhmcm1fYWRkcmVzc190ICopJngtPnByb3BzLnNhZGRyKTsKKwlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5wcm9wcy5zYWRkcik7CiAJaWYgKHNwaSkKLQkJdCA9IHhmcm1fc3RhdGVfbG9va3VwKCZpbml0X25ldCwgKHhmcm1fYWRkcmVzc190ICopJngtPmlkLmRhZGRyLAorCQl0ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmeC0+aWQuZGFkZHIsCiAJCQkJCSAgICAgIHNwaSwgSVBQUk9UT19JUFY2LCBBRl9JTkVUNik7CiAJaWYgKCF0KSB7CiAJCXQgPSBpcGNvbXA2X3R1bm5lbF9jcmVhdGUoeCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCAxZjljNDQ0Li5iY2Q5NzE5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC03OTMsMTAgKzc5MywxMCBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmaW0tPm1jYV9sb2NrKTsKIAotCXdyaXRlX2xvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fbG9ja19iaCgmaWRldi0+bWNfbG9jayk7CiAJcG1jLT5uZXh0ID0gaWRldi0+bWNfdG9tYjsKIAlpZGV2LT5tY190b21iID0gcG1jOwotCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBtbGRfZGVsX2RlbHJlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EpCkBAIC04MDQsNyArODA0LDcgQEAKIAlzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsICpwbWNfcHJldjsKIAlzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZiwgKnBzZl9uZXh0OwogCi0Jd3JpdGVfbG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKIAlwbWNfcHJldiA9IE5VTEw7CiAJZm9yIChwbWM9aWRldi0+bWNfdG9tYjsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CiAJCWlmIChpcHY2X2FkZHJfZXF1YWwoJnBtYy0+bWNhX2FkZHIsIHBtY2EpKQpAQCAtODE3LDcgKzgxNyw4IEBACiAJCWVsc2UKIAkJCWlkZXYtPm1jX3RvbWIgPSBwbWMtPm5leHQ7CiAJfQotCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCiAJaWYgKHBtYykgewogCQlmb3IgKHBzZj1wbWMtPm1jYV90b21iOyBwc2Y7IHBzZj1wc2ZfbmV4dCkgewogCQkJcHNmX25leHQgPSBwc2YtPnNmX25leHQ7CkBAIC04MzIsMTAgKzgzMywxMCBAQAogewogCXN0cnVjdCBpZm1jYWRkcjYgKnBtYywgKm5leHRwbWM7CiAKLQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmlkZXYtPm1jX2xvY2spOwogCXBtYyA9IGlkZXYtPm1jX3RvbWI7CiAJaWRldi0+bWNfdG9tYiA9IE5VTEw7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaWRldi0+bWNfbG9jayk7CiAKIAlmb3IgKDsgcG1jOyBwbWMgPSBuZXh0cG1jKSB7CiAJCW5leHRwbWMgPSBwbWMtPm5leHQ7CkBAIC0xNjk2LDcgKzE2OTcsNyBAQAogCWludCB0eXBlLCBkdHlwZTsKIAogCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7Ci0Jd3JpdGVfbG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl9sb2NrKCZpZGV2LT5tY19sb2NrKTsKIAogCS8qIGRlbGV0ZWQgTUNBJ3MgKi8KIAlwbWNfcHJldiA9IE5VTEw7CkBAIC0xNzMwLDcgKzE3MzEsNyBAQAogCQl9IGVsc2UKIAkJCXBtY19wcmV2ID0gcG1jOwogCX0KLQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fdW5sb2NrKCZpZGV2LT5tY19sb2NrKTsKIAogCS8qIGNoYW5nZSByZWNzICovCiAJZm9yIChwbWM9aWRldi0+bWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CkBAIC0yMzExLDcgKzIzMTIsNyBAQAogdm9pZCBpcHY2X21jX2luaXRfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7Ci0Jcndsb2NrX2luaXQoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpZGV2LT5tY19sb2NrKTsKIAlpZGV2LT5tY19ncV9ydW5uaW5nID0gMDsKIAlzZXR1cF90aW1lcigmaWRldi0+bWNfZ3FfdGltZXIsIG1sZF9ncV90aW1lcl9leHBpcmUsCiAJCQkodW5zaWduZWQgbG9uZylpZGV2KTsKQEAgLTI2NDYsNyArMjY0Nyw3IEBACiAJLnJlbGVhc2UJPQlzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgaW50IGlnbXA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaWdtcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yNjY2LDIzICsyNjY3LDIyIEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlnbXA2X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlnbXA2X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgIm1jZmlsdGVyNiIpOwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpZ21wNiIpOwogfQogI2Vsc2UKLXN0YXRpYyBpbnQgaWdtcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgaW50IGlnbXA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZCBpZ21wNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGlubGluZSB2b2lkIGlnbXA2X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaWdtcDZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlnbXA2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yNzA4LDcgKzI3MDgsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBpZ21wNl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlnbXA2X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3kobmV0LT5pcHY2LmlnbXBfc2spOwogCWlnbXA2X3Byb2NfZXhpdChuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWlwNi5jIGIvbmV0L2lwdjYvbWlwNi5jCmluZGV4IGY3OTdlOGMuLjI3OTRiNjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21pcDYuYworKysgYi9uZXQvaXB2Ni9taXA2LmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG1pcDZfcGFyYW1fcHJvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBjb2RlLCBpbnQgcG9zKQogewotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BBUkFNUFJPQiwgY29kZSwgcG9zLCBza2ItPmRldik7CisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEFSQU1QUk9CLCBjb2RlLCBwb3MpOwogfQogCiBzdGF0aWMgaW50IG1pcDZfbWhfbGVuKGludCB0eXBlKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggYzQ1ODUyNzkuLjhiY2M0YjdkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTE3NzIsNyArMTc3Miw3IEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW50IG5kaXNjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBuZGlzY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wOwogCXN0cnVjdCBzb2NrICpzazsKQEAgLTE3OTcsNyArMTc5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5kaXNjX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmRpc2NfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjYubmRpc2Nfc2spOwogfQpAQCAtMTgyMCw4ICsxODIwLDcgQEAKIAluZWlnaF90YWJsZV9pbml0KCZuZF90YmwpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCWVyciA9IG5laWdoX3N5c2N0bF9yZWdpc3RlcihOVUxMLCAmbmRfdGJsLnBhcm1zLCBORVRfSVBWNiwKLQkJCQkgICAgTkVUX0lQVjZfTkVJR0gsICJpcHY2IiwKKwllcnIgPSBuZWlnaF9zeXNjdGxfcmVnaXN0ZXIoTlVMTCwgJm5kX3RibC5wYXJtcywgImlwdjYiLAogCQkJCSAgICAmbmRpc2NfaWZpbmZvX3N5c2N0bF9jaGFuZ2UpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcGVybmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggOGE3ZTBmNS4uOTIxMGUzMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CisjaW5jbHVkZSAiLi4vLi4vbmV0ZmlsdGVyL3h0X3JlcGxkYXRhLmgiCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIk5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+Iik7CkBAIC02Nyw2ICs2OCwxMiBAQAogI2RlZmluZSBpbmxpbmUKICNlbmRpZgogCit2b2lkICppcDZ0X2FsbG9jX2luaXRpYWxfdGFibGUoY29uc3Qgc3RydWN0IHh0X3RhYmxlICppbmZvKQoreworCXJldHVybiB4dF9hbGxvY19pbml0aWFsX3RhYmxlKGlwNnQsIElQNlQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXA2dF9hbGxvY19pbml0aWFsX3RhYmxlKTsKKwogLyoKICAgIFdlIGtlZXAgYSBzZXQgb2YgcnVsZXMgZm9yIGVhY2ggQ1BVLCBzbyB3ZSBjYW4gYXZvaWQgd3JpdGUtbG9ja2luZwogICAgdGhlbSBpbiB0aGUgc29mdGlycSB3aGVuIHVwZGF0aW5nIHRoZSBjb3VudGVycyBhbmQgdGhlcmVmb3JlCkBAIC0yMDEsNyArMjA4LDcgQEAKIAogLyogUGVyZm9ybWFuY2UgY3JpdGljYWwgLSBjYWxsZWQgZm9yIGV2ZXJ5IHBhY2tldCAqLwogc3RhdGljIGlubGluZSBib29sCi1kb19tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2RvX21hdGNoKGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKIAlwYXItPm1hdGNoICAgICA9IG0tPnUua2VybmVsLm1hdGNoOwpAQCAtMjE1LDcgKzIyMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwNnRfZW50cnkgKgotZ2V0X2VudHJ5KHZvaWQgKmJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCitnZXRfZW50cnkoY29uc3Qgdm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBpcDZ0X2VudHJ5ICopKGJhc2UgKyBvZmZzZXQpOwogfQpAQCAtMjI5LDYgKzIzNiwxMiBAQAogCXJldHVybiBtZW1jbXAoaXB2NiwgJnVuY29uZCwgc2l6ZW9mKHVuY29uZCkpID09IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICoKK2lwNnRfZ2V0X3RhcmdldF9jKGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplKQoreworCXJldHVybiBpcDZ0X2dldF90YXJnZXQoKHN0cnVjdCBpcDZ0X2VudHJ5ICopZSk7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRV9NT0RVTEUpCiAvKiBUaGlzIGNyaWVzIGZvciB1bmlmaWNhdGlvbiEgKi8KQEAgLTI2NCwxMSArMjc3LDExIEBACiAKIC8qIE1pbGRseSBwZXJmIGNyaXRpY2FsIChvbmx5IGlmIHBhY2tldCB0cmFjaW5nIGlzIG9uKSAqLwogc3RhdGljIGlubGluZSBpbnQKLWdldF9jaGFpbm5hbWVfcnVsZW51bShzdHJ1Y3QgaXA2dF9lbnRyeSAqcywgc3RydWN0IGlwNnRfZW50cnkgKmUsCitnZXRfY2hhaW5uYW1lX3J1bGVudW0oY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKnMsIGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplLAogCQkgICAgICBjb25zdCBjaGFyICpob29rbmFtZSwgY29uc3QgY2hhciAqKmNoYWlubmFtZSwKIAkJICAgICAgY29uc3QgY2hhciAqKmNvbW1lbnQsIHVuc2lnbmVkIGludCAqcnVsZW51bSkKIHsKLQlzdHJ1Y3QgaXA2dF9zdGFuZGFyZF90YXJnZXQgKnQgPSAodm9pZCAqKWlwNnRfZ2V0X3RhcmdldChzKTsKKwljb25zdCBzdHJ1Y3QgaXA2dF9zdGFuZGFyZF90YXJnZXQgKnQgPSAodm9pZCAqKWlwNnRfZ2V0X3RhcmdldF9jKHMpOwogCiAJaWYgKHN0cmNtcCh0LT50YXJnZXQudS5rZXJuZWwudGFyZ2V0LT5uYW1lLCBJUDZUX0VSUk9SX1RBUkdFVCkgPT0gMCkgewogCQkvKiBIZWFkIG9mIHVzZXIgY2hhaW46IEVSUk9SIHRhcmdldCB3aXRoIGNoYWlubmFtZSAqLwpAQCAtMjk0LDE3ICszMDcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHJhY2VfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgdm9pZCB0cmFjZV9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCSBjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JCQkgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUsCi0JCQkgc3RydWN0IGlwNnRfZW50cnkgKmUpCisJCQkgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUsCisJCQkgY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUpCiB7Ci0Jdm9pZCAqdGFibGVfYmFzZTsKKwljb25zdCB2b2lkICp0YWJsZV9iYXNlOwogCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICpyb290OwogCWNvbnN0IGNoYXIgKmhvb2tuYW1lLCAqY2hhaW5uYW1lLCAqY29tbWVudDsKKwljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgcnVsZW51bSA9IDA7CiAKIAl0YWJsZV9iYXNlID0gcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMzEzLDEwICszMjcsMTAgQEAKIAlob29rbmFtZSA9IGNoYWlubmFtZSA9IGhvb2tuYW1lc1tob29rXTsKIAljb21tZW50ID0gY29tbWVudHNbTkZfSVA2X1RSQUNFX0NPTU1FTlRfUlVMRV07CiAKLQlJUDZUX0VOVFJZX0lURVJBVEUocm9vdCwKLQkJCSAgIHByaXZhdGUtPnNpemUgLSBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdLAotCQkJICAgZ2V0X2NoYWlubmFtZV9ydWxlbnVtLAotCQkJICAgZSwgaG9va25hbWUsICZjaGFpbm5hbWUsICZjb21tZW50LCAmcnVsZW51bSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCByb290LCBwcml2YXRlLT5zaXplIC0gcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSkKKwkJaWYgKGdldF9jaGFpbm5hbWVfcnVsZW51bShpdGVyLCBlLCBob29rbmFtZSwKKwkJICAgICZjaGFpbm5hbWUsICZjb21tZW50LCAmcnVsZW51bSkgIT0gMCkKKwkJCWJyZWFrOwogCiAJbmZfbG9nX3BhY2tldChBRl9JTkVUNiwgaG9vaywgc2tiLCBpbiwgb3V0LCAmdHJhY2VfbG9naW5mbywKIAkJICAgICAgIlRSQUNFOiAlczolczolczoldSAiLApAQCAtMzQ1LDkgKzM1OSw5IEBACiAJLyogSW5pdGlhbGl6aW5nIHZlcmRpY3QgdG8gTkZfRFJPUCBrZWVwcyBnY2MgaGFwcHkuICovCiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwogCWNvbnN0IGNoYXIgKmluZGV2LCAqb3V0ZGV2OwotCXZvaWQgKnRhYmxlX2Jhc2U7CisJY29uc3Qgdm9pZCAqdGFibGVfYmFzZTsKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgKmJhY2s7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJc3RydWN0IHh0X21hdGNoX3BhcmFtIG10cGFyOwogCXN0cnVjdCB4dF90YXJnZXRfcGFyYW0gdGdwYXI7CiAKQEAgLTM3OCwyMiArMzkyLDI3IEBACiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCiAJZG8gewotCQlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CisJCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKKwkJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkJSVBfTkZfQVNTRVJUKGUpOwogCQlJUF9ORl9BU1NFUlQoYmFjayk7CiAJCWlmICghaXA2X3BhY2tldF9tYXRjaChza2IsIGluZGV2LCBvdXRkZXYsICZlLT5pcHY2LAotCQkgICAgJm10cGFyLnRob2ZmLCAmbXRwYXIuZnJhZ29mZiwgJmhvdGRyb3ApIHx8Ci0JCSAgICBJUDZUX01BVENIX0lURVJBVEUoZSwgZG9fbWF0Y2gsIHNrYiwgJm10cGFyKSAhPSAwKSB7CisJCSAgICAmbXRwYXIudGhvZmYsICZtdHBhci5mcmFnb2ZmLCAmaG90ZHJvcCkpIHsKKyBub19tYXRjaDoKIAkJCWUgPSBpcDZ0X25leHRfZW50cnkoZSk7CiAJCQljb250aW51ZTsKIAkJfQogCisJCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkKKwkJCWlmIChkb19tYXRjaChlbWF0Y2gsIHNrYiwgJm10cGFyKSAhPSAwKQorCQkJCWdvdG8gbm9fbWF0Y2g7CisKIAkJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsCiAJCQkgICAgbnRvaHMoaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4pICsKIAkJCSAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCAxKTsKIAotCQl0ID0gaXA2dF9nZXRfdGFyZ2V0KGUpOworCQl0ID0gaXA2dF9nZXRfdGFyZ2V0X2MoZSk7CiAJCUlQX05GX0FTU0VSVCh0LT51Lmtlcm5lbC50YXJnZXQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgfHwgXApAQCAtNDc1LDcgKzQ5NCw3IEBACiAvKiBGaWd1cmVzIG91dCBmcm9tIHdoYXQgaG9vayBlYWNoIHJ1bGUgY2FuIGJlIGNhbGxlZDogcmV0dXJucyAwIGlmCiAgICB0aGVyZSBhcmUgbG9vcHMuICBQdXRzIGhvb2sgYml0bWFzayBpbiBjb21lZnJvbS4gKi8KIHN0YXRpYyBpbnQKLW1hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKK21hcmtfc291cmNlX2NoYWlucyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKIAkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLCB2b2lkICplbnRyeTApCiB7CiAJdW5zaWduZWQgaW50IGhvb2s7CkBAIC00OTMsOCArNTEyLDggQEAKIAkJZS0+Y291bnRlcnMucGNudCA9IHBvczsKIAogCQlmb3IgKDs7KSB7Ci0JCQlzdHJ1Y3QgaXA2dF9zdGFuZGFyZF90YXJnZXQgKnQKLQkJCQk9ICh2b2lkICopaXA2dF9nZXRfdGFyZ2V0KGUpOworCQkJY29uc3Qgc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICp0CisJCQkJPSAodm9pZCAqKWlwNnRfZ2V0X3RhcmdldF9jKGUpOwogCQkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCiAJCQlpZiAoZS0+Y29tZWZyb20gJiAoMSA8PCBORl9JTkVUX05VTUhPT0tTKSkgewpAQCAtNTg0LDI3ICs2MDMsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAotY2xlYW51cF9tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgdW5zaWduZWQgaW50ICppKQorc3RhdGljIHZvaWQgY2xlYW51cF9tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gcGFyOwogCi0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOwotCisJcGFyLm5ldCAgICAgICA9IG5ldDsKIAlwYXIubWF0Y2ggICAgID0gbS0+dS5rZXJuZWwubWF0Y2g7CiAJcGFyLm1hdGNoaW5mbyA9IG0tPmRhdGE7CiAJcGFyLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNjsKIAlpZiAocGFyLm1hdGNoLT5kZXN0cm95ICE9IE5VTEwpCiAJCXBhci5tYXRjaC0+ZGVzdHJveSgmcGFyKTsKIAltb2R1bGVfcHV0KHBhci5tYXRjaC0+bWUpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1jaGVja19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK2NoZWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKKwljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAKIAlpZiAoIWlwNl9jaGVja2VudHJ5KCZlLT5pcHY2KSkgewogCQlkdXByaW50ZigiaXBfdGFibGVzOiBpcCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKQEAgLTYxNSwxNSArNjMwLDE0IEBACiAJICAgIGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CisJdCA9IGlwNnRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgdC0+dS50YXJnZXRfc2l6ZSA+IGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX21hdGNoKHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhciwKLQkJICAgICAgIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyBpbnQgY2hlY2tfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXB2NiA9IHBhci0+ZW50cnlpbmZvOwogCWludCByZXQ7CkBAIC02MzgsMTMgKzY1MiwxMSBAQAogCQkJIHBhci5tYXRjaC0+bmFtZSk7CiAJCXJldHVybiByZXQ7CiAJfQotCSsrKmk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWZpbmRfY2hlY2tfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLAotCQkgdW5zaWduZWQgaW50ICppKQorZmluZF9jaGVja19tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAlpbnQgcmV0OwpAQCAtNjU4LDcgKzY3MCw3IEBACiAJfQogCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CiAKLQlyZXQgPSBjaGVja19tYXRjaChtLCBwYXIsIGkpOworCXJldCA9IGNoZWNrX21hdGNoKG0sIHBhcik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTY2OCwxMCArNjgwLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjaGVja190YXJnZXQoc3RydWN0IGlwNnRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IGNoZWNrX3RhcmdldChzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKIAlzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gcGFyID0geworCQkubmV0ICAgICAgID0gbmV0LAogCQkudGFibGUgICAgID0gbmFtZSwKIAkJLmVudHJ5aW5mbyA9IGUsCiAJCS50YXJnZXQgICAgPSB0LT51Lmtlcm5lbC50YXJnZXQsCkBAIC02OTMsMjcgKzcwNiwzMiBAQAogfQogCiBzdGF0aWMgaW50Ci1maW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgajsKIAlzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gbXRwYXI7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAlyZXQgPSBjaGVja19lbnRyeShlLCBuYW1lKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJaiA9IDA7CisJbXRwYXIubmV0CT0gbmV0OwogCW10cGFyLnRhYmxlICAgICA9IG5hbWU7CiAJbXRwYXIuZW50cnlpbmZvID0gJmUtPmlwdjY7CiAJbXRwYXIuaG9va19tYXNrID0gZS0+Y29tZWZyb207CiAJbXRwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY2OwotCXJldCA9IElQNlRfTUFUQ0hfSVRFUkFURShlLCBmaW5kX2NoZWNrX21hdGNoLCAmbXRwYXIsICZqKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gY2xlYW51cF9tYXRjaGVzOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX21hdGNoKGVtYXRjaCwgJm10cGFyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJCSsrajsKKwl9CiAKIAl0ID0gaXA2dF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHh0X2ZpbmRfdGFyZ2V0KEFGX0lORVQ2LApAQCAtNzI3LDI3ICs3NDUsMjkgQEAKIAl9CiAJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OwogCi0JcmV0ID0gY2hlY2tfdGFyZ2V0KGUsIG5hbWUpOworCXJldCA9IGNoZWNrX3RhcmdldChlLCBuZXQsIG5hbWUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogIGVycjoKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogIGNsZWFudXBfbWF0Y2hlczoKLQlJUDZUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgJmopOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkgeworCQlpZiAoai0tID09IDApCisJCQlicmVhazsKKwkJY2xlYW51cF9tYXRjaChlbWF0Y2gsIG5ldCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNrX3VuZGVyZmxvdyhzdHJ1Y3QgaXA2dF9lbnRyeSAqZSkKK3N0YXRpYyBib29sIGNoZWNrX3VuZGVyZmxvdyhjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSkKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAJdW5zaWduZWQgaW50IHZlcmRpY3Q7CiAKIAlpZiAoIXVuY29uZGl0aW9uYWwoJmUtPmlwdjYpKQogCQlyZXR1cm4gZmFsc2U7Ci0JdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKKwl0ID0gaXA2dF9nZXRfdGFyZ2V0X2MoZSk7CiAJaWYgKHN0cmNtcCh0LT51LnVzZXIubmFtZSwgWFRfU1RBTkRBUkRfVEFSR0VUKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAJdmVyZGljdCA9ICgoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICopdCktPnZlcmRpY3Q7CkBAIC03NTgsMTIgKzc3OCwxMSBAQAogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwNnRfZW50cnkgKmUsCiAJCQkgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKmJhc2UsCi0JCQkgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAotCQkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAotCQkJICAgdW5zaWduZWQgaW50ICppKQorCQkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzKQogewogCXVuc2lnbmVkIGludCBoOwogCkBAIC04MDAsNTAgKzgxOSw0MSBAQAogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCWUtPmNvdW50ZXJzID0gKChzdHJ1Y3QgeHRfY291bnRlcnMpIHsgMCwgMCB9KTsKIAllLT5jb21lZnJvbSA9IDA7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNsZWFudXBfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyB2b2lkIGNsZWFudXBfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHBhcjsKIAlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNsZWFudXBfbWF0Y2gsIE5VTEwpOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkKKwkJY2xlYW51cF9tYXRjaChlbWF0Y2gsIG5ldCk7CiAJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKIAorCXBhci5uZXQgICAgICA9IG5ldDsKIAlwYXIudGFyZ2V0ICAgPSB0LT51Lmtlcm5lbC50YXJnZXQ7CiAJcGFyLnRhcmdpbmZvID0gdC0+ZGF0YTsKIAlwYXIuZmFtaWx5ICAgPSBORlBST1RPX0lQVjY7CiAJaWYgKHBhci50YXJnZXQtPmRlc3Ryb3kgIT0gTlVMTCkKIAkJcGFyLnRhcmdldC0+ZGVzdHJveSgmcGFyKTsKIAltb2R1bGVfcHV0KHBhci50YXJnZXQtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogQ2hlY2tzIGFuZCB0cmFuc2xhdGVzIHRoZSB1c2VyLXN1cHBsaWVkIHRhYmxlIHNlZ21lbnQgKGhlbGQgaW4KICAgIG5ld2luZm8pICovCiBzdGF0aWMgaW50Ci10cmFuc2xhdGVfdGFibGUoY29uc3QgY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAotCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKLQkJdm9pZCAqZW50cnkwLAotCQl1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJdW5zaWduZWQgaW50IG51bWJlciwKLQkJY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCi0JCWNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cykKK3RyYW5zbGF0ZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCB2b2lkICplbnRyeTAsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlwNnRfcmVwbGFjZSAqcmVwbCkKIHsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCi0JbmV3aW5mby0+c2l6ZSA9IHNpemU7Ci0JbmV3aW5mby0+bnVtYmVyID0gbnVtYmVyOworCW5ld2luZm8tPnNpemUgPSByZXBsLT5zaXplOworCW5ld2luZm8tPm51bWJlciA9IHJlcGwtPm51bV9lbnRyaWVzOwogCiAJLyogSW5pdCBhbGwgaG9va3MgdG8gaW1wb3NzaWJsZSB2YWx1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfSU5FVF9OVU1IT09LUzsgaSsrKSB7CkBAIC04NTQsNDkgKzg2NCw1OCBAQAogCWR1cHJpbnRmKCJ0cmFuc2xhdGVfdGFibGU6IHNpemUgJXVcbiIsIG5ld2luZm8tPnNpemUpOwogCWkgPSAwOwogCS8qIFdhbGsgdGhyb3VnaCBlbnRyaWVzLCBjaGVja2luZyBvZmZzZXRzLiAqLwotCXJldCA9IElQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCi0JCQkJY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3MsCi0JCQkJbmV3aW5mbywKLQkJCQllbnRyeTAsCi0JCQkJZW50cnkwICsgc2l6ZSwKLQkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsIHZhbGlkX2hvb2tzLCAmaSk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgZW50cnkwLCBuZXdpbmZvLT5zaXplKSB7CisJCXJldCA9IGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIsIG5ld2luZm8sIGVudHJ5MCwKKwkJCQkJCSBlbnRyeTAgKyByZXBsLT5zaXplLAorCQkJCQkJIHJlcGwtPmhvb2tfZW50cnksCisJCQkJCQkgcmVwbC0+dW5kZXJmbG93LAorCQkJCQkJIHJlcGwtPnZhbGlkX2hvb2tzKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJKytpOworCX0KIAotCWlmIChpICE9IG51bWJlcikgeworCWlmIChpICE9IHJlcGwtPm51bV9lbnRyaWVzKSB7CiAJCWR1cHJpbnRmKCJ0cmFuc2xhdGVfdGFibGU6ICV1IG5vdCAldSBlbnRyaWVzXG4iLAotCQkJIGksIG51bWJlcik7CisJCQkgaSwgcmVwbC0+bnVtX2VudHJpZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBDaGVjayBob29rcyBhbGwgYXNzaWduZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfSU5FVF9OVU1IT09LUzsgaSsrKSB7CiAJCS8qIE9ubHkgaG9va3Mgd2hpY2ggYXJlIHZhbGlkICovCi0JCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQorCQlpZiAoIShyZXBsLT52YWxpZF9ob29rcyAmICgxIDw8IGkpKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmV3aW5mby0+aG9va19lbnRyeVtpXSA9PSAweEZGRkZGRkZGKSB7CiAJCQlkdXByaW50ZigiSW52YWxpZCBob29rIGVudHJ5ICV1ICV1XG4iLAotCQkJCSBpLCBob29rX2VudHJpZXNbaV0pOworCQkJCSBpLCByZXBsLT5ob29rX2VudHJ5W2ldKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChuZXdpbmZvLT51bmRlcmZsb3dbaV0gPT0gMHhGRkZGRkZGRikgewogCQkJZHVwcmludGYoIkludmFsaWQgdW5kZXJmbG93ICV1ICV1XG4iLAotCQkJCSBpLCB1bmRlcmZsb3dzW2ldKTsKKwkJCQkgaSwgcmVwbC0+dW5kZXJmbG93W2ldKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JaWYgKCFtYXJrX3NvdXJjZV9jaGFpbnMobmV3aW5mbywgdmFsaWRfaG9va3MsIGVudHJ5MCkpCisJaWYgKCFtYXJrX3NvdXJjZV9jaGFpbnMobmV3aW5mbywgcmVwbC0+dmFsaWRfaG9va3MsIGVudHJ5MCkpCiAJCXJldHVybiAtRUxPT1A7CiAKIAkvKiBGaW5hbGx5LCBlYWNoIHNhbml0eSBjaGVjayBtdXN0IHBhc3MgKi8KIAlpID0gMDsKLQlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX2VudHJ5KGl0ZXIsIG5ldCwgcmVwbC0+bmFtZSwgcmVwbC0+c2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCUlQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCi0JCQkJICAgY2xlYW51cF9lbnRyeSwgJmkpOworCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKGktLSA9PSAwKQorCQkJCWJyZWFrOworCQkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOworCQl9CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05MDksMzMgKzkyOCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIEdldHMgY291bnRlcnMuICovCi1zdGF0aWMgaW5saW5lIGludAotYWRkX2VudHJ5X3RvX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUsCi0JCSAgICAgc3RydWN0IHh0X2NvdW50ZXJzIHRvdGFsW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotCUFERF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zZXRfZW50cnlfdG9fY291bnRlcihjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKLQkJICAgICBzdHJ1Y3QgaXA2dF9jb3VudGVycyB0b3RhbFtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlTRVRfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICp0LAogCSAgICAgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCiB7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgY3VyY3B1OwpAQCAtOTUxLDMyICs5NDgsMzIgQEAKIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpID0gMDsKLQlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjdXJjcHVdLAotCQkJICAgdC0+c2l6ZSwKLQkJCSAgIHNldF9lbnRyeV90b19jb3VudGVyLAotCQkJICAgY291bnRlcnMsCi0JCQkgICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCB0LT5lbnRyaWVzW2N1cmNwdV0sIHQtPnNpemUpIHsKKwkJU0VUX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCisJCQkgICAgaXRlci0+Y291bnRlcnMucGNudCk7CisJCSsraTsKKwl9CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwogCQl4dF9pbmZvX3dybG9jayhjcHUpOwotCQlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAotCQkJCSAgdC0+c2l6ZSwKLQkJCQkgIGFkZF9lbnRyeV90b19jb3VudGVyLAotCQkJCSAgY291bnRlcnMsCi0JCQkJICAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CisJCQlBRERfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCQkgICAgaXRlci0+Y291bnRlcnMucGNudCk7CisJCQkrK2k7CisJCX0KIAkJeHRfaW5mb193cnVubG9jayhjcHUpOwogCX0KIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKK3N0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTk0LDExICs5OTEsMTEgQEAKIAogc3RhdGljIGludAogY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCi0JCSAgICAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkgICAgIHZvaWQgX191c2VyICp1c2VycHRyKQogewogCXVuc2lnbmVkIGludCBvZmYsIG51bTsKLQlzdHJ1Y3QgaXA2dF9lbnRyeSAqZTsKKwljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xMDUwLDcgKzEwNDcsNyBAQAogCQkJfQogCQl9CiAKLQkJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKKwkJdCA9IGlwNnRfZ2V0X3RhcmdldF9jKGUpOwogCQlpZiAoY29weV90b191c2VyKHVzZXJwdHIgKyBvZmYgKyBlLT50YXJnZXRfb2Zmc2V0CiAJCQkJICsgb2Zmc2V0b2Yoc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0LAogCQkJCQkgICAgdS51c2VyLm5hbWUpLApAQCAtMTA2Nyw3ICsxMDY0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMpCitzdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7CiAKQEAgLTEwNzYsNyArMTA3Myw3IEBACiAJbWVtY3B5KGRzdCwgJnYsIHNpemVvZih2KSk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBjb21wYXRfc3RhbmRhcmRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CiAKQEAgLTEwODUsMjUgKzEwODIsMjAgQEAKIAlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmN2LCBzaXplb2YoY3YpKSA/IC1FRkFVTFQgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotY29tcGF0X2NhbGNfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIGludCAqc2l6ZSkKLXsKLQkqc2l6ZSArPSB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KG0tPnUua2VybmVsLm1hdGNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjb21wYXRfY2FsY19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKK3N0YXRpYyBpbnQgY29tcGF0X2NhbGNfZW50cnkoY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAotCQkJICAgICB2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7Ci0Jc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOworCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OwogCWludCBvZmYsIGksIHJldDsKIAogCW9mZiA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5KTsKIAllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSBiYXNlOwotCUlQNlRfTUFUQ0hfSVRFUkFURShlLCBjb21wYXRfY2FsY19tYXRjaCwgJm9mZik7Ci0JdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCW9mZiArPSB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gpOworCXQgPSBpcDZ0X2dldF90YXJnZXRfYyhlKTsKIAlvZmYgKz0geHRfY29tcGF0X3RhcmdldF9vZmZzZXQodC0+dS5rZXJuZWwudGFyZ2V0KTsKIAluZXdpbmZvLT5zaXplIC09IG9mZjsKIAlyZXQgPSB4dF9jb21wYXRfYWRkX29mZnNldChBRl9JTkVUNiwgZW50cnlfb2Zmc2V0LCBvZmYpOwpAQCAtMTEyNCw3ICsxMTE2LDkgQEAKIHN0YXRpYyBpbnQgY29tcGF0X3RhYmxlX2luZm8oY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8sCiAJCQkgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvKQogeworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJaW50IHJldDsKIAogCWlmICghbmV3aW5mbyB8fCAhaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTMzLDEzICsxMTI3LDE3IEBACiAJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gMDsKIAlsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlyZXR1cm4gSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIGluZm8tPnNpemUsCi0JCQkJICBjb21wYXRfY2FsY19lbnRyeSwgaW5mbywgbG9jX2NwdV9lbnRyeSwKLQkJCQkgIG5ld2luZm8pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbiwgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZW4sIGludCBjb21wYXQpCiB7CiAJY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CiAJc3RydWN0IHh0X3RhYmxlICp0OwpAQCAtMTE5OSw3ICsxMTk3LDggQEAKIH0KIAogc3RhdGljIGludAotZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsIGludCAqbGVuKQorZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCisgICAgICAgICAgICBjb25zdCBpbnQgKmxlbikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBpcDZ0X2dldF9lbnRyaWVzIGdldDsKQEAgLTEyNDcsNiArMTI0Niw3IEBACiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm87CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKIAljb25zdCB2b2lkICpsb2NfY3B1X29sZF9lbnRyeTsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAogCXJldCA9IDA7CiAJY291bnRlcnMgPSB2bWFsbG9jX25vZGUobnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycyksCkBAIC0xMjkwLDggKzEyOTAsOSBAQAogCiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZSAqLwogCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9vbGRfZW50cnksIG9sZGluZm8tPnNpemUsIGNsZWFudXBfZW50cnksCi0JCQkgICBOVUxMKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CisKIAl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogbnVtX2NvdW50ZXJzKSAhPSAwKQpAQCAtMTMxMCwxMiArMTMxMSwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCitkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaXA2dF9yZXBsYWNlIHRtcDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEzMzYsOSArMTMzOCw3IEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCX0KIAotCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAotCQkJICAgICAgbmV3aW5mbywgbG9jX2NwdV9lbnRyeSwgdG1wLnNpemUsIHRtcC5udW1fZW50cmllcywKLQkJCSAgICAgIHRtcC5ob29rX2VudHJ5LCB0bXAudW5kZXJmbG93KTsKKwlyZXQgPSB0cmFuc2xhdGVfdGFibGUobmV0LCBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCAmdG1wKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCkBAIC0xMzUxLDI3ICsxMzUxLDE1IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAgZnJlZV9uZXdpbmZvOgogCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwogc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCi0JCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1kb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKK2RvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLAogCQlpbnQgY29tcGF0KQogewogCXVuc2lnbmVkIGludCBpLCBjdXJjcHU7CkBAIC0xMzg1LDYgKzEzNzMsNyBAQAogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCWludCByZXQgPSAwOwogCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCkBAIC0xNDQzLDExICsxNDMyLDEwIEBACiAJY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKLQlJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwKLQkJCSAgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCi0JCQkgIHBhZGRjLAotCQkJICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CisJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKKwkJKytpOworCX0KIAl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CiAKICB1bmxvY2tfdXBfZnJlZToKQEAgLTE0NzYsNDUgKzE0NjQsNDAgQEAKIHN0YXRpYyBpbnQKIGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGlwNnRfZW50cnkgKmUsIHZvaWQgX191c2VyICoqZHN0cHRyLAogCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnMsCi0JCQkgIHVuc2lnbmVkIGludCAqaSkKKwkJCSAgdW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwogCXN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSBfX3VzZXIgKmNlOwogCXVfaW50MTZfdCB0YXJnZXRfb2Zmc2V0LCBuZXh0X29mZnNldDsKIAljb21wYXRfdWludF90IG9yaWdzaXplOwotCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CisJaW50IHJldCA9IDA7CiAKLQlyZXQgPSAtRUZBVUxUOwogCW9yaWdzaXplID0gKnNpemU7CiAJY2UgPSAoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5IF9fdXNlciAqKSpkc3RwdHI7Ci0JaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbKmldLCBzaXplb2YoY291bnRlcnNbKmldKSkpCi0JCWdvdG8gb3V0OworCWlmIChjb3B5X3RvX3VzZXIoY2UsIGUsIHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkpICE9IDAgfHwKKwkgICAgY29weV90b191c2VyKCZjZS0+Y291bnRlcnMsICZjb3VudGVyc1tpXSwKKwkgICAgc2l6ZW9mKGNvdW50ZXJzW2ldKSkgIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkpOwogCSpzaXplIC09IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5KTsKIAotCXJldCA9IElQNlRfTUFUQ0hfSVRFUkFURShlLCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlciwgZHN0cHRyLCBzaXplKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0geHRfY29tcGF0X21hdGNoX3RvX3VzZXIoZW1hdGNoLCBkc3RwdHIsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KIAl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKIAl0ID0gaXA2dF9nZXRfdGFyZ2V0KGUpOwogCXJldCA9IHh0X2NvbXBhdF90YXJnZXRfdG9fdXNlcih0LCBkc3RwdHIsIHNpemUpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IC1FRkFVTFQ7CisJCXJldHVybiByZXQ7CiAJbmV4dF9vZmZzZXQgPSBlLT5uZXh0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKLQlpZiAocHV0X3VzZXIodGFyZ2V0X29mZnNldCwgJmNlLT50YXJnZXRfb2Zmc2V0KSkKLQkJZ290byBvdXQ7Ci0JaWYgKHB1dF91c2VyKG5leHRfb2Zmc2V0LCAmY2UtPm5leHRfb2Zmc2V0KSkKLQkJZ290byBvdXQ7Ci0KLQkoKmkpKys7CisJaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkgIT0gMCB8fAorCSAgICBwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkgIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMTUyMiw3ICsxNTA1LDcgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwdjYsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va21hc2ssCi0JCSAgICAgICBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaSkKKwkJICAgICAgIGludCAqc2l6ZSkKIHsKIAlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwogCkBAIC0xNTM2LDQ3ICsxNTE5LDMyIEBACiAJfQogCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CiAJKnNpemUgKz0geHRfY29tcGF0X21hdGNoX29mZnNldChtYXRjaCk7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNvbXBhdF9yZWxlYXNlX21hdGNoKHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOwotCi0JbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9lbnRyeShzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkgKmUsIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyB2b2lkIGNvbXBhdF9yZWxlYXNlX2VudHJ5KHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSAqZSkKIHsKIAlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JQ09NUEFUX0lQNlRfTUFUQ0hfSVRFUkFURShlLCBjb21wYXRfcmVsZWFzZV9tYXRjaCwgTlVMTCk7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKQorCQltb2R1bGVfcHV0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKIAl0ID0gY29tcGF0X2lwNnRfZ2V0X3RhcmdldChlKTsKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiBjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqbGltaXQsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKLQkJCQkgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkgIHVuc2lnbmVkIGludCAqaSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCXVuc2lnbmVkIGludCBlbnRyeV9vZmZzZXQ7CkBAIC0xNjA1LDEwICsxNTczLDEzIEBACiAJb2ZmID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkpOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtICh2b2lkICopYmFzZTsKIAlqID0gMDsKLQlyZXQgPSBDT01QQVRfSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9maW5kX2NhbGNfbWF0Y2gsIG5hbWUsCi0JCQkJCSZlLT5pcHY2LCBlLT5jb21lZnJvbSwgJm9mZiwgJmopOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byByZWxlYXNlX21hdGNoZXM7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNvbXBhdF9maW5kX2NhbGNfbWF0Y2goZW1hdGNoLCBuYW1lLAorCQkJCQkgICAgICZlLT5pcHY2LCBlLT5jb21lZnJvbSwgJm9mZik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gcmVsZWFzZV9tYXRjaGVzOworCQkrK2o7CisJfQogCiAJdCA9IGNvbXBhdF9pcDZ0X2dldF90YXJnZXQoZSk7CiAJdGFyZ2V0ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF90YXJnZXQoQUZfSU5FVDYsCkBAIC0xNjQwLDE0ICsxNjExLDE2IEBACiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJbWVtc2V0KCZlLT5jb3VudGVycywgMCwgc2l6ZW9mKGUtPmNvdW50ZXJzKSk7CiAJZS0+Y29tZWZyb20gPSAwOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogCiBvdXQ6CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKIHJlbGVhc2VfbWF0Y2hlczoKLQlJUDZUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X3JlbGVhc2VfbWF0Y2gsICZqKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJaWYgKGotLSA9PSAwKQorCQkJYnJlYWs7CisJCW1vZHVsZV9wdXQoZW1hdGNoLT51Lmtlcm5lbC5tYXRjaC0+bWUpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjYxLDYgKzE2MzQsNyBAQAogCXN0cnVjdCBpcDZ0X2VudHJ5ICpkZTsKIAl1bnNpZ25lZCBpbnQgb3JpZ3NpemU7CiAJaW50IHJldCwgaDsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCXJldCA9IDA7CiAJb3JpZ3NpemUgPSAqc2l6ZTsKQEAgLTE2NzEsMTAgKzE2NDUsMTEgQEAKIAkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSk7CiAJKnNpemUgKz0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkpOwogCi0JcmV0ID0gQ09NUEFUX0lQNlRfTUFUQ0hfSVRFUkFURShlLCB4dF9jb21wYXRfbWF0Y2hfZnJvbV91c2VyLAotCQkJCQlkc3RwdHIsIHNpemUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IHh0X2NvbXBhdF9tYXRjaF9mcm9tX3VzZXIoZW1hdGNoLCBkc3RwdHIsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KIAlkZS0+dGFyZ2V0X29mZnNldCA9IGUtPnRhcmdldF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CiAJdCA9IGNvbXBhdF9pcDZ0X2dldF90YXJnZXQoZSk7CiAJdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OwpAQCAtMTY5MCwzNiArMTY2NSw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X2NoZWNrX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgdW5zaWduZWQgaW50ICppKQorc3RhdGljIGludCBjb21wYXRfY2hlY2tfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJdW5zaWduZWQgaW50IGo7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gbXRwYXI7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAlqID0gMDsKKwltdHBhci5uZXQJPSBuZXQ7CiAJbXRwYXIudGFibGUgICAgID0gbmFtZTsKIAltdHBhci5lbnRyeWluZm8gPSAmZS0+aXB2NjsKIAltdHBhci5ob29rX21hc2sgPSBlLT5jb21lZnJvbTsKIAltdHBhci5mYW1pbHkgICAgPSBORlBST1RPX0lQVjY7Ci0JcmV0ID0gSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNoZWNrX21hdGNoLCAmbXRwYXIsICZqKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0gY2hlY2tfbWF0Y2goZW1hdGNoLCAmbXRwYXIpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKKwkJKytqOworCX0KKworCXJldCA9IGNoZWNrX3RhcmdldChlLCBuZXQsIG5hbWUpOwogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwotCi0JcmV0ID0gY2hlY2tfdGFyZ2V0KGUsIG5hbWUpOwotCWlmIChyZXQpCi0JCWdvdG8gY2xlYW51cF9tYXRjaGVzOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogCiAgY2xlYW51cF9tYXRjaGVzOgotCUlQNlRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotdHJhbnNsYXRlX2NvbXBhdF90YWJsZShjb25zdCBjaGFyICpuYW1lLAordHJhbnNsYXRlX2NvbXBhdF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkgICAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKipwaW5mbywKIAkJICAgICAgIHZvaWQgKipwZW50cnkwLApAQCAtMTczMSw4ICsxNzE0LDEwIEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sICppbmZvOwogCXZvaWQgKnBvcywgKmVudHJ5MCwgKmVudHJ5MTsKKwlzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkgKml0ZXIwOworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyMTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaW5mbyA9ICpwaW5mbzsKIAllbnRyeTAgPSAqcGVudHJ5MDsKQEAgLTE3NDksMTMgKzE3MzQsMTcgQEAKIAlqID0gMDsKIAl4dF9jb21wYXRfbG9jayhBRl9JTkVUNik7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsCi0JCQkJCWNoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcywKLQkJCQkJaW5mbywgJnNpemUsIGVudHJ5MCwKLQkJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKLQkJCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCAmaiwgbmFtZSk7Ci0JaWYgKHJldCAhPSAwKQotCQlnb3RvIG91dF91bmxvY2s7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMCwgZW50cnkwLCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcyhpdGVyMCwgaW5mbywgJnNpemUsCisJCQkJCQkJZW50cnkwLAorCQkJCQkJCWVudHJ5MCArIHRvdGFsX3NpemUsCisJCQkJCQkJaG9va19lbnRyaWVzLAorCQkJCQkJCXVuZGVyZmxvd3MsCisJCQkJCQkJbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJKytqOworCX0KIAogCXJldCA9IC1FSU5WQUw7CiAJaWYgKGogIT0gbnVtYmVyKSB7CkBAIC0xNzk0LDkgKzE3ODMsMTIgQEAKIAllbnRyeTEgPSBuZXdpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwogCXBvcyA9IGVudHJ5MTsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBDT01QQVRfSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwKLQkJCQkJY29tcGF0X2NvcHlfZW50cnlfZnJvbV91c2VyLAotCQkJCQkmcG9zLCAmc2l6ZSwgbmFtZSwgbmV3aW5mbywgZW50cnkxKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJcmV0ID0gY29tcGF0X2NvcHlfZW50cnlfZnJvbV91c2VyKGl0ZXIwLCAmcG9zLCAmc2l6ZSwKKwkJCQkJCSAgbmFtZSwgbmV3aW5mbywgZW50cnkxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKEFGX0lORVQ2KTsKIAl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQ2KTsKIAlpZiAocmV0KQpAQCAtMTgwNywxMyArMTc5OSwzMiBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAogCWkgPSAwOwotCXJldCA9IElQNlRfRU5UUllfSVRFUkFURShlbnRyeTEsIG5ld2luZm8tPnNpemUsIGNvbXBhdF9jaGVja19lbnRyeSwKLQkJCQkgbmFtZSwgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjEsIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2hlY2tfZW50cnkoaXRlcjEsIG5ldCwgbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCWlmIChyZXQpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGkgbWF0Y2hlcyBuZWVkIGNsZWFudXBfZW50cnkgKGNhbGxzIC0+ZGVzdHJveSkKKwkJICogYmVjYXVzZSB0aGV5IGhhZCBjYWxsZWQgLT5jaGVjayBhbHJlYWR5LiBUaGUgb3RoZXIgai1pCisJCSAqIGVudHJpZXMgbmVlZCBvbmx5IHJlbGVhc2UuCisJCSAqLworCQlpbnQgc2tpcCA9IGk7CiAJCWogLT0gaTsKLQkJQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURV9DT05USU5VRShlbnRyeTAsIG5ld2luZm8tPnNpemUsIGksCi0JCQkJCQkgICBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOwotCQlJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKHNraXAtLSA+IDApCisJCQkJY29udGludWU7CisJCQlpZiAoai0tID09IDApCisJCQkJYnJlYWs7CisJCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJCX0KKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIxLCBuZXQpOworCQl9CiAJCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xODMxLDcgKzE4NDIsMTEgQEAKIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiBvdXQ6Ci0JQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsIGNvbXBhdF9yZWxlYXNlX2VudHJ5LCAmaik7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMCwgZW50cnkwLCB0b3RhbF9zaXplKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJfQogCXJldHVybiByZXQ7CiBvdXRfdW5sb2NrOgogCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKEFGX0lORVQ2KTsKQEAgLTE4NDYsNiArMTg2MSw3IEBACiAJc3RydWN0IGNvbXBhdF9pcDZ0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTg2OCw3ICsxODg0LDcgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAJfQogCi0JcmV0ID0gdHJhbnNsYXRlX2NvbXBhdF90YWJsZSh0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAorCXJldCA9IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUobmV0LCB0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAogCQkJCSAgICAgJm5ld2luZm8sICZsb2NfY3B1X2VudHJ5LCB0bXAuc2l6ZSwKIAkJCQkgICAgIHRtcC5udW1fZW50cmllcywgdG1wLmhvb2tfZW50cnksCiAJCQkJICAgICB0bXAudW5kZXJmbG93KTsKQEAgLTE4ODQsNyArMTkwMCw4IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAgZnJlZV9uZXdpbmZvOgogCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTkzMyw2ICsxOTUwLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwogCWlmIChJU19FUlIoY291bnRlcnMpKQpAQCAtMTk0NSw5ICsxOTYzLDEyIEBACiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gdXNlcnB0cjsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSwKLQkJCQkgY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlciwKLQkJCQkgJnBvcywgJnNpemUsIGNvdW50ZXJzLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgJnBvcywKKwkJCQkJCSZzaXplLCBjb3VudGVycywgaSsrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CkBAIC0yMTIxLDExICsyMTQyLDcgQEAKIAlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5hbWUsIHRhYmxlLT52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwtPnNpemUsCi0JCQkgICAgICByZXBsLT5udW1fZW50cmllcywKLQkJCSAgICAgIHJlcGwtPmhvb2tfZW50cnksCi0JCQkgICAgICByZXBsLT51bmRlcmZsb3cpOworCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXQsIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjE0MiwxNyArMjE1OSwxOSBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgaXA2dF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCit2b2lkIGlwNnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAlzdHJ1Y3QgbW9kdWxlICp0YWJsZV9vd25lciA9IHRhYmxlLT5tZTsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAogCXByaXZhdGUgPSB4dF91bnJlZ2lzdGVyX3RhYmxlKHRhYmxlKTsKIAogCS8qIERlY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2VzICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIHByaXZhdGUtPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOwogCWlmIChwcml2YXRlLT5udW1iZXIgPiBwcml2YXRlLT5pbml0aWFsX2VudHJpZXMpCiAJCW1vZHVsZV9wdXQodGFibGVfb3duZXIpOwogCXh0X2ZyZWVfdGFibGVfaW5mbyhwcml2YXRlKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKaW5kZXggODMxMWNhMy4uZGQ4YWZiYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCWlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUICYmIHNrYl9pbi0+ZGV2ID09IE5VTEwpCiAJCXNrYl9pbi0+ZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAKLQlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDAsIE5VTEwpOworCWljbXB2Nl9zZW5kKHNrYl9pbiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCBhZDM3OGVmLi4zNmI3MmNhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC0yMSw5OSArMjEsMjYgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwgXAogCQkJICAgICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIHN0cnVjdAotewotCXN0cnVjdCBpcDZ0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXA2dF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcDZ0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gImZpbHRlciIsCi0JCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMyArIHNpemVvZihzdHJ1Y3QgaXA2dF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dID0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMgotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dID0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMgotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gTkZQUk9UT19JUFY2LAorCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfRklMVEVSLAogfTsKIAogLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLwogc3RhdGljIHVuc2lnbmVkIGludAotaXA2dF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoraXA2dGFibGVfZmlsdGVyX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChpbiktPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKKwljb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKworCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfbG9jYWxfb3V0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0jaWYgMAotCS8qIHJvb3QgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLwotCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpIHx8Ci0JICAgIGlwX2hkcmxlbihza2IpIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50aygiaXA2dF9ob29rOiBoYXBweSBjcmFja2luZy5cbiIpOwotCQlyZXR1cm4gTkZfQUNDRVBUOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KG91dCktPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcDZ0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAotCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXA2dF9sb2NhbF9vdXRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY2LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKmZpbHRlcl9vcHMgX19yZWFkX21vc3RseTsKIAogLyogRGVmYXVsdCB0byBmb3J3YXJkIGJlY2F1c2UgSSBnb3QgdG9vIG11Y2ggbWFpbCBhbHJlYWR5LiAqLwogc3RhdGljIGludCBmb3J3YXJkID0gTkZfQUNDRVBUOwpAQCAtMTIxLDkgKzQ4LDE4IEBACiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZ0YWJsZV9maWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCS8qIFJlZ2lzdGVyIHRhYmxlICovCisJc3RydWN0IGlwNnRfcmVwbGFjZSAqcmVwbDsKKworCXJlcGwgPSBpcDZ0X2FsbG9jX2luaXRpYWxfdGFibGUoJnBhY2tldF9maWx0ZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCS8qIEVudHJ5IDEgaXMgdGhlIEZPUldBUkQgaG9vayAqLworCSgoc3RydWN0IGlwNnRfc3RhbmRhcmQgKilyZXBsLT5lbnRyaWVzKVsxXS50YXJnZXQudmVyZGljdCA9CisJCS1mb3J3YXJkIC0gMTsKKwogCW5ldC0+aXB2Ni5pcDZ0YWJsZV9maWx0ZXIgPQotCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsICZpbml0aWFsX3RhYmxlLnJlcGwpOworCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY2LmlwNnRhYmxlX2ZpbHRlcikpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2Ni5pcDZ0YWJsZV9maWx0ZXIpOwogCXJldHVybiAwOwpAQCAtMTMxLDcgKzY3LDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZ0YWJsZV9maWx0ZXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwNnRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKKwlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9maWx0ZXJfbmV0X29wcyA9IHsKQEAgLTE0OCwxNyArODQsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogRW50cnkgMSBpcyB0aGUgRk9SV0FSRCBob29rICovCi0JaW5pdGlhbF90YWJsZS5lbnRyaWVzWzFdLnRhcmdldC52ZXJkaWN0ID0gLWZvcndhcmQgLSAxOwotCiAJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfZmlsdGVyX25ldF9vcHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwotCWlmIChyZXQgPCAwKQorCWZpbHRlcl9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9maWx0ZXIsIGlwNnRhYmxlX2ZpbHRlcl9ob29rKTsKKwlpZiAoSVNfRVJSKGZpbHRlcl9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoZmlsdGVyX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNjksNyArMTA0LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwNnRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfZmlsdGVyLCBmaWx0ZXJfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNnRhYmxlX2ZpbHRlcl9uZXRfb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGE5MjljMTlkLi43ODQ0ZTU1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMSw4MCArMjEsMTcgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkgfCBcCiAJCQkgICAgKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbNV07Ci0Jc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAibWFuZ2xlIiwKLQkJLnZhbGlkX2hvb2tzID0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSA2LAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiA1ICsgc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gCT0gMCwKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9GT1JXQVJEXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMywKLQkJCVtORl9JTkVUX1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogNCwKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSAJPSAwLAotCQkJW05GX0lORVRfTE9DQUxfSU5dCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0ZPUldBUkRdCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAzLAotCQkJW05GX0lORVRfUE9TVF9ST1VUSU5HXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiA0LAotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEZPUldBUkQgKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUE9TVF9ST1VUSU5HICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNiwKKwkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIH07CiAKLS8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwNnRfbWFuZ2xlX291dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQogewotCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChpbiktPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaXA2dF9wb3N0X3JvdXRpbmdfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9tYW5nbGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X2xvY2FsX291dF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCiAJdW5zaWduZWQgaW50IHJldDsKIAlzdHJ1Y3QgaW42X2FkZHIgc2FkZHIsIGRhZGRyOwogCXVfaW50OF90IGhvcF9saW1pdDsKQEAgLTExOSw3ICs1Niw3IEBACiAJLyogZmxvd2xhYmVsIGFuZCBwcmlvIChpbmNsdWRlcyB2ZXJzaW9uLCB3aGljaCBzaG91bGRuJ3QgY2hhbmdlIGVpdGhlciAqLwogCWZsb3dsYWJlbCA9ICooKHVfaW50MzJfdCAqKWlwdjZfaGRyKHNrYikpOwogCi0JcmV0ID0gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJcmV0ID0gaXA2dF9kb190YWJsZShza2IsIE5GX0lORVRfTE9DQUxfT1VULCBOVUxMLCBvdXQsCiAJCQkgICAgZGV2X25ldChvdXQpLT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CiAKIAlpZiAocmV0ICE9IE5GX0RST1AgJiYgcmV0ICE9IE5GX1NUT0xFTiAmJgpAQCAtMTMyLDQ5ICs2OSwzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9NQU5HTEUsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfaW5faG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY2LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X2xvY2FsX291dF9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X3Bvc3Rfcm91dGluZ19ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi19OworLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dGFibGVfbWFuZ2xlX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCWlmIChob29rID09IE5GX0lORVRfTE9DQUxfT1VUKQorCQlyZXR1cm4gaXA2dF9tYW5nbGVfb3V0KHNrYiwgb3V0KTsKKwlpZiAoaG9vayA9PSBORl9JTkVUX1BPU1RfUk9VVElORykKKwkJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJCSAgICAgZGV2X25ldChvdXQpLT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CisJLyogSU5QVVQvRk9SV0FSRCAqLworCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICAgZGV2X25ldChpbiktPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKK30KIAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqbWFuZ2xlX29wcyBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX21hbmdsZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X21hbmdsZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2Ni5pcDZ0YWJsZV9tYW5nbGUgPQotCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9tYW5nbGVyLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXA2dF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfbWFuZ2xlciwgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CiAJcmV0dXJuIDA7CkBAIC0xODIsNyArMTAzLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZ0YWJsZV9tYW5nbGVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwNnRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKKwlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9tYW5nbGVfbmV0X29wcyA9IHsKQEAgLTE5OSw5ICsxMjAsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwltYW5nbGVfb3BzID0geHRfaG9va19saW5rKCZwYWNrZXRfbWFuZ2xlciwgaXA2dGFibGVfbWFuZ2xlX2hvb2spOworCWlmIChJU19FUlIobWFuZ2xlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihtYW5nbGVfb3BzKTsKIAkJZ290byBjbGVhbnVwX3RhYmxlOworCX0KIAogCXJldHVybiByZXQ7CiAKQEAgLTIxMiw3ICsxMzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CisJeHRfaG9va191bmxpbmsoJnBhY2tldF9tYW5nbGVyLCBtYW5nbGVfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNnRhYmxlX21hbmdsZV9uZXRfb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCmluZGV4IGVkMWExMTguLmFlZjMxYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKQEAgLTgsODUgKzgsMzcgQEAKIAogI2RlZmluZSBSQVdfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0lORVRfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbMl07Ci0Jc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAicmF3IiwKLQkJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSAzLAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyICsgc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gPSAwLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSA9IDAsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKQotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gTkZQUk9UT19JUFY2LAorCS5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X3ByZV9yb3V0aW5nX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcDZ0YWJsZV9yYXdfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9yYXcpOworCWNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoKGluICE9IE5VTEwpID8gaW4gOiBvdXQpOworCisJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBuZXQtPmlwdjYuaXA2dGFibGVfcmF3KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotaXA2dF9sb2NhbF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9yYXcpOwotfQotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwNnRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JICAuaG9vayA9IGlwNnRfcHJlX3JvdXRpbmdfaG9vaywKLQkgIC5wZiA9IE5GUFJPVE9fSVBWNiwKLQkgIC5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKLQkgIC5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkgIC5ob29rID0gaXA2dF9sb2NhbF9vdXRfaG9vaywKLQkgIC5wZiA9IE5GUFJPVE9fSVBWNiwKLQkgIC5ob29rbnVtID0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JICAucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLX07CitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzICpyYXd0YWJsZV9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX3Jhd19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X3Jhdyk7CisJaWYgKHJlcGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbmV0LT5pcHY2LmlwNnRhYmxlX3JhdyA9Ci0JCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X3JhdywgJmluaXRpYWxfdGFibGUucmVwbCk7CisJCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X3JhdywgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjYuaXA2dGFibGVfcmF3KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CiAJcmV0dXJuIDA7CkBAIC05NCw3ICs0Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2dGFibGVfcmF3X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CisJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXA2dGFibGVfcmF3X25ldF9vcHMgPSB7CkBAIC0xMTEsOSArNjMsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwlyYXd0YWJsZV9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9yYXcsIGlwNnRhYmxlX3Jhd19ob29rKTsKKwlpZiAoSVNfRVJSKHJhd3RhYmxlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihyYXd0YWJsZV9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTI0LDcgKzc4LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwNnRhYmxlX3Jhd19maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfcmF3LCByYXd0YWJsZV9vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfcmF3X25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDQxYjQ0NGMuLjA4MjRkODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC0yNiwxMDYgKzI2LDM3IEBACiAJCQkJKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKIAkJCQkoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkKIAotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBpcDZ0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXA2dF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcDZ0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gInNlY3VyaXR5IiwKLQkJLnZhbGlkX2hvb2tzID0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JCS5udW1fZW50cmllcyA9IDQsCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSAwLAotCQkJW05GX0lORVRfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9MT0NBTF9JTl0gCT0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0lQVjYsCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfbG9jYWxfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwNnRhYmxlX3NlY3VyaXR5X2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldCgoaW4gIT0gTlVMTCkgPyBpbiA6IG91dCk7CisKKwlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIG5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfZm9yd2FyZF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfbG9jYWxfb3V0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCS8qIFRCRDogaGFuZGxlIHNob3J0IHBhY2tldHMgdmlhIHJhdyBzb2NrZXQgKi8KLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXA2dF9sb2NhbF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXA2dF9mb3J3YXJkX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfU0VDVVJJVFksCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfbG9jYWxfb3V0X2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKnNlY3RibF9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX3NlY3VyaXR5X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQluZXQtPmlwdjYuaXA2dGFibGVfc2VjdXJpdHkgPQotCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnNlY3VyaXR5X3RhYmxlLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOwogCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmc2VjdXJpdHlfdGFibGUpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSA9CisJCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmc2VjdXJpdHlfdGFibGUsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKIApAQCAtMTM0LDcgKzY1LDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CisJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfb3BzID0gewpAQCAtMTUwLDkgKzgxLDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwotCWlmIChyZXQgPCAwKQorCXNlY3RibF9vcHMgPSB4dF9ob29rX2xpbmsoJnNlY3VyaXR5X3RhYmxlLCBpcDZ0YWJsZV9zZWN1cml0eV9ob29rKTsKKwlpZiAoSVNfRVJSKHNlY3RibF9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoc2VjdGJsX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNjMsNyArOTYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfc2VjdXJpdHlfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmc2VjdXJpdHlfdGFibGUsIHNlY3RibF9vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfc2VjdXJpdHlfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDA5NTZlYmEuLjk5NmMzZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KIApAQCAtMTkxLDE1ICsxOTIsMjAgQEAKIHN0YXRpYyBlbnVtIGlwNl9kZWZyYWdfdXNlcnMgbmZfY3Q2X2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtLAogCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwl1MTYgem9uZSA9IE5GX0NUX0RFRkFVTFRfWk9ORTsKKworCWlmIChza2ItPm5mY3QpCisJCXpvbmUgPSBuZl9jdF96b25lKChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdCk7CisKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCWlmIChza2ItPm5mX2JyaWRnZSAmJgogCSAgICBza2ItPm5mX2JyaWRnZS0+bWFzayAmIEJSTkZfTkZfQlJJREdFX1BSRVJPVVRJTkcpCi0JCXJldHVybiBJUDZfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU47CisJCXJldHVybiBJUDZfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU4gKyB6b25lOwogI2VuZGlmCiAJaWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORykKLQkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX0lOOworCQlyZXR1cm4gSVA2X0RFRlJBR19DT05OVFJBQ0tfSU4gKyB6b25lOwogCWVsc2UKLQkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX09VVDsKKwkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX09VVCArIHpvbmU7CiAKIH0KIApAQCAtMjEyLDcgKzIxOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJlYXNtOwogCiAJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayk/ICAqLwotCWlmIChza2ItPm5mY3QpCisJaWYgKHNrYi0+bmZjdCAmJiAhbmZfY3RfaXNfdGVtcGxhdGUoKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXJlYXNtID0gbmZfY3RfZnJhZzZfZ2F0aGVyKHNrYiwgbmZfY3Q2X2RlZnJhZ191c2VyKGhvb2tudW0sIHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggYzdiOGJkMS4uOWJlODE3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pY21wdjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgogCkBAIC0xMjgsNyArMTI5LDcgQEAKIH0KIAogc3RhdGljIGludAotaWNtcHY2X2Vycm9yX21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LAoraWNtcHY2X2Vycm9yX21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHVuc2lnbmVkIGludCBpY21wNm9mZiwKIAkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCkBAIC0xMzcsNiArMTM4LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGludHVwbGUsIG9yaWd0dXBsZTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICppbnByb3RvOworCXUxNiB6b25lID0gdG1wbCA/IG5mX2N0X3pvbmUodG1wbCkgOiBORl9DVF9ERUZBVUxUX1pPTkU7CiAKIAlORl9DVF9BU1NFUlQoc2tiLT5uZmN0ID09IE5VTEwpOwogCkBAIC0xNjMsNyArMTY1LDcgQEAKIAogCSpjdGluZm8gPSBJUF9DVF9SRUxBVEVEOwogCi0JaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsICZpbnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJmludHVwbGUpOwogCWlmICghaCkgewogCQlwcl9kZWJ1ZygiaWNtcHY2X2Vycm9yOiBubyBtYXRjaFxuIik7CiAJCXJldHVybiAtTkZfQUNDRVBUOwpAQCAtMTc5LDcgKzE4MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWljbXB2Nl9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAoraWNtcHY2X2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCisJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaWNtcDZoOwpAQCAtMjE1LDcgKzIxOCw3IEBACiAJaWYgKGljbXA2aC0+aWNtcDZfdHlwZSA+PSAxMjgpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlyZXR1cm4gaWNtcHY2X2Vycm9yX21lc3NhZ2UobmV0LCBza2IsIGRhdGFvZmYsIGN0aW5mbywgaG9va251bSk7CisJcmV0dXJuIGljbXB2Nl9lcnJvcl9tZXNzYWdlKG5ldCwgdG1wbCwgc2tiLCBkYXRhb2ZmLCBjdGluZm8sIGhvb2tudW0pOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggNjI0YTU0OC4uZjExNzFiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtNDUsOSArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jZGVmaW5lIE5GX0NUX0ZSQUc2X0hJR0hfVEhSRVNIIDI2MjE0NCAvKiA9PSAyNTYqMTAyNCAqLwotI2RlZmluZSBORl9DVF9GUkFHNl9MT1dfVEhSRVNIIDE5NjYwOCAgLyogPT0gMTkyKjEwMjQgKi8KLSNkZWZpbmUgTkZfQ1RfRlJBRzZfVElNRU9VVCBJUFY2X0ZSQUdfVElNRU9VVAogCiBzdHJ1Y3QgbmZfY3RfZnJhZzZfc2tiX2NiCiB7CkBAIC00NzIsNyArNDY5LDcgQEAKIAogCS8qIGFsbCBvcmlnaW5hbCBza2JzIGFyZSBsaW5rZWQgaW50byB0aGUgTkZDVF9GUkFHNl9DQihoZWFkKS5vcmlnICovCiAJZnAgPSBza2Jfc2hpbmZvKGhlYWQpLT5mcmFnX2xpc3Q7Ci0JaWYgKE5GQ1RfRlJBRzZfQ0IoZnApLT5vcmlnID09IE5VTEwpCisJaWYgKGZwICYmIE5GQ1RfRlJBRzZfQ0IoZnApLT5vcmlnID09IE5VTEwpCiAJCS8qIGF0IGFib3ZlIGNvZGUsIGhlYWQgc2tiIGlzIGRpdmlkZWQgaW50byB0d28gc2ticy4gKi8KIAkJZnAgPSBmcC0+bmV4dDsKIApAQCAtNTk4LDEyICs1OTUsNiBAQAogCWhkciA9IGlwdjZfaGRyKGNsb25lKTsKIAlmaGRyID0gKHN0cnVjdCBmcmFnX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKGNsb25lKTsKIAotCWlmICghKGZoZHItPmZyYWdfb2ZmICYgaHRvbnMoMHhGRkY5KSkpIHsKLQkJcHJfZGVidWcoIkludmFsaWQgZnJhZ21lbnQgb2Zmc2V0XG4iKTsKLQkJLyogSXQgaXMgbm90IGEgZnJhZ21lbnRlZCBmcmFtZSAqLwotCQlnb3RvIHJldF9vcmlnOwotCX0KLQogCWlmIChhdG9taWNfcmVhZCgmbmZfaW5pdF9mcmFncy5tZW0pID4gbmZfaW5pdF9mcmFncy5oaWdoX3RocmVzaCkKIAkJbmZfY3RfZnJhZzZfZXZpY3RvcigpOwogCkBAIC02NzAsOCArNjYxLDggQEAKIAluZl9mcmFncy5mcmFnX2V4cGlyZSA9IG5mX2N0X2ZyYWc2X2V4cGlyZTsKIAluZl9mcmFncy5zZWNyZXRfaW50ZXJ2YWwgPSAxMCAqIDYwICogSFo7CiAJbmZfaW5pdF9mcmFncy50aW1lb3V0ID0gSVBWNl9GUkFHX1RJTUVPVVQ7Ci0JbmZfaW5pdF9mcmFncy5oaWdoX3RocmVzaCA9IDI1NiAqIDEwMjQ7Ci0JbmZfaW5pdF9mcmFncy5sb3dfdGhyZXNoID0gMTkyICogMTAyNDsKKwluZl9pbml0X2ZyYWdzLmhpZ2hfdGhyZXNoID0gSVBWNl9GUkFHX0hJR0hfVEhSRVNIOworCW5mX2luaXRfZnJhZ3MubG93X3RocmVzaCA9IElQVjZfRlJBR19MT1dfVEhSRVNIOwogCWluZXRfZnJhZ3NfaW5pdF9uZXQoJm5mX2luaXRfZnJhZ3MpOwogCWluZXRfZnJhZ3NfaW5pdCgmbmZfZnJhZ3MpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggYzk2MDVjMy4uNTgzNDRjMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtNTksNyArNTksNyBAQAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl9pcHN0YXRzX2xpc3RbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgc25tcDZfaXBzdGF0c19saXN0W10gPSB7CiAvKiBpcHY2IG1pYiBhY2NvcmRpbmcgdG8gUkZDIDI0NjUgKi8KIAlTTk1QX01JQl9JVEVNKCJJcDZJblJlY2VpdmVzIiwgSVBTVEFUU19NSUJfSU5QS1RTKSwKIAlTTk1QX01JQl9JVEVNKCJJcDZJbkhkckVycm9ycyIsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKSwKQEAgLTkyLDcgKzkyLDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl9pY21wNl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIHNubXA2X2ljbXA2X2xpc3RbXSA9IHsKIC8qIGljbXB2NiBtaWIgYWNjb3JkaW5nIHRvIFJGQyAyNDY2ICovCiAJU05NUF9NSUJfSVRFTSgiSWNtcDZJbk1zZ3MiLCBJQ01QNl9NSUJfSU5NU0dTKSwKIAlTTk1QX01JQl9JVEVNKCJJY21wNkluRXJyb3JzIiwgSUNNUDZfTUlCX0lORVJST1JTKSwKQEAgLTEyMCw3ICsxMjAsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHNubXBfbWliIHNubXA2X3VkcDZfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBzbm1wNl91ZHA2X2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJVZHA2SW5EYXRhZ3JhbXMiLCBVRFBfTUlCX0lOREFUQUdSQU1TKSwKIAlTTk1QX01JQl9JVEVNKCJVZHA2Tm9Qb3J0cyIsIFVEUF9NSUJfTk9QT1JUUyksCiAJU05NUF9NSUJfSVRFTSgiVWRwNkluRXJyb3JzIiwgVURQX01JQl9JTkVSUk9SUyksCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl91ZHBsaXRlNl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIHNubXA2X3VkcGxpdGU2X2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRGF0YWdyYW1zIiwgVURQX01JQl9JTkRBVEFHUkFNUyksCiAJU05NUF9NSUJfSVRFTSgiVWRwTGl0ZTZOb1BvcnRzIiwgVURQX01JQl9OT1BPUlRTKSwKIAlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRXJyb3JzIiwgVURQX01JQl9JTkVSUk9SUyksCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICoqbWliKQorc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqbWliKQogewogCWNoYXIgbmFtZVszMl07CiAJaW50IGk7CkBAIC0xNzAsOCArMTcwLDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc25tcDZfc2VxX3Nob3dfaXRlbShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqKm1pYiwgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKK3N0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2l0ZW0oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKiptaWIsCisJCQkJY29uc3Qgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKIHsKIAlpbnQgaTsKIAlmb3IgKGk9MDsgaXRlbWxpc3RbaV0ubmFtZTsgaSsrKQpAQCAtMTgzLDE0ICsxODMsMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSAoc3RydWN0IG5ldCAqKXNlcS0+cHJpdmF0ZTsKIAotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi5pcHY2X3N0YXRpc3RpY3MsCisJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKIAkJCSAgICBzbm1wNl9pcHN0YXRzX2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcywKKwlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2X3N0YXRpc3RpY3MsCiAJCQkgICAgc25tcDZfaWNtcDZfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHNlcSwgKHZvaWQgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42LAorCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsCisJCQkgICAgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOworCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42LAogCQkJICAgIHNubXA2X3VkcDZfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdHNfaW42LAorCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKIAkJCSAgICBzbm1wNl91ZHBsaXRlNl9saXN0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMyw5ICsyMTQsMTEgQEAKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gKHN0cnVjdCBpbmV0Nl9kZXYgKilzZXEtPnByaXZhdGU7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUtMzJzXHQldVxuIiwgImlmSW5kZXgiLCBpZGV2LT5kZXYtPmlmaW5kZXgpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2LCBzbm1wNl9pcHN0YXRzX2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYsIHNubXA2X2ljbXA2X2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsICh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CisJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsCisJCQkgICAgc25tcDZfaXBzdGF0c19saXN0KTsKKwlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2LAorCQkJICAgIHNubXA2X2ljbXA2X2xpc3QpOworCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1OSw3ICsyNjIsNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpZiAoIW5ldC0+bWliLnByb2NfbmV0X2RldnNubXA2KQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoIWlkZXYgfHwgIWlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5KQorCWlmICghaWRldi0+c3RhdHMucHJvY19kaXJfZW50cnkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJlbW92ZV9wcm9jX2VudHJ5KGlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5LT5uYW1lLAogCQkJICBuZXQtPm1pYi5wcm9jX25ldF9kZXZzbm1wNik7CkBAIC0yNjcsNyArMjcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcHY2X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJzb2Nrc3RhdDYiLCBTX0lSVUdPLAogCQkJJnNvY2tzdGF0Nl9zZXFfZm9wcykpCkBAIC0yODgsNyArMjkxLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaXB2Nl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2Nl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAic29ja3N0YXQ2Iik7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImRldl9zbm1wNiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA5MjZjZThlLi5lZDMxYzM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIAkucmVsZWFzZSA9CXNlcV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBpbnQgcmF3Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgcmF3Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJyYXc2IiwgU19JUlVHTywgJnJhdzZfc2VxX2ZvcHMpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyODMsNyArMTI4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJhdzZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCByYXc2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAicmF3NiIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IDJjZGRlYTNiLi5hNTU1MTU2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkgICBwb2ludGVyIGRpcmVjdGx5LCBkZXZpY2UgbWlnaHQgYWxyZWFkeSBkaXNhcHBlYXJlZC4KIAkgKi8KIAlmcS0+cS5mcmFnbWVudHMtPmRldiA9IGRldjsKLQlpY21wdjZfc2VuZChmcS0+cS5mcmFnbWVudHMsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCwgZGV2KTsKKwlpY21wdjZfc2VuZChmcS0+cS5mcmFnbWVudHMsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCk7CiBvdXRfcmN1X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIG91dDoKQEAgLTIzNyw4ICsyMzcsNyBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1mcV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QsCi0Jc3RydWN0IGluZXQ2X2RldiAqaWRldikKK2ZxX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOwogCXN0cnVjdCBpcDZfY3JlYXRlX2FyZyBhcmc7CkBAIC0yNTQsMTMgKzI1Myw5IEBACiAKIAlxID0gaW5ldF9mcmFnX2ZpbmQoJm5ldC0+aXB2Ni5mcmFncywgJmlwNl9mcmFncywgJmFyZywgaGFzaCk7CiAJaWYgKHEgPT0gTlVMTCkKLQkJZ290byBvb207CisJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgZnJhZ19xdWV1ZSwgcSk7Ci0KLW9vbToKLQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgaXA2X2ZyYWdfcXVldWUoc3RydWN0IGZyYWdfcXVldWUgKmZxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNjA2LDggKzYwMSw4IEBACiAJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjYuZnJhZ3MubWVtKSA+IG5ldC0+aXB2Ni5mcmFncy5oaWdoX3RocmVzaCkKIAkJaXA2X2V2aWN0b3IobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSk7CiAKLQlpZiAoKGZxID0gZnFfZmluZChuZXQsIGZoZHItPmlkZW50aWZpY2F0aW9uLCAmaGRyLT5zYWRkciwgJmhkci0+ZGFkZHIsCi0JCQkgIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpKSkgIT0gTlVMTCkgeworCWZxID0gZnFfZmluZChuZXQsIGZoZHItPmlkZW50aWZpY2F0aW9uLCAmaGRyLT5zYWRkciwgJmhkci0+ZGFkZHIpOworCWlmIChmcSAhPSBOVUxMKSB7CiAJCWludCByZXQ7CiAKIAkJc3Bpbl9sb2NrKCZmcS0+cS5sb2NrKTsKQEAgLTY3Miw3ICs2NjcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBpcDZfZnJhZ3NfbnNfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfZnJhZ3NfbnNfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyOwpAQCAtNzAyLDcgKzY5Nyw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIGlwNl9mcmFnc19uc19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNl9mcmFnc19uc19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKQEAgLTc0NSwxMCArNzQwLDEwIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBpcHY2X2ZyYWdzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2ZyYWdzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQluZXQtPmlwdjYuZnJhZ3MuaGlnaF90aHJlc2ggPSAyNTYgKiAxMDI0OwotCW5ldC0+aXB2Ni5mcmFncy5sb3dfdGhyZXNoID0gMTkyICogMTAyNDsKKwluZXQtPmlwdjYuZnJhZ3MuaGlnaF90aHJlc2ggPSBJUFY2X0ZSQUdfSElHSF9USFJFU0g7CisJbmV0LT5pcHY2LmZyYWdzLmxvd190aHJlc2ggPSBJUFY2X0ZSQUdfTE9XX1RIUkVTSDsKIAluZXQtPmlwdjYuZnJhZ3MudGltZW91dCA9IElQVjZfRlJBR19USU1FT1VUOwogCiAJaW5ldF9mcmFnc19pbml0X25ldCgmbmV0LT5pcHY2LmZyYWdzKTsKQEAgLTc1Niw3ICs3NTEsNyBAQAogCXJldHVybiBpcDZfZnJhZ3NfbnNfc3lzY3RsX3JlZ2lzdGVyKG5ldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdjZfZnJhZ3NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcHY2X2ZyYWdzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpcDZfZnJhZ3NfbnNfc3lzY3RsX3VucmVnaXN0ZXIobmV0KTsKIAlpbmV0X2ZyYWdzX2V4aXRfbmV0KCZuZXQtPmlwdjYuZnJhZ3MsICZpcDZfZnJhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYzJiZDc0Yy4uYjA4ODc5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC05MDksNyArOTA5LDcgQEAKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCi0JaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfQUREUl9VTlJFQUNILCAwLCBza2ItPmRldik7CisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfQUREUl9VTlJFQUNILCAwKTsKIAogCXJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBza2JfZHN0KHNrYik7CiAJaWYgKHJ0KSB7CkBAIC0xODczLDcgKzE4NzMsNyBAQAogCXN3aXRjaCAoaXBzdGF0c19taWJfbm9yb3V0ZXMpIHsKIAljYXNlIElQU1RBVFNfTUlCX0lOTk9ST1VURVM6CiAJCXR5cGUgPSBpcHY2X2FkZHJfdHlwZSgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOwotCQlpZiAodHlwZSA9PSBJUFY2X0FERFJfQU5ZIHx8IHR5cGUgPT0gSVBWNl9BRERSX1JFU0VSVkVEKSB7CisJCWlmICh0eXBlID09IElQVjZfQUREUl9BTlkpIHsKIAkJCUlQNl9JTkNfU1RBVFMoZGV2X25ldChkc3QtPmRldiksIGlwNl9kc3RfaWRldihkc3QpLAogCQkJCSAgICAgIElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7CiAJCQlicmVhazsKQEAgLTE4ODQsNyArMTg4NCw3IEBACiAJCQkgICAgICBpcHN0YXRzX21pYl9ub3JvdXRlcyk7CiAJCWJyZWFrOwogCX0KLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDAsIHNrYi0+ZGV2KTsKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtMjYxMiw3ICsyNjEyLDcgQEAKIAl7IH0KIH07CiAKLXN0cnVjdCBjdGxfdGFibGUgKmlwdjZfcm91dGVfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RydWN0IGN0bF90YWJsZSAqIF9fbmV0X2luaXQgaXB2Nl9yb3V0ZV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKQEAgLTI2MzcsNyArMjYzNyw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBpcDZfcm91dGVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwNl9yb3V0ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKQEAgLTI3MDIsNyArMjcwMiw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNl9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXB2Nl9yb3V0ZSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA5NzZlNjgyLi5iMWVlYTgxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSBIQVNIX1NJWkUgIDE2CiAjZGVmaW5lIEhBU0goYWRkcikgKCgoX19mb3JjZSB1MzIpYWRkcl4oKF9fZm9yY2UgdTMyKWFkZHI+PjQpKSYweEYpCiAKLXN0YXRpYyB2b2lkIGlwaXA2X2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTM2NCw3ICszNjMsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlJTklUX1JDVV9IRUFEKCZwLT5yY3VfaGVhZCk7CiAJcC0+bmV4dCA9IHQtPnBybDsKIAlwLT5hZGRyID0gYS0+YWRkcjsKIAlwLT5mbGFncyA9IGEtPmZsYWdzOwpAQCAtNzQ1LDcgKzc0Myw3IEBACiAJCQlza2JfZHN0KHNrYiktPm9wcy0+dXBkYXRlX3BtdHUoc2tiX2RzdChza2IpLCBtdHUpOwogCiAJCWlmIChza2ItPmxlbiA+IG10dSkgewotCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBkZXYpOworCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJCWlwX3J0X3B1dChydCk7CiAJCQlnb3RvIHR4X2Vycm9yOwogCQl9CkBAIC0xMTIwLDcgKzExMTgsNyBAQAogCWlwaXA2X3R1bm5lbF9iaW5kX2RldihkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpcGlwNl9mYl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19uZXRfaW5pdCBpcGlwNl9mYl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwaGRyICppcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CkBAIC0xMTQ1LDcgKzExNDMsNyBAQAogCS5wcmlvcml0eQk9CTEsCiB9OwogCi1zdGF0aWMgdm9pZCBzaXRfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBzaXRfbmV0ICpzaXRuLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBzaXRfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBzaXRfbmV0ICpzaXRuLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCWludCBwcmlvOwogCkBAIC0xMTYyLDcgKzExNjAsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzaXRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHNpdF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOwogCWludCBlcnI7CkBAIC0xMTk1LDcgKzExOTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHNpdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHNpdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTEyMjgsMTUgKzEyMjYsMTQgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIklQdjYgb3ZlciBJUHY0IHR1bm5lbGluZyBkcml2ZXJcbiIpOwogCi0JaWYgKHhmcm00X3R1bm5lbF9yZWdpc3Rlcigmc2l0X2hhbmRsZXIsIEFGX0lORVQ2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAic2l0IGluaXQ6IENhbid0IGFkZCBwcm90b2NvbFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJnNpdF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKLQkJeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJnNpdF9oYW5kbGVyLCBBRl9JTkVUNik7Ci0KKwkJcmV0dXJuIGVycjsKKwllcnIgPSB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoJnNpdF9oYW5kbGVyLCBBRl9JTkVUNik7CisJaWYgKGVyciA8IDApIHsKKwkJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZzaXRfbmV0X29wcyk7CisJCXByaW50ayhLRVJOX0lORk8gInNpdCBpbml0OiBDYW4ndCBhZGQgcHJvdG9jb2xcbiIpOworCX0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggNzIwOGEwNi4uMzRkMWYwNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKQEAgLTI2OSw3ICsyNjksOCBAQAogCXJlcS0+d2luZG93X2NsYW1wID0gdHAtPndpbmRvd19jbGFtcCA/IDpkc3RfbWV0cmljKGRzdCwgUlRBWF9XSU5ET1cpOwogCXRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3codGNwX2Z1bGxfc3BhY2Uoc2spLCByZXEtPm1zcywKIAkJCQkgICZyZXEtPnJjdl93bmQsICZyZXEtPndpbmRvd19jbGFtcCwKLQkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUpOworCQkJCSAgaXJlcS0+d3NjYWxlX29rLCAmcmN2X3dzY2FsZSwKKwkJCQkgIGRzdF9tZXRyaWMoZHN0LCBSVEFYX0lOSVRSV05EKSk7CiAKIAlpcmVxLT5yY3Zfd3NjYWxlID0gcmN2X3dzY2FsZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwppbmRleCBjNjkwNzM2Li5mODQxZDkzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYworKysgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwpAQCAtNTUsNyArNTUsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5ldF9pcHY2X2N0bF9wYXRoKTsKIAotc3RhdGljIGludCBpcHY2X3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB2Nl9zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKmlwdjZfdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZSAqaXB2Nl9yb3V0ZV90YWJsZTsKQEAgLTk4LDcgKzk4LDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgaXB2Nl9zeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcHY2X3N5c2N0bF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqaXB2Nl90YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICppcHY2X3JvdXRlX3RhYmxlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggZmViZmQ1OS4uNjk2M2E2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC01MjAsNiArNTIwLDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCB0Y3BfdjZfcnR4X3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSAgICAgc3RydWN0IHJlcXVlc3RfdmFsdWVzICpydnApCit7CisJVENQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIFRDUF9NSUJfUkVUUkFOU1NFR1MpOworCXJldHVybiB0Y3BfdjZfc2VuZF9zeW5hY2soc2ssIHJlcSwgcnZwKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHN5bl9mbG9vZF93YXJuaW5nKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCkBAIC04NzYsNyArODgzLDcgQEAKIAogCWlmIChnZW5oYXNoIHx8IG1lbWNtcChoYXNoX2xvY2F0aW9uLCBuZXdoYXNoLCAxNikgIT0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNRDUgSGFzaCAlcyBmb3IgKCVwSTYsICV1KS0+KCVwSTYsICV1KVxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIk1ENSBIYXNoICVzIGZvciBbJXBJNmNdOiV1LT5bJXBJNmNdOiV1XG4iLAogCQkJICAgICAgIGdlbmhhc2ggPyAiZmFpbGVkIiA6ICJtaXNtYXRjaCIsCiAJCQkgICAgICAgJmlwNmgtPnNhZGRyLCBudG9ocyh0aC0+c291cmNlKSwKIAkJCSAgICAgICAmaXA2aC0+ZGFkZHIsIG50b2hzKHRoLT5kZXN0KSk7CkBAIC04OTAsMTAgKzg5NywxMSBAQAogc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgdGNwNl9yZXF1ZXN0X3NvY2tfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmZhbWlseQkJPQlBRl9JTkVUNiwKIAkub2JqX3NpemUJPQlzaXplb2Yoc3RydWN0IHRjcDZfcmVxdWVzdF9zb2NrKSwKLQkucnR4X3N5bl9hY2sJPQl0Y3BfdjZfc2VuZF9zeW5hY2ssCisJLnJ0eF9zeW5fYWNrCT0JdGNwX3Y2X3J0eF9zeW5hY2ssCiAJLnNlbmRfYWNrCT0JdGNwX3Y2X3JlcXNrX3NlbmRfYWNrLAogCS5kZXN0cnVjdG9yCT0JdGNwX3Y2X3JlcXNrX2Rlc3RydWN0b3IsCi0JLnNlbmRfcmVzZXQJPQl0Y3BfdjZfc2VuZF9yZXNldAorCS5zZW5kX3Jlc2V0CT0JdGNwX3Y2X3NlbmRfcmVzZXQsCisJLnN5bl9hY2tfdGltZW91dCA9IAl0Y3Bfc3luX2Fja190aW1lb3V0LAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC0yMTA1LDcgKzIxMTMsNyBAQAogCX0sCiB9OwogCi1pbnQgdGNwNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgdGNwNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiB0Y3BfcHJvY19yZWdpc3RlcihuZXQsICZ0Y3A2X3NlcV9hZmluZm8pOwogfQpAQCAtMjE3NCwxOCArMjE4MiwxOCBAQAogCQkJCUlORVRfUFJPVE9TV19JQ1NLLAogfTsKIAotc3RhdGljIGludCB0Y3B2Nl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwdjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmbmV0LT5pcHY2LnRjcF9zaywgUEZfSU5FVDYsCiAJCQkJICAgIFNPQ0tfUkFXLCBJUFBST1RPX1RDUCwgbmV0KTsKIH0KIAotc3RhdGljIHZvaWQgdGNwdjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB0Y3B2Nl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2Ni50Y3Bfc2spOwogfQogCi1zdGF0aWMgdm9pZCB0Y3B2Nl9uZXRfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB0Y3B2Nl9uZXRfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQogewogCWluZXRfdHdza19wdXJnZSgmdGNwX2hhc2hpbmZvLCAmdGNwX2RlYXRoX3JvdywgQUZfSU5FVDYpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdHVubmVsNi5jIGIvbmV0L2lwdjYvdHVubmVsNi5jCmluZGV4IDUxZTI4MzIuLmUxN2JjMWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3R1bm5lbDYuYworKysgYi9uZXQvaXB2Ni90dW5uZWw2LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJaWYgKCFoYW5kbGVyLT5oYW5kbGVyKHNrYikpCiAJCQlyZXR1cm4gMDsKIAotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOworCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCk7CiAKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJaWYgKCFoYW5kbGVyLT5oYW5kbGVyKHNrYikpCiAJCQlyZXR1cm4gMDsKIAotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOworCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCk7CiAKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDY5ZWJkYmUuLjUyYjgzNDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IHVsZW4sIGNvcGllZDsKKwl1bnNpZ25lZCBpbnQgdWxlbjsKIAlpbnQgcGVla2VkOwogCWludCBlcnI7CiAJaW50IGlzX3VkcGxpdGUgPSBJU19VRFBMSVRFKHNrKTsKQEAgLTM0MSwxMCArMzQxLDkgQEAKIAkJZ290byBvdXQ7CiAKIAl1bGVuID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JY29waWVkID0gbGVuOwotCWlmIChjb3BpZWQgPiB1bGVuKQotCQljb3BpZWQgPSB1bGVuOwotCWVsc2UgaWYgKGNvcGllZCA8IHVsZW4pCisJaWYgKGxlbiA+IHVsZW4pCisJCWxlbiA9IHVsZW47CisJZWxzZSBpZiAobGVuIDwgdWxlbikKIAkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwogCiAJaXNfdWRwNCA9IChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSk7CkBAIC0zNTUsMTQgKzM1NCwxNCBAQAogCSAqIGNvdmVyYWdlIGNoZWNrc3VtIChVRFAtTGl0ZSksIGRvIGl0IGJlZm9yZSB0aGUgY29weS4KIAkgKi8KIAotCWlmIChjb3BpZWQgPCB1bGVuIHx8IFVEUF9TS0JfQ0Ioc2tiKS0+cGFydGlhbF9jb3YpIHsKKwlpZiAobGVuIDwgdWxlbiB8fCBVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292KSB7CiAJCWlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fY29weV9lcnI7CiAJfQogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAotCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIGNvcGllZCAgICAgICApOworCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsbGVuKTsKIAllbHNlIHsKIAkJZXJyID0gc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG1zZy0+bXNnX2lvdik7CiAJCWlmIChlcnIgPT0gLUVJTlZBTCkKQEAgLTQxMSw3ICs0MTAsNyBAQAogCQkJZGF0YWdyYW1fcmVjdl9jdGwoc2ssIG1zZywgc2tiKTsKIAl9CiAKLQllcnIgPSBjb3BpZWQ7CisJZXJyID0gbGVuOwogCWlmIChmbGFncyAmIE1TR19UUlVOQykKIAkJZXJyID0gdWxlbjsKIApAQCAtNjgxLDEyICs2ODAsMTEgQEAKIGludCBfX3VkcDZfbGliX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSwKIAkJICAgaW50IHByb3RvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAJc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOwogCXUzMiB1bGVuID0gMDsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpCiAJCWdvdG8gc2hvcnRfcGFja2V0OwpAQCAtNzQ1LDcgKzc0Myw3IEBACiAJCVVEUDZfSU5DX1NUQVRTX0JIKG5ldCwgVURQX01JQl9OT1BPUlRTLAogCQkJCXByb3RvID09IElQUFJPVE9fVURQTElURSk7CiAKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwLCBkZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDApOwogCiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKQEAgLTEzOTYsNyArMTM5NCw3IEBACiAJfSwKIH07CiAKLWludCB1ZHA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCB1ZHA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIHVkcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnVkcDZfc2VxX2FmaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHBsaXRlLmMgYi9uZXQvaXB2Ni91ZHBsaXRlLmMKaW5kZXggNmVhNjkzOC4uNWY0OGZhZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwbGl0ZS5jCisrKyBiL25ldC9pcHY2L3VkcGxpdGUuYwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB1ZHBsaXRlNl9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB1ZHBsaXRlNl9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gdWRwX3Byb2NfcmVnaXN0ZXIobmV0LCAmdWRwbGl0ZTZfc2VxX2FmaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVkcGxpdGU2X3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB1ZHBsaXRlNl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1ZHBfcHJvY191bnJlZ2lzdGVyKG5ldCwgJnVkcGxpdGU2X3NlcV9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggOTA4NDU4Mi4uMmJjOThlZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIGRzdCwgc3JjLCBwcm90bywgQUZfSU5FVDYpOworCQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgc2tiLT5tYXJrLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKIAkJaWYgKCF4KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggYzRmNGVlZi4uMGM5MjExMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogCWlmICghc2tiLT5sb2NhbF9kZiAmJiBza2ItPmxlbiA+IG10dSkgewogCQlza2ItPmRldiA9IGRzdC0+ZGV2OwotCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJcmV0ID0gLUVNU0dTSVpFOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMgYi9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYwppbmRleCA0Mzg4MzFkLi5mYTg1YTdkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYworKysgYi9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYwpAQCAtMzAsNiArMzAsMjUgQEAKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgorCisjZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFIDI1NgorI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFIDI1NgorCisjZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfTUlOCTEKKyNkZWZpbmUgWEZSTTZfVFVOTkVMX1NQSV9NQVgJMHhmZmZmZmZmZgorCitzdHJ1Y3QgeGZybTZfdHVubmVsX25ldCB7CisJc3RydWN0IGhsaXN0X2hlYWQgc3BpX2J5YWRkcltYRlJNNl9UVU5ORUxfU1BJX0JZQUREUl9IU0laRV07CisJc3RydWN0IGhsaXN0X2hlYWQgc3BpX2J5c3BpW1hGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkVdOworCXUzMiBzcGk7Cit9OworCitzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9uZXRfaWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgKnhmcm02X3R1bm5lbF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHhmcm02X3R1bm5lbF9uZXRfaWQpOworfQogCiAvKgogICogeGZybV90dW5uZWxfc3BpIHRoaW5ncyBhcmUgZm9yIGFsbG9jYXRpbmcgdW5pcXVlIGlkICgic3BpIikKQEAgLTQ2LDE5ICs2NSw4IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybTZfdHVubmVsX3NwaV9sb2NrKTsKIAotc3RhdGljIHUzMiB4ZnJtNl90dW5uZWxfc3BpOwotCi0jZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfTUlOCTEKLSNkZWZpbmUgWEZSTTZfVFVOTkVMX1NQSV9NQVgJMHhmZmZmZmZmZgotCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhmcm02X3R1bm5lbF9zcGlfa21lbSBfX3JlYWRfbW9zdGx5OwogCi0jZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFIDI1NgotI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFIDI1NgotCi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgeGZybTZfdHVubmVsX3NwaV9ieWFkZHJbWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkVdOwotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHhmcm02X3R1bm5lbF9zcGlfYnlzcGlbWEZSTTZfVFVOTkVMX1NQSV9CWVNQSV9IU0laRV07Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgeGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcih4ZnJtX2FkZHJlc3NfdCAqYWRkcikKIHsKIAl1bnNpZ25lZCBoOwpAQCAtNzYsNTAgKzg0LDE0IEBACiAJcmV0dXJuIHNwaSAlIFhGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkU7CiB9CiAKLQotc3RhdGljIGludCB4ZnJtNl90dW5uZWxfc3BpX2luaXQodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKLQlpbnQgaTsKLQotCXhmcm02X3R1bm5lbF9zcGkgPSAwOwotCXhmcm02X3R1bm5lbF9zcGlfa21lbSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ4ZnJtNl90dW5uZWxfc3BpIiwKLQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpKSwKLQkJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAotCQkJCQkJICBOVUxMKTsKLQlpZiAoIXhmcm02X3R1bm5lbF9zcGlfa21lbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkU7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKCZ4ZnJtNl90dW5uZWxfc3BpX2J5YWRkcltpXSk7Ci0JZm9yIChpID0gMDsgaSA8IFhGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkU7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKCZ4ZnJtNl90dW5uZWxfc3BpX2J5c3BpW2ldKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgeGZybTZfdHVubmVsX3NwaV9maW5pKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkU7IGkrKykgewotCQlpZiAoIWhsaXN0X2VtcHR5KCZ4ZnJtNl90dW5uZWxfc3BpX2J5YWRkcltpXSkpCi0JCQlyZXR1cm47Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFOyBpKyspIHsKLQkJaWYgKCFobGlzdF9lbXB0eSgmeGZybTZfdHVubmVsX3NwaV9ieXNwaVtpXSkpCi0JCQlyZXR1cm47Ci0JfQotCXJjdV9iYXJyaWVyKCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmcm02X3R1bm5lbF9zcGlfa21lbSk7Ci0JeGZybTZfdHVubmVsX3NwaV9rbWVtID0gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICpfX3hmcm02X3R1bm5lbF9zcGlfbG9va3VwKHhmcm1fYWRkcmVzc190ICpzYWRkcikKLXsKKwlzdHJ1Y3QgeGZybTZfdHVubmVsX25ldCAqeGZybTZfdG4gPSB4ZnJtNl90dW5uZWxfcGVybmV0KG5ldCk7CiAJc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKng2c3BpOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeDZzcGksIHBvcywKLQkJCSAgICAgJnhmcm02X3R1bm5lbF9zcGlfYnlhZGRyW3hmcm02X3R1bm5lbF9zcGlfaGFzaF9ieWFkZHIoc2FkZHIpXSwKKwkJCSAgICAgJnhmcm02X3RuLT5zcGlfYnlhZGRyW3hmcm02X3R1bm5lbF9zcGlfaGFzaF9ieWFkZHIoc2FkZHIpXSwKIAkJCSAgICAgbGlzdF9ieWFkZHIpIHsKIAkJaWYgKG1lbWNtcCgmeDZzcGktPmFkZHIsIHNhZGRyLCBzaXplb2YoeDZzcGktPmFkZHIpKSA9PSAwKQogCQkJcmV0dXJuIHg2c3BpOwpAQCAtMTI4LDEzICsxMDAsMTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHhmcm1fYWRkcmVzc190ICpzYWRkcikKK19fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJdTMyIHNwaTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQl4NnNwaSA9IF9feGZybTZfdHVubmVsX3NwaV9sb29rdXAoc2FkZHIpOworCXg2c3BpID0gX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChuZXQsIHNhZGRyKTsKIAlzcGkgPSB4NnNwaSA/IHg2c3BpLT5zcGkgOiAwOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCXJldHVybiBodG9ubChzcGkpOwpAQCAtMTQyLDE0ICsxMTQsMTUgQEAKIAogRVhQT1JUX1NZTUJPTCh4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCk7CiAKLXN0YXRpYyBpbnQgX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKHUzMiBzcGkpCitzdGF0aWMgaW50IF9feGZybTZfdHVubmVsX3NwaV9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBzcGkpCiB7CisJc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgKnhmcm02X3RuID0geGZybTZfdHVubmVsX3Blcm5ldChuZXQpOwogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAlpbnQgaW5kZXggPSB4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlzcGkoc3BpKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoeDZzcGksIHBvcywKLQkJCSAgICAgJnhmcm02X3R1bm5lbF9zcGlfYnlzcGlbaW5kZXhdLAorCQkJICAgICAmeGZybTZfdG4tPnNwaV9ieXNwaVtpbmRleF0sCiAJCQkgICAgIGxpc3RfYnlzcGkpIHsKIAkJaWYgKHg2c3BpLT5zcGkgPT0gc3BpKQogCQkJcmV0dXJuIC0xOwpAQCAtMTU3LDYxICsxMzAsNjEgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyB1MzIgX194ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHhmcm1fYWRkcmVzc190ICpzYWRkcikKK3N0YXRpYyB1MzIgX194ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogeworCXN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0ICp4ZnJtNl90biA9IHhmcm02X3R1bm5lbF9wZXJuZXQobmV0KTsKIAl1MzIgc3BpOwogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAlpbnQgaW5kZXg7CiAKLQlpZiAoeGZybTZfdHVubmVsX3NwaSA8IFhGUk02X1RVTk5FTF9TUElfTUlOIHx8Ci0JICAgIHhmcm02X3R1bm5lbF9zcGkgPj0gWEZSTTZfVFVOTkVMX1NQSV9NQVgpCi0JCXhmcm02X3R1bm5lbF9zcGkgPSBYRlJNNl9UVU5ORUxfU1BJX01JTjsKKwlpZiAoeGZybTZfdG4tPnNwaSA8IFhGUk02X1RVTk5FTF9TUElfTUlOIHx8CisJICAgIHhmcm02X3RuLT5zcGkgPj0gWEZSTTZfVFVOTkVMX1NQSV9NQVgpCisJCXhmcm02X3RuLT5zcGkgPSBYRlJNNl9UVU5ORUxfU1BJX01JTjsKIAllbHNlCi0JCXhmcm02X3R1bm5lbF9zcGkrKzsKKwkJeGZybTZfdG4tPnNwaSsrOwogCi0JZm9yIChzcGkgPSB4ZnJtNl90dW5uZWxfc3BpOyBzcGkgPD0gWEZSTTZfVFVOTkVMX1NQSV9NQVg7IHNwaSsrKSB7Ci0JCWluZGV4ID0gX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKHNwaSk7CisJZm9yIChzcGkgPSB4ZnJtNl90bi0+c3BpOyBzcGkgPD0gWEZSTTZfVFVOTkVMX1NQSV9NQVg7IHNwaSsrKSB7CisJCWluZGV4ID0gX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKG5ldCwgc3BpKTsKIAkJaWYgKGluZGV4ID49IDApCiAJCQlnb3RvIGFsbG9jX3NwaTsKIAl9Ci0JZm9yIChzcGkgPSBYRlJNNl9UVU5ORUxfU1BJX01JTjsgc3BpIDwgeGZybTZfdHVubmVsX3NwaTsgc3BpKyspIHsKLQkJaW5kZXggPSBfX3hmcm02X3R1bm5lbF9zcGlfY2hlY2soc3BpKTsKKwlmb3IgKHNwaSA9IFhGUk02X1RVTk5FTF9TUElfTUlOOyBzcGkgPCB4ZnJtNl90bi0+c3BpOyBzcGkrKykgeworCQlpbmRleCA9IF9feGZybTZfdHVubmVsX3NwaV9jaGVjayhuZXQsIHNwaSk7CiAJCWlmIChpbmRleCA+PSAwKQogCQkJZ290byBhbGxvY19zcGk7CiAJfQogCXNwaSA9IDA7CiAJZ290byBvdXQ7CiBhbGxvY19zcGk6Ci0JeGZybTZfdHVubmVsX3NwaSA9IHNwaTsKKwl4ZnJtNl90bi0+c3BpID0gc3BpOwogCXg2c3BpID0ga21lbV9jYWNoZV9hbGxvYyh4ZnJtNl90dW5uZWxfc3BpX2ttZW0sIEdGUF9BVE9NSUMpOwogCWlmICgheDZzcGkpCiAJCWdvdG8gb3V0OwogCi0JSU5JVF9SQ1VfSEVBRCgmeDZzcGktPnJjdV9oZWFkKTsKIAltZW1jcHkoJng2c3BpLT5hZGRyLCBzYWRkciwgc2l6ZW9mKHg2c3BpLT5hZGRyKSk7CiAJeDZzcGktPnNwaSA9IHNwaTsKIAlhdG9taWNfc2V0KCZ4NnNwaS0+cmVmY250LCAxKTsKIAotCWhsaXN0X2FkZF9oZWFkX3JjdSgmeDZzcGktPmxpc3RfYnlzcGksICZ4ZnJtNl90dW5uZWxfc3BpX2J5c3BpW2luZGV4XSk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZ4NnNwaS0+bGlzdF9ieXNwaSwgJnhmcm02X3RuLT5zcGlfYnlzcGlbaW5kZXhdKTsKIAogCWluZGV4ID0geGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcihzYWRkcik7Ci0JaGxpc3RfYWRkX2hlYWRfcmN1KCZ4NnNwaS0+bGlzdF9ieWFkZHIsICZ4ZnJtNl90dW5uZWxfc3BpX2J5YWRkcltpbmRleF0pOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmeDZzcGktPmxpc3RfYnlhZGRyLCAmeGZybTZfdG4tPnNwaV9ieWFkZHJbaW5kZXhdKTsKIG91dDoKIAlyZXR1cm4gc3BpOwogfQogCi1fX2JlMzIgeGZybTZfdHVubmVsX2FsbG9jX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCitfX2JlMzIgeGZybTZfdHVubmVsX2FsbG9jX3NwaShzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJdTMyIHNwaTsKIAogCXNwaW5fbG9ja19iaCgmeGZybTZfdHVubmVsX3NwaV9sb2NrKTsKLQl4NnNwaSA9IF9feGZybTZfdHVubmVsX3NwaV9sb29rdXAoc2FkZHIpOworCXg2c3BpID0gX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChuZXQsIHNhZGRyKTsKIAlpZiAoeDZzcGkpIHsKIAkJYXRvbWljX2luYygmeDZzcGktPnJlZmNudCk7CiAJCXNwaSA9IHg2c3BpLT5zcGk7CiAJfSBlbHNlCi0JCXNwaSA9IF9feGZybTZfdHVubmVsX2FsbG9jX3NwaShzYWRkcik7CisJCXNwaSA9IF9feGZybTZfdHVubmVsX2FsbG9jX3NwaShuZXQsIHNhZGRyKTsKIAlzcGluX3VubG9ja19iaCgmeGZybTZfdHVubmVsX3NwaV9sb2NrKTsKIAogCXJldHVybiBodG9ubChzcGkpOwpAQCAtMjI1LDE1ICsxOTgsMTYgQEAKIAkJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSwgcmN1X2hlYWQpKTsKIH0KIAotdm9pZCB4ZnJtNl90dW5uZWxfZnJlZV9zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQordm9pZCB4ZnJtNl90dW5uZWxfZnJlZV9zcGkoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCiB7CisJc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgKnhmcm02X3RuID0geGZybTZfdHVubmVsX3Blcm5ldChuZXQpOwogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCAqbjsKIAogCXNwaW5fbG9ja19iaCgmeGZybTZfdHVubmVsX3NwaV9sb2NrKTsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeDZzcGksIHBvcywgbiwKLQkJCQkgICZ4ZnJtNl90dW5uZWxfc3BpX2J5YWRkclt4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlhZGRyKHNhZGRyKV0sCisJCQkJICAmeGZybTZfdG4tPnNwaV9ieWFkZHJbeGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcihzYWRkcildLAogCQkJCSAgbGlzdF9ieWFkZHIpCiAJewogCQlpZiAobWVtY21wKCZ4NnNwaS0+YWRkciwgc2FkZHIsIHNpemVvZih4NnNwaS0+YWRkcikpID09IDApIHsKQEAgLTI2MywxMCArMjM3LDExIEBACiAKIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCV9fYmUzMiBzcGk7CiAKLQlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCgoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5zYWRkcik7CisJc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5zYWRkcik7CiAJcmV0dXJuIHhmcm02X3Jjdl9zcGkoc2tiLCBJUFBST1RPX0lQVjYsIHNwaSkgPiAwID8gOiAwOwogfQogCkBAIC0zMjYsNyArMzAxLDkgQEAKIAogc3RhdGljIHZvaWQgeGZybTZfdHVubmVsX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7Ci0JeGZybTZfdHVubmVsX2ZyZWVfc3BpKCh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5wcm9wcy5zYWRkcik7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOworCisJeGZybTZfdHVubmVsX2ZyZWVfc3BpKG5ldCwgKHhmcm1fYWRkcmVzc190ICopJngtPnByb3BzLnNhZGRyKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX3R5cGUgeGZybTZfdHVubmVsX3R5cGUgPSB7CkBAIC0zNTEsMzQgKzMyOCw3MyBAQAogCS5wcmlvcml0eQk9IDIsCiB9OwogCitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfdHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgeGZybTZfdHVubmVsX25ldCAqeGZybTZfdG4gPSB4ZnJtNl90dW5uZWxfcGVybmV0KG5ldCk7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZ4ZnJtNl90bi0+c3BpX2J5YWRkcltpXSk7CisJZm9yIChpID0gMDsgaSA8IFhGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZ4ZnJtNl90bi0+c3BpX2J5c3BpW2ldKTsKKwl4ZnJtNl90bi0+c3BpID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm02X3R1bm5lbF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgeGZybTZfdHVubmVsX25ldF9vcHMgPSB7CisJLmluaXQJPSB4ZnJtNl90dW5uZWxfbmV0X2luaXQsCisJLmV4aXQJPSB4ZnJtNl90dW5uZWxfbmV0X2V4aXQsCisJLmlkCT0gJnhmcm02X3R1bm5lbF9uZXRfaWQsCisJLnNpemUJPSBzaXplb2Yoc3RydWN0IHhmcm02X3R1bm5lbF9uZXQpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgeGZybTZfdHVubmVsX2luaXQodm9pZCkKIHsKLQlpZiAoeGZybV9yZWdpc3Rlcl90eXBlKCZ4ZnJtNl90dW5uZWxfdHlwZSwgQUZfSU5FVDYpIDwgMCkKLQkJZ290byBlcnI7Ci0JaWYgKHhmcm02X3R1bm5lbF9yZWdpc3RlcigmeGZybTZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQ2KSkKLQkJZ290byB1bnJlZzsKLQlpZiAoeGZybTZfdHVubmVsX3JlZ2lzdGVyKCZ4ZnJtNDZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQpKQotCQlnb3RvIGRlcmVnNjsKLQlpZiAoeGZybTZfdHVubmVsX3NwaV9pbml0KCkgPCAwKQotCQlnb3RvIGRlcmVnNDY7CisJaW50IHJ2OworCisJeGZybTZfdHVubmVsX3NwaV9rbWVtID0ga21lbV9jYWNoZV9jcmVhdGUoInhmcm02X3R1bm5lbF9zcGkiLAorCQkJCQkJICBzaXplb2Yoc3RydWN0IHhmcm02X3R1bm5lbF9zcGkpLAorCQkJCQkJICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJCQkgIE5VTEwpOworCWlmICgheGZybTZfdHVubmVsX3NwaV9rbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlydiA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnhmcm02X3R1bm5lbF9uZXRfb3BzKTsKKwlpZiAocnYgPCAwKQorCQlnb3RvIG91dF9wZXJuZXQ7CisJcnYgPSB4ZnJtX3JlZ2lzdGVyX3R5cGUoJnhmcm02X3R1bm5lbF90eXBlLCBBRl9JTkVUNik7CisJaWYgKHJ2IDwgMCkKKwkJZ290byBvdXRfdHlwZTsKKwlydiA9IHhmcm02X3R1bm5lbF9yZWdpc3RlcigmeGZybTZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQ2KTsKKwlpZiAocnYgPCAwKQorCQlnb3RvIG91dF94ZnJtNjsKKwlydiA9IHhmcm02X3R1bm5lbF9yZWdpc3RlcigmeGZybTQ2X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUKTsKKwlpZiAocnYgPCAwKQorCQlnb3RvIG91dF94ZnJtNDY7CiAJcmV0dXJuIDA7CiAKLWRlcmVnNDY6Ci0JeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJnhmcm00Nl90dW5uZWxfaGFuZGxlciwgQUZfSU5FVCk7Ci1kZXJlZzY6CitvdXRfeGZybTQ2OgogCXhmcm02X3R1bm5lbF9kZXJlZ2lzdGVyKCZ4ZnJtNl90dW5uZWxfaGFuZGxlciwgQUZfSU5FVDYpOwotdW5yZWc6CitvdXRfeGZybTY6CiAJeGZybV91bnJlZ2lzdGVyX3R5cGUoJnhmcm02X3R1bm5lbF90eXBlLCBBRl9JTkVUNik7Ci1lcnI6Ci0JcmV0dXJuIC1FQUdBSU47CitvdXRfdHlwZToKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnhmcm02X3R1bm5lbF9uZXRfb3BzKTsKK291dF9wZXJuZXQ6CisJa21lbV9jYWNoZV9kZXN0cm95KHhmcm02X3R1bm5lbF9zcGlfa21lbSk7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgeGZybTZfdHVubmVsX2Zpbmkodm9pZCkKIHsKLQl4ZnJtNl90dW5uZWxfc3BpX2ZpbmkoKTsKIAl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmeGZybTQ2X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUKTsKIAl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmeGZybTZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQ2KTsKIAl4ZnJtX3VucmVnaXN0ZXJfdHlwZSgmeGZybTZfdHVubmVsX3R5cGUsIEFGX0lORVQ2KTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnhmcm02X3R1bm5lbF9uZXRfb3BzKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koeGZybTZfdHVubmVsX3NwaV9rbWVtKTsKIH0KIAogbW9kdWxlX2luaXQoeGZybTZfdHVubmVsX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lweC9pcHhfcHJvYy5jIGIvbmV0L2lweC9pcHhfcHJvYy5jCmluZGV4IDU3NjE3ODQuLjI2YjViZmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvaXB4X3Byb2MuYworKysgYi9uZXQvaXB4L2lweF9wcm9jLmMKQEAgLTEzLDQ1ICsxMywxNSBAQAogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bmV0L2lweC5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaXB4X2dldF9pbnRlcmZhY2VfaWR4KGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGlweF9pbnRlcmZhY2UgKmk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZpcHhfaW50ZXJmYWNlcywgbm9kZSkKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gb3V0OwotCWkgPSBOVUxMOwotb3V0OgotCXJldHVybiBpOwotfQotCi1zdGF0aWMgc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweF9pbnRlcmZhY2VzX25leHQoc3RydWN0IGlweF9pbnRlcmZhY2UgKmkpCi17Ci0Jc3RydWN0IGlweF9pbnRlcmZhY2UgKnJjID0gTlVMTDsKLQotCWlmIChpLT5ub2RlLm5leHQgIT0gJmlweF9pbnRlcmZhY2VzKQotCQlyYyA9IGxpc3RfZW50cnkoaS0+bm9kZS5uZXh0LCBzdHJ1Y3QgaXB4X2ludGVyZmFjZSwgbm9kZSk7Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgdm9pZCAqaXB4X3NlcV9pbnRlcmZhY2Vfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWxvZmZfdCBsID0gKnBvczsKLQogCXNwaW5fbG9ja19iaCgmaXB4X2ludGVyZmFjZXNfbG9jayk7Ci0JcmV0dXJuIGwgPyBpcHhfZ2V0X2ludGVyZmFjZV9pZHgoLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnRfaGVhZCgmaXB4X2ludGVyZmFjZXMsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqaXB4X3NlcV9pbnRlcmZhY2VfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGlweF9pbnRlcmZhY2UgKmk7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlpID0gaXB4X2ludGVyZmFjZXNfaGVhZCgpOwotCWVsc2UKLQkJaSA9IGlweF9pbnRlcmZhY2VzX25leHQodik7Ci0JcmV0dXJuIGk7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlweF9pbnRlcmZhY2VzLCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcHhfc2VxX2ludGVyZmFjZV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtNjMsNyArMzMsNyBAQAogewogCXN0cnVjdCBpcHhfaW50ZXJmYWNlICppOwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHYgPT0gJmlweF9pbnRlcmZhY2VzKSB7CiAJCXNlcV9wdXRzKHNlcSwgIk5ldHdvcmsgICAgTm9kZV9BZGRyZXNzICAgUHJpbWFyeSAgRGV2aWNlICAgICAiCiAJCQkgICAgICAiRnJhbWVfVHlwZSIpOwogI2lmZGVmIElQWF9SRUZDTlRfREVCVUcKQEAgLTczLDcgKzQzLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaSA9IHY7CisJaSA9IGxpc3RfZW50cnkodiwgc3RydWN0IGlweF9pbnRlcmZhY2UsIG5vZGUpOwogCXNlcV9wcmludGYoc2VxLCAiJTA4bFggICAiLCAodW5zaWduZWQgbG9uZyBpbnQpbnRvaGwoaS0+aWZfbmV0bnVtKSk7CiAJc2VxX3ByaW50ZihzZXEsICIlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlggICAiLAogCQkJaS0+aWZfbm9kZVswXSwgaS0+aWZfbm9kZVsxXSwgaS0+aWZfbm9kZVsyXSwKQEAgLTg5LDUzICs1OSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlweF9yb3V0ZSAqaXB4X3JvdXRlc19oZWFkKHZvaWQpCi17Ci0Jc3RydWN0IGlweF9yb3V0ZSAqcmMgPSBOVUxMOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZpcHhfcm91dGVzKSkKLQkJcmMgPSBsaXN0X2VudHJ5KGlweF9yb3V0ZXMubmV4dCwgc3RydWN0IGlweF9yb3V0ZSwgbm9kZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgc3RydWN0IGlweF9yb3V0ZSAqaXB4X3JvdXRlc19uZXh0KHN0cnVjdCBpcHhfcm91dGUgKnIpCi17Ci0Jc3RydWN0IGlweF9yb3V0ZSAqcmMgPSBOVUxMOwotCi0JaWYgKHItPm5vZGUubmV4dCAhPSAmaXB4X3JvdXRlcykKLQkJcmMgPSBsaXN0X2VudHJ5KHItPm5vZGUubmV4dCwgc3RydWN0IGlweF9yb3V0ZSwgbm9kZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXB4X3JvdXRlICppcHhfZ2V0X3JvdXRlX2lkeChsb2ZmX3QgcG9zKQotewotCXN0cnVjdCBpcHhfcm91dGUgKnI7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZpcHhfcm91dGVzLCBub2RlKQotCQlpZiAoIXBvcy0tKQotCQkJZ290byBvdXQ7Ci0JciA9IE5VTEw7Ci1vdXQ6Ci0JcmV0dXJuIHI7Ci19Ci0KIHN0YXRpYyB2b2lkICppcHhfc2VxX3JvdXRlX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlsb2ZmX3QgbCA9ICpwb3M7CiAJcmVhZF9sb2NrX2JoKCZpcHhfcm91dGVzX2xvY2spOwotCXJldHVybiBsID8gaXB4X2dldF9yb3V0ZV9pZHgoLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnRfaGVhZCgmaXB4X3JvdXRlcywgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICppcHhfc2VxX3JvdXRlX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBpcHhfcm91dGUgKnI7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyID0gaXB4X3JvdXRlc19oZWFkKCk7Ci0JZWxzZQotCQlyID0gaXB4X3JvdXRlc19uZXh0KHYpOwotCXJldHVybiByOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpcHhfcm91dGVzLCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcHhfc2VxX3JvdXRlX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0xNDcsMTEgKzc5LDEzIEBACiB7CiAJc3RydWN0IGlweF9yb3V0ZSAqcnQ7CiAKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKKwlpZiAodiA9PSAmaXB4X3JvdXRlcykgewogCQlzZXFfcHV0cyhzZXEsICJOZXR3b3JrICAgIFJvdXRlcl9OZXQgICBSb3V0ZXJfTm9kZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlydCA9IHY7CisKKwlydCA9IGxpc3RfZW50cnkodiwgc3RydWN0IGlweF9yb3V0ZSwgbm9kZSk7CisKIAlzZXFfcHJpbnRmKHNlcSwgIiUwOGxYICAgIiwgKHVuc2lnbmVkIGxvbmcgaW50KW50b2hsKHJ0LT5pcl9uZXQpKTsKIAlpZiAocnQtPmlyX3JvdXRlZCkKIAkJc2VxX3ByaW50ZihzZXEsICIlMDhsWCAgICAgJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYXG4iLApAQCAtMjI2LDkgKzE2MCw5IEBACiAJc3Bpbl91bmxvY2tfYmgoJmktPmlmX3NrbGlzdF9sb2NrKTsKIAlzayA9IE5VTEw7CiAJZm9yICg7OykgewotCQlpID0gaXB4X2ludGVyZmFjZXNfbmV4dChpKTsKLQkJaWYgKCFpKQorCQlpZiAoaS0+bm9kZS5uZXh0ID09ICZpcHhfaW50ZXJmYWNlcykKIAkJCWJyZWFrOworCQlpID0gbGlzdF9lbnRyeShpLT5ub2RlLm5leHQsIHN0cnVjdCBpcHhfaW50ZXJmYWNlLCBub2RlKTsKIAkJc3Bpbl9sb2NrX2JoKCZpLT5pZl9za2xpc3RfbG9jayk7CiAJCWlmICghaGxpc3RfZW1wdHkoJmktPmlmX3NrbGlzdCkpIHsKIAkJCXNrID0gc2tfaGVhZCgmaS0+aWZfc2tsaXN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCmluZGV4IDgxMTk4NGQuLjhiODVkNzcgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwpAQCAtNDk2LDkgKzQ5Niw2IEBACiAKIAlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCi0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CiAKQEAgLTEwMDcsOSArMTAwNCw2IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKIAotCWlmICghdHR5KQotCQlyZXR1cm47Ci0KIAkvKiBpcmNvbW1fdHR5X2ZsdXNoX2J1ZmZlcih0dHkpOyAqLwogCWlyY29tbV90dHlfc2h1dGRvd24oc2VsZik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggMzE1ZWFkMy4uZTQ4NmRjOCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTExMjgsMzQgKzExMjgsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgKmlybGFuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaW50IGkgPSAxOwotCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKLQogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZWxmLCAmaXJsYW5zLCBkZXZfbGlzdCkgewotCQlpZiAoKnBvcyA9PSBpKQotCQkJcmV0dXJuIHNlbGY7Ci0JCSsraTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0X2hlYWQoJmlybGFucywgKnBvcyk7CiB9CiAKIC8qIFJldHVybiBlbnRyeSBhZnRlciB2LCBhbmQgaW5jcmVtZW50IHBvcyAqLwogc3RhdGljIHZvaWQgKmlybGFuX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpueHQ7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlueHQgPSBpcmxhbnMubmV4dDsKLQllbHNlCi0JCW54dCA9ICgoc3RydWN0IGlybGFuX2NiICopdiktPmRldl9saXN0Lm5leHQ7Ci0KLQlyZXR1cm4gKG54dCA9PSAmaXJsYW5zKSA/IE5VTEwKLQkJOiBsaXN0X2VudHJ5KG54dCwgc3RydWN0IGlybGFuX2NiLCBkZXZfbGlzdCk7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlybGFucywgcG9zKTsKIH0KIAogLyogRW5kIG9mIHJlYWRpbmcgL3Byb2MgZmlsZSAqLwpAQCAtMTE3MCwxMCArMTE1MCwxMCBAQAogICovCiBzdGF0aWMgaW50IGlybGFuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwlpZiAodiA9PSAmaXJsYW5zKQogCQlzZXFfcHV0cyhzZXEsICJJckxBTiBpbnN0YW5jZXM6XG4iKTsKIAllbHNlIHsKLQkJc3RydWN0IGlybGFuX2NiICpzZWxmID0gdjsKKwkJc3RydWN0IGlybGFuX2NiICpzZWxmID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgaXJsYW5fY2IsIGRldl9saXN0KTsKIAogCQlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCQlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuIC0xOyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IGQzNDAxMTAuLjk2MTZjMzIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0zMjEsMTQgKzMyMSwxNSBAQAogCQkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwogCQlJUkRBX1dBUk5JTkcoIlByb21pc2N1b3VzIG1vZGUgbm90IGltcGxlbWVudGVkIGJ5IElyTEFOIVxuIik7CiAJfQotCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCBkZXYtPm1jX2NvdW50ID4gSFdfTUFYX0FERFJTKSB7CisJZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJCSBuZXRkZXZfbWNfY291bnQoZGV2KSA+IEhXX01BWF9BRERSUykgewogCQkvKiBEaXNhYmxlIHByb21pc2N1b3VzIG1vZGUsIHVzZSBub3JtYWwgbW9kZS4gKi8KIAkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgU2V0dGluZyBtdWx0aWNhc3QgZmlsdGVyXG4iLCBfX2Z1bmNfXyApOwogCQkvKiBoYXJkd2FyZV9zZXRfZmlsdGVyKE5VTEwpOyAqLwogCiAJCWlybGFuX3NldF9tdWx0aWNhc3RfZmlsdGVyKHNlbGYsIFRSVUUpOwogCX0KLQllbHNlIGlmIChkZXYtPm1jX2NvdW50KSB7CisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCUlSREFfREVCVUcoNCwgIiVzKCksIFNldHRpbmcgbXVsdGljYXN0IGZpbHRlclxuIiwgX19mdW5jX18gKTsKIAkJLyogV2FsayB0aGUgYWRkcmVzcyBsaXN0LCBhbmQgbG9hZCB0aGUgZmlsdGVyICovCiAJCS8qIGhhcmR3YXJlX3NldF9maWx0ZXIoZGV2LT5tY19saXN0KTsgKi8KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0bGluay5jIGIvbmV0L2lyZGEvaXJuZXRsaW5rLmMKaW5kZXggNDc2YjMwNy4uNjliNWI3NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXRsaW5rLmMKKysrIGIvbmV0L2lyZGEvaXJuZXRsaW5rLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBpcmRhX25sX3BvbGljeVtJUkRBX05MX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXJkYV9ubF9wb2xpY3lbSVJEQV9OTF9BVFRSX01BWCArIDFdID0gewogCVtJUkRBX05MX0FUVFJfSUZOQU1FXSA9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORywKIAkJCQkgIC5sZW4gPSBJRk5BTVNJWi0xIH0sCiAJW0lSREFfTkxfQVRUUl9NT0RFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA1MzlmNDNiLi4zNjg3MDc4IDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTQxLDEwICs0MSwxMCBAQAogCXN0cnVjdCBobGlzdF9oZWFkIHRhYmxlOwogCWF0b21pY190IHNvY2tzX25yOwogfTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChwZmtleV90YWJsZV93YWl0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBma2V5X3RhYmxlX2xvY2spOwotc3RhdGljIGF0b21pY190IHBma2V5X3RhYmxlX3VzZXJzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBma2V5X211dGV4KTsKIAorI2RlZmluZSBEVU1NWV9NQVJLIDAKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tYXJrIGR1bW15X21hcmsgPSB7MCwgMH07CiBzdHJ1Y3QgcGZrZXlfc29jayB7CiAJLyogc3RydWN0IHNvY2sgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHN0cnVjdCBwZmtleV9zb2NrICovCiAJc3RydWN0IHNvY2sJc2s7CkBAIC0xMDgsNTAgKzEwOCw2IEBACiAJYXRvbWljX2RlYygmbmV0X3Bma2V5LT5zb2Nrc19ucik7CiB9CiAKLXN0YXRpYyB2b2lkIHBma2V5X3RhYmxlX2dyYWIodm9pZCkKLXsKLQl3cml0ZV9sb2NrX2JoKCZwZmtleV90YWJsZV9sb2NrKTsKLQotCWlmIChhdG9taWNfcmVhZCgmcGZrZXlfdGFibGVfdXNlcnMpKSB7Ci0JCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmcGZrZXlfdGFibGVfd2FpdCwgJndhaXQpOwotCQlmb3IoOzspIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWlmIChhdG9taWNfcmVhZCgmcGZrZXlfdGFibGVfdXNlcnMpID09IDApCi0JCQkJYnJlYWs7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnBma2V5X3RhYmxlX2xvY2spOwotCQkJc2NoZWR1bGUoKTsKLQkJCXdyaXRlX2xvY2tfYmgoJnBma2V5X3RhYmxlX2xvY2spOwotCQl9Ci0KLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGZrZXlfdGFibGVfd2FpdCwgJndhaXQpOwotCX0KLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBwZmtleV90YWJsZV91bmdyYWIodm9pZCkKLXsKLQl3cml0ZV91bmxvY2tfYmgoJnBma2V5X3RhYmxlX2xvY2spOwotCXdha2VfdXAoJnBma2V5X3RhYmxlX3dhaXQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBma2V5X2xvY2tfdGFibGUodm9pZCkKLXsKLQkvKiByZWFkX2xvY2soKSBzeW5jaHJvbml6ZXMgdXMgdG8gcGZrZXlfdGFibGVfZ3JhYiAqLwotCi0JcmVhZF9sb2NrKCZwZmtleV90YWJsZV9sb2NrKTsKLQlhdG9taWNfaW5jKCZwZmtleV90YWJsZV91c2Vycyk7Ci0JcmVhZF91bmxvY2soJnBma2V5X3RhYmxlX2xvY2spOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBma2V5X3VubG9ja190YWJsZSh2b2lkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZmtleV90YWJsZV91c2VycykpCi0JCXdha2VfdXAoJnBma2V5X3RhYmxlX3dhaXQpOwotfQotCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBma2V5X29wczsKIAogc3RhdGljIHZvaWQgcGZrZXlfaW5zZXJ0KHN0cnVjdCBzb2NrICpzaykKQEAgLTE1OSwxNiArMTE1LDE2IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBuZXRuc19wZmtleSAqbmV0X3Bma2V5ID0gbmV0X2dlbmVyaWMobmV0LCBwZmtleV9uZXRfaWQpOwogCi0JcGZrZXlfdGFibGVfZ3JhYigpOwotCXNrX2FkZF9ub2RlKHNrLCAmbmV0X3Bma2V5LT50YWJsZSk7Ci0JcGZrZXlfdGFibGVfdW5ncmFiKCk7CisJbXV0ZXhfbG9jaygmcGZrZXlfbXV0ZXgpOworCXNrX2FkZF9ub2RlX3JjdShzaywgJm5ldF9wZmtleS0+dGFibGUpOworCW11dGV4X3VubG9jaygmcGZrZXlfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBwZmtleV9yZW1vdmUoc3RydWN0IHNvY2sgKnNrKQogewotCXBma2V5X3RhYmxlX2dyYWIoKTsKLQlza19kZWxfbm9kZV9pbml0KHNrKTsKLQlwZmtleV90YWJsZV91bmdyYWIoKTsKKwltdXRleF9sb2NrKCZwZmtleV9tdXRleCk7CisJc2tfZGVsX25vZGVfaW5pdF9yY3Uoc2spOworCW11dGV4X3VubG9jaygmcGZrZXlfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IHByb3RvIGtleV9wcm90byA9IHsKQEAgLTIyMyw2ICsxNzksOCBAQAogCXNvY2tfb3JwaGFuKHNrKTsKIAlzb2NrLT5zayA9IE5VTEw7CiAJc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfd3JpdGVfcXVldWUpOworCisJc3luY2hyb25pemVfcmN1KCk7CiAJc29ja19wdXQoc2spOwogCiAJcmV0dXJuIDA7CkBAIC0yNzcsOCArMjM1LDggQEAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwZmtleV9sb2NrX3RhYmxlKCk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZuZXRfcGZrZXktPnRhYmxlKSB7CisJcmN1X3JlYWRfbG9jaygpOworCXNrX2Zvcl9lYWNoX3JjdShzaywgbm9kZSwgJm5ldF9wZmtleS0+dGFibGUpIHsKIAkJc3RydWN0IHBma2V5X3NvY2sgKnBmayA9IHBma2V5X3NrKHNrKTsKIAkJaW50IGVycjI7CiAKQEAgLTMwOSw3ICsyNjcsNyBAQAogCQlpZiAoKGJyb2FkY2FzdF9mbGFncyAmIEJST0FEQ0FTVF9SRUdJU1RFUkVEKSAmJiBlcnIpCiAJCQllcnIgPSBlcnIyOwogCX0KLQlwZmtleV91bmxvY2tfdGFibGUoKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChvbmVfc2sgIT0gTlVMTCkKIAkJZXJyID0gcGZrZXlfYnJvYWRjYXN0X29uZShza2IsICZza2IyLCBhbGxvY2F0aW9uLCBvbmVfc2spOwpAQCAtNjkxLDcgKzY0OSw3IEBACiAJaWYgKCF4YWRkcikKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4geGZybV9zdGF0ZV9sb29rdXAobmV0LCB4YWRkciwgc2EtPnNhZGJfc2Ffc3BpLCBwcm90bywgZmFtaWx5KTsKKwlyZXR1cm4geGZybV9zdGF0ZV9sb29rdXAobmV0LCBEVU1NWV9NQVJLLCB4YWRkciwgc2EtPnNhZGJfc2Ffc3BpLCBwcm90bywgZmFtaWx5KTsKIH0KIAogI2RlZmluZSBQRktFWV9BTElHTjgoYSkgKDEgKyAoKChhKSAtIDEpIHwgKDggLSAxKSkpCkBAIC0xMzYwLDcgKzEzMTgsNyBAQAogCX0KIAogCWlmIChoZHItPnNhZGJfbXNnX3NlcSkgewotCQl4ID0geGZybV9maW5kX2FjcV9ieXNlcShuZXQsIGhkci0+c2FkYl9tc2dfc2VxKTsKKwkJeCA9IHhmcm1fZmluZF9hY3FfYnlzZXEobmV0LCBEVU1NWV9NQVJLLCBoZHItPnNhZGJfbXNnX3NlcSk7CiAJCWlmICh4ICYmIHhmcm1fYWRkcl9jbXAoJngtPmlkLmRhZGRyLCB4ZGFkZHIsIGZhbWlseSkpIHsKIAkJCXhmcm1fc3RhdGVfcHV0KHgpOwogCQkJeCA9IE5VTEw7CkBAIC0xMzY4LDcgKzEzMjYsNyBAQAogCX0KIAogCWlmICgheCkKLQkJeCA9IHhmcm1fZmluZF9hY3EobmV0LCBtb2RlLCByZXFpZCwgcHJvdG8sIHhkYWRkciwgeHNhZGRyLCAxLCBmYW1pbHkpOworCQl4ID0geGZybV9maW5kX2FjcShuZXQsICZkdW1teV9tYXJrLCBtb2RlLCByZXFpZCwgcHJvdG8sIHhkYWRkciwgeHNhZGRyLCAxLCBmYW1pbHkpOwogCiAJaWYgKHggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xNDE3LDcgKzEzNzUsNyBAQAogCWlmIChoZHItPnNhZGJfbXNnX3NlcSA9PSAwIHx8IGhkci0+c2FkYl9tc2dfZXJybm8gPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQl4ID0geGZybV9maW5kX2FjcV9ieXNlcShuZXQsIGhkci0+c2FkYl9tc2dfc2VxKTsKKwl4ID0geGZybV9maW5kX2FjcV9ieXNlcShuZXQsIERVTU1ZX01BUkssIGhkci0+c2FkYl9tc2dfc2VxKTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIApAQCAtMTcxMiw2ICsxNjcwLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdW5pY2FzdF9mbHVzaF9yZXNwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNhZGJfbXNnICppaGRyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNhZGJfbXNnICpoZHI7CisKKwlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykgKyAxNiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PQlVGUzsKKworCWhkciA9IChzdHJ1Y3Qgc2FkYl9tc2cgKikgc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3Qgc2FkYl9tc2cpKTsKKwltZW1jcHkoaGRyLCBpaGRyLCBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSk7CisJaGRyLT5zYWRiX21zZ19lcnJubyA9ICh1aW50OF90KSAwOworCWhkci0+c2FkYl9tc2dfbGVuID0gKHNpemVvZihzdHJ1Y3Qgc2FkYl9tc2cpIC8gc2l6ZW9mKHVpbnQ2NF90KSk7CisKKwlyZXR1cm4gcGZrZXlfYnJvYWRjYXN0KHNrYiwgR0ZQX0FUT01JQywgQlJPQURDQVNUX09ORSwgc2ssIHNvY2tfbmV0KHNrKSk7Cit9CisKIHN0YXRpYyBpbnQga2V5X25vdGlmeV9zYV9mbHVzaChzdHJ1Y3Qga21fZXZlbnQgKmMpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE3NDAsNyArMTcxNSw3IEBACiAJdW5zaWduZWQgcHJvdG87CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJc3RydWN0IHhmcm1fYXVkaXQgYXVkaXRfaW5mbzsKLQlpbnQgZXJyOworCWludCBlcnIsIGVycjI7CiAKIAlwcm90byA9IHBma2V5X3NhdHlwZTJwcm90byhoZHItPnNhZGJfbXNnX3NhdHlwZSk7CiAJaWYgKHByb3RvID09IDApCkBAIC0xNzUwLDggKzE3MjUsMTMgQEAKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IGF1ZGl0X2dldF9zZXNzaW9uaWQoY3VycmVudCk7CiAJYXVkaXRfaW5mby5zZWNpZCA9IDA7CiAJZXJyID0geGZybV9zdGF0ZV9mbHVzaChuZXQsIHByb3RvLCAmYXVkaXRfaW5mbyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwllcnIyID0gdW5pY2FzdF9mbHVzaF9yZXNwKHNrLCBoZHIpOworCWlmIChlcnIgfHwgZXJyMikgeworCQlpZiAoZXJyID09IC1FU1JDSCkgLyogZW1wdHkgdGFibGUgLSBnbyBxdWlldGx5ICovCisJCQllcnIgPSAwOworCQlyZXR1cm4gZXJyID8gZXJyIDogZXJyMjsKKwl9CisKIAljLmRhdGEucHJvdG8gPSBwcm90bzsKIAljLnNlcSA9IGhkci0+c2FkYl9tc2dfc2VxOwogCWMucGlkID0gaGRyLT5zYWRiX21zZ19waWQ7CkBAIC0yMzQ2LDcgKzIzMjYsNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwKKwl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChuZXQsIERVTU1ZX01BUkssIFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwKIAkJCQkgICBwb2wtPnNhZGJfeF9wb2xpY3lfZGlyIC0gMSwgJnNlbCwgcG9sX2N0eCwKIAkJCQkgICAxLCAmZXJyKTsKIAlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHBvbF9jdHgpOwpAQCAtMjU5NCw4ICsyNTc0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZWxldGUgPSAoaGRyLT5zYWRiX21zZ190eXBlID09IFNBREJfWF9TUERERUxFVEUyKTsKLQl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCBYRlJNX1BPTElDWV9UWVBFX01BSU4sIGRpciwKLQkJCSAgICAgIHBvbC0+c2FkYl94X3BvbGljeV9pZCwgZGVsZXRlLCAmZXJyKTsKKwl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCBEVU1NWV9NQVJLLCBYRlJNX1BPTElDWV9UWVBFX01BSU4sCisJCQkgICAgICBkaXIsIHBvbC0+c2FkYl94X3BvbGljeV9pZCwgZGVsZXRlLCAmZXJyKTsKIAlpZiAoeHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTI3MDYsMTQgKzI2ODYsMTkgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJc3RydWN0IHhmcm1fYXVkaXQgYXVkaXRfaW5mbzsKLQlpbnQgZXJyOworCWludCBlcnIsIGVycjI7CiAKIAlhdWRpdF9pbmZvLmxvZ2ludWlkID0gYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQpOwogCWF1ZGl0X2luZm8uc2Vzc2lvbmlkID0gYXVkaXRfZ2V0X3Nlc3Npb25pZChjdXJyZW50KTsKIAlhdWRpdF9pbmZvLnNlY2lkID0gMDsKIAllcnIgPSB4ZnJtX3BvbGljeV9mbHVzaChuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwgJmF1ZGl0X2luZm8pOwotCWlmIChlcnIpCisJZXJyMiA9IHVuaWNhc3RfZmx1c2hfcmVzcChzaywgaGRyKTsKKwlpZiAoZXJyIHx8IGVycjIpIHsKKwkJaWYgKGVyciA9PSAtRVNSQ0gpIC8qIGVtcHR5IHRhYmxlIC0gb2xkIHNpbGVudCBiZWhhdmlvciAqLworCQkJcmV0dXJuIDA7CiAJCXJldHVybiBlcnI7CisJfQorCiAJYy5kYXRhLnR5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CiAJYy5ldmVudCA9IFhGUk1fTVNHX0ZMVVNIUE9MSUNZOwogCWMucGlkID0gaGRyLT5zYWRiX21zZ19waWQ7CkBAIC0zMDE5LDEyICszMDA0LDExIEBACiBzdGF0aWMgdTMyIGdldF9hY3FzZXEodm9pZCkKIHsKIAl1MzIgcmVzOwotCXN0YXRpYyB1MzIgYWNxc2VxOwotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWNxc2VxX2xvY2spOworCXN0YXRpYyBhdG9taWNfdCBhY3FzZXE7CiAKLQlzcGluX2xvY2tfYmgoJmFjcXNlcV9sb2NrKTsKLQlyZXMgPSAoKythY3FzZXEgPyA6ICsrYWNxc2VxKTsKLQlzcGluX3VubG9ja19iaCgmYWNxc2VxX2xvY2spOworCWRvIHsKKwkJcmVzID0gYXRvbWljX2luY19yZXR1cm4oJmFjcXNlcSk7CisJfSB3aGlsZSAoIXJlcyk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMzY1NSw5ICszNjM5LDggQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGludCBwZmtleV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7CisJc3RydWN0IHNvY2sgKnMgPSBza19lbnRyeSh2KTsKIAotCXMgPSAoc3RydWN0IHNvY2sgKil2OwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3ByaW50ZihmICwic2sgICAgICAgUmVmQ250IFJtZW0gICBXbWVtICAgVXNlciAgIElub2RlXG4iKTsKIAllbHNlCkBAIC0zNjc2LDE5ICszNjU5LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoZik7CiAJc3RydWN0IG5ldG5zX3Bma2V5ICpuZXRfcGZrZXkgPSBuZXRfZ2VuZXJpYyhuZXQsIHBma2V5X25ldF9pZCk7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JbG9mZl90IHBvcyA9ICpwcG9zOwogCi0JcmVhZF9sb2NrKCZwZmtleV90YWJsZV9sb2NrKTsKLQlpZiAocG9zID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0KLQlza19mb3JfZWFjaChzLCBub2RlLCAmbmV0X3Bma2V5LT50YWJsZSkKLQkJaWYgKHBvcy0tID09IDEpCi0JCQlyZXR1cm4gczsKLQotCXJldHVybiBOVUxMOworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1KCZuZXRfcGZrZXktPnRhYmxlLCAqcHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICpwZmtleV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcHBvcykKQEAgLTM2OTYsMTUgKzM2NjksMTIgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoZik7CiAJc3RydWN0IG5ldG5zX3Bma2V5ICpuZXRfcGZrZXkgPSBuZXRfZ2VuZXJpYyhuZXQsIHBma2V5X25ldF9pZCk7CiAKLQkrKypwcG9zOwotCXJldHVybiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pID8KLQkJc2tfaGVhZCgmbmV0X3Bma2V5LT50YWJsZSkgOgotCQkJc2tfbmV4dCgoc3RydWN0IHNvY2sgKil2KTsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHRfcmN1KHYsICZuZXRfcGZrZXktPnRhYmxlLCBwcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgcGZrZXlfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQogewotCXJlYWRfdW5sb2NrKCZwZmtleV90YWJsZV9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwZmtleV9zZXFfb3BzID0gewpAQCAtMzczOCwxNyArMzcwOCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwZmtleV9leGl0X3Byb2Moc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBwZmtleV9leGl0X3Byb2Moc3RydWN0IG5ldCAqbmV0KQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsICJwZmtleSIpOwogfQogI2Vsc2UKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBwZmtleV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGlubGluZSBpbnQgcGZrZXlfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGZrZXlfZXhpdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZmtleV9leGl0X3Byb2Moc3RydWN0IG5ldCAqbmV0KQogewogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCAzYTY2NTQ2Li5lMzVkOTA3ZiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC00Nyw2ICs0NywxMCBAQAogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pCiAjZW5kaWYKIAorLyogTWF5YmUgd2UnbGwgYWRkIHNvbWUgbW9yZSBpbiB0aGUgZnV0dXJlLiAqLworI2RlZmluZSBMTENfQ01TR19QS1RJTkZPCTEKKworCiAvKioKICAqCWxsY191aV9uZXh0X2xpbmtfbm8gLSByZXR1cm4gdGhlIG5leHQgdW51c2VkIGxpbmsgbnVtYmVyIGZvciBhIHNhcAogICoJQHNhcDogQWRkcmVzcyBvZiBzYXAgdG8gZ2V0IGxpbmsgbnVtYmVyIGZyb20uCkBAIC0xMzYsNiArMTQwLDcgQEAKIAkubmFtZQkgID0gIkxMQyIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsY19zb2NrKSwKKwkuc2xhYl9mbGFncyA9IFNMQUJfREVTVFJPWV9CWV9SQ1UsCiB9OwogCiAvKioKQEAgLTE5MiwxMCArMTk3LDggQEAKIAkJbGxjLT5sYWRkci5sc2FwLCBsbGMtPmRhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBzay0+c2tfcmN2dGltZW8pOwotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHsKLQkJbGxjX3NhcF9wdXQobGxjLT5zYXApOworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpCiAJCWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtPnNhcCwgc2spOwotCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCWlmIChsbGMtPmRldikKIAkJZGV2X3B1dChsbGMtPmRldik7CkBAIC0yNTUsNyArMjU4LDE0IEBACiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRU5PREVWOwotCWxsYy0+ZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoJmluaXRfbmV0LCBhZGRyLT5zbGxjX2FycGhyZCk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldiAmJiBhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSkgeworCQkJZGV2X3B1dChsbGMtPmRldik7CisJCQlsbGMtPmRldiA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0Zmlyc3RieWh3dHlwZSgmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKIAlyYyA9IC1FVVNFUlM7CkBAIC0zMDYsNyArMzE2LDI1IEBACiAJCWdvdG8gb3V0OwogCXJjID0gLUVOT0RFVjsKIAlydG5sX2xvY2soKTsKLQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLCBhZGRyLT5zbGxjX21hYyk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldikgeworCQkJaWYgKCFhZGRyLT5zbGxjX2FycGhyZCkKKwkJCQlhZGRyLT5zbGxjX2FycGhyZCA9IGxsYy0+ZGV2LT50eXBlOworCQkJaWYgKGxsY19tYWNfbnVsbChhZGRyLT5zbGxjX21hYykpCisJCQkJbWVtY3B5KGFkZHItPnNsbGNfbWFjLCBsbGMtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgICAgIElGSFdBRERSTEVOKTsKKwkJCWlmIChhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSB8fAorCQkJICAgICFsbGNfbWFjX21hdGNoKGFkZHItPnNsbGNfbWFjLAorCQkJCQkgICBsbGMtPmRldi0+ZGV2X2FkZHIpKSB7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWRldl9wdXQobGxjLT5kZXYpOworCQkJCWxsYy0+ZGV2ID0gTlVMTDsKKwkJCX0KKwkJfQorCX0gZWxzZQorCQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLAorCQkJCQkgICBhZGRyLT5zbGxjX21hYyk7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKQEAgLTMyMiw3ICszNTAsNiBAQAogCQlyYyA9IC1FQlVTWTsgLyogc29tZSBvdGhlciBuZXR3b3JrIGxheWVyIGlzIHVzaW5nIHRoZSBzYXAgKi8KIAkJaWYgKCFzYXApCiAJCQlnb3RvIG91dDsKLQkJbGxjX3NhcF9ob2xkKHNhcCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGxsY19hZGRyIGxhZGRyLCBkYWRkcjsKIAkJc3RydWN0IHNvY2sgKmFzazsKQEAgLTU5MSw2ICs2MTgsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2tiLT5zayk7CisKKwlpZiAobGxjLT5jbXNnX2ZsYWdzICYgTExDX0NNU0dfUEtUSU5GTykgeworCQlzdHJ1Y3QgbGxjX3BrdGluZm8gaW5mbzsKKworCQlpbmZvLmxwaV9pZmluZGV4ID0gbGxjX3NrKHNrYi0+c2spLT5kZXYtPmlmaW5kZXg7CisJCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmaW5mby5scGlfc2FwKTsKKwkJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBpbmZvLmxwaV9tYWMpOworCQlwdXRfY21zZyhtc2csIFNPTF9MTEMsIExMQ19PUFRfUEtUSU5GTywgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CisJfQorfQorCiAvKioKICAqCWxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi4KICAqCUBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLgpAQCAtODEyLDYgKzg1Myw4IEBACiAJCW1lbWNweSh1YWRkciwgbGxjX3VpX3NrYl9jYihza2IpLCBzaXplb2YoKnVhZGRyKSk7CiAJCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2YoKnVhZGRyKTsKIAl9CisJaWYgKGxsY19zayhzayktPmNtc2dfZmxhZ3MpCisJCWxsY19jbXNnX3Jjdihtc2csIHNrYik7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTEwMzAsNiArMTA3MywxMiBAQAogCQkJZ290byBvdXQ7CiAJCWxsYy0+cncgPSBvcHQ7CiAJCWJyZWFrOworCWNhc2UgTExDX09QVF9QS1RJTkZPOgorCQlpZiAob3B0KQorCQkJbGxjLT5jbXNnX2ZsYWdzIHw9IExMQ19DTVNHX1BLVElORk87CisJCWVsc2UKKwkJCWxsYy0+Y21zZ19mbGFncyAmPSB+TExDX0NNU0dfUEtUSU5GTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PUFJPVE9PUFQ7CiAJCWdvdG8gb3V0OwpAQCAtMTA4Myw2ICsxMTMyLDkgQEAKIAkJdmFsID0gbGxjLT5rOwkJCQlicmVhazsKIAljYXNlIExMQ19PUFRfUlhfV0lOOgogCQl2YWwgPSBsbGMtPnJ3OwkJCQlicmVhazsKKwljYXNlIExMQ19PUFRfUEtUSU5GTzoKKwkJdmFsID0gKGxsYy0+Y21zZ19mbGFncyAmIExMQ19DTVNHX1BLVElORk8pICE9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT1BST1RPT1BUOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uYwppbmRleCBjNmJhYjM5Li5hOGRkZTliIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb25uLmMKKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jCkBAIC00NjgsNiArNDY4LDE5IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbGxjX2VzdGFiX21hdGNoKGNvbnN0IHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpkYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisKKwlyZXR1cm4gbGxjLT5sYWRkci5sc2FwID09IGxhZGRyLT5sc2FwICYmCisJCWxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+ZGFkZHIubWFjLCBkYWRkci0+bWFjKTsKK30KKwogLyoqCiAgKglfX2xsY19sb29rdXBfZXN0YWJsaXNoZWQgLSBGaW5kcyBjb25uZWN0aW9uIGZvciB0aGUgcmVtb3RlL2xvY2FsIHNhcC9tYWMKICAqCUBzYXA6IFNBUApAQCAtNDg0LDIzICs0OTcsMzUgQEAKIAkJCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQogewogCXN0cnVjdCBzb2NrICpyYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKKwlpbnQgc2xvdCA9IGxsY19za19sYWRkcl9oYXNoZm4oc2FwLCBsYWRkcik7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxhZGRyX2hiID0gJnNhcC0+c2tfbGFkZHJfaGFzaFtzbG90XTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwotCi0JCWlmIChsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIGxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgotCQkgICAgbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYykgJiYKLQkJICAgIGxsY19tYWNfbWF0Y2gobGxjLT5kYWRkci5tYWMsIGRhZGRyLT5tYWMpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOworCXJjdV9yZWFkX2xvY2soKTsKK2FnYWluOgorCXNrX251bGxzX2Zvcl9lYWNoX3JjdShyYywgbm9kZSwgbGFkZHJfaGIpIHsKKwkJaWYgKGxsY19lc3RhYl9tYXRjaChzYXAsIGRhZGRyLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2VzdGFiX21hdGNoKHNhcCwgZGFkZHIsIGxhZGRyLCByYykpKSB7CisJCQkJc29ja19wdXQocmMpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KIAlyYyA9IE5VTEw7CisJLyoKKwkgKiBpZiB0aGUgbnVsbHMgdmFsdWUgd2UgZ290IGF0IHRoZSBlbmQgb2YgdGhpcyBsb29rdXAgaXMKKwkgKiBub3QgdGhlIGV4cGVjdGVkIG9uZSwgd2UgbXVzdCByZXN0YXJ0IGxvb2t1cC4KKwkgKiBXZSBwcm9iYWJseSBtZXQgYW4gaXRlbSB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGNoYWluLgorCSAqLworCWlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobm9kZSkgIT0gc2xvdCkpCisJCWdvdG8gYWdhaW47CiBmb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTE2LDYgKzU0MSw1MyBAQAogCXJldHVybiBzazsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGxsY19saXN0ZW5lcl9tYXRjaChjb25zdCBzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmJgorCQlsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkJbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqX19sbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgc3RydWN0IGxsY19hZGRyICpsYWRkcikKK3sKKwlzdHJ1Y3Qgc29jayAqcmM7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJaW50IHNsb3QgPSBsbGNfc2tfbGFkZHJfaGFzaGZuKHNhcCwgbGFkZHIpOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpsYWRkcl9oYiA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbc2xvdF07CisKKwlyY3VfcmVhZF9sb2NrKCk7CithZ2FpbjoKKwlza19udWxsc19mb3JfZWFjaF9yY3UocmMsIG5vZGUsIGxhZGRyX2hiKSB7CisJCWlmIChsbGNfbGlzdGVuZXJfbWF0Y2goc2FwLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2xpc3RlbmVyX21hdGNoKHNhcCwgbGFkZHIsIHJjKSkpIHsKKwkJCQlzb2NrX3B1dChyYyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXJjID0gTlVMTDsKKwkvKgorCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1cCBpcworCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLgorCSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hhaW4uCisJICovCisJaWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShub2RlKSAhPSBzbG90KSkKKwkJZ290byBhZ2FpbjsKK2ZvdW5kOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKglsbGNfbG9va3VwX2xpc3RlbmVyIC0gRmluZHMgbGlzdGVuZXIgZm9yIGxvY2FsIE1BQyArIFNBUAogICoJQHNhcDogU0FQCkBAIC01MjksMjQgKzYwMSwxMiBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCiAJCQkJCXN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCiB7Ci0Jc3RydWN0IHNvY2sgKnJjOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0YXRpYyBzdHJ1Y3QgbGxjX2FkZHIgbnVsbF9hZGRyOworCXN0cnVjdCBzb2NrICpyYyA9IF9fbGxjX2xvb2t1cF9saXN0ZW5lcihzYXAsIGxhZGRyKTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOworCWlmICghcmMpCisJCXJjID0gX19sbGNfbG9va3VwX2xpc3RlbmVyKHNhcCwgJm51bGxfYWRkcik7CiAKLQkJaWYgKHJjLT5za190eXBlID09IFNPQ0tfU1RSRUFNICYmIHJjLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOICYmCi0JCSAgICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIChsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSB8fAotCQkgICAgIGxsY19tYWNfbnVsbChsbGMtPmxhZGRyLm1hYykpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQlyYyA9IE5VTEw7Ci1mb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDE1ICs3MDcsMjIgQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIGFkZHMgYSBzb2NrZXQgdG8gc2tfbGlzdCBvZiBhIFNBUC4KKyAqCVRoaXMgZnVuY3Rpb24gYWRkcyBhIHNvY2tldCB0byB0aGUgaGFzaCB0YWJsZXMgb2YgYSBTQVAuCiAgKi8KIHZvaWQgbGxjX3NhcF9hZGRfc29ja2V0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmRldl9oYiA9IGxsY19za19kZXZfaGFzaChzYXAsIGxsYy0+ZGV2LT5pZmluZGV4KTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbGFkZHJfaGIgPSBsbGNfc2tfbGFkZHJfaGFzaChzYXAsICZsbGMtPmxhZGRyKTsKKwogCWxsY19zYXBfaG9sZChzYXApOwotCXdyaXRlX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKIAlsbGNfc2soc2spLT5zYXAgPSBzYXA7Ci0Jc2tfYWRkX25vZGUoc2ssICZzYXAtPnNrX2xpc3QubGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisKKwlzcGluX2xvY2tfYmgoJnNhcC0+c2tfbG9jayk7CisJc2FwLT5za19jb3VudCsrOworCXNrX251bGxzX2FkZF9ub2RlX3JjdShzaywgbGFkZHJfaGIpOworCWhsaXN0X2FkZF9oZWFkKCZsbGMtPmRldl9oYXNoX25vZGUsIGRldl9oYik7CisJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiB9CiAKIC8qKgpAQCAtNjYzLDE0ICs3MzAsMTggQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gc2tfbGlzdC5saXN0IG9mIGEgU0FQIGlmCisgKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gdGhlIGhhc2ggdGFibGVzIG9mIGEgU0FQIGlmCiAgKgl0aGUgY29ubmVjdGlvbiB3YXMgaW4gdGhpcyBsaXN0LgogICovCiB2b2lkIGxsY19zYXBfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jd3JpdGVfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2RlbF9ub2RlX2luaXQoc2spOwotCXdyaXRlX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXNwaW5fbG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlza19udWxsc19kZWxfbm9kZV9pbml0X3JjdShzayk7CisJaGxpc3RfZGVsKCZsbGMtPmRldl9oYXNoX25vZGUpOworCXNhcC0+c2tfY291bnQtLTsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAlsbGNfc2FwX3B1dChzYXApOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggZmY0YzBhYi4uNzgxNjdlOCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPG5ldC9sbGMuaD4KIAogTElTVF9IRUFEKGxsY19zYXBfbGlzdCk7Ci1ERUZJTkVfUldMT0NLKGxsY19zYXBfbGlzdF9sb2NrKTsKK0RFRklORV9TUElOTE9DSyhsbGNfc2FwX2xpc3RfbG9jayk7CiAKIC8qKgogICoJbGxjX3NhcF9hbGxvYyAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgc2FwLgpAQCAtMzMsNDAgKzMzLDE5IEBACiBzdGF0aWMgc3RydWN0IGxsY19zYXAgKmxsY19zYXBfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0ga3phbGxvYyhzaXplb2YoKnNhcCksIEdGUF9BVE9NSUMpOworCWludCBpOwogCiAJaWYgKHNhcCkgewogCQkvKiBzYXAtPmxhZGRyLm1hYyAtIGxlYXZlIGFzIGEgbnVsbCwgaXQncyBmaWxsZWQgYnkgYmluZCAqLwogCQlzYXAtPnN0YXRlID0gTExDX1NBUF9TVEFURV9BQ1RJVkU7Ci0JCXJ3bG9ja19pbml0KCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKQorCQkJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZzYXAtPnNrX2xhZGRyX2hhc2hbaV0sIGkpOwogCQlhdG9taWNfc2V0KCZzYXAtPnJlZmNudCwgMSk7CiAJfQogCXJldHVybiBzYXA7CiB9CiAKLS8qKgotICoJbGxjX2FkZF9zYXAgLSBhZGQgc2FwIHRvIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJQWRkcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2FkZF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQlsaXN0X2FkZF90YWlsKCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwotfQotCi0vKioKLSAqCWxsY19kZWxfc2FwIC0gZGVsIHNhcCBmcm9tIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJUmVtb3ZlcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2RlbF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQl3cml0ZV9sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJnNhcC0+bm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbGxjX3NhcCAqX19sbGNfc2FwX2ZpbmQodW5zaWduZWQgY2hhciBzYXBfdmFsdWUpCiB7CiAJc3RydWN0IGxsY19zYXAqIHNhcDsKQEAgLTkwLDEzICs2OSwxMyBAQAogICovCiBzdHJ1Y3QgbGxjX3NhcCAqbGxjX3NhcF9maW5kKHVuc2lnbmVkIGNoYXIgc2FwX3ZhbHVlKQogewotCXN0cnVjdCBsbGNfc2FwKiBzYXA7CisJc3RydWN0IGxsY19zYXAgKnNhcDsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlzYXAgPSBfX2xsY19zYXBfZmluZChzYXBfdmFsdWUpOwogCWlmIChzYXApCiAJCWxsY19zYXBfaG9sZChzYXApOwotCXJlYWRfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTE3LDcgKzk2LDcgQEAKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gTlVMTDsKIAotCXdyaXRlX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIAlpZiAoX19sbGNfc2FwX2ZpbmQobHNhcCkpIC8qIFNBUCBhbHJlYWR5IGV4aXN0cyAqLwogCQlnb3RvIG91dDsKIAlzYXAgPSBsbGNfc2FwX2FsbG9jKCk7CkBAIC0xMjUsOSArMTA0LDkgQEAKIAkJZ290byBvdXQ7CiAJc2FwLT5sYWRkci5sc2FwID0gbHNhcDsKIAlzYXAtPnJjdl9mdW5jCT0gZnVuYzsKLQlsbGNfYWRkX3NhcChzYXApOworCWxpc3RfYWRkX3RhaWxfcmN1KCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwogb3V0OgotCXdyaXRlX3VubG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTQyLDggKzEyMSwxNCBAQAogICovCiB2b2lkIGxsY19zYXBfY2xvc2Uoc3RydWN0IGxsY19zYXAgKnNhcCkKIHsKLQlXQVJOX09OKCFobGlzdF9lbXB0eSgmc2FwLT5za19saXN0Lmxpc3QpKTsKLQlsbGNfZGVsX3NhcChzYXApOworCVdBUk5fT04oc2FwLT5za19jb3VudCk7CisKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJnNhcC0+bm9kZSk7CisJc3Bpbl91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCiAJa2ZyZWUoc2FwKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfb3V0cHV0LmMgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwppbmRleCA3NTRmNGZlLi5iMzhhMTA3IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19vdXRwdXQuYworKysgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwpAQCAtMzMsNDggKzMzLDE5IEBACiBpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHNrYi0+ZGV2LT50eXBlKSB7Ci0jaWZkZWYgQ09ORklHX1RSCi0JY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjogewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JCXN0cnVjdCB0cmhfaGRyICp0cmg7Ci0KLQkJc2tiX3B1c2goc2tiLCBzaXplb2YoKnRyaCkpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQl0cmggPSB0cl9oZHIoc2tiKTsKLQkJdHJoLT5hYyA9IEFDOwotCQl0cmgtPmZjID0gTExDX0ZSQU1FOwotCQlpZiAoc2EpCi0JCQltZW1jcHkodHJoLT5zYWRkciwgc2EsIGRldi0+YWRkcl9sZW4pOwotCQllbHNlCi0JCQltZW1zZXQodHJoLT5zYWRkciwgMCwgZGV2LT5hZGRyX2xlbik7Ci0JCWlmIChkYSkgewotCQkJbWVtY3B5KHRyaC0+ZGFkZHIsIGRhLCBkZXYtPmFkZHJfbGVuKTsKLQkJCXRyX3NvdXJjZV9yb3V0ZShza2IsIHRyaCwgZGV2KTsKLQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCisJY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjoKIAljYXNlIEFSUEhSRF9FVEhFUjoKLQljYXNlIEFSUEhSRF9MT09QQkFDSzogewotCQl1bnNpZ25lZCBzaG9ydCBsZW4gPSBza2ItPmxlbjsKLQkJc3RydWN0IGV0aGhkciAqZXRoOwotCi0JCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTsKLQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJZXRoID0gZXRoX2hkcihza2IpOwotCQlldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4pOwotCQltZW1jcHkoZXRoLT5oX2Rlc3QsIGRhLCBFVEhfQUxFTik7Ci0JCW1lbWNweShldGgtPmhfc291cmNlLCBzYSwgRVRIX0FMRU4pOworCWNhc2UgQVJQSFJEX0xPT1BCQUNLOgorCQlyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi0+ZGV2LCBFVEhfUF84MDJfMiwgZGEsIHNhLAorCQkJCSAgICAgc2tiLT5sZW4pOworCQlpZiAocmMgPiAwKQorCQkJcmMgPSAwOwogCQlicmVhazsKLQl9CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsCi0JCSAgICAgICBza2ItPmRldi0+dHlwZSk7Ci0JCXJjID0gLUVJTlZBTDsKKwkJV0FSTigxLCAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsIHNrYi0+ZGV2LT50eXBlKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfcHJvYy5jIGIvbmV0L2xsYy9sbGNfcHJvYy5jCmluZGV4IGJlNDdhYzQyNy4uN2FmMWZmMiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMzIsMjEgKzMyLDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2dldF9za19pZHgobG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpzYXBfZW50cnk7CiAJc3RydWN0IGxsY19zYXAgKnNhcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOworCWludCBpOwogCi0JbGlzdF9mb3JfZWFjaChzYXBfZW50cnksICZsbGNfc2FwX2xpc3QpIHsKLQkJc2FwID0gbGlzdF9lbnRyeShzYXBfZW50cnksIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbaV07CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAotCQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQkJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgewotCQkJaWYgKCFwb3MpCi0JCQkJZ290byBmb3VuZDsKLQkJCS0tcG9zOworCQkJc2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIGhlYWQpIHsKKwkJCQlpZiAoIXBvcykKKwkJCQkJZ290byBmb3VuZDsgLyoga2VlcCB0aGUgbG9jayAqLworCQkJCS0tcG9zOworCQkJfQogCQl9Ci0JCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYXAtPnNrX2xvY2spOwogCX0KIAlzayA9IE5VTEw7CiBmb3VuZDoKQEAgLTU3LDEwICs1OSwyMyBAQAogewogCWxvZmZfdCBsID0gKnBvczsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlyZXR1cm4gbCA/IGxsY19nZXRfc2tfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqbGFkZHJfaGFzaF9uZXh0KHN0cnVjdCBsbGNfc2FwICpzYXAsIGludCBidWNrZXQpCit7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKworCXdoaWxlICgrK2J1Y2tldCA8IExMQ19TS19MQUREUl9IQVNIX0VOVFJJRVMpCisJCXNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2FwLT5za19sYWRkcl9oYXNoW2J1Y2tldF0pCisJCQlnb3RvIG91dDsKKworb3V0OgorCXJldHVybiBzazsKK30KKwogc3RhdGljIHZvaWQgKmxsY19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHNvY2sqIHNrLCAqbmV4dDsKQEAgLTczLDI1ICs4OCwyMyBAQAogCQlnb3RvIG91dDsKIAl9CiAJc2sgPSB2OwotCW5leHQgPSBza19uZXh0KHNrKTsKKwluZXh0ID0gc2tfbnVsbHNfbmV4dChzayk7CiAJaWYgKG5leHQpIHsKIAkJc2sgPSBuZXh0OwogCQlnb3RvIG91dDsKIAl9CiAJbGxjID0gbGxjX3NrKHNrKTsKIAlzYXAgPSBsbGMtPnNhcDsKLQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrID0gTlVMTDsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzYXAtPm5vZGUubmV4dCA9PSAmbGxjX3NhcF9saXN0KQotCQkJYnJlYWs7Ci0JCXNhcCA9IGxpc3RfZW50cnkoc2FwLT5ub2RlLm5leHQsIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKLQkJcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0JCWlmICghaGxpc3RfZW1wdHkoJnNhcC0+c2tfbGlzdC5saXN0KSkgewotCQkJc2sgPSBza19oZWFkKCZzYXAtPnNrX2xpc3QubGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXNrID0gbGFkZHJfaGFzaF9uZXh0KHNhcCwgbGxjX3NrX2xhZGRyX2hhc2hmbihzYXAsICZsbGMtPmxhZGRyKSk7CisJaWYgKHNrKQorCQlnb3RvIG91dDsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlzayA9IGxhZGRyX2hhc2hfbmV4dChzYXAsIC0xKTsKKwkJaWYgKHNrKQorCQkJYnJlYWs7IC8qIGtlZXAgdGhlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiAJfQogb3V0OgogCXJldHVybiBzazsKQEAgLTEwNCw5ICsxMTcsOSBAQAogCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCQlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIH0KIAogc3RhdGljIGludCBsbGNfc2VxX3NvY2tldF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc2FwLmMgYi9uZXQvbGxjL2xsY19zYXAuYwppbmRleCAwMDhkZTFmYy4uYWQ2ZTZlMSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfc2FwLmMKKysrIGIvbmV0L2xsYy9sbGNfc2FwLmMKQEAgLTI5Nyw2ICsyOTcsMTcgQEAKIAlsbGNfc2FwX3N0YXRlX3Byb2Nlc3Moc2FwLCBza2IpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbGxjX2RncmFtX21hdGNoKGNvbnN0IHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisgICAgIHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworICAgICByZXR1cm4gc2stPnNrX3R5cGUgPT0gU09DS19ER1JBTSAmJgorCSAgbGxjLT5sYWRkci5sc2FwID09IGxhZGRyLT5sc2FwICYmCisJICBsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKTsKK30KKwogLyoqCiAgKglsbGNfbG9va3VwX2RncmFtIC0gRmluZHMgZGdyYW0gc29ja2V0IGZvciB0aGUgbG9jYWwgc2FwL21hYwogICoJQHNhcDogU0FQCkBAIC0zMDksMjUgKzMyMCw2OCBAQAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkcikKIHsKIAlzdHJ1Y3Qgc29jayAqcmM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJaW50IHNsb3QgPSBsbGNfc2tfbGFkZHJfaGFzaGZuKHNhcCwgbGFkZHIpOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpsYWRkcl9oYiA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbc2xvdF07CiAKLQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQlza19mb3JfZWFjaChyYywgbm9kZSwgJnNhcC0+c2tfbGlzdC5saXN0KSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHJjKTsKLQotCQlpZiAocmMtPnNrX3R5cGUgPT0gU09DS19ER1JBTSAmJgotCQkgICAgbGxjLT5sYWRkci5sc2FwID09IGxhZGRyLT5sc2FwICYmCi0JCSAgICBsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSkgewotCQkJc29ja19ob2xkKHJjKTsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CithZ2FpbjoKKwlza19udWxsc19mb3JfZWFjaF9yY3UocmMsIG5vZGUsIGxhZGRyX2hiKSB7CisJCWlmIChsbGNfZGdyYW1fbWF0Y2goc2FwLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2RncmFtX21hdGNoKHNhcCwgbGFkZHIsIHJjKSkpIHsKKwkJCQlzb2NrX3B1dChyYyk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQogCXJjID0gTlVMTDsKKwkvKgorCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1cCBpcworCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLgorCSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hhaW4uCisJICovCisJaWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShub2RlKSAhPSBzbG90KSkKKwkJZ290byBhZ2FpbjsKIGZvdW5kOgotCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbGxjX21jYXN0X21hdGNoKGNvbnN0IHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKyAgICAgc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCisgICAgIHJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNICYmCisJICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkgIGxsYy0+ZGV2ID09IHNrYi0+ZGV2OworfQorCitzdGF0aWMgdm9pZCBsbGNfZG9fbWNhc3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBzdHJ1Y3Qgc29jayAqKnN0YWNrLCBpbnQgY291bnQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlza2IxID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiMSkgeworCQkJc29ja19wdXQoc3RhY2tbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQlsbGNfc2FwX3JjdihzYXAsIHNrYjEsIHN0YWNrW2ldKTsKKwkJc29ja19wdXQoc3RhY2tbaV0pOworCX0KK30KKwogLyoqCiAgKiAJbGxjX3NhcF9tY2FzdCAtIERlbGl2ZXIgbXVsdGljYXN0IFBEVSdzIHRvIGFsbCBtYXRjaGluZyBkYXRhZ3JhbSBzb2NrZXRzLgogICoJQHNhcDogU0FQCkBAIC0zNDAsMzIgKzM5NCwzMSBAQAogCQkJICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzazsKKwlpbnQgaSA9IDAsIGNvdW50ID0gMjU2IC8gc2l6ZW9mKHN0cnVjdCBzb2NrICopOworCXN0cnVjdCBzb2NrICpzaywgKnN0YWNrW2NvdW50XTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X2hiID0gbGxjX3NrX2Rldl9oYXNoKHNhcCwgc2tiLT5kZXYtPmlmaW5kZXgpOwogCi0JcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgewotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0JCXN0cnVjdCBza19idWZmICpza2IxOworCXNwaW5fbG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShsbGMsIG5vZGUsIGRldl9oYiwgZGV2X2hhc2hfbm9kZSkgewogCi0JCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX0RHUkFNKQorCQlzayA9ICZsbGMtPnNrOworCisJCWlmICghbGxjX21jYXN0X21hdGNoKHNhcCwgbGFkZHIsIHNrYiwgc2spKQogCQkJY29udGludWU7CiAKLQkJaWYgKGxsYy0+bGFkZHIubHNhcCAhPSBsYWRkci0+bHNhcCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChsbGMtPmRldiAhPSBza2ItPmRldikKLQkJCWNvbnRpbnVlOwotCi0JCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFza2IxKQotCQkJYnJlYWs7Ci0KIAkJc29ja19ob2xkKHNrKTsKLQkJbGxjX3NhcF9yY3Yoc2FwLCBza2IxLCBzayk7Ci0JCXNvY2tfcHV0KHNrKTsKKwkJaWYgKGkgPCBjb3VudCkKKwkJCXN0YWNrW2krK10gPSBzazsKKwkJZWxzZSB7CisJCQlsbGNfZG9fbWNhc3Qoc2FwLCBza2IsIHN0YWNrLCBpKTsKKwkJCWkgPSAwOworCQl9CiAJfQotCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CisKKwlsbGNfZG9fbWNhc3Qoc2FwLCBza2IsIHN0YWNrLCBpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IGExMGQ1MDguLmE5NTJiN2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC05NiwxOCArOTYsNiBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGNvbGxlY3RzIHZhcmlvdXMgbWFjODAyMTEgZGVidWcgc2V0dGluZ3MuCiAKLWNvbmZpZyBNQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCi0JYm9vbCAiRW5hYmxlIHBhY2tldCBhbGlnbm1lbnQgZGVidWdnaW5nIgotCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGlzIHJlY29tbWVuZGVkIGZvciBkcml2ZXIgYXV0aG9ycyBhbmQgc3Ryb25nbHkKLQkgIGRpc2NvdXJhZ2VkIGZvciBldmVyeWJvZHkgZWxzZSwgaXQgd2lsbCB0cmlnZ2VyIGEgd2FybmluZwotCSAgd2hlbiBhIGRyaXZlciBoYW5kcyBtYWM4MDIxMSBhIGJ1ZmZlciB0aGF0IGlzIGFsaWduZWQgaW4KLQkgIGEgd2F5IHRoYXQgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoIHRoZSBJUCBzdGFjayBvbiBzb21lCi0JICBhcmNoaXRlY3R1cmVzLgotCi0JICBTYXkgTiB1bmxlc3MgeW91J3JlIHdyaXRpbmcgYSBtYWM4MDIxMSBiYXNlZCBkcml2ZXIuCi0KIGNvbmZpZyBNQUM4MDIxMV9OT0lOTElORQogCWJvb2wgIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnMiCiAJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUgYi9uZXQvbWFjODAyMTEvTWFrZWZpbGUKaW5kZXggMjk4Y2ZjYy4uMDQ0MjAyOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL01ha2VmaWxlCisrKyBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQpAQCAtNiwxMCArNiwxMCBAQAogCXN0YV9pbmZvLm8gXAogCXdlcC5vIFwKIAl3cGEubyBcCi0Jc2Nhbi5vIFwKKwlzY2FuLm8gb2ZmY2hhbm5lbC5vIFwKIAlodC5vIGFnZy10eC5vIGFnZy1yeC5vIFwKIAlpYnNzLm8gXAotCW1sbWUubyBcCisJbWxtZS5vIHdvcmsubyBcCiAJaWZhY2UubyBcCiAJcmF0ZS5vIFwKIAltaWNoYWVsLm8gXApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCmluZGV4IDUxYzdkYzMuLmE5NzhlNjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTQxLDggKzQxLDcgQEAKIAkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAotCWlmIChkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAotCQkJICAgICBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKKwlpZiAoZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc3RhLT5zZGF0YSwgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCiAJCQkgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkhXIHByb2JsZW0gLSBjYW4gbm90IHN0b3AgcnggIgogCQkJCSJhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwpAQCAtODMsMTIgKzgyLDExIEBACiB2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsCiAJCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtMTM2LDcgKzEzNCw3IEBACiAKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgICJmb3IgYWRkYmEgcmVzcCBmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDQsMTAgKzE0MiwxMCBAQAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAogCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCkBAIC0yODEsOCArMjc5LDcgQEAKIAkJZ290byBlbmQ7CiAJfQogCi0JcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgJnN0YS0+c2RhdGEtPnZpZiwKLQkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCisJcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc3RhLT5zZGF0YSwgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJULAogCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCA1ZTNhN2VjLi41NTM4ZTFiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC01OCwxNyArNTgsMTcgQEAKIAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCQkJImZvciBhZGRiYSByZXF1ZXN0IGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAogCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgotCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwpAQCAtMTEzLDcgKzExMyw3IEBACiAJYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CiAJCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOwogCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOwotCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShiYXItPnRhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTDsKIAliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQTsKIAliYXJfY29udHJvbCB8PSAodTE2KSh0aWQgPDwgMTIpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CiAJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CiAKLQlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAorCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHN0YS0+c2RhdGEsCiAJCQkgICAgICAgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCiAJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwogCkBAIC0xNzksNyArMTc5LDggQEAKIAogCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmICgoKnN0YXRlICYgKEhUX0FEREJBX1JFUVVFU1RFRF9NU0sgfCBIVF9BRERCQV9SRUNFSVZFRF9NU0spKSAhPQorCWlmICgoKnN0YXRlICYgKEhUX0FEREJBX1JFUVVFU1RFRF9NU0sgfCBIVF9BRERCQV9SRUNFSVZFRF9NU0sgfAorCQkgICAgICAgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykpICE9CiAJCQkJCQlIVF9BRERCQV9SRVFVRVNURURfTVNLKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKQEAgLTIzNiw2ICsyMzcsMTQgQEAKIAkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0RJU0FTU09DKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiRGlzYXNzb2NpYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICIKKwkJICAgICAgICJEZW55aW5nIEJBIHNlc3Npb24gcmVxdWVzdFxuIik7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKHRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfU1VTUEVORCkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlN1c3BlbmQgaW4gcHJvZ3Jlc3MuICIKQEAgLTMwMSwxMCArMzEwLDkgQEAKIAkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KIAkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKIAotCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKKwlzdGFydF9zZXFfbnVtID0gc3RhLT50aWRfc2VxW3RpZF0gPj4gNDsKIAotCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsICZzZGF0YS0+dmlmLAotCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCwKKwlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzZGF0YSwgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAogCQkJICAgICAgIHB1YnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CiAKIAlpZiAocmV0KSB7CkBAIC00MjAsNyArNDI4LDcgQEAKIAlpZWVlODAyMTFfYWdnX3NwbGljZV9maW5pc2gobG9jYWwsIHN0YSwgdGlkKTsKIAlzcGluX3VubG9jaygmbG9jYWwtPmFtcGR1X2xvY2spOwogCi0JZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgJnN0YS0+c2RhdGEtPnZpZiwKKwlkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLAogCQkJIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCwKIAkJCSAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CiB9CkBAIC00NDEsNyArNDQ5LDcgQEAKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCByYSk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCkBAIC00ODksNyArNDk3LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2RhdGEtPm5hbWUpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CkBAIC01NjQsNyArNTcyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CkBAIC02MjEsNyArNjI5LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyBzdG9wIEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisJCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNkYXRhLT5uYW1lKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDlhZTFhNDcuLmI3MTE2ZWYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbWFjODAyMTEgY29uZmlndXJhdGlvbiBob29rcyBmb3IgY2ZnODAyMTEKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiwgMjAwNwlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgZmlsZSBpcyBHUEx2MiBhcyBmb3VuZCBpbiBDT1BZSU5HLgogICovCkBAIC03OCwxNyArNzgsMTUgQEAKIAkJCQkgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWludCByZXQ7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoIW5sODAyMTFfcGFyYW1zX2NoZWNrKHR5cGUsIHBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCiAJcmV0ID0gaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHNkYXRhLCB0eXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTUwLDcgKzE0OCw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCiAJaWYgKG1hY19hZGRyKSB7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YS0+bG9jYWwsIG1hY19hZGRyKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpOwogCQlpZiAoIXN0YSkgewogCQkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7CiAJCQllcnIgPSAtRU5PRU5UOwpAQCAtMTgxLDcgKzE3OSw3IEBACiAJaWYgKG1hY19hZGRyKSB7CiAJCXJldCA9IC1FTk9FTlQ7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLT5sb2NhbCwgbWFjX2FkZHIpOworCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKQogCQkJZ290byBvdXRfdW5sb2NrOwogCkBAIC0yMjgsNyArMjI2LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlpZiAobWFjX2FkZHIpIHsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLT5sb2NhbCwgbWFjX2FkZHIpOworCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKQogCQkJZ290byBvdXQ7CiAKQEAgLTQxNSwxNSArNDEzLDEzIEBACiBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlpbnQgcmV0ID0gLUVOT0VOVDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCS8qIFhYWDogdmVyaWZ5IHN0YS0+ZGV2ID09IGRldiAqLwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtYWMpOworCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hYyk7CiAJaWYgKHN0YSkgewogCQlyZXQgPSAwOwogCQlzdGFfc2V0X3NpbmZvKHN0YSwgc2luZm8pOwpAQCAtNTE5LDYgKzUxNSw4IEBACiAJCWlmIChvbGQpCiAJCQltZW1jcHkobmV3LT50YWlsLCBvbGQtPnRhaWwsIG5ld190YWlsX2xlbik7CiAKKwlzZGF0YS0+dmlmLmJzc19jb25mLmR0aW1fcGVyaW9kID0gbmV3LT5kdGltX3BlcmlvZDsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS5hcC5iZWFjb24sIG5ldyk7CiAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKQEAgLTczMiw3ICs3MzAsNyBAQAogCX0gZWxzZQogCQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1hYywgZGV2LT5kZXZfYWRkcikgPT0gMCkKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1hYywgc2RhdGEtPnZpZi5hZGRyKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihtYWMpKQpAQCAtNzUxLDkgKzc0OSw3IEBACiAJbGF5ZXIyX3VwZGF0ZSA9IHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIHx8CiAJCXNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQotCWVyciA9IHN0YV9pbmZvX2luc2VydChzdGEpOworCWVyciA9IHN0YV9pbmZvX2luc2VydF9yY3Uoc3RhKTsKIAlpZiAoZXJyKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzcyLDI3ICs3NjgsMTMgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKG1hYykgewotCQlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKG1hYykKKwkJcmV0dXJuIHN0YV9pbmZvX2Rlc3Ryb3lfYWRkcl9ic3Moc2RhdGEsIG1hYyk7CiAKLQkJLyogWFhYOiBnZXQgc3RhIGJlbG9uZ2luZyB0byBkZXYgKi8KLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtYWMpOwotCQlpZiAoIXN0YSkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCi0JCXN0YV9pbmZvX3VubGluaygmc3RhKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJc3RhX2luZm9fZGVzdHJveShzdGEpOwotCX0gZWxzZQotCQlzdGFfaW5mb19mbHVzaChsb2NhbCwgc2RhdGEpOwotCisJc3RhX2luZm9fZmx1c2gobG9jYWwsIHNkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODAxLDE0ICs3ODMsMTQgQEAKIAkJCQkgICAgdTggKm1hYywKIAkJCQkgICAgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW5zZGF0YTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCS8qIFhYWDogZ2V0IHN0YSBiZWxvbmdpbmcgdG8gZGV2ICovCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtYWMpOworCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hYyk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtODQ3LDcgKzgyOSw2IEBACiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgdTggKmRzdCwgdTggKm5leHRfaG9wKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC04NTYsNyArODM3LDcgQEAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBuZXh0X2hvcCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBuZXh0X2hvcCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtODk1LDcgKzg3Niw2IEBACiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtOTA0LDcgKzg4NCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG5leHRfaG9wKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMDkyLDYgKzEwNzIsMTMgQEAKIAkJCXBhcmFtcy0+dXNlX3Nob3J0X3ByZWFtYmxlOwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRTsKIAl9CisKKwlpZiAoIXNkYXRhLT52aWYuYnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QgJiYKKwkgICAgc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQlzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9zaG9ydF9zbG90ID0gdHJ1ZTsKKwkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9FUlBfU0xPVDsKKwl9CisKIAlpZiAocGFyYW1zLT51c2Vfc2hvcnRfc2xvdF90aW1lID49IDApIHsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCA9CiAJCQlwYXJhbXMtPnVzZV9zaG9ydF9zbG90X3RpbWU7CkBAIC0xMTM1LDYgKzExMjIsMTMgQEAKIAlwLmN3X21heCA9IHBhcmFtcy0+Y3dtYXg7CiAJcC5jd19taW4gPSBwYXJhbXMtPmN3bWluOwogCXAudHhvcCA9IHBhcmFtcy0+dHhvcDsKKworCS8qCisJICogU2V0dGluZyB0eCBxdWV1ZSBwYXJhbXMgZGlzYWJsZXMgdS1hcHNkIGJlY2F1c2UgaXQncyBvbmx5CisJICogY2FsbGVkIGluIG1hc3RlciBtb2RlLgorCSAqLworCXAudWFwc2QgPSBmYWxzZTsKKwogCWlmIChkcnZfY29uZl90eChsb2NhbCwgcGFyYW1zLT5xdWV1ZSwgJnApKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNldCBUWCBxdWV1ZSAiCiAJCSAgICAgICAicGFyYW1ldGVycyBmb3IgcXVldWUgJWRcbiIsCkBAIC0xMjM3LDYgKzEyMzEsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCWludCBlcnI7CiAKKwlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0NPVkVSQUdFX0NMQVNTKSB7CisJCWVyciA9IGRydl9zZXRfY292ZXJhZ2VfY2xhc3MobG9jYWwsIHdpcGh5LT5jb3ZlcmFnZV9jbGFzcyk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKSB7CiAJCWVyciA9IGRydl9zZXRfcnRzX3RocmVzaG9sZChsb2NhbCwgd2lwaHktPnJ0c190aHJlc2hvbGQpOwogCkBAIC0xMzI0LDYgKzEzMjUsNTAgQEAKIH0KICNlbmRpZgogCitpbnQgX19pZWVlODAyMTFfcmVxdWVzdF9zbXBzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wc19tb2RlKQoreworCWNvbnN0IHU4ICphcDsKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgb2xkX3JlcTsKKwlpbnQgZXJyOworCisJb2xkX3JlcSA9IHNkYXRhLT51Lm1nZC5yZXFfc21wczsKKwlzZGF0YS0+dS5tZ2QucmVxX3NtcHMgPSBzbXBzX21vZGU7CisKKwlpZiAob2xkX3JlcSA9PSBzbXBzX21vZGUgJiYKKwkgICAgc21wc19tb2RlICE9IElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIG5vdCBhc3NvY2lhdGVkLCBvciBjdXJyZW50IGFzc29jaWF0aW9uIGlzIG5vdCBhbiBIVAorCSAqIGFzc29jaWF0aW9uLCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VuZCBhbiBhY3Rpb24gZnJhbWUuCisJICovCisJaWYgKCFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCB8fAorCSAgICBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9OT19IVCkgeworCQltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCQlpZWVlODAyMTFfcmVjYWxjX3NtcHMoc2RhdGEtPmxvY2FsLCBzZGF0YSk7CisJCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXAgPSBzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZC0+YnNzaWQ7CisKKwlpZiAoc21wc19tb2RlID09IElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQykgeworCQlpZiAoc2RhdGEtPnUubWdkLnBvd2Vyc2F2ZSkKKwkJCXNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM7CisJCWVsc2UKKwkJCXNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwl9CisKKwkvKiBzZW5kIFNNIFBTIGZyYW1lIHRvIEFQICovCisJZXJyID0gaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc2RhdGEsIHNtcHNfbW9kZSwKKwkJCQkJIGFwLCBhcCk7CisJaWYgKGVycikKKwkJc2RhdGEtPnUubWdkLnJlcV9zbXBzID0gb2xkX3JlcTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9wb3dlcl9tZ210KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpCiB7CkBAIC0xMzQ0LDYgKzEzODksMTEgQEAKIAlzZGF0YS0+dS5tZ2QucG93ZXJzYXZlID0gZW5hYmxlZDsKIAljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OwogCisJLyogbm8gY2hhbmdlLCBidXQgaWYgYXV0b21hdGljIGZvbGxvdyBwb3dlcnNhdmUgKi8KKwltdXRleF9sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKKwlfX2llZWU4MDIxMV9yZXF1ZXN0X3NtcHMoc2RhdGEsIHNkYXRhLT51Lm1nZC5yZXFfc21wcyk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKKwogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKIAkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIApAQCAtMTM1OSwzOSArMTQwOSw1MiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWludCBpLCBlcnIgPSAtRUlOVkFMOwotCXUzMiB0YXJnZXRfcmF0ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlpbnQgaTsKIAotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwkvKgorCSAqIFRoaXMgX2NvdWxkXyBiZSBzdXBwb3J0ZWQgYnkgcHJvdmlkaW5nIGEgaG9vayBmb3IKKwkgKiBkcml2ZXJzIGZvciB0aGlzIGZ1bmN0aW9uLCBidXQgYXQgdGhpcyBwb2ludCBpdAorCSAqIGRvZXNuJ3Qgc2VlbSB3b3J0aCBib3RoZXJpbmcuCisJICovCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IQVNfUkFURV9DT05UUk9MKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQkvKiB0YXJnZXRfcmF0ZSA9IC0xLCByYXRlLT5maXhlZCA9IDAgbWVhbnMgYXV0byBvbmx5LCBzbyB1c2UgYWxsIHJhdGVzCi0JICogdGFyZ2V0X3JhdGUgPSBYLCByYXRlLT5maXhlZCA9IDEgbWVhbnMgb25seSByYXRlIFgKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhbGwgcmF0ZXMgPD0gWCAqLwotCXNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IC0xOwotCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKIAotCWlmIChtYXNrLT5maXhlZCkKLQkJdGFyZ2V0X3JhdGUgPSBtYXNrLT5maXhlZCAvIDEwMDsKLQllbHNlIGlmIChtYXNrLT5tYXhyYXRlKQotCQl0YXJnZXRfcmF0ZSA9IG1hc2stPm1heHJhdGUgLyAxMDA7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKQorCQlzZGF0YS0+cmNfcmF0ZWlkeF9tYXNrW2ldID0gbWFzay0+Y29udHJvbFtpXS5sZWdhY3k7CiAKLQlmb3IgKGk9MDsgaTwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKLQkJaW50IHRoaXNfcmF0ZSA9IGJyYXRlLT5iaXRyYXRlOworCXJldHVybiAwOworfQogCi0JCWlmICh0YXJnZXRfcmF0ZSA9PSB0aGlzX3JhdGUpIHsKLQkJCXNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IGk7Ci0JCQlpZiAobWFzay0+Zml4ZWQpCi0JCQkJc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IGk7Ci0JCQllcnIgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9CitzdGF0aWMgaW50IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sCisJCQkJICAgICAgIHU2NCAqY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGllZWU4MDIxMV93a19yZW1haW5fb25fY2hhbm5lbChzZGF0YSwgY2hhbiwgY2hhbm5lbF90eXBlLAorCQkJCQkgICAgICBkdXJhdGlvbiwgY29va2llKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHU2NCBjb29raWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJcmV0dXJuIGllZWU4MDIxMV93a19jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoc2RhdGEsIGNvb2tpZSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2FjdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSkKK3sKKwlyZXR1cm4gaWVlZTgwMjExX21nZF9hY3Rpb24oSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSwgY2hhbiwKKwkJCQkgICAgY2hhbm5lbF90eXBlLCBidWYsIGxlbiwgY29va2llKTsKIH0KIAogc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0gewpAQCAtMTQ0MCw0ICsxNTAzLDcgQEAKIAlDRkc4MDIxMV9URVNUTU9ERV9DTUQoaWVlZTgwMjExX3Rlc3Rtb2RlX2NtZCkKIAkuc2V0X3Bvd2VyX21nbXQgPSBpZWVlODAyMTFfc2V0X3Bvd2VyX21nbXQsCiAJLnNldF9iaXRyYXRlX21hc2sgPSBpZWVlODAyMTFfc2V0X2JpdHJhdGVfbWFzaywKKwkucmVtYWluX29uX2NoYW5uZWwgPSBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWwsCisJLmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCA9IGllZWU4MDIxMV9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwsCisJLmFjdGlvbiA9IGllZWU4MDIxMV9hY3Rpb24sCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggZTRiNTQwOS4uNjM3OTI5YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0xNTgsNiArMTU4LDEzMCBAQAogCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHVhcHNkX3F1ZXVlc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXM7CisJY2hhciBidWZbMTBdOworCisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCV4XG4iLCBsb2NhbC0+dWFwc2RfcXVldWVzKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KKworc3RhdGljIHNzaXplX3QgdWFwc2RfcXVldWVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJaW50IHJldDsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCAmIH5JRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX01BU0spCisJCXJldHVybiAtRVJBTkdFOworCisJbG9jYWwtPnVhcHNkX3F1ZXVlcyA9IHZhbDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWFwc2RfcXVldWVzX29wcyA9IHsKKwkucmVhZCA9IHVhcHNkX3F1ZXVlc19yZWFkLAorCS53cml0ZSA9IHVhcHNkX3F1ZXVlc193cml0ZSwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljCit9OworCitzdGF0aWMgc3NpemVfdCB1YXBzZF9tYXhfc3BfbGVuX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXM7CisJY2hhciBidWZbMTBdOworCisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCV4XG4iLCBsb2NhbC0+dWFwc2RfbWF4X3NwX2xlbik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVhcHNkX21heF9zcF9sZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNoYXIgYnVmWzEwXTsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgJiB+SUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9NQVNLKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWxvY2FsLT51YXBzZF9tYXhfc3BfbGVuID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YXBzZF9tYXhfc3BfbGVuX29wcyA9IHsKKwkucmVhZCA9IHVhcHNkX21heF9zcF9sZW5fcmVhZCwKKwkud3JpdGUgPSB1YXBzZF9tYXhfc3BfbGVuX3dyaXRlLAorCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMKK307CisKK3N0YXRpYyBzc2l6ZV90IGNoYW5uZWxfdHlwZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljb25zdCBjaGFyICpidWY7CisKKwlzd2l0Y2ggKGxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZSkgeworCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgorCQlidWYgPSAibm8gaHRcbiI7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CisJCWJ1ZiA9ICJodDIwXG4iOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVM6CisJCWJ1ZiA9ICJodDQwLVxuIjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6CisJCWJ1ZiA9ICJodDQwK1xuIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnVmID0gIj8/PyI7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaGFubmVsX3R5cGVfb3BzID0geworCS5yZWFkID0gY2hhbm5lbF90eXBlX3JlYWQsCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYworfTsKKwogc3RhdGljIHNzaXplX3QgcXVldWVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtMzE0LDYgKzQzOCw5IEBACiAJREVCVUdGU19BREQocXVldWVzKTsKIAlERUJVR0ZTX0FERF9NT0RFKHJlc2V0LCAwMjAwKTsKIAlERUJVR0ZTX0FERChub2Fjayk7CisJREVCVUdGU19BREQodWFwc2RfcXVldWVzKTsKKwlERUJVR0ZTX0FERCh1YXBzZF9tYXhfc3BfbGVuKTsKKwlERUJVR0ZTX0FERChjaGFubmVsX3R5cGUpOwogCiAJc3RhdHNkID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0aXN0aWNzIiwgcGh5ZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggZTBmNTIyNC4uZDEyZTc0M2MgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCkBAIC01Niw3ICs1Niw3IEBACiBLRVlfQ09ORl9GSUxFKGh3X2tleV9pZHgsIEQpOwogS0VZX0ZJTEUoZmxhZ3MsIFgpOwogS0VZX0ZJTEUodHhfcnhfY291bnQsIEQpOwotS0VZX1JFQUQoaWZpbmRleCwgc2RhdGEtPmRldi0+aWZpbmRleCwgMjAsICIlZFxuIik7CitLRVlfUkVBRChpZmluZGV4LCBzZGF0YS0+bmFtZSwgSUZOQU1TSVogKyAyLCAiJXNcbiIpOwogS0VZX09QUyhpZmluZGV4KTsKIAogc3RhdGljIHNzaXplX3Qga2V5X2FsZ29yaXRobV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCA0NzJiMjAzLi45YWZmZTJjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtNDEsNiArNDEsMzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfd3JpdGUoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsCisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICosIGNvbnN0IGNoYXIgKiwgaW50KSkKK3sKKwl1OCAqYnVmOworCXNzaXplX3QgcmV0ID0gLUVOT0RFVjsKKworCWJ1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlydG5sX2xvY2soKTsKKwlpZiAoc2RhdGEtPmRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKQorCQlyZXQgPSAoKndyaXRlKShzZGF0YSwgYnVmLCBjb3VudCk7CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKICNkZWZpbmUgSUVFRTgwMjExX0lGX0ZNVChuYW1lLCBmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiBzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfZm10XyMjbmFtZSgJCQkJCVwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLAkJXApAQCAtNzEsNyArOTUsNyBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIlcE1cbiIsIHNkYXRhLT5maWVsZCk7CQlcCiB9CiAKLSNkZWZpbmUgX19JRUVFODAyMTFfSUZfRklMRShuYW1lKQkJCQkJXAorI2RlZmluZSBfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUsIF93cml0ZSkJCQkJXAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3JlYWRfIyNuYW1lKHN0cnVjdCBmaWxlICpmaWxlLAkJXAogCQkJCQljaGFyIF9fdXNlciAqdXNlcmJ1ZiwJCVwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKQEAgLTgyLDIyICsxMDYsOTkgQEAKIH0JCQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyNfb3BzID0gewkJCVwKIAkucmVhZCA9IGllZWU4MDIxMV9pZl9yZWFkXyMjbmFtZSwJCQkJXAorCS53cml0ZSA9IChfd3JpdGUpLAkJCQkJCVwKIAkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCiB9CiAKKyNkZWZpbmUgX19JRUVFODAyMTFfSUZfRklMRV9XKG5hbWUpCQkJCQlcCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfd3JpdGVfIyNuYW1lKHN0cnVjdCBmaWxlICpmaWxlLAkJXAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCVwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBpZWVlODAyMTFfaWZfd3JpdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCB1c2VyYnVmLCBjb3VudCwJXAorCQkJCSAgcHBvcywgaWVlZTgwMjExX2lmX3BhcnNlXyMjbmFtZSk7CVwKK30JCQkJCQkJCQlcCitfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUsIGllZWU4MDIxMV9pZl93cml0ZV8jI25hbWUpCisKKwogI2RlZmluZSBJRUVFODAyMTFfSUZfRklMRShuYW1lLCBmaWVsZCwgZm9ybWF0KQkJCQlcCiAJCUlFRUU4MDIxMV9JRl9GTVRfIyNmb3JtYXQobmFtZSwgZmllbGQpCQkJXAotCQlfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUpCisJCV9fSUVFRTgwMjExX0lGX0ZJTEUobmFtZSwgTlVMTCkKIAogLyogY29tbW9uIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKGRyb3BfdW5lbmNyeXB0ZWQsIGRyb3BfdW5lbmNyeXB0ZWQsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHJjX3JhdGVpZHhfbWFza18yZ2h6LCByY19yYXRlaWR4X21hc2tbSUVFRTgwMjExX0JBTkRfMkdIWl0sCisJCSAgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHJjX3JhdGVpZHhfbWFza181Z2h6LCByY19yYXRlaWR4X21hc2tbSUVFRTgwMjExX0JBTkRfNUdIWl0sCisJCSAgSEVYKTsKIAogLyogU1RBIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKGJzc2lkLCB1Lm1nZC5ic3NpZCwgTUFDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5tZ2QuYWlkLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUubWdkLmNhcGFiLCBIRVgpOworCitzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIGVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGUpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGVycjsKKworCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19TVEFUSUNfU01QUykgJiYKKwkgICAgc21wc19tb2RlID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhdXRvIHNob3VsZCBiZSBkeW5hbWljIGlmIGluIFBTIG1vZGUgKi8KKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTKSAmJgorCSAgICAoc21wc19tb2RlID09IElFRUU4MDIxMV9TTVBTX0RZTkFNSUMgfHwKKwkgICAgIHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHN1cHBvcnRlZCBvbmx5IG9uIG1hbmFnZWQgaW50ZXJmYWNlcyBmb3Igbm93ICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJZXJyID0gX19pZWVlODAyMTFfcmVxdWVzdF9zbXBzKHNkYXRhLCBzbXBzX21vZGUpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNtcHNfbW9kZXNbSUVFRTgwMjExX1NNUFNfTlVNX01PREVTXSA9IHsKKwlbSUVFRTgwMjExX1NNUFNfQVVUT01BVElDXSA9ICJhdXRvIiwKKwlbSUVFRTgwMjExX1NNUFNfT0ZGXSA9ICJvZmYiLAorCVtJRUVFODAyMTFfU01QU19TVEFUSUNdID0gInN0YXRpYyIsCisJW0lFRUU4MDIxMV9TTVBTX0RZTkFNSUNdID0gImR5bmFtaWMiLAorfTsKKworc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF9zbXBzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAicmVxdWVzdDogJXNcbnVzZWQ6ICVzXG4iLAorCQkJc21wc19tb2Rlc1tzZGF0YS0+dS5tZ2QucmVxX3NtcHNdLAorCQkJc21wc19tb2Rlc1tzZGF0YS0+dS5tZ2QuYXBfc21wc10pOworfQorCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfcGFyc2Vfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBtb2RlOworCisJZm9yIChtb2RlID0gMDsgbW9kZSA8IElFRUU4MDIxMV9TTVBTX05VTV9NT0RFUzsgbW9kZSsrKSB7CisJCWlmIChzdHJuY21wKGJ1Ziwgc21wc19tb2Rlc1ttb2RlXSwgYnVmbGVuKSA9PSAwKSB7CisJCQlpbnQgZXJyID0gaWVlZTgwMjExX3NldF9zbXBzKHNkYXRhLCBtb2RlKTsKKwkJCWlmICghZXJyKQorCQkJCXJldHVybiBidWZsZW47CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK19fSUVFRTgwMjExX0lGX0ZJTEVfVyhzbXBzKTsKIAogLyogQVAgYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUobnVtX3N0YV9wcywgdS5hcC5udW1fc3RhX3BzLCBBVE9NSUMpOwpAQCAtMTA5LDcgKzIxMCw3IEBACiAJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiV1XG4iLAogCQkJIHNrYl9xdWV1ZV9sZW4oJnNkYXRhLT51LmFwLnBzX2JjX2J1ZikpOwogfQotX19JRUVFODAyMTFfSUZfRklMRShudW1fYnVmZmVyZWRfbXVsdGljYXN0KTsKK19fSUVFRTgwMjExX0lGX0ZJTEUobnVtX2J1ZmZlcmVkX211bHRpY2FzdCwgTlVMTCk7CiAKIC8qIFdEUyBhdHRyaWJ1dGVzICovCiBJRUVFODAyMTFfSUZfRklMRShwZWVyLCB1Lndkcy5yZW1vdGVfYWRkciwgTUFDKTsKQEAgLTE1NCw0NiArMjU1LDUwIEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIERFQlVHRlNfQUREKG5hbWUsIHR5cGUpIFwKKyNkZWZpbmUgREVCVUdGU19BREQobmFtZSkgXAogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIHNkYXRhLT5kZWJ1Z2ZzLmRpciwgXAogCQkJICAgIHNkYXRhLCAmbmFtZSMjX29wcyk7CiAKKyNkZWZpbmUgREVCVUdGU19BRERfTU9ERShuYW1lLCBtb2RlKSBcCisJZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgbW9kZSwgc2RhdGEtPmRlYnVnZnMuZGlyLCBcCisJCQkgICAgc2RhdGEsICZuYW1lIyNfb3BzKTsKKwogc3RhdGljIHZvaWQgYWRkX3N0YV9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCBzdGEpOwotCURFQlVHRlNfQUREKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgc3RhKTsKLQlERUJVR0ZTX0FERChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgc3RhKTsKKwlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkKTsKKwlERUJVR0ZTX0FERChyY19yYXRlaWR4X21hc2tfMmdoeik7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzVnaHopOwogCi0JREVCVUdGU19BREQoYnNzaWQsIHN0YSk7Ci0JREVCVUdGU19BREQoYWlkLCBzdGEpOwotCURFQlVHRlNfQUREKGNhcGFiLCBzdGEpOworCURFQlVHRlNfQUREKGJzc2lkKTsKKwlERUJVR0ZTX0FERChhaWQpOworCURFQlVHRlNfQUREX01PREUoc21wcywgMDYwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9hcF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCBhcCk7Ci0JREVCVUdGU19BREQoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBhcCk7Ci0JREVCVUdGU19BREQobWF4X3JhdGVjdHJsX3JhdGVpZHgsIGFwKTsKKwlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkKTsKKwlERUJVR0ZTX0FERChyY19yYXRlaWR4X21hc2tfMmdoeik7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzVnaHopOwogCi0JREVCVUdGU19BREQobnVtX3N0YV9wcywgYXApOwotCURFQlVHRlNfQUREKGR0aW1fY291bnQsIGFwKTsKLQlERUJVR0ZTX0FERChudW1fYnVmZmVyZWRfbXVsdGljYXN0LCBhcCk7CisJREVCVUdGU19BREQobnVtX3N0YV9wcyk7CisJREVCVUdGU19BREQoZHRpbV9jb3VudCk7CisJREVCVUdGU19BREQobnVtX2J1ZmZlcmVkX211bHRpY2FzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF93ZHNfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCwgd2RzKTsKLQlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIHdkcyk7Ci0JREVCVUdGU19BREQobWF4X3JhdGVjdHJsX3JhdGVpZHgsIHdkcyk7CisJREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCk7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzJnaHopOworCURFQlVHRlNfQUREKHJjX3JhdGVpZHhfbWFza181Z2h6KTsKIAotCURFQlVHRlNfQUREKHBlZXIsIHdkcyk7CisJREVCVUdGU19BREQocGVlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF92bGFuX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIHZsYW4pOwotCURFQlVHRlNfQUREKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgdmxhbik7Ci0JREVCVUdGU19BREQobWF4X3JhdGVjdHJsX3JhdGVpZHgsIHZsYW4pOworCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQpOworCURFQlVHRlNfQUREKHJjX3JhdGVpZHhfbWFza18yZ2h6KTsKKwlERUJVR0ZTX0FERChyY19yYXRlaWR4X21hc2tfNWdoeik7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9tb25pdG9yX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMjgwLDE2ICszODUsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbm90aWZfcmVnaXN0ZXJlZDsKLQogdm9pZCBpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCWNoYXIgYnVmWzEwK0lGTkFNU0laXTsKIAotCWlmICghbm90aWZfcmVnaXN0ZXJlZCkKLQkJcmV0dXJuOwotCi0Jc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIHNkYXRhLT5uYW1lKTsKIAlzZGF0YS0+ZGVidWdmcy5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYnVmLAogCQlzZGF0YS0+bG9jYWwtPmh3LndpcGh5LT5kZWJ1Z2ZzZGlyKTsKIAlhZGRfZmlsZXMoc2RhdGEpOwpAQCAtMzA0LDU4ICs0MDQsMTggQEAKIAlzZGF0YS0+ZGVidWdmcy5kaXIgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IG5ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKLQkJCSB1bnNpZ25lZCBsb25nIHN0YXRlLAotCQkJIHZvaWQgKm5kZXYpCit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbmFtZV9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5kZXY7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCWNoYXIgYnVmWzEwK0lGTkFNU0laXTsKLQotCWlmIChzdGF0ZSAhPSBORVRERVZfQ0hBTkdFTkFNRSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWRldi0+aWVlZTgwMjExX3B0ciB8fCAhZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeS0+cHJpdmlkICE9IG1hYzgwMjExX3dpcGh5X3ByaXZpZCkKLQkJcmV0dXJuIDA7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJY2hhciBidWZbMTAgKyBJRk5BTVNJWl07CiAKIAlkaXIgPSBzZGF0YS0+ZGVidWdmcy5kaXI7CiAKIAlpZiAoIWRpcikKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgZGV2LT5uYW1lKTsKKwlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIHNkYXRhLT5uYW1lKTsKIAlpZiAoIWRlYnVnZnNfcmVuYW1lKGRpci0+ZF9wYXJlbnQsIGRpciwgZGlyLT5kX3BhcmVudCwgYnVmKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJtYWM4MDIxMTogZGVidWdmczogZmFpbGVkIHRvIHJlbmFtZSBkZWJ1Z2ZzICIKIAkJICAgICAgICJkaXIgdG8gJXNcbiIsIGJ1Zik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtYWM4MDIxMV9kZWJ1Z2ZzX25ldGRldl9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IG5ldGRldl9ub3RpZnksCi19OwotCi12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjODAyMTFfZGVidWdmc19uZXRkZXZfbm90aWZpZXIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibWFjODAyMTE6IGZhaWxlZCB0byBpbnN0YWxsIG5ldGRldiBub3RpZmllciwiCi0JCSAgICAgICAiIGRpc2FibGluZyBwZXItbmV0ZGV2IGRlYnVnZnMhXG4iKTsKLQl9IGVsc2UKLQkJbm90aWZfcmVnaXN0ZXJlZCA9IDE7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQodm9pZCkKLXsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjODAyMTFfZGVidWdmc19uZXRkZXZfbm90aWZpZXIpOwotCW5vdGlmX3JlZ2lzdGVyZWQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmggYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaAppbmRleCA3YWY3MzFmLi43OTAyNWU3OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgKQEAgLTYsOCArNiw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfYWRkX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKTsKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQodm9pZCk7Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbmFtZV9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMTUsMTAgKzE0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKQote30KLQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVuYW1lX25ldGRldigKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHt9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCAzZjQxNjA4Li5kOTI4MDBiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtNDQsNyArNDQsNyBAQAogCQlTVEFfT1BTKG5hbWUpCiAKIFNUQV9GSUxFKGFpZCwgc3RhLmFpZCwgRCk7Ci1TVEFfRklMRShkZXYsIHNkYXRhLT5kZXYtPm5hbWUsIFMpOworU1RBX0ZJTEUoZGV2LCBzZGF0YS0+bmFtZSwgUyk7CiBTVEFfRklMRShyeF9wYWNrZXRzLCByeF9wYWNrZXRzLCBMVSk7CiBTVEFfRklMRSh0eF9wYWNrZXRzLCB0eF9wYWNrZXRzLCBMVSk7CiBTVEFfRklMRShyeF9ieXRlcywgcnhfYnl0ZXMsIExVKTsKQEAgLTEyMCwzNiArMTIwLDM4IEBACiBzdGF0aWMgc3NpemVfdCBzdGFfYWdnX3N0YXR1c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMzAgKyBTVEFfVElEX05VTSAqIDcwXSwgKnAgPSBidWY7CisJY2hhciBidWZbNjQgKyBTVEFfVElEX05VTSAqIDQwXSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJuZXh0IGRpYWxvZ190b2tlbiBpcyAlIzAyeFxuIiwKKwlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJuZXh0IGRpYWxvZ190b2tlbjogJSMwMnhcbiIsCiAJCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvciArIDEpOworCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwKKwkJICAgICAgICJUSURcdFx0UlhcdERUS05cdFNTTlx0XHRUWFx0RFRLTlx0U1NOXHRwZW5kaW5nXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlRJRCAlMDJkOiIsIGkpOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBSWD0leCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIiUwMmQiLCBpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHRcdCV4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvRFRLTj0lIy4yeCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuMngiLAogCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPwogCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIi9TU049JSMuM3giLAorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjN4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID8KIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zc24gOiAwKTsKIAotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBUWD0leCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0XHQleCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSk7Ci0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL0RUS049JSMuMngiLAorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjJ4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvU1NOPSUjLjN4IiwKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHQlIy4zeCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+c3NuIDogMCk7Ci0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL3BlbmRpbmc9JTAzZCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JTAzZCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CiAJCQkJc2tiX3F1ZXVlX2xlbigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+cGVuZGluZykgOiAwKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcbiIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIApAQCAtMTYwLDcgKzE2MiwxMiBAQAogc3RhdGljIHNzaXplX3Qgc3RhX2h0X2NhcGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMjAwXSwgKnAgPSBidWY7CisjZGVmaW5lIFBSSU5UX0hUX0NBUChfY29uZCwgX3N0cikgXAorCWRvIHsgXAorCWlmIChfY29uZCkgXAorCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcdCIgX3N0ciAiXG4iKTsgXAorCX0gd2hpbGUgKDApCisJY2hhciBidWZbNTEyXSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodGMgPSAmc3RhLT5zdGEuaHRfY2FwOwpAQCAtMTY4LDE1ICsxNzUsNjQgQEAKIAlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJodCAlc3N1cHBvcnRlZFxuIiwKIAkJCWh0Yy0+aHRfc3VwcG9ydGVkID8gIiIgOiAibm90ICIpOwogCWlmIChodGMtPmh0X3N1cHBvcnRlZCkgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImNhcDogJSMuMnhcbiIsIGh0Yy0+Y2FwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJjYXA6ICUjLjR4XG4iLCBodGMtPmNhcCk7CisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgwKSksICJSWCBMRENQIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMSkpLCAiSFQyMC9IVDQwIik7CisJCVBSSU5UX0hUX0NBUCghKGh0Yy0+Y2FwICYgQklUKDEpKSwgIkhUMjAiKTsKKworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiAyKSAmIDB4MykgPT0gMCwgIlN0YXRpYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAxLCAiRHluYW1pYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAzLCAiU00gUG93ZXIgU2F2ZSBkaXNhYmxlZCIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNCkpLCAiUlggR3JlZW5maWVsZCIpOworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDUpKSwgIlJYIEhUMjAgU0dJIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNikpLCAiUlggSFQ0MCBTR0kiKTsKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCg3KSksICJUWCBTVEJDIik7CisKKwkJUFJJTlRfSFRfQ0FQKCgoaHRjLT5jYXAgPj4gOCkgJiAweDMpID09IDAsICJObyBSWCBTVEJDIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAxLCAiUlggU1RCQyAxLXN0cmVhbSIpOworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiA4KSAmIDB4MykgPT0gMiwgIlJYIFNUQkMgMi1zdHJlYW1zIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAzLCAiUlggU1RCQyAzLXN0cmVhbXMiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDEwKSksICJIVCBEZWxheWVkIEJsb2NrIEFjayIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjM4MzkgYnl0ZXMiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjc5MzUgYnl0ZXMiKTsKKworCQkvKgorCQkgKiBGb3IgYmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2UgdGhpcyB3b3VsZCBtZWFuIHRoZSBCU1MKKwkJICogZG9lcyBvciBkb2VzIG5vdCBhbGxvdyB0aGUgdXNhZ2Ugb2YgRFNTUy9DQ0sgSFQ0MC4KKwkJICogT3RoZXJ3aXNlIGl0IG1lYW5zIHRoZSBTVEEgZG9lcyBvciBkb2VzIG5vdCB1c2UKKwkJICogRFNTUy9DQ0sgSFQ0MC4KKwkJICovCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIkRTU1MvQ0NLIEhUNDAiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIk5vIERTU1MvQ0NLIEhUNDAiKTsKKworCQkvKiBCSVQoMTMpIGlzIHJlc2VydmVkICovCisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgxNCkpLCAiNDAgTUh6IEludG9sZXJhbnQiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDE1KSksICJMLVNJRyBUWE9QIHByb3RlY3Rpb24iKTsKKwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImFtcGR1IGZhY3Rvci9kZW5zaXR5OiAlZC8lZFxuIiwKIAkJCQlodGMtPmFtcGR1X2ZhY3RvciwgaHRjLT5hbXBkdV9kZW5zaXR5KTsKIAkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJNQ1MgbWFzazoiKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTjsgaSsrKQogCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIgJS4yeCIsCiAJCQkJCWh0Yy0+bWNzLnJ4X21hc2tbaV0pOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuTUNTIHJ4IGhpZ2hlc3Q6ICVkXG4iLAotCQkJCWxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCisJCS8qIElmIG5vdCBzZXQgdGhpcyBpcyBtZWFuaW5nbGVzcyAqLworCQlpZiAobGUxNl90b19jcHUoaHRjLT5tY3MucnhfaGlnaGVzdCkpIHsKKwkJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJCSAgICAgICAiTUNTIHJ4IGhpZ2hlc3Q6ICVkIE1icHNcbiIsCisJCQkJICAgICAgIGxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJfQorCiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiTUNTIHR4IHBhcmFtczogJXhcbiIsCiAJCQkJaHRjLT5tY3MudHhfcGFyYW1zKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAppbmRleCA5MjFkZDljLi5jM2Q4NDQwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKQEAgLTE0LDYgKzE0LDggQEAKIHsKIAlpbnQgcmV0OwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWxvY2FsLT5zdGFydGVkID0gdHJ1ZTsKIAlzbXBfbWIoKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5zdGFydCgmbG9jYWwtPmh3KTsKQEAgLTIzLDYgKzI1LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAlsb2NhbC0+b3BzLT5zdG9wKCZsb2NhbC0+aHcpOwogCXRyYWNlX2Rydl9zdG9wKGxvY2FsKTsKIApAQCAtMzYsMzUgKzQwLDQ3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlpbnQgcmV0ID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZSgmbG9jYWwtPmh3LCBjb25mKTsKLQl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgY29uZi0+bWFjX2FkZHIsIGNvbmYtPnZpZiwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoJmxvY2FsLT5odywgdmlmKTsKKwl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgdmlmX3RvX3NkYXRhKHZpZiksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOwotCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCBjb25mLT5tYWNfYWRkciwgY29uZi0+dmlmKTsKKwltaWdodF9zbGVlcCgpOworCisJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZSgmbG9jYWwtPmh3LCB2aWYpOworCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCB2aWZfdG9fc2RhdGEodmlmKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiBjaGFuZ2VkKQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CisJaW50IHJldDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CiAJdHJhY2VfZHJ2X2NvbmZpZyhsb2NhbCwgY2hhbmdlZCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAogCQkJCQl1MzIgY2hhbmdlZCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQpCi0JCWxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQoJmxvY2FsLT5odywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKLQl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKKwkJbG9jYWwtPm9wcy0+YnNzX2luZm9fY2hhbmdlZCgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgaW5mbywgY2hhbmdlZCk7CisJdHJhY2VfZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHNkYXRhLCBpbmZvLCBjaGFuZ2VkKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgZHJ2X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTA2LDM2ICsxMjIsNTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5zZXRfa2V5KCZsb2NhbC0+aHcsIGNtZCwgdmlmLCBzdGEsIGtleSk7Ci0JdHJhY2VfZHJ2X3NldF9rZXkobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPnNldF9rZXkoJmxvY2FsLT5odywgY21kLCAmc2RhdGEtPnZpZiwgc3RhLCBrZXkpOworCXRyYWNlX2Rydl9zZXRfa2V5KGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmNvbmYsCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyZXNzLCB1MzIgaXYzMiwKKwkJCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBpdjMyLAogCQkJCSAgICAgICB1MTYgKnBoYXNlMWtleSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqaXN0YSA9IE5VTEw7CisKKwlpZiAoc3RhKQorCQlpc3RhID0gJnN0YS0+c3RhOworCiAJaWYgKGxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSkKLQkJbG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KCZsb2NhbC0+aHcsIGNvbmYsIGFkZHJlc3MsCi0JCQkJCSAgICBpdjMyLCBwaGFzZTFrZXkpOwotCXRyYWNlX2Rydl91cGRhdGVfdGtpcF9rZXkobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpOworCQlsb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIGNvbmYsCisJCQkJCSAgICBpc3RhLCBpdjMyLCBwaGFzZTFrZXkpOworCXRyYWNlX2Rydl91cGRhdGVfdGtpcF9rZXkobG9jYWwsIHNkYXRhLCBjb25mLCBpc3RhLCBpdjMyKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7Ci0JaW50IHJldCA9IGxvY2FsLT5vcHMtPmh3X3NjYW4oJmxvY2FsLT5odywgcmVxKTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmh3X3NjYW4oJmxvY2FsLT5odywgcmVxKTsKIAl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgcmVxLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQoJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOwpAQCAtMTQzLDYgKzE3Niw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUoJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwpAQCAtMTUzLDYgKzE4OCw4IEBACiB7CiAJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5nZXRfc3RhdHMpCiAJCXJldCA9IGxvY2FsLT5vcHMtPmdldF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CiAJdHJhY2VfZHJ2X2dldF9zdGF0cyhsb2NhbCwgc3RhdHMsIHJldCk7CkBAIC0xNzIsNDMgKzIwOSw5MyBAQAogCQkJCQl1MzIgdmFsdWUpCiB7CiAJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQogCQlyZXQgPSBsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCgmbG9jYWwtPmh3LCB2YWx1ZSk7CiAJdHJhY2VfZHJ2X3NldF9ydHNfdGhyZXNob2xkKGxvY2FsLCB2YWx1ZSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgdTggdmFsdWUpCit7CisJaW50IHJldCA9IDA7CisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChsb2NhbC0+b3BzLT5zZXRfY292ZXJhZ2VfY2xhc3MpCisJCWxvY2FsLT5vcHMtPnNldF9jb3ZlcmFnZV9jbGFzcygmbG9jYWwtPmh3LCB2YWx1ZSk7CisJZWxzZQorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKworCXRyYWNlX2Rydl9zZXRfY292ZXJhZ2VfY2xhc3MobG9jYWwsIHZhbHVlLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKLQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCB2aWYsIGNtZCwgc3RhKTsKLQl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgdmlmLCBjbWQsIHN0YSk7CisJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIGNtZCwgc3RhKTsKKwl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgc2RhdGEsIGNtZCwgc3RhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9hZGQpCisJCXJldCA9IGxvY2FsLT5vcHMtPnN0YV9hZGQoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7CisJZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKKwkJCQkJU1RBX05PVElGWV9BREQsIHN0YSk7CisKKwl0cmFjZV9kcnZfc3RhX2FkZChsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwltaWdodF9zbGVlcCgpOworCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9yZW1vdmUpCisJCWxvY2FsLT5vcHMtPnN0YV9yZW1vdmUoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7CisJZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKKwkJCQkJU1RBX05PVElGWV9SRU1PVkUsIHN0YSk7CisKKwl0cmFjZV9kcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsIHN0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgcXVldWUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Y29uZl90eCkKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Y29uZl90eCgmbG9jYWwtPmh3LCBxdWV1ZSwgcGFyYW1zKTsKIAl0cmFjZV9kcnZfY29uZl90eChsb2NhbCwgcXVldWUsIHBhcmFtcywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkcnZfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5nZXRfdHhfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOwotCXRyYWNlX2Rydl9nZXRfdHhfc3RhdHMobG9jYWwsIHN0YXRzLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTY0IGRydl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXU2NCByZXQgPSAtMVVMTDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Z2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfZ2V0X3RzZihsb2NhbCwgcmV0KTsKQEAgLTIxNyw2ICszMDQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCB0c2YpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5zZXRfdHNmKCZsb2NhbC0+aHcsIHRzZik7CiAJdHJhY2VfZHJ2X3NldF90c2YobG9jYWwsIHRzZik7CkBAIC0yMjQsNiArMzEzLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpCiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfcmVzZXRfdHNmKGxvY2FsKTsKQEAgLTIzMiw2ICszMjMsOSBAQAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWludCByZXQgPSAxOworCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24oJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3R4X2xhc3RfYmVhY29uKGxvY2FsLCByZXQpOwpAQCAtMjM5LDIzICszMzMsMzQgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIHUxNiAqc3NuKQogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgdmlmLCBhY3Rpb24sCisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgYWN0aW9uLAogCQkJCQkgICAgICAgc3RhLCB0aWQsIHNzbik7Ci0JdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgdmlmLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCk7CisJdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZmtpbGxfcG9sbCkKIAkJbG9jYWwtPm9wcy0+cmZraWxsX3BvbGwoJmxvY2FsLT5odyk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGJvb2wgZHJvcCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X2ZsdXNoKGxvY2FsLCBkcm9wKTsKKwlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCisJCWxvY2FsLT5vcHMtPmZsdXNoKCZsb2NhbC0+aHcsIGRyb3ApOworfQogI2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCmluZGV4IGRhODQ5N2UuLjQxYmFmNzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTI1LDEwICsyNSwxMiBAQAogI2RlZmluZSBTVEFfUFJfRk1UCSIgc3RhOiVwTSIKICNkZWZpbmUgU1RBX1BSX0FSRwlfX2VudHJ5LT5zdGFfYWRkcgogCi0jZGVmaW5lIFZJRl9FTlRSWQlfX2ZpZWxkKGVudW0gbmw4MDIxMV9pZnR5cGUsIHZpZl90eXBlKSBfX2ZpZWxkKHZvaWQgKiwgdmlmKQotI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gdmlmID8gdmlmLT50eXBlIDogMDsgX19lbnRyeS0+dmlmID0gdmlmCi0jZGVmaW5lIFZJRl9QUl9GTVQJIiB2aWY6JXAoJWQpIgotI2RlZmluZSBWSUZfUFJfQVJHCV9fZW50cnktPnZpZiwgX19lbnRyeS0+dmlmX3R5cGUKKyNkZWZpbmUgVklGX0VOVFJZCV9fZmllbGQoZW51bSBubDgwMjExX2lmdHlwZSwgdmlmX3R5cGUpIF9fZmllbGQodm9pZCAqLCBzZGF0YSkgXAorCQkJX19zdHJpbmcodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gc2RhdGEtPnZpZi50eXBlOyBfX2VudHJ5LT5zZGF0YSA9IHNkYXRhOyBcCisJCQlfX2Fzc2lnbl9zdHIodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfUFJfRk1UCSIgdmlmOiVzKCVkKSIKKyNkZWZpbmUgVklGX1BSX0FSRwlfX2dldF9zdHIodmlmX25hbWUpLCBfX2VudHJ5LT52aWZfdHlwZQogCiBUUkFDRV9FVkVOVChkcnZfc3RhcnQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCByZXQpLApAQCAtNzAsMTEgKzcyLDEwIEBACiAKIFRSQUNFX0VWRU5UKGRydl9hZGRfaW50ZXJmYWNlLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgY29uc3QgdTggKmFkZHIsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGFkZHIsIHZpZiwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC04Niw3ICs4Nyw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKQEAgLTk3LDEwICs5OCw5IEBACiApOwogCiBUUkFDRV9FVkVOVChkcnZfcmVtb3ZlX2ludGVyZmFjZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgYWRkciwgdmlmKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtMTExLDcgKzExMSw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkpLAogCiAJVFBfcHJpbnRrKApAQCAtMTQwLDYgKzE0MCw3IEBACiAJCV9fZmllbGQodTgsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudCkKIAkJX19maWVsZChpbnQsIGNlbnRlcl9mcmVxKQogCQlfX2ZpZWxkKGludCwgY2hhbm5lbF90eXBlKQorCQlfX2ZpZWxkKGludCwgc21wcykKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0xNTUsNiArMTU2LDcgQEAKIAkJX19lbnRyeS0+c2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50ID0gbG9jYWwtPmh3LmNvbmYuc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCQlfX2VudHJ5LT5jZW50ZXJfZnJlcSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCQlfX2VudHJ5LT5jaGFubmVsX3R5cGUgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGU7CisJCV9fZW50cnktPnNtcHMgPSBsb2NhbC0+aHcuY29uZi5zbXBzX21vZGU7CiAJKSwKIAogCVRQX3ByaW50aygKQEAgLTE2NSwxMSArMTY3LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9ic3NfaW5mb19jaGFuZ2VkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKIAkJIHUzMiBjaGFuZ2VkKSwKIAotCVRQX0FSR1MobG9jYWwsIHZpZiwgaW5mbywgY2hhbmdlZCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGluZm8sIGNoYW5nZWQpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKQEAgLTI5MywxMSArMjk1LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9zZXRfa2V5LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC0zMjksMjYgKzMzMSwyOSBAQAogCiBUUkFDRV9FVkVOVChkcnZfdXBkYXRlX3RraXBfa2V5LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLAotCQkgY29uc3QgdTggKmFkZHJlc3MsIHUzMiBpdjMyKSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUzMiBpdjMyKSwKIAotCVRQX0FSR1MobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhLCBjb25mLCBzdGEsIGl2MzIpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKLQkJX19hcnJheSh1OCwgYWRkciwgNikKKwkJVklGX0VOVFJZCisJCVNUQV9FTlRSWQogCQlfX2ZpZWxkKHUzMiwgaXYzMikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHJlc3MsIDYpOworCQlWSUZfQVNTSUdOOworCQlTVEFfQVNTSUdOOwogCQlfX2VudHJ5LT5pdjMyID0gaXYzMjsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiBhZGRyOiVwTSBpdjMyOiUjeCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+YWRkciwgX19lbnRyeS0+aXYzMgorCQlMT0NBTF9QUl9GTVQgVklGX1BSX0ZNVCBTVEFfUFJfRk1UICIgaXYzMjolI3giLAorCQlMT0NBTF9QUl9BUkcsVklGX1BSX0FSRyxTVEFfUFJfQVJHLCBfX2VudHJ5LT5pdjMyCiAJKQogKTsKIApAQCAtNDg5LDEzICs0OTQsMzYgQEAKIAkpCiApOwogCitUUkFDRV9FVkVOVChkcnZfc2V0X2NvdmVyYWdlX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCB2YWx1ZSwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCB2YWx1ZSwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTgsIHZhbHVlKQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT52YWx1ZSwgX19lbnRyeS0+cmV0CisJKQorKTsKKwogVFJBQ0VfRVZFTlQoZHJ2X3N0YV9ub3RpZnksCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgdmlmLCBjbWQsIHN0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGNtZCwgc3RhKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC01MTcsNiArNTQ1LDU4IEBACiAJKQogKTsKIAorVFJBQ0VfRVZFTlQoZHJ2X3N0YV9hZGQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVZJRl9FTlRSWQorCQlTVEFfRU5UUlkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJU1RBX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCAiIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N0YV9yZW1vdmUsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAorCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJU1RBX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCVNUQV9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICBTVEFfUFJfRk1ULAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcKKwkpCispOworCiBUUkFDRV9FVkVOVChkcnZfY29uZl90eCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAogCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcywKQEAgLTU1MCwyOSArNjMwLDYgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfZ2V0X3R4X3N0YXRzLAotCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMsCi0JCSBpbnQgcmV0KSwKLQotCVRQX0FSR1MobG9jYWwsIHN0YXRzLCByZXQpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJTE9DQUxfRU5UUlkKLQkJX19maWVsZChpbnQsIHJldCkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJX19lbnRyeS0+cmV0ID0gcmV0OwotCSksCi0KLQlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCAiIHJldDolZCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+cmV0Ci0JKQotKTsKLQogVFJBQ0VfRVZFTlQoZHJ2X2dldF90c2YsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCByZXQpLAogCkBAIC02NTYsMTIgKzcxMywxMiBAQAogCiBUUkFDRV9FVkVOVChkcnZfYW1wZHVfYWN0aW9uLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwKIAkJIHUxNiAqc3NuLCBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIHZpZiwgYWN0aW9uLCBzdGEsIHRpZCwgc3NuLCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtNjg4LDYgKzc0NSwyNyBAQAogCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmFjdGlvbiwgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT5yZXQKIAkpCiApOworCitUUkFDRV9FVkVOVChkcnZfZmx1c2gsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGJvb2wgZHJvcCksCisKKwlUUF9BUkdTKGxvY2FsLCBkcm9wKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoYm9vbCwgZHJvcCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+ZHJvcCA9IGRyb3A7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgZHJvcDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+ZHJvcAorCSkKKyk7CiAjZW5kaWYgLyogIV9fTUFDODAyMTFfRFJJVkVSX1RSQUNFIHx8IFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggZDdkY2VlNi4uYmI2NzdhNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCQkJCSJmb3IgZGVsYmEgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkJCQkiZm9yIGRlbGJhIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzMywxMCArMTMzLDEwIEBACiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTE4NSwzICsxODUsNTAgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJfQogfQorCitpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMsIGNvbnN0IHU4ICpkYSwKKwkJCSAgICAgICBjb25zdCB1OCAqYnNzaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmFjdGlvbl9mcmFtZTsKKworCS8qIDI3ID0gaGVhZGVyICsgY2F0ZWdvcnkgKyBhY3Rpb24gKyBzbXBzIG1vZGUgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKDI3ICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJYWN0aW9uX2ZyYW1lID0gKHZvaWQgKilza2JfcHV0KHNrYiwgMjcpOworCW1lbWNweShhY3Rpb25fZnJhbWUtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShhY3Rpb25fZnJhbWUtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhY3Rpb25fZnJhbWUtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCWFjdGlvbl9mcmFtZS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfSFQ7CisJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuYWN0aW9uID0gV0xBTl9IVF9BQ1RJT05fU01QUzsKKwlzd2l0Y2ggKHNtcHMpIHsKKwljYXNlIElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQzoKKwljYXNlIElFRUU4MDIxMV9TTVBTX05VTV9NT0RFUzoKKwkJV0FSTl9PTigxKTsKKwljYXNlIElFRUU4MDIxMV9TTVBTX09GRjoKKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6CisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfU1RBVElDOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6CisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfRFlOQU1JQzsKKwkJYnJlYWs7CisJfQorCisJLyogd2UnbGwgZG8gbW9yZSBvbiBzdGF0dXMgb2YgdGhpcyBmcmFtZSAqLworCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDIyZjBjMmEuLmYzZTk0MjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9IGNwdV90b19sZTE2KGJlYWNvbl9pbnQpOwogCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHRzZik7CkBAIC0xODcsMTUgKzE4NywxNyBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKWJzcywgc3RydWN0IGNmZzgwMjExX2JzcywgcHJpdik7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIGJhc2ljX3JhdGVzOwogCWludCBpLCBqOwotCXUxNiBiZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKKwl1MTYgYmVhY29uX2ludCA9IGNic3MtPmJlYWNvbl9pbnRlcnZhbDsKIAogCWlmIChiZWFjb25faW50IDwgMTApCiAJCWJlYWNvbl9pbnQgPSAxMDsKIAotCXNiYW5kID0gc2RhdGEtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5jYnNzLmNoYW5uZWwtPmJhbmRdOworCXNiYW5kID0gc2RhdGEtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbY2Jzcy0+Y2hhbm5lbC0+YmFuZF07CiAKIAliYXNpY19yYXRlcyA9IDA7CiAKQEAgLTIxMiwxMiArMjE0LDEyIEBACiAJCX0KIAl9CiAKLQlfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MtPmNic3MuYnNzaWQsCisJX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgY2Jzcy0+YnNzaWQsCiAJCQkJICBiZWFjb25faW50LAotCQkJCSAgYnNzLT5jYnNzLmNoYW5uZWwsCisJCQkJICBjYnNzLT5jaGFubmVsLAogCQkJCSAgYmFzaWNfcmF0ZXMsCi0JCQkJICBic3MtPmNic3MuY2FwYWJpbGl0eSwKLQkJCQkgIGJzcy0+Y2Jzcy50c2YpOworCQkJCSAgY2Jzcy0+Y2FwYWJpbGl0eSwKKwkJCQkgIGNic3MtPnRzZik7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTIyOSw2ICsyMzEsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCWludCBmcmVxOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CkBAIC0yNTIsNyArMjU1LDcgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWdtdC0+c2EpOwogCQlpZiAoc3RhKSB7CiAJCQl1MzIgcHJldl9yYXRlczsKIApAQCAtMjY2LDE2ICsyNjksMTggQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgogCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgogCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkJICAgIHNkYXRhLT5uYW1lLAogCQkJCSAgICBzdGEtPnN0YS5hZGRyLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKICNlbmRpZgotCQl9IGVsc2UKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfSBlbHNlIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLAorCQkJCQkgICAgICAgc3VwcF9yYXRlcywgR0ZQX0tFUk5FTCk7CisJCX0KIAl9CiAKIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCkBAIC0yODMsMjUgKzI4OCwyMyBAQAogCWlmICghYnNzKQogCQlyZXR1cm47CiAKKwljYnNzID0gY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KTsKKwogCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOworCWJlYWNvbl90aW1lc3RhbXAgPSBjYnNzLT50c2Y7CiAKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KIAotCS8qIG1lcmdlIG9ubHkgb24gYmVhY29ucyAoPz8/KSAqLwotCWlmICghYmVhY29uKQotCQlnb3RvIHB1dF9ic3M7Ci0KIAkvKiB3ZSB1c2UgYSBmaXhlZCBCU1NJRCAqLwotCWlmIChzZGF0YS0+dS5pYnNzLmJzc2lkKQorCWlmIChzZGF0YS0+dS5pYnNzLmZpeGVkX2Jzc2lkKQogCQlnb3RvIHB1dF9ic3M7CiAKIAkvKiBub3QgYW4gSUJTUyAqLwotCWlmICghKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQorCWlmICghKGNic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCiAJCWdvdG8gcHV0X2JzczsKIAogCS8qIGRpZmZlcmVudCBjaGFubmVsICovCi0JaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCisJaWYgKGNic3MtPmNoYW5uZWwgIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCkKIAkJZ290byBwdXRfYnNzOwogCiAJLyogZGlmZmVyZW50IFNTSUQgKi8KQEAgLTMxMSw3ICszMTQsNyBAQAogCQlnb3RvIHB1dF9ic3M7CiAKIAkvKiBzYW1lIEJTU0lEICovCi0JaWYgKG1lbWNtcChic3MtPmNic3MuYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCWlmIChtZW1jbXAoY2Jzcy0+YnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQogCQlnb3RvIHB1dF9ic3M7CiAKIAlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CkBAIC0zNjQsMTAgKzM2NywxMSBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCiAJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5ic3NpZCk7CiAjZW5kaWYKIAkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7Ci0JCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwKKwkJCQkgICAgICAgc3VwcF9yYXRlcywgR0ZQX0tFUk5FTCk7CiAJfQogCiAgcHV0X2JzczoKQEAgLTM4MCw3ICszODQsOCBAQAogICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KICAqLwogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQorCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzLAorCQkJCQlnZnBfdCBnZnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKQEAgLTM5NCw3ICszOTksNyBAQAogCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgZW50cnkgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOworCQkJICAgICAgIHNkYXRhLT5uYW1lLCBhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MDYsMTAgKzQxMSwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkZGluZyBuZXcgSUJTUyBzdGF0aW9uICVwTSAoZGV2PSVzKVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgZ2ZwKTsKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQyMSw5ICs0MjYsOSBAQAogCiAJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOwogCisJLyogSWYgaXQgZmFpbHMsIG1heWJlIHdlIHJhY2VkIGFub3RoZXIgaW5zZXJ0aW9uPyAqLwogCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKLQkJcmV0dXJuIE5VTEw7Ci0KKwkJcmV0dXJuIHN0YV9pbmZvX2dldChzZGF0YSwgYWRkcik7CiAJcmV0dXJuIHN0YTsKIH0KIApAQCAtNDQ5LDYgKzQ1NCw5IEBACiAJcmV0dXJuIGFjdGl2ZTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQKKyAqLwogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CkBAIC00NzAsNyArNDc4LDcgQEAKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKLQkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5uYW1lKTsKIAogCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CiB9CkBAIC00OTIsMTMgKzUwMCwxMyBAQAogCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwogCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7CiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07CisJCQlic3NpZFtpXSBePSBzZGF0YS0+dmlmLmFkZHJbaV07CiAJCWJzc2lkWzBdICY9IH4weDAxOwogCQlic3NpZFswXSB8PSAweDAyOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBic3NpZCk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbaWZpYnNzLT5jaGFubmVsLT5iYW5kXTsKIApAQCAtNTE0LDExICs1MjIsMTUgQEAKIAkJCQkgIGNhcGFiaWxpdHksIDApOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSAorICovCisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CiAJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKIAlpbnQgYWN0aXZlX2lic3M7CkBAIC01MjcsNyArNTM5LDcgQEAKIAlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCiAJaWYgKGFjdGl2ZV9pYnNzKQpAQCAtNTQyLDIxICs1NTQsMjMgQEAKIAkJY2hhbiA9IGlmaWJzcy0+Y2hhbm5lbDsKIAlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihpZmlic3MtPmJzc2lkKSkKIAkJYnNzaWQgPSBpZmlic3MtPmJzc2lkOwotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sIGJzc2lkLAotCQkJCSAgICAgICBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4sCi0JCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTIHwKLQkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1ksCi0JCQkJICAgICAgIGNhcGFiaWxpdHkpOworCWNic3MgPSBjZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgY2hhbiwgYnNzaWQsCisJCQkJaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuLAorCQkJCVdMQU5fQ0FQQUJJTElUWV9JQlNTIHwgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1ksCisJCQkJY2FwYWJpbGl0eSk7CiAKLQlpZiAoYnNzKSB7CisJaWYgKGNic3MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKworCQlic3MgPSAodm9pZCAqKWNic3MtPnByaXY7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKLQkJICAgICAgICIlcE1cbiIsIGJzcy0+Y2Jzcy5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CisJCSAgICAgICAiJXBNXG4iLCBjYnNzLT5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgogCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIGNic3MtPmJzc2lkKTsKIAogCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CkBAIC01NjgsMTggKzU4MiwxNCBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAKIAkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCi0JaWYgKGlmaWJzcy0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgJiYKLQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7Ci0JCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwKLQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpKTsKLQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZpYnNzLT5sYXN0X3NjYW5fY29tcGxldGVkICsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZmlic3MtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKwogCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPm5hbWUpOwogCiAJCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwKIAkJCQkJCWlmaWJzcy0+c3NpZF9sZW4pOwotCX0gZWxzZSBpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCX0gZWxzZSB7CiAJCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOwogCiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmaWJzcy0+aWJzc19qb2luX3JlcSArCkBAIC01ODksNyArNTk5LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCi0JCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5uYW1lLAogCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAogCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCkBAIC01OTcsNyArNjA3LDYgQEAKIAkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKIAkJfQogCi0JCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKIAkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLAogCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBpbnRlcnZhbCkpOwogCX0KQEAgLTYyMyw3ICs2MzIsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKIAkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCisJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCiAJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIApAQCAtNjQxLDcgKzY1MCw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgogCQkgICAgICAgImZyb20gJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPnNhKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQpAQCAtNjYxLDcgKzY3MCw3IEBACiAJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIHJlc3AtPmRhKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwpAQCAtNjc1LDcgKzY4NCw3IEBACiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAKLQlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCiAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OwpAQCAtNzQ4LDcgKzc1Nyw3IEBACiAJaWYgKFdBUk5fT04obG9jYWwtPnN1c3BlbmRlZCkpCiAJCXJldHVybjsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKGxvY2FsLT5zY2FubmluZykKQEAgLTgzMSw3ICs4NDAsNyBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggOTFkYzg2My4uMjQxNTMzZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgotICogQ29weXJpZ2h0IDIwMDctMjAwOAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNTgsNiArNTgsMTUgQEAKIAogI2RlZmluZSBUVV9UT19FWFBfVElNRSh4KQkoamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoKHgpICogMTAyNCkpCiAKKyNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfVUFQU0RfUVVFVUVTIFwKKwkoSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19CSyB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19CRSB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19WSSB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19WTykKKworI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9NQVhfU1BfTEVOCQlcCisJSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9BTEwKKwogc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9lbnRyeSB7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7CiAJdW5zaWduZWQgaW50IHNlcTsKQEAgLTcxLDkgKzgwLDYgQEAKIAogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyB7Ci0JLyogWWVzLCB0aGlzIGlzIGEgaGFjayAqLwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgY2JzczsKLQogCS8qIGRvbid0IHdhbnQgdG8gbG9vayB1cCBhbGwgdGhlIHRpbWUgKi8KIAlzaXplX3Qgc3NpZF9sZW47CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKQEAgLTgxLDYgKzg3LDcgQEAKIAl1OCBkdGltX3BlcmlvZDsKIAogCWJvb2wgd21tX3VzZWQ7CisJYm9vbCB1YXBzZF9zdXBwb3J0ZWQ7CiAKIAl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKIApAQCAtMTQwLDcgKzE0Nyw2IEBACiAKIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMjI4LDMxICsyMzQsNzcgQEAKIAl1OCBmbGFnczsKIH07CiAKLWVudW0gaWVlZTgwMjExX21nZF9zdGF0ZSB7Ci0JSUVFRTgwMjExX01HRF9TVEFURV9JRExFLAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUsCi0JSUVFRTgwMjExX01HRF9TVEFURV9BVVRILAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfQVNTT0MsCitlbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgeworCUlFRUU4MDIxMV9XT1JLX0FCT1JULAorCUlFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRSwKKwlJRUVFODAyMTFfV09SS19BVVRILAorCUlFRUU4MDIxMV9XT1JLX0FTU09DLAorCUlFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMLAogfTsKIAotc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayB7CisvKioKKyAqIGVudW0gd29ya19kb25lX3Jlc3VsdCAtIGluZGljYXRlcyB3aGF0IHRvIGRvIGFmdGVyIHdvcmsgd2FzIGRvbmUKKyAqCisgKiBAV09SS19ET05FX0RFU1RST1k6IFRoaXMgd29yayBpdGVtIGlzIG5vIGxvbmdlciBuZWVkZWQsIGRlc3Ryb3kuCisgKiBAV09SS19ET05FX1JFUVVFVUU6IFRoaXMgd29yayBpdGVtIHdhcyByZXNldCB0byBiZSByZXVzZWQsIGFuZAorICoJc2hvdWxkIGJlIHJlcXVldWVkLgorICovCitlbnVtIHdvcmtfZG9uZV9yZXN1bHQgeworCVdPUktfRE9ORV9ERVNUUk9ZLAorCVdPUktfRE9ORV9SRVFVRVVFLAorfTsKKworc3RydWN0IGllZWU4MDIxMV93b3JrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlpbnQgaWVfbGVuOwotCXU4IHByZXZfYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTggc3NpZF9sZW47CisKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCWVudW0gd29ya19kb25lX3Jlc3VsdCAoKmRvbmUpKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7CisKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHN0YXRlOwotCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbjsKKwllbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgdHlwZTsKIAotCWludCB0cmllczsKKwl1OCBmaWx0ZXJfdGFbRVRIX0FMRU5dOwogCi0JdTgga2V5W1dMQU5fS0VZX0xFTl9XRVAxMDRdOwotCXU4IGtleV9sZW4sIGtleV9pZHg7CisJYm9vbCBzdGFydGVkOwogCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IHRyaWVzOworCQkJdTE2IGFsZ29yaXRobSwgdHJhbnNhY3Rpb247CisJCQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCQkJdTggc3NpZF9sZW47CisJCQl1OCBrZXlbV0xBTl9LRVlfTEVOX1dFUDEwNF07CisJCQl1OCBrZXlfbGVuLCBrZXlfaWR4OworCQkJYm9vbCBwcml2YWN5OworCQl9IHByb2JlX2F1dGg7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisJCQljb25zdCB1OCAqc3VwcF9yYXRlczsKKwkJCWNvbnN0IHU4ICpodF9pbmZvcm1hdGlvbl9pZTsKKwkJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzOworCQkJaW50IHRyaWVzOworCQkJdTE2IGNhcGFiaWxpdHk7CisJCQl1OCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwkJCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJCQl1OCBzc2lkX2xlbjsKKwkJCXU4IHN1cHBfcmF0ZXNfbGVuOworCQkJYm9vbCB3bW1fdXNlZCwgdXNlXzExbiwgdWFwc2RfdXNlZDsKKwkJfSBhc3NvYzsKKwkJc3RydWN0IHsKKwkJCXUzMiBkdXJhdGlvbjsKKwkJfSByZW1haW47CisJfTsKKworCWludCBpZV9sZW47CiAJLyogbXVzdCBiZSBsYXN0ICovCi0JdTggaWVbMF07IC8qIGZvciBhdXRoIG9yIGFzc29jIGZyYW1lLCBub3QgcHJvYmUgKi8KKwl1OCBpZVswXTsKIH07CiAKIC8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCkBAIC0yNjAsMTUgKzMxMiwxMSBAQAogCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwJPSBCSVQoMCksCiAJSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwJPSBCSVQoMSksCiAJSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQJPSBCSVQoMiksCi0JSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAk9IEJJVCgzKSwKIAlJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOCT0gQklUKDQpLAogCUlFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECT0gQklUKDUpLAogCUlFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJPSBCSVQoNiksCi19OwotCi0vKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCi1lbnVtIGllZWU4MDIxMV9zdGFfcmVxdWVzdCB7Ci0JSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwKKwlJRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQJPSBCSVQoNyksCisJSUVFRTgwMjExX1NUQV9OVUxMRlVOQ19BQ0tFRAk9IEJJVCg4KSwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CkBAIC0yODUsMjEgKzMzMywxOCBAQAogCWludCBwcm9iZV9zZW5kX2NvdW50OwogCiAJc3RydWN0IG11dGV4IG10eDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYXNzb2NpYXRlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICpvbGRfYXNzb2NpYXRlX3dvcms7Ci0Jc3RydWN0IGxpc3RfaGVhZCB3b3JrX2xpc3Q7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYXNzb2NpYXRlZDsKIAogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAogCXUxNiBhaWQ7Ci0JdTE2IGNhcGFiOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAKIAl1bnNpZ25lZCBsb25nIHRpbWVyc19ydW5uaW5nOyAvKiB1c2VkIGZvciBxdWllc2NlL3Jlc3RhcnQgKi8KIAlib29sIHBvd2Vyc2F2ZTsgLyogcG93ZXJzYXZlIHJlcXVlc3RlZCBmb3IgdGhpcyBpZmFjZSAqLwotCi0JdW5zaWduZWQgbG9uZyByZXF1ZXN0OworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSByZXFfc21wcywgLyogcmVxdWVzdGVkIHNtcHMgbW9kZSAqLworCQkJCSBhcF9zbXBzOyAvKiBzbXBzIG1vZGUgQVAgdGhpbmtzIHdlJ3JlIGluICovCiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTQzMyw2ICs0NzgsOCBAQAogCiAJaW50IGRyb3BfdW5lbmNyeXB0ZWQ7CiAKKwljaGFyIG5hbWVbSUZOQU1TSVpdOworCiAJLyoKIAkgKiBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEhUIG9wbW9kZSAoc3RvcmVkIGluCiAJICogdmlmLmJzc19pbmZvLmh0X29wZXJhdGlvbl9tb2RlKSBpcyB2YWxpZC4KQEAgLTQ1OCw4ICs1MDUsOCBAQAogCSAqLwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzczsKIAotCWludCBmb3JjZV91bmljYXN0X3JhdGVpZHg7IC8qIGZvcmNlZCBUWCByYXRlaWR4IGZvciB1bmljYXN0IGZyYW1lcyAqLwotCWludCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeDsgLyogbWF4IFRYIHJhdGVpZHggZm9yIHJhdGUgY29udHJvbCAqLworCS8qIGJpdG1hcCBvZiBhbGxvd2VkIChub24tTUNTKSByYXRlIGluZGV4ZXMgZm9yIHJhdGUgY29udHJvbCAqLworCXUzMiByY19yYXRlaWR4X21hc2tbSUVFRTgwMjExX05VTV9CQU5EU107CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgYXA7CkBAIC01NjUsNiArNjEyLDE1IEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAogCS8qCisJICogd29yayBzdHVmZiwgcG90ZW50aWFsbHkgb2ZmLWNoYW5uZWwgKGluIHRoZSBmdXR1cmUpCisJICovCisJc3RydWN0IG11dGV4IHdvcmtfbXR4OworCXN0cnVjdCBsaXN0X2hlYWQgd29ya19saXN0OworCXN0cnVjdCB0aW1lcl9saXN0IHdvcmtfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfd29yazsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdvcmtfc2tiX3F1ZXVlOworCisJLyoKIAkgKiBwcml2YXRlIHdvcmtxdWV1ZSB0byBtYWM4MDIxMS4gbWFjODAyMTEgbWFrZXMgdGhpcyBhY2Nlc3NpYmxlCiAJICogdmlhIGllZWU4MDIxMV9xdWV1ZV93b3JrKCkKIAkgKi8KQEAgLTU4Niw2ICs2NDIsOSBAQAogCS8qIHVzZWQgZm9yIHVwbG9hZGluZyBjaGFuZ2VkIG1jIGxpc3QgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjb25maWdfZmlsdGVyOwogCisJLyogdXNlZCB0byByZWNvbmZpZ3VyZSBoYXJkd2FyZSBTTSBQUyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNhbGNfc21wczsKKwogCS8qIGFnZ3JlZ2F0ZWQgbXVsdGljYXN0IGxpc3QgKi8KIAlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdDsKIAlpbnQgbWNfY291bnQ7CkBAIC02MzAsMTUgKzY4OSwxOCBAQAogCiAJLyogU3RhdGlvbiBkYXRhICovCiAJLyoKLQkgKiBUaGUgbG9jayBvbmx5IHByb3RlY3RzIHRoZSBsaXN0LCBoYXNoLCB0aW1lciBhbmQgY291bnRlcgotCSAqIGFnYWluc3QgbWFuaXB1bGF0aW9uLCByZWFkcyBhcmUgZG9uZSBpbiBSQ1UuIEFkZGl0aW9uYWxseSwKLQkgKiB0aGUgbG9jayBwcm90ZWN0cyBlYWNoIEJTUydzIFRJTSBiaXRtYXAuCisJICogVGhlIG11dGV4IG9ubHkgcHJvdGVjdHMgdGhlIGxpc3QgYW5kIGNvdW50ZXIsCisJICogcmVhZHMgYXJlIGRvbmUgaW4gUkNVLgorCSAqIEFkZGl0aW9uYWxseSwgdGhlIGxvY2sgcHJvdGVjdHMgdGhlIGhhc2ggdGFibGUsCisJICogdGhlIHBlbmRpbmcgbGlzdCBhbmQgZWFjaCBCU1MncyBUSU0gYml0bWFwLgogCSAqLworCXN0cnVjdCBtdXRleCBzdGFfbXR4OwogCXNwaW5sb2NrX3Qgc3RhX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBudW1fc3RhOwotCXN0cnVjdCBsaXN0X2hlYWQgc3RhX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBzdGFfbGlzdCwgc3RhX3BlbmRpbmdfbGlzdDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9oYXNoW1NUQV9IQVNIX1NJWkVdOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YV9jbGVhbnVwOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGFfZmluaXNoX3dvcms7CiAJaW50IHN0YV9nZW5lcmF0aW9uOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKQEAgLTY4OSw2ICs3NTEsMTAgQEAKIAllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbm5lbF90eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqY3NhX2NoYW5uZWw7CiAKKwkvKiBUZW1wb3JhcnkgcmVtYWluLW9uLWNoYW5uZWwgZm9yIG9mZi1jaGFubmVsIG9wZXJhdGlvbnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnRtcF9jaGFubmVsOworCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgdG1wX2NoYW5uZWxfdHlwZTsKKwogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KIAl1MzIgZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CkBAIC03MDgsMTAgKzc3NCw2IEBACiAJICAgICBhc3NvY19sZWRfbmFtZVszMl0sIHJhZGlvX2xlZF9uYW1lWzMyXTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhX2RlYnVnZnNfYWRkOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAkvKiBUWC9SWCBoYW5kbGVyIHN0YXRpc3RpY3MgKi8KIAl1bnNpZ25lZCBpbnQgdHhfaGFuZGxlcnNfZHJvcDsKQEAgLTc0NSw4ICs4MDcsMjIgQEAKIAlpbnQgd2lmaV93bWVfbm9hY2tfdGVzdDsKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKKwkvKgorCSAqIEJpdG1hc2sgb2YgZW5hYmxlZCB1LWFwc2QgcXVldWVzLAorCSAqIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfQkUgJiBjby4gTmVlZHMgYSBuZXcgYXNzb2NpYXRpb24KKwkgKiB0byB0YWtlIGVmZmVjdC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdWFwc2RfcXVldWVzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBidWZmZXJlZCBmcmFtZXMgQVAgY2FuIGRlbGl2ZXIgZHVyaW5nIGEKKwkgKiBzZXJ2aWNlIHBlcmlvZCwgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9BTEwgb3Igc2ltaWxhci4KKwkgKiBOZWVkcyBhIG5ldyBhc3NvY2lhdGlvbiB0byB0YWtlIGVmZmVjdC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdWFwc2RfbWF4X3NwX2xlbjsKKwogCWJvb2wgcHNwb2xsaW5nOwotCWJvb2wgc2Nhbl9wc19lbmFibGVkOworCWJvb2wgb2ZmY2hhbm5lbF9wc19lbmFibGVkOwogCS8qCiAJICogUFMgY2FuIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHdlIGhhdmUgZXhhY3RseSBvbmUgbWFuYWdlZAogCSAqIGludGVyZmFjZSAoYW5kIG1vbml0b3JzKSBpbiBQUywgdGhpcyB0aGVuIHBvaW50cyB0aGVyZS4KQEAgLTc2MCw2ICs4MzYsOCBAQAogCWludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0gKi8KIAlpbnQgcG93ZXJfY29uc3RyX2xldmVsOyAvKiBpbiBkQm0gKi8KIAorCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGU7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKQEAgLTg3NCw2ICs5NTIsOCBAQAogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAorZXh0ZXJuIGJvb2wgaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7CisKIC8qIFNUQSBjb2RlICovCiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTg4Niw2ICs5NjYsMTAgQEAKIGludCBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKIAkJCSAgIHZvaWQgKmNvb2tpZSk7CitpbnQgaWVlZTgwMjExX21nZF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKTsKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC05MDUsNyArOTg5LDggQEAKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7CisJCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzLAorCQkJCQlnZnBfdCBnZnApOwogaW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcyk7CiBpbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpAQCAtOTM3LDcgKzEwMjIsMTUgQEAKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwogCisvKiBvZmYtY2hhbm5lbCBoZWxwZXJzICovCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3BfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9zdGF0aW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBib29sIGVuYWJsZV9iZWFjb25pbmcpOworCiAvKiBpbnRlcmZhY2UgaGFuZGxpbmcgKi8KK2ludCBpZWVlODAyMTFfaWZhY2VfaW5pdCh2b2lkKTsKK3ZvaWQgaWVlZTgwMjExX2lmYWNlX2V4aXQodm9pZCk7CiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5ld19kZXYsIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwKIAkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKQEAgLTk0OCw2ICsxMDQxLDExIEBACiB1MzIgX19pZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBpZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJcmV0dXJuIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldik7Cit9CisKIC8qIHR4IGhhbmRsaW5nICovCiB2b2lkIGllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3R4X3BlbmRpbmcodW5zaWduZWQgbG9uZyBkYXRhKTsKQEAgLTk3Niw2ICsxMDc0LDkgQEAKIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKIAkJCSAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKTsKK2ludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcywgY29uc3QgdTggKmRhLAorCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCk7CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwKIAkJCQl1MTYgdGlkLCB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKQEAgLTEwODYsNiArMTE4NywyOCBAQAogdTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKIAkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworaW50IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZSk7Cit2b2lkIGllZWU4MDIxMV9yZWNhbGNfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKmZvcnNkYXRhKTsKKworc2l6ZV90IGllZWU4MDIxMV9pZV9zcGxpdChjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sCisJCQkgIGNvbnN0IHU4ICppZHMsIGludCBuX2lkcywgc2l6ZV90IG9mZnNldCk7CitzaXplX3QgaWVlZTgwMjExX2llX3NwbGl0X3ZlbmRvcihjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sIHNpemVfdCBvZmZzZXQpOworCisvKiBpbnRlcm5hbCB3b3JrIGl0ZW1zICovCit2b2lkIGllZWU4MDIxMV93b3JrX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordm9pZCBpZWVlODAyMTFfYWRkX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3ayk7Cit2b2lkIGZyZWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKTsKK3ZvaWQgaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfd29ya19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpZWVlODAyMTFfd2tfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgdTY0ICpjb29raWUpOworaW50IGllZWU4MDIxMV93a19jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU2NCBjb29raWUpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX05PSU5MSU5FCiAjZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDMyYWJhZTMuLjA3OTNkN2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC02Miw2ICs2MiwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqc2EgPSBhZGRyOworCWludCByZXQ7CisKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgc2EpOworCisJaWYgKHJldCA9PSAwKQorCQltZW1jcHkoc2RhdGEtPnZpZi5hZGRyLCBzYS0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaWRlbnRpY2FsX21hY19hZGRyX2FsbG93ZWQoaW50IHR5cGUxLCBpbnQgdHlwZTIpCiB7CiAJcmV0dXJuIHR5cGUxID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKQEAgLTgyLDcgKzk5LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpuc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJaW50IHJlczsKIAl1MzIgaHdfcmVjb25mX2ZsYWdzID0gMDsKQEAgLTk3LDcgKzExMyw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5zZGF0YS0+ZGV2OwogCi0JCWlmIChuZGV2ICE9IGRldiAmJiBuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCWlmIChuZGV2ICE9IGRldiAmJiBpZWVlODAyMTFfc2RhdGFfcnVubmluZyhuc2RhdGEpKSB7CiAJCQkvKgogCQkJICogQWxsb3cgb25seSBhIHNpbmdsZSBJQlNTIGludGVyZmFjZSB0byBiZSB1cCBhdCBhbnkKIAkJCSAqIHRpbWUuIFRoaXMgaXMgcmVzdHJpY3RlZCBiZWNhdXNlIGJlYWNvbiBkaXN0cmlidXRpb24KQEAgLTE4Myw3ICsxOTksNyBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5zZGF0YS0+ZGV2OwogCiAJCS8qCi0JCSAqIE5vIG5lZWQgdG8gY2hlY2sgbmV0aWZfcnVubmluZyBzaW5jZSB3ZSBkbyBub3QgYWxsb3cKKwkJICogTm8gbmVlZCB0byBjaGVjayBydW5uaW5nIHNpbmNlIHdlIGRvIG5vdCBhbGxvdwogCQkgKiBpdCB0byBzdGFydCB1cCB3aXRoIHRoaXMgaW52YWxpZCBhZGRyZXNzLgogCQkgKi8KIAkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihudWxsX2FkZHIsIG5kZXYtPmRldl9hZGRyKSA9PSAwKSB7CkBAIC0yMzQsMTAgKzI1MCw3IEBACiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCQljb25mLm1hY19hZGRyID0gZGV2LT5kZXZfYWRkcjsKLQkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3N0b3A7CiAKQEAgLTMyMCw3ICszMzMsNyBAQAogCiAJcmV0dXJuIDA7CiAgZXJyX2RlbF9pbnRlcmZhY2U6Ci0JZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwlkcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgJnNkYXRhLT52aWYpOwogIGVycl9zdG9wOgogCWlmICghbG9jYWwtPm9wZW5fY291bnQpCiAJCWRydl9zdG9wKGxvY2FsKTsKQEAgLTMzNSw3ICszNDgsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKQEAgLTM0OCw2ICszNjAsMTEgQEAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAogCS8qCisJICogUHVyZ2Ugd29yayBmb3IgdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc2RhdGEpOworCisJLyoKIAkgKiBOb3cgZGVsZXRlIGFsbCBhY3RpdmUgYWdncmVnYXRpb24gc2Vzc2lvbnMuCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNTE0LDEyICs1MzEsOSBAQAogCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCi0JCWNvbmYudmlmID0gJnNkYXRhLT52aWY7Ci0JCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJY29uZi5tYWNfYWRkciA9IGRldi0+ZGV2X2FkZHI7CiAJCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLwogCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKLQkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAl9CiAKIAlzZGF0YS0+YnNzID0gTlVMTDsKQEAgLTY1OSw3ICs2NzMsNyBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1IAk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBpZWVlODAyMTFfY2hhbmdlX21hYywKIAkubmRvX3NlbGVjdF9xdWV1ZQk9IGllZWU4MDIxMV9uZXRkZXZfc2VsZWN0X3F1ZXVlLAogfTsKIApAQCAtNjgxLDEwICs2OTUsMTQgQEAKIAogCWhkciA9ICh2b2lkICopKCh1OCAqKXNrYi0+ZGF0YSArIGxlMTZfdG9fY3B1KHJ0YXAtPml0X2xlbikpOwogCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlza2ItPnByaW9yaXR5ID0gNzsKIAkJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbc2tiLT5wcmlvcml0eV07CiAJfQorCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJc2tiLT5wcmlvcml0eSA9IDA7CisJCXJldHVybiBpZWVlODAyXzFkX3RvX2FjW3NrYi0+cHJpb3JpdHldOworCX0KIAogCXAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAlza2ItPnByaW9yaXR5ID0gKnAgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwpAQCAtNzc5LDcgKzc5Nyw3IEBACiAJICogYW5kIGdvZXMgaW50byB0aGUgcmVxdWVzdGVkIG1vZGUuCiAJICovCiAKLQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogUHVyZ2UgYW5kIHJlc2V0IHR5cGUtZGVwZW5kZW50IHN0YXRlLiAqLwpAQCAtODMzLDYgKzg1MSw4IEBACiAJLyogZG9uJ3QgdXNlIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoICovCiAJc2RhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAluZGV2LT5pZWVlODAyMTFfcHRyID0gJnNkYXRhLT53ZGV2OworCW1lbWNweShzZGF0YS0+dmlmLmFkZHIsIG5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHNkYXRhLT5uYW1lLCBuZGV2LT5uYW1lLCBJRk5BTVNJWik7CiAKIAkvKiBpbml0aWFsaXNlIHR5cGUtaW5kZXBlbmRlbnQgZGF0YSAqLwogCXNkYXRhLT53ZGV2LndpcGh5ID0gbG9jYWwtPmh3LndpcGh5OwpAQCAtODQ0LDggKzg2NCwxMiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT5rZXlfbGlzdCk7CiAKLQlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2ldOworCQlzZGF0YS0+cmNfcmF0ZWlkeF9tYXNrW2ldID0KKwkJCXNiYW5kID8gKDEgPDwgc2JhbmQtPm5fYml0cmF0ZXMpIC0gMSA6IDA7CisJfQogCiAJLyogc2V0dXAgdHlwZS1kZXBlbmRlbnQgZGF0YSAqLwogCWllZWU4MDIxMV9zZXR1cF9zZGF0YShzZGF0YSwgdHlwZSk7CkBAIC05MzgsNiArOTYyLDggQEAKIAkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKICNlbmRpZgogCisJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisKIAlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9JRExFOwogCXJldHVybiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTsKIH0KQEAgLTk0NywxNiArOTczLDE4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGNvdW50ID0gMDsKIAorCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpCisJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJ3b3JraW5nIik7CisKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm4gaWVlZTgwMjExX2lkbGVfb2ZmKGxvY2FsLCAic2Nhbm5pbmciKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCBkaXNhYmxlZCBtYW5hZ2VkIGludGVyZmFjZXMgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICAhc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgJiYKLQkJICAgIGxpc3RfZW1wdHkoJnNkYXRhLT51Lm1nZC53b3JrX2xpc3QpKQorCQkgICAgIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCB1bnVzZWQgSUJTUyBpbnRlcmZhY2VzICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTk4NCwzICsxMDEyLDQxIEBACiAJaWYgKGNoZykKIAkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgY2hnKTsKIH0KKworc3RhdGljIGludCBuZXRkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSwKKwkJCSB2b2lkICpuZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJaWYgKHN0YXRlICE9IE5FVERFVl9DSEFOR0VOQU1FKQorCQlyZXR1cm4gMDsKKworCWlmICghZGV2LT5pZWVlODAyMTFfcHRyIHx8ICFkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5KQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5LT5wcml2aWQgIT0gbWFjODAyMTFfd2lwaHlfcHJpdmlkKQorCQlyZXR1cm4gMDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCW1lbWNweShzZGF0YS0+bmFtZSwgZGV2LT5uYW1lLCBJRk5BTVNJWik7CisKKwlpZWVlODAyMTFfZGVidWdmc19yZW5hbWVfbmV0ZGV2KHNkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtYWM4MDIxMV9uZXRkZXZfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBuZXRkZXZfbm90aWZ5LAorfTsKKworaW50IGllZWU4MDIxMV9pZmFjZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjODAyMTFfbmV0ZGV2X25vdGlmaWVyKTsKK30KKwordm9pZCBpZWVlODAyMTFfaWZhY2VfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtYWM4MDIxMV9uZXRkZXZfbm90aWZpZXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDY1OWE0MmQuLjgxNjBkOWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCQkgICAgIHUuYXApOwogCi0JcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CisJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgc2RhdGEsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAoIXJldCkgewogCQlzcGluX2xvY2tfYmgoJnRvZG9fbG9jayk7CkBAIC0xODEsNyArMTgxLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJICAgICB1LmFwKTsKIAotCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIERJU0FCTEVfS0VZLCAmc2RhdGEtPnZpZiwKKwlyZXQgPSBkcnZfc2V0X2tleShrZXktPmxvY2FsLCBESVNBQkxFX0tFWSwgc2RhdGEsCiAJCQkgIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAocmV0KQpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQkgKi8KIAogCQkJLyogc2FtZSBoZXJlLCB0aGUgQVAgY291bGQgYmUgdXNpbmcgUW9TICovCi0JCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CisJCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPnNkYXRhLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CiAJCQlpZiAoYXApIHsKIAkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJYWRkX3RvZG8ob2xkX2tleSwgS0VZX0ZMQUdfVE9ET19ERUxFVEUpOwogCiAJYWRkX3RvZG8oa2V5LCBLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTKTsKLQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwpAQCAtNTA5LDcgKzUwOSw3IEBACiB7CiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmIChXQVJOX09OKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSkKKwlpZiAoV0FSTl9PTighaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKSkKIAkJcmV0dXJuOwogCiAJaWVlZTgwMjExX3RvZG9fZm9yX2VhY2hfa2V5KHNkYXRhLCBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCBhNDlmOTNiLi5iZGMyOTY4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC01OSwxMSArNTksMTcgQEAKIAlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCitlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHsKKwlUS0lQX1NUQVRFX05PVF9JTklULAorCVRLSVBfU1RBVEVfUEhBU0UxX0RPTkUsCisJVEtJUF9TVEFURV9QSEFTRTFfSFdfVVBMT0FERUQsCit9OworCiBzdHJ1Y3QgdGtpcF9jdHggewogCXUzMiBpdjMyOwogCXUxNiBpdjE2OwogCXUxNiBwMWtbNV07Ci0JaW50IGluaXRpYWxpemVkOworCWVudW0gaWVlZTgwMjExX2ludGVybmFsX3RraXBfc3RhdGUgc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2tleSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAwZDJkOTQ4Li4wNmMzM2I2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgpAQCAtMzIsNyArMzEsMTIgQEAKICNpbmNsdWRlICJsZWQuaCIKICNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCi0jaW5jbHVkZSAiZGVidWdmc19uZXRkZXYuaCIKKworCitib29sIGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6OworbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosCisJCSAiRGlzYWJsZSA0ME1IeiBzdXBwb3J0IGluIHRoZSAyLjRHSHogYmFuZCIpOwogCiB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewpAQCAtMTAyLDYgKzEwNiw5IEBACiAJaWYgKHNjYW5fY2hhbikgewogCQljaGFuID0gc2Nhbl9jaGFuOwogCQljaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CisJfSBlbHNlIGlmIChsb2NhbC0+dG1wX2NoYW5uZWwpIHsKKwkJY2hhbiA9IHNjYW5fY2hhbiA9IGxvY2FsLT50bXBfY2hhbm5lbDsKKwkJY2hhbm5lbF90eXBlID0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGU7CiAJfSBlbHNlIHsKIAkJY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAJCWNoYW5uZWxfdHlwZSA9IGxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZTsKQEAgLTExNCw2ICsxMjEsMTggQEAKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDsKIAl9CiAKKwlpZiAoIWNvbmZfaXNfaHQoJmxvY2FsLT5ody5jb25mKSkgeworCQkvKgorCQkgKiBtYWM4MDIxMS5oIGRvY3VtZW50cyB0aGF0IHRoaXMgaXMgb25seSB2YWxpZAorCQkgKiB3aGVuIHRoZSBjaGFubmVsIGlzIHNldCB0byBhbiBIVCB0eXBlLCBhbmQKKwkJICogdGhhdCBvdGhlcndpc2UgU1RBVElDIGlzIHVzZWQuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19TVEFUSUM7CisJfSBlbHNlIGlmIChsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgIT0gbG9jYWwtPnNtcHNfbW9kZSkgeworCQlsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgPSBsb2NhbC0+c21wc19tb2RlOworCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTOworCX0KKwogCWlmIChzY2FuX2NoYW4pCiAJCXBvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCWVsc2UKQEAgLTE3Myw3ICsxOTIsNyBAQAogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQlzZGF0YS0+dmlmLmJzc19jb25mLmJzc2lkID0gc2RhdGEtPnUuaWJzcy5ic3NpZDsKIAllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXNkYXRhLT52aWYuYnNzX2NvbmYuYnNzaWQgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJc2RhdGEtPnZpZi5ic3NfY29uZi5ic3NpZCA9IHNkYXRhLT52aWYuYWRkcjsKIAllbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CiAJCXNkYXRhLT52aWYuYnNzX2NvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CkBAIC0xOTUsNyArMjE0LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSB7Ci0JCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpIHx8CisJCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwKIAkJICAgIHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpKSB7CiAJCQlzZGF0YS0+dmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKIAkJfSBlbHNlIHsKQEAgLTIyMyw4ICsyNDIsNyBAQAogCQl9CiAJfQogCi0JZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsICZzZGF0YS0+dmlmLAotCQkJICAgICAmc2RhdGEtPnZpZi5ic3NfY29uZiwgY2hhbmdlZCk7CisJZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHNkYXRhLCAmc2RhdGEtPnZpZi5ic3NfY29uZiwgY2hhbmdlZCk7CiB9CiAKIHUzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC0yOTksNiArMzE3LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZXN0YXJ0X2h3KTsKIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlY2FsY19zbXBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHJlY2FsY19zbXBzKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfcmVjYWxjX3NtcHMobG9jYWwsIE5VTEwpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHcoc2l6ZV90IHByaXZfZGF0YV9sZW4sCiAJCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMpCiB7CkBAIC0zMzMsOSArMzYxLDcgQEAKIAkJCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTjsKIAl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOwogCi0JLyogWWVzLCBwdXR0aW5nIGNmZzgwMjExX2JzcyBpbnRvIGllZWU4MDIxMV9ic3MgaXMgYSBoYWNrICovCi0Jd2lwaHktPmJzc19wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3MpIC0KLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNmZzgwMjExX2Jzcyk7CisJd2lwaHktPmJzc19wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3MpOwogCiAJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIApAQCAtMzU4LDYgKzM4NCw4IEBACiAJbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfbG9uZzsKIAlsb2NhbC0+aHcuY29uZi5zaG9ydF9mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfc2hvcnQ7CiAJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSAtMTsKKwlsb2NhbC0+dWFwc2RfcXVldWVzID0gSUVFRTgwMjExX0RFRkFVTFRfVUFQU0RfUVVFVUVTOworCWxvY2FsLT51YXBzZF9tYXhfc3BfbGVuID0gSUVFRTgwMjExX0RFRkFVTFRfTUFYX1NQX0xFTjsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CiAJbXV0ZXhfaW5pdCgmbG9jYWwtPmlmbGlzdF9tdHgpOwpAQCAtMzY5LDkgKzM5NywxMyBAQAogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmxvY2FsLT5zY2FuX3dvcmssIGllZWU4MDIxMV9zY2FuX3dvcmspOwogCisJaWVlZTgwMjExX3dvcmtfaW5pdChsb2NhbCk7CisKIAlJTklUX1dPUksoJmxvY2FsLT5yZXN0YXJ0X3dvcmssIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmspOwogCiAJSU5JVF9XT1JLKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyLCBpZWVlODAyMTFfcmVjb25maWdfZmlsdGVyKTsKKwlJTklUX1dPUksoJmxvY2FsLT5yZWNhbGNfc21wcywgaWVlZTgwMjExX3JlY2FsY19zbXBzX3dvcmspOworCWxvY2FsLT5zbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CiAKIAlJTklUX1dPUksoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrLAogCQkgIGllZWU4MDIxMV9keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKQEAgLTQ2MSw2ICs0OTMsMTAgQEAKIAllbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykKIAkJbG9jYWwtPmh3LndpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzsKIAorCVdBUk4oKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRCkKKwkgICAgICYmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spLAorCSAgICAgIlUtQVBTRCBub3Qgc3VwcG9ydGVkIHdpdGggSFdfUFNfTlVMTEZVTkNfU1RBQ0tcbiIpOworCiAJLyoKIAkgKiBDYWxjdWxhdGUgc2NhbiBJRSBsZW5ndGggLS0gd2UgbmVlZCB0aGlzIHRvIGFsbG9jCiAJICogbWVtb3J5IGFuZCB0byBzdWJ0cmFjdCBmcm9tIHRoZSBkcml2ZXIgbGltaXQuIEl0CkBAIC01MjIsOCArNTU4LDEyIEBACiAKIAlkZWJ1Z2ZzX2h3X2FkZChsb2NhbCk7CiAKKwkvKgorCSAqIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBzcGVjaWZ5IGEgbWF4IGxpc3RlbiBpbnRlcnZhbCB3ZQorCSAqIHVzZSA1IHdoaWNoIHNob3VsZCBiZSBhIHNhZmUgZGVmYXVsdAorCSAqLwogCWlmIChsb2NhbC0+aHcubWF4X2xpc3Rlbl9pbnRlcnZhbCA9PSAwKQotCQlsb2NhbC0+aHcubWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDE7CisJCWxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsID0gNTsKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCkBAIC02NzQsMTEgKzcxNCwxOSBAQAogCiAJcmV0ID0gcmM4MDIxMV9waWRfaW5pdCgpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3BpZDsKIAotCWllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9pbml0KCk7CisJcmV0ID0gaWVlZTgwMjExX2lmYWNlX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9uZXRkZXY7CiAKIAlyZXR1cm4gMDsKKyBlcnJfbmV0ZGV2OgorCXJjODAyMTFfcGlkX2V4aXQoKTsKKyBlcnJfcGlkOgorCXJjODAyMTFfbWluc3RyZWxfZXhpdCgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCkBAIC02OTUsNyArNzQzLDcgQEAKIAlpZiAobWVzaF9hbGxvY2F0ZWQpCiAJCWllZWU4MDIxMXNfc3RvcCgpOwogCi0JaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQoKTsKKwlpZWVlODAyMTFfaWZhY2VfZXhpdCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IDZhNDMzMTQuLjYxMDgwYzUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogcnVubmluZyBtZXNoIGhvdXNla2VlcGluZ1xuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgIHNkYXRhLT5uYW1lKTsKICNlbmRpZgogCiAJaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9NRVNIX1BFRVJfSU5BQ1RJVklUWV9MSU1JVCk7CkBAIC01NjUsNyArNTY1LDcgQEAKIAogCS8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCiAJaWYgKHN0eXBlID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICYmCi0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpKQorCSAgICBjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkcikpCiAJCXJldHVybjsKIAogCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CkBAIC02NDUsNyArNjQ1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKGxvY2FsLT5zY2FubmluZykKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCBkMjhhY2I2Li5jZTg0MjM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC0xMjgsOSArMTI4LDkgQEAKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkvKiBCU1NJRCA9PSBTQSAqLwotCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gTUVTSF9QQVRIX1NFTF9DQVRFR09SWTsKIAltZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uLmFjdGlvbl9jb2RlID0gTUVTSF9QQVRIX1NFTF9BQ1RJT047CiAKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCiAJbWVtY3B5KG1nbXQtPmRhLCByYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLwogCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gTUVTSF9QQVRIX1NFTF9DQVRFR09SWTsKIAltZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uLmFjdGlvbl9jb2RlID0gTUVTSF9QQVRIX1NFTF9BQ1RJT047CkBAIC0zMzUsNyArMzM1LDcgQEAKIAlib29sIHByb2Nlc3MgPSB0cnVlOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWdtdC0+c2EpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gMDsKQEAgLTM3NCw3ICszNzQsNyBAQAogCQluZXdfbWV0cmljID0gTUFYX01FVFJJQzsKIAlleHBfdGltZSA9IFRVX1RPX0VYUF9USU1FKG9yaWdfbGlmZXRpbWUpOwogCi0JaWYgKG1lbWNtcChvcmlnX2FkZHIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCWlmIChtZW1jbXAob3JpZ19hZGRyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCS8qIFRoaXMgTVAgaXMgdGhlIG9yaWdpbmF0b3IsIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzCiAJCSAqIGZyYW1lLCBleGNlcHQgZm9yIHVwZGF0aW5nIHRyYW5zbWl0dGVyJ3MgcGF0aCBpbmZvLgogCQkgKi8KQEAgLTQ4Niw3ICs0ODYsNyBAQAogCiAJbWh3bXBfZGJnKCJyZWNlaXZlZCBQUkVRIGZyb20gJXBNXG4iLCBvcmlnX2FkZHIpOwogCi0JaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikgPT0gMCkgewogCQltaHdtcF9kYmcoIlBSRVEgaXMgZm9yIHVzXG4iKTsKIAkJZm9yd2FyZCA9IGZhbHNlOwogCQlyZXBseSA9IHRydWU7CkBAIC01NzksNyArNTc5LDcgQEAKIAkgKiByZXBsaWVzCiAJICovCiAJdGFyZ2V0X2FkZHIgPSBQUkVQX0lFX1RBUkdFVF9BRERSKHByZXBfZWxlbSk7Ci0JaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCWlmIChtZW1jbXAodGFyZ2V0X2FkZHIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIGRlc3RpbmF0aW9uLCBubyBmb3J3YXJkaW5nIHJlcXVpcmVkICovCiAJCXJldHVybjsKIApAQCAtODkwLDcgKzg5MCw3IEBACiAJCXRhcmdldF9mbGFncyA9IE1QX0ZfUkY7CiAKIAlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwotCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUFJFUSwgMCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJbWVzaF9wYXRoX3NlbF9mcmFtZV90eChNUEFUSF9QUkVRLCAwLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQljcHVfdG9fbGUzMihpZm1zaC0+c24pLCB0YXJnZXRfZmxhZ3MsIG1wYXRoLT5kc3QsCiAJCQljcHVfdG9fbGUzMihtcGF0aC0+c24pLCBicm9hZGNhc3RfYWRkciwgMCwKIAkJCXR0bCwgY3B1X3RvX2xlMzIobGlmZXRpbWUpLCAwLApAQCAtOTM5LDcgKzkzOSw3IEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCiAJCQkgICAgICAgbXBhdGgtPmV4cF90aW1lIC0KIAkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKHNkYXRhLT51Lm1lc2gubXNoY2ZnLnBhdGhfcmVmcmVzaF90aW1lKSkgJiYKLQkJICAgICFtZW1jbXAoc2RhdGEtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjQsIEVUSF9BTEVOKSAmJgorCQkgICAgIW1lbWNtcChzZGF0YS0+dmlmLmFkZHIsIGhkci0+YWRkcjQsIEVUSF9BTEVOKSAmJgogCQkgICAgIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfUkVTT0xWSU5HKSAmJgogCQkgICAgIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRklYRUQpKSB7CiAJCQltZXNoX3F1ZXVlX3ByZXEobXBhdGgsCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUkFOTiwgMCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJbWVzaF9wYXRoX3NlbF9mcmFtZV90eChNUEFUSF9SQU5OLCAwLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQkgICAgICAgY3B1X3RvX2xlMzIoKytpZm1zaC0+c24pLAogCQkJICAgICAgIDAsIE5VTEwsIDAsIGJyb2FkY2FzdF9hZGRyLAogCQkJICAgICAgIDAsIE1FU0hfVFRMLCAwLCAwLCAwLCBzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDE5MmNmZC4uMjMxMmVmZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaW50IGVyciA9IDA7CiAJdTMyIGhhc2hfaWR4OwogCi0JaWYgKG1lbWNtcChkc3QsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAobWVtY21wKGRzdCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJLyogbmV2ZXIgYWRkIG91cnNlbHZlcyBhcyBuZWlnaGJvdXJzICovCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKQEAgLTM3Nyw3ICszNzcsNyBAQAogCWludCBlcnIgPSAwOwogCXUzMiBoYXNoX2lkeDsKIAotCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJaWYgKG1lbWNtcChkc3QsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCkBAIC02MDUsNyArNjA1LDcgQEAKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKIAl1MzIgc24gPSAwOwogCi0JaWYgKG1lbWNtcChoZHItPmFkZHI0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pICE9IDApIHsKKwlpZiAobWVtY21wKGhkci0+YWRkcjQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pICE9IDApIHsKIAkJdTggKnJhLCAqZGE7CiAKIAkJZGEgPSBoZHItPmFkZHIzOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggMGY3YzZlNi4uYmM0ZTIwZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlpZiAobG9jYWwtPm51bV9zdGEgPj0gTUVTSF9NQVhfUExJTktTKQogCQlyZXR1cm4gTlVMTDsKIAotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBod19hZGRyLCBHRlBfQVRPTUlDKTsKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaHdfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGEpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNjksNyArMTY5LDcgQEAKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkvKiBCU1NJRCBpcyBsZWZ0IHplcm9lZCwgd2lsZGNhcmQgdmFsdWUgKi8KIAltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IE1FU0hfUExJTktfQ0FURUdPUlk7CiAJbWdtdC0+dS5hY3Rpb24udS5wbGlua19hY3Rpb24uYWN0aW9uX2NvZGUgPSBhY3Rpb247CkBAIC0yMzQsMTQgKzIzNCwxNCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBod19hZGRyKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGh3X2FkZHIpOwogCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKLQkJaWYgKCFzdGEpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAoIXN0YSkKIAkJCXJldHVybjsKLQkJfQotCQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpIHsKKwkJaWYgKHN0YV9pbmZvX2luc2VydF9yY3Uoc3RhKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBtZ210LT5zYSk7CiAJaWYgKCFzdGEgJiYgZnR5cGUgIT0gUExJTktfT1BFTikgewogCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbHMgb3IgY25mIGZyb20gdW5rbm93biBwZWVyXG4iKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC00ODUsOSArNDg1LDExIEBACiAJfSBlbHNlIGlmICghc3RhKSB7CiAJCS8qIGZ0eXBlID09IFBMSU5LX09QRU4gKi8KIAkJdTMyIHJhdGVzOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSkgewogCQkJbXBsX2RiZygiTWVzaCBwbGluayBlcnJvcjogbm8gbW9yZSBmcmVlIHBsaW5rc1xuIik7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC00OTUsMTAgKzQ5Nyw5IEBACiAJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIG1nbXQtPnNhLCByYXRlcyk7CiAJCWlmICghc3RhKSB7CiAJCQltcGxfZGJnKCJNZXNoIHBsaW5rIGVycm9yOiBwbGluayB0YWJsZSBmdWxsXG4iKTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkgeworCQlpZiAoc3RhX2luZm9faW5zZXJ0X3JjdShzdGEpKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggMDVhMThmNC4uNDE4MTJhMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0yNywxMCArMjcsNiBAQAogI2luY2x1ZGUgInJhdGUuaCIKICNpbmNsdWRlICJsZWQuaCIKIAotI2RlZmluZSBJRUVFODAyMTFfQVVUSF9USU1FT1VUIChIWiAvIDUpCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX01BWF9UUklFUyAzCi0jZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUIChIWiAvIDUpCi0jZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMgMwogI2RlZmluZSBJRUVFODAyMTFfTUFYX1BST0JFX1RSSUVTIDUKIAogLyoKQEAgLTc1LDExICs3MSw4IEBACiAJLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKCkgKi8KIAlSWF9NR01UX0NGRzgwMjExX0RJU0FTU09DLAogCi0JLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9hdXRoX3RpbWVvdXQoKSAmIGZyZWUgd29yayAqLwotCVJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTywKLQotCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfYXNzb2NfdGltZW91dCgpICYgZnJlZSB3b3JrICovCi0JUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTywKKwkvKiBjYWxsZXIgbXVzdCB0ZWxsIGNmZzgwMjExIGFib3V0IGludGVybmFsIGVycm9yICovCisJUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19FUlJPUiwKIH07CiAKIC8qIHV0aWxzICovCkBAIC0xMjIsMjcgKzExNSw2IEBACiAJcmV0dXJuICgxIDw8IGVjdykgLSAxOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCi0JCQkJICAgICAgdTMyICpyYXRlcykKLXsKLQlpbnQgaSwgaiwgY291bnQ7Ci0JKnJhdGVzID0gMDsKLQljb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQlpbnQgcmF0ZSA9IChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdGKSAqIDU7Ci0KLQkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCi0JCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gcmF0ZSkgewotCQkJCSpyYXRlcyB8PSBCSVQoaik7Ci0JCQkJY291bnQrKzsKLQkJCQlicmVhazsKLQkJCX0KLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KIC8qCiAgKiBpZWVlODAyMTFfZW5hYmxlX2h0IHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgb3BlcmF0aW5nIGJhbmQKICAqIGhhcyBiZWVuIGRldGVybWluZWQgYXMgaHQgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIHRoZSBodydzCkBAIC0yMDIsNyArMTc0LDcgQEAKIAkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGJzc2lkKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBic3NpZCk7CiAJCWlmIChzdGEpCiAJCQlyYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUobG9jYWwsIHNiYW5kLCBzdGEsCiAJCQkJCQkgSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQpOwpAQCAtMjI4LDIwOSArMjAwLDYgQEAKIAogLyogZnJhbWUgc2VuZGluZyBmdW5jdGlvbnMgKi8KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3M7Ci0JY29uc3QgdTggKmllcywgKmh0X2llOwotCWludCBpLCBsZW4sIGNvdW50LCByYXRlc19sZW4sIHN1cHBfcmF0ZXNfbGVuOwotCXUxNiBjYXBhYjsKLQlpbnQgd21tID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1MzIgcmF0ZXMgPSAwOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyB3ay0+aWVfbGVuICsKLQkJCSAgICB3ay0+c3NpZF9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQljYXBhYiA9IGlmbWdkLT5jYXBhYjsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUpKQotCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRTsKLQkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFKSkKLQkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKLQl9Ci0KLQlpZiAod2stPmJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCWlmICh3ay0+YnNzLT53bW1fdXNlZCkKLQkJd21tID0gMTsKLQotCS8qIGdldCBhbGwgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYW5kIHRoZSBBUCBhcwotCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0IG9mIHRoZWlyIHJhdGVzCi0JICogaW4gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgKGUuZy4gRC1MaW5rIERBUCAxMzUzIGluCi0JICogYi1vbmx5IG1vZGUpICovCi0JcmF0ZXNfbGVuID0gaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMod2stPmJzcywgc2JhbmQsICZyYXRlcyk7Ci0KLQlpZiAoKHdrLT5ic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgotCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQpKQotCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcih3ay0+cHJldl9ic3NpZCkpIHsKLQkJc2tiX3B1dChza2IsIDEwKTsKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKTsKLQkJbWdtdC0+dS5yZWFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCQltZ210LT51LnJlYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9Ci0JCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsKTsKLQkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgd2stPnByZXZfYnNzaWQsCi0JCSAgICAgICBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJc2tiX3B1dChza2IsIDQpOwotCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKLQkJbWdtdC0+dS5hc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKLQkJbWdtdC0+dS5hc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KLQkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCX0KLQotCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIHdrLT5zc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSB3ay0+c3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgd2stPnNzaWQsIHdrLT5zc2lkX2xlbik7Ci0KLQkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KLQlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKLQlpZiAoc3VwcF9yYXRlc19sZW4gPiA4KQotCQlzdXBwX3JhdGVzX2xlbiA9IDg7Ci0KLQlsZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQlwb3MgPSBza2JfcHV0KHNrYiwgc3VwcF9yYXRlc19sZW4gKyAyKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MrKyA9IHN1cHBfcmF0ZXNfbGVuOwotCi0JY291bnQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCWlmIChCSVQoaSkgJiByYXRlcykgewotCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKLQkJCWlmICgrK2NvdW50ID09IDgpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmF0ZXNfbGVuID4gY291bnQpIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIHJhdGVzX2xlbiAtIGNvdW50ICsgMik7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCQkqcG9zKysgPSByYXRlc19sZW4gLSBjb3VudDsKLQotCQlmb3IgKGkrKzsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJCWlmIChCSVQoaSkgJiByYXRlcykgewotCQkJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7Ci0JCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGNhcGFiICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpIHsKLQkJLyogMS4gcG93ZXIgY2FwYWJpbGl0aWVzICovCi0JCXBvcyA9IHNrYl9wdXQoc2tiLCA0KTsKLQkJKnBvcysrID0gV0xBTl9FSURfUFdSX0NBUEFCSUxJVFk7Ci0JCSpwb3MrKyA9IDI7Ci0JCSpwb3MrKyA9IDA7IC8qIG1pbiB0eCBwb3dlciAqLwotCQkqcG9zKysgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5tYXhfcG93ZXI7IC8qIG1heCB0eCBwb3dlciAqLwotCi0JCS8qIDIuIHN1cHBvcnRlZCBjaGFubmVscyAqLwotCQkvKiBUT0RPOiBnZXQgdGhpcyBpbiByZWcgZG9tYWluIGZvcm1hdCAqLwotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiAqIHNiYW5kLT5uX2NoYW5uZWxzICsgMik7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBPUlRFRF9DSEFOTkVMUzsKLQkJKnBvcysrID0gMiAqIHNiYW5kLT5uX2NoYW5uZWxzOwotCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewotCQkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAotCQkJCQlzYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEpOwotCQkJKnBvcysrID0gMTsgLyogb25lIGNoYW5uZWwgaW4gdGhlIHN1YmJhbmQqLwotCQl9Ci0JfQotCi0JaWYgKHdrLT5pZV9sZW4gJiYgd2stPmllKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCB3ay0+aWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgd2stPmllLCB3ay0+aWVfbGVuKTsKLQl9Ci0KLQlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgOSk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzsKLQkJKnBvcysrID0gNzsgLyogbGVuICovCi0JCSpwb3MrKyA9IDB4MDA7IC8qIE1pY3Jvc29mdCBPVUkgMDA6NTA6RjIgKi8KLQkJKnBvcysrID0gMHg1MDsKLQkJKnBvcysrID0gMHhmMjsKLQkJKnBvcysrID0gMjsgLyogV01FICovCi0JCSpwb3MrKyA9IDA7IC8qIFdNRSBpbmZvICovCi0JCSpwb3MrKyA9IDE7IC8qIFdNRSB2ZXIgKi8KLQkJKnBvcysrID0gMDsKLQl9Ci0KLQkvKiB3bW0gc3VwcG9ydCBpcyBhIG11c3QgdG8gSFQgKi8KLQkvKgotCSAqIElFRUU4MDIuMTFuIGRvZXMgbm90IGFsbG93IFRLSVAvV0VQIGFzIHBhaXJ3aXNlCi0JICogY2lwaGVycyBpbiBIVCBtb2RlLiBXZSBzdGlsbCBhc3NvY2lhdGUgaW4gbm9uLWh0Ci0JICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCi0JICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KLQkgKi8KLQlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgotCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgotCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZSgmd2stPmJzcy0+Y2JzcywgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pKSAmJgotCSAgICBodF9pZVsxXSA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSAmJgotCSAgICAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvID0KLQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaWUgKyAyKTsKLQkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOwotCQlfX2xlMTYgdG1wOwotCQl1MzIgZmxhZ3MgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5mbGFnczsKLQotCQlzd2l0Y2ggKGh0X2luZm8tPmh0X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU6Ci0JCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykgewotCQkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7Ci0JCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOgotCQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKSB7Ci0JCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQl0bXAgPSBjcHVfdG9fbGUxNihjYXApOwotCQlwb3MgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSsyKTsKLQkJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKLQkJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKLQkJbWVtc2V0KHBvcywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSk7Ci0JCW1lbWNweShwb3MsICZ0bXAsIHNpemVvZih1MTYpKTsKLQkJcG9zICs9IHNpemVvZih1MTYpOwotCQkvKiBUT0RPOiBuZWVkcyBhIGRlZmluZSBoZXJlIGZvciA8PCAyICovCi0JCSpwb3MrKyA9IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yIHwKLQkJCSAoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8IDIpOwotCQltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOwotCX0KLQotCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2RlYXV0aF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkJICAgY29uc3QgdTggKmJzc2lkLCB1MTYgc3R5cGUsIHUxNiByZWFzb24sCiAJCQkJCSAgIHZvaWQgKmNvb2tpZSkKQEAgLTQ0Myw3ICsyMTIsNyBAQAogCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSk7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCSAgICAgICAiZGVhdXRoL2Rpc2Fzc29jIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgICJkZWF1dGgvZGlzYXNzb2MgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CkBAIC00NTEsNyArMjIwLDcgQEAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBzdHlwZSk7CiAJc2tiX3B1dChza2IsIDIpOwpAQCAtNDc2LDMwICsyNDUsMTUgQEAKIHZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKnBzcG9sbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUxNiBmYzsKIAotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCpwc3BvbGwpKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJICAgICAgICJwc3BvbGwgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCXNrYiA9IGllZWU4MDIxMV9wc3BvbGxfZ2V0KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmKTsKKwlpZiAoIXNrYikKIAkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAKLQlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiX3B1dChza2IsIHNpemVvZigqcHNwb2xsKSk7Ci0JbWVtc2V0KHBzcG9sbCwgMCwgc2l6ZW9mKCpwc3BvbGwpKTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHwgSUVFRTgwMjExX0ZDVExfUE07Ci0JcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwotCXBzcG9sbC0+YWlkID0gY3B1X3RvX2xlMTYoaWZtZ2QtPmFpZCk7Ci0KLQkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KLQlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7Ci0KLQltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJcHNwb2xsID0gKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICopIHNrYi0+ZGF0YTsKKwlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwogCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CkBAIC01MTAsMzAgKzI2NCw0NyBAQAogCQkJICAgICBpbnQgcG93ZXJzYXZlKQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm51bGxmdW5jOworCisJc2tiID0gaWVlZTgwMjExX251bGxmdW5jX2dldCgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZik7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopIHNrYi0+ZGF0YTsKKwlpZiAocG93ZXJzYXZlKQorCQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisKKwlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfNGFkZHJfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7CiAJX19sZTE2IGZjOwogCiAJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDMwKTsKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgNGFkZHIgIgorCQkgICAgICAgIm51bGxmdW5jIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMzApOworCW1lbXNldChudWxsZnVuYywgMCwgMzApOwogCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOwotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwkJCSBJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOwogCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyNCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKQEAgLTU0Niw3ICszMTcsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2QuY2hzd2l0Y2hfd29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwpAQCAtNTU3LDcgKzMyOCw3IEBACiAJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKTsKIAogCS8qIFhYWDogc2hvdWxkbid0IHJlYWxseSBtb2RpZnkgY2ZnODAyMTEtb3duZWQgZGF0YSEgKi8KLQlpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWw7CisJaWZtZ2QtPmFzc29jaWF0ZWQtPmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCiAJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOwpAQCAtNTg0LDYgKzM1NSw4IEBACiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKWJzcywgc3RydWN0IGNmZzgwMjExX2JzcywgcHJpdik7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOwpAQCAtNjE3LDcgKzM5MCw3IEBACiAJCW1vZF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyLAogCQkJICBqaWZmaWVzICsKIAkJCSAgbXNlY3NfdG9famlmZmllcyhzd19lbGVtLT5jb3VudCAqCi0JCQkJCSAgIGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWwpKTsKKwkJCQkJICAgY2Jzcy0+YmVhY29uX2ludGVydmFsKSk7CiAJfQogfQogCkBAIC02NjEsOCArNDM0LDExIEBACiAJfSBlbHNlIHsKIAkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKIAkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7Ci0JCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpKSB7CisJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCX0KIAl9CiB9CiAKQEAgLTY5MSw4ICs0NjcsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpIHsKKwkJbG9jYWwtPnBzX3NkYXRhID0gTlVMTDsKKwkJZ290byBjaGFuZ2U7CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQkJY29udGludWU7CkBAIC03MDEsNyArNDgyLDggQEAKIAl9CiAKIAlpZiAoY291bnQgPT0gMSAmJiBmb3VuZC0+dS5tZ2QucG93ZXJzYXZlICYmCi0JICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkICYmIGxpc3RfZW1wdHkoJmZvdW5kLT51Lm1nZC53b3JrX2xpc3QpICYmCisJICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkICYmCisJICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkLT5iZWFjb25faWVzICYmCiAJICAgICEoZm91bmQtPnUubWdkLmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAogCQkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpKSB7CiAJCXMzMiBiZWFjb25pbnRfdXM7CkBAIC03MTUsMjAgKzQ5NywyOSBAQAogCQlpZiAoYmVhY29uaW50X3VzID4gbGF0ZW5jeSkgewogCQkJbG9jYWwtPnBzX3NkYXRhID0gTlVMTDsKIAkJfSBlbHNlIHsKLQkJCXU4IGR0aW1wZXIgPSBmb3VuZC0+dmlmLmJzc19jb25mLmR0aW1fcGVyaW9kOworCQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAkJCWludCBtYXhzbHAgPSAxOworCQkJdTggZHRpbXBlcjsKIAotCQkJaWYgKGR0aW1wZXIgPiAxKQorCQkJYnNzID0gKHZvaWQgKilmb3VuZC0+dS5tZ2QuYXNzb2NpYXRlZC0+cHJpdjsKKwkJCWR0aW1wZXIgPSBic3MtPmR0aW1fcGVyaW9kOworCisJCQkvKiBJZiB0aGUgVElNIElFIGlzIGludmFsaWQsIHByZXRlbmQgdGhlIHZhbHVlIGlzIDEgKi8KKwkJCWlmICghZHRpbXBlcikKKwkJCQlkdGltcGVyID0gMTsKKwkJCWVsc2UgaWYgKGR0aW1wZXIgPiAxKQogCQkJCW1heHNscCA9IG1pbl90KGludCwgZHRpbXBlciwKIAkJCQkJCSAgICBsYXRlbmN5IC8gYmVhY29uaW50X3VzKTsKIAogCQkJbG9jYWwtPmh3LmNvbmYubWF4X3NsZWVwX3BlcmlvZCA9IG1heHNscDsKKwkJCWxvY2FsLT5ody5jb25mLnBzX2R0aW1fcGVyaW9kID0gZHRpbXBlcjsKIAkJCWxvY2FsLT5wc19zZGF0YSA9IGZvdW5kOwogCQl9CiAJfSBlbHNlIHsKIAkJbG9jYWwtPnBzX3NkYXRhID0gTlVMTDsKIAl9CiAKKyBjaGFuZ2U6CiAJaWVlZTgwMjExX2NoYW5nZV9wcyhsb2NhbCk7CiB9CiAKQEAgLTc1Myw2ICs1NDQsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwKIAkJCSAgICAgZHluYW1pY19wc19lbmFibGVfd29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+cHNfc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAkvKiBjYW4gb25seSBoYXBwZW4gd2hlbiBQUyB3YXMganVzdCBkaXNhYmxlZCBhbnl3YXkgKi8KIAlpZiAoIXNkYXRhKQpAQCAtNzYxLDExICs1NTMsMTYgQEAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgJiYKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9OVUxMRlVOQ19BQ0tFRCkpKQogCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOwogCi0JbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7Ci0JaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTKSB8fAorCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9OVUxMRlVOQ19BQ0tFRCkpIHsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX05VTExGVU5DX0FDS0VEOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9CiB9CiAKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtNzg2LDkgKzU4Myw5IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcGFyYW1zOwogCXNpemVfdCBsZWZ0OwogCWludCBjb3VudDsKLQl1OCAqcG9zOworCXU4ICpwb3MsIHVhcHNkX3F1ZXVlcyA9IDA7CiAKLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKKwlpZiAobG9jYWwtPmh3LnF1ZXVlcyA8IDQpCiAJCXJldHVybjsKIAogCWlmICghd21tX3BhcmFtKQpAQCAtNzk2LDYgKzU5MywxMCBAQAogCiAJaWYgKHdtbV9wYXJhbV9sZW4gPCA4IHx8IHdtbV9wYXJhbVs1XSAvKiB2ZXJzaW9uICovICE9IDEpCiAJCXJldHVybjsKKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQpCisJCXVhcHNkX3F1ZXVlcyA9IGxvY2FsLT51YXBzZF9xdWV1ZXM7CisKIAljb3VudCA9IHdtbV9wYXJhbVs2XSAmIDB4MGY7CiAJaWYgKGNvdW50ID09IGlmbWdkLT53bW1fbGFzdF9wYXJhbV9zZXQpCiAJCXJldHVybjsKQEAgLTgxMCw2ICs2MTEsNyBAQAogCWZvciAoOyBsZWZ0ID49IDQ7IGxlZnQgLT0gNCwgcG9zICs9IDQpIHsKIAkJaW50IGFjaSA9IChwb3NbMF0gPj4gNSkgJiAweDAzOwogCQlpbnQgYWNtID0gKHBvc1swXSA+PiA0KSAmIDB4MDE7CisJCWJvb2wgdWFwc2QgPSBmYWxzZTsKIAkJaW50IHF1ZXVlOwogCiAJCXN3aXRjaCAoYWNpKSB7CkBAIC04MTcsMjIgKzYxOSwzMCBAQAogCQkJcXVldWUgPSAzOwogCQkJaWYgKGFjbSkKIAkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7IC8qIEJLLy0gKi8KKwkJCWlmICh1YXBzZF9xdWV1ZXMgJiBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JLKQorCQkJCXVhcHNkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIDI6IC8qIEFDX1ZJICovCiAJCQlxdWV1ZSA9IDE7CiAJCQlpZiAoYWNtKQogCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg0KSB8IEJJVCg1KTsgLyogQ0wvVkkgKi8KKwkJCWlmICh1YXBzZF9xdWV1ZXMgJiBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZJKQorCQkJCXVhcHNkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIDM6IC8qIEFDX1ZPICovCiAJCQlxdWV1ZSA9IDA7CiAJCQlpZiAoYWNtKQogCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsgLyogVk8vTkMgKi8KKwkJCWlmICh1YXBzZF9xdWV1ZXMgJiBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZPKQorCQkJCXVhcHNkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIDA6IC8qIEFDX0JFICovCiAJCWRlZmF1bHQ6CiAJCQlxdWV1ZSA9IDI7CiAJCQlpZiAoYWNtKQogCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgwKSB8IEJJVCgzKTsgLyogQkUvRUUgKi8KKwkJCWlmICh1YXBzZF9xdWV1ZXMgJiBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JFKQorCQkJCXVhcHNkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTg0MCwxMSArNjUwLDE0IEBACiAJCXBhcmFtcy5jd19tYXggPSBlY3cyY3coKHBvc1sxXSAmIDB4ZjApID4+IDQpOwogCQlwYXJhbXMuY3dfbWluID0gZWN3MmN3KHBvc1sxXSAmIDB4MGYpOwogCQlwYXJhbXMudHhvcCA9IGdldF91bmFsaWduZWRfbGUxNihwb3MgKyAyKTsKKwkJcGFyYW1zLnVhcHNkID0gdWFwc2Q7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdNTSBxdWV1ZT0lZCBhY2k9JWQgYWNtPSVkIGFpZnM9JWQgIgotCQkgICAgICAgImNXbWluPSVkIGNXbWF4PSVkIHR4b3A9JWRcbiIsCisJCSAgICAgICAiY1dtaW49JWQgY1dtYXg9JWQgdHhvcD0lZCB1YXBzZD0lZFxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcXVldWUsIGFjaSwgYWNtLAotCQkgICAgICAgcGFyYW1zLmFpZnMsIHBhcmFtcy5jd19taW4sIHBhcmFtcy5jd19tYXgsIHBhcmFtcy50eG9wKTsKKwkJICAgICAgIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLCBwYXJhbXMuY3dfbWF4LCBwYXJhbXMudHhvcCwKKwkJICAgICAgIHBhcmFtcy51YXBzZCk7CiAjZW5kaWYKIAkJaWYgKGRydl9jb25mX3R4KGxvY2FsLCBxdWV1ZSwgJnBhcmFtcykgJiYgbG9jYWwtPm9wcy0+Y29uZl90eCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNldCBUWCBxdWV1ZSAiCkBAIC04NzEsNiArNjg0LDggQEAKIAl9CiAKIAl1c2Vfc2hvcnRfc2xvdCA9ICEhKGNhcGFiICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSk7CisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXVzZV9zaG9ydF9zbG90ID0gdHJ1ZTsKIAogCWlmICh1c2VfcHJvdGVjdGlvbiAhPSBic3NfY29uZi0+dXNlX2N0c19wcm90KSB7CiAJCWJzc19jb25mLT51c2VfY3RzX3Byb3QgPSB1c2VfcHJvdGVjdGlvbjsKQEAgLTg5MSwyNSArNzA2LDIzIEBACiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAorCQkJCSAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcywKIAkJCQkgICAgIHUzMiBic3NfaW5mb19jaGFuZ2VkKQogeworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3MtPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9IHdrLT5ic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwogCS8qIHNldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KLQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsOwotCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKLQlzZGF0YS0+dmlmLmJzc19jb25mLmR0aW1fcGVyaW9kID0gYnNzLT5kdGltX3BlcmlvZDsKKwlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBjYnNzLT5iZWFjb25faW50ZXJ2YWw7CisJc2RhdGEtPnZpZi5ic3NfY29uZi50aW1lc3RhbXAgPSBjYnNzLT50c2Y7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQ7CiAJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAotCQlic3MtPmNic3MuY2FwYWJpbGl0eSwgYnNzLT5oYXNfZXJwX3ZhbHVlLCBic3MtPmVycF92YWx1ZSk7CisJCWNic3MtPmNhcGFiaWxpdHksIGJzcy0+aGFzX2VycF92YWx1ZSwgYnNzLT5lcnBfdmFsdWUpOwogCi0Jc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgPSBic3M7Ci0Jc2RhdGEtPnUubWdkLm9sZF9hc3NvY2lhdGVfd29yayA9IHdrOwotCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsIGJzcy0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkID0gY2JzczsKKwltZW1jcHkoc2RhdGEtPnUubWdkLmJzc2lkLCBjYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJLyoganVzdCB0byBiZSBzdXJlICovCiAJc2RhdGEtPnUubWdkLmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwgfApAQCAtOTQwLDk5ICs3NTMsMTQgQEAKIAogCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7CisJaWVlZTgwMjExX3JlY2FsY19zbXBzKGxvY2FsLCBzZGF0YSk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb24oc2RhdGEtPmRldik7CiB9CiAKLXN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawotaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCi0Jd2stPnRyaWVzKys7Ci0JaWYgKHdrLT50cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byBBUCAlcE0gdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7Ci0KLQkJLyoKLQkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCi0JCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCi0JCSAqLwotCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwotCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKLQkJICogYWdhaW4gZm9yIHRoYXQuCi0JCSAqLwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSAodHJ5ICVkKVxuIiwKLQkJCXNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQsCi0JCQl3ay0+dHJpZXMpOwotCi0JLyoKLQkgKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwotCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KLQkgKi8KLQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsIHdrLT5zc2lkLCB3ay0+c3NpZF9sZW4sIE5VTEwsIDApOwotCi0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVDsKLQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKLQotCXJldHVybiBSWF9NR01UX05PTkU7Ci19Ci0KLQotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQl3ay0+dHJpZXMrKzsKLQlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCi0JCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQpOwotCi0JCS8qCi0JCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQotCQkgKiBic3Mgc3RydWN0IGZvciB0aGF0IEFQLgotCQkgKi8KLQkJY2ZnODAyMTFfdW5saW5rX2Jzcyhsb2NhbC0+aHcud2lwaHksICZ3ay0+YnNzLT5jYnNzKTsKLQotCQkvKgotCQkgKiBXZSBtaWdodCBoYXZlIGEgcGVuZGluZyBzY2FuIHdoaWNoIGhhZCBubyBjaGFuY2UgdG8gcnVuIHlldAotCQkgKiBkdWUgdG8gd29yayBuZWVkaW5nIHRvIGJlIGRvbmUuIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrCi0JCSAqIGFnYWluIGZvciB0aGF0LgotCQkgKi8KLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbWdkLT53b3JrKTsKLQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZSB3aXRoIEFQICVwTSAodHJ5ICVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgd2stPnRyaWVzKTsKLQotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDEsIHdrLT5hdXRoX2FsZywgd2stPmllLCB3ay0+aWVfbGVuLAotCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQsIE5VTEwsIDAsIDApOwotCXdrLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKLQotCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7Ci0JcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7Ci0KLQlyZXR1cm4gUlhfTUdNVF9OT05FOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIGJvb2wgZGVhdXRoKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKQEAgLTEwNDUsMjEgKzc3MywxMSBAQAogCWlmIChXQVJOX09OKCFpZm1nZC0+YXNzb2NpYXRlZCkpCiAJCXJldHVybjsKIAotCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkoYnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJaWZtZ2QtPmFzc29jaWF0ZWQgPSBOVUxMOwogCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAotCWlmIChkZWF1dGgpIHsKLQkJa2ZyZWUoaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yayk7Ci0JCWlmbWdkLT5vbGRfYXNzb2NpYXRlX3dvcmsgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrID0gaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yazsKLQotCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7Ci0JCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmlmbWdkLT53b3JrX2xpc3QpOwotCX0KLQogCS8qCiAJICogd2UgbmVlZCB0byBjb21taXQgdGhlIGFzc29jaWF0ZWQgPSBOVUxMIGNoYW5nZSBiZWNhdXNlIHRoZQogCSAqIHNjYW4gY29kZSB1c2VzIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpZmFjZSBzaG91bGQKQEAgLTEwNzgsOSArNzk2LDExIEBACiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBic3NpZCk7Ci0JaWYgKHN0YSkKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKKwlpZiAoc3RhKSB7CisJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9ESVNBU1NPQyk7CiAJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CisJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc2RhdGEpOwpAQCAtMTExMyw1NyArODMzLDcgQEAKIAljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0JTU0lEOwogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhX2luZm9fdW5saW5rKCZzdGEpOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlzdGFfaW5mb19kZXN0cm95KHN0YSk7Ci19Ci0KLXN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawotaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCi0Jd2stPnRyaWVzKys7Ci0JaWYgKHdrLT50cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoIEFQICVwTSIKLQkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7Ci0KLQkJLyoKLQkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCi0JCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCi0JCSAqLwotCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwotCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKLQkJICogYWdhaW4gZm9yIHRoYXQuCi0JCSAqLwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTSAodHJ5ICVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgd2stPnRyaWVzKTsKLQlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgd2spOwotCi0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQ7Ci0JcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7Ci0KLQlyZXR1cm4gUlhfTUdNVF9OT05FOworCXN0YV9pbmZvX2Rlc3Ryb3lfYWRkcihzZGF0YSwgYnNzaWQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMTE4OSw4ICs4NTksOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNvbnN0IHU4ICpzc2lkOwogCi0Jc3NpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKCZpZm1nZC0+YXNzb2NpYXRlZC0+Y2JzcywgV0xBTl9FSURfU1NJRCk7Ci0JaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwKKwlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoaWZtZ2QtPmFzc29jaWF0ZWQsIFdMQU5fRUlEX1NTSUQpOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkLAogCQkJCSBzc2lkICsgMiwgc3NpZFsxXSwgTlVMTCwgMCk7CiAKIAlpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCsrOwpAQCAtMTIwNCwxMiArODc0LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJYm9vbCBhbHJlYWR5ID0gZmFsc2U7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm47CiAKKwlpZiAoc2RhdGEtPmxvY2FsLT50bXBfY2hhbm5lbCkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CiAKIAlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQpAQCAtMTIxOCw3ICs4OTEsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJaWYgKGJlYWNvbiAmJiBuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGV0ZWN0ZWQgYmVhY29uIGxvc3MgZnJvbSBBUCAiCi0JCSAgICAgICAiLSBzZW5kaW5nIHByb2JlIHJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAogCS8qCkBAIC0xMjcxLDg4ICs5NDQsOCBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2xvc3MpOwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKLXsKLQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0JdTggKnBvczsKLQlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKLQotCXBvcyA9IG1nbXQtPnUuYXV0aC52YXJpYWJsZTsKLQlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKLQlpZiAoIWVsZW1zLmNoYWxsZW5nZSkKLQkJcmV0dXJuOwotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDMsIHdrLT5hdXRoX2FsZywKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2UgLSAyLCBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwKLQkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLAotCQkJICAgIHdrLT5rZXksIHdrLT5rZXlfbGVuLCB3ay0+a2V5X2lkeCk7Ci0Jd2stPmF1dGhfdHJhbnNhY3Rpb24gPSA0OwotfQotCi1zdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKLWllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKLXsKLQl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwotCi0JaWYgKHdrLT5zdGF0ZSAhPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgpCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobGVuIDwgMjQgKyA2KQotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCi0JaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKLQlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKLQotCWlmIChhdXRoX2FsZyAhPSB3ay0+YXV0aF9hbGcgfHwKLQkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSB3ay0+YXV0aF90cmFuc2FjdGlvbikKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCWtmcmVlKHdrKTsKLQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDsKLQl9Ci0KLQlzd2l0Y2ggKHdrLT5hdXRoX2FsZykgewotCWNhc2UgV0xBTl9BVVRIX09QRU46Ci0JY2FzZSBXTEFOX0FVVEhfTEVBUDoKLQljYXNlIFdMQU5fQVVUSF9GVDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCB3ayk7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7Ci0JY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKHdrLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgd2spOwotCQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDsKLQkJfSBlbHNlCi0JCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIHdrLCBtZ210LCBsZW4pOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUlhfTUdNVF9OT05FOwotfQotCi0KIHN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawogaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKQEAgLTEzNjQsMjMgKzk1NywxNSBAQAogCiAJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOwogCi0JaWYgKHdrKQotCQlic3NpZCA9IHdrLT5ic3MtPmNic3MuYnNzaWQ7Ci0JZWxzZQotCQlic3NpZCA9IGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkOworCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZCBmcm9tICVwTSAoUmVhc29uOiAldSlcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCwgcmVhc29uX2NvZGUpOworCQkJc2RhdGEtPm5hbWUsIGJzc2lkLCByZWFzb25fY29kZSk7CiAKLQlpZiAoIXdrKSB7Ci0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOwotCQlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKLQl9IGVsc2UgewotCQlsaXN0X2RlbCgmd2stPmxpc3QpOwotCQlrZnJlZSh3ayk7Ci0JfQorCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEpOworCWllZWU4MDIxMV9yZWNhbGNfaWRsZShzZGF0YS0+bG9jYWwpOwogCiAJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOwogfQpAQCAtMTQwMSwxMjMgKzk4Niw3MiBAQAogCWlmIChXQVJOX09OKCFpZm1nZC0+YXNzb2NpYXRlZCkpCiAJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAoV0FSTl9PTihtZW1jbXAoaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpKQorCWlmIChXQVJOX09OKG1lbWNtcChpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpKQogCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCBmcm9tICVwTSAoUmVhc29uOiAldSlcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgcmVhc29uX2NvZGUpOworCQkJc2RhdGEtPm5hbWUsIG1nbXQtPnNhLCByZWFzb25fY29kZSk7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKHNkYXRhLT5sb2NhbCk7CiAJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfRElTQVNTT0M7CiB9CiAKIAotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAotCQkJICAgICBib29sIHJlYXNzb2MpCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IHdrLT5hc3NvYy5ic3M7CisJdTggKnBvczsKIAl1MzIgcmF0ZXMsIGJhc2ljX3JhdGVzOwotCXUxNiBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgYWlkOworCXUxNiBjYXBhYl9pbmZvLCBhaWQ7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKLQl1OCAqcG9zOwogCXUzMiBjaGFuZ2VkID0gMDsKLQlpbnQgaSwgajsKLQlib29sIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gZmFsc2UsIG5ld3N0YSA9IGZhbHNlOworCWludCBpLCBqLCBlcnI7CisJYm9vbCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IGZhbHNlOwogCXUxNiBhcF9odF9jYXBfZmxhZ3M7CiAKLQkvKgotCSAqIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKLQkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uCi0JICovCisJLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUgKi8KIAotCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7Ci0Jc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOwogCWFpZCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5haWQpOworCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYICVzc3NvY1Jlc3AgZnJvbSAlcE0gKGNhcGFiPTB4JXggIgotCSAgICAgICAic3RhdHVzPSVkIGFpZD0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCi0JICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOworCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIGFpZCB2YWx1ZSAlZDsgYml0cyAxNToxNCBub3QgIgorCQkgICAgICAgInNldFxuIiwgc2RhdGEtPm5hbWUsIGFpZCk7CisJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCiAJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwogCi0JaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCi0JICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCi0JICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgewotCQl1MzIgdHUsIG1zOwotCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOwotCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKLQkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKLQkJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcyk7Ci0JCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQotCQkJcnVuX2FnYWluKGlmbWdkLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOwotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCX0KLQotCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKLQkJd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKLQl9Ci0KLQlpZiAoKGFpZCAmIChCSVQoMTUpIHwgQklUKDE0KSkpICE9IChCSVQoMTUpIHwgQklUKDE0KSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW52YWxpZCBhaWQgdmFsdWUgJWQ7IGJpdHMgMTU6MTQgbm90ICIKLQkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7Ci0JYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiBSWF9NR01UX05PTkU7CisJCSAgICAgICBzZGF0YS0+bmFtZSk7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwogCWlmbWdkLT5haWQgPSBhaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkvKiBBZGQgU1RBIGVudHJ5IGZvciB0aGUgQVAgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBjYnNzLT5ic3NpZCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGEpIHsKLQkJbmV3c3RhID0gdHJ1ZTsKLQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc3RhKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvYyBTVEEgZW50cnkgZm9yIgotCQkJICAgICAgICIgdGhlIEFQXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJCXJldHVybiBSWF9NR01UX05PTkU7Ci0JCX0KLQotCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwKLQkJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7Ci0JCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUKSkKLQkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCisJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEggfCBXTEFOX1NUQV9BU1NPQyB8CisJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7CisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7CisKIAlyYXRlcyA9IDA7CiAJYmFzaWNfcmF0ZXMgPSAwOwogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKQEAgLTE1ODAsNDAgKzExMTQsNDAgQEAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQogCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfV01FKTsKIAotCWlmIChuZXdzdGEpIHsKLQkJaW50IGVyciA9IHN0YV9pbmZvX2luc2VydChzdGEpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBpbnNlcnQgU1RBIGVudHJ5IGZvciIKLQkJCSAgICAgICAiIHRoZSBBUCAoZXJyb3IgJWQpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBlcnIpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCQl9CisJZXJyID0gc3RhX2luZm9faW5zZXJ0KHN0YSk7CisJc3RhID0gTlVMTDsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGluc2VydCBTVEEgZW50cnkgZm9yIgorCQkgICAgICAgIiB0aGUgQVAgKGVycm9yICVkKVxuIiwgc2RhdGEtPm5hbWUsIGVycik7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCWVsc2UKIAkJaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzZGF0YSk7CiAKKwlsb2NhbC0+b3Blcl9jaGFubmVsID0gd2stPmNoYW47CisKIAlpZiAoZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSAmJgotCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgKHNkYXRhLT5sb2NhbC0+aHcucXVldWVzID49IDQpICYmCiAJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpCiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2VuYWJsZV9odChzZGF0YSwgZWxlbXMuaHRfaW5mb19lbGVtLAotCQkJCQkgICAgICAgd2stPmJzcy0+Y2Jzcy5ic3NpZCwKLQkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7Ci0KLSAgICAgICAgLyogZGVsZXRlIHdvcmsgaXRlbSAtLSBtdXN0IGJlIGJlZm9yZSBzZXRfYXNzb2NpYXRlZCBmb3IgUFMgKi8KLQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQkJCQkgICAgICAgY2Jzcy0+YnNzaWQsIGFwX2h0X2NhcF9mbGFncyk7CiAKIAkvKiBzZXQgQUlEIGFuZCBhc3NvYyBjYXBhYmlsaXR5LAogCSAqIGllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZCgpIHdpbGwgdGVsbCB0aGUgZHJpdmVyICovCiAJYnNzX2NvbmYtPmFpZCA9IGFpZDsKIAlic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eSA9IGNhcGFiX2luZm87Ci0JLyogdGhpcyB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHdrICovCi0JaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCB3aywgY2hhbmdlZCk7CisJaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCBjYnNzLCBjaGFuZ2VkKTsKKworCS8qCisJICogSWYgd2UncmUgdXNpbmcgNC1hZGRyIG1vZGUsIGxldCB0aGUgQVAga25vdyB0aGF0IHdlJ3JlCisJICogZG9pbmcgc28sIHNvIHRoYXQgaXQgY2FuIGNyZWF0ZSB0aGUgU1RBIFZMQU4gb24gaXRzIHNpZGUKKwkgKi8KKwlpZiAoaWZtZ2QtPnVzZV80YWRkcikKKwkJaWVlZTgwMjExX3NlbmRfNGFkZHJfbnVsbGZ1bmMobG9jYWwsIHNkYXRhKTsKIAogCS8qCiAJICogU3RhcnQgdGltZXIgdG8gcHJvYmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEFQIG5vdy4KQEAgLTE2MjIsNyArMTE1Niw3IEBACiAJaWVlZTgwMjExX3N0YV9yeF9ub3RpZnkoc2RhdGEsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKW1nbXQpOwogCW1vZF9iZWFjb25fdGltZXIoc2RhdGEpOwogCi0JcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVNTT0M7CisJcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMTYzNyw2ICsxMTcxLDEzIEBACiAJaW50IGZyZXE7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJYm9vbCBuZWVkX3BzID0gZmFsc2U7CisKKwlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKKwkJYnNzID0gKHZvaWQgKilzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZC0+cHJpdjsKKwkJLyogbm90IHByZXZpb3VzbHkgc2V0IHNvIHdlIG1heSBuZWVkIHRvIHJlY2FsYyAqLworCQluZWVkX3BzID0gIWJzcy0+ZHRpbV9wZXJpb2Q7CisJfQogCiAJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKIAkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKQEAgLTE2NTYsOCArMTE5NywxNCBAQAogCWlmICghc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCiAJCXJldHVybjsKIAorCWlmIChuZWVkX3BzKSB7CisJCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwkJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOworCQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwl9CisKIAlpZiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtICYmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID09IDMpICYmCi0JICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLAorCSAgICAobWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZC0+YnNzaWQsCiAJCQkJCQkJRVRIX0FMRU4pID09IDApKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOwpAQCAtMTY2NywxOSArMTIxNCwxOSBAQAogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbiwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7Ci0Jc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9ICh2b2lkICopIHNrYi0+Y2I7CisJc2l6ZV90IGJhc2VsZW4sIGxlbiA9IHNrYi0+bGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCiAJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOwogCi0JaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwogCiAJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUgLSAodTggKikgbWdtdDsKQEAgLTE2OTEsMTcgKzEyMzgsOCBAQAogCiAJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCBmYWxzZSk7CiAKLQkvKiBkaXJlY3QgcHJvYmUgbWF5IGJlIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uIGZsb3cgKi8KLQlpZiAod2sgJiYgd2stPnN0YXRlID09IElFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXdrLT50cmllcyA9IDA7Ci0JCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfQVVUSDsKLQkJV0FSTl9PTihpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCB3aykgIT0gUlhfTUdNVF9OT05FKTsKLQl9Ci0KIAlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwICYmCiAJICAgIGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMIHwKIAkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpIHsKIAkJaWZtZ2QtPmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwgfApAQCAtMTc3NCw3ICsxMzEyLDcgQEAKIAlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlic3NpZCA9IGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkOworCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkOwogCiAJLyoKIAkgKiBBbmQgaW4gdGhlb3J5IGV2ZW4gZnJhbWVzIGZyb20gYSBkaWZmZXJlbnQgQVAgd2Ugd2VyZSBqdXN0CkBAIC0xNzg3LDcgKzEzMjUsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogY2FuY2VsbGluZyBwcm9iZXJlcSBwb2xsIGR1ZSAiCi0JCQkgICAgICAgInRvIGEgcmVjZWl2ZWQgYmVhY29uXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCSAgICAgICAidG8gYSByZWNlaXZlZCBiZWFjb25cbiIsIHNkYXRhLT5uYW1lKTsKIAkJfQogI2VuZGlmCiAJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTDsKQEAgLTE4NjUsNyArMTQwMyw3IEBACiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKIAkJaWYgKFdBUk5fT04oIXN0YSkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwpAQCAtMTkxMyw5ICsxNDUxLDYgQEAKIAlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ1RJT046CkBAIC0xOTMzLDcgKzE0NjgsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOwogCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hID0gUlhfTUdNVF9OT05FOwogCXUxNiBmYzsKIApAQCAtMTk0NCwyMCArMTQ3OCwxNyBAQAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwogCiAJaWYgKGlmbWdkLT5hc3NvY2lhdGVkICYmCi0JICAgIG1lbWNtcChpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgbWdtdC0+YnNzaWQsCi0JCQkJCQkJRVRIX0FMRU4pID09IDApIHsKKwkgICAgbWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CiAJCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAogCQkJCQkJIHJ4X3N0YXR1cyk7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIE5VTEwsIG1nbXQsCi0JCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgc2tiKTsKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIE5VTEwsCi0JCQkJCQkgICAgICAgbWdtdCwgc2tiLT5sZW4pOworCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CiAJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwpAQCAtMTk2OCw3ICsxNDk5LDcgQEAKIAogCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCiAJCQkJCSZtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLnN3X2VsZW0sCi0JCQkJCWlmbWdkLT5hc3NvY2lhdGVkKTsKKwkJCQkJKHZvaWQgKilpZm1nZC0+YXNzb2NpYXRlZC0+cHJpdik7CiAJCQlicmVhazsKIAkJfQogCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwpAQCAtMTk4OSw1OCArMTUyMCwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgd2ssIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkJICAgICByeF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHNkYXRhLCB3aywgbWdtdCwgc2tiLT5sZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCB3aywgbWdtdCwKLQkJCQkJCQkgICBza2ItPmxlbiwgZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIHdrLCBtZ210LAotCQkJCQkJCSAgIHNrYi0+bGVuLCB0cnVlKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIHdrLCBtZ210LAotCQkJCQkJICAgICAgIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qCi0JCSAqIFdlJ3ZlIHByb2Nlc3NlZCB0aGlzIGZyYW1lIGZvciB0aGF0IHdvcmssIHNvIGl0IGNhbid0Ci0JCSAqIGJlbG9uZyB0byBhbm90aGVyIHdvcmsgc3RydWN0LgotCQkgKiBOQjogdGhpcyBpcyBhbHNvIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyBiZWNhdXNlIHRoZQotCQkgKiBjYWxsZWQgZnVuY3Rpb25zIGNhbiBmcmVlICd3aycsIGFuZCBmb3IgJ3JtYSchCi0JCSAqLwotCQlicmVhazsKLQl9Ci0KIAltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogCi0Jc3dpdGNoIChybWEpIHsKLQljYXNlIFJYX01HTVRfTk9ORToKLQkJLyogbm8gYWN0aW9uICovCi0JCWJyZWFrOwotCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BVVRIOgotCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIHNrYi0+bGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBSWF9NR01UX0NGRzgwMjExX0FTU09DOgotCQljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBza2ItPmxlbik7Ci0JCWJyZWFrOwotCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9ERUFVVEg6CisJaWYgKHNrYi0+bGVuID49IDI0ICsgMiAvKiBtZ210ICsgZGVhdXRoIHJlYXNvbiAqLyAmJgorCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0RFQVVUSCkKIAkJY2ZnODAyMTFfc2VuZF9kZWF1dGgoc2RhdGEtPmRldiwgKHU4ICopbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7Ci0JfQogCiAgb3V0OgogCWtmcmVlX3NrYihza2IpOwpAQCAtMjA2OCwxMiArMTU1Miw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLCAqdG1wOwotCUxJU1RfSEVBRChmcmVlX3dvcmspOwotCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hOwotCWJvb2wgYW55YnVzeSA9IGZhbHNlOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm47CiAKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQpAQCAtMjEwNCw3ICsxNTg0LDcgQEAKIAkgICAgaWZtZ2QtPmFzc29jaWF0ZWQpIHsKIAkJdTggYnNzaWRbRVRIX0FMRU5dOwogCi0JCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhpZm1nZC0+cHJvYmVfdGltZW91dCkpCiAJCQlydW5fYWdhaW4oaWZtZ2QsIGlmbWdkLT5wcm9iZV90aW1lb3V0KTsKIApAQCAtMjEyNiw3ICsxNjA2LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJObyBwcm9iZSByZXNwb25zZSBmcm9tIEFQICVwTSIKIAkJCQkiIGFmdGVyICVkbXMsIGRpc2Nvbm5lY3RpbmcuXG4iLAogCQkJCWJzc2lkLCAoMTAwMCAqIElFRUU4MDIxMV9QUk9CRV9XQUlUKS9IWik7Ci0JCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlKTsKKwkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEpOwogCQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIAkJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAJCQkvKgpAQCAtMjE0MSw4NyArMTYyMSw3IEBACiAJCX0KIAl9CiAKLQotCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh3ay0+dGltZW91dCkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHdvcmsgaXRlbSBpc24ndCBzdXBwb3NlZCB0byBiZSB3b3JrZWQgb24KLQkJCSAqIHJpZ2h0IG5vdywgYnV0IHRha2UgY2FyZSB0byBhZGp1c3QgdGhlIHRpbWVyCi0JCQkgKiBwcm9wZXJseS4KLQkJCSAqLwotCQkJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN3aXRjaCAod2stPnN0YXRlKSB7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09OKDEpOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9JRExFOgotCQkJLyogbm90aGluZyAqLwotCQkJcm1hID0gUlhfTUdNVF9OT05FOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRToKLQkJCXJtYSA9IGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEsIHdrKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9NR0RfU1RBVEVfQVVUSDoKLQkJCXJtYSA9IGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIHdrKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9NR0RfU1RBVEVfQVNTT0M6Ci0JCQlybWEgPSBpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCB3ayk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAocm1hKSB7Ci0JCWNhc2UgUlhfTUdNVF9OT05FOgotCQkJLyogbm8gYWN0aW9uIHJlcXVpcmVkICovCi0JCQlicmVhazsKLQkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE86Ci0JCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzoKLQkJCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCQlsaXN0X2FkZCgmd2stPmxpc3QsICZmcmVlX3dvcmspOwotCQkJd2stPnRyaWVzID0gcm1hOyAvKiBzbWFsbCBhYnVzZSBidXQgb25seSBsb2NhbCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAod2stPnN0YXRlICE9IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRSkgewotCQkJYW55YnVzeSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoIWFueWJ1c3kgJiYKLQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCkpCi0JCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywKLQkJCQkJICAgICAmbG9jYWwtPnNjYW5fd29yaywKLQkJCQkJICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDApKTsKLQogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmZyZWVfd29yaywgbGlzdCkgewotCQlzd2l0Y2ggKHdrLT50cmllcykgewotCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzoKLQkJCWNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHNkYXRhLT5kZXYsCi0JCQkJCQkgICB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQkJCWJyZWFrOwotCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfVE86Ci0JCQljZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc2RhdGEtPmRldiwKLQkJCQkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV0FSTigxLCAidW5leHBlY3RlZDogJWQiLCB3ay0+dHJpZXMpOwotCQl9Ci0KLQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJa2ZyZWUod2spOwotCX0KLQotCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfYmNuX21vbl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMzMwLDE0ICsxNzMwLDE0IEBACiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmbWdkLT5za2JfcXVldWUpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmlmbWdkLT53b3JrX2xpc3QpOwotCi0JaWZtZ2QtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKIAlpZm1nZC0+ZmxhZ3MgPSAwOwotCWlmIChzZGF0YS0+bG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQotCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIAogCW11dGV4X2luaXQoJmlmbWdkLT5tdHgpOworCisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTKQorCQlpZm1nZC0+cmVxX3NtcHMgPSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM7CisJZWxzZQorCQlpZm1nZC0+cmVxX3NtcHMgPSBJRUVFODAyMTFfU01QU19PRkY7CiB9CiAKIC8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovCkBAIC0yMzY4LDEyICsxNzY4LDM0IEBACiB9CiAKIC8qIGNvbmZpZyBob29rcyAqLworc3RhdGljIGVudW0gd29ya19kb25lX3Jlc3VsdAoraWVlZTgwMjExX3Byb2JlX2F1dGhfZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghc2tiKSB7CisJCWNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHdrLT5zZGF0YS0+ZGV2LCB3ay0+ZmlsdGVyX3RhKTsKKwkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworCX0KKworCWlmICh3ay0+dHlwZSA9PSBJRUVFODAyMTFfV09SS19BVVRIKSB7CisJCWNmZzgwMjExX3NlbmRfcnhfYXV0aCh3ay0+c2RhdGEtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCXJldHVybiBXT1JLX0RPTkVfREVTVFJPWTsKKwl9CisKKwltdXRleF9sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcCh3ay0+c2RhdGEsIHNrYik7CisJbXV0ZXhfdW5sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisKKwl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FVVEg7CisJd2stPnByb2JlX2F1dGgudHJpZXMgPSAwOworCXJldHVybiBXT1JLX0RPTkVfUkVRVUVVRTsKK30KKwogaW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAljb25zdCB1OCAqc3NpZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3azsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOwogCXUxNiBhdXRoX2FsZzsKIAogCXN3aXRjaCAocmVxLT5hdXRoX3R5cGUpIHsKQEAgLTIzOTcsNyArMTgxOSw3IEBACiAJaWYgKCF3aykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl3ay0+YnNzID0gKHZvaWQgKilyZXEtPmJzczsKKwltZW1jcHkod2stPmZpbHRlcl90YSwgcmVxLT5ic3MtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZiAocmVxLT5pZSAmJiByZXEtPmllX2xlbikgewogCQltZW1jcHkod2stPmllLCByZXEtPmllLCByZXEtPmllX2xlbik7CkBAIC0yNDA1LDY4ICsxODI3LDgzIEBACiAJfQogCiAJaWYgKHJlcS0+a2V5ICYmIHJlcS0+a2V5X2xlbikgewotCQl3ay0+a2V5X2xlbiA9IHJlcS0+a2V5X2xlbjsKLQkJd2stPmtleV9pZHggPSByZXEtPmtleV9pZHg7Ci0JCW1lbWNweSh3ay0+a2V5LCByZXEtPmtleSwgcmVxLT5rZXlfbGVuKTsKKwkJd2stPnByb2JlX2F1dGgua2V5X2xlbiA9IHJlcS0+a2V5X2xlbjsKKwkJd2stPnByb2JlX2F1dGgua2V5X2lkeCA9IHJlcS0+a2V5X2lkeDsKKwkJbWVtY3B5KHdrLT5wcm9iZV9hdXRoLmtleSwgcmVxLT5rZXksIHJlcS0+a2V5X2xlbik7CiAJfQogCiAJc3NpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKHJlcS0+YnNzLCBXTEFOX0VJRF9TU0lEKTsKLQltZW1jcHkod2stPnNzaWQsIHNzaWQgKyAyLCBzc2lkWzFdKTsKLQl3ay0+c3NpZF9sZW4gPSBzc2lkWzFdOworCW1lbWNweSh3ay0+cHJvYmVfYXV0aC5zc2lkLCBzc2lkICsgMiwgc3NpZFsxXSk7CisJd2stPnByb2JlX2F1dGguc3NpZF9sZW4gPSBzc2lkWzFdOwogCi0Jd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRTsKLQl3ay0+YXV0aF9hbGcgPSBhdXRoX2FsZzsKLQl3ay0+dGltZW91dCA9IGppZmZpZXM7IC8qIHJ1biByaWdodCBhd2F5ICovCisJd2stPnByb2JlX2F1dGguYWxnb3JpdGhtID0gYXV0aF9hbGc7CisJd2stPnByb2JlX2F1dGgucHJpdmFjeSA9IHJlcS0+YnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAKLQkvKgotCSAqIFhYWDogaWYgc3RpbGwgYXNzb2NpYXRlZCBuZWVkIHRvIHRlbGwgQVAgdGhhdCB3ZSdyZSBnb2luZwotCSAqCXRvIHNsZWVwIGFuZCB0aGVuIGNoYW5nZSBjaGFubmVsIGV0Yy4KLQkgKi8KLQlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHJlcS0+YnNzLT5jaGFubmVsOwotCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKwkvKiBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwcm9iZSwgZG9uJ3QgcHJvYmUgYWdhaW4gKi8KKwlpZiAocmVxLT5ic3MtPnByb2JlcmVzcF9pZXMpCisJCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVVUSDsKKwllbHNlCisJCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOworCXdrLT5jaGFuID0gcmVxLT5ic3MtPmNoYW5uZWw7CisJd2stPnNkYXRhID0gc2RhdGE7CisJd2stPmRvbmUgPSBpZWVlODAyMTFfcHJvYmVfYXV0aF9kb25lOwogCi0JbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7Ci0JbGlzdF9hZGQoJndrLT5saXN0LCAmc2RhdGEtPnUubWdkLndvcmtfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQotCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOworCWllZWU4MDIxMV9hZGRfd29yayh3ayk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBlbnVtIHdvcmtfZG9uZV9yZXN1bHQgaWVlZTgwMjExX2Fzc29jX2RvbmUoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IHN0YXR1czsKKworCWlmICghc2tiKSB7CisJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dCh3ay0+c2RhdGEtPmRldiwgd2stPmZpbHRlcl90YSk7CisJCXJldHVybiBXT1JLX0RPTkVfREVTVFJPWTsKKwl9CisKKwltZ210ID0gKHZvaWQgKilza2ItPmRhdGE7CisJc3RhdHVzID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLnN0YXR1c19jb2RlKTsKKworCWlmIChzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQltdXRleF9sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisJCWlmICghaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Mod2ssIG1nbXQsIHNrYi0+bGVuKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisJCQkvKiBvb3BzIC0tIGludGVybmFsIGVycm9yIC0tIHNlbmQgdGltZW91dCBmb3Igbm93ICovCisJCQljZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQod2stPnNkYXRhLT5kZXYsCisJCQkJCQkgICAgd2stPmZpbHRlcl90YSk7CisJCQlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisJfQorCisJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyh3ay0+c2RhdGEtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworfQorCiBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCXN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICpmb3VuZCA9IE5VTEw7Ci0JaW50IGksIGVycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKilyZXEtPmJzcy0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOworCWNvbnN0IHU4ICpzc2lkOworCWludCBpOwogCiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAoJndrLT5ic3MtPmNic3MgPT0gcmVxLT5ic3MgJiYKLQkJICAgIHdrLT5zdGF0ZSA9PSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEUpIHsKLQkJCWZvdW5kID0gd2s7Ci0JCQlicmVhazsKLQkJfQorCWlmIChpZm1nZC0+YXNzb2NpYXRlZCkgeworCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCQlyZXR1cm4gLUVBTFJFQURZOwogCX0KKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogCi0JaWYgKCFmb3VuZCkgewotCQllcnIgPSAtRU5PTElOSzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9kZWwoJmZvdW5kLT5saXN0KTsKLQotCXdrID0ga3JlYWxsb2MoZm91bmQsIHNpemVvZigqd2spICsgcmVxLT5pZV9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghd2spIHsKLQkJbGlzdF9hZGQoJmZvdW5kLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmlmbWdkLT53b3JrX2xpc3QpOworCXdrID0ga3phbGxvYyhzaXplb2YoKndrKSArIHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdrKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTjsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfTlVMTEZVTkNfQUNLRUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmVxLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlOyBpKyspCiAJCWlmIChyZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CkBAIC0yNDc0LDggKzE5MTEsNiBAQAogCQkgICAgcmVxLT5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZVtpXSA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpCiAJCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTjsKIAotCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gcmVxLT5ic3MtPmNoYW5uZWw7Ci0JaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOwogCiAJaWYgKHJlcS0+aWUgJiYgcmVxLT5pZV9sZW4pIHsKIAkJbWVtY3B5KHdrLT5pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwpAQCAtMjQ4MywxMiArMTkxOCw1NSBAQAogCX0gZWxzZQogCQl3ay0+aWVfbGVuID0gMDsKIAotCWlmIChyZXEtPnByZXZfYnNzaWQpCi0JCW1lbWNweSh3ay0+cHJldl9ic3NpZCwgcmVxLT5wcmV2X2Jzc2lkLCBFVEhfQUxFTik7CisJd2stPmFzc29jLmJzcyA9IHJlcS0+YnNzOwogCi0Jd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQzsKLQl3ay0+dHJpZXMgPSAwOwotCXdrLT50aW1lb3V0ID0gamlmZmllczsgLyogcnVuIHJpZ2h0IGF3YXkgKi8KKwltZW1jcHkod2stPmZpbHRlcl90YSwgcmVxLT5ic3MtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkvKiBuZXcgYXNzb2NpYXRpb24gYWx3YXlzIHVzZXMgcmVxdWVzdGVkIHNtcHMgbW9kZSAqLworCWlmIChpZm1nZC0+cmVxX3NtcHMgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSB7CisJCWlmIChpZm1nZC0+cG93ZXJzYXZlKQorCQkJaWZtZ2QtPmFwX3NtcHMgPSBJRUVFODAyMTFfU01QU19EWU5BTUlDOworCQllbHNlCisJCQlpZm1nZC0+YXBfc21wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwl9IGVsc2UKKwkJaWZtZ2QtPmFwX3NtcHMgPSBpZm1nZC0+cmVxX3NtcHM7CisKKwl3ay0+YXNzb2Muc21wcyA9IGlmbWdkLT5hcF9zbXBzOworCS8qCisJICogSUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UgY2lwaGVycyBpbiBIVCBtb2RlLgorCSAqIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24tSFQgbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZQorCSAqIGNpcGhlcnMgaXMgY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKiBXZSBjYW4gc2V0IHRoaXMgdG8gdHJ1ZSBmb3Igbm9uLTExbiBoYXJkd2FyZSwgdGhhdCdsbCBiZSBjaGVja2VkCisJICogc2VwYXJhdGVseSBhbG9uZyB3aXRoIHRoZSBwZWVyIGNhcGFiaWxpdGllcy4KKwkgKi8KKwl3ay0+YXNzb2MudXNlXzExbiA9ICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTik7CisJd2stPmFzc29jLmNhcGFiaWxpdHkgPSByZXEtPmJzcy0+Y2FwYWJpbGl0eTsKKwl3ay0+YXNzb2Mud21tX3VzZWQgPSBic3MtPndtbV91c2VkOworCXdrLT5hc3NvYy5zdXBwX3JhdGVzID0gYnNzLT5zdXBwX3JhdGVzOworCXdrLT5hc3NvYy5zdXBwX3JhdGVzX2xlbiA9IGJzcy0+c3VwcF9yYXRlc19sZW47CisJd2stPmFzc29jLmh0X2luZm9ybWF0aW9uX2llID0KKwkJaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKTsKKworCWlmIChic3MtPndtbV91c2VkICYmIGJzcy0+dWFwc2Rfc3VwcG9ydGVkICYmCisJICAgIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEKSkgeworCQl3ay0+YXNzb2MudWFwc2RfdXNlZCA9IHRydWU7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJd2stPmFzc29jLnVhcHNkX3VzZWQgPSBmYWxzZTsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQ7CisJfQorCisJc3NpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKHJlcS0+YnNzLCBXTEFOX0VJRF9TU0lEKTsKKwltZW1jcHkod2stPmFzc29jLnNzaWQsIHNzaWQgKyAyLCBzc2lkWzFdKTsKKwl3ay0+YXNzb2Muc3NpZF9sZW4gPSBzc2lkWzFdOworCisJaWYgKHJlcS0+cHJldl9ic3NpZCkKKwkJbWVtY3B5KHdrLT5hc3NvYy5wcmV2X2Jzc2lkLCByZXEtPnByZXZfYnNzaWQsIEVUSF9BTEVOKTsKKworCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVNTT0M7CisJd2stPmNoYW4gPSByZXEtPmJzcy0+Y2hhbm5lbDsKKwl3ay0+c2RhdGEgPSBzZGF0YTsKKwl3ay0+ZG9uZSA9IGllZWU4MDIxMV9hc3NvY19kb25lOwogCiAJaWYgKHJlcS0+dXNlX21mcCkgewogCQlpZm1nZC0+bWZwID0gSUVFRTgwMjExX01GUF9SRVFVSVJFRDsKQEAgLTI1MDMsNjkgKzE5ODEsNjUgQEAKIAllbHNlCiAJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQ7CiAKLQlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJnNkYXRhLT51Lm1nZC53b3JrKTsKLQotCWVyciA9IDA7Ci0KLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQlyZXR1cm4gZXJyOworCWllZWU4MDIxMV9hZGRfd29yayh3ayk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfbWdkX2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSwKIAkJCSB2b2lkICpjb29raWUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2s7Ci0JY29uc3QgdTggKmJzc2lkID0gTlVMTDsKLQlib29sIG5vdF9hdXRoX3lldCA9IGZhbHNlOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJY29uc3QgdTggKmJzc2lkID0gcmVxLT5ic3MtPmJzc2lkOwogCiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CiAKLQlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYgJmlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzID09IHJlcS0+YnNzKSB7CisJaWYgKGlmbWdkLT5hc3NvY2lhdGVkID09IHJlcS0+YnNzKSB7CiAJCWJzc2lkID0gcmVxLT5ic3MtPmJzc2lkOwotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlKTsKLQl9IGVsc2UgbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCZ3ay0+YnNzLT5jYnNzID09IHJlcS0+YnNzKSB7Ci0JCQlic3NpZCA9IHJlcS0+YnNzLT5ic3NpZDsKLQkJCWlmICh3ay0+c3RhdGUgPT0gSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRSkKLQkJCQlub3RfYXV0aF95ZXQgPSB0cnVlOwotCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJCWtmcmVlKHdrKTsKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJfSBlbHNlIHsKKwkJYm9vbCBub3RfYXV0aF95ZXQgPSBmYWxzZTsKKworCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCisJCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCQlpZiAod2stPnNkYXRhICE9IHNkYXRhKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAod2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFICYmCisJCQkgICAgd2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfQVVUSCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG1lbWNtcChyZXEtPmJzcy0+YnNzaWQsIHdrLT5maWx0ZXJfdGEsIEVUSF9BTEVOKSkKKwkJCQljb250aW51ZTsKKworCQkJbm90X2F1dGhfeWV0ID0gd2stPnR5cGUgPT0gSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOworCQkJbGlzdF9kZWxfcmN1KCZ3ay0+bGlzdCk7CisJCQlmcmVlX3dvcmsod2spOwogCQkJYnJlYWs7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJCS8qCisJCSAqIElmIHNvbWVib2R5IHJlcXVlc3RzIGF1dGhlbnRpY2F0aW9uIGFuZCB3ZSBoYXZlbid0CisJCSAqIHNlbnQgb3V0IGFuIGF1dGggZnJhbWUgeWV0IHRoZXJlJ3Mgbm8gbmVlZCB0byBzZW5kCisJCSAqIG91dCBhIGRlYXV0aCBmcmFtZSBlaXRoZXIuIElmIHRoZSBzdGF0ZSB3YXMgUFJPQkUsCisJCSAqIHRoZW4gdGhpcyBpcyB0aGUgY2FzZS4gSWYgaXQncyBBVVRIIHdlIGhhdmUgc2VudCBhCisJCSAqIGZyYW1lLCBhbmQgaWYgaXQncyBJRExFIHdlIGhhdmUgY29tcGxldGVkIHRoZSBhdXRoCisJCSAqIHByb2Nlc3MgYWxyZWFkeS4KKwkJICovCisJCWlmIChub3RfYXV0aF95ZXQpIHsKKwkJCV9fY2ZnODAyMTFfYXV0aF9jYW5jZWxlZChzZGF0YS0+ZGV2LCBic3NpZCk7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAotCS8qCi0JICogSWYgc29tZWJvZHkgcmVxdWVzdHMgYXV0aGVudGljYXRpb24gYW5kIHdlIGhhdmVuJ3QKLQkgKiBzZW50IG91dCBhbiBhdXRoIGZyYW1lIHlldCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VuZAotCSAqIG91dCBhIGRlYXV0aCBmcmFtZSBlaXRoZXIuIElmIHRoZSBzdGF0ZSB3YXMgUFJPQkUsCi0JICogdGhlbiB0aGlzIGlzIHRoZSBjYXNlLiBJZiBpdCdzIEFVVEggd2UgaGF2ZSBzZW50IGEKLQkgKiBmcmFtZSwgYW5kIGlmIGl0J3MgSURMRSB3ZSBoYXZlIGNvbXBsZXRlZCB0aGUgYXV0aAotCSAqIHByb2Nlc3MgYWxyZWFkeS4KLQkgKi8KLQlpZiAobm90X2F1dGhfeWV0KSB7Ci0JCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0JCV9fY2ZnODAyMTFfYXV0aF9jYW5jZWxlZChzZGF0YS0+ZGV2LCBic3NpZCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogY2ZnODAyMTEgc2hvdWxkIGNhdGNoIHRoaXMgLi4uIGJ1dCBpdCdzIHJhY3kgc2luY2UKLQkgKiB3ZSBjYW4gcmVjZWl2ZSBhIGRlYXV0aCBmcmFtZSwgcHJvY2VzcyBpdCwgaGFuZCBpdAotCSAqIHRvIGNmZzgwMjExIHdoaWxlIHRoYXQncyBpbiBhIGxvY2tlZCBzZWN0aW9uIGFscmVhZHkKLQkgKiB0cnlpbmcgdG8gdGVsbCB1cyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRpc2Nvbm5lY3QuCi0JICovCi0JaWYgKCFic3NpZCkgewotCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCQlyZXR1cm4gLUVOT0xJTks7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGluZyBmcm9tICVwTSBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkLCByZXEtPnJlYXNvbl9jb2RlKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIGJzc2lkLCByZXEtPnJlYXNvbl9jb2RlKTsKIAogCWllZWU4MDIxMV9zZW5kX2RlYXV0aF9kaXNhc3NvYyhzZGF0YSwgYnNzaWQsCiAJCQlJRUVFODAyMTFfU1RZUEVfREVBVVRILCByZXEtPnJlYXNvbl9jb2RlLApAQCAtMjU5MCwxNSArMjA2NCwxNSBAQAogCSAqIHRvIGNmZzgwMjExIHdoaWxlIHRoYXQncyBpbiBhIGxvY2tlZCBzZWN0aW9uIGFscmVhZHkKIAkgKiB0cnlpbmcgdG8gdGVsbCB1cyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRpc2Nvbm5lY3QuCiAJICovCi0JaWYgKCZpZm1nZC0+YXNzb2NpYXRlZC0+Y2JzcyAhPSByZXEtPmJzcykgeworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAhPSByZXEtPmJzcykgewogCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogCQlyZXR1cm4gLUVOT0xJTks7CiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBmcm9tICVwTSBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlcS0+YnNzLT5ic3NpZCwgcmVxLT5yZWFzb25fY29kZSk7CisJICAgICAgIHNkYXRhLT5uYW1lLCByZXEtPmJzcy0+YnNzaWQsIHJlcS0+cmVhc29uX2NvZGUpOwogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UpOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEpOwogCiAJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKIApAQCAtMjYxMCwzICsyMDg0LDM4IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IGllZWU4MDIxMV9tZ2RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogQ2hlY2sgdGhhdCB3ZSBhcmUgb24gdGhlIHJlcXVlc3RlZCBjaGFubmVsIGZvciB0cmFuc21pc3Npb24gKi8KKwlpZiAoKGNoYW4gIT0gbG9jYWwtPnRtcF9jaGFubmVsIHx8CisJICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGUpICYmCisJICAgIChjaGFuICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwgfHwKKwkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1ZiwgbGVuKTsKKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpKQorCQlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9CisJCQlJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOworCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFggfAorCQlJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisJc2tiLT5kZXYgPSBzZGF0YS0+ZGV2OworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CisKKwkqY29va2llID0gKHVuc2lnbmVkIGxvbmcpIHNrYjsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNmIxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogT2ZmLWNoYW5uZWwgb3BlcmF0aW9uIGhlbHBlcnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorCisvKgorICogaW5mb3JtIEFQIHRoYXQgd2Ugd2lsbCBnbyB0byBzbGVlcCBzbyB0aGF0IGl0IHdpbGwgYnVmZmVyIHRoZSBmcmFtZXMKKyAqIHdoaWxlIHdlIHNjYW4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcHNfZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJbG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCA9IGZhbHNlOworCisJLyogRklYTUU6IHdoYXQgdG8gZG8gd2hlbiBsb2NhbC0+cHNwb2xsaW5nIGlzIHRydWU/ICovCisKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCWxvY2FsLT5vZmZjaGFubmVsX3BzX2VuYWJsZWQgPSB0cnVlOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJfQorCisJaWYgKCEobG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCkgfHwKKwkgICAgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spKQorCQkvKgorCQkgKiBJZiBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCBubyBuZWVkIHRvIHNlbmQgYSBudWxsZnVuYworCQkgKiBmcmFtZSBiZWNhdXNlIEFQIGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLiBCdXQgaWYgdGhlCisJCSAqIGhhcmR3YXJlIGlzIGNyZWF0aW5nIHRoZSBudWxsZnVuYyBmcmFtZSBmb3IgcG93ZXIgc2F2ZQorCQkgKiBzdGF0dXMgKGllLiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgbm90CisJCSAqIGVuYWJsZWQpIGFuZCBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCB0aGUgZmlybXdhcmUganVzdAorCQkgKiBzZW50IGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgZGlzYWJsZWQuIFNvIHdlIG5lZWQKKwkJICogdG8gc2VuZCBhIG5ldyBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0gdGhlIEFQIHRoYXQgd2UKKwkJICogYXJlIGFnYWluIHNsZWVwaW5nLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKK30KKworLyogaW5mb3JtIEFQIHRoYXQgd2UgYXJlIGF3YWtlIGFnYWluLCB1bmxlc3MgcG93ZXIgc2F2ZSBpcyBlbmFibGVkICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWYgKCFsb2NhbC0+cHNfc2RhdGEpCisJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJZWxzZSBpZiAobG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCkgeworCQkvKgorCQkgKiBJbiAhSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGNhc2UgdGhlIGhhcmR3YXJlCisJCSAqIHdpbGwgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggdGhlIHBvd2Vyc2F2ZSBiaXQgc2V0CisJCSAqIGV2ZW4gdGhvdWdoIHRoZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLgorCQkgKiBUaGlzIGNvdWxkIGJlIGF2b2lkZWQgYnkgc2VuZGluZyBhIG51bGwgZnJhbWUgd2l0aCBwb3dlcgorCQkgKiBzYXZlIGJpdCBkaXNhYmxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIHBvd2VyIHNhdmUsIGJ1dAorCQkgKiB0aGlzIGRvZXNuJ3QgZ2FpbiBhbnl0aGluZy4KKwkJICoKKwkJICogV2hlbiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgZW5hYmxlZCwgbm8gbmVlZAorCQkgKiB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgYmVjYXVzZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQKKwkJICogd2UgYXJlIHNsZWVwaW5nLCBsZXQncyBqdXN0IGVuYWJsZSBwb3dlciBzYXZlIG1vZGUgaW4KKwkJICogaGFyZHdhcmUuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9IGVsc2UgaWYgKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKKwkJLyoKKwkJICogSWYgSUVFRTgwMjExX0NPTkZfUFMgd2FzIG5vdCBzZXQgYW5kIHRoZSBkeW5hbWljX3BzX3RpbWVyCisJCSAqIGhhZCBiZWVuIHJ1bm5pbmcgYmVmb3JlIGxlYXZpbmcgdGhlIG9wZXJhdGluZyBjaGFubmVsLAorCQkgKiByZXN0YXJ0IHRoZSB0aW1lciBub3cgYW5kIHNlbmQgYSBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0KKwkJICogdGhlIEFQIHRoYXQgd2UgYXJlIGF3YWtlLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3BfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRpc2FibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeSgKKwkJCQlzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpOworCisJCS8qCisJCSAqIG9ubHkgaGFuZGxlIG5vbi1TVEEgaW50ZXJmYWNlcyBoZXJlLCBTVEEgaW50ZXJmYWNlcworCQkgKiBhcmUgaGFuZGxlZCBpbiBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24oKSwKKwkJICogZS5nLiwgZnJvbSB0aGUgYmFja2dyb3VuZCBzY2FuIHN0YXRlIG1hY2hpbmUuCisJCSAqCisJCSAqIEluIGFkZGl0aW9uLCBkbyBub3Qgc3RvcCBtb25pdG9yIGludGVyZmFjZSB0byBhbGxvdyBpdCB0byBiZQorCQkgKiB1c2VkIGZyb20gdXNlciBzcGFjZSBjb250cm9sbGVkIG9mZi1jaGFubmVsIG9wZXJhdGlvbnMuCisJCSAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOworCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKK30KKwordm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwkvKgorCSAqIG5vdGlmeSB0aGUgQVAgYWJvdXQgdXMgbGVhdmluZyB0aGUgY2hhbm5lbCBhbmQgc3RvcCBhbGwgU1RBIGludGVyZmFjZXMKKwkgKi8KKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX29mZmNoYW5uZWxfcHNfZW5hYmxlKHNkYXRhKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKK30KKwordm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJIGJvb2wgZW5hYmxlX2JlYWNvbmluZykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQljb250aW51ZTsKKworCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX29mZmNoYW5uZWxfcHNfZGlzYWJsZShzZGF0YSk7CisJCX0KKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisKKwkJLyogcmUtZW5hYmxlIGJlYWNvbmluZyAqLworCQlpZiAoZW5hYmxlX2JlYWNvbmluZyAmJgorCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkKKwkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KAorCQkJCXNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwppbmRleCBlNTM1ZjFjLi4wZTY0NDg0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcG0uYworKysgYi9uZXQvbWFjODAyMTEvcG0uYwpAQCAtMTAsOSArMTAsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7CiAKQEAgLTU2LDIyICs1NCwyMSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyogcmVtb3ZlIFNUQXMgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7CisJCWlmIChzdGEtPnVwbG9hZGVkKSB7CiAJCQlzZGF0YSA9IHN0YS0+c2RhdGE7CiAJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKIAkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAogCQkJCQkgICAgIHUuYXApOwogCi0JCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfUkVNT1ZFLAotCQkJCSAgICAgICAmc3RhLT5zdGEpOworCQkJZHJ2X3N0YV9yZW1vdmUobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEpOwogCQl9CiAKIAkJbWVzaF9wbGlua19xdWllc2NlKHN0YSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCiAJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CkBAIC05MywxNyArOTAsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGRpc2FibGUgYmVhY29uaW5nICovCiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAogCQkJQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpOwogCi0JCWNvbmYudmlmID0gJnNkYXRhLT52aWY7Ci0JCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwotCQlkcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgJmNvbmYpOworCQlkcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgJnNkYXRhLT52aWYpOwogCX0KIAogCS8qIHN0b3AgaGFyZHdhcmUgLSB0aGlzIG11c3Qgc3RvcCBSWCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKaW5kZXggMTJhMmJmZi4uMGIyOTlkMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuYworKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIH07CiAjZW5kaWYKIAotc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9hbGxvYyhjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2NvbnRyb2xfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNkaXIgPSBOVUxMOwpAQCAtMjA3LDYgKzIwNywyNyBAQAogCXJldHVybiAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIHx8ICFpZWVlODAyMTFfaXNfZGF0YShmYykpOwogfQogCitzdGF0aWMgdm9pZCByY19zZW5kX2xvd19icm9hZGNhc3QoczggKmlkeCwgdTMyIGJhc2ljX3JhdGVzLCB1OCBtYXhfcmF0ZV9pZHgpCit7CisJdTggaTsKKworCWlmIChiYXNpY19yYXRlcyA9PSAwKQorCQlyZXR1cm47IC8qIGFzc3VtZSBiYXNpYyByYXRlcyB1bmtub3duIGFuZCBhY2NlcHQgcmF0ZSAqLworCWlmICgqaWR4IDwgMCkKKwkJcmV0dXJuOworCWlmIChiYXNpY19yYXRlcyAmICgxIDw8ICppZHgpKQorCQlyZXR1cm47IC8qIHNlbGVjdGVkIHJhdGUgaXMgYSBiYXNpYyByYXRlICovCisKKwlmb3IgKGkgPSAqaWR4ICsgMTsgaSA8PSBtYXhfcmF0ZV9pZHg7IGkrKykgeworCQlpZiAoYmFzaWNfcmF0ZXMgJiAoMSA8PCBpKSkgeworCQkJKmlkeCA9IGk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBjb3VsZCBub3QgZmluZCBhIGJhc2ljIHJhdGU7IHVzZSBvcmlnaW5hbCBzZWxlY3Rpb24gKi8KK30KKwogYm9vbCByYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgIHZvaWQgKnByaXZfc3RhLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCkBAIC0yMTgsMTIgKzIzOSw0OCBAQAogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50ID0KIAkJCShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSA/CiAJCQkxIDogdHhyYy0+aHctPm1heF9yYXRlX3RyaWVzOworCQlpZiAoIXN0YSAmJiB0eHJjLT5hcCkKKwkJCXJjX3NlbmRfbG93X2Jyb2FkY2FzdCgmaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHgsCisJCQkJCSAgICAgIHR4cmMtPmJzc19jb25mLT5iYXNpY19yYXRlcywKKwkJCQkJICAgICAgdHhyYy0+c2JhbmQtPm5fYml0cmF0ZXMpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQogRVhQT1JUX1NZTUJPTChyYXRlX2NvbnRyb2xfc2VuZF9sb3cpOwogCitzdGF0aWMgdm9pZCByYXRlX2lkeF9tYXRjaF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSwKKwkJCQlpbnQgbl9iaXRyYXRlcywgdTMyIG1hc2spCit7CisJaW50IGo7CisKKwkvKiBTZWUgd2hldGhlciB0aGUgc2VsZWN0ZWQgcmF0ZSBvciBhbnl0aGluZyBiZWxvdyBpdCBpcyBhbGxvd2VkLiAqLworCWZvciAoaiA9IHJhdGUtPmlkeDsgaiA+PSAwOyBqLS0pIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBqKSkgeworCQkJLyogT2theSwgZm91bmQgYSBzdWl0YWJsZSByYXRlLiBVc2UgaXQuICovCisJCQlyYXRlLT5pZHggPSBqOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogVHJ5IHRvIGZpbmQgYSBoaWdoZXIgcmF0ZSB0aGF0IHdvdWxkIGJlIGFsbG93ZWQgKi8KKwlmb3IgKGogPSByYXRlLT5pZHggKyAxOyBqIDwgbl9iaXRyYXRlczsgaisrKSB7CisJCWlmIChtYXNrICYgKDEgPDwgaikpIHsKKwkJCS8qIE9rYXksIGZvdW5kIGEgc3VpdGFibGUgcmF0ZS4gVXNlIGl0LiAqLworCQkJcmF0ZS0+aWR4ID0gajsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogVWguLiBObyBzdWl0YWJsZSByYXRlIGV4aXN0cy4gVGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4gd2l0aAorCSAqIHNhbmUgVFggcmF0ZSBtYXNrIGNvbmZpZ3VyYXRpb25zLiBIb3dldmVyLCBzaG91bGQgc29tZW9uZSBtYW5hZ2UgdG8KKwkgKiBjb25maWd1cmUgc3VwcG9ydGVkIHJhdGVzIGFuZCBUWCByYXRlIG1hc2sgaW4gaW5jb21wYXRpYmxlIHdheSwKKwkgKiBhbGxvdyB0aGUgZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQgd2l0aCB3aGF0ZXZlciB0aGUgcmF0ZSBjb250cm9sCisJICogc2VsZWN0ZWQuCisJICovCit9CisKIHZvaWQgcmF0ZV9jb250cm9sX2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKQEAgLTIzMyw2ICsyOTAsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4cmMtPnNrYik7CiAJaW50IGk7CisJdTMyIG1hc2s7CiAKIAlpZiAoc3RhKSB7CiAJCWlzdGEgPSAmc3RhLT5zdGE7CkBAIC0yNDgsMjMgKzMwNiwzMSBAQAogCWlmIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpCiAJCXJldHVybjsKIAotCWlmIChzdGEgJiYgc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA+IC0xKSB7Ci0JCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeDsKLQl9IGVsc2UgewotCQlyZWYtPm9wcy0+Z2V0X3JhdGUocmVmLT5wcml2LCBpc3RhLCBwcml2X3N0YSwgdHhyYyk7Ci0JCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR087Ci0JfQorCXJlZi0+b3BzLT5nZXRfcmF0ZShyZWYtPnByaXYsIGlzdGEsIHByaXZfc3RhLCB0eHJjKTsKIAogCS8qCi0JICogdHJ5IHRvIGVuZm9yY2UgdGhlIG1heGltdW0gcmF0ZSB0aGUgdXNlciB3YW50ZWQKKwkgKiBUcnkgdG8gZW5mb3JjZSB0aGUgcmF0ZWlkeCBtYXNrIHRoZSB1c2VyIHdhbnRlZC4gc2tpcCB0aGlzIGlmIHRoZQorCSAqIGRlZmF1bHQgbWFzayAoYWxsb3cgYWxsIHJhdGVzKSBpcyB1c2VkIHRvIHNhdmUgc29tZSBwcm9jZXNzaW5nIGZvcgorCSAqIHRoZSBjb21tb24gY2FzZS4KIAkgKi8KLQlpZiAoc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID4gLTEpCisJbWFzayA9IHNkYXRhLT5yY19yYXRlaWR4X21hc2tbaW5mby0+YmFuZF07CisJaWYgKG1hc2sgIT0gKDEgPDwgdHhyYy0+c2JhbmQtPm5fYml0cmF0ZXMpIC0gMSkgeworCQlpZiAoc3RhKSB7CisJCQkvKiBGaWx0ZXIgb3V0IHJhdGVzIHRoYXQgdGhlIFNUQSBkb2VzIG5vdCBzdXBwb3J0ICovCisJCQltYXNrICY9IHN0YS0+c3RhLnN1cHBfcmF0ZXNbaW5mby0+YmFuZF07CisJCX0KKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSByYXRlIGluZGV4IHNlbGVjdGVkIGZvciBlYWNoIFRYIHJhdGUgaXMKKwkJICogaW5jbHVkZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbWFzayBhbmQgY2hhbmdlIHRoZSByYXRlIGluZGV4ZXMKKwkJICogaWYgbmVlZGVkLgorCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQkJLyogUmF0ZSBtYXNraW5nIHN1cHBvcnRzIG9ubHkgbGVnYWN5IHJhdGVzIGZvciBub3cgKi8KIAkJCWlmIChpbmZvLT5jb250cm9sLnJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykKIAkJCQljb250aW51ZTsKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4ID0KLQkJCQltaW5fdChzOCwgaW5mby0+Y29udHJvbC5yYXRlc1tpXS5pZHgsCi0JCQkJICAgICAgc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4KTsKKwkJCXJhdGVfaWR4X21hdGNoX21hc2soJmluZm8tPmNvbnRyb2wucmF0ZXNbaV0sCisJCQkJCSAgICB0eHJjLT5zYmFuZC0+bl9iaXRyYXRlcywgbWFzayk7CisJCX0KIAl9CiAKIAlCVUdfT04oaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPCAwKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmggYi9uZXQvbWFjODAyMTEvcmF0ZS5oCmluZGV4IGNiOWJkMWYuLmI2MTA4YmMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmgKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuaApAQCAtMjYsMTAgKzI2LDYgQEAKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogfTsKIAotLyogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLiBJZiBgbmFtZScgaXMgTlVMTCwgZ2V0IHRoZQotICogZmlyc3QgYXZhaWxhYmxlIGFsZ29yaXRobS4gKi8KLXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2NvbnRyb2xfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgcmF0ZV9jb250cm9sX2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYyk7CkBAIC00NCwxMCArNDAsMTEgQEAKIAlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqaXN0YSA9ICZzdGEtPnN0YTsKIAl2b2lkICpwcml2X3N0YSA9IHN0YS0+cmF0ZV9jdHJsX3ByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JaWYgKGxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR08pKQotCQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhLCBza2IpOworCWlmICghcmVmKQorCQlyZXR1cm47CisKKwlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhLCBza2IpOwogfQogCiAKQEAgLTExNSw3ICsxMTIsOCBAQAogI2VuZGlmCiB9CiAKLS8qIGZ1bmN0aW9ucyBmb3IgcmF0ZSBjb250cm9sIHJlbGF0ZWQgdG8gYSBkZXZpY2UgKi8KKy8qIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobS4gSWYgYG5hbWUnIGlzIE5VTEwsIGdldCB0aGUKKyAqIGZpcnN0IGF2YWlsYWJsZSBhbGdvcml0aG0uICovCiBpbnQgaWVlZTgwMjExX2luaXRfcmF0ZV9jdHJsX2FsZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIHJhdGVfY29udHJvbF9kZWluaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9hbGdvLmMKaW5kZXggMjliYzRjNS4uMjY1MmEzNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCkBAIC0xNTcsOSArMTU3LDcgQEAKIAogCS8qIEluIGNhc2Ugbm90aGluZyBoYXBwZW5lZCBkdXJpbmcgdGhlIHByZXZpb3VzIGNvbnRyb2wgaW50ZXJ2YWwsIHR1cm4KIAkgKiB0aGUgc2hhcnBlbmluZyBmYWN0b3Igb24uICovCi0JcGVyaW9kID0gKEhaICogcGluZm8tPnNhbXBsaW5nX3BlcmlvZCArIDUwMCkgLyAxMDAwOwotCWlmICghcGVyaW9kKQotCQlwZXJpb2QgPSAxOworCXBlcmlvZCA9IG1zZWNzX3RvX2ppZmZpZXMocGluZm8tPnNhbXBsaW5nX3BlcmlvZCk7CiAJaWYgKGppZmZpZXMgLSBzcGluZm8tPmxhc3Rfc2FtcGxlID4gMiAqIHBlcmlvZCkKIAkJc3BpbmZvLT5zaGFycF9jbnQgPSBwaW5mby0+c2hhcnBlbl9kdXJhdGlvbjsKIApAQCAtMjUyLDkgKzI1MCw3IEBACiAJfQogCiAJLyogVXBkYXRlIFBJRCBjb250cm9sbGVyIHN0YXRlLiAqLwotCXBlcmlvZCA9IChIWiAqIHBpbmZvLT5zYW1wbGluZ19wZXJpb2QgKyA1MDApIC8gMTAwMDsKLQlpZiAoIXBlcmlvZCkKLQkJcGVyaW9kID0gMTsKKwlwZXJpb2QgPSBtc2Vjc190b19qaWZmaWVzKHBpbmZvLT5zYW1wbGluZ19wZXJpb2QpOwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHNwaW5mby0+bGFzdF9zYW1wbGUgKyBwZXJpb2QpKQogCQlyYXRlX2NvbnRyb2xfcGlkX3NhbXBsZShwaW5mbywgc2JhbmQsIHN0YSwgc3BpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggODJhMzBjMS4uYjVjNDhkZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgMjAwNwlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjgzLDE1ICsyODMsMTUgQEAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19DT09LX0ZSQU1FUykKIAkJCWNvbnRpbnVlOwogCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJY29udGludWU7CisKIAkJaWYgKHByZXZfZGV2KSB7CiAJCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoc2tiMikgewpAQCAtMzYxLDcgKzM2MSw5IEBACiAgKiBib3VuZGFyeS4gSW4gdGhlIGNhc2Ugb2YgcmVndWxhciBmcmFtZXMsIHRoaXMgc2ltcGx5IG1lYW5zIGFsaWduaW5nIHRoZQogICogcGF5bG9hZCB0byBhIGZvdXItYnl0ZSBib3VuZGFyeSAoYmVjYXVzZSBlaXRoZXIgdGhlIElQIGhlYWRlciBpcyBkaXJlY3RseQogICogY29udGFpbmVkLCBvciBJVi9SRkMxMDQyIGhlYWRlcnMgdGhhdCBoYXZlIGEgbGVuZ3RoIGRpdmlzaWJsZSBieSBmb3VyIGFyZQotICogaW4gZnJvbnQgb2YgaXQpLgorICogaW4gZnJvbnQgb2YgaXQpLiAgSWYgdGhlIHBheWxvYWQgZGF0YSBpcyBub3QgcHJvcGVybHkgYWxpZ25lZCBhbmQgdGhlCisgKiBhcmNoaXRlY3R1cmUgZG9lc24ndCBzdXBwb3J0IGVmZmljaWVudCB1bmFsaWduZWQgb3BlcmF0aW9ucywgbWFjODAyMTEKKyAqIHdpbGwgYWxpZ24gdGhlIGRhdGEuCiAgKgogICogV2l0aCBBLU1TRFUgZnJhbWVzLCBob3dldmVyLCB0aGUgcGF5bG9hZCBkYXRhIGFkZHJlc3MgbXVzdCB5aWVsZCB0d28gbW9kdWxvCiAgKiBmb3VyIGJlY2F1c2UgdGhlcmUgYXJlIDE0LWJ5dGUgODAyLjMgaGVhZGVycyB3aXRoaW4gdGhlIEEtTVNEVSBmcmFtZXMgdGhhdApAQCAtMzc1LDI1ICszNzcsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKLQlpbnQgaGRybGVuOwotCi0jaWZuZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCi0JcmV0dXJuOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJV0FSTl9PTkNFKCh1bnNpZ25lZCBsb25nKXJ4LT5za2ItPmRhdGEgJiAxLAorCQkgICJ1bmFsaWduZWQgcGFja2V0IGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEpOwogI2VuZGlmCi0KLQlpZiAoV0FSTl9PTkNFKCh1bnNpZ25lZCBsb25nKXJ4LT5za2ItPmRhdGEgJiAxLAotCQkgICAgICAidW5hbGlnbmVkIHBhY2tldCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhKSkKLQkJcmV0dXJuOwotCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybjsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKQotCQloZHJsZW4gKz0gRVRIX0hMRU47Ci0JV0FSTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMywKLQkJICAidW5hbGlnbmVkIElQIHBheWxvYWQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSArIGhkcmxlbik7CiB9CiAKIApAQCAtNDc2LDcgKzQ2Myw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKLQljaGFyICpkZXZfYWRkciA9IHJ4LT5zZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwljaGFyICpkZXZfYWRkciA9IHJ4LT5zZGF0YS0+dmlmLmFkZHI7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKQEAgLTEwMjEsMTAgKzEwMDgsMTAgQEAKIAogCWF0b21pY19pbmMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOwogCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19TVEEpOwotCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9TTEVFUCwgJnN0YS0+c3RhKTsKKwlkcnZfc3RhX25vdGlmeShsb2NhbCwgc2RhdGEsIFNUQV9OT1RJRllfU0xFRVAsICZzdGEtPnN0YSk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gYWlkICVkIGVudGVycyBwb3dlciBzYXZlIG1vZGVcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCiB9CiAKQEAgLTEwMzgsMTMgKzEwMjUsMTMgQEAKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGFpZCAlZCBleGl0cyBwb3dlciBzYXZlIG1vZGVcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCiAKIAlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVIpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGFpZCAlZCBkcml2ZXItcHMtYmxvY2tlZFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CisJCSAgICAgICBzZGF0YS0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogCQlyZXR1cm47CiAJfQpAQCAtMTEyNCw2ICsxMTExLDE4IEBACiAJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIGllZWU4MDIxMV9pc19xb3NfbnVsbGZ1bmMoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlJODAyX0RFQlVHX0lOQyhyeC0+bG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfbnVsbGZ1bmMpOworCisJCS8qCisJCSAqIElmIHdlIHJlY2VpdmUgYSA0LWFkZHIgbnVsbGZ1bmMgZnJhbWUgZnJvbSBhIFNUQQorCQkgKiB0aGF0IHdhcyBub3QgbW92ZWQgdG8gYSA0LWFkZHIgU1RBIHZsYW4geWV0LCBkcm9wCisJCSAqIHRoZSBmcmFtZSB0byB0aGUgbW9uaXRvciBpbnRlcmZhY2UsIHRvIG1ha2Ugc3VyZQorCQkgKiB0aGF0IGhvc3RhcGQgc2VlcyBpdAorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICAgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgICAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICAgICFyeC0+c2RhdGEtPnUudmxhbi5zdGEpKSkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAJCS8qCiAJCSAqIFVwZGF0ZSBjb3VudGVyIGFuZCBmcmVlIHBhY2tldCBoZXJlIHRvIGF2b2lkCiAJCSAqIGNvdW50aW5nIHRoaXMgYXMgYSBkcm9wcGVkIHBhY2tlZC4KQEAgLTExNTYsNyArMTE1NSw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggcmVhc3NlbWJseSByZW1vdmVkIG9sZGVzdCAiCiAJCSAgICAgICAiZnJhZ21lbnQgZW50cnkgKGlkeD0lZCBhZ2U9JWx1IHNlcT0lZCBsYXN0X2ZyYWc9JWQgIgogCQkgICAgICAgImFkZHIxPSVwTSBhZGRyMj0lcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZHgsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgaWR4LAogCQkgICAgICAgamlmZmllcyAtIGVudHJ5LT5maXJzdF9mcmFnX3RpbWUsIGVudHJ5LT5zZXEsCiAJCSAgICAgICBlbnRyeS0+bGFzdF9mcmFnLCBoZHItPmFkZHIxLCBoZHItPmFkZHIyKTsKICNlbmRpZgpAQCAtMTM5OCw2ICsxMzk3LDIxIEBACiAJCSAgICAgaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCiAJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCiAJCXJldHVybiAtRUFDQ0VTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2llZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJaW50IHJlczsKKworCXJlcyA9IGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBmYyk7CisJaWYgKHVubGlrZWx5KHJlcykpCisJCXJldHVybiByZXM7CisKIAlpZiAocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApKSB7CiAJCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfdW5pY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgogCQkJICAgICByeC0+a2V5KSkKQEAgLTE0MjQsNyArMTQzOCw2IEBACiBfX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHJ4LT5zZGF0YTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAogCWlmIChpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKQEAgLTE0MzYsNyArMTQ0OSw3IEBACiAJICAgICAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYgc2RhdGEtPnUubWdkLnVzZV80YWRkcikpKQogCQlyZXR1cm4gLTE7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2RhdGFfdG9fODAyMyhyeC0+c2tiLCBkZXYtPmRldl9hZGRyLCBzZGF0YS0+dmlmLnR5cGUpOworCXJldHVybiBpZWVlODAyMTFfZGF0YV90b184MDIzKHJ4LT5za2IsIHNkYXRhLT52aWYuYWRkciwgc2RhdGEtPnZpZi50eXBlKTsKIH0KIAogLyoKQEAgLTE0NTMsNyArMTQ2Niw3IEBACiAJICogb2Ygd2hldGhlciB0aGUgZnJhbWUgd2FzIGVuY3J5cHRlZCBvciBub3QuCiAJICovCiAJaWYgKGVoZHItPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUEFFKSAmJgotCSAgICAoY29tcGFyZV9ldGhlcl9hZGRyKGVoZHItPmhfZGVzdCwgcngtPnNkYXRhLT5kZXYtPmRldl9hZGRyKSA9PSAwIHx8CisJICAgIChjb21wYXJlX2V0aGVyX2FkZHIoZWhkci0+aF9kZXN0LCByeC0+c2RhdGEtPnZpZi5hZGRyKSA9PSAwIHx8CiAJICAgICBjb21wYXJlX2V0aGVyX2FkZHIoZWhkci0+aF9kZXN0LCBwYWVfZ3JvdXBfYWRkcikgPT0gMCkpCiAJCXJldHVybiB0cnVlOwogCkBAIC0xNDcyLDcgKzE0ODUsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2IsICp4bWl0X3NrYjsKIAlzdHJ1Y3QgZXRoaGRyICplaGRyID0gKHN0cnVjdCBldGhoZHIgKikgcngtPnNrYi0+ZGF0YTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKmRzdGE7CkBAIC0xNDk1LDggKzE1MDcsOCBAQAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNsb25lICIKIAkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKLQkJCWRzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNrYi0+ZGF0YSk7Ci0JCQlpZiAoZHN0YSAmJiBkc3RhLT5zZGF0YS0+ZGV2ID09IGRldikgeworCQkJZHN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgc2tiLT5kYXRhKTsKKwkJCWlmIChkc3RhKSB7CiAJCQkJLyoKIAkJCQkgKiBUaGUgZGVzdGluYXRpb24gc3RhdGlvbiBpcyBhc3NvY2lhdGVkIHRvCiAJCQkJICogdGhpcyBBUCAoaW4gdGhpcyBWTEFOKSwgc28gc2VuZCB0aGUgZnJhbWUKQEAgLTE1MTIsNyArMTUyNCw3IEBACiAJaWYgKHNrYikgewogCQlpbnQgYWxpZ24gX19tYXliZV91bnVzZWQ7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UKSB8fCAhZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykKKyNpZm5kZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAkJLyoKIAkJICogJ2FsaWduJyB3aWxsIG9ubHkgdGFrZSB0aGUgdmFsdWVzIDAgb3IgMiBoZXJlCiAJCSAqIHNpbmNlIGFsbCBmcmFtZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGFsaWduZWQKQEAgLTE1NTYsMTYgKzE1NjgsMTAgQEAKIGllZWU4MDIxMV9yeF9oX2Ftc2R1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ4LT5zZGF0YS0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwotCXUxNiBldGhlcnR5cGU7Ci0JdTggKnBheWxvYWQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2IsICpmcmFtZSA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwotCWludCByZW1haW5pbmcsIGVycjsKLQl1OCBkc3RbRVRIX0FMRU5dOwotCXU4IHNyY1tFVEhfQUxFTl07CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBmcmFtZV9saXN0OwogCiAJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaXNfZGF0YShmYykpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CkBAIC0xNTc2LDk0ICsxNTgyLDM0IEBACiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JZXJyID0gX19pZWVlODAyMTFfZGF0YV90b184MDIzKHJ4KTsKLQlpZiAodW5saWtlbHkoZXJyKSkKKwlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgIHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCSAgICAhcngtPnNkYXRhLT51LnZsYW4uc3RhKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCSAgICAoKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCSAgICAgIHJ4LT5zZGF0YS0+dS52bGFuLnN0YSkgfHwKKwkgICAgIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgICByeC0+c2RhdGEtPnUubWdkLnVzZV80YWRkcikpKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCXNrYi0+ZGV2ID0gZGV2OworCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZnJhbWVfbGlzdCk7CiAKLQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWllZWU4MDIxMV9hbXNkdV90b184MDIzcyhza2IsICZmcmFtZV9saXN0LCBkZXYtPmRldl9hZGRyLAorCQkJCSByeC0+c2RhdGEtPnZpZi50eXBlLAorCQkJCSByeC0+bG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAotCS8qIHNraXAgdGhlIHdyYXBwaW5nIGhlYWRlciAqLwotCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQlpZiAoIWV0aCkKLQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7Ci0KLQl3aGlsZSAoc2tiICE9IGZyYW1lKSB7Ci0JCXU4IHBhZGRpbmc7Ci0JCV9fYmUxNiBsZW4gPSBldGgtPmhfcHJvdG87Ci0JCXVuc2lnbmVkIGludCBzdWJmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBudG9ocyhsZW4pOwotCi0JCXJlbWFpbmluZyA9IHNrYi0+bGVuOwotCQltZW1jcHkoZHN0LCBldGgtPmhfZGVzdCwgRVRIX0FMRU4pOwotCQltZW1jcHkoc3JjLCBldGgtPmhfc291cmNlLCBFVEhfQUxFTik7Ci0KLQkJcGFkZGluZyA9ICgoNCAtIHN1YmZyYW1lX2xlbikgJiAweDMpOwotCQkvKiB0aGUgbGFzdCBNU0RVIGhhcyBubyBwYWRkaW5nICovCi0JCWlmIChzdWJmcmFtZV9sZW4gPiByZW1haW5pbmcpCi0JCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQotCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0JCS8qIGlmIGxhc3Qgc3ViZnJhbWUgcmV1c2Ugc2tiICovCi0JCWlmIChyZW1haW5pbmcgPD0gc3ViZnJhbWVfbGVuICsgcGFkZGluZykKLQkJCWZyYW1lID0gc2tiOwotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBBbGxvY2F0ZSBhbmQgcmVzZXJ2ZSB0d28gYnl0ZXMgbW9yZSBmb3IgcGF5bG9hZAotCQkJICogYWxpZ25tZW50IHNpbmNlIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSBpcyAxNC4KLQkJCSAqLwotCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKAotCQkJCUFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKwotCQkJCXN1YmZyYW1lX2xlbiArIDIpOwotCi0JCQlpZiAoZnJhbWUgPT0gTlVMTCkKLQkJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQotCQkJc2tiX3Jlc2VydmUoZnJhbWUsCi0JCQkJICAgIEFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKLQkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAotCQkJCW50b2hzKGxlbikpOwotCi0JCQlldGggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVsbChza2IsIG50b2hzKGxlbikgKwotCQkJCQkJCXBhZGRpbmcpOwotCQkJaWYgKCFldGgpIHsKLQkJCQlkZXZfa2ZyZWVfc2tiKGZyYW1lKTsKLQkJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQkJCX0KLQkJfQotCi0JCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihmcmFtZSk7Ci0JCWZyYW1lLT5kZXYgPSBkZXY7Ci0JCWZyYW1lLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7Ci0JCXJ4LT5za2IgPSBmcmFtZTsKLQotCQlwYXlsb2FkID0gZnJhbWUtPmRhdGE7Ci0JCWV0aGVydHlwZSA9IChwYXlsb2FkWzZdIDw8IDgpIHwgcGF5bG9hZFs3XTsKLQotCQlpZiAobGlrZWx5KChjb21wYXJlX2V0aGVyX2FkZHIocGF5bG9hZCwgcmZjMTA0Ml9oZWFkZXIpID09IDAgJiYKLQkJCSAgICBldGhlcnR5cGUgIT0gRVRIX1BfQUFSUCAmJiBldGhlcnR5cGUgIT0gRVRIX1BfSVBYKSB8fAotCQkJICAgY29tcGFyZV9ldGhlcl9hZGRyKHBheWxvYWQsCi0JCQkJCSAgICAgIGJyaWRnZV90dW5uZWxfaGVhZGVyKSA9PSAwKSkgewotCQkJLyogcmVtb3ZlIFJGQzEwNDIgb3IgQnJpZGdlLVR1bm5lbAotCQkJICogZW5jYXBzdWxhdGlvbiBhbmQgcmVwbGFjZSBFdGhlclR5cGUgKi8KLQkJCXNrYl9wdWxsKGZyYW1lLCA2KTsKLQkJCW1lbWNweShza2JfcHVzaChmcmFtZSwgRVRIX0FMRU4pLCBzcmMsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShza2JfcHVzaChmcmFtZSwgRVRIX0FMRU4pLCBkc3QsIEVUSF9BTEVOKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweShza2JfcHVzaChmcmFtZSwgc2l6ZW9mKF9fYmUxNikpLAotCQkJICAgICAgICZsZW4sIHNpemVvZihfX2JlMTYpKTsKLQkJCW1lbWNweShza2JfcHVzaChmcmFtZSwgRVRIX0FMRU4pLCBzcmMsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShza2JfcHVzaChmcmFtZSwgRVRIX0FMRU4pLCBkc3QsIEVUSF9BTEVOKTsKLQkJfQorCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZmcmFtZV9saXN0KSkgeworCQlyeC0+c2tiID0gX19za2JfZGVxdWV1ZSgmZnJhbWVfbGlzdCk7CiAKIAkJaWYgKCFpZWVlODAyMTFfZnJhbWVfYWxsb3dlZChyeCwgZmMpKSB7Ci0JCQlpZiAoc2tiID09IGZyYW1lKSAvKiBsYXN0IGZyYW1lICovCi0JCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7Ci0JCQlkZXZfa2ZyZWVfc2tiKGZyYW1lKTsKKwkJCWRldl9rZnJlZV9za2IocngtPnNrYik7CiAJCQljb250aW51ZTsKIAkJfQorCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByeC0+c2tiLT5sZW47CiAKIAkJaWVlZTgwMjExX2RlbGl2ZXJfc2tiKHJ4KTsKIAl9CkBAIC0xNzIxLDcgKzE2NjcsNyBAQAogCiAJLyogRnJhbWUgaGFzIHJlYWNoZWQgZGVzdGluYXRpb24uICBEb24ndCBmb3J3YXJkICovCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjMpID09IDApCisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsIGhkci0+YWRkcjMpID09IDApCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAogCW1lc2hfaGRyLT50dGwtLTsKQEAgLTE3MzgsMTAgKzE2ODQsMTAgQEAKIAogCQkJaWYgKCFmd2Rfc2tiICYmIG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBjbG9uZSBtZXNoIGZyYW1lXG4iLAotCQkJCQkJICAgc2RhdGEtPmRldi0+bmFtZSk7CisJCQkJCQkgICBzZGF0YS0+bmFtZSk7CiAKIAkJCWZ3ZF9oZHIgPSAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGZ3ZF9za2ItPmRhdGE7Ci0JCQltZW1jcHkoZndkX2hkci0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCQltZW1jcHkoZndkX2hkci0+YWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZndkX3NrYik7CiAJCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7CkBAIC0xNzg4LDYgKzE3MzQsNyBAQAogaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTE4MTksNiArMTc2NiwxMyBAQAogCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcngtPnNrYi0+bGVuOwogCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCisJICAgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDAgJiYgbG9jYWwtPnBzX3NkYXRhKSB7CisJCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCSBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOworCX0KKwogCWllZWU4MDIxMV9kZWxpdmVyX3NrYihyeCk7CiAKIAlyZXR1cm4gUlhfUVVFVUVEOwpAQCAtMTg3Miw3ICsxODI2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyKSAhPSAwKSB7CisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5kYSwgc2RhdGEtPnZpZi5hZGRyKSAhPSAwKSB7CiAJCS8qIE5vdCB0byBvd24gdW5pY2FzdCBhZGRyZXNzICovCiAJCXJldHVybjsKIAl9CkBAIC0xODk2LDcgKzE4NTAsNyBAQAogCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KHJlc3AsIDAsIDI0KTsKIAltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHJlc3AtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShyZXNwLT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwpAQCAtMTkxNiwyMyArMTg3MCwyNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwogCWludCBsZW4gPSByeC0+c2tiLT5sZW47CiAKIAlpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAotCWlmICghcngtPnN0YSkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkvKiBkcm9wIHRvbyBzbWFsbCBmcmFtZXMgKi8KKwlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisKKwlpZiAoIXJ4LT5zdGEgJiYgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUMpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKLQlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCi0JLyogYWxsIGNhdGVnb3JpZXMgd2UgY3VycmVudGx5IGhhbmRsZSBoYXZlIGFjdGlvbl9jb2RlICovCi0JaWYgKGxlbiA8IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKyAxKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZF9tZ210KHJ4KSkKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKIAlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7CiAJY2FzZSBXTEFOX0NBVEVHT1JZX0JBQ0s6CkBAIC0xOTQ1LDcgKzE5MDEsMTEgQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCiAJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgogCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWJyZWFrOworCisJCS8qIHZlcmlmeSBhY3Rpb25fY29kZSBpcyBwcmVzZW50ICovCisJCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsgMSkKKwkJCWJyZWFrOwogCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUpIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVE6CkBAIC0xOTUzLDQ1ICsxOTEzLDQ5IEBACiAJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxKSkpCiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAkJCWllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3QobG9jYWwsIHJ4LT5zdGEsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKKwkJCWdvdG8gaGFuZGxlZDsKIAkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSkpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCQlicmVhazsKIAkJCWllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3Jlc3AobG9jYWwsIHJ4LT5zdGEsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKKwkJCWdvdG8gaGFuZGxlZDsKIAkJY2FzZSBXTEFOX0FDVElPTl9ERUxCQToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCiAJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKSkKLQkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJCWJyZWFrOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc2RhdGEsIHJ4LT5zdGEsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKKwkJCWdvdG8gaGFuZGxlZDsKIAkJfQogCQlicmVhazsKIAljYXNlIFdMQU5fQ0FURUdPUllfU1BFQ1RSVU1fTUdNVDoKIAkJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQlicmVhazsKIAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJYnJlYWs7CisKKwkJLyogdmVyaWZ5IGFjdGlvbl9jb2RlIGlzIHByZXNlbnQgKi8KKwkJaWYgKGxlbiA8IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKyAxKQorCQkJYnJlYWs7CiAKIAkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50LmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9NU1JfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudCkpKQotCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQkJYnJlYWs7CiAJCQlpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc2RhdGEsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKKwkJCWdvdG8gaGFuZGxlZDsKIAkJY2FzZSBXTEFOX0FDVElPTl9TUENUX0NITF9TV0lUQ0g6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwogCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoKSkpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCQlicmVhazsKIAogCQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQkJYnJlYWs7CiAKIAkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQotCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQkJYnJlYWs7CiAKIAkJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IpOwogCQl9CkBAIC0xOTk5LDMwICsxOTYzLDY0IEBACiAJY2FzZSBXTEFOX0NBVEVHT1JZX1NBX1FVRVJZOgogCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwogCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKSkKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQlicmVhazsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuc2FfcXVlcnkuYWN0aW9uKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVRVUVTVDoKIAkJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJCWJyZWFrOwogCQkJaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHNkYXRhLCBtZ210LCBsZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVTUE9OU0U6Ci0JCQkvKgotCQkJICogU0EgUXVlcnkgcmVzcG9uc2UgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBpbiBBUCBtb2RlCi0JCQkgKiBhbmQgaXQgaXMgcHJvY2Vzc2VkIGluIHVzZXIgc3BhY2UuCi0JCQkgKi8KLQkJCXJldHVybiBSWF9DT05USU5VRTsKKwkJCWdvdG8gaGFuZGxlZDsKIAkJfQogCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBkbyBub3QgcHJvY2VzcyByZWplY3RlZCBhY3Rpb24gZnJhbWVzICovCi0JCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAmIDB4ODApCi0JCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCi0JCXJldHVybiBSWF9DT05USU5VRTsKIAl9CiAKLQlyeC0+c3RhLT5yeF9wYWNrZXRzKys7CisJLyoKKwkgKiBGb3IgQVAgbW9kZSwgaG9zdGFwZCBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYW55IGFjdGlvbgorCSAqIGZyYW1lcyB0aGF0IHdlIGRpZG4ndCBoYW5kbGUsIGluY2x1ZGluZyByZXR1cm5pbmcgdW5rbm93bgorCSAqIG9uZXMuIEZvciBhbGwgb3RoZXIgbW9kZXMgd2Ugd2lsbCByZXR1cm4gdGhlbSB0byB0aGUgc2VuZGVyLAorCSAqIHNldHRpbmcgdGhlIDB4ODAgYml0IGluIHRoZSBhY3Rpb24gY2F0ZWdvcnksIGFzIHJlcXVpcmVkIGJ5CisJICogODAyLjExLTIwMDcgNy4zLjEuMTEuCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCS8qCisJICogR2V0dGluZyBoZXJlIG1lYW5zIHRoZSBrZXJuZWwgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUKKwkgKiBpdCwgYnV0IG1heWJlIHVzZXJzcGFjZSBkb2VzIC4uLiBpbmNsdWRlIHJldHVybmVkIGZyYW1lcworCSAqIHNvIHVzZXJzcGFjZSBjYW4gcmVnaXN0ZXIgZm9yIHRob3NlIHRvIGtub3cgd2hldGhlciBvbmVzCisJICogaXQgdHJhbnNtaXR0ZWQgd2VyZSBwcm9jZXNzZWQgb3IgcmV0dXJuZWQuCisJICovCisJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LT5za2IpOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIGNmZzgwMjExX3J4X2FjdGlvbihyeC0+c2RhdGEtPmRldiwgc3RhdHVzLT5mcmVxLAorCQkJICAgICAgIHJ4LT5za2ItPmRhdGEsIHJ4LT5za2ItPmxlbiwKKwkJCSAgICAgICBHRlBfQVRPTUlDKSkKKwkJZ290byBoYW5kbGVkOworCisJLyogZG8gbm90IHJldHVybiByZWplY3RlZCBhY3Rpb24gZnJhbWVzICovCisJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ICYgMHg4MCkKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisKKwluc2tiID0gc2tiX2NvcHlfZXhwYW5kKHJ4LT5za2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgMCwKKwkJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAobnNrYikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKW5za2ItPmRhdGE7CisKKwkJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgfD0gMHg4MDsKKwkJbWVtY3B5KG1nbXQtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+c2EsIHJ4LT5zZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKKworCQltZW1zZXQobnNrYi0+Y2IsIDAsIHNpemVvZihuc2tiLT5jYikpOworCisJCWllZWU4MDIxMV90eF9za2IocngtPnNkYXRhLCBuc2tiKTsKKwl9CisKKyBoYW5kbGVkOgorCWlmIChyeC0+c3RhKQorCQlyeC0+c3RhLT5yeF9wYWNrZXRzKys7CiAJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQpAQCAtMjAzMSwxMyArMjAyOSwxNyBAQAogaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKKwlpZWVlODAyMTFfcnhfcmVzdWx0IHJ4czsKIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKLQlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZF9tZ210KHJ4KSkKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisKKwlyeHMgPSBpZWVlODAyMTFfd29ya19yeF9tZ210KHJ4LT5zZGF0YSwgcngtPnNrYik7CisJaWYgKHJ4cyAhPSBSWF9DT05USU5VRSkKKwkJcmV0dXJuIHJ4czsKIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CkBAIC0yMTQzLDcgKzIxNDUsNyBAQAogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKQEAgLTIyODAsNyArMjI4Miw3IEBACiAJCWlmICghYnNzaWQgJiYgIXNkYXRhLT51Lm1nZC51c2VfNGFkZHIpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKCFtdWx0aWNhc3QgJiYKLQkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyMSkgIT0gMCkgeworCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwgaGRyLT5hZGRyMSkgIT0gMCkgewogCQkJaWYgKCEoc2RhdGEtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTIyOTcsNyArMjI5OSw3IEBACiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKIAkJfSBlbHNlIGlmICghbXVsdGljYXN0ICYmCi0JCQkgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQkgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAogCQkJCQkgICAgICBoZHItPmFkZHIxKSAhPSAwKSB7CiAJCQlpZiAoIShzZGF0YS0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCQlyZXR1cm4gMDsKQEAgLTIzMDgsMTMgKzIzMTAsMTMgQEAKIAkJCQlyYXRlX2lkeCA9IDA7IC8qIFRPRE86IEhUIHJhdGVzICovCiAJCQllbHNlCiAJCQkJcmF0ZV9pZHggPSBzdGF0dXMtPnJhdGVfaWR4OwotCQkJcngtPnN0YSA9IGllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIGJzc2lkLCBoZHItPmFkZHIyLAotCQkJCUJJVChyYXRlX2lkeCkpOworCQkJcngtPnN0YSA9IGllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIGJzc2lkLAorCQkJCQloZHItPmFkZHIyLCBCSVQocmF0ZV9pZHgpLCBHRlBfQVRPTUlDKTsKIAkJfQogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCWlmICghbXVsdGljYXN0ICYmCi0JCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAogCQkJCSAgICAgICBoZHItPmFkZHIxKSAhPSAwKSB7CiAJCQlpZiAoIShzZGF0YS0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCQlyZXR1cm4gMDsKQEAgLTIzMjUsMTEgKzIzMjcsMTEgQEAKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJaWYgKCFic3NpZCkgewotCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAogCQkJCQkgICAgICAgaGRyLT5hZGRyMSkpCiAJCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwKLQkJCQkJc2RhdGEtPmRldi0+ZGV2X2FkZHIpKSB7CisJCQkJCXNkYXRhLT52aWYuYWRkcikpIHsKIAkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMjM2OCw2ICsyMzcwLDggQEAKIAlpbnQgcHJlcGFyZXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7CisJc3RydWN0IHN0YV9pbmZvICpzdGEsICp0bXA7CisJYm9vbCBmb3VuZF9zdGEgPSBmYWxzZTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAltZW1zZXQoJnJ4LCAwLCBzaXplb2YocngpKTsKQEAgLTIzODQsNjggKzIzODgsODcgQEAKIAlpZWVlODAyMTFfcGFyc2VfcW9zKCZyeCk7CiAJaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoJnJ4KTsKIAotCXJ4LnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMik7Ci0JaWYgKHJ4LnN0YSkKLQkJcnguc2RhdGEgPSByeC5zdGEtPnNkYXRhOworCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCWZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItPmFkZHIyLCBzdGEsIHRtcCkgeworCQkJcnguc3RhID0gc3RhOworCQkJZm91bmRfc3RhID0gdHJ1ZTsKKwkJCXJ4LnNkYXRhID0gc3RhLT5zZGF0YTsKIAotCWlmIChyeC5zZGF0YSAmJiBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhyeC5zZGF0YSwgJnJ4LCBoZHIpOwotCQlpZiAocHJlcGFyZXMpIHsKKwkJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKKwkJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMocnguc2RhdGEsICZyeCwgaGRyKTsKKwkJCWlmIChwcmVwYXJlcykgeworCQkJCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKKwkJCQkJaWYgKHJ4LmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKQorCQkJCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsICZyeCk7CisJCQkJfSBlbHNlCisJCQkJCXByZXYgPSByeC5zZGF0YTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWZvdW5kX3N0YSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8CisJCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzCisJCQkgKiBub3QgYWxzbyBmb3IgdGhlIHByZXZpb3VzIG9uZSB3ZSBoYW5kbGUgdGhhdCBhZnRlcgorCQkJICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKKwkJCSAqLworCisJCQlpZiAoIXByZXYpIHsKKwkJCQlwcmV2ID0gc2RhdGE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJ4LnN0YSA9IHN0YV9pbmZvX2dldF9ic3MocHJldiwgaGRyLT5hZGRyMik7CisKKwkJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKKwkJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMocHJldiwgJnJ4LCBoZHIpOworCisJCQlpZiAoIXByZXBhcmVzKQorCQkJCWdvdG8gbmV4dDsKKwogCQkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikgeworCQkJCXJ4LnNkYXRhID0gcHJldjsKIAkJCQlpZiAocnguZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCi0JCQkJCWllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoaGRyLCAmcngpOwotCQkJfSBlbHNlCi0JCQkJcHJldiA9IHJ4LnNkYXRhOwotCQl9Ci0JfSBlbHNlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJY29udGludWU7CisJCQkJCWllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoaGRyLAorCQkJCQkJCQkJJnJ4KTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CiAKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIGZyYW1lIHdhcyBkZXN0aW5lZCBmb3IgdGhlIHByZXZpb3VzIGludGVyZmFjZQorCQkJICogc28gaW52b2tlIFJYIGhhbmRsZXJzIGZvciBpdAorCQkJICovCiAKLQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwotCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCAmcngsIGhkcik7Ci0KLQkJaWYgKCFwcmVwYXJlcykKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKLQkJCXJ4LnNkYXRhID0gc2RhdGE7Ci0JCQlpZiAocnguZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCi0JCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsICZyeCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0J3Mgbm90Ci0JCSAqIGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXIgdGhlCi0JCSAqIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKLQkJICovCi0KLQkJaWYgKCFwcmV2KSB7CisJCQlza2JfbmV3ID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghc2tiX25ldykgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNvcHkgIgorCQkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZSBmb3IgJXNcbiIsCisJCQkJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksCisJCQkJCSAgICAgICBwcmV2LT5uYW1lKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHByZXYsICZyeCwgc2tiX25ldywgcmF0ZSk7CituZXh0OgogCQkJcHJldiA9IHNkYXRhOwotCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBmcmFtZSB3YXMgZGVzdGluZWQgZm9yIHRoZSBwcmV2aW91cyBpbnRlcmZhY2UKLQkJICogc28gaW52b2tlIFJYIGhhbmRsZXJzIGZvciBpdAotCQkgKi8KKwkJaWYgKHByZXYpIHsKKwkJCXJ4LnN0YSA9IHN0YV9pbmZvX2dldF9ic3MocHJldiwgaGRyLT5hZGRyMik7CiAKLQkJc2tiX25ldyA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghc2tiX25ldykgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBjb3B5ICIKLQkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZSBmb3IgJXNcbiIsCi0JCQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKLQkJCQkgICAgICAgcHJldi0+ZGV2LT5uYW1lKTsKLQkJCWNvbnRpbnVlOworCQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOworCQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhwcmV2LCAmcngsIGhkcik7CisKKwkJCWlmICghcHJlcGFyZXMpCisJCQkJcHJldiA9IE5VTEw7CiAJCX0KLQkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhwcmV2LCAmcngsIHNrYl9uZXcsIHJhdGUpOwotCQlwcmV2ID0gc2RhdGE7CiAJfQogCWlmIChwcmV2KQogCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHByZXYsICZyeCwgc2tiLCByYXRlKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IGJjMTdjZjcuLmI4MjJkY2UgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtMTIsNyArMTIsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CkBAIC0yOSwxNiArMjgsMTkgQEAKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAogCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKIHsKLQlyZXR1cm4gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwKLQkJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwKLQkJCQkJCQkgICAgICBmcmVxKSwKLQkJCQkJYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAotCQkJCQkwLCAwKTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOworCisJY2JzcyA9IGNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LAorCQkJCWllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEpLAorCQkJCWJzc2lkLCBzc2lkLCBzc2lkX2xlbiwgMCwgMCk7CisJaWYgKCFjYnNzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHZvaWQgKiljYnNzLT5wcml2OwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2ZyZWUoc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKiljYnNzOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3MtPnByaXY7CiAKIAlrZnJlZShic3NfbWVzaF9pZChic3MpKTsKIAlrZnJlZShic3NfbWVzaF9jZmcoYnNzKSk7CkBAIC00Nyw3ICs0OSwyNiBAQAogdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKIHsKLQljZmc4MDIxMV9wdXRfYnNzKChzdHJ1Y3QgY2ZnODAyMTFfYnNzICopYnNzKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuOworCWNmZzgwMjExX3B1dF9ic3MoY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KSk7Cit9CisKK3N0YXRpYyBib29sIGlzX3VhcHNkX3N1cHBvcnRlZChzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMpCit7CisJdTggcW9zX2luZm87CisKKwlpZiAoZWxlbXMtPndtbV9pbmZvICYmIGVsZW1zLT53bW1faW5mb19sZW4gPT0gNworCSAgICAmJiBlbGVtcy0+d21tX2luZm9bNV0gPT0gMSkKKwkJcW9zX2luZm8gPSBlbGVtcy0+d21tX2luZm9bNl07CisJZWxzZSBpZiAoZWxlbXMtPndtbV9wYXJhbSAmJiBlbGVtcy0+d21tX3BhcmFtX2xlbiA9PSAyNAorCQkgJiYgZWxlbXMtPndtbV9wYXJhbVs1XSA9PSAxKQorCQlxb3NfaW5mbyA9IGVsZW1zLT53bW1fcGFyYW1bNl07CisJZWxzZQorCQkvKiBubyB2YWxpZCB3bW0gaW5mb3JtYXRpb24gb3IgcGFyYW1ldGVyIGVsZW1lbnQgZm91bmQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHFvc19pbmZvICYgSUVFRTgwMjExX1dNTV9JRV9BUF9RT1NJTkZPX1VBUFNEOwogfQogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCkBAIC01OSw2ICs4MCw3IEBACiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgYm9vbCBiZWFjb24pCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBjbGVuOwogCXMzMiBzaWduYWwgPSAwOwpAQCAtNjgsMTMgKzkwLDE0IEBACiAJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCiAJCXNpZ25hbCA9IChyeF9zdGF0dXMtPnNpZ25hbCAqIDEwMCkgLyBsb2NhbC0+aHcubWF4X3NpZ25hbDsKIAotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGNoYW5uZWwsCi0JCQkJCQltZ210LCBsZW4sIHNpZ25hbCwgR0ZQX0FUT01JQyk7CisJY2JzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBjaGFubmVsLAorCQkJCQkgbWdtdCwgbGVuLCBzaWduYWwsIEdGUF9BVE9NSUMpOwogCi0JaWYgKCFic3MpCisJaWYgKCFjYnNzKQogCQlyZXR1cm4gTlVMTDsKIAotCWJzcy0+Y2Jzcy5mcmVlX3ByaXYgPSBpZWVlODAyMTFfcnhfYnNzX2ZyZWU7CisJY2Jzcy0+ZnJlZV9wcml2ID0gaWVlZTgwMjExX3J4X2Jzc19mcmVlOworCWJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAogCS8qIHNhdmUgdGhlIEVSUCB2YWx1ZSBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBhdCBhc3NvY2lhdGlvbiB0aW1lICovCiAJaWYgKGVsZW1zLT5lcnBfaW5mbyAmJiBlbGVtcy0+ZXJwX2luZm9fbGVuID49IDEpIHsKQEAgLTg4LDEwICsxMTEsNiBAQAogCQlic3MtPmR0aW1fcGVyaW9kID0gdGltX2llLT5kdGltX3BlcmlvZDsKIAl9CiAKLQkvKiBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgYnVnZ3kgQVAvbm8gVElNIGVsZW1lbnQgKi8KLQlpZiAoYnNzLT5kdGltX3BlcmlvZCA9PSAwKQotCQlic3MtPmR0aW1fcGVyaW9kID0gMTsKLQogCWJzcy0+c3VwcF9yYXRlc19sZW4gPSAwOwogCWlmIChlbGVtcy0+c3VwcF9yYXRlcykgewogCQljbGVuID0gSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIC0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKQEAgLTExMSw2ICsxMzAsNyBAQAogCX0KIAogCWJzcy0+d21tX3VzZWQgPSBlbGVtcy0+d21tX3BhcmFtIHx8IGVsZW1zLT53bW1faW5mbzsKKwlic3MtPnVhcHNkX3N1cHBvcnRlZCA9IGlzX3VhcHNkX3N1cHBvcnRlZChlbGVtcyk7CiAKIAlpZiAoIWJlYWNvbikKIAkJYnNzLT5sYXN0X3Byb2JlX3Jlc3AgPSBqaWZmaWVzOwpAQCAtMTQ3LDcgKzE2Nyw3IEBACiAJcHJlc3AgPSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYyk7CiAJaWYgKHByZXNwKSB7CiAJCS8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCi0JCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCQlwcmVzcCA9IHRydWU7CkBAIC0yMjAsODIgKzI0MCw5IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBpbmZvcm0gQVAgdGhhdCB3ZSB3aWxsIGdvIHRvIHNsZWVwIHNvIHRoYXQgaXQgd2lsbCBidWZmZXIgdGhlIGZyYW1lcwotICogd2hpbGUgd2Ugc2NhbgotICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQlsb2NhbC0+c2Nhbl9wc19lbmFibGVkID0gZmFsc2U7Ci0KLQkvKiBGSVhNRTogd2hhdCB0byBkbyB3aGVuIGxvY2FsLT5wc3BvbGxpbmcgaXMgdHJ1ZT8gKi8KLQotCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKLQkJbG9jYWwtPnNjYW5fcHNfZW5hYmxlZCA9IHRydWU7Ci0JCWxvY2FsLT5ody5jb25mLmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKLQl9Ci0KLQlpZiAoIShsb2NhbC0+c2Nhbl9wc19lbmFibGVkKSB8fAotCSAgICAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykpCi0JCS8qCi0JCSAqIElmIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIG5vIG5lZWQgdG8gc2VuZCBhIG51bGxmdW5jCi0JCSAqIGZyYW1lIGJlY2F1c2UgQVAga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuIEJ1dCBpZiB0aGUKLQkJICogaGFyZHdhcmUgaXMgY3JlYXRpbmcgdGhlIG51bGxmdW5jIGZyYW1lIGZvciBwb3dlciBzYXZlCi0JCSAqIHN0YXR1cyAoaWUuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBub3QKLQkJICogZW5hYmxlZCkgYW5kIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIHRoZSBmaXJtd2FyZSBqdXN0Ci0JCSAqIHNlbnQgYSBudWxsIGZyYW1lIHdpdGggcG93ZXIgc2F2ZSBkaXNhYmxlZC4gU28gd2UgbmVlZAotCQkgKiB0byBzZW5kIGEgbmV3IG51bGxmdW5jIGZyYW1lIHRvIGluZm9ybSB0aGUgQVAgdGhhdCB3ZQotCQkgKiBhcmUgYWdhaW4gc2xlZXBpbmcuCi0JCSAqLwotCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOwotfQotCi0vKiBpbmZvcm0gQVAgdGhhdCB3ZSBhcmUgYXdha2UgYWdhaW4sIHVubGVzcyBwb3dlciBzYXZlIGlzIGVuYWJsZWQgKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3BzX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQlpZiAoIWxvY2FsLT5wc19zZGF0YSkKLQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKLQllbHNlIGlmIChsb2NhbC0+c2Nhbl9wc19lbmFibGVkKSB7Ci0JCS8qCi0JCSAqIEluICFJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgY2FzZSB0aGUgaGFyZHdhcmUKLQkJICogd2lsbCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCB0aGUgcG93ZXJzYXZlIGJpdCBzZXQKLQkJICogZXZlbiB0aG91Z2ggdGhlIEFQIGFscmVhZHkga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuCi0JCSAqIFRoaXMgY291bGQgYmUgYXZvaWRlZCBieSBzZW5kaW5nIGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyCi0JCSAqIHNhdmUgYml0IGRpc2FibGVkIGJlZm9yZSBlbmFibGluZyB0aGUgcG93ZXIgc2F2ZSwgYnV0Ci0JCSAqIHRoaXMgZG9lc24ndCBnYWluIGFueXRoaW5nLgotCQkgKgotCQkgKiBXaGVuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBlbmFibGVkLCBubyBuZWVkCi0JCSAqIHRvIHNlbmQgYSBudWxsZnVuYyBmcmFtZSBiZWNhdXNlIEFQIGFscmVhZHkga25vd3MgdGhhdAotCQkgKiB3ZSBhcmUgc2xlZXBpbmcsIGxldCdzIGp1c3QgZW5hYmxlIHBvd2VyIHNhdmUgbW9kZSBpbgotCQkgKiBoYXJkd2FyZS4KLQkJICovCi0JCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwotCX0gZWxzZSBpZiAobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgewotCQkvKgotCQkgKiBJZiBJRUVFODAyMTFfQ09ORl9QUyB3YXMgbm90IHNldCBhbmQgdGhlIGR5bmFtaWNfcHNfdGltZXIKLQkJICogaGFkIGJlZW4gcnVubmluZyBiZWZvcmUgbGVhdmluZyB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsCi0JCSAqIHJlc3RhcnQgdGhlIHRpbWVyIG5vdyBhbmQgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHRvIGluZm9ybQotCQkgKiB0aGUgQVAgdGhhdCB3ZSBhcmUgYXdha2UuCi0JCSAqLwotCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOwotCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQl9Ci19Ci0KIHZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJYm9vbCB3YXNfaHdfc2NhbjsKIAogCW11dGV4X2xvY2soJmxvY2FsLT5zY2FuX210eCk7CkBAIC0zNDQsNDEgKzI5MSwxOSBAQAogCiAJZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKLQkJCQlpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHNkYXRhKTsKLQkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwotCi0JCS8qIHJlLWVuYWJsZSBiZWFjb25pbmcgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KAotCQkJCXNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7Ci0JfQotCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihsb2NhbCwgdHJ1ZSk7CiAKICBkb25lOgogCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CiAJaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIAlpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogCWllZWU4MDIxMV9tZXNoX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQpOwogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFydF9zd19zY2FuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCiAJLyoKIAkgKiBIYXJkd2FyZS9kcml2ZXIgZG9lc24ndCBzdXBwb3J0IGh3X3NjYW4sIHNvIHVzZSBzb2Z0d2FyZQogCSAqIHNjYW5uaW5nIGluc3RlYWQuIEZpcnN0IHNlbmQgYSBudWxsZnVuYyBmcmFtZSB3aXRoIHBvd2VyIHNhdmUKQEAgLTM5NCwzMyArMzE5LDE1IEBACiAJICovCiAJZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQkvKiBkaXNhYmxlIGJlYWNvbmluZyAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCi0JCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKLQotCQkvKgotCQkgKiBvbmx5IGhhbmRsZSBub24tU1RBIGludGVyZmFjZXMgaGVyZSwgU1RBIGludGVyZmFjZXMKLQkJICogYXJlIGhhbmRsZWQgaW4gdGhlIHNjYW4gc3RhdGUgbWFjaGluZQotCQkgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX2JlYWNvbmluZyhsb2NhbCk7CiAKIAlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9ERUNJU0lPTjsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7CiAKKwlkcnZfZmx1c2gobG9jYWwsIGZhbHNlKTsKKwogCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKIAotCS8qIFRPRE86IHN0YXJ0IHNjYW4gYXMgc29vbiBhcyBhbGwgbnVsbGZ1bmMgZnJhbWVzIGFyZSBBQ0tlZCAqLwogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywKIAkJCQkgICAgICZsb2NhbC0+c2Nhbl93b3JrLAogCQkJCSAgICAgSUVFRTgwMjExX0NIQU5ORUxfVElNRSk7CkBAIC00MzMsMTcgKzM0MCwxMyBAQAogCQkJCSAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWludCByYzsKIAogCWlmIChsb2NhbC0+c2Nhbl9yZXEpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAocmVxICE9IGxvY2FsLT5pbnRfc2Nhbl9yZXEgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgIWxpc3RfZW1wdHkoJmlmbWdkLT53b3JrX2xpc3QpKSB7Ci0JCS8qIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSB3b3JrIGl0J3MgZG9pbmcgdG8gZmluaXNoL3RpbWUgb3V0ICovCi0JCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmxvY2FsLT53b3JrX2xpc3QpKSB7CisJCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHRvIGZpbmlzaC90aW1lIG91dCAqLwogCQlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAJCWxvY2FsLT5zY2FuX3NkYXRhID0gc2RhdGE7CiAJCXJldHVybiAwOwpAQCAtNDY4LDYgKzM3MSwxNCBAQAogCQlsb2NhbC0+aHdfc2Nhbl9yZXEtPmllID0gaWVzOwogCiAJCWxvY2FsLT5od19zY2FuX2JhbmQgPSAwOworCisJCS8qCisJCSAqIEFmdGVyIGFsbG9jYXRpbmcgbG9jYWwtPmh3X3NjYW5fcmVxLCB3ZSBtdXN0CisJCSAqIGdvIHRocm91Z2ggdW50aWwgaWVlZTgwMjExX3ByZXBfaHdfc2NhbigpLCBzbworCQkgKiBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNoYW5nZWQgaGVyZSBhbmQgbGVhdmUKKwkJICogdGhpcyBmdW5jdGlvbiBlYXJseSBtdXN0IG5vdCBnbyBhZnRlciB0aGlzCisJCSAqIGFsbG9jYXRpb24uCisJCSAqLwogCX0KIAogCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKQEAgLTQ3NywxNSArMzg4LDE2IEBACiAJCV9fc2V0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKIAllbHNlCiAJCV9fc2V0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKKwogCS8qCiAJICogS2lja2luZyBvZmYgdGhlIHNjYW4gbmVlZCBub3QgYmUgcHJvdGVjdGVkLAogCSAqIG9ubHkgdGhlIHNjYW4gdmFyaWFibGUgc3R1ZmYsIHNpbmNlIG5vdwogCSAqIGxvY2FsLT5zY2FuX3JlcSBpcyBhc3NpZ25lZCBhbmQgb3RoZXIgY2FsbGVycwogCSAqIHdpbGwgYWJvcnQgdGhlaXIgc2NhbiBhdHRlbXB0cy4KIAkgKgotCSAqIFRoaXMgYXZvaWRzIGdldHRpbmcgYSBzY2FuX210eCAtPiBpZmxpc3RfbXR4Ci0JICogZGVwZW5kZW5jeSwgc28gdGhhdCB0aGUgc2NhbiBjb21wbGV0ZWQgY2FsbHMKLQkgKiBoYXZlIG1vcmUgbG9ja2luZyBmcmVlZG9tLgorCSAqIFRoaXMgYXZvaWRzIHRvbyBtYW55IGxvY2tpbmcgZGVwZW5kZW5jaWVzCisJICogc28gdGhhdCB0aGUgc2NhbiBjb21wbGV0ZWQgY2FsbHMgaGF2ZSBtb3JlCisJICogbG9ja2luZyBmcmVlZG9tLgogCSAqLwogCiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKQEAgLTUyOCw3ICs0NDAsNyBAQAogCS8qIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBTVEEgaW50ZXJmYWNlIGlzIGFzc29jaWF0ZWQgKi8KIAltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKQEAgLTU2Niw1NiArNDc4LDM1IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9sZWF2ZV9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCS8qCi0JICogbm90aWZ5IHRoZSBBUCBhYm91dCB1cyBsZWF2aW5nIHRoZSBjaGFubmVsIGFuZCBzdG9wIGFsbCBTVEEgaW50ZXJmYWNlcwotCSAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCi0JCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24obG9jYWwpOwogCiAJX19zZXRfYml0KFNDQU5fT0ZGX0NIQU5ORUwsICZsb2NhbC0+c2Nhbm5pbmcpOwogCisJLyoKKwkgKiBXaGF0IGlmIHRoZSBudWxsZnVuYyBmcmFtZXMgZGlkbid0IGFycml2ZT8KKwkgKi8KKwlkcnZfZmx1c2gobG9jYWwsIGZhbHNlKTsKKwlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCisJCSpuZXh0X2RlbGF5ID0gMDsKKwllbHNlCisJCSpuZXh0X2RlbGF5ID0gSFogLyAxMDsKKwogCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhbm5lbCB0byBiZSBzY2FubmVkICovCi0JKm5leHRfZGVsYXkgPSBIWiAvIDEwOwogCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9lbnRlcl9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCiAJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9wZXJhdGluZyBjaGFubmVsICovCiAJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IE5VTEw7CiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOwogCiAJLyoKLQkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGJlaW5nIGJhY2sgYW5kIHJlc3RhcnQgYWxsIFNUQSBpbnRlcmZhY2VzCisJICogT25seSByZS1lbmFibGUgc3RhdGlvbiBtb2RlIGludGVyZmFjZSBub3c7IGJlYWNvbmluZyB3aWxsIGJlCisJICogcmUtZW5hYmxlZCBvbmNlIHRoZSBmdWxsIHNjYW4gaGFzIGJlZW4gY29tcGxldGVkLgogCSAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJY29udGludWU7Ci0KLQkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQotCQkJCWllZWU4MDIxMV9zY2FuX3BzX2Rpc2FibGUoc2RhdGEpOwotCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihsb2NhbCwgZmFsc2UpOwogCiAJX19jbGVhcl9iaXQoU0NBTl9PRkZfQ0hBTk5FTCwgJmxvY2FsLT5zY2FubmluZyk7CiAKQEAgLTcyOSw3ICs2MjAsNyBAQAogCS8qCiAJICogQXZvaWQgcmUtc2NoZWR1bGluZyB3aGVuIHRoZSBzZGF0YSBpcyBnb2luZyBhd2F5LgogCSAqLwotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKSB7CiAJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3LCB0cnVlKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwppbmRleCBhYTc0M2E4Li43NzMzZjY2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKKysrIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCkBAIC0zNSw3ICszNSw3IEBACiAKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkJIm1lYXN1cmVtZW50IHJlcG9ydCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCQkJIm1lYXN1cmVtZW50IHJlcG9ydCBmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC00Myw3ICs0Myw3IEBACiAJbXNyX3JlcG9ydCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtc3JfcmVwb3J0LCAwLCAyNCk7CiAJbWVtY3B5KG1zcl9yZXBvcnQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtc3JfcmVwb3J0LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobXNyX3JlcG9ydC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShtc3JfcmVwb3J0LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKIAltc3JfcmVwb3J0LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IDcxZjM3MGQuLjIxMWM0NzUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0zMiw0OSArMzIsMzMgQEAKICAqIGZvciBmYXN0ZXIgbG9va3VwIGFuZCBhIGxpc3QgZm9yIGl0ZXJhdGlvbi4gVGhleSBhcmUgbWFuYWdlZCB1c2luZwogICogUkNVLCBpLmUuIGFjY2VzcyB0byB0aGUgbGlzdCBhbmQgaGFzaCB0YWJsZSBpcyBwcm90ZWN0ZWQgYnkgUkNVLgogICoKLSAqIFVwb24gYWxsb2NhdGluZyBhIFNUQSBpbmZvIHN0cnVjdHVyZSB3aXRoIHN0YV9pbmZvX2FsbG9jKCksIHRoZSBjYWxsZXIgb3ducwotICogdGhhdCBzdHJ1Y3R1cmUuIEl0IG11c3QgdGhlbiBlaXRoZXIgZGVzdHJveSBpdCB1c2luZyBzdGFfaW5mb19kZXN0cm95KCkKLSAqICh3aGljaCBpcyBwcmV0dHkgdXNlbGVzcykgb3IgaW5zZXJ0IGl0IGludG8gdGhlIGhhc2ggdGFibGUgdXNpbmcKLSAqIHN0YV9pbmZvX2luc2VydCgpIHdoaWNoIGRlbW90ZXMgdGhlIHJlZmVyZW5jZSBmcm9tIG93bmVyc2hpcCB0byBhIHJlZ3VsYXIKLSAqIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlOyBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgcHJvdGVjdGlvbiBieSBhbgotICogUkNVIGNyaXRpY2FsIHNlY3Rpb24gdGhlIHJlZmVyZW5jZSBpcyBpbnN0YW50bHkgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCB0aGUKLSAqIGNhbGxlciBtYXkgbm90IGRvIG11Y2ggd2l0aCB0aGUgU1RBIGluZm8gYmVmb3JlIGluc2VydGluZyBpdCwgaW4gcGFydGljdWxhciwKLSAqIGl0IG1heSBub3Qgc3RhcnQgYW55IG1lc2ggcGVlciBsaW5rIG1hbmFnZW1lbnQgb3IgYWRkIGVuY3J5cHRpb24ga2V5cy4KKyAqIFVwb24gYWxsb2NhdGluZyBhIFNUQSBpbmZvIHN0cnVjdHVyZSB3aXRoIHN0YV9pbmZvX2FsbG9jKCksIHRoZSBjYWxsZXIKKyAqIG93bnMgdGhhdCBzdHJ1Y3R1cmUuIEl0IG11c3QgdGhlbiBpbnNlcnQgaXQgaW50byB0aGUgaGFzaCB0YWJsZSB1c2luZworICogZWl0aGVyIHN0YV9pbmZvX2luc2VydCgpIG9yIHN0YV9pbmZvX2luc2VydF9yY3UoKTsgb25seSBpbiB0aGUgbGF0dGVyCisgKiBjYXNlICh3aGljaCBhY3F1aXJlcyBhbiByY3UgcmVhZCBzZWN0aW9uIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQorICogd2l0aGluIG9uZSkgd2lsbCB0aGUgcG9pbnRlciBzdGlsbCBiZSB2YWxpZCBhZnRlciB0aGUgY2FsbC4gTm90ZSB0aGF0CisgKiB0aGUgY2FsbGVyIG1heSBub3QgZG8gbXVjaCB3aXRoIHRoZSBTVEEgaW5mbyBiZWZvcmUgaW5zZXJ0aW5nIGl0LCBpbgorICogcGFydGljdWxhciwgaXQgbWF5IG5vdCBzdGFydCBhbnkgbWVzaCBwZWVyIGxpbmsgbWFuYWdlbWVudCBvciBhZGQKKyAqIGVuY3J5cHRpb24ga2V5cy4KICAqCiAgKiBXaGVuIHRoZSBpbnNlcnRpb24gZmFpbHMgKHN0YV9pbmZvX2luc2VydCgpKSByZXR1cm5zIG5vbi16ZXJvKSwgdGhlCiAgKiBzdHJ1Y3R1cmUgd2lsbCBoYXZlIGJlZW4gZnJlZWQgYnkgc3RhX2luZm9faW5zZXJ0KCkhCiAgKgotICogc3RhIGVudHJpZXMgYXJlIGFkZGVkIGJ5IG1hYzgwMjExIHdoZW4geW91IGVzdGFibGlzaCBhIGxpbmsgd2l0aCBhCisgKiBTdGF0aW9uIGVudHJpZXMgYXJlIGFkZGVkIGJ5IG1hYzgwMjExIHdoZW4geW91IGVzdGFibGlzaCBhIGxpbmsgd2l0aCBhCiAgKiBwZWVyLiBUaGlzIG1lYW5zIGRpZmZlcmVudCB0aGluZ3MgZm9yIHRoZSBkaWZmZXJlbnQgdHlwZSBvZiBpbnRlcmZhY2VzCiAgKiB3ZSBzdXBwb3J0LiBGb3IgYSByZWd1bGFyIHN0YXRpb24gdGhpcyBtZWFuIHdlIGFkZCB0aGUgQVAgc3RhIHdoZW4gd2UKICAqIHJlY2VpdmUgYW4gYXNzb2NhdGlvbiByZXNwb25zZSBmcm9tIHRoZSBBUC4gRm9yIElCU1MgdGhpcyBvY2N1cnMgd2hlbgotICogd2UgcmVjZWl2ZSBhIHByb2JlIHJlc3BvbnNlIG9yIGEgYmVhY29uIGZyb20gdGFyZ2V0IElCU1MgbmV0d29yay4gRm9yCi0gKiBXRFMgd2UgYWRkIHRoZSBzdGEgZm9yIHRoZSBwZWVyIGltZWRpYXRlbHkgdXBvbiBkZXZpY2Ugb3Blbi4gV2hlbiB1c2luZwotICogQVAgbW9kZSB3ZSBhZGQgc3RhdGlvbnMgZm9yIGVhY2ggcmVzcGVjdGl2ZSBzdGF0aW9uIHVwb24gcmVxdWVzdCBmcm9tCi0gKiB1c2Vyc3BhY2UgdGhyb3VnaCBubDgwMjExLgorICogZ2V0IHRvIGtub3cgYWJvdXQgYSBwZWVyIG9uIHRoZSBzYW1lIElCU1MuIEZvciBXRFMgd2UgYWRkIHRoZSBzdGEgZm9yCisgKiB0aGUgcGVlciBpbWVkaWF0ZWx5IHVwb24gZGV2aWNlIG9wZW4uIFdoZW4gdXNpbmcgQVAgbW9kZSB3ZSBhZGQgc3RhdGlvbnMKKyAqIGZvciBlYWNoIHJlc3BlY3RpdmUgc3RhdGlvbiB1cG9uIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBubDgwMjExLgogICoKLSAqIEJlY2F1c2UgdGhlcmUgYXJlIGRlYnVnZnMgZW50cmllcyBmb3IgZWFjaCBzdGF0aW9uLCBhbmQgYWRkaW5nIHRob3NlCi0gKiBtdXN0IGJlIGFibGUgdG8gc2xlZXAsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gInBpbiIgYSBzdGF0aW9uIGVudHJ5LAotICogdGhhdCBtZWFucyBpdCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIHRhYmxlIGJ1dCBub3QgYmUgZnJlZWQuCi0gKiBTZWUgdGhlIGNvbW1lbnQgaW4gX19zdGFfaW5mb191bmxpbmsoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgdGhpcyBpcwotICogYW4gaW50ZXJuYWwgY2FwYWJpbGl0eSBvbmx5LgorICogSW4gb3JkZXIgdG8gcmVtb3ZlIGEgU1RBIGluZm8gc3RydWN0dXJlLCB2YXJpb3VzIHN0YV9pbmZvX2Rlc3Ryb3lfKigpCisgKiBjYWxscyBhcmUgYXZhaWxhYmxlLgogICoKLSAqIEluIG9yZGVyIHRvIHJlbW92ZSBhIFNUQSBpbmZvIHN0cnVjdHVyZSwgdGhlIGNhbGxlciBuZWVkcyB0byBmaXJzdAotICogdW5saW5rIGl0IChzdGFfaW5mb191bmxpbmsoKSkgZnJvbSB0aGUgbGlzdCBhbmQgaGFzaCB0YWJsZXMgYW5kCi0gKiB0aGVuIGRlc3Ryb3kgaXQ7IHN0YV9pbmZvX2Rlc3Ryb3koKSB3aWxsIHdhaXQgZm9yIGFuIFJDVSBncmFjZSBwZXJpb2QKLSAqIHRvIGVsYXBzZSBiZWZvcmUgYWN0dWFsbHkgZnJlZWluZyBpdC4gRHVlIHRvIHRoZSBwaW5uaW5nIGFuZCB0aGUKLSAqIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIGNhbGxlcnMgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgc2FtZSBTVEEgaW5mbyBhdAotICogdGhlIHNhbWUgdGltZSwgc3RhX2luZm9fdW5saW5rKCkgY2FuIGNsZWFyIHRoZSBTVEEgaW5mbyBwb2ludGVyIGl0IGlzCi0gKiBwYXNzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgU1RBIGluZm8gaXMgb3duZWQgYnkgc29tZWJvZHkgZWxzZSBub3cuCi0gKgotICogSWYgc3RhX2luZm9fdW5saW5rKCkgZGlkIG5vdCBjbGVhciB0aGUgcG9pbnRlciB0aGVuIHRoZSBjYWxsZXIgb3ducwotICogdGhlIFNUQSBpbmZvIHN0cnVjdHVyZSBub3cgYW5kIGlzIHJlc3BvbnNpYmxlIG9mIGRlc3Ryb3lpbmcgaXQgd2l0aAotICogYSBjYWxsIHRvIHN0YV9pbmZvX2Rlc3Ryb3koKS4KLSAqCi0gKiBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZXJlIGlzIG5vIGNvbmNlcHQgb2Ygb3duZXJzaGlwIG9uIGEgU1RBIGVudHJ5LAotICogZWFjaCBzdHJ1Y3R1cmUgaXMgb3duZWQgYnkgdGhlIGdsb2JhbCBoYXNoIHRhYmxlL2xpc3QgdW50aWwgaXQgaXMKLSAqIHJlbW92ZWQuIEFsbCB1c2VycyBvZiB0aGUgc3RydWN0dXJlIG5lZWQgdG8gYmUgUkNVIHByb3RlY3RlZCBzbyB0aGF0Ci0gKiB0aGUgc3RydWN0dXJlIHdvbid0IGJlIGZyZWVkIGJlZm9yZSB0aGV5IGFyZSBkb25lIHVzaW5nIGl0LgorICogVGhlcmUgaXMgbm8gY29uY2VwdCBvZiBvd25lcnNoaXAgb24gYSBTVEEgZW50cnksIGVhY2ggc3RydWN0dXJlIGlzCisgKiBvd25lZCBieSB0aGUgZ2xvYmFsIGhhc2ggdGFibGUvbGlzdCB1bnRpbCBpdCBpcyByZW1vdmVkLiBBbGwgdXNlcnMgb2YKKyAqIHRoZSBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBSQ1UgcHJvdGVjdGVkIHNvIHRoYXQgdGhlIHN0cnVjdHVyZSB3b24ndCBiZQorICogZnJlZWQgYmVmb3JlIHRoZXkgYXJlIGRvbmUgdXNpbmcgaXQuCiAgKi8KIAogLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+c3RhX2xvY2sgKi8KQEAgLTEwMywxMyArODcsMzcgQEAKIH0KIAogLyogcHJvdGVjdGVkIGJ5IFJDVSAqLwotc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IHU4ICphZGRyKQorc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBjb25zdCB1OCAqYWRkcikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAogCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goYWRkcildKTsKIAl3aGlsZSAoc3RhKSB7Ci0JCWlmIChtZW1jbXAoc3RhLT5zdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICBtZW1jbXAoc3RhLT5zdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJCQlicmVhazsKKwkJc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+aG5leHQpOworCX0KKwlyZXR1cm4gc3RhOworfQorCisvKgorICogR2V0IHN0YSBpbmZvIGVpdGhlciBmcm9tIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlCisgKiBvciBmcm9tIG9uZSBvZiBpdHMgdmxhbnMKKyAqLworc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXRfYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwlzdGEgPSByY3VfZGVyZWZlcmVuY2UobG9jYWwtPnN0YV9oYXNoW1NUQV9IQVNIKGFkZHIpXSk7CisJd2hpbGUgKHN0YSkgeworCQlpZiAoKHN0YS0+c2RhdGEgPT0gc2RhdGEgfHwKKwkJICAgICBzdGEtPnNkYXRhLT5ic3MgPT0gc2RhdGEtPmJzcykgJiYKKwkJICAgIG1lbWNtcChzdGEtPnN0YS5hZGRyLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJCWJyZWFrOwogCQlzdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLT5obmV4dCk7CiAJfQpAQCAtMTYxLDEwMSArMTY5LDYgQEAKIAlrZnJlZShzdGEpOwogfQogCi12b2lkIHN0YV9pbmZvX2Rlc3Ryb3koc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlpZiAoIXN0YSkKLQkJcmV0dXJuOwotCi0JbG9jYWwgPSBzdGEtPmxvY2FsOwotCi0JY2FuY2VsX3dvcmtfc3luYygmc3RhLT5kcnZfdW5ibG9ja193ayk7Ci0KLQlyYXRlX2NvbnRyb2xfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHN0YSk7Ci0JaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdGEpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKQotCQltZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBXZSBoYXZlIG9ubHkgdW5saW5rZWQgdGhlIGtleSwgYW5kIGFjdHVhbGx5IGRlc3Ryb3lpbmcgaXQKLQkgKiBtYXkgbWVhbiBpdCBpcyByZW1vdmVkIGZyb20gaGFyZHdhcmUgd2hpY2ggcmVxdWlyZXMgdGhhdAotCSAqIHRoZSBrZXktPnN0YSBwb2ludGVyIGlzIHN0aWxsIHZhbGlkLCBzbyBmbHVzaCB0aGUga2V5IHRvZG8KLQkgKiBsaXN0IGhlcmUuCi0JICoKLQkgKiBpZWVlODAyMTFfa2V5X3RvZG8oKSB3aWxsIHN5bmNocm9uaXplX3JjdSgpIHNvIGFmdGVyIHRoaXMKLQkgKiBub3RoaW5nIGNhbiByZWZlcmVuY2UgdGhpcyBzdGEgc3RydWN0IGFueSBtb3JlLgotCSAqLwotCWllZWU4MDIxMV9rZXlfdG9kbygpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKQotCQlkZWxfdGltZXJfc3luYygmc3RhLT5wbGlua190aW1lcik7Ci0jZW5kaWYKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+cHNfdHhfYnVmKSkgIT0gTlVMTCkgewotCQlsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQtLTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzdGEtPnR4X2ZpbHRlcmVkKSkgIT0gTlVMTCkKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgewotCQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7Ci0JCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKLQotCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXRpZF9yeCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV07Ci0JCS8qIE1ha2Ugc3VyZSB0aW1lciB3b24ndCBmcmVlIHRoZSB0aWRfcnggc3RydWN0LCBzZWUgYmVsb3cgKi8KLQkJaWYgKHRpZF9yeCkKLQkJCXRpZF9yeC0+c2h1dGRvd24gPSB0cnVlOwotCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JCS8qCi0JCSAqIE91dHNpZGUgc3BpbmxvY2sgLSBzaHV0ZG93biBpcyB0cnVlIG5vdyBzbyB0aGF0IHRoZSB0aW1lcgotCQkgKiB3b24ndCBmcmVlIHRpZF9yeCwgd2UgaGF2ZSB0byBkbyB0aGF0IG5vdy4gQ2FuJ3QgbGV0IHRoZQotCQkgKiB0aW1lciBkbyBpdCBiZWNhdXNlIHdlIGhhdmUgdG8gc3luYyB0aGUgdGltZXIgb3V0c2lkZSB0aGUKLQkJICogbG9jayB0aGF0IGl0IHRha2VzIGl0c2VsZi4KLQkJICovCi0JCWlmICh0aWRfcngpIHsKLQkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfcngtPnNlc3Npb25fdGltZXIpOwotCQkJa2ZyZWUodGlkX3J4KTsKLQkJfQotCi0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gZG8gc3VjaCBjb21wbGljYXRpb25zIGZvciBUWCBhZ2cgc2Vzc2lvbnMsIHRoZQotCQkgKiBwYXRoIGxlYWRpbmcgdG8gZnJlZWluZyB0aGUgdGlkX3R4IHN0cnVjdCBnb2VzIHZpYSBhIGNhbGwKLQkJICogZnJvbSB0aGUgZHJpdmVyLCBhbmQgdGh1cyBuZWVkcyB0byBsb29rIHVwIHRoZSBzdGEgc3RydWN0Ci0JCSAqIGFnYWluLCB3aGljaCBjYW5ub3QgYmUgZm91bmQgd2hlbiB3ZSBnZXQgaGVyZS4gSGVuY2UsIHdlCi0JCSAqIGp1c3QgbmVlZCB0byBkZWxldGUgdGhlIHRpbWVyIGFuZCBmcmVlIHRoZSBhZ2dyZWdhdGlvbgotCQkgKiBpbmZvOyB3ZSB3b24ndCBiZSB0ZWxsaW5nIHRoZSBwZWVyIGFib3V0IGl0IHRoZW4gYnV0IHRoYXQKLQkJICogZG9lc24ndCBtYXR0ZXIgaWYgd2UncmUgbm90IHRhbGtpbmcgdG8gaXQgYWdhaW4gYW55d2F5LgotCQkgKi8KLQkJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXTsKLQkJaWYgKHRpZF90eCkgewotCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF90eC0+YWRkYmFfcmVzcF90aW1lcik7Ci0JCQkvKgotCQkJICogU1RBIHJlbW92ZWQgd2hpbGUgYWdncmVnYXRpb24gc2Vzc2lvbiBiZWluZwotCQkJICogc3RhcnRlZD8gQml0IG9kZCwgYnV0IHB1cmdlIGZyYW1lcyBhbnl3YXkuCi0JCQkgKi8KLQkJCXNrYl9xdWV1ZV9wdXJnZSgmdGlkX3R4LT5wZW5kaW5nKTsKLQkJCWtmcmVlKHRpZF90eCk7Ci0JCX0KLQl9Ci0KLQlfX3N0YV9pbmZvX2ZyZWUobG9jYWwsIHN0YSk7Ci19Ci0KLQogLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+c3RhX2xvY2sgKi8KIHN0YXRpYyB2b2lkIHN0YV9pbmZvX2hhc2hfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCkBAIC0zNTIsNyArMjY1LDkzIEBACiAJcmV0dXJuIHN0YTsKIH0KIAotaW50IHN0YV9pbmZvX2luc2VydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3N0YXRpYyBpbnQgc3RhX2luZm9fZmluaXNoX2luc2VydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCXN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmbG9jYWwtPnN0YV9tdHgpKTsKKworCS8qIG5vdGlmeSBkcml2ZXIgKi8KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCSAgICAgdS5hcCk7CisJZXJyID0gZHJ2X3N0YV9hZGQobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEpOworCWlmIChlcnIpIHsKKwkJaWYgKCFhc3luYykKKwkJCXJldHVybiBlcnI7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFkZCBJQlNTIFNUQSAlcE0gdG8gZHJpdmVyICglZCkiCisJCQkJICAiIC0ga2VlcGluZyBpdCBhbnl3YXkuXG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIGVycik7CisJfSBlbHNlIHsKKwkJc3RhLT51cGxvYWRlZCA9IHRydWU7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwkJaWYgKGFzeW5jKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGaW5pc2hlZCBhZGRpbmcgSUJTUyBTVEEgJXBNXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgc3RhLT5zdGEuYWRkcik7CisjZW5kaWYKKwl9CisKKwlzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwlpZiAoIWFzeW5jKSB7CisJCWxvY2FsLT5udW1fc3RhKys7CisJCWxvY2FsLT5zdGFfZ2VuZXJhdGlvbisrOworCQlzbXBfbWIoKTsKKworCQkvKiBtYWtlIHRoZSBzdGF0aW9uIHZpc2libGUgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQlzdGFfaW5mb19oYXNoX2FkZChsb2NhbCwgc3RhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJfQorCisJbGlzdF9hZGQoJnN0YS0+bGlzdCwgJmxvY2FsLT5zdGFfbGlzdCk7CisKKwlpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0YSk7CisJcmF0ZV9jb250cm9sX2FkZF9zdGFfZGVidWdmcyhzdGEpOworCisJc2luZm8uZmlsbGVkID0gMDsKKwlzaW5mby5nZW5lcmF0aW9uID0gbG9jYWwtPnN0YV9nZW5lcmF0aW9uOworCWNmZzgwMjExX25ld19zdGEoc2RhdGEtPmRldiwgc3RhLT5zdGEuYWRkciwgJnNpbmZvLCBHRlBfS0VSTkVMKTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YV9pbmZvX2ZpbmlzaF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbC0+c3RhX3BlbmRpbmdfbGlzdCkpIHsKKwkJc3RhID0gbGlzdF9maXJzdF9lbnRyeSgmbG9jYWwtPnN0YV9wZW5kaW5nX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7CisJCWxpc3RfZGVsKCZzdGEtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKworCQlzdGFfaW5mb19maW5pc2hfaW5zZXJ0KHN0YSwgdHJ1ZSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3RhX2luZm9fZmluaXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHN0YV9maW5pc2hfd29yayk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJc3RhX2luZm9fZmluaXNoX3BlbmRpbmcobG9jYWwpOworCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworfQorCitpbnQgc3RhX2luZm9faW5zZXJ0X3JjdShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkgX19hY3F1aXJlcyhSQ1UpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTM2NCwzOCArMzYzLDg5IEBACiAJICogc29tZXRoaW5nIGluc2VydHMgYSBTVEEgKG9uIG9uZSBDUFUpIHdpdGhvdXQgaG9sZGluZyB0aGUgUlROTAogCSAqIGFuZCBhbm90aGVyIENQVSB0dXJucyBvZmYgdGhlIG5ldCBkZXZpY2UuCiAJICovCi0JaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSkgeworCWlmICh1bmxpa2VseSghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKSkgewogCQllcnIgPSAtRU5FVERPV047CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQlpZiAoV0FSTl9PTihjb21wYXJlX2V0aGVyX2FkZHIoc3RhLT5zdGEuYWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpID09IDAgfHwKKwlpZiAoV0FSTl9PTihjb21wYXJlX2V0aGVyX2FkZHIoc3RhLT5zdGEuYWRkciwgc2RhdGEtPnZpZi5hZGRyKSA9PSAwIHx8CiAJCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihzdGEtPnN0YS5hZGRyKSkpIHsKIAkJZXJyID0gLUVJTlZBTDsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAorCS8qCisJICogSW4gYWQtaG9jIG1vZGUsIHdlIHNvbWV0aW1lcyBuZWVkIHRvIGluc2VydCBzdGF0aW9ucworCSAqIGZyb20gdGFza2xldCBjb250ZXh0IGZyb20gdGhlIFJYIHBhdGguIFRvIGF2b2lkIHJhY2VzLAorCSAqIGFsd2F5cyBkbyBzbyBpbiB0aGF0IGNhc2UgLS0gc2VlIHRoZSBjb21tZW50IGJlbG93LgorCSAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQkvKiBjaGVjayBpZiBTVEEgZXhpc3RzIGFscmVhZHkgKi8KKwkJaWYgKHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIHN0YS0+c3RhLmFkZHIpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCWVyciA9IC1FRVhJU1Q7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJbG9jYWwtPm51bV9zdGErKzsKKwkJbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7CisJCXNtcF9tYigpOworCQlzdGFfaW5mb19oYXNoX2FkZChsb2NhbCwgc3RhKTsKKworCQlsaXN0X2FkZF90YWlsKCZzdGEtPmxpc3QsICZsb2NhbC0+c3RhX3BlbmRpbmdfbGlzdCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkZWQgSUJTUyBTVEEgJXBNXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBzdGEtPnN0YS5hZGRyKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLworCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+c3RhX2ZpbmlzaF93b3JrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE9uIGZpcnN0IGdsYW5jZSwgdGhpcyB3aWxsIGxvb2sgcmFjeSwgYmVjYXVzZSB0aGUgY29kZQorCSAqIGJlbG93IHRoaXMgcG9pbnQsIHdoaWNoIGluc2VydHMgYSBzdGF0aW9uIHdpdGggc2xlZXBpbmcsCisJICogdW5sb2NrcyB0aGUgc3RhX2xvY2sgYmV0d2VlbiBjaGVja2luZyBleGlzdGVuY2UgaW4gdGhlCisJICogaGFzaCB0YWJsZSBhbmQgaW5zZXJ0aW5nIGludG8gaXQuCisJICoKKwkgKiBIb3dldmVyLCBpdCBpcyBub3QgcmFjeSBhZ2FpbnN0IGl0c2VsZiBiZWNhdXNlIGl0IGtlZXBzCisJICogdGhlIG11dGV4IGxvY2tlZC4gSXQgc3RpbGwgc2VlbXMgdG8gcmFjZSBhZ2FpbnN0IHRoZQorCSAqIGFib3ZlIGNvZGUgdGhhdCBhdG9taWNhbGx5IGluc2VydHMgdGhlIHN0YXRpb24uLi4gVGhhdCwKKwkgKiBob3dldmVyLCBpcyBub3QgdHJ1ZSBiZWNhdXNlIHRoZSBhYm92ZSBjb2RlIGNhbiBvbmx5CisJICogYmUgaW52b2tlZCBmb3IgSUJTUyBpbnRlcmZhY2VzLCBhbmQgdGhlIGJlbG93IGNvZGUgd2lsbAorCSAqIG5vdCBiZSAtLSBhbmQgdGhlIHR3byBkbyBub3QgcmFjZSBhZ2FpbnN0IGVhY2ggb3RoZXIgYXMKKwkgKiB0aGUgaGFzaCB0YWJsZSBhbHNvIGtleXMgb2ZmIHRoZSBpbnRlcmZhY2UuCisJICovCisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCS8qIGNoZWNrIGlmIFNUQSBleGlzdHMgYWxyZWFkeSAqLwotCWlmIChzdGFfaW5mb19nZXQobG9jYWwsIHN0YS0+c3RhLmFkZHIpKSB7CisJaWYgKHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIHN0YS0+c3RhLmFkZHIpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWVyciA9IC1FRVhJU1Q7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQotCWxpc3RfYWRkKCZzdGEtPmxpc3QsICZsb2NhbC0+c3RhX2xpc3QpOwotCWxvY2FsLT5zdGFfZ2VuZXJhdGlvbisrOwotCWxvY2FsLT5udW1fc3RhKys7Ci0Jc3RhX2luZm9faGFzaF9hZGQobG9jYWwsIHN0YSk7CiAKLQkvKiBub3RpZnkgZHJpdmVyICovCi0JaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKLQkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAotCQkJCQkgICAgIHUuYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9BREQsICZzdGEtPnN0YSk7Ci0JCXNkYXRhID0gc3RhLT5zZGF0YTsKKwllcnIgPSBzdGFfaW5mb19maW5pc2hfaW5zZXJ0KHN0YSwgZmFsc2UpOworCWlmIChlcnIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwpAQCAtNDAzLDE4ICs0NTMsOSBAQAogCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHN0YS0+c3RhLmFkZHIpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0JLyoKLQkgKiBEZWJ1Z2ZzIGVudHJ5IGFkZGluZyBtaWdodCBzbGVlcCwgc28gc2NoZWR1bGUgcHJvY2VzcwotCSAqIGNvbnRleHQgdGFzayBmb3IgYWRkaW5nIGVudHJ5IGZvciBTVEFzIHRoYXQgZG8gbm90IHlldAotCSAqIGhhdmUgb25lLgotCSAqIE5PVEU6IGR1ZSB0byBhdXRvLWZyZWVpbmcgc2VtYW50aWNzIHRoaXMgbWF5IG9ubHkgYmUgZG9uZQotCSAqICAgICAgIGlmIHRoZSBpbnNlcnRpb24gaXMgc3VjY2Vzc2Z1bCEKLQkgKi8KLQlzY2hlZHVsZV93b3JrKCZsb2NhbC0+c3RhX2RlYnVnZnNfYWRkKTsKLSNlbmRpZgorCS8qIG1vdmUgcmVmZXJlbmNlIHRvIHJjdS1wcm90ZWN0ZWQgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzZGF0YSk7CkBAIC00MjYsNiArNDY3LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IHN0YV9pbmZvX2luc2VydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlpbnQgZXJyID0gc3RhX2luZm9faW5zZXJ0X3JjdShzdGEpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19ic3NfdGltX3NldChzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MsIHUxNiBhaWQpCiB7CiAJLyoKQEAgLTQ5NCwxMDggKzU0NCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgX19zdGFfaW5mb191bmxpbmsoc3RydWN0IHN0YV9pbmZvICoqc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKCpzdGEpLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9ICgqc3RhKS0+c2RhdGE7Ci0JLyoKLQkgKiBwdWxsIGNhbGxlcidzIHJlZmVyZW5jZSBpZiB3ZSdyZSBhbHJlYWR5IGdvbmUuCi0JICovCi0JaWYgKHN0YV9pbmZvX2hhc2hfZGVsKGxvY2FsLCAqc3RhKSkgewotCQkqc3RhID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgoKnN0YSktPmtleSkgewotCQlpZWVlODAyMTFfa2V5X2ZyZWUoKCpzdGEpLT5rZXkpOwotCQlXQVJOX09OKCgqc3RhKS0+a2V5KTsKLQl9Ci0KLQlsaXN0X2RlbCgmKCpzdGEpLT5saXN0KTsKLQkoKnN0YSktPmRlYWQgPSB0cnVlOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX3N0YV9mbGFncygqc3RhLAotCQkJCVdMQU5fU1RBX1BTX1NUQSB8IFdMQU5fU1RBX1BTX0RSSVZFUikpIHsKLQkJQlVHX09OKCFzZGF0YS0+YnNzKTsKLQotCQlhdG9taWNfZGVjKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKLQkJX19zdGFfaW5mb19jbGVhcl90aW1fYml0KHNkYXRhLT5ic3MsICpzdGEpOwotCX0KLQotCWxvY2FsLT5udW1fc3RhLS07Ci0JbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS52bGFuLnN0YSwgTlVMTCk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgewotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCi0JCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAotCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJCSAgICAgdS5hcCk7Ci0KLQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX1JFTU9WRSwKLQkJCSAgICAgICAmKCpzdGEpLT5zdGEpOwotCQlzZGF0YSA9ICgqc3RhKS0+c2RhdGE7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzZGF0YSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQkJZGVsX3RpbWVyKCYoKnN0YSktPnBsaW5rX3RpbWVyKTsKLSNlbmRpZgotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZW1vdmVkIFNUQSAlcE1cbiIsCi0JICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgKCpzdGEpLT5zdGEuYWRkcik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KLQotCS8qCi0JICogRmluYWxseSwgcHVsbCBjYWxsZXIncyByZWZlcmVuY2UgaWYgdGhlIFNUQSBpcyBwaW5uZWQgYnkgdGhlCi0JICogdGFzayB0aGF0IGlzIGFkZGluZyB0aGUgZGVidWdmcyBlbnRyaWVzLiBJbiB0aGF0IGNhc2UsIHdlCi0JICogbGVhdmUgdGhlIFNUQSAidG8gYmUgZnJlZWQiLgotCSAqCi0JICogVGhlIHJ1bGVzIGFyZSBub3QgdHJpdmlhbCwgYnV0IG5vdCB0b28gY29tcGxleCBlaXRoZXI6Ci0JICogICgxKSBwaW5fc3RhdHVzIGlzIG9ubHkgbW9kaWZpZWQgdW5kZXIgdGhlIHN0YV9sb2NrCi0JICogICgyKSBTVEFzIG1heSBvbmx5IGJlIHBpbm5lZCB1bmRlciB0aGUgUlROTCBzbyB0aGF0Ci0JICoJc3RhX2luZm9fZmx1c2goKSBpcyBndWFyYW50ZWVkIHRvIGFjdHVhbGx5IGRlc3Ryb3kKLQkgKglhbGwgU1RBcyB0aGF0IGFyZSBhY3RpdmUgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlLCB0aGlzCi0JICoJaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlCi0JICoJY291bGQgbm90aWZ5IGEgZHJpdmVyIHRoYXQgYW4gaW50ZXJmYWNlIGlzIGdvaW5nCi0JICoJYXdheSBhbmQgb25seSBhZnRlciB0aGF0ICghKSBub3RpZnkgaXQgYWJvdXQgYSBTVEEKLQkgKglvbiB0aGF0IGludGVyZmFjZSBnb2luZyBhd2F5LgotCSAqICAoMykgc3RhX2luZm9fZGVidWdmc19hZGRfd29yaygpIHdpbGwgc2V0IHRoZSBzdGF0dXMKLQkgKgl0byBQSU5ORUQgd2hlbiBpdCBmb3VuZCBhbiBpdGVtIHRoYXQgbmVlZHMgYSBuZXcKLQkgKglkZWJ1Z2ZzIGRpcmVjdG9yeSBjcmVhdGVkLiBJbiB0aGF0IGNhc2UsIHRoYXQgaXRlbQotCSAqCW11c3Qgbm90IGJlIGZyZWVkIGFsdGhvdWdoIGFsbCAqUkNVKiB1c2VycyBhcmUgZG9uZQotCSAqCXdpdGggaXQuIEhlbmNlLCB3ZSB0ZWxsIHRoZSBjYWxsZXIgb2YgX3VubGluaygpCi0JICoJdGhhdCB0aGUgaXRlbSBpcyBhbHJlYWR5IGdvbmUgKGFzIGNhbiBoYXBwZW4gd2hlbgotCSAqCXR3byB0YXNrcyB0cnkgdG8gdW5saW5rL2Rlc3Ryb3kgYXQgdGhlIHNhbWUgdGltZSkKLQkgKiAgKDQpIFdlIHNldCB0aGUgcGluX3N0YXR1cyB0byBERVNUUk9ZIGhlcmUgd2hlbiB3ZQotCSAqCWZpbmQgc3VjaCBhbiBpdGVtLgotCSAqICAoNSkgc3RhX2luZm9fZGVidWdmc19hZGRfd29yaygpIHdpbGwgcmVzZXQgdGhlIHBpbl9zdGF0dXMKLQkgKglmcm9tIFBJTk5FRCB0byBOT1JNQUwgd2hlbiBpdCBpcyBkb25lIHdpdGggdGhlIGl0ZW0sCi0JICoJYnV0IHdpbGwgY2hlY2sgZm9yIERFU1RST1kgYmVmb3JlIHJlc2V0dGluZyBpdCBpbgotCSAqCXdoaWNoIGNhc2UgaXQgd2lsbCBmcmVlIHRoZSBpdGVtLgotCSAqLwotCWlmICgoKnN0YSktPnBpbl9zdGF0dXMgPT0gU1RBX0lORk9fUElOX1NUQVRfUElOTkVEKSB7Ci0JCSgqc3RhKS0+cGluX3N0YXR1cyA9IFNUQV9JTkZPX1BJTl9TVEFUX0RFU1RST1k7Ci0JCSpzdGEgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotfQotCi12b2lkIHN0YV9pbmZvX3VubGluayhzdHJ1Y3Qgc3RhX2luZm8gKipzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoKnN0YSktPmxvY2FsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0JX19zdGFfaW5mb191bmxpbmsoc3RhKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBzdGFfaW5mb19idWZmZXJfZXhwaXJlZChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNjUyLDYgKzYwMCwxNzggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fc3RhX2luZm9fZGVzdHJveShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCwgaTsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlsb2NhbCA9IHN0YS0+bG9jYWw7CisJc2RhdGEgPSBzdGEtPnNkYXRhOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCXJldCA9IHN0YV9pbmZvX2hhc2hfZGVsKGxvY2FsLCBzdGEpOworCS8qIHRoaXMgbWlnaHQgc3RpbGwgYmUgdGhlIHBlbmRpbmcgbGlzdCAuLi4gd2hpY2ggaXMgZmluZSAqLworCWlmICghcmV0KQorCQlsaXN0X2RlbCgmc3RhLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHN0YS0+a2V5KSB7CisJCWllZWU4MDIxMV9rZXlfZnJlZShzdGEtPmtleSk7CisJCS8qCisJCSAqIFdlIGhhdmUgb25seSB1bmxpbmtlZCB0aGUga2V5LCBhbmQgYWN0dWFsbHkgZGVzdHJveWluZyBpdAorCQkgKiBtYXkgbWVhbiBpdCBpcyByZW1vdmVkIGZyb20gaGFyZHdhcmUgd2hpY2ggcmVxdWlyZXMgdGhhdAorCQkgKiB0aGUga2V5LT5zdGEgcG9pbnRlciBpcyBzdGlsbCB2YWxpZCwgc28gZmx1c2ggdGhlIGtleSB0b2RvCisJCSAqIGxpc3QgaGVyZS4KKwkJICoKKwkJICogaWVlZTgwMjExX2tleV90b2RvKCkgd2lsbCBzeW5jaHJvbml6ZV9yY3UoKSBzbyBhZnRlciB0aGlzCisJCSAqIG5vdGhpbmcgY2FuIHJlZmVyZW5jZSB0aGlzIHN0YSBzdHJ1Y3QgYW55IG1vcmUuCisJCSAqLworCQlpZWVlODAyMTFfa2V5X3RvZG8oKTsKKworCQlXQVJOX09OKHN0YS0+a2V5KTsKKwl9CisKKwlzdGEtPmRlYWQgPSB0cnVlOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX3N0YV9mbGFncyhzdGEsCisJCQkJV0xBTl9TVEFfUFNfU1RBIHwgV0xBTl9TVEFfUFNfRFJJVkVSKSkgeworCQlCVUdfT04oIXNkYXRhLT5ic3MpOworCisJCWF0b21pY19kZWMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOworCQlfX3N0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc2RhdGEtPmJzcywgc3RhKTsKKwl9CisKKwlsb2NhbC0+bnVtX3N0YS0tOworCWxvY2FsLT5zdGFfZ2VuZXJhdGlvbisrOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPnUudmxhbi5zdGEsIE5VTEwpOworCisJaWYgKHN0YS0+dXBsb2FkZWQpIHsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCQkgICAgIHUuYXApOworCQlkcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsICZzdGEtPnN0YSk7CisJCXNkYXRhID0gc3RhLT5zZGF0YTsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CisJCW1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc2RhdGEpOworCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlbW92ZWQgU1RBICVwTVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBzdGEtPnN0YS5hZGRyKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLworCWNhbmNlbF93b3JrX3N5bmMoJnN0YS0+ZHJ2X3VuYmxvY2tfd2spOworCisJcmF0ZV9jb250cm9sX3JlbW92ZV9zdGFfZGVidWdmcyhzdGEpOworCWllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RhKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc3RhLT5zZGF0YS0+dmlmKSkgeworCQltZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnN0YS0+cGxpbmtfdGltZXIpOworCX0KKyNlbmRpZgorCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT5wc190eF9idWYpKSAhPSBOVUxMKSB7CisJCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZC0tOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCX0KKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+dHhfZmlsdGVyZWQpKSAhPSBOVUxMKQorCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CisJCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9yeDsKKwkJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OworCisJCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJdGlkX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXTsKKwkJLyogTWFrZSBzdXJlIHRpbWVyIHdvbid0IGZyZWUgdGhlIHRpZF9yeCBzdHJ1Y3QsIHNlZSBiZWxvdyAqLworCQlpZiAodGlkX3J4KQorCQkJdGlkX3J4LT5zaHV0ZG93biA9IHRydWU7CisKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkJLyoKKwkJICogT3V0c2lkZSBzcGlubG9jayAtIHNodXRkb3duIGlzIHRydWUgbm93IHNvIHRoYXQgdGhlIHRpbWVyCisJCSAqIHdvbid0IGZyZWUgdGlkX3J4LCB3ZSBoYXZlIHRvIGRvIHRoYXQgbm93LiBDYW4ndCBsZXQgdGhlCisJCSAqIHRpbWVyIGRvIGl0IGJlY2F1c2Ugd2UgaGF2ZSB0byBzeW5jIHRoZSB0aW1lciBvdXRzaWRlIHRoZQorCQkgKiBsb2NrIHRoYXQgaXQgdGFrZXMgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHRpZF9yeCkgeworCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF9yeC0+c2Vzc2lvbl90aW1lcik7CisJCQlrZnJlZSh0aWRfcngpOworCQl9CisKKwkJLyoKKwkJICogTm8gbmVlZCB0byBkbyBzdWNoIGNvbXBsaWNhdGlvbnMgZm9yIFRYIGFnZyBzZXNzaW9ucywgdGhlCisJCSAqIHBhdGggbGVhZGluZyB0byBmcmVlaW5nIHRoZSB0aWRfdHggc3RydWN0IGdvZXMgdmlhIGEgY2FsbAorCQkgKiBmcm9tIHRoZSBkcml2ZXIsIGFuZCB0aHVzIG5lZWRzIHRvIGxvb2sgdXAgdGhlIHN0YSBzdHJ1Y3QKKwkJICogYWdhaW4sIHdoaWNoIGNhbm5vdCBiZSBmb3VuZCB3aGVuIHdlIGdldCBoZXJlLiBIZW5jZSwgd2UKKwkJICoganVzdCBuZWVkIHRvIGRlbGV0ZSB0aGUgdGltZXIgYW5kIGZyZWUgdGhlIGFnZ3JlZ2F0aW9uCisJCSAqIGluZm87IHdlIHdvbid0IGJlIHRlbGxpbmcgdGhlIHBlZXIgYWJvdXQgaXQgdGhlbiBidXQgdGhhdAorCQkgKiBkb2Vzbid0IG1hdHRlciBpZiB3ZSdyZSBub3QgdGFsa2luZyB0byBpdCBhZ2FpbiBhbnl3YXkuCisJCSAqLworCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldOworCQlpZiAodGlkX3R4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3R4LT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJCS8qCisJCQkgKiBTVEEgcmVtb3ZlZCB3aGlsZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGJlaW5nCisJCQkgKiBzdGFydGVkPyBCaXQgb2RkLCBidXQgcHVyZ2UgZnJhbWVzIGFueXdheS4KKwkJCSAqLworCQkJc2tiX3F1ZXVlX3B1cmdlKCZ0aWRfdHgtPnBlbmRpbmcpOworCQkJa2ZyZWUodGlkX3R4KTsKKwkJfQorCX0KKworCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3RhX2luZm9fZGVzdHJveV9hZGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGFkZHIpOworCXJldCA9IF9fc3RhX2luZm9fZGVzdHJveShzdGEpOworCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzdGFfaW5mb19kZXN0cm95X2FkZHJfYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICAgY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CisJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgYWRkcik7CisJcmV0ID0gX19zdGFfaW5mb19kZXN0cm95KHN0YSk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPnN0YV9tdHgpOworCisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIHZvaWQgc3RhX2luZm9fY2xlYW51cCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC02NzEsOTAgKzc5MSwxOCBAQAogCWFkZF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwKTsKIH0KIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0vKgotICogU2VlIGNvbW1lbnQgaW4gX19zdGFfaW5mb191bmxpbmssCi0gKiBjYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfbG9jay4KLSAqLwotc3RhdGljIHZvaWQgX19zdGFfaW5mb19waW4oc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0JV0FSTl9PTihzdGEtPnBpbl9zdGF0dXMgIT0gU1RBX0lORk9fUElOX1NUQVRfTk9STUFMKTsKLQlzdGEtPnBpbl9zdGF0dXMgPSBTVEFfSU5GT19QSU5fU1RBVF9QSU5ORUQ7Ci19Ci0KLS8qCi0gKiBTZWUgY29tbWVudCBpbiBfX3N0YV9pbmZvX3VubGluaywgcmV0dXJucyBzdGEgaWYgaXQKLSAqIG5lZWRzIHRvIGJlIGRlc3Ryb3llZC4KLSAqLwotc3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqX19zdGFfaW5mb191bnBpbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnJldCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzdGEtPmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCVdBUk5fT04oc3RhLT5waW5fc3RhdHVzICE9IFNUQV9JTkZPX1BJTl9TVEFUX0RFU1RST1kgJiYKLQkJc3RhLT5waW5fc3RhdHVzICE9IFNUQV9JTkZPX1BJTl9TVEFUX1BJTk5FRCk7Ci0JaWYgKHN0YS0+cGluX3N0YXR1cyA9PSBTVEFfSU5GT19QSU5fU1RBVF9ERVNUUk9ZKQotCQlyZXQgPSBzdGE7Ci0Jc3RhLT5waW5fc3RhdHVzID0gU1RBX0lORk9fUElOX1NUQVRfTk9STUFMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+bG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBzdGFfZGVidWdmc19hZGQpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBXZSBuZWVkIHRvIGtlZXAgdGhlIFJUTkwgYWNyb3NzIHRoZSB3aG9sZSBwaW5uZWQgc3RhdHVzLiAqLwotCXJ0bmxfbG9jaygpOwotCXdoaWxlICgxKSB7Ci0JCXN0YSA9IE5VTEw7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQkJLyoKLQkJCSAqIGRlYnVnZnMuYWRkX2hhc19ydW4gd2lsbCBiZSBzZXQgYnkKLQkJCSAqIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQgcmVnYXJkbGVzcwotCQkJICogb2Ygd2hhdCBlbHNlIGl0IGRvZXMuCi0JCQkgKi8KLQkJCWlmICghdG1wLT5kZWJ1Z2ZzLmFkZF9oYXNfcnVuKSB7Ci0JCQkJc3RhID0gdG1wOwotCQkJCV9fc3RhX2luZm9fcGluKHN0YSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKCFzdGEpCi0JCQlicmVhazsKLQotCQlpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0YSk7Ci0JCXJhdGVfY29udHJvbF9hZGRfc3RhX2RlYnVnZnMoc3RhKTsKLQotCQlzdGEgPSBfX3N0YV9pbmZvX3VucGluKHN0YSk7Ci0JCXN0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLX0KLSNlbmRpZgotCiB2b2lkIHN0YV9pbmZvX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5zdGFfbG9jayk7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPnN0YV9tdHgpOwogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+c3RhX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+c3RhX3BlbmRpbmdfbGlzdCk7CisJSU5JVF9XT1JLKCZsb2NhbC0+c3RhX2ZpbmlzaF93b3JrLCBzdGFfaW5mb19maW5pc2hfd29yayk7CiAKIAlzZXR1cF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwLCBzdGFfaW5mb19jbGVhbnVwLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpbG9jYWwpOwogCWxvY2FsLT5zdGFfY2xlYW51cC5leHBpcmVzID0KIAkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBX0lORk9fQ0xFQU5VUF9JTlRFUlZBTCk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwotCUlOSVRfV09SSygmbG9jYWwtPnN0YV9kZWJ1Z2ZzX2FkZCwgc3RhX2luZm9fZGVidWdmc19hZGRfd29yayk7Ci0jZW5kaWYKIH0KIAogaW50IHN0YV9pbmZvX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQpAQCAtNzY2LDE2ICs4MTQsNiBAQAogdm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWRlbF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBkZWJ1Z2ZzIGFkZGluZyB3b3JrIGlzbid0IHBlbmRpbmcgYWZ0ZXIgdGhpcwotCSAqIGJlY2F1c2Ugd2UncmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJdCBkb2Vzbid0IG1hdHRlcgotCSAqIHdoZXRoZXIgaXQgcmFuIG9yIG5vdCBzaW5jZSB3ZSdyZSBnb2luZyB0byBmbHVzaCBhbGwgU1RBcwotCSAqIGFueXdheS4KLQkgKi8KLQljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+c3RhX2RlYnVnZnNfYWRkKTsKLSNlbmRpZgotCiAJc3RhX2luZm9fZmx1c2gobG9jYWwsIE5VTEwpOwogfQogCkBAIC03OTEsMjYgKzgyOSwxOSBAQAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOwogCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltaWdodF9zbGVlcCgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQlpZiAoIXNkYXRhIHx8IHNkYXRhID09IHN0YS0+c2RhdGEpIHsKLQkJCV9fc3RhX2luZm9fdW5saW5rKCZzdGEpOwotCQkJaWYgKHN0YSkgewotCQkJCWxpc3RfYWRkX3RhaWwoJnN0YS0+bGlzdCwgJnRtcF9saXN0KTsKLQkJCQlyZXQrKzsKLQkJCX0KLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhLCB0bXAsICZ0bXBfbGlzdCwgbGlzdCkKLQkJc3RhX2luZm9fZGVzdHJveShzdGEpOworCXN0YV9pbmZvX2ZpbmlzaF9wZW5kaW5nKGxvY2FsKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoIXNkYXRhIHx8IHNkYXRhID09IHN0YS0+c2RhdGEpCisJCQlXQVJOX09OKF9fc3RhX2luZm9fZGVzdHJveShzdGEpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODIwLDM0ICs4NTEsMjggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhLT5sYXN0X3J4ICsgZXhwX3RpbWUpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhwaXJpbmcgaW5hY3RpdmUgU1RBICVwTVxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKKwkJCSAgICAgICBzZGF0YS0+bmFtZSwgc3RhLT5zdGEuYWRkcik7CiAjZW5kaWYKLQkJCV9fc3RhX2luZm9fdW5saW5rKCZzdGEpOwotCQkJaWYgKHN0YSkKLQkJCQlsaXN0X2FkZCgmc3RhLT5saXN0LCAmdG1wX2xpc3QpOworCQkJV0FSTl9PTihfX3N0YV9pbmZvX2Rlc3Ryb3koc3RhKSk7CiAJCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJnRtcF9saXN0LCBsaXN0KQotCQlzdGFfaW5mb19kZXN0cm95KHN0YSk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfc3RhICppZWVlODAyMTFfZmluZF9zdGFfYnlfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgICBjb25zdCB1OCAqYWRkcikKIHsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHN0YV9pbmZvX2dldChod190b19sb2NhbChodyksIGFkZHIpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqbnh0OwogCi0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiAmc3RhLT5zdGE7CisJLyogSnVzdCByZXR1cm4gYSByYW5kb20gc3RhdGlvbiAuLi4gZmlyc3QgaW4gbGlzdCAuLi4gKi8KKwlmb3JfZWFjaF9zdGFfaW5mbyhod190b19sb2NhbChodyksIGFkZHIsIHN0YSwgbnh0KQorCQlyZXR1cm4gJnN0YS0+c3RhOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2h3KTsKIApAQCAtODcyLDcgKzg5Nyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IHNlbnQsIGJ1ZmZlcmVkOwogCi0JZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FXQUtFLCAmc3RhLT5zdGEpOworCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCiAJCXN0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RhKTsKQEAgLTg4NSw3ICs5MTAsNyBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gYWlkICVkIHNlbmRpbmcgJWQgZmlsdGVyZWQvJWQgUFMgZnJhbWVzICIKLQkgICAgICAgInNpbmNlIFNUQSBub3Qgc2xlZXBpbmcgYW55bW9yZVxuIiwgc2RhdGEtPmRldi0+bmFtZSwKKwkgICAgICAgInNpbmNlIFNUQSBub3Qgc2xlZXBpbmcgYW55bW9yZVxuIiwgc2RhdGEtPm5hbWUsCiAJICAgICAgIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCwgc2VudCAtIGJ1ZmZlcmVkLCBidWZmZXJlZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KIH0KQEAgLTk0NCw3ICs5NjksNyBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIHNlbnQgUFMgUG9sbCBldmVuICIKIAkJICAgICAgICJ0aG91Z2ggdGhlcmUgYXJlIG5vIGJ1ZmZlcmVkIGZyYW1lcyBmb3IgaXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggYjQ4MTBmNi4uODIyZDg0NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTQyLDYgKzQyLDkgQEAKICAqCWJlIGluIHRoZSBxdWV1ZXMKICAqIEBXTEFOX1NUQV9QU1BPTEw6IFN0YXRpb24gc2VudCBQUy1wb2xsIHdoaWxlIGRyaXZlciB3YXMga2VlcGluZwogICoJc3RhdGlvbiBpbiBwb3dlci1zYXZlIG1vZGUsIHJlcGx5IHdoZW4gdGhlIGRyaXZlciB1bmJsb2Nrcy4KKyAqIEBXTEFOX1NUQV9ESVNBU1NPQzogRGlzYXNzb2NpYXRpb24gaW4gcHJvZ3Jlc3MuCisgKglUaGlzIGlzIHVzZWQgdG8gcmVqZWN0IFRYIEJBIHNlc3Npb24gcmVxdWVzdHMgd2hlbiBkaXNhc3NvY2lhdGlvbgorICoJaXMgaW4gcHJvZ3Jlc3MuCiAgKi8KIGVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzIHsKIAlXTEFOX1NUQV9BVVRICQk9IDE8PDAsCkBAIC01Nyw2ICs2MCw3IEBACiAJV0xBTl9TVEFfU1VTUEVORAk9IDE8PDExLAogCVdMQU5fU1RBX1BTX0RSSVZFUgk9IDE8PDEyLAogCVdMQU5fU1RBX1BTUE9MTAkJPSAxPDwxMywKKwlXTEFOX1NUQV9ESVNBU1NPQyAgICAgICA9IDE8PDE0LAogfTsKIAogI2RlZmluZSBTVEFfVElEX05VTSAxNgpAQCAtMTYyLDExICsxNjYsNiBAQAogfTsKIAogCi0vKiBzZWUgX19zdGFfaW5mb191bmxpbmsgKi8KLSNkZWZpbmUgU1RBX0lORk9fUElOX1NUQVRfTk9STUFMCTAKLSNkZWZpbmUgU1RBX0lORk9fUElOX1NUQVRfUElOTkVECTEKLSNkZWZpbmUgU1RBX0lORk9fUElOX1NUQVRfREVTVFJPWQkyCi0KIC8qKgogICogc3RydWN0IHN0YV9pbmZvIC0gU1RBIGluZm9ybWF0aW9uCiAgKgpAQCAtMTg3LDcgKzE4Niw2IEBACiAgKiBAZmxhZ2xvY2s6IHNwaW5sb2NrIGZvciBmbGFncyBhY2Nlc3NlcwogICogQGRydl91bmJsb2NrX3drOiB1c2VkIGZvciBkcml2ZXIgUFMgdW5ibG9ja2luZwogICogQGxpc3Rlbl9pbnRlcnZhbDogbGlzdGVuIGludGVydmFsIG9mIHRoaXMgc3RhdGlvbiwgd2hlbiB3ZSdyZSBhY3RpbmcgYXMgQVAKLSAqIEBwaW5fc3RhdHVzOiB1c2VkIGludGVybmFsbHkgZm9yIHBpbm5pbmcgYSBTVEEgc3RydWN0IGludG8gbWVtb3J5CiAgKiBAZmxhZ3M6IFNUQSBmbGFncywgc2VlICZlbnVtIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncwogICogQHBzX3R4X2J1ZjogYnVmZmVyIG9mIGZyYW1lcyB0byB0cmFuc21pdCB0byB0aGlzIHN0YXRpb24KICAqCXdoZW4gaXQgbGVhdmVzIHBvd2VyIHNhdmluZyBzdGF0ZQpAQCAtMjI2LDYgKzIyNCw3IEBACiAgKiBAZGVidWdmczogZGVidWcgZmlsZXN5c3RlbSBpbmZvCiAgKiBAc3RhOiBzdGF0aW9uIGluZm9ybWF0aW9uIHdlIHNoYXJlIHdpdGggdGhlIGRyaXZlcgogICogQGRlYWQ6IHNldCB0byB0cnVlIHdoZW4gc3RhIGlzIHVubGlua2VkCisgKiBAdXBsb2FkZWQ6IHNldCB0byB0cnVlIHdoZW4gc3RhIGlzIHVwbG9hZGVkIHRvIHRoZSBkcml2ZXIKICAqLwogc3RydWN0IHN0YV9pbmZvIHsKIAkvKiBHZW5lcmFsIGluZm9ybWF0aW9uLCBtb3N0bHkgc3RhdGljICovCkBAIC0yNDUsMTEgKzI0NCw3IEBACiAKIAlib29sIGRlYWQ7CiAKLQkvKgotCSAqIGZvciB1c2UgYnkgdGhlIGludGVybmFsIGxpZmV0aW1lIG1hbmFnZW1lbnQsCi0JICogc2VlIF9fc3RhX2luZm9fdW5saW5rCi0JICovCi0JdTggcGluX3N0YXR1czsKKwlib29sIHVwbG9hZGVkOwogCiAJLyoKIAkgKiBmcmVxdWVudGx5IHVwZGF0ZWQsIGxvY2tlZCB3aXRoIG93biBzcGlubG9jayAoZmxhZ2xvY2spLApAQCAtNDAzLDkgKzM5OCwzNyBAQAogI2RlZmluZSBTVEFfSU5GT19DTEVBTlVQX0lOVEVSVkFMICgxMCAqIEhaKQogCiAvKgotICogR2V0IGEgU1RBIGluZm8sIG11c3QgaGF2ZSBiZSB1bmRlciBSQ1UgcmVhZCBsb2NrLgorICogR2V0IGEgU1RBIGluZm8sIG11c3QgYmUgdW5kZXIgUkNVIHJlYWQgbG9jay4KICAqLwotc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IHU4ICphZGRyKTsKK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICAgY29uc3QgdTggKmFkZHIpOworCitzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldF9ic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCB1OCAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZm9yX2VhY2hfc3RhX2luZm9fdHlwZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIGNvbnN0IHU4ICphZGRyLAorCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKm54dCkKK3sKK30KKworI2RlZmluZSBmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgX2FkZHIsIHN0YSwgbnh0KSAJCQlcCisJZm9yICgJLyogaW5pdGlhbGlzZSBsb29wICovCQkJCQlcCisJCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goX2FkZHIpXSksXAorCQlueHQgPSBzdGEgPyByY3VfZGVyZWZlcmVuY2Uoc3RhLT5obmV4dCkgOiBOVUxMOwkJXAorCQkvKiB0eXBlY2hlY2sgKi8JCQkJCQlcCisJCWZvcl9lYWNoX3N0YV9pbmZvX3R5cGVfY2hlY2sobG9jYWwsIChfYWRkciksIHN0YSwgbnh0KSwJXAorCQkvKiBjb250aW51ZSBjb25kaXRpb24gKi8JCQkJXAorCQlzdGE7CQkJCQkJCVwKKwkJLyogYWR2YW5jZSBsb29wICovCQkJCQlcCisJCXN0YSA9IG54dCwJCQkJCQlcCisJCW54dCA9IHN0YSA/IHJjdV9kZXJlZmVyZW5jZShzdGEtPmhuZXh0KSA6IE5VTEwJCVwKKwkgICAgICkJCQkJCQkJCVwKKwkvKiBjb21wYXJlIGFkZHJlc3MgYW5kIHJ1biBjb2RlIG9ubHkgaWYgaXQgbWF0Y2hlcyAqLwkJXAorCWlmIChtZW1jbXAoc3RhLT5zdGEuYWRkciwgKF9hZGRyKSwgRVRIX0FMRU4pID09IDApCisKIC8qCiAgKiBHZXQgU1RBIGluZm8gYnkgaW5kZXgsIEJST0tFTiEKICAqLwpAQCAtNDIxLDE4ICs0NDQsMTkgQEAKICAqIEluc2VydCBTVEEgaW5mbyBpbnRvIGhhc2ggdGFibGUvbGlzdCwgcmV0dXJucyB6ZXJvIG9yIGEKICAqIC1FRVhJU1QgaWYgKGlmIHRoZSBzYW1lIE1BQyBhZGRyZXNzIGlzIGFscmVhZHkgcHJlc2VudCkuCiAgKgotICogQ2FsbGluZyB0aGlzIHdpdGhvdXQgUkNVIHByb3RlY3Rpb24gbWFrZXMgdGhlIGNhbGxlcgotICogcmVsaW5xdWlzaCBpdHMgcmVmZXJlbmNlIHRvIEBzdGEuCisgKiBDYWxsaW5nIHRoZSBub24tcmN1IHZlcnNpb24gbWFrZXMgdGhlIGNhbGxlciByZWxpbnF1aXNoLAorICogdGhlIF9yY3UgdmVyc2lvbiBjYWxscyByZWFkX2xvY2tfcmN1KCkgYW5kIG11c3QgYmUgY2FsbGVkCisgKiB3aXRob3V0IGl0IGhlbGQuCiAgKi8KIGludCBzdGFfaW5mb19pbnNlcnQoc3RydWN0IHN0YV9pbmZvICpzdGEpOwotLyoKLSAqIFVubGluayBhIFNUQSBpbmZvIGZyb20gdGhlIGhhc2ggdGFibGUvbGlzdC4KLSAqIFRoaXMgY2FuIE5VTEwgdGhlIFNUQSBwb2ludGVyIGlmIHNvbWVib2R5IGVsc2UKLSAqIGhhcyBhbHJlYWR5IHVubGlua2VkIGl0LgotICovCi12b2lkIHN0YV9pbmZvX3VubGluayhzdHJ1Y3Qgc3RhX2luZm8gKipzdGEpOworaW50IHN0YV9pbmZvX2luc2VydF9yY3Uoc3RydWN0IHN0YV9pbmZvICpzdGEpIF9fYWNxdWlyZXMoUkNVKTsKK2ludCBzdGFfaW5mb19pbnNlcnRfYXRvbWljKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIAotdm9pZCBzdGFfaW5mb19kZXN0cm95KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK2ludCBzdGFfaW5mb19kZXN0cm95X2FkZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgIGNvbnN0IHU4ICphZGRyKTsKK2ludCBzdGFfaW5mb19kZXN0cm95X2FkZHJfYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICAgY29uc3QgdTggKmFkZHIpOworCiB2b2lkIHN0YV9pbmZvX3NldF90aW1fYml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwppbmRleCBkNzhmMzZjLi41NmQ1YjlhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgogICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgotICogQ29weXJpZ2h0IDIwMDgtMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDgtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNDUsMjkgKzQ1LDE5IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCiAJLyoKLQkgKiBYWFg6IFRoaXMgaXMgdGVtcG9yYXJ5IQotCSAqCi0JICoJVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBkcml2ZXIgd2lsbAotCSAqCXF1aXRlIGxpa2VseSBoYXZlIHByZXR0eSBtdWNoIG92ZXJ3cml0dGVuIGluZm8tPmNvbnRyb2wgYnkKLQkgKgl1c2luZyBpbmZvLT5kcml2ZXJfZGF0YSBvciBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhLiBUaHVzLAotCSAqCXdoZW4gcGFzc2luZyBvdXQgdGhlIGZyYW1lIHRvIHRoZSBkcml2ZXIgYWdhaW4sIHdlIHdvdWxkIGJlCi0JICoJcGFzc2luZyBjb21wbGV0ZWx5IGJvZ3VzIGRhdGEgc2luY2UgdGhlIGRyaXZlciB3b3VsZCB0aGVuCi0JICoJZXhwZWN0IGEgcHJvcGVybHkgZmlsbGVkIGluZm8tPmNvbnRyb2wuIEluIG1hYzgwMjExIGl0c2VsZgotCSAqCXRoZSBzYW1lIHByb2JsZW0gb2NjdXJzLCBzaW5jZSB3ZSBuZWVkIGluZm8tPmNvbnRyb2wudmlmCi0JICoJaW50ZXJuYWxseS4KLQkgKgotCSAqCVRvIGZpeCB0aGlzLCB3ZSBzaG91bGQgc2VuZCB0aGUgZnJhbWUgdGhyb3VnaCBUWCBwcm9jZXNzaW5nCi0JICoJYWdhaW4uIEhvd2V2ZXIsIGl0J3Mgbm90IHRoYXQgc2ltcGxlLCBzaW5jZSB0aGUgZnJhbWUgd2lsbAotCSAqCWhhdmUgYmVlbiBzb2Z0d2FyZS1lbmNyeXB0ZWQgKGlmIGFwcGxpY2FibGUpIGFscmVhZHksIGFuZAotCSAqCWVuY3J5cHRpbmcgaXQgYWdhaW4gZG9lc24ndCBkbyBtdWNoIGdvb2QuIFNvIHRvIHByb3Blcmx5IGRvCi0JICoJdGhhdCwgd2Ugbm90IG9ubHkgaGF2ZSB0byBza2lwIHRoZSBhY3R1YWwgJ3JhdycgZW5jcnlwdGlvbgotCSAqCShrZXkgc2VsZWN0aW9uIGV0Yy4gc3RpbGwgaGFzIHRvIGJlIGRvbmUhKSBidXQgYWxzbyB0aGUKLQkgKglzZXF1ZW5jZSBudW1iZXIgYXNzaWdubWVudCBzaW5jZSB0aGF0IGltcGFjdHMgdGhlIGNyeXB0bwotCSAqCWVuY2Fwc3VsYXRpb24sIG9mIGNvdXJzZS4KLQkgKgotCSAqCUhlbmNlLCBmb3Igbm93LCBmaXggdGhlIGJ1ZyBieSBqdXN0IGRyb3BwaW5nIHRoZSBmcmFtZS4KKwkgKiBUaGlzIHNrYiAnc3Vydml2ZWQnIGEgcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBkcml2ZXIsIGFuZAorCSAqIGhvcGVmdWxseSB0aGUgZHJpdmVyIGRpZG4ndCBtYW5nbGUgaXQgdG9vIGJhZGx5LiBIb3dldmVyLAorCSAqIHdlIGNhbiBkZWZpbml0ZWx5IG5vdCByZWx5IG9uIHRoZSB0aGUgY29udHJvbCBpbmZvcm1hdGlvbgorCSAqIGJlaW5nIGNvcnJlY3QuIENsZWFyIGl0IHNvIHdlIGRvbid0IGdldCBqdW5rIHRoZXJlLCBhbmQKKwkgKiBpbmRpY2F0ZSB0aGF0IGl0IG5lZWRzIG5ldyBwcm9jZXNzaW5nLCBidXQgbXVzdCBub3QgYmUKKwkgKiBtb2RpZmllZC9lbmNyeXB0ZWQgYWdhaW4uCiAJICovCi0JZ290byBkcm9wOworCW1lbXNldCgmaW5mby0+Y29udHJvbCwgMCwgc2l6ZW9mKGluZm8tPmNvbnRyb2wpKTsKKworCWluZm8tPmNvbnRyb2wuamlmZmllcyA9IGppZmZpZXM7CisJaW5mby0+Y29udHJvbC52aWYgPSAmc3RhLT5zZGF0YS0+dmlmOworCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORyB8CisJCSAgICAgICBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT047CiAKIAlzdGEtPnR4X2ZpbHRlcmVkX2NvdW50Kys7CiAKQEAgLTEyMiw3ICsxMTIsNiBAQAogCQlyZXR1cm47CiAJfQogCi0gZHJvcDoKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmaWx0ZXJlZCBmcmFtZSwgIgpAQCAtMTM0LDYgKzEyMyw0MCBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX2ZyYW1lX2Fja2VkKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCisJaWYgKGllZWU4MDIxMV9pc19hY3Rpb24obWdtdC0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9IVCAmJgorCSAgICBtZ210LT51LmFjdGlvbi51Lmh0X3NtcHMuYWN0aW9uID09IFdMQU5fSFRfQUNUSU9OX1NNUFMpIHsKKwkJLyoKKwkJICogVGhpcyB1cGRhdGUgbG9va3MgcmFjeSwgYnV0IGlzbid0IC0tIGlmIHdlIGNvbWUKKwkJICogaGVyZSB3ZSd2ZSBkZWZpbml0ZWx5IGdvdCBhIHN0YXRpb24gdGhhdCB3ZSdyZQorCQkgKiB0YWxraW5nIHRvLCBhbmQgb24gYSBtYW5hZ2VkIGludGVyZmFjZSB0aGF0IGNhbgorCQkgKiBvbmx5IGJlIHRoZSBBUC4gQW5kIHRoZSBvbmx5IG90aGVyIHBsYWNlIHVwZGF0aW5nCisJCSAqIHRoaXMgdmFyaWFibGUgaXMgYmVmb3JlIHdlJ3JlIGFzc29jaWF0ZWQuCisJCSAqLworCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wpIHsKKwkJY2FzZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDOgorCQkJc3RhLT5zZGF0YS0+dS5tZ2QuYXBfc21wcyA9IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUM6CisJCQlzdGEtPnNkYXRhLT51Lm1nZC5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfU1RBVElDOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQ6CisJCWRlZmF1bHQ6IC8qIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgZG9uJ3Qgc2VuZCB0aGF0ICovCisJCQlzdGEtPnNkYXRhLT51Lm1nZC5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCQkJYnJlYWs7CisJCX0KKworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPnJlY2FsY19zbXBzKTsKKwl9Cit9CisKIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE0Niw3ICsxNjksNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyICpydGhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcHJldl9kZXYgPSBOVUxMOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwogCWludCByZXRyeV9jb3VudCA9IC0xLCBpOwogCWJvb2wgaW5qZWN0ZWQ7CiAKQEAgLTE2NSwxMCArMTg4LDEzIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2luZm8tPmJhbmRdOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwlmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLT5hZGRyMSwgc3RhLCB0bXApIHsKKwkJLyogc2tpcCB3cm9uZyB2aXJ0dWFsIGludGVyZmFjZSAqLworCQlpZiAobWVtY21wKGhkci0+YWRkcjIsIHN0YS0+c2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikpCisJCQljb250aW51ZTsKIAotCWlmIChzdGEpIHsKIAkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spICYmCiAJCSAgICB0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX1NUQSkpIHsKIAkJCS8qCkBAIC0xODAsOCArMjA2LDYgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCiAJCWlmICgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLKSAmJgogCQkgICAgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpKSB7CiAJCQl1MTYgdGlkLCBzc247CkBAIC0yMDgsNiArMjMyLDEwIEBACiAJCXJhdGVfY29udHJvbF90eF9zdGF0dXMobG9jYWwsIHNiYW5kLCBzdGEsIHNrYik7CiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnN0YS0+c2RhdGEtPnZpZikpCiAJCQlpZWVlODAyMTFzX3VwZGF0ZV9tZXRyaWMobG9jYWwsIHN0YSwgc2tiKTsKKworCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCisJCSAgICAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKQorCQkJaWVlZTgwMjExX2ZyYW1lX2Fja2VkKHN0YSwgc2tiKTsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTI0Niw2ICsyNzQsMjUgQEAKIAkJCWxvY2FsLT5kb3QxMUZhaWxlZENvdW50Kys7CiAJfQogCisJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgJiYgaWVlZTgwMjExX2hhc19wbShmYykgJiYKKwkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpICYmCisJICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSAmJgorCSAgICBsb2NhbC0+cHNfc2RhdGEgJiYgIShsb2NhbC0+c2Nhbm5pbmcpKSB7CisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykgeworCQkJbG9jYWwtPnBzX3NkYXRhLT51Lm1nZC5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfU1RBX05VTExGVU5DX0FDS0VEOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywKKwkJCQkJJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKwkJfSBlbHNlCisJCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcygxMCkpOworCX0KKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYKQorCQljZmc4MDIxMV9hY3Rpb25fdHhfc3RhdHVzKAorCQkJc2tiLT5kZXYsICh1bnNpZ25lZCBsb25nKSBza2IsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkhIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSyksIEdGUF9BVE9NSUMpOworCiAJLyogdGhpcyB3YXMgYSB0cmFuc21pdHRlZCBmcmFtZSwgYnV0IG5vdyB3ZSB3YW50IHRvIHJldXNlIGl0ICovCiAJc2tiX29ycGhhbihza2IpOwogCkBAIC0zMTEsNyArMzU4LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKLQkJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09PS19GUkFNRVMpICYmCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGtpcC5jIGIvbmV0L21hYzgwMjExL3RraXAuYwppbmRleCA0OTIxZDcyLi43ZWY0OTFlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdGtpcC5jCisrKyBiL25ldC9tYWM4MDIxMS90a2lwLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlwMWtbM10gKz0gdGtpcFMocDFrWzJdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTIgKyBqKSk7CiAJCXAxa1s0XSArPSB0a2lwUyhwMWtbM10gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyAwICsgaikpICsgaTsKIAl9Ci0JY3R4LT5pbml0aWFsaXplZCA9IDE7CisJY3R4LT5zdGF0ZSA9IFRLSVBfU1RBVEVfUEhBU0UxX0RPTkU7CiB9CiAKIHN0YXRpYyB2b2lkIHRraXBfbWl4aW5nX3BoYXNlMihjb25zdCB1OCAqdGssIHN0cnVjdCB0a2lwX2N0eCAqY3R4LApAQCAtMTgzLDcgKzE4Myw3IEBACiAJLyogVXBkYXRlIHRoZSBwMWsgb25seSB3aGVuIHRoZSBpdjE2IGluIHRoZSBwYWNrZXQgd3JhcHMgYXJvdW5kLCB0aGlzCiAJICogbWlnaHQgb2NjdXIgYWZ0ZXIgdGhlIHdyYXAgYXJvdW5kIG9mIGl2MTYgaW4gdGhlIGtleSBpbiBjYXNlIG9mCiAJICogZnJhZ21lbnRlZCBwYWNrZXRzLiAqLwotCWlmIChpdjE2ID09IDAgfHwgIWN0eC0+aW5pdGlhbGl6ZWQpCisJaWYgKGl2MTYgPT0gMCB8fCBjdHgtPnN0YXRlID09IFRLSVBfU1RBVEVfTk9UX0lOSVQpCiAJCXRraXBfbWl4aW5nX3BoYXNlMSh0aywgY3R4LCBoZHItPmFkZHIyLCBpdjMyKTsKIAogCWlmICh0eXBlID09IElFRUU4MDIxMV9US0lQX1AxX0tFWSkgewpAQCAtMTk1LDExICsxOTUsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF90a2lwX2tleSk7CiAKLS8qIEVuY3J5cHQgcGFja2V0IHBheWxvYWQgd2l0aCBUS0lQIHVzaW5nIEBrZXkuIEBwb3MgaXMgYSBwb2ludGVyIHRvIHRoZQorLyoKKyAqIEVuY3J5cHQgcGFja2V0IHBheWxvYWQgd2l0aCBUS0lQIHVzaW5nIEBrZXkuIEBwb3MgaXMgYSBwb2ludGVyIHRvIHRoZQogICogYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBwYXlsb2FkLiBUaGlzIHBheWxvYWQgbXVzdCBpbmNsdWRlCi0gKiBoZWFkcm9vbSBvZiBlaWdodCBvY3RldHMgZm9yIElWIGFuZCBFeHQuIElWIGFuZCB0YWlsZHJvb20gb2YgZm91ciBvY3RldHMKLSAqIGZvciBJQ1YuIEBwYXlsb2FkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHBheWxvYWQgKF9ub3RfIGluY2x1ZGluZyBleHRyYQotICogaGVhZHJvb20gYW5kIHRhaWxyb29tKS4gQHRhIGlzIHRoZSB0cmFuc21pdHRlciBhZGRyZXNzZXMuICovCisgKiB0aGUgSVYvRXh0LklWIGFuZCBzcGFjZSBmb3IgKHRhaWxkcm9vbSkgZm91ciBvY3RldHMgZm9yIElDVi4KKyAqIEBwYXlsb2FkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHBheWxvYWQgKF9ub3RfIGluY2x1ZGluZyBJVi9JQ1YgbGVuZ3RoKS4KKyAqIEB0YSBpcyB0aGUgdHJhbnNtaXR0ZXIgYWRkcmVzc2VzLgorICovCiB2b2lkIGllZWU4MDIxMV90a2lwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCSB1OCAqcG9zLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSkKQEAgLTIwOSwxMiArMjExLDExIEBACiAJY29uc3QgdTggKnRrID0gJmtleS0+Y29uZi5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXTsKIAogCS8qIENhbGN1bGF0ZSBwZXItcGFja2V0IGtleSAqLwotCWlmIChjdHgtPml2MTYgPT0gMCB8fCAhY3R4LT5pbml0aWFsaXplZCkKKwlpZiAoY3R4LT5pdjE2ID09IDAgfHwgY3R4LT5zdGF0ZSA9PSBUS0lQX1NUQVRFX05PVF9JTklUKQogCQl0a2lwX21peGluZ19waGFzZTEodGssIGN0eCwgdGEsIGN0eC0+aXYzMik7CiAKIAl0a2lwX21peGluZ19waGFzZTIodGssIGN0eCwgY3R4LT5pdjE2LCByYzRrZXkpOwogCi0JcG9zID0gaWVlZTgwMjExX3RraXBfYWRkX2l2KHBvcywga2V5LCBrZXktPnUudGtpcC50eC5pdjE2KTsKIAlpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YSh0Zm0sIHJjNGtleSwgMTYsIHBvcywgcGF5bG9hZF9sZW4pOwogfQogCkBAIC0yNTksNyArMjYwLDcgQEAKIAlpZiAoKGtleWlkID4+IDYpICE9IGtleS0+Y29uZi5rZXlpZHgpCiAJCXJldHVybiBUS0lQX0RFQ1JZUFRfSU5WQUxJRF9LRVlJRFg7CiAKLQlpZiAoa2V5LT51LnRraXAucnhbcXVldWVdLmluaXRpYWxpemVkICYmCisJaWYgKGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5zdGF0ZSAhPSBUS0lQX1NUQVRFX05PVF9JTklUICYmCiAJICAgIChpdjMyIDwga2V5LT51LnRraXAucnhbcXVldWVdLml2MzIgfHwKIAkgICAgIChpdjMyID09IGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjMyICYmCiAJICAgICAgaXYxNiA8PSBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYxNikpKSB7CkBAIC0yNzUsMTEgKzI3NiwxMSBAQAogCiAJaWYgKG9ubHlfaXYpIHsKIAkJcmVzID0gVEtJUF9ERUNSWVBUX09LOwotCQlrZXktPnUudGtpcC5yeFtxdWV1ZV0uaW5pdGlhbGl6ZWQgPSAxOworCQlrZXktPnUudGtpcC5yeFtxdWV1ZV0uc3RhdGUgPSBUS0lQX1NUQVRFX1BIQVNFMV9IV19VUExPQURFRDsKIAkJZ290byBkb25lOwogCX0KIAotCWlmICgha2V5LT51LnRraXAucnhbcXVldWVdLmluaXRpYWxpemVkIHx8CisJaWYgKGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5zdGF0ZSA9PSBUS0lQX1NUQVRFX05PVF9JTklUIHx8CiAJICAgIGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjMyICE9IGl2MzIpIHsKIAkJLyogSVYxNiB3cmFwcGVkIGFyb3VuZCAtIHBlcmZvcm0gVEtJUCBwaGFzZSAxICovCiAJCXRraXBfbWl4aW5nX3BoYXNlMSh0aywgJmtleS0+dS50a2lwLnJ4W3F1ZXVlXSwgdGEsIGl2MzIpOwpAQCAtMjk5LDE4ICszMDAsMTggQEAKIAkJCXByaW50aygiXG4iKTsKIAkJfQogI2VuZGlmCi0JCWlmIChrZXktPmxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSAmJgotCQkJa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7Ci0JCQlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KLQkJCQl7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0JCQljb25zdCB1OCAqc3RhX2FkZHIgPSBrZXktPnN0YS0+c3RhLmFkZHI7CisJfQorCWlmIChrZXktPmxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSAmJgorCSAgICBrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUgJiYKKwkgICAga2V5LT51LnRraXAucnhbcXVldWVdLnN0YXRlICE9IFRLSVBfU1RBVEVfUEhBU0UxX0hXX1VQTE9BREVEKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0ga2V5LT5zZGF0YTsKIAotCQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHJhKSkKLQkJCQlzdGFfYWRkciA9IGJjYXN0OwotCi0JCQlkcnZfdXBkYXRlX3RraXBfa2V5KGtleS0+bG9jYWwsICZrZXktPmNvbmYsIHN0YV9hZGRyLAotCQkJCQkgICAgaXYzMiwga2V5LT51LnRraXAucnhbcXVldWVdLnAxayk7Ci0JCX0KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoa2V5LT5zZGF0YS0+YnNzLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LmFwKTsKKwkJZHJ2X3VwZGF0ZV90a2lwX2tleShrZXktPmxvY2FsLCBzZGF0YSwgJmtleS0+Y29uZiwga2V5LT5zdGEsCisJCQkJaXYzMiwga2V5LT51LnRraXAucnhbcXVldWVdLnAxayk7CisJCWtleS0+dS50a2lwLnJ4W3F1ZXVlXS5zdGF0ZSA9IFRLSVBfU1RBVEVfUEhBU0UxX0hXX1VQTE9BREVEOwogCX0KIAogCXRraXBfbWl4aW5nX3BoYXNlMih0aywgJmtleS0+dS50a2lwLnJ4W3F1ZXVlXSwgaXYxNiwgcmM0a2V5KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggYWMyMTBiNS4uY2JlNTNlZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE4MCw2ICsxODAsNzEgQEAKIH0KIAogLyogdHggaGFuZGxlcnMgKi8KK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB0eC0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCS8qIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgcG93ZXIgc2F2ZSAqLworCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykpCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCS8qIGhhcmR3YXJlIGRvZXMgZHluYW1pYyBwb3dlciBzYXZlICovCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwkvKiBkeW5hbWljIHBvd2VyIHNhdmUgZGlzYWJsZWQgKi8KKwlpZiAobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0IDw9IDApCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCS8qIHdlIGFyZSBzY2FubmluZywgZG9uJ3QgZW5hYmxlIHBvd2VyIHNhdmUgKi8KKwlpZiAobG9jYWwtPnNjYW5uaW5nKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwlpZiAoIWxvY2FsLT5wc19zZGF0YSkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJLyogTm8gcG9pbnQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCAqLworCWlmIChsb2NhbC0+cXVpZXNjaW5nKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwkvKiBkeW5hbWljIHBzIGlzIHN1cHBvcnRlZCBvbmx5IGluIG1hbmFnZWQgbW9kZSAqLworCWlmICh0eC0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCWlmbWdkID0gJnR4LT5zZGF0YS0+dS5tZ2Q7CisKKwkvKgorCSAqIERvbid0IHdha2V1cCBmcm9tIHBvd2VyIHNhdmUgaWYgdS1hcHNkIGlzIGVuYWJsZWQsIHZvaXAgYWMgaGFzCisJICogdS1hcHNkIGVuYWJsZWQgYW5kIHRoZSBmcmFtZSBpcyBpbiB2b2lwIGNsYXNzLiBUaGlzIGVmZmVjdGl2ZWx5CisJICogbWVhbnMgdGhhdCBldmVuIGlmIGFsbCBhY2Nlc3MgY2F0ZWdvcmllcyBoYXZlIHUtYXBzZCBlbmFibGVkLCBpbgorCSAqIHByYWN0aXNlIHUtYXBzZCBpcyBvbmx5IHVzZWQgd2l0aCB0aGUgdm9pcCBhYy4gVGhpcyBpcyBhCisJICogd29ya2Fyb3VuZCBmb3IgdGhlIGNhc2Ugd2hlbiByZWNlaXZlZCB2b2lwIGNsYXNzIHBhY2tldHMgZG8gbm90CisJICogaGF2ZSBjb3JyZWN0IHFvcyB0YWcgZm9yIHNvbWUgcmVhc29uLCBkdWUgdGhlIG5ldHdvcmsgb3IgdGhlCisJICogcGVlciBhcHBsaWNhdGlvbi4KKwkgKgorCSAqIE5vdGU6IGxvY2FsLT51YXBzZF9xdWV1ZXMgYWNjZXNzIGlzIHJhY3kgaGVyZS4gSWYgdGhlIHZhbHVlIGlzCisJICogY2hhbmdlZCB2aWEgZGVidWdmcywgdXNlciBuZWVkcyB0byByZWFzc29jaWF0ZSBtYW51YWxseSB0byBoYXZlCisJICogZXZlcnl0aGluZyBpbiBzeW5jLgorCSAqLworCWlmICgoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9VQVBTRF9FTkFCTEVEKQorCSAgICAmJiAobG9jYWwtPnVhcHNkX3F1ZXVlcyAmIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfVk8pCisJICAgICYmIHNrYl9nZXRfcXVldWVfbWFwcGluZyh0eC0+c2tiKSA9PSAwKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LAorCQkJCSAgICAgJmxvY2FsLT5keW5hbWljX3BzX2Rpc2FibGVfd29yayk7CisJfQorCisJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKworCXJldHVybiBUWF9DT05USU5VRTsKK30KIAogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCkBAIC0yMjMsNyArMjg4LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIGRhdGEgZnJhbWUgdG8gbm90ICIKIAkJCSAgICAgICAiYXNzb2NpYXRlZCBzdGF0aW9uICVwTVxuIiwKLQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lLCBoZHItPmFkZHIxKTsKKwkJCSAgICAgICB0eC0+c2RhdGEtPm5hbWUsIGhkci0+YWRkcjEpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAJCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfbm90X2Fzc29jKTsKIAkJCXJldHVybiBUWF9EUk9QOwpAQCAtMzMxLDcgKzM5Niw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQkMgVFggYnVmZmVyIGZ1bGwgLSBkcm9wcGluZyB0aGUgb2xkZXN0IGZyYW1lXG4iLAotCQkJICAgICAgIHR4LT5kZXYtPm5hbWUpOworCQkJICAgICAgIHR4LT5zZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAkJZGV2X2tmcmVlX3NrYihza2JfZGVxdWV1ZSgmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikpOwogCX0gZWxzZQpAQCAtMzkxLDcgKzQ1Niw3IEBACiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIFRYICIKIAkJCQkgICAgICAgImJ1ZmZlciBmdWxsIC0gZHJvcHBpbmcgb2xkZXN0IGZyYW1lXG4iLAotCQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKKwkJCQkgICAgICAgdHgtPnNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKIAkJCX0KICNlbmRpZgogCQkJZGV2X2tmcmVlX3NrYihvbGQpOwpAQCAtNDE2LDcgKzQ4MSw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAllbHNlIGlmICh1bmxpa2VseShzdGFmbGFncyAmIFdMQU5fU1RBX1BTX1NUQSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGluIFBTIG1vZGUsIGJ1dCBwc3BvbGwgIgotCQkgICAgICAgInNldCAtPiBzZW5kIGZyYW1lXG4iLCB0eC0+ZGV2LT5uYW1lLAorCQkgICAgICAgInNldCAtPiBzZW5kIGZyYW1lXG4iLCB0eC0+c2RhdGEtPm5hbWUsCiAJCSAgICAgICBzdGEtPnN0YS5hZGRyKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KQEAgLTQ2NCw2ICs1MjksOCBAQAogCQl0eC0+a2V5ID0gTlVMTDsKIAogCWlmICh0eC0+a2V5KSB7CisJCWJvb2wgc2tpcF9odyA9IGZhbHNlOworCiAJCXR4LT5rZXktPnR4X3J4X2NvdW50Kys7CiAJCS8qIFRPRE86IGFkZCB0aHJlc2hvbGQgc3R1ZmYgYWdhaW4gKi8KIApAQCAtNDgwLDE2ICs1NDcsMzIgQEAKIAkJCSAgICAhaWVlZTgwMjExX3VzZV9tZnAoaGRyLT5mcmFtZV9jb250cm9sLCB0eC0+c3RhLAogCQkJCQkgICAgICAgdHgtPnNrYikpCiAJCQkJdHgtPmtleSA9IE5VTEw7CisJCQllbHNlCisJCQkJc2tpcF9odyA9ICh0eC0+a2V5LT5jb25mLmZsYWdzICYKKwkJCQkJICAgSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQpICYmCisJCQkJCWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJCQlicmVhazsKIAkJY2FzZSBBTEdfQUVTX0NNQUM6CiAJCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQkJdHgtPmtleSA9IE5VTEw7CiAJCQlicmVhazsKIAkJfQorCisJCWlmICghc2tpcF9odyAmJiB0eC0+a2V5ICYmCisJCSAgICB0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKQorCQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAl9CiAKLQlpZiAoIXR4LT5rZXkgfHwgISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkKLQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9zdGEoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOworCisJaWYgKHR4LT5zdGEgJiYgdHgtPnN0YS0+dXBsb2FkZWQpCisJCWluZm8tPmNvbnRyb2wuc3RhID0gJnR4LT5zdGEtPnN0YTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KQEAgLTUxOSw3ICs2MDIsMTIgQEAKIAl0eHJjLmJzc19jb25mID0gJnR4LT5zZGF0YS0+dmlmLmJzc19jb25mOwogCXR4cmMuc2tiID0gdHgtPnNrYjsKIAl0eHJjLnJlcG9ydGVkX3JhdGUuaWR4ID0gLTE7Ci0JdHhyYy5tYXhfcmF0ZV9pZHggPSB0eC0+c2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4OworCXR4cmMucmF0ZV9pZHhfbWFzayA9IHR4LT5zZGF0YS0+cmNfcmF0ZWlkeF9tYXNrW3R4LT5jaGFubmVsLT5iYW5kXTsKKwlpZiAodHhyYy5yYXRlX2lkeF9tYXNrID09ICgxIDw8IHNiYW5kLT5uX2JpdHJhdGVzKSAtIDEpCisJCXR4cmMubWF4X3JhdGVfaWR4ID0gLTE7CisJZWxzZQorCQl0eHJjLm1heF9yYXRlX2lkeCA9IGZscyh0eHJjLnJhdGVfaWR4X21hc2spIC0gMTsKKwl0eHJjLmFwID0gdHgtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUDsKIAogCS8qIHNldCB1cCBSVFMgcHJvdGVjdGlvbiBpZiBkZXNpcmVkICovCiAJaWYgKGxlbiA+IHR4LT5sb2NhbC0+aHcud2lwaHktPnJ0c190aHJlc2hvbGQpIHsKQEAgLTU0OSw3ICs2MzcsNyBAQAogCQkgIiVzOiBEcm9wcGVkIGRhdGEgZnJhbWUgYXMgbm8gdXNhYmxlIGJpdHJhdGUgZm91bmQgd2hpbGUgIgogCQkgInNjYW5uaW5nIGFuZCBhc3NvY2lhdGVkLiBUYXJnZXQgc3RhdGlvbjogIgogCQkgIiVwTSBvbiAlZCBHSHogYmFuZFxuIiwKLQkJIHR4LT5kZXYtPm5hbWUsIGhkci0+YWRkcjEsCisJCSB0eC0+c2RhdGEtPm5hbWUsIGhkci0+YWRkcjEsCiAJCSB0eC0+Y2hhbm5lbC0+YmFuZCA/IDUgOiAyKSkKIAkJcmV0dXJuIFRYX0RST1A7CiAKQEAgLTY2NCwxNyArNzUyLDYgQEAKIH0KIAogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKLWllZWU4MDIxMV90eF9oX21pc2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOwotCi0JaWYgKHR4LT5zdGEpCi0JCWluZm8tPmNvbnRyb2wuc3RhID0gJnR4LT5zdGEtPnN0YTsKLQotCXJldHVybiBUWF9DT05USU5VRTsKLX0KLQotc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKQEAgLTkzMyw3ICsxMDEwLDggQEAKIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCZpdGVyYXRvciwgcnRoZHIsIHNrYi0+bGVuKTsKKwlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4sCisJCQkJCQkgICBOVUxMKTsKIAogCXNiYW5kID0gdHgtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmNoYW5uZWwtPmJhbmRdOwogCkBAIC05NjksNyArMTA0Nyw3IEBACiAJCQkJICogYmVjYXVzZSBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgYW5kIGFkZGVkCiAJCQkJICogb24gdHJhbnNtaXNzaW9uCiAJCQkJICovCi0JCQkJaWYgKHNrYi0+bGVuIDwgKGl0ZXJhdG9yLm1heF9sZW5ndGggKyBGQ1NfTEVOKSkKKwkJCQlpZiAoc2tiLT5sZW4gPCAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIEZDU19MRU4pOwpAQCAtOTk2LDEwICsxMDc0LDEwIEBACiAKIAkvKgogCSAqIHJlbW92ZSB0aGUgcmFkaW90YXAgaGVhZGVyCi0JICogaXRlcmF0b3ItPm1heF9sZW5ndGggd2FzIHNhbml0eS1jaGVja2VkIGFnYWluc3QKKwkgKiBpdGVyYXRvci0+X21heF9sZW5ndGggd2FzIHNhbml0eS1jaGVja2VkIGFnYWluc3QKIAkgKiBza2ItPmxlbiBieSBpdGVyYXRvciBpbml0CiAJICovCi0Jc2tiX3B1bGwoc2tiLCBpdGVyYXRvci5tYXhfbGVuZ3RoKTsKKwlza2JfcHVsbChza2IsIGl0ZXJhdG9yLl9tYXhfbGVuZ3RoKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMTAyMSw3ICsxMDk5LDYgQEAKIAogCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwogCXR4LT5za2IgPSBza2I7Ci0JdHgtPmRldiA9IHNkYXRhLT5kZXY7IC8qIHVzZSBvcmlnaW5hbCBpbnRlcmZhY2UgKi8KIAl0eC0+bG9jYWwgPSBsb2NhbDsKIAl0eC0+c2RhdGEgPSBzZGF0YTsKIAl0eC0+Y2hhbm5lbCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWw7CkBAIC0xMDMyLDcgKzExMDksNyBAQAogCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfRlJBR01FTlRFRDsKIAogCS8qIHByb2Nlc3MgYW5kIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqLwotCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CisJaWYgKHVubGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX0hBU19SQURJT1RBUCkpIHsKIAkJaWYgKCFfX2llZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcCh0eCwgc2tiKSkKIAkJCXJldHVybiBUWF9EUk9QOwogCkBAIC0xMDQxLDYgKzExMTgsNyBAQAogCQkgKiB0aGUgcmFkaW90YXAgaGVhZGVyIHRoYXQgd2FzIHByZXNlbnQgYW5kIHByZS1maWxsZWQKIAkJICogJ3R4JyB3aXRoIHR4IGNvbnRyb2wgaW5mb3JtYXRpb24uCiAJCSAqLworCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0lOVEZMX0hBU19SQURJT1RBUDsKIAl9CiAKIAkvKgpAQCAtMTA1MiwxMCArMTEzMCwxNSBAQAogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHsKIAkJdHgtPnN0YSA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0+dS52bGFuLnN0YSk7CisJCWlmICghdHgtPnN0YSAmJiBzZGF0YS0+ZGV2LT5pZWVlODAyMTFfcHRyLT51c2VfNGFkZHIpCisJCQlyZXR1cm4gVFhfRFJPUDsKKwl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgeworCQl0eC0+c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLT5hZGRyMSk7CisJfQogCWlmICghdHgtPnN0YSkKLQkJdHgtPnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisJCXR4LT5zdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGhkci0+YWRkcjEpOwogCiAJaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpIHsKQEAgLTEyMDcsNiArMTI5MCw3IEBACiBzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0RST1A7CiAKICNkZWZpbmUgQ0FMTF9UWEgodHhoKSBcCkBAIC0xMjE2LDEzICsxMzAwLDE4IEBACiAJCQlnb3RvIHR4aF9kb25lOwlcCiAJfSB3aGlsZSAoMCkKIAorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX2R5bmFtaWNfcHMpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9wc19idWYpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlbGVjdF9rZXkpOwotCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7CisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhKTsKIAlpZiAoISh0eC0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpKQogCQlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpOwotCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX21pc2MpOworCisJaWYgKHVubGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJBTlNNSVNTSU9OKSkKKwkJZ290byB0eGhfZG9uZTsKKworCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7CiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KTsKIAkvKiBoYW5kbGVycyBhZnRlciBmcmFnbWVudCBtdXN0IGJlIGF3YXJlIG9mIHR4IGluZm8gZnJhZ21lbnRhdGlvbiEgKi8KQEAgLTEzOTgsMzQgKzE0ODcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBuZWVkX2R5bmFtaWNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0JLyogZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBwb3dlciBzYXZlICovCi0JaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogaGFyZHdhcmUgZG9lcyBkeW5hbWljIHBvd2VyIHNhdmUgKi8KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIGR5bmFtaWMgcG93ZXIgc2F2ZSBkaXNhYmxlZCAqLwotCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPD0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogd2UgYXJlIHNjYW5uaW5nLCBkb24ndCBlbmFibGUgcG93ZXIgc2F2ZSAqLwotCWlmIChsb2NhbC0+c2Nhbm5pbmcpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghbG9jYWwtPnBzX3NkYXRhKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBObyBwb2ludCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kICovCi0JaWYgKGxvY2FsLT5xdWllc2NpbmcpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xNDM2LDI1ICsxNDk3LDE0IEBACiAJaW50IGhlYWRyb29tOwogCWJvb2wgbWF5X2VuY3J5cHQ7CiAKLQlpZiAobmVlZF9keW5hbWljX3BzKGxvY2FsKSkgewotCQlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewotCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbigmbG9jYWwtPmh3LAotCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOwotCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywKLQkJCQkJJmxvY2FsLT5keW5hbWljX3BzX2Rpc2FibGVfd29yayk7Ci0JCX0KLQotCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKLQkJICAgICAgICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwotCX0KLQogCXJjdV9yZWFkX2xvY2soKTsKIAogCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpIHsKIAkJaW50IGhkcmxlbjsKIAkJdTE2IGxlbl9ydGhkcjsKIAotCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEIHwKKwkJCSAgICAgICBJRUVFODAyMTFfVFhfSU5URkxfSEFTX1JBRElPVEFQOwogCiAJCWxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi0+ZGF0YSk7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEgKyBsZW5fcnRoZHIpOwpAQCAtMTQ3NCwxMSArMTUyNCwxMSBAQAogCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywKIAkJCQkJCWxpc3QpIHsKLQkJCQlpZiAoIW5ldGlmX3J1bm5pbmcodG1wX3NkYXRhLT5kZXYpKQorCQkJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcodG1wX3NkYXRhKSkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKHRtcF9zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIodG1wX3NkYXRhLT5kZXYtPmRldl9hZGRyLAorCQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIodG1wX3NkYXRhLT52aWYuYWRkciwKIAkJCQkJCSAgICAgICBoZHItPmFkZHIyKSA9PSAwKSB7CiAJCQkJCXNkYXRhID0gdG1wX3NkYXRhOwogCQkJCQlicmVhazsKQEAgLTE2NDIsNyArMTY5Miw3IEBACiAJCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJCS8qIFJBIFRBIERBIFNBICovCiAJCQltZW1jcHkoaGRyLmFkZHIxLCBzdGEtPnN0YS5hZGRyLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCQltZW1jcHkoaGRyLmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJCWhkcmxlbiA9IDMwOwpAQCAtMTY1Niw3ICsxNzA2LDcgQEAKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKTsKIAkJLyogREEgQlNTSUQgU0EgKi8KIAkJbWVtY3B5KGhkci5hZGRyMSwgc2tiLT5kYXRhLCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDI0OwogCQlicmVhazsKQEAgLTE2NjQsNyArMTcxNCw3IEBACiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBSQSBUQSBEQSBTQSAqLwogCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KGhkci5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjQsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDMwOwpAQCAtMTY3OCw4ICsxNzI4LDggQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCi0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwKLQkJCQkJICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwKKwkJCQkgICAgICAgc2tiLT5kYXRhICsgRVRIX0FMRU4pID09IDApIHsKIAkJCWhkcmxlbiA9IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKCZoZHIsICZmYywKIAkJCQkJc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBFVEhfQUxFTik7CiAJCQltZXNoaGRybGVuID0gaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCkBAIC0xNzA5LDcgKzE3NTksNyBAQAogCQkJCX0KIAkJCX0KIAkJCWhkcmxlbiA9IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKCZoZHIsICZmYywKLQkJCQkJbWVzaF9kYSwgZGV2LT5kZXZfYWRkcik7CisJCQkJCW1lc2hfZGEsIHNkYXRhLT52aWYuYWRkcik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWlmIChpc19tZXNoX21jYXN0KQogCQkJCW1lc2hoZHJsZW4gPQpAQCAtMTczNCw3ICsxNzg0LDcgQEAKIAkJaWYgKHNkYXRhLT51Lm1nZC51c2VfNGFkZHIgJiYgZXRoZXJ0eXBlICE9IEVUSF9QX1BBRSkgewogCQkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCQkvKiBSQSBUQSBEQSBTQSAqLwotCQkJbWVtY3B5KGhkci5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGhkci5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShoZHIuYWRkcjQsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCQloZHJsZW4gPSAzMDsKQEAgLTE3NjUsOSArMTgxNSw4IEBACiAJICovCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHIuYWRkcjEpKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHIuYWRkcjEpOwotCQkvKiBYWFg6IGluIHRoZSBmdXR1cmUsIHVzZSBzZGF0YSB0byBsb29rIHVwIHRoZSBzdGEgKi8KLQkJaWYgKHN0YSAmJiBzdGEtPnNkYXRhID09IHNkYXRhKQorCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGhkci5hZGRyMSk7CisJCWlmIChzdGEpCiAJCQlzdGFfZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KQEAgLTE3ODYsNyArMTgzNSw3IEBACiAJCXVubGlrZWx5KCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHIuYWRkcjEpICYmCiAJCSAgICAgICEoc3RhX2ZsYWdzICYgV0xBTl9TVEFfQVVUSE9SSVpFRCkgJiYKIAkJICAgICAgIShldGhlcnR5cGUgPT0gRVRIX1BfUEFFICYmCi0JCSAgICAgICBjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwKKwkJICAgICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCiAJCQkJCSAgc2tiLT5kYXRhICsgRVRIX0FMRU4pID09IDApKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCkBAIC0xOTI2LDcgKzE5NzUsNyBAQAogCQlpZWVlODAyMTFfdHgoc2RhdGEsIHNrYiwgdHJ1ZSk7CiAJfSBlbHNlIHsKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGhkci0+YWRkcjEpOwogCiAJCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmc2tiLCBzdGEsIHRydWUpOwogCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9PSykKQEAgLTIwNjIsNiArMjExMSw3IEBACiAJc3RydWN0IGJlYWNvbl9kYXRhICpiZWFjb247CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCB0eHJjOwogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwogCkBAIC0yMTUwLDggKzIyMDAsOCBAQAogCQltZ210LT5mcmFtZV9jb250cm9sID0KIAkJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9CiAJCQljcHVfdG9fbGUxNihzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQpOwogCQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gMHgwOyAvKiAweDAgZm9yIE1QcyAqLwpAQCAtMjE2OSwyMSArMjIxOSwyNSBAQAogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOworCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLOwogCWluZm8tPmJhbmQgPSBiYW5kOwotCS8qCi0JICogWFhYOiBGb3Igbm93LCBhbHdheXMgdXNlIHRoZSBsb3dlc3QgcmF0ZQotCSAqLwotCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gMDsKLQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50ID0gMTsKLQlpbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOwotCWluZm8tPmNvbnRyb2wucmF0ZXNbMl0uaWR4ID0gLTE7Ci0JaW5mby0+Y29udHJvbC5yYXRlc1szXS5pZHggPSAtMTsKLQlpbmZvLT5jb250cm9sLnJhdGVzWzRdLmlkeCA9IC0xOwotCUJVSUxEX0JVR19PTihJRUVFODAyMTFfVFhfTUFYX1JBVEVTICE9IDUpOworCisJbWVtc2V0KCZ0eHJjLCAwLCBzaXplb2YodHhyYykpOworCXR4cmMuaHcgPSBodzsKKwl0eHJjLnNiYW5kID0gc2JhbmQ7CisJdHhyYy5ic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOworCXR4cmMuc2tiID0gc2tiOworCXR4cmMucmVwb3J0ZWRfcmF0ZS5pZHggPSAtMTsKKwl0eHJjLnJhdGVfaWR4X21hc2sgPSBzZGF0YS0+cmNfcmF0ZWlkeF9tYXNrW2JhbmRdOworCWlmICh0eHJjLnJhdGVfaWR4X21hc2sgPT0gKDEgPDwgc2JhbmQtPm5fYml0cmF0ZXMpIC0gMSkKKwkJdHhyYy5tYXhfcmF0ZV9pZHggPSAtMTsKKwllbHNlCisJCXR4cmMubWF4X3JhdGVfaWR4ID0gZmxzKHR4cmMucmF0ZV9pZHhfbWFzaykgLSAxOworCXR4cmMuYXAgPSB0cnVlOworCXJhdGVfY29udHJvbF9nZXRfcmF0ZShzZGF0YSwgTlVMTCwgJnR4cmMpOwogCiAJaW5mby0+Y29udHJvbC52aWYgPSB2aWY7CiAKLQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSzsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQ7CiAJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VROwogIG91dDoKQEAgLTIxOTIsNiArMjI0NiwxMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKTsKIAorc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wc3BvbGxfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmIChXQVJOX09OKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCpwc3BvbGwpKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKKwkJICAgICAgICJwc3BvbGwgdGVtcGxhdGVcbiIsIHNkYXRhLT5uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpwc3BvbGwpKTsKKwltZW1zZXQocHNwb2xsLCAwLCBzaXplb2YoKnBzcG9sbCkpOworCXBzcG9sbC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfAorCQkJCQkgICAgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCk7CisJcHNwb2xsLT5haWQgPSBjcHVfdG9fbGUxNihpZm1nZC0+YWlkKTsKKworCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLworCXBzcG9sbC0+YWlkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUgfCAxIDw8IDE0KTsKKworCW1lbWNweShwc3BvbGwtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkocHNwb2xsLT50YSwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gc2tiOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcHNwb2xsX2dldCk7CisKK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpudWxsZnVuYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoV0FSTl9PTih2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiBOVUxMOworCisJc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbnVsbGZ1bmMpKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKKwkJICAgICAgICJ0ZW1wbGF0ZVxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikgc2tiX3B1dChza2IsCisJCQkJCQkJICBzaXplb2YoKm51bGxmdW5jKSk7CisJbWVtc2V0KG51bGxmdW5jLCAwLCBzaXplb2YoKm51bGxmdW5jKSk7CisJbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0dXJuIHNrYjsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX251bGxmdW5jX2dldCk7CisKK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfcHJvYmVyZXFfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBpZV9zc2lkX2xlbjsKKwl1OCAqcG9zOworCisJc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKKwlsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpZV9zc2lkX2xlbiA9IDIgKyBzc2lkX2xlbjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCpoZHIpICsKKwkJCSAgICBpZV9zc2lkX2xlbiArIGllX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCisJCSAgICAgICAicmVxdWVzdCB0ZW1wbGF0ZVxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CisJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKwltZW1zZXQoaGRyLT5hZGRyMSwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwltZW1zZXQoaGRyLT5hZGRyMywgMHhmZiwgRVRIX0FMRU4pOworCisJcG9zID0gc2tiX3B1dChza2IsIGllX3NzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IHNzaWRfbGVuOworCWlmIChzc2lkKQorCQltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7CisJcG9zICs9IHNzaWRfbGVuOworCisJaWYgKGllKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZV9sZW4pOworCQltZW1jcHkocG9zLCBpZSwgaWVfbGVuKTsKKwl9CisKKwlyZXR1cm4gc2tiOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcHJvYmVyZXFfZ2V0KTsKKwogdm9pZCBpZWVlODAyMTFfcnRzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgICAgIGNvbnN0IHZvaWQgKmZyYW1lLCBzaXplX3QgZnJhbWVfbGVuLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpmcmFtZV90eGN0bCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IDM4NDgxNDAuLmM0NTMyMjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CkBAIC00ODAsOCArNDc5LDggQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQlpdGVyYXRvcihkYXRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWl0ZXJhdG9yKGRhdGEsIHNkYXRhLT52aWYuYWRkciwKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIApAQCAtNTE0LDggKzUxMyw4IEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJaXRlcmF0b3IoZGF0YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQlpdGVyYXRvcihkYXRhLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQkJICZzZGF0YS0+dmlmKTsKIAl9CiAKQEAgLTc5Myw2ICs3OTIsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQlxcGFyYW0udWFwc2QgPSBmYWxzZTsKKwogCQlkcnZfY29uZl90eChsb2NhbCwgcXVldWUsICZxcGFyYW0pOwogCX0KIH0KQEAgLTg2MCw3ICs4NjEsNyBAQAogCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKQEAgLTg3MCw3ICs4NzEsNyBAQAogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOwogCW1lbWNweShtZ210LT5kYSwgYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoYXV0aF9hbGcpOwogCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOwpAQCAtODkzLDQzICs4OTQsODcgQEAKIAkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4ICpwb3MsICpzdXBwX3JhdGVzX2xlbiwgKmVzdXBwX3JhdGVzX2xlbiA9IE5VTEw7Ci0JaW50IGk7CisJdTggKnBvczsKKwlzaXplX3Qgb2Zmc2V0ID0gMCwgbm9mZnNldDsKKwlpbnQgc3VwcF9yYXRlc19sZW4sIGk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CiAKIAlwb3MgPSBidWZmZXI7CiAKKwlzdXBwX3JhdGVzX2xlbiA9IG1pbl90KGludCwgc2JhbmQtPm5fYml0cmF0ZXMsIDgpOworCiAJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlzdXBwX3JhdGVzX2xlbiA9IHBvczsKLQkqcG9zKysgPSAwOworCSpwb3MrKyA9IHN1cHBfcmF0ZXNfbGVuOwogCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykgeworCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJfQogCi0JCWlmIChlc3VwcF9yYXRlc19sZW4pIHsKLQkJCSplc3VwcF9yYXRlc19sZW4gKz0gMTsKLQkJfSBlbHNlIGlmICgqc3VwcF9yYXRlc19sZW4gPT0gOCkgewotCQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCQllc3VwcF9yYXRlc19sZW4gPSBwb3M7Ci0JCQkqcG9zKysgPSAxOwotCQl9IGVsc2UKLQkJCSpzdXBwX3JhdGVzX2xlbiArPSAxOworCS8qIGluc2VydCAicmVxdWVzdCBpbmZvcm1hdGlvbiIgaWYgaW4gY3VzdG9tIElFcyAqLworCWlmIChpZSAmJiBpZV9sZW4pIHsKKwkJc3RhdGljIGNvbnN0IHU4IGJlZm9yZV9leHRyYXRlc1tdID0geworCQkJV0xBTl9FSURfU1NJRCwKKwkJCVdMQU5fRUlEX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9SRVFVRVNULAorCQl9OworCQlub2Zmc2V0ID0gaWVlZTgwMjExX2llX3NwbGl0KGllLCBpZV9sZW4sCisJCQkJCSAgICAgYmVmb3JlX2V4dHJhdGVzLAorCQkJCQkgICAgIEFSUkFZX1NJWkUoYmVmb3JlX2V4dHJhdGVzKSwKKwkJCQkJICAgICBvZmZzZXQpOworCQltZW1jcHkocG9zLCBpZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJCXBvcyArPSBub2Zmc2V0IC0gb2Zmc2V0OworCQlvZmZzZXQgPSBub2Zmc2V0OworCX0KIAotCQkqcG9zKysgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwlpZiAoc2JhbmQtPm5fYml0cmF0ZXMgPiBpKSB7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSBzYmFuZC0+bl9iaXRyYXRlcyAtIGk7CisKKwkJZm9yICg7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCQl9CisJfQorCisJLyogaW5zZXJ0IGN1c3RvbSBJRXMgdGhhdCBnbyBiZWZvcmUgSFQgKi8KKwlpZiAoaWUgJiYgaWVfbGVuKSB7CisJCXN0YXRpYyBjb25zdCB1OCBiZWZvcmVfaHRbXSA9IHsKKwkJCVdMQU5fRUlEX1NTSUQsCisJCQlXTEFOX0VJRF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfUkVRVUVTVCwKKwkJCVdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfRFNfUEFSQU1TLAorCQkJV0xBTl9FSURfU1VQUE9SVEVEX1JFR1VMQVRPUllfQ0xBU1NFUywKKwkJfTsKKwkJbm9mZnNldCA9IGllZWU4MDIxMV9pZV9zcGxpdChpZSwgaWVfbGVuLAorCQkJCQkgICAgIGJlZm9yZV9odCwgQVJSQVlfU0laRShiZWZvcmVfaHQpLAorCQkJCQkgICAgIG9mZnNldCk7CisJCW1lbWNweShwb3MsIGllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJcG9zICs9IG5vZmZzZXQgLSBvZmZzZXQ7CisJCW9mZnNldCA9IG5vZmZzZXQ7CiAJfQogCiAJaWYgKHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7Ci0JCV9fbGUxNiB0bXAgPSBjcHVfdG9fbGUxNihzYmFuZC0+aHRfY2FwLmNhcCk7CisJCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKKwkJX19sZTE2IHRtcDsKKworCQlpZiAoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogJiYKKwkJICAgIHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CiAKIAkJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKIAkJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKIAkJbWVtc2V0KHBvcywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSk7CisJCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7CiAJCW1lbWNweShwb3MsICZ0bXAsIHNpemVvZih1MTYpKTsKIAkJcG9zICs9IHNpemVvZih1MTYpOwotCQkvKiBUT0RPOiBuZWVkcyBhIGRlZmluZSBoZXJlIGZvciA8PCAyICovCiAJCSpwb3MrKyA9IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yIHwKLQkJCSAoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8IDIpOworCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwKKwkJCQlJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUKTsKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAkJcG9zICs9IHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcyk7CiAJCXBvcyArPSAyICsgNCArIDE7IC8qIGV4dCBpbmZvLCBCRiBjYXAsIGFudHNlbCAqLwpAQCAtOTQwLDkgKzk4NSwxMSBAQAogCSAqIHRoYXQgY2FsY3VsYXRlcyBsb2NhbC0+c2Nhbl9pZXNfbGVuLgogCSAqLwogCi0JaWYgKGllKSB7Ci0JCW1lbWNweShwb3MsIGllLCBpZV9sZW4pOwotCQlwb3MgKz0gaWVfbGVuOworCS8qIGFkZCBhbnkgcmVtYWluaW5nIGN1c3RvbSBJRXMgKi8KKwlpZiAoaWUgJiYgaWVfbGVuKSB7CisJCW5vZmZzZXQgPSBpZV9sZW47CisJCW1lbWNweShwb3MsIGllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJcG9zICs9IG5vZmZzZXQgLSBvZmZzZXQ7CiAJfQogCiAJcmV0dXJuIHBvcyAtIGJ1ZmZlcjsKQEAgLTk1NSw0MCArMTAwMiwzMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3M7CisJc2l6ZV90IGJ1Zl9sZW47CisJdTggKmJ1ZjsKIAotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCArCi0JCQkgICAgaWVfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkvKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCisJYnVmID0ga21hbGxvYygyMDAgKyBpZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBJRSAiCisJCSAgICAgICAiYnVmZmVyXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJ1Zl9sZW4gPSBpZWVlODAyMTFfYnVpbGRfcHJlcV9pZXMobG9jYWwsIGJ1ZiwgaWUsIGllX2xlbiwKKwkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCk7CisKKwlza2IgPSBpZWVlODAyMTFfcHJvYmVyZXFfZ2V0KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLAorCQkJCSAgICAgc3NpZCwgc3NpZF9sZW4sCisJCQkJICAgICBidWYsIGJ1Zl9sZW4pOworCiAJaWYgKGRzdCkgeworCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7CiAJCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwogCX0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IHNzaWRfbGVuOwotCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKLQlwb3MgKz0gc3NpZF9sZW47Ci0KLQlza2JfcHV0KHNrYiwgaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKGxvY2FsLCBwb3MsIGllLCBpZV9sZW4sCi0JCQkJCSAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQpKTsKIAogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOworCWtmcmVlKGJ1Zik7CiB9CiAKIHUzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTEwMzIsMTggKzEwNzIsMTYgQEAKIAlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBmYWxzZSk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyKTsKLQlkcnZfc3RvcChsb2NhbCk7CiAKIAlmbHVzaF93b3JrcXVldWUobG9jYWwtPndvcmtxdWV1ZSk7CisJZHJ2X3N0b3AobG9jYWwpOwogfQogCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlczsKIAogCWlmIChsb2NhbC0+c3VzcGVuZGVkKQpAQCAtMTA2MSw3ICsxMDk5LDcgQEAKIAkJaWYgKHJlcykgewogCQkJV0FSTihsb2NhbC0+c3VzcGVuZGVkLCAiSGFyd2FyZSBiZWNhbWUgdW5hdmFpbGFibGUgIgogCQkJICAgICAidXBvbiByZXN1bWUuIFRoaXMgaXMgY291bGQgYmUgYSBzb2Z0d2FyZSBpc3N1ZSIKLQkJCSAgICAgInByaW9yIHRvIHN1c3BlbmQgb3IgYSBoYXJ3YXJlIGlzc3VlXG4iKTsKKwkJCSAgICAgInByaW9yIHRvIHN1c3BlbmQgb3IgYSBoYXJkd2FyZSBpc3N1ZVxuIik7CiAJCQlyZXR1cm4gcmVzOwogCQl9CiAKQEAgLTEwNzIsMjkgKzExMTAsMjQgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCiAJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgotCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgewotCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKLQkJCXJlcyA9IGRydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCAmY29uZik7Ci0JCX0KKwkJICAgIGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCXJlcyA9IGRydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CiAJfQogCiAJLyogYWRkIFNUQXMgYmFjayAqLwotCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0YS0+dXBsb2FkZWQpIHsKIAkJCXNkYXRhID0gc3RhLT5zZGF0YTsKIAkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAogCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJCSAgICAgdS5hcCk7CiAKLQkJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9BREQsCi0JCQkJICAgICAgICZzdGEtPnN0YSk7CisJCQlXQVJOX09OKGRydl9zdGFfYWRkKGxvY2FsLCBzZGF0YSwgJnN0YS0+c3RhKSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCiAJLyogQ2xlYXIgU3VzcGVuZCBzdGF0ZSBzbyB0aGF0IEFEREJBIHJlcXVlc3RzIGNhbiBiZSBwcm9jZXNzZWQgKi8KIApAQCAtMTExOSw3ICsxMTUyLDcgQEAKIAkvKiBGaW5hbGx5IGFsc28gcmVjb25maWd1cmUgYWxsIHRoZSBCU1MgaW5mb3JtYXRpb24gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJdTMyIGNoYW5nZWQgPSB+MDsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CkBAIC0xMTQ1LDkgKzExNzgsMTcgQEAKIAkJfQogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCS8qIGFkZCBiYWNrIGtleXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCi0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oaHcsCkBAIC0xMTg0LDEzICsxMjI1LDE0MyBAQAogCiAJYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKIAkJbWVzaF9wbGlua19yZXN0YXJ0KHN0YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAjZWxzZQogCVdBUk5fT04oMSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjaGVja19tZ2Rfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkLAorCQkJICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgKnNtcHNfbW9kZSkKK3sKKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQpIHsKKwkJKnNtcHNfbW9kZSA9IGlmbWdkLT5hcF9zbXBzOworCisJCWlmICgqc21wc19tb2RlID09IElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQykgeworCQkJaWYgKGlmbWdkLT5wb3dlcnNhdmUpCisJCQkJKnNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM7CisJCQllbHNlCisJCQkJKnNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwkJfQorCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKiBtdXN0IGhvbGQgaWZsaXN0X210eCAqLwordm9pZCBpZWVlODAyMTFfcmVjYWxjX3NtcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpmb3JzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCWludCBjb3VudCA9IDA7CisKKwlpZiAoZm9yc2RhdGEpCisJCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZm9yc2RhdGEtPnUubWdkLm10eCkpOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZsb2NhbC0+aWZsaXN0X210eCkpOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGltcHJvdmVkIHRvIGhhbmRsZSBtdWx0aXBsZQorCSAqIGludGVyZmFjZXMgYmV0dGVyLCBidXQgcmlnaHQgbm93IGl0IG1ha2VzIGFueQorCSAqIG5vbi1zdGF0aW9uIGludGVyZmFjZXMgZm9yY2UgU00gUFMgdG8gYmUgdHVybmVkCisJICogb2ZmLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdGlvbiBpbnRlcmZhY2VzIGl0CisJICogY291bGQgYWxzbyB1c2UgdGhlIGJlc3QgcG9zc2libGUgbW9kZSwgZS5nLiBpZgorCSAqIG9uZSBpcyBpbiBzdGF0aWMgYW5kIHRoZSBvdGhlciBpbiBkeW5hbWljIHRoZW4KKwkgKiBkeW5hbWljIGlzIG9rLgorCSAqLworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlnb3RvIHNldDsKKwkJaWYgKHNkYXRhICE9IGZvcnNkYXRhKSB7CisJCQkvKgorCQkJICogVGhpcyBuZXN0ZWQgaXMgb2sgLS0gd2UgYXJlIGhvbGRpbmcgdGhlIGlmbGlzdF9tdHgKKwkJCSAqIHNvIGNhbid0IGdldCBoZXJlIHR3aWNlIG9yIHNvLiBCdXQgaXQncyByZXF1aXJlZAorCQkJICogc2luY2Ugbm9ybWFsbHkgd2UgYWNxdWlyZSBpdCBmaXJzdCBhbmQgdGhlbiB0aGUKKwkJCSAqIGlmbGlzdF9tdHguCisJCQkgKi8KKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZzZGF0YS0+dS5tZ2QubXR4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCQljb3VudCArPSBjaGVja19tZ2Rfc21wcygmc2RhdGEtPnUubWdkLCAmc21wc19tb2RlKTsKKwkJCW11dGV4X3VubG9jaygmc2RhdGEtPnUubWdkLm10eCk7CisJCX0gZWxzZQorCQkJY291bnQgKz0gY2hlY2tfbWdkX3NtcHMoJnNkYXRhLT51Lm1nZCwgJnNtcHNfbW9kZSk7CisKKwkJaWYgKGNvdW50ID4gMSkgeworCQkJc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoc21wc19tb2RlID09IGxvY2FsLT5zbXBzX21vZGUpCisJCXJldHVybjsKKworIHNldDoKKwlsb2NhbC0+c21wc19tb2RlID0gc21wc19tb2RlOworCS8qIGNoYW5nZWQgZmxhZyBpcyBhdXRvLWRldGVjdGVkIGZvciB0aGlzICovCisJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7Cit9CisKK3N0YXRpYyBib29sIGllZWU4MDIxMV9pZF9pbl9saXN0KGNvbnN0IHU4ICppZHMsIGludCBuX2lkcywgdTggaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9pZHM7IGkrKykKKwkJaWYgKGlkc1tpXSA9PSBpZCkKKwkJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaWVfc3BsaXQgLSBzcGxpdCBhbiBJRSBidWZmZXIgYWNjb3JkaW5nIHRvIG9yZGVyaW5nCisgKgorICogQGllczogdGhlIElFIGJ1ZmZlcgorICogQGllbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBJRSBidWZmZXIKKyAqIEBpZHM6IGFuIGFycmF5IHdpdGggZWxlbWVudCBJRHMgdGhhdCBhcmUgYWxsb3dlZCBiZWZvcmUKKyAqCXRoZSBzcGxpdAorICogQG5faWRzOiB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCBJRCBhcnJheQorICogQG9mZnNldDogb2Zmc2V0IHdoZXJlIHRvIHN0YXJ0IHNwbGl0dGluZyBpbiB0aGUgYnVmZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBzcGxpdHMgYW4gSUUgYnVmZmVyIGJ5IHVwZGF0aW5nIHRoZSBAb2Zmc2V0CisgKiB2YXJpYWJsZSB0byBwb2ludCB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGJ1ZmZlciBzaG91bGQgYmUKKyAqIHNwbGl0LgorICoKKyAqIEl0IGFzc3VtZXMgdGhhdCB0aGUgZ2l2ZW4gSUUgYnVmZmVyIGlzIHdlbGwtZm9ybWVkLCB0aGlzCisgKiBoYXMgdG8gYmUgZ3VhcmFudGVlZCBieSB0aGUgY2FsbGVyIQorICoKKyAqIEl0IGFsc28gYXNzdW1lcyB0aGF0IHRoZSBJRXMgaW4gdGhlIGJ1ZmZlciBhcmUgb3JkZXJlZAorICogY29ycmVjdGx5LCBpZiBub3QgdGhlIHJlc3VsdCBvZiB1c2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90CisgKiBiZSBvcmRlcmVkIGNvcnJlY3RseSBlaXRoZXIsIGkuZS4gaXQgZG9lcyBubyByZW9yZGVyaW5nLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgd2hlcmUgdGhlIG5leHQgcGFydCBvZiB0aGUKKyAqIGJ1ZmZlciBzdGFydHMsIHdoaWNoIG1heSBiZSBAaWVsZW4gaWYgdGhlIGVudGlyZSAocmVtYWluZGVyKQorICogb2YgdGhlIGJ1ZmZlciBzaG91bGQgYmUgdXNlZC4KKyAqLworc2l6ZV90IGllZWU4MDIxMV9pZV9zcGxpdChjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sCisJCQkgIGNvbnN0IHU4ICppZHMsIGludCBuX2lkcywgc2l6ZV90IG9mZnNldCkKK3sKKwlzaXplX3QgcG9zID0gb2Zmc2V0OworCisJd2hpbGUgKHBvcyA8IGllbGVuICYmIGllZWU4MDIxMV9pZF9pbl9saXN0KGlkcywgbl9pZHMsIGllc1twb3NdKSkKKwkJcG9zICs9IDIgKyBpZXNbcG9zICsgMV07CisKKwlyZXR1cm4gcG9zOworfQorCitzaXplX3QgaWVlZTgwMjExX2llX3NwbGl0X3ZlbmRvcihjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sIHNpemVfdCBvZmZzZXQpCit7CisJc2l6ZV90IHBvcyA9IG9mZnNldDsKKworCXdoaWxlIChwb3MgPCBpZWxlbiAmJiBpZXNbcG9zXSAhPSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpCisJCXBvcyArPSAyICsgaWVzW3BvcyArIDFdOworCisJcmV0dXJuIHBvczsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXAuYyBiL25ldC9tYWM4MDIxMS93ZXAuYwppbmRleCAyNDcxMjNmLi41ZDc0NWYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2VwLmMKKysrIGIvbmV0L21hYzgwMjExL3dlcC5jCkBAIC0zMDUsMjAgKzMwNSwxOSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCWlmICghKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKSB7CisJaWYgKCFpbmZvLT5jb250cm9sLmh3X2tleSkgewogCQlpZiAoaWVlZTgwMjExX3dlcF9lbmNyeXB0KHR4LT5sb2NhbCwgc2tiLCB0eC0+a2V5LT5jb25mLmtleSwKIAkJCQkJICB0eC0+a2V5LT5jb25mLmtleWxlbiwKIAkJCQkJICB0eC0+a2V5LT5jb25mLmtleWlkeCkpCiAJCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKLQkJaWYgKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHsKLQkJCWlmICghaWVlZTgwMjExX3dlcF9hZGRfaXYodHgtPmxvY2FsLCBza2IsCi0JCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5bGVuLAotCQkJCQkJICB0eC0+a2V5LT5jb25mLmtleWlkeCkpCi0JCQkJcmV0dXJuIC0xOwotCQl9CisJfSBlbHNlIGlmIChpbmZvLT5jb250cm9sLmh3X2tleS0+ZmxhZ3MgJgorCQkJSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSB7CisJCWlmICghaWVlZTgwMjExX3dlcF9hZGRfaXYodHgtPmxvY2FsLCBza2IsCisJCQkJCSAgdHgtPmtleS0+Y29uZi5rZXlsZW4sCisJCQkJCSAgdHgtPmtleS0+Y29uZi5rZXlpZHgpKQorCQkJcmV0dXJuIC0xOwogCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmMgYi9uZXQvbWFjODAyMTEvd21lLmMKaW5kZXggNzlkODg3ZGEuLjM0ZTZkMDIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuYworKysgYi9uZXQvbWFjODAyMTEvd21lLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAl9CiAKIAlpZiAoIXN0YSAmJiByYSAmJiAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocmEpKSB7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAkJaWYgKHN0YSkKIAkJCXN0YV9mbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd29yay5jIGIvbmV0L21hYzgwMjExL3dvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFlYTMwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3dvcmsuYwpAQCAtMCwwICsxLDExMDAgQEAKKy8qCisgKiBtYWM4MDIxMSB3b3JrIGltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDksIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgInJhdGUuaCIKKworI2RlZmluZSBJRUVFODAyMTFfQVVUSF9USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BVVRIX01BWF9UUklFUyAzCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMgMworI2RlZmluZSBJRUVFODAyMTFfTUFYX1BST0JFX1RSSUVTIDUKKworZW51bSB3b3JrX2FjdGlvbiB7CisJV09SS19BQ1RfTk9ORSwKKwlXT1JLX0FDVF9USU1FT1VULAorCVdPUktfQUNUX0RPTkUsCit9OworCisKKy8qIHV0aWxzICovCitzdGF0aWMgaW5saW5lIHZvaWQgQVNTRVJUX1dPUktfTVRYKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmbG9jYWwtPndvcmtfbXR4KSk7Cit9CisKKy8qCisgKiBXZSBjYW4gaGF2ZSBtdWx0aXBsZSB3b3JrIGl0ZW1zIChhbmQgY29ubmVjdGlvbiBwcm9iaW5nKQorICogc2NoZWR1bGluZyB0aGlzIHRpbWVyLCBidXQgd2UgbmVlZCB0byB0YWtlIGNhcmUgdG8gb25seQorICogcmVzY2hlZHVsZSBpdCB3aGVuIGl0IHNob3VsZCBmaXJlIF9lYXJsaWVyXyB0aGFuIGl0IHdhcworICogYXNrZWQgZm9yIGJlZm9yZSwgb3IgaWYgaXQncyBub3QgcGVuZGluZyByaWdodCBub3cuIFRoaXMKKyAqIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdC4gTm90ZSB0aGF0IGl0IHRoZW4gaXMgcmVxdWlyZWQgdG8KKyAqIHJ1biB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgdGltZW91dHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZQorICogaGFzIGhhcHBlbmVkIC0tIHRoZSB3b3JrIHRoYXQgcnVucyBmcm9tIHRoaXMgdGltZXIgd2lsbAorICogZG8gdGhhdC4KKyAqLworc3RhdGljIHZvaWQgcnVuX2FnYWluKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJQVNTRVJUX1dPUktfTVRYKGxvY2FsKTsKKworCWlmICghdGltZXJfcGVuZGluZygmbG9jYWwtPndvcmtfdGltZXIpIHx8CisJICAgIHRpbWVfYmVmb3JlKHRpbWVvdXQsIGxvY2FsLT53b3JrX3RpbWVyLmV4cGlyZXMpKQorCQltb2RfdGltZXIoJmxvY2FsLT53b3JrX3RpbWVyLCB0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgd29ya19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3ayA9CisJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaWVlZTgwMjExX3dvcmssIHJjdV9oZWFkKTsKKworCWtmcmVlKHdrKTsKK30KKwordm9pZCBmcmVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwljYWxsX3JjdSgmd2stPnJjdV9oZWFkLCB3b3JrX2ZyZWVfcmN1KTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhjb25zdCB1OCAqc3VwcF9yYXRlcywgaW50IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCit7CisJaW50IGksIGosIGNvdW50OworCSpyYXRlcyA9IDA7CisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCByYXRlID0gKHN1cHBfcmF0ZXNbaV0gJiAweDdGKSAqIDU7CisKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gcmF0ZSkgeworCQkJCSpyYXRlcyB8PSBCSVQoaik7CisJCQkJY291bnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hZGRfaHRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmh0X2luZm9faWUsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbzsKKwl1OCAqcG9zOworCXUzMiBmbGFncyA9IGNoYW5uZWwtPmZsYWdzOworCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKKwlfX2xlMTYgdG1wOworCisJaWYgKCFzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuOworCisJaWYgKCFodF9pbmZvX2llKQorCQlyZXR1cm47CisKKwlpZiAoaHRfaW5mb19pZVsxXSA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKQorCQlyZXR1cm47CisKKwlodF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pbmZvX2llICsgMik7CisKKwkvKiBkZXRlcm1pbmUgY2FwYWJpbGl0eSBmbGFncyAqLworCisJaWYgKGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6ICYmCisJICAgIHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwl9CisKKwlzd2l0Y2ggKGh0X2luZm8tPmh0X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7CisJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKKwkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c6CisJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykgeworCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogc2V0IFNNIFBTIG1vZGUgcHJvcGVybHkgKi8KKwljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU01fUFM7CisJc3dpdGNoIChzbXBzKSB7CisJY2FzZSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM6CisJY2FzZSBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM6CisJCVdBUk5fT04oMSk7CisJY2FzZSBJRUVFODAyMTFfU01QU19PRkY6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCA8PAorCQkJSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUMgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfRFlOQU1JQzoKKwkJY2FwIHw9IFdMQU5fSFRfQ0FQX1NNX1BTX0RZTkFNSUMgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCX0KKworCS8qIHJlc2VydmUgYW5kIGZpbGwgSUUgKi8KKworCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKKwkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOworCW1lbXNldChwb3MsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCisJLyogY2FwYWJpbGl0eSBmbGFncyAqLworCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7CisJbWVtY3B5KHBvcywgJnRtcCwgc2l6ZW9mKHUxNikpOworCXBvcyArPSBzaXplb2YodTE2KTsKKworCS8qIEFNUERVIHBhcmFtZXRlcnMgKi8KKwkqcG9zKysgPSBzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciB8CisJCSAoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8CisJCQlJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUKTsKKworCS8qIE1DUyBzZXQgKi8KKwltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCXBvcyArPSBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpOworCisJLyogZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisJcG9zICs9IHNpemVvZihfX2xlMTYpOworCisJLyogQkYgY2FwYWJpbGl0aWVzICovCisJcG9zICs9IHNpemVvZihfX2xlMzIpOworCisJLyogYW50ZW5uYSBzZWxlY3Rpb24gKi8KKwlwb3MgKz0gc2l6ZW9mKHU4KTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvcywgcW9zX2luZm87CisJY29uc3QgdTggKmllczsKKwlzaXplX3Qgb2Zmc2V0ID0gMCwgbm9mZnNldDsKKwlpbnQgaSwgbGVuLCBjb3VudCwgcmF0ZXNfbGVuLCBzdXBwX3JhdGVzX2xlbjsKKwl1MTYgY2FwYWI7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdTMyIHJhdGVzID0gMDsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1t3ay0+Y2hhbi0+YmFuZF07CisKKwkvKgorCSAqIEdldCBhbGwgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYW5kIHRoZSBBUCBhcworCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0IG9mIHRoZWlyIHJhdGVzCisJICogaW4gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgKGUuZy4gRC1MaW5rIERBUCAxMzUzIGluCisJICogYi1vbmx5IG1vZGUpLi4uCisJICovCisJcmF0ZXNfbGVuID0gaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMod2stPmFzc29jLnN1cHBfcmF0ZXMsCisJCQkJCSAgICAgICB3ay0+YXNzb2Muc3VwcF9yYXRlc19sZW4sCisJCQkJCSAgICAgICBzYmFuZCwgJnJhdGVzKTsKKworCXNrYiA9IGFsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKworCQkJc2l6ZW9mKCptZ210KSArIC8qIGJpdCB0b28gbXVjaCBidXQgZG9lc24ndCBtYXR0ZXIgKi8KKwkJCTIgKyB3ay0+YXNzb2Muc3NpZF9sZW4gKyAvKiBTU0lEICovCisJCQk0ICsgcmF0ZXNfbGVuICsgLyogKGV4dGVuZGVkKSByYXRlcyAqLworCQkJNCArIC8qIHBvd2VyIGNhcGFiaWxpdHkgKi8KKwkJCTIgKyAyICogc2JhbmQtPm5fY2hhbm5lbHMgKyAvKiBzdXBwb3J0ZWQgY2hhbm5lbHMgKi8KKwkJCTIgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApICsgLyogSFQgKi8KKwkJCXdrLT5pZV9sZW4gKyAvKiBleHRyYSBJRXMgKi8KKwkJCTksIC8qIFdNTSAqLworCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCisJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwljYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisKKwlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRSkpCisJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOworCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUpKQorCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOworCX0KKworCWlmICh3ay0+YXNzb2MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKworCWlmICgod2stPmFzc29jLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKKwkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCB3ay0+ZmlsdGVyX3RhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIHdrLT5maWx0ZXJfdGEsIEVUSF9BTEVOKTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdrLT5hc3NvYy5wcmV2X2Jzc2lkKSkgeworCQlza2JfcHV0KHNrYiwgMTApOworCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOworCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CisJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KKwkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOworCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCB3ay0+YXNzb2MucHJldl9ic3NpZCwKKwkJICAgICAgIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQlza2JfcHV0KHNrYiwgNCk7CisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOworCQltZ210LT51LmFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOworCQltZ210LT51LmFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQorCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7CisJfQorCisJLyogU1NJRCAqLworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgd2stPmFzc29jLnNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IHdrLT5hc3NvYy5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCB3ay0+YXNzb2Muc3NpZCwgd2stPmFzc29jLnNzaWRfbGVuKTsKKworCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLworCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOworCWlmIChzdXBwX3JhdGVzX2xlbiA+IDgpCisJCXN1cHBfcmF0ZXNfbGVuID0gODsKKworCWxlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOworCXBvcyA9IHNrYl9wdXQoc2tiLCBzdXBwX3JhdGVzX2xlbiArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJKnBvcysrID0gc3VwcF9yYXRlc19sZW47CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJaWYgKEJJVChpKSAmIHJhdGVzKSB7CisJCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCQkJaWYgKCsrY291bnQgPT0gOCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyYXRlc19sZW4gPiBjb3VudCkgeworCQlwb3MgPSBza2JfcHV0KHNrYiwgcmF0ZXNfbGVuIC0gY291bnQgKyAyKTsKKwkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCSpwb3MrKyA9IHJhdGVzX2xlbiAtIGNvdW50OworCisJCWZvciAoaSsrOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJaWYgKEJJVChpKSAmIHJhdGVzKSB7CisJCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgeworCQkvKiAxLiBwb3dlciBjYXBhYmlsaXRpZXMgKi8KKwkJcG9zID0gc2tiX3B1dChza2IsIDQpOworCQkqcG9zKysgPSBXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWTsKKwkJKnBvcysrID0gMjsKKwkJKnBvcysrID0gMDsgLyogbWluIHR4IHBvd2VyICovCisJCSpwb3MrKyA9IHdrLT5jaGFuLT5tYXhfcG93ZXI7IC8qIG1heCB0eCBwb3dlciAqLworCisJCS8qIDIuIHN1cHBvcnRlZCBjaGFubmVscyAqLworCQkvKiBUT0RPOiBnZXQgdGhpcyBpbiByZWcgZG9tYWluIGZvcm1hdCAqLworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiAqIHNiYW5kLT5uX2NoYW5uZWxzICsgMik7CisJCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBPUlRFRF9DSEFOTkVMUzsKKwkJKnBvcysrID0gMiAqIHNiYW5kLT5uX2NoYW5uZWxzOworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJCQlzYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEpOworCQkJKnBvcysrID0gMTsgLyogb25lIGNoYW5uZWwgaW4gdGhlIHN1YmJhbmQqLworCQl9CisJfQorCisJLyogaWYgcHJlc2VudCwgYWRkIGFueSBjdXN0b20gSUVzIHRoYXQgZ28gYmVmb3JlIEhUICovCisJaWYgKHdrLT5pZV9sZW4gJiYgd2stPmllKSB7CisJCXN0YXRpYyBjb25zdCB1OCBiZWZvcmVfaHRbXSA9IHsKKwkJCVdMQU5fRUlEX1NTSUQsCisJCQlXTEFOX0VJRF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWSwKKwkJCVdMQU5fRUlEX1NVUFBPUlRFRF9DSEFOTkVMUywKKwkJCVdMQU5fRUlEX1JTTiwKKwkJCVdMQU5fRUlEX1FPU19DQVBBLAorCQkJV0xBTl9FSURfUlJNX0VOQUJMRURfQ0FQQUJJTElUSUVTLAorCQkJV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOLAorCQkJV0xBTl9FSURfU1VQUE9SVEVEX1JFR1VMQVRPUllfQ0xBU1NFUywKKwkJfTsKKwkJbm9mZnNldCA9IGllZWU4MDIxMV9pZV9zcGxpdCh3ay0+aWUsIHdrLT5pZV9sZW4sCisJCQkJCSAgICAgYmVmb3JlX2h0LCBBUlJBWV9TSVpFKGJlZm9yZV9odCksCisJCQkJCSAgICAgb2Zmc2V0KTsKKwkJcG9zID0gc2tiX3B1dChza2IsIG5vZmZzZXQgLSBvZmZzZXQpOworCQltZW1jcHkocG9zLCB3ay0+aWUgKyBvZmZzZXQsIG5vZmZzZXQgLSBvZmZzZXQpOworCQlvZmZzZXQgPSBub2Zmc2V0OworCX0KKworCWlmICh3ay0+YXNzb2MudXNlXzExbiAmJiB3ay0+YXNzb2Mud21tX3VzZWQgJiYKKwkgICAgbG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQorCQlpZWVlODAyMTFfYWRkX2h0X2llKHNrYiwgd2stPmFzc29jLmh0X2luZm9ybWF0aW9uX2llLAorCQkJCSAgICBzYmFuZCwgd2stPmNoYW4sIHdrLT5hc3NvYy5zbXBzKTsKKworCS8qIGlmIHByZXNlbnQsIGFkZCBhbnkgY3VzdG9tIG5vbi12ZW5kb3IgSUVzIHRoYXQgZ28gYWZ0ZXIgSFQgKi8KKwlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKKwkJbm9mZnNldCA9IGllZWU4MDIxMV9pZV9zcGxpdF92ZW5kb3Iod2stPmllLCB3ay0+aWVfbGVuLAorCQkJCQkJICAgIG9mZnNldCk7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJbWVtY3B5KHBvcywgd2stPmllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJb2Zmc2V0ID0gbm9mZnNldDsKKwl9CisKKwlpZiAod2stPmFzc29jLndtbV91c2VkICYmIGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgeworCQlpZiAod2stPmFzc29jLnVhcHNkX3VzZWQpIHsKKwkJCXFvc19pbmZvID0gbG9jYWwtPnVhcHNkX3F1ZXVlczsKKwkJCXFvc19pbmZvIHw9IChsb2NhbC0+dWFwc2RfbWF4X3NwX2xlbiA8PAorCQkJCSAgICAgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9TSElGVCk7CisJCX0gZWxzZSB7CisJCQlxb3NfaW5mbyA9IDA7CisJCX0KKworCQlwb3MgPSBza2JfcHV0KHNrYiwgOSk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzsKKwkJKnBvcysrID0gNzsgLyogbGVuICovCisJCSpwb3MrKyA9IDB4MDA7IC8qIE1pY3Jvc29mdCBPVUkgMDA6NTA6RjIgKi8KKwkJKnBvcysrID0gMHg1MDsKKwkJKnBvcysrID0gMHhmMjsKKwkJKnBvcysrID0gMjsgLyogV01FICovCisJCSpwb3MrKyA9IDA7IC8qIFdNRSBpbmZvICovCisJCSpwb3MrKyA9IDE7IC8qIFdNRSB2ZXIgKi8KKwkJKnBvcysrID0gcW9zX2luZm87CisJfQorCisJLyogYWRkIGFueSByZW1haW5pbmcgY3VzdG9tIChpLmUuIHZlbmRvciBzcGVjaWZpYyBoZXJlKSBJRXMgKi8KKwlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKKwkJbm9mZnNldCA9IHdrLT5pZV9sZW47CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJbWVtY3B5KHBvcywgd2stPmllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwl9CisKKwlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9hdXRoX2JzcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CisJdTE2IGNhcGFfdmFsID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKworCWlmICh3ay0+cHJvYmVfYXV0aC5wcml2YWN5KQorCQljYXBhX3ZhbCB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKworCWNic3MgPSBjZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgd2stPmNoYW4sIHdrLT5maWx0ZXJfdGEsCisJCQkJd2stPnByb2JlX2F1dGguc3NpZCwgd2stPnByb2JlX2F1dGguc3NpZF9sZW4sCisJCQkJV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZLAorCQkJCWNhcGFfdmFsKTsKKwlpZiAoIWNic3MpCisJCXJldHVybjsKKworCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCBjYnNzKTsKKwljZmc4MDIxMV9wdXRfYnNzKGNic3MpOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXdrLT5wcm9iZV9hdXRoLnRyaWVzKys7CisJaWYgKHdrLT5wcm9iZV9hdXRoLnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvICVwTSB0aW1lZCBvdXRcbiIsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgd2stPmZpbHRlcl90YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQlpZWVlODAyMTFfcmVtb3ZlX2F1dGhfYnNzKGxvY2FsLCB3ayk7CisKKwkJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gJXBNICh0cnkgJWQpXG4iLAorCQkJc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEsIHdrLT5wcm9iZV9hdXRoLnRyaWVzKTsKKworCS8qCisJICogRGlyZWN0IHByb2JlIGlzIHNlbnQgdG8gYnJvYWRjYXN0IGFkZHJlc3MgYXMgc29tZSBBUHMKKwkgKiB3aWxsIG5vdCBhbnN3ZXIgdG8gZGlyZWN0IHBhY2tldCBpbiB1bmFzc29jaWF0ZWQgc3RhdGUuCisJICovCisJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLCB3ay0+cHJvYmVfYXV0aC5zc2lkLAorCQkJCSB3ay0+cHJvYmVfYXV0aC5zc2lkX2xlbiwgTlVMTCwgMCk7CisKKwl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUOworCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCisJcmV0dXJuIFdPUktfQUNUX05PTkU7Cit9CisKKworc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwl3ay0+cHJvYmVfYXV0aC50cmllcysrOworCWlmICh3ay0+cHJvYmVfYXV0aC50cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIHdpdGggJXBNIgorCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsIHNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KKwkJICovCisJCWllZWU4MDIxMV9yZW1vdmVfYXV0aF9ic3MobG9jYWwsIHdrKTsKKworCQlyZXR1cm4gV09SS19BQ1RfVElNRU9VVDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZSB3aXRoICVwTSAodHJ5ICVkKVxuIiwKKwkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEsIHdrLT5wcm9iZV9hdXRoLnRyaWVzKTsKKworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDEsIHdrLT5wcm9iZV9hdXRoLmFsZ29yaXRobSwgd2stPmllLAorCQkJICAgIHdrLT5pZV9sZW4sIHdrLT5maWx0ZXJfdGEsIE5VTEwsIDAsIDApOworCXdrLT5wcm9iZV9hdXRoLnRyYW5zYWN0aW9uID0gMjsKKworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7CisJcnVuX2FnYWluKGxvY2FsLCB3ay0+dGltZW91dCk7CisKKwlyZXR1cm4gV09SS19BQ1RfTk9ORTsKK30KKworc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwl3ay0+YXNzb2MudHJpZXMrKzsKKwlpZiAod2stPmFzc29jLnRyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIHdpdGggJXBNIgorCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgd2stPmZpbHRlcl90YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQlpZiAod2stPmFzc29jLmJzcykKKwkJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCB3ay0+YXNzb2MuYnNzKTsKKworCQlyZXR1cm4gV09SS19BQ1RfVElNRU9VVDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoICVwTSAodHJ5ICVkKVxuIiwKKwkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEsIHdrLT5hc3NvYy50cmllcyk7CisJaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEsIHdrKTsKKworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUOworCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCisJcmV0dXJuIFdPUktfQUNUX05PTkU7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsX3RpbWVvdXQoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwkvKgorCSAqIEZpcnN0IHRpbWUgd2UgcnVuLCBkbyBub3RoaW5nIC0tIHRoZSBnZW5lcmljIGNvZGUgd2lsbAorCSAqIGhhdmUgc3dpdGNoZWQgdG8gdGhlIHJpZ2h0IGNoYW5uZWwgZXRjLgorCSAqLworCWlmICghd2stPnN0YXJ0ZWQpIHsKKwkJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh3ay0+cmVtYWluLmR1cmF0aW9uKTsKKworCQljZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHdrLT5zZGF0YS0+ZGV2LCAodW5zaWduZWQgbG9uZykgd2ssCisJCQkJCSAgd2stPmNoYW4sIHdrLT5jaGFuX3R5cGUsCisJCQkJCSAgd2stPnJlbWFpbi5kdXJhdGlvbiwgR0ZQX0tFUk5FTCk7CisKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisJfQorCisJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwl1OCAqcG9zOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJcG9zID0gbWdtdC0+dS5hdXRoLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCWlmICghZWxlbXMuY2hhbGxlbmdlKQorCQlyZXR1cm47CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgd2stPnByb2JlX2F1dGguYWxnb3JpdGhtLAorCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAorCQkJICAgIHdrLT5maWx0ZXJfdGEsIHdrLT5wcm9iZV9hdXRoLmtleSwKKwkJCSAgICB3ay0+cHJvYmVfYXV0aC5rZXlfbGVuLCB3ay0+cHJvYmVfYXV0aC5rZXlfaWR4KTsKKwl3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbiA9IDQ7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQoreworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CisKKwlpZiAod2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfQVVUSCkKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlpZiAobGVuIDwgMjQgKyA2KQorCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKworCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKKwlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCWlmIChhdXRoX2FsZyAhPSB3ay0+cHJvYmVfYXV0aC5hbGdvcml0aG0gfHwKKwkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSB3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwTSBkZW5pZWQgYXV0aGVudGljYXRpb24gKHN0YXR1cyAlZClcbiIsCisJCSAgICAgICB3ay0+c2RhdGEtPm5hbWUsIG1nbXQtPnNhLCBzdGF0dXNfY29kZSk7CisJCXJldHVybiBXT1JLX0FDVF9ET05FOworCX0KKworCXN3aXRjaCAod2stPnByb2JlX2F1dGguYWxnb3JpdGhtKSB7CisJY2FzZSBXTEFOX0FVVEhfT1BFTjoKKwljYXNlIFdMQU5fQVVUSF9MRUFQOgorCWNhc2UgV0xBTl9BVVRIX0ZUOgorCQlicmVhazsKKwljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgorCQlpZiAod2stPnByb2JlX2F1dGgudHJhbnNhY3Rpb24gIT0gNCkgeworCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHdrLCBtZ210LCBsZW4pOworCQkJLyogbmVlZCBhbm90aGVyIGZyYW1lICovCisJCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZWRcbiIsIHdrLT5zZGF0YS0+bmFtZSk7CisJcmV0dXJuIFdPUktfQUNUX0RPTkU7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCisJCQkgICAgIGJvb2wgcmVhc3NvYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKwl1OCAqcG9zOworCisJLyoKKwkgKiBBc3NvY1Jlc3AgYW5kIFJlYXNzb2NSZXNwIGhhdmUgaWRlbnRpY2FsIHN0cnVjdHVyZSwgc28gcHJvY2VzcyBib3RoCisJICogb2YgdGhlbSBpbiB0aGlzIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKGxlbiA8IDI0ICsgNikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwljYXBhYl9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLnN0YXR1c19jb2RlKTsKKwlhaWQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuYWlkKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXNzc29jUmVzcCBmcm9tICVwTSAoY2FwYWI9MHgleCAiCisJICAgICAgICJzdGF0dXM9JWQgYWlkPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCisJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOworCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXBNIHJlamVjdGVkIGFzc29jaWF0aW9uIHRlbXBvcmFyaWx5OyAiCisJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5zYSwgdHUsIG1zKTsKKwkJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcyk7CisJCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQorCQkJcnVuX2FnYWluKGxvY2FsLCB3ay0+dGltZW91dCk7CisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCX0KKworCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwTSBkZW5pZWQgYXNzb2NpYXRpb24gKGNvZGU9JWQpXG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPnNhLCBzdGF0dXNfY29kZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5uYW1lKTsKKworCXJldHVybiBXT1JLX0FDVF9ET05FOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXNpemVfdCBiYXNlbGVuOworCisJQVNTRVJUX1dPUktfTVRYKGxvY2FsKTsKKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLCBzZGF0YS0+bmFtZSk7CisJcmV0dXJuIFdPUktfQUNUX0RPTkU7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV93b3JrX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKwllbnVtIHdvcmtfYWN0aW9uIHJtYSA9IFdPUktfQUNUX05PTkU7CisJdTE2IGZjOworCisJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKKworCQlzd2l0Y2ggKHdrLT50eXBlKSB7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOgorCQljYXNlIElFRUU4MDIxMV9XT1JLX0FVVEg6CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQVNTT0M6CisJCQlic3NpZCA9IHdrLT5maWx0ZXJfdGE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQmVmb3JlIHF1ZXVpbmcsIHdlIGFscmVhZHkgdmVyaWZpZWQgbWdtdC0+c2EsCisJCSAqIHNvIHRoaXMgaXMgbmVlZGVkIGp1c3QgZm9yIG1hdGNoaW5nLgorCQkgKi8KKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgbWdtdC0+YnNzaWQpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHdrLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJCQkgICByeF9zdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHdrLCBtZ210LCBza2ItPmxlbik7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKKwkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aod2ssIG1nbXQsCisJCQkJCQkJICAgc2tiLT5sZW4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHdrLCBtZ210LAorCQkJCQkJCSAgIHNrYi0+bGVuLCB0cnVlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJfQorCQkvKgorCQkgKiBXZSd2ZSBwcm9jZXNzZWQgdGhpcyBmcmFtZSBmb3IgdGhhdCB3b3JrLCBzbyBpdCBjYW4ndAorCQkgKiBiZWxvbmcgdG8gYW5vdGhlciB3b3JrIHN0cnVjdC4KKwkJICogTkI6IHRoaXMgaXMgYWxzbyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgZm9yICdybWEnIQorCQkgKi8KKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChybWEpIHsKKwljYXNlIFdPUktfQUNUX05PTkU6CisJCWJyZWFrOworCWNhc2UgV09SS19BQ1RfRE9ORToKKwkJbGlzdF9kZWxfcmN1KCZ3ay0+bGlzdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwlpZiAocm1hICE9IFdPUktfQUNUX0RPTkUpCisJCWdvdG8gb3V0OworCisJc3dpdGNoICh3ay0+ZG9uZSh3aywgc2tiKSkgeworCWNhc2UgV09SS19ET05FX0RFU1RST1k6CisJCWZyZWVfd29yayh3ayk7CisJCWJyZWFrOworCWNhc2UgV09SS19ET05FX1JFUVVFVUU6CisJCXN5bmNocm9uaXplX3JjdSgpOworCQl3ay0+c3RhcnRlZCA9IGZhbHNlOyAvKiByZXN0YXJ0ICovCisJCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJCWxpc3RfYWRkX3RhaWwoJndrLT5saXN0LCAmbG9jYWwtPndvcmtfbGlzdCk7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKwl9CisKKyBvdXQ6CisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV93b3JrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9ICh2b2lkICopIGRhdGE7CisKKwlpZiAobG9jYWwtPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfd29ya193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCB3b3JrX3dvcmspOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywgKnRtcDsKKwlMSVNUX0hFQUQoZnJlZV93b3JrKTsKKwllbnVtIHdvcmtfYWN0aW9uIHJtYTsKKwlib29sIHJlbWFpbl9vZmZfY2hhbm5lbCA9IGZhbHNlOworCisJaWYgKGxvY2FsLT5zY2FubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpZWVlODAyMTFfcXVldWVfd29yaygpIHNob3VsZCBoYXZlIHBpY2tlZCB1cCBtb3N0IGNhc2VzLAorCSAqIGhlcmUgd2UnbGwgcGljayB0aGUgdGhlIHJlc3QuCisJICovCisJaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwgIndvcmsgc2NoZWR1bGVkIHdoaWxlIGdvaW5nIHRvIHN1c3BlbmRcbiIpKQorCQlyZXR1cm47CisKKwkvKiBmaXJzdCBwcm9jZXNzIGZyYW1lcyB0byBhdm9pZCB0aW1pbmcgb3V0IHdoaWxlIGEgZnJhbWUgaXMgcGVuZGluZyAqLworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT53b3JrX3NrYl9xdWV1ZSkpKQorCQlpZWVlODAyMTFfd29ya19yeF9xdWV1ZWRfbWdtdChsb2NhbCwgc2tiKTsKKworCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdrLCB0bXAsICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWJvb2wgc3RhcnRlZCA9IHdrLT5zdGFydGVkOworCisJCS8qIG1hcmsgd29yayBhcyBzdGFydGVkIGlmIGl0J3Mgb24gdGhlIGN1cnJlbnQgb2ZmLWNoYW5uZWwgKi8KKwkJaWYgKCFzdGFydGVkICYmIGxvY2FsLT50bXBfY2hhbm5lbCAmJgorCQkgICAgd2stPmNoYW4gPT0gbG9jYWwtPnRtcF9jaGFubmVsICYmCisJCSAgICB3ay0+Y2hhbl90eXBlID09IGxvY2FsLT50bXBfY2hhbm5lbF90eXBlKSB7CisJCQlzdGFydGVkID0gdHJ1ZTsKKwkJCXdrLT50aW1lb3V0ID0gamlmZmllczsKKwkJfQorCisJCWlmICghc3RhcnRlZCAmJiAhbG9jYWwtPnRtcF9jaGFubmVsKSB7CisJCQkvKgorCQkJICogVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyBieSBsZWF2aW5nIHRoZQorCQkJICoJIHN0YXRpb24gdmlmcyBpbiBhd2FrZSBtb2RlIGlmIHRoZXkKKwkJCSAqCSBoYXBwZW4gdG8gYmUgb24gdGhlIHNhbWUgY2hhbm5lbCBhcworCQkJICoJIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbAorCQkJICovCisJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX2JlYWNvbmluZyhsb2NhbCk7CisJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24obG9jYWwpOworCisJCQlsb2NhbC0+dG1wX2NoYW5uZWwgPSB3ay0+Y2hhbjsKKwkJCWxvY2FsLT50bXBfY2hhbm5lbF90eXBlID0gd2stPmNoYW5fdHlwZTsKKwkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworCQkJc3RhcnRlZCA9IHRydWU7CisJCQl3ay0+dGltZW91dCA9IGppZmZpZXM7CisJCX0KKworCQkvKiBkb24ndCB0cnkgdG8gd29yayB3aXRoIGl0ZW1zIHRoYXQgYXJlbid0IHN0YXJ0ZWQgKi8KKwkJaWYgKCFzdGFydGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh3ay0+dGltZW91dCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHdvcmsgaXRlbSBpc24ndCBzdXBwb3NlZCB0byBiZSB3b3JrZWQgb24KKwkJCSAqIHJpZ2h0IG5vdywgYnV0IHRha2UgY2FyZSB0byBhZGp1c3QgdGhlIHRpbWVyCisJCQkgKiBwcm9wZXJseS4KKwkJCSAqLworCQkJcnVuX2FnYWluKGxvY2FsLCB3ay0+dGltZW91dCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAod2stPnR5cGUpIHsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CisJCQkvKiBub3RoaW5nICovCisJCQlybWEgPSBXT1JLX0FDVF9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQUJPUlQ6CisJCQlybWEgPSBXT1JLX0FDVF9USU1FT1VUOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOgorCQkJcm1hID0gaWVlZTgwMjExX2RpcmVjdF9wcm9iZSh3ayk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0ZSh3ayk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BU1NPQzoKKwkJCXJtYSA9IGllZWU4MDIxMV9hc3NvY2lhdGUod2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfUkVNQUlOX09OX0NIQU5ORUw6CisJCQlybWEgPSBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfdGltZW91dCh3ayk7CisJCQlicmVhazsKKwkJfQorCisJCXdrLT5zdGFydGVkID0gc3RhcnRlZDsKKworCQlzd2l0Y2ggKHJtYSkgeworCQljYXNlIFdPUktfQUNUX05PTkU6CisJCQkvKiBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHRpbWVvdXQgKi8KKwkJCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgV09SS19BQ1RfVElNRU9VVDoKKwkJCWxpc3RfZGVsX3JjdSgmd2stPmxpc3QpOworCQkJc3luY2hyb25pemVfcmN1KCk7CisJCQlsaXN0X2FkZCgmd2stPmxpc3QsICZmcmVlX3dvcmspOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoIXdrLT5zdGFydGVkKQorCQkJY29udGludWU7CisJCWlmICh3ay0+Y2hhbiAhPSBsb2NhbC0+dG1wX2NoYW5uZWwpCisJCQljb250aW51ZTsKKwkJaWYgKHdrLT5jaGFuX3R5cGUgIT0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGUpCisJCQljb250aW51ZTsKKwkJcmVtYWluX29mZl9jaGFubmVsID0gdHJ1ZTsKKwl9CisKKwlpZiAoIXJlbWFpbl9vZmZfY2hhbm5lbCAmJiBsb2NhbC0+dG1wX2NoYW5uZWwpIHsKKwkJbG9jYWwtPnRtcF9jaGFubmVsID0gTlVMTDsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CisJCWllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihsb2NhbCwgdHJ1ZSk7CisJCS8qIGdpdmUgY29ubmVjdGlvbiBzb21lIHRpbWUgdG8gYnJlYXRoZSAqLworCQlydW5fYWdhaW4obG9jYWwsIGppZmZpZXMgKyBIWi8yKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkgJiYgbG9jYWwtPnNjYW5fcmVxKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKCZsb2NhbC0+aHcsCisJCQkJCSAgICAgJmxvY2FsLT5zY2FuX3dvcmssCisJCQkJCSAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZSgwKSk7CisKKwltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdrLCB0bXAsICZmcmVlX3dvcmssIGxpc3QpIHsKKwkJd2stPmRvbmUod2ssIE5VTEwpOworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9hZGRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCisJaWYgKFdBUk5fT04oIXdrLT5jaGFuKSkKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oIXdrLT5zZGF0YSkpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKCF3ay0+ZG9uZSkpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyh3ay0+c2RhdGEpKSkKKwkJcmV0dXJuOworCisJd2stPnN0YXJ0ZWQgPSBmYWxzZTsKKworCWxvY2FsID0gd2stPnNkYXRhLT5sb2NhbDsKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCWxpc3RfYWRkX3RhaWwoJndrLT5saXN0LCAmbG9jYWwtPndvcmtfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOworfQorCit2b2lkIGllZWU4MDIxMV93b3JrX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPndvcmtfbXR4KTsKKwlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPndvcmtfbGlzdCk7CisJc2V0dXBfdGltZXIoJmxvY2FsLT53b3JrX3RpbWVyLCBpZWVlODAyMTFfd29ya190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKKwlJTklUX1dPUksoJmxvY2FsLT53b3JrX3dvcmssIGllZWU4MDIxMV93b3JrX3dvcmspOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT53b3JrX3NrYl9xdWV1ZSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKworCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdrLT5zZGF0YSAhPSBzZGF0YSkKKwkJCWNvbnRpbnVlOworCQl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FCT1JUOworCQl3ay0+c3RhcnRlZCA9IHRydWU7CisJCXdrLT50aW1lb3V0ID0gamlmZmllczsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJLyogcnVuIGNsZWFudXBzIGV0Yy4gKi8KKwlpZWVlODAyMTFfd29ya193b3JrKCZsb2NhbC0+d29ya193b3JrKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdrLT5zZGF0YSAhPSBzZGF0YSkKKwkJCWNvbnRpbnVlOworCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworfQorCitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV93b3JrX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJdTE2IGZjOworCisJaWYgKHNrYi0+bGVuIDwgMjQpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHdrLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoc2RhdGEgIT0gd2stPnNkYXRhKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIod2stPmZpbHRlcl90YSwgbWdtdC0+c2EpKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIod2stPmZpbHRlcl90YSwgbWdtdC0+YnNzaWQpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKKwkJCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+d29ya19za2JfcXVldWUsIHNrYik7CisJCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPndvcmtfd29yayk7CisJCQlyZXR1cm4gUlhfUVVFVUVEOworCQl9CisJfQorCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQorCitzdGF0aWMgZW51bSB3b3JrX2RvbmVfcmVzdWx0IGllZWU4MDIxMV9yZW1haW5fZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKgorCSAqIFdlIGFyZSBkb25lIHNlcnZpbmcgdGhlIHJlbWFpbi1vbi1jaGFubmVsIGNvbW1hbmQuCisJICovCisJY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCh3ay0+c2RhdGEtPmRldiwgKHVuc2lnbmVkIGxvbmcpIHdrLAorCQkJCQkgICB3ay0+Y2hhbiwgd2stPmNoYW5fdHlwZSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7Cit9CisKK2ludCBpZWVlODAyMTFfd2tfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgdTY0ICpjb29raWUpCit7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKworCXdrID0ga3phbGxvYyhzaXplb2YoKndrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3aykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMOworCXdrLT5jaGFuID0gY2hhbjsKKwl3ay0+Y2hhbl90eXBlID0gY2hhbm5lbF90eXBlOworCXdrLT5zZGF0YSA9IHNkYXRhOworCXdrLT5kb25lID0gaWVlZTgwMjExX3JlbWFpbl9kb25lOworCisJd2stPnJlbWFpbi5kdXJhdGlvbiA9IGR1cmF0aW9uOworCisJKmNvb2tpZSA9ICh1bnNpZ25lZCBsb25nKSB3azsKKworCWllZWU4MDIxMV9hZGRfd29yayh3ayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGllZWU4MDIxMV93a19jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgdTY0IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLCAqdG1wOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdrLCB0bXAsICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICgodW5zaWduZWQgbG9uZykgd2sgPT0gY29va2llKSB7CisJCQl3ay0+dGltZW91dCA9IGppZmZpZXM7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+d29ya193b3JrKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5jIGIvbmV0L21hYzgwMjExL3dwYS5jCmluZGV4IDUzMzIwMTRjLi5mNDk3MWNkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0zMSw4ICszMSw4IEBACiAJdW5zaWduZWQgaW50IGhkcmxlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpbnQgYXV0aGVudGljYXRvcjsKLQlpbnQgd3BhX3Rlc3QgPSAwOwogCWludCB0YWlsOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwpAQCAtNDcsMTYgKzQ3LDE1IEBACiAJZGF0YSA9IHNrYi0+ZGF0YSArIGhkcmxlbjsKIAlkYXRhX2xlbiA9IHNrYi0+bGVuIC0gaGRybGVuOwogCi0JaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgorCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgogCSAgICAhKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgJiYKLQkgICAgIXdwYV90ZXN0KSB7Ci0JCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBNTUlDICovCisJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSkgeworCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBTVy1nZW5lcmF0ZWQgTU1JQyAqLwogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAJfQogCiAJdGFpbCA9IE1JQ0hBRUxfTUlDX0xFTjsKLQlpZiAoISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkKKwlpZiAoIWluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQl0YWlsICs9IFRLSVBfSUNWX0xFTjsKIAogCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgdGFpbCB8fApAQCAtMTQ3LDE3ICsxNDYsMTYgQEAKIAlpbnQgbGVuLCB0YWlsOwogCXU4ICpwb3M7CiAKLQlpZiAoKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmCi0JICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKLQkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIElWL0lDViAqLwotCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICAhKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKKwkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3Igc29mdHdhcmUtZ2VuZXJhdGVkIElWICovCiAJCXJldHVybiAwOwogCX0KIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlsZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKIAotCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKQorCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKIAkJdGFpbCA9IDA7CiAJZWxzZQogCQl0YWlsID0gVEtJUF9JQ1ZfTEVOOwpAQCAtMTc1LDEzICsxNzMsMTEgQEAKIAlpZiAoa2V5LT51LnRraXAudHguaXYxNiA9PSAwKQogCQlrZXktPnUudGtpcC50eC5pdjMyKys7CiAKLQlpZiAodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgewotCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgSVYgKi8KLQkJaWVlZTgwMjExX3RraXBfYWRkX2l2KHBvcywga2V5LCBrZXktPnUudGtpcC50eC5pdjE2KTsKKwlwb3MgPSBpZWVlODAyMTFfdGtpcF9hZGRfaXYocG9zLCBrZXksIGtleS0+dS50a2lwLnR4Lml2MTYpOwogCi0JCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CisJLyogaHdhY2NlbCAtIHdpdGggc29mdHdhcmUgSVYgKi8KKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCXJldHVybiAwOwotCX0KIAogCS8qIEFkZCByb29tIGZvciBJQ1YgKi8KIAlza2JfcHV0KHNrYiwgVEtJUF9JQ1ZfTEVOKTsKQEAgLTM2MywyNCArMzU5LDIwIEBACiAJaW50IGhkcmxlbiwgbGVuLCB0YWlsOwogCXU4ICpwb3MsICpwbjsKIAlpbnQgaTsKLQlib29sIHNraXBfaHc7CiAKLQlza2lwX2h3ID0gKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCkgJiYKLQkJaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKLQotCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKLQkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSAmJgotCSAgICAhc2tpcF9odykgewotCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUAotCQkgKiBoZWFkZXIgb3IgTUlDIGZpZWxkcyAqLwotCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICAhKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKKwkJLyoKKwkJICogaHdhY2NlbCBoYXMgbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAKKwkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMKKwkJICovCiAJCXJldHVybiAwOwogCX0KIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlsZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKIAotCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQl0YWlsID0gMDsKIAllbHNlCiAJCXRhaWwgPSBDQ01QX01JQ19MRU47CkBAIC00MDUsMTEgKzM5Nyw5IEBACiAKIAljY21wX3BuMmhkcihwb3MsIHBuLCBrZXktPmNvbmYua2V5aWR4KTsKIAotCWlmICgoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJiAhc2tpcF9odykgewotCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUCBoZWFkZXIgKi8KLQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkvKiBod2FjY2VsIC0gd2l0aCBzb2Z0d2FyZSBDQ01QIGhlYWRlciAqLworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJcG9zICs9IENDTVBfSERSX0xFTjsKIAljY21wX3NwZWNpYWxfYmxvY2tzKHNrYiwgcG4sIGtleS0+dS5jY21wLnR4X2NyeXB0b19idWYsIDApOwpAQCAtNTI1LDExICs1MTUsOCBAQAogCXU4ICpwbiwgYWFkWzIwXTsKIAlpbnQgaTsKIAotCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7Ci0JCS8qIGh3YWNjZWwgKi8KLQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCXJldHVybiAwOwotCX0KIAogCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgc2l6ZW9mKCptbWllKSkpCiAJCXJldHVybiBUWF9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDYzNGQxNGEuLjE4ZDc3YjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTgzLDYgKzgzLDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19aT05FUworCWJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRfVEFSR0VUX0NUCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzLgorCSAgTm9ybWFsbHksIGVhY2ggY29ubmVjdGlvbiBuZWVkcyB0byBoYXZlIGEgdW5pcXVlIHN5c3RlbSB3aWRlCisJICBpZGVudGl0eS4gQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcyBhbGxvdyB0byBoYXZlIG11bHRpcGxlCisJICBjb25uZWN0aW9ucyB1c2luZyB0aGUgc2FtZSBpZGVudGl0eSwgYXMgbG9uZyBhcyB0aGV5IGFyZQorCSAgY29udGFpbmVkIGluIGRpZmZlcmVudCB6b25lcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgYE4nLgorCiBjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UUwogCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzIgogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC0zNDEsNiArMzU0LDE4IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVAorCXRyaXN0YXRlICciQ1QiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBJUF9ORl9SQVcgfHwgSVA2X05GX1JBVworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJaGVscAorCSAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgaW5pdGlhbAorCSAgY29ubmVjdGlvbiB0cmFja2luZyBwYXJhbWV0ZXJzIGxpa2UgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCBhbmQKKwkgIHRoZSBoZWxwZXIgdG8gYmUgdXNlZC4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AKIAl0cmlzdGF0ZSAnIkRTQ1AiIGFuZCAiVE9TIiB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIElQX05GX01BTkdMRSB8fCBJUDZfTkZfTUFOR0xFCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA0OWY2MmVlLi5mODczNjQ0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQ0LDYgKzQ0LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZKSArPSB4dF9DTEFTU0lGWS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSykgKz0geHRfQ09OTk1BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUKSArPSB4dF9DVC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMKSArPSB4dF9ITC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQpICs9IHh0X0xFRC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCmluZGV4IGYyZDc2MjMuLjcxMmNjYWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCkBAIC02OCw2ICs2OCwxMCBAQAogCSAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXMKIAkgIG5lZWRlZCBmb3IgeW91ciBib3guCiAKKwkgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyCisJICBvciBieSBhcHBlbmRpbmcgaXBfdnMuY29ubl90YWJfYml0cz0/IHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCisJICBpZiBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uCisKIGNvbW1lbnQgIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCiAKIGNvbmZpZwlJUF9WU19QUk9UT19UQ1AKQEAgLTEwMCw2ICsxMDQsMTMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgQUggKEF1dGhlbnRpY2F0aW9uCiAJICBIZWFkZXIpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLgogCitjb25maWcgIElQX1ZTX1BST1RPX1NDVFAKKwlib29sICJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCisJc2VsZWN0IExJQkNSQzMyQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgU0NUUCB0cmFuc3BvcnQKKwkgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuCisKIGNvbW1lbnQgIklQVlMgc2NoZWR1bGVyIgogCiBjb25maWcJSVBfVlNfUlIKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZQppbmRleCA3M2E0NmZlLi5lM2JhZWZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogaXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vCiBpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm8KIGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3AubworaXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm8KIAogaXBfdnMtb2JqcyA6PQlpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8JICAgXAogCQlpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vCSAgIAkJICAgXApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggMjdjMzBjZi4uNjBiYjQxYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCkBAIC00MCw2ICs0MCwyMSBAQAogI2luY2x1ZGUgPG5ldC9pcF92cy5oPgogCiAKKyNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTCisjZGVmaW5lIENPTkZJR19JUF9WU19UQUJfQklUUwkxMgorI2VuZGlmCisKKy8qCisgKiBDb25uZWN0aW9uIGhhc2ggc2l6ZS4gRGVmYXVsdCBpcyB3aGF0IHdhcyBzZWxlY3RlZCBhdCBjb21waWxlIHRpbWUuCisqLworaW50IGlwX3ZzX2Nvbm5fdGFiX2JpdHMgPSBDT05GSUdfSVBfVlNfVEFCX0JJVFM7Cittb2R1bGVfcGFyYW1fbmFtZWQoY29ubl90YWJfYml0cywgaXBfdnNfY29ubl90YWJfYml0cywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29ubl90YWJfYml0cywgIlNldCBjb25uZWN0aW9ucycgaGFzaCBzaXplIik7CisKKy8qIHNpemUgYW5kIG1hc2sgdmFsdWVzICovCitpbnQgaXBfdnNfY29ubl90YWJfc2l6ZTsKK2ludCBpcF92c19jb25uX3RhYl9tYXNrOworCiAvKgogICogIENvbm5lY3Rpb24gaGFzaCB0YWJsZTogZm9yIGlucHV0IGFuZCBvdXRwdXQgcGFja2V0cyBsb29rdXBzIG9mIElQVlMKICAqLwpAQCAtMTI1LDExICsxNDAsMTEgQEAKIAlpZiAoYWYgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBqaGFzaF8zd29yZHMoamhhc2goYWRkciwgMTYsIGlwX3ZzX2Nvbm5fcm5kKSwKIAkJCQkgICAgKF9fZm9yY2UgdTMyKXBvcnQsIHByb3RvLCBpcF92c19jb25uX3JuZCkKLQkJCSYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwkJCSYgaXBfdnNfY29ubl90YWJfbWFzazsKICNlbmRpZgogCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWFkZHItPmlwLCAoX19mb3JjZSB1MzIpcG9ydCwgcHJvdG8sCiAJCQkgICAgaXBfdnNfY29ubl9ybmQpCi0JCSYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwkJJiBpcF92c19jb25uX3RhYl9tYXNrOwogfQogCiAKQEAgLTc2MCw3ICs3NzUsNyBAQAogCWludCBpZHg7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCi0JZm9yKGlkeCA9IDA7IGlkeCA8IElQX1ZTX0NPTk5fVEFCX1NJWkU7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBpcF92c19jb25uX3RhYl9zaXplOyBpZHgrKykgewogCQljdF9yZWFkX2xvY2tfYmgoaWR4KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmlwX3ZzX2Nvbm5fdGFiW2lkeF0sIGNfbGlzdCkgewogCQkJaWYgKHBvcy0tID09IDApIHsKQEAgLTc5Nyw3ICs4MTIsNyBAQAogCWlkeCA9IGwgLSBpcF92c19jb25uX3RhYjsKIAljdF9yZWFkX3VubG9ja19iaChpZHgpOwogCi0Jd2hpbGUgKCsraWR4IDwgSVBfVlNfQ09OTl9UQUJfU0laRSkgeworCXdoaWxlICgrK2lkeCA8IGlwX3ZzX2Nvbm5fdGFiX3NpemUpIHsKIAkJY3RfcmVhZF9sb2NrX2JoKGlkeCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZpcF92c19jb25uX3RhYltpZHhdLCBjX2xpc3QpIHsKIAkJCXNlcS0+cHJpdmF0ZSA9ICZpcF92c19jb25uX3RhYltpZHhdOwpAQCAtOTc2LDggKzk5MSw4IEBACiAJLyoKIAkgKiBSYW5kb21seSBzY2FuIDEvMzIgb2YgdGhlIHdob2xlIHRhYmxlIGV2ZXJ5IHNlY29uZAogCSAqLwotCWZvciAoaWR4ID0gMDsgaWR4IDwgKElQX1ZTX0NPTk5fVEFCX1NJWkU+PjUpOyBpZHgrKykgewotCQl1bnNpZ25lZCBoYXNoID0gbmV0X3JhbmRvbSgpICYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IChpcF92c19jb25uX3RhYl9zaXplPj41KTsgaWR4KyspIHsKKwkJdW5zaWduZWQgaGFzaCA9IG5ldF9yYW5kb20oKSAmIGlwX3ZzX2Nvbm5fdGFiX21hc2s7CiAKIAkJLyoKIAkJICogIExvY2sgaXMgYWN0dWFsbHkgbmVlZGVkIGluIHRoaXMgbG9vcC4KQEAgLTEwMjksNyArMTA0NCw3IEBACiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCiAgIGZsdXNoX2FnYWluOgotCWZvciAoaWR4PTA7IGlkeDxJUF9WU19DT05OX1RBQl9TSVpFOyBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgaXBfdnNfY29ubl90YWJfc2l6ZTsgaWR4KyspIHsKIAkJLyoKIAkJICogIExvY2sgaXMgYWN0dWFsbHkgbmVlZGVkIGluIHRoaXMgbG9vcC4KIAkJICovCkBAIC0xMDYwLDEwICsxMDc1LDE1IEBACiB7CiAJaW50IGlkeDsKIAorCS8qIENvbXB1dGUgc2l6ZSBhbmQgbWFzayAqLworCWlwX3ZzX2Nvbm5fdGFiX3NpemUgPSAxIDw8IGlwX3ZzX2Nvbm5fdGFiX2JpdHM7CisJaXBfdnNfY29ubl90YWJfbWFzayA9IGlwX3ZzX2Nvbm5fdGFiX3NpemUgLSAxOworCiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgY29ubmVjdGlvbiBoYXNoIHRhYmxlIGFuZCBpbml0aWFsaXplIGl0cyBsaXN0IGhlYWRzCiAJICovCi0JaXBfdnNfY29ubl90YWIgPSB2bWFsbG9jKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKTsKKwlpcF92c19jb25uX3RhYiA9IHZtYWxsb2MoaXBfdnNfY29ubl90YWJfc2l6ZSAqCisJCQkJIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7CiAJaWYgKCFpcF92c19jb25uX3RhYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwNzgsMTIgKzEwOTgsMTIgQEAKIAogCXByX2luZm8oIkNvbm5lY3Rpb24gaGFzaCB0YWJsZSBjb25maWd1cmVkICIKIAkJIihzaXplPSVkLCBtZW1vcnk9JWxkS2J5dGVzKVxuIiwKLQkJSVBfVlNfQ09OTl9UQUJfU0laRSwKLQkJKGxvbmcpKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKKwkJaXBfdnNfY29ubl90YWJfc2l6ZSwKKwkJKGxvbmcpKGlwX3ZzX2Nvbm5fdGFiX3NpemUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKIAlJUF9WU19EQkcoMCwgIkVhY2ggY29ubmVjdGlvbiBlbnRyeSBuZWVkcyAlWmQgYnl0ZXMgYXQgbGVhc3RcbiIsCiAJCSAgc2l6ZW9mKHN0cnVjdCBpcF92c19jb25uKSk7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IElQX1ZTX0NPTk5fVEFCX1NJWkU7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBpcF92c19jb25uX3RhYl9zaXplOyBpZHgrKykgewogCQlJTklUX0xJU1RfSEVBRCgmaXBfdnNfY29ubl90YWJbaWR4XSk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA4NDdmZmNhLi40NDU5MDg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KQEAgLTgxLDYgKzgyLDggQEAKIAkJcmV0dXJuICJVRFAiOwogCWNhc2UgSVBQUk9UT19UQ1A6CiAJCXJldHVybiAiVENQIjsKKwljYXNlIElQUFJPVE9fU0NUUDoKKwkJcmV0dXJuICJTQ1RQIjsKIAljYXNlIElQUFJPVE9fSUNNUDoKIAkJcmV0dXJuICJJQ01QIjsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtNTEyLDggKzUxNSw3IEBACiAJICovCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAlpZiAoc3ZjLT5hZiA9PSBBRl9JTkVUNikKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwLAotCQkJICAgIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwKTsKIAllbHNlCiAjZW5kaWYKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKQEAgLTU4OSw4ICs1OTEsOSBAQAogCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwogCX0KIAotCS8qIHRoZSBUQ1AvVURQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+cHJvdG9jb2wpIHsKKwkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KKwlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+cHJvdG9jb2wgfHwKKwkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtPnByb3RvY29sKSB7CiAJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggKyBjaXBoLT5paGwqNDsKIAogCQlpZiAoaW5vdXQpCkBAIC02MzAsOCArNjMzLDkgQEAKIAkJY2lwaC0+c2FkZHIgPSBjcC0+ZGFkZHIuaW42OwogCX0KIAotCS8qIHRoZSBUQ1AvVURQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+bmV4dGhkciB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLT5uZXh0aGRyKSB7CisJLyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovCisJaWYgKElQUFJPVE9fVENQID09IGNpcGgtPm5leHRoZHIgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+bmV4dGhkciB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC0+bmV4dGhkcikgewogCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAogCQlpZiAoaW5vdXQpCkBAIC02NzksNyArNjgzLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sKQorCWlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpCiAJCW9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKIAkJZ290byBvdXQ7CkBAIC04NTcsNiArODYyLDIxIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIENoZWNrIGlmIHNjdHAgY2h1bmMgaXMgQUJPUlQgY2h1bmsKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfc2N0cF9hYm9ydChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhfbGVuKQoreworCXNjdHBfY2h1bmtoZHJfdCAqc2NoLCBzY2h1bms7CisJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbmhfbGVuICsgc2l6ZW9mKHNjdHBfc2N0cGhkcl90KSwKKwkJCXNpemVvZihzY2h1bmspLCAmc2NodW5rKTsKKwlpZiAoc2NoID09IE5VTEwpCisJCXJldHVybiAwOworCWlmIChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQUJPUlQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBpc190Y3BfcmVzZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oX2xlbikKIHsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CkBAIC05OTksNyArMTAxOSw4IEBACiAJaWYgKHVubGlrZWx5KCFjcCkpIHsKIAkJaWYgKHN5c2N0bF9pcF92c19uYXRfaWNtcF9zZW5kICYmCiAJCSAgICAocHAtPnByb3RvY29sID09IElQUFJPVE9fVENQIHx8Ci0JCSAgICAgcHAtPnByb3RvY29sID09IElQUFJPVE9fVURQKSkgeworCQkgICAgIHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAorCQkgICAgIHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1NDVFApKSB7CiAJCQlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKIAogCQkJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC5sZW4sCkBAIC0xMDE0LDE0ICsxMDM1LDE5IEBACiAJCQkJICogZXhpc3RpbmcgZW50cnkgaWYgaXQgaXMgbm90IFJTVAogCQkJCSAqIHBhY2tldCBvciBub3QgVENQIHBhY2tldC4KIAkJCQkgKi8KLQkJCQlpZiAoaXBoLnByb3RvY29sICE9IElQUFJPVE9fVENQCi0JCQkJICAgIHx8ICFpc190Y3BfcmVzZXQoc2tiLCBpcGgubGVuKSkgeworCQkJCWlmICgoaXBoLnByb3RvY29sICE9IElQUFJPVE9fVENQICYmCisJCQkJICAgICBpcGgucHJvdG9jb2wgIT0gSVBQUk9UT19TQ1RQKQorCQkJCSAgICAgfHwgKChpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AKKwkJCQkJICAmJiAhaXNfdGNwX3Jlc2V0KHNrYiwgaXBoLmxlbikpCisJCQkJCSB8fCAoaXBoLnByb3RvY29sID09IElQUFJPVE9fU0NUUAorCQkJCQkJJiYgIWlzX3NjdHBfYWJvcnQoc2tiLAorCQkJCQkJCWlwaC5sZW4pKSkpIHsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCQkJCQlpZiAoYWYgPT0gQUZfSU5FVDYpCiAJCQkJCQlpY21wdjZfc2VuZChza2IsCiAJCQkJCQkJICAgIElDTVBWNl9ERVNUX1VOUkVBQ0gsCiAJCQkJCQkJICAgIElDTVBWNl9QT1JUX1VOUkVBQ0gsCi0JCQkJCQkJICAgIDAsIHNrYi0+ZGV2KTsKKwkJCQkJCQkgICAgMCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJaWNtcF9zZW5kKHNrYiwKQEAgLTEyMzUsNyArMTI2MSw4IEBACiAKIAkvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi8KIAlpcF92c19pbl9zdGF0cyhjcCwgc2tiKTsKLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLT5uZXh0aGRyIHx8IElQUFJPVE9fVURQID09IGNpaC0+bmV4dGhkcikKKwlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLT5uZXh0aGRyIHx8IElQUFJPVE9fVURQID09IGNpaC0+bmV4dGhkciB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gY2loLT5uZXh0aGRyKQogCQlvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7CiAJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0KTsKIAkvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi8KQEAgLTEzNTgsNiArMTM4NSwyMSBAQAogCSAqIGVuY29yYWdlIHRoZSBzdGFuZGJ5IHNlcnZlcnMgdG8gdXBkYXRlIHRoZSBjb25uZWN0aW9ucyB0aW1lb3V0CiAJICovCiAJcGt0cyA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjcC0+aW5fcGt0cyk7CisJaWYgKGFmID09IEFGX0lORVQgJiYgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCisJICAgIGNwLT5wcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHsKKwkJaWYgKChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEICYmCisJCQkoYXRvbWljX3JlYWQoJmNwLT5pbl9wa3RzKSAlCisJCQkgc3lzY3RsX2lwX3ZzX3N5bmNfdGhyZXNob2xkWzFdCisJCQkgPT0gc3lzY3RsX2lwX3ZzX3N5bmNfdGhyZXNob2xkWzBdKSkgfHwKKwkJCQkoY3AtPm9sZF9zdGF0ZSAhPSBjcC0+c3RhdGUgJiYKKwkJCQkgKChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX0NMT1NFRCkgfHwKKwkJCQkgIChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSkgfHwKKwkJCQkgIChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUikpKSkgeworCQkJaXBfdnNfc3luY19jb25uKGNwKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJaWYgKGFmID09IEFGX0lORVQgJiYKIAkgICAgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCiAJICAgICgoKGNwLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fApAQCAtMTM3MCw2ICsxNDEyLDcgQEAKIAkgICAgICAgKGNwLT5zdGF0ZSA9PSBJUF9WU19UQ1BfU19DTE9TRV9XQUlUKSB8fAogCSAgICAgICAoY3AtPnN0YXRlID09IElQX1ZTX1RDUF9TX1RJTUVfV0FJVCkpKSkpCiAJCWlwX3ZzX3N5bmNfY29ubihjcCk7CitvdXQ6CiAJY3AtPm9sZF9zdGF0ZSA9IGNwLT5zdGF0ZTsKIAogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCBjMzdhYzJkN2IuLjdlZTljMzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTE4NDMsNyArMTg0Myw3IEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXNlcV9wcmludGYoc2VxLAogCQkJIklQIFZpcnR1YWwgU2VydmVyIHZlcnNpb24gJWQuJWQuJWQgKHNpemU9JWQpXG4iLAotCQkJTlZFUlNJT04oSVBfVlNfVkVSU0lPTl9DT0RFKSwgSVBfVlNfQ09OTl9UQUJfU0laRSk7CisJCQlOVkVSU0lPTihJUF9WU19WRVJTSU9OX0NPREUpLCBpcF92c19jb25uX3RhYl9zaXplKTsKIAkJc2VxX3B1dHMoc2VxLAogCQkJICJQcm90IExvY2FsQWRkcmVzczpQb3J0IFNjaGVkdWxlciBGbGFnc1xuIik7CiAJCXNlcV9wdXRzKHNlcSwKQEAgLTIxMzIsOCArMjEzMiw5IEBACiAJCX0KIAl9CiAKLQkvKiBDaGVjayBmb3IgdmFsaWQgcHJvdG9jb2w6IFRDUCBvciBVRFAsIGV2ZW4gZm9yIGZ3bWFyayE9MCAqLwotCWlmICh1c3ZjLnByb3RvY29sICE9IElQUFJPVE9fVENQICYmIHVzdmMucHJvdG9jb2wgIT0gSVBQUk9UT19VRFApIHsKKwkvKiBDaGVjayBmb3IgdmFsaWQgcHJvdG9jb2w6IFRDUCBvciBVRFAgb3IgU0NUUCwgZXZlbiBmb3IgZndtYXJrIT0wICovCisJaWYgKHVzdmMucHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYgdXN2Yy5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCAmJgorCSAgICB1c3ZjLnByb3RvY29sICE9IElQUFJPVE9fU0NUUCkgewogCQlwcl9lcnIoInNldF9jdGw6IGludmFsaWQgcHJvdG9jb2w6ICVkICVwSTQ6JWQgJXNcbiIsCiAJCSAgICAgICB1c3ZjLnByb3RvY29sLCAmdXN2Yy5hZGRyLmlwLAogCQkgICAgICAgbnRvaHModXN2Yy5wb3J0KSwgdXN2Yy5zY2hlZF9uYW1lKTsKQEAgLTIzODYsNyArMjM4Nyw3IEBACiAJCWNoYXIgYnVmWzY0XTsKIAogCQlzcHJpbnRmKGJ1ZiwgIklQIFZpcnR1YWwgU2VydmVyIHZlcnNpb24gJWQuJWQuJWQgKHNpemU9JWQpIiwKLQkJCU5WRVJTSU9OKElQX1ZTX1ZFUlNJT05fQ09ERSksIElQX1ZTX0NPTk5fVEFCX1NJWkUpOworCQkJTlZFUlNJT04oSVBfVlNfVkVSU0lPTl9DT0RFKSwgaXBfdnNfY29ubl90YWJfc2l6ZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlciwgYnVmLCBzdHJsZW4oYnVmKSsxKSAhPSAwKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CkBAIC0yMzk5LDcgKzI0MDAsNyBAQAogCXsKIAkJc3RydWN0IGlwX3ZzX2dldGluZm8gaW5mbzsKIAkJaW5mby52ZXJzaW9uID0gSVBfVlNfVkVSU0lPTl9DT0RFOwotCQlpbmZvLnNpemUgPSBJUF9WU19DT05OX1RBQl9TSVpFOworCQlpbmZvLnNpemUgPSBpcF92c19jb25uX3RhYl9zaXplOwogCQlpbmZvLm51bV9zZXJ2aWNlcyA9IGlwX3ZzX251bV9zZXJ2aWNlczsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSAhPSAwKQogCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTMyNDMsNyArMzI0NCw3IEBACiAJY2FzZSBJUFZTX0NNRF9HRVRfSU5GTzoKIAkJTkxBX1BVVF9VMzIobXNnLCBJUFZTX0lORk9fQVRUUl9WRVJTSU9OLCBJUF9WU19WRVJTSU9OX0NPREUpOwogCQlOTEFfUFVUX1UzMihtc2csIElQVlNfSU5GT19BVFRSX0NPTk5fVEFCX1NJWkUsCi0JCQkgICAgSVBfVlNfQ09OTl9UQUJfU0laRSk7CisJCQkgICAgaXBfdnNfY29ubl90YWJfc2l6ZSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IDMzZTJjNzkuLjczZjM4ZWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQkgKi8KIAkJZnJvbS5pcCA9IG5fY3AtPnZhZGRyLmlwOwogCQlwb3J0ID0gbl9jcC0+dnBvcnQ7Ci0JCXNwcmludGYoYnVmLCAiJWQsJWQsJWQsJWQsJWQsJWQiLCBOSVBRVUFEKGZyb20uaXApLAorCQlzcHJpbnRmKGJ1ZiwgIiV1LCV1LCV1LCV1LCV1LCV1IiwgTklQUVVBRChmcm9tLmlwKSwKIAkJCShudG9ocyhwb3J0KT4+OCkmMjU1LCBudG9ocyhwb3J0KSYyNTUpOwogCQlidWZfbGVuID0gc3RybGVuKGJ1Zik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZjc0NzZiOS4uY2FhNThmYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAvKiBmb3Igc3lzY3RsICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTg1LDI1ICs4NiwyNSBAQAogLyoKICAqICAgICAgSVBWUyBkZXN0aW5hdGlvbiBzZXQgc3RydWN0dXJlIGFuZCBvcGVyYXRpb25zCiAgKi8KLXN0cnVjdCBpcF92c19kZXN0X2xpc3QgewotCXN0cnVjdCBpcF92c19kZXN0X2xpc3QgICpuZXh0OyAgICAgICAgICAvKiBsaXN0IGxpbmsgKi8KK3N0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7ICAgICAgICAgIC8qIGxpc3QgbGluayAqLwogCXN0cnVjdCBpcF92c19kZXN0ICAgICAgICpkZXN0OyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBzZXJ2ZXIgKi8KIH07CiAKIHN0cnVjdCBpcF92c19kZXN0X3NldCB7CiAJYXRvbWljX3QgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgIC8qIHNldCBzaXplICovCiAJdW5zaWduZWQgbG9uZyAgICAgICAgICAgbGFzdG1vZDsgICAgICAgIC8qIGxhc3QgbW9kaWZpZWQgdGltZSAqLwotCXN0cnVjdCBpcF92c19kZXN0X2xpc3QgICpsaXN0OyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OyAgICAgICAgICAgLyogZGVzdGluYXRpb24gbGlzdCAqLwogCXJ3bG9ja190CSAgICAgICAgbG9jazsgICAgICAgICAgIC8qIGxvY2sgZm9yIHRoaXMgbGlzdCAqLwogfTsKIAogCi1zdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3RfbGlzdCAqCitzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0X2VsZW0gKgogaXBfdnNfZGVzdF9zZXRfaW5zZXJ0KHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0LCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIHsKLQlzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICplOworCXN0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtICplOwogCi0JZm9yIChlPXNldC0+bGlzdDsgZSE9TlVMTDsgZT1lLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCWlmIChlLT5kZXN0ID09IGRlc3QpCiAJCQkvKiBhbHJlYWR5IGV4aXN0ZWQgKi8KIAkJCXJldHVybiBOVUxMOwpAQCAtMTE4LDkgKzExOSw3IEBACiAJYXRvbWljX2luYygmZGVzdC0+cmVmY250KTsKIAllLT5kZXN0ID0gZGVzdDsKIAotCS8qIGxpbmsgaXQgdG8gdGhlIGxpc3QgKi8KLQllLT5uZXh0ID0gc2V0LT5saXN0OwotCXNldC0+bGlzdCA9IGU7CisJbGlzdF9hZGQoJmUtPmxpc3QsICZzZXQtPmxpc3QpOwogCWF0b21pY19pbmMoJnNldC0+c2l6ZSk7CiAKIAlzZXQtPmxhc3Rtb2QgPSBqaWZmaWVzOwpAQCAtMTMwLDM0ICsxMjksMzMgQEAKIHN0YXRpYyB2b2lkCiBpcF92c19kZXN0X3NldF9lcmFzZShzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiB7Ci0Jc3RydWN0IGlwX3ZzX2Rlc3RfbGlzdCAqZSwgKiplcDsKKwlzdHJ1Y3QgaXBfdnNfZGVzdF9zZXRfZWxlbSAqZTsKIAotCWZvciAoZXA9JnNldC0+bGlzdCwgZT0qZXA7IGUhPU5VTEw7IGU9KmVwKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCWlmIChlLT5kZXN0ID09IGRlc3QpIHsKIAkJCS8qIEhJVCAqLwotCQkJKmVwID0gZS0+bmV4dDsKIAkJCWF0b21pY19kZWMoJnNldC0+c2l6ZSk7CiAJCQlzZXQtPmxhc3Rtb2QgPSBqaWZmaWVzOwogCQkJYXRvbWljX2RlYygmZS0+ZGVzdC0+cmVmY250KTsKKwkJCWxpc3RfZGVsKCZlLT5saXN0KTsKIAkJCWtmcmVlKGUpOwogCQkJYnJlYWs7CiAJCX0KLQkJZXAgPSAmZS0+bmV4dDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGlwX3ZzX2Rlc3Rfc2V0X2VyYXNlYWxsKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogewotCXN0cnVjdCBpcF92c19kZXN0X2xpc3QgKmUsICoqZXA7CisJc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0X2VsZW0gKmUsICplcDsKIAogCXdyaXRlX2xvY2soJnNldC0+bG9jayk7Ci0JZm9yIChlcD0mc2V0LT5saXN0LCBlPSplcDsgZSE9TlVMTDsgZT0qZXApIHsKLQkJKmVwID0gZS0+bmV4dDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgZXAsICZzZXQtPmxpc3QsIGxpc3QpIHsKIAkJLyoKIAkJICogV2UgZG9uJ3Qga2ZyZWUgZGVzdCBiZWNhdXNlIGl0IGlzIHJlZmVyZWQgZWl0aGVyCiAJCSAqIGJ5IGl0cyBzZXJ2aWNlIG9yIGJ5IHRoZSB0cmFzaCBkZXN0IGxpc3QuCiAJCSAqLwogCQlhdG9taWNfZGVjKCZlLT5kZXN0LT5yZWZjbnQpOworCQlsaXN0X2RlbCgmZS0+bGlzdCk7CiAJCWtmcmVlKGUpOwogCX0KIAl3cml0ZV91bmxvY2soJnNldC0+bG9jayk7CkBAIC0xNjYsNyArMTY0LDcgQEAKIC8qIGdldCB3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIG5vZGUgaW4gdGhlIGRlc3RpbmF0aW9uIHNldCAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZGVzdF9zZXRfbWluKHN0cnVjdCBpcF92c19kZXN0X3NldCAqc2V0KQogewotCXJlZ2lzdGVyIHN0cnVjdCBpcF92c19kZXN0X2xpc3QgKmU7CisJcmVnaXN0ZXIgc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0X2VsZW0gKmU7CiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsICpsZWFzdDsKIAlpbnQgbG9oLCBkb2g7CiAKQEAgLTE3NCw3ICsxNzIsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgPiAwICovCi0JZm9yIChlPXNldC0+bGlzdDsgZSE9TlVMTDsgZT1lLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCWxlYXN0ID0gZS0+ZGVzdDsKIAkJaWYgKGxlYXN0LT5mbGFncyAmIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCkKIAkJCWNvbnRpbnVlOwpAQCAtMTkwLDcgKzE4OCw3IEBACiAKIAkvKiBmaW5kIHRoZSBkZXN0aW5hdGlvbiB3aXRoIHRoZSB3ZWlnaHRlZCBsZWFzdCBsb2FkICovCiAgIG5leHRzdGFnZToKLQlmb3IgKGU9ZS0+bmV4dDsgZSE9TlVMTDsgZT1lLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCWRlc3QgPSBlLT5kZXN0OwogCQlpZiAoZGVzdC0+ZmxhZ3MgJiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiAJCQljb250aW51ZTsKQEAgLTIyMCw3ICsyMTgsNyBAQAogLyogZ2V0IHdlaWdodGVkIG1vc3QtY29ubmVjdGlvbiBub2RlIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21heChzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldCkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICplOworCXJlZ2lzdGVyIHN0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtICplOwogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCAqbW9zdDsKIAlpbnQgbW9oLCBkb2g7CiAKQEAgLTIyOCw3ICsyMjYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNlbGVjdCB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2VydmVyLCB3aG9zZSB3ZWlnaHQgPiAwICovCi0JZm9yIChlPXNldC0+bGlzdDsgZSE9TlVMTDsgZT1lLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCW1vc3QgPSBlLT5kZXN0OwogCQlpZiAoYXRvbWljX3JlYWQoJm1vc3QtPndlaWdodCkgPiAwKSB7CiAJCQltb2ggPSBhdG9taWNfcmVhZCgmbW9zdC0+YWN0aXZlY29ubnMpICogNTAKQEAgLTI0MCw3ICsyMzgsNyBAQAogCiAJLyogZmluZCB0aGUgZGVzdGluYXRpb24gd2l0aCB0aGUgd2VpZ2h0ZWQgbW9zdCBsb2FkICovCiAgIG5leHRzdGFnZToKLQlmb3IgKGU9ZS0+bmV4dDsgZSE9TlVMTDsgZT1lLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCWRlc3QgPSBlLT5kZXN0OwogCQlkb2ggPSBhdG9taWNfcmVhZCgmZGVzdC0+YWN0aXZlY29ubnMpICogNTAKIAkJCSsgYXRvbWljX3JlYWQoJmRlc3QtPmluYWN0Y29ubnMpOwpAQCAtMzg5LDcgKzM4Nyw3IEBACiAKIAkJLyogaW5pdGlsaXplIGl0cyBkZXN0IHNldCAqLwogCQlhdG9taWNfc2V0KCYoZW4tPnNldC5zaXplKSwgMCk7Ci0JCWVuLT5zZXQubGlzdCA9IE5VTEw7CisJCUlOSVRfTElTVF9IRUFEKCZlbi0+c2V0Lmxpc3QpOwogCQlyd2xvY2tfaW5pdCgmZW4tPnNldC5sb2NrKTsKIAogCQlpcF92c19sYmxjcl9oYXNoKHRibCwgZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwppbmRleCAzZTc2NzE2Li4wZTU4NDU1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwpAQCAtMjU3LDYgKzI1Nyw5IEBACiAjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1VEUAogCVJFR0lTVEVSX1BST1RPQ09MKCZpcF92c19wcm90b2NvbF91ZHApOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFAKKwlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfc2N0cCk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fQUgKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfYWgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWEzZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwpAQCAtMCwwICsxLDExODMgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvc2N0cC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pcF92cy5oPgorCisKK3N0YXRpYyBzdHJ1Y3QgaXBfdnNfY29ubiAqCitzY3RwX2Nvbm5faW5fZ2V0KGludCBhZiwKKwkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAorCQkgY29uc3Qgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgsCisJCSB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAorCQkgaW50IGludmVyc2UpCit7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CisKKwlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9fb2ZmLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKKwlpZiAocHB0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChsaWtlbHkoIWludmVyc2UpKSAKKwkJcmV0dXJuIGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAorCQkJCQkgJmlwaC0+c2FkZHIsIHBwdHJbMF0sCisJCQkJCSAmaXBoLT5kYWRkciwgcHB0clsxXSk7CisJZWxzZSAKKwkJcmV0dXJuIGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAorCQkJCQkgJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCisJCQkJCSAmaXBoLT5zYWRkciwgcHB0clswXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBfdnNfY29ubiAqCitzY3RwX2Nvbm5fb3V0X2dldChpbnQgYWYsCisJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAorCQkgIGNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLAorCQkgIHVuc2lnbmVkIGludCBwcm90b19vZmYsCisJCSAgaW50IGludmVyc2UpCit7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CisKKwlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9fb2ZmLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKKwlpZiAocHB0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChsaWtlbHkoIWludmVyc2UpKSAKKwkJcmV0dXJuIGlwX3ZzX2Nvbm5fb3V0X2dldChhZiwgaXBoLT5wcm90b2NvbCwKKwkJCQkJICAmaXBoLT5zYWRkciwgcHB0clswXSwKKwkJCQkJICAmaXBoLT5kYWRkciwgcHB0clsxXSk7CisJZWxzZSAKKwkJcmV0dXJuIGlwX3ZzX2Nvbm5fb3V0X2dldChhZiwgaXBoLT5wcm90b2NvbCwKKwkJCQkJICAmaXBoLT5kYWRkciwgcHB0clsxXSwKKwkJCQkJICAmaXBoLT5zYWRkciwgcHB0clswXSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfY29ubl9zY2hlZHVsZShpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCisJCSAgIGludCAqdmVyZGljdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKipjcHApCit7CisJc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YzsKKwlzY3RwX2NodW5raGRyX3QgX3NjaHVua2gsICpzY2g7CisJc2N0cF9zY3RwaGRyX3QgKnNoLCBfc2N0cGg7CisJc3RydWN0IGlwX3ZzX2lwaGRyIGlwaDsKKworCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKworCXNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLmxlbiwgc2l6ZW9mKF9zY3RwaCksICZfc2N0cGgpOworCWlmIChzaCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC5sZW4gKyBzaXplb2Yoc2N0cF9zY3RwaGRyX3QpLAorCQkJCSBzaXplb2YoX3NjaHVua2gpLCAmX3NjaHVua2gpOworCWlmIChzY2ggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUKSAmJgorCSAgICAoc3ZjID0gaXBfdnNfc2VydmljZV9nZXQoYWYsIHNrYi0+bWFyaywgaXBoLnByb3RvY29sLAorCQkJCSAgICAgJmlwaC5kYWRkciwgc2gtPmRlc3QpKSkgeworCQlpZiAoaXBfdnNfdG9kcm9wKCkpIHsKKwkJCS8qCisJCQkgKiBJdCBzZWVtcyB0aGF0IHdlIGFyZSB2ZXJ5IGxvYWRlZC4KKwkJCSAqIFdlIGhhdmUgdG8gZHJvcCB0aGlzIHBhY2tldCA6KAorCQkJICovCisJCQlpcF92c19zZXJ2aWNlX3B1dChzdmMpOworCQkJKnZlcmRpY3QgPSBORl9EUk9QOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyoKKwkJICogTGV0IHRoZSB2aXJ0dWFsIHNlcnZlciBzZWxlY3QgYSByZWFsIHNlcnZlciBmb3IgdGhlCisJCSAqIGluY29taW5nIGNvbm5lY3Rpb24sIGFuZCBjcmVhdGUgYSBjb25uZWN0aW9uIGVudHJ5LgorCQkgKi8KKwkJKmNwcCA9IGlwX3ZzX3NjaGVkdWxlKHN2Yywgc2tiKTsKKwkJaWYgKCEqY3BwKSB7CisJCQkqdmVyZGljdCA9IGlwX3ZzX2xlYXZlKHN2Yywgc2tiLCBwcCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpcF92c19zZXJ2aWNlX3B1dChzdmMpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCkKK3sKKwlzY3RwX3NjdHBoZHJfdCAqc2N0cGg7CisJdW5zaWduZWQgaW50IHNjdHBob2ZmOworCV9fYmUzMiBjcmMzMjsKKworI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CisJaWYgKGNwLT5hZiA9PSBBRl9JTkVUNikKKwkJc2N0cGhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCWVsc2UKKyNlbmRpZgorCQlzY3RwaG9mZiA9IGlwX2hkcmxlbihza2IpOworCisJLyogY3N1bV9jaGVjayByZXF1aXJlcyB1bnNoYXJlZCBza2IgKi8KKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2N0cGhvZmYgKyBzaXplb2YoKnNjdHBoKSkpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNwLT5hcHAgIT0gTlVMTCkpIHsKKwkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCisJCWlmIChwcC0+Y3N1bV9jaGVjayAmJiAhcHAtPmNzdW1fY2hlY2soY3AtPmFmLCBza2IsIHBwKSkKKwkJCXJldHVybiAwOworCisJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLworCQlpZiAoIWlwX3ZzX2FwcF9wa3Rfb3V0KGNwLCBza2IpKQorCQkJcmV0dXJuIDA7CisJfQorCisJc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmOworCXNjdHBoLT5zb3VyY2UgPSBjcC0+dnBvcnQ7CisKKwkvKiBDYWxjdWxhdGUgdGhlIGNoZWNrc3VtICovCisJY3JjMzIgPSBzY3RwX3N0YXJ0X2Nrc3VtKCh1OCAqKSBzY3RwaCwgc2tiX2hlYWRsZW4oc2tiKSAtIHNjdHBob2ZmKTsKKwlmb3IgKHNrYiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OyBza2I7IHNrYiA9IHNrYi0+bmV4dCkKKwkJY3JjMzIgPSBzY3RwX3VwZGF0ZV9ja3N1bSgodTggKikgc2tiLT5kYXRhLCBza2JfaGVhZGxlbihza2IpLAorCQkJCSAgICAgICAgICBjcmMzMik7CisJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJc2N0cGgtPmNoZWNrc3VtID0gY3JjMzI7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCit7CisKKwlzY3RwX3NjdHBoZHJfdCAqc2N0cGg7CisJdW5zaWduZWQgaW50IHNjdHBob2ZmOworCV9fYmUzMiBjcmMzMjsKKworI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CisJaWYgKGNwLT5hZiA9PSBBRl9JTkVUNikKKwkJc2N0cGhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCWVsc2UKKyNlbmRpZgorCQlzY3RwaG9mZiA9IGlwX2hkcmxlbihza2IpOworCisJLyogY3N1bV9jaGVjayByZXF1aXJlcyB1bnNoYXJlZCBza2IgKi8KKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2N0cGhvZmYgKyBzaXplb2YoKnNjdHBoKSkpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNwLT5hcHAgIT0gTlVMTCkpIHsKKwkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCisJCWlmIChwcC0+Y3N1bV9jaGVjayAmJiAhcHAtPmNzdW1fY2hlY2soY3AtPmFmLCBza2IsIHBwKSkKKwkJCXJldHVybiAwOworCisJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLworCQlpZiAoIWlwX3ZzX2FwcF9wa3Rfb3V0KGNwLCBza2IpKQorCQkJcmV0dXJuIDA7CisJfQorCisJc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmOworCXNjdHBoLT5kZXN0ID0gY3AtPmRwb3J0OworCisJLyogQ2FsY3VsYXRlIHRoZSBjaGVja3N1bSAqLworCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgodTggKikgc2N0cGgsIHNrYl9oZWFkbGVuKHNrYikgLSBzY3RwaG9mZik7CisJZm9yIChza2IgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsgc2tiOyBza2IgPSBza2ItPm5leHQpCisJCWNyYzMyID0gc2N0cF91cGRhdGVfY2tzdW0oKHU4ICopIHNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJCQkJICBjcmMzMik7CisJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJc2N0cGgtPmNoZWNrc3VtID0gY3JjMzI7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCXVuc2lnbmVkIGludCBzY3RwaG9mZjsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2gsIF9zY3RwaDsKKwlfX2xlMzIgY21wOworCV9fbGUzMiB2YWw7CisJX191MzIgdG1wOworCisjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKKwlpZiAoYWYgPT0gQUZfSU5FVDYpCisJCXNjdHBob2ZmID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwllbHNlCisjZW5kaWYKKwkJc2N0cGhvZmYgPSBpcF9oZHJsZW4oc2tiKTsKKworCXNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2N0cGhvZmYsIHNpemVvZihfc2N0cGgpLCAmX3NjdHBoKTsKKwlpZiAoc2ggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwljbXAgPSBzaC0+Y2hlY2tzdW07CisKKwl0bXAgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopIHNoLCBza2JfaGVhZGxlbihza2IpKTsKKwlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCXRtcCA9IHNjdHBfdXBkYXRlX2Nrc3VtKChfX3U4ICopIGxpc3QtPmRhdGEsCisJCQkJCXNrYl9oZWFkbGVuKGxpc3QpLCB0bXApOworCisJdmFsID0gc2N0cF9lbmRfY2tzdW0odG1wKTsKKworCWlmICh2YWwgIT0gY21wKSB7CisJCS8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqLworCQlJUF9WU19EQkdfUkxfUEtUKDAsIHBwLCBza2IsIDAsCisJCQkJIkZhaWxlZCBjaGVja3N1bSBmb3IiKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdHJ1Y3QgaXB2c19zY3RwX25leHRzdGF0ZSB7CisJaW50IG5leHRfc3RhdGU7Cit9OworZW51bSBpcHZzX3NjdHBfZXZlbnRfdCB7CisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIsCisJSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEksCisJSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIsCisJSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEksCisJSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSLAorCUlQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9fQUJPUlRfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIsCisJSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9MQVNUCit9OworCitzdGF0aWMgZW51bSBpcHZzX3NjdHBfZXZlbnRfdCBzY3RwX2V2ZW50c1syNTVdID0geworCUlQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEksCisJSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEksCisJSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEksCit9OworCitzdGF0aWMgc3RydWN0IGlwdnNfc2N0cF9uZXh0c3RhdGUKKyBzY3RwX3N0YXRlc190YWJsZVtJUF9WU19TQ1RQX1NfTEFTVF1bSVBfVlNfU0NUUF9FVkVfTEFTVF0gPSB7CisJLyoKKwkgKiBTVEFURSA6IElQX1ZTX1NDVFBfU19OT05FCisJICovCisJLypuZXh0IHN0YXRlICovLypldmVudCAqLworCXt7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0sCisJIH0sCisJLyoKKwkgKiBTVEFURSA6IElQX1ZTX1NDVFBfU19JTklUX0NMSQorCSAqIENpZW50IHNlbnQgSU5JVCBhbmQgaXMgd2FpdGluZyBmb3IgcmVwbHkgZnJvbSBzZXJ2ZXIoSW4gRUNIT19XQUlUKQorCSAqLworCXt7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0VDSE9fU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfSU5JVF9TRVIKKwkgKiBTZXJ2ZXIgc2VudCBJTklUIGFuZCB3YWl0aW5nIGZvciBJTklUIEFDSyBmcm9tIHRoZSBjbGllbnQKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfQ0xJCisJICogQ2xpZW50IHNlbnQgSU5JVCBBQ0sgYW5kIHdhaXRpbmcgZm9yIEVDSE8gZnJvbSB0aGUgc2VydmVyCisJICovCisJe3tJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBoYXMgYmVlbiByZXNlbnQgYnkgdGhlIGNsaWVudCwgbGV0IHVzIHN0YXkgaXMgaW4KKwkgICogdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIGNsb3NlIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogRUNITyBieSBjbGllbnQsIGl0IHNob3VsZCBub3QgaGFwcGVuLCBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIC8qCisJICAqIEVDSE8gYnkgc2VydmVyLCB0aGlzIGlzIHdoYXQgd2UgYXJlIGV4cGVjdGluZywgbW92ZSB0byBFQ0hPX1NFUgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FQ0hPX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgaXQgc2hvdWxkIG5vdCBoYXBwZW4sIGNsb3NlIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBVbmV4cGVjdGVkIENPT0tJRSBBQ0sgZnJvbSBzZXJ2ZXIsIHN0YXR5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0sCisJLyoKKwkgKiBTdGF0ZSA6IElQX1ZTX1NDVFBfU19JTklUX0FDS19TRVIKKwkgKiBTZXJ2ZXIgc2VudCBJTklUIEFDSyBhbmQgd2FpdGluZyBmb3IgRUNITyBmcm9tIHRoZSBjbGllbnQKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkgLyoKKwkgICogV2UgaGF2ZSBnb3QgYW4gSU5JVCBmcm9tIGNsaWVudC4gRnJvbSB0aGUgc3BlYy7igJxVcG9uIHJlY2VpcHQgb2YKKwkgICogYW4gSU5JVCBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIGFuIGVuZHBvaW50IE1VU1QgcmVzcG9uZCB3aXRoCisJICAqIGFuIElOSVQgQUNLIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgaXQgc2VudCBpbiBpdHMgIG9yaWdpbmFsCisJICAqIElOSVQgY2h1bmsgKGluY2x1ZGluZyBpdHMgSW5pdGlhdGUgVGFnLCB1bmNoYW5nZWTigJ0pLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIC8qCisJICAqIFVuZXhwZWN0ZWQgSU5JVF9BQ0sgYnkgdGhlIGNsaWVudCwgbGV0IHVzIGNsb3NlIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgcmVzZW50IGJ5IHRoZSBzZXJ2ZXIsIGxldCB1cyBtb3ZlIHRvIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgc2VuZCB0aGUgRUNITywgdGhpcyBpcyB3aGF0IHdlIGFyZSBleHBlY3RpbmcsCisJICAqIG1vdmUgdG8gRUNIT19DTEkKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRUNIT19DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIC8qCisJICAqIEVDSE8gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLCBOb3Qgc3VyZSB3aGF0IHRvIGRvLAorCSAgKiBsZXQgdXMgY2xvc2UgaXQKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCBsZXQgdXMgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIHNlcnZlciwgaG1tLi4uIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldHMgY2xvc2UKKwkgICogdGhlIGNvbm5lY3Rpb24uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0sCisJLyoKKwkgKiBTdGF0ZSA6IElQX1ZTX1NDVFBfU19FQ0hPX0NMSQorCSAqIENpZW50ICBzZW50IEVDSE8gYW5kIHdhaXRpbmcgQ09PS0VJIEFDSyBmcm9tIHRoZSBTZXJ2ZXIKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkgLyoKKwkgICogV2UgaGF2ZSBnb3QgYW4gSU5JVCBmcm9tIGNsaWVudC4gRnJvbSB0aGUgc3BlYy7igJxVcG9uIHJlY2VpcHQgb2YKKwkgICogYW4gSU5JVCBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIGFuIGVuZHBvaW50IE1VU1QgcmVzcG9uZCB3aXRoCisJICAqIGFuIElOSVQgQUNLIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgaXQgc2VudCBpbiBpdHMgIG9yaWdpbmFsCisJICAqIElOSVQgY2h1bmsgKGluY2x1ZGluZyBpdHMgSW5pdGlhdGUgVGFnLCB1bmNoYW5nZWTigJ0pLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIGhhcyBiZWVuIGJ5IHRoZSBjbGllbnQsIGxldCB1cyBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIHNlbnQgYnkgdGhlIHNlcnZlciwgVW5leHBlY3RlZCBJTklUIEFDSywgc3BlYyBzYXlzLAorCSAgKiDigJxJZiBhbiBJTklUIEFDSyBpcyByZWNlaXZlZCBieSBhbiBlbmRwb2ludCBpbiBhbnkgc3RhdGUgb3RoZXIKKwkgICogdGhhbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIHRoZSBlbmRwb2ludCBzaG91bGQgZGlzY2FyZCB0aGUKKwkgICogSU5JVCBBQ0sgY2h1bmvigJ0uIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRUNIT19DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIENsaWVudCByZXNlbnQgdGhlIEVDSE8sIGxldCB1cyBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VDSE9fQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSAvKgorCSAgKiBFQ0hPIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwgTm90IHN1cmUgd2hhdCB0byBkbywKKwkgICogbGV0IHVzIGNsb3NlIGl0CisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgdGhpcyBzaG91ZCBub3QgaGFwcGVuLCBsZXQncyBjbG9zZSB0aGUKKwkgICogY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIHNlcnZlciwgdGhpcyBpcyB3aGF0IHdlIGFyZSBhd2FpdGluZyxsZXRzIG1vdmUgdG8KKwkgICogRVNUQUJMSVNIRUQuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX0VDSE9fU0VSCisJICogU2VydmVyIHNlbnQgRUNITyBhbmQgd2FpdGluZyBDT09LRUkgQUNLIGZyb20gdGhlIGNsaWVudAorCSAqLworCXt7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSAvKgorCSAgKiBXZSBoYXZlIGdvdCBhbiBJTklUIGZyb20gY2xpZW50LiBGcm9tIHRoZSBzcGVjLuKAnFVwb24gcmVjZWlwdCBvZgorCSAgKiBhbiBJTklUIGluIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgYW4gZW5kcG9pbnQgTVVTVCByZXNwb25kIHdpdGgKKwkgICogYW4gSU5JVCBBQ0sgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyBpdCBzZW50IGluIGl0cyAgb3JpZ2luYWwKKwkgICogSU5JVCBjaHVuayAoaW5jbHVkaW5nIGl0cyBJbml0aWF0ZSBUYWcsIHVuY2hhbmdlZOKAnSkuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgc2VudCBieSB0aGUgc2VydmVyLCBVbmV4cGVjdGVkIElOSVQgQUNLLCBzcGVjIHNheXMsCisJICAqIOKAnElmIGFuIElOSVQgQUNLIGlzIHJlY2VpdmVkIGJ5IGFuIGVuZHBvaW50IGluIGFueSBzdGF0ZSBvdGhlcgorCSAgKiB0aGFuIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgdGhlIGVuZHBvaW50IHNob3VsZCBkaXNjYXJkIHRoZQorCSAgKiBJTklUIEFDSyBjaHVua+KAnS4gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FQ0hPX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgaGFzIGJlZW4gYnkgdGhlIHNlcnZlciwgbGV0IHVzIGNsb3NlIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ2xpZW50IHNlbnQgdGhlIEVDSE8sIG5vdCBzdXJlIHdoYXQgdG8gZG8sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIC8qCisJICAqIEVDSE8gcmVzZW50IGJ5IHRoZSBzZXJ2ZXIsIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRUNIT19TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIHRoaXMgaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLCBsZXQncyBtb3ZlCisJICAqIHRvIEVTVEFCTElTSEVELgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gc2VydmVyLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXRzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQKKwkgKiBBc3NvY2lhdGlvbiBlc3RhYmxpc2hlZAorCSAqLworCXt7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkgLyoKKwkgICogV2UgaGF2ZSBnb3QgYW4gSU5JVCBmcm9tIGNsaWVudC4gRnJvbSB0aGUgc3BlYy7igJxVcG9uIHJlY2VpcHQgb2YKKwkgICogYW4gSU5JVCBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIGFuIGVuZHBvaW50IE1VU1QgcmVzcG9uZCB3aXRoCisJICAqIGFuIElOSVQgQUNLIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgaXQgc2VudCBpbiBpdHMgIG9yaWdpbmFsCisJICAqIElOSVQgY2h1bmsgKGluY2x1ZGluZyBpdHMgSW5pdGlhdGUgVGFnLCB1bmNoYW5nZWTigJ0pLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIHNlbnQgYnkgdGhlIHNlcnZlciwgVW5leHBlY3RlZCBJTklUIEFDSywgc3BlYyBzYXlzLAorCSAgKiDigJxJZiBhbiBJTklUIEFDSyBpcyByZWNlaXZlZCBieSBhbiBlbmRwb2ludCBpbiBhbnkgc3RhdGUgb3RoZXIKKwkgICogdGhhbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIHRoZSBlbmRwb2ludCBzaG91bGQgZGlzY2FyZCB0aGUKKwkgICogSU5JVCBBQ0sgY2h1bmvigJ0uIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIENsaWVudCBzZW50IEVDSE8sIFNwZWMoc2VjIDUuMi40KSBzYXlzIGl0IG1heSBiZSBoYW5kbGVkIGJ5IHRoZQorCSAgKiBwZWVyIGFuZCBwZWVyIHNoYWxsIG1vdmUgdG8gdGhlIEVTVEFCSVNIRUQuIGlmIGl0IGRvZXNuJ3QgaGFuZGxlCisJICAqIGl0IHdpbGwgc2VuZCBFUlJPUiBjaHVuay4gU28sIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIG5vdCBzdXJlIHdoYXQgdG8gZG8gc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gZnJvbSB0aGUgY2xpZW50LCBtb3ZlIHRvIFNIVURET1dOX0NMSQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBmcm9tIHRoZSBzZXJ2ZXIsIG1vdmUgdG8gU0hVVERPV05fU0VSCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIC8qCisJICAqIGNsaWVudCBzZW50IFNIVURURE9XTl9BQ0ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlCisJICAqIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfU0hVVF9DTEkKKwkgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIGNsaWVudCwgd2FpdGluZiBmb3IgU0hVVCBBQ0sgZnJvbSB0aGUgc2VydmVyCisJICovCisJLyoKKwkgKiBXZSByZWNpZXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQorCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KKwkgKiBTSFVET1dOIHN0YXRlCisJICovCisKKwl7e0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgc2VudCBFQ0hPLCBTcGVjKHNlYyA1LjIuNCkgc2F5cyBpdCBtYXkgYmUgaGFuZGxlZCBieSB0aGUKKwkgICogcGVlciBhbmQgcGVlciBzaGFsbCBtb3ZlIHRvIHRoZSBFU1RBQklTSEVELiBpZiBpdCBkb2Vzbid0IGhhbmRsZQorCSAgKiBpdCB3aWxsIHNlbmQgRVJST1IgY2h1bmsuIFNvLCBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCBub3Qgc3VyZSB3aGF0IHRvIGRvIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIHJlc2VudCBmcm9tIHRoZSBjbGllbnQsIG1vdmUgdG8gU0hVRERPV05fQ0xJCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIGZyb20gdGhlIHNlcnZlciwgbW92ZSB0byBTSFVURE9XTl9TRVIKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogY2xpZW50IHNlbnQgU0hVRFRET1dOX0FDSywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgbGV0J3MgY2xvc2UKKwkgICogdGhlIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTZXJ2ZXIgc2VudCBTSFVURE9XTiBBQ0ssIHRoaXMgaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLCBsZXQncyBtb3ZlCisJICAqIHRvIFNIVURPV05fQUNLX1NFUgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIENPTSBmcm9tIGNsaWVudCwgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgbGV0J3MgY2xvc2UgdGhlCisJICAqIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfU0hVVF9TRVIKKwkgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIHNlcnZlciwgd2FpdGluZiBmb3IgU0hVVERPV04gQUNLIGZyb20gY2xpZW50CisJICovCisJLyoKKwkgKiBXZSByZWNpZXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQorCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KKwkgKiBTSFVET1dOIHN0YXRlCisJICovCisKKwl7e0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgc2VudCBFQ0hPLCBTcGVjKHNlYyA1LjIuNCkgc2F5cyBpdCBtYXkgYmUgaGFuZGxlZCBieSB0aGUKKwkgICogcGVlciBhbmQgcGVlciBzaGFsbCBtb3ZlIHRvIHRoZSBFU1RBQklTSEVELiBpZiBpdCBkb2Vzbid0IGhhbmRsZQorCSAgKiBpdCB3aWxsIHNlbmQgRVJST1IgY2h1bmsuIFNvLCBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCBub3Qgc3VyZSB3aGF0IHRvIGRvIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIHJlc2VudCBmcm9tIHRoZSBjbGllbnQsIG1vdmUgdG8gU0hVRERPV05fQ0xJCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIHJlc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIG1vdmUgdG8gU0hVVERPV05fU0VSCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIC8qCisJICAqIGNsaWVudCBzZW50IFNIVURURE9XTl9BQ0ssIHRoaXMgaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLCBsZXQncworCSAgKiBtb3ZlIHRvIFNIVVRfQUNLX0NMSQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIFNlcnZlciBzZW50IFNIVVRET1dOIEFDSywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgbGV0J3MgY2xvc2UgdGhlCisJICAqIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBDT00gZnJvbSBjbGllbnQsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKworCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJCisJICogU0hVVERPV04gQUNLIGZyb20gdGhlIGNsaWVudCwgYXdhaXRpbmcgZm9yIFNIVVRET1dOIENPTSBmcm9tIHNlcnZlcgorCSAqLworCS8qCisJICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCisJICogU0hVRE9XTiBzdGF0ZQorCSAqLworCisJe3tJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIENsaWVudCBzZW50IEVDSE8sIFNwZWMoc2VjIDUuMi40KSBzYXlzIGl0IG1heSBiZSBoYW5kbGVkIGJ5IHRoZQorCSAgKiBwZWVyIGFuZCBwZWVyIHNoYWxsIG1vdmUgdG8gdGhlIEVTVEFCSVNIRUQuIGlmIGl0IGRvZXNuJ3QgaGFuZGxlCisJICAqIGl0IHdpbGwgc2VuZCBFUlJPUiBjaHVuay4gU28sIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIG5vdCBzdXJlIHdoYXQgdG8gZG8gc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIGNsaWVudCwgbW92ZSB0byBTSFVERE9XTl9DTEkKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIG1vdmUgdG8gU0hVVERPV05fU0VSCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIC8qCisJICAqIGNsaWVudCByZXNlbnQgU0hVRFRET1dOX0FDSywgbGV0J3Mgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIFNlcnZlciBzZW50IFNIVVRET1dOIEFDSywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgbGV0J3MgY2xvc2UgdGhlCisJICAqIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBDT00gZnJvbSBjbGllbnQsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gQ09NUExFVEUgZnJvbSBzZXJ2ZXIgdGhpcyBpcyB3aGF0IHdlIGFyZSBleHBlY3RpbmcuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCisJLyoKKwkgKiBTdGF0ZSA6IElQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIKKwkgKiBTSFVURE9XTiBBQ0sgZnJvbSB0aGUgc2VydmVyLCBhd2FpdGluZyBmb3IgU0hVVERPV04gQ09NIGZyb20gY2xpZW50CisJICovCisJLyoKKwkgKiBXZSByZWNpZXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQorCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KKwkgKiBTSFVET1dOIHN0YXRlCisJICovCisKKwl7e0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkgLyoKKwkgICogV2UgaGF2ZSBnb3QgYW4gSU5JVCBmcm9tIGNsaWVudC4gRnJvbSB0aGUgc3BlYy7igJxVcG9uIHJlY2VpcHQgb2YKKwkgICogYW4gSU5JVCBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIGFuIGVuZHBvaW50IE1VU1QgcmVzcG9uZCB3aXRoCisJICAqIGFuIElOSVQgQUNLIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgaXQgc2VudCBpbiBpdHMgIG9yaWdpbmFsCisJICAqIElOSVQgY2h1bmsgKGluY2x1ZGluZyBpdHMgSW5pdGlhdGUgVGFnLCB1bmNoYW5nZWTigJ0pLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIHNlbnQgYnkgdGhlIHNlcnZlciwgVW5leHBlY3RlZCBJTklUIEFDSywgc3BlYyBzYXlzLAorCSAgKiDigJxJZiBhbiBJTklUIEFDSyBpcyByZWNlaXZlZCBieSBhbiBlbmRwb2ludCBpbiBhbnkgc3RhdGUgb3RoZXIKKwkgICogdGhhbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIHRoZSBlbmRwb2ludCBzaG91bGQgZGlzY2FyZCB0aGUKKwkgICogSU5JVCBBQ0sgY2h1bmvigJ0uIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ2xpZW50IHNlbnQgRUNITywgU3BlYyhzZWMgNS4yLjQpIHNheXMgaXQgbWF5IGJlIGhhbmRsZWQgYnkgdGhlCisJICAqIHBlZXIgYW5kIHBlZXIgc2hhbGwgbW92ZSB0byB0aGUgRVNUQUJJU0hFRC4gaWYgaXQgZG9lc24ndCBoYW5kbGUKKwkgICogaXQgd2lsbCBzZW5kIEVSUk9SIGNodW5rLiBTbywgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgbm90IHN1cmUgd2hhdCB0byBkbyBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIHNlbnQgZnJvbSB0aGUgY2xpZW50LCBtb3ZlIHRvIFNIVURET1dOX0NMSQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIHNlcnZlciwgbW92ZSB0byBTSFVURE9XTl9TRVIKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogY2xpZW50IHNlbnQgU0hVRFRET1dOX0FDSywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZXQncyBjbG9zZQorCSAgKiB0aGUgY29ubmVjdGlvbi4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTZXJ2ZXIgcmVzZW50IFNIVVRET1dOIEFDSywgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIENPTSBmcm9tIGNsaWVudCwgdGhpcyB3aGF0IHdlIGFyZSBleHBlY3RpbmcsIGxldCdzIGNsb3NlCisJICAqIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gQ09NUExFVEUgZnJvbSBzZXJ2ZXIgdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0sCisJLyoKKwkgKiBTdGF0ZSA6IElQX1ZTX1NDVFBfU19DTE9TRUQKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0KK307CisKKy8qCisgKiAgICAgIFRpbWVvdXQgdGFibGVbc3RhdGVdCisgKi8KK3N0YXRpYyBpbnQgc2N0cF90aW1lb3V0c1tJUF9WU19TQ1RQX1NfTEFTVCArIDFdID0geworCVtJUF9WU19TQ1RQX1NfTk9ORV0gICAgICAgICA9ICAgICAyICogSFosCisJW0lQX1ZTX1NDVFBfU19JTklUX0NMSV0gICAgID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfSU5JVF9TRVJdICAgICA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSV0gPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19JTklUX0FDS19TRVJdID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfRUNIT19DTEldICAgICA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0VDSE9fU0VSXSAgICAgPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRF0gID0gICAgMTUgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9DTEldICAgICA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX1NIVVRfU0VSXSAgICAgPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEldID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSXSA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0NMT1NFRF0gICAgICAgPSAgICAxMCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfTEFTVF0gICAgICAgICA9ICAgICAyICogSFosCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2N0cF9zdGF0ZV9uYW1lX3RhYmxlW0lQX1ZTX1NDVFBfU19MQVNUICsgMV0gPSB7CisJW0lQX1ZTX1NDVFBfU19OT05FXSAgICAgICAgID0gICAgIk5PTkUiLAorCVtJUF9WU19TQ1RQX1NfSU5JVF9DTEldICAgICA9ICAgICJJTklUX0NMSSIsCisJW0lQX1ZTX1NDVFBfU19JTklUX1NFUl0gICAgID0gICAgIklOSVRfU0VSIiwKKwlbSVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSV0gPSAgICAiSU5JVF9BQ0tfQ0xJIiwKKwlbSVBfVlNfU0NUUF9TX0lOSVRfQUNLX1NFUl0gPSAgICAiSU5JVF9BQ0tfU0VSIiwKKwlbSVBfVlNfU0NUUF9TX0VDSE9fQ0xJXSAgICAgPSAgICAiQ09PS0lFX0VDSE9fQ0xJIiwKKwlbSVBfVlNfU0NUUF9TX0VDSE9fU0VSXSAgICAgPSAgICAiQ09PS0lFX0VDSE9fU0VSIiwKKwlbSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEXSAgPSAgICAiRVNUQUJJU0hFRCIsCisJW0lQX1ZTX1NDVFBfU19TSFVUX0NMSV0gICAgID0gICAgIlNIVVRET1dOX0NMSSIsCisJW0lQX1ZTX1NDVFBfU19TSFVUX1NFUl0gICAgID0gICAgIlNIVVRET1dOX1NFUiIsCisJW0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEldID0gICAgIlNIVVRET1dOX0FDS19DTEkiLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSXSA9ICAgICJTSFVURE9XTl9BQ0tfU0VSIiwKKwlbSVBfVlNfU0NUUF9TX0NMT1NFRF0gICAgICAgPSAgICAiQ0xPU0VEIiwKKwlbSVBfVlNfU0NUUF9TX0xBU1RdICAgICAgICAgPSAgICAiQlVHISIKK307CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjdHBfc3RhdGVfbmFtZShpbnQgc3RhdGUpCit7CisJaWYgKHN0YXRlID49IElQX1ZTX1NDVFBfU19MQVNUKQorCQlyZXR1cm4gIkVSUiEiOworCWlmIChzY3RwX3N0YXRlX25hbWVfdGFibGVbc3RhdGVdKQorCQlyZXR1cm4gc2N0cF9zdGF0ZV9uYW1lX3RhYmxlW3N0YXRlXTsKKwlyZXR1cm4gIj8iOworfQorCitzdGF0aWMgdm9pZCBzY3RwX3RpbWVvdXRfY2hhbmdlKHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBmbGFncykKK3sKK30KKworc3RhdGljIGludAorc2N0cF9zZXRfc3RhdGVfdGltZW91dChzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBjaGFyICpzbmFtZSwgaW50IHRvKQoreworCityZXR1cm4gaXBfdnNfc2V0X3N0YXRlX3RpbWVvdXQocHAtPnRpbWVvdXRfdGFibGUsIElQX1ZTX1NDVFBfU19MQVNULAorCQkJCXNjdHBfc3RhdGVfbmFtZV90YWJsZSwgc25hbWUsIHRvKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3NldF9zY3RwX3N0YXRlKHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCwKKwkJaW50IGRpcmVjdGlvbiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzY3RwX2NodW5raGRyX3QgX3NjdHBjaCwgKnNjaDsKKwl1bnNpZ25lZCBjaGFyIGNodW5rX3R5cGU7CisJaW50IGV2ZW50LCBuZXh0X3N0YXRlOworCWludCBpaGw7CisKKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorCWlobCA9IGNwLT5hZiA9PSBBRl9JTkVUID8gaXBfaGRybGVuKHNrYikgOiBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworI2Vsc2UKKwlpaGwgPSBpcF9oZHJsZW4oc2tiKTsKKyNlbmRpZgorCisJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaWhsICsgc2l6ZW9mKHNjdHBfc2N0cGhkcl90KSwKKwkJCQlzaXplb2YoX3NjdHBjaCksICZfc2N0cGNoKTsKKwlpZiAoc2NoID09IE5VTEwpCisJCXJldHVybiAwOworCisJY2h1bmtfdHlwZSA9IHNjaC0+dHlwZTsKKwkvKgorCSAqIFNlY3Rpb24gMzogTXVsdGlwbGUgY2h1bmtzIGNhbiBiZSBidW5kbGVkIGludG8gb25lIFNDVFAgcGFja2V0CisJICogdXAgdG8gdGhlIE1UVSBzaXplLCBleGNlcHQgZm9yIHRoZSBJTklULCBJTklUIEFDSywgYW5kCisJICogU0hVVERPV04gQ09NUExFVEUgY2h1bmtzLiBUaGVzZSBjaHVua3MgTVVTVCBOT1QgYmUgYnVuZGxlZCB3aXRoCisJICogYW55IG90aGVyIGNodW5rIGluIGEgcGFja2V0LgorCSAqCisJICogU2VjdGlvbiAzLjMuNzogREFUQSBjaHVua3MgTVVTVCBOT1QgYmUgYnVuZGxlZCB3aXRoIEFCT1JULiBDb250cm9sCisJICogY2h1bmtzIChleGNlcHQgZm9yIElOSVQsIElOSVQgQUNLLCBhbmQgU0hVVERPV04gQ09NUExFVEUpIE1BWSBiZQorCSAqIGJ1bmRsZWQgd2l0aCBhbiBBQk9SVCwgYnV0IHRoZXkgTVVTVCBiZSBwbGFjZWQgYmVmb3JlIHRoZSBBQk9SVAorCSAqIGluIHRoZSBTQ1RQIHBhY2tldCBvciB0aGV5IHdpbGwgYmUgaWdub3JlZCBieSB0aGUgcmVjZWl2ZXIuCisJICovCisJaWYgKChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0VDSE8pIHx8CisJICAgIChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0FDSykpIHsKKwkJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgKGlobCArIHNpemVvZihzY3RwX3NjdHBoZHJfdCkgKworCQkJCXNjaC0+bGVuZ3RoKSwgc2l6ZW9mKF9zY3RwY2gpLCAmX3NjdHBjaCk7CisJCWlmIChzY2gpIHsKKwkJCWlmIChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQUJPUlQpCisJCQkJY2h1bmtfdHlwZSA9IHNjaC0+dHlwZTsKKwkJfQorCX0KKworCWV2ZW50ID0gc2N0cF9ldmVudHNbY2h1bmtfdHlwZV07CisKKwkvKgorCSAqICBJZiB0aGUgZGlyZWN0aW9uIGlzIElQX1ZTX0RJUl9PVVRQVVQsIHRoaXMgZXZlbnQgaXMgZnJvbSBzZXJ2ZXIKKwkgKi8KKwlpZiAoZGlyZWN0aW9uID09IElQX1ZTX0RJUl9PVVRQVVQpCisJCWV2ZW50Kys7CisJLyoKKwkgKiBnZXQgbmV4dCBzdGF0ZQorCSAqLworCW5leHRfc3RhdGUgPSBzY3RwX3N0YXRlc190YWJsZVtjcC0+c3RhdGVdW2V2ZW50XS5uZXh0X3N0YXRlOworCisJaWYgKG5leHRfc3RhdGUgIT0gY3AtPnN0YXRlKSB7CisJCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0ID0gY3AtPmRlc3Q7CisKKwkJSVBfVlNfREJHX0JVRig4LCAiJXMgJXMgICVzOiVkLT4iCisJCQkJIiVzOiVkIHN0YXRlOiAlcy0+JXMgY29ubi0+cmVmY250OiVkXG4iLAorCQkJCXBwLT5uYW1lLAorCQkJCSgoZGlyZWN0aW9uID09IElQX1ZTX0RJUl9PVVRQVVQpID8KKwkJCQkgIm91dHB1dCAiIDogImlucHV0ICIpLAorCQkJCUlQX1ZTX0RCR19BRERSKGNwLT5hZiwgJmNwLT5kYWRkciksCisJCQkJbnRvaHMoY3AtPmRwb3J0KSwKKwkJCQlJUF9WU19EQkdfQUREUihjcC0+YWYsICZjcC0+Y2FkZHIpLAorCQkJCW50b2hzKGNwLT5jcG9ydCksCisJCQkJc2N0cF9zdGF0ZV9uYW1lKGNwLT5zdGF0ZSksCisJCQkJc2N0cF9zdGF0ZV9uYW1lKG5leHRfc3RhdGUpLAorCQkJCWF0b21pY19yZWFkKCZjcC0+cmVmY250KSk7CisJCWlmIChkZXN0KSB7CisJCQlpZiAoIShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpICYmCisJCQkJKG5leHRfc3RhdGUgIT0gSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEKSkgeworCQkJCWF0b21pY19kZWMoJmRlc3QtPmFjdGl2ZWNvbm5zKTsKKwkJCQlhdG9taWNfaW5jKCZkZXN0LT5pbmFjdGNvbm5zKTsKKwkJCQljcC0+ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0lOQUNUSVZFOworCQkJfSBlbHNlIGlmICgoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSAmJgorCQkJCSAgIChuZXh0X3N0YXRlID09IElQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCkpIHsKKwkJCQlhdG9taWNfaW5jKCZkZXN0LT5hY3RpdmVjb25ucyk7CisJCQkJYXRvbWljX2RlYygmZGVzdC0+aW5hY3Rjb25ucyk7CisJCQkJY3AtPmZsYWdzICY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CisJCQl9CisJCX0KKwl9CisKKwkgY3AtPnRpbWVvdXQgPSBwcC0+dGltZW91dF90YWJsZVtjcC0+c3RhdGUgPSBuZXh0X3N0YXRlXTsKKworCSByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2N0cF9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcmVjdGlvbiwKKwkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmY3AtPmxvY2spOworCXJldCA9IHNldF9zY3RwX3N0YXRlKHBwLCBjcCwgZGlyZWN0aW9uLCBza2IpOworCXNwaW5fdW5sb2NrKCZjcC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogICAgICBIYXNoIHRhYmxlIGZvciBTQ1RQIGFwcGxpY2F0aW9uIGluY2FybmF0aW9ucworICovCisjZGVmaW5lIFNDVFBfQVBQX1RBQl9CSVRTICAgICAgICA0CisjZGVmaW5lIFNDVFBfQVBQX1RBQl9TSVpFICAgICAgICAoMSA8PCBTQ1RQX0FQUF9UQUJfQklUUykKKyNkZWZpbmUgU0NUUF9BUFBfVEFCX01BU0sgICAgICAgIChTQ1RQX0FQUF9UQUJfU0laRSAtIDEpCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHNjdHBfYXBwc1tTQ1RQX0FQUF9UQUJfU0laRV07CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjdHBfYXBwX2xvY2spOworCitzdGF0aWMgaW5saW5lIF9fdTE2IHNjdHBfYXBwX2hhc2hrZXkoX19iZTE2IHBvcnQpCit7CisJcmV0dXJuICgoKF9fZm9yY2UgdTE2KXBvcnQgPj4gU0NUUF9BUFBfVEFCX0JJVFMpIF4gKF9fZm9yY2UgdTE2KXBvcnQpCisJCSYgU0NUUF9BUFBfVEFCX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF9yZWdpc3Rlcl9hcHAoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKQoreworCXN0cnVjdCBpcF92c19hcHAgKmk7CisJX191MTYgaGFzaDsKKwlfX2JlMTYgcG9ydCA9IGluYy0+cG9ydDsKKwlpbnQgcmV0ID0gMDsKKworCWhhc2ggPSBzY3RwX2FwcF9oYXNoa2V5KHBvcnQpOworCisJc3Bpbl9sb2NrX2JoKCZzY3RwX2FwcF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZzY3RwX2FwcHNbaGFzaF0sIHBfbGlzdCkgeworCQlpZiAoaS0+cG9ydCA9PSBwb3J0KSB7CisJCQlyZXQgPSAtRUVYSVNUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJbGlzdF9hZGQoJmluYy0+cF9saXN0LCAmc2N0cF9hcHBzW2hhc2hdKTsKKwlhdG9taWNfaW5jKCZpcF92c19wcm90b2NvbF9zY3RwLmFwcGNudCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnNjdHBfYXBwX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2N0cF91bnJlZ2lzdGVyX2FwcChzdHJ1Y3QgaXBfdnNfYXBwICppbmMpCit7CisJc3Bpbl9sb2NrX2JoKCZzY3RwX2FwcF9sb2NrKTsKKwlhdG9taWNfZGVjKCZpcF92c19wcm90b2NvbF9zY3RwLmFwcGNudCk7CisJbGlzdF9kZWwoJmluYy0+cF9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmc2N0cF9hcHBfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF9hcHBfY29ubl9iaW5kKHN0cnVjdCBpcF92c19jb25uICpjcCkKK3sKKwlpbnQgaGFzaDsKKwlzdHJ1Y3QgaXBfdnNfYXBwICppbmM7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBEZWZhdWx0IGJpbmRpbmc6IGJpbmQgYXBwIG9ubHkgZm9yIE5BVCAqLworCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKKwkJcmV0dXJuIDA7CisJLyogTG9va3VwIGFwcGxpY2F0aW9uIGluY2FybmF0aW9ucyBhbmQgYmluZCB0aGUgcmlnaHQgb25lICovCisJaGFzaCA9IHNjdHBfYXBwX2hhc2hrZXkoY3AtPnZwb3J0KTsKKworCXNwaW5fbG9jaygmc2N0cF9hcHBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmMsICZzY3RwX2FwcHNbaGFzaF0sIHBfbGlzdCkgeworCQlpZiAoaW5jLT5wb3J0ID09IGNwLT52cG9ydCkgeworCQkJaWYgKHVubGlrZWx5KCFpcF92c19hcHBfaW5jX2dldChpbmMpKSkKKwkJCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrKCZzY3RwX2FwcF9sb2NrKTsKKworCQkJSVBfVlNfREJHX0JVRig5LCAiJXM6IEJpbmRpbmcgY29ubiAlczoldS0+IgorCQkJCQkiJXM6JXUgdG8gYXBwICVzIG9uIHBvcnQgJXVcbiIsCisJCQkJCV9fZnVuY19fLAorCQkJCQlJUF9WU19EQkdfQUREUihjcC0+YWYsICZjcC0+Y2FkZHIpLAorCQkJCQludG9ocyhjcC0+Y3BvcnQpLAorCQkJCQlJUF9WU19EQkdfQUREUihjcC0+YWYsICZjcC0+dmFkZHIpLAorCQkJCQludG9ocyhjcC0+dnBvcnQpLAorCQkJCQlpbmMtPm5hbWUsIG50b2hzKGluYy0+cG9ydCkpOworCQkJY3AtPmFwcCA9IGluYzsKKwkJCWlmIChpbmMtPmluaXRfY29ubikKKwkJCQlyZXN1bHQgPSBpbmMtPmluaXRfY29ubihpbmMsIGNwKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZzY3RwX2FwcF9sb2NrKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpcF92c19zY3RwX2luaXQoc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCkKK3sKKwlJUF9WU19JTklUX0hBU0hfVEFCTEUoc2N0cF9hcHBzKTsKKwlwcC0+dGltZW91dF90YWJsZSA9IHNjdHBfdGltZW91dHM7Cit9CisKKworc3RhdGljIHZvaWQgaXBfdnNfc2N0cF9leGl0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApCit7CisKK30KKworc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHAgPSB7CisJLm5hbWUgPSAiU0NUUCIsCisJLnByb3RvY29sID0gSVBQUk9UT19TQ1RQLAorCS5udW1fc3RhdGVzID0gSVBfVlNfU0NUUF9TX0xBU1QsCisJLmRvbnRfZGVmcmFnID0gMCwKKwkuYXBwY250ID0gQVRPTUlDX0lOSVQoMCksCisJLmluaXQgPSBpcF92c19zY3RwX2luaXQsCisJLmV4aXQgPSBpcF92c19zY3RwX2V4aXQsCisJLnJlZ2lzdGVyX2FwcCA9IHNjdHBfcmVnaXN0ZXJfYXBwLAorCS51bnJlZ2lzdGVyX2FwcCA9IHNjdHBfdW5yZWdpc3Rlcl9hcHAsCisJLmNvbm5fc2NoZWR1bGUgPSBzY3RwX2Nvbm5fc2NoZWR1bGUsCisJLmNvbm5faW5fZ2V0ID0gc2N0cF9jb25uX2luX2dldCwKKwkuY29ubl9vdXRfZ2V0ID0gc2N0cF9jb25uX291dF9nZXQsCisJLnNuYXRfaGFuZGxlciA9IHNjdHBfc25hdF9oYW5kbGVyLAorCS5kbmF0X2hhbmRsZXIgPSBzY3RwX2RuYXRfaGFuZGxlciwKKwkuY3N1bV9jaGVjayA9IHNjdHBfY3N1bV9jaGVjaywKKwkuc3RhdGVfbmFtZSA9IHNjdHBfc3RhdGVfbmFtZSwKKwkuc3RhdGVfdHJhbnNpdGlvbiA9IHNjdHBfc3RhdGVfdHJhbnNpdGlvbiwKKwkuYXBwX2Nvbm5fYmluZCA9IHNjdHBfYXBwX2Nvbm5fYmluZCwKKwkuZGVidWdfcGFja2V0ID0gaXBfdnNfdGNwdWRwX2RlYnVnX3BhY2tldCwKKwkudGltZW91dF9jaGFuZ2UgPSBzY3RwX3RpbWVvdXRfY2hhbmdlLAorCS5zZXRfc3RhdGVfdGltZW91dCA9IHNjdHBfc2V0X3N0YXRlX3RpbWVvdXQsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggZTE3N2YwZC4uOGZiMGFlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC00MDAsNiArNDAwLDExIEBACiAJCQkJCWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9JTkFDVElWRTsKIAkJCQllbHNlCiAJCQkJCWZsYWdzICY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CisJCQl9IGVsc2UgaWYgKHMtPnByb3RvY29sID09IElQUFJPVE9fU0NUUCkgeworCQkJCWlmIChzdGF0ZSAhPSBJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQpCisJCQkJCWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9JTkFDVElWRTsKKwkJCQllbHNlCisJCQkJCWZsYWdzICY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CiAJCQl9CiAJCQljcCA9IGlwX3ZzX2Nvbm5fbmV3KEFGX0lORVQsIHMtPnByb3RvY29sLAogCQkJCQkgICAgKHVuaW9uIG5mX2luZXRfYWRkciAqKSZzLT5jYWRkciwKQEAgLTQzNCw2ICs0MzksMTUgQEAKIAkJCQlhdG9taWNfZGVjKCZkZXN0LT5pbmFjdGNvbm5zKTsKIAkJCQljcC0+ZmxhZ3MgJj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTsKIAkJCX0KKwkJfSBlbHNlIGlmICgoY3AtPmRlc3QpICYmIChjcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSAmJgorCQkJICAgKGNwLT5zdGF0ZSAhPSBzdGF0ZSkpIHsKKwkJCWRlc3QgPSBjcC0+ZGVzdDsKKwkJCWlmICghKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9JTkFDVElWRSkgJiYKKwkJCSAgICAgKHN0YXRlICE9IElQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCkpIHsKKwkJCSAgICBhdG9taWNfZGVjKCZkZXN0LT5hY3RpdmVjb25ucyk7CisJCQkgICAgYXRvbWljX2luYygmZGVzdC0+aW5hY3Rjb25ucyk7CisJCQkgICAgY3AtPmZsYWdzICY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CisJCQl9CiAJCX0KIAogCQlpZiAob3B0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggMzBiMzE4OS4uMjIzYjUwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOwogCWlmIChza2ItPmxlbiA+IG10dSkgewogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKIAl9CkBAIC00NTQsNyArNDU0LDcgQEAKIAltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOwogCWlmIChza2ItPmxlbiA+IG10dSkgewogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCUlQX1ZTX0RCR19STF9QS1QoMCwgcHAsIHNrYiwgMCwKIAkJCQkgImlwX3ZzX25hdF94bWl0X3Y2KCk6IGZyYWcgbmVlZGVkIGZvciIpOwogCQlnb3RvIHR4X2Vycm9yOwpAQCAtNjcyLDcgKzY3Miw3IEBACiAJCXNrYl9kc3Qoc2tiKS0+b3BzLT51cGRhdGVfcG10dShza2JfZHN0KHNrYiksIG10dSk7CiAKIAlpZiAobXR1IDwgbnRvaHMob2xkX2lwaC0+cGF5bG9hZF9sZW4pICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgewotCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKQEAgLTgxNCw3ICs4MTQsNyBAQAogCS8qIE1UVSBjaGVja2luZyAqLwogCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCk7CiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwpAQCAtOTY1LDcgKzk2NSw3IEBACiAJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDRkNzllM2MuLjBjOWJiZTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KIApAQCAtNjgsNyArNjksNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQ7CiAKIHN0YXRpYyB1X2ludDMyX3QgX19oYXNoX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCQkgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgcm5kKQorCQkJCSAgdTE2IHpvbmUsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgcm5kKQogewogCXVuc2lnbmVkIGludCBuOwogCXVfaW50MzJfdCBoOwpAQCAtNzksMTYgKzgwLDE2IEBACiAJICovCiAJbiA9IChzaXplb2YodHVwbGUtPnNyYykgKyBzaXplb2YodHVwbGUtPmRzdC51MykpIC8gc2l6ZW9mKHUzMik7CiAJaCA9IGpoYXNoMigodTMyICopdHVwbGUsIG4sCi0JCSAgIHJuZCBeICgoKF9fZm9yY2UgX191MTYpdHVwbGUtPmRzdC51LmFsbCA8PCAxNikgfAotCQkJICB0dXBsZS0+ZHN0LnByb3RvbnVtKSk7CisJCSAgIHpvbmUgXiBybmQgXiAoKChfX2ZvcmNlIF9fdTE2KXR1cGxlLT5kc3QudS5hbGwgPDwgMTYpIHwKKwkJCQkgdHVwbGUtPmRzdC5wcm90b251bSkpOwogCiAJcmV0dXJuICgodTY0KWggKiBzaXplKSA+PiAzMjsKIH0KIAotc3RhdGljIGlubGluZSB1X2ludDMyX3QgaGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIGlubGluZSB1X2ludDMyX3QgaGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0JcmV0dXJuIF9faGFzaF9jb25udHJhY2sodHVwbGUsIG5ldC0+Y3QuaHRhYmxlX3NpemUsCisJcmV0dXJuIF9faGFzaF9jb25udHJhY2sodHVwbGUsIHpvbmUsIG5ldC0+Y3QuaHRhYmxlX3NpemUsCiAJCQkJbmZfY29ubnRyYWNrX2hhc2hfcm5kKTsKIH0KIApAQCAtMjkyLDExICsyOTMsMTIgQEAKICAqIC0gQ2FsbGVyIG11c3QgbG9jayBuZl9jb25udHJhY2tfbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCi1fX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitfX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHR1cGxlKTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgem9uZSwgdHVwbGUpOwogCiAJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5vcm1hbGx5IG5lZWQgdG8gZGlzYWJsZSB0aGVtCiAJICogYXQgbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KQEAgLTMwNCw3ICszMDYsOCBAQAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIGJlZ2luOgogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpIHsKLQkJaWYgKG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CisJCWlmIChuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSAmJgorCQkgICAgbmZfY3Rfem9uZShuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpKSA9PSB6b25lKSB7CiAJCQlORl9DVF9TVEFUX0lOQyhuZXQsIGZvdW5kKTsKIAkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJcmV0dXJuIGg7CkBAIC0zMjYsMjEgKzMyOSwyMyBAQAogCiAvKiBGaW5kIGEgY29ubmVjdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgdHVwbGUuICovCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgotbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCituZl9jb25udHJhY2tfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25uICpjdDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIGJlZ2luOgotCWggPSBfX25mX2Nvbm50cmFja19maW5kKG5ldCwgdHVwbGUpOworCWggPSBfX25mX2Nvbm50cmFja19maW5kKG5ldCwgem9uZSwgdHVwbGUpOwogCWlmIChoKSB7CiAJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJaWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGN0KSB8fAogCQkJICAgICAhYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkpCiAJCQloID0gTlVMTDsKIAkJZWxzZSB7Ci0JCQlpZiAodW5saWtlbHkoIW5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSkgeworCQkJaWYgKHVubGlrZWx5KCFuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSB8fAorCQkJCSAgICAgbmZfY3Rfem9uZShjdCkgIT0gem9uZSkpIHsKIAkJCQluZl9jdF9wdXQoY3QpOwogCQkJCWdvdG8gYmVnaW47CiAJCQl9CkBAIC0zNjgsOSArMzczLDExIEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAl1bnNpZ25lZCBpbnQgaGFzaCwgcmVwbF9oYXNoOworCXUxNiB6b25lOwogCi0JaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7Ci0JcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwl6b25lID0gbmZfY3Rfem9uZShjdCk7CisJaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgem9uZSwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB6b25lLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKIAogCV9fbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0LCBoYXNoLCByZXBsX2hhc2gpOwogfQpAQCAtMzg3LDYgKzM5NCw3IEBACiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJc3RydWN0IG5ldCAqbmV0OworCXUxNiB6b25lOwogCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAluZXQgPSBuZl9jdF9uZXQoY3QpOwpAQCAtMzk4LDggKzQwNiw5IEBACiAJaWYgKENUSU5GTzJESVIoY3RpbmZvKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQloYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKLQlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOworCXpvbmUgPSBuZl9jdF96b25lKGN0KTsKKwloYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB6b25lLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHpvbmUsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwogCiAJLyogV2UncmUgbm90IGluIGhhc2ggdGFibGUsIGFuZCB3ZSByZWZ1c2UgdG8gc2V0IHVwIHJlbGF0ZWQKIAkgICBjb25uZWN0aW9ucyBmb3IgdW5jb25maXJtZWQgY29ubnMuICBCdXQgcGFja2V0IGNvcGllcyBhbmQKQEAgLTQxOCwxMSArNDI3LDEzIEBACiAJICAgbm90IGluIHRoZSBoYXNoLiAgSWYgdGhlcmUgaXMsIHdlIGxvc3QgcmFjZS4gKi8KIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpCiAJCWlmIChuZl9jdF90dXBsZV9lcXVhbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLAotCQkJCSAgICAgICZoLT50dXBsZSkpCisJCQkJICAgICAgJmgtPnR1cGxlKSAmJgorCQkgICAgem9uZSA9PSBuZl9jdF96b25lKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkpKQogCQkJZ290byBvdXQ7CiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtyZXBsX2hhc2hdLCBobm5vZGUpCiAJCWlmIChuZl9jdF90dXBsZV9lcXVhbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAotCQkJCSAgICAgICZoLT50dXBsZSkpCisJCQkJICAgICAgJmgtPnR1cGxlKSAmJgorCQkgICAgem9uZSA9PSBuZl9jdF96b25lKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkpKQogCQkJZ290byBvdXQ7CiAKIAkvKiBSZW1vdmUgZnJvbSB1bmNvbmZpcm1lZCBsaXN0ICovCkBAIC00NjksMTUgKzQ4MCwxOSBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChpZ25vcmVkX2Nvbm50cmFjayk7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB0dXBsZSk7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCXUxNiB6b25lID0gbmZfY3Rfem9uZShpZ25vcmVkX2Nvbm50cmFjayk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHpvbmUsIHR1cGxlKTsKIAogCS8qIERpc2FibGUgQkhzIHRoZSBlbnRpcmUgdGltZSBzaW5jZSB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlbSBhdAogCSAqIGxlYXN0IG9uY2UgZm9yIHRoZSBzdGF0cyBhbnl3YXkuCiAJICovCiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpIHsKLQkJaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkgIT0gaWdub3JlZF9jb25udHJhY2sgJiYKLQkJICAgIG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CisJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKwkJaWYgKGN0ICE9IGlnbm9yZWRfY29ubnRyYWNrICYmCisJCSAgICBuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSAmJgorCQkgICAgbmZfY3Rfem9uZShjdCkgPT0gem9uZSkgewogCQkJTkZfQ1RfU1RBVF9JTkMobmV0LCBmb3VuZCk7CiAJCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAkJCXJldHVybiAxOwpAQCAtNTQwLDcgKzU1NSw3IEBACiAJcmV0dXJuIGRyb3BwZWQ7CiB9CiAKLXN0cnVjdCBuZl9jb25uICpuZl9jb25udHJhY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LAorc3RydWN0IG5mX2Nvbm4gKm5mX2Nvbm50cmFja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVwbCwKIAkJCQkgICBnZnBfdCBnZnApCkBAIC01NTgsNyArNTczLDcgQEAKIAogCWlmIChuZl9jb25udHJhY2tfbWF4ICYmCiAJICAgIHVubGlrZWx5KGF0b21pY19yZWFkKCZuZXQtPmN0LmNvdW50KSA+IG5mX2Nvbm50cmFja19tYXgpKSB7Ci0JCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCBvcmlnKTsKKwkJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHpvbmUsIG9yaWcpOwogCQlpZiAoIWVhcmx5X2Ryb3AobmV0LCBoYXNoKSkgewogCQkJYXRvbWljX2RlYygmbmV0LT5jdC5jb3VudCk7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtNTk1LDEzICs2MTAsMjggQEAKICNpZmRlZiBDT05GSUdfTkVUX05TCiAJY3QtPmN0X25ldCA9IG5ldDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKKwlpZiAoem9uZSkgeworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKm5mX2N0X3pvbmU7CiAKKwkJbmZfY3Rfem9uZSA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9aT05FLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFuZl9jdF96b25lKQorCQkJZ290byBvdXRfZnJlZTsKKwkJbmZfY3Rfem9uZS0+aWQgPSB6b25lOworCX0KKyNlbmRpZgogCS8qCiAJICogY2hhbmdlcyB0byBsb29rdXAga2V5cyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgcmVmY250IHRvIDEKIAkgKi8KIAlzbXBfd21iKCk7CiAJYXRvbWljX3NldCgmY3QtPmN0X2dlbmVyYWwudXNlLCAxKTsKIAlyZXR1cm4gY3Q7CisKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCitvdXRfZnJlZToKKwlrbWVtX2NhY2hlX2ZyZWUobmV0LT5jdC5uZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19hbGxvYyk7CiAKQEAgLTYxOSw3ICs2NDksNyBAQAogLyogQWxsb2NhdGUgYSBuZXcgY29ubnRyYWNrOiB3ZSByZXR1cm4gLUVOT01FTSBpZiBjbGFzc2lmaWNhdGlvbgogICAgZmFpbGVkIGR1ZSB0byBzdHJlc3MuICBPdGhlcndpc2UgaXQgcmVhbGx5IGlzIHVuY2xhc3NpZmlhYmxlLiAqLwogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCi1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsCitpbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAogCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAogCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8sCkBAIC02MjksMTQgKzY1OSwxNiBAQAogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgcmVwbF90dXBsZTsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJdTE2IHpvbmUgPSB0bXBsID8gbmZfY3Rfem9uZSh0bXBsKSA6IE5GX0NUX0RFRkFVTFRfWk9ORTsKIAogCWlmICghbmZfY3RfaW52ZXJ0X3R1cGxlKCZyZXBsX3R1cGxlLCB0dXBsZSwgbDNwcm90bywgbDRwcm90bykpIHsKIAkJcHJfZGVidWcoIkNhbid0IGludmVydCB0dXBsZS5cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhuZXQsIHR1cGxlLCAmcmVwbF90dXBsZSwgR0ZQX0FUT01JQyk7CisJY3QgPSBuZl9jb25udHJhY2tfYWxsb2MobmV0LCB6b25lLCB0dXBsZSwgJnJlcGxfdHVwbGUsIEdGUF9BVE9NSUMpOwogCWlmIChJU19FUlIoY3QpKSB7CiAJCXByX2RlYnVnKCJDYW4ndCBhbGxvY2F0ZSBjb25udHJhY2suXG4iKTsKIAkJcmV0dXJuIChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiljdDsKQEAgLTY0OSwxMCArNjgxLDE0IEBACiAJfQogCiAJbmZfY3RfYWNjdF9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKLQluZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CisKKwllY2FjaGUgPSB0bXBsID8gbmZfY3RfZWNhY2hlX2ZpbmQodG1wbCkgOiBOVUxMOworCW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBlY2FjaGUgPyBlY2FjaGUtPmN0bWFzayA6IDAsCisJCQkJIGVjYWNoZSA/IGVjYWNoZS0+ZXhwbWFzayA6IDAsCisJCQkgICAgIEdGUF9BVE9NSUMpOwogCiAJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JZXhwID0gbmZfY3RfZmluZF9leHBlY3RhdGlvbihuZXQsIHR1cGxlKTsKKwlleHAgPSBuZl9jdF9maW5kX2V4cGVjdGF0aW9uKG5ldCwgem9uZSwgdHVwbGUpOwogCWlmIChleHApIHsKIAkJcHJfZGVidWcoImNvbm50cmFjazogZXhwZWN0YXRpb24gYXJyaXZlcyBjdD0lcCBleHA9JXBcbiIsCiAJCQkgY3QsIGV4cCk7CkBAIC02NzQsNyArNzEwLDcgQEAKIAkJbmZfY29ubnRyYWNrX2dldCgmY3QtPm1hc3Rlci0+Y3RfZ2VuZXJhbCk7CiAJCU5GX0NUX1NUQVRfSU5DKG5ldCwgZXhwZWN0X25ldyk7CiAJfSBlbHNlIHsKLQkJX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgR0ZQX0FUT01JQyk7CisJCV9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIHRtcGwsIEdGUF9BVE9NSUMpOwogCQlORl9DVF9TVEFUX0lOQyhuZXQsIG5ldyk7CiAJfQogCkBAIC02OTUsNyArNzMxLDcgQEAKIAogLyogT24gc3VjY2VzcywgcmV0dXJucyBjb25udHJhY2sgcHRyLCBzZXRzIHNrYi0+bmZjdCBhbmQgY3RpbmZvICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uICoKLXJlc29sdmVfbm9ybWFsX2N0KHN0cnVjdCBuZXQgKm5ldCwKK3Jlc29sdmVfbm9ybWFsX2N0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCiAJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJICB1X2ludDE2X3QgbDNudW0sCkBAIC03MDgsNiArNzQ0LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJdTE2IHpvbmUgPSB0bXBsID8gbmZfY3Rfem9uZSh0bXBsKSA6IE5GX0NUX0RFRkFVTFRfWk9ORTsKIAogCWlmICghbmZfY3RfZ2V0X3R1cGxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiAJCQkgICAgIGRhdGFvZmYsIGwzbnVtLCBwcm90b251bSwgJnR1cGxlLCBsM3Byb3RvLApAQCAtNzE3LDkgKzc1NCwxMCBAQAogCX0KIAogCS8qIGxvb2sgZm9yIHR1cGxlIG1hdGNoICovCi0JaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsICZ0dXBsZSk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZ0dXBsZSk7CiAJaWYgKCFoKSB7Ci0JCWggPSBpbml0X2Nvbm50cmFjayhuZXQsICZ0dXBsZSwgbDNwcm90bywgbDRwcm90bywgc2tiLCBkYXRhb2ZmKTsKKwkJaCA9IGluaXRfY29ubnRyYWNrKG5ldCwgdG1wbCwgJnR1cGxlLCBsM3Byb3RvLCBsNHByb3RvLAorCQkJCSAgIHNrYiwgZGF0YW9mZik7CiAJCWlmICghaCkKIAkJCXJldHVybiBOVUxMOwogCQlpZiAoSVNfRVJSKGgpKQpAQCAtNzU2LDcgKzc5NCw3IEBACiBuZl9jb25udHJhY2tfaW4oc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0OworCXN0cnVjdCBuZl9jb25uICpjdCwgKnRtcGwgPSBOVUxMOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CkBAIC03NjUsMTAgKzgwMywxNCBAQAogCWludCBzZXRfcmVwbHkgPSAwOwogCWludCByZXQ7CiAKLQkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrIG9yIHVudHJhY2tlZCk/ICBJZ25vcmUuICovCiAJaWYgKHNrYi0+bmZjdCkgewotCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBpZ25vcmUpOwotCQlyZXR1cm4gTkZfQUNDRVBUOworCQkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrIG9yIHVudHJhY2tlZCk/ICBJZ25vcmUuICovCisJCXRtcGwgPSAoc3RydWN0IG5mX2Nvbm4gKilza2ItPm5mY3Q7CisJCWlmICghbmZfY3RfaXNfdGVtcGxhdGUodG1wbCkpIHsKKwkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGlnbm9yZSk7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisJCXNrYi0+bmZjdCA9IE5VTEw7CiAJfQogCiAJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93ICovCkBAIC03NzksNyArODIxLDggQEAKIAkJcHJfZGVidWcoIm5vdCBwcmVwYXJlZCB0byB0cmFjayB5ZXQgb3IgZXJyb3Igb2NjdXJlZFxuIik7CiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGVycm9yKTsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7Ci0JCXJldHVybiAtcmV0OworCQlyZXQgPSAtcmV0OworCQlnb3RvIG91dDsKIAl9CiAKIAlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQocGYsIHByb3RvbnVtKTsKQEAgLTc4OCwyNiArODMxLDMwIEBACiAJICogaW52ZXJzZSBvZiB0aGUgcmV0dXJuIGNvZGUgdGVsbHMgdG8gdGhlIG5ldGZpbHRlcgogCSAqIGNvcmUgd2hhdCB0byBkbyB3aXRoIHRoZSBwYWNrZXQuICovCiAJaWYgKGw0cHJvdG8tPmVycm9yICE9IE5VTEwpIHsKLQkJcmV0ID0gbDRwcm90by0+ZXJyb3IobmV0LCBza2IsIGRhdGFvZmYsICZjdGluZm8sIHBmLCBob29rbnVtKTsKKwkJcmV0ID0gbDRwcm90by0+ZXJyb3IobmV0LCB0bXBsLCBza2IsIGRhdGFvZmYsICZjdGluZm8sCisJCQkJICAgICBwZiwgaG9va251bSk7CiAJCWlmIChyZXQgPD0gMCkgewogCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgZXJyb3IpOwogCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7Ci0JCQlyZXR1cm4gLXJldDsKKwkJCXJldCA9IC1yZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWN0ID0gcmVzb2x2ZV9ub3JtYWxfY3QobmV0LCBza2IsIGRhdGFvZmYsIHBmLCBwcm90b251bSwKKwljdCA9IHJlc29sdmVfbm9ybWFsX2N0KG5ldCwgdG1wbCwgc2tiLCBkYXRhb2ZmLCBwZiwgcHJvdG9udW0sCiAJCQkgICAgICAgbDNwcm90bywgbDRwcm90bywgJnNldF9yZXBseSwgJmN0aW5mbyk7CiAJaWYgKCFjdCkgewogCQkvKiBOb3QgdmFsaWQgcGFydCBvZiBhIGNvbm5lY3Rpb24gKi8KIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7Ci0JCXJldHVybiBORl9BQ0NFUFQ7CisJCXJldCA9IE5GX0FDQ0VQVDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKElTX0VSUihjdCkpIHsKIAkJLyogVG9vIHN0cmVzc2VkIHRvIGRlYWwuICovCiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGRyb3ApOwotCQlyZXR1cm4gTkZfRFJPUDsKKwkJcmV0ID0gTkZfRFJPUDsKKwkJZ290byBvdXQ7CiAJfQogCiAJTkZfQ1RfQVNTRVJUKHNrYi0+bmZjdCk7CkBAIC04MjIsMTEgKzg2OSwxNSBAQAogCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBpbnZhbGlkKTsKIAkJaWYgKHJldCA9PSAtTkZfRFJPUCkKIAkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGRyb3ApOwotCQlyZXR1cm4gLXJldDsKKwkJcmV0ID0gLXJldDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHNldF9yZXBseSAmJiAhdGVzdF9hbmRfc2V0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjdC0+c3RhdHVzKSkKLQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfU1RBVFVTLCBjdCk7CisJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1JFUExZLCBjdCk7CitvdXQ6CisJaWYgKHRtcGwpCisJCW5mX2N0X3B1dCh0bXBsKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04NjUsNyArOTE2LDcgQEAKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCV9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIEdGUF9BVE9NSUMpOworCV9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KTsKQEAgLTkzOSw2ICs5OTAsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY3Rfa2lsbF9hY2N0KTsKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKK3N0YXRpYyBzdHJ1Y3QgbmZfY3RfZXh0X3R5cGUgbmZfY3Rfem9uZV9leHRlbmQgX19yZWFkX21vc3RseSA9IHsKKwkubGVuCT0gc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSksCisJLmFsaWduCT0gX19hbGlnbm9mX18oc3RydWN0IG5mX2Nvbm50cmFja196b25lKSwKKwkuaWQJPSBORl9DVF9FWFRfWk9ORSwKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oPgpAQCAtMTEyMCw2ICsxMTc5LDkgQEAKIAogCW5mX2Nvbm50cmFja19oZWxwZXJfZmluaSgpOwogCW5mX2Nvbm50cmFja19wcm90b19maW5pKCk7CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCW5mX2N0X2V4dGVuZF91bnJlZ2lzdGVyKCZuZl9jdF96b25lX2V4dGVuZCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKm5ldCkKQEAgLTExOTUsNiArMTI1Nyw3IEBACiAJdW5zaWduZWQgaW50IGhhc2hzaXplLCBvbGRfc2l6ZTsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGFzaCwgKm9sZF9oYXNoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlpZiAoY3VycmVudC0+bnNwcm94eS0+bmV0X25zICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTIyMSw4ICsxMjg0LDEwIEBACiAJCXdoaWxlICghaGxpc3RfbnVsbHNfZW1wdHkoJmluaXRfbmV0LmN0Lmhhc2hbaV0pKSB7CiAJCQloID0gaGxpc3RfbnVsbHNfZW50cnkoaW5pdF9uZXQuY3QuaGFzaFtpXS5maXJzdCwKIAkJCQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoLCBobm5vZGUpOworCQkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmaC0+aG5ub2RlKTsKLQkJCWJ1Y2tldCA9IF9faGFzaF9jb25udHJhY2soJmgtPnR1cGxlLCBoYXNoc2l6ZSwKKwkJCWJ1Y2tldCA9IF9faGFzaF9jb25udHJhY2soJmgtPnR1cGxlLCBuZl9jdF96b25lKGN0KSwKKwkJCQkJCSAgaGFzaHNpemUsCiAJCQkJCQkgIG5mX2Nvbm50cmFja19oYXNoX3JuZCk7CiAJCQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmgtPmhubm9kZSwgJmhhc2hbYnVja2V0XSk7CiAJCX0KQEAgLTEyODAsNiArMTM0NSwxMSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9oZWxwZXI7CiAKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCisJcmV0ID0gbmZfY3RfZXh0ZW5kX3JlZ2lzdGVyKCZuZl9jdF96b25lX2V4dGVuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2V4dGVuZDsKKyNlbmRpZgogCS8qIFNldCB1cCBmYWtlIGNvbm50cmFjazogdG8gbmV2ZXIgYmUgZGVsZXRlZCwgbm90IGluIGFueSBoYXNoZXMgKi8KICNpZmRlZiBDT05GSUdfTkVUX05TCiAJbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9uZXQgPSAmaW5pdF9uZXQ7CkBAIC0xMjkwLDYgKzEzNjAsMTAgQEAKIAogCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworZXJyX2V4dGVuZDoKKwluZl9jb25udHJhY2tfaGVscGVyX2ZpbmkoKTsKKyNlbmRpZgogZXJyX2hlbHBlcjoKIAluZl9jb25udHJhY2tfcHJvdG9fZmluaSgpOwogZXJyX3Byb3RvOgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCAyZjI1ZmY2MS4uYWNiMjljYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAKIHVuc2lnbmVkIGludCBuZl9jdF9leHBlY3RfaHNpemUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9oc2l6ZSk7CkBAIC04NCw3ICs4NSw4IEBACiB9CiAKIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLV9fbmZfY3RfZXhwZWN0X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK19fbmZfY3RfZXhwZWN0X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtOTUsNyArOTcsOCBAQAogCiAJaCA9IG5mX2N0X2V4cGVjdF9kc3RfaGFzaCh0dXBsZSk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGksIG4sICZuZXQtPmN0LmV4cGVjdF9oYXNoW2hdLCBobm9kZSkgewotCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spKQorCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spICYmCisJCSAgICBuZl9jdF96b25lKGktPm1hc3RlcikgPT0gem9uZSkKIAkJCXJldHVybiBpOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTEwNCwxMiArMTA3LDEzIEBACiAKIC8qIEp1c3QgZmluZCBhIGV4cGVjdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLW5mX2N0X2V4cGVjdF9maW5kX2dldChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWkgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgdHVwbGUpOworCWkgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgem9uZSwgdHVwbGUpOwogCWlmIChpICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZpLT51c2UpKQogCQlpID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTEyMSw3ICsxMjUsOCBAQAogLyogSWYgYW4gZXhwZWN0YXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbiBpcyBmb3VuZCwgaXQgZ2V0cyBkZWxldGUgZnJvbQogICogZ2xvYmFsIGxpc3QgdGhlbiByZXR1cm5lZC4gKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLW5mX2N0X2ZpbmRfZXhwZWN0YXRpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK25mX2N0X2ZpbmRfZXhwZWN0YXRpb24oc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppLCAqZXhwID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTEzMyw3ICsxMzgsOCBAQAogCWggPSBuZl9jdF9leHBlY3RfZHN0X2hhc2godHVwbGUpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGksIG4sICZuZXQtPmN0LmV4cGVjdF9oYXNoW2hdLCBobm9kZSkgewogCQlpZiAoIShpLT5mbGFncyAmIE5GX0NUX0VYUEVDVF9JTkFDVElWRSkgJiYKLQkJICAgIG5mX2N0X3R1cGxlX21hc2tfY21wKHR1cGxlLCAmaS0+dHVwbGUsICZpLT5tYXNrKSkgeworCQkgICAgbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spICYmCisJCSAgICBuZl9jdF96b25lKGktPm1hc3RlcikgPT0gem9uZSkgewogCQkJZXhwID0gaTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDQsNyArMjEwLDggQEAKIHsKIAlyZXR1cm4gYS0+bWFzdGVyID09IGItPm1hc3RlciAmJiBhLT5jbGFzcyA9PSBiLT5jbGFzcyAmJgogCQluZl9jdF90dXBsZV9lcXVhbCgmYS0+dHVwbGUsICZiLT50dXBsZSkgJiYKLQkJbmZfY3RfdHVwbGVfbWFza19lcXVhbCgmYS0+bWFzaywgJmItPm1hc2spOworCQluZl9jdF90dXBsZV9tYXNrX2VxdWFsKCZhLT5tYXNrLCAmYi0+bWFzaykgJiYKKwkJbmZfY3Rfem9uZShhLT5tYXN0ZXIpID09IG5mX2N0X3pvbmUoYi0+bWFzdGVyKTsKIH0KIAogLyogR2VuZXJhbGx5IGEgYmFkIGlkZWEgdG8gY2FsbCB0aGlzOiBjb3VsZCBoYXZlIG1hdGNoZWQgYWxyZWFkeS4gKi8KQEAgLTIzMiw3ICsyMzksNiBAQAogCiAJbmV3LT5tYXN0ZXIgPSBtZTsKIAlhdG9taWNfc2V0KCZuZXctPnVzZSwgMSk7Ci0JSU5JVF9SQ1VfSEVBRCgmbmV3LT5yY3UpOwogCXJldHVybiBuZXc7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpOwpAQCAtNTAwLDYgKzUwNiw3IEBACiBzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwogCXN0cnVjdCBobGlzdF9ub2RlICpuID0gdjsKIAljaGFyICpkZWxpbSA9ICIiOwogCkBAIC01MjUsNiArNTMyLDE0IEBACiAJaWYgKGV4cGVjdC0+ZmxhZ3MgJiBORl9DVF9FWFBFQ1RfSU5BQ1RJVkUpCiAJCXNlcV9wcmludGYocywgIiVzSU5BQ1RJVkUiLCBkZWxpbSk7CiAKKwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UobmZjdF9oZWxwKGV4cGVjdC0+bWFzdGVyKS0+aGVscGVyKTsKKwlpZiAoaGVscGVyKSB7CisJCXNlcV9wcmludGYocywgIiVzJXMiLCBleHBlY3QtPmZsYWdzID8gIiAiIDogIiIsIGhlbHBlci0+bmFtZSk7CisJCWlmIChoZWxwZXItPmV4cGVjdF9wb2xpY3lbZXhwZWN0LT5jbGFzc10ubmFtZSkKKwkJCXNlcV9wcmludGYocywgIi8lcyIsCisJCQkJICAgaGVscGVyLT5leHBlY3RfcG9saWN5W2V4cGVjdC0+Y2xhc3NdLm5hbWUpOworCX0KKwogCXJldHVybiBzZXFfcHV0YyhzLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwppbmRleCBmZWY5NWJlLi5mZGM4ZmI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwpAQCAtNTksNyArNTksNiBAQAogCWlmICghKmV4dCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlJTklUX1JDVV9IRUFEKCYoKmV4dCktPnJjdSk7CiAJKCpleHQpLT5vZmZzZXRbaWRdID0gb2ZmOwogCSgqZXh0KS0+bGVuID0gbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDY2MzY5NDkuLmExYzhkZDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD4KIAogLyogUGFyYW1ldGVycyAqLwpAQCAtMTIxNiw3ICsxMjE3LDcgQEAKIAl0dXBsZS5kc3QudS50Y3AucG9ydCA9IHBvcnQ7CiAJdHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CiAKLQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgJnR1cGxlKTsKKwlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgbmZfY3Rfem9uZShjdCksICZ0dXBsZSk7CiAJaWYgKGV4cCAmJiBleHAtPm1hc3RlciA9PSBjdCkKIAkJcmV0dXJuIGV4cDsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNGIxYTU2Yi4uNDUwOWZhNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTY1LDcgKzY1LDcgQEAKIH0KIAogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgotX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtNzMsMTMgKzczLDM0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmZfY3RfaGVscGVyX2hzaXplOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKLQkJCWlmICghc3RyY21wKGgtPm5hbWUsIG5hbWUpKQorCQkJaWYgKCFzdHJjbXAoaC0+bmFtZSwgbmFtZSkgJiYKKwkJCSAgICBoLT50dXBsZS5zcmMubDNudW0gPT0gbDNudW0gJiYKKwkJCSAgICBoLT50dXBsZS5kc3QucHJvdG9udW0gPT0gcHJvdG9udW0pCiAJCQkJcmV0dXJuIGg7CiAJCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUpOworRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQpOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCituZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CisKKwloID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCWlmIChoID09IE5VTEwpIHsKKwkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZmN0LWhlbHBlci0lcyIsIG5hbWUpID09IDApCisJCQloID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTsKKwl9CisjZW5kaWYKKwlpZiAoaCAhPSBOVUxMICYmICF0cnlfbW9kdWxlX2dldChoLT5tZSkpCisJCWggPSBOVUxMOworCisJcmV0dXJuIGg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KTsKIAogc3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApCiB7CkBAIC05NCwxMyArMTE1LDIyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7CiAKLWludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZmxhZ3MpCitpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLAorCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciA9IE5VTEw7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwotCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCi0JaGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwlpZiAodG1wbCAhPSBOVUxMKSB7CisJCWhlbHAgPSBuZmN0X2hlbHAodG1wbCk7CisJCWlmIChoZWxwICE9IE5VTEwpCisJCQloZWxwZXIgPSBoZWxwLT5oZWxwZXI7CisJfQorCisJaGVscCA9IG5mY3RfaGVscChjdCk7CisJaWYgKGhlbHBlciA9PSBOVUxMKQorCQloZWxwZXIgPSBfX25mX2N0X2hlbHBlcl9maW5kKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwogCWlmIChoZWxwZXIgPT0gTlVMTCkgewogCQlpZiAoaGVscCkKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLT5oZWxwZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDBmZmU2ODkuLjJiMmFmNjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgpAQCAtMzc4LDYgKzM4MCw5IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOwogCisJaWYgKG5mX2N0X3pvbmUoY3QpKQorCQlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfWk9ORSwgaHRvbnMobmZfY3Rfem9uZShjdCkpKTsKKwogCWlmIChjdG5ldGxpbmtfZHVtcF9zdGF0dXMoc2tiLCBjdCkgPCAwIHx8CiAJICAgIGN0bmV0bGlua19kdW1wX3RpbWVvdXQoc2tiLCBjdCkgPCAwIHx8CiAJICAgIGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkgPCAwIHx8CkBAIC00NTYsNiArNDYxLDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19jb25udHJhY2tfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50cywgc3RydWN0IG5mX2N0X2V2ZW50ICppdGVtKQogeworCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnOwogCXN0cnVjdCBubGF0dHIgKm5lc3RfcGFybXM7CkBAIC00ODIsNyArNDg4LDggQEAKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWl0ZW0tPnJlcG9ydCAmJiAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoZ3JvdXApKQorCW5ldCA9IG5mX2N0X25ldChjdCk7CisJaWYgKCFpdGVtLT5yZXBvcnQgJiYgIW5mbmV0bGlua19oYXNfbGlzdGVuZXJzKG5ldCwgZ3JvdXApKQogCQlyZXR1cm4gMDsKIAogCXNrYiA9IG5sbXNnX25ldyhjdG5ldGxpbmtfbmxtc2dfc2l6ZShjdCksIEdGUF9BVE9NSUMpOwpAQCAtNTE0LDYgKzUyMSw5IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOwogCisJaWYgKG5mX2N0X3pvbmUoY3QpKQorCQlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfWk9ORSwgaHRvbnMobmZfY3Rfem9uZShjdCkpKTsKKwogCWlmIChjdG5ldGxpbmtfZHVtcF9pZChza2IsIGN0KSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC01NTksNyArNTY5LDggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci0JZXJyID0gbmZuZXRsaW5rX3NlbmQoc2tiLCBpdGVtLT5waWQsIGdyb3VwLCBpdGVtLT5yZXBvcnQsIEdGUF9BVE9NSUMpOworCWVyciA9IG5mbmV0bGlua19zZW5kKHNrYiwgbmV0LCBpdGVtLT5waWQsIGdyb3VwLCBpdGVtLT5yZXBvcnQsCisJCQkgICAgIEdGUF9BVE9NSUMpOwogCWlmIChlcnIgPT0gLUVOT0JVRlMgfHwgZXJyID09IC1FQUdBSU4pCiAJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtNTcxLDcgKzU4Miw3IEBACiBubG1zZ19mYWlsdXJlOgogCWtmcmVlX3NrYihza2IpOwogZXJyb3V0OgotCW5mbmV0bGlua19zZXRfZXJyKDAsIGdyb3VwLCAtRU5PQlVGUyk7CisJbmZuZXRsaW5rX3NldF9lcnIobmV0LCAwLCBncm91cCwgLUVOT0JVRlMpOwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCkBAIC01ODYsNiArNTk3LDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QsICpsYXN0OwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKQEAgLTU5NCw5ICs2MDYsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKLQlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBpbml0X25ldC5jdC5odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKykgeworCWZvciAoOyBjYi0+YXJnc1swXSA8IG5ldC0+Y3QuaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmaW5pdF9uZXQuY3QuaGFzaFtjYi0+YXJnc1swXV0sCisJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2NiLT5hcmdzWzBdXSwKIAkJCQkJIGhubm9kZSkgewogCQkJaWYgKE5GX0NUX0RJUkVDVElPTihoKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCQkJY29udGludWU7CkBAIC03MDMsNiArNzE1LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHR1cGxlX25sYV9wb2xpY3lbQ1RBX1RVUExFX01BWCsxXSA9IHsKKwlbQ1RBX1RVUExFX0lQXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfVFVQTEVfUFJPVE9dCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKK307CisKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19wYXJzZV90dXBsZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCiAJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLApAQCAtNzEzLDcgKzczMCw3IEBACiAKIAltZW1zZXQodHVwbGUsIDAsIHNpemVvZigqdHVwbGUpKTsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9UVVBMRV9NQVgsIGNkYVt0eXBlXSwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1RVUExFX01BWCwgY2RhW3R5cGVdLCB0dXBsZV9ubGFfcG9saWN5KTsKIAogCWlmICghdGJbQ1RBX1RVUExFX0lQXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTIgKzc1NywzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MTYgKnpvbmUpCit7CisJaWYgKGF0dHIpCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCQkqem9uZSA9IG50b2hzKG5sYV9nZXRfYmUxNihhdHRyKSk7CisjZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYKKwllbHNlCisJCSp6b25lID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGVscF9ubGFfcG9saWN5W0NUQV9IRUxQX01BWCsxXSA9IHsKKwlbQ1RBX0hFTFBfTkFNRV0JCT0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HIH0sCit9OworCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX3BhcnNlX2hlbHAoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgY2hhciAqKmhlbHBlcl9uYW1lKQogewogCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9IRUxQX01BWCsxXTsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9IRUxQX01BWCwgYXR0ciwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0hFTFBfTUFYLCBhdHRyLCBoZWxwX25sYV9wb2xpY3kpOwogCiAJaWYgKCF0YltDVEFfSEVMUF9OQU1FXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTYsMTEgKzc5MiwxOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfbmxhX3BvbGljeVtDVEFfTUFYKzFdID0geworCVtDVEFfVFVQTEVfT1JJR10JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfVFVQTEVfUkVQTFldCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX1NUQVRVU10gCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9QUk9UT0lORk9dCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW0NUQV9IRUxQXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfTkFUX1NSQ10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX1RJTUVPVVRdIAkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtDVEFfTUFSS10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbQ1RBX1VTRV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbQ1RBX0lEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfTkFUX0RTVF0JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX1RVUExFX01BU1RFUl0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfWk9ORV0JCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTc2OCwxMiArODExLDE4IEBACiAJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKKworCWVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sICZ6b25lKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZGFbQ1RBX1RVUExFX09SSUddKQogCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCAmdHVwbGUsIENUQV9UVVBMRV9PUklHLCB1Myk7CkBAIC03ODEsNyArODMwLDcgQEAKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfVFVQTEVfUkVQTFksIHUzKTsKIAllbHNlIHsKIAkJLyogRmx1c2ggdGhlIHdob2xlIHRhYmxlICovCi0JCW5mX2Nvbm50cmFja19mbHVzaF9yZXBvcnQoJmluaXRfbmV0LAorCQluZl9jb25udHJhY2tfZmx1c2hfcmVwb3J0KG5ldCwKIAkJCQkJIE5FVExJTktfQ0Ioc2tiKS5waWQsCiAJCQkJCSBubG1zZ19yZXBvcnQobmxoKSk7CiAJCXJldHVybiAwOwpAQCAtNzkwLDcgKzgzOSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJnR1cGxlKTsKIAlpZiAoIWgpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC04MjgsMTggKzg3NywyNCBAQAogCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQljb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY3RubCk7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXVfaW50OF90IHUzID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKLQlpbnQgZXJyID0gMDsKKwl1MTYgem9uZTsKKwlpbnQgZXJyOwogCiAJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKQogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLCBjdG5ldGxpbmtfZHVtcF90YWJsZSwKIAkJCQkJICBjdG5ldGxpbmtfZG9uZSk7CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCAmem9uZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlpZiAoY2RhW0NUQV9UVVBMRV9PUklHXSkKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfVFVQTEVfT1JJRywgdTMpOwogCWVsc2UgaWYgKGNkYVtDVEFfVFVQTEVfUkVQTFldKQpAQCAtODUwLDcgKzkwNSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJnR1cGxlKTsKIAlpZiAoIWgpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC05OTQsNyArMTA0OSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CisJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJaWYgKGhlbHBlciA9PSBOVUxMKSB7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKQEAgLTEwMDUsNyArMTA2MSw4IEBACiAJCX0KIAogCQlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKKwkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCQlpZiAoaGVscGVyKQogCQkJcmV0dXJuIC1FQUdBSU47CiAjZW5kaWYKQEAgLTEwMjAsOSArMTA3Nyw4IEBACiAJCS8qIG5lZWQgdG8gemVybyBkYXRhIG9mIG9sZCBoZWxwZXIgKi8KIAkJbWVtc2V0KCZoZWxwLT5oZWxwLCAwLCBzaXplb2YoaGVscC0+aGVscCkpOwogCX0gZWxzZSB7Ci0JCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChoZWxwID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogd2UgY2Fubm90IHNldCBhIGhlbHBlciBmb3IgYW4gZXhpc3RpbmcgY29ubnRyYWNrICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoaGVscC0+aGVscGVyLCBoZWxwZXIpOwpAQCAtMTA0NCw2ICsxMTAwLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwcm90b2luZm9fcG9saWN5W0NUQV9QUk9UT0lORk9fTUFYKzFdID0geworCVtDVEFfUFJPVE9JTkZPX1RDUF0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfUFJPVE9JTkZPX0RDQ1BdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX1BST1RPSU5GT19TQ1RQXQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCit9OworCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CkBAIC0xMDUyLDcgKzExMTQsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlpbnQgZXJyID0gMDsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyLCBOVUxMKTsKKwlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0ciwgcHJvdG9pbmZvX3BvbGljeSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKQEAgLTEwNjQsMTIgKzExMjYsMTggQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmF0X3NlcV9wb2xpY3lbQ1RBX05BVF9TRVFfTUFYKzFdID0geworCVtDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX1BPU10JPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfTkFUX1NFUV9PRkZTRVRfQkVGT1JFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9OQVRfU0VRX09GRlNFVF9BRlRFUl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKwogc3RhdGljIGlubGluZSBpbnQKIGNoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfbmF0X3NlcSAqbmF0c2VxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cikKIHsKIAlzdHJ1Y3QgbmxhdHRyICpjZGFbQ1RBX05BVF9TRVFfTUFYKzFdOwogCi0JbmxhX3BhcnNlX25lc3RlZChjZGEsIENUQV9OQVRfU0VRX01BWCwgYXR0ciwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZChjZGEsIENUQV9OQVRfU0VRX01BWCwgYXR0ciwgbmF0X3NlcV9wb2xpY3kpOwogCiAJaWYgKCFjZGFbQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9QT1NdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNzUsNyArMTI0Myw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqCi1jdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCitjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkJICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3R1cGxlLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcnR1cGxlLAogCQkJICAgdTggdTMpCkBAIC0xMTg0LDcgKzEyNTMsNyBAQAogCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAKLQljdCA9IG5mX2Nvbm50cmFja19hbGxvYygmaW5pdF9uZXQsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKKwljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhuZXQsIHpvbmUsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTExOTMsNyArMTI2Miw2IEBACiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKIAljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGN0LT50aW1lb3V0LmV4cGlyZXMgKiBIWjsKLQljdC0+c3RhdHVzIHw9IElQU19DT05GSVJNRUQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAgCWlmIChjZGFbQ1RBX0hFTFBdKSB7CkBAIC0xMjAzLDcgKzEyNzEsOCBAQAogIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycjI7CiAKLQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKKwkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogI2lmZGVmIENPTkZJR19NT0RVTEVTCkBAIC0xMjEzLDcgKzEyODIsOSBAQAogCQkJfQogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOworCQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsCisJCQkJCQkJICAgIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCQkgICAgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAkJCWlmIChoZWxwZXIpIHsKIAkJCQllcnIgPSAtRUFHQUlOOwogCQkJCWdvdG8gZXJyMjsKQEAgLTEyMzYsMTMgKzEzMDcsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogdHJ5IGFuIGltcGxpY2l0IGhlbHBlciBhc3NpZ25hdGlvbiAqLwotCQllcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycjI7Ci0JfQotCi0JaWYgKGNkYVtDVEFfU1RBVFVTXSkgewotCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKKwkJZXJyID0gX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgTlVMTCwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnIyOwogCX0KQEAgLTEyNTMsNiArMTMxOCwxNyBAQAogCQkJZ290byBlcnIyOwogCX0KIAorCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CisJbmZfY3RfZWNhY2hlX2V4dF9hZGQoY3QsIDAsIDAsIEdGUF9BVE9NSUMpOworCS8qIHdlIG11c3QgYWRkIGNvbm50cmFjayBleHRlbnNpb25zIGJlZm9yZSBjb25maXJtYXRpb24uICovCisJY3QtPnN0YXR1cyB8PSBJUFNfQ09ORklSTUVEOworCisJaWYgKGNkYVtDVEFfU1RBVFVTXSkgeworCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CisJfQorCiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpZiAoY2RhW0NUQV9OQVRfU0VRX0FESl9PUklHXSB8fCBjZGFbQ1RBX05BVF9TRVFfQURKX1JFUExZXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdF9zZXFfYWRqKGN0LCBjZGEpOwpAQCAtMTI2Nyw5ICsxMzQzLDYgQEAKIAkJCWdvdG8gZXJyMjsKIAl9CiAKLQluZl9jdF9hY2N0X2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwotCW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKLQogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUktdKQogCQljdC0+bWFyayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktdKSk7CkBAIC0xMjg1LDcgKzEzNTgsNyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyMjsKIAotCQltYXN0ZXJfaCA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmaW5pdF9uZXQsICZtYXN0ZXIpOworCQltYXN0ZXJfaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZtYXN0ZXIpOwogCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgewogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZXJyMjsKQEAgLTEzMTMsMTEgKzEzODYsMTcgQEAKIAkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGN0bmwpOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoID0gTlVMTDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXVfaW50OF90IHUzID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKLQlpbnQgZXJyID0gMDsKKwl1MTYgem9uZTsKKwlpbnQgZXJyOworCisJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKGNkYVtDVEFfVFVQTEVfT1JJR10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJm90dXBsZSwgQ1RBX1RVUExFX09SSUcsIHUzKTsKQEAgLTEzMzMsOSArMTQxMiw5IEBACiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlpZiAoY2RhW0NUQV9UVVBMRV9PUklHXSkKLQkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmb3R1cGxlKTsKKwkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQobmV0LCB6b25lLCAmb3R1cGxlKTsKIAllbHNlIGlmIChjZGFbQ1RBX1RVUExFX1JFUExZXSkKLQkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmcnR1cGxlKTsKKwkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQobmV0LCB6b25lLCAmcnR1cGxlKTsKIAogCWlmIChoID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTEzNDMsNyArMTQyMiw3IEBACiAJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJCQllbnVtIGlwX2Nvbm50cmFja19ldmVudHMgZXZlbnRzOwogCi0JCQljdCA9IGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKGNkYSwgJm90dXBsZSwKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2sobmV0LCB6b25lLCBjZGEsICZvdHVwbGUsCiAJCQkJCQkJJnJ0dXBsZSwgdTMpOwogCQkJaWYgKElTX0VSUihjdCkpIHsKIAkJCQllcnIgPSBQVFJfRVJSKGN0KTsKQEAgLTEzNTcsNyArMTQzNiw4IEBACiAJCQllbHNlCiAJCQkJZXZlbnRzID0gSVBDVF9ORVc7CiAKLQkJCW5mX2Nvbm50cmFja19ldmVudG1hc2tfcmVwb3J0KCgxIDw8IElQQ1RfU1RBVFVTKSB8CisJCQluZl9jb25udHJhY2tfZXZlbnRtYXNrX3JlcG9ydCgoMSA8PCBJUENUX1JFUExZKSB8CisJCQkJCQkgICAgICAoMSA8PCBJUENUX0FTU1VSRUQpIHwKIAkJCQkJCSAgICAgICgxIDw8IElQQ1RfSEVMUEVSKSB8CiAJCQkJCQkgICAgICAoMSA8PCBJUENUX1BST1RPSU5GTykgfAogCQkJCQkJICAgICAgKDEgPDwgSVBDVF9OQVRTRVFBREopIHwKQEAgLTEzODIsNyArMTQ2Miw4IEBACiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwogCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCW5mX2Nvbm50cmFja19ldmVudG1hc2tfcmVwb3J0KCgxIDw8IElQQ1RfU1RBVFVTKSB8CisJCQluZl9jb25udHJhY2tfZXZlbnRtYXNrX3JlcG9ydCgoMSA8PCBJUENUX1JFUExZKSB8CisJCQkJCQkgICAgICAoMSA8PCBJUENUX0FTU1VSRUQpIHwKIAkJCQkJCSAgICAgICgxIDw8IElQQ1RfSEVMUEVSKSB8CiAJCQkJCQkgICAgICAoMSA8PCBJUENUX1BST1RPSU5GTykgfAogCQkJCQkJICAgICAgKDEgPDwgSVBDVF9OQVRTRVFBREopIHwKQEAgLTE0NjksNiArMTU1MCw3IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCiB7CiAJc3RydWN0IG5mX2Nvbm4gKm1hc3RlciA9IGV4cC0+bWFzdGVyOworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAJbG9uZyB0aW1lb3V0ID0gKGV4cC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykgLyBIWjsKIAogCWlmICh0aW1lb3V0IDwgMCkKQEAgLTE0ODUsNiArMTU2Nyw5IEBACiAKIAlOTEFfUFVUX0JFMzIoc2tiLCBDVEFfRVhQRUNUX1RJTUVPVVQsIGh0b25sKHRpbWVvdXQpKTsKIAlOTEFfUFVUX0JFMzIoc2tiLCBDVEFfRVhQRUNUX0lELCBodG9ubCgodW5zaWduZWQgbG9uZylleHApKTsKKwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UobmZjdF9oZWxwKG1hc3RlciktPmhlbHBlcik7CisJaWYgKGhlbHBlcikKKwkJTkxBX1BVVF9TVFJJTkcoc2tiLCBDVEFfRVhQRUNUX0hFTFBfTkFNRSwgaGVscGVyLT5uYW1lKTsKIAogCXJldHVybiAwOwogCkBAIC0xNTI2LDkgKzE2MTEsMTAgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19leHBlY3RfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50cywgc3RydWN0IG5mX2V4cF9ldmVudCAqaXRlbSkKIHsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gaXRlbS0+ZXhwOworCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X2V4cF9uZXQoZXhwKTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnOwotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBpdGVtLT5leHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlpbnQgZmxhZ3MgPSAwOwpAQCAtMTU0MCw3ICsxNjI2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWl0ZW0tPnJlcG9ydCAmJgotCSAgICAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVykpCisJICAgICFuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyhuZXQsIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcpKQogCQlyZXR1cm4gMDsKIAogCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOwpAQCAtMTU2Myw3ICsxNjQ5LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci0JbmZuZXRsaW5rX3NlbmQoc2tiLCBpdGVtLT5waWQsIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcsCisJbmZuZXRsaW5rX3NlbmQoc2tiLCBuZXQsIGl0ZW0tPnBpZCwgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVywKIAkJICAgICAgIGl0ZW0tPnJlcG9ydCwgR0ZQX0FUT01JQyk7CiAJcmV0dXJuIDA7CiAKQEAgLTE1NzMsNyArMTY1OSw3IEBACiBubG1zZ19mYWlsdXJlOgogCWtmcmVlX3NrYihza2IpOwogZXJyb3V0OgotCW5mbmV0bGlua19zZXRfZXJyKDAsIDAsIC1FTk9CVUZTKTsKKwluZm5ldGxpbmtfc2V0X2VycihuZXQsIDAsIDAsIC1FTk9CVUZTKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTU4Nyw3ICsxNjczLDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19leHBfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gJmluaXRfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsICpsYXN0OwogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLT5ubGgpOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtMTYzMSw4ICsxNzE3LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBleHBfbmxhX3BvbGljeVtDVEFfRVhQRUNUX01BWCsxXSA9IHsKKwlbQ1RBX0VYUEVDVF9NQVNURVJdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX0VYUEVDVF9UVVBMRV0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfRVhQRUNUX01BU0tdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX0VYUEVDVF9USU1FT1VUXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW0NUQV9FWFBFQ1RfSURdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXQk9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTY0MCwxMiArMTczMCwxNCBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKIAogCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgewogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLApAQCAtMTY1Myw2ICsxNzQ1LDEwIEBACiAJCQkJCSAgY3RuZXRsaW5rX2V4cF9kb25lKTsKIAl9CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKGNkYVtDVEFfRVhQRUNUX01BU1RFUl0pCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX0VYUEVDVF9NQVNURVIsIHUzKTsKIAllbHNlCkBAIC0xNjYxLDcgKzE3NTcsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwlleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCB6b25lLCAmdHVwbGUpOwogCWlmICghZXhwKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMTcwMSwyMyArMTc5NywyOCBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CiAJdV9pbnQ4X3QgdTMgPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCXVuc2lnbmVkIGludCBpOworCXUxNiB6b25lOwogCWludCBlcnI7CiAKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfVFVQTEVdKSB7CiAJCS8qIGRlbGV0ZSBhIHNpbmdsZSBleHBlY3QgYnkgdHVwbGUgKi8KKwkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sICZ6b25lKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSwgdTMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKIAkJLyogYnVtcCB1c2FnZSBjb3VudCB0byAyICovCi0JCWV4cCA9IG5mX2N0X2V4cGVjdF9maW5kX2dldCgmaW5pdF9uZXQsICZ0dXBsZSk7CisJCWV4cCA9IG5mX2N0X2V4cGVjdF9maW5kX2dldChuZXQsIHpvbmUsICZ0dXBsZSk7CiAJCWlmICghZXhwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE3NDAsMTggKzE4NDEsMTMgQEAKIAogCQkvKiBkZWxldGUgYWxsIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBoZWxwZXIgKi8KIAkJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JCWggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUobmFtZSk7Ci0JCWlmICghaCkgewotCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQogCQlmb3IgKGkgPSAwOyBpIDwgbmZfY3RfZXhwZWN0X2hzaXplOyBpKyspIHsKIAkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCBuLCBuZXh0LAotCQkJCQkJICAmaW5pdF9uZXQuY3QuZXhwZWN0X2hhc2hbaV0sCisJCQkJCQkgICZuZXQtPmN0LmV4cGVjdF9oYXNoW2ldLAogCQkJCQkJICBobm9kZSkgewogCQkJCW1faGVscCA9IG5mY3RfaGVscChleHAtPm1hc3Rlcik7Ci0JCQkJaWYgKG1faGVscC0+aGVscGVyID09IGgKLQkJCQkgICAgJiYgZGVsX3RpbWVyKCZleHAtPnRpbWVvdXQpKSB7CisJCQkJaWYgKCFzdHJjbXAobV9oZWxwLT5oZWxwZXItPm5hbWUsIG5hbWUpICYmCisJCQkJICAgIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgewogCQkJCQluZl9jdF91bmxpbmtfZXhwZWN0KGV4cCk7CiAJCQkJCW5mX2N0X2V4cGVjdF9wdXQoZXhwKTsKIAkJCQl9CkBAIC0xNzYzLDcgKzE4NTksNyBAQAogCQlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAkJZm9yIChpID0gMDsgaSA8IG5mX2N0X2V4cGVjdF9oc2l6ZTsgaSsrKSB7CiAJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbiwgbmV4dCwKLQkJCQkJCSAgJmluaXRfbmV0LmN0LmV4cGVjdF9oYXNoW2ldLAorCQkJCQkJICAmbmV0LT5jdC5leHBlY3RfaGFzaFtpXSwKIAkJCQkJCSAgaG5vZGUpIHsKIAkJCQlpZiAoZGVsX3RpbWVyKCZleHAtPnRpbWVvdXQpKSB7CiAJCQkJCW5mX2N0X3VubGlua19leHBlY3QoZXhwKTsKQEAgLTE3ODQsNyArMTg4MCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdV9pbnQ4X3QgdTMsCitjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLAorCQkJdV9pbnQ4X3QgdTMsCiAJCQl1MzIgcGlkLCBpbnQgcmVwb3J0KQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUsIG1hc2ssIG1hc3Rlcl90dXBsZTsKQEAgLTE4MDYsNyArMTkwNCw3IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBMb29rIGZvciBtYXN0ZXIgY29ubnRyYWNrIG9mIHRoaXMgZXhwZWN0YXRpb24gKi8KLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJm1hc3Rlcl90dXBsZSk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZtYXN0ZXJfdHVwbGUpOwogCWlmICghaCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwpAQCAtMTg0NiwyOSArMTk0NCwzNSBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKIAogCWlmICghY2RhW0NUQV9FWFBFQ1RfVFVQTEVdCiAJICAgIHx8ICFjZGFbQ1RBX0VYUEVDVF9NQVNLXQogCSAgICB8fCAhY2RhW0NUQV9FWFBFQ1RfTUFTVEVSXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfRVhQRUNUX1RVUExFLCB1Myk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKCZpbml0X25ldCwgJnR1cGxlKTsKKwlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgem9uZSwgJnR1cGxlKTsKIAogCWlmICghZXhwKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7Ci0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChjZGEsCisJCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChuZXQsIHpvbmUsIGNkYSwKIAkJCQkJCSAgICAgIHUzLAogCQkJCQkJICAgICAgTkVUTElOS19DQihza2IpLnBpZCwKIAkJCQkJCSAgICAgIG5sbXNnX3JlcG9ydChubGgpKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCAzODA3YWM3Li4wODg5NDQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oPgogCkBAIC0xMjMsNyArMTI0LDcgQEAKIAkJcHJfZGVidWcoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOwogCQluZl9jdF9kdW1wX3R1cGxlKCZpbnZfdCk7CiAKLQkJZXhwX290aGVyID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgJmludl90KTsKKwkJZXhwX290aGVyID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgbmZfY3Rfem9uZShjdCksICZpbnZfdCk7CiAJCWlmIChleHBfb3RoZXIpIHsKIAkJCS8qIGRlbGV0ZSBvdGhlciBleHBlY3RhdGlvbi4gICovCiAJCQlwcl9kZWJ1ZygiZm91bmRcbiIpOwpAQCAtMTM2LDE3ICsxMzcsMTggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGludCBkZXN0cm95X3NpYmxpbmdfb3JfZXhwKHN0cnVjdCBuZXQgKm5ldCwKK3N0YXRpYyBpbnQgZGVzdHJveV9zaWJsaW5nX29yX2V4cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpCiB7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mX2Nvbm4gKnNpYmxpbmc7CisJdTE2IHpvbmUgPSBuZl9jdF96b25lKGN0KTsKIAogCXByX2RlYnVnKCJ0cnlpbmcgdG8gdGltZW91dCBjdCBvciBleHAgZm9yIHR1cGxlICIpOwogCW5mX2N0X2R1bXBfdHVwbGUodCk7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgdCk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsIHQpOwogCWlmIChoKSAgewogCQlzaWJsaW5nID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJcHJfZGVidWcoInNldHRpbmcgdGltZW91dCBvZiBjb25udHJhY2sgJXAgdG8gMFxuIiwgc2libGluZyk7CkBAIC0xNTcsNyArMTU5LDcgQEAKIAkJbmZfY3RfcHV0KHNpYmxpbmcpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCB0KTsKKwkJZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgem9uZSwgdCk7CiAJCWlmIChleHApIHsKIAkJCXByX2RlYnVnKCJ1bmV4cGVjdF9yZWxhdGVkIG9mIGV4cGVjdCAlcFxuIiwgZXhwKTsKIAkJCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKQEAgLTE4Miw3ICsxODQsNyBAQAogCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CiAJdC5zcmMudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQ7CiAJdC5kc3QudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQ7Ci0JaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKG5ldCwgJnQpKQorCWlmICghZGVzdHJveV9zaWJsaW5nX29yX2V4cChuZXQsIGN0LCAmdCkpCiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gdGltZW91dCBvcmlnaW5hbCBwbnMtPnBhYyBjdC9leHBcbiIpOwogCiAJLyogdHJ5IHJlcGx5IChwYWMtPnBucykgdHVwbGUgKi8KQEAgLTE5MCw3ICsxOTIsNyBAQAogCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CiAJdC5zcmMudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQ7CiAJdC5kc3QudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQ7Ci0JaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKG5ldCwgJnQpKQorCWlmICghZGVzdHJveV9zaWJsaW5nX29yX2V4cChuZXQsIGN0LCAmdCkpCiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gdGltZW91dCByZXBseSBwYWMtPnBucyBjdC9leHBcbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggZGQzNzU1MC4uOWEyODE1NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtNTYxLDggKzU2MSw5IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBkY2NwX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKK3N0YXRpYyBpbnQgZGNjcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgICB1X2ludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IGRjY3BfaGRyIF9kaCwgKmRoOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCBjOTljZmJhLi5kODk5YjFhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCQkJICAgY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCk7CiAJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlLiAqLwogCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOwotCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0gZWxzZQogCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLAogCQkJCSAgIGN0LT5wcm90by5ncmUudGltZW91dCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggZjlkOTMwZi4uYjY4ZmYxNWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCSAgICBuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQpIHsKIAkJcHJfZGVidWcoIlNldHRpbmcgYXNzdXJlZCBiaXRcbiIpOwogCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOwotCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0KIAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDNjOTY0MzcuLjlkZDhjZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC03NjAsNyArNzYwLDcgQEAKIH07CiAKIC8qIFByb3RlY3QgY29ubnRyYWNrIGFnYWlzdCBicm9rZW4gcGFja2V0cy4gQ29kZSB0YWtlbiBmcm9tIGlwdF91bmNsZWFuLmMuICAqLwotc3RhdGljIGludCB0Y3BfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIGludCB0Y3BfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJCSAgIGFmdGVyIFNZTl9SRUNWIG9yIGEgdmFsaWQgYW5zd2VyIGZvciBhIHBpY2tlZCB1cAogCQkgICBjb25uZWN0aW9uLiAqLwogCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOwotCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0KIAluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCB0aW1lb3V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCA1YzU1MThiLi44Mjg5MDg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtNzcsNyArNzcsNyBAQAogCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0pOwogCQkvKiBBbHNvLCBtb3JlIGxpa2VseSB0byBiZSBpbXBvcnRhbnQsIGFuZCBub3QgYSBwcm9iZSAqLwogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCi0JCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX0FTU1VSRUQsIGN0KTsKIAl9IGVsc2UKIAkJbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCBjdGluZm8sIHNrYiwgbmZfY3RfdWRwX3RpbWVvdXQpOwogCkBAIC05MSw4ICs5MSw4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgdWRwX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAorc3RhdGljIGludCB1ZHBfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIHVfaW50OF90IHBmLAogCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQogewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCmluZGV4IDQ1ODY1NWIuLjI2M2I1YTcyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJICAgbmZfY3RfdWRwbGl0ZV90aW1lb3V0X3N0cmVhbSk7CiAJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlICovCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKSkKLQkJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgY3QpOworCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0gZWxzZQogCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBuZl9jdF91ZHBsaXRlX3RpbWVvdXQpOwogCkBAIC04OSw3ICs4OSw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgdWRwbGl0ZV9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsCitzdGF0aWMgaW50IHVkcGxpdGVfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggMDIzOTY2Yi4uOGRkNzVkOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTE2LDEyICsxNiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogCiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC01MCwxMiArNTIsMTYgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc2lwX2RpcmVjdF9tZWRpYSwgIkV4cGVjdCBNZWRpYSBzdHJlYW1zIGJldHdlZW4gc2lnbmFsbGluZyAiCiAJCQkJICAgImVuZHBvaW50cyBvbmx5IChkZWZhdWx0IDEpIik7CiAKLXVuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3Vuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJdW5zaWduZWQgaW50ICpkYXRhbGVuKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NpcF9ob29rKTsKIAordm9pZCAoKm5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzMTYgb2ZmKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spOworCiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2V4cGVjdF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKQEAgLTYzLDE3ICs2OSwxNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4pIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2lwX2V4cGVjdF9ob29rKTsKIAotdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9hZGRyX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2FkZHJfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICBjb25zdCBjaGFyICoqZHB0ciwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHNkcG9mZiwKIAkJCQkgICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAogCQkJCSAgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCiAJCQkJICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCiAJCQkJICAgICBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NkcF9hZGRyX2hvb2spOwogCi11bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX3BvcnRfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3Vuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfcG9ydF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLApAQCAtODIsMTQgKzg4LDE1IEBACiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2RwX3BvcnRfaG9vayk7CiAKIHVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfc2Vzc2lvbl9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQljb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJCWNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQl1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJCXVuc2lnbmVkIGludCBzZHBvZmYsCiAJCQkJCWNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKIAkJCQkJX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rKTsKIAotdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9tZWRpYV9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAordW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9tZWRpYV9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHAsCkBAIC0yMzYsMTIgKzI0MywxMyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEZpbmQgU0lQIFVSSSAqLwotCWxpbWl0IC09IHN0cmxlbigic2lwOiIpOwotCWZvciAoOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCWZvciAoOyBkcHRyIDwgbGltaXQgLSBzdHJsZW4oInNpcDoiKTsgZHB0cisrKSB7CiAJCWlmICgqZHB0ciA9PSAnXHInIHx8ICpkcHRyID09ICdcbicpCiAJCQlyZXR1cm4gLTE7Ci0JCWlmIChzdHJuaWNtcChkcHRyLCAic2lwOiIsIHN0cmxlbigic2lwOiIpKSA9PSAwKQorCQlpZiAoc3RybmljbXAoZHB0ciwgInNpcDoiLCBzdHJsZW4oInNpcDoiKSkgPT0gMCkgeworCQkJZHB0ciArPSBzdHJsZW4oInNpcDoiKTsKIAkJCWJyZWFrOworCQl9CiAJfQogCWlmICghc2twX2VwYWRkcl9sZW4oY3QsIGRwdHIsIGxpbWl0LCAmc2hpZnQpKQogCQlyZXR1cm4gMDsKQEAgLTI4NCw3ICsyOTIsOCBAQAogCVtTSVBfSERSX0ZST01dCQkJPSBTSVBfSERSKCJGcm9tIiwgImYiLCAic2lwOiIsIHNrcF9lcGFkZHJfbGVuKSwKIAlbU0lQX0hEUl9UT10JCQk9IFNJUF9IRFIoIlRvIiwgInQiLCAic2lwOiIsIHNrcF9lcGFkZHJfbGVuKSwKIAlbU0lQX0hEUl9DT05UQUNUXQkJPSBTSVBfSERSKCJDb250YWN0IiwgIm0iLCAic2lwOiIsIHNrcF9lcGFkZHJfbGVuKSwKLQlbU0lQX0hEUl9WSUFdCQkJPSBTSVBfSERSKCJWaWEiLCAidiIsICJVRFAgIiwgZXBhZGRyX2xlbiksCisJW1NJUF9IRFJfVklBX1VEUF0JCT0gU0lQX0hEUigiVmlhIiwgInYiLCAiVURQICIsIGVwYWRkcl9sZW4pLAorCVtTSVBfSERSX1ZJQV9UQ1BdCQk9IFNJUF9IRFIoIlZpYSIsICJ2IiwgIlRDUCAiLCBlcGFkZHJfbGVuKSwKIAlbU0lQX0hEUl9FWFBJUkVTXQkJPSBTSVBfSERSKCJFeHBpcmVzIiwgTlVMTCwgTlVMTCwgZGlnaXRzX2xlbiksCiAJW1NJUF9IRFJfQ09OVEVOVF9MRU5HVEhdCT0gU0lQX0hEUigiQ29udGVudC1MZW5ndGgiLCAibCIsIE5VTEwsIGRpZ2l0c19sZW4pLAogfTsKQEAgLTUxNiw2ICs1MjUsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKTsKIAorc3RhdGljIGludCBjdF9zaXBfcGFyc2VfcGFyYW0oY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4pCit7CisJY29uc3QgY2hhciAqbGltaXQgPSBkcHRyICsgZGF0YWxlbjsKKwljb25zdCBjaGFyICpzdGFydDsKKwljb25zdCBjaGFyICplbmQ7CisKKwlsaW1pdCA9IGN0X3NpcF9oZWFkZXJfc2VhcmNoKGRwdHIgKyBkYXRhb2ZmLCBsaW1pdCwgIiwiLCBzdHJsZW4oIiwiKSk7CisJaWYgKCFsaW1pdCkKKwkJbGltaXQgPSBkcHRyICsgZGF0YWxlbjsKKworCXN0YXJ0ID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciArIGRhdGFvZmYsIGxpbWl0LCBuYW1lLCBzdHJsZW4obmFtZSkpOworCWlmICghc3RhcnQpCisJCXJldHVybiAwOworCXN0YXJ0ICs9IHN0cmxlbihuYW1lKTsKKworCWVuZCA9IGN0X3NpcF9oZWFkZXJfc2VhcmNoKHN0YXJ0LCBsaW1pdCwgIjsiLCBzdHJsZW4oIjsiKSk7CisJaWYgKCFlbmQpCisJCWVuZCA9IGxpbWl0OworCisJKm1hdGNob2ZmID0gc3RhcnQgLSBkcHRyOworCSptYXRjaGxlbiA9IGVuZCAtIHN0YXJ0OworCXJldHVybiAxOworfQorCiAvKiBQYXJzZSBhZGRyZXNzIGZyb20gaGVhZGVyIHBhcmFtZXRlciBhbmQgcmV0dXJuIGFkZHJlc3MsIG9mZnNldCBhbmQgbGVuZ3RoICovCiBpbnQgY3Rfc2lwX3BhcnNlX2FkZHJlc3NfcGFyYW0oY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKQEAgLTU3NCw2ICs2MTAsMjkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9wYXJzZV9udW1lcmljYWxfcGFyYW0pOwogCitzdGF0aWMgaW50IGN0X3NpcF9wYXJzZV90cmFuc3BvcnQoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJCSAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJCSAgdTggKnByb3RvKQoreworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CisKKwlpZiAoY3Rfc2lwX3BhcnNlX3BhcmFtKGN0LCBkcHRyLCBkYXRhb2ZmLCBkYXRhbGVuLCAidHJhbnNwb3J0PSIsCisJCQkgICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pKSB7CisJCWlmICghc3RybmljbXAoZHB0ciArIG1hdGNob2ZmLCAiVENQIiwgc3RybGVuKCJUQ1AiKSkpCisJCQkqcHJvdG8gPSBJUFBST1RPX1RDUDsKKwkJZWxzZSBpZiAoIXN0cm5pY21wKGRwdHIgKyBtYXRjaG9mZiwgIlVEUCIsIHN0cmxlbigiVURQIikpKQorCQkJKnByb3RvID0gSVBQUk9UT19VRFA7CisJCWVsc2UKKwkJCXJldHVybiAwOworCisJCWlmICgqcHJvdG8gIT0gbmZfY3RfcHJvdG9udW0oY3QpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCSpwcm90byA9IG5mX2N0X3Byb3RvbnVtKGN0KTsKKworCXJldHVybiAxOworfQorCiAvKiBTRFAgaGVhZGVyIHBhcnNpbmc6IGEgU0RQIHNlc3Npb24gZGVzY3JpcHRpb24gY29udGFpbnMgYW4gb3JkZXJlZCBzZXQgb2YKICAqIGhlYWRlcnMsIHN0YXJ0aW5nIHdpdGggYSBzZWN0aW9uIGNvbnRhaW5pbmcgZ2VuZXJhbCBzZXNzaW9uIHBhcmFtZXRlcnMsCiAgKiBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IG11bHRpcGxlIG1lZGlhIGRlc2NyaXB0aW9ucy4KQEAgLTY4Miw3ICs3NDEsNyBAQAogCiBzdGF0aWMgaW50IHJlZnJlc2hfc2lnbmFsbGluZ19leHBlY3RhdGlvbihzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJCSAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLAotCQkJCQkgIF9fYmUxNiBwb3J0LAorCQkJCQkgIHU4IHByb3RvLCBfX2JlMTYgcG9ydCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgZXhwaXJlcykKIHsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKQEAgLTY5NCw2ICs3NTMsNyBAQAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCBuLCBuZXh0LCAmaGVscC0+ZXhwZWN0YXRpb25zLCBsbm9kZSkgewogCQlpZiAoZXhwLT5jbGFzcyAhPSBTSVBfRVhQRUNUX1NJR05BTExJTkcgfHwKIAkJICAgICFuZl9pbmV0X2FkZHJfY21wKCZleHAtPnR1cGxlLmRzdC51MywgYWRkcikgfHwKKwkJICAgIGV4cC0+dHVwbGUuZHN0LnByb3RvbnVtICE9IHByb3RvIHx8CiAJCSAgICBleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ICE9IHBvcnQpCiAJCQljb250aW51ZTsKIAkJaWYgKCFkZWxfdGltZXIoJmV4cC0+dGltZW91dCkpCkBAIC03MjgsNyArNzg4LDcgQEAKIAlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogfQogCi1zdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJIHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsIF9fYmUxNiBwb3J0LAogCQkJCSBlbnVtIHNpcF9leHBlY3RhdGlvbl9jbGFzc2VzIGNsYXNzLApAQCAtNzc3LDcgKzgzNyw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZG8gewotCQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgJnR1cGxlKTsKKwkJZXhwID0gX19uZl9jdF9leHBlY3RfZmluZChuZXQsIG5mX2N0X3pvbmUoY3QpLCAmdHVwbGUpOwogCiAJCWlmICghZXhwIHx8IGV4cC0+bWFzdGVyID09IGN0IHx8CiAJCSAgICBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpLT5oZWxwZXIgIT0gbmZjdF9oZWxwKGN0KS0+aGVscGVyIHx8CkBAIC04MDUsNyArODY1LDcgQEAKIAlpZiAoZGlyZWN0X3J0cCkgewogCQluZl9uYXRfc2RwX3BvcnQgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NkcF9wb3J0X2hvb2spOwogCQlpZiAobmZfbmF0X3NkcF9wb3J0ICYmCi0JCSAgICAhbmZfbmF0X3NkcF9wb3J0KHNrYiwgZHB0ciwgZGF0YWxlbiwKKwkJICAgICFuZl9uYXRfc2RwX3BvcnQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAogCQkJCSAgICAgbWVkaWFvZmYsIG1lZGlhbGVuLCBudG9ocyhydHBfcG9ydCkpKQogCQkJZ290byBlcnIxOwogCX0KQEAgLTgyNyw3ICs4ODcsOCBAQAogCiAJbmZfbmF0X3NkcF9tZWRpYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2RwX21lZGlhX2hvb2spOwogCWlmIChuZl9uYXRfc2RwX21lZGlhICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0sgJiYgIWRpcmVjdF9ydHApCi0JCXJldCA9IG5mX25hdF9zZHBfbWVkaWEoc2tiLCBkcHRyLCBkYXRhbGVuLCBydHBfZXhwLCBydGNwX2V4cCwKKwkJcmV0ID0gbmZfbmF0X3NkcF9tZWRpYShza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sCisJCQkJICAgICAgIHJ0cF9leHAsIHJ0Y3BfZXhwLAogCQkJCSAgICAgICBtZWRpYW9mZiwgbWVkaWFsZW4sIGRhZGRyKTsKIAllbHNlIHsKIAkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHApID09IDApIHsKQEAgLTg0Nyw2ICs5MDgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZHBfbWVkaWFfdHlwZSBzZHBfbWVkaWFfdHlwZXNbXSA9IHsKIAlTRFBfTUVESUFfVFlQRSgiYXVkaW8gIiwgU0lQX0VYUEVDVF9BVURJTyksCiAJU0RQX01FRElBX1RZUEUoInZpZGVvICIsIFNJUF9FWFBFQ1RfVklERU8pLAorCVNEUF9NRURJQV9UWVBFKCJpbWFnZSAiLCBTSVBfRVhQRUNUX0lNQUdFKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RwX21lZGlhX3R5cGUgKnNkcF9tZWRpYV90eXBlKGNvbnN0IGNoYXIgKmRwdHIsCkBAIC04NjYsMTMgKzkyOCwxMiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHByb2Nlc3Nfc2RwKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3Nfc2RwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjc2VxKQogewogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CiAJdW5zaWduZWQgaW50IG1lZGlhb2ZmLCBtZWRpYWxlbjsKIAl1bnNpZ25lZCBpbnQgc2Rwb2ZmOwpAQCAtOTQxLDcgKzEwMDIsNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAotCQlyZXQgPSBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc2tiLCBkcHRyLCBkYXRhbGVuLAorCQlyZXQgPSBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAogCQkJCQkgICAgJnJ0cF9hZGRyLCBodG9ucyhwb3J0KSwgdC0+Y2xhc3MsCiAJCQkJCSAgICBtZWRpYW9mZiwgbWVkaWFsZW4pOwogCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKQEAgLTk0OSw4ICsxMDEwLDkgQEAKIAogCQkvKiBVcGRhdGUgbWVkaWEgY29ubmVjdGlvbiBhZGRyZXNzIGlmIHByZXNlbnQgKi8KIAkJaWYgKG1hZGRyX2xlbiAmJiBuZl9uYXRfc2RwX2FkZHIgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgewotCQkJcmV0ID0gbmZfbmF0X3NkcF9hZGRyKHNrYiwgZHB0ciwgbWVkaWFvZmYsIGRhdGFsZW4sCi0JCQkJCSAgICAgIGNfaGRyLCBTRFBfSERSX01FRElBLCAmcnRwX2FkZHIpOworCQkJcmV0ID0gbmZfbmF0X3NkcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkJICAgICAgbWVkaWFvZmYsIGNfaGRyLCBTRFBfSERSX01FRElBLAorCQkJCQkgICAgICAmcnRwX2FkZHIpOwogCQkJaWYgKHJldCAhPSBORl9BQ0NFUFQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtOTYwLDE0ICsxMDIyLDEyIEBACiAJLyogVXBkYXRlIHNlc3Npb24gY29ubmVjdGlvbiBhbmQgb3duZXIgYWRkcmVzc2VzICovCiAJbmZfbmF0X3NkcF9zZXNzaW9uID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rKTsKIAlpZiAobmZfbmF0X3NkcF9zZXNzaW9uICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCi0JCXJldCA9IG5mX25hdF9zZHBfc2Vzc2lvbihza2IsIGRwdHIsIHNkcG9mZiwgZGF0YWxlbiwgJnJ0cF9hZGRyKTsKLQotCWlmIChyZXQgPT0gTkZfQUNDRVBUICYmIGkgPiAwKQotCQloZWxwLT5oZWxwLmN0X3NpcF9pbmZvLmludml0ZV9jc2VxID0gY3NlcTsKKwkJcmV0ID0gbmZfbmF0X3NkcF9zZXNzaW9uKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgc2Rwb2ZmLAorCQkJCQkgJnJ0cF9hZGRyKTsKIAogCXJldHVybiByZXQ7CiB9Ci1zdGF0aWMgaW50IHByb2Nlc3NfaW52aXRlX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3NfaW52aXRlX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgdW5zaWduZWQgaW50IGNzZXEsIHVuc2lnbmVkIGludCBjb2RlKQogewpAQCAtOTc3LDEzICsxMDM3LDEzIEBACiAKIAlpZiAoKGNvZGUgPj0gMTAwICYmIGNvZGUgPD0gMTk5KSB8fAogCSAgICAoY29kZSA+PSAyMDAgJiYgY29kZSA8PSAyOTkpKQotCQlyZXR1cm4gcHJvY2Vzc19zZHAoc2tiLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKKwkJcmV0dXJuIHByb2Nlc3Nfc2RwKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CiAJZWxzZSBpZiAoaGVscC0+aGVscC5jdF9zaXBfaW5mby5pbnZpdGVfY3NlcSA9PSBjc2VxKQogCQlmbHVzaF9leHBlY3RhdGlvbnMoY3QsIHRydWUpOwogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc191cGRhdGVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc191cGRhdGVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpCiB7CkBAIC05OTMsMTMgKzEwNTMsMTMgQEAKIAogCWlmICgoY29kZSA+PSAxMDAgJiYgY29kZSA8PSAxOTkpIHx8CiAJICAgIChjb2RlID49IDIwMCAmJiBjb2RlIDw9IDI5OSkpCi0JCXJldHVybiBwcm9jZXNzX3NkcChza2IsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOworCQlyZXR1cm4gcHJvY2Vzc19zZHAoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKIAllbHNlIGlmIChoZWxwLT5oZWxwLmN0X3NpcF9pbmZvLmludml0ZV9jc2VxID09IGNzZXEpCiAJCWZsdXNoX2V4cGVjdGF0aW9ucyhjdCwgdHJ1ZSk7CiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3ByYWNrX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3NfcHJhY2tfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgdW5zaWduZWQgaW50IGNzZXEsIHVuc2lnbmVkIGludCBjb2RlKQogewpAQCAtMTAwOSwxMyArMTA2OSwyOSBAQAogCiAJaWYgKChjb2RlID49IDEwMCAmJiBjb2RlIDw9IDE5OSkgfHwKIAkgICAgKGNvZGUgPj0gMjAwICYmIGNvZGUgPD0gMjk5KSkKLQkJcmV0dXJuIHByb2Nlc3Nfc2RwKHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CisJCXJldHVybiBwcm9jZXNzX3NkcChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOwogCWVsc2UgaWYgKGhlbHAtPmhlbHAuY3Rfc2lwX2luZm8uaW52aXRlX2NzZXEgPT0gY3NlcSkKIAkJZmx1c2hfZXhwZWN0YXRpb25zKGN0LCB0cnVlKTsKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IHByb2Nlc3NfYnllX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19pbnZpdGVfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICB1bnNpZ25lZCBpbnQgY3NlcSkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJZmx1c2hfZXhwZWN0YXRpb25zKGN0LCB0cnVlKTsKKwlyZXQgPSBwcm9jZXNzX3NkcChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOworCWlmIChyZXQgPT0gTkZfQUNDRVBUKQorCQloZWxwLT5oZWxwLmN0X3NpcF9pbmZvLmludml0ZV9jc2VxID0gY3NlcTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYnllX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3NlcSkKIHsKQEAgLTEwMzAsNyArMTEwNiw3IEBACiAgKiBzaWduYWxsaW5nIGNvbm5lY3Rpb25zLiBUaGUgZXhwZWN0YXRpb24gaXMgbWFya2VkIGluYWN0aXZlIGFuZCBpcyBhY3RpdmF0ZWQKICAqIHdoZW4gcmVjZWl2aW5nIGEgcmVzcG9uc2UgaW5kaWNhdGluZyBzdWNjZXNzIGZyb20gdGhlIHJlZ2lzdHJhci4KICAqLwotc3RhdGljIGludCBwcm9jZXNzX3JlZ2lzdGVyX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZWdpc3Rlcl9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY3NlcSkKIHsKQEAgLTEwNDIsNiArMTExOCw3IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgKnNhZGRyLCBkYWRkcjsKIAlfX2JlMTYgcG9ydDsKKwl1OCBwcm90bzsKIAl1bnNpZ25lZCBpbnQgZXhwaXJlcyA9IDA7CiAJaW50IHJldDsKIAl0eXBlb2YobmZfbmF0X3NpcF9leHBlY3RfaG9vaykgbmZfbmF0X3NpcF9leHBlY3Q7CkBAIC0xMDc0LDYgKzExNTEsMTAgQEAKIAlpZiAoIW5mX2luZXRfYWRkcl9jbXAoJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsICZkYWRkcikpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKKwlpZiAoY3Rfc2lwX3BhcnNlX3RyYW5zcG9ydChjdCwgKmRwdHIsIG1hdGNob2ZmICsgbWF0Y2hsZW4sICpkYXRhbGVuLAorCQkJCSAgICZwcm90bykgPT0gMCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCWlmIChjdF9zaXBfcGFyc2VfbnVtZXJpY2FsX3BhcmFtKGN0LCAqZHB0ciwKIAkJCQkJIG1hdGNob2ZmICsgbWF0Y2hsZW4sICpkYXRhbGVuLAogCQkJCQkgImV4cGlyZXM9IiwgTlVMTCwgTlVMTCwgJmV4cGlyZXMpIDwgMCkKQEAgLTEwOTMsMTQgKzExNzQsMTQgQEAKIAkJc2FkZHIgPSAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7CiAKIAluZl9jdF9leHBlY3RfaW5pdChleHAsIFNJUF9FWFBFQ1RfU0lHTkFMTElORywgbmZfY3RfbDNudW0oY3QpLAotCQkJICBzYWRkciwgJmRhZGRyLCBJUFBST1RPX1VEUCwgTlVMTCwgJnBvcnQpOworCQkJICBzYWRkciwgJmRhZGRyLCBwcm90bywgTlVMTCwgJnBvcnQpOwogCWV4cC0+dGltZW91dC5leHBpcmVzID0gc2lwX3RpbWVvdXQgKiBIWjsKIAlleHAtPmhlbHBlciA9IG5mY3RfaGVscChjdCktPmhlbHBlcjsKIAlleHAtPmZsYWdzID0gTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVCB8IE5GX0NUX0VYUEVDVF9JTkFDVElWRTsKIAogCW5mX25hdF9zaXBfZXhwZWN0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zaXBfZXhwZWN0X2hvb2spOwogCWlmIChuZl9uYXRfc2lwX2V4cGVjdCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQotCQlyZXQgPSBuZl9uYXRfc2lwX2V4cGVjdChza2IsIGRwdHIsIGRhdGFsZW4sIGV4cCwKKwkJcmV0ID0gbmZfbmF0X3NpcF9leHBlY3Qoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBleHAsCiAJCQkJCW1hdGNob2ZmLCBtYXRjaGxlbik7CiAJZWxzZSB7CiAJCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHApICE9IDApCkBAIC0xMTE2LDcgKzExOTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19yZWdpc3Rlcl9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBwcm9jZXNzX3JlZ2lzdGVyX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBjc2VxLCB1bnNpZ25lZCBpbnQgY29kZSkKIHsKQEAgLTExMjYsNyArMTIwNyw4IEBACiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgYWRkcjsKIAlfX2JlMTYgcG9ydDsKLQl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuLCBkYXRhb2ZmID0gMDsKKwl1OCBwcm90bzsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuLCBjb2ZmID0gMDsKIAl1bnNpZ25lZCBpbnQgZXhwaXJlcyA9IDA7CiAJaW50IGluX2NvbnRhY3QgPSAwLCByZXQ7CiAKQEAgLTExNTMsNyArMTIzNSw3IEBACiAJd2hpbGUgKDEpIHsKIAkJdW5zaWduZWQgaW50IGNfZXhwaXJlcyA9IGV4cGlyZXM7CiAKLQkJcmV0ID0gY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCAmZGF0YW9mZiwgKmRhdGFsZW4sCisJCXJldCA9IGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgJmNvZmYsICpkYXRhbGVuLAogCQkJCQkgICAgICBTSVBfSERSX0NPTlRBQ1QsICZpbl9jb250YWN0LAogCQkJCQkgICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKIAkJCQkJICAgICAgJmFkZHIsICZwb3J0KTsKQEAgLTExNjYsNiArMTI0OCwxMCBAQAogCQlpZiAoIW5mX2luZXRfYWRkcl9jbXAoJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMsICZhZGRyKSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChjdF9zaXBfcGFyc2VfdHJhbnNwb3J0KGN0LCAqZHB0ciwgbWF0Y2hvZmYgKyBtYXRjaGxlbiwKKwkJCQkJICAgKmRhdGFsZW4sICZwcm90bykgPT0gMCkKKwkJCWNvbnRpbnVlOworCiAJCXJldCA9IGN0X3NpcF9wYXJzZV9udW1lcmljYWxfcGFyYW0oY3QsICpkcHRyLAogCQkJCQkJICAgbWF0Y2hvZmYgKyBtYXRjaGxlbiwKIAkJCQkJCSAgICpkYXRhbGVuLCAiZXhwaXJlcz0iLApAQCAtMTE3NCw3ICsxMjYwLDggQEAKIAkJCXJldHVybiBORl9EUk9QOwogCQlpZiAoY19leHBpcmVzID09IDApCiAJCQlicmVhazsKLQkJaWYgKHJlZnJlc2hfc2lnbmFsbGluZ19leHBlY3RhdGlvbihjdCwgJmFkZHIsIHBvcnQsIGNfZXhwaXJlcykpCisJCWlmIChyZWZyZXNoX3NpZ25hbGxpbmdfZXhwZWN0YXRpb24oY3QsICZhZGRyLCBwcm90bywgcG9ydCwKKwkJCQkJCSAgIGNfZXhwaXJlcykpCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApAQCAtMTE4NCw3ICsxMjcxLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzaXBfaGFuZGxlciBzaXBfaGFuZGxlcnNbXSA9IHsKLQlTSVBfSEFORExFUigiSU5WSVRFIiwgcHJvY2Vzc19zZHAsIHByb2Nlc3NfaW52aXRlX3Jlc3BvbnNlKSwKKwlTSVBfSEFORExFUigiSU5WSVRFIiwgcHJvY2Vzc19pbnZpdGVfcmVxdWVzdCwgcHJvY2Vzc19pbnZpdGVfcmVzcG9uc2UpLAogCVNJUF9IQU5ETEVSKCJVUERBVEUiLCBwcm9jZXNzX3NkcCwgcHJvY2Vzc191cGRhdGVfcmVzcG9uc2UpLAogCVNJUF9IQU5ETEVSKCJBQ0siLCBwcm9jZXNzX3NkcCwgTlVMTCksCiAJU0lQX0hBTkRMRVIoIlBSQUNLIiwgcHJvY2Vzc19zZHAsIHByb2Nlc3NfcHJhY2tfcmVzcG9uc2UpLApAQCAtMTE5MiwxMyArMTI3OSwxMyBAQAogCVNJUF9IQU5ETEVSKCJSRUdJU1RFUiIsIHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdCwgcHJvY2Vzc19yZWdpc3Rlcl9yZXNwb25zZSksCiB9OwogCi1zdGF0aWMgaW50IHByb2Nlc3Nfc2lwX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3Nfc2lwX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCWNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCiB7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JdW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjsKLQl1bnNpZ25lZCBpbnQgY29kZSwgY3NlcSwgZGF0YW9mZiwgaTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuLCBtYXRjaGVuZDsKKwl1bnNpZ25lZCBpbnQgY29kZSwgY3NlcSwgaTsKIAogCWlmICgqZGF0YWxlbiA8IHN0cmxlbigiU0lQLzIuMCAyMDAiKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTEyMTIsNyArMTI5OSw3IEBACiAJY3NlcSA9IHNpbXBsZV9zdHJ0b3VsKCpkcHRyICsgbWF0Y2hvZmYsIE5VTEwsIDEwKTsKIAlpZiAoIWNzZXEpCiAJCXJldHVybiBORl9EUk9QOwotCWRhdGFvZmYgPSBtYXRjaG9mZiArIG1hdGNobGVuICsgMTsKKwltYXRjaGVuZCA9IG1hdGNob2ZmICsgbWF0Y2hsZW4gKyAxOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2lwX2hhbmRsZXJzKTsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBzaXBfaGFuZGxlciAqaGFuZGxlcjsKQEAgLTEyMjAsMTUgKzEzMDcsMTYgQEAKIAkJaGFuZGxlciA9ICZzaXBfaGFuZGxlcnNbaV07CiAJCWlmIChoYW5kbGVyLT5yZXNwb25zZSA9PSBOVUxMKQogCQkJY29udGludWU7Ci0JCWlmICgqZGF0YWxlbiA8IGRhdGFvZmYgKyBoYW5kbGVyLT5sZW4gfHwKLQkJICAgIHN0cm5pY21wKCpkcHRyICsgZGF0YW9mZiwgaGFuZGxlci0+bWV0aG9kLCBoYW5kbGVyLT5sZW4pKQorCQlpZiAoKmRhdGFsZW4gPCBtYXRjaGVuZCArIGhhbmRsZXItPmxlbiB8fAorCQkgICAgc3RybmljbXAoKmRwdHIgKyBtYXRjaGVuZCwgaGFuZGxlci0+bWV0aG9kLCBoYW5kbGVyLT5sZW4pKQogCQkJY29udGludWU7Ci0JCXJldHVybiBoYW5kbGVyLT5yZXNwb25zZShza2IsIGRwdHIsIGRhdGFsZW4sIGNzZXEsIGNvZGUpOworCQlyZXR1cm4gaGFuZGxlci0+cmVzcG9uc2Uoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCQkgY3NlcSwgY29kZSk7CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zaXBfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBwcm9jZXNzX3NpcF9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCiB7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CkBAIC0xMjUzLDIwICsxMzQxLDExMiBAQAogCQlpZiAoIWNzZXEpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAotCQlyZXR1cm4gaGFuZGxlci0+cmVxdWVzdChza2IsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOworCQlyZXR1cm4gaGFuZGxlci0+cmVxdWVzdChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOwogCX0KIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IHNpcF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKLQkJICAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQorc3RhdGljIGludCBwcm9jZXNzX3NpcF9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGNvbnN0IGNoYXIgKipkcHRyLAorCQkJICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKQoreworCXR5cGVvZihuZl9uYXRfc2lwX2hvb2spIG5mX25hdF9zaXA7CisJaW50IHJldDsKKworCWlmIChzdHJuaWNtcCgqZHB0ciwgIlNJUC8yLjAgIiwgc3RybGVuKCJTSVAvMi4wICIpKSAhPSAwKQorCQlyZXQgPSBwcm9jZXNzX3NpcF9yZXF1ZXN0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbik7CisJZWxzZQorCQlyZXQgPSBwcm9jZXNzX3NpcF9yZXNwb25zZShza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4pOworCisJaWYgKHJldCA9PSBORl9BQ0NFUFQgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQluZl9uYXRfc2lwID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zaXBfaG9vayk7CisJCWlmIChuZl9uYXRfc2lwICYmICFuZl9uYXRfc2lwKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbikpCisJCQlyZXQgPSBORl9EUk9QOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAorCQkJc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgdGNwaGRyICp0aCwgX3RjcGg7CisJdW5zaWduZWQgaW50IGRhdGFvZmYsIGRhdGFsZW47CisJdW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbiwgY2xlbjsKKwl1bnNpZ25lZCBpbnQgbXNnbGVuLCBvcmlnbGVuOworCWNvbnN0IGNoYXIgKmRwdHIsICplbmQ7CisJczE2IGRpZmYsIHRkaWZmID0gMDsKKwlpbnQgcmV0OworCXR5cGVvZihuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vaykgbmZfbmF0X3NpcF9zZXFfYWRqdXN0OworCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgorCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qIE5vIERhdGEgPyAqLworCXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlpZiAodGggPT0gTlVMTCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwlkYXRhb2ZmID0gcHJvdG9mZiArIHRoLT5kb2ZmICogNDsKKwlpZiAoZGF0YW9mZiA+PSBza2ItPmxlbikKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCW5mX2N0X3JlZnJlc2goY3QsIHNrYiwgc2lwX3RpbWVvdXQgKiBIWik7CisKKwlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7CisJCXByX2RlYnVnKCJDb3B5IG9mIHNrYnVmZiBub3Qgc3VwcG9ydGVkIHlldC5cbiIpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCWRwdHIgPSBza2ItPmRhdGEgKyBkYXRhb2ZmOworCWRhdGFsZW4gPSBza2ItPmxlbiAtIGRhdGFvZmY7CisJaWYgKGRhdGFsZW4gPCBzdHJsZW4oIlNJUC8yLjAgMjAwIikpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoY3Rfc2lwX2dldF9oZWFkZXIoY3QsIGRwdHIsIDAsIGRhdGFsZW4sCisJCQkJICAgICAgU0lQX0hEUl9DT05URU5UX0xFTkdUSCwKKwkJCQkgICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbikgPD0gMCkKKwkJCWJyZWFrOworCisJCWNsZW4gPSBzaW1wbGVfc3RydG91bChkcHRyICsgbWF0Y2hvZmYsIChjaGFyICoqKSZlbmQsIDEwKTsKKwkJaWYgKGRwdHIgKyBtYXRjaG9mZiA9PSBlbmQpCisJCQlicmVhazsKKworCQlpZiAoZW5kICsgc3RybGVuKCJcclxuXHJcbiIpID4gZHB0ciArIGRhdGFsZW4pCisJCQlicmVhazsKKwkJaWYgKGVuZFswXSAhPSAnXHInIHx8IGVuZFsxXSAhPSAnXG4nIHx8CisJCSAgICBlbmRbMl0gIT0gJ1xyJyB8fCBlbmRbM10gIT0gJ1xuJykKKwkJCWJyZWFrOworCQllbmQgKz0gc3RybGVuKCJcclxuXHJcbiIpICsgY2xlbjsKKworCQltc2dsZW4gPSBvcmlnbGVuID0gZW5kIC0gZHB0cjsKKworCQlyZXQgPSBwcm9jZXNzX3NpcF9tc2coc2tiLCBjdCwgZGF0YW9mZiwgJmRwdHIsICZtc2dsZW4pOworCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwkJCWJyZWFrOworCQlkaWZmICAgICA9IG1zZ2xlbiAtIG9yaWdsZW47CisJCXRkaWZmICAgKz0gZGlmZjsKKworCQlkYXRhb2ZmICs9IG1zZ2xlbjsKKwkJZHB0ciAgICArPSBtc2dsZW47CisJCWRhdGFsZW4gID0gZGF0YWxlbiArIGRpZmYgLSBtc2dsZW47CisJfQorCisJaWYgKHJldCA9PSBORl9BQ0NFUFQgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQluZl9uYXRfc2lwX3NlcV9hZGp1c3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spOworCQlpZiAobmZfbmF0X3NpcF9zZXFfYWRqdXN0KQorCQkJbmZfbmF0X3NpcF9zZXFfYWRqdXN0KHNrYiwgdGRpZmYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAorCQkJc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZGF0YWxlbjsKIAljb25zdCBjaGFyICpkcHRyOwotCWludCByZXQ7Ci0JdHlwZW9mKG5mX25hdF9zaXBfaG9vaykgbmZfbmF0X3NpcDsKIAogCS8qIE5vIERhdGEgPyAqLwogCWRhdGFvZmYgPSBwcm90b2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwpAQCAtMTI3NSw0NyArMTQ1NSw0MyBAQAogCiAJbmZfY3RfcmVmcmVzaChjdCwgc2tiLCBzaXBfdGltZW91dCAqIEhaKTsKIAotCWlmICghc2tiX2lzX25vbmxpbmVhcihza2IpKQotCQlkcHRyID0gc2tiLT5kYXRhICsgZGF0YW9mZjsKLQllbHNlIHsKKwlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7CiAJCXByX2RlYnVnKCJDb3B5IG9mIHNrYnVmZiBub3Qgc3VwcG9ydGVkIHlldC5cbiIpOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAorCWRwdHIgPSBza2ItPmRhdGEgKyBkYXRhb2ZmOwogCWRhdGFsZW4gPSBza2ItPmxlbiAtIGRhdGFvZmY7CiAJaWYgKGRhdGFsZW4gPCBzdHJsZW4oIlNJUC8yLjAgMjAwIikpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlpZiAoc3RybmljbXAoZHB0ciwgIlNJUC8yLjAgIiwgc3RybGVuKCJTSVAvMi4wICIpKSAhPSAwKQotCQlyZXQgPSBwcm9jZXNzX3NpcF9yZXF1ZXN0KHNrYiwgJmRwdHIsICZkYXRhbGVuKTsKLQllbHNlCi0JCXJldCA9IHByb2Nlc3Nfc2lwX3Jlc3BvbnNlKHNrYiwgJmRwdHIsICZkYXRhbGVuKTsKLQotCWlmIChyZXQgPT0gTkZfQUNDRVBUICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spIHsKLQkJbmZfbmF0X3NpcCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2lwX2hvb2spOwotCQlpZiAobmZfbmF0X3NpcCAmJiAhbmZfbmF0X3NpcChza2IsICZkcHRyLCAmZGF0YWxlbikpCi0JCQlyZXQgPSBORl9EUk9QOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBkYXRhb2ZmLCAmZHB0ciwgJmRhdGFsZW4pOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwW01BWF9QT1JUU11bMl0gX19yZWFkX21vc3RseTsKLXN0YXRpYyBjaGFyIHNpcF9uYW1lc1tNQVhfUE9SVFNdWzJdW3NpemVvZigic2lwLTY1NTM1IildIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwW01BWF9QT1JUU11bNF0gX19yZWFkX21vc3RseTsKK3N0YXRpYyBjaGFyIHNpcF9uYW1lc1tNQVhfUE9SVFNdWzRdW3NpemVvZigic2lwLTY1NTM1IildIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggKyAxXSA9IHsKIAlbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHsKKwkJLm5hbWUJCT0gInNpZ25hbGxpbmciLAogCQkubWF4X2V4cGVjdGVkCT0gMSwKIAkJLnRpbWVvdXQJPSAzICogNjAsCiAJfSwKIAlbU0lQX0VYUEVDVF9BVURJT10gPSB7CisJCS5uYW1lCQk9ICJhdWRpbyIsCiAJCS5tYXhfZXhwZWN0ZWQJPSAyICogSVBfQ1RfRElSX01BWCwKIAkJLnRpbWVvdXQJPSAzICogNjAsCiAJfSwKIAlbU0lQX0VYUEVDVF9WSURFT10gPSB7CisJCS5uYW1lCQk9ICJ2aWRlbyIsCiAJCS5tYXhfZXhwZWN0ZWQJPSAyICogSVBfQ1RfRElSX01BWCwKIAkJLnRpbWVvdXQJPSAzICogNjAsCiAJfSwKKwlbU0lQX0VYUEVDVF9JTUFHRV0gPSB7CisJCS5uYW1lCQk9ICJpbWFnZSIsCisJCS5tYXhfZXhwZWN0ZWQJPSBJUF9DVF9ESVJfTUFYLAorCQkudGltZW91dAk9IDMgKiA2MCwKKwl9LAogfTsKIAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpCkBAIC0xMzIzLDcgKzE0OTksNyBAQAogCWludCBpLCBqOwogCiAJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNpcFtpXSk7IGorKykgewogCQkJaWYgKHNpcFtpXVtqXS5tZSA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKCZzaXBbaV1bal0pOwpAQCAtMTM0MywxNCArMTUxOSwyNCBAQAogCQltZW1zZXQoJnNpcFtpXSwgMCwgc2l6ZW9mKHNpcFtpXSkpOwogCiAJCXNpcFtpXVswXS50dXBsZS5zcmMubDNudW0gPSBBRl9JTkVUOwotCQlzaXBbaV1bMV0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDY7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCXNpcFtpXVtqXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKKwkJc2lwW2ldWzBdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCQlzaXBbaV1bMF0uaGVscCA9IHNpcF9oZWxwX3VkcDsKKwkJc2lwW2ldWzFdLnR1cGxlLnNyYy5sM251bSA9IEFGX0lORVQ7CisJCXNpcFtpXVsxXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwkJc2lwW2ldWzFdLmhlbHAgPSBzaXBfaGVscF90Y3A7CisKKwkJc2lwW2ldWzJdLnR1cGxlLnNyYy5sM251bSA9IEFGX0lORVQ2OworCQlzaXBbaV1bMl0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCXNpcFtpXVsyXS5oZWxwID0gc2lwX2hlbHBfdWRwOworCQlzaXBbaV1bM10udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDY7CisJCXNpcFtpXVszXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwkJc2lwW2ldWzNdLmhlbHAgPSBzaXBfaGVscF90Y3A7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc2lwW2ldKTsgaisrKSB7CiAJCQlzaXBbaV1bal0udHVwbGUuc3JjLnUudWRwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CiAJCQlzaXBbaV1bal0uZXhwZWN0X3BvbGljeSA9IHNpcF9leHBfcG9saWN5OwogCQkJc2lwW2ldW2pdLmV4cGVjdF9jbGFzc19tYXggPSBTSVBfRVhQRUNUX01BWDsKIAkJCXNpcFtpXVtqXS5tZSA9IFRISVNfTU9EVUxFOwotCQkJc2lwW2ldW2pdLmhlbHAgPSBzaXBfaGVscDsKIAogCQkJdG1wbmFtZSA9ICZzaXBfbmFtZXNbaV1bal1bMF07CiAJCQlpZiAocG9ydHNbaV0gPT0gU0lQX1BPUlQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggZTMxMGYxNS4uMjRhNDJlZmUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xNzEsNiArMTcyLDExIEBACiAJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCWlmIChzZXFfcHJpbnRmKHMsICJ6b25lPSV1ICIsIG5mX2N0X3pvbmUoY3QpKSkKKwkJZ290byByZWxlYXNlOworI2VuZGlmCisKIAlpZiAoc2VxX3ByaW50ZihzLCAidXNlPSV1XG4iLCBhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSkpCiAJCWdvdG8gcmVsZWFzZTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCmluZGV4IDNhNmZkNzcuLmJhMDk1ZmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKQEAgLTI2NSw3ICsyNjUsNiBAQAogCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCWVudHJ5LT5va2ZuKHNrYik7CiAJCWxvY2FsX2JoX2VuYWJsZSgpOwotCWNhc2UgTkZfU1RPTEVOOgogCQlicmVhazsKIAljYXNlIE5GX1FVRVVFOgogCQlpZiAoIV9fbmZfcXVldWUoc2tiLCBlbGVtLCBlbnRyeS0+cGYsIGVudHJ5LT5ob29rLApAQCAtMjczLDYgKzI3Miw3IEBACiAJCQkJdmVyZGljdCA+PiBORl9WRVJESUNUX0JJVFMpKQogCQkJZ290byBuZXh0X2hvb2s7CiAJCWJyZWFrOworCWNhc2UgTkZfU1RPTEVOOgogCWRlZmF1bHQ6CiAJCWtmcmVlX3NrYihza2IpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IGVlZGMwYzEuLjhlYjBjYzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtNDAsNyArNDAsNiBAQAogCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIG5mdmVyc2lvbltdID0gIjAuMzAiOwogCi1zdGF0aWMgc3RydWN0IHNvY2sgKm5mbmwgPSBOVUxMOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpzdWJzeXNfdGFibGVbTkZOTF9TVUJTWVNfQ09VTlRdOwogc3RhdGljIERFRklORV9NVVRFWChuZm5sX211dGV4KTsKIApAQCAtMTAxLDM0ICsxMDAsMzUgQEAKIAlyZXR1cm4gJnNzLT5jYltjYl9pZF07CiB9CiAKLWludCBuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyh1bnNpZ25lZCBpbnQgZ3JvdXApCitpbnQgbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7Ci0JcmV0dXJuIG5ldGxpbmtfaGFzX2xpc3RlbmVycyhuZm5sLCBncm91cCk7CisJcmV0dXJuIG5ldGxpbmtfaGFzX2xpc3RlbmVycyhuZXQtPm5mbmwsIGdyb3VwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKTsKIAotaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsCitpbnQgbmZuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLAogCQkgICB1bnNpZ25lZCBncm91cCwgaW50IGVjaG8sIGdmcF90IGZsYWdzKQogewotCXJldHVybiBubG1zZ19ub3RpZnkobmZubCwgc2tiLCBwaWQsIGdyb3VwLCBlY2hvLCBmbGFncyk7CisJcmV0dXJuIG5sbXNnX25vdGlmeShuZXQtPm5mbmwsIHNrYiwgcGlkLCBncm91cCwgZWNobywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3NlbmQpOwogCi12b2lkIG5mbmV0bGlua19zZXRfZXJyKHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVycm9yKQordm9pZCBuZm5ldGxpbmtfc2V0X2VycihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVycm9yKQogewotCW5ldGxpbmtfc2V0X2VycihuZm5sLCBwaWQsIGdyb3VwLCBlcnJvcik7CisJbmV0bGlua19zZXRfZXJyKG5ldC0+bmZubCwgcGlkLCBncm91cCwgZXJyb3IpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3NldF9lcnIpOwogCi1pbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKQoraW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKQogewotCXJldHVybiBuZXRsaW5rX3VuaWNhc3QobmZubCwgc2tiLCBwaWQsIGZsYWdzKTsKKwlyZXR1cm4gbmV0bGlua191bmljYXN0KG5ldC0+bmZubCwgc2tiLCBwaWQsIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua191bmljYXN0KTsKIAogLyogUHJvY2VzcyBvbmUgY29tcGxldGUgbmZuZXRsaW5rIG1lc3NhZ2UuICovCiBzdGF0aWMgaW50IG5mbmV0bGlua19yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrICpuYzsKIAljb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3M7CiAJaW50IHR5cGUsIGVycjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gbmMtPmNhbGwobmZubCwgc2tiLCBubGgsIChjb25zdCBzdHJ1Y3QgbmxhdHRyICoqKWNkYSk7CisJCWVyciA9IG5jLT5jYWxsKG5ldC0+bmZubCwgc2tiLCBubGgsIChjb25zdCBzdHJ1Y3QgbmxhdHRyICoqKWNkYSk7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWdvdG8gcmVwbGF5OwogCQlyZXR1cm4gZXJyOwpAQCAtMTg0LDI2ICsxODQsNDUgQEAKIAluZm5sX3VubG9jaygpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBuZm5ldGxpbmtfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCXByaW50aygiUmVtb3ZpbmcgbmV0ZmlsdGVyIE5FVExJTksgbGF5ZXIuXG4iKTsKLQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKG5mbmwpOwotCXJldHVybjsKKwlzdHJ1Y3Qgc29jayAqbmZubDsKKworCW5mbmwgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUobmV0LCBORVRMSU5LX05FVEZJTFRFUiwgTkZOTEdSUF9NQVgsCisJCQkJICAgICBuZm5ldGxpbmtfcmN2LCBOVUxMLCBUSElTX01PRFVMRSk7CisJaWYgKCFuZm5sKQorCQlyZXR1cm4gLUVOT01FTTsKKwluZXQtPm5mbmxfc3Rhc2ggPSBuZm5sOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZXQtPm5mbmwsIG5mbmwpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IG5mbmV0bGlua19uZXRfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQoreworCXN0cnVjdCBuZXQgKm5ldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfZXhpdF9saXN0LCBleGl0X2xpc3QpCisJCXJjdV9hc3NpZ25fcG9pbnRlcihuZXQtPm5mbmwsIE5VTEwpOworCXN5bmNocm9uaXplX25ldCgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfZXhpdF9saXN0LCBleGl0X2xpc3QpCisJCW5ldGxpbmtfa2VybmVsX3JlbGVhc2UobmV0LT5uZm5sX3N0YXNoKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZm5ldGxpbmtfbmV0X29wcyA9IHsKKwkuaW5pdAkJPSBuZm5ldGxpbmtfbmV0X2luaXQsCisJLmV4aXRfYmF0Y2gJPSBuZm5ldGxpbmtfbmV0X2V4aXRfYmF0Y2gsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfaW5pdCh2b2lkKQogewogCXByaW50aygiTmV0ZmlsdGVyIG1lc3NhZ2VzIHZpYSBORVRMSU5LIHYlcy5cbiIsIG5mdmVyc2lvbik7Ci0KLQluZm5sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKCZpbml0X25ldCwgTkVUTElOS19ORVRGSUxURVIsIE5GTkxHUlBfTUFYLAotCQkJCSAgICAgbmZuZXRsaW5rX3JjdiwgTlVMTCwgVEhJU19NT0RVTEUpOwotCWlmICghbmZubCkgewotCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBpbml0aWFsaXplIG5mbmV0bGluayFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmZuZXRsaW5rX25ldF9vcHMpOwogfQogCitzdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX2V4aXQodm9pZCkKK3sKKwlwcmludGsoIlJlbW92aW5nIG5ldGZpbHRlciBORVRMSU5LIGxheWVyLlxuIik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZuZm5ldGxpbmtfbmV0X29wcyk7Cit9CiBtb2R1bGVfaW5pdChuZm5ldGxpbmtfaW5pdCk7CiBtb2R1bGVfZXhpdChuZm5ldGxpbmtfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IDlkZTA0NzAuLmQ5YjhmYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC0zMjMsNyArMzIzLDggQEAKIAkJCSAgTkxNU0dfRE9ORSwKIAkJCSAgc2l6ZW9mKHN0cnVjdCBuZmdlbm1zZykpOwogCi0Jc3RhdHVzID0gbmZuZXRsaW5rX3VuaWNhc3QoaW5zdC0+c2tiLCBpbnN0LT5wZWVyX3BpZCwgTVNHX0RPTlRXQUlUKTsKKwlzdGF0dXMgPSBuZm5ldGxpbmtfdW5pY2FzdChpbnN0LT5za2IsICZpbml0X25ldCwgaW5zdC0+cGVlcl9waWQsCisJCQkJICAgTVNHX0RPTlRXQUlUKTsKIAogCWluc3QtPnFsZW4gPSAwOwogCWluc3QtPnNrYiA9IE5VTEw7CkBAIC03NjcsNyArNzY4LDcgQEAKIAkJCX0KIAogCQkJaW5zdGFuY2VfZGVzdHJveShpbnN0KTsKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfcHV0OwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVOT1RTVVBQOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCA3ZTNmYTQxMDYuLjdiYTRhYmMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAJaW5zdC0+Y29weV9tb2RlID0gTkZRTkxfQ09QWV9OT05FOwogCXNwaW5fbG9ja19pbml0KCZpbnN0LT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5zdC0+cXVldWVfbGlzdCk7Ci0JSU5JVF9SQ1VfSEVBRCgmaW5zdC0+cmN1KTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7CiAJCWVyciA9IC1FQUdBSU47CkBAIC00MTQsMTMgKzQxMywxMyBAQAogCQlxdWV1ZS0+cXVldWVfZHJvcHBlZCsrOwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJICBwcmludGsoS0VSTl9XQVJOSU5HICJuZl9xdWV1ZTogZnVsbCBhdCAlZCBlbnRyaWVzLCAiCi0JCQkJICJkcm9wcGluZyBwYWNrZXRzKHMpLiBEcm9wcGVkOiAlZFxuIiwKLQkJCQkgcXVldWUtPnF1ZXVlX3RvdGFsLCBxdWV1ZS0+cXVldWVfZHJvcHBlZCk7CisJCQkJICJkcm9wcGluZyBwYWNrZXRzKHMpLlxuIiwKKwkJCQkgcXVldWUtPnF1ZXVlX3RvdGFsKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfbnNrYjsKIAl9CiAKIAkvKiBuZm5ldGxpbmtfdW5pY2FzdCB3aWxsIGVpdGhlciBmcmVlIHRoZSBuc2tiIG9yIGFkZCBpdCB0byBhIHNvY2tldCAqLwotCWVyciA9IG5mbmV0bGlua191bmljYXN0KG5za2IsIHF1ZXVlLT5wZWVyX3BpZCwgTVNHX0RPTlRXQUlUKTsKKwllcnIgPSBuZm5ldGxpbmtfdW5pY2FzdChuc2tiLCAmaW5pdF9uZXQsIHF1ZXVlLT5wZWVyX3BpZCwgTVNHX0RPTlRXQUlUKTsKIAlpZiAoZXJyIDwgMCkgewogCQlxdWV1ZS0+cXVldWVfdXNlcl9kcm9wcGVkKys7CiAJCWdvdG8gZXJyX291dF91bmxvY2s7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggZjAxOTU1Yy4uMGExMmNlZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtMjYsNyArMjYsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC5oPgotCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKQEAgLTM3LDcgKzM5LDcgQEAKIHN0cnVjdCBjb21wYXRfZGVsdGEgewogCXN0cnVjdCBjb21wYXRfZGVsdGEgKm5leHQ7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKLQlzaG9ydCBkZWx0YTsKKwlpbnQgZGVsdGE7CiB9OwogCiBzdHJ1Y3QgeHRfYWYgewpAQCAtMzY0LDggKzM2NiwxMCBAQAogCQkgKiBlYnRfYW1vbmcgaXMgZXhlbXB0IGZyb20gY2VudHJhbGl6ZWQgbWF0Y2hzaXplIGNoZWNraW5nCiAJCSAqIGJlY2F1c2UgaXQgdXNlcyBhIGR5bmFtaWMtc2l6ZSBkYXRhIHNldC4KIAkJICovCi0JCXByX2VycigiJXNfdGFibGVzOiAlcyBtYXRjaDogaW52YWxpZCBzaXplICVadSAhPSAldVxuIiwKKwkJcHJfZXJyKCIlc190YWJsZXM6ICVzLiV1IG1hdGNoOiBpbnZhbGlkIHNpemUgIgorCQkgICAgICAgIiV1IChrZXJuZWwpICE9ICh1c2VyKSAldVxuIiwKIAkJICAgICAgIHh0X3ByZWZpeFtwYXItPmZhbWlseV0sIHBhci0+bWF0Y2gtPm5hbWUsCisJCSAgICAgICBwYXItPm1hdGNoLT5yZXZpc2lvbiwKIAkJICAgICAgIFhUX0FMSUdOKHBhci0+bWF0Y2gtPm1hdGNoc2l6ZSksIHNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00MzUsMTAgKzQzOSwxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2ZsdXNoX29mZnNldHMpOwogCi1zaG9ydCB4dF9jb21wYXRfY2FsY19qdW1wKHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoraW50IHh0X2NvbXBhdF9jYWxjX2p1bXAodV9pbnQ4X3QgYWYsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wOwotCXNob3J0IGRlbHRhOworCWludCBkZWx0YTsKIAogCWZvciAodG1wID0geHRbYWZdLmNvbXBhdF9vZmZzZXRzLCBkZWx0YSA9IDA7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQogCQlpZiAodG1wLT5vZmZzZXQgPCBvZmZzZXQpCkBAIC00ODEsOCArNDg1LDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9tYXRjaF9mcm9tX3VzZXIpOwogCi1pbnQgeHRfY29tcGF0X21hdGNoX3RvX3VzZXIoc3RydWN0IHh0X2VudHJ5X21hdGNoICptLCB2b2lkIF9fdXNlciAqKmRzdHB0ciwKLQkJCSAgICB1bnNpZ25lZCBpbnQgKnNpemUpCitpbnQgeHRfY29tcGF0X21hdGNoX3RvX3VzZXIoY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICptLAorCQkJICAgIHZvaWQgX191c2VyICoqZHN0cHRyLCB1bnNpZ25lZCBpbnQgKnNpemUpCiB7CiAJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCA9IG0tPnUua2VybmVsLm1hdGNoOwogCXN0cnVjdCBjb21wYXRfeHRfZW50cnlfbWF0Y2ggX191c2VyICpjbSA9ICpkc3RwdHI7CkBAIC01MTQsOCArNTE4LDEwIEBACiAJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdV9pbnQ4X3QgcHJvdG8sIGJvb2wgaW52X3Byb3RvKQogewogCWlmIChYVF9BTElHTihwYXItPnRhcmdldC0+dGFyZ2V0c2l6ZSkgIT0gc2l6ZSkgewotCQlwcl9lcnIoIiVzX3RhYmxlczogJXMgdGFyZ2V0OiBpbnZhbGlkIHNpemUgJVp1ICE9ICV1XG4iLAorCQlwcl9lcnIoIiVzX3RhYmxlczogJXMuJXUgdGFyZ2V0OiBpbnZhbGlkIHNpemUgIgorCQkgICAgICAgIiV1IChrZXJuZWwpICE9ICh1c2VyKSAldVxuIiwKIAkJICAgICAgIHh0X3ByZWZpeFtwYXItPmZhbWlseV0sIHBhci0+dGFyZ2V0LT5uYW1lLAorCQkgICAgICAgcGFyLT50YXJnZXQtPnJldmlzaW9uLAogCQkgICAgICAgWFRfQUxJR04ocGFyLT50YXJnZXQtPnRhcmdldHNpemUpLCBzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgyLDggKzU4OCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9jb21wYXRfdGFyZ2V0X2Zyb21fdXNlcik7CiAKLWludCB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIoc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdCwgdm9pZCBfX3VzZXIgKipkc3RwdHIsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKK2ludCB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIoY29uc3Qgc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdCwKKwkJCSAgICAgdm9pZCBfX3VzZXIgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSkKIHsKIAljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSB0LT51Lmtlcm5lbC50YXJnZXQ7CiAJc3RydWN0IGNvbXBhdF94dF9lbnRyeV90YXJnZXQgX191c2VyICpjdCA9ICpkc3RwdHI7CkBAIC0xMDkxLDYgKzEwOTcsNjAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKKy8qKgorICogeHRfaG9va19saW5rIC0gc2V0IHVwIGhvb2tzIGZvciBhIG5ldyB0YWJsZQorICogQHRhYmxlOgl0YWJsZSB3aXRoIG1ldGFkYXRhIG5lZWRlZCB0byBzZXQgdXAgaG9va3MKKyAqIEBmbjoJCUhvb2sgZnVuY3Rpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIGFuZCByZWdpc3RlcmluZyB0aGUgbmVjZXNzYXJ5CisgKiBOZXRmaWx0ZXIgaG9va3MgZm9yIFhUIHRhYmxlcy4KKyAqLworc3RydWN0IG5mX2hvb2tfb3BzICp4dF9ob29rX2xpbmsoY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwgbmZfaG9va2ZuICpmbikKK3sKKwl1bnNpZ25lZCBpbnQgaG9va19tYXNrID0gdGFibGUtPnZhbGlkX2hvb2tzOworCXVpbnQ4X3QgaSwgbnVtX2hvb2tzID0gaHdlaWdodDMyKGhvb2tfbWFzayk7CisJdWludDhfdCBob29rbnVtOworCXN0cnVjdCBuZl9ob29rX29wcyAqb3BzOworCWludCByZXQ7CisKKwlvcHMgPSBrbWFsbG9jKHNpemVvZigqb3BzKSAqIG51bV9ob29rcywgR0ZQX0tFUk5FTCk7CisJaWYgKG9wcyA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWZvciAoaSA9IDAsIGhvb2tudW0gPSAwOyBpIDwgbnVtX2hvb2tzICYmIGhvb2tfbWFzayAhPSAwOworCSAgICAgaG9va19tYXNrID4+PSAxLCArK2hvb2tudW0pIHsKKwkJaWYgKCEoaG9va19tYXNrICYgMSkpCisJCQljb250aW51ZTsKKwkJb3BzW2ldLmhvb2sgICAgID0gZm47CisJCW9wc1tpXS5vd25lciAgICA9IHRhYmxlLT5tZTsKKwkJb3BzW2ldLnBmICAgICAgID0gdGFibGUtPmFmOworCQlvcHNbaV0uaG9va251bSAgPSBob29rbnVtOworCQlvcHNbaV0ucHJpb3JpdHkgPSB0YWJsZS0+cHJpb3JpdHk7CisJCSsraTsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhvcHMsIG51bV9ob29rcyk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUob3BzKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gb3BzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfaG9va19saW5rKTsKKworLyoqCisgKiB4dF9ob29rX3VubGluayAtIHJlbW92ZSBob29rcyBmb3IgYSB0YWJsZQorICogQG9wczoJbmZfaG9va19vcHMgYXJyYXkgYXMgcmV0dXJuZWQgYnkgbmZfaG9va19saW5rCisgKiBAaG9va19tYXNrOgl0aGUgdmVyeSBzYW1lIG1hc2sgdGhhdCB3YXMgcGFzc2VkIHRvIG5mX2hvb2tfbGluaworICovCit2b2lkIHh0X2hvb2tfdW5saW5rKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKQoreworCW5mX3VucmVnaXN0ZXJfaG9va3Mob3BzLCBod2VpZ2h0MzIodGFibGUtPnZhbGlkX2hvb2tzKSk7CisJa2ZyZWUob3BzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2hvb2tfdW5saW5rKTsKKwogaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZikKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzUwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfQ1QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHRfY3RfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IGluZm8tPmN0OworCisJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayk/IElnbm9yZS4gKi8KKwlpZiAoc2tiLT5uZmN0ICE9IE5VTEwpCisJCXJldHVybiBYVF9DT05USU5VRTsKKworCWF0b21pY19pbmMoJmN0LT5jdF9nZW5lcmFsLnVzZSk7CisJc2tiLT5uZmN0ID0gJmN0LT5jdF9nZW5lcmFsOworCXNrYi0+bmZjdGluZm8gPSBJUF9DVF9ORVc7CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB1OCB4dF9jdF9maW5kX3Byb3RvKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCWlmIChwYXItPmZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUgPSBwYXItPmVudHJ5aW5mbzsKKworCQlpZiAoZS0+aXAuaW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlLT5pcC5wcm90bzsKKwl9IGVsc2UgaWYgKHBhci0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplID0gcGFyLT5lbnRyeWluZm87CisKKwkJaWYgKGUtPmlwdjYuaW52ZmxhZ3MgJiBJUDZUX0lOVl9QUk9UTykKKwkJCXJldHVybiAwOworCQlyZXR1cm4gZS0+aXB2Ni5wcm90bzsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9jdF90YXJnZXRfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0OworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCXU4IHByb3RvOworCisJaWYgKGluZm8tPmZsYWdzICYgflhUX0NUX05PVFJBQ0spCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpbmZvLT5mbGFncyAmIFhUX0NUX05PVFJBQ0spIHsKKwkJY3QgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZDsKKwkJYXRvbWljX2luYygmY3QtPmN0X2dlbmVyYWwudXNlKTsKKwkJZ290byBvdXQ7CisJfQorCisjaWZuZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKKwlpZiAoaW5mby0+em9uZSkKKwkJZ290byBlcnIxOworI2VuZGlmCisKKwlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSkgPCAwKQorCQlnb3RvIGVycjE7CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJY3QgPSBuZl9jb25udHJhY2tfYWxsb2MocGFyLT5uZXQsIGluZm8tPnpvbmUsICZ0LCAmdCwgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjdCkpCisJCWdvdG8gZXJyMjsKKworCWlmICgoaW5mby0+Y3RfZXZlbnRzIHx8IGluZm8tPmV4cF9ldmVudHMpICYmCisJICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby0+Y3RfZXZlbnRzLCBpbmZvLT5leHBfZXZlbnRzLAorCQkJCSAgR0ZQX0tFUk5FTCkpCisJCWdvdG8gZXJyMzsKKworCWlmIChpbmZvLT5oZWxwZXJbMF0pIHsKKwkJcHJvdG8gPSB4dF9jdF9maW5kX3Byb3RvKHBhcik7CisJCWlmICghcHJvdG8pCisJCQlnb3RvIGVycjM7CisKKwkJaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTsKKwkJaWYgKGhlbHAgPT0gTlVMTCkKKwkJCWdvdG8gZXJyMzsKKworCQloZWxwLT5oZWxwZXIgPSBuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGluZm8tPmhlbHBlciwKKwkJCQkJCQkJICBwYXItPmZhbWlseSwKKwkJCQkJCQkJICBwcm90byk7CisJCWlmIChoZWxwLT5oZWxwZXIgPT0gTlVMTCkKKwkJCWdvdG8gZXJyMzsKKwl9CisKKwlfX3NldF9iaXQoSVBTX1RFTVBMQVRFX0JJVCwgJmN0LT5zdGF0dXMpOworCV9fc2V0X2JpdChJUFNfQ09ORklSTUVEX0JJVCwgJmN0LT5zdGF0dXMpOworb3V0OgorCWluZm8tPmN0ID0gY3Q7CisJcmV0dXJuIHRydWU7CisKK2VycjM6CisJbmZfY29ubnRyYWNrX2ZyZWUoY3QpOworZXJyMjoKKwluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQocGFyLT5mYW1pbHkpOworZXJyMToKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHh0X2N0X3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9jdF90YXJnZXRfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gaW5mby0+Y3Q7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKKworCWlmIChjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkgeworCQloZWxwID0gbmZjdF9oZWxwKGN0KTsKKwkJaWYgKGhlbHApCisJCQltb2R1bGVfcHV0KGhlbHAtPmhlbHBlci0+bWUpOworCisJCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChwYXItPmZhbWlseSk7CisJfQorCW5mX2N0X3B1dChpbmZvLT5jdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHh0X2N0X3RnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIkNUIiwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mbykpLAorCS5jaGVja2VudHJ5CT0geHRfY3RfdGdfY2hlY2ssCisJLmRlc3Ryb3kJPSB4dF9jdF90Z19kZXN0cm95LAorCS50YXJnZXQJCT0geHRfY3RfdGFyZ2V0LAorCS50YWJsZQkJPSAicmF3IiwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9jdF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmeHRfY3RfdGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfY3RfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZ4dF9jdF90Zyk7Cit9CisKK21vZHVsZV9pbml0KHh0X2N0X3RnX2luaXQpOworbW9kdWxlX2V4aXQoeHRfY3RfdGdfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY29ubmVjdGlvbiB0cmFja2luZyB0YXJnZXQiKTsKK01PRFVMRV9BTElBUygiaXB0X0NUIik7CitNT0RVTEVfQUxJQVMoImlwNnRfQ1QiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKaW5kZXggZjI4ZjZhNS4uMTJkY2Q3MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKQEAgLTI4LDYgKzI4LDcgQEAKIE1PRFVMRV9BTElBUygiYXJwdF9ORlFVRVVFIik7CiAKIHN0YXRpYyB1MzIgamhhc2hfaW5pdHZhbCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGJvb2wgcm5kX2luaXRlZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdW5zaWduZWQgaW50CiBuZnF1ZXVlX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKQEAgLTkwLDYgKzkxLDEwIEBACiAJY29uc3Qgc3RydWN0IHh0X05GUV9pbmZvX3YxICppbmZvID0gcGFyLT50YXJnaW5mbzsKIAl1MzIgbWF4aWQ7CiAKKwlpZiAodW5saWtlbHkoIXJuZF9pbml0ZWQpKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJmpoYXNoX2luaXR2YWwsIHNpemVvZihqaGFzaF9pbml0dmFsKSk7CisJCXJuZF9pbml0ZWQgPSB0cnVlOworCX0KIAlpZiAoaW5mby0+cXVldWVzX3RvdGFsID09IDApIHsKIAkJcHJfZXJyKCJORlFVRVVFOiBudW1iZXIgb2YgdG90YWwgcXVldWVzIGlzIDBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0xMzUsNyArMTQwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmZxdWV1ZV90Z19pbml0KHZvaWQpCiB7Ci0JZ2V0X3JhbmRvbV9ieXRlcygmamhhc2hfaW5pdHZhbCwgc2l6ZW9mKGpoYXNoX2luaXR2YWwpKTsKIAlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0cyhuZnF1ZXVlX3RnX3JlZywgQVJSQVlfU0laRShuZnF1ZXVlX3RnX3JlZykpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCmluZGV4IGQ4MGI4MTkuLjg3YWU5N2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIFJBVEVFU1RfSFNJWkUJMTYKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByYXRlZXN0X2hhc2hbUkFURUVTVF9IU0laRV0gX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgamhhc2hfcm5kIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYm9vbCBybmRfaW5pdGVkIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHRfcmF0ZWVzdF9oYXNoKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC05Myw2ICs5NCwxMSBAQAogCQlzdHJ1Y3QgZ25ldF9lc3RpbWF0b3IJZXN0OwogCX0gY2ZnOwogCisJaWYgKHVubGlrZWx5KCFybmRfaW5pdGVkKSkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZqaGFzaF9ybmQsIHNpemVvZihqaGFzaF9ybmQpKTsKKwkJcm5kX2luaXRlZCA9IHRydWU7CisJfQorCiAJZXN0ID0geHRfcmF0ZWVzdF9sb29rdXAoaW5mby0+bmFtZSk7CiAJaWYgKGVzdCkgewogCQkvKgpAQCAtMTY0LDcgKzE3MCw2IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZWVzdF9oYXNoKTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJnJhdGVlc3RfaGFzaFtpXSk7CiAKLQlnZXRfcmFuZG9tX2J5dGVzKCZqaGFzaF9ybmQsIHNpemVvZihqaGFzaF9ybmQpKTsKIAlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZ4dF9yYXRlZXN0X3RnX3JlZyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCmluZGV4IGVkYTY0YzEuLjBlMzU3YWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYwpAQCAtNjAsMTcgKzYwLDkgQEAKIAl0Y3BsZW4gPSBza2ItPmxlbiAtIHRjcGhvZmY7CiAJdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGNwaG9mZik7CiAKLQkvKiBTaW5jZSBpdCBwYXNzZWQgZmxhZ3MgdGVzdCBpbiB0Y3AgbWF0Y2gsIHdlIGtub3cgaXQgaXMgaXMKLQkgICBub3QgYSBmcmFnbWVudCwgYW5kIGhhcyBkYXRhID49IHRjcCBoZWFkZXIgbGVuZ3RoLiAgU1lOCi0JICAgcGFja2V0cyBzaG91bGQgbm90IGNvbnRhaW4gZGF0YTogaWYgdGhleSBkaWQsIHRoZW4gd2UgcmlzawotCSAgIHJ1bm5pbmcgb3ZlciBNVFUsIHNlbmRpbmcgRnJhZyBOZWVkZWQgYW5kIGJyZWFraW5nIHRoaW5ncwotCSAgIGJhZGx5LiAtLVJSICovCi0JaWYgKHRjcGxlbiAhPSB0Y3BoLT5kb2ZmKjQpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAieHRfVENQTVNTOiBiYWQgbGVuZ3RoICgldSBieXRlcylcbiIsCi0JCQkgICAgICAgc2tiLT5sZW4pOworCS8qIEhlYWRlciBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gdGhlIHBhY2tldCAqLworCWlmICh0Y3BsZW4gPCB0Y3BoLT5kb2ZmKjQpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlpZiAoaW5mby0+bXNzID09IFhUX1RDUE1TU19DTEFNUF9QTVRVKSB7CiAJCWlmIChkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgPD0gbWlubGVuKSB7CkBAIC0xMTUsNiArMTA3LDEyIEBACiAJCX0KIAl9CiAKKwkvKiBUaGVyZSBpcyBkYXRhIGFmdGVyIHRoZSBoZWFkZXIgc28gdGhlIG9wdGlvbiBjYW4ndCBiZSBhZGRlZAorCSAgIHdpdGhvdXQgbW92aW5nIGl0LCBhbmQgZG9pbmcgc28gbWF5IG1ha2UgdGhlIFNZTiBwYWNrZXQKKwkgICBpdHNlbGYgdG9vIGxhcmdlLiBBY2NlcHQgdGhlIHBhY2tldCB1bm1vZGlmaWVkIGluc3RlYWQuICovCisJaWYgKHRjcGxlbiA+IHRjcGgtPmRvZmYqNCkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIE1TUyBPcHRpb24gbm90IGZvdW5kID8hIGFkZCBpdC4uCiAJICovCkBAIC0yNDEsNiArMjM5LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwogCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUgPSBwYXItPmVudHJ5aW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCWlmIChpbmZvLT5tc3MgPT0gWFRfVENQTVNTX0NMQU1QX1BNVFUgJiYKIAkgICAgKHBhci0+aG9va19tYXNrICYgfigoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwKQEAgLTI1MCw4ICsyNDksOSBAQAogCQkgICAgICAgIkZPUldBUkQsIE9VVFBVVCBhbmQgUE9TVFJPVVRJTkcgaG9va3NcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCWlmIChJUFRfTUFUQ0hfSVRFUkFURShlLCBmaW5kX3N5bl9tYXRjaCkpCi0JCXJldHVybiB0cnVlOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkKKwkJaWYgKGZpbmRfc3luX21hdGNoKGVtYXRjaCkpCisJCQlyZXR1cm4gdHJ1ZTsKIAlwcmludGsoInh0X1RDUE1TUzogT25seSB3b3JrcyBvbiBUQ1AgU1lOIHBhY2tldHNcbiIpOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTI2MSw2ICsyNjEsNyBAQAogewogCWNvbnN0IHN0cnVjdCB4dF90Y3Btc3NfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CiAJY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUgPSBwYXItPmVudHJ5aW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCWlmIChpbmZvLT5tc3MgPT0gWFRfVENQTVNTX0NMQU1QX1BNVFUgJiYKIAkgICAgKHBhci0+aG9va19tYXNrICYgfigoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwKQEAgLTI3MCw4ICsyNzEsOSBAQAogCQkgICAgICAgIkZPUldBUkQsIE9VVFBVVCBhbmQgUE9TVFJPVVRJTkcgaG9va3NcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCWlmIChJUDZUX01BVENIX0lURVJBVEUoZSwgZmluZF9zeW5fbWF0Y2gpKQotCQlyZXR1cm4gdHJ1ZTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCWlmIChmaW5kX3N5bl9tYXRjaChlbWF0Y2gpKQorCQkJcmV0dXJuIHRydWU7CiAJcHJpbnRrKCJ4dF9UQ1BNU1M6IE9ubHkgd29ya3Mgb24gVENQIFNZTiBwYWNrZXRzXG4iKTsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwppbmRleCAzOGYwM2Y3Li4yNjk5N2NlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAKIC8qIHdlIHdpbGwgc2F2ZSB0aGUgdHVwbGVzIG9mIGFsbCBjb25uZWN0aW9ucyB3ZSBjYXJlIGFib3V0ICovCiBzdHJ1Y3QgeHRfY29ubmxpbWl0X2Nvbm4gewpAQCAtNDAsMTUgKzQxLDExIEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotc3RhdGljIHVfaW50MzJfdCBjb25ubGltaXRfcm5kOwotc3RhdGljIGJvb2wgY29ubmxpbWl0X3JuZF9pbml0ZWQ7CitzdGF0aWMgdV9pbnQzMl90IGNvbm5saW1pdF9ybmQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBib29sIGNvbm5saW1pdF9ybmRfaW5pdGVkIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNvbm5saW1pdF9pcGhhc2goX19iZTMyIGFkZHIpCiB7Ci0JaWYgKHVubGlrZWx5KCFjb25ubGltaXRfcm5kX2luaXRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmY29ubmxpbWl0X3JuZCwgc2l6ZW9mKGNvbm5saW1pdF9ybmQpKTsKLQkJY29ubmxpbWl0X3JuZF9pbml0ZWQgPSB0cnVlOwotCX0KIAlyZXR1cm4gamhhc2hfMXdvcmQoKF9fZm9yY2UgX191MzIpYWRkciwgY29ubmxpbWl0X3JuZCkgJiAweEZGOwogfQogCkBAIC01OSwxMSArNTYsNiBAQAogCXVuaW9uIG5mX2luZXRfYWRkciByZXM7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAodW5saWtlbHkoIWNvbm5saW1pdF9ybmRfaW5pdGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZjb25ubGltaXRfcm5kLCBzaXplb2YoY29ubmxpbWl0X3JuZCkpOwotCQljb25ubGltaXRfcm5kX2luaXRlZCA9IHRydWU7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRkci0+aXA2KTsgKytpKQogCQlyZXMuaXA2W2ldID0gYWRkci0+aXA2W2ldICYgbWFzay0+aXA2W2ldOwogCkBAIC05OSw3ICs5MSw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGNvdW50X3RoZW0oc3RydWN0IHh0X2Nvbm5saW1pdF9kYXRhICpkYXRhLAorc3RhdGljIGludCBjb3VudF90aGVtKHN0cnVjdCBuZXQgKm5ldCwKKwkJICAgICAgc3RydWN0IHh0X2Nvbm5saW1pdF9kYXRhICpkYXRhLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLAogCQkgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2ssCkBAIC0xMjIsNyArMTE1LDggQEAKIAogCS8qIGNoZWNrIHRoZSBzYXZlZCBjb25uZWN0aW9ucyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCB0bXAsIGhhc2gsIGxpc3QpIHsKLQkJZm91bmQgICAgPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJmluaXRfbmV0LCAmY29ubi0+dHVwbGUpOworCQlmb3VuZCAgICA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIE5GX0NUX0RFRkFVTFRfWk9ORSwKKwkJCQkJCSAmY29ubi0+dHVwbGUpOwogCQlmb3VuZF9jdCA9IE5VTEw7CiAKIAkJaWYgKGZvdW5kICE9IE5VTEwpCkBAIC0xODAsNiArMTc0LDcgQEAKIHN0YXRpYyBib29sCiBjb25ubGltaXRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChwYXItPmluID8gcGFyLT5pbiA6IHBhci0+b3V0KTsKIAljb25zdCBzdHJ1Y3QgeHRfY29ubmxpbWl0X2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgYWRkcjsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwpAQCAtMjA0LDcgKzE5OSw3IEBACiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZpbmZvLT5kYXRhLT5sb2NrKTsKLQljb25uZWN0aW9ucyA9IGNvdW50X3RoZW0oaW5mby0+ZGF0YSwgdHVwbGVfcHRyLCAmYWRkciwKKwljb25uZWN0aW9ucyA9IGNvdW50X3RoZW0obmV0LCBpbmZvLT5kYXRhLCB0dXBsZV9wdHIsICZhZGRyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mby0+bWFzaywgcGFyLT5mYW1pbHkpOwogCXNwaW5fdW5sb2NrX2JoKCZpbmZvLT5kYXRhLT5sb2NrKTsKIApAQCAtMjI2LDYgKzIyMSwxMCBAQAogCXN0cnVjdCB4dF9jb25ubGltaXRfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwogCXVuc2lnbmVkIGludCBpOwogCisJaWYgKHVubGlrZWx5KCFjb25ubGltaXRfcm5kX2luaXRlZCkpIHsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmY29ubmxpbWl0X3JuZCwgc2l6ZW9mKGNvbm5saW1pdF9ybmQpKTsKKwkJY29ubmxpbWl0X3JuZF9pbml0ZWQgPSB0cnVlOworCX0KIAlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbm5vdCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciAiCiAJCSAgICAgICAiYWRkcmVzcyBmYW1pbHkgJXVcbiIsIHBhci0+ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCmluZGV4IGRkMTZlNDAuLmQ5NTI4MDZiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CkBAIC00MCw5ICs0MSwxOSBAQAogTU9EVUxFX0FMSUFTKCJpcHRfaGFzaGxpbWl0Iik7CiBNT0RVTEVfQUxJQVMoImlwNnRfaGFzaGxpbWl0Iik7CiAKK3N0cnVjdCBoYXNobGltaXRfbmV0IHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlodGFibGVzOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqaXB0X2hhc2hsaW1pdDsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmlwNnRfaGFzaGxpbWl0OworfTsKKworc3RhdGljIGludCBoYXNobGltaXRfbmV0X2lkOworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGFzaGxpbWl0X25ldCAqaGFzaGxpbWl0X3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgaGFzaGxpbWl0X25ldF9pZCk7Cit9CisKIC8qIG5lZWQgdG8gZGVjbGFyZSB0aGlzIGF0IHRoZSB0b3AgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhhc2hsaW1pdF9wcm9jZGlyNDsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhhc2hsaW1pdF9wcm9jZGlyNjsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRsX2ZpbGVfb3BzOwogCiAvKiBoYXNoIHRhYmxlIGNyYXAgKi8KQEAgLTc5LDI3ICs5MCwyNiBAQAogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsJCS8qIGdsb2JhbCBsaXN0IG9mIGFsbCBodGFibGVzICovCi0JYXRvbWljX3QgdXNlOworCWludCB1c2U7CiAJdV9pbnQ4X3QgZmFtaWx5OworCWJvb2wgcm5kX2luaXRpYWxpemVkOwogCiAJc3RydWN0IGhhc2hsaW1pdF9jZmcxIGNmZzsJLyogY29uZmlnICovCiAKIAkvKiB1c2VkIGludGVybmFsbHkgKi8KIAlzcGlubG9ja190IGxvY2s7CQkvKiBsb2NrIGZvciBsaXN0X2hlYWQgKi8KIAl1X2ludDMyX3Qgcm5kOwkJCS8qIHJhbmRvbSBzZWVkIGZvciBoYXNoICovCi0JaW50IHJuZF9pbml0aWFsaXplZDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBudW1iZXIgZW50cmllcyBpbiB0YWJsZSAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiB0aW1lciBmb3IgZ2MgKi8KIAogCS8qIHNlcV9maWxlIHN0dWZmICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJc3RydWN0IG5ldCAqbmV0OwogCiAJc3RydWN0IGhsaXN0X2hlYWQgaGFzaFswXTsJLyogaGFzaHRhYmxlIGl0c2VsZiAqLwogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhoYXNobGltaXRfbG9jayk7CS8qIHByb3RlY3RzIGh0YWJsZXMgbGlzdCAqLwotc3RhdGljIERFRklORV9NVVRFWChobGltaXRfbXV0ZXgpOwkvKiBhZGRpdGlvbmFsIGNoZWNrZW50cnkgcHJvdGVjdGlvbiAqLwotc3RhdGljIEhMSVNUX0hFQUQoaGFzaGxpbWl0X2h0YWJsZXMpOworc3RhdGljIERFRklORV9NVVRFWChoYXNobGltaXRfbXV0ZXgpOwkvKiBwcm90ZWN0cyBodGFibGVzIGxpc3QgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaGFzaGxpbWl0X2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgZHN0X2NtcChjb25zdCBzdHJ1Y3QgZHN0aGFzaF9lbnQgKmVudCwKQEAgLTE1MCw3ICsxNjAsNyBAQAogCSAqIHRoZSBmaXJzdCBoYXNodGFibGUgZW50cnkgKi8KIAlpZiAoIWh0LT5ybmRfaW5pdGlhbGl6ZWQpIHsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgc2l6ZW9mKGh0LT5ybmQpKTsKLQkJaHQtPnJuZF9pbml0aWFsaXplZCA9IDE7CisJCWh0LT5ybmRfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCX0KIAogCWlmIChodC0+Y2ZnLm1heCAmJiBodC0+Y291bnQgPj0gaHQtPmNmZy5tYXgpIHsKQEAgLTE4NSw4ICsxOTUsOSBAQAogfQogc3RhdGljIHZvaWQgaHRhYmxlX2djKHVuc2lnbmVkIGxvbmcgaHRsb25nKTsKIAotc3RhdGljIGludCBodGFibGVfY3JlYXRlX3YwKHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqbWluZm8sIHVfaW50OF90IGZhbWlseSkKK3N0YXRpYyBpbnQgaHRhYmxlX2NyZWF0ZV92MChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqbWluZm8sIHVfaW50OF90IGZhbWlseSkKIHsKKwlzdHJ1Y3QgaGFzaGxpbWl0X25ldCAqaGFzaGxpbWl0X25ldCA9IGhhc2hsaW1pdF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CiAJdW5zaWduZWQgaW50IHNpemU7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yMzIsMzMgKzI0MywzNCBAQAogCWZvciAoaSA9IDA7IGkgPCBoaW5mby0+Y2ZnLnNpemU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZoaW5mby0+aGFzaFtpXSk7CiAKLQlhdG9taWNfc2V0KCZoaW5mby0+dXNlLCAxKTsKKwloaW5mby0+dXNlID0gMTsKIAloaW5mby0+Y291bnQgPSAwOwogCWhpbmZvLT5mYW1pbHkgPSBmYW1pbHk7Ci0JaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IDA7CisJaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IGZhbHNlOwogCXNwaW5fbG9ja19pbml0KCZoaW5mby0+bG9jayk7CiAJaGluZm8tPnBkZSA9IHByb2NfY3JlYXRlX2RhdGEobWluZm8tPm5hbWUsIDAsCiAJCShmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSA/Ci0JCWhhc2hsaW1pdF9wcm9jZGlyNCA6IGhhc2hsaW1pdF9wcm9jZGlyNiwKKwkJaGFzaGxpbWl0X25ldC0+aXB0X2hhc2hsaW1pdCA6IGhhc2hsaW1pdF9uZXQtPmlwNnRfaGFzaGxpbWl0LAogCQkmZGxfZmlsZV9vcHMsIGhpbmZvKTsKIAlpZiAoIWhpbmZvLT5wZGUpIHsKIAkJdmZyZWUoaGluZm8pOwogCQlyZXR1cm4gLTE7CiAJfQorCWhpbmZvLT5uZXQgPSBuZXQ7CiAKIAlzZXR1cF90aW1lcigmaGluZm8tPnRpbWVyLCBodGFibGVfZ2MsICh1bnNpZ25lZCBsb25nICloaW5mbyk7CiAJaGluZm8tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmdjX2ludGVydmFsKTsKIAlhZGRfdGltZXIoJmhpbmZvLT50aW1lcik7CiAKLQlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKLQlobGlzdF9hZGRfaGVhZCgmaGluZm8tPm5vZGUsICZoYXNobGltaXRfaHRhYmxlcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZCgmaGluZm8tPm5vZGUsICZoYXNobGltaXRfbmV0LT5odGFibGVzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGh0YWJsZV9jcmVhdGUoc3RydWN0IHh0X2hhc2hsaW1pdF9tdGluZm8xICptaW5mbywgdV9pbnQ4X3QgZmFtaWx5KQorc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X2hhc2hsaW1pdF9tdGluZm8xICptaW5mbywKKwkJCSB1X2ludDhfdCBmYW1pbHkpCiB7CisJc3RydWN0IGhhc2hsaW1pdF9uZXQgKmhhc2hsaW1pdF9uZXQgPSBoYXNobGltaXRfcGVybmV0KG5ldCk7CiAJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOwogCXVuc2lnbmVkIGludCBzaXplOwogCXVuc2lnbmVkIGludCBpOwpAQCAtMjkzLDI4ICszMDUsMjcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaGluZm8tPmNmZy5zaXplOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCgmaGluZm8tPmhhc2hbaV0pOwogCi0JYXRvbWljX3NldCgmaGluZm8tPnVzZSwgMSk7CisJaGluZm8tPnVzZSA9IDE7CiAJaGluZm8tPmNvdW50ID0gMDsKIAloaW5mby0+ZmFtaWx5ID0gZmFtaWx5OwotCWhpbmZvLT5ybmRfaW5pdGlhbGl6ZWQgPSAwOworCWhpbmZvLT5ybmRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAlzcGluX2xvY2tfaW5pdCgmaGluZm8tPmxvY2spOwogCiAJaGluZm8tPnBkZSA9IHByb2NfY3JlYXRlX2RhdGEobWluZm8tPm5hbWUsIDAsCiAJCShmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSA/Ci0JCWhhc2hsaW1pdF9wcm9jZGlyNCA6IGhhc2hsaW1pdF9wcm9jZGlyNiwKKwkJaGFzaGxpbWl0X25ldC0+aXB0X2hhc2hsaW1pdCA6IGhhc2hsaW1pdF9uZXQtPmlwNnRfaGFzaGxpbWl0LAogCQkmZGxfZmlsZV9vcHMsIGhpbmZvKTsKIAlpZiAoaGluZm8tPnBkZSA9PSBOVUxMKSB7CiAJCXZmcmVlKGhpbmZvKTsKIAkJcmV0dXJuIC0xOwogCX0KKwloaW5mby0+bmV0ID0gbmV0OwogCiAJc2V0dXBfdGltZXIoJmhpbmZvLT50aW1lciwgaHRhYmxlX2djLCAodW5zaWduZWQgbG9uZyloaW5mbyk7CiAJaGluZm8tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmdjX2ludGVydmFsKTsKIAlhZGRfdGltZXIoJmhpbmZvLT50aW1lcik7CiAKLQlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKLQlobGlzdF9hZGRfaGVhZCgmaGluZm8tPm5vZGUsICZoYXNobGltaXRfaHRhYmxlcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZCgmaGluZm8tPm5vZGUsICZoYXNobGltaXRfbmV0LT5odGFibGVzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzY0LDQzICszNzUsNDYgQEAKIAogc3RhdGljIHZvaWQgaHRhYmxlX2Rlc3Ryb3koc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvKQogeworCXN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfbmV0ID0gaGFzaGxpbWl0X3Blcm5ldChoaW5mby0+bmV0KTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudDsKKwogCWRlbF90aW1lcl9zeW5jKCZoaW5mby0+dGltZXIpOwogCi0JLyogcmVtb3ZlIHByb2MgZW50cnkgKi8KLQlyZW1vdmVfcHJvY19lbnRyeShoaW5mby0+cGRlLT5uYW1lLAotCQkJICBoaW5mby0+ZmFtaWx5ID09IE5GUFJPVE9fSVBWNCA/IGhhc2hsaW1pdF9wcm9jZGlyNCA6Ci0JCQkJCQkgICAgIGhhc2hsaW1pdF9wcm9jZGlyNik7CisJaWYgKGhpbmZvLT5mYW1pbHkgPT0gTkZQUk9UT19JUFY0KQorCQlwYXJlbnQgPSBoYXNobGltaXRfbmV0LT5pcHRfaGFzaGxpbWl0OworCWVsc2UKKwkJcGFyZW50ID0gaGFzaGxpbWl0X25ldC0+aXA2dF9oYXNobGltaXQ7CisJcmVtb3ZlX3Byb2NfZW50cnkoaGluZm8tPnBkZS0+bmFtZSwgcGFyZW50KTsKIAlodGFibGVfc2VsZWN0aXZlX2NsZWFudXAoaGluZm8sIHNlbGVjdF9hbGwpOwogCXZmcmVlKGhpbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGVfZmluZF9nZXQoY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkgICB1X2ludDhfdCBmYW1pbHkpCiB7CisJc3RydWN0IGhhc2hsaW1pdF9uZXQgKmhhc2hsaW1pdF9uZXQgPSBoYXNobGltaXRfcGVybmV0KG5ldCk7CiAJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKLQlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoaW5mbywgcG9zLCAmaGFzaGxpbWl0X2h0YWJsZXMsIG5vZGUpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShoaW5mbywgcG9zLCAmaGFzaGxpbWl0X25ldC0+aHRhYmxlcywgbm9kZSkgewogCQlpZiAoIXN0cmNtcChuYW1lLCBoaW5mby0+cGRlLT5uYW1lKSAmJgogCQkgICAgaGluZm8tPmZhbWlseSA9PSBmYW1pbHkpIHsKLQkJCWF0b21pY19pbmMoJmhpbmZvLT51c2UpOwotCQkJc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwkJCWhpbmZvLT51c2UrKzsKIAkJCXJldHVybiBoaW5mbzsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBodGFibGVfcHV0KHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbykKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaGluZm8tPnVzZSkpIHsKLQkJc3Bpbl9sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CisJbXV0ZXhfbG9jaygmaGFzaGxpbWl0X211dGV4KTsKKwlpZiAoLS1oaW5mby0+dXNlID09IDApIHsKIAkJaGxpc3RfZGVsKCZoaW5mby0+bm9kZSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CiAJCWh0YWJsZV9kZXN0cm95KGhpbmZvKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZoYXNobGltaXRfbXV0ZXgpOwogfQogCiAvKiBUaGUgYWxnb3JpdGhtIHVzZWQgaXMgdGhlIFNpbXBsZSBUb2tlbiBCdWNrZXQgRmlsdGVyIChUQkYpCkBAIC02NjUsNiArNjc5LDcgQEAKIAogc3RhdGljIGJvb2wgaGFzaGxpbWl0X210X2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHBhci0+bmV0OwogCXN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOwogCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwpAQCAtNjg3LDI1ICs3MDIsMjAgQEAKIAlpZiAoci0+bmFtZVtzaXplb2Yoci0+bmFtZSkgLSAxXSAhPSAnXDAnKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBUaGlzIGlzIHRoZSBiZXN0IHdlJ3ZlIGdvdDogV2UgY2Fubm90IHJlbGVhc2UgYW5kIHJlLWdyYWIgbG9jaywKLQkgKiBzaW5jZSBjaGVja2VudHJ5KCkgaXMgY2FsbGVkIGJlZm9yZSB4X3RhYmxlcy5jIGdyYWJzIHh0X211dGV4LgotCSAqIFdlIGFsc28gY2Fubm90IGdyYWIgdGhlIGhhc2h0YWJsZSBzcGlubG9jaywgc2luY2UgaHRhYmxlX2NyZWF0ZSB3aWxsCi0JICogY2FsbCB2bWFsbG9jLCBhbmQgdGhhdCBjYW4gc2xlZXAuICBBbmQgd2UgY2Fubm90IGp1c3QgcmUtc2VhcmNoCi0JICogdGhlIGxpc3Qgb2YgaHRhYmxlJ3MgaW4gaHRhYmxlX2NyZWF0ZSgpLCBzaW5jZSB0aGVuIHdlIHdvdWxkCi0JICogY3JlYXRlIGR1cGxpY2F0ZSBwcm9jIGZpbGVzLiAtSFcgKi8KLQltdXRleF9sb2NrKCZobGltaXRfbXV0ZXgpOwotCXItPmhpbmZvID0gaHRhYmxlX2ZpbmRfZ2V0KHItPm5hbWUsIHBhci0+bWF0Y2gtPmZhbWlseSk7Ci0JaWYgKCFyLT5oaW5mbyAmJiBodGFibGVfY3JlYXRlX3YwKHIsIHBhci0+bWF0Y2gtPmZhbWlseSkgIT0gMCkgewotCQltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaGFzaGxpbWl0X211dGV4KTsKKwlyLT5oaW5mbyA9IGh0YWJsZV9maW5kX2dldChuZXQsIHItPm5hbWUsIHBhci0+bWF0Y2gtPmZhbWlseSk7CisJaWYgKCFyLT5oaW5mbyAmJiBodGFibGVfY3JlYXRlX3YwKG5ldCwgciwgcGFyLT5tYXRjaC0+ZmFtaWx5KSAhPSAwKSB7CisJCW11dGV4X3VubG9jaygmaGFzaGxpbWl0X211dGV4KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoYXNobGltaXRfbXV0ZXgpOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGhhc2hsaW1pdF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBwYXItPm5ldDsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAogCS8qIENoZWNrIGZvciBvdmVyZmxvdy4gKi8KQEAgLTcyOCwxOSArNzM4LDEzIEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogVGhpcyBpcyB0aGUgYmVzdCB3ZSd2ZSBnb3Q6IFdlIGNhbm5vdCByZWxlYXNlIGFuZCByZS1ncmFiIGxvY2ssCi0JICogc2luY2UgY2hlY2tlbnRyeSgpIGlzIGNhbGxlZCBiZWZvcmUgeF90YWJsZXMuYyBncmFicyB4dF9tdXRleC4KLQkgKiBXZSBhbHNvIGNhbm5vdCBncmFiIHRoZSBoYXNodGFibGUgc3BpbmxvY2ssIHNpbmNlIGh0YWJsZV9jcmVhdGUgd2lsbAotCSAqIGNhbGwgdm1hbGxvYywgYW5kIHRoYXQgY2FuIHNsZWVwLiAgQW5kIHdlIGNhbm5vdCBqdXN0IHJlLXNlYXJjaAotCSAqIHRoZSBsaXN0IG9mIGh0YWJsZSdzIGluIGh0YWJsZV9jcmVhdGUoKSwgc2luY2UgdGhlbiB3ZSB3b3VsZAotCSAqIGNyZWF0ZSBkdXBsaWNhdGUgcHJvYyBmaWxlcy4gLUhXICovCi0JbXV0ZXhfbG9jaygmaGxpbWl0X211dGV4KTsKLQlpbmZvLT5oaW5mbyA9IGh0YWJsZV9maW5kX2dldChpbmZvLT5uYW1lLCBwYXItPm1hdGNoLT5mYW1pbHkpOwotCWlmICghaW5mby0+aGluZm8gJiYgaHRhYmxlX2NyZWF0ZShpbmZvLCBwYXItPm1hdGNoLT5mYW1pbHkpICE9IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZobGltaXRfbXV0ZXgpOworCW11dGV4X2xvY2soJmhhc2hsaW1pdF9tdXRleCk7CisJaW5mby0+aGluZm8gPSBodGFibGVfZmluZF9nZXQobmV0LCBpbmZvLT5uYW1lLCBwYXItPm1hdGNoLT5mYW1pbHkpOworCWlmICghaW5mby0+aGluZm8gJiYgaHRhYmxlX2NyZWF0ZShuZXQsIGluZm8sIHBhci0+bWF0Y2gtPmZhbWlseSkgIT0gMCkgeworCQltdXRleF91bmxvY2soJmhhc2hsaW1pdF9tdXRleCk7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZobGltaXRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaGFzaGxpbWl0X211dGV4KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzY3LDcgKzc3MSw3IEBACiAJY29tcGF0X3VwdHJfdCBtYXN0ZXI7CiB9OwogCi1zdGF0aWMgdm9pZCBoYXNobGltaXRfbXRfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyB2b2lkIGhhc2hsaW1pdF9tdF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWludCBvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3h0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyk7CiAKQEAgLTc3NSw3ICs3NzksNyBAQAogCW1lbXNldChkc3QgKyBvZmYsIDAsIHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2hhc2hsaW1pdF9pbmZvKSAtIG9mZik7CiB9CiAKLXN0YXRpYyBpbnQgaGFzaGxpbWl0X210X2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyBpbnQgaGFzaGxpbWl0X210X2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKIAlpbnQgb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF94dF9oYXNobGltaXRfaW5mbywgaGluZm8pOwogCkBAIC04NDEsOCArODQ1LDcgQEAKIHN0YXRpYyB2b2lkICpkbF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKGh0YWJsZS0+bG9jaykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcy0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgKmJ1Y2tldDsKIAogCXNwaW5fbG9ja19iaCgmaHRhYmxlLT5sb2NrKTsKQEAgLTg1OSw4ICs4NjIsNyBAQAogCiBzdGF0aWMgdm9pZCAqZGxfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcy0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgKmJ1Y2tldCA9ICh1bnNpZ25lZCBpbnQgKil2OwogCiAJKnBvcyA9ICsrKCpidWNrZXQpOwpAQCAtODc0LDggKzg3Niw3IEBACiBzdGF0aWMgdm9pZCBkbF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiAJX19yZWxlYXNlcyhodGFibGUtPmxvY2spCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBwZGUtPmRhdGE7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHMtPnByaXZhdGU7CiAJdW5zaWduZWQgaW50ICpidWNrZXQgPSAodW5zaWduZWQgaW50ICopdjsKIAogCWtmcmVlKGJ1Y2tldCk7CkBAIC05MTcsOCArOTE4LDcgQEAKIAogc3RhdGljIGludCBkbF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBwZGUtPmRhdGE7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHMtPnByaXZhdGU7CiAJdW5zaWduZWQgaW50ICpidWNrZXQgPSAodW5zaWduZWQgaW50ICopdjsKIAlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmVudDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzZi0+cHJpdmF0ZSA9IFBERShpbm9kZSk7CisJCXNmLT5wcml2YXRlID0gUERFKGlub2RlKS0+ZGF0YTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk1NywxMCArOTU3LDYxIEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQogfTsKIAorc3RhdGljIGludCBfX25ldF9pbml0IGhhc2hsaW1pdF9wcm9jX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgaGFzaGxpbWl0X25ldCAqaGFzaGxpbWl0X25ldCA9IGhhc2hsaW1pdF9wZXJuZXQobmV0KTsKKworCWhhc2hsaW1pdF9uZXQtPmlwdF9oYXNobGltaXQgPSBwcm9jX21rZGlyKCJpcHRfaGFzaGxpbWl0IiwgbmV0LT5wcm9jX25ldCk7CisJaWYgKCFoYXNobGltaXRfbmV0LT5pcHRfaGFzaGxpbWl0KQorCQlyZXR1cm4gLUVOT01FTTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCisJaGFzaGxpbWl0X25ldC0+aXA2dF9oYXNobGltaXQgPSBwcm9jX21rZGlyKCJpcDZ0X2hhc2hsaW1pdCIsIG5ldC0+cHJvY19uZXQpOworCWlmICghaGFzaGxpbWl0X25ldC0+aXA2dF9oYXNobGltaXQpIHsKKwkJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwdF9oYXNobGltaXQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaGFzaGxpbWl0X3Byb2NfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcHRfaGFzaGxpbWl0Iik7CisjaWYgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTKSB8fCBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVNfTU9EVUxFKQorCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcDZ0X2hhc2hsaW1pdCIpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBoYXNobGltaXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfbmV0ID0gaGFzaGxpbWl0X3Blcm5ldChuZXQpOworCisJSU5JVF9ITElTVF9IRUFEKCZoYXNobGltaXRfbmV0LT5odGFibGVzKTsKKwlyZXR1cm4gaGFzaGxpbWl0X3Byb2NfbmV0X2luaXQobmV0KTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBoYXNobGltaXRfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfbmV0ID0gaGFzaGxpbWl0X3Blcm5ldChuZXQpOworCisJQlVHX09OKCFobGlzdF9lbXB0eSgmaGFzaGxpbWl0X25ldC0+aHRhYmxlcykpOworCWhhc2hsaW1pdF9wcm9jX25ldF9leGl0KG5ldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaGFzaGxpbWl0X25ldF9vcHMgPSB7CisJLmluaXQJPSBoYXNobGltaXRfbmV0X2luaXQsCisJLmV4aXQJPSBoYXNobGltaXRfbmV0X2V4aXQsCisJLmlkCT0gJmhhc2hsaW1pdF9uZXRfaWQsCisJLnNpemUJPSBzaXplb2Yoc3RydWN0IGhhc2hsaW1pdF9uZXQpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaGFzaGxpbWl0X210X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaGFzaGxpbWl0X25ldF9vcHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IHh0X3JlZ2lzdGVyX21hdGNoZXMoaGFzaGxpbWl0X210X3JlZywKIAkgICAgICBBUlJBWV9TSVpFKGhhc2hsaW1pdF9tdF9yZWcpKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTk3NCw0MSArMTAyNSwyMSBAQAogCQlwcmludGsoS0VSTl9FUlIgInh0X2hhc2hsaW1pdDogdW5hYmxlIHRvIGNyZWF0ZSBzbGFiIGNhY2hlXG4iKTsKIAkJZ290byBlcnIyOwogCX0KLQloYXNobGltaXRfcHJvY2RpcjQgPSBwcm9jX21rZGlyKCJpcHRfaGFzaGxpbWl0IiwgaW5pdF9uZXQucHJvY19uZXQpOwotCWlmICghaGFzaGxpbWl0X3Byb2NkaXI0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieHRfaGFzaGxpbWl0OiB1bmFibGUgdG8gY3JlYXRlIHByb2MgZGlyICIKLQkJCQkiZW50cnlcbiIpOwotCQlnb3RvIGVycjM7Ci0JfQotCWVyciA9IDA7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTKSB8fCBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVNfTU9EVUxFKQotCWhhc2hsaW1pdF9wcm9jZGlyNiA9IHByb2NfbWtkaXIoImlwNnRfaGFzaGxpbWl0IiwgaW5pdF9uZXQucHJvY19uZXQpOwotCWlmICghaGFzaGxpbWl0X3Byb2NkaXI2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieHRfaGFzaGxpbWl0OiB1bmFibGUgdG8gY3JlYXRlIHByb2MgZGlyICIKLQkJCQkiZW50cnlcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCX0KLSNlbmRpZgotCWlmICghZXJyKQotCQlyZXR1cm4gMDsKLQlyZW1vdmVfcHJvY19lbnRyeSgiaXB0X2hhc2hsaW1pdCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLWVycjM6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KGhhc2hsaW1pdF9jYWNoZXApOworCXJldHVybiAwOworCiBlcnIyOgogCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhoYXNobGltaXRfbXRfcmVnLCBBUlJBWV9TSVpFKGhhc2hsaW1pdF9tdF9yZWcpKTsKIGVycjE6CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZoYXNobGltaXRfbmV0X29wcyk7CiAJcmV0dXJuIGVycjsKIAogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGFzaGxpbWl0X210X2V4aXQodm9pZCkKIHsKLQlyZW1vdmVfcHJvY19lbnRyeSgiaXB0X2hhc2hsaW1pdCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwNnRfaGFzaGxpbWl0IiwgaW5pdF9uZXQucHJvY19uZXQpOwotI2VuZGlmCiAJa21lbV9jYWNoZV9kZXN0cm95KGhhc2hsaW1pdF9jYWNoZXApOwogCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhoYXNobGltaXRfbXRfcmVnLCBBUlJBWV9TSVpFKGhhc2hsaW1pdF9tdF9yZWcpKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmhhc2hsaW1pdF9uZXRfb3BzKTsKIH0KIAogbW9kdWxlX2luaXQoaGFzaGxpbWl0X210X2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IDI3NzNiZTYuLmEwY2E1MzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAvKiBUbyBrZWVwIHRoZSBmdWxsICJwcmV2IiB0aW1lc3RhbXAsIHRoZSB1cHBlciAzMiBiaXRzIGFyZSBzdG9yZWQgaW4gdGhlCiAgKiBtYXN0ZXIgcG9pbnRlciwgd2hpY2ggZG9lcyBub3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuICovCi1zdGF0aWMgdm9pZCBsaW1pdF9tdF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIHZvaWQgbGltaXRfbXRfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKIAljb25zdCBzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvICpjbSA9IHNyYzsKIAlzdHJ1Y3QgeHRfcmF0ZWluZm8gbSA9IHsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOwogfQogCi1zdGF0aWMgaW50IGxpbWl0X210X2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyBpbnQgbGltaXRfbXRfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWNvbnN0IHN0cnVjdCB4dF9yYXRlaW5mbyAqbSA9IHNyYzsKIAlzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvIGNtID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9vc2YuYyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKaW5kZXggNGQxYTQxYi4uNDE2OWUyMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9vc2YuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJCWlmIChpbmZvLT5mbGFncyAmIFhUX09TRl9MT0cpCiAJCQkJbmZfbG9nX3BhY2tldChwLT5mYW1pbHksIHAtPmhvb2tudW0sIHNrYiwKIAkJCQkJcC0+aW4sIHAtPm91dCwgTlVMTCwKLQkJCQkJIiVzIFslczolc10gOiAlcGk0OiVkIC0+ICVwaTQ6JWQgaG9wcz0lZFxuIiwKKwkJCQkJIiVzIFslczolc10gOiAlcEk0OiVkIC0+ICVwSTQ6JWQgaG9wcz0lZFxuIiwKIAkJCQkJZi0+Z2VucmUsIGYtPnZlcnNpb24sIGYtPnN1YnR5cGUsCiAJCQkJCSZpcC0+c2FkZHIsIG50b2hzKHRjcC0+c291cmNlKSwKIAkJCQkJJmlwLT5kYWRkciwgbnRvaHModGNwLT5kZXN0KSwKQEAgLTM0OSw3ICszNDksNyBAQAogCiAJaWYgKCFmY291bnQgJiYgKGluZm8tPmZsYWdzICYgWFRfT1NGX0xPRykpCiAJCW5mX2xvZ19wYWNrZXQocC0+ZmFtaWx5LCBwLT5ob29rbnVtLCBza2IsIHAtPmluLCBwLT5vdXQsIE5VTEwsCi0JCQkiUmVtb3RlIE9TIGlzIG5vdCBrbm93bjogJXBpNDoldSAtPiAlcGk0OiV1XG4iLAorCQkJIlJlbW90ZSBPUyBpcyBub3Qga25vd246ICVwSTQ6JXUgLT4gJXBJNDoldVxuIiwKIAkJCQkmaXAtPnNhZGRyLCBudG9ocyh0Y3AtPnNvdXJjZSksCiAJCQkJJmlwLT5kYWRkciwgbnRvaHModGNwLT5kZXN0KSk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCmluZGV4IGZjNzBhNDkuLjcwNzNkYmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcmVjZW50Lmg+CkBAIC01Miw3ICs1Myw3IEBACiBtb2R1bGVfcGFyYW0oaXBfbGlzdF91aWQsIHVpbnQsIDA0MDApOwogbW9kdWxlX3BhcmFtKGlwX2xpc3RfZ2lkLCB1aW50LCAwNDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF90b3QsICJudW1iZXIgb2YgSVBzIHRvIHJlbWVtYmVyIHBlciBsaXN0Iik7Ci1NT0RVTEVfUEFSTV9ERVNDKGlwX3BrdF9saXN0X3RvdCwgIm51bWJlciBvZiBwYWNrZXRzIHBlciBJUCB0byByZW1lbWJlciAobWF4LiAyNTUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwX3BrdF9saXN0X3RvdCwgIm51bWJlciBvZiBwYWNrZXRzIHBlciBJUCBhZGRyZXNzIHRvIHJlbWVtYmVyIChtYXguIDI1NSkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9oYXNoX3NpemUsICJzaXplIG9mIGhhc2ggdGFibGUgdXNlZCB0byBsb29rIHVwIElQcyIpOwogTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X3Blcm1zLCAicGVybWlzc2lvbnMgb24gL3Byb2MvbmV0L3h0X3JlY2VudC8qIGZpbGVzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlwX2xpc3RfdWlkLCJvd25lciBvZiAvcHJvYy9uZXQveHRfcmVjZW50LyogZmlsZXMiKTsKQEAgLTc4LDM3ICs3OSw0MCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJaXBoYXNoWzBdOwogfTsKIAotc3RhdGljIExJU1RfSEVBRCh0YWJsZXMpOworc3RydWN0IHJlY2VudF9uZXQgeworCXN0cnVjdCBsaXN0X2hlYWQJdGFibGVzOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSp4dF9yZWNlbnQ7CisjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmlwdF9yZWNlbnQ7CisjZW5kaWYKKyNlbmRpZgorfTsKKworc3RhdGljIGludCByZWNlbnRfbmV0X2lkOworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcmVjZW50X25ldF9pZCk7Cit9CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVjZW50X2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChyZWNlbnRfbXV0ZXgpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19vbGRfZGlyOwotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZWNlbnRfcHJvY19kaXI7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWNlbnRfb2xkX2ZvcHMsIHJlY2VudF9tdF9mb3BzOwogI2VuZGlmCiAKLXN0YXRpYyB1X2ludDMyX3QgaGFzaF9ybmQ7Ci1zdGF0aWMgYm9vbCBoYXNoX3JuZF9pbml0dGVkOworc3RhdGljIHVfaW50MzJfdCBoYXNoX3JuZCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGJvb2wgaGFzaF9ybmRfaW5pdGVkIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjZW50X2VudHJ5X2hhc2g0KGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlY2VudF9lbnRyeV9oYXNoNChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCiB7Ci0JaWYgKCFoYXNoX3JuZF9pbml0dGVkKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmhhc2hfcm5kLCBzaXplb2YoaGFzaF9ybmQpKTsKLQkJaGFzaF9ybmRfaW5pdHRlZCA9IHRydWU7Ci0JfQogCXJldHVybiBqaGFzaF8xd29yZCgoX19mb3JjZSB1MzIpYWRkci0+aXAsIGhhc2hfcm5kKSAmCiAJICAgICAgIChpcF9saXN0X2hhc2hfc2l6ZSAtIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2VudF9lbnRyeV9oYXNoNihjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWNlbnRfZW50cnlfaGFzaDYoY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQogewotCWlmICghaGFzaF9ybmRfaW5pdHRlZCkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZoYXNoX3JuZCwgc2l6ZW9mKGhhc2hfcm5kKSk7Ci0JCWhhc2hfcm5kX2luaXR0ZWQgPSB0cnVlOwotCX0KIAlyZXR1cm4gamhhc2gyKCh1MzIgKilhZGRyLT5pcDYsIEFSUkFZX1NJWkUoYWRkci0+aXA2KSwgaGFzaF9ybmQpICYKIAkgICAgICAgKGlwX2xpc3RfaGFzaF9zaXplIC0gMSk7CiB9CkBAIC0xNzMsMTggKzE3NywxOSBAQAogCiBzdGF0aWMgdm9pZCByZWNlbnRfZW50cnlfdXBkYXRlKHN0cnVjdCByZWNlbnRfdGFibGUgKnQsIHN0cnVjdCByZWNlbnRfZW50cnkgKmUpCiB7CisJZS0+aW5kZXggJT0gaXBfcGt0X2xpc3RfdG90OwogCWUtPnN0YW1wc1tlLT5pbmRleCsrXSA9IGppZmZpZXM7CiAJaWYgKGUtPmluZGV4ID4gZS0+bnN0YW1wcykKIAkJZS0+bnN0YW1wcyA9IGUtPmluZGV4OwotCWUtPmluZGV4ICU9IGlwX3BrdF9saXN0X3RvdDsKIAlsaXN0X21vdmVfdGFpbCgmZS0+bHJ1X2xpc3QsICZ0LT5scnVfbGlzdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVjZW50X3RhYmxlICpyZWNlbnRfdGFibGVfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IHJlY2VudF90YWJsZSAqcmVjZW50X3RhYmxlX2xvb2t1cChzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnRhYmxlcywgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZyZWNlbnRfbmV0LT50YWJsZXMsIGxpc3QpCiAJCWlmICghc3RyY21wKHQtPm5hbWUsIG5hbWUpKQogCQkJcmV0dXJuIHQ7CiAJcmV0dXJuIE5VTEw7CkBAIC0yMDMsNiArMjA4LDggQEAKIHN0YXRpYyBib29sCiByZWNlbnRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChwYXItPmluID8gcGFyLT5pbiA6IHBhci0+b3V0KTsKKwlzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCA9IHJlY2VudF9wZXJuZXQobmV0KTsKIAljb25zdCBzdHJ1Y3QgeHRfcmVjZW50X210aW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwogCXN0cnVjdCByZWNlbnRfdGFibGUgKnQ7CiAJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKQEAgLTIzNSw3ICsyNDIsNyBAQAogCQl0dGwrKzsKIAogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwotCXQgPSByZWNlbnRfdGFibGVfbG9va3VwKGluZm8tPm5hbWUpOworCXQgPSByZWNlbnRfdGFibGVfbG9va3VwKHJlY2VudF9uZXQsIGluZm8tPm5hbWUpOwogCWUgPSByZWNlbnRfZW50cnlfbG9va3VwKHQsICZhZGRyLCBwYXItPm1hdGNoLT5mYW1pbHksCiAJCQkJKGluZm8tPmNoZWNrX3NldCAmIFhUX1JFQ0VOVF9UVEwpID8gdHRsIDogMCk7CiAJaWYgKGUgPT0gTlVMTCkgewpAQCAtMjYwLDcgKzI2Nyw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBlLT5uc3RhbXBzOyBpKyspIHsKIAkJCWlmIChpbmZvLT5zZWNvbmRzICYmIHRpbWVfYWZ0ZXIodGltZSwgZS0+c3RhbXBzW2ldKSkKIAkJCQljb250aW51ZTsKLQkJCWlmICgrK2hpdHMgPj0gaW5mby0+aGl0X2NvdW50KSB7CisJCQlpZiAoaW5mby0+aGl0X2NvdW50ICYmICsraGl0cyA+PSBpbmZvLT5oaXRfY291bnQpIHsKIAkJCQlyZXQgPSAhcmV0OwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjc5LDYgKzI4Niw3IEBACiAKIHN0YXRpYyBib29sIHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKKwlzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCA9IHJlY2VudF9wZXJuZXQocGFyLT5uZXQpOwogCWNvbnN0IHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMjg3LDYgKzI5NSwxMCBAQAogCXVuc2lnbmVkIGk7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAorCWlmICh1bmxpa2VseSghaGFzaF9ybmRfaW5pdGVkKSkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZoYXNoX3JuZCwgc2l6ZW9mKGhhc2hfcm5kKSk7CisJCWhhc2hfcm5kX2luaXRlZCA9IHRydWU7CisJfQogCWlmIChod2VpZ2h0OChpbmZvLT5jaGVja19zZXQgJgogCQkgICAgIChYVF9SRUNFTlRfU0VUIHwgWFRfUkVDRU5UX1JFTU9WRSB8CiAJCSAgICAgIFhUX1JFQ0VOVF9DSEVDSyB8IFhUX1JFQ0VOVF9VUERBVEUpKSAhPSAxKQpAQCAtMjk0LDE0ICszMDYsMTggQEAKIAlpZiAoKGluZm8tPmNoZWNrX3NldCAmIChYVF9SRUNFTlRfU0VUIHwgWFRfUkVDRU5UX1JFTU9WRSkpICYmCiAJICAgIChpbmZvLT5zZWNvbmRzIHx8IGluZm8tPmhpdF9jb3VudCkpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoaW5mby0+aGl0X2NvdW50ID4gaXBfcGt0X2xpc3RfdG90KQorCWlmIChpbmZvLT5oaXRfY291bnQgPiBpcF9wa3RfbGlzdF90b3QpIHsKKwkJcHJfaW5mbyhLQlVJTERfTU9ETkFNRSAiOiBoaXRjb3VudCAoJXUpIGlzIGxhcmdlciB0aGFuICIKKwkJCSJwYWNrZXRzIHRvIGJlIHJlbWVtYmVyZWQgKCV1KVxuIiwKKwkJCWluZm8tPmhpdF9jb3VudCwgaXBfcGt0X2xpc3RfdG90KTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAlpZiAoaW5mby0+bmFtZVswXSA9PSAnXDAnIHx8CiAJICAgIHN0cm5sZW4oaW5mby0+bmFtZSwgWFRfUkVDRU5UX05BTUVfTEVOKSA9PSBYVF9SRUNFTlRfTkFNRV9MRU4pCiAJCXJldHVybiBmYWxzZTsKIAogCW11dGV4X2xvY2soJnJlY2VudF9tdXRleCk7Ci0JdCA9IHJlY2VudF90YWJsZV9sb29rdXAoaW5mby0+bmFtZSk7CisJdCA9IHJlY2VudF90YWJsZV9sb29rdXAocmVjZW50X25ldCwgaW5mby0+bmFtZSk7CiAJaWYgKHQgIT0gTlVMTCkgewogCQl0LT5yZWZjbnQrKzsKIAkJcmV0ID0gdHJ1ZTsKQEAgLTMxOCw3ICszMzQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpcF9saXN0X2hhc2hfc2l6ZTsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmdC0+aXBoYXNoW2ldKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAorCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X25ldC0+eHRfcmVjZW50LAogCQkgICZyZWNlbnRfbXRfZm9wcywgdCk7CiAJaWYgKHBkZSA9PSBOVUxMKSB7CiAJCWtmcmVlKHQpOwpAQCAtMzI3LDEwICszNDMsMTAgQEAKIAlwZGUtPnVpZCA9IGlwX2xpc3RfdWlkOwogCXBkZS0+Z2lkID0gaXBfbGlzdF9naWQ7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQKLQlwZGUgPSBwcm9jX2NyZWF0ZV9kYXRhKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHByb2Nfb2xkX2RpciwKKwlwZGUgPSBwcm9jX2NyZWF0ZV9kYXRhKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHJlY2VudF9uZXQtPmlwdF9yZWNlbnQsCiAJCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMsIHQpOwogCWlmIChwZGUgPT0gTlVMTCkgewotCQlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCBwcm9jX29sZF9kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCByZWNlbnRfbmV0LT54dF9yZWNlbnQpOwogCQlrZnJlZSh0KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzM5LDcgKzM1NSw3IEBACiAjZW5kaWYKICNlbmRpZgogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZ0YWJsZXMpOworCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZyZWNlbnRfbmV0LT50YWJsZXMpOwogCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7CiAJcmV0ID0gdHJ1ZTsKIG91dDoKQEAgLTM0OSwyMCArMzY1LDIxIEBACiAKIHN0YXRpYyB2b2lkIHJlY2VudF9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKIHsKKwlzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCA9IHJlY2VudF9wZXJuZXQocGFyLT5uZXQpOwogCWNvbnN0IHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKIAogCW11dGV4X2xvY2soJnJlY2VudF9tdXRleCk7Ci0JdCA9IHJlY2VudF90YWJsZV9sb29rdXAoaW5mby0+bmFtZSk7CisJdCA9IHJlY2VudF90YWJsZV9sb29rdXAocmVjZW50X25ldCwgaW5mby0+bmFtZSk7CiAJaWYgKC0tdC0+cmVmY250ID09IDApIHsKIAkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CiAJCWxpc3RfZGVsKCZ0LT5saXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2Nfb2xkX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHJlY2VudF9uZXQtPmlwdF9yZWNlbnQpOwogI2VuZGlmCi0JCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHJlY2VudF9wcm9jX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHJlY2VudF9uZXQtPnh0X3JlY2VudCk7CiAjZW5kaWYKIAkJcmVjZW50X3RhYmxlX2ZsdXNoKHQpOwogCQlrZnJlZSh0KTsKQEAgLTYxMSw4ICs2MjgsNjUgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIH07CisKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCByZWNlbnRfcHJvY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHJlY2VudF9uZXQgKnJlY2VudF9uZXQgPSByZWNlbnRfcGVybmV0KG5ldCk7CisKKwlyZWNlbnRfbmV0LT54dF9yZWNlbnQgPSBwcm9jX21rZGlyKCJ4dF9yZWNlbnQiLCBuZXQtPnByb2NfbmV0KTsKKwlpZiAoIXJlY2VudF9uZXQtPnh0X3JlY2VudCkKKwkJcmV0dXJuIC1FTk9NRU07CisjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQKKwlyZWNlbnRfbmV0LT5pcHRfcmVjZW50ID0gcHJvY19ta2RpcigiaXB0X3JlY2VudCIsIG5ldC0+cHJvY19uZXQpOworCWlmICghcmVjZW50X25ldC0+aXB0X3JlY2VudCkgeworCQlwcm9jX25ldF9yZW1vdmUobmV0LCAieHRfcmVjZW50Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHJlY2VudF9wcm9jX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAorCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcHRfcmVjZW50Iik7CisjZW5kaWYKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAieHRfcmVjZW50Iik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcmVjZW50X3Byb2NfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVjZW50X3Byb2NfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworfQogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCByZWNlbnRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0ID0gcmVjZW50X3Blcm5ldChuZXQpOworCisJSU5JVF9MSVNUX0hFQUQoJnJlY2VudF9uZXQtPnRhYmxlcyk7CisJcmV0dXJuIHJlY2VudF9wcm9jX25ldF9pbml0KG5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcmVjZW50X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCA9IHJlY2VudF9wZXJuZXQobmV0KTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmcmVjZW50X25ldC0+dGFibGVzKSk7CisJcmVjZW50X3Byb2NfbmV0X2V4aXQobmV0KTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByZWNlbnRfbmV0X29wcyA9IHsKKwkuaW5pdAk9IHJlY2VudF9uZXRfaW5pdCwKKwkuZXhpdAk9IHJlY2VudF9uZXRfZXhpdCwKKwkuaWQJPSAmcmVjZW50X25ldF9pZCwKKwkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcmVjZW50X25ldCksCit9OworCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHJlY2VudF9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewogCXsKIAkJLm5hbWUgICAgICAgPSAicmVjZW50IiwKQEAgLTY0NCwzOSArNzE4LDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlwX2xpc3RfaGFzaF9zaXplID0gMSA8PCBmbHMoaXBfbGlzdF90b3QpOwogCi0JZXJyID0geHRfcmVnaXN0ZXJfbWF0Y2hlcyhyZWNlbnRfbXRfcmVnLCBBUlJBWV9TSVpFKHJlY2VudF9tdF9yZWcpKTsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnJlY2VudF9uZXRfb3BzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCXJlY2VudF9wcm9jX2RpciA9IHByb2NfbWtkaXIoInh0X3JlY2VudCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQlpZiAocmVjZW50X3Byb2NfZGlyID09IE5VTEwpIHsKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKHJlY2VudF9tdF9yZWcsIEFSUkFZX1NJWkUocmVjZW50X210X3JlZykpOwotCQllcnIgPSAtRU5PTUVNOwotCX0KLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXByb2Nfb2xkX2RpciA9IHByb2NfbWtkaXIoImlwdF9yZWNlbnQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKHByb2Nfb2xkX2RpciA9PSBOVUxMKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJ4dF9yZWNlbnQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhyZWNlbnRfbXRfcmVnLCBBUlJBWV9TSVpFKHJlY2VudF9tdF9yZWcpKTsKLQkJZXJyID0gLUVOT01FTTsKLQl9Ci0jZW5kaWYKLSNlbmRpZgorCWVyciA9IHh0X3JlZ2lzdGVyX21hdGNoZXMocmVjZW50X210X3JlZywgQVJSQVlfU0laRShyZWNlbnRfbXRfcmVnKSk7CisJaWYgKGVycikKKwkJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZyZWNlbnRfbmV0X29wcyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJlY2VudF9tdF9leGl0KHZvaWQpCiB7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZ0YWJsZXMpKTsKIAl4dF91bnJlZ2lzdGVyX21hdGNoZXMocmVjZW50X210X3JlZywgQVJSQVlfU0laRShyZWNlbnRfbXRfcmVnKSk7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAotCXJlbW92ZV9wcm9jX2VudHJ5KCJpcHRfcmVjZW50IiwgaW5pdF9uZXQucHJvY19uZXQpOwotI2VuZGlmCi0JcmVtb3ZlX3Byb2NfZW50cnkoInh0X3JlY2VudCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcmVjZW50X25ldF9vcHMpOwogfQogCiBtb2R1bGVfaW5pdChyZWNlbnRfbXRfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlcGxkYXRhLmggYi9uZXQvbmV0ZmlsdGVyL3h0X3JlcGxkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmZTRlNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVwbGRhdGEuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogVG9kYXkncyBoYWNrOiBxdWFudHVtIHR1bm5lbGluZyBpbiBzdHJ1Y3RzCisgKgorICogJ2VudHJpZXMnIGFuZCAndGVybScgYXJlIG5ldmVyIGFueXdoZXJlIHJlZmVyZW5jZWQgYnkgd29yZCBpbiBjb2RlLiBJbiBmYWN0LAorICogdGhleSBzZXJ2ZSBhcyB0aGUgaGFuZ2luZy1vZmYgZGF0YSBhY2Nlc3NlZCB0aHJvdWdoIHJlcGwuZGF0YVtdLgorICovCisKKyNkZWZpbmUgeHRfYWxsb2NfaW5pdGlhbF90YWJsZSh0eXBlLCB0eXAyKSAoeyBcCisJdW5zaWduZWQgaW50IGhvb2tfbWFzayA9IGluZm8tPnZhbGlkX2hvb2tzOyBcCisJdW5zaWduZWQgaW50IG5ob29rcyA9IGh3ZWlnaHQzMihob29rX21hc2spOyBcCisJdW5zaWduZWQgaW50IGJ5dGVzID0gMCwgaG9va251bSA9IDAsIGkgPSAwOyBcCisJc3RydWN0IHsgXAorCQlzdHJ1Y3QgdHlwZSMjX3JlcGxhY2UgcmVwbDsgXAorCQlzdHJ1Y3QgdHlwZSMjX3N0YW5kYXJkIGVudHJpZXNbbmhvb2tzXTsgXAorCQlzdHJ1Y3QgdHlwZSMjX2Vycm9yIHRlcm07IFwKKwl9ICp0YmwgPSBremFsbG9jKHNpemVvZigqdGJsKSwgR0ZQX0tFUk5FTCk7IFwKKwlpZiAodGJsID09IE5VTEwpIFwKKwkJcmV0dXJuIE5VTEw7IFwKKwlzdHJuY3B5KHRibC0+cmVwbC5uYW1lLCBpbmZvLT5uYW1lLCBzaXplb2YodGJsLT5yZXBsLm5hbWUpKTsgXAorCXRibC0+dGVybSA9IChzdHJ1Y3QgdHlwZSMjX2Vycm9yKXR5cDIjI19FUlJPUl9JTklUOyAgXAorCXRibC0+cmVwbC52YWxpZF9ob29rcyA9IGhvb2tfbWFzazsgXAorCXRibC0+cmVwbC5udW1fZW50cmllcyA9IG5ob29rcyArIDE7IFwKKwl0YmwtPnJlcGwuc2l6ZSA9IG5ob29rcyAqIHNpemVvZihzdHJ1Y3QgdHlwZSMjX3N0YW5kYXJkKSArIFwKKwkgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdHlwZSMjX2Vycm9yKTsgXAorCWZvciAoOyBob29rX21hc2sgIT0gMDsgaG9va19tYXNrID4+PSAxLCArK2hvb2tudW0pIHsgXAorCQlpZiAoIShob29rX21hc2sgJiAxKSkgXAorCQkJY29udGludWU7IFwKKwkJdGJsLT5yZXBsLmhvb2tfZW50cnlbaG9va251bV0gPSBieXRlczsgXAorCQl0YmwtPnJlcGwudW5kZXJmbG93W2hvb2tudW1dICA9IGJ5dGVzOyBcCisJCXRibC0+ZW50cmllc1tpKytdID0gKHN0cnVjdCB0eXBlIyNfc3RhbmRhcmQpIFwKKwkJCXR5cDIjI19TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCk7IFwKKwkJYnl0ZXMgKz0gc2l6ZW9mKHN0cnVjdCB0eXBlIyNfc3RhbmRhcmQpOyBcCisJfSBcCisJdGJsOyBcCit9KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKaW5kZXggYzVkOWY5Ny4uMGJmZWFhYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwpAQCAtMzE1LDcgKzMxNSw2IEBACiAJCWVudHJ5X29sZCA9IG5ldGxibF9kb21oc2hfc2VhcmNoX2RlZihlbnRyeS0+ZG9tYWluKTsKIAlpZiAoZW50cnlfb2xkID09IE5VTEwpIHsKIAkJZW50cnktPnZhbGlkID0gMTsKLQkJSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CiAKIAkJaWYgKGVudHJ5LT5kb21haW4gIT0gTlVMTCkgewogCQkJdTMyIGJrdCA9IG5ldGxibF9kb21oc2hfaGFzaChlbnRyeS0+ZG9tYWluKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwppbmRleCA5OGVkMjJlLi44NTJkOWQ3IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCkBAIC0zMjcsNyArMzI3LDYgQEAKIAllbnRyeS0+bGlzdC5hZGRyID0gYWRkci0+c19hZGRyICYgbWFzay0+c19hZGRyOwogCWVudHJ5LT5saXN0Lm1hc2sgPSBtYXNrLT5zX2FkZHI7CiAJZW50cnktPmxpc3QudmFsaWQgPSAxOwotCUlOSVRfUkNVX0hFQUQoJmVudHJ5LT5yY3UpOwogCWVudHJ5LT5zZWNpZCA9IHNlY2lkOwogCiAJc3Bpbl9sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwpAQCAtMzczLDcgKzM3Miw2IEBACiAJZW50cnktPmxpc3QuYWRkci5zNl9hZGRyMzJbM10gJj0gbWFzay0+czZfYWRkcjMyWzNdOwogCWlwdjZfYWRkcl9jb3B5KCZlbnRyeS0+bGlzdC5tYXNrLCBtYXNrKTsKIAllbnRyeS0+bGlzdC52YWxpZCA9IDE7Ci0JSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CiAJZW50cnktPnNlY2lkID0gc2VjaWQ7CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7CkBAIC00MTAsNyArNDA4LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmaWZhY2UtPmFkZHI0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpZmFjZS0+YWRkcjZfbGlzdCk7CiAJaWZhY2UtPnZhbGlkID0gMTsKLQlJTklUX1JDVV9IRUFEKCZpZmFjZS0+cmN1KTsKIAogCXNwaW5fbG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKIAlpZiAoaWZpbmRleCA+IDApIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCA0YzU5NzJiLi4zMjBkMDQyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC0xOTc4LDEyICsxOTc4LDEyIEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsCiAJCQkgInNrICAgICAgIEV0aCBQaWQgICAgR3JvdXBzICAgIgotCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2NrcyAgICAgRHJvcHNcbiIpOworCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2NrcyAgICAgRHJvcHMgICAgIElub2RlXG4iKTsKIAllbHNlIHsKIAkJc3RydWN0IHNvY2sgKnMgPSB2OwogCQlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2socyk7CiAKLQkJc2VxX3ByaW50ZihzZXEsICIlcCAlLTNkICUtNmQgJTA4eCAlLThkICUtOGQgJXAgJS04ZCAlLThkXG4iLAorCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGQgJS04bHVcbiIsCiAJCQkgICBzLAogCQkJICAgcy0+c2tfcHJvdG9jb2wsCiAJCQkgICBubGstPnBpZCwKQEAgLTE5OTIsNyArMTk5Miw4IEBACiAJCQkgICBza193bWVtX2FsbG9jX2dldChzKSwKIAkJCSAgIG5say0+Y2IsCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcmVmY250KSwKLQkJCSAgIGF0b21pY19yZWFkKCZzLT5za19kcm9wcykKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19kcm9wcyksCisJCQkgICBzb2NrX2lfaW5vKHMpCiAJCQkpOwogCiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCBkMDdlY2RhLi5hNGI2ZTE0IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtNjgxLDkgKzY4MSw3IEBACiAJaW50IGNoYWluc190b19za2lwID0gY2ItPmFyZ3NbMF07CiAJaW50IGZhbXNfdG9fc2tpcCA9IGNiLT5hcmdzWzFdOwogCi0JZm9yIChpID0gMDsgaSA8IEdFTkxfRkFNX1RBQl9TSVpFOyBpKyspIHsKLQkJaWYgKGkgPCBjaGFpbnNfdG9fc2tpcCkKLQkJCWNvbnRpbnVlOworCWZvciAoaSA9IGNoYWluc190b19za2lwOyBpIDwgR0VOTF9GQU1fVEFCX1NJWkU7IGkrKykgewogCQluID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShydCwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KSB7CiAJCQlpZiAoIXJ0LT5uZXRuc29rICYmICFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggNzE2MDRjNi4uYTI0OTEyNyAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC0xMjY3LDI4ICsxMjY3LDEzIEBACiAKIHN0YXRpYyB2b2lkICpucl9pbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3Qgc29jayAqczsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgaSA9IDE7Ci0KIAlzcGluX2xvY2tfYmgoJm5yX2xpc3RfbG9jayk7Ci0JaWYgKCpwb3MgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQotCXNrX2Zvcl9lYWNoKHMsIG5vZGUsICZucl9saXN0KSB7Ci0JCWlmIChpID09ICpwb3MpCi0JCQlyZXR1cm4gczsKLQkJKytpOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWQoJm5yX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqbnJfaW5mb19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkrKypwb3M7Ci0KLQlyZXR1cm4gKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSA/IHNrX2hlYWQoJm5yX2xpc3QpCi0JCTogc2tfbmV4dCgoc3RydWN0IHNvY2sgKil2KTsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJm5yX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG5yX2luZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTEyOTgsNyArMTI4Myw3IEBACiAKIHN0YXRpYyBpbnQgbnJfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0cnVjdCBzb2NrICpzID0gdjsKKwlzdHJ1Y3Qgc29jayAqcyA9IHNrX2VudHJ5KHYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5yX3NvY2sgKm5yOwogCWNvbnN0IGNoYXIgKmRldm5hbWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX3JvdXRlLmMgYi9uZXQvbmV0cm9tL25yX3JvdXRlLmMKaW5kZXggZTJlMmQzMy4uNWNjNjQ4MCAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9yb3V0ZS5jCisrKyBiL25ldC9uZXRyb20vbnJfcm91dGUuYwpAQCAtODYzLDMzICs4NjMsMTMgQEAKIAogc3RhdGljIHZvaWQgKm5yX25vZGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBucl9ub2RlICpucl9ub2RlOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpID0gMTsKLQogCXNwaW5fbG9ja19iaCgmbnJfbm9kZV9saXN0X2xvY2spOwotCWlmICgqcG9zID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0KLQlucl9ub2RlX2Zvcl9lYWNoKG5yX25vZGUsIG5vZGUsICZucl9ub2RlX2xpc3QpIHsKLQkJaWYgKGkgPT0gKnBvcykKLQkJCXJldHVybiBucl9ub2RlOwotCQkrK2k7Ci0JfQotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZucl9ub2RlX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqbnJfbm9kZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQkrKypwb3M7Ci0KLQlub2RlID0gKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQk/IG5yX25vZGVfbGlzdC5maXJzdAotCQk6ICgoc3RydWN0IG5yX25vZGUgKil2KS0+bm9kZV9ub2RlLm5leHQ7Ci0KLQlyZXR1cm4gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IG5yX25vZGUsIG5vZGVfbm9kZSk7CisJcmV0dXJuIHNlcV9obGlzdF9uZXh0KHYsICZucl9ub2RlX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG5yX25vZGVfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTkwNiw3ICs4ODYsOSBAQAogCQlzZXFfcHV0cyhzZXEsCiAJCQkgImNhbGxzaWduICBtbmVtb25pYyB3IG4gcXVhbCBvYnMgbmVpZ2ggcXVhbCBvYnMgbmVpZ2ggcXVhbCBvYnMgbmVpZ2hcbiIpOwogCWVsc2UgewotCQlzdHJ1Y3QgbnJfbm9kZSAqbnJfbm9kZSA9IHY7CisJCXN0cnVjdCBucl9ub2RlICpucl9ub2RlID0gaGxpc3RfZW50cnkodiwgc3RydWN0IG5yX25vZGUsCisJCQkJCQkgICAgICBub2RlX25vZGUpOworCiAJCW5yX25vZGVfbG9jayhucl9ub2RlKTsKIAkJc2VxX3ByaW50ZihzZXEsICIlLTlzICUtN3MgICVkICVkIiwKIAkJCWF4MmFzYyhidWYsICZucl9ub2RlLT5jYWxsc2lnbiksCkBAIC05NDksMzEgKzkzMSwxMyBAQAogCiBzdGF0aWMgdm9pZCAqbnJfbmVpZ2hfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBucl9uZWlnaCAqbnJfbmVpZ2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGkgPSAxOwotCiAJc3Bpbl9sb2NrX2JoKCZucl9uZWlnaF9saXN0X2xvY2spOwotCWlmICgqcG9zID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0KLQlucl9uZWlnaF9mb3JfZWFjaChucl9uZWlnaCwgbm9kZSwgJm5yX25laWdoX2xpc3QpIHsKLQkJaWYgKGkgPT0gKnBvcykKLQkJCXJldHVybiBucl9uZWlnaDsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZucl9uZWlnaF9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKm5yX25laWdoX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCSsrKnBvczsKLQotCW5vZGUgPSAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCT8gbnJfbmVpZ2hfbGlzdC5maXJzdAotCQk6ICgoc3RydWN0IG5yX25laWdoICopdiktPm5laWdoX25vZGUubmV4dDsKLQotCXJldHVybiBobGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgbnJfbmVpZ2gsIG5laWdoX25vZGUpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmbnJfbmVpZ2hfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgbnJfbmVpZ2hfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTk4OSw4ICs5NTMsOSBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3B1dHMoc2VxLCAiYWRkciAgY2FsbHNpZ24gIGRldiAgcXVhbCBsb2NrIGNvdW50IGZhaWxlZCBkaWdpcGVhdGVyc1xuIik7CiAJZWxzZSB7Ci0JCXN0cnVjdCBucl9uZWlnaCAqbnJfbmVpZ2ggPSB2OworCQlzdHJ1Y3QgbnJfbmVpZ2ggKm5yX25laWdoOwogCisJCW5yX25laWdoID0gaGxpc3RfZW50cnkodiwgc3RydWN0IG5yX25laWdoLCBuZWlnaF9ub2RlKTsKIAkJc2VxX3ByaW50ZihzZXEsICIlMDVkICUtOXMgJS00cyAgJTNkICAgICVkICAgJTNkICAgICUzZCIsCiAJCQlucl9uZWlnaC0+bnVtYmVyLAogCQkJYXgyYXNjKGJ1ZiwgJm5yX25laWdoLT5jYWxsc2lnbiksCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L0tjb25maWcgYi9uZXQvcGFja2V0L0tjb25maWcKaW5kZXggMzRmZjkzZmYuLjAwNjBlM2IgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvS2NvbmZpZworKysgYi9uZXQvcGFja2V0L0tjb25maWcKQEAgLTE0LDEzICsxNCwzIEBACiAJICBiZSBjYWxsZWQgYWZfcGFja2V0LgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgotCi1jb25maWcgUEFDS0VUX01NQVAKLQlib29sICJQYWNrZXQgc29ja2V0OiBtbWFwcGVkIElPIgotCWRlcGVuZHMgb24gUEFDS0VUCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBQYWNrZXQgcHJvdG9jb2wgZHJpdmVyIHdpbGwgdXNlIGFuIElPCi0JICBtZWNoYW5pc20gdGhhdCByZXN1bHRzIGluIGZhc3RlciBjb21tdW5pY2F0aW9uLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCBmMTI2ZDE4Li4wMzFhNWU2IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogCiAjaWZkZWYgQ09ORklHX0lORVQKICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KQEAgLTE1Niw3ICsxNTcsNiBAQAogCXVuc2lnbmVkIGNoYXIJbXJfYWRkcmVzc1tNQVhfQUREUl9MRU5dOwogfTsKIAotI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogc3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdHBhY2tldF9yZXEgKnJlcSwKIAkJaW50IGNsb3NpbmcsIGludCB0eF9yaW5nKTsKIApAQCAtMTc2LDcgKzE3Niw2IEBACiAKIHN0cnVjdCBwYWNrZXRfc29jazsKIHN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKTsKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBwYWNrZXRfZmx1c2hfbWNsaXN0KHN0cnVjdCBzb2NrICpzayk7CiAKQEAgLTE4NCwyNiArMTgzLDIzIEBACiAJLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgcGFja2V0X3NvY2sgKi8KIAlzdHJ1Y3Qgc29jawkJc2s7CiAJc3RydWN0IHRwYWNrZXRfc3RhdHMJc3RhdHM7Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJc3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlcglyeF9yaW5nOwogCXN0cnVjdCBwYWNrZXRfcmluZ19idWZmZXIJdHhfcmluZzsKIAlpbnQJCQljb3B5X3RocmVzaDsKLSNlbmRpZgogCXNwaW5sb2NrX3QJCWJpbmRfbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCXBnX3ZlY19sb2NrOwogCXVuc2lnbmVkIGludAkJcnVubmluZzoxLAkvKiBwcm90X2hvb2sgaXMgYXR0YWNoZWQqLwogCQkJCWF1eGRhdGE6MSwKLQkJCQlvcmlnZGV2OjE7CisJCQkJb3JpZ2RldjoxLAorCQkJCWhhc192bmV0X2hkcjoxOwogCWludAkJCWlmaW5kZXg7CS8qIGJvdW5kIGRldmljZQkJKi8KIAlfX2JlMTYJCQludW07CiAJc3RydWN0IHBhY2tldF9tY2xpc3QJKm1jbGlzdDsKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIAlhdG9taWNfdAkJbWFwcGVkOwogCWVudW0gdHBhY2tldF92ZXJzaW9ucwl0cF92ZXJzaW9uOwogCXVuc2lnbmVkIGludAkJdHBfaGRybGVuOwogCXVuc2lnbmVkIGludAkJdHBfcmVzZXJ2ZTsKIAl1bnNpZ25lZCBpbnQJCXRwX2xvc3M6MTsKLSNlbmRpZgogCXN0cnVjdCBwYWNrZXRfdHlwZQlwcm90X2hvb2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiAKQEAgLTIxNyw4ICsyMTMsNiBAQAogCiAjZGVmaW5lIFBBQ0tFVF9TS0JfQ0IoX19za2IpCSgoc3RydWN0IHBhY2tldF9za2JfY2IgKikoKF9fc2tiKS0+Y2IpKQogCi0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCi0KIHN0YXRpYyB2b2lkIF9fcGFja2V0X3NldF9zdGF0dXMoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsIGludCBzdGF0dXMpCiB7CiAJdW5pb24gewpAQCAtMzEzLDggKzMwNyw2IEBACiAJYnVmZi0+aGVhZCA9IGJ1ZmYtPmhlYWQgIT0gYnVmZi0+ZnJhbWVfbWF4ID8gYnVmZi0+aGVhZCsxIDogMDsKIH0KIAotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhY2tldF9zb2NrICpwa3Rfc2soc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiAoc3RydWN0IHBhY2tldF9zb2NrICopc2s7CkBAIC01MDgsNyArNTAwLDcgQEAKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyICE9IE5VTEwpCiAJCXJlcyA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLCBmaWx0ZXItPmxlbik7CiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CkBAIC02MzgsNyArNjMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewpAQCAtMTA1NCw3ICsxMDQ1LDMwIEBACiAJbXV0ZXhfdW5sb2NrKCZwby0+cGdfdmVjX2xvY2spOwogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcGFja2V0X2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsCisJCQkJCSAgICAgICBzaXplX3QgcmVzZXJ2ZSwgc2l6ZV90IGxlbiwKKwkJCQkJICAgICAgIHNpemVfdCBsaW5lYXIsIGludCBub2Jsb2NrLAorCQkJCQkgICAgICAgaW50ICplcnIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIFVuZGVyIGEgcGFnZT8gIERvbid0IGJvdGhlciB3aXRoIHBhZ2VkIHNrYi4gKi8KKwlpZiAocHJlcGFkICsgbGVuIDwgUEFHRV9TSVpFIHx8ICFsaW5lYXIpCisJCWxpbmVhciA9IGxlbjsKKworCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9wc2tiKHNrLCBwcmVwYWQgKyBsaW5lYXIsIGxlbiAtIGxpbmVhciwgbm9ibG9jaywKKwkJCQkgICBlcnIpOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9yZXNlcnZlKHNrYiwgcmVzZXJ2ZSk7CisJc2tiX3B1dChza2IsIGxpbmVhcik7CisJc2tiLT5kYXRhX2xlbiA9IGxlbiAtIGxpbmVhcjsKKwlza2ItPmxlbiArPSBsZW4gLSBsaW5lYXI7CisKKwlyZXR1cm4gc2tiOworfQogCiBzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQpAQCAtMTA2NiwxNCArMTA4MCwxNyBAQAogCV9fYmUxNiBwcm90bzsKIAl1bnNpZ25lZCBjaGFyICphZGRyOwogCWludCBpZmluZGV4LCBlcnIsIHJlc2VydmUgPSAwOworCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkciA9IHsgMCB9OworCWludCBvZmZzZXQgPSAwOworCWludCB2bmV0X2hkcl9sZW47CisJc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7CisJdW5zaWduZWQgc2hvcnQgZ3NvX3R5cGUgPSAwOwogCiAJLyoKIAkgKglHZXQgYW5kIHZlcmlmeSB0aGUgYWRkcmVzcy4KIAkgKi8KIAogCWlmIChzYWRkciA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwotCiAJCWlmaW5kZXgJPSBwby0+aWZpbmRleDsKIAkJcHJvdG8JPSBwby0+bnVtOwogCQlhZGRyCT0gTlVMTDsKQEAgLTExMDAsMjUgKzExMTcsNzQgQEAKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJaWYgKHBvLT5oYXNfdm5ldF9oZHIpIHsKKwkJdm5ldF9oZHJfbGVuID0gc2l6ZW9mKHZuZXRfaGRyKTsKKworCQllcnIgPSAtRUlOVkFMOworCQlpZiAobGVuIDwgdm5ldF9oZHJfbGVuKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWxlbiAtPSB2bmV0X2hkcl9sZW47CisKKwkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYygodm9pZCAqKSZ2bmV0X2hkciwgbXNnLT5tc2dfaW92LAorCQkJCSAgICAgICB2bmV0X2hkcl9sZW4pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQlpZiAoKHZuZXRfaGRyLmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19DU1VNKSAmJgorCQkgICAgKHZuZXRfaGRyLmNzdW1fc3RhcnQgKyB2bmV0X2hkci5jc3VtX29mZnNldCArIDIgPgorCQkgICAgICB2bmV0X2hkci5oZHJfbGVuKSkKKwkJCXZuZXRfaGRyLmhkcl9sZW4gPSB2bmV0X2hkci5jc3VtX3N0YXJ0ICsKKwkJCQkJCSB2bmV0X2hkci5jc3VtX29mZnNldCArIDI7CisKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKHZuZXRfaGRyLmhkcl9sZW4gPiBsZW4pCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJaWYgKHZuZXRfaGRyLmdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19OT05FKSB7CisJCQlzd2l0Y2ggKHZuZXRfaGRyLmdzb190eXBlICYgflZJUlRJT19ORVRfSERSX0dTT19FQ04pIHsKKwkJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OgorCQkJCWdzb190eXBlID0gU0tCX0dTT19UQ1BWNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1RDUFY2OgorCQkJCWdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1VEUDoKKwkJCQlnc29fdHlwZSA9IFNLQl9HU09fVURQOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisKKwkJCWlmICh2bmV0X2hkci5nc29fdHlwZSAmIFZJUlRJT19ORVRfSERSX0dTT19FQ04pCisJCQkJZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BfRUNOOworCisJCQlpZiAodm5ldF9oZHIuZ3NvX3NpemUgPT0gMCkKKwkJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJfQorCX0KKwogCWVyciA9IC1FTVNHU0laRTsKLQlpZiAobGVuID4gZGV2LT5tdHUrcmVzZXJ2ZSkKKwlpZiAoIWdzb190eXBlICYmIChsZW4gPiBkZXYtPm10dStyZXNlcnZlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0Jc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgbGVuICsgTExfQUxMT0NBVEVEX1NQQUNFKGRldiksCi0JCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOworCWVyciA9IC1FTk9CVUZTOworCXNrYiA9IHBhY2tldF9hbGxvY19za2Ioc2ssIExMX0FMTE9DQVRFRF9TUEFDRShkZXYpLAorCQkJICAgICAgIExMX1JFU0VSVkVEX1NQQUNFKGRldiksIGxlbiwgdm5ldF9oZHIuaGRyX2xlbiwKKwkJCSAgICAgICBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlza2JfcmVzZXJ2ZShza2IsIExMX1JFU0VSVkVEX1NQQUNFKGRldikpOwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCByZXNlcnZlKTsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSAmJgotCSAgICBkZXZfaGFyZF9oZWFkZXIoc2tiLCBkZXYsIG50b2hzKHByb3RvKSwgYWRkciwgTlVMTCwgbGVuKSA8IDApCisJICAgIChvZmZzZXQgPSBkZXZfaGFyZF9oZWFkZXIoc2tiLCBkZXYsIG50b2hzKHByb3RvKSwgYWRkciwgTlVMTCwgbGVuKSkgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCiAJLyogUmV0dXJucyAtRUZBVUxUIG9uIGVycm9yICovCi0JZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOworCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faW92ZWMoc2tiLCBvZmZzZXQsIG1zZy0+bXNnX2lvdiwgMCwgbGVuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwogCkBAIC0xMTI3LDYgKzExOTMsMjUgQEAKIAlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OwogCXNrYi0+bWFyayA9IHNrLT5za19tYXJrOwogCisJaWYgKHBvLT5oYXNfdm5ldF9oZHIpIHsKKwkJaWYgKHZuZXRfaGRyLmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19DU1VNKSB7CisJCQlpZiAoIXNrYl9wYXJ0aWFsX2NzdW1fc2V0KHNrYiwgdm5ldF9oZHIuY3N1bV9zdGFydCwKKwkJCQkJCSAgdm5ldF9oZHIuY3N1bV9vZmZzZXQpKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQl9CisKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHZuZXRfaGRyLmdzb19zaXplOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gZ3NvX3R5cGU7CisKKwkJLyogSGVhZGVyIG11c3QgYmUgY2hlY2tlZCwgYW5kIGdzb19zZWdzIGNvbXB1dGVkLiAqLworCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSAwOworCisJCWxlbiArPSB2bmV0X2hkcl9sZW47CisJfQorCiAJLyoKIAkgKglOb3cgc2VuZCBpdAogCSAqLwpAQCAtMTE1MSwxMyArMTIzNiwxMSBAQAogc3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTsKIAlpZiAocG8tPnR4X3JpbmcucGdfdmVjKQogCQlyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7CiAJZWxzZQotI2VuZGlmCiAJCXJldHVybiBwYWNrZXRfc25kKHNvY2ssIG1zZywgbGVuKTsKIH0KIApAQCAtMTE3MSw5ICsxMjU0LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvOwogCXN0cnVjdCBuZXQgKm5ldDsKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIAlzdHJ1Y3QgdHBhY2tldF9yZXEgcmVxOwotI2VuZGlmCiAKIAlpZiAoIXNrKQogCQlyZXR1cm4gMDsKQEAgLTExODEsMjggKzEyNjIsMjUgQEAKIAluZXQgPSBzb2NrX25ldChzayk7CiAJcG8gPSBwa3Rfc2soc2spOwogCi0Jd3JpdGVfbG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOwotCXNrX2RlbF9ub2RlX2luaXQoc2spOworCXNwaW5fbG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOworCXNrX2RlbF9ub2RlX2luaXRfcmN1KHNrKTsKIAlzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stPnNrX3Byb3QsIC0xKTsKLQl3cml0ZV91bmxvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOwogCi0JLyoKLQkgKglVbmhvb2sgcGFja2V0IHJlY2VpdmUgaGFuZGxlci4KLQkgKi8KLQorCXNwaW5fbG9jaygmcG8tPmJpbmRfbG9jayk7CiAJaWYgKHBvLT5ydW5uaW5nKSB7CiAJCS8qCi0JCSAqCVJlbW92ZSB0aGUgcHJvdG9jb2wgaG9vaworCQkgKiBSZW1vdmUgZnJvbSBwcm90b2NvbCB0YWJsZQogCQkgKi8KLQkJZGV2X3JlbW92ZV9wYWNrKCZwby0+cHJvdF9ob29rKTsKIAkJcG8tPnJ1bm5pbmcgPSAwOwogCQlwby0+bnVtID0gMDsKKwkJX19kZXZfcmVtb3ZlX3BhY2soJnBvLT5wcm90X2hvb2spOwogCQlfX3NvY2tfcHV0KHNrKTsKIAl9CisJc3Bpbl91bmxvY2soJnBvLT5iaW5kX2xvY2spOwogCiAJcGFja2V0X2ZsdXNoX21jbGlzdChzayk7CiAKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwogCiAJaWYgKHBvLT5yeF9yaW5nLnBnX3ZlYykKQEAgLTEyMTAsMTIgKzEyODgsMTEgQEAKIAogCWlmIChwby0+dHhfcmluZy5wZ192ZWMpCiAJCXBhY2tldF9zZXRfcmluZyhzaywgJnJlcSwgMSwgMSk7Ci0jZW5kaWYKIAorCXN5bmNocm9uaXplX25ldCgpOwogCS8qCiAJICoJTm93IHRoZSBzb2NrZXQgaXMgZGVhZC4gTm8gbW9yZSBpbnB1dCB3aWxsIGFwcGVhci4KIAkgKi8KLQogCXNvY2tfb3JwaGFuKHNrKTsKIAlzb2NrLT5zayA9IE5VTEw7CiAKQEAgLTEzOTksMTAgKzE0NzYsMTEgQEAKIAkJcG8tPnJ1bm5pbmcgPSAxOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKLQlza19hZGRfbm9kZShzaywgJm5ldC0+cGFja2V0LnNrbGlzdCk7CisJc3Bpbl9sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisJc2tfYWRkX25vZGVfcmN1KHNrLCAmbmV0LT5wYWNrZXQuc2tsaXN0KTsKIAlzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgJnBhY2tldF9wcm90bywgMSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKKwogCXJldHVybiAwOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xNDIwLDYgKzE0OTgsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGNvcGllZCwgZXJyOwogCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2xsOworCWludCB2bmV0X2hkcl9sZW4gPSAwOwogCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoZmxhZ3MgJiB+KE1TR19QRUVLfE1TR19ET05UV0FJVHxNU0dfVFJVTkN8TVNHX0NNU0dfQ09NUEFUKSkKQEAgLTE0NTEsNiArMTUzMCw0OCBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKKwlpZiAocGt0X3NrKHNrKS0+aGFzX3ZuZXRfaGRyKSB7CisJCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciB2bmV0X2hkciA9IHsgMCB9OworCisJCWVyciA9IC1FSU5WQUw7CisJCXZuZXRfaGRyX2xlbiA9IHNpemVvZih2bmV0X2hkcik7CisJCWlmICgobGVuIC09IHZuZXRfaGRyX2xlbikgPCAwKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CisJCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKKworCQkJLyogVGhpcyBpcyBhIGhpbnQgYXMgdG8gaG93IG11Y2ggc2hvdWxkIGJlIGxpbmVhci4gKi8KKwkJCXZuZXRfaGRyLmhkcl9sZW4gPSBza2JfaGVhZGxlbihza2IpOworCQkJdm5ldF9oZHIuZ3NvX3NpemUgPSBzaW5mby0+Z3NvX3NpemU7CisJCQlpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNCkKKwkJCQl2bmV0X2hkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNDsKKwkJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCisJCQkJdm5ldF9oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUCkKKwkJCQl2bmV0X2hkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19VRFA7CisJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX0ZDT0UpCisJCQkJZ290byBvdXRfZnJlZTsKKwkJCWVsc2UKKwkJCQlCVUcoKTsKKwkJCWlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUF9FQ04pCisJCQkJdm5ldF9oZHIuZ3NvX3R5cGUgfD0gVklSVElPX05FVF9IRFJfR1NPX0VDTjsKKwkJfSBlbHNlCisJCQl2bmV0X2hkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19OT05FOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQl2bmV0X2hkci5mbGFncyA9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTTsKKwkJCXZuZXRfaGRyLmNzdW1fc3RhcnQgPSBza2ItPmNzdW1fc3RhcnQgLQorCQkJCQkJCXNrYl9oZWFkcm9vbShza2IpOworCQkJdm5ldF9oZHIuY3N1bV9vZmZzZXQgPSBza2ItPmNzdW1fb2Zmc2V0OworCQl9IC8qIGVsc2UgZXZlcnl0aGluZyBpcyB6ZXJvICovCisKKwkJZXJyID0gbWVtY3B5X3RvaW92ZWMobXNnLT5tc2dfaW92LCAodm9pZCAqKSZ2bmV0X2hkciwKKwkJCQkgICAgIHZuZXRfaGRyX2xlbik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfZnJlZTsKKwl9CisKIAkvKgogCSAqCUlmIHRoZSBhZGRyZXNzIGxlbmd0aCBmaWVsZCBpcyB0aGVyZSB0byBiZSBmaWxsZWQgaW4sIHdlIGZpbGwKIAkgKglpdCBpbiBub3cuCkBAIC0xNTAyLDcgKzE2MjMsNyBAQAogCSAqCUZyZWUgb3IgcmV0dXJuIHRoZSBidWZmZXIgYXMgYXBwcm9wcmlhdGUuIEFnYWluIHRoaXMKIAkgKgloaWRlcyBhbGwgdGhlIHJhY2VzIGFuZCByZS1lbnRyYW5jeSBpc3N1ZXMgZnJvbSB1cy4KIAkgKi8KLQllcnIgPSAoZmxhZ3MmTVNHX1RSVU5DKSA/IHNrYi0+bGVuIDogY29waWVkOworCWVyciA9IHZuZXRfaGRyX2xlbiArICgoZmxhZ3MmTVNHX1RSVU5DKSA/IHNrYi0+bGVuIDogY29waWVkKTsKIAogb3V0X2ZyZWU6CiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CkBAIC0xNjEzLDcgKzE3MzQsNyBAQAogCQlnb3RvIGRvbmU7CiAKIAllcnIgPSAtRUlOVkFMOwotCWlmIChtcmVxLT5tcl9hbGVuID4gZGV2LT5hZGRyX2xlbikKKwlpZiAobXJlcS0+bXJfYWxlbiAhPSBkZXYtPmFkZHJfbGVuKQogCQlnb3RvIGRvbmU7CiAKIAllcnIgPSAtRU5PQlVGUzsKQEAgLTE3MzIsNyArMTg1Myw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJY2FzZSBQQUNLRVRfUlhfUklORzoKIAljYXNlIFBBQ0tFVF9UWF9SSU5HOgogCXsKQEAgLTE3NDAsNiArMTg2MCw4IEBACiAKIAkJaWYgKG9wdGxlbiA8IHNpemVvZihyZXEpKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwa3Rfc2soc2spLT5oYXNfdm5ldF9oZHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIG9wdHZhbCwgc2l6ZW9mKHJlcSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiBwYWNrZXRfc2V0X3Jpbmcoc2ssICZyZXEsIDAsIG9wdG5hbWUgPT0gUEFDS0VUX1RYX1JJTkcpOwpAQCAtMTgwMSw3ICsxOTIzLDYgQEAKIAkJcG8tPnRwX2xvc3MgPSAhIXZhbDsKIAkJcmV0dXJuIDA7CiAJfQotI2VuZGlmCiAJY2FzZSBQQUNLRVRfQVVYREFUQToKIAl7CiAJCWludCB2YWw7CkBAIC0xODI2LDYgKzE5NDcsMjIgQEAKIAkJcG8tPm9yaWdkZXYgPSAhIXZhbDsKIAkJcmV0dXJuIDA7CiAJfQorCWNhc2UgUEFDS0VUX1ZORVRfSERSOgorCXsKKwkJaW50IHZhbDsKKworCQlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1JBVykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAocG8tPnJ4X3JpbmcucGdfdmVjIHx8IHBvLT50eF9yaW5nLnBnX3ZlYykKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChvcHRsZW4gPCBzaXplb2YodmFsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlwby0+aGFzX3ZuZXRfaGRyID0gISF2YWw7CisJCXJldHVybiAwOworCX0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE4NzYsNyArMjAxMywxMyBAQAogCiAJCWRhdGEgPSAmdmFsOwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKKwljYXNlIFBBQ0tFVF9WTkVUX0hEUjoKKwkJaWYgKGxlbiA+IHNpemVvZihpbnQpKQorCQkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IHBvLT5oYXNfdm5ldF9oZHI7CisKKwkJZGF0YSA9ICZ2YWw7CisJCWJyZWFrOwogCWNhc2UgUEFDS0VUX1ZFUlNJT046CiAJCWlmIChsZW4gPiBzaXplb2YoaW50KSkKIAkJCWxlbiA9IHNpemVvZihpbnQpOwpAQCAtMTkxMiw3ICsyMDU1LDYgQEAKIAkJdmFsID0gcG8tPnRwX2xvc3M7CiAJCWRhdGEgPSAmdmFsOwogCQlicmVhazsKLSNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTkzMiw4ICsyMDc0LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKLQlyZWFkX2xvY2soJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJm5ldC0+cGFja2V0LnNrbGlzdCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlza19mb3JfZWFjaF9yY3Uoc2ssIG5vZGUsICZuZXQtPnBhY2tldC5za2xpc3QpIHsKIAkJc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7CiAKIAkJc3dpdGNoIChtc2cpIHsKQEAgLTE5NjEsMTggKzIxMDMsMTkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5FVERFVl9VUDoKLQkJCXNwaW5fbG9jaygmcG8tPmJpbmRfbG9jayk7Ci0JCQlpZiAoZGV2LT5pZmluZGV4ID09IHBvLT5pZmluZGV4ICYmIHBvLT5udW0gJiYKLQkJCSAgICAhcG8tPnJ1bm5pbmcpIHsKLQkJCQlkZXZfYWRkX3BhY2soJnBvLT5wcm90X2hvb2spOwotCQkJCXNvY2tfaG9sZChzayk7Ci0JCQkJcG8tPnJ1bm5pbmcgPSAxOworCQkJaWYgKGRldi0+aWZpbmRleCA9PSBwby0+aWZpbmRleCkgeworCQkJCXNwaW5fbG9jaygmcG8tPmJpbmRfbG9jayk7CisJCQkJaWYgKHBvLT5udW0gJiYgIXBvLT5ydW5uaW5nKSB7CisJCQkJCWRldl9hZGRfcGFjaygmcG8tPnByb3RfaG9vayk7CisJCQkJCXNvY2tfaG9sZChzayk7CisJCQkJCXBvLT5ydW5uaW5nID0gMTsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2soJnBvLT5iaW5kX2xvY2spOwogCQkJfQotCQkJc3Bpbl91bmxvY2soJnBvLT5iaW5kX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTIwMzIsMTEgKzIxNzUsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZuZGVmIENPTkZJR19QQUNLRVRfTU1BUAotI2RlZmluZSBwYWNrZXRfbW1hcCBzb2NrX25vX21tYXAKLSNkZWZpbmUgcGFja2V0X3BvbGwgZGF0YWdyYW1fcG9sbAotI2Vsc2UKLQogc3RhdGljIHVuc2lnbmVkIGludCBwYWNrZXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQlwb2xsX3RhYmxlICp3YWl0KQogewpAQCAtMjMxOCw4ICsyNDU2LDYgQEAKIAltdXRleF91bmxvY2soJnBvLT5wZ192ZWNfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KLSNlbmRpZgotCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHsKIAkuZmFtaWx5ID0JUEZfUEFDS0VULApAQCAtMjM3NCw0MCArMjUxMCwyNiBAQAogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpwYWNrZXRfc2VxX2lkeChzdHJ1Y3QgbmV0ICpuZXQsIGxvZmZfdCBvZmYpCi17Ci0Jc3RydWN0IHNvY2sgKnM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQlza19mb3JfZWFjaChzLCBub2RlLCAmbmV0LT5wYWNrZXQuc2tsaXN0KSB7Ci0JCWlmICghb2ZmLS0pCi0JCQlyZXR1cm4gczsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19CiAKIHN0YXRpYyB2b2lkICpwYWNrZXRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKHNlcV9maWxlX25ldChzZXEpLT5wYWNrZXQuc2tsaXN0X2xvY2spCisJX19hY3F1aXJlcyhSQ1UpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7Ci0JcmVhZF9sb2NrKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7Ci0JcmV0dXJuICpwb3MgPyBwYWNrZXRfc2VxX2lkeChuZXQsICpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1KCZuZXQtPnBhY2tldC5za2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqcGFja2V0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKLQkrKypwb3M7Ci0JcmV0dXJuICAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCT8gc2tfaGVhZCgmbmV0LT5wYWNrZXQuc2tsaXN0KQotCQk6IHNrX25leHQoKHN0cnVjdCBzb2NrICopdikgOworCXJldHVybiBzZXFfaGxpc3RfbmV4dF9yY3UodiwgJm5ldC0+cGFja2V0LnNrbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgcGFja2V0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMoc2VxX2ZpbGVfbmV0KHNlcSktPnBhY2tldC5za2xpc3RfbG9jaykKKwlfX3JlbGVhc2VzKFJDVSkKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKLQlyZWFkX3VubG9jaygmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHBhY2tldF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTI0MTUsNyArMjUzNyw3IEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsICJzayAgICAgICBSZWZDbnQgVHlwZSBQcm90byAgSWZhY2UgUiBSbWVtICAgVXNlciAgIElub2RlXG4iKTsKIAllbHNlIHsKLQkJc3RydWN0IHNvY2sgKnMgPSB2OworCQlzdHJ1Y3Qgc29jayAqcyA9IHNrX2VudHJ5KHYpOwogCQljb25zdCBzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHMpOwogCiAJCXNlcV9wcmludGYoc2VxLApAQCAtMjQ1Nyw5ICsyNTc5LDkgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBwYWNrZXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCXJ3bG9ja19pbml0KCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKIAlJTklUX0hMSVNUX0hFQUQoJm5ldC0+cGFja2V0LnNrbGlzdCk7CiAKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInBhY2tldCIsIDAsICZwYWNrZXRfc2VxX2ZvcHMpKQpAQCAtMjQ2OCw3ICsyNTkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGFja2V0X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcGFja2V0X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAicGFja2V0Iik7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2RhdGFncmFtLmMgYi9uZXQvcGhvbmV0L2RhdGFncmFtLmMKaW5kZXggNjdmMDcyZS4uMzg3MTk3YiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9kYXRhZ3JhbS5jCisrKyBiL25ldC9waG9uZXQvZGF0YWdyYW0uYwpAQCAtNzUsNyArNzUsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVycjsKIAotCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCisJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVR8TVNHX0VPUnxNU0dfTk9TSUdOQUx8CisJCQkJTVNHX0NNU0dfQ09NUEFUKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKG1zZy0+bXNnX25hbWUgPT0gTlVMTCkKQEAgLTExOSw3ICsxMjAsOCBAQAogCWludCBydmFsID0gLUVPUE5PVFNVUFA7CiAJaW50IGNvcHlsZW47CiAKLQlpZiAoZmxhZ3MgJiBNU0dfT09CKQorCWlmIChmbGFncyAmIH4oTVNHX1BFRUt8TVNHX1RSVU5DfE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUx8CisJCQlNU0dfQ01TR19DT01QQVQpKQogCQlnb3RvIG91dF9ub2ZyZWU7CiAKIAlpZiAoYWRkcl9sZW4pCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC1ncHJzLmMgYi9uZXQvcGhvbmV0L3BlcC1ncHJzLmMKaW5kZXggZDE4MzUwOS4uZDAxMjA4OSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAtZ3Bycy5jCisrKyBiL25ldC9waG9uZXQvcGVwLWdwcnMuYwpAQCAtOTYsMTEgKzk2LDExIEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZiAobGlrZWx5KHNrYl9oZWFkcm9vbShza2IpICYgMykpIHsKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgJiAzKSB7CiAJCXN0cnVjdCBza19idWZmICpyc2tiLCAqZnM7CiAJCWludCBmbGVuID0gMDsKIAotCQkvKiBQaG9uZXQgUGlwZSBkYXRhIGhlYWRlciBpcyBtaXNhbGlnbmVkICgzIGJ5dGVzKSwKKwkJLyogUGhvbmV0IFBpcGUgZGF0YSBoZWFkZXIgbWF5IGJlIG1pc2FsaWduZWQgKDMgYnl0ZXMpLAogCQkgKiBzbyB3cmFwIHRoZSBJUCBwYWNrZXQgYXMgYSBzaW5nbGUgZnJhZ21lbnQgb2YgYW4gaGVhZC1sZXNzCiAJCSAqIHNvY2tldCBidWZmZXIuIFRoZSBuZXR3b3JrIHN0YWNrIHdpbGwgcHVsbCB3aGF0IGl0IG5lZWRzLAogCQkgKiBidXQgYXQgbGVhc3QsIHRoZSB3aG9sZSBJUCBwYXlsb2FkIGlzIG5vdCBtZW1jcHknZC4gKi8KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLmMgYi9uZXQvcGhvbmV0L3BlcC5jCmluZGV4IGI2MzU2ZjMuLjM2MGNmMzcgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcGVwLmMKKysrIGIvbmV0L3Bob25ldC9wZXAuYwpAQCAtMzU0LDYgKzM1NCw5IEBACiAJCXF1ZXVlID0gJnBuLT5jdHJscmVxX3F1ZXVlOwogCQlnb3RvIHF1ZXVlOwogCisJY2FzZSBQTlNfUElQRV9BTElHTkVEX0RBVEE6CisJCV9fc2tiX3B1bGwoc2tiLCAxKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBQTlNfUElQRV9EQVRBOgogCQlfX3NrYl9wdWxsKHNrYiwgMyk7IC8qIFBpcGUgZGF0YSBoZWFkZXIgKi8KIAkJaWYgKCFwbl9mbG93X3NhZmUocG4tPnJ4X2ZjKSkgewpAQCAtNDQxLDYgKzQ0NCw3IEBACiAJc3RydWN0IHNvY2thZGRyX3BuIGRzdDsKIAl1MTYgcGVlcl90eXBlOwogCXU4IHBpcGVfaGFuZGxlLCBlbmFibGVkLCBuX3NiOworCXU4IGFsaWduZWQgPSAwOwogCiAJaWYgKCFwc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikgKyA0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzksNiArNDgzLDkgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXBlZXJfdHlwZSA9IChwZWVyX3R5cGUgJiAweGZmMDApIHwgZGF0YVswXTsKIAkJCWJyZWFrOworCQljYXNlIFBOX1BJUEVfU0JfQUxJR05FRF9EQVRBOgorCQkJYWxpZ25lZCA9IGRhdGFbMF0gIT0gMDsKKwkJCWJyZWFrOwogCQl9CiAJCW5fc2ItLTsKIAl9CkBAIC01MTAsNiArNTE3LDcgQEAKIAluZXdwbi0+cnhfY3JlZGl0cyA9IDA7CiAJbmV3cG4tPnJ4X2ZjID0gbmV3cG4tPnR4X2ZjID0gUE5fTEVHQUNZX0ZMT1dfQ09OVFJPTDsKIAluZXdwbi0+aW5pdF9lbmFibGUgPSBlbmFibGVkOworCW5ld3BuLT5hbGlnbmVkID0gYWxpZ25lZDsKIAogCUJVR19PTighc2tiX3F1ZXVlX2VtcHR5KCZuZXdzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpOwogCXNrYl9xdWV1ZV9oZWFkKCZuZXdzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKQEAgLTgyOSwxMSArODM3LDE1IEBACiAJCXJldHVybiAtRU5PQlVGUzsKIAl9CiAKLQlza2JfcHVzaChza2IsIDMpOworCXNrYl9wdXNoKHNrYiwgMyArIHBuLT5hbGlnbmVkKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCXBoID0gcG5wX2hkcihza2IpOwogCXBoLT51dGlkID0gMDsKLQlwaC0+bWVzc2FnZV9pZCA9IFBOU19QSVBFX0RBVEE7CisJaWYgKHBuLT5hbGlnbmVkKSB7CisJCXBoLT5tZXNzYWdlX2lkID0gUE5TX1BJUEVfQUxJR05FRF9EQVRBOworCQlwaC0+ZGF0YVswXSA9IDA7IC8qIHBhZGRpbmcgKi8KKwl9IGVsc2UKKwkJcGgtPm1lc3NhZ2VfaWQgPSBQTlNfUElQRV9EQVRBOwogCXBoLT5waXBlX2hhbmRsZSA9IHBuLT5waXBlX2hhbmRsZTsKIAogCXJldHVybiBwbl9za2Jfc2VuZChzaywgc2tiLCAmcGlwZV9zcnYpOwpAQCAtODQ4LDcgKzg2MCw5IEBACiAJaW50IGZsYWdzID0gbXNnLT5tc2dfZmxhZ3M7CiAJaW50IGVyciwgZG9uZTsKIAotCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IgfHwgIShtc2ctPm1zZ19mbGFncyAmIE1TR19FT1IpKQorCWlmICgobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfRU9SfE1TR19OT1NJR05BTHwKKwkJCQlNU0dfQ01TR19DT01QQVQpKSB8fAorCQkJIShtc2ctPm1zZ19mbGFncyAmIE1TR19FT1IpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBNQVhfUE5QSVBFX0hFQURFUiArIGxlbiwKQEAgLTkyNyw2ICs5NDEsOSBAQAogCXN0cnVjdCBza19idWZmICpyc2tiLCAqZnM7CiAJaW50IGZsZW4gPSAwOwogCisJaWYgKHBlcF9zayhzayktPmFsaWduZWQpCisJCXJldHVybiBwaXBlX3NrYl9zZW5kKHNrLCBza2IpOworCiAJcnNrYiA9IGFsbG9jX3NrYihNQVhfUE5QSVBFX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyc2tiKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtOTY2LDYgKzk4MywxMCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVycjsKIAorCWlmIChmbGFncyAmIH4oTVNHX09PQnxNU0dfUEVFS3xNU0dfVFJVTkN8TVNHX0RPTlRXQUlUfE1TR19XQUlUQUxMfAorCQkJTVNHX05PU0lHTkFMfE1TR19DTVNHX0NPTVBBVCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmICh1bmxpa2VseSgxIDw8IHNrLT5za19zdGF0ZSAmIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSkKIAkJcmV0dXJuIC1FTk9UQ09OTjsKIApAQCAtOTczLDYgKzk5NCw4IEBACiAJCS8qIERlcXVldWUgYW5kIGFja25vd2xlZGdlIGNvbnRyb2wgcmVxdWVzdCAqLwogCQlzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTsKIAorCQlpZiAoZmxhZ3MgJiBNU0dfUEVFSykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJc2tiID0gc2tiX2RlcXVldWUoJnBuLT5jdHJscmVxX3F1ZXVlKTsKIAkJaWYgKHNrYikgewogCQkJcGVwX2N0cmxyZXFfZXJyb3Ioc2ssIHNrYiwgUE5fUElQRV9OT19FUlJPUiwKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcG5fZGV2LmMgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCmluZGV4IGJjNGEzM2IuLmM1OTdjYzUgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fZGV2LmMKKysrIGIvbmV0L3Bob25ldC9wbl9kZXYuYwpAQCAtMzExLDcgKzMxMSw3IEBACiB9OwogCiAvKiBQZXItbmFtZXNwYWNlIFBob25ldCBkZXZpY2VzIGhhbmRsaW5nICovCi1zdGF0aWMgaW50IHBob25ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgcGhvbmV0X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0gbmV0X2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkKTsKIApAQCAtMzI0LDcgKzMyNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBob25ldF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHBob25ldF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IG5ldF9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX2Nvbm5lY3QuYyBiL25ldC9yZHMvdGNwX2Nvbm5lY3QuYwppbmRleCAyMTE1MjJmLi4wNTYyNTYyIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9jb25uZWN0LmMKKysrIGIvbmV0L3Jkcy90Y3BfY29ubmVjdC5jCkBAIC05MCw4ICs5MCw4IEBACiAKIAlyZXQgPSBzb2NrLT5vcHMtPmJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsIHNpemVvZihzcmMpKTsKIAlpZiAocmV0KSB7Ci0JCXJkc2RlYnVnKCJiaW5kIGZhaWxlZCB3aXRoICVkIGF0IGFkZHJlc3MgJXUuJXUuJXUuJXVcbiIsCi0JCSAgICAgcmV0LCBOSVBRVUFEKGNvbm4tPmNfbGFkZHIpKTsKKwkJcmRzZGVidWcoImJpbmQgZmFpbGVkIHdpdGggJWQgYXQgYWRkcmVzcyAlcEk0XG4iLAorCQkJIHJldCwgJmNvbm4tPmNfbGFkZHIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwOCw4ICsxMDgsNyBAQAogCQkJCSBPX05PTkJMT0NLKTsKIAlzb2NrID0gTlVMTDsKIAotCXJkc2RlYnVnKCJjb25uZWN0IHRvIGFkZHJlc3MgJXUuJXUuJXUuJXUgcmV0dXJuZWQgJWRcbiIsCi0JCSBOSVBRVUFEKGNvbm4tPmNfZmFkZHIpLCByZXQpOworCXJkc2RlYnVnKCJjb25uZWN0IHRvIGFkZHJlc3MgJXBJNCByZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CiAJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCiAJCXJldCA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmMKaW5kZXggNDU0NzRhNC4uNTNjYjFiNSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMKKysrIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmMKQEAgLTY2LDkgKzY2LDkgQEAKIAogCWluZXQgPSBpbmV0X3NrKG5ld19zb2NrLT5zayk7CiAKLQlyZHNkZWJ1ZygiYWNjZXB0ZWQgdGNwICV1LiV1LiV1LiV1OiV1IC0+ICV1LiV1LiV1LiV1OiV1XG4iLAotCQkgIE5JUFFVQUQoaW5ldC0+aW5ldF9zYWRkciksIG50b2hzKGluZXQtPmluZXRfc3BvcnQpLAotCQkgIE5JUFFVQUQoaW5ldC0+aW5ldF9kYWRkciksIG50b2hzKGluZXQtPmluZXRfZHBvcnQpKTsKKwlyZHNkZWJ1ZygiYWNjZXB0ZWQgdGNwICVwSTQ6JXUgLT4gJXBJNDoldVxuIiwKKwkJICZpbmV0LT5pbmV0X3NhZGRyLCBudG9ocyhpbmV0LT5pbmV0X3Nwb3J0KSwKKwkJICZpbmV0LT5pbmV0X2RhZGRyLCBudG9ocyhpbmV0LT5pbmV0X2Rwb3J0KSk7CiAKIAljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGluZXQtPmluZXRfc2FkZHIsIGluZXQtPmluZXRfZGFkZHIsCiAJCQkgICAgICAgJnJkc190Y3BfdHJhbnNwb3J0LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX3NlbmQuYyBiL25ldC9yZHMvdGNwX3NlbmQuYwppbmRleCBhYjU0NWUwLi4zNGZkY2MwIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9zZW5kLmMKKysrIGIvbmV0L3Jkcy90Y3Bfc2VuZC5jCkBAIC0xOTMsOSArMTkzLDkgQEAKIAkJCXJkc190Y3Bfc3RhdHNfaW5jKHNfdGNwX3NuZGJ1Zl9mdWxsKTsKIAkJCXJldCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvdGNwOiBzZW5kIHRvICV1LiV1LiV1LiV1ICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy90Y3A6IHNlbmQgdG8gJXBJNCAiCiAJCQkgICAgICAgInJldHVybmVkICVkLCBkaXNjb25uZWN0aW5nIGFuZCByZWNvbm5lY3RpbmdcbiIsCi0JCQkgICAgICAgTklQUVVBRChjb25uLT5jX2ZhZGRyKSwgcmV0KTsKKwkJCSAgICAgICAmY29ubi0+Y19mYWRkciwgcmV0KTsKIAkJCXJkc19jb25uX2Ryb3AoY29ubik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9hZl9yb3NlLmMgYi9uZXQvcm9zZS9hZl9yb3NlLmMKaW5kZXggOGZlYjllNS4uZTkwYjliNiAxMDA2NDQKLS0tIGEvbmV0L3Jvc2UvYWZfcm9zZS5jCisrKyBiL25ldC9yb3NlL2FmX3Jvc2UuYwpAQCAtMTQwNCwyOSArMTQwNCwxMyBAQAogc3RhdGljIHZvaWQgKnJvc2VfaW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhyb3NlX2xpc3RfbG9jaykKIHsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc29jayAqczsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQogCXNwaW5fbG9ja19iaCgmcm9zZV9saXN0X2xvY2spOwotCWlmICgqcG9zID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0KLQlpID0gMTsKLQlza19mb3JfZWFjaChzLCBub2RlLCAmcm9zZV9saXN0KSB7Ci0JCWlmIChpID09ICpwb3MpCi0JCQlyZXR1cm4gczsKLQkJKytpOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWQoJnJvc2VfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICpyb3NlX2luZm9fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0JKysqcG9zOwotCi0JcmV0dXJuICh2ID09IFNFUV9TVEFSVF9UT0tFTikgPyBza19oZWFkKCZyb3NlX2xpc3QpCi0JCTogc2tfbmV4dCgoc3RydWN0IHNvY2sgKil2KTsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJnJvc2VfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgcm9zZV9pbmZvX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0xNDQ0LDcgKzE0MjgsNyBAQAogCQkJICJkZXN0X2FkZHIgIGRlc3RfY2FsbCBzcmNfYWRkciAgIHNyY19jYWxsICBkZXYgICBsY2kgbmVpZ2ggc3QgdnMgdnIgdmEgICB0ICB0MSAgdDIgIHQzICBoYiAgICBpZGxlIFNuZC1RIFJjdi1RIGlub2RlXG4iKTsKIAogCWVsc2UgewotCQlzdHJ1Y3Qgc29jayAqcyA9IHY7CisJCXN0cnVjdCBzb2NrICpzID0gc2tfZW50cnkodik7CiAJCXN0cnVjdCByb3NlX3NvY2sgKnJvc2UgPSByb3NlX3NrKHMpOwogCQljb25zdCBjaGFyICpkZXZuYW1lLCAqY2FsbHNpZ247CiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByb3NlLT5kZXZpY2U7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA3NWZkMWM2Li42Y2Q0OTEwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTE3MDcsNiArMTcwNyw3IEBACiB7CiAJcmVnaXN0ZXJfcWRpc2MoJnBmaWZvX3FkaXNjX29wcyk7CiAJcmVnaXN0ZXJfcWRpc2MoJmJmaWZvX3FkaXNjX29wcyk7CisJcmVnaXN0ZXJfcWRpc2MoJnBmaWZvX2hlYWRfZHJvcF9xZGlzY19vcHMpOwogCXJlZ2lzdGVyX3FkaXNjKCZtcV9xZGlzY19vcHMpOwogCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInBzY2hlZCIsIDAsICZwc2NoZWRfZm9wcyk7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZmlmby5jIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKaW5kZXggNjkxODhlOC4uNGIwYTZjYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9maWZvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKQEAgLTQzLDYgKzQzLDI2IEBACiAJcmV0dXJuIHFkaXNjX3Jlc2hhcGVfZmFpbChza2IsIHNjaCk7CiB9CiAKK3N0YXRpYyBpbnQgcGZpZm9fdGFpbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyogc2NoKQoreworCXN0cnVjdCBza19idWZmICpza2JfaGVhZDsKKwlzdHJ1Y3QgZmlmb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCisJaWYgKGxpa2VseShza2JfcXVldWVfbGVuKCZzY2gtPnEpIDwgcS0+bGltaXQpKQorCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKKworCS8qIHF1ZXVlIGZ1bGwsIHJlbW92ZSBvbmUgc2tiIHRvIGZ1bGZpbGwgdGhlIGxpbWl0ICovCisJc2tiX2hlYWQgPSBxZGlzY19kZXF1ZXVlX2hlYWQoc2NoKTsKKwlzY2gtPmJzdGF0cy5ieXRlcyAtPSBxZGlzY19wa3RfbGVuKHNrYl9oZWFkKTsKKwlzY2gtPmJzdGF0cy5wYWNrZXRzLS07CisJc2NoLT5xc3RhdHMuZHJvcHMrKzsKKwlrZnJlZV9za2Ioc2tiX2hlYWQpOworCisJcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKKworCXJldHVybiBORVRfWE1JVF9DTjsKK30KKwogc3RhdGljIGludCBmaWZvX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCkKIHsKIAlzdHJ1Y3QgZmlmb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwpAQCAtMTA4LDYgKzEyOCwyMCBAQAogfTsKIEVYUE9SVF9TWU1CT0woYmZpZm9fcWRpc2Nfb3BzKTsKIAorc3RydWN0IFFkaXNjX29wcyBwZmlmb19oZWFkX2Ryb3BfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CisJLmlkCQk9CSJwZmlmb19oZWFkX2Ryb3AiLAorCS5wcml2X3NpemUJPQlzaXplb2Yoc3RydWN0IGZpZm9fc2NoZWRfZGF0YSksCisJLmVucXVldWUJPQlwZmlmb190YWlsX2VucXVldWUsCisJLmRlcXVldWUJPQlxZGlzY19kZXF1ZXVlX2hlYWQsCisJLnBlZWsJCT0JcWRpc2NfcGVla19oZWFkLAorCS5kcm9wCQk9CXFkaXNjX3F1ZXVlX2Ryb3BfaGVhZCwKKwkuaW5pdAkJPQlmaWZvX2luaXQsCisJLnJlc2V0CQk9CXFkaXNjX3Jlc2V0X3F1ZXVlLAorCS5jaGFuZ2UJCT0JZmlmb19pbml0LAorCS5kdW1wCQk9CWZpZm9fZHVtcCwKKwkub3duZXIJCT0JVEhJU19NT0RVTEUsCit9OworCiAvKiBQYXNzIHNpemUgY2hhbmdlIG1lc3NhZ2UgZG93biB0byBlbWJlZGRlZCBGSUZPICovCiBpbnQgZmlmb19zZXRfbGltaXQoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9iaW5kX2FkZHIuYyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCmluZGV4IDEzYTZmYmEuLmJlZjEzMzcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2JpbmRfYWRkci5jCisrKyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCkBAIC0xODYsNyArMTg2LDYgQEAKIAlhZGRyLT52YWxpZCA9IDE7CiAKIAlJTklUX0xJU1RfSEVBRCgmYWRkci0+bGlzdCk7Ci0JSU5JVF9SQ1VfSEVBRCgmYWRkci0+cmN1KTsKIAogCS8qIFdlIGFsd2F5cyBob2xkIGEgc29ja2V0IGxvY2sgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sCiAJICogYW5kIHRoYXQgYWN0cyBhcyBhIHdyaXRlciBzeW5jaHJvbml6aW5nIGxvY2suCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggY2M1MGZiZS4uMWQ3YWM3MCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtMzgxLDcgKzM4MSw2IEBACiAJCQlhZGRyLT5hLnY2LnNpbjZfc2NvcGVfaWQgPSBkZXYtPmlmaW5kZXg7CiAJCQlhZGRyLT52YWxpZCA9IDE7CiAJCQlJTklUX0xJU1RfSEVBRCgmYWRkci0+bGlzdCk7Ci0JCQlJTklUX1JDVV9IRUFEKCZhZGRyLT5yY3UpOwogCQkJbGlzdF9hZGRfdGFpbCgmYWRkci0+bGlzdCwgYWRkcmxpc3QpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvYy5jIGIvbmV0L3NjdHAvcHJvYy5jCmluZGV4IGQwOTNjYmZlLi43ODRiY2M5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm9jLmMKKysrIGIvbmV0L3NjdHAvcHJvYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvc2N0cC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPiAvKiBmb3Igc25tcF9mb2xkX2ZpZWxkICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25tcF9taWIgc2N0cF9zbm1wX2xpc3RbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgc2N0cF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJTY3RwQ3VyckVzdGFiIiwgU0NUUF9NSUJfQ1VSUkVTVEFCKSwKIAlTTk1QX01JQl9JVEVNKCJTY3RwQWN0aXZlRXN0YWJzIiwgU0NUUF9NSUJfQUNUSVZFRVNUQUJTKSwKIAlTTk1QX01JQl9JVEVNKCJTY3RwUGFzc2l2ZUVzdGFicyIsIFNDVFBfTUlCX1BBU1NJVkVFU1RBQlMpLApAQCAtODMsNyArODMsNyBAQAogCiAJZm9yIChpID0gMDsgc2N0cF9zbm1wX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsZFxuIiwgc2N0cF9zbm1wX2xpc3RbaV0ubmFtZSwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKilzY3RwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopc2N0cF9zdGF0aXN0aWNzLAogCQkJCSAgICAgIHNjdHBfc25tcF9saXN0W2ldLmVudHJ5KSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGEzYzg5ODguLmU3NzE2OTAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTg4LDcgKzE4OCw2IEBACiAJCQlhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkciA9IGlmYS0+aWZhX2xvY2FsOwogCQkJYWRkci0+dmFsaWQgPSAxOwogCQkJSU5JVF9MSVNUX0hFQUQoJmFkZHItPmxpc3QpOwotCQkJSU5JVF9SQ1VfSEVBRCgmYWRkci0+cmN1KTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmxpc3QsIGFkZHJsaXN0KTsKIAkJfQogCX0KQEAgLTk5NiwxMiArOTk1LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGluaXRfc2N0cF9taWJzKHZvaWQpCiB7Ci0JcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQqKilzY3RwX3N0YXRpc3RpY3MsIHNpemVvZihzdHJ1Y3Qgc2N0cF9taWIpKTsKKwlyZXR1cm4gc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilzY3RwX3N0YXRpc3RpY3MsCisJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9taWIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc2N0cF9taWJzKHZvaWQpCiB7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCoqKXNjdHBfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilzY3RwX3N0YXRpc3RpY3MpOwogfQogCiBzdGF0aWMgdm9pZCBzY3RwX3Y0X3BmX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggNjdmZGFjOS4uZjZkMWU1OSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTYzNTksNyArNjM1OSw3IEBACiAJCSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAKIAluZXdzay0+c2tfdHlwZSA9IHNrLT5za190eXBlOwogCW5ld3NrLT5za19ib3VuZF9kZXZfaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDlhYzQ5M2YuLjhkNjNmOGYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTc4LDcgKzc4LDcgQEAKIH0KIAogLyoqCi0gKiBycGNfcXVldWVfdXBjYWxsCisgKiBycGNfcXVldWVfdXBjYWxsIC0gcXVldWUgYW4gdXBjYWxsIG1lc3NhZ2UgdG8gdXNlcnNwYWNlCiAgKiBAaW5vZGU6IGlub2RlIG9mIHVwY2FsbCBwaXBlIG9uIHdoaWNoIHRvIHF1ZXVlIGdpdmVuIG1lc3NhZ2UKICAqIEBtc2c6IG1lc3NhZ2UgdG8gcXVldWUKICAqCmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCAwYjE1ZDcyLi41MzE5NjAwIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCisrKyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkucGVybWlzc2lvbnMgPSBuZXRfY3RsX3JvX2hlYWRlcl9wZXJtcywKIH07CiAKLXN0YXRpYyBpbnQgc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBzeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXNldHVwX3N5c2N0bF9zZXQoJm5ldC0+c3lzY3RscywKIAkJCSAmbmV0X3N5c2N0bF9yb19yb290LmRlZmF1bHRfc2V0LApAQCAtNzksNyArNzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBzeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCVdBUk5fT04oIWxpc3RfZW1wdHkoJm5ldC0+c3lzY3Rscy5saXN0KSk7CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvS2NvbmZpZyBiL25ldC90aXBjL0tjb25maWcKaW5kZXggM2IzMGQxMS4uYjc0Zjc4ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvS2NvbmZpZworKysgYi9uZXQvdGlwYy9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAJICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbAogCSAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZQogCSAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuCi0JCisKIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuCiAKIAkgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaApAQCAtMjMsOTEgKzIzLDc2IEBACiBpZiBUSVBDCiAKIGNvbmZpZyBUSVBDX0FEVkFOQ0VECi0JYm9vbCAiVElQQzogQWR2YW5jZWQgY29uZmlndXJhdGlvbiIKKwlib29sICJBZHZhbmNlZCBUSVBDIGNvbmZpZ3VyYXRpb24iCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgU2F5aW5nIFkgaGVyZSB3aWxsIG9wZW4gc29tZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgZm9yIFRJUEMuIE1vc3QgdXNlcnMgZG8gbm90IG5lZWQgdG8gYm90aGVyLCBzbyBpZgotICAgICAgICAgIHVuc3VyZSwganVzdCBzYXkgTi4KKwkgIFNheWluZyBZIGhlcmUgd2lsbCBvcGVuIHNvbWUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBmb3IgVElQQy4KKwkgIE1vc3QgdXNlcnMgZG8gbm90IG5lZWQgdG8gYm90aGVyOyBpZiB1bnN1cmUsIGp1c3Qgc2F5IE4uCiAKIGNvbmZpZyBUSVBDX1pPTkVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiB6b25lcyBpbiBuZXR3b3JrIgorCWludCAiTWF4aW11bSBudW1iZXIgb2Ygem9uZXMgaW4gYSBuZXR3b3JrIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAorCXJhbmdlIDEgMjU1CiAJZGVmYXVsdCAiMyIKIAloZWxwCi0JIE1heCBudW1iZXIgb2Ygem9uZXMgaW5zaWRlIFRJUEMgbmV0d29yay4gTWF4IHN1cHBvcnRlZCB2YWx1ZSAKLSAgICAgICAgIGlzIDI1NSB6b25lcywgbWluaW11bSBpcyAxCisJICBTcGVjaWZpZXMgaG93IG1hbnkgem9uZXMgY2FuIGJlIHN1cHBvcnRlZCBpbiBhIFRJUEMgbmV0d29yay4KKwkgIENhbiByYW5nZSBmcm9tIDEgdG8gMjU1IHpvbmVzOyBkZWZhdWx0IGlzIDMuCiAKLQkgRGVmYXVsdCBpcyAzIHpvbmVzIGluIGEgbmV0d29yazsgc2V0dGluZyB0aGlzIHRvIGhpZ2hlcgotCSBhbGxvd3MgbW9yZSB6b25lcyBidXQgbWlnaHQgdXNlIG1vcmUgbWVtb3J5LgorCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeTsKKwkgIHNldHRpbmcgaXQgdG8gYSBoaWdoZXIgdmFsdWUgYWxsb3dzIGZvciBtb3JlIHpvbmVzLgogCiBjb25maWcgVElQQ19DTFVTVEVSUwogCWludCAiTWF4aW11bSBudW1iZXIgb2YgY2x1c3RlcnMgaW4gYSB6b25lIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAorCXJhbmdlIDEgMQogCWRlZmF1bHQgIjEiCiAJaGVscAotICAgICAgICAgICoqKk9ubHkgMSAob25lIGNsdXN0ZXIgaW4gYSB6b25lKSBpcyBzdXBwb3J0ZWQgYnkgY3VycmVudCBjb2RlLgotICAgICAgICAgIEFueSB2YWx1ZSBzZXQgaGVyZSB3aWxsIGJlIG92ZXJyaWRkZW4uKioqCisJICBTcGVjaWZpZXMgaG93IG1hbnkgY2x1c3RlcnMgY2FuIGJlIHN1cHBvcnRlZCBpbiBhIFRJUEMgem9uZS4KIAotICAgICAgICAgIChNYXggbnVtYmVyIG9mIGNsdXN0ZXJzIGluc2lkZSBUSVBDIHpvbmUuIE1heCBzdXBwb3J0ZWQgCi0gICAgICAgICAgdmFsdWUgaXMgNDA5NSBjbHVzdGVycywgbWluaW11bSBpcyAxLgotCi0JICBEZWZhdWx0IGlzIDE7IHNldHRpbmcgdGhpcyB0byBzbWFsbGVyIHZhbHVlIG1pZ2h0IHNhdmUgCi0gICAgICAgICAgc29tZSBtZW1vcnksIHNldHRpbmcgaXQgdG8gaGlnaGVyCi0JICBhbGxvd3MgbW9yZSBjbHVzdGVycyBhbmQgbWlnaHQgY29uc3VtZSBtb3JlIG1lbW9yeS4pCisJICAqKiogQ3VycmVudGx5IFRJUEMgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBjbHVzdGVyIHBlciB6b25lLiAqKioKIAogY29uZmlnIFRJUENfTk9ERVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIGNsdXN0ZXIiCisJaW50ICJNYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbiBhIGNsdXN0ZXIiCiAJZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECisJcmFuZ2UgOCAyMDQ3CiAJZGVmYXVsdCAiMjU1IgogCWhlbHAKLQkgIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluc2lkZSBhIFRJUEMgY2x1c3Rlci4gTWF4aW11bSAKLSAgICAgICAgICBzdXBwb3J0ZWQgdmFsdWUgaXMgMjA0NyBub2RlcywgbWluaW11bSBpcyA4LiAKKwkgIFNwZWNpZmllcyBob3cgbWFueSBub2RlcyBjYW4gYmUgc3VwcG9ydGVkIGluIGEgVElQQyBjbHVzdGVyLgorCSAgQ2FuIHJhbmdlIGZyb20gOCB0byAyMDQ3IG5vZGVzOyBkZWZhdWx0IGlzIDI1NS4KIAotCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeSwgCi0JICBzZXR0aW5nIGl0IHRvIGhpZ2hlciBhbGxvd3MgbW9yZSBub2Rlcy4KLQotY29uZmlnIFRJUENfU0xBVkVfTk9ERVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHNsYXZlIG5vZGVzIGluIGNsdXN0ZXIiCi0JZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECi0JZGVmYXVsdCAiMCIKLQloZWxwCi0gICAgICAgICAgKioqVGhpcyBjYXBhYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudCBjb2RlLioqKgotCSAgCi0JICBNYXhpbXVtIG51bWJlciBvZiBzbGF2ZSBub2RlcyBpbnNpZGUgYSBUSVBDIGNsdXN0ZXIuIE1heGltdW0gCi0gICAgICAgICAgc3VwcG9ydGVkIHZhbHVlIGlzIDIwNDcgbm9kZXMsIG1pbmltdW0gaXMgMC4gCi0KLQkgIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsZXIgdmFsdWUgc2F2ZXMgc29tZSBtZW1vcnksIAotCSAgc2V0dGluZyBpdCB0byBoaWdoZXIgYWxsb3dzIG1vcmUgbm9kZXMuCisJICBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbGVyIHZhbHVlIHNhdmVzIHNvbWUgbWVtb3J5OworCSAgc2V0dGluZyBpdCB0byBoaWdoZXIgYWxsb3dzIGZvciBtb3JlIG5vZGVzLgogCiBjb25maWcgVElQQ19QT1JUUwogCWludCAiTWF4aW11bSBudW1iZXIgb2YgcG9ydHMgaW4gYSBub2RlIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAorCXJhbmdlIDEyNyA2NTUzNQogCWRlZmF1bHQgIjgxOTEiCiAJaGVscAotCSAgTWF4aW11bSBudW1iZXIgb2YgcG9ydHMgd2l0aGluIGEgbm9kZS4gTWF4aW11bSAKLSAgICAgICAgICBzdXBwb3J0ZWQgdmFsdWUgaXMgNjQ1MzUgbm9kZXMsIG1pbmltdW0gaXMgMTI3LiAKKwkgIFNwZWNpZmllcyBob3cgbWFueSBwb3J0cyBjYW4gYmUgc3VwcG9ydGVkIGJ5IGEgbm9kZS4KKwkgIENhbiByYW5nZSBmcm9tIDEyNyB0byA2NTUzNSBwb3J0czsgZGVmYXVsdCBpcyA4MTkxLgogCiAJICBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbGVyIHZhbHVlIHNhdmVzIHNvbWUgbWVtb3J5LCAKLQkgIHNldHRpbmcgaXQgdG8gaGlnaGVyIGFsbG93cyBtb3JlIHBvcnRzLgorCSAgc2V0dGluZyBpdCB0byBoaWdoZXIgYWxsb3dzIGZvciBtb3JlIHBvcnRzLgogCiBjb25maWcgVElQQ19MT0cKIAlpbnQgIlNpemUgb2YgbG9nIGJ1ZmZlciIKIAlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKLQlkZWZhdWx0IDAKKwlyYW5nZSAwIDMyNzY4CisJZGVmYXVsdCAiMCIKIAloZWxwCi0gCSAgU2l6ZSAoaW4gYnl0ZXMpIG9mIFRJUEMncyBpbnRlcm5hbCBsb2cgYnVmZmVyLCB3aGljaCByZWNvcmRzIHRoZQotCSAgb2NjdXJyZW5jZSBvZiBzaWduaWZpY2FudCBldmVudHMuICBNYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZQotCSAgaXMgMzI3NjggYnl0ZXMsIG1pbmltdW0gaXMgMC4KKwkgIFNpemUgKGluIGJ5dGVzKSBvZiBUSVBDJ3MgaW50ZXJuYWwgbG9nIGJ1ZmZlciwgd2hpY2ggcmVjb3JkcyB0aGUKKwkgIG9jY3VycmVuY2Ugb2Ygc2lnbmlmaWNhbnQgZXZlbnRzLiAgQ2FuIHJhbmdlIGZyb20gMCB0byAzMjc2OCBieXRlczsKKwkgIGRlZmF1bHQgaXMgMC4KIAogCSAgVGhlcmUgaXMgbm8gbmVlZCB0byBlbmFibGUgdGhlIGxvZyBidWZmZXIgdW5sZXNzIHRoZSBub2RlIHdpbGwgYmUKIAkgIG1hbmFnZWQgcmVtb3RlbHkgdmlhIFRJUEMuCiAKIGNvbmZpZyBUSVBDX0RFQlVHCi0JYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IgorCWJvb2wgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIKIAlkZWZhdWx0IG4KIAloZWxwCi0gCSAgVGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgb2YgVElQQy4KKwkgIFRoaXMgZW5hYmxlcyBkZWJ1Z2dpbmcgb2YgVElQQy4KIAogCSAgT25seSBzYXkgWSBoZXJlIGlmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgd2l0aCBUSVBDLiAgSXQgd2lsbAogCSAgZW5hYmxlIHRoZSBkaXNwbGF5IG9mIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaXMgZ29pbmcgb24uCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmMKaW5kZXggMzI1NmJkNy4uNTJjNTcxZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5jCisrKyBiL25ldC90aXBjL2NvcmUuYwpAQCAtMTg5LDExICsxODksMTEgQEAKIAl0aXBjX3JlbW90ZV9tYW5hZ2VtZW50ID0gMTsKIAl0aXBjX21heF9wdWJsaWNhdGlvbnMgPSAxMDAwMDsKIAl0aXBjX21heF9zdWJzY3JpcHRpb25zID0gMjAwMDsKLQl0aXBjX21heF9wb3J0cyA9IGRlbGltaXQoQ09ORklHX1RJUENfUE9SVFMsIDEyNywgNjU1MzYpOwotCXRpcGNfbWF4X3pvbmVzID0gZGVsaW1pdChDT05GSUdfVElQQ19aT05FUywgMSwgMjU1KTsKLQl0aXBjX21heF9jbHVzdGVycyA9IGRlbGltaXQoQ09ORklHX1RJUENfQ0xVU1RFUlMsIDEsIDEpOwotCXRpcGNfbWF4X25vZGVzID0gZGVsaW1pdChDT05GSUdfVElQQ19OT0RFUywgOCwgMjA0Nyk7Ci0JdGlwY19tYXhfc2xhdmVzID0gZGVsaW1pdChDT05GSUdfVElQQ19TTEFWRV9OT0RFUywgMCwgMjA0Nyk7CisJdGlwY19tYXhfcG9ydHMgPSBDT05GSUdfVElQQ19QT1JUUzsKKwl0aXBjX21heF96b25lcyA9IENPTkZJR19USVBDX1pPTkVTOworCXRpcGNfbWF4X2NsdXN0ZXJzID0gQ09ORklHX1RJUENfQ0xVU1RFUlM7CisJdGlwY19tYXhfbm9kZXMgPSBDT05GSUdfVElQQ19OT0RFUzsKKwl0aXBjX21heF9zbGF2ZXMgPSBDT05GSUdfVElQQ19TTEFWRV9OT0RFUzsKIAl0aXBjX25ldF9pZCA9IDQ3MTE7CiAKIAlpZiAoKHJlcyA9IHRpcGNfY29yZV9zdGFydCgpKSkKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBmMjU1MTE5Li4zZDkxMjJlIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIC8qCiAgKiAgU01QIGxvY2tpbmcgc3RyYXRlZ3k6CiAgKiAgICBoYXNoIHRhYmxlIGlzIHByb3RlY3RlZCB3aXRoIHNwaW5sb2NrIHVuaXhfdGFibGVfbG9jawotICogICAgZWFjaCBzb2NrZXQgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHNlcGFyYXRlIHJ3bG9jay4KKyAqICAgIGVhY2ggc29ja2V0IHN0YXRlIGlzIHByb3RlY3RlZCBieSBzZXBhcmF0ZSBzcGluIGxvY2suCiAgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bml4X2hhc2hfZm9sZChfX3dzdW0gbikKQEAgLTIyMjQsNyArMjIyNCw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIApAQCAtMjI0Myw3ICsyMjQzLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIHVuaXhfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB1bml4X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgInVuaXgiKTsKZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKaW5kZXggNzA4ZjVkZi4uZDA5NWM3YiAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKKysrIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAl7IH0sCiB9OwogCi1pbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCmRpZmYgLS1naXQgYS9uZXQvd2ltYXgvb3AtbXNnLmMgYi9uZXQvd2ltYXgvb3AtbXNnLmMKaW5kZXggZDNiZmI2ZS4uNzcxODY1NyAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L29wLW1zZy5jCisrKyBiL25ldC93aW1heC9vcC1tc2cuYwpAQCAtMzIwLDggKzMyMCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh3aW1heF9tc2cpOwogCiAKLXN0YXRpYyBjb25zdAotc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX21zZ19wb2xpY3lbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX21zZ19wb2xpY3lbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CiAJW1dJTUFYX0dOTF9NU0dfSUZJRFhdID0gewogCQkudHlwZSA9IE5MQV9VMzIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1yZXNldC5jIGIvbmV0L3dpbWF4L29wLXJlc2V0LmMKaW5kZXggMzVmMzcwMC4uNGRjODJhNSAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L29wLXJlc2V0LmMKKysrIGIvbmV0L3dpbWF4L29wLXJlc2V0LmMKQEAgLTkxLDggKzkxLDcgQEAKIEVYUE9SVF9TWU1CT0wod2ltYXhfcmVzZXQpOwogCiAKLXN0YXRpYyBjb25zdAotc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX3Jlc2V0X3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfcmVzZXRfcG9saWN5W1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0gewogCVtXSU1BWF9HTkxfUkVTRVRfSUZJRFhdID0gewogCQkudHlwZSA9IE5MQV9VMzIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1yZmtpbGwuYyBiL25ldC93aW1heC9vcC1yZmtpbGwuYwppbmRleCBhZTc1MmE2Li5lOTc4YzcxIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3AtcmZraWxsLmMKKysrIGIvbmV0L3dpbWF4L29wLXJma2lsbC5jCkBAIC00MTAsOCArNDEwLDcgQEAKICAqIGp1c3QgcXVlcnkpLgogICovCiAKLXN0YXRpYyBjb25zdAotc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX3Jma2lsbF9wb2xpY3lbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX3Jma2lsbF9wb2xpY3lbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CiAJW1dJTUFYX0dOTF9SRktJTExfSUZJRFhdID0gewogCQkudHlwZSA9IE5MQV9VMzIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1zdGF0ZS1nZXQuYyBiL25ldC93aW1heC9vcC1zdGF0ZS1nZXQuYwppbmRleCBhNzZiOGZjLi4xMWFkMzM1IDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3Atc3RhdGUtZ2V0LmMKKysrIGIvbmV0L3dpbWF4L29wLXN0YXRlLWdldC5jCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSAiZGVidWctbGV2ZWxzLmgiCiAKIAotc3RhdGljIGNvbnN0Ci1zdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfc3RhdGVfZ2V0X3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfc3RhdGVfZ2V0X3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKIAlbV0lNQVhfR05MX1NUR0VUX0lGSURYXSA9IHsKIAkJLnR5cGUgPSBOTEFfVTMyLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvd2ltYXgvc3RhY2suYyBiL25ldC93aW1heC9zdGFjay5jCmluZGV4IGM4ODY2NDEuLjgxM2UxZWEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9zdGFjay5jCisrKyBiL25ldC93aW1heC9zdGFjay5jCkBAIC03NSw4ICs3NSw3IEBACiAgKiBjbG9zZSB0byB3aGVyZSB0aGUgZGF0YSBpcyBnZW5lcmF0ZWQuCiAgKi8KIC8qCi1zdGF0aWMgY29uc3QKLXN0cnVjdCBubGFfcG9saWN5IHdpbWF4X2dubF9yZV9zdGF0dXNfY2hhbmdlW1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHdpbWF4X2dubF9yZV9zdGF0dXNfY2hhbmdlW1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0gewogCVtXSU1BWF9HTkxfU1RDSF9TVEFURV9PTERdID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtXSU1BWF9HTkxfU1RDSF9TVEFURV9ORVddID0geyAudHlwZSA9IE5MQV9VOCB9LAogfTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy8uZ2l0aWdub3JlIGIvbmV0L3dpcmVsZXNzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNDUxYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3JlZ2RiLmMKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9LY29uZmlnIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggOTBlOTNhNS4uZDBlZTI5MCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTk0LDIwICs5NCwyMSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKLQlib29sICJPbGQgd2lyZWxlc3Mgc3RhdGljIHJlZ3VsYXRvcnkgZGVmaW5pdGlvbnMiCitjb25maWcgQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIKKwlib29sICJ1c2Ugc3RhdGljYWxseSBjb21waWxlZCByZWd1bGF0b3J5IHJ1bGVzIGRhdGFiYXNlIiBpZiBFTUJFRERFRAogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gQ0ZHODAyMTEKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24KLQkgIGFuZCB1c2VzIGl0IHdpdGhpbiB0aGUgbmV3IGZyYW1ld29yay4gVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlCi0JICBmb3IgaGlzdG9yaWNhbCByZWFzb25zIGFuZCBpdCBpcyBhZHZpc2VkIHRvIGxlYXZlIGl0IG9mZi4KKwkgIFRoaXMgb3B0aW9uIGdlbmVyYXRlcyBhbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcKKwkgIHRoZSB3aXJlbGVzcyByZWd1bGF0b3J5IHJ1bGVzIGRlc2NyaWJlZCBpbiBuZXQvd2lyZWxlc3MvZGIudHh0CisJICBhbmQgaW5jbHVkZXMgY29kZSB0byBxdWVyeSB0aGF0IGRhdGFiYXNlLiAgVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZQorCSAgdG8gdXNpbmcgQ1JEQSBmb3IgZGVmaW5pbmcgcmVndWxhdG9yeSBydWxlcyBmb3IgdGhlIGtlcm5lbC4KIAogCSAgRm9yIGRldGFpbHMgc2VlOgogCiAJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkKIAotCSAgU2F5IE4gYW5kIGlmIHlvdSBzYXkgWSwgcGxlYXNlIHRlbGwgdXMgd2h5LiBUaGUgZGVmYXVsdCBpcyBOLgorCSAgTW9zdCBkaXN0cmlidXRpb25zIGhhdmUgYSBDUkRBIHBhY2thZ2UuICBTbyBpZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ0ZHODAyMTFfV0VYVAogCWJvb2wgImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eSIKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCBmMDdjOGRjLi5lNzdlNTA4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC0xMyw1ICsxMywxMSBAQAogY2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8KIGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMubwogY2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vCitjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQikgKz0gcmVnZGIubwogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCisKKyQob2JqKS9yZWdkYi5jOiAkKHNyYykvZGIudHh0ICQoc3JjKS9nZW5yZWdkYi5hd2sKKwlAJChBV0spIC1mICQoc3JjdHJlZSkvJChzcmMpL2dlbnJlZ2RiLmF3ayA8ICQ8ID4gJEAKKworY2xlYW4tZmlsZXMgOj0gcmVnZGIuYwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NoYW4uYyBiL25ldC93aXJlbGVzcy9jaGFuLmMKaW5kZXggYTQ2YWM2Yy4uYmYxNzM3ZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NoYW4uYworKysgYi9uZXQvd2lyZWxlc3MvY2hhbi5jCkBAIC00MSwxMiArNDEsNDUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgorcmRldl9mcmVxX3RvX2NoYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7CisKKwljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgZnJlcSk7CisKKwkvKiBQcmltYXJ5IGNoYW5uZWwgbm90IGFsbG93ZWQgKi8KKwlpZiAoIWNoYW4gfHwgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgJiYKKwkgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpCisJCXJldHVybiBOVUxMOworCWVsc2UgaWYgKGNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKKwkJIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpCisJCXJldHVybiBOVUxMOworCisJaHRfY2FwID0gJnJkZXYtPndpcGh5LmJhbmRzW2NoYW4tPmJhbmRdLT5odF9jYXA7CisKKwlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkgeworCQlpZiAoIWh0X2NhcC0+aHRfc3VwcG9ydGVkKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKCEoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgfHwKKwkJICAgIGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNoYW47Cit9CisKIGludCByZGV2X3NldF9mcmVxKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2RldiwKIAkJICBpbnQgZnJlcSwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwOwogCWludCByZXN1bHQ7CiAKIAlpZiAocmRldl9maXhlZF9jaGFubmVsKHJkZXYsIGZvcl93ZGV2KSkKQEAgLTU1LDMwICs4OCwxMCBAQAogCWlmICghcmRldi0+b3BzLT5zZXRfY2hhbm5lbCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksIGZyZXEpOwotCi0JLyogUHJpbWFyeSBjaGFubmVsIG5vdCBhbGxvd2VkICovCi0JaWYgKCFjaGFuIHx8IGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJY2hhbiA9IHJkZXZfZnJlcV90b19jaGFuKHJkZXYsIGZyZXEsIGNoYW5uZWxfdHlwZSk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgotCSAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgotCQkgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlodF9jYXAgPSAmcmRldi0+d2lwaHkuYmFuZHNbY2hhbi0+YmFuZF0tPmh0X2NhcDsKLQotCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7Ci0JCWlmICghaHRfY2FwLT5odF9zdXBwb3J0ZWQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAotCQkgICAgaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXN1bHQgPSByZGV2LT5vcHMtPnNldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgY2hhbiwgY2hhbm5lbF90eXBlKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggOTJiODEyNC4uN2ZkYjk0MCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIGxpbnV4IHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDkJCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwCQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgpAQCAtMzEsMTUgKzMxLDEwIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIndpcmVsZXNzIGNvbmZpZ3VyYXRpb24gc3VwcG9ydCIpOwogCi0vKiBSQ1UgbWlnaHQgYmUgYXBwcm9wcmlhdGUgaGVyZSBzaW5jZSB3ZSB1c3VhbGx5Ci0gKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKLSAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCisvKiBSQ1UtcHJvdGVjdGVkIChhbmQgY2ZnODAyMTFfbXV0ZXggZm9yIHdyaXRlcnMpICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfcmRldl9saXN0KTsKIGludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjsKIAotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBjZmc4MDIxMV9yZGV2X2xpc3QKLSAqLwogREVGSU5FX01VVEVYKGNmZzgwMjExX211dGV4KTsKIAogLyogZm9yIGRlYnVnZnMgKi8KQEAgLTQwMiw2ICszOTcsNyBAQAogCXJkZXYtPndpcGh5LnJldHJ5X2xvbmcgPSA0OwogCXJkZXYtPndpcGh5LmZyYWdfdGhyZXNob2xkID0gKHUzMikgLTE7CiAJcmRldi0+d2lwaHkucnRzX3RocmVzaG9sZCA9ICh1MzIpIC0xOworCXJkZXYtPndpcGh5LmNvdmVyYWdlX2NsYXNzID0gMDsKIAogCXJldHVybiAmcmRldi0+d2lwaHk7CiB9CkBAIC00MTcsNiArNDEzLDE4IEBACiAJaW50IGk7CiAJdTE2IGlmbW9kZXMgPSB3aXBoeS0+aW50ZXJmYWNlX21vZGVzOwogCisJaWYgKFdBUk5fT04od2lwaHktPmFkZHJlc3NlcyAmJiAhd2lwaHktPm5fYWRkcmVzc2VzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoV0FSTl9PTih3aXBoeS0+YWRkcmVzc2VzICYmCisJCSAgICAhaXNfemVyb19ldGhlcl9hZGRyKHdpcGh5LT5wZXJtX2FkZHIpICYmCisJCSAgICBtZW1jbXAod2lwaHktPnBlcm1fYWRkciwgd2lwaHktPmFkZHJlc3Nlc1swXS5hZGRyLAorCQkJICAgRVRIX0FMRU4pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2lwaHktPmFkZHJlc3NlcykKKwkJbWVtY3B5KHdpcGh5LT5wZXJtX2FkZHIsIHdpcGh5LT5hZGRyZXNzZXNbMF0uYWRkciwgRVRIX0FMRU4pOworCiAJLyogc2FuaXR5IGNoZWNrIGlmbW9kZXMgKi8KIAlXQVJOX09OKCFpZm1vZGVzKTsKIAlpZm1vZGVzICY9ICgoMSA8PCBfX05MODAyMTFfSUZUWVBFX0FGVEVSX0xBU1QpIC0gMSkgJiB+MTsKQEAgLTQ3Niw3ICs0ODQsNyBAQAogCS8qIHNldCB1cCByZWd1bGF0b3J5IGluZm8gKi8KIAl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpOwogCi0JbGlzdF9hZGQoJnJkZXYtPmxpc3QsICZjZmc4MDIxMV9yZGV2X2xpc3QpOworCWxpc3RfYWRkX3JjdSgmcmRldi0+bGlzdCwgJmNmZzgwMjExX3JkZXZfbGlzdCk7CiAJY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb24rKzsKIAogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwpAQCAtNTUzLDcgKzU2MSw4IEBACiAJICogaXQgaW1wb3NzaWJsZSB0byBmaW5kIGZyb20gdXNlcnNwYWNlLgogCSAqLwogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKLQlsaXN0X2RlbCgmcmRldi0+bGlzdCk7CisJbGlzdF9kZWxfcmN1KCZyZGV2LT5saXN0KTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qCiAJICogVHJ5IHRvIGdyYWIgcmRldi0+bXR4LiBJZiBhIGNvbW1hbmQgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsCkBAIC02NjgsOCArNjc3LDExIEBACiAJCUlOSVRfV09SSygmd2Rldi0+Y2xlYW51cF93b3JrLCB3ZGV2X2NsZWFudXBfd29yayk7CiAJCUlOSVRfTElTVF9IRUFEKCZ3ZGV2LT5ldmVudF9saXN0KTsKIAkJc3Bpbl9sb2NrX2luaXQoJndkZXYtPmV2ZW50X2xvY2spOworCQlJTklUX0xJU1RfSEVBRCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnMpOworCQlzcGluX2xvY2tfaW5pdCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jayk7CisKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwotCQlsaXN0X2FkZCgmd2Rldi0+bGlzdCwgJnJkZXYtPm5ldGRldl9saXN0KTsKKwkJbGlzdF9hZGRfcmN1KCZ3ZGV2LT5saXN0LCAmcmRldi0+bmV0ZGV2X2xpc3QpOwogCQlyZGV2LT5kZXZsaXN0X2dlbmVyYXRpb24rKzsKIAkJLyogY2FuIG9ubHkgY2hhbmdlIG5ldG5zIHdpdGggd2lwaHkgKi8KIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwpAQCAtNjg2LDE5ICs2OTgsMjEgQEAKIAkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IC0xOwogCQl3ZGV2LT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSAtMTsKIAkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOworI2VuZGlmCisKIAkJaWYgKHdkZXYtPndpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVCkKLQkJCXdkZXYtPndleHQucHMgPSB0cnVlOworCQkJd2Rldi0+cHMgPSB0cnVlOwogCQllbHNlCi0JCQl3ZGV2LT53ZXh0LnBzID0gZmFsc2U7Ci0JCXdkZXYtPndleHQucHNfdGltZW91dCA9IDEwMDsKKwkJCXdkZXYtPnBzID0gZmFsc2U7CisJCXdkZXYtPnBzX3RpbWVvdXQgPSAxMDA7CiAJCWlmIChyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KQogCQkJaWYgKHJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQod2Rldi0+d2lwaHksIGRldiwKLQkJCQkJCSAgICAgIHdkZXYtPndleHQucHMsCi0JCQkJCQkgICAgICB3ZGV2LT53ZXh0LnBzX3RpbWVvdXQpKSB7CisJCQkJCQkgICAgICB3ZGV2LT5wcywKKwkJCQkJCSAgICAgIHdkZXYtPnBzX3RpbWVvdXQpKSB7CiAJCQkJLyogYXNzdW1lIHRoaXMgbWVhbnMgaXQncyBvZmYgKi8KLQkJCQl3ZGV2LT53ZXh0LnBzID0gZmFsc2U7CisJCQkJd2Rldi0+cHMgPSBmYWxzZTsKIAkJCX0KLSNlbmRpZgorCiAJCWlmICghZGV2LT5ldGh0b29sX29wcykKIAkJCWRldi0+ZXRodG9vbF9vcHMgPSAmY2ZnODAyMTFfZXRodG9vbF9vcHM7CiAKQEAgLTc4MSwxMyArNzk1LDIyIEBACiAJCSAqLwogCQlpZiAoIWxpc3RfZW1wdHkoJndkZXYtPmxpc3QpKSB7CiAJCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgInBoeTgwMjExIik7Ci0JCQlsaXN0X2RlbF9pbml0KCZ3ZGV2LT5saXN0KTsKKwkJCWxpc3RfZGVsX3JjdSgmd2Rldi0+bGlzdCk7CiAJCQlyZGV2LT5kZXZsaXN0X2dlbmVyYXRpb24rKzsKKwkJCWNmZzgwMjExX21sbWVfcHVyZ2VfYWN0aW9ucyh3ZGV2KTsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCQkJa2ZyZWUod2Rldi0+d2V4dC5rZXlzKTsKICNlbmRpZgogCQl9CiAJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQkvKgorCQkgKiBzeW5jaHJvbmlzZSAoc28gdGhhdCB3ZSB3b24ndCBmaW5kIHRoaXMgbmV0ZGV2CisJCSAqIGZyb20gb3RoZXIgY29kZSBhbnkgbW9yZSkgYW5kIHRoZW4gY2xlYXIgdGhlIGxpc3QKKwkJICogaGVhZCBzbyB0aGF0IHRoZSBhYm92ZSBjb2RlIGNhbiBzYWZlbHkgY2hlY2sgZm9yCisJCSAqICFsaXN0X2VtcHR5KCkgdG8gYXZvaWQgZG91YmxlLWNsZWFudXAuCisJCSAqLworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJSU5JVF9MSVNUX0hFQUQoJndkZXYtPmxpc3QpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9QUkVfVVA6CiAJCWlmICghKHdkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQod2Rldi0+aWZ0eXBlKSkpCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCA0ZWYzZWZjLi5kNTJkYTkxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogV2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgaW50ZXJuYWxzLgogICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMTAJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqLwogI2lmbmRlZiBfX05FVF9XSVJFTEVTU19DT1JFX0gKICNkZWZpbmUgX19ORVRfV0lSRUxFU1NfQ09SRV9ICkBAIC00OCw2ICs0OCw3IEBACiAKIAkvKiBhc3NvY2lhdGUgbmV0ZGV2IGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggZGV2bGlzdF9tdHg7CisJLyogcHJvdGVjdGVkIGJ5IGRldmxpc3RfbXR4IG9yIFJDVSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0ZGV2X2xpc3Q7CiAJaW50IGRldmxpc3RfZ2VuZXJhdGlvbjsKIAlpbnQgb3BlbmNvdW50OyAvKiBhbHNvIHByb3RlY3RlZCBieSBkZXZsaXN0X210eCAqLwpAQCAtMTExLDcgKzExMiw4IEBACiAJdW5zaWduZWQgbG9uZyB0czsKIAlzdHJ1Y3Qga3JlZiByZWY7CiAJYXRvbWljX3QgaG9sZDsKLQlib29sIGllc19hbGxvY2F0ZWQ7CisJYm9vbCBiZWFjb25faWVzX2FsbG9jYXRlZDsKKwlib29sIHByb2JlcmVzcF9pZXNfYWxsb2NhdGVkOwogCiAJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgcHJpdiBtZW1iZXIgKi8KIAlzdHJ1Y3QgY2ZnODAyMTFfYnNzIHB1YjsKQEAgLTMyNyw2ICszMjksMTUgQEAKIAkJCSAgICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAogCQkJICAgICAgIHUxNiBzdGF0dXMsIGJvb2wgd2V4dGV2LAogCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CitpbnQgY2ZnODAyMTFfbWxtZV9yZWdpc3Rlcl9hY3Rpb24oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIHNuZF9waWQsCisJCQkJICBjb25zdCB1OCAqbWF0Y2hfZGF0YSwgaW50IG1hdGNoX2xlbik7Cit2b2lkIGNmZzgwMjExX21sbWVfdW5yZWdpc3Rlcl9hY3Rpb25zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBubHBpZCk7Cit2b2lkIGNmZzgwMjExX21sbWVfcHVyZ2VfYWN0aW9ucyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKK2ludCBjZmc4MDIxMV9tbG1lX2FjdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgdTY0ICpjb29raWUpOwogCiAvKiBTTUUgKi8KIGludCBfX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LApAQCAtMzc0LDEwICszODUsMTUgQEAKIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCiByZGV2X2ZpeGVkX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2Rldik7CitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgorcmRldl9mcmVxX3RvX2NoYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CiBpbnQgcmRldl9zZXRfZnJlcShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgc3RydWN0IHdpcmVsZXNzX2RldiAqZm9yX3dkZXYsCiAJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKIAordTE2IGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKHN0cnVjdCByYXRlX2luZm8gKnJhdGUpOworCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUwogI2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKQlXQVJOX09OKGNvbmQpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2RiLnR4dCBiL25ldC93aXJlbGVzcy9kYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmYzNhMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9kYi50eHQKQEAgLTAsMCArMSwxNyBAQAorIworIyBUaGlzIGZpbGUgaXMgYSBwbGFjZWhvbGRlciB0byBwcmV2ZW50IGFjY2lkZW50YWwgYnVpbGQgYnJlYWthZ2UgaWYgc29tZW9uZQorIyBlbmFibGVzIENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQi4gIEFsbW9zdCBubyBvbmUgYWN0dWFsbHkgbmVlZHMgdG8KKyMgZW5hYmxlIHRoYXQgYnVpbGQgb3B0aW9uLgorIworIyBZb3Ugc2hvdWxkIGJlIHVzaW5nIENSREEgaW5zdGVhZC4gIEl0IGlzIGV2ZW4gYmV0dGVyIGlmIHlvdSB1c2UgdGhlIENSREEKKyMgcGFja2FnZSBwcm92aWRlZCBieSB5b3VyIGRpc3RyaWJ1dGlvbiwgc2luY2UgdGhleSB3aWxsIHByb2JhYmx5IGtlZXAgaXQKKyMgdXAtdG8tZGF0ZSBvbiB5b3VyIGJlaGFsZi4KKyMKKyMgSWYgeW91IF9yZWFsbHlfIGludGVuZCB0byB1c2UgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIHRoZW4geW91IHdpbGwKKyMgbmVlZCB0byByZXBsYWNlIHRoaXMgZmlsZSB3aXRoIG9uZSBjb250YWluaW5nIGFwcHJvcHJpYXRlbHkgZm9ybWF0dGVkCisjIHJlZ3VsYXRvcnkgcnVsZXMgdGhhdCBjb3ZlciB0aGUgcmVndWxhdG9yeSBkb21haW5zIHlvdSB3aWxsIGJlIHVzaW5nLiAgWW91cgorIyBiZXN0IG9wdGlvbiBpcyB0byBleHRyYWN0IHRoZSBkYi50eHQgZmlsZSBmcm9tIHRoZSB3aXJlbGVzcy1yZWdkYiBnaXQKKyMgcmVwb3NpdG9yeToKKyMKKyMgICBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtcmVnZGIuZ2l0CisjCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrIGIvbmV0L3dpcmVsZXNzL2dlbnJlZ2RiLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M5ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL2dlbnJlZ2RiLmF3awpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jpbi9hd2sgLWYKKyMKKyMgZ2VucmVnZGIuYXdrIC0tIGdlbmVyYXRlIHJlZ2RiLmMgZnJvbSBkYi50eHQKKyMKKyMgQWN0dWFsbHksIGl0IHJlYWRzIGZyb20gc3RkaW4gKHByZXN1bWVkIHRvIGJlIGRiLnR4dCkgYW5kIHdyaXRlcworIyB0byBzdGRvdXQgKHByZXN1bWVkIHRvIGJlIHJlZ2RiLmMpLCBidXQgY2xvc2UgZW5vdWdoLi4uCisjCisjIENvcHlyaWdodCAyMDA5IEpvaG4gVy4gTGludmlsbGUgPGxpbnZpbGxlQHR1eGRyaXZlci5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworCitCRUdJTiB7CisJYWN0aXZlID0gMAorCXJ1bGVzID0gMDsKKwlwcmludCAiLyoiCisJcHJpbnQgIiAqIERPIE5PVCBFRElUIC0tIGZpbGUgZ2VuZXJhdGVkIGZyb20gZGF0YSBpbiBkYi50eHQiCisJcHJpbnQgIiAqLyIKKwlwcmludCAiIgorCXByaW50ICIjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPiIKKwlwcmludCAiI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPiIKKwlwcmludCAiIgorCXJlZ2RiID0gImNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdfcmVnZGJbXSA9IHtcbiIKK30KKworL15bIFx0XSojLyB7CisJIyBJZ25vcmUKK30KKworIWFjdGl2ZSAmJiAvXlsgXHRdKiQvIHsKKwkjIElnbm9yZQorfQorCishYWN0aXZlICYmIC9jb3VudHJ5LyB7CisJY291bnRyeT0kMgorCXN1YigvOi8sICIiLCBjb3VudHJ5KQorCXByaW50ZiAic3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJlZ2RvbV8lcyA9IHtcbiIsIGNvdW50cnkKKwlwcmludGYgIlx0LmFscGhhMiA9IFwiJXNcIixcbiIsIGNvdW50cnkKKwlwcmludGYgIlx0LnJlZ19ydWxlcyA9IHtcbiIKKwlhY3RpdmUgPSAxCisJcmVnZGIgPSByZWdkYiAiXHQmcmVnZG9tXyIgY291bnRyeSAiLFxuIgorfQorCithY3RpdmUgJiYgL15bIFx0XSpcKC8geworCXN0YXJ0ID0gJDEKKwlzdWIoL1woLywgIiIsIHN0YXJ0KQorCWVuZCA9ICQzCisJYncgPSAkNQorCXN1YigvXCksLywgIiIsIGJ3KQorCWdhaW4gPSAkNgorCXN1YigvXCgvLCAiIiwgZ2FpbikKKwlzdWIoLywvLCAiIiwgZ2FpbikKKwlwb3dlciA9ICQ3CisJc3ViKC9cKS8sICIiLCBwb3dlcikKKwlzdWIoLywvLCAiIiwgcG93ZXIpCisJIyBwb3dlciBtaWdodCBiZSBpbiBtVy4uLgorCXVuaXRzID0gJDgKKwlzdWIoL1wpLywgIiIsIHVuaXRzKQorCXN1YigvLC8sICIiLCB1bml0cykKKwlpZiAodW5pdHMgPT0gIm1XIikgeworCQlpZiAocG93ZXIgPT0gMTAwKSB7CisJCQlwb3dlciA9IDIwCisJCX0gZWxzZSBpZiAocG93ZXIgPT0gMjAwKSB7CisJCQlwb3dlciA9IDIzCisJCX0gZWxzZSBpZiAocG93ZXIgPT0gNTAwKSB7CisJCQlwb3dlciA9IDI3CisJCX0gZWxzZSBpZiAocG93ZXIgPT0gMTAwMCkgeworCQkJcG93ZXIgPSAzMAorCQl9IGVsc2UgeworCQkJcHJpbnQgIlVua25vd24gcG93ZXIgdmFsdWUgaW4gZGF0YWJhc2UhIgorCQl9CisJfQorCWZsYWdzdHIgPSAiIgorCWZvciAoaT04OyBpPD1ORjsgaSsrKQorCQlmbGFnc3RyID0gZmxhZ3N0ciAkaQorCXNwbGl0KGZsYWdzdHIsIGZsYWdhcnJheSwgIiwiKQorCWZsYWdzID0gIiIKKwlmb3IgKGFyZyBpbiBmbGFnYXJyYXkpIHsKKwkJaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1PRkRNIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9OT19PRkRNIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1DQ0siKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX0NDSyB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiTk8tSU5ET09SIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9OT19JTkRPT1IgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIk5PLU9VVERPT1IiKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX09VVERPT1IgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIkRGUyIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfREZTIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJQVFAtT05MWSIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfUFRQX09OTFkgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIlBUTVAtT05MWSIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfUFRNUF9PTkxZIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJQQVNTSVZFLVNDQU4iKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiTk8tSUJTUyIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfTk9fSUJTUyB8ICIKKwkJfQorCX0KKwlmbGFncyA9IGZsYWdzICIwIgorCXByaW50ZiAiXHRcdFJFR19SVUxFKCVkLCAlZCwgJWQsICVkLCAlZCwgJXMpLFxuIiwgc3RhcnQsIGVuZCwgYncsIGdhaW4sIHBvd2VyLCBmbGFncworCXJ1bGVzKysKK30KKworYWN0aXZlICYmIC9eWyBcdF0qJC8geworCWFjdGl2ZSA9IDAKKwlwcmludGYgIlx0fSxcbiIKKwlwcmludGYgIlx0Lm5fcmVnX3J1bGVzID0gJWRcbiIsIHJ1bGVzCisJcHJpbnRmICJ9O1xuXG4iCisJcnVsZXMgPSAwOworfQorCitFTkQgeworCXByaW50IHJlZ2RiICJ9OyIKKwlwcmludCAiIgorCXByaW50ICJpbnQgcmVnX3JlZ2RiX3NpemUgPSBBUlJBWV9TSVpFKHJlZ19yZWdkYik7IgorfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggMjMwMWRjMS4uYjdmYTMxZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yMzcsNyArMjM3LDYgQEAKIAkJcmV0dXJuIC0xOwogCiAJcG9zID0gc2tiLT5kYXRhICsgaGRyX2xlbiArIENDTVBfSERSX0xFTjsKLQltaWMgPSBza2JfcHV0KHNrYiwgQ0NNUF9NSUNfTEVOKTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJY2NtcF9pbml0X2Jsb2NrcyhrZXktPnRmbSwgaGRyLCBrZXktPnR4X3BuLCBkYXRhX2xlbiwgYjAsIGIsIHMwKTsKIApAQCAtMjU3LDYgKzI1Niw3IEBACiAJCXBvcyArPSBsZW47CiAJfQogCisJbWljID0gc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTik7CiAJZm9yIChpID0gMDsgaSA8IENDTVBfTUlDX0xFTjsgaSsrKQogCQltaWNbaV0gPSBiW2ldIF4gczBbaV07CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IGMzNjI4NzMuLjhjYmRiMzJmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTM2LDYgKzM2LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigibGliODAyMTEgY3J5cHQ6IFRLSVAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorI2RlZmluZSBUS0lQX0hEUl9MRU4gOAorCiBzdHJ1Y3QgbGliODAyMTFfdGtpcF9kYXRhIHsKICNkZWZpbmUgVEtJUF9LRVlfTEVOIDMyCiAJdTgga2V5W1RLSVBfS0VZX0xFTl07CkBAIC0zMTQsMTMgKzMxNiwxMiBAQAogCQkJICAgICAgdTggKiByYzRrZXksIGludCBrZXlsZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGxpYjgwMjExX3RraXBfZGF0YSAqdGtleSA9IHByaXY7Ci0JaW50IGxlbjsKIAl1OCAqcG9zOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAKLQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCA4IHx8IHNrYi0+bGVuIDwgaGRyX2xlbikKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBUS0lQX0hEUl9MRU4gfHwgc2tiLT5sZW4gPCBoZHJfbGVuKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAocmM0a2V5ID09IE5VTEwgfHwga2V5bGVuIDwgMTYpCkBAIC0zMzMsOSArMzM0LDggQEAKIAl9CiAJdGtpcF9taXhpbmdfcGhhc2UyKHJjNGtleSwgdGtleS0+a2V5LCB0a2V5LT50eF90dGFrLCB0a2V5LT50eF9pdjE2KTsKIAotCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKLQlwb3MgPSBza2JfcHVzaChza2IsIDgpOwotCW1lbW1vdmUocG9zLCBwb3MgKyA4LCBoZHJfbGVuKTsKKwlwb3MgPSBza2JfcHVzaChza2IsIFRLSVBfSERSX0xFTik7CisJbWVtbW92ZShwb3MsIHBvcyArIFRLSVBfSERSX0xFTiwgaGRyX2xlbik7CiAJcG9zICs9IGhkcl9sZW47CiAKIAkqcG9zKysgPSAqcmM0a2V5OwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCXRrZXktPnR4X2l2MzIrKzsKIAl9CiAKLQlyZXR1cm4gODsKKwlyZXR1cm4gVEtJUF9IRFJfTEVOOwogfQogCiBzdGF0aWMgaW50IGxpYjgwMjExX3RraXBfZW5jcnlwdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdikKQEAgLTM4NCw5ICszODQsOCBAQAogCWlmICgobGliODAyMTFfdGtpcF9oZHIoc2tiLCBoZHJfbGVuLCByYzRrZXksIDE2LCBwcml2KSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpY3YgPSBza2JfcHV0KHNrYiwgNCk7Ci0KIAljcmMgPSB+Y3JjMzJfbGUofjAsIHBvcywgbGVuKTsKKwlpY3YgPSBza2JfcHV0KHNrYiwgNCk7CiAJaWN2WzBdID0gY3JjOwogCWljdlsxXSA9IGNyYyA+PiA4OwogCWljdlsyXSA9IGNyYyA+PiAxNjsKQEAgLTQzNCw3ICs0MzMsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNrYi0+bGVuIDwgaGRyX2xlbiArIDggKyA0KQorCWlmIChza2ItPmxlbiA8IGhkcl9sZW4gKyBUS0lQX0hEUl9MRU4gKyA0KQogCQlyZXR1cm4gLTE7CiAKIAlwb3MgPSBza2ItPmRhdGEgKyBoZHJfbGVuOwpAQCAtNDYyLDcgKzQ2MSw3IEBACiAJfQogCWl2MTYgPSAocG9zWzBdIDw8IDgpIHwgcG9zWzJdOwogCWl2MzIgPSBwb3NbNF0gfCAocG9zWzVdIDw8IDgpIHwgKHBvc1s2XSA8PCAxNikgfCAocG9zWzddIDw8IDI0KTsKLQlwb3MgKz0gODsKKwlwb3MgKz0gVEtJUF9IRFJfTEVOOwogCiAJaWYgKHRraXBfcmVwbGF5X2NoZWNrKGl2MzIsIGl2MTYsIHRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYpKSB7CiAjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCkBAIC01MjMsOCArNTIyLDggQEAKIAl0a2V5LT5yeF9pdjE2X25ldyA9IGl2MTY7CiAKIAkvKiBSZW1vdmUgSVYgYW5kIElDViAqLwotCW1lbW1vdmUoc2tiLT5kYXRhICsgOCwgc2tiLT5kYXRhLCBoZHJfbGVuKTsKLQlza2JfcHVsbChza2IsIDgpOworCW1lbW1vdmUoc2tiLT5kYXRhICsgVEtJUF9IRFJfTEVOLCBza2ItPmRhdGEsIGhkcl9sZW4pOworCXNrYl9wdWxsKHNrYiwgVEtJUF9IRFJfTEVOKTsKIAlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CiAKIAlyZXR1cm4ga2V5aWR4OwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggODJlNjAwMi4uNjJiYzg4NSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC0xNDgsMjIgKzE0OCwyMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CiAJY29uc3QgdTggKmJzc2lkID0gbWdtdC0+YnNzaWQ7CiAJaW50IGk7CisJYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKIAotCW5sODAyMTFfc2VuZF9kZWF1dGgocmRldiwgZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7Ci0KIAlpZiAod2Rldi0+Y3VycmVudF9ic3MgJiYKIAkgICAgbWVtY21wKHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgewogCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKIAkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CiAJCXdkZXYtPmN1cnJlbnRfYnNzID0gTlVMTDsKKwkJZm91bmQgPSB0cnVlOwogCX0gZWxzZSBmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgewogCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSAmJgogCQkgICAgbWVtY21wKHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGhfYnNzZXNbaV0pOwogCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViKTsKIAkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSBOVUxMOworCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gJiYKQEAgLTE3MSwxMCArMTcyLDE2IEBACiAJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pOwogCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViKTsKIAkJCXdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gPSBOVUxMOworCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm47CisKKwlubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9LRVJORUwpOworCiAJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKSB7CiAJCXUxNiByZWFzb25fY29kZTsKIAkJYm9vbCBmcm9tX2FwOwpAQCAtNjg0LDMgKzY5MSwyMDYgQEAKIAkJfQogCX0KIH0KKwordm9pZCBjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU2NCBjb29raWUsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwlubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWwocmRldiwgZGV2LCBjb29raWUsIGNoYW4sIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgICAgZHVyYXRpb24sIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3JlYWR5X29uX2NoYW5uZWwpOworCit2b2lkIGNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJdTY0IGNvb2tpZSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkJZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwlubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWxfY2FuY2VsKHJkZXYsIGRldiwgY29va2llLCBjaGFuLAorCQkJCQkgICAgICBjaGFubmVsX3R5cGUsIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQpOworCit2b2lkIGNmZzgwMjExX25ld19zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAorCQkgICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwlubDgwMjExX3NlbmRfc3RhX2V2ZW50KHJkZXYsIGRldiwgbWFjX2FkZHIsIHNpbmZvLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9uZXdfc3RhKTsKKworc3RydWN0IGNmZzgwMjExX2FjdGlvbl9yZWdpc3RyYXRpb24geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXUzMiBubHBpZDsKKworCWludCBtYXRjaF9sZW47CisKKwl1OCBtYXRjaFtdOworfTsKKworaW50IGNmZzgwMjExX21sbWVfcmVnaXN0ZXJfYWN0aW9uKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBzbmRfcGlkLAorCQkJCSAgY29uc3QgdTggKm1hdGNoX2RhdGEsIGludCBtYXRjaF9sZW4pCit7CisJc3RydWN0IGNmZzgwMjExX2FjdGlvbl9yZWdpc3RyYXRpb24gKnJlZywgKm5yZWc7CisJaW50IGVyciA9IDA7CisKKwlucmVnID0ga3phbGxvYyhzaXplb2YoKnJlZykgKyBtYXRjaF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghbnJlZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9ucywgbGlzdCkgeworCQlpbnQgbWxlbiA9IG1pbihtYXRjaF9sZW4sIHJlZy0+bWF0Y2hfbGVuKTsKKworCQlpZiAobWVtY21wKHJlZy0+bWF0Y2gsIG1hdGNoX2RhdGEsIG1sZW4pID09IDApIHsKKwkJCWVyciA9IC1FQUxSRUFEWTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGVycikgeworCQlrZnJlZShucmVnKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KG5yZWctPm1hdGNoLCBtYXRjaF9kYXRhLCBtYXRjaF9sZW4pOworCW5yZWctPm1hdGNoX2xlbiA9IG1hdGNoX2xlbjsKKwlucmVnLT5ubHBpZCA9IHNuZF9waWQ7CisJbGlzdF9hZGQoJm5yZWctPmxpc3QsICZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9ucyk7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgY2ZnODAyMTFfbWxtZV91bnJlZ2lzdGVyX2FjdGlvbnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIG5scGlkKQoreworCXN0cnVjdCBjZmc4MDIxMV9hY3Rpb25fcmVnaXN0cmF0aW9uICpyZWcsICp0bXA7CisKKwlzcGluX2xvY2tfYmgoJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZywgdG1wLCAmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnMsIGxpc3QpIHsKKwkJaWYgKHJlZy0+bmxwaWQgPT0gbmxwaWQpIHsKKwkJCWxpc3RfZGVsKCZyZWctPmxpc3QpOworCQkJa2ZyZWUocmVnKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKK30KKwordm9pZCBjZmc4MDIxMV9tbG1lX3B1cmdlX2FjdGlvbnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfYWN0aW9uX3JlZ2lzdHJhdGlvbiAqcmVnLCAqdG1wOworCisJc3Bpbl9sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWcsIHRtcCwgJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZyZWctPmxpc3QpOworCQlrZnJlZShyZWcpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKK30KKworaW50IGNmZzgwMjExX21sbWVfYWN0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKworCWlmIChyZGV2LT5vcHMtPmFjdGlvbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKGxlbiA8IDI0ICsgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZ210ID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBidWY7CisJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUMpIHsKKwkJLyogVmVyaWZ5IHRoYXQgd2UgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzdGluYXRpb24gQVAgKi8KKwkJaWYgKCF3ZGV2LT5jdXJyZW50X2JzcyB8fAorCQkgICAgbWVtY21wKHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIG1nbXQtPmJzc2lkLAorCQkJICAgRVRIX0FMRU4pICE9IDAgfHwKKwkJICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBtZ210LT5kYSwKKwkJCSAgIEVUSF9BTEVOKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9UQ09OTjsKKwl9CisKKwlpZiAobWVtY21wKG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUcmFuc21pdCB0aGUgQWN0aW9uIGZyYW1lIGFzIHJlcXVlc3RlZCBieSB1c2VyIHNwYWNlICovCisJcmV0dXJuIHJkZXYtPm9wcy0+YWN0aW9uKCZyZGV2LT53aXBoeSwgZGV2LCBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJIGJ1ZiwgbGVuLCBjb29raWUpOworfQorCitib29sIGNmZzgwMjExX3J4X2FjdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZnJlcSwgY29uc3QgdTggKmJ1ZiwKKwkJCXNpemVfdCBsZW4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9hY3Rpb25fcmVnaXN0cmF0aW9uICpyZWc7CisJY29uc3QgdTggKmFjdGlvbl9kYXRhOworCWludCBhY3Rpb25fZGF0YV9sZW47CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKKworCS8qIGZyYW1lIGxlbmd0aCAtIG1pbiBzaXplIGV4Y2x1ZGluZyBjYXRlZ29yeSAqLworCWFjdGlvbl9kYXRhX2xlbiA9IGxlbiAtIChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFIC0gMSk7CisKKwkvKiBhY3Rpb24gZGF0YSBzdGFydHMgd2l0aCBjYXRlZ29yeSAqLworCWFjdGlvbl9kYXRhID0gYnVmICsgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSAtIDE7CisKKwlzcGluX2xvY2tfYmgoJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9ucywgbGlzdCkgeworCQlpZiAocmVnLT5tYXRjaF9sZW4gPiBhY3Rpb25fZGF0YV9sZW4pCisJCQljb250aW51ZTsKKworCQlpZiAobWVtY21wKHJlZy0+bWF0Y2gsIGFjdGlvbl9kYXRhLCByZWctPm1hdGNoX2xlbikpCisJCQljb250aW51ZTsKKworCQkvKiBmb3VuZCBtYXRjaCEgKi8KKworCQkvKiBJbmRpY2F0ZSB0aGUgcmVjZWl2ZWQgQWN0aW9uIGZyYW1lIHRvIHVzZXIgc3BhY2UgKi8KKwkJaWYgKG5sODAyMTFfc2VuZF9hY3Rpb24ocmRldiwgZGV2LCByZWctPm5scGlkLCBmcmVxLAorCQkJCQlidWYsIGxlbiwgZ2ZwKSkKKwkJCWNvbnRpbnVlOworCisJCXJlc3VsdCA9IHRydWU7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3J4X2FjdGlvbik7CisKK3ZvaWQgY2ZnODAyMTFfYWN0aW9uX3R4X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYWNrLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKworCS8qIEluZGljYXRlIFRYIHN0YXR1cyBvZiB0aGUgQWN0aW9uIGZyYW1lIHRvIHVzZXIgc3BhY2UgKi8KKwlubDgwMjExX3NlbmRfYWN0aW9uX3R4X3N0YXR1cyhyZGV2LCBkZXYsIGNvb2tpZSwgYnVmLCBsZW4sIGFjaywgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfYWN0aW9uX3R4X3N0YXR1cyk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCBhNjAyODQzLi5lNDQ3ZGIwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgbmV3IG5ldGxpbmstYmFzZWQgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAgKgotICogQ29weXJpZ2h0IDIwMDYtMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgpAQCAtNTgsNyArNTgsNyBAQAogfQogCiAvKiBwb2xpY3kgZm9yIHRoZSBhdHRyaWJ1dGVzICovCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTkw4MDIxMV9BVFRSX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05MODAyMTFfQVRUUl9NQVgrMV0gPSB7CiAJW05MODAyMTFfQVRUUl9XSVBIWV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtOTDgwMjExX0FUVFJfV0lQSFlfTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsCiAJCQkJICAgICAgLmxlbiA9IDIwLTEgfSwKQEAgLTY5LDYgKzY5LDcgQEAKIAlbTkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX0xPTkddID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtOTDgwMjExX0FUVFJfV0lQSFlfRlJBR19USFJFU0hPTERdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkw4MDIxMV9BVFRSX1dJUEhZX1JUU19USFJFU0hPTERdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbTkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAogCVtOTDgwMjExX0FUVFJfSUZUWVBFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05MODAyMTFfQVRUUl9JRklOREVYXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCkBAIC0xNDEsMTEgKzE0MiwxNyBAQAogCVtOTDgwMjExX0FUVFJfNEFERFJdID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtOTDgwMjExX0FUVFJfUE1LSURdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJIC5sZW4gPSBXTEFOX1BNS0lEX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfRFVSQVRJT05dID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbTkw4MDIxMV9BVFRSX0NPT0tJRV0gPSB7IC50eXBlID0gTkxBX1U2NCB9LAorCVtOTDgwMjExX0FUVFJfVFhfUkFURVNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbTkw4MDIxMV9BVFRSX0ZSQU1FXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJCSAubGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0hdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIH0sCisJW05MODAyMTFfQVRUUl9QU19TVEFURV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUgYXR0cmlidXRlcyAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5Ci1ubDgwMjExX2tleV9wb2xpY3lbTkw4MDIxMV9LRVlfTUFYICsgMV0gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX2tleV9wb2xpY3lbTkw4MDIxMV9LRVlfTUFYICsgMV0gPSB7CiAJW05MODAyMTFfS0VZX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBXTEFOX01BWF9LRVlfTEVOIH0sCiAJW05MODAyMTFfS0VZX0lEWF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW05MODAyMTFfS0VZX0NJUEhFUl0gPSB7IC50eXBlID0gTkxBX1UzMiB9LApAQCAtNDQyLDYgKzQ0OSw4IEBACiAJCSAgICBkZXYtPndpcGh5LmZyYWdfdGhyZXNob2xkKTsKIAlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9SVFNfVEhSRVNIT0xELAogCQkgICAgZGV2LT53aXBoeS5ydHNfdGhyZXNob2xkKTsKKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTLAorCQkgICAgZGV2LT53aXBoeS5jb3ZlcmFnZV9jbGFzcyk7CiAKIAlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKIAkJICAgZGV2LT53aXBoeS5tYXhfc2Nhbl9zc2lkcyk7CkBAIC01NjksNiArNTc4LDkgQEAKIAlDTUQoc2V0X3Bta3NhLCBTRVRfUE1LU0EpOwogCUNNRChkZWxfcG1rc2EsIERFTF9QTUtTQSk7CiAJQ01EKGZsdXNoX3Bta3NhLCBGTFVTSF9QTUtTQSk7CisJQ01EKHJlbWFpbl9vbl9jaGFubmVsLCBSRU1BSU5fT05fQ0hBTk5FTCk7CisJQ01EKHNldF9iaXRyYXRlX21hc2ssIFNFVF9UWF9CSVRSQVRFX01BU0spOworCUNNRChhY3Rpb24sIEFDVElPTik7CiAJaWYgKGRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX05FVE5TX09LKSB7CiAJCWkrKzsKIAkJTkxBX1BVVF9VMzIobXNnLCBpLCBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMpOwpAQCAtNjgxLDYgKzY5Myw3IEBACiAJdTMyIGNoYW5nZWQ7CiAJdTggcmV0cnlfc2hvcnQgPSAwLCByZXRyeV9sb25nID0gMDsKIAl1MzIgZnJhZ190aHJlc2hvbGQgPSAwLCBydHNfdGhyZXNob2xkID0gMDsKKwl1OCBjb3ZlcmFnZV9jbGFzcyA9IDA7CiAKIAlydG5sX2xvY2soKTsKIApAQCAtODAzLDkgKzgxNiwxNiBAQAogCQljaGFuZ2VkIHw9IFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQ7CiAJfQogCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTU10pIHsKKwkJY292ZXJhZ2VfY2xhc3MgPSBubGFfZ2V0X3U4KAorCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTXSk7CisJCWNoYW5nZWQgfD0gV0lQSFlfUEFSQU1fQ09WRVJBR0VfQ0xBU1M7CisJfQorCiAJaWYgKGNoYW5nZWQpIHsKIAkJdTggb2xkX3JldHJ5X3Nob3J0LCBvbGRfcmV0cnlfbG9uZzsKIAkJdTMyIG9sZF9mcmFnX3RocmVzaG9sZCwgb2xkX3J0c190aHJlc2hvbGQ7CisJCXU4IG9sZF9jb3ZlcmFnZV9jbGFzczsKIAogCQlpZiAoIXJkZXYtPm9wcy0+c2V0X3dpcGh5X3BhcmFtcykgewogCQkJcmVzdWx0ID0gLUVPUE5PVFNVUFA7CkBAIC04MTYsNiArODM2LDcgQEAKIAkJb2xkX3JldHJ5X2xvbmcgPSByZGV2LT53aXBoeS5yZXRyeV9sb25nOwogCQlvbGRfZnJhZ190aHJlc2hvbGQgPSByZGV2LT53aXBoeS5mcmFnX3RocmVzaG9sZDsKIAkJb2xkX3J0c190aHJlc2hvbGQgPSByZGV2LT53aXBoeS5ydHNfdGhyZXNob2xkOworCQlvbGRfY292ZXJhZ2VfY2xhc3MgPSByZGV2LT53aXBoeS5jb3ZlcmFnZV9jbGFzczsKIAogCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX1JFVFJZX1NIT1JUKQogCQkJcmRldi0+d2lwaHkucmV0cnlfc2hvcnQgPSByZXRyeV9zaG9ydDsKQEAgLTgyNSw2ICs4NDYsOCBAQAogCQkJcmRldi0+d2lwaHkuZnJhZ190aHJlc2hvbGQgPSBmcmFnX3RocmVzaG9sZDsKIAkJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKQogCQkJcmRldi0+d2lwaHkucnRzX3RocmVzaG9sZCA9IHJ0c190aHJlc2hvbGQ7CisJCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fQ09WRVJBR0VfQ0xBU1MpCisJCQlyZGV2LT53aXBoeS5jb3ZlcmFnZV9jbGFzcyA9IGNvdmVyYWdlX2NsYXNzOwogCiAJCXJlc3VsdCA9IHJkZXYtPm9wcy0+c2V0X3dpcGh5X3BhcmFtcygmcmRldi0+d2lwaHksIGNoYW5nZWQpOwogCQlpZiAocmVzdWx0KSB7CkBAIC04MzIsNiArODU1LDcgQEAKIAkJCXJkZXYtPndpcGh5LnJldHJ5X2xvbmcgPSBvbGRfcmV0cnlfbG9uZzsKIAkJCXJkZXYtPndpcGh5LmZyYWdfdGhyZXNob2xkID0gb2xkX2ZyYWdfdGhyZXNob2xkOwogCQkJcmRldi0+d2lwaHkucnRzX3RocmVzaG9sZCA9IG9sZF9ydHNfdGhyZXNob2xkOworCQkJcmRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3MgPSBvbGRfY292ZXJhZ2VfY2xhc3M7CiAJCX0KIAl9CiAKQEAgLTE2MzcsNDIgKzE2NjEsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IG5sODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSkKLXsKLQlpbnQgbW9kdWxhdGlvbiwgc3RyZWFtcywgYml0cmF0ZTsKLQotCWlmICghKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCi0JCXJldHVybiByYXRlLT5sZWdhY3k7Ci0KLQkvKiB0aGUgZm9ybXVsYSBiZWxvdyBkb2VzIG9ubHkgd29yayBmb3IgTUNTIHZhbHVlcyBzbWFsbGVyIHRoYW4gMzIgKi8KLQlpZiAocmF0ZS0+bWNzID49IDMyKQotCQlyZXR1cm4gMDsKLQotCW1vZHVsYXRpb24gPSByYXRlLT5tY3MgJiA3OwotCXN0cmVhbXMgPSAocmF0ZS0+bWNzID4+IDMpICsgMTsKLQotCWJpdHJhdGUgPSAocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfNDBfTUhaX1dJRFRIKSA/Ci0JCQkxMzUwMDAwMCA6IDY1MDAwMDA7Ci0KLQlpZiAobW9kdWxhdGlvbiA8IDQpCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAxKTsKLQllbHNlIGlmIChtb2R1bGF0aW9uID09IDQpCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAyKTsKLQllbHNlCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAzKTsKLQotCWJpdHJhdGUgKj0gc3RyZWFtczsKLQotCWlmIChyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSSkKLQkJYml0cmF0ZSA9IChiaXRyYXRlIC8gOSkgKiAxMDsKLQotCS8qIGRvIE5PVCByb3VuZCBkb3duIGhlcmUgKi8KLQlyZXR1cm4gKGJpdHJhdGUgKyA1MDAwMCkgLyAxMDAwMDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQlpbnQgZmxhZ3MsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJdTggKm1hY19hZGRyLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKKwkJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICpzaW5mb2F0dHIsICp0eHJhdGU7CkBAIC0xNzE2LDggKzE3MDcsOCBAQAogCQlpZiAoIXR4cmF0ZSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCS8qIG5sODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUgd2lsbCByZXR1cm4gMCBmb3IgbWNzID49IDMyICovCi0JCWJpdHJhdGUgPSBubDgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby0+dHhyYXRlKTsKKwkJLyogY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUgd2lsbCByZXR1cm4gMCBmb3IgbWNzID49IDMyICovCisJCWJpdHJhdGUgPSBjZmc4MDIxMV9jYWxjdWxhdGVfYml0cmF0ZSgmc2luZm8tPnR4cmF0ZSk7CiAJCWlmIChiaXRyYXRlID4gMCkKIAkJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURSwgYml0cmF0ZSk7CiAKQEAgLTIwMjMsNiArMjAxNCw5IEBACiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pCisJCXJldHVybiAtRUlOVkFMOworCiAJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAJcGFyYW1zLnN1cHBvcnRlZF9yYXRlcyA9CiAJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7CkBAIC0yMDMxLDExICsyMDI1LDkgQEAKIAlwYXJhbXMubGlzdGVuX2ludGVydmFsID0KIAkJbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdKTsKIAotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pIHsKLQkJcGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSk7Ci0JCWlmICghcGFyYW1zLmFpZCB8fCBwYXJhbXMuYWlkID4gSUVFRTgwMjExX01BWF9BSUQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJcGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSk7CisJaWYgKCFwYXJhbXMuYWlkIHx8IHBhcmFtcy5haWQgPiBJRUVFODAyMTFfTUFYX0FJRCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKQogCQlwYXJhbXMuaHRfY2FwYSA9CkBAIC0yMDUwLDYgKzIwNDIsMTIgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTIwNTcsMzUgKzIwNTUsNiBAQAogCS8qIHZhbGlkYXRlIHNldHRpbmdzICovCiAJZXJyID0gMDsKIAotCXN3aXRjaCAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKLQkJLyogYWxsIG9rIGJ1dCBtdXN0IGhhdmUgQUlEICovCi0JCWlmICghcGFyYW1zLmFpZCkKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJLyogZGlzYWxsb3cgdGhpbmdzIG1lc2ggZG9lc24ndCBzdXBwb3J0ICovCi0JCWlmIChwYXJhbXMudmxhbikKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMuYWlkKQotCQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKHBhcmFtcy5odF9jYXBhKQotCQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPj0gMCkKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMuc3VwcG9ydGVkX3JhdGVzKQotCQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzaykKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KIAlpZiAoIXJkZXYtPm9wcy0+YWRkX3N0YXRpb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwpAQCAtMjEyNiw4ICsyMDk1LDcgQEAKIAkJZ290byBvdXRfcnRubDsKIAogCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgotCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCi0JICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNTE0LDggKzI0ODIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeQotCXJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXSA9IHsKIAlbTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9TVEFSVF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfRU5EXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LApAQCAtMjU4MywxMiArMjU1MCw2IEBACiAKIAlkYXRhID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFR19BTFBIQTJdKTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQotCS8qIFdlIGlnbm9yZSB3b3JsZCByZWdkb20gcmVxdWVzdHMgd2l0aCB0aGUgb2xkIHJlZ2RvbSBzZXR1cCAqLwotCWlmIChpc193b3JsZF9yZWdkb20oZGF0YSkpCi0JCXJldHVybiAtRUlOVkFMOwotI2VuZGlmCi0KIAlyID0gcmVndWxhdG9yeV9oaW50X3VzZXIoZGF0YSk7CiAKIAlyZXR1cm4gcjsKQEAgLTI2OTAsOCArMjY1MSw3IEBACiAJfSBcCiB9IHdoaWxlICgwKTtcCiAKLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeQotbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5W05MODAyMTFfTUVTSENPTkZfQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX21lc2hjb25mX3BhcmFtc19wb2xpY3lbTkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWCsxXSA9IHsKIAlbTkw4MDIxMV9NRVNIQ09ORl9SRVRSWV9USU1FT1VUXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAJW05MODAyMTFfTUVTSENPTkZfQ09ORklSTV9USU1FT1VUXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAJW05MODAyMTFfTUVTSENPTkZfSE9MRElOR19USU1FT1VUXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCkBAIC0zMTgyLDYgKzMxNDIsMTAgQEAKIAkJTkxBX1BVVChtc2csIE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTLAogCQkJcmVzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCiAJCQlyZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAocmVzLT5iZWFjb25faWVzICYmIHJlcy0+bGVuX2JlYWNvbl9pZXMgJiYKKwkgICAgcmVzLT5iZWFjb25faWVzICE9IHJlcy0+aW5mb3JtYXRpb25fZWxlbWVudHMpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19CRUFDT05fSUVTLAorCQkJcmVzLT5sZW5fYmVhY29uX2llcywgcmVzLT5iZWFjb25faWVzKTsKIAlpZiAocmVzLT50c2YpCiAJCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9CU1NfVFNGLCByZXMtPnRzZik7CiAJaWYgKHJlcy0+YmVhY29uX2ludGVydmFsKQpAQCAtMzU4Niw2ICszNTUwLDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCXN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgY3J5cHRvOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwgKmZpeGVkY2hhbjsKIAljb25zdCB1OCAqYnNzaWQsICpzc2lkLCAqaWUgPSBOVUxMLCAqcHJldl9ic3NpZCA9IE5VTEw7CkBAIC0zNjMxLDcgKzM1OTYsOCBAQAogCX0KIAogCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKLQlmaXhlZGNoYW4gPSByZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgTlVMTCk7CisJd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlmaXhlZGNoYW4gPSByZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgd2Rldik7CiAJaWYgKGZpeGVkY2hhbiAmJiBjaGFuICE9IGZpeGVkY2hhbikgewogCQllcnIgPSAtRUJVU1k7CiAJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwpAQCAtNDMyMiw2ICs0Mjg4LDQ5NiBAQAogCiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisJdTY0IGNvb2tpZTsKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKKwl1MzIgZnJlcSwgZHVyYXRpb247CisJaW50IGVycjsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdIHx8CisJICAgICFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRFVSQVRJT05dKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWR1cmF0aW9uID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0RVUkFUSU9OXSk7CisKKwkvKgorCSAqIFdlIHNob3VsZCBiZSBvbiB0aGF0IGNoYW5uZWwgZm9yIGF0IGxlYXN0IG9uZSBqaWZmaWUsCisJICogYW5kIG1vcmUgdGhhbiA1IHNlY29uZHMgc2VlbXMgZXhjZXNzaXZlLgorCSAqLworCWlmICghZHVyYXRpb24gfHwgIW1zZWNzX3RvX2ppZmZpZXMoZHVyYXRpb24pIHx8IGR1cmF0aW9uID4gNTAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIXJkZXYtPm9wcy0+cmVtYWluX29uX2NoYW5uZWwpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEVdKSB7CisJCWNoYW5uZWxfdHlwZSA9IG5sYV9nZXRfdTMyKAorCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRV0pOworCQlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9IVDIwICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUykKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwl9CisKKwlmcmVxID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKTsKKwljaGFuID0gcmRldl9mcmVxX3RvX2NoYW4ocmRldiwgZnJlcSwgY2hhbm5lbF90eXBlKTsKKwlpZiAoY2hhbiA9PSBOVUxMKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfUkVNQUlOX09OX0NIQU5ORUwpOworCisJaWYgKElTX0VSUihoZHIpKSB7CisJCWVyciA9IFBUUl9FUlIoaGRyKTsKKwkJZ290byBmcmVlX21zZzsKKwl9CisKKwllcnIgPSByZGV2LT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKCZyZGV2LT53aXBoeSwgZGV2LCBjaGFuLAorCQkJCQkgICBjaGFubmVsX3R5cGUsIGR1cmF0aW9uLCAmY29va2llKTsKKworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9tc2c7CisKKwlOTEFfUFVUX1U2NChtc2csIE5MODAyMTFfQVRUUl9DT09LSUUsIGNvb2tpZSk7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZXJyID0gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOworCWdvdG8gb3V0OworCisgbmxhX3B1dF9mYWlsdXJlOgorCWVyciA9IC1FTk9CVUZTOworIGZyZWVfbXNnOgorCW5sbXNnX2ZyZWUobXNnKTsKKyBvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1NjQgY29va2llOworCWludCBlcnI7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9DT09LSUVdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghcmRldi0+b3BzLT5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJY29va2llID0gbmxhX2dldF91NjQoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NPT0tJRV0pOworCisJZXJyID0gcmRldi0+b3BzLT5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoJnJkZXYtPndpcGh5LCBkZXYsIGNvb2tpZSk7CisKKyBvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHUzMiByYXRlc2V0X3RvX21hc2soc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkgICB1OCAqcmF0ZXMsIHU4IHJhdGVzX2xlbikKK3sKKwl1OCBpOworCXUzMiBtYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCByYXRlc19sZW47IGkrKykgeworCQlpbnQgcmF0ZSA9IChyYXRlc1tpXSAmIDB4N2YpICogNTsKKwkJaW50IHJpZHg7CisJCWZvciAocmlkeCA9IDA7IHJpZHggPCBzYmFuZC0+bl9iaXRyYXRlczsgcmlkeCsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnNyYXRlID0KKwkJCQkmc2JhbmQtPmJpdHJhdGVzW3JpZHhdOworCQkJaWYgKHJhdGUgPT0gc3JhdGUtPmJpdHJhdGUpIHsKKwkJCQltYXNrIHw9IDEgPDwgcmlkeDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocmlkeCA9PSBzYmFuZC0+bl9iaXRyYXRlcykKKwkJCXJldHVybiAwOyAvKiByYXRlIG5vdCBmb3VuZCAqLworCX0KKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV90eGF0dHJfcG9saWN5W05MODAyMTFfVFhSQVRFX01BWCArIDFdID0geworCVtOTDgwMjExX1RYUkFURV9MRUdBQ1ldID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJICAgIC5sZW4gPSBOTDgwMjExX01BWF9TVVBQX1JBVEVTIH0sCit9OworCitzdGF0aWMgaW50IG5sODAyMTFfc2V0X3R4X2JpdHJhdGVfbWFzayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfVFhSQVRFX01BWCArIDFdOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrIG1hc2s7CisJaW50IGVyciwgcmVtLCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5sYXR0ciAqdHhfcmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1RYX1JBVEVTXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghcmRldi0+b3BzLT5zZXRfYml0cmF0ZV9tYXNrKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIHVubG9jazsKKwl9CisKKwltZW1zZXQoJm1hc2ssIDAsIHNpemVvZihtYXNrKSk7CisJLyogRGVmYXVsdCB0byBhbGwgcmF0ZXMgZW5hYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBpKyspIHsKKwkJc2JhbmQgPSByZGV2LT53aXBoeS5iYW5kc1tpXTsKKwkJbWFzay5jb250cm9sW2ldLmxlZ2FjeSA9CisJCQlzYmFuZCA/ICgxIDw8IHNiYW5kLT5uX2JpdHJhdGVzKSAtIDEgOiAwOworCX0KKworCS8qCisJICogVGhlIG5lc3RlZCBhdHRyaWJ1dGUgdXNlcyBlbnVtIG5sODAyMTFfYmFuZCBhcyB0aGUgaW5kZXguIFRoaXMgbWFwcworCSAqIGRpcmVjdGx5IHRvIHRoZSBlbnVtIGllZWU4MDIxMV9iYW5kIHZhbHVlcyB1c2VkIGluIGNmZzgwMjExLgorCSAqLworCW5sYV9mb3JfZWFjaF9uZXN0ZWQodHhfcmF0ZXMsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9UWF9SQVRFU10sIHJlbSkKKwl7CisJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IG5sYV90eXBlKHR4X3JhdGVzKTsKKwkJaWYgKGJhbmQgPCAwIHx8IGJhbmQgPj0gSUVFRTgwMjExX05VTV9CQU5EUykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCXNiYW5kID0gcmRldi0+d2lwaHkuYmFuZHNbYmFuZF07CisJCWlmIChzYmFuZCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJbmxhX3BhcnNlKHRiLCBOTDgwMjExX1RYUkFURV9NQVgsIG5sYV9kYXRhKHR4X3JhdGVzKSwKKwkJCSAgbmxhX2xlbih0eF9yYXRlcyksIG5sODAyMTFfdHhhdHRyX3BvbGljeSk7CisJCWlmICh0YltOTDgwMjExX1RYUkFURV9MRUdBQ1ldKSB7CisJCQltYXNrLmNvbnRyb2xbYmFuZF0ubGVnYWN5ID0gcmF0ZXNldF90b19tYXNrKAorCQkJCXNiYW5kLAorCQkJCW5sYV9kYXRhKHRiW05MODAyMTFfVFhSQVRFX0xFR0FDWV0pLAorCQkJCW5sYV9sZW4odGJbTkw4MDIxMV9UWFJBVEVfTEVHQUNZXSkpOworCQkJaWYgKG1hc2suY29udHJvbFtiYW5kXS5sZWdhY3kgPT0gMCkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisJCX0KKwl9CisKKwllcnIgPSByZGV2LT5vcHMtPnNldF9iaXRyYXRlX21hc2soJnJkZXYtPndpcGh5LCBkZXYsIE5VTEwsICZtYXNrKTsKKworIHVubG9jazoKKwlkZXZfcHV0KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfcmVnaXN0ZXJfYWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGVycjsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX01BVENIXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0hdKSA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIG5vdCBtdWNoIHBvaW50IGluIHJlZ2lzdGVyaW5nIGlmIHdlIGNhbid0IHJlcGx5ICovCisJaWYgKCFyZGV2LT5vcHMtPmFjdGlvbikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gY2ZnODAyMTFfbWxtZV9yZWdpc3Rlcl9hY3Rpb24oZGV2LT5pZWVlODAyMTFfcHRyLCBpbmZvLT5zbmRfcGlkLAorCQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX01BVENIXSksCisJCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9NQVRDSF0pKTsKKyBvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKKwl1MzIgZnJlcTsKKwlpbnQgZXJyOworCXZvaWQgKmhkcjsKKwl1NjQgY29va2llOworCXN0cnVjdCBza19idWZmICptc2c7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0gfHwKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIXJkZXYtPm9wcy0+YWN0aW9uKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRV0pIHsKKwkJY2hhbm5lbF90eXBlID0gbmxhX2dldF91MzIoCisJCQlpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFXSk7CisJCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUMjAgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCX0KKworCWZyZXEgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pOworCWNoYW4gPSByZGV2X2ZyZXFfdG9fY2hhbihyZGV2LCBmcmVxLCBjaGFubmVsX3R5cGUpOworCWlmIChjaGFuID09IE5VTEwpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAorCQkJICAgICBOTDgwMjExX0NNRF9BQ1RJT04pOworCisJaWYgKElTX0VSUihoZHIpKSB7CisJCWVyciA9IFBUUl9FUlIoaGRyKTsKKwkJZ290byBmcmVlX21zZzsKKwl9CisJZXJyID0gY2ZnODAyMTFfbWxtZV9hY3Rpb24ocmRldiwgZGV2LCBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJICAgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSksCisJCQkJICAgbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKSwKKwkJCQkgICAmY29va2llKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfbXNnOworCisJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0FUVFJfQ09PS0lFLCBjb29raWUpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKKwlnb3RvIG91dDsKKworIG5sYV9wdXRfZmFpbHVyZToKKwllcnIgPSAtRU5PQlVGUzsKKyBmcmVlX21zZzoKKwlubG1zZ19mcmVlKG1zZyk7Cisgb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3NldF9wb3dlcl9zYXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1OCBwc19zdGF0ZTsKKwlib29sIHN0YXRlOworCWludCBlcnI7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9QU19TVEFURV0pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHNfc3RhdGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUFNfU1RBVEVdKTsKKworCWlmIChwc19zdGF0ZSAhPSBOTDgwMjExX1BTX0RJU0FCTEVEICYmIHBzX3N0YXRlICE9IE5MODAyMTFfUFNfRU5BQkxFRCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3JkZXY7CisKKwl3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIHVubG9ja19yZGV2OworCX0KKworCXN0YXRlID0gKHBzX3N0YXRlID09IE5MODAyMTFfUFNfRU5BQkxFRCkgPyB0cnVlIDogZmFsc2U7CisKKwlpZiAoc3RhdGUgPT0gd2Rldi0+cHMpCisJCWdvdG8gdW5sb2NrX3JkZXY7CisKKwl3ZGV2LT5wcyA9IHN0YXRlOworCisJaWYgKHJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQod2Rldi0+d2lwaHksIGRldiwgd2Rldi0+cHMsCisJCQkJICAgICAgd2Rldi0+cHNfdGltZW91dCkpCisJCS8qIGFzc3VtZSB0aGlzIG1lYW5zIGl0J3Mgb2ZmICovCisJCXdkZXYtPnBzID0gZmFsc2U7CisKK3VubG9ja19yZGV2OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKKwlydG5sX3VubG9jaygpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2dldF9wb3dlcl9zYXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWVudW0gbmw4MDIxMV9wc19zdGF0ZSBwc19zdGF0ZTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCXdkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlpZiAoIXJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1BPV0VSX1NBVkUpOworCWlmICghaGRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9tc2c7CisJfQorCisJaWYgKHdkZXYtPnBzKQorCQlwc19zdGF0ZSA9IE5MODAyMTFfUFNfRU5BQkxFRDsKKwllbHNlCisJCXBzX3N0YXRlID0gTkw4MDIxMV9QU19ESVNBQkxFRDsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1BTX1NUQVRFLCBwc19zdGF0ZSk7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZXJyID0gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOworCWdvdG8gb3V0OworCitubGFfcHV0X2ZhaWx1cmU6CisJZXJyID0gLUVOT0JVRlM7CisKK2ZyZWVfbXNnOgorCW5sbXNnX2ZyZWUobXNnKTsKKworb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKKwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmw4MDIxMV9vcHNbXSA9IHsKIAl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfV0lQSFksCkBAIC00NTg0LDggKzUwNDAsNTAgQEAKIAkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJfSwKLQorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMLAorCQkuZG9pdCA9IG5sODAyMTFfcmVtYWluX29uX2NoYW5uZWwsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfQ0FOQ0VMX1JFTUFJTl9PTl9DSEFOTkVMLAorCQkuZG9pdCA9IG5sODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9UWF9CSVRSQVRFX01BU0ssCisJCS5kb2l0ID0gbmw4MDIxMV9zZXRfdHhfYml0cmF0ZV9tYXNrLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1JFR0lTVEVSX0FDVElPTiwKKwkJLmRvaXQgPSBubDgwMjExX3JlZ2lzdGVyX2FjdGlvbiwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9BQ1RJT04sCisJCS5kb2l0ID0gbmw4MDIxMV9hY3Rpb24sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1BPV0VSX1NBVkUsCisJCS5kb2l0ID0gbmw4MDIxMV9zZXRfcG93ZXJfc2F2ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfUE9XRVJfU0FWRSwKKwkJLmRvaXQgPSBubDgwMjExX2dldF9wb3dlcl9zYXZlLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS8qIGNhbiBiZSByZXRyaWV2ZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzICovCisJfSwKIH07CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9tbG1lX21jZ3JwID0gewogCS5uYW1lID0gIm1sbWUiLAogfTsKQEAgLTUxNzMsNiArNTY3MSwxOTMgQEAKIAlubG1zZ19mcmVlKG1zZyk7CiB9CiAKK3N0YXRpYyB2b2lkIG5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbl9ldmVudCgKKwlpbnQgY21kLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IGNvb2tpZSwKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJdW5zaWduZWQgaW50IGR1cmF0aW9uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIGNtZCk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLCBjaGFuLT5jZW50ZXJfZnJlcSk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFLCBjaGFubmVsX3R5cGUpOworCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9BVFRSX0NPT0tJRSwgY29va2llKTsKKworCWlmIChjbWQgPT0gTkw4MDIxMV9DTURfUkVNQUlOX09OX0NIQU5ORUwpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0RVUkFUSU9OLCBkdXJhdGlvbik7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgY29va2llLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCkKK3sKKwlubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5fZXZlbnQoTkw4MDIxMV9DTURfUkVNQUlOX09OX0NIQU5ORUwsCisJCQkJCSAgcmRldiwgbmV0ZGV2LCBjb29raWUsIGNoYW4sCisJCQkJCSAgY2hhbm5lbF90eXBlLCBkdXJhdGlvbiwgZ2ZwKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWxfY2FuY2VsKAorCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwl1NjQgY29va2llLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsIGdmcF90IGdmcCkKK3sKKwlubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5fZXZlbnQoTkw4MDIxMV9DTURfQ0FOQ0VMX1JFTUFJTl9PTl9DSEFOTkVMLAorCQkJCQkgIHJkZXYsIG5ldGRldiwgY29va2llLCBjaGFuLAorCQkJCQkgIGNoYW5uZWxfdHlwZSwgMCwgZ2ZwKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfc3RhX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24obXNnLCAwLCAwLCAwLCBkZXYsIG1hY19hZGRyLCBzaW5mbykgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworfQorCitpbnQgbmw4MDIxMV9zZW5kX2FjdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgbmxwaWQsCisJCQlpbnQgZnJlcSwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCWludCBlcnI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfQUNUSU9OKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwgZnJlcSk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9GUkFNRSwgbGVuLCBidWYpOworCisJZXJyID0gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWlmIChlcnIgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBnZW5sbXNnX3VuaWNhc3Qod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgbmxwaWQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9hY3Rpb25fdHhfc3RhdHVzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgY29va2llLAorCQkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYWNrLAorCQkJCSAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfQUNUSU9OX1RYX1NUQVRVUyk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FLCBsZW4sIGJ1Zik7CisJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0FUVFJfQ09PS0lFLCBjb29raWUpOworCWlmIChhY2spCisJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfQVRUUl9BQ0spOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9uZXRsaW5rX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhdGUsCisJCQkJICB2b2lkICpfbm90aWZ5KQoreworCXN0cnVjdCBuZXRsaW5rX25vdGlmeSAqbm90aWZ5ID0gX25vdGlmeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKworCWlmIChzdGF0ZSAhPSBORVRMSU5LX1VSRUxFQVNFKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpCisJCQljZmc4MDIxMV9tbG1lX3VucmVnaXN0ZXJfYWN0aW9ucyh3ZGV2LCBub3RpZnktPnBpZCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBubDgwMjExX25ldGxpbmtfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBubDgwMjExX25ldGxpbmtfbm90aWZ5LAorfTsKKwogLyogaW5pdGlhbGlzYXRpb24vZXhpdCBmdW5jdGlvbnMgKi8KIAogaW50IG5sODAyMTFfaW5pdCh2b2lkKQpAQCAtNTIwNiw2ICs1ODkxLDEwIEBACiAJCWdvdG8gZXJyX291dDsKICNlbmRpZgogCisJZXJyID0gbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmbmw4MDIxMV9uZXRsaW5rX25vdGlmaWVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKIAlyZXR1cm4gMDsKICBlcnJfb3V0OgogCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJm5sODAyMTFfZmFtKTsKQEAgLTUyMTQsNSArNTkwMyw2IEBACiAKIHZvaWQgbmw4MDIxMV9leGl0KHZvaWQpCiB7CisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZubDgwMjExX25ldGxpbmtfbm90aWZpZXIpOwogCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJm5sODAyMTFfZmFtKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmggYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCmluZGV4IDQ0Y2MyYTcuLjRjYTUxMTEwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKQEAgLTU5LDQgKzU5LDI3IEBACiAJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAkJCSAgICAgZ2ZwX3QgZ2ZwKTsKIAordm9pZCBubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICB1NjQgY29va2llLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbm5lbF9jYW5jZWwoCisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXU2NCBjb29raWUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwgZ2ZwX3QgZ2ZwKTsKKwordm9pZCBubDgwMjExX3NlbmRfc3RhX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7CisKK2ludCBubDgwMjExX3NlbmRfYWN0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBubHBpZCwgaW50IGZyZXEsCisJCQljb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfYWN0aW9uX3R4X3N0YXR1cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IGNvb2tpZSwKKwkJCQkgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBib29sIGFjaywKKwkJCQkgICBnZnBfdCBnZnApOworCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYyBiL25ldC93aXJlbGVzcy9yYWRpb3RhcC5jCmluZGV4IGY1OTE4NzFhLi4xMzMyYzQ0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYworKysgYi9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYwpAQCAtMiw2ICsyLDE2IEBACiAgKiBSYWRpb3RhcCBwYXJzZXIKICAqCiAgKiBDb3B5cmlnaHQgMjAwNwkJQW5keSBHcmVlbiA8YW5keUB3YXJtY2F0LmNvbT4KKyAqIENvcHlyaWdodCAyMDA5CQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEJTRAorICogbGljZW5zZS4KKyAqCisgKiBTZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTEwLDYgKzIwLDM1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHJlbGF0ZWQgZGVmcyBhcmUgaW4gaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJhZGlvdGFwX2FsaWduX3NpemUgcnRhcF9uYW1lc3BhY2Vfc2l6ZXNbXSA9IHsKKwlbSUVFRTgwMjExX1JBRElPVEFQX1RTRlRdID0geyAuYWxpZ24gPSA4LCAuc2l6ZSA9IDgsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9GTEFHU10gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX1JBVEVdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSA0LCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfRkhTU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUxdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0VdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFldID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTl0gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQV0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTF0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1NdID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9UWF9GTEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX1JUU19SRVRSSUVTXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCS8qCisJICogYWRkIG1vcmUgaGVyZSBhcyB0aGV5IGFyZSBkZWZpbmVkIGluIHJhZGlvdGFwLmgKKwkgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSByYWRpb3RhcF9ucyA9IHsKKwkubl9iaXRzID0gc2l6ZW9mKHJ0YXBfbmFtZXNwYWNlX3NpemVzKSAvIHNpemVvZihydGFwX25hbWVzcGFjZV9zaXplc1swXSksCisJLmFsaWduX3NpemUgPSBydGFwX25hbWVzcGFjZV9zaXplcywKK307CisKIC8qKgogICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQgLSByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgaW5pdGlhbGl6YXRpb24KICAqIEBpdGVyYXRvcjogcmFkaW90YXBfaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZQpAQCAtNTAsOSArODksOSBAQAogICovCiAKIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXBfaGVhZGVyLAotICAgIGludCBtYXhfbGVuZ3RoKQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcF9oZWFkZXIsCisJaW50IG1heF9sZW5ndGgsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKnZucykKIHsKIAkvKiBMaW51eCBvbmx5IHN1cHBvcnRzIHZlcnNpb24gMCByYWRpb3RhcCBmb3JtYXQgKi8KIAlpZiAocmFkaW90YXBfaGVhZGVyLT5pdF92ZXJzaW9uKQpAQCAtNjIsMTkgKzEwMSwyNCBAQAogCWlmIChtYXhfbGVuZ3RoIDwgZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaXRlcmF0b3ItPnJ0aGVhZGVyID0gcmFkaW90YXBfaGVhZGVyOwotCWl0ZXJhdG9yLT5tYXhfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbik7Ci0JaXRlcmF0b3ItPmFyZ19pbmRleCA9IDA7Ci0JaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZyYWRpb3RhcF9oZWFkZXItPml0X3ByZXNlbnQpOwotCWl0ZXJhdG9yLT5hcmcgPSAodTggKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7Ci0JaXRlcmF0b3ItPnRoaXNfYXJnID0gTlVMTDsKKwlpdGVyYXRvci0+X3J0aGVhZGVyID0gcmFkaW90YXBfaGVhZGVyOworCWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNigmcmFkaW90YXBfaGVhZGVyLT5pdF9sZW4pOworCWl0ZXJhdG9yLT5fYXJnX2luZGV4ID0gMDsKKwlpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZyYWRpb3RhcF9oZWFkZXItPml0X3ByZXNlbnQpOworCWl0ZXJhdG9yLT5fYXJnID0gKHVpbnQ4X3QgKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7CisJaXRlcmF0b3ItPl9yZXNldF9vbl9leHQgPSAwOworCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXAgPSAmcmFkaW90YXBfaGVhZGVyLT5pdF9wcmVzZW50OworCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXArKzsKKwlpdGVyYXRvci0+X3ZucyA9IHZuczsKKwlpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPSAmcmFkaW90YXBfbnM7CisJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMTsKIAogCS8qIGZpbmQgcGF5bG9hZCBzdGFydCBhbGxvd2luZyBmb3IgZXh0ZW5kZWQgYml0bWFwKHMpICovCiAKLQlpZiAodW5saWtlbHkoaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSkgewotCQl3aGlsZSAoZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5hcmcpICYKLQkJICAgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7Ci0JCQlpdGVyYXRvci0+YXJnICs9IHNpemVvZih1MzIpOworCWlmIChpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7CisJCXdoaWxlIChnZXRfdW5hbGlnbmVkX2xlMzIoaXRlcmF0b3ItPl9hcmcpICYKKwkJCQkJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0VYVCkpIHsKKwkJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemVvZih1aW50MzJfdCk7CiAKIAkJCS8qCiAJCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUgdGhlIHByZXNlbnQgYml0bWFwcwpAQCAtODIsMTIgKzEyNiwxMyBAQAogCQkJICogc3RhdGVkIHJhZGlvdGFwIGhlYWRlciBsZW5ndGgKIAkJCSAqLwogCi0JCQlpZiAoKCh1bG9uZylpdGVyYXRvci0+YXJnIC0KLQkJCSAgICAgKHVsb25nKWl0ZXJhdG9yLT5ydGhlYWRlcikgPiBpdGVyYXRvci0+bWF4X2xlbmd0aCkKKwkJCWlmICgodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X2FyZyAtCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlciA+CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaXRlcmF0b3ItPmFyZyArPSBzaXplb2YodTMyKTsKKwkJaXRlcmF0b3ItPl9hcmcgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAogCQkvKgogCQkgKiBubyBuZWVkIHRvIGNoZWNrIGFnYWluIGZvciBibG93aW5nIHBhc3Qgc3RhdGVkIHJhZGlvdGFwCkBAIC05NiwxMiArMTQxLDM2IEBACiAJCSAqLwogCX0KIAorCWl0ZXJhdG9yLT50aGlzX2FyZyA9IGl0ZXJhdG9yLT5fYXJnOworCiAJLyogd2UgYXJlIGFsbCBpbml0aWFsaXplZCBoYXBwaWx5ICovCiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQpOwogCitzdGF0aWMgdm9pZCBmaW5kX25zKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAorCQkgICAgdWludDMyX3Qgb3VpLCB1aW50OF90IHN1Ym5zKQoreworCWludCBpOworCisJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gTlVMTDsKKworCWlmICghaXRlcmF0b3ItPl92bnMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRvci0+X3Zucy0+bl9uczsgaSsrKSB7CisJCWlmIChpdGVyYXRvci0+X3Zucy0+bnNbaV0ub3VpICE9IG91aSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXRlcmF0b3ItPl92bnMtPm5zW2ldLnN1Ym5zICE9IHN1Ym5zKQorCQkJY29udGludWU7CisKKwkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gJml0ZXJhdG9yLT5fdm5zLT5uc1tpXTsKKwkJYnJlYWs7CisJfQorfQorCisKIAogLyoqCiAgKiBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfbmV4dCAtIHJldHVybiBuZXh0IHJhZGlvdGFwIHBhcnNlciBpdGVyYXRvciBhcmcKQEAgLTEyNyw5OSArMTk2LDgwIEBACiAgKi8KIAogaW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KAotICAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKQogewotCi0JLyoKLQkgKiBzbWFsbCBsZW5ndGggbG9va3VwIHRhYmxlIGZvciBhbGwgcmFkaW90YXAgdHlwZXMgd2UgaGVhcmQgb2YKLQkgKiBzdGFydGluZyBmcm9tIGIwIGluIHRoZSBiaXRtYXAsIHNvIHdlIGNhbiB3YWxrIHRoZSBwYXlsb2FkCi0JICogYXJlYSBvZiB0aGUgcmFkaW90YXAgaGVhZGVyCi0JICoKLQkgKiBUaGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIHBhZCBhcmdzLCBzbyB0aGF0IGFyZ3MKLQkgKiBvZiBhIGdpdmVuIGxlbmd0aCBtdXN0IGJlZ2luIGF0IGEgYm91bmRhcnkgb2YgdGhhdCBsZW5ndGgKLQkgKiAtLSBidXQgbm90ZSB0aGF0IGNvbXBvdW5kIGFyZ3MgYXJlIGFsbG93ZWQgKGVnLCAyIHggdTE2Ci0JICogZm9yIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSBzbyB0b3RhbCBhcmcgbGVuZ3RoIGlzIG5vdAotCSAqIGEgcmVsaWFibGUgaW5kaWNhdG9yIG9mIGFsaWdubWVudCByZXF1aXJlbWVudC4KLQkgKgotCSAqIHVwcGVyIG55YmJsZTogY29udGVudCBhbGlnbm1lbnQgZm9yIGFyZwotCSAqIGxvd2VyIG55YmJsZTogY29udGVudCBsZW5ndGggZm9yIGFyZwotCSAqLwotCi0Jc3RhdGljIGNvbnN0IHU4IHJ0X3NpemVzW10gPSB7Ci0JCVtJRUVFODAyMTFfUkFESU9UQVBfVFNGVF0gPSAweDg4LAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfUkFURV0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUxdID0gMHgyNCwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9GSFNTXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTF0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRV0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWV0gPSAweDIyLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT05dID0gMHgyMiwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVJdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0VdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHU10gPSAweDIyLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVNdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9EQVRBX1JFVFJJRVNdID0gMHgxMSwKLQkJLyoKLQkJICogYWRkIG1vcmUgaGVyZSBhcyB0aGV5IGFyZSBkZWZpbmVkIGluCi0JCSAqIGluY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCi0JCSAqLwotCX07Ci0KLQkvKgotCSAqIGZvciBldmVyeSByYWRpb3RhcCBlbnRyeSB3ZSBjYW4gYXQKLQkgKiBsZWFzdCBza2lwIChieSBrbm93aW5nIHRoZSBsZW5ndGgpLi4uCi0JICovCi0KLQl3aGlsZSAoaXRlcmF0b3ItPmFyZ19pbmRleCA8IHNpemVvZihydF9zaXplcykpIHsKKwl3aGlsZSAoMSkgewogCQlpbnQgaGl0ID0gMDsKLQkJaW50IHBhZDsKKwkJaW50IHBhZCwgYWxpZ24sIHNpemUsIHN1Ym5zLCB2bnNsZW47CisJCXVpbnQzMl90IG91aTsKIAotCQlpZiAoIShpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgJiAxKSkKKwkJLyogaWYgbm8gbW9yZSBFWFQgYml0cywgdGhhdCdzIGl0ICovCisJCWlmICgoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgPT0gSUVFRTgwMjExX1JBRElPVEFQX0VYVCAmJgorCQkgICAgIShpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgMSkpCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoIShpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgMSkpCiAJCQlnb3RvIG5leHRfZW50cnk7IC8qIGFyZyBub3QgcHJlc2VudCAqLwogCisJCS8qIGdldCBhbGlnbm1lbnQvc2l6ZSBvZiBkYXRhICovCisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgeworCQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9OQU1FU1BBQ0U6CisJCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0VYVDoKKwkJCWFsaWduID0gMTsKKwkJCXNpemUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0U6CisJCQlhbGlnbiA9IDI7CisJCQlzaXplID0gNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCFpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgfHwKKwkJCSAgICBpdGVyYXRvci0+X2FyZ19pbmRleCA+PSBpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UtPm5fYml0cykgeworCQkJCWlmIChpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPT0gJnJhZGlvdGFwX25zKQorCQkJCQlyZXR1cm4gLUVOT0VOVDsKKwkJCQlhbGlnbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWFsaWduID0gaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlLT5hbGlnbl9zaXplW2l0ZXJhdG9yLT5fYXJnX2luZGV4XS5hbGlnbjsKKwkJCQlzaXplID0gaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlLT5hbGlnbl9zaXplW2l0ZXJhdG9yLT5fYXJnX2luZGV4XS5zaXplOworCQkJfQorCQkJaWYgKCFhbGlnbikgeworCQkJCS8qIHNraXAgYWxsIHN1YnNlcXVlbnQgZGF0YSAqLworCQkJCWl0ZXJhdG9yLT5fYXJnID0gaXRlcmF0b3ItPl9uZXh0X25zX2RhdGE7CisJCQkJLyogZ2l2ZSB1cCBvbiB0aGlzIG5hbWVzcGFjZSAqLworCQkJCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9IE5VTEw7CisJCQkJZ290byBuZXh0X2VudHJ5OworCQkJfQorCQkJYnJlYWs7CisJCX0KKwogCQkvKgogCQkgKiBhcmcgaXMgcHJlc2VudCwgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcKLQkJICogIDgtYml0IGFyZ3MgY2FuIGJlIGF0IGFueSBhbGlnbm1lbnQKLQkJICogMTYtYml0IGFyZ3MgbXVzdCBzdGFydCBvbiAxNi1iaXQgYm91bmRhcnkKLQkJICogMzItYml0IGFyZ3MgbXVzdCBzdGFydCBvbiAzMi1iaXQgYm91bmRhcnkKLQkJICogNjQtYml0IGFyZ3MgbXVzdCBzdGFydCBvbiA2NC1iaXQgYm91bmRhcnkKIAkJICoKLQkJICogbm90ZSB0aGF0IHRvdGFsIGFyZyBzaXplIGNhbiBkaWZmZXIgZnJvbSBhbGlnbm1lbnQgb2YKLQkJICogZWxlbWVudHMgaW5zaWRlIGFyZywgc28gd2UgdXNlIHVwcGVyIG55YmJsZSBvZiBsZW5ndGgKLQkJICogdGFibGUgdG8gYmFzZSBhbGlnbm1lbnQgb24KLQkJICoKLQkJICogYWxzbyBub3RlOiB0aGVzZSBhbGlnbm1lbnRzIGFyZSAqKiByZWxhdGl2ZSB0byB0aGUKLQkJICogc3RhcnQgb2YgdGhlIHJhZGlvdGFwIGhlYWRlciAqKi4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQorCQkgKiBOb3RlIHRoYXQgdGhlc2UgYWxpZ25tZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0CisJCSAqIG9mIHRoZSByYWRpb3RhcCBoZWFkZXIuICBUaGVyZSBpcyBubyBndWFyYW50ZWUKIAkJICogdGhhdCB0aGUgcmFkaW90YXAgaGVhZGVyIGl0c2VsZiBpcyBhbGlnbmVkIG9uIGFueQogCQkgKiBraW5kIG9mIGJvdW5kYXJ5LgogCQkgKgotCQkgKiB0aGUgYWJvdmUgaXMgd2h5IGdldF91bmFsaWduZWQoKSBpcyB1c2VkIHRvIGRlcmVmZXJlbmNlCi0JCSAqIG11bHRpYnl0ZSBlbGVtZW50cyBmcm9tIHRoZSByYWRpb3RhcCBhcmVhCisJCSAqIFRoZSBhYm92ZSBpcyB3aHkgZ2V0X3VuYWxpZ25lZCgpIGlzIHVzZWQgdG8gZGVyZWZlcmVuY2UKKwkJICogbXVsdGlieXRlIGVsZW1lbnRzIGZyb20gdGhlIHJhZGlvdGFwIGFyZWEuCiAJCSAqLwogCi0JCXBhZCA9ICgoKHVsb25nKWl0ZXJhdG9yLT5hcmcpIC0KLQkJCSgodWxvbmcpaXRlcmF0b3ItPnJ0aGVhZGVyKSkgJgotCQkJKChydF9zaXplc1tpdGVyYXRvci0+YXJnX2luZGV4XSA+PiA0KSAtIDEpOworCQlwYWQgPSAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9hcmcgLQorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlcikgJiAoYWxpZ24gLSAxKTsKIAogCQlpZiAocGFkKQotCQkJaXRlcmF0b3ItPmFyZyArPQotCQkJCShydF9zaXplc1tpdGVyYXRvci0+YXJnX2luZGV4XSA+PiA0KSAtIHBhZDsKKwkJCWl0ZXJhdG9yLT5fYXJnICs9IGFsaWduIC0gcGFkOwogCiAJCS8qCiAJCSAqIHRoaXMgaXMgd2hhdCB3ZSB3aWxsIHJldHVybiB0byB1c2VyLCBidXQgd2UgbmVlZCB0bwogCQkgKiBtb3ZlIG9uIGZpcnN0IHNvIG5leHQgY2FsbCBoYXMgc29tZXRoaW5nIGZyZXNoIHRvIHRlc3QKIAkJICovCi0JCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5hcmdfaW5kZXg7Ci0JCWl0ZXJhdG9yLT50aGlzX2FyZyA9IGl0ZXJhdG9yLT5hcmc7Ci0JCWhpdCA9IDE7CisJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5fYXJnX2luZGV4OworCQlpdGVyYXRvci0+dGhpc19hcmcgPSBpdGVyYXRvci0+X2FyZzsKKwkJaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgPSBzaXplOwogCiAJCS8qIGludGVybmFsbHkgbW92ZSBvbiB0aGUgc2l6ZSBvZiB0aGlzIGFyZyAqLwotCQlpdGVyYXRvci0+YXJnICs9IHJ0X3NpemVzW2l0ZXJhdG9yLT5hcmdfaW5kZXhdICYgMHgwZjsKKwkJaXRlcmF0b3ItPl9hcmcgKz0gc2l6ZTsKIAogCQkvKgogCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUgd2UgYXJlIGdpdmVuIGEgYml0bWFwIHRoYXQKQEAgLTIyOCwzMiArMjc4LDczIEBACiAJCSAqIG1heF9sZW5ndGggb24gdGhlIGxhc3QgYXJnLCBuZXZlciBleGNlZWRpbmcgaXQuCiAJCSAqLwogCi0JCWlmICgoKHVsb25nKWl0ZXJhdG9yLT5hcmcgLSAodWxvbmcpaXRlcmF0b3ItPnJ0aGVhZGVyKSA+Ci0JCSAgICBpdGVyYXRvci0+bWF4X2xlbmd0aCkKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJnIC0KKwkJICAgICh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIgPgorCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQluZXh0X2VudHJ5OgotCQlpdGVyYXRvci0+YXJnX2luZGV4Kys7Ci0JCWlmICh1bmxpa2VseSgoaXRlcmF0b3ItPmFyZ19pbmRleCAmIDMxKSA9PSAwKSkgewotCQkJLyogY29tcGxldGVkIGN1cnJlbnQgdTMyIGJpdG1hcCAqLwotCQkJaWYgKGl0ZXJhdG9yLT5iaXRtYXBfc2hpZnRlciAmIDEpIHsKLQkJCQkvKiBiMzEgd2FzIHNldCwgdGhlcmUgaXMgbW9yZSAqLwotCQkJCS8qIG1vdmUgdG8gbmV4dCB1MzIgYml0bWFwICovCi0JCQkJaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyID0KLQkJCQkgICAgZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5uZXh0X2JpdG1hcCk7Ci0JCQkJaXRlcmF0b3ItPm5leHRfYml0bWFwKys7Ci0JCQl9IGVsc2UKLQkJCQkvKiBubyBtb3JlIGJpdG1hcHM6IGVuZCAqLwotCQkJCWl0ZXJhdG9yLT5hcmdfaW5kZXggPSBzaXplb2YocnRfc2l6ZXMpOwotCQl9IGVsc2UgLyoganVzdCB0cnkgdGhlIG5leHQgYml0ICovCi0JCQlpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCS8qIHRoZXNlIHNwZWNpYWwgb25lcyBhcmUgdmFsaWQgaW4gZWFjaCBiaXRtYXAgd29yZCAqLworCQlzd2l0Y2ggKGl0ZXJhdG9yLT5fYXJnX2luZGV4ICUgMzIpIHsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRToKKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOworCisJCQlpdGVyYXRvci0+X3Jlc2V0X29uX2V4dCA9IDE7CisKKwkJCXZuc2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci0+dGhpc19hcmcgKyA0KTsKKwkJCWl0ZXJhdG9yLT5fbmV4dF9uc19kYXRhID0gaXRlcmF0b3ItPl9hcmcgKyB2bnNsZW47CisJCQlvdWkgPSAoKml0ZXJhdG9yLT50aGlzX2FyZyA8PCAxNikgfAorCQkJCSgqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDEpIDw8IDgpIHwKKwkJCQkqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDIpOworCQkJc3VibnMgPSAqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDMpOworCisJCQlmaW5kX25zKGl0ZXJhdG9yLCBvdWksIHN1Ym5zKTsKKworCQkJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMDsKKwkJCS8qIGFsbG93IHBhcnNlcnMgdG8gc2hvdyB0aGlzIGluZm9ybWF0aW9uICovCisJCQlpdGVyYXRvci0+dGhpc19hcmdfaW5kZXggPQorCQkJCUlFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFOworCQkJaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgKz0gdm5zbGVuOworCQkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT50aGlzX2FyZyArCisJCQkgICAgaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgLQorCQkJICAgICh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIgPgorCQkJICAgICh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWhpdCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOgorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA+Pj0gMTsKKwkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7CisKKwkJCWl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0ID0gMTsKKwkJCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9ICZyYWRpb3RhcF9uczsKKwkJCWl0ZXJhdG9yLT5pc19yYWRpb3RhcF9ucyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRVhUOgorCQkJLyoKKwkJCSAqIGJpdCAzMSB3YXMgc2V0LCB0aGVyZSBpcyBtb3JlCisJCQkgKiAtLSBtb3ZlIHRvIG5leHQgdTMyIGJpdG1hcAorCQkJICovCisJCQlpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyID0KKwkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoaXRlcmF0b3ItPl9uZXh0X2JpdG1hcCk7CisJCQlpdGVyYXRvci0+X25leHRfYml0bWFwKys7CisJCQlpZiAoaXRlcmF0b3ItPl9yZXNldF9vbl9leHQpCisJCQkJaXRlcmF0b3ItPl9hcmdfaW5kZXggPSAwOworCQkJZWxzZQorCQkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7CisJCQlpdGVyYXRvci0+X3Jlc2V0X29uX2V4dCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHdlJ3ZlIGdvdCBhIGhpdCEgKi8KKwkJCWhpdCA9IDE7CisgbmV4dF9lbnRyeToKKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOworCQl9CiAKIAkJLyogaWYgd2UgZm91bmQgYSB2YWxpZCBhcmcgZWFybGllciwgcmV0dXJuIGl0IG5vdyAqLwogCQlpZiAoaGl0KQogCQkJcmV0dXJuIDA7CiAJfQotCi0JLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueSBtb3JlIGFyZ3MsIHdlJ3JlIGRvbmUgKi8KLQlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IDdhMDc1NGMuLmVkODljNTkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQwLDggKzQwLDE4IEBACiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInJlZ2RiLmgiCiAjaW5jbHVkZSAibmw4MDIxMS5oIgogCisjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRworI2RlZmluZSBSRUdfREJHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBSRUdfREJHX1BSSU5UKGFyZ3MuLi4pCisjZW5kaWYKKwogLyogUmVjZWlwdCBvZiBpbmZvcm1hdGlvbiBmcm9tIGxhc3QgcmVndWxhdG9yeSByZXF1ZXN0ICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqbGFzdF9yZXF1ZXN0OwogCkBAIC0xMjQsODIgKzEzNCwxMSBAQAogCSZ3b3JsZF9yZWdkb207CiAKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIjAwIjsKK3N0YXRpYyBjaGFyIHVzZXJfYWxwaGEyWzJdOwogCiBtb2R1bGVfcGFyYW0oaWVlZTgwMjExX3JlZ2RvbSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfcmVnZG9tLCAiSUVFRSA4MDIuMTEgcmVndWxhdG9yeSBkb21haW4gY29kZSIpOwogCi0jaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCi0vKgotICogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgotICogV2UgbWFrZSBlbXBoYXNpcyB3ZSBhcmUgdXNpbmcgdGhlIGV4YWN0IHNhbWUgZnJlcXVlbmNpZXMKLSAqIGFzIGJlZm9yZQotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gNiwKLQkuYWxwaGEyID0gICJVUyIsCi0JLnJlZ19ydWxlcyA9IHsKLQkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovCi0JCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyNywgMCksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCAzNi4uNDggKi8KLQkJUkVHX1JVTEUoNTE4MC0xMCwgNTI0MCsxMCwgNDAsIDYsIDE3LCAwKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyA0OC4uNjQgKi8KLQkJUkVHX1JVTEUoNTI2MC0xMCwgNTMyMCsxMCwgNDAsIDYsIDIwLCBOTDgwMjExX1JSRl9ERlMpLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDEwMC4uMTI0ICovCi0JCVJFR19SVUxFKDU1MDAtMTAsIDU1OTArMTAsIDQwLCA2LCAyMCwgTkw4MDIxMV9SUkZfREZTKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyAxMzIuLjE0NCAqLwotCQlSRUdfUlVMRSg1NjYwLTEwLCA1NzAwKzEwLCA0MCwgNiwgMjAsIE5MODAyMTFfUlJGX0RGUyksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTQ5Li4xNjUsIG91dGRvb3IgKi8KLQkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDMwLCAwKSwKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4ganBfcmVnZG9tID0gewotCS5uX3JlZ19ydWxlcyA9IDYsCi0JLmFscGhhMiA9ICAiSlAiLAotCS5yZWdfcnVsZXMgPSB7Ci0JCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLwotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAotCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzICovCi0JCVJFR19SVUxFKDI0NjctMTAsIDI0NzIrMTAsIDIwLCA2LCAyMCwgMCksCi0JCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVsIDE0ICovCi0JCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDIwLCA2LCAyMCwgTkw4MDIxMV9SUkZfTk9fT0ZETSksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMzYuLjQ4ICovCi0JCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAyMCwgMCksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgNTIuLjY0ICovCi0JCVJFR19SVUxFKDUyNjAtMTAsIDUzMjArMTAsIDQwLCA2LCAyMCwgTkw4MDIxMV9SUkZfREZTKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyAxMDAuLjE0NCAqLwotCQlSRUdfUlVMRSg1NTAwLTEwLCA1NzAwKzEwLCA0MCwgNiwgMjMsIE5MODAyMTFfUlJGX0RGUyksCi0JfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzdGF0aWNfcmVnZG9tKGNoYXIgKmFscGhhMikKLXsKLQlpZiAoYWxwaGEyWzBdID09ICdVJyAmJiBhbHBoYTJbMV0gPT0gJ1MnKQotCQlyZXR1cm4gJnVzX3JlZ2RvbTsKLQlpZiAoYWxwaGEyWzBdID09ICdKJyAmJiBhbHBoYTJbMV0gPT0gJ1AnKQotCQlyZXR1cm4gJmpwX3JlZ2RvbTsKLQkvKiBVc2Ugd29ybGQgcm9hbWluZyBydWxlcyBmb3IgIkVVIiwgc2luY2UgaXQgd2FzIGEgcHNldWRvCi0JICAgZG9tYWluIGFueXdheS4uLiAqLwotCWlmIChhbHBoYTJbMF0gPT0gJ0UnICYmIGFscGhhMlsxXSA9PSAnVScpCi0JCXJldHVybiAmd29ybGRfcmVnZG9tOwotCS8qIERlZmF1bHQsIHdvcmxkIHJvYW1pbmcgcnVsZXMgKi8KLQlyZXR1cm4gJndvcmxkX3JlZ2RvbTsKLX0KLQotc3RhdGljIGJvb2wgaXNfb2xkX3N0YXRpY19yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQotewotCWlmIChyZCA9PSAmdXNfcmVnZG9tIHx8IHJkID09ICZqcF9yZWdkb20gfHwgcmQgPT0gJndvcmxkX3JlZ2RvbSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vbGRfc3RhdGljX3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHJlc2V0X3JlZ2RvbWFpbnModm9pZCkKIHsKIAkvKiBhdm9pZCBmcmVlaW5nIHN0YXRpYyBpbmZvcm1hdGlvbiBvciBmcmVlaW5nIHNvbWV0aGluZyB0d2ljZSAqLwpAQCAtMjA5LDggKzE0OCw2IEBACiAJCWNmZzgwMjExX3dvcmxkX3JlZ2RvbSA9IE5VTEw7CiAJaWYgKGNmZzgwMjExX3JlZ2RvbWFpbiA9PSAmd29ybGRfcmVnZG9tKQogCQljZmc4MDIxMV9yZWdkb21haW4gPSBOVUxMOwotCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQotCQljZmc4MDIxMV9yZWdkb21haW4gPSBOVUxMOwogCiAJa2ZyZWUoY2ZnODAyMTFfcmVnZG9tYWluKTsKIAlrZnJlZShjZmc4MDIxMV93b3JsZF9yZWdkb20pOwpAQCAtMzE2LDYgKzI1MywyNyBAQAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogVGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSIHJlZ2RvbSBhbHBoYTIgaXMgY2FjaGVkLCB0aGlzIGxldHMKKyAqIHlvdSBrbm93IGlmIGEgdmFsaWQgcmVndWxhdG9yeSBoaW50IHdpdGggTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIKKyAqIGhhcyBldmVyIGJlZW4gaXNzdWVkLgorICovCitzdGF0aWMgYm9vbCBpc191c2VyX3JlZ2RvbV9zYXZlZCh2b2lkKQoreworCWlmICh1c2VyX2FscGhhMlswXSA9PSAnOScgJiYgdXNlcl9hbHBoYTJbMV0gPT0gJzcnKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUaGlzIHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBvbiB0aGUgZGVzaWduICovCisJaWYgKFdBUk4oKCFpc193b3JsZF9yZWdkb20odXNlcl9hbHBoYTIpICYmCisJCSAgIWlzX2FuX2FscGhhMih1c2VyX2FscGhhMikpLAorCQkgIlVuZXhwZWN0ZWQgdXNlciBhbHBoYTI6ICVjJWNcbiIsCisJCSB1c2VyX2FscGhhMlswXSwKKwkgICAgICAgICB1c2VyX2FscGhhMlsxXSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKioKICAqIGNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMgLSB0ZWxscyB1cyBpZiB0aGUgY291bnRyeSBJRSBoYXMgY2hhbmdlZAogICogQGNoZWNrc3VtOiBjaGVja3N1bSBvZiBjb3VudHJ5IElFIG9mIGZpZWxkcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgpAQCAtMzM1LDYgKzI5Myw5OCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGludCByZWdfY29weV9yZWdkKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICoqZHN0X3JlZ2QsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnNyY19yZWdkKQoreworCXN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCWludCBzaXplX29mX3JlZ2QgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJc2l6ZV9vZl9yZWdkID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSArCisJICAoKHNyY19yZWdkLT5uX3JlZ19ydWxlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKKworCXJlZ2QgPSBremFsbG9jKHNpemVfb2ZfcmVnZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWdkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShyZWdkLCBzcmNfcmVnZCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3JjX3JlZ2QtPm5fcmVnX3J1bGVzOyBpKyspCisJCW1lbWNweSgmcmVnZC0+cmVnX3J1bGVzW2ldLCAmc3JjX3JlZ2QtPnJlZ19ydWxlc1tpXSwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwkqZHN0X3JlZ2QgPSByZWdkOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCCitzdHJ1Y3QgcmVnX3JlZ2RiX3NlYXJjaF9yZXF1ZXN0IHsKKwljaGFyIGFscGhhMlsyXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZWdkYl9zZWFyY2hfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisKK3N0YXRpYyB2b2lkIHJlZ19yZWdkYl9zZWFyY2goc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QgKnJlcXVlc3Q7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cmRvbSwgKnJlZ2RvbTsKKwlpbnQgaSwgcjsKKworCXNwaW5fbG9jaygmcmVnX3JlZ2RiX3NlYXJjaF9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCkpIHsKKwkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCwKKwkJCQkJICAgc3RydWN0IHJlZ19yZWdkYl9zZWFyY2hfcmVxdWVzdCwKKwkJCQkJICAgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKKworCQlmb3IgKGk9MDsgaTxyZWdfcmVnZGJfc2l6ZTsgaSsrKSB7CisJCQljdXJkb20gPSByZWdfcmVnZGJbaV07CisKKwkJCWlmICghbWVtY21wKHJlcXVlc3QtPmFscGhhMiwgY3VyZG9tLT5hbHBoYTIsIDIpKSB7CisJCQkJciA9IHJlZ19jb3B5X3JlZ2QoJnJlZ2RvbSwgY3VyZG9tKTsKKwkJCQlpZiAocikKKwkJCQkJYnJlYWs7CisJCQkJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJCQkJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCQkJCXNldF9yZWdkb20ocmVnZG9tKTsKKwkJCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwkJCQlzcGluX2xvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlrZnJlZShyZXF1ZXN0KTsKKwl9CisJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksocmVnX3JlZ2RiX3dvcmssIHJlZ19yZWdkYl9zZWFyY2gpOworCitzdGF0aWMgdm9pZCByZWdfcmVnZGJfcXVlcnkoY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlpZiAoIWFscGhhMikKKwkJcmV0dXJuOworCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybjsKKworCW1lbWNweShyZXF1ZXN0LT5hbHBoYTIsIGFscGhhMiwgMik7CisKKwlzcGluX2xvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCk7CisJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfcmVnZGJfd29yayk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlZ19yZWdkYl9xdWVyeShjb25zdCBjaGFyICphbHBoYTIpIHt9CisjZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCICovCisKIC8qCiAgKiBUaGlzIGxldHMgdXMga2VlcCByZWd1bGF0b3J5IGNvZGUgd2hpY2ggaXMgdXBkYXRlZCBvbiBhIHJlZ3VsYXRvcnkKICAqIGJhc2lzIGluIHVzZXJzcGFjZS4KQEAgLTM1NCw2ICs0MDQsOSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ2FsbGluZyBDUkRBIHRvIHVwZGF0ZSB3b3JsZCAiCiAJCQkicmVndWxhdG9yeSBkb21haW5cbiIpOwogCisJLyogcXVlcnkgaW50ZXJuYWwgcmVndWxhdG9yeSBkYXRhYmFzZSAoaWYgaXQgZXhpc3RzKSAqLworCXJlZ19yZWdkYl9xdWVyeShhbHBoYTIpOworCiAJY291bnRyeV9lbnZbOF0gPSBhbHBoYTJbMF07CiAJY291bnRyeV9lbnZbOV0gPSBhbHBoYTJbMV07CiAKQEAgLTQ1NCwxMiArNTA3LDIxMiBAQAogfQogCiAvKgorICogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGZvciBzYW5pdHkgY2hlY2tpbmcgaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KCkncworICogd29yay4gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KCkgY2FuIGZvciBleGFtcGxlIGN1cnJlbnRseSBwcm92aWRlIGEKKyAqIDIgR0h6IGNoYW5uZWwgd2hlbiBpbiBmYWN0IGEgNSBHSHogY2hhbm5lbCB3YXMgZGVzaXJlZC4gQW4gZXhhbXBsZSB3b3VsZCBiZQorICogYW4gQVAgcHJvdmlkaW5nIGNoYW5uZWwgOCBvbiBhIGNvdW50cnkgSUUgdHJpcGxldCB3aGVuIGl0IHNlbnQgdGhpcyBvbiB0aGUKKyAqIDUgR0h6IGJhbmQsIHRoYXQgY2hhbm5lbCBpcyBkZXNpZ25lZCB0byBiZSBjaGFubmVsIDggb24gNSBHSHosIG5vdCBhIDIgR0h6CisgKiBjaGFubmVsLgorICoKKyAqIFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koKSB0YWtlcyBpbiBhIGJhbmQuCisgKi8KK3N0YXRpYyBib29sIGNoYW5faW5fYmFuZChpbnQgY2hhbiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWludCBjZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFuKTsKKworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJaWYgKGNlbnRlcl9mcmVxIDw9IDI0ODQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJaWYgKGNlbnRlcl9mcmVxID49IDUwMDUpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiBTb21lIEFQcyBtYXkgc2VuZCBhIGNvdW50cnkgSUUgdHJpcGxldCBmb3IgZWFjaCBjaGFubmVsIHRoZXkKKyAqIHN1cHBvcnQgYW5kIHdoaWxlIHRoaXMgaXMgY29tcGxldGVseSBvdmVya2lsbCBhbmQgc2lsbHkgd2Ugc3RpbGwKKyAqIG5lZWQgdG8gc3VwcG9ydCBpdC4gV2UgYXZvaWQgbWFraW5nIGEgc2luZ2xlIHJ1bGUgZm9yIGVhY2ggY2hhbm5lbAorICogdGhvdWdoIGFuZCB0byBoZWxwIHVzIHdpdGggdGhpcyB3ZSB1c2UgdGhpcyBoZWxwZXIgdG8gZmluZCB0aGUKKyAqIGFjdHVhbCBzdWJiYW5kIGVuZCBjaGFubmVsLiBUaGVzZSB0eXBlIG9mIGNvdW50cnkgSUUgdHJpcGxldAorICogc2NlbmVyaW9zIGFyZSBoYW5kbGVkIHRoZW4sIGFsbCB5aWVsZGluZyB0d28gcmVndWxhb3RyeSBydWxlcyBmcm9tCisgKiBwYXJzaW5nIGEgY291bnRyeSBJRToKKyAqCisgKiBbMV0KKyAqIFsyXQorICogWzM2XQorICogWzQwXQorICoKKyAqIFsxXQorICogWzItNF0KKyAqIFs1LTEyXQorICogWzM2XQorICogWzQwLTQ0XQorICoKKyAqIFsxLTRdCisgKiBbNS03XQorICogWzM2LTQ0XQorICogWzQ4LTY0XQorICoKKyAqIFszNi0zNl0KKyAqIFs0MC00MF0KKyAqIFs0NC00NF0KKyAqIFs0OC00OF0KKyAqIFs1Mi01Ml0KKyAqIFs1Ni01Nl0KKyAqIFs2MC02MF0KKyAqIFs2NC02NF0KKyAqIFsxMDAtMTAwXQorICogWzEwNC0xMDRdCisgKiBbMTA4LTEwOF0KKyAqIFsxMTItMTEyXQorICogWzExNi0xMTZdCisgKiBbMTIwLTEyMF0KKyAqIFsxMjQtMTI0XQorICogWzEyOC0xMjhdCisgKiBbMTMyLTEzMl0KKyAqIFsxMzYtMTM2XQorICogWzE0MC0xNDBdCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBJRSBoYXMgYmVlbiBmb3VuZCB0byBiZSBpbnZhbGlkIGluIHRoZSBtaWRkbGUKKyAqIHNvbWV3aGVyZS4KKyAqLworc3RhdGljIGludCBtYXhfc3ViYmFuZF9jaGFuKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICBpbnQgb3JpZ19jdXJfY2hhbiwKKwkJCSAgICBpbnQgb3JpZ19lbmRfY2hhbm5lbCwKKwkJCSAgICBzOCBvcmlnX21heF9wb3dlciwKKwkJCSAgICB1OCAqKmNvdW50cnlfaWUsCisJCQkgICAgdTggKmNvdW50cnlfaWVfbGVuKQoreworCXU4ICp0cmlwbGV0c19zdGFydCA9ICpjb3VudHJ5X2llOworCXU4IGxlbl9hdF90cmlwbGV0ID0gKmNvdW50cnlfaWVfbGVuOworCWludCBlbmRfc3ViYmFuZF9jaGFuID0gb3JpZ19lbmRfY2hhbm5lbDsKKworCS8qCisJICogV2UnbGwgZGVhbCB3aXRoIHBhZGRpbmcgZm9yIHRoZSBjYWxsZXIgdW5sZXNzCisJICogaXRzIG5vdCBpbW1lZGlhdGUgYW5kIHdlIGRvbid0IHByb2Nlc3MgYW55IGNoYW5uZWxzCisJICovCisJaWYgKCpjb3VudHJ5X2llX2xlbiA9PSAxKSB7CisJCSpjb3VudHJ5X2llICs9IDE7CisJCSpjb3VudHJ5X2llX2xlbiAtPSAxOworCQlyZXR1cm4gb3JpZ19lbmRfY2hhbm5lbDsKKwl9CisKKwkvKiBNb3ZlIHRvIHRoZSBuZXh0IHRyaXBsZXQgYW5kIHRoZW4gc3RhcnQgc2VhcmNoICovCisJKmNvdW50cnlfaWUgKz0gMzsKKwkqY291bnRyeV9pZV9sZW4gLT0gMzsKKworCWlmICghY2hhbl9pbl9iYW5kKG9yaWdfY3VyX2NoYW4sIGJhbmQpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqY291bnRyeV9pZV9sZW4gPj0gMykgeworCQlpbnQgZW5kX2NoYW5uZWwgPSAwOworCQlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqdHJpcGxldCA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKikgKmNvdW50cnlfaWU7CisJCWludCBjdXJfY2hhbm5lbCA9IDAsIG5leHRfZXhwZWN0ZWRfY2hhbjsKKworCQkvKiBtZWFucyBsYXN0IHRyaXBsZXQgaXMgY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhpcyBvbmUgKi8KKwkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CisJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CisJCQkqY291bnRyeV9pZSAtPSAzOworCQkJKmNvdW50cnlfaWVfbGVuICs9IDM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsID09IDApIHsKKwkJCSpjb3VudHJ5X2llICs9IDE7CisJCQkqY291bnRyeV9pZV9sZW4gLT0gMTsKKwkJCWlmICgqY291bnRyeV9pZV9sZW4gIT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogTW9uaXRvbmljYWxseSBpbmNyZWFzaW5nIGNoYW5uZWwgb3JkZXIgKi8KKwkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gZW5kX3N1YmJhbmRfY2hhbikKKwkJCXJldHVybiAwOworCisJCWlmICghY2hhbl9pbl9iYW5kKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwsIGJhbmQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogMiBHSHogKi8KKwkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gMTQpIHsKKwkJCWVuZF9jaGFubmVsID0gdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCisJCQkJdHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMTsKKwkJfQorCQllbHNlIHsKKwkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKworCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKKwkJfQorCisJCWlmICghY2hhbl9pbl9iYW5kKGVuZF9jaGFubmVsLCBiYW5kKSkKKwkJCXJldHVybiAwOworCisJCWlmIChvcmlnX21heF9wb3dlciAhPSB0cmlwbGV0LT5jaGFucy5tYXhfcG93ZXIpIHsKKwkJCSpjb3VudHJ5X2llIC09IDM7CisJCQkqY291bnRyeV9pZV9sZW4gKz0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJY3VyX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsOworCisJCS8qIFRoZSBrZXkgaXMgZmluZGluZyB0aGUgcmlnaHQgbmV4dCBleHBlY3RlZCBjaGFubmVsICovCisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQluZXh0X2V4cGVjdGVkX2NoYW4gPSBlbmRfc3ViYmFuZF9jaGFuICsgMTsKKwkJIGVsc2UKKwkJCW5leHRfZXhwZWN0ZWRfY2hhbiA9IGVuZF9zdWJiYW5kX2NoYW4gKyA0OworCisJCWlmIChjdXJfY2hhbm5lbCAhPSBuZXh0X2V4cGVjdGVkX2NoYW4pIHsKKwkJCSpjb3VudHJ5X2llIC09IDM7CisJCQkqY291bnRyeV9pZV9sZW4gKz0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJZW5kX3N1YmJhbmRfY2hhbiA9IGVuZF9jaGFubmVsOworCisJCS8qIE1vdmUgdG8gdGhlIG5leHQgb25lICovCisJCSpjb3VudHJ5X2llICs9IDM7CisJCSpjb3VudHJ5X2llX2xlbiAtPSAzOworCisJCS8qCisJCSAqIFBhZGRpbmcgbmVlZHMgdG8gYmUgZGVhbHQgd2l0aCBpZiB3ZSBwcm9jZXNzZWQKKwkJICogc29tZSBjaGFubmVscy4KKwkJICovCisJCWlmICgqY291bnRyeV9pZV9sZW4gPT0gMSkgeworCQkJKmNvdW50cnlfaWUgKz0gMTsKKwkJCSpjb3VudHJ5X2llX2xlbiAtPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJZiBzZWVuLCB0aGUgSUUgaXMgaW52YWxpZCAqLworCQlpZiAoKmNvdW50cnlfaWVfbGVuID09IDIpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZW5kX3N1YmJhbmRfY2hhbiA9PSBvcmlnX2VuZF9jaGFubmVsKSB7CisJCSpjb3VudHJ5X2llID0gdHJpcGxldHNfc3RhcnQ7CisJCSpjb3VudHJ5X2llX2xlbiA9IGxlbl9hdF90cmlwbGV0OworCQlyZXR1cm4gb3JpZ19lbmRfY2hhbm5lbDsKKwl9CisKKwlyZXR1cm4gZW5kX3N1YmJhbmRfY2hhbjsKK30KKworLyoKICAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKICAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY291bnRyeV9pZV8yX3JkKAorCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKIAkJCQl1MzIgKmNoZWNrc3VtKQpAQCAtNTIxLDEwICs3NzQsMjkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogQVBzIGNhbiBhZGQgcGFkZGluZyB0byBtYWtlIGxlbmd0aCBkaXZpc2libGUKKwkJICogYnkgdHdvLCByZXF1aXJlZCBieSB0aGUgc3BlYy4KKwkJICovCisJCWlmICh0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsID09IDApIHsKKwkJCWNvdW50cnlfaWUrKzsKKwkJCWNvdW50cnlfaWVfbGVuLS07CisJCQkvKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSB2ZXJ5IGVuZCBvbmx5ICovCisJCQlpZiAoY291bnRyeV9pZV9sZW4gIT0gMCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyA9PSAwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKCFjaGFuX2luX2JhbmQodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCwgYmFuZCkpCisJCQlyZXR1cm4gTlVMTDsKKwogCQkvKiAyIEdIeiAqLwotCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA8PSAxNCkKKwkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKIAkJCWVuZF9jaGFubmVsID0gdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCi0JCQkJdHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzOworCQkJCXRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDE7CiAJCWVsc2UKIAkJCS8qCiAJCQkgKiA1IEdIeiAtLSBGb3IgZXhhbXBsZSBpbiBjb3VudHJ5IElFcyBpZiB0aGUgZmlyc3QKQEAgLTUzOSw2ICs4MTEsMjQgQEAKIAkJCQkoNCAqICh0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxKSk7CiAKIAkJY3VyX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsOworCisJCS8qCisJCSAqIEVuaGFuY2VtZW50IGZvciBBUHMgdGhhdCBzZW5kIGEgdHJpcGxldCBmb3IgZXZlcnkgY2hhbm5lbAorCQkgKiBvciBmb3Igd2hhdGV2ZXIgcmVhc29uIHNlbmRzIHRyaXBsZXRzIHdpdGggbXVsdGlwbGUgY2hhbm5lbHMKKwkJICogc2VwYXJhdGVkIHdoZW4gaW4gZmFjdCB0aGV5IHNob3VsZCBiZSB0b2dldGhlci4KKwkJICovCisJCWVuZF9jaGFubmVsID0gbWF4X3N1YmJhbmRfY2hhbihiYW5kLAorCQkJCQkgICAgICAgY3VyX2NoYW5uZWwsCisJCQkJCSAgICAgICBlbmRfY2hhbm5lbCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciwKKwkJCQkJICAgICAgICZjb3VudHJ5X2llLAorCQkJCQkgICAgICAgJmNvdW50cnlfaWVfbGVuKTsKKwkJaWYgKCFlbmRfY2hhbm5lbCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmICghY2hhbl9pbl9iYW5kKGVuZF9jaGFubmVsLCBiYW5kKSkKKwkJCXJldHVybiBOVUxMOworCiAJCWN1cl9zdWJfbWF4X2NoYW5uZWwgPSBlbmRfY2hhbm5lbDsKIAogCQkvKiBCYXNpYyBzYW5pdHkgY2hlY2sgKi8KQEAgLTU2OSwxMCArODU5LDEzIEBACiAKIAkJbGFzdF9zdWJfbWF4X2NoYW5uZWwgPSBjdXJfc3ViX21heF9jaGFubmVsOwogCi0JCWNvdW50cnlfaWUgKz0gMzsKLQkJY291bnRyeV9pZV9sZW4gLT0gMzsKIAkJbnVtX3J1bGVzKys7CiAKKwkJaWYgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKKwkJCWNvdW50cnlfaWUgKz0gMzsKKwkJCWNvdW50cnlfaWVfbGVuIC09IDM7CisJCX0KKwogCQkvKgogCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CiAJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudApAQCAtNjE1LDYgKzkwOCwxMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA9PSAwKSB7CisJCQljb3VudHJ5X2llKys7CisJCQljb3VudHJ5X2llX2xlbi0tOworCQkJYnJlYWs7CisJCX0KKwogCQlyZWdfcnVsZSA9ICZyZC0+cmVnX3J1bGVzW2ldOwogCQlmcmVxX3JhbmdlID0gJnJlZ19ydWxlLT5mcmVxX3JhbmdlOwogCQlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOwpAQCAtNjIyLDEzICs5MjEsMjAgQEAKIAkJcmVnX3J1bGUtPmZsYWdzID0gZmxhZ3M7CiAKIAkJLyogMiBHSHogKi8KLQkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gMTQpCisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCiAJCQllbmRfY2hhbm5lbCA9IHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwotCQkJCXRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVsczsKKwkJCQl0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLTE7CiAJCWVsc2UKIAkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwogCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKIAorCQllbmRfY2hhbm5lbCA9IG1heF9zdWJiYW5kX2NoYW4oYmFuZCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwsCisJCQkJCSAgICAgICBlbmRfY2hhbm5lbCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciwKKwkJCQkJICAgICAgICZjb3VudHJ5X2llLAorCQkJCQkgICAgICAgJmNvdW50cnlfaWVfbGVuKTsKKwogCQkvKgogCQkgKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCiAJCSAqIHRoZSBhY3R1YWwgYmFuZCBlZGdlLCBub3QgdGhlIGNlbnRlciBvZiBmcmVxIGZvcgpAQCAtNjQ5LDEyICs5NTUsMTUgQEAKIAkJICovCiAJCWZyZXFfcmFuZ2UtPm1heF9iYW5kd2lkdGhfa2h6ID0gTUhaX1RPX0tIWig0MCk7CiAJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4gPSBEQklfVE9fTUJJKDEwMCk7Ci0JCXBvd2VyX3J1bGUtPm1heF9laXJwID0gREJNX1RPX01CTSgxMDApOworCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0odHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyKTsKIAotCQljb3VudHJ5X2llICs9IDM7Ci0JCWNvdW50cnlfaWVfbGVuIC09IDM7CiAJCWkrKzsKIAorCQlpZiAoY291bnRyeV9pZV9sZW4gPj0gMykgeworCQkJY291bnRyeV9pZSArPSAzOworCQkJY291bnRyeV9pZV9sZW4gLT0gMzsKKwkJfQorCiAJCUJVR19PTihpID4gTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMpOwogCX0KIApAQCAtOTUwLDI1ICsxMjU5LDIxIEBACiAJCWlmIChyID09IC1FUkFOR0UgJiYKIAkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CiAJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogTGVhdmluZyBjaGFubmVsICVkIE1IeiAiCisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogTGVhdmluZyBjaGFubmVsICVkIE1IeiAiCiAJCQkJImludGFjdCBvbiAlcyAtIG5vIHJ1bGUgZm91bmQgaW4gYmFuZCBvbiAiCiAJCQkJIkNvdW50cnkgSUVcbiIsCi0JCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgorCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKIAkJfSBlbHNlIHsKIAkJLyoKIAkJICogSW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGNvdW50cnkgSUUgaGFzIGF0IGxlYXN0IG9uZSByZWcgcnVsZQogCQkgKiBmb3IgdGhlIGJhbmQgc28gd2UgcmVzcGVjdCBpdHMgYmFuZCBkZWZpbml0aW9ucwogCQkgKi8KLSNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCiAJCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KIAkJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IERpc2FibGluZyAiCisJCQkJUkVHX0RCR19QUklOVCgiY2ZnODAyMTE6IERpc2FibGluZyAiCiAJCQkJCSJjaGFubmVsICVkIE1IeiBvbiAlcyBkdWUgdG8gIgogCQkJCQkiQ291bnRyeSBJRVxuIiwKIAkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgogCQkJZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCQljaGFuLT5mbGFncyA9IGZsYWdzOwogCQl9CkBAIC0xMzQyLDMwICsxNjQ3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi1zdGF0aWMgaW50IHJlZ19jb3B5X3JlZ2QoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKipkc3RfcmVnZCwKLQkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqc3JjX3JlZ2QpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7Ci0JaW50IHNpemVfb2ZfcmVnZCA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlzaXplX29mX3JlZ2QgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pICsKLQkgICgoc3JjX3JlZ2QtPm5fcmVnX3J1bGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOwotCi0JcmVnZCA9IGt6YWxsb2Moc2l6ZV9vZl9yZWdkLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlZ2QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KHJlZ2QsIHNyY19yZWdkLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcmNfcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykKLQkJbWVtY3B5KCZyZWdkLT5yZWdfcnVsZXNbaV0sICZzcmNfcmVnZC0+cmVnX3J1bGVzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKLQotCSpkc3RfcmVnZCA9IHJlZ2Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQogICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMKQEAgLTEzODcsNyArMTY2OCw3IEBACiAKIAlzd2l0Y2ggKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yKSB7CiAJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CiAKIAkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CkBAIC0xNDE4LDggKzE2OTksNiBAQAogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKIAljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CiAJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSkgewotCQkJaWYgKGlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikpCi0JCQkJcmV0dXJuIDA7CiAJCQlpZiAocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKQEAgLTE0NTYsOCArMTczNSw3IEBACiAJCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCWlmICghcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAogCQlyZXR1cm4gMDsKQEAgLTE1MjksNiArMTgwNywxMSBAQAogCiAJcGVuZGluZ19yZXF1ZXN0ID0gTlVMTDsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikgeworCQl1c2VyX2FscGhhMlswXSA9IGxhc3RfcmVxdWVzdC0+YWxwaGEyWzBdOworCQl1c2VyX2FscGhhMlsxXSA9IGxhc3RfcmVxdWVzdC0+YWxwaGEyWzFdOworCX0KKwogCS8qIFdoZW4gciA9PSBSRUdfSU5URVJTRUNUIHdlIGRvIG5lZWQgdG8gY2FsbCBDUkRBICovCiAJaWYgKHIgPCAwKSB7CiAJCS8qCkBAIC0xNjQ4LDEyICsxOTMxLDE2IEBACiAJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOwogfQogCi0vKiBDb3JlIHJlZ3VsYXRvcnkgaGludCAtLSBoYXBwZW5zIG9uY2UgZHVyaW5nIGNmZzgwMjExX2luaXQoKSAqLworLyoKKyAqIENvcmUgcmVndWxhdG9yeSBoaW50IC0tIGhhcHBlbnMgZHVyaW5nIGNmZzgwMjExX2luaXQoKQorICogYW5kIHdoZW4gd2UgcmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzLgorICovCiBzdGF0aWMgaW50IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JQlVHX09OKGxhc3RfcmVxdWVzdCk7CisJa2ZyZWUobGFzdF9yZXF1ZXN0KTsKKwlsYXN0X3JlcXVlc3QgPSBOVUxMOwogCiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAogCQkJICBHRlBfS0VSTkVMKTsKQEAgLTE2NjQsMTQgKzE5NTEsMTIgQEAKIAlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CiAJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CiAKLQlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7Ci0KIAkvKgogCSAqIFRoaXMgZW5zdXJlcyBsYXN0X3JlcXVlc3QgaXMgcG9wdWxhdGVkIG9uY2UgbW9kdWxlcwogCSAqIGNvbWUgc3dpbmdpbmcgaW4gYW5kIGNhbGxpbmcgcmVndWxhdG9yeSBoaW50cyBhbmQKIAkgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgpLgogCSAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJcmVnX3Byb2Nlc3NfaGludChyZXF1ZXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc1OCw4ICsyMDQzLDkgQEAKICAqIHRoZXJlZm9yZSBjYW5ub3QgaXRlcmF0ZSBvdmVyIHRoZSByZGV2IGxpc3QgaGVyZS4KICAqLwogdm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQl1OCAqY291bnRyeV9pZSwKLQkJCXU4IGNvdW50cnlfaWVfbGVuKQorCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSB1OCAqY291bnRyeV9pZSwKKwkJCSB1OCBjb3VudHJ5X2llX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQgPSBOVUxMOwogCWNoYXIgYWxwaGEyWzJdOwpAQCAtMTgwNSw5ICsyMDkxLDExIEBACiAJICAgIHdpcGh5X2lkeF92YWxpZChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCkpKQogCQlnb3RvIG91dDsKIAotCXJkID0gY291bnRyeV9pZV8yX3JkKGNvdW50cnlfaWUsIGNvdW50cnlfaWVfbGVuLCAmY2hlY2tzdW0pOwotCWlmICghcmQpCisJcmQgPSBjb3VudHJ5X2llXzJfcmQoYmFuZCwgY291bnRyeV9pZSwgY291bnRyeV9pZV9sZW4sICZjaGVja3N1bSk7CisJaWYgKCFyZCkgeworCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogSWdub3JpbmcgYm9ndXMgY291bnRyeSBJRVxuIik7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogVGhpcyB3aWxsIG5vdCBoYXBwZW4gcmlnaHQgbm93IGJ1dCB3ZSBsZWF2ZSBpdCBoZXJlIGZvciB0aGUKQEAgLTE4NTAsNiArMjEzOCwxMjMgQEAKIAltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc3RvcmVfYWxwaGEyKGNoYXIgKmFscGhhMiwgYm9vbCByZXNldF91c2VyKQoreworCS8qIGluZGljYXRlcyB0aGVyZSBpcyBubyBhbHBoYTIgdG8gY29uc2lkZXIgZm9yIHJlc3RvcmF0aW9uICovCisJYWxwaGEyWzBdID0gJzknOworCWFscGhhMlsxXSA9ICc3JzsKKworCS8qIFRoZSB1c2VyIHNldHRpbmcgaGFzIHByZWNlZGVuY2Ugb3ZlciB0aGUgbW9kdWxlIHBhcmFtZXRlciAqLworCWlmIChpc191c2VyX3JlZ2RvbV9zYXZlZCgpKSB7CisJCS8qIFVubGVzcyB3ZSdyZSBhc2tlZCB0byBpZ25vcmUgaXQgYW5kIHJlc2V0IGl0ICovCisJCWlmIChyZXNldF91c2VyKSB7CisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgorCQkJICAgICAgICJpbmNsdWRpbmcgdXNlciBwcmVmZXJlbmNlXG4iKTsKKwkJCXVzZXJfYWxwaGEyWzBdID0gJzknOworCQkJdXNlcl9hbHBoYTJbMV0gPSAnNyc7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyB1c2VyIHNldHRpbmdzLCB3ZSBzdGlsbCBuZWVkIHRvCisJCQkgKiBjaGVjayB0aGUgbW9kdWxlIHBhcmFtZXRlciB0byBlbnN1cmUgd2UgcHV0IHRoaW5ncworCQkJICogYmFjayBhcyB0aGV5IHdlcmUgZm9yIGEgZnVsbCByZXN0b3JlLgorCQkJICovCisJCQlpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkgeworCQkJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBLZWVwaW5nIHByZWZlcmVuY2Ugb24gIgorCQkJCSAgICAgICAibW9kdWxlIHBhcmFtZXRlciBpZWVlODAyMTFfcmVnZG9tOiAlYyVjXG4iLAorCQkJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzBdLAorCQkJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzFdKTsKKwkJCQlhbHBoYTJbMF0gPSBpZWVlODAyMTFfcmVnZG9tWzBdOworCQkJCWFscGhhMlsxXSA9IGllZWU4MDIxMV9yZWdkb21bMV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgorCQkJICAgICAgICJ3aGlsZSBwcmVzZXJ2aW5nIHVzZXIgcHJlZmVyZW5jZSBmb3I6ICVjJWNcbiIsCisJCQkgICAgICAgdXNlcl9hbHBoYTJbMF0sCisJCQkgICAgICAgdXNlcl9hbHBoYTJbMV0pOworCQkJYWxwaGEyWzBdID0gdXNlcl9hbHBoYTJbMF07CisJCQlhbHBoYTJbMV0gPSB1c2VyX2FscGhhMlsxXTsKKwkJfQorCX0gZWxzZSBpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkgeworCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogS2VlcGluZyBwcmVmZXJlbmNlIG9uICIKKwkJICAgICAgICJtb2R1bGUgcGFyYW1ldGVyIGllZWU4MDIxMV9yZWdkb206ICVjJWNcbiIsCisJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzBdLAorCQkgICAgICAgaWVlZTgwMjExX3JlZ2RvbVsxXSk7CisJCWFscGhhMlswXSA9IGllZWU4MDIxMV9yZWdkb21bMF07CisJCWFscGhhMlsxXSA9IGllZWU4MDIxMV9yZWdkb21bMV07CisJfSBlbHNlCisJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBSZXN0b3JpbmcgcmVndWxhdG9yeSBzZXR0aW5nc1xuIik7Cit9CisKKy8qCisgKiBSZXN0b3JpbmcgcmVndWxhdG9yeSBzZXR0aW5ncyBpbnZvbHZlcyBpbmdvcmluZyBhbnkKKyAqIHBvc3NpYmx5IHN0YWxlIGNvdW50cnkgSUUgaW5mb3JtYXRpb24gYW5kIHVzZXIgcmVndWxhdG9yeQorICogc2V0dGluZ3MgaWYgc28gZGVzaXJlZCwgdGhpcyBpbmNsdWRlcyBhbnkgYmVhY29uIGhpbnRzCisgKiBsZWFybmVkIGFzIHdlIGNvdWxkIGhhdmUgdHJhdmVsZWQgb3V0c2lkZSB0byBhbm90aGVyIGNvdW50cnkKKyAqIGFmdGVyIGRpc2Nvbm5lY3Rpb24uIFRvIHJlc3RvcmUgcmVndWxhdG9yeSBzZXR0aW5ncyB3ZSBkbworICogZXhhY3RseSB3aGF0IHdlIGRpZCBhdCBib290dXA6CisgKgorICogICAtIHNlbmQgYSBjb3JlIHJlZ3VsYXRvcnkgaGludAorICogICAtIHNlbmQgYSB1c2VyIHJlZ3VsYXRvcnkgaGludCBpZiBhcHBsaWNhYmxlCisgKgorICogRGV2aWNlIGRyaXZlcnMgdGhhdCBzZW5kIGEgcmVndWxhdG9yeSBoaW50IGZvciBhIHNwZWNpZmljIGNvdW50cnkKKyAqIGtlZXAgdGhlaXIgb3duIHJlZ3VsYXRvcnkgZG9tYWluIG9uIHdpcGh5LT5yZWdkIHNvIHRoYXQgZG9lcyBkb2VzCisgKiBub3QgbmVlZCB0byBiZSByZW1lbWJlcmVkLgorICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoYm9vbCByZXNldF91c2VyKQoreworCWNoYXIgYWxwaGEyWzJdOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOworCisJcmVzZXRfcmVnZG9tYWlucygpOworCXJlc3RvcmVfYWxwaGEyKGFscGhhMiwgcmVzZXRfdXNlcik7CisKKwkvKiBDbGVhciBiZWFjb24gaGludHMgKi8KKwlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfcGVuZGluZ19iZWFjb25zKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX2JlYWNvbiwgYnRtcCwKKwkJCQkJICZyZWdfcGVuZGluZ19iZWFjb25zLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX2JlYWNvbi0+bGlzdCk7CisJCQlrZnJlZShyZWdfYmVhY29uKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKworCWlmICghbGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX2JlYWNvbiwgYnRtcCwKKwkJCQkJICZyZWdfYmVhY29uX2xpc3QsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCisJLyogRmlyc3QgcmVzdG9yZSB0byB0aGUgYmFzaWMgcmVndWxhdG9yeSBzZXR0aW5ncyAqLworCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKKworCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKworCXJlZ3VsYXRvcnlfaGludF9jb3JlKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKTsKKworCS8qCisJICogVGhpcyByZXN0b3JlcyB0aGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCisJICogcHJlZmVyZW5jZSBvciB0aGUgbGFzdCB1c2VyIHJlcXVlc3RlZCByZWd1bGF0b3J5CisJICogc2V0dGluZ3MsIHVzZXIgcmVndWxhdG9yeSBzZXR0aW5ncyB0YWtlcyBwcmVjZWRlbmNlLgorCSAqLworCWlmIChpc19hbl9hbHBoYTIoYWxwaGEyKSkKKwkJcmVndWxhdG9yeV9oaW50X3VzZXIodXNlcl9hbHBoYTIpOworfQorCisKK3ZvaWQgcmVndWxhdG9yeV9oaW50X2Rpc2Nvbm5lY3Qodm9pZCkKK3sKKwlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogQWxsIGRldmljZXMgYXJlIGRpc2Nvbm5lY3RlZCwgZ29pbmcgdG8gIgorCQkgICAgICAicmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzXG4iKTsKKwlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoZmFsc2UpOworfQorCiBzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCiB7CiAJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fApAQCAtMTg3NSwxMyArMjI4MCwxMiBAQAogCWlmICghcmVnX2JlYWNvbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBGb3VuZCBuZXcgYmVhY29uIG9uICIKLQkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsCi0JCWJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSwKLQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSksCi0JCXdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgorCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBGb3VuZCBuZXcgYmVhY29uIG9uICIKKwkJICAgICAgImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsCisJCSAgICAgIGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSwKKwkJICAgICAgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSksCisJCSAgICAgIHdpcGh5X25hbWUod2lwaHkpKTsKKwogCW1lbWNweSgmcmVnX2JlYWNvbi0+Y2hhbiwgYmVhY29uX2NoYW4sCiAJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpKTsKIApAQCAtMjAzOSw4ICsyNDQzLDcgQEAKIAkJICogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgogCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQKIAkJICovCi0JCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgotCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQorCQlpZiAoIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjM5LDE1ICsyNjQyLDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJnJlZ19yZXF1ZXN0c19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQotCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHN0YXRpY19yZWdkb20oaWVlZTgwMjExX3JlZ2RvbSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogVXNpbmcgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9cbiIpOwotCXByaW50X3JlZ2RvbWFpbl9pbmZvKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0jZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotI2VuZGlmCisJdXNlcl9hbHBoYTJbMF0gPSAnOSc7CisJdXNlcl9hbHBoYTJbMV0gPSAnNyc7CisKIAkvKiBXZSBhbHdheXMgdHJ5IHRvIGdldCBhbiB1cGRhdGUgZm9yIHRoZSBzdGF0aWMgcmVnZG9tYWluICovCiAJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCAzMzYyYzdjLi5iMjYyMjRhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC00MSwxNSArNDEsNDQgQEAKICAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgogICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIGdpdmluZyB0aGUgaGludCAodXNlZCBvbmx5IGZvciByZXBvcnRpbmcKICAqCWNvbmZsaWN0cykKKyAqIEBiYW5kOiB0aGUgYmFuZCBvbiB3aGljaCB0aGUgY291bnRyeSBJRSB3YXMgcmVjZWl2ZWQgb24uIFRoaXMgZGV0ZXJtaW5lcworICoJdGhlIGJhbmQgd2UnbGwgcHJvY2VzcyB0aGUgY291bnRyeSBJRSBjaGFubmVsIHRyaXBsZXRzIGZvci4KICAqIEBjb3VudHJ5X2llOiBwb2ludGVyIHRvIHRoZSBjb3VudHJ5IElFCiAgKiBAY291bnRyeV9pZV9sZW46IGxlbmd0aCBvZiB0aGUgY291bnRyeSBJRQogICoKICAqIFdlIHdpbGwgaW50ZXJzZWN0IHRoZSByZCB3aXRoIHRoZSB3aGF0IENSREEgdGVsbHMgdXMgc2hvdWxkIGFwcGx5CiAgKiBmb3IgdGhlIGFscGhhMiB0aGlzIGNvdW50cnkgSUUgYmVsb25ncyB0bywgdGhpcyBwcmV2ZW50cyBBUHMgZnJvbQogICogc2VuZGluZyB1cyBpbmNvcnJlY3Qgb3Igb3V0ZGF0ZWQgaW5mb3JtYXRpb24gYWdhaW5zdCBhIGNvdW50cnkuCisgKgorICogVGhlIEFQIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgQ291bnRyeSBJRSBjaGFubmVsIHRyaXBsZXRzIGZvciB0aGUKKyAqIGJhbmQgaXQgaXMgb24uIEl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlIGZvciBBUHMgdG8gc2VuZCBjaGFubmVsCisgKiBjb3VudHJ5IElFIHRyaXBsZXRzIGV2ZW4gZm9yIGNoYW5uZWxzIG91dHNpZGUgb2YgdGhlIGJhbmQgdGhleSBhcmUKKyAqIGluIGJ1dCBmb3IgdGhhdCB0aGV5IHdvdWxkIGhhdmUgdG8gdXNlIHRoZSByZWd1bGF0b3J5IGV4dGVuc2lvbgorICogaW4gY29tYmluYXRpb24gd2l0aCBhIHRyaXBsZXQgYnV0IHRoaXMgYmVoYXZpb3VyIGlzIGN1cnJlbnRseQorICogbm90IG9ic2VydmVkLiBGb3IgdGhpcyByZWFzb24gaWYgYSB0cmlwbGV0IGlzIHNlZW4gd2l0aCBjaGFubmVsCisgKiBpbmZvcm1hdGlvbiBmb3IgYSBiYW5kIHRoZSBCU1MgaXMgbm90IHByZXNlbnQgaW4gaXQgd2lsbCBiZSBpZ25vcmVkLgogICovCiB2b2lkIHJlZ3VsYXRvcnlfaGludF8xMWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgdTggKmNvdW50cnlfaWUsCiAJCQkgdTggY291bnRyeV9pZV9sZW4pOwogCisvKioKKyAqIHJlZ3VsYXRvcnlfaGludF9kaXNjb25uZWN0IC0gaW5mb3JtcyBhbGwgZGV2aWNlcyBoYXZlIGJlZW4gZGlzY29ubmV0ZWQKKyAqCisgKiBSZWd1bG90b3J5IHJ1bGVzIGNhbiBiZSBlbmhhbmNlZCBmdXJ0aGVyIHVwb24gc2Nhbm5pbmcgYW5kIHVwb24KKyAqIGNvbm5lY3Rpb24gdG8gYW4gQVAuIFRoZXNlIHJ1bGVzIGJlY29tZSBzdGFsZSBpZiB3ZSBkaXNjb25uZWN0CisgKiBhbmQgZ28gdG8gYW5vdGhlciBjb3VudHJ5LCB3aGV0aGVyIG9yIG5vdCB3ZSBzdXNwZW5kIGFuZCByZXN1bWUuCisgKiBJZiB3ZSBzdXNwZW5kLCBnbyB0byBhbm90aGVyIGNvdW50cnkgYW5kIHJlc3VtZSB3ZSdsbCBhdXRvbWF0aWNhbGx5CisgKiBnZXQgZGlzY29ubmVjdGVkIHNob3J0bHkgYWZ0ZXIgcmVzdW1pbmcgYW5kIHRoaW5ncyB3aWxsIGJlIHJlc2V0IGFzIHdlbGwuCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBoZWxwZXIgdG8gcmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzIHRvIGhvdyB0aGV5IHdlcmUKKyAqIHByaW9yIHRvIG91ciBmaXJzdCBjb25uZWN0IGF0dGVtcHQuIFRoaXMgaW5jbHVkZXMgaWdub3JpbmcgY291bnRyeSBJRSBhbmQKKyAqIGJlYWNvbiByZWd1bGF0b3J5IGhpbnRzLiBUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyIHdpbGwgYWx3YXlzCisgKiBiZSByZXNwZWN0ZWQgYnV0IGlmIGEgdXNlciBoYWQgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aGF0IHdpbGwgdGFrZQorICogcHJlY2VkZW5jZS4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KKyAqLwordm9pZCByZWd1bGF0b3J5X2hpbnRfZGlzY29ubmVjdCh2b2lkKTsKKwogI2VuZGlmICAvKiBfX05FVF9XSVJFTEVTU19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZ2RiLmggYi9uZXQvd2lyZWxlc3MvcmVnZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3JlZ2RiLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fUkVHREJfSF9fCisjZGVmaW5lIF9fUkVHREJfSF9fCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnX3JlZ2RiW107CitleHRlcm4gaW50IHJlZ19yZWdkYl9zaXplOworCisjZW5kaWYgLyogX19SRUdEQl9IX18gKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDBjMmNiYmUuLjk3OGNhYzMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTAwLDggKzEwMCwxMCBAQAogCWlmIChic3MtPnB1Yi5mcmVlX3ByaXYpCiAJCWJzcy0+cHViLmZyZWVfcHJpdigmYnNzLT5wdWIpOwogCi0JaWYgKGJzcy0+aWVzX2FsbG9jYXRlZCkKLQkJa2ZyZWUoYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChic3MtPmJlYWNvbl9pZXNfYWxsb2NhdGVkKQorCQlrZnJlZShic3MtPnB1Yi5iZWFjb25faWVzKTsKKwlpZiAoYnNzLT5wcm9iZXJlc3BfaWVzX2FsbG9jYXRlZCkKKwkJa2ZyZWUoYnNzLT5wdWIucHJvYmVyZXNwX2llcyk7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJmJzcy0+aG9sZCkpOwogCkBAIC0xNDEsOSArMTQzLDkgQEAKIAkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOwogfQogCi1zdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBpbnQgbGVuKQorY29uc3QgdTggKmNmZzgwMjExX2ZpbmRfaWUodTggZWlkLCBjb25zdCB1OCAqaWVzLCBpbnQgbGVuKQogewotCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKKwl3aGlsZSAobGVuID4gMiAmJiBpZXNbMF0gIT0gZWlkKSB7CiAJCWxlbiAtPSBpZXNbMV0gKyAyOwogCQlpZXMgKz0gaWVzWzFdICsgMjsKIAl9CkBAIC0xNTMsMTEgKzE1NSwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gaWVzOwogfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9maW5kX2llKTsKIAogc3RhdGljIGludCBjbXBfaWVzKHU4IG51bSwgdTggKmllczEsIHNpemVfdCBsZW4xLCB1OCAqaWVzMiwgc2l6ZV90IGxlbjIpCiB7Ci0JY29uc3QgdTggKmllMSA9IGZpbmRfaWUobnVtLCBpZXMxLCBsZW4xKTsKLQljb25zdCB1OCAqaWUyID0gZmluZF9pZShudW0sIGllczIsIGxlbjIpOworCWNvbnN0IHU4ICppZTEgPSBjZmc4MDIxMV9maW5kX2llKG51bSwgaWVzMSwgbGVuMSk7CisJY29uc3QgdTggKmllMiA9IGNmZzgwMjExX2ZpbmRfaWUobnVtLCBpZXMyLCBsZW4yKTsKIAlpbnQgcjsKIAogCWlmICghaWUxICYmICFpZTIpCkBAIC0xODMsOSArMTg2LDkgQEAKIAlpZiAoIXNzaWQpCiAJCXJldHVybiB0cnVlOwogCi0Jc3NpZGllID0gZmluZF9pZShXTEFOX0VJRF9TU0lELAotCQkJIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAotCQkJIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJc3NpZGllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9TU0lELAorCQkJCSAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwogCWlmICghc3NpZGllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHNzaWRpZVsxXSAhPSBzc2lkX2xlbikKQEAgLTIwMiw5ICsyMDUsOSBAQAogCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCi0JCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKIAlpZiAoIWllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGllWzFdICE9IG1lc2hpZGxlbikKQEAgLTIxMiw5ICsyMTUsOSBAQAogCWlmIChtZW1jbXAoaWUgKyAyLCBtZXNoaWQsIG1lc2hpZGxlbikpCiAJCXJldHVybiBmYWxzZTsKIAotCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKLQkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKLQkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKIAlpZiAoIWllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGllWzFdICE9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjb25mX2llKSkKQEAgLTM3NSw4ICszNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqCiBjZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzLAotCQkgICAgYm9vbCBvdmVyd3JpdGUpCisJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqZm91bmQgPSBOVUxMOwogCWNvbnN0IHU4ICptZXNoaWQsICptZXNoY2ZnOwpAQCAtMzk0LDExICszOTYsMTIgQEAKIAogCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CiAJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCi0JCW1lc2hpZCA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCQkJIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Ci0JCW1lc2hjZmcgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAotCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQltZXNoaWQgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCisJCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJCSAgcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwkJbWVzaGNmZyA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCQkJCSAgIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJCQkgICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwogCQlpZiAoIW1lc2hpZCB8fCAhbWVzaGNmZyB8fAogCQkgICAgbWVzaGNmZ1sxXSAhPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNoY29uZl9pZSkpIHsKIAkJCS8qIGJvZ3VzIG1lc2ggKi8KQEAgLTQxOCwyOCArNDIxLDY0IEBACiAJCWZvdW5kLT5wdWIuY2FwYWJpbGl0eSA9IHJlcy0+cHViLmNhcGFiaWxpdHk7CiAJCWZvdW5kLT50cyA9IHJlcy0+dHM7CiAKLQkJLyogb3ZlcndyaXRlIElFcyAqLwotCQlpZiAob3ZlcndyaXRlKSB7CisJCS8qIFVwZGF0ZSBJRXMgKi8KKwkJaWYgKHJlcy0+cHViLnByb2JlcmVzcF9pZXMpIHsKIAkJCXNpemVfdCB1c2VkID0gZGV2LT53aXBoeS5ic3NfcHJpdl9zaXplICsgc2l6ZW9mKCpyZXMpOwotCQkJc2l6ZV90IGllbGVuID0gcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCQkJc2l6ZV90IGllbGVuID0gcmVzLT5wdWIubGVuX3Byb2JlcmVzcF9pZXM7CiAKLQkJCWlmICghZm91bmQtPmllc19hbGxvY2F0ZWQgJiYga3NpemUoZm91bmQpID49IHVzZWQgKyBpZWxlbikgewotCQkJCW1lbWNweShmb3VuZC0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAotCQkJCSAgICAgICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywgaWVsZW4pOwotCQkJCWZvdW5kLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0gaWVsZW47CisJCQlpZiAoZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzICYmCisJCQkgICAgIWZvdW5kLT5wcm9iZXJlc3BfaWVzX2FsbG9jYXRlZCAmJgorCQkJICAgIGtzaXplKGZvdW5kKSA+PSB1c2VkICsgaWVsZW4pIHsKKwkJCQltZW1jcHkoZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzLAorCQkJCSAgICAgICByZXMtPnB1Yi5wcm9iZXJlc3BfaWVzLCBpZWxlbik7CisJCQkJZm91bmQtPnB1Yi5sZW5fcHJvYmVyZXNwX2llcyA9IGllbGVuOwogCQkJfSBlbHNlIHsKLQkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50czsKKwkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzOwogCi0JCQkJaWYgKGZvdW5kLT5pZXNfYWxsb2NhdGVkKQorCQkJCWlmIChmb3VuZC0+cHJvYmVyZXNwX2llc19hbGxvY2F0ZWQpCiAJCQkJCWllcyA9IGtyZWFsbG9jKGllcywgaWVsZW4sIEdGUF9BVE9NSUMpOwogCQkJCWVsc2UKIAkJCQkJaWVzID0ga21hbGxvYyhpZWxlbiwgR0ZQX0FUT01JQyk7CiAKIAkJCQlpZiAoaWVzKSB7Ci0JCQkJCW1lbWNweShpZXMsIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBpZWxlbik7Ci0JCQkJCWZvdW5kLT5pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKLQkJCQkJZm91bmQtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9IGllczsKLQkJCQkJZm91bmQtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkJCQkJbWVtY3B5KGllcywgcmVzLT5wdWIucHJvYmVyZXNwX2llcywKKwkJCQkJICAgICAgIGllbGVuKTsKKwkJCQkJZm91bmQtPnByb2JlcmVzcF9pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJCQkJZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzID0gaWVzOworCQkJCQlmb3VuZC0+cHViLmxlbl9wcm9iZXJlc3BfaWVzID0gaWVsZW47CisJCQkJfQorCQkJfQorCisJCQkvKiBPdmVycmlkZSBwb3NzaWJsZSBlYXJsaWVyIEJlYWNvbiBmcmFtZSBJRXMgKi8KKwkJCWZvdW5kLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPQorCQkJCWZvdW5kLT5wdWIucHJvYmVyZXNwX2llczsKKwkJCWZvdW5kLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0KKwkJCQlmb3VuZC0+cHViLmxlbl9wcm9iZXJlc3BfaWVzOworCQl9CisJCWlmIChyZXMtPnB1Yi5iZWFjb25faWVzKSB7CisJCQlzaXplX3QgdXNlZCA9IGRldi0+d2lwaHkuYnNzX3ByaXZfc2l6ZSArIHNpemVvZigqcmVzKTsKKwkJCXNpemVfdCBpZWxlbiA9IHJlcy0+cHViLmxlbl9iZWFjb25faWVzOworCisJCQlpZiAoZm91bmQtPnB1Yi5iZWFjb25faWVzICYmCisJCQkgICAgIWZvdW5kLT5iZWFjb25faWVzX2FsbG9jYXRlZCAmJgorCQkJICAgIGtzaXplKGZvdW5kKSA+PSB1c2VkICsgaWVsZW4pIHsKKwkJCQltZW1jcHkoZm91bmQtPnB1Yi5iZWFjb25faWVzLAorCQkJCSAgICAgICByZXMtPnB1Yi5iZWFjb25faWVzLCBpZWxlbik7CisJCQkJZm91bmQtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5iZWFjb25faWVzOworCisJCQkJaWYgKGZvdW5kLT5iZWFjb25faWVzX2FsbG9jYXRlZCkKKwkJCQkJaWVzID0ga3JlYWxsb2MoaWVzLCBpZWxlbiwgR0ZQX0FUT01JQyk7CisJCQkJZWxzZQorCQkJCQlpZXMgPSBrbWFsbG9jKGllbGVuLCBHRlBfQVRPTUlDKTsKKworCQkJCWlmIChpZXMpIHsKKwkJCQkJbWVtY3B5KGllcywgcmVzLT5wdWIuYmVhY29uX2llcywKKwkJCQkJICAgICAgIGllbGVuKTsKKwkJCQkJZm91bmQtPmJlYWNvbl9pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJCQkJZm91bmQtPnB1Yi5iZWFjb25faWVzID0gaWVzOworCQkJCQlmb3VuZC0+cHViLmxlbl9iZWFjb25faWVzID0gaWVsZW47CiAJCQkJfQogCQkJfQogCQl9CkBAIC00ODksMTQgKzUyOCwyNiBAQAogCXJlcy0+cHViLnRzZiA9IHRpbWVzdGFtcDsKIAlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWw7CiAJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7Ci0JLyogcG9pbnQgdG8gYWZ0ZXIgdGhlIHByaXZhdGUgYXJlYSAqLwotCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gKHU4ICopcmVzICsgc2l6ZW9mKCpyZXMpICsgcHJpdnN6OwotCW1lbWNweShyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywgaWUsIGllbGVuKTsKLQlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkvKgorCSAqIFNpbmNlIHdlIGRvIG5vdCBrbm93IGhlcmUgd2hldGhlciB0aGUgSUVzIGFyZSBmcm9tIGEgQmVhY29uIG9yIFByb2JlCisJICogUmVzcG9uc2UgZnJhbWUsIHdlIG5lZWQgdG8gcGljayBvbmUgb2YgdGhlIG9wdGlvbnMgYW5kIG9ubHkgdXNlIGl0CisJICogd2l0aCB0aGUgZHJpdmVyIHRoYXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgZnVsbCBCZWFjb24vUHJvYmUgUmVzcG9uc2UKKwkgKiBmcmFtZS4gVXNlIEJlYWNvbiBmcmFtZSBwb2ludGVyIHRvIGF2b2lkIGluZGljYXRpbmcgdGhhdCB0aGlzIHNob3VsZAorCSAqIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbl9lbGVtZW50cyBwb2ludGVyIHNob3VsZCB3ZSBoYXZlIHJlY2VpdmVkIGFuCisJICogZWFybGllciBpbmRpY2F0aW9uIG9mIFByb2JlIFJlc3BvbnNlIGRhdGEuCisJICoKKwkgKiBUaGUgaW5pdGlhbCBidWZmZXIgZm9yIHRoZSBJRXMgaXMgYWxsb2NhdGVkIHdpdGggdGhlIEJTUyBlbnRyeSBhbmQKKwkgKiBpcyBsb2NhdGVkIGFmdGVyIHRoZSBwcml2YXRlIGFyZWEuCisJICovCisJcmVzLT5wdWIuYmVhY29uX2llcyA9ICh1OCAqKXJlcyArIHNpemVvZigqcmVzKSArIHByaXZzejsKKwltZW1jcHkocmVzLT5wdWIuYmVhY29uX2llcywgaWUsIGllbGVuKTsKKwlyZXMtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIuYmVhY29uX2llczsKKwlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSByZXMtPnB1Yi5sZW5fYmVhY29uX2llczsKIAogCWtyZWZfaW5pdCgmcmVzLT5yZWYpOwogCi0JcmVzID0gY2ZnODAyMTFfYnNzX3VwZGF0ZSh3aXBoeV90b19kZXYod2lwaHkpLCByZXMsIDApOworCXJlcyA9IGNmZzgwMjExX2Jzc191cGRhdGUod2lwaHlfdG9fZGV2KHdpcGh5KSwgcmVzKTsKIAlpZiAoIXJlcykKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTUxNyw3ICs1NjgsNiBAQAogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlczsKIAlzaXplX3QgaWVsZW4gPSBsZW4gLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCiAJCQkJICAgICAgdS5wcm9iZV9yZXNwLnZhcmlhYmxlKTsKLQlib29sIG92ZXJ3cml0ZTsKIAlzaXplX3QgcHJpdnN6ID0gd2lwaHktPmJzc19wcml2X3NpemU7CiAKIAlpZiAoV0FSTl9PTih3aXBoeS0+c2lnbmFsX3R5cGUgPT0gTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyAmJgpAQCAtNTM4LDE2ICs1ODgsMjggQEAKIAlyZXMtPnB1Yi50c2YgPSBsZTY0X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AudGltZXN0YW1wKTsKIAlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuYmVhY29uX2ludCk7CiAJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKTsKLQkvKiBwb2ludCB0byBhZnRlciB0aGUgcHJpdmF0ZSBhcmVhICovCi0JcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPSAodTggKilyZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7Ci0JbWVtY3B5KHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGllbGVuKTsKLQlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkvKgorCSAqIFRoZSBpbml0aWFsIGJ1ZmZlciBmb3IgdGhlIElFcyBpcyBhbGxvY2F0ZWQgd2l0aCB0aGUgQlNTIGVudHJ5IGFuZAorCSAqIGlzIGxvY2F0ZWQgYWZ0ZXIgdGhlIHByaXZhdGUgYXJlYS4KKwkgKi8KKwlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJcmVzLT5wdWIucHJvYmVyZXNwX2llcyA9ICh1OCAqKSByZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJCW1lbWNweShyZXMtPnB1Yi5wcm9iZXJlc3BfaWVzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsCisJCSAgICAgICBpZWxlbik7CisJCXJlcy0+cHViLmxlbl9wcm9iZXJlc3BfaWVzID0gaWVsZW47CisJCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIucHJvYmVyZXNwX2llczsKKwkJcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIubGVuX3Byb2JlcmVzcF9pZXM7CisJfSBlbHNlIHsKKwkJcmVzLT5wdWIuYmVhY29uX2llcyA9ICh1OCAqKSByZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJCW1lbWNweShyZXMtPnB1Yi5iZWFjb25faWVzLCBtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgaWVsZW4pOworCQlyZXMtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCQlyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9IHJlcy0+cHViLmJlYWNvbl9pZXM7CisJCXJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyA9IHJlcy0+cHViLmxlbl9iZWFjb25faWVzOworCX0KIAogCWtyZWZfaW5pdCgmcmVzLT5yZWYpOwogCi0Jb3ZlcndyaXRlID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcywgb3ZlcndyaXRlKTsKKwlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcyk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmMKaW5kZXggZGMwZmM0OS4uMTdmZGUwZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NtZS5jCisrKyBiL25ldC93aXJlbGVzcy9zbWUuYwpAQCAtMzQsNiArMzQsNDQgQEAKIAlib29sIGF1dG9fYXV0aCwgcHJldl9ic3NpZF92YWxpZDsKIH07CiAKK2Jvb2wgY2ZnODAyMTFfaXNfYWxsX2lkbGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlib29sIGlzX2FsbF9pZGxlID0gdHJ1ZTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCS8qCisJICogQWxsIGRldmljZXMgbXVzdCBiZSBpZGxlIGFzIG90aGVyd2lzZSBpZiB5b3UgYXJlIGFjdGl2ZWx5CisJICogc2Nhbm5pbmcgc29tZSBuZXcgYmVhY29uIGhpbnRzIGNvdWxkIGJlIGxlYXJuZWQgYW5kIHdvdWxkCisJICogY291bnQgYXMgbmV3IHJlZ3VsYXRvcnkgaGludHMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJCXdkZXZfbG9jayh3ZGV2KTsKKwkJCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0lETEUpCisJCQkJaXNfYWxsX2lkbGUgPSBmYWxzZTsKKwkJCXdkZXZfdW5sb2NrKHdkZXYpOworCQl9CisJCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCX0KKworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJcmV0dXJuIGlzX2FsbF9pZGxlOworfQorCitzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWlmICghY2ZnODAyMTFfaXNfYWxsX2lkbGUoKSkKKwkJcmV0dXJuOworCisJcmVndWxhdG9yeV9oaW50X2Rpc2Nvbm5lY3QoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhjZmc4MDIxMV9kaXNjb25uZWN0X3dvcmssIGRpc2Nvbm5lY3Rfd29yayk7CiAKIHN0YXRpYyBpbnQgY2ZnODAyMTFfY29ubl9zY2FuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiB7CkBAIC00NTQsNiArNDkyLDcgQEAKIAkgKiAtIGFuZCBjb3VudHJ5X2llWzFdIHdoaWNoIGlzIHRoZSBJRSBsZW5ndGgKIAkgKi8KIAlyZWd1bGF0b3J5X2hpbnRfMTFkKHdkZXYtPndpcGh5LAorCQkJICAgIGJzcy0+Y2hhbm5lbC0+YmFuZCwKIAkJCSAgICBjb3VudHJ5X2llICsgMiwKIAkJCSAgICBjb3VudHJ5X2llWzFdKTsKIH0KQEAgLTY1Nyw2ICs2OTYsOCBAQAogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIAl3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW4gPSAwOwogI2VuZGlmCisKKwlzY2hlZHVsZV93b3JrKCZjZmc4MDIxMV9kaXNjb25uZWN0X3dvcmspOwogfQogCiB2b2lkIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcmVhc29uLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwppbmRleCBlZmUzYzVjLi45ZjJjZWYzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYworKysgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwpAQCAtMzMsMTAgKzMzLDMwIEBACiAKIFNIT1dfRk1UKGluZGV4LCAiJWQiLCB3aXBoeV9pZHgpOwogU0hPV19GTVQobWFjYWRkcmVzcywgIiVwTSIsIHdpcGh5LnBlcm1fYWRkcik7CitTSE9XX0ZNVChhZGRyZXNzX21hc2ssICIlcE0iLCB3aXBoeS5hZGRyX21hc2spOworCitzdGF0aWMgc3NpemVfdCBhZGRyZXNzZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmRldl90b19yZGV2KGRldiktPndpcGh5OworCWNoYXIgKnN0YXJ0ID0gYnVmOworCWludCBpOworCisJaWYgKCF3aXBoeS0+YWRkcmVzc2VzKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlcE1cbiIsIHdpcGh5LT5wZXJtX2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IHdpcGh5LT5uX2FkZHJlc3NlczsgaSsrKQorCQlidWYgKz0gc3ByaW50ZihidWYsICIlcE1cbiIsICZ3aXBoeS0+YWRkcmVzc2VzW2ldLmFkZHIpOworCisJcmV0dXJuIGJ1ZiAtIHN0YXJ0OworfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWVlZTgwMjExX2Rldl9hdHRyc1tdID0gewogCV9fQVRUUl9STyhpbmRleCksCiAJX19BVFRSX1JPKG1hY2FkZHJlc3MpLAorCV9fQVRUUl9STyhhZGRyZXNzX21hc2spLAorCV9fQVRUUl9STyhhZGRyZXNzZXMpLAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCA1OTM2MWZkLi5iZTJhYjhjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTIyNyw4ICsyMjcsMTEgQEAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CiAJCWlmIChpZWVlODAyMTFfaGFzX2E0KGZjKSkKIAkJCWhkcmxlbiA9IDMwOwotCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJCWhkcmxlbiArPSBJRUVFODAyMTFfUU9TX0NUTF9MRU47CisJCQlpZiAoaWVlZTgwMjExX2hhc19vcmRlcihmYykpCisJCQkJaGRybGVuICs9IElFRUU4MDIxMV9IVF9DVExfTEVOOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjg1LDcgKzI4OCw3IEBACiAJfQogfQogCi1pbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYWRkciwKK2ludCBpZWVlODAyMTFfZGF0YV90b184MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CkBAIC0zODMsNyArMzg2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2RhdGFfdG9fODAyMyk7CiAKLWludCBpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTggKmJzc2lkLCBib29sIHFvcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CkBAIC00OTcsNiArNTAwLDEwMSBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMpOwogCisKK3ZvaWQgaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCisJCQkgICAgICBjb25zdCB1OCAqYWRkciwgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20pCit7CisJc3RydWN0IHNrX2J1ZmYgKmZyYW1lID0gTlVMTDsKKwl1MTYgZXRoZXJ0eXBlOworCXU4ICpwYXlsb2FkOworCWNvbnN0IHN0cnVjdCBldGhoZHIgKmV0aDsKKwlpbnQgcmVtYWluaW5nLCBlcnI7CisJdTggZHN0W0VUSF9BTEVOXSwgc3JjW0VUSF9BTEVOXTsKKworCWVyciA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc2tiLCBhZGRyLCBpZnR5cGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogc2tpcCB0aGUgd3JhcHBpbmcgaGVhZGVyICovCisJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCWlmICghZXRoKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKKwkJdTggcGFkZGluZzsKKwkJX19iZTE2IGxlbiA9IGV0aC0+aF9wcm90bzsKKwkJdW5zaWduZWQgaW50IHN1YmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIG50b2hzKGxlbik7CisKKwkJcmVtYWluaW5nID0gc2tiLT5sZW47CisJCW1lbWNweShkc3QsIGV0aC0+aF9kZXN0LCBFVEhfQUxFTik7CisJCW1lbWNweShzcmMsIGV0aC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKKworCQlwYWRkaW5nID0gKDQgLSBzdWJmcmFtZV9sZW4pICYgMHgzOworCQkvKiB0aGUgbGFzdCBNU0RVIGhhcyBubyBwYWRkaW5nICovCisJCWlmIChzdWJmcmFtZV9sZW4gPiByZW1haW5pbmcpCisJCQlnb3RvIHB1cmdlOworCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwkJLyogcmV1c2Ugc2tiIGZvciB0aGUgbGFzdCBzdWJmcmFtZSAqLworCQlpZiAocmVtYWluaW5nIDw9IHN1YmZyYW1lX2xlbiArIHBhZGRpbmcpCisJCQlmcmFtZSA9IHNrYjsKKwkJZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgaGxlbiA9IEFMSUdOKGV4dHJhX2hlYWRyb29tLCA0KTsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgcmVzZXJ2ZSB0d28gYnl0ZXMgbW9yZSBmb3IgcGF5bG9hZAorCQkJICogYWxpZ25tZW50IHNpbmNlIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSBpcyAxNC4KKwkJCSAqLworCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGhsZW4gKyBzdWJmcmFtZV9sZW4gKyAyKTsKKwkJCWlmICghZnJhbWUpCisJCQkJZ290byBwdXJnZTsKKworCQkJc2tiX3Jlc2VydmUoZnJhbWUsIGhsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKKwkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAorCQkJCW50b2hzKGxlbikpOworCisJCQlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdWxsKHNrYiwgbnRvaHMobGVuKSArCisJCQkJCQkJcGFkZGluZyk7CisJCQlpZiAoIWV0aCkgeworCQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOworCQkJCWdvdG8gcHVyZ2U7CisJCQl9CisJCX0KKworCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoZnJhbWUpOworCQlmcmFtZS0+ZGV2ID0gc2tiLT5kZXY7CisJCWZyYW1lLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CisKKwkJcGF5bG9hZCA9IGZyYW1lLT5kYXRhOworCQlldGhlcnR5cGUgPSAocGF5bG9hZFs2XSA8PCA4KSB8IHBheWxvYWRbN107CisKKwkJaWYgKGxpa2VseSgoY29tcGFyZV9ldGhlcl9hZGRyKHBheWxvYWQsIHJmYzEwNDJfaGVhZGVyKSA9PSAwICYmCisJCQkgICAgZXRoZXJ0eXBlICE9IEVUSF9QX0FBUlAgJiYgZXRoZXJ0eXBlICE9IEVUSF9QX0lQWCkgfHwKKwkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihwYXlsb2FkLAorCQkJCQkgICAgICBicmlkZ2VfdHVubmVsX2hlYWRlcikgPT0gMCkpIHsKKwkJCS8qIHJlbW92ZSBSRkMxMDQyIG9yIEJyaWRnZS1UdW5uZWwKKwkJCSAqIGVuY2Fwc3VsYXRpb24gYW5kIHJlcGxhY2UgRXRoZXJUeXBlICovCisJCQlza2JfcHVsbChmcmFtZSwgNik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgc3JjLCBFVEhfQUxFTik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgZHN0LCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIHNpemVvZihfX2JlMTYpKSwgJmxlbiwKKwkJCQlzaXplb2YoX19iZTE2KSk7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgc3JjLCBFVEhfQUxFTik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgZHN0LCBFVEhfQUxFTik7CisJCX0KKwkJX19za2JfcXVldWVfdGFpbChsaXN0LCBmcmFtZSk7CisJfQorCisJcmV0dXJuOworCisgcHVyZ2U6CisJX19za2JfcXVldWVfcHVyZ2UobGlzdCk7Cisgb3V0OgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKTsKKwogLyogR2l2ZW4gYSBkYXRhIGZyYW1lIGRldGVybWluZSB0aGUgODAyLjFwLzFkIHRhZyB0byB1c2UuICovCiB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzIwLDMgKzgxOCwzNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KKwordTE2IGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKHN0cnVjdCByYXRlX2luZm8gKnJhdGUpCit7CisJaW50IG1vZHVsYXRpb24sIHN0cmVhbXMsIGJpdHJhdGU7CisKKwlpZiAoIShyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19NQ1MpKQorCQlyZXR1cm4gcmF0ZS0+bGVnYWN5OworCisJLyogdGhlIGZvcm11bGEgYmVsb3cgZG9lcyBvbmx5IHdvcmsgZm9yIE1DUyB2YWx1ZXMgc21hbGxlciB0aGFuIDMyICovCisJaWYgKHJhdGUtPm1jcyA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwltb2R1bGF0aW9uID0gcmF0ZS0+bWNzICYgNzsKKwlzdHJlYW1zID0gKHJhdGUtPm1jcyA+PiAzKSArIDE7CisKKwliaXRyYXRlID0gKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSCkgPworCQkJMTM1MDAwMDAgOiA2NTAwMDAwOworCisJaWYgKG1vZHVsYXRpb24gPCA0KQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMSk7CisJZWxzZSBpZiAobW9kdWxhdGlvbiA9PSA0KQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMik7CisJZWxzZQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMyk7CisKKwliaXRyYXRlICo9IHN0cmVhbXM7CisKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0kpCisJCWJpdHJhdGUgPSAoYml0cmF0ZSAvIDkpICogMTA7CisKKwkvKiBkbyBOT1Qgcm91bmQgZG93biBoZXJlICovCisJcmV0dXJuIChiaXRyYXRlICsgNTAwMDApIC8gMTAwMDAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1NGZhY2UzLi45YWI1MTgzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtMTA5OSw4ICsxMDk5LDggQEAKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7Ci0JYm9vbCBwcyA9IHdkZXYtPndleHQucHM7Ci0JaW50IHRpbWVvdXQgPSB3ZGV2LT53ZXh0LnBzX3RpbWVvdXQ7CisJYm9vbCBwcyA9IHdkZXYtPnBzOworCWludCB0aW1lb3V0ID0gd2Rldi0+cHNfdGltZW91dDsKIAlpbnQgZXJyOwogCiAJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQpAQCAtMTEzMyw4ICsxMTMzLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jd2Rldi0+d2V4dC5wcyA9IHBzOwotCXdkZXYtPndleHQucHNfdGltZW91dCA9IHRpbWVvdXQ7CisJd2Rldi0+cHMgPSBwczsKKwl3ZGV2LT5wc190aW1lb3V0ID0gdGltZW91dDsKIAogCXJldHVybiAwOwogCkBAIC0xMTQ3LDcgKzExNDcsNyBAQAogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAKLQl3cnEtPmRpc2FibGVkID0gIXdkZXYtPndleHQucHM7CisJd3JxLT5kaXNhYmxlZCA9ICF3ZGV2LT5wczsKIAogCXJldHVybiAwOwogfQpAQCAtMTIwNCwyMSArMTIwNCw0NyBAQAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKIAlzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrIG1hc2s7CisJdTMyIGZpeGVkLCBtYXhyYXRlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWludCBiYW5kLCByaWR4OworCWJvb2wgbWF0Y2ggPSBmYWxzZTsKIAogCWlmICghcmRldi0+b3BzLT5zZXRfYml0cmF0ZV9tYXNrKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQltYXNrLmZpeGVkID0gMDsKLQltYXNrLm1heHJhdGUgPSAwOworCW1lbXNldCgmbWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKKwlmaXhlZCA9IDA7CisJbWF4cmF0ZSA9ICh1MzIpLTE7CiAKIAlpZiAocmF0ZS0+dmFsdWUgPCAwKSB7CiAJCS8qIG5vdGhpbmcgKi8KIAl9IGVsc2UgaWYgKHJhdGUtPmZpeGVkKSB7Ci0JCW1hc2suZml4ZWQgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwkJZml4ZWQgPSByYXRlLT52YWx1ZSAvIDEwMDAwMDsKIAl9IGVsc2UgewotCQltYXNrLm1heHJhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwkJbWF4cmF0ZSA9IHJhdGUtPnZhbHVlIC8gMTAwMDAwOwogCX0KIAorCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJc2JhbmQgPSB3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF07CisJCWlmIChzYmFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWZvciAocmlkeCA9IDA7IHJpZHggPCBzYmFuZC0+bl9iaXRyYXRlczsgcmlkeCsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnNyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tyaWR4XTsKKwkJCWlmIChmaXhlZCA9PSBzcmF0ZS0+Yml0cmF0ZSkgeworCQkJCW1hc2suY29udHJvbFtiYW5kXS5sZWdhY3kgPSAxIDw8IHJpZHg7CisJCQkJbWF0Y2ggPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNyYXRlLT5iaXRyYXRlIDw9IG1heHJhdGUpIHsKKwkJCQltYXNrLmNvbnRyb2xbYmFuZF0ubGVnYWN5IHw9IDEgPDwgcmlkeDsKKwkJCQltYXRjaCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiByZGV2LT5vcHMtPnNldF9iaXRyYXRlX21hc2sod2Rldi0+d2lwaHksIGRldiwgTlVMTCwgJm1hc2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdyYXRlKTsKQEAgLTEyNTcsMTAgKzEyODMsNyBAQAogCWlmICghKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9CSVRSQVRFKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmF0ZS0+dmFsdWUgPSAwOwotCi0JaWYgKCEoc2luZm8udHhyYXRlLmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCi0JCXJhdGUtPnZhbHVlID0gMTAwMDAwICogc2luZm8udHhyYXRlLmxlZ2FjeTsKKwlyYXRlLT52YWx1ZSA9IDEwMDAwMCAqIGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby50eHJhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMKaW5kZXggMjczYTdmNy4uOGJhZmEzMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LXByb2MuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1pbnQgd2V4dF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgd2V4dF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCS8qIENyZWF0ZSAvcHJvYy9uZXQvd2lyZWxlc3MgZW50cnkgKi8KIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgIndpcmVsZXNzIiwgU19JUlVHTywgJndpcmVsZXNzX3NlcV9mb3BzKSkKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHdleHRfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCB3ZXh0X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgIndpcmVsZXNzIik7CiB9CmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCBlMzIxOWU0Li45Nzk2ZjNlIDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KQEAgLTUxMiwxNSArNTEzLDIwIEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCB4MjVfc29jayAqeDI1OwotCWludCByYyA9IC1FU09DS1ROT1NVUFBPUlQ7CisJaW50IHJjID0gLUVBRk5PU1VQUE9SVDsKIAogCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKLQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0KLQlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCB8fCBwcm90b2NvbCkKIAkJZ290byBvdXQ7CiAKLQlyYyA9IC1FTk9NRU07CisJcmMgPSAtRVNPQ0tUTk9TVVBQT1JUOworCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQorCQlnb3RvIG91dDsKKworCXJjID0gLUVJTlZBTDsKKwlpZiAocHJvdG9jb2wpCisJCWdvdG8gb3V0OworCisJcmMgPSAtRU5PQlVGUzsKIAlpZiAoKHNrID0geDI1X2FsbG9jX3NvY2tldChuZXQpKSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNjQzLDcgKzY0OSw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2thZGRyX3gyNSAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfeDI1ICopdWFkZHI7Ci0JaW50IHJjID0gMDsKKwlpbnQgbGVuLCBpLCByYyA9IDA7CiAKIAlsb2NrX2tlcm5lbCgpOwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkgfHwKQEAgLTY1Myw2ICs2NTksMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbGVuID0gc3RybGVuKGFkZHItPnN4MjVfYWRkci54MjVfYWRkcik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICghaXNkaWdpdChhZGRyLT5zeDI1X2FkZHIueDI1X2FkZHJbaV0pKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCXgyNV9zayhzayktPnNvdXJjZV9hZGRyID0gYWRkci0+c3gyNV9hZGRyOwogCXgyNV9pbnNlcnRfc29ja2V0KHNrKTsKIAlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X3Byb2MuYyBiL25ldC94MjUveDI1X3Byb2MuYwppbmRleCAwYTA0ZTYyLi43ZmYzNzM3IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9wcm9jLmMKKysrIGIvbmV0L3gyNS94MjVfcHJvYy5jCkBAIC0yNSw0OSArMjUsMTcgQEAKICNpbmNsdWRlIDxuZXQveDI1Lmg+CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHgyNV9yb3V0ZSAqeDI1X2dldF9yb3V0ZV9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyb3V0ZV9lbnRyeTsKLQlzdHJ1Y3QgeDI1X3JvdXRlICpydCA9IE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoKHJvdXRlX2VudHJ5LCAmeDI1X3JvdXRlX2xpc3QpIHsKLQkJcnQgPSBsaXN0X2VudHJ5KHJvdXRlX2VudHJ5LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCXJ0ID0gTlVMTDsKLWZvdW5kOgotCXJldHVybiBydDsKLX0KIAogc3RhdGljIHZvaWQgKngyNV9zZXFfcm91dGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoeDI1X3JvdXRlX2xpc3RfbG9jaykKIHsKLQlsb2ZmX3QgbCA9ICpwb3M7Ci0KIAlyZWFkX2xvY2tfYmgoJngyNV9yb3V0ZV9saXN0X2xvY2spOwotCXJldHVybiBsID8geDI1X2dldF9yb3V0ZV9pZHgoLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnRfaGVhZCgmeDI1X3JvdXRlX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqeDI1X3NlcV9yb3V0ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgeDI1X3JvdXRlICpydDsKLQotCSsrKnBvczsKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJcnQgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJngyNV9yb3V0ZV9saXN0KSkKLQkJCXJ0ID0gbGlzdF9lbnRyeSh4MjVfcm91dGVfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJ0ID0gdjsKLQlpZiAocnQtPm5vZGUubmV4dCAhPSAmeDI1X3JvdXRlX2xpc3QpCi0JCXJ0ID0gbGlzdF9lbnRyeShydC0+bm9kZS5uZXh0LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQllbHNlCi0JCXJ0ID0gTlVMTDsKLW91dDoKLQlyZXR1cm4gcnQ7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJngyNV9yb3V0ZV9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCB4MjVfc2VxX3JvdXRlX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC03OCw5ICs0Niw5IEBACiAKIHN0YXRpYyBpbnQgeDI1X3NlcV9yb3V0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0cnVjdCB4MjVfcm91dGUgKnJ0OworCXN0cnVjdCB4MjVfcm91dGUgKnJ0ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKIAotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCWlmICh2ID09ICZ4MjVfcm91dGVfbGlzdCkgewogCQlzZXFfcHV0cyhzZXEsICJBZGRyZXNzICAgICAgICAgIERpZ2l0cyAgRGV2aWNlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTMsNDAgKzYxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBzb2NrICp4MjVfZ2V0X3NvY2tldF9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCXNrX2Zvcl9lYWNoKHMsIG5vZGUsICZ4MjVfbGlzdCkKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JcyA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gczsKLX0KLQogc3RhdGljIHZvaWQgKngyNV9zZXFfc29ja2V0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKHgyNV9saXN0X2xvY2spCiB7Ci0JbG9mZl90IGwgPSAqcG9zOwotCiAJcmVhZF9sb2NrX2JoKCZ4MjVfbGlzdF9sb2NrKTsKLQlyZXR1cm4gbCA/IHgyNV9nZXRfc29ja2V0X2lkeCgtLWwpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnRfaGVhZCgmeDI1X2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqeDI1X3NlcV9zb2NrZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXMgPSBza19oZWFkKCZ4MjVfbGlzdCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlzID0gc2tfbmV4dCh2KTsKLW91dDoKLQlyZXR1cm4gczsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJngyNV9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCB4MjVfc2VxX3NvY2tldF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTQ4LDcgKzkyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcyA9IHY7CisJcyA9IHNrX2VudHJ5KHYpOwogCXgyNSA9IHgyNV9zayhzKTsKIAogCWlmICgheDI1LT5uZWlnaGJvdXIgfHwgKGRldiA9IHgyNS0+bmVpZ2hib3VyLT5kZXYpID09IE5VTEwpCkBAIC0xNzAsNTEgKzExNCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgeDI1X2ZvcndhcmQgKngyNV9nZXRfZm9yd2FyZF9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0KLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmeDI1X2ZvcndhcmRfbGlzdCkgewotCQlmID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHgyNV9mb3J3YXJkLCBub2RlKTsKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCi0JZiA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gZjsKLX0KLQogc3RhdGljIHZvaWQgKngyNV9zZXFfZm9yd2FyZF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyh4MjVfZm9yd2FyZF9saXN0X2xvY2spCiB7Ci0JbG9mZl90IGwgPSAqcG9zOwotCiAJcmVhZF9sb2NrX2JoKCZ4MjVfZm9yd2FyZF9saXN0X2xvY2spOwotCXJldHVybiBsID8geDI1X2dldF9mb3J3YXJkX2lkeCgtLWwpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBzZXFfbGlzdF9zdGFydF9oZWFkKCZ4MjVfZm9yd2FyZF9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKngyNV9zZXFfZm9yd2FyZF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCWYgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJngyNV9mb3J3YXJkX2xpc3QpKQotCQkJZiA9IGxpc3RfZW50cnkoeDI1X2ZvcndhcmRfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JZiA9IHY7Ci0JaWYgKGYtPm5vZGUubmV4dCAhPSAmeDI1X2ZvcndhcmRfbGlzdCkKLQkJZiA9IGxpc3RfZW50cnkoZi0+bm9kZS5uZXh0LCBzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwotCWVsc2UKLQkJZiA9IE5VTEw7Ci1vdXQ6Ci0JcmV0dXJuIGY7Ci0KKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmeDI1X2ZvcndhcmRfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgeDI1X3NlcV9mb3J3YXJkX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yMjUsOSArMTM0LDkgQEAKIAogc3RhdGljIGludCB4MjVfc2VxX2ZvcndhcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7CisJc3RydWN0IHgyNV9mb3J3YXJkICpmID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHYgPT0gJngyNV9mb3J3YXJkX2xpc3QpIHsKIAkJc2VxX3ByaW50ZihzZXEsICJsY2kgZGV2MSAgICAgICBkZXYyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjM2LDcgKzE0NSw2IEBACiAKIAlzZXFfcHJpbnRmKHNlcSwgIiVkICUtMTBzICUtMTBzXG4iLAogCQkJZi0+bGNpLCBmLT5kZXYxLT5uYW1lLCBmLT5kZXYyLT5uYW1lKTsKLQogb3V0OgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA3NDNjMDEzNGEuLjhiNGQ2ZTMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC0xMjUsNiArMTI1LDIyIEBACiAJCS5zYWRiX2FsZ19tYXhiaXRzID0gMjU2CiAJfQogfSwKK3sKKwkubmFtZSA9ICJyZmM0NTQzKGdjbShhZXMpKSIsCisKKwkudWluZm8gPSB7CisJCS5hZWFkID0geworCQkJLmljdl90cnVuY2JpdHMgPSAxMjgsCisJCX0KKwl9LAorCisJLmRlc2MgPSB7CisJCS5zYWRiX2FsZ19pZCA9IFNBREJfWF9FQUxHX05VTExfQUVTX0dNQUMsCisJCS5zYWRiX2FsZ19pdmxlbiA9IDgsCisJCS5zYWRiX2FsZ19taW5iaXRzID0gMTI4LAorCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NgorCX0KK30sCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGFhbGdfbGlzdFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IGUwMDA5YzEuLjQ1ZjFjOTggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYworKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkJZ290byBkcm9wOwogCQl9CiAKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTsKKwkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpOwogCQlpZiAoeCA9PSBOVUxMKSB7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7CiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwY29tcC5jIGIvbmV0L3hmcm0veGZybV9pcGNvbXAuYwppbmRleCA0MmNkMTgzLi4wZmM1ZmY2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwY29tcC5jCisrKyBiL25ldC94ZnJtL3hmcm1faXBjb21wLmMKQEAgLTMwLDEyICszMCwxMiBAQAogCiBzdHJ1Y3QgaXBjb21wX3RmbXMgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgY3J5cHRvX2NvbXAgKip0Zm1zOworCXN0cnVjdCBjcnlwdG9fY29tcCAqIF9fcGVyY3B1ICp0Zm1zOwogCWludCB1c2VyczsKIH07CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoaXBjb21wX3Jlc291cmNlX211dGV4KTsKLXN0YXRpYyB2b2lkICoqaXBjb21wX3NjcmF0Y2hlczsKK3N0YXRpYyB2b2lkICogX19wZXJjcHUgKmlwY29tcF9zY3JhdGNoZXM7CiBzdGF0aWMgaW50IGlwY29tcF9zY3JhdGNoX3VzZXJzOwogc3RhdGljIExJU1RfSEVBRChpcGNvbXBfdGZtc19saXN0KTsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiBzdGF0aWMgdm9pZCBpcGNvbXBfZnJlZV9zY3JhdGNoZXModm9pZCkKIHsKIAlpbnQgaTsKLQl2b2lkICoqc2NyYXRjaGVzOworCXZvaWQgKiBfX3BlcmNwdSAqc2NyYXRjaGVzOwogCiAJaWYgKC0taXBjb21wX3NjcmF0Y2hfdXNlcnMpCiAJCXJldHVybjsKQEAgLTIxNSwxMCArMjE1LDEwIEBACiAJZnJlZV9wZXJjcHUoc2NyYXRjaGVzKTsKIH0KIAotc3RhdGljIHZvaWQgKippcGNvbXBfYWxsb2Nfc2NyYXRjaGVzKHZvaWQpCitzdGF0aWMgdm9pZCAqIF9fcGVyY3B1ICppcGNvbXBfYWxsb2Nfc2NyYXRjaGVzKHZvaWQpCiB7CiAJaW50IGk7Ci0Jdm9pZCAqKnNjcmF0Y2hlczsKKwl2b2lkICogX19wZXJjcHUgKnNjcmF0Y2hlczsKIAogCWlmIChpcGNvbXBfc2NyYXRjaF91c2VycysrKQogCQlyZXR1cm4gaXBjb21wX3NjcmF0Y2hlczsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiBzY3JhdGNoZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGlwY29tcF9mcmVlX3RmbXMoc3RydWN0IGNyeXB0b19jb21wICoqdGZtcykKK3N0YXRpYyB2b2lkIGlwY29tcF9mcmVlX3RmbXMoc3RydWN0IGNyeXB0b19jb21wICogX19wZXJjcHUgKnRmbXMpCiB7CiAJc3RydWN0IGlwY29tcF90Zm1zICpwb3M7CiAJaW50IGNwdTsKQEAgLTI2NywxMCArMjY3LDEwIEBACiAJZnJlZV9wZXJjcHUodGZtcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKippcGNvbXBfYWxsb2NfdGZtcyhjb25zdCBjaGFyICphbGdfbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKiBfX3BlcmNwdSAqaXBjb21wX2FsbG9jX3RmbXMoY29uc3QgY2hhciAqYWxnX25hbWUpCiB7CiAJc3RydWN0IGlwY29tcF90Zm1zICpwb3M7Ci0Jc3RydWN0IGNyeXB0b19jb21wICoqdGZtczsKKwlzdHJ1Y3QgY3J5cHRvX2NvbXAgKiBfX3BlcmNwdSAqdGZtczsKIAlpbnQgY3B1OwogCiAJLyogVGhpcyBjYW4gYmUgYW55IHZhbGlkIENQVSBJRCBzbyB3ZSBkb24ndCBuZWVkIGxvY2tpbmcuICovCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCAwZWNiMTZhLi4zNGE1ZWY4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTU1Niw2ICs1NTYsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICpuZXdwb3M7CiAJc3RydWN0IGRzdF9lbnRyeSAqZ2NfbGlzdDsKKwl1MzIgbWFyayA9IHBvbGljeS0+bWFyay52ICYgcG9saWN5LT5tYXJrLm07CiAKIAl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAljaGFpbiA9IHBvbGljeV9oYXNoX2J5c2VsKG5ldCwgJnBvbGljeS0+c2VsZWN0b3IsIHBvbGljeS0+ZmFtaWx5LCBkaXIpOwpAQCAtNTY0LDYgKzU2NSw3IEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9sLCBlbnRyeSwgY2hhaW4sIGJ5ZHN0KSB7CiAJCWlmIChwb2wtPnR5cGUgPT0gcG9saWN5LT50eXBlICYmCiAJCSAgICAhc2VsZWN0b3JfY21wKCZwb2wtPnNlbGVjdG9yLCAmcG9saWN5LT5zZWxlY3RvcikgJiYKKwkJICAgIChtYXJrICYgcG9sLT5tYXJrLm0pID09IHBvbC0+bWFyay52ICYmCiAJCSAgICB4ZnJtX3NlY19jdHhfbWF0Y2gocG9sLT5zZWN1cml0eSwgcG9saWN5LT5zZWN1cml0eSkgJiYKIAkJICAgICFXQVJOX09OKGRlbHBvbCkpIHsKIAkJCWlmIChleGNsKSB7CkBAIC02MzUsOCArNjM3LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfaW5zZXJ0KTsKIAotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieXNlbF9jdHgoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBpbnQgZGlyLAotCQkJCQkgIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1OCB0eXBlLAorCQkJCQkgIGludCBkaXIsIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCiAJCQkJCSAgc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCBpbnQgZGVsZXRlLAogCQkJCQkgIGludCAqZXJyKQogewpAQCAtNjUwLDYgKzY1Miw3IEBACiAJcmV0ID0gTlVMTDsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShwb2wsIGVudHJ5LCBjaGFpbiwgYnlkc3QpIHsKIAkJaWYgKHBvbC0+dHlwZSA9PSB0eXBlICYmCisJCSAgICAobWFyayAmIHBvbC0+bWFyay5tKSA9PSBwb2wtPm1hcmsudiAmJgogCQkgICAgIXNlbGVjdG9yX2NtcChzZWwsICZwb2wtPnNlbGVjdG9yKSAmJgogCQkgICAgeGZybV9zZWNfY3R4X21hdGNoKGN0eCwgcG9sLT5zZWN1cml0eSkpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKQEAgLTY3Niw4ICs2NzksOCBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9ieXNlbF9jdHgpOwogCi1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBpbnQgZGlyLCB1MzIgaWQsCi0JCQkJICAgICBpbnQgZGVsZXRlLCBpbnQgKmVycikKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1OCB0eXBlLAorCQkJCSAgICAgaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlLCBpbnQgKmVycikKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CkBAIC02OTIsNyArNjk1LDggQEAKIAljaGFpbiA9IG5ldC0+eGZybS5wb2xpY3lfYnlpZHggKyBpZHhfaGFzaChuZXQsIGlkKTsKIAlyZXQgPSBOVUxMOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvbCwgZW50cnksIGNoYWluLCBieWlkeCkgewotCQlpZiAocG9sLT50eXBlID09IHR5cGUgJiYgcG9sLT5pbmRleCA9PSBpZCkgeworCQlpZiAocG9sLT50eXBlID09IHR5cGUgJiYgcG9sLT5pbmRleCA9PSBpZCAmJgorCQkgICAgKG1hcmsgJiBwb2wtPm1hcmsubSkgPT0gcG9sLT5tYXJrLnYpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWlmIChkZWxldGUpIHsKIAkJCQkqZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKApAQCAtNzcxLDcgKzc3NSw4IEBACiAKIGludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCBkaXIsIGVyciA9IDA7CisJaW50IGRpciwgZXJyID0gMCwgY250ID0gMDsKKwlzdHJ1Y3QgeGZybV9wb2xpY3kgKmRwOwogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CiAKQEAgLTc4OSw4ICs3OTQsMTAgQEAKIAkJCQkgICAgICZuZXQtPnhmcm0ucG9saWN5X2luZXhhY3RbZGlyXSwgYnlkc3QpIHsKIAkJCWlmIChwb2wtPnR5cGUgIT0gdHlwZSkKIAkJCQljb250aW51ZTsKLQkJCV9feGZybV9wb2xpY3lfdW5saW5rKHBvbCwgZGlyKTsKKwkJCWRwID0gX194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKKwkJCWlmIChkcCkKKwkJCQljbnQrKzsKIAogCQkJeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHBvbCwgMSwgYXVkaXRfaW5mby0+bG9naW51aWQsCiAJCQkJCQkgYXVkaXRfaW5mby0+c2Vzc2lvbmlkLApAQCAtODA5LDggKzgxNiwxMCBAQAogCQkJCQkgICAgIGJ5ZHN0KSB7CiAJCQkJaWYgKHBvbC0+dHlwZSAhPSB0eXBlKQogCQkJCQljb250aW51ZTsKLQkJCQlfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7CisJCQkJZHAgPSBfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7CiAJCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKKwkJCQlpZiAoZHApCisJCQkJCWNudCsrOwogCiAJCQkJeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHBvbCwgMSwKIAkJCQkJCQkgYXVkaXRfaW5mby0+bG9naW51aWQsCkBAIC04MjQsNiArODMzLDggQEAKIAkJfQogCiAJfQorCWlmICghY250KQorCQllcnIgPSAtRVNSQ0g7CiAJYXRvbWljX2luYygmZmxvd19jYWNoZV9nZW5pZCk7CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKQEAgLTkwOSw2ICs5MjAsNyBAQAogCWludCBtYXRjaCwgcmV0ID0gLUVTUkNIOwogCiAJaWYgKHBvbC0+ZmFtaWx5ICE9IGZhbWlseSB8fAorCSAgICAoZmwtPm1hcmsgJiBwb2wtPm1hcmsubSkgIT0gcG9sLT5tYXJrLnYgfHwKIAkgICAgcG9sLT50eXBlICE9IHR5cGUpCiAJCXJldHVybiByZXQ7CiAKQEAgLTEwMzMsNiArMTA0NSwxMCBAQAogCQlpbnQgZXJyID0gMDsKIAogCQlpZiAobWF0Y2gpIHsKKwkJCWlmICgoc2stPnNrX21hcmsgJiBwb2wtPm1hcmsubSkgIT0gcG9sLT5tYXJrLnYpIHsKKwkJCQlwb2wgPSBOVUxMOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHBvbC0+c2VjdXJpdHksCiAJCQkJCQkgICAgICBmbC0+c2VjaWQsCiAJCQkJCQkgICAgICBwb2xpY3lfdG9fZmxvd19kaXIoZGlyKSk7CkBAIC0xMDQ1LDYgKzEwNjEsNyBAQAogCQl9IGVsc2UKIAkJCXBvbCA9IE5VTEw7CiAJfQorb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAlyZXR1cm4gcG9sOwogfQpAQCAtMTEzNyw2ICsxMTU0LDcgQEAKIAkJfQogCQluZXdwLT5sZnQgPSBvbGQtPmxmdDsKIAkJbmV3cC0+Y3VybGZ0ID0gb2xkLT5jdXJsZnQ7CisJCW5ld3AtPm1hcmsgPSBvbGQtPm1hcms7CiAJCW5ld3AtPmFjdGlvbiA9IG9sZC0+YWN0aW9uOwogCQluZXdwLT5mbGFncyA9IG9sZC0+ZmxhZ3M7CiAJCW5ld3AtPnhmcm1fbnIgPSBvbGQtPnhmcm1fbnI7CkBAIC0yMDQ1LDggKzIwNjMsNyBAQAogCWludCByZXM7CiAKIAlpZiAoeGZybV9kZWNvZGVfc2Vzc2lvbihza2IsICZmbCwgZmFtaWx5KSA8IDApIHsKLQkJLyogWFhYOiB3ZSBzaG91bGQgaGF2ZSBzb21ldGhpbmcgbGlrZSBGV0RIRFJFUlJPUiBoZXJlLiAqLwotCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7CisJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1GV0RIRFJFUlJPUik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjQyMSwxOSArMjQzOCwxOSBAQAogewogCWludCBydjsKIAotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi54ZnJtX3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgbGludXhfeGZybV9taWIpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCXJ2ID0geGZybV9wcm9jX2luaXQobmV0KTsKIAlpZiAocnYgPCAwKQotCQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcyk7CisJCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzKTsKIAlyZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGlzdGljc19maW5pKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl4ZnJtX3Byb2NfZmluaShuZXQpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcyk7CiB9CiAjZWxzZQogc3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fc3RhdGlzdGljc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcHJvYy5jIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKaW5kZXggZmVmOGRiNS4uNThkOWFlMCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wcm9jLmMKKysrIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxuZXQvc25tcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc25tcF9taWIgeGZybV9taWJfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiB4ZnJtX21pYl9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgiWGZybUluRXJyb3IiLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpLAogCVNOTVBfTUlCX0lURU0oIlhmcm1JbkJ1ZmZlckVycm9yIiwgTElOVVhfTUlCX1hGUk1JTkJVRkZFUkVSUk9SKSwKIAlTTk1QX01JQl9JVEVNKCJYZnJtSW5IZHJFcnJvciIsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUiksCkBAIC00MSw2ICs0MSw3IEBACiAJU05NUF9NSUJfSVRFTSgiWGZybU91dFBvbEJsb2NrIiwgTElOVVhfTUlCX1hGUk1PVVRQT0xCTE9DSyksCiAJU05NUF9NSUJfSVRFTSgiWGZybU91dFBvbERlYWQiLCBMSU5VWF9NSUJfWEZSTU9VVFBPTERFQUQpLAogCVNOTVBfTUlCX0lURU0oIlhmcm1PdXRQb2xFcnJvciIsIExJTlVYX01JQl9YRlJNT1VUUE9MRVJST1IpLAorCVNOTVBfTUlCX0lURU0oIlhmcm1Gd2RIZHJFcnJvciIsIExJTlVYX01JQl9YRlJNRldESERSRVJST1IpLAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCkBAIC01MCw3ICs1MSw4IEBACiAJaW50IGk7CiAJZm9yIChpPTA7IHhmcm1fbWliX2xpc3RbaV0ubmFtZTsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiUtMjRzXHQlbHVcbiIsIHhmcm1fbWliX2xpc3RbaV0ubmFtZSwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi54ZnJtX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopCisJCQkJCSAgIG5ldC0+bWliLnhmcm1fc3RhdGlzdGljcywKIAkJCQkJICAgeGZybV9taWJfbGlzdFtpXS5lbnRyeSkpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGY0NDVlYTEuLjE3ZDViOTYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTYwMywxMyArNjAzLDE0IEBACiAKIGludCB4ZnJtX3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCBpLCBlcnIgPSAwOworCWludCBpLCBlcnIgPSAwLCBjbnQgPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogCWVyciA9IHhmcm1fc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgcHJvdG8sIGF1ZGl0X2luZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCisJZXJyID0gLUVTUkNIOwogCWZvciAoaSA9IDA7IGkgPD0gbmV0LT54ZnJtLnN0YXRlX2htYXNrOyBpKyspIHsKIAkJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5OwogCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTYyNiwxMyArNjI3LDE2IEBACiAJCQkJCQkJYXVkaXRfaW5mby0+c2Vzc2lvbmlkLAogCQkJCQkJCWF1ZGl0X2luZm8tPnNlY2lkKTsKIAkJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKKwkJCQlpZiAoIWVycikKKwkJCQkJY250Kys7CiAKIAkJCQlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCQl9CiAJfQotCWVyciA9IDA7CisJaWYgKGNudCkKKwkJZXJyID0gMDsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwpAQCAtNjY1LDcgKzY2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSB4ZnJtX3NwaV9oYXNoKG5ldCwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC02NzgsNiArNjgyLDggQEAKIAkJICAgIHhmcm1fYWRkcl9jbXAoJngtPmlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCisJCWlmICgobWFyayAmIHgtPm1hcmsubSkgIT0geC0+bWFyay52KQorCQkJY29udGludWU7CiAJCXhmcm1fc3RhdGVfaG9sZCh4KTsKIAkJcmV0dXJuIHg7CiAJfQpAQCAtNjg1LDcgKzY5MSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSB4ZnJtX3NyY19oYXNoKG5ldCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwpAQCAtNjk4LDYgKzcwNCw4IEBACiAJCSAgICB4ZnJtX2FkZHJfY21wKCZ4LT5wcm9wcy5zYWRkciwgc2FkZHIsIGZhbWlseSkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoKG1hcmsgJiB4LT5tYXJrLm0pICE9IHgtPm1hcmsudikKKwkJCWNvbnRpbnVlOwogCQl4ZnJtX3N0YXRlX2hvbGQoeCk7CiAJCXJldHVybiB4OwogCX0KQEAgLTcwOSwxMiArNzE3LDE0IEBACiBfX3hmcm1fc3RhdGVfbG9jYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CisJdTMyIG1hcmsgPSB4LT5tYXJrLnYgJiB4LT5tYXJrLm07CiAKIAlpZiAodXNlX3NwaSkKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAobmV0LCAmeC0+aWQuZGFkZHIsIHgtPmlkLnNwaSwKLQkJCQkJICAgeC0+aWQucHJvdG8sIGZhbWlseSk7CisJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJngtPmlkLmRhZGRyLAorCQkJCQkgICB4LT5pZC5zcGksIHgtPmlkLnByb3RvLCBmYW1pbHkpOwogCWVsc2UKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgJngtPmlkLmRhZGRyLAorCQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtYXJrLAorCQkJCQkJICAmeC0+aWQuZGFkZHIsCiAJCQkJCQkgICZ4LT5wcm9wcy5zYWRkciwKIAkJCQkJCSAgeC0+aWQucHJvdG8sIGZhbWlseSk7CiB9CkBAIC03NzksNiArNzg5LDcgQEAKIAlpbnQgYWNxdWlyZV9pbl9wcm9ncmVzcyA9IDA7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqYmVzdCA9IE5VTEw7CisJdTMyIG1hcmsgPSBwb2wtPm1hcmsudiAmIHBvbC0+bWFyay5tOwogCiAJdG9fcHV0ID0gTlVMTDsKIApAQCAtNzg3LDYgKzc5OCw3IEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgZW50cnksIG5ldC0+eGZybS5zdGF0ZV9ieWRzdCtoLCBieWRzdCkgewogCQlpZiAoeC0+cHJvcHMuZmFtaWx5ID09IGZhbWlseSAmJgogCQkgICAgeC0+cHJvcHMucmVxaWQgPT0gdG1wbC0+cmVxaWQgJiYKKwkJICAgIChtYXJrICYgeC0+bWFyay5tKSA9PSB4LT5tYXJrLnYgJiYKIAkJICAgICEoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX1dJTERSRUNWKSAmJgogCQkgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSAmJgogCQkgICAgdG1wbC0+bW9kZSA9PSB4LT5wcm9wcy5tb2RlICYmCkBAIC04MDIsNiArODE0LDcgQEAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2hfd2lsZGNhcmQsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gZmFtaWx5ICYmCiAJCSAgICB4LT5wcm9wcy5yZXFpZCA9PSB0bXBsLT5yZXFpZCAmJgorCQkgICAgKG1hcmsgJiB4LT5tYXJrLm0pID09IHgtPm1hcmsudiAmJgogCQkgICAgISh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfV0lMRFJFQ1YpICYmCiAJCSAgICB4ZnJtX3N0YXRlX2FkZHJfY2hlY2soeCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpICYmCiAJCSAgICB0bXBsLT5tb2RlID09IHgtPnByb3BzLm1vZGUgJiYKQEAgLTgxNSw3ICs4MjgsNyBAQAogCXggPSBiZXN0OwogCWlmICgheCAmJiAhZXJyb3IgJiYgIWFjcXVpcmVfaW5fcHJvZ3Jlc3MpIHsKIAkJaWYgKHRtcGwtPmlkLnNwaSAmJgotCQkgICAgKHgwID0gX194ZnJtX3N0YXRlX2xvb2t1cChuZXQsIGRhZGRyLCB0bXBsLT5pZC5zcGksCisJCSAgICAoeDAgPSBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHRtcGwtPmlkLnNwaSwKIAkJCQkJICAgICAgdG1wbC0+aWQucHJvdG8sIGZhbWlseSkpICE9IE5VTEwpIHsKIAkJCXRvX3B1dCA9IHgwOwogCQkJZXJyb3IgPSAtRUVYSVNUOwpAQCAtODI5LDYgKzg0Miw3IEBACiAJCS8qIEluaXRpYWxpemUgdGVtcG9yYXJ5IHNlbGVjdG9yIG1hdGNoaW5nIG9ubHkKIAkJICogdG8gY3VycmVudCBzZXNzaW9uLiAqLwogCQl4ZnJtX2luaXRfdGVtcHNlbCh4LCBmbCwgdG1wbCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpOworCQltZW1jcHkoJngtPm1hcmssICZwb2wtPm1hcmssIHNpemVvZih4LT5tYXJrKSk7CiAKIAkJZXJyb3IgPSBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jX2FjcXVpcmUoeCwgcG9sLT5zZWN1cml0eSwgZmwtPnNlY2lkKTsKIAkJaWYgKGVycm9yKSB7CkBAIC04NzEsNyArODg1LDcgQEAKIH0KIAogc3RydWN0IHhmcm1fc3RhdGUgKgoteGZybV9zdGF0ZW9ubHlfZmluZChzdHJ1Y3QgbmV0ICpuZXQsCit4ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJCSAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwKIAkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSwgdTggbW9kZSwgdTggcHJvdG8sIHUzMiByZXFpZCkKIHsKQEAgLTg4NCw2ICs4OTgsNyBAQAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHgsIGVudHJ5LCBuZXQtPnhmcm0uc3RhdGVfYnlkc3QraCwgYnlkc3QpIHsKIAkJaWYgKHgtPnByb3BzLmZhbWlseSA9PSBmYW1pbHkgJiYKIAkJICAgIHgtPnByb3BzLnJlcWlkID09IHJlcWlkICYmCisJCSAgICAobWFyayAmIHgtPm1hcmsubSkgPT0geC0+bWFyay52ICYmCiAJCSAgICAhKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9XSUxEUkVDVikgJiYKIAkJICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGZhbWlseSkgJiYKIAkJICAgIG1vZGUgPT0geC0+cHJvcHMubW9kZSAmJgpAQCAtOTQ2LDExICs5NjEsMTMgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnk7CiAJdW5zaWduZWQgaW50IGg7CisJdTMyIG1hcmsgPSB4bmV3LT5tYXJrLnYgJiB4bmV3LT5tYXJrLm07CiAKIAloID0geGZybV9kc3RfaGFzaChuZXQsICZ4bmV3LT5pZC5kYWRkciwgJnhuZXctPnByb3BzLnNhZGRyLCByZXFpZCwgZmFtaWx5KTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2gsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5mYW1pbHkJPT0gZmFtaWx5ICYmCiAJCSAgICB4LT5wcm9wcy5yZXFpZAk9PSByZXFpZCAmJgorCQkgICAgKG1hcmsgJiB4LT5tYXJrLm0pID09IHgtPm1hcmsudiAmJgogCQkgICAgIXhmcm1fYWRkcl9jbXAoJngtPmlkLmRhZGRyLCAmeG5ldy0+aWQuZGFkZHIsIGZhbWlseSkgJiYKIAkJICAgICF4ZnJtX2FkZHJfY21wKCZ4LT5wcm9wcy5zYWRkciwgJnhuZXctPnByb3BzLnNhZGRyLCBmYW1pbHkpKQogCQkJeC0+Z2VuaWQgPSB4ZnJtX3N0YXRlX2dlbmlkOwpAQCAtOTY3LDExICs5ODQsMTIgQEAKIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9pbnNlcnQpOwogCiAvKiB4ZnJtX3N0YXRlX2xvY2sgaXMgaGVsZCAqLwotc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX2ZpbmRfYWNxX2NvcmUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCBpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX2ZpbmRfYWNxX2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9tYXJrICptLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCBpbnQgY3JlYXRlKQogewogCXVuc2lnbmVkIGludCBoID0geGZybV9kc3RfaGFzaChuZXQsIGRhZGRyLCBzYWRkciwgcmVxaWQsIGZhbWlseSk7CiAJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5OwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OworCXUzMiBtYXJrID0gbS0+diAmIG0tPm07CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2gsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5yZXFpZCAgIT0gcmVxaWQgfHwKQEAgLTk4MCw2ICs5OTgsNyBAQAogCQkgICAgeC0+a20uc3RhdGUgICAgICE9IFhGUk1fU1RBVEVfQUNRIHx8CiAJCSAgICB4LT5pZC5zcGkgICAgICAgIT0gMCB8fAogCQkgICAgeC0+aWQucHJvdG8JICAgICE9IHByb3RvIHx8CisJCSAgICAobWFyayAmIHgtPm1hcmsubSkgIT0geC0+bWFyay52IHx8CiAJCSAgICB4ZnJtX2FkZHJfY21wKCZ4LT5pZC5kYWRkciwgZGFkZHIsIGZhbWlseSkgfHwKIAkJICAgIHhmcm1fYWRkcl9jbXAoJngtPnByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTAyMiw2ICsxMDQxLDggQEAKIAkJeC0+cHJvcHMuZmFtaWx5ID0gZmFtaWx5OwogCQl4LT5wcm9wcy5tb2RlID0gbW9kZTsKIAkJeC0+cHJvcHMucmVxaWQgPSByZXFpZDsKKwkJeC0+bWFyay52ID0gbS0+djsKKwkJeC0+bWFyay5tID0gbS0+bTsKIAkJeC0+bGZ0LmhhcmRfYWRkX2V4cGlyZXNfc2Vjb25kcyA9IG5ldC0+eGZybS5zeXNjdGxfYWNxX2V4cGlyZXM7CiAJCXhmcm1fc3RhdGVfaG9sZCh4KTsKIAkJdGFza2xldF9ocnRpbWVyX3N0YXJ0KCZ4LT5tdGltZXIsIGt0aW1lX3NldChuZXQtPnhmcm0uc3lzY3RsX2FjcV9leHBpcmVzLCAwKSwgSFJUSU1FUl9NT0RFX1JFTCk7CkBAIC0xMDM4LDcgKzEwNTksNyBAQAogCXJldHVybiB4OwogfQogCi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9maW5kX2FjcV9ieXNlcShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBzZXEpOworc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fZmluZF9hY3FfYnlzZXEoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIHNlcSk7CiAKIGludCB4ZnJtX3N0YXRlX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKQEAgLTEwNDYsNiArMTA2Nyw3IEBACiAJc3RydWN0IHhmcm1fc3RhdGUgKngxLCAqdG9fcHV0OwogCWludCBmYW1pbHk7CiAJaW50IGVycjsKKwl1MzIgbWFyayA9IHgtPm1hcmsudiAmIHgtPm1hcmsubTsKIAlpbnQgdXNlX3NwaSA9IHhmcm1faWRfcHJvdG9fbWF0Y2goeC0+aWQucHJvdG8sIElQU0VDX1BST1RPX0FOWSk7CiAKIAlmYW1pbHkgPSB4LT5wcm9wcy5mYW1pbHk7CkBAIC0xMDYzLDcgKzEwODUsNyBAQAogCX0KIAogCWlmICh1c2Vfc3BpICYmIHgtPmttLnNlcSkgewotCQl4MSA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIHgtPmttLnNlcSk7CisJCXgxID0gX194ZnJtX2ZpbmRfYWNxX2J5c2VxKG5ldCwgbWFyaywgeC0+a20uc2VxKTsKIAkJaWYgKHgxICYmICgoeDEtPmlkLnByb3RvICE9IHgtPmlkLnByb3RvKSB8fAogCQkgICAgeGZybV9hZGRyX2NtcCgmeDEtPmlkLmRhZGRyLCAmeC0+aWQuZGFkZHIsIGZhbWlseSkpKSB7CiAJCQl0b19wdXQgPSB4MTsKQEAgLTEwNzIsOCArMTA5NCw4IEBACiAJfQogCiAJaWYgKHVzZV9zcGkgJiYgIXgxKQotCQl4MSA9IF9fZmluZF9hY3FfY29yZShuZXQsIGZhbWlseSwgeC0+cHJvcHMubW9kZSwgeC0+cHJvcHMucmVxaWQsCi0JCQkJICAgICB4LT5pZC5wcm90bywKKwkJeDEgPSBfX2ZpbmRfYWNxX2NvcmUobmV0LCAmeC0+bWFyaywgZmFtaWx5LCB4LT5wcm9wcy5tb2RlLAorCQkJCSAgICAgeC0+cHJvcHMucmVxaWQsIHgtPmlkLnByb3RvLAogCQkJCSAgICAgJngtPmlkLmRhZGRyLCAmeC0+cHJvcHMuc2FkZHIsIDApOwogCiAJX194ZnJtX3N0YXRlX2J1bXBfZ2VuaWRzKHgpOwpAQCAtMTE0Nyw2ICsxMTY5LDggQEAKIAkJCWdvdG8gZXJyb3I7CiAJfQogCisJbWVtY3B5KCZ4LT5tYXJrLCAmb3JpZy0+bWFyaywgc2l6ZW9mKHgtPm1hcmspKTsKKwogCWVyciA9IHhmcm1faW5pdF9zdGF0ZSh4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwpAQCAtMTMzOCw0MSArMTM2Miw0MSBAQAogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSk7CiAKIHN0cnVjdCB4ZnJtX3N0YXRlICoKLXhmcm1fc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLCB1OCBwcm90bywKLQkJICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksCisJCSAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKLQl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChuZXQsIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOworCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJcmV0dXJuIHg7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwKTsKIAogc3RydWN0IHhmcm1fc3RhdGUgKgoteGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwKK3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCQkJIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCQkJIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7Ci0JeCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTsKKwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtYXJrLCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpOwogCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpOwogCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCi14ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgdTggbW9kZSwgdTMyIHJlcWlkLCB1OCBwcm90bywKK3hmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsIHU4IHByb3RvLAogCSAgICAgIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCSAgICAgIGludCBjcmVhdGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKLQl4ID0gX19maW5kX2FjcV9jb3JlKG5ldCwgZmFtaWx5LCBtb2RlLCByZXFpZCwgcHJvdG8sIGRhZGRyLCBzYWRkciwgY3JlYXRlKTsKKwl4ID0gX19maW5kX2FjcV9jb3JlKG5ldCwgbWFyaywgZmFtaWx5LCBtb2RlLCByZXFpZCwgcHJvdG8sIGRhZGRyLCBzYWRkciwgY3JlYXRlKTsKIAlzcGluX3VubG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKIAogCXJldHVybiB4OwpAQCAtMTQxOSw3ICsxNDQzLDcgQEAKIAogLyogU2lsbHkgZW5vdWdoLCBidXQgSSdtIGxhenkgdG8gYnVpbGQgcmVzb2x1dGlvbiBsaXN0ICovCiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHNlcSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEpCiB7CiAJaW50IGk7CiAKQEAgLTE0MjksNiArMTQ1Myw3IEBACiAKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgZW50cnksIG5ldC0+eGZybS5zdGF0ZV9ieWRzdCtpLCBieWRzdCkgewogCQkJaWYgKHgtPmttLnNlcSA9PSBzZXEgJiYKKwkJCSAgICAobWFyayAmIHgtPm1hcmsubSkgPT0geC0+bWFyay52ICYmCiAJCQkgICAgeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpIHsKIAkJCQl4ZnJtX3N0YXRlX2hvbGQoeCk7CiAJCQkJcmV0dXJuIHg7CkBAIC0xNDM4LDEyICsxNDYzLDEyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHNlcSkKK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7Ci0JeCA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIHNlcSk7CisJeCA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIG1hcmssIHNlcSk7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJcmV0dXJuIHg7CiB9CkBAIC0xNDUyLDEyICsxNDc3LDEyIEBACiB1MzIgeGZybV9nZXRfYWNxc2VxKHZvaWQpCiB7CiAJdTMyIHJlczsKLQlzdGF0aWMgdTMyIGFjcXNlcTsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFjcXNlcV9sb2NrKTsKKwlzdGF0aWMgYXRvbWljX3QgYWNxc2VxOwogCi0Jc3Bpbl9sb2NrX2JoKCZhY3FzZXFfbG9jayk7Ci0JcmVzID0gKCsrYWNxc2VxID8gOiArK2FjcXNlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFjcXNlcV9sb2NrKTsKKwlkbyB7CisJCXJlcyA9IGF0b21pY19pbmNfcmV0dXJuKCZhY3FzZXEpOworCX0gd2hpbGUgKCFyZXMpOworCiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9nZXRfYWNxc2VxKTsKQEAgLTE0NzAsNiArMTQ5NSw3IEBACiAJaW50IGVyciA9IC1FTk9FTlQ7CiAJX19iZTMyIG1pbnNwaSA9IGh0b25sKGxvdyk7CiAJX19iZTMyIG1heHNwaSA9IGh0b25sKGhpZ2gpOworCXUzMiBtYXJrID0geC0+bWFyay52ICYgeC0+bWFyay5tOwogCiAJc3Bpbl9sb2NrX2JoKCZ4LT5sb2NrKTsKIAlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9ERUFEKQpAQCAtMTQ4Miw3ICsxNTA4LDcgQEAKIAllcnIgPSAtRU5PRU5UOwogCiAJaWYgKG1pbnNwaSA9PSBtYXhzcGkpIHsKLQkJeDAgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICZ4LT5pZC5kYWRkciwgbWluc3BpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKKwkJeDAgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZ4LT5pZC5kYWRkciwgbWluc3BpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKIAkJaWYgKHgwKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4MCk7CiAJCQlnb3RvIHVubG9jazsKQEAgLTE0OTIsNyArMTUxOCw3IEBACiAJCXUzMiBzcGkgPSAwOwogCQlmb3IgKGg9MDsgaDxoaWdoLWxvdysxOyBoKyspIHsKIAkJCXNwaSA9IGxvdyArIG5ldF9yYW5kb20oKSUoaGlnaC1sb3crMSk7Ci0JCQl4MCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJngtPmlkLmRhZGRyLCBodG9ubChzcGkpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKKwkJCXgwID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmeC0+aWQuZGFkZHIsIGh0b25sKHNwaSksIHgtPmlkLnByb3RvLCB4LT5wcm9wcy5mYW1pbHkpOwogCQkJaWYgKHgwID09IE5VTEwpIHsKIAkJCQl4LT5pZC5zcGkgPSBodG9ubChzcGkpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKaW5kZXggMmUyMjFmMi4uMmM0ZDZjZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYworKysgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAotc3RhdGljIHZvaWQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXQtPnhmcm0uc3lzY3RsX2FldmVudF9ldGltZSA9IFhGUk1fQUVfRVRJTUU7CiAJbmV0LT54ZnJtLnN5c2N0bF9hZXZlbnRfcnNlcXRoID0gWEZSTV9BRV9TRVFUX1NJWkU7CkBAIC02NCw3ICs2NCw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXZvaWQgeGZybV9zeXNjdGxfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgeGZybV9zeXNjdGxfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggZDVhNzEyOS4uNjEwNmI3MiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTQ0Niw2ICs0NDYsOCBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKKwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmeC0+bWFyayk7CisKIAllcnIgPSB4ZnJtX2luaXRfc3RhdGUoeCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKQEAgLTUyNiwxMSArNTI4LDEzIEBACiAJCQkJCQkgaW50ICplcnJwKQogewogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CiAJaW50IGVycjsKKwl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKIAogCWlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtPnByb3RvLCBJUFNFQ19QUk9UT19BTlkpKSB7CiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJnAtPmRhZGRyLCBwLT5zcGksIHAtPnByb3RvLCBwLT5mYW1pbHkpOworCQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmcC0+ZGFkZHIsIHAtPnNwaSwgcC0+cHJvdG8sIHAtPmZhbWlseSk7CiAJfSBlbHNlIHsKIAkJeGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDsKIApAQCAtNTQxLDcgKzU0NSw4IEBACiAJCX0KIAogCQllcnIgPSAtRVNSQ0g7Ci0JCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCAmcC0+ZGFkZHIsIHNhZGRyLAorCQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbWFyaywKKwkJCQkJICAgICAmcC0+ZGFkZHIsIHNhZGRyLAogCQkJCQkgICAgIHAtPnByb3RvLCBwLT5mYW1pbHkpOwogCX0KIApAQCAtNjgzLDYgKzY4OCw5IEBACiAJaWYgKHgtPmVuY2FwKQogCQlOTEFfUFVUKHNrYiwgWEZSTUFfRU5DQVAsIHNpemVvZigqeC0+ZW5jYXApLCB4LT5lbmNhcCk7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4LT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlpZiAoeC0+c2VjdXJpdHkgJiYgY29weV9zZWNfY3R4KHgtPnNlY3VyaXR5LCBza2IpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTk0Nyw2ICs5NTUsOCBAQAogCXhmcm1fYWRkcmVzc190ICpkYWRkcjsKIAlpbnQgZmFtaWx5OwogCWludCBlcnI7CisJdTMyIG1hcms7CisJc3RydWN0IHhmcm1fbWFyayBtOwogCiAJcCA9IG5sbXNnX2RhdGEobmxoKTsKIAllcnIgPSB2ZXJpZnlfdXNlcnNwaV9pbmZvKHApOwpAQCAtOTU3LDggKzk2NywxMCBAQAogCWRhZGRyID0gJnAtPmluZm8uaWQuZGFkZHI7CiAKIAl4ID0gTlVMTDsKKworCW1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7CiAJaWYgKHAtPmluZm8uc2VxKSB7Ci0JCXggPSB4ZnJtX2ZpbmRfYWNxX2J5c2VxKG5ldCwgcC0+aW5mby5zZXEpOworCQl4ID0geGZybV9maW5kX2FjcV9ieXNlcShuZXQsIG1hcmssIHAtPmluZm8uc2VxKTsKIAkJaWYgKHggJiYgeGZybV9hZGRyX2NtcCgmeC0+aWQuZGFkZHIsIGRhZGRyLCBmYW1pbHkpKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKIAkJCXggPSBOVUxMOwpAQCAtOTY2LDcgKzk3OCw3IEBACiAJfQogCiAJaWYgKCF4KQotCQl4ID0geGZybV9maW5kX2FjcShuZXQsIHAtPmluZm8ubW9kZSwgcC0+aW5mby5yZXFpZCwKKwkJeCA9IHhmcm1fZmluZF9hY3EobmV0LCAmbSwgcC0+aW5mby5tb2RlLCBwLT5pbmZvLnJlcWlkLAogCQkJCSAgcC0+aW5mby5pZC5wcm90bywgZGFkZHIsCiAJCQkJICAmcC0+aW5mby5zYWRkciwgMSwKIAkJCQkgIGZhbWlseSk7CkBAIC0xMjIwLDYgKzEyMzIsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKKwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmeHAtPm1hcmspOworCiAJcmV0dXJuIHhwOwogIGVycm9yOgogCSplcnJwID0gZXJyOwpAQCAtMTM2NiwxMCArMTM4MCwxMyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cC0+dHlwZSwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAlyZXR1cm4gMDsKIAorbmxhX3B1dF9mYWlsdXJlOgogbmxtc2dfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogCXJldHVybiAtRU1TR1NJWkU7CkBAIC0xNDQxLDYgKzE0NTgsOCBAQAogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJaW50IGRlbGV0ZTsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CisJdTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7CiAKIAlwID0gbmxtc2dfZGF0YShubGgpOwogCWRlbGV0ZSA9IG5saC0+bmxtc2dfdHlwZSA9PSBYRlJNX01TR19ERUxQT0xJQ1k7CkBAIC0xNDU0LDcgKzE0NzMsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHAtPmluZGV4KQotCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCB0eXBlLCBwLT5kaXIsIHAtPmluZGV4LCBkZWxldGUsICZlcnIpOworCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCBtYXJrLCB0eXBlLCBwLT5kaXIsIHAtPmluZGV4LCBkZWxldGUsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwogCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CkBAIC0xNDcxLDggKzE0OTAsOCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCBjdHgsCi0JCQkJCSAgIGRlbGV0ZSwgJmVycik7CisJCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgbWFyaywgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLAorCQkJCQkgICBjdHgsIGRlbGV0ZSwgJmVycik7CiAJCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoY3R4KTsKIAl9CiAJaWYgKHhwID09IE5VTEwpCkBAIC0xNTI0LDggKzE1NDMsMTEgQEAKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IE5FVExJTktfQ0Ioc2tiKS5zZXNzaW9uaWQ7CiAJYXVkaXRfaW5mby5zZWNpZCA9IE5FVExJTktfQ0Ioc2tiKS5zaWQ7CiAJZXJyID0geGZybV9zdGF0ZV9mbHVzaChuZXQsIHAtPnByb3RvLCAmYXVkaXRfaW5mbyk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVTUkNIKSAvKiBlbXB0eSB0YWJsZSAqLworCQkJcmV0dXJuIDA7CiAJCXJldHVybiBlcnI7CisJfQogCWMuZGF0YS5wcm90byA9IHAtPnByb3RvOwogCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CiAJYy5zZXEgPSBubGgtPm5sbXNnX3NlcTsKQEAgLTE1NDEsNiArMTU2Myw3IEBACiAJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV9hZXZlbnRfaWQpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSkKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBYRlJNX0FFX1JUSFIgKi8KIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KTsgLyogWEZSTV9BRV9FVEhSICovCiB9CkBAIC0xNTczLDYgKzE1OTYsOSBAQAogCQlOTEFfUFVUX1UzMihza2IsIFhGUk1BX0VUSU1FUl9USFJFU0gsCiAJCQkgICAgeC0+cmVwbGF5X21heGFnZSAqIDEwIC8gSFopOwogCisJaWYgKHhmcm1fbWFya19wdXQoc2tiLCAmeC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTE1ODgsNiArMTYxNCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJfc2tiOwogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CisJdTMyIG1hcms7CisJc3RydWN0IHhmcm1fbWFyayBtOwogCXN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gJnAtPnNhX2lkOwogCkBAIC0xNTk1LDcgKzE2MjMsOSBAQAogCWlmIChyX3NrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICZpZC0+ZGFkZHIsIGlkLT5zcGksIGlkLT5wcm90bywgaWQtPmZhbWlseSk7CisJbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKKworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZpZC0+ZGFkZHIsIGlkLT5zcGksIGlkLT5wcm90bywgaWQtPmZhbWlseSk7CiAJaWYgKHggPT0gTlVMTCkgewogCQlrZnJlZV9za2Iocl9za2IpOwogCQlyZXR1cm4gLUVTUkNIOwpAQCAtMTYyNiw2ICsxNjU2LDggQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAlpbnQgZXJyID0gLSBFSU5WQUw7CisJdTMyIG1hcmsgPSAwOworCXN0cnVjdCB4ZnJtX21hcmsgbTsKIAlzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7CiAJc3RydWN0IG5sYXR0ciAqcnAgPSBhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXTsKIAlzdHJ1Y3QgbmxhdHRyICpsdCA9IGF0dHJzW1hGUk1BX0xUSU1FX1ZBTF07CkBAIC0xNjM3LDcgKzE2NjksOSBAQAogCWlmICghKG5saC0+bmxtc2dfZmxhZ3MmTkxNX0ZfUkVQTEFDRSkpCiAJCXJldHVybiBlcnI7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAmcC0+c2FfaWQuZGFkZHIsIHAtPnNhX2lkLnNwaSwgcC0+c2FfaWQucHJvdG8sIHAtPnNhX2lkLmZhbWlseSk7CisJbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKKworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZwLT5zYV9pZC5kYWRkciwgcC0+c2FfaWQuc3BpLCBwLT5zYV9pZC5wcm90bywgcC0+c2FfaWQuZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0xNjc2LDggKzE3MTAsMTIgQEAKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IE5FVExJTktfQ0Ioc2tiKS5zZXNzaW9uaWQ7CiAJYXVkaXRfaW5mby5zZWNpZCA9IE5FVExJTktfQ0Ioc2tiKS5zaWQ7CiAJZXJyID0geGZybV9wb2xpY3lfZmx1c2gobmV0LCB0eXBlLCAmYXVkaXRfaW5mbyk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVTUkNIKSAvKiBlbXB0eSB0YWJsZSAqLworCQkJcmV0dXJuIDA7CiAJCXJldHVybiBlcnI7CisJfQorCiAJYy5kYXRhLnR5cGUgPSB0eXBlOwogCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CiAJYy5zZXEgPSBubGgtPm5sbXNnX3NlcTsKQEAgLTE2OTYsMTMgKzE3MzQsMTUgQEAKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8gKnAgPSAmdXAtPnBvbDsKIAl1OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOwogCWludCBlcnIgPSAtRU5PRU5UOworCXN0cnVjdCB4ZnJtX21hcmsgbTsKKwl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKIAogCWVyciA9IGNvcHlfZnJvbV91c2VyX3BvbGljeV90eXBlKCZ0eXBlLCBhdHRycyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChwLT5pbmRleCkKLQkJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKG5ldCwgdHlwZSwgcC0+ZGlyLCBwLT5pbmRleCwgMCwgJmVycik7CisJCXhwID0geGZybV9wb2xpY3lfYnlpZChuZXQsIG1hcmssIHR5cGUsIHAtPmRpciwgcC0+aW5kZXgsIDAsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwogCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CkBAIC0xNzE5LDcgKzE3NTksOCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCBjdHgsIDAsICZlcnIpOworCQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChuZXQsIG1hcmssIHR5cGUsIHAtPmRpciwKKwkJCQkJICAgJnAtPnNlbCwgY3R4LCAwLCAmZXJyKTsKIAkJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShjdHgpOwogCX0KIAlpZiAoeHAgPT0gTlVMTCkKQEAgLTE3NTksOCArMTgwMCwxMCBAQAogCWludCBlcnI7CiAJc3RydWN0IHhmcm1fdXNlcl9leHBpcmUgKnVlID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gJnVlLT5zdGF0ZTsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CisJdTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7OwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJnAtPmlkLmRhZGRyLCBwLT5pZC5zcGksIHAtPmlkLnByb3RvLCBwLT5mYW1pbHkpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZwLT5pZC5kYWRkciwgcC0+aWQuc3BpLCBwLT5pZC5wcm90bywgcC0+ZmFtaWx5KTsKIAogCWVyciA9IC1FTk9FTlQ7CiAJaWYgKHggPT0gTlVMTCkKQEAgLTE3OTQsNiArMTgzNyw3IEBACiAJc3RydWN0IHhmcm1fdXNlcl90bXBsICp1dDsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1RNUExdOworCXN0cnVjdCB4ZnJtX21hcmsgbWFyazsKIAogCXN0cnVjdCB4ZnJtX3VzZXJfYWNxdWlyZSAqdWEgPSBubG1zZ19kYXRhKG5saCk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSB4ZnJtX3N0YXRlX2FsbG9jKG5ldCk7CkBAIC0xODAyLDYgKzE4NDYsOCBAQAogCWlmICgheCkKIAkJZ290byBub21lbTsKIAorCXhmcm1fbWFya19nZXQoYXR0cnMsICZtYXJrKTsKKwogCWVyciA9IHZlcmlmeV9uZXdwb2xpY3lfaW5mbygmdWEtPnBvbGljeSk7CiAJaWYgKGVycikKIAkJZ290byBiYWRfcG9saWN5OwpAQCAtMTgxNCw3ICsxODYwLDggQEAKIAltZW1jcHkoJngtPmlkLCAmdWEtPmlkLCBzaXplb2YodWEtPmlkKSk7CiAJbWVtY3B5KCZ4LT5wcm9wcy5zYWRkciwgJnVhLT5zYWRkciwgc2l6ZW9mKHVhLT5zYWRkcikpOwogCW1lbWNweSgmeC0+c2VsLCAmdWEtPnNlbCwgc2l6ZW9mKHVhLT5zZWwpKTsKLQorCXhwLT5tYXJrLm0gPSB4LT5tYXJrLm0gPSBtYXJrLm07CisJeHAtPm1hcmsudiA9IHgtPm1hcmsudiA9IG1hcmsudjsKIAl1dCA9IG5sYV9kYXRhKHJ0KTsKIAkvKiBleHRyYWN0IHRoZSB0ZW1wbGF0ZXMgYW5kIGZvciBlYWNoIGNhbGwga21fa2V5ICovCiAJZm9yIChpID0gMDsgaSA8IHhwLT54ZnJtX25yOyBpKyssIHV0KyspIHsKQEAgLTIwNTQsNiArMjEwMSwxMCBAQAogI3VuZGVmIFhNU0dTSVpFCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYKzFdID0geworCVtYRlJNQV9TQV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvKX0sCisJW1hGUk1BX1BPTElDWV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyl9LAorCVtYRlJNQV9MQVNUVVNFRF0JPSB7IC50eXBlID0gTkxBX1U2NH0sCisJW1hGUk1BX0FMR19BVVRIX1RSVU5DXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV9hbGdvX2F1dGgpfSwKIAlbWEZSTUFfQUxHX0FFQURdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX2FsZ29fYWVhZCkgfSwKIAlbWEZSTUFfQUxHX0FVVEhdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX2FsZ28pIH0sCiAJW1hGUk1BX0FMR19DUllQVF0JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHhmcm1fYWxnbykgfSwKQEAgLTIwNzAsNiArMjEyMSw3IEBACiAJW1hGUk1BX1BPTElDWV9UWVBFXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X3R5cGUpfSwKIAlbWEZSTUFfTUlHUkFURV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZSkgfSwKIAlbWEZSTUFfS01BRERSRVNTXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcykgfSwKKwlbWEZSTUFfTUFSS10JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fbGluayB7CkBAIC0yMTQ5LDcgKzIyMDEsOCBAQAogCiBzdGF0aWMgaW5saW5lIHNpemVfdCB4ZnJtX2V4cGlyZV9tc2dzaXplKHZvaWQpCiB7Ci0JcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2V4cGlyZSkpOworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9leHBpcmUpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSk7CiB9CiAKIHN0YXRpYyBpbnQgYnVpbGRfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCkBAIC0yMTY1LDcgKzIyMTgsMTMgQEAKIAljb3B5X3RvX3VzZXJfc3RhdGUoeCwgJnVlLT5zdGF0ZSk7CiAJdWUtPmhhcmQgPSAoYy0+ZGF0YS5oYXJkICE9IDApID8gMSA6IDA7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4LT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKIHN0YXRpYyBpbnQgeGZybV9leHBfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCkBAIC0yMTc3LDggKzIyMzYsMTAgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGJ1aWxkX2V4cGlyZShza2IsIHgsIGMpIDwgMCkKLQkJQlVHKCk7CisJaWYgKGJ1aWxkX2V4cGlyZShza2IsIHgsIGMpIDwgMCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CiAKIAlyZXR1cm4gbmxtc2dfbXVsdGljYXN0KG5ldC0+eGZybS5ubHNrLCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUsIEdGUF9BVE9NSUMpOwogfQpAQCAtMjI2Niw2ICsyMzI3LDcgQEAKIAlpZiAoYy0+ZXZlbnQgPT0gWEZSTV9NU0dfREVMU0EpIHsKIAkJbGVuICs9IG5sYV90b3RhbF9zaXplKGhlYWRsZW4pOwogCQloZWFkbGVuID0gc2l6ZW9mKCppZCk7CisJCWxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpOwogCX0KIAlsZW4gKz0gTkxNU0dfQUxJR04oaGVhZGxlbik7CiAKQEAgLTIzMzYsNiArMjM5OCw3IEBACiB7CiAJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2FjcXVpcmUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHhmcm1fdXNlcl9zZWNfY3R4X3NpemUoeC0+c2VjdXJpdHkpKQogCSAgICAgICArIHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSgpOwogfQpAQCAtMjM2OCw5ICsyNDMxLDEyIEBACiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAlpZiAoY29weV90b191c2VyX3BvbGljeV90eXBlKHhwLT50eXBlLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOworCWlmICh4ZnJtX21hcmtfcHV0KHNrYiwgJnhwLT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAorbmxhX3B1dF9mYWlsdXJlOgogbmxtc2dfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogCXJldHVybiAtRU1TR1NJWkU7CkBAIC0yNDU3LDYgKzI1MjMsNyBAQAogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoeGZybV91c2VyX3NlY19jdHhfc2l6ZSh4cC0+c2VjdXJpdHkpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSkKIAkgICAgICAgKyB1c2VycG9saWN5X3R5cGVfYXR0cnNpemUoKTsKIH0KIApAQCAtMjQ3OSwxMCArMjU0NiwxMyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cC0+dHlwZSwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCXVwZS0+aGFyZCA9ICEhaGFyZDsKIAogCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOwogCitubGFfcHV0X2ZhaWx1cmU6CiBubG1zZ19mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiAJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTI1MTksNiArMjU4OSw3IEBACiAJCWhlYWRsZW4gPSBzaXplb2YoKmlkKTsKIAl9CiAJbGVuICs9IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSgpOworCWxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpOwogCWxlbiArPSBOTE1TR19BTElHTihoZWFkbGVuKTsKIAogCXNrYiA9IG5sbXNnX25ldyhsZW4sIEdGUF9BVE9NSUMpOwpAQCAtMjU1NCwxMCArMjYyNSwxNCBAQAogCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAtPnR5cGUsIHNrYikgPCAwKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAogCXJldHVybiBubG1zZ19tdWx0aWNhc3QobmV0LT54ZnJtLm5sc2ssIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSwgR0ZQX0FUT01JQyk7CiAKK25sYV9wdXRfZmFpbHVyZToKIG5sbXNnX2ZhaWx1cmU6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy8uZ2l0aWdub3JlIGIvc2NyaXB0cy8uZ2l0aWdub3JlCmluZGV4IDUyY2FiNDZhLi5jNWQ1ZGI1IDEwMDY0NAotLS0gYS9zY3JpcHRzLy5naXRpZ25vcmUKKysrIGIvc2NyaXB0cy8uZ2l0aWdub3JlCkBAIC02LDUgKzYsNCBAQAogcG5tdG9sb2dvCiBiaW4yYwogdW5pZmRlZgotYmlub2Zmc2V0CiBpaGV4MmZ3CmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jpbm9mZnNldC5jIGIvc2NyaXB0cy9iaW5vZmZzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEyZTM5Yi4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2Jpbm9mZnNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGJpbm9mZnNldC5jCi0gKiAoQykgMjAwMiBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgotCi0jICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIyBiaW5vZmZzZXQuYzoKLSMgLSBzZWFyY2hlcyBhIChiaW5hcnkpIGZpbGUgZm9yIGEgc3BlY2lmaWVkIChiaW5hcnkpIHBhdHRlcm4KLSMgLSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIGxvY2F0ZWQgcGF0dGVybiBvciB+MCBpZiBub3QgZm91bmQKLSMgLSBleGl0cyB3aXRoIGV4aXQgc3RhdHVzIDAgbm9ybWFsbHkgb3Igbm9uLTAgaWYgcGF0dGVybiBpcyBub3QgZm91bmQKLSMgICBvciBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jZGVmaW5lIFZFUlNJT04JCSIwLjEiCi0jZGVmaW5lIEJVRl9TSVpFCSgxNiAqIDEwMjQpCi0jZGVmaW5lIFBBVF9TSVpFCTEwMAotCi1jaGFyCQkqcHJvZ25hbWU7Ci1jaGFyCQkqaW5wdXRuYW1lOwotaW50CQlpbnB1dGZkOwotdW5zaWduZWQgaW50CWJpeDsJCQkvKiBidWYgaW5kZXggKi8KLXVuc2lnbmVkIGNoYXIJcGF0dGVybnMgW1BBVF9TSVpFXSA9IHswfTsgLyogYnl0ZS1zaXplZCBwYXR0ZXJuIGFycmF5ICovCi1pbnQJCXBhdF9sZW47CQkvKiBhY3R1YWwgbnVtYmVyIG9mIHBhdHRlcm4gYnl0ZXMgKi8KLXVuc2lnbmVkIGNoYXIJKm1hZHI7CQkJLyogbW1hcCBhZGRyZXNzICovCi1zaXplX3QJCWZpbGVzaXplOwotaW50CQludW1fbWF0Y2hlcyA9IDA7Ci1vZmZfdAkJZmlyc3Rsb2MgPSAwOwotCi12b2lkIHVzYWdlICh2b2lkKQotewotCWZwcmludGYgKHN0ZGVyciwgIiVzIHZlci4gJXNcbiIsIHByb2duYW1lLCBWRVJTSU9OKTsKLQlmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogICVzIGZpbGVuYW1lIHBhdHRlcm5fYnl0ZXNcbiIsCi0JCQlwcm9nbmFtZSk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICBbcHJpbnRzIGxvY2F0aW9uIG9mIHBhdHRlcm5fYnl0ZXMgaW4gZmlsZV1cbiIpOwotCWV4aXQgKDEpOwotfQotCi12b2lkIGdldF9wYXR0ZXJuIChpbnQgcGF0X2NvdW50LCBjaGFyICpwYXRzIFtdKQotewotCWludCBpeCwgZXJyLCB0bXA7Ci0KLSNpZmRlZiBERUJVRwotCWZwcmludGYgKHN0ZGVyciwiZ2V0X3BhdHRlcm46IGNvdW50ID0gJWRcbiIsIHBhdF9jb3VudCk7Ci0JZm9yIChpeCA9IDA7IGl4IDwgcGF0X2NvdW50OyBpeCsrKQotCQlmcHJpbnRmIChzdGRlcnIsICIgIHBhdCAjICVkOiAgWyVzXVxuIiwgaXgsIHBhdHNbaXhdKTsKLSNlbmRpZgotCi0JZm9yIChpeCA9IDA7IGl4IDwgcGF0X2NvdW50OyBpeCsrKSB7Ci0JCXRtcCA9IDA7Ci0JCWVyciA9IHNzY2FuZiAocGF0c1tpeF0sICIlNWkiLCAmdG1wKTsKLQkJaWYgKGVyciAhPSAxIHx8IHRtcCA+IDB4ZmYpIHsKLQkJCWZwcmludGYgKHN0ZGVyciwgInBhdHRlcm4gb3IgdmFsdWUgZXJyb3IgaW4gcGF0dGVybiAjICVkIFslc11cbiIsCi0JCQkJCWl4LCBwYXRzW2l4XSk7Ci0JCQl1c2FnZSAoKTsKLQkJfQotCQlwYXR0ZXJucyBbaXhdID0gdG1wOwotCX0KLQlwYXRfbGVuID0gcGF0X2NvdW50OwotfQotCi12b2lkIHNlYXJjaF9wYXR0ZXJuICh2b2lkKQotewotCWZvciAoYml4ID0gMDsgYml4IDwgZmlsZXNpemU7IGJpeCsrKSB7Ci0JCWlmIChtYWRyW2JpeF0gPT0gcGF0dGVybnNbMF0pIHsKLQkJCWlmIChtZW1jbXAgKCZtYWRyW2JpeF0sIHBhdHRlcm5zLCBwYXRfbGVuKSA9PSAwKSB7Ci0JCQkJaWYgKG51bV9tYXRjaGVzID09IDApCi0JCQkJCWZpcnN0bG9jID0gYml4OwotCQkJCW51bV9tYXRjaGVzKys7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLSNpZmRlZiBOT1RERUYKLXNpemVfdCBnZXRfZmlsZXNpemUgKGludCBmZCkKLXsKLQlvZmZfdCBlbmRfb2ZmID0gbHNlZWsgKGZkLCAwLCBTRUVLX0VORCk7Ci0JbHNlZWsgKGZkLCAwLCBTRUVLX1NFVCk7Ci0JcmV0dXJuIChzaXplX3QpIGVuZF9vZmY7Ci19Ci0jZW5kaWYKLQotc2l6ZV90IGdldF9maWxlc2l6ZSAoaW50IGZkKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHN0YXQgc3RhdDsKLQotCWVyciA9IGZzdGF0IChmZCwgJnN0YXQpOwotCWZwcmludGYgKHN0ZGVyciwgImZpbGVzaXplOiAlbGRcbiIsIGVyciA8IDAgPyAobG9uZyllcnIgOiBzdGF0LnN0X3NpemUpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAoc2l6ZV90KSBzdGF0LnN0X3NpemU7Ci19Ci0KLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndiBbXSkKLXsKLQlwcm9nbmFtZSA9IGFyZ3ZbMF07Ci0KLQlpZiAoYXJnYyA8IDMpCi0JCXVzYWdlICgpOwotCi0JZ2V0X3BhdHRlcm4gKGFyZ2MgLSAyLCBhcmd2ICsgMik7Ci0KLQlpbnB1dG5hbWUgPSBhcmd2WzFdOwotCi0JaW5wdXRmZCA9IG9wZW4gKGlucHV0bmFtZSwgT19SRE9OTFkpOwotCWlmIChpbnB1dGZkID09IC0xKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW5ub3Qgb3BlbiAnJXMnXG4iLAotCQkJCXByb2duYW1lLCBpbnB1dG5hbWUpOwotCQlleGl0ICgzKTsKLQl9Ci0KLQlmaWxlc2l6ZSA9IGdldF9maWxlc2l6ZSAoaW5wdXRmZCk7Ci0KLQltYWRyID0gbW1hcCAoMCwgZmlsZXNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGlucHV0ZmQsIDApOwotCWlmIChtYWRyID09IE1BUF9GQUlMRUQpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAibW1hcCBlcnJvciA9ICVkXG4iLCBlcnJubyk7Ci0JCWNsb3NlIChpbnB1dGZkKTsKLQkJZXhpdCAoNCk7Ci0JfQotCi0Jc2VhcmNoX3BhdHRlcm4gKCk7Ci0KLQlpZiAobXVubWFwIChtYWRyLCBmaWxlc2l6ZSkpCi0JCWZwcmludGYgKHN0ZGVyciwgIm11bm1hcCBlcnJvciA9ICVkXG4iLCBlcnJubyk7Ci0KLQlpZiAoY2xvc2UgKGlucHV0ZmQpKQotCQlmcHJpbnRmIChzdGRlcnIsICIlczogZXJyb3IgJWQgY2xvc2luZyAnJXMnXG4iLAotCQkJCXByb2duYW1lLCBlcnJubywgaW5wdXRuYW1lKTsKLQotCWZwcmludGYgKHN0ZGVyciwgIm51bWJlciBvZiBwYXR0ZXJuIG1hdGNoZXMgPSAlZFxuIiwgbnVtX21hdGNoZXMpOwotCWlmIChudW1fbWF0Y2hlcyA9PSAwKQotCQlmaXJzdGxvYyA9IH4wOwotCXByaW50ZiAoIiVsZFxuIiwgZmlyc3Rsb2MpOwotCWZwcmludGYgKHN0ZGVyciwgIiVsZFxuIiwgZmlyc3Rsb2MpOwotCi0JZXhpdCAobnVtX21hdGNoZXMgPyAwIDogMik7Ci19Ci0KLS8qIGVuZCBiaW5vZmZzZXQuYyAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCmluZGV4IGRlMjMzZmYuLjM3ZjMwZDMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZworKysgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKQEAgLTEsOTIgKzEsNTMgQEAKICMhL2Jpbi9zaAotIyBleHRyYWN0cyAuY29uZmlnIGluZm8gZnJvbSBhIFtiXXpJbWFnZSBmaWxlCi0jIHVzZXM6IGJpbm9mZnNldCAobmV3KSwgZGQsIHpjYXQsIHN0cmluZ3MsIGdyZXAKLSMgJGFyZzEgaXMgW2JdekltYWdlIGZpbGVuYW1lCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZXh0cmFjdC1pa2NvbmZpZyAtIEV4dHJhY3QgdGhlIC5jb25maWcgZmlsZSBmcm9tIGEga2VybmVsIGltYWdlCisjCisjIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2hlbiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIENPTkZJR19JS0NPTkZJRy4KKyMKKyMgVGhlIG9ic2N1cmUgdXNlIG9mIHRoZSAidHIiIGZpbHRlciBpcyB0byB3b3JrIGFyb3VuZCBvbGRlciB2ZXJzaW9ucyBvZgorIyAiZ3JlcCIgdGhhdCByZXBvcnQgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgdGhlIHBhdHRlcm4uCisjCisjIChjKSAyMDA5LCBEaWNrIFN0cmVlZmxhbmQgPGRpY2tAc3RyZWVmbGFuZC5uZXQ+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYmlub2Zmc2V0PSIuL3NjcmlwdHMvYmlub2Zmc2V0IgotdGVzdCAtZSAkYmlub2Zmc2V0IHx8IGNjIC1vICRiaW5vZmZzZXQgLi9zY3JpcHRzL2Jpbm9mZnNldC5jIHx8IGV4aXQgMQorZ3oxPSdcMDM3XDIxM1wwMTAnCitnejI9JzAxJworY2YxPSdJS0NGR19TVFwwMzdcMjEzXDAxMCcKK2NmMj0nMDEyMzQ1Njc4OScKIAotSUtDRkdfU1Q9IjB4NDkgMHg0YiAweDQzIDB4NDYgMHg0NyAweDVmIDB4NTMgMHg1NCIKLUlLQ0ZHX0VEPSIweDQ5IDB4NGIgMHg0MyAweDQ2IDB4NDcgMHg1ZiAweDQ1IDB4NDQiCi1kdW1wX2NvbmZpZygpIHsKLSAgICBmaWxlPSIkMSIKLQotICAgIHN0YXJ0PWAkYmlub2Zmc2V0ICRmaWxlICRJS0NGR19TVCAyPi9kZXYvbnVsbGAKLSAgICBbICIkPyIgIT0gIjAiIF0gJiYgc3RhcnQ9Ii0xIgotICAgIGlmIFsgIiRzdGFydCIgLWVxICItMSIgXTsgdGhlbgotCXJldHVybgotICAgIGZpCi0gICAgZW5kPWAkYmlub2Zmc2V0ICRmaWxlICRJS0NGR19FRCAyPi9kZXYvbnVsbGAKLSAgICBbICIkPyIgIT0gIjAiIF0gJiYgZW5kPSItMSIKLSAgICBpZiBbICIkZW5kIiAtZXEgIi0xIiBdOyB0aGVuCi0JcmV0dXJuCi0gICAgZmkKLQotICAgIHN0YXJ0PWBleHByICRzdGFydCArIDhgCi0gICAgc2l6ZT1gZXhwciAkZW5kIC0gJHN0YXJ0YAotCi0gICAgZGQgaWY9IiRmaWxlIiBpYnM9MSBza2lwPSIkc3RhcnQiIGNvdW50PSIkc2l6ZSIgMj4vZGV2L251bGwgfCB6Y2F0Ci0KLSAgICBjbGVhbl91cAotICAgIGV4aXQgMAotfQotCi0KLXVzYWdlKCkKK2R1bXBfY29uZmlnKCkKIHsKLQllY2hvICIgIHVzYWdlOiBleHRyYWN0LWlrY29uZmlnIFtiXXpJbWFnZV9maWxlbmFtZSIKLX0KLQotY2xlYW5fdXAoKQotewotCWlmIFsgIiRUTVBGSUxFIiAhPSAiIiBdOyB0aGVuCi0JCXJtIC1mICRUTVBGSUxFCisJaWYJcG9zPWB0ciAiJGNmMVxuJGNmMiIgIlxuJGNmMj0iIDwgIiQxIiB8IGdyZXAgLWFibyAiXiRjZjIiYAorCXRoZW4KKwkJcG9zPSR7cG9zJSU6Kn0KKwkJdGFpbCAtYyskKCgkcG9zKzgpKSAiJDEiIHwgemNhdCAtcQorCQlleGl0IDAKIAlmaQogfQogCi1pZiBbICQjIC1sdCAxIF0KKyMgQ2hlY2sgaW52b2NhdGlvbjoKK21lPSR7MCMjKi99CitpbWc9JDEKK2lmCVsgJCMgLW5lIDEgLW8gISAtcyAiJGltZyIgXQogdGhlbgotCXVzYWdlCi0JZXhpdCAxCisJZWNobyAiVXNhZ2U6ICRtZSA8a2VybmVsLWltYWdlPiIgPiYyCisJZXhpdCAyCiBmaQogCi1UTVBGSUxFPWBta3RlbXAgLXQgaWtjb25maWctWFhYWFhYYCB8fCBleGl0IDEKLWltYWdlPSIkMSIKKyMgSW5pdGlhbCBhdHRlbXB0IGZvciB1bmNvbXByZXNzZWQgaW1hZ2VzIG9yIG9iamVjdHM6CitkdW1wX2NvbmZpZyAiJGltZyIKIAotIyB2bWxpbnV4OiBBdHRlbXB0IHRvIGR1bXAgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZmlsZSBkaXJlY3RseQotZHVtcF9jb25maWcgIiRpbWFnZSIKKyMgVGhhdCBkaWRuJ3Qgd29yaywgc28gZGVjb21wcmVzcyBhbmQgdHJ5IGFnYWluOgordG1wPS90bXAvaWtjb25maWckJAordHJhcCAicm0gLWYgJHRtcCIgMAorZm9yCXBvcyBpbiBgdHIgIiRnejFcbiRnejIiICJcbiRnejI9IiA8ICIkaW1nIiB8IGdyZXAgLWFibyAiXiRnejIiYAorZG8KKwlwb3M9JHtwb3MlJToqfQorCXRhaWwgLWMrJHBvcyAiJGltZyIgfCB6Y2F0IDI+IC9kZXYvbnVsbCA+ICR0bXAKKwlkdW1wX2NvbmZpZyAkdG1wCitkb25lCiAKLUdaSERSMT0iMHgxZiAweDhiIDB4MDggMHgwMCIKLUdaSERSMj0iMHgxZiAweDhiIDB4MDggMHgwOCIKLQotRUxGSERSPSIweDdmIDB4NDUgMHg0YyAweDQ2IgotCi0jIHZtbGludXguZ3o6IENoZWNrIGZvciBhIGNvbXByZXNzZWQgaW1hZ2VzCi1vZmY9YCRiaW5vZmZzZXQgIiRpbWFnZSIgJEdaSERSMSAyPi9kZXYvbnVsbGAKLVsgIiQ/IiAhPSAiMCIgXSAmJiBvZmY9Ii0xIgotaWYgWyAiJG9mZiIgLWVxICItMSIgXTsgdGhlbgotCW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIyIDI+L2Rldi9udWxsYAotCVsgIiQ/IiAhPSAiMCIgXSAmJiBvZmY9Ii0xIgotZmkKLWlmIFsgIiRvZmYiIC1lcSAiMCIgXTsgdGhlbgotCXpjYXQgPCIkaW1hZ2UiID4iJFRNUEZJTEUiCi0JZHVtcF9jb25maWcgIiRUTVBGSUxFIgotZWxpZiBbICIkb2ZmIiAtbmUgIi0xIiBdOyB0aGVuCi0JKGRkIGlicz0iJG9mZiIgc2tpcD0xIGNvdW50PTAgJiYgZGQgYnM9NTEyaykgPCIkaW1hZ2UiIDI+L2Rldi9udWxsIHwgXAotCQl6Y2F0ID4iJFRNUEZJTEUiCi0JZHVtcF9jb25maWcgIiRUTVBGSUxFIgotCi0jIGNoZWNrIGlmIHRoaXMgaXMgc2ltcGx5IGFuIEVMRiBmaWxlCi1lbHNlCi0Jb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRFTEZIRFIgMj4vZGV2L251bGxgCi0JWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi0JaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCi0JCWR1bXBfY29uZmlnICIkaW1hZ2UiCi0JZmkKLWZpCi0KLWVjaG8gIkVSUk9SOiBVbmFibGUgdG8gZXh0cmFjdCBrZXJuZWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iCi1lY2hvICIgICAgICAgVGhpcyBrZXJuZWwgaW1hZ2UgbWF5IG5vdCBoYXZlIHRoZSBjb25maWcgaW5mby4iCi0KLWNsZWFuX3VwCisjIEJhaWwgb3V0OgorZWNobyAiJG1lOiBDYW5ub3QgZmluZCBrZXJuZWwgY29uZmlnLiIgPiYyCiBleGl0IDEKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCA5OTllOGE3Li4xODZjNDY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCkBAIC0zMCw4ICszMCwxNyBAQAogCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAogCSQ8IC1zICQoS2NvbmZpZykKIAorIyBpZiBubyBwYXRoIGlzIGdpdmVuLCB0aGVuIHVzZSBzcmMgZGlyZWN0b3J5IHRvIGZpbmQgZmlsZQoraWZkZWYgTFNNT0QKK0xTTU9EX0YgOj0gJChMU01PRCkKK2lmZXEgKCQoZmluZHN0cmluZyAvLCQoTFNNT0QpKSwpCisgIExTTU9EX0YgOj0gJChvYmp0cmVlKS8kKExTTU9EKQorZW5kaWYKK2VuZGlmCisKIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAorCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCVwKIAkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQlcCiAJCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJXApAQCAtNDUsNyArNTQsOCBAQAogCSQoUSlybSAtZiAudG1wLmNvbmZpZwogCiBsb2NhbHllc2NvbmZpZzogJChvYmopL3N0cmVhbWxpbmVfY29uZmlnLnBsICQob2JqKS9jb25mCi0JJChRKXBlcmwgJDwgJChzcmN0cmVlKSAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQKKwkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgJChMU01PRF9GKSA+IC50bXAuY29uZmlnCiAJJChRKXNlZCAtaSBzLz1tLz15LyAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbCBiL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAppbmRleCAwZDgwMDgyLi5hZmJkNTRhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCkBAIC0xMTMsNiArMTEzLDcgQEAKICMgR2V0IHRoZSBidWlsZCBzb3VyY2UgYW5kIHRvcCBsZXZlbCBLY29uZmlnIGZpbGUgKHBhc3NlZCBpbikKIG15ICRrc291cmNlID0gJEFSR1ZbMF07CiBteSAka2NvbmZpZyA9ICRBUkdWWzFdOworbXkgJGxzbW9kX2ZpbGUgPSAkQVJHVlsyXTsKIAogbXkgQG1ha2VmaWxlcyA9IGBmaW5kICRrc291cmNlIC1uYW1lIE1ha2VmaWxlYDsKIG15ICVkZXBlbmRzOwpAQCAtMTIxLDYgKzEyMiw4IEBACiBteSAlb2JqZWN0czsKIG15ICR2YXI7CiBteSAkY29udCA9IDA7CitteSAkaWZsZXZlbCA9IDA7CitteSBAaWZkZXBzOwogCiAjIHByZXZlbnQgcmVjdXJzaW9uCiBteSAlcmVhZF9rY29uZmlnczsKQEAgLTE0Niw2ICsxNDksMTUgQEAKIAkgICAgJHN0YXRlID0gIk5FVyI7CiAJICAgICRjb25maWcgPSAkMTsKIAorCSAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkaWZsZXZlbDsgJGkrKykgeworCQlpZiAoJGkpIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICRpZmRlcHNbJGldOworCQl9IGVsc2UgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsKKwkJfQorCQkkc3RhdGUgPSAiREVQIjsKKwkgICAgfQorCiAJIyBjb2xsZWN0IHRoZSBkZXBlbmRzIGZvciB0aGUgY29uZmlnCiAJfSBlbHNpZiAoJHN0YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7CiAJICAgICRzdGF0ZSA9ICJERVAiOwpAQCAtMTY2LDYgKzE3OCwyMSBAQAogCSAgICAjIG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQKIAkgICAgJHByb21wdHskY29uZmlnfSA9IDE7CiAKKwkjIENoZWNrIGZvciBpZiBzdGF0ZW1lbnRzCisJfSBlbHNpZiAoL15pZlxzKyguKlxTKVxzKiQvKSB7CisJICAgIG15ICRkZXBzID0gJDE7CisJICAgICMgcmVtb3ZlIGJlZ2lubmluZyBhbmQgZW5kaW5nIG5vbiB0ZXh0CisJICAgICRkZXBzID1+IHMvXlteYS16QS1aMC05X10qLy87CisJICAgICRkZXBzID1+IHMvW15hLXpBLVowLTlfXSokLy87CisKKwkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15hLXpBLVowLTlfXSsvLCAkZGVwczsKKworCSAgICAkaWZkZXBzWyRpZmxldmVsKytdID0gam9pbiAnOicsIEBkZXBzOworCisJfSBlbHNpZiAoL15lbmRpZi8pIHsKKworCSAgICAkaWZsZXZlbC0tIGlmICgkaWZsZXZlbCk7CisKIAkjIHN0b3Agb24gImhlbHAiCiAJfSBlbHNpZiAoL15ccypoZWxwXHMqJC8pIHsKIAkgICAgJHN0YXRlID0gIk5PTkUiOwpAQCAtMjM3LDggKzI2NCwzNiBAQAogCiBteSAlbW9kdWxlczsKIAotIyBzZWUgd2hhdCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KLW9wZW4oTElOLCIvc2Jpbi9sc21vZHwiKSB8fCBkaWUgIkNhbnQgbHNtb2QiOworaWYgKGRlZmluZWQoJGxzbW9kX2ZpbGUpKSB7CisgICAgaWYgKCAhIC1mICRsc21vZF9maWxlKSB7CisJZGllICIkbHNtb2RfZmlsZSBub3QgZm91bmQiOworICAgIH0KKyAgICBpZiAoIC14ICRsc21vZF9maWxlKSB7CisJIyB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLCBydW4gaXQKKwlvcGVuKExJTiwgIiRsc21vZF9maWxlfCIpOworICAgIH0gZWxzZSB7CisJIyBKdXN0IHJlYWQgdGhlIGNvbnRlbnRzCisJb3BlbihMSU4sICIkbHNtb2RfZmlsZSIpOworICAgIH0KK30gZWxzZSB7CisKKyAgICAjIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQorICAgIG15ICRsc21vZDsKKworICAgIGZvcmVhY2ggJGRpciAoICgiL3NiaW4iLCAiL2JpbiIsICIvdXNyL3NiaW4iLCAiL3Vzci9iaW4iKSApIHsKKwlpZiAoIC14ICIkZGlyL2xzbW9kIiApIHsKKwkgICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOworCSAgICBsYXN0OworCX0KK30KKyAgICBpZiAoIWRlZmluZWQoJGxzbW9kKSkgeworCSMgdHJ5IGp1c3QgdGhlIHBhdGgKKwkkbHNtb2QgPSAibHNtb2QiOworICAgIH0KKworICAgIG9wZW4oTElOLCIkbHNtb2R8IikgfHwgZGllICJDYW4gbm90IGNhbGwgbHNtb2Qgd2l0aCAkbHNtb2QiOworfQorCiB3aGlsZSAoPExJTj4pIHsKIAluZXh0IGlmICgvXk1vZHVsZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgogCWlmICgvXihcUyspLykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IDI0MTMxMGUuLjIwOGFkM2IgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTEzLDggKzEzLDYgQEAKICMjIFRoaXMgc29mdHdhcmUgZmFsbHMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgICAgIyMKICMjIFBsZWFzZSByZWFkIHRoZSBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gICAgICAgICAgICAgIyMKIAotIyB3Lm8uIDAzLTExLTIwMDA6IGFkZGVkIHRoZSAnLWZpbGVsaXN0JyBvcHRpb24uCi0KICMgMTgvMDEvMjAwMSAtIAlDbGVhbnVwcwogIyAJCUZ1bmN0aW9ucyBwcm90b3R5cGVkIGFzIGZvbyh2b2lkKSBzYW1lIGFzIGZvbygpCiAjIAkJU3RvcCBldmFsJ2luZyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvLgpAQCAtMjQ1LDcgKzI0Myw3IEBACiAjIGNvdWxkIGNhdXNlICJ1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIiBvciBvdGhlciBidWdzLgogbXkgKCRmdW5jdGlvbiwgJWZ1bmN0aW9uX3RhYmxlLCAlcGFyYW1ldGVydHlwZXMsICRkZWNsYXJhdGlvbl9wdXJwb3NlKTsKIG15ICgkdHlwZSwgJGRlY2xhcmF0aW9uX25hbWUsICRyZXR1cm5fdHlwZSk7Ci1teSAoJG5ld3NlY3Rpb24sICRuZXdjb250ZW50cywgJHByb3RvdHlwZSwgJGZpbGVsaXN0LCAkYnJjb3VudCwgJXNvdXJjZV9tYXApOworbXkgKCRuZXdzZWN0aW9uLCAkbmV3Y29udGVudHMsICRwcm90b3R5cGUsICRicmNvdW50LCAlc291cmNlX21hcCk7CiAKIGlmIChkZWZpbmVkKCRFTlZ7J0tCVUlMRF9WRVJCT1NFJ30pKSB7CiAJJHZlcmJvc2UgPSAiJEVOVnsnS0JVSUxEX1ZFUkJPU0UnfSI7CkBAIC0zMzgsOCArMzM2LDYgQEAKIAkkdmVyYm9zZSA9IDE7CiAgICAgfSBlbHNpZiAoKCRjbWQgZXEgIi1oIikgfHwgKCRjbWQgZXEgIi0taGVscCIpKSB7CiAJdXNhZ2UoKTsKLSAgICB9IGVsc2lmICgkY21kIGVxICctZmlsZWxpc3QnKSB7Ci0JICAgICRmaWxlbGlzdCA9IHNoaWZ0IEBBUkdWOwogICAgIH0gZWxzaWYgKCRjbWQgZXEgJy1uby1kb2Mtc2VjdGlvbnMnKSB7CiAJICAgICRub19kb2Nfc2VjdGlvbnMgPSAxOwogICAgIH0KQEAgLTE4MTEsMTQgKzE4MDcsNiBAQAogCWNsb3NlKFNPVVJDRV9NQVApOwogfQogCi1pZiAoJGZpbGVsaXN0KSB7Ci0Jb3BlbihGTElTVCwiPCRmaWxlbGlzdCIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBmaWxlIGxpc3QgJGZpbGVsaXN0IjsKLQl3aGlsZSg8RkxJU1Q+KSB7Ci0JCWNob3A7Ci0JCXByb2Nlc3NfZmlsZSgkXyk7Ci0JfQotfQotCiBmb3JlYWNoIChAQVJHVikgewogICAgIGNob21wOwogICAgIHByb2Nlc3NfZmlsZSgkXyk7CkBAIC0yMDIzLDYgKzIwMTEsOCBAQAogCXJldHVybjsKICAgICB9CiAKKyAgICAkLiA9IDE7CisKICAgICAkc2VjdGlvbl9jb3VudGVyID0gMDsKICAgICB3aGlsZSAoPElOPikgewogCWlmICgkc3RhdGUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBlYTZmNmUzYS4uZjNjOWMwYSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKKysrIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKQEAgLTEzNiwxMyArMTM2LDE0IEBACiAgICAgICIudGV4dC51bmxpa2VseSIgPT4gMSwKICk7CiAKLSRvYmpkdW1wID0gIm9iamR1bXAiIGlmICgobGVuZ3RoICRvYmpkdW1wKSA9PSAwKTsKLSRvYmpjb3B5ID0gIm9iamNvcHkiIGlmICgobGVuZ3RoICRvYmpjb3B5KSA9PSAwKTsKLSRjYyA9ICJnY2MiIGlmICgobGVuZ3RoICRjYykgPT0gMCk7Ci0kbGQgPSAibGQiIGlmICgobGVuZ3RoICRsZCkgPT0gMCk7Ci0kbm0gPSAibm0iIGlmICgobGVuZ3RoICRubSkgPT0gMCk7Ci0kcm0gPSAicm0iIGlmICgobGVuZ3RoICRybSkgPT0gMCk7Ci0kbXYgPSAibXYiIGlmICgobGVuZ3RoICRtdikgPT0gMCk7CisjIE5vdGU6IHdlIGFyZSBuaWNlIHRvIEMtcHJvZ3JhbW1lcnMgaGVyZSwgdGh1cyB3ZSBza2lwIHRoZSAnfHw9Jy1pZGlvbS4KKyRvYmpkdW1wID0gJ29iamR1bXAnIGlmICghJG9iamR1bXApOworJG9iamNvcHkgPSAnb2JqY29weScgaWYgKCEkb2JqY29weSk7CiskY2MgPSAnZ2NjJyBpZiAoISRjYyk7CiskbGQgPSAnbGQnIGlmICghJGxkKTsKKyRubSA9ICdubScgaWYgKCEkbm0pOworJHJtID0gJ3JtJyBpZiAoISRybSk7CiskbXYgPSAnbXYnIGlmICghJG12KTsKIAogI3ByaW50IFNUREVSUiAicnVubmluZzogJFAgJyRhcmNoJyAnJG9iamR1bXAnICckb2JqY29weScgJyRjYycgJyRsZCcgIiAuCiAjICAgICInJG5tJyAnJHJtJyAnJG12JyAnJGlucHV0ZmlsZSdcbiI7CkBAIC00MzIsMTQgKzQzMywxNCBAQAogCiAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSBtY291bnQgY2FsbGVyIG9mZnNldHMgYW5kIHByaW50IGEgcmVmZXJlbmNlCiAgICAgIyB0byB0aGUgY2FsbGVyIGJhc2VkIGZyb20gdGhlIHJlZl9mdW5jLgotICAgIGZvciAobXkgJGk9MDsgJGkgPD0gJCNvZmZzZXRzOyAkaSsrKSB7Ci0JaWYgKCEkb3BlbmVkKSB7Ci0JICAgIG9wZW4oRklMRSwgIj4kbWNvdW50X3MiKSB8fCBkaWUgImNhbid0IGNyZWF0ZSAkbWNvdW50X3NcbiI7Ci0JICAgICRvcGVuZWQgPSAxOwotCSAgICBwcmludCBGSUxFICJcdC5zZWN0aW9uICRtY291bnRfc2VjdGlvbixcImFcIiwkc2VjdGlvbl90eXBlXG4iOwotCSAgICBwcmludCBGSUxFICJcdC5hbGlnbiAkYWxpZ25tZW50XG4iIGlmIChkZWZpbmVkKCRhbGlnbm1lbnQpKTsKLQl9Ci0JcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJG9mZnNldHNbJGldIC0gJG9mZnNldDsKKyAgICBpZiAoISRvcGVuZWQpIHsKKwlvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOworCSRvcGVuZWQgPSAxOworCXByaW50IEZJTEUgIlx0LnNlY3Rpb24gJG1jb3VudF9zZWN0aW9uLFwiYVwiLCRzZWN0aW9uX3R5cGVcbiI7CisJcHJpbnQgRklMRSAiXHQuYWxpZ24gJGFsaWdubWVudFxuIiBpZiAoZGVmaW5lZCgkYWxpZ25tZW50KSk7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGN1cl9vZmZzZXQgKEBvZmZzZXRzKSB7CisJcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJGN1cl9vZmZzZXQgLSAkb2Zmc2V0OwogICAgIH0KIH0KIApAQCAtNDc2LDExICs0NzcsNyBAQAogCSRyZWFkX2hlYWRlcnMgPSAwOwogCiAJIyBPbmx5IHJlY29yZCB0ZXh0IHNlY3Rpb25zIHRoYXQgd2Uga25vdyBhcmUgc2FmZQotCWlmIChkZWZpbmVkKCR0ZXh0X3NlY3Rpb25zeyQxfSkpIHsKLQkgICAgJHJlYWRfZnVuY3Rpb24gPSAxOwotCX0gZWxzZSB7Ci0JICAgICRyZWFkX2Z1bmN0aW9uID0gMDsKLQl9CisJJHJlYWRfZnVuY3Rpb24gPSBkZWZpbmVkKCR0ZXh0X3NlY3Rpb25zeyQxfSk7CiAJIyBwcmludCBvdXQgYW55IHJlY29yZGVkIG9mZnNldHMKIAl1cGRhdGVfZnVuY3MoKTsKIApAQCAtNTE0LDcgKzUxMSw3IEBACiAgICAgfQogICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKICAgICBpZiAoJHRleHRfZm91bmQgJiYgLyRtY291bnRfcmVnZXgvKSB7Ci0JJG9mZnNldHNbJCNvZmZzZXRzICsgMV0gPSBoZXggJDE7CisJcHVzaChAb2Zmc2V0cywgaGV4ICQxKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCA1YzcwMGUxLi40ODc1MTQyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC05MDYsMTAgKzkwNiw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiAKLXN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIGRlZmF1bHRfc2VjdXJpdHlfb3BzID0gewotCS5uYW1lCT0gImRlZmF1bHQiLAotfTsKLQogI2RlZmluZSBzZXRfdG9fY2FwX2lmX251bGwob3BzLCBmdW5jdGlvbikJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKCFvcHMtPmZ1bmN0aW9uKSB7CQkJCQlcCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jb21tb25jYXAuYyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCmluZGV4IGY4MDBmZGIuLjYxNjY5NzMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyZWJpdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KIAogLyoKICAqIElmIGEgbm9uLXJvb3QgdXNlciBleGVjdXRlcyBhIHNldHVpZC1yb290IGJpbmFyeSBpbgpAQCAtODg4LDEzICs4ODksMTcgQEAKIC8qKgogICogY2FwX3N5c2xvZyAtIERldGVybWluZSB3aGV0aGVyIHN5c2xvZyBmdW5jdGlvbiBpcyBwZXJtaXR0ZWQKICAqIEB0eXBlOiBGdW5jdGlvbiByZXF1ZXN0ZWQKKyAqIEBmcm9tX2ZpbGU6IFdoZXRoZXIgdGhpcyByZXF1ZXN0IGNhbWUgZnJvbSBhbiBvcGVuIGZpbGUgKGkuZS4gL3Byb2MpCiAgKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBwZXJtaXR0ZWQgdG8gdXNlIGEgcGFydGljdWxhcgogICogc3lzbG9nIGZ1bmN0aW9uLCByZXR1cm5pbmcgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIC12ZSBpZiBub3QuCiAgKi8KLWludCBjYXBfc3lzbG9nKGludCB0eXBlKQoraW50IGNhcF9zeXNsb2coaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKQogewotCWlmICgodHlwZSAhPSAzICYmIHR5cGUgIT0gMTApICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCWlmICh0eXBlICE9IFNZU0xPR19BQ1RJT05fT1BFTiAmJiBmcm9tX2ZpbGUpCisJCXJldHVybiAwOworCWlmICgodHlwZSAhPSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMICYmCisJICAgICB0eXBlICE9IFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVIpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCmluZGV4IDBkODNlZGMuLjJkNGQwNWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKQEAgLTYzLDEyICs2MywxMSBAQAogCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CiAJcmMgPSByYWRpeF90cmVlX2luc2VydCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlLCBpaW50KTsKIAlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogb3V0OgogCWlmIChyYyA8IDApCiAJCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKIAotCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKLQogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9nYy5jIGIvc2VjdXJpdHkva2V5cy9nYy5jCmluZGV4IDQ3NzBiZTM3Li4xOTkwMjMxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2djLmMKKysrIGIvc2VjdXJpdHkva2V5cy9nYy5jCkBAIC03Nyw3ICs3Nyw4IEBACiAJCWdvdG8gZG9udF9nYzsKIAogCS8qIHNjYW4gdGhlIGtleXJpbmcgbG9va2luZyBmb3IgZGVhZCBrZXlzICovCi0Ja2xpc3QgPSByY3VfZGVyZWZlcmVuY2Uoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zKTsKKwlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCisJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZrZXlfc2VyaWFsX2xvY2spKTsKIAlpZiAoIWtsaXN0KQogCQlnb3RvIGRvbnRfZ2M7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKaW5kZXggOGVjMDI3NC4uZTgxNGQyMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKQEAgLTE1MSw3ICsxNTEsOSBAQAogCQl3cml0ZV91bmxvY2soJmtleXJpbmdfbmFtZV9sb2NrKTsKIAl9CiAKLQlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZShrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMpOworCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucywKKwkJCQkgICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgIGF0b21pY19yZWFkKCZrZXlyaW5nLT51c2FnZSkgPT0gMCk7CiAJaWYgKGtsaXN0KSB7CiAJCWZvciAobG9vcCA9IGtsaXN0LT5ua2V5cyAtIDE7IGxvb3AgPj0gMDsgbG9vcC0tKQogCQkJa2V5X3B1dChrbGlzdC0+a2V5c1tsb29wXSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAxMjJiNzQ4Li42ODdjNmZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTIzLDEwICsyMywxMiBAQAogCUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZOwogCiAvKiB0aGluZ3MgdGhhdCBsaXZlIGluIGNhcGFiaWxpdHkuYyAqLwotZXh0ZXJuIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIGRlZmF1bHRfc2VjdXJpdHlfb3BzOwogZXh0ZXJuIHZvaWQgc2VjdXJpdHlfZml4dXBfb3BzKHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpOwogCi1zdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2VjdXJpdHlfb3BzOwkvKiBJbml0aWFsaXplZCB0byBOVUxMICovCitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKnNlY3VyaXR5X29wczsKK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBkZWZhdWx0X3NlY3VyaXR5X29wcyA9IHsKKwkubmFtZQk9ICJkZWZhdWx0IiwKK307CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeShzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKQogewpAQCAtNjMsNiArNjUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCByZXNldF9zZWN1cml0eV9vcHModm9pZCkKK3sKKwlzZWN1cml0eV9vcHMgPSAmZGVmYXVsdF9zZWN1cml0eV9vcHM7Cit9CisKIC8qIFNhdmUgdXNlciBjaG9zZW4gTFNNICovCiBzdGF0aWMgaW50IF9faW5pdCBjaG9vc2VfbHNtKGNoYXIgKnN0cikKIHsKQEAgLTIwMyw5ICsyMTAsOSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPnF1b3RhX29uKGRlbnRyeSk7CiB9CiAKLWludCBzZWN1cml0eV9zeXNsb2coaW50IHR5cGUpCitpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zeXNsb2codHlwZSk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiB9CiAKIGludCBzZWN1cml0eV9zZXR0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopCkBAIC0zODksNDIgKzM5Niw0MiBAQAogRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRICi1pbnQgc2VjdXJpdHlfcGF0aF9ta25vZChzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKK2ludCBzZWN1cml0eV9wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgZGV2KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtub2QocGF0aCwgZGVudHJ5LCBtb2RlLCBkZXYpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3BhdGhfbWtub2QpOwogCi1pbnQgc2VjdXJpdHlfcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK2ludCBzZWN1cml0eV9wYXRoX21rZGlyKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7Ci0JaWYgKHVubGlrZWx5KElTX1BSSVZBVEUocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkpCisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyLT5kZW50cnktPmRfaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF9ta2RpcihwYXRoLCBkZW50cnksIG1vZGUpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQogCi1pbnQgc2VjdXJpdHlfcGF0aF9ybWRpcihzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoraW50IHNlY3VyaXR5X3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfcm1kaXIocGF0aCwgZGVudHJ5KTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5wYXRoX3JtZGlyKGRpciwgZGVudHJ5KTsKIH0KIAotaW50IHNlY3VyaXR5X3BhdGhfdW5saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitpbnQgc2VjdXJpdHlfcGF0aF91bmxpbmsoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfdW5saW5rKHBhdGgsIGRlbnRyeSk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF91bmxpbmsoZGlyLCBkZW50cnkpOwogfQogCi1pbnQgc2VjdXJpdHlfcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitpbnQgc2VjdXJpdHlfcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7Ci0JaWYgKHVubGlrZWx5KElTX1BSSVZBVEUocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkpCisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyLT5kZW50cnktPmRfaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF9zeW1saW5rKHBhdGgsIGRlbnRyeSwgb2xkX25hbWUpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwogfQogCiBpbnQgc2VjdXJpdHlfcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLApAQCAtNjMwLDE0ICs2MzcsMTQgQEAKIGludCBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICoqYnVmZmVyLCBib29sIGFsbG9jKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgYWxsb2MpOwogfQogCiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9zZXRzZWN1cml0eShpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggZjJkZGUyNi4uZGIwZmQ5ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC00ODksMTcgKzQ4OSwxNCBAQAogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBzdGFja19kYXRhOwogCXUzMiBkZW5pZWQsIGF1ZGl0ZWQ7CiAJZGVuaWVkID0gcmVxdWVzdGVkICYgfmF2ZC0+YWxsb3dlZDsKLQlpZiAoZGVuaWVkKSB7Ci0JCWF1ZGl0ZWQgPSBkZW5pZWQ7Ci0JCWlmICghKGF1ZGl0ZWQgJiBhdmQtPmF1ZGl0ZGVueSkpCi0JCQlyZXR1cm47Ci0JfSBlbHNlIGlmIChyZXN1bHQpIHsKKwlpZiAoZGVuaWVkKQorCQlhdWRpdGVkID0gZGVuaWVkICYgYXZkLT5hdWRpdGRlbnk7CisJZWxzZSBpZiAocmVzdWx0KQogCQlhdWRpdGVkID0gZGVuaWVkID0gcmVxdWVzdGVkOwotCX0gZWxzZSB7Ci0JCWF1ZGl0ZWQgPSByZXF1ZXN0ZWQ7Ci0JCWlmICghKGF1ZGl0ZWQgJiBhdmQtPmF1ZGl0YWxsb3cpKQotCQkJcmV0dXJuOwotCX0KKwllbHNlCisJCWF1ZGl0ZWQgPSByZXF1ZXN0ZWQgJiBhdmQtPmF1ZGl0YWxsb3c7CisJaWYgKCFhdWRpdGVkKQorCQlyZXR1cm47CiAJaWYgKCFhKSB7CiAJCWEgPSAmc3RhY2tfZGF0YTsKIAkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOwpAQCAtNzQ2LDkgKzc0Myw3IEBACiAJCWVsc2UKIAkJCWF2ZCA9ICZhdmRfZW50cnk7CiAKLQkJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKwkJc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIGF2ZCk7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOwogCX0gZWxzZSB7CkBAIC03NzAsNyArNzY1LDYgQEAKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKLW91dDoKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA5YTJlZTg0Li41ZmVlY2I0MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2xvZy5oPgogCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCkBAIC0xMjUsMTMgKzEyNiw2IEBACiBpbnQgc2VsaW51eF9lbmFibGVkID0gMTsKICNlbmRpZgogCi0KLS8qCi0gKiBNaW5pbWFsIHN1cHBvcnQgZm9yIGEgc2Vjb25kYXJ5IHNlY3VyaXR5IG1vZHVsZSwKLSAqIGp1c3QgdG8gYWxsb3cgdGhlIHVzZSBvZiB0aGUgY2FwYWJpbGl0eSBtb2R1bGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2Vjb25kYXJ5X29wczsKLQogLyogTGlzdHMgb2YgaW5vZGUgYW5kIHN1cGVyYmxvY2sgc2VjdXJpdHkgc3RydWN0dXJlcyBpbml0aWFsaXplZAogICAgYmVmb3JlIHRoZSBwb2xpY3kgd2FzIGxvYWRlZC4gKi8KIHN0YXRpYyBMSVNUX0hFQUQoc3VwZXJibG9ja19zZWN1cml0eV9oZWFkKTsKQEAgLTIwNDksMjkgKzIwNDMsMzAgQEAKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fUVVPVEFPTik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zeXNsb2coaW50IHR5cGUpCitzdGF0aWMgaW50IHNlbGludXhfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IGNhcF9zeXNsb2codHlwZSk7CisJcmMgPSBjYXBfc3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIDM6CQkvKiBSZWFkIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCi0JY2FzZSAxMDoJLyogUmV0dXJuIHNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fUkVBRF9BTEw6CS8qIFJlYWQgbGFzdCBrZXJuZWwgbWVzc2FnZXMgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVI6CS8qIFJldHVybiBzaXplIG9mIHRoZSBsb2cgYnVmZmVyICovCiAJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX1JFQUQpOwogCQlicmVhazsKLQljYXNlIDY6CQkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCWNhc2UgNzoJCS8qIEVuYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KLQljYXNlIDg6CQkvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NPTlNPTEVfT0ZGOgkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX09OOgkvKiBFbmFibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJLyogU2V0IGxldmVsIG9mIG1lc3NhZ2VzIHByaW50ZWQgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX0xFVkVMOgogCQlyYyA9IHRhc2tfaGFzX3N5c3RlbShjdXJyZW50LCBTWVNURU1fX1NZU0xPR19DT05TT0xFKTsKIAkJYnJlYWs7Ci0JY2FzZSAwOgkJLyogQ2xvc2UgbG9nICovCi0JY2FzZSAxOgkJLyogT3BlbiBsb2cgKi8KLQljYXNlIDI6CQkvKiBSZWFkIGZyb20gbG9nICovCi0JY2FzZSA0OgkJLyogUmVhZC9jbGVhciBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLwotCWNhc2UgNToJCS8qIENsZWFyIHJpbmcgYnVmZmVyICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NMT1NFOgkvKiBDbG9zZSBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fT1BFTjoJLyogT3BlbiBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fUkVBRDoJLyogUmVhZCBmcm9tIGxvZyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9SRUFEX0NMRUFSOgkvKiBSZWFkL2NsZWFyIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NMRUFSOgkvKiBDbGVhciByaW5nIGJ1ZmZlciAqLwogCWRlZmF1bHQ6CiAJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX01PRCk7CiAJCWJyZWFrOwpAQCAtMzMzNCw3ICszMzI5LDcgQEAKIAogCWlmIChyZXQgPT0gMCkKIAkJdHNlYy0+Y3JlYXRlX3NpZCA9IGlzZWMtPnNpZDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfa2VybmVsX21vZHVsZV9yZXF1ZXN0KGNoYXIgKmttb2RfbmFtZSkKQEAgLTU2NzIsOSArNTY2Nyw2IEBACiAJCQkJCSAgICAwLCBTTEFCX1BBTklDLCBOVUxMKTsKIAlhdmNfaW5pdCgpOwogCi0Jc2Vjb25kYXJ5X29wcyA9IHNlY3VyaXR5X29wczsKLQlpZiAoIXNlY29uZGFyeV9vcHMpCi0JCXBhbmljKCJTRUxpbnV4OiBObyBpbml0aWFsIHNlY3VyaXR5IG9wZXJhdGlvbnNcbiIpOwogCWlmIChyZWdpc3Rlcl9zZWN1cml0eSgmc2VsaW51eF9vcHMpKQogCQlwYW5pYygiU0VMaW51eDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGgga2VybmVsLlxuIik7CiAKQEAgLTU4MzUsOCArNTgyNyw3IEBACiAJc2VsaW51eF9kaXNhYmxlZCA9IDE7CiAJc2VsaW51eF9lbmFibGVkID0gMDsKIAotCS8qIFJlc2V0IHNlY3VyaXR5X29wcyB0byB0aGUgc2Vjb25kYXJ5IG1vZHVsZSwgZHVtbXkgb3IgY2FwYWJpbGl0eS4gKi8KLQlzZWN1cml0eV9vcHMgPSBzZWNvbmRhcnlfb3BzOworCXJlc2V0X3NlY3VyaXR5X29wcygpOwogCiAJLyogVHJ5IHRvIGRlc3Ryb3kgdGhlIGF2YyBub2RlIGNhY2hlICovCiAJYXZjX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggMjU1MzI2Ni4uMWY3YzI0OSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTU3LDcgKzU3LDYgQEAKIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHI7CiAKIGV4dGVybiBpbnQgc2VsaW51eF9lbmFibGVkOwotZXh0ZXJuIGludCBzZWxpbnV4X21sc19lbmFibGVkOwogCiAvKiBQb2xpY3kgY2FwYWJpbGl0aWVzICovCiBlbnVtIHsKQEAgLTgwLDYgKzc5LDggQEAKIC8qIGxpbWl0YXRpb24gb2YgYm91bmRhcnkgZGVwdGggICovCiAjZGVmaW5lIFBPTElDWURCX0JPVU5EU19NQVhERVBUSAk0CiAKK2ludCBzZWN1cml0eV9tbHNfZW5hYmxlZCh2b2lkKTsKKwogaW50IHNlY3VyaXR5X2xvYWRfcG9saWN5KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogCiBpbnQgc2VjdXJpdHlfcG9saWN5Y2FwX3N1cHBvcnRlZCh1bnNpZ25lZCBpbnQgcmVxX2NhcCk7CkBAIC05NiwxMyArOTcsMTEgQEAKIC8qIGRlZmluaXRpb25zIG9mIGF2X2RlY2lzaW9uLmZsYWdzICovCiAjZGVmaW5lIEFWRF9GTEFHU19QRVJNSVNTSVZFCTB4MDAwMQogCi1pbnQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwgdTMyIHRzaWQsCi0JCQl1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkJc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOwordm9pZCBzZWN1cml0eV9jb21wdXRlX2F2KHUzMiBzc2lkLCB1MzIgdHNpZCwKKwkJCSB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7CiAKLWludCBzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIodTMyIHNzaWQsIHUzMiB0c2lkLAotCQkJICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkJICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7Cit2b2lkIHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcih1MzIgc3NpZCwgdTMyIHRzaWQsCisJCQkgICAgIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAogaW50IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkJCSAgICB1MTYgdGNsYXNzLCB1MzIgKm91dF9zaWQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggZmFiMzZmZC4uY2QxOTFiYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0yODIsNyArMjgyLDggQEAKIAljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOwogCXNzaXplX3QgbGVuZ3RoOwogCi0JbGVuZ3RoID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWQiLCBzZWxpbnV4X21sc19lbmFibGVkKTsKKwlsZW5ndGggPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIlZCIsCisJCQkgICBzZWN1cml0eV9tbHNfZW5hYmxlZCgpKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOwogfQogCkBAIC00OTQsNyArNDk1LDYgQEAKIAljaGFyICpzY29uLCAqdGNvbjsKIAl1MzIgc3NpZCwgdHNpZDsKIAl1MTYgdGNsYXNzOwotCXUzMiByZXE7CiAJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDsKIAlzc2l6ZV90IGxlbmd0aDsKIApAQCAtNTEyLDcgKzUxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJbGVuZ3RoID0gLUVJTlZBTDsKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVzICVzICVodSAleCIsIHNjb24sIHRjb24sICZ0Y2xhc3MsICZyZXEpICE9IDQpCisJaWYgKHNzY2FuZihidWYsICIlcyAlcyAlaHUiLCBzY29uLCB0Y29uLCAmdGNsYXNzKSAhPSAzKQogCQlnb3RvIG91dDI7CiAKIAlsZW5ndGggPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChzY29uLCBzdHJsZW4oc2NvbikrMSwgJnNzaWQpOwpAQCAtNTIyLDkgKzUyMiw3IEBACiAJaWYgKGxlbmd0aCA8IDApCiAJCWdvdG8gb3V0MjsKIAotCWxlbmd0aCA9IHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcSwgJmF2ZCk7Ci0JaWYgKGxlbmd0aCA8IDApCi0JCWdvdG8gb3V0MjsKKwlzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIoc3NpZCwgdHNpZCwgdGNsYXNzLCAmYXZkKTsKIAogCWxlbmd0aCA9IHNjbnByaW50ZihidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwKIAkJCSAgIiV4ICV4ICV4ICV4ICV1ICV4IiwKQEAgLTk3OSw2ICs5NzcsOCBAQAogCXUzMiBzaWQ7CiAKIAkvKiByZW1vdmUgYW55IGV4aXN0aW5nIGZpbGVzICovCisJZm9yIChpID0gMDsgaSA8IGJvb2xfbnVtOyBpKyspCisJCWtmcmVlKGJvb2xfcGVuZGluZ19uYW1lc1tpXSk7CiAJa2ZyZWUoYm9vbF9wZW5kaW5nX25hbWVzKTsKIAlrZnJlZShib29sX3BlbmRpbmdfdmFsdWVzKTsKIAlib29sX3BlbmRpbmdfbmFtZXMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb250ZXh0LmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAppbmRleCBkOWRkN2EyLi40NWU4ZmIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaApAQCAtNDEsOSArNDEsNiBAQAogewogCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlkc3QtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBzcmMtPnJhbmdlLmxldmVsWzBdLnNlbnM7CiAJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQsICZzcmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJaWYgKHJjKQpAQCAtNjQsOSArNjEsNiBAQAogewogCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlkc3QtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBzcmMtPnJhbmdlLmxldmVsWzBdLnNlbnM7CiAJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQsICZzcmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJaWYgKHJjKQpAQCAtODIsOSArNzYsNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBtbHNfY29udGV4dF9jbXAoc3RydWN0IGNvbnRleHQgKmMxLCBzdHJ1Y3QgY29udGV4dCAqYzIpCiB7Ci0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQotCQlyZXR1cm4gMTsKLQogCXJldHVybiAoKGMxLT5yYW5nZS5sZXZlbFswXS5zZW5zID09IGMyLT5yYW5nZS5sZXZlbFswXS5zZW5zKSAmJgogCQllYml0bWFwX2NtcCgmYzEtPnJhbmdlLmxldmVsWzBdLmNhdCwgJmMyLT5yYW5nZS5sZXZlbFswXS5jYXQpICYmCiAJCShjMS0+cmFuZ2UubGV2ZWxbMV0uc2VucyA9PSBjMi0+cmFuZ2UubGV2ZWxbMV0uc2VucykgJiYKQEAgLTkzLDkgKzg0LDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG1sc19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGNvbnRleHQgKmMpCiB7Ci0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQotCQlyZXR1cm47Ci0KIAllYml0bWFwX2Rlc3Ryb3koJmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJZWJpdG1hcF9kZXN0cm95KCZjLT5yYW5nZS5sZXZlbFsxXS5jYXQpOwogCW1sc19jb250ZXh0X2luaXQoYyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5jCmluZGV4IDY4YzczNDguLjA0YjYxNDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCWNtYXBfaWR4ID0gZGVsdGEgLyBORVRMQkxfQ0FUTUFQX01BUFNJWkU7CiAJCQljbWFwX3NmdCA9IGRlbHRhICUgTkVUTEJMX0NBVE1BUF9NQVBTSVpFOwogCQkJY19pdGVyLT5iaXRtYXBbY21hcF9pZHhdCi0JCQkJfD0gZV9pdGVyLT5tYXBzW2NtYXBfaWR4XSA8PCBjbWFwX3NmdDsKKwkJCQl8PSBlX2l0ZXItPm1hcHNbaV0gPDwgY21hcF9zZnQ7CiAJCX0KIAkJZV9pdGVyID0gZV9pdGVyLT5uZXh0OwogCX0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IDNmMmIyNzAuLjM3MmI3NzMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtMzksNyArMzksNyBAQAogCXN0cnVjdCBlYml0bWFwICplOwogCXN0cnVjdCBlYml0bWFwX25vZGUgKm5vZGU7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAlsZW4gPSAxOyAvKiBmb3IgdGhlIGJlZ2lubmluZyAiOiIgKi8KQEAgLTkzLDcgKzkzLDcgQEAKIAlzdHJ1Y3QgZWJpdG1hcCAqZTsKIAlzdHJ1Y3QgZWJpdG1hcF9ub2RlICpub2RlOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybjsKIAogCXNjb250ZXh0cCA9ICpzY29udGV4dDsKQEAgLTIwMCw3ICsyMDAsNyBAQAogewogCXN0cnVjdCB1c2VyX2RhdHVtICp1c3JkYXR1bTsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXAtPm1sc19lbmFibGVkKQogCQlyZXR1cm4gMTsKIAogCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgJmMtPnJhbmdlKSkKQEAgLTI1Myw3ICsyNTMsNyBAQAogCXN0cnVjdCBjYXRfZGF0dW0gKmNhdGRhdHVtLCAqcm5nZGF0dW07CiAJaW50IGwsIHJjID0gLUVJTlZBTDsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkgeworCWlmICghcG9sLT5tbHNfZW5hYmxlZCkgewogCQlpZiAoZGVmX3NpZCAhPSBTRUNTSURfTlVMTCAmJiBvbGRjKQogCQkJKnNjb250ZXh0ICs9IHN0cmxlbigqc2NvbnRleHQpKzE7CiAJCXJldHVybiAwOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJY2hhciAqdG1wc3RyLCAqZnJlZXN0cjsKIAlpbnQgcmM7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiB3ZSBuZWVkIGZyZWVzdHIgYmVjYXVzZSBtbHNfY29udGV4dF90b19zaWQgd2lsbCBjaGFuZ2UKQEAgLTQwNyw3ICs0MDcsNyBAQAogLyoKICAqIENvcGllcyB0aGUgTUxTIHJhbmdlIGByYW5nZScgaW50byBgY29udGV4dCcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1sc19yYW5nZV9zZXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCitpbnQgbWxzX3JhbmdlX3NldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKIAkJCQlzdHJ1Y3QgbWxzX3JhbmdlICpyYW5nZSkKIHsKIAlpbnQgbCwgcmMgPSAwOwpAQCAtNDI3LDcgKzQyNyw3IEBACiBpbnQgbWxzX3NldHVwX3VzZXJfcmFuZ2Uoc3RydWN0IGNvbnRleHQgKmZyb21jb24sIHN0cnVjdCB1c2VyX2RhdHVtICp1c2VyLAogCQkJIHN0cnVjdCBjb250ZXh0ICp1c2VyY29uKQogewotCWlmIChzZWxpbnV4X21sc19lbmFibGVkKSB7CisJaWYgKHBvbGljeWRiLm1sc19lbmFibGVkKSB7CiAJCXN0cnVjdCBtbHNfbGV2ZWwgKmZyb21jb25fc2VuID0gJihmcm9tY29uLT5yYW5nZS5sZXZlbFswXSk7CiAJCXN0cnVjdCBtbHNfbGV2ZWwgKmZyb21jb25fY2xyID0gJihmcm9tY29uLT5yYW5nZS5sZXZlbFsxXSk7CiAJCXN0cnVjdCBtbHNfbGV2ZWwgKnVzZXJfbG93ID0gJih1c2VyLT5yYW5nZS5sZXZlbFswXSk7CkBAIC00NzcsNyArNDc3LDcgQEAKIAlzdHJ1Y3QgZWJpdG1hcF9ub2RlICpub2RlOwogCWludCBsLCBpOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCiAJZm9yIChsID0gMDsgbCA8IDI7IGwrKykgewpAQCAtNTEzLDIzICs1MTMsMjEgQEAKIAkJICAgIHUzMiBzcGVjaWZpZWQsCiAJCSAgICBzdHJ1Y3QgY29udGV4dCAqbmV3Y29udGV4dCkKIHsKLQlzdHJ1Y3QgcmFuZ2VfdHJhbnMgKnJ0cjsKKwlzdHJ1Y3QgcmFuZ2VfdHJhbnMgcnRyOworCXN0cnVjdCBtbHNfcmFuZ2UgKnI7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKHNwZWNpZmllZCkgewogCWNhc2UgQVZUQUJfVFJBTlNJVElPTjoKIAkJLyogTG9vayBmb3IgYSByYW5nZSB0cmFuc2l0aW9uIHJ1bGUuICovCi0JCWZvciAocnRyID0gcG9saWN5ZGIucmFuZ2VfdHI7IHJ0cjsgcnRyID0gcnRyLT5uZXh0KSB7Ci0JCQlpZiAocnRyLT5zb3VyY2VfdHlwZSA9PSBzY29udGV4dC0+dHlwZSAmJgotCQkJICAgIHJ0ci0+dGFyZ2V0X3R5cGUgPT0gdGNvbnRleHQtPnR5cGUgJiYKLQkJCSAgICBydHItPnRhcmdldF9jbGFzcyA9PSB0Y2xhc3MpIHsKLQkJCQkvKiBTZXQgdGhlIHJhbmdlIGZyb20gdGhlIHJ1bGUgKi8KLQkJCQlyZXR1cm4gbWxzX3JhbmdlX3NldChuZXdjb250ZXh0LAotCQkJCQkJICAgICAmcnRyLT50YXJnZXRfcmFuZ2UpOwotCQkJfQotCQl9CisJCXJ0ci5zb3VyY2VfdHlwZSA9IHNjb250ZXh0LT50eXBlOworCQlydHIudGFyZ2V0X3R5cGUgPSB0Y29udGV4dC0+dHlwZTsKKwkJcnRyLnRhcmdldF9jbGFzcyA9IHRjbGFzczsKKwkJciA9IGhhc2h0YWJfc2VhcmNoKHBvbGljeWRiLnJhbmdlX3RyLCAmcnRyKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gbWxzX3JhbmdlX3NldChuZXdjb250ZXh0LCByKTsKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlIEFWVEFCX0NIQU5HRToKIAkJaWYgKHRjbGFzcyA9PSBwb2xpY3lkYi5wcm9jZXNzX2NsYXNzKQpAQCAtNTQxLDggKzUzOSw4IEBACiAJY2FzZSBBVlRBQl9NRU1CRVI6CiAJCS8qIFVzZSB0aGUgcHJvY2VzcyBlZmZlY3RpdmUgTUxTIGF0dHJpYnV0ZXMuICovCiAJCXJldHVybiBtbHNfY29udGV4dF9jcHlfbG93KG5ld2NvbnRleHQsIHNjb250ZXh0KTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTU2MSw3ICs1NTksNyBAQAogdm9pZCBtbHNfZXhwb3J0X25ldGxibF9sdmwoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkKQogCQlyZXR1cm47CiAKIAlzZWNhdHRyLT5hdHRyLm1scy5sdmwgPSBjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5zZW5zIC0gMTsKQEAgLTU4MSw3ICs1NzksNyBAQAogdm9pZCBtbHNfaW1wb3J0X25ldGxibF9sdmwoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkKQogCQlyZXR1cm47CiAKIAljb250ZXh0LT5yYW5nZS5sZXZlbFswXS5zZW5zID0gc2VjYXR0ci0+YXR0ci5tbHMubHZsICsgMTsKQEAgLTYwMyw3ICs2MDEsNyBAQAogewogCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAogCXJjID0gZWJpdG1hcF9uZXRsYmxfZXhwb3J0KCZjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5jYXQsCkBAIC02MzEsNyArNjI5LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAlyYyA9IGViaXRtYXBfbmV0bGJsX2ltcG9ydCgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uY2F0LApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKaW5kZXggMTI3NjcxNS4uY2Q5MTUyNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCkBAIC0zOSw2ICszOSw4IEBACiAKIGludCBtbHNfZnJvbV9zdHJpbmcoY2hhciAqc3RyLCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spOwogCitpbnQgbWxzX3JhbmdlX3NldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwgc3RydWN0IG1sc19yYW5nZSAqcmFuZ2UpOworCiBpbnQgbWxzX2NvbnZlcnRfY29udGV4dChzdHJ1Y3QgcG9saWN5ZGIgKm9sZHAsCiAJCQlzdHJ1Y3QgcG9saWN5ZGIgKm5ld3AsCiAJCQlzdHJ1Y3QgY29udGV4dCAqY29udGV4dCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21sc190eXBlcy5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHNfdHlwZXMuaAppbmRleCBiNmU5NDNhLi4wM2JlZDUyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21sc190eXBlcy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzX3R5cGVzLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgX1NTX01MU19UWVBFU19IXwogCiAjaW5jbHVkZSAic2VjdXJpdHkuaCIKKyNpbmNsdWRlICJlYml0bWFwLmgiCiAKIHN0cnVjdCBtbHNfbGV2ZWwgewogCXUzMiBzZW5zOwkJLyogc2Vuc2l0aXZpdHkgKi8KQEAgLTI3LDE4ICsyOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBtbHNfbGV2ZWxfZXEoc3RydWN0IG1sc19sZXZlbCAqbDEsIHN0cnVjdCBtbHNfbGV2ZWwgKmwyKQogewotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDE7Ci0KIAlyZXR1cm4gKChsMS0+c2VucyA9PSBsMi0+c2VucykgJiYKIAkJZWJpdG1hcF9jbXAoJmwxLT5jYXQsICZsMi0+Y2F0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1sc19sZXZlbF9kb20oc3RydWN0IG1sc19sZXZlbCAqbDEsIHN0cnVjdCBtbHNfbGV2ZWwgKmwyKQogewotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDE7Ci0KIAlyZXR1cm4gKChsMS0+c2VucyA+PSBsMi0+c2VucykgJiYKIAkJZWJpdG1hcF9jb250YWlucygmbDEtPmNhdCwgJmwyLT5jYXQpKTsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCBmMDM2NjcyLi4yM2M2ZTUzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC01Miw4ICs1Miw2IEBACiB9OwogI2VuZGlmCiAKLWludCBzZWxpbnV4X21sc19lbmFibGVkOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IHN5bXRhYl9zaXplc1tTWU1fTlVNXSA9IHsKIAkyLAogCTMyLApAQCAtMTc3LDYgKzE3NSwyMSBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMgdTMyIHJhbmdldHJfaGFzaChzdHJ1Y3QgaGFzaHRhYiAqaCwgY29uc3Qgdm9pZCAqaykKK3sKKwljb25zdCBzdHJ1Y3QgcmFuZ2VfdHJhbnMgKmtleSA9IGs7CisJcmV0dXJuIChrZXktPnNvdXJjZV90eXBlICsgKGtleS0+dGFyZ2V0X3R5cGUgPDwgMykgKworCQkoa2V5LT50YXJnZXRfY2xhc3MgPDwgNSkpICYgKGgtPnNpemUgLSAxKTsKK30KKworc3RhdGljIGludCByYW5nZXRyX2NtcChzdHJ1Y3QgaGFzaHRhYiAqaCwgY29uc3Qgdm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKQoreworCWNvbnN0IHN0cnVjdCByYW5nZV90cmFucyAqa2V5MSA9IGsxLCAqa2V5MiA9IGsyOworCXJldHVybiAoa2V5MS0+c291cmNlX3R5cGUgIT0ga2V5Mi0+c291cmNlX3R5cGUgfHwKKwkJa2V5MS0+dGFyZ2V0X3R5cGUgIT0ga2V5Mi0+dGFyZ2V0X3R5cGUgfHwKKwkJa2V5MS0+dGFyZ2V0X2NsYXNzICE9IGtleTItPnRhcmdldF9jbGFzcyk7Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIGEgcG9saWN5IGRhdGFiYXNlIHN0cnVjdHVyZS4KICAqLwpAQCAtMjA0LDYgKzIxNywxMCBAQAogCWlmIChyYykKIAkJZ290byBvdXRfZnJlZV9zeW10YWI7CiAKKwlwLT5yYW5nZV90ciA9IGhhc2h0YWJfY3JlYXRlKHJhbmdldHJfaGFzaCwgcmFuZ2V0cl9jbXAsIDI1Nik7CisJaWYgKCFwLT5yYW5nZV90cikKKwkJZ290byBvdXRfZnJlZV9zeW10YWI7CisKIAllYml0bWFwX2luaXQoJnAtPnBvbGljeWNhcHMpOwogCWViaXRtYXBfaW5pdCgmcC0+cGVybWlzc2l2ZV9tYXApOwogCkBAIC00MDgsNiArNDI1LDIwIEBACiAJCSAgICAgICBpbmZvLnNsb3RzX3VzZWQsIGgtPnNpemUsIGluZm8ubWF4X2NoYWluX2xlbik7CiAJfQogfQorCitzdGF0aWMgdm9pZCByYW5nZXRyX2hhc2hfZXZhbChzdHJ1Y3QgaGFzaHRhYiAqaCkKK3sKKwlzdHJ1Y3QgaGFzaHRhYl9pbmZvIGluZm87CisKKwloYXNodGFiX3N0YXQoaCwgJmluZm8pOworCXByaW50ayhLRVJOX0RFQlVHICJTRUxpbnV4OiByYW5nZXRyOiAgJWQgZW50cmllcyBhbmQgJWQvJWQgYnVja2V0cyB1c2VkLCAiCisJICAgICAgICJsb25nZXN0IGNoYWluIGxlbmd0aCAlZFxuIiwgaC0+bmVsLAorCSAgICAgICBpbmZvLnNsb3RzX3VzZWQsIGgtPnNpemUsIGluZm8ubWF4X2NoYWluX2xlbik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJhbmdldHJfaGFzaF9ldmFsKHN0cnVjdCBoYXNodGFiICpoKQoreworfQogI2VuZGlmCiAKIC8qCkBAIC00MjIsNyArNDUzLDcgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICJTRUxpbnV4OiAgJWQgdXNlcnMsICVkIHJvbGVzLCAlZCB0eXBlcywgJWQgYm9vbHMiLAogCSAgICAgICBwLT5wX3VzZXJzLm5wcmltLCBwLT5wX3JvbGVzLm5wcmltLCBwLT5wX3R5cGVzLm5wcmltLCBwLT5wX2Jvb2xzLm5wcmltKTsKLQlpZiAoc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAocC0+bWxzX2VuYWJsZWQpCiAJCXByaW50aygiLCAlZCBzZW5zLCAlZCBjYXRzIiwgcC0+cF9sZXZlbHMubnByaW0sCiAJCSAgICAgICBwLT5wX2NhdHMubnByaW0pOwogCXByaW50aygiXG4iKTsKQEAgLTYxMiw2ICs2NDMsMTcgQEAKIAljYXRfZGVzdHJveSwKIH07CiAKK3N0YXRpYyBpbnQgcmFuZ2VfdHJfZGVzdHJveSh2b2lkICprZXksIHZvaWQgKmRhdHVtLCB2b2lkICpwKQoreworCXN0cnVjdCBtbHNfcmFuZ2UgKnJ0ID0gZGF0dW07CisJa2ZyZWUoa2V5KTsKKwllYml0bWFwX2Rlc3Ryb3koJnJ0LT5sZXZlbFswXS5jYXQpOworCWViaXRtYXBfZGVzdHJveSgmcnQtPmxldmVsWzFdLmNhdCk7CisJa2ZyZWUoZGF0dW0pOworCWNvbmRfcmVzY2hlZCgpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBvY29udGV4dF9kZXN0cm95KHN0cnVjdCBvY29udGV4dCAqYywgaW50IGkpCiB7CiAJY29udGV4dF9kZXN0cm95KCZjLT5jb250ZXh0WzBdKTsKQEAgLTYzMiw3ICs2NzQsNiBAQAogCWludCBpOwogCXN0cnVjdCByb2xlX2FsbG93ICpyYSwgKmxyYSA9IE5VTEw7CiAJc3RydWN0IHJvbGVfdHJhbnMgKnRyLCAqbHRyID0gTlVMTDsKLQlzdHJ1Y3QgcmFuZ2VfdHJhbnMgKnJ0LCAqbHJ0ID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBTWU1fTlVNOyBpKyspIHsKIAkJY29uZF9yZXNjaGVkKCk7CkBAIC02OTMsMjAgKzczNCw4IEBACiAJfQogCWtmcmVlKGxyYSk7CiAKLQlmb3IgKHJ0ID0gcC0+cmFuZ2VfdHI7IHJ0OyBydCA9IHJ0LT5uZXh0KSB7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCQlpZiAobHJ0KSB7Ci0JCQllYml0bWFwX2Rlc3Ryb3koJmxydC0+dGFyZ2V0X3JhbmdlLmxldmVsWzBdLmNhdCk7Ci0JCQllYml0bWFwX2Rlc3Ryb3koJmxydC0+dGFyZ2V0X3JhbmdlLmxldmVsWzFdLmNhdCk7Ci0JCQlrZnJlZShscnQpOwotCQl9Ci0JCWxydCA9IHJ0OwotCX0KLQlpZiAobHJ0KSB7Ci0JCWViaXRtYXBfZGVzdHJveSgmbHJ0LT50YXJnZXRfcmFuZ2UubGV2ZWxbMF0uY2F0KTsKLQkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnRhcmdldF9yYW5nZS5sZXZlbFsxXS5jYXQpOwotCQlrZnJlZShscnQpOwotCX0KKwloYXNodGFiX21hcChwLT5yYW5nZV90ciwgcmFuZ2VfdHJfZGVzdHJveSwgTlVMTCk7CisJaGFzaHRhYl9kZXN0cm95KHAtPnJhbmdlX3RyKTsKIAogCWlmIChwLT50eXBlX2F0dHJfbWFwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwLT5wX3R5cGVzLm5wcmltOyBpKyspCkBAIC0xNjg2LDEyICsxNzE1LDExIEBACiAJaW50IGksIGosIHJjOwogCV9fbGUzMiBidWZbNF07CiAJdTMyIG5vZGVidWZbOF07Ci0JdTMyIGxlbiwgbGVuMiwgY29uZmlnLCBucHJpbSwgbmVsLCBuZWwyOworCXUzMiBsZW4sIGxlbjIsIG5wcmltLCBuZWwsIG5lbDI7CiAJY2hhciAqcG9saWN5ZGJfc3RyOwogCXN0cnVjdCBwb2xpY3lkYl9jb21wYXRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcmFuZ2VfdHJhbnMgKnJ0LCAqbHJ0OwotCi0JY29uZmlnID0gMDsKKwlzdHJ1Y3QgcmFuZ2VfdHJhbnMgKnJ0OworCXN0cnVjdCBtbHNfcmFuZ2UgKnI7CiAKIAlyYyA9IHBvbGljeWRiX2luaXQocCk7CiAJaWYgKHJjKQpAQCAtMTc0MCw3ICsxNzY4LDcgQEAKIAlrZnJlZShwb2xpY3lkYl9zdHIpOwogCXBvbGljeWRiX3N0ciA9IE5VTEw7CiAKLQkvKiBSZWFkIHRoZSB2ZXJzaW9uLCBjb25maWcsIGFuZCB0YWJsZSBzaXplcy4gKi8KKwkvKiBSZWFkIHRoZSB2ZXJzaW9uIGFuZCB0YWJsZSBzaXplcy4gKi8KIAlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikqNCk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBiYWQ7CkBAIC0xNzU1LDEzICsxNzgzLDcgQEAKIAl9CiAKIAlpZiAoKGxlMzJfdG9fY3B1KGJ1ZlsxXSkgJiBQT0xJQ1lEQl9DT05GSUdfTUxTKSkgewotCQlpZiAoc3NfaW5pdGlhbGl6ZWQgJiYgIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogQ2Fubm90IHN3aXRjaCBiZXR3ZWVuIG5vbi1NTFMiCi0JCQkJIiBhbmQgTUxTIHBvbGljaWVzXG4iKTsKLQkJCWdvdG8gYmFkOwotCQl9Ci0JCXNlbGludXhfbWxzX2VuYWJsZWQgPSAxOwotCQljb25maWcgfD0gUE9MSUNZREJfQ09ORklHX01MUzsKKwkJcC0+bWxzX2VuYWJsZWQgPSAxOwogCiAJCWlmIChwLT5wb2xpY3l2ZXJzIDwgUE9MSUNZREJfVkVSU0lPTl9NTFMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogc2VjdXJpdHkgcG9saWN5ZGIgdmVyc2lvbiAlZCAiCkBAIC0xNzY5LDEyICsxNzkxLDYgQEAKIAkJCQlwLT5wb2xpY3l2ZXJzKTsKIAkJCWdvdG8gYmFkOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHNzX2luaXRpYWxpemVkICYmIHNlbGludXhfbWxzX2VuYWJsZWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogQ2Fubm90IHN3aXRjaCBiZXR3ZWVuIE1MUyBhbmQiCi0JCQkJIiBub24tTUxTIHBvbGljaWVzXG4iKTsKLQkJCWdvdG8gYmFkOwotCQl9CiAJfQogCXAtPnJlamVjdF91bmtub3duID0gISEobGUzMl90b19jcHUoYnVmWzFdKSAmIFJFSkVDVF9VTktOT1dOKTsKIAlwLT5hbGxvd191bmtub3duID0gISEobGUzMl90b19jcHUoYnVmWzFdKSAmIEFMTE9XX1VOS05PV04pOwpAQCAtMjEyMiw0NCArMjEzOCw2MSBAQAogCQlpZiAocmMgPCAwKQogCQkJZ290byBiYWQ7CiAJCW5lbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCWxydCA9IE5VTEw7CiAJCWZvciAoaSA9IDA7IGkgPCBuZWw7IGkrKykgewogCQkJcnQgPSBremFsbG9jKHNpemVvZigqcnQpLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghcnQpIHsKIAkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZ290byBiYWQ7CiAJCQl9Ci0JCQlpZiAobHJ0KQotCQkJCWxydC0+bmV4dCA9IHJ0OwotCQkJZWxzZQotCQkJCXAtPnJhbmdlX3RyID0gcnQ7CiAJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgKHNpemVvZih1MzIpICogMikpOwotCQkJaWYgKHJjIDwgMCkKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlrZnJlZShydCk7CiAJCQkJZ290byBiYWQ7CisJCQl9CiAJCQlydC0+c291cmNlX3R5cGUgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCQkJcnQtPnRhcmdldF90eXBlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKIAkJCWlmIChuZXdfcmFuZ2V0cikgewogCQkJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7Ci0JCQkJaWYgKHJjIDwgMCkKKwkJCQlpZiAocmMgPCAwKSB7CisJCQkJCWtmcmVlKHJ0KTsKIAkJCQkJZ290byBiYWQ7CisJCQkJfQogCQkJCXJ0LT50YXJnZXRfY2xhc3MgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCQkJfSBlbHNlCiAJCQkJcnQtPnRhcmdldF9jbGFzcyA9IHAtPnByb2Nlc3NfY2xhc3M7CiAJCQlpZiAoIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwLCBydC0+c291cmNlX3R5cGUpIHx8CiAJCQkgICAgIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwLCBydC0+dGFyZ2V0X3R5cGUpIHx8CiAJCQkgICAgIXBvbGljeWRiX2NsYXNzX2lzdmFsaWQocCwgcnQtPnRhcmdldF9jbGFzcykpIHsKKwkJCQlrZnJlZShydCk7CiAJCQkJcmMgPSAtRUlOVkFMOwogCQkJCWdvdG8gYmFkOwogCQkJfQotCQkJcmMgPSBtbHNfcmVhZF9yYW5nZV9oZWxwZXIoJnJ0LT50YXJnZXRfcmFuZ2UsIGZwKTsKLQkJCWlmIChyYykKLQkJCQlnb3RvIGJhZDsKLQkJCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgJnJ0LT50YXJnZXRfcmFuZ2UpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogIHJhbmdldHJhbnM6ICBpbnZhbGlkIHJhbmdlXG4iKTsKKwkJCXIgPSBremFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOworCQkJaWYgKCFyKSB7CisJCQkJa2ZyZWUocnQpOworCQkJCXJjID0gLUVOT01FTTsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KLQkJCWxydCA9IHJ0OworCQkJcmMgPSBtbHNfcmVhZF9yYW5nZV9oZWxwZXIociwgZnApOworCQkJaWYgKHJjKSB7CisJCQkJa2ZyZWUocnQpOworCQkJCWtmcmVlKHIpOworCQkJCWdvdG8gYmFkOworCQkJfQorCQkJaWYgKCFtbHNfcmFuZ2VfaXN2YWxpZChwLCByKSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICByYW5nZXRyYW5zOiAgaW52YWxpZCByYW5nZVxuIik7CisJCQkJa2ZyZWUocnQpOworCQkJCWtmcmVlKHIpOworCQkJCWdvdG8gYmFkOworCQkJfQorCQkJcmMgPSBoYXNodGFiX2luc2VydChwLT5yYW5nZV90ciwgcnQsIHIpOworCQkJaWYgKHJjKSB7CisJCQkJa2ZyZWUocnQpOworCQkJCWtmcmVlKHIpOworCQkJCWdvdG8gYmFkOworCQkJfQogCQl9CisJCXJhbmdldHJfaGFzaF9ldmFsKHAtPnJhbmdlX3RyKTsKIAl9CiAKIAlwLT50eXBlX2F0dHJfbWFwID0ga21hbGxvYyhwLT5wX3R5cGVzLm5wcmltKnNpemVvZihzdHJ1Y3QgZWJpdG1hcCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oCmluZGV4IGNkY2M1NzAuLjI2ZDlhZGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJzeW10YWIuaCIKICNpbmNsdWRlICJhdnRhYi5oIgogI2luY2x1ZGUgInNpZHRhYi5oIgorI2luY2x1ZGUgImViaXRtYXAuaCIKKyNpbmNsdWRlICJtbHNfdHlwZXMuaCIKICNpbmNsdWRlICJjb250ZXh0LmgiCiAjaW5jbHVkZSAiY29uc3RyYWludC5oIgogCkBAIC0xMTMsOCArMTE1LDYgQEAKIAl1MzIgc291cmNlX3R5cGU7CiAJdTMyIHRhcmdldF90eXBlOwogCXUzMiB0YXJnZXRfY2xhc3M7Ci0Jc3RydWN0IG1sc19yYW5nZSB0YXJnZXRfcmFuZ2U7Ci0Jc3RydWN0IHJhbmdlX3RyYW5zICpuZXh0OwogfTsKIAogLyogQm9vbGVhbiBkYXRhIHR5cGUgKi8KQEAgLTE4Nyw2ICsxODcsOCBAQAogCiAvKiBUaGUgcG9saWN5IGRhdGFiYXNlICovCiBzdHJ1Y3QgcG9saWN5ZGIgeworCWludCBtbHNfZW5hYmxlZDsKKwogCS8qIHN5bWJvbCB0YWJsZXMgKi8KIAlzdHJ1Y3Qgc3ltdGFiIHN5bXRhYltTWU1fTlVNXTsKICNkZWZpbmUgcF9jb21tb25zIHN5bXRhYltTWU1fQ09NTU9OU10KQEAgLTI0MCw4ICsyNDIsOCBAQAogCSAgIGZpeGVkIGxhYmVsaW5nIGJlaGF2aW9yLiAqLwogCXN0cnVjdCBnZW5mcyAqZ2VuZnM7CiAKLQkvKiByYW5nZSB0cmFuc2l0aW9ucyAqLwotCXN0cnVjdCByYW5nZV90cmFucyAqcmFuZ2VfdHI7CisJLyogcmFuZ2UgdHJhbnNpdGlvbnMgdGFibGUgKHJhbmdlX3RyYW5zX2tleSAtPiBtbHNfcmFuZ2UpICovCisJc3RydWN0IGhhc2h0YWIgKnJhbmdlX3RyOwogCiAJLyogdHlwZSAtPiBhdHRyaWJ1dGUgcmV2ZXJzZSBtYXBwaW5nICovCiAJc3RydWN0IGViaXRtYXAgKnR5cGVfYXR0cl9tYXA7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggYjNlZmFlMi4uY2YyN2IzZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMjYsNiArMjYsMTAgQEAKICAqCiAgKiAgQWRkZWQgc3VwcG9ydCBmb3IgYm91bmRzIGRvbWFpbiBhbmQgYXVkaXQgbWVzc2FnZWQgb24gbWFza2VkIHBlcm1pc3Npb25zCiAgKgorICogVXBkYXRlZDogR3VpZG8gVHJlbnRhbGFuY2lhIDxndWlkb0B0cmVudGFsYW5jaWEuY29tPgorICoKKyAqICBBZGRlZCBzdXBwb3J0IGZvciBydW50aW1lIHN3aXRjaGluZyBvZiB0aGUgcG9saWN5IHR5cGUKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTkVDIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuCkBAIC04NywxMSArOTEsMTAgQEAKIHN0YXRpYyBpbnQgY29udGV4dF9zdHJ1Y3RfdG9fc3RyaW5nKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCBjaGFyICoqc2NvbnRleHQsCiAJCQkJICAgIHUzMiAqc2NvbnRleHRfbGVuKTsKIAotc3RhdGljIGludCBjb250ZXh0X3N0cnVjdF9jb21wdXRlX2F2KHN0cnVjdCBjb250ZXh0ICpzY29udGV4dCwKLQkJCQkgICAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKLQkJCQkgICAgIHUxNiB0Y2xhc3MsCi0JCQkJICAgICB1MzIgcmVxdWVzdGVkLAotCQkJCSAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOworc3RhdGljIHZvaWQgY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCisJCQkJICAgICAgc3RydWN0IGNvbnRleHQgKnRjb250ZXh0LAorCQkJCSAgICAgIHUxNiB0Y2xhc3MsCisJCQkJICAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOwogCiBzdHJ1Y3Qgc2VsaW51eF9tYXBwaW5nIHsKIAl1MTYgdmFsdWU7IC8qIHBvbGljeSB2YWx1ZSAqLwpAQCAtMTk2LDIzICsxOTksNiBAQAogCXJldHVybiB0Y2xhc3M7CiB9CiAKLXN0YXRpYyB1MzIgdW5tYXBfcGVybSh1MTYgdGNsYXNzLCB1MzIgdHBlcm0pCi17Ci0JaWYgKHRjbGFzcyA8IGN1cnJlbnRfbWFwcGluZ19zaXplKSB7Ci0JCXVuc2lnbmVkIGk7Ci0JCXUzMiBrcGVybSA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLm51bV9wZXJtczsgaSsrKQotCQkJaWYgKHRwZXJtICYgKDE8PGkpKSB7Ci0JCQkJa3Blcm0gfD0gY3VycmVudF9tYXBwaW5nW3RjbGFzc10ucGVybXNbaV07Ci0JCQkJdHBlcm0gJj0gfigxPDxpKTsKLQkJCX0KLQkJcmV0dXJuIGtwZXJtOwotCX0KLQotCXJldHVybiB0cGVybTsKLX0KLQogc3RhdGljIHZvaWQgbWFwX2RlY2lzaW9uKHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLAogCQkJIGludCBhbGxvd191bmtub3duKQogewpAQCAtMjUwLDYgKzIzNiwxMCBAQAogCX0KIH0KIAoraW50IHNlY3VyaXR5X21sc19lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIHBvbGljeWRiLm1sc19lbmFibGVkOworfQogCiAvKgogICogUmV0dXJuIHRoZSBib29sZWFuIHZhbHVlIG9mIGEgY29uc3RyYWludCBleHByZXNzaW9uCkBAIC00NjUsNyArNDU1LDggQEAKIAljaGFyICpzY29udGV4dF9uYW1lID0gTlVMTDsKIAljaGFyICp0Y29udGV4dF9uYW1lID0gTlVMTDsKIAljaGFyICpwZXJtaXNzaW9uX25hbWVzWzMyXTsKLQlpbnQgaW5kZXgsIGxlbmd0aDsKKwlpbnQgaW5kZXg7CisJdTMyIGxlbmd0aDsKIAlib29sIG5lZWRfY29tbWEgPSBmYWxzZTsKIAogCWlmICghcGVybWlzc2lvbnMpCkBAIC01MzIsNyArNTIzLDYgQEAKIHN0YXRpYyB2b2lkIHR5cGVfYXR0cmlidXRlX2JvdW5kc19hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCiAJCQkJICAgICBzdHJ1Y3QgY29udGV4dCAqdGNvbnRleHQsCiAJCQkJICAgICB1MTYgdGNsYXNzLAotCQkJCSAgICAgdTMyIHJlcXVlc3RlZCwKIAkJCQkgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCXN0cnVjdCBjb250ZXh0IGxvX3Njb250ZXh0OwpAQCAtNTUzLDcgKzU0Myw2IEBACiAJCWNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoJmxvX3Njb250ZXh0LAogCQkJCQkgIHRjb250ZXh0LAogCQkJCQkgIHRjbGFzcywKLQkJCQkJICByZXF1ZXN0ZWQsCiAJCQkJCSAgJmxvX2F2ZCk7CiAJCWlmICgobG9fYXZkLmFsbG93ZWQgJiBhdmQtPmFsbG93ZWQpID09IGF2ZC0+YWxsb3dlZCkKIAkJCXJldHVybjsJCS8qIG5vIG1hc2tlZCBwZXJtaXNzaW9uICovCkBAIC01NjksNyArNTU4LDYgQEAKIAkJY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzY29udGV4dCwKIAkJCQkJICAmbG9fdGNvbnRleHQsCiAJCQkJCSAgdGNsYXNzLAotCQkJCQkgIHJlcXVlc3RlZCwKIAkJCQkJICAmbG9fYXZkKTsKIAkJaWYgKChsb19hdmQuYWxsb3dlZCAmIGF2ZC0+YWxsb3dlZCkgPT0gYXZkLT5hbGxvd2VkKQogCQkJcmV0dXJuOwkJLyogbm8gbWFza2VkIHBlcm1pc3Npb24gKi8KQEAgLTU4Niw3ICs1NzQsNiBAQAogCQljb250ZXh0X3N0cnVjdF9jb21wdXRlX2F2KCZsb19zY29udGV4dCwKIAkJCQkJICAmbG9fdGNvbnRleHQsCiAJCQkJCSAgdGNsYXNzLAotCQkJCQkgIHJlcXVlc3RlZCwKIAkJCQkJICAmbG9fYXZkKTsKIAkJaWYgKChsb19hdmQuYWxsb3dlZCAmIGF2ZC0+YWxsb3dlZCkgPT0gYXZkLT5hbGxvd2VkKQogCQkJcmV0dXJuOwkJLyogbm8gbWFza2VkIHBlcm1pc3Npb24gKi8KQEAgLTYwNywxMSArNTk0LDEwIEBACiAgKiBDb21wdXRlIGFjY2VzcyB2ZWN0b3JzIGJhc2VkIG9uIGEgY29udGV4dCBzdHJ1Y3R1cmUgcGFpciBmb3IKICAqIHRoZSBwZXJtaXNzaW9ucyBpbiBhIHBhcnRpY3VsYXIgY2xhc3MuCiAgKi8KLXN0YXRpYyBpbnQgY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCi0JCQkJICAgICBzdHJ1Y3QgY29udGV4dCAqdGNvbnRleHQsCi0JCQkJICAgICB1MTYgdGNsYXNzLAotCQkJCSAgICAgdTMyIHJlcXVlc3RlZCwKLQkJCQkgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQorc3RhdGljIHZvaWQgY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCisJCQkJICAgICAgc3RydWN0IGNvbnRleHQgKnRjb250ZXh0LAorCQkJCSAgICAgIHUxNiB0Y2xhc3MsCisJCQkJICAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJc3RydWN0IGNvbnN0cmFpbnRfbm9kZSAqY29uc3RyYWludDsKIAlzdHJ1Y3Qgcm9sZV9hbGxvdyAqcmE7CkBAIC02MjIsMTkgKzYwOCwxNCBAQAogCXN0cnVjdCBlYml0bWFwX25vZGUgKnNub2RlLCAqdG5vZGU7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIGFjY2VzcyB2ZWN0b3JzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4KLQkgKi8KIAlhdmQtPmFsbG93ZWQgPSAwOwogCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CiAJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwotCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7Ci0JYXZkLT5mbGFncyA9IDA7CiAKIAlpZiAodW5saWtlbHkoIXRjbGFzcyB8fCB0Y2xhc3MgPiBwb2xpY3lkYi5wX2NsYXNzZXMubnByaW0pKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgSW52YWxpZCBjbGFzcyAlaHVcbiIsIHRjbGFzcyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm47CiAJfQogCiAJdGNsYXNzX2RhdHVtID0gcG9saWN5ZGIuY2xhc3NfdmFsX3RvX3N0cnVjdFt0Y2xhc3MgLSAxXTsKQEAgLTcwNSw5ICs2ODYsNyBAQAogCSAqIHBlcm1pc3Npb24gYW5kIG5vdGljZSBpdCB0byB1c2Vyc3BhY2UgdmlhIGF1ZGl0LgogCSAqLwogCXR5cGVfYXR0cmlidXRlX2JvdW5kc19hdihzY29udGV4dCwgdGNvbnRleHQsCi0JCQkJIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOwotCi0JcmV0dXJuIDA7CisJCQkJIHRjbGFzcywgYXZkKTsKIH0KIAogc3RhdGljIGludCBzZWN1cml0eV92YWxpZHRyYW5zX2hhbmRsZV9mYWlsKHN0cnVjdCBjb250ZXh0ICpvY29udGV4dCwKQEAgLTg2NCw3ICs4NDMsNyBAQAogCWlmIChyYykgewogCQljaGFyICpvbGRfbmFtZSA9IE5VTEw7CiAJCWNoYXIgKm5ld19uYW1lID0gTlVMTDsKLQkJaW50IGxlbmd0aDsKKwkJdTMyIGxlbmd0aDsKIAogCQlpZiAoIWNvbnRleHRfc3RydWN0X3RvX3N0cmluZyhvbGRfY29udGV4dCwKIAkJCQkJICAgICAgJm9sZF9uYW1lLCAmbGVuZ3RoKSAmJgpAQCAtODg2LDExMCArODY1LDExNiBAQAogCXJldHVybiByYzsKIH0KIAotCi1zdGF0aWMgaW50IHNlY3VyaXR5X2NvbXB1dGVfYXZfY29yZSh1MzIgc3NpZCwKLQkJCQkgICAgdTMyIHRzaWQsCi0JCQkJICAgIHUxNiB0Y2xhc3MsCi0JCQkJICAgIHUzMiByZXF1ZXN0ZWQsCi0JCQkJICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQorc3RhdGljIHZvaWQgYXZkX2luaXQoc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7Ci0Jc3RydWN0IGNvbnRleHQgKnNjb250ZXh0ID0gTlVMTCwgKnRjb250ZXh0ID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCi0Jc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOwotCWlmICghc2NvbnRleHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgc3NpZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7Ci0JaWYgKCF0Y29udGV4dCkgewotCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmMgPSBjb250ZXh0X3N0cnVjdF9jb21wdXRlX2F2KHNjb250ZXh0LCB0Y29udGV4dCwgdGNsYXNzLAotCQkJCSAgICAgICByZXF1ZXN0ZWQsIGF2ZCk7Ci0KLQkvKiBwZXJtaXNzaXZlIGRvbWFpbj8gKi8KLQlpZiAoZWJpdG1hcF9nZXRfYml0KCZwb2xpY3lkYi5wZXJtaXNzaXZlX21hcCwgc2NvbnRleHQtPnR5cGUpKQotCQlhdmQtPmZsYWdzIHw9IEFWRF9GTEFHU19QRVJNSVNTSVZFOwotCi0JcmV0dXJuIHJjOworCWF2ZC0+YWxsb3dlZCA9IDA7CisJYXZkLT5hdWRpdGFsbG93ID0gMDsKKwlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CisJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKKwlhdmQtPmZsYWdzID0gMDsKIH0KIAorCiAvKioKICAqIHNlY3VyaXR5X2NvbXB1dGVfYXYgLSBDb21wdXRlIGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zLgogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzcwotICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zCiAgKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9ucwogICoKICAqIENvbXB1dGUgYSBzZXQgb2YgYWNjZXNzIHZlY3RvciBkZWNpc2lvbnMgYmFzZWQgb24gdGhlCiAgKiBTSUQgcGFpciAoQHNzaWQsIEB0c2lkKSBmb3IgdGhlIHBlcm1pc3Npb25zIGluIEB0Y2xhc3MuCi0gKiBSZXR1cm4gLSVFSU5WQUwgaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkIG9yICUwCi0gKiBpZiB0aGUgYWNjZXNzIHZlY3RvciBkZWNpc2lvbnMgd2VyZSBjb21wdXRlZCBzdWNjZXNzZnVsbHkuCiAgKi8KLWludCBzZWN1cml0eV9jb21wdXRlX2F2KHUzMiBzc2lkLAotCQkJdTMyIHRzaWQsCi0JCQl1MTYgb3JpZ190Y2xhc3MsCi0JCQl1MzIgb3JpZ19yZXF1ZXN0ZWQsCi0JCQlzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKK3ZvaWQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwKKwkJCSB1MzIgdHNpZCwKKwkJCSB1MTYgb3JpZ190Y2xhc3MsCisJCQkgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJdTE2IHRjbGFzczsKLQl1MzIgcmVxdWVzdGVkOwotCWludCByYzsKKwlzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQgPSBOVUxMLCAqdGNvbnRleHQgPSBOVUxMOwogCiAJcmVhZF9sb2NrKCZwb2xpY3lfcndsb2NrKTsKLQorCWF2ZF9pbml0KGF2ZCk7CiAJaWYgKCFzc19pbml0aWFsaXplZCkKIAkJZ290byBhbGxvdzsKIAotCXJlcXVlc3RlZCA9IHVubWFwX3Blcm0ob3JpZ190Y2xhc3MsIG9yaWdfcmVxdWVzdGVkKTsKKwlzY29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgc3NpZCk7CisJaWYgKCFzY29udGV4dCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzc2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogcGVybWlzc2l2ZSBkb21haW4/ICovCisJaWYgKGViaXRtYXBfZ2V0X2JpdCgmcG9saWN5ZGIucGVybWlzc2l2ZV9tYXAsIHNjb250ZXh0LT50eXBlKSkKKwkJYXZkLT5mbGFncyB8PSBBVkRfRkxBR1NfUEVSTUlTU0lWRTsKKworCXRjb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCB0c2lkKTsKKwlpZiAoIXRjb250ZXh0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHRzaWQpOworCQlnb3RvIG91dDsKKwl9CisKIAl0Y2xhc3MgPSB1bm1hcF9jbGFzcyhvcmlnX3RjbGFzcyk7CiAJaWYgKHVubGlrZWx5KG9yaWdfdGNsYXNzICYmICF0Y2xhc3MpKSB7CiAJCWlmIChwb2xpY3lkYi5hbGxvd191bmtub3duKQogCQkJZ290byBhbGxvdzsKLQkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0JcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2X2NvcmUoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIGF2ZCk7CisJY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzY29udGV4dCwgdGNvbnRleHQsIHRjbGFzcywgYXZkKTsKIAltYXBfZGVjaXNpb24ob3JpZ190Y2xhc3MsIGF2ZCwgcG9saWN5ZGIuYWxsb3dfdW5rbm93bik7CiBvdXQ6CiAJcmVhZF91bmxvY2soJnBvbGljeV9yd2xvY2spOwotCXJldHVybiByYzsKKwlyZXR1cm47CiBhbGxvdzoKIAlhdmQtPmFsbG93ZWQgPSAweGZmZmZmZmZmOwotCWF2ZC0+YXVkaXRhbGxvdyA9IDA7Ci0JYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwotCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7Ci0JYXZkLT5mbGFncyA9IDA7Ci0JcmMgPSAwOwogCWdvdG8gb3V0OwogfQogCi1pbnQgc2VjdXJpdHlfY29tcHV0ZV9hdl91c2VyKHUzMiBzc2lkLAotCQkJICAgICB1MzIgdHNpZCwKLQkJCSAgICAgdTE2IHRjbGFzcywKLQkJCSAgICAgdTMyIHJlcXVlc3RlZCwKLQkJCSAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCit2b2lkIHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcih1MzIgc3NpZCwKKwkJCSAgICAgIHUzMiB0c2lkLAorCQkJICAgICAgdTE2IHRjbGFzcywKKwkJCSAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewotCWludCByYzsKLQotCWlmICghc3NfaW5pdGlhbGl6ZWQpIHsKLQkJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKLQkJYXZkLT5hdWRpdGFsbG93ID0gMDsKLQkJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwotCQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwotCQlyZXR1cm4gMDsKLQl9CisJc3RydWN0IGNvbnRleHQgKnNjb250ZXh0ID0gTlVMTCwgKnRjb250ZXh0ID0gTlVMTDsKIAogCXJlYWRfbG9jaygmcG9saWN5X3J3bG9jayk7Ci0JcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2X2NvcmUoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIGF2ZCk7CisJYXZkX2luaXQoYXZkKTsKKwlpZiAoIXNzX2luaXRpYWxpemVkKQorCQlnb3RvIGFsbG93OworCisJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOworCWlmICghc2NvbnRleHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3NpZCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHBlcm1pc3NpdmUgZG9tYWluPyAqLworCWlmIChlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBlcm1pc3NpdmVfbWFwLCBzY29udGV4dC0+dHlwZSkpCisJCWF2ZC0+ZmxhZ3MgfD0gQVZEX0ZMQUdTX1BFUk1JU1NJVkU7CisKKwl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7CisJaWYgKCF0Y29udGV4dCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVubGlrZWx5KCF0Y2xhc3MpKSB7CisJCWlmIChwb2xpY3lkYi5hbGxvd191bmtub3duKQorCQkJZ290byBhbGxvdzsKKwkJZ290byBvdXQ7CisJfQorCisJY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzY29udGV4dCwgdGNvbnRleHQsIHRjbGFzcywgYXZkKTsKKyBvdXQ6CiAJcmVhZF91bmxvY2soJnBvbGljeV9yd2xvY2spOwotCXJldHVybiByYzsKKwlyZXR1cm47CithbGxvdzoKKwlhdmQtPmFsbG93ZWQgPSAweGZmZmZmZmZmOworCWdvdG8gb3V0OwogfQogCiAvKgpAQCAtMTU2NSw3ICsxNTUwLDEwIEBACiB7CiAJc3RydWN0IHNpZHRhYiAqcyA9IGFyZzsKIAotCXJldHVybiBzaWR0YWJfaW5zZXJ0KHMsIHNpZCwgY29udGV4dCk7CisJaWYgKHNpZCA+IFNFQ0lOSVRTSURfTlVNKQorCQlyZXR1cm4gc2lkdGFiX2luc2VydChzLCBzaWQsIGNvbnRleHQpOworCWVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbnZlcnRfY29udGV4dF9oYW5kbGVfaW52YWxpZF9jb250ZXh0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0KQpAQCAtMTYwNiwxMiArMTU5NCwxNyBAQAogewogCXN0cnVjdCBjb252ZXJ0X2NvbnRleHRfYXJncyAqYXJnczsKIAlzdHJ1Y3QgY29udGV4dCBvbGRjOworCXN0cnVjdCBvY29udGV4dCAqb2M7CisJc3RydWN0IG1sc19yYW5nZSAqcmFuZ2U7CiAJc3RydWN0IHJvbGVfZGF0dW0gKnJvbGU7CiAJc3RydWN0IHR5cGVfZGF0dW0gKnR5cGRhdHVtOwogCXN0cnVjdCB1c2VyX2RhdHVtICp1c3JkYXR1bTsKIAljaGFyICpzOwogCXUzMiBsZW47Ci0JaW50IHJjOworCWludCByYyA9IDA7CisKKwlpZiAoa2V5IDw9IFNFQ0lOSVRTSURfTlVNKQorCQlnb3RvIG91dDsKIAogCWFyZ3MgPSBwOwogCkBAIC0xNjczLDkgKzE2NjYsMzkgQEAKIAkJZ290byBiYWQ7CiAJYy0+dHlwZSA9IHR5cGRhdHVtLT52YWx1ZTsKIAotCXJjID0gbWxzX2NvbnZlcnRfY29udGV4dChhcmdzLT5vbGRwLCBhcmdzLT5uZXdwLCBjKTsKLQlpZiAocmMpCi0JCWdvdG8gYmFkOworCS8qIENvbnZlcnQgdGhlIE1MUyBmaWVsZHMgaWYgZGVhbGluZyB3aXRoIE1MUyBwb2xpY2llcyAqLworCWlmIChhcmdzLT5vbGRwLT5tbHNfZW5hYmxlZCAmJiBhcmdzLT5uZXdwLT5tbHNfZW5hYmxlZCkgeworCQlyYyA9IG1sc19jb252ZXJ0X2NvbnRleHQoYXJncy0+b2xkcCwgYXJncy0+bmV3cCwgYyk7CisJCWlmIChyYykKKwkJCWdvdG8gYmFkOworCX0gZWxzZSBpZiAoYXJncy0+b2xkcC0+bWxzX2VuYWJsZWQgJiYgIWFyZ3MtPm5ld3AtPm1sc19lbmFibGVkKSB7CisJCS8qCisJCSAqIFN3aXRjaGluZyBiZXR3ZWVuIE1MUyBhbmQgbm9uLU1MUyBwb2xpY3k6CisJCSAqIGZyZWUgYW55IHN0b3JhZ2UgdXNlZCBieSB0aGUgTUxTIGZpZWxkcyBpbiB0aGUKKwkJICogY29udGV4dCBmb3IgYWxsIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIHNpZHRhYi4KKwkJICovCisJCW1sc19jb250ZXh0X2Rlc3Ryb3koYyk7CisJfSBlbHNlIGlmICghYXJncy0+b2xkcC0+bWxzX2VuYWJsZWQgJiYgYXJncy0+bmV3cC0+bWxzX2VuYWJsZWQpIHsKKwkJLyoKKwkJICogU3dpdGNoaW5nIGJldHdlZW4gbm9uLU1MUyBhbmQgTUxTIHBvbGljeToKKwkJICogZW5zdXJlIHRoYXQgdGhlIE1MUyBmaWVsZHMgb2YgdGhlIGNvbnRleHQgZm9yIGFsbAorCQkgKiBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBzaWR0YWIgYXJlIGZpbGxlZCBpbiB3aXRoIGEKKwkJICogc3VpdGFibGUgZGVmYXVsdCB2YWx1ZSwgbGlrZWx5IHRha2VuIGZyb20gb25lIG9mIHRoZQorCQkgKiBpbml0aWFsIFNJRHMuCisJCSAqLworCQlvYyA9IGFyZ3MtPm5ld3AtPm9jb250ZXh0c1tPQ09OX0lTSURdOworCQl3aGlsZSAob2MgJiYgb2MtPnNpZFswXSAhPSBTRUNJTklUU0lEX1VOTEFCRUxFRCkKKwkJCW9jID0gb2MtPm5leHQ7CisJCWlmICghb2MpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVuYWJsZSB0byBsb29rIHVwIgorCQkJCSIgdGhlIGluaXRpYWwgU0lEcyBsaXN0XG4iKTsKKwkJCWdvdG8gYmFkOworCQl9CisJCXJhbmdlID0gJm9jLT5jb250ZXh0WzBdLnJhbmdlOworCQlyYyA9IG1sc19yYW5nZV9zZXQoYywgcmFuZ2UpOworCQlpZiAocmMpCisJCQlnb3RvIGJhZDsKKwl9CiAKIAkvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIG5ldyBjb250ZXh0LiAqLwogCWlmICghcG9saWN5ZGJfY29udGV4dF9pc3ZhbGlkKGFyZ3MtPm5ld3AsIGMpKSB7CkBAIC0xNzcxLDkgKzE3OTQsMTcgQEAKIAlpZiAocG9saWN5ZGJfcmVhZCgmbmV3cG9saWN5ZGIsIGZwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2lkdGFiX2luaXQoJm5ld3NpZHRhYikpIHsKKwkvKiBJZiBzd2l0Y2hpbmcgYmV0d2VlbiBkaWZmZXJlbnQgcG9saWN5IHR5cGVzLCBsb2cgTUxTIHN0YXR1cyAqLworCWlmIChwb2xpY3lkYi5tbHNfZW5hYmxlZCAmJiAhbmV3cG9saWN5ZGIubWxzX2VuYWJsZWQpCisJCXByaW50ayhLRVJOX0lORk8gIlNFTGludXg6IERpc2FibGluZyBNTFMgc3VwcG9ydC4uLlxuIik7CisJZWxzZSBpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkICYmIG5ld3BvbGljeWRiLm1sc19lbmFibGVkKQorCQlwcmludGsoS0VSTl9JTkZPICJTRUxpbnV4OiBFbmFibGluZyBNTFMgc3VwcG9ydC4uLlxuIik7CisKKwlyYyA9IHBvbGljeWRiX2xvYWRfaXNpZHMoJm5ld3BvbGljeWRiLCAmbmV3c2lkdGFiKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgdW5hYmxlIHRvIGxvYWQgdGhlIGluaXRpYWwgU0lEc1xuIik7CiAJCXBvbGljeWRiX2Rlc3Ryb3koJm5ld3BvbGljeWRiKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByYzsKIAl9CiAKIAlpZiAoc2VsaW51eF9zZXRfbWFwcGluZygmbmV3cG9saWN5ZGIsIHNlY2NsYXNzX21hcCwKQEAgLTE4MDAsOCArMTgzMSwxMiBAQAogCWFyZ3Mub2xkcCA9ICZwb2xpY3lkYjsKIAlhcmdzLm5ld3AgPSAmbmV3cG9saWN5ZGI7CiAJcmMgPSBzaWR0YWJfbWFwKCZuZXdzaWR0YWIsIGNvbnZlcnRfY29udGV4dCwgJmFyZ3MpOwotCWlmIChyYykKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgdW5hYmxlIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIgorCQkJIiByZXByZXNlbnRhdGlvbiBvZiBjb250ZXh0cyBpbiB0aGUgbmV3IFNJRCIKKwkJCSIgdGFibGVcbiIpOwogCQlnb3RvIGVycjsKKwl9CiAKIAkvKiBTYXZlIHRoZSBvbGQgcG9saWN5ZGIgYW5kIFNJRCB0YWJsZSB0byBmcmVlIGxhdGVyLiAqLwogCW1lbWNweSgmb2xkcG9saWN5ZGIsICZwb2xpY3lkYiwgc2l6ZW9mIHBvbGljeWRiKTsKQEAgLTIzOTcsNyArMjQzMiw3IEBACiAJdTMyIGxlbjsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKCFzc19pbml0aWFsaXplZCB8fCAhc2VsaW51eF9tbHNfZW5hYmxlZCkgeworCWlmICghc3NfaW5pdGlhbGl6ZWQgfHwgIXBvbGljeWRiLm1sc19lbmFibGVkKSB7CiAJCSpuZXdfc2lkID0gc2lkOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNDk4LDcgKzI1MzMsNyBAQAogCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgc3NfaW5pdGlhbGl6ZWQgaGVyZSBzaW5jZSB0aGUgb25seSB3YXkgYm90aAogCSAqIG5sYmxfc2lkIGFuZCB4ZnJtX3NpZCBhcmUgbm90IGVxdWFsIHRvIFNFQ1NJRF9OVUxMIHdvdWxkIGJlIGlmIHRoZQogCSAqIHNlY3VyaXR5IHNlcnZlciB3YXMgaW5pdGlhbGl6ZWQgYW5kIHNzX2luaXRpYWxpemVkIHdhcyB0cnVlICovCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKSB7CisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkgewogCQkqcGVlcl9zaWQgPSBTRUNTSURfTlVMTDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjU1NSw3ICsyNTkwLDcgQEAKIAlyZWFkX2xvY2soJnBvbGljeV9yd2xvY2spOwogCiAJKm5jbGFzc2VzID0gcG9saWN5ZGIucF9jbGFzc2VzLm5wcmltOwotCSpjbGFzc2VzID0ga2NhbGxvYygqbmNsYXNzZXMsIHNpemVvZigqY2xhc3NlcyksIEdGUF9BVE9NSUMpOworCSpjbGFzc2VzID0ga2NhbGxvYygqbmNsYXNzZXMsIHNpemVvZigqKmNsYXNzZXMpLCBHRlBfQVRPTUlDKTsKIAlpZiAoISpjbGFzc2VzKQogCQlnb3RvIG91dDsKIApAQCAtMjYwMiw3ICsyNjM3LDcgQEAKIAl9CiAKIAkqbnBlcm1zID0gbWF0Y2gtPnBlcm1pc3Npb25zLm5wcmltOwotCSpwZXJtcyA9IGtjYWxsb2MoKm5wZXJtcywgc2l6ZW9mKCpwZXJtcyksIEdGUF9BVE9NSUMpOworCSpwZXJtcyA9IGtjYWxsb2MoKm5wZXJtcywgc2l6ZW9mKCoqcGVybXMpLCBHRlBfQVRPTUlDKTsKIAlpZiAoISpwZXJtcykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggOGRmZmNiNy4uNTIyNWU2NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTE1NywxMiArMTU3LDEyIEBACiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHNtYWNrX3N5c2xvZyhpbnQgdHlwZSkKK3N0YXRpYyBpbnQgc21hY2tfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKIAlpbnQgcmM7CiAJY2hhciAqc3AgPSBjdXJyZW50X3NlY3VyaXR5KCk7CiAKLQlyYyA9IGNhcF9zeXNsb2codHlwZSk7CisJcmMgPSBjYXBfc3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlIGIvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCmluZGV4IDEwY2NkNjguLjYwYTllMjAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQorKysgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKQEAgLTEgKzEgQEAKLW9iai15ID0gY29tbW9uLm8gcmVhbHBhdGgubyB0b21veW8ubyBkb21haW4ubyBmaWxlLm8KK29iai15ID0gY29tbW9uLm8gcmVhbHBhdGgubyB0b21veW8ubyBkb21haW4ubyBmaWxlLm8gZ2MubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCmluZGV4IGUwZDAzNTQuLmZmNTFmMTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uYworKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKQEAgLTEyLDkgKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotI2luY2x1ZGUgInJlYWxwYXRoLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAidG9tb3lvLmgiCisKKy8qIExvY2sgZm9yIHByb3RlY3RpbmcgcG9saWN5LiAqLworREVGSU5FX01VVEVYKHRvbW95b19wb2xpY3lfbG9jayk7CiAKIC8qIEhhcyBsb2FkaW5nIHBvbGljeSBkb25lPyAqLwogYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKQEAgLTE3OCwxNCArMTc5LDEyIEBACiAgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQogICogQGVuZF90eXBlOiAgICAgU2hvdWxkIHRoZSBwYXRobmFtZSBlbmQgd2l0aCAnLyc/CiAgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQotICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KICAqCiAgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCiAgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCi0JCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKLQkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlKQogewogCWNvbnN0IGNoYXIgKmNvbnN0IHN0YXJ0ID0gZmlsZW5hbWU7CiAJYm9vbCBpbl9yZXBldGl0aW9uID0gZmFsc2U7CkBAIC0xOTMsNyArMTkyLDYgQEAKIAl1bnNpZ25lZCBjaGFyIGM7CiAJdW5zaWduZWQgY2hhciBkOwogCXVuc2lnbmVkIGNoYXIgZTsKLQljb25zdCBjaGFyICpvcmlnaW5hbF9maWxlbmFtZSA9IGZpbGVuYW1lOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJZ290byBvdXQ7CkBAIC0yODIsMjUgKzI4MCwyMCBAQAogCQlnb3RvIG91dDsKIAlyZXR1cm4gdHJ1ZTsKICBvdXQ6Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBhdGhuYW1lICclcydcbiIsIGZ1bmN0aW9uLAotCSAgICAgICBvcmlnaW5hbF9maWxlbmFtZSk7CiAJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKICAqIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgogICogQGRvbWFpbm5hbWU6ICAgVGhlIGRvbWFpbm5hbWUgdG8gY2hlY2suCi0gKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBAZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQorYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAJdW5zaWduZWQgY2hhciBkOwogCXVuc2lnbmVkIGNoYXIgZTsKLQljb25zdCBjaGFyICpvcmdfZG9tYWlubmFtZSA9IGRvbWFpbm5hbWU7CiAKIAlpZiAoIWRvbWFpbm5hbWUgfHwgc3RybmNtcChkb21haW5uYW1lLCBUT01PWU9fUk9PVF9OQU1FLAogCQkJCSAgIFRPTU9ZT19ST09UX05BTUVfTEVOKSkKQEAgLTM0Myw4ICszMzYsNiBAQAogCX0gd2hpbGUgKCpkb21haW5uYW1lKTsKIAlyZXR1cm4gdHJ1ZTsKICBvdXQ6Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIGRvbWFpbm5hbWUgJyVzJ1xuIiwgZnVuY3Rpb24sCi0JICAgICAgIG9yZ19kb21haW5uYW1lKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2NSwxMCArMzU2LDkgQEAKICAqCiAgKiBAZG9tYWlubmFtZTogVGhlIGRvbWFpbm5hbWUgdG8gZmluZC4KICAqCi0gKiBDYWxsZXIgbXVzdCBjYWxsIGRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyBvcgotICogZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyAuCi0gKgogICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCiB7CkBAIC0zNzcsNyArMzY3LDcgQEAKIAogCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CiAJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgewogCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCAmJgogCQkgICAgIXRvbW95b19wYXRoY21wKCZuYW1lLCBkb21haW4tPmRvbWFpbm5hbWUpKQogCQkJcmV0dXJuIGRvbWFpbjsKQEAgLTc0OCw3ICs3MzgsNyBAQAogICoKICAqIFJldHVybnMgdGhlIHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2VzcyBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBremFsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIGtmcmVlKCkKICAqIGlmIHRoaXMgZnVuY3Rpb24gZGlkbid0IHJldHVybiBOVUxMLgogICovCiBzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2dldF9leGUodm9pZCkKQEAgLTgyOSw2ICs4MTksOCBAQAogICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBkb21haW4gaXMgbm90IGV4Y2VlZGVkIHF1b3RhLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pCiB7CkBAIC04MzcsNjEgKzgyOSwyOSBAQAogCiAJaWYgKCFkb21haW4pCiAJCXJldHVybiB0cnVlOwotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7Ci0JCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCi0JCQljb250aW51ZTsKLQkJc3dpdGNoICh0b21veW9fYWNsX3R5cGUyKHB0cikpIHsKLQkJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsMTsKLQkJCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsMjsKLQkJCXUxNiBwZXJtOwotCQljYXNlIFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTDoKLQkJCWFjbDEgPSBjb250YWluZXJfb2YocHRyLAotCQkJCSAgICBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJCSAgICBoZWFkKTsKLQkJCXBlcm0gPSBhY2wxLT5wZXJtOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYKLQkJCSAgICAoKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwKLQkJCSAgICAgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKSkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfVU5MSU5LX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtESVJfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9STURJUl9BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LRklGT19BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LU09DS19BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0NIQVJfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1NZTUxJTktfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCkpCi0JCQkJY291bnQrKzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3dpdGNoIChwdHItPnR5cGUpIHsKKwkJCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKmFjbDsKKwkJCXUzMiBwZXJtOworCQkJdTggaTsKKwkJY2FzZSBUT01PWU9fVFlQRV9QQVRIX0FDTDoKKwkJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpOworCQkJcGVybSA9IGFjbC0+cGVybSB8ICgoKHUzMikgYWNsLT5wZXJtX2hpZ2gpIDw8IDE2KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyBpKyspCisJCQkJaWYgKHBlcm0gJiAoMSA8PCBpKSkKKwkJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpCisJCQkJY291bnQgLT0gMjsKIAkJCWJyZWFrOwotCQljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKLQkJCWFjbDIgPSBjb250YWluZXJfb2YocHRyLAotCQkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJCSAgICBoZWFkKTsKLQkJCXBlcm0gPSBhY2wyLT5wZXJtOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9MSU5LX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCkpCi0JCQkJY291bnQrKzsKKwkJY2FzZSBUT01PWU9fVFlQRV9QQVRIMl9BQ0w6CisJCQlwZXJtID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpCisJCQkJLT5wZXJtOworCQkJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OOyBpKyspCisJCQkJaWYgKHBlcm0gJiAoMSA8PCBpKSkKKwkJCQkJY291bnQrKzsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKIAlpZiAoY291bnQgPCB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSkpCiAJCXJldHVybiB0cnVlOwogCWlmICghZG9tYWluLT5xdW90YV93YXJuZWQpIHsKQEAgLTkyMyw5ICs4ODMsMTEgQEAKIAlwdHIgPSB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV07CiAJaWYgKHB0cikKIAkJZ290byBvazsKLQlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKnB0cikpOwotCWlmICghcHRyKQorCXB0ciA9IGttYWxsb2Moc2l6ZW9mKCpwdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRvbW95b19tZW1vcnlfb2socHRyKSkgeworCQlrZnJlZShwdHIpOwogCQlnb3RvIG9rOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspCiAJCXB0ci0+dmFsdWVbaV0gPSB0b21veW9fY29udHJvbF9hcnJheVtpXS5jdXJyZW50X3ZhbHVlOwogCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCkBAIC05NjYsNyArOTI4LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmNwID0gJ1wwJzsKIAlpZiAoIXN0cmNtcChkYXRhLCAiQ09NTUVOVCIpKSB7Ci0JCXByb2ZpbGUtPmNvbW1lbnQgPSB0b21veW9fc2F2ZV9uYW1lKGNwICsgMSk7CisJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvbGRfY29tbWVudCA9IHByb2ZpbGUtPmNvbW1lbnQ7CisJCXByb2ZpbGUtPmNvbW1lbnQgPSB0b21veW9fZ2V0X25hbWUoY3AgKyAxKTsKKwkJdG9tb3lvX3B1dF9uYW1lKG9sZF9jb21tZW50KTsKIAkJcmV0dXJuIDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykgewpAQCAtMTA2MSwyNyArMTAyNSw2IEBACiB9CiAKIC8qCi0gKiB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mCi0gKiBkb21haW5uYW1lcyBvciBwcm9ncmFtcyB3aGljaCBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBjb25maWd1cmF0aW9uIHZpYQotICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QgLgotICogICgyKSAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lIG9yIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgotICogICgzKSAiaXNfZG9tYWluIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JLyogQSBwYXRoIHRvIHByb2dyYW0gb3IgYSBkb21haW5uYW1lLiAqLwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptYW5hZ2VyOwotCWJvb2wgaXNfZG9tYWluOyAgLyogVHJ1ZSBpZiBtYW5hZ2VyIGlzIGEgZG9tYWlubmFtZS4gKi8KLQlib29sIGlzX2RlbGV0ZWQ7IC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyBkZWxldGVkLiAqLwotfTsKLQotLyoKICAqIHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBkb21haW5uYW1lcyBvcgogICogcHJvZ3JhbXMgd2hpY2ggYXJlIHBlcm1pdHRlZCB0byBtb2RpZnkgY29uZmlndXJhdGlvbiB2aWEKICAqIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgpAQCAtMTExMSw4ICsxMDU0LDcgQEAKICAqCiAgKiAjIGNhdCAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlcgogICovCi1zdGF0aWMgTElTVF9IRUFEKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworTElTVF9IRUFEKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKIAogLyoqCiAgKiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkgLSBBZGQgYSBtYW5hZ2VyIGVudHJ5LgpAQCAtMTEyMSw0OCArMTA2Myw1MCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkoY29uc3QgY2hhciAqbWFuYWdlciwKIAkJCQkgICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX21hbmFnZXI7Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAlib29sIGlzX2RvbWFpbiA9IGZhbHNlOwogCiAJaWYgKHRvbW95b19pc19kb21haW5fZGVmKG1hbmFnZXIpKSB7Ci0JCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKG1hbmFnZXIsIF9fZnVuY19fKSkKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4obWFuYWdlcikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaXNfZG9tYWluID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgobWFuYWdlciwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXNhdmVkX21hbmFnZXIgPSB0b21veW9fc2F2ZV9uYW1lKG1hbmFnZXIpOworCXNhdmVkX21hbmFnZXIgPSB0b21veW9fZ2V0X25hbWUobWFuYWdlcik7CiAJaWYgKCFzYXZlZF9tYW5hZ2VyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgewogCQlpZiAocHRyLT5tYW5hZ2VyICE9IHNhdmVkX21hbmFnZXIpCiAJCQljb250aW51ZTsKIAkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwogCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9Ci0JaWYgKGlzX2RlbGV0ZSkgewotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5tYW5hZ2VyID0gc2F2ZWRfbWFuYWdlcjsKKwkJc2F2ZWRfbWFuYWdlciA9IE5VTEw7CisJCWVudHJ5LT5pc19kb21haW4gPSBpc19kb21haW47CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+bWFuYWdlciA9IHNhdmVkX21hbmFnZXI7Ci0JbmV3X2VudHJ5LT5pc19kb21haW4gPSBpc19kb21haW47Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOwotCWVycm9yID0gMDsKLSBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfbWFuYWdlcik7CisJa2ZyZWUoZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTE3Miw2ICsxMTE2LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKQEAgLTExOTEsNiArMTEzNyw4IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgMC4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTE5OSw3ICsxMTQ3LDYgQEAKIAogCWlmIChoZWFkLT5yZWFkX2VvZikKIAkJcmV0dXJuIDA7Ci0JZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKIAkJCSAgICAgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KSB7CiAJCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKQEAgLTEyMTEsNyArMTE1OCw2IEBACiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKIAloZWFkLT5yZWFkX2VvZiA9IGRvbmU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIxLDYgKzExNjcsOCBAQAogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byBtb2RpZnkgcG9saWN5CiAgKiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGJvb2wgdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKHZvaWQpCiB7CkBAIC0xMjM0LDI5ICsxMTgyLDI1IEBACiAJCXJldHVybiB0cnVlOwogCWlmICghdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdCAmJiAodGFzay0+Y3JlZC0+dWlkIHx8IHRhc2stPmNyZWQtPmV1aWQpKQogCQlyZXR1cm4gZmFsc2U7Ci0JZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgcHRyLT5pc19kb21haW4KIAkJICAgICYmICF0b21veW9fcGF0aGNtcChkb21haW5uYW1lLCBwdHItPm1hbmFnZXIpKSB7CiAJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCX0KLQl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKIAlpZiAoZm91bmQpCiAJCXJldHVybiB0cnVlOwogCWV4ZSA9IHRvbW95b19nZXRfZXhlKCk7CiAJaWYgKCFleGUpCiAJCXJldHVybiBmYWxzZTsKLQlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgewogCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiAhcHRyLT5pc19kb21haW4KIAkJICAgICYmICFzdHJjbXAoZXhlLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CiAJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCX0KLQl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKIAlpZiAoIWZvdW5kKSB7IC8qIFJlZHVjZSBlcnJvciBtZXNzYWdlcy4gKi8KIAkJc3RhdGljIHBpZF90IGxhc3RfcGlkOwogCQljb25zdCBwaWRfdCBwaWQgPSBjdXJyZW50LT5waWQ7CkBAIC0xMjY2LDcgKzEyMTAsNyBAQAogCQkJbGFzdF9waWQgPSBwaWQ7CiAJCX0KIAl9Ci0JdG9tb3lvX2ZyZWUoZXhlKTsKKwlrZnJlZShleGUpOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtMTI3Nyw2ICsxMjIxLDggQEAKICAqIEBkYXRhOiBTdHJpbmcgdG8gcGFyc2UuCiAgKgogICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9faXNfc2VsZWN0X29uZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKIAkJCQkgY29uc3QgY2hhciAqZGF0YSkKQEAgLTEyODYsMTcgKzEyMzIsMTYgQEAKIAogCWlmIChzc2NhbmYoZGF0YSwgInBpZD0ldSIsICZwaWQpID09IDEpIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAocCkKIAkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsICJkb21haW49IiwgNykpIHsKLQkJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEgKyA3KSkgewotCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWlmICh0b21veW9faXNfZG9tYWluX2RlZihkYXRhICsgNykpCiAJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSArIDcpOwotCQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCQl9CiAJfSBlbHNlCiAJCXJldHVybiBmYWxzZTsKIAloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOwpAQCAtMTMxMCwxMyArMTI1NSwxMSBAQAogCWlmIChkb21haW4pIHsKIAkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZDsKIAkJaGVhZC0+cmVhZF92YXIxID0gTlVMTDsKLQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CiAJCQlpZiAoZCA9PSBkb21haW4pCiAJCQkJYnJlYWs7CiAJCQloZWFkLT5yZWFkX3ZhcjEgPSAmZC0+bGlzdDsKIAkJfQotCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CiAJCWhlYWQtPnJlYWRfYml0ID0gMDsKIAkJaGVhZC0+cmVhZF9zdGVwID0gMDsKQEAgLTEzMzIsNiArMTI3NSw4IEBACiAgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgogICoKICAqIFJldHVybnMgMC4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19kZWxldGVfZG9tYWluKGNoYXIgKmRvbWFpbm5hbWUpCiB7CkBAIC0xMzQwLDkgKzEyODUsOSBAQAogCiAJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKIAl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOwotCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwogCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKIAkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCiAJCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQogCQkJY29udGludWU7CkBAIC0xMzUyLDcgKzEyOTcsNyBAQAogCQlkb21haW4tPmlzX2RlbGV0ZWQgPSB0cnVlOwogCQlicmVhazsKIAl9Ci0JdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjIsNiArMTMwNyw4IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKQEAgLTEzODQsMTEgKzEzMzEsOSBAQAogCQlkb21haW4gPSBOVUxMOwogCQlpZiAoaXNfZGVsZXRlKQogCQkJdG9tb3lvX2RlbGV0ZV9kb21haW4oZGF0YSk7Ci0JCWVsc2UgaWYgKGlzX3NlbGVjdCkgewotCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWVsc2UgaWYgKGlzX3NlbGVjdCkKIAkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhKTsKLQkJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGRhdGEsIDApOwogCQloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOwogCQlyZXR1cm4gMDsKQEAgLTE0MDMsNDMgKzEzNDgsMzkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc3RyY21wKGRhdGEsIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkpIHsKLQkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIGlzX2RlbGV0ZSwKLQkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCk7CisJCWRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkID0gIWlzX2RlbGV0ZTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koZGF0YSwgZG9tYWluLCBpc19kZWxldGUpOwogfQogCiAvKioKLSAqIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2wgLSBQcmludCBhIHNpbmdsZSBwYXRoIEFDTCBlbnRyeS4KKyAqIHRvbW95b19wcmludF9wYXRoX2FjbCAtIFByaW50IGEgc2luZ2xlIHBhdGggQUNMIGVudHJ5LgogICoKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCi0gKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAotCQkJCQkgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICoKLQkJCQkJIHB0cikKK3N0YXRpYyBib29sIHRvbW95b19wcmludF9wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQkgIHN0cnVjdCB0b21veW9fcGF0aF9hY2wgKnB0cikKIHsKIAlpbnQgcG9zOwogCXU4IGJpdDsKIAljb25zdCBjaGFyICphdG1hcmsgPSAiIjsKIAljb25zdCBjaGFyICpmaWxlbmFtZTsKLQljb25zdCB1MTYgcGVybSA9IHB0ci0+cGVybTsKKwljb25zdCB1MzIgcGVybSA9IHB0ci0+cGVybSB8ICgoKHUzMikgcHRyLT5wZXJtX2hpZ2gpIDw8IDE2KTsKIAogCWZpbGVuYW1lID0gcHRyLT5maWxlbmFtZS0+bmFtZTsKLQlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsKLQkgICAgIGJpdCsrKSB7CisJZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTjsgYml0KyspIHsKIAkJY29uc3QgY2hhciAqbXNnOwogCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCiAJCQljb250aW51ZTsKIAkJLyogUHJpbnQgInJlYWQvd3JpdGUiIGluc3RlYWQgb2YgInJlYWQiIGFuZCAid3JpdGUiLiAqLwotCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEX0FDTCB8fAotCQkgICAgIGJpdCA9PSBUT01PWU9fVFlQRV9XUklURV9BQ0wpCi0JCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCisJCWlmICgoYml0ID09IFRPTU9ZT19UWVBFX1JFQUQgfHwgYml0ID09IFRPTU9ZT19UWVBFX1dSSVRFKQorCQkgICAgJiYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKSkpCiAJCQljb250aW51ZTsKLQkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoYml0KTsKKwkJbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChiaXQpOwogCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOwogCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXNcbiIsIG1zZywKIAkJCQkgICAgICBhdG1hcmssIGZpbGVuYW1lKSkKQEAgLTE0NTQsMTYgKzEzOTUsMTUgQEAKIH0KIAogLyoqCi0gKiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsIC0gUHJpbnQgYSBkb3VibGUgcGF0aCBBQ0wgZW50cnkuCisgKiB0b21veW9fcHJpbnRfcGF0aDJfYWNsIC0gUHJpbnQgYSBkb3VibGUgcGF0aCBBQ0wgZW50cnkuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiLgorICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aDJfYWNsIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAotCQkJCQkgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICoKLQkJCQkJIHB0cikKK3N0YXRpYyBib29sIHRvbW95b19wcmludF9wYXRoMl9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJICAgc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKnB0cikKIHsKIAlpbnQgcG9zOwogCWNvbnN0IGNoYXIgKmF0bWFyazEgPSAiIjsKQEAgLTE0NzUsMTIgKzE0MTUsMTEgQEAKIAogCWZpbGVuYW1lMSA9IHB0ci0+ZmlsZW5hbWUxLT5uYW1lOwogCWZpbGVuYW1lMiA9IHB0ci0+ZmlsZW5hbWUyLT5uYW1lOwotCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOwotCSAgICAgYml0KyspIHsKKwlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTjsgYml0KyspIHsKIAkJY29uc3QgY2hhciAqbXNnOwogCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCiAJCQljb250aW51ZTsKLQkJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQoYml0KTsKKwkJbXNnID0gdG9tb3lvX3BhdGgyMmtleXdvcmQoYml0KTsKIAkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKIAkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzICVzJXNcbiIsIG1zZywKIAkJCQkgICAgICBhdG1hcmsxLCBmaWxlbmFtZTEsIGF0bWFyazIsIGZpbGVuYW1lMikpCkBAIC0xNTA1LDIzICsxNDQ0LDE3IEBACiBzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZW50cnkoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCiAJCQkgICAgICAgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQogewotCWNvbnN0IHU4IGFjbF90eXBlID0gdG9tb3lvX2FjbF90eXBlMihwdHIpOworCWNvbnN0IHU4IGFjbF90eXBlID0gcHRyLT50eXBlOwogCi0JaWYgKGFjbF90eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKSB7Ci0JCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsCi0JCQk9IGNvbnRhaW5lcl9vZihwdHIsCi0JCQkJICAgICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkgICAgICAgaGVhZCk7Ci0JCXJldHVybiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX1BBVEhfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKmFjbAorCQkJPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLCBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9wYXRoX2FjbChoZWFkLCBhY2wpOwogCX0KLQlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKSB7Ci0JCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsCi0JCQk9IGNvbnRhaW5lcl9vZihwdHIsCi0JCQkJICAgICAgIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkgICAgICAgaGVhZCk7Ci0JCXJldHVybiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX1BBVEgyX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqYWNsCisJCQk9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLCBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9wYXRoMl9hY2woaGVhZCwgYWNsKTsKIAl9CiAJQlVHKCk7IC8qIFRoaXMgbXVzdCBub3QgaGFwcGVuLiAqLwogCXJldHVybiBmYWxzZTsKQEAgLTE1MzMsNiArMTQ2Niw4IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgMC4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CkBAIC0xNTQ0LDcgKzE0NzksNiBAQAogCQlyZXR1cm4gMDsKIAlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDApCiAJCWhlYWQtPnJlYWRfc3RlcCA9IDE7Ci0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUoZHBvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7CiAJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKIAkJY29uc3QgY2hhciAqcXVvdGFfZXhjZWVkZWQgPSAiIjsKQEAgLTE1NTgsMTAgKzE0OTIsOSBAQAogCQkvKiBQcmludCBkb21haW5uYW1lIGFuZCBmbGFncy4gKi8KIAkJaWYgKGRvbWFpbi0+cXVvdGFfd2FybmVkKQogCQkJcXVvdGFfZXhjZWVkZWQgPSAicXVvdGFfZXhjZWVkZWRcbiI7Ci0JCWlmIChkb21haW4tPmZsYWdzICYgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCkKKwkJaWYgKGRvbWFpbi0+dHJhbnNpdGlvbl9mYWlsZWQpCiAJCQl0cmFuc2l0aW9uX2ZhaWxlZCA9ICJ0cmFuc2l0aW9uX2ZhaWxlZFxuIjsKLQkJaWYgKGRvbWFpbi0+ZmxhZ3MgJgotCQkgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpCisJCWlmIChkb21haW4tPmlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCkKIAkJCWlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZAogCQkJCT0gVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICJcbiI7CiAJCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1xuIiBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRQpAQCAtMTU3Nyw3ICsxNTEwLDYgQEAKIAkJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAzKQogCQkJZ290byB0YWlsX21hcms7CiAJCS8qIFByaW50IEFDTCBlbnRyaWVzIGluIHRoZSBkb21haW4uICovCi0JCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShhcG9zLCBoZWFkLT5yZWFkX3ZhcjIsCiAJCQkJICAgICAmZG9tYWluLT5hY2xfaW5mb19saXN0KSB7CiAJCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIKQEAgLTE1ODcsNyArMTUxOSw2IEBACiAJCQlpZiAoIWRvbmUpCiAJCQkJYnJlYWs7CiAJCX0KLQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAkJaGVhZC0+cmVhZF9zdGVwID0gMzsKQEAgLTE1OTksNyArMTUzMCw2IEBACiAJCWlmIChoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MTUsNiArMTU0NSw4IEBACiAgKgogICogICAgICggZWNobyAic2VsZWN0ICIgJGRvbWFpbm5hbWU7IGVjaG8gInVzZV9wcm9maWxlICIgJHByb2ZpbGUgKSB8CiAgKiAgICAgL3Vzci9saWIvY2NzL2xvYWRwb2xpY3kgLWQKKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKQEAgLTE2MjYsOSArMTU1OCw3IEBACiAJaWYgKCFjcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmNwID0gJ1wwJzsKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oY3AgKyAxKTsKLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmcHJvZmlsZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChkb21haW4gJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKQEAgLTE2NTAsNiArMTU4MCw4IEBACiAgKiAgICAgYXdrICcgeyBpZiAoIGRvbWFpbm5hbWUgPT0gIiIgKSB7IGlmICggJDEgPT0gIjxrZXJuZWw+IiApCiAgKiAgICAgZG9tYWlubmFtZSA9ICQwOyB9IGVsc2UgaWYgKCAkMSA9PSAidXNlX3Byb2ZpbGUiICkgewogICogICAgIHByaW50ICQyICIgIiBkb21haW5uYW1lOyBkb21haW5uYW1lID0gIiI7IH0gfSA7ICcKKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTY1OCw3ICsxNTkwLDYgQEAKIAogCWlmIChoZWFkLT5yZWFkX2VvZikKIAkJcmV0dXJuIDA7Ci0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwogCQlkb21haW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5mbywgbGlzdCk7CkBAIC0xNjY5LDcgKzE2MDAsNiBAQAogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MDcsMTEgKzE2MzcsMTMgQEAKIAkJY29uc3QgaW50IHBpZCA9IGhlYWQtPnJlYWRfc3RlcDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAocCkKIAkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWYgKGRvbWFpbikKIAkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVkICV1ICVzIiwgcGlkLCBkb21haW4tPnByb2ZpbGUsCiAJCQkJCSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOwpAQCAtMTcyNiw2ICsxNjU4LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTc2MCw2ICsxNjk0LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKQEAgLTE4ODksMTUgKzE4MjUsMTMgQEAKIAl0b21veW9fcG9saWN5X2xvYWRlZCA9IHRydWU7CiAJeyAvKiBDaGVjayBhbGwgcHJvZmlsZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGRvbWFpbnMgYXJlIGRlZmluZWQuICovCiAJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKLQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgewogCQkJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKIAkJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0pCiAJCQkJY29udGludWU7CiAJCQlwYW5pYygiUHJvZmlsZSAldSAodXNlZCBieSAnJXMnKSBub3QgZGVmaW5lZC5cbiIsCiAJCQkgICAgICBwcm9maWxlLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOwogCQl9Ci0JCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAl9CiB9CiAKQEAgLTE5NDUsMTAgKzE4NzksMTIgQEAKICAqIEBmaWxlOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCiAgKgogICogQXNzb2NpYXRlcyBwb2xpY3kgaGFuZGxlciBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBhY3F1aXJlcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX29wZW5fY29udHJvbChjb25zdCB1OCB0eXBlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IHRvbW95b19hbGxvYyhzaXplb2YoKmhlYWQpKTsKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGt6YWxsb2Moc2l6ZW9mKCpoZWFkKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWhlYWQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjAwOSw5ICsxOTQ1LDkgQEAKIAl9IGVsc2UgewogCQlpZiAoIWhlYWQtPnJlYWRidWZfc2l6ZSkKIAkJCWhlYWQtPnJlYWRidWZfc2l6ZSA9IDQwOTYgKiAyOwotCQloZWFkLT5yZWFkX2J1ZiA9IHRvbW95b19hbGxvYyhoZWFkLT5yZWFkYnVmX3NpemUpOworCQloZWFkLT5yZWFkX2J1ZiA9IGt6YWxsb2MoaGVhZC0+cmVhZGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFoZWFkLT5yZWFkX2J1ZikgewotCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlrZnJlZShoZWFkKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQpAQCAtMjAyMywxMyArMTk1OSwxNCBAQAogCQloZWFkLT53cml0ZSA9IE5VTEw7CiAJfSBlbHNlIGlmIChoZWFkLT53cml0ZSkgewogCQloZWFkLT53cml0ZWJ1Zl9zaXplID0gNDA5NiAqIDI7Ci0JCWhlYWQtPndyaXRlX2J1ZiA9IHRvbW95b19hbGxvYyhoZWFkLT53cml0ZWJ1Zl9zaXplKTsKKwkJaGVhZC0+d3JpdGVfYnVmID0ga3phbGxvYyhoZWFkLT53cml0ZWJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFoZWFkLT53cml0ZV9idWYpIHsKLQkJCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKLQkJCXRvbW95b19mcmVlKGhlYWQpOworCQkJa2ZyZWUoaGVhZC0+cmVhZF9idWYpOworCQkJa2ZyZWUoaGVhZCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0KKwloZWFkLT5yZWFkZXJfaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGhlYWQ7CiAJLyoKIAkgKiBDYWxsIHRoZSBoYW5kbGVyIG5vdyBpZiB0aGUgZmlsZSBpcwpAQCAtMjA1MSw2ICsxOTg4LDggQEAKICAqIEBidWZmZXJfbGVuOiBTaXplIG9mIEBidWZmZXIuCiAgKgogICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pCkBAIC0yMDk0LDYgKzIwMzMsOCBAQAogICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KICAqCiAgKiBSZXR1cm5zIEBidWZmZXJfbGVuIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b193cml0ZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJCWNvbnN0IGludCBidWZmZXJfbGVuKQpAQCAtMjE0NCw1MiArMjA4NSwyOSBAQAogICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KICAqCiAgKiBSZWxlYXNlcyBtZW1vcnkgYW5kIHJldHVybnMgMC4KKyAqCisgKiBDYWxsZXIgbG9vc2VzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljb25zdCBib29sIGlzX3dyaXRlID0gISFoZWFkLT53cml0ZV9idWY7CiAKKwl0b21veW9fcmVhZF91bmxvY2soaGVhZC0+cmVhZGVyX2lkeCk7CiAJLyogUmVsZWFzZSBtZW1vcnkgdXNlZCBmb3IgcG9saWN5IEkvTy4gKi8KLQl0b21veW9fZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJa2ZyZWUoaGVhZC0+cmVhZF9idWYpOwogCWhlYWQtPnJlYWRfYnVmID0gTlVMTDsKLQl0b21veW9fZnJlZShoZWFkLT53cml0ZV9idWYpOworCWtmcmVlKGhlYWQtPndyaXRlX2J1Zik7CiAJaGVhZC0+d3JpdGVfYnVmID0gTlVMTDsKLQl0b21veW9fZnJlZShoZWFkKTsKKwlrZnJlZShoZWFkKTsKIAloZWFkID0gTlVMTDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWlmIChpc193cml0ZSkKKwkJdG9tb3lvX3J1bl9nYygpOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHRvbW95b19hbGxvY19hY2xfZWxlbWVudCAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIEFDTCBlbnRyeS4KLSAqCi0gKiBAYWNsX3R5cGU6ICBUeXBlIG9mIEFDTCBlbnRyeS4KLSAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIEFDTCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KLSAqLwotdm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKQotewotCWludCBsZW47Ci0Jc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwotCi0Jc3dpdGNoIChhY2xfdHlwZSkgewotCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgotCQlsZW4gPSBzaXplb2Yoc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkKTsKLQkJYnJlYWs7Ci0JY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQobGVuKTsKLQlpZiAoIXB0cikKLQkJcmV0dXJuIE5VTEw7Ci0JcHRyLT50eXBlID0gYWNsX3R5cGU7Ci0JcmV0dXJuIHB0cjsKLX0KLQotLyoqCiAgKiB0b21veW9fb3BlbiAtIG9wZW4oKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCiAgKgogICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCmluZGV4IDkyMTY5ZDIuLjY3YmQyMmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uaAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTEsMTIgKzEsOSBAQAogLyoKICAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uaAogICoKLSAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqIEhlYWRlciBmaWxlIGZvciBUT01PWU8uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCiAgKi8KIAogI2lmbmRlZiBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICkBAIC0yMiw5ICsxOSwxMTkgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KK3N0cnVjdCBsaW51eF9iaW5wcm07CiAKLXN0cnVjdCBkZW50cnk7Ci1zdHJ1Y3QgdmZzbW91bnQ7CisvKioqKioqKioqKiBDb25zdGFudHMgZGVmaW5pdGlvbnMuICoqKioqKioqKiovCisKKy8qCisgKiBUT01PWU8gdXNlcyB0aGlzIGhhc2ggb25seSB3aGVuIGFwcGVuZGluZyBhIHN0cmluZyBpbnRvIHRoZSBzdHJpbmcKKyAqIHRhYmxlLiBGcmVxdWVuY3kgb2YgYXBwZW5kaW5nIHN0cmluZ3MgaXMgdmVyeSBsb3cuIFNvIHdlIGRvbid0IG5lZWQKKyAqIGxhcmdlIChlLmcuIDY0aykgaGFzaCBzaXplLiAyNTYgd2lsbCBiZSBzdWZmaWNpZW50LgorICovCisjZGVmaW5lIFRPTU9ZT19IQVNIX0JJVFMgIDgKKyNkZWZpbmUgVE9NT1lPX01BWF9IQVNIICgxdTw8VE9NT1lPX0hBU0hfQklUUykKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heCBsZW5ndGggb2YgYSB0b2tlbi4KKyAqCisgKiBBIHRva2VuIGNvbnNpc3RzIG9mIG9ubHkgQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgKiBOb24gcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiBpcyByZXByZXNlbnRlZCBpbiBcb29vIHN0eWxlCisgKiBvY3RhbCBzdHJpbmcuIFRodXMsIFwgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGFzIFxcLgorICovCisjZGVmaW5lIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIDQwMDAKKworLyogUHJvZmlsZSBudW1iZXIgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NS4gKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QUk9GSUxFUyAyNTYKKworLyogS2V5d29yZHMgZm9yIEFDTHMuICovCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMSUFTICAgICAgICAgICAgICAgICAgICAgImFsaWFzICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAgICAgICAgICAgICAgICAiYWxsb3dfcmVhZCAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTEVURSAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSAgICAgICAgICAgICAgImRlbnlfcmV3cml0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAgICAgICAgICAgICAgImZpbGVfcGF0dGVybiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgICAgImluaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4gICAgICAgICAgICAgICAia2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9OT19JTklUSUFMSVpFX0RPTUFJTiAgICAgICJub19pbml0aWFsaXplX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOICAgICAgICAgICAgIm5vX2tlZXBfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAic2VsZWN0ICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgICAgICAgICAgICAgICAidXNlX3Byb2ZpbGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgICJpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQiCisvKiBBIGRvbWFpbiBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIDxrZXJuZWw+LiAqLworI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICI8a2VybmVsPiIKKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRV9MRU4gICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKFRPTU9ZT19ST09UX05BTUUpIC0gMSkKKworLyogSW5kZXggbnVtYmVycyBmb3IgQWNjZXNzIENvbnRyb2xzLiAqLworZW51bSB0b21veW9fbWFjX2luZGV4IHsKKwlUT01PWU9fTUFDX0ZPUl9GSUxFLCAgLyogZG9tYWluX3BvbGljeS5jb25mICovCisJVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlksCisJVE9NT1lPX1ZFUkJPU0UsCisJVE9NT1lPX01BWF9DT05UUk9MX0lOREVYCit9OworCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCitlbnVtIHRvbW95b19hY2xfZW50cnlfdHlwZV9pbmRleCB7CisJVE9NT1lPX1RZUEVfUEFUSF9BQ0wsCisJVE9NT1lPX1RZUEVfUEFUSDJfQUNMLAorfTsKKworLyogSW5kZXggbnVtYmVycyBmb3IgRmlsZSBDb250cm9scy4gKi8KKworLyoKKyAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc3BlY2lhbC4gVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IHNldAorICogaWYgYm90aCBUWVBFX1JFQURfQUNMIGFuZCBUWVBFX1dSSVRFX0FDTCBhcmUgc2V0LiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kCisgKiBUWVBFX1dSSVRFX0FDTCBhcmUgYXV0b21hdGljYWxseSBzZXQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzZXQuCisgKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBlaXRoZXIgVFlQRV9SRUFEX0FDTCBvcgorICogVFlQRV9XUklURV9BQ0wgaXMgY2xlYXJlZC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZCBUWVBFX1dSSVRFX0FDTCBhcmUKKyAqIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGNsZWFyZWQuCisgKi8KKworZW51bSB0b21veW9fcGF0aF9hY2xfaW5kZXggeworCVRPTU9ZT19UWVBFX1JFQURfV1JJVEUsCisJVE9NT1lPX1RZUEVfRVhFQ1VURSwKKwlUT01PWU9fVFlQRV9SRUFELAorCVRPTU9ZT19UWVBFX1dSSVRFLAorCVRPTU9ZT19UWVBFX0NSRUFURSwKKwlUT01PWU9fVFlQRV9VTkxJTkssCisJVE9NT1lPX1RZUEVfTUtESVIsCisJVE9NT1lPX1RZUEVfUk1ESVIsCisJVE9NT1lPX1RZUEVfTUtGSUZPLAorCVRPTU9ZT19UWVBFX01LU09DSywKKwlUT01PWU9fVFlQRV9NS0JMT0NLLAorCVRPTU9ZT19UWVBFX01LQ0hBUiwKKwlUT01PWU9fVFlQRV9UUlVOQ0FURSwKKwlUT01PWU9fVFlQRV9TWU1MSU5LLAorCVRPTU9ZT19UWVBFX1JFV1JJVEUsCisJVE9NT1lPX1RZUEVfSU9DVEwsCisJVE9NT1lPX1RZUEVfQ0hNT0QsCisJVE9NT1lPX1RZUEVfQ0hPV04sCisJVE9NT1lPX1RZUEVfQ0hHUlAsCisJVE9NT1lPX1RZUEVfQ0hST09ULAorCVRPTU9ZT19UWVBFX01PVU5ULAorCVRPTU9ZT19UWVBFX1VNT1VOVCwKKwlUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OCit9OworCitlbnVtIHRvbW95b19wYXRoMl9hY2xfaW5kZXggeworCVRPTU9ZT19UWVBFX0xJTkssCisJVE9NT1lPX1RZUEVfUkVOQU1FLAorCVRPTU9ZT19UWVBFX1BJVk9UX1JPT1QsCisJVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT04KK307CisKK2VudW0gdG9tb3lvX3NlY3VyaXR5ZnNfaW50ZXJmYWNlX2luZGV4IHsKKwlUT01PWU9fRE9NQUlOUE9MSUNZLAorCVRPTU9ZT19FWENFUFRJT05QT0xJQ1ksCisJVE9NT1lPX0RPTUFJTl9TVEFUVVMsCisJVE9NT1lPX1BST0NFU1NfU1RBVFVTLAorCVRPTU9ZT19NRU1JTkZPLAorCVRPTU9ZT19TRUxGRE9NQUlOLAorCVRPTU9ZT19WRVJTSU9OLAorCVRPTU9ZT19QUk9GSUxFLAorCVRPTU9ZT19NQU5BR0VSCit9OworCisvKioqKioqKioqKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuICoqKioqKioqKiovCiAKIC8qCiAgKiB0b21veW9fcGFnZV9idWZmZXIgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhIHBhdGhuYW1lCkBAIC02NiwxMyArMTczLDE0IEBACiB9OwogCiAvKgotICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgotICoKLSAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KLSAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKLSAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKiB0b21veW9fbmFtZV9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBsaW5raW5nCisgKiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIGludG8gdG9tb3lvX25hbWVfbGlzdCAuCiAgKi8KLSNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorc3RydWN0IHRvbW95b19uYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJYXRvbWljX3QgdXNlcnM7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gZW50cnk7Cit9OwogCiAvKgogICogdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhCkBAIC04OSw3ICsxOTcsNyBAQAogICogInN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSIuCiAgKi8KIHN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSB7Ci0JLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRvbW95b19mcmVlKCkuICovCisJLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIGtmcmVlKCkuICovCiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gaGVhZDsKIAljaGFyIGJhcnJpZXIxWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLwogCWNoYXIgYm9keVtUT01PWU9fTUFYX1BBVEhOQU1FX0xFTl07CkBAIC0xMDEsMzAgKzIwOSwxOSBAQAogICoKICAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0aGUgLT5hY2xfaW5mb19saXN0IG9mCiAgKiAgICAgICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIgotICogICgyKSAidHlwZSIgd2hpY2ggdGVsbHMKLSAqICAgICAgKGEpIHR5cGUgJiAweDdGIDogdHlwZSBvZiB0aGUgZW50cnkgKGVpdGhlcgotICogICAgICAgICAgInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIgb3IKLSAqICAgICAgICAgICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiKQotICogICAgICAoYikgdHlwZSAmIDB4ODAgOiB3aGV0aGVyIHRoZSBlbnRyeSBpcyBtYXJrZWQgYXMgImRlbGV0ZWQiLgorICogICgyKSAidHlwZSIgd2hpY2ggdGVsbHMgdHlwZSBvZiB0aGUgZW50cnkgKGVpdGhlcgorICogICAgICAic3RydWN0IHRvbW95b19wYXRoX2FjbCIgb3IgInN0cnVjdCB0b21veW9fcGF0aDJfYWNsIikuCiAgKgogICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCi0gKiAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTE2IiBhbmQKLSAqICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1OCIKKyAqICJzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIiB0byBlbWJlZCAidTgiICsgInUxNiIgYW5kCisgKiAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiIHRvIGVtYmVkICJ1OCIKICAqIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgogICovCiBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JLyoKLQkgKiBUeXBlIG9mIHRoaXMgQUNMIGVudHJ5LgotCSAqCi0JICogTVNCIGlzIGlzX2RlbGV0ZWQgZmxhZy4KLQkgKi8KIAl1OCB0eXBlOwogfSBfX3BhY2tlZDsKIAotLyogVGhpcyBBQ0wgZW50cnkgaXMgZGVsZXRlZC4gICAgICAgICAgICovCi0jZGVmaW5lIFRPTU9ZT19BQ0xfREVMRVRFRCAgICAgICAgMHg4MAotCiAvKgogICogdG9tb3lvX2RvbWFpbl9pbmZvIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgcGVybWlzc2lvbnMKICAqIChlLmcuICJhbGxvd19yZWFkIC9saWIvbGliYy0yLjUuc28iKSBnaXZlbiB0byBlYWNoIGRvbWFpbi4KQEAgLTEzOCw3ICsyMzUsMTcgQEAKICAqICAgICAgImRlbGV0ZWQiLCBmYWxzZSBvdGhlcndpc2UuCiAgKiAgKDYpICJxdW90YV93YXJuZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB1c2VkIGZvciBzdXBwcmVzc2luZyB3YXJuaW5nIG1lc3NhZ2UKICAqICAgICAgd2hlbiBsZWFybmluZyBtb2RlIGxlYXJuZWQgdG9vIG11Y2ggZW50cmllcy4KLSAqICAoNykgImZsYWdzIiB3aGljaCByZW1lbWJlcnMgdGhpcyBkb21haW4ncyBhdHRyaWJ1dGVzLgorICogICg3KSAiaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiB0aGlzIGRvbWFpbgorICogICAgICBzaG91bGQgaWdub3JlICJhbGxvd19yZWFkIiBkaXJlY3RpdmUgaW4gZXhjZXB0aW9uIHBvbGljeS4KKyAqICAoOCkgInRyYW5zaXRpb25fZmFpbGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgc2V0IHRvIHRydWUgd2hlbiB0aGlzIGRvbWFpbiB3YXMKKyAqICAgICAgdW5hYmxlIHRvIGNyZWF0ZSBhIG5ldyBkb21haW4gYXQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oKSBiZWNhdXNlIHRoZQorICogICAgICBuYW1lIG9mIHRoZSBkb21haW4gdG8gYmUgY3JlYXRlZCB3YXMgdG9vIGxvbmcgb3IgaXQgY291bGQgbm90IGFsbG9jYXRlCisgKiAgICAgIG1lbW9yeS4gSWYgc2V0IHRvIHRydWUsIG1vcmUgdGhhbiBvbmUgcHJvY2VzcyBjb250aW51ZWQgZXhlY3ZlKCkKKyAqICAgICAgd2l0aG91dCBkb21haW4gdHJhbnNpdGlvbi4KKyAqICAoOSkgInVzZXJzIiBpcyBhbiBhdG9taWNfdCB0aGF0IGhvbGRzIGhvdyBtYW55ICJzdHJ1Y3QgY3JlZCItPnNlY3VyaXR5CisgKiAgICAgIGFyZSByZWZlcnJpbmcgdGhpcyAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuIElmIGlzX2RlbGV0ZWQgPT0gdHJ1ZQorICogICAgICBhbmQgdXNlcnMgPT0gMCwgdGhpcyBzdHJ1Y3Qgd2lsbCBiZSBrZnJlZSgpZCB1cG9uIG5leHQgZ2FyYmFnZQorICogICAgICBjb2xsZWN0aW9uLgogICoKICAqIEEgZG9tYWluJ3MgbGlmZWN5Y2xlIGlzIGFuIGFuYWxvZ3kgb2YgZmlsZXMgb24gLyBkaXJlY3RvcnkuCiAgKiBNdWx0aXBsZSBkb21haW5zIHdpdGggdGhlIHNhbWUgZG9tYWlubmFtZSBjYW5ub3QgYmUgY3JlYXRlZCAoYXMgd2l0aApAQCAtMTU1LDI1ICsyNjIsMTMgQEAKIAl1OCBwcm9maWxlOyAgICAgICAgLyogUHJvZmlsZSBudW1iZXIgdG8gdXNlLiAqLwogCWJvb2wgaXNfZGVsZXRlZDsgICAvKiBEZWxldGUgZmxhZy4gICAgICAgICAgICovCiAJYm9vbCBxdW90YV93YXJuZWQ7IC8qIFF1b3RhIHdhcm5uaW5nIGZsYWcuICAgKi8KLQkvKiBET01BSU5fRkxBR1NfKi4gVXNlIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoKSB0byBtb2RpZnkuICovCi0JdTggZmxhZ3M7CisJYm9vbCBpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQ7IC8qIElnbm9yZSAiYWxsb3dfcmVhZCIgZmxhZy4gKi8KKwlib29sIHRyYW5zaXRpb25fZmFpbGVkOyAvKiBEb21haW4gdHJhbnNpdGlvbiBmYWlsZWQgZmxhZy4gKi8KKwlhdG9taWNfdCB1c2VyczsgLyogTnVtYmVyIG9mIHJlZmVycmluZyBjcmVkZW50aWFscy4gKi8KIH07CiAKLS8qIFByb2ZpbGUgbnVtYmVyIGlzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUuICovCi0jZGVmaW5lIFRPTU9ZT19NQVhfUFJPRklMRVMgMjU2Ci0KLS8qIElnbm9yZSAiYWxsb3dfcmVhZCIgZGlyZWN0aXZlIGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCi0jZGVmaW5lIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEIDEKIC8qCi0gKiBUaGlzIGRvbWFpbiB3YXMgdW5hYmxlIHRvIGNyZWF0ZSBhIG5ldyBkb21haW4gYXQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oKQotICogYmVjYXVzZSB0aGUgbmFtZSBvZiB0aGUgZG9tYWluIHRvIGJlIGNyZWF0ZWQgd2FzIHRvbyBsb25nIG9yCi0gKiBpdCBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LgotICogTW9yZSB0aGFuIG9uZSBwcm9jZXNzIGNvbnRpbnVlZCBleGVjdmUoKSB3aXRob3V0IGRvbWFpbiB0cmFuc2l0aW9uLgotICovCi0jZGVmaW5lIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQgICAgICAgIDIKLQotLyoKLSAqIHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KKyAqIHRvbW95b19wYXRoX2FjbCBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGFuCiAgKiBlbnRyeSB3aXRoIG9uZSBwYXRobmFtZSBvcGVyYXRpb24gKGUuZy4gb3BlbigpLCBta2RpcigpKS4KICAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgogICoKQEAgLTE4NCwxOCArMjc5LDIxIEBACiAgKiBEaXJlY3RpdmVzIGhlbGQgYnkgdGhpcyBzdHJ1Y3R1cmUgYXJlICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLAogICogImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsCiAgKiAiYWxsb3dfcm1kaXIiLCAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwKLSAqICJhbGxvd19ta2NoYXIiLCAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIgYW5kICJhbGxvd19yZXdyaXRlIi4KKyAqICJhbGxvd19ta2NoYXIiLCAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIsICJhbGxvd19yZXdyaXRlIiwKKyAqICJhbGxvd19jaG1vZCIsICJhbGxvd19jaG93biIsICJhbGxvd19jaGdycCIsICJhbGxvd19jaHJvb3QiLCAiYWxsb3dfbW91bnQiCisgKiBhbmQgImFsbG93X3VubW91bnQiLgogICovCi1zdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgewotCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCAqLworc3RydWN0IHRvbW95b19wYXRoX2FjbCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfUEFUSF9BQ0wgKi8KKwl1OCBwZXJtX2hpZ2g7CiAJdTE2IHBlcm07CiAJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOwogfTsKIAogLyoKLSAqIHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KLSAqIGVudHJ5IHdpdGggdHdvIHBhdGhuYW1lcyBvcGVyYXRpb24gKGkuZS4gbGluaygpIGFuZCByZW5hbWUoKSkuCisgKiB0b21veW9fcGF0aDJfYWNsIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KKyAqIGVudHJ5IHdpdGggdHdvIHBhdGhuYW1lcyBvcGVyYXRpb24gKGkuZS4gbGluaygpLCByZW5hbWUoKSBhbmQgcGl2b3Rfcm9vdCgpKS4KICAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgogICoKICAqICAoMSkgImhlYWQiIHdoaWNoIGlzIGEgInN0cnVjdCB0b21veW9fYWNsX2luZm8iLgpAQCAtMjAzLDEwICszMDEsMTEgQEAKICAqICAoMykgImZpbGVuYW1lMSIgaXMgdGhlIHNvdXJjZS9vbGQgcGF0aG5hbWUuCiAgKiAgKDQpICJmaWxlbmFtZTIiIGlzIHRoZSBkZXN0aW5hdGlvbi9uZXcgcGF0aG5hbWUuCiAgKgotICogRGlyZWN0aXZlcyBoZWxkIGJ5IHRoaXMgc3RydWN0dXJlIGFyZSAiYWxsb3dfcmVuYW1lIiBhbmQgImFsbG93X2xpbmsiLgorICogRGlyZWN0aXZlcyBoZWxkIGJ5IHRoaXMgc3RydWN0dXJlIGFyZSAiYWxsb3dfcmVuYW1lIiwgImFsbG93X2xpbmsiIGFuZAorICogImFsbG93X3Bpdm90X3Jvb3QiLgogICovCi1zdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgewotCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAqLworc3RydWN0IHRvbW95b19wYXRoMl9hY2wgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX1BBVEgyX0FDTCAqLwogCXU4IHBlcm07CiAJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMTsKQEAgLTIxNCwyOSArMzEzLDYgQEAKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUyOwogfTsKIAotLyogS2V5d29yZHMgZm9yIEFDTHMuICovCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMSUFTICAgICAgICAgICAgICAgICAgICAgImFsaWFzICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAgICAgICAgICAgICAgICAiYWxsb3dfcmVhZCAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTEVURSAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSAgICAgICAgICAgICAgImRlbnlfcmV3cml0ZSAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAgICAgICAgICAgICAgImZpbGVfcGF0dGVybiAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgICAgImluaXRpYWxpemVfZG9tYWluICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4gICAgICAgICAgICAgICAia2VlcF9kb21haW4gIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9OT19JTklUSUFMSVpFX0RPTUFJTiAgICAgICJub19pbml0aWFsaXplX2RvbWFpbiAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOICAgICAgICAgICAgIm5vX2tlZXBfZG9tYWluICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAic2VsZWN0ICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgICAgICAgICAgICAgICAidXNlX3Byb2ZpbGUgIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgICJpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQiCi0vKiBBIGRvbWFpbiBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIDxrZXJuZWw+LiAqLwotI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICI8a2VybmVsPiIKLSNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRV9MRU4gICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKFRPTU9ZT19ST09UX05BTUUpIC0gMSkKLQotLyogSW5kZXggbnVtYmVycyBmb3IgQWNjZXNzIENvbnRyb2xzLiAqLwotI2RlZmluZSBUT01PWU9fTUFDX0ZPUl9GSUxFICAgICAgICAgICAgICAgICAgMCAgLyogZG9tYWluX3BvbGljeS5jb25mICovCi0jZGVmaW5lIFRPTU9ZT19NQVhfQUNDRVBUX0VOVFJZICAgICAgICAgICAgICAxCi0jZGVmaW5lIFRPTU9ZT19WRVJCT1NFICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCAgICAgICAgICAgICAzCi0KIC8qCiAgKiB0b21veW9faW9fYnVmZmVyIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIHJlYWRpbmcgYW5kIG1vZGlmeWluZwogICogY29uZmlndXJhdGlvbiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCkBAIC0yNjUsNiArMzQxLDggQEAKIAlpbnQgKCp3cml0ZSkgKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICopOwogCS8qIEV4Y2x1c2l2ZSBsb2NrIGZvciB0aGlzIHN0cnVjdHVyZS4gICAqLwogCXN0cnVjdCBtdXRleCBpb19zZW07CisJLyogSW5kZXggcmV0dXJuZWQgYnkgdG9tb3lvX3JlYWRfbG9jaygpLiAqLworCWludCByZWFkZXJfaWR4OwogCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgcmVhZGluZyBmcm9tLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMTsKIAkvKiBFeHRyYSB2YXJpYWJsZXMgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KQEAgLTI5MywxOCArMzcxLDE1OSBAQAogCWludCB3cml0ZWJ1Zl9zaXplOwogfTsKIAorLyoKKyAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqICJhbGxvd19yZWFkIiBlbnRyaWVzLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0IC4KKyAqICAoMikgImZpbGVuYW1lIiBpcyBhIHBhdGhuYW1lIHdoaWNoIGlzIGFsbG93ZWQgdG8gb3BlbihPX1JET05MWSkuCisgKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoKKyAqIHRvbW95b19wYXR0ZXJuX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqICJ0b21veW9fcGF0dGVybl9saXN0IiBlbnRyaWVzLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19wYXR0ZXJuX2xpc3QgLgorICogICgyKSAicGF0dGVybiIgaXMgYSBwYXRobmFtZSBwYXR0ZXJuIHdoaWNoIGlzIHVzZWQgZm9yIGNvbnZlcnRpbmcgcGF0aG5hbWVzCisgKiAgICAgIHRvIHBhdGhuYW1lIHBhdHRlcm5zIGR1cmluZyBsZWFybmluZyBtb2RlLgorICogICgzKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoKKyAqIHRvbW95b19ub19yZXdyaXRlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqICJkZW55X3Jld3JpdGUiIGVudHJpZXMuCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX25vX3Jld3JpdGVfbGlzdCAuCisgKiAgKDIpICJwYXR0ZXJuIiBpcyBhIHBhdGhuYW1lIHdoaWNoIGlzIGJ5IGRlZmF1bHQgbm90IHBlcm1pdHRlZCB0byBtb2RpZnkKKyAqICAgICAgYWxyZWFkeSBleGlzdGluZyBjb250ZW50LgorICogICgzKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoKKyAqIHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyaWVzLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCAuCisgKiAgKDIpICJkb21haW5uYW1lIiB3aGljaCBpcyAiYSBkb21haW5uYW1lIiBvciAidGhlIGxhc3QgY29tcG9uZW50IG9mIGEKKyAqICAgICAgZG9tYWlubmFtZSIuIFRoaXMgZmllbGQgaXMgTlVMTCBpZiAiZnJvbSIgY2xhdXNlIGlzIG5vdCBzcGVjaWZpZWQuCisgKiAgKDMpICJwcm9ncmFtIiB3aGljaCBpcyBhIHByb2dyYW0ncyBwYXRobmFtZS4KKyAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCisgKiAgKDUpICJpc19ub3QiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJub19pbml0aWFsaXplX2RvbWFpbiIsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqICAoNikgImlzX2xhc3RfbmFtZSIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgImRvbWFpbm5hbWUiIGlzICJ0aGUgbGFzdAorICogICAgICBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lIiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07CisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyoKKyAqIHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cmllcy4KKyAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgorICoKKyAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fZG9tYWluX2tlZXBlcl9saXN0IC4KKyAqICAoMikgImRvbWFpbm5hbWUiIHdoaWNoIGlzICJhIGRvbWFpbm5hbWUiIG9yICJ0aGUgbGFzdCBjb21wb25lbnQgb2YgYQorICogICAgICBkb21haW5uYW1lIi4KKyAqICAoMykgInByb2dyYW0iIHdoaWNoIGlzIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgorICogICAgICBUaGlzIGZpZWxkIGlzIE5VTEwgaWYgImZyb20iIGNsYXVzZSBpcyBub3Qgc3BlY2lmaWVkLgorICogICg0KSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqICAoNSkgImlzX25vdCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgIm5vX2luaXRpYWxpemVfZG9tYWluIiwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICogICg2KSAiaXNfbGFzdF9uYW1lIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAiZG9tYWlubmFtZSIgaXMgInRoZSBsYXN0CisgKiAgICAgIGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUiLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOyAgICAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2tlZXBfZG9tYWluIi4gICAgICAgICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyoKKyAqIHRvbW95b19hbGlhc19lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nICJhbGlhcyIgZW50cmllcy4KKyAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgorICoKKyAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fYWxpYXNfbGlzdCAuCisgKiAgKDIpICJvcmlnaW5hbF9uYW1lIiB3aGljaCBpcyBhIGRlcmVmZXJlbmNlZCBwYXRobmFtZS4KKyAqICAoMykgImFsaWFzZWRfbmFtZSIgd2hpY2ggaXMgYSBzeW1saW5rJ3MgcGF0aG5hbWUuCisgKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm9yaWdpbmFsX25hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmFsaWFzZWRfbmFtZTsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKgorICogdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZgorICogZG9tYWlubmFtZXMgb3IgcHJvZ3JhbXMgd2hpY2ggYXJlIHBlcm1pdHRlZCB0byBtb2RpZnkgY29uZmlndXJhdGlvbiB2aWEKKyAqIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0IC4KKyAqICAoMikgIm1hbmFnZXIiIGlzIGEgZG9tYWlubmFtZSBvciBhIHByb2dyYW0ncyBwYXRobmFtZS4KKyAqICAoMykgImlzX2RvbWFpbiIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgIm1hbmFnZXIiIGlzIGEgZG9tYWlubmFtZSwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICogICg0KSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qIEEgcGF0aCB0byBwcm9ncmFtIG9yIGEgZG9tYWlubmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbWFuYWdlcjsKKwlib29sIGlzX2RvbWFpbjsgIC8qIFRydWUgaWYgbWFuYWdlciBpcyBhIGRvbWFpbm5hbWUuICovCisJYm9vbCBpc19kZWxldGVkOyAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgZGVsZXRlZC4gKi8KK307CisKKy8qKioqKioqKioqIEZ1bmN0aW9uIHByb3RvdHlwZXMuICoqKioqKioqKiovCisKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbiBoYXMgdG9vIG1hbnkgQUNMIGVudHJpZXMgdG8gaG9sZC4gKi8KIGJvb2wgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluKTsKIC8qIFRyYW5zYWN0aW9uYWwgc3ByaW50ZigpIGZvciBwb2xpY3kgZHVtcC4gKi8KIGJvb2wgdG9tb3lvX2lvX3ByaW50ZihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW5uYW1lIGlzIGNvcnJlY3QuICovCi1ib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAotCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSk7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBpcyBjb3JyZWN0LiAqLwogYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAotCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUsCi0JCQkgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUpOwogLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4gKi8KIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKTsKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICovCkBAIC0zMjgsMTMgKzU0NywxMyBAQAogLyogV3JpdGUgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBtZXNzYWdlIHRvIGNvbnNvbGU/ICovCiBib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKIC8qIENvbnZlcnQgZG91YmxlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLwotY29uc3QgY2hhciAqdG9tb3lvX2RwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKK2NvbnN0IGNoYXIgKnRvbW95b19wYXRoMjJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7CiAvKiBHZXQgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBkb21haW5uYW1lLiAqLwogY29uc3QgY2hhciAqdG9tb3lvX2dldF9sYXN0X25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKIC8qIEdldCB3YXJuaW5nIG1lc3NhZ2UuICovCiBjb25zdCBjaGFyICp0b21veW9fZ2V0X21zZyhjb25zdCBib29sIGlzX2VuZm9yY2UpOwogLyogQ29udmVydCBzaW5nbGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCi1jb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworY29uc3QgY2hhciAqdG9tb3lvX3BhdGgya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOwogLyogQ3JlYXRlICJhbGlhcyIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KIGludCB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKIC8qCkBAIC0zNzAsMTUgKzU4OSwxMDEgQEAKIC8qIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LiAqLwogdW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCiAJCQkJY29uc3QgdTggaW5kZXgpOwotLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLiAqLwotdm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKTsKIC8qIEZpbGwgaW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBtZW1iZXJzLiAqLwogdm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cik7CiAvKiBSdW4gcG9saWN5IGxvYWRlciB3aGVuIC9zYmluL2luaXQgc3RhcnRzLiAqLwogdm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpOwotLyogQ2hhbmdlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi0+ZmxhZ3MuICovCi12b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncyk7CisKKy8qIENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LiAqLworaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAorCQkJICAgICAgIGludCBuZXduYW1lX2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2Uga3phbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCBrZnJlZSgpCisgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyoKKyAqIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgZmluYWwgc3ltbGluay4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKy8qIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCB0aGUgcGF0aG5hbWUgaXMgYWxyZWFkeSBzb2x2ZWQuICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKKworLyogQ2hlY2sgbWVtb3J5IHF1b3RhLiAqLworYm9vbCB0b21veW9fbWVtb3J5X29rKHZvaWQgKnB0cik7CisKKy8qCisgKiBLZWVwIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBSQU0uCisgKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgorICovCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBDaGVjayBmb3IgbWVtb3J5IHVzYWdlLiAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogU2V0IG1lbW9yeSBxdW90YS4gKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogSW5pdGlhbGl6ZSByZWFscGF0aCByZWxhdGVkIGNvZGUuICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKTsKK2ludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSk7CitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZyk7CitpbnQgdG9tb3lvX3BhdGhfcGVybShjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoKTsKK2ludCB0b21veW9fcGF0aDJfcGVybShjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJICAgICAgc3RydWN0IHBhdGggKnBhdGgyKTsKK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxwKTsKK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKKworLyogUnVuIGdhcmJhZ2UgY29sbGVjdG9yLiAqLwordm9pZCB0b21veW9fcnVuX2djKHZvaWQpOworCit2b2lkIHRvbW95b19tZW1vcnlfZnJlZSh2b2lkICpwdHIpOworCisvKioqKioqKioqKiBFeHRlcm5hbCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gKioqKioqKioqKi8KKworLyogTG9jayBmb3IgR0MuICovCitleHRlcm4gc3RydWN0IHNyY3Vfc3RydWN0IHRvbW95b19zczsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19kb21haW5fbGlzdDsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19hbGlhc19saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fcGF0dGVybl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25vX3Jld3JpdGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25hbWVfbGlzdFtUT01PWU9fTUFYX0hBU0hdOworZXh0ZXJuIHN0cnVjdCBtdXRleCB0b21veW9fbmFtZV9saXN0X2xvY2s7CisKKy8qIExvY2sgZm9yIHByb3RlY3RpbmcgcG9saWN5LiAqLworZXh0ZXJuIHN0cnVjdCBtdXRleCB0b21veW9fcG9saWN5X2xvY2s7CisKKy8qIEhhcyAvc2Jpbi9pbml0IHN0YXJ0ZWQ/ICovCitleHRlcm4gYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogVGhlIGtlcm5lbCdzIGRvbWFpbi4gKi8KK2V4dGVybiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKioqKioqKioqKiBJbmxpbmVkIGZ1bmN0aW9ucy4gKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSBpbnQgdG9tb3lvX3JlYWRfbG9jayh2b2lkKQoreworCXJldHVybiBzcmN1X3JlYWRfbG9jaygmdG9tb3lvX3NzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRvbW95b19yZWFkX3VubG9jayhpbnQgaWR4KQoreworCXNyY3VfcmVhZF91bmxvY2soJnRvbW95b19zcywgaWR4KTsKK30KIAogLyogc3RyY21wKCkgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgc3RydWN0dXJlLiAqLwogc3RhdGljIGlubGluZSBib29sIHRvbW95b19wYXRoY21wKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphLApAQCAtMzg3LDE4ICs2OTIsNiBAQAogCXJldHVybiBhLT5oYXNoICE9IGItPmhhc2ggfHwgc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOwogfQogCi0vKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCi1zdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTEoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQotewotCXJldHVybiBwdHItPnR5cGUgJiB+VE9NT1lPX0FDTF9ERUxFVEVEOwotfQotCi0vKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCi1zdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTIoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQotewotCXJldHVybiBwdHItPnR5cGU7Ci19Ci0KIC8qKgogICogdG9tb3lvX2lzX3ZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgdmFsaWQgY2hhci4KICAqCkBAIC00MjMsMTggKzcxNiwyNSBAQAogCXJldHVybiBjICYmIChjIDw9ICcgJyB8fCBjID49IDEyNyk7CiB9CiAKLS8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuICovCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZG9tYWluX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2xpc3RfbG9jazsKK3N0YXRpYyBpbmxpbmUgdm9pZCB0b21veW9fcHV0X25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm5hbWUpCit7CisJaWYgKG5hbWUpIHsKKwkJc3RydWN0IHRvbW95b19uYW1lX2VudHJ5ICpwdHIgPQorCQkJY29udGFpbmVyX29mKG5hbWUsIHN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSwgZW50cnkpOworCQlhdG9taWNfZGVjKCZwdHItPnVzZXJzKTsKKwl9Cit9CiAKLS8qIExvY2sgZm9yIGRvbWFpbi0+YWNsX2luZm9fbGlzdC4gKi8KLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrOworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZG9tYWluKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKK30KIAotLyogSGFzIC9zYmluL2luaXQgc3RhcnRlZD8gKi8KLWV4dGVybiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOwotCi0vKiBUaGUga2VybmVsJ3MgZG9tYWluLiAqLwotZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19yZWFsX2RvbWFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QKKwkJCQkJCQkgICAgKnRhc2spCit7CisJcmV0dXJuIHRhc2tfY3JlZF94eHgodGFzaywgc2VjdXJpdHkpOworfQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfY29va2llIC0gaXRlcmF0ZSBvdmVyIGEgbGlzdCB3aXRoIGNvb2tpZS4KQEAgLTQ0MiwxNiArNzQyLDE2IEBACiAgKiBAY29va2llOiAgICAgdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGNvb2tpZS4KICAqIEBoZWFkOiAgICAgICB0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgogICoKLSAqIFNhbWUgd2l0aCBsaXN0X2Zvcl9lYWNoKCkgZXhjZXB0IHRoYXQgdGhpcyBwcmltaXRpdmUgdXNlcyBAY29va2llCisgKiBTYW1lIHdpdGggbGlzdF9mb3JfZWFjaF9yY3UoKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKICAqIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGl0ZXJhdGlvbi4KICAqIEBjb29raWUgbXVzdCBiZSBOVUxMIHdoZW4gaXRlcmF0aW9uIHN0YXJ0cywgYW5kIEBjb29raWUgd2lsbCBiZWNvbWUKICAqIE5VTEwgd2hlbiBpdGVyYXRpb24gZmluaXNoZXMuCiAgKi8KLSNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBjb29raWUsIGhlYWQpICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yICgoeyBpZiAoIWNvb2tpZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJICAgICBjb29raWUgPSBoZWFkOyB9KSwgICAgICAgICAgICAgICBcCi0JICAgICBwb3MgPSAoY29va2llKS0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpIHx8ICgoY29va2llKSA9IE5VTEwpOyBcCi0JICAgICAoY29va2llKSA9IHBvcywgcG9zID0gcG9zLT5uZXh0KQorI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGNvb2tpZSwgaGVhZCkJCQkJXAorCWZvciAoKHsgaWYgKCFjb29raWUpCQkJCQkJXAorCQkJCSAgICAgY29va2llID0gaGVhZDsgfSksCQkJXAorCQkgICAgIHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoY29va2llKS0+bmV4dCk7CQlcCisJICAgICBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpIHx8ICgoY29va2llKSA9IE5VTEwpOwlcCisJICAgICAoY29va2llKSA9IHBvcywgcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCiAKICNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCmluZGV4IGZjZjUyYWMuLjY2Y2FhYTEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYworKysgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKQEAgLTEwLDggKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAidG9tb3lvLmgiCi0jaW5jbHVkZSAicmVhbHBhdGguaCIKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAKIC8qIFZhcmlhYmxlcyBkZWZpbml0aW9ucy4qLwpAQCAtNTgsOTkgKzU2LDYgQEAKICAqIGV4Y2VwdGlvbnMuCiAgKi8KIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2xpc3QpOwotREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Ci0KLS8qCi0gKiB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cmllcy4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QgLgotICogICgyKSAiZG9tYWlubmFtZSIgd2hpY2ggaXMgImEgZG9tYWlubmFtZSIgb3IgInRoZSBsYXN0IGNvbXBvbmVudCBvZiBhCi0gKiAgICAgIGRvbWFpbm5hbWUiLiBUaGlzIGZpZWxkIGlzIE5VTEwgaWYgImZyb20iIGNsYXVzZSBpcyBub3Qgc3BlY2lmaWVkLgotICogICgzKSAicHJvZ3JhbSIgd2hpY2ggaXMgYSBwcm9ncmFtJ3MgcGF0aG5hbWUuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICogICg1KSAiaXNfbm90IiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibm9faW5pdGlhbGl6ZV9kb21haW4iLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDYpICJpc19sYXN0X25hbWUiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJkb21haW5uYW1lIiBpcyAidGhlIGxhc3QKLSAqICAgICAgY29tcG9uZW50IG9mIGEgZG9tYWlubmFtZSIsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOwotCWJvb2wgaXNfZGVsZXRlZDsKLQlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIuICAqLwotCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KLQlib29sIGlzX2xhc3RfbmFtZTsKLX07Ci0KLS8qCi0gKiB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nCi0gKiAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGVudHJpZXMuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCAuCi0gKiAgKDIpICJkb21haW5uYW1lIiB3aGljaCBpcyAiYSBkb21haW5uYW1lIiBvciAidGhlIGxhc3QgY29tcG9uZW50IG9mIGEKLSAqICAgICAgZG9tYWlubmFtZSIuCi0gKiAgKDMpICJwcm9ncmFtIiB3aGljaCBpcyBhIHByb2dyYW0ncyBwYXRobmFtZS4KLSAqICAgICAgVGhpcyBmaWVsZCBpcyBOVUxMIGlmICJmcm9tIiBjbGF1c2UgaXMgbm90IHNwZWNpZmllZC4KLSAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDUpICJpc19ub3QiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJub19pbml0aWFsaXplX2RvbWFpbiIsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqICAoNikgImlzX2xhc3RfbmFtZSIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgImRvbWFpbm5hbWUiIGlzICJ0aGUgbGFzdAotICogICAgICBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lIiwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLwotCWJvb2wgaXNfZGVsZXRlZDsKLQlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19rZWVwX2RvbWFpbiIuICAgICAgICAqLwotCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KLQlib29sIGlzX2xhc3RfbmFtZTsKLX07Ci0KLS8qCi0gKiB0b21veW9fYWxpYXNfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyAiYWxpYXMiIGVudHJpZXMuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX2FsaWFzX2xpc3QgLgotICogICgyKSAib3JpZ2luYWxfbmFtZSIgd2hpY2ggaXMgYSBkZXJlZmVyZW5jZWQgcGF0aG5hbWUuCi0gKiAgKDMpICJhbGlhc2VkX25hbWUiIHdoaWNoIGlzIGEgc3ltbGluaydzIHBhdGhuYW1lLgotICogICg0KSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvcmlnaW5hbF9uYW1lOwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphbGlhc2VkX25hbWU7Ci0JYm9vbCBpc19kZWxldGVkOwotfTsKLQotLyoqCi0gKiB0b21veW9fc2V0X2RvbWFpbl9mbGFnIC0gU2V0IG9yIGNsZWFyIGRvbWFpbidzIGF0dHJpYnV0ZSBmbGFncy4KLSAqCi0gKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KLSAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KLSAqIEBmbGFnczogICAgIEZsYWdzIHRvIHNldCBvciBjbGVhci4KLSAqCi0gKiBSZXR1cm5zIG5vdGhpbmcuCi0gKi8KLXZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKQotewotCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIGJlY2F1c2UgdGhpcyBpcyBiaXRmaWVsZCBvcGVyYXRpb24uICovCi0Jc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKLQlzcGluX2xvY2soJmxvY2spOwotCWlmICghaXNfZGVsZXRlKQotCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOwotCWVsc2UKLQkJZG9tYWluLT5mbGFncyAmPSB+ZmxhZ3M7Ci0Jc3Bpbl91bmxvY2soJmxvY2spOwotfQogCiAvKioKICAqIHRvbW95b19nZXRfbGFzdF9uYW1lIC0gR2V0IGxhc3QgY29tcG9uZW50IG9mIGEgZG9tYWlubmFtZS4KQEAgLTIwNSw4ICsxMTAsNyBAQAogICogd2lsbCBjYXVzZSAiL3Vzci9zYmluL2h0dHBkIiB0byBiZWxvbmcgdG8gIjxrZXJuZWw+IC91c3Ivc2Jpbi9odHRwZCIgZG9tYWluCiAgKiB1bmxlc3MgZXhlY3V0ZWQgZnJvbSAiPGtlcm5lbD4gL2V0Yy9yYy5kL2luaXQuZC9odHRwZCIgZG9tYWluLgogICovCi1zdGF0aWMgTElTVF9IRUFEKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKIAogLyoqCiAgKiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCkBAIC0yMTcsNTkgKzEyMSw2NSBAQAogICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKIAkJCQkJCSAgY29uc3QgY2hhciAqcHJvZ3JhbSwKIAkJCQkJCSAgY29uc3QgYm9vbCBpc19ub3QsCiAJCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewotCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wcm9ncmFtOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wcm9ncmFtID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOwogCi0JaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEpKQogCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KIAlpZiAoZG9tYWlubmFtZSkgewogCQlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCi0JCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEpKQogCQkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKLQkJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fZ2V0X25hbWUoZG9tYWlubmFtZSk7CiAJCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBvdXQ7CiAJfQotCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fc2F2ZV9uYW1lKHByb2dyYW0pOworCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fZ2V0X25hbWUocHJvZ3JhbSk7CiAJaWYgKCFzYXZlZF9wcm9ncmFtKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAogCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKIAkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOworCQllbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJCXNhdmVkX3Byb2dyYW0gPSBOVUxMOworCQllbnRyeS0+aXNfbm90ID0gaXNfbm90OworCQllbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsCisJCQkJICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7Ci0JbmV3X2VudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKLQluZXdfZW50cnktPmlzX25vdCA9IGlzX25vdDsKLQluZXdfZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpOwotCWVycm9yID0gMDsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiAgb3V0OgotCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX2RvbWFpbm5hbWUpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9wcm9ncmFtKTsKKwlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNzksMTMgKzE4OSwxNCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJYm9vbCBkb25lID0gdHJ1ZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAogCQkJICAgICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSB7CiAJCWNvbnN0IGNoYXIgKm5vOwpAQCAtMzA4LDcgKzIxOSw2IEBACiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRvbmU7CiB9CiAKQEAgLTMyMCw2ICsyMzAsOCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAogCQkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKQEAgLTM0NSw2ICsyNTcsOCBAQAogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gcmVpbml0aWFsaXplcyBkb21haW4gdHJhbnNpdGlvbiwKICAqIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKIAkJCQkJIGRvbWFpbm5hbWUsCkBAIC0zNTUsOCArMjY5LDcgQEAKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOwogCWJvb2wgZmxhZyA9IGZhbHNlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgewpAQCAtMzc2LDcgKzI4OSw2IEBACiAJCX0KIAkJZmxhZyA9IHRydWU7CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKIAlyZXR1cm4gZmxhZzsKIH0KIApAQCAtNDE4LDggKzMzMCw3IEBACiAgKiAiPGtlcm5lbD4gL3Vzci9zYmluL3NzaGQgL2Jpbi9iYXNoIC91c3IvYmluL3Bhc3N3ZCIgZG9tYWluLCB1bmxlc3MKICAqIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5ICJpbml0aWFsaXplX2RvbWFpbiIuCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworTElTVF9IRUFEKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IiBsaXN0LgpAQCAtNDMwLDU5ICszNDEsNjQgQEAKICAqIEBpc19kZWxldGU6ICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb2dyYW0sCiAJCQkJCSAgICAgY29uc3QgYm9vbCBpc19ub3QsCiAJCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wcm9ncmFtID0gTlVMTDsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwogCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CiAKIAlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCi0JICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xKSkKIAkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKLQllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocHJvZ3JhbSkgewotCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fc2F2ZV9uYW1lKHByb2dyYW0pOworCQlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX2dldF9uYW1lKHByb2dyYW0pOwogCQlpZiAoIXNhdmVkX3Byb2dyYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gb3V0OwogCX0KLQlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKGRvbWFpbm5hbWUpOwogCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKKwkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKIAkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CiAJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKIAkJCWNvbnRpbnVlOwogCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CiAJCWVycm9yID0gMDsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KLQlpZiAoaXNfZGVsZXRlKSB7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUgJiYgZXJyb3IgJiYgdG9tb3lvX21lbW9yeV9vayhlbnRyeSkpIHsKKwkJZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCQlzYXZlZF9kb21haW5uYW1lID0gTlVMTDsKKwkJZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCQlzYXZlZF9wcm9ncmFtID0gTlVMTDsKKwkJZW50cnktPmlzX25vdCA9IGlzX25vdDsKKwkJZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7CisJCWVudHJ5ID0gTlVMTDsKKwkJZXJyb3IgPSAwOwogCX0KLQluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOwotCWlmICghbmV3X2VudHJ5KQotCQlnb3RvIG91dDsKLQluZXdfZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOwotCW5ld19lbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07Ci0JbmV3X2VudHJ5LT5pc19ub3QgPSBpc19ub3Q7Ci0JbmV3X2VudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7Ci0JZXJyb3IgPSAwOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKICBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX2RvbWFpbm5hbWUpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9wcm9ncmFtKTsKKwlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00OTMsNiArNDA5LDcgQEAKICAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2tlZXBfZG9tYWluIiBlbnRyeS4KICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAogCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQpAQCAtNTEzLDEzICs0MzAsMTQgQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBib29sIHRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlib29sIGRvbmUgPSB0cnVlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAogCQkJICAgICAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKQEAgLTU0Miw3ICs0NjAsNiBAQAogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKIAlyZXR1cm4gZG9uZTsKIH0KIApAQCAtNTU1LDYgKzQ3Miw4IEBACiAgKgogICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSBzdXByZXNzZXMgZG9tYWluIHRyYW5zaXRpb24sCiAgKiBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWUsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtLApAQCAtNTYzLDggKzQ4Miw3IEBACiAJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CiAJYm9vbCBmbGFnID0gZmFsc2U7CiAKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgewogCQlpZiAocHRyLT5pc19kZWxldGVkKQogCQkJY29udGludWU7CiAJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKQEAgLTU4Miw3ICs1MDAsNiBAQAogCQl9CiAJCWZsYWcgPSB0cnVlOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOwogCXJldHVybiBmbGFnOwogfQogCkBAIC02MTYsOCArNTMzLDcgQEAKICAqIC9iaW4vYnVzeWJveCBhbmQgZG9tYWlubmFtZSB3aGljaCB0aGUgY3VycmVudCBwcm9jZXNzIHdpbGwgYmVsb25nIHRvIGFmdGVyCiAgKiBleGVjdmUoKSBzdWNjZWVkcyBpcyBjYWxjdWxhdGVkIHVzaW5nIC9iaW4vY2F0IHJhdGhlciB0aGFuIC9iaW4vYnVzeWJveCAuCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCkBAIC02MjcsNDYgKzU0Myw1MSBAQAogICogQGlzX2RlbGV0ZTogICAgIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShjb25zdCBjaGFyICpvcmlnaW5hbF9uYW1lLAogCQkJCSAgICAgY29uc3QgY2hhciAqYWxpYXNlZF9uYW1lLAogCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX29yaWdpbmFsX25hbWU7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2FsaWFzZWRfbmFtZTsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwogCi0JaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKG9yaWdpbmFsX25hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pIHx8Ci0JICAgICF0b21veW9faXNfY29ycmVjdF9wYXRoKGFsaWFzZWRfbmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKG9yaWdpbmFsX25hbWUsIDEsIC0xLCAtMSkgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoYWxpYXNlZF9uYW1lLCAxLCAtMSwgLTEpKQogCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KLQlzYXZlZF9vcmlnaW5hbF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShvcmlnaW5hbF9uYW1lKTsKLQlzYXZlZF9hbGlhc2VkX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGFsaWFzZWRfbmFtZSk7CisJc2F2ZWRfb3JpZ2luYWxfbmFtZSA9IHRvbW95b19nZXRfbmFtZShvcmlnaW5hbF9uYW1lKTsKKwlzYXZlZF9hbGlhc2VkX25hbWUgPSB0b21veW9fZ2V0X25hbWUoYWxpYXNlZF9uYW1lKTsKIAlpZiAoIXNhdmVkX29yaWdpbmFsX25hbWUgfHwgIXNhdmVkX2FsaWFzZWRfbmFtZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bl93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPm9yaWdpbmFsX25hbWUgIT0gc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fAogCQkgICAgcHRyLT5hbGlhc2VkX25hbWUgIT0gc2F2ZWRfYWxpYXNlZF9uYW1lKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+b3JpZ2luYWxfbmFtZSA9IHNhdmVkX29yaWdpbmFsX25hbWU7CisJCXNhdmVkX29yaWdpbmFsX25hbWUgPSBOVUxMOworCQllbnRyeS0+YWxpYXNlZF9uYW1lID0gc2F2ZWRfYWxpYXNlZF9uYW1lOworCQlzYXZlZF9hbGlhc2VkX25hbWUgPSBOVUxMOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fYWxpYXNfbGlzdCk7CisJCWVudHJ5ID0gTlVMTDsKKwkJZXJyb3IgPSAwOwogCX0KLQluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOwotCWlmICghbmV3X2VudHJ5KQotCQlnb3RvIG91dDsKLQluZXdfZW50cnktPm9yaWdpbmFsX25hbWUgPSBzYXZlZF9vcmlnaW5hbF9uYW1lOwotCW5ld19lbnRyeS0+YWxpYXNlZF9uYW1lID0gc2F2ZWRfYWxpYXNlZF9uYW1lOwotCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19hbGlhc19saXN0KTsKLQllcnJvciA9IDA7CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwogIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX29yaWdpbmFsX25hbWUpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9hbGlhc2VkX25hbWUpOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTY3NiwxMyArNTk3LDE0IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWJvb2wgZG9uZSA9IHRydWU7CiAKLQlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX2FsaWFzX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOwogCkBAIC02OTUsNyArNjE3LDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOwogCXJldHVybiBkb25lOwogfQogCkBAIC03MDYsNiArNjI3LDggQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewpAQCAtNzI0LDYzICs2NDcsNDYgQEAKICAqIEBwcm9maWxlOiAgICBQcm9maWxlIG51bWJlciB0byBhc3NpZ24gaWYgdGhlIGRvbWFpbiB3YXMgbmV3bHkgY3JlYXRlZC4KICAqCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGNvbnN0IGNoYXIgKgogCQkJCQkJCSAgICBkb21haW5uYW1lLAogCQkJCQkJCSAgICBjb25zdCB1OCBwcm9maWxlKQogewotCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lOworCWJvb2wgZm91bmQgPSBmYWxzZTsKIAotCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZG9tYWlubmFtZSk7Ci0JaWYgKGRvbWFpbikKLQkJZ290byBvdXQ7Ci0JaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQotCQlnb3RvIG91dDsKLQlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lKSkKKwkJcmV0dXJuIE5VTEw7CisJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19nZXRfbmFtZShkb21haW5uYW1lKTsKIAlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCi0JCWdvdG8gb3V0OwotCS8qIENhbiBJIHJldXNlIG1lbW9yeSBvZiBkZWxldGVkIGRvbWFpbj8gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKLQkJYm9vbCBmbGFnOwotCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCB8fAotCQkgICAgZG9tYWluLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUpCisJCXJldHVybiBOVUxMOworCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCB8fAorCQkgICAgdG9tb3lvX3BhdGhjbXAoc2F2ZWRfZG9tYWlubmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKIAkJCWNvbnRpbnVlOwotCQlmbGFnID0gZmFsc2U7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWZvcl9lYWNoX3Byb2Nlc3MocCkgewotCQkJaWYgKHRvbW95b19yZWFsX2RvbWFpbihwKSAhPSBkb21haW4pCi0JCQkJY29udGludWU7Ci0JCQlmbGFnID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJaWYgKGZsYWcpCi0JCQljb250aW51ZTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7Ci0JCX0KLQkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIHRydWUsIGRvbWFpbi0+ZmxhZ3MpOwotCQlkb21haW4tPnByb2ZpbGUgPSBwcm9maWxlOwotCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9IGZhbHNlOwotCQltYigpOyAvKiBBdm9pZCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uLiAqLwotCQlkb21haW4tPmlzX2RlbGV0ZWQgPSBmYWxzZTsKLQkJZ290byBvdXQ7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CiAJfQotCS8qIE5vIG1lbW9yeSByZXVzYWJsZS4gQ3JlYXRlIHVzaW5nIG5ldyBtZW1vcnkuICovCi0JZG9tYWluID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpkb21haW4pKTsKLQlpZiAoZG9tYWluKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZkb21haW4tPmFjbF9pbmZvX2xpc3QpOwotCQlkb21haW4tPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOwotCQlkb21haW4tPnByb2ZpbGUgPSBwcm9maWxlOwotCQlsaXN0X2FkZF90YWlsKCZkb21haW4tPmxpc3QsICZ0b21veW9fZG9tYWluX2xpc3QpOworCWlmICghZm91bmQgJiYgdG9tb3lvX21lbW9yeV9vayhlbnRyeSkpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5hY2xfaW5mb19saXN0KTsKKwkJZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCQlzYXZlZF9kb21haW5uYW1lID0gTlVMTDsKKwkJZW50cnktPnByb2ZpbGUgPSBwcm9maWxlOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2xpc3QpOworCQlkb21haW4gPSBlbnRyeTsKKwkJZW50cnkgPSBOVUxMOworCQlmb3VuZCA9IHRydWU7CiAJfQotIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCXJldHVybiBkb21haW47CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9kb21haW5uYW1lKTsKKwlrZnJlZShlbnRyeSk7CisJcmV0dXJuIGZvdW5kID8gZG9tYWluIDogTlVMTDsKIH0KIAogLyoqCkBAIC03ODksNiArNjk1LDggQEAKICAqIEBicHJtOiBQb2ludGVyIHRvICJzdHJ1Y3QgbGludXhfYmlucHJtIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewpAQCAtNzk2LDcgKzcwNCw3IEBACiAJICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNpemUgb2YgYnVmZmVyIHJldHVybmVkIGJ5CiAJICogdG9tb3lvX3JlYWxwYXRoKCkgPSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTi4KIAkgKi8KLQlzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyICp0bXAgPSB0b21veW9fYWxsb2Moc2l6ZW9mKCp0bXApKTsKKwlzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyICp0bXAgPSBremFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CiAJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqb2xkX2RvbWFpbiA9IHRvbW95b19kb21haW4oKTsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOwogCWNvbnN0IGNoYXIgKm9sZF9kb21haW5fbmFtZSA9IG9sZF9kb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CkBAIC04NDksOCArNzU3LDcgQEAKIAlpZiAodG9tb3lvX3BhdGhjbXAoJnIsICZzKSkgewogCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CiAJCS8qIElzIHRoaXMgcHJvZ3JhbSBhbGxvd2VkIHRvIGJlIGNhbGxlZCB2aWEgc3ltYm9saWMgbGlua3M/ICovCi0JCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKIAkJCWlmIChwdHItPmlzX2RlbGV0ZWQgfHwKIAkJCSAgICB0b21veW9fcGF0aGNtcCgmciwgcHRyLT5vcmlnaW5hbF9uYW1lKSB8fAogCQkJICAgIHRvbW95b19wYXRoY21wKCZzLCBwdHItPmFsaWFzZWRfbmFtZSkpCkBAIC04NjEsNyArNzY4LDYgQEAKIAkJCXRvbW95b19maWxsX3BhdGhfaW5mbygmcik7CiAJCQlicmVhazsKIAkJfQotCQl1cF9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKIAl9CiAKIAkvKiBDaGVjayBleGVjdXRlIHBlcm1pc3Npb24uICovCkBAIC04OTIsOSArNzk4LDcgQEAKIAl9CiAJaWYgKGRvbWFpbiB8fCBzdHJsZW4obmV3X2RvbWFpbl9uYW1lKSA+PSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikKIAkJZ290byBkb25lOwotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihuZXdfZG9tYWluX25hbWUpOwotCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAlpZiAoZG9tYWluKQogCQlnb3RvIGRvbmU7CiAJaWYgKGlzX2VuZm9yY2UpCkBAIC05MDksMTQgKzgxMywxNSBAQAogCWlmIChpc19lbmZvcmNlKQogCQlyZXR2YWwgPSAtRVBFUk07CiAJZWxzZQotCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKG9sZF9kb21haW4sIGZhbHNlLAotCQkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKTsKKwkJb2xkX2RvbWFpbi0+dHJhbnNpdGlvbl9mYWlsZWQgPSB0cnVlOwogIG91dDoKIAlpZiAoIWRvbWFpbikKIAkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwkvKiBVcGRhdGUgcmVmZXJlbmNlIGNvdW50IG9uICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KKwlhdG9taWNfaW5jKCZkb21haW4tPnVzZXJzKTsKIAlicHJtLT5jcmVkLT5zZWN1cml0eSA9IGRvbWFpbjsKLQl0b21veW9fZnJlZShyZWFsX3Byb2dyYW1fbmFtZSk7Ci0JdG9tb3lvX2ZyZWUoc3ltbGlua19wcm9ncmFtX25hbWUpOwotCXRvbW95b19mcmVlKHRtcCk7CisJa2ZyZWUocmVhbF9wcm9ncmFtX25hbWUpOworCWtmcmVlKHN5bWxpbmtfcHJvZ3JhbV9uYW1lKTsKKwlrZnJlZSh0bXApOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwppbmRleCA5YTZjNTg4Li4xYjI0MzA0IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vZmlsZS5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKQEAgLTEwLDEwOCArMTAsNjQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAidG9tb3lvLmgiCi0jaW5jbHVkZSAicmVhbHBhdGguaCIKLQotLyoKLSAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJhbGxvd19yZWFkIiBlbnRyaWVzLgotICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCi0gKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0IC4KLSAqICAoMikgImZpbGVuYW1lIiBpcyBhIHBhdGhuYW1lIHdoaWNoIGlzIGFsbG93ZWQgdG8gb3BlbihPX1JET05MWSkuCi0gKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7Ci0JYm9vbCBpc19kZWxldGVkOwotfTsKLQotLyoKLSAqIHRvbW95b19wYXR0ZXJuX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJ0b21veW9fcGF0dGVybl9saXN0IiBlbnRyaWVzLgotICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCi0gKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19wYXR0ZXJuX2xpc3QgLgotICogICgyKSAicGF0dGVybiIgaXMgYSBwYXRobmFtZSBwYXR0ZXJuIHdoaWNoIGlzIHVzZWQgZm9yIGNvbnZlcnRpbmcgcGF0aG5hbWVzCi0gKiAgICAgIHRvIHBhdGhuYW1lIHBhdHRlcm5zIGR1cmluZyBsZWFybmluZyBtb2RlLgotICogICgzKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47Ci0JYm9vbCBpc19kZWxldGVkOwotfTsKLQotLyoKLSAqIHRvbW95b19ub19yZXdyaXRlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJkZW55X3Jld3JpdGUiIGVudHJpZXMuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX25vX3Jld3JpdGVfbGlzdCAuCi0gKiAgKDIpICJwYXR0ZXJuIiBpcyBhIHBhdGhuYW1lIHdoaWNoIGlzIGJ5IGRlZmF1bHQgbm90IHBlcm1pdHRlZCB0byBtb2RpZnkKLSAqICAgICAgYWxyZWFkeSBleGlzdGluZyBjb250ZW50LgotICogICgzKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47Ci0JYm9vbCBpc19kZWxldGVkOwotfTsKIAogLyogS2V5d29yZCBhcnJheSBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9ucy4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fc3Bfa2V5d29yZFtUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTl0gPSB7Ci0JW1RPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMXSA9ICJyZWFkL3dyaXRlIiwKLQlbVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0xdICAgID0gImV4ZWN1dGUiLAotCVtUT01PWU9fVFlQRV9SRUFEX0FDTF0gICAgICAgPSAicmVhZCIsCi0JW1RPTU9ZT19UWVBFX1dSSVRFX0FDTF0gICAgICA9ICJ3cml0ZSIsCi0JW1RPTU9ZT19UWVBFX0NSRUFURV9BQ0xdICAgICA9ICJjcmVhdGUiLAotCVtUT01PWU9fVFlQRV9VTkxJTktfQUNMXSAgICAgPSAidW5saW5rIiwKLQlbVE9NT1lPX1RZUEVfTUtESVJfQUNMXSAgICAgID0gIm1rZGlyIiwKLQlbVE9NT1lPX1RZUEVfUk1ESVJfQUNMXSAgICAgID0gInJtZGlyIiwKLQlbVE9NT1lPX1RZUEVfTUtGSUZPX0FDTF0gICAgID0gIm1rZmlmbyIsCi0JW1RPTU9ZT19UWVBFX01LU09DS19BQ0xdICAgICA9ICJta3NvY2siLAotCVtUT01PWU9fVFlQRV9NS0JMT0NLX0FDTF0gICAgPSAibWtibG9jayIsCi0JW1RPTU9ZT19UWVBFX01LQ0hBUl9BQ0xdICAgICA9ICJta2NoYXIiLAotCVtUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0xdICAgPSAidHJ1bmNhdGUiLAotCVtUT01PWU9fVFlQRV9TWU1MSU5LX0FDTF0gICAgPSAic3ltbGluayIsCi0JW1RPTU9ZT19UWVBFX1JFV1JJVEVfQUNMXSAgICA9ICJyZXdyaXRlIiwKK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fcGF0aF9rZXl3b3JkW1RPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9SRUFEX1dSSVRFXSA9ICJyZWFkL3dyaXRlIiwKKwlbVE9NT1lPX1RZUEVfRVhFQ1VURV0gICAgPSAiZXhlY3V0ZSIsCisJW1RPTU9ZT19UWVBFX1JFQURdICAgICAgID0gInJlYWQiLAorCVtUT01PWU9fVFlQRV9XUklURV0gICAgICA9ICJ3cml0ZSIsCisJW1RPTU9ZT19UWVBFX0NSRUFURV0gICAgID0gImNyZWF0ZSIsCisJW1RPTU9ZT19UWVBFX1VOTElOS10gICAgID0gInVubGluayIsCisJW1RPTU9ZT19UWVBFX01LRElSXSAgICAgID0gIm1rZGlyIiwKKwlbVE9NT1lPX1RZUEVfUk1ESVJdICAgICAgPSAicm1kaXIiLAorCVtUT01PWU9fVFlQRV9NS0ZJRk9dICAgICA9ICJta2ZpZm8iLAorCVtUT01PWU9fVFlQRV9NS1NPQ0tdICAgICA9ICJta3NvY2siLAorCVtUT01PWU9fVFlQRV9NS0JMT0NLXSAgICA9ICJta2Jsb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtDSEFSXSAgICAgPSAibWtjaGFyIiwKKwlbVE9NT1lPX1RZUEVfVFJVTkNBVEVdICAgPSAidHJ1bmNhdGUiLAorCVtUT01PWU9fVFlQRV9TWU1MSU5LXSAgICA9ICJzeW1saW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVXUklURV0gICAgPSAicmV3cml0ZSIsCisJW1RPTU9ZT19UWVBFX0lPQ1RMXSAgICAgID0gImlvY3RsIiwKKwlbVE9NT1lPX1RZUEVfQ0hNT0RdICAgICAgPSAiY2htb2QiLAorCVtUT01PWU9fVFlQRV9DSE9XTl0gICAgICA9ICJjaG93biIsCisJW1RPTU9ZT19UWVBFX0NIR1JQXSAgICAgID0gImNoZ3JwIiwKKwlbVE9NT1lPX1RZUEVfQ0hST09UXSAgICAgPSAiY2hyb290IiwKKwlbVE9NT1lPX1RZUEVfTU9VTlRdICAgICAgPSAibW91bnQiLAorCVtUT01PWU9fVFlQRV9VTU9VTlRdICAgICA9ICJ1bm1vdW50IiwKIH07CiAKIC8qIEtleXdvcmQgYXJyYXkgZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbnMuICovCi1zdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2RwX2tleXdvcmRbVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT05dID0gewotCVtUT01PWU9fVFlQRV9MSU5LX0FDTF0gICAgPSAibGluayIsCi0JW1RPTU9ZT19UWVBFX1JFTkFNRV9BQ0xdICA9ICJyZW5hbWUiLAorc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19wYXRoMl9rZXl3b3JkW1RPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfTElOS10gICAgPSAibGluayIsCisJW1RPTU9ZT19UWVBFX1JFTkFNRV0gID0gInJlbmFtZSIsCisJW1RPTU9ZT19UWVBFX1BJVk9UX1JPT1RdID0gInBpdm90X3Jvb3QiLAogfTsKIAogLyoqCi0gKiB0b21veW9fc3Aya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKiB0b21veW9fcGF0aDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KICAqCiAgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KICAqLwotY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQorY29uc3QgY2hhciAqdG9tb3lvX3BhdGgya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCiB7Ci0JcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTikKLQkJPyB0b21veW9fc3Bfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKKwlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT04pCisJCT8gdG9tb3lvX3BhdGhfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKIH0KIAogLyoqCi0gKiB0b21veW9fZHAya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKiB0b21veW9fcGF0aDIya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCiAgKgogICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCiAgKgogICogUmV0dXJucyB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCiAgKi8KLWNvbnN0IGNoYXIgKnRvbW95b19kcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK2NvbnN0IGNoYXIgKnRvbW95b19wYXRoMjJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKIHsKLQlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OKQotCQk/IHRvbW95b19kcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT04pCisJCT8gdG9tb3lvX3BhdGgyX2tleXdvcmRbb3BlcmF0aW9uXSA6IE5VTEw7CiB9CiAKIC8qKgpAQCAtMTQyLDcgKzk4LDggQEAKIHN0YXRpYyBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQogewogCWludCBlcnJvcjsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2YoKmJ1ZikpOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSAqYnVmID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksCisJCQkJCQkJIEdGUF9LRVJORUwpOwogCiAJaWYgKCFidWYpCiAJCXJldHVybiBOVUxMOwpAQCAtMTU0LDIwICsxMTEsMTcgQEAKIAkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZidWYtPmhlYWQpOwogCQlyZXR1cm4gJmJ1Zi0+aGVhZDsKIAl9Ci0JdG9tb3lvX2ZyZWUoYnVmKTsKKwlrZnJlZShidWYpOwogCXJldHVybiBOVUxMOwogfQogCi0vKiBMb2NrIGZvciBkb21haW4tPmFjbF9pbmZvX2xpc3QuICovCi1ERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKLQotc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZTEsCi0JCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZTIsCi0JCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKLQkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpOwotc3RhdGljIGludCB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfcGF0aDJfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZTIsCisJCQkJICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY29uc3QgZG9tYWluLAorCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKKwkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKIAogLyoKICAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBwYXRobmFtZXMgd2hpY2gKQEAgLTE5NCw4ICsxNDgsNyBAQAogICogZ2l2ZW4gImFsbG93X3JlYWQgL2xpYi9saWJjLTIuNS5zbyIgdG8gdGhlIGRvbWFpbiB3aGljaCBjdXJyZW50IHByb2Nlc3MKICAqIGJlbG9uZ3MgdG8uCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KQEAgLTIwNCw0MCArMTU3LDQyIEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xLCBfX2Z1bmNfXykpCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAxLCAwLCAtMSkpCiAJCXJldHVybiAtRUlOVkFMOwotCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJc2F2ZWRfZmlsZW5hbWUgPSB0b21veW9fZ2V0X25hbWUoZmlsZW5hbWUpOwogCWlmICghc2F2ZWRfZmlsZW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwkJc2F2ZWRfZmlsZW5hbWUgPSBOVUxMOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CisJCWVudHJ5ID0gTlVMTDsKKwkJZXJyb3IgPSAwOwogCX0KLQluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOwotCWlmICghbmV3X2VudHJ5KQotCQlnb3RvIG91dDsKLQluZXdfZW50cnktPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOwotCWVycm9yID0gMDsKLSBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfZmlsZW5hbWUpOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0NywyMSArMjAyLDIyIEBACiAgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IGRvbWFpbiBjYW4gb3BlbiBAZmlsZW5hbWUgZm9yIHJlYWRpbmcsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCiAJCQkJCSAgICAgZmlsZW5hbWUpCiB7CiAJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwotCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYKIAkJICAgIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5maWxlbmFtZSkpIHsKIAkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtMjcyLDYgKzIyOCw4IEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKQEAgLTI4NCwxMyArMjQyLDE0IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWJvb2wgZG9uZSA9IHRydWU7CiAKLQlkb3duX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAogCQkJICAgICAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CkBAIC0zMDQsNyArMjYzLDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOwogCXJldHVybiBkb25lOwogfQogCkBAIC0zMzcsOCArMjk1LDcgQEAKICAqIHdoaWNoIHByZXRlbmRzIGFzIGlmIC9wcm9jL3NlbGYvIGlzIG5vdCBhIHN5bWxpbms7IHNvIHRoYXQgd2UgY2FuIGZvcmJpZAogICogY3VycmVudCBwcm9jZXNzIGZyb20gYWNjZXNzaW5nIG90aGVyIHByb2Nlc3MncyBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIExJU1RfSEVBRCh0b21veW9fcGF0dGVybl9saXN0KTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX3BhdHRlcm5fbGlzdCk7CiAKIC8qKgogICogdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KQEAgLTM0Nyw0MCArMzA0LDQzIEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZmlsZV9wYXR0ZXJuX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCiAJCQkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcGF0dGVybjsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwogCi0JaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHBhdHRlcm4sIDAsIDEsIDAsIF9fZnVuY19fKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2F2ZWRfcGF0dGVybiA9IHRvbW95b19zYXZlX25hbWUocGF0dGVybik7CisJc2F2ZWRfcGF0dGVybiA9IHRvbW95b19nZXRfbmFtZShwYXR0ZXJuKTsKIAlpZiAoIXNhdmVkX3BhdHRlcm4pCi0JCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCXJldHVybiBlcnJvcjsKKwlpZiAoIXNhdmVkX3BhdHRlcm4tPmlzX3BhdHRlcm5lZCkKKwkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CiAJCWlmIChzYXZlZF9wYXR0ZXJuICE9IHB0ci0+cGF0dGVybikKIAkJCWNvbnRpbnVlOwogCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CiAJCWVycm9yID0gMDsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KLQlpZiAoaXNfZGVsZXRlKSB7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUgJiYgZXJyb3IgJiYgdG9tb3lvX21lbW9yeV9vayhlbnRyeSkpIHsKKwkJZW50cnktPnBhdHRlcm4gPSBzYXZlZF9wYXR0ZXJuOworCQlzYXZlZF9wYXR0ZXJuID0gTlVMTDsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCAmdG9tb3lvX3BhdHRlcm5fbGlzdCk7CisJCWVudHJ5ID0gTlVMTDsKKwkJZXJyb3IgPSAwOwogCX0KLQluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOwotCWlmICghbmV3X2VudHJ5KQotCQlnb3RvIG91dDsKLQluZXdfZW50cnktPnBhdHRlcm4gPSBzYXZlZF9wYXR0ZXJuOwotCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19wYXR0ZXJuX2xpc3QpOwotCWVycm9yID0gMDsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiAgb3V0OgotCXVwX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWtmcmVlKGVudHJ5KTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfcGF0dGVybik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0zOTAsNiArMzUwLDggQEAKICAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGZpbmQgcGF0dGVybmVkIHBhdGhuYW1lLgogICoKICAqIFJldHVybnMgcG9pbnRlciB0byBwYXRobmFtZSBwYXR0ZXJuIGlmIG1hdGNoZWQsIEBmaWxlbmFtZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKIHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKQEAgLTM5Nyw4ICszNTksNyBAQAogCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuID0gTlVMTDsKIAotCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCkBAIC00MTEsNyArMzcyLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CiAJaWYgKHBhdHRlcm4pCiAJCWZpbGVuYW1lID0gcGF0dGVybjsKIAlyZXR1cm4gZmlsZW5hbWU7CkBAIC00MjQsNiArMzg0LDggQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7CkBAIC00MzYsMTMgKzM5OCwxNCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGJvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlib29sIGRvbmUgPSB0cnVlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKIAkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSwgbGlzdCk7CkBAIC00NTMsNyArNDE2LDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRvbmU7CiB9CiAKQEAgLTQ4Niw4ICs0NDgsNyBAQAogICogIiAoZGVsZXRlZCkiIHN1ZmZpeCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IHVubGluaygpZWQ7IHNvIHRoYXQgd2UgZG9uJ3QKICAqIG5lZWQgdG8gd29ycnkgd2hldGhlciB0aGUgZmlsZSBpcyBhbHJlYWR5IHVubGluaygpZWQgb3Igbm90LgogICovCi1zdGF0aWMgTElTVF9IRUFEKHRvbW95b19ub19yZXdyaXRlX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKK0xJU1RfSEVBRCh0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKIAogLyoqCiAgKiB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KQEAgLTQ5NiwzOSArNDU3LDQyIEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAogCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewotCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqbmV3X2VudHJ5LCAqcHRyOworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMCwgMCwgX19mdW5jX18pKQorCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAwLCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2F2ZWRfcGF0dGVybiA9IHRvbW95b19zYXZlX25hbWUocGF0dGVybik7CisJc2F2ZWRfcGF0dGVybiA9IHRvbW95b19nZXRfbmFtZShwYXR0ZXJuKTsKIAlpZiAoIXNhdmVkX3BhdHRlcm4pCi0JCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCXJldHVybiBlcnJvcjsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+cGF0dGVybiAhPSBzYXZlZF9wYXR0ZXJuKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJCXNhdmVkX3BhdHRlcm4gPSBOVUxMOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7Ci0JZXJyb3IgPSAwOwotIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX3BhdHRlcm4pOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTUzOSwxNCArNTAzLDE1IEBACiAgKgogICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBpcyBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIgZGlyZWN0aXZlLAogICogZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBib29sIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQogewogCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCkBAIC01NTQsNyArNTE5LDYgQEAKIAkJZm91bmQgPSB0cnVlOwogCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTU2NSw2ICs1MjksOCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKQEAgLTU3NywxMyArNTQzLDE0IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJYm9vbCBkb25lID0gdHJ1ZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CiAJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnksIGxpc3QpOwpAQCAtNTk0LDcgKzU2MSw2IEBACiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOwogCXJldHVybiBkb25lOwogfQogCkBAIC02MTIsNiArNTc4LDggQEAKICAqIEN1cnJlbnQgcG9saWN5IHN5bnRheCB1c2VzICJhbGxvd19yZWFkL3dyaXRlIiBpbnN0ZWFkIG9mICI2IiwKICAqICJhbGxvd19yZWFkIiBpbnN0ZWFkIG9mICI0IiwgImFsbG93X3dyaXRlIiBpbnN0ZWFkIG9mICIyIiwKICAqICJhbGxvd19leGVjdXRlIiBpbnN0ZWFkIG9mICIxIi4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZmlsZV9hY2woY29uc3QgY2hhciAqZmlsZW5hbWUsIHU4IHBlcm0sCiAJCQkJICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLApAQCAtNjI5LDE5ICs1OTcsMTkgQEAKIAkJICovCiAJCXJldHVybiAwOwogCWlmIChwZXJtICYgNCkKLQkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfUkVBRF9BQ0wsIGZpbGVuYW1lLAotCQkJCQkgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJCXRvbW95b191cGRhdGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfUkVBRCwgZmlsZW5hbWUsIGRvbWFpbiwKKwkJCQkgICAgICAgaXNfZGVsZXRlKTsKIAlpZiAocGVybSAmIDIpCi0JCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCwgZmlsZW5hbWUsCi0JCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwkJdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChUT01PWU9fVFlQRV9XUklURSwgZmlsZW5hbWUsIGRvbWFpbiwKKwkJCQkgICAgICAgaXNfZGVsZXRlKTsKIAlpZiAocGVybSAmIDEpCi0JCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMLAotCQkJCQkgICAgICBmaWxlbmFtZSwgZG9tYWluLCBpc19kZWxldGUpOworCQl0b21veW9fdXBkYXRlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX0VYRUNVVEUsIGZpbGVuYW1lLCBkb21haW4sCisJCQkJICAgICAgIGlzX2RlbGV0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKiB0b21veW9fcGF0aF9hY2wyIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgogICoKICAqIEBkb21haW46ICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgogICogQGZpbGVuYW1lOiAgICAgICAgRmlsZW5hbWUgdG8gY2hlY2suCkBAIC02NDksMjYgKzYxNywyOCBAQAogICogQG1heV91c2VfcGF0dGVybjogVHJ1ZSBpZiBwYXR0ZXJuZWQgQUNMIGlzIHBlcm1pdHRlZC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkgZG9tYWluLAotCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgotCQkJCQkgZmlsZW5hbWUsCi0JCQkJCSBjb25zdCB1MTYgcGVybSwKLQkJCQkJIGNvbnN0IGJvb2wgbWF5X3VzZV9wYXR0ZXJuKQorc3RhdGljIGludCB0b21veW9fcGF0aF9hY2wyKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkgICAgY29uc3QgdTMyIHBlcm0sIGNvbnN0IGJvb2wgbWF5X3VzZV9wYXR0ZXJuKQogewogCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKIAlpbnQgZXJyb3IgPSAtRVBFUk07CiAKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKLQkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKmFjbDsKKwkJaWYgKHB0ci0+dHlwZSAhPSBUT01PWU9fVFlQRV9QQVRIX0FDTCkKIAkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJICAgaGVhZCk7Ci0JCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQotCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpOworCQlpZiAocGVybSA8PSAweEZGRkYpIHsKKwkJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKCEoYWNsLT5wZXJtX2hpZ2ggJiAocGVybSA+PiAxNikpKQorCQkJCWNvbnRpbnVlOworCQl9CiAJCWlmIChtYXlfdXNlX3BhdHRlcm4gfHwgIWFjbC0+ZmlsZW5hbWUtPmlzX3BhdHRlcm5lZCkgewogCQkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsCiAJCQkJCQkJIGFjbC0+ZmlsZW5hbWUpKQpAQCAtNjc5LDcgKzY0OSw2IEBACiAJCWVycm9yID0gMDsKIAkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTY5MSwyNyArNjYwLDI4IEBACiAgKiBAb3BlcmF0aW9uOiBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCiAJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKIAkJCQkgY29uc3QgdTggb3BlcmF0aW9uKQogewotCXUxNiBwZXJtID0gMDsKKwl1MzIgcGVybSA9IDA7CiAKIAlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQogCQlyZXR1cm4gMDsKIAlpZiAob3BlcmF0aW9uID09IDYpCi0JCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOworCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFOwogCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSA0KQotCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTDsKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRDsKIAllbHNlIGlmIChvcGVyYXRpb24gPT0gMikKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMOworCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9XUklURTsKIAllbHNlIGlmIChvcGVyYXRpb24gPT0gMSkKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0w7CisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEU7CiAJZWxzZQogCQlCVUcoKTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgcGVybSwKLQkJCQkJICAgICBvcGVyYXRpb24gIT0gMSk7CisJcmV0dXJuIHRvbW95b19wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgcGVybSwgb3BlcmF0aW9uICE9IDEpOwogfQogCiAvKioKQEAgLTcyNCw2ICs2OTQsOCBAQAogICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCkBAIC03MzcsMTggKzcwOSwxNyBAQAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybiAwOwogCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfYWNsKGRvbWFpbiwgZmlsZW5hbWUsIHBlcm0pOwotCWlmIChlcnJvciAmJiBwZXJtID09IDQgJiYKLQkgICAgKGRvbWFpbi0+ZmxhZ3MgJiBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkgPT0gMAorCWlmIChlcnJvciAmJiBwZXJtID09IDQgJiYgIWRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkCiAJICAgICYmIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlKGZpbGVuYW1lKSkKIAkJZXJyb3IgPSAwOwogCWlmIChwZXJtID09IDYpCi0JCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwkJbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChUT01PWU9fVFlQRV9SRUFEX1dSSVRFKTsKIAllbHNlIGlmIChwZXJtID09IDQpCi0JCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfQUNMKTsKKwkJbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChUT01PWU9fVFlQRV9SRUFEKTsKIAllbHNlIGlmIChwZXJtID09IDIpCi0JCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJCW1zZyA9IHRvbW95b19wYXRoMmtleXdvcmQoVE9NT1lPX1RZUEVfV1JJVEUpOwogCWVsc2UgaWYgKHBlcm0gPT0gMSkKLQkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wpOworCQltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKFRPTU9ZT19UWVBFX0VYRUNVVEUpOwogCWVsc2UKIAkJQlVHKCk7CiAJaWYgKCFlcnJvcikKQEAgLTc3Nyw2ICs3NDgsOCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCiAJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQpAQCAtNzk1LDI4ICs3NjgsMjggQEAKIAlpZiAoc3RybmNtcChkYXRhLCAiYWxsb3dfIiwgNikpCiAJCWdvdG8gb3V0OwogCWRhdGEgKz0gNjsKLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT047IHR5cGUrKykgewotCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19zcF9rZXl3b3JkW3R5cGVdKSkKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3BhdGhfa2V5d29yZFt0eXBlXSkpCiAJCQljb250aW51ZTsKLQkJcmV0dXJuIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLAotCQkJCQkJICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLCBkb21haW4sCisJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CiAJfQogCWZpbGVuYW1lMiA9IHN0cmNocihmaWxlbmFtZSwgJyAnKTsKIAlpZiAoIWZpbGVuYW1lMikKIAkJZ290byBvdXQ7CiAJKmZpbGVuYW1lMisrID0gJ1wwJzsKLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047IHR5cGUrKykgewotCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19kcF9rZXl3b3JkW3R5cGVdKSkKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT047IHR5cGUrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19wYXRoMl9rZXl3b3JkW3R5cGVdKSkKIAkJCWNvbnRpbnVlOwotCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsIGZpbGVuYW1lMiwKLQkJCQkJCSAgICAgZG9tYWluLCBpc19kZWxldGUpOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9wYXRoMl9hY2wodHlwZSwgZmlsZW5hbWUsIGZpbGVuYW1lMiwKKwkJCQkJICAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKIAl9CiAgb3V0OgogCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKLSAqIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKiB0b21veW9fdXBkYXRlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIiBsaXN0LgogICoKICAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgogICogQGZpbGVuYW1lOiAgRmlsZW5hbWUuCkBAIC04MjQsODUgKzc5Nyw4MiBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKKwkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewotCXN0YXRpYyBjb25zdCB1MTYgcndfbWFzayA9Ci0JCSgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8ICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJc3RhdGljIGNvbnN0IHUzMiByd19tYXNrID0KKwkJKDEgPDwgVE9NT1lPX1RZUEVfUkVBRCkgfCAoMSA8PCBUT01PWU9fVFlQRV9XUklURSk7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOwogCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKLQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwotCWNvbnN0IHUxNiBwZXJtID0gMSA8PCB0eXBlOworCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKmVudHJ5ID0gTlVMTDsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKKwljb25zdCB1MzIgcGVybSA9IDEgPDwgdHlwZTsKIAogCWlmICghZG9tYWluKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDAsIDAsIDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUpOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX2dldF9uYW1lKGZpbGVuYW1lKTsKIAlpZiAoIXNhdmVkX2ZpbGVuYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7Ci0JaWYgKGlzX2RlbGV0ZSkKLQkJZ290byBkZWxldGU7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRvbW95b19hY2xfdHlwZTEocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsID0KKwkJCWNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpOworCQlpZiAocHRyLT50eXBlICE9IFRPTU9ZT19UWVBFX1BBVEhfQUNMKQogCQkJY29udGludWU7Ci0JCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkgICBoZWFkKTsKIAkJaWYgKGFjbC0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCiAJCQljb250aW51ZTsKLQkJLyogU3BlY2lhbCBjYXNlLiBDbGVhciBhbGwgYml0cyBpZiBtYXJrZWQgYXMgZGVsZXRlZC4gKi8KLQkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKLQkJCWFjbC0+cGVybSA9IDA7Ci0JCWFjbC0+cGVybSB8PSBwZXJtOwotCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spID09IHJ3X21hc2spCi0JCQlhY2wtPnBlcm0gfD0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTDsKLQkJZWxzZSBpZiAoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKQotCQkJYWNsLT5wZXJtIHw9IHJ3X21hc2s7Ci0JCXB0ci0+dHlwZSAmPSB+VE9NT1lPX0FDTF9ERUxFVEVEOwotCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBOb3QgZm91bmQuIEFwcGVuZCBpdCB0byB0aGUgdGFpbC4gKi8KLQlhY2wgPSB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKTsKLQlpZiAoIWFjbCkKLQkJZ290byBvdXQ7Ci0JYWNsLT5wZXJtID0gcGVybTsKLQlpZiAocGVybSA9PSAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpCi0JCWFjbC0+cGVybSB8PSByd19tYXNrOwotCWFjbC0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKLQlsaXN0X2FkZF90YWlsKCZhY2wtPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7Ci0JZXJyb3IgPSAwOwotCWdvdG8gb3V0OwotIGRlbGV0ZToKLQllcnJvciA9IC1FTk9FTlQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCi0JCQljb250aW51ZTsKLQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgIGhlYWQpOwotCQlpZiAoYWNsLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKLQkJCWNvbnRpbnVlOwotCQlhY2wtPnBlcm0gJj0gfnBlcm07Ci0JCWlmICgoYWNsLT5wZXJtICYgcndfbWFzaykgIT0gcndfbWFzaykKLQkJCWFjbC0+cGVybSAmPSB+KDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOwotCQllbHNlIGlmICghKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCi0JCQlhY2wtPnBlcm0gJj0gfnJ3X21hc2s7Ci0JCWlmICghYWNsLT5wZXJtKQotCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJaWYgKGlzX2RlbGV0ZSkgeworCQkJaWYgKHBlcm0gPD0gMHhGRkZGKQorCQkJCWFjbC0+cGVybSAmPSB+cGVybTsKKwkJCWVsc2UKKwkJCQlhY2wtPnBlcm1faGlnaCAmPSB+KHBlcm0gPj4gMTYpOworCQkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSAhPSByd19tYXNrKQorCQkJCWFjbC0+cGVybSAmPSB+KDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSk7CisJCQllbHNlIGlmICghKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKSkKKwkJCQlhY2wtPnBlcm0gJj0gfnJ3X21hc2s7CisJCX0gZWxzZSB7CisJCQlpZiAocGVybSA8PSAweEZGRkYpCisJCQkJYWNsLT5wZXJtIHw9IHBlcm07CisJCQllbHNlCisJCQkJYWNsLT5wZXJtX2hpZ2ggfD0gKHBlcm0gPj4gMTYpOworCQkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSA9PSByd19tYXNrKQorCQkJCWFjbC0+cGVybSB8PSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEU7CisJCQllbHNlIGlmIChhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKSkKKwkJCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwkJfQogCQllcnJvciA9IDA7CiAJCWJyZWFrOwogCX0KLSBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+aGVhZC50eXBlID0gVE9NT1lPX1RZUEVfUEFUSF9BQ0w7CisJCWlmIChwZXJtIDw9IDB4RkZGRikKKwkJCWVudHJ5LT5wZXJtID0gcGVybTsKKwkJZWxzZQorCQkJZW50cnktPnBlcm1faGlnaCA9IChwZXJtID4+IDE2KTsKKwkJaWYgKHBlcm0gPT0gKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpCisJCQllbnRyeS0+cGVybSB8PSByd19tYXNrOworCQllbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwkJc2F2ZWRfZmlsZW5hbWUgPSBOVUxMOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJCWVudHJ5ID0gTlVMTDsKKwkJZXJyb3IgPSAwOworCX0KKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJa2ZyZWUoZW50cnkpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9maWxlbmFtZSk7CiAJcmV0dXJuIGVycm9yOwogfQogCiAvKioKLSAqIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKiB0b21veW9fdXBkYXRlX3BhdGgyX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiIGxpc3QuCiAgKgogICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCiAgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZS4KQEAgLTkxMSw5OCArODgxLDg4IEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKLQkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKLQkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoMl9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpjb25zdCBkb21haW4sCisJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lMTsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWUyOwogCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKLQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICplbnRyeSA9IE5VTEw7CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAJY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKIAogCWlmICghZG9tYWluKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUxLCAwLCAwLCAwLCBfX2Z1bmNfXykgfHwKLQkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUyLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lMSwgMCwgMCwgMCkgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUyLCAwLCAwLCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2F2ZWRfZmlsZW5hbWUxID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTEpOwotCXNhdmVkX2ZpbGVuYW1lMiA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUyKTsKKwlzYXZlZF9maWxlbmFtZTEgPSB0b21veW9fZ2V0X25hbWUoZmlsZW5hbWUxKTsKKwlzYXZlZF9maWxlbmFtZTIgPSB0b21veW9fZ2V0X25hbWUoZmlsZW5hbWUyKTsKIAlpZiAoIXNhdmVkX2ZpbGVuYW1lMSB8fCAhc2F2ZWRfZmlsZW5hbWUyKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7Ci0JaWYgKGlzX2RlbGV0ZSkKLQkJZ290byBkZWxldGU7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRvbW95b19hY2xfdHlwZTEocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCisJCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlKQorCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICphY2wgPQorCQkJY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpOworCQlpZiAocHRyLT50eXBlICE9IFRPTU9ZT19UWVBFX1BBVEgyX0FDTCkKIAkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJICAgaGVhZCk7CiAJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKIAkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKIAkJCWNvbnRpbnVlOwotCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLwotCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQotCQkJYWNsLT5wZXJtID0gMDsKLQkJYWNsLT5wZXJtIHw9IHBlcm07Ci0JCXB0ci0+dHlwZSAmPSB+VE9NT1lPX0FDTF9ERUxFVEVEOwotCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBOb3QgZm91bmQuIEFwcGVuZCBpdCB0byB0aGUgdGFpbC4gKi8KLQlhY2wgPSB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKTsKLQlpZiAoIWFjbCkKLQkJZ290byBvdXQ7Ci0JYWNsLT5wZXJtID0gcGVybTsKLQlhY2wtPmZpbGVuYW1lMSA9IHNhdmVkX2ZpbGVuYW1lMTsKLQlhY2wtPmZpbGVuYW1lMiA9IHNhdmVkX2ZpbGVuYW1lMjsKLQlsaXN0X2FkZF90YWlsKCZhY2wtPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7Ci0JZXJyb3IgPSAwOwotCWdvdG8gb3V0OwotIGRlbGV0ZToKLQllcnJvciA9IC1FTk9FTlQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCi0JCQljb250aW51ZTsKLQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgIGhlYWQpOwotCQlpZiAoYWNsLT5maWxlbmFtZTEgIT0gc2F2ZWRfZmlsZW5hbWUxIHx8Ci0JCSAgICBhY2wtPmZpbGVuYW1lMiAhPSBzYXZlZF9maWxlbmFtZTIpCi0JCQljb250aW51ZTsKLQkJYWNsLT5wZXJtICY9IH5wZXJtOwotCQlpZiAoIWFjbC0+cGVybSkKLQkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWlmIChpc19kZWxldGUpCisJCQlhY2wtPnBlcm0gJj0gfnBlcm07CisJCWVsc2UKKwkJCWFjbC0+cGVybSB8PSBwZXJtOwogCQllcnJvciA9IDA7CiAJCWJyZWFrOwogCX0KKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+aGVhZC50eXBlID0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMOworCQllbnRyeS0+cGVybSA9IHBlcm07CisJCWVudHJ5LT5maWxlbmFtZTEgPSBzYXZlZF9maWxlbmFtZTE7CisJCXNhdmVkX2ZpbGVuYW1lMSA9IE5VTEw7CisJCWVudHJ5LT5maWxlbmFtZTIgPSBzYXZlZF9maWxlbmFtZTI7CisJCXNhdmVkX2ZpbGVuYW1lMiA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CisJfQorCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKICBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfZmlsZW5hbWUxKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfZmlsZW5hbWUyKTsKKwlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwogfQogCiAvKioKLSAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKiB0b21veW9fcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCiAgKgogICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqIEB0eXBlOiAgICAgVHlwZSBvZiBvcGVyYXRpb24uCiAgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCQkJY29uc3QgdTggdHlwZSwKLQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQorc3RhdGljIGludCB0b21veW9fcGF0aF9hY2woc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLCBjb25zdCB1OCB0eXBlLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQogewogCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCiAJCXJldHVybiAwOwotCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCAxIDw8IHR5cGUsIDEpOworCXJldHVybiB0b21veW9fcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIDEgPDwgdHlwZSwgMSk7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoMl9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb24uCiAgKgogICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KQEAgLTEwMTAsMTMgKzk3MCwxMyBAQAogICogQGZpbGVuYW1lMjogU2Vjb25kIGZpbGVuYW1lIHRvIGNoZWNrLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkJCWNvbnN0IHU4IHR5cGUsCi0JCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKLQkJCQkJZmlsZW5hbWUxLAotCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCi0JCQkJCWZpbGVuYW1lMikKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGgyX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggdHlwZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxLAorCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTIpCiB7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwogCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CkBAIC0xMDI0LDEzICs5ODQsMTEgQEAKIAogCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCiAJCXJldHVybiAwOwotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOwotCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKmFjbDsKKwkJaWYgKHB0ci0+dHlwZSAhPSBUT01PWU9fVFlQRV9QQVRIMl9BQ0wpCiAJCQljb250aW51ZTsKLQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgIGhlYWQpOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCwgaGVhZCk7CiAJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQogCQkJY29udGludWU7CiAJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lMSwgYWNsLT5maWxlbmFtZTEpKQpAQCAtMTA0MCwxMiArOTk4LDExIEBACiAJCWVycm9yID0gMDsKIAkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICogdG9tb3lvX3BhdGhfcGVybWlzc2lvbjIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCiAgKgogICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KQEAgLTEwNTMsMTEgKzEwMTAsMTMgQEAKICAqIEBtb2RlOiAgICAgIEFjY2VzcyBjb250cm9sIG1vZGUuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKLQkJCQkJCWNvbnN0IGRvbWFpbiwgdTggb3BlcmF0aW9uLAotCQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgotCQkJCQkJZmlsZW5hbWUsIGNvbnN0IHU4IG1vZGUpCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3Blcm1pc3Npb24yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKKwkJCQkgICB1OCBvcGVyYXRpb24sCisJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSAgIGNvbnN0IHU4IG1vZGUpCiB7CiAJY29uc3QgY2hhciAqbXNnOwogCWludCBlcnJvcjsKQEAgLTEwNjYsOCArMTAyNSw4IEBACiAJaWYgKCFtb2RlKQogCQlyZXR1cm4gMDsKICBuZXh0OgotCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgZmlsZW5hbWUpOwotCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKG9wZXJhdGlvbik7CisJZXJyb3IgPSB0b21veW9fcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGZpbGVuYW1lKTsKKwltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKG9wZXJhdGlvbik7CiAJaWYgKCFlcnJvcikKIAkJZ290byBvazsKIAlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQpAQCAtMTA3Niw3ICsxMDM1LDcgQEAKIAkJICAgICAgIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOwogCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihmaWxlbmFtZSktPm5hbWU7Ci0JCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZSwgZG9tYWluLCBmYWxzZSk7CisJCXRvbW95b191cGRhdGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lLCBkb21haW4sIGZhbHNlKTsKIAl9CiAJaWYgKCFpc19lbmZvcmNlKQogCQllcnJvciA9IDA7CkBAIC0xMDg2LDkgKzEwNDUsOSBAQAogCSAqIHdlIG5lZWQgdG8gY2hlY2sgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24gaWYgdGhlIGZpbGVuYW1lIGlzCiAJICogc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGtleXdvcmQuCiAJICovCi0JaWYgKCFlcnJvciAmJiBvcGVyYXRpb24gPT0gVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICYmCisJaWYgKCFlcnJvciAmJiBvcGVyYXRpb24gPT0gVE9NT1lPX1RZUEVfVFJVTkNBVEUgJiYKIAkgICAgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShmaWxlbmFtZSkpIHsKLQkJb3BlcmF0aW9uID0gVE9NT1lPX1RZUEVfUkVXUklURV9BQ0w7CisJCW9wZXJhdGlvbiA9IFRPTU9ZT19UWVBFX1JFV1JJVEU7CiAJCWdvdG8gbmV4dDsKIAl9CiAJcmV0dXJuIGVycm9yOwpAQCAtMTEwMSw2ICsxMDYwLDggQEAKICAqIEBmaWxlbmFtZTogQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZXZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCiAJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCkBAIC0xMTI5LDYgKzEwOTAsNyBAQAogCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CiAJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOwogCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWludCBpZHg7CiAKIAlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKIAkJcmV0dXJuIDA7CkBAIC0xMTQwLDYgKzExMDIsNyBAQAogCQkgKiBkb24ndCBjYWxsIG1lLgogCQkgKi8KIAkJcmV0dXJuIDA7CisJaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOwogCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKIAlpZiAoIWJ1ZikKIAkJZ290byBvdXQ7CkBAIC0xMTUyLDQ5ICsxMTE1LDUwIEBACiAJaWYgKChhY2NfbW9kZSAmIE1BWV9XUklURSkgJiYKIAkgICAgKChmbGFnICYgT19UUlVOQykgfHwgIShmbGFnICYgT19BUFBFTkQpKSAmJgogCSAgICAodG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShidWYpKSkgewotCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCi0JCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAotCQkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKwkJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIFRPTU9ZT19UWVBFX1JFV1JJVEUsCisJCQkJCQlidWYsIG1vZGUpOwogCX0KIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgYnVmLCBhY2NfbW9kZSwgIm9wZW4iLAogCQkJCQkJbW9kZSk7CiAJaWYgKCFlcnJvciAmJiAoZmxhZyAmIE9fVFJVTkMpKQotCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCi0JCQkJCQkgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKLQkJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7CisJCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBUT01PWU9fVFlQRV9UUlVOQ0FURSwKKwkJCQkJCWJ1ZiwgbW9kZSk7CiAgb3V0OgotCXRvbW95b19mcmVlKGJ1Zik7CisJa2ZyZWUoYnVmKTsKKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKIAlpZiAoIWlzX2VuZm9yY2UpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAiY3JlYXRlIiwgInVubGluayIsICJta2RpciIsICJybWRpciIsICJta2ZpZm8iLCAibWtzb2NrIiwgIm1rYmxvY2siLCAibWtjaGFyIiwgInRydW5jYXRlIiBhbmQgInN5bWxpbmsiLgorICogdG9tb3lvX3BhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJjcmVhdGUiLCAidW5saW5rIiwgIm1rZGlyIiwgInJtZGlyIiwgIm1rZmlmbyIsICJta3NvY2siLCAibWtibG9jayIsICJta2NoYXIiLCAidHJ1bmNhdGUiLCAic3ltbGluayIsICJpb2N0bCIsICJjaG1vZCIsICJjaG93biIsICJjaGdycCIsICJjaHJvb3QiLCAibW91bnQiIGFuZCAidW5tb3VudCIuCiAgKgotICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KICAqIEBwYXRoOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgogICovCi1pbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpCitpbnQgdG9tb3lvX3BhdGhfcGVybShjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSB0b21veW9fZG9tYWluKCk7CiAJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOwogCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWludCBpZHg7CiAKIAlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKIAkJcmV0dXJuIDA7CisJaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOwogCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKIAlpZiAoIWJ1ZikKIAkJZ290byBvdXQ7CiAJc3dpdGNoIChvcGVyYXRpb24pIHsKLQljYXNlIFRPTU9ZT19UWVBFX01LRElSX0FDTDoKLQljYXNlIFRPTU9ZT19UWVBFX1JNRElSX0FDTDoKKwljYXNlIFRPTU9ZT19UWVBFX01LRElSOgorCWNhc2UgVE9NT1lPX1RZUEVfUk1ESVI6CisJY2FzZSBUT01PWU9fVFlQRV9DSFJPT1Q6CiAJCWlmICghYnVmLT5pc19kaXIpIHsKIAkJCS8qCiAJCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKQEAgLTEyMDMsMTAgKzExNjcsMTAgQEAKIAkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOwogCQl9CiAJfQotCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYsCi0JCQkJCQkgICAgIG1vZGUpOworCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBvcGVyYXRpb24sIGJ1ZiwgbW9kZSk7CiAgb3V0OgotCXRvbW95b19mcmVlKGJ1Zik7CisJa2ZyZWUoYnVmKTsKKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKIAlpZiAoIWlzX2VuZm9yY2UpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMjE1LDIxICsxMTc5LDIzIEBACiAvKioKICAqIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmV3cml0ZSIuCiAgKgotICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAZmlscDogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKi8KLWludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApCitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IHRvbW95b19kb21haW4oKTsKIAljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CiAJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwlpbnQgaWR4OwogCiAJaWYgKCFtb2RlIHx8ICFmaWxwLT5mX3BhdGgubW50KQogCQlyZXR1cm4gMDsKKworCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKIAlidWYgPSB0b21veW9fZ2V0X3BhdGgoJmZpbHAtPmZfcGF0aCk7CiAJaWYgKCFidWYpCiAJCWdvdG8gb3V0OwpAQCAtMTIzNywzOCArMTIwMywzOCBAQAogCQllcnJvciA9IDA7CiAJCWdvdG8gb3V0OwogCX0KLQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCi0JCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAotCQkJCQkJICAgICBidWYsIG1vZGUpOworCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBUT01PWU9fVFlQRV9SRVdSSVRFLCBidWYsIG1vZGUpOwogIG91dDoKLQl0b21veW9fZnJlZShidWYpOworCWtmcmVlKGJ1Zik7CisJdG9tb3lvX3JlYWRfdW5sb2NrKGlkeCk7CiAJaWYgKCFpc19lbmZvcmNlKQogCQllcnJvciA9IDA7CiAJcmV0dXJuIGVycm9yOwogfQogCiAvKioKLSAqIHRvbW95b19jaGVja18ycGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlbmFtZSIgYW5kICJsaW5rIi4KKyAqIHRvbW95b19wYXRoMl9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlbmFtZSIsICJsaW5rIiBhbmQgInBpdm90X3Jvb3QiLgogICoKLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgogICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCiAgKiBAcGF0aDE6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgogICogQHBhdGgyOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgogICovCi1pbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKLQkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKLQkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpCitpbnQgdG9tb3lvX3BhdGgyX3Blcm0oY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aDEsCisJCSAgICAgIHN0cnVjdCBwYXRoICpwYXRoMikKIHsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWYxLCAqYnVmMjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSB0b21veW9fZG9tYWluKCk7CiAJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOwogCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOwogCWNvbnN0IGNoYXIgKm1zZzsKKwlpbnQgaWR4OwogCiAJaWYgKCFtb2RlIHx8ICFwYXRoMS0+bW50IHx8ICFwYXRoMi0+bW50KQogCQlyZXR1cm4gMDsKKwlpZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CiAJYnVmMSA9IHRvbW95b19nZXRfcGF0aChwYXRoMSk7CiAJYnVmMiA9IHRvbW95b19nZXRfcGF0aChwYXRoMik7CiAJaWYgKCFidWYxIHx8ICFidWYyKQpAQCAtMTI4OSw4ICsxMjU1LDggQEAKIAkJCX0KIAkJfQogCX0KLQllcnJvciA9IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGJ1ZjEsIGJ1ZjIpOwotCW1zZyA9IHRvbW95b19kcDJrZXl3b3JkKG9wZXJhdGlvbik7CisJZXJyb3IgPSB0b21veW9fcGF0aDJfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYxLCBidWYyKTsKKwltc2cgPSB0b21veW9fcGF0aDIya2V5d29yZChvcGVyYXRpb24pOwogCWlmICghZXJyb3IpCiAJCWdvdG8gb3V0OwogCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCkBAIC0xMzAxLDEyICsxMjY3LDEzIEBACiAJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKIAkJY29uc3QgY2hhciAqbmFtZTEgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYxKS0+bmFtZTsKIAkJY29uc3QgY2hhciAqbmFtZTIgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYyKS0+bmFtZTsKLQkJdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lMSwgbmFtZTIsIGRvbWFpbiwKLQkJCQkJICAgICAgZmFsc2UpOworCQl0b21veW9fdXBkYXRlX3BhdGgyX2FjbChvcGVyYXRpb24sIG5hbWUxLCBuYW1lMiwgZG9tYWluLAorCQkJCQlmYWxzZSk7CiAJfQogIG91dDoKLQl0b21veW9fZnJlZShidWYxKTsKLQl0b21veW9fZnJlZShidWYyKTsKKwlrZnJlZShidWYxKTsKKwlrZnJlZShidWYyKTsKKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKIAlpZiAoIWlzX2VuZm9yY2UpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZ2MuYyBiL3NlY3VyaXR5L3RvbW95by9nYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NDU1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZ2MuYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9nYy5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKK2VudW0gdG9tb3lvX2djX2lkIHsKKwlUT01PWU9fSURfRE9NQUlOX0lOSVRJQUxJWkVSLAorCVRPTU9ZT19JRF9ET01BSU5fS0VFUEVSLAorCVRPTU9ZT19JRF9BTElBUywKKwlUT01PWU9fSURfR0xPQkFMTFlfUkVBREFCTEUsCisJVE9NT1lPX0lEX1BBVFRFUk4sCisJVE9NT1lPX0lEX05PX1JFV1JJVEUsCisJVE9NT1lPX0lEX01BTkFHRVIsCisJVE9NT1lPX0lEX05BTUUsCisJVE9NT1lPX0lEX0FDTCwKKwlUT01PWU9fSURfRE9NQUlOCit9OworCitzdHJ1Y3QgdG9tb3lvX2djX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IHR5cGU7CisJdm9pZCAqZWxlbWVudDsKK307CitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19nY19xdWV1ZSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHRvbW95b19nY19tdXRleCk7CisKKy8qIENhbGxlciBob2xkcyB0b21veW9fcG9saWN5X2xvY2sgbXV0ZXguICovCitzdGF0aWMgYm9vbCB0b21veW9fYWRkX3RvX2djKGNvbnN0IGludCB0eXBlLCB2b2lkICplbGVtZW50KQoreworCXN0cnVjdCB0b21veW9fZ2NfZW50cnkgKmVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIGZhbHNlOworCWVudHJ5LT50eXBlID0gdHlwZTsKKwllbnRyeS0+ZWxlbWVudCA9IGVsZW1lbnQ7CisJbGlzdF9hZGQoJmVudHJ5LT5saXN0LCAmdG9tb3lvX2djX3F1ZXVlKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9hbGxvd19yZWFkCisoc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHIpCit7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+ZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5wYXR0ZXJuKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9ub19yZXdyaXRlKHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyKQoreworCXRvbW95b19wdXRfbmFtZShwdHItPnBhdHRlcm4pOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2RvbWFpbl9pbml0aWFsaXplcgorKHN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHIpCit7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+ZG9tYWlubmFtZSk7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+cHJvZ3JhbSk7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfZG9tYWluX2tlZXBlcihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5kb21haW5uYW1lKTsKKwl0b21veW9fcHV0X25hbWUocHRyLT5wcm9ncmFtKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9hbGlhcyhzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHIpCit7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+b3JpZ2luYWxfbmFtZSk7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+YWxpYXNlZF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9tYW5hZ2VyKHN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5tYW5hZ2VyKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9hY2woc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYWNsKQoreworCXN3aXRjaCAoYWNsLT50eXBlKSB7CisJY2FzZSBUT01PWU9fVFlQRV9QQVRIX0FDTDoKKwkJeworCQkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqZW50cnkKKwkJCQk9IGNvbnRhaW5lcl9vZihhY2wsIHR5cGVvZigqZW50cnkpLCBoZWFkKTsKKwkJCXRvbW95b19wdXRfbmFtZShlbnRyeS0+ZmlsZW5hbWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1RZUEVfUEFUSDJfQUNMOgorCQl7CisJCQlzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqZW50cnkKKwkJCQk9IGNvbnRhaW5lcl9vZihhY2wsIHR5cGVvZigqZW50cnkpLCBoZWFkKTsKKwkJCXRvbW95b19wdXRfbmFtZShlbnRyeS0+ZmlsZW5hbWUxKTsKKwkJCXRvbW95b19wdXRfbmFtZShlbnRyeS0+ZmlsZW5hbWUyKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIHR5cGVcbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19kZWxfZG9tYWluKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphY2w7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqdG1wOworCS8qCisJICogU2luY2Ugd2UgZG9uJ3QgcHJvdGVjdCB3aG9sZSBleGVjdmUoKSBvcGVyYXRpb24gdXNpbmcgU1JDVSwKKwkgKiB3ZSBuZWVkIHRvIHJlY2hlY2sgZG9tYWluLT51c2VycyBhdCB0aGlzIHBvaW50LgorCSAqCisJICogKDEpIFJlYWRlciBzdGFydHMgU1JDVSBzZWN0aW9uIHVwb24gZXhlY3ZlKCkuCisJICogKDIpIFJlYWRlciB0cmF2ZXJzZXMgdG9tb3lvX2RvbWFpbl9saXN0IGFuZCBmaW5kcyB0aGlzIGRvbWFpbi4KKwkgKiAoMykgV3JpdGVyIG1hcmtzIHRoaXMgZG9tYWluIGFzIGRlbGV0ZWQuCisJICogKDQpIEdhcmJhZ2UgY29sbGVjdG9yIHJlbW92ZXMgdGhpcyBkb21haW4gZnJvbSB0b21veW9fZG9tYWluX2xpc3QKKwkgKiAgICAgYmVjYXVzZSB0aGlzIGRvbWFpbiBpcyBtYXJrZWQgYXMgZGVsZXRlZCBhbmQgdXNlZCBieSBub2JvZHkuCisJICogKDUpIFJlYWRlciBzYXZlcyByZWZlcmVuY2UgdG8gdGhpcyBkb21haW4gaW50bworCSAqICAgICAic3RydWN0IGxpbnV4X2JpbnBybSItPmNyZWQtPnNlY3VyaXR5IC4KKwkgKiAoNikgUmVhZGVyIGZpbmlzaGVzIFNSQ1Ugc2VjdGlvbiwgYWx0aG91Z2ggZXhlY3ZlKCkgb3BlcmF0aW9uIGhhcworCSAqICAgICBub3QgZmluaXNoZWQgeWV0LgorCSAqICg3KSBHYXJiYWdlIGNvbGxlY3RvciB3YWl0cyBmb3IgU1JDVSBzeW5jaHJvbml6YXRpb24uCisJICogKDgpIEdhcmJhZ2UgY29sbGVjdG9yIGtmcmVlKCkgdGhpcyBkb21haW4gYmVjYXVzZSB0aGlzIGRvbWFpbiBpcworCSAqICAgICB1c2VkIGJ5IG5vYm9keS4KKwkgKiAoOSkgUmVhZGVyIGZpbmlzaGVzIGV4ZWN2ZSgpIG9wZXJhdGlvbiBhbmQgcmVzdG9yZXMgdGhpcyBkb21haW4gZnJvbQorCSAqICAgICAic3RydWN0IGxpbnV4X2JpbnBybSItPmNyZWQtPnNlY3VyaXR5LgorCSAqCisJICogQnkgdXBkYXRpbmcgZG9tYWluLT51c2VycyBhdCAoNSksIHdlIGNhbiBzb2x2ZSB0aGlzIHJhY2UgcHJvYmxlbQorCSAqIGJ5IHJlY2hlY2tpbmcgZG9tYWluLT51c2VycyBhdCAoOCkuCisJICovCisJaWYgKGF0b21pY19yZWFkKCZkb21haW4tPnVzZXJzKSkKKwkJcmV0dXJuIGZhbHNlOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhY2wsIHRtcCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQl0b21veW9fZGVsX2FjbChhY2wpOworCQl0b21veW9fbWVtb3J5X2ZyZWUoYWNsKTsKKwl9CisJdG9tb3lvX3B1dF9uYW1lKGRvbWFpbi0+ZG9tYWlubmFtZSk7CisJcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyKQoreworfQorCitzdGF0aWMgdm9pZCB0b21veW9fY29sbGVjdF9lbnRyeSh2b2lkKQoreworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJeworCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsCisJCQkJCWxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0dMT0JBTExZX1JFQURBQkxFLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9QQVRURVJOLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9OT19SRVdSSVRFLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwKKwkJCQkJbGlzdCkgeworCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfRE9NQUlOX0lOSVRJQUxJWkVSLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9ET01BSU5fS0VFUEVSLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0FMSUFTLCBwdHIpKQorCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwl7CisJCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsCisJCQkJCWxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX01BTkFHRVIsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKmFjbDsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGFjbCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwKKwkJCQkJCWxpc3QpIHsKKwkJCQlzd2l0Y2ggKGFjbC0+dHlwZSkgeworCQkJCWNhc2UgVE9NT1lPX1RZUEVfUEFUSF9BQ0w6CisJCQkJCWlmIChjb250YWluZXJfb2YoYWNsLAorCQkJCQkgc3RydWN0IHRvbW95b19wYXRoX2FjbCwKKwkJCQkJCQkgaGVhZCktPnBlcm0gfHwKKwkJCQkJICAgIGNvbnRhaW5lcl9vZihhY2wsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLAorCQkJCQkJCSBoZWFkKS0+cGVybV9oaWdoKQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVE9NT1lPX1RZUEVfUEFUSDJfQUNMOgorCQkJCQlpZiAoY29udGFpbmVyX29mKGFjbCwKKwkJCQkJIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLAorCQkJCQkJCSBoZWFkKS0+cGVybSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0FDTCwgYWNsKSkKKwkJCQkJbGlzdF9kZWxfcmN1KCZhY2wtPmxpc3QpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCB8fCBhdG9taWNfcmVhZCgmZG9tYWluLT51c2VycykpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogTm9ib2R5IGlzIHJlZmVycmluZyB0aGlzIGRvbWFpbi4gQnV0IHNvbWVib2R5IG1heQorCQkJICogcmVmZXIgdGhpcyBkb21haW4gYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdmUoKS4KKwkJCSAqIFdlIHJlY2hlY2sgZG9tYWluLT51c2VycyBhZnRlciBTUkNVIHN5bmNocm9uaXphdGlvbi4KKwkJCSAqLworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0RPTUFJTiwgZG9tYWluKSkKKwkJCQlsaXN0X2RlbF9yY3UoJmRvbWFpbi0+bGlzdCk7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCW11dGV4X2xvY2soJnRvbW95b19uYW1lX2xpc3RfbG9jayk7CisJeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfSEFTSDsgaSsrKSB7CisJCQlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19uYW1lX2xpc3RbaV0sCisJCQkJCQlsaXN0KSB7CisJCQkJaWYgKGF0b21pY19yZWFkKCZwdHItPnVzZXJzKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX05BTUUsIHB0cikpCisJCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKKwkJCQllbHNlIHsKKwkJCQkJaSA9IFRPTU9ZT19NQVhfSEFTSDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmdG9tb3lvX25hbWVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2tmcmVlX2VudHJ5KHZvaWQpCit7CisJc3RydWN0IHRvbW95b19nY19lbnRyeSAqcDsKKwlzdHJ1Y3QgdG9tb3lvX2djX2VudHJ5ICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmdG9tb3lvX2djX3F1ZXVlLCBsaXN0KSB7CisJCXN3aXRjaCAocC0+dHlwZSkgeworCQljYXNlIFRPTU9ZT19JRF9ET01BSU5fSU5JVElBTElaRVI6CisJCQl0b21veW9fZGVsX2RvbWFpbl9pbml0aWFsaXplcihwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9ET01BSU5fS0VFUEVSOgorCQkJdG9tb3lvX2RlbF9kb21haW5fa2VlcGVyKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX0FMSUFTOgorCQkJdG9tb3lvX2RlbF9hbGlhcyhwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRToKKwkJCXRvbW95b19kZWxfYWxsb3dfcmVhZChwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9QQVRURVJOOgorCQkJdG9tb3lvX2RlbF9maWxlX3BhdHRlcm4ocC0+ZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfTk9fUkVXUklURToKKwkJCXRvbW95b19kZWxfbm9fcmV3cml0ZShwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9NQU5BR0VSOgorCQkJdG9tb3lvX2RlbF9tYW5hZ2VyKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX05BTUU6CisJCQl0b21veW9fZGVsX25hbWUocC0+ZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfQUNMOgorCQkJdG9tb3lvX2RlbF9hY2wocC0+ZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfRE9NQUlOOgorCQkJaWYgKCF0b21veW9fZGVsX2RvbWFpbihwLT5lbGVtZW50KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biB0eXBlXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXRvbW95b19tZW1vcnlfZnJlZShwLT5lbGVtZW50KTsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2djX3RocmVhZCh2b2lkICp1bnVzZWQpCit7CisJZGFlbW9uaXplKCJHQyBmb3IgVE9NT1lPIik7CisJaWYgKG11dGV4X3RyeWxvY2soJnRvbW95b19nY19tdXRleCkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQl0b21veW9fY29sbGVjdF9lbnRyeSgpOworCQkJaWYgKGxpc3RfZW1wdHkoJnRvbW95b19nY19xdWV1ZSkpCisJCQkJYnJlYWs7CisJCQlzeW5jaHJvbml6ZV9zcmN1KCZ0b21veW9fc3MpOworCQkJdG9tb3lvX2tmcmVlX2VudHJ5KCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ0b21veW9fZ2NfbXV0ZXgpOworCX0KKwlkb19leGl0KDApOworfQorCit2b2lkIHRvbW95b19ydW5fZ2Modm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBrdGhyZWFkX2NyZWF0ZSh0b21veW9fZ2NfdGhyZWFkLCBOVUxMLAorCQkJCQkJICAiR0MgZm9yIFRPTU9ZTyIpOworCWlmICghSVNfRVJSKHRhc2spKQorCQl3YWtlX3VwX3Byb2Nlc3ModGFzayk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCmluZGV4IDQ1NWJjMzkuLmNmN2Q2MWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KLQorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAicmVhbHBhdGguaCIKIAogLyoqCiAgKiB0b21veW9fZW5jb2RlOiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLgpAQCAtOTcsNyArOTYsNyBAQAogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQkvKiBQcmVwZW5kICIvcHJvYyIgcHJlZml4IGlmIHVzaW5nIGludGVybmFsIHByb2MgdmZzIG1vdW50LiAqLwogCQlpZiAoIUlTX0VSUihzcCkgJiYgKHBhdGgtPm1udC0+bW50X2ZsYWdzICYgTU5UX0lOVEVSTkFMKSAmJgotCQkgICAgKHN0cmNtcChwYXRoLT5tbnQtPm1udF9zYi0+c190eXBlLT5uYW1lLCAicHJvYyIpID09IDApKSB7CisJCSAgICAocGF0aC0+bW50LT5tbnRfc2ItPnNfbWFnaWMgPT0gUFJPQ19TVVBFUl9NQUdJQykpIHsKIAkJCXNwIC09IDU7CiAJCQlpZiAoc3AgPj0gbmV3bmFtZSkKIAkJCQltZW1jcHkoc3AsICIvcHJvYyIsIDUpOwpAQCAtMTM0LDEyICsxMzMsMTIgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiB0aGUgZ2l2ZW4gQHBhdGggb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCiAgKgotICogVGhlc2UgZnVuY3Rpb25zIHVzZSB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogVGhlc2UgZnVuY3Rpb25zIHVzZSBremFsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIGtmcmVlKCkKICAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCiAgKi8KIGNoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCiB7Ci0JY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKSk7CisJY2hhciAqYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciksIEdGUF9LRVJORUwpOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKQogCQkgICAgIDw9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CkBAIC0xNDgsNyArMTQ3LDcgQEAKIAlpZiAodG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIocGF0aCwgYnVmLAogCQkJCSAgICAgICBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpID09IDApCiAJCXJldHVybiBidWY7Ci0JdG9tb3lvX2ZyZWUoYnVmKTsKKwlrZnJlZShidWYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xOTEsOTggKzE5MCw0NyBAQAogfQogCiAvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBub24tc3RyaW5nIGRhdGEuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKLS8qIFF1b3RhIGZvciBob2xkaW5nIG5vbi1zdHJpbmcgZGF0YS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50czsKK3N0YXRpYyBhdG9taWNfdCB0b21veW9fcG9saWN5X21lbW9yeV9zaXplOworLyogUXVvdGEgZm9yIGhvbGRpbmcgcG9saWN5LiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX3BvbGljeTsKIAogLyoqCi0gKiB0b21veW9fYWxsb2NfZWxlbWVudCAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cnVjdHVyZXMuCisgKiB0b21veW9fbWVtb3J5X29rIC0gQ2hlY2sgbWVtb3J5IHF1b3RhLgogICoKLSAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICogQHB0cjogUG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LgogICoKLSAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBNZW1vcnkgaGFzIHRvIGJlIHplcm9lZC4KLSAqIFRoZSBSQU0gaXMgY2h1bmtlZCwgc28gTkVWRVIgdHJ5IHRvIGtmcmVlKCkgdGhlIHJldHVybmVkIHBvaW50ZXIuCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3BvbGljeV9sb2NrLgorICogTWVtb3J5IHBvaW50ZWQgYnkgQHB0ciB3aWxsIGJlIHplcm9lZCBvbiBzdWNjZXNzLgogICovCi12b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSkKK2Jvb2wgdG9tb3lvX21lbW9yeV9vayh2b2lkICpwdHIpCiB7Ci0Jc3RhdGljIGNoYXIgKmJ1ZjsKLQlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmX3VzZWRfbGVuID0gUEFUSF9NQVg7Ci0JY2hhciAqcHRyID0gTlVMTDsKLQkvKkFzc3VtZXMgc2l6ZW9mKHZvaWQgKikgPj0gc2l6ZW9mKGxvbmcpIGlzIHRydWUuICovCi0JY29uc3QgdW5zaWduZWQgaW50IHdvcmRfYWxpZ25lZF9zaXplCi0JCT0gcm91bmR1cChzaXplLCBtYXgoc2l6ZW9mKHZvaWQgKiksIHNpemVvZihsb25nKSkpOwotCWlmICh3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKQotCQlyZXR1cm4gTlVMTDsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlpZiAoYnVmX3VzZWRfbGVuICsgd29yZF9hbGlnbmVkX3NpemUgPiBQQVRIX01BWCkgewotCQlpZiAoIXRvbW95b19xdW90YV9mb3JfZWxlbWVudHMgfHwKLQkJICAgIHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50cwotCQkgICAgKyBQQVRIX01BWCA8PSB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQotCQkJcHRyID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHRyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCi0JCQkgICAgICAgImZvciB0b21veW9fYWxsb2NfZWxlbWVudCgpLlxuIik7Ci0JCQlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQotCQkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlidWYgPSBwdHI7Ci0JCQl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMgKz0gUEFUSF9NQVg7Ci0JCQlidWZfdXNlZF9sZW4gPSB3b3JkX2FsaWduZWRfc2l6ZTsKLQkJCXB0ciA9IGJ1ZjsKLQkJfQotCX0gZWxzZSBpZiAod29yZF9hbGlnbmVkX3NpemUpIHsKLQkJaW50IGk7Ci0JCXB0ciA9IGJ1ZiArIGJ1Zl91c2VkX2xlbjsKLQkJYnVmX3VzZWRfbGVuICs9IHdvcmRfYWxpZ25lZF9zaXplOwotCQlmb3IgKGkgPSAwOyBpIDwgd29yZF9hbGlnbmVkX3NpemU7IGkrKykgewotCQkJaWYgKCFwdHJbaV0pCi0JCQkJY29udGludWU7Ci0JCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IFJlc2VydmVkIG1lbW9yeSB3YXMgdGFpbnRlZCEgIgotCQkJICAgICAgICJUaGUgc3lzdGVtIG1pZ2h0IGdvIHdyb25nLlxuIik7Ci0JCQlwdHJbaV0gPSAnXDAnOwotCQl9CisJaW50IGFsbG9jYXRlZF9sZW4gPSBwdHIgPyBrc2l6ZShwdHIpIDogMDsKKwlhdG9taWNfYWRkKGFsbG9jYXRlZF9sZW4sICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwlpZiAocHRyICYmICghdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kgfHwKKwkJICAgIGF0b21pY19yZWFkKCZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKQorCQkgICAgPD0gdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpKSB7CisJCW1lbXNldChwdHIsIDAsIGFsbG9jYXRlZF9sZW4pOworCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQlyZXR1cm4gcHRyOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKKwkgICAgICAgImZvciB0b21veW9fYWxsb2NfZWxlbWVudCgpLlxuIik7CisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcGFuaWMoIk1BQyBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7Ci0vKiBRdW90YSBmb3IgaG9sZGluZyBzdHJpbmcgZGF0YSBpbiBieXRlcy4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZTsKLQotLyoKLSAqIFRPTU9ZTyB1c2VzIHRoaXMgaGFzaCBvbmx5IHdoZW4gYXBwZW5kaW5nIGEgc3RyaW5nIGludG8gdGhlIHN0cmluZwotICogdGFibGUuIEZyZXF1ZW5jeSBvZiBhcHBlbmRpbmcgc3RyaW5ncyBpcyB2ZXJ5IGxvdy4gU28gd2UgZG9uJ3QgbmVlZAotICogbGFyZ2UgKGUuZy4gNjRrKSBoYXNoIHNpemUuIDI1NiB3aWxsIGJlIHN1ZmZpY2llbnQuCi0gKi8KLSNkZWZpbmUgVE9NT1lPX0hBU0hfQklUUyAgOAotI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggKDF1PDxUT01PWU9fSEFTSF9CSVRTKQotCi0vKgotICogdG9tb3lvX25hbWVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgbGlua2luZwotICogInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBpbnRvIHRvbW95b19uYW1lX2xpc3QgLgorLyoqCisgKiB0b21veW9fbWVtb3J5X2ZyZWUgLSBGcmVlIG1lbW9yeSBmb3IgZWxlbWVudHMuCiAgKgotICogU2luY2UgdG9tb3lvX25hbWVfbGlzdCBtYW5hZ2VzIGEgbGlzdCBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzaGFyZWQgYnkKLSAqIG11bHRpcGxlIHByb2Nlc3NlcyAod2hlcmVhcyAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIGluc2lkZQotICogInN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSIgaXMgbm90IHNoYXJlZCksIGEgcmVmZXJlbmNlIGNvdW50ZXIgd2lsbAotICogYmUgYWRkZWQgdG8gInN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSIgcmF0aGVyIHRoYW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIgotICogd2hlbiBUT01PWU8gc3RhcnRzIHN1cHBvcnRpbmcgZ2FyYmFnZSBjb2xsZWN0b3IuCisgKiBAcHRyOiAgUG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LgogICovCi1zdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBlbnRyeTsKLX07Ci0KLS8qIFN0cnVjdHVyZSBmb3IgYXZhaWxhYmxlIG1lbW9yeSByZWdpb24uICovCi1zdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljaGFyICpwdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gYSBmcmVlIGFyZWEuICovCi0JaW50IGxlbjsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGFyZWEuICAgICAqLwotfTsKK3ZvaWQgdG9tb3lvX21lbW9yeV9mcmVlKHZvaWQgKnB0cikKK3sKKwlhdG9taWNfc3ViKGtzaXplKHB0ciksICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwlrZnJlZShwdHIpOworfQogCiAvKgogICogdG9tb3lvX25hbWVfbGlzdCBpcyB1c2VkIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIHVzZWQgYnkgVE9NT1lPLgpAQCAtMjkwLDg3ICsyMzgsNTggQEAKICAqICIvbGliL2xpYmMtMi41LnNvIiksIFRPTU9ZTyBzaGFyZXMgc3RyaW5nIGRhdGEgaW4gdGhlIGZvcm0gb2YKICAqICJjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqIi4KICAqLwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25hbWVfbGlzdFtUT01PWU9fTUFYX0hBU0hdOworc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07CisvKiBMb2NrIGZvciBwcm90ZWN0aW5nIHRvbW95b19uYW1lX2xpc3QgLiAqLworREVGSU5FX01VVEVYKHRvbW95b19uYW1lX2xpc3RfbG9jayk7CiAKIC8qKgotICogdG9tb3lvX3NhdmVfbmFtZSAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cmluZyBkYXRhLgorICogdG9tb3lvX2dldF9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCiAgKgogICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCiAgKgogICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCi0gKgotICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KICAqLwotY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X25hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdGF0aWMgTElTVF9IRUFEKGZtYl9saXN0KTsKLQlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOwogCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyOwogCXVuc2lnbmVkIGludCBoYXNoOwotCS8qIGZtYiBjb250YWlucyBhdmFpbGFibGUgc2l6ZSBpbiBieXRlcy4KLQkgICBmbWIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbWJfbGlzdCB3aGVuIGZtYi0+bGVuIGJlY29tZXMgMC4gKi8KLQlzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgKmZtYjsKIAlpbnQgbGVuOwotCWNoYXIgKmNwOworCWludCBhbGxvY2F0ZWRfbGVuOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiBOVUxMOwogCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JaWYgKGxlbiA+IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBOYW1lIHRvbyBsb25nICIKLQkJICAgICAgICJmb3IgdG9tb3lvX3NhdmVfbmFtZSgpLlxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KIAloYXNoID0gZnVsbF9uYW1lX2hhc2goKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmFtZSwgbGVuIC0gMSk7CiAJaGVhZCA9ICZ0b21veW9fbmFtZV9saXN0W2hhc2hfbG9uZyhoYXNoLCBUT01PWU9fSEFTSF9CSVRTKV07Ci0KLQltdXRleF9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZ0b21veW9fbmFtZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCBoZWFkLCBsaXN0KSB7Ci0JCWlmIChoYXNoID09IHB0ci0+ZW50cnkuaGFzaCAmJiAhc3RyY21wKG5hbWUsIHB0ci0+ZW50cnkubmFtZSkpCi0JCQlnb3RvIG91dDsKKwkJaWYgKGhhc2ggIT0gcHRyLT5lbnRyeS5oYXNoIHx8IHN0cmNtcChuYW1lLCBwdHItPmVudHJ5Lm5hbWUpKQorCQkJY29udGludWU7CisJCWF0b21pY19pbmMoJnB0ci0+dXNlcnMpOworCQlnb3RvIG91dDsKIAl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmbWIsICZmbWJfbGlzdCwgbGlzdCkgewotCQlpZiAobGVuIDw9IGZtYi0+bGVuKQotCQkJZ290byByZWFkeTsKLQl9Ci0JaWYgKCF0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lIHx8Ci0JICAgIHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZSArIFBBVEhfTUFYCi0JICAgIDw9IHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCi0JCWNwID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQljcCA9IE5VTEw7Ci0JZm1iID0ga3phbGxvYyhzaXplb2YoKmZtYiksIEdGUF9LRVJORUwpOwotCWlmICghY3AgfHwgIWZtYikgewotCQlrZnJlZShjcCk7Ci0JCWtmcmVlKGZtYik7CisJcHRyID0ga3phbGxvYyhzaXplb2YoKnB0cikgKyBsZW4sIEdGUF9LRVJORUwpOworCWFsbG9jYXRlZF9sZW4gPSBwdHIgPyBrc2l6ZShwdHIpIDogMDsKKwlpZiAoIXB0ciB8fCAodG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kgJiYKKwkJICAgICBhdG9taWNfcmVhZCgmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSkgKyBhbGxvY2F0ZWRfbGVuCisJCSAgICAgPiB0b21veW9fcXVvdGFfZm9yX3BvbGljeSkpIHsKKwkJa2ZyZWUocHRyKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgotCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJICAgICAgICJmb3IgdG9tb3lvX2dldF9uYW1lKCkuXG4iKTsKIAkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKIAkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CiAJCXB0ciA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KLQl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKz0gUEFUSF9NQVg7Ci0JbGlzdF9hZGQoJmZtYi0+bGlzdCwgJmZtYl9saXN0KTsKLQlmbWItPnB0ciA9IGNwOwotCWZtYi0+bGVuID0gUEFUSF9NQVg7Ci0gcmVhZHk6Ci0JcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKLQlpZiAoIXB0cikKLQkJZ290byBvdXQ7Ci0JcHRyLT5lbnRyeS5uYW1lID0gZm1iLT5wdHI7Ci0JbWVtbW92ZShmbWItPnB0ciwgbmFtZSwgbGVuKTsKKwlhdG9taWNfYWRkKGFsbG9jYXRlZF9sZW4sICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwlwdHItPmVudHJ5Lm5hbWUgPSAoKGNoYXIgKikgcHRyKSArIHNpemVvZigqcHRyKTsKKwltZW1tb3ZlKChjaGFyICopIHB0ci0+ZW50cnkubmFtZSwgbmFtZSwgbGVuKTsKKwlhdG9taWNfc2V0KCZwdHItPnVzZXJzLCAxKTsKIAl0b21veW9fZmlsbF9wYXRoX2luZm8oJnB0ci0+ZW50cnkpOwotCWZtYi0+cHRyICs9IGxlbjsKLQlmbWItPmxlbiAtPSBsZW47CiAJbGlzdF9hZGRfdGFpbCgmcHRyLT5saXN0LCBoZWFkKTsKLQlpZiAoZm1iLT5sZW4gPT0gMCkgewotCQlsaXN0X2RlbCgmZm1iLT5saXN0KTsKLQkJa2ZyZWUoZm1iKTsKLQl9CiAgb3V0OgotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fbmFtZV9saXN0X2xvY2spOwogCXJldHVybiBwdHIgPyAmcHRyLT5lbnRyeSA6IE5VTEw7CiB9CiAKQEAgLTM4NSw0NSArMzA0LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfSEFTSDsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX25hbWVfbGlzdFtpXSk7CiAJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19rZXJuZWxfZG9tYWluLmFjbF9pbmZvX2xpc3QpOwotCXRvbW95b19rZXJuZWxfZG9tYWluLmRvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKFRPTU9ZT19ST09UX05BTUUpOwotCWxpc3RfYWRkX3RhaWwoJnRvbW95b19rZXJuZWxfZG9tYWluLmxpc3QsICZ0b21veW9fZG9tYWluX2xpc3QpOwotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCXRvbW95b19rZXJuZWxfZG9tYWluLmRvbWFpbm5hbWUgPSB0b21veW9fZ2V0X25hbWUoVE9NT1lPX1JPT1RfTkFNRSk7CisJLyoKKwkgKiB0b21veW9fcmVhZF9sb2NrKCkgaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMKKwkgKiBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCAiZGVsZXRlIiByZXF1ZXN0LgorCSAqLworCWxpc3RfYWRkX3RhaWxfcmN1KCZ0b21veW9fa2VybmVsX2RvbWFpbi5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKIAlpZiAodG9tb3lvX2ZpbmRfZG9tYWluKFRPTU9ZT19ST09UX05BTUUpICE9ICZ0b21veW9fa2VybmVsX2RvbWFpbikKIAkJcGFuaWMoIkNhbid0IHJlZ2lzdGVyIHRvbW95b19rZXJuZWxfZG9tYWluIik7Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotfQotCi0vKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZS4gKi8KLXN0YXRpYyBhdG9taWNfdCB0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZTsKLQotLyoqCi0gKiB0b21veW9fYWxsb2MgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBwdXJwb3NlLgotICoKLSAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgotICoKLSAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgotICovCi12b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpCi17Ci0Jdm9pZCAqcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHApCi0JCWF0b21pY19hZGQoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7Ci0JcmV0dXJuIHA7Ci19Ci0KLS8qKgotICogdG9tb3lvX2ZyZWUgLSBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuCi0gKgotICogQHA6IFBvaW50ZXIgcmV0dXJuZWQgYnkgdG9tb3lvX2FsbG9jKCkuIE1heSBiZSBOVUxMLgotICoKLSAqIFJldHVybnMgbm90aGluZy4KLSAqLwotdm9pZCB0b21veW9fZnJlZShjb25zdCB2b2lkICpwKQotewotCWlmIChwKSB7Ci0JCWF0b21pY19zdWIoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7Ci0JCWtmcmVlKHApOwotCX0KIH0KIAogLyoqCkBAIC00MzYsMzIgKzMyNCwxOSBAQAogaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKLQkJY29uc3QgdW5zaWduZWQgaW50IHNoYXJlZAotCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBwcml2YXRlCi0JCQk9IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKLQkJY29uc3QgdW5zaWduZWQgaW50IGR5bmFtaWMKLQkJCT0gYXRvbWljX3JlYWQoJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwkJY29uc3QgdW5zaWduZWQgaW50IHBvbGljeQorCQkJPSBhdG9taWNfcmVhZCgmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7CiAJCWNoYXIgYnVmZmVyWzY0XTsKIAogCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7Ci0JCWlmICh0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKQorCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpCiAJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKIAkJCQkgIiAgIChRdW90YTogJTEwdSkiLAotCQkJCSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKTsKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpOwogCQllbHNlCiAJCQlidWZmZXJbMF0gPSAnXDAnOwotCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJTaGFyZWQ6ICAlMTB1JXNcbiIsIHNoYXJlZCwgYnVmZmVyKTsKLQkJaWYgKHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpCi0JCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKLQkJCQkgIiAgIChRdW90YTogJTEwdSkiLAotCQkJCSB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKTsKLQkJZWxzZQotCQkJYnVmZmVyWzBdID0gJ1wwJzsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiUHJpdmF0ZTogJTEwdSVzXG4iLCBwcml2YXRlLCBidWZmZXIpOwotCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJEeW5hbWljOiAlMTB1XG4iLCBkeW5hbWljKTsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiVG90YWw6ICAgJTEwdVxuIiwKLQkJCQkgc2hhcmVkICsgcHJpdmF0ZSArIGR5bmFtaWMpOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJQb2xpY3k6ICAlMTB1JXNcbiIsIHBvbGljeSwgYnVmZmVyKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiVG90YWw6ICAgJTEwdVxuIiwgcG9saWN5KTsKIAkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ3OSw5ICszNTQsNyBAQAogCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKLQlpZiAoc3NjYW5mKGRhdGEsICJTaGFyZWQ6ICV1IiwgJnNpemUpID09IDEpCi0JCXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgPSBzaXplOwotCWVsc2UgaWYgKHNzY2FuZihkYXRhLCAiUHJpdmF0ZTogJXUiLCAmc2l6ZSkgPT0gMSkKLQkJdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyA9IHNpemU7CisJaWYgKHNzY2FuZihkYXRhLCAiUG9saWN5OiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX3BvbGljeSA9IHNpemU7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaCBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODIxN2EzLi4wMDAwMDAwCi0tLSBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIHNlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCi0gKgotICogR2V0IHRoZSBjYW5vbmljYWxpemVkIGFic29sdXRlIHBhdGhuYW1lcy4gVGhlIGJhc2lzIGZvciBUT01PWU8uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgotICovCi0KLSNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9ICi0jZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAotCi1zdHJ1Y3QgcGF0aDsKLXN0cnVjdCB0b21veW9fcGF0aF9pbmZvOwotc3RydWN0IHRvbW95b19pb19idWZmZXI7Ci0KLS8qIENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuICovCi1pbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cik7Ci0KLS8qIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LiAqLwotaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAotCQkJICAgICAgIGludCBuZXduYW1lX2xlbik7Ci0KLS8qCi0gKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KLSAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKLSAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCi0gKi8KLWNoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSk7Ci0vKgotICogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgotICovCi1jaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOwotLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KLWNoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpOwotCi0vKgotICogQWxsb2NhdGUgbWVtb3J5IGZvciBBQ0wgZW50cnkuCi0gKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgotICovCi12b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0KLS8qCi0gKiBLZWVwIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBSQU0uCi0gKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgotICovCi1jb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKLQotLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgdXNlIChlLmcuIHBlcm1pc3Npb24gY2hlY2tzKS4gKi8KLXZvaWQgKnRvbW95b19hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSk7Ci0KLS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0b21veW9fYWxsb2MoKS4gKi8KLXZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCk7Ci0KLS8qIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UuICovCi1pbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwotCi0vKiBTZXQgbWVtb3J5IHF1b3RhLiAqLwotaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwotCi0vKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KLXZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCmluZGV4IDJhY2VlYmYuLmRlZGQ5N2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYworKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKQEAgLTExLDggKzExLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAidG9tb3lvLmgiCi0jaW5jbHVkZSAicmVhbHBhdGguaCIKIAogc3RhdGljIGludCB0b21veW9fY3JlZF9hbGxvY19ibGFuayhzdHJ1Y3QgY3JlZCAqbmV3LCBnZnBfdCBnZnApCiB7CkBAIC0yMywyMSArMjEsMjMgQEAKIHN0YXRpYyBpbnQgdG9tb3lvX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAogCQkJICAgICAgIGdmcF90IGdmcCkKIHsKLQkvKgotCSAqIFNpbmNlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoiIGlzIGEgc2hhcmFibGUgcG9pbnRlciwKLQkgKiB3ZSBkb24ndCBuZWVkIHRvIGR1cGxpY2F0ZS4KLQkgKi8KLQluZXctPnNlY3VyaXR5ID0gb2xkLT5zZWN1cml0eTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBvbGQtPnNlY3VyaXR5OworCW5ldy0+c2VjdXJpdHkgPSBkb21haW47CisJaWYgKGRvbWFpbikKKwkJYXRvbWljX2luYygmZG9tYWluLT51c2Vycyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRvbW95b19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCiB7Ci0JLyoKLQkgKiBTaW5jZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIiBpcyBhIHNoYXJhYmxlIHBvaW50ZXIsCi0JICogd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUuCi0JICovCi0JbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7CisJdG9tb3lvX2NyZWRfcHJlcGFyZShuZXcsIG9sZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19jcmVkX2ZyZWUoc3RydWN0IGNyZWQgKmNyZWQpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gY3JlZC0+c2VjdXJpdHk7CisJaWYgKGRvbWFpbikKKwkJYXRvbWljX2RlYygmZG9tYWluLT51c2Vycyk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX2Jwcm1fc2V0X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCkBAIC02MSw2ICs2MSwxNCBAQAogCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCiAJCXRvbW95b19sb2FkX3BvbGljeShicHJtLT5maWxlbmFtZSk7CiAJLyoKKwkgKiBSZWxlYXNlIHJlZmVyZW5jZSB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgc3RvcmVkIGluc2lkZQorCSAqICJicHJtLT5jcmVkLT5zZWN1cml0eSIuIE5ldyByZWZlcmVuY2UgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iCisJICogc3RvcmVkIGluc2lkZSAiYnBybS0+Y3JlZC0+c2VjdXJpdHkiIHdpbGwgYmUgYWNxdWlyZWQgbGF0ZXIgaW5zaWRlCisJICogdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oKS4KKwkgKi8KKwlhdG9taWNfZGVjKCYoKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKikKKwkJICAgICBicHJtLT5jcmVkLT5zZWN1cml0eSktPnVzZXJzKTsKKwkvKgogCSAqIFRlbGwgdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHkoKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9mIGFuCiAJICogZXhlY3ZlIG9wZXJhdGlvbi4KIAkgKi8KQEAgLTc2LDggKzg0LDEyIEBACiAJICogRXhlY3V0ZSBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBwYXRobmFtZSBwYXNzZWQgdG8gZG9fZXhlY3ZlKCkKIAkgKiB1c2luZyBjdXJyZW50IGRvbWFpbi4KIAkgKi8KLQlpZiAoIWRvbWFpbikKLQkJcmV0dXJuIHRvbW95b19maW5kX25leHRfZG9tYWluKGJwcm0pOworCWlmICghZG9tYWluKSB7CisJCWNvbnN0IGludCBpZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CisJCWNvbnN0IGludCBlcnIgPSB0b21veW9fZmluZF9uZXh0X2RvbWFpbihicHJtKTsKKwkJdG9tb3lvX3JlYWRfdW5sb2NrKGlkeCk7CisJCXJldHVybiBlcnI7CisJfQogCS8qCiAJICogUmVhZCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBpbnRlcnByZXRlcnMgdXNpbmcgbmV4dCBkb21haW4uCiAJICovCkBAIC04Nyw2NyArOTksNTYgQEAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgsIGxvZmZfdCBsZW5ndGgsCiAJCQkJdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpCiB7Ci0JcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMLAotCQkJCSAgICAgICBwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9UUlVOQ0FURSwgcGF0aCk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdW5saW5rKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07Ci0JcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgVE9NT1lPX1RZUEVfVU5MSU5LX0FDTCwKLQkJCQkgICAgICAgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX1VOTElOSywgJnBhdGgpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX21rZGlyKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgaW50IG1vZGUpCiB7CiAJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OwotCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCi0JCQkJICAgICAgIFRPTU9ZT19UWVBFX01LRElSX0FDTCwKLQkJCQkgICAgICAgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX01LRElSLCAmcGF0aCk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAotCQkJCSAgICAgICBUT01PWU9fVFlQRV9STURJUl9BQ0wsCi0JCQkJICAgICAgICZwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9STURJUiwgJnBhdGgpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3N5bWxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAotCQkJCSAgICAgICBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCwKLQkJCQkgICAgICAgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX1NZTUxJTkssICZwYXRoKTsKIH0KIAogc3RhdGljIGludCB0b21veW9fcGF0aF9ta25vZChzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGV2KQogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKLQlpbnQgdHlwZSA9IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0w7CisJaW50IHR5cGUgPSBUT01PWU9fVFlQRV9DUkVBVEU7CiAKIAlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAljYXNlIFNfSUZDSFI6Ci0JCXR5cGUgPSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMOworCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtDSEFSOwogCQlicmVhazsKIAljYXNlIFNfSUZCTEs6Ci0JCXR5cGUgPSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTDsKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQkxPQ0s7CiAJCWJyZWFrOwogCWNhc2UgU19JRklGTzoKLQkJdHlwZSA9IFRPTU9ZT19UWVBFX01LRklGT19BQ0w7CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0ZJRk87CiAJCWJyZWFrOwogCWNhc2UgU19JRlNPQ0s6Ci0JCXR5cGUgPSBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMOworCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgdHlwZSwgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKHR5cGUsICZwYXRoKTsKIH0KIAogc3RhdGljIGludCB0b21veW9fcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLApAQCAtMTU1LDkgKzE1Niw3IEBACiB7CiAJc3RydWN0IHBhdGggcGF0aDEgPSB7IG5ld19kaXItPm1udCwgb2xkX2RlbnRyeSB9OwogCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfZGlyLT5tbnQsIG5ld19kZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAotCQkJCSAgICAgICBUT01PWU9fVFlQRV9MSU5LX0FDTCwKLQkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworCXJldHVybiB0b21veW9fcGF0aDJfcGVybShUT01PWU9fVFlQRV9MSU5LLCAmcGF0aDEsICZwYXRoMik7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcmVuYW1lKHN0cnVjdCBwYXRoICpvbGRfcGFyZW50LApAQCAtMTY3LDE2ICsxNjYsMTQgQEAKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoMSA9IHsgb2xkX3BhcmVudC0+bW50LCBvbGRfZGVudHJ5IH07CiAJc3RydWN0IHBhdGggcGF0aDIgPSB7IG5ld19wYXJlbnQtPm1udCwgbmV3X2RlbnRyeSB9OwotCXJldHVybiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCi0JCQkJICAgICAgIFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wsCi0JCQkJICAgICAgICZwYXRoMSwgJnBhdGgyKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGgyX3Blcm0oVE9NT1lPX1RZUEVfUkVOQU1FLCAmcGF0aDEsICZwYXRoMik7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWlmIChjbWQgPT0gRl9TRVRGTCAmJiAoKGFyZyBeIGZpbGUtPmZfZmxhZ3MpICYgT19BUFBFTkQpKQotCQlyZXR1cm4gdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksIGZpbGUpOworCQlyZXR1cm4gdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihmaWxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg5LDYgKzE4Niw1MSBAQAogCXJldHVybiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHRvbW95b19kb21haW4oKSwgJmYtPmZfcGF0aCwgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IHRvbW95b19maWxlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9JT0NUTCwgJmZpbGUtPmZfcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfY2htb2Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCSAgICAgbW9kZV90IG1vZGUpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgbW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9DSE1PRCwgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2Nob3duKHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWlmICh1aWQgIT0gKHVpZF90KSAtMSkKKwkJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX0NIT1dOLCBwYXRoKTsKKwlpZiAoIWVycm9yICYmIGdpZCAhPSAoZ2lkX3QpIC0xKQorCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfQ0hHUlAsIHBhdGgpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9jaHJvb3Qoc3RydWN0IHBhdGggKnBhdGgpCit7CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfQ0hST09ULCBwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fc2JfbW91bnQoY2hhciAqZGV2X25hbWUsIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJICAgY2hhciAqdHlwZSwgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9NT1VOVCwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3NiX3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IG1udCwgbW50LT5tbnRfcm9vdCB9OworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX1VNT1VOVCwgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19zYl9waXZvdHJvb3Qoc3RydWN0IHBhdGggKm9sZF9wYXRoLCBzdHJ1Y3QgcGF0aCAqbmV3X3BhdGgpCit7CisJcmV0dXJuIHRvbW95b19wYXRoMl9wZXJtKFRPTU9ZT19UWVBFX1BJVk9UX1JPT1QsIG5ld19wYXRoLCBvbGRfcGF0aCk7Cit9CisKIC8qCiAgKiB0b21veW9fc2VjdXJpdHlfb3BzIGlzIGEgInN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIiB3aGljaCBpcyB1c2VkIGZvcgogICogcmVnaXN0ZXJpbmcgVE9NT1lPLgpAQCAtMTk4LDYgKzI0MCw3IEBACiAJLmNyZWRfYWxsb2NfYmxhbmsgICAgPSB0b21veW9fY3JlZF9hbGxvY19ibGFuaywKIAkuY3JlZF9wcmVwYXJlICAgICAgICA9IHRvbW95b19jcmVkX3ByZXBhcmUsCiAJLmNyZWRfdHJhbnNmZXIJICAgICA9IHRvbW95b19jcmVkX3RyYW5zZmVyLAorCS5jcmVkX2ZyZWUgICAgICAgICAgID0gdG9tb3lvX2NyZWRfZnJlZSwKIAkuYnBybV9zZXRfY3JlZHMgICAgICA9IHRvbW95b19icHJtX3NldF9jcmVkcywKIAkuYnBybV9jaGVja19zZWN1cml0eSA9IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5LAogCS5maWxlX2ZjbnRsICAgICAgICAgID0gdG9tb3lvX2ZpbGVfZmNudGwsCkBAIC0yMTAsOCArMjUzLDE4IEBACiAJLnBhdGhfbWtub2QgICAgICAgICAgPSB0b21veW9fcGF0aF9ta25vZCwKIAkucGF0aF9saW5rICAgICAgICAgICA9IHRvbW95b19wYXRoX2xpbmssCiAJLnBhdGhfcmVuYW1lICAgICAgICAgPSB0b21veW9fcGF0aF9yZW5hbWUsCisJLmZpbGVfaW9jdGwgICAgICAgICAgPSB0b21veW9fZmlsZV9pb2N0bCwKKwkucGF0aF9jaG1vZCAgICAgICAgICA9IHRvbW95b19wYXRoX2NobW9kLAorCS5wYXRoX2Nob3duICAgICAgICAgID0gdG9tb3lvX3BhdGhfY2hvd24sCisJLnBhdGhfY2hyb290ICAgICAgICAgPSB0b21veW9fcGF0aF9jaHJvb3QsCisJLnNiX21vdW50ICAgICAgICAgICAgPSB0b21veW9fc2JfbW91bnQsCisJLnNiX3Vtb3VudCAgICAgICAgICAgPSB0b21veW9fc2JfdW1vdW50LAorCS5zYl9waXZvdHJvb3QgICAgICAgID0gdG9tb3lvX3NiX3Bpdm90cm9vdCwKIH07CiAKKy8qIExvY2sgZm9yIEdDLiAqLworc3RydWN0IHNyY3Vfc3RydWN0IHRvbW95b19zczsKKwogc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBjdXJyZW50X2NyZWQoKTsKQEAgLTIxOSw3ICsyNzIsOCBAQAogCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmdG9tb3lvX3NlY3VyaXR5X29wcykpCiAJCXJldHVybiAwOwogCS8qIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KLQlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCWlmIChyZWdpc3Rlcl9zZWN1cml0eSgmdG9tb3lvX3NlY3VyaXR5X29wcykgfHwKKwkgICAgaW5pdF9zcmN1X3N0cnVjdCgmdG9tb3lvX3NzKSkKIAkJcGFuaWMoIkZhaWx1cmUgcmVnaXN0ZXJpbmcgVE9NT1lPIExpbnV4Iik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPIExpbnV4IGluaXRpYWxpemVkXG4iKTsKIAljcmVkLT5zZWN1cml0eSA9ICZ0b21veW9fa2VybmVsX2RvbWFpbjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uaCBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3NTgzMi4uMDAwMDAwMAotLS0gYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCi0gKgotICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgotICovCi0KLSNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAotI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19ICi0KLXN0cnVjdCB0b21veW9fcGF0aF9pbmZvOwotc3RydWN0IHBhdGg7Ci1zdHJ1Y3QgaW5vZGU7Ci1zdHJ1Y3QgbGludXhfYmlucHJtOwotc3RydWN0IHB0X3JlZ3M7Ci0KLWludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSk7Ci1pbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZyk7Ci1pbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpOwotaW50IHRvbW95b19jaGVja18ycGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKLQkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpOwotaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1pbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7Ci0KLS8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KLQotI2RlZmluZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAxCi0KLS8qIEluZGV4IG51bWJlcnMgZm9yIEZpbGUgQ29udHJvbHMuICovCi0KLS8qCi0gKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNwZWNpYWwuIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBzZXQKLSAqIGlmIGJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlIHNldC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZAotICogVFlQRV9XUklURV9BQ0wgYXJlIGF1dG9tYXRpY2FsbHkgc2V0IGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc2V0LgotICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgZWl0aGVyIFRZUEVfUkVBRF9BQ0wgb3IKLSAqIFRZUEVfV1JJVEVfQUNMIGlzIGNsZWFyZWQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlCi0gKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBjbGVhcmVkLgotICovCi0KLSNkZWZpbmUgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wgICAgMAotI2RlZmluZSBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCAgICAgICAxCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfQUNMICAgICAgICAgIDIKLSNkZWZpbmUgVE9NT1lPX1RZUEVfV1JJVEVfQUNMICAgICAgICAgMwotI2RlZmluZSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMICAgICAgICA0Ci0jZGVmaW5lIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wgICAgICAgIDUKLSNkZWZpbmUgVE9NT1lPX1RZUEVfTUtESVJfQUNMICAgICAgICAgNgotI2RlZmluZSBUT01PWU9fVFlQRV9STURJUl9BQ0wgICAgICAgICA3Ci0jZGVmaW5lIFRPTU9ZT19UWVBFX01LRklGT19BQ0wgICAgICAgIDgKLSNkZWZpbmUgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCAgICAgICAgOQotI2RlZmluZSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCAgICAgIDEwCi0jZGVmaW5lIFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wgICAgICAgMTEKLSNkZWZpbmUgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICAgICAxMgotI2RlZmluZSBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCAgICAgIDEzCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMICAgICAgMTQKLSNkZWZpbmUgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04gMTUKLQotI2RlZmluZSBUT01PWU9fVFlQRV9MSU5LX0FDTCAgICAgICAgIDAKLSNkZWZpbmUgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCAgICAgICAxCi0jZGVmaW5lIFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OIDIKLQotI2RlZmluZSBUT01PWU9fRE9NQUlOUE9MSUNZICAgICAgICAgIDAKLSNkZWZpbmUgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSAgICAgICAxCi0jZGVmaW5lIFRPTU9ZT19ET01BSU5fU1RBVFVTICAgICAgICAgMgotI2RlZmluZSBUT01PWU9fUFJPQ0VTU19TVEFUVVMgICAgICAgIDMKLSNkZWZpbmUgVE9NT1lPX01FTUlORk8gICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFRPTU9ZT19TRUxGRE9NQUlOICAgICAgICAgICAgNQotI2RlZmluZSBUT01PWU9fVkVSU0lPTiAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgVE9NT1lPX1BST0ZJTEUgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFRPTU9ZT19NQU5BR0VSICAgICAgICAgICAgICAgOAotCi1leHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZG9tYWluKHZvaWQpCi17Ci0JcmV0dXJuIGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fcmVhbF9kb21haW4oc3RydWN0IHRhc2tfc3RydWN0Ci0JCQkJCQkJICAgICp0YXNrKQotewotCXJldHVybiB0YXNrX2NyZWRfeHh4KHRhc2ssIHNlY3VyaXR5KTsKLX0KLQotI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gpICovCmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCmluZGV4IDU4Njk2NWYuLjdhNDM3ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCisrKyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAkJCQkicmVxdWlyZWQgcHJvcGVydHkgJXMgbm90IHByZXNlbnRcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5saW51eF9waGFuZGxlKSB7CisJCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5waGFuZGxlKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6ICIKIAkJCQkiJXMgZG9lc24ndCBtYXRjaCFcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCAyNjhhYjc0Ny4uNDM5Y2U2NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTIzNyw4ICsyMzcsOSBAQAogCWFjY2VzcyA9IG5jb250cm9sLT5hY2Nlc3MgPT0gMCA/IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgOgogCQkgKG5jb250cm9sLT5hY2Nlc3MgJiAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURXwKIAkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkV8Ci0JCSAJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRFdSSVRFfAotCQkgCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLKSk7CisJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEV8CisJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DT01NQU5EfAorCQkJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0spKTsKIAlrY3RsLmluZm8gPSBuY29udHJvbC0+aW5mbzsKIAlrY3RsLmdldCA9IG5jb250cm9sLT5nZXQ7CiAJa2N0bC5wdXQgPSBuY29udHJvbC0+cHV0OwpAQCAtMTA5OSw3ICsxMTAwLDcgQEAKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdGx2LCBfdGx2LCBzaXplb2YodGx2KSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICh0bHYubGVuZ3RoIDwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzKQorCWlmICh0bHYubGVuZ3RoIDwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkb3duX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAlrY3RsID0gc25kX2N0bF9maW5kX251bWlkKGNhcmQsIHRsdi5udW1pZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21pc2MuYyBiL3NvdW5kL2NvcmUvbWlzYy5jCmluZGV4IDIzYTAzMmMuLjNkYTRmOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvbWlzYy5jCkBAIC0xMDEsNiArMTAxLDM1IEBACiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogLyoqCisgKiBzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCAtIGxvb2sgdXAgYSBQQ0kgU1NJRCBxdWlyayBsaXN0CisgKiBAdmVuZG9yOiBQQ0kgU1NWIGlkCisgKiBAZGV2aWNlOiBQQ0kgU1NEIGlkCisgKiBAbGlzdDogcXVpcmsgbGlzdCwgdGVybWluYXRlZCBieSBhIG51bGwgZW50cnkKKyAqCisgKiBMb29rIHRocm91Z2ggdGhlIGdpdmVuIHF1aXJrIGxpc3QgYW5kIGZpbmRzIGEgbWF0Y2hpbmcgZW50cnkKKyAqIHdpdGggdGhlIHNhbWUgUENJIFNTSUQuICBXaGVuIHN1YmRldmljZSBpcyAwLCBhbGwgc3ViZGV2aWNlCisgKiB2YWx1ZXMgbWF5IG1hdGNoLgorICoKKyAqIFJldHVybnMgdGhlIG1hdGNoZWQgZW50cnkgcG9pbnRlciwgb3IgTlVMTCBpZiBub3RoaW5nIG1hdGNoZWQuCisgKi8KK2NvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKK3NuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHUxNiB2ZW5kb3IsIHUxNiBkZXZpY2UsCisJCQljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqbGlzdCkKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKKworCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKSB7CisJCWlmIChxLT5zdWJ2ZW5kb3IgIT0gdmVuZG9yKQorCQkJY29udGludWU7CisJCWlmICghcS0+c3ViZGV2aWNlIHx8CisJCSAgICAoZGV2aWNlICYgcS0+c3ViZGV2aWNlX21hc2spID09IHEtPnN1YmRldmljZSkKKwkJCXJldHVybiBxOworCX0KKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXBfaWQpOworCisvKioKICAqIHNuZF9wY2lfcXVpcmtfbG9va3VwIC0gbG9vayB1cCBhIFBDSSBTU0lEIHF1aXJrIGxpc3QKICAqIEBwY2k6IHBjaV9kZXYgaGFuZGxlCiAgKiBAbGlzdDogcXVpcmsgbGlzdCwgdGVybWluYXRlZCBieSBhIG51bGwgZW50cnkKQEAgLTExNCwxNiArMTQzLDkgQEAKIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKIHNuZF9wY2lfcXVpcmtfbG9va3VwKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KQogewotCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwotCi0JZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKLQkJaWYgKHEtPnN1YnZlbmRvciAhPSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IpCi0JCQljb250aW51ZTsKLQkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKLQkJICAgIChwY2ktPnN1YnN5c3RlbV9kZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQotCQkJcmV0dXJuIHE7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZChwY2ktPnN1YnN5c3RlbV92ZW5kb3IsCisJCQkJICAgICAgIHBjaS0+c3Vic3lzdGVtX2RldmljZSwKKwkJCQkgICAgICAgbGlzdCk7CiB9CiBFWFBPUlRfU1lNQk9MKHNuZF9wY2lfcXVpcmtfbG9va3VwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGQ5Yzk2MzUuLjgyZDRlMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTYzMiw2ICs2MzIsMTIgQEAKIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIChidWZmZXJfc2l6ZSAqIGJ5dGVzKSAvIHJ1bnRpbWUtPm9zcy5idWZmZXJfYnl0ZXMpOwogfQogCitzdGF0aWMgaW5saW5lCitzbmRfcGNtX3VmcmFtZXNfdCBnZXRfaHdfcHRyX3BlcmlvZChzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXJldHVybiBydW50aW1lLT5od19wdHJfaW50ZXJydXB0OworfQorCiAvKiBkZWZpbmUgZXh0ZW5kZWQgZm9ybWF0cyBpbiB0aGUgcmVjZW50IE9TUyB2ZXJzaW9ucyAoaWYgYW55KSAqLwogLyogbGluZWFyIGZvcm1hdHMgKi8KICNkZWZpbmUgQUZNVF9TMzJfTEUgICAgICAweDAwMDAxMDAwCkBAIC0xMTAyLDcgKzExMDgsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlydW50aW1lLT5vc3MucHJlcGFyZSA9IDA7Ci0JcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX2ludGVycnVwdCA9IDA7CisJcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZCA9IDA7CiAJcnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPSAwOwogCXJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA9IDA7CiAKQEAgLTE5NTAsNyArMTk1Niw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyKQorc3RhdGljIHZvaWQgc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHIpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBhcHBsX3B0cjsKQEAgLTE5ODYsNyArMTk5Myw4IEBACiAJCQlpZiAocnVudGltZS0+b3NzLnRyaWdnZXIpCiAJCQkJZ290byBfc2tpcDE7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnBzdWJzdHJlYW0tPm1tYXBfY291bnQpKQotCQkJCXNuZF9wY21fb3NzX3NpbXVsYXRlX2ZpbGwocHN1YnN0cmVhbSwgcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCk7CisJCQkJc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChwc3Vic3RyZWFtLAorCQkJCQkJZ2V0X2h3X3B0cl9wZXJpb2QocnVudGltZSkpOwogCQkJcnVudGltZS0+b3NzLnRyaWdnZXIgPSAxOwogCQkJcnVudGltZS0+c3RhcnRfdGhyZXNob2xkID0gMTsKIAkJCWNtZCA9IFNORFJWX1BDTV9JT0NUTF9TVEFSVDsKQEAgLTIxMDUsMTEgKzIxMTMsMTIgQEAKIAlpbmZvLnB0ciA9IHNuZF9wY21fb3NzX2J5dGVzKHN1YnN0cmVhbSwgcnVudGltZS0+c3RhdHVzLT5od19wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZSk7CiAJaWYgKGF0b21pY19yZWFkKCZzdWJzdHJlYW0tPm1tYXBfY291bnQpKSB7CiAJCXNuZF9wY21fc2ZyYW1lc190IG47Ci0JCW4gPSAoZGVsYXkgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0KSAtIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQ7CisJCWRlbGF5ID0gZ2V0X2h3X3B0cl9wZXJpb2QocnVudGltZSk7CisJCW4gPSBkZWxheSAtIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9wZXJpb2Q7CiAJCWlmIChuIDwgMCkKIAkJCW4gKz0gcnVudGltZS0+Ym91bmRhcnk7CiAJCWluZm8uYmxvY2tzID0gbiAvIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCQlydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ID0gZGVsYXk7CisJCXJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9wZXJpb2QgPSBkZWxheTsKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCQlzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN1YnN0cmVhbSwgZGVsYXkpOwogCQlpbmZvLmJ5dGVzID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBydW50aW1lLT5zdGF0dXMtPmh3X3B0cikgJiBJTlRfTUFYOwpAQCAtMjY3MywxOCArMjY4MiwyMiBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaWYgKGF0b21pY19yZWFkKCZzdWJzdHJlYW0tPm1tYXBfY291bnQpKQotCQlyZXR1cm4gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX2ludGVycnVwdCAhPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0OworCQlyZXR1cm4gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZCAhPQorCQkJCQkJZ2V0X2h3X3B0cl9wZXJpb2QocnVudGltZSk7CiAJZWxzZQotCQlyZXR1cm4gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKSA+PSBydW50aW1lLT5vc3MucGVyaW9kX2ZyYW1lczsKKwkJcmV0dXJuIHNuZF9wY21fcGxheWJhY2tfYXZhaWwocnVudGltZSkgPj0KKwkJCQkJCXJ1bnRpbWUtPm9zcy5wZXJpb2RfZnJhbWVzOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX2NhcHR1cmVfcmVhZHkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ICE9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7CisJCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kICE9CisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKIAllbHNlCi0JCXJldHVybiBzbmRfcGNtX2NhcHR1cmVfYXZhaWwocnVudGltZSkgPj0gcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CisJCXJldHVybiBzbmRfcGNtX2NhcHR1cmVfYXZhaWwocnVudGltZSkgPj0KKwkJCQkJCXJ1bnRpbWUtPm9zcy5wZXJpb2RfZnJhbWVzOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9wY21fb3NzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggNjg4NGFlMC4uMGQ0MjhkMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC04OTQsNiArODk0LDcgQEAKIAltZW1zZXQoKHZvaWQqKXJ1bnRpbWUtPmNvbnRyb2wsIDAsIHNpemUpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcnVudGltZS0+c2xlZXApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJ1bnRpbWUtPnRzbGVlcCk7CiAKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX09QRU47CiAKQEAgLTkyMSw2ICs5MjIsMTAgQEAKIAlzbmRfZnJlZV9wYWdlcygodm9pZCopcnVudGltZS0+Y29udHJvbCwKIAkJICAgICAgIFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCkpKTsKIAlrZnJlZShydW50aW1lLT5od19jb25zdHJhaW50cy5ydWxlcyk7CisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCWlmIChydW50aW1lLT5od3B0cl9sb2cpCisJCWtmcmVlKHJ1bnRpbWUtPmh3cHRyX2xvZyk7CisjZW5kaWYKIAlrZnJlZShydW50aW1lKTsKIAlzdWJzdHJlYW0tPnJ1bnRpbWUgPSBOVUxMOwogCXB1dF9waWQoc3Vic3RyZWFtLT5waWQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCBhMjc1NDViMi4uYjU0NmFjMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTEyNiwxNyArMTI2LDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0jZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcgJiAobWFzaykpCi0jZWxzZQotI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSwgbWFzaykJMAotI2VuZGlmCi0KLSNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewkJXAotCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDIpKQkJXAotCQkJZHVtcF9zdGFjaygpOwkJCVwKLQl9IHdoaWxlICgwKQotCiBzdGF0aWMgdm9pZCBwY21fZGVidWdfbmFtZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCiB7CkBAIC0xNDcsNiArMTM2LDI0IEBACiAJCSBzdWJzdHJlYW0tPm51bWJlcik7CiB9CiAKKyNkZWZpbmUgWFJVTl9ERUJVR19CQVNJQwkoMTw8MCkKKyNkZWZpbmUgWFJVTl9ERUJVR19TVEFDSwkoMTw8MSkJLyogZHVtcCBhbHNvIHN0YWNrICovCisjZGVmaW5lIFhSVU5fREVCVUdfSklGRklFU0NIRUNLCSgxPDwyKQkvKiBkbyBqaWZmaWVzIGNoZWNrICovCisjZGVmaW5lIFhSVU5fREVCVUdfUEVSSU9EVVBEQVRFCSgxPDwzKQkvKiBmdWxsIHBlcmlvZCB1cGRhdGUgaW5mbyAqLworI2RlZmluZSBYUlVOX0RFQlVHX0hXUFRSVVBEQVRFCSgxPDw0KQkvKiBmdWxsIGh3cHRyIHVwZGF0ZSBpbmZvICovCisjZGVmaW5lIFhSVU5fREVCVUdfTE9HCQkoMTw8NSkJLyogc2hvdyBsYXN0IDEwIHBvc2l0aW9ucyBvbiBlcnIgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19MT0dPTkNFCSgxPDw2KQkvKiBkbyBhYm92ZSBvbmx5IG9uY2UgKi8KKworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKKworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSwgbWFzaykgXAorCQkJKChzdWJzdHJlYW0pLT5wc3RyLT54cnVuX2RlYnVnICYgKG1hc2spKQorCisjZGVmaW5lIGR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pIGRvIHsJCQlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19TVEFDSykpCVwKKwkJCWR1bXBfc3RhY2soKTsJCQkJXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTE1NCw3ICsxNjEsNyBAQAogCWlmIChydW50aW1lLT50c3RhbXBfbW9kZSA9PSBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSkKIAkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsIChzdHJ1Y3QgdGltZXNwZWMgKikmcnVudGltZS0+c3RhdHVzLT50c3RhbXApOwogCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKLQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDEpKSB7CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0JBU0lDKSkgewogCQljaGFyIG5hbWVbMTZdOwogCQlwY21fZGVidWdfbmFtZShzdWJzdHJlYW0sIG5hbWUsIHNpemVvZihuYW1lKSk7CiAJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiWFJVTjogJXNcbiIsIG5hbWUpOwpAQCAtMTYyLDMyICsxNjksMTAyIEBACiAJfQogfQogCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKLXNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCi17Ci0Jc25kX3BjbV91ZnJhbWVzX3QgcG9zOworI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19CQVNJQykpIHsJCVwKKwkJCXhydW5fbG9nX3Nob3coc3Vic3RyZWFtKTsJCQlcCisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CQkJXAorCQkJCXNuZF9wcmludGQoIlBDTTogIiBmbXQsICMjYXJncyk7CVwKKwkJCX0JCQkJCQlcCisJCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCiAKLQlwb3MgPSBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pOwotCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKQotCQlyZXR1cm4gcG9zOyAvKiBYUlVOICovCi0JaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgewotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQljaGFyIG5hbWVbMTZdOwotCQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogJXMsIHBvcyA9IDB4JWx4LCAiCi0JCQkJICAgImJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsCi0JCQkJICAgbmFtZSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKLQkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCX0KLQkJcG9zID0gMDsKKyNkZWZpbmUgWFJVTl9MT0dfQ05UCTEwCisKK3N0cnVjdCBod3B0cl9sb2dfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgamlmZmllczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CisJc25kX3BjbV91ZnJhbWVzX3QgcGVyaW9kX3NpemU7CisJc25kX3BjbV91ZnJhbWVzX3QgYnVmZmVyX3NpemU7CisJc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0cjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfYmFzZTsKK307CisKK3N0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZyB7CisJdW5zaWduZWQgaW50IGlkeDsKKwl1bnNpZ25lZCBpbnQgaGl0OiAxOworCXN0cnVjdCBod3B0cl9sb2dfZW50cnkgZW50cmllc1tYUlVOX0xPR19DTlRdOworfTsKKworc3RhdGljIHZvaWQgeHJ1bl9sb2coc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9wY21faHdwdHJfbG9nICpsb2cgPSBydW50aW1lLT5od3B0cl9sb2c7CisJc3RydWN0IGh3cHRyX2xvZ19lbnRyeSAqZW50cnk7CisKKwlpZiAobG9nID09IE5VTEwpIHsKKwkJbG9nID0ga3phbGxvYyhzaXplb2YoKmxvZyksIEdGUF9BVE9NSUMpOworCQlpZiAobG9nID09IE5VTEwpCisJCQlyZXR1cm47CisJCXJ1bnRpbWUtPmh3cHRyX2xvZyA9IGxvZzsKKwl9IGVsc2UgeworCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfTE9HT05DRSkgJiYgbG9nLT5oaXQpCisJCQlyZXR1cm47CiAJfQotCXBvcyAtPSBwb3MgJSBydW50aW1lLT5taW5fYWxpZ247Ci0JcmV0dXJuIHBvczsKKwllbnRyeSA9ICZsb2ctPmVudHJpZXNbbG9nLT5pZHhdOworCWVudHJ5LT5qaWZmaWVzID0gamlmZmllczsKKwllbnRyeS0+cG9zID0gcG9zOworCWVudHJ5LT5wZXJpb2Rfc2l6ZSA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCWVudHJ5LT5idWZmZXJfc2l6ZSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOzsKKwllbnRyeS0+b2xkX2h3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOworCWVudHJ5LT5od19wdHJfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCWxvZy0+aWR4ID0gKGxvZy0+aWR4ICsgMSkgJSBYUlVOX0xPR19DTlQ7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyB2b2lkIHhydW5fbG9nX3Nob3coc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21faHdwdHJfbG9nICpsb2cgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3cHRyX2xvZzsKKwlzdHJ1Y3QgaHdwdHJfbG9nX2VudHJ5ICplbnRyeTsKKwljaGFyIG5hbWVbMTZdOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGNudDsKKworCWlmIChsb2cgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19MT0dPTkNFKSAmJiBsb2ctPmhpdCkKKwkJcmV0dXJuOworCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKwlmb3IgKGNudCA9IDAsIGlkeCA9IGxvZy0+aWR4OyBjbnQgPCBYUlVOX0xPR19DTlQ7IGNudCsrKSB7CisJCWVudHJ5ID0gJmxvZy0+ZW50cmllc1tpZHhdOworCQlpZiAoZW50cnktPnBlcmlvZF9zaXplID09IDApCisJCQlicmVhazsKKwkJc25kX3ByaW50ZCgiaHdwdHIgbG9nOiAlczogaj0lbHUsIHBvcz0lbGQvJWxkLyVsZCwgIgorCQkJICAgImh3cHRyPSVsZC8lbGRcbiIsCisJCQkgICBuYW1lLCBlbnRyeS0+amlmZmllcywgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBvcywKKwkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5wZXJpb2Rfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5idWZmZXJfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5vbGRfaHdfcHRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmh3X3B0cl9iYXNlKTsKKwkJaWR4Kys7CisJCWlkeCAlPSBYUlVOX0xPR19DTlQ7CisJfQorCWxvZy0+aGl0ID0gMTsKK30KKworI2Vsc2UgLyogISBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHICovCisKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIG1hc2spCTAKKyNkZWZpbmUgeHJ1bihzdWJzdHJlYW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKK2ludCBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogCkBAIC0yMDksODggKzI4Niw5NCBAQAogCQl9CiAJfQogCWlmIChhdmFpbCA+PSBydW50aW1lLT5jb250cm9sLT5hdmFpbF9taW4pCi0JCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwkJd2FrZV91cChydW50aW1lLT50d2FrZSA/ICZydW50aW1lLT50c2xlZXAgOiAmcnVudGltZS0+c2xlZXApOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCAxKSkgewkJCQlcCi0JCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CQkJXAotCQkJCXNuZF9wcmludGQoIlBDTTogIiBmbXQsICMjYXJncyk7CVwKLQkJCX0JCQkJCQlcCi0JCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyMChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgIHVuc2lnbmVkIGludCBpbl9pbnRlcnJ1cHQpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdCwgaHdfYmFzZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGhkZWx0YSwgZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBqZGVsdGE7CiAKIAlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7Ci0JcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOworCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7CiAJaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pIHsKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDgpKSB7Ci0JCWNoYXIgbmFtZVsxNl07Ci0JCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKLQkJc25kX3ByaW50ZCgicGVyaW9kX3VwZGF0ZTogJXM6IHBvcz0weCV4LzB4JXgvMHgleCwgIgotCQkJICAgImh3cHRyPTB4JWx4LCBod19iYXNlPTB4JWx4LCBod19pbnRyPTB4JWx4XG4iLAotCQkJICAgbmFtZSwgKHVuc2lnbmVkIGludClwb3MsCi0JCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAotCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKLQkJCSAgICh1bnNpZ25lZCBsb25nKW9sZF9od19wdHIsCi0JCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfYmFzZSwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQpOworCWlmIChwb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJY2hhciBuYW1lWzE2XTsKKwkJCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKwkJCXhydW5fbG9nX3Nob3coc3Vic3RyZWFtKTsKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgICJCVUc6ICVzLCBwb3MgPSAlbGQsICIKKwkJCQkgICAiYnVmZmVyIHNpemUgPSAlbGQsIHBlcmlvZCBzaXplID0gJWxkXG4iLAorCQkJCSAgIG5hbWUsIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCQkJICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQl9CisJCXBvcyA9IDA7CiAJfQorCXBvcyAtPSBwb3MgJSBydW50aW1lLT5taW5fYWxpZ247CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0xPRykpCisJCXhydW5fbG9nKHN1YnN0cmVhbSwgcG9zKTsKIAlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CiAJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7Ci0JaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKyBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKLQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwotCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KSB7Ci0JCWh3X3B0cl9pbnRlcnJ1cHQgLT0gcnVudGltZS0+Ym91bmRhcnk7Ci0JCWlmIChod19iYXNlIDwgcnVudGltZS0+Ym91bmRhcnkgLyAyKQotCQkJLyogaHdfYmFzZSB3YXMgYWxyZWFkeSBsYXBwZWQ7IHJlY2FsYyBkZWx0YSAqLwotCQkJZGVsdGEgPSBuZXdfaHdfcHRyIC0gaHdfcHRyX2ludGVycnVwdDsKLQl9Ci0JaWYgKGRlbHRhIDwgMCkgewotCQlpZiAocnVudGltZS0+cGVyaW9kcyA9PSAxIHx8IG5ld19od19wdHIgPCBvbGRfaHdfcHRyKQotCQkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChkZWx0YSA8IDApIHsKLQkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAotCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAiCi0JCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKLQkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCi0JCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKLSNpZiAxCi0JCQkvKiBzaW1wbHkgc2tpcHBpbmcgdGhlIGh3cHRyIHVwZGF0ZSBzZWVtcyBtb3JlCi0JCQkgKiByb2J1c3QgaW4gc29tZSBjYXNlcywgZS5nLiBvbiBWTXdhcmUgd2l0aAotCQkJICogaW5hY2N1cmF0ZSB0aW1lciBzb3VyY2UKLQkJCSAqLwotCQkJcmV0dXJuIDA7IC8qIHNraXAgdGhpcyB1cGRhdGUgKi8KLSNlbHNlCi0JCQkvKiByZWJhc2UgdG8gaW50ZXJydXB0IHBvc2l0aW9uICovCi0JCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCi0JCQlod19iYXNlIC09IGh3X2Jhc2UgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJCWRlbHRhID0gMDsKLSNlbmRpZgotCQl9IGVsc2UgeworCWlmIChpbl9pbnRlcnJ1cHQpIHsKKwkJLyogd2Uga25vdyB0aGF0IG9uZSBwZXJpb2Qgd2FzIHByb2Nlc3NlZCAqLworCQkvKiBkZWx0YSA9ICJleHBlY3RlZCBuZXh0IGh3X3B0ciIgZm9yIGluX2ludGVycnVwdCAhPSAwICovCisJCWRlbHRhID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlpZiAoZGVsdGEgPiBuZXdfaHdfcHRyKSB7CiAJCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCiAJCQkJaHdfYmFzZSA9IDA7CiAJCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwkJCWdvdG8gX19kZWx0YTsKIAkJfQogCX0KKwkvKiBuZXdfaHdfcHRyIG1pZ2h0IGJlIGxvd2VyIHRoYW4gb2xkX2h3X3B0ciBpbiBjYXNlIHdoZW4gKi8KKwkvKiBwb2ludGVyIGNyb3NzZXMgdGhlIGVuZCBvZiB0aGUgcmluZyBidWZmZXIgKi8KKwlpZiAobmV3X2h3X3B0ciA8IG9sZF9od19wdHIpIHsKKwkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQlod19iYXNlID0gMDsKKwkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJfQorICAgICAgX19kZWx0YToKKwlkZWx0YSA9IChuZXdfaHdfcHRyIC0gb2xkX2h3X3B0cikgJSBydW50aW1lLT5ib3VuZGFyeTsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIGluX2ludGVycnVwdCA/CisJCQlYUlVOX0RFQlVHX1BFUklPRFVQREFURSA6IFhSVU5fREVCVUdfSFdQVFJVUERBVEUpKSB7CisJCWNoYXIgbmFtZVsxNl07CisJCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKwkJc25kX3ByaW50ZCgiJXNfdXBkYXRlOiAlczogcG9zPSV1LyV1LyV1LCAiCisJCQkgICAiaHdwdHI9JWxkLyVsZC8lbGQvJWxkXG4iLAorCQkJICAgaW5faW50ZXJydXB0ID8gInBlcmlvZCIgOiAiaHdwdHIiLAorCQkJICAgbmFtZSwKKwkJCSAgICh1bnNpZ25lZCBpbnQpcG9zLAorCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJCQkgICAodW5zaWduZWQgbG9uZylkZWx0YSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKW9sZF9od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZyluZXdfaHdfcHRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2Jhc2UpOworCX0KKwkvKiBzb21ldGhpbmcgbXVzdCBiZSByZWFsbHkgd3JvbmcgKi8KKwlpZiAoZGVsdGEgPj0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgJXMiCisJCQkgICAgICAgIihzdHJlYW09JWksIHBvcz0lbGQsIG5ld19od19wdHI9JWxkLCAiCisJCQkgICAgICAgIm9sZF9od19wdHI9JWxkKVxuIiwKKwkJCQkgICAgIGluX2ludGVycnVwdCA/ICJbUV0gIiA6ICJbUF0iLAorCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKKwkJCQkgICAgIChsb25nKW5ld19od19wdHIsIChsb25nKW9sZF9od19wdHIpOworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBEbyBqaWZmaWVzIGNoZWNrIG9ubHkgaW4geHJ1bl9kZWJ1ZyBtb2RlICovCi0JaWYgKCF4cnVuX2RlYnVnKHN1YnN0cmVhbSwgNCkpCisJaWYgKCF4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19KSUZGSUVTQ0hFQ0spKQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7CiAKIAkvKiBTa2lwIHRoZSBqaWZmaWVzIGNoZWNrIGZvciBoYXJkd2FyZXMgd2l0aCBCQVRDSCBmbGFnLgpAQCAtMjk5LDcgKzM4Miw3IEBACiAJICovCiAJaWYgKHJ1bnRpbWUtPmh3LmluZm8gJiBTTkRSVl9QQ01fSU5GT19CQVRDSCkKIAkJZ290byBub19qaWZmaWVzX2NoZWNrOwotCWhkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOworCWhkZWx0YSA9IGRlbHRhOwogCWlmIChoZGVsdGEgPCBydW50aW1lLT5kZWxheSkKIAkJZ290byBub19qaWZmaWVzX2NoZWNrOwogCWhkZWx0YSAtPSBydW50aW1lLT5kZWxheTsKQEAgLTMwOCwxMzAgKzM5MSw2OCBAQAogCQlkZWx0YSA9IGpkZWx0YSAvCiAJCQkoKChydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIEhaKSAvIHJ1bnRpbWUtPnJhdGUpCiAJCQkJCQkJCSsgSFovMTAwKTsKKwkJLyogbW92ZSBuZXdfaHdfcHRyIGFjY29yZGluZyBqaWZmaWVzIG5vdCBwb3MgdmFyaWFibGUgKi8KKwkJbmV3X2h3X3B0ciA9IG9sZF9od19wdHI7CisJCWh3X2Jhc2UgPSBkZWx0YTsKKwkJLyogdXNlIGxvb3AgdG8gYXZvaWQgY2hlY2tzIGZvciBkZWx0YSBvdmVyZmxvd3MgKi8KKwkJLyogdGhlIGRlbHRhIHZhbHVlIGlzIHNtYWxsIG9yIHplcm8gaW4gbW9zdCBjYXNlcyAqLworCQl3aGlsZSAoZGVsdGEgPiAwKSB7CisJCQluZXdfaHdfcHRyICs9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQkJaWYgKG5ld19od19wdHIgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQkJbmV3X2h3X3B0ciAtPSBydW50aW1lLT5ib3VuZGFyeTsKKwkJCWRlbHRhLS07CisJCX0KKwkJLyogYWxpZ24gaHdfYmFzZSB0byBidWZmZXJfc2l6ZSAqLwogCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAotCQkJICAgICAiaHdfcHRyIHNraXBwaW5nISBbUV0gIgorCQkJICAgICAiaHdfcHRyIHNraXBwaW5nISAlcyIKIAkJCSAgICAgIihwb3M9JWxkLCBkZWx0YT0lbGQsIHBlcmlvZD0lbGQsICIKLQkJCSAgICAgImpkZWx0YT0lbHUvJWx1LyVsdSlcbiIsCisJCQkgICAgICJqZGVsdGE9JWx1LyVsdS8lbHUsIGh3X3B0cj0lbGQvJWxkKVxuIiwKKwkJCSAgICAgaW5faW50ZXJydXB0ID8gIltRXSAiIDogIiIsCiAJCQkgICAgIChsb25nKXBvcywgKGxvbmcpaGRlbHRhLAogCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSwgamRlbHRhLAotCQkJICAgICAoKGhkZWx0YSAqIEhaKSAvIHJ1bnRpbWUtPnJhdGUpLCBkZWx0YSk7Ci0JCWh3X3B0cl9pbnRlcnJ1cHQgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsKLQkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIGRlbHRhOwotCQlpZiAoaHdfcHRyX2ludGVycnVwdCA+PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCWh3X3B0cl9pbnRlcnJ1cHQgLT0gcnVudGltZS0+Ym91bmRhcnk7Ci0JCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KLQkJaHdfYmFzZSA9IG5ld19od19wdHIgPSBod19wdHJfaW50ZXJydXB0OwotCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCi0JCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJICAgICAoKGhkZWx0YSAqIEhaKSAvIHJ1bnRpbWUtPnJhdGUpLCBod19iYXNlLAorCQkJICAgICAodW5zaWduZWQgbG9uZylvbGRfaHdfcHRyLAorCQkJICAgICAodW5zaWduZWQgbG9uZyluZXdfaHdfcHRyKTsKKwkJLyogcmVzZXQgdmFsdWVzIHRvIHByb3BlciBzdGF0ZSAqLwogCQlkZWx0YSA9IDA7CisJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyIC0gKG5ld19od19wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZSk7CiAJfQogIG5vX2ppZmZpZXNfY2hlY2s6CiAJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUgKyBydW50aW1lLT5wZXJpb2Rfc2l6ZSAvIDIpIHsKIAkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKLQkJCSAgICAgIkxvc3QgaW50ZXJydXB0cz8gIgotCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAlcyIKKwkJCSAgICAgIihzdHJlYW09JWksIGRlbHRhPSVsZCwgbmV3X2h3X3B0cj0lbGQsICIKKwkJCSAgICAgIm9sZF9od19wdHI9JWxkKVxuIiwKKwkJCSAgICAgaW5faW50ZXJydXB0ID8gIltRXSAiIDogIiIsCiAJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylkZWx0YSwKLQkJCSAgICAgKGxvbmcpaHdfcHRyX2ludGVycnVwdCk7Ci0JCS8qIHJlYmFzZSBod19wdHJfaW50ZXJydXB0ICovCi0JCWh3X3B0cl9pbnRlcnJ1cHQgPQotCQkJbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJCSAgICAgKGxvbmcpbmV3X2h3X3B0ciwKKwkJCSAgICAgKGxvbmcpb2xkX2h3X3B0cik7CiAJfQotCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBod19wdHJfaW50ZXJydXB0OworCisJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID09IG5ld19od19wdHIpCisJCXJldHVybiAwOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKLQlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKLQkJcmV0dXJuIDA7Ci0KKwlpZiAoaW5faW50ZXJydXB0KSB7CisJCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBuZXdfaHdfcHRyIC0KKwkJCQkobmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwl9CiAJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKIAlydW50aW1lLT5od19wdHJfamlmZmllcyA9IGppZmZpZXM7CiAJaWYgKHJ1bnRpbWUtPnRzdGFtcF9tb2RlID09IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFKQogCQlzbmRfcGNtX2dldHRpbWUocnVudGltZSwgKHN0cnVjdCB0aW1lc3BlYyAqKSZydW50aW1lLT5zdGF0dXMtPnRzdGFtcCk7CiAKLQlyZXR1cm4gc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3Vic3RyZWFtLCBydW50aW1lKTsKKwlyZXR1cm4gc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIH0KIAogLyogQ0FVVElPTjogY2FsbCBpdCB3aXRoIGlycSBkaXNhYmxlZCAqLwogaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19iYXNlOwotCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwotCXVuc2lnbmVkIGxvbmcgamRlbHRhOwotCi0Jb2xkX2h3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOwotCXBvcyA9IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3Vic3RyZWFtLCBydW50aW1lKTsKLQlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikgewotCQl4cnVuKHN1YnN0cmVhbSk7Ci0JCXJldHVybiAtRVBJUEU7Ci0JfQotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMTYpKSB7Ci0JCWNoYXIgbmFtZVsxNl07Ci0JCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKLQkJc25kX3ByaW50ZCgiaHdfdXBkYXRlOiAlczogcG9zPTB4JXgvMHgleC8weCV4LCAiCi0JCQkgICAiaHdwdHI9MHglbHgsIGh3X2Jhc2U9MHglbHgsIGh3X2ludHI9MHglbHhcbiIsCi0JCQkgICBuYW1lLCAodW5zaWduZWQgaW50KXBvcywKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsCi0JCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmh3X3B0cl9iYXNlLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCk7Ci0JfQotCi0JaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOwotCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwotCi0JZGVsdGEgPSBuZXdfaHdfcHRyIC0gb2xkX2h3X3B0cjsKLQlqZGVsdGEgPSBqaWZmaWVzIC0gcnVudGltZS0+aHdfcHRyX2ppZmZpZXM7Ci0JaWYgKGRlbHRhIDwgMCkgewotCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKGRlbHRhIDwgMCkgewotCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCi0JCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAiCi0JCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgb2xkX3B0cj0lbGQsIGpkZWx0YT0lbGkpXG4iLAotCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKLQkJCQkgICAgIChsb25nKW9sZF9od19wdHIsIGpkZWx0YSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCWh3X2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKLQl9Ci0JLyogRG8gamlmZmllcyBjaGVjayBvbmx5IGluIHhydW5fZGVidWcgbW9kZSAqLwotCWlmICgheHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDQpKQotCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7Ci0JaWYgKGRlbHRhIDwgcnVudGltZS0+ZGVsYXkpCi0JCWdvdG8gbm9famlmZmllc19jaGVjazsKLQlkZWx0YSAtPSBydW50aW1lLT5kZWxheTsKLQlpZiAoKChkZWx0YSAqIEhaKSAvIHJ1bnRpbWUtPnJhdGUpID4gamRlbHRhICsgSFovMTAwKSB7Ci0JCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCi0JCQkgICAgICJod19wdHIgc2tpcHBpbmchICIKLQkJCSAgICAgIihwb3M9JWxkLCBkZWx0YT0lbGQsIHBlcmlvZD0lbGQsIGpkZWx0YT0lbHUvJWx1KVxuIiwKLQkJCSAgICAgKGxvbmcpcG9zLCAobG9uZylkZWx0YSwKLQkJCSAgICAgKGxvbmcpcnVudGltZS0+cGVyaW9kX3NpemUsIGpkZWx0YSwKLQkJCSAgICAgKChkZWx0YSAqIEhaKSAvIHJ1bnRpbWUtPnJhdGUpKTsKLQkJcmV0dXJuIDA7Ci0JfQotIG5vX2ppZmZpZXNfY2hlY2s6Ci0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKLQkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKLQkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7Ci0KLQlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKLQkJcmV0dXJuIDA7Ci0KLQlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7Ci0JcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwotCXJ1bnRpbWUtPmh3X3B0cl9qaWZmaWVzID0gamlmZmllczsKLQlpZiAocnVudGltZS0+dHN0YW1wX21vZGUgPT0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUpCi0JCXNuZF9wY21fZ2V0dGltZShydW50aW1lLCAoc3RydWN0IHRpbWVzcGVjICopJnJ1bnRpbWUtPnN0YXR1cy0+dHN0YW1wKTsKLQotCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOworCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN1YnN0cmVhbSwgMCk7CiB9CiAKIC8qKgpAQCAtNzQ1LDEwICs3NjYsMTMgQEAKIAkJCXVuc2lnbmVkIGludCByYXRzX2NvdW50LCBzdHJ1Y3Qgc25kX3JhdG51bSAqcmF0cywKIAkJCXVuc2lnbmVkIGludCAqbnVtcCwgdW5zaWduZWQgaW50ICpkZW5wKQogewotCXVuc2lnbmVkIGludCBiZXN0X251bSwgYmVzdF9kaWZmLCBiZXN0X2RlbjsKKwl1bnNpZ25lZCBpbnQgYmVzdF9udW0sIGJlc3RfZGVuOworCWludCBiZXN0X2RpZmY7CiAJdW5zaWduZWQgaW50IGs7CiAJc3RydWN0IHNuZF9pbnRlcnZhbCB0OwogCWludCBlcnI7CisJdW5zaWduZWQgaW50IHJlc3VsdF9udW0sIHJlc3VsdF9kZW47CisJaW50IHJlc3VsdF9kaWZmOwogCiAJYmVzdF9udW0gPSBiZXN0X2RlbiA9IGJlc3RfZGlmZiA9IDA7CiAJZm9yIChrID0gMDsgayA8IHJhdHNfY291bnQ7ICsraykgewpAQCAtNzcwLDYgKzc5NCw4IEBACiAJCQkJZGVuIC09IHI7CiAJCX0KIAkJZGlmZiA9IG51bSAtIHEgKiBkZW47CisJCWlmIChkaWZmIDwgMCkKKwkJCWRpZmYgPSAtZGlmZjsKIAkJaWYgKGJlc3RfbnVtID09IDAgfHwKIAkJICAgIGRpZmYgKiBiZXN0X2RlbiA8IGJlc3RfZGlmZiAqIGRlbikgewogCQkJYmVzdF9kaWZmID0gZGlmZjsKQEAgLTc4NCw2ICs4MTAsOSBAQAogCXQubWluID0gZGl2X2Rvd24oYmVzdF9udW0sIGJlc3RfZGVuKTsKIAl0Lm9wZW5taW4gPSAhIShiZXN0X251bSAlIGJlc3RfZGVuKTsKIAkKKwlyZXN1bHRfbnVtID0gYmVzdF9udW07CisJcmVzdWx0X2RpZmYgPSBiZXN0X2RpZmY7CisJcmVzdWx0X2RlbiA9IGJlc3RfZGVuOwogCWJlc3RfbnVtID0gYmVzdF9kZW4gPSBiZXN0X2RpZmYgPSAwOwogCWZvciAoayA9IDA7IGsgPCByYXRzX2NvdW50OyArK2spIHsKIAkJdW5zaWduZWQgaW50IG51bSA9IHJhdHNba10ubnVtOwpAQCAtODA2LDYgKzgzNSw4IEBACiAJCQkJZGVuICs9IHJhdHNba10uZGVuX3N0ZXAgLSByOwogCQl9CiAJCWRpZmYgPSBxICogZGVuIC0gbnVtOworCQlpZiAoZGlmZiA8IDApCisJCQlkaWZmID0gLWRpZmY7CiAJCWlmIChiZXN0X251bSA9PSAwIHx8CiAJCSAgICBkaWZmICogYmVzdF9kZW4gPCBiZXN0X2RpZmYgKiBkZW4pIHsKIAkJCWJlc3RfZGlmZiA9IGRpZmY7CkBAIC04MjUsMTAgKzg1NiwxNCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNuZF9pbnRlcnZhbF9zaW5nbGUoaSkpIHsKKwkJaWYgKGJlc3RfZGlmZiAqIHJlc3VsdF9kZW4gPCByZXN1bHRfZGlmZiAqIGJlc3RfZGVuKSB7CisJCQlyZXN1bHRfbnVtID0gYmVzdF9udW07CisJCQlyZXN1bHRfZGVuID0gYmVzdF9kZW47CisJCX0KIAkJaWYgKG51bXApCi0JCQkqbnVtcCA9IGJlc3RfbnVtOworCQkJKm51bXAgPSByZXN1bHRfbnVtOwogCQlpZiAoZGVucCkKLQkJCSpkZW5wID0gYmVzdF9kZW47CisJCQkqZGVucCA9IHJlc3VsdF9kZW47CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xNjQzLDcgKzE2NzgsNyBAQAogCiAJc25kX3BjbV9zdHJlYW1fbG9ja19pcnFzYXZlKHN1YnN0cmVhbSwgZmxhZ3MpOwogCWlmICghc25kX3BjbV9ydW5uaW5nKHN1YnN0cmVhbSkgfHwKLQkgICAgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdWJzdHJlYW0pIDwgMCkKKwkgICAgc25kX3BjbV91cGRhdGVfaHdfcHRyMChzdWJzdHJlYW0sIDEpIDwgMCkKIAkJZ290byBfZW5kOwogCiAJaWYgKHN1YnN0cmVhbS0+dGltZXJfcnVubmluZykKQEAgLTE2NzQsNyArMTcwOSw3IEBACiAJbG9uZyB0b3V0OwogCiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwotCWFkZF93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZydW50aW1lLT50c2xlZXAsICZ3YWl0KTsKIAlmb3IgKDs7KSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJZXJyID0gLUVSRVNUQVJUU1lTOwpAQCAtMTcxNyw3ICsxNzUyLDcgQEAKIAkJCWJyZWFrOwogCX0KICBfZW5kbG9vcDoKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcnVudGltZS0+dHNsZWVwLCAmd2FpdCk7CiAJKmF2YWlscCA9IGF2YWlsOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNzc2LDYgKzE4MTEsNyBAQAogCQlnb3RvIF9lbmRfdW5sb2NrOwogCX0KIAorCXJ1bnRpbWUtPnR3YWtlID0gMTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBhcHBsX3B0ciwgYXBwbF9vZnM7CiAJCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwpAQCAtMTc5NywxNSArMTgzMywxNyBAQAogCQlpZiAoZnJhbWVzID4gY29udCkKIAkJCWZyYW1lcyA9IGNvbnQ7CiAJCWlmIChzbmRfQlVHX09OKCFmcmFtZXMpKSB7CisJCQlydW50aW1lLT50d2FrZSA9IDA7CiAJCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlhcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOwogCQlhcHBsX29mcyA9IGFwcGxfcHRyICUgcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKChlcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcykpIDwgMCkKLQkJCWdvdG8gX2VuZDsKKwkJZXJyID0gdHJhbnNmZXIoc3Vic3RyZWFtLCBhcHBsX29mcywgZGF0YSwgb2Zmc2V0LCBmcmFtZXMpOwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX2VuZF91bmxvY2s7CiAJCXN3aXRjaCAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSkgewogCQljYXNlIFNORFJWX1BDTV9TVEFURV9YUlVOOgogCQkJZXJyID0gLUVQSVBFOwpAQCAtMTgzNCw4ICsxODcyLDEwIEBACiAJCX0KIAl9CiAgX2VuZF91bmxvY2s6CisJcnVudGltZS0+dHdha2UgPSAwOworCWlmICh4ZmVyID4gMCAmJiBlcnIgPj0gMCkKKwkJc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIAlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0gX2VuZDoKIAlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IGVycjsKIH0KIApAQCAtMTk5Myw2ICsyMDMzLDcgQEAKIAkJZ290byBfZW5kX3VubG9jazsKIAl9CiAKKwlydW50aW1lLT50d2FrZSA9IDE7CiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCXNuZF9wY21fdWZyYW1lc190IGZyYW1lcywgYXBwbF9wdHIsIGFwcGxfb2ZzOwogCQlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbDsKQEAgLTIwMjEsMTUgKzIwNjIsMTcgQEAKIAkJaWYgKGZyYW1lcyA+IGNvbnQpCiAJCQlmcmFtZXMgPSBjb250OwogCQlpZiAoc25kX0JVR19PTighZnJhbWVzKSkgeworCQkJcnVudGltZS0+dHdha2UgPSAwOwogCQkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYXBwbF9wdHIgPSBydW50aW1lLT5jb250cm9sLT5hcHBsX3B0cjsKIAkJYXBwbF9vZnMgPSBhcHBsX3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCWlmICgoZXJyID0gdHJhbnNmZXIoc3Vic3RyZWFtLCBhcHBsX29mcywgZGF0YSwgb2Zmc2V0LCBmcmFtZXMpKSA8IDApCi0JCQlnb3RvIF9lbmQ7CisJCWVyciA9IHRyYW5zZmVyKHN1YnN0cmVhbSwgYXBwbF9vZnMsIGRhdGEsIG9mZnNldCwgZnJhbWVzKTsKIAkJc25kX3BjbV9zdHJlYW1fbG9ja19pcnEoc3Vic3RyZWFtKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9lbmRfdW5sb2NrOwogCQlzd2l0Y2ggKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUpIHsKIAkJY2FzZSBTTkRSVl9QQ01fU1RBVEVfWFJVTjoKIAkJCWVyciA9IC1FUElQRTsKQEAgLTIwNTIsOCArMjA5NSwxMCBAQAogCQl4ZmVyICs9IGZyYW1lczsKIAl9CiAgX2VuZF91bmxvY2s6CisJcnVudGltZS0+dHdha2UgPSAwOworCWlmICh4ZmVyID4gMCAmJiBlcnIgPj0gMCkKKwkJc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIAlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0gX2VuZDoKIAlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwppbmRleCBjYWE3Nzk2Li5kNmQ0OWQ2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTQzNCwzICs0MzUsNTcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKTsKKworaW50IF9zbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisKKwlpZiAoUENNX1JVTlRJTUVfQ0hFQ0soc3Vic3RyZWFtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+PSBzaXplKQorCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgbGFyZ2UgZW5vdWdoICovCisJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKKwl9CisJcnVudGltZS0+ZG1hX2FyZWEgPSBfX3ZtYWxsb2Moc2l6ZSwgZ2ZwX2ZsYWdzLCBQQUdFX0tFUk5FTCk7CisJaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0woX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKTsKKworLyoqCisgKiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyIC0gZnJlZSB2bWFsbG9jIGJ1ZmZlcgorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB3aXRoIGEgYnVmZmVyIGFsbG9jYXRlZCBieQorICoJc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoKQorICovCitpbnQgc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCisJaWYgKFBDTV9SVU5USU1FX0NIRUNLKHN1YnN0cmVhbSkpCisJCXJldHVybiAtRUlOVkFMOworCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcik7CisKKy8qKgorICogc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSAtIG1hcCB2bWFsbG9jIGJ1ZmZlciBvZmZzZXQgdG8gcGFnZSBzdHJ1Y3QKKyAqIEBzdWJzdHJlYW06IHRoZSBzdWJzdHJlYW0gd2l0aCBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAqCXNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKCkKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgYnVmZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkIGFzIHRoZSBwYWdlIGNhbGxiYWNrIGluIHRoZSBQQ00gb3BzLgorICovCitzdHJ1Y3QgcGFnZSAqc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMjViMDY0MS4uODcyODg3NiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTMxNSwxMCArMzE2LDEwIEBACiAJaWYgKCFwYXJhbXMtPmluZm8pCiAJCXBhcmFtcy0+aW5mbyA9IGh3LT5pbmZvICYgflNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTOwogCWlmICghcGFyYW1zLT5maWZvX3NpemUpIHsKLQkJaWYgKHNuZF9tYXNrX21pbigmcGFyYW1zLT5tYXNrc1tTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUXSkgPT0KLQkJICAgIHNuZF9tYXNrX21heCgmcGFyYW1zLT5tYXNrc1tTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUXSkgJiYKLSAgICAgICAgICAgICAgICAgICAgc25kX21hc2tfbWluKCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMU10pID09Ci0gICAgICAgICAgICAgICAgICAgIHNuZF9tYXNrX21heCgmcGFyYW1zLT5tYXNrc1tTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFNdKSkgeworCQltID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworCQlpID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCQlpZiAoc25kX21hc2tfbWluKG0pID09IHNuZF9tYXNrX21heChtKSAmJgorICAgICAgICAgICAgICAgICAgICBzbmRfaW50ZXJ2YWxfbWluKGkpID09IHNuZF9pbnRlcnZhbF9tYXgoaSkpIHsKIAkJCWNoYW5nZWQgPSBzdWJzdHJlYW0tPm9wcy0+aW9jdGwoc3Vic3RyZWFtLAogCQkJCQlTTkRSVl9QQ01fSU9DVEwxX0ZJRk9fU0laRSwgcGFyYW1zKTsKIAkJCWlmIChjaGFuZ2VkIDwgMCkKQEAgLTM2Niw2ICszNjcsMzggQEAKIAlyZXR1cm4gdXNlY3M7CiB9CiAKK3N0YXRpYyBpbnQgY2FsY19ib3VuZGFyeShzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXVfaW50NjRfdCBib3VuZGFyeTsKKworCWJvdW5kYXJ5ID0gKHVfaW50NjRfdClydW50aW1lLT5idWZmZXJfc2l6ZSAqCisJCSAgICh1X2ludDY0X3QpcnVudGltZS0+cGVyaW9kX3NpemU7CisjaWYgQklUU19QRVJfTE9ORyA8IDY0CisJLyogdHJ5IHRvIGZpbmQgbG93ZXN0IGNvbW1vbiBtdWx0aXBsZSBmb3IgYnVmZmVyIGFuZCBwZXJpb2QgKi8KKwlpZiAoYm91bmRhcnkgPiBMT05HX01BWCAtIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCXVfaW50MzJfdCByZW1haW5kZXIgPSAtMTsKKwkJdV9pbnQzMl90IGRpdmlkZW50ID0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCXVfaW50MzJfdCBkaXZpc29yID0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCXdoaWxlIChyZW1haW5kZXIpIHsKKwkJCXJlbWFpbmRlciA9IGRpdmlkZW50ICUgZGl2aXNvcjsKKwkJCWlmIChyZW1haW5kZXIpIHsKKwkJCQlkaXZpZGVudCA9IGRpdmlzb3I7CisJCQkJZGl2aXNvciA9IHJlbWFpbmRlcjsKKwkJCX0KKwkJfQorCQlib3VuZGFyeSA9IGRpdl91NjQoYm91bmRhcnksIGRpdmlzb3IpOworCQlpZiAoYm91bmRhcnkgPiBMT05HX01BWCAtIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJfQorI2VuZGlmCisJaWYgKGJvdW5kYXJ5ID09IDApCisJCXJldHVybiAtRVJBTkdFOworCXJ1bnRpbWUtPmJvdW5kYXJ5ID0gYm91bmRhcnk7CisJd2hpbGUgKHJ1bnRpbWUtPmJvdW5kYXJ5ICogMiA8PSBMT05HX01BWCAtIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlydW50aW1lLT5ib3VuZGFyeSAqPSAyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNuZF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTQ0MSw5ICs0NzQsOSBAQAogCXJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJcnVudGltZS0+c2lsZW5jZV90aHJlc2hvbGQgPSAwOwogCXJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA9IDA7Ci0JcnVudGltZS0+Ym91bmRhcnkgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQl3aGlsZSAocnVudGltZS0+Ym91bmRhcnkgKiAyIDw9IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCXJ1bnRpbWUtPmJvdW5kYXJ5ICo9IDI7CisJZXJyID0gY2FsY19ib3VuZGFyeShydW50aW1lKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBfZXJyb3I7CiAKIAlzbmRfcGNtX3RpbWVyX3Jlc29sdXRpb25fY2hhbmdlKHN1YnN0cmVhbSk7CiAJcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IFNORFJWX1BDTV9TVEFURV9TRVRVUDsKQEAgLTUxNiw2ICs1NDksNyBAQAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCWludCBlcnI7CiAKIAlpZiAoUENNX1JVTlRJTUVfQ0hFQ0soc3Vic3RyZWFtKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTU0MCw2ICs1NzQsNyBAQAogCQlpZiAocGFyYW1zLT5zaWxlbmNlX3RocmVzaG9sZCA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWVyciA9IDA7CiAJc25kX3BjbV9zdHJlYW1fbG9ja19pcnEoc3Vic3RyZWFtKTsKIAlydW50aW1lLT50c3RhbXBfbW9kZSA9IHBhcmFtcy0+dHN0YW1wX21vZGU7CiAJcnVudGltZS0+cGVyaW9kX3N0ZXAgPSBwYXJhbXMtPnBlcmlvZF9zdGVwOwpAQCAtNTUzLDEwICs1ODgsMTAgQEAKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBVTE9OR19NQVgpOwotCQl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJCWVyciA9IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN1YnN0cmVhbSwgcnVudGltZSk7CiAJfQogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fc3dfcGFyYW1zX3VzZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC05MTcsNiArOTUyLDcgQEAKIAkJcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IHN0YXRlOwogCX0KIAl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJd2FrZV91cCgmcnVudGltZS0+dHNsZWVwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhY3Rpb25fb3BzIHNuZF9wY21fYWN0aW9uX3N0b3AgPSB7CkBAIC0xMDAyLDYgKzEwMzgsNyBAQAogCQkJCQkgU05EUlZfVElNRVJfRVZFTlRfTVBBVVNFLAogCQkJCQkgJnJ1bnRpbWUtPnRyaWdnZXJfdHN0YW1wKTsKIAkJd2FrZV91cCgmcnVudGltZS0+c2xlZXApOworCQl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogCX0gZWxzZSB7CiAJCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfUlVOTklORzsKIAkJaWYgKHN1YnN0cmVhbS0+dGltZXIpCkBAIC0xMDU5LDYgKzEwOTYsNyBAQAogCXJ1bnRpbWUtPnN0YXR1cy0+c3VzcGVuZGVkX3N0YXRlID0gcnVudGltZS0+c3RhdHVzLT5zdGF0ZTsKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRDsKIAl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJd2FrZV91cCgmcnVudGltZS0+dHNsZWVwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhY3Rpb25fb3BzIHNuZF9wY21fYWN0aW9uX3N1c3BlbmQgPSB7CkBAIC0zMTYyLDkgKzMyMDAsNyBAQAogCWxvbmcgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAotI2lmZGVmIHBncHJvdF9ub25jYWNoZWQKIAlhcmVhLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKGFyZWEtPnZtX3BhZ2VfcHJvdCk7Ci0jZW5kaWYKIAlhcmVhLT52bV9mbGFncyB8PSBWTV9JTzsKIAlzaXplID0gYXJlYS0+dm1fZW5kIC0gYXJlYS0+dm1fc3RhcnQ7CiAJb2Zmc2V0ID0gYXJlYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKQEAgLTMxNzgsNiArMzIxNCwxNSBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9tbWFwX2lvbWVtKTsKICNlbmRpZiAvKiBTTkRSVl9QQ01fSU5GT19NTUFQICovCiAKKy8qIG1tYXAgY2FsbGJhY2sgd2l0aCBwZ3Byb3Rfbm9uY2FjaGVkICovCitpbnQgc25kX3BjbV9saWJfbW1hcF9ub25jYWNoZWQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQoreworCWFyZWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQoYXJlYS0+dm1fcGFnZV9wcm90KTsKKwlyZXR1cm4gc25kX3BjbV9kZWZhdWx0X21tYXAoc3Vic3RyZWFtLCBhcmVhKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX3BjbV9saWJfbW1hcF9ub25jYWNoZWQpOworCiAvKgogICogbW1hcCBETUEgYnVmZmVyCiAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYwppbmRleCA4Y2EyYmUzLi40OGVjYTlmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCkBAIC0yMTkwLDcgKzIxOTAsNyBAQAogCQlpZiAocC0+Y21kID09IGNtZCkKIAkJCXJldHVybiBwLT5mdW5jKGNsaWVudCwgYXJnKTsKIAl9Ci0Jc25kX3ByaW50ZCgic2VxIHVua25vd24gaW9jdGwoKSAweCV4ICh0eXBlPSclYycsIG51bWJlcj0weCUyeClcbiIsCisJc25kX3ByaW50ZCgic2VxIHVua25vd24gaW9jdGwoKSAweCV4ICh0eXBlPSclYycsIG51bWJlcj0weCUwMngpXG4iLAogCQkgICBjbWQsIF9JT0NfVFlQRShjbWQpLCBfSU9DX05SKGNtZCkpOwogCXJldHVybiAtRU5PVFRZOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYwppbmRleCBmNzQ1YzMxLi4xNjBiMWJkIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYwpAQCAtMzMsMjIgKzMzLDIxIEBACiAKICNkZWZpbmUgU0tFV19CQVNFCTB4MTAwMDAJLyogMTZiaXQgc2hpZnQgKi8KIAotc3RhdGljIHZvaWQgc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHN0cnVjdCBzbmRfc2VxX3RpbWVyX3RpY2sgKnRpY2ssCi0JCQkJCSAgICAgIGludCB0ZW1wbywgaW50IHBwcSkKK3N0YXRpYyB2b2lkIHNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbihzdHJ1Y3Qgc25kX3NlcV90aW1lciAqdG1yKQogewotCWlmICh0ZW1wbyA8IDEwMDAwMDApCi0JCXRpY2stPnJlc29sdXRpb24gPSAodGVtcG8gKiAxMDAwKSAvIHBwcTsKKwlpZiAodG1yLT50ZW1wbyA8IDEwMDAwMDApCisJCXRtci0+dGljay5yZXNvbHV0aW9uID0gKHRtci0+dGVtcG8gKiAxMDAwKSAvIHRtci0+cHBxOwogCWVsc2UgewogCQkvKiBtaWdodCBvdmVyZmxvdy4uICovCiAJCXVuc2lnbmVkIGludCBzOwotCQlzID0gdGVtcG8gJSBwcHE7Ci0JCXMgPSAocyAqIDEwMDApIC8gcHBxOwotCQl0aWNrLT5yZXNvbHV0aW9uID0gKHRlbXBvIC8gcHBxKSAqIDEwMDA7Ci0JCXRpY2stPnJlc29sdXRpb24gKz0gczsKKwkJcyA9IHRtci0+dGVtcG8gJSB0bXItPnBwcTsKKwkJcyA9IChzICogMTAwMCkgLyB0bXItPnBwcTsKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAodG1yLT50ZW1wbyAvIHRtci0+cHBxKSAqIDEwMDA7CisJCXRtci0+dGljay5yZXNvbHV0aW9uICs9IHM7CiAJfQotCWlmICh0aWNrLT5yZXNvbHV0aW9uIDw9IDApCi0JCXRpY2stPnJlc29sdXRpb24gPSAxOwotCXNuZF9zZXFfdGltZXJfdXBkYXRlX3RpY2sodGljaywgMCk7CisJaWYgKHRtci0+dGljay5yZXNvbHV0aW9uIDw9IDApCisJCXRtci0+dGljay5yZXNvbHV0aW9uID0gMTsKKwlzbmRfc2VxX3RpbWVyX3VwZGF0ZV90aWNrKCZ0bXItPnRpY2ssIDApOwogfQogCiAvKiBjcmVhdGUgbmV3IHRpbWVyIChjb25zdHJ1Y3RvcikgKi8KQEAgLTk2LDcgKzk1LDcgQEAKIAkvKiBzZXR1cCBkZWZhdWx0cyAqLwogCXRtci0+cHBxID0gOTY7CQkvKiA5NiBQUFEgKi8KIAl0bXItPnRlbXBvID0gNTAwMDAwOwkvKiAxMjAgQlBNICovCi0Jc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24odG1yKTsKIAl0bXItPnJ1bm5pbmcgPSAwOwogCiAJdG1yLT50eXBlID0gU05EUlZfU0VRX1RJTUVSX0FMU0E7CkBAIC0xODAsNyArMTc5LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdG1yLT5sb2NrLCBmbGFncyk7CiAJaWYgKCh1bnNpZ25lZCBpbnQpdGVtcG8gIT0gdG1yLT50ZW1wbykgewogCQl0bXItPnRlbXBvID0gdGVtcG87Ci0JCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbigmdG1yLT50aWNrLCB0bXItPnRlbXBvLCB0bXItPnBwcSk7CisJCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbih0bXIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTIwNSw3ICsyMDQsNyBAQAogCX0KIAogCXRtci0+cHBxID0gcHBxOwotCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbigmdG1yLT50aWNrLCB0bXItPnRlbXBvLCB0bXItPnBwcSk7CisJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHRtcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1yLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggMjUyZTA0Yy4uN2Y0MTk5MCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNDUsMTA5ICs0NSwyMyBAQAogI2RlZmluZSBNQVhfUENNX1NVQlNUUkVBTVMJMTI4CiAjZGVmaW5lIE1BWF9NSURJX0RFVklDRVMJMgogCi0jaWYgMCAvKiBlbXUxMGsxIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgxMjggKiAxMDI0KQotc3RhdGljIGludCBlbXUxMGsxX3BsYXliYWNrX2NvbnN0cmFpbnRzKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCi17Ci0JaW50IGVycjsKLQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCAyNTYsIFVJTlRfTUFYKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKLX0KLSNkZWZpbmUgYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzIGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMKLSNlbmRpZgotCi0jaWYgMCAvKiBSTUU5NjUyIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgyNiAqIDY0ICogMTAyNCkKLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMjYKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWAkyNgotI2RlZmluZSBVU0VfUEVSSU9EU19NSU4JCTIKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUFYCQkyCi0jZW5kaWYKLQotI2lmIDAgLyogSUNFMTcxMiBlbXVsYXRpb24gKi8KLSNkZWZpbmUgTUFYX0JVRkZFUl9TSVpFCQkoMjU2ICogMTAyNCkKLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMTAKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWAkxMAotI2RlZmluZSBVU0VfUEVSSU9EU19NSU4JCTEKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUFYCQkxMDI0Ci0jZW5kaWYKLQotI2lmIDAgLyogVURBMTM0MSBlbXVsYXRpb24gKi8KLSNkZWZpbmUgTUFYX0JVRkZFUl9TSVpFCQkoMTYzODApCi0jZGVmaW5lIFVTRV9GT1JNQVRTCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUlOCTIKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWAkyCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTI1NQotI2VuZGlmCi0KLSNpZiAwIC8qIHNpbXBsZSBBQzk3IGJyaWRnZSAoaW50ZWw4eDApIHdpdGggNDhrSHogQUM5NyBvbmx5IGNvZGVjICovCi0jZGVmaW5lIFVTRV9GT1JNQVRTCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUlOCTIKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWAkyCi0jZGVmaW5lIFVTRV9SQVRFCQlTTkRSVl9QQ01fUkFURV80ODAwMAotI2RlZmluZSBVU0VfUkFURV9NSU4JCTQ4MDAwCi0jZGVmaW5lIFVTRV9SQVRFX01BWAkJNDgwMDAKLSNlbmRpZgotCi0jaWYgMCAvKiBDQTAxMDYgKi8KLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1JBVEUJCShTTkRSVl9QQ01fUkFURV80ODAwMHxTTkRSVl9QQ01fUkFURV85NjAwMHxTTkRSVl9QQ01fUkFURV8xOTIwMDApIAotI2RlZmluZSBVU0VfUkFURV9NSU4JCTQ4MDAwIAotI2RlZmluZSBVU0VfUkFURV9NQVgJCTE5MjAwMAotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgoNjU1MzYtNjQpKjgpCi0jZGVmaW5lIE1BWF9QRVJJT0RfU0laRQkJKDY1NTM2LTY0KQotI2RlZmluZSBVU0VfUEVSSU9EU19NSU4JCTIKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUFYCQk4Ci0jZW5kaWYKLQotCiAvKiBkZWZhdWx0cyAqLwotI2lmbmRlZiBNQVhfQlVGRkVSX1NJWkUKICNkZWZpbmUgTUFYX0JVRkZFUl9TSVpFCQkoNjQqMTAyNCkKLSNlbmRpZgotI2lmbmRlZiBNQVhfUEVSSU9EX1NJWkUKKyNkZWZpbmUgTUlOX1BFUklPRF9TSVpFCQk2NAogI2RlZmluZSBNQVhfUEVSSU9EX1NJWkUJCU1BWF9CVUZGRVJfU0laRQotI2VuZGlmCi0jaWZuZGVmIFVTRV9GT1JNQVRTCiAjZGVmaW5lIFVTRV9GT1JNQVRTIAkJKFNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKLSNlbmRpZgotI2lmbmRlZiBVU0VfUkFURQogI2RlZmluZSBVU0VfUkFURQkJU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUyB8IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAKICNkZWZpbmUgVVNFX1JBVEVfTUlOCQk1NTAwCiAjZGVmaW5lIFVTRV9SQVRFX01BWAkJNDgwMDAKLSNlbmRpZgotI2lmbmRlZiBVU0VfQ0hBTk5FTFNfTUlOCiAjZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4gCTEKLSNlbmRpZgotI2lmbmRlZiBVU0VfQ0hBTk5FTFNfTUFYCiAjZGVmaW5lIFVTRV9DSEFOTkVMU19NQVggCTIKLSNlbmRpZgotI2lmbmRlZiBVU0VfUEVSSU9EU19NSU4KICNkZWZpbmUgVVNFX1BFUklPRFNfTUlOIAkxCi0jZW5kaWYKLSNpZm5kZWYgVVNFX1BFUklPRFNfTUFYCiAjZGVmaW5lIFVTRV9QRVJJT0RTX01BWCAJMTAyNAotI2VuZGlmCi0jaWZuZGVmIGFkZF9wbGF5YmFja19jb25zdHJhaW50cwotI2RlZmluZSBhZGRfcGxheWJhY2tfY29uc3RyYWludHMoeCkgMAotI2VuZGlmCi0jaWZuZGVmIGFkZF9jYXB0dXJlX2NvbnN0cmFpbnRzCi0jZGVmaW5lIGFkZF9jYXB0dXJlX2NvbnN0cmFpbnRzKHgpIDAKLSNlbmRpZgogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSB7MSwgWzEgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB9Oworc3RhdGljIGNoYXIgKm1vZGVsW1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gTlVMTH07CiBzdGF0aWMgaW50IHBjbV9kZXZzW1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMX07CiBzdGF0aWMgaW50IHBjbV9zdWJzdHJlYW1zW1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gOH07CiAvL3N0YXRpYyBpbnQgbWlkaV9kZXZzW1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMn07CkBAIC0xNjIsNiArNzYsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgZHVtbXkgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSB0aGlzIGR1bW15IHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShtb2RlbCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtb2RlbCwgIlNvdW5kY2FyZCBtb2RlbC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGNtX2RldnMsICJQQ00gZGV2aWNlcyAjICgwLTQpIGZvciBkdW1teSBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX3N1YnN0cmVhbXMsIGludCwgTlVMTCwgMDQ0NCk7CkBAIC0xOTMsOSArMTA5LDI4IEBACiAJc25kX3BjbV91ZnJhbWVzX3QgKCpwb2ludGVyKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKik7CiB9OwogCitzdHJ1Y3QgZHVtbXlfbW9kZWwgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50ICgqcGxheWJhY2tfY29uc3RyYWludHMpKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOworCWludCAoKmNhcHR1cmVfY29uc3RyYWludHMpKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOworCXU2NCBmb3JtYXRzOworCXNpemVfdCBidWZmZXJfYnl0ZXNfbWF4OworCXNpemVfdCBwZXJpb2RfYnl0ZXNfbWluOworCXNpemVfdCBwZXJpb2RfYnl0ZXNfbWF4OworCXVuc2lnbmVkIGludCBwZXJpb2RzX21pbjsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kc19tYXg7CisJdW5zaWduZWQgaW50IHJhdGVzOworCXVuc2lnbmVkIGludCByYXRlX21pbjsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9tYXg7CisJdW5zaWduZWQgaW50IGNoYW5uZWxzX21pbjsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWF4OworfTsKKwogc3RydWN0IHNuZF9kdW1teSB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBkdW1teV9tb2RlbCAqbW9kZWw7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faHc7CiAJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOwogCWludCBtaXhlcl92b2x1bWVbTUlYRVJfQUREUl9MQVNUKzFdWzJdOwogCWludCBjYXB0dXJlX3NvdXJjZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CkBAIC0yMDMsNiArMTM4LDkyIEBACiB9OwogCiAvKgorICogY2FyZCBtb2RlbHMKKyAqLworCitzdGF0aWMgaW50IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3sKKwlpbnQgZXJyOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfZW11MTBrMSA9IHsKKwkubmFtZSA9ICJlbXUxMGsxIiwKKwkucGxheWJhY2tfY29uc3RyYWludHMgPSBlbXUxMGsxX3BsYXliYWNrX2NvbnN0cmFpbnRzLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMTI4ICogMTAyNCwKK307CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9ybWU5NjUyID0geworCS5uYW1lID0gInJtZTk2NTIiLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYgKiA2NCAqIDEwMjQsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkuY2hhbm5lbHNfbWluID0gMjYsCisJLmNoYW5uZWxzX21heCA9IDI2LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMiwKK307CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9pY2UxNzEyID0geworCS5uYW1lID0gImljZTE3MTIiLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjU2ICogMTAyNCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVsc19taW4gPSAxMCwKKwkuY2hhbm5lbHNfbWF4ID0gMTAsCisJLnBlcmlvZHNfbWluID0gMSwKKwkucGVyaW9kc19tYXggPSAxMDI0LAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX3VkYTEzNDEgPSB7CisJLm5hbWUgPSAidWRhMTM0MSIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAxNjM4MCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjU1LAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2FjOTcgPSB7CisJLm5hbWUgPSAiYWM5NyIsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKK307CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9jYTAxMDYgPSB7CisJLm5hbWUgPSAiY2EwMTA2IiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gKCg2NTUzNi02NCkqOCksCisJLnBlcmlvZF9ieXRlc19tYXggPSAoNjU1MzYtNjQpLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gOCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMHxTTkRSVl9QQ01fUkFURV85NjAwMHxTTkRSVl9QQ01fUkFURV8xOTIwMDAsCisJLnJhdGVfbWluID0gNDgwMDAsCisJLnJhdGVfbWF4ID0gMTkyMDAwLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsICpkdW1teV9tb2RlbHNbXSA9IHsKKwkmbW9kZWxfZW11MTBrMSwKKwkmbW9kZWxfcm1lOTY1MiwKKwkmbW9kZWxfaWNlMTcxMiwKKwkmbW9kZWxfdWRhMTM0MSwKKwkmbW9kZWxfYWM5NywKKwkmbW9kZWxfY2EwMTA2LAorCU5VTEwKK307CisKKy8qCiAgKiBzeXN0ZW0gdGltZXIgaW50ZXJmYWNlCiAgKi8KIApAQCAtNTA5LDcgKzUzMCw3IEBACiAJLmNoYW5uZWxzX21pbiA9CQlVU0VfQ0hBTk5FTFNfTUlOLAogCS5jaGFubmVsc19tYXggPQkJVVNFX0NIQU5ORUxTX01BWCwKIAkuYnVmZmVyX2J5dGVzX21heCA9CU1BWF9CVUZGRVJfU0laRSwKLQkucGVyaW9kX2J5dGVzX21pbiA9CTY0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0JTUlOX1BFUklPRF9TSVpFLAogCS5wZXJpb2RfYnl0ZXNfbWF4ID0JTUFYX1BFUklPRF9TSVpFLAogCS5wZXJpb2RzX21pbiA9CQlVU0VfUEVSSU9EU19NSU4sCiAJLnBlcmlvZHNfbWF4ID0JCVVTRV9QRVJJT0RTX01BWCwKQEAgLTUzOCw2ICs1NTksNyBAQAogc3RhdGljIGludCBkdW1teV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZHVtbXlfbW9kZWwgKm1vZGVsID0gZHVtbXktPm1vZGVsOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGVycjsKIApAQCAtNTUxLDcgKzU3Myw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlydW50aW1lLT5odyA9IGR1bW15X3BjbV9oYXJkd2FyZTsKKwlydW50aW1lLT5odyA9IGR1bW15LT5wY21faHc7CiAJaWYgKHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgJiAxKSB7CiAJCXJ1bnRpbWUtPmh3LmluZm8gJj0gflNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEOwogCQlydW50aW1lLT5ody5pbmZvIHw9IFNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEOwpAQCAtNTYwLDEwICs1ODIsMTYgQEAKIAkJcnVudGltZS0+aHcuaW5mbyAmPSB+KFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQkJCSAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCWVyciA9IGFkZF9wbGF5YmFja19jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOwotCWVsc2UKLQkJZXJyID0gYWRkX2NhcHR1cmVfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwlpZiAobW9kZWwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAobW9kZWwtPnBsYXliYWNrX2NvbnN0cmFpbnRzKQorCQkJZXJyID0gbW9kZWwtPnBsYXliYWNrX2NvbnN0cmFpbnRzKHN1YnN0cmVhbS0+cnVudGltZSk7CisJfSBlbHNlIHsKKwkJaWYgKG1vZGVsLT5jYXB0dXJlX2NvbnN0cmFpbnRzKQorCQkJZXJyID0gbW9kZWwtPmNhcHR1cmVfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwl9CiAJaWYgKGVyciA8IDApIHsKIAkJZHVtbXktPnRpbWVyX29wcy0+ZnJlZShzdWJzdHJlYW0pOwogCQlyZXR1cm4gZXJyOwpAQCAtODIzLDE3ICs4NTEsMTkgQEAKIC8qCiAgKiBwcm9jIGludGVyZmFjZQogICovCi1zdGF0aWMgdm9pZCBwcmludF9mb3JtYXRzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHByaW50X2Zvcm1hdHMoc3RydWN0IHNuZF9kdW1teSAqZHVtbXksCisJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9QQ01fRk9STUFUX0xBU1Q7IGkrKykgewotCQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLmZvcm1hdHMgJiAoMVVMTCA8PCBpKSkKKwkJaWYgKGR1bW15LT5wY21faHcuZm9ybWF0cyAmICgxVUxMIDw8IGkpKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICVzIiwgc25kX3BjbV9mb3JtYXRfbmFtZShpKSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcmludF9yYXRlcyhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCitzdGF0aWMgdm9pZCBwcmludF9yYXRlcyhzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwKKwkJCXN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKIAlzdGF0aWMgaW50IHJhdGVzW10gPSB7CiAJCTU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsCkBAIC04NDEsMTkgKzg3MSwxOSBAQAogCX07CiAJaW50IGk7CiAKLQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykKKwlpZiAoZHVtbXktPnBjbV9ody5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBjb250aW51b3VzIik7Ci0JaWYgKGR1bW15X3BjbV9oYXJkd2FyZS5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCisJaWYgKGR1bW15LT5wY21faHcucmF0ZXMgJiBTTkRSVl9QQ01fUkFURV9LTk9UKQogCQlzbmRfaXByaW50ZihidWZmZXIsICIga25vdCIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzKTsgaSsrKQotCQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLnJhdGVzICYgKDEgPDwgaSkpCisJCWlmIChkdW1teS0+cGNtX2h3LnJhdGVzICYgKDEgPDwgaSkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJWQiLCByYXRlc1tpXSk7CiB9CiAKLSNkZWZpbmUgZ2V0X2R1bW15X2ludF9wdHIob2ZzKSBcCi0JKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKSZkdW1teV9wY21faGFyZHdhcmUgKyAob2ZzKSkKLSNkZWZpbmUgZ2V0X2R1bW15X2xsX3B0cihvZnMpIFwKLQkodW5zaWduZWQgbG9uZyBsb25nICopKChjaGFyICopJmR1bW15X3BjbV9oYXJkd2FyZSArIChvZnMpKQorI2RlZmluZSBnZXRfZHVtbXlfaW50X3B0cihkdW1teSwgb2ZzKSBcCisJKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKSYoKGR1bW15KS0+cGNtX2h3KSArIChvZnMpKQorI2RlZmluZSBnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBvZnMpIFwKKwkodW5zaWduZWQgbG9uZyBsb25nICopKChjaGFyICopJigoZHVtbXkpLT5wY21faHcpICsgKG9mcykpCiAKIHN0cnVjdCBkdW1teV9od19maWVsZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTg4NCwyMCArOTE0LDIxIEBACiBzdGF0aWMgdm9pZCBkdW1teV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKIAkJCSAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCiB7CisJc3RydWN0IHNuZF9kdW1teSAqZHVtbXkgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmllbGRzKTsgaSsrKSB7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzICIsIGZpZWxkc1tpXS5uYW1lKTsKIAkJaWYgKGZpZWxkc1tpXS5zaXplID09IHNpemVvZihpbnQpKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCBmaWVsZHNbaV0uZm9ybWF0LAotCQkJCSAgICAqZ2V0X2R1bW15X2ludF9wdHIoZmllbGRzW2ldLm9mZnNldCkpOworCQkJCSpnZXRfZHVtbXlfaW50X3B0cihkdW1teSwgZmllbGRzW2ldLm9mZnNldCkpOwogCQllbHNlCiAJCQlzbmRfaXByaW50ZihidWZmZXIsIGZpZWxkc1tpXS5mb3JtYXQsCi0JCQkJICAgICpnZXRfZHVtbXlfbGxfcHRyKGZpZWxkc1tpXS5vZmZzZXQpKTsKKwkJCQkqZ2V0X2R1bW15X2xsX3B0cihkdW1teSwgZmllbGRzW2ldLm9mZnNldCkpOwogCQlpZiAoIXN0cmNtcChmaWVsZHNbaV0ubmFtZSwgImZvcm1hdHMiKSkKLQkJCXByaW50X2Zvcm1hdHMoYnVmZmVyKTsKKwkJCXByaW50X2Zvcm1hdHMoZHVtbXksIGJ1ZmZlcik7CiAJCWVsc2UgaWYgKCFzdHJjbXAoZmllbGRzW2ldLm5hbWUsICJyYXRlcyIpKQotCQkJcHJpbnRfcmF0ZXMoYnVmZmVyKTsKKwkJCXByaW50X3JhdGVzKGR1bW15LCBidWZmZXIpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCX0KIH0KQEAgLTkwNSw2ICs5MzYsNyBAQAogc3RhdGljIHZvaWQgZHVtbXlfcHJvY193cml0ZShzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAogCQkJICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCiB7CisJc3RydWN0IHNuZF9kdW1teSAqZHVtbXkgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgbGluZVs2NF07CiAKIAl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgewpAQCAtOTI0LDkgKzk1Niw5IEBACiAJCWlmIChzdHJpY3Rfc3RydG91bGwoaXRlbSwgMCwgJnZhbCkpCiAJCQljb250aW51ZTsKIAkJaWYgKGZpZWxkc1tpXS5zaXplID09IHNpemVvZihpbnQpKQotCQkJKmdldF9kdW1teV9pbnRfcHRyKGZpZWxkc1tpXS5vZmZzZXQpID0gdmFsOworCQkJKmdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKIAkJZWxzZQotCQkJKmdldF9kdW1teV9sbF9wdHIoZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CisJCQkqZ2V0X2R1bW15X2xsX3B0cihkdW1teSwgZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CiAJfQogfQogCkBAIC05MzgsNiArOTcwLDcgQEAKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBkdW1teV9wcm9jX3JlYWQpOwogCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gZHVtbXlfcHJvY193cml0ZTsKIAkJZW50cnktPm1vZGUgfD0gU19JV1VTUjsKKwkJZW50cnktPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAJfQogfQogI2Vsc2UKQEAgLTk0OCw2ICs5ODEsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teTsKKwlzdHJ1Y3QgZHVtbXlfbW9kZWwgKm0gPSBOVUxMLCAqKm1kbDsKIAlpbnQgaWR4LCBlcnI7CiAJaW50IGRldiA9IGRldnB0ci0+aWQ7CiAKQEAgLTk1Nyw2ICs5OTEsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAlkdW1teSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlkdW1teS0+Y2FyZCA9IGNhcmQ7CisJZm9yIChtZGwgPSBkdW1teV9tb2RlbHM7ICptZGwgJiYgbW9kZWxbZGV2XTsgbWRsKyspIHsKKwkJaWYgKHN0cmNtcChtb2RlbFtkZXZdLCAoKm1kbCktPm5hbWUpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkic25kLWR1bW15OiBVc2luZyBtb2RlbCAnJXMnIGZvciBjYXJkICVpXG4iLAorCQkJCSgqbWRsKS0+bmFtZSwgY2FyZC0+bnVtYmVyKTsKKwkJCW0gPSBkdW1teS0+bW9kZWwgPSAqbWRsOworCQkJYnJlYWs7CisJCX0KKwl9CiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfUENNX0RFVklDRVMgJiYgaWR4IDwgcGNtX2RldnNbZGV2XTsgaWR4KyspIHsKIAkJaWYgKHBjbV9zdWJzdHJlYW1zW2Rldl0gPCAxKQogCQkJcGNtX3N1YnN0cmVhbXNbZGV2XSA9IDE7CkBAIC05NjYsNiArMTAwOSwzMyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gX19ub2RldjsKIAl9CisKKwlkdW1teS0+cGNtX2h3ID0gZHVtbXlfcGNtX2hhcmR3YXJlOworCWlmIChtKSB7CisJCWlmIChtLT5mb3JtYXRzKQorCQkJZHVtbXktPnBjbV9ody5mb3JtYXRzID0gbS0+Zm9ybWF0czsKKwkJaWYgKG0tPmJ1ZmZlcl9ieXRlc19tYXgpCisJCQlkdW1teS0+cGNtX2h3LmJ1ZmZlcl9ieXRlc19tYXggPSBtLT5idWZmZXJfYnl0ZXNfbWF4OworCQlpZiAobS0+cGVyaW9kX2J5dGVzX21pbikKKwkJCWR1bW15LT5wY21faHcucGVyaW9kX2J5dGVzX21pbiA9IG0tPnBlcmlvZF9ieXRlc19taW47CisJCWlmIChtLT5wZXJpb2RfYnl0ZXNfbWF4KQorCQkJZHVtbXktPnBjbV9ody5wZXJpb2RfYnl0ZXNfbWF4ID0gbS0+cGVyaW9kX2J5dGVzX21heDsKKwkJaWYgKG0tPnBlcmlvZHNfbWluKQorCQkJZHVtbXktPnBjbV9ody5wZXJpb2RzX21pbiA9IG0tPnBlcmlvZHNfbWluOworCQlpZiAobS0+cGVyaW9kc19tYXgpCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZHNfbWF4ID0gbS0+cGVyaW9kc19tYXg7CisJCWlmIChtLT5yYXRlcykKKwkJCWR1bW15LT5wY21faHcucmF0ZXMgPSBtLT5yYXRlczsKKwkJaWYgKG0tPnJhdGVfbWluKQorCQkJZHVtbXktPnBjbV9ody5yYXRlX21pbiA9IG0tPnJhdGVfbWluOworCQlpZiAobS0+cmF0ZV9tYXgpCisJCQlkdW1teS0+cGNtX2h3LnJhdGVfbWF4ID0gbS0+cmF0ZV9tYXg7CisJCWlmIChtLT5jaGFubmVsc19taW4pCisJCQlkdW1teS0+cGNtX2h3LmNoYW5uZWxzX21pbiA9IG0tPmNoYW5uZWxzX21pbjsKKwkJaWYgKG0tPmNoYW5uZWxzX21heCkKKwkJCWR1bW15LT5wY21faHcuY2hhbm5lbHNfbWF4ID0gbS0+Y2hhbm5lbHNfbWF4OworCX0KKwogCWVyciA9IHNuZF9jYXJkX2R1bW15X25ld19taXhlcihkdW1teSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gX19ub2RldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCmluZGV4IDY2NDRkMDAuLjM1YTJmNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9wY20uYwpAQCAtNDYsNyArNDYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CkBAIC01Niw1NSArNTUsNiBAQAogCiAKIC8qCi0gKiB3ZSB1c2UgYSB2bWFsbG9jJ2VkIChzZy0pYnVmZmVyCi0gKi8KLQotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwotfQotCi0vKgotICogYWxsb2NhdGUgYSBidWZmZXIgdmlhIHZtYWxsb2NfMzIoKS4KLSAqIGNhbGxlZCBmcm9tIGh3X3BhcmFtcwotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJLyogYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+PSBzaXplKQotCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgZW5vdWdoIGxhcmdlICovCi0JCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jXzMyKHNpemUpOwotCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocnVudGltZS0+ZG1hX2FyZWEsIDAsIHNpemUpOwotCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7Ci0JcmV0dXJuIDE7IC8qIGNoYW5nZWQgKi8KLX0KLQotLyoKLSAqIGZyZWUgdGhlIGJ1ZmZlci4KLSAqIGNhbGxlZCBmcm9tIGh3X2ZyZWUgY2FsbGJhY2sKLSAqIE5PVEU6IHRoaXMgbWF5IGJlIGNhbGxlZCBub3Qgb25seSBvbmNlIHBlciBwY20gb3BlbiEKLSAqLwotc3RhdGljIGludCBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCi0JdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKgogICogcmVhZCB0aHJlZSBwZW5kaW5nIHBjbSBieXRlcyB2aWEgaW5iKCkKICAqLwogc3RhdGljIHZvaWQgdnhfcGNtX3JlYWRfcGVyX2J5dGVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLApAQCAtODY1LDcgKzgxNSw4IEBACiBzdGF0aWMgaW50IHZ4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIKKwkJCQkJKHN1YnMsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CiAKIC8qCkBAIC04NzMsNyArODI0LDcgQEAKICAqLwogc3RhdGljIGludCB2eF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKIH0KIAogLyoKQEAgLTk1Myw3ICs5MDQsOCBAQAogCS5wcmVwYXJlID0JdnhfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQl2eF9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXZ4X3BjbV9wbGF5YmFja19wb2ludGVyLAotCS5wYWdlID0JCXNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKKwkucGFnZSA9CQlzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0JCXNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIApAQCAtMTE3Myw3ICsxMTI1LDggQEAKIAkucHJlcGFyZSA9CXZ4X3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0JdnhfcGNtX3RyaWdnZXIsCiAJLnBvaW50ZXIgPQl2eF9wY21fY2FwdHVyZV9wb2ludGVyLAotCS5wYWdlID0JCXNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKKwkucGFnZSA9CQlzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0JCXNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL0tjb25maWcgYi9zb3VuZC9pc2EvS2NvbmZpZwppbmRleCAwMmZlODFjLi43NTVhMGE1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvS2NvbmZpZworKysgYi9zb3VuZC9pc2EvS2NvbmZpZwpAQCAtNjMsMTUgKzYzLDE2IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODQ4LgogCiBjb25maWcgU05EX0FMUzEwMAotCXRyaXN0YXRlICJBdmFuY2UgTG9naWMgQUxTMTAwL0FMUzEyMCIKKwl0cmlzdGF0ZSAiRGlhbW9uZCBUZWNoLiBEVC0wMTl4IGFuZCBBdmFuY2UgTG9naWMgQUxTeHh4IgogCWRlcGVuZHMgb24gUE5QCiAJc2VsZWN0IElTQVBOUAogCXNlbGVjdCBTTkRfT1BMM19MSUIKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9TQjE2X0RTUAogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIEF2YW5jZQotCSAgTG9naWMgQUxTMTAwLCBBTFMxMTAsIEFMUzEyMCBhbmQgQUxTMjAwIGNoaXBzLgorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlCisJICBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYIG9yIEF2YW5jZSBMb2dpYyBjaGlwczogQUxTMDA3LAorCSAgQUxTMTAwLCBBTFMxMTAsIEFMUzEyMCBhbmQgQUxTMjAwIGNoaXBzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxzMTAwLgpAQCAtMTI3LDIwICsxMjgsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzNi4KIAotY29uZmlnIFNORF9EVDAxOVgKLQl0cmlzdGF0ZSAiRGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WCwgQXZhbmNlIExvZ2ljIEFMUy0wMDciCi0JZGVwZW5kcyBvbiBQTlAKLQlzZWxlY3QgSVNBUE5QCi0Jc2VsZWN0IFNORF9PUEwzX0xJQgotCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKLQlzZWxlY3QgU05EX1NCMTZfRFNQCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlCi0JICBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYIG9yIEF2YW5jZSBMb2dpYyBBTFMtMDA3IGNoaXBzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtZHQwMTl4LgotCiBjb25maWcgU05EX0VTOTY4CiAJdHJpc3RhdGUgIkdlbmVyaWMgRVNTIEVTOTY4IGRyaXZlciIKIAlkZXBlbmRzIG9uIFBOUApAQCAtMjUyLDYgKzIzOSwyMiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWludGVyd2F2ZS1zdGIuCiAKK2NvbmZpZyBTTkRfSkFaWjE2CisJdHJpc3RhdGUgIk1lZGlhIFZpc2lvbiBKYXp6MTYgY2FyZCBhbmQgY29tcGF0aWJsZXMiCisJc2VsZWN0IFNORF9PUEwzX0xJQgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1NCOF9EU1AKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIE1lZGlhIFZpc2lvbiBKYXp6MTYgY2hpcHNldDogZGlnaXRhbCBjaGlwIE1WRDEyMTYgKEphenoxNiksCisJICBjb2RlYyBNVkE0MTYgKENTNDIxNikgYW5kIG1peGVyIE1WQTUxNCAoSUNTMjUxNCkuCisJICBNZWRpYSBWaXNpb24ncyBKYXp6MTYgY2FyZHMgd2VyZSBzb2xkIHVuZGVyIG5hbWVzIFBybyBTb25pYyAxNiwKKwkgIFByZW1pdW0gMy1EIGFuZCBQcm8gMy1ELiBUaGVyZSB3ZXJlIGFsc28gT0VNcyBjYXJkcyB3aXRoIHRoZQorCSAgSmF6ejE2IGNoaXBzZXQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1qYXp6MTYuCisKIGNvbmZpZyBTTkRfT1BMM1NBMgogCXRyaXN0YXRlICJZYW1haGEgT1BMMy1TQTIvU0EzIgogCXNlbGVjdCBTTkRfT1BMM19MSUIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9NYWtlZmlsZSBiL3NvdW5kL2lzYS9NYWtlZmlsZQppbmRleCBiOTA2YjlhLi5jNzNkMzBjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL01ha2VmaWxlCkBAIC03LDcgKzcsNiBAQAogc25kLWFsczEwMC1vYmpzIDo9IGFsczEwMC5vCiBzbmQtYXp0MjMyMC1vYmpzIDo9IGF6dDIzMjAubwogc25kLWNtaTgzMzAtb2JqcyA6PSBjbWk4MzMwLm8KLXNuZC1kdDAxOXgtb2JqcyA6PSBkdDAxOXgubwogc25kLWVzMTh4eC1vYmpzIDo9IGVzMTh4eC5vCiBzbmQtb3BsM3NhMi1vYmpzIDo9IG9wbDNzYTIubwogc25kLXNjNjAwMC1vYmpzIDo9IHNjNjAwMC5vCkBAIC0xOSw3ICsxOCw2IEBACiBvYmotJChDT05GSUdfU05EX0FMUzEwMCkgKz0gc25kLWFsczEwMC5vCiBvYmotJChDT05GSUdfU05EX0FaVDIzMjApICs9IHNuZC1henQyMzIwLm8KIG9iai0kKENPTkZJR19TTkRfQ01JODMzMCkgKz0gc25kLWNtaTgzMzAubwotb2JqLSQoQ09ORklHX1NORF9EVDAxOVgpICs9IHNuZC1kdDAxOXgubwogb2JqLSQoQ09ORklHX1NORF9FUzE4WFgpICs9IHNuZC1lczE4eHgubwogb2JqLSQoQ09ORklHX1NORF9PUEwzU0EyKSArPSBzbmQtb3BsM3NhMi5vCiBvYmotJChDT05GSUdfU05EX1NDNjAwMCkgKz0gc25kLXNjNjAwMC5vCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWxzMTAwLmMgYi9zb3VuZC9pc2EvYWxzMTAwLmMKaW5kZXggNWZkNTJlNC4uMjBiZWNjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FsczEwMC5jCisrKyBiL3NvdW5kL2lzYS9hbHMxMDAuYwpAQCAtMiw5ICsyLDEzIEBACiAvKgogICAgIGNhcmQtYWxzMTAwLmMgLSBkcml2ZXIgZm9yIEF2YW5jZSBMb2dpYyBBTFMxMDAgYmFzZWQgc291bmRjYXJkcy4KICAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KKyAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KIAogICAgIFRoYW5rcyB0byBQaWVyZnJhbmNlc2NvICdxTTInIFBhc3NlcmluaS4KIAorICAgIEdlbmVyYWxpc2VkIGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIERULTAxOTYgYW5kIEFMUy0wMDcgY2hpcHMKKyAgICBieSBKb25hdGhhbiBXb2l0aGUgPGp3b2l0aGVAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXU+OiBKdW5lIDIwMDIuCisKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTMzLDEwICszNywxMCBAQAogCiAjZGVmaW5lIFBGWCAiYWxzMTAwOiAiCiAKLU1PRFVMRV9BVVRIT1IoIk1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmFuY2UgTG9naWMgQUxTMVgwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tBdmFuY2UgTG9naWMsQUxTMTAwIC0gUFJPMTZQTlB9LCIKK01PRFVMRV9ERVNDUklQVElPTigiQXZhbmNlIExvZ2ljIEFMUzAwNy9BTFMxWDAiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0RpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVh9LCIKKwkJIntBdmFuY2UgTG9naWMgQUxTLTAwN319IgorCQkie3tBdmFuY2UgTG9naWMsQUxTMTAwIC0gUFJPMTZQTlB9LCIKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzExMH0sIgogCSAgICAgICAgIntBdmFuY2UgTG9naWMsQUxTMTIwfSwiCiAJICAgICAgICAie0F2YW5jZSBMb2dpYyxBTFMyMDB9LCIKQEAgLTQ1LDkgKzQ5LDEyIEBACiAJICAgICAgICAie0F2YW5jZSBMb2dpYyxBTFMxMjB9LCIKIAkgICAgICAgICJ7UlRMLFJUTDMwMDB9fSIpOwogCitNT0RVTEVfQVVUSE9SKCJNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfSVNBUE5QOyAvKiBFbmFibGUgdGhpcyBjYXJkICovCitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwogc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwogc3RhdGljIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KIHN0YXRpYyBsb25nIGZtX3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KQEAgLTU3LDE0ICs2NCwxNSBAQAogc3RhdGljIGludCBkbWExNltTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsJLyogUG5QIHNldHVwICovCiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgYWxzMTAwIGJhc2VkIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgYWxzMTAwIGJhc2VkIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIEF2YW5jZSBMb2dpYyBiYXNlZCBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIGFsczEwMCBiYXNlZCBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBBdmFuY2UgTG9naWMgYmFzZWQgc291bmRjYXJkLiIpOworCitNT0RVTEVfQUxJQVMoInNuZC1kdDAxOXgiKTsKIAogc3RydWN0IHNuZF9jYXJkX2FsczEwMCB7Ci0JaW50IGRldl9ubzsKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2OwogCXN0cnVjdCBwbnBfZGV2ICpkZXZtcHU7CiAJc3RydWN0IHBucF9kZXYgKmRldm9wbDsKQEAgLTcyLDI1ICs4MCw0MyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2FsczEwMF9wbnBpZHNbXSA9IHsKKwkvKiBEVDE5N0EzMCAqLworCXsgLmlkID0gIlJXQjE2ODgiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0RUMDE5WCB9LAorCS8qIERUMDE5NiAvIEFMUy0wMDcgKi8KKwl7IC5pZCA9ICJBTFMwMDA3IiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19EVDAxOVggfSwKIAkvKiBBTFMxMDAgLSBQUk8xNlBOUCAqLwotCXsgLmlkID0gIkFMUzAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQUxTMDAwMSIsCisJICAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCiAJLyogQUxTMTEwIC0gTUYxMDAwIC0gRGlnaW1hdGUgM0QgU291bmQgKi8KLQl7IC5pZCA9ICJBTFMwMTEwIiwgLmRldnMgPSB7IHsgIkBAQDEwMDEiIH0sIHsgIkBYQDEwMDEiIH0sIHsgIkBIQDEwMDEiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAxMTAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDEwMDEiIH0sIHsgIkBYQDEwMDEiIH0sIHsgIkBIQDEwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIEFMUzEyMCAqLwotCXsgLmlkID0gIkFMUzAxMjAiLCAuZGV2cyA9IHsgeyAiQEBAMjAwMSIgfSwgeyAiQFhAMjAwMSIgfSwgeyAiQEhAMjAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQUxTMDEyMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMjAwMSIgfSwgeyAiQFhAMjAwMSIgfSwgeyAiQEhAMjAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCiAJLyogQUxTMjAwICovCi0JeyAuaWQgPSAiQUxTMDIwMCIsIC5kZXZzID0geyB7ICJAQEAwMDIwIiB9LCB7ICJAWEAwMDIwIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMjAwIiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDIwIiB9LCB7ICJAWEAwMDIwIiB9LCB7ICJASEAwMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMyMDAgT0VNICovCi0JeyAuaWQgPSAiQUxTMDIwMCIsIC5kZXZzID0geyB7ICJAQEAwMDIwIiB9LCB7ICJAWEAwMDIwIiB9LCB7ICJASEAwMDIwIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMjAwIiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDIwIiB9LCB7ICJAWEAwMDIwIiB9LCB7ICJASEAwMDIwIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBSVEwzMDAwICovCi0JeyAuaWQgPSAiUlRMMzAwMCIsIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0gfSwKLQl7IC5pZCA9ICIiLCB9IC8qIGVuZCAqLworCXsgLmlkID0gIlJUTDMwMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDIwMDEiIH0sIHsgIkBYQDIwMDEiIH0sIHsgIkBIQDIwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAorCXsgLmlkID0gIiIgfSAvKiBlbmQgKi8KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIHNuZF9hbHMxMDBfcG5waWRzKTsKIAotI2RlZmluZSBEUklWRVJfTkFNRQkic25kLWNhcmQtYWxzMTAwIgotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9hbHMxMDBfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9hbHMxMDAgKmFjYXJkLAogCQkJCQkgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICppZCkKQEAgLTExMyw4ICsxMzksMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JZG1hOFtkZXZdID0gcG5wX2RtYShwZGV2LCAxKTsKLQlkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKKwlpZiAoaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkKKwkJZG1hOFtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKKwllbHNlIHsKKwkJZG1hOFtkZXZdID0gcG5wX2RtYShwZGV2LCAxKTsKKwkJZG1hMTZbZGV2XSA9IHBucF9kbWEocGRldiwgMCk7CisJfQogCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAogCXBkZXYgPSBhY2FyZC0+ZGV2bXB1OwpAQCAtMTc1LDIyICsyMDUsMzMgQEAKIAl9CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CiAKLQlpZiAoKGVycm9yID0gc25kX3NiZHNwX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sCi0JCQkJICAgICAgaXJxW2Rldl0sCi0JCQkJICAgICAgc25kX3NiMTZkc3BfaW50ZXJydXB0LAotCQkJCSAgICAgIGRtYThbZGV2XSwKLQkJCQkgICAgICBkbWExNltkZXZdLAotCQkJCSAgICAgIFNCX0hXX0FMUzEwMCwgJmNoaXApKSA8IDApIHsKKwlpZiAocGlkLT5kcml2ZXJfZGF0YSA9PSBTQl9IV19EVDAxOVgpCisJCWRtYTE2W2Rldl0gPSAtMTsKKworCWVycm9yID0gc25kX3NiZHNwX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIGlycVtkZXZdLAorCQkJCSAgc25kX3NiMTZkc3BfaW50ZXJydXB0LAorCQkJCSAgZG1hOFtkZXZdLCBkbWExNltkZXZdLAorCQkJCSAgcGlkLT5kcml2ZXJfZGF0YSwKKwkJCQkgICZjaGlwKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAJYWNhcmQtPmNoaXAgPSBjaGlwOwogCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMUzEwMCIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdmFuY2UgTG9naWMgQUxTMTAwIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQmJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCi0JCWlycVtkZXZdLCBkbWE4W2Rldl0sIGRtYTE2W2Rldl0pOworCWlmIChwaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkgeworCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiRFQtMDE5WCIpOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRGlhbW9uZCBUZWNoLiBEVC0wMTlYIik7CisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkIiwKKwkJCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+bmFtZSwgY2hpcC0+cG9ydCwKKwkJCWlycVtkZXZdLCBkbWE4W2Rldl0pOworCX0gZWxzZSB7CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTFMxMDAiKTsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF2YW5jZSBMb2dpYyBBTFMxMDAiKTsKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQmJWQiLAorCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5uYW1lLCBjaGlwLT5wb3J0LAorCQkJaXJxW2Rldl0sIGRtYThbZGV2XSwgZG1hMTZbZGV2XSk7CisJfQogCiAJaWYgKChlcnJvciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC0yMDMsOSArMjQ0LDE5IEBACiAJfQogCiAJaWYgKG1wdV9wb3J0W2Rldl0gPiAwICYmIG1wdV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19BTFMxMDAsCisJCWludCBtcHVfdHlwZSA9IE1QVTQwMV9IV19BTFMxMDA7CisKKwkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKKwkJCW1wdV9pcnFbZGV2XSA9IC0xOworCisJCWlmIChwaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkKKwkJCW1wdV90eXBlID0gTVBVNDAxX0hXX01QVTQwMTsKKworCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAorCQkJCQltcHVfdHlwZSwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwgCi0JCQkJCW1wdV9pcnFbZGV2XSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJbXB1X2lycVtkZXZdLAorCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAogCQkJCQlOVUxMKSA8IDApCiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gTVBVLTQwMSBkZXZpY2UgYXQgMHglbHhcbiIsIG1wdV9wb3J0W2Rldl0pOwogCX0KQEAgLTI5MSw3ICszNDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RyaXZlciBhbHMxMDBfcG5wY19kcml2ZXIgPSB7CiAJLmZsYWdzICAgICAgICAgID0gUE5QX0RSSVZFUl9SRVNfRElTQUJMRSwKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImFsczEwMCIsCisJLm5hbWUJCT0gImFsczEwMCIsCiAgICAgICAgIC5pZF90YWJsZSAgICAgICA9IHNuZF9hbHMxMDBfcG5waWRzLAogICAgICAgICAucHJvYmUgICAgICAgICAgPSBzbmRfYWxzMTAwX3BucF9kZXRlY3QsCiAgICAgICAgIC5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKHNuZF9hbHMxMDBfcG5wX3JlbW92ZSksCkBAIC0zMTIsNyArMzYzLDcgQEAKIAlpZiAoIWFsczEwMF9kZXZpY2VzKSB7CiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZhbHMxMDBfcG5wY19kcml2ZXIpOwogI2lmZGVmIE1PRFVMRQotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBBTFMxMDAgYmFzZWQgc291bmRjYXJkcyBmb3VuZFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIEF2YW5jZSBMb2dpYyBiYXNlZCBzb3VuZGNhcmRzIGZvdW5kXG4iKTsKICNlbmRpZgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZHQwMTl4LmMgYi9zb3VuZC9pc2EvZHQwMTl4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjViMWEuLjAwMDAwMDAKLS0tIGEvc291bmQvaXNhL2R0MDE5eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLQotLyoKLSAgICBkdDAxOXguYyAtIGRyaXZlciBmb3IgRGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5N0ggYmFzZWQgc291bmRjYXJkcy4KLSAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDIgYnkgTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Ci0KLSAgICBHZW5lcmFsaXNlZCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiBEVC0wMTk2IGFuZCBBTFMtMDA3IGNoaXBzIAotICAgIGJ5IEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT46IEp1bmUgMjAwMi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG5wLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgotI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zYi5oPgotCi0jZGVmaW5lIFBGWCAiZHQwMTl4OiAiCi0KLU1PRFVMRV9BVVRIT1IoIk1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYIC8gQXZhbmNlIExvZ2ljIEFMUy0wMDciKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0RpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVh9LCIKLQkgICAgICAgIntBdmFuY2UgTG9naWMgQUxTLTAwN319Iik7Ci0KLXN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCi1zdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KLXN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCi1zdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwkvKiBQblAgc2V0dXAgKi8KLXN0YXRpYyBpbnQgZG1hOFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsJLyogUG5QIHNldHVwICovCi0KLW1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgRFQtMDE5WCBiYXNlZCBzb3VuZGNhcmQuIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIERULTAxOVggYmFzZWQgc291bmRjYXJkLiIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBEVC0wMTlYIGJhc2VkIHNvdW5kY2FyZC4iKTsKLQotc3RydWN0IHNuZF9jYXJkX2R0MDE5eCB7Ci0Jc3RydWN0IHBucF9kZXYgKmRldjsKLQlzdHJ1Y3QgcG5wX2RldiAqZGV2bXB1OwotCXN0cnVjdCBwbnBfZGV2ICpkZXZvcGw7Ci0Jc3RydWN0IHNuZF9zYiAqY2hpcDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9kdDAxOXhfcG5waWRzW10gPSB7Ci0JLyogRFQxOTdBMzAgKi8KLQl7IC5pZCA9ICJSV0IxNjg4IiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0sIH0gfSwKLQkvKiBEVDAxOTYgLyBBTFMtMDA3ICovCi0JeyAuaWQgPSAiQUxTMDAwNyIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9LCB9IH0sCi0JeyAuaWQgPSAiIiwgIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIHNuZF9kdDAxOXhfcG5waWRzKTsKLQotCi0jZGVmaW5lIERSSVZFUl9OQU1FCSJzbmQtY2FyZC1kdDAxOXgiCi0KLQotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfZHQwMTl4X3BucChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZCwKLQkJCQkJIHN0cnVjdCBwbnBfY2FyZF9saW5rICpjYXJkLAotCQkJCQkgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQotewotCXN0cnVjdCBwbnBfZGV2ICpwZGV2OwotCWludCBlcnI7Ci0KLQlhY2FyZC0+ZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKLQlpZiAoYWNhcmQtPmRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFjYXJkLT5kZXZtcHUgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMV0uaWQsIE5VTEwpOwotCWFjYXJkLT5kZXZvcGwgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMl0uaWQsIE5VTEwpOwotCi0JcGRldiA9IGFjYXJkLT5kZXY7Ci0KLQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJEVC0wMTlYIEFVRElPIHBucCBjb25maWd1cmUgZmFpbHVyZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JZG1hOFtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKLQlpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7Ci0Jc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgYXVkaW8gaW50ZXJmYWNlOiBwb3J0PTB4JWx4LCBpcnE9MHgleCwgZG1hPTB4JXhcbiIsCi0JCQlwb3J0W2Rldl0saXJxW2Rldl0sZG1hOFtkZXZdKTsKLQotCXBkZXYgPSBhY2FyZC0+ZGV2bXB1OwotCWlmIChwZGV2ICE9IE5VTEwpIHsKLQkJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHBkZXYpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggTVBVNDAxIHBucCBjb25maWd1cmUgZmFpbHVyZSwgc2tpcHBpbmdcbiIpOwotCQkJZ290byBfX21wdV9lcnJvcjsKLQkJfQotCQltcHVfcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JCW1wdV9pcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7Ci0JCXNuZF9wcmludGRkKCJkdDAxOXg6IGZvdW5kIE1QVS00MDE6IHBvcnQ9MHglbHgsIGlycT0weCV4XG4iLAotCQkJIAltcHVfcG9ydFtkZXZdLG1wdV9pcnFbZGV2XSk7Ci0JfSBlbHNlIHsKLQlfX21wdV9lcnJvcjoKLQkJYWNhcmQtPmRldm1wdSA9IE5VTEw7Ci0JCW1wdV9wb3J0W2Rldl0gPSAtMTsKLQl9Ci0KLQlwZGV2ID0gYWNhcmQtPmRldm9wbDsKLQlpZiAocGRldiAhPSBOVUxMKSB7Ci0JCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlwbnBfcmVsZWFzZV9jYXJkX2RldmljZShwZGV2KTsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJEVC0wMTlYIE9QTDMgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlLCBza2lwcGluZ1xuIik7Ci0JCQlnb3RvIF9fZm1fZXJyb3I7Ci0JCX0KLQkJZm1fcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JCXNuZF9wcmludGRkKCJkdDAxOXg6IGZvdW5kIE9QTDMgc3ludGg6IHBvcnQ9MHglbHhcbiIsZm1fcG9ydFtkZXZdKTsKLQl9IGVsc2UgewotCV9fZm1fZXJyb3I6Ci0JCWFjYXJkLT5kZXZvcGwgPSBOVUxMOwotCQlmbV9wb3J0W2Rldl0gPSAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfZHQwMTl4X3Byb2JlKGludCBkZXYsIHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQotewotCWludCBlcnJvcjsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZDsKLQlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0KLQllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCksICZjYXJkKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKLQlpZiAoKGVycm9yID0gc25kX2NhcmRfZHQwMTl4X3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCWlmICgoZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwKLQkJCQkgICAgICBpcnFbZGV2XSwKLQkJCQkgICAgICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCi0JCQkJICAgICAgZG1hOFtkZXZdLAotCQkJCSAgICAgIC0xLAotCQkJCSAgICAgIFNCX0hXX0RUMDE5WCwKLQkJCQkgICAgICAmY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCWFjYXJkLT5jaGlwID0gY2hpcDsKLQotCXN0cmNweShjYXJkLT5kcml2ZXIsICJEVC0wMTlYIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkRpYW1vbmQgVGVjaC4gRFQtMDE5WCIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkIiwKLQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5uYW1lLCBjaGlwLT5wb3J0LAotCQlpcnFbZGV2XSwgZG1hOFtkZXZdKTsKLQotCWlmICgoZXJyb3IgPSBzbmRfc2IxNmRzcF9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCWlmICgoZXJyb3IgPSBzbmRfc2JtaXhlcl9uZXcoY2hpcCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JaWYgKG1wdV9wb3J0W2Rldl0gPiAwICYmIG1wdV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChtcHVfaXJxW2Rldl0gPT0gU05EUlZfQVVUT19JUlEpCi0JCQltcHVfaXJxW2Rldl0gPSAtMTsKLQkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwKLS8qCQkJCQlNUFU0MDFfSFdfU0IsKi8KLQkJCQkJTVBVNDAxX0hXX01QVTQwMSwKLQkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKLQkJCQkJbXB1X2lycVtkZXZdLAotCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAotCQkJCQlOVUxMKSA8IDApCi0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gTVBVLTQwMSBkZXZpY2UgYXQgMHglbHggP1xuIiwgbXB1X3BvcnRbZGV2XSk7Ci0JfQotCi0JaWYgKGZtX3BvcnRbZGV2XSA+IDAgJiYgZm1fcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgewotCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsCi0JCQkJICAgIGZtX3BvcnRbZGV2XSwKLQkJCQkgICAgZm1fcG9ydFtkZXZdICsgMiwKLQkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseCA/XG4iLAotCQkJCSAgIGZtX3BvcnRbZGV2XSwgZm1fcG9ydFtkZXZdICsgMik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDAsIDEpKSA8IDApIHsKLQkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJCXJldHVybiBlcnJvcjsKLQkJCX0KLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChlcnJvciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0ZGF0YSBkdDAxOXhfZGV2aWNlczsKLQotc3RhdGljIGludCBfX2RldmluaXQgc25kX2R0MDE5eF9wbnBfcHJvYmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCi0JCQkJCSAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQotewotCXN0YXRpYyBpbnQgZGV2OwotCWludCByZXM7Ci0KLQlmb3IgKCA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewotCQlpZiAoIWVuYWJsZVtkZXZdKQotCQkJY29udGludWU7Ci0JCXJlcyA9IHNuZF9jYXJkX2R0MDE5eF9wcm9iZShkZXYsIGNhcmQsIHBpZCk7Ci0JCWlmIChyZXMgPCAwKQotCQkJcmV0dXJuIHJlczsKLQkJZGV2Kys7Ci0JCWR0MDE5eF9kZXZpY2VzKys7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9kdDAxOXhfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqIHBjYXJkKQotewotCXNuZF9jYXJkX2ZyZWUocG5wX2dldF9jYXJkX2RydmRhdGEocGNhcmQpKTsKLQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgTlVMTCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX2R0MDE5eF9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCk7Ci0Jc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwotCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLQlzbmRfc2JtaXhlcl9zdXNwZW5kKGNoaXApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9kdDAxOXhfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcG5wX2dldF9jYXJkX2RydmRhdGEocGNhcmQpOwotCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKLQotCXNuZF9zYmRzcF9yZXNldChjaGlwKTsKLQlzbmRfc2JtaXhlcl9yZXN1bWUoY2hpcCk7Ci0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIGR0MDE5eF9wbnBjX2RyaXZlciA9IHsKLQkuZmxhZ3MgICAgICAgICAgPSBQTlBfRFJJVkVSX1JFU19ESVNBQkxFLAotCS5uYW1lICAgICAgICAgICA9ICJkdDAxOXgiLAotCS5pZF90YWJsZSAgICAgICA9IHNuZF9kdDAxOXhfcG5waWRzLAotCS5wcm9iZSAgICAgICAgICA9IHNuZF9kdDAxOXhfcG5wX3Byb2JlLAotCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKHNuZF9kdDAxOXhfcG5wX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfZHQwMTl4X3BucF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2R0MDE5eF9wbnBfcmVzdW1lLAotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfZHQwMTl4X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZkdDAxOXhfcG5wY19kcml2ZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoIWR0MDE5eF9kZXZpY2VzKSB7Ci0JCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZkdDAxOXhfcG5wY19kcml2ZXIpOwotI2lmZGVmIE1PRFVMRQotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBEVC0wMTlYIC8gQUxTLTAwNyBiYXNlZCBzb3VuZGNhcmRzIGZvdW5kXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZHQwMTl4X2V4aXQodm9pZCkKLXsKLQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmZHQwMTl4X3BucGNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoYWxzYV9jYXJkX2R0MDE5eF9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2R0MDE5eF9leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggYzhhOGRhMC4uYTRhZjUzYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KICNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KICNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CkBAIC01NDYsNiArNTQ3LDkzIEBACiAKICNpZmRlZiBPUFRpOTNYCiAKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV81Yml0XzNkYl9zdGVwLCAtOTMwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV81Yml0LCAtNDY1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV80Yml0XzEyZGJfbWF4LCAtMzMwMCwgMzAwLCAwKTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9vcHRpOTN4X2NvbnRyb2xzW10gPSB7CitXU1NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgMSwgMSwgMzEsIDEsCisJCWRiX3NjYWxlXzViaXRfM2RiX3N0ZXApLAorV1NTX0RPVUJMRV9UTFYoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfTEVGVF9PVVRQVVQsIENTNDIzMV9SSUdIVF9PVVRQVVQsIDAsIDAsIDMxLCAxLAorCQlkYl9zY2FsZV81Yml0KSwKK1dTU19ET1VCTEVfVExWKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFX1RMVigiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgMCwgMCwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCU9QVGk5M1hfTUlDX0xFRlRfSU5QVVQsIE9QVGk5M1hfTUlDX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEVfVExWKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMCwKKwkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDEsIDEsIDE1LCAxLAorCQlkYl9zY2FsZV80Yml0XzEyZGJfbWF4KSwKK1dTU19ET1VCTEVfVExWKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfQVVYMV9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMV9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCU9QVGk5MzFfQVVYX0xFRlRfSU5QVVQsIE9QVGk5MzFfQVVYX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEVfVExWKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMCwKKwkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDEsIDEsIDE1LCAxLAorCQlkYl9zY2FsZV80Yml0XzEyZGJfbWF4KSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcHRpOTN4X21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQxLCBpZDI7CisJaW50IGVycjsKKworCWlmIChzbmRfQlVHX09OKCFjaGlwIHx8ICFjaGlwLT5wY20pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhcmQgPSBjaGlwLT5jYXJkOworCisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgY2hpcC0+cGNtLT5uYW1lKTsKKworCW1lbXNldCgmaWQxLCAwLCBzaXplb2YoaWQxKSk7CisJbWVtc2V0KCZpZDIsIDAsIHNpemVvZihpZDIpKTsKKwlpZDEuaWZhY2UgPSBpZDIuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUjsKKwkvKiByZWFzc2lnbiBBVVgwIHN3aXRjaCB0byBDRCAqLworCXN0cmNweShpZDEubmFtZSwgIkF1eCBQbGF5YmFjayBTd2l0Y2giKTsKKwlzdHJjcHkoaWQyLm5hbWUsICJDRCBQbGF5YmFjayBTd2l0Y2giKTsKKwllcnIgPSBzbmRfY3RsX3JlbmFtZV9pZChjYXJkLCAmaWQxLCAmaWQyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgcmVuYW1lIG9wdGk5M3ggY29udHJvbFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIHJlYXNzaWduIEFVWDEgc3dpdGNoIHRvIEZNICovCisJc3RyY3B5KGlkMS5uYW1lLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIpOyBpZDEuaW5kZXggPSAxOworCXN0cmNweShpZDIubmFtZSwgIkZNIFBsYXliYWNrIFN3aXRjaCIpOworCWVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNhbm5vdCByZW5hbWUgb3B0aTkzeCBjb250cm9sXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogcmVtb3ZlIEFVWDEgdm9sdW1lICovCisJc3RyY3B5KGlkMS5uYW1lLCAiQXV4IFBsYXliYWNrIFZvbHVtZSIpOyBpZDEuaW5kZXggPSAxOworCXNuZF9jdGxfcmVtb3ZlX2lkKGNhcmQsICZpZDEpOworCisJLyogUmVwbGFjZSBXU1Mgdm9sdW1lIGNvbnRyb2xzIHdpdGggT1BUaTkzeCB2b2x1bWUgY29udHJvbHMgKi8KKwlpZDEuaW5kZXggPSAwOworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfb3B0aTkzeF9jb250cm9scyk7IGlkeCsrKSB7CisJCXN0cmNweShpZDEubmFtZSwgc25kX29wdGk5M3hfY29udHJvbHNbaWR4XS5uYW1lKTsKKwkJc25kX2N0bF9yZW1vdmVfaWQoY2FyZCwgJmlkMSk7CisKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQlzbmRfY3RsX25ldzEoJnNuZF9vcHRpOTN4X2NvbnRyb2xzW2lkeF0sIGNoaXApKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IHNuZF9vcHRpOTN4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHNuZF9vcHRpOXh4ICpjaGlwID0gZGV2X2lkOwpAQCAtNzU0LDYgKzg0MiwxMSBAQAogCWVycm9yID0gc25kX3dzc19taXhlcihjb2RlYyk7CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOworI2lmZGVmIE9QVGk5M1gKKwllcnJvciA9IHNuZF9vcHRpOTN4X21peGVyKGNvZGVjKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisjZW5kaWYKICNpZmRlZiBDUzQyMzEKIAllcnJvciA9IHNuZF93c3NfdGltZXIoY29kZWMsIDAsICZ0aW1lcik7CiAJaWYgKGVycm9yIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9NYWtlZmlsZSBiL3NvdW5kL2lzYS9zYi9NYWtlZmlsZQppbmRleCBmYWVmZmNlYi4uYWYzNjY5NiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9zYi9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogc25kLXNiYXdlLW9ianMgOj0gc2Jhd2UubyBlbXU4MDAwLm8KIHNuZC1lbXU4MDAwLXN5bnRoLW9ianMgOj0gZW11ODAwMF9zeW50aC5vIGVtdTgwMDBfY2FsbGJhY2subyBlbXU4MDAwX3BhdGNoLm8gZW11ODAwMF9wY20ubwogc25kLWVzOTY4LW9ianMgOj0gZXM5Njgubworc25kLWphenoxNi1vYmpzIDo9IGphenoxNi5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfU0JfQ09NTU9OKSArPSBzbmQtc2ItY29tbW9uLm8KQEAgLTIxLDYgKzIyLDcgQEAKIG9iai0kKENPTkZJR19TTkRfU0IxNikgKz0gc25kLXNiMTYubwogb2JqLSQoQ09ORklHX1NORF9TQkFXRSkgKz0gc25kLXNiYXdlLm8KIG9iai0kKENPTkZJR19TTkRfRVM5NjgpICs9IHNuZC1lczk2OC5vCitvYmotJChDT05GSUdfU05EX0pBWloxNikgKz0gc25kLWphenoxNi5vCiBpZmVxICgkKENPTkZJR19TTkRfU0IxNl9DU1ApLHkpCiAgIG9iai0kKENPTkZJR19TTkRfU0IxNikgKz0gc25kLXNiMTYtY3NwLm8KICAgb2JqLSQoQ09ORklHX1NORF9TQkFXRSkgKz0gc25kLXNiMTYtY3NwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9qYXp6MTYuYyBiL3NvdW5kL2lzYS9zYi9qYXp6MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDIxYTNmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL3NiL2phenoxNi5jCkBAIC0wLDAgKzEsNDA0IEBACisKKy8qCisgKiBqYXp6MTYuYyAtIGRyaXZlciBmb3IgTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBzb3VuZGNhcmRzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtyenlzenRvZiBIZWx0IDxrcnp5c3p0b2YuaDFAd3AucGw+CisgKiBCYXNlZCBvbiBwYXRjaGVzIHBvc3RlZCBieSBSYXNrIEluZ2VtYW5uIExhbWJlcnRzZW4gYW5kIFJlbmUgSGVybWFuLgorICogQmFzZWQgb24gT1NTIFNvdW5kIEJsYXN0ZXIgZHJpdmVyLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorI2luY2x1ZGUgPHNvdW5kL3NiLmg+CisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfSVJRCisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfRE1BCisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjZGVmaW5lIFBGWCAiamF6ejE2OiAiCisKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWEgVmlzaW9uIEphenoxNiIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7TWVkaWEgVmlzaW9uID8/PyB9LCIKKwkJIntSVEwsUlRMMzAwMH19Iik7CisKK01PRFVMRV9BVVRIT1IoIktyenlzenRvZiBIZWx0IDxrcnp5c3p0b2YuaDFAd3AucGw+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworc3RhdGljIGludCBkbWE4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworc3RhdGljIGludCBkbWExNltTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIE1lZGlhIFZpc2lvbiBKYXp6MTYgYmFzZWQgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwb3J0LCAiUG9ydCAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgamF6ejE2IGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdV9pcnEsICJNUFUtNDAxIElSUSAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGRtYTgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRtYTgsICJETUE4ICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG1hMTYsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRtYTE2LCAiRE1BMTYgIyBmb3IgamF6ejE2IGRyaXZlci4iKTsKKworI2RlZmluZSBTQl9KQVpaMTZfV0FLRVVQCTB4YWYKKyNkZWZpbmUgU0JfSkFaWjE2X1NFVF9QT1JUUwkweDUwCisjZGVmaW5lIFNCX0RTUF9HRVRfSkFaWl9CUkRfUkVWCTB4ZmEKKyNkZWZpbmUgU0JfSkFaWjE2X1NFVF9ETUFJTlRSCTB4ZmIKKyNkZWZpbmUgU0JfRFNQX0dFVF9KQVpaX01PREVMCTB4ZmUKKworc3RydWN0IHNuZF9jYXJkX2phenoxNiB7CisJc3RydWN0IHNuZF9zYiAqY2hpcDsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqYXp6MTZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmNoaXApCit7CisJcmV0dXJuIHNuZF9zYjhkc3BfaW50ZXJydXB0KGNoaXApOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6MTZfY29uZmlndXJlX3BvcnRzKHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbXB1X3BvcnQsIGludCBpZHgpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4MjAxLCAxLCAiamF6ejE2IGNvbmZpZyIpKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNvbmZpZyBwb3J0IHJlZ2lvbiBpcyBhbHJlYWR5IGluIHVzZS5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlvdXRiKFNCX0pBWloxNl9XQUtFVVAgLSBpZHgsIDB4MjAxKTsKKwl1ZGVsYXkoMTAwKTsKKwlvdXRiKFNCX0pBWloxNl9TRVRfUE9SVFMgKyBpZHgsIDB4MjAxKTsKKwl1ZGVsYXkoMTAwKTsKKwl2YWwgPSBwb3J0ICYgMHg3MDsKKwl2YWwgfD0gKG1wdV9wb3J0ICYgMHgzMCkgPj4gNDsKKwlvdXRiKHZhbCwgMHgyMDEpOworCisJcmVsZWFzZV9yZWdpb24oMHgyMDEsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6MTZfZGV0ZWN0X2JvYXJkKHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbXB1X3BvcnQpCit7CisJaW50IGVycjsKKwlpbnQgdmFsOworCXN0cnVjdCBzbmRfc2IgY2hpcDsKKworCWlmICghcmVxdWVzdF9yZWdpb24ocG9ydCwgMHgxMCwgImphenoxNiIpKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IHJlZ2lvbiBpcyBhbHJlYWR5IGluIHVzZS5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwkvKiBqdXN0IHRvIGNhbGwgc25kX3NiZHNwX2NvbW1hbmQvcmVzZXQvZ2V0X2J5dGUoKSAqLworCWNoaXAucG9ydCA9IHBvcnQ7CisKKwllcnIgPSBzbmRfc2Jkc3BfcmVzZXQoJmNoaXApOworCWlmIChlcnIgPCAwKQorCQlmb3IgKHZhbCA9IDA7IHZhbCA8IDQ7IHZhbCsrKSB7CisJCQllcnIgPSBqYXp6MTZfY29uZmlndXJlX3BvcnRzKHBvcnQsIG1wdV9wb3J0LCB2YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJYnJlYWs7CisKKwkJCWVyciA9IHNuZF9zYmRzcF9yZXNldCgmY2hpcCk7CisJCQlpZiAoIWVycikKKwkJCQlicmVhazsKKwkJfQorCWlmIChlcnIgPCAwKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlpZiAoIXNuZF9zYmRzcF9jb21tYW5kKCZjaGlwLCBTQl9EU1BfR0VUX0pBWlpfQlJEX1JFVikpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisJdmFsID0gc25kX3NiZHNwX2dldF9ieXRlKCZjaGlwKTsKKwlpZiAodmFsID49IDB4MzApCisJCXNuZF9zYmRzcF9nZXRfYnl0ZSgmY2hpcCk7CisKKwlpZiAoKHZhbCAmIDB4ZjApICE9IDB4MTApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCWlmICghc25kX3NiZHNwX2NvbW1hbmQoJmNoaXAsIFNCX0RTUF9HRVRfSkFaWl9NT0RFTCkpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisJc25kX3NiZHNwX2dldF9ieXRlKCZjaGlwKTsKKwllcnIgPSBzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCXNuZF9wcmludGQoIk1lZGlhIFZpc2lvbiBKYXp6MTYgYm9hcmQgZGV0ZWN0ZWQ6IHJldiAweCV4LCBtb2RlbCAweCV4XG4iLAorCQkgICB2YWwsIGVycik7CisKKwllcnIgPSAwOworCitlcnJfdW5tYXA6CisJcmVsZWFzZV9yZWdpb24ocG9ydCwgMHgxMCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgamF6ejE2X2NvbmZpZ3VyZV9ib2FyZChzdHJ1Y3Qgc25kX3NiICpjaGlwLCBpbnQgbXB1X2lycSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBqYXp6X2lycV9iaXRzW10gPSB7IDAsIDAsIDIsIDMsIDAsIDEsIDAsIDQsCisJCQkJCQkgMCwgMiwgNSwgMCwgMCwgMCwgMCwgNiB9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGphenpfZG1hX2JpdHNbXSA9IHsgMCwgMSwgMCwgMiwgMCwgMywgMCwgNCB9OworCisJaWYgKGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hOF0gPT0gMCB8fAorCSAgICBqYXp6X2RtYV9iaXRzW2NoaXAtPmRtYTE2XSA9PSAwIHx8CisJICAgIGphenpfaXJxX2JpdHNbY2hpcC0+aXJxXSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfSkFaWjE2X1NFVF9ETUFJTlRSKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwKKwkJCSAgICAgICBqYXp6X2RtYV9iaXRzW2NoaXAtPmRtYThdIHwKKwkJCSAgICAgICAoamF6el9kbWFfYml0c1tjaGlwLT5kbWExNl0gPDwgNCkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLAorCQkJICAgICAgIGphenpfaXJxX2JpdHNbY2hpcC0+aXJxXSB8CisJCQkgICAgICAgKGphenpfaXJxX2JpdHNbbXB1X2lycV0gPDwgNCkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9qYXp6MTZfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KQoreworCWlmICghZW5hYmxlW2Rldl0pCisJCXJldHVybiAwOworCWlmIChwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBsZWFzZSBzcGVjaWZ5IHBvcnRcbiIpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHBvcnRbZGV2XSA9PSAweDIwMCB8fCAocG9ydFtkZXZdICYgfjB4MjcwKSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJpbmNvcnJlY3QgcG9ydCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRtYThbZGV2XSAhPSBTTkRSVl9BVVRPX0RNQSAmJgorCSAgICBkbWE4W2Rldl0gIT0gMSAmJiBkbWE4W2Rldl0gIT0gMykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkbWE4IG11c3QgYmUgMSBvciAzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChkbWExNltkZXZdICE9IFNORFJWX0FVVE9fRE1BICYmCisJICAgIGRtYTE2W2Rldl0gIT0gNSAmJiBkbWExNltkZXZdICE9IDcpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZG1hMTYgbXVzdCBiZSA1IG9yIDdcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1wdV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUICYmCisJICAgIChtcHVfcG9ydFtkZXZdICYgfjB4MDMwKSAhPSAweDMwMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJpbmNvcnJlY3QgbXB1X3BvcnQgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChtcHVfaXJxW2Rldl0gIT0gU05EUlZfQVVUT19ETUEgJiYKKwkgICAgbXB1X2lycVtkZXZdICE9IDIgJiYgbXB1X2lycVtkZXZdICE9IDMgJiYKKwkgICAgbXB1X2lycVtkZXZdICE9IDUgJiYgbXB1X2lycVtkZXZdICE9IDcpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibXB1X2lycSBtdXN0IGJlIDIsIDMsIDUgb3IgN1xuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2phenoxNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfY2FyZF9qYXp6MTYgKmphenoxNjsKKwlzdHJ1Y3Qgc25kX3NiICpjaGlwOworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHsyLCAzLCA1LCA3LCA5LCAxMCwgMTUsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2RtYXM4W10gPSB7MSwgMywgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hczE2W10gPSB7NSwgNywgLTF9OworCWludCBlcnIsIHhpcnEsIHhkbWE4LCB4ZG1hMTYsIHhtcHVfcG9ydCwgeG1wdV9pcnE7CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2phenoxNiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWphenoxNiA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXhpcnEgPSBpcnFbZGV2XTsKKwlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQl4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpOworCQlpZiAoeGlycSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBlcnJfZnJlZTsKKwkJfQorCX0KKwl4ZG1hOCA9IGRtYThbZGV2XTsKKwlpZiAoeGRtYTggPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJeGRtYTggPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hczgpOworCQlpZiAoeGRtYTggPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BOFxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCXhkbWExNiA9IGRtYTE2W2Rldl07CisJaWYgKHhkbWExNiA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQl4ZG1hMTYgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hczE2KTsKKwkJaWYgKHhkbWExNiA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExNlxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCisJeG1wdV9wb3J0ID0gbXB1X3BvcnRbZGV2XTsKKwlpZiAoeG1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkKKwkJeG1wdV9wb3J0ID0gMDsKKwllcnIgPSBqYXp6MTZfZGV0ZWN0X2JvYXJkKHBvcnRbZGV2XSwgeG1wdV9wb3J0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lZGlhIFZpc2lvbiBKYXp6MTYgYm9hcmQgbm90IGRldGVjdGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisJZXJyID0gc25kX3NiZHNwX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIGlycVtkZXZdLAorCQkJICAgICAgIGphenoxNl9pbnRlcnJ1cHQsCisJCQkgICAgICAgZG1hOFtkZXZdLCBkbWExNltkZXZdLAorCQkJICAgICAgIFNCX0hXX0pBWloxNiwKKwkJCSAgICAgICAmY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwl4bXB1X2lycSA9IG1wdV9pcnFbZGV2XTsKKwlpZiAoeG1wdV9pcnEgPT0gU05EUlZfQVVUT19JUlEgfHwgbXB1X3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCXhtcHVfaXJxID0gMDsKKwllcnIgPSBqYXp6MTZfY29uZmlndXJlX2JvYXJkKGNoaXAsIHhtcHVfaXJxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lZGlhIFZpc2lvbiBKYXp6MTYgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWphenoxNi0+Y2hpcCA9IGNoaXA7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiamF6ejE2Iik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIk1lZGlhIFZpc2lvbiBKYXp6MTYiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLAorCQkiTWVkaWEgVmlzaW9uIEphenoxNiBhdCAweCVseCwgaXJxICVkLCBkbWE4ICVkLCBkbWExNiAlZCIsCisJCXBvcnRbZGV2XSwgeGlycSwgeGRtYTgsIHhkbWExNik7CisKKwllcnIgPSBzbmRfc2I4ZHNwX3BjbShjaGlwLCAwLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKwllcnIgPSBzbmRfc2JtaXhlcl9uZXcoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwllcnIgPSBzbmRfb3BsM19jcmVhdGUoY2FyZCwgY2hpcC0+cG9ydCwgY2hpcC0+cG9ydCArIDIsCisJCQkgICAgICBPUEwzX0hXX0FVVE8sIDEsICZvcGwzKTsKKwlpZiAoZXJyIDwgMCkKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHhcbiIsCisJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMik7CisJZWxzZSB7CisJCWVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9mcmVlOworCX0KKwlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKKwkJCW1wdV9pcnFbZGV2XSA9IC0xOworCisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsCisJCQkJCU1QVTQwMV9IV19NUFU0MDEsCisJCQkJCW1wdV9wb3J0W2Rldl0sIDAsCisJCQkJCW1wdV9pcnFbZGV2XSwKKwkJCQkJbXB1X2lycVtkZXZdID49IDAgPyBJUlFGX0RJU0FCTEVEIDogMCwKKwkJCQkJTlVMTCkgPCAwKQorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gTVBVLTQwMSBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQkJCW1wdV9wb3J0W2Rldl0pOworCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCisJZGV2X3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc25kX2phenoxNl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpOworCisJZGV2X3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzbmRfamF6ejE2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IG4sCisJCQkgICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2ICphY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gYWNhcmQtPmNoaXA7CisKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOworCXNuZF9zYm1peGVyX3N1c3BlbmQoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2phenoxNl9yZXN1bWUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IG4pCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfY2FyZF9qYXp6MTYgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKKworCXNuZF9zYmRzcF9yZXNldChjaGlwKTsKKwlzbmRfc2JtaXhlcl9yZXN1bWUoY2hpcCk7CisJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfamF6ejE2X2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX2phenoxNl9tYXRjaCwKKwkucHJvYmUJCT0gc25kX2phenoxNl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9qYXp6MTZfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHNuZF9qYXp6MTZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9qYXp6MTZfcmVzdW1lLAorI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImphenoxNiIKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2phenoxNl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9qYXp6MTZfZHJpdmVyLCBTTkRSVl9DQVJEUyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfamF6ejE2X2V4aXQodm9pZCkKK3sKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9qYXp6MTZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX2phenoxNl9pbml0KQorbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2phenoxNl9leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOF9tYWluLmMgYi9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYwppbmRleCA2NThkNTU3Li43ZDg0YzlmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYwpAQCAtMTA2LDkgKzEwNiwyMSBAQAogCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAl1bnNpZ25lZCBpbnQgbWl4cmVnLCByYXRlLCBzaXplLCBjb3VudDsKKwl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIHN0ZXJlbyA9IHJ1bnRpbWUtPmNoYW5uZWxzID4gMTsKKwlpbnQgZG1hOwogCiAJcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CiAJc3dpdGNoIChjaGlwLT5oYXJkd2FyZSkgeworCWNhc2UgU0JfSFdfSkFaWjE2OgorCQlpZiAocnVudGltZS0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKSB7CisJCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfQ0FQVFVSRV8xNikKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJZWxzZQorCQkJCWNoaXAtPm1vZGUgfD0gU0JfTU9ERV9QTEFZQkFDS18xNjsKKwkJfQorCQljaGlwLT5wbGF5YmFja19mb3JtYXQgPSBTQl9EU1BfTE9fT1VUUFVUX0FVVE87CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlpZiAocnVudGltZS0+Y2hhbm5lbHMgPiAxKSB7CiAJCQlpZiAoc25kX0JVR19PTihyYXRlICE9IFNCOF9SQVRFKDExMDI1KSAmJgpAQCAtMTMzLDExICsxNDUsMjEgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX1BMQVlCQUNLXzE2KSB7CisJCWZvcm1hdCA9IHN0ZXJlbyA/IFNCX0RTUF9TVEVSRU9fMTZCSVQgOiBTQl9EU1BfTU9OT18xNkJJVDsKKwkJZG1hID0gY2hpcC0+ZG1hMTY7CisJfSBlbHNlIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT184QklUIDogU0JfRFNQX01PTk9fOEJJVDsKKwkJY2hpcC0+bW9kZSB8PSBTQl9NT0RFX1BMQVlCQUNLXzg7CisJCWRtYSA9IGNoaXAtPmRtYTg7CisJfQogCXNpemUgPSBjaGlwLT5wX2RtYV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CiAJY291bnQgPSBjaGlwLT5wX3BlcmlvZF9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX1NQRUFLRVJfT04pOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gU0JfSFdfSkFaWjE2KQorCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBmb3JtYXQpOworCWVsc2UgaWYgKHN0ZXJlbykgewogCQkvKiBzZXQgcGxheWJhY2sgc3RlcmVvIG1vZGUgKi8KIAkJc3Bpbl9sb2NrKCZjaGlwLT5taXhlcl9sb2NrKTsKIAkJbWl4cmVnID0gc25kX3NibWl4ZXJfcmVhZChjaGlwLCBTQl9EU1BfU1RFUkVPX1NXKTsKQEAgLTE0NywxNSArMTY5LDE0IEBACiAJCS8qIFNvdW5kYmxhc3RlciBoYXJkd2FyZSBwcm9ncmFtbWluZyByZWZlcmVuY2UgZ3VpZGUsIDMtMjMgKi8KIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX0RNQThfRVhJVCk7CiAJCXJ1bnRpbWUtPmRtYV9hcmVhWzBdID0gMHg4MDsKLQkJc25kX2RtYV9wcm9ncmFtKGNoaXAtPmRtYTgsIHJ1bnRpbWUtPmRtYV9hZGRyLCAxLCBETUFfTU9ERV9XUklURSk7CisJCXNuZF9kbWFfcHJvZ3JhbShkbWEsIHJ1bnRpbWUtPmRtYV9hZGRyLCAxLCBETUFfTU9ERV9XUklURSk7CiAJCS8qIGZvcmNlIGludGVycnVwdCAqLwotCQljaGlwLT5tb2RlID0gU0JfTU9ERV9IQUxUOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfT1VUUFVUKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMCk7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDApOwogCX0KIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU0FNUExFX1JBVEUpOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKKwlpZiAoc3RlcmVvKSB7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuIC8gMik7CiAJCXNwaW5fbG9jaygmY2hpcC0+bWl4ZXJfbG9jayk7CiAJCS8qIHNhdmUgb3V0cHV0IGZpbHRlciBzdGF0dXMgYW5kIHR1cm4gaXQgb2ZmICovCkBAIC0xNjgsMTMgKzE4OSwxNSBAQAogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAyNTYgLSBydW50aW1lLT5yYXRlX2Rlbik7CiAJfQogCWlmIChjaGlwLT5wbGF5YmFja19mb3JtYXQgIT0gU0JfRFNQX09VVFBVVCkgeworCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCQljb3VudCAvPSAyOwogCQljb3VudC0tOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfQkxPQ0tfU0laRSk7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ICYgMHhmZik7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ID4+IDgpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCXNuZF9kbWFfcHJvZ3JhbShjaGlwLT5kbWE4LCBydW50aW1lLT5kbWFfYWRkciwKKwlzbmRfZG1hX3Byb2dyYW0oZG1hLCBydW50aW1lLT5kbWFfYWRkciwKIAkJCXNpemUsIERNQV9NT0RFX1dSSVRFIHwgRE1BX0FVVE9JTklUKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMiw3ICsyMzUsNiBAQAogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PRkYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCWNoaXAtPm1vZGUgPSAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSA/IFNCX01PREVfUExBWUJBQ0tfOCA6IFNCX01PREVfSEFMVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM0LDkgKzI1NiwyMSBAQAogCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAl1bnNpZ25lZCBpbnQgbWl4cmVnLCByYXRlLCBzaXplLCBjb3VudDsKKwl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIHN0ZXJlbyA9IHJ1bnRpbWUtPmNoYW5uZWxzID4gMTsKKwlpbnQgZG1hOwogCiAJcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CiAJc3dpdGNoIChjaGlwLT5oYXJkd2FyZSkgeworCWNhc2UgU0JfSFdfSkFaWjE2OgorCQlpZiAocnVudGltZS0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKSB7CisJCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWVsc2UKKwkJCQljaGlwLT5tb2RlIHw9IFNCX01PREVfQ0FQVFVSRV8xNjsKKwkJfQorCQljaGlwLT5jYXB0dXJlX2Zvcm1hdCA9IFNCX0RTUF9MT19JTlBVVF9BVVRPOworCQlicmVhazsKIAljYXNlIFNCX0hXX1BSTzoKIAkJaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgewogCQkJaWYgKHNuZF9CVUdfT04ocmF0ZSAhPSBTQjhfUkFURSgxMTAyNSkgJiYKQEAgLTI2MiwxNCArMjk2LDI0IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9DQVBUVVJFXzE2KSB7CisJCWZvcm1hdCA9IHN0ZXJlbyA/IFNCX0RTUF9TVEVSRU9fMTZCSVQgOiBTQl9EU1BfTU9OT18xNkJJVDsKKwkJZG1hID0gY2hpcC0+ZG1hMTY7CisJfSBlbHNlIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT184QklUIDogU0JfRFNQX01PTk9fOEJJVDsKKwkJY2hpcC0+bW9kZSB8PSBTQl9NT0RFX0NBUFRVUkVfODsKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwl9CiAJc2l6ZSA9IGNoaXAtPmNfZG1hX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAljb3VudCA9IGNoaXAtPmNfcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PRkYpOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpCisJaWYgKGNoaXAtPmhhcmR3YXJlID09IFNCX0hXX0pBWloxNikKKwkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgZm9ybWF0KTsKKwllbHNlIGlmIChzdGVyZW8pCiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TVEVSRU9fOEJJVCk7CiAJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX1NBTVBMRV9SQVRFKTsKLQlpZiAocnVudGltZS0+Y2hhbm5lbHMgPiAxKSB7CisJaWYgKHN0ZXJlbykgewogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAyNTYgLSBydW50aW1lLT5yYXRlX2RlbiAvIDIpOwogCQlzcGluX2xvY2soJmNoaXAtPm1peGVyX2xvY2spOwogCQkvKiBzYXZlIGlucHV0IGZpbHRlciBzdGF0dXMgYW5kIHR1cm4gaXQgb2ZmICovCkBAIC0yODIsMTMgKzMyNiwxNSBAQAogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAyNTYgLSBydW50aW1lLT5yYXRlX2Rlbik7CiAJfQogCWlmIChjaGlwLT5jYXB0dXJlX2Zvcm1hdCAhPSBTQl9EU1BfSU5QVVQpIHsKKwkJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX1BMQVlCQUNLXzE2KQorCQkJY291bnQgLz0gMjsKIAkJY291bnQtLTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX0JMT0NLX1NJWkUpOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBjb3VudCAmIDB4ZmYpOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBjb3VudCA+PiA4KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQlzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hOCwgcnVudGltZS0+ZG1hX2FkZHIsCisJc25kX2RtYV9wcm9ncmFtKGRtYSwgcnVudGltZS0+ZG1hX2FkZHIsCiAJCQlzaXplLCBETUFfTU9ERV9SRUFEIHwgRE1BX0FVVE9JTklUKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMyOCw3ICszNzQsNiBAQAogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PRkYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCWNoaXAtPm1vZGUgPSAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSA/IFNCX01PREVfQ0FQVFVSRV84IDogU0JfTU9ERV9IQUxUOwogCXJldHVybiAwOwogfQogCkBAIC0zMzksMTMgKzM4NCwyMSBAQAogCiAJc25kX3NiX2Fja184Yml0KGNoaXApOwogCXN3aXRjaCAoY2hpcC0+bW9kZSkgewotCWNhc2UgU0JfTU9ERV9QTEFZQkFDS184OgkvKiBvay4uIHBsYXliYWNrIGlzIGFjdGl2ZSAqLworCWNhc2UgU0JfTU9ERV9QTEFZQkFDS18xNjoJLyogb2suLiBwbGF5YmFjayBpcyBhY3RpdmUgKi8KKwkJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFNCX0hXX0pBWloxNikKKwkJCWJyZWFrOworCQkvKiBmYWxsdGhydSAqLworCWNhc2UgU0JfTU9ERV9QTEFZQkFDS184OgogCQlzdWJzdHJlYW0gPSBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW07CiAJCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJCWlmIChjaGlwLT5wbGF5YmFja19mb3JtYXQgPT0gU0JfRFNQX09VVFBVVCkKIAkJICAgIAlzbmRfc2I4X3BsYXliYWNrX3RyaWdnZXIoc3Vic3RyZWFtLCBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCk7CiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAkJYnJlYWs7CisJY2FzZSBTQl9NT0RFX0NBUFRVUkVfMTY6CisJCWlmIChjaGlwLT5oYXJkd2FyZSAhPSBTQl9IV19KQVpaMTYpCisJCQlicmVhazsKKwkJLyogZmFsbHRocnUgKi8KIAljYXNlIFNCX01PREVfQ0FQVFVSRV84OgogCQlzdWJzdHJlYW0gPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTM2MSwxMCArNDE0LDE1IEBACiB7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzaXplX3QgcHRyOworCWludCBkbWE7CiAKLQlpZiAoY2hpcC0+bW9kZSAhPSBTQl9NT0RFX1BMQVlCQUNLXzgpCisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX1BMQVlCQUNLXzgpCisJCWRtYSA9IGNoaXAtPmRtYTg7CisJZWxzZSBpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCWRtYSA9IGNoaXAtPmRtYTE2OworCWVsc2UKIAkJcmV0dXJuIDA7Ci0JcHRyID0gc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPnBfZG1hX3NpemUpOworCXB0ciA9IHNuZF9kbWFfcG9pbnRlcihkbWEsIGNoaXAtPnBfZG1hX3NpemUpOwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC0zNzIsMTAgKzQzMCwxNSBAQAogewogCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc2l6ZV90IHB0cjsKKwlpbnQgZG1hOwogCi0JaWYgKGNoaXAtPm1vZGUgIT0gU0JfTU9ERV9DQVBUVVJFXzgpCisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfOCkKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwllbHNlIGlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9DQVBUVVJFXzE2KQorCQlkbWEgPSBjaGlwLT5kbWExNjsKKwllbHNlCiAJCXJldHVybiAwOwotCXB0ciA9IHNuZF9kbWFfcG9pbnRlcihjaGlwLT5kbWE4LCBjaGlwLT5jX2RtYV9zaXplKTsKKwlwdHIgPSBzbmRfZG1hX3BvaW50ZXIoZG1hLCBjaGlwLT5jX2RtYV9zaXplKTsKIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgcHRyKTsKIH0KIApAQCAtNDQ2LDYgKzUwOSwxNCBAQAogCQlydW50aW1lLT5odyA9IHNuZF9zYjhfY2FwdHVyZTsKIAl9CiAJc3dpdGNoIChjaGlwLT5oYXJkd2FyZSkgeworCWNhc2UgU0JfSFdfSkFaWjE2OgorCQlpZiAoY2hpcC0+ZG1hMTYgPT0gNSB8fCBjaGlwLT5kbWExNiA9PSA3KQorCQkJcnVudGltZS0+aHcuZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKKwkJcnVudGltZS0+aHcucmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMDsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSA0MDAwOworCQlydW50aW1lLT5ody5yYXRlX21heCA9IDUwMDAwOworCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAyOworCQlicmVhazsKIAljYXNlIFNCX0hXX1BSTzoKIAkJcnVudGltZS0+aHcucmF0ZV9tYXggPSA0NDEwMDsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMjsKQEAgLTQ2OCw2ICs1MzksMTQgQEAKIAl9CiAJc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQkJICAgICAgJmh3X2NvbnN0cmFpbnRzX2Nsb2NrKTsKKwlpZiAoY2hpcC0+ZG1hOCA+IDMgfHwgY2hpcC0+ZG1hMTYgPj0gMCkgeworCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCAyKTsKKwkJc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgMik7CisJCXJ1bnRpbWUtPmh3LmJ1ZmZlcl9ieXRlc19tYXggPSAxMjggKiAxMDI0ICogMTAyNDsKKwkJcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9IDEyOCAqIDEwMjQgKiAxMDI0OworCX0KIAlyZXR1cm4gMDsJCiB9CiAKQEAgLTQ4MCw2ICs1NTksMTAgQEAKIAljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPm9wZW5fbG9jaywgZmxhZ3MpOwogCWNoaXAtPm9wZW4gJj0gflNCX09QRU5fUENNOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQljaGlwLT5tb2RlICY9IH5TQl9NT0RFX1BMQVlCQUNLOworCWVsc2UKKwkJY2hpcC0+bW9kZSAmPSB+U0JfTU9ERV9DQVBUVVJFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPm9wZW5fbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtNTE1LDYgKzU5OCw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY2hpcC0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CisJc2l6ZV90IG1heF9wcmVhbGxvYyA9IDY0ICogMTAyNDsKIAogCWlmIChycGNtKQogCQkqcnBjbSA9IE5VTEw7CkBAIC01MjcsOSArNjExLDExIEBACiAJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9zYjhfcGxheWJhY2tfb3BzKTsKIAlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfc2I4X2NhcHR1cmVfb3BzKTsKIAorCWlmIChjaGlwLT5kbWE4ID4gMyB8fCBjaGlwLT5kbWExNiA+PSAwKQorCQltYXhfcHJlYWxsb2MgPSAxMjggKiAxMDI0OwogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfaXNhX2RhdGEoKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCSAgICAgIDY0KjEwMjQsIG1heF9wcmVhbGxvYyk7CiAKIAlpZiAocnBjbSkKIAkJKnJwY20gPSBwY207CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMgYi9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKaW5kZXggMjdhNjUxNS4uZWFlNmMxYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYwpAQCAtMTcwLDYgKzE3MCw5IEBACiAJY2FzZSBTQl9IV19DUzU1MzA6CiAJCXN0ciA9ICIxNiAoQ1M1NTMwKSI7CiAJCWJyZWFrOworCWNhc2UgU0JfSFdfSkFaWjE2OgorCQlzdHIgPSAiUHJvIChKYXp6MTYpIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCAzMThmZjBjLi42NDk2ODIyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtNTI4LDIwICs1MjgsMTEgQEAKICAqIFNCIDIuMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IyMF9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9NQVNURVJfREVWLCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IyMF9jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9QQ01fREVWLCAxLCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IyMF9jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQMjBfRk1fREVWLCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IyMF9jdGxfY2RfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQMjBfQ0RfREVWLCAxLCA3KTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2IyMF9jb250cm9sc1tdID0gewotCSZzbmRfc2IyMF9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfc2IyMF9jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2IyMF9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9jZF9wbGF5X3ZvbAorc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2NvbnRyb2xzW10gPSB7CisJU0JfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQMjBfTUFTVEVSX0RFViwgMSwgNyksCisJU0JfU0lOR0xFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQMjBfUENNX0RFViwgMSwgMyksCisJU0JfU0lOR0xFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9GTV9ERVYsIDEsIDcpLAorCVNCX1NJTkdMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQMjBfQ0RfREVWLCAxLCA3KQogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgc25kX3NiMjBfaW5pdF92YWx1ZXNbXVsyXSA9IHsKQEAgLTU1Miw0MSArNTQzLDI0IEBACiAvKgogICogU0IgUHJvIHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX21hc3Rlcl9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX01BU1RFUl9ERVYsIFNCX0RTUF9NQVNURVJfREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX1BDTV9ERVYsIFNCX0RTUF9QQ01fREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X2ZpbHRlciA9Ci0JU0JfU0lOR0xFKCJQQ00gUGxheWJhY2sgRmlsdGVyIiwgU0JfRFNQX1BMQVlCQUNLX0ZJTFQsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX0ZNX0RFViwgU0JfRFNQX0ZNX0RFViwgNSwgMSwgNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfQ0RfREVWLCBTQl9EU1BfQ0RfREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2xpbmVfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTElORV9ERVYsIFNCX0RTUF9MSU5FX0RFViwgNSwgMSwgNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9taWNfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9NSUNfREVWLCAxLCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NhcHR1cmVfc291cmNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY29udHJvbHNbXSA9IHsKKwlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9NQVNURVJfREVWLCBTQl9EU1BfTUFTVEVSX0RFViwgNSwgMSwgNyksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1BfUENNX0RFViwgU0JfRFNQX1BDTV9ERVYsIDUsIDEsIDcpLAorCVNCX1NJTkdMRSgiUENNIFBsYXliYWNrIEZpbHRlciIsIFNCX0RTUF9QTEFZQkFDS19GSUxULCA1LCAxKSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQX0ZNX0RFViwgU0JfRFNQX0ZNX0RFViwgNSwgMSwgNyksCisJU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfQ0RfREVWLCBTQl9EU1BfQ0RfREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1BfTElORV9ERVYsIFNCX0RTUF9MSU5FX0RFViwgNSwgMSwgNyksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX01JQ19ERVYsIDEsIDMpLAogCXsKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAogCQkudHlwZSA9IFNCX01JWF9DQVBUVVJFX1BSTwotCX07Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9jYXB0dXJlX2ZpbHRlciA9Ci0JU0JfU0lOR0xFKCJDYXB0dXJlIEZpbHRlciIsIFNCX0RTUF9DQVBUVVJFX0ZJTFQsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfY2FwdHVyZV9sb3dfZmlsdGVyID0KLQlTQl9TSU5HTEUoIkNhcHR1cmUgTG93LVBhc3MgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgMywgMSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX3NicHJvX2NvbnRyb2xzW10gPSB7Ci0JJnNuZF9zYnByb19jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9wY21fcGxheV9maWx0ZXIsCi0JJnNuZF9zYnByb19jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfY2RfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfbGluZV9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfY2FwdHVyZV9zb3VyY2UsCi0JJnNuZF9zYnByb19jdGxfY2FwdHVyZV9maWx0ZXIsCi0JJnNuZF9zYnByb19jdGxfY2FwdHVyZV9sb3dfZmlsdGVyCisJfSwKKwlTQl9TSU5HTEUoIkNhcHR1cmUgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgNSwgMSksCisJU0JfU0lOR0xFKCJDYXB0dXJlIExvdy1QYXNzIEZpbHRlciIsIFNCX0RTUF9DQVBUVVJFX0ZJTFQsIDMsIDEpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfc2Jwcm9faW5pdF92YWx1ZXNbXVsyXSA9IHsKQEAgLTU5OCw2OCArNTcyLDQyIEBACiAvKgogICogU0IxNiBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9NQVNURVJfREVWLCAoU0JfRFNQNF9NQVNURVJfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfM2RfZW5oYW5jZV9zd2l0Y2ggPQotCVNCX1NJTkdMRSgiM0QgRW5oYW5jZW1lbnQgU3dpdGNoIiwgU0JfRFNQNF8zRFNFLCAwLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfdG9uZV9iYXNzID0KLQlTQl9ET1VCTEUoIlRvbmUgQ29udHJvbCAtIEJhc3MiLCBTQl9EU1A0X0JBU1NfREVWLCAoU0JfRFNQNF9CQVNTX0RFViArIDEpLCA0LCA0LCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3RvbmVfdHJlYmxlID0KLQlTQl9ET1VCTEUoIlRvbmUgQ29udHJvbCAtIFRyZWJsZSIsIFNCX0RTUDRfVFJFQkxFX0RFViwgKFNCX0RTUDRfVFJFQkxFX0RFViArIDEpLCA0LCA0LCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9QQ01fREVWLCAoU0JfRFNQNF9QQ01fREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfc3ludGhfY2FwdHVyZV9yb3V0ZSA9Ci0JU0IxNl9JTlBVVF9TVygiU3ludGggQ2FwdHVyZSBSb3V0ZSIsIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNiwgNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfU1lOVEhfREVWLCAoU0JfRFNQNF9TWU5USF9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJDRCBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCAyLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2ggPQotCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCAyLCAxLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9DRF9ERVYsIChTQl9EU1A0X0NEX0RFViArIDEpLCAzLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2xpbmVfY2FwdHVyZV9yb3V0ZSA9Ci0JU0IxNl9JTlBVVF9TVygiTGluZSBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCA0LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RTUDRfT1VUUFVUX1NXLCBTQl9EU1A0X09VVFBVVF9TVywgNCwgMywgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X0xJTkVfREVWLCAoU0JfRFNQNF9MSU5FX0RFViArIDEpLCAzLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJNaWMgQ2FwdHVyZSBSb3V0ZSIsIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgMCwgMCk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTUlDX0RFViwgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCA9Ci0JU0JfU0lOR0xFKCJCZWVwIFZvbHVtZSIsIFNCX0RTUDRfU1BFQUtFUl9ERVYsIDYsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCA9Ci0JU0JfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIFNCX0RTUDRfSUdBSU5fREVWLCAoU0JfRFNQNF9JR0FJTl9ERVYgKyAxKSwgNiwgNiwgMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfT0dBSU5fREVWLCAoU0JfRFNQNF9PR0FJTl9ERVYgKyAxKSwgNiwgNiwgMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2F1dG9fbWljX2dhaW4gPQotCVNCX1NJTkdMRSgiTWljIEF1dG8gR2FpbiIsIFNCX0RTUDRfTUlDX0FHQywgMCwgMSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX3NiMTZfY29udHJvbHNbXSA9IHsKLQkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsXzNkX2VuaGFuY2Vfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfdG9uZV9iYXNzLAotCSZzbmRfc2IxNl9jdGxfdG9uZV90cmVibGUsCi0JJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9jZF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAotCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9hdXRvX21pY19nYWluCitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY29udHJvbHNbXSA9IHsKKwlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfTUFTVEVSX0RFViwgKFNCX0RTUDRfTUFTVEVSX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X1BDTV9ERVYsIChTQl9EU1A0X1BDTV9ERVYgKyAxKSwgMywgMywgMzEpLAorCVNCMTZfSU5QVVRfU1coIlN5bnRoIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDYsIDUpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X1NZTlRIX0RFViwgKFNCX0RTUDRfU1lOVEhfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQjE2X0lOUFVUX1NXKCJDRCBDYXB0dXJlIFJvdXRlIiwKKwkJICAgICAgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCAyLCAxKSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCAyLCAxLCAxKSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9DRF9ERVYsIChTQl9EU1A0X0NEX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0IxNl9JTlBVVF9TVygiTWljIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDAsIDApLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RTUDRfT1VUUFVUX1NXLCAwLCAxKSwKKwlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X01JQ19ERVYsIDMsIDMxKSwKKwlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFNQNF9TUEVBS0VSX0RFViwgNiwgMyksCisJU0JfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9JR0FJTl9ERVYsIChTQl9EU1A0X0lHQUlOX0RFViArIDEpLCA2LCA2LCAzKSwKKwlTQl9ET1VCTEUoIlBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9PR0FJTl9ERVYsIChTQl9EU1A0X09HQUlOX0RFViArIDEpLCA2LCA2LCAzKSwKKwlTQjE2X0lOUFVUX1NXKCJMaW5lIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDQsIDMpLAorCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RTUDRfT1VUUFVUX1NXLCBTQl9EU1A0X09VVFBVVF9TVywgNCwgMywgMSksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9MSU5FX0RFViwgKFNCX0RTUDRfTElORV9ERVYgKyAxKSwgMywgMywgMzEpLAorCVNCX1NJTkdMRSgiTWljIEF1dG8gR2FpbiIsIFNCX0RTUDRfTUlDX0FHQywgMCwgMSksCisJU0JfU0lOR0xFKCIzRCBFbmhhbmNlbWVudCBTd2l0Y2giLCBTQl9EU1A0XzNEU0UsIDAsIDEpLAorCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gQmFzcyIsCisJCSAgU0JfRFNQNF9CQVNTX0RFViwgKFNCX0RTUDRfQkFTU19ERVYgKyAxKSwgNCwgNCwgMTUpLAorCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gVHJlYmxlIiwKKwkJICBTQl9EU1A0X1RSRUJMRV9ERVYsIChTQl9EU1A0X1RSRUJMRV9ERVYgKyAxKSwgNCwgNCwgMTUpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfc2IxNl9pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNjc4LDQ2ICs2MjYsMzQgQEAKIC8qCiAgKiBEVDAxOXggc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX21hc3Rlcl9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIFNCX0RUMDE5WF9NQVNURVJfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9wY21fcGxheV92b2wgPQotCVNCX0RPVUJMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9QQ01fREVWLCBTQl9EVDAxOVhfUENNX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX1NZTlRIX0RFViwgU0JfRFQwMTlYX1NZTlRIX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfY2RfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX0NEX0RFViwgU0JfRFQwMTlYX0NEX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfbWljX3BsYXlfdm9sID0KLQlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTUlDX0RFViwgNCwgNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfcGNfc3BlYWtlcl92b2wgPQotCVNCX1NJTkdMRSgiQmVlcCBWb2x1bWUiLCBTQl9EVDAxOVhfU1BLUl9ERVYsIDAsICA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9saW5lX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX0xJTkVfREVWLCBTQl9EVDAxOVhfTElORV9ERVYsIDQsMCwgMTUpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3N3aXRjaCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAyLDEsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgNCwzLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9jYXB0dXJlX3NvdXJjZSA9CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jb250cm9sc1tdID0geworCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKKwkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX01BU1RFUl9ERVYsIFNCX0RUMDE5WF9NQVNURVJfREVWLCA0LCAwLCAxNSksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX1BDTV9ERVYsIFNCX0RUMDE5WF9QQ01fREVWLCA0LCAwLCAxNSksCisJU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgNCwgMywgMSksCisJU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RUMDE5WF9TWU5USF9ERVYsIFNCX0RUMDE5WF9TWU5USF9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCAyLCAxLCAxKSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX0NEX0RFViwgU0JfRFQwMTlYX0NEX0RFViwgNCwgMCwgMTUpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RTUDRfT1VUUFVUX1NXLCAwLCAxKSwKKwlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTUlDX0RFViwgNCwgNyksCisJU0JfU0lOR0xFKCJCZWVwIFZvbHVtZSIsIFNCX0RUMDE5WF9TUEtSX0RFViwgMCwgIDcpLAorCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RTUDRfT1VUUFVUX1NXLCBTQl9EU1A0X09VVFBVVF9TVywgNCwgMywgMSksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX0xJTkVfREVWLCBTQl9EVDAxOVhfTElORV9ERVYsIDQsIDAsIDE1KSwKIAl7CiAJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKIAkJLnR5cGUgPSBTQl9NSVhfQ0FQVFVSRV9EVDAxOVgKLQl9OwotCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9kdDAxOXhfY29udHJvbHNbXSA9IHsKLQkvKiBBTFM0MDAwIGJlbG93IGhhcyBzb21lIHBhcnRzIHdoaWNoIHdlIG1pZ2h0IGJlIGxhY2tpbmcsCi0JICogZS5nLiBzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2ggLSBjaGVjayBpdCEgKi8KLQkmc25kX2R0MDE5eF9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfbWljX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9wY19zcGVha2VyX3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfbGluZV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3N3aXRjaCwKLQkmc25kX2R0MDE5eF9jdGxfY2FwdHVyZV9zb3VyY2UKKwl9CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfZHQwMTl4X2luaXRfdmFsdWVzW11bMl0gPSB7CkBAIC03MzUsODIgKzY3MSwzNyBAQAogLyoKICAqIEFMUzQwMDAgc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2ggPQotCVNCX1NJTkdMRSgiTWFzdGVyIE1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAyLCAxLCAxKSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LCAzLCAxKSwKKwlTQl9TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgMCwgMHgwMyksCisJU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNSwgMSksCisJewogCQkubmFtZSA9ICJNYXN0ZXIgTW9ubyBDYXB0dXJlIFJvdXRlIiwKIAkJLnR5cGUgPSBTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLCi0JfTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2ggPQotCVNCX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgMCwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0ID0KLQlTQl9TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgMCwgMHgwMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2FuYWxvZ19sb29wYmFjayA9Ci0JU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2sgPQorCX0sCisJU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKSwKKwlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKSwKKwlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNiwgMHgwMSksCiAJU0JfU0lOR0xFKCJEaWdpdGFsIExvb3BiYWNrIFN3aXRjaCIsCi0JCSAgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwgNywgMHgwMSk7Ci0vKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCi0gKiBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBpZGVudGlmeSB3aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHdoYXQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDYsIDB4MDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8gPQotCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIExldmVsIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDAsIDB4MDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSA9CisJCSAgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwgNywgMHgwMSksCisJLyogRklYTUU6IGZ1bmN0aW9uYWxpdHkgb2YgM0QgY29udHJvbHMgbWlnaHQgYmUgc3dhcHBlZCwgSSBkaWRuJ3QgZmluZAorCSAqIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGlkZW50aWZ5IHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgd2hhdCAqLworCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIExldmVsIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDAsIDB4MDcpLAogCS8qIEZJWE1FOiBtYXliZSB0aGVyZSdzIGFjdHVhbGx5IHNvbWUgc3RhbmRhcmQgM0QgY3RybCBuYW1lIGZvciBpdD8/ICovCi0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gRnJlcSIsIFNCX0FMUzQwMDBfM0RfU05EX0ZYLCA0LCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5ID0KKwlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBGcmVxIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDQsIDB4MDMpLAogCS8qIEZJWE1FOiBBTFM0MDAwYS5wZGYgbWVudGlvbnMgQkJEIChCdWNrZXQgQnJpZ2FkZSBEZXZpY2UpIHRpbWUgZGVsYXksCiAJICogYnV0IHdoYXQgQUxTQSAzRCBhdHRyaWJ1dGUgaXMgdGhhdCBhY3R1YWxseT8gIkNlbnRlciIsICJEZXB0aCIsCiAJICogIldpZGUiIG9yICJTcGFjZSIgb3IgZXZlbiAiTGV2ZWwiPyBBc3N1bWluZyAiV2lkZSIgZm9yIG5vdy4uLiAqLwotCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFdpZGUiLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDAsIDB4MGYpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoID0KLQlTQl9TSU5HTEUoIjNEIFBvd2VyT2ZmIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgNCwgMHgwMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoID0KKwlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBXaWRlIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCAwLCAweDBmKSwKKwlTQl9TSU5HTEUoIjNEIFBvd2VyT2ZmIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgNCwgMHgwMSksCiAJU0JfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgOGtIeiAvIDIwa0h6IExQRiBTd2l0Y2giLAotCQkgIFNCX0FMUzQwMDBfRk1EQUMsIDUsIDB4MDEpOworCQkgIFNCX0FMUzQwMDBfRk1EQUMsIDUsIDB4MDEpLAogI2lmZGVmIE5PVF9BVkFJTEFCTEUKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfZm1kYWMgPQotCVNCX1NJTkdMRSgiRk1EQUMgU3dpdGNoIChPcHRpb24gPykiLCBTQl9BTFM0MDAwX0ZNREFDLCAwLCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfcXNvdW5kID0KLQlTQl9TSU5HTEUoIlFTb3VuZCBNb2RlIiwgU0JfQUxTNDAwMF9RU09VTkQsIDEsIDB4MWYpOwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2FsczQwMDBfY29udHJvbHNbXSA9IHsKLQkJCQkJCS8qIEFMUzQwMDBhLlBERiByZWdzIHBhZ2UgKi8KLQkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwJCS8qIE1YMzAvMzEgMTIgKi8KLQkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCi0JJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCQkvKiBNWDMyLzMzIDEyICovCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwJCS8qIE1YMzQvMzUgMTIvMTMgKi8KLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCQkvKiBNWDNELzNFIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAkJLyogTVgzNi8zNyAxMyAqLwotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLwotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwJCS8qIE1YMzgvMzkgMTMgKi8KLQkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCwJLyogTVg0RCAgICAxNiAqLwotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLwotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAkJLyogTVgzQSAgICAxMyAqLwotCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCQkvKiBNWDNCICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwJCS8qIE1YM0YvNDAgMTUgKi8KLQkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAkJCS8qIE1YNDEvNDIgMTUgKi8KLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwgLyogTVg0QyAxNiAqLwotCSZzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsIC8qIE1YNEIgIDE2ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLwotCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrLCAvKiBNWDREICAgIDE2ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9kaWdpdGFsX2xvb3BiYWNrLCAvKiBDUjMgICAgMjEgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2gsCQkgLyogTVg1MCAgIDE3ICovCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8sCQkgLyogTVg1MCAgIDE3ICovCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSwJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9kZWxheSwJCSAvKiBNWDUxICAgMTggKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2gsCS8qIE1YNTEgICAgMTggKi8KLQkmc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoLAkvKiBNWDRGICAgIDE3ICovCi0jaWZkZWYgTk9UX0FWQUlMQUJMRQotCSZzbmRfYWxzNDAwMF9jdGxfZm1kYWMsCi0JJnNuZF9hbHM0MDAwX2N0bF9xc291bmQsCisJU0JfU0lOR0xFKCJGTURBQyBTd2l0Y2ggKE9wdGlvbiA/KSIsIFNCX0FMUzQwMDBfRk1EQUMsIDAsIDB4MDEpLAorCVNCX1NJTkdMRSgiUVNvdW5kIE1vZGUiLCBTQl9BTFM0MDAwX1FTT1VORCwgMSwgMHgxZiksCiAjZW5kaWYKIH07CiAKQEAgLTgyOSwxMSArNzIwLDEwIEBACiAJeyBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwIH0sCiB9OwogCi0KIC8qCiAgKi8KIHN0YXRpYyBpbnQgc25kX3NibWl4ZXJfaW5pdChzdHJ1Y3Qgc25kX3NiICpjaGlwLAotCQkJICAgIHN0cnVjdCBzYm1peF9lbGVtICoqY29udHJvbHMsCisJCQkgICAgc3RydWN0IHNibWl4X2VsZW0gKmNvbnRyb2xzLAogCQkJICAgIGludCBjb250cm9sc19jb3VudCwKIAkJCSAgICB1bnNpZ25lZCBjaGFyIG1hcFtdWzJdLAogCQkJICAgIGludCBtYXBfY291bnQsCkBAIC04NTYsNyArNzQ2LDggQEAKIAl9CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbnRyb2xzX2NvdW50OyBpZHgrKykgewotCQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX2FkZF9jdGxfZWxlbShjaGlwLCBjb250cm9sc1tpZHhdKSkgPCAwKQorCQllcnIgPSBzbmRfc2JtaXhlcl9hZGRfY3RsX2VsZW0oY2hpcCwgJmNvbnRyb2xzW2lkeF0pOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQogCXNuZF9jb21wb25lbnRfYWRkKGNhcmQsIG5hbWUpOwpAQCAtODg4LDYgKzc3OSw3IEBACiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKIAljYXNlIFNCX0hXX1BSTzoKKwljYXNlIFNCX0hXX0pBWloxNjoKIAkJaWYgKChlcnIgPSBzbmRfc2JtaXhlcl9pbml0KGNoaXAsCiAJCQkJCSAgICBzbmRfc2Jwcm9fY29udHJvbHMsCiAJCQkJCSAgICBBUlJBWV9TSVpFKHNuZF9zYnByb19jb250cm9scyksCkBAIC05MDgsNiArODAwLDE1IEBACiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKIAljYXNlIFNCX0hXX0FMUzQwMDA6CisJCS8qIHVzZSBvbmx5IHRoZSBmaXJzdCAxNiBjb250cm9scyBmcm9tIFNCMTYgKi8KKwkJZXJyID0gc25kX3NibWl4ZXJfaW5pdChjaGlwLAorCQkJCQlzbmRfc2IxNl9jb250cm9scywKKwkJCQkJMTYsCisJCQkJCXNuZF9zYjE2X2luaXRfdmFsdWVzLAorCQkJCQlBUlJBWV9TSVpFKHNuZF9zYjE2X2luaXRfdmFsdWVzKSwKKwkJCQkJIkFMUzQwMDAiKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX2luaXQoY2hpcCwKIAkJCQkJICAgIHNuZF9hbHM0MDAwX2NvbnRyb2xzLAogCQkJCQkgICAgQVJSQVlfU0laRShzbmRfYWxzNDAwMF9jb250cm9scyksCkBAIC0xMDI5LDYgKzkzMCw3IEBACiAJCXNhdmVfbWl4ZXIoY2hpcCwgc2IyMF9zYXZlZF9yZWdzLCBBUlJBWV9TSVpFKHNiMjBfc2F2ZWRfcmVncykpOwogCQlicmVhazsKIAljYXNlIFNCX0hXX1BSTzoKKwljYXNlIFNCX0hXX0pBWloxNjoKIAkJc2F2ZV9taXhlcihjaGlwLCBzYnByb19zYXZlZF9yZWdzLCBBUlJBWV9TSVpFKHNicHJvX3NhdmVkX3JlZ3MpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQl9IV18xNjoKQEAgLTEwNTUsNiArOTU3LDcgQEAKIAkJcmVzdG9yZV9taXhlcihjaGlwLCBzYjIwX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2IyMF9zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlyZXN0b3JlX21peGVyKGNoaXAsIHNicHJvX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2Jwcm9fc2F2ZWRfcmVncykpOwogCQlicmVhazsKIAljYXNlIFNCX0hXXzE2OgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwppbmRleCA1YjlkNmMxLi45MTkxYjMyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYworKysgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwpAQCAtMjAxNCw2ICsyMDE0LDcgQEAKIAljYXNlIFdTU19IV19JTlRFUldBVkU6CiAJCXB0ZXh0cyA9IGd1c21heF90ZXh0czsKIAkJYnJlYWs7CisJY2FzZSBXU1NfSFdfT1BUSTkzWDoKIAljYXNlIFdTU19IV19PUEwzU0EyOgogCQlwdGV4dHMgPSBvcGwzc2FfdGV4dHM7CiAJCWJyZWFrOwpAQCAtMjI0Niw1NCArMjI0NywxMiBAQAogCQlDUzQyMzFfTU9OT19DVFJMLCA1LCAxLCAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfb3B0aTkzeF9jb250cm9sc1tdID0gewotV1NTX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCU9QVGk5M1hfT1VUX0xFRlQsIE9QVGk5M1hfT1VUX1JJR0hULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEVfVExWKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwKLQkJT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDEsIDEsIDMxLCAxLAotCQlkYl9zY2FsZV82Yml0KSwKLVdTU19ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfTEVGVF9PVVRQVVQsIENTNDIzMV9SSUdIVF9PVVRQVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgMCwgMCwgMzEsIDEpLAotV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgVm9sdW1lIiwgMCwKLQkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDEsIDEsIDE1LCAxKSwKLVdTU19ET1VCTEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJQ1M0MjMxX0xFRlRfTElORV9JTiwgQ1M0MjMxX1JJR0hUX0xJTkVfSU4sIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgMCwgMCwgMTUsIDEpLAotV1NTX0RPVUJMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCU9QVGk5M1hfTUlDX0xFRlRfSU5QVVQsIE9QVGk5M1hfTUlDX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlPUFRpOTNYX01JQ19MRUZUX0lOUFVULCBPUFRpOTNYX01JQ19SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiTWljIEJvb3N0IiwgMCwKLQkJQ1M0MjMxX0xFRlRfSU5QVVQsIENTNDIzMV9SSUdIVF9JTlBVVCwgNSwgNSwgMSwgMCksCi1XU1NfRE9VQkxFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfQVVYMV9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMV9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlDUzQyMzFfQVVYMV9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMV9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCU9QVGk5MzFfQVVYX0xFRlRfSU5QVVQsIE9QVGk5MzFfQVVYX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEUoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlPUFRpOTMxX0FVWF9MRUZUX0lOUFVULCBPUFRpOTMxX0FVWF9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiQ2FwdHVyZSBWb2x1bWUiLCAwLAotCQlDUzQyMzFfTEVGVF9JTlBVVCwgQ1M0MjMxX1JJR0hUX0lOUFVULCAwLCAwLCAxNSwgMCksCi17Ci0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCS5pbmZvID0gc25kX3dzc19pbmZvX211eCwKLQkuZ2V0ID0gc25kX3dzc19nZXRfbXV4LAotCS5wdXQgPSBzbmRfd3NzX3B1dF9tdXgsCi19Ci19OwotCiBpbnQgc25kX3dzc19taXhlcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgaW50IGlkeDsKIAlpbnQgZXJyOworCWludCBjb3VudCA9IEFSUkFZX1NJWkUoc25kX3dzc19jb250cm9scyk7CiAKIAlpZiAoc25kX0JVR19PTighY2hpcCB8fCAhY2hpcC0+cGNtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzAyLDI4ICsyMjYxLDE5IEBACiAKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjaGlwLT5wY20tPm5hbWUpOwogCi0JaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19PUFRJOTNYKQotCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX29wdGk5M3hfY29udHJvbHMpOyBpZHgrKykgewotCQkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKLQkJCQkJc25kX2N0bF9uZXcxKCZzbmRfb3B0aTkzeF9jb250cm9sc1tpZHhdLAotCQkJCQkJICAgICBjaGlwKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JZWxzZSB7Ci0JCWludCBjb3VudCA9IEFSUkFZX1NJWkUoc25kX3dzc19jb250cm9scyk7CisJLyogVXNlIG9ubHkgdGhlIGZpcnN0IDExIGVudHJpZXMgb24gQUQxODQ4ICovCisJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKQorCQljb3VudCA9IDExOworCS8qIFRoZXJlIGlzIG5vIGxvb3BiYWNrIG9uIE9QVEk5M1ggKi8KKwllbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfT1BUSTkzWCkKKwkJY291bnQgPSA5OwogCi0JCS8qIFVzZSBvbmx5IHRoZSBmaXJzdCAxMSBlbnRyaWVzIG9uIEFEMTg0OCAqLwotCQlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spCi0JCQljb3VudCA9IDExOwotCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrKSB7Ci0JCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAotCQkJCQlzbmRfY3RsX25ldzEoJnNuZF93c3NfY29udHJvbHNbaWR4XSwKLQkJCQkJCSAgICAgY2hpcCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJfQorCWZvciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrKSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCisJCQkJc25kX2N0bF9uZXcxKCZzbmRfd3NzX2NvbnRyb2xzW2lkeF0sCisJCQkJCSAgICAgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCBmMWQ5ZDE2Li42YWZmMjE3IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTYwMywyNSArNjAyLDE0IEBACiBzdGF0aWMgaW50IHNuZF9zZ2lvMmF1ZGlvX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JaW50IHNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7Ci0KLQkvKiBhbGxvYyB2aXJ0dWFsICdkbWEnIGFyZWEgKi8KLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpCi0JCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfdXNlcihzaXplKTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KIAogLyogaHdfZnJlZSBjYWxsYmFjayAqLwogc3RhdGljIGludCBzbmRfc2dpbzJhdWRpb19wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQl2ZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKTsKLQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOwogfQogCiAvKiBwcmVwYXJlIGNhbGxiYWNrICovCkBAIC02OTIsMTMgKzY4MCw2IEBACiAJCQkgICAgICAgY2hpcC0+Y2hhbm5lbFtjaGFuLT5pZHhdLnBvcyk7CiB9CiAKLS8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3NnaW8yYXVkaW9fcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0KTsKLX0KLQogLyogb3BlcmF0b3JzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9zZ2lvMmF1ZGlvX3BsYXliYWNrMV9vcHMgPSB7CiAJLm9wZW4gPSAgICAgICAgc25kX3NnaW8yYXVkaW9fcGxheWJhY2sxX29wZW4sCkBAIC03MDksNyArNjkwLDggQEAKIAkucHJlcGFyZSA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcG9pbnRlciwKLQkucGFnZSA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wYWdlLAorCS5wYWdlID0gICAgICAgIHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSAgICAgICAgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfc2dpbzJhdWRpb19wbGF5YmFjazJfb3BzID0gewpAQCAtNzIxLDcgKzcwMyw4IEBACiAJLnByZXBhcmUgPSAgICAgc25kX3NnaW8yYXVkaW9fcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPSAgICAgc25kX3NnaW8yYXVkaW9fcGNtX3RyaWdnZXIsCiAJLnBvaW50ZXIgPSAgICAgc25kX3NnaW8yYXVkaW9fcGNtX3BvaW50ZXIsCi0JLnBhZ2UgPSAgICAgICAgc25kX3NnaW8yYXVkaW9fcGFnZSwKKwkucGFnZSA9ICAgICAgICBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0gICAgICAgIHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3NnaW8yYXVkaW9fY2FwdHVyZV9vcHMgPSB7CkBAIC03MzMsNyArNzE2LDggQEAKIAkucHJlcGFyZSA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcG9pbnRlciwKLQkucGFnZSA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wYWdlLAorCS5wYWdlID0gICAgICAgIHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSAgICAgICAgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggNDE5MWFjYy4uYzEwNzBlMyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTYxNCw3ICs2MTQsOCBAQAogCS8qIFB1dCB0d28gYnVmZmVycyBvbiB0aGUgcmluZyB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCiAJKi8KIAlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGRiLT5kbWFuciwgZGItPm5leHRJbiwgZGItPmRtYV9mcmFnc2l6ZSk7CisJCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkYi0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkYi0+bmV4dEluKSwKKwkJCQlkYi0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKIAogCQlkYi0+bmV4dEluICs9IGRiLT5kbWFfZnJhZ3NpemU7CiAJCWlmIChkYi0+bmV4dEluID49IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZSkKQEAgLTczMiw4ICs3MzMsOSBAQAogCWRiLT5kbWFfcWNvdW50LS07CiAKIAlpZiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkgewotCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLCBkYi0+bmV4dE91dCwKLQkJCQkJCQlkYi0+ZnJhZ3NpemUpID09IDApIHsKKwkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKKwkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCisJCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewogCQkJZXJyKCJxY291bnQgPCAyIGFuZCBubyByaW5nIHJvb20hIik7CiAJCX0KIAkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwpAQCAtNzc3LDcgKzc3OSw4IEBACiAKIAkvKiBQdXQgYSBuZXcgZW1wdHkgYnVmZmVyIG9uIHRoZSBkZXN0aW5hdGlvbiBETUEuCiAJKi8KLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZHAtPmRtYW5yLCBkcC0+bmV4dEluLCBkcC0+ZG1hX2ZyYWdzaXplKTsKKwlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZHAtPmRtYW5yLCB2aXJ0X3RvX3BoeXMoZHAtPm5leHRJbiksCisJCQkgICAgICBkcC0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKIAogCWRwLT5uZXh0SW4gKz0gZHAtPmRtYV9mcmFnc2l6ZTsKIAlpZiAoZHAtPm5leHRJbiA+PSBkcC0+cmF3YnVmICsgZHAtPmRtYXNpemUpCkBAIC0xMTc3LDggKzExODAsOSBAQAogCQkgKiB3ZSBrbm93IHRoZSBkbWEgaGFzIHN0b3BwZWQuCiAJCSAqLwogCQl3aGlsZSAoKGRiLT5kbWFfcWNvdW50IDwgMikgJiYgKGRiLT5jb3VudCA+PSBkYi0+ZnJhZ3NpemUpKSB7Ci0JCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLCBkYi0+bmV4dE91dCwKLQkJCQkJCQlkYi0+ZnJhZ3NpemUpID09IDApIHsKKwkJCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsCisJCQkJdmlydF90b19waHlzKGRiLT5uZXh0T3V0KSwgZGItPmZyYWdzaXplLAorCQkJCURETUFfRkxBR1NfSUUpID09IDApIHsKIAkJCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKIAkJCX0KIAkJCWRiLT5uZXh0T3V0ICs9IGRiLT5mcmFnc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9rYWhsdWEuYyBiL3NvdW5kL29zcy9rYWhsdWEuYwppbmRleCA4OTQ2NmIwLi4yNGQxNTJjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mva2FobHVhLmMKKysrIGIvc291bmQvb3NzL2thaGx1YS5jCkBAIC0xOTgsNyArMTk4LDcgQEAKICAqCTU1MzAgb25seS4gVGhlIDU1MTAvNTUyMCBkZWNvZGUgaXMgZGlmZmVyZW50LgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZF90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9BVURJTyksIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKaW5kZXggYzYyNTMwOS4uZmRlN2MxMiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvdW5kY2FyZC5jCisrKyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwpAQCAtMzI4LDExICszMjgsMTEgQEAKIAlyZXR1cm4gbWl4ZXJfZGV2c1ttaXhkZXZdLT5pb2N0bChtaXhkZXYsIGNtZCwgYXJnKTsKIH0KIAotc3RhdGljIGludCBzb3VuZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgc291bmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCBsZW4gPSAwLCBkdHlwZTsKLQlpbnQgZGV2ID0gaW1pbm9yKGlub2RlKTsKKwlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlsb25nIHJldCA9IC1FSU5WQUw7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlpZiAoX1NJT0NfRElSKGNtZCkgIT0gX1NJT0NfTk9ORSAmJiBfU0lPQ19ESVIoY21kKSAhPSAwKSB7CkBAIC0zNTMsNiArMzUzLDcgQEAKIAlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQogCQlyZXR1cm4gX19wdXRfdXNlcihTT1VORF9WRVJTSU9OLCAoaW50IF9fdXNlciAqKXApOwogCQorCWxvY2tfa2VybmVsKCk7CiAJaWYgKF9JT0NfVFlQRShjbWQpID09ICdNJyAmJiBudW1fbWl4ZXJzID4gMCAmJiAgIC8qIE1peGVyIGlvY3RsICovCiAJICAgIChkZXYgJiAweDBmKSAhPSBTTkRfREVWX0NUTCkgeyAgICAgICAgICAgICAgCiAJCWR0eXBlID0gZGV2ICYgMHgwZjsKQEAgLTM2MCwyNCArMzYxLDMxIEBACiAJCWNhc2UgU05EX0RFVl9EU1A6CiAJCWNhc2UgU05EX0RFVl9EU1AxNjoKIAkJY2FzZSBTTkRfREVWX0FVRElPOgotCQkJcmV0dXJuIHNvdW5kX21peGVyX2lvY3RsKGF1ZGlvX2RldnNbZGV2ID4+IDRdLT5taXhlcl9kZXYsCisJCQlyZXQgPSBzb3VuZF9taXhlcl9pb2N0bChhdWRpb19kZXZzW2RldiA+PiA0XS0+bWl4ZXJfZGV2LAogCQkJCQkJIGNtZCwgcCk7Ci0JCQkKKwkJCWJyZWFrOwkJCQogCQlkZWZhdWx0OgotCQkJcmV0dXJuIHNvdW5kX21peGVyX2lvY3RsKGRldiA+PiA0LCBjbWQsIHApOworCQkJcmV0ID0gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlicmVhazsKIAkJfQorCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiByZXQ7CiAJfQorCiAJc3dpdGNoIChkZXYgJiAweDBmKSB7CiAJY2FzZSBTTkRfREVWX0NUTDoKIAkJaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9HRVRMRVZFTFMpCi0JCQlyZXR1cm4gZ2V0X21peGVyX2xldmVscyhwKTsKLQkJaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9TRVRMRVZFTFMpCi0JCQlyZXR1cm4gc2V0X21peGVyX2xldmVscyhwKTsKLQkJcmV0dXJuIHNvdW5kX21peGVyX2lvY3RsKGRldiA+PiA0LCBjbWQsIHApOworCQkJcmV0ID0gZ2V0X21peGVyX2xldmVscyhwKTsKKwkJZWxzZSBpZiAoY21kID09IFNPVU5EX01JWEVSX1NFVExFVkVMUykKKwkJCXJldCA9IHNldF9taXhlcl9sZXZlbHMocCk7CisJCWVsc2UKKwkJCXJldCA9IHNvdW5kX21peGVyX2lvY3RsKGRldiA+PiA0LCBjbWQsIHApOworCQlicmVhazsKIAogCWNhc2UgU05EX0RFVl9TRVE6CiAJY2FzZSBTTkRfREVWX1NFUTI6Ci0JCXJldHVybiBzZXF1ZW5jZXJfaW9jdGwoZGV2LCBmaWxlLCBjbWQsIHApOworCQlyZXQgPSBzZXF1ZW5jZXJfaW9jdGwoZGV2LCBmaWxlLCBjbWQsIHApOworCQlicmVhazsKIAogCWNhc2UgU05EX0RFVl9EU1A6CiAJY2FzZSBTTkRfREVWX0RTUDE2OgpAQCAtMzkwLDcgKzM5OCw4IEBACiAJCWJyZWFrOwogCiAJfQotCXJldHVybiAtRUlOVkFMOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNvdW5kX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQpAQCAtNDkwLDcgKzQ5OSw3IEBACiAJLnJlYWQJCT0gc291bmRfcmVhZCwKIAkud3JpdGUJCT0gc291bmRfd3JpdGUsCiAJLnBvbGwJCT0gc291bmRfcG9sbCwKLQkuaW9jdGwJCT0gc291bmRfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gc291bmRfaW9jdGwsCiAJLm1tYXAJCT0gc291bmRfbW1hcCwKIAkub3BlbgkJPSBzb3VuZF9vcGVuLAogCS5yZWxlYXNlCT0gc291bmRfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9LY29uZmlnIGIvc291bmQvcGNpL0tjb25maWcKaW5kZXggMzUxNjU0Yy4uMTI5OGM2OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL0tjb25maWcKKysrIGIvc291bmQvcGNpL0tjb25maWcKQEAgLTc4OSw2ICs3ODksNyBAQAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQXN1cyBBVjEwMC9BVjIwMCBjaGlwcywgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYLAogCSAgRXNzZW5jZSBTVCAoRGVsdXhlKSwgYW5kIEVzc2VuY2UgU1RYLgorCSAgU3VwcG9ydCBmb3IgdGhlIERTIGlzIGV4cGVyaW1lbnRhbC4KIAkgIFN1cHBvcnQgZm9yIHRoZSBIREFWMS4zIChEZWx1eGUpIGlzIHZlcnkgZXhwZXJpbWVudGFsLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKaW5kZXggZDkyNjZiYS4uMWNhZjVlMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwpAQCAtNTQ0LDI1ICs1NDQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXRjaF93b2xmc29uX3dtOTcwNV9zcGVjaWZpYyhzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQotewotCWludCBlcnIsIGk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod205N3h4X3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoYWM5Ny0+YnVzLT5jYXJkLCBzbmRfYWM5N19jbmV3KCZ3bTk3eHhfc25kX2FjOTdfY29udHJvbHNbaV0sIGFjOTcpKSkgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0Jc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgIDB4NzIsIDB4MDgwOCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVpbGRfb3BzIHBhdGNoX3dvbGZzb25fd205NzA1X29wcyA9IHsKLQkuYnVpbGRfc3BlY2lmaWMgPSBwYXRjaF93b2xmc29uX3dtOTcwNV9zcGVjaWZpYywKLX07Ci0KIHN0YXRpYyBpbnQgcGF0Y2hfd29sZnNvbjA1KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJLyogV005NzA1LCBXTTk3MTAgKi8KLQlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfd29sZnNvbl93bTk3MDVfb3BzOworCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcwM19vcHM7CiAjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNQogCS8qIFdNOTcwNSB0b3VjaHNjcmVlbiB1c2VzIEFVWCBhbmQgVklERU8gZm9yIHRvdWNoICovCiAJYWM5Ny0+ZmxhZ3MgfD0gQUM5N19IQVNfTk9fVklERU8gfCBBQzk3X0hBU19OT19BVVg7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggOGY1MDk4Zi4uNDM4MmQwZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hZDE4ODlfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FkMTg4OV9pZHMpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FOQUxPR19ERVZJQ0VTLCBQQ0lfREVWSUNFX0lEX0FEMTg4OUpTKSB9LAogCXsgMCwgfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggYWFmNGRhNi4uNWM2ZTMyMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hbGlfaWRzKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX001NDUxKSwgMCwgMCwgMH0sCiAJezAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzMzAwLmMgYi9zb3VuZC9wY2kvYWxzMzAwLmMKaW5kZXggM2FhMzVhZi4uZDc2NTNjYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczMwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJaW50IGJsb2NrX2NvdW50ZXJfcmVnaXN0ZXI7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczMwMF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYWxzMzAwX2lkcykgPSB7CiAJeyAweDQwMDUsIDB4MDMwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0FMUzMwMCB9LAogCXsgMHg0MDA1LCAweDAzMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9BTFMzMDBfUExVUyB9LAogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczQwMDAuYyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKaW5kZXggM2RiYWNkZS4uZDc1Y2Y3YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczQwMDAuYworKysgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbHM0MDAwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hbHM0MDAwX2lkcykgPSB7CiAJeyAweDQwMDUsIDB4NDAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBBTFM0MDAwICovCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cC5jIGIvc291bmQvcGNpL2F0aWl4cC5jCmluZGV4IDQyYjRmYmIuLjQ5ZDU3MmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHAuYworKysgYi9zb3VuZC9wY2kvYXRpaXhwLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCiAvKgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F0aWl4cF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXRpaXhwX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM0MSksIDAgfSwgLyogU0IyMDAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzYxKSwgMCB9LCAvKiBTQjMwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNzApLCAwIH0sIC8qIFNCNDAwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggZTdlMTQ3Yi4uOTFkNzAzNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdGlpeHBfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzRkKSwgMCB9LCAvKiBTQjIwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNzgpLCAwIH0sIC8qIFNCNDAwICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwppbmRleCBjMGU4YzZiLi5hYTUxY2M3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAiYXU4ODEwLmgiCiAjaW5jbHVkZSAiYXU4OHgwLmgiCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZvcnRleF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdm9ydGV4X2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKEFVUkVBTCwgUENJX0RFVklDRV9JRF9BVVJFQUxfQURWQU5UQUdFKSwgMSx9LAogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwppbmRleCBhNjUyNzMzLi4yZjMyMWU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAiYXU4ODIwLmgiCiAjaW5jbHVkZSAiYXU4OHgwLmgiCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZvcnRleF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdm9ydGV4X2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKEFVUkVBTCwgUENJX0RFVklDRV9JRF9BVVJFQUxfVk9SVEVYXzEpLCAwLH0sCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCmluZGV4IDZjNzAyYWQuLjI3OWI3OGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MzAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMiksIDAsfSwKIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCmluZGV4IDRkMzRiYjBkLi42NzkyMWY5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKKysrIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQXVkaW93ZXJrMiBzb3VuZGNhcmQuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXcyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdzJfaWRzKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9TQUE3MTQ2LCBQQ0lfREVWSUNFX0lEX1NBQTcxNDYsIDAsIDAsCiAJIDAsIDAsIDB9LAogCXswfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNjk4NjdhYy4uNDY3OWVkOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0zNTAsNyArMzUwLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hemYzMzI4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hemYzMzI4X2lkcykgPSB7CiAJeyAweDEyMkQsIDB4NTBEQywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAgIC8qIFBDSTE2OC8zMzI4ICovCiAJeyAweDEyMkQsIDB4ODBEQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAgIC8qIDMzMjggKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggNGUyYjkyNS4uMzdlMWI1ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogCSAgLmRyaXZlcl9kYXRhID0gU05EX0JUODdYX0JPQVJEXyAjIyBpZCB9CiAvKiBkcml2ZXJfZGF0YSBpcyB0aGUgY2FyZCBpZCBmb3IgdGhhdCBkZXZpY2UgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYnQ4N3hfaWRzKSA9IHsKIAkvKiBIYXVwcGF1Z2UgV2luVFYgc2VyaWVzICovCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgwMDcwLCAweDEzZWIsIEdFTkVSSUMpLAogCS8qIEhhdXBwYXVnZSBXaW5UViBzZXJpZXMgKi8KQEAgLTk2NCw3ICs5NjQsNyBAQAogCiAvKiBkZWZhdWx0IGVudHJpZXMgZm9yIGFsbCBCdDg3eCBjYXJkcyAtIGl0J3Mgbm90IGV4cG9ydGVkICovCiAvKiBkcml2ZXJfZGF0YSBpcyBzZXQgdG8gMCB0byBjYWxsIGRldGVjdGlvbiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2J0ODd4X2RlZmF1bHRfaWRzKSA9IHsKIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBVTktOT1dOKSwKIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBVTktOT1dOKSwKIAl7IH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwppbmRleCAxNWU0MTM4Li4wYTNkM2Q2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogI2VuZGlmCiAKIC8vIFBDSSBJRHMKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY2EwMTA2X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9jYTAxMDZfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKENSRUFUSVZFLCAweDAwMDcpLCAwIH0sCS8qIEF1ZGlneSBMUyBvciBMaXZlIDI0Yml0ICovCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IGEzMTJiYWUuLjFkZWQ2NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTI3OTYsNyArMjc5Niw3IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NtaXBjaV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY21pcGNpX2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKENNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QSksIDB9LAogCXtQQ0lfVkRFVklDRShDTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEIpLCAwfSwKIAl7UENJX1ZERVZJQ0UoQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzgpLCAwfSwKQEAgLTMwMTgsNyArMzAxOCw3IEBACiAJaW50IGludGVncmF0ZWRfbWlkaSA9IDA7CiAJY2hhciBtb2RlbHN0clsxNl07CiAJaW50IHBjbV9pbmRleCwgcGNtX3NwZGlmX2luZGV4OwotCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpbnRlbF84MjQzN3Z4W10gPSB7CisJc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGludGVsXzgyNDM3dngpID0gewogCQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzN1ZYKSB9LAogCQl7IH0sCiAJfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCBlMmUwMzU5Li45ZWRjNjUwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9jczQyODFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M0MjgxX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9jczQyODFfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKENJUlJVUywgMHg2MDA1KSwgMCwgfSwJLyogQ1M0MjgxICovCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggMDMzYWVjNC4uNzY3ZmE3ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC02NCw3ICs2NCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkobW1hcF92YWxpZCwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1tYXBfdmFsaWQsICJTdXBwb3J0IE9TUyBtbWFwLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NzNDZ4eF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY3M0Nnh4X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwMSksIDAsIH0sICAgLyogQ1M0MjgwICovCiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwMyksIDAsIH0sICAgLyogQ1M0NjEyICovCiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwNCksIDAsIH0sICAgLyogQ1M0NjE1ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCmluZGV4IDFiZTk2ZWEuLjNmOTlhNWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCkBAIC0yMjM4LDExICsyMjM4LDExIEBACiAKIAkvKiBzZXQgdGhlIGRlc2lyZWQgQ09ERUMgbW9kZSAqLwogCWlmIChhYzk3LT5udW0gPT0gQ1M0NlhYX1BSSU1BUllfQ09ERUNfSU5ERVgpIHsKLQkJc25kX3ByaW50ZGQoImNzNDZ4eDogQ09ET0VDMSBtb2RlICUwNHhcbiIsMHgwKTsKLQkJc25kX2NzNDZ4eF9hYzk3X3dyaXRlKGFjOTcsQUM5N19DU1JfQUNNT0RFLDB4MCk7CisJCXNuZF9wcmludGRkKCJjczQ2eHg6IENPREVDMSBtb2RlICUwNHhcbiIsIDB4MCk7CisJCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LCBBQzk3X0NTUl9BQ01PREUsIDB4MCk7CiAJfSBlbHNlIGlmIChhYzk3LT5udW0gPT0gQ1M0NlhYX1NFQ09OREFSWV9DT0RFQ19JTkRFWCkgewotCQlzbmRfcHJpbnRkZCgiY3M0Nnh4OiBDT0RPRUMyIG1vZGUgJTA0eFxuIiwweDMpOwotCQlzbmRfY3M0Nnh4X2FjOTdfd3JpdGUoYWM5NyxBQzk3X0NTUl9BQ01PREUsMHgzKTsKKwkJc25kX3ByaW50ZGQoImNzNDZ4eDogQ09ERUMyIG1vZGUgJTA0eFxuIiwgMHgzKTsKKwkJc25kX2NzNDZ4eF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfQ1NSX0FDTU9ERSwgMHgzKTsKIAl9IGVsc2UgewogCQlzbmRfQlVHKCk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gLi4uICovCiAJfQpAQCAtMjI2Niw3ICsyMjY2LDcgQEAKIAkJCXJldHVybjsKIAogCQkvKiB0ZXN0IGlmIHdlIGNhbiB3cml0ZSB0byB0aGUgcmVjb3JkIGdhaW4gdm9sdW1lIHJlZ2lzdGVyICovCi0JCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfUkVDX0dBSU4sIDB4OGEwNSk7CisJCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfUkVDX0dBSU4sIDB4OGEwNSk7CiAJCWlmICgoZXJyID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X1JFQ19HQUlOKSkgPT0gMHg4YTA1KQogCQkJcmV0dXJuOwogCkBAIC0zNTk3LDcgKzM1OTcsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHVuc2lnbmVkIGludCBzYXZlZF9yZWdzW10gPSB7CiAJQkEwX0FDT1NWLAotCUJBMF9BU0VSX0ZBRERSLAorCS8qQkEwX0FTRVJfRkFERFIsKi8KIAlCQTBfQVNFUl9NQVNURVIsCiAJQkExX1BWT0wsCiAJQkExX0NWT0wsCkBAIC0zNjQ0LDYgKzM2NDQsNyBAQAogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKIAlpbnQgaTsKICNlbmRpZgorCXVuc2lnbmVkIGludCB0bXA7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwpAQCAtMzY4NSw2ICszNjg2LDE1IEBACiAJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTdbQ1M0NlhYX1BSSU1BUllfQ09ERUNfSU5ERVhdKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5N1tDUzQ2WFhfU0VDT05EQVJZX0NPREVDX0lOREVYXSk7CiAKKwkvKgorICAgICAgICAgKiAgU3RvcCBjYXB0dXJlIERNQS4KKwkgKi8KKwl0bXAgPSBzbmRfY3M0Nnh4X3BlZWsoY2hpcCwgQkExX0NDVEwpOworCWNoaXAtPmNhcHQuY3RsID0gdG1wICYgMHgwMDAwZmZmZjsKKwlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwgQkExX0NDVEwsIHRtcCAmIDB4ZmZmZjAwMDApOworCisJbWRlbGF5KDUpOworCiAJLyogcmVzZXQgcGxheWJhY2svY2FwdHVyZSAqLwogCXNuZF9jczQ2eHhfc2V0X3BsYXlfc2FtcGxlX3JhdGUoY2hpcCwgODAwMCk7CiAJc25kX2NzNDZ4eF9zZXRfY2FwdHVyZV9zYW1wbGVfcmF0ZShjaGlwLCA4MDAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwppbmRleCBmNGYwYzhmLi4zZTVjYThmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCkBAIC0yOTgsNiArMjk4LDkgQEAKIAkJaWYgKGlucy0+c2Nic1tpXS5kZWxldGVkKSBjb250aW51ZTsKIAogCQljczQ2eHhfZHNwX3Byb2NfZnJlZV9zY2JfZGVzYyAoIChpbnMtPnNjYnMgKyBpKSApOworI2lmZGVmIENPTkZJR19QTQorCQlrZnJlZShpbnMtPnNjYnNbaV0uZGF0YSk7CisjZW5kaWYKIAl9CiAKIAlrZnJlZShpbnMtPmNvZGUuZGF0YSk7CkBAIC05NzQsMTMgKzk3NywxMSBAQAogCiAJaW5kZXggPSBmaW5kX2ZyZWVfc2NiX2luZGV4IChpbnMpOwogCisJbWVtc2V0KCZpbnMtPnNjYnNbaW5kZXhdLCAwLCBzaXplb2YoaW5zLT5zY2JzW2luZGV4XSkpOwogCXN0cmNweShpbnMtPnNjYnNbaW5kZXhdLnNjYl9uYW1lLCBuYW1lKTsKIAlpbnMtPnNjYnNbaW5kZXhdLmFkZHJlc3MgPSBkZXN0OwogCWlucy0+c2Nic1tpbmRleF0uaW5kZXggPSBpbmRleDsKLQlpbnMtPnNjYnNbaW5kZXhdLnByb2NfaW5mbyA9IE5VTEw7CiAJaW5zLT5zY2JzW2luZGV4XS5yZWZfY291bnQgPSAxOwotCWlucy0+c2Nic1tpbmRleF0uZGVsZXRlZCA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlucy0+c2Nic1tpbmRleF0ubG9jayk7CiAKIAlkZXNjID0gKGlucy0+c2NicyArIGluZGV4KTsKIAlpbnMtPnNjYnNbaW5kZXhdLnNjYl9zeW1ib2wgPSBhZGRfc3ltYm9sIChjaGlwLCBuYW1lLCBkZXN0LCBTWU1CT0xfUEFSQU1FVEVSKTsKQEAgLTEwMjIsMTcgKzEwMjMsMjkgQEAKIAlyZXR1cm4gZGVzYzsKIH0KIAorI2RlZmluZSBTQ0JfQllURVMJKDB4MTAgKiA0KQorCiBzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICoKIGNzNDZ4eF9kc3BfY3JlYXRlX3NjYiAoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGNoYXIgKiBuYW1lLCB1MzIgKiBzY2JfZGF0YSwgdTMyIGRlc3QpCiB7CiAJc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqIGRlc2M7CiAKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiBjb3B5IHRoZSBkYXRhIGZvciByZXN1bWUgKi8KKwlzY2JfZGF0YSA9IGttZW1kdXAoc2NiX2RhdGEsIFNDQl9CWVRFUywgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY2JfZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKwogCWRlc2MgPSBfbWFwX3NjYiAoY2hpcCxuYW1lLGRlc3QpOwogCWlmIChkZXNjKSB7CiAJCWRlc2MtPmRhdGEgPSBzY2JfZGF0YTsKIAkJX2RzcF9jcmVhdGVfc2NiKGNoaXAsc2NiX2RhdGEsZGVzdCk7CiAJfSBlbHNlIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiZHNwX3Nwb3M6IGZhaWxlZCB0byBtYXAgU0NCXG4iKTsKKyNpZmRlZiBDT05GSUdfUE0KKwkJa2ZyZWUoc2NiX2RhdGEpOworI2VuZGlmCiAJfQogCiAJcmV0dXJuIGRlc2M7CkBAIC0xOTg4LDcgKzIwMDEsMjggQEAKIAkJCWNvbnRpbnVlOwogCQlfZHNwX2NyZWF0ZV9zY2IoY2hpcCwgcy0+ZGF0YSwgcy0+YWRkcmVzcyk7CiAJfQotCisJZm9yIChpID0gMDsgaSA8IGlucy0+bnNjYjsgaSsrKSB7CisJCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKnMgPSAmaW5zLT5zY2JzW2ldOworCQlpZiAocy0+ZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAocy0+dXBkYXRlZCkKKwkJCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAsIHMpOworCQlpZiAocy0+dm9sdW1lX3NldCkKKwkJCWNzNDZ4eF9kc3Bfc2NiX3NldF92b2x1bWUoY2hpcCwgcywKKwkJCQkJCSAgcy0+dm9sdW1lWzBdLCBzLT52b2x1bWVbMV0pOworCX0KKwlpZiAoaW5zLT5zcGRpZl9zdGF0dXNfb3V0ICYgRFNQX1NQRElGX1NUQVRVU19IV19FTkFCTEVEKSB7CisJCWNzNDZ4eF9kc3BfZW5hYmxlX3NwZGlmX2h3KGNoaXApOworCQlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwgKGlucy0+cmVmX3Nub29wX3NjYi0+YWRkcmVzcyArIDIpIDw8IDIsCisJCQkJKE9VVFBVVF9TTk9PUF9CVUZGRVIgKyAweDEwKSA8PCAweDEwKTsKKwkJaWYgKGlucy0+c3BkaWZfc3RhdHVzX291dCAmIERTUF9TUERJRl9TVEFUVVNfUExBWUJBQ0tfT1BFTikKKwkJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AoY2hpcCwgU1BfU1BET1VUX0NTVVYsCisJCQkJCSAgICBpbnMtPnNwZGlmX2NzdXZfc3RyZWFtKTsKKwl9CisJaWYgKGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5zcGRpZl9zdGF0dXNfaW4pIHsKKwkJY3M0Nnh4X3Bva2VfdmlhX2RzcChjaGlwLCBTUF9BU0VSX0NPVU5URE9XTiwgMHg4MDAwMDAwNSk7CisJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AoY2hpcCwgU1BfU1BESU5fQ09OVFJPTCwgMHg4MDAwMDNmZik7CisJfQogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmggYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmgKaW5kZXggZjllMTY5ZC4uY2E0N2E4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuaApAQCAtMjEyLDYgKzIxMiw3IEBACiAJCQkoc2NiLT5hZGRyZXNzICsgU0NCc3ViTGlzdFB0cikgPDwgMiwKIAkJCShzY2ItPnN1Yl9saXN0X3B0ci0+YWRkcmVzcyA8PCAweDEwKSB8CiAJCQkoc2NiLT5uZXh0X3NjYl9wdHItPmFkZHJlc3MpKTsJCisJc2NiLT51cGRhdGVkID0gMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNzNDZ4eF9kc3Bfc2NiX3NldF92b2x1bWUgKHN0cnVjdCBzbmRfY3M0Nnh4ICogY2hpcCwKQEAgLTIyMiw2ICsyMjMsOSBAQAogCiAJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIChzY2ItPmFkZHJlc3MgKyBTQ0JWb2x1bWVDdHJsKSA8PCAyLCB2YWwpOwogCXNuZF9jczQ2eHhfcG9rZShjaGlwLCAoc2NiLT5hZGRyZXNzICsgU0NCVm9sdW1lQ3RybCArIDEpIDw8IDIsIHZhbCk7CisJc2NiLT52b2x1bWVfc2V0ID0gMTsKKwlzY2ItPnZvbHVtZVswXSA9IGxlZnQ7CisJc2NiLT52b2x1bWVbMV0gPSByaWdodDsKIH0KICNlbmRpZiAvKiBfX0RTUF9TUE9TX0hfXyAqLwogI2VuZGlmIC8qIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AgICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3Nfc2NiX2xpYi5jCmluZGV4IGRkN2M0MWIuLjAwYjE0OGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3Nfc2NiX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3Nfc2NiX2xpYi5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIHN0YXRpYyB2b2lkIF9kc3BfdW5saW5rX3NjYiAoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIHN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBzY2IpCiB7CiAJc3RydWN0IGRzcF9zcG9zX2luc3RhbmNlICogaW5zID0gY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICggc2NiLT5wYXJlbnRfc2NiX3B0ciApIHsKIAkJLyogdW5saW5rIHBhcmVudCBTQ0IgKi8KQEAgLTE1Myw4ICsxNTIsNiBAQAogCQkJc2NiLT5uZXh0X3NjYl9wdHIgPSBpbnMtPnRoZV9udWxsX3NjYjsKIAkJfQogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOyAgICAKLQogCQkvKiB1cGRhdGUgcGFyZW50IGZpcnN0IGVudHJ5IGluIERTUCBSQU0gKi8KIAkJY3M0Nnh4X2RzcF9zcG9zX3VwZGF0ZV9zY2IoY2hpcCxzY2ItPnBhcmVudF9zY2JfcHRyKTsKIApAQCAtMTYyLDcgKzE1OSw2IEBACiAJCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAsc2NiKTsKIAogCQlzY2ItPnBhcmVudF9zY2JfcHRyID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTE5Nyw5ICsxOTMsOSBAQAogCQlnb3RvIF9lbmQ7CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzY2ItPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsgICAgCiAJX2RzcF91bmxpbmtfc2NiIChjaGlwLHNjYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCWNzNDZ4eF9kc3BfcHJvY19mcmVlX3NjYl9kZXNjKHNjYik7CiAJaWYgKHNuZF9CVUdfT04oIXNjYi0+c2NiX3N5bWJvbCkpCkBAIC0yMDcsNiArMjAzLDEwIEBACiAJcmVtb3ZlX3N5bWJvbCAoY2hpcCxzY2ItPnNjYl9zeW1ib2wpOwogCiAJaW5zLT5zY2JzW3NjYi0+aW5kZXhdLmRlbGV0ZWQgPSAxOworI2lmZGVmIENPTkZJR19QTQorCWtmcmVlKGlucy0+c2Nic1tzY2ItPmluZGV4XS5kYXRhKTsKKwlpbnMtPnNjYnNbc2NiLT5pbmRleF0uZGF0YSA9IE5VTEw7CisjZW5kaWYKIAogCWlmIChzY2ItPmluZGV4IDwgaW5zLT5zY2JfaGlnaGVzdF9mcmFnX2luZGV4KQogCQlpbnMtPnNjYl9oaWdoZXN0X2ZyYWdfaW5kZXggPSBzY2ItPmluZGV4OwpAQCAtMTUwOCwyMCArMTUwOCwxNyBAQAogCQkgICAgICAgY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2UtPm5wY21fY2hhbm5lbHMgPD0gMCkpCiAJCXJldHVybiAtRUlPOwogCi0Jc3Bpbl9sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7Ci0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAocGNtX2NoYW5uZWwtPnVubGlua2VkKSB7Ci0JCXNwaW5fdW5sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXBjbV9jaGFubmVsLT51bmxpbmtlZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxwY21fY2hhbm5lbC0+cGNtX3JlYWRlcl9zY2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNTMzLDEwICsxNTMwLDEwIEBACiAJc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqIHNyY19zY2IgPSBwY21fY2hhbm5lbC0+c3JjX3NjYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlpZiAocGNtX2NoYW5uZWwtPnVubGlua2VkID09IDApIHsKLQkJc3Bpbl91bmxvY2soJnBjbV9jaGFubmVsLT5zcmNfc2NiLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xNTUyLDggKzE1NDksNiBAQAogCXNuZF9CVUdfT04ocGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiLT5wYXJlbnRfc2NiX3B0cik7CiAJcGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiLT5wYXJlbnRfc2NiX3B0ciA9IHBhcmVudF9zY2I7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQogCS8qIHVwZGF0ZSBTQ0IgZW50cnkgaW4gRFNQIFJBTSAqLwogCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAscGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiKTsKIApAQCAtMTU2Miw4ICsxNTU3LDYgQEAKIAogCXBjbV9jaGFubmVsLT51bmxpbmtlZCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCXNwaW5fdW5sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OTYsMTMgKzE1ODksMTcgQEAKIAogaW50IGNzNDZ4eF9zcmNfdW5saW5rKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICogc3JjKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoc25kX0JVR19PTighc3JjLT5wYXJlbnRfc2NiX3B0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogbXV0ZSBTQ0IgKi8KIAljczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lIChjaGlwLHNyYywwLDApOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJX2RzcF91bmxpbmtfc2NiIChjaGlwLHNyYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzMC5jIGIvc291bmQvcGNpL2NzNTUzMC5jCmluZGV4IGRjNDY0MzIuLjIwNzQ3OWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzAuYworKysgYi9zb3VuZC9wY2kvY3M1NTMwLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBjaV9iYXNlOwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczU1MzBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNTUzMF9pZHMpID0gewogCXtQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfQVVESU8sIFBDSV9BTllfSUQsCiAJCQkJCQkJUENJX0FOWV9JRCwgMCwgMH0sCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwppbmRleCA5MWU3ZmFmLi5hZmI4MDM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYworKysgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSAiIERSSVZFUl9OQU1FKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczU1MzVhdWRpb19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY3M1NTM1YXVkaW9faWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OUywgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfQVVESU8pIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfQVVESU8pIH0sCiAJe30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKaW5kZXggNDU5YzFmNi4uNDgwY2IxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKQEAgLTEyMTQsMTAgKzEyMTQsMTEgQEAKIAlyZXR1cm4gY3RfYXRjX2Rlc3Ryb3koYXRjKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgYXRjX2lkZW50aWZ5X2NhcmQoc3RydWN0IGN0X2F0YyAqYXRjKQorc3RhdGljIGludCBfX2RldmluaXQgYXRjX2lkZW50aWZ5X2NhcmQoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBpbnQgc3NpZCkKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcDsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqbGlzdDsKKwl1MTYgdmVuZG9yX2lkLCBkZXZpY2VfaWQ7CiAKIAlzd2l0Y2ggKGF0Yy0+Y2hpcF90eXBlKSB7CiAJY2FzZSBBVEMyMEsxOgpAQCAtMTIzMSwxMyArMTIzMiwxOSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlwID0gc25kX3BjaV9xdWlya19sb29rdXAoYXRjLT5wY2ksIGxpc3QpOworCWlmIChzc2lkKSB7CisJCXZlbmRvcl9pZCA9IHNzaWQgPj4gMTY7CisJCWRldmljZV9pZCA9IHNzaWQgJiAweGZmZmY7CisJfSBlbHNlIHsKKwkJdmVuZG9yX2lkID0gYXRjLT5wY2ktPnN1YnN5c3RlbV92ZW5kb3I7CisJCWRldmljZV9pZCA9IGF0Yy0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlOworCX0KKwlwID0gc25kX3BjaV9xdWlya19sb29rdXBfaWQodmVuZG9yX2lkLCBkZXZpY2VfaWQsIGxpc3QpOwogCWlmIChwKSB7CiAJCWlmIChwLT52YWx1ZSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiY3R4Zmk6ICIKIAkJCSAgICAgICAiRGV2aWNlICUwNHg6JTA0eCBpcyBibGFjay1saXN0ZWRcbiIsCi0JCQkgICAgICAgYXRjLT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCi0JCQkgICAgICAgYXRjLT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOworCQkJICAgICAgIHZlbmRvcl9pZCwgZGV2aWNlX2lkKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJCWF0Yy0+bW9kZWwgPSBwLT52YWx1ZTsKQEAgLTEyNTAsOCArMTI1Nyw3IEBACiAJYXRjLT5tb2RlbF9uYW1lID0gY3Rfc3Vic3lzX25hbWVbYXRjLT5tb2RlbF07CiAJc25kX3ByaW50ZCgiY3R4Zmk6IGNoaXAgJXMgbW9kZWwgJXMgKCUwNHg6JTA0eCkgaXMgZm91bmRcbiIsCiAJCSAgIGF0Yy0+Y2hpcF9uYW1lLCBhdGMtPm1vZGVsX25hbWUsCi0JCSAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAotCQkgICBhdGMtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisJCSAgIHZlbmRvcl9pZCwgZGV2aWNlX2lkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyNSw3ICsxNjMxLDggQEAKIAogaW50IF9fZGV2aW5pdCBjdF9hdGNfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcnNyLCB1bnNpZ25lZCBpbnQgbXNyLAotCQkJICAgIGludCBjaGlwX3R5cGUsIHN0cnVjdCBjdF9hdGMgKipyYXRjKQorCQkJICAgIGludCBjaGlwX3R5cGUsIHVuc2lnbmVkIGludCBzc2lkLAorCQkJICAgIHN0cnVjdCBjdF9hdGMgKipyYXRjKQogewogCXN0cnVjdCBjdF9hdGMgKmF0YzsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTE2NTEsNyArMTY1OCw3IEBACiAJbXV0ZXhfaW5pdCgmYXRjLT5hdGNfbXV0ZXgpOwogCiAJLyogRmluZCBjYXJkIG1vZGVsICovCi0JZXJyID0gYXRjX2lkZW50aWZ5X2NhcmQoYXRjKTsKKwllcnIgPSBhdGNfaWRlbnRpZnlfY2FyZChhdGMsIHNzaWQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY3RhdGM6IENhcmQgbm90IHJlY29nbmlzZWRcbiIpOwogCQlnb3RvIGVycm9yMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmgKaW5kZXggOWZkOGE1Ny4uNzE2N2MwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmgKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiBpbnQgX19kZXZpbml0IGN0X2F0Y19jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJICAgIHVuc2lnbmVkIGludCByc3IsIHVuc2lnbmVkIGludCBtc3IsIGludCBjaGlwX3R5cGUsCi0JCQkgICAgc3RydWN0IGN0X2F0YyAqKnJhdGMpOworCQkJICAgIHVuc2lnbmVkIGludCBzdWJzeXNpZCwgc3RydWN0IGN0X2F0YyAqKnJhdGMpOwogaW50IF9fZGV2aW5pdCBjdF9hdGNfY3JlYXRlX2Fsc2FfZGV2cyhzdHJ1Y3QgY3RfYXRjICphdGMpOwogCiAjZW5kaWYgLyogQ1RBVENfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL3hmaS5jIGIvc291bmQvcGNpL2N0eGZpL3hmaS5jCmluZGV4IDc2NTQxNzQuLmY0MmU3ZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS94ZmkuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkveGZpLmMKQEAgLTMyLDYgKzMyLDcgQEAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitzdGF0aWMgdW5zaWduZWQgaW50IHN1YnN5c3RlbVtTTkRSVl9DQVJEU107CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKQEAgLTM5LDggKzQwLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBDcmVhdGl2ZSBYLUZpIGRyaXZlciIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBDcmVhdGl2ZSBYLUZpIGRyaXZlciIpOworbW9kdWxlX3BhcmFtX2FycmF5KHN1YnN5c3RlbSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3Vic3lzdGVtLCAiT3ZlcnJpZGUgc3Vic3lzdGVtIElEIGZvciBDcmVhdGl2ZSBYLUZpIGRyaXZlciIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3RfcGNpX2Rldl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjdF9wY2lfZGV2X2lkcykgPSB7CiAJLyogb25seSBYLUZpIGlzIHN1cHBvcnRlZCwgc28uLi4gKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DUkVBVElWRSwgUENJX0RFVklDRV9JRF9DUkVBVElWRV8yMEsxKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUQzIwSzEsCkBAIC04NSw3ICs4OCw3IEBACiAJCW11bHRpcGxlID0gMjsKIAl9CiAJZXJyID0gY3RfYXRjX2NyZWF0ZShjYXJkLCBwY2ksIHJlZmVyZW5jZV9yYXRlLCBtdWx0aXBsZSwKLQkJCSAgICBwY2lfaWQtPmRyaXZlcl9kYXRhLCAmYXRjKTsKKwkJCSAgICBwY2lfaWQtPmRyaXZlcl9kYXRhLCBzdWJzeXN0ZW1bZGV2XSwgJmF0Yyk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKaW5kZXggOGM2ZGIzYS4uYTY1YmFmZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAl7MCwgImRhcmxhMjBfZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMTAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgRGFybGEyMCByZXYuMCAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKaW5kZXggMjkwNDMzMC4uMjBjN2NiYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyMF9EU1A7CiAJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCkBAIC01NywxNSArNTcsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogLyogVGhlIERhcmxhMjAgaGFzIG5vIGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgKi8KIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwppbmRleCAwNGNiZjNlLi4wYTZjNTBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZGFybGEyNF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jCmluZGV4IDYwMjI4NzMuLjZkYTY2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjRfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjRfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyNF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01NiwxNSArNTYsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCmluZGV4IDQwMjJlNDMuLmY1MTQyNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpAQCAtODEsNyArODEsNyBAQAogCXswLCAiM2dfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMTAwLCAwLCAwLCAwfSwJLyogRWNobyAzRyAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDU3OTY3ZTUuLjNjZGMyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC02MSw3ICs2MSw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19FQ0hPM0dfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfRUNITzNHX0RTUDsKIAogCS8qIExvYWQgdGhlIERTUCBjb2RlIGFuZCB0aGUgQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGdldAogCXdoYXQgdHlwZSBvZiBleHRlcm5hbCBib3ggaXMgYXR0YWNoZWQgKi8KQEAgLTk3LDIwICs5Nyw2IEBACiAJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAogCQkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQlESUdJVEFMX01PREVfU1BESUZfUkNBOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPm5vbl9hdWRpb19zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwotCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcGhhbnRvbV9wb3dlcihjaGlwLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwogCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CkBAIC0xMTgsNiArMTA0LDE4IEBACiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+bm9uX2F1ZGlvX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisJY2hpcC0+cGhhbnRvbV9wb3dlciA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIGludCBzZXRfcGhhbnRvbV9wb3dlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIG9uKQogewogCXUzMiBjb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCAxMzA1ZjdjLi44ZGFiODJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTM2LDIyICszNiw2MSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19saXN0WzEwXSA9IHsxLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgOTk5OTk5fTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV9vdXRwdXRfZ2FpbiwgLTEyODAwLCAxMDAsIDEpOwogCisKKwogc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfZW50cnksCi0JCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZybSwgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KQogewogCWludCBlcnI7CiAJY2hhciBuYW1lWzMwXTsKLQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzXG4iLCBmcm0tPmRhdGEpKTsKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlYS8lcyIsIGZybS0+ZGF0YSk7Ci0JaWYgKChlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3X2VudHJ5LCBuYW1lLCBwY2lfZGV2aWNlKGNoaXApKSkgPCAwKQorCisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGNoaXAtPmZ3X2NhY2hlW2Z3X2luZGV4XSkgeworCQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzIGlzIGNhY2hlZFxuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCQkqZndfZW50cnkgPSBjaGlwLT5md19jYWNoZVtmd19pbmRleF07CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJREVfQUNUKCgiZmlybXdhcmUgcmVxdWVzdGVkOiAlc1xuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImVhLyVzIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZShmd19lbnRyeSwgbmFtZSwgcGNpX2RldmljZShjaGlwKSk7CisJaWYgKGVyciA8IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImdldF9maXJtd2FyZSgpOiBGaXJtd2FyZSBub3QgYXZhaWxhYmxlICglZClcbiIsIGVycik7CisjaWZkZWYgQ09ORklHX1BNCisJZWxzZQorCQljaGlwLT5md19jYWNoZVtmd19pbmRleF0gPSAqZndfZW50cnk7CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCisKKwogc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5KQogeworI2lmZGVmIENPTkZJR19QTQorCURFX0FDVCgoImZpcm13YXJlIG5vdCByZWxlYXNlZCAoa2VwdCBpbiBjYWNoZSlcbiIpKTsKKyNlbHNlCiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJREVfQUNUKCgiZmlybXdhcmUgcmVsZWFzZWRcbiIpKTsKKyNlbmRpZgorfQorCisKKworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZV9jYWNoZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworI2lmZGVmIENPTkZJR19QTQorCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCWlmIChjaGlwLT5md19jYWNoZVtpXSkgeworCQkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19jYWNoZVtpXSk7CisJCQlERV9BQ1QoKCJyZWxlYXNlX2Zpcm13YXJlKCVkKVxuIiwgaSkpOworCQl9CisKKwlERV9BQ1QoKCJmaXJtd2FyZV9jYWNoZSByZWxlYXNlZFxuIikpOworI2VuZGlmCiB9CiAKIApAQCAtNzE0LDYgKzc1Myw4IEBACiAKIAlzcGluX2xvY2soJmNoaXAtPmxvY2spOwogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCURFX0FDVCgoInBjbV90cmlnZ2VyIHJlc3VtZVxuIikpOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdGFydFxuIikpOwpAQCAtNzM3LDYgKzc3OCw4IEBACiAJCWVyciA9IHN0YXJ0X3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzaywKIAkJCQkgICAgICBjaGlwLT5waXBlX2N5Y2xpY19tYXNrKTsKIAkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdXNwZW5kXG4iKSk7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdG9wXG4iKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBEU1BfTUFYUElQRVM7IGkrKykgewpAQCAtMTgyMSw3ICsxODY0LDkgQEAKIAkvKiBUaGUgaGFyZHdhcmUgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIHN1YnN0cmVhbSBjYXVzZWQgdGhlIGlycSwKIAl0aHVzIHdlIGhhdmUgdG8gY2hlY2sgYWxsIHJ1bm5pbmcgc3Vic3RyZWFtcy4gKi8KIAlmb3IgKHNzID0gMDsgc3MgPCBEU1BfTUFYUElQRVM7IHNzKyspIHsKLQkJaWYgKChzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdKSkgeworCQlzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdOworCQlpZiAoc3Vic3RyZWFtICYmICgoc3RydWN0IGF1ZGlvcGlwZSAqKXN1YnN0cmVhbS0+cnVudGltZS0+CisJCQkJcHJpdmF0ZV9kYXRhKS0+c3RhdGUgPT0gUElQRV9TVEFURV9TVEFSVEVEKSB7CiAJCQlwZXJpb2QgPSBwY21fcG9pbnRlcihzdWJzdHJlYW0pIC8KIAkJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJaWYgKHBlcmlvZCAhPSBjaGlwLT5sYXN0X3BlcmlvZFtzc10pIHsKQEAgLTE4NzQsNiArMTkxOSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKIAkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLworCWZyZWVfZmlybXdhcmVfY2FjaGUoY2hpcCk7CiAJa2ZyZWUoY2hpcCk7CiAJREVfSU5JVCgoIkNoaXAgZnJlZWQuXG4iKSk7CiAJcmV0dXJuIDA7CkBAIC0xOTExLDE4ICsxOTU3LDI3IEBACiAJCXJldHVybiBlcnI7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAotCS8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhICovCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwKSB7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBBbGxvY2F0ZSBjaGlwIGlmIG5lZWRlZCAqLworCWlmICghKnJjaGlwKSB7CisJCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApIHsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCQljaGlwLT5jYXJkID0gY2FyZDsKKwkJY2hpcC0+cGNpID0gcGNpOworCQljaGlwLT5pcnEgPSAtMTsKKwkJYXRvbWljX3NldCgmY2hpcC0+b3BlbmNvdW50LCAwKTsKKwkJbXV0ZXhfaW5pdCgmY2hpcC0+bW9kZV9tdXRleCk7CisJCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gdGhlIHJlc3VtZSBmdW5jdGlvbiwgY2hpcCBpcworCQkgKiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaXQgY29udGFpbnMgY3VycmVudCBjYXJkIHNldHRpbmdzLgorCQkgKi8KKwkJY2hpcCA9ICpyY2hpcDsKIAl9Ci0JREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKLQotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5wY2kgPSBwY2k7Ci0JY2hpcC0+aXJxID0gLTE7CiAKIAkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogCWNoaXAtPmRzcF9yZWdpc3RlcnNfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwpAQCAtMTk2Miw3ICsyMDE3LDkgQEAKIAljaGlwLT5jb21tX3BhZ2UgPSAoc3RydWN0IGNvbW1fcGFnZSAqKWNoaXAtPmNvbW1wYWdlX2RtYV9idWYuYXJlYTsKIAogCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7Ci0JaWYgKGVycikgeworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc2V0X21peGVyX2RlZmF1bHRzKGNoaXApOworCWlmIChlcnIgPCAwKSB7CiAJCURFX0lOSVQoKCJpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CiAJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CkBAIC0xOTczLDkgKzIwMzAsNiBAQAogCQlzbmRfZWNob19mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KLQlhdG9taWNfc2V0KCZjaGlwLT5vcGVuY291bnQsIDApOwotCW11dGV4X2luaXQoJmNoaXAtPm1vZGVfbXV0ZXgpOwotCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CiAJKnJjaGlwID0gY2hpcDsKIAkvKiBJbml0IGRvbmUgISAqLwogCXJldHVybiAwOwpAQCAtMjAwOCw2ICsyMDYyLDcgQEAKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAorCWNoaXAgPSBOVUxMOwkvKiBUZWxscyBzbmRfZWNob19jcmVhdGUgdG8gYWxsb2NhdGUgY2hpcCAqLwogCWlmICgoZXJyID0gc25kX2VjaG9fY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIxNDcsNiArMjIwMiwxMTIgQEAKIAogCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBzbmRfZWNob19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisKKwlERV9JTklUKCgic3VzcGVuZCBzdGFydFxuIikpOworCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+YW5hbG9nX3BjbSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5kaWdpdGFsX3BjbSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCS8qIFRoaXMgY2FsbCBjYW4gc2xlZXAgKi8KKwlpZiAoY2hpcC0+bWlkaV9vdXQpCisJCXNuZF9lY2hvX21pZGlfb3V0cHV0X3RyaWdnZXIoY2hpcC0+bWlkaV9vdXQsIDApOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19HT19DT01BVE9TRSkgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJY2hpcC0+aXJxID0gLTE7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKworCURFX0lOSVQoKCJzdXNwZW5kIGRvbmVcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBjb21tX3BhZ2UgKmNvbW1wYWdlLCAqY29tbXBhZ2VfYmFrOworCXUzMiBwaXBlX2FsbG9jX21hc2s7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJyZXN1bWUgc3RhcnRcbiIpKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWNvbW1wYWdlX2JhayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2hvYXVkaW8pLCBHRlBfS0VSTkVMKTsKKwljb21tcGFnZSA9IGNoaXAtPmNvbW1fcGFnZTsKKwltZW1jcHkoY29tbXBhZ2VfYmFrLCBjb21tcGFnZSwgc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKworCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKwkJREVfSU5JVCgoInJlc3VtZSBpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgaW5pdCBPS1xuIikpOworCisJLyogVGVtcG9yYXJpbHkgc2V0IGNoaXAtPnBpcGVfYWxsb2NfbWFzaz0wIG90aGVyd2lzZQorCSAqIHJlc3RvcmVfZHNwX3NldHRpbmdzKCkgZmFpbHMuCisJICovCisJcGlwZV9hbGxvY19tYXNrID0gY2hpcC0+cGlwZV9hbGxvY19tYXNrOworCWNoaXAtPnBpcGVfYWxsb2NfbWFzayA9IDA7CisJZXJyID0gcmVzdG9yZV9kc3BfcmV0dGluZ3MoY2hpcCk7CisJY2hpcC0+cGlwZV9hbGxvY19tYXNrID0gcGlwZV9hbGxvY19tYXNrOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKGNvbW1wYWdlX2Jhayk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgcmVzdG9yZSBPS1xuIikpOworCisJbWVtY3B5KCZjb21tcGFnZS0+YXVkaW9fZm9ybWF0LCAmY29tbXBhZ2VfYmFrLT5hdWRpb19mb3JtYXQsCisJCXNpemVvZihjb21tcGFnZS0+YXVkaW9fZm9ybWF0KSk7CisJbWVtY3B5KCZjb21tcGFnZS0+c2dsaXN0X2FkZHIsICZjb21tcGFnZV9iYWstPnNnbGlzdF9hZGRyLAorCQlzaXplb2YoY29tbXBhZ2UtPnNnbGlzdF9hZGRyKSk7CisJbWVtY3B5KCZjb21tcGFnZS0+bWlkaV9vdXRwdXQsICZjb21tcGFnZV9iYWstPm1pZGlfb3V0cHV0LAorCQlzaXplb2YoY29tbXBhZ2UtPm1pZGlfb3V0cHV0KSk7CisJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUVDSE9DQVJEX05BTUUsIGNoaXApKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCURFX0lOSVQoKCJyZXN1bWUgaXJxPSVkXG4iLCBjaGlwLT5pcnEpKTsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCisJaWYgKGNoaXAtPm1pZGlfaW5wdXRfZW5hYmxlZCkKKwkJZW5hYmxlX21pZGlfaW5wdXQoY2hpcCwgVFJVRSk7CisJaWYgKGNoaXAtPm1pZGlfb3V0KQorCQlzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKGNoaXAtPm1pZGlfb3V0LCAxKTsKKyNlbmRpZgorCisJREVfSU5JVCgoInJlc3VtZSBkb25lXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworCisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfZWNob19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOwpAQCAtMjE2OSw2ICsyMzMwLDEwIEBACiAJLmlkX3RhYmxlID0gc25kX2VjaG9faWRzLAogCS5wcm9iZSA9IHNuZF9lY2hvX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZWNob19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2VjaG9fc3VzcGVuZCwKKwkucmVzdW1lID0gc25kX2VjaG9fcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCBmOTQ5MGFlLi4xZGY5NzRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTQ0MiwxMyArNDQyLDE2IEBACiAJdTE2IGRldmljZV9pZCwgc3ViZGV2aWNlX2lkOwogCXUxNiAqZHNwX2NvZGU7CQkJLyogQ3VycmVudCBEU1AgY29kZSBsb2FkZWQsCiAJCQkJCSAqIE5VTEwgaWYgbm90aGluZyBsb2FkZWQgKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRzcF9jb2RlX3RvX2xvYWQ7LyogRFNQIGNvZGUgdG8gbG9hZCAqLwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpY19jb2RlOwkvKiBDdXJyZW50IEFTSUMgY29kZSAqLworCXNob3J0IGRzcF9jb2RlX3RvX2xvYWQ7CQkvKiBEU1AgY29kZSB0byBsb2FkICovCisJc2hvcnQgYXNpY19jb2RlOwkJLyogQ3VycmVudCBBU0lDIGNvZGUgKi8KIAl1MzIgY29tbV9wYWdlX3BoeXM7CQkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUKIAkJCQkJCSAqIG1lbW9yeSBzZWVuIGJ5IERTUCAqLwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3BfcmVnaXN0ZXJzOwkvKiBEU1AncyByZWdpc3RlciBiYXNlICovCiAJdTMyIGFjdGl2ZV9tYXNrOwkJCS8qIENocy4gYWN0aXZlIG1hc2sgb3IKIAkJCQkJCSAqIHB1bmtzIG91dCAqLworI2lmZGVmIENPTkZJR19QTQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfY2FjaGVbOF07CS8qIENhY2hlZCBmaXJtd2FyZXMgKi8KKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKIAl1MTYgbXRjX3N0YXRlOwkJCQkvKiBTdGF0ZSBmb3IgTUlESSBpbnB1dCBwYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQ2NCwxMSArNDY3LDEzIEBACiBzdGF0aWMgaW50IHdhaXRfaGFuZHNoYWtlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBzZW5kX3ZlY3RvcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY29tbWFuZCk7CiBzdGF0aWMgaW50IGdldF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19lbnRyeSwKLQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnJtLCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KTsKIHN0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSk7CiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQogc3RhdGljIGludCBlbmFibGVfbWlkaV9pbnB1dChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIGVuYWJsZSk7CitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKAorCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwogc3RhdGljIGludCBtaWRpX3NlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2VjaG9fbWlkaV9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQkgIHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggZTMyYTc0OC4uNjU4ZGI0NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwpAQCAtMjI3LDEyICsyMjcsMTEgQEAKIAkvKiBHaXZlIHRoZSBEU1AgYSBmZXcgbWlsbGlzZWNvbmRzIHRvIHNldHRsZSBkb3duICovCiAJbWRlbGF5KDIpOwogCi0JZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEXzNHX0FTSUMsCi0JCQkJJmNhcmRfZndbRldfM0dfQVNJQ10pOworCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF8zR19BU0lDLCBGV18zR19BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAtPmFzaWNfY29kZSA9ICZjYXJkX2Z3W0ZXXzNHX0FTSUNdOworCWNoaXAtPmFzaWNfY29kZSA9IEZXXzNHX0FTSUM7CiAKIAkvKiBOb3cgZ2l2ZSB0aGUgbmV3IEFTSUMgc29tZSB0aW1lIHRvIHNldCB1cCAqLwogCW1zbGVlcCgxMDAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKaW5kZXggNGRmNTFlZi4uNjQ0MTdhNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKQEAgLTE3NSwxNSArMTc1LDE1IEBACiAjaWZkZWYgRUNIT0NBUkRfSEFTX0FTSUMKIAogLyogTG9hZCBBU0lDIGNvZGUgLSBkb25lIGFmdGVyIHRoZSBEU1AgaXMgbG9hZGVkICovCi1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYykKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYykKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCBlcnI7CiAJdTMyIGksIHNpemU7CiAJdTggKmNvZGU7CiAKLQlpZiAoKGVyciA9IGdldF9maXJtd2FyZSgmZncsIGFzaWMsIGNoaXApKSA8IDApIHsKKwllcnIgPSBnZXRfZmlybXdhcmUoJmZ3LCBjaGlwLCBhc2ljKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgbm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTI0NSw3ICsyNDUsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKGkgPSBnZXRfZmlybXdhcmUoJmZ3LCAmY2FyZF9md1tGV18zNjFfTE9BREVSXSwgY2hpcCkpIDwgMCkgeworCWkgPSBnZXRfZmlybXdhcmUoJmZ3LCBjaGlwLCBGV18zNjFfTE9BREVSKTsKKwlpZiAoaSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkZpcm13YXJlIG5vdCBmb3VuZCAhXG4iKTsKIAkJcmV0dXJuIGk7CiAJfQpAQCAtNDg1LDcgKzQ4Niw4IEBACiAJCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsKIAl9CiAKLQlpZiAoKGVyciA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAtPmRzcF9jb2RlX3RvX2xvYWQsIGNoaXApKSA8IDApCisJZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgY2hpcCwgY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJZXJyID0gbG9hZF9kc3AoY2hpcCwgKHUxNiAqKWZ3LT5kYXRhKTsKIAlmcmVlX2Zpcm13YXJlKGZ3KTsKQEAgLTQ5NSw5ICs0OTcsNiBAQAogCWlmICgoYm94X3R5cGUgPSBsb2FkX2FzaWMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGJveF90eXBlOwkvKiBlcnJvciAqLwogCi0JaWYgKChlcnIgPSByZXN0b3JlX2RzcF9yZXR0aW5ncyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJcmV0dXJuIGJveF90eXBlOwogfQogCkBAIC02NTcsMjUgKzY1Niw4OSBAQAogCiBzdGF0aWMgaW50IHJlc3RvcmVfZHNwX3JldHRpbmdzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7Ci0JaW50IGVycjsKKwlpbnQgaSwgbywgZXJyOwogCURFX0lOSVQoKCJyZXN0b3JlX2RzcF9zZXR0aW5nc1xuIikpOwogCiAJaWYgKChlcnIgPSBjaGVja19hc2ljX3N0YXR1cyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogQCBHaW5hMjAvRGFybGEyMCBvbmx5LiBTaG91bGQgYmUgaGFybWxlc3MgZm9yIG90aGVyIGNhcmRzLiAqLworCS8qIEdpbmEyMC9EYXJsYTIwIG9ubHkuIFNob3VsZCBiZSBoYXJtbGVzcyBmb3Igb3RoZXIgY2FyZHMuICovCiAJY2hpcC0+Y29tbV9wYWdlLT5nZF9jbG9ja19zdGF0ZSA9IEdEX0NMT0NLX1VOREVGOwogCWNoaXAtPmNvbW1fcGFnZS0+Z2Rfc3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNvbW1fcGFnZS0+aGFuZHNoYWtlID0gMHhmZmZmZmZmZjsKIAotCWlmICgoZXJyID0gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKSkgPCAwKQorCS8qIFJlc3RvcmUgb3V0cHV0IGJ1c3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX291dChjaGlwKTsgaSsrKSB7CisJCWVyciA9IHNldF9vdXRwdXRfZ2FpbihjaGlwLCBpLCBjaGlwLT5vdXRwdXRfZ2FpbltpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisJZm9yIChpID0gMDsgaSA8IG51bV9waXBlc19vdXQoY2hpcCk7IGkrKykKKwkJZm9yIChvID0gMDsgbyA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBvKyspIHsKKwkJCWVyciA9IHNldF92bWl4ZXJfZ2FpbihjaGlwLCBvLCBpLAorCQkJCQkJY2hpcC0+dm1peGVyX2dhaW5bb11baV0pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCWlmICh1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApIDwgMCkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLworCisjaWZkZWYgRUNIT0NBUkRfSEFTX01PTklUT1IKKwlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKKwkJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykgeworCQkJZXJyID0gc2V0X21vbml0b3JfZ2FpbihjaGlwLCBvLCBpLAorCQkJCQkJY2hpcC0+bW9uaXRvcl9nYWluW29dW2ldKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUiAqLworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKSB7CisJCWVyciA9IHNldF9pbnB1dF9nYWluKGNoaXAsIGksIGNoaXAtPmlucHV0X2dhaW5baV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOICovCisKKwllcnIgPSB1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoY2hpcC0+bWV0ZXJzX2VuYWJsZWQpCi0JCWlmIChzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09OKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKKwllcnIgPSB1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNldF9zYW1wbGVfcmF0ZShjaGlwLCBjaGlwLT5zYW1wbGVfcmF0ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoY2hpcC0+bWV0ZXJzX2VuYWJsZWQpIHsKKwkJZXJyID0gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX01FVEVSU19PTik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9NT0RFX1NXSVRDSAorCWlmIChzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIGNoaXAtPmRpZ2l0YWxfbW9kZSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKwlpZiAoc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBjaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKKworI2lmZGVmIEVDSE9DQVJEX0hBU19QSEFOVE9NX1BPV0VSCisJaWYgKHNldF9waGFudG9tX3Bvd2VyKGNoaXAsIGNoaXAtPnBoYW50b21fcG93ZXIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19FWFRFUk5BTF9DTE9DSworCS8qIHNldF9pbnB1dF9jbG9jaygpIGFsc28gcmVzdG9yZXMgYXV0b211dGUgc2V0dGluZyAqLwogCWlmIChzZXRfaW5wdXRfY2xvY2soY2hpcCwgY2hpcC0+aW5wdXRfY2xvY2spIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAjZW5kaWYKQEAgLTY4NSwyMyArNzQ4LDE0IEBACiAJCXJldHVybiAtRUlPOwogI2VuZGlmCiAKLQlpZiAodXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAodXBkYXRlX2lucHV0X2xpbmVfbGV2ZWwoY2hpcCkgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKLQlpZiAodXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSA8IDApCi0JCXJldHVybiAtRUlPOwotI2VuZGlmCi0KIAlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CiAKIAlERV9JTklUKCgicmVzdG9yZV9kc3BfcmV0dGluZ3MgZG9uZVxuIikpOwotCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0ZMQUdTKTsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC05MTgsOSArOTcyLDYgQEAKIAljaGlwLT5jYXJkX25hbWUgPSBFQ0hPQ0FSRF9OQU1FOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CS8qIFNldCBUUlVFIHVudGlsIERTUCBsb2FkZWQgKi8KIAljaGlwLT5kc3BfY29kZSA9IE5VTEw7CS8qIEN1cnJlbnQgRFNQIGNvZGUgbm90IGxvYWRlZCAqLwotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9OT05FOwotCWNoaXAtPmlucHV0X2Nsb2NrID0gRUNIT19DTE9DS19JTlRFUk5BTDsKLQljaGlwLT5vdXRwdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX1dPUkQ7CiAJY2hpcC0+YXNpY19sb2FkZWQgPSBGQUxTRTsKIAltZW1zZXQoY2hpcC0+Y29tbV9wYWdlLCAwLCBzaXplb2Yoc3RydWN0IGNvbW1fcGFnZSkpOwogCkBAIC05MzEsNyArOTgyLDYgQEAKIAljaGlwLT5jb21tX3BhZ2UtPm1pZGlfb3V0X2ZyZWVfY291bnQgPQogCQljcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKIAljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIoNDQxMDApOwotCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CiAKIAkvKiBTZXQgbGluZSBsZXZlbHMgc28gd2UgZG9uJ3QgYmxhc3QgYW55IGlucHV0cyBvbiBzdGFydHVwICovCiAJbWVtc2V0KGNoaXAtPmNvbW1fcGFnZS0+bW9uaXRvcnMsIEVDSE9HQUlOX01VVEVELCBNT05JVE9SX0FSUkFZX1NJWkUpOwpAQCAtOTQyLDUwICs5OTIsMjEgQEAKIAogCiAKLS8qIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNldmVyYWwgdm9sdW1lIGNvbnRyb2xzIGZvciBidXNzZXMgYW5kIHBpcGVzLgotVGhpcyBNVVNUIGJlIGNhbGxlZCBhZnRlciB0aGUgRFNQIGlzIHVwIGFuZCBydW5uaW5nICEgKi8KKy8qIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGNoaXAgc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMsIGllLiBhbGwKKyAqIG11dGVkIGFuZCBpbnRlcm5hbCBjbG9jayBzb3VyY2UuIFRoZW4gaXQgY29waWVzIHRoZSBzZXR0aW5ncyB0byB0aGUgRFNQLgorICogVGhpcyBNVVNUIGJlIGNhbGxlZCBhZnRlciB0aGUgRFNQIGlzIHVwIGFuZCBydW5uaW5nICEKKyAqLwogc3RhdGljIGludCBpbml0X2xpbmVfbGV2ZWxzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7Ci0JaW50IHN0LCBpLCBvOwotCiAJREVfSU5JVCgoImluaXRfbGluZV9sZXZlbHNcbiIpKTsKLQotCS8qIE11dGUgb3V0cHV0IGJ1c3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX291dChjaGlwKTsgaSsrKQotCQlpZiAoKHN0ID0gc2V0X291dHB1dF9nYWluKGNoaXAsIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQlyZXR1cm4gc3Q7Ci0JaWYgKChzdCA9IHVwZGF0ZV9vdXRwdXRfbGluZV9sZXZlbChjaGlwKSkpCi0JCXJldHVybiBzdDsKLQotI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKLQkvKiBNdXRlIHRoZSBWbWl4ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzX291dChjaGlwKTsgaSsrKQotCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKLQkJCWlmICgoc3QgPSBzZXRfdm1peGVyX2dhaW4oY2hpcCwgbywgaSwgRUNIT0dBSU5fTVVURUQpKSkKLQkJCQlyZXR1cm4gc3Q7Ci0JaWYgKChzdCA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCkpKQotCQlyZXR1cm4gc3Q7Ci0jZW5kaWYgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX01PTklUT1IKLQkvKiBNdXRlIHRoZSBtb25pdG9yIG1peGVyICovCi0JZm9yIChvID0gMDsgbyA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBvKyspCi0JCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspCi0JCQlpZiAoKHN0ID0gc2V0X21vbml0b3JfZ2FpbihjaGlwLCBvLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQotCQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19NT05JVE9SICovCi0KLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgotCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspCi0JCWlmICgoc3QgPSBzZXRfaW5wdXRfZ2FpbihjaGlwLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQotCQkJcmV0dXJuIHN0OwotCWlmICgoc3QgPSB1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKSkpCi0JCXJldHVybiBzdDsKLSNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTiAqLwotCi0JcmV0dXJuIDA7CisJbWVtc2V0KGNoaXAtPm91dHB1dF9nYWluLCBFQ0hPR0FJTl9NVVRFRCwgc2l6ZW9mKGNoaXAtPm91dHB1dF9nYWluKSk7CisJbWVtc2V0KGNoaXAtPmlucHV0X2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+aW5wdXRfZ2FpbikpOworCW1lbXNldChjaGlwLT5tb25pdG9yX2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+bW9uaXRvcl9nYWluKSk7CisJbWVtc2V0KGNoaXAtPnZtaXhlcl9nYWluLCBFQ0hPR0FJTl9NVVRFRCwgc2l6ZW9mKGNoaXAtPnZtaXhlcl9nYWluKSk7CisJY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOworCWNoaXAtPm91dHB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfV09SRDsKKwljaGlwLT5zYW1wbGVfcmF0ZSA9IDQ0MTAwOworCXJldHVybiByZXN0b3JlX2RzcF9yZXR0aW5ncyhjaGlwKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYwppbmRleCBjMGU2NGI4Li4yMzY0ZjhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAl7MCwgImdpbmEyMF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDAyMCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBHaW5hMjAgcmV2LjAgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwppbmRleCAzZjFlNzQ3Li5kMTYxNWEwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtNDksNyArNDksNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTIwX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0dJTkEyMF9EU1A7CiAJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCkBAIC02MiwxNyArNjIsMjAgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwppbmRleCBjMzZhNzhkLi42MTZiNTU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAl7MCwgImdpbmEyNF8zNjFfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDUwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIEdpbmEyNCByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNTEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgR2luYTI0IHJldi4xICovCiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA1MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBHaW5hMjQgcmV2LjAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMKaW5kZXggMmZlZjM3YS4uOThmN2NmYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMKQEAgLTMzLDggKzMzLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CiBzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKIHN0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYyk7CiBzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCiAKQEAgLTU4LDE5ICs1NywxNiBAQAogCQlFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTCB8IEVDSE9fQ0xPQ0tfQklUX1NQRElGIHwKIAkJRUNIT19DTE9DS19CSVRfRVNZTkMgfCBFQ0hPX0NMT0NLX0JJVF9FU1lOQzk2IHwKIAkJRUNIT19DTE9DS19CSVRfQURBVDsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKLQljaGlwLT5kaWdpdGFsX21vZGUgPSBESUdJVEFMX01PREVfU1BESUZfUkNBOwogCiAJLyogR2luYTI0IGNvbWVzIGluIGJvdGggJzMwMSBhbmQgJzM2MSBmbGF2b3JzICovCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpIHsKLQkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0dJTkEyNF8zNjFfRFNQXTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0dJTkEyNF8zNjFfRFNQOwogCQljaGlwLT5kaWdpdGFsX21vZGVzID0KIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CiAJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX0FEQVQ7CiAJfSBlbHNlIHsKLQkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0dJTkEyNF8zMDFfRFNQXTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0dJTkEyNF8zMDFfRFNQOwogCQljaGlwLT5kaWdpdGFsX21vZGVzID0KIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CkBAIC04MiwxOSArNzgsMjIgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9kaWdpdGFsX21vZGUoY2hpcCwgRElHSVRBTF9NT0RFX1NQRElGX1JDQSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5kaWdpdGFsX21vZGUgPSBESUdJVEFMX01PREVfU1BESUZfUkNBOworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKQEAgLTEyNSw3ICsxMjQsNyBAQAogewogCXUzMiBjb250cm9sX3JlZzsKIAlpbnQgZXJyOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc2hvcnQgYXNpYzsKIAogCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKIAkJcmV0dXJuIDE7CkBAIC0xMzUsMTQgKzEzNCwxNSBAQAogCiAJLyogUGljayB0aGUgY29ycmVjdCBBU0lDIGZvciAnMzAxIG9yICczNjEgR2luYTI0ICovCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCWZ3ID0gJmNhcmRfZndbRldfR0lOQTI0XzM2MV9BU0lDXTsKKwkJYXNpYyA9IEZXX0dJTkEyNF8zNjFfQVNJQzsKIAllbHNlCi0JCWZ3ID0gJmNhcmRfZndbRldfR0lOQTI0XzMwMV9BU0lDXTsKKwkJYXNpYyA9IEZXX0dJTkEyNF8zMDFfQVNJQzsKIAotCWlmICgoZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0dJTkEyNF9BU0lDLCBmdykpIDwgMCkKKwllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfR0lOQTI0X0FTSUMsIGFzaWMpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcC0+YXNpY19jb2RlID0gZnc7CisJY2hpcC0+YXNpY19jb2RlID0gYXNpYzsKIAogCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBhIGxpdHRsZSB0aW1lIHRvIHNldCB1cCAqLwogCW1kZWxheSgxMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwppbmRleCAwYTU4YTdjLi43NzYxNzVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAl7MCwgImluZGlnb19kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA5MCwgMCwgMCwgMH0sCS8qIEluZGlnbyAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCmluZGV4IDBiMmNkOWMuLjVlODVmMTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCkBAIC01MCw3ICs1MCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0RTUDsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKIAkgICB3b3JrcyBPSyAqLwogCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKQEAgLTYwLDE1ICs2MCwxOSBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwppbmRleCA5YWI2MjVlLi4yZTRhYjNlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAogCWNvbnRyb2xfcmVnIHw9IGNsb2NrOwogCWlmIChjb250cm9sX3JlZyAhPSBvbGRfY29udHJvbF9yZWcpIHsKKwkJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiAlZCBjbG9jayAlZFxuIiwgcmF0ZSwgY2xvY2spKTsKIAkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOwogCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CiAJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYwppbmRleCAyZGIyNGQyLi44ODE2YjBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCkBAIC02OCw3ICs2OCw3IEBACiAJezAsICJpbmRpZ29fZGpfZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwQjAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gREoqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwppbmRleCAwODM5MjkxLi42OGYzYzhjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19ESl9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fREpfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjAsMTUgKzYwLDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCmluZGV4IDJlNDQzMTYuLmIxZTM2NTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYwpAQCAtNjgsNyArNjgsNyBAQAogCXswLCAiaW5kaWdvX2RqeF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBFMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESngqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCmluZGV4IGY1OTFmYzIuLmJiOTYzMmM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpAQCAtNDgsNyArNDgsNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKWF9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fREpYX0RTUDsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKIAkgICB3b3JrcyBPSyAqLwogCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKQEAgLTU5LDEwICs1OSwxMyBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQorCisKKworc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYwppbmRleCBhNjBjMGEwLi4xMDM1MTI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCkBAIC02OSw3ICs2OSw3IEBACiAJezAsICJpbmRpZ29faW9fZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwQTAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU8qLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYwppbmRleCAwNjA0YzhhLi5iZWI5YTViNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC01MCw3ICs1MCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9fRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0lPX0RTUDsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKIAkgICB3b3JrcyBPSyAqLwogCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKQEAgLTYwLDE1ICs2MCwxOSBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwppbmRleCBlYjM4MTlmLi42MGI3Y2IyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRDAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU94ICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKaW5kZXggZjM1NzUyMS4uMzk0YzZlNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19JT1hfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNTksMTAgKzU5LDEzIEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CisKKworCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwppbmRleCA1MDYxOTQ2Li44YzNmNWM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwpAQCAtNzYsNyArNzYsNyBAQAogCXswLCAibGF5bGEyMF9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwppbmRleCA4Mzc1MGU5Li41M2NlOTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCkBAIC0zMSw4ICszMSw3IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9kc3Aoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyICpkYXRhKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiBzdGF0aWMgaW50IHVwZGF0ZV9mbGFncyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIApAQCAtNTQsNyArNTMsNyBAQAogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwogCWNoaXAtPmhhc19taWRpID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTEFZTEEyMF9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19MQVlMQTIwX0RTUDsKIAljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9XT1JEIHwgRUNIT19DTE9DS19CSVRfU1VQRVI7CkBAIC02NSwxNyArNjQsMjAgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEFfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTIwX0FTSUNdKTsKKwkJCQlGV19MQVlMQTIwX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCmluZGV4IGUwOWUzZWEuLmVkMWNjMGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJezAsICJsYXlsYTI0XzJTX2FzaWMuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA2MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBMYXlsYTI0IHJldi4wICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYwppbmRleCBkNjFiNWNiLi44YzA0MTY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjRfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCkBAIC0zMiw4ICszMiw3IEBACiBzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOwogc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CiBzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSk7Ci1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsIHNob3J0IGFzaWMpOwogc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIAogCkBAIC01NCw3ICs1Myw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19MQVlMQTI0X0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0xBWUxBMjRfRFNQOwogCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0KIAkJRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfCBFQ0hPX0NMT0NLX0JJVF9TUERJRiB8CiAJCUVDSE9fQ0xPQ0tfQklUX1dPUkQgfCBFQ0hPX0NMT0NLX0JJVF9BREFUOwpAQCAtNjIsOSArNjEsNiBAQAogCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX1JDQSB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQkJRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtNzMsMTcgKzY5LDIyIEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjMsMTggKzEyNCwxOCBAQAogCiAJLyogTG9hZCB0aGUgQVNJQyBmb3IgdGhlIFBDSSBjYXJkICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBMjRfUENJX0NBUkRfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTI0XzFfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMV9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAtPmFzaWNfY29kZSA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfTEFZTEEyNF8yU19BU0lDOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKIAogCS8qIERvIHRoZSBleHRlcm5hbCBvbmUgKi8KIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEEyNF9FWFRFUk5BTF9BU0lDLAotCQkJCSZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMlNfQVNJQyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBGQUxTRTsKIApAQCAtMjk5LDcgKzMwMCw3IEBACiAvKiBEZXBlbmRpbmcgb24gd2hhdCBkaWdpdGFsIG1vZGUgeW91IHdhbnQsIExheWxhMjQgbmVlZHMgZGlmZmVyZW50IEFTSUNzCiBsb2FkZWQuICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgQVNJQyBuZWVkZWQgZm9yIHRoZSBuZXcgbW9kZSBhbmQgc2VlcwogaWYgaXQgbWF0Y2hlcyB0aGUgb25lIGFscmVhZHkgbG9hZGVkLiAqLwotc3RhdGljIGludCBzd2l0Y2hfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpCitzdGF0aWMgaW50IHN3aXRjaF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHNob3J0IGFzaWMpCiB7CiAJczggKm1vbml0b3JzOwogCkBAIC0zMzUsNyArMzM2LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVyciwgaW5jb21wYXRpYmxlX2Nsb2NrOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKKwlzaG9ydCBhc2ljOwogCiAJLyogU2V0IGNsb2NrIHRvICJpbnRlcm5hbCIgaWYgaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgbW9kZSAqLwogCWluY29tcGF0aWJsZV9jbG9jayA9IEZBTFNFOwpAQCAtMzQ0LDEyICszNDUsMTIgQEAKIAljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CiAJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0FEQVQpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMlNfQVNJQzsKIAkJYnJlYWs7CiAJY2FzZSBESUdJVEFMX01PREVfQURBVDoKIAkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrID09IEVDSE9fQ0xPQ0tfU1BESUYpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yQV9BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMkFfQVNJQzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJREVfQUNUKCgiRGlnaXRhbCBtb2RlIG5vdCBzdXBwb3J0ZWQ6ICVkXG4iLCBtb2RlKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCBmMDVjOGMwLi5jYzJiYmZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl7MCwgIm1pYV9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA4MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNaWEgcmV2LjAgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDgxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIE1pYSByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKaW5kZXggNTUxNDA1MS4uNmViZmE2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX01JQV9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19NSUFfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjYsMTUgKzY2LDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKaW5kZXggYjA1YmFkOS4uM2U3ZTAxODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jCkBAIC05Miw3ICs5Miw3IEBACiAJezAsICJtb25hXzJfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDcwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIE1vbmEgcmV2LjAgKi8KIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDcxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIE1vbmEgcmV2LjEgKi8KIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDcyLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIE1vbmEgcmV2LjIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYwppbmRleCBlYWE2MTliLi42ZTZhN2ViIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmFfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jCkBAIC0zMyw4ICszMyw3IEBACiBzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOwogc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CiBzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSk7Ci1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsIHNob3J0IGFzaWMpOwogc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIAogCkBAIC02NCwzMiArNjMsMzAgQEAKIAogCS8qIE1vbmEgY29tZXMgaW4gYm90aCAnMzAxIGFuZCAnMzYxIGZsYXZvcnMgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKLQkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX01PTkFfMzYxX0RTUF07CisJCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19NT05BXzM2MV9EU1A7CiAJZWxzZQotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTU9OQV8zMDFfRFNQXTsKLQotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7Ci0JY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7Ci0JY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisJCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19NT05BXzMwMV9EU1A7CiAKIAlpZiAoKGVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOwpAQCAtMTIwLDcgKzExNyw3IEBACiB7CiAJdTMyIGNvbnRyb2xfcmVnOwogCWludCBlcnI7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCXNob3J0IGFzaWM7CiAKIAlpZiAoY2hpcC0+YXNpY19sb2FkZWQpCiAJCXJldHVybiAwOwpAQCAtMTI4LDkgKzEyNSw5IEBACiAJbWRlbGF5KDEwKTsKIAogCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDNDhdOworCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDNDg7CiAJZWxzZQotCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDNDhdOworCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDNDg7CiAKIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTU9OQV9QQ0lfQ0FSRF9BU0lDLCBhc2ljKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE0MSw3ICsxMzgsNyBAQAogCiAJLyogRG8gdGhlIGV4dGVybmFsIG9uZSAqLwogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9NT05BX0VYVEVSTkFMX0FTSUMsCi0JCQkJJmNhcmRfZndbRldfTU9OQV8yX0FTSUNdKTsKKwkJCQlGV19NT05BXzJfQVNJQyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTE2NSwyMiArMTYyLDIyIEBACiBpZiBpdCBtYXRjaGVzIHRoZSBvbmUgYWxyZWFkeSBsb2FkZWQuICovCiBzdGF0aWMgaW50IHN3aXRjaF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgZG91YmxlX3NwZWVkKQogewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKIAlpbnQgZXJyOworCXNob3J0IGFzaWM7CiAKIAkvKiBDaGVjayB0aGUgY2xvY2sgZGV0ZWN0IGJpdHMgdG8gc2VlIGlmIHRoaXMgaXMKIAlhIHNpbmdsZS1zcGVlZCBjbG9jayBvciBhIGRvdWJsZS1zcGVlZCBjbG9jazsgbG9hZAogCWEgbmV3IEFTSUMgaWYgbmVjZXNzYXJ5LiAqLwogCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKSB7CiAJCWlmIChkb3VibGVfc3BlZWQpCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzYxXzFfQVNJQzk2OwogCQllbHNlCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDNDhdOworCQkJYXNpYyA9IEZXX01PTkFfMzYxXzFfQVNJQzQ4OwogCX0gZWxzZSB7CiAJCWlmIChkb3VibGVfc3BlZWQpCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzAxXzFfQVNJQzk2OwogCQllbHNlCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDNDhdOworCQkJYXNpYyA9IEZXX01PTkFfMzAxXzFfQVNJQzQ4OwogCX0KIAogCWlmIChhc2ljICE9IGNoaXAtPmFzaWNfY29kZSkgewpAQCAtMjAwLDcgKzE5Nyw3IEBACiBzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKIHsKIAl1MzIgY29udHJvbF9yZWcsIGNsb2NrOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKKwlzaG9ydCBhc2ljOwogCWNoYXIgZm9yY2Vfd3JpdGU7CiAKIAkvKiBPbmx5IHNldCB0aGUgY2xvY2sgZm9yIGludGVybmFsIG1vZGUuICovCkBAIC0yMTgsMTQgKzIxNSwxNCBAQAogCQlpZiAoY2hpcC0+ZGlnaXRhbF9tb2RlID09IERJR0lUQUxfTU9ERV9BREFUKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzYxXzFfQVNJQzk2XTsKKwkJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM5NjsKIAkJZWxzZQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzAxXzFfQVNJQzk2XTsKKwkJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM5NjsKIAl9IGVsc2UgewogCQlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDNDg7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDNDg7CiAJfQogCiAJZm9yY2Vfd3JpdGUgPSAwOwpAQCAtNDEwLDggKzQwNyw4IEBACiAJY2FzZSBESUdJVEFMX01PREVfQURBVDoKIAkJLyogSWYgdGhlIGN1cnJlbnQgQVNJQyBpcyB0aGUgOTZLSHogQVNJQywgc3dpdGNoIHRoZSBBU0lDCiAJCSAgIGFuZCBzZXQgdG8gNDggS0h6ICovCi0JCWlmIChjaGlwLT5hc2ljX2NvZGUgPT0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdIHx8Ci0JCSAgICBjaGlwLT5hc2ljX2NvZGUgPT0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdKSB7CisJCWlmIChjaGlwLT5hc2ljX2NvZGUgPT0gRldfTU9OQV8zNjFfMV9BU0lDOTYgfHwKKwkJICAgIGNoaXAtPmFzaWNfY29kZSA9PSBGV19NT05BXzMwMV8xX0FTSUM5NikgewogCQkJc2V0X3NhbXBsZV9yYXRlKGNoaXAsIDQ4MDAwKTsKIAkJfQogCQljb250cm9sX3JlZyB8PSBHTUxfQURBVF9NT0RFOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IDE2OGFmNjcuLjQyMDM3ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIC8qCiAgKiBDbGFzcyAwNDAxOiAxMTAyOjAwMDggKHJldiAwMCkgU3Vic3lzdGVtOiAxMTAyOjEwMDEgLT4gQXVkaWd5MiBWYWx1ZSAgTW9kZWw6U0IwNDAwCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZW11MTBrMV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZW11MTBrMV9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ1JFQVRJVkUsIDB4MDAwMiksIDAgfSwJLyogRU1VMTBLMSAqLwogCXsgUENJX1ZERVZJQ0UoQ1JFQVRJVkUsIDB4MDAwNCksIDEgfSwJLyogQXVkaWd5ICovCiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA4KSwgMSB9LAkvKiBBdWRpZ3kgMiBWYWx1ZSBTQjA0MDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDFkMzY5ZmYuLmRmNDdmNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMTYwNSw3ICsxNjA1LDcgQEAKIH0KIAogLy8gUENJIElEcwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxeF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZW11MTBrMXhfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKENSRUFUSVZFLCAweDAwMDYpLCAwIH0sCS8qIERlbGwgT0VNIHZlcnNpb24gKEVNVTEwSzEpICovCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggMmI4MmM1Yy4uYzdmYmE1MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9hdWRpb3BjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdWRpb3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXVkaW9wY2lfaWRzKSA9IHsKICNpZmRlZiBDSElQMTM3MAogCXsgUENJX1ZERVZJQ0UoRU5TT05JUSwgMHg1MDAwKSwgMCwgfSwJLyogRVMxMzcwICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCBmYjgzZTFmLi41NTNiNzUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9lczE5MzhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTM4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lczE5MzhfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKEVTUywgMHgxOTY5KSwgMCwgfSwgICAvKiBTb2xvLTEgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggYTExZjQ1My4uZWNhZWE5ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfZXMxOTY4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VzMTk2OF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZXMxOTY4X2lkcykgPSB7CiAJLyogTWFlc3RybyAxICovCiAgICAgICAgIHsgMHgxMjg1LCAweDAxMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCBUWVBFX01BRVNUUk8gfSwKIAkvKiBNYWVzdHJvIDIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggODM1MDhiMy4uZTFiYWFkNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ZtODAxX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9mbTgwMV9pZHMpID0gewogCXsgMHgxMzE5LCAweDA4MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCAwLCB9LCAgIC8qIEZNODAxICovCiAJeyAweDUyMTMsIDB4MDUxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogR2FsbGFudCBPZHlzc2V5IFNvdW5kIDQgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IGY5OGI0N2MuLjc2ZDNjNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtODI0LDYgKzgyNCw5IEBACiAJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKIAl1bnNpZ25lZCBpbnQgb2xkY2ZnOwogCisJaWYgKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgbmlkKSkgIT0gQUNfV0lEX1BJTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlvbGRjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsIGxpc3QsIG5pZCk7CiAJaWYgKCFwaW4pIHsKQEAgLTg5OSw2ICs5MDIsMjUgQEAKIAl9CiB9CiAKKy8qKgorICogc25kX2hkYV9zaHV0dXBfcGlucyAtIFNodXQgdXAgYWxsIHBpbnMKKyAqIEBjb2RlYzogdGhlIEhEQSBjb2RlYworICoKKyAqIENsZWFyIGFsbCBwaW4gY29udHJvbHMgdG8gc2h1cCB1cCBiZWZvcmUgc3VzcGVuZCBmb3IgYXZvaWRpbmcgY2xpY2sgbm9pc2UuCisgKiBUaGUgY29udHJvbHMgYXJlbid0IGNhY2hlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlc3VtZWQgcHJvcGVybHkuCisgKi8KK3ZvaWQgc25kX2hkYV9zaHV0dXBfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfcGlucy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF9waW5zLCBpKTsKKwkJLyogdXNlIHJlYWQgaGVyZSBmb3Igc3luY2luZyBhZnRlciBpc3N1aW5nIGVhY2ggdmVyYiAqLworCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbi0+bmlkLCAwLAorCQkJCSAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9zaHV0dXBfcGlucyk7CisKIHN0YXRpYyB2b2lkIGluaXRfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSwKIAkJCSAgIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSk7CiBzdGF0aWMgdm9pZCBmcmVlX2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUpOwpAQCAtOTMxLDYgKzk1Myw3IEBACiAjZW5kaWYKIAlsaXN0X2RlbCgmY29kZWMtPmxpc3QpOwogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bWl4ZXJzKTsKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm5pZHMpOwogCWNvZGVjLT5idXMtPmNhZGRyX3RibFtjb2RlYy0+YWRkcl0gPSBOVUxMOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLmZyZWUpCiAJCWNvZGVjLT5wYXRjaF9vcHMuZnJlZShjb2RlYyk7CkBAIC05ODUsNyArMTAwOCw4IEBACiAJbXV0ZXhfaW5pdCgmY29kZWMtPmNvbnRyb2xfbXV0ZXgpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+YW1wX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9jYWNoZV9oZWFkKSk7Ci0Jc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3QgaGRhX25pZF9pdGVtKSwgNjApOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bWl4ZXJzLCBzaXplb2Yoc3RydWN0IGhkYV9uaWRfaXRlbSksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm5pZHMsIHNpemVvZihzdHJ1Y3QgaGRhX25pZF9pdGVtKSwgMzIpOwogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5kcml2ZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUpIHsKQEAgLTE3MDgsNyArMTczMiw3IEBACiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKTsKIAogLyoqCi0gKiBzbmRfaGRhX2N0bC1hZGQgLSBBZGQgYSBjb250cm9sIGVsZW1lbnQgYW5kIGFzc2lnbiB0byB0aGUgY29kZWMKKyAqIHNuZF9oZGFfY3RsX2FkZCAtIEFkZCBhIGNvbnRyb2wgZWxlbWVudCBhbmQgYXNzaWduIHRvIHRoZSBjb2RlYwogICogQGNvZGVjOiBIRC1hdWRpbyBjb2RlYwogICogQG5pZDogY29ycmVzcG9uZGluZyBOSUQgKG9wdGlvbmFsKQogICogQGtjdGw6IHRoZSBjb250cm9sIGVsZW1lbnQgdG8gYXNzaWduCkBAIC0xNzIzLDE5ICsxNzQ3LDI1IEBACiAgKgogICogc25kX2hkYV9jdGxfYWRkKCkgY2hlY2tzIHRoZSBjb250cm9sIHN1YmRldiBpZCBmaWVsZCB3aGV0aGVyCiAgKiAjSERBX1NVQkRFVl9OSURfRkxBRyBiaXQgaXMgc2V0LiAgSWYgc2V0IChhbmQgQG5pZCBpcyB6ZXJvKSwgdGhlIGxvd2VyCi0gKiBiaXRzIHZhbHVlIGlzIHRha2VuIGFzIHRoZSBOSUQgdG8gYXNzaWduLgorICogYml0cyB2YWx1ZSBpcyB0YWtlbiBhcyB0aGUgTklEIHRvIGFzc2lnbi4gVGhlICNIREFfTklEX0lURU1fQU1QIGJpdAorICogc3BlY2lmaWVzIGlmIGtjdGwtPnByaXZhdGVfdmFsdWUgaXMgYSBIREEgYW1wbGlmaWVyIHZhbHVlLgogICovCiBpbnQgc25kX2hkYV9jdGxfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCkKIHsKIAlpbnQgZXJyOworCXVuc2lnbmVkIHNob3J0IGZsYWdzID0gMDsKIAlzdHJ1Y3QgaGRhX25pZF9pdGVtICppdGVtOwogCi0JaWYgKGtjdGwtPmlkLnN1YmRldmljZSAmIEhEQV9TVUJERVZfTklEX0ZMQUcpIHsKKwlpZiAoa2N0bC0+aWQuc3ViZGV2aWNlICYgSERBX1NVQkRFVl9BTVBfRkxBRykgeworCQlmbGFncyB8PSBIREFfTklEX0lURU1fQU1QOwogCQlpZiAobmlkID09IDApCi0JCQluaWQgPSBrY3RsLT5pZC5zdWJkZXZpY2UgJiAweGZmZmY7Ci0JCWtjdGwtPmlkLnN1YmRldmljZSA9IDA7CisJCQluaWQgPSBnZXRfYW1wX25pZF8oa2N0bC0+cHJpdmF0ZV92YWx1ZSk7CiAJfQorCWlmICgoa2N0bC0+aWQuc3ViZGV2aWNlICYgSERBX1NVQkRFVl9OSURfRkxBRykgIT0gMCAmJiBuaWQgPT0gMCkKKwkJbmlkID0ga2N0bC0+aWQuc3ViZGV2aWNlICYgMHhmZmZmOworCWlmIChrY3RsLT5pZC5zdWJkZXZpY2UgJiAoSERBX1NVQkRFVl9OSURfRkxBR3xIREFfU1VCREVWX0FNUF9GTEFHKSkKKwkJa2N0bC0+aWQuc3ViZGV2aWNlID0gMDsKIAllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+YnVzLT5jYXJkLCBrY3RsKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTE3NDQsMTEgKzE3NzQsNDEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaXRlbS0+a2N0bCA9IGtjdGw7CiAJaXRlbS0+bmlkID0gbmlkOworCWl0ZW0tPmZsYWdzID0gZmxhZ3M7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2N0bF9hZGQpOwogCiAvKioKKyAqIHNuZF9oZGFfYWRkX25pZCAtIEFzc2lnbiBhIE5JRCB0byBhIGNvbnRyb2wgZWxlbWVudAorICogQGNvZGVjOiBIRC1hdWRpbyBjb2RlYworICogQG5pZDogY29ycmVzcG9uZGluZyBOSUQgKG9wdGlvbmFsKQorICogQGtjdGw6IHRoZSBjb250cm9sIGVsZW1lbnQgdG8gYXNzaWduCisgKiBAaW5kZXg6IGluZGV4IHRvIGtjdGwKKyAqCisgKiBBZGQgdGhlIGdpdmVuIGNvbnRyb2wgZWxlbWVudCB0byBhbiBhcnJheSBpbnNpZGUgdGhlIGNvZGVjIGluc3RhbmNlLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gI3NuZF9oZGFfY3RsX2FkZCBjYW5ub3QgYmUgdXNlZCBmb3IgMToxCisgKiBOSUQ6S0NUTCBtYXBwaW5nIC0gZm9yIGV4YW1wbGUgIkNhcHR1cmUgU291cmNlIiBzZWxlY3Rvci4KKyAqLworaW50IHNuZF9oZGFfYWRkX25pZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJICAgIHVuc2lnbmVkIGludCBpbmRleCwgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX25pZF9pdGVtICppdGVtOworCisJaWYgKG5pZCA+IDApIHsKKwkJaXRlbSA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5uaWRzKTsKKwkJaWYgKCFpdGVtKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWl0ZW0tPmtjdGwgPSBrY3RsOworCQlpdGVtLT5pbmRleCA9IGluZGV4OworCQlpdGVtLT5uaWQgPSBuaWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfYWRkX25pZCk7CisKKy8qKgogICogc25kX2hkYV9jdGxzX2NsZWFyIC0gQ2xlYXIgYWxsIGNvbnRyb2xzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBjb2RlYwogICogQGNvZGVjOiBIRC1hdWRpbyBjb2RlYwogICovCkBAIC0xNzU5LDYgKzE4MTksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bWl4ZXJzLnVzZWQ7IGkrKykKIAkJc25kX2N0bF9yZW1vdmUoY29kZWMtPmJ1cy0+Y2FyZCwgaXRlbXNbaV0ua2N0bCk7CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bmlkcyk7CiB9CiAKIC8qIHBzZXVkbyBkZXZpY2UgbG9ja2luZwpAQCAtMjcwNiw3ICsyNzY3LDggQEAKIAlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIGZnLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKIAkJCSAgICBwb3dlcl9zdGF0ZSk7CiAJLyogcGFydGlhbCB3b3JrYXJvdW5kIGZvciAiYXp4X2dldF9yZXNwb25zZSB0aW1lb3V0IiAqLwotCWlmIChwb3dlcl9zdGF0ZSA9PSBBQ19QV1JTVF9EMCkKKwlpZiAocG93ZXJfc3RhdGUgPT0gQUNfUFdSU1RfRDAgJiYKKwkgICAgKGNvZGVjLT52ZW5kb3JfaWQgJiAweGZmZmYwMDAwKSA9PSAweDE0ZjEwMDAwKQogCQltc2xlZXAoMTApOwogCiAJbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKQEAgLTI3NDAsNyArMjgwMiw2IEBACiAJaWYgKHBvd2VyX3N0YXRlID09IEFDX1BXUlNUX0QwKSB7CiAJCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiAJCWludCBzdGF0ZTsKLQkJbXNsZWVwKDEwKTsKIAkJLyogd2FpdCB1bnRpbCB0aGUgY29kZWMgcmVhY2hzIHRvIEQwICovCiAJCWVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKIAkJZG8gewpAQCAtMzIxNCw2ICszMjc1LDggQEAKIAogLyoKICAqIGdldCB0aGUgZW1wdHkgUENNIGRldmljZSBudW1iZXIgdG8gYXNzaWduCisgKgorICogbm90ZSB0aGUgbWF4IGRldmljZSBudW1iZXIgaXMgbGltaXRlZCBieSBIREFfTUFYX1BDTVMsIGN1cnJlbnRseSAxMAogICovCiBzdGF0aWMgaW50IGdldF9lbXB0eV9wY21fZGV2aWNlKHN0cnVjdCBoZGFfYnVzICpidXMsIGludCB0eXBlKQogewpAQCAtMzQ3OCw2ICszNTQxLDggQEAKIAogCWZvciAoOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJaWYgKGtuZXctPmlmYWNlID09IC0xKQkvKiBza2lwIHRoaXMgY29kZWMgcHJpdmF0ZSB2YWx1ZSAqLworCQkJY29udGludWU7CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOwogCQlpZiAoIWtjdGwpCiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDBhNzcwYTIuLmI3NWRhNDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtNTI3LDYgKzUyNyw5IEBACiAvKiBtYXguIGNvZGVjIGFkZHJlc3MgKi8KICNkZWZpbmUgSERBX01BWF9DT0RFQ19BRERSRVNTCTB4MGYKIAorLyogbWF4IG51bWJlciBvZiBQQ00gZGV2aWNzIHBlciBjYXJkICovCisjZGVmaW5lIEhEQV9NQVhfUENNUwkJMTAKKwogLyoKICAqIGdlbmVyaWMgYXJyYXlzCiAgKi8KQEAgLTc4OSw2ICs3OTIsNyBAQAogCXUzMiAqd2NhcHM7CiAKIAlzdHJ1Y3Qgc25kX2FycmF5IG1peGVyczsJLyogbGlzdCBvZiBhc3NpZ25lZCBtaXhlciBlbGVtZW50cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgbmlkczsJCS8qIGxpc3Qgb2YgbWFwcGVkIG1peGVyIGVsZW1lbnRzICovCiAKIAlzdHJ1Y3QgaGRhX2NhY2hlX3JlYyBhbXBfY2FjaGU7CS8qIGNhY2hlIGZvciBhbXAgYWNjZXNzICovCiAJc3RydWN0IGhkYV9jYWNoZV9yZWMgY21kX2NhY2hlOwkvKiBjYWNoZSBmb3Igb3RoZXIgY29tbWFuZHMgKi8KQEAgLTg5OCw2ICs5MDIsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgY2ZnKTsKIGludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCiAJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKTsgLyogZm9yIGh3ZGVwICovCit2b2lkIHNuZF9oZGFfc2h1dHVwX3BpbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCiAvKgogICogTWl4ZXIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwppbmRleCAwOTJjNmE3Li41ZWEyMTI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCkBAIC04NjEsNyArODYxLDggQEAKIAl9CiAKIAkvKiBjcmVhdGUgaW5wdXQgTVVYIGlmIG11bHRpcGxlIHNvdXJjZXMgYXJlIGF2YWlsYWJsZSAqLwotCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwgc25kX2N0bF9uZXcxKCZjYXBfc2VsLCBjb2RlYykpOworCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgc3BlYy0+YWRjX25vZGUtPm5pZCwKKwkJCSAgICAgIHNuZF9jdGxfbmV3MSgmY2FwX3NlbCwgY29kZWMpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKaW5kZXggNDBjY2I0MS4uYTFmYzgzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCkBAIC0yOTMsOCArMjkzLDExIEBACiB7CQkJCQkJCQlcCiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CQlcCi0JY2hhciAqYWZ0ZXI7CQkJCQkJXAotCWNvZGVjLT50eXBlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDApOwkJXAorCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJXAorCWludCBlcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwkJCVwKKwlpZiAoZXJyIDwgMCkJCQkJCQlcCisJCXJldHVybiBlcnI7CQkJCQlcCisJY29kZWMtPnR5cGUgPSB2YWw7CQkJCQlcCiAJcmV0dXJuIGNvdW50OwkJCQkJCVwKIH0KIApAQCAtNjIyLDYgKzYyNSwxMCBAQAogCUxJTkVfTU9ERV9QSU5DRkcsCiAJTElORV9NT0RFX1ZFUkIsCiAJTElORV9NT0RFX0hJTlQsCisJTElORV9NT0RFX1ZFTkRPUl9JRCwKKwlMSU5FX01PREVfU1VCU1lTVEVNX0lELAorCUxJTkVfTU9ERV9SRVZJU0lPTl9JRCwKKwlMSU5FX01PREVfQ0hJUF9OQU1FLAogCU5VTV9MSU5FX01PREVTLAogfTsKIApAQCAtNjUxLDUzICs2NTgsNzEgQEAKIH0KIAogLyogcGFyc2UgdGhlIGNvbnRlbnRzIGFmdGVyIHRoZSBvdGhlciBjb21tYW5kIHRhZ3MsIFtwaW5jZmddLCBbdmVyYl0sCi0gKiBbaGludF0gYW5kIFttb2RlbF0KKyAqIFt2ZW5kb3JfaWRdLCBbc3Vic3lzdGVtX2lkXSwgW3JldmlzaW9uX2lkXSwgW2NoaXBfbmFtZV0sIFtoaW50XSBhbmQgW21vZGVsXQogICoganVzdCBwYXNzIHRvIHRoZSBzeXNmcyBoZWxwZXIgKG9ubHkgd2hlbiBhbnkgY29kZWMgd2FzIHNwZWNpZmllZCkKICAqLwogc3RhdGljIHZvaWQgcGFyc2VfcGluY2ZnX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAogCQkJICAgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKIHsKLQlpZiAoISpjb2RlY3ApCi0JCXJldHVybjsKIAlwYXJzZV91c2VyX3Bpbl9jb25maWdzKCpjb2RlY3AsIGJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX3ZlcmJfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCiAJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKIHsKLQlpZiAoISpjb2RlY3ApCi0JCXJldHVybjsKIAlwYXJzZV9pbml0X3ZlcmJzKCpjb2RlY3AsIGJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX2hpbnRfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCiAJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKIHsKLQlpZiAoISpjb2RlY3ApCi0JCXJldHVybjsKIAlwYXJzZV9oaW50cygqY29kZWNwLCBidWYpOwogfQogCiBzdGF0aWMgdm9pZCBwYXJzZV9tb2RlbF9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKIHsKLQlpZiAoISpjb2RlY3ApCi0JCXJldHVybjsKIAlrZnJlZSgoKmNvZGVjcCktPm1vZGVsbmFtZSk7CiAJKCpjb2RlY3ApLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX2NoaXBfbmFtZV9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKKwkJCQkgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK3sKKwlrZnJlZSgoKmNvZGVjcCktPmNoaXBfbmFtZSk7CisJKCpjb2RlY3ApLT5jaGlwX25hbWUgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7Cit9CisKKyNkZWZpbmUgREVGSU5FX1BBUlNFX0lEX01PREUobmFtZSkgXAorc3RhdGljIHZvaWQgcGFyc2VfIyNuYW1lIyNfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsIFwKKwkJCQkgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkgXAoreyBcCisJdW5zaWduZWQgbG9uZyB2YWw7IFwKKwlpZiAoIXN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkpIFwKKwkJKCpjb2RlY3ApLT5uYW1lID0gdmFsOyBcCit9CisKK0RFRklORV9QQVJTRV9JRF9NT0RFKHZlbmRvcl9pZCk7CitERUZJTkVfUEFSU0VfSURfTU9ERShzdWJzeXN0ZW1faWQpOworREVGSU5FX1BBUlNFX0lEX01PREUocmV2aXNpb25faWQpOworCisKIHN0cnVjdCBoZGFfcGF0Y2hfaXRlbSB7CiAJY29uc3QgY2hhciAqdGFnOwogCXZvaWQgKCpwYXJzZXIpKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywgc3RydWN0IGhkYV9jb2RlYyAqKnJldGMpOworCWludCBuZWVkX2NvZGVjOwogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfcGF0Y2hfaXRlbSBwYXRjaF9pdGVtc1tOVU1fTElORV9NT0RFU10gPSB7Ci0JW0xJTkVfTU9ERV9DT0RFQ10gPSB7ICJbY29kZWNdIiwgcGFyc2VfY29kZWNfbW9kZSB9LAotCVtMSU5FX01PREVfTU9ERUxdID0geyAiW21vZGVsXSIsIHBhcnNlX21vZGVsX21vZGUgfSwKLQlbTElORV9NT0RFX1ZFUkJdID0geyAiW3ZlcmJdIiwgcGFyc2VfdmVyYl9tb2RlIH0sCi0JW0xJTkVfTU9ERV9QSU5DRkddID0geyAiW3BpbmNmZ10iLCBwYXJzZV9waW5jZmdfbW9kZSB9LAotCVtMSU5FX01PREVfSElOVF0gPSB7ICJbaGludF0iLCBwYXJzZV9oaW50X21vZGUgfSwKKwlbTElORV9NT0RFX0NPREVDXSA9IHsgIltjb2RlY10iLCBwYXJzZV9jb2RlY19tb2RlLCAwIH0sCisJW0xJTkVfTU9ERV9NT0RFTF0gPSB7ICJbbW9kZWxdIiwgcGFyc2VfbW9kZWxfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfVkVSQl0gPSB7ICJbdmVyYl0iLCBwYXJzZV92ZXJiX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX1BJTkNGR10gPSB7ICJbcGluY2ZnXSIsIHBhcnNlX3BpbmNmZ19tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9ISU5UXSA9IHsgIltoaW50XSIsIHBhcnNlX2hpbnRfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfVkVORE9SX0lEXSA9IHsgIlt2ZW5kb3JfaWRdIiwgcGFyc2VfdmVuZG9yX2lkX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX1NVQlNZU1RFTV9JRF0gPSB7ICJbc3Vic3lzdGVtX2lkXSIsIHBhcnNlX3N1YnN5c3RlbV9pZF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9SRVZJU0lPTl9JRF0gPSB7ICJbcmV2aXNpb25faWRdIiwgcGFyc2VfcmV2aXNpb25faWRfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfQ0hJUF9OQU1FXSA9IHsgIltjaGlwX25hbWVdIiwgcGFyc2VfY2hpcF9uYW1lX21vZGUsIDEgfSwKIH07CiAKIC8qIGNoZWNrIHRoZSBsaW5lIHN0YXJ0aW5nIHdpdGggJ1snIC0tIGNoYW5nZSB0aGUgcGFyc2VyIG1vZGUgYWNjb2RpbmdseSAqLwpAQCAtNzgwLDcgKzgwNSw4IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCpidWYgPT0gJ1snKQogCQkJbGluZV9tb2RlID0gcGFyc2VfbGluZV9tb2RlKGJ1ZiwgYnVzKTsKLQkJZWxzZSBpZiAocGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIpCisJCWVsc2UgaWYgKHBhdGNoX2l0ZW1zW2xpbmVfbW9kZV0ucGFyc2VyICYmCisJCQkgKGNvZGVjIHx8ICFwYXRjaF9pdGVtc1tsaW5lX21vZGVdLm5lZWRfY29kZWMpKQogCQkJcGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIoYnVmLCBidXMsICZjb2RlYyk7CiAJfQogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZmY2ZGE2Zi4uZDVjOTNhZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTI1LDYgKzEyNSw3IEBACiAJCQkgIntJbnRlbCwgSUNIOX0sIgogCQkJICJ7SW50ZWwsIElDSDEwfSwiCiAJCQkgIntJbnRlbCwgUENIfSwiCisJCQkgIntJbnRlbCwgQ1BUfSwiCiAJCQkgIntJbnRlbCwgU0NIfSwiCiAJCQkgIntBVEksIFNCNDUwfSwiCiAJCQkgIntBVEksIFNCNjAwfSwiCkBAIC0yNTksOCArMjYwLDYgQEAKICNkZWZpbmUgQVpYX01BWF9GUkFHCQkzMgogLyogbWF4IGJ1ZmZlciBzaXplIC0gbm8gaC93IGxpbWl0LCB5b3UgY2FuIGluY3JlYXNlIGFzIHlvdSBsaWtlICovCiAjZGVmaW5lIEFaWF9NQVhfQlVGX1NJWkUJKDEwMjQqMTAyNCoxMDI0KQotLyogbWF4IG51bWJlciBvZiBQQ00gZGV2aWNzIHBlciBjYXJkICovCi0jZGVmaW5lIEFaWF9NQVhfUENNUwkJOAogCiAvKiBSSVJCIGludCBtYXNrOiBvdmVycnVuWzJdLCByZXNwb25zZVswXSAqLwogI2RlZmluZSBSSVJCX0lOVF9SRVNQT05TRQkweDAxCkBAIC00MDgsNyArNDA3LDcgQEAKIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldjsKIAogCS8qIFBDTSAqLwotCXN0cnVjdCBzbmRfcGNtICpwY21bQVpYX01BWF9QQ01TXTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtW0hEQV9NQVhfUENNU107CiAKIAkvKiBIRCBjb2RlYyAqLwogCXVuc2lnbmVkIHNob3J0IGNvZGVjX21hc2s7CkBAIC00NDksNiArNDQ4LDcgQEAKIC8qIGRyaXZlciB0eXBlcyAqLwogZW51bSB7CiAJQVpYX0RSSVZFUl9JQ0gsCisJQVpYX0RSSVZFUl9QQ0gsCiAJQVpYX0RSSVZFUl9TQ0gsCiAJQVpYX0RSSVZFUl9BVEksCiAJQVpYX0RSSVZFUl9BVElIRE1JLApAQCAtNDYzLDYgKzQ2Myw3IEBACiAKIHN0YXRpYyBjaGFyICpkcml2ZXJfc2hvcnRfbmFtZXNbXSBfX2RldmluaXRkYXRhID0gewogCVtBWlhfRFJJVkVSX0lDSF0gPSAiSERBIEludGVsIiwKKwlbQVpYX0RSSVZFUl9QQ0hdID0gIkhEQSBJbnRlbCBQQ0giLAogCVtBWlhfRFJJVkVSX1NDSF0gPSAiSERBIEludGVsIE1JRCIsCiAJW0FaWF9EUklWRVJfQVRJXSA9ICJIREEgQVRJIFNCIiwKIAlbQVpYX0RSSVZFUl9BVElIRE1JXSA9ICJIREEgQVRJIEhETUkiLApAQCAtOTY4LDggKzk2OSw4IEBACiAJYXp4X2Rldi0+aW5zdWZmaWNpZW50ID0gMTsKIAogCS8qIGVuYWJsZSBTSUUgKi8KLQlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKLQkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgfCAoMSA8PCBhenhfZGV2LT5pbmRleCkpOworCWF6eF93cml0ZWwoY2hpcCwgSU5UQ1RMLAorCQkgICBhenhfcmVhZGwoY2hpcCwgSU5UQ1RMKSB8ICgxIDw8IGF6eF9kZXYtPmluZGV4KSk7CiAJLyogc2V0IERNQSBzdGFydCBhbmQgaW50ZXJydXB0IG1hc2sgKi8KIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgfAogCQkgICAgICBTRF9DVExfRE1BX1NUQVJUIHwgU0RfSU5UX01BU0spOwpAQCAtOTg4LDggKzk4OSw4IEBACiB7CiAJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBkaXNhYmxlIFNJRSAqLwotCWF6eF93cml0ZWIoY2hpcCwgSU5UQ1RMLAotCQkgICBhenhfcmVhZGIoY2hpcCwgSU5UQ1RMKSAmIH4oMSA8PCBhenhfZGV2LT5pbmRleCkpOworCWF6eF93cml0ZWwoY2hpcCwgSU5UQ1RMLAorCQkgICBhenhfcmVhZGwoY2hpcCwgSU5UQ1RMKSAmIH4oMSA8PCBhenhfZGV2LT5pbmRleCkpOwogfQogCiAKQEAgLTEwNjUsNiArMTA2Niw3IEBACiAJCQkJMHgwMSwgTlZJRElBX0hEQV9FTkFCTEVfQ09IQklUKTsKIAkJYnJlYWs7CiAJY2FzZSBBWlhfRFJJVkVSX1NDSDoKKwljYXNlIEFaWF9EUklWRVJfUENIOgogCQlwY2lfcmVhZF9jb25maWdfd29yZChjaGlwLT5wY2ksIElOVEVMX1NDSF9IREFfREVWQywgJnNub29wKTsKIAkJaWYgKHNub29wICYgSU5URUxfU0NIX0hEQV9ERVZDX05PU05PT1ApIHsKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIElOVEVMX1NDSF9IREFfREVWQywKQEAgLTEzNTAsNyArMTM1Miw3IEBACiAJaWYgKGNoaXAtPmluaXRpYWxpemVkKSB7CiAJCWludCBpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBBWlhfTUFYX1BDTVM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEhEQV9NQVhfUENNUzsgaSsrKQogCQkJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY21baV0pOwogCQlzbmRfaGRhX3N1c3BlbmQoY2hpcC0+YnVzKTsKIAkJc25kX2hkYV9yZXN1bWUoY2hpcC0+YnVzKTsKQEAgLTE0MTIsNyArMTQxNCw3IEBACiAJCQkJY2hpcC0+Y29kZWNfbWFzayAmPSB+KDEgPDwgYyk7CiAJCQkJLyogTW9yZSBiYWRseSwgYWNjZXNzaW5nIHRvIGEgbm9uLWV4aXN0aW5nCiAJCQkJICogY29kZWMgb2Z0ZW4gc2NyZXdzIHVwIHRoZSBjb250cm9sbGVyIGNoaXAsCi0JCQkJICogYW5kIGRpc3RydWJzIHRoZSBmdXJ0aGVyIGNvbW11bmljYXRpb25zLgorCQkJCSAqIGFuZCBkaXN0dXJicyB0aGUgZnVydGhlciBjb21tdW5pY2F0aW9ucy4KIAkJCQkgKiBUaHVzIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgcHJvYmluZywKIAkJCQkgKiBiZXR0ZXIgdG8gcmVzZXQgdGhlIGNvbnRyb2xsZXIgY2hpcCB0bwogCQkJCSAqIGdldCBiYWNrIHRvIHRoZSBzYW5pdHkgc3RhdGUuCkBAIC0xOTgzLDcgKzE5ODUsNyBAQAogCWludCBwY21fZGV2ID0gY3BjbS0+ZGV2aWNlOwogCWludCBzLCBlcnI7CiAKLQlpZiAocGNtX2RldiA+PSBBWlhfTUFYX1BDTVMpIHsKKwlpZiAocGNtX2RldiA+PSBIREFfTUFYX1BDTVMpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkludmFsaWQgUENNIGRldmljZSBudW1iZXIgJWRcbiIsCiAJCQkgICBwY21fZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMTM5LDcgKzIxNDEsNyBAQAogCiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCWF6eF9jbGVhcl9pcnFfcGVuZGluZyhjaGlwKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVpYX01BWF9QQ01TOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEhEQV9NQVhfUENNUzsgaSsrKQogCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbVtpXSk7CiAJaWYgKGNoaXAtPmluaXRpYWxpemVkKQogCQlzbmRfaGRhX3N1c3BlbmQoY2hpcC0+YnVzKTsKQEAgLTIyNjIsNiArMjI2NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFjYywgIkRlbGwgRDgyMCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFkZSwgIkRlbGwgUHJlY2lzaW9uIDM5MCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA2ZCwgIkhQIGR2MyIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDExMDYsIDB4MzI4OCwgIkFTVVMgTTJWLU1YIFNFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTNkLCAiQVNVUyBQNUFEMiIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MTAwMiwgIk1TSSBXaW5kIFUxMTUiLCBQT1NfRklYX0xQSUIpLAogCXt9CkBAIC0yNDE4LDYgKzI0MjEsNyBAQAogCWlmIChiZGxfcG9zX2FkaltkZXZdIDwgMCkgewogCQlzd2l0Y2ggKGNoaXAtPmRyaXZlcl90eXBlKSB7CiAJCWNhc2UgQVpYX0RSSVZFUl9JQ0g6CisJCWNhc2UgQVpYX0RSSVZFUl9QQ0g6CiAJCQliZGxfcG9zX2FkaltkZXZdID0gMTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMjY4Myw3ICsyNjg3LDcgQEAKIH0KIAogLyogUENJIElEcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF6eF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhenhfaWRzKSA9IHsKIAkvKiBJQ0ggNi4uMTAgKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDI2NjgpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LAogCXsgUENJX0RFVklDRSgweDgwODYsIDB4MjdkOCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSUNIIH0sCkBAIC0yNjk2LDYgKzI3MDAsOCBAQAogCXsgUENJX0RFVklDRSgweDgwODYsIDB4M2E2ZSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSUNIIH0sCiAJLyogUENIICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgzYjU2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9JQ0ggfSwKKwkvKiBDUFQgKi8KKwl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDFjMjApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB9LAogCS8qIFNDSCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4ODExYiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfU0NIIH0sCiAJLyogQVRJIFNCIDQ1MC82MDAgKi8KQEAgLTI3MjMsMzIgKzI3MjksMTAgQEAKIAkvKiBVTEkgTTU0NjEgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMGI5LCAweDU0NjEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1VMSSB9LAogCS8qIE5WSURJQSBNQ1AgKi8KLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDAyNmMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDM3MSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwM2U0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDAzZjApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDQ0YSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNDRiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1ZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTkwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDdmYyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwN2ZkKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJlMiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmUzKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lEKSwKKwkgIC5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0hEX0FVRElPIDw8IDgsCisJICAuY2xhc3NfbWFzayA9IDB4ZmZmZmZmLAorCSAgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAkvKiBUZXJhZGljaSAqLwogCXsgUENJX0RFVklDRSgweDY1NDksIDB4MTIwMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfVEVSQSB9LAogCS8qIENyZWF0aXZlIFgtRmkgKENBMDExMC1JQkcpICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCA1Nzc4YWU4Li43Y2VlMzY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICAqIGluIHNuZF9oZGFfY3RsX2FkZCgpLCBzbyB0aGF0IHRoaXMgdmFsdWUgd29uJ3QgYXBwZWFyIGluIHRoZSBvdXRzaWRlLgogICovCiAjZGVmaW5lIEhEQV9TVUJERVZfTklEX0ZMQUcJKDFVIDw8IDMxKQorI2RlZmluZSBIREFfU1VCREVWX0FNUF9GTEFHCSgxVSA8PCAzMCkKIAogLyoKICAqIGZvciBtaXhlciBjb250cm9scwpAQCAtNDIsNyArNDMsNyBAQAogLyogbW9ubyB2b2x1bWUgd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfVk9MVU1FX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCAgXAotCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAobmlkKSwgXAorCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsIFwKIAkgIC5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAogCSAgCSAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfCBcCiAJICAJICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssIFwKQEAgLTYzLDcgKzY0LDcgQEAKIC8qIG1vbm8gbXV0ZSBzd2l0Y2ggd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfTVVURV9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgXAotCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAobmlkKSwgXAorCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsIFwKIAkgIC5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sIFwKIAkgIC5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LCBcCiAJICAucHV0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dCwgXApAQCAtODEsNyArODIsNyBAQAogLyogc3BlY2lhbCBiZWVwIG1vbm8gbXV0ZSBzd2l0Y2ggd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfTVVURV9CRUVQX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCBcCi0JICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IChuaWQpLCBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywgXAogCSAgLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywgXAogCSAgLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsIFwKIAkgIC5wdXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0X2JlZXAsIFwKQEAgLTQ2NCwxMyArNDY1LDIwIEBACiB1MzIgc25kX2hkYV9waW5fc2Vuc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOwogaW50IHNuZF9oZGFfamFja19kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOwogCisvKiBmbGFncyBmb3IgaGRhX25pZF9pdGVtICovCisjZGVmaW5lIEhEQV9OSURfSVRFTV9BTVAJKDE8PDApCisKIHN0cnVjdCBoZGFfbmlkX2l0ZW0gewogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJdW5zaWduZWQgaW50IGluZGV4OwogCWhkYV9uaWRfdCBuaWQ7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3M7CiB9OwogCiBpbnQgc25kX2hkYV9jdGxfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCk7CitpbnQgc25kX2hkYV9hZGRfbmlkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBoZGFfbmlkX3QgbmlkKTsKIHZvaWQgc25kX2hkYV9jdGxzX2NsZWFyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwppbmRleCBjOWFmYzA0Li5mOTdkMzVkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCkBAIC02MSwxOCArNjEsMjkgQEAKIAkJcmV0dXJuICJVTktOT1dOIFdpZGdldCI7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X25pZF9taXhlcnMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3N0YXRpYyB2b2lkIHByaW50X25pZF9hcnJheShzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCisJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgc3RydWN0IHNuZF9hcnJheSAqYXJyYXkpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGhkYV9uaWRfaXRlbSAqaXRlbXMgPSBjb2RlYy0+bWl4ZXJzLmxpc3Q7CisJc3RydWN0IGhkYV9uaWRfaXRlbSAqaXRlbXMgPSBhcnJheS0+bGlzdCwgKml0ZW07CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm1peGVycy51c2VkOyBpKyspIHsKLQkJaWYgKGl0ZW1zW2ldLm5pZCA9PSBuaWQpIHsKLQkJCWtjdGwgPSBpdGVtc1tpXS5rY3RsOworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+dXNlZDsgaSsrKSB7CisJCWl0ZW0gPSAmaXRlbXNbaV07CisJCWlmIChpdGVtLT5uaWQgPT0gbmlkKSB7CisJCQlrY3RsID0gaXRlbS0+a2N0bDsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKIAkJCSAgIiAgQ29udHJvbDogbmFtZT1cIiVzXCIsIGluZGV4PSVpLCBkZXZpY2U9JWlcbiIsCi0JCQkgIGtjdGwtPmlkLm5hbWUsIGtjdGwtPmlkLmluZGV4LCBrY3RsLT5pZC5kZXZpY2UpOworCQkJICBrY3RsLT5pZC5uYW1lLCBrY3RsLT5pZC5pbmRleCArIGl0ZW0tPmluZGV4LAorCQkJICBrY3RsLT5pZC5kZXZpY2UpOworCQkJaWYgKGl0ZW0tPmZsYWdzICYgSERBX05JRF9JVEVNX0FNUCkKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsCisJCQkJICAiICAgIENvbnRyb2xBbXA6IGNocz0lbHUsIGRpcj0lcywgIgorCQkJCSAgImlkeD0lbHUsIG9mcz0lbHVcbiIsCisJCQkJICBnZXRfYW1wX2NoYW5uZWxzKGtjdGwpLAorCQkJCSAgZ2V0X2FtcF9kaXJlY3Rpb24oa2N0bCkgPyAiT3V0IiA6ICJJbiIsCisJCQkJICBnZXRfYW1wX2luZGV4KGtjdGwpLAorCQkJCSAgZ2V0X2FtcF9vZmZzZXQoa2N0bCkpOwogCQl9CiAJfQogfQpAQCAtNTI4LDcgKzUzOSw4IEBACiAJCQkgICAgKGRhdGEgJiAoMTw8aSkpID8gMSA6IDAsCiAJCQkgICAgKHVuc29sICYgKDE8PGkpKSA/IDEgOiAwKTsKIAkvKiBGSVhNRTogYWRkIEdQTyBhbmQgR1BJIHBpbiBpbmZvcm1hdGlvbiAqLwotCXByaW50X25pZF9taXhlcnMoYnVmZmVyLCBjb2RlYywgbmlkKTsKKwlwcmludF9uaWRfYXJyYXkoYnVmZmVyLCBjb2RlYywgbmlkLCAmY29kZWMtPm1peGVycyk7CisJcHJpbnRfbmlkX2FycmF5KGJ1ZmZlciwgY29kZWMsIG5pZCwgJmNvZGVjLT5uaWRzKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfY29kZWNfaW5mbyhzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LApAQCAtNjA4LDcgKzYyMCw4IEBACiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgQ1AiKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAotCQlwcmludF9uaWRfbWl4ZXJzKGJ1ZmZlciwgY29kZWMsIG5pZCk7CisJCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bWl4ZXJzKTsKKwkJcHJpbnRfbmlkX2FycmF5KGJ1ZmZlciwgY29kZWMsIG5pZCwgJmNvZGVjLT5uaWRzKTsKIAkJcHJpbnRfbmlkX3BjbXMoYnVmZmVyLCBjb2RlYywgbmlkKTsKIAogCQkvKiB2b2x1bWUga25vYiBpcyBhIHNwZWNpYWwgd2lkZ2V0IHRoYXQgYWx3YXlzIGhhdmUgY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggNjlhOTQxYy4uZTZkMWJkZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMTc0LDYgKzE3NCw3IEBACiBzdGF0aWMgaW50IGFkMTk4eF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKQEAgLTIwOCw5ICsyMDksNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQkJZ2V0X2FtcF9uaWRfKHNwZWMtPmJlZXBfYW1wKSwKLQkJCQkJCWtjdGwpOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBrY3RsKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTIzOSw2ICsyMzgsMjcgQEAKIAl9CiAKIAlhZDE5OHhfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBzcGVjLT5jYXBzcmNfbmlkc1tpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBhc3NpZ24gSUVDOTU4IGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLAorCQkJU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLE5PTkUpICJTb3VyY2UiKTsKKwlpZiAoa2N0bCkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsCisJCQkJICAgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMSw2ICs0NDEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFkMTk4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7Cit9CisKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDM0LDYgKzQ1OSw0NiBAQAogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5rY3Rscyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZnJvbnQsCisJCQkJaGRhX25pZF90IGhwKQoreworCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGZyb250LCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaHAsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKK30KKworc3RhdGljIHZvaWQgYWQxOTh4X3Bvd2VyX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogV2UgY3VycmVudGx5IG9ubHkgaGFuZGxlIGZyb250LCBIUCAqLworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMWQ0MTg4MjoKKwljYXNlIDB4MTFkNDg4MmE6CisJY2FzZSAweDExZDQxODg0OgorCWNhc2UgMHgxMWQ0MTk4NDoKKwljYXNlIDB4MTFkNDE4ODM6CisJY2FzZSAweDExZDQxODRhOgorCWNhc2UgMHgxMWQ0MTk0YToKKwljYXNlIDB4MTFkNDE5NGI6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDEyLCAweDExKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTgxOgorCWNhc2UgMHgxMWQ0MTk4MzoKKwkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MDUsIDB4MDYpOworCQlicmVhazsKKwljYXNlIDB4MTFkNDE5ODY6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDFiLCAweDFhKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTg4OgorCWNhc2UgMHgxMWQ0MTk4YjoKKwljYXNlIDB4MTFkNDk4OWE6CisJY2FzZSAweDExZDQ5ODliOgorCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgyOSwgMHgyMik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQgYWQxOTh4X2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDEsMTEgKzUwNiwyOSBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuOwogCisJYWQxOTh4X3NodXR1cChjb2RlYyk7CiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwogCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCitzdGF0aWMgaW50IGFkMTk4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJYWQxOTh4X3NodXR1cChjb2RlYyk7CisJYWQxOTh4X3Bvd2VyX2VhcGQoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTk4eF9yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CisJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhZDE5OHhfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGFkMTk4eF9idWlsZF9jb250cm9scywKIAkuYnVpbGRfcGNtcyA9IGFkMTk4eF9idWlsZF9wY21zLApAQCAtNDU0LDYgKzUzNywxMSBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAkuY2hlY2tfcG93ZXJfc3RhdHVzID0gYWQxOTh4X2NoZWNrX3Bvd2VyX3N0YXR1cywKICNlbmRpZgorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCisJLnN1c3BlbmQgPSBhZDE5OHhfc3VzcGVuZCwKKwkucmVzdW1lID0gYWQxOTh4X3Jlc3VtZSwKKyNlbmRpZgorCS5yZWJvb3Rfbm90aWZ5ID0gYWQxOTh4X3NodXR1cCwKIH07CiAKIApAQCAtNzAxLDYgKzc4OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiRXh0ZXJuYWwgQW1wbGlmaWVyIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDFiLAogCQkuaW5mbyA9IGFkMTk4eF9lYXBkX2luZm8sCiAJCS5nZXQgPSBhZDE5OHhfZWFwZF9nZXQsCiAJCS5wdXQgPSBhZDE5OHhfZWFwZF9wdXQsCkBAIC04MDgsNiArODk3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWQxOTg2YV9ocF9tYXN0ZXJfc3dfcHV0LApAQCAtMTAwOCw3ICsxMDk4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWNiLCAiQVNVUyBNMk4iLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODIzNCwgIkFTVVMgTTJOIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiODQsICJBU1VTIEE4Ti1WTSIsIEFEMTk4NkFfM1NUQUNLKSwKLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIFNhdGVsbGl0ZSBMNDAtMTBRIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGIwM2MsICJTYW1zdW5nIFI1NSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDFlLCAiRlNDIFYyMDYwIiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjQsICJTYW1zdW5nIFA1MCIsIEFEMTk4NkFfU0FNU1VOR19QNTApLApAQCAtMTYxMiw2ICsxNzAyLDcgQEAKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTgxX2hwX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDA1LAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAogCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LApAQCAtMjEzNiw2ICsyMjI3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJFeHRlcm5hbCBBbXBsaWZpZXIiLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTIsCiAJCS5pbmZvID0gYWQxOTh4X2VhcGRfaW5mbywKIAkJLmdldCA9IGFkMTk4eF9lYXBkX2dldCwKIAkJLnB1dCA9IGFkMTk4eF9lYXBkX3B1dCwKQEAgLTIyNTcsNiArMjM0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSUVDOTU4IFBsYXliYWNrIFNvdXJjZSIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxYiwKIAkJLmluZm8gPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2luZm8sCiAJCS5nZXQgPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2dldCwKIAkJLnB1dCA9IGFkMTk4OF9zcGRpZl9wbGF5YmFja19zb3VyY2VfcHV0LApAQCAtMjM3Miw2ICsyNDY1LDEyIEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzW10gPSB7CisJLyogdW5tdXRlIFNQRElGIGlucHV0IHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7IH0KK307CisKIC8qIEFEMTk4OSBoYXMgbm8gQURDIC0+IFNQRElGIHJvdXRlICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OV9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CiAJLyogU1BESUYtMSBvdXQgcGluICovCkBAIC0yNTg5LDcgKzI2ODgsNyBAQAogCWlmICghIGtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTA3LDggKzMyMDYsMTEgQEAKIAkJCQlhZDE5ODhfc3BkaWZfaW5pdF92ZXJiczsKIAkJfQogCX0KLQlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkKKwlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkgewogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGFkMTk4OF9zcGRpZl9pbl9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnMrK10gPQorCQkJYWQxOTg4X3NwZGlmX2luX2luaXRfdmVyYnM7CisJfQogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFkMTk4eF9wYXRjaF9vcHM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKQEAgLTM3NDcsNiArMzg0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQsCkBAIC0zNzc1LDYgKzM4NzgsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LApAQCAtNDExNiw2ICs0MjIwLDcgQEAKIC8qCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwqLwogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCBmZTA0MjNjLi43ZGU3ODJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTUwMSw3ICs1MDEsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFN3aXRjaCIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRkX3ZvbHVtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqbmFtZSwKQEAgLTUxNCw3ICs1MTUsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFZvbHVtZSIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpeF92b2x1bWVfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRhYykKQEAgLTc1MSw2ICs3NTMsNyBAQAogCXNwZWMtPmNhcHR1cmVfYmluZFsxXSA9IG1ha2VfYmluZF9jYXB0dXJlKGNvZGVjLCAmc25kX2hkYV9iaW5kX3ZvbCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpbnQgbjsKIAkJaWYgKCFzcGVjLT5jYXB0dXJlX2JpbmRbaV0pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmY3NfY2FwdHVyZV9jdGxzW2ldLCBjb2RlYyk7CkBAIC03NjAsNiArNzYzLDEzIEBACiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKKwkJZm9yIChuID0gMDsgbiA8IEFVVE9fUElOX0xBU1Q7IG4rKykgeworCQkJaWYgKCFzcGVjLT5hZGNfbmlkW25dKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLCBzcGVjLT5hZGNfbmlkW2ldKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAJCiAJaWYgKHNwZWMtPm51bV9pbnB1dHMgPiAxICYmICFzcGVjLT5taWNfZGV0ZWN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCBhNDVjMTE2Li5mZjYwOTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTMxNSw3ICszMTUsOCBAQAogc3RhdGljIGludCBjbWk5ODgwX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlpbnQgaSwgZXJyOwogCiAJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIGNtaTk4ODBfYmFzaWNfbWl4ZXIpOwogCWlmIChlcnIgPCAwKQpAQCAtMzQwLDYgKzM0MSwxNCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJLyogYXNzaWduIENhcHR1cmUgU291cmNlIGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiQ2FwdHVyZSBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+YWRjX25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYzU3OGMyOC4uMTk0YTI4YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIC8qIENvbmV4YW50IDUwNTEgc3BlY2lmaWMgKi8KIAotI2RlZmluZSBDWFQ1MDUxX1NQRElGX09VVAkweDFDCisjZGVmaW5lIENYVDUwNTFfU1BESUZfT1VUCTB4MTIKICNkZWZpbmUgQ1hUNTA1MV9QT1JUQl9FVkVOVAkweDM4CiAjZGVmaW5lIENYVDUwNTFfUE9SVENfRVZFTlQJMHgzOQogCisjZGVmaW5lIEFVVE9fTUlDX1BPUlRCCQkoMSA8PCAxKQorI2RlZmluZSBBVVRPX01JQ19QT1JUQwkJKDEgPDwgMikKIAogc3RydWN0IGNvbmV4YW50X2phY2sgewogCkBAIC03NCw3ICs3Niw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgaHBfcHJlc2VudDsKLQl1bnNpZ25lZCBpbnQgbm9fYXV0b19taWM7CisJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC0xMTEsOCArMTEzLDIzIEBACiAKIAl1bnNpZ25lZCBpbnQgZGVsbF9hdXRvbXV0ZTsKIAl1bnNpZ25lZCBpbnQgcG9ydF9kX21vZGU7Ci0JdW5zaWduZWQgY2hhciBleHRfbWljX2JpYXM7Ci0JdW5zaWduZWQgaW50IGRlbGxfdm9zdHJvOworCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzoxOworCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CisKKwl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OworCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CisJdm9pZCAoKmNhcHR1cmVfcHJlcGFyZSkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCXZvaWQgKCpjYXB0dXJlX2NsZWFudXApKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKworCS8qIE9MUEMgWE8tMS41IHN1cHBvcnRzIERDIGlucHV0IG1vZGUgKGUuZy4gZm9yIHVzZSB3aXRoIGFuYWxvZyBzZW5zb3JzKQorCSAqIHRocm91Z2ggdGhlIG1pY3JvcGhvbmUgamFjay4KKwkgKiBXaGVuIHRoZSB1c2VyIGVuYWJsZXMgdGhpcyB0aHJvdWdoIGEgbWl4ZXIgc3dpdGNoLCBib3RoIGludGVybmFsIGFuZAorCSAqIGV4dGVybmFsIG1pY3JvcGhvbmVzIGFyZSBkaXNhYmxlZC4gR2FpbiBpcyBmaXhlZCBhdCAwZEIuIEluIHRoaXMgbW9kZSwKKwkgKiB3ZSBhbHNvIGFsbG93IHRoZSBiaWFzIHRvIGJlIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIHNlcGFyYXRlIG1peGVyCisJICogY29udHJvbC4gKi8KKwl1bnNpZ25lZCBpbnQgZGNfZW5hYmxlOworCXVuc2lnbmVkIGludCBkY19pbnB1dF9iaWFzOyAvKiBvZmZzZXQgaW50byBjeHQ1MDY2X29scGNfZGNfYmlhcyAqLworCXVuc2lnbmVkIGludCBtaWNfYm9vc3Q7IC8qIG9mZnNldCBpbnRvIGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCAqLwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtMTg1LDYgKzIwMiw4IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9wcmVwYXJlKQorCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5hZGNfbmlkc1tzdWJzdHJlYW0tPm51bWJlcl0sCiAJCQkJICAgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKIAlyZXR1cm4gMDsKQEAgLTE5Niw2ICsyMTUsOCBAQAogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdKTsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9jbGVhbnVwKQorCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAoY29kZWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTg1LDYgKzE2MDYsMTEgQEAKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwaW5jdGw7CisJLyogaGVhZHBob25lIHBpbiAqLworCXBpbmN0bCA9IChzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9IUCA6IDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbmN0bCk7CisJLyogc3BlYWtlciBwaW4gKi8KIAlwaW5jdGwgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gUElOX09VVCA6IDA7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJICAgIHBpbmN0bCk7CkBAIC0xNjA4LDcgKzE2MzQsNyBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQikpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNyk7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwKQEAgLTE2MjMsNyArMTY0OSw3IEBACiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJaGRhX25pZF90IG5ld19hZGM7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQykpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxOCk7CiAJaWYgKHByZXNlbnQpCkBAIC0xNjY5LDEzICsxNjk1LDcgQEAKIAljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfbWl4ZXJzW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNjg1LDcgKzE3MDUsMTYgQEAKIAkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAogCX0sCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCXt9CiB9OwogCkBAIC0xNjk0LDMyICsxNzIzLDI2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCi0KIAl7fQogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2Y3MDBfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3Rvc2hpYmFfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKIAl7fQogfTsKIApAQCAtMTc0OCw4ICsxNzcxLDYgQEAKIAkvKiBFQVBEICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovIAogCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNzc1LDcgKzE3OTYsNiBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTgwNywxNyArMTgyNyw2MCBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9mNzAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHZvaWQgY3h0NTA1MV9pbml0X21pY19wb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSB1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCSAgICBBQ19VU1JTUF9FTiB8IGV2ZW50KTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCisJY29uZXhhbnRfYWRkX2phY2soY29kZWMsIG5pZCwgU05EX0pBQ0tfTUlDUk9QSE9ORSk7CisJY29uZXhhbnRfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisjZW5kaWYKK30KKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWNvbmV4YW50X2luaXRfamFja3MoY29kZWMpOworCisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEIpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxNywgQ1hUNTA1MV9QT1JUQl9FVkVOVCk7CisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEMpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxOCwgQ1hUNTA1MV9QT1JUQ19FVkVOVCk7CisKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDUxX2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJY3h0NTA1MV9wb3J0Yl9hdXRvbWljKGNvZGVjKTsKQEAgLTE4MzIsNiArMTg5NSw4IEBACiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLwogCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KIAlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KKwlDWFQ1MDUxX0Y3MDAsICAgICAgIC8qIEhQIENvbXBhcSBQcmVzYXJpbyBGNzAwICovCisJQ1hUNTA1MV9UT1NISUJBLAkvKiBUb3NoaWJhIE0zMDAgJiBjbyAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCkBAIC0xODQwLDExICsxOTA1LDE1IEBACiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCiAJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAogCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCisJW0NYVDUwNTFfRjcwMF0gICAgICAgICAgPSAiaHAtNzAwIiwKKwlbQ1hUNTA1MV9UT1NISUJBXQk9ICJ0b3NoaWJhIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzM2IiwgQ1hUNTA1MV9IUF9EVjY3MzYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MGIsICJDb21wYXEgUHJlc2FyaW8gQ1E2MCIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZWEsICJDb21wYXEgUHJlc2FyaW8gRjcwMCIsIENYVDUwNTFfRjcwMCksCisJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgTTMweCIsIENYVDUwNTFfVE9TSElCQSksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKQEAgLTE4NzIsOCArMTk0MSw5IEBACiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDWFQ1MDUxX1NQRElGX09VVDsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOyAvKiBub3QgMjsgdmlhIGF1dG8tbWljIHN3aXRjaCAqLwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA1MV9hZGNfbmlkczsKLQlzcGVjLT5udW1fbWl4ZXJzID0gMTsKLQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX21peGVyczsKKwlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzOworCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzOwogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKQEAgLTE4ODcsNiArMTk1Nyw3IEBACiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDUxX21vZGVscywKIAkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKKwlzcGVjLT5hdXRvX21pYyA9IEFVVE9fTUlDX1BPUlRCIHwgQVVUT19NSUNfUE9SVEM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfbWl4ZXJzOwpAQCAtMTg5NCwxMSArMTk2NSwyMCBAQAogCWNhc2UgQ1hUNTA1MV9IUF9EVjY3MzY6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnM7Ci0JCXNwZWMtPm5vX2F1dG9fbWljID0gMTsKKwkJc3BlYy0+YXV0b19taWMgPSAwOwogCQlicmVhazsKIAljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9GNzAwOgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9mNzAwX2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfZjcwMF9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX1RPU0hJQkE6CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfdG9zaGliYV9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gQVVUT19NSUNfUE9SVEI7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk2Niw1MyArMjA0Niw5NyBAQAogCXJldHVybiAxOwogfQogCi0vKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X29scGNfZGNfYmlhcyA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIk9mZiIsIFBJTl9JTiB9LAorCQl7ICI1MCUiLCBQSU5fVlJFRjUwIH0sCisJCXsgIjgwJSIsIFBJTl9WUkVGODAgfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7Ci0JCS8qIGVuYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLwotCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAorCS8qIEV2ZW4gdGhvdWdoIHBvcnQgRiBpcyB0aGUgREMgaW5wdXQsIHRoZSBiaWFzIGlzIGNvbnRyb2xsZWQgb24gcG9ydCBCLgorCSAqIHdlIGFsc28gbGVhdmUgdGhhdCBwb3J0IGFzIGFuIGFjdGl2ZSBpbnB1dCAoYnV0IHVuc2VsZWN0ZWQpIGluIERDIG1vZGUKKwkgKiBqdXN0IGluIGNhc2UgdGhhdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgYmlhcyBzZXR0aW5nIHRha2UgZWZmZWN0LiAqLworCXJldHVybiBzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDFhLCAwLAorCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCWN4dDUwNjZfb2xwY19kY19iaWFzLml0ZW1zW3NwZWMtPmRjX2lucHV0X2JpYXNdLmluZGV4KTsKK30KIAotCQkvKiBzd2l0Y2ggdG8gZXh0ZXJuYWwgbWljIGlucHV0ICovCi0JCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisvKiBPTFBDIGRlZmVycyBtaWMgd2lkZ2V0IGNvbnRyb2wgdW50aWwgd2hlbiBjYXB0dXJlIGlzIHN0YXJ0ZWQgYmVjYXVzZSB0aGUKKyAqIG1pY3JvcGhvbmUgTEVEIGNvbWVzIG9uIGFzIHNvb24gYXMgdGhlc2Ugc2V0dGluZ3MgYXJlIHB1dCBpbiBwbGFjZS4gaWYgd2UKKyAqIGRpZCB0aGlzIGJlZm9yZSByZWNvcmRpbmcsIGl0IHdvdWxkIGdpdmUgdGhlIGZhbHNlIGluZGljYXRpb24gdGhhdCByZWNvcmRpbmcKKyAqIGlzIGhhcHBlbmluZyB3aGVuIGl0IGlzIG5vdC4gKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY19zZWxlY3RfbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKCFzcGVjLT5yZWNvcmRpbmcpCisJCXJldHVybjsKIAotCQkvKiBkaXNhYmxlIGludGVybmFsIG1pYywgcG9ydCBDICovCi0JCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotCQl7fQotCX07Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0gewotCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KLQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJaWYgKHNwZWMtPmRjX2VuYWJsZSkgeworCQkvKiBpbiBEQyBtb2RlIHdlIGlnbm9yZSBwcmVzZW5jZSBkZXRlY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBqYWNrCisJCSAqIHRocm91Z2ggb3VyIHNwZWNpYWwgREMgcG9ydCAqLworCQljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZW5hYmxlX2RjX21vZGVbXSA9IHsKKwkJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKLQkJLyogc3dpdGNoIHRvIGludGVybmFsIG1pYyBpbnB1dCAqLwotCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDF9LAorCQkJLyogZW5hYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQkJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkJCXt9LAorCQl9OwogCi0JCS8qIGRpc2FibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCi0JCXt9Ci0JfTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCQkvKiBwb3J0IEIgaW5wdXQgZGlzYWJsZWQgKGFuZCBiaWFzIHNldCkgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNhbGwgKi8KKwkJY3h0NTA2Nl9zZXRfb2xwY19kY19iaWFzKGNvZGVjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGRpc2FibGUgREMgKHBvcnQgRikgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCisJLyogZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCXNwZWMtPmV4dF9taWNfcHJlc2VudCA/IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVMgOiAwKTsKKworCS8qIGludGVybmFsIG1pYywgcG9ydCBDICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQlzcGVjLT5leHRfbWljX3ByZXNlbnQgPyAwIDogUElOX1ZSRUY4MCk7Cit9CisKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFhKTsKLQlpZiAocHJlc2VudCkgeworCWlmIChzcGVjLT5kY19lbmFibGUpIC8qIGRvbid0IGRvIHByZXNlbmNlIGRldGVjdGlvbiBpbiBEQyBtb2RlICovCisJCXJldHVybjsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWEsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwlpZiAocHJlc2VudCkKIAkJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX3ByZXNlbnQpOwotCX0gZWxzZSB7CisJZWxzZQogCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7Ci0JfQorCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCXByZXNlbnQgPyAwIDogMSk7CisJc3BlYy0+ZXh0X21pY19wcmVzZW50ID0gISFwcmVzZW50OworCisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOwogfQogCiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfdm9zdHJvX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAogCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKIAkJLyogZW5hYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCiAJCS8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaW5wdXQgKi8KIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKQEAgLTIwNDQsNiArMjE2OCwzNCBAQAogCX0KIH0KIAorLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKKwkJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDIzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCQl7fQorCX07CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0geworCQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDJ9LAorCQl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30KKwl9OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCWlmIChwcmVzZW50KSB7CisJCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIGRldGVjdGVkXG4iKTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19wcmVzZW50KTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOworCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7CisJfQorfQorCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTIwNjMsMTUgKzIyMTUsMTggQEAKIH0KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CisJCS8qIGlnbm9yZSBtaWMgZXZlbnRzIGluIERDIG1vZGU7IHdlJ3JlIGFsd2F5cyB1c2luZyB0aGUgamFjayAqLworCQlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjA5MCw2ICsyMjQ1LDIwIEBACiAJfQogfQogCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc25kX3ByaW50ZGQoIkNYVDUwNjZfaWRlYXBhZDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKKwkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgorCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CkBAIC0yMTAxLDYgKzIyNzAsMjMgQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJCWN4dDUwNjZfYW5hbG9nX21pY19ib29zdC5pdGVtc1tzcGVjLT5taWNfYm9vc3RdLmluZGV4KTsKKwlpZiAoc3BlYy0+aWRlYXBhZCkgeworCQkvKiBhZGp1c3QgdGhlIGludGVybmFsIG1pYyBhcyB3ZWxsLi4uaXQgaXMgbm90IHRocm91Z2ggMHgxNyAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDIzLCAwLAorCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX0lOUFVUIHwKKwkJCQljeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QuCisJCQkJCWl0ZW1zW3NwZWMtPm1pY19ib29zdF0uaW5kZXgpOworCX0KK30KKwogc3RhdGljIGludCBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpAQCAtMjExMSwxNSArMjI5Nyw4IEBACiAJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JaW50IHZhbDsKLQloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwotCWludCBpbm91dCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4MTAwKSA/Ci0JCUFDX0FNUF9HRVRfSU5QVVQgOiBBQ19BTVBfR0VUX09VVFBVVDsKLQotCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQlBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBpbm91dCk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gdmFsICYgQUNfQU1QX0dBSU47CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+bWljX2Jvb3N0OwogCXJldHVybiAwOwogfQogCkBAIC0yMTI3LDI2ICsyMzA2LDEzMiBAQAogCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OwogCXVuc2lnbmVkIGludCBpZHg7Ci0JaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKLQlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPwotCQlBQ19BTVBfU0VUX0lOUFVUIDogQUNfQU1QX1NFVF9PVVRQVVQ7Ci0KLQlpZiAoIWltdXgtPm51bV9pdGVtcykKLQkJcmV0dXJuIDA7CiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKIAkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKIAotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IGlub3V0IHwKLQkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOworCXNwZWMtPm1pY19ib29zdCA9IGlkeDsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9lbmFibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGVuYWJsZV9kY19tb2RlW10gPSB7CisJCS8qIGRpc2FibGUgZ2FpbiAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJCS8qIHN3aXRjaCB0byBEQyBpbnB1dCAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDN9LAorCQl7fQorCX07CisKKwkvKiBjb25maWd1cmUgYXMgaW5wdXQgc291cmNlICovCisJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCWN4dDUwNjZfb2xwY19zZWxlY3RfbWljKGNvZGVjKTsgLyogYWxzbyBzZXRzIGNvbmZpZ3VyZWQgYmlhcyAqLworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2Rpc2FibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogcmVjb25maWd1cmUgaW5wdXQgc291cmNlICovCisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwkvKiBhdXRvbWljIGFsc28gc2VsZWN0cyB0aGUgcmlnaHQgbWljIGlmIHdlJ3JlIHJlY29yZGluZyAqLworCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gc3BlYy0+ZGNfZW5hYmxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGRjX2VuYWJsZSA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoZGNfZW5hYmxlID09IHNwZWMtPmRjX2VuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcGVjLT5kY19lbmFibGUgPSBkY19lbmFibGU7CisJaWYgKGRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOworCWVsc2UKKwkJY3h0NTA2Nl9kaXNhYmxlX2RjKGNvZGVjKTsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlyZXR1cm4gc25kX2hkYV9pbnB1dF9tdXhfaW5mbygmY3h0NTA2Nl9vbHBjX2RjX2JpYXMsIHVpbmZvKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBzcGVjLT5kY19pbnB1dF9iaWFzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQorCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOworCisJc3BlYy0+ZGNfaW5wdXRfYmlhcyA9IGlkeDsKKwlpZiAoc3BlYy0+ZGNfZW5hYmxlKQorCQljeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoY29kZWMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJLyogbWFyayBhcyByZWNvcmRpbmcgYW5kIGNvbmZpZ3VyZSB0aGUgbWljcm9waG9uZSB3aWRnZXQgc28gdGhhdCB0aGUKKwkgKiByZWNvcmRpbmcgTEVEIGNvbWVzIG9uLiAqLworCXNwZWMtPnJlY29yZGluZyA9IDE7CisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGRpc2FibGVfbWljc1tdID0geworCQkvKiBkaXNhYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKworCQkvKiBkaXNhYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30sCisJfTsKKworCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGRpc2FibGVfbWljcyk7CisJc3BlYy0+cmVjb3JkaW5nID0gMDsKK30KKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtMjE4Nyw2ICsyNDcyLDcgQEAKIAkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAogCQkJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKIAkJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCwKIAkJLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9wdXQsCkBAIC0yMTk4LDYgKzI0ODQsMjQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfb2xwY19kY1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkRDIE1vZGUgRW5hYmxlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IGN4dDUwNjZfb2xwY19kY19nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X29scGNfZGNfcHV0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiREMgSW5wdXQgQmlhcyBFbnVtIiwKKwkJLmluZm8gPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2luZm8sCisJCS5nZXQgPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldCwKKwkJLnB1dCA9IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0LAorCX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0yMjEwLDExICsyNTE0LDEwIEBACiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJFeHQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5uYW1lID0gIkFuYWxvZyBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKIAkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAogCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTcsCiAJfSwKIAogCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCkBAIC0yMjk2LDEwICsyNTk5LDEwIEBACiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwogCiAJLyogUG9ydCBCOiBleHRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBU30sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEM6IGludGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKIAogCS8qIFBvcnQgRDogdW51c2VkICovCiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCkBAIC0yMzA4LDcgKzI2MTEsNyBAQAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLwogCi0JLyogUG9ydCBGOiB1bnVzZWQgKi8KKwkvKiBQb3J0IEY6IGV4dGVybmFsIERDIGlucHV0IHRocm91Z2ggbWljcm9waG9uZSBwb3J0ICovCiAJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEc6IGludGVybmFsIHNwZWFrZXJzICovCkBAIC0yNDEyLDYgKzI3MTUsNTYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkW10gPSB7CisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEMgKi8KKwl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEYgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEUgKi8KKworCS8qIFNwZWFrZXJzICAqLworCXsweDFmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIEhQLCBBbXAgICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogTm9kZSAxNCBjb25uZWN0aW9uczogMHgxNyAweDE4IDB4MjMgMHgyNCAweDI3ICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDUwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpIHwgMHg1MH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMn0sCS8qIGRlZmF1bHQgdG8gaW50ZXJuYWwgbWljICovCisKKwkvKiBBdWRpbyBpbnB1dCBzZWxlY3RvciAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4Mn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxfSwJLyogcm91dGUgZXh0IG1pYyAqLworCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisKKwl7MHgyMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKworCS8qIGludGVybmFsIG1pY3JvcGhvbmUgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBlbmFibGUgaW50IG1pYyAqLworCisJLyogRUFQRCAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3BvcnRkX2xvW10gPSB7CiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJeyB9IC8qIGVuZCAqLwpAQCAtMjQyOCw4ICsyNzgxLDI0IEBACiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCiAJCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZQotCQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKKwkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwl9CisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKKwljb25leGFudF9pbml0KGNvZGVjKTsKKwljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkgeworCQljeHQ1MDY2X3NldF9taWNfYm9vc3QoY29kZWMpOworCQljeHQ1MDY2X29scGNfYXV0b21pYyhjb2RlYyk7CisJfSBlbHNlIHsKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI0MzksNiArMjgwOCw3IEBACiAJQ1hUNTA2Nl9ERUxMX0xBUFRPUCwJLyogRGVsbCBMYXB0b3AgKi8KIAlDWFQ1MDY2X09MUENfWE9fMV81LAkvKiBPTFBDIFhPIDEuNSAqLwogCUNYVDUwNjZfREVMTF9WT1NUTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KKwlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X01PREVMUwogfTsKIApAQCAtMjQ0Niw3ICsyODE2LDggQEAKIAlbQ1hUNTA2Nl9MQVBUT1BdCQk9ICJsYXB0b3AiLAogCVtDWFQ1MDY2X0RFTExfTEFQVE9QXQk9ICJkZWxsLWxhcHRvcCIsCiAJW0NYVDUwNjZfT0xQQ19YT18xXzVdCT0gIm9scGMteG8tMV81IiwKLQlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIKKwlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIsCisJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CkBAIC0yNDU2LDYgKzI4MjcsNyBAQAogCQkgICAgICBDWFQ1MDY2X0RFTExfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwODMzLCAiT0xQQyBYTy0xLjUiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVE8pLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJpZGVhcGFkIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAl7fQogfTsKIApAQCAtMjQ3MCw3ICsyODQyLDcgQEAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwotCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjb25leGFudF9pbml0OwogCiAJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDA7CiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKQEAgLTI0ODMsNyArMjg1NSw2IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKLQlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yNTEwLDIwICsyODgxLDI4IEBACiAJCXNwZWMtPmRlbGxfYXV0b211dGUgPSAxOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfT0xQQ19YT18xXzU6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X29scGNfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfb2xwY191bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9vbHBjX2RjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7Ci0JCXNwZWMtPmV4dF9taWNfYmlhcyA9IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVM7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKKworCQkvKiBvdXIgY2FwdHVyZSBob29rcyB3aGljaCBhbGxvdyB1cyB0byB0dXJuIG9uIHRoZSBtaWNyb3Bob25lIExFRAorCQkgKiBhdCB0aGUgcmlnaHQgdGltZSAqLworCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlOworCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfREVMTF9WT1NUTzoKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CkBAIC0yNTMxLDYgKzI5MTAsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfdm9zdHJvX21peGVyczsKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwogCQlzcGVjLT5kZWxsX3Zvc3RybyA9IDE7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAJCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEzKTsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCkBAIC0yNTM5LDYgKzI5MTksMjIgQEAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKIAkJYnJlYWs7CisJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkOworCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmlkZWFwYWQgPSAxOworCQlzcGVjLT5taWNfYm9vc3QgPSAyOwkvKiBkZWZhdWx0IDIwZEIgZ2FpbiAqLworCisJCS8qIG5vIFMvUERJRiBvdXQgKi8KKwkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCisJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCisJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBkYTM0MDk1Li5lOGNiZTIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSwxMCBAQAogZW51bSB7CiAJQUxDMjY5X0JBU0lDLAogCUFMQzI2OV9RVUFOVEFfRkwxLAotCUFMQzI2OV9BU1VTX0FNSUMsCi0JQUxDMjY5X0FTVVNfRE1JQywKKwlBTEMyNjlfQU1JQywKKwlBTEMyNjlfRE1JQywKKwlBTEMyNjlWQl9BTUlDLAorCUFMQzI2OVZCX0RNSUMsCiAJQUxDMjY5X0ZVSklUU1UsCiAJQUxDMjY5X0xJRkVCT09LLAogCUFMQzI2OV9BVVRPLApAQCAtMjA3LDggKzIwOSwxMCBAQAogCUFMQzg4Ml9BU1VTX0E3SiwKIAlBTEM4ODJfQVNVU19BN00sCiAJQUxDODg1X01BQ1BSTywKKwlBTEM4ODVfTUJBMjEsCiAJQUxDODg1X01CUDMsCiAJQUxDODg1X01CNSwKKwlBTEM4ODVfTUFDTUlOSTMsCiAJQUxDODg1X0lNQUMyNCwKIAlBTEM4ODVfSU1BQzkxLAogCUFMQzg4M18zU1RfMmNoX0RJRywKQEAgLTMzOCw3ICszNDIsNyBAQAogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAl2b2lkICgqdW5zb2xfZXZlbnQpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jdm9pZCAoKnBvd2VyX2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwpAQCAtMzkxLDcgKzM5NSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOwotCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2VuZGlmCiB9OwogCkBAIC02MzMsNiArNjM3LDcgQEAKIAogI2RlZmluZSBBTENfUElOX01PREUoeG5hbWUsIG5pZCwgZGlyKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19waW5fbW9kZV9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3Bpbl9tb2RlX2dldCwgXAogCSAgLnB1dCA9IGFsY19waW5fbW9kZV9wdXQsIFwKQEAgLTY4NCw2ICs2ODksNyBAQAogfQogI2RlZmluZSBBTENfR1BJT19EQVRBX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19ncGlvX2RhdGFfaW5mbywgXAogCSAgLmdldCA9IGFsY19ncGlvX2RhdGFfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2dwaW9fZGF0YV9wdXQsIFwKQEAgLTczOCw2ICs3NDQsNyBAQAogfQogI2RlZmluZSBBTENfU1BESUZfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfc3BkaWZfY3RybF9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3NwZGlmX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX3NwZGlmX2N0cmxfcHV0LCBcCkBAIC03OTEsNiArNzk4LDcgQEAKIAogI2RlZmluZSBBTENfRUFQRF9DVFJMX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19lYXBkX2N0cmxfaW5mbywgXAogCSAgLmdldCA9IGFsY19lYXBkX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2VhcGRfY3RybF9wdXQsIFwKQEAgLTgzNywyNyArODQ1LDYgQEAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gdmVyYjsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogaG9vayBmb3IgcHJvYwotICovCi1zdGF0aWMgdm9pZCBwcmludF9yZWFsdGVrX2NvZWYoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBjb2VmZjsKLQotCWlmIChuaWQgIT0gMHgyMCkKLQkJcmV0dXJuOwotCWNvZWZmID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiICBQcm9jZXNzaW5nIENvZWZmaWNpZW50OiAweCUwMnhcbiIsIGNvZWZmKTsKLQljb2VmZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgIEFDX1ZFUkJfR0VUX0NPRUZfSU5ERVgsIDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQ29lZmZpY2llbnQgSW5kZXg6IDB4JTAyeFxuIiwgY29lZmYpOwotfQotI2Vsc2UKLSNkZWZpbmUgcHJpbnRfcmVhbHRla19jb2VmCU5VTEwKLSNlbmRpZgotCiAvKgogICogc2V0IHVwIGZyb20gdGhlIHByZXNldCB0YWJsZQogICovCkBAIC0xMTYyLDYgKzExNDksNyBAQAogCQljYXNlIDB4MTBlYzA4ODg6CiAJCQlhbGM4ODhfY29lZl9pbml0KGNvZGVjKTsKIAkJCWJyZWFrOworI2lmIDAgLyogWFhYOiBUaGlzIG1heSBjYXVzZSB0aGUgc2lsZW50IG91dHB1dCBvbiBzcGVha2VyIG9uIHNvbWUgbWFjaGluZXMgKi8KIAkJY2FzZSAweDEwZWMwMjY3OgogCQljYXNlIDB4MTBlYzAyNjg6CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLApAQCAtMTE3NCw2ICsxMTYyLDcgQEAKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwKIAkJCQkJICAgIHRtcCB8IDB4MzAwMCk7CiAJCQlicmVhazsKKyNlbmRpZiAvKiBYWFggKi8KIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMjY1LDcgKzEyNTQsNyBAQAogICovCiBzdGF0aWMgaW50IGFsY19zdWJzeXN0ZW1faWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkgICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCi0JCQkgICAgaGRhX25pZF90IHBvcnRkKQorCQkJICAgIGhkYV9uaWRfdCBwb3J0ZCwgaGRhX25pZF90IHBvcnRpKQogewogCXVuc2lnbmVkIGludCBhc3MsIHRtcCwgaTsKIAl1bnNpZ25lZCBuaWQ7CkBAIC0xMjkxLDcgKzEyODAsNyBAQAogCXNuZF9wcmludGQoInJlYWx0ZWs6IE5vIHZhbGlkIFNTSUQsICIKIAkJICAgImNoZWNraW5nIHBpbmNmZyAweCUwOHggZm9yIE5JRCAweCV4XG4iLAogCQkgICBhc3MsIG5pZCk7Ci0JaWYgKCEoYXNzICYgMSkgJiYgIShhc3MgJiAweDEwMDAwMCkpCisJaWYgKCEoYXNzICYgMSkpCiAJCXJldHVybiAwOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCiAJCXJldHVybiAwOwpAQCAtMTM1MSw2ICsxMzQwLDggQEAKIAkJCW5pZCA9IHBvcnRlOwogCQllbHNlIGlmICh0bXAgPT0gMikKIAkJCW5pZCA9IHBvcnRkOworCQllbHNlIGlmICh0bXAgPT0gMykKKwkJCW5pZCA9IHBvcnRpOwogCQllbHNlCiAJCQlyZXR1cm4gMTsKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspCkBAIC0xMzY1LDkgKzEzNTYsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgYWxjX3NzaWRfY2hlY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkgICBoZGFfbmlkX3QgcG9ydGEsIGhkYV9uaWRfdCBwb3J0ZSwgaGRhX25pZF90IHBvcnRkKQorCQkJICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCisJCQkgICBoZGFfbmlkX3QgcG9ydGQsIGhkYV9uaWRfdCBwb3J0aSkKIHsKLQlpZiAoIWFsY19zdWJzeXN0ZW1faWQoY29kZWMsIHBvcnRhLCBwb3J0ZSwgcG9ydGQpKSB7CisJaWYgKCFhbGNfc3Vic3lzdGVtX2lkKGNvZGVjLCBwb3J0YSwgcG9ydGUsIHBvcnRkLCBwb3J0aSkpIHsKIAkJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJCXNuZF9wcmludGQoInJlYWx0ZWs6ICIKIAkJCSAgICJFbmFibGUgZGVmYXVsdCBzZXR1cCBmb3IgYXV0byBtb2RlIGFzIGZhbGxiYWNrXG4iKTsKQEAgLTE4NDAsMTQgKzE4MzIsNiBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxYjsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyB2b2lkIGFsYzg4OV9wb3dlcl9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCi17Ci0Jc2V0X2VhcGQoY29kZWMsIDB4MTQsIHBvd2VyKTsKLQlzZXRfZWFwZChjb2RlYywgMHgxNSwgcG93ZXIpOwotfQotI2VuZGlmCi0KIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTI0NTAsNiArMjQzNCwxNSBAQAogICogYnVpbGQgY29udHJvbCBlbGVtZW50cwogICovCiAKKyNkZWZpbmUgTklEX01BUFBJTkcJCSgtMSkKKworI2RlZmluZSBTVUJERVZfU1BFQUtFUl8JCSgwIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9IUF8JCSgxIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9MSU5FXwkJKDIgPDwgNikKKyNkZWZpbmUgU1VCREVWX1NQRUFLRVIoeCkJKFNVQkRFVl9TUEVBS0VSXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0hQKHgpCQkoU1VCREVWX0hQXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0xJTkUoeCkJCShTVUJERVZfTElORV8gfCAoKHgpICYgMHgzZikpCisKIHN0YXRpYyB2b2lkIGFsY19mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKQEAgLTI0NjQsOCArMjQ1NywxMSBAQAogc3RhdGljIGludCBhbGNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWludCBpLCBqLCBlcnI7CisJdW5zaWduZWQgaW50IHU7CisJaGRhX25pZF90IG5pZDsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CkBAIC0yNTA2LDggKzI1MDIsNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQlnZXRfYW1wX25pZF8oc3BlYy0+YmVlcF9hbXApLCBrY3RsKTsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yNTM0LDYgKzI1MjksNzUgQEAKIAl9CiAKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJaGRhX25pZF90ICpuaWRzID0gc3BlYy0+Y2Fwc3JjX25pZHM7CisJCWlmICghbmlkcykKKwkJCW5pZHMgPSBzcGVjLT5hZGNfbmlkczsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBuaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+Y2FwX21peGVyKSB7CisJCWNvbnN0IGNoYXIgKmtuYW1lID0ga2N0bCA/IGtjdGwtPmlkLm5hbWUgOiBOVUxMOworCQlmb3IgKGtuZXcgPSBzcGVjLT5jYXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJaWYgKGtuYW1lICYmIHN0cmNtcChrbmV3LT5uYW1lLCBrbmFtZSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksCisJCQkJCQkgICAgICBzcGVjLT5hZGNfbmlkc1tpXSk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBvdGhlciBuaWQtPmNvbnRyb2wgbWFwcGluZyAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJZm9yIChrbmV3ID0gc3BlYy0+bWl4ZXJzW2ldOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCWlmIChrbmV3LT5pZmFjZSAhPSBOSURfTUFQUElORykKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWlmIChrY3RsID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQl1ID0ga25ldy0+c3ViZGV2aWNlOworCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKywgdSA+Pj0gOCkgeworCQkJCW5pZCA9IHUgJiAweDNmOworCQkJCWlmIChuaWQgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJc3dpdGNoICh1ICYgMHhjMCkgeworCQkJCWNhc2UgU1VCREVWX1NQRUFLRVJfOgorCQkJCQluaWQgPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1tuaWRdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNVQkRFVl9MSU5FXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1VCREVWX0hQXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsIG5pZCk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQl1ID0ga25ldy0+cHJpdmF0ZV92YWx1ZTsKKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyssIHUgPj49IDgpIHsKKwkJCQluaWQgPSB1ICYgMHhmZjsKKwkJCQlpZiAobmlkID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwgbmlkKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNiw2ICszNjgwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM2MzYsMTcgKzM3MDUsNDQgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybjsKIAorCWFsY19zaHV0dXAoY29kZWMpOwogCWFsY19mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGNfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBXZSBjdXJyZW50bHkgb25seSBoYW5kbGUgZnJvbnQsIEhQICovCisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDEwZWMwMjYwOgorCQlzZXRfZWFwZChjb2RlYywgMHgwZiwgMCk7CisJCXNldF9lYXBkKGNvZGVjLCAweDEwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjYyOgorCWNhc2UgMHgxMGVjMDI2NzoKKwljYXNlIDB4MTBlYzAyNjg6CisJY2FzZSAweDEwZWMwMjY5OgorCWNhc2UgMHgxMGVjMDI3MDoKKwljYXNlIDB4MTBlYzAyNzI6CisJY2FzZSAweDEwZWMwNjYwOgorCWNhc2UgMHgxMGVjMDY2MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwODYyOgorCWNhc2UgMHgxMGVjMDg4OToKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDApOworCQlzZXRfZWFwZChjb2RlYywgMHgxNSwgMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBhbGNfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWFsY19zaHV0dXAoY29kZWMpOwogCWlmIChzcGVjICYmIHNwZWMtPnBvd2VyX2hvb2spCi0JCXNwZWMtPnBvd2VyX2hvb2soY29kZWMsIDApOworCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzY1NCwxNiArMzc1MCw5IEBACiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0jZW5kaWYKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQotCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAxKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zNjgzLDYgKzM3NzIsNyBAQAogCS5zdXNwZW5kID0gYWxjX3N1c3BlbmQsCiAJLmNoZWNrX3Bvd2VyX3N0YXR1cyA9IGFsY19jaGVja19wb3dlcl9zdGF0dXMsCiAjZW5kaWYKKwkucmVib290X25vdGlmeSA9IGFsY19zaHV0dXAsCiB9OwogCiAKQEAgLTM4MzksNiArMzkyOSw3IEBACiAjZGVmaW5lIFBJTl9DVExfVEVTVCh4bmFtZSxuaWQpIHsJCQlcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAlcCiAJCQkubmFtZSA9IHhuYW1lLAkJICAgICAgIFwKKwkJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJCQkuaW5mbyA9IGFsY190ZXN0X3Bpbl9jdGxfaW5mbywgXAogCQkJLmdldCA9IGFsY190ZXN0X3Bpbl9jdGxfZ2V0LCAgIFwKIAkJCS5wdXQgPSBhbGNfdGVzdF9waW5fY3RsX3B1dCwgICBcCkBAIC0zODQ4LDYgKzM5MzksNyBAQAogI2RlZmluZSBQSU5fU1JDX1RFU1QoeG5hbWUsbmlkKSB7CQkJXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwJXAogCQkJLm5hbWUgPSB4bmFtZSwJCSAgICAgICBcCisJCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCQkJLmluZm8gPSBhbGNfdGVzdF9waW5fc3JjX2luZm8sIFwKIAkJCS5nZXQgPSBhbGNfdGVzdF9waW5fc3JjX2dldCwgICBcCiAJCQkucHV0ID0gYWxjX3Rlc3RfcGluX3NyY19wdXQsICAgXApAQCAtNDM4Nyw3ICs0NDc5LDcgQEAKIAlpZiAoIWtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC00NzcwLDcgKzQ4NjIsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ5NzQsNyArNTA2Niw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTgyLDYgKzUyNzMsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC01MjIwLDYgKzUzMTIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC02MzAzLDcgKzYzOTYsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDEwLCAweDE1LCAweDBmKTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxMCwgMHgxNSwgMHgwZiwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY1ODIsNyArNjY3NSw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjMjYwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjY0LDYgKzY3NTYsMTQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IG1hY21pbmkzX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTGluZSIsIDB4MiB9LAorCQl7ICJDRCIsIDB4NCB9LAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzXzNzdGFja182Y2hfaW50ZWwgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtNjg1Miw2ICs2OTUyLDEzIEBACiAJeyA4LCBhbGM4ODJfc2l4c3RhY2tfY2g4X2luaXQgfSwKIH07CiAKKworLyogTWFjYm9vayBBaXIgMiwxICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODVfbWJhMjFfY2hfbW9kZXNbMV0gPSB7CisgICAgICB7IDIsIE5VTEwgfSwKK307CisKIC8qCiAgKiBtYWNib29rIHBybyBBTEM4ODUgY2FuIHN3aXRjaCBMaW5lSW4gdG8gTGluZU91dCB3aXRob3V0IGxvc2luZyBNaWMKICAqLwpAQCAtNjkxMiw2ICs3MDE5LDcgQEAKIAl7IDYsIGFsYzg4NV9tYjVfY2g2X2luaXQgfSwKIH07CiAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcwlhbGM4ODVfbWI1XzZjaF9tb2RlcwogCiAvKgogICogMmNoIG1vZGUKQEAgLTcxMjMsNiArNzIzMSwxNSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIE1hY2Jvb2sgQWlyIDIsMSBzYW1lIGNvbnRyb2wgZm9yIEhQIGFuZCBpbnRlcm5hbCBTcGVha2VyICovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfbWJhMjFfbWl4ZXJbXSA9IHsKKyAgICAgIEhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisgICAgICBIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9PVVRQVVQpLAorICAgICB7IH0KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYnAzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MTU2LDYgKzcyNzMsMjEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21hY21pbmkzX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA3LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFICAoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X2ltYWM5MV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUgICAoIkxpbmUtT3V0IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MjQ3LDI5ICs3Mzc5LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2Jhc2VfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJLyogUmVhciBtaXhlciAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCS8qIFNpZGUgbWl4ZXIgKi8KLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAKLQkvKiBtdXRlIGFuYWxvZyBpbnB1dCBsb29wYmFja3MgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKiBGcm9udCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC03MzA2LDE0ICs3NDI3LDggQEAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KIAkvKiBJbnB1dCBtaXhlcjIgKi8KIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIEFEQzI6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNzM1NywyNiArNzQ3MiwxNyBAQAogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCS8qIFJlYXIgbWl4ZXIgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJLyogU2lkZSBtaXhlciAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQotCS8qIG11dGUgYW5hbG9nIGlucHV0IGxvb3BiYWNrcyAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKIAkvKiBGcm9udCBIUCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC03NDEwLDE3ICs3NTE2LDExIEBACiAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgLCAweDFhLCAweDFiICovCiAJLyogSW5wdXQgbWl4ZXIxICovCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIyICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKIAkvKiBJbnB1dCBtaXhlcjMgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJLyogQURDMzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KQEAgLTc1NjIsNiArNzY2Miw3NiBAQAogCXsgfQogfTsKIAorLyogTWFjbWluaSAzLDEgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21hY21pbmkzX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBEQUNzICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBGcm9udCBtaXhlciAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBTdXJyb3VuZCBtaXhlciAqLworCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBMRkUgbWl4ZXIgKi8KKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogSFAgbWl4ZXIgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogRnJvbnQgUGluICgweDBjKSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfCAweDAxfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogTEZFIFBpbiAoMHgwZSkgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIHwgMHgwMX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAorCS8qIEhQIFBpbiAoMHgwZikgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwM30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCS8qIExpbmUgSW4gcGluICovCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKworCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7IH0KK307CisKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJhMjFfaW5pdF92ZXJic1tdID0geworCS8qSW50ZXJuYWwgYW5kIEhQIFNwZWFrZXIgTWl4ZXIqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLypJbnRlcm5hbCBTcGVha2VyIFBpbiAoMHgwYykqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIChQSU5fT1VUIHwgQUNfUElOQ1RMX1ZSRUZfNTApIH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQIFBpbjogb3V0cHV0IDAgKDB4MGUpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHhjNH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIChBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTil9LAorCS8qIExpbmUgaW4gKGlzIGhwIHdoZW4gamFjayBjb25uZWN0ZWQpKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBBQ19QSU5DVExfVlJFRl81MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwl7IH0KKyB9OworCisKIC8qIE1hY2Jvb2sgUHJvIHJldjMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21icDNfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KQEAgLTc3MjQsNiArNzg5NCwyMCBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxYTsKIH0KIAorI2RlZmluZSBhbGM4ODVfbWI1X3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzX3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKworLyogTWFjYm9vayBBaXIgMiwxICovCitzdGF0aWMgdm9pZCBhbGM4ODVfbWJhMjFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisgICAgICAgc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKyAgICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OworICAgICAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxODsKK30KKworCisKIHN0YXRpYyB2b2lkIGFsYzg4NV9tYnAzX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNzczMiw0NiArNzkxNiwxMyBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIH0KIAotc3RhdGljIHZvaWQgYWxjODg1X21iNV9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4NV9pbWFjOTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWEsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JLyogSGVhZHBob25lIGluc2VydGlvbiBvciByZW1vdmFsLiAqLwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzg4NV9tYjVfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzkxX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYSwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7Ci0KLX0KLQotc3RhdGljIHZvaWQgYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQkvKiBIZWFkcGhvbmUgaW5zZXJ0aW9uIG9yIHJlbW92YWwuICovCi0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjODg1X2ltYWM5MV9hdXRvbXV0ZShjb2RlYyk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDFhOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml90YXJnYV92ZXJic1tdID0gewpAQCAtNzkwNiwxOCArODA1Nyw2IEBACiAJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKLQkvKiBNdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCi0JICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKLQkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKgogCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKIAkgKi8KQEAgLTc5NDIsMTYgKzgwODEsOSBAQAogCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxYywgMWQsIDE0LCAxNSwgMTYsIDE3LCAwYiAqLwogCS8qIElucHV0IG1peGVyMiAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDAgPDwgOCkpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAzIDw8IDgpKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMiA8PCA4KSl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDQgPDwgOCkpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDMgPDwgOCkpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAyIDw8IDgpKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwNCA8PCA4KSl9LAotCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgfQogfTsKIApAQCAtODkzOCw2ICs5MDcwLDggQEAKIAlbQUxDODgyX0FTVVNfQTdNXQk9ICJhc3VzLWE3bSIsCiAJW0FMQzg4NV9NQUNQUk9dCQk9ICJtYWNwcm8iLAogCVtBTEM4ODVfTUI1XQkJPSAibWI1IiwKKwlbQUxDODg1X01BQ01JTkkzXQk9ICJtYWNtaW5pMyIsCisJW0FMQzg4NV9NQkEyMV0JCT0gIm1iYTIxIiwKIAlbQUxDODg1X01CUDNdCQk9ICJtYnAzIiwKIAlbQUxDODg1X0lNQUMyNF0JCT0gImltYWMyNCIsCiAJW0FMQzg4NV9JTUFDOTFdCQk9ICJpbWFjOTEiLApAQCAtOTEyMSw2ICs5MjU1LDcgQEAKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MTAwLCAiTWFjbWluaSAzLDEiLCBBTEM4ODVfTUFDTUlOSTMpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTkxNzIsNiArOTMwNywxOCBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJfSwKKwkgICBbQUxDODg1X01CQTIxXSA9IHsKKwkJCS5taXhlcnMgPSB7IGFsYzg4NV9tYmEyMV9taXhlciB9LAorCQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYmEyMV9pbml0X3ZlcmJzLCBhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAorCQkJLm51bV9kYWNzID0gMiwKKwkJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJCS5jaGFubmVsX21vZGUgPSBhbGM4ODVfbWJhMjFfY2hfbW9kZXMsCisJCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg1X21iYTIxX2NoX21vZGVzKSwKKwkJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJCS5zZXR1cCA9IGFsYzg4NV9tYmEyMV9zZXR1cCwKKwkJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorICAgICAgIH0sCiAJW0FMQzg4NV9NQlAzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21icDNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYnAzX2luaXRfdmVyYnMsCkBAIC05MTk5LDggKzkzNDYsMjQgQEAKIAkJLmlucHV0X211eCA9ICZtYjVfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODVfbWI1X2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWI1X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwl9LAorCVtBTEM4ODVfTUFDTUlOSTNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfbWFjbWluaTNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYWNtaW5pM19pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYWNtaW5pM182Y2hfbW9kZXMpLAorCQkuaW5wdXRfbXV4ID0gJm1hY21pbmkzX2NhcHR1cmVfc291cmNlLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWFjbWluaTNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4NV9NQUNQUk9dID0gewogCQkubWl4ZXJzID0geyBhbGM4ODJfbWFjcHJvX21peGVyIH0sCkBAIC05MjM5LDggKzk0MDIsOSBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9pbWFjOTFfYXV0b211dGUsCisJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4NV9pbWFjOTFfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4Ml9UQVJHQV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LApAQCAtOTUyOCw3ICs5NjkyLDcgQEAKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JCS5wb3dlcl9ob29rID0gYWxjODg5X3Bvd2VyX2VhcGQsCisJCS5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQsCiAjZW5kaWYKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0gewpAQCAtMTAwNjMsNyArMTAyMjcsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMjAxLDcgKzEwMzY1LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4ODJfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMzI0LDggKzEwNDg3LDE0IEBACiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywJCVwKIAkJLmdldCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfZ2V0LAkJCVwKIAkJLnB1dCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfcHV0LAkJCVwKKwl9LCBcCisJewkJCQkJCQlcCisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAkJCQlcCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAkJXAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTUgfCAoMHgxNiA8PCA4KSB8ICgweDFiIDw8IDE2KSwJXAogCX0KIAorCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX0hQX0JQQ19taXhlcltdID0gewogCUFMQzI2Ml9IUF9NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMDQ4Myw2ICsxMDY1MiwxMiBAQAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCQlcCiAJCS5nZXQgPSBhbGMyNjJfaGlwcG9fbWFzdGVyX3N3X2dldCwJCVwKIAkJLnB1dCA9IGFsYzI2Ml9oaXBwb19tYXN0ZXJfc3dfcHV0LAkJXAorCX0sCQkJCQkJCVwKKwl7CQkJCQkJCVwKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCQkJCVwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCQlcCisJCS5zdWJkZXZpY2UgPSBTVUJERVZfSFAoMCkgfCAoU1VCREVWX0xJTkUoMCkgPDwgOCkgfCBcCisJCQkgICAgIChTVUJERVZfU1BFQUtFUigwKSA8PCAxNiksIFwKIAl9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfaGlwcG9fbWl4ZXJbXSA9IHsKQEAgLTEwOTYzLDExICsxMTEzOCwxNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0LAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCiAJfSwKKwl7CisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFiLAorCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLApAQCAtMTA5OTgsNiArMTExNzksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfbGVub3ZvXzMwMDBfbWFzdGVyX3N3X3B1dCwKQEAgLTExMTUyLDYgKzExMzM0LDExIEBACiAJCS5nZXQgPSBhbGNfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gYWxjMjYyX3VsdHJhX211eF9lbnVtX3B1dCwKIAl9LAorCXsKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE1LAorCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTE1OTgsNyArMTE3ODUsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MTQsIDB4MWIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIwNDEsNyArMTIyMjgsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzI2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxNzAsNiArMTIzNTYsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIxODUsNiArMTIzNzIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIyMDIsNiArMTIzOTAsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTI1NDcsNyArMTI3MzYsNiBAQAogCQlkYWMgPSAweDAyOwogCQlicmVhazsKIAljYXNlIDB4MTU6Ci0JY2FzZSAweDIxOgogCQlkYWMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI3NjgsNyArMTI5NTYsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTMxMDUsOCArMTMyOTMsNiBAQAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY4X0FVVE8pCiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzI2OF9hdXRvX2luaXQ7CiAKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMzEyNiw2ICsxMzMxMiwxNSBAQAogCTB4MjMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IGFsYzI2OXZiX2FkY19uaWRzWzFdID0geworCS8qIEFEQzEgKi8KKwkweDA5LAorfTsKKworc3RhdGljIGhkYV9uaWRfdCBhbGMyNjl2Yl9jYXBzcmNfbmlkc1sxXSA9IHsKKwkweDIyLAorfTsKKwogLyogTk9URTogQURDMiAoMHgwNykgaXMgY29ubmVjdGVkIGZyb20gYSByZWNvcmRpbmcgKk1JWEVSKiAoMHgyNCksCiAgKiAgICAgICBub3QgYSBtdXghCiAgKi8KQEAgLTEzMTU1LDYgKzEzMzUwLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTc1LDYgKzEzMzcxLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTkyLDcgKzEzMzg5LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfZWVlcGNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTMyMDAsMTYgKzEzMzk3LDQ3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9taXhlcltdID0geworCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2VwY19jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBGU0MgYW1pbG8gKi8KLSNkZWZpbmUgYWxjMjY5X2Z1aml0c3VfbWl4ZXIJYWxjMjY5X2VlZXBjX21peGVyCisjZGVmaW5lIGFsYzI2OV9mdWppdHN1X21peGVyCWFsYzI2OV9sYXB0b3BfbWl4ZXIKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCkBAIC0xMzM1Miw3ICsxMzU4MCw3IEBACiAJYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfZG1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDV9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzYzLDcgKzEzNTkxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzczLDYgKzEzNjAxLDI4IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA2fSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2FtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIGFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTMzOTAsNyArMTM2NDAsNyBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKIHsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewpAQCAtMTM0MDMsNyArMTM2NTMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MTMsNyArMTM2NjMsMTcgQEAKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5dmJfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDY7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2FtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MjMsNyArMTM2ODMsNyBAQAogCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CkBAIC0xMzQzNiwyMiArMTM2OTYsMTAgQEAKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCi0JLyogTXV0ZSBpbnB1dCBhbXBzIChQQ0JlZXAsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZQotCSAqIGFuYWxvZy1sb29wYmFjayBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvcgotCSAqIGZyb250IHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAkvKgotCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZSkKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCiAJICovCiAJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKQEAgLTEzNDc2LDI2ICsxMzcyNCw1NyBAQAogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCi0JLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisJLyogRklYTUU6IHVzZSBNdXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFkLCAwYiAqLwogCS8qIElucHV0IG1peGVyMTogdW5tdXRlIE1pYywgRi1NaWMsIExpbmUsIENEIGlucHV0cyAqLwotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJLyogc2V0IEVBUEQgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2luaXRfdmVyYnNbXSA9IHsKKwkvKgorCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyoKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCisJICovCisJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KKwkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCS8qIEZJWE1FOiB1c2UgTXV4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLworCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxZCwgMGIgKi8KKwkvKiBJbnB1dCBtaXhlcjE6IHVubXV0ZSBNaWMsIEYtTWljLCBMaW5lLCBDRCBpbnB1dHMgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogc2V0IEVBUEQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsgfQogfTsKIApAQCAtMTM1NDMsNiArMTM4MjIsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwloZGFfbmlkX3QgcmVhbF9jYXBzcmNfbmlkczsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkgICBhbGMyNjlfaWdub3JlKTsKQEAgLTEzNTY0LDExICsxMzg0NCwyMCBAQAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQlhZGRfdmVyYihzcGVjLCBhbGMyNjlfaW5pdF92ZXJicyk7CisJaWYgKChhbGNfcmVhZF9jb2VmX2lkeChjb2RlYywgMCkgJiAweDAwZjApID09IDB4MDAxMCkgeworCQlhZGRfdmVyYihzcGVjLCBhbGMyNjl2Yl9pbml0X3ZlcmJzKTsKKwkJcmVhbF9jYXBzcmNfbmlkcyA9IGFsYzI2OXZiX2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMCwgMHgxYiwgMHgxNCwgMHgyMSk7CisJfSBlbHNlIHsKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOworCQlyZWFsX2NhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CisJfQorCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OV9jYXBzcmNfbmlkc1swXSwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCByZWFsX2NhcHNyY19uaWRzLAogCQkJCSAgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCiAJCQkJICBzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKIApAQCAtMTM1NzksOCArMTM4NjgsNiBAQAogCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKLQogCXJldHVybiAxOwogfQogCkBAIC0xMzYwNiw4ICsxMzg5Myw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjY5X21vZGVsc1tBTEMyNjlfTU9ERUxfTEFTVF0gPSB7CiAJW0FMQzI2OV9CQVNJQ10JCQk9ICJiYXNpYyIsCiAJW0FMQzI2OV9RVUFOVEFfRkwxXQkJPSAicXVhbnRhIiwKLQlbQUxDMjY5X0FTVVNfQU1JQ10JCT0gImFzdXMtYW1pYyIsCi0JW0FMQzI2OV9BU1VTX0RNSUNdCQk9ICJhc3VzLWRtaWMiLAorCVtBTEMyNjlfQU1JQ10JCQk9ICJsYXB0b3AtYW1pYyIsCisJW0FMQzI2OV9ETUlDXQkJCT0gImxhcHRvcC1kbWljIiwKIAlbQUxDMjY5X0ZVSklUU1VdCQk9ICJmdWppdHN1IiwKIAlbQUxDMjY5X0xJRkVCT09LXQkJPSAibGlmZWJvb2siLAogCVtBTEMyNjlfQVVUT10JCQk9ICJhdXRvIiwKQEAgLTEzNjE2LDQzICsxMzkwMyw1NyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmOCwgIlF1YW50YSBGTDEiLCBBTEMyNjlfUVVBTlRBX0ZMMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMzMCwgIkFTVVMgRWVlcGMgUDcwMyBQOTAwQSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExMzMsICJBU1VTIFVKMjBmdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZDMsICJBU1VTIE42MUpBIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDUzLCAiQVNVUyBNNjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZTMsICJBU1VTIFVMMjAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWIzLCAiQVNVUyBONjBEcCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBU1VTIE02MEoiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCQkgICAgICBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAxMywgIkFTVVMgTjYxRGEiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTEzLCAiQVNVUyBONjNKbiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExNDMsICJBU1VTIEI1M2YiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTMzLCAiQVNVUyBVSjIwZnQiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE4MywgIkFTVVMgSzcyRFIiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWIzLCAiQVNVUyBLNTJEUiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZTMsICJBU1VTIFUzM0pjIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEp0IiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJkMywgIkFTVVMgTjYxSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNhMywgIkFTVVMgVUwzMFZ0IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzNzMsICJBU1VTIEc3M0pYIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2QzLCAiQVNVUyBONjFKQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDEzLCAiQVNVUyBVTDUwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ1MywgIkFTVVMgTTYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ4MywgIkFTVVMgVUw4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGUzLCAiQVNVUyBVTDIwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1MTMsICJBU1VTIFVYMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTU5MywgIkFTVVMgTjUxVm4iLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTViMywgIkFTVVMgTjYwRHAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVjMywgIkFTVVMgTjcwRGUiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjQzLCAiQVNVUyBNNjBKIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NTMsICJBU1VTIFU1MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiQVNVUyBFZWVwYyBQOTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCisJCSAgICAgIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAorCQkgICAgICBBTEMyNjlfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzEsICJTT05ZIFhUQiIsIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDc1LCAiTGlmZWJvb2sgSUNIOU0tYmFzZWQiLCBBTEMyNjlfTElGRUJPT0spLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDE3NzgsICJRdWFudGEgT04xIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDExNWQsICJGU0MgQW1pbG8iLCBBTEMyNjlfRlVKSVRTVSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JlOSwgIlF1YW50YSBXaXN0cm9uIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWEsICJRdWFudGEgRUwzIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWIsICJRdWFudGEgSlIxIiwgQUxDMjY5X0RNSUMpLAogCXt9CiB9OwogCkBAIC0xMzY4MCw0NyArMTM5ODEsNzUgQEAKIAkJLnNldHVwID0gYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfQU1JQ10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAotCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAorCVtBTEMyNjlfQU1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OV9sYXB0b3BfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OV9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAotCVtBTEMyNjlfQVNVU19ETUlDXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY5X2VlZXBjX21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJW0FMQzI2OV9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5X2xhcHRvcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY5X2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9kbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9BTUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjl2Yl9pbml0X3ZlcmJzLAorCQkJCWFsYzI2OXZiX2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5dmJfaW5pdF92ZXJicywKKwkJCQlhbGMyNjl2Yl9sYXB0b3BfZG1pY19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OXZiX2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfRlVKSVRTVV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAotCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKKwkJCQlhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OV9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2OV9kYWNfbmlkcywKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCi0JCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19kbWljX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjlfbGFwdG9wX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9MSUZFQk9PS10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9saWZlYm9va19taXhlciB9LApAQCAtMTM3NDEsNiArMTQwNzAsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBlcnI7CisJaW50IGlzX2FsYzI2OXZiID0gMDsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzc1Nyw2ICsxNDA4Nyw3IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlpc19hbGMyNjl2YiA9IDE7CiAJfQogCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzI2OV9NT0RFTF9MQVNULApAQCAtMTM3OTIsNyArMTQxMjMsNyBAQAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCi0JaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgeworCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X1FVQU5UQV9GTDEpIHsKIAkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KIAkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKIAkJICovCkBAIC0xMzgwNSw5ICsxNDEzNiwxNiBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7Ci0Jc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjlfYWRjX25pZHMpOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOworCWlmICghaXNfYWxjMjY5dmIpIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7CisJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2FkY19uaWRzKTsKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjlfY2Fwc3JjX25pZHM7CisJfSBlbHNlIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjl2Yl9hZGNfbmlkczsKKwkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjl2Yl9hZGNfbmlkcyk7CisJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5dmJfY2Fwc3JjX25pZHM7CisJfQorCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKQEAgLTEzODIxLDcgKzE0MTU5LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGMyNjlfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0Njg0LDcgKzE1MDIxLDcgQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MGUsIDB4MGYsIDB4MGIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDBlLCAweDBmLCAweDBiLCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTQ5MzksMTMgKzE1Mjc2LDE2IEBACiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAzOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7Ci0JaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFfQVVUTykKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MV9BVVRPKSB7CiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzg2MV9hdXRvX2luaXQ7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQlzcGVjLT5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQ7CisjZW5kaWYKKwl9CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MV9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTU1NzIsNyArMTU5MTIsNyBAQAogc3RhdGljIGludCBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXJldHVybiBhbGNfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDE1LCAweDIyLCAwKTsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgwOSwgMCk7CiB9CiAKIApAQCAtMTU4MDgsNyArMTYxNDgsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTU5MjUsNyArMTYyNjUsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MXZkX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjM5MiwxMyArMTY3MzEsNiBAQAogCS8qIEFEQzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKQEAgLTE2NDQ4LDYgKzE2NzgwLDI4IEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19pbml0X3ZlcmJzW10gPSB7CisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI3Ml9pbml0X3ZlcmJzW10gPSB7CisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7IH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0ZST05UX0VWRU5UfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxBTEM4ODBfSFBfRVZFTlR9LApAQCAtMTY0NjcsNjEgKzE2ODIxLDYgQEAKIAl7fQogfTsKIAotLyoKLSAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfYXV0b19pbml0X3ZlcmJzW10gPSB7Ci0JLyoKLQkgKiBVbm11dGUgQURDIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCi0JICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0KLQkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKLQkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udAotCSAqIHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKLQotCS8qCi0JICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBmKQotCSAqLwotCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0KLQkvKiBzZXQgdXAgaW5wdXQgYW1wcyBmb3IgYW5hbG9nIGxvb3BiYWNrICovCi0JLyogQW1wIEluZGljZXM6IERBQyA9IDAsIG1peGVyID0gMSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCi0KLQkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KLQkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KLQkvKiBJbnB1dCBtaXhlciAqLwotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyB9Ci19OwotCi0vKiBhZGRpdGlvbmFsIHZlcmJzIGZvciBBTEM2NjMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX2F1dG9faW5pdF92ZXJic1tdID0gewotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19tNTF2YV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTcyNzIsNiArMTc1NzEsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjQsICJERUxMIFpNMSIsIEFMQzI3Ml9ERUxMX1pNMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE3MywgIkFTVVMgSzczSm4iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE3MzA3LDYgKzE3NjA3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThiMywgIkFTVVMgTjgwVmMiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThjMywgIkFTVVMgVlg1IiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZDMsICJBU1VTIE44MVRlIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZjMsICJBU1VTIE41MDVUcCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLApAQCAtMTczMzQsNiArMTc2MzUsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLApAQCAtMTc5NTIsMTUgKzE4MjU0LDIzIEBACiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0JYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKLQkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2F1dG9faW5pdF92ZXJicyk7CisJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2luaXRfdmVyYnMpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzIHx8CisJICAgIGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2NSkKKwkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2luaXRfdmVyYnMpOworCisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MikKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjcyX2luaXRfdmVyYnMpOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MiB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMgfHwKKwkgICAgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjY1IHx8IGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY3MCkKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDB4MjEpOworCWVsc2UKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODA0NiwxMSArMTgzNTYsMjAgQEAKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MikKLQkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7Ci0JZWxzZQotCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAorCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDY2MjoKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI3MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwNjY1OgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjczOgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwMywgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJfQogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTgwNjAsNyArMTgzNzksNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzY2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTgxMDEsNiArMTg0MTksOCBAQAogCXsgLmlkID0gMHgxMGVjMDY2MiwgLnJldiA9IDB4MTAwMTAxLCAubmFtZSA9ICJBTEM2NjIgcmV2MSIsCiAJICAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjMsIC5uYW1lID0gIkFMQzY2MyIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAorCXsgLmlkID0gMHgxMGVjMDY2NSwgLm5hbWUgPSAiQUxDNjY1IiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCisJeyAuaWQgPSAweDEwZWMwNjcwLCAubmFtZSA9ICJBTEM2NzAiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODAsIC5uYW1lID0gIkFMQzg4MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MCB9LAogCXsgLmlkID0gMHgxMGVjMDg4MiwgLm5hbWUgPSAiQUxDODgyIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODgzLCAubmFtZSA9ICJBTEM4ODMiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IDQzYjQzNmMuLmY0MTllZTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAjZGVmaW5lIFNJMzA1NF9LQ09OVFJPTChrbmFtZSxyZWcsbWFzaykgeyBcCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkubmFtZSA9IGtuYW1lLCBcCisJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCByZWcsIFwKIAkuaW5mbyA9IHNpMzA1NF9zd2l0Y2hfaW5mbywgXAogCS5nZXQgID0gc2kzMDU0X3N3aXRjaF9nZXQsIFwKIAkucHV0ICA9IHNpMzA1NF9zd2l0Y2hfcHV0LCBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNzk5YmEyNTcuLjhjNDE2YmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU2OCw2ICs1NjgsMTEgQEAKIAkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzWzEwXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLAorCTB4MGYsIDB4MTEsIDB4MWYsIDB4MjAsCit9OworCiAjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLApAQCAtMjY4OCw3ICsyNjkzLDcgQEAKIHN0YWNfY29udHJvbF9uZXcoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCiAJCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCiAJCSBjb25zdCBjaGFyICpuYW1lLAotCQkgaGRhX25pZF90IG5pZCkKKwkJIHVuc2lnbmVkIGludCBzdWJkZXYpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKQEAgLTI3MDQsOCArMjcwOSw3IEBACiAJCXNwZWMtPmtjdGxzLmFsbG9jZWQtLTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWlmIChuaWQpCi0JCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBuaWQ7CisJa25ldy0+c3ViZGV2aWNlID0gc3ViZGV2OwogCXJldHVybiBrbmV3OwogfQogCkBAIC0yNzE1LDcgKzI3MTksNyBAQAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXcgPSBzdGFjX2NvbnRyb2xfbmV3KHNwZWMsIGt0ZW1wLCBuYW1lLAotCQkJCQkJCSBnZXRfYW1wX25pZF8odmFsKSk7CisJCQkJCQkJIEhEQV9TVUJERVZfQU1QX0ZMQUcpOwogCWlmICgha25ldykKIAkJcmV0dXJuIC1FTk9NRU07CiAJa25ldy0+aW5kZXggPSBpZHg7CkBAIC0yODc0LDYgKzI4NzgsMTMgQEAKIAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJLyogOTJIRDg4OiB0cmFjZSBiYWNrIHVwIHRoZSBsaW5rIG9mIG5pZHMgdG8gZmluZCB0aGUgREFDICovCisJd2hpbGUgKGNvbm5fbGVuID09IDEgJiYgKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgY29ublswXSkpCisJCQkJCSE9IEFDX1dJRF9BVURfT1VUKSkgeworCQluaWQgPSBjb25uWzBdOworCQljb25uX2xlbiA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm4sCisJCQlIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwl9CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKIAkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9IGdldF93Y2Fwc190eXBlKHdjYXBzKTsKQEAgLTQxNjAsMzQgKzQxNzEsNTIgQEAKIHN0YXRpYyB2b2lkIHN0YWNfdG9nZ2xlX3Bvd2VyX21hcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQkgIGludCBlbmFibGUpOwogCitzdGF0aWMgaW5saW5lIGludCBnZXRfaW50X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgICBpbnQgKnZhbHApCit7CisJY29uc3QgY2hhciAqcDsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAocCkgeworCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJaWYgKCFzdHJpY3Rfc3RydG91bChwLCAwLCAmdmFsKSkgeworCQkJKnZhbHAgPSB2YWw7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyogb3ZlcnJpZGUgc29tZSBoaW50cyBmcm9tIHRoZSBod2RlcCBlbnRyeSAqLwogc3RhdGljIHZvaWQgc3RhY19zdG9yZV9oaW50cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWNvbnN0IGNoYXIgKnA7CiAJaW50IHZhbDsKIAogCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImhwX2RldGVjdCIpOwogCWlmICh2YWwgPj0gMCkKIAkJc3BlYy0+aHBfZGV0ZWN0ID0gdmFsOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19tYXNrIik7Ci0JaWYgKHApIHsKLQkJc3BlYy0+Z3Bpb19tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCk7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbWFzayIsICZzcGVjLT5ncGlvX21hc2spKSB7CiAJCXNwZWMtPmVhcGRfbWFzayA9IHNwZWMtPmdwaW9fZGlyID0gc3BlYy0+Z3Bpb19kYXRhID0KIAkJCXNwZWMtPmdwaW9fbWFzazsKIAl9Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RpciIpOwotCWlmIChwKQotCQlzcGVjLT5ncGlvX2RpciA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kYXRhIik7Ci0JaWYgKHApCi0JCXNwZWMtPmdwaW9fZGF0YSA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIik7Ci0JaWYgKHApCi0JCXNwZWMtPmVhcGRfbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RpciIsICZzcGVjLT5ncGlvX2RpcikpCisJCXNwZWMtPmdwaW9fbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fZGF0YSIsICZzcGVjLT5ncGlvX2RhdGEpKQorCQlzcGVjLT5ncGlvX2RpciAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImVhcGRfbWFzayIsICZzcGVjLT5lYXBkX21hc2spKQorCQlzcGVjLT5lYXBkX21hc2sgJj0gc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX211dGUiLCAmc3BlYy0+Z3Bpb19tdXRlKSkKKwkJc3BlYy0+Z3Bpb19tdXRlICY9IHNwZWMtPmdwaW9fbWFzazsKIAl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJlYXBkX3N3aXRjaCIpOwogCWlmICh2YWwgPj0gMCkKIAkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSB2YWw7CisJZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19sZWRfcG9sYXJpdHkiLCAmc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2xlZCIsICZzcGVjLT5ncGlvX2xlZCkpIHsKKwkJc3BlYy0+Z3Bpb19tYXNrIHw9IHNwZWMtPmdwaW9fbGVkOworCQlzcGVjLT5ncGlvX2RpciB8PSBzcGVjLT5ncGlvX2xlZDsKKwkJaWYgKHNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KQorCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOworCX0KIH0KIAogc3RhdGljIGludCBzdGFjOTJ4eF9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtNDMzNCw2ICs0MzYzLDEyIEBACiAJCWlmIChlbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLCBTVEFDX1BXUl9FVkVOVCkpCiAJCQlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQpOwogCX0KKworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkvKiBzeW5jIG11dGUgTEVEICovCisJaWYgKHNwZWMtPmdwaW9fbGVkICYmIGNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKQorCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyhjb2RlYywgMHgwMSk7CisjZW5kaWYJCiAJaWYgKHNwZWMtPmRhY19saXN0KQogCQlzdGFjOTJ4eF9wb3dlcl9kb3duKGNvZGVjKTsKIAlyZXR1cm4gMDsKQEAgLTQzNzIsMTggKzQ0MDcsOCBAQAogc3RhdGljIHZvaWQgc3RhYzkyeHhfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGk7Ci0JaGRhX25pZF90IG5pZDsKIAotCS8qIHJlc2V0IGVhY2ggcGluIGJlZm9yZSBwb3dlcmluZyBkb3duIERBQy9BREMgdG8gYXZvaWQgY2xpY2sgbm9pc2UgKi8KLQluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOwotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwotCQlpZiAod2lkX3R5cGUgPT0gQUNfV0lEX1BJTikKLQkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JfQorCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOwogCiAJaWYgKHNwZWMtPmVhcGRfbWFzaykKIAkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLApAQCAtNDczNSwxOSArNDc2MCwxNCBAQAogc3RhdGljIHZvaWQgc2V0X2hwX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7Ci0JY2FzZSAweDExMWQ3NjA4OgotCQkvKiBHUElPIDAgKi8KLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOwotCQlicmVhazsKLQljYXNlIDB4MTExZDc2MDA6Ci0JY2FzZSAweDExMWQ3NjAxOgotCWNhc2UgMHgxMTFkNzYwMjoKLQljYXNlIDB4MTExZDc2MDM6Ci0JCS8qIEdQSU8gMyAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7Ci0JCWJyZWFrOwotCX0KKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKworCWdwaW8gPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsIEFDX1BBUl9HUElPX0NBUCk7CisJZ3BpbyAmPSBBQ19HUElPX0lPX0NPVU5UOworCWlmIChncGlvID4gMykKKwkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OyAvKiBHUElPIDMgKi8KKwllbHNlCisJCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsgLyogR1BJTyAwICovCiB9CiAKIC8qCkBAIC00NzcwLDcgKzQ3OTAsNyBAQAogICogTmVlZCBtb3JlIGluZm9ybWF0aW9uIG9uIHdoZXRoZXIgaXQgaXMgdHJ1ZSBhY3Jvc3MgdGhlIGVudGlyZSBzZXJpZXMuCiAgKiAtLSBrdW5hbAogICovCi1zdGF0aWMgaW50IGZpbmRfbXV0ZV9sZWRfZ3BpbyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyBpbnQgZmluZF9tdXRlX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgZGVmYXVsdF9wb2xhcml0eSkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtNDc5Nyw3ICs0ODE3LDcgQEAKIAkJICovCiAJCWlmICghaHBfYmxpa2Vfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CiAJCQlzZXRfaHBfbGVkX2dwaW8oY29kZWMpOwotCQkJc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkgPSAxOworCQkJc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkgPSBkZWZhdWx0X3BvbGFyaXR5OwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC00ODk1LDYgKzQ5MTUsMTEgQEAKIAkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsCiAJCQkJCSAgICAgICBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0pOwogCX0KKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJLyogc3luYyBtdXRlIExFRCAqLworCWlmIChzcGVjLT5ncGlvX2xlZCAmJiBjb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cykKKwkJY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMoY29kZWMsIDB4MDEpOworI2VuZGlmCQogCXJldHVybiAwOwogfQogCkBAIC00OTE0LDQzICs0OTM5LDI5IEBACiAJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaSwgbXV0ZWQgPSAxOwogCi0JaWYgKG5pZCA9PSAweDEwKSB7Ci0JCWlmIChzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYKLQkJICAgIEhEQV9BTVBfTVVURSkKLQkJCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG9yYW5nZSAqLwotCQllbHNlCi0JCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCi0KLQkJaWYgKCFzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSkgewotCQkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KLQkJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGkrKykgeworCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsKKwkJaWYgKCEoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBIREFfT1VUUFVULCAwKSAmCisJCSAgICAgIEhEQV9BTVBfTVVURSkpIHsKKwkJCW11dGVkID0gMDsgLyogc29tZXRoaW5nIGhlYXJkICovCisJCQlicmVhazsKIAkJfQorCX0KKwlpZiAobXV0ZWQpCisJCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG9yYW5nZSAqLworCWVsc2UKKwkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOyAvKiB3aGl0ZSAqLwogCi0JCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKLQkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAotCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKKwlpZiAoIXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KSB7CisJCS8qIExFRCBzdGF0ZSBpcyBpbnZlcnRlZCBvbiB0aGVzZSBzeXN0ZW1zICovCisJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKIAl9CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZHQ5MmhkODN4eHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQlpZiAobmlkICE9IDB4MTMpCi0JCXJldHVybiAwOwotCWlmIChzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYgSERBX0FNUF9NVVRFKQotCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIG11dGUgTEVEIG9uICovCi0JZWxzZQotCQlzcGVjLT5ncGlvX2RhdGEgJj0gfnNwZWMtPmdwaW9fbGVkOyAvKiBtdXRlIExFRCBvZmYgKi8KIAlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssIHNwZWMtPmdwaW9fZGlyLCBzcGVjLT5ncGlvX2RhdGEpOwotCiAJcmV0dXJuIDA7CiB9Ci0KICNlbmRpZgogCiBzdGF0aWMgaW50IHN0YWM5Mnh4X3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTUyNzIsNyArNTI4Myw2IEBACiAJaGRhX25pZF90IGNvbm5bU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxXTsKIAlpbnQgZXJyOwogCWludCBudW1fZGFjczsKLQloZGFfbmlkX3QgbmlkOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC01MzExLDcgKzUzMjEsMTggQEAKIAkJCQlzdGFjOTJoZDgzeHh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CiAKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTExZDc2NjY6CisJY2FzZSAweDExMWQ3NjY3OgorCWNhc2UgMHgxMTFkNzY2ODoKKwljYXNlIDB4MTExZDc2Njk6CisJCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzKTsKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzOworCQlzcGVjLT5tb25vX25pZCA9IDA7CisJCXNwZWMtPmRpZ2JlZXBfbmlkID0gMDsKKwkJc3BlYy0+bnVtX3B3cnMgPSAwOworCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDQ6CisJY2FzZSAweDExMWQ3NmQ0OgogCWNhc2UgMHgxMTFkNzYwNToKIAljYXNlIDB4MTExZDc2ZDU6CiAJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ185MkhEODNYWFhfUFdSX1JFRikKQEAgLTUzMjIsOCArNTM0MywxMCBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ185MkhEODNYWFhfSFApCi0JCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsKKwlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjLCAwKSkKKwkJc25kX3ByaW50ZCgibXV0ZSBMRUQgZ3BpbyAlZCBwb2xhcml0eSAlZFxuIiwKKwkJCQlzcGVjLT5ncGlvX2xlZCwKKwkJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CkBAIC01MzMyLDcgKzUzNTUsNyBAQAogCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7CiAJCS8qIHJlZ2lzdGVyIGNoZWNrX3Bvd2VyX3N0YXR1cyBjYWxsYmFjay4gKi8KIAkJY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMgPQotCQkJaWR0OTJoZDgzeHh4X2hwX2NoZWNrX3Bvd2VyX3N0YXR1czsKKwkJCXN0YWM5Mnh4X2hwX2NoZWNrX3Bvd2VyX3N0YXR1czsKIAl9CiAjZW5kaWYJCiAKQEAgLTUzNTIsMjQgKzUzNzUsMjEgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewotCWNhc2UgU1RBQ19ERUxMX1MxNDoKLQkJbmlkID0gMHhmOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluaWQgPSAweGU7Ci0JCWJyZWFrOwotCX0KLQotCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwKKwkvKiBkb2NraW5nIG91dHB1dCBzdXBwb3J0ICovCisJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHhGLAogCQkJCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOwotCWlmIChudW1fZGFjcyA8IDApCi0JCW51bV9kYWNzID0gU1RBQzkySEQ4M19EQUNfQ09VTlQ7Ci0KLQkvKiBzZXQgcG9ydCBYIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKLQkgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJLyogc2tpcCBub24tREFDIGNvbm5lY3Rpb25zICovCisJd2hpbGUgKG51bV9kYWNzID49IDAgJiYKKwkJCShnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIGNvbm5bbnVtX2RhY3NdKSkKKwkJCQkJIT0gQUNfV0lEX0FVRF9PVVQpKQorCQludW1fZGFjcy0tOworCS8qIHNldCBwb3J0IEUgYW5kIEYgdG8gc2VsZWN0IHRoZSBsYXN0IERBQyAqLworCWlmIChudW1fZGFjcyA+PSAwKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4RSwgMCwKIAkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4RiwgMCwKKwkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7CisJfQogCiAJY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBzdGFjOTJoZF9wcm9jX2hvb2s7CiAKQEAgLTU0MzEsNiArNTQ1MSw1NCBAQAogCQlyZXR1cm4gMDsKIH0KIAorLyogSFAgZHY3IGJhc3Mgc3dpdGNoIC0gR1BJTzUgKi8KKyNkZWZpbmUgc3RhY19ocF9iYXNzX2dwaW9faW5mbwlzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvCitzdGF0aWMgaW50IHN0YWNfaHBfYmFzc19ncGlvX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICEhKHNwZWMtPmdwaW9fZGF0YSAmIDB4MjApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YWNfaHBfYmFzc19ncGlvX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19kYXRhOworCisJZ3Bpb19kYXRhID0gKHNwZWMtPmdwaW9fZGF0YSAmIH4weDIwKSB8CisJCSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA/IDB4MjAgOiAwKTsKKwlpZiAoZ3Bpb19kYXRhID09IHNwZWMtPmdwaW9fZGF0YSkKKwkJcmV0dXJuIDA7CisJc3BlYy0+Z3Bpb19kYXRhID0gZ3Bpb19kYXRhOworCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywgc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2hwX2Jhc3Nfc3dfY3RybCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaW5mbyA9IHN0YWNfaHBfYmFzc19ncGlvX2luZm8sCisJLmdldCA9IHN0YWNfaHBfYmFzc19ncGlvX2dldCwKKwkucHV0ID0gc3RhY19ocF9iYXNzX2dwaW9fcHV0LAorfTsKKworc3RhdGljIGludCBzdGFjX2FkZF9ocF9iYXNzX3N3aXRjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKCFzdGFjX2NvbnRyb2xfbmV3KHNwZWMsICZzdGFjX2hwX2Jhc3Nfc3dfY3RybCwKKwkJCSAgICAgICJCYXNzIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMCkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3BlYy0+Z3Bpb19tYXNrIHw9IDB4MjA7CisJc3BlYy0+Z3Bpb19kaXIgfD0gMHgyMDsKKwlzcGVjLT5ncGlvX2RhdGEgfD0gMHgyMDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwpAQCAtNTYwMiw3ICs1NjcwLDYgQEAKIAkJICovCiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAxOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOwogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgU1RBQ19IUF9EVjU6CiAJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZCwgMHg5MDE3MDAxMCk7CkBAIC01NjE3LDggKzU2ODQsNiBAQAogCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKIAkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7Ci0JCS8qIG9yYW5nZS93aGl0ZSBtdXRlIGxlZCBvbiBHUElPMywgb3JhbmdlPTAsIHdoaXRlPTEgKi8KLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OwogCQlicmVhazsKIAl9CiAKQEAgLTU2NDAsNyArNTcwNSw3IEBACiAJCX0KIAl9CiAKLQlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjKSkKKwlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjLCAxKSkKIAkJc25kX3ByaW50ZCgibXV0ZSBMRUQgZ3BpbyAlZCBwb2xhcml0eSAlZFxuIiwKIAkJCQlzcGVjLT5ncGlvX2xlZCwKIAkJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CkBAIC01Njc0LDYgKzU3MzksMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBlbmFibGUgYmFzcyBvbiBIUCBkdjcgKi8KKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IFNUQUNfSFBfRFY1KSB7CisJCXVuc2lnbmVkIGludCBjYXA7CisJCWNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgMHgxLCBBQ19QQVJfR1BJT19DQVApOworCQljYXAgJj0gQUNfR1BJT19JT19DT1VOVDsKKwkJaWYgKGNhcCA+PSA2KQorCQkJc3RhY19hZGRfaHBfYmFzc19zd2l0Y2goY29kZWMpOworCX0KKwogCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gc3RhYzkyaGQ3eF9wcm9jX2hvb2s7CiAKIAlyZXR1cm4gMDsKQEAgLTYxNzIsOCArNjI0NiwxMyBAQAogIAl7IC5pZCA9IDB4ODM4NDc2YTcsIC5uYW1lID0gIlNUQUM5MjU0RCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MjA1IH0sCiAJeyAuaWQgPSAweDExMWQ3NjAzLCAubmFtZSA9ICI5MkhENzVCM1g1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3MWJ4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA0LCAubmFtZSA9ICI5MkhEODNDMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NmQ0LCAubmFtZSA9ICI5MkhEODNDMUM1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA1LCAubmFtZSA9ICI5MkhEODFCMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NmQ1LCAubmFtZSA9ICI5MkhEODFCMUM1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY2LCAubmFtZSA9ICI5MkhEODhCMyIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzY2NywgLm5hbWUgPSAiOTJIRDg4QjEiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjgsIC5uYW1lID0gIjkySEQ4OEIyIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY5LCAubmFtZSA9ICI5MkhEODhCNCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAogCXsgLmlkID0gMHgxMTFkNzYwOCwgLm5hbWUgPSAiOTJIRDc1QjJYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzFieHh9LAogCXsgLmlkID0gMHgxMTFkNzY3NCwgLm5hbWUgPSAiOTJIRDczRDFYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzN4eCB9LAogCXsgLmlkID0gMHgxMTFkNzY3NSwgLm5hbWUgPSAiOTJIRDczQzFYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzN4eCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYjcwZTI2YS4uOWRkYzM3MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCiAKKyNkZWZpbmUgTklEX01BUFBJTkcJCSgtMSkKKwogLyogYW1wIHZhbHVlcyAqLwogI2RlZmluZSBBTVBfVkFMX0lEWF9TSElGVAkxOQogI2RlZmluZSBBTVBfVkFMX0lEWF9NQVNLCSgweDBmPDwxOSkKQEAgLTE1Nyw2ICsxNTksMTkgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCB2aWFfc3BlYyAqIHZpYV9uZXdfc3BlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWM7CisKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5jb2RlYyA9IGNvZGVjOworCXJldHVybiBzcGVjOworfQorCiBzdGF0aWMgZW51bSBWSUFfSERBX0NPREVDIGdldF9jb2RlY190eXBlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXUzMiB2ZW5kb3JfaWQgPSBjb2RlYy0+dmVuZG9yX2lkOwpAQCAtNDQzLDExICs0NTgsMjcgQEAKIAlpZiAoIWtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdmlhX2Nsb25lX2NvbnRyb2woc3RydWN0IHZpYV9zcGVjICpzcGVjLAorCQkJCQkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRtcGwpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisKKwlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKKwlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOworCWlmICgha25ldykKKwkJcmV0dXJuIE5VTEw7CisJKmtuZXcgPSAqdG1wbDsKKwlrbmV3LT5uYW1lID0ga3N0cmR1cCh0bXBsLT5uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtuZXctPm5hbWUpCisJCXJldHVybiBOVUxMOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB2aWFfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTEwODgsMjQgKzExMTksOSBAQAogCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZDsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHBpbnNlbDsKIAotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzE4UzoKLQkJbmlkID0gMHgzNDsKLQkJYnJlYWs7Ci0JY2FzZSBWVDIwMDJQOgotCQluaWQgPSAweDM1OwotCQlicmVhazsKLQljYXNlIFZUMTgxMjoKLQkJbmlkID0gMHgzZDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCQlicmVhazsKLQl9CiAJLyogdXNlICEhIHRvIHRyYW5zbGF0ZSBjb25uIHNlbCAyIGZvciBWVDE3MThTICovCiAJcGluc2VsID0gISFzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwKQEAgLTExMjcsMjkgKzExNDMsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc2lkZV9tdXRlX2NoYW5uZWwoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgeworCWNhc2UgVlQxNzA4OgkJcmV0dXJuIDB4MWI7CisJY2FzZSBWVDE3MDlfMTBDSDoJcmV0dXJuIDB4Mjk7CisJY2FzZSBWVDE3MDhCXzhDSDoJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBWVDE3MDhTOgkJcmV0dXJuIDB4Mjc7CisJZGVmYXVsdDoJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIGludCB1cGRhdGVfc2lkZV9tdXRlX3N0YXR1cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAkvKiBtdXRlIHNpZGUgY2hhbm5lbCAqLwogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwYXJtID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZQogCQk/IEFNUF9PVVRfTVVURSA6IEFNUF9PVVRfVU5NVVRFOwotCWhkYV9uaWRfdCBzdzM7Ci0KLQlzd2l0Y2ggKHNwZWMtPmNvZGVjX3R5cGUpIHsKLQljYXNlIFZUMTcwODoKLQkJc3czID0gMHgxYjsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE3MDlfMTBDSDoKLQkJc3czID0gMHgyOTsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE3MDhCXzhDSDoKLQljYXNlIFZUMTcwOFM6Ci0JCXN3MyA9IDB4Mjc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXN3MyA9IDA7Ci0JCWJyZWFrOwotCX0KKwloZGFfbmlkX3Qgc3czID0gc2lkZV9tdXRlX2NoYW5uZWwoc3BlYyk7CiAKIAlpZiAoc3czKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzdzMsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC0xMTYyLDI4ICsxMTczLDExIEBACiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHBpbnNlbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJLyogR2V0IEluZGVwZW5kZW50IE1vZGUgaW5kZXggb2YgaGVhZHBob25lIHBpbiB3aWRnZXQgKi8KIAlzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZV9pbmRleCA9PSBwaW5zZWwKIAkJPyAxIDogMDsKLQotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzE4UzoKLQkJbmlkID0gMHgzNDsKLQkJcGluc2VsID0gcGluc2VsID8gMiA6IDA7IC8qIGluZGVwIEhQIHVzZSBBT1c0IChpbmRleCAyKSAqLwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgVlQyMDAyUDoKLQkJbmlkID0gMHgzNTsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE4MTI6Ci0JCW5pZCA9IDB4M2Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQkJYnJlYWs7Ci0JfQogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIHBpbnNlbCk7CiAKIAlpZiAoc3BlYy0+bXVsdGlvdXQuaHBfbmlkICYmIHNwZWMtPm11bHRpb3V0LmhwX25pZApAQCAtMTIwNywxOCArMTIwMSw1NSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2hwX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2hwX21peGVyWzJdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkluZGVwZW5kZW50IEhQIiwKLQkJLmNvdW50ID0gMSwKIAkJLmluZm8gPSB2aWFfaW5kZXBlbmRlbnRfaHBfaW5mbywKIAkJLmdldCA9IHZpYV9pbmRlcGVuZGVudF9ocF9nZXQsCiAJCS5wdXQgPSB2aWFfaW5kZXBlbmRlbnRfaHBfcHV0LAogCX0sCi0JeyB9IC8qIGVuZCAqLworCXsKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCisJCS5uYW1lID0gIkluZGVwZW5kZW50IEhQIiwKKwl9LAogfTsKIAorc3RhdGljIGludCB2aWFfaHBfYnVpbGQoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWhkYV9uaWRfdCBuaWQ7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9ocF9taXhlclswXSk7CisJaWYgKGtuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzd2l0Y2ggKHNwZWMtPmNvZGVjX3R5cGUpIHsKKwljYXNlIFZUMTcxOFM6CisJCW5pZCA9IDB4MzQ7CisJCWJyZWFrOworCWNhc2UgVlQyMDAyUDoKKwkJbmlkID0gMHgzNTsKKwkJYnJlYWs7CisJY2FzZSBWVDE4MTI6CisJCW5pZCA9IDB4M2Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKKwkJYnJlYWs7CisJfQorCisJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZDsKKwlrbmV3LT5wcml2YXRlX3ZhbHVlID0gbmlkOworCisJa25ldyA9IHZpYV9jbG9uZV9jb250cm9sKHNwZWMsICZ2aWFfaHBfbWl4ZXJbMV0pOworCWlmIChrbmV3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPnN1YmRldmljZSA9IHNpZGVfbXV0ZV9jaGFubmVsKHNwZWMpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG5vdGlmeV9hYV9wYXRoX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaW50IGk7CkBAIC0xMzc2LDcgKzE0MDcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX3NtYXJ0NTFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlclsyXSA9IHsKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCSAubmFtZSA9ICJTbWFydCA1LjEiLApAQCAtMTM4NSw5ICsxNDE2LDM2IEBACiAJIC5nZXQgPSB2aWFfc21hcnQ1MV9nZXQsCiAJIC5wdXQgPSB2aWFfc21hcnQ1MV9wdXQsCiAJIH0sCi0Je30JCQkvKiBlbmQgKi8KKwl7CisJIC5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCSAubmFtZSA9ICJTbWFydCA1LjEiLAorCX0KIH07CiAKK3N0YXRpYyBpbnQgdmlhX3NtYXJ0NTFfYnVpbGQoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWludCBpbmRleFtdID0geyBBVVRPX1BJTl9NSUMsIEFVVE9fUElOX0ZST05UX01JQywgQVVUT19QSU5fTElORSB9OworCWhkYV9uaWRfdCBuaWQ7CisJaW50IGk7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9zbWFydDUxX21peGVyWzBdKTsKKwlpZiAoa25ldyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluZGV4KTsgaSsrKSB7CisJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpbmRleFtpXV07CisJCWlmIChuaWQpIHsKKwkJCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX3NtYXJ0NTFfbWl4ZXJbMV0pOworCQkJaWYgKGtuZXcgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtuZXctPnN1YmRldmljZSA9IG5pZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4X2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE4MTksOCArMTg3Nyw5IEBACiBzdGF0aWMgaW50IHZpYV9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOwotCWludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaW50IGVyciwgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CkBAIC0xODQ1LDYgKzE5MDQsMjcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogYXNzaWduIENhcHR1cmUgU291cmNlIGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiSW5wdXQgU291cmNlIik7CisJZm9yIChpID0gMDsga2N0bCAmJiBpIDwga2N0bC0+Y291bnQ7IGkrKykgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksIHNwZWMtPm11eF9uaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIG90aGVyIG5pZC0+Y29udHJvbCBtYXBwaW5nICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgeworCQlmb3IgKGtuZXcgPSBzcGVjLT5taXhlcnNbaV07IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJaWYgKGtuZXctPmlmYWNlICE9IE5JRF9NQVBQSU5HKQorCQkJCWNvbnRpbnVlOworCQkJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsIGtuZXctPm5hbWUpOworCQkJaWYgKGtjdGwgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwKKwkJCQkJICAgICAga25ldy0+c3ViZGV2aWNlKTsKKwkJfQorCX0KKwogCS8qIGluaXQgcG93ZXIgc3RhdGVzICovCiAJc2V0X2phY2tfcG93ZXJfc3RhdGUoY29kZWMpOwogCWFuYWxvZ19sb3dfY3VycmVudF9tb2RlKGNvZGVjLCAxKTsKQEAgLTI0ODEsOSArMjU2MSw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0yNTU0LDEyICsyNjM0LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMjU5Nyw3ICsyNjc1LDYgQEAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IHZ0MTcwOF9sb29wYmFja3M7CiAjZW5kaWYKLQlzcGVjLT5jb2RlYyA9IGNvZGVjOwogCUlOSVRfREVMQVlFRF9XT1JLKCZzcGVjLT52dDE3MDhfaHBfd29yaywgdnQxNzA4X3VwZGF0ZV9ocF9qYWNrX3N0YXRlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMTAsOSArMzA4Nyw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0zMDMyLDEyICszMTA5LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJZXJyID0gdnQxNzA5X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewogCQl2aWFfZnJlZShjb2RlYyk7CkBAIC0zMTI2LDEyICszMjAxLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJZXJyID0gdnQxNzA5X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewogCQl2aWFfZnJlZShjb2RlYyk7CkBAIC0zNTgxLDkgKzM2NTQsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMzYwNSwxMiArMzY3OCwxMCBAQAogCWlmIChnZXRfY29kZWNfdHlwZShjb2RlYykgPT0gVlQxNzA4QkNFKQogCQlyZXR1cm4gcGF0Y2hfdnQxNzA4Uyhjb2RlYyk7CiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDhCX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMzY1NywxMiArMzcyOCwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOEJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00MDcxLDkgKzQxNDAsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDEwMywxMiArNDE3MiwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOFNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00NDQzLDcgKzQ1MTAsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC00NDY0LDEyICs0NTMxLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzAyX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNDg2NSw5ICs0OTMwLDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ4ODgsMTIgKzQ5NTMsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MThTX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNTAxNCw2ICs1MDc3LDcgQEAKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCSAubmFtZSA9ICJEaWdpdGFsIE1pYyBDYXB0dXJlIFN3aXRjaCIsCisJIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgyNiwKIAkgLmNvdW50ID0gMSwKIAkgLmluZm8gPSB2dDE3MTZzX2RtaWNfaW5mbywKIAkgLmdldCA9IHZ0MTcxNnNfZG1pY19nZXQsCkBAIC01MzYxLDkgKzU0MjUsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNTM4NCwxMiArNTQ0OCwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcxNlNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC01NzE5LDcgKzU3ODEsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC01NzQxLDEyICs1ODAzLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQyMDAyUF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTYwNzAsNyArNjEzMCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYwOTIsMTIgKzYxNTIsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE4MTJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggYzdjZmY2Zi4uNGZjNmQ4YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR4cl9lbmFibGUsICJFbmFibGUgRFhSIHN1cHBvcnQgZm9yIFRlcnJhdGVjIERNWDZGSVJFLiIpOwogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfaWNlMTcxMl9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoSUNFLCBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyKSwgMCB9LCAgIC8qIElDRTE3MTIgKi8KIAl7IDAsIH0KIH07CkBAIC0xMTgwLDYgKzExODAsMTAgQEAKIAlzbmRfcGNtX3NldF9zeW5jKHN1YnN0cmVhbSk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhydW50aW1lLCAwLCAzMiwgMjQpOwogCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmaHdfY29uc3RyYWludHNfcmF0ZXMpOworCWlmIChpc19wcm9fcmF0ZV9sb2NrZWQoaWNlKSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IFBST19SQVRFX0RFRkFVTFQ7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gUFJPX1JBVEVfREVGQVVMVDsKKwl9CiAKIAlpZiAoaWNlLT5zcGRpZi5vcHMub3BlbikKIAkJaWNlLT5zcGRpZi5vcHMub3BlbihpY2UsIHN1YnN0cmVhbSk7CkBAIC0xMTk3LDYgKzEyMDEsMTEgQEAKIAlzbmRfcGNtX3NldF9zeW5jKHN1YnN0cmVhbSk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhydW50aW1lLCAwLCAzMiwgMjQpOwogCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmaHdfY29uc3RyYWludHNfcmF0ZXMpOworCWlmIChpc19wcm9fcmF0ZV9sb2NrZWQoaWNlKSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IFBST19SQVRFX0RFRkFVTFQ7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gUFJPX1JBVEVfREVGQVVMVDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGFlMjkwNzMuLmMxNDk4ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogCiAvKiBCb3RoIFZUMTcyMCBhbmQgVlQxNzI0IGhhdmUgdGhlIHNhbWUgUENJIElEcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92dDE3MjRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3Z0MTcyNF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoSUNFLCBQQ0lfREVWSUNFX0lEX1ZUMTcyNCksIDAgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IGI5OTAxNDMuLjY0MzNlNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC00MjAsNyArNDIwLDcgQEAKIAl1MzIgaW50X3N0YV9tYXNrOwkJLyogaW50ZXJydXB0IHN0YXR1cyBtYXNrICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9pbnRlbDh4MF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQxNSksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUFBICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDI1KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyOTAxQUIgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0NDUpLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFCQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDllN2QxMmUuLjEzY2VjMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCXVuc2lnbmVkIGludCBwY21fcG9zX3NoaWZ0OwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pbnRlbDh4MG1faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ludGVsOHgwbV9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQxNiksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUFBICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDI2KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyOTAxQUIgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0NDYpLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFCQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA3Y2MzOGExLi42ZDc5NTcwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBLb3JnIDEyMTIgc291bmRjYXJkLiIpOwogTU9EVUxFX0FVVEhPUigiSGFyb2xkbyBHYW1hbCA8Z2FtYWxAYWx0ZXJuZXguY29tLmJyPiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2tvcmcxMjEyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9rb3JnMTIxMl9pZHMpID0gewogCXsKIAkJLnZlbmRvcgkgICA9IDB4MTBiNSwKIAkJLmRldmljZQkgICA9IDB4OTA2ZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9seDY0NjRlcy9seDY0NjRlcy5jIGIvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMKaW5kZXggMTFiOGM2NS4uMGNjYTU2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMKKysrIGIvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9MWDY0NjRFUwkJUENJX0RFVklDRV9JRF9QTFhfOTA1NgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2x4NjQ2NGVzX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9seDY0NjRlc19pZHMpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfTFg2NDY0RVMpLAogCSAgLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfRElHSUdSQU0sCiAJICAuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9JRF9ESUdJR1JBTV9MWDY0NjRFU19TRVJJQUxfU1VCU1lTVEVNCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDc1MjgzZmJiLi5iNjRlNzgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtODYxLDcgKzg2MSw3IEBACiAvKgogICogcGNpIGlkcwogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX20zX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9tM19pZHMpID0gewogCXtQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYTgzZDE5Ni4uN2U4ZTdkYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC02MCw3ICs2MCw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbWl4YXJ0X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9taXhhcnRfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKE1PVE9ST0xBLCAweDAwMDMpLCAwLCB9LCAvKiBNQzgyNDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IDk3YTA3MzEuLjVhNjA0OTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIC8qCiAgKiBQQ0kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbm0yNTZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX25tMjU2X2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKE5FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8pLCAwfSwKIAl7UENJX1ZERVZJQ0UoTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTyksIDB9LAogCXtQQ0lfVkRFVklDRShORU9NQUdJQywgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8pLCAwfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCmluZGV4IDM4OTk0MWNmLi5hY2Q4ZjE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiBzbmQtaGlmaWVyLW9ianMgOj0gaGlmaWVyLm8KIHNuZC1veHlnZW4tb2JqcyA6PSBveHlnZW4ubwogc25kLXZpcnR1b3NvLW9ianMgOj0gdmlydHVvc28ubyB4b25hcl9saWIubyBcCi0JeG9uYXJfcGNtMTc5eC5vIHhvbmFyX2NzNDN4eC5vIHhvbmFyX2hkbWkubworCXhvbmFyX3BjbTE3OXgubyB4b25hcl9jczQzeHgubyB4b25hcl93bTg3eDYubyB4b25hcl9oZG1pLm8KIAogb2JqLSQoQ09ORklHX1NORF9PWFlHRU5fTElCKSArPSBzbmQtb3h5Z2VuLWxpYi5vCiBvYmotJChDT05GSUdfU05EX0hJRklFUikgKz0gc25kLWhpZmllci5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwppbmRleCBlM2MyMjliLi41YTg3ZDY4MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00OCw3ICs0OCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhpZmllcl9pZHMpID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGFjYmVkZWIuLjI4OWNiNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtNzIsNyArNzIsNyBAQAogCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShveHlnZW5faWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTBiMCwgMHgwMjE4KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwYjAsIDB4MDIxOSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2YWNjYWY5Li5mMDNhMmYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC00MCw3ICs0MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhvbmFyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeG9uYXJfaWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgyNjkpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4Mjc1KSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNykgfSwKQEAgLTQ5LDYgKzQ5LDcgQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1ZCkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzOGUpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CkBAIC02MSw2ICs2Miw4IEBACiAJCXJldHVybiAwOwogCWlmIChnZXRfeG9uYXJfY3M0M3h4X21vZGVsKGNoaXAsIGlkKSA+PSAwKQogCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3hvbmFyX3dtODd4Nl9tb2RlbChjaGlwLCBpZCkgPj0gMCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vd204NzY2LmggYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgV004NzY2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004NzY2X0hfSU5DTFVERUQKKworI2RlZmluZSBXTTg3NjZfTERBMQkJMHgwMAorI2RlZmluZSBXTTg3NjZfUkRBMQkJMHgwMQorI2RlZmluZSBXTTg3NjZfREFDX0NUUkwJCTB4MDIKKyNkZWZpbmUgV004NzY2X0lOVF9DVFJMCQkweDAzCisjZGVmaW5lIFdNODc2Nl9MREEyCQkweDA0CisjZGVmaW5lIFdNODc2Nl9SREEyCQkweDA1CisjZGVmaW5lIFdNODc2Nl9MREEzCQkweDA2CisjZGVmaW5lIFdNODc2Nl9SREEzCQkweDA3CisjZGVmaW5lIFdNODc2Nl9NQVNUREEJCTB4MDgKKyNkZWZpbmUgV004NzY2X0RBQ19DVFJMMgkweDA5CisjZGVmaW5lIFdNODc2Nl9EQUNfQ1RSTDMJMHgwYQorI2RlZmluZSBXTTg3NjZfTVVURTEJCTB4MGMKKyNkZWZpbmUgV004NzY2X01VVEUyCQkweDBmCisjZGVmaW5lIFdNODc2Nl9SRVNFVAkJMHgxZgorCisvKiBMREF4L1JEQXgvTUFTVERBICovCisjZGVmaW5lIFdNODc2Nl9BVFRfTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004NzY2X1VQREFURQkJMHgxMDAKKy8qIERBQ19DVFJMICovCisjZGVmaW5lIFdNODc2Nl9NVVRFQUxMCQkweDAwMQorI2RlZmluZSBXTTg3NjZfREVFTVBBTEwJCTB4MDAyCisjZGVmaW5lIFdNODc2Nl9QV0ROCQkweDAwNAorI2RlZmluZSBXTTg3NjZfQVRDCQkweDAwOAorI2RlZmluZSBXTTg3NjZfSVpECQkweDAxMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9NQVNLCTB4MDYwCisjZGVmaW5lIFdNODc2Nl9QTF9MRUZUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004NzY2X1BMX0xFRlRfTEVGVAkweDAyMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9SSUdIVAkweDA0MAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9MUk1JWAkweDA2MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTUFTSwkweDE4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTVVURQkweDAwMAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTEVGVAkweDA4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfUklHSFQJMHgxMDAKKyNkZWZpbmUgV004NzY2X1BMX1JJR0hUX0xSTUlYCTB4MTgwCisvKiBJTlRfQ1RSTCAqLworI2RlZmluZSBXTTg3NjZfRk1UX01BU0sJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9GTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004NzY2X0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NjZfRk1UX0kyUwkJMHgwMDIKKyNkZWZpbmUgV004NzY2X0ZNVF9EU1AJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9MUlAJCTB4MDA0CisjZGVmaW5lIFdNODc2Nl9CQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc2Nl9JV0xfTUFTSwkJMHgwMzAKKyNkZWZpbmUgV004NzY2X0lXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004NzY2X0lXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004NzY2X0lXTF8yNAkJMHgwMjAKKyNkZWZpbmUgV004NzY2X0lXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004NzY2X1BIQVNFX01BU0sJMHgxYzAKKy8qIERBQ19DVFJMMiAqLworI2RlZmluZSBXTTg3NjZfWkNECQkweDAwMQorI2RlZmluZSBXTTg3NjZfRFpGTV9NQVNLCTB4MDA2CisjZGVmaW5lIFdNODc2Nl9ETVVURV9NQVNLCTB4MDM4CisjZGVmaW5lIFdNODc2Nl9ERUVNUF9NQVNLCTB4MWMwCisvKiBEQUNfQ1RSTDMgKi8KKyNkZWZpbmUgV004NzY2X0RBQ1BEX01BU0sJMHgwMGUKKyNkZWZpbmUgV004NzY2X1BXUkROQUxMCQkweDAxMAorI2RlZmluZSBXTTg3NjZfTVMJCTB4MDIwCisjZGVmaW5lIFdNODc2Nl9SQVRFX01BU0sJMHgxYzAKKyNkZWZpbmUgV004NzY2X1JBVEVfMTI4CQkweDAwMAorI2RlZmluZSBXTTg3NjZfUkFURV8xOTIJCTB4MDQwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzI1NgkJMHgwODAKKyNkZWZpbmUgV004NzY2X1JBVEVfMzg0CQkweDBjMAorI2RlZmluZSBXTTg3NjZfUkFURV81MTIJCTB4MTAwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzc2OAkJMHgxNDAKKy8qIE1VVEUxICovCisjZGVmaW5lIFdNODc2Nl9NUEQxCQkweDA0MAorLyogTVVURTIgKi8KKyNkZWZpbmUgV004NzY2X01QRDIJCTB4MDIwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi93bTg3NzYuaCBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKQEAgLTAsMCArMSwxNzcgQEAKKyNpZm5kZWYgV004Nzc2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004Nzc2X0hfSU5DTFVERUQKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgbmFtZXMgYXJlIGZyb206CisgKiB3bTg3NzYuaCAgLS0gIFdNODc3NiBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBXTTg3NzZfSFBMVk9MCQkweDAwCisjZGVmaW5lIFdNODc3Nl9IUFJWT0wJCTB4MDEKKyNkZWZpbmUgV004Nzc2X0hQTUFTVEVSCQkweDAyCisjZGVmaW5lIFdNODc3Nl9EQUNMVk9MCQkweDAzCisjZGVmaW5lIFdNODc3Nl9EQUNSVk9MCQkweDA0CisjZGVmaW5lIFdNODc3Nl9EQUNNQVNURVIJMHgwNQorI2RlZmluZSBXTTg3NzZfUEhBU0VTV0FQCTB4MDYKKyNkZWZpbmUgV004Nzc2X0RBQ0NUUkwxCQkweDA3CisjZGVmaW5lIFdNODc3Nl9EQUNNVVRFCQkweDA4CisjZGVmaW5lIFdNODc3Nl9EQUNDVFJMMgkJMHgwOQorI2RlZmluZSBXTTg3NzZfREFDSUZDVFJMCTB4MGEKKyNkZWZpbmUgV004Nzc2X0FEQ0lGQ1RSTAkweDBiCisjZGVmaW5lIFdNODc3Nl9NU1RSQ1RSTAkJMHgwYworI2RlZmluZSBXTTg3NzZfUFdSRE9XTgkJMHgwZAorI2RlZmluZSBXTTg3NzZfQURDTFZPTAkJMHgwZQorI2RlZmluZSBXTTg3NzZfQURDUlZPTAkJMHgwZgorI2RlZmluZSBXTTg3NzZfQUxDQ1RSTDEJCTB4MTAKKyNkZWZpbmUgV004Nzc2X0FMQ0NUUkwyCQkweDExCisjZGVmaW5lIFdNODc3Nl9BTENDVFJMMwkJMHgxMgorI2RlZmluZSBXTTg3NzZfTk9JU0VHQVRFCTB4MTMKKyNkZWZpbmUgV004Nzc2X0xJTUlURVIJCTB4MTQKKyNkZWZpbmUgV004Nzc2X0FEQ01VWAkJMHgxNQorI2RlZmluZSBXTTg3NzZfT1VUTVVYCQkweDE2CisjZGVmaW5lIFdNODc3Nl9SRVNFVAkJMHgxNworCisKKy8qIEhQTFZPTC9IUFJWT0wvSFBNQVNURVIgKi8KKyNkZWZpbmUgV004Nzc2X0hQQVRUX01BU0sJMHgwN2YKKyNkZWZpbmUgV004Nzc2X0hQWkNFTgkJMHgwODAKKyNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAKKworLyogREFDTFZPTC9EQUNSVk9ML0RBQ01BU1RFUiAqLworI2RlZmluZSBXTTg3NzZfREFUVF9NQVNLCTB4MGZmCisvKiNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAqLworCisvKiBQSEFTRVNXQVAgKi8KKyNkZWZpbmUgV004Nzc2X1BIX01BU0sJCTB4MDAzCisKKy8qIERBQ0NUUkwxICovCisjZGVmaW5lIFdNODc3Nl9EWkNFTgkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0FUQwkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0laRAkJMHgwMDQKKyNkZWZpbmUgV004Nzc2X1RPRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfUExfTEVGVF9NVVRFCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9QTF9MRUZUX0xFRlQJMHgwMTAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfUklHSFQJMHgwMjAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTFJNSVgJMHgwMzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01BU0sJMHgwYzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX0xFRlQJMHgwNDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX1JJR0hUCTB4MDgwCisjZGVmaW5lIFdNODc3Nl9QTF9SSUdIVF9MUk1JWAkweDBjMAorCisvKiBEQUNNVVRFICovCisjZGVmaW5lIFdNODc3Nl9ETVVURQkJMHgwMDEKKworLyogREFDQ1RSTDIgKi8KKyNkZWZpbmUgV004Nzc2X0RFRU1QSAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0RaRk1fTUFTSwkweDAwNgorI2RlZmluZSBXTTg3NzZfRFpGTV9OT05FCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EWkZNX0xSCQkweDAwMgorI2RlZmluZSBXTTg3NzZfRFpGTV9CT1RICTB4MDA0CisjZGVmaW5lIFdNODc3Nl9EWkZNX0VJVEhFUgkweDAwNgorCisvKiBEQUNJRkNUUkwgKi8KKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9NQVNLCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9EQUNGTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NzZfREFDRk1UX0kyUwkweDAwMgorI2RlZmluZSBXTTg3NzZfREFDRk1UX0RTUAkweDAwMworI2RlZmluZSBXTTg3NzZfREFDTFJQCQkweDAwNAorI2RlZmluZSBXTTg3NzZfREFDQkNQCQkweDAwOAorI2RlZmluZSBXTTg3NzZfREFDV0xfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMTYJCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004Nzc2X0RBQ1dMXzI0CQkweDAyMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMzIJCTB4MDMwCisKKy8qIEFEQ0lGQ1RSTCAqLworI2RlZmluZSBXTTg3NzZfQURDRk1UX01BU0sJMHgwMDMKKyNkZWZpbmUgV004Nzc2X0FEQ0ZNVF9SSlVTVAkweDAwMAorI2RlZmluZSBXTTg3NzZfQURDRk1UX0xKVVNUCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfSTJTCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfRFNQCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9BRENMUlAJCTB4MDA0CisjZGVmaW5lIFdNODc3Nl9BRENCQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9BRENXTF9NQVNLCTB4MDMwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0FEQ1dMXzIwCQkweDAxMAorI2RlZmluZSBXTTg3NzZfQURDV0xfMjQJCTB4MDIwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004Nzc2X0FEQ01DTEsJCTB4MDQwCisjZGVmaW5lIFdNODc3Nl9BRENIUEQJCTB4MTAwCisKKy8qIE1TVFJDVFJMICovCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFX01BU0sJMHgwMDcKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfMjU2CTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFXzM4NAkweDAwMworI2RlZmluZSBXTTg3NzZfQURDUkFURV81MTIJMHgwMDQKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfNzY4CTB4MDA1CisjZGVmaW5lIFdNODc3Nl9BRENPU1IJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFX01BU0sJMHgwNzAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMTI4CTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzE5MgkweDAxMAorI2RlZmluZSBXTTg3NzZfREFDUkFURV8yNTYJMHgwMjAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMzg0CTB4MDMwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzUxMgkweDA0MAorI2RlZmluZSBXTTg3NzZfREFDUkFURV83NjgJMHgwNTAKKyNkZWZpbmUgV004Nzc2X0RBQ01TCQkweDA4MAorI2RlZmluZSBXTTg3NzZfQURDTVMJCTB4MTAwCisKKy8qIFBXUkRPV04gKi8KKyNkZWZpbmUgV004Nzc2X1BEV04JCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENQRAkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0RBQ1BECQkweDAwNAorI2RlZmluZSBXTTg3NzZfSFBQRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X0FJTlBECQkweDA0MAorCisvKiBBRENMVk9ML0FEQ1JWT0wgKi8KKyNkZWZpbmUgV004Nzc2X0FHTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004Nzc2X1pDQQkJMHgxMDAKKworLyogQUxDQ1RSTDEgKi8KKyNkZWZpbmUgV004Nzc2X0xDVF9NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfTUFYR0FJTl9NQVNLCTB4MDcwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9NQVNLCTB4MTgwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9MSU1JVEVSCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfUklHSFQgMHgwODAKKyNkZWZpbmUgV004Nzc2X0xDU0VMX0FMQ19MRUZUCTB4MTAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPCTB4MTgwCisKKy8qIEFMQ0NUUkwyICovCisjZGVmaW5lIFdNODc3Nl9ITERfTUFTSwkJMHgwMGYKKyNkZWZpbmUgV004Nzc2X0FMQ1pDCQkweDA4MAorI2RlZmluZSBXTTg3NzZfTENFTgkJMHgxMDAKKworLyogQUxDQ1RSTDMgKi8KKyNkZWZpbmUgV004Nzc2X0FUS19NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfRENZX01BU0sJCTB4MGYwCisKKy8qIE5PSVNFR0FURSAqLworI2RlZmluZSBXTTg3NzZfTkdBVAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X05HVEhfTUFTSwkweDAxYworCisvKiBMSU1JVEVSICovCisjZGVmaW5lIFdNODc3Nl9NQVhBVFRFTl9NQVNLCTB4MDBmCisjZGVmaW5lIFdNODc3Nl9UUkFOV0lOX01BU0sJMHgwNzAKKworLyogQURDTVVYICovCisjZGVmaW5lIFdNODc3Nl9BTVhfTUFTSwkJMHgwMWYKKyNkZWZpbmUgV004Nzc2X01VVEVSQQkJMHgwNDAKKyNkZWZpbmUgV004Nzc2X01VVEVMQQkJMHgwODAKKyNkZWZpbmUgV004Nzc2X0xSQk9USAkJMHgxMDAKKworLyogT1VUTVVYICovCisjZGVmaW5lIFdNODc3Nl9NWF9EQUMJCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9NWF9BVVgJCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9NWF9CWVBBU1MJMHgwMDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmggYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmgKaW5kZXggODliM2VkOC4uYjM1MzQzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hci5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXIuaApAQCAtMzUsNiArMzUsOCBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBpbnQgZ2V0X3hvbmFyX2NzNDN4eF9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK2ludCBnZXRfeG9uYXJfd204N3g2X21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogCiAvKiBIRE1JIGhlbHBlciBmdW5jdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1NGRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKQEAgLTAsMCArMSwxMDIxIEBACisvKgorICogY2FyZCBkcml2ZXIgZm9yIG1vZGVscyB3aXRoIFdNODc3Ni9XTTg3NjYgREFDcyAoWG9uYXIgRFMpCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIFhvbmFyIERTCisgKiAtLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogU1BJIDAgLT4gV004NzY2IChzdXJyb3VuZCwgY2VudGVyL0xGRSwgYmFjaykKKyAqIFNQSSAxIC0+IFdNODc3NiAoZnJvbnQsIGlucHV0KQorICoKKyAqIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CisgKiBHUElPIDYgLT4gcm91dGUgaW5wdXQgamFjayB0byBpbnB1dCAxLzIgKDEvMCkKKyAqIEdQSU8gNyAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDggLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgInhvbmFyLmgiCisjaW5jbHVkZSAid204Nzc2LmgiCisjaW5jbHVkZSAid204NzY2LmgiCisKKyNkZWZpbmUgR1BJT19EU19IUF9ERVRFQ1QJMHgwMDEwCisjZGVmaW5lIEdQSU9fRFNfSU5QVVRfUk9VVEUJMHgwMDQwCisjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0VOQUJMRQkweDAxODAKKworI2RlZmluZSBMQ19DT05UUk9MX0xJTUlURVIJMHg0MDAwMDAwMAorI2RlZmluZSBMQ19DT05UUk9MX0FMQwkJMHgyMDAwMDAwMAorCitzdHJ1Y3QgeG9uYXJfd204N3g2IHsKKwlzdHJ1Y3QgeG9uYXJfZ2VuZXJpYyBnZW5lcmljOworCXUxNiB3bTg3NzZfcmVnc1sweDE3XTsKKwl1MTYgd204NzY2X3JlZ3NbMHgxMF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqbGNfY29udHJvbHNbMTNdOworfTsKKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlX3NwaShjaGlwLCBPWFlHRU5fU1BJX1RSSUdHRVIgfAorCQkJIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfMiB8CisJCQkgT1hZR0VOX1NQSV9DTE9DS18xNjAgfAorCQkJICgxIDw8IE9YWUdFTl9TUElfQ09ERUNfU0hJRlQpIHwKKwkJCSBPWFlHRU5fU1BJX0NFTl9MQVRDSF9DTE9DS19MTywKKwkJCSAocmVnIDw8IDkpIHwgdmFsdWUpOworCWlmIChyZWcgPCBBUlJBWV9TSVpFKGRhdGEtPndtODc3Nl9yZWdzKSkgeworCQlpZiAocmVnID49IFdNODc3Nl9IUExWT0wgfHwgcmVnIDw9IFdNODc3Nl9EQUNNQVNURVIpCisJCQl2YWx1ZSAmPSB+V004Nzc2X1VQREFURTsKKwkJZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSA9IHZhbHVlOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlX2NhY2hlZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWlmIChyZWcgPj0gQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykgfHwKKwkgICAgdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg3NjZfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiB8CisJCQkgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8yIHwKKwkJCSBPWFlHRU5fU1BJX0NMT0NLXzE2MCB8CisJCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAorCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAorCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7CisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpKQorCQlkYXRhLT53bTg3NjZfcmVnc1tyZWddID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc2Nl93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlpZiAocmVnID49IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpIHx8CisJICAgIHZhbHVlICE9IGRhdGEtPndtODc2Nl9yZWdzW3JlZ10pIHsKKwkJaWYgKChyZWcgPj0gV004NzY2X0xEQTEgJiYgcmVnIDw9IFdNODc2Nl9SREExKSB8fAorCQkgICAgKHJlZyA+PSBXTTg3NjZfTERBMiAmJiByZWcgPD0gV004NzY2X01BU1REQSkpCisJCQl2YWx1ZSAmPSB+V004NzY2X1VQREFURTsKKwkJd204NzY2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X1JFU0VULCAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0NUUkwxLCBXTTg3NzZfRFpDRU4gfAorCQkgICAgIFdNODc3Nl9QTF9MRUZUX0xFRlQgfCBXTTg3NzZfUExfUklHSFRfUklHSFQpOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTVVURSwgY2hpcC0+ZGFjX211dGUgPyBXTTg3NzZfRE1VVEUgOiAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0lGQ1RSTCwKKwkJICAgICBXTTg3NzZfREFDRk1UX0xKVVNUIHwgV004Nzc2X0RBQ1dMXzI0KTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0lGQ1RSTCwKKwkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X01TVFJDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9QV1JET1dOLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfUFdSRE9XTl0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9IUFJWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdIHwKKwkJICAgICBXTTg3NzZfVVBEQVRFKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0xWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9BRENSVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDTVVYLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDTVVYXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9EQUNMVk9MLCBjaGlwLT5kYWNfdm9sdW1lWzBdKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsIGNoaXAtPmRhY192b2x1bWVbMV0gfCBXTTg3NzZfVVBEQVRFKTsKK30KKworc3RhdGljIHZvaWQgd204NzY2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SRVNFVCwgMCk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9JTlRfQ1RSTCwgV004NzY2X0ZNVF9MSlVTVCB8IFdNODc2Nl9JV0xfMjQpOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfREFDX0NUUkwyLAorCQkgICAgIFdNODc2Nl9aQ0QgfCAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X0xEQTEsIGNoaXAtPmRhY192b2x1bWVbMl0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfUkRBMSwgY2hpcC0+ZGFjX3ZvbHVtZVszXSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9MREEyLCBjaGlwLT5kYWNfdm9sdW1lWzRdKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X1JEQTIsIGNoaXAtPmRhY192b2x1bWVbNV0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfTERBMywgY2hpcC0+ZGFjX3ZvbHVtZVs2XSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SREEzLCBjaGlwLT5kYWNfdm9sdW1lWzddIHwgV004NzY2X1VQREFURSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBSVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSA9CisJCVdNODc3Nl9BRENGTVRfTEpVU1QgfCBXTTg3NzZfQURDV0xfMjQgfCBXTTg3NzZfQURDTUNMSzsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfTVNUUkNUUkxdID0KKwkJV004Nzc2X0FEQ1JBVEVfMjU2IHwgV004Nzc2X0RBQ1JBVEVfMjU2OworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9QV1JET1dOXSA9IFdNODc3Nl9IUFBEOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENSVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdID0gMHgwMDE7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5nZW5lcmljLmFudGlfcG9wX2RlbGF5ID0gMzAwOworCWRhdGEtPmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RTX09VVFBVVF9FTkFCTEU7CisKKwl3bTg3NzZfaW5pdChjaGlwKTsKKwl3bTg3NjZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisKKwlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EU19JTlBVVF9ST1VURSwKKwkJCSAgICAgIEdQSU9fRFNfSFBfREVURUNUIHwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0ssIEdQSU9fRFNfSFBfREVURUNUKTsKKwljaGlwLT5pbnRlcnJ1cHRfbWFzayB8PSBPWFlHRU5fSU5UX0dQSU87CisKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIldNODc3NiIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NjYiKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZHNfY2xlYW51cChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCXdtODc2Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfYWRjX2hhcmR3YXJlX2ZpbHRlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKQoreworCWlmIChjaGFubmVsID09IFBDTV9BKSB7CisJCWhhcmR3YXJlLT5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCQloYXJkd2FyZS0+cmF0ZV9tYXggPSA5NjAwMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3eDZfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3NzZfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJdTE2IHJlZzsKKworCXJlZyA9IFdNODc3Nl9BRENSQVRFXzI1NiB8IFdNODc3Nl9EQUNSQVRFXzI1NjsKKwlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA+IDQ4MDAwKQorCQlyZWcgfD0gV004Nzc2X0FEQ09TUjsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl92b2x1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b19jaGFuZ2U7CisKKwlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVswXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzFdKSB7CisJCWlmIChjaGlwLT5kYWNfdm9sdW1lWzBdICE9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNMVk9MXSB8fAorCQkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPSBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDUlZPTF0pIHsKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTUFTVEVSLAorCQkJCSAgICAgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdID0gY2hpcC0+ZGFjX3ZvbHVtZVswXTsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNSVk9MXSA9IGNoaXAtPmRhY192b2x1bWVbMF07CisJCX0KKwl9IGVsc2UgeworCQl0b19jaGFuZ2UgPSAoY2hpcC0+ZGFjX3ZvbHVtZVswXSAhPQorCQkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDTFZPTF0pIDw8IDA7CisJCXRvX2NoYW5nZSB8PSAoY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPQorCQkJICAgICAgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdKSA8PCAxOworCQlpZiAodG9fY2hhbmdlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTFZPTCwgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8CisJCQkJICAgICAoKHRvX2NoYW5nZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX2NoYW5nZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsCisJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzFdIHwgV004Nzc2X1VQREFURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X3ZvbHVtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0YXRpYyBjb25zdCB1OCB3bTg3NjZfcmVnc1s2XSA9IHsKKwkJV004NzY2X0xEQTEsIFdNODc2Nl9SREExLAorCQlXTTg3NjZfTERBMiwgV004NzY2X1JEQTIsCisJCVdNODc2Nl9MREEzLCBXTTg3NjZfUkRBMywKKwl9OworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXU4IHRvX2NoYW5nZTsKKworCXVwZGF0ZV93bTg3NzZfdm9sdW1lKGNoaXApOworCWlmIChjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbM10gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzRdICYmCisJICAgIGNoaXAtPmRhY192b2x1bWVbMl0gPT0gY2hpcC0+ZGFjX3ZvbHVtZVs1XSAmJgorCSAgICBjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbNl0gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzddKSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVsyXSAhPQorCQkJICAgIGRhdGEtPndtODc2Nl9yZWdzW3dtODc2Nl9yZWdzW2ldXSkKKwkJCQl0b19jaGFuZ2UgPSAxOworCQlpZiAodG9fY2hhbmdlKSB7CisJCQl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X01BU1REQSwKKwkJCQkgICAgIGNoaXAtPmRhY192b2x1bWVbMl0gfCBXTTg3NjZfVVBEQVRFKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQkJZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dID0KKwkJCQkJY2hpcC0+ZGFjX3ZvbHVtZVsyXTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQl0b19jaGFuZ2UgfD0gKGNoaXAtPmRhY192b2x1bWVbMiArIGldICE9CisJCQkJICAgICAgZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dKSA8PCBpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKQorCQkJaWYgKHRvX2NoYW5nZSAmICgxIDw8IGkpKQorCQkJCXdtODc2Nl93cml0ZShjaGlwLCB3bTg3NjZfcmVnc1tpXSwKKwkJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzIgKyBpXSB8CisJCQkJCSAgICAgKCh0b19jaGFuZ2UgJiAoMHgzZSA8PCBpKSkKKwkJCQkJICAgICAgPyAwIDogV004NzY2X1VQREFURSkpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl9tdXRlKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfREFDTVVURSwKKwkJCSAgICBjaGlwLT5kYWNfbXV0ZSA/IFdNODc3Nl9ETVVURSA6IDApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X211dGUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl1cGRhdGVfd204Nzc2X211dGUoY2hpcCk7CisJd204NzY2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NjZfREFDX0NUUkwyLCBXTTg3NjZfWkNEIHwKKwkJCSAgICAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfZ3Bpb19jaGFuZ2VkKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJdTE2IGJpdHM7CisKKwliaXRzID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSFAgZGV0ZWN0OiAlZFxuIiwgISEoYml0cyAmIEdQSU9fRFNfSFBfREVURUNUKSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2JpdF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXUxNiBiaXQgPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CisJdW5zaWduZWQgaW50IHJlZ19pbmRleCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKwlib29sIGludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJKChkYXRhLT53bTg3NzZfcmVnc1tyZWdfaW5kZXhdICYgYml0KSAhPSAwKSBeIGludmVydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfYml0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdTE2IGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKKwl1MTYgcmVnX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWdfaW5kZXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJYm9vbCBpbnZlcnQgPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDE7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnX3ZhbHVlID0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XSAmIH5iaXQ7CisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIF4gaW52ZXJ0KQorCQlyZWdfdmFsdWUgfD0gYml0OworCWNoYW5nZWQgPSByZWdfdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XTsKKwlpZiAoY2hhbmdlZCkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZ19pbmRleCwgcmVnX3ZhbHVlKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaGxkWzE2XSA9IHsKKwkJIjAgbXMiLCAiMi42NyBtcyIsICI1LjMzIG1zIiwgIjEwLjYgbXMiLAorCQkiMjEuMyBtcyIsICI0Mi43IG1zIiwgIjg1LjMgbXMiLCAiMTcxIG1zIiwKKwkJIjM0MSBtcyIsICI2ODMgbXMiLCAiMS4zNyBzIiwgIjIuNzMgcyIsCisJCSI1LjQ2IHMiLCAiMTAuOSBzIiwgIjIxLjggcyIsICI0My43IHMiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGF0a19saW1bMTFdID0geworCQkiMC4yNSBtcyIsICIwLjUgbXMiLCAiMSBtcyIsICIyIG1zIiwKKwkJIjQgbXMiLCAiOCBtcyIsICIxNiBtcyIsICIzMiBtcyIsCisJCSI2NCBtcyIsICIxMjggbXMiLCAiMjU2IG1zIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhdGtfYWxjWzExXSA9IHsKKwkJIjguNDAgbXMiLCAiMTYuOCBtcyIsICIzMy42IG1zIiwgIjY3LjIgbXMiLAorCQkiMTM0IG1zIiwgIjI2OSBtcyIsICI1MzggbXMiLCAiMS4wOCBzIiwKKwkJIjIuMTUgcyIsICI0LjMgcyIsICI4LjYgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGN5X2xpbVsxMV0gPSB7CisJCSIxLjIgbXMiLCAiMi40IG1zIiwgIjQuOCBtcyIsICI5LjYgbXMiLAorCQkiMTkuMiBtcyIsICIzOC40IG1zIiwgIjc2LjggbXMiLCAiMTU0IG1zIiwKKwkJIjMwNyBtcyIsICI2MTQgbXMiLCAiMS4yMyBzIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY3lfYWxjWzExXSA9IHsKKwkJIjMzLjUgbXMiLCAiNjcuMCBtcyIsICIxMzQgbXMiLCAiMjY4IG1zIiwKKwkJIjUzNiBtcyIsICIxLjA3IHMiLCAiMi4xNCBzIiwgIjQuMjkgcyIsCisJCSI4LjU4IHMiLCAiMTcuMiBzIiwgIjM0LjMgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdHJhbndpbls4XSA9IHsKKwkJIjAgdXMiLCAiNjIuNSB1cyIsICIxMjUgdXMiLCAiMjUwIHVzIiwKKwkJIjUwMCB1cyIsICIxIG1zIiwgIjIgbXMiLCAiNCBtcyIsCisJfTsKKwl1OCBtYXg7CisJY29uc3QgY2hhciAqY29uc3QgKm5hbWVzOworCisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IG1heCArIDE7CisJaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IG1heCkKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gbWF4OworCXN3aXRjaCAoKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmKSB7CisJY2FzZSBXTTg3NzZfQUxDQ1RSTDI6CisJCW5hbWVzID0gaGxkOworCQlicmVhazsKKwljYXNlIFdNODc3Nl9BTENDVFJMMzoKKwkJaWYgKCgoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDIwKSAmIDB4ZikgPT0gMCkgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGF0a19saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBhdGtfYWxjOworCQl9IGVsc2UgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGRjeV9saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBkY3lfYWxjOworCQl9CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0xJTUlURVI6CisJCW5hbWVzID0gdHJhbndpbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHhmOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfZmllbGRfc2V0X2Zyb21fY3RsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IHZhbHVlLCByZWdfaW5kZXgsIG1vZGU7CisJdTggbWluLCBtYXgsIHNoaWZ0OworCXUxNiBtYXNrLCByZWdfdmFsdWU7CisJYm9vbCBpbnZlcnQ7CisKKwlpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpCisJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJZWxzZQorCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJaWYgKCEoY3RsLT5wcml2YXRlX3ZhbHVlICYgbW9kZSkpCisJCXJldHVybjsKKworCXZhbHVlID0gY3RsLT5wcml2YXRlX3ZhbHVlICYgMHhmOworCW1pbiA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGY7CisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJbWFzayA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmOworCXNoaWZ0ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyMCkgJiAweGY7CisJcmVnX2luZGV4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmOworCWludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjkpICYgMHgxOworCisJaWYgKGludmVydCkKKwkJdmFsdWUgPSBtYXggLSAodmFsdWUgLSBtaW4pOworCXJlZ192YWx1ZSA9IGRhdGEtPndtODc3Nl9yZWdzW3JlZ19pbmRleF07CisJcmVnX3ZhbHVlICY9IH4obWFzayA8PCBzaGlmdCk7CisJcmVnX3ZhbHVlIHw9IHZhbHVlIDw8IHNoaWZ0OworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgcmVnX2luZGV4LCByZWdfdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9maWVsZF9zZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXU4IG1pbiwgbWF4OworCWludCBjaGFuZ2VkOworCisJbWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwltYXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDB4ZjsKKwlpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gdmFsdWUgIT0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4Zik7CisJaWYgKGNoYW5nZWQpIHsKKwkJY3RsLT5wcml2YXRlX3ZhbHVlID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIH4weGYpIHwgdmFsdWU7CisJCXdtODc3Nl9maWVsZF9zZXRfZnJvbV9jdGwoY3RsKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDB4NzkgLSA2MDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4N2Y7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSAmIFdNODc3Nl9IUEFUVF9NQVNLOworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0KKwkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQUlZPTF0gJiBXTTg3NzZfSFBBVFRfTUFTSzsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfaHBfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b191cGRhdGU7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdG9fdXBkYXRlID0gKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICE9CisJCSAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUExWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAwOworCXRvX3VwZGF0ZSB8PSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gIT0KKwkJICAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAxOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSkgeworCQlpZiAodG9fdXBkYXRlKSB7CisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQTUFTVEVSLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQTFZPTF0gPQorCQkJCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHwgV004Nzc2X0hQWkNFTjsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdID0KKwkJCQl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSB8IFdNODc3Nl9IUFpDRU47CisJCX0KKwl9IGVsc2UgeworCQlpZiAodG9fdXBkYXRlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8CisJCQkJICAgICAoKHRvX3VwZGF0ZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX3VwZGF0ZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQUlZPTCwKKwkJCQkgICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwKKwkJCQkgICAgIFdNODc3Nl9IUFpDRU4gfCBXTTg3NzZfVVBEQVRFKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIHRvX3VwZGF0ZSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF9tdXhfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IG11eF9iaXQgPSBjdGwtPnByaXZhdGVfdmFsdWU7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCSEhKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdICYgbXV4X2JpdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X211eF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbXV4X2JpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwl1MTYgcmVnOworCWludCBjaGFuZ2VkOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXJlZyA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlyZWcgJj0gfjB4MDAzOworCQlyZWcgfD0gbXV4X2JpdDsKKwl9IGVsc2UKKwkJcmVnICY9IH5tdXhfYml0OworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ01VWF07CisJaWYgKGNoYW5nZWQpIHsKKwkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkJICAgICAgcmVnICYgMSA/IEdQSU9fRFNfSU5QVVRfUk9VVEUgOiAwLAorCQkJCSAgICAgIEdQSU9fRFNfSU5QVVRfUk9VVEUpOworCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ01VWCwgcmVnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAyOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMHhhNTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0s7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0gJiBXTTg3NzZfQUdNQVNLOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJaW50IGNoYW5nZWQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gIT0KKwkJICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0spKSB8fAorCQkgICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPQorCQkgICAoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ1JWT0xdICYgV004Nzc2X0FHTUFTSykpOworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FEQ0xWT0wsCisJCQkgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfCBXTTg3NzZfWkNBKTsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BRENSVk9MLAorCQkJICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwgV004Nzc2X1pDQSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiTm9uZSIsICJQZWFrIExpbWl0ZXIiLCAiQXV0b21hdGljIExldmVsIENvbnRyb2wiCisJfTsKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJaWYgKCEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXSAmIFdNODc3Nl9MQ0VOKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkJIFdNODc3Nl9MQ1NFTF9MSU1JVEVSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV9jb250cm9sKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGFjY2VzczsKKworCWlmIChjdGwtPnByaXZhdGVfdmFsdWUgJiBtb2RlKQorCQlhY2Nlc3MgPSAwOworCWVsc2UKKwkJYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCWlmICgoY3RsLT52ZFswXS5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUpICE9IGFjY2VzcykgeworCQljdGwtPnZkWzBdLmFjY2VzcyBePSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sICZjdGwtPmlkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBtb2RlID0gMCwgaTsKKwl1MTYgY3RybDEsIGN0cmwyOworCWludCBjaGFuZ2VkOworCisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwlpZiAoY2hhbmdlZCkgeworCQljdGwtPnByaXZhdGVfdmFsdWUgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCQljdHJsMSA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV07CisJCWN0cmwyID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXTsKKwkJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCWRlZmF1bHQ6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMiwKKwkJCQkJICAgIGN0cmwyICYgfldNODc3Nl9MQ0VOKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMSwKKwkJCQkJICAgIChjdHJsMSAmIH5XTTg3NzZfTENTRUxfTUFTSykgfAorCQkJCQkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpOworCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDIsCisJCQkJCSAgICBjdHJsMiB8IFdNODc3Nl9MQ0VOKTsKKwkJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDEsCisJCQkJCSAgICAoY3RybDEgJiB+V004Nzc2X0xDU0VMX01BU0spIHwKKwkJCQkJICAgIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPKTsKKwkJCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FMQ0NUUkwyLAorCQkJCQkgICAgY3RybDIgfCBXTTg3NzZfTENFTik7CisJCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5sY19jb250cm9scyk7ICsraSkKKwkJCWFjdGl2YXRlX2NvbnRyb2woY2hpcCwgZGF0YS0+bGNfY29udHJvbHNbaV0sIG1vZGUpOworCX0KKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBocGZfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbMl0gPSB7CisJCSJOb25lIiwgIkhpZ2gtcGFzcyBGaWx0ZXIiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMikKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiBXTTg3NzZfQURDSFBEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiB+V004Nzc2X0FEQ0hQRDsKKwlpZiAoIXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCisJCXJlZyB8PSBXTTg3NzZfQURDSFBEOworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF07CisJaWYgKGNoYW5nZWQpCisJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDSUZDVFJMLCByZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCisjZGVmaW5lIFdNODc3Nl9CSVRfU1dJVENIKHhuYW1lLCByZWcsIGJpdCwgaW52ZXJ0LCBmbGFncykgeyBcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLCBcCisJLmdldCA9IHdtODc3Nl9iaXRfc3dpdGNoX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfYml0X3N3aXRjaF9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICgocmVnKSA8PCAxNikgfCAoYml0KSB8ICgoaW52ZXJ0KSA8PCAyNCkgfCAoZmxhZ3MpLCBcCit9CisjZGVmaW5lIF9XTTg3NzZfRklFTERfQ1RMKHhuYW1lLCByZWcsIHNoaWZ0LCBpbml0dmFsLCBtaW4sIG1heCwgbWFzaywgZmxhZ3MpIFwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IChpbml0dmFsKSB8ICgobWluKSA8PCA4KSB8ICgobWF4KSA8PCAxMikgfCBcCisJKChtYXNrKSA8PCAxNikgfCAoKHNoaWZ0KSA8PCAyMCkgfCAoKHJlZykgPDwgMjQpIHwgKGZsYWdzKQorI2RlZmluZSBXTTg3NzZfRklFTERfQ1RMX0VOVU0oeG5hbWUsIHJlZywgc2hpZnQsIGluaXQsIG1pbiwgbWF4LCBtYXNrLCBmbGFncykge1wKKwlfV004Nzc2X0ZJRUxEX0NUTCh4bmFtZSAiIENhcHR1cmUgRW51bSIsIFwKKwkJCSAgcmVnLCBzaGlmdCwgaW5pdCwgbWluLCBtYXgsIG1hc2ssIGZsYWdzKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwgXAorCS5pbmZvID0gd204Nzc2X2ZpZWxkX2VudW1faW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfZW51bV9nZXQsIFwKKwkucHV0ID0gd204Nzc2X2ZpZWxkX2VudW1fcHV0LCBcCit9CisjZGVmaW5lIFdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIHRsdl9wKSB7IFwKKwlfV004Nzc2X0ZJRUxEX0NUTChhICIgQ2FwdHVyZSBWb2x1bWUiLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSB8IFwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsIFwKKwkuaW5mbyA9IHdtODc3Nl9maWVsZF92b2x1bWVfaW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dCwgXAorCS50bHYgPSB7IC5wID0gdGx2X3AgfSwgXAorfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204N3g2X2RhY19kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg3NzZfYWRjX2RiX3NjYWxlLCAtMjEwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9ocF9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X2xjdF9kYl9zY2FsZSwgLTE2MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X21heGdhaW5fZGJfc2NhbGUsIDAsIDQwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X25ndGhfZGJfc2NhbGUsIC03ODAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9saW1fZGJfc2NhbGUsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUsIC0yMTAwLCA0MDAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaHBfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaHBfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9ocF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9ocF9kYl9zY2FsZSB9LAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCQkJICBXTTg3NzZfUFdSRE9XTiwgV004Nzc2X0hQUEQsIDEsIDApLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IENhcHR1cmUgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaW5wdXRfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9hZGNfZGJfc2NhbGUgfSwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfbXV4X2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF9tdXhfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDEgPDwgMCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHdtODc3Nl9pbnB1dF9tdXhfZ2V0LAorCQkucHV0ID0gd204Nzc2X2lucHV0X211eF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMSA8PCAxLAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkF1eCIsIFdNODc3Nl9BRENNVVgsIDEgPDwgMiwgMCwgMCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQURDIEZpbHRlciBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IGhwZl9pbmZvLAorCQkuZ2V0ID0gaHBmX2dldCwKKwkJLnB1dCA9IGhwZl9wdXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJMZXZlbCBDb250cm9sIENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbywKKwkJLmdldCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAwLAorCX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxjX2NvbnRyb2xzW10gPSB7CisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkxpbWl0ZXIgVGhyZXNob2xkIiwKKwkJCQlXTTg3NzZfQUxDQ1RSTDEsIDAsIDExLCAwLCAxNSwgMHhmLAorCQkJCUxDX0NPTlRST0xfTElNSVRFUiwgd204Nzc2X2xjdF9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfTElNSVRFUiksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIERlY2F5IFRpbWUiLAorCQkJICAgICAgV004Nzc2X0FMQ0NUUkwzLCA0LCAzLCAwLCAxMCwgMHhmLAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkxpbWl0ZXIgVHJhbnNpZW50IFdpbmRvdyIsCisJCQkgICAgICBXTTg3NzZfTElNSVRFUiwgNCwgMiwgMCwgNywgMHg3LAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiTGltaXRlciBNYXhpbXVtIEF0dGVudWF0aW9uIiwKKwkJCQlXTTg3NzZfTElNSVRFUiwgMCwgNiwgMywgMTIsIDB4ZiwKKwkJCQlMQ19DT05UUk9MX0xJTUlURVIsCisJCQkJd204Nzc2X21heGF0dGVuX2xpbV9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkFMQyBUYXJnZXQgTGV2ZWwiLAorCQkJCVdNODc3Nl9BTENDVFJMMSwgMCwgMTEsIDAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9sY3RfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkFMQyBEZWNheSBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgNCwgMywgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gR2FpbiIsCisJCQkJV004Nzc2X0FMQ0NUUkwxLCA0LCA3LCAxLCA3LCAweDcsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhnYWluX2RiX3NjYWxlKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gQXR0ZW51YXRpb24iLAorCQkJCVdNODc3Nl9MSU1JVEVSLCAwLCAxMCwgMTAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEhvbGQgVGltZSIsCisJCQkgICAgICBXTTg3NzZfQUxDQ1RSTDIsIDAsIDAsIDAsIDE1LCAweGYsCisJCQkgICAgICBMQ19DT05UUk9MX0FMQyksCisJV004Nzc2X0JJVF9TV0lUQ0goIk5vaXNlIEdhdGUgQ2FwdHVyZSBTd2l0Y2giLAorCQkJICBXTTg3NzZfTk9JU0VHQVRFLCBXTTg3NzZfTkdBVCwgMCwKKwkJCSAgTENfQ09OVFJPTF9BTEMpLAorCVdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKCJOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCQkJV004Nzc2X05PSVNFR0FURSwgMiwgMCwgMCwgNywgMHg3LAorCQkJCUxDX0NPTlRST0xfQUxDLCB3bTg3NzZfbmd0aF9kYl9zY2FsZSksCit9OworCitzdGF0aWMgaW50IHhvbmFyX2RzX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKKwkJcmV0dXJuIDE7IC8qIG5vIENEIGlucHV0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeG9uYXJfZHNfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKKwlpbnQgZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNfY29udHJvbHMpOyArK2kpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZkc19jb250cm9sc1tpXSwgY2hpcCk7CisJCWlmICghY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobGNfY29udHJvbHMpICE9IEFSUkFZX1NJWkUoZGF0YS0+bGNfY29udHJvbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY19jb250cm9scyk7ICsraSkgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJmxjX2NvbnRyb2xzW2ldLCBjaGlwKTsKKwkJaWYgKCFjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkYXRhLT5sY19jb250cm9sc1tpXSA9IGN0bDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RzID0geworCS5zaG9ydG5hbWUgPSAiWG9uYXIgRFMiLAorCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfZHNfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kc19jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX2RzX21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9kc19jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfZHNfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfZHNfcmVzdW1lLAorCS5wY21faGFyZHdhcmVfZmlsdGVyID0gd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIsCisJLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF93bTg3eDZfZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODd4Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3eDZfbXV0ZSwKKwkuZ3Bpb19jaGFuZ2VkID0geG9uYXJfZHNfZ3Bpb19jaGFuZ2VkLAorCS5kYWNfdGx2ID0gd204N3g2X2RhY19kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl93bTg3eDYpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18xLAorCS5kYWNfY2hhbm5lbHMgPSA4LAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitpbnQgX19kZXZpbml0IGdldF94b25hcl93bTg3eDZfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzd2l0Y2ggKGlkLT5zdWJkZXZpY2UpIHsKKwljYXNlIDB4ODM4ZToKKwkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCA4MzNlOWM3Li45NWNmZGUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtOTQsNyArOTQsNyBAQAogCVBDSV9JRF9MQVNUCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGN4aHJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGN4aHJfaWRzKSA9IHsKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjAwMSwgMCwgMCwgUENJX0lEX1ZYODgySFIsIH0sCiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIxMDEsIDAsIDAsIFBDSV9JRF9QQ1g4ODJIUiwgfSwKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggZTY2ZWYyYi4uOTYwYTIyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfcmlwdGlkZV9pZHMpID0gewogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMxMCkgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMjApIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzMwKSB9LApAQCAtNTE1LDcgKzUxNSw3IEBACiB9OwogCiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9yaXB0aWRlX2pveXN0aWNrX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JpcHRpZGVfam95c3RpY2tfaWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMTIpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzIyKSB9LAogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMzMikgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZjk3N2RiYTcuLmQ1ZTFjNmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTMyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9ybWUzMl9pZHMpID0gewogCXtQQ0lfVkRFVklDRShYSUxJTlhfUk1FLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzIpLCAwLH0sCiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84KSwgMCx9LAogCXtQQ0lfVkRFVklDRShYSUxJTlhfUk1FLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfUFJPKSwgMCx9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2LmMgYi9zb3VuZC9wY2kvcm1lOTYuYwppbmRleCAyYmE1YzBmLi45ZDUyNTJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTYuYworKysgYi9zb3VuZC9wY2kvcm1lOTYuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAgICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9ybWU5Nl9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoWElMSU5YLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTYpLCAwLCB9LAogCXsgUENJX1ZERVZJQ0UoWElMSU5YLCBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOCksIDAsIH0sCiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTyksIDAsIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggN2JiODI3Yy4uNTJjNmViNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9oZHNwX2lkcykgPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCiAJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IGExYjEwZDEuLjNkNzJjMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtNTEyLDcgKzUxMiw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaGRzcG1faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfaGRzcG1faWRzKSA9IHsKIAl7CiAJIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKIAkgLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQX01BREksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggYmM1MzlhYi4uNDRhM2UyZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ybWU5NjUyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9ybWU5NjUyX2lkcykgPSB7CiAJewogCQkudmVuZG9yCSAgID0gMHgxMGVlLAogCQkuZGV2aWNlCSAgID0gMHgzZmM0LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NpczcwMTkuYyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKaW5kZXggMWE1ZmYwNi4uN2UzZThmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NpczcwMTkuYworKysgYi9zb3VuZC9wY2kvc2lzNzAxOS5jCkBAIC00OCw3ICs0OCw3IEBACiBtb2R1bGVfcGFyYW0oZW5hYmxlLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIFNpUzcwMTkgQXVkaW8gQWNjZWxlcmF0b3IuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfc2lzNzAxOV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfc2lzNzAxOV9pZHMpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCAweDcwMTkpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NvbmljdmliZXMuYyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKaW5kZXggMWY2NDA2Yy4uMzM3YjlmYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCkBAIC0yNDIsNyArMjQyLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zb25pY19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfc29uaWNfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKFMzLCAweGNhMDApLCAwLCB9LAogICAgICAgICB7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKaW5kZXggMjFjZWY5Ny4uNmQwNTgxOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwpAQCAtNjIsNyArNjIsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHdhdmV0YWJsZV9zaXplLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3YXZldGFibGVfc2l6ZSwgIk1heGltdW0gbWVtb3J5IHNpemUgaW4ga0IgZm9yIHdhdmV0YWJsZSBzeW50aC4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF90cmlkZW50X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF90cmlkZW50X2lkcykgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UUklERU5ULCBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYKSwgCiAJCVBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCAwfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfTlgpLCAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IDhhMzMyZDIuLjdlNDk0YjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdmlhODJ4eF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdmlhODJ4eF9pZHMpID0gewogCS8qIDB4MTEwNiwgMHgzMDU4ICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl81KSwgVFlQRV9DQVJEX1ZJQTY4NiwgfSwJLyogNjg2QSAqLwogCS8qIDB4MTEwNiwgMHgzMDU5ICovCkBAIC0xNzkxLDYgKzE3OTEsMTIgQEAKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWQogCX0sCiAJeworCQkuc3VidmVuZG9yID0gMHgxMTBhLAorCQkuc3ViZGV2aWNlID0gMHgwMDc5LAorCQkubmFtZSA9ICJGdWppdHN1IFNpZW1lbnMgRDEyODkiLAorCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCisJfSwKKwl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwMTksCiAJCS5zdWJkZXZpY2UgPSAweDBhODEsCiAJCS5uYW1lID0gIkVDUyBLN1ZUQTMiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggNDdlYjYxNS4uZjdlOGJiYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2VudHJ5OwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X21vZGVtX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92aWE4Mnh4X21vZGVtX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MzA2OCksIFRZUEVfQ0FSRF9WSUE4MlhYX01PREVNLCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggZmM5MTM2Yy4uOTlhOWE4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlWWF9QQ0lfVlgyMjJfTkVXCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z4MjIyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92eDIyMl9pZHMpID0gewogCXsgMHgxMGI1LCAweDkwNTAsIDB4MTM2OSwgUENJX0FOWV9JRCwgMCwgMCwgVlhfUENJX1ZYMjIyX09MRCwgfSwgICAvKiBQTFggKi8KIAl7IDB4MTBiNSwgMHg5MDMwLCAweDEzNjksIFBDSV9BTllfSUQsIDAsIDAsIFZYX1BDSV9WWDIyMl9ORVcsIH0sICAgLyogUExYICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCBlNmIxOGI5Li44MGM2ODIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTY2LDcgKzY2LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShyZWFyX3N3aXRjaCwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlYXJfc3dpdGNoLCAiRW5hYmxlIHNoYXJlZCByZWFyL2xpbmUtaW4gc3dpdGNoIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfeW1mcGNpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF95bWZwY2lfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKFlBTUFIQSwgMHgwMDA0KSwgMCwgfSwgICAvKiBZTUY3MjQgKi8KIAl7IFBDSV9WREVWSUNFKFlBTUFIQSwgMHgwMDBkKSwgMCwgfSwgICAvKiBZTUY3MjRGICovCiAJeyBQQ0lfVkRFVklDRShZQU1BSEEsIDB4MDAwYSksIDAsIH0sICAgLyogWU1GNzQwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCmluZGV4IDVjZmE2MDguLjBkNjY4ZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTI5LDQ5ICsyOCw2IEBACiAKIAogLyoKLSAqIHdlIHVzZSBhIHZtYWxsb2MnZWQgKHNnLSlidWZmZXIKLSAqLwotCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwotfQotCi0vKgotICogaHdfcGFyYW1zIGNhbGxiYWNrCi0gKiBOT1RFOiB0aGlzIG1heSBiZSBjYWxsZWQgbm90IG9ubHkgb25jZSBwZXIgcGNtIG9wZW4hCi0gKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkgewotCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCi0JCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBlbm91Z2ggbGFyZ2UgKi8KLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzJfdXNlcihzaXplKTsKLQlpZiAoISBydW50aW1lLT5kbWFfYXJlYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGh3X2ZyZWUgY2FsbGJhY2sKLSAqIE5PVEU6IHRoaXMgbWF5IGJlIGNhbGxlZCBub3Qgb25seSBvbmNlIHBlciBwY20gb3BlbiEKLSAqLwotc3RhdGljIGludCBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCi0JdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGNsZWFyIHRoZSBTUkFNIGNvbnRlbnRzCiAgKi8KIHN0YXRpYyBpbnQgcGRhY2ZfcGNtX2NsZWFyX3NyYW0oc3RydWN0IHNuZF9wZGFjZiAqY2hpcCkKQEAgLTE0Nyw3ICsxMDMsOCBAQAogc3RhdGljIGludCBwZGFjZl9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKIAkJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewotCXJldHVybiBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnMsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJcmV0dXJuIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfMzJfYnVmZmVyCisJCQkJCShzdWJzLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCiAvKgpAQCAtMTU1LDcgKzExMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcGRhY2ZfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQogewotCXJldHVybiBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vicyk7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vicyk7CiB9CiAKIC8qCkBAIC0zMTksNyArMjc2LDggQEAKIAkucHJlcGFyZSA9CXBkYWNmX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0JcGRhY2ZfcGNtX3RyaWdnZXIsCiAJLnBvaW50ZXIgPQlwZGFjZl9wY21fY2FwdHVyZV9wb2ludGVyLAotCS5wYWdlID0JCXNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKKwkucGFnZSA9CQlzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0JCXNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2F3YWNzLmMgYi9zb3VuZC9wcGMvYXdhY3MuYwppbmRleCAyZTE1NjQ2Li5iMzY2NzkzIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYXdhY3MuYworKysgYi9zb3VuZC9wcGMvYXdhY3MuYwpAQCAtNzUxLDggKzc1MSw4IEBACiAKIHN0YXRpYyB2b2lkIHNuZF9wbWFjX2F3YWNzX3Jlc3VtZShzdHJ1Y3Qgc25kX3BtYWMgKmNoaXApCiB7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikKLQkgICAgfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgeworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpIHsKIAkJbXNsZWVwKDEwMCk7CiAJCXNuZF9wbWFjX2F3YWNzX3dyaXRlX3JlZyhjaGlwLCAxLAogCQkJY2hpcC0+YXdhY3NfcmVnWzFdICYgfk1BU0tfUEFST1VUKTsKQEAgLTc4MCwxNiArNzgwLDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgSVNfUE03NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsNzUwMCIpIFwKLQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDg1MDAiKSBcCi0JCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw5NTAwIikpCi0jZGVmaW5lIElTX1BNNTUwMCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLGU0MTEiKSkKLSNkZWZpbmUgSVNfQkVJR0UgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxHb3NzYW1lciIpKQotI2RlZmluZSBJU19JTUFDMSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMSIpKQotI2RlZmluZSBJU19JTUFDMiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMiIpIFwKLQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMSIpKQotI2RlZmluZSBJU19HNEFHUCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsMSIpKQotI2RlZmluZSBJU19MT01CQVJEIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQorI2RlZmluZSBJU19QTTc1MDAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAorCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKKwkJfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKKyNkZWZpbmUgSVNfUE01NTAwIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQorI2RlZmluZSBJU19CRUlHRSAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCisjZGVmaW5lIElTX0lNQUMxIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCisjZGVmaW5lIElTX0lNQUMyIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAorCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCisjZGVmaW5lIElTX0c0QUdQIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCisjZGVmaW5lIElTX0xPTUJBUkQgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAKIHN0YXRpYyBpbnQgaW1hYzEsIGltYWMyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYnVyZ3VuZHkuYyBiL3NvdW5kL3BwYy9idXJndW5keS5jCmluZGV4IDBhY2NmZTQuLjFmNzJlMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9idXJndW5keS5jCisrKyBiL3NvdW5kL3BwYy9idXJndW5keS5jCkBAIC01ODIsNyArNTgyLDcgQEAKIHN0YXRpYyB2b2lkIHNuZF9wbWFjX2J1cmd1bmR5X3VwZGF0ZV9hdXRvbXV0ZShzdHJ1Y3Qgc25kX3BtYWMgKmNoaXAsIGludCBkb19ub3RpZnkpCiB7CiAJaWYgKGNoaXAtPmF1dG9fbXV0ZSkgewotCQlpbnQgaW1hYyA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpOworCQlpbnQgaW1hYyA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpOwogCQlpbnQgcmVnLCBvcmVnOwogCQlyZWcgPSBvcmVnID0gc25kX3BtYWNfYnVyZ3VuZHlfcmNiKGNoaXAsCiAJCQkJTUFTS19BRERSX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUyk7CkBAIC02MjAsNyArNjIwLDcgQEAKICAqLwogaW50IF9fZGV2aW5pdCBzbmRfcG1hY19idXJndW5keV9pbml0KHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKLQlpbnQgaW1hYyA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpOworCWludCBpbWFjID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CiAJaW50IGksIGVycjsKIAogCS8qIENoZWNrcyB0byBzZWUgdGhlIGNoaXAgaXMgYWxpdmUgYW5kIGtpY2tpbmcgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IDdiYzQ5MmUuLjg1MDgxMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtOTIyLDExICs5MjIsMTEgQEAKIAl9CiAKIAkvKiBpdCBzZWVtcyB0aGUgUGlzbW8gJiBpQm9vayBjYW4ndCBieXRlLXN3YXAgaW4gaGFyZHdhcmUuICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQljaGlwLT5jYW5fYnl0ZV9zd2FwID0gMCA7CiAKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiB9CiAKQEAgLTk1OSwxMSArOTU5LDExIEBACiAJY2hpcC0+Y29udHJvbF9tYXNrID0gTUFTS19JRVBDIHwgTUFTS19JRUUgfCAweDExOyAvKiBkZWZhdWx0ICovCiAKIAkvKiBjaGVjayBtYWNoaW5lIHR5cGUgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpCi0JICAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKQorCSAgICB8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpKQogCQljaGlwLT5pc19wYm9va18zNDAwID0gMTsKLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpCi0JCSB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQorCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikKKwkJIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCiAJCWNoaXAtPmlzX3Bib29rX0czID0gMTsKIAljaGlwLT5ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImF3YWNzIik7CiAJc291bmQgPSBvZl9ub2RlX2dldChjaGlwLT5ub2RlKTsKQEAgLTEwMzMsOCArMTAzMyw4IEBACiAJfQogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInR1bWJsZXIiKSkgewogCQljaGlwLT5tb2RlbCA9IFBNQUNfVFVNQkxFUjsKLQkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIikKLQkJCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpOworCQljaGlwLT5jYW5fY2FwdHVyZSA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKQorCQkJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIik7CiAJCWNoaXAtPmNhbl9kdXBsZXggPSAwOwogCQkvLyBjaGlwLT5jYW5fYnl0ZV9zd2FwID0gMDsgLyogRklYTUU6IGNoZWNrIHRoaXMgKi8KIAkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L0tjb25maWcgYi9zb3VuZC9zb2MvYXUxeC9LY29uZmlnCmluZGV4IDQxMGE4OTMuLjRiNjcxNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L0tjb25maWcKKysrIGIvc291bmQvc29jL2F1MXgvS2NvbmZpZwpAQCAtMjIsMTEgKzIyLDEzIEBACiAjIwogIyMgQm9hcmRzCiAjIwotY29uZmlnIFNORF9TT0NfU0FNUExFX1BTQ19BQzk3Ci0JdHJpc3RhdGUgIlNhbXBsZSBBdTEyeDAvQXUxNTUwIFBTQyBBQzk3IHNvdW5kIG1hY2hpbmUiCitjb25maWcgU05EX1NPQ19EQjEyMDAKKwl0cmlzdGF0ZSAiREIxMjAwIEFDOTcrSTJTIGF1ZGlvIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTkRfU09DX0FVMVhQU0MKIAlzZWxlY3QgU05EX1NPQ19BVTFYUFNDX0FDOTcKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TT0NfQVUxWFBTQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19XTTg3MzEKIAloZWxwCi0JICBUaGlzIGlzIGEgc2FtcGxlIEFDOTcgc291bmQgbWFjaGluZSBmb3IgdXNlIGluIEF1MTJ4MC9BdTE1NTAKLQkgIGJhc2VkIHN5c3RlbXMgd2hpY2ggaGF2ZSBhdWRpbyBvbiBQU0MxIChlLmcuIERiMTIwMCBkZW1vYm9hcmQpLgorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBhdWRpbyAoQUM5NyBvciBJMlMpIG9uIHRoZQorCSAgQWxjaGVteS9BTUQvUk1JIERCMTIwMCBkZW1vYm9hcmQuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlCmluZGV4IDZjNjk1MGIuLjE2ODczMDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlCkBAIC04LDYgKzgsNiBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfQVUxWFBTQ19BQzk3KSArPSBzbmQtc29jLWF1MXhwc2MtYWM5Ny5vCiAKICMgQm9hcmRzCi1zbmQtc29jLXNhbXBsZS1hYzk3LW9ianMgOj0gc2FtcGxlLWFjOTcubworc25kLXNvYy1kYjEyMDAtb2JqcyA6PSBkYjEyMDAubwogCi1vYmotJChDT05GSUdfU05EX1NPQ19TQU1QTEVfUFNDX0FDOTcpICs9IHNuZC1zb2Mtc2FtcGxlLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TT0NfREIxMjAwKSArPSBzbmQtc29jLWRiMTIwMC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZjdiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIERCMTIwMCBBU29DIGF1ZGlvIGZhYnJpYyBzdXBwb3J0IGNvZGUuCisgKgorICogKGMpIDIwMDgtOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgorI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3MzEuaCIKKyNpbmNsdWRlICJwc2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBQzk3IFBBUlQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYjEyMDBfYWM5N19kYWkgPSB7CisJLm5hbWUJCT0gIkFDOTciLAorCS5zdHJlYW1fbmFtZQk9ICJBQzk3IEhpRmkiLAorCS5jcHVfZGFpCT0gJmF1MXhwc2NfYWM5N19kYWksCisJLmNvZGVjX2RhaQk9ICZhYzk3X2RhaSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGRiMTIwMF9hYzk3X21hY2hpbmUgPSB7CisJLm5hbWUJCT0gIkRCMTIwMF9BQzk3IiwKKwkuZGFpX2xpbmsJPSAmZGIxMjAwX2FjOTdfZGFpLAorCS5udW1fbGlua3MJPSAxLAorCS5wbGF0Zm9ybQk9ICZhdTF4cHNjX3NvY19wbGF0Zm9ybSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZGIxMjAwX2FjOTdfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZGIxMjAwX2FjOTdfbWFjaGluZSwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfYWM5NywKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJTIFBBUlQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZGIxMjAwX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IHJldDsKKworCS8qIFdNODczMSBoYXMgaXRzIG93biAxMk1IeiBjcnlzdGFsICovCisJc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEssCisJCQkJMTIwMDAwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCisJLyogY29kZWMgaXMgYml0Y2xvY2sgYW5kIGxyY2xrIG1hc3RlciAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9MRUZUX0ogfAorCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBkYjEyMDBfaTJzX3dtODczMV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBkYjEyMDBfaTJzX3N0YXJ0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZGIxMjAwX2kyc19kYWkgPSB7CisJLm5hbWUJCT0gIldNODczMSIsCisJLnN0cmVhbV9uYW1lCT0gIldNODczMSBQQ00iLAorCS5jcHVfZGFpCT0gJmF1MXhwc2NfaTJzX2RhaSwKKwkuY29kZWNfZGFpCT0gJndtODczMV9kYWksCisJLm9wcwkJPSAmZGIxMjAwX2kyc193bTg3MzFfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZGIxMjAwX2kyc19tYWNoaW5lID0geworCS5uYW1lCQk9ICJEQjEyMDBfSTJTIiwKKwkuZGFpX2xpbmsJPSAmZGIxMjAwX2kyc19kYWksCisJLm51bV9saW5rcwk9IDEsCisJLnBsYXRmb3JtCT0gJmF1MXhwc2Nfc29jX3BsYXRmb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkYjEyMDBfaTJzX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmRiMTIwMF9pMnNfbWFjaGluZSwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfd204NzMxLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT01NT04gUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRiMTIwMF9hc29jX2RldjsKKworc3RhdGljIGludCBfX2luaXQgZGIxMjAwX2F1ZGlvX2xvYWQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gLUVOT01FTTsKKwlkYjEyMDBfYXNvY19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWRiMTIwMF9hc29jX2RldikKKwkJZ290byBvdXQ7CisKKwkvKiBEQjEyMDAgYm9hcmQgc2V0dXAgc2V0IFBTQzFNVVggdG8gcHJlZmVycmVkIGF1ZGlvIGRldmljZSAqLworCWlmIChiY3NyX3JlYWQoQkNTUl9SRVNFVFMpICYgQkNTUl9SRVNFVFNfUFNDMU1VWCkKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGIxMjAwX2Fzb2NfZGV2LCAmZGIxMjAwX2kyc19kZXZkYXRhKTsKKwllbHNlCisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRiMTIwMF9hc29jX2RldiwgJmRiMTIwMF9hYzk3X2RldmRhdGEpOworCisJZGIxMjAwX2FjOTdfZGV2ZGF0YS5kZXYgPSAmZGIxMjAwX2Fzb2NfZGV2LT5kZXY7CisJZGIxMjAwX2kyc19kZXZkYXRhLmRldiA9ICZkYjEyMDBfYXNvY19kZXYtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGRiMTIwMF9hc29jX2Rldik7CisKKwlpZiAocmV0KSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoZGIxMjAwX2Fzb2NfZGV2KTsKKwkJZGIxMjAwX2Fzb2NfZGV2ID0gTlVMTDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRiMTIwMF9hdWRpb191bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkYjEyMDBfYXNvY19kZXYpOworfQorCittb2R1bGVfaW5pdChkYjEyMDBfYXVkaW9fbG9hZCk7Cittb2R1bGVfZXhpdChkYjEyMDBfYXVkaW9fdW5sb2FkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEQjEyMDAgQVNvQyBhdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfQVVUSE9SKCJNYW51ZWwgTGF1c3MiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKaW5kZXggMTllNGQzNy4uNmQ5ZjRjNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKKysrIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKQEAgLTUxLDggKzUxLDggQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAl1bnNpZ25lZCBsb25nIGN1cnJfcGVyaW9kOwkvKiBjdXJyZW50IHNlZ21lbnQgRERNQSBpcyB3b3JraW5nIG9uICovCiAJdW5zaWduZWQgbG9uZyBxX3BlcmlvZDsJCS8qIHF1ZXVlIHBlcmlvZChzKSAqLwotCXVuc2lnbmVkIGxvbmcgZG1hX2FyZWE7CQkvKiBhZGRyZXNzIG9mIHF1ZXVlZCBETUEgYXJlYSAqLwotCXVuc2lnbmVkIGxvbmcgZG1hX2FyZWFfczsJLyogc3RhcnQgYWRkcmVzcyBvZiBETUEgYXJlYSAqLworCWRtYV9hZGRyX3QgZG1hX2FyZWE7CQkvKiBhZGRyZXNzIG9mIHF1ZXVlZCBETUEgYXJlYSAqLworCWRtYV9hZGRyX3QgZG1hX2FyZWFfczsJCS8qIHN0YXJ0IGFkZHJlc3Mgb2YgRE1BIGFyZWEgKi8KIAl1bnNpZ25lZCBsb25nIHBvczsJCS8qIGN1cnJlbnQgYnl0ZSBwb3NpdGlvbiBiZWluZyBwbGF5ZWQgKi8KIAl1bnNpZ25lZCBsb25nIHBlcmlvZHM7CQkvKiBudW1iZXIgb2YgU0cgc2VnbWVudHMgaW4gdG90YWwgKi8KIAl1bnNpZ25lZCBsb25nIHBlcmlvZF9ieXRlczsJLyogc2l6ZSBpbiBieXRlcyBvZiBvbmUgU0cgc2VnbWVudCAqLwpAQCAtOTQsOCArOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBhdTF4X3BjbV9xdWV1ZV90eChzdHJ1Y3QgYXUxeHBzY19hdWRpb19kbWFkYXRhICpjZCkKIHsKLQlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjZC0+ZGRtYV9jaGFuLAotCQkJCSh2b2lkICopcGh5c190b192aXJ0KGNkLT5kbWFfYXJlYSksCisJYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2QtPmRkbWFfY2hhbiwgY2QtPmRtYV9hcmVhLAogCQkJCWNkLT5wZXJpb2RfYnl0ZXMsIERETUFfRkxBR1NfSUUpOwogCiAJLyogdXBkYXRlIG5leHQtdG8tcXVldWUgcGVyaW9kICovCkBAIC0xMDksOSArMTA4LDggQEAKIAogc3RhdGljIHZvaWQgYXUxeF9wY21fcXVldWVfcngoc3RydWN0IGF1MXhwc2NfYXVkaW9fZG1hZGF0YSAqY2QpCiB7Ci0JYXUxeHh4X2RiZG1hX3B1dF9kZXN0X2ZsYWdzKGNkLT5kZG1hX2NoYW4sCi0JCQkJKHZvaWQgKilwaHlzX3RvX3ZpcnQoY2QtPmRtYV9hcmVhKSwKLQkJCQljZC0+cGVyaW9kX2J5dGVzLCBERE1BX0ZMQUdTX0lFKTsKKwlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2QtPmRkbWFfY2hhbiwgY2QtPmRtYV9hcmVhLAorCQkJICAgICAgY2QtPnBlcmlvZF9ieXRlcywgRERNQV9GTEFHU19JRSk7CiAKIAkvKiB1cGRhdGUgbmV4dC10by1xdWV1ZSBwZXJpb2QgKi8KIAkrK2NkLT5xX3BlcmlvZDsKQEAgLTIzMyw3ICsyMzEsNyBAQAogCXBjZC0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXBjZC0+cGVyaW9kX2J5dGVzID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpOwogCXBjZC0+cGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKHBhcmFtcyk7Ci0JcGNkLT5kbWFfYXJlYV9zID0gcGNkLT5kbWFfYXJlYSA9ICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmRtYV9hZGRyOworCXBjZC0+ZG1hX2FyZWFfcyA9IHBjZC0+ZG1hX2FyZWEgPSBydW50aW1lLT5kbWFfYWRkcjsKIAlwY2QtPnFfcGVyaW9kID0gMDsKIAlwY2QtPmN1cnJfcGVyaW9kID0gMDsKIAlwY2QtPnBvcyA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9zYW1wbGUtYWM5Ny5jIGIvc291bmQvc29jL2F1MXgvc2FtcGxlLWFjOTcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2ODNlYi4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvYXUxeC9zYW1wbGUtYWM5Ny5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBTYW1wbGUgQXUxMngwL0F1MTU1MCBQU0MgQUM5NyBzb3VuZCBtYWNoaW5lLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE1hbnVlbCBMYXVzcyA8bWFub0Byb2FyaW5lbGsuaG9tZWxpbnV4Lm5ldD4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb3V0bGluZWQgaW4gdGhlIGZpbGUgQ09QWUlORyBhdCB0aGUgcm9vdCBvZiB0aGlzCi0gKiAgc291cmNlIGFyY2hpdmUuCi0gKgotICogVGhpcyBpcyBhIHZlcnkgZ2VuZXJpYyBBQzk3IHNvdW5kIG1hY2hpbmUgZHJpdmVyIGZvciBib2FyZHMgd2hpY2gKLSAqIGhhdmUgKEFDOTcpIGF1ZGlvIGF0IFBTQzEgKGUuZy4gREIxMjAwIGRlbW9ib2FyZHMpLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oPgotCi0jaW5jbHVkZSAiLi4vY29kZWNzL2FjOTcuaCIKLSNpbmNsdWRlICJwc2MuaCIKLQotc3RhdGljIGludCBhdTF4cHNjX3NhbXBsZV9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGFpID0gewotCS5uYW1lCQk9ICJBQzk3IiwKLQkuc3RyZWFtX25hbWUJPSAiQUM5NyBIaUZpIiwKLQkuY3B1X2RhaQk9ICZhdTF4cHNjX2FjOTdfZGFpLAkvKiBzZWUgcHNjLWFjOTcuYyAqLwotCS5jb2RlY19kYWkJPSAmYWM5N19kYWksCQkvKiBzZWUgY29kZWNzL2FjOTcuYyAqLwotCS5pbml0CQk9IGF1MXhwc2Nfc2FtcGxlX2FjOTdfaW5pdCwKLQkub3BzCQk9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBhdTF4cHNjX3NhbXBsZV9hYzk3X21hY2hpbmUgPSB7Ci0JLm5hbWUJCT0gIkF1MXh4eCBQU0MgQUM5NyBBdWRpbyIsCi0JLmRhaV9saW5rCT0gJmF1MXhwc2Nfc2FtcGxlX2FjOTdfZGFpLAotCS5udW1fbGlua3MJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBhdTF4cHNjX3NhbXBsZV9hYzk3X2RldmRhdGEgPSB7Ci0JLmNhcmQJCT0gJmF1MXhwc2Nfc2FtcGxlX2FjOTdfbWFjaGluZSwKLQkucGxhdGZvcm0JPSAmYXUxeHBzY19zb2NfcGxhdGZvcm0sIC8qIHNlZSBkYmRtYTIuYyAqLwotCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hYzk3LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4cHNjX3BzYzFfcmVzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBDUEhZU0FERFIoUFNDMV9CQVNFX0FERFIpLAotCQkuZW5kCT0gQ1BIWVNBRERSKFBTQzFfQkFTRV9BRERSKSArIDB4MDAwZmZmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi0JCS5zdGFydAk9IEFVMTIwMF9QU0MxX0lOVCwKLQkJLmVuZAk9IEFVMTIwMF9QU0MxX0lOVCwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JCS5zdGFydAk9IEFVMTU1MF9QU0MxX0lOVCwKLQkJLmVuZAk9IEFVMTU1MF9QU0MxX0lOVCwKLSNlbmRpZgotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfVFgsCi0JCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MxX1JYLAotCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzFfUlgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXUxeHBzY19zYW1wbGVfYWM5N19kZXY7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF1MXhwc2Nfc2FtcGxlX2FjOTdfbG9hZCh2b2lkKQotewotCWludCByZXQ7Ci0KLSNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAotCXVuc2lnbmVkIGxvbmcgaW87Ci0KLQkvKiBtb2RpZnkgc3lzX3BpbmZ1bmMgZm9yIEFDOTcgb24gUFNDMSAqLwotCWlvID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpOwotCWlvIHw9IFNZU19QSU5GVU5DX1AxQzsKLQlpbyAmPSB+KFNZU19QSU5GVU5DX1AxQSB8IFNZU19QSU5GVU5DX1AxQik7Ci0JYXVfd3JpdGVsKGlvLCBTWVNfUElORlVOQyk7Ci0JYXVfc3luYygpOwotI2VuZGlmCi0KLQlyZXQgPSAtRU5PTUVNOwotCi0JLyogc2V0dXAgUFNDIGNsb2NrIHNvdXJjZSBmb3IgQUM5NyBwYXJ0OiBleHRlcm5hbCBjbG9jayBwcm92aWRlZAotCSAqIGJ5IGNvZGVjLiAgVGhlIHBzYy1hYzk3LmMgZHJpdmVyIGRlcGVuZHMgb24gdGhpcyBzZXR0aW5nIQotCSAqLwotCWF1X3dyaXRlbChQU0NfU0VMX0NMS19TRVJDTEssIFBTQzFfQkFTRV9BRERSICsgUFNDX1NFTF9PRkZTRVQpOwotCWF1X3N5bmMoKTsKLQotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFhdTF4cHNjX3NhbXBsZV9hYzk3X2RldikKLQkJZ290byBvdXQ7Ci0KLQlhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldi0+cmVzb3VyY2UgPQotCQlrbWVtZHVwKGF1MXhwc2NfcHNjMV9yZXMsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICoKLQkJCUFSUkFZX1NJWkUoYXUxeHBzY19wc2MxX3JlcyksIEdGUF9LRVJORUwpOwotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShhdTF4cHNjX3BzYzFfcmVzKTsKLQlhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldi0+aWQgPSAxOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYsCi0JCQkgICAgICZhdTF4cHNjX3NhbXBsZV9hYzk3X2RldmRhdGEpOwotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YS5kZXYgPSAmYXUxeHBzY19zYW1wbGVfYWM5N19kZXYtPmRldjsKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KTsKLQotCWlmIChyZXQpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldik7Ci0JCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ID0gTlVMTDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXUxeHBzY19zYW1wbGVfYWM5N19leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYpOwotfQotCi1tb2R1bGVfaW5pdChhdTF4cHNjX3NhbXBsZV9hYzk3X2xvYWQpOwotbW9kdWxlX2V4aXQoYXUxeHBzY19zYW1wbGVfYWM5N19leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBdTF4eHggUFNDIHNhbXBsZSBBQzk3IG1hY2hpbmUiKTsKLU1PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyA8bWFub0Byb2FyaW5lbGsuaG9tZWxpbnV4Lm5ldD4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKaW5kZXggY2YwZGZiN2NhLi42N2NiZmU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMzQ5LDkgKzM0OSw3IEBACiAJCQlzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgXAogCQkJCXNpemUsICZzcG9ydF9oYW5kbGUtPnR4X2RtYV9waHksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYpIHsKLQkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBcCi0JCQkJCWJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgXAotCQkJCQltZW1vcnkgcmVnaW9uXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBidWYgLSBQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfSBlbHNlCiAJCQkJbWVtc2V0KHNwb3J0X2hhbmRsZS0+dHhfZG1hX2J1ZiwgMCwgc2l6ZSk7CkBAIC0zNjIsOSArMzYwLDcgQEAKIAkJCXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBcCiAJCQkJc2l6ZSwgJnNwb3J0X2hhbmRsZS0+cnhfZG1hX3BoeSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZikgewotCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIFwKLQkJCQkJYnVmIC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBcCi0JCQkJCW1lbW9yeSByZWdpb25cbiIpOworCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIGJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9IGVsc2UKIAkJCQltZW1zZXQoc3BvcnRfaGFuZGxlLT5yeF9kbWFfYnVmLCAwLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDYyZmJiODQuLmM2YzZhNGE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKQEAgLTIwNyw4ICsyMDcsNyBAQAogCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChwY20tPmNhcmQtPmRldiwgc2l6ZSwKIAkJCSZidWYtPmFkZHIsIEdGUF9LRVJORUwpOwogCWlmICghYnVmLT5hcmVhKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgXAotCQkJUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlidWYtPmJ5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCmluZGV4IGE4YzczY2JiLi41ZTAzYmIyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMKQEAgLTI0NCw4ICsyNDQsNyBAQAogCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChwY20tPmNhcmQtPmRldiwgc2l6ZSAqIDQsCiAJCSZidWYtPmFkZHIsIEdGUF9LRVJORUwpOwogCWlmICghYnVmLT5hcmVhKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgXAotCQkJUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlidWYtPmJ5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCA1MmIwMDVmLi4xNzQzZDU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0yMyw2ICsyMyw3IEBACiAJc2VsZWN0IFNORF9TT0NfQUs0NjcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NTNDI3MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19NQVg5ODc3IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX0RBNzIxMCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CiAJc2VsZWN0IFNORF9TT0NfU1BESUYKIAlzZWxlY3QgU05EX1NPQ19TU00yNjAyIGlmIEkyQwpAQCAtMzUsNiArMzYsNyBAQAogCXNlbGVjdCBTTkRfU09DX1RXTDQwMzAgaWYgVFdMNDAzMF9DT1JFCiAJc2VsZWN0IFNORF9TT0NfVURBMTM0WAogCXNlbGVjdCBTTkRfU09DX1VEQTEzODAgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV00yMDAwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODM1MCBpZiBNRkRfV004MzUwCiAJc2VsZWN0IFNORF9TT0NfV004NDAwIGlmIE1GRF9XTTg0MDAKIAlzZWxlY3QgU05EX1NPQ19XTTg1MTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQpAQCAtNDksMTQgKzUxLDE4IEBACiAJc2VsZWN0IFNORF9TT0NfV004Nzc2IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTAzIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODkwNCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NDAgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTU1IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk2MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NjEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk3NCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5NzggaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTg4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTkzIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODk5NCBpZiBNRkRfV004OTk0CiAJc2VsZWN0IFNORF9TT0NfV005MDgxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNOTcwNSBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEyIGlmIFNORF9TT0NfQUM5N19CVVMKQEAgLTExMiw2ICsxMTgsOSBAQAogY29uZmlnIFNORF9TT0NfQ1M0MjcwCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfREE3MjEwCisgICAgICAgIHRyaXN0YXRlCisKICMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBWRCA9IDMuM1YgRXJyYXRhCiAjIFNlbGVjdCBpZiB5b3UgYXJlIGFmZmVjdGVkIGJ5IHRoZSBlcnJhdGEgd2hlcmUgdGhlIHBhcnQgd2lsbCBub3QgZnVuY3Rpb24KICMgaWYgTUNMSyBkaXZpZGUtYnktMS41IGlzIHNlbGVjdGVkIGFuZCBWRCBpcyBzZXQgdG8gMy4zVi4gIFRoZSBkcml2ZXIgd2lsbApAQCAtMjAzLDkgKzIxMiwxNSBAQAogY29uZmlnIFNORF9TT0NfV004OTAzCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTA0CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV004OTQwCiAgICAgICAgIHRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODk1NQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODk2MAogCXRyaXN0YXRlCiAKQEAgLTIxOCw2ICsyMzMsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTc0CiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTc4CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV004OTg4CiAJdHJpc3RhdGUKIApAQCAtMjI3LDYgKzI0NSw5IEBACiBjb25maWcgU05EX1NPQ19XTTg5OTMKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5OTQKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTkwODEKIAl0cmlzdGF0ZQogCkBAIC0yNDUsMyArMjY2LDYgQEAKIAogY29uZmlnIFNORF9TT0NfVFBBNjEzMEEyCiAJdHJpc3RhdGUKKworY29uZmlnIFNORF9TT0NfV00yMDAwCisJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGRiYWVjYjEuLmRkNWNlNmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogc25kLXNvYy1hazQ2NzEtb2JqcyA6PSBhazQ2NzEubwogc25kLXNvYy1jczQyNzAtb2JqcyA6PSBjczQyNzAubwogc25kLXNvYy1jeDIwNDQyLW9ianMgOj0gY3gyMDQ0Mi5vCitzbmQtc29jLWRhNzIxMC1vYmpzIDo9IGRhNzIxMC5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwogc25kLXNvYy1wY20zMDA4LW9ianMgOj0gcGNtMzAwOC5vCiBzbmQtc29jLXNwZGlmLW9ianMgOj0gc3BkaWZfdHJhbnNjaWV2ZXIubwpAQCAtMzYsMTQgKzM3LDE4IEBACiBzbmQtc29jLXdtODc3Ni1vYmpzIDo9IHdtODc3Ni5vCiBzbmQtc29jLXdtODkwMC1vYmpzIDo9IHdtODkwMC5vCiBzbmQtc29jLXdtODkwMy1vYmpzIDo9IHdtODkwMy5vCitzbmQtc29jLXdtODkwNC1vYmpzIDo9IHdtODkwNC5vCiBzbmQtc29jLXdtODk0MC1vYmpzIDo9IHdtODk0MC5vCitzbmQtc29jLXdtODk1NS1vYmpzIDo9IHdtODk1NS5vCiBzbmQtc29jLXdtODk2MC1vYmpzIDo9IHdtODk2MC5vCiBzbmQtc29jLXdtODk2MS1vYmpzIDo9IHdtODk2MS5vCiBzbmQtc29jLXdtODk3MS1vYmpzIDo9IHdtODk3MS5vCiBzbmQtc29jLXdtODk3NC1vYmpzIDo9IHdtODk3NC5vCitzbmQtc29jLXdtODk3OC1vYmpzIDo9IHdtODk3OC5vCiBzbmQtc29jLXdtODk4OC1vYmpzIDo9IHdtODk4OC5vCiBzbmQtc29jLXdtODk5MC1vYmpzIDo9IHdtODk5MC5vCiBzbmQtc29jLXdtODk5My1vYmpzIDo9IHdtODk5My5vCitzbmQtc29jLXdtODk5NC1vYmpzIDo9IHdtODk5NC5vCiBzbmQtc29jLXdtOTA4MS1vYmpzIDo9IHdtOTA4MS5vCiBzbmQtc29jLXdtOTcwNS1vYmpzIDo9IHdtOTcwNS5vCiBzbmQtc29jLXdtOTcxMi1vYmpzIDo9IHdtOTcxMi5vCkBAIC01Myw2ICs1OCw3IEBACiAjIEFtcAogc25kLXNvYy1tYXg5ODc3LW9ianMgOj0gbWF4OTg3Ny5vCiBzbmQtc29jLXRwYTYxMzBhMi1vYmpzIDo9IHRwYTYxMzBhMi5vCitzbmQtc29jLXdtMjAwMC1vYmpzIDo9IHdtMjAwMC5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0FDOTdfQ09ERUMpCSs9IHNuZC1zb2MtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDE4MzYpCSs9IHNuZC1zb2MtYWQxODM2Lm8KQEAgLTY2LDYgKzcyLDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDY3MSkJKz0gc25kLXNvYy1hazQ2NzEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DWDIwNDQyKQkrPSBzbmQtc29jLWN4MjA0NDIubworb2JqLSQoQ09ORklHX1NORF9TT0NfREE3MjEwKQkrPSBzbmQtc29jLWRhNzIxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QQ00zMDA4KQkrPSBzbmQtc29jLXBjbTMwMDgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1BESUYpCSs9IHNuZC1zb2Mtc3BkaWYubwpAQCAtOTIsMTQgKzk5LDE4IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NzYpCSs9IHNuZC1zb2Mtd204Nzc2Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMCkJKz0gc25kLXNvYy13bTg5MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCi1vYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzEpCSs9IHNuZC1zb2Mtd204OTcxLm8KLW9iai0kKENPTkZJR19TTkRfU09DX1dNODk3NCkJKz0gc25kLXNvYy13bTg5NzQubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTA0KQkrPSBzbmQtc29jLXdtODkwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NDApCSs9IHNuZC1zb2Mtd204OTQwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk1NSkJKz0gc25kLXNvYy13bTg5NTUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTYwKQkrPSBzbmQtc29jLXdtODk2MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NjEpCSs9IHNuZC1zb2Mtd204OTYxLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk3MSkJKz0gc25kLXNvYy13bTg5NzEubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTc0KQkrPSBzbmQtc29jLXdtODk3NC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzgpCSs9IHNuZC1zb2Mtd204OTc4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk4OCkJKz0gc25kLXNvYy13bTg5ODgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkwKQkrPSBzbmQtc29jLXdtODk5MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTMpCSs9IHNuZC1zb2Mtd204OTkzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk5NCkJKz0gc25kLXNvYy13bTg5OTQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005MDgxKQkrPSBzbmQtc29jLXdtOTA4MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MDUpCSs9IHNuZC1zb2Mtd205NzA1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMikJKz0gc25kLXNvYy13bTk3MTIubwpAQCAtMTA5LDMgKzEyMCw0IEBACiAjIEFtcAogb2JqLSQoQ09ORklHX1NORF9TT0NfTUFYOTg3NykJKz0gc25kLXNvYy1tYXg5ODc3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RQQTYxMzBBMikJKz0gc25kLXNvYy10cGE2MTMwYTIubworb2JqLSQoQ09ORklHX1NORF9TT0NfV00yMDAwKQkrPSBzbmQtc29jLXdtMjAwMC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwppbmRleCAyYzE4ZTNkLi4zYzgwMTM3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKQEAgLTE3MSw1NyArMTcxLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAqIGludGVyZmFjZSB0byByZWFkL3dyaXRlIGFkMTgzNiByZWdpc3RlcgotICovCi0jZGVmaW5lIEFEMTgzNl9TUElfUkVHX1NIRlQgMTIKLSNkZWZpbmUgQUQxODM2X1NQSV9SRUFEICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgQUQxODM2X1NQSV9WQUxfTVNLICAweDNGRgotCi0vKgotICogd3JpdGUgdG8gdGhlIGFkMTgzNiByZWdpc3RlciBzcGFjZQotICovCi0KLXN0YXRpYyBpbnQgYWQxODM2X3dyaXRlX3JlZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCXVuc2lnbmVkIGludCB2YWx1ZSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWQxODM2X3NvY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JaWYgKHZhbHVlICE9IHJlZ19jYWNoZVtyZWddKSB7Ci0JCXVuc2lnbmVkIHNob3J0IGJ1ZjsKLQkJc3RydWN0IHNwaV90cmFuc2ZlciB0ID0gewotCQkJLnR4X2J1ZiA9ICZidWYsCi0JCQkubGVuID0gMiwKLQkJfTsKLQkJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJLyogcmVzZXQgY2xvY2sgY29udHJvbCBtb2RlICovCisJdTE2IGFkY19jdHJsMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxODM2X0FEQ19DVFJMMik7CisJYWRjX2N0cmwyICY9IH5BRDE4MzZfQURDX1NFUkZNVF9NQVNLOwogCi0JCWJ1ZiA9IChyZWcgPDwgQUQxODM2X1NQSV9SRUdfU0hGVCkgfAotCQkJKHZhbHVlICYgQUQxODM2X1NQSV9WQUxfTVNLKTsKLQkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0JCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCBhZGNfY3RybDIpOwogfQogCi0vKgotICogcmVhZCBmcm9tIHRoZSBhZDE4MzYgcmVnaXN0ZXIgc3BhY2UgY2FjaGUKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhZDE4MzZfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IGFkMTgzNl9zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiByZXN0b3JlIGNsb2NrIGNvbnRyb2wgbW9kZSAqLworCXUxNiBhZGNfY3RybDIgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIpOworCWFkY19jdHJsMiB8PSBBRDE4MzZfQURDX0FVWDsKIAotCXJldHVybiByZWdfY2FjaGVbcmVnXTsKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgYWRjX2N0cmwyKTsKIH0KKyNlbHNlCisjZGVmaW5lIGFkMTgzNl9zb2Nfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFkMTgzNl9zb2NfcmVzdW1lICBOVUxMCisjZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQgYWQxODM2X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewpAQCAtMzA2LDMyICsyODQsMzggQEAKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+ZGFpID0gJmFkMTgzNl9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT53cml0ZSA9IGFkMTgzNl93cml0ZV9yZWc7Ci0JY29kZWMtPnJlYWQgPSBhZDE4MzZfcmVhZF9yZWdfY2FjaGU7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKIAlhZDE4MzZfZGFpLmRldiA9IGNvZGVjLT5kZXY7CiAJYWQxODM2X2NvZGVjID0gY29kZWM7CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNCwgMTIsIFNORF9TT0NfU1BJKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsCisJCQkJcmV0KTsKKwkJa2ZyZWUoYWQxODM2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBkZWZhdWx0IHNldHRpbmcgZm9yIGFkMTgzNiAqLwogCS8qIGRlLWVtcGhhc2lzOiA0OGtIeiwgcG93ZXItb24gZGFjICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCAweDMwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMSwgMHgzMDApOwogCS8qIHVubXV0ZSBkYWMgY2hhbm5lbHMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDIsIDB4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMiwgMHgwKTsKIAkvKiBoaWdoLXBhc3MgZmlsdGVyIGVuYWJsZSwgcG93ZXItb24gYWRjICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwxLCAweDEwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMSwgMHgxMDApOwogCS8qIHVubXV0ZSBhZGMgY2hhbm5sZXMsIGFkYyBhdXggbW9kZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgMHgxODApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIDB4MTgwKTsKIAkvKiBsZWZ0L3JpZ2h0IGRpZmY6UEdBL01VWCAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMywgMHgzQSk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMywgMHgzQSk7CiAJLyogdm9sdW1lICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wxX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19SMV9WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDJfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IyX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19MM19WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjNfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMV9WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IxX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDJfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19SMl9WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wzX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjNfVk9MLCAweDNGRik7CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTQwNCw2ICszODgsOCBAQAogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQxODM2ID0gewogCS5wcm9iZSA9IAlhZDE4MzZfcHJvYmUsCiAJLnJlbW92ZSA9IAlhZDE4MzZfcmVtb3ZlLAorCS5zdXNwZW5kID0gICAgICBhZDE4MzZfc29jX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgICAgIGFkMTgzNl9zb2NfcmVzdW1lLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfYWQxODM2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKaW5kZXggNzY2MGVlNi4uZTlkOTBkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCkBAIC01NCw2ICs1NCw3IEBACiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX01BU0sJICAgICAgICg3IDw8IDYpCiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX1BDSzI1NiAgICAgICAoMHg0IDw8IDYpCiAjZGVmaW5lIEFEMTgzNl9BRENfU0VSRk1UX1BDSzEyOCAgICAgICAoMHg1IDw8IDYpCisjZGVmaW5lIEFEMTgzNl9BRENfQVVYICAgICAgICAgICAgICAgICAoMHg2IDw8IDYpCiAKICNkZWZpbmUgQUQxODM2X0FEQ19DVFJMMyAgICAgICAgICAgICAgIDE0CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCmluZGV4IDVkNDg5MTguLmMyMzM4MTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYwpAQCAtNDYsNiArNDYsMTEgQEAKIAl1OCByZWdfY2FjaGVbQUQxOTM4X05VTV9SRUdTXTsKIH07CiAKKy8qIGFkMTkzOCByZWdpc3RlciBjYWNoZSAmIGRlZmF1bHQgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCB1OCBhZDE5MzhfcmVnW0FEMTkzOF9OVU1fUkVHU10gPSB7CisJMCwgMCwgMCwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMCwgMCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWQxOTM4X2NvZGVjOwogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQxOTM4Owogc3RhdGljIGludCBhZDE5MzhfcmVnaXN0ZXIoc3RydWN0IGFkMTkzOF9wcml2ICphZDE5MzgpOwpAQCAtOTcsNiArMTAyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhZDE5MzhfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIlBsYXliYWNrIiwgQUQxOTM4X0RBQ19DVFJMMCwgMCwgMSksCiAJU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkNhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlBMTF9QV1IiLCBBRDE5MzhfUExMX0NMS19DVFJMMCwgMCwgMSwgTlVMTCwgMCksCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiQURDX1BXUiIsIEFEMTkzOF9BRENfQ1RSTDAsIDAsIDEsIE5VTEwsIDApLAogCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzFPVVQiKSwKIAlTTkRfU09DX0RBUE1fT1VUUFVUKCJEQUMyT1VUIiksCkBAIC0xMDcsNiArMTEzLDggQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX3BhdGhzW10gPSB7CisJeyAiREFDIiwgTlVMTCwgIlBMTF9QV1IiIH0sCisJeyAiQURDIiwgTlVMTCwgIlBMTF9QV1IiIH0sCiAJeyAiREFDIiwgTlVMTCwgIkFEQ19QV1IiIH0sCiAJeyAiQURDIiwgTlVMTCwgIkFEQ19QV1IiIH0sCiAJeyAiREFDMU9VVCIsICJEQUMxIFN3aXRjaCIsICJEQUMiIH0sCkBAIC0xMjYsMzAgKzEzNCwyMCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJaW50IHJlZzsKIAotCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOwogCXJlZyA9IChtdXRlID4gMCkgPyByZWcgfCBBRDE5MzhfREFDX01BU1RFUl9NVVRFIDogcmVnICYKIAkJKH5BRDE5MzhfREFDX01BU1RFUl9NVVRFKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWQxOTM4X3BsbF9wb3dlcmN0cmwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgY21kKQotewotCWludCByZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDApOwotCXJlZyA9IChjbWQgPiAwKSA/IHJlZyAmICh+QUQxOTM4X1BMTF9QT1dFUkRPV04pIDogcmVnIHwKLQkJQUQxOTM4X1BMTF9QT1dFUkRPV047Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCByZWcpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWQxOTM4X3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IHR4X21hc2ssCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cywgaW50IHdpZHRoKQorCQkJICAgICAgIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCB3aWR0aCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCWludCBkYWNfcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEpOwotCWludCBhZGNfcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIpOworCWludCBkYWNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKKwlpbnQgYWRjX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7CiAKIAlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0NIQU5fTUFTSzsKIAlhZGNfcmVnICY9IH5BRDE5MzhfQURDX0NIQU5fTUFTSzsKQEAgLTE3NSw4ICsxNzMsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMiwgYWRjX3JlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSwgZGFjX3JlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMiwgYWRjX3JlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Nyw4ICsxODUsOCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJaW50IGFkY19yZWcsIGRhY19yZWc7CiAKLQlhZGNfcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIpOwotCWRhY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7CisJYWRjX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7CisJZGFjX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7CiAKIAkvKiBBdCBwcmVzZW50LCB0aGUgZHJpdmVyIG9ubHkgc3VwcG9ydCBBVVggQURDIG1vZGUoU05EX1NPQ19EQUlGTVRfSTJTCiAJICogd2l0aCBURE0pIGFuZCBBREMmREFDIFRETSBtb2RlKFNORF9TT0NfREFJRk1UX0RTUF9BKQpAQCAtMjY1LDggKzI2Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMiwgYWRjX3JlZyk7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjk1LDEzNCArMjkzLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOwogCXJlZyA9IChyZWcgJiAofkFEMTkzOF9EQUNfV09SRF9MRU5fTUFTSykpIHwgd29yZF9sZW47Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CiAKLQlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxKTsKIAlyZWcgPSAocmVnICYgKH5BRDE5MzhfQURDX1dPUkRfTEVOX01BU0spKSB8IHdvcmRfbGVuOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTkzOF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQotewotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJYWQxOTM4X3BsbF9wb3dlcmN0cmwoY29kZWMsIDEpOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlicmVhazsKLQljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJYWQxOTM4X3BsbF9wb3dlcmN0cmwoY29kZWMsIDApOwotCQlicmVhazsKLQl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGludGVyZmFjZSB0byByZWFkL3dyaXRlIGFkMTkzOCByZWdpc3RlcgotICovCi0KLSNkZWZpbmUgQUQxOTM4X1NQSV9BRERSICAgIDB4NAotI2RlZmluZSBBRDE5MzhfU1BJX1JFQUQgICAgMHgxCi0jZGVmaW5lIEFEMTkzOF9TUElfQlVGTEVOICAzCi0KLS8qCi0gKiB3cml0ZSB0byB0aGUgYWQxOTM4IHJlZ2lzdGVyIHNwYWNlCi0gKi8KLQotc3RhdGljIGludCBhZDE5Mzhfd3JpdGVfcmVnKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWludCByZXQgPSAwOwotCi0JaWYgKHZhbHVlICE9IHJlZ19jYWNoZVtyZWddKSB7Ci0JCXVpbnQ4X3QgYnVmW0FEMTkzOF9TUElfQlVGTEVOXTsKLQkJc3RydWN0IHNwaV90cmFuc2ZlciB0ID0gewotCQkJLnR4X2J1ZiA9IGJ1ZiwKLQkJCS5sZW4gPSBBRDE5MzhfU1BJX0JVRkxFTiwKLQkJfTsKLQkJc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0KLQkJYnVmWzBdID0gQUQxOTM4X1NQSV9BRERSIDw8IDE7Ci0JCWJ1ZlsxXSA9IHJlZzsKLQkJYnVmWzJdID0gdmFsdWU7Ci0JCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCQlyZXQgPSBzcGlfc3luYyhjb2RlYy0+Y29udHJvbF9kYXRhLCAmbSk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJlZ19jYWNoZVtyZWddID0gdmFsdWU7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHJlYWQgZnJvbSB0aGUgYWQxOTM4IHJlZ2lzdGVyIHNwYWNlIGNhY2hlCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZDE5MzhfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCi17Ci0JdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0KLQlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Ci19Ci0KLS8qCi0gKiByZWFkIGZyb20gdGhlIGFkMTkzOCByZWdpc3RlciBzcGFjZQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWQxOTM4X3JlYWRfcmVnKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkJCXVuc2lnbmVkIGludCByZWcpCi17Ci0JY2hhciB3X2J1ZltBRDE5MzhfU1BJX0JVRkxFTl07Ci0JY2hhciByX2J1ZltBRDE5MzhfU1BJX0JVRkxFTl07Ci0JaW50IHJldDsKLQotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdCA9IHsKLQkJLnR4X2J1ZiA9IHdfYnVmLAotCQkucnhfYnVmID0gcl9idWYsCi0JCS5sZW4gPSBBRDE5MzhfU1BJX0JVRkxFTiwKLQl9OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCi0Jd19idWZbMF0gPSAoQUQxOTM4X1NQSV9BRERSIDw8IDEpIHwgQUQxOTM4X1NQSV9SRUFEOwotCXdfYnVmWzFdID0gcmVnOwotCXdfYnVmWzJdID0gMDsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0JcmV0ID0gc3BpX3N5bmMoY29kZWMtPmNvbnRyb2xfZGF0YSwgJm0pOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0dXJuCXJfYnVmWzJdOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLXN0YXRpYyBpbnQgYWQxOTM4X2ZpbGxfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBpOwotCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwotCi0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7Ci0JCWludCByZXQgPSBhZDE5MzhfcmVhZF9yZWcoY29kZWMsIGkpOwotCQlpZiAocmV0ID09IC1FSU8pIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiQUQxOTM4IFNQSSByZWFkIGZhaWx1cmVcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlyZWdfY2FjaGVbaV0gPSByZXQ7Ci0JfQorCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxMiwzMiArMzg5LDM3IEBACiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPmRhaSA9ICZhZDE5MzhfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKLQljb2RlYy0+d3JpdGUgPSBhZDE5Mzhfd3JpdGVfcmVnOwotCWNvZGVjLT5yZWFkID0gYWQxOTM4X3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IGFkMTkzOF9zZXRfYmlhc19sZXZlbDsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAogCWFkMTkzOF9kYWkuZGV2ID0gY29kZWMtPmRldjsKIAlhZDE5MzhfY29kZWMgPSBjb2RlYzsKIAorCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCBhZDE5MzhfcmVnLCBBRDE5MzhfTlVNX1JFR1MpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCA4LCBTTkRfU09DX1NQSSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLAorCQkJCXJldCk7CisJCWtmcmVlKGFkMTkzOCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJLyogZGVmYXVsdCBzZXR0aW5nIGZvciBhZDE5MzggKi8KIAogCS8qIHVubXV0ZSBkYWMgY2hhbm5lbHMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ0hOTF9NVVRFLCAweDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ0hOTF9NVVRFLCAweDApOwogCS8qIGRlLWVtcGhhc2lzOiA0OGtIeiwgcG93ZWRvd24gZGFjICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCAweDFBKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCAweDFBKTsKIAkvKiBwb3dlcmRvd24gZGFjLCBkYWMgaW4gdGRtIG1vZGUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDAsIDB4NDEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDAsIDB4NDEpOwogCS8qIGhpZ2gtcGFzcyBmaWx0ZXIgZW5hYmxlICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwwLCAweDMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDAsIDB4Myk7CiAJLyogc2F0YSBkZWxheT0xLCBhZGMgYXV4IG1vZGUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEsIDB4NDMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEsIDB4NDMpOwogCS8qIHBsbCBpbnB1dDogbWNsa2kveGkgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCAweDlEKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwxLCAweDA0KTsKLQotCWFkMTkzOF9maWxsX2NhY2hlKGNvZGVjKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCwgMHg5RCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDEsIDB4MDQpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC01NTksNyArNDQxLDYgQEAKIAogc3RhdGljIHZvaWQgYWQxOTM4X3VucmVnaXN0ZXIoc3RydWN0IGFkMTkzOF9wcml2ICphZDE5MzgpCiB7Ci0JYWQxOTM4X3NldF9iaWFzX2xldmVsKCZhZDE5MzgtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZhZDE5MzhfZGFpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmFkMTkzOC0+Y29kZWMpOwogCWtmcmVlKGFkMTkzOCk7CkBAIC01OTMsNyArNDc0LDYgQEAKIAkJCQkgIEFSUkFZX1NJWkUoYWQxOTM4X2RhcG1fd2lkZ2V0cykpOwogCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOwogCi0JYWQxOTM4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIHBjbV9lcnI6CiAJcmV0dXJuIHJldDsKQEAgLTYxMCwzNyArNDkwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhZDE5Mzhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwotCi0JYWQxOTM4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDE5MzhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwotCi0JaWYgKGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKQotCQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PTik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIGFkMTkzOF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYWQxOTM4X3Jlc3VtZSBOVUxMCi0jZW5kaWYKLQogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQxOTM4ID0gewogCS5wcm9iZSA9IAlhZDE5MzhfcHJvYmUsCiAJLnJlbW92ZSA9IAlhZDE5MzhfcmVtb3ZlLAotCS5zdXNwZW5kID0gICAgICBhZDE5Mzhfc3VzcGVuZCwKLQkucmVzdW1lID0gICAgICAgYWQxOTM4X3Jlc3VtZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X2FkMTkzOCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCmluZGV4IDNhMTRjNmYuLmI5ZWY3ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpAQCAtMTg1LDkgKzE4NSw3IEBACiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAotCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKLQkJCSBTTkRSVl9QQ01fUkFURV8zMjAwMCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgIHwKIAkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CiAJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKaW5kZXggZmZlMTIyZC4uZGZiZWIyZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlICJjczQyNzAuaCIKIApAQCAtMTA2LDYgKzEwNywxMCBAQAogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQQkweDAxCiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19CCTB4MDIKIAorc3RhdGljIGNvbnN0IGNoYXIgKnN1cHBseV9uYW1lc1tdID0geworCSJ2YSIsICJ2ZCIsICJ2bGMiCit9OworCiAvKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBDUzQyNzAgKi8KIHN0cnVjdCBjczQyNzBfcHJpdmF0ZSB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CkBAIC0xMTQsNiArMTE5LDkgQEAKIAl1bnNpZ25lZCBpbnQgbW9kZTsgLyogVGhlIG1vZGUgKEkyUyBvciBsZWZ0LWp1c3RpZmllZCkgKi8KIAl1bnNpZ25lZCBpbnQgc2xhdmVfbW9kZTsKIAl1bnNpZ25lZCBpbnQgbWFudWFsX211dGU7CisKKwkvKiBwb3dlciBkb21haW4gcmVndWxhdG9ycyAqLworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoc3VwcGx5X25hbWVzKV07CiB9OwogCiAvKioKQEAgLTE5Miw2ICsyMDAsMTEgQEAKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgdGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uLAogICogb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGluCiAgKiB0aW1lIGZvciBBTFNBLgorICoKKyAqIEZvciBzZXR1cHMgd2l0aCB2YXJpYWJsZSBNQ0xLcywgcGFzcyAwIGFzICdmcmVxJyBhcmd1bWVudC4gVGhpcyB3aWxsIGNhdXNlCisgKiB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHNhbXBsZSByYXRlcyB0byBiZSBlbmFibGVkLiBDYWxsIGl0IGFnYWluIHdpdGggYQorICogcHJvcGVyIHZhbHVlIHNldCBvbmUgdGhlIGV4dGVybmFsIGNsb2NrIGlzIHNldCAobW9zdCBwcm9iYWJseSB5b3Ugd291bGQgZG8KKyAqIHRoYXQgZnJvbSBhIG1hY2hpbmUncyBkcml2ZXIgJ2h3X3BhcmFtJyBob29rLgogICovCiBzdGF0aWMgaW50IGNzNDI3MF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKIAkJCQkgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCkBAIC0yMDUsMjAgKzIxOCwyNyBAQAogCiAJY3M0MjcwLT5tY2xrID0gZnJlcTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fTUNMS19SQVRJT1M7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgcmF0ZSA9IGZyZXEgLyBjczQyNzBfbW9kZV9yYXRpb3NbaV0ucmF0aW87Ci0JCXJhdGVzIHw9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChyYXRlKTsKLQkJaWYgKHJhdGUgPCByYXRlX21pbikKLQkJCXJhdGVfbWluID0gcmF0ZTsKLQkJaWYgKHJhdGUgPiByYXRlX21heCkKLQkJCXJhdGVfbWF4ID0gcmF0ZTsKLQl9Ci0JLyogRklYTUU6IHNvYyBzaG91bGQgc3VwcG9ydCBhIHJhdGUgbGlzdCAqLwotCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOworCWlmIChjczQyNzAtPm1jbGspIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9NQ0xLX1JBVElPUzsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgcmF0ZSA9IGZyZXEgLyBjczQyNzBfbW9kZV9yYXRpb3NbaV0ucmF0aW87CisJCQlyYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7CisJCQlpZiAocmF0ZSA8IHJhdGVfbWluKQorCQkJCXJhdGVfbWluID0gcmF0ZTsKKwkJCWlmIChyYXRlID4gcmF0ZV9tYXgpCisJCQkJcmF0ZV9tYXggPSByYXRlOworCQl9CisJCS8qIEZJWE1FOiBzb2Mgc2hvdWxkIHN1cHBvcnQgYSByYXRlIGxpc3QgKi8KKwkJcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7CiAKLQlpZiAoIXJhdGVzKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFyYXRlcykgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGVuYWJsZSBhbGwgcG9zc2libGUgcmF0ZXMgKi8KKwkJcmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMDsKKwkJcmF0ZV9taW4gPSA4MDAwOworCQlyYXRlX21heCA9IDE5MjAwMDsKIAl9CiAKIAljb2RlY19kYWktPnBsYXliYWNrLnJhdGVzID0gcmF0ZXM7CkBAIC01NzksNyArNTk5LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgcmV0OwogCiAJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLwogCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKQEAgLTU5OSw4ICs2MjAsMjYgQEAKIAkJZ290byBlcnJvcl9mcmVlX3BjbXM7CiAJfQogCisJLyogZ2V0IHRoZSBwb3dlciBzdXBwbHkgcmVndWxhdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBseV9uYW1lcyk7IGkrKykKKwkJY3M0MjcwLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBzdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCQkgY3M0MjcwLT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9wY21zOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkJICAgIGNzNDI3MC0+c3VwcGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfcmVndWxhdG9yczsKKwogCXJldHVybiAwOwogCitlcnJvcl9mcmVlX3JlZ3VsYXRvcnM6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJICAgIGNzNDI3MC0+c3VwcGxpZXMpOworCiBlcnJvcl9mcmVlX3BjbXM6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIApAQCAtNjE2LDggKzY1NSwxMiBAQAogc3RhdGljIGludCBjczQyNzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksIGNzNDI3MC0+c3VwcGxpZXMpOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwgY3M0MjcwLT5zdXBwbGllcyk7CiAKIAlyZXR1cm4gMDsKIH07CkBAIC03OTksMTcgKzg0MiwzMyBAQAogc3RhdGljIGludCBjczQyNzBfc29jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOwotCWludCByZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9QV1JDVEwpIHwgQ1M0MjcwX1BXUkNUTF9QRE5fQUxMOworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmVnLCByZXQ7CiAKLQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgcmVnKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9QV1JDVEwpIHwgQ1M0MjcwX1BXUkNUTF9QRE5fQUxMOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCSAgICAgICBjczQyNzAtPnN1cHBsaWVzKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNzNDI3MF9zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IHJlZzsKIAorCXJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJICAgICAgY3M0MjcwLT5zdXBwbGllcyk7CisKIAkvKiBJbiBjYXNlIHRoZSBkZXZpY2Ugd2FzIHB1dCB0byBoYXJkIHJlc2V0IGR1cmluZyBzbGVlcCwgd2UgbmVlZCB0bwogCSAqIHdhaXQgNTAwbnMgaGVyZSBiZWZvcmUgYW55IEkyQyBjb21tdW5pY2F0aW9uLiAqLwogCW5kZWxheSg1MDApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyOTc1YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmMKQEAgLTAsMCArMSw1ODkgQEAKKy8qCisgKiBEQTcyMTAgQUxTQSBTb2MgY29kZWMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBXcml0dGVuIGJ5IERhdmlkIENoZW4gPERhanVuLmNoZW5AZGlhc2VtaS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDbGVhbnVwcyBieSBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogVGVzdGVkIG9uIFN1cGVySCBFY292ZWMyNCBib2FyZCB3aXRoIFMxNi9TMjQgTEUgaW4gNDhLSHogdXNpbmcgSTJTCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJkYTcyMTAuaCIKKworLyogREE3MjEwIHJlZ2lzdGVyIHNwYWNlICovCisjZGVmaW5lIERBNzIxMF9TVEFUVVMJCQkweDAyCisjZGVmaW5lIERBNzIxMF9TVEFSVFVQMQkJCTB4MDMKKyNkZWZpbmUgREE3MjEwX01JQ19MCQkJMHgwNworI2RlZmluZSBEQTcyMTBfTUlDX1IJCQkweDA4CisjZGVmaW5lIERBNzIxMF9JTk1JWF9MCQkJMHgwRAorI2RlZmluZSBEQTcyMTBfSU5NSVhfUgkJCTB4MEUKKyNkZWZpbmUgREE3MjEwX0FEQ19IUEYJCQkweDBGCisjZGVmaW5lIERBNzIxMF9BREMJCQkweDEwCisjZGVmaW5lIERBNzIxMF9EQUNfSFBGCQkJMHgxNAorI2RlZmluZSBEQTcyMTBfREFDX0wJCQkweDE1CisjZGVmaW5lIERBNzIxMF9EQUNfUgkJCTB4MTYKKyNkZWZpbmUgREE3MjEwX0RBQ19TRUwJCQkweDE3CisjZGVmaW5lIERBNzIxMF9PVVRNSVhfTAkJCTB4MUMKKyNkZWZpbmUgREE3MjEwX09VVE1JWF9SCQkJMHgxRAorI2RlZmluZSBEQTcyMTBfSFBfTF9WT0wJCQkweDIxCisjZGVmaW5lIERBNzIxMF9IUF9SX1ZPTAkJCTB4MjIKKyNkZWZpbmUgREE3MjEwX0hQX0NGRwkJCTB4MjMKKyNkZWZpbmUgREE3MjEwX0RBSV9TUkNfU0VMCQkweDI1CisjZGVmaW5lIERBNzIxMF9EQUlfQ0ZHMQkJCTB4MjYKKyNkZWZpbmUgREE3MjEwX0RBSV9DRkczCQkJMHgyOAorI2RlZmluZSBEQTcyMTBfUExMX0RJVjMJCQkweDJCCisjZGVmaW5lIERBNzIxMF9QTEwJCQkweDJDCisKKy8qIFNUQVJUVVAxIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX1NDX01TVF9FTgkJKDEgPDwgMCkKKworLyogTUlDX0wgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfTUlDQklBU19FTgkJKDEgPDwgNikKKyNkZWZpbmUgREE3MjEwX01JQ19MX0VOCQkJKDEgPDwgNykKKworLyogTUlDX1IgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfTUlDX1JfRU4JCQkoMSA8PCA3KQorCisvKiBJTk1JWF9MIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0lOX0xfRU4JCQkoMSA8PCA3KQorCisvKiBJTk1JWF9SIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0lOX1JfRU4JCQkoMSA8PCA3KQorCisvKiBBRENfSFBGIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0FEQ19WT0lDRV9FTgkJKDEgPDwgNykKKworLyogQURDIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0FEQ19MX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgREE3MjEwX0FEQ19SX0VOCQkJKDEgPDwgNykKKworLyogREFDX0hQRiBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBQ19WT0lDRV9FTgkJKDEgPDwgNykKKworLyogREFDX1NFTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUNfTF9TUkNfREFJX0wJCSg0IDw8IDApCisjZGVmaW5lIERBNzIxMF9EQUNfTF9FTgkJCSgxIDw8IDMpCisjZGVmaW5lIERBNzIxMF9EQUNfUl9TUkNfREFJX1IJCSg1IDw8IDQpCisjZGVmaW5lIERBNzIxMF9EQUNfUl9FTgkJCSgxIDw8IDcpCisKKy8qIE9VVE1JWF9MIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX09VVF9MX0VOCQkJKDEgPDwgNykKKworLyogT1VUTUlYX1IgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfT1VUX1JfRU4JCQkoMSA8PCA3KQorCisvKiBIUF9DRkcgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfSFBfMkNBUF9NT0RFCQkoMSA8PCAxKQorI2RlZmluZSBEQTcyMTBfSFBfU0VOU0VfRU4JCSgxIDw8IDIpCisjZGVmaW5lIERBNzIxMF9IUF9MX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgREE3MjEwX0hQX01PREUJCQkoMSA8PCA2KQorI2RlZmluZSBEQTcyMTBfSFBfUl9FTgkJCSgxIDw8IDcpCisKKy8qIERBSV9TUkNfU0VMIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBSV9PVVRfTF9TUkMJCSg2IDw8IDApCisjZGVmaW5lIERBNzIxMF9EQUlfT1VUX1JfU1JDCQkoNyA8PCA0KQorCisvKiBEQUlfQ0ZHMSBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUlfV09SRF9TMTZfTEUJCSgwIDw8IDApCisjZGVmaW5lIERBNzIxMF9EQUlfV09SRF9TMjRfTEUJCSgyIDw8IDApCisjZGVmaW5lIERBNzIxMF9EQUlfRkxFTl82NEJJVAkJKDEgPDwgMikKKyNkZWZpbmUgREE3MjEwX0RBSV9NT0RFX01BU1RFUgkJKDEgPDwgNykKKworLyogREFJX0NGRzMgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFJX0ZPUk1BVF9JMlNNT0RFCSgwIDw8IDApCisjZGVmaW5lIERBNzIxMF9EQUlfT0UJCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfREFJX0VOCQkJKDEgPDwgNykKKworLypQTExfRElWMyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9NQ0xLX1JBTkdFXzEwXzIwX01IWgkoMSA8PCA0KQorI2RlZmluZSBEQTcyMTBfUExMX0JZUAkJCSgxIDw8IDYpCisKKy8qIFBMTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9QTExfRlNfNDgwMDAJCSgxMSA8PCAwKQorCisjZGVmaW5lIERBNzIxMF9WRVJTSU9OICIwLjAuMSIKKworLyogQ29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgZGE3MjEwX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICpkYTcyMTBfY29kZWM7CisKKy8qCisgKiBSZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgY29uc3QgdTggZGE3MjEwX3JlZ1tdID0geworCTB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFIwICAtIFI3ICAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCS8qIFI4ICAtIFJGICAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MTAsIDB4NTQsCS8qIFIxMCAtIFIxNyAqLworCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFIxOCAtIFIxRiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzYsIDB4MDAsIDB4MDAsCS8qIFIyMCAtIFIyNyAqLworCTB4MDQsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MkEsIDB4MDAsIDB4NDAsIDB4MDAsCS8qIFIyOCAtIFIyRiAqLworCTB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsCS8qIFIzMCAtIFIzNyAqLworCTB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFIzOCAtIFIzRiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI0MCAtIFI0RiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI0OCAtIFI0RiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI1MCAtIFI1NyAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI1OCAtIFI1RiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI2MCAtIFI2NyAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI2OCAtIFI2RiAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI3MCAtIFI3NyAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDAsCS8qIFI3OCAtIFI3RiAqLworCTB4MDAsIDB4MDAsIDB4MkMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIFI4MCAtIFI4NyAqLworCTB4MDAsCQkJCQkJLyogUjg4ICAgICAgICovCit9OworCisvKgorICogUmVhZCBkYTcyMTAgcmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB1MzIgZGE3MjEwX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHJlZykKK3sKKwl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKGRhNzIxMF9yZWcpKTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworLyoKKyAqIFdyaXRlIHRvIHRoZSBkYTcyMTAgcmVnaXN0ZXIgc3BhY2UKKyAqLworc3RhdGljIGludCBkYTcyMTBfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgcmVnLCB1MzIgdmFsdWUpCit7CisJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzJdOworCisJQlVHX09OKGNvZGVjLT52b2xhdGlsZV9yZWdpc3Rlcik7CisKKwlkYXRhWzBdID0gcmVnICYgMHhmZjsKKwlkYXRhWzFdID0gdmFsdWUgJiAweGZmOworCisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtRUlPOworCisJaWYgKDIgIT0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpKQorCQlyZXR1cm4gLUVJTzsKKworCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgZnJvbSB0aGUgZGE3MjEwIHJlZ2lzdGVyIHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBkYTcyMTBfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiByZWcpCit7CisJaWYgKERBNzIxMF9TVEFUVVMgPT0gcmVnKQorCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNvZGVjLT5jb250cm9sX2RhdGEsIHJlZyk7CisKKwlyZXR1cm4gZGE3MjEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOworfQorCitzdGF0aWMgaW50IGRhNzIxMF9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlpbnQgaXNfcGxheSA9IHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKworCWlmIChpc19wbGF5KSB7CisJCS8qIFBsYXlCYWNrIFZvbHVtZSA0MCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSFBfTF9WT0wsIDB4M0YsIDQwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0hQX1JfVk9MLCAweDNGLCA0MCk7CisKKwkJLyogRW5hYmxlIE91dCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfT1VUTUlYX0wsIDB4MUYsIDB4MTApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfT1VUTUlYX1IsIDB4MUYsIDB4MTApOworCisJfSBlbHNlIHsKKwkJLyogVm9sdW1lIDcgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX01JQ19MLCAweDcsIDB4Nyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9NSUNfUiwgMHg3LCAweDcpOworCisJCS8qIEVuYWJsZSBNaWMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0lOTUlYX0wsIDB4MUYsIDB4MSk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9JTk1JWF9SLCAweDFGLCAweDEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFBDTSBEQUkgd29yZCBsZW5ndGguCisgKi8KK3N0YXRpYyBpbnQgZGE3MjEwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXUzMiBkYWlfY2ZnMTsKKwl1MzIgcmVnLCBtYXNrOworCisJLyogc2V0IERBSSBzb3VyY2UgdG8gTGVmdCBhbmQgUmlnaHQgQURDICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFJX1NSQ19TRUwsCisJCSAgICAgREE3MjEwX0RBSV9PVVRfUl9TUkMgfCBEQTcyMTBfREFJX09VVF9MX1NSQyk7CisKKwkvKiBFbmFibGUgREFJICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFJX0NGRzMsIERBNzIxMF9EQUlfT0UgfCBEQTcyMTBfREFJX0VOKTsKKworCWRhaV9jZmcxID0gMHhGQyAmIGRhNzIxMF9yZWFkKGNvZGVjLCBEQTcyMTBfREFJX0NGRzEpOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlkYWlfY2ZnMSB8PSBEQTcyMTBfREFJX1dPUkRfUzE2X0xFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlkYWlfY2ZnMSB8PSBEQTcyMTBfREFJX1dPUkRfUzI0X0xFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSwgZGFpX2NmZzEpOworCisJLyogRklYTUUKKwkgKgorCSAqIEl0IHN1cHBvcnQgNDhLIG9ubHkgbm93CisJICovCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA0ODAwMDoKKwkJaWYgKFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPT0gc3Vic3RyZWFtLT5zdHJlYW0pIHsKKwkJCXJlZyAgPSBEQTcyMTBfREFDX0hQRjsKKwkJCW1hc2sgPSBEQTcyMTBfREFDX1ZPSUNFX0VOOworCQl9IGVsc2UgeworCQkJcmVnICA9IERBNzIxMF9BRENfSFBGOworCQkJbWFzayA9IERBNzIxMF9BRENfVk9JQ0VfRU47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCAwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IERBSSBtb2RlIGFuZCBGb3JtYXQKKyAqLworc3RhdGljIGludCBkYTcyMTBfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIHUzMiBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MzIgZGFpX2NmZzE7CisJdTMyIGRhaV9jZmczOworCisJZGFpX2NmZzEgPSAweDdmICYgZGE3MjEwX3JlYWQoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSk7CisJZGFpX2NmZzMgPSAweGZjICYgZGE3MjEwX3JlYWQoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMyk7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlkYWlfY2ZnMSB8PSBEQTcyMTBfREFJX01PREVfTUFTVEVSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRQorCSAqCisJICogSXQgc3VwcG9ydCBJMlMgb25seSBub3cKKwkgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWRhaV9jZmczIHw9IERBNzIxMF9EQUlfRk9STUFUX0kyU01PREU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZJWE1FCisJICoKKwkgKiBJdCBzdXBwb3J0IDY0Yml0IGRhdGEgdHJhbnNtaXNzaW9uIG9ubHkgbm93CisJICovCisJZGFpX2NmZzEgfD0gREE3MjEwX0RBSV9GTEVOXzY0QklUOworCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFJX0NGRzEsIGRhaV9jZmcxKTsKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMywgZGFpX2NmZzMpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgREE3MjEwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCisKKy8qIERBSSBvcGVyYXRpb25zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBkYTcyMTBfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRhNzIxMF9zdGFydHVwLAorCS5od19wYXJhbXMJPSBkYTcyMTBfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gZGE3MjEwX3NldF9kYWlfZm10LAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGRhNzIxMF9kYWkgPSB7CisJLm5hbWUgPSAiREE3MjEwIElJUyIsCisJLmlkID0gMCwKKwkvKiBwbGF5YmFjayBjYXBhYmlsaXRpZXMgKi8KKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBEQTcyMTBfRk9STUFUUywKKwl9LAorCS8qIGNhcHR1cmUgY2FwYWJpbGl0aWVzICovCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IERBNzIxMF9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZkYTcyMTBfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChkYTcyMTBfZGFpKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIERBNzIxMCBkcml2ZXIKKyAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCisgKi8KK3N0YXRpYyBpbnQgZGE3MjEwX2luaXQoc3RydWN0IGRhNzIxMF9wcml2ICpkYTcyMTApCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJmRhNzIxMC0+Y29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGE3MjEwX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgZGE3MjEwIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YQk9IGRhNzIxMDsKKwljb2RlYy0+bmFtZQkJPSAiREE3MjEwIjsKKwljb2RlYy0+b3duZXIJCT0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQJCT0gZGE3MjEwX3JlYWQ7CisJY29kZWMtPndyaXRlCQk9IGRhNzIxMF93cml0ZTsKKwljb2RlYy0+ZGFpCQk9ICZkYTcyMTBfZGFpOworCWNvZGVjLT5udW1fZGFpCQk9IDE7CisJY29kZWMtPmh3X3dyaXRlCQk9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUJPSBBUlJBWV9TSVpFKGRhNzIxMF9yZWcpOworCWNvZGVjLT5yZWdfY2FjaGUJPSBrbWVtZHVwKGRhNzIxMF9yZWcsCisJCQkJCSAgc2l6ZW9mKGRhNzIxMF9yZWcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY29kZWMtPnJlZ19jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYTcyMTBfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisJZGE3MjEwX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBDT0RFQzogJWRcbiIsIHJldCk7CisJCWdvdG8gaW5pdF9lcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmRhNzIxMF9kYWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gaW5pdF9lcnI7CisJfQorCisJLyogRklYTUUKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHVzZSBmaXhlZCB2YWx1ZSBoZXJlCisJICovCisKKwkvKgorCSAqIEFEQyBzZXR0aW5ncworCSAqLworCisJLyogRW5hYmxlIExlZnQgJiBSaWdodCBNSUMgUEdBIGFuZCBNaWMgQmlhcyAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX01JQ19MLCBEQTcyMTBfTUlDX0xfRU4gfCBEQTcyMTBfTUlDQklBU19FTik7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfTUlDX1IsIERBNzIxMF9NSUNfUl9FTik7CisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgaW5wdXQgUEdBICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfSU5NSVhfTCwgREE3MjEwX0lOX0xfRU4pOworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0lOTUlYX1IsIERBNzIxMF9JTl9SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBBREMgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9BREMsIERBNzIxMF9BRENfTF9FTiB8IERBNzIxMF9BRENfUl9FTik7CisKKwkvKgorCSAqIERBQyBzZXR0aW5ncworCSAqLworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IERBQyAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBQ19TRUwsCisJCSAgICAgREE3MjEwX0RBQ19MX1NSQ19EQUlfTCB8IERBNzIxMF9EQUNfTF9FTiB8CisJCSAgICAgREE3MjEwX0RBQ19SX1NSQ19EQUlfUiB8IERBNzIxMF9EQUNfUl9FTik7CisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgb3V0IFBHQSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX09VVE1JWF9MLCBEQTcyMTBfT1VUX0xfRU4pOworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX09VVE1JWF9SLCBEQTcyMTBfT1VUX1JfRU4pOworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IEhlYWRQaG9uZSBQR0EgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9IUF9DRkcsCisJCSAgICAgREE3MjEwX0hQXzJDQVBfTU9ERSB8IERBNzIxMF9IUF9TRU5TRV9FTiB8CisJCSAgICAgREE3MjEwX0hQX0xfRU4gfCBEQTcyMTBfSFBfTU9ERSB8IERBNzIxMF9IUF9SX0VOKTsKKworCS8qIERpYWJsZSBQTEwgYW5kIGJ5cGFzcyBpdCAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX1BMTCwgREE3MjEwX1BMTF9GU180ODAwMCk7CisKKwkvKiBCeXBhc3MgUExMIGFuZCBzZXQgTUNMSyBmcmVxIHJhbmcgdG8gMTAtMjBNSHogKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9QTExfRElWMywKKwkJICAgICBEQTcyMTBfTUNMS19SQU5HRV8xMF8yMF9NSFogfCBEQTcyMTBfUExMX0JZUCk7CisKKwkvKiBBY3RpdmF0ZSBhbGwgZW5hYmxlZCBzdWJzeXN0ZW0gKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9TVEFSVFVQMSwgREE3MjEwX1NDX01TVF9FTik7CisKKwlyZXR1cm4gcmV0OworCitpbml0X2VycjoKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gTlVMTDsKKworCXJldHVybiByZXQ7CisKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhNzIxMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgIAkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRhNzIxMF9wcml2ICpkYTcyMTA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlkYTcyMTAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGE3MjEwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhNzIxMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZkYTcyMTAtPmNvZGVjOworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBkYTcyMTApOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisKKwlyZXQgPSBkYTcyMTBfaW5pdChkYTcyMTApOworCWlmIChyZXQgPCAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byBpbml0aWFsaXNlIGRhNzIxMCBhdWRpbyBjb2RlY1xuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYTcyMTBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkYTcyMTBfcHJpdiAqZGE3MjEwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZkYTcyMTBfZGFpKTsKKwlrZnJlZShkYTcyMTAtPmNvZGVjLnJlZ19jYWNoZSk7CisJa2ZyZWUoZGE3MjEwKTsKKwlkYTcyMTBfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkYTcyMTBfaTJjX2lkW10gPSB7CisJeyAiZGE3MjEwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkYTcyMTBfaTJjX2lkKTsKKworLyogSTJDIGNvZGVjIGNvbnRyb2wgbGF5ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkYTcyMTBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJEQTcyMTAgSTJDIENvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBkYTcyMTBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgX19kZXZleGl0X3AoZGE3MjEwX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IGRhNzIxMF9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgZGE3MjEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWlmICghZGE3MjEwX2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBkYTcyMTBfY29kZWM7CisJY29kZWMgPSBkYTcyMTBfY29kZWM7CisKKwkvKiBSZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwY21fZXJyOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRBNzIxMCBBdWRpbyBDb2RlYyAlc1xuIiwgREE3MjEwX1ZFUlNJT04pOworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjEwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfZGE3MjEwID0geworCS5wcm9iZSA9CWRhNzIxMF9wcm9iZSwKKwkucmVtb3ZlID0JZGE3MjEwX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X2RhNzIxMCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGRhNzIxMF9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZkYTcyMTBfaTJjX2RyaXZlcik7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoZGE3MjEwX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGE3MjEwX2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJmRhNzIxMF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQoZGE3MjEwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgREE3MjEwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQ2hlbiwgS3VuaW5vcmkgTW9yaW1vdG8iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmggYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGQ2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBkYTcyMTAuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgZGE3MjEwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBXcml0dGVuIGJ5IERhdmlkIENoZW4gPERhanVuLmNoZW5AZGlhc2VtaS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDbGVhbnVwcyBieSBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfREE3MjEwX0gKKyNkZWZpbmUgX0RBNzIxMF9ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgZGE3MjEwX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9kYTcyMTA7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKaW5kZXggMmI0ZGMyYi4uZTRiOTQ2YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwpAQCAtNzY1LDkgKzc2NSwxMCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzN4X3ByaXYgKmFpYzN4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgY29kZWNfY2xrID0gMCwgYnlwYXNzX3BsbCA9IDAsIGZzcmVmLCBsYXN0X2NsayA9IDA7Ci0JdTggZGF0YSwgciwgcCwgcGxsX3EsIHBsbF9wID0gMSwgcGxsX3IgPSAxLCBwbGxfaiA9IDE7Ci0JdTE2IHBsbF9kID0gMTsKKwl1OCBkYXRhLCBqLCByLCBwLCBwbGxfcSwgcGxsX3AgPSAxLCBwbGxfciA9IDEsIHBsbF9qID0gMTsKKwl1MTYgZCwgcGxsX2QgPSAxOwogCXU4IHJlZzsKKwlpbnQgY2xrOwogCiAJLyogc2VsZWN0IGRhdGEgd29yZCBsZW5ndGggKi8KIAlkYXRhID0KQEAgLTgzMyw0OCArODM0LDcwIEBACiAJaWYgKGJ5cGFzc19wbGwpCiAJCXJldHVybiAwOwogCi0JLyogVXNlIFBMTAotCSAqIGZpbmQgYW4gYXByb3ByaWF0ZSBzZXR1cCBmb3IgaiwgZCwgciBhbmQgcCBieSBpdGVyYXRpbmcgb3ZlcgotCSAqIHAgYW5kIHIgLSBqIGFuZCBkIGFyZSBjYWxjdWxhdGVkIGZvciBlYWNoIGZyYWN0aW9uLgotCSAqIFVwIHRvIDEyOCB2YWx1ZXMgYXJlIHByb2JlZCwgdGhlIGNsb3Nlc3Qgb25lIHdpbnMgdGhlIGdhbWUuCisJLyogVXNlIFBMTCwgY29tcHV0ZSBhcHJvcHJpYXRlIHNldHVwIGZvciBqLCBkLCByIGFuZCBwLCB0aGUgY2xvc2VzdAorCSAqIG9uZSB3aW5zIHRoZSBnYW1lLiBUcnkgd2l0aCBkPT0wIGZpcnN0LCBuZXh0IHdpdGggZCE9MC4KKwkgKiBDb25zdHJhaW50cyBmb3IgaiBhcmUgYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQuCiAJICogVGhlIHN5c2NsayBpcyBkaXZpZGVkIGJ5IDEwMDAgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4KIAkgKi8KKwogCWNvZGVjX2NsayA9ICgyMDQ4ICogZnNyZWYpIC8gKGFpYzN4LT5zeXNjbGsgLyAxMDAwKTsKIAogCWZvciAociA9IDE7IHIgPD0gMTY7IHIrKykKIAkJZm9yIChwID0gMTsgcCA8PSA4OyBwKyspIHsKLQkJCWludCBjbGssIHRtcCA9IChjb2RlY19jbGsgKiBwbGxfciAqIDEwKSAvIHBsbF9wOwotCQkJdTggaiA9IHRtcCAvIDEwMDAwOwotCQkJdTE2IGQgPSB0bXAgJSAxMDAwMDsKKwkJCWZvciAoaiA9IDQ7IGogPD0gNTU7IGorKykgeworCQkJCS8qIFRoaXMgaXMgYWN0dWFsbHkgMTAwMCooKGorKGQvMTAwMDApKSpyKS9wCisJCQkJICogVGhlIHRlcm0gaGFkIHRvIGJlIGNvbnZlcnRlZCB0byBnZXQKKwkJCQkgKiByaWQgb2YgdGhlIGRpdmlzaW9uIGJ5IDEwMDAwOyBkID0gMCBoZXJlCisJCQkJICovCisJCQkJaW50IHRtcF9jbGsgPSAoMTAwMCAqIGogKiByKSAvIHA7CiAKLQkJCWlmIChqID4gNjMpCi0JCQkJY29udGludWU7CisJCQkJLyogQ2hlY2sgd2hldGhlciB0aGlzIHZhbHVlcyBnZXQgY2xvc2VyIHRoYW4KKwkJCQkgKiB0aGUgYmVzdCBvbmVzIHdlIGhhZCBiZWZvcmUKKwkJCQkgKi8KKwkJCQlpZiAoYWJzKGNvZGVjX2NsayAtIHRtcF9jbGspIDwKKwkJCQkJYWJzKGNvZGVjX2NsayAtIGxhc3RfY2xrKSkgeworCQkJCQlwbGxfaiA9IGo7IHBsbF9kID0gMDsKKwkJCQkJcGxsX3IgPSByOyBwbGxfcCA9IHA7CisJCQkJCWxhc3RfY2xrID0gdG1wX2NsazsKKwkJCQl9CiAKLQkJCWlmIChkICE9IDAgJiYgYWljM3gtPnN5c2NsayA8IDEwMDAwMDAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBUaGlzIGlzIGFjdHVhbGx5IDEwMDAgKiAoKGogKyAoZC8xMDAwMCkpICogcikgLyBwCi0JCQkgKiBUaGUgdGVybSBoYWQgdG8gYmUgY29udmVydGVkIHRvIGdldCByaWQgb2YgdGhlCi0JCQkgKiBkaXZpc2lvbiBieSAxMDAwMCAqLwotCQkJY2xrID0gKCgxMDAwMCAqIGogKiByKSArIChkICogcikpIC8gKDEwICogcCk7Ci0KLQkJCS8qIGNoZWNrIHdoZXRoZXIgdGhpcyB2YWx1ZXMgZ2V0IGNsb3NlciB0aGFuIHRoZSBiZXN0Ci0JCQkgKiBvbmVzIHdlIGhhZCBiZWZvcmUgKi8KLQkJCWlmIChhYnMoY29kZWNfY2xrIC0gY2xrKSA8IGFicyhjb2RlY19jbGsgLSBsYXN0X2NsaykpIHsKLQkJCQlwbGxfaiA9IGo7IHBsbF9kID0gZDsgcGxsX3IgPSByOyBwbGxfcCA9IHA7Ci0JCQkJbGFzdF9jbGsgPSBjbGs7CisJCQkJLyogRWFybHkgZXhpdCBmb3IgZXhhY3QgbWF0Y2hlcyAqLworCQkJCWlmICh0bXBfY2xrID09IGNvZGVjX2NsaykKKwkJCQkJZ290byBmb3VuZDsKIAkJCX0KLQotCQkJLyogRWFybHkgZXhpdCBmb3IgZXhhY3QgbWF0Y2hlcyAqLwotCQkJaWYgKGNsayA9PSBjb2RlY19jbGspCi0JCQkJYnJlYWs7CiAJCX0KIAorCS8qIHRyeSB3aXRoIGQgIT0gMCAqLworCWZvciAocCA9IDE7IHAgPD0gODsgcCsrKSB7CisJCWogPSBjb2RlY19jbGsgKiBwIC8gMTAwMDsKKworCQlpZiAoaiA8IDQgfHwgaiA+IDExKQorCQkJY29udGludWU7CisKKwkJLyogZG8gbm90IHVzZSBjb2RlY19jbGsgaGVyZSBzaW5jZSB3ZSdkIGxvb3NlIHByZWNpc2lvbiAqLworCQlkID0gKCgyMDQ4ICogcCAqIGZzcmVmKSAtIGogKiBhaWMzeC0+c3lzY2xrKQorCQkJKiAxMDAgLyAoYWljM3gtPnN5c2Nsay8xMDApOworCisJCWNsayA9ICgxMDAwMCAqIGogKyBkKSAvICgxMCAqIHApOworCisJCS8qIGNoZWNrIHdoZXRoZXIgdGhpcyB2YWx1ZXMgZ2V0IGNsb3NlciB0aGFuIHRoZSBiZXN0CisJCSAqIG9uZXMgd2UgaGFkIGJlZm9yZSAqLworCQlpZiAoYWJzKGNvZGVjX2NsayAtIGNsaykgPCBhYnMoY29kZWNfY2xrIC0gbGFzdF9jbGspKSB7CisJCQlwbGxfaiA9IGo7IHBsbF9kID0gZDsgcGxsX3IgPSAxOyBwbGxfcCA9IHA7CisJCQlsYXN0X2NsayA9IGNsazsKKwkJfQorCisJCS8qIEVhcmx5IGV4aXQgZm9yIGV4YWN0IG1hdGNoZXMgKi8KKwkJaWYgKGNsayA9PSBjb2RlY19jbGspCisJCQlnb3RvIGZvdW5kOworCX0KKwogCWlmIChsYXN0X2NsayA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogdW5hYmxlIHRvIHNldHVwIFBMTFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKK2ZvdW5kOgogCWRhdGEgPSBhaWMzeF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUlDM1hfUExMX1BST0dBX1JFRyk7CiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX1BMTF9QUk9HQV9SRUcsIGRhdGEgfCAocGxsX3AgPDwgUExMUF9TSElGVCkpOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9PVlJGX1NUQVRVU19BTkRfUExMUl9SRUcsIHBsbF9yIDw8IFBMTFJfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCmluZGV4IDljODkwM2QuLmY5ZjM2N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTU4LDExICs1OSwyNiBAQAogCURBQzMzX0ZMVVNILAogfTsKIAorZW51bSBkYWMzM19maWZvX21vZGVzIHsKKwlEQUMzM19GSUZPX0JZUEFTUyA9IDAsCisJREFDMzNfRklGT19NT0RFMSwKKwlEQUMzM19GSUZPX01PREU3LAorCURBQzMzX0ZJRk9fTEFTVF9NT0RFLAorfTsKKworI2RlZmluZSBEQUMzM19OVU1fU1VQUExJRVMgMworc3RhdGljIGNvbnN0IGNoYXIgKmRhYzMzX3N1cHBseV9uYW1lc1tEQUMzM19OVU1fU1VQUExJRVNdID0geworCSJBVkREIiwKKwkiRFZERCIsCisJIklPVkREIiwKK307CisKIHN0cnVjdCB0bHYzMjBkYWMzM19wcml2IHsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRhYzMzX3dxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0RBQzMzX05VTV9TVVBQTElFU107CiAJaW50IHBvd2VyX2dwaW87CiAJaW50IGNoaXBfcG93ZXI7CiAJaW50IGlycTsKQEAgLTczLDggKzg5LDkgQEAKIAkJCQkJICogdGhpcyAqLwogCXVuc2lnbmVkIGludCBuc2FtcGxlX21heDsJLyogbnNhbXBsZSBzaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuCiAJCQkJCSAqIHRoaXMgKi8KLQl1bnNpZ25lZCBpbnQgbnNhbXBsZV9zd2l0Y2g7CS8qIFVzZSBGSUZPIG9yIGJ5cGFzcyBGSUZPIHN3aXRjaCAqLworCWVudW0gZGFjMzNfZmlmb19tb2RlcyBmaWZvX21vZGU7LyogRklGTyBtb2RlIHNlbGVjdGlvbiAqLwogCXVuc2lnbmVkIGludCBuc2FtcGxlOwkJLyogYnVyc3QgcmVhZCBhbW91bnQgZnJvbSBob3N0ICovCisJdTggYnVyc3RfYmNsa2RpdjsJCS8qIEJDTEsgZGl2aWRlciB2YWx1ZSBpbiBidXJzdCBtb2RlICovCiAKIAllbnVtIGRhYzMzX3N0YXRlIHN0YXRlOwogfTsKQEAgLTI5NywyOCArMzE0LDQ5IEBACiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1BXUl9DVFJMLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBkYWMzM19oYXJkX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQorc3RhdGljIGludCBkYWMzM19oYXJkX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQogewogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmRhYzMzLT5tdXRleCk7CiAJaWYgKHBvd2VyKSB7Ci0JCWlmIChkYWMzMy0+cG93ZXJfZ3BpbyA+PSAwKSB7Ci0JCQlncGlvX3NldF92YWx1ZShkYWMzMy0+cG93ZXJfZ3BpbywgMSk7Ci0JCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDE7Ci0JCQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotCQkJZGFjMzNfcmVzdG9yZV9yZWdzKGNvZGVjKTsKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwKKwkJCQkJICBkYWMzMy0+c3VwcGxpZXMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCQkJZ290byBleGl0OwogCQl9CisKKwkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApCisJCQlncGlvX3NldF92YWx1ZShkYWMzMy0+cG93ZXJfZ3BpbywgMSk7CisKKwkJZGFjMzMtPmNoaXBfcG93ZXIgPSAxOworCisJCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCisJCWRhYzMzX3Jlc3RvcmVfcmVncyhjb2RlYyk7CisKIAkJZGFjMzNfc29mdF9wb3dlcihjb2RlYywgMSk7CiAJfSBlbHNlIHsKIAkJZGFjMzNfc29mdF9wb3dlcihjb2RlYywgMCk7Ci0JCWlmIChkYWMzMy0+cG93ZXJfZ3BpbyA+PSAwKSB7CisJCWlmIChkYWMzMy0+cG93ZXJfZ3BpbyA+PSAwKQogCQkJZ3Bpb19zZXRfdmFsdWUoZGFjMzMtPnBvd2VyX2dwaW8sIDApOwotCQkJZGFjMzMtPmNoaXBfcG93ZXIgPSAwOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKIAorCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwKKwkJCQkJICAgICBkYWMzMy0+c3VwcGxpZXMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQkJZ290byBleGl0OworCQl9CisKKwkJZGFjMzMtPmNoaXBfcG93ZXIgPSAwOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhYzMzLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkYWMzM19nZXRfbnNhbXBsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTM1MSwzOSArMzg5LDQ4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkYWMzM19nZXRfbnNhbXBsZV9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IGRhYzMzX2dldF9maWZvX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRhYzMzLT5uc2FtcGxlX3N3aXRjaDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRhYzMzLT5maWZvX21vZGU7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkYWMzM19zZXRfbnNhbXBsZV9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IGRhYzMzX3NldF9maWZvX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCWlmIChkYWMzMy0+Zmlmb19tb2RlID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQogCQlyZXR1cm4gMDsKIAkvKiBEbyBub3QgYWxsb3cgY2hhbmdlcyB3aGlsZSBzdHJlYW0gaXMgcnVubmluZyovCiAJaWYgKGNvZGVjLT5hY3RpdmUpCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPCAwIHx8Ci0JICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID4gMSkKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPj0gREFDMzNfRklGT19MQVNUX01PREUpCiAJCXJldCA9IC1FSU5WQUw7CiAJZWxzZQotCQlkYWMzMy0+bnNhbXBsZV9zd2l0Y2ggPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwkJZGFjMzMtPmZpZm9fbW9kZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCiAJcmV0dXJuIHJldDsKIH0KIAorLyogQ29kZWMgb3BlcmF0aW9uIG1vZGVzICovCitzdGF0aWMgY29uc3QgY2hhciAqZGFjMzNfZmlmb19tb2RlX3RleHRzW10gPSB7CisJIkJ5cGFzcyIsICJNb2RlIDEiLCAiTW9kZSA3IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWMzM19maWZvX21vZGVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKGRhYzMzX2ZpZm9fbW9kZV90ZXh0cyksCisJCQkgICAgZGFjMzNfZmlmb19tb2RlX3RleHRzKTsKKwogLyoKICAqIERBQ0wvUiBkaWdpdGFsIHZvbHVtZSBjb250cm9sOgogICogZnJvbSAwIGRCIHRvIC02My41IGluIDAuNSBkQiBzdGVwcwpAQCAtNDA2LDggKzQ1Myw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMzNfbnNhbXBsZV9zbmRfY29udHJvbHNbXSA9IHsKIAlTT0NfU0lOR0xFX0VYVCgiblNhbXBsZSIsIDAsIDAsIDU5MDAsIDAsCiAJCSBkYWMzM19nZXRfbnNhbXBsZSwgZGFjMzNfc2V0X25zYW1wbGUpLAotCVNPQ19TSU5HTEVfRVhUKCJuU2FtcGxlIFN3aXRjaCIsIDAsIDAsIDEsIDAsCi0JCSBkYWMzM19nZXRfbnNhbXBsZV9zd2l0Y2gsIGRhYzMzX3NldF9uc2FtcGxlX3N3aXRjaCksCisJU09DX0VOVU1fRVhUKCJGSUZPIE1vZGUiLCBkYWMzM19maWZvX21vZGVfZW51bSwKKwkJIGRhYzMzX2dldF9maWZvX21vZGUsIGRhYzMzX3NldF9maWZvX21vZGUpLAogfTsKIAogLyogQW5hbG9nIGJ5cGFzcyAqLwpAQCAtNDY5LDYgKzUxNiw4IEBACiBzdGF0aWMgaW50IGRhYzMzX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKKwlpbnQgcmV0OworCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAxKTsKQEAgLTQ3NiwxMiArNTI1LDE5IEBACiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCi0JCQlkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAxKTsKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IGRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDEpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQlkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAwKTsKKwkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKIAkJYnJlYWs7CiAJfQogCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CkBAIC00ODksNiArNTQ1LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYWMzM19wcmVmaWxsX2hhbmRsZXIoc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCWNvZGVjID0gJmRhYzMzLT5jb2RlYzsKKworCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCisJCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5uc2FtcGxlKSk7CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1BSRUZJTExfTVNCLAorCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7CisJCWJyZWFrOworCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfUFJFRklMTF9NU0IsCisJCQkJREFDMzNfVEhSUkVHKDEwKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJVbmhhbmRsZWQgRklGTyBtb2RlOiAlZFxuIiwKKwkJCQkJCQlkYWMzMy0+Zmlmb19tb2RlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfcGxheWJhY2tfaGFuZGxlcihzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSAmZGFjMzMtPmNvZGVjOworCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKKwkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQkvKiBBdCB0aGUgbW9tZW50IHdlIGFyZSBub3QgdXNpbmcgaW50ZXJydXB0cyBpbiBtb2RlNyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiVW5oYW5kbGVkIEZJRk8gbW9kZTogJWRcbiIsCisJCQkJCQkJZGFjMzMtPmZpZm9fbW9kZSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQgZGFjMzNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwpAQCAtNTAyLDE0ICs2MDMsMTAgQEAKIAlzd2l0Y2ggKGRhYzMzLT5zdGF0ZSkgewogCWNhc2UgREFDMzNfUFJFRklMTDoKIAkJZGFjMzMtPnN0YXRlID0gREFDMzNfUExBWUJBQ0s7Ci0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOwotCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19QUkVGSUxMX01TQiwKLQkJCQlEQUMzM19USFJSRUcoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkpOworCQlkYWMzM19wcmVmaWxsX2hhbmRsZXIoZGFjMzMpOwogCQlicmVhazsKIAljYXNlIERBQzMzX1BMQVlCQUNLOgotCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKLQkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKKwkJZGFjMzNfcGxheWJhY2tfaGFuZGxlcihkYWMzMyk7CiAJCWJyZWFrOwogCWNhc2UgREFDMzNfSURMRToKIAkJYnJlYWs7CkBAIC01NDcsNyArNjQ0LDcgQEAKIAl1bnNpZ25lZCBpbnQgcHdyX2N0cmw7CiAKIAkvKiBTdG9wIHBlbmRpbmcgd29ya3F1ZXVlICovCi0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkKKwlpZiAoZGFjMzMtPmZpZm9fbW9kZSkKIAkJY2FuY2VsX3dvcmtfc3luYygmZGFjMzMtPndvcmspOwogCiAJbXV0ZXhfbG9jaygmZGFjMzMtPm11dGV4KTsKQEAgLTYwMyw3ICs3MDAsNyBAQAogfQogCiAjZGVmaW5lIENBTENfT1NDU0VUKHJhdGUsIHJlZmNsaykgKCBcCi0JKCgoKHJhdGUgKiAxMDAwMCkgLyByZWZjbGspICogNDA5NikgKyA1MDAwKSAvIDEwMDAwKQorCSgoKChyYXRlICogMTAwMDApIC8gcmVmY2xrKSAqIDQwOTYpICsgNzAwMCkgLyAxMDAwMCkKICNkZWZpbmUgQ0FMQ19SQVRJT1NFVChyYXRlLCByZWZjbGspICggXAogCSgoKChyZWZjbGsgICogMTAwMDAwKSAvIHJhdGUpICogMTYzODQpICsgNTAwMDApIC8gMTAwMDAwKQogCkBAIC02MTksNyArNzE2LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IG9zY3NldCwgcmF0aW9zZXQsIHB3cl9jdHJsLCByZWdfdG1wOwotCXU4IGFpY3RybF9hLCBmaWZvY3RybF9hOworCXU4IGFpY3RybF9hLCBhaWN0cmxfYiwgZmlmb2N0cmxfYTsKIAogCXN3aXRjaCAoc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTYzNyw3ICs3MzQsMTAgQEAKIAogCWFpY3RybF9hID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSk7CiAJYWljdHJsX2EgJj0gfihEQUMzM19OQ1lDTF9NQVNLIHwgREFDMzNfV0xFTl9NQVNLKTsKKwkvKiBSZWFkIEZJRk8gY29udHJvbCBBLCBhbmQgY2xlYXIgRklGTyBmbHVzaCBiaXQgKi8KIAlmaWZvY3RybF9hID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX0ZJRk9fQ1RSTF9BKTsKKwlmaWZvY3RybF9hICY9IH5EQUMzM19GSUZPRkxVU0g7CisKIAlmaWZvY3RybF9hICY9IH5EQUMzM19XSURUSDsKIAlzd2l0Y2ggKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKQEAgLTY3NSw3ICs3NzUsOCBAQAogCiAJZGFjMzNfb3Njd2FpdChjb2RlYyk7CiAKLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKSB7CisJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKKwkJLyogR2VuZXJpYyBmb3IgYWxsIEZJRk8gbW9kZXMgKi8KIAkJLyogNTAtNTEgOiBBU1JDIENvbnRyb2wgcmVnaXN0ZXJzICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQSwgKDEgPDwgNCkpOyAvKiBkaXY9MiAqLwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0IsIDEpOyAvKiA/Pz8gKi8KQEAgLTY4NSwzOCArNzg2LDEwMSBAQAogCiAJCS8qIFNldCBpbnRlcnJ1cHRzIHRvIGhpZ2ggYWN0aXZlICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19JTlRQX0NUUkxfQSwgREFDMzNfSU5UUE1fQUhJR0gpOwotCi0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NT0RFX0IsCi0JCQkgICAgREFDMzNfQVRNKERBQzMzX0ZJRk9fSVJRX01PREVfTEVWRUwpKTsKLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01BU0ssIERBQzMzX01BVCk7CiAJfSBlbHNlIHsKKwkJLyogRklGTyBieXBhc3MgbW9kZSAqLwogCQkvKiA1MC01MSA6IEFTUkMgQ29udHJvbCByZWdpc3RlcnMgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNfQ1RSTF9BLCBEQUMzM19TUkNCWVApOwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0IsIDApOyAvKiA/Pz8gKi8KIAl9CiAKLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKQorCS8qIEludGVycnVwdCBiZWhhdmlvdXIgY29uZmlndXJhdGlvbiAqLworCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01PREVfQiwKKwkJCSAgICBEQUMzM19BVE0oREFDMzNfRklGT19JUlFfTU9ERV9MRVZFTCkpOworCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTUFTSywgREFDMzNfTUFUKTsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaW4gRklGTyBieXBhc3MgbW9kZSwgdGhlIGludGVycnVwdHMgYXJlIG5vdCB1c2VkICovCisJCWJyZWFrOworCX0KKworCWFpY3RybF9iID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQik7CisKKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CisJCS8qCisJCSAqIEZvciBtb2RlMToKKwkJICogRGlzYWJsZSB0aGUgRklGTyBieXBhc3MgKEVuYWJsZSB0aGUgdXNlIG9mIEZJRk8pCisJCSAqIFNlbGVjdCBuU2FtcGxlIG1vZGUKKwkJICogQkNMSyBpcyBvbmx5IHJ1bm5pbmcgd2hlbiBkYXRhIGlzIG5lZWRlZCBieSBEQUMzMworCQkgKi8KIAkJZmlmb2N0cmxfYSAmPSB+REFDMzNfRkJZUEFTOwotCWVsc2UKKwkJZmlmb2N0cmxfYSAmPSB+REFDMzNfRkFVVE87CisJCWFpY3RybF9iICY9IH5EQUMzM19CQ0xLT047CisJCWJyZWFrOworCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJLyoKKwkJICogRm9yIG1vZGUxOgorCQkgKiBEaXNhYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRW5hYmxlIHRoZSB1c2Ugb2YgRklGTykKKwkJICogU2VsZWN0IFRocmVzaG9sZCBtb2RlCisJCSAqIEJDTEsgaXMgb25seSBydW5uaW5nIHdoZW4gZGF0YSBpcyBuZWVkZWQgYnkgREFDMzMKKwkJICovCisJCWZpZm9jdHJsX2EgJj0gfkRBQzMzX0ZCWVBBUzsKKwkJZmlmb2N0cmxfYSB8PSBEQUMzM19GQVVUTzsKKwkJYWljdHJsX2IgJj0gfkRBQzMzX0JDTEtPTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRm9yIEZJRk8gYnlwYXNzIG1vZGU6CisJCSAqIEVuYWJsZSB0aGUgRklGTyBieXBhc3MgKERpc2FibGUgdGhlIEZJRk8gdXNlKQorCQkgKiBTZXQgdGhlIEJDTEsgYXMgY29udGlub3VzCisJCSAqLwogCQlmaWZvY3RybF9hIHw9IERBQzMzX0ZCWVBBUzsKKwkJYWljdHJsX2IgfD0gREFDMzNfQkNMS09OOworCQlicmVhazsKKwl9CisKIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19DVFJMX0EsIGZpZm9jdHJsX2EpOwotCiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSwgYWljdHJsX2EpOwotCXJlZ190bXAgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CKTsKLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKQotCQlyZWdfdG1wICY9IH5EQUMzM19CQ0xLT047CisJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQiwgYWljdHJsX2IpOworCisJLyoKKwkgKiBCQ0xLIGRpdmlkZSByYXRpbworCSAqIDA6IDEuNQorCSAqIDE6IDEKKwkgKiAyOiAyCisJICogLi4uCisJICogMjU0OiAyNTQKKwkgKiAyNTU6IDI1NQorCSAqLworCWlmIChkYWMzMy0+Zmlmb19tb2RlKQorCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLAorCQkJCQkJCWRhYzMzLT5idXJzdF9iY2xrZGl2KTsKIAllbHNlCi0JCXJlZ190bXAgfD0gREFDMzNfQkNMS09OOwotCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IsIHJlZ190bXApOworCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzMik7CiAKLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKSB7Ci0JCS8qIDIwOiBCQ0xLIGRpdmlkZSByYXRpbyAqLwotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzKTsKLQorCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKIAkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfQVRIUl9NU0IsCiAJCQkgICAgICBEQUMzM19USFJSRUcoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkpOwotCX0gZWxzZSB7Ci0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMyKTsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQkvKgorCQkgKiBDb25maWd1cmUgdGhlIHRocmVzaG9sZCBsZXZlbHMsIGFuZCBsZWF2ZSAxMCBzYW1wbGUgc3BhY2UKKwkJICogYXQgdGhlIGJvdHRvbSwgYW5kIGFsc28gYXQgdGhlIHRvcCBvZiB0aGUgRklGTworCQkgKi8KKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfVVRIUl9NU0IsCisJCQlEQUMzM19USFJSRUcoREFDMzNfQlVGRkVSX1NJWkVfU0FNUExFUyAtIDEwKSk7CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX0xUSFJfTVNCLAorCQkJREFDMzNfVEhSUkVHKDEwKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKQEAgLTc4OSw3ICs5NTMsNyBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKSB7CisJCWlmIChkYWMzMy0+Zmlmb19tb2RlKSB7CiAJCQlkYWMzMy0+c3RhdGUgPSBEQUMzM19QUkVGSUxMOwogCQkJcXVldWVfd29yayhkYWMzMy0+ZGFjMzNfd3EsICZkYWMzMy0+d29yayk7CiAJCX0KQEAgLTc5Nyw3ICs5NjEsNyBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKSB7CisJCWlmIChkYWMzMy0+Zmlmb19tb2RlKSB7CiAJCQlkYWMzMy0+c3RhdGUgPSBEQUMzM19GTFVTSDsKIAkJCXF1ZXVlX3dvcmsoZGFjMzMtPmRhYzMzX3dxLCAmZGFjMzMtPndvcmspOwogCQl9CkBAIC04NDMsNiArMTAwNyw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBmbXQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IGFpY3RybF9hLCBhaWN0cmxfYjsKIAogCWFpY3RybF9hID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSk7CkBAIC04NTUsNyArMTAyMCwxMSBAQAogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CiAJCS8qIENvZGVjIFNsYXZlICovCi0JCWFpY3RybF9hICY9IH4oREFDMzNfTVNCQ0xLIHwgREFDMzNfTVNXQ0xLKTsKKwkJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZJRk8gbW9kZSByZXF1aXJlcyBtYXN0ZXIgbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlhaWN0cmxfYSAmPSB+KERBQzMzX01TQkNMSyB8IERBQzMzX01TV0NMSyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTU5LDYgKzExMjgsOSBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCWRhYzMzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKKwkvKiBCaWFzIGxldmVsIGNvbmZpZ3VyYXRpb24gaGFzIGVuYWJsZWQgcmVndWxhdG9yIGFuIGV4dHJhIHRpbWUgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwgZGFjMzMtPnN1cHBsaWVzKTsKKwogCXJldHVybiAwOwogCiBwY21fZXJyOgpAQCAtMTAzMywxMyArMTIwNSwxMyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGRhYzMzX2RhaSk7CiAKLXN0YXRpYyBpbnQgZGFjMzNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYWMzM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlBsYXRmb3JtIGRhdGEgbm90IHNldFxuIik7CkBAIC0xMDgwLDEwICsxMjUyLDExIEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGFjMzMpOwogCiAJZGFjMzMtPnBvd2VyX2dwaW8gPSBwZGF0YS0+cG93ZXJfZ3BpbzsKKwlkYWMzMy0+YnVyc3RfYmNsa2RpdiA9IHBkYXRhLT5idXJzdF9iY2xrZGl2OwogCWRhYzMzLT5pcnEgPSBjbGllbnQtPmlycTsKIAlkYWMzMy0+bnNhbXBsZSA9IE5TQU1QTEVfTUFYOwogCS8qIERpc2FibGUgRklGTyB1c2UgYnkgZGVmYXVsdCAqLwotCWRhYzMzLT5uc2FtcGxlX3N3aXRjaCA9IDA7CisJZGFjMzMtPmZpZm9fbW9kZSA9IERBQzMzX0ZJRk9fQllQQVNTOwogCiAJdGx2MzIwZGFjMzNfY29kZWMgPSBjb2RlYzsKIApAQCAtMTEzMCw2ICsxMzAzLDI0IEBACiAJCX0KIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpOyBpKyspCisJCWRhYzMzLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBkYWMzM19zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCSBkYWMzMy0+c3VwcGxpZXMpOworCisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksCisJCQkJICAgIGRhYzMzLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CkBAIC0xMTQ5LDYgKzEzNDAsMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBlcnJvcl9jb2RlYzoKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwgZGFjMzMtPnN1cHBsaWVzKTsKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksIGRhYzMzLT5zdXBwbGllcyk7CitlcnJfZ2V0OgogCWlmIChkYWMzMy0+aXJxID49IDApIHsKIAkJZnJlZV9pcnEoZGFjMzMtPmlycSwgJmRhYzMzLT5jb2RlYyk7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGRhYzMzLT5kYWMzM193cSk7CkBAIC0xMTY1LDcgKzEzNjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGFjMzNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgZGFjMzNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMzsKIApAQCAtMTE3Nyw2ICsxMzcyLDggQEAKIAlpZiAoZGFjMzMtPmlycSA+PSAwKQogCQlmcmVlX2lycShkYWMzMy0+aXJxLCAmZGFjMzMtPmNvZGVjKTsKIAorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworCiAJZGVzdHJveV93b3JrcXVldWUoZGFjMzMtPmRhYzMzX3dxKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZkYWMzM19kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmZGFjMzMtPmNvZGVjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCmluZGV4IDZiNjUwYzEuLjk1OGQ0OWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxzb3VuZC90cGE2MTMwYTItcGxhdC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CkBAIC0zNCwxMCArMzUsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp0cGE2MTMwYTJfY2xpZW50OwogCisjZGVmaW5lIFRQQTYxMzBBMl9OVU1fU1VQUExJRVMgMgorc3RhdGljIGNvbnN0IGNoYXIgKnRwYTYxMzBhMl9zdXBwbHlfbmFtZXNbVFBBNjEzMEEyX05VTV9TVVBQTElFU10gPSB7CisJIkNQVlNTIiwKKwkiVmRkIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp0cGE2MTQwYTJfc3VwcGx5X25hbWVzW1RQQTYxMzBBMl9OVU1fU1VQUExJRVNdID0geworCSJIUFZkZCIsCisJIkFWZGQiLAorfTsKKwogLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzYXZlIHRoZSBjb250ZXh0ICovCiBzdHJ1Y3QgdHBhNjEzMGEyX2RhdGEgewogCXN0cnVjdCBtdXRleCBtdXRleDsKIAl1bnNpZ25lZCBjaGFyIHJlZ3NbVFBBNjEzMEEyX0NBQ0hFUkVHTlVNXTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tUUEE2MTMwQTJfTlVNX1NVUFBMSUVTXTsKIAlpbnQgcG93ZXJfZ3BpbzsKIAl1bnNpZ25lZCBjaGFyIHBvd2VyX3N0YXRlOwogfTsKQEAgLTEwNiwxMCArMTE5LDExIEBACiAJCXRwYTYxMzBhMl9pMmNfd3JpdGUoaSwgZGF0YS0+cmVnc1tpXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRwYTYxMzBhMl9wb3dlcihpbnQgcG93ZXIpCitzdGF0aWMgaW50IHRwYTYxMzBhMl9wb3dlcihpbnQgcG93ZXIpCiB7CiAJc3RydWN0CXRwYTYxMzBhMl9kYXRhICpkYXRhOwogCXU4CXZhbDsKKwlpbnQJcmV0OwogCiAJQlVHX09OKHRwYTYxMzBhMl9jbGllbnQgPT0gTlVMTCk7CiAJZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YSh0cGE2MTMwYTJfY2xpZW50KTsKQEAgLTExNywxMSArMTMxLDIwIEBACiAJbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOwogCWlmIChwb3dlcikgewogCQkvKiBQb3dlciBvbiAqLwotCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKSB7CisJCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCiAJCQlncGlvX3NldF92YWx1ZShkYXRhLT5wb3dlcl9ncGlvLCAxKTsKLQkJCWRhdGEtPnBvd2VyX3N0YXRlID0gMTsKLQkJCXRwYTYxMzBhMl9pbml0aWFsaXplKCk7CisKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLAorCQkJCQkgICAgZGF0YS0+c3VwcGxpZXMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJnRwYTYxMzBhMl9jbGllbnQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CiAJCX0KKworCQlkYXRhLT5wb3dlcl9zdGF0ZSA9IDE7CisJCXRwYTYxMzBhMl9pbml0aWFsaXplKCk7CisKIAkJLyogQ2xlYXIgU1dTICovCiAJCXZhbCA9IHRwYTYxMzBhMl9yZWFkKFRQQTYxMzBBMl9SRUdfQ09OVFJPTCk7CiAJCXZhbCAmPSB+VFBBNjEzMEEyX1NXUzsKQEAgLTEzMSwxMyArMTU0LDI1IEBACiAJCXZhbCA9IHRwYTYxMzBhMl9yZWFkKFRQQTYxMzBBMl9SRUdfQ09OVFJPTCk7CiAJCXZhbCB8PSBUUEE2MTMwQTJfU1dTOwogCQl0cGE2MTMwYTJfaTJjX3dyaXRlKFRQQTYxMzBBMl9SRUdfQ09OVFJPTCwgdmFsKTsKKwogCQkvKiBQb3dlciBvZmYgKi8KLQkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkgeworCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKQogCQkJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cG93ZXJfZ3BpbywgMCk7Ci0JCQlkYXRhLT5wb3dlcl9zdGF0ZSA9IDA7CisKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKSwKKwkJCQkJICAgICBkYXRhLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmdHBhNjEzMGEyX2NsaWVudC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CiAJCX0KKworCQlkYXRhLT5wb3dlcl9zdGF0ZSA9IDA7CiAJfQorCitleGl0OgogCW11dGV4X3VubG9jaygmZGF0YS0+bXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdHBhNjEzMGEyX2dldF9yZWcoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yMzcsMTIgKzI3Miw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHRwYTYxMzBhMl9jaGFubmVsX2VuYWJsZSh1OCBjaGFubmVsLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdAl0cGE2MTMwYTJfZGF0YSAqZGF0YTsKIAl1OAl2YWw7CiAKLQlCVUdfT04odHBhNjEzMGEyX2NsaWVudCA9PSBOVUxMKTsKLQlkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHRwYTYxMzBhMl9jbGllbnQpOwotCiAJaWYgKGVuYWJsZSkgewogCQkvKiBFbmFibGUgY2hhbm5lbCAqLwogCQkvKiBFbmFibGUgYW1wbGlmaWVyICovCkBAIC0yOTksMTUgKzMzMCwxNyBAQAogc3RhdGljIGludCB0cGE2MTMwYTJfc3VwcGx5X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCWludCByZXQgPSAwOworCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgotCQl0cGE2MTMwYTJfcG93ZXIoMSk7CisJCXJldCA9IHRwYTYxMzBhMl9wb3dlcigxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6Ci0JCXRwYTYxMzBhMl9wb3dlcigwKTsKKwkJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDApOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHRwYTYxMzBhMl9kYXBtX3dpZGdldHNbXSA9IHsKQEAgLTM0NiwxMyArMzc5LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cGE2MTMwYTJfYWRkX2NvbnRyb2xzKTsKIAotc3RhdGljIGludCB0cGE2MTMwYTJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRwYTYxMzBhMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdHBhNjEzMGEyX2RhdGEgKmRhdGE7CiAJc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAKIAlkZXYgPSAmY2xpZW50LT5kZXY7CiAKQEAgLTM4NywxNSArNDIwLDM4IEBACiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHBvd2VyIEdQSU8gKCVkKVxuIiwKIAkJCQlkYXRhLT5wb3dlcl9ncGlvKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZXJyX2dwaW87CiAJCX0KIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRhdGEtPnBvd2VyX2dwaW8sIDApOwotCX0gZWxzZSB7Ci0JCWRhdGEtPnBvd2VyX3N0YXRlID0gMTsKLQkJdHBhNjEzMGEyX2luaXRpYWxpemUoKTsKIAl9CiAKLQl0cGE2MTMwYTJfcG93ZXIoMSk7CisJc3dpdGNoIChwZGF0YS0+aWQpIHsKKwljYXNlIFRQQTYxMzBBMjoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpOyBpKyspCisJCQlkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0cGE2MTMwYTJfc3VwcGx5X25hbWVzW2ldOworCQlicmVhazsKKwljYXNlIFRQQTYxNDBBMjoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpOyBpKyspCisJCQlkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0cGE2MTQwYTJfc3VwcGx5X25hbWVzW2ldOzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oZGV2LCAiVW5rbm93biBUUEEgbW9kZWwgKCVkKS4gQXNzdW1pbmcgNjEzMEEyXG4iLAorCQkJIHBkYXRhLT5pZCk7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKTsgaSsrKQorCQkJZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdHBhNjEzMGEyX3N1cHBseV9uYW1lc1tpXTsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKSwKKwkJCQkgZGF0YS0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVndWxhdG9yOworCX0KKworCXJldCA9IHRwYTYxMzBhMl9wb3dlcigxKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX3Bvd2VyOworCiAKIAkvKiBSZWFkIHZlcnNpb24gKi8KIAlyZXQgPSB0cGE2MTMwYTJfaTJjX3JlYWQoVFBBNjEzMEEyX1JFR19WRVJTSU9OKSAmCkBAIC00MDQsMTAgKzQ2MCwxOCBAQAogCQlkZXZfd2FybihkZXYsICJVTlRFU1RFRCB2ZXJzaW9uIGRldGVjdGVkICglZClcbiIsIHJldCk7CiAKIAkvKiBEaXNhYmxlIHRoZSBjaGlwICovCi0JdHBhNjEzMGEyX3Bvd2VyKDApOworCXJldCA9IHRwYTYxMzBhMl9wb3dlcigwKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX3Bvd2VyOwogCiAJcmV0dXJuIDA7Ci1mYWlsOgorCitlcnJfcG93ZXI6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKSwgZGF0YS0+c3VwcGxpZXMpOworZXJyX3JlZ3VsYXRvcjoKKwlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKQorCQlncGlvX2ZyZWUoZGF0YS0+cG93ZXJfZ3Bpbyk7CitlcnJfZ3BpbzoKIAlrZnJlZShkYXRhKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEodHBhNjEzMGEyX2NsaWVudCwgTlVMTCk7CiAJdHBhNjEzMGEyX2NsaWVudCA9IE5VTEw7CkBAIC00MTUsNyArNDc5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRwYTYxMzBhMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdHBhNjEzMGEyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtNDIzLDYgKzQ4Nyw5IEBACiAKIAlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKQogCQlncGlvX2ZyZWUoZGF0YS0+cG93ZXJfZ3Bpbyk7CisKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLCBkYXRhLT5zdXBwbGllcyk7CisKIAlrZnJlZShkYXRhKTsKIAl0cGE2MTMwYTJfY2xpZW50ID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwppbmRleCAyYTI3ZjdiLi42ZjVkNGFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwpAQCAtNTUsNyArNTUsNyBAQAogCTB4MGMsIC8qIFJFR19BVFhSMVBHQQkJKDB4QikJKi8KIAkweDAwLCAvKiBSRUdfQVZUWEwyUEdBCQkoMHhDKQkqLwogCTB4MDAsIC8qIFJFR19BVlRYUjJQR0EJCSgweEQpCSovCi0JMHgwMSwgLyogUkVHX0FVRElPX0lGCQkoMHhFKQkqLworCTB4MDAsIC8qIFJFR19BVURJT19JRgkJKDB4RSkJKi8KIAkweDAwLCAvKiBSRUdfVk9JQ0VfSUYJCSgweEYpCSovCiAJMHgwMCwgLyogUkVHX0FSWFIxUEdBCQkoMHgxMCkJKi8KIAkweDAwLCAvKiBSRUdfQVJYTDFQR0EJCSgweDExKQkqLwpAQCAtNjQsMTkgKzY0LDE5IEBACiAJMHgwMCwgLyogUkVHX1ZSWFBHQQkJKDB4MTQpCSovCiAJMHgwMCwgLyogUkVHX1ZTVFBHQQkJKDB4MTUpCSovCiAJMHgwMCwgLyogUkVHX1ZSWDJBUlhQR0EJCSgweDE2KQkqLwotCTB4MGMsIC8qIFJFR19BVkRBQ19DVEwJCSgweDE3KQkqLworCTB4MDAsIC8qIFJFR19BVkRBQ19DVEwJCSgweDE3KQkqLwogCTB4MDAsIC8qIFJFR19BUlgyVlRYUEdBCQkoMHgxOCkJKi8KIAkweDAwLCAvKiBSRUdfQVJYTDFfQVBHQV9DVEwJKDB4MTkpCSovCiAJMHgwMCwgLyogUkVHX0FSWFIxX0FQR0FfQ1RMCSgweDFBKQkqLwotCTB4NGIsIC8qIFJFR19BUlhMMl9BUEdBX0NUTAkoMHgxQikJKi8KLQkweDRiLCAvKiBSRUdfQVJYUjJfQVBHQV9DVEwJKDB4MUMpCSovCisJMHg0YSwgLyogUkVHX0FSWEwyX0FQR0FfQ1RMCSgweDFCKQkqLworCTB4NGEsIC8qIFJFR19BUlhSMl9BUEdBX0NUTAkoMHgxQykJKi8KIAkweDAwLCAvKiBSRUdfQVRYMkFSWFBHQQkJKDB4MUQpCSovCiAJMHgwMCwgLyogUkVHX0JUX0lGCQkoMHgxRSkJKi8KIAkweDAwLCAvKiBSRUdfQlRQR0EJCSgweDFGKQkqLwogCTB4MDAsIC8qIFJFR19CVFNUUEdBCQkoMHgyMCkJKi8KIAkweDAwLCAvKiBSRUdfRUFSX0NUTAkJKDB4MjEpCSovCi0JMHgyNCwgLyogUkVHX0hTX1NFTAkJKDB4MjIpCSovCi0JMHgwYSwgLyogUkVHX0hTX0dBSU5fU0VUCSgweDIzKQkqLworCTB4MDAsIC8qIFJFR19IU19TRUwJCSgweDIyKQkqLworCTB4MDAsIC8qIFJFR19IU19HQUlOX1NFVAkoMHgyMykJKi8KIAkweDAwLCAvKiBSRUdfSFNfUE9QTl9TRVQJKDB4MjQpCSovCiAJMHgwMCwgLyogUkVHX1BSRURMX0NUTAkJKDB4MjUpCSovCiAJMHgwMCwgLyogUkVHX1BSRURSX0NUTAkJKDB4MjYpCSovCkBAIC05OSw3ICs5OSw3IEBACiAJMHgwMCwgLyogUkVHX0kyU19SWF9TQ1JBTUJMRV9ICSgweDM3KQkqLwogCTB4MDAsIC8qIFJFR19JMlNfUlhfU0NSQU1CTEVfTQkoMHgzOCkJKi8KIAkweDAwLCAvKiBSRUdfSTJTX1JYX1NDUkFNQkxFX0wJKDB4MzkpCSovCi0JMHgxNiwgLyogUkVHX0FQTExfQ1RMCQkoMHgzQSkJKi8KKwkweDA2LCAvKiBSRUdfQVBMTF9DVEwJCSgweDNBKQkqLwogCTB4MDAsIC8qIFJFR19EVE1GX0NUTAkJKDB4M0IpCSovCiAJMHgwMCwgLyogUkVHX0RUTUZfUEdBX0NUTDIJKDB4M0MpCSovCiAJMHgwMCwgLyogUkVHX0RUTUZfUEdBX0NUTDEJKDB4M0QpCSovCkBAIC0xMjAzLDYgKzEyMDMsOCBAQAogCVNORF9TT0NfREFQTV9TVVBQTFkoIkFQTEwgRW5hYmxlIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBhcGxsX2V2ZW50LAogCQkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBSUYgRW5hYmxlIiwgVFdMNDAzMF9SRUdfQVVESU9fSUYsIDAsIDAsIE5VTEwsIDApLAorCiAJLyogT3V0cHV0IE1JWEVSIGNvbnRyb2xzICovCiAJLyogRWFycGllY2UgKi8KIAlTTkRfU09DX0RBUE1fTUlYRVIoIkVhcnBpZWNlIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLApAQCAtMTMzNyw2ICsxMzM5LDExIEBACiAJeyJEaWdpdGFsIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAJeyJEaWdpdGFsIFZvaWNlIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAKKwl7IkRpZ2l0YWwgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiRGlnaXRhbCBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJEaWdpdGFsIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCiAJeyJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiRGlnaXRhbCBMMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRpZ2l0YWwgUjEgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEaWdpdGFsIEwyIFBsYXliYWNrIE1peGVyIn0sCkBAIC0xNDU1LDYgKzE0NjIsMTEgQEAKIAl7IkFEQyBWaXJ0dWFsIExlZnQyIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAJeyJBREMgVmlydHVhbCBSaWdodDIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAorCXsiQURDIFZpcnR1YWwgTGVmdDEiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiQURDIFZpcnR1YWwgUmlnaHQxIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkFEQyBWaXJ0dWFsIExlZnQyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisKIAkvKiBBbmFsb2cgYnlwYXNzIHJvdXRlcyAqLwogCXsiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0In0sCiAJeyJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0In0sCkBAIC0yMTUyLDggKzIxNjQsNiBAQAogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOTIsNyArMjIwMiw3IEBACiAJY29kZWMtPndyaXRlID0gdHdsNDAzMF93cml0ZTsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB0d2w0MDMwX3NldF9iaWFzX2xldmVsOwogCWNvZGVjLT5kYWkgPSB0d2w0MDMwX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUodHdsNDAzMF9kYWkpLAorCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh0d2w0MDMwX2RhaSk7CiAJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gc2l6ZW9mKHR3bDQwMzBfcmVnKTsKIAljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh0d2w0MDMwX3JlZywgc2l6ZW9mKHR3bDQwMzBfcmVnKSwKIAkJCQkJR0ZQX0tFUk5FTCk7CkBAIC0yMjM3LDYgKzIyNDcsOSBAQAogewogCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZ0d2w0MDMwX2RhaVswXSwgQVJSQVlfU0laRSh0d2w0MDMwX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmdHdsNDAzMC0+Y29kZWMpOworCWtmcmVlKHR3bDQwMzAtPmNvZGVjLnJlZ19jYWNoZSk7CiAJa2ZyZWUodHdsNDAzMCk7CiAKIAl0d2w0MDMwX2NvZGVjID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKaW5kZXggZGQ2Mzk2ZS4uZjIwNmQyNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKQEAgLTI1LDcgKzI1LDcgQEAKIC8qIFJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBhcmUgaGVyZSAqLwogI2luY2x1ZGUgPGxpbnV4L21mZC90d2w0MDMwLWNvZGVjLmg+CiAKLS8qIFNnYWRvdyByZWdpc3RlciB1c2VkIGJ5IHRoZSBhdWRpbyBkcml2ZXIgKi8KKy8qIFNoYWRvdyByZWdpc3RlciB1c2VkIGJ5IHRoZSBhdWRpbyBkcml2ZXIgKi8KICNkZWZpbmUgVFdMNDAzMF9SRUdfU1dfU0hBRE9XCQkweDRBCiAjZGVmaW5lIFRXTDQwMzBfQ0FDSEVSRUdOVU0JKFRXTDQwMzBfUkVHX1NXX1NIQURPVyArIDEpCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2IwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCkBAIC0wLDAgKzEsODg4IEBACisvKgorICogd20yMDAwLmMgIC0tICBXTTIwMDAgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgZG93bmxvYWQgaW1hZ2UgZm9yIHRoZSBXTTIwMDAgd2lsbCBiZSByZXF1ZXN0ZWQgYXMKKyAqICd3bTIwMDBfYW5jLmJpbicgYnkgZGVmYXVsdCAob3ZlcnJpZGFibGUgdmlhIHBsYXRmb3JtIGRhdGEpIGF0CisgKiBydW50aW1lIGFuZCBpcyBleHBlY3RlZCB0byBiZSBpbiBmbGF0IGJpbmFyeSBmb3JtYXQuICBUaGlzIGlzCisgKiBnZW5lcmF0ZWQgYnkgV29sZnNvbiBjb25maWd1cmF0aW9uIHRvb2xzIGFuZCBpbmNsdWRlcworICogc3lzdGVtLXNwZWNpZmljIGNhbGxpYnJhdGlvbiBpbmZvcm1hdGlvbi4gIElmIHN1cHBsaWVkIGFzIGEKKyAqIHNlcXVlbmNlIG9mIEFTQ0lJLWVuY29kZWQgaGV4aWRlY2ltYWwgYnl0ZXMgdGhpcyBjYW4gYmUgY29udmVydGVkCisgKiBpbnRvIGEgZmxhdCBiaW5hcnkgd2l0aCBhIGNvbW1hbmQgc3VjaCBhcyB0aGlzIG9uIHRoZSBjb21tYW5kIGxpbmU6CisgKgorICogcGVybCAtZSAnd2hpbGUgKDw+KSB7IHMvW1xyXG5dKy8vIDsgcHJpbnRmKCIlYyIsIGhleCgkXykpOyB9JworICogICAgICAgICAgICAgICAgIDwgZmlsZSAgPiB3bTIwMDBfYW5jLmJpbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC93bTIwMDAuaD4KKworI2luY2x1ZGUgIndtMjAwMC5oIgorCitlbnVtIHdtMjAwMF9hbmNfbW9kZSB7CisJQU5DX0FDVElWRSA9IDAsCisJQU5DX0JZUEFTUyA9IDEsCisJQU5DX1NUQU5EQlkgPSAyLAorCUFOQ19PRkYgPSAzLAorfTsKKworc3RydWN0IHdtMjAwMF9wcml2IHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCisJZW51bSB3bTIwMDBfYW5jX21vZGUgYW5jX21vZGU7CisKKwl1bnNpZ25lZCBpbnQgYW5jX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCBhbmNfZW5nX2VuYToxOworCXVuc2lnbmVkIGludCBzcGtfZW5hOjE7CisKKwl1bnNpZ25lZCBpbnQgbWNsa19kaXY6MTsKKwl1bnNpZ25lZCBpbnQgc3BlZWNoX2NsYXJpdHk6MTsKKworCWludCBhbmNfZG93bmxvYWRfc2l6ZTsKKwljaGFyICphbmNfZG93bmxvYWQ7Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKndtMjAwMF9pMmM7CisKK3N0YXRpYyBpbnQgd20yMDAwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHVuc2lnbmVkIGludCByZWcsCisJCQl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggZGF0YVszXTsKKwlpbnQgcmV0OworCisJZGF0YVswXSA9IChyZWcgPj4gOCkgJiAweGZmOworCWRhdGFbMV0gPSByZWcgJiAweGZmOworCWRhdGFbMl0gPSB2YWx1ZSAmIDB4ZmY7CisKKwlkZXZfdmRiZygmaTJjLT5kZXYsICJ3cml0ZSAleCA9ICV4XG4iLCByZWcsIHZhbHVlKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIGRhdGEsIDMpOworCWlmIChyZXQgPT0gMykKKwkJcmV0dXJuIDA7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTIwMDBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCB1bnNpZ25lZCBpbnQgcikKK3sKKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOworCXU4IHJlZ1syXTsKKwl1OCBkYXRhOworCWludCByZXQ7CisKKwkvKiBXcml0ZSByZWdpc3RlciAqLworCXJlZ1swXSA9IChyID4+IDgpICYgMHhmZjsKKwlyZWdbMV0gPSByICYgMHhmZjsKKwl4ZmVyWzBdLmFkZHIgPSBpMmMtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSBzaXplb2YocmVnKTsKKwl4ZmVyWzBdLmJ1ZiA9ICZyZWdbMF07CisKKwkvKiBSZWFkIGRhdGEgKi8KKwl4ZmVyWzFdLmFkZHIgPSBpMmMtPmFkZHI7CisJeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOworCXhmZXJbMV0ubGVuID0gMTsKKwl4ZmVyWzFdLmJ1ZiA9ICZkYXRhOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYy0+YWRhcHRlciwgeGZlciwgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiaTJjX3RyYW5zZmVyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAwOworCX0KKworCWRldl92ZGJnKCZpMmMtPmRldiwgInJlYWQgJXggZnJvbSAleFxuIiwgZGF0YSwgcik7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgd20yMDAwX3Jlc2V0KHN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB3bTIwMDAtPmkyYzsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfRU5HX0NMUik7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9DTFIpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfSUQxLCAwKTsKKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfT0ZGOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9wb2xsX2JpdChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgdW5zaWduZWQgaW50IHJlZywgdTggbWFzaywgaW50IHRpbWVvdXQpCit7CisJaW50IHZhbDsKKworCXZhbCA9IHdtMjAwMF9yZWFkKGkyYywgcmVnKTsKKworCXdoaWxlICghKHZhbCAmIG1hc2spICYmIC0tdGltZW91dCkgeworCQltc2xlZXAoMSk7CisJCXZhbCA9IHdtMjAwMF9yZWFkKGkyYywgcmVnKTsKKwl9CisKKwlpZiAodGltZW91dCA9PSAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9wb3dlcl91cChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgcmV0LCB0aW1lb3V0OworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX09GRik7CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIkJlZ2lubmluZyBwb3dlciB1cFxuIik7CisKKwlpZiAoIXdtMjAwMC0+bWNsa19kaXYpIHsKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJEaXNhYmxpbmcgTUNMSyBkaXZpZGVyXG4iKTsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwKKwkJCSAgICAgV00yMDAwX01DTEtfRElWMl9FTkFfQ0xSKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKCZpMmMtPmRldiwgIkVuYWJsaW5nIE1DTEsgZGl2aWRlclxuIik7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsCisJCQkgICAgIFdNMjAwMF9NQ0xLX0RJVjJfRU5BX1NFVCk7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19FTkdfQ0xSKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0VOR19TRVQpOworCisJLyogV2FpdCBmb3IgQU5DIGVuZ2luZSB0byBiZWNvbWUgcmVhZHkgKi8KKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfQU5DX1NUQVQsCisJCQkgICAgIFdNMjAwMF9BTkNfRU5HX0lETEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQU5DIGVuZ2luZSBmYWlsZWQgdG8gcmVzZXRcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19CT09UX0NPTVBMRVRFLCAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkFOQyBlbmdpbmUgZmFpbGVkIHRvIGluaXRpYWxpc2VcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX1NFVCk7CisKKwkvKiBPcGVuIGNvZGUgZG93bmxvYWQgb2YgdGhlIGRhdGEgc2luY2UgaXQgaXMgdGhlIG9ubHkgYnVsaworCSAqIHdyaXRlIHdlIGRvLiAqLworCWRldl9kYmcoJmkyYy0+ZGV2LCAiRG93bmxvYWRpbmcgJWQgYnl0ZXNcbiIsCisJCXdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUgLSAyKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIHdtMjAwMC0+YW5jX2Rvd25sb2FkLAorCQkJICAgICAgd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJpMmNfdHJhbnNmZXIoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocmV0ICE9IHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJpMmNfdHJhbnNmZXIoKSBmYWlsZWQsICVkICE9ICVkXG4iLAorCQkJcmV0LCB3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2X2RiZygmaTJjLT5kZXYsICJEb3dubG9hZCBjb21wbGV0ZVxuIik7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJdGltZW91dCA9IDI0ODsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19BTkFfVk1JRF9QVV9USU1FLCB0aW1lb3V0IC8gNCk7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUpOworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAxMDsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSk7CisJfQorCisJcmV0ID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX1NQRUVDSF9DTEFSSVRZKTsKKwlpZiAod20yMDAwLT5zcGVlY2hfY2xhcml0eSkKKwkJcmV0ICY9IH5XTTIwMDBfU1BFRUNIX0NMQVJJVFk7CisJZWxzZQorCQlyZXQgfD0gV00yMDAwX1NQRUVDSF9DTEFSSVRZOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1BFRUNIX0NMQVJJVFksIHJldCk7CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFSVDAsIDB4MzMpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVJUMSwgMHgwMik7CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0lOVF9OX0NMUik7CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUsIHRpbWVvdXQpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGRldmljZSBhZnRlciAlZG1zXG4iLAorCQkJdGltZW91dCAqIDEwKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJZGV2X2RiZygmaTJjLT5kZXYsICJBTkMgYWN0aXZlXG4iKTsKKwlpZiAoYW5hbG9ndWUpCisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiQW5hbG9ndWUgYWN0aXZlXG4iKTsKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0FDVElWRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9wb3dlcl9kb3duKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCWludCB0aW1lb3V0OworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUERfVElNRSwgdGltZW91dCAvIDQpOworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9QT1dFUl9ET1dOKTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1BPV0VSX0RPV04pOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX1BPV0VSX0RPV05fQ09NUExFVEUsIHRpbWVvdXQpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBBTkMgcG93ZXIgZG93blxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19BTkNfU1RBVCwKKwkJCSAgICAgV00yMDAwX0FOQ19FTkdfSURMRSwgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEFOQyBlbmdpbmUgaWRsZVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWRldl9kYmcoJmkyYy0+ZGV2LCAicG93ZXJlZCBvZmZcbiIpOworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfT0ZGOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2VudGVyX2J5cGFzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19BQ1RJVkUpOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfQllQQVNTX0VOVFJZKTsKKwl9IGVsc2UgeworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX0JZUEFTU19FTlRSWSk7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfQU5DX0RJU0FCTEVELCAxMCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEFOQyBkaXNhYmxlXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULAorCQkJICAgICBXTTIwMDBfQU5DX0VOR19JRExFLCAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIGVuZ2luZSBpZGxlXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgV00yMDAwX1NZU19TVEJZKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX0NMUik7CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0JZUEFTUzsKKwlkZXZfZGJnKCZpMmMtPmRldiwgImJ5cGFzcyBlbmFibGVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9leGl0X2J5cGFzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19CWVBBU1MpOworCQorCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDEsIDApOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9IGVsc2UgeworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSk7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9TRVQpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfSU5UX05fQ0xSKTsKKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSwgMTApKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1PVVNFXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19BQ1RJVkU7CisJZGV2X2RiZygmaTJjLT5kZXYsICJNT1VTRSBhY3RpdmVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2VudGVyX3N0YW5kYnkoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisJaW50IHRpbWVvdXQ7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfQUNUSVZFKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl0aW1lb3V0ID0gMjQ4OworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0FOQV9WTUlEX1BEX1RJTUUsIHRpbWVvdXQgLyA0KTsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1NUQU5EQllfRU5UUlkpOworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAxMDsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1NUQU5EQllfRU5UUlkpOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX0FOQ19ESVNBQkxFRCwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsCisJCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIEFOQyBkaXNhYmxlIGFmdGVyIDFtc1xuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19BTkNfU1RBVCwgV00yMDAwX0FOQ19FTkdfSURMRSwKKwkJCSAgICAgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsCisJCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHN0YW5kYnkgYWZ0ZXIgJWRtc1xuIiwKKwkJCXRpbWVvdXQgKiAxMCk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDEsIFdNMjAwMF9TWVNfU1RCWSk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9DTFIpOworCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19TVEFOREJZOworCWRldl9kYmcoJmkyYy0+ZGV2LCAic3RhbmRieVxuIik7CisJaWYgKGFuYWxvZ3VlKQorCQlkZXZfZGJnKCZpMmMtPmRldiwgIkFuYWxvZ3VlIGRpc2FibGVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9leGl0X3N0YW5kYnkoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisJaW50IHRpbWVvdXQ7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfU1RBTkRCWSk7CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwxLCAwKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl0aW1lb3V0ID0gMjQ4OworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0FOQV9WTUlEX1BVX1RJTUUsIHRpbWVvdXQgLyA0KTsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFKTsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX1NFVCk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19JTlRfTl9DTFIpOworCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfTU9VU0VfQUNUSVZFLCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNT1VTRSBhZnRlciAlZG1zXG4iLAorCQkJdGltZW91dCAqIDEwKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19BQ1RJVkU7CisJZGV2X2RiZygmaTJjLT5kZXYsICJNT1VTRSBhY3RpdmVcbiIpOworCWlmIChhbmFsb2d1ZSkKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJBbmFsb2d1ZSBlbmFibGVkXG4iKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKndtMjAwMF9tb2RlX2ZuKShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpOworCitzdGF0aWMgc3RydWN0IHsKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBzb3VyY2U7CisJZW51bSB3bTIwMDBfYW5jX21vZGUgZGVzdDsKKwlpbnQgYW5hbG9ndWU7CisJd20yMDAwX21vZGVfZm4gc3RlcFsyXTsKK30gYW5jX3RyYW5zaXRpb25zW10gPSB7CisJeworCQkuc291cmNlID0gQU5DX09GRiwKKwkJLmRlc3QgPSBBTkNfQUNUSVZFLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9wb3dlcl91cCwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19PRkYsCisJCS5kZXN0ID0gQU5DX1NUQU5EQlksCisJCS5zdGVwID0geworCQkJd20yMDAwX3Bvd2VyX3VwLAorCQkJd20yMDAwX2VudGVyX3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfT0ZGLAorCQkuZGVzdCA9IEFOQ19CWVBBU1MsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX3Bvd2VyX3VwLAorCQkJd20yMDAwX2VudGVyX2J5cGFzcywKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19BQ1RJVkUsCisJCS5kZXN0ID0gQU5DX0JZUEFTUywKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZW50ZXJfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0FDVElWRSwKKwkJLmRlc3QgPSBBTkNfU1RBTkRCWSwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZW50ZXJfc3RhbmRieSwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19BQ1RJVkUsCisJCS5kZXN0ID0gQU5DX09GRiwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfZG93biwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19CWVBBU1MsCisJCS5kZXN0ID0gQU5DX0FDVElWRSwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9ieXBhc3MsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQllQQVNTLAorCQkuZGVzdCA9IEFOQ19TVEFOREJZLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X2J5cGFzcywKKwkJCXdtMjAwMF9lbnRlcl9zdGFuZGJ5LAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0JZUEFTUywKKwkJLmRlc3QgPSBBTkNfT0ZGLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X2J5cGFzcywKKwkJCXdtMjAwMF9wb3dlcl9kb3duLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX1NUQU5EQlksCisJCS5kZXN0ID0gQU5DX0FDVElWRSwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9zdGFuZGJ5LAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX1NUQU5EQlksCisJCS5kZXN0ID0gQU5DX0JZUEFTUywKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9zdGFuZGJ5LAorCQkJd20yMDAwX2VudGVyX2J5cGFzcywKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19TVEFOREJZLAorCQkuZGVzdCA9IEFOQ19PRkYsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfc3RhbmRieSwKKwkJCXdtMjAwMF9wb3dlcl9kb3duLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfdHJhbnNpdGlvbihzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCwKKwkJCQkgZW51bSB3bTIwMDBfYW5jX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gd20yMDAwLT5pMmM7CisJaW50IGksIGo7CisJaW50IHJldDsKKworCWlmICh3bTIwMDAtPmFuY19tb2RlID09IG1vZGUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW5jX3RyYW5zaXRpb25zKTsgaSsrKQorCQlpZiAoYW5jX3RyYW5zaXRpb25zW2ldLnNvdXJjZSA9PSB3bTIwMDAtPmFuY19tb2RlICYmCisJCSAgICBhbmNfdHJhbnNpdGlvbnNbaV0uZGVzdCA9PSBtb2RlKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQVJSQVlfU0laRShhbmNfdHJhbnNpdGlvbnMpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiTm8gdHJhbnNpdGlvbiBmb3IgJWQtPiVkXG4iLAorCQkJd20yMDAwLT5hbmNfbW9kZSwgbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFuY190cmFuc2l0aW9uc1tqXS5zdGVwKTsgaisrKSB7CisJCWlmICghYW5jX3RyYW5zaXRpb25zW2ldLnN0ZXBbal0pCisJCQlicmVhazsKKwkJcmV0ID0gYW5jX3RyYW5zaXRpb25zW2ldLnN0ZXBbal0oaTJjLAorCQkJCQkJIGFuY190cmFuc2l0aW9uc1tpXS5hbmFsb2d1ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY19zZXRfbW9kZShzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gd20yMDAwLT5pMmM7CisJZW51bSB3bTIwMDBfYW5jX21vZGUgbW9kZTsKKworCWlmICh3bTIwMDAtPmFuY19lbmdfZW5hICYmIHdtMjAwMC0+c3BrX2VuYSkKKwkJaWYgKHdtMjAwMC0+YW5jX2FjdGl2ZSkKKwkJCW1vZGUgPSBBTkNfQUNUSVZFOworCQllbHNlCisJCQltb2RlID0gQU5DX0JZUEFTUzsKKwllbHNlCisJCW1vZGUgPSBBTkNfU1RBTkRCWTsKKworCWRldl9kYmcoJmkyYy0+ZGV2LCAiU2V0IG1vZGUgJWQgKGVuYWJsZWQgJWQsIG11dGUgJWQsIGFjdGl2ZSAlZClcbiIsCisJCW1vZGUsIHdtMjAwMC0+YW5jX2VuZ19lbmEsICF3bTIwMDAtPnNwa19lbmEsCisJCXdtMjAwMC0+YW5jX2FjdGl2ZSk7CisKKwlyZXR1cm4gd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY19tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTIwMDAtPmFuY19hY3RpdmU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfYW5jX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCWludCBhbmNfYWN0aXZlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmIChhbmNfYWN0aXZlID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTIwMDAtPmFuY19hY3RpdmUgPSBhbmNfYWN0aXZlOworCisJcmV0dXJuIHdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsKK30KKworc3RhdGljIGludCB3bTIwMDBfc3BlYWtlcl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTIwMDAtPnNwa19lbmE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfc3BlYWtlcl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKwlpbnQgdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmICh2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtMjAwMC0+c3BrX2VuYSA9IHZhbDsKKworCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTIwMDBfY29udHJvbHNbXSA9IHsKKwlTT0NfU0lOR0xFX0JPT0xfRVhUKCJXTTIwMDAgQU5DIFN3aXRjaCIsIDAsCisJCQkgICAgd20yMDAwX2FuY19tb2RlX2dldCwKKwkJCSAgICB3bTIwMDBfYW5jX21vZGVfcHV0KSwKKwlTT0NfU0lOR0xFX0JPT0xfRVhUKCJXTTIwMDAgU3dpdGNoIiwgMCwKKwkJCSAgICB3bTIwMDBfc3BlYWtlcl9nZXQsCisJCQkgICAgd20yMDAwX3NwZWFrZXJfcHV0KSwKK307CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY19wb3dlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisKKwlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkKKwkJd20yMDAwLT5hbmNfZW5nX2VuYSA9IDE7CisKKwlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09GRihldmVudCkpCisJCXdtMjAwMC0+YW5jX2VuZ19lbmEgPSAwOworCisJcmV0dXJuIHdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtMjAwMF9kYXBtX3dpZGdldHNbXSA9IHsKKy8qIEV4dGVybmFsbHkgdmlzaWJsZSBwaW5zICovCitTTkRfU09DX0RBUE1fT1VUUFVUKCJXTTIwMDAgU1BLTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiV00yMDAwIFNQS1AiKSwKKworU05EX1NPQ19EQVBNX0lOUFVUKCJXTTIwMDAgTElOTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJXTTIwMDAgTElOUCIpLAorCitTTkRfU09DX0RBUE1fUEdBX0UoIkFOQyBFbmdpbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCSAgIHdtMjAwMF9hbmNfcG93ZXJfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK307CisKKy8qIFRhcmdldCwgUGF0aCwgU291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7ICJXTTIwMDAgU1BLTiIsIE5VTEwsICJBTkMgRW5naW5lIiB9LAorCXsgIldNMjAwMCBTUEtQIiwgTlVMTCwgIkFOQyBFbmdpbmUiIH0sCisJeyAiQU5DIEVuZ2luZSIsIE5VTEwsICJXTTIwMDAgTElOTiIgfSwKKwl7ICJBTkMgRW5naW5lIiwgTlVMTCwgIldNMjAwMCBMSU5QIiB9LAorfTsKKworLyogQ2FsbGVkIGZyb20gdGhlIG1hY2hpbmUgZHJpdmVyICovCitpbnQgd20yMDAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IHJldDsKKworCWlmICghd20yMDAwX2kyYykgeworCQlwcl9lcnIoIldNMjAwMCBub3QgeWV0IHByb2JlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtMjAwMF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUod20yMDAwX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd20yMDAwX2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRSh3bTIwMDBfY29udHJvbHMpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtMjAwMF9hZGRfY29udHJvbHMpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTIwMDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMDsKKwlzdHJ1Y3Qgd20yMDAwX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJlZywgcmV0OworCXUxNiBpZDsKKworCWlmICh3bTIwMDBfaTJjKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQW5vdGhlciBXTTIwMDAgaXMgYWxyZWFkeSByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd20yMDAwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtMjAwMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtMjAwMCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSBXTTIwMDAgKi8KKwlyZWcgPSB3bTIwMDBfcmVhZChpMmMsIFdNMjAwMF9SRUdfSUQxKTsKKwlpZCA9IHJlZyA8PCA4OworCXJlZyA9IHdtMjAwMF9yZWFkKGkyYywgV00yMDAwX1JFR19JRDIpOworCWlkIHw9IHJlZyAmIDB4ZmY7CisKKwlpZiAoaWQgIT0gMHgyMDAwKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNMjAwMCAtIElEICV4XG4iLCBpZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXJlZyA9IHdtMjAwMF9yZWFkKGkyYywgV00yMDAwX1JFR19SRVZJU09OKTsKKwlkZXZfaW5mbygmaTJjLT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgcmVnICsgJ0EnKTsKKworCWZpbGVuYW1lID0gIndtMjAwMF9hbmMuYmluIjsKKwlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KTsKKwlpZiAocGRhdGEpIHsKKwkJd20yMDAwLT5tY2xrX2RpdiA9IHBkYXRhLT5tY2xrZGl2MjsKKwkJd20yMDAwLT5zcGVlY2hfY2xhcml0eSA9ICFwZGF0YS0+c3BlZWNoX2VuaF9kaXNhYmxlOworCisJCWlmIChwZGF0YS0+ZG93bmxvYWRfZmlsZSkKKwkJCWZpbGVuYW1lID0gcGRhdGEtPmRvd25sb2FkX2ZpbGU7CisJfQorCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGVuYW1lLCAmaTJjLT5kZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byBhY3F1aXJlIEFOQyBkYXRhOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyogUHJlLWNvb2sgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgb250byB0aGUgaW1hZ2UgKi8KKwl3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplID0gZnctPnNpemUgKyAyOworCXdtMjAwMC0+YW5jX2Rvd25sb2FkID0ga21hbGxvYyh3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAod20yMDAwLT5hbmNfZG93bmxvYWQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mdzsKKwl9CisKKwl3bTIwMDAtPmFuY19kb3dubG9hZFswXSA9IDB4ODA7CisJd20yMDAwLT5hbmNfZG93bmxvYWRbMV0gPSAweDAwOworCW1lbWNweSh3bTIwMDAtPmFuY19kb3dubG9hZCArIDIsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmaTJjLT5kZXYsIHdtMjAwMCk7CisJd20yMDAwLT5hbmNfZW5nX2VuYSA9IDE7CisJd20yMDAwLT5pMmMgPSBpMmM7CisKKwl3bTIwMDBfcmVzZXQod20yMDAwKTsKKworCS8qIFRoaXMgd2lsbCB0cmlnZ2VyIGEgdHJhbnNpdGlvbiB0byBzdGFuZGJ5IG1vZGUgYnkgZGVmYXVsdCAqLworCXdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsJCisKKwl3bTIwMDBfaTJjID0gaTJjOworCisJcmV0dXJuIDA7CisKK2Vycl9mdzoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKK2VycjoKKwlrZnJlZSh3bTIwMDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtMjAwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIEFOQ19PRkYpOworCisJd20yMDAwX2kyYyA9IE5VTEw7CisJa2ZyZWUod20yMDAwLT5hbmNfZG93bmxvYWQpOworCWtmcmVlKHdtMjAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd20yMDAwX2kyY19zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwl3bTIwMDBfYW5jX3RyYW5zaXRpb24od20yMDAwLCBBTkNfT0ZGKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTIwMDBfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmkyYywgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXJldHVybiB3bTIwMDBfYW5jX3RyYW5zaXRpb24od20yMDAwLCBBTkNfT0ZGKTsKK30KKworc3RhdGljIGludCB3bTIwMDBfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorI2Vsc2UKKyNkZWZpbmUgd20yMDAwX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd20yMDAwX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTIwMDBfaTJjX2lkW10gPSB7CisJeyAid20yMDAwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTIwMDBfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtMjAwMF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtMjAwMCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd20yMDAwX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod20yMDAwX2kyY19yZW1vdmUpLAorCS5zdXNwZW5kID0gd20yMDAwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTIwMDBfaTJjX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSB3bTIwMDBfaTJjX3NodXRkb3duLAorCS5pZF90YWJsZSA9IHdtMjAwMF9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTIwMDBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd20yMDAwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod20yMDAwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd20yMDAwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd20yMDAwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod20yMDAwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV00yMDAwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOGUyNjFjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogd20yMDAwLmggIC0tICBXTTIwMDAgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV00yMDAwX0gKKyNkZWZpbmUgX1dNMjAwMF9ICisKK3N0cnVjdCB3bTIwMDBfc2V0dXBfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7CisJaW50IG1jbGtfZGl2OyAgIC8qIFNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIE1DTEtfRElWXzIgcmVxdWlyZWQgKi8KK307CisKK2V4dGVybiBpbnQgd20yMDAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtMjAwMF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd20yMDAwOworCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUCSAgICAweDgwMDAKKyNkZWZpbmUgV00yMDAwX1JFR19TUEVFQ0hfQ0xBUklUWSAgIDB4OGZlZgorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19XQVRDSERPRyAgICAgMHg4ZmY2CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5BX1ZNSURfUERfVElNRSAweDhmZjcKKyNkZWZpbmUgV00yMDAwX1JFR19BTkFfVk1JRF9QVV9USU1FIDB4OGZmOAorI2RlZmluZSBXTTIwMDBfUkVHX0NBVF9GTFRSX0lORFggICAgMHg4ZmY5CisjZGVmaW5lIFdNMjAwMF9SRUdfQ0FUX0dBSU5fMCAgICAgICAweDhmZmEKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfU1RBVFVTICAgICAgIDB4OGZmYworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMICAgMHg4ZmZkCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUMCAgICAgICAweDhmZmUKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfU1RBUlQxICAgICAgIDB4OGZmZgorI2RlZmluZSBXTTIwMDBfUkVHX0lEMSAgICAgICAgICAgICAgMHhmMDAwCisjZGVmaW5lIFdNMjAwMF9SRUdfSUQyICAgICAgICAgICAgICAweGYwMDEKKyNkZWZpbmUgV00yMDAwX1JFR19SRVZJU09OICAgICAgICAgIDB4ZjAwMgorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19DVEwxICAgICAgICAgMHhmMDAzCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX0NUTDIgICAgICAgICAweGYwMDQKKyNkZWZpbmUgV00yMDAwX1JFR19BTkNfU1RBVCAgICAgICAgIDB4ZjAwNQorI2RlZmluZSBXTTIwMDBfUkVHX0lGX0NUTCAgICAgICAgICAgMHhmMDA2CisKKy8qIFNQRUVDSF9DTEFSSVRZICovCisjZGVmaW5lIFdNMjAwMF9TUEVFQ0hfQ0xBUklUWSAgIDB4MDEKKworLyogU1lTX1NUQVRVUyAqLworI2RlZmluZSBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0NBVF9GUkVRX0NPTVBMRVRFICAgICAgICAgMHgyMAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0NBVF9HQUlOX0NPTVBMRVRFICAgICAgICAgMHgxMAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX1RIRVJNQUxfU0hVVERPV05fQ09NUExFVEUgMHgwOAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0FOQ19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX1BPV0VSX0RPV05fQ09NUExFVEUgICAgICAgMHgwMgorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0JPT1RfQ09NUExFVEUgICAgICAgICAgICAgMHgwMQorCisvKiBTWVNfTU9ERV9DTlRSTCAqLworI2RlZmluZSBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgMHg4MAorI2RlZmluZSBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgICAgMHg0MAorI2RlZmluZSBXTTIwMDBfTU9ERV9DQVRfRlJFUV9FTkFCTEUgMHgyMAorI2RlZmluZSBXTTIwMDBfTU9ERV9DQVRfR0FJTl9FTkFCTEUgMHgxMAorI2RlZmluZSBXTTIwMDBfTU9ERV9CWVBBU1NfRU5UUlkgICAgMHgwOAorI2RlZmluZSBXTTIwMDBfTU9ERV9TVEFOREJZX0VOVFJZICAgMHgwNAorI2RlZmluZSBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSAgMHgwMgorI2RlZmluZSBXTTIwMDBfTU9ERV9QT1dFUl9ET1dOICAgICAgMHgwMQorCisvKiBTWVNfQ1RMMSAqLworI2RlZmluZSBXTTIwMDBfU1lTX1NUQlkgICAgICAgICAgMHgwMQorCisvKiBTWVNfQ1RMMiAqLworI2RlZmluZSBXTTIwMDBfTUNMS19ESVYyX0VOQV9DTFIgMHg4MAorI2RlZmluZSBXTTIwMDBfTUNMS19ESVYyX0VOQV9TRVQgMHg0MAorI2RlZmluZSBXTTIwMDBfQU5DX0VOR19DTFIgICAgICAgMHgyMAorI2RlZmluZSBXTTIwMDBfQU5DX0VOR19TRVQgICAgICAgMHgxMAorI2RlZmluZSBXTTIwMDBfQU5DX0lOVF9OX0NMUiAgICAgMHgwOAorI2RlZmluZSBXTTIwMDBfQU5DX0lOVF9OX1NFVCAgICAgMHgwNAorI2RlZmluZSBXTTIwMDBfUkFNX0NMUiAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTIwMDBfUkFNX1NFVCAgICAgICAgICAgMHgwMQorCisvKiBBTkNfU1RBVCAqLworI2RlZmluZSBXTTIwMDBfQU5DX0VOR19JRExFICAgICAgMHgwMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCmluZGV4IGQ4ZmZiZDYuLjYzYTI1NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjcuYwpAQCAtNDQsMjMgKzQ0LDE2IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzI3X2RhaSk7CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NzI3X2NvZGVjOworCiBzdGF0aWMgaW50IHdtODcyN19zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQljb2RlYy0+bmFtZSA9ICJXTTg3MjciOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5kYWkgPSAmd204NzI3X2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDE7Ci0Jc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCUJVR19PTighd204NzI3X2NvZGVjKTsKKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3MjdfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTgwLDEyICs3Myw5IEBACiBzdGF0aWMgaW50IHdtODcyN19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAwOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoY29kZWMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4LDEzICs4OCw1NSBAQAogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTg3MjdfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWlmICh3bTg3MjdfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQW5vdGhlciBXTTg3MjcgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3bTg3MjdfY29kZWMgPSBjb2RlYzsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvZGVjKTsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJY29kZWMtPmRldiA9ICZwZGV2LT5kZXY7CisJY29kZWMtPm5hbWUgPSAiV004NzI3IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJndtODcyN19kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCiAJd204NzI3X2RhaS5kZXYgPSAmcGRldi0+ZGV2OwotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzI3X2RhaSk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIENPREVDOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZShjb2RlYyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgd204NzI3X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IDNhNDk3ODEuLjVhMjYxOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtNDU2LDYgKzQ1Niw5IEBACiAKIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9yZWcpOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldID09IHdtODczMV9yZWdbaV0pCisJCQljb250aW51ZTsKKwogCQlkYXRhWzBdID0gKGkgPDwgMSkgfCAoKGNhY2hlW2ldID4+IDgpICYgMHgwMDAxKTsKIAkJZGF0YVsxXSA9IGNhY2hlW2ldICYgMHgwMGZmOwogCQljb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCBkNjg1MGRhY2QuLmMyNDQ0ZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtMTUwNywxMCArMTUwNyw2IEBACiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwotCWlmICghY29kZWMtPmNhcmQpCi0JCXJldHVybiAwOwotCiAJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MjMsMTAgKzE1MTksNiBAQAogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKLQkvKiB3ZSBvbmx5IG5lZWQgdG8gcmVzdW1lIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KLQlpZiAoIWNvZGVjLT5jYXJkKQotCQlyZXR1cm4gMDsKLQogCS8qIFN5bmMgcmVnX2NhY2hlIHdpdGggdGhlIGhhcmR3YXJlICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX3JlZyk7IGkrKykgewogCQlpZiAoaSArIDEgPT0gV004NzUzX1JFU0VUKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKaW5kZXggYWIyYzBkYS4uNDRlN2Q5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCkBAIC00MDYsNiArNDA2LDggQEAKIAogCS8qIFN5bmMgcmVnX2NhY2hlIHdpdGggdGhlIGhhcmR3YXJlICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204Nzc2X3JlZyk7IGkrKykgeworCQlpZiAoY2FjaGVbaV0gPT0gd204Nzc2X3JlZ1tpXSkKKwkJCWNvbnRpbnVlOwogCQlkYXRhWzBdID0gKGkgPDwgMSkgfCAoKGNhY2hlW2ldID4+IDgpICYgMHgwMDAxKTsKIAkJZGF0YVsxXSA9IGNhY2hlW2ldICYgMHgwMGZmOwogCQljb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNlNDdkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwpAQCAtMCwwICsxLDI2NTYgQEAKKy8qCisgKiB3bTg5MDQuYyAgLS0gIFdNODkwNCBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvd204OTA0Lmg+CisKKyNpbmNsdWRlICJ3bTg5MDQuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5MDRfY29kZWM7CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5MDQ7CisKK2VudW0gd204OTA0X3R5cGUgeworCVdNODkwNCwKKwlXTTg5MTIsCit9OworCisjZGVmaW5lIFdNODkwNF9OVU1fRENTX0NIQU5ORUxTIDQKKworI2RlZmluZSBXTTg5MDRfTlVNX1NVUFBMSUVTIDUKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5MDRfc3VwcGx5X25hbWVzW1dNODkwNF9OVU1fU1VQUExJRVNdID0geworCSJEQ1ZERCIsCisJIkRCVkREIiwKKwkiQVZERCIsCisJIkNQVkREIiwKKwkiTUlDVkREIiwKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODkwNF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODkwNF9NQVhfUkVHSVNURVIgKyAxXTsKKworCWVudW0gd204OTA0X3R5cGUgZGV2dHlwZTsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODkwNF9OVU1fU1VQUExJRVNdOworCisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGE7CisKKwlpbnQgZGVlbXBoOworCisJLyogUGxhdGZvcm0gcHJvdmlkZWQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KKwljb25zdCBjaGFyICoqZHJjX3RleHRzOworCWludCBkcmNfY2ZnOworCXN0cnVjdCBzb2NfZW51bSBkcmNfZW51bTsKKworCS8qIFBsYXRmb3JtIHByb3ZpZGVkIFJlVHVuZSBtb2JpbGUgY29uZmlndXJhdGlvbiAqLworCWludCBudW1fcmV0dW5lX21vYmlsZV90ZXh0czsKKwljb25zdCBjaGFyICoqcmV0dW5lX21vYmlsZV90ZXh0czsKKwlpbnQgcmV0dW5lX21vYmlsZV9jZmc7CisJc3RydWN0IHNvY19lbnVtIHJldHVuZV9tb2JpbGVfZW51bTsKKworCS8qIEZMTCBzZXR1cCAqLworCWludCBmbGxfc3JjOworCWludCBmbGxfZnJlZjsKKwlpbnQgZmxsX2ZvdXQ7CisKKwkvKiBDbG9ja2luZyBjb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50IG1jbGtfcmF0ZTsKKwlpbnQgc3lzY2xrX3NyYzsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrX3JhdGU7CisKKwlpbnQgdGRtX3dpZHRoOworCWludCB0ZG1fc2xvdHM7CisJaW50IGJjbGs7CisJaW50IGZzOworCisJLyogREMgc2Vydm8gY29uZmlndXJhdGlvbiAtIGNhY2hlZCBvZmZzZXQgdmFsdWVzICovCisJaW50IGRjc19zdGF0ZVtXTTg5MDRfTlVNX0RDU19DSEFOTkVMU107Cit9OworCitzdGF0aWMgY29uc3QgdTE2IHdtODkwNF9yZWdbV004OTA0X01BWF9SRUdJU1RFUiArIDFdID0geworCTB4ODkwNCwgICAgIC8qIFIwICAgLSBTVyBSZXNldCBhbmQgSUQgKi8KKwkweDAwMDAsICAgICAvKiBSMSAgIC0gUmV2aXNpb24gKi8KKwkweDAwMDAsICAgICAvKiBSMiAqLworCTB4MDAwMCwgICAgIC8qIFIzICovCisJMHgwMDE4LCAgICAgLyogUjQgICAtIEJpYXMgQ29udHJvbCAwICovCisJMHgwMDAwLCAgICAgLyogUjUgICAtIFZNSUQgQ29udHJvbCAwICovCisJMHgwMDAwLCAgICAgLyogUjYgICAtIE1pYyBCaWFzIENvbnRyb2wgMCAqLworCTB4MDAwMCwgICAgIC8qIFI3ICAgLSBNaWMgQmlhcyBDb250cm9sIDEgKi8KKwkweDAwMDEsICAgICAvKiBSOCAgIC0gQW5hbG9ndWUgREFDIDAgKi8KKwkweDk2OTYsICAgICAvKiBSOSAgIC0gbWljIEZpbHRlciBDb250cm9sICovCisJMHgwMDAxLCAgICAgLyogUjEwICAtIEFuYWxvZ3VlIEFEQyAwICovCisJMHgwMDAwLCAgICAgLyogUjExICovCisJMHgwMDAwLCAgICAgLyogUjEyICAtIFBvd2VyIE1hbmFnZW1lbnQgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNCAgLSBQb3dlciBNYW5hZ2VtZW50IDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTUgIC0gUG93ZXIgTWFuYWdlbWVudCAzICovCisJMHgwMDAwLCAgICAgLyogUjE2ICovCisJMHgwMDAwLCAgICAgLyogUjE3ICovCisJMHgwMDAwLCAgICAgLyogUjE4ICAtIFBvd2VyIE1hbmFnZW1lbnQgNiAqLworCTB4MDAwMCwgICAgIC8qIFIxOSAqLworCTB4OTQ1RSwgICAgIC8qIFIyMCAgLSBDbG9jayBSYXRlcyAwICovCisJMHgwQzA1LCAgICAgLyogUjIxICAtIENsb2NrIFJhdGVzIDEgKi8KKwkweDAwMDYsICAgICAvKiBSMjIgIC0gQ2xvY2sgUmF0ZXMgMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMyAqLworCTB4MDA1MCwgICAgIC8qIFIyNCAgLSBBdWRpbyBJbnRlcmZhY2UgMCAqLworCTB4MDAwQSwgICAgIC8qIFIyNSAgLSBBdWRpbyBJbnRlcmZhY2UgMSAqLworCTB4MDBFNCwgICAgIC8qIFIyNiAgLSBBdWRpbyBJbnRlcmZhY2UgMiAqLworCTB4MDA0MCwgICAgIC8qIFIyNyAgLSBBdWRpbyBJbnRlcmZhY2UgMyAqLworCTB4MDAwMCwgICAgIC8qIFIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyOSAqLworCTB4MDBDMCwgICAgIC8qIFIzMCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCTB4MDBDMCwgICAgIC8qIFIzMSAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwkweDAwMDAsICAgICAvKiBSMzIgIC0gREFDIERpZ2l0YWwgMCAqLworCTB4MDAwOCwgICAgIC8qIFIzMyAgLSBEQUMgRGlnaXRhbCAxICovCisJMHgwMDAwLCAgICAgLyogUjM0ICovCisJMHgwMDAwLCAgICAgLyogUjM1ICovCisJMHgwMEMwLCAgICAgLyogUjM2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMZWZ0ICovCisJMHgwMEMwLCAgICAgLyogUjM3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSaWdodCAqLworCTB4MDAxMCwgICAgIC8qIFIzOCAgLSBBREMgRGlnaXRhbCAwICovCisJMHgwMDAwLCAgICAgLyogUjM5ICAtIERpZ2l0YWwgTWljcm9waG9uZSAwICovCisJMHgwMUFGLCAgICAgLyogUjQwICAtIERSQyAwICovCisJMHgzMjQ4LCAgICAgLyogUjQxICAtIERSQyAxICovCisJMHgwMDAwLCAgICAgLyogUjQyICAtIERSQyAyICovCisJMHgwMDAwLCAgICAgLyogUjQzICAtIERSQyAzICovCisJMHgwMDg1LCAgICAgLyogUjQ0ICAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMCAqLworCTB4MDA4NSwgICAgIC8qIFI0NSAgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAwICovCisJMHgwMDQ0LCAgICAgLyogUjQ2ICAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMSAqLworCTB4MDA0NCwgICAgIC8qIFI0NyAgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAxICovCisJMHgwMDAwLCAgICAgLyogUjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjUwICovCisJMHgwMDAwLCAgICAgLyogUjUxICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDAwLCAgICAgLyogUjUzICovCisJMHgwMDAwLCAgICAgLyogUjU0ICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMDAwLCAgICAgLyogUjU2ICovCisJMHgwMDJELCAgICAgLyogUjU3ICAtIEFuYWxvZ3VlIE9VVDEgTGVmdCAqLworCTB4MDAyRCwgICAgIC8qIFI1OCAgLSBBbmFsb2d1ZSBPVVQxIFJpZ2h0ICovCisJMHgwMDM5LCAgICAgLyogUjU5ICAtIEFuYWxvZ3VlIE9VVDIgTGVmdCAqLworCTB4MDAzOSwgICAgIC8qIFI2MCAgLSBBbmFsb2d1ZSBPVVQyIFJpZ2h0ICovCisJMHgwMDAwLCAgICAgLyogUjYxICAtIEFuYWxvZ3VlIE9VVDEyIFpDICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHgwMDAwLCAgICAgLyogUjY0ICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMDAwLCAgICAgLyogUjY2ICovCisJMHgwMDAwLCAgICAgLyogUjY3ICAtIERDIFNlcnZvIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNjggIC0gREMgU2Vydm8gMSAqLworCTB4QUFBQSwgICAgIC8qIFI2OSAgLSBEQyBTZXJ2byAyICovCisJMHgwMDAwLCAgICAgLyogUjcwICovCisJMHhBQUFBLCAgICAgLyogUjcxICAtIERDIFNlcnZvIDQgKi8KKwkweEFBQUEsICAgICAvKiBSNzIgIC0gREMgU2Vydm8gNSAqLworCTB4MDAwMCwgICAgIC8qIFI3MyAgLSBEQyBTZXJ2byA2ICovCisJMHgwMDAwLCAgICAgLyogUjc0ICAtIERDIFNlcnZvIDcgKi8KKwkweDAwMDAsICAgICAvKiBSNzUgIC0gREMgU2Vydm8gOCAqLworCTB4MDAwMCwgICAgIC8qIFI3NiAgLSBEQyBTZXJ2byA5ICovCisJMHgwMDAwLCAgICAgLyogUjc3ICAtIERDIFNlcnZvIFJlYWRiYWNrIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNzggKi8KKwkweDAwMDAsICAgICAvKiBSNzkgKi8KKwkweDAwMDAsICAgICAvKiBSODAgKi8KKwkweDAwMDAsICAgICAvKiBSODEgKi8KKwkweDAwMDAsICAgICAvKiBSODIgKi8KKwkweDAwMDAsICAgICAvKiBSODMgKi8KKwkweDAwMDAsICAgICAvKiBSODQgKi8KKwkweDAwMDAsICAgICAvKiBSODUgKi8KKwkweDAwMDAsICAgICAvKiBSODYgKi8KKwkweDAwMDAsICAgICAvKiBSODcgKi8KKwkweDAwMDAsICAgICAvKiBSODggKi8KKwkweDAwMDAsICAgICAvKiBSODkgKi8KKwkweDAwMDAsICAgICAvKiBSOTAgIC0gQW5hbG9ndWUgSFAgMCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAqLworCTB4MDAwMCwgICAgIC8qIFI5MyAqLworCTB4MDAwMCwgICAgIC8qIFI5NCAgLSBBbmFsb2d1ZSBMaW5lb3V0IDAgKi8KKwkweDAwMDAsICAgICAvKiBSOTUgKi8KKwkweDAwMDAsICAgICAvKiBSOTYgKi8KKwkweDAwMDAsICAgICAvKiBSOTcgKi8KKwkweDAwMDAsICAgICAvKiBSOTggIC0gQ2hhcmdlIFB1bXAgMCAqLworCTB4MDAwMCwgICAgIC8qIFI5OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxICovCisJMHgwMDAwLCAgICAgLyogUjEwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDMgKi8KKwkweDAwMDQsICAgICAvKiBSMTA0IC0gQ2xhc3MgVyAwICovCisJMHgwMDAwLCAgICAgLyogUjEwNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTA3ICovCisJMHgwMDAwLCAgICAgLyogUjEwOCAtIFdyaXRlIFNlcXVlbmNlciAwICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAtIFdyaXRlIFNlcXVlbmNlciAxICovCisJMHgwMDAwLCAgICAgLyogUjExMCAtIFdyaXRlIFNlcXVlbmNlciAyICovCisJMHgwMDAwLCAgICAgLyogUjExMSAtIFdyaXRlIFNlcXVlbmNlciAzICovCisJMHgwMDAwLCAgICAgLyogUjExMiAtIFdyaXRlIFNlcXVlbmNlciA0ICovCisJMHgwMDAwLCAgICAgLyogUjExMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTE1ICovCisJMHgwMDAwLCAgICAgLyogUjExNiAtIEZMTCBDb250cm9sIDEgKi8KKwkweDAwMDcsICAgICAvKiBSMTE3IC0gRkxMIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTggLSBGTEwgQ29udHJvbCAzICovCisJMHgyRUUwLCAgICAgLyogUjExOSAtIEZMTCBDb250cm9sIDQgKi8KKwkweDAwMDQsICAgICAvKiBSMTIwIC0gRkxMIENvbnRyb2wgNSAqLworCTB4MDAxNCwgICAgIC8qIFIxMjEgLSBHUElPIENvbnRyb2wgMSAqLworCTB4MDAxMCwgICAgIC8qIFIxMjIgLSBHUElPIENvbnRyb2wgMiAqLworCTB4MDAxMCwgICAgIC8qIFIxMjMgLSBHUElPIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQgLSBHUElPIENvbnRyb2wgNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2IC0gRGlnaXRhbCBQdWxscyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjcgLSBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHhGRkZGLCAgICAgLyogUjEyOCAtIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIxMjkgLSBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KKwkweDAwMDAsICAgICAvKiBSMTMwIC0gSW50ZXJydXB0IERlYm91bmNlICovCisJMHgwMDAwLCAgICAgLyogUjEzMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzICovCisJMHgwMDAwLCAgICAgLyogUjEzNCAtIEVRMSAqLworCTB4MDAwQywgICAgIC8qIFIxMzUgLSBFUTIgKi8KKwkweDAwMEMsICAgICAvKiBSMTM2IC0gRVEzICovCisJMHgwMDBDLCAgICAgLyogUjEzNyAtIEVRNCAqLworCTB4MDAwQywgICAgIC8qIFIxMzggLSBFUTUgKi8KKwkweDAwMEMsICAgICAvKiBSMTM5IC0gRVE2ICovCisJMHgwRkNBLCAgICAgLyogUjE0MCAtIEVRNyAqLworCTB4MDQwMCwgICAgIC8qIFIxNDEgLSBFUTggKi8KKwkweDAwRDgsICAgICAvKiBSMTQyIC0gRVE5ICovCisJMHgxRUI1LCAgICAgLyogUjE0MyAtIEVRMTAgKi8KKwkweEYxNDUsICAgICAvKiBSMTQ0IC0gRVExMSAqLworCTB4MEI3NSwgICAgIC8qIFIxNDUgLSBFUTEyICovCisJMHgwMUM1LCAgICAgLyogUjE0NiAtIEVRMTMgKi8KKwkweDFDNTgsICAgICAvKiBSMTQ3IC0gRVExNCAqLworCTB4RjM3MywgICAgIC8qIFIxNDggLSBFUTE1ICovCisJMHgwQTU0LCAgICAgLyogUjE0OSAtIEVRMTYgKi8KKwkweDA1NTgsICAgICAvKiBSMTUwIC0gRVExNyAqLworCTB4MTY4RSwgICAgIC8qIFIxNTEgLSBFUTE4ICovCisJMHhGODI5LCAgICAgLyogUjE1MiAtIEVRMTkgKi8KKwkweDA3QUQsICAgICAvKiBSMTUzIC0gRVEyMCAqLworCTB4MTEwMywgICAgIC8qIFIxNTQgLSBFUTIxICovCisJMHgwNTY0LCAgICAgLyogUjE1NSAtIEVRMjIgKi8KKwkweDA1NTksICAgICAvKiBSMTU2IC0gRVEyMyAqLworCTB4NDAwMCwgICAgIC8qIFIxNTcgLSBFUTI0ICovCisJMHgwMDAwLCAgICAgLyogUjE1OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTYwICovCisJMHgwMDAwLCAgICAgLyogUjE2MSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTYzICovCisJMHgwMDAwLCAgICAgLyogUjE2NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTY2ICovCisJMHgwMDAwLCAgICAgLyogUjE2NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjggKi8KKwkweDAwMDAsICAgICAvKiBSMTY5ICovCisJMHgwMDAwLCAgICAgLyogUjE3MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTcyICovCisJMHgwMDAwLCAgICAgLyogUjE3MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTc1ICovCisJMHgwMDAwLCAgICAgLyogUjE3NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTc4ICovCisJMHgwMDAwLCAgICAgLyogUjE3OSAqLworCTB4MDAwMCwgICAgIC8qIFIxODAgKi8KKwkweDAwMDAsICAgICAvKiBSMTgxICovCisJMHgwMDAwLCAgICAgLyogUjE4MiAqLworCTB4MDAwMCwgICAgIC8qIFIxODMgKi8KKwkweDAwMDAsICAgICAvKiBSMTg0ICovCisJMHgwMDAwLCAgICAgLyogUjE4NSAqLworCTB4MDAwMCwgICAgIC8qIFIxODYgKi8KKwkweDAwMDAsICAgICAvKiBSMTg3ICovCisJMHgwMDAwLCAgICAgLyogUjE4OCAqLworCTB4MDAwMCwgICAgIC8qIFIxODkgKi8KKwkweDAwMDAsICAgICAvKiBSMTkwICovCisJMHgwMDAwLCAgICAgLyogUjE5MSAqLworCTB4MDAwMCwgICAgIC8qIFIxOTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTkzICovCisJMHgwMDAwLCAgICAgLyogUjE5NCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTk2ICovCisJMHgwMDAwLCAgICAgLyogUjE5NyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTggKi8KKwkweDAwMDAsICAgICAvKiBSMTk5ICovCisJMHgwMDAwLCAgICAgLyogUjIwMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjAyICovCisJMHgwMDAwLCAgICAgLyogUjIwMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMDQgLSBBbmFsb2d1ZSBPdXRwdXQgQmlhcyAwICovCisJMHgwMDAwLCAgICAgLyogUjIwNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDYgKi8KKwkweDAwMDAsICAgICAvKiBSMjA3ICovCisJMHgwMDAwLCAgICAgLyogUjIwOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMDkgKi8KKwkweDAwMDAsICAgICAvKiBSMjEwICovCisJMHgwMDAwLCAgICAgLyogUjIxMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMjE2ICovCisJMHgwMDAwLCAgICAgLyogUjIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTggKi8KKwkweDAwMDAsICAgICAvKiBSMjE5ICovCisJMHgwMDAwLCAgICAgLyogUjIyMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAwLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1ICovCisJMHgwMDAwLCAgICAgLyogUjIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzAgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDAwLCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDAwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjI0NyAtIEZMTCBOQ08gVGVzdCAwICovCisJMHgwMDE5LCAgICAgLyogUjI0OCAtIEZMTCBOQ08gVGVzdCAxICovCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgcmVhZGFibGU7CisJaW50IHdyaXRhYmxlOworCWludCB2b2w7Cit9IHdtODkwNF9hY2Nlc3NbXSA9IHsKKwl7IDB4RkZGRiwgMHhGRkZGLCAxIH0sIC8qIFIwICAgLSBTVyBSZXNldCBhbmQgSUQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxICAgLSBSZXZpc2lvbiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIzICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSNCAgIC0gQmlhcyBDb250cm9sIDAgKi8KKwl7IDB4MDA0NywgMHgwMDQ3LCAwIH0sIC8qIFI1ICAgLSBWTUlEIENvbnRyb2wgMCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjYgICAtIE1pYyBCaWFzIENvbnRyb2wgMCAqLworCXsgMHhDMDA3LCAweEMwMDcsIDAgfSwgLyogUjcgICAtIE1pYyBCaWFzIENvbnRyb2wgMSAqLworCXsgMHgwMDFFLCAweDAwMUUsIDAgfSwgLyogUjggICAtIEFuYWxvZ3VlIERBQyAwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSOSAgIC0gbWljIEZpbHRlciBDb250cm9sICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSMTAgIC0gQW5hbG9ndWUgQURDIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMSAqLworCXsgMHgwMDAzLCAweDAwMDMsIDAgfSwgLyogUjEyICAtIFBvd2VyIE1hbmFnZW1lbnQgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEzICovCisJeyAweDAwMDMsIDB4MDAwMywgMCB9LCAvKiBSMTQgIC0gUG93ZXIgTWFuYWdlbWVudCAyICovCisJeyAweDAwMDMsIDB4MDAwMywgMCB9LCAvKiBSMTUgIC0gUG93ZXIgTWFuYWdlbWVudCAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNyAqLworCXsgMHgwMDBGLCAweDAwMEYsIDAgfSwgLyogUjE4ICAtIFBvd2VyIE1hbmFnZW1lbnQgNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5ICovCisJeyAweDcwMDEsIDB4NzAwMSwgMCB9LCAvKiBSMjAgIC0gQ2xvY2sgUmF0ZXMgMCAqLworCXsgMHgzQzA3LCAweDNDMDcsIDAgfSwgLyogUjIxICAtIENsb2NrIFJhdGVzIDEgKi8KKwl7IDB4RDAwRiwgMHhEMDBGLCAwIH0sIC8qIFIyMiAgLSBDbG9jayBSYXRlcyAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjMgKi8KKwl7IDB4MUZGRiwgMHgxRkZGLCAwIH0sIC8qIFIyNCAgLSBBdWRpbyBJbnRlcmZhY2UgMCAqLworCXsgMHgzRERGLCAweDNEREYsIDAgfSwgLyogUjI1ICAtIEF1ZGlvIEludGVyZmFjZSAxICovCisJeyAweDBGMUYsIDB4MEYxRiwgMCB9LCAvKiBSMjYgIC0gQXVkaW8gSW50ZXJmYWNlIDIgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAwIH0sIC8qIFIyNyAgLSBBdWRpbyBJbnRlcmZhY2UgMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjkgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzMCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDAgfSwgLyogUjMxICAtIERBQyBEaWdpdGFsIFZvbHVtZSBSaWdodCAqLworCXsgMHgwRkZGLCAweDBGRkYsIDAgfSwgLyogUjMyICAtIERBQyBEaWdpdGFsIDAgKi8KKwl7IDB4MUU0RSwgMHgxRTRFLCAwIH0sIC8qIFIzMyAgLSBEQUMgRGlnaXRhbCAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIzNSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDAgfSwgLyogUjM2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMZWZ0ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMCB9LCAvKiBSMzcgIC0gQURDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0ICovCisJeyAweDAwNzMsIDB4MDA3MywgMCB9LCAvKiBSMzggIC0gQURDIERpZ2l0YWwgMCAqLworCXsgMHgxODAwLCAweDE4MDAsIDAgfSwgLyogUjM5ICAtIERpZ2l0YWwgTWljcm9waG9uZSAwICovCisJeyAweERGRUYsIDB4REZFRiwgMCB9LCAvKiBSNDAgIC0gRFJDIDAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFI0MSAgLSBEUkMgMSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjQyICAtIERSQyAyICovCisJeyAweDA3RkYsIDB4MDdGRiwgMCB9LCAvKiBSNDMgIC0gRFJDIDMgKi8KKwl7IDB4MDA5RiwgMHgwMDlGLCAwIH0sIC8qIFI0NCAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDAgKi8KKwl7IDB4MDA5RiwgMHgwMDlGLCAwIH0sIC8qIFI0NSAgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAwICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNDYgIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAxICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNDcgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1NiAqLworCXsgMHgwMTdGLCAweDAxRkYsIDAgfSwgLyogUjU3ICAtIEFuYWxvZ3VlIE9VVDEgTGVmdCAqLworCXsgMHgwMTdGLCAweDAxRkYsIDAgfSwgLyogUjU4ICAtIEFuYWxvZ3VlIE9VVDEgUmlnaHQgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI1OSAgLSBBbmFsb2d1ZSBPVVQyIExlZnQgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI2MCAgLSBBbmFsb2d1ZSBPVVQyIFJpZ2h0ICovCisJeyAweDAwMEYsIDB4MDAwRiwgMCB9LCAvKiBSNjEgIC0gQW5hbG9ndWUgT1VUMTIgWkMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjY2ICovCisJeyAweDAwMEYsIDB4MDAwRiwgMCB9LCAvKiBSNjcgIC0gREMgU2Vydm8gMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDEgfSwgLyogUjY4ICAtIERDIFNlcnZvIDEgKi8KKwl7IDB4MEYwRiwgMHgwRjBGLCAwIH0sIC8qIFI2OSAgLSBEQyBTZXJ2byAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNzAgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI3MSAgLSBEQyBTZXJ2byA0ICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNzIgIC0gREMgU2Vydm8gNSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDEgfSwgLyogUjczICAtIERDIFNlcnZvIDYgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3NCAgLSBEQyBTZXJ2byA3ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMSB9LCAvKiBSNzUgIC0gREMgU2Vydm8gOCAqLworCXsgMHgwMEZGLCAweDAwRkYsIDEgfSwgLyogUjc2ICAtIERDIFNlcnZvIDkgKi8KKwl7IDB4MEZGRiwgMHgwMDAwLCAxIH0sIC8qIFI3NyAgLSBEQyBTZXJ2byBSZWFkYmFjayAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg5ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMCB9LCAvKiBSOTAgIC0gQW5hbG9ndWUgSFAgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5MyAqLworCXsgMHgwMEZGLCAweDAwRkYsIDAgfSwgLyogUjk0ICAtIEFuYWxvZ3VlIExpbmVvdXQgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5NyAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjk4ICAtIENoYXJnZSBQdW1wIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwMyAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjEwNCAtIENsYXNzIFcgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEwNyAqLworCXsgMHgwMTFGLCAweDAxMUYsIDAgfSwgLyogUjEwOCAtIFdyaXRlIFNlcXVlbmNlciAwICovCisJeyAweDdGRkYsIDB4N0ZGRiwgMCB9LCAvKiBSMTA5IC0gV3JpdGUgU2VxdWVuY2VyIDEgKi8KKwl7IDB4NEZGRiwgMHg0RkZGLCAwIH0sIC8qIFIxMTAgLSBXcml0ZSBTZXF1ZW5jZXIgMiAqLworCXsgMHgwMDNGLCAweDAzM0YsIDAgfSwgLyogUjExMSAtIFdyaXRlIFNlcXVlbmNlciAzICovCisJeyAweDAzRjEsIDB4MDAwMCwgMCB9LCAvKiBSMTEyIC0gV3JpdGUgU2VxdWVuY2VyIDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMTUgKi8KKwl7IDB4MDAwNywgMHgwMDA3LCAwIH0sIC8qIFIxMTYgLSBGTEwgQ29udHJvbCAxICovCisJeyAweDNGNzcsIDB4M0Y3NywgMCB9LCAvKiBSMTE3IC0gRkxMIENvbnRyb2wgMiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjExOCAtIEZMTCBDb250cm9sIDMgKi8KKwl7IDB4N0ZFRiwgMHg3RkVGLCAwIH0sIC8qIFIxMTkgLSBGTEwgQ29udHJvbCA0ICovCisJeyAweDAwMUIsIDB4MDAxQiwgMCB9LCAvKiBSMTIwIC0gRkxMIENvbnRyb2wgNSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjEyMSAtIEdQSU8gQ29udHJvbCAxICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSMTIyIC0gR1BJTyBDb250cm9sIDIgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFIxMjMgLSBHUElPIENvbnRyb2wgMyAqLworCXsgMHgwMzhGLCAweDAzOEYsIDAgfSwgLyogUjEyNCAtIEdQSU8gQ29udHJvbCA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTI1ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMCB9LCAvKiBSMTI2IC0gRGlnaXRhbCBQdWxscyAqLworCXsgMHgwN0ZGLCAweDAzRkYsIDEgfSwgLyogUjEyNyAtIEludGVycnVwdCBTdGF0dXMgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAwIH0sIC8qIFIxMjggLSBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAwIH0sIC8qIFIxMjkgLSBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAwIH0sIC8qIFIxMzAgLSBJbnRlcnJ1cHQgRGVib3VuY2UgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMzMgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIxMzQgLSBFUTEgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFIxMzUgLSBFUTIgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFIxMzYgLSBFUTMgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFIxMzcgLSBFUTQgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFIxMzggLSBFUTUgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFIxMzkgLSBFUTYgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDAgLSBFUTcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDEgLSBFUTggKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDIgLSBFUTkgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDMgLSBFUTEwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ0IC0gRVExMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NSAtIEVRMTIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDYgLSBFUTEzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ3IC0gRVExNCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0OCAtIEVRMTUgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDkgLSBFUTE2ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTUwIC0gRVExNyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MXdtODUyM19kYWkgLSBFUTE4ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTUyIC0gRVExOSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MyAtIEVRMjAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTQgLSBFUTIxICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU1IC0gRVEyMiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1NiAtIEVRMjMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTcgLSBFUTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTYwICovCisJeyAweDAwMDIsIDB4MDAwMiwgMCB9LCAvKiBSMTYxIC0gQ29udHJvbCBJbnRlcmZhY2UgVGVzdCAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjAzICovCisJeyAweDAwNzAsIDB4MDA3MCwgMCB9LCAvKiBSMjA0IC0gQW5hbG9ndWUgT3V0cHV0IEJpYXMgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI0NiAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjI0NyAtIEZMTCBOQ08gVGVzdCAwICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSMjQ4IC0gRkxMIE5DTyBUZXN0IDEgKi8KK307CisKK3N0YXRpYyBpbnQgd204OTA0X3ZvbGF0aWxlX3JlZ2lzdGVyKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHdtODkwNF9hY2Nlc3NbcmVnXS52b2w7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X1NXX1JFU0VUX0FORF9JRCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2NvbmZpZ3VyZV9jbG9ja2luZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBjbG9jazAsIGNsb2NrMiwgcmF0ZTsKKworCS8qIEdhdGUgdGhlIGNsb2NrIHdoaWxlIHdlJ3JlIHVwZGF0aW5nIHRvIGF2b2lkIG1pc2Nsb2NraW5nICovCisJY2xvY2syID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkgICAgV004OTA0X1NZU0NMS19TUkMsIDApOworCisJLyogVGhpcyBzaG91bGQgYmUgZG9uZSBvbiBpbml0KCkgZm9yIGJ5cGFzcyBwYXRocyAqLworCXN3aXRjaCAod204OTA0LT5zeXNjbGtfc3JjKSB7CisJY2FzZSBXTTg5MDRfQ0xLX01DTEs6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogTUNMS1xuIiwgd204OTA0LT5tY2xrX3JhdGUpOworCisJCWNsb2NrMiAmPSB+V004OTA0X1NZU0NMS19TUkM7CisJCXJhdGUgPSB3bTg5MDQtPm1jbGtfcmF0ZTsKKworCQkvKiBFbnN1cmUgdGhlIEZMTCBpcyBzdG9wcGVkICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfQ0xLX0ZMTDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgJWRIeiBGTEwgY2xvY2tcbiIsCisJCQl3bTg5MDQtPmZsbF9mb3V0KTsKKworCQljbG9jazIgfD0gV004OTA0X1NZU0NMS19TUkM7CisJCXJhdGUgPSB3bTg5MDQtPmZsbF9mb3V0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlN5c3RlbSBjbG9jayBub3QgY29uZmlndXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNZU0NMSyBzaG91bGRuJ3QgYmUgb3ZlciAxMy41TUh6ICovCisJaWYgKHJhdGUgPiAxMzUwMDAwMCkgeworCQljbG9jazAgPSBXTTg5MDRfTUNMS19ESVY7CisJCXdtODkwNC0+c3lzY2xrX3JhdGUgPSByYXRlIC8gMjsKKwl9IGVsc2UgeworCQljbG9jazAgPSAwOworCQl3bTg5MDQtPnN5c2Nsa19yYXRlID0gcmF0ZTsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMCwgV004OTA0X01DTEtfRElWLAorCQkJICAgIGNsb2NrMCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEgfCBXTTg5MDRfU1lTQ0xLX1NSQywgY2xvY2syKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIkNMS19TWVMgaXMgJWRIelxuIiwgd204OTA0LT5zeXNjbGtfcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTA0X3NldF9kcmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IHNhdmUsIGk7CisKKwkvKiBTYXZlIGFueSBlbmFibGVzOyB0aGUgY29uZmlndXJhdGlvbiBzaG91bGQgY2xlYXIgdGhlbS4gKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfRFJDXzApOworCisJZm9yIChpID0gMDsgaSA8IFdNODkwNF9EUkNfUkVHUzsgaSsrKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRFJDXzAgKyBpLCAweGZmZmYsCisJCQkJICAgIHBkYXRhLT5kcmNfY2Znc1t3bTg5MDQtPmRyY19jZmddLnJlZ3NbaV0pOworCisJLyogUmVlbmFibGUgdGhlIERSQyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EUkNfMCwKKwkJCSAgICBXTTg5MDRfRFJDX0VOQSB8IFdNODkwNF9EUkNfREFDX1BBVEgsIHNhdmUpOworfQorCitzdGF0aWMgaW50IHdtODkwNF9wdXRfZHJjX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fZHJjX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTA0LT5kcmNfY2ZnID0gdmFsdWU7CisKKwl3bTg5MDRfc2V0X2RyYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfZ2V0X2RyY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTA0LT5kcmNfY2ZnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF9zZXRfcmV0dW5lX21vYmlsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgYmVzdCwgYmVzdF92YWwsIHNhdmUsIGksIGNmZzsKKworCWlmICghcGRhdGEgfHwgIXdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCXJldHVybjsKKworCS8qIEZpbmQgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb25maWd1cmF0aW9uCisJICogd2l0aCB0aGUgbmVhcmVzdCBzYW1wbGUgcmF0ZS4gKi8KKwljZmcgPSB3bTg5MDQtPnJldHVuZV9tb2JpbGVfY2ZnOworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgeworCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKKwkJCSAgIHdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0c1tjZmddKSA9PSAwICYmCisJCSAgICBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQktIHdtODkwNC0+ZnMpIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQkJICAgICAgIC0gd204OTA0LT5mcyk7CisJCX0KKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZVR1bmUgTW9iaWxlICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ubmFtZSwKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yYXRlLAorCQl3bTg5MDQtPmZzKTsKKworCS8qIFRoZSBFUSB3aWxsIGJlIGRpc2FibGVkIHdoaWxlIHJlY29uZmlndXJpbmcgaXQsIHJlbWVtYmVyIHRoZQorCSAqIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gCisJICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0VRMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgV004OTA0X0VRX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0VRMSArIGksIDB4ZmZmZiwKKwkJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3NbaV0pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0VRMSwgV004OTA0X0VRX0VOQSwgc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTA0LT5yZXR1bmVfbW9iaWxlX2NmZyA9IHZhbHVlOworCisJd204OTA0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5MDQtPnJldHVuZV9tb2JpbGVfY2ZnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVlbXBoX3NldHRpbmdzW10gPSB7IDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsKKworc3RhdGljIGludCB3bTg5MDRfc2V0X2RlZW1waChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCB2YWwsIGksIGJlc3Q7CisKKwkvKiBJZiB3ZSdyZSB1c2luZyBkZWVtcGhhc2lzIHNlbGVjdCB0aGUgbmVhcmVzdCBhdmFpbGFibGUgc2FtcGxlIAorCSAqIHJhdGUuCisJICovCisJaWYgKHdtODkwNC0+ZGVlbXBoKSB7CisJCWJlc3QgPSAxOworCQlmb3IgKGkgPSAyOyBpIDwgQVJSQVlfU0laRShkZWVtcGhfc2V0dGluZ3MpOyBpKyspIHsKKwkJCWlmIChhYnMoZGVlbXBoX3NldHRpbmdzW2ldIC0gd204OTA0LT5mcykgPAorCQkJICAgIGFicyhkZWVtcGhfc2V0dGluZ3NbYmVzdF0gLSB3bTg5MDQtPmZzKSkKKwkJCQliZXN0ID0gaTsKKwkJfQorCisJCXZhbCA9IGJlc3QgPDwgV004OTA0X0RFRU1QSF9TSElGVDsKKwl9IGVsc2UgeworCQl2YWwgPSAwOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNldCBkZWVtcGhhc2lzICVkXG4iLCB2YWwpOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF8xLAorCQkJCSAgIFdNODkwNF9ERUVNUEhfTUFTSywgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB3bTg5MDQtPmRlZW1waDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcHV0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGRlZW1waCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwlpZiAoZGVlbXBoID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5MDQtPmRlZW1waCA9IGRlZW1waDsKKworCXJldHVybiB3bTg5MDRfc2V0X2RlZW1waChjb2RlYyk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfYm9vc3RfdGx2LCAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNzIwMCwgNzUsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC01NzAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNpZGV0b25lX3RsdiwgLTM2MDAsIDMwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0X21vZGVfdGV4dFtdID0geworCSJTaW5nbGUtRW5kZWQiLCAiRGlmZmVyZW50aWFsIExpbmUiLCAiRGlmZmVyZW50aWFsIE1pYyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xLCAwLCAzLCBpbnB1dF9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJpbl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzEsIDAsIDMsIGlucHV0X21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpocGZfbW9kZV90ZXh0W10gPSB7CisJIkhpLWZpIiwgIlZvaWNlIDEiLCAiVm9pY2UgMiIsICJWb2ljZSAzIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocGZfbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BRENfRElHSVRBTF8wLCA1LCA0LCBocGZfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwNF9hZGNfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIENhcHR1cmUgVm9sdW1lIiwgV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZULAorCQkgV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19FTlVNKCJMZWZ0IENhcHV0dXJlIE1vZGUiLCBsaW5fbW9kZSksCitTT0NfRU5VTSgiUmlnaHQgQ2FwdHVyZSBNb2RlIiwgcmluX21vZGUpLAorCisvKiBObyBUTFYgc2luY2UgaXQgZGVwZW5kcyBvbiBtb2RlICovCitTT0NfRE9VQkxFX1IoIkNhcHR1cmUgVm9sdW1lIiwgV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8wLCAwLCAzMSwgMCksCitTT0NfRE9VQkxFX1IoIkNhcHR1cmUgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8wLCA3LCAxLCAwKSwKKworU09DX1NJTkdMRSgiSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg5MDRfQURDX0RJR0lUQUxfMCwgNCwgMSwgMCksCitTT0NfRU5VTSgiSGlnaCBQYXNzIEZpbHRlciBNb2RlIiwgaHBmX21vZGUpLAorCitTT0NfU0lOR0xFKCJBREMgMTI4eCBPU1IgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX0FEQ18wLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcmNfcGF0aF90ZXh0W10gPSB7CisJIkFEQyIsICJEQUMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRyY19wYXRoID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0RSQ18wLCAxNCwgMiwgZHJjX3BhdGhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfZGFjX3NuZF9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkRpZ2l0YWwgUGxheWJhY2sgQm9vc3QgVm9sdW1lIiwgCisJICAgICAgIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgOSwgMywgMCwgZGFjX2Jvb3N0X3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIFBsYXliYWNrIFZvbHVtZSIsIFdNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCwKKwkJIFdNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBWb2x1bWUiLCBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZULAorCQkgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQsIDAsIDYzLCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiSGVhZHBob25lIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVCwgOCwgMSwgMSksCitTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBaQyBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZULAorCSAgICAgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQsIDYsIDEsIDApLAorCitTT0NfRE9VQkxFX1JfVExWKCJMaW5lIE91dHB1dCBWb2x1bWUiLCBXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZULAorCQkgV004OTA0X0FOQUxPR1VFX09VVDJfUklHSFQsIDAsIDYzLCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiTGluZSBPdXRwdXQgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hULCA4LCAxLCAxKSwKK1NPQ19ET1VCTEVfUigiTGluZSBPdXRwdXQgWkMgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hULCA2LCAxLCAwKSwKKworU09DX1NJTkdMRSgiRVEgU3dpdGNoIiwgV004OTA0X0VRMSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCJEUkMgU3dpdGNoIiwgV004OTA0X0RSQ18wLCAxNSwgMSwgMCksCitTT0NfRU5VTSgiRFJDIFBhdGgiLCBkcmNfcGF0aCksCitTT0NfU0lOR0xFKCJEQUMgT1NSeDIgU3dpdGNoIiwgV004OTA0X0RBQ19ESUdJVEFMXzEsIDYsIDEsIDApLAorU09DX1NJTkdMRV9CT09MX0VYVCgiREFDIERlZW1waGFzaXMgU3dpdGNoIiwgMCwKKwkJICAgIHdtODkwNF9nZXRfZGVlbXBoLCB3bTg5MDRfcHV0X2RlZW1waCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTA0X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9UTFYoIkRpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004OTA0X0RBQ19ESUdJVEFMXzAsIDQsIDgsIDE1LCAwLAorCSAgICAgICBzaWRldG9uZV90bHYpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwNF9lcV9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkVRMSBWb2x1bWUiLCBXTTg5MDRfRVEyLCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTIgVm9sdW1lIiwgV004OTA0X0VRMywgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEzIFZvbHVtZSIsIFdNODkwNF9FUTQsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRNCBWb2x1bWUiLCBXTTg5MDRfRVE1LCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTUgVm9sdW1lIiwgV004OTA0X0VRNiwgMCwgMjQsIDAsIGVxX3RsdiksCit9OworCitzdGF0aWMgaW50IGNwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlCVUdfT04oZXZlbnQgIT0gU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKKworCS8qIE1heGltdW0gc3RhcnR1cCB0aW1lICovCisJdWRlbGF5KDUwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeXNjbGtfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJLyogSWYgd2UncmUgdXNpbmcgdGhlIEZMTCB0aGVuIHdlIG9ubHkgc3RhcnQgaXQgd2hlbgorCQkgKiByZXF1aXJlZDsgd2UgYXNzdW1lIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4KKwkJICogZG9uZSBwcmV2aW91c2x5IGFuZCBhbGwgd2UgbmVlZCB0byBkbyBpcyBraWNrIGl0CisJCSAqIG9mZi4KKwkJICovCisJCXN3aXRjaCAod204OTA0LT5zeXNjbGtfc3JjKSB7CisJCWNhc2UgV004OTA0X0NMS19GTEw6CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSwKKwkJCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSk7CisKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCQkgICAgV004OTA0X0ZMTF9FTkEsCisJCQkJCSAgICBXTTg5MDRfRkxMX0VOQSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSB8IFdNODkwNF9GTExfRU5BLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3V0X3BnYV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmVnLCB2YWw7CisJaW50IGRjc19tYXNrOworCWludCBkY3NfbCwgZGNzX3I7CisJaW50IGRjc19sX3JlZywgZGNzX3JfcmVnOworCWludCB0aW1lb3V0OworCWludCBwd3JfcmVnOworCisJLyogVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIEhQIGFuZCBMSU5FT1VUOyB3ZSBkbyBhbGwgb3VyCisJICogcG93ZXIgbWFuYWdlbWVudCBpbiBzdGVyZW8gcGFpcnMgdG8gYXZvaWQgbGF0ZW5jeSBpc3N1ZXMgc28KKwkgKiB3ZSByZXVzZSBzaGlmdCB0byBpZGVudGlmeSB3aGljaCByYXRoZXIgdGhhbiBzdHJjbXAoKSB0aGUKKwkgKiBuYW1lLiAqLworCXJlZyA9IHctPnNoaWZ0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODkwNF9BTkFMT0dVRV9IUF8wOgorCQlwd3JfcmVnID0gV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMjsKKwkJZGNzX21hc2sgPSBXTTg5MDRfRENTX0VOQV9DSEFOXzAgfCBXTTg5MDRfRENTX0VOQV9DSEFOXzE7CisJCWRjc19yX3JlZyA9IFdNODkwNF9EQ19TRVJWT184OworCQlkY3NfbF9yZWcgPSBXTTg5MDRfRENfU0VSVk9fOTsKKwkJZGNzX2wgPSAwOworCQlkY3NfciA9IDE7CisJCWJyZWFrOworCWNhc2UgV004OTA0X0FOQUxPR1VFX0xJTkVPVVRfMDoKKwkJcHdyX3JlZyA9IFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzM7CisJCWRjc19tYXNrID0gV004OTA0X0RDU19FTkFfQ0hBTl8yIHwgV004OTA0X0RDU19FTkFfQ0hBTl8zOworCQlkY3Nfcl9yZWcgPSBXTTg5MDRfRENfU0VSVk9fNjsKKwkJZGNzX2xfcmVnID0gV004OTA0X0RDX1NFUlZPXzc7CisJCWRjc19sID0gMjsKKwkJZGNzX3IgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCS8qIFBvd2VyIG9uIHRoZSBQR0FzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHB3cl9yZWcsCisJCQkJICAgIFdNODkwNF9IUExfUEdBX0VOQSB8IFdNODkwNF9IUFJfUEdBX0VOQSwKKwkJCQkgICAgV004OTA0X0hQTF9QR0FfRU5BIHwgV004OTA0X0hQUl9QR0FfRU5BKTsKKworCQkvKiBQb3dlciBvbiB0aGUgYW1wbGlmaWVyICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9FTkEgfCBXTTg5MDRfSFBSX0VOQSwKKwkJCQkgICAgV004OTA0X0hQTF9FTkEgfCBXTTg5MDRfSFBSX0VOQSk7CisKKworCQkvKiBFbmFibGUgdGhlIGZpcnN0IHN0YWdlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfRExZIHwgV004OTA0X0hQUl9FTkFfRExZLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9ETFkgfCBXTTg5MDRfSFBSX0VOQV9ETFkpOworCisJCS8qIFBvd2VyIHVwIHRoZSBEQyBzZXJ2byAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fMCwKKwkJCQkgICAgZGNzX21hc2ssIGRjc19tYXNrKTsKKworCQkvKiBFaXRoZXIgY2FsaWJyYXRlIHRoZSBEQyBzZXJ2byBvciByZXN0b3JlIGNhY2hlZCBzdGF0ZQorCQkgKiBpZiB3ZSBoYXZlIHRoYXQuCisJCSAqLworCQlpZiAod204OTA0LT5kY3Nfc3RhdGVbZGNzX2xdIHx8IHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19yXSkgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUmVzdG9yaW5nIERDIHNlcnZvIHN0YXRlXG4iKTsKKworCQkJc25kX3NvY193cml0ZShjb2RlYywgZGNzX2xfcmVnLAorCQkJCSAgICAgIHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19sXSk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBkY3Nfcl9yZWcsCisJCQkJICAgICAgd204OTA0LT5kY3Nfc3RhdGVbZGNzX3JdKTsKKworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X0RDX1NFUlZPXzEsIGRjc19tYXNrKTsKKworCQkJdGltZW91dCA9IDIwOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2FsaWJyYXRpbmcgREMgc2Vydm9cbiIpOworCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fMSwKKwkJCQlkY3NfbWFzayA8PCBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wX1NISUZUKTsKKworCQkJdGltZW91dCA9IDUwMDsKKwkJfQorCisJCS8qIFdhaXQgZm9yIERDIHNlcnZvIHRvIGNvbXBsZXRlICovCisJCWRjc19tYXNrIDw8PSBXTTg5MDRfRENTX0NBTF9DT01QTEVURV9TSElGVDsKKwkJZG8geworCQkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fUkVBREJBQ0tfMCk7CisJCQlpZiAoKHZhbCAmIGRjc19tYXNrKSA9PSBkY3NfbWFzaykKKwkJCQlicmVhazsKKworCQkJbXNsZWVwKDEpOworCQl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJCWlmICgodmFsICYgZGNzX21hc2spICE9IGRjc19tYXNrKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkRDIHNlcnZvIHRpbWVkIG91dFxuIik7CisJCWVsc2UKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIHJlYWR5XG4iKTsKKworCQkvKiBFbmFibGUgdGhlIG91dHB1dCBzdGFnZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BX09VVFAgfCBXTTg5MDRfSFBSX0VOQV9PVVRQLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9PVVRQIHwgV004OTA0X0hQUl9FTkFfT1VUUCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCS8qIFVuc2hvcnQgdGhlIG91dHB1dCBpdHNlbGYgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX1JNVl9TSE9SVCB8CisJCQkJICAgIFdNODkwNF9IUFJfUk1WX1NIT1JULAorCQkJCSAgICBXTTg5MDRfSFBMX1JNVl9TSE9SVCB8CisJCQkJICAgIFdNODkwNF9IUFJfUk1WX1NIT1JUKTsKKworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCS8qIFNob3J0IHRoZSBvdXRwdXQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX1JNVl9TSE9SVCB8CisJCQkJICAgIFdNODkwNF9IUFJfUk1WX1NIT1JULCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJLyogQ2FjaGUgdGhlIERDIHNlcnZvIGNvbmZpZ3VyYXRpb247IHRoaXMgd2lsbCBiZQorCQkgKiBpbnZhbGlkYXRlZCBpZiB3ZSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24uICovCisJCXdtODkwNC0+ZGNzX3N0YXRlW2Rjc19sXSA9IHNuZF9zb2NfcmVhZChjb2RlYywgZGNzX2xfcmVnKTsKKwkJd204OTA0LT5kY3Nfc3RhdGVbZGNzX3JdID0gc25kX3NvY19yZWFkKGNvZGVjLCBkY3Nfcl9yZWcpOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQ19TRVJWT18wLAorCQkJCSAgICBkY3NfbWFzaywgMCk7CisKKwkJLyogRGlzYWJsZSB0aGUgYW1wbGlmaWVyIGlucHV0IGFuZCBvdXRwdXQgc3RhZ2VzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9FTkEgfCBXTTg5MDRfSFBSX0VOQSB8CisJCQkJICAgIFdNODkwNF9IUExfRU5BX0RMWSB8IFdNODkwNF9IUFJfRU5BX0RMWSB8CisJCQkJICAgIFdNODkwNF9IUExfRU5BX09VVFAgfCBXTTg5MDRfSFBSX0VOQV9PVVRQLAorCQkJCSAgICAwKTsKKworCQkvKiBQR0FzIHRvbyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBwd3JfcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX1BHQV9FTkEgfCBXTTg5MDRfSFBSX1BHQV9FTkEsCisJCQkJICAgIDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxpbl90ZXh0W10gPSB7CisJIklOMUwiLCAiSU4yTCIsICJJTjNMIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsaW5fZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzEsIDIsIDMsIGxpbl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgQ2FwdHVyZSBNdXgiLCBsaW5fZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluX2ludl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMSwgNCwgMywgbGluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluX2ludl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgQ2FwdHVyZSBJbnZldGluZyBNdXgiLCBsaW5faW52X2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqcmluX3RleHRbXSA9IHsKKwkiSU4xUiIsICJJTjJSIiwgIklOM1IiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJpbl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzEsIDIsIDMsIHJpbl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpbl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IENhcHR1cmUgTXV4IiwgcmluX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJpbl9pbnZfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLCA0LCAzLCByaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByaW5faW52X211eCA9CisJU09DX0RBUE1fRU5VTSgiUmlnaHQgQ2FwdHVyZSBJbnZldGluZyBNdXgiLCByaW5faW52X2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmX3RleHRbXSA9IHsKKwkiTGVmdCIsICJSaWdodCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmb3V0bF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FVRElPX0lOVEVSRkFDRV8wLCA3LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWZvdXRsX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGT1VUTCBNdXgiLCBhaWZvdXRsX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZm91dHJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgNiwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmb3V0cl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRk9VVFIgTXV4IiwgYWlmb3V0cl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZpbmxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgNSwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmaW5sX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGSU5MIE11eCIsIGFpZmlubF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZpbnJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgNCwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmaW5yX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGSU5SIE11eCIsIGFpZmlucl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX1NVUFBMWSgiU1lTQ0xLIiwgV004OTA0X0NMT0NLX1JBVEVTXzIsIDIsIDAsIHN5c2Nsa19ldmVudCwKKwkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNMS19EU1AiLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJUT0NMSyIsIFdNODkwNF9DTE9DS19SQVRFU18yLCAwLCAwLCBOVUxMLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfYWRjX2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFMIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMVIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4yTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJSIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOM0wiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4zUiIpLAorCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQklBUyIsIFdNODkwNF9NSUNfQklBU19DT05UUk9MXzAsIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IENhcHR1cmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmbGluX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZsaW5faW52X211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBDYXB0dXJlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnJpbl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJnJpbl9pbnZfbXV4KSwKKworU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBDYXB0dXJlIFBHQSIsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzAsIDEsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlJpZ2h0IENhcHR1cmUgUEdBIiwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMCwgMCwgMCwKKwkJIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fQURDKCJBRENMIiwgTlVMTCwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfNiwgMSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJBRENSIiwgTlVMTCwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkFJRk9VVEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmb3V0bF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGT1VUUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZvdXRyX211eCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUZPVVRMIiwgIkNhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRk9VVFIiLCAiQ2FwdHVyZSIsIDEsIFNORF9TT0NfTk9QTSwgMCwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTA0X2RhY19kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRklOTCIsICJQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUZJTlIiLCAiUGxheWJhY2siLCAxLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJEQUNMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZmlubF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiREFDUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZpbnJfbXV4KSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDTCIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDMsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDUiIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJDaGFyZ2UgcHVtcCIsIFdNODkwNF9DSEFSR0VfUFVNUF8wLCAwLCAwLCBjcF9ldmVudCwKKwkJICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisKK1NORF9TT0NfREFQTV9QR0EoIkhQTCBQR0EiLCBTTkRfU09DX05PUE0sIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSFBSIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIkxJTkVMIFBHQSIsIFNORF9TT0NfTk9QTSwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMSU5FUiBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBPdXRwdXQiLCBTTkRfU09DX05PUE0sIFdNODkwNF9BTkFMT0dVRV9IUF8wLAorCQkgICAwLCBOVUxMLCAwLCBvdXRfcGdhX2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiTGluZSBPdXRwdXQiLCBTTkRfU09DX05PUE0sIFdNODkwNF9BTkFMT0dVRV9MSU5FT1VUXzAsCisJCSAgIDAsIE5VTEwsIDAsIG91dF9wZ2FfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVEwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUUiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTElORU9VVEwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxJTkVPVVRSIiksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqb3V0X211eF90ZXh0W10gPSB7CisJIkRBQyIsICJCeXBhc3MiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGhwbF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX09VVDEyX1pDLCAzLCAyLCBvdXRfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHBsX211eCA9CisJU09DX0RBUE1fRU5VTSgiSFBMIE11eCIsIGhwbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocHJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQywgMiwgMiwgb3V0X211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkhQUiBNdXgiLCBocHJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluZWxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQywgMSwgMiwgb3V0X211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmVsX211eCA9CisJU09DX0RBUE1fRU5VTSgiTElORUwgTXV4IiwgbGluZWxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluZXJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQywgMCwgMiwgb3V0X211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmVyX211eCA9CisJU09DX0RBUE1fRU5VTSgiTElORUwgTXV4IiwgbGluZXJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWRldG9uZV90ZXh0W10gPSB7CisJIk5vbmUiLCAiTGVmdCIsICJSaWdodCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjbF9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0RBQ19ESUdJVEFMXzAsIDIsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjbF9zaWRldG9uZV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgU2lkZXRvbmUgTXV4IiwgZGFjbF9zaWRldG9uZV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWNyX3NpZGV0b25lX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfREFDX0RJR0lUQUxfMCwgMCwgMywgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWNyX3NpZGV0b25lX211eCA9CisJU09DX0RBUE1fRU5VTSgiUmlnaHQgU2lkZXRvbmUgTXV4IiwgZGFjcl9zaWRldG9uZV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODkwNF9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNsYXNzIEciLCBXTTg5MDRfQ0xBU1NfV18wLCAwLCAxLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgQnlwYXNzIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlJpZ2h0IEJ5cGFzcyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkxlZnQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkYWNsX3NpZGV0b25lX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRhY3Jfc2lkZXRvbmVfbXV4KSwKKworU05EX1NPQ19EQVBNX01VWCgiSFBMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiSFBSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwcl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiTElORUwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmbGluZWxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkxJTkVSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxpbmVyX211eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBjb3JlX2ludGVyY29uW10gPSB7CisJeyAiQ0xLX0RTUCIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiVE9DTEsiLCBOVUxMLCAiU1lTQ0xLIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYWRjX2ludGVyY29uW10gPSB7CisJeyAiTGVmdCBDYXB0dXJlIE11eCIsICJJTjFMIiwgIklOMUwiIH0sCisJeyAiTGVmdCBDYXB0dXJlIE11eCIsICJJTjJMIiwgIklOMkwiIH0sCisJeyAiTGVmdCBDYXB0dXJlIE11eCIsICJJTjNMIiwgIklOM0wiIH0sCisKKwl7ICJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjFMIiwgIklOMUwiIH0sCisJeyAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4yTCIsICJJTjJMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOM0wiLCAiSU4zTCIgfSwKKworCXsgIlJpZ2h0IENhcHR1cmUgTXV4IiwgIklOMVIiLCAiSU4xUiIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIE11eCIsICJJTjJSIiwgIklOMlIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBNdXgiLCAiSU4zUiIsICJJTjNSIiB9LAorCisJeyAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMVIiLCAiSU4xUiIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4yUiIsICJJTjJSIiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjNSIiwgIklOM1IiIH0sCisKKwl7ICJMZWZ0IENhcHR1cmUgUEdBIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBNdXgiIH0sCisJeyAiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIgfSwKKworCXsgIlJpZ2h0IENhcHR1cmUgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgTXV4IiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIgfSwKKworCXsgIkFJRk9VVEwiLCAiTGVmdCIsICAiQURDTCIgfSwKKwl7ICJBSUZPVVRMIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiQUlGT1VUUiIsICJMZWZ0IiwgICJBRENMIiB9LAorCXsgIkFJRk9VVFIiLCAiUmlnaHQiLCAiQURDUiIgfSwKKworCXsgIkFEQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBQR0EiIH0sCisKKwl7ICJBRENSIiwgTlVMTCwgIkNMS19EU1AiIH0sCisJeyAiQURDUiIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFBHQSIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGRhY19pbnRlcmNvbltdID0geworCXsgIkRBQ0wiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAorCXsgIkRBQ0wiLCAiTGVmdCIsICAiQUlGSU5MIiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKworCXsgIkRBQ1IiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAorCXsgIkRBQ1IiLCAiTGVmdCIsICAiQUlGSU5MIiB9LAorCXsgIkRBQ1IiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKworCXsgIkNoYXJnZSBwdW1wIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIkhlYWRwaG9uZSBPdXRwdXQiLCBOVUxMLCAiSFBMIFBHQSIgfSwKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIkhQUiBQR0EiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJDaGFyZ2UgcHVtcCIgfSwKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIlRPQ0xLIiB9LAorCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiTElORUwgUEdBIiB9LAorCXsgIkxpbmUgT3V0cHV0IiwgTlVMTCwgIkxJTkVSIFBHQSIgfSwKKwl7ICJMaW5lIE91dHB1dCIsIE5VTEwsICJDaGFyZ2UgcHVtcCIgfSwKKwl7ICJMaW5lIE91dHB1dCIsIE5VTEwsICJUT0NMSyIgfSwKKworCXsgIkhQT1VUTCIsIE5VTEwsICJIZWFkcGhvbmUgT3V0cHV0IiB9LAorCXsgIkhQT1VUUiIsIE5VTEwsICJIZWFkcGhvbmUgT3V0cHV0IiB9LAorCisJeyAiTElORU9VVEwiLCBOVUxMLCAiTGluZSBPdXRwdXQiIH0sCisJeyAiTElORU9VVFIiLCBOVUxMLCAiTGluZSBPdXRwdXQiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5MDRfaW50ZXJjb25bXSA9IHsKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiREFDTCIsIE5VTEwsICJMZWZ0IFNpZGV0b25lIiB9LAorCQorCXsgIlJpZ2h0IFNpZGV0b25lIiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkRBQ1IiLCBOVUxMLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwl7ICJMZWZ0IEJ5cGFzcyIsIE5VTEwsICJDbGFzcyBHIiB9LAorCXsgIkxlZnQgQnlwYXNzIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBQR0EiIH0sCisKKwl7ICJSaWdodCBCeXBhc3MiLCBOVUxMLCAiQ2xhc3MgRyIgfSwKKwl7ICJSaWdodCBCeXBhc3MiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBQR0EiIH0sCisKKwl7ICJIUEwgTXV4IiwgIkRBQyIsICJEQUNMIiB9LAorCXsgIkhQTCBNdXgiLCAiQnlwYXNzIiwgIkxlZnQgQnlwYXNzIiB9LAorCisJeyAiSFBSIE11eCIsICJEQUMiLCAiREFDUiIgfSwKKwl7ICJIUFIgTXV4IiwgIkJ5cGFzcyIsICJSaWdodCBCeXBhc3MiIH0sCisKKwl7ICJMSU5FTCBNdXgiLCAiREFDIiwgIkRBQ0wiIH0sCisJeyAiTElORUwgTXV4IiwgIkJ5cGFzcyIsICJMZWZ0IEJ5cGFzcyIgfSwKKworCXsgIkxJTkVSIE11eCIsICJEQUMiLCAiREFDUiIgfSwKKwl7ICJMSU5FUiBNdXgiLCAiQnlwYXNzIiwgIlJpZ2h0IEJ5cGFzcyIgfSwKKworCXsgIkhQTCBQR0EiLCBOVUxMLCAiSFBMIE11eCIgfSwKKwl7ICJIUFIgUEdBIiwgTlVMTCwgIkhQUiBNdXgiIH0sCisKKwl7ICJMSU5FTCBQR0EiLCBOVUxMLCAiTElORUwgTXV4IiB9LAorCXsgIkxJTkVSIFBHQSIsIE5VTEwsICJMSU5FUiBNdXgiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5MTJfaW50ZXJjb25bXSA9IHsKKwl7ICJIUEwgUEdBIiwgTlVMTCwgIkRBQ0wiIH0sCisJeyAiSFBSIFBHQSIsIE5VTEwsICJEQUNSIiB9LAorCisJeyAiTElORUwgUEdBIiwgTlVMTCwgIkRBQ0wiIH0sCisJeyAiTElORVIgUEdBIiwgTlVMTCwgIkRBQ1IiIH0sCit9OworCitzdGF0aWMgaW50IHdtODkwNF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2NvcmVfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfY29yZV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgY29yZV9pbnRlcmNvbiwKKwkJCQlBUlJBWV9TSVpFKGNvcmVfaW50ZXJjb24pKTsKKworCXN3aXRjaCAod204OTA0LT5kZXZ0eXBlKSB7CisJY2FzZSBXTTg5MDQ6CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfYWRjX3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2FkY19zbmRfY29udHJvbHMpKTsKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYWNfc25kX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfZGFjX3NuZF9jb250cm9scykpOworCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTA0X3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X3NuZF9jb250cm9scykpOworCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9hZGNfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUod204OTA0X2FkY19kYXBtX3dpZGdldHMpKTsKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2RhY19kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cykpOworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUod204OTA0X2RhcG1fd2lkZ2V0cykpOworCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBjb3JlX2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKGNvcmVfaW50ZXJjb24pKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGFkY19pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShhZGNfaW50ZXJjb24pKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhY19pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShkYWNfaW50ZXJjb24pKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODkwNF9pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRSh3bTg5MDRfaW50ZXJjb24pKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkxMjoKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYWNfc25kX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfZGFjX3NuZF9jb250cm9scykpOworCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYWNfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUod204OTA0X2RhY19kYXBtX3dpZGdldHMpKTsKKworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZGFjX2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKGRhY19pbnRlcmNvbikpOworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgd204OTEyX2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKHdtODkxMl9pbnRlcmNvbikpOworCQlicmVhazsKKwl9CisKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgcmF0aW87CisJdW5zaWduZWQgaW50IGNsa19zeXNfcmF0ZTsKK30gY2xrX3N5c19yYXRlc1tdID0geworCXsgICA2NCwgIDAgfSwKKwl7ICAxMjgsICAxIH0sCisJeyAgMTkyLCAgMiB9LAorCXsgIDI1NiwgIDMgfSwKKwl7ICAzODQsICA0IH0sCisJeyAgNTEyLCAgNSB9LAorCXsgIDc4NiwgIDYgfSwKKwl7IDEwMjQsICA3IH0sCisJeyAxNDA4LCAgOCB9LAorCXsgMTUzNiwgIDkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCByYXRlOworCWludCBzYW1wbGVfcmF0ZTsKK30gc2FtcGxlX3JhdGVzW10gPSB7CisJeyA4MDAwLCAgMCAgfSwKKwl7IDExMDI1LCAxICB9LAorCXsgMTIwMDAsIDEgIH0sCisJeyAxNjAwMCwgMiAgfSwKKwl7IDIyMDUwLCAzICB9LAorCXsgMjQwMDAsIDMgIH0sCisJeyAzMjAwMCwgNCAgfSwKKwl7IDQ0MTAwLCA1ICB9LAorCXsgNDgwMDAsIDUgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgZGl2OyAvKiAqMTAgZHVlIHRvIC41cyAqLworCWludCBiY2xrX2RpdjsKK30gYmNsa19kaXZzW10gPSB7CisJeyAxMCwgIDAgIH0sCisJeyAxNSwgIDEgIH0sCisJeyAyMCwgIDIgIH0sCisJeyAzMCwgIDMgIH0sCisJeyA0MCwgIDQgIH0sCisJeyA1MCwgIDUgIH0sCisJeyA1NSwgIDYgIH0sCisJeyA2MCwgIDcgIH0sCisJeyA4MCwgIDggIH0sCisJeyAxMDAsIDkgIH0sCisJeyAxMTAsIDEwIH0sCisJeyAxMjAsIDExIH0sCisJeyAxNjAsIDEyIH0sCisJeyAyMDAsIDEzIH0sCisJeyAyMjAsIDE0IH0sCisJeyAyNDAsIDE2IH0sCisJeyAyMDAsIDE3IH0sCisJeyAzMjAsIDE4IH0sCisJeyA0NDAsIDE5IH0sCisJeyA0ODAsIDIwIH0sCit9OworCisKK3N0YXRpYyBpbnQgd204OTA0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0LCBpLCBiZXN0LCBiZXN0X3ZhbCwgY3VyX3ZhbDsKKwl1bnNpZ25lZCBpbnQgYWlmMSA9IDA7CisJdW5zaWduZWQgaW50IGFpZjIgPSAwOworCXVuc2lnbmVkIGludCBhaWYzID0gMDsKKwl1bnNpZ25lZCBpbnQgY2xvY2sxID0gMDsKKwl1bnNpZ25lZCBpbnQgZGFjX2RpZ2l0YWwxID0gMDsKKworCS8qIFdoYXQgQkNMSyBkbyB3ZSBuZWVkPyAqLworCXdtODkwNC0+ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWlmICh3bTg5MDQtPnRkbV9zbG90cykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDb25maWd1cmluZyBmb3IgJWQgJWQgYml0IFRETSBzbG90c1xuIiwKKwkJCXdtODkwNC0+dGRtX3Nsb3RzLCB3bTg5MDQtPnRkbV93aWR0aCk7CisJCXdtODkwNC0+YmNsayA9IHNuZF9zb2NfY2FsY19iY2xrKHdtODkwNC0+ZnMsCisJCQkJCQkgd204OTA0LT50ZG1fd2lkdGgsIDIsCisJCQkJCQkgd204OTA0LT50ZG1fc2xvdHMpOworCX0gZWxzZSB7CisJCXdtODkwNC0+YmNsayA9IHNuZF9zb2NfcGFyYW1zX3RvX2JjbGsocGFyYW1zKTsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlhaWYxIHw9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWFpZjEgfD0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYWlmMSB8PSAweGMwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCWRldl9kYmcoY29kZWMtPmRldiwgIlRhcmdldCBCQ0xLIGlzICVkSHpcbiIsIHdtODkwNC0+YmNsayk7CisKKwlyZXQgPSB3bTg5MDRfY29uZmlndXJlX2Nsb2NraW5nKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTZWxlY3QgbmVhcmVzdCBDTEtfU1lTX1JBVEUgKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IGFicygod204OTA0LT5zeXNjbGtfcmF0ZSAvIGNsa19zeXNfcmF0ZXNbMF0ucmF0aW8pCisJCSAgICAgICAtIHdtODkwNC0+ZnMpOworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGNsa19zeXNfcmF0ZXMpOyBpKyspIHsKKwkJY3VyX3ZhbCA9IGFicygod204OTA0LT5zeXNjbGtfcmF0ZSAvCisJCQkgICAgICAgY2xrX3N5c19yYXRlc1tpXS5yYXRpbykgLSB3bTg5MDQtPmZzKTs7CisJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBjdXJfdmFsOworCQl9CisJfQorCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIENMS19TWVNfUkFUSU8gb2YgJWRcbiIsCisJCWNsa19zeXNfcmF0ZXNbYmVzdF0ucmF0aW8pOworCWNsb2NrMSB8PSAoY2xrX3N5c19yYXRlc1tiZXN0XS5jbGtfc3lzX3JhdGUKKwkJICAgPDwgV004OTA0X0NMS19TWVNfUkFURV9TSElGVCk7CisKKwkvKiBTQU1QTEVfUkFURSAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gYWJzKHdtODkwNC0+ZnMgLSBzYW1wbGVfcmF0ZXNbMF0ucmF0ZSk7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoc2FtcGxlX3JhdGVzKTsgaSsrKSB7CisJCS8qIENsb3Nlc3QgbWF0Y2ggKi8KKwkJY3VyX3ZhbCA9IGFicyh3bTg5MDQtPmZzIC0gc2FtcGxlX3JhdGVzW2ldLnJhdGUpOworCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwkJfQorCX0KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBTQU1QTEVfUkFURSBvZiAlZEh6XG4iLAorCQlzYW1wbGVfcmF0ZXNbYmVzdF0ucmF0ZSk7CisJY2xvY2sxIHw9IChzYW1wbGVfcmF0ZXNbYmVzdF0uc2FtcGxlX3JhdGUKKwkJICAgPDwgV004OTA0X1NBTVBMRV9SQVRFX1NISUZUKTsKKworCS8qIEVuYWJsZSBzbG9waW5nIHN0b3BiYW5kIGZpbHRlciBmb3IgbG93IHNhbXBsZSByYXRlcyAqLworCWlmICh3bTg5MDQtPmZzIDw9IDI0MDAwKQorCQlkYWNfZGlnaXRhbDEgfD0gV004OTA0X0RBQ19TQl9GSUxUOworCisJLyogQkNMS19ESVYgKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNsa19kaXZzKTsgaSsrKSB7CisJCWN1cl92YWwgPSAoKHdtODkwNC0+c3lzY2xrX3JhdGUgKiAxMCkgLyBiY2xrX2RpdnNbaV0uZGl2KQorCQkJLSB3bTg5MDQtPmJjbGs7CisJCWlmIChjdXJfdmFsIDwgMCkgLyogVGFibGUgaXMgc29ydGVkICovCisJCQlicmVhazsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJd204OTA0LT5iY2xrID0gKHdtODkwNC0+c3lzY2xrX3JhdGUgKiAxMCkgLyBiY2xrX2RpdnNbYmVzdF0uZGl2OworCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIEJDTEtfRElWIG9mICVkIGZvciAlZEh6IEJDTEtcbiIsCisJCWJjbGtfZGl2c1tiZXN0XS5kaXYsIHdtODkwNC0+YmNsayk7CisJYWlmMiB8PSBiY2xrX2RpdnNbYmVzdF0uYmNsa19kaXY7CisKKwkvKiBMUkNMSyBpcyBhIHNpbXBsZSBmcmFjdGlvbiBvZiBCQ0xLICovCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTFJDTEtfUkFURSBpcyAlZFxuIiwgd204OTA0LT5iY2xrIC8gd204OTA0LT5mcyk7CisJYWlmMyB8PSB3bTg5MDQtPmJjbGsgLyB3bTg5MDQtPmZzOworCisJLyogQXBwbHkgdGhlIHNldHRpbmdzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RBQ19ESUdJVEFMXzEsCisJCQkgICAgV004OTA0X0RBQ19TQl9GSUxULCBkYWNfZGlnaXRhbDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMSwKKwkJCSAgICBXTTg5MDRfQUlGX1dMX01BU0ssIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMiwKKwkJCSAgICBXTTg5MDRfQkNMS19ESVZfTUFTSywgYWlmMik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8zLAorCQkJICAgIFdNODkwNF9MUkNMS19SQVRFX01BU0ssIGFpZjMpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18xLAorCQkJICAgIFdNODkwNF9TQU1QTEVfUkFURV9NQVNLIHwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19SQVRFX01BU0ssIGNsb2NrMSk7CisKKwkvKiBVcGRhdGUgZmlsdGVycyBmb3IgdGhlIG5ldyBzZXR0aW5ncyAqLworCXdtODkwNF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYyk7CisJd204OTA0X3NldF9kZWVtcGgoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5MDRfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGNsa19pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFdNODkwNF9DTEtfTUNMSzoKKwkJcHJpdi0+c3lzY2xrX3NyYyA9IGNsa19pZDsKKwkJcHJpdi0+bWNsa19yYXRlID0gZnJlcTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkwNF9DTEtfRkxMOgorCQlwcml2LT5zeXNjbGtfc3JjID0gY2xrX2lkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoZGFpLT5kZXYsICJDbG9jayBzb3VyY2UgaXMgJWQgYXQgJXVIelxuIiwgY2xrX2lkLCBmcmVxKTsKKworCXdtODkwNF9jb25maWd1cmVfY2xvY2tpbmcoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1bnNpZ25lZCBpbnQgYWlmMSA9IDA7CisJdW5zaWduZWQgaW50IGFpZjMgPSAwOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCQlhaWYzIHw9IFdNODkwNF9MUkNMS19ESVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJYWlmMSB8PSBXTTg5MDRfQkNMS19ESVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYWlmMSB8PSBXTTg5MDRfQkNMS19ESVI7CisJCWFpZjMgfD0gV004OTA0X0xSQ0xLX0RJUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZjEgfD0gV004OTA0X0FJRl9MUkNMS19JTlY7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYWlmMSB8PSAweDM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlhaWYxIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmMSB8PSAweDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQkJYWlmMSB8PSBXTTg5MDRfQUlGX0JDTEtfSU5WIHwgV004OTA0X0FJRl9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJYWlmMSB8PSBXTTg5MDRfQUlGX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8xLAorCQkJICAgIFdNODkwNF9BSUZfQkNMS19JTlYgfCBXTTg5MDRfQUlGX0xSQ0xLX0lOViB8CisJCQkgICAgV004OTA0X0FJRl9GTVRfTUFTSyB8IFdNODkwNF9CQ0xLX0RJUiwgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8zLAorCQkJICAgIFdNODkwNF9MUkNMS19ESVIsIGFpZjMpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5MDRfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgdHhfbWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcnhfbWFzaywgaW50IHNsb3RzLCBpbnQgc2xvdF93aWR0aCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgYWlmMSA9IDA7CisKKwkvKiBEb24ndCBuZWVkIHRvIHZhbGlkYXRlIGFueXRoaW5nIGlmIHdlJ3JlIHR1cm5pbmcgb2ZmIFRETSAqLworCWlmIChzbG90cyA9PSAwKQorCQlnb3RvIG91dDsKKworCS8qIE5vdGUgdGhhdCB3ZSBhbGxvdyBjb25maWd1cmF0aW9ucyB3ZSBjYW4ndCBoYW5kbGUgb3Vyc2VsdmVzIC0gCisJICogZm9yIGV4YW1wbGUsIHdlIGNhbiBnZW5lcmF0ZSBjbG9ja3MgZm9yIHNsb3RzIDIgYW5kIHVwIGV2ZW4gaWYKKwkgKiB3ZSBjYW4ndCB1c2UgdGhvc2Ugc2xvdHMgb3Vyc2VsdmVzLgorCSAqLworCWFpZjEgfD0gV004OTA0X0FJRkFEQ19URE0gfCBXTTg5MDRfQUlGREFDX1RETTsKKworCXN3aXRjaCAocnhfbWFzaykgeworCWNhc2UgMzoKKwkJYnJlYWs7CisJY2FzZSAweGM6CisJCWFpZjEgfD0gV004OTA0X0FJRkFEQ19URE1fQ0hBTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlzd2l0Y2ggKHR4X21hc2spIHsKKwljYXNlIDM6CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQlhaWYxIHw9IFdNODkwNF9BSUZEQUNfVERNX0NIQU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworb3V0OgorCXdtODkwNC0+dGRtX3dpZHRoID0gc2xvdF93aWR0aDsKKwl3bTg5MDQtPnRkbV9zbG90cyA9IHNsb3RzIC8gMjsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMSwKKwkJCSAgICBXTTg5MDRfQUlGQURDX1RETSB8IFdNODkwNF9BSUZBRENfVERNX0NIQU4gfAorCQkJICAgIFdNODkwNF9BSUZEQUNfVERNIHwgV004OTA0X0FJRkRBQ19URE1fQ0hBTiwgYWlmMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IF9mbGxfZGl2IHsKKwl1MTYgZmxsX2ZyYXRpbzsKKwl1MTYgZmxsX291dGRpdjsKKwl1MTYgZmxsX2Nsa19yZWZfZGl2OworCXUxNiBuOworCXUxNiBrOworfTsKKworLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgRkxMIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCisgKiB0byBhbGxvdyByb3VuZGluZyBsYXRlciAqLworI2RlZmluZSBGSVhFRF9GTExfU0laRSAoKDEgPDwgMTYpICogMTApCisKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBtaW47CisJdW5zaWduZWQgaW50IG1heDsKKwl1MTYgZmxsX2ZyYXRpbzsKKwlpbnQgcmF0aW87Cit9IGZsbF9mcmF0aW9zW10gPSB7CisJeyAgICAgICAwLCAgICA2NDAwMCwgNCwgMTYgfSwKKwl7ICAgNjQwMDAsICAgMTI4MDAwLCAzLCAgOCB9LAorCXsgIDEyODAwMCwgICAyNTYwMDAsIDIsICA0IH0sCisJeyAgMjU2MDAwLCAgMTAwMDAwMCwgMSwgIDIgfSwKKwl7IDEwMDAwMDAsIDEzNTAwMDAwLCAwLCAgMSB9LAorfTsKKworc3RhdGljIGludCBmbGxfZmFjdG9ycyhzdHJ1Y3QgX2ZsbF9kaXYgKmZsbF9kaXYsIHVuc2lnbmVkIGludCBGcmVmLAorCQkgICAgICAgdW5zaWduZWQgaW50IEZvdXQpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBOZGl2LCBObW9kLCB0YXJnZXQ7CisJdW5zaWduZWQgaW50IGRpdjsKKwlpbnQgaTsKKworCS8qIEZyZWYgbXVzdCBiZSA8PTEzLjVNSHogKi8KKwlkaXYgPSAxOworCWZsbF9kaXYtPmZsbF9jbGtfcmVmX2RpdiA9IDA7CisJd2hpbGUgKChGcmVmIC8gZGl2KSA+IDEzNTAwMDAwKSB7CisJCWRpdiAqPSAyOworCQlmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYrKzsKKworCQlpZiAoZGl2ID4gOCkgeworCQkJcHJfZXJyKCJDYW4ndCBzY2FsZSAlZE1IeiBpbnB1dCBkb3duIHRvIDw9MTMuNU1IelxuIiwKKwkJCSAgICAgICBGcmVmKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcHJfZGVidWcoIkZyZWY9JXUgRm91dD0ldVxuIiwgRnJlZiwgRm91dCk7CisKKwkvKiBBcHBseSB0aGUgZGl2aXNpb24gZm9yIG91ciByZW1haW5pbmcgY2FsY3VsYXRpb25zICovCisJRnJlZiAvPSBkaXY7CisKKwkvKiBGdmNvIHNob3VsZCBiZSA5MC0xMDBNSHo7IGRvbid0IGNoZWNrIHRoZSB1cHBlciBib3VuZCAqLworCWRpdiA9IDQ7CisJd2hpbGUgKEZvdXQgKiBkaXYgPCA5MDAwMDAwMCkgeworCQlkaXYrKzsKKwkJaWYgKGRpdiA+IDY0KSB7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9PVVRESVYgZm9yIEZvdXQ9JXVIelxuIiwKKwkJCSAgICAgICBGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRhcmdldCA9IEZvdXQgKiBkaXY7CisJZmxsX2Rpdi0+ZmxsX291dGRpdiA9IGRpdiAtIDE7CisKKwlwcl9kZWJ1ZygiRnZjbz0lZEh6XG4iLCB0YXJnZXQpOworCisJLyogRmluZCBhbiBhcHByb3ByYWl0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgeworCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKKwkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOworCQkJdGFyZ2V0IC89IGZsbF9mcmF0aW9zW2ldLnJhdGlvOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShmbGxfZnJhdGlvcykpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfRlJBVElPIGZvciBGcmVmPSV1SHpcbiIsIEZyZWYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gdGFyZ2V0IC8gRnJlZjsKKworCWZsbF9kaXYtPm4gPSBOZGl2OworCU5tb2QgPSB0YXJnZXQgJSBGcmVmOworCXByX2RlYnVnKCJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgRnJlZik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmbGxfZGl2LT5rID0gSyAvIDEwOworCisJcHJfZGVidWcoIk49JXggSz0leCBGTExfRlJBVElPPSV4IEZMTF9PVVRESVY9JXggRkxMX0NMS19SRUZfRElWPSV4XG4iLAorCQkgZmxsX2Rpdi0+biwgZmxsX2Rpdi0+aywKKwkJIGZsbF9kaXYtPmZsbF9mcmF0aW8sIGZsbF9kaXYtPmZsbF9vdXRkaXYsCisJCSBmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9mbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBmbGxfaWQsIGludCBzb3VyY2UsCisJCQkgIHVuc2lnbmVkIGludCBGcmVmLCB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgX2ZsbF9kaXYgZmxsX2RpdjsKKwlpbnQgcmV0LCB2YWw7CisJaW50IGNsb2NrMiwgZmxsMTsKKworCS8qIEFueSBjaGFuZ2U/ICovCisJaWYgKHNvdXJjZSA9PSB3bTg5MDQtPmZsbF9zcmMgJiYgRnJlZiA9PSB3bTg5MDQtPmZsbF9mcmVmICYmCisJICAgIEZvdXQgPT0gd204OTA0LT5mbGxfZm91dCkKKwkJcmV0dXJuIDA7CisKKwljbG9jazIgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yKTsKKworCWlmIChGb3V0ID09IDApIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGRpc2FibGVkXG4iKTsKKworCQl3bTg5MDQtPmZsbF9mcmVmID0gMDsKKwkJd204OTA0LT5mbGxfZm91dCA9IDA7CisKKwkJLyogR2F0ZSBTWVNDTEsgdG8gYXZvaWQgZ2xpdGNoZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkJICAgIFdNODkwNF9DTEtfU1lTX0VOQSwgMCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSB8IFdNODkwNF9GTExfRU5BLCAwKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgRkxMIElEICovCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFdNODkwNF9GTExfTUNMSzoKKwljYXNlIFdNODkwNF9GTExfTFJDTEs6CisJY2FzZSBXTTg5MDRfRkxMX0JDTEs6CisJCXJldCA9IGZsbF9mYWN0b3JzKCZmbGxfZGl2LCBGcmVmLCBGb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkwNF9GTExfRlJFRV9SVU5OSU5HOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyBmcmVlIHJ1bm5pbmcgRkxMXG4iKTsKKwkJLyogRm9yY2UgMTJNSHogYW5kIG91dHB1dC80IGZvciBub3cgKi8KKwkJRm91dCA9IDEyMDAwMDAwOworCQlGcmVmID0gMTIwMDAwMDA7CisKKwkJbWVtc2V0KCZmbGxfZGl2LCAwLCBzaXplb2YoZmxsX2RpdikpOworCQlmbGxfZGl2LmZsbF9vdXRkaXYgPSAzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gRkxMIElEICVkXG4iLCBmbGxfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTYXZlIGN1cnJlbnQgc3RhdGUgdGhlbiBkaXNhYmxlIHRoZSBGTEwgYW5kIFNZU0NMSyB0byBhdm9pZAorCSAqIG1pc2Nsb2NraW5nICovCisJZmxsMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJICAgIFdNODkwNF9DTEtfU1lTX0VOQSwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BIHwgV004OTA0X0ZMTF9FTkEsIDApOworCisJLyogVW5sb2NrIGZvcmNlZCBvc2NpbGF0b3IgY29udHJvbCB0byBzd2l0Y2ggaXQgb24vb2ZmICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NPTlRST0xfSU5URVJGQUNFX1RFU1RfMSwKKwkJCSAgICBXTTg5MDRfVVNFUl9LRVksIFdNODkwNF9VU0VSX0tFWSk7CisKKwlpZiAoZmxsX2lkID09IFdNODkwNF9GTExfRlJFRV9SVU5OSU5HKSB7CisJCXZhbCA9IFdNODkwNF9GTExfRlJDX05DTzsKKwl9IGVsc2UgeworCQl2YWwgPSAwOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfTkNPX1RFU1RfMSwgV004OTA0X0ZMTF9GUkNfTkNPLAorCQkJICAgIHZhbCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NPTlRST0xfSU5URVJGQUNFX1RFU1RfMSwKKwkJCSAgICBXTTg5MDRfVVNFUl9LRVksIDApOworCisJc3dpdGNoIChmbGxfaWQpIHsKKwljYXNlIFdNODkwNF9GTExfTUNMSzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzUsCisJCQkJICAgIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfTUFTSywgMCk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfRkxMX0xSQ0xLOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNSwKKwkJCQkgICAgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19NQVNLLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkwNF9GTExfQkNMSzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzUsCisJCQkJICAgIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfTUFTSywgMik7CisJCWJyZWFrOworCX0KKworCWlmIChmbGxfZGl2LmspCisJCXZhbCA9IFdNODkwNF9GTExfRlJBQ05fRU5BOworCWVsc2UKKwkJdmFsID0gMDsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MDRfRkxMX0ZSQUNOX0VOQSwgdmFsKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8yLAorCQkJICAgIFdNODkwNF9GTExfT1VURElWX01BU0sgfCBXTTg5MDRfRkxMX0ZSQVRJT19NQVNLLAorCQkJICAgIChmbGxfZGl2LmZsbF9vdXRkaXYgPDwgV004OTA0X0ZMTF9PVVRESVZfU0hJRlQpIHwKKwkJCSAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvIDw8IFdNODkwNF9GTExfRlJBVElPX1NISUZUKSk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMywgZmxsX2Rpdi5rKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF80LCBXTTg5MDRfRkxMX05fTUFTSywKKwkJCSAgICBmbGxfZGl2Lm4gPDwgV004OTA0X0ZMTF9OX1NISUZUKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJICAgIFdNODkwNF9GTExfQ0xLX1JFRl9ESVZfTUFTSywKKwkJCSAgICBmbGxfZGl2LmZsbF9jbGtfcmVmX2RpdiAKKwkJCSAgICA8PCBXTTg5MDRfRkxMX0NMS19SRUZfRElWX1NISUZUKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBjb25maWd1cmVkIGZvciAlZEh6LT4lZEh6XG4iLCBGcmVmLCBGb3V0KTsKKworCXdtODkwNC0+ZmxsX2ZyZWYgPSBGcmVmOworCXdtODkwNC0+ZmxsX2ZvdXQgPSBGb3V0OworCXdtODkwNC0+ZmxsX3NyYyA9IHNvdXJjZTsKKworCS8qIEVuYWJsZSB0aGUgRkxMIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjdGl2ZSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSwgZmxsMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkgICAgV004OTA0X0ZMTF9FTkEsIGZsbDEpOworCitvdXQ6CisJLyogUmVlbmFibGUgU1lTQ0xLIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjdGl2ZSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJICAgIFdNODkwNF9DTEtfU1lTX0VOQSwgY2xvY2syKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IHZhbDsKKworCWlmIChtdXRlKQorCQl2YWwgPSBXTTg5MDRfREFDX01VVEU7CisJZWxzZQorCQl2YWwgPSAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RBQ19ESUdJVEFMXzEsIFdNODkwNF9EQUNfTVVURSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfc3luY19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCisJaWYgKCFjb2RlYy0+Y2FjaGVfc3luYykKKwkJcmV0dXJuOworCisJY29kZWMtPmNhY2hlX29ubHkgPSAwOworCisJLyogU3luYyBiYWNrIGNhY2hlZCB2YWx1ZXMgaWYgdGhleSdyZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkgKiBoYXJkd2FyZSBkZWZhdWx0LgorCSAqLworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHdtODkwNC0+cmVnX2NhY2hlKTsgaSsrKSB7CisJCWlmICghd204OTA0X2FjY2Vzc1tpXS53cml0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh3bTg5MDQtPnJlZ19jYWNoZVtpXSA9PSB3bTg5MDRfcmVnW2ldKQorCQkJY29udGludWU7CisKKwkJc25kX3NvY193cml0ZShjb2RlYywgaSwgd204OTA0LT5yZWdfY2FjaGVbaV0pOworCX0KKworCWNvZGVjLT5jYWNoZV9zeW5jID0gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEIHJlc2lzdGFuY2UgMio1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSywKKwkJCQkgICAgMHgxIDw8IFdNODkwNF9WTUlEX1JFU19TSElGVCk7CisKKwkJLyogTm9ybWFsIGJpYXMgY3VycmVudCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQklBU19DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9JU0VMX01BU0ssIDIgPDwgV004OTA0X0lTRUxfU0hJRlQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5MDQtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXdtODkwNF9zeW5jX2NhY2hlKGNvZGVjKTsKKworCQkJLyogRW5hYmxlIGJpYXMgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9CSUFTX0NPTlRST0xfMCwKKwkJCQkJICAgIFdNODkwNF9CSUFTX0VOQSwgV004OTA0X0JJQVNfRU5BKTsKKworCQkJLyogRW5hYmxlIFZNSUQsIFZNSUQgYnVmZmVyaW5nLCAyKjVrIHJlc2lzdGFuY2UgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9WTUlEX0NPTlRST0xfMCwKKwkJCQkJICAgIFdNODkwNF9WTUlEX0VOQSB8CisJCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSywKKwkJCQkJICAgIFdNODkwNF9WTUlEX0VOQSB8CisJCQkJCSAgICAweDMgPDwgV004OTA0X1ZNSURfUkVTX1NISUZUKTsKKworCQkJLyogTGV0IFZNSUQgcmFtcCAqLworCQkJbXNsZWVwKDEpOworCQl9CisKKwkJLyogTWFpbnRhaW4gVk1JRCB3aXRoIDIqMjUwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfVk1JRF9DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9WTUlEX1JFU19NQVNLLAorCQkJCSAgICAweDIgPDwgV004OTA0X1ZNSURfUkVTX1NISUZUKTsKKworCQkvKiBCaWFzIGN1cnJlbnQgKjAuNSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQklBU19DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9JU0VMX01BU0ssIDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogVHVybiBvZmYgVk1JRCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfVk1JRF9DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9WTUlEX1JFU19NQVNLIHwgV004OTA0X1ZNSURfRU5BLCAwKTsKKworCQkvKiBTdG9wIGJpYXMgZ2VuZXJhdGlvbiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQklBU19DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9CSUFTX0VOQSwgMCk7CisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJCS8qIFBvc3QgMi42LjM0IHdlIHdpbGwgYmUgYWJsZSB0byBnZXQgYSBjYWxsYmFjayB3aGVuCisJCSAqIHRoZSByZWd1bGF0b3JzIGFyZSBkaXNhYmxlZCB3aGljaCB3ZSBjYW4gdXNlIGJ1dAorCQkgKiBmb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgdGhlIHBvd2VyIHdpbGwgYmUgY3V0IGlmCisJCSAqIHRoZSByZWd1bGF0b3IgQVBJIGlzIGluIHVzZS4KKwkJICovCisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKyNlbmRpZgorCisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTA0LT5zdXBwbGllcyk7CisJCWJyZWFrOworCX0KKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODkwNF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKKyNkZWZpbmUgV004OTA0X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5MDRfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2NsayA9IHdtODkwNF9zZXRfc3lzY2xrLAorCS5zZXRfZm10ID0gd204OTA0X3NldF9mbXQsCisJLnNldF90ZG1fc2xvdCA9IHdtODkwNF9zZXRfdGRtX3Nsb3QsCisJLnNldF9wbGwgPSB3bTg5MDRfc2V0X2ZsbCwKKwkuaHdfcGFyYW1zID0gd204OTA0X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204OTA0X2RpZ2l0YWxfbXV0ZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDRfZGFpID0geworCS5uYW1lID0gIldNODkwNCIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODkwNF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5MDRfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004OTA0X1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODkwNF9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZ3bTg5MDRfZGFpX29wcywKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg5MDRfZGFpKTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5MDRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTA0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg5MDRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTA0X3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5MDRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB3bTg5MDRfaGFuZGxlX3JldHVuZV9tb2JpbGVfcGRhdGEoc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODkwNC0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2wgPQorCQlTT0NfRU5VTV9FWFQoIkVRIE1vZGUiLAorCQkJICAgICB3bTg5MDQtPnJldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTA0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODkwNF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKTsKKwlpbnQgcmV0LCBpLCBqOworCWNvbnN0IGNoYXIgKip0OworCisJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJIGJ1dCB0aGUgbnVtYmVyCisJICogb2YgdGV4dHMgaXMgbGlrZWx5IHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogY29uZmlndXJhdGlvbnMgZHVlIHRvIHRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRlbmN5IG9mIHRoZQorCSAqIGNvbmZpZ3VyYXRpb25zLiAqLworCXdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgPSAwOworCXdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7IGorKykgeworCQkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkJICAgd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzW2pdKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogIT0gd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4cGFuZCB0aGUgYXJyYXkuLi4gKi8KKwkJdCA9IGtyZWFsbG9jKHdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0cywKKwkJCSAgICAgc2l6ZW9mKGNoYXIgKikgKiAKKwkJCSAgICAgKHdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgKyAxKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICh0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiAuLi5zdG9yZSB0aGUgbmV3IGVudHJ5Li4uICovCisJCXRbd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0c10gPSAKKwkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZTsKKworCQkvKiAuLi5hbmQgcmVtZW1iZXIgdGhlIG5ldyB2ZXJzaW9uLiAqLworCQl3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKys7CisJCXdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IHQ7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQWxsb2NhdGVkICVkIHVuaXF1ZSBSZVR1bmUgTW9iaWxlIG5hbWVzXG4iLAorCQl3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKTsKKworCXdtODkwNC0+cmV0dW5lX21vYmlsZV9lbnVtLm1heCA9IHdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJd204OTA0LT5yZXR1bmVfbW9iaWxlX2VudW0udGV4dHMgPSB3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHM7CisKKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgJmNvbnRyb2wsIDEpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycih3bTg5MDQtPmNvZGVjLmRldiwKKwkJCSJGYWlsZWQgdG8gYWRkIFJlVHVuZSBNb2JpbGUgY29udHJvbDogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF9oYW5kbGVfcGRhdGEoc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODkwNC0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCByZXQsIGk7CisKKwlpZiAoIXBkYXRhKSB7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5MDQtPmNvZGVjLCB3bTg5MDRfZXFfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9lcV9jb250cm9scykpOworCQlyZXR1cm47CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJWQgRFJDIGNvbmZpZ3VyYXRpb25zXG4iLCBwZGF0YS0+bnVtX2RyY19jZmdzKTsKKworCWlmIChwZGF0YS0+bnVtX2RyY19jZmdzKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2wgPQorCQkJU09DX0VOVU1fRVhUKCJEUkMgTW9kZSIsIHdtODkwNC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5MDRfZ2V0X2RyY19lbnVtLCB3bTg5MDRfcHV0X2RyY19lbnVtKTsKKworCQkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgKi8KKwkJd204OTA0LT5kcmNfdGV4dHMgPSBrbWFsbG9jKHNpemVvZihjaGFyICopCisJCQkJCSAgICAqIHBkYXRhLT5udW1fZHJjX2NmZ3MsIEdGUF9LRVJORUwpOworCQlpZiAoIXdtODkwNC0+ZHJjX3RleHRzKSB7CisJCQlkZXZfZXJyKHdtODkwNC0+Y29kZWMuZGV2LAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgRFJDIGNvbmZpZyB0ZXh0c1xuIiwKKwkJCQlwZGF0YS0+bnVtX2RyY19jZmdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2RyY19jZmdzOyBpKyspCisJCQl3bTg5MDQtPmRyY190ZXh0c1tpXSA9IHBkYXRhLT5kcmNfY2Znc1tpXS5uYW1lOworCisJCXdtODkwNC0+ZHJjX2VudW0ubWF4ID0gcGRhdGEtPm51bV9kcmNfY2ZnczsKKwkJd204OTA0LT5kcmNfZW51bS50ZXh0cyA9IHdtODkwNC0+ZHJjX3RleHRzOworCisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5MDQtPmNvZGVjLCAmY29udHJvbCwgMSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIod204OTA0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhZGQgRFJDIG1vZGUgY29udHJvbDogJWRcbiIsIHJldCk7CisKKwkJd204OTA0X3NldF9kcmMoY29kZWMpOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbnNcbiIsCisJCXBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKTsKKworCWlmIChwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJd204OTA0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHdtODkwNCk7CisJZWxzZQorCQlzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgd204OTA0X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfZXFfY29udHJvbHMpKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5MDRfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTA0X2NvZGVjOworCWNvZGVjID0gd204OTA0X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXdtODkwNF9oYW5kbGVfcGRhdGEoY29kZWMtPnByaXZhdGVfZGF0YSk7CisKKwl3bTg5MDRfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0dXJuIHJldDsKKworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODkwNF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODkwNCA9IHsKKwkucHJvYmUgPSAJd204OTA0X3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTA0X3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg5MDRfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTA0X3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODkwNCk7CisKK3N0YXRpYyBpbnQgd204OTA0X3JlZ2lzdGVyKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0LAorCQkJICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODkwNC0+Y29kZWM7CisJaW50IGk7CisKKwlpZiAod204OTA0X2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004OTA0IGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODkwNDsKKwljb2RlYy0+bmFtZSA9ICJXTTg5MDQiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5MDRfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5MDRfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5MDRfTUFYX1JFR0lTVEVSOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTA0LT5yZWdfY2FjaGU7CisJY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyID0gd204OTA0X3ZvbGF0aWxlX3JlZ2lzdGVyOworCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisKKwlzd2l0Y2ggKHdtODkwNC0+ZGV2dHlwZSkgeworCWNhc2UgV004OTA0OgorCQlicmVhazsKKwljYXNlIFdNODkxMjoKKwkJbWVtc2V0KCZ3bTg5MDRfZGFpLmNhcHR1cmUsIDAsIHNpemVvZih3bTg5MDRfZGFpLmNhcHR1cmUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5rbm93biBkZXZpY2UgdHlwZSAlZFxuIiwKKwkJCXdtODkwNC0+ZGV2dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5MDRfcmVnLCBzaXplb2Yod204OTA0X3JlZykpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDE2LCBjb250cm9sKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg5MDQtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODkwNF9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwKKwkJCQkgd204OTA0LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJICAgIHdtODkwNC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X1NXX1JFU0VUX0FORF9JRCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgSUQgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCWlmIChyZXQgIT0gd204OTA0X3JlZ1tXTTg5MDRfU1dfUkVTRVRfQU5EX0lEXSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJEZXZpY2UgaXMgbm90IGEgV004OTA0LCBJRCBpcyAleFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X1JFVklTSU9OKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBkZXZpY2UgcmV2aXNpb246ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwlkZXZfaW5mbyhjb2RlYy0+ZGV2LCAicmV2aXNpb24gJWNcbiIsIHJldCArICdBJyk7CisKKwlyZXQgPSB3bTg5MDRfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwl3bTg5MDRfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwkvKiBDaGFuZ2Ugc29tZSBkZWZhdWx0IHNldHRpbmdzIC0gbGF0Y2ggVlUgYW5kIGVuYWJsZSBaQyAqLworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVF0gfD0gV004OTA0X0FEQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hUXSB8PSBXTTg5MDRfQURDX1ZVOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfTEVGVF0gfD0gV004OTA0X0RBQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hUXSB8PSBXTTg5MDRfREFDX1ZVOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlRdIHw9IFdNODkwNF9IUE9VVF9WVSB8CisJCVdNODkwNF9IUE9VVExaQzsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVF0gfD0gV004OTA0X0hQT1VUX1ZVIHwKKwkJV004OTA0X0hQT1VUUlpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlRdIHw9IFdNODkwNF9MSU5FT1VUX1ZVIHwKKwkJV004OTA0X0xJTkVPVVRMWkM7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FOQUxPR1VFX09VVDJfUklHSFRdIHw9IFdNODkwNF9MSU5FT1VUX1ZVIHwKKwkJV004OTA0X0xJTkVPVVRSWkM7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0NMT0NLX1JBVEVTXzBdICY9IH5XTTg5MDRfU1JfTU9ERTsKKworCS8qIFNldCBDbGFzcyBXIGJ5IGRlZmF1bHQgLSB0aGlzIHdpbGwgYmUgbWFuYWdlZCBieSB0aGUgQ2xhc3MKKwkgKiBHIHdpZGdldCBhdCBydW50aW1lIHdoZXJlIGJ5cGFzcyBwYXRocyBhcmUgYXZhaWxhYmxlLgorCSAqLworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9DTEFTU19XXzBdIHw9IFdNODkwNF9DUF9EWU5fUFdSOworCisJLyogVXNlIG5vcm1hbCBiaWFzIHNvdXJjZSAqLworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9CSUFTX0NPTlRST0xfMF0gJj0gfldNODkwNF9QT0JDVFJMOworCisJd204OTA0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBCaWFzIGxldmVsIGNvbmZpZ3VyYXRpb24gd2lsbCBoYXZlIGRvbmUgYW4gZXh0cmEgZW5hYmxlICovCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKKworCXdtODkwNF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODkwNF9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksIHdtODkwNC0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksIHdtODkwNC0+c3VwcGxpZXMpOworZXJyOgorCWtmcmVlKHdtODkwNCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204OTA0X3VucmVnaXN0ZXIoc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQpCit7CisJd204OTA0X3NldF9iaWFzX2xldmVsKCZ3bTg5MDQtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksIHdtODkwNC0+c3VwcGxpZXMpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODkwNF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTA0LT5jb2RlYyk7CisJa2ZyZWUod204OTA0KTsKKwl3bTg5MDRfY29kZWMgPSBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTA0X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwl3bTg5MDQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTA0X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204OTA0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204OTA0LT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwl3bTg5MDQtPmRldnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5MDQpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisJd204OTA0LT5wZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODkwNF9yZWdpc3Rlcih3bTg5MDQsIFNORF9TT0NfSTJDKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTA0X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODkwNF91bnJlZ2lzdGVyKHdtODkwNCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5MDRfaTJjX2lkW10gPSB7CisJeyAid204OTA0IiwgV004OTA0IH0sCisJeyAid204OTEyIiwgV004OTEyIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODkwNF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTA0X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiV004OTA0IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg5MDRfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODkwNF9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg5MDRfaTJjX2lkLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB3bTg5MDRfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5MDRfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODkwNCBJMkMgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh3bTg5MDRfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5MDRfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204OTA0X2kyY19kcml2ZXIpOworI2VuZGlmCit9Cittb2R1bGVfZXhpdCh3bTg5MDRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5MDQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODg4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5oCkBAIC0wLDAgKzEsMTY4MSBAQAorLyoKKyAqIHdtODkwNC5oICAtLSAgV004OTA0IEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLCBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTA0X0gKKyNkZWZpbmUgX1dNODkwNF9ICisKKyNkZWZpbmUgV004OTA0X0NMS19NQ0xLIDEKKyNkZWZpbmUgV004OTA0X0NMS19GTEwgIDIKKworI2RlZmluZSBXTTg5MDRfRkxMX01DTEsgICAgICAgICAgMQorI2RlZmluZSBXTTg5MDRfRkxMX0JDTEsgICAgICAgICAgMgorI2RlZmluZSBXTTg5MDRfRkxMX0xSQ0xLICAgICAgICAgMworI2RlZmluZSBXTTg5MDRfRkxMX0ZSRUVfUlVOTklORyAgNAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODkwNF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTA0OworCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODkwNF9TV19SRVNFVF9BTkRfSUQgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFdNODkwNF9SRVZJU0lPTgkJCQkweDAxCisjZGVmaW5lIFdNODkwNF9CSUFTX0NPTlRST0xfMCAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODkwNF9WTUlEX0NPTlRST0xfMCAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODkwNF9NSUNfQklBU19DT05UUk9MXzAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODkwNF9NSUNfQklBU19DT05UUk9MXzEgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9EQUNfMCAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODkwNF9NSUNfRklMVEVSX0NPTlRST0wgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9BRENfMCAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzAgICAgICAgICAgICAgICAweDBDCisjZGVmaW5lIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzIgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzMgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIFdNODkwNF9DTE9DS19SQVRFU18wICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFdNODkwNF9DTE9DS19SQVRFU18xICAgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFdNODkwNF9DTE9DS19SQVRFU18yICAgICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMSAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMiAgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMyAgICAgICAgICAgICAgICAweDFCCisjZGVmaW5lIFdNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCAgICAgICAgICAweDFFCisjZGVmaW5lIFdNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfUklHSFQgICAgICAgICAweDFGCisjZGVmaW5lIFdNODkwNF9EQUNfRElHSVRBTF8wICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFdNODkwNF9EQUNfRElHSVRBTF8xICAgICAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVCAgICAgICAgICAweDI0CisjZGVmaW5lIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfUklHSFQgICAgICAgICAweDI1CisjZGVmaW5lIFdNODkwNF9BRENfRElHSVRBTF8wICAgICAgICAgICAgICAgICAgICAweDI2CisjZGVmaW5lIFdNODkwNF9ESUdJVEFMX01JQ1JPUEhPTkVfMCAgICAgICAgICAgICAweDI3CisjZGVmaW5lIFdNODkwNF9EUkNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODkwNF9EUkNfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODkwNF9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJBCisjZGVmaW5lIFdNODkwNF9EUkNfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJCCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzAgICAgICAgICAgICAweDJDCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8wICAgICAgICAgICAweDJECisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzEgICAgICAgICAgICAweDJFCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xICAgICAgICAgICAweDJGCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlQgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hUICAgICAgICAgICAgICAweDNBCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQgICAgICAgICAgICAgICAweDNCCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hUICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQyAgICAgICAgICAgICAgICAweDNECisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT18wICAgICAgICAgICAgICAgICAgICAgICAweDQzCisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT18xICAgICAgICAgICAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT18yICAgICAgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT180ICAgICAgICAgICAgICAgICAgICAgICAweDQ3CisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT181ICAgICAgICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT182ICAgICAgICAgICAgICAgICAgICAgICAweDQ5CisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT183ICAgICAgICAgICAgICAgICAgICAgICAweDRBCisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT184ICAgICAgICAgICAgICAgICAgICAgICAweDRCCisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT185ICAgICAgICAgICAgICAgICAgICAgICAweDRDCisjZGVmaW5lIFdNODkwNF9EQ19TRVJWT19SRUFEQkFDS18wICAgICAgICAgICAgICAweDRECisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9IUF8wICAgICAgICAgICAgICAgICAgICAweDVBCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9MSU5FT1VUXzAgICAgICAgICAgICAgICAweDVFCisjZGVmaW5lIFdNODkwNF9DSEFSR0VfUFVNUF8wICAgICAgICAgICAgICAgICAgICAweDYyCisjZGVmaW5lIFdNODkwNF9DTEFTU19XXzAgICAgICAgICAgICAgICAgICAgICAgICAweDY4CisjZGVmaW5lIFdNODkwNF9XUklURV9TRVFVRU5DRVJfMCAgICAgICAgICAgICAgICAweDZDCisjZGVmaW5lIFdNODkwNF9XUklURV9TRVFVRU5DRVJfMSAgICAgICAgICAgICAgICAweDZECisjZGVmaW5lIFdNODkwNF9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDZFCisjZGVmaW5lIFdNODkwNF9XUklURV9TRVFVRU5DRVJfMyAgICAgICAgICAgICAgICAweDZGCisjZGVmaW5lIFdNODkwNF9XUklURV9TRVFVRU5DRVJfNCAgICAgICAgICAgICAgICAweDcwCisjZGVmaW5lIFdNODkwNF9GTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDc0CisjZGVmaW5lIFdNODkwNF9GTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDc1CisjZGVmaW5lIFdNODkwNF9GTExfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDc2CisjZGVmaW5lIFdNODkwNF9GTExfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgICAweDc3CisjZGVmaW5lIFdNODkwNF9GTExfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgICAweDc4CisjZGVmaW5lIFdNODkwNF9HUElPX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDc5CisjZGVmaW5lIFdNODkwNF9HUElPX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDdBCisjZGVmaW5lIFdNODkwNF9HUElPX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAweDdCCisjZGVmaW5lIFdNODkwNF9HUElPX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAweDdDCisjZGVmaW5lIFdNODkwNF9ESUdJVEFMX1BVTExTICAgICAgICAgICAgICAgICAgICAweDdFCisjZGVmaW5lIFdNODkwNF9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAweDdGCisjZGVmaW5lIFdNODkwNF9JTlRFUlJVUFRfU1RBVFVTX01BU0sgICAgICAgICAgICAweDgwCisjZGVmaW5lIFdNODkwNF9JTlRFUlJVUFRfUE9MQVJJVFkgICAgICAgICAgICAgICAweDgxCisjZGVmaW5lIFdNODkwNF9JTlRFUlJVUFRfREVCT1VOQ0UgICAgICAgICAgICAgICAweDgyCisjZGVmaW5lIFdNODkwNF9FUTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg2CisjZGVmaW5lIFdNODkwNF9FUTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3CisjZGVmaW5lIFdNODkwNF9FUTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4CisjZGVmaW5lIFdNODkwNF9FUTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5CisjZGVmaW5lIFdNODkwNF9FUTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBCisjZGVmaW5lIFdNODkwNF9FUTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCCisjZGVmaW5lIFdNODkwNF9FUTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDCisjZGVmaW5lIFdNODkwNF9FUTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhECisjZGVmaW5lIFdNODkwNF9FUTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFCisjZGVmaW5lIFdNODkwNF9FUTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGCisjZGVmaW5lIFdNODkwNF9FUTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwCisjZGVmaW5lIFdNODkwNF9FUTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxCisjZGVmaW5lIFdNODkwNF9FUTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyCisjZGVmaW5lIFdNODkwNF9FUTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzCisjZGVmaW5lIFdNODkwNF9FUTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk0CisjZGVmaW5lIFdNODkwNF9FUTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk1CisjZGVmaW5lIFdNODkwNF9FUTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk2CisjZGVmaW5lIFdNODkwNF9FUTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk3CisjZGVmaW5lIFdNODkwNF9FUTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk4CisjZGVmaW5lIFdNODkwNF9FUTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5CisjZGVmaW5lIFdNODkwNF9FUTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlBCisjZGVmaW5lIFdNODkwNF9FUTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlCCisjZGVmaW5lIFdNODkwNF9FUTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlDCisjZGVmaW5lIFdNODkwNF9FUTI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlECisjZGVmaW5lIFdNODkwNF9DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEgICAgICAgICAweEExCisjZGVmaW5lIFdNODkwNF9BTkFMT0dVRV9PVVRQVVRfQklBU18wICAgICAgICAgICAweENDCisjZGVmaW5lIFdNODkwNF9GTExfTkNPX1RFU1RfMCAgICAgICAgICAgICAgICAgICAweEY3CisjZGVmaW5lIFdNODkwNF9GTExfTkNPX1RFU1RfMSAgICAgICAgICAgICAgICAgICAweEY4CisKKyNkZWZpbmUgV004OTA0X1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDEwMQorI2RlZmluZSBXTTg5MDRfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHhGOAorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIFNXIFJlc2V0IGFuZCBJRAorICovCisjZGVmaW5lIFdNODkwNF9TV19SU1RfREVWX0lEMV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIFNXX1JTVF9ERVZfSUQxIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9TV19SU1RfREVWX0lEMV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIFNXX1JTVF9ERVZfSUQxIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9TV19SU1RfREVWX0lEMV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIFNXX1JTVF9ERVZfSUQxIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBSZXZpc2lvbgorICovCisjZGVmaW5lIFdNODkwNF9SRVZJU0lPTl9NQVNLICAgICAgICAgICAgICAJMHgwMDBGICAvKiBSRVZJU0lPTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9SRVZJU0lPTl9TSElGVCAgICAgICAgICAgICAJICAgICAwICAvKiBSRVZJU0lPTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9SRVZJU0lPTl9XSURUSCAgICAgICAgICAgICAJICAgIDE2ICAvKiBSRVZJU0lPTiAtIFszOjBdICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBCaWFzIENvbnRyb2wgMAorICovCisjZGVmaW5lIFdNODkwNF9QT0JDVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTA0X1BPQkNUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9QT0JDVFJMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTA0X0lTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogSVNFTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9JU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElTRUwgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfSVNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBJU0VMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X1NUQVJUVVBfQklBU19FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfU1RBUlRVUF9CSUFTX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1NUQVJUVVBfQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQklBU19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQklBU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCSUFTX0VOQSAqLworCisvKgorICogUjUgKDB4MDUpIC0gVk1JRCBDb250cm9sIDAKKyAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9CVUZfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0JVRl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9CVUZfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfUkVTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogVk1JRF9SRVMgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9SRVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWTUlEX1JFUyAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9WTUlEX1JFU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURfUkVTIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVk1JRF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9FTkEgKi8KKworLyoKKyAqIFI2ICgweDA2KSAtIE1pYyBCaWFzIENvbnRyb2wgMAorICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNTSE9SVF9USFJfTUFTSyAgICAgICAgICAgICAgICAweDAwMEMgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9NSUNTSE9SVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9NSUNTSE9SVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RFVF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDREVUX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RFVF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQklBU19FTkEgKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIE1pYyBCaWFzIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0ZJTFRFUl9FTkEgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1JQ19ERVRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BX01BU0sgICAgICAgICAgMHg4MDAwICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRklMVEVSX0VOQV9TSElGVCAgICAgICAgICAgICAxNSAgLyogTUlDX0RFVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0ZJTFRFUl9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JQ19ERVRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX0ZJTFRFUl9FTkEgICAgICAgICAgICAgMHg0MDAwICAvKiBNSUNfU0hPUlRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX0ZJTFRFUl9FTkFfTUFTSyAgICAgICAgMHg0MDAwICAvKiBNSUNfU0hPUlRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX0ZJTFRFUl9FTkFfU0hJRlQgICAgICAgICAgIDE0ICAvKiBNSUNfU0hPUlRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX0ZJTFRFUl9FTkFfV0lEVEggICAgICAgICAgICAxICAvKiBNSUNfU0hPUlRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19TRUxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBNSUNCSUFTX1NFTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0JJQVNfU0VMIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDQklBU19TRUwgLSBbMjowXSAqLworCisvKgorICogUjggKDB4MDgpIC0gQW5hbG9ndWUgREFDIDAKKyAqLworI2RlZmluZSBXTTg5MDRfREFDX0JJQVNfU0VMX01BU0sgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBEQUNfQklBU19TRUwgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfREFDX0JJQVNfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNfQklBU19TRUwgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfREFDX0JJQVNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfQklBU19TRUwgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZNSURfQklBU19TRUxfTUFTSyAgICAgICAgICAgMHgwMDA2ICAvKiBEQUNfVk1JRF9CSUFTX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9EQUNfVk1JRF9CSUFTX1NFTF9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERBQ19WTUlEX0JJQVNfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WTUlEX0JJQVNfU0VMX1dJRFRIICAgICAgICAgICAgICAgMiAgLyogREFDX1ZNSURfQklBU19TRUwgLSBbMjoxXSAqLworCisvKgorICogUjkgKDB4MDkpIC0gbWljIEZpbHRlciBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfU0VUX1RIUkVTSE9MRF9NQVNLICAgICAgIDB4RjAwMCAgLyogTUlDX0RFVF9TRVRfVEhSRVNIT0xEIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9TRVRfVEhSRVNIT0xEX1NISUZUICAgICAgICAgIDEyICAvKiBNSUNfREVUX1NFVF9USFJFU0hPTEQgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1NFVF9USFJFU0hPTERfV0lEVEggICAgICAgICAgIDQgIC8qIE1JQ19ERVRfU0VUX1RIUkVTSE9MRCAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfUkVTRVRfVEhSRVNIT0xEX01BU0sgICAgIDB4MEYwMCAgLyogTUlDX0RFVF9SRVNFVF9USFJFU0hPTEQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfUkVTRVRfVEhSRVNIT0xEX1NISUZUICAgICAgICAgOCAgLyogTUlDX0RFVF9SRVNFVF9USFJFU0hPTEQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfUkVTRVRfVEhSRVNIT0xEX1dJRFRIICAgICAgICAgNCAgLyogTUlDX0RFVF9SRVNFVF9USFJFU0hPTEQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9TRVRfVEhSRVNIT0xEX01BU0sgICAgIDB4MDBGMCAgLyogTUlDX1NIT1JUX1NFVF9USFJFU0hPTEQgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1NFVF9USFJFU0hPTERfU0hJRlQgICAgICAgICA0ICAvKiBNSUNfU0hPUlRfU0VUX1RIUkVTSE9MRCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfU0VUX1RIUkVTSE9MRF9XSURUSCAgICAgICAgIDQgIC8qIE1JQ19TSE9SVF9TRVRfVEhSRVNIT0xEIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9SRVNFVF9USFJFU0hPTERfTUFTSyAgIDB4MDAwRiAgLyogTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEX1NISUZUICAgICAgIDAgIC8qIE1JQ19TSE9SVF9SRVNFVF9USFJFU0hPTEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRF9XSURUSCAgICAgICA0ICAvKiBNSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMCAoMHgwQSkgLSBBbmFsb2d1ZSBBREMgMAorICovCisjZGVmaW5lIFdNODkwNF9BRENfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0FEQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9BRENfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19PU1IxMjggKi8KKworLyoKKyAqIFIxMiAoMHgwQykgLSBQb3dlciBNYW5hZ2VtZW50IDAKKyAqLworI2RlZmluZSBXTTg5MDRfSU5MX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOUl9FTkEgKi8KKworLyoKKyAqIFIxNCAoMHgwRSkgLSBQb3dlciBNYW5hZ2VtZW50IDIKKyAqLworI2RlZmluZSBXTTg5MDRfSFBMX1BHQV9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX1BHQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX1BHQV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1BHQV9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1BHQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1BHQV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfUEdBX0VOQSAqLworCisvKgorICogUjE1ICgweDBGKSAtIFBvd2VyIE1hbmFnZW1lbnQgMworICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9QR0FfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1BHQV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1BHQV9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUEdBX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1BHQV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfUEdBX0VOQSAqLworCisvKgorICogUjE4ICgweDEyKSAtIFBvd2VyIE1hbmFnZW1lbnQgNgorICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODkwNF9BRENSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfRU5BICovCisKKy8qCisgKiBSMjAgKDB4MTQpIC0gQ2xvY2sgUmF0ZXMgMAorICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX0RJVjE2ICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRPQ0xLX1JBVEVfRElWMTYgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfRElWMTZfTUFTSyAgICAgICAgICAgIDB4NDAwMCAgLyogVE9DTEtfUkFURV9ESVYxNiAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNl9TSElGVCAgICAgICAgICAgICAgIDE0ICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX0RJVjE2X1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX1JBVEVfRElWMTYgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfWDQgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVE9DTEtfUkFURV9YNCAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9YNF9NQVNLICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUT0NMS19SQVRFX1g0ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0X1NISUZUICAgICAgICAgICAgICAgICAgMTMgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfWDRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfUkFURV9YNCAqLworI2RlZmluZSBXTTg5MDRfU1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODkwNF9TUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfU1JfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfRElWICovCisKKy8qCisgKiBSMjEgKDB4MTUpIC0gQ2xvY2sgUmF0ZXMgMQorICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDNDMDAgIC8qIENMS19TWVNfUkFURSAtIFsxMzoxMF0gKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogQ0xLX1NZU19SQVRFIC0gWzEzOjEwXSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBDTEtfU1lTX1JBVEUgLSBbMTM6MTBdICovCisjZGVmaW5lIFdNODkwNF9TQU1QTEVfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIFNBTVBMRV9SQVRFIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X1NBTVBMRV9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU0FNUExFX1JBVEUgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfU0FNUExFX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBTQU1QTEVfUkFURSAtIFsyOjBdICovCisKKy8qCisgKiBSMjIgKDB4MTYpIC0gQ2xvY2sgUmF0ZXMgMgorICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9TWVNDTEtfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTA0X1NZU0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9TWVNDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQ0xLX1NZU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQ0xLX1NZU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogQ0xLX1NZU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0xLX1NZU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19EU1BfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQ0xLX0RTUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19EU1BfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQ0xLX0RTUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19EU1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0xLX0RTUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NMS19EU1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0xLX0RTUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfRU5BICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gQXVkaW8gSW50ZXJmYWNlIDAKKyAqLworI2RlZmluZSBXTTg5MDRfREFDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDTF9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDTF9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDTF9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDUl9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDUl9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDUl9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfREFDX0JPT1NUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNjAwICAvKiBEQUNfQk9PU1QgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDX0JPT1NUIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkwNF9EQUNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19CT09TVCAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MDRfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg5MDRfTE9PUEJBQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg5MDRfTE9PUEJBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg5MDRfTE9PUEJBQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBRENfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBRENfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBRENfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX0NPTVBNT0RFICovCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gQXVkaW8gSW50ZXJmYWNlIDEKKyAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX01BU0sgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX01BU0sgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgICAxMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGX1RSSVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg5MDRfQUlGX1RSSVNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg5MDRfQUlGX1RSSVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg5MDRfQUlGX1RSSVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg5MDRfQUlGX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBBSUZfV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBSUZfRk1UIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BSUZfRk1UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRl9GTVQgLSBbMTowXSAqLworCisvKgorICogUjI2ICgweDFBKSAtIEF1ZGlvIEludGVyZmFjZSAyCisgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogT1BDTEtfRElWIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9PUENMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE9QQ0xLX0RJViAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBPUENMS19ESVYgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogQkNMS19ESVYgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQ0xLX0RJViAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEJDTEtfRElWIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBBdWRpbyBJbnRlcmZhY2UgMworICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19ESVIgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBMUkNMS19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExSQ0xLX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxMSAgLyogTFJDTEtfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjMwICgweDFFKSAtIERBQyBEaWdpdGFsIFZvbHVtZSBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMzEgKDB4MUYpIC0gREFDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0CisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMzIgKDB4MjApIC0gREFDIERpZ2l0YWwgMAorICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDBGMDAgIC8qIEFEQ0xfREFDX1NWT0wgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFDX1NWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQUNfU1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX0RBQ19TVk9MIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRjAgIC8qIEFEQ1JfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENSX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDUl9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisKKy8qCisgKiBSMzMgKDB4MjEpIC0gREFDIERpZ2l0YWwgMQorICovCisjZGVmaW5lIFdNODkwNF9EQUNfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODkwNF9EQUNfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODkwNF9EQUNfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODkwNF9EQUNfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODkwNF9EQUNfU0JfRklMVCAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODkwNF9EQUNfU0JfRklMVF9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODkwNF9EQUNfU0JfRklMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODkwNF9EQUNfU0JfRklMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MDRfREFDX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgICAgIDkgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MDRfREFDX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfREFDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg5MDRfREVFTVBIX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfREVFTVBIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfREVFTVBIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBERUVNUEggLSBbMjoxXSAqLworCisvKgorICogUjM2ICgweDI0KSAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMzcgKDB4MjUpIC0gQURDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0CisgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMzggKDB4MjYpIC0gQURDIERpZ2l0YWwgMAorICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9EQVRJTlYgKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBEaWdpdGFsIE1pY3JvcGhvbmUgMAorICovCisjZGVmaW5lIFdNODkwNF9ETUlDX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERNSUNfRU5BICovCisjZGVmaW5lIFdNODkwNF9ETUlDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERNSUNfRU5BICovCisjZGVmaW5lIFdNODkwNF9ETUlDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERNSUNfRU5BICovCisjZGVmaW5lIFdNODkwNF9ETUlDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNfRU5BICovCisjZGVmaW5lIFdNODkwNF9ETUlDX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERNSUNfU1JDICovCisjZGVmaW5lIFdNODkwNF9ETUlDX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERNSUNfU1JDICovCisjZGVmaW5lIFdNODkwNF9ETUlDX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERNSUNfU1JDICovCisjZGVmaW5lIFdNODkwNF9ETUlDX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNfU1JDICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gRFJDIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRFJDX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfREFDX1BBVEggICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQUNfUEFUSF9TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODkwNF9EUkNfREFDX1BBVEhfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTFZMX01BU0sgICAgICAgICAgICAgMHgxODAwICAvKiBEUkNfR1NfSFlTVF9MVkwgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgMTEgIC8qIERSQ19HU19IWVNUX0xWTCAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRFJDX0dTX0hZU1RfTFZMIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1NUQVJUVVBfR0FJTl9NQVNLICAgICAgICAgICAgMHgwN0MwICAvKiBEUkNfU1RBUlRVUF9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfU1RBUlRVUF9HQUlOX1NISUZUICAgICAgICAgICAgICAgIDYgIC8qIERSQ19TVEFSVFVQX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19TVEFSVFVQX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFJDX1NUQVJUVVBfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0ZGX0RFTEFZICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWV9NQVNLICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfRkZfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgIDUgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0ZGX0RFTEFZX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFJDX0dTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEUkNfR1NfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0dTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEUkNfUVIgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19RUiAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfUVIgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BTlRJQ0xJUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BTlRJQ0xJUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERSQ19HU19IWVNUICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERSQ19HU19IWVNUICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19HU19IWVNUICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19HU19IWVNUICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gRFJDIDEKKyAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FUS19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGMDAwICAvKiBEUkNfQVRLIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEUkNfQVRLIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEUkNfQVRLIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RDWV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBEUkNfRENZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERSQ19EQ1kgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFJDX0RDWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBEUkNfUVJfVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogRFJDX1FSX1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19RUl9USFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX0RDWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBEUkNfUVJfRENZIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFJDX1FSX0RDWSAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19RUl9EQ1kgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBEUkNfTUlOR0FJTiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NSU5HQUlOIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX01JTkdBSU4gLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX01BWEdBSU4gLSBbMTowXSAqLworCisvKgorICogUjQyICgweDJBKSAtIERSQyAyCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19ISV9DT01QX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzOCAgLyogRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0hJX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODkwNF9EUkNfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19MT19DT01QX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0xPX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERSQ19MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MyAoMHgyQikgLSBEUkMgMworICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9JUF9NQVNLICAgICAgICAgICAgICAgICAweDA3RTAgIC8qIERSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIERSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9PUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIERSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSNDQgKDB4MkMpIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0xJTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElOTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElOX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMSU5fVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTElOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5fVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExJTl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjQ1ICgweDJEKSAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDAKKyAqLworI2RlZmluZSBXTTg5MDRfUklOTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9SSU5NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9SSU5fVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIFJJTl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfUklOX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSSU5fVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JJTl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUklOX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSNDYgKDB4MkUpIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9DTV9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5MX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0NNX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTkxfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9DTV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBMX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTF9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfUF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBMX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTF9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBMX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfTF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfTF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX01PREUgLSBbMTowXSAqLworCisvKgorICogUjQ3ICgweDJGKSAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDEKKyAqLworI2RlZmluZSBXTTg5MDRfSU5SX0NNX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTlJfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfQ01fRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOUl9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0NNX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTlJfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9OX01BU0sgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIFJfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogUl9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9QX01BU0sgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIFJfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogUl9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9SX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFJfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9SX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9SX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfTU9ERSAtIFsxOjBdICovCisKKy8qCisgKiBSNTcgKDB4MzkpIC0gQW5hbG9ndWUgT1VUMSBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTFpDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTFpDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTFpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogSFBPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI1OCAoMHgzQSkgLSBBbmFsb2d1ZSBPVVQxIFJpZ2h0CisgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUlpDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUlpDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUlpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogSFBPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVFJfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI1OSAoMHgzQikgLSBBbmFsb2d1ZSBPVVQyIExlZnQKKyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfTVVURSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9NVVRFX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIExJTkVPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExaQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBMSU5FT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUTF9WT0wgLSBbNTowXSAqLworCisvKgorICogUjYwICgweDNDKSAtIEFuYWxvZ3VlIE9VVDIgUmlnaHQKKyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfTVVURSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9NVVRFX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIExJTkVPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJaQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBMSU5FT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUUl9WT0wgLSBbNTowXSAqLworCisvKgorICogUjYxICgweDNEKSAtIEFuYWxvZ3VlIE9VVDEyIFpDCisgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9CWVBfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9CWVBfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9CWVBfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogSFBMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9CWVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9CWVBfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9CWVBfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9CWVBfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9CWVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0JZUF9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfQllQX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0JZUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfQllQX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9CWVBfRU5BX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9CWVBfRU5BICovCisKKy8qCisgKiBSNjcgKDB4NDMpIC0gREMgU2Vydm8gMAorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fM19NQVNLICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fM19TSElGVCAgICAgICAgICAgICAgICAgIDMgIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fM19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMiAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMl9NQVNLICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMl9TSElGVCAgICAgICAgICAgICAgICAgIDIgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMSAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMV9NQVNLICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMV9TSElGVCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMCAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMF9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMF9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfRU5BX0NIQU5fMF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisKKy8qCisgKiBSNjggKDB4NDQpIC0gREMgU2Vydm8gMQorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfM19NQVNLICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfM19TSElGVCAgICAgICAgICAgICAgMTUgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMiAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMl9NQVNLICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMl9TSElGVCAgICAgICAgICAgICAgMTQgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMSAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMV9NQVNLICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMV9TSElGVCAgICAgICAgICAgICAgMTMgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMCAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMF9NQVNLICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMF9TSElGVCAgICAgICAgICAgICAgMTIgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TSU5HTEVfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMyAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfM19NQVNLICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfM19TSElGVCAgICAgICAgICAgICAgMTEgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMiAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMl9NQVNLICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMl9TSElGVCAgICAgICAgICAgICAgMTAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMSAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMV9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMV9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TRVJJRVNfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzMgICAgICAgICAgICAgICAweDAwODAgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfM19TSElGVCAgICAgICAgICAgICAgNyAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzNfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8yICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMl9NQVNLICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzJfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8yX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMSAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzFfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMV9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzMgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzNfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzNfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzIgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzJfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzJfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzEgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzFfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzBfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzBfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworCisvKgorICogUjY5ICgweDQ1KSAtIERDIFNlcnZvIDIKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8yM19NQVNLICAgICAgICAgMHgwRjAwICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzIzX1NISUZUICAgICAgICAgICAgIDggIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMjNfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLICAgICAgICAgMHgwMDBGICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMDFfU0hJRlQgICAgICAgICAgICAgMCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzAxX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworCisvKgorICogUjcxICgweDQ3KSAtIERDIFNlcnZvIDQKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18yM19NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMjNfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX1NFUklFU19OT18yMyAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzIzX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbNjowXSAqLworCisvKgorICogUjcyICgweDQ4KSAtIERDIFNlcnZvIDUKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18wMV9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMDFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzAxX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworCisvKgorICogUjczICgweDQ5KSAtIERDIFNlcnZvIDYKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfM19NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzNfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8zX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbNzowXSAqLworCisvKgorICogUjc0ICgweDRBKSAtIERDIFNlcnZvIDcKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMl9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8yX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworCisvKgorICogUjc1ICgweDRCKSAtIERDIFNlcnZvIDgKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMV9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8xX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbNzowXSAqLworCisvKgorICogUjc2ICgweDRDKSAtIERDIFNlcnZvIDkKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMF9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzBfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8wX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworCisvKgorICogUjc3ICgweDREKSAtIERDIFNlcnZvIFJlYWRiYWNrIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0NBTF9DT01QTEVURV9NQVNLICAgICAgICAgICAgMHgwRjAwICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfQ0FMX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19DQUxfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgICAgNCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9DT01QTEVURV9NQVNLICAgICAgICAgMHgwMEYwICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NUQVJUVVBfQ09NUExFVEVfTUFTSyAgICAgICAgMHgwMDBGICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU1RBUlRVUF9DT01QTEVURV9TSElGVCAgICAgICAgICAgIDAgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TVEFSVFVQX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgNCAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworCisvKgorICogUjkwICgweDVBKSAtIEFuYWxvZ3VlIEhQIDAKKyAqLworI2RlZmluZSBXTTg5MDRfSFBMX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUExfUk1WX1NIT1JUX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBIUExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfUk1WX1NIT1JUICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAzICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkEgKi8KKworLyoKKyAqIFI5NCAoMHg1RSkgLSBBbmFsb2d1ZSBMaW5lb3V0IDAKKyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUk1WX1NIT1JUICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIExJTkVPVVRMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9PVVRQICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9PVVRQX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9PVVRQX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTElORU9VVExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9ETFkgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX0RMWV9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVPVVRMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1JNVl9TSE9SVCAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTElORU9VVFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAweDAwMDggIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAzICAvKiBMSU5FT1VUUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfT1VUUCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExJTkVPVVRSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfT1VUUF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIExJTkVPVVRSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIExJTkVPVVRSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfT1VUUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfRExZICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9ETFlfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfRU5BICovCisKKy8qCisgKiBSOTggKDB4NjIpIC0gQ2hhcmdlIFB1bXAgMAorICovCisjZGVmaW5lIFdNODkwNF9DUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0VOQSAqLworCisvKgorICogUjEwNCAoMHg2OCkgLSBDbGFzcyBXIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQ1BfRFlOX1BXUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODkwNF9DUF9EWU5fUFdSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5MDRfQ1BfRFlOX1BXUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9EWU5fUFdSICovCisKKy8qCisgKiBSMTA4ICgweDZDKSAtIFdyaXRlIFNlcXVlbmNlciAwCisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfV1JJVEVfSU5ERVhfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1dSSVRFX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9XUklURV9JTkRFWF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDkgKDB4NkQpIC0gV3JpdGUgU2VxdWVuY2VyIDEKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIX01BU0sgICAgICAgICAgICAgMHg3MDAwICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfV0lEVEhfU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIFdTRVFfREFUQV9XSURUSCAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9XSURUSF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogV1NFUV9EQVRBX1dJRFRIIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NUQVJUX01BU0sgICAgICAgICAgICAgMHgwRjAwICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9TVEFSVF9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9EQVRBX1NUQVJUIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgIDQgIC8qIFdTRVFfREFUQV9TVEFSVCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBXU0VRX0FERFIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BRERSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0FERFIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BRERSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0FERFIgLSBbNzowXSAqLworCisvKgorICogUjExMCAoMHg2RSkgLSBXcml0ZSBTZXF1ZW5jZXIgMgorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VPUyAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VPU19NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VPU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIFdTRVFfREVMQVkgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9ERUxBWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9ERUxBWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RFTEFZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisKKy8qCisgKiBSMTExICgweDZGKSAtIFdyaXRlIFNlcXVlbmNlciAzCisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BQk9SVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUJPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX0lOREVYX01BU0sgICAgICAgICAgICAweDAwM0YgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgICAgNiAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisKKy8qCisgKiBSMTEyICgweDcwKSAtIFdyaXRlIFNlcXVlbmNlciA0CisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQ1VSUkVOVF9JTkRFWF9NQVNLICAgICAgICAgIDB4MDNGMCAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzk6NF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQ1VSUkVOVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgNCAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzk6NF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQ1VSUkVOVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgNiAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzk6NF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQlVTWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9CVVNZICovCisKKy8qCisgKiBSMTE2ICgweDc0KSAtIEZMTCBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQUNOX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfRlJBQ05fRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBQ05fRU5BX01BU0sgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9GUkFDTl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQUNOX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJBQ05fRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfT1NDX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfT1NDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfT1NDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfT1NDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9FTkEgKi8KKworLyoKKyAqIFIxMTcgKDB4NzUpIC0gRkxMIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODkwNF9GTExfT1VURElWX01BU0sgICAgICAgICAgICAgICAgICAweDNGMDAgIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ1RSTF9SQVRFX01BU0sgICAgICAgICAgICAgICAweDAwNzAgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DVFJMX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisKKy8qCisgKiBSMTE4ICgweDc2KSAtIEZMTCBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfSyAtIFsxNTowXSAqLworCisvKgorICogUjExOSAoMHg3NykgLSBGTEwgQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZFMCAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjAgKDB4NzgpIC0gRkxMIENvbnRyb2wgNQorICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9ESVZfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIEZMTF9DTEtfUkVGX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9ESVZfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9DTEtfUkVGX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9ESVZfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9DTEtfUkVGX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIEZMTF9DTEtfUkVGX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9DTEtfUkVGX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9DTEtfUkVGX1NSQyAtIFsxOjBdICovCisKKy8qCisgKiBSMTIxICgweDc5KSAtIEdQSU8gQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjIgKDB4N0EpIC0gR1BJTyBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPMl9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPMl9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMl9TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyMyAoMHg3QikgLSBHUElPIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8zX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8zX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8zX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8zX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8zX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8zX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPM19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPM19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU8zX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPM19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU8zX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPM19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8zX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMTI0ICgweDdDKSAtIEdQSU8gQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1BJOF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1BJOF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1BJOF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19NT0RFX0VOQSAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJT19CQ0xLX01PREVfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkFfTUFTSyAgICAgICAgICAweDAwODAgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX01PREVfRU5BX1NISUZUICAgICAgICAgICAgICA3ICAvKiBHUElPX0JDTEtfTU9ERV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19NT0RFX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogR1BJT19CQ0xLX01PREVfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfU0VMX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU9fQkNMS19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPX0JDTEtfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogR1BJT19CQ0xLX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMTI2ICgweDdFKSAtIERpZ2l0YWwgUHVsbHMKKyAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUEQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMUkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMUkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMUkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMUkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMUkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfUEQgKi8KKworLyoKKyAqIFIxMjcgKDB4N0YpIC0gSW50ZXJydXB0IFN0YXR1cworICovCisjZGVmaW5lIFdNODkwNF9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5MDRfSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0lSUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogSVJRICovCisjZGVmaW5lIFdNODkwNF9JUlFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElSUSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBHUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBHUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDX0RFVF9FSU5UICovCisKKy8qCisgKiBSMTI4ICgweDgwKSAtIEludGVycnVwdCBTdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPX0JDTEtfRUlOVCAgICAgICAgICAgICAgICAweDAyMDAgIC8qIElNX0dQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPX0JDTEtfRUlOVF9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIElNX0dQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPX0JDTEtfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIElNX0dQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPX0JDTEtfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9XU0VRX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX1dTRVFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9XU0VRX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzNfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9HUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPM19FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIElNX0dQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMl9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX0dQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8yX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8xX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzFfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8xX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJOF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk4X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJOF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSTdfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJN19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSTdfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9GTExfTE9DS19FSU5UICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0ZMTF9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9GTExfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19TSFJUX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX1NIUlRfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9NSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19TSFJUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX0RFVF9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9NSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIElNX01JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNfREVUX0VJTlQgKi8KKworLyoKKyAqIFIxMjkgKDB4ODEpIC0gSW50ZXJydXB0IFBvbGFyaXR5CisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1BPTCAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0xfTUFTSyAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICA5ICAvKiBHUElPX0JDTEtfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogR1BJT19CQ0xLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfUE9MICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfUE9MICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzNfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfUE9MICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogR1BJTzJfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfUE9MICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1BPTCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1BPTF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1BPTCAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1BPTF9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfUE9MICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19ERVRfRUlOVF9QT0wgKi8KKworLyoKKyAqIFIxMzAgKDB4ODIpIC0gSW50ZXJydXB0IERlYm91bmNlCisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX0RCICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX0RCX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgOSAgLyogR1BJT19CQ0xLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogR1BJT19CQ0xLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX0RCICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfREIgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfREIgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJOF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfREIgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9EQl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9EQiAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX0RCX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfREIgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogTUlDX0RFVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19ERVRfRUlOVF9EQiAqLworCisvKgorICogUjEzNCAoMHg4NikgLSBFUTEKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBFUV9FTkEgKi8KKworLyoKKyAqIFIxMzUgKDB4ODcpIC0gRVEyCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjFfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CMV9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzYgKDB4ODgpIC0gRVEzCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjJfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CMl9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzcgKDB4ODkpIC0gRVE0CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjNfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CM19HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzggKDB4OEEpIC0gRVE1CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjRfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CNF9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzkgKDB4OEIpIC0gRVE2CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjVfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CNV9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNDAgKDB4OEMpIC0gRVE3CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDEgKDB4OEQpIC0gRVE4CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIgKDB4OEUpIC0gRVE5CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDMgKDB4OEYpIC0gRVExMAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ0ICgweDkwKSAtIEVRMTEKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0NSAoMHg5MSkgLSBFUTEyCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0NfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDYgKDB4OTIpIC0gRVExMworICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ3ICgweDkzKSAtIEVRMTQKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0OCAoMHg5NCkgLSBFUTE1CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDkgKDB4OTUpIC0gRVExNgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19DX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUwICgweDk2KSAtIEVRMTcKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjE1MSAoMHg5NykgLSBFUTE4CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTIgKDB4OTgpIC0gRVExOQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUzICgweDk5KSAtIEVRMjAKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjE1NCAoMHg5QSkgLSBFUTIxCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTUgKDB4OUIpIC0gRVEyMgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTU2ICgweDlDKSAtIEVRMjMKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjE1NyAoMHg5RCkgLSBFUTI0CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNjEgKDB4QTEpIC0gQ29udHJvbCBJbnRlcmZhY2UgVGVzdCAxCisgKi8KKyNkZWZpbmUgV004OTA0X1VTRVJfS0VZICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogVVNFUl9LRVkgKi8KKyNkZWZpbmUgV004OTA0X1VTRVJfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogVVNFUl9LRVkgKi8KKyNkZWZpbmUgV004OTA0X1VTRVJfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVNFUl9LRVkgKi8KKyNkZWZpbmUgV004OTA0X1VTRVJfS0VZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVNFUl9LRVkgKi8KKworLyoKKyAqIFIyMDQgKDB4Q0MpIC0gQW5hbG9ndWUgT3V0cHV0IEJpYXMgMAorICovCisjZGVmaW5lIFdNODkwNF9QR0FfQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIFBHQV9CSUFTIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X1BHQV9CSUFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUEdBX0JJQVMgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfUEdBX0JJQVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBQR0FfQklBUyAtIFs2OjRdICovCisKKy8qCisgKiBSMjQ3ICgweEY3KSAtIEZMTCBOQ08gVGVzdCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0ZSQ19OQ08gKi8KKworLyoKKyAqIFIyNDggKDB4RjgpIC0gRkxMIE5DTyBUZXN0IDEKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fVkFMX01BU0sgICAgICAgICAgICAgMHgwMDNGICAvKiBGTExfRlJDX05DT19WQUwgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBGTExfRlJDX05DT19WQUwgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fVkFMX1dJRFRIICAgICAgICAgICAgICAgICA2ICAvKiBGTExfRlJDX05DT19WQUwgLSBbNTowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWRhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCkBAIC0wLDAgKzEsMTE1MSBAQAorLyoKKyAqIHdtODk1NS5jICAtLSAgV004OTU1IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3dtODk1NS5oPgorCisjaW5jbHVkZSAid204OTU1LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTU1X2NvZGVjOworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTU1OworCisjZGVmaW5lIFdNODk1NV9OVU1fU1VQUExJRVMgNAorc3RhdGljIGNvbnN0IGNoYXIgKndtODk1NV9zdXBwbHlfbmFtZXNbV004OTU1X05VTV9TVVBQTElFU10gPSB7CisJIkRDVkREIiwKKwkiREJWREQiLAorCSJIUFZERCIsCisJIkFWREQiLAorfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204OTU1X3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004OTU1X01BWF9SRUdJU1RFUiArIDFdOworCisJdW5zaWduZWQgaW50IG1jbGtfcmF0ZTsKKworCWludCBkZWVtcGg7CisJaW50IGZzOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbV004OTU1X05VTV9TVVBQTElFU107CisKKwlzdHJ1Y3Qgd204OTU1X3BkYXRhICpwZGF0YTsKK307CisKK3N0YXRpYyBjb25zdCB1MTYgd204OTU1X3JlZ1tXTTg5NTVfTUFYX1JFR0lTVEVSICsgMV0gPSB7CisJMHgwMDAwLCAgICAgLyogUjAgKi8KKwkweDAwMDAsICAgICAvKiBSMSAqLworCTB4MDA3OSwgICAgIC8qIFIyICAtIExPVVQxIHZvbHVtZSAqLworCTB4MDA3OSwgICAgIC8qIFIzICAtIFJPVVQxIHZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI0ICovCisJMHgwMDA4LCAgICAgLyogUjUgIC0gREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNiAqLworCTB4MDAwQSwgICAgIC8qIFI3ICAtIEF1ZGlvIEludGVyZmFjZSAqLworCTB4MDAwMCwgICAgIC8qIFI4ICAtIFNhbXBsZSBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjkgKi8KKwkweDAwRkYsICAgICAvKiBSMTAgLSBMZWZ0IERBQyB2b2x1bWUgKi8KKwkweDAwRkYsICAgICAvKiBSMTEgLSBSaWdodCBEQUMgdm9sdW1lICovCisJMHgwMDBGLCAgICAgLyogUjEyIC0gQmFzcyBjb250cm9sICovCisJMHgwMDBGLCAgICAgLyogUjEzIC0gVHJlYmxlIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTUgLSBSZXNldCAqLworCTB4MDAwMCwgICAgIC8qIFIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxOCAqLworCTB4MDAwMCwgICAgIC8qIFIxOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMiAqLworCTB4MDBDMSwgICAgIC8qIFIyMyAtIEFkZGl0aW9uYWwgY29udHJvbCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQgLSBBZGRpdGlvbmFsIGNvbnRyb2wgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjI1IC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSMjYgLSBQb3dlciBNYW5hZ2VtZW50ICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNyAtIEFkZGl0aW9uYWwgQ29udHJvbCAoMykgKi8KKwkweDAwMDAsICAgICAvKiBSMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMzAgKi8KKwkweDAwMDAsICAgICAvKiBSMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMzMgKi8KKwkweDAwNTAsICAgICAvKiBSMzQgLSBMZWZ0IG91dCBNaXggKDEpICovCisJMHgwMDUwLCAgICAgLyogUjM1IC0gTGVmdCBvdXQgTWl4ICgyKSAqLworCTB4MDA1MCwgICAgIC8qIFIzNiAtIFJpZ2h0IG91dCBNaXggKDEpICovCisJMHgwMDUwLCAgICAgLyogUjM3IC0gUmlnaHQgT3V0IE1peCAoMikgKi8KKwkweDAwNTAsICAgICAvKiBSMzggLSBNb25vIG91dCBNaXggKDEpICovCisJMHgwMDUwLCAgICAgLyogUjM5IC0gTW9ubyBvdXQgTWl4ICgyKSAqLworCTB4MDA3OSwgICAgIC8qIFI0MCAtIExPVVQyIHZvbHVtZSAqLworCTB4MDA3OSwgICAgIC8qIFI0MSAtIFJPVVQyIHZvbHVtZSAqLworCTB4MDA3OSwgICAgIC8qIFI0MiAtIE1PTk9PVVQgdm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjQzIC0gQ2xvY2tpbmcgLyBQTEwgKi8KKwkweDAxMDMsICAgICAvKiBSNDQgLSBQTEwgQ29udHJvbCAxICovCisJMHgwMDI0LCAgICAgLyogUjQ1IC0gUExMIENvbnRyb2wgMiAqLworCTB4MDFCQSwgICAgIC8qIFI0NiAtIFBMTCBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDggKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwMDAsICAgICAvKiBSNTAgKi8KKwkweDAwMDAsICAgICAvKiBSNTEgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwMDAsICAgICAvKiBSNTMgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgKi8KKwkweDAwMDAsICAgICAvKiBSNTggKi8KKwkweDAwMDAsICAgICAvKiBSNTkgLSBQTEwgQ29udHJvbCA0ICovCit9OworCitzdGF0aWMgaW50IHdtODk1NV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk1NV9SRVNFVCwgMCk7Cit9CisKK3N0cnVjdCBwbGxfZmFjdG9ycyB7CisJaW50IG47CisJaW50IGs7CisJaW50IG91dGRpdjsKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDIyKSAqIDEwKQorCitzdGF0aWMgaW50IHdtODk5NV9wbGxfZmFjdG9ycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBpbnQgRnJlZiwgaW50IEZvdXQsIHN0cnVjdCBwbGxfZmFjdG9ycyAqcGxsKQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTmRpdiwgTm1vZCwgdGFyZ2V0OworCisJZGV2X2RiZyhkZXYsICJGcmVmPSV1IEZvdXQ9JXVcbiIsIEZyZWYsIEZvdXQpOworCisJLyogVGhlIG9zY2lsYXRvciBzaG91bGQgcnVuIGF0IHNob3VsZCBiZSA5MC0xMDBNSHosIGFuZAorCSAqIHRoZXJlJ3MgYSBkaXZpZGUgYnkgNCBwbHVzIGFuIG9wdGlvbmFsIGRpdmlkZSBieSAyIGluIHRoZQorCSAqIG91dHB1dCBwYXRoIHRvIGdlbmVyYXRlIHRoZSBzeXN0ZW0gY2xvY2suICBUaGUgY2xvY2sgdGFibGUKKwkgKiBpcyBzb3J0ZCBzbyB3ZSBzaG91bGQgYWx3YXlzIGdlbmVyYXRlIGEgc3VpdGFibGUgdGFyZ2V0LiAqLworCXRhcmdldCA9IEZvdXQgKiA0OworCWlmICh0YXJnZXQgPCA5MDAwMDAwMCkgeworCQlwbGwtPm91dGRpdiA9IDE7CisJCXRhcmdldCAqPSAyOworCX0gZWxzZSB7CisJCXBsbC0+b3V0ZGl2ID0gMDsKKwl9CisKKwlXQVJOX09OKHRhcmdldCA8IDkwMDAwMDAwIHx8IHRhcmdldCA+IDEwMDAwMDAwMCk7CisKKwlkZXZfZGJnKGRldiwgIkZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKKworCS8qIE5vdywgY2FsY3VsYXRlIE4uSyAqLworCU5kaXYgPSB0YXJnZXQgLyBGcmVmOworCisJcGxsLT5uID0gTmRpdjsKKwlObW9kID0gdGFyZ2V0ICUgRnJlZjsKKwlkZXZfZGJnKGRldiwgIk5tb2Q9JWRcbiIsIE5tb2QpOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCBGcmVmKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCXBsbC0+ayA9IEsgLyAxMDsKKworCWRldl9kYmcoZGV2LCAiTj0leCBLPSV4IE9VVERJVj0leFxuIiwgcGxsLT5uLCBwbGwtPmssIHBsbC0+b3V0ZGl2KTsKKworCXJldHVybiAwOworfQorCisvKiBMb29rdXAgdGFibGUgc3BlY2lmaXlpbmcgU1JBVEUgKHRhYmxlIDI1IGluIGRhdGFzaGVldCk7IHNvbWUgb2YgdGhlCisgKiBvdXRwdXQgZnJlcXVlbmNpZXMgaGF2ZSBiZWVuIHJvdW5kZWQgdG8gdGhlIHN0YW5kYXJkIGZyZXF1ZW5jaWVzCisgKiB0aGV5IGFyZSBpbnRlbmRlZCB0byBtYXRjaCB3aGVyZSB0aGUgZXJyb3IgaXMgc2xpZ2h0LiAqLworc3RhdGljIHN0cnVjdCB7CisJaW50IG1jbGs7CisJaW50IGZzOworCWludCB1c2I7CisJaW50IHNyOworfSBjbG9ja19jZmdzW10gPSB7CisJeyAxODQzMjAwMCwgIDgwMDAsIDAsICAzLCB9LAorCXsgMTg0MzIwMDAsIDEyMDAwLCAwLCAgOSwgfSwKKwl7IDE4NDMyMDAwLCAxNjAwMCwgMCwgMTEsIH0sCisJeyAxODQzMjAwMCwgMjQwMDAsIDAsIDI5LCB9LAorCXsgMTg0MzIwMDAsIDMyMDAwLCAwLCAxMywgfSwKKwl7IDE4NDMyMDAwLCA0ODAwMCwgMCwgIDEsIH0sCisJeyAxODQzMjAwMCwgOTYwMDAsIDAsIDE1LCB9LAorCisJeyAxNjkzNDQwMCwgIDgwMTgsIDAsIDE5LCB9LAorCXsgMTY5MzQ0MDAsIDExMDI1LCAwLCAyNSwgfSwKKwl7IDE2OTM0NDAwLCAyMjA1MCwgMCwgMjcsIH0sCisJeyAxNjkzNDQwMCwgNDQxMDAsIDAsIDE3LCB9LAorCXsgMTY5MzQ0MDAsIDg4MjAwLCAwLCAzMSwgfSwKKworCXsgMTIwMDAwMDAsICA4MDAwLCAxLCAgMiwgfSwKKwl7IDEyMDAwMDAwLCAxMTAyNSwgMSwgMjUsIH0sCisJeyAxMjAwMDAwMCwgMTIwMDAsIDEsICA4LCB9LAorCXsgMTIwMDAwMDAsIDE2MDAwLCAxLCAxMCwgfSwKKwl7IDEyMDAwMDAwLCAyMjA1MCwgMSwgMjcsIH0sCisJeyAxMjAwMDAwMCwgMjQwMDAsIDEsIDI4LCB9LAorCXsgMTIwMDAwMDAsIDMyMDAwLCAxLCAxMiwgfSwKKwl7IDEyMDAwMDAwLCA0NDEwMCwgMSwgMTcsIH0sCisJeyAxMjAwMDAwMCwgNDgwMDAsIDEsICAwLCB9LAorCXsgMTIwMDAwMDAsIDg4MjAwLCAxLCAzMSwgfSwKKwl7IDEyMDAwMDAwLCA5NjAwMCwgMSwgMTQsIH0sCisKKwl7IDEyMjg4MDAwLCAgODAwMCwgMCwgIDIsIH0sCisJeyAxMjI4ODAwMCwgMTIwMDAsIDAsICA4LCB9LAorCXsgMTIyODgwMDAsIDE2MDAwLCAwLCAxMCwgfSwKKwl7IDEyMjg4MDAwLCAyNDAwMCwgMCwgMjgsIH0sCisJeyAxMjI4ODAwMCwgMzIwMDAsIDAsIDEyLCB9LAorCXsgMTIyODgwMDAsIDQ4MDAwLCAwLCAgMCwgfSwKKwl7IDEyMjg4MDAwLCA5NjAwMCwgMCwgMTQsIH0sCisKKwl7IDEyMjg5NjAwLCAgODAxOCwgMCwgMTgsIH0sCisJeyAxMjI4OTYwMCwgMTEwMjUsIDAsIDI0LCB9LAorCXsgMTIyODk2MDAsIDIyMDUwLCAwLCAyNiwgfSwKKwl7IDExMjg5NjAwLCA0NDEwMCwgMCwgMTYsIH0sCisJeyAxMTI4OTYwMCwgODgyMDAsIDAsIDMxLCB9LAorfTsKKworc3RhdGljIGludCB3bTg5NTVfY29uZmlndXJlX2Nsb2NraW5nKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGksIHJldCwgdmFsOworCWludCBjbG9ja2luZyA9IDA7CisJaW50IHNyYXRlID0gMDsKKwlpbnQgc3IgPSAtMTsKKwlzdHJ1Y3QgcGxsX2ZhY3RvcnMgcGxsOworCisJLyogSWYgd2UncmUgbm90IHJ1bm5pbmcgYSBzYW1wbGUgcmF0ZSBjdXJyZW50bHkganVzdCBwaWNrIG9uZSAqLworCWlmICh3bTg5NTUtPmZzID09IDApCisJCXdtODk1NS0+ZnMgPSA4MDAwOworCisJLyogQ2FuIHdlIGdlbmVyYXRlIGFuIGV4YWN0IG91dHB1dD8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja19jZmdzKTsgaSsrKSB7CisJCWlmICh3bTg5NTUtPmZzICE9IGNsb2NrX2NmZ3NbaV0uZnMpCisJCQljb250aW51ZTsKKwkJc3IgPSBpOworCisJCWlmICh3bTg5NTUtPm1jbGtfcmF0ZSA9PSBjbG9ja19jZmdzW2ldLm1jbGspCisJCQlicmVhazsKKwl9CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgd2l0aCBhbiB1bnN1cHBvcnRlZCBzYW1wbGUgcmF0ZSAqLworCWlmIChzciA9PSAtMSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJTYW1wbGUgcmF0ZSAlZEh6IHVuc3VwcG9ydGVkXG4iLAorCQkJd204OTU1LT5mcyk7CisJCVdBUk5fT04oc3IgPT0gLTEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGNsb2NrX2NmZ3MpKSB7CisJCS8qIElmIHdlIGNhbid0IGdlbmVyYXRlIHRoZSByaWdodCBjbG9jayBmcm9tIE1DTEsgdGhlbgorCQkgKiB3ZSBzaG91bGQgY29uZmlndXJlIHRoZSBQTEwgdG8gc3VwcGx5IHVzIHdpdGggYW4KKwkJICogYXBwcm9wcmlhdGUgY2xvY2suCisJCSAqLworCQljbG9ja2luZyB8PSBXTTg5NTVfTUNMS1NFTDsKKworCQkvKiBVc2UgdGhlIGxhc3QgZGl2aWRlciBjb25maWd1cmF0aW9uIHdlIHNhdyBmb3IgdGhlCisJCSAqIHNhbXBsZSByYXRlLiAqLworCQlyZXQgPSB3bTg5OTVfcGxsX2ZhY3RvcnMoY29kZWMtPmRldiwgd204OTU1LT5tY2xrX3JhdGUsCisJCQkJCSBjbG9ja19jZmdzW3NyXS5tY2xrLCAmcGxsKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIlVuYWJsZSB0byBnZW5lcmF0ZSAlZEh6IGZyb20gJWRIeiBNQ0xLXG4iLAorCQkJCXdtODk1NS0+ZnMsIHdtODk1NS0+bWNsa19yYXRlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODk1NV9OX01BU0sgfCBXTTg5NTVfS18yMV8xOF9NQVNLLAorCQkJCSAgICAocGxsLm4gPDwgV004OTU1X05fU0hJRlQpIHwKKwkJCQkgICAgcGxsLmsgPj4gMTgpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUExMX0NPTlRST0xfMiwKKwkJCQkgICAgV004OTU1X0tfMTdfOV9NQVNLLAorCQkJCSAgICAocGxsLmsgPj4gOSkgJiBXTTg5NTVfS18xN185X01BU0spOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUExMX0NPTlRST0xfMiwKKwkJCQkgICAgV004OTU1X0tfOF8wX01BU0ssCisJCQkJICAgIHBsbC5rICYgV004OTU1X0tfOF8wX01BU0spOworCQlpZiAocGxsLmspCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUExMX0NPTlRST0xfNCwKKwkJCQkJICAgIFdNODk1NV9LRU4sIFdNODk1NV9LRU4pOworCQllbHNlCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUExMX0NPTlRST0xfNCwKKwkJCQkJICAgIFdNODk1NV9LRU4sIDApOworCisJCWlmIChwbGwub3V0ZGl2KQorCQkJdmFsID0gV004OTU1X1BMTF9SQiB8IFdNODk1NV9QTExPVVRESVYyOworCQllbHNlCisJCQl2YWwgPSBXTTg5NTVfUExMX1JCOworCisJCS8qIE5vdyBzdGFydCB0aGUgUExMIHJ1bm5pbmcgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCQkgICAgV004OTU1X1BMTF9SQiB8IFdNODk1NV9QTExPVVRESVYyLCB2YWwpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQ0xPQ0tJTkdfUExMLAorCQkJCSAgICBXTTg5NTVfUExMRU4sIFdNODk1NV9QTExFTik7CisJfQorCisJc3JhdGUgPSBjbG9ja19jZmdzW3NyXS51c2IgfCAoY2xvY2tfY2Znc1tzcl0uc3IgPDwgV004OTU1X1NSX1NISUZUKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9TQU1QTEVfUkFURSwKKwkJCSAgICBXTTg5NTVfVVNCIHwgV004OTU1X1NSX01BU0ssIHNyYXRlKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQ0xPQ0tJTkdfUExMLAorCQkJICAgIFdNODk1NV9NQ0xLU0VMLCBjbG9ja2luZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJaW50IHJldCA9IDA7CisKKwkvKiBBbHdheXMgZGlzYWJsZSB0aGUgY2xvY2tzIC0gaWYgd2UncmUgZG9pbmcgcmVjb25maWd1cmF0aW9uIHRoaXMKKwkgKiBhdm9pZHMgbWlzY2xvY2tpbmcuCisJICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCSAgICBXTTg5NTVfRElHRU5CLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQ0xPQ0tJTkdfUExMLAorCQkJICAgIFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMRU4sIDApOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlyZXQgPSB3bTg5NTVfY29uZmlndXJlX2Nsb2NraW5nKGNvZGVjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWVtcGhfc2V0dGluZ3NbXSA9IHsgMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9OworCitzdGF0aWMgaW50IHdtODk1NV9zZXRfZGVlbXBoKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHZhbCwgaSwgYmVzdDsKKworCS8qIElmIHdlJ3JlIHVzaW5nIGRlZW1waGFzaXMgc2VsZWN0IHRoZSBuZWFyZXN0IGF2YWlsYWJsZSBzYW1wbGUKKwkgKiByYXRlLgorCSAqLworCWlmICh3bTg5NTUtPmRlZW1waCkgeworCQliZXN0ID0gMTsKKwkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUoZGVlbXBoX3NldHRpbmdzKTsgaSsrKSB7CisJCQlpZiAoYWJzKGRlZW1waF9zZXR0aW5nc1tpXSAtIHdtODk1NS0+ZnMpIDwKKwkJCSAgICBhYnMoZGVlbXBoX3NldHRpbmdzW2Jlc3RdIC0gd204OTU1LT5mcykpCisJCQkJYmVzdCA9IGk7CisJCX0KKworCQl2YWwgPSBiZXN0IDw8IFdNODk1NV9ERUVNUEhfU0hJRlQ7CisJfSBlbHNlIHsKKwkJdmFsID0gMDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXQgZGVlbXBoYXNpcyAlZFxuIiwgdmFsKTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfREFDX0NPTlRST0wsCisJCQkJICAgV004OTU1X0RFRU1QSF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODk1NV9nZXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHdtODk1NS0+ZGVlbXBoOworfQorCitzdGF0aWMgaW50IHdtODk1NV9wdXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTU1LT5kZWVtcGggPSBkZWVtcGg7CisKKwlyZXR1cm4gd204OTU1X3NldF9kZWVtcGgoY29kZWMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYmFzc19tb2RlX3RleHRbXSA9IHsKKwkiTGluZWFyIiwgIkFkYXB0aXZlIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYmFzc19tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTU1X0JBU1NfQ09OVFJPTCwgNywgMiwgYmFzc19tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqYmFzc19jdXRvZmZfdGV4dFtdID0geworCSJMb3ciLCAiSGlnaCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYmFzc19jdXRvZmYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NTVfQkFTU19DT05UUk9MLCA2LCAyLCBiYXNzX2N1dG9mZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRyZWJsZV9jdXRvZmZfdGV4dFtdID0geworCSJIaWdoIiwgIkxvdyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdHJlYmxlX2N1dG9mZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk1NV9UUkVCTEVfQ09OVFJPTCwgNiwgMiwgdHJlYmxlX2N1dG9mZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtMTI3NTAsIDUwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhdHRlbl90bHYsIC02MDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYnlwYXNzX3RsdiwgLTE1MDAsIDMwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobW9ub190bHYsIC0yMTAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC0xMjEwMCwgMTAwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh0cmVibGVfdGx2LCAtMTIwMCwgMTUwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk1NV9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgUGxheWJhY2sgVm9sdW1lIiwgV004OTU1X0xFRlRfREFDX1ZPTFVNRSwKKwkJIFdNODk1NV9SSUdIVF9EQUNfVk9MVU1FLCAwLCAyNTUsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJQbGF5YmFjayBBdHRlbnVhdGlvbiBWb2x1bWUiLCBXTTg5NTVfREFDX0NPTlRST0wsIDcsIDEsIDEsCisJICAgICAgIGF0dGVuX3RsdiksCitTT0NfU0lOR0xFX0JPT0xfRVhUKCJEQUMgRGVlbXBoYXNpcyBTd2l0Y2giLCAwLAorCQkgICAgd204OTU1X2dldF9kZWVtcGgsIHdtODk1NV9wdXRfZGVlbXBoKSwKKworU09DX0VOVU0oIkJhc3MgTW9kZSIsIGJhc3NfbW9kZSksCitTT0NfRU5VTSgiQmFzcyBDdXRvZmYiLCBiYXNzX2N1dG9mZiksCitTT0NfU0lOR0xFKCJCYXNzIFZvbHVtZSIsIFdNODk1NV9CQVNTX0NPTlRST0wsIDAsIDE1LCAxKSwKKworU09DX0VOVU0oIlRyZWJsZSBDdXRvZmYiLCB0cmVibGVfY3V0b2ZmKSwKK1NPQ19TSU5HTEVfVExWKCJUcmVibGUgVm9sdW1lIiwgV004OTU1X1RSRUJMRV9DT05UUk9MLCAwLCAxNCwgMSwgdHJlYmxlX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IEJ5cGFzcyBWb2x1bWUiLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzEsIDQsIDcsIDEsCisJICAgICAgIGJ5cGFzc190bHYpLAorU09DX1NJTkdMRV9UTFYoIkxlZnQgTW9ubyBWb2x1bWUiLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzIsIDQsIDcsIDEsCisJICAgICAgIGJ5cGFzc190bHYpLAorCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgTW9ubyBWb2x1bWUiLCBXTTg5NTVfUklHSFRfT1VUX01JWF8xLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMiwgNCwgNywgMSwKKwkgICAgICAgYnlwYXNzX3RsdiksCisKKy8qIE5vdCBhIHN0ZXJlbyBwYWlyIHNvIHRoZXkgbGluZSB1cCB3aXRoIHRoZSBEQVBNIHN3aXRjaGVzICovCitTT0NfU0lOR0xFX1RMVigiTW9ubyBMZWZ0IEJ5cGFzcyBWb2x1bWUiLCBXTTg5NTVfTU9OT19PVVRfTUlYXzEsIDQsIDcsIDEsCisJICAgICAgIG1vbm9fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNb25vIFJpZ2h0IEJ5cGFzcyBWb2x1bWUiLCBXTTg5NTVfTU9OT19PVVRfTUlYXzIsIDQsIDcsIDEsCisJICAgICAgIG1vbm9fdGx2KSwKKworU09DX0RPVUJMRV9SX1RMVigiSGVhZHBob25lIFZvbHVtZSIsIFdNODk1NV9MT1VUMV9WT0xVTUUsCisJCSBXTTg5NTVfUk9VVDFfVk9MVU1FLCAwLCAxMjcsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgWkMgU3dpdGNoIiwgV004OTU1X0xPVVQxX1ZPTFVNRSwKKwkgICAgIFdNODk1NV9ST1VUMV9WT0xVTUUsIDcsIDEsIDApLAorCitTT0NfRE9VQkxFX1JfVExWKCJTcGVha2VyIFZvbHVtZSIsIFdNODk1NV9MT1VUMl9WT0xVTUUsCisJCSBXTTg5NTVfUk9VVDJfVk9MVU1FLCAwLCAxMjcsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJTcGVha2VyIFpDIFN3aXRjaCIsIFdNODk1NV9MT1VUMl9WT0xVTUUsCisJICAgICBXTTg5NTVfUk9VVDJfVk9MVU1FLCA3LCAxLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIk1vbm8gVm9sdW1lIiwgV004OTU1X01PTk9PVVRfVk9MVU1FLCAwLCAxMjcsIDAsIG91dF90bHYpLAorU09DX1NJTkdMRSgiTW9ubyBaQyBTd2l0Y2giLCBXTTg5NTVfTU9OT09VVF9WT0xVTUUsIDcsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxtaXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzEsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJCeXBhc3MgU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8xLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8yLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTW9ubyBTd2l0Y2giLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzIsIDcsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJtaXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzEsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJNb25vIFN3aXRjaCIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzEsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8yLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzIsIDcsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1taXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9NT05PX09VVF9NSVhfMSwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgQnlwYXNzIFN3aXRjaCIsIFdNODk1NV9NT05PX09VVF9NSVhfMSwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9NT05PX09VVF9NSVhfMiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IEJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzIsIDcsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk1NV9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiTU9OT0lOLSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJNT05PSU4rIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTlIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElORUlOTCIpLAorCitTTkRfU09DX0RBUE1fUEdBKCJNb25vIElucHV0IiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiU1lTQ0xLIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwgMCwgMSwgd204OTU1X3N5c2NsaywKKwkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIlRTREVOIiwgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8xLCA4LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDTCIsICJQbGF5YmFjayIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDgsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDUiIsICJQbGF5YmFjayIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDcsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJMT1VUMSBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA2LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlJPVVQxIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTE9VVDIgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJST1VUMiBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCAzLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIk1PVVQgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJPVVQzIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDEsIDAsIE5VTEwsIDApLAorCisvKiBUaGUgbmFtZXMgYXJlIGNob3NlbiB0byBtYWtlIHRoZSBjb250cm9sIG5hbWVzIG5pY2UgKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTGVmdCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbG1peGVyLCBBUlJBWV9TSVpFKGxtaXhlcikpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgcm1peGVyLCBBUlJBWV9TSVpFKHJtaXhlcikpLAorU05EX1NPQ19EQVBNX01JWEVSKCJNb25vIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBtbWl4ZXIsIEFSUkFZX1NJWkUobW1peGVyKSksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQxIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUMSIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVDIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQyIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJNT05PT1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQzIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5NTVfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUNMIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIk1vbm8gSW5wdXQiLCBOVUxMLCAiTU9OT0lOLSIgfSwKKwl7ICJNb25vIElucHV0IiwgTlVMTCwgIk1PTk9JTisiIH0sCisKKwl7ICJMZWZ0IiwgIlBsYXliYWNrIFN3aXRjaCIsICJEQUNMIiB9LAorCXsgIkxlZnQiLCAiUmlnaHQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ1IiIH0sCisJeyAiTGVmdCIsICJCeXBhc3MgU3dpdGNoIiwgIkxJTkVJTkwiIH0sCisJeyAiTGVmdCIsICJNb25vIFN3aXRjaCIsICJNb25vIElucHV0IiB9LAorCisJeyAiUmlnaHQiLCAiUGxheWJhY2sgU3dpdGNoIiwgIkRBQ1IiIH0sCisJeyAiUmlnaHQiLCAiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCAiREFDTCIgfSwKKwl7ICJSaWdodCIsICJCeXBhc3MgU3dpdGNoIiwgIkxJTkVJTlIiIH0sCisJeyAiUmlnaHQiLCAiTW9ubyBTd2l0Y2giLCAiTW9ubyBJbnB1dCIgfSwKKworCXsgIk1vbm8iLCAiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCAiREFDTCIgfSwKKwl7ICJNb25vIiwgIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsICJEQUNSIiB9LAorCXsgIk1vbm8iLCAiTGVmdCBCeXBhc3MgU3dpdGNoIiwgIkxJTkVJTkwiIH0sCisJeyAiTW9ubyIsICJSaWdodCBCeXBhc3MgU3dpdGNoIiwgIkxJTkVJTlIiIH0sCisKKwl7ICJMT1VUMSBQR0EiLCBOVUxMLCAiTGVmdCIgfSwKKwl7ICJMT1VUMSIsIE5VTEwsICJUU0RFTiIgfSwKKwl7ICJMT1VUMSIsIE5VTEwsICJMT1VUMSBQR0EiIH0sCisKKwl7ICJST1VUMSBQR0EiLCBOVUxMLCAiUmlnaHQiIH0sCisJeyAiUk9VVDEiLCBOVUxMLCAiVFNERU4iIH0sCisJeyAiUk9VVDEiLCBOVUxMLCAiUk9VVDEgUEdBIiB9LAorCisJeyAiTE9VVDIgUEdBIiwgTlVMTCwgIkxlZnQiIH0sCisJeyAiTE9VVDIiLCBOVUxMLCAiVFNERU4iIH0sCisJeyAiTE9VVDIiLCBOVUxMLCAiTE9VVDIgUEdBIiB9LAorCisJeyAiUk9VVDIgUEdBIiwgTlVMTCwgIlJpZ2h0IiB9LAorCXsgIlJPVVQyIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIlJPVVQyIiwgTlVMTCwgIlJPVVQyIFBHQSIgfSwKKworCXsgIk1PVVQgUEdBIiwgTlVMTCwgIk1vbm8iIH0sCisJeyAiTU9OT09VVCIsIE5VTEwsICJNT1VUIFBHQSIgfSwKKworCS8qIE9VVDMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCAqLworCXsgIk9VVDMiLCBOVUxMLCAiT1VUMyBQR0EiIH0sCit9OworCitzdGF0aWMgaW50IHdtODk1NV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk1NV9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204OTU1X3NuZF9jb250cm9scykpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTU1X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTU1X2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODk1NV9pbnRlcmNvbiwKKwkJCQlBUlJBWV9TSVpFKHdtODk1NV9pbnRlcmNvbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCWludCB3bDsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd2wgPSAwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJd2wgPSAweDQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCXdsID0gMHg4OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQl3bCA9IDB4YzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9BVURJT19JTlRFUkZBQ0UsCisJCQkgICAgV004OTU1X1dMX01BU0ssIHdsKTsKKworCXdtODk1NS0+ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCXdtODk1NV9zZXRfZGVlbXBoKGNvZGVjKTsKKworCS8qIElmIHRoZSBjaGlwIGlzIGNsb2NrZWQgdGhlbiBkaXNhYmxlIHRoZSBjbG9ja3MgYW5kIGZvcmNlIGEKKwkgKiByZWNvbmZpZ3VyYXRpb24sIG90aGVyd2lzZSBEQVBNIHdpbGwgcG93ZXIgdXAgdGhlCisJICogY2xvY2tzIGZvciB1cyBsYXRlci4gKi8KKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgJiBXTTg5NTVfRElHRU5CKSB7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9ESUdFTkIsIDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQ0xPQ0tJTkdfUExMLAorCQkJCSAgICBXTTg5NTVfUExMX1JCIHwgV004OTU1X1BMTEVOLCAwKTsKKworCQl3bTg5NTVfY29uZmlndXJlX2Nsb2NraW5nKGNvZGVjKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODk1NV9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGRpdjsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5NTVfQ0xLX01DTEs6CisJCWlmIChmcmVxID4gMTUwMDAwMDApIHsKKwkJCXByaXYtPm1jbGtfcmF0ZSA9IGZyZXEgLz0gMjsKKwkJCWRpdiA9IFdNODk1NV9NQ0xLRElWMjsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPm1jbGtfcmF0ZSA9IGZyZXE7CisJCQlkaXYgPSAwOworCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1NBTVBMRV9SQVRFLAorCQkJCSAgICBXTTg5NTVfTUNMS0RJVjIsIGRpdik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkYWktPmRldiwgIkNsb2NrIHNvdXJjZSBpcyAlZCBhdCAldUh6XG4iLCBjbGtfaWQsIGZyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1MTYgYWlmID0gMDsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYWlmIHw9IFdNODk1NV9NUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZiB8PSBXTTg5NTVfTFJQOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZiB8PSAweDM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlhaWYgfD0gMHgyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhaWYgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYgfD0gV004OTU1X0JDTEtJTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZiB8PSBXTTg5NTVfQkNMS0lOViB8IFdNODk1NV9MUlA7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZiB8PSBXTTg5NTVfQkNMS0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJYWlmIHw9IFdNODk1NV9MUlA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9BVURJT19JTlRFUkZBQ0UsCisJCQkgICAgV004OTU1X01TIHwgV004OTU1X0ZPUk1BVF9NQVNLIHwgV004OTU1X0JDTEtJTlYgfAorCQkJICAgIFdNODk1NV9MUlAsIGFpZik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODk1NV9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IHZhbDsKKworCWlmIChtdXRlKQorCQl2YWwgPSBXTTg5NTVfREFDTVU7CisJZWxzZQorCQl2YWwgPSAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0RBQ19DT05UUk9MLCBXTTg5NTVfREFDTVUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCwgaTsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEIHJlc2lzdGFuY2UgMio1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywKKwkJCQkgICAgMHgxIDw8IFdNODk1NV9WTUlEU0VMX1NISUZUKTsKKworCQkvKiBEZWZhdWx0IGJpYXMgY3VycmVudCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODk1NV9WU0VMX01BU0ssCisJCQkJICAgIDB4MiA8PCBXTTg5NTVfVlNFTF9TSElGVCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCQkJICAgIHdtODk1NS0+c3VwcGxpZXMpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJLyogU3luYyBiYWNrIGNhY2hlZCB2YWx1ZXMgaWYgdGhleSdyZQorCQkJICogZGlmZmVyZW50IGZyb20gdGhlIGhhcmR3YXJlIGRlZmF1bHQuCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk1NS0+cmVnX2NhY2hlKTsgaSsrKSB7CisJCQkJaWYgKGkgPT0gV004OTU1X1JFU0VUKQorCQkJCQljb250aW51ZTsKKworCQkJCWlmICh3bTg5NTUtPnJlZ19jYWNoZVtpXSA9PSB3bTg5NTVfcmVnW2ldKQorCQkJCQljb250aW51ZTsKKworCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHdtODk1NS0+cmVnX2NhY2hlW2ldKTsKKwkJCX0KKworCQkJLyogRW5hYmxlIFZSRUYgYW5kIFZNSUQgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJCSAgICBXTTg5NTVfVlJFRiB8CisJCQkJCSAgICBXTTg5NTVfVk1JRFNFTF9NQVNLLAorCQkJCQkgICAgV004OTU1X1ZSRUYgfAorCQkJCQkgICAgMHgzIDw8IFdNODk1NV9WUkVGX1NISUZUKTsKKworCQkJLyogTGV0IFZNSUQgcmFtcCAqLworCQkJbXNsZWVwKDUwMCk7CisKKwkJCS8qIEhpZ2ggcmVzaXN0YW5jZSBWUk9JIHRvIG1haW50YWluIG91dHB1dHMgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCisJCQkJCSAgICBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzMsCisJCQkJCSAgICBXTTg5NTVfVlJPSSwgV004OTU1X1ZST0kpOworCQl9CisKKwkJLyogTWFpbnRhaW4gVk1JRCB3aXRoIDIqMjUwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5NTVfVk1JRFNFTF9NQVNLLAorCQkJCSAgICAweDIgPDwgV004OTU1X1ZNSURTRUxfU0hJRlQpOworCisJCS8qIE1pbmltdW0gYmlhcyBjdXJyZW50ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTU1X1ZTRUxfTUFTSywgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBMb3cgcmVzaXN0YW5jZSBWUk9JIHRvIGhlbHAgZGlzY2hhcmdlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCisJCQkJICAgIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMywKKwkJCQkgICAgV004OTU1X1ZST0ksIDApOworCisJCS8qIFR1cm4gb2ZmIFZNSUQgYW5kIFZSRUYgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTU1X1ZSRUYgfAorCQkJCSAgICBXTTg5NTVfVk1JRFNFTF9NQVNLLCAwKTsKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksCisJCQkJICAgICAgIHdtODk1NS0+c3VwcGxpZXMpOworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5NTVfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODk1NV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTU1X2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsgPSB3bTg5NTVfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdCA9IHdtODk1NV9zZXRfZm10LAorCS5od19wYXJhbXMgPSB3bTg5NTVfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSB3bTg5NTVfZGlnaXRhbF9tdXRlLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtODk1NV9kYWkgPSB7CisJLm5hbWUgPSAiV004OTU1IiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004OTU1X1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODk1NV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZ3bTg5NTVfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg5NTVfZGFpKTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5NTVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTU1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg5NTVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTU1X3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5NTVfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IHdtODk1NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODk1NV9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5NTVfY29kZWM7CisJY29kZWMgPSB3bTg5NTVfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJd204OTU1X2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldHVybiByZXQ7CisKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg5NTVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NTUgPSB7CisJLnByb2JlID0gCXdtODk1NV9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODk1NV9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204OTU1X3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODk1NV9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5NTUpOworCitzdGF0aWMgaW50IHdtODk1NV9yZWdpc3RlcihzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NTUtPmNvZGVjOworCWludCBpOworCisJaWYgKHdtODk1NV9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk1NSBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5NTU7CisJY29kZWMtPm5hbWUgPSAiV004OTU1IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTU1X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTU1X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTU1X01BWF9SRUdJU1RFUjsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODk1NS0+cmVnX2NhY2hlOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODk1NV9yZWcsIHNpemVvZih3bTg5NTVfcmVnKSk7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgY29udHJvbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyk7IGkrKykKKwkJd204OTU1LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5NTVfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksCisJCQkJIHdtODk1NS0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5NTUtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSB3bTg5NTVfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwl3bTg5NTVfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwkvKiBDaGFuZ2Ugc29tZSBkZWZhdWx0IHNldHRpbmdzIC0gbGF0Y2ggVlUgYW5kIGVuYWJsZSBaQyAqLworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9MRUZUX0RBQ19WT0xVTUVdIHw9IFdNODk1NV9MRFZVOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9SSUdIVF9EQUNfVk9MVU1FXSB8PSBXTTg5NTVfUkRWVTsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTE9VVDFfVk9MVU1FXSB8PSBXTTg5NTVfTE8xVlUgfCBXTTg5NTVfTE8xWkM7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X1JPVVQxX1ZPTFVNRV0gfD0gV004OTU1X1JPMVZVIHwgV004OTU1X1JPMVpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9MT1VUMl9WT0xVTUVdIHw9IFdNODk1NV9MTzJWVSB8IFdNODk1NV9MTzJaQzsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfUk9VVDJfVk9MVU1FXSB8PSBXTTg5NTVfUk8yVlUgfCBXTTg5NTVfUk8yWkM7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X01PTk9PVVRfVk9MVU1FXSB8PSBXTTg5NTVfTU9aQzsKKworCS8qIEFsc28gZW5hYmxlIGFkYXB0aXZlIGJhc3MgYm9vc3QgYnkgZGVmYXVsdCAqLworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9CQVNTX0NPTlRST0xdIHw9IFdNODk1NV9CQjsKKworCS8qIFNldCBwbGF0Zm9ybSBkYXRhIHZhbHVlcyAqLworCWlmICh3bTg5NTUtPnBkYXRhKSB7CisJCWlmICh3bTg5NTUtPnBkYXRhLT5vdXQyX3NwZWFrZXIpCisJCQl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzJdCisJCQkJfD0gV004OTU1X1JPVVQySU5WOworCisJCWlmICh3bTg5NTUtPnBkYXRhLT5tb25vaW5fZGlmZikKKwkJCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9NT05PX09VVF9NSVhfMV0KKwkJCQl8PSBXTTg5NTVfRE1FTjsKKwl9CisKKwl3bTg5NTVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiB3aWxsIGhhdmUgZG9uZSBhbiBleHRyYSBlbmFibGUgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworCisJd204OTU1X2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTU1X2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwgd204OTU1LT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwgd204OTU1LT5zdXBwbGllcyk7CitlcnI6CisJa2ZyZWUod204OTU1KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg5NTVfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSkKK3sKKwl3bTg5NTVfc2V0X2JpYXNfbGV2ZWwoJndtODk1NS0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwgd204OTU1LT5zdXBwbGllcyk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204OTU1X2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg5NTUtPmNvZGVjKTsKKwlrZnJlZSh3bTg5NTUpOworCXdtODk1NV9jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NTVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODk1NSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5NTVfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5NTUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5NTUtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk1NSk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwl3bTg5NTUtPnBkYXRhID0gaTJjLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204OTU1X3JlZ2lzdGVyKHdtODk1NSwgU05EX1NPQ19JMkMpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5NTVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204OTU1X3VucmVnaXN0ZXIod204OTU1KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODk1NV9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg5NTUiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODk1NV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTU1X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204OTU1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg5NTVfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODk1NV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg5NTVfaTJjX2lkLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB3bTg5NTVfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5NTVfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODk1NSBJMkMgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh3bTg5NTVfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5NTVfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204OTU1X2kyY19kcml2ZXIpOworI2VuZGlmCit9Cittb2R1bGVfZXhpdCh3bTg5NTVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5NTUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzQ5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5oCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogd204OTU1LmggIC0tICBXTTg5MDQgQVNvQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MsIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTTg5NTVfSAorI2RlZmluZSBfV004OTU1X0gKKworI2RlZmluZSBXTTg5NTVfQ0xLX01DTEsgMQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk1NV9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTU1OworCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODk1NV9MT1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODk1NV9ST1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODk1NV9EQUNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODk1NV9BVURJT19JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODk1NV9TQU1QTEVfUkFURSAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODk1NV9MRUZUX0RBQ19WT0xVTUUgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFdNODk1NV9SSUdIVF9EQUNfVk9MVU1FICAgICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIFdNODk1NV9CQVNTX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDBDCisjZGVmaW5lIFdNODk1NV9UUkVCTEVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDBECisjZGVmaW5lIFdNODk1NV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMSAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMiAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMyAgICAgICAgICAgICAweDFCCisjZGVmaW5lIFdNODk1NV9MRUZUX09VVF9NSVhfMSAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFdNODk1NV9MRUZUX09VVF9NSVhfMiAgICAgICAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFdNODk1NV9SSUdIVF9PVVRfTUlYXzEgICAgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIFdNODk1NV9SSUdIVF9PVVRfTUlYXzIgICAgICAgICAgICAgICAgICAweDI1CisjZGVmaW5lIFdNODk1NV9NT05PX09VVF9NSVhfMSAgICAgICAgICAgICAgICAgICAweDI2CisjZGVmaW5lIFdNODk1NV9NT05PX09VVF9NSVhfMiAgICAgICAgICAgICAgICAgICAweDI3CisjZGVmaW5lIFdNODk1NV9MT1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODk1NV9ST1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODk1NV9NT05PT1VUX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAweDJBCisjZGVmaW5lIFdNODk1NV9DTE9DS0lOR19QTEwgICAgICAgICAgICAgICAgICAgICAweDJCCisjZGVmaW5lIFdNODk1NV9QTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDJDCisjZGVmaW5lIFdNODk1NV9QTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDJECisjZGVmaW5lIFdNODk1NV9QTExfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDJFCisjZGVmaW5lIFdNODk1NV9QTExfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgICAweDNCCisKKyNkZWZpbmUgV004OTU1X1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFdNODk1NV9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAweDNCCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjIgKDB4MDIpIC0gTE9VVDEgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X0xPMVZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE8xVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMVZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE8xVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMVZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTE8xVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMVZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE8xVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMVpDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE8xWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE8xWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE8xWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMVpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE8xWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPVVRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogTE9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9MT1VUVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTE9VVFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFIzICgweDAzKSAtIFJPVVQxIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9STzFWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMVZVICovCisjZGVmaW5lIFdNODk1NV9STzFWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMVZVICovCisjZGVmaW5lIFdNODk1NV9STzFWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJPMVZVICovCisjZGVmaW5lIFdNODk1NV9STzFWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMVZVICovCisjZGVmaW5lIFdNODk1NV9STzFaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMVpDICovCisjZGVmaW5lIFdNODk1NV9STzFaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMVpDICovCisjZGVmaW5lIFdNODk1NV9STzFaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPMVpDICovCisjZGVmaW5lIFdNODk1NV9STzFaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMVpDICovCisjZGVmaW5lIFdNODk1NV9ST1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfUk9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBEQUMgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk1NV9EQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBVCAqLworI2RlZmluZSBXTTg5NTVfREFUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogREFUICovCisjZGVmaW5lIFdNODk1NV9EQVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBVCAqLworI2RlZmluZSBXTTg5NTVfREFDTVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NTVfREFDTVVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NTVfREFDTVVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NTVfREFDTVVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NTVfREVFTVBIX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NTVfREVFTVBIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NTVfREVFTVBIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBERUVNUEggLSBbMjoxXSAqLworCisvKgorICogUjcgKDB4MDcpIC0gQXVkaW8gSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtJTlYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NTVfQkNMS0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NTVfTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNUyAqLworI2RlZmluZSBXTTg5NTVfTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNUyAqLworI2RlZmluZSBXTTg5NTVfTVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNUyAqLworI2RlZmluZSBXTTg5NTVfTVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNUyAqLworI2RlZmluZSBXTTg5NTVfTFJTV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUlNXQVAgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlNXQVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExSU1dBUCAqLworI2RlZmluZSBXTTg5NTVfTFJTV0FQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUlNXQVAgKi8KKyNkZWZpbmUgV004OTU1X0xSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFJQICovCisjZGVmaW5lIFdNODk1NV9MUlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfTFJQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTU1X0xSUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJQICovCisjZGVmaW5lIFdNODk1NV9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTU1X1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NTVfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk1NV9GT1JNQVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEZPUk1BVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk1NV9GT1JNQVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZPUk1BVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk1NV9GT1JNQVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZPUk1BVCAtIFsxOjBdICovCisKKy8qCisgKiBSOCAoMHgwOCkgLSBTYW1wbGUgUmF0ZQorICovCisjZGVmaW5lIFdNODk1NV9CQ0xLRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9CQ0xLRElWMl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9CQ0xLRElWMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEJDTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9CQ0xLRElWMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9NQ0xLRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9NQ0xLRElWMl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9NQ0xLRElWMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1DTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9NQ0xLRElWMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtESVYyICovCisjZGVmaW5lIFdNODk1NV9TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0UgIC8qIFNSIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTU1X1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1IgLSBbNToxXSAqLworI2RlZmluZSBXTTg5NTVfU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBTUiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk1NV9VU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFVTQiAqLworI2RlZmluZSBXTTg5NTVfVVNCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBVU0IgKi8KKyNkZWZpbmUgV004OTU1X1VTQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVVNCICovCisjZGVmaW5lIFdNODk1NV9VU0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTQiAqLworCisvKgorICogUjEwICgweDBBKSAtIExlZnQgREFDIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9MRFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEVlUgKi8KKyNkZWZpbmUgV004OTU1X0xEVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTERWVSAqLworI2RlZmluZSBXTTg5NTVfTERWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MRFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEVlUgKi8KKyNkZWZpbmUgV004OTU1X0xEQUNWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTERBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1NV9MREFDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfTERBQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMREFDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMSAoMHgwQikgLSBSaWdodCBEQUMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X1JEVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkRWVSAqLworI2RlZmluZSBXTTg5NTVfUkRWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRFZVICovCisjZGVmaW5lIFdNODk1NV9SRFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkRWVSAqLworI2RlZmluZSBXTTg5NTVfUkRBQ1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBSREFDVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JEQUNWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkRBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1NV9SREFDVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEQUNWT0wgLSBbNzowXSAqLworCisvKgorICogUjEyICgweDBDKSAtIEJhc3MgY29udHJvbAorICovCisjZGVmaW5lIFdNODk1NV9CQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJCICovCisjZGVmaW5lIFdNODk1NV9CQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJCICovCisjZGVmaW5lIFdNODk1NV9CQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEJCICovCisjZGVmaW5lIFdNODk1NV9CQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJCICovCisjZGVmaW5lIFdNODk1NV9CQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDICovCisjZGVmaW5lIFdNODk1NV9CQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDICovCisjZGVmaW5lIFdNODk1NV9CQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEJDICovCisjZGVmaW5lIFdNODk1NV9CQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDICovCisjZGVmaW5lIFdNODk1NV9CQVNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEJBU1MgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfQkFTU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQVNTIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0JBU1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQkFTUyAtIFszOjBdICovCisKKy8qCisgKiBSMTMgKDB4MEQpIC0gVHJlYmxlIGNvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NTVfVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBUQyAqLworI2RlZmluZSBXTTg5NTVfVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBUQyAqLworI2RlZmluZSBXTTg5NTVfVENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBUQyAqLworI2RlZmluZSBXTTg5NTVfVENfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUQyAqLworI2RlZmluZSBXTTg5NTVfVFJCTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBUUkJMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X1RSQkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVFJCTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9UUkJMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFRSQkwgLSBbMzowXSAqLworCisvKgorICogUjE1ICgweDBGKSAtIFJlc2V0CisgKi8KKyNkZWZpbmUgV004OTU1X1JFU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRiAgLyogUkVTRVQgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfUkVTRVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSRVNFVCAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9SRVNFVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFJFU0VUIC0gWzg6MF0gKi8KKworLyoKKyAqIFIyMyAoMHgxNykgLSBBZGRpdGlvbmFsIGNvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X1RTREVOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogVFNERU4gKi8KKyNkZWZpbmUgV004OTU1X1RTREVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogVFNERU4gKi8KKyNkZWZpbmUgV004OTU1X1RTREVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogVFNERU4gKi8KKyNkZWZpbmUgV004OTU1X1RTREVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVFNERU4gKi8KKyNkZWZpbmUgV004OTU1X1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogVlNFTCAtIFs3OjZdICovCisjZGVmaW5lIFdNODk1NV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZTRUwgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5NTVfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWU0VMIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTU1X0RNT05PTUlYX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogRE1PTk9NSVggLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NTVfRE1PTk9NSVhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBETU9OT01JWCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk1NV9ETU9OT01JWF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERNT05PTUlYIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTU1X0RBQ0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDSU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfREFDSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNJTlYgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDSU5WICovCisjZGVmaW5lIFdNODk1NV9UT0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPRU4gKi8KKyNkZWZpbmUgV004OTU1X1RPRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVE9FTiAqLworI2RlZmluZSBXTTg5NTVfVE9FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBUT0VOICovCisjZGVmaW5lIFdNODk1NV9UT0VOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPRU4gKi8KKworLyoKKyAqIFIyNCAoMHgxOCkgLSBBZGRpdGlvbmFsIGNvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X09VVDNTV19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogT1VUM1NXIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X09VVDNTV19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogT1VUM1NXIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X09VVDNTV19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogT1VUM1NXIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X1JPVVQySU5WICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9VVDJJTlYgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQySU5WX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9VVDJJTlYgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQySU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUk9VVDJJTlYgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQySU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9VVDJJTlYgKi8KKyNkZWZpbmUgV004OTU1X0RBQ09TUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDT1NSICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ09TUiAqLworI2RlZmluZSBXTTg5NTVfREFDT1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNPU1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ09TUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDT1NSICovCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfVk1JRFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBWTUlEU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X1ZNSURTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogVk1JRFNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9WTUlEU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfVlJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk1NV9WUkVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTU1X1ZSRUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfVlJFRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk1NV9ESUdFTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERJR0VOQiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESUdFTkIgKi8KKyNkZWZpbmUgV004OTU1X0RJR0VOQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRElHRU5CICovCisjZGVmaW5lIFdNODk1NV9ESUdFTkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJR0VOQiAqLworCisvKgorICogUjI2ICgweDFBKSAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NTVfREFDTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk1NV9EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NTVfREFDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk1NV9EQUNSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfREFDUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk1NV9MT1VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExPVVQxICovCisjZGVmaW5lIFdNODk1NV9MT1VUMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExPVVQxICovCisjZGVmaW5lIFdNODk1NV9MT1VUMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExPVVQxICovCisjZGVmaW5lIFdNODk1NV9MT1VUMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPVVQxICovCisjZGVmaW5lIFdNODk1NV9ST1VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJPVVQxICovCisjZGVmaW5lIFdNODk1NV9ST1VUMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJPVVQxICovCisjZGVmaW5lIFdNODk1NV9ST1VUMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJPVVQxICovCisjZGVmaW5lIFdNODk1NV9ST1VUMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPVVQxICovCisjZGVmaW5lIFdNODk1NV9MT1VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExPVVQyICovCisjZGVmaW5lIFdNODk1NV9MT1VUMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExPVVQyICovCisjZGVmaW5lIFdNODk1NV9MT1VUMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExPVVQyICovCisjZGVmaW5lIFdNODk1NV9MT1VUMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPVVQyICovCisjZGVmaW5lIFdNODk1NV9ST1VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFJPVVQyICovCisjZGVmaW5lIFdNODk1NV9ST1VUMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFJPVVQyICovCisjZGVmaW5lIFdNODk1NV9ST1VUMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJPVVQyICovCisjZGVmaW5lIFdNODk1NV9ST1VUMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPVVQyICovCisjZGVmaW5lIFdNODk1NV9NT05PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1PTk8gKi8KKyNkZWZpbmUgV004OTU1X01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTU9OTyAqLworI2RlZmluZSBXTTg5NTVfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1PTk8gKi8KKyNkZWZpbmUgV004OTU1X09VVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogT1VUMyAqLworI2RlZmluZSBXTTg5NTVfT1VUM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBPVVQzICovCisjZGVmaW5lIFdNODk1NV9PVVQzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDMgKi8KKyNkZWZpbmUgV004OTU1X09VVDNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUMyAqLworCisvKgorICogUjI3ICgweDFCKSAtIEFkZGl0aW9uYWwgQ29udHJvbCAoMykKKyAqLworI2RlZmluZSBXTTg5NTVfVlJPSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk1NV9WUk9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTU1X1ZST0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5NTVfVlJPSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWUk9JICovCisKKy8qCisgKiBSMzQgKDB4MjIpIC0gTGVmdCBvdXQgTWl4ICgxKQorICovCisjZGVmaW5lIFdNODk1NV9MRDJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMkxPICovCisjZGVmaW5lIFdNODk1NV9MRDJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMkxPICovCisjZGVmaW5lIFdNODk1NV9MRDJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEMkxPICovCisjZGVmaW5lIFdNODk1NV9MRDJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEMkxPICovCisjZGVmaW5lIFdNODk1NV9MSTJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMkxPICovCisjZGVmaW5lIFdNODk1NV9MSTJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMkxPICovCisjZGVmaW5lIFdNODk1NV9MSTJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJMkxPICovCisjZGVmaW5lIFdNODk1NV9MSTJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMkxPICovCisjZGVmaW5lIFdNODk1NV9MSTJMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIExJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTEkyTE9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMSTJMT1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSMzUgKDB4MjMpIC0gTGVmdCBvdXQgTWl4ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9SRDJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMkxPICovCisjZGVmaW5lIFdNODk1NV9SRDJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMkxPICovCisjZGVmaW5lIFdNODk1NV9SRDJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEMkxPICovCisjZGVmaW5lIFdNODk1NV9SRDJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEMkxPICovCisjZGVmaW5lIFdNODk1NV9SSTJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMkxPICovCisjZGVmaW5lIFdNODk1NV9SSTJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMkxPICovCisjZGVmaW5lIFdNODk1NV9SSTJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMkxPICovCisjZGVmaW5lIFdNODk1NV9SSTJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMkxPICovCisjZGVmaW5lIFdNODk1NV9SSTJMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIFJJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUkkyTE9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSSTJMT1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSMzYgKDB4MjQpIC0gUmlnaHQgb3V0IE1peCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfTEQyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJSTyAqLworI2RlZmluZSBXTTg5NTVfTEQyUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJSTyAqLworI2RlZmluZSBXTTg5NTVfTEQyUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRDJSTyAqLworI2RlZmluZSBXTTg5NTVfTEQyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRDJSTyAqLworI2RlZmluZSBXTTg5NTVfTEkyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJSTyAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJSTyAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTJSTyAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTJSTyAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBMSTJST1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJST1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJMlJPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTEkyUk9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM3ICgweDI1KSAtIFJpZ2h0IE91dCBNaXggKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X1JEMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JEMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JEMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkQyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JEMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkQyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUkkyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkyUk8gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogUkkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSTJST1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJST1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJJMlJPVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFIzOCAoMHgyNikgLSBNb25vIG91dCBNaXggKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X0xEMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xEMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xEMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTEQyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xEMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEQyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTEkyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkyTU8gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogTEkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJNT1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0RNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRE1FTiAqLworI2RlZmluZSBXTTg5NTVfRE1FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBETUVOICovCisjZGVmaW5lIFdNODk1NV9ETUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERNRU4gKi8KKyNkZWZpbmUgV004OTU1X0RNRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1FTiAqLworCisvKgorICogUjM5ICgweDI3KSAtIE1vbm8gb3V0IE1peCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfUkQyTU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJNTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTU9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJNTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRDJNTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRDJNTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJNTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJNTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSTJNTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTJNTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBSSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJNT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkkyTU9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjQwICgweDI4KSAtIExPVVQyIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9MTzJWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMlZVICovCisjZGVmaW5lIFdNODk1NV9MTzJWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMlZVICovCisjZGVmaW5lIFdNODk1NV9MTzJWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExPMlZVICovCisjZGVmaW5lIFdNODk1NV9MTzJWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMlZVICovCisjZGVmaW5lIFdNODk1NV9MTzJaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMlpDICovCisjZGVmaW5lIFdNODk1NV9MTzJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMlpDICovCisjZGVmaW5lIFdNODk1NV9MTzJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPMlpDICovCisjZGVmaW5lIFdNODk1NV9MTzJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMlpDICovCisjZGVmaW5lIFdNODk1NV9MT1VUMlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTE9VVDJWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMT1VUMlZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gUk9VVDIgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X1JPMlZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk8yVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMlZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk8yVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMlZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUk8yVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMlZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk8yVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8yWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMlpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8yWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMlpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk8yWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk8yWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9VVDJWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBST1VUMlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9ST1VUMlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPVVQyVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0MiAoMHgyQSkgLSBNT05PT1VUIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9NT1pDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1PWkMgKi8KKyNkZWZpbmUgV004OTU1X01PWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTU9aQyAqLworI2RlZmluZSBXTTg5NTVfTU9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1PWkMgKi8KKyNkZWZpbmUgV004OTU1X01PVVRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogTU9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9NT1VUVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1PVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTU9VVFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNT1VUVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0MyAoMHgyQikgLSBDbG9ja2luZyAvIFBMTAorICovCisjZGVmaW5lIFdNODk1NV9NQ0xLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1DTEtTRUwgKi8KKyNkZWZpbmUgV004OTU1X01DTEtTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMS1NFTCAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9NQ0xLU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtTRUwgKi8KKyNkZWZpbmUgV004OTU1X1BMTE9VVERJVjIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUExMT1VURElWMiAqLworI2RlZmluZSBXTTg5NTVfUExMT1VURElWMl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBQTExPVVRESVYyICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTE9VVERJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogUExMT1VURElWMiAqLworI2RlZmluZSBXTTg5NTVfUExMX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBQTExfUkIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExfUkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFBMTF9SQiAqLworI2RlZmluZSBXTTg5NTVfUExMX1JCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQTExfUkIgKi8KKyNkZWZpbmUgV004OTU1X1BMTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUExMRU4gKi8KKyNkZWZpbmUgV004OTU1X1BMTEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUExMRU4gKi8KKyNkZWZpbmUgV004OTU1X1BMTEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUExMRU4gKi8KKyNkZWZpbmUgV004OTU1X1BMTEVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUExMRU4gKi8KKworLyoKKyAqIFI0NCAoMHgyQykgLSBQTEwgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTU1X05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogTiAtIFs4OjVdICovCisjZGVmaW5lIFdNODk1NV9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE4gLSBbODo1XSAqLworI2RlZmluZSBXTTg5NTVfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBOIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTU1X0tfMjFfMThfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSygyMToxOCkgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfS18yMV8xOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBLKDIxOjE4KSAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9LXzIxXzE4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEsoMjE6MTgpIC0gWzM6MF0gKi8KKworLyoKKyAqIFI0NSAoMHgyRCkgLSBQTEwgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004OTU1X0tfMTdfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRiAgLyogSygxNzo5KSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzE3XzlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEsoMTc6OSkgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfS18xN185X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBLKDE3OjkpIC0gWzg6MF0gKi8KKworLyoKKyAqIFI0NiAoMHgyRSkgLSBQTEwgQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004OTU1X0tfOF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRiAgLyogSyg4OjApIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfOF8wX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSyg4OjApIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfOF8wX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogSyg4OjApIC0gWzg6MF0gKi8KKworLyoKKyAqIFI1OSAoMHgzQikgLSBQTEwgQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004OTU1X0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogS0VOICovCisjZGVmaW5lIFdNODk1NV9LRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEtFTiAqLworI2RlZmluZSBXTTg5NTVfS0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBLRU4gKi8KKyNkZWZpbmUgV004OTU1X0tFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogS0VOICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKaW5kZXggYTgwMDdkNS4uZDIzNDJjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCkBAIC0xMDIyLDYgKzEwMjIsOSBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7CisJCWlmIChyZWdfY2FjaGVbaV0gPT0gd204OTYxX3JlZ19kZWZhdWx0c1tpXSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChpID09IFdNODk2MV9TT0ZUV0FSRV9SRVNFVCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwppbmRleCA4ODEyNzUxLi5lZTYzN2FmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKQEAgLTE3MCw2ICsxNzAsMTAgQEAKIAogU09DX1NJTkdMRSgiQ2FwdHVyZSBCb29zdCgrMjBkQikiLCBXTTg5NzRfQURDQk9PU1QsICA4LCAxLCAwKSwKIFNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgV004OTc0X01PTk9NSVgsIDYsIDEsIDEpLAorCisvKiBEQUMgLyBBREMgb3ZlcnNhbXBsaW5nICovCitTT0NfU0lOR0xFKCJEQUMgMTI4eCBPdmVyc2FtcGxpbmcgU3dpdGNoIiwgV004OTc0X0RBQywgOCwgMSwgMCksCitTT0NfU0lOR0xFKCJBREMgMTI4eCBPdmVyc2FtcGxpbmcgU3dpdGNoIiwgV004OTc0X0FEQywgOCwgMSwgMCksCiB9OwogCiAvKiBTcGVha2VyIE91dHB1dCBNaXhlciAqLwpAQCAtMzgxLDE0ICszODUsNiBAQAogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSykgJiAweDExZjsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0NMT0NLLCByZWcgfCBkaXYpOwogCQlicmVhazsKLQljYXNlIFdNODk3NF9BRENDTEs6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X0FEQykgJiAweDFmNzsKLQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0FEQywgcmVnIHwgZGl2KTsKLQkJYnJlYWs7Ci0JY2FzZSBXTTg5NzRfREFDQ0xLOgotCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9EQUMpICYgMHgxZjc7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9EQUMsIHJlZyB8IGRpdik7Ci0JCWJyZWFrOwogCWNhc2UgV004OTc0X0JDTEtESVY6CiAJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X0NMT0NLKSAmIDB4MWUzOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfQ0xPQ0ssIHJlZyB8IGRpdik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaAppbmRleCA5OGRlOTU2Mi4uODk2YTdmMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oCkBAIC01NywxNyArNTcsNyBAQAogLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCiAjZGVmaW5lIFdNODk3NF9PUENMS0RJVgkJMAogI2RlZmluZSBXTTg5NzRfTUNMS0RJVgkJMQotI2RlZmluZSBXTTg5NzRfQURDQ0xLCQkyCi0jZGVmaW5lIFdNODk3NF9EQUNDTEsJCTMKLSNkZWZpbmUgV004OTc0X0JDTEtESVYJCTQKLQotLyogREFDIGNsb2NrIGRpdmlkZXJzICovCi0jZGVmaW5lIFdNODk3NF9EQUNDTEtfRjIJKDEgPDwgMykKLSNkZWZpbmUgV004OTc0X0RBQ0NMS19GNAkoMCA8PCAzKQotCi0vKiBBREMgY2xvY2sgZGl2aWRlcnMgKi8KLSNkZWZpbmUgV004OTc0X0FEQ0NMS19GMgkoMSA8PCAzKQotI2RlZmluZSBXTTg5NzRfQURDQ0xLX0Y0CSgwIDw8IDMpCisjZGVmaW5lIFdNODk3NF9CQ0xLRElWCQkyCiAKIC8qIFBMTCBPdXQgZGl2aWRlcnMgKi8KICNkZWZpbmUgV004OTc0X09QQ0xLRElWXzEJKDAgPDwgNCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmI1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCkBAIC0wLDAgKzEsMTE0OSBAQAorLyoKKyAqIHdtODk3OC5jICAtLSAgV004OTc4IEFMU0EgU29DIEF1ZGlvIENvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBCYXNlZCBvbiB3bTg5NzQgYW5kIHdtODk5MCBieSBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAid204OTc4LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTc4X2NvZGVjOworCisvKiB3bTg5NzggcmVnaXN0ZXIgY2FjaGUuIE5vdGUgdGhhdCByZWdpc3RlciAwIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUuICovCitzdGF0aWMgY29uc3QgdTE2IHdtODk3OF9yZWdbV004OTc4X0NBQ0hFUkVHTlVNXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MDAuLi4weDAzICovCisJMHgwMDUwLCAweDAwMDAsIDB4MDE0MCwgMHgwMDAwLAkvKiAweDA0Li4uMHgwNyAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBmZiwJLyogMHgwOC4uLjB4MGIgKi8KKwkweDAwZmYsIDB4MDAwMCwgMHgwMTAwLCAweDAwZmYsCS8qIDB4MGMuLi4weDBmICovCisJMHgwMGZmLCAweDAwMDAsIDB4MDEyYywgMHgwMDJjLAkvKiAweDEwLi4uMHgxMyAqLworCTB4MDAyYywgMHgwMDJjLCAweDAwMmMsIDB4MDAwMCwJLyogMHgxNC4uLjB4MTcgKi8KKwkweDAwMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MTguLi4weDFiICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDFjLi4uMHgxZiAqLworCTB4MDAzOCwgMHgwMDBiLCAweDAwMzIsIDB4MDAwMCwJLyogMHgyMC4uLjB4MjMgKi8KKwkweDAwMDgsIDB4MDAwYywgMHgwMDkzLCAweDAwZTksCS8qIDB4MjQuLi4weDI3ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDI4Li4uMHgyYiAqLworCTB4MDAzMywgMHgwMDEwLCAweDAwMTAsIDB4MDEwMCwJLyogMHgyYy4uLjB4MmYgKi8KKwkweDAxMDAsIDB4MDAwMiwgMHgwMDAxLCAweDAwMDEsCS8qIDB4MzAuLi4weDMzICovCisJMHgwMDM5LCAweDAwMzksIDB4MDAzOSwgMHgwMDM5LAkvKiAweDM0Li4uMHgzNyAqLworCTB4MDAwMSwJMHgwMDAxLAkJCS8qIDB4MzguLi4weDNiICovCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5NzhfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdW5zaWduZWQgaW50IGZfcGxsb3V0OworCXVuc2lnbmVkIGludCBmX21jbGs7CisJdW5zaWduZWQgaW50IGZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGZfb3BjbGs7CisJaW50IG1jbGtfaWR4OworCWVudW0gd204OTc4X3N5c2Nsa19zcmMgc3lzY2xrOworCXUxNiByZWdfY2FjaGVbV004OTc4X0NBQ0hFUkVHTlVNXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfY29tcGFuZGluZ1tdID0geyJPZmYiLCAiTkMiLCAidS1sYXciLCAiQS1sYXcifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXFtb2RlW10gPSB7IkNhcHR1cmUiLCAiUGxheWJhY2sifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYndbXSA9IHsiTmFycm93IiwgIldpZGUifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXExW10gPSB7IjgwSHoiLCAiMTA1SHoiLCAiMTM1SHoiLCAiMTc1SHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXEyW10gPSB7IjIzMEh6IiwgIjMwMEh6IiwgIjM4NUh6IiwgIjUwMEh6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxM1tdID0geyI2NTBIeiIsICI4NTBIeiIsICIxLjFrSHoiLCAiMS40a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxNFtdID0geyIxLjhrSHoiLCAiMi40a0h6IiwgIjMuMmtIeiIsICI0LjFrSHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXE1W10gPSB7IjUuM2tIeiIsICI2LjlrSHoiLCAiOWtIeiIsICIxMS43a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2FsYzNbXSA9IHsiQUxDIiwgIkxpbWl0ZXIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYWxjMVtdID0geyJPZmYiLCAiUmlnaHQiLCAiTGVmdCIsICJCb3RoIn07CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhZGNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMSwKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChkYWNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMywKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcW1vZGUsIFdNODk3OF9FUTEsIDgsIHdtODk3OF9lcW1vZGUpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxMSwgV004OTc4X0VRMSwgNSwgd204OTc4X2VxMSk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyYncsIFdNODk3OF9FUTIsIDgsIHdtODk3OF9idyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyLCBXTTg5NzhfRVEyLCA1LCB3bTg5NzhfZXEyKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTNidywgV004OTc4X0VRMywgOCwgd204OTc4X2J3KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTMsIFdNODk3OF9FUTMsIDUsIHdtODk3OF9lcTMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNGJ3LCBXTTg5NzhfRVE0LCA4LCB3bTg5NzhfYncpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNCwgV004OTc4X0VRNCwgNSwgd204OTc4X2VxNCk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXE1LCBXTTg5NzhfRVE1LCA1LCB3bTg5NzhfZXE1KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhbGMzLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgOCwgd204OTc4X2FsYzMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGFsYzEsIFdNODk3OF9BTENfQ09OVFJPTF8xLCA3LCB3bTg5NzhfYWxjMSk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnBnYV90bHYsIC0xMjAwLCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3BrX3RsdiwgLTU3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYm9vc3RfdGx2LCAtMTUwMCwgMzAwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9zbmRfY29udHJvbHNbXSA9IHsKKworCVNPQ19TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKKwkJV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMCwgMSwgMCksCisKKwlTT0NfRU5VTSgiQURDIENvbXBhbmRpbmciLCBhZGNfY29tcGFuZCksCisJU09DX0VOVU0oIkRBQyBDb21wYW5kaW5nIiwgZGFjX2NvbXBhbmQpLAorCisJU09DX0RPVUJMRSgiREFDIEludmVyc2lvbiBTd2l0Y2giLCBXTTg5NzhfREFDX0NPTlRST0wsIDAsIDEsIDEsIDApLAorCisJU09DX0RPVUJMRV9SX1RMVigiUENNIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwkJMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCisKKwlTT0NfU0lOR0xFKCJIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiSGlnaCBQYXNzIEN1dCBPZmYiLCBXTTg5NzhfQURDX0NPTlRST0wsIDQsIDcsIDApLAorCVNPQ19ET1VCTEUoIkFEQyBJbnZlcnNpb24gU3dpdGNoIiwgV004OTc4X0FEQ19DT05UUk9MLCAwLCAxLCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkFEQyBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9BRENfRElHSVRBTF9WT0xVTUUsIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJCTAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBGdW5jdGlvbiIsIGVxbW9kZSksCisJU09DX0VOVU0oIkVRMSBDdXQgT2ZmIiwgZXExKSwKKwlTT0NfU0lOR0xFX1RMVigiRVExIFZvbHVtZSIsIFdNODk3OF9FUTEsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFcXVhbGlzZXIgRVEyIEJhbmR3aXRoIiwgZXEyYncpLAorCVNPQ19FTlVNKCJFUTIgQ3V0IE9mZiIsIGVxMiksCisJU09DX1NJTkdMRV9UTFYoIkVRMiBWb2x1bWUiLCBXTTg5NzhfRVEyLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfRU5VTSgiRXF1YWxpc2VyIEVRMyBCYW5kd2l0aCIsIGVxM2J3KSwKKwlTT0NfRU5VTSgiRVEzIEN1dCBPZmYiLCBlcTMpLAorCVNPQ19TSU5HTEVfVExWKCJFUTMgVm9sdW1lIiwgV004OTc4X0VRMywgIDAsIDI0LCAxLCBlcV90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBFUTQgQmFuZHdpdGgiLCBlcTRidyksCisJU09DX0VOVU0oIkVRNCBDdXQgT2ZmIiwgZXE0KSwKKwlTT0NfU0lOR0xFX1RMVigiRVE0IFZvbHVtZSIsIFdNODk3OF9FUTQsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFUTUgQ3V0IE9mZiIsIGVxNSksCisJU09DX1NJTkdMRV9UTFYoIkVRNSBWb2x1bWUiLCBXTTg5NzhfRVE1LCAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFN3aXRjaCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA4LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBEZWNheSIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA0LCAxNSwgMCksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgQXR0YWNrIiwKKwkJV004OTc4X0RBQ19MSU1JVEVSXzEsIDAsIDE1LCAwKSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFRocmVzaG9sZCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCA0LCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBCb29zdCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCAwLCAxNSwgMCksCisKKwlTT0NfRU5VTSgiQUxDIEVuYWJsZSBTd2l0Y2giLCBhbGMxKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNaW4gR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAwLCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNYXggR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAzLCA3LCAwKSwKKworCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEhvbGQiLCBXTTg5NzhfQUxDX0NPTlRST0xfMiwgNCwgNywgMCksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgVGFyZ2V0IiwgV004OTc4X0FMQ19DT05UUk9MXzIsIDAsIDE1LCAwKSwKKworCVNPQ19FTlVNKCJBTEMgQ2FwdHVyZSBNb2RlIiwgYWxjMyksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgRGVjYXkiLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgNCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEF0dGFjayIsIFdNODk3OF9BTENfQ09OVFJPTF8zLCAwLCAxNSwgMCksCisKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFN3aXRjaCIsIFdNODk3OF9OT0lTRV9HQVRFLCAzLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCVdNODk3OF9OT0lTRV9HQVRFLCAwLCA3LCAwKSwKKworCVNPQ19ET1VCTEVfUigiQ2FwdHVyZSBQR0EgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLCBXTTg5NzhfUklHSFRfSU5QX1BHQV9DT05UUk9MLAorCQk3LCAxLCAwKSwKKworCS8qIE9VVDEgLSBIZWFkcGhvbmVzICovCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgUGxheWJhY2sgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MLCA3LCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJCTAsIDYzLCAwLCBzcGtfdGx2KSwKKworCS8qIE9VVDIgLSBTcGVha2VycyAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBQbGF5YmFjayBaQyBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNywgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJCVdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTCwgV004OTc4X1JPVVQyX1NQS19DT05UUk9MLAorCQkwLCA2MywgMCwgc3BrX3RsdiksCisKKwkvKiBPVVQzLzQgLSBMaW5lIE91dHB1dCAqLworCVNPQ19ET1VCTEVfUigiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQlXTTg5NzhfT1VUM19NSVhFUl9DT05UUk9MLCBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MLCA2LCAxLCAxKSwKKworCS8qIE1peGVyICMzOiBCb29zdCAoSW5wdXQpIG1peGVyICovCisJU09DX0RPVUJMRV9SKCJQR0EgQm9vc3QgKCsyMGRCKSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTgsIDEsIDApLAorCVNPQ19ET1VCTEVfUl9UTFYoIkwyL1IyIEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTQsIDcsIDAsIGJvb3N0X3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiQXV4IEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTAsIDcsIDAsIGJvb3N0X3RsdiksCisKKwkvKiBJbnB1dCBQR0Egdm9sdW1lICovCisJU09DX0RPVUJMRV9SX1RMVigiSW5wdXQgUEdBIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJMCwgNjMsIDAsIGlucGdhX3RsdiksCisKKwkvKiBIZWFkcGhvbmUgKi8KKwlTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsIDYsIDEsIDEpLAorCisJLyogU3BlYWtlciAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNiwgMSwgMSksCisKKwkvKiBEQUMgLyBBREMgb3ZlcnNhbXBsaW5nICovCisJU09DX1NJTkdMRSgiREFDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9EQUNfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiQURDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCit9OworCisvKiBNaXhlciAjMTogT3V0cHV0IChPVVQxLCBPVVQyKSBNaXhlcjogbWl4IEFVWCwgSW5wdXQgbWl4ZXIgb3V0cHV0IGFuZCBEQUMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9yaWdodF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9SSUdIVF9NSVhFUl9DT05UUk9MLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTCwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgV004OTc4X1JJR0hUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworLyogT1VUMy9PVVQ0IE1peGVyIG5vdCBpbXBsZW1lbnRlZCAqLworCisvKiBNaXhlciAjMjogSW5wdXQgUEdBIE11dGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9pbnB1dF9taXhlcltdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTDIgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljTiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNQIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCAwLCAxLCAwKSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc4X3JpZ2h0X2lucHV0X21peGVyW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSMiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgNiwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNOIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pY1AgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk3OF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLAorCQkJIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwkJCSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCksCisKKwkvKiBNaXhlciAjMTogT1VUMSwyICovCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IE91dHB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkyLCAwLCB3bTg5NzhfbGVmdF9vdXRfbWl4ZXIpLAorCVNPQ19NSVhFUl9BUlJBWSgiUmlnaHQgT3V0cHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9vdXRfbWl4ZXIpLAorCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTIsIDAsIHdtODk3OF9sZWZ0X2lucHV0X21peGVyKSwKKwlTT0NfTUlYRVJfQVJSQVkoIlJpZ2h0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9pbnB1dF9taXhlciksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJvb3N0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCSA0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBCb29zdCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IENhcHR1cmUgUEdBIiwgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCQkJIDYsIDEsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IENhcHR1cmUgUEdBIiwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJCSA2LCAxLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIkxlZnQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgOCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IFNwZWFrZXIgT3V0IiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCSA2LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBTcGVha2VyIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDQgVk1JRCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgICA4LCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDQsIDApLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMTUlDTiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTE1JQ1AiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJNSUNOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSTUlDUCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTEFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUkFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTDIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlIyIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTEhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUkhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTFNQSyIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJTUEsiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIE91dHB1dCBtaXhlciAqLworCXsiUmlnaHQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIsICJSQVVYIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IEJvb3N0IE1peGVyIn0sCisKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAiTEFVWCJ9LAorCXsiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgQm9vc3QgTWl4ZXIifSwKKworCS8qIE91dHB1dHMgKi8KKwl7IlJpZ2h0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSSFAiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dCJ9LAorCisJeyJMZWZ0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxIUCIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXQifSwKKworCXsiUmlnaHQgU3BlYWtlciBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSU1BLIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgT3V0In0sCisKKwl7IkxlZnQgU3BlYWtlciBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxTUEsiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE91dCJ9LAorCisJLyogQm9vc3QgTWl4ZXIgKi8KKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJSaWdodCBCb29zdCBNaXhlciJ9LAorCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSQVVYIn0sCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFBHQSJ9LAorCXsiUmlnaHQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiUjIifSwKKworCXsiTGVmdCBBREMiLCBOVUxMLCAiTGVmdCBCb29zdCBNaXhlciJ9LAorCisJeyJMZWZ0IEJvb3N0IE1peGVyIiwgTlVMTCwgIkxBVVgifSwKKwl7IkxlZnQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSJ9LAorCXsiTGVmdCBCb29zdCBNaXhlciIsIE5VTEwsICJMMiJ9LAorCisJLyogSW5wdXQgUEdBICovCisJeyJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBJbnB1dCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IElucHV0IE1peGVyIn0sCisKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIlIyIFN3aXRjaCIsICJSMiJ9LAorCXsiUmlnaHQgSW5wdXQgTWl4ZXIiLCAiTWljTiBTd2l0Y2giLCAiUk1JQ04ifSwKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIlJNSUNQIn0sCisKKwl7IkxlZnQgSW5wdXQgTWl4ZXIiLCAiTDIgU3dpdGNoIiwgIkwyIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY04gU3dpdGNoIiwgIkxNSUNOIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIkxNSUNQIn0sCit9OworCitzdGF0aWMgaW50IHdtODk3OF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTc4X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTc4X2RhcG1fd2lkZ2V0cykpOworCisJLyogc2V0IHVwIHRoZSBXTTg5NzggYXVkaW8gbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXJldHVybiAwOworfQorCisvKiBQTEwgZGl2aXNvcnMgKi8KK3N0cnVjdCB3bTg5NzhfcGxsX2RpdiB7CisJdTMyIGs7CisJdTggbjsKKwl1OCBkaXYyOworfTsKKworI2RlZmluZSBGSVhFRF9QTExfU0laRSAoMSA8PCAyNCkKKworc3RhdGljIHZvaWQgcGxsX2ZhY3RvcnMoc3RydWN0IHdtODk3OF9wbGxfZGl2ICpwbGxfZGl2LCB1bnNpZ25lZCBpbnQgdGFyZ2V0LAorCQkJdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwl1NjQga19wYXJ0OworCXVuc2lnbmVkIGludCBrLCBuX2Rpdiwgbl9tb2Q7CisKKwluX2RpdiA9IHRhcmdldCAvIHNvdXJjZTsKKwlpZiAobl9kaXYgPCA2KSB7CisJCXNvdXJjZSA+Pj0gMTsKKwkJcGxsX2Rpdi0+ZGl2MiA9IDE7CisJCW5fZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCX0gZWxzZSB7CisJCXBsbF9kaXYtPmRpdjIgPSAwOworCX0KKworCWlmIChuX2RpdiA8IDYgfHwgbl9kaXYgPiAxMikKKwkJZGV2X3dhcm4od204OTc4X2NvZGVjLT5kZXYsCisJCQkgIldNODk3OCBOIHZhbHVlIGV4Y2VlZHMgcmVjb21tZW5kZWQgcmFuZ2UhIE4gPSAldVxuIiwKKwkJCSBuX2Rpdik7CisKKwlwbGxfZGl2LT5uID0gbl9kaXY7CisJbl9tb2QgPSB0YXJnZXQgLSBzb3VyY2UgKiBuX2RpdjsKKwlrX3BhcnQgPSBGSVhFRF9QTExfU0laRSAqIChsb25nIGxvbmcpbl9tb2QgKyBzb3VyY2UgLyAyOworCisJZG9fZGl2KGtfcGFydCwgc291cmNlKTsKKworCWsgPSBrX3BhcnQgJiAweEZGRkZGRkZGOworCisJcGxsX2Rpdi0+ayA9IGs7Cit9CisKKy8qIE1DTEsgZGl2aWRlcnMgKi8KK3N0YXRpYyBjb25zdCBpbnQgbWNsa19udW1lcmF0b3JbXQk9IHsxLCAzLCAyLCAzLCA0LCA2LCA4LCAxMn07CitzdGF0aWMgY29uc3QgaW50IG1jbGtfZGVub21pbmF0b3JbXQk9IHsxLCAyLCAxLCAxLCAxLCAxLCAxLCAxfTsKKworLyoKKyAqIGZpbmQgaW5kZXggPj0gaWR4LCBzdWNoIHRoYXQsIGZvciBhIGdpdmVuIGZfb3V0LAorICogMyAqIGZfbWNsayAvIDQgPD0gZl9QTExPVVQgPCAxMyAqIGZfbWNsayAvIDQKKyAqIGZfb3V0IGNhbiBiZSBmXzI1NmZzIG9yIGZfb3BjbGssIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGZfMjU2ZnMuIENhbiBiZQorICogZ2VuZXJhbGlzZWQgZm9yIGZfb3BjbGsgd2l0aCBzdWl0YWJsZSBjb2VmZmljaWVudCBhcnJheXMsIGJ1dCBjdXJyZW50bHkKKyAqIHRoZSBPUENMSyBkaXZpc29yIGlzIGNhbGN1bGF0ZWQgZGlyZWN0bHksIG5vdCBpdGVyYXRpdmVseS4KKyAqLworc3RhdGljIGludCB3bTg5NzhfZW51bV9tY2xrKHVuc2lnbmVkIGludCBmX291dCwgdW5zaWduZWQgaW50IGZfbWNsaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgKmZfcGxsb3V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWNsa19udW1lcmF0b3IpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGZfcGxsb3V0X3g0ID0gNCAqIGZfb3V0ICogbWNsa19udW1lcmF0b3JbaV0gLworCQkJbWNsa19kZW5vbWluYXRvcltpXTsKKwkJaWYgKDMgKiBmX21jbGsgPD0gZl9wbGxvdXRfeDQgJiYgZl9wbGxvdXRfeDQgPCAxMyAqIGZfbWNsaykgeworCQkJKmZfcGxsb3V0ID0gZl9wbGxvdXRfeDQgLyA0OworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSBpbnRlcm5hbCBmcmVxdWVuY2llcyBhbmQgZGl2aWRlcnMsIGFjY29yZGluZyB0byBGaWd1cmUgNDAKKyAqICJQTEwgYW5kIENsb2NrIFNlbGVjdCBDaXJjdWl0IiBpbiBXTTg5NzggZGF0YXNoZWV0IFJldi4gMi42CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2NvbmZpZ3VyZV9wbGwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTc4X3BsbF9kaXYgcGxsX2RpdjsKKwl1bnNpZ25lZCBpbnQgZl9vcGNsayA9IHdtODk3OC0+Zl9vcGNsaywgZl9tY2xrID0gd204OTc4LT5mX21jbGssCisJCWZfMjU2ZnMgPSB3bTg5NzgtPmZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGYyOworCisJaWYgKCFmX21jbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZfb3BjbGspIHsKKwkJdW5zaWduZWQgaW50IG9wY2xrX2RpdjsKKwkJLyogQ2Fubm90IHNldCB1cCBNQ0xLIGRpdmlkZXIgbm93LCBkbyBsYXRlciAqLworCQl3bTg5NzgtPm1jbGtfaWR4ID0gLTE7CisKKwkJLyoKKwkJICogVGhlIHVzZXIgbmVlZHMgT1BDTEsuIENob29zZSBPUENMS0RJViB0byBwdXQKKwkJICogNiA8PSBSID0gZjIgLyBmMSA8IDEzLCAxIDw9IE9QQ0xLRElWIDw9IDQuCisJCSAqIGZfb3BjbGsgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gT1BDTEtESVYsIHdoZXJlCisJCSAqIHByZXNjYWxlID0gMSwgb3IgcHJlc2NhbGUgPSAyLiBQcmVzY2FsZSBpcyBjYWxjdWxhdGVkIGluc2lkZQorCQkgKiBwbGxfZmFjdG9ycygpLiBXZSBoYXZlIHRvIHNlbGVjdCBmX1BMTE9VVCwgc3VjaCB0aGF0CisJCSAqIGZfbWNsayAqIDMgLyA0IDw9IGZfUExMT1VUIDwgZl9tY2xrICogMTMgLyA0LiBNdXN0IGJlCisJCSAqIGZfbWNsayAqIDMgLyAxNiA8PSBmX29wY2xrIDwgZl9tY2xrICogMTMgLyA0LgorCQkgKi8KKwkJaWYgKDE2ICogZl9vcGNsayA8IDMgKiBmX21jbGsgfHwgNCAqIGZfb3BjbGsgPj0gMTMgKiBmX21jbGspCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoNCAqIGZfb3BjbGsgPCAzICogZl9tY2xrKQorCQkJLyogSGF2ZSB0byB1c2UgT1BDTEtESVYgKi8KKwkJCW9wY2xrX2RpdiA9ICgzICogZl9tY2xrIC8gNCArIGZfb3BjbGsgLSAxKSAvIGZfb3BjbGs7CisJCWVsc2UKKwkJCW9wY2xrX2RpdiA9IDE7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IE9QQ0xLRElWPSVkXG4iLCBfX2Z1bmNfXywgb3BjbGtfZGl2KTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCAweDMwLAorCQkJCSAgICAob3BjbGtfZGl2IC0gMSkgPDwgNCk7CisKKwkJd204OTc4LT5mX3BsbG91dCA9IGZfb3BjbGsgKiBvcGNsa19kaXY7CisJfSBlbHNlIGlmIChmXzI1NmZzKSB7CisJCS8qCisJCSAqIE5vdCB1c2luZyBPUENMSywgYnV0IFBMTCBpcyB1c2VkIGZvciB0aGUgY29kZWMsIGNob29zZSBSOgorCQkgKiA2IDw9IFIgPSBmMiAvIGYxIDwgMTMsIHRvIHB1dCAxIDw9IE1DTEtESVYgPD0gMTIuCisJCSAqIGZfMjU2ZnMgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gTUNMS0RJViwgd2hlcmUKKwkJICogcHJlc2NhbGUgPSAxLCBvciBwcmVzY2FsZSA9IDIuIFByZXNjYWxlIGlzIGNhbGN1bGF0ZWQgaW5zaWRlCisJCSAqIHBsbF9mYWN0b3JzKCkuIFdlIGhhdmUgdG8gc2VsZWN0IGZfUExMT1VULCBzdWNoIHRoYXQKKwkJICogZl9tY2xrICogMyAvIDQgPD0gZl9QTExPVVQgPCBmX21jbGsgKiAxMyAvIDQuIE11c3QgYmUKKwkJICogZl9tY2xrICogMyAvIDQ4IDw9IGZfMjU2ZnMgPCBmX21jbGsgKiAxMyAvIDQuIFRoaXMgbWVhbnMgTUNMSworCQkgKiBtdXN0IGJlIDMuNzgxTUh6IDw9IGZfTUNMSyA8PSAzMi43NjhNSHoKKwkJICovCisJCWludCBpZHggPSB3bTg5NzhfZW51bV9tY2xrKGZfMjU2ZnMsIGZfbWNsaywgJndtODk3OC0+Zl9wbGxvdXQpOworCQlpZiAoaWR4IDwgMCkKKwkJCXJldHVybiBpZHg7CisKKwkJd204OTc4LT5tY2xrX2lkeCA9IGlkeDsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZjIgPSB3bTg5NzgtPmZfcGxsb3V0ICogNDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmX01DTEs9JXVIeiwgZl9QTExPVVQ9JXVIelxuIiwgX19mdW5jX18sCisJCXdtODk3OC0+Zl9tY2xrLCB3bTg5NzgtPmZfcGxsb3V0KTsKKworCXBsbF9mYWN0b3JzKCZwbGxfZGl2LCBmMiwgd204OTc4LT5mX21jbGspOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IGNhbGN1bGF0ZWQgUExMIE49MHgleCwgSz0weCV4LCBkaXYyPSVkXG4iLAorCQlfX2Z1bmNfXywgcGxsX2Rpdi5uLCBwbGxfZGl2LmssIHBsbF9kaXYuZGl2Mik7CisKKwkvKiBUdXJuIFBMTCBvZmYgZm9yIGNvbmZpZ3VyYXRpb24uLi4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDIwLCAwKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfTiwgKHBsbF9kaXYuZGl2MiA8PCA0KSB8IHBsbF9kaXYubik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BMTF9LMSwgcGxsX2Rpdi5rID4+IDE4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUExMX0syLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfSzMsIHBsbF9kaXYuayAmIDB4MWZmKTsKKworCS8qIC4uLmFuZCBvbiBhZ2FpbiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDB4MjApOworCisJaWYgKGZfb3BjbGspCisJCS8qIE91dHB1dCBQTEwgKE9QQ0xLKSB0byBHUElPMSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCA3LCA0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlIFdNODk3OCBjbG9jayBkaXZpZGVycy4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgV004OTc4X09QQ0xLUkFURToKKwkJd204OTc4LT5mX29wY2xrID0gZGl2OworCisJCWlmICh3bTg5NzgtPmZfbWNsaykKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZSBNQ0xLIGZyZXF1ZW5jeSwgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZAorCQkJICogT1BDTEssIGNvbmZpZ3VyZSB0aGUgUExMIGJhc2VkIG9uIHRoYXQgYW5kIHN0YXJ0IGl0CisJCQkgKiBhbmQgT1BDTEsgaW1tZWRpYXRlbHkuIFdlIHdpbGwgY29uZmlndXJlIFBMTCB0byBtYXRjaAorCQkJICogdXNlci1yZXF1ZXN0ZWQgT1BDTEsgZnJxdWVuY3kgYXMgZ29vZCBhcyBwb3NzaWJsZS4KKwkJCSAqIEluIGZhY3QsIGl0IGlzIGxpa2VseSwgdGhhdCBtYXRjaGluZyB0aGUgc2FtcGxpbmcKKwkJCSAqIHJhdGUsIHdoZW4gaXQgYmVjb21lcyBrbm93biwgaXMgbW9yZSBpbXBvcnRhbnQsIGFuZAorCQkJICogd2Ugd2lsbCBub3QgYmUgcmVjb25maWd1cmluZyBQTEwgdGhlbiwgYmVjYXVzZSB3ZQorCQkJICogbXVzdCBub3QgaW50ZXJydXB0IE9QQ0xLLiBCdXQgaXQgc2hvdWxkIGJlIGZpbmUsCisJCQkgKiBiZWNhdXNlIHR5cGljYWxseSB0aGUgdXNlciB3aWxsIHJlcXVlc3QgT1BDTEsgdG8gcnVuCisJCQkgKiBhdCAyNTZmcyBvciA1MTJmcywgYW5kIGZvciB0aGVzZSBjYXNlcyB3ZSB3aWxsIGFsc28KKwkJCSAqIGZpbmQgYW4gZXhhY3QgTUNMSyBkaXZpZGVyIGNvbmZpZ3VyYXRpb24gLSBpdCB3aWxsCisJCQkgKiBiZSBlcXVhbCB0byBvciBkb3VibGUgdGhlIE9QQ0xLIGRpdmlzb3IuCisJCQkgKi8KKwkJCXJldCA9IHdtODk3OF9jb25maWd1cmVfcGxsKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NzhfQkNMS0RJVjoKKwkJaWYgKGRpdiAmIH4weDFjKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywgMHgxYywgZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IElEICVkLCB2YWx1ZSAldVxuIiwgX19mdW5jX18sIGRpdl9pZCwgZGl2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBAZnJlcToJd2hlbiAuc2V0X3BsbCgpIHVzIG5vdCB1c2VkLCBmcmVxIGlzIGNvZGVjIE1DTEsgaW5wdXQgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgY2xrX2lkLAorCQkJCSB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBJRCAlZCwgZnJlcSAldVxuIiwgX19mdW5jX18sIGNsa19pZCwgZnJlcSk7CisKKwlpZiAoZnJlcSkgeworCQl3bTg5NzgtPmZfbWNsayA9IGZyZXE7CisKKwkJLyogRXZlbiBpZiBNQ0xLIGlzIHVzZWQgZm9yIHN5c3RlbSBjbG9jaywgbWlnaHQgaGF2ZSB0byBkcml2ZSBPUENMSyAqLworCQlpZiAod204OTc4LT5mX29wY2xrKQorCQkJcmV0ID0gd204OTc4X2NvbmZpZ3VyZV9wbGwoY29kZWMpOworCisJCS8qIE91ciBzeXNjbGsgaXMgZml4ZWQgdG8gMjU2ICogZnMsIHdpbGwgY29uZmlndXJlIGluIC5od19wYXJhbXMoKSAgKi8KKworCQlpZiAoIXJldCkKKwkJCXdtODk3OC0+c3lzY2xrID0gY2xrX2lkOworCX0KKworCWlmICh3bTg5NzgtPnN5c2NsayA9PSBXTTg5NzhfUExMICYmICghZnJlcSB8fCBjbGtfaWQgPT0gV004OTc4X01DTEspKSB7CisJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcsIDB4MTAwLCAwKTsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisKKwkJLyogVHVybiBvZmYgUExMICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDApOworCQl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9NQ0xLOworCQl3bTg5NzgtPmZfcGxsb3V0ID0gMDsKKwkJd204OTc4LT5mX29wY2xrID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwkvKgorCSAqIEJDTEsgcG9sYXJpdHkgbWFzayA9IDB4MTAwLCBMUkMgY2xvY2sgcG9sYXJpdHkgbWFzayA9IDB4ODAsCisJICogRGF0YSBGb3JtYXQgbWFzayA9IDB4MTg6IGFsbCB3aWxsIGJlIGNhbGN1bGF0ZWQgYW5ldworCSAqLworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSkgJiB+MHgxOTg7CisJdTE2IGNsayA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0NMT0NLSU5HKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNsayB8PSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWNsayAmPSB+MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZhY2UgfD0gMHg4OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlpZmFjZSB8PSAweDE4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJaWZhY2UgfD0gMHgxODA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWlmYWNlIHw9IDB4MTAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlpZmFjZSB8PSAweDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQVVESU9fSU5URVJGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0NMT0NLSU5HLCBjbGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwkvKiBXb3JkIGxlbmd0aCBtYXNrID0gMHg2MCAqLworCXUxNiBpZmFjZV9jdGwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9BVURJT19JTlRFUkZBQ0UpICYgfjB4NjA7CisJLyogU2FtcGxpbmcgcmF0ZSBtYXNrID0gMHhlIChmb3IgZmlsdGVycykgKi8KKwl1MTYgYWRkX2N0bCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FERElUSU9OQUxfQ09OVFJPTCkgJiB+MHhlOworCXUxNiBjbGtpbmcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9DTE9DS0lORyk7CisJZW51bSB3bTg5Nzhfc3lzY2xrX3NyYyBjdXJyZW50X2Nsa19pZCA9IGNsa2luZyAmIDB4MTAwID8KKwkJV004OTc4X1BMTCA6IFdNODk3OF9NQ0xLOworCXVuc2lnbmVkIGludCBmX3NlbCwgZGlmZiwgZGlmZl9iZXN0ID0gSU5UX01BWDsKKwlpbnQgaSwgYmVzdCA9IDA7CisKKwlpZiAoIXdtODk3OC0+Zl9tY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2VfY3RsIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmYWNlX2N0bCB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZmFjZV9jdGwgfD0gMHg2MDsKKwkJYnJlYWs7CisJfQorCisJLyogZmlsdGVyIGNvZWZmaWNpZW50ICovCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA4MDAwOgorCQlhZGRfY3RsIHw9IDB4NSA8PCAxOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCQlhZGRfY3RsIHw9IDB4NCA8PCAxOworCQlicmVhazsKKwljYXNlIDE2MDAwOgorCQlhZGRfY3RsIHw9IDB4MyA8PCAxOworCQlicmVhazsKKwljYXNlIDIyMDUwOgorCQlhZGRfY3RsIHw9IDB4MiA8PCAxOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQlhZGRfY3RsIHw9IDB4MSA8PCAxOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCWNhc2UgNDgwMDA6CisJCWJyZWFrOworCX0KKworCS8qIFNhbXBsaW5nIHJhdGUgaXMga25vd24gbm93LCBjYW4gY29uZmlndXJlIHRoZSBNQ0xLIGRpdmlkZXIgKi8KKwl3bTg5NzgtPmZfMjU2ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2OworCisJaWYgKHdtODk3OC0+c3lzY2xrID09IFdNODk3OF9NQ0xLKSB7CisJCXdtODk3OC0+bWNsa19pZHggPSAtMTsKKwkJZl9zZWwgPSB3bTg5NzgtPmZfbWNsazsKKwl9IGVsc2UgeworCQlpZiAoIXdtODk3OC0+Zl9wbGxvdXQpIHsKKwkJCS8qIFdlIG9ubHkgZW50ZXIgaGVyZSwgaWYgT1BDTEsgaXMgbm90IHVzZWQgKi8KKwkJCWludCByZXQgPSB3bTg5NzhfY29uZmlndXJlX3BsbChjb2RlYyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWZfc2VsID0gd204OTc4LT5mX3BsbG91dDsKKwl9CisKKwlpZiAod204OTc4LT5tY2xrX2lkeCA8IDApIHsKKwkJLyogRWl0aGVyIE1DTEsgaXMgdXNlZCBkaXJlY3RseSwgb3IgT1BDTEsgaXMgdXNlZCAqLworCQlpZiAoZl9zZWwgPCB3bTg5NzgtPmZfMjU2ZnMgfHwgZl9zZWwgPiAxMiAqIHdtODk3OC0+Zl8yNTZmcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jbGtfbnVtZXJhdG9yKTsgaSsrKSB7CisJCQlkaWZmID0gYWJzKHdtODk3OC0+Zl8yNTZmcyAqIDMgLQorCQkJCSAgIGZfc2VsICogMyAqIG1jbGtfZGVub21pbmF0b3JbaV0gLyBtY2xrX251bWVyYXRvcltpXSk7CisKKwkJCWlmIChkaWZmIDwgZGlmZl9iZXN0KSB7CisJCQkJZGlmZl9iZXN0ID0gZGlmZjsKKwkJCQliZXN0ID0gaTsKKwkJCX0KKworCQkJaWYgKCFkaWZmKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogT1BDTEsgbm90IHVzZWQsIGNvZGVjIGRyaXZlbiBieSBQTEwgKi8KKwkJYmVzdCA9IHdtODk3OC0+bWNsa19pZHg7CisJCWRpZmYgPSAwOworCX0KKworCWlmIChkaWZmKQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW1wcmVjaXNlIHNhbXBsaW5nIHJhdGU6ICV1SHolc1xuIiwKKwkJCWZfc2VsICogbWNsa19kZW5vbWluYXRvcltiZXN0XSAvIG1jbGtfbnVtZXJhdG9yW2Jlc3RdIC8gMjU2LAorCQkJd204OTc4LT5zeXNjbGsgPT0gV004OTc4X01DTEsgPworCQkJIiwgY29uc2lkZXIgdXNpbmcgUExMIiA6ICIiKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmbXQgJWQsIHJhdGUgJXUsIE1DTEsgZGl2aXNvciAjJWRcbiIsIF9fZnVuY19fLAorCQlwYXJhbXNfZm9ybWF0KHBhcmFtcyksIHBhcmFtc19yYXRlKHBhcmFtcyksIGJlc3QpOworCisJLyogTUNMSyBkaXZpc29yIG1hc2sgPSAweGUwICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweGUwLCBiZXN0IDw8IDUpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSwgaWZhY2VfY3RsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MLCBhZGRfY3RsKTsKKworCWlmICh3bTg5NzgtPnN5c2NsayAhPSBjdXJyZW50X2Nsa19pZCkgeworCQlpZiAod204OTc4LT5zeXNjbGsgPT0gV004OTc4X1BMTCkKKwkJCS8qIFJ1biBDT0RFQyBmcm9tIFBMTCBpbnN0ZWFkIG9mIE1DTEsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywKKwkJCQkJICAgIDB4MTAwLCAweDEwMCk7CisJCWVsc2UKKwkJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweDEwMCwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWRcbiIsIF9fZnVuY19fLCBtdXRlKTsKKworCWlmIChtdXRlKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfREFDX0NPTlRST0wsIDB4NDAsIDB4NDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0RBQ19DT05UUk9MLCAweDQwLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk3OF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiBwb3dlcjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEpICYgfjM7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJcG93ZXIxIHw9IDE7ICAvKiBWTUlEIDc1ayAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCBwb3dlcjEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQkvKiBiaXQgMzogZW5hYmxlIGJpYXMsIGJpdCAyOiBlbmFibGUgSS9PIHRpZSBvZmYgYnVmZmVyICovCisJCXBvd2VyMSB8PSAweGM7CisKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIEluaXRpYWwgY2FwIGNoYXJnZSBhdCBWTUlEIDVrICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICAgIHBvd2VyMSB8IDB4Myk7CisJCQltZGVsYXkoMTAwKTsKKwkJfQorCisJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgcG93ZXIxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBQcmVzZXJ2ZSBQTEwgLSBPUENMSyBtYXkgYmUgdXNlZCBieSBzb21lb25lICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIH4weDIwLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDApOworCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWQsICV4XG4iLCBfX2Z1bmNfXywgbGV2ZWwsIHBvd2VyMSk7CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk3OF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NzhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTc4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTc4X211dGUsCisJLnNldF9mbXQJPSB3bTg5Nzhfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSB3bTg5Nzhfc2V0X2RhaV9zeXNjbGssCit9OworCisvKiBBbHNvIHN1cHBvcnRzIDEya0h6ICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTc4X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NzggSGlGaSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTc4X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTc4X2RhaSk7CisKK3N0YXRpYyBpbnQgd204OTc4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJLyogQWxzbyBzd2l0Y2ggUExMIG9mZiAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk3OF9yZWcpOyBpKyspIHsKKwkJaWYgKGkgPT0gV004OTc4X1JFU0VUKQorCQkJY29udGludWU7CisJCWlmIChjYWNoZVtpXSAhPSB3bTg5NzhfcmVnW2ldKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworCX0KKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJaWYgKHdtODk3OC0+Zl9wbGxvdXQpCisJCS8qIFN3aXRjaCBQTEwgb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgMHgyMCwgMHgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NzhfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTc4X2NvZGVjOworCWNvZGVjID0gd204OTc4X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5Nzhfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk3OF9zbmRfY29udHJvbHMpKTsKKwl3bTg5NzhfYWRkX3dpZGdldHMoY29kZWMpOworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg5NzhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NzggPSB7CisJLnByb2JlCQk9IHdtODk3OF9wcm9iZSwKKwkucmVtb3ZlCQk9IHdtODk3OF9yZW1vdmUsCisJLnN1c3BlbmQJPSB3bTg5Nzhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdtODk3OF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5NzgpOworCisvKgorICogVGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gYW4gInVwZGF0ZSIgYml0IC0gYml0IDguIFRoaXMgbWVhbnMsIGZvciBleGFtcGxlLAorICogdGhhdCBvbmUgY2FuIHdyaXRlIG5ldyBEQUMgZGlnaXRhbCB2b2x1bWUgZm9yIGJvdGggY2hhbm5lbHMsIGJ1dCBvbmx5IHdoZW4KKyAqIHRoZSB1cGRhdGUgYml0IGlzIHNldCwgd2lsbCBhbHNvIHRoZSB2b2x1bWUgYmUgdXBkYXRlZCAtIHNpbXVsdGFuZW91c2x5IGZvcgorICogYm90aCBjaGFubmVscy4KKyAqLworc3RhdGljIGNvbnN0IGludCB1cGRhdGVfcmVnW10gPSB7CisJV004OTc4X0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCVdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wsCisJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X0xPVVQyX1NQS19DT05UUk9MLAorCVdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk3OF9yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCisJaWYgKHdtODk3OF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk3OCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdG8gUExMLCBpdCBpcyBtb3JlIHByZWNpc2UsIHRoaXMgaXMgYWxzbyB0aGUKKwkgKiBkZWZhdWx0IGhhcmR3YXJlIHNldHRpbmcKKwkgKi8KKwl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9QTEw7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk3ODsKKwljb2RlYy0+bmFtZSA9ICJXTTg5NzgiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5Nzhfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5NzhfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5NzhfQ0FDSEVSRUdOVU07CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NzgtPnJlZ19jYWNoZTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTc4X3JlZywgc2l6ZW9mKHdtODk3OF9yZWcpKTsKKworCS8qCisJICogU2V0IHRoZSB1cGRhdGUgYml0IGluIGFsbCByZWdpc3RlcnMsIHRoYXQgaGF2ZSBvbmUuIFRoaXMgd2F5IGFsbAorCSAqIHdyaXRlcyB0byB0aG9zZSByZWdpc3RlcnMgd2lsbCBhbHNvIGNhdXNlIHRoZSB1cGRhdGUgYml0IHRvIGJlCisJICogd3JpdHRlbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1cGRhdGVfcmVnKTsgaSsrKQorCQkoKHUxNiAqKWNvZGVjLT5yZWdfY2FjaGUpW3VwZGF0ZV9yZWdbaV1dIHw9IDB4MTAwOworCisJLyogUmVzZXQgdGhlIGNvZGVjICovCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1JFU0VULCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5NzhfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODk3OF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NzhfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg5NzgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgdm9pZCB3bTg5NzhfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoJndtODk3OC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk3OF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTc4LT5jb2RlYyk7CisJa2ZyZWUod204OTc4KTsKKwl3bTg5NzhfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODk3OCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5NzhfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5NzggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk3OCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204OTc4X3JlZ2lzdGVyKHdtODk3OCk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODk3OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5NzhfdW5yZWdpc3Rlcih3bTg5NzgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTc4X2kyY19pZFtdID0geworCXsgIndtODk3OCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTc4X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5NzhfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg5NzgiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODk3OF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204OTc4X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODk3OF9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5NzhfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204OTc4X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTc4X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTc4X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTc4IGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVjODMyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApAQCAtMCwwICsxLDg2IEBACisvKgorICogd204OTc4LmgJCS0tICBjb2RlYyBkcml2ZXIgZm9yIFdNODk3OAorICoKKyAqIENvcHlyaWdodCAyMDA5IEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1dNODk3OF9IX18KKyNkZWZpbmUgX19XTTg5NzhfSF9fCisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTc4X1JFU0VUCQkJCTB4MDAKKyNkZWZpbmUgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMQkJMHgwMQorI2RlZmluZSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yCQkweDAyCisjZGVmaW5lIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMJCTB4MDMKKyNkZWZpbmUgV004OTc4X0FVRElPX0lOVEVSRkFDRQkJCTB4MDQKKyNkZWZpbmUgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBXTTg5NzhfQ0xPQ0tJTkcJCQkJMHgwNgorI2RlZmluZSBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MCQkweDA3CisjZGVmaW5lIFdNODk3OF9HUElPX0NPTlRST0wJCQkweDA4CisjZGVmaW5lIFdNODk3OF9KQUNLX0RFVEVDVF9DT05UUk9MXzEJCTB4MDkKKyNkZWZpbmUgV004OTc4X0RBQ19DT05UUk9MCQkJMHgwQQorI2RlZmluZSBXTTg5NzhfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUJCTB4MEIKKyNkZWZpbmUgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRQkJMHgwQworI2RlZmluZSBXTTg5NzhfSkFDS19ERVRFQ1RfQ09OVFJPTF8yCQkweDBECisjZGVmaW5lIFdNODk3OF9BRENfQ09OVFJPTAkJCTB4MEUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FCQkweDBGCisjZGVmaW5lIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUJCTB4MTAKKyNkZWZpbmUgV004OTc4X0VRMQkJCQkweDEyCisjZGVmaW5lIFdNODk3OF9FUTIJCQkJMHgxMworI2RlZmluZSBXTTg5NzhfRVEzCQkJCTB4MTQKKyNkZWZpbmUgV004OTc4X0VRNAkJCQkweDE1CisjZGVmaW5lIFdNODk3OF9FUTUJCQkJMHgxNgorI2RlZmluZSBXTTg5NzhfREFDX0xJTUlURVJfMQkJCTB4MTgKKyNkZWZpbmUgV004OTc4X0RBQ19MSU1JVEVSXzIJCQkweDE5CisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfMQkJCTB4MWIKKyNkZWZpbmUgV004OTc4X05PVENIX0ZJTFRFUl8yCQkJMHgxYworI2RlZmluZSBXTTg5NzhfTk9UQ0hfRklMVEVSXzMJCQkweDFkCisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfNAkJCTB4MWUKKyNkZWZpbmUgV004OTc4X0FMQ19DT05UUk9MXzEJCQkweDIwCisjZGVmaW5lIFdNODk3OF9BTENfQ09OVFJPTF8yCQkJMHgyMQorI2RlZmluZSBXTTg5NzhfQUxDX0NPTlRST0xfMwkJCTB4MjIKKyNkZWZpbmUgV004OTc4X05PSVNFX0dBVEUJCQkweDIzCisjZGVmaW5lIFdNODk3OF9QTExfTgkJCQkweDI0CisjZGVmaW5lIFdNODk3OF9QTExfSzEJCQkJMHgyNQorI2RlZmluZSBXTTg5NzhfUExMX0syCQkJCTB4MjYKKyNkZWZpbmUgV004OTc4X1BMTF9LMwkJCQkweDI3CisjZGVmaW5lIFdNODk3OF8zRF9DT05UUk9MCQkJMHgyOQorI2RlZmluZSBXTTg5NzhfQkVFUF9DT05UUk9MCQkJMHgyYgorI2RlZmluZSBXTTg5NzhfSU5QVVRfQ09OVFJPTAkJCTB4MmMKKyNkZWZpbmUgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MCQkweDJkCisjZGVmaW5lIFdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wJCTB4MmUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0JPT1NUX0NPTlRST0wJCTB4MmYKKyNkZWZpbmUgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MCQkweDMwCisjZGVmaW5lIFdNODk3OF9PVVRQVVRfQ09OVFJPTAkJCTB4MzEKKyNkZWZpbmUgV004OTc4X0xFRlRfTUlYRVJfQ09OVFJPTAkJMHgzMgorI2RlZmluZSBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTAkJMHgzMworI2RlZmluZSBXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTAkJCTB4MzQKKyNkZWZpbmUgV004OTc4X1JPVVQxX0hQX0NPTlRST0wJCQkweDM1CisjZGVmaW5lIFdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTAkJMHgzNgorI2RlZmluZSBXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wJCTB4MzcKKyNkZWZpbmUgV004OTc4X09VVDNfTUlYRVJfQ09OVFJPTAkJMHgzOAorI2RlZmluZSBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MCQkweDM5CisKKyNkZWZpbmUgV004OTc4X0NBQ0hFUkVHTlVNCQkJNTgKKworLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCitlbnVtIHdtODk3OF9jbGtfaWQgeworCVdNODk3OF9PUENMS1JBVEUsCisJV004OTc4X0JDTEtESVYsCit9OworCitlbnVtIHdtODk3OF9zeXNjbGtfc3JjIHsKKwlXTTg5NzhfUExMLAorCVdNODk3OF9NQ0xLCit9OworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk3OF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTc4OworCisjZW5kaWYJLyogX19XTTg5NzhfSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCAzNDE0ODFlLi5hNTRkYzc3YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0xMzE5LDEwICsxMzE5LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQkvKiB3ZSBvbmx5IG5lZWQgdG8gc3VzcGVuZCBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAl3bTg5OTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwogfQpAQCAtMTMzNSwxMCArMTMzMSw2IEBACiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byByZXN1bWUgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwotCWlmICghY29kZWMtPmNhcmQpCi0JCXJldHVybiAwOwotCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTBfcmVnKTsgaSsrKSB7CiAJCWlmIChpICsgMSA9PSBXTTg5OTBfUkVTRVQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwppbmRleCAyOTgxYWZhLi5iZjAyMmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogd204OTkzLmMgLS0gV004OTkzIEFMU0EgU29DIGF1ZGlvIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqIENvcHlyaWdodCAyMDA5LCAyMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKICAqCiAgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogICoKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTI5LDYgKzMwLDE2IEBACiAjaW5jbHVkZSAid204OTkzLmgiCiAjaW5jbHVkZSAid21faHVicy5oIgogCisjZGVmaW5lIFdNODk5M19OVU1fU1VQUExJRVMgNgorc3RhdGljIGNvbnN0IGNoYXIgKndtODk5M19zdXBwbHlfbmFtZXNbV004OTkzX05VTV9TVVBQTElFU10gPSB7CisJIkRDVkREIiwKKwkiREJWREQiLAorCSJBVkREMSIsCisJIkFWREQyIiwKKwkiQ1BWREQiLAorCSJTUEtWREQiLAorfTsKKwogc3RhdGljIHUxNiB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19SRUdJU1RFUl9DT1VOVF0gPSB7CiAJMHg4OTkzLCAgICAgLyogUjAgICAtIFNvZnR3YXJlIFJlc2V0ICovCiAJMHgwMDAwLCAgICAgLyogUjEgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpICovCkBAIC0yMTMsNyArMjI0LDkgQEAKIH07CiAKIHN0cnVjdCB3bTg5OTNfcHJpdiB7CisJc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzX2RhdGE7CiAJdTE2IHJlZ19jYWNoZVtXTTg5OTNfUkVHSVNURVJfQ09VTlRdOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODk5M19OVU1fU1VQUExJRVNdOwogCXN0cnVjdCB3bTg5OTNfcGxhdGZvcm1fZGF0YSBwZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKIAlpbnQgbWFzdGVyOwpAQCAtMjI3LDM2ICsyNDAsOSBAQAogCWludCBjbGFzc193X3VzZXJzOwogCXVuc2lnbmVkIGludCBmbGxfZnJlZjsKIAl1bnNpZ25lZCBpbnQgZmxsX2ZvdXQ7CisJaW50IGZsbF9zcmM7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODk5M19yZWFkX2h3KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTggcmVnKQotewotCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07Ci0JdTE2IGRhdGE7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCS8qIFdyaXRlIHJlZ2lzdGVyICovCi0JeGZlclswXS5hZGRyID0gaTJjLT5hZGRyOwotCXhmZXJbMF0uZmxhZ3MgPSAwOwotCXhmZXJbMF0ubGVuID0gMTsKLQl4ZmVyWzBdLmJ1ZiA9ICZyZWc7Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQl4ZmVyWzFdLmFkZHIgPSBpMmMtPmFkZHI7Ci0JeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOwotCXhmZXJbMV0ubGVuID0gMjsKLQl4ZmVyWzFdLmJ1ZiA9ICh1OCAqKSZkYXRhOwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKGkyYy0+YWRhcHRlciwgeGZlciwgMik7Ci0JaWYgKHJldCAhPSAyKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIDB4JXg6ICVkXG4iLCByZWcsIHJldCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAoZGF0YSA+PiA4KSB8ICgoZGF0YSAmIDB4ZmYpIDw8IDgpOwotfQotCiBzdGF0aWMgaW50IHdtODk5M192b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CkBAIC0yNzEsNDggKzI1Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODk5M19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCUJVR19PTihyZWcgPiBXTTg5OTNfTUFYX1JFR0lTVEVSKTsKLQotCWlmICh3bTg5OTNfdm9sYXRpbGUocmVnKSkKLQkJcmV0dXJuIHdtODk5M19yZWFkX2h3KGNvZGVjLCByZWcpOwotCWVsc2UKLQkJcmV0dXJuIHJlZ19jYWNoZVtyZWddOwotfQotCi1zdGF0aWMgaW50IHdtODk5M193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCXU4IGRhdGFbM107Ci0JaW50IHJldDsKLQotCUJVR19PTihyZWcgPiBXTTg5OTNfTUFYX1JFR0lTVEVSKTsKLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004OTkzIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IHJlZzsKLQlkYXRhWzFdID0gdmFsdWUgPj4gODsKLQlkYXRhWzJdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQlpZiAoIXdtODk5M192b2xhdGlsZShyZWcpKQotCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwotCi0JcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpOwotCi0JaWYgKHJldCA9PSAzKQotCQlyZXR1cm4gMDsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gLUVJTzsKLX0KLQogc3RydWN0IF9mbGxfZGl2IHsKIAl1MTYgZmxsX2ZyYXRpbzsKIAl1MTYgZmxsX291dGRpdjsKQEAgLTQ0MSw5ICszODUsOSBAQAogCQl3bTg5OTMtPmZsbF9mcmVmID0gMDsKIAkJd204OTkzLT5mbGxfZm91dCA9IDA7CiAKLQkJcmVnMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSk7CisJCXJlZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKIAkJcmVnMSAmPSB+V004OTkzX0ZMTF9FTkE7Ci0JCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDUyLDcgKzM5Niw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmVnNSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSk7CisJcmVnNSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUpOwogCXJlZzUgJj0gfldNODk5M19GTExfQ0xLX1NSQ19NQVNLOwogCiAJc3dpdGNoIChmbGxfaWQpIHsKQEAgLTQ3NCwzOCArNDE4LDM5IEBACiAKIAkvKiBBbnkgRkxMIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVzIHRoYXQgdGhlIEZMTCBiZQogCSAqIGRpc2FibGVkIGZpcnN0LiAqLwotCXJlZzEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEpOworCXJlZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKIAlyZWcxICY9IH5XTTg5OTNfRkxMX0VOQTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKIAkvKiBBcHBseSB0aGUgY29uZmlndXJhdGlvbiAqLwogCWlmIChmbGxfZGl2LmspCiAJCXJlZzEgfD0gV004OTkzX0ZMTF9GUkFDX01BU0s7CiAJZWxzZQogCQlyZWcxICY9IH5XTTg5OTNfRkxMX0ZSQUNfTUFTSzsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8yLAotCQkgICAgIChmbGxfZGl2LmZsbF9vdXRkaXYgPDwgV004OTkzX0ZMTF9PVVRESVZfU0hJRlQpIHwKLQkJICAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvIDw8IFdNODk5M19GTExfRlJBVElPX1NISUZUKSk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMywgZmxsX2Rpdi5rKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMiwKKwkJICAgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5OTNfRkxMX09VVERJVl9TSElGVCkgfAorCQkgICAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvIDw8IFdNODk5M19GTExfRlJBVElPX1NISUZUKSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CiAKLQlyZWc0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80KTsKKwlyZWc0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCk7CiAJcmVnNCAmPSB+V004OTkzX0ZMTF9OX01BU0s7CiAJcmVnNCB8PSBmbGxfZGl2Lm4gPDwgV004OTkzX0ZMTF9OX1NISUZUOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzQsIHJlZzQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80LCByZWc0KTsKIAogCXJlZzUgJj0gfldNODk5M19GTExfQ0xLX1JFRl9ESVZfTUFTSzsKIAlyZWc1IHw9IGZsbF9kaXYuZmxsX2Nsa19yZWZfZGl2IDw8IFdNODk5M19GTExfQ0xLX1JFRl9ESVZfU0hJRlQ7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSwgcmVnNSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUsIHJlZzUpOwogCiAJLyogRW5hYmxlIHRoZSBGTEwgKi8KLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxIHwgV004OTkzX0ZMTF9FTkEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxIHwgV004OTkzX0ZMTF9FTkEpOwogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGVuYWJsZWQgYXQgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CiAKIAl3bTg5OTMtPmZsbF9mcmVmID0gRnJlZjsKIAl3bTg5OTMtPmZsbF9mb3V0ID0gRm91dDsKKwl3bTg5OTMtPmZsbF9zcmMgPSBzb3VyY2U7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCw3ICs0NjUsNyBAQAogCWNhc2UgV004OTkzX1NZU0NMS19NQ0xLOgogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IE1DTEtcbiIsIHdtODk5My0+bWNsa19yYXRlKTsKIAotCQlyZWcgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKIAkJcmVnICY9IH4oV004OTkzX01DTEtfRElWIHwgV004OTkzX1NZU0NMS19TUkMpOwogCQlpZiAod204OTkzLT5tY2xrX3JhdGUgPiAxMzUwMDAwMCkgewogCQkJcmVnIHw9IFdNODk5M19NQ0xLX0RJVjsKQEAgLTUyOSwxNCArNDc0LDE0IEBACiAJCQlyZWcgJj0gfldNODk5M19NQ0xLX0RJVjsKIAkJCXdtODk5My0+c3lzY2xrX3JhdGUgPSB3bTg5OTMtPm1jbGtfcmF0ZTsKIAkJfQotCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODk5M19TWVNDTEtfRkxMOgogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IEZMTCBjbG9ja1xuIiwKIAkJCXdtODk5My0+ZmxsX2ZvdXQpOwogCi0JCXJlZyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOwogCQlyZWcgfD0gV004OTkzX1NZU0NMS19TUkM7CiAJCWlmICh3bTg5OTMtPmZsbF9mb3V0ID4gMTM1MDAwMDApIHsKIAkJCXJlZyB8PSBXTTg5OTNfTUNMS19ESVY7CkBAIC01NDUsNyArNDkwLDcgQEAKIAkJCXJlZyAmPSB+V004OTkzX01DTEtfRElWOwogCQkJd204OTkzLT5zeXNjbGtfcmF0ZSA9IHdtODk5My0+ZmxsX2ZvdXQ7CiAJCX0KLQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzIsIHJlZyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTk3OCwxMCArOTIzLDMzIEBACiAJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDUiIgfSwKIH07CiAKK3N0YXRpYyB2b2lkIHdtODk5M19jYWNoZV9yZXN0b3JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgaTsKKworCWlmICghY29kZWMtPmNhY2hlX3N5bmMpCisJCXJldHVybjsKKworCS8qIFJlZW5hYmxlIGhhcmR3YXJlIHdyaXRlcyAqLworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMDsKKworCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVyIHNldHRpbmdzICovCisJZm9yIChpID0gMTsgaSA8IFdNODk5M19NQVhfUkVHSVNURVI7IGkrKykgeworCQlpZiAoY2FjaGVbaV0gPT0gd204OTkzX3JlZ19kZWZhdWx0c1tpXSkKKwkJCWNvbnRpbnVlOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCBjYWNoZVtpXSk7CisJfQorCisJLyogV2UncmUgaW4gc3luYyBhZ2FpbiAqLworCWNvZGVjLT5jYWNoZV9zeW5jID0gMDsKK30KKwogc3RhdGljIGludCB3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKIAlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKQEAgLTk5NSw2ICs5NjMsMTggQEAKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5OTMtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQl3bTg5OTNfY2FjaGVfcmVzdG9yZShjb2RlYyk7CisKKwkJCS8qIFR1bmUgREMgc2Vydm8gY29uZmlndXJhdGlvbiAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg0NCwgMyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDU2LCAzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4NDQsIDApOworCiAJCQkvKiBCcmluZyB1cCBWTUlEIHdpdGggZmFzdCBzb2Z0IHN0YXJ0ICovCiAJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDIsCiAJCQkJCSAgICBXTTg5OTNfU1RBUlRVUF9CSUFTX0VOQSB8CkBAIC0xMDQyLDYgKzEwMjIsMTggQEAKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKIAkJCQkgICAgV004OTkzX1ZNSURfU0VMX01BU0sgfCBXTTg5OTNfQklBU19FTkEsCiAJCQkJICAgIDApOworCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorICAgICAgICAgICAgICAgLyogUG9zdCAyLjYuMzQgd2Ugd2lsbCBiZSBhYmxlIHRvIGdldCBhIGNhbGxiYWNrIHdoZW4KKyAgICAgICAgICAgICAgICAqIHRoZSByZWd1bGF0b3JzIGFyZSBkaXNhYmxlZCB3aGljaCB3ZSBjYW4gdXNlIGJ1dAorCQkqIGZvciBub3cganVzdCBhc3N1bWUgdGhhdCB0aGUgcG93ZXIgd2lsbCBiZSBjdXQgaWYKKwkJKiB0aGUgcmVndWxhdG9yIEFQSSBpcyBpbiB1c2UuCisJCSovCisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKyNlbmRpZgorCisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTkzLT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA3NSw4ICsxMDY3LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgYWlmMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEpOwotCXVuc2lnbmVkIGludCBhaWY0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CisJdW5zaWduZWQgaW50IGFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJdW5zaWduZWQgaW50IGFpZjQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CiAKIAlhaWYxICY9IH4oV004OTkzX0JDTEtfRElSIHwgV004OTkzX0FJRl9CQ0xLX0lOViB8CiAJCSAgV004OTkzX0FJRl9MUkNMS19JTlYgfCBXTTg5OTNfQUlGX0ZNVF9NQVNLKTsKQEAgLTExNTksOCArMTE1MSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTc0LDE2ICsxMTY2LDE2IEBACiAJaW50IHJldCwgaSwgYmVzdCwgYmVzdF92YWwsIGN1cl92YWw7CiAJdW5zaWduZWQgaW50IGNsb2NraW5nMSwgY2xvY2tpbmczLCBhaWYxLCBhaWY0OwogCi0JY2xvY2tpbmcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18xKTsKKwljbG9ja2luZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18xKTsKIAljbG9ja2luZzEgJj0gfldNODk5M19CQ0xLX0RJVl9NQVNLOwogCi0JY2xvY2tpbmczID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18zKTsKKwljbG9ja2luZzMgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18zKTsKIAljbG9ja2luZzMgJj0gfihXTTg5OTNfQ0xLX1NZU19SQVRFX01BU0sgfCBXTTg5OTNfU0FNUExFX1JBVEVfTUFTSyk7CiAKLQlhaWYxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJYWlmMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xKTsKIAlhaWYxICY9IH5XTTg5OTNfQUlGX1dMX01BU0s7CiAKLQlhaWY0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CisJYWlmNCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKIAlhaWY0ICY9IH5XTTg5OTNfTFJDTEtfUkFURV9NQVNLOwogCiAJLyogV2hhdCBCQ0xLIGRvIHdlIG5lZWQ/ICovCkBAIC0xMjc2LDE0ICsxMjY4LDE0IEBACiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTFJDTEtfUkFURSBpcyAlZFxuIiwgd204OTkzLT5iY2xrIC8gd204OTkzLT5mcyk7CiAJYWlmNCB8PSB3bTg5OTMtPmJjbGsgLyB3bTg5OTMtPmZzOwogCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSwgY2xvY2tpbmcxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18zLCBjbG9ja2luZzMpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzEsIGNsb2NraW5nMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzMsIGNsb2NraW5nMyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOwogCiAJLyogUmVUdW5lIE1vYmlsZT8gKi8KIAlpZiAod204OTkzLT5wZGF0YS5udW1fcmV0dW5lX2NvbmZpZ3MpIHsKLQkJdTE2IGVxMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRVExKTsKKwkJdTE2IGVxMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0VRMSk7CiAJCXN0cnVjdCB3bTg5OTNfcmV0dW5lX21vYmlsZV9zZXR0aW5nICpzOwogCiAJCWJlc3QgPSAwOwpAQCAtMTMwNiw3ICsxMjk4LDcgQEAKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0VRMSwgV004OTkzX0VRX0VOQSwgMCk7CiAKIAkJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUocy0+Y29uZmlnKTsgaSsrKQotCQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRVExICsgaSwgcy0+Y29uZmlnW2ldKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19FUTEgKyBpLCBzLT5jb25maWdbaV0pOwogCiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19FUTEsIFdNODk5M19FUV9FTkEsIGVxMSk7CiAJfQpAQCAtMTMxOSwxNCArMTMxMSwxNCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCXJlZyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RBQ19DVFJMKTsKIAogCWlmIChtdXRlKQogCQlyZWcgfD0gV004OTkzX0RBQ19NVVRFOwogCWVsc2UKIAkJcmVnICY9IH5XTTg5OTNfREFDX01VVEU7CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19EQUNfQ1RSTCwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0ODAsOSArMTQ3Miw2NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk5M19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBmbGxfZm91dCA9IHdtODk5My0+ZmxsX2ZvdXQ7CisJaW50IGZsbF9mcmVmICA9IHdtODk5My0+ZmxsX2ZyZWY7CisJaW50IHJldDsKKworCS8qIFN0b3AgdGhlIEZMTCBpbiBhbiBvcmRlcmx5IGZhc2hpb24gKi8KKwlyZXQgPSB3bTg5OTNfc2V0X2ZsbChjb2RlYy0+ZGFpLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgRkxMXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg5OTMtPmZsbF9mb3V0ID0gZmxsX2ZvdXQ7CisJd204OTkzLT5mbGxfZnJlZiA9IGZsbF9mcmVmOworCisJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5M19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwl3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIFJlc3RhcnQgdGhlIEZMTD8gKi8KKwlpZiAod204OTkzLT5mbGxfZm91dCkgeworCQlpbnQgZmxsX2ZvdXQgPSB3bTg5OTMtPmZsbF9mb3V0OworCQlpbnQgZmxsX2ZyZWYgID0gd204OTkzLT5mbGxfZnJlZjsKKworCQl3bTg5OTMtPmZsbF9mcmVmID0gMDsKKwkJd204OTkzLT5mbGxfZm91dCA9IDA7CisKKwkJcmV0ID0gd204OTkzX3NldF9mbGwoY29kZWMtPmRhaSwgMCwgd204OTkzLT5mbGxfc3JjLAorCQkJCSAgICAgZmxsX2ZyZWYsIGZsbF9mb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc3RhcnQgRkxMXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk5M19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTkzX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTkzID0gewogCS5wcm9iZSA9IAl3bTg5OTNfcHJvYmUsCiAJLnJlbW92ZSA9IAl3bTg5OTNfcmVtb3ZlLAorCS5zdXNwZW5kID0Jd204OTkzX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODk5M19yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5OTMpOwogCkBAIC0xNDkzLDYgKzE1NDIsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCByZXQ7CisJaW50IGk7CiAKIAlpZiAod204OTkzX2NvZGVjKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQSBXTTg5OTMgaXMgYWxyZWFkeSByZWdpc3RlcmVkXG4iKTsKQEAgLTE1MTMsOSArMTU2Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAogCWNvZGVjLT5uYW1lID0gIldNODk5MyI7Ci0JY29kZWMtPnJlYWQgPSB3bTg5OTNfcmVhZDsKLQljb2RlYy0+d3JpdGUgPSB3bTg5OTNfd3JpdGU7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODk5M192b2xhdGlsZTsKIAljb2RlYy0+cmVnX2NhY2hlID0gd204OTkzLT5yZWdfY2FjaGU7CiAJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg5OTMtPnJlZ19jYWNoZSk7CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwpAQCAtMTUyNCwyNSArMTU3Miw1MyBAQAogCWNvZGVjLT5udW1fZGFpID0gMTsKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTkzOwogCisJd204OTkzLT5odWJzX2RhdGEuaHBfc3RhcnR1cF9tb2RlID0gMTsKKwl3bTg5OTMtPmh1YnNfZGF0YS5kY3NfY29kZXMgPSAtMjsKKwogCW1lbWNweSh3bTg5OTMtPnJlZ19jYWNoZSwgd204OTkzX3JlZ19kZWZhdWx0cywKIAkgICAgICAgc2l6ZW9mKHdtODk5My0+cmVnX2NhY2hlKSk7CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIFNORF9TT0NfSTJDKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5OTMpOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAJd204OTkzX2NvZGVjID0gY29kZWM7CiAKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JdmFsID0gd204OTkzX3JlYWRfaHcoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCk7Ci0JaWYgKHZhbCAhPSB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19TT0ZUV0FSRV9SRVNFVF0pIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBJRCByZWdpc3RlciB2YWx1ZSAleFxuIiwgdmFsKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg5OTMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODk5M19zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkgd204OTkzLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCi0JcmV0ID0gd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQsIDB4ZmZmZik7CisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksCisJCQkJICAgIHdtODk5My0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VUKTsKKwlpZiAodmFsICE9IHdtODk5M19yZWdfZGVmYXVsdHNbV004OTkzX1NPRlRXQVJFX1JFU0VUXSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIElEIHJlZ2lzdGVyIHZhbHVlICV4XG4iLCB2YWwpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VULCAweGZmZmYpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2VuYWJsZTsKKworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMTsKIAogCS8qIEJ5IGRlZmF1bHQgd2UncmUgdXNpbmcgdGhlIG91dHB1dCBtaXhlcnMgKi8KIAl3bTg5OTMtPmNsYXNzX3dfdXNlcnMgPSAyOwpAQCAtMTU3Miw3ICsxNjQ4LDcgQEAKIAkJCSAgICAgCiAJcmV0ID0gd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZW5hYmxlOwogCiAJd204OTkzX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCkBAIC0xNTg2LDYgKzE2NjIsMTAgQEAKIAogZXJyX2JpYXM6CiAJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLCB3bTg5OTMtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLCB3bTg5OTMtPnN1cHBsaWVzKTsKIGVycjoKIAl3bTg5OTNfY29kZWMgPSBOVUxMOwogCWtmcmVlKHdtODk5Myk7CkBAIC0xNjAwLDYgKzE2ODAsNyBAQAogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk5M19kYWkpOwogCiAJd204OTkzX3NldF9iaWFzX2xldmVsKCZ3bTg5OTMtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksIHdtODk5My0+c3VwcGxpZXMpOwogCWtmcmVlKHdtODk5Myk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjM3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC0wLDAgKzEsMzg2NyBAQAorLyoKKyAqIHdtODk5NC5jICAtLSAgV004OTk0IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvZ3Bpby5oPgorCisjaW5jbHVkZSAid204OTk0LmgiCisjaW5jbHVkZSAid21faHVicy5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk5NF9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5NDsKKworc3RydWN0IGZsbF9jb25maWcgeworCWludCBzcmM7CisJaW50IGluOworCWludCBvdXQ7Cit9OworCisjZGVmaW5lIFdNODk5NF9OVU1fRFJDIDMKKyNkZWZpbmUgV004OTk0X05VTV9FUSAgMworCitzdGF0aWMgaW50IHdtODk5NF9kcmNfYmFzZVtdID0geworCVdNODk5NF9BSUYxX0RSQzFfMSwKKwlXTTg5OTRfQUlGMV9EUkMyXzEsCisJV004OTk0X0FJRjJfRFJDXzEsCit9OworCitzdGF0aWMgaW50IHdtODk5NF9yZXR1bmVfbW9iaWxlX2Jhc2VbXSA9IHsKKwlXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsCisJV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLAorCVdNODk5NF9BSUYyX0VRX0dBSU5TXzEsCit9OworCisjZGVmaW5lIFdNODk5NF9SRUdfQ0FDSEVfU0laRSAgMHg2MjEKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204OTk0X3ByaXYgeworCXN0cnVjdCB3bV9odWJzX2RhdGEgaHViczsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODk5NF9SRUdfQ0FDSEVfU0laRSArIDFdOworCWludCBzeXNjbGtbMl07CisJaW50IHN5c2Nsa19yYXRlWzJdOworCWludCBtY2xrWzJdOworCWludCBhaWZjbGtbMl07CisJc3RydWN0IGZsbF9jb25maWcgZmxsWzJdLCBmbGxfc3VzcGVuZFsyXTsKKworCWludCBkYWNfcmF0ZXNbMl07CisJaW50IGxyY2xrX3NoYXJlZFsyXTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBEUkMgY29uZmlndXJhdGlvbiAqLworCWNvbnN0IGNoYXIgKipkcmNfdGV4dHM7CisJaW50IGRyY19jZmdbV004OTk0X05VTV9EUkNdOworCXN0cnVjdCBzb2NfZW51bSBkcmNfZW51bTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CisJaW50IHJldHVuZV9tb2JpbGVfY2ZnW1dNODk5NF9OVU1fRVFdOworCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CisKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICByZWFkYWJsZTsgICAvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGFibGU7ICAgLyogTWFzayBvZiB3cml0YWJsZSBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgIHZvbDsgICAgICAgIC8qIE1hc2sgb2Ygdm9sYXRpbGUgYml0cyAqLworfSBhY2Nlc3NfbWFza3NbXSA9IHsKKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjAgICAgIC0gU29mdHdhcmUgUmVzZXQgKi8KKwl7IDB4M0IzNywgMHgzQjM3LCAweDAwMDAgfSwgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwl7IDB4NkJGMCwgMHg2QkYwLCAweDAwMDAgfSwgLyogUjIgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMikgKi8KKwl7IDB4M0ZGMCwgMHgzRkYwLCAweDAwMDAgfSwgLyogUjMgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMykgKi8KKwl7IDB4M0YzRiwgMHgzRjNGLCAweDAwMDAgfSwgLyogUjQgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkgKi8KKwl7IDB4M0YwRiwgMHgzRjBGLCAweDAwMDAgfSwgLyogUjUgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjYgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMCAqLworCXsgMHgwMUMwLCAweDAxQzAsIDB4MDAwMCB9LCAvKiBSMjEgICAgLSBJbnB1dCBNaXhlciAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMyAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjQgICAgLSBMZWZ0IExpbmUgSW5wdXQgMSYyIFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjUgICAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjYgICAgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwl7IDB4MDBERiwgMHgwMURGLCAweDAwMDAgfSwgLyogUjI3ICAgIC0gUmlnaHQgTGluZSBJbnB1dCAzJjQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIyOCAgICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMjkgICAgLSBSaWdodCBPdXRwdXQgVm9sdW1lICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFIzMCAgICAtIExpbmUgT3V0cHV0cyBWb2x1bWUgKi8KKwl7IDB4MDAzMCwgMHgwMDMwLCAweDAwMDAgfSwgLyogUjMxICAgIC0gSFBPVVQyIFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzIgICAgLSBMZWZ0IE9QR0EgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzMyAgICAtIFJpZ2h0IE9QR0EgVm9sdW1lICovCisJeyAweDAwN0YsIDB4MDA3RiwgMHgwMDAwIH0sIC8qIFIzNCAgICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KKwl7IDB4MDE3RiwgMHgwMTdGLCAweDAwMDAgfSwgLyogUjM1ICAgIC0gU1BLTUlYUiBBdHRlbnVhdGlvbiAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSMzYgICAgLSBTUEtPVVQgTWl4ZXJzICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFIzNyAgICAtIENsYXNzRCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzggICAgLSBTcGVha2VyIFZvbHVtZSBMZWZ0ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzOSAgICAtIFNwZWFrZXIgVm9sdW1lIFJpZ2h0ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI0MCAgICAtIElucHV0IE1peGVyICgyKSAqLworCXsgMHgwMUI3LCAweDAxQjcsIDB4MDAwMCB9LCAvKiBSNDEgICAgLSBJbnB1dCBNaXhlciAoMykgKi8KKwl7IDB4MDFCNywgMHgwMUI3LCAweDAwMDAgfSwgLyogUjQyICAgIC0gSW5wdXQgTWl4ZXIgKDQpICovCisJeyAweDAxQzcsIDB4MDFDNywgMHgwMDAwIH0sIC8qIFI0MyAgICAtIElucHV0IE1peGVyICg1KSAqLworCXsgMHgwMUM3LCAweDAxQzcsIDB4MDAwMCB9LCAvKiBSNDQgICAgLSBJbnB1dCBNaXhlciAoNikgKi8KKwl7IDB4MDFGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjQ1ICAgIC0gT3V0cHV0IE1peGVyICgxKSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSNDYgICAgLSBPdXRwdXQgTWl4ZXIgKDIpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI0NyAgICAtIE91dHB1dCBNaXhlciAoMykgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjQ4ICAgIC0gT3V0cHV0IE1peGVyICg0KSAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNDkgICAgLSBPdXRwdXQgTWl4ZXIgKDUpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI1MCAgICAtIE91dHB1dCBNaXhlciAoNikgKi8KKwl7IDB4MDAzOCwgMHgwMDM4LCAweDAwMDAgfSwgLyogUjUxICAgIC0gSFBPVVQyIE1peGVyICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFI1MiAgICAtIExpbmUgTWl4ZXIgKDEpICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFI1MyAgICAtIExpbmUgTWl4ZXIgKDIpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFI1NCAgICAtIFNwZWFrZXIgTWl4ZXIgKi8KKwl7IDB4MDBDMSwgMHgwMEMxLCAweDAwMDAgfSwgLyogUjU1ICAgIC0gQWRkaXRpb25hbCBDb250cm9sICovCisJeyAweDAwRjAsIDB4MDBGMCwgMHgwMDAwIH0sIC8qIFI1NiAgICAtIEFudGlQT1AgKDEpICovCisJeyAweDAxRUYsIDB4MDFFRiwgMHgwMDAwIH0sIC8qIFI1NyAgICAtIEFudGlQT1AgKDIpICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI1OCAgICAtIE1JQ0JJQVMgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAweDAwMDAgfSwgLyogUjU5ICAgIC0gTERPIDEgKi8KKwl7IDB4MDAwNywgMHgwMDA3LCAweDAwMDAgfSwgLyogUjYwICAgIC0gTERPIDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUgKi8KKwl7IDB4ODAwMCwgMHg4MDAwLCAweDAwMDAgfSwgLyogUjc2ICAgIC0gQ2hhcmdlIFB1bXAgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MCAqLworCXsgMHgwMzAxLCAweDAzMDEsIDB4MDAwMCB9LCAvKiBSODEgICAgLSBDbGFzcyBXICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzICovCisJeyAweDMzM0YsIDB4MzMzRiwgMHgwMDAwIH0sIC8qIFI4NCAgICAtIERDIFNlcnZvICgxKSAqLworCXsgMHgwRkVGLCAweDBGRUYsIDB4MDAwMCB9LCAvKiBSODUgICAgLSBEQyBTZXJ2byAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFI4NyAgICAtIERDIFNlcnZvICg0KSAqLworCXsgMHgwMzMzLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODggICAgLSBEQyBTZXJ2byBSZWFkYmFjayAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUgKi8KKwl7IDB4MDBFRSwgMHgwMEVFLCAweDAwMDAgfSwgLyogUjk2ICAgIC0gQW5hbG9ndWUgSFAgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU1ICovCisJeyAweDAwMEYsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTYgICAtIENoaXAgUmV2aXNpb24gKi8KKwl7IDB4MDA3NCwgMHgwMDc0LCAweDAwMDAgfSwgLyogUjI1NyAgIC0gQ29udHJvbCBJbnRlcmZhY2UgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcxICovCisJeyAweDgwN0YsIDB4ODM3RiwgMHgwMDAwIH0sIC8qIFIyNzIgICAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgxKSAqLworCXsgMHgwMTdGLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjczICAgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDB4MDAwMCB9LCAvKiBSNTEyICAgLSBBSUYxIENsb2NraW5nICgxKSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSNTEzICAgLSBBSUYxIENsb2NraW5nICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTUgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAweDAwMDAgfSwgLyogUjUxNiAgIC0gQUlGMiBDbG9ja2luZyAoMSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjUxNyAgIC0gQUlGMiBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE5ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMHgwMDAwIH0sIC8qIFI1MjAgICAtIENsb2NraW5nICgxKSAqLworCXsgMHgwNzc3LCAweDA3NzcsIDB4MDAwMCB9LCAvKiBSNTIxICAgLSBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjcgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAweDAwMDAgfSwgLyogUjUyOCAgIC0gQUlGMSBSYXRlICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI1MjkgICAtIEFJRjIgUmF0ZSAqLworCXsgMHgwMDBGLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMwICAgLSBSYXRlIFN0YXR1cyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQzICovCisJeyAweDAwMDcsIDB4MDAwNywgMHgwMDAwIH0sIC8qIFI1NDQgICAtIEZMTDEgQ29udHJvbCAoMSkgKi8KKwl7IDB4M0Y3NywgMHgzRjc3LCAweDAwMDAgfSwgLyogUjU0NSAgIC0gRkxMMSBDb250cm9sICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSNTQ2ICAgLSBGTEwxIENvbnRyb2wgKDMpICovCisJeyAweDdGRUYsIDB4N0ZFRiwgMHgwMDAwIH0sIC8qIFI1NDcgICAtIEZMTDEgQ29udHJvbCAoNCkgKi8KKwl7IDB4MUZEQiwgMHgxRkRCLCAweDAwMDAgfSwgLyogUjU0OCAgIC0gRkxMMSBDb250cm9sICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3NSAqLworCXsgMHgwMDA3LCAweDAwMDcsIDB4MDAwMCB9LCAvKiBSNTc2ICAgLSBGTEwyIENvbnRyb2wgKDEpICovCisJeyAweDNGNzcsIDB4M0Y3NywgMHgwMDAwIH0sIC8qIFI1NzcgICAtIEZMTDIgQ29udHJvbCAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjU3OCAgIC0gRkxMMiBDb250cm9sICgzKSAqLworCXsgMHg3RkVGLCAweDdGRUYsIDB4MDAwMCB9LCAvKiBSNTc5ICAgLSBGTEwyIENvbnRyb2wgKDQpICovCisJeyAweDFGREIsIDB4MUZEQiwgMHgwMDAwIH0sIC8qIFI1ODAgICAtIEZMTDIgQ29udHJvbCAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NyAqLworCXsgMHhFMUY4LCAweEUxRjgsIDB4MDAwMCB9LCAvKiBSNzY4ICAgLSBBSUYxIENvbnRyb2wgKDEpICovCisJeyAweENEMUYsIDB4Q0QxRiwgMHgwMDAwIH0sIC8qIFI3NjkgICAtIEFJRjEgQ29udHJvbCAoMikgKi8KKwl7IDB4RjAwMCwgMHhGMDAwLCAweDAwMDAgfSwgLyogUjc3MCAgIC0gQUlGMSBNYXN0ZXIvU2xhdmUgKi8KKwl7IDB4MDFGMCwgMHgwMUYwLCAweDAwMDAgfSwgLyogUjc3MSAgIC0gQUlGMSBCQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3NzIgICAtIEFJRjFBREMgTFJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc3MyAgIC0gQUlGMURBQyBMUkNMSyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzc0ICAgLSBBSUYxREFDIERhdGEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc3NSAgIC0gQUlGMUFEQyBEYXRhICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MyAqLworCXsgMHhGMUY4LCAweEYxRjgsIDB4MDAwMCB9LCAvKiBSNzg0ICAgLSBBSUYyIENvbnRyb2wgKDEpICovCisJeyAweEZEMUYsIDB4RkQxRiwgMHgwMDAwIH0sIC8qIFI3ODUgICAtIEFJRjIgQ29udHJvbCAoMikgKi8KKwl7IDB4RjAwMCwgMHhGMDAwLCAweDAwMDAgfSwgLyogUjc4NiAgIC0gQUlGMiBNYXN0ZXIvU2xhdmUgKi8KKwl7IDB4MDFGMCwgMHgwMUYwLCAweDAwMDAgfSwgLyogUjc4NyAgIC0gQUlGMiBCQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3ODggICAtIEFJRjJBREMgTFJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc4OSAgIC0gQUlGMkRBQyBMUkNMSyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzkwICAgLSBBSUYyREFDIERhdGEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc5MSAgIC0gQUlGMkFEQyBEYXRhICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjMgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjQgIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI1ICAtIEFJRjEgQURDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjYgIC0gQUlGMSBEQUMxIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI3ICAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjggIC0gQUlGMSBBREMyIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI5ICAtIEFJRjEgQURDMiBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMzAgIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDMxICAtIEFJRjEgREFDMiBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzkgKi8KKwl7IDB4RjgwMCwgMHhGODAwLCAweDAwMDAgfSwgLyogUjEwNDAgIC0gQUlGMSBBREMxIEZpbHRlcnMgKi8KKwl7IDB4NzgwMCwgMHg3ODAwLCAweDAwMDAgfSwgLyogUjEwNDEgIC0gQUlGMSBBREMyIEZpbHRlcnMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTUgKi8KKwl7IDB4MDJCNiwgMHgwMkI2LCAweDAwMDAgfSwgLyogUjEwNTYgIC0gQUlGMSBEQUMxIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCwgMHgwMDAwIH0sIC8qIFIxMDU3ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKSAqLworCXsgMHgwMkI2LCAweDAyQjYsIDB4MDAwMCB9LCAvKiBSMTA1OCAgLSBBSUYxIERBQzIgRmlsdGVycyAoMSkgKi8KKwl7IDB4M0YwMCwgMHgzRjAwLCAweDAwMDAgfSwgLyogUjEwNTkgIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMDg4ICAtIEFJRjEgRFJDMSAoMSkgKi8KKwl7IDB4MUZGRiwgMHgxRkZGLCAweDAwMDAgfSwgLyogUjEwODkgIC0gQUlGMSBEUkMxICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTA5MCAgLSBBSUYxIERSQzEgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiwgMHgwMDAwIH0sIC8qIFIxMDkxICAtIEFJRjEgRFJDMSAoNCkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjEwOTIgIC0gQUlGMSBEUkMxICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTEwNCAgLSBBSUYxIERSQzIgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMTA1ICAtIEFJRjEgRFJDMiAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExMDYgIC0gQUlGMSBEUkMyICgzKSAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDB4MDAwMCB9LCAvKiBSMTEwNyAgLSBBSUYxIERSQzIgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxMTA4ICAtIEFJRjEgRFJDMiAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTIgIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgxKSAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMTE1MyAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU0ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NSAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NyAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTggIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MCAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTYxICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MiAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjMgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY0ICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY2ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2NyAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjggIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2OSAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNzAgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTcxICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODQgIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgxKSAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMTE4NSAgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4NyAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODggIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4OSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTAgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkxICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5MiAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkzICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5NCAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTUgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTcgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5OSAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDAgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTIwMSAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDIgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMjAzICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzkgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODAgIC0gQUlGMiBBREMgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODEgIC0gQUlGMiBBREMgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgyICAtIEFJRjIgREFDIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgzICAtIEFJRjIgREFDIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NSAqLworCXsgMHhGODAwLCAweEY4MDAsIDB4MDAwMCB9LCAvKiBSMTI5NiAgLSBBSUYyIEFEQyBGaWx0ZXJzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzExICovCisJeyAweDAyQjYsIDB4MDJCNiwgMHgwMDAwIH0sIC8qIFIxMzEyICAtIEFJRjIgREFDIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCwgMHgwMDAwIH0sIC8qIFIxMzEzICAtIEFJRjIgREFDIEZpbHRlcnMgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMzQ0ICAtIEFJRjIgRFJDICgxKSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTM0NSAgLSBBSUYyIERSQyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEzNDYgIC0gQUlGMiBEUkMgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiwgMHgwMDAwIH0sIC8qIFIxMzQ3ICAtIEFJRjIgRFJDICg0KSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTM0OCAgLSBBSUYyIERSQyAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MDggIC0gQUlGMiBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE0MDkgIC0gQUlGMiBFUSBHYWlucyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTAgIC0gQUlGMiBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxMSAgLSBBSUYyIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDEyICAtIEFJRjIgRVEgQmFuZCAxIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDEzICAtIEFJRjIgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTQgIC0gQUlGMiBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxNSAgLSBBSUYyIEVRIEJhbmQgMiBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE2ICAtIEFJRjIgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE3ICAtIEFJRjIgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTggIC0gQUlGMiBFUSBCYW5kIDMgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxOSAgLSBBSUYyIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIwICAtIEFJRjIgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIxICAtIEFJRjIgRVEgQmFuZCA0IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjIgIC0gQUlGMiBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyMyAgLSBBSUYyIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI0ICAtIEFJRjIgRVEgQmFuZCA0IFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI1ICAtIEFJRjIgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjYgIC0gQUlGMiBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyNyAgLSBBSUYyIEVRIEJhbmQgNSBQRyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNSAqLworCXsgMHgwMUVGLCAweDAxRUYsIDB4MDAwMCB9LCAvKiBSMTUzNiAgLSBEQUMxIE1peGVyIFZvbHVtZXMgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1MzcgIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1MzggIC0gREFDMSBSaWdodCBNaXhlciBSb3V0aW5nICovCisJeyAweDAxRUYsIDB4MDFFRiwgMHgwMDAwIH0sIC8qIFIxNTM5ICAtIERBQzIgTWl4ZXIgVm9sdW1lcyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTU0MCAgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTU0MSAgLSBEQUMyIFJpZ2h0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NDIgIC0gQUlGMSBBREMxIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0MyAgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0NCAgLSBBSUYxIEFEQzIgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTQ1ICAtIEFJRjEgQURDMiBSaWdodCBtaXhlciBSb3V0aW5nICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUxICovCisJeyAweDAyRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxNTUyICAtIERBQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTMgIC0gREFDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTQgIC0gREFDMiBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMkZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTU1NSAgLSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU1NiAgLSBEQUMgU29mdG11dGUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NjggIC0gT3ZlcnNhbXBsaW5nICovCisJeyAweDAzQzMsIDB4MDNDMywgMHgwMDAwIH0sIC8qIFIxNTY5ICAtIFNpZGV0b25lICovCit9OworCitzdGF0aWMgaW50IHdtODk5NF9yZWFkYWJsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChyZWcgPj0gQVJSQVlfU0laRShhY2Nlc3NfbWFza3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYWNjZXNzX21hc2tzW3JlZ10ucmVhZGFibGUgIT0gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfdm9sYXRpbGUodW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAocmVnID49IFdNODk5NF9SRUdfQ0FDSEVfU0laRSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTk0X1NPRlRXQVJFX1JFU0VUOgorCWNhc2UgV004OTk0X0NISVBfUkVWSVNJT046CisJY2FzZSBXTTg5OTRfRENfU0VSVk9fMToKKwljYXNlIFdNODk5NF9EQ19TRVJWT19SRUFEQkFDSzoKKwljYXNlIFdNODk5NF9SQVRFX1NUQVRVUzoKKwljYXNlIFdNODk5NF9MRE9fMToKKwljYXNlIFdNODk5NF9MRE9fMjoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHdtODk5NF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKKworCWlmICghd204OTk0X3ZvbGF0aWxlKHJlZykpCisJCXdtODk5NC0+cmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKKworCXJldHVybiB3bTg5OTRfcmVnX3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtODk5NF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQl1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKKworCWlmICh3bTg5OTRfdm9sYXRpbGUocmVnKSkKKwkJcmV0dXJuIHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcpOworCWVsc2UKKwkJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9haWZfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgYWlmKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmF0ZTsKKwlpbnQgcmVnMSA9IDA7CisJaW50IG9mZnNldDsKKworCWlmIChhaWYpCisJCW9mZnNldCA9IDQ7CisJZWxzZQorCQlvZmZzZXQgPSAwOworCisJc3dpdGNoICh3bTg5OTQtPnN5c2Nsa1thaWZdKSB7CisJY2FzZSBXTTg5OTRfU1lTQ0xLX01DTEsxOgorCQlyYXRlID0gd204OTk0LT5tY2xrWzBdOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMjoKKwkJcmVnMSB8PSAweDg7CisJCXJhdGUgPSB3bTg5OTQtPm1jbGtbMV07CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDE6CisJCXJlZzEgfD0gMHgxMDsKKwkJcmF0ZSA9IHdtODk5NC0+ZmxsWzBdLm91dDsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfRkxMMjoKKwkJcmVnMSB8PSAweDE4OworCQlyYXRlID0gd204OTk0LT5mbGxbMV0ub3V0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyYXRlID49IDEzNTAwMDAwKSB7CisJCXJhdGUgLz0gMjsKKwkJcmVnMSB8PSBXTTg5OTRfQUlGMUNMS19ESVY7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRGl2aWRpbmcgQUlGJWQgY2xvY2sgdG8gJWRIelxuIiwKKwkJCWFpZiArIDEsIHJhdGUpOworCX0KKwl3bTg5OTQtPmFpZmNsa1thaWZdID0gcmF0ZTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEgKyBvZmZzZXQsCisJCQkgICAgV004OTk0X0FJRjFDTEtfU1JDX01BU0sgfCBXTTg5OTRfQUlGMUNMS19ESVYsCisJCQkgICAgcmVnMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25maWd1cmVfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgb2xkLCBuZXc7CisKKwkvKiBCcmluZyB1cCB0aGUgQUlGIGNsb2NrcyBmaXJzdCAqLworCWNvbmZpZ3VyZV9haWZfY2xvY2soY29kZWMsIDApOworCWNvbmZpZ3VyZV9haWZfY2xvY2soY29kZWMsIDEpOworCisJLyogVGhlbiBzd2l0Y2ggQ0xLX1NZUyBvdmVyIHRvIHRoZSBoaWdoZXIgb2YgdGhlbTsgYSBjaGFuZ2UKKwkgKiBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSBjbG9ja2luZyBjaGFuZ2Ugd2hpY2ggY2FuCisJICogb25seSBiZSBtYWRlIG91dHNpZGUgb2YgREFQTSBzbyB3ZSBjYW4gc2FmZWx5IHJlZG8gdGhlCisJICogY2xvY2tpbmcuCisJICovCisKKwkvKiBJZiB0aGV5J3JlIGVxdWFsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGlzIHVzZWQgKi8KKwlpZiAod204OTk0LT5haWZjbGtbMF0gPT0gd204OTk0LT5haWZjbGtbMV0pCisJCXJldHVybiAwOworCisJaWYgKHdtODk5NC0+YWlmY2xrWzBdIDwgd204OTk0LT5haWZjbGtbMV0pCisJCW5ldyA9IFdNODk5NF9TWVNDTEtfU1JDOworCWVsc2UKKwkJbmV3ID0gMDsKKworCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NMT0NLSU5HXzEpICYgV004OTk0X1NZU0NMS19TUkM7CisKKwkvKiBJZiB0aGVyZSdzIG5vIGNoYW5nZSB0aGVuIHdlJ3JlIGRvbmUuICovCisJaWYgKG9sZCA9PSBuZXcpCisJCXJldHVybiAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMT0NLSU5HXzEsIFdNODk5NF9TWVNDTEtfU1JDLCBuZXcpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfY2xrX3N5cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAorCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQoreworCWludCByZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgV004OTk0X0NMT0NLSU5HXzEpOworCWNvbnN0IGNoYXIgKmNsazsKKworCS8qIENoZWNrIHdoYXQgd2UncmUgY3VycmVudGx5IHVzaW5nIGZvciBDTEtfU1lTICovCisJaWYgKHJlZyAmIFdNODk5NF9TWVNDTEtfU1JDKQorCQljbGsgPSAiQUlGMkNMSyI7CisJZWxzZQorCQljbGsgPSAiQUlGMUNMSyI7CisKKwlyZXR1cm4gc3RyY21wKHNvdXJjZS0+bmFtZSwgY2xrKSA9PSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfaHBmX3RleHRbXSA9IHsKKwkiMi43a0h6IiwgIjEuMzVrSHoiLCAiNjc1SHoiLCAiMzcwSHoiLCAiMTgwSHoiLCAiOTBIeiIsICI0NUh6IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZV9ocGYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfU0lERVRPTkUsIDcsIDcsIHNpZGV0b25lX2hwZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFpZl90bHYsIDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC03MjAwLCA3NSwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3RfdGx2LCAtMzYwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg5OTRfM2RfdGx2LCAtMTYwMCwgMTgzLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMjAwLCAxMDAsIDApOworCisjZGVmaW5lIFdNODk5NF9EUkNfU1dJVENIKHhuYW1lLCByZWcsIHNoaWZ0KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIC5nZXQgPSBzbmRfc29jX2dldF92b2xzdyxcCisJLnB1dCA9IHdtODk5NF9wdXRfZHJjX3N3LCBcCisJLnByaXZhdGVfdmFsdWUgPSAgU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCAxLCAwKSB9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9kcmNfc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBtYXNrLCByZXQ7CisKKwkvKiBDYW4ndCBlbmFibGUgYm90aCBBREMgYW5kIERBQyBwYXRocyBzaW11bHRhbmVvdXNseSAqLworCWlmIChtYy0+c2hpZnQgPT0gV004OTk0X0FJRjFEQUMxX0RSQ19FTkFfU0hJRlQpCisJCW1hc2sgPSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkFfTUFTSyB8CisJCQlXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkFfTUFTSzsKKwllbHNlCisJCW1hc2sgPSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQV9NQVNLOworCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBtYy0+cmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICYgbWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKK30KKworCisKK3N0YXRpYyB2b2lkIHdtODk5NF9zZXRfZHJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGRyYykKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCBiYXNlID0gd204OTk0X2RyY19iYXNlW2RyY107CisJaW50IGNmZyA9IHdtODk5NC0+ZHJjX2NmZ1tkcmNdOworCWludCBzYXZlLCBpOworCisJLyogU2F2ZSBhbnkgZW5hYmxlczsgdGhlIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGNsZWFyIHRoZW0uICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgYmFzZSk7CisJc2F2ZSAmPSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQSB8IFdNODk5NF9BSUYxQURDMUxfRFJDX0VOQSB8CisJCVdNODk5NF9BSUYxQURDMVJfRFJDX0VOQTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfRFJDX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSArIGksIDB4ZmZmZiwKKwkJCQkgICAgcGRhdGEtPmRyY19jZmdzW2NmZ10ucmVnc1tpXSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlLCBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQSB8CisJCQkgICAgIFdNODk5NF9BSUYxQURDMUxfRFJDX0VOQSB8CisJCQkgICAgIFdNODk5NF9BSUYxQURDMVJfRFJDX0VOQSwgc2F2ZSk7Cit9CisKKy8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLworc3RhdGljIGludCB3bTg5OTRfZ2V0X2RyYyhjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgIkFJRjFEUkMxIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxRFJDMiBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMkRSQyBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGRyYyA9IHdtODk5NF9nZXRfZHJjKGtjb250cm9sLT5pZC5uYW1lKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChkcmMgPCAwKQorCQlyZXR1cm4gZHJjOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fZHJjX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk0LT5kcmNfY2ZnW2RyY10gPSB2YWx1ZTsKKworCXdtODk5NF9zZXRfZHJjKGNvZGVjLCBkcmMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dldF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkcmMgPSB3bTg5OTRfZ2V0X2RyYyhrY29udHJvbC0+aWQubmFtZSk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTk0LT5kcmNfY2ZnW2RyY107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGJsb2NrKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGJhc2UgPSB3bTg5OTRfcmV0dW5lX21vYmlsZV9iYXNlW2Jsb2NrXTsKKwlpbnQgaWZhY2UsIGJlc3QsIGJlc3RfdmFsLCBzYXZlLCBpLCBjZmc7CisKKwlpZiAoIXBkYXRhIHx8ICF3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJsb2NrKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJaWZhY2UgPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmYWNlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb25maWd1cmF0aW9uCisJICogd2l0aCB0aGUgbmVhcmVzdCBzYW1wbGUgcmF0ZS4gKi8KKwljZmcgPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXTsKKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHNbY2ZnXSkgPT0gMCAmJgorCQkgICAgYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJLSB3bTg5OTQtPmRhY19yYXRlc1tpZmFjZV0pIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQkJICAgICAgIC0gd204OTk0LT5kYWNfcmF0ZXNbaWZhY2VdKTsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlJlVHVuZSBNb2JpbGUgJWQgJXMvJWRIeiBmb3IgJWRIeiBzYW1wbGUgcmF0ZVxuIiwKKwkJYmxvY2ssCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ubmFtZSwKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yYXRlLAorCQl3bTg5OTQtPmRhY19yYXRlc1tpZmFjZV0pOworCisJLyogVGhlIEVRIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgcmVjb25maWd1cmluZyBpdCwgcmVtZW1iZXIgdGhlCisJICogY3VycmVudCBjb25maWd1cmF0aW9uLiAKKwkgKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBiYXNlKTsKKwlzYXZlICY9IFdNODk5NF9BSUYxREFDMV9FUV9FTkE7CisKKwlmb3IgKGkgPSAwOyBpIDwgV004OTk0X0VRX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSArIGksIDB4ZmZmZiwKKwkJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3NbaV0pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSwgV004OTk0X0FJRjFEQUMxX0VRX0VOQSwgc2F2ZSk7Cit9CisKKy8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLworc3RhdGljIGludCB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxLjEgRVEgTW9kZSIpID09IDApCisJCXJldHVybiAwOworCWlmIChzdHJjbXAobmFtZSwgIkFJRjEuMiBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMiBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGJsb2NrID0gd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChibG9jayA8IDApCisJCXJldHVybiBibG9jazsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXSA9IHZhbHVlOworCisJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCBibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGJsb2NrID0gd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTk0X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiQUlGMUFEQzEgVm9sdW1lIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAorCQkgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxQURDMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9BREMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfQURDMl9SSUdIVF9WT0xVTUUsCisJCSAxLCAxMTksIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjJBREMgVm9sdW1lIiwgV004OTk0X0FJRjJfQURDX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKKwkJIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYyREFDIFZvbHVtZSIsIFdNODk5NF9BSUYyX0RBQ19MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYyX0RBQ19SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYxIEJvb3N0IFZvbHVtZSIsIFdNODk5NF9BSUYxX0NPTlRST0xfMiwgMTAsIDMsIDAsIGFpZl90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgQm9vc3QgVm9sdW1lIiwgV004OTk0X0FJRjJfQ09OVFJPTF8yLCAxMCwgMywgMCwgYWlmX3RsdiksCisKK1NPQ19TSU5HTEUoIkFJRjFEQUMxIEVRIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCJBSUYxREFDMiBFUSBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiQUlGMiBFUSBTd2l0Y2giLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18xLCAwLCAxLCAwKSwKKworV004OTk0X0RSQ19TV0lUQ0goIkFJRjFEQUMxIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMxXzEsIDIpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjFBREMxTCBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMV8xLCAxKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMVIgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzFfMSwgMCksCisKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxREFDMiBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMl8xLCAyKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMkwgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzJfMSwgMSksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMUFEQzJSIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMyXzEsIDApLAorCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMkRBQyBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjJfRFJDXzEsIDIpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjJBRENMIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMl9EUkNfMSwgMSksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMkFEQ1IgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYyX0RSQ18xLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIkRBQzEgUmlnaHQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzFfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgNSwgMTIsIDAsIHN0X3RsdiksCitTT0NfU0lOR0xFX1RMVigiREFDMSBMZWZ0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMxX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDAsIDEyLCAwLCBzdF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRBQzIgUmlnaHQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzJfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgNSwgMTIsIDAsIHN0X3RsdiksCitTT0NfU0lOR0xFX1RMVigiREFDMiBMZWZ0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMyX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDAsIDEyLCAwLCBzdF90bHYpLAorU09DX0VOVU0oIlNpZGV0b25lIEhQRiBNdXgiLCBzaWRldG9uZV9ocGYpLAorU09DX1NJTkdMRSgiU2lkZXRvbmUgSFBGIFN3aXRjaCIsIFdNODk5NF9TSURFVE9ORSwgNiwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRBQzEgVm9sdW1lIiwgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1IoIkRBQzEgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsIDksIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJEQUMyIFZvbHVtZSIsIFdNODk5NF9EQUMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SKCJEQUMyIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfVk9MVU1FLAorCSAgICAgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKKworU09DX1NJTkdMRV9UTFYoIlNQS0wgREFDMiBWb2x1bWUiLCBXTTg5OTRfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgNiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTUEtMIERBQzEgVm9sdW1lIiwgV004OTk0X1NQS01JWExfQVRURU5VQVRJT04sCisJICAgICAgIDIsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJTUEtSIERBQzIgVm9sdW1lIiwgV004OTk0X1NQS01JWFJfQVRURU5VQVRJT04sCisJICAgICAgIDYsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiU1BLUiBEQUMxIFZvbHVtZSIsIFdNODk5NF9TUEtNSVhSX0FUVEVOVUFUSU9OLAorCSAgICAgICAyLCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgM0QgU3RlcmVvIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAorCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAorU09DX1NJTkdMRSgiQUlGMURBQzEgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgIDgsIDEsIDApLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKK1NPQ19TSU5HTEUoIkFJRjFEQUMyIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICA4LCAxLCAwKSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyREFDIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiwKKwkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKK1NPQ19TSU5HTEUoIkFJRjJEQUMgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgIDgsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5NF9lcV9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTIgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTMgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTQgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18yLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVE1IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTEgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVEyIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVEzIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVE0IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRNSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTEgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVEyIFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVEzIFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVE0IFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRNSBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18yLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK307CisKK3N0YXRpYyBpbnQgY2xrX3N5c19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXJldHVybiBjb25maWd1cmVfY2xvY2soY29kZWMpOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfdXBkYXRlX2NsYXNzX3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBlbmFibGUgPSAxOworCWludCBzb3VyY2UgPSAwOyAgLyogR0NDIGZsb3cgYW5hbHlzaXMgY2FuJ3QgdHJhY2sgZW5hYmxlICovCisJaW50IHJlZywgcmVnX3I7CisKKwkvKiBPbmx5IHN1cHBvcnQgZGlyZWN0IERBQy0+aGVhZHBob25lIHBhdGhzICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfT1VUUFVUX01JWEVSXzEpOworCWlmICghKHJlZyAmIFdNODk5NF9EQUMxTF9UT19IUE9VVDFMKSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIUEwgY29ubmVjdGVkIHRvIG91dHB1dCBtaXhlclxuIik7CisJCWVuYWJsZSA9IDA7CisJfQorCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfT1VUUFVUX01JWEVSXzIpOworCWlmICghKHJlZyAmIFdNODk5NF9EQUMxUl9UT19IUE9VVDFSKSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIUFIgY29ubmVjdGVkIHRvIG91dHB1dCBtaXhlclxuIik7CisJCWVuYWJsZSA9IDA7CisJfQorCisJLyogV2UgYWxzbyBuZWVkIHRoZSBzYW1lIHNldHRpbmcgZm9yIEwvUiBhbmQgb25seSBvbmUgcGF0aCAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HKTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTk0X0FJRjJEQUNMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYyREFDXG4iKTsKKwkJc291cmNlID0gMiA8PCBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgV004OTk0X0FJRjFEQUMyTF9UT19EQUMxTDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBzb3VyY2UgQUlGMURBQzJcbiIpOworCQlzb3VyY2UgPSAxIDw8IFdNODk5NF9DUF9EWU5fU1JDX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYxREFDMVxuIik7CisJCXNvdXJjZSA9IDAgPDwgV004OTk0X0NQX0RZTl9TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQUMgbWl4ZXIgc2V0dGluZzogJXhcbiIsIHJlZyk7CisJCWVuYWJsZSA9IDA7CisJCWJyZWFrOworCX0KKworCXJlZ19yID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HKTsKKwlpZiAocmVnX3IgIT0gcmVnKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkxlZnQgYW5kIHJpZ2h0IERBQyBtaXhlcnMgZGlmZmVyZW50XG4iKTsKKwkJZW5hYmxlID0gMDsKKwl9CisKKwlpZiAoZW5hYmxlKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgZW5hYmxlZFxuIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTEFTU19XXzEsCisJCQkJICAgIFdNODk5NF9DUF9EWU5fUFdSIHwKKwkJCQkgICAgV004OTk0X0NQX0RZTl9TUkNfU0VMX01BU0ssCisJCQkJICAgIHNvdXJjZSB8IFdNODk5NF9DUF9EWU5fUFdSKTsKKwkJCisJfSBlbHNlIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBkaXNhYmxlZFxuIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTEFTU19XXzEsCisJCQkJICAgIFdNODk5NF9DUF9EWU5fUFdSLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpocF9tdXhfdGV4dFtdID0geworCSJNaXhlciIsCisJIkRBQyIsCit9OworCisjZGVmaW5lIFdNODk5NF9IUF9FTlVNKHhuYW1lLCB4ZW51bSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX2VudW1fZG91YmxlLCBcCisgCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X2VudW1fZG91YmxlLCBcCisgCS5wdXQgPSB3bTg5OTRfcHV0X2hwX2VudW0sIFwKKyAgCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KKworc3RhdGljIGludCB3bTg5OTRfcHV0X2hwX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX3B1dF9lbnVtX2RvdWJsZShrY29udHJvbCwgdWNvbnRyb2wpOworCisJd204OTk0X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1VUUFVUX01JWEVSXzEsIDgsIDIsIGhwX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwbF9tdXggPQorCVdNODk5NF9IUF9FTlVNKCJMZWZ0IEhlYWRwaG9uZSBNdXgiLCBocGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHByX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1VUUFVUX01JWEVSXzIsIDgsIDIsIGhwX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwcl9tdXggPQorCVdNODk5NF9IUF9FTlVNKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgaHByX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX211eF90ZXh0W10gPSB7CisJIkFEQyIsCisJIkRNSUMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhZGNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKDAsIDAsIDIsIGFkY19tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZGNsX211eCA9CisJU09DX0RBUE1fRU5VTV9WSVJUKCJBRENMIE11eCIsIGFkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkY3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNX1ZJUlQoIkFEQ1IgTXV4IiwgYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGVmdF9zcGVha2VyX21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRBQzIgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDksIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJbnB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMUxQIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT3V0cHV0IFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCAzLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDMSBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMSwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmlnaHRfc3BlYWtlcl9taXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJEQUMyIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSW5wdXQgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDYsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSUCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk91dHB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQzEgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDAsIDEsIDApLAorfTsKKworLyogRGVidWdnaW5nOyBkdW1wIGNoaXAgc3RhdHVzIGFmdGVyIERBUE0gdHJhbnNpdGlvbnMgKi8KK3N0YXRpYyBpbnQgcG9zdF9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTUkMgc3RhdHVzOiAleFxuIiwKKwkJc25kX3NvY19yZWFkKGNvZGVjLAorCQkJICAgICBXTTg5OTRfUkFURV9TVEFUVVMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFhZGMxbF9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQURDL0RNSUMgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMXJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkFEQy9ETUlDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjMmxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjIgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMmRhYzJyX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCisjZGVmaW5lIFdNODk5NF9DTEFTU19XX1NXSVRDSCh4bmFtZSwgcmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZvbHN3LCAucHV0ID0gd204OTk0X3B1dF9jbGFzc193LCBcCisJLnByaXZhdGVfdmFsdWUgPSAgU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfY2xhc3NfdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisKKwl3bTg5OTRfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFsX21peFtdID0geworV004OTk0X0NMQVNTX1dfU1dJVENIKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDUsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgNCwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjIgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAyLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMSwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFyX21peFtdID0geworV004OTk0X0NMQVNTX1dfU1dJVENIKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA1LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA0LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAyLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDEsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJBREMvRE1JQzEiLCAiRE1JQzIiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZTFfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgMCwgMiwgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaWRldG9uZTFfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IFNpZGV0b25lIE11eCIsIHNpZGV0b25lMV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZTJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgMSwgMiwgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaWRldG9uZTJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBTaWRldG9uZSBNdXgiLCBzaWRldG9uZTJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYxZGFjX3RleHRbXSA9IHsKKwkiQUlGMURBQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMWRhY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMiwgYWlmMWRhY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFkYWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYxREFDIE11eCIsIGFpZjFkYWNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYyZGFjX3RleHRbXSA9IHsKKwkiQUlGMkRBQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmRhY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMSwgMiwgYWlmMmRhY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyREFDIE11eCIsIGFpZjJkYWNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYyYWRjX3RleHRbXSA9IHsKKwkiQUlGMkFEQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmFkY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMiwgMiwgYWlmMmFkY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJhZGNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyQURDIE11eCIsIGFpZjJhZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYzYWRjX3RleHRbXSA9IHsKKwkiQUlGMUFEQ0RBVCIsICJBSUYyQURDREFUIiwgIkFJRjJEQUNEQVQiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYzYWRjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCAzLCAzLCBhaWYzYWRjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmM2FkY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjNBREMgTXV4IiwgYWlmM2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ0xLX1NZUyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgY2xrX3N5c19ldmVudCwKKwkJICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMUNMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAzLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRTUDJDTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJEU1BJTlRDTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgMSwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjJDTEsiLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxTCIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxUiIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDgsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzFMIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzFSIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJMIiwgIkFJRjEgQ2FwdHVyZSIsCisJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTEsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMyTCIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMlIiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTAsIDApLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMWFkYzFsX21peCwgQVJSQVlfU0laRShhaWYxYWRjMWxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMWFkYzFyX21peCwgQVJSQVlfU0laRShhaWYxYWRjMXJfbWl4KSksCisKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMkRBQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYyZGFjMmxfbWl4LCBBUlJBWV9TSVpFKGFpZjJkYWMybF9taXgpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYyZGFjMnJfbWl4LCBBUlJBWV9TSVpFKGFpZjJkYWMycl9taXgpKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNpZGV0b25lMV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzaWRldG9uZTJfbXV4KSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgZGFjMWxfbWl4LCBBUlJBWV9TSVpFKGRhYzFsX21peCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgZGFjMXJfbWl4LCBBUlJBWV9TSVpFKGRhYzFyX21peCkpLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMkFEQ0wiLCBOVUxMLCAwLAorCQkgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEzLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDUiIsIE5VTEwsIDAsCisJCSAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0wiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTMsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ1IiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTIsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDREFUIiwgIkFJRjEgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0RBVCIsICJBSUYyIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDREFUIiwgIkFJRjIgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkFJRjFEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMWRhY19tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMkRBQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYyZGFjX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUYyQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjJhZGNfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRjNBREMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmM2FkY19tdXgpLAorCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYzREFDREFUIiwgIkFJRjMgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM0FEQ0RBVCIsICJBSUYzIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJUT0NMSyIsIFdNODk5NF9DTE9DS0lOR18xLCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiRE1JQzJMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgNSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMlIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA0LCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDMsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMiwgMCksCisKKy8qIFBvd2VyIGlzIGRvbmUgd2l0aCB0aGUgbXV4ZXMgc2luY2UgdGhlIEFEQyBwb3dlciBhbHNvIGNvbnRyb2xzIHRoZQorICogZG93bnNhbXBsaW5nIGNoYWluLCB0aGUgY2hpcCB3aWxsIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHRoZSBhbmFsb2d1ZQorICogc3BlY2lmaWMgcG9ydGlvbnMuCisgKi8KK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBTTkRfU09DX05PUE0sIDEsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkFEQ0wgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMSwgMCwgJmFkY2xfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFEQ1IgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwgJmFkY3JfbXV4KSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzJSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMiwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHBsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHByX211eCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLTCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDAsCisJCSAgIGxlZnRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShsZWZ0X3NwZWFrZXJfbWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLUiIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDAsCisJCSAgIHJpZ2h0X3NwZWFrZXJfbWl4ZXIsIEFSUkFZX1NJWkUocmlnaHRfc3BlYWtlcl9taXhlcikpLAorCitTTkRfU09DX0RBUE1fUE9TVCgiRGVidWcgbG9nIiwgcG9zdF9ldiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworCisJeyAiQ0xLX1NZUyIsIE5VTEwsICJBSUYxQ0xLIiwgY2hlY2tfY2xrX3N5cyB9LAorCXsgIkNMS19TWVMiLCBOVUxMLCAiQUlGMkNMSyIsIGNoZWNrX2Nsa19zeXMgfSwKKworCXsgIkRTUDFDTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJEU1AyQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRFNQSU5UQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjFBREMyTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMyTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYxREFDMkwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMkwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyQURDTCIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJBRENSIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJBSUYyQURDUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkFJRjJEQUNMIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMUwiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzFSIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCXsgIkFEQ0wiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQURDTCIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBRENSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQURDUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQURDTCBNdXgiLCAiQURDIiwgIkFEQ0wiIH0sCisJeyAiQURDTCBNdXgiLCAiRE1JQyIsICJETUlDMUwiIH0sCisJeyAiQURDUiBNdXgiLCAiQURDIiwgIkFEQ1IiIH0sCisJeyAiQURDUiBNdXgiLCAiRE1JQyIsICJETUlDMVIiIH0sCisKKwl7ICJEQUMxTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkRBQzFMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiREFDMUwiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiREFDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJEQUMxUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJEQUMyUiIsIE5VTEwsICJBSUYyREFDUiIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiVE9DTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCS8qIEFJRjEgb3V0cHV0cyAqLworCXsgIkFJRjFBREMxTCIsIE5VTEwsICJBSUYxQURDMUwgTWl4ZXIiIH0sCisJeyAiQUlGMUFEQzFMIE1peGVyIiwgIkFEQy9ETUlDIFN3aXRjaCIsICJBRENMIE11eCIgfSwKKwl7ICJBSUYxQURDMUwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiQUlGMUFEQzFSIE1peGVyIiB9LAorCXsgIkFJRjFBREMxUiBNaXhlciIsICJBREMvRE1JQyBTd2l0Y2giLCAiQURDUiBNdXgiIH0sCisJeyAiQUlGMUFEQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCisJLyogUGluIGxldmVsIHJvdXRpbmcgZm9yIEFJRjMgKi8KKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAorCXsgIkFJRjFEQUMyTCIsIE5VTEwsICJBSUYxREFDIE11eCIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKKworCXsgIkFJRjFEQUMgTXV4IiwgIkFJRjFEQUNEQVQiLCAiQUlGMURBQ0RBVCIgfSwKKwl7ICJBSUYxREFDIE11eCIsICJBSUYzREFDREFUIiwgIkFJRjNEQUNEQVQiIH0sCisJeyAiQUlGMkRBQyBNdXgiLCAiQUlGMkRBQ0RBVCIsICJBSUYyREFDREFUIiB9LAorCXsgIkFJRjJEQUMgTXV4IiwgIkFJRjNEQUNEQVQiLCAiQUlGM0RBQ0RBVCIgfSwKKwl7ICJBSUYyQURDIE11eCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENMIiB9LAorCXsgIkFJRjJBREMgTXV4IiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ1IiIH0sCisJeyAiQUlGMkFEQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzQURDREFUIiB9LAorCisJLyogREFDMSBpbnB1dHMgKi8KKwl7ICJEQUMxTCIsIE5VTEwsICJEQUMxTCBNaXhlciIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzFSIiwgTlVMTCwgIkRBQzFSIE1peGVyIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJLyogREFDMi9BSUYyIG91dHB1dHMgICovCisJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAorCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxUiIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYyQURDIE11eCIgfSwKKworCS8qIEFJRjMgb3V0cHV0ICovCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMxTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjFBRENEQVQiLCAiQUlGMUFEQzFSIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMUFEQ0RBVCIsICJBSUYxQURDMkwiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMyUiIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ0wiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENSIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMkRBQ0RBVCIsICJBSUYyREFDTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJEQUNEQVQiLCAiQUlGMkRBQ1IiIH0sCisKKwkvKiBTaWRldG9uZSAqLworCXsgIkxlZnQgU2lkZXRvbmUiLCAiQURDL0RNSUMxIiwgIkFEQ0wgTXV4IiB9LAorCXsgIkxlZnQgU2lkZXRvbmUiLCAiRE1JQzIiLCAiRE1JQzJMIiB9LAorCXsgIlJpZ2h0IFNpZGV0b25lIiwgIkFEQy9ETUlDMSIsICJBRENSIE11eCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJETUlDMiIsICJETUlDMlIiIH0sCisKKwkvKiBPdXRwdXQgc3RhZ2VzICovCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiREFDIFN3aXRjaCIsICJEQUMxTCIgfSwKKwl7ICJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiREFDIFN3aXRjaCIsICJEQUMxUiIgfSwKKworCXsgIlNQS0wiLCAiREFDMSBTd2l0Y2giLCAiREFDMUwiIH0sCisJeyAiU1BLTCIsICJEQUMyIFN3aXRjaCIsICJEQUMyTCIgfSwKKworCXsgIlNQS1IiLCAiREFDMSBTd2l0Y2giLCAiREFDMVIiIH0sCisJeyAiU1BLUiIsICJEQUMyIFN3aXRjaCIsICJEQUMyUiIgfSwKKworCXsgIkxlZnQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDMUwiIH0sCisJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDMVIiIH0sCit9OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBGTEwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAxNikgKiAxMCkKKworc3RydWN0IGZsbF9kaXYgeworCXUxNiBvdXRkaXY7CisJdTE2IG47CisJdTE2IGs7CisJdTE2IGNsa19yZWZfZGl2OworCXUxNiBmbGxfZnJhdGlvOworfTsKKworc3RhdGljIGludCB3bTg5OTRfZ2V0X2ZsbF9jb25maWcoc3RydWN0IGZsbF9kaXYgKmZsbCwKKwkJCQkgaW50IGZyZXFfaW4sIGludCBmcmVxX291dCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2Q7CisKKwlwcl9kZWJ1ZygiRkxMIGlucHV0PSVkSHosIG91dHB1dD0lZEh6XG4iLCBmcmVxX2luLCBmcmVxX291dCk7CisKKwkvKiBTY2FsZSB0aGUgaW5wdXQgZnJlcXVlbmN5IGRvd24gdG8gPD0gMTMuNU1IeiAqLworCWZsbC0+Y2xrX3JlZl9kaXYgPSAwOworCXdoaWxlIChmcmVxX2luID4gMTM1MDAwMDApIHsKKwkJZmxsLT5jbGtfcmVmX2RpdisrOworCQlmcmVxX2luIC89IDI7CisKKwkJaWYgKGZsbC0+Y2xrX3JlZl9kaXYgPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXByX2RlYnVnKCJDTEtfUkVGX0RJVj0lZCwgRnJlZj0lZEh6XG4iLCBmbGwtPmNsa19yZWZfZGl2LCBmcmVxX2luKTsKKworCS8qIFNjYWxlIHRoZSBvdXRwdXQgdG8gZ2l2ZSA5ME1Iejw9RnZjbzw9MTAwTUh6ICovCisJZmxsLT5vdXRkaXYgPSAzOworCXdoaWxlIChmcmVxX291dCAqIChmbGwtPm91dGRpdiArIDEpIDwgOTAwMDAwMDApIHsKKwkJZmxsLT5vdXRkaXYrKzsKKwkJaWYgKGZsbC0+b3V0ZGl2ID4gNjMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZnJlcV9vdXQgKj0gZmxsLT5vdXRkaXYgKyAxOworCXByX2RlYnVnKCJPVVRESVY9JWQsIEZ2Y289JWRIelxuIiwgZmxsLT5vdXRkaXYsIGZyZXFfb3V0KTsKKworCWlmIChmcmVxX2luID4gMTAwMDAwMCkgeworCQlmbGwtPmZsbF9mcmF0aW8gPSAwOworCX0gZWxzZSB7CisJCWZsbC0+ZmxsX2ZyYXRpbyA9IDM7CisJCWZyZXFfaW4gKj0gODsKKwl9CisJcHJfZGVidWcoIkZMTF9GUkFUSU89JWQsIEZyZWY9JWRIelxuIiwgZmxsLT5mbGxfZnJhdGlvLCBmcmVxX2luKTsKKworCS8qIE5vdywgY2FsY3VsYXRlIE4uSyAqLworCU5kaXYgPSBmcmVxX291dCAvIGZyZXFfaW47CisKKwlmbGwtPm4gPSBOZGl2OworCU5tb2QgPSBmcmVxX291dCAlIGZyZXFfaW47CisJcHJfZGVidWcoIk5tb2Q9JWRcbiIsIE5tb2QpOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCBmcmVxX2luKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCWZsbC0+ayA9IEsgLyAxMDsKKworCXByX2RlYnVnKCJOPSV4IEs9JXhcbiIsIGZsbC0+biwgZmxsLT5rKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgaWQsIGludCBzcmMsCisJCQkgIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJlZ19vZmZzZXQsIHJldDsKKwlzdHJ1Y3QgZmxsX2RpdiBmbGw7CisJdTE2IHJlZywgYWlmMSwgYWlmMjsKKworCWFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEpCisJCSYgV004OTk0X0FJRjFDTEtfRU5BOworCisJYWlmMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSkKKwkJJiBXTTg5OTRfQUlGMkNMS19FTkE7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBXTTg5OTRfRkxMMToKKwkJcmVnX29mZnNldCA9IDA7CisJCWlkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTRfRkxMMjoKKwkJcmVnX29mZnNldCA9IDB4MjA7CisJCWlkID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQXJlIHdlIGNoYW5naW5nIGFueXRoaW5nPyAqLworCWlmICh3bTg5OTQtPmZsbFtpZF0uc3JjID09IHNyYyAmJgorCSAgICB3bTg5OTQtPmZsbFtpZF0uaW4gPT0gZnJlcV9pbiAmJiB3bTg5OTQtPmZsbFtpZF0ub3V0ID09IGZyZXFfb3V0KQorCQlyZXR1cm4gMDsKKworCS8qIElmIHdlJ3JlIHN0b3BwaW5nIHRoZSBGTEwgcmVkbyB0aGUgb2xkIGNvbmZpZyAtIG5vCisJICogcmVnaXN0ZXJzIHdpbGwgYWN0dWFsbHkgYmUgd3JpdHRlbiBidXQgd2UgYXZvaWQgR0NDIGZsb3cKKwkgKiBhbmFseXNpcyBidWdzIHNwZXdpbmcgd2FybmluZ3MuCisJICovCisJaWYgKGZyZXFfb3V0KQorCQlyZXQgPSB3bTg5OTRfZ2V0X2ZsbF9jb25maWcoJmZsbCwgZnJlcV9pbiwgZnJlcV9vdXQpOworCWVsc2UKKwkJcmV0ID0gd204OTk0X2dldF9mbGxfY29uZmlnKCZmbGwsIHdtODk5NC0+ZmxsW2lkXS5pbiwKKwkJCQkJICAgIHdtODk5NC0+ZmxsW2lkXS5vdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogR2F0ZSB0aGUgQUlGIGNsb2NrcyB3aGlsZSB3ZSByZWNsb2NrICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkEsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BLCAwKTsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHRvIGRpc2FibGUgdGhlIEZMTCB3aGlsZSByZWNvbmZpZ3VyaW5nICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8xICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9FTkEsIDApOworCisJcmVnID0gKGZsbC5vdXRkaXYgPDwgV004OTk0X0ZMTDFfT1VURElWX1NISUZUKSB8CisJCShmbGwuZmxsX2ZyYXRpbyA8PCBXTTg5OTRfRkxMMV9GUkFUSU9fU0hJRlQpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfMiArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk0X0ZMTDFfT1VURElWX01BU0sgfAorCQkJICAgIFdNODk5NF9GTEwxX0ZSQVRJT19NQVNLLCByZWcpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8zICsgcmVnX29mZnNldCwgZmxsLmspOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF80ICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9OX01BU0ssCisJCQkJICAgIGZsbC5uIDw8IFdNODk5NF9GTEwxX05fU0hJRlQpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF81ICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX01BU0ssCisJCQkgICAgZmxsLmNsa19yZWZfZGl2IDw8IFdNODk5NF9GTEwxX1JFRkNMS19ESVZfU0hJRlQpOworCisJLyogRW5hYmxlICh3aXRoIGZyYWN0aW9uYWwgbW9kZSBpZiByZXF1aXJlZCkgKi8KKwlpZiAoZnJlcV9vdXQpIHsKKwkJaWYgKGZsbC5rKQorCQkJcmVnID0gV004OTk0X0ZMTDFfRU5BIHwgV004OTk0X0ZMTDFfRlJBQzsKKwkJZWxzZQorCQkJcmVnID0gV004OTk0X0ZMTDFfRU5BOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzEgKyByZWdfb2Zmc2V0LAorCQkJCSAgICBXTTg5OTRfRkxMMV9FTkEgfCBXTTg5OTRfRkxMMV9GUkFDLAorCQkJCSAgICByZWcpOworCX0KKworCXdtODk5NC0+ZmxsW2lkXS5pbiA9IGZyZXFfaW47CisJd204OTk0LT5mbGxbaWRdLm91dCA9IGZyZXFfb3V0OworCisJLyogRW5hYmxlIGFueSBnYXRlZCBBSUYgY2xvY2tzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkEsIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BLCBhaWYyKTsKKworCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBBSUYzIHNoYXJlcyBjbG9ja2luZyB3aXRoIEFJRjEvMiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMToKKwkJd204OTk0LT5zeXNjbGtbZGFpLT5pZCAtIDFdID0gV004OTk0X1NZU0NMS19NQ0xLMTsKKwkJd204OTk0LT5tY2xrWzBdID0gZnJlcTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIE1DTEsxIGF0ICV1SHpcbiIsCisJCQlkYWktPmlkLCBmcmVxKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfTUNMSzI6CisJCS8qIFRPRE86IFNldCBHUElPIEFGICovCisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfTUNMSzI7CisJCXdtODk5NC0+bWNsa1sxXSA9IGZyZXE7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBNQ0xLMiBhdCAldUh6XG4iLAorCQkJZGFpLT5pZCwgZnJlcSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDE6CisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfRkxMMTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIEZMTDFcbiIsIGRhaS0+aWQpOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19GTEwyOgorCQl3bTg5OTQtPnN5c2Nsa1tkYWktPmlkIC0gMV0gPSBXTTg5OTRfU1lTQ0xLX0ZMTDI7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBGTEwyXG4iLCBkYWktPmlkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb25maWd1cmVfY2xvY2soY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQ9Mng0MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk0X1ZNSURfU0VMX01BU0ssIDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIFR3ZWFrIERDIHNlcnZvIGNvbmZpZ3VyYXRpb24gZm9yIGltcHJvdmVkCisJCQkgKiBwZXJmb3JtYW5jZS4gKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MTAyLCAweDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg1NiwgMHgzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MTAyLCAwKTsKKworCQkJLyogRGlzY2hhcmdlIExJTkVPVVQxICYgMiAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMSwKKwkJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gsCisJCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCQkgICAgV004OTk0X0xJTkVPVVQyX0RJU0NIKTsKKworCQkJLyogU3RhcnR1cCBiaWFzLCBWTUlEIHJhbXAgJiBidWZmZXIgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzIsCisJCQkJCSAgICBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywKKwkJCQkJICAgIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCQkgICAgKDB4MTEgPDwgV004OTk0X1ZNSURfUkFNUF9TSElGVCkpOworCisJCQkvKiBNYWluIGJpYXMgZW5hYmxlLCBWTUlEPTJ4NDBrICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTk0X0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX1NFTF9NQVNLLAorCQkJCQkgICAgV004OTk0X0JJQVNfRU5BIHwgMHgyKTsKKworCQkJbXNsZWVwKDIwKTsKKwkJfQorCisJCS8qIFZNSUQ9Mng1MDBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5NF9WTUlEX1NFTF9NQVNLLCAweDQpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBTd2l0Y2ggb3ZlciB0byBzdGFydHVwIGJpYXNlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8yLAorCQkJCSAgICBXTTg5OTRfQklBU19TUkMgfCBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9SQU1QX01BU0ssCisJCQkJICAgIFdNODk5NF9CSUFTX1NSQyB8IFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJICAgICgxIDw8IFdNODk5NF9WTUlEX1JBTVBfU0hJRlQpKTsKKworCQkvKiBEaXNhYmxlIG1haW4gYmlhc2VzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5NF9CSUFTX0VOQSB8IFdNODk5NF9WTUlEX1NFTF9NQVNLLCAwKTsKKworCQkvKiBEaXNjaGFyZ2UgbGluZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8xLAorCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gsCisJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJICAgIFdNODk5NF9MSU5FT1VUMl9ESVNDSCk7CisKKwkJbXNsZWVwKDUpOworCisJCS8qIFN3aXRjaCBvZmYgc3RhcnR1cCBiaWFzZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMiwKKwkJCQkgICAgV004OTk0X0JJQVNfU1JDIHwgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfUkFNUF9NQVNLLCAwKTsKKworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlpbnQgbXNfcmVnOworCWludCBhaWYxX3JlZzsKKwlpbnQgbXMgPSAwOworCWludCBhaWYxID0gMDsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMToKKwkJbXNfcmVnID0gV004OTk0X0FJRjFfTUFTVEVSX1NMQVZFOworCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYxX0NPTlRST0xfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltc19yZWcgPSBXTTg5OTRfQUlGMl9NQVNURVJfU0xBVkU7CisJCWFpZjFfcmVnID0gV004OTk0X0FJRjJfQ09OVFJPTF8xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCW1zID0gV004OTk0X0FJRjFfTVNUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZjEgfD0gV004OTk0X0FJRjFfTFJDTEtfSU5WOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZjEgfD0gMHgxODsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZjEgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmMSB8PSAweDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlYgfCBXTTg5OTRfQUlGMV9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBhaWYxX3JlZywKKwkJCSAgICBXTTg5OTRfQUlGMV9CQ0xLX0lOViB8IFdNODk5NF9BSUYxX0xSQ0xLX0lOViB8CisJCQkgICAgV004OTk0X0FJRjFfRk1UX01BU0ssCisJCQkgICAgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbXNfcmVnLCBXTTg5OTRfQUlGMV9NU1RSLAorCQkJICAgIG1zKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgdmFsLCByYXRlOworfSBzcnNbXSA9IHsKKwl7IDAsICAgODAwMCB9LAorCXsgMSwgIDExMDI1IH0sCisJeyAyLCAgMTIwMDAgfSwKKwl7IDMsICAxNjAwMCB9LAorCXsgNCwgIDIyMDUwIH0sCisJeyA1LCAgMjQwMDAgfSwKKwl7IDYsICAzMjAwMCB9LAorCXsgNywgIDQ0MTAwIH0sCisJeyA4LCAgNDgwMDAgfSwKKwl7IDksICA4ODIwMCB9LAorCXsgMTAsIDk2MDAwIH0sCit9OworCitzdGF0aWMgaW50IGZzX3JhdGlvc1tdID0geworCTY0LCAxMjgsIDE5MiwgMjU2LCAzNDgsIDUxMiwgNzY4LCAxMDI0LCAxNDA4LCAxNTM2Cit9OworCitzdGF0aWMgaW50IGJjbGtfZGl2c1tdID0geworCTEwLCAxNSwgMjAsIDMwLCA0MCwgNTAsIDYwLCA4MCwgMTEwLCAxMjAsIDE2MCwgMjIwLCAyNDAsIDMyMCwgNDQwLCA0ODAsCisJNjQwLCA4ODAsIDk2MCwgMTI4MCwgMTc2MCwgMTkyMAorfTsKKworc3RhdGljIGludCB3bTg5OTRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBhaWYxX3JlZzsKKwlpbnQgYmNsa19yZWc7CisJaW50IGxyY2xrX3JlZzsKKwlpbnQgcmF0ZV9yZWc7CisJaW50IGFpZjEgPSAwOworCWludCBiY2xrID0gMDsKKwlpbnQgbHJjbGsgPSAwOworCWludCByYXRlX3ZhbCA9IDA7CisJaW50IGlkID0gZGFpLT5pZCAtIDE7CisKKwlpbnQgaSwgY3VyX3ZhbCwgYmVzdF92YWwsIGJjbGtfcmF0ZSwgYmVzdDsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMToKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMV9DT05UUk9MXzE7CisJCWJjbGtfcmVnID0gV004OTk0X0FJRjFfQkNMSzsKKwkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMV9SQVRFOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgd204OTk0LT5scmNsa19zaGFyZWRbMF0pCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMURBQ19MUkNMSzsKKwkJZWxzZQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjFBRENfTFJDTEs7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMl9DT05UUk9MXzE7CisJCWJjbGtfcmVnID0gV004OTk0X0FJRjJfQkNMSzsKKwkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMl9SQVRFOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgd204OTk0LT5scmNsa19zaGFyZWRbMV0pCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMkRBQ19MUkNMSzsKKwkJZWxzZQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjJBRENfTFJDTEs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJjbGtfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiAyOworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYmNsa19yYXRlICo9IDE2OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYmNsa19yYXRlICo9IDIwOworCQlhaWYxIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWJjbGtfcmF0ZSAqPSAyNDsKKwkJYWlmMSB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQliY2xrX3JhdGUgKj0gMzI7CisJCWFpZjEgfD0gMHg2MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHJ5IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgc2FtcGxlIHJhdGU7IGxvb2sgZm9yIGFuIGV4YWN0IG1hdGNoLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNycyk7IGkrKykKKwkJaWYgKHNyc1tpXS5yYXRlID09IHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQlicmVhazsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHNycykpCisJCXJldHVybiAtRUlOVkFMOworCXJhdGVfdmFsIHw9IHNyc1tpXS52YWwgPDwgV004OTk0X0FJRjFfU1JfU0hJRlQ7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiU2FtcGxlIHJhdGUgaXMgJWRIelxuIiwgc3JzW2ldLnJhdGUpOworCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZENMSyBpcyAlZEh6LCB0YXJnZXQgQkNMSyAlZEh6XG4iLAorCQlkYWktPmlkLCB3bTg5OTQtPmFpZmNsa1tpZF0sIGJjbGtfcmF0ZSk7CisKKwlpZiAod204OTk0LT5haWZjbGtbaWRdID09IDApIHsKKwkJZGV2X2VycihkYWktPmRldiwgIkFJRiVkQ0xLIG5vdCBjb25maWd1cmVkXG4iLCBkYWktPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQUlGQ0xLL2ZzIHJhdGlvOyBsb29rIGZvciBhIGNsb3NlIG1hdGNoIGluIGVpdGhlciBkaXJlY3Rpb24gKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IGFicygoZnNfcmF0aW9zWzBdICogcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJICAgICAgIC0gd204OTk0LT5haWZjbGtbaWRdKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShmc19yYXRpb3MpOyBpKyspIHsKKwkJY3VyX3ZhbCA9IGFicygoZnNfcmF0aW9zW2ldICogcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJCSAgICAgIC0gd204OTk0LT5haWZjbGtbaWRdKTsKKwkJaWYgKGN1cl92YWwgPj0gYmVzdF92YWwpCisJCQljb250aW51ZTsKKwkJYmVzdCA9IGk7CisJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwl9CisJZGV2X2RiZyhkYWktPmRldiwgIlNlbGVjdGVkIEFJRiVkQ0xLL2ZzID0gJWRcbiIsCisJCWRhaS0+aWQsIGZzX3JhdGlvc1tiZXN0XSk7CisJcmF0ZV92YWwgfD0gYmVzdDsKKworCS8qIFdlIG1heSBub3QgZ2V0IHF1aXRlIHRoZSByaWdodCBmcmVxdWVuY3kgaWYgdXNpbmcKKwkgKiBhcHByb3hpbWF0ZSBjbG9ja3Mgc28gbG9vayBmb3IgdGhlIGNsb3Nlc3QgbWF0Y2ggdGhhdCBpcworCSAqIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQgKHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgZW5vdWdoCisJICogQkNMS3MgdG8gY2xvY2sgb3V0IHRoZSBzYW1wbGVzKS4KKwkgKi8KKwliZXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiY2xrX2RpdnMpOyBpKyspIHsKKwkJY3VyX3ZhbCA9ICh3bTg5OTQtPmFpZmNsa1tpZF0gKiAxMCAvIGJjbGtfZGl2c1tpXSkgLSBiY2xrX3JhdGU7CisJCWlmIChjdXJfdmFsIDwgMCkgLyogQkNMSyB0YWJsZSBpcyBzb3J0ZWQgKi8KKwkJCWJyZWFrOworCQliZXN0ID0gaTsKKwl9CisJYmNsa19yYXRlID0gd204OTk0LT5haWZjbGtbaWRdICogMTAgLyBiY2xrX2RpdnNbYmVzdF07CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIEJDTEtfRElWICVkIGZvciBhY3R1YWwgQkNMSyAlZEh6XG4iLAorCQliY2xrX2RpdnNbYmVzdF0sIGJjbGtfcmF0ZSk7CisJYmNsayB8PSBiZXN0IDw8IFdNODk5NF9BSUYxX0JDTEtfRElWX1NISUZUOworCisJbHJjbGsgPSBiY2xrX3JhdGUgLyBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWRldl9kYmcoZGFpLT5kZXYsICJVc2luZyBMUkNMSyByYXRlICVkIGZvciBhY3R1YWwgTFJDTEsgJWRIelxuIiwKKwkJbHJjbGssIGJjbGtfcmF0ZSAvIGxyY2xrKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZjFfcmVnLCBXTTg5OTRfQUlGMV9XTF9NQVNLLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiY2xrX3JlZywgV004OTk0X0FJRjFfQkNMS19ESVZfTUFTSywgYmNsayk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcmVnLCBXTTg5OTRfQUlGMURBQ19SQVRFX01BU0ssCisJCQkgICAgbHJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJhdGVfcmVnLCBXTTg5OTRfQUlGMV9TUl9NQVNLIHwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19SQVRFX01BU0ssIHJhdGVfdmFsKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXN3aXRjaCAoZGFpLT5pZCkgeworCQljYXNlIDE6CisJCQl3bTg5OTQtPmRhY19yYXRlc1swXSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJCQl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIDApOworCQkJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl3bTg5OTQtPmRhY19yYXRlc1sxXSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJCQl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIDIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfYWlmX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IG11dGVfcmVnOworCWludCByZWc7CisKKwlzd2l0Y2ggKGNvZGVjX2RhaS0+aWQpIHsKKwljYXNlIDE6CisJCW11dGVfcmVnID0gV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbXV0ZV9yZWcgPSBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZSkKKwkJcmVnID0gV004OTk0X0FJRjFEQUMxX01VVEU7CisJZWxzZQorCQlyZWcgPSAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbXV0ZV9yZWcsIFdNODk5NF9BSUYxREFDMV9NVVRFLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTk0X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg5OTRfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTRfYWlmMV9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gd204OTk0X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gd204OTk0X3NldF9kYWlfZm10LAorCS5od19wYXJhbXMJPSB3bTg5OTRfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5OTRfYWlmX211dGUsCisJLnNldF9wbGwJPSB3bTg5OTRfc2V0X2ZsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5NF9haWYyX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSB3bTg5OTRfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB3bTg5OTRfc2V0X2RhaV9mbXQsCisJLmh3X3BhcmFtcwk9IHdtODk5NF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSAgID0gd204OTk0X2FpZl9tdXRlLAorCS5zZXRfcGxsCT0gd204OTk0X3NldF9mbGwsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTk0X2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiV004OTk0IEFJRjEiLAorCQkuaWQgPSAxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQkgfSwKKwkJLm9wcyA9ICZ3bTg5OTRfYWlmMV9kYWlfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJXTTg5OTQgQUlGMiIsCisJCS5pZCA9IDIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJCS5vcHMgPSAmd204OTk0X2FpZjJfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiV004OTk0IEFJRjMiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjMgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTk0X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTk0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+ZmxsKTsgaSsrKSB7CisJCW1lbWNweSgmd204OTk0LT5mbGxfc3VzcGVuZFtpXSwgJndtODk5NC0+ZmxsW2ldLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmbGxfY29uZmlnKSk7CisJCXJldCA9IHdtODk5NF9zZXRfZmxsKCZjb2RlYy0+ZGFpWzBdLCBpICsgMSwgMCwgMCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkZhaWxlZCB0byBzdG9wIEZMTCVkOiAlZFxuIiwKKwkJCQkgaSArIDEsIHJldCk7CisJfQorCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgaSwgcmV0OworCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpOyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgV004OTk0X0xET18xOgorCQljYXNlIFdNODk5NF9MRE9fMjoKKwkJY2FzZSBXTTg5OTRfU09GVFdBUkVfUkVTRVQ6CisJCQkvKiBIYW5kbGVkIGJ5IG90aGVyIE1GRCBkcml2ZXJzICovCisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFhY2Nlc3NfbWFza3NbaV0ud3JpdGFibGUpCisJCQljb250aW51ZTsKKworCQl3bTg5OTRfcmVnX3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGksIHJlZ19jYWNoZVtpXSk7CisJfQorCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPmZsbCk7IGkrKykgeworCQlyZXQgPSB3bTg5OTRfc2V0X2ZsbCgmY29kZWMtPmRhaVswXSwgaSArIDEsCisJCQkJICAgICB3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLnNyYywKKwkJCQkgICAgIHdtODk5NC0+ZmxsX3N1c3BlbmRbaV0uaW4sCisJCQkJICAgICB3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLm91dCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXN0b3JlIEZMTCVkOiAlZFxuIiwKKwkJCQkgaSArIDEsIHJldCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5OTRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5NF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdtODk5NF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YShzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTk0LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbHNbXSA9IHsKKwkJU09DX0VOVU1fRVhUKCJBSUYxLjEgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkFJRjEuMiBFUSBNb2RlIiwKKwkJCSAgICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCisJCVNPQ19FTlVNX0VYVCgiQUlGMiBFUSBNb2RlIiwKKwkJCSAgICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCisJfTsKKwlpbnQgcmV0LCBpLCBqOworCWNvbnN0IGNoYXIgKip0OworCisJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJIGJ1dCB0aGUgbnVtYmVyCisJICogb2YgdGV4dHMgaXMgbGlrZWx5IHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogY29uZmlndXJhdGlvbnMgZHVlIHRvIHRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRlbmN5IG9mIHRoZQorCSAqIGNvbmZpZ3VyYXRpb25zLiAqLworCXdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgPSAwOworCXdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7IGorKykgeworCQkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkJICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzW2pdKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogIT0gd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4cGFuZCB0aGUgYXJyYXkuLi4gKi8KKwkJdCA9IGtyZWFsbG9jKHdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cywKKwkJCSAgICAgc2l6ZW9mKGNoYXIgKikgKiAKKwkJCSAgICAgKHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgKyAxKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICh0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiAuLi5zdG9yZSB0aGUgbmV3IGVudHJ5Li4uICovCisJCXRbd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0c10gPSAKKwkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZTsKKworCQkvKiAuLi5hbmQgcmVtZW1iZXIgdGhlIG5ldyB2ZXJzaW9uLiAqLworCQl3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKys7CisJCXdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IHQ7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQWxsb2NhdGVkICVkIHVuaXF1ZSBSZVR1bmUgTW9iaWxlIG5hbWVzXG4iLAorCQl3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKTsKKworCXdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLm1heCA9IHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0udGV4dHMgPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHM7CisKKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTk0LT5jb2RlYywgY29udHJvbHMsCisJCQkJICAgQVJSQVlfU0laRShjb250cm9scykpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLmRldiwKKwkJCSJGYWlsZWQgdG8gYWRkIFJlVHVuZSBNb2JpbGUgY29udHJvbHM6ICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfaGFuZGxlX3BkYXRhKHN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuOworCisJd21faHVic19oYW5kbGVfYW5hbG9ndWVfcGRhdGEoY29kZWMsIHBkYXRhLT5saW5lb3V0MV9kaWZmLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0Ml9kaWZmLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0MWZiLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0MmZiLAorCQkJCSAgICAgIHBkYXRhLT5qZF9zY3RociwKKwkJCQkgICAgICBwZGF0YS0+amRfdGhyLAorCQkJCSAgICAgIHBkYXRhLT5taWNiaWFzMV9sdmwsCisJCQkJICAgICAgcGRhdGEtPm1pY2JpYXMyX2x2bCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBEUkMgY29uZmlndXJhdGlvbnNcbiIsIHBkYXRhLT5udW1fZHJjX2NmZ3MpOworCisJaWYgKHBkYXRhLT5udW1fZHJjX2NmZ3MpIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbHNbXSA9IHsKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMURSQzEgTW9kZSIsIHdtODk5NC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5OTRfZ2V0X2RyY19lbnVtLCB3bTg5OTRfcHV0X2RyY19lbnVtKSwKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMURSQzIgTW9kZSIsIHdtODk5NC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5OTRfZ2V0X2RyY19lbnVtLCB3bTg5OTRfcHV0X2RyY19lbnVtKSwKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMkRSQyBNb2RlIiwgd204OTk0LT5kcmNfZW51bSwKKwkJCQkgICAgIHdtODk5NF9nZXRfZHJjX2VudW0sIHdtODk5NF9wdXRfZHJjX2VudW0pLAorCQl9OworCisJCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSAqLworCQl3bTg5OTQtPmRyY190ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJICAgICogcGRhdGEtPm51bV9kcmNfY2ZncywgR0ZQX0tFUk5FTCk7CisJCWlmICghd204OTk0LT5kcmNfdGV4dHMpIHsKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBEUkMgY29uZmlnIHRleHRzXG4iLAorCQkJCXBkYXRhLT5udW1fZHJjX2NmZ3MpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fZHJjX2NmZ3M7IGkrKykKKwkJCXdtODk5NC0+ZHJjX3RleHRzW2ldID0gcGRhdGEtPmRyY19jZmdzW2ldLm5hbWU7CisKKwkJd204OTk0LT5kcmNfZW51bS5tYXggPSBwZGF0YS0+bnVtX2RyY19jZmdzOworCQl3bTg5OTQtPmRyY19lbnVtLnRleHRzID0gd204OTk0LT5kcmNfdGV4dHM7CisKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODk5NC0+Y29kZWMsIGNvbnRyb2xzLAorCQkJCQkgICBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhZGQgRFJDIG1vZGUgY29udHJvbHM6ICVkXG4iLCByZXQpOworCisJCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfTlVNX0RSQzsgaSsrKQorCQkJd204OTk0X3NldF9kcmMoY29kZWMsIGkpOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbnNcbiIsCisJCXBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKTsKKworCWlmIChwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJd204OTk0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHdtODk5NCk7CisJZWxzZQorCQlzbmRfc29jX2FkZF9jb250cm9scygmd204OTk0LT5jb2RlYywgd204OTk0X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTRfZXFfY29udHJvbHMpKTsKK30KKworc3RhdGljIGludCB3bTg5OTRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5OTRfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTk0X2NvZGVjOworCWNvZGVjID0gd204OTk0X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg5OTRfaGFuZGxlX3BkYXRhKGNvZGVjLT5wcml2YXRlX2RhdGEpOworCisJd21faHVic19hZGRfYW5hbG9ndWVfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTRfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk5NF9zbmRfY29udHJvbHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5OTRfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfZGFwbV93aWRnZXRzKSk7CisJd21faHVic19hZGRfYW5hbG9ndWVfcm91dGVzKGNvZGVjLCAwLCAwKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5NCA9IHsKKwkucHJvYmUgPSAJd204OTk0X3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTk0X3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg5OTRfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTk0X3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk5NCk7CisKK3N0YXRpYyBpbnQgd204OTk0X2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IGk7CisJdTE2IHJldjsKKworCWlmICh3bTg5OTRfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQW5vdGhlciBXTTg5OTQgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODk5NCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5OTRfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghd204OTk0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5OTQ7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwljb2RlYy0+bmFtZSA9ICJXTTg5OTQiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204OTk0X3JlYWQ7CisJY29kZWMtPndyaXRlID0gd204OTk0X3dyaXRlOworCWNvZGVjLT5yZWFkYWJsZV9yZWdpc3RlciA9IHdtODk5NF9yZWFkYWJsZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTk0X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTk0X2RhaVswXTsKKwljb2RlYy0+bnVtX2RhaSA9IDM7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTk0X01BWF9SRUdJU1RFUjsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODk5NC0+cmVnX2NhY2hlOworCWNvZGVjLT5kZXYgPSAmcGRldi0+ZGV2OworCisJd204OTk0LT5wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBGaWxsIHRoZSBjYWNoZSB3aXRoIHBoeXNpY2FsIHZhbHVlcyB3ZSBpbmhlcml0ZWQ7IGRvbid0IHJlc2V0ICovCisJcmV0ID0gd204OTk0X2J1bGtfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCAwLAorCQkJICAgICAgIEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpIC0gMSwKKwkJCSAgICAgICBjb2RlYy0+cmVnX2NhY2hlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZTogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBDbGVhciB0aGUgY2FjaGVkIHZhbHVlcyBmb3IgdW5yZWFkYWJsZS92b2xhdGlsZSByZWdpc3RlcnMgdG8KKwkgKiBhdm9pZCBwb3RlbnRpYWwgY29uZnVzaW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+cmVnX2NhY2hlKTsgaSsrKQorCQlpZiAod204OTk0X3ZvbGF0aWxlKGkpIHx8ICF3bTg5OTRfcmVhZGFibGUoaSkpCisJCQl3bTg5OTQtPnJlZ19jYWNoZVtpXSA9IDA7CisKKwkvKiBTZXQgcmV2aXNpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLworCXJldiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NISVBfUkVWSVNJT04pOworCXN3aXRjaCAocmV2KSB7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJd204OTk0LT5odWJzLmRjc19jb2RlcyA9IC01OworCQl3bTg5OTQtPmh1YnMuaHBfc3RhcnR1cF9tb2RlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCQkJICAgCisKKwkvKiBSZW1lbWJlciBpZiBBSUZuTFJDTEsgaXMgY29uZmlndXJlZCBhcyBhIEdQSU8uICBUaGlzIHNob3VsZCBiZQorCSAqIGNvbmZpZ3VyZWQgb24gaW5pdCAtIGlmIGEgc3lzdGVtIHdhbnRzIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkKKwkgKiBhdCBydW50aW1lIHdlIGNhbiBkZWFsIHdpdGggdGhhdCB0aGVuLgorCSAqLworCXJldCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfR1BJT18xKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBHUElPMSBzdGF0ZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwlpZiAoKHJldCAmIFdNODk5NF9HUE5fRk5fTUFTSykgIT0gV004OTk0X0dQX0ZOX1BJTl9TUEVDSUZJQykgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFswXSA9IDE7CisJCXdtODk5NF9kYWlbMF0uc3ltbWV0cmljX3JhdGVzID0gMTsKKwl9IGVsc2UgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFswXSA9IDA7CisJfQorCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9HUElPXzYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIEdQSU82IHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCWlmICgocmV0ICYgV004OTk0X0dQTl9GTl9NQVNLKSAhPSBXTTg5OTRfR1BfRk5fUElOX1NQRUNJRklDKSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzFdID0gMTsKKwkJd204OTk0X2RhaVsxXS5zeW1tZXRyaWNfcmF0ZXMgPSAxOworCX0gZWxzZSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzFdID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTRfZGFpKTsgaSsrKQorCQl3bTg5OTRfZGFpW2ldLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODk5NF9jb2RlYyA9IGNvZGVjOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZXMgKHJpZ2h0IG9ubHk7IHdlIGFsd2F5cyBkbyBsZWZ0IHRoZW4gcmlnaHQpLiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMV9WVSwgV004OTk0X0FJRjFEQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMURBQzJfVlUsIFdNODk5NF9BSUYxREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkRBQ19WVSwgV004OTk0X0FJRjJEQUNfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMV9WVSwgV004OTk0X0FJRjFBREMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMUFEQzJfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkFEQ19WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzJfVlUsIFdNODk5NF9EQUMyX1ZVKTsKKworCS8qIFNldCB0aGUgbG93IGJpdCBvZiB0aGUgM0Qgc3RlcmVvIGRlcHRoIHNvIFRMViBtYXRjaGVzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzIsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMURBQzFfM0RfR0FJTl9TSElGVCwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMV8zRF9HQUlOX1NISUZUKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMl8zRF9HQUlOX1NISUZULAorCQkJICAgIDEgPDwgV004OTk0X0FJRjFEQUMyXzNEX0dBSU5fU0hJRlQpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0RBQ19GSUxURVJTXzIsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMkRBQ18zRF9HQUlOX1NISUZULAorCQkJICAgIDEgPDwgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9TSElGVCk7CisKKwl3bTg5OTRfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg5OTRfZGFpLCBBUlJBWV9TSVpFKHdtODk5NF9kYWkpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3bTg5OTQpOworCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODk5NCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204OTk0X2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk5NC0+Y29kZWM7CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODk5NF9kYWksIEFSUkFZX1NJWkUod204OTk0X2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTk0LT5jb2RlYyk7CisJa2ZyZWUod204OTk0KTsKKwl3bTg5OTRfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODk5NF9jb2RlY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAid204OTk0LWNvZGVjIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gd204OTk0X2NvZGVjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5OTRfY29kZWNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHdtODk5NF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204OTk0X2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTg5OTRfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCB3bTg5OTRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg5OTRfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk5NF9leGl0KTsKKworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTk0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODk5NC1jb2RlYyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZTE0MgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIHdtODk5NC5oICAtLSAgV004OTk0IFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODk5NF9ICisjZGVmaW5lIF9XTTg5OTRfSAorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5OTQ7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5NF9kYWlbXTsKKworLyogU291cmNlcyBmb3IgQUlGMS8yIFNZU0NMSyAtIHVzZSB3aXRoIHNldF9kYWlfc3lzY2xrKCkgKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19NQ0xLMSAxCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfTUNMSzIgMgorI2RlZmluZSBXTTg5OTRfU1lTQ0xLX0ZMTDEgIDMKKyNkZWZpbmUgV004OTk0X1NZU0NMS19GTEwyICA0CisKKyNkZWZpbmUgV004OTk0X0ZMTDEgMQorI2RlZmluZSBXTTg5OTRfRkxMMiAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggYzU4YWFiMy4uY2ViODZiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCkBAIC0yMywxMyArMjMsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSAid205NzEzLmgiCiAKLSNkZWZpbmUgV005NzEzX1ZFUlNJT04gIjAuMTUiCi0KIHN0cnVjdCB3bTk3MTNfcHJpdiB7CiAJdTMyIHBsbF9pbjsgLyogUExMIGlucHV0IGZyZXF1ZW5jeSAqLwogfTsKQEAgLTExNSwxNSArMTE0LDI3IEBACiBTT0NfRU5VTV9TSU5HTEUoTUlDQl9NVVgsIDAsIDIsIHdtOTcxM19taWNiX3NlbGVjdCksIC8qIG1pYyBzZWxlY3Rpb24gMTkgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtNDY1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtYWluX3RsdiwgLTM0NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobWlzY190bHYsIC0xNTAwLCAzMDAsIDApOworc3RhdGljIHVuc2lnbmVkIGludCBtaWNfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMiksCisJMCwgMiwgVExWX0RCX1NDQUxFX0lURU0oMTIwMCwgNjAwLCAwKSwKKwkzLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgzMDAwLCAwLCAwKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MTNfc25kX2FjOTdfY29udHJvbHNbXSA9IHsKLVNPQ19ET1VCTEUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVIsIDgsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSLCA4LCAwLCAzMSwgMSwgb3V0X3RsdiksCiBTT0NfRE9VQkxFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSLCAxNSwgNywgMSwgMSksCi1TT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxLAorCSAgICAgICBvdXRfdGx2KSwKIFNPQ19ET1VCTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0hFQURQSE9ORSwgMTUsIDcsIDEsIDEpLAotU09DX0RPVUJMRSgiTGluZSBJbiBWb2x1bWUiLCBBQzk3X1BDX0JFRVAsIDgsIDAsIDMxLCAxKSwKLVNPQ19ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BIT05FLCA4LCAwLCAzMSwgMSksCi1TT0NfU0lOR0xFKCJNaWMgMSBWb2x1bWUiLCBBQzk3X01JQywgOCwgMzEsIDEpLAotU09DX1NJTkdMRSgiTWljIDIgVm9sdW1lIiwgQUM5N19NSUMsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJMaW5lIEluIFZvbHVtZSIsIEFDOTdfUENfQkVFUCwgOCwgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19ET1VCTEVfVExWKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QSE9ORSwgOCwgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMSBWb2x1bWUiLCBBQzk3X01JQywgOCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMiBWb2x1bWUiLCBBQzk3X01JQywgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMSBQcmVhbXAgVm9sdW1lIiwgQUM5N18zRF9DT05UUk9MLCAxMCwgMywgMCwgbWljX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTWljIDIgUHJlYW1wIFZvbHVtZSIsIEFDOTdfM0RfQ09OVFJPTCwgMTIsIDMsIDAsIG1pY190bHYpLAogCiBTT0NfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSBTd2l0Y2giLCBBQzk3X0xJTkUsIDUsIDEsIDApLAogU09DX1NJTkdMRSgiTWljIEhlYWRwaG9uZSBNaXhlciBWb2x1bWUiLCBBQzk3X0xJTkUsIDAsIDcsIDEpLApAQCAtMTMzLDcgKzE0NCw3IEBACiBTT0NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIEFDOTdfQ0QsIDgsIDAsIDMxLCAwKSwKIFNPQ19TSU5HTEUoIkNhcHR1cmUgWkMgU3dpdGNoIiwgQUM5N19DRCwgNywgMSwgMCksCiAKLVNPQ19TSU5HTEUoIkNhcHR1cmUgdG8gSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfVklERU8sIDExLCA3LCAxKSwKK1NPQ19TSU5HTEVfVExWKCJDYXB0dXJlIHRvIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1ZJREVPLCAxMSwgNywgMSwgbWlzY190bHYpLAogU09DX1NJTkdMRSgiQ2FwdHVyZSB0byBNb25vIEJvb3N0ICgrMjBkQikgU3dpdGNoIiwgQUM5N19WSURFTywgOCwgMSwgMCksCiBTT0NfU0lOR0xFKCJDYXB0dXJlIEFEQyBCb29zdCAoKzIwZEIpIFN3aXRjaCIsIEFDOTdfVklERU8sIDYsIDEsIDApLAogCkBAIC0xNTQsMjggKzE2NSw0MyBAQAogCiBTT0NfU0lOR0xFKCJPdXQ0IFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDE1LCAxLCAxKSwKIFNPQ19TSU5HTEUoIk91dDQgUGxheWJhY2sgWkMgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgMTQsIDEsIDApLAotU09DX1NJTkdMRSgiT3V0NCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCA4LCA2MywgMSksCitTT0NfU0lOR0xFX1RMVigiT3V0NCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCA4LCAzMSwgMSwgb3V0X3RsdiksCiAKIFNPQ19TSU5HTEUoIk91dDMgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgNywgMSwgMSksCiBTT0NfU0lOR0xFKCJPdXQzIFBsYXliYWNrIFpDIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDYsIDEsIDApLAotU09DX1NJTkdMRSgiT3V0MyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCAwLCA2MywgMSksCitTT0NfU0lOR0xFX1RMVigiT3V0MyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCAwLCAzMSwgMSwgb3V0X3RsdiksCiAKLVNPQ19TSU5HTEUoIk1vbm8gQ2FwdHVyZSBWb2x1bWUiLCBBQzk3X01BU1RFUl9UT05FLCA4LCAzMSwgMSksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBDYXB0dXJlIFZvbHVtZSIsIEFDOTdfTUFTVEVSX1RPTkUsIDgsIDMxLCAxLCBtYWluX3RsdiksCiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX1RPTkUsIDcsIDEsIDEpLAogU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBaQyBTd2l0Y2giLCBBQzk3X01BU1RFUl9UT05FLCA2LCAxLCAwKSwKLVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgMCwgMzEsIDEpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgMCwgMzEsIDEsIG91dF90bHYpLAogCi1TT0NfU0lOR0xFKCJCZWVwIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X0FVWCwgMTIsIDcsIDEpLAotU09DX1NJTkdMRSgiQmVlcCBQbGF5YmFjayBTcGVha2VyIFZvbHVtZSIsIEFDOTdfQVVYLCA4LCA3LCAxKSwKLVNPQ19TSU5HTEUoIkJlZXAgUGxheWJhY2sgTW9ubyBWb2x1bWUiLCBBQzk3X0FVWCwgNCwgNywgMSksCitTT0NfU0lOR0xFX1RMVigiSGVhZHBob25lIE1peGVyIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19BVVgsIDEyLCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiU3BlYWtlciBNaXhlciBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQVVYLCA4LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBNaXhlciBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQVVYLCA0LCA3LCAxLCBtaXNjX3RsdiksCiAKLVNPQ19TSU5HTEUoIlZvaWNlIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1BDTSwgMTIsIDcsIDEpLAorU09DX1NJTkdMRV9UTFYoIlZvaWNlIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1BDTSwgMTIsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKIFNPQ19TSU5HTEUoIlZvaWNlIFBsYXliYWNrIE1hc3RlciBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgNywgMSksCiBTT0NfU0lOR0xFKCJWb2ljZSBQbGF5YmFjayBNb25vIFZvbHVtZSIsIEFDOTdfUENNLCA0LCA3LCAxKSwKIAorU09DX1NJTkdMRV9UTFYoIkhlYWRwaG9uZSBNaXhlciBBdXggUGxheWJhY2sgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCAxMiwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCitTT0NfU0lOR0xFX1RMVigiU3BlYWtlciBNaXhlciBWb2ljZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgTWl4ZXIgQXV4IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgOCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCitTT0NfU0lOR0xFX1RMVigiTW9ubyBNaXhlciBWb2ljZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgNCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gTWl4ZXIgQXV4IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgNCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCiBTT0NfU0lOR0xFKCJBdXggUGxheWJhY2sgSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgMTIsIDcsIDEpLAogU09DX1NJTkdMRSgiQXV4IFBsYXliYWNrIE1hc3RlciBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDgsIDcsIDEpLAotU09DX1NJTkdMRSgiQXV4IFBsYXliYWNrIE1vbm8gVm9sdW1lIiwgQUM5N19SRUNfU0VMLCA0LCA3LCAxKSwKIAogU09DX0VOVU0oIkJhc3MgQ29udHJvbCIsIHdtOTcxM19lbnVtWzE2XSksCiBTT0NfU0lOR0xFKCJCYXNzIEN1dC1vZmYgU3dpdGNoIiwgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDEyLCAxLCAxKSwKQEAgLTExODYsOCArMTIxMiw2IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQgPSAwLCByZWc7CiAKLQlwcmludGsoS0VSTl9JTkZPICJXTTk3MTMvV005NzE0IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgV005NzEzX1ZFUlNJT04pOwotCiAJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKIAkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBkNzNjMzA1Li4wYWQ5ZjVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtNjgsMjQgKzY4LDc3IEBACiAJaW50IGNvdW50ID0gMDsKIAogCWRldl9kYmcoY29kZWMtPmRldiwgIldhaXRpbmcgZm9yIERDIHNlcnZvLi4uXG4iKTsKKwogCWRvIHsKIAkJY291bnQrKzsKIAkJbXNsZWVwKDEpOwogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18wKTsKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gc3RhdHVzOiAleFxuIiwgcmVnKTsKLQl9IHdoaWxlICgocmVnICYgV004OTkzX0RDU19DQUxfQ09NUExFVEVfTUFTSykKLQkJICE9IFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgJiYgY291bnQgPCAxMDAwKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm86ICV4XG4iLCByZWcpOworCX0gd2hpbGUgKHJlZyAmIFdNODk5M19EQ1NfREFUQVBBVEhfQlVTWSk7CiAKLQlpZiAoKHJlZyAmIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCi0JICAgICE9IFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCisJaWYgKHJlZyAmIFdNODk5M19EQ1NfREFUQVBBVEhfQlVTWSkKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIERDIFNlcnZvXG4iKTsKIH0KIAogLyoKKyAqIFN0YXJ0dXAgY2FsaWJyYXRpb24gb2YgdGhlIERDIHNlcnZvCisgKi8KK3N0YXRpYyB2b2lkIGNhbGlicmF0ZV9kY19zZXJ2byhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHJlZywgZGNzX2NmZzsKKworCS8qIFNldCBmb3IgMzIgc2VyaWVzIHVwZGF0ZXMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMSwKKwkJCSAgICBXTTg5OTNfRENTX1NFUklFU19OT18wMV9NQVNLLAorCQkJICAgIDMyIDw8IFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX1NISUZUKTsKKworCS8qIEVuYWJsZSB0aGUgREMgc2Vydm8uICBXcml0ZSBhbGwgYml0cyB0byBhdm9pZCB0cmlnZ2VyaW5nIHN0YXJ0dXAKKwkgKiBvciB3cml0ZSBjYWxpYnJhdGlvbi4KKwkgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKKwkJCSAgICAweEZGRkYsCisJCQkgICAgV004OTkzX0RDU19FTkFfQ0hBTl8wIHwKKwkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzEgfAorCQkJICAgIFdNODk5M19EQ1NfVFJJR19TRVJJRVNfMSB8CisJCQkgICAgV004OTkzX0RDU19UUklHX1NFUklFU18wKTsKKworCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjKTsKKworCS8qIEFwcGx5IGNvcnJlY3Rpb24gdG8gREMgc2Vydm8gcmVzdWx0ICovCisJaWYgKGh1YnMtPmRjc19jb2RlcykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJBcHBseWluZyAlZCBjb2RlIERDIHNlcnZvIGNvcnJlY3Rpb25cbiIsCisJCQlodWJzLT5kY3NfY29kZXMpOworCisJCS8qIEhQT1VUMUwgKi8KKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMSkgJgorCQkJV004OTkzX0RDU19JTlRFR19DSEFOXzBfTUFTSzs7CisJCXJlZyArPSBodWJzLT5kY3NfY29kZXM7CisJCWRjc19jZmcgPSByZWcgPDwgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CisKKwkJLyogSFBPVVQxUiAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18yKSAmCisJCQlXTTg5OTNfRENTX0lOVEVHX0NIQU5fMV9NQVNLOworCQlyZWcgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnIHw9IHJlZzsKKworCQkvKiBEbyBpdCAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMywgZGNzX2NmZyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzAgfAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzEsCisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMCB8CisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMSk7CisKKwkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMpOworCX0KK30KKworLyoKICAqIFVwZGF0ZSB0aGUgREMgc2Vydm8gY2FsaWJyYXRpb24gb24gZ2FpbiBjaGFuZ2VzCiAgKi8KIHN0YXRpYyBpbnQgd204OTkzX3B1dF9kY19zZXJ2byhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgcmV0OwpAQCAtMjUxLDYgKzMwNCw0NyBAQAogCSAgICAgICBsaW5lX3RsdiksCiB9OwogCitzdGF0aWMgaW50IGhwX3N1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJc3dpdGNoIChodWJzLT5ocF9zdGFydHVwX21vZGUpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIEVuYWJsZSB0aGUgaGVhZHBob25lIGFtcCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0VOQSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9FTkEsCisJCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfAorCQkJCQkgICAgV004OTkzX0hQT1VUMVJfRU5BKTsKKworCQkJLyogRW5hYmxlIHRoZSBzZWNvbmQgc3RhZ2UgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLAorCQkJCQkgICAgV004OTkzX0hQT1VUMUxfRExZIHwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFSX0RMWSwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0RMWSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEhQIHN0YXJ0dXAgbW9kZSAlZFxuIiwKKwkJCQlodWJzLT5ocF9zdGFydHVwX21vZGUpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAorCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtMjcxLDE0ICszNjUsMTEgQEAKIAkJcmVnIHw9IFdNODk5M19IUE9VVDFMX0RMWSB8IFdNODk5M19IUE9VVDFSX0RMWTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsIHJlZyk7CiAKLQkJLyogU3RhcnQgdGhlIERDIHNlcnZvICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAotCQkJCSAgICAweEZGRkYsCi0JCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMCB8Ci0JCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMSB8Ci0JCQkJICAgIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzEgfAotCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8wKTsKLQkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMpOworCQkvKiBTbWFsbGVzdCBzdXBwb3J0ZWQgdXBkYXRlIGludGVydmFsICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18xLAorCQkJCSAgICBXTTg5OTNfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLLCAxKTsKKworCQljYWxpYnJhdGVfZGNfc2Vydm8oY29kZWMpOwogCiAJCXJlZyB8PSBXTTg5OTNfSFBPVVQxUl9PVVRQIHwgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUIHwKIAkJCVdNODk5M19IUE9VVDFMX09VVFAgfCBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQ7CkBAIC0yODYsMjMgKzM3NywxOSBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Ci0JCXJlZyAmPSB+KFdNODk5M19IUE9VVDFMX1JNVl9TSE9SVCB8Ci0JCQkgV004OTkzX0hQT1VUMUxfRExZIHwKLQkJCSBXTTg5OTNfSFBPVVQxTF9PVVRQIHwKLQkJCSBXTTg5OTNfSFBPVVQxUl9STVZfU0hPUlQgfAotCQkJIFdNODk5M19IUE9VVDFSX0RMWSB8Ci0JCQkgV004OTkzX0hQT1VUMVJfT1VUUCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9ETFkgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFkgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9STVZfU0hPUlQsIDApOwogCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAotCQkJCSAgICAweGZmZmYsIDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwKKwkJCQkgICAgV004OTkzX0hQT1VUMUxfT1VUUCB8CisJCQkJICAgIFdNODk5M19IUE9VVDFSX09VVFAsIDApOwogCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLCByZWcpOwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAogCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfCBXTTg5OTNfSFBPVVQxUl9FTkEsCiAJCQkJICAgIDApOwotCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAotCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCAwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00NzMsNiArNTYwLDggQEAKIFNORF9TT0NfREFQTV9QR0EoIkxlZnQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDcsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDYsIDAsIE5VTEwsIDApLAogCitTTkRfU09DX0RBUE1fU1VQUExZKCJIZWFkcGhvbmUgU3VwcGx5IiwgU05EX1NPQ19OT1BNLCAwLCAwLCBocF9zdXBwbHlfZXZlbnQsIAorCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCiBTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCSAgIE5VTEwsIDAsCiAJCSAgIGhwX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC02MjYsNiArNzE1LDcgQEAKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE11eCIgfSwKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiIH0sCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiSGVhZHBob25lIFN1cHBseSIgfSwKIAogCXsgIkhQT1VUMUwiLCBOVUxMLCAiSGVhZHBob25lIFBHQSIgfSwKIAl7ICJIUE9VVDFSIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCkBAIC03NTMsNiArODQzLDEyIEBACiAJCQkJICAgIFdNODk5M19MSU5FT1VUMl9NT0RFLAogCQkJCSAgICBXTTg5OTNfTElORU9VVDJfTU9ERSk7CiAKKwkvKiBJZiB0aGUgbGluZSBvdXRwdXRzIGFyZSBkaWZmZXJlbnRpYWwgdGhlbiB3ZSBhcmVuJ3QgcHJlc2VudGluZworCSAqIFZNSUQgYXMgYW4gb3V0cHV0IGFuZCBjYW4gZGlzYWJsZSBpdC4KKwkgKi8KKwlpZiAobGluZW91dDFfZGlmZiAmJiBsaW5lb3V0Ml9kaWZmKQorCQljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisKIAlpZiAobGluZW91dDFmYikKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FERElUSU9OQUxfQ09OVFJPTCwKIAkJCQkgICAgV004OTkzX0xJTkVPVVQxX0ZCLCBXTTg5OTNfTElORU9VVDFfRkIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaAppbmRleCAzNmQzZmJhLi40MjAxMDRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaApAQCAtMTgsNiArMTgsMTIgQEAKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCB3bV9odWJzX3Nwa21peF90bHZbXTsKIAorLyogVGhpcyAqbXVzdCogYmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZGVjLT5wcml2YXRlX2RhdGEgc3RydWN0ICovCitzdHJ1Y3Qgd21faHVic19kYXRhIHsKKwlpbnQgZGNzX2NvZGVzOworCWludCBocF9zdGFydHVwX21vZGU7Cit9OworCiBleHRlcm4gaW50IHdtX2h1YnNfYWRkX2FuYWxvZ3VlX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICopOwogZXh0ZXJuIGludCB3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCB3bV9odWJzX2hhbmRsZV9hbmFsb2d1ZV9wZGF0YShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IDBhMzAyZTEuLmFiNjUxOGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTc2NywxNCArNzY3LDI2IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmICghZGV2LT5jbGtfYWN0aXZlKSB7CisJCQljbGtfZW5hYmxlKGRldi0+Y2xrKTsKKwkJCWRldi0+Y2xrX2FjdGl2ZSA9IDE7CisJCX0KIAkJZGF2aW5jaV9tY2FzcF9zdGFydChkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlkYXZpbmNpX21jYXNwX3N0b3AoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CisJCWlmIChkZXYtPmNsa19hY3RpdmUpIHsKKwkJCWNsa19kaXNhYmxlKGRldi0+Y2xrKTsKKwkJCWRldi0+Y2xrX2FjdGl2ZSA9IDA7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CiAJCWRhdmluY2lfbWNhc3Bfc3RvcChkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKIAkJYnJlYWs7CkBAIC04NjYsNiArODc4LDcgQEAKIAl9CiAKIAljbGtfZW5hYmxlKGRldi0+Y2xrKTsKKwlkZXYtPmNsa19hY3RpdmUgPSAxOwogCiAJZGV2LT5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MobWVtLT5zdGFydCk7CiAJZGV2LT5vcF9tb2RlID0gcGRhdGEtPm9wX21vZGU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmggYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKaW5kZXggNTgyYzkyNC4uZTc1NWI1MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaApAQCAtNDQsNiArNDQsNyBAQAogCWludCBzYW1wbGVfcmF0ZTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdW5zaWduZWQgaW50IGNvZGVjX2ZtdDsKKwl1OCBjbGtfYWN0aXZlOwogCiAJLyogTWNBU1Agc3BlY2lmaWMgZGF0YSAqLwogCWludAl0ZG1fc2xvdHM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwppbmRleCBhZDRkN2Y0Li44MGM3ZmRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfcGxheWJhY2sgPSB7CiAJLmluZm8gPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CiAJCSBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCSBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCiAJLmZvcm1hdHMgPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpLAogCS5yYXRlcyA9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfAogCQkgIFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYyBiL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMKaW5kZXggMzMyNmUyYS4uMWE1YjhlMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYworKysgYi9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jCkBAIC01NSw3ICs1NSw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgcmM7CiAKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiYnBsYW4sZWZpa2EiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiYnBsYW4sZWZpa2EiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkLnBsYXRmb3JtID0gJm1wYzUyMDBfYXVkaW9fZG1hX3BsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMgYi9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYwppbmRleCBiOTI4ZWY3Li42NjQ0Y2JhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYworKysgYi9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJjOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoInBoeXRlYyxwY20wMzAiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicGh5dGVjLHBjbTAzMCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhcmQucGxhdGZvcm0gPSAmbXBjNTIwMF9hdWRpb19kbWFfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L0tjb25maWcgYi9zb3VuZC9zb2MvaW14L0tjb25maWcKaW5kZXggYTcwMDU2MmUuLmM3ZDBmZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW14L0tjb25maWcKQEAgLTEsMjEgKzEsMTMgQEAKLWNvbmZpZyBTTkRfTVgxX01YMl9TT0MKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciBGcmVlY2FsZSBpLk1YMXggaS5NWDJ4IENQVXMiCi0JZGVwZW5kcyBvbiBBUkNIX01YMiB8fCBBUkNIX01YMQorY29uZmlnIFNORF9JTVhfU09DCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgRnJlZXNjYWxlIGkuTVggQ1BVcyIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDICYmIEJST0tFTgogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IEZJUQorCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCi0JICB0aGUgTVgxIG9yIE1YMiBTU0kgaW50ZXJmYWNlLgorCSAgdGhlIGkuTVggU1NJIGludGVyZmFjZS4KIAogY29uZmlnIFNORF9NWENfU09DX1NTSQogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfU09DX01YMjdWSVNfV004OTc0Ci0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBNWDI3IC0gV004OTc0IFZpc3N0cmltX3NtMTAgYm9hcmQiCi0JZGVwZW5kcyBvbiBTTkRfTVgxX01YMl9TT0MgJiYgTUFDSF9NWDI3ICYmIE1BQ0hfSU1YMjdfVklTU1RSSU1fTTEwCi0Jc2VsZWN0IFNORF9NWENfU09DX1NTSQotCXNlbGVjdCBTTkRfU09DX1dNODk3NAotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gVmlzc3RyaW0gU00xMAotCSAgYm9hcmQgd2l0aCBXTTg5NzQuCi0KLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKaW5kZXggYzJmZmQyYy4uOWY4YmI5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCkBAIC0xLDEwICsxLDEyIEBACiAjIGkuTVggUGxhdGZvcm0gU3VwcG9ydAotc25kLXNvYy1teDFfbXgyLW9ianMgOj0gbXgxX214Mi1wY20ubwotc25kLXNvYy1teGMtc3NpLW9ianMgOj0gbXhjLXNzaS5vCitzbmQtc29jLWlteC1vYmpzIDo9IGlteC1zc2kubyBpbXgtcGNtLWZpcS5vCiAKLW9iai0kKENPTkZJR19TTkRfTVgxX01YMl9TT0MpICs9IHNuZC1zb2MtbXgxX214Mi5vCi1vYmotJChDT05GSUdfU05EX01YQ19TT0NfU1NJKSArPSBzbmQtc29jLW14Yy1zc2kubworaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc25kLXNvYy1pbXgtb2JqcyArPSBpbXgtcGNtLWRtYS1teDIubworZW5kaWYKKworb2JqLSQoQ09ORklHX1NORF9JTVhfU09DKSArPSBzbmQtc29jLWlteC5vCiAKICMgaS5NWCBNYWNoaW5lIFN1cHBvcnQKLXNuZC1zb2MtbXgyN3Zpcy13bTg5NzQtb2JqcyA6PSBteDI3dmlzX3dtODk3NC5vCi1vYmotJChDT05GSUdfU05EX1NPQ19NWDI3VklTX1dNODk3NCkgKz0gc25kLXNvYy1teDI3dmlzLXdtODk3NC5vCitzbmQtc29jLXBoeWNvcmUtYWM5Ny1vYmpzIDo9IHBoeWNvcmUtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19QSFlDT1JFX0FDOTcpICs9IHNuZC1zb2MtcGh5Y29yZS1hYzk3Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1kbWEtbXgyLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDUyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogaW14LXBjbS1kbWEtbXgyLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxtYWNoL2RtYS1teDEtbXgyLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKK3N0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSB7CisJaW50IHNnX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdDsKKwlpbnQgcGVyaW9kOworCWludCBwZXJpb2RzOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisJaW50IGRtYTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBwZXJpb2RfY250OworCXZvaWQgKmJ1ZjsKKwlpbnQgcGVyaW9kX3RpbWU7Cit9OworCisvKiBDYWxsZWQgYnkgdGhlIERNQSBmcmFtZXdvcmsgd2hlbiBhIHBlcmlvZCBoYXMgZWxhcHNlZCAqLworc3RhdGljIHZvaWQgaW14X3NzaV9kbWFfcHJvZ3Jlc3Npb24oaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsCisJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmICghc2cpCisJCXJldHVybjsKKworCXJ1bnRpbWUgPSBpcHJ0ZC0+c3Vic3RyZWFtLT5ydW50aW1lOworCisJaXBydGQtPm9mZnNldCA9IHNnLT5kbWFfYWRkcmVzcyAtIHJ1bnRpbWUtPmRtYV9hZGRyOworCisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChpcHJ0ZC0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgaW14X3NzaV9kbWFfY2FsbGJhY2soaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCit7CisJcHJfZXJyKCIlcyBzaG91bGRuJ3QgYmUgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9pbXhfZG1hX2Vycl9jYWxsYmFjayhpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSwgaW50IGVycikKK3sKKwlwcl9lcnIoIkRNQSBlcnJvciBjYWxsYmFjayBjYWxsZWRcbiIpOworCisJcHJfZXJyKCJETUEgdGltZW91dCBvbiBjaGFubmVsICVkIC0lcyVzJXMlc1xuIiwKKwkJIGNoYW5uZWwsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9CVVJTVCA/ICAgICIgYnVyc3QiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9SRVFVRVNUID8gICIgcmVxdWVzdCIgOiAiIiwKKwkJIGVyciAmIElNWF9ETUFfRVJSX1RSQU5TRkVSID8gIiB0cmFuc2ZlciIgOiAiIiwKKwkJIGVyciAmIElNWF9ETUFfRVJSX0JVRkZFUiA/ICAgIiBidWZmZXIiIDogIiIpOworfQorCitzdGF0aWMgaW50IGlteF9zc2lfZG1hX2FsbG9jKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJaXBydGQtPmRtYSA9IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKERSVl9OQU1FLCBETUFfUFJJT19ISUdIKTsKKwlpZiAoaXBydGQtPmRtYSA8IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gY2xhaW0gdGhlIGF1ZGlvIERNQVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMoaXBydGQtPmRtYSwKKwkJCQlpbXhfc3NpX2RtYV9jYWxsYmFjaywKKwkJCQlzbmRfaW14X2RtYV9lcnJfY2FsbGJhY2ssIHN1YnN0cmVhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBpbXhfZG1hX3NldHVwX3Byb2dyZXNzaW9uX2hhbmRsZXIoaXBydGQtPmRtYSwKKwkJCWlteF9zc2lfZG1hX3Byb2dyZXNzaW9uKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHNldHVwIHRoZSBETUEgaGFuZGxlclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGlteF9kbWFfY29uZmlnX2NoYW5uZWwoaXBydGQtPmRtYSwKKwkJCUlNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAorCQkJSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKKwkJCWRtYV9wYXJhbXMtPmRtYSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW5ub3QgY29uZmlndXJlIERNQSBjaGFubmVsOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaXBydGQtPmRtYSwgZG1hX3BhcmFtcy0+YnVyc3RzaXplICogMik7CisKKwlyZXR1cm4gMDsKK291dDoKKwlpbXhfZG1hX2ZyZWUoaXBydGQtPmRtYSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisKKwlpbXhfc3NpX2RtYV9hbGxvYyhzdWJzdHJlYW0pOworCisJaXBydGQtPnNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPnBlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2QgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPm9mZnNldCA9IDA7CisJaXBydGQtPnBlcmlvZF90aW1lID0gSFogLyAocGFyYW1zX3JhdGUocGFyYW1zKSAvCisJCQlwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSk7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOworCisJaWYgKGlwcnRkLT5zZ19jb3VudCAhPSBpcHJ0ZC0+cGVyaW9kcykgeworCQlrZnJlZShpcHJ0ZC0+c2dfbGlzdCk7CisKKwkJaXBydGQtPnNnX2xpc3QgPSBrY2FsbG9jKGlwcnRkLT5wZXJpb2RzICsgMSwKKwkJCQlzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaXBydGQtPnNnX2xpc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXBydGQtPnNnX2NvdW50ID0gaXBydGQtPnBlcmlvZHMgKyAxOworCX0KKworCXNnX2luaXRfdGFibGUoaXBydGQtPnNnX2xpc3QsIGlwcnRkLT5zZ19jb3VudCk7CisJZG1hX2FkZHIgPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBpcHJ0ZC0+cGVyaW9kczsgaSsrKSB7CisJCWlwcnRkLT5zZ19saXN0W2ldLnBhZ2VfbGluayA9IDA7CisJCWlwcnRkLT5zZ19saXN0W2ldLm9mZnNldCA9IDA7CisJCWlwcnRkLT5zZ19saXN0W2ldLmRtYV9hZGRyZXNzID0gZG1hX2FkZHI7CisJCWlwcnRkLT5zZ19saXN0W2ldLmxlbmd0aCA9IGlwcnRkLT5wZXJpb2Q7CisJCWRtYV9hZGRyICs9IGlwcnRkLT5wZXJpb2Q7CisJfQorCisJLyogY2xvc2UgdGhlIGxvb3AgKi8KKwlpcHJ0ZC0+c2dfbGlzdFtpcHJ0ZC0+c2dfY291bnQgLSAxXS5vZmZzZXQgPSAwOworCWlwcnRkLT5zZ19saXN0W2lwcnRkLT5zZ19jb3VudCAtIDFdLmxlbmd0aCA9IDA7CisJaXBydGQtPnNnX2xpc3RbaXBydGQtPnNnX2NvdW50IC0gMV0ucGFnZV9saW5rID0KKwkJCSgodW5zaWduZWQgbG9uZykgaXBydGQtPnNnX2xpc3QgfCAweDAxKSAmIH4weDAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGlwcnRkLT5kbWEgPj0gMCkgeworCQlpbXhfZG1hX2ZyZWUoaXBydGQtPmRtYSk7CisJCWlwcnRkLT5kbWEgPSAtRUlOVkFMOworCX0KKworCWtmcmVlKGlwcnRkLT5zZ19saXN0KTsKKwlpcHJ0ZC0+c2dfbGlzdCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJaXBydGQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlpcHJ0ZC0+YnVmID0gKHVuc2lnbmVkIGludCAqKXN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hcmVhOworCWlwcnRkLT5wZXJpb2RfY250ID0gMDsKKworCXByX2RlYnVnKCIlczogYnVmOiAlcCBwZXJpb2Q6ICVkIHBlcmlvZHM6ICVkXG4iLAorCQkJX19mdW5jX18sIGlwcnRkLT5idWYsIGlwcnRkLT5wZXJpb2QsIGlwcnRkLT5wZXJpb2RzKTsKKworCWVyciA9IGlteF9kbWFfc2V0dXBfc2coaXBydGQtPmRtYSwgaXBydGQtPnNnX2xpc3QsIGlwcnRkLT5zZ19jb3VudCwKKwkJCUlNWF9ETUFfTEVOR1RIX0xPT1AsIGRtYV9wYXJhbXMtPmRtYV9hZGRyLAorCQkJc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA/CisJCQlETUFfTU9ERV9XUklURSA6IERNQV9NT0RFX1JFQUQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlteF9kbWFfZW5hYmxlKGlwcnRkLT5kbWEpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlteF9kbWFfZGlzYWJsZShpcHJ0ZC0+ZG1hKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9pbXhfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIGlwcnRkLT5vZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2lteF9oYXJkd2FyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fUkVTVU1FLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVfbWluID0gODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IElNWF9TU0lfRE1BQlVGX1NJWkUsCisJLnBlcmlvZF9ieXRlc19taW4gPSAxMjgsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxNiAqIDEwMjQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTUsCisJLmZpZm9fc2l6ZSA9IDAsCit9OworCitzdGF0aWMgaW50IHNuZF9pbXhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQ7CisJaW50IHJldDsKKworCWlwcnRkID0ga3phbGxvYyhzaXplb2YoKmlwcnRkKSwgR0ZQX0tFUk5FTCk7CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gaXBydGQ7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnNuZF9pbXhfaGFyZHdhcmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGlteF9wY21fb3BzID0geworCS5vcGVuCQk9IHNuZF9pbXhfb3BlbiwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHNuZF9pbXhfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNuZF9pbXhfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzbmRfaW14X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc25kX2lteF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9pbXhfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gc25kX2lteF9wY21fbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtX2RtYSA9IHsKKwkubmFtZQkJPSAiaW14LWF1ZGlvIiwKKwkucGNtX29wcyAJPSAmaW14X3BjbV9vcHMsCisJLnBjbV9uZXcJPSBpbXhfcGNtX25ldywKKwkucGNtX2ZyZWUJPSBpbXhfcGNtX2ZyZWUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9kbWFfbXgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSkKK3sKKwlzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplID0gRE1BX1RYRklGT19CVVJTVDsKKwlzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplID0gRE1BX1JYRklGT19CVVJTVDsKKworCXJldHVybiAmaW14X3NvY19wbGF0Zm9ybV9kbWE7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWNiOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWZpcS5jCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogaW14LXBjbS1maXEuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBjb2RlIGNvcHlyaWdodGVkIGJ5IEZyZWVzY2FsZSwKKyAqIExpYW0gR2lyZHdvb2QsIEphdmllciBNYXJ0aW4gYW5kIHByb2JhYmx5IG90aGVycy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPGFzbS9maXEuaD4KKworI2luY2x1ZGUgPG1hY2gvc3NpLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKK3N0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSB7CisJaW50IHBlcmlvZDsKKwlpbnQgcGVyaW9kczsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlpbnQgcG9sbF90aW1lOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGlteF9zc2lfc2V0X25leHRfcG9sbChzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkKQoreworCWlwcnRkLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGlwcnRkLT5wb2xsX3RpbWU7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCXVuc2lnbmVkIGxvbmcgZGVsdGE7CisKKwlnZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWlwcnRkLT5vZmZzZXQgPSByZWdzLkFSTV9yOCAmIDB4ZmZmZjsKKwllbHNlCisJCWlwcnRkLT5vZmZzZXQgPSByZWdzLkFSTV9yOSAmIDB4ZmZmZjsKKworCS8qIEhvdyBtdWNoIGRhdGEgaGF2ZSB3ZSB0cmFuc2ZlcnJlZCBzaW5jZSB0aGUgbGFzdCBwZXJpb2QgcmVwb3J0PyAqLworCWlmIChpcHJ0ZC0+b2Zmc2V0ID49IGlwcnRkLT5sYXN0X29mZnNldCkKKwkJZGVsdGEgPSBpcHJ0ZC0+b2Zmc2V0IC0gaXBydGQtPmxhc3Rfb2Zmc2V0OworCWVsc2UKKwkJZGVsdGEgPSBydW50aW1lLT5idWZmZXJfc2l6ZSArIGlwcnRkLT5vZmZzZXQKKwkJCS0gaXBydGQtPmxhc3Rfb2Zmc2V0OworCisJLyogSWYgd2UndmUgdHJhbnNmZXJyZWQgYXQgbGVhc3QgYSBwZXJpb2QgdGhlbiByZXBvcnQgaXQgYW5kCisJICogcmVzZXQgb3VyIHBvbGwgdGltZSAqLworCWlmIChkZWx0YSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCWlwcnRkLT5sYXN0X29mZnNldCA9IGlwcnRkLT5vZmZzZXQ7CisKKwkJaW14X3NzaV9zZXRfbmV4dF9wb2xsKGlwcnRkKTsKKwl9CisKKwkvKiBSZXN0YXJ0IHRoZSB0aW1lcjsgaWYgd2UgZGlkbid0IHJlcG9ydCB3ZSdsbCBydW4gb24gdGhlIG5leHQgdGljayAqLworCWFkZF90aW1lcigmaXBydGQtPnRpbWVyKTsKKworfQorCitzdGF0aWMgc3RydWN0IGZpcV9oYW5kbGVyIGZoID0geworCS5uYW1lCQk9IERSVl9OQU1FLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaXBydGQtPnNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPnBlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2QgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcykgOworCWlwcnRkLT5vZmZzZXQgPSAwOworCWlwcnRkLT5sYXN0X29mZnNldCA9IDA7CisJaXBydGQtPnBvbGxfdGltZSA9IEhaIC8gKHBhcmFtc19yYXRlKHBhcmFtcykgLyBwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSk7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKworCWdldF9maXFfcmVncygmcmVncyk7CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJlZ3MuQVJNX3I4ID0gKGlwcnRkLT5wZXJpb2QgKiBpcHJ0ZC0+cGVyaW9kcyAtIDEpIDw8IDE2OworCWVsc2UKKwkJcmVncy5BUk1fcjkgPSAoaXBydGQtPnBlcmlvZCAqIGlwcnRkLT5wZXJpb2RzIC0gMSkgPDwgMTY7CisKKwlzZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlxX2VuYWJsZTsKK3N0YXRpYyBpbnQgaW14X3BjbV9maXE7CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpbXhfc3NpX3NldF9uZXh0X3BvbGwoaXBydGQpOworCQlhZGRfdGltZXIoJmlwcnRkLT50aW1lcik7CisJCWlmICgrK2ZpcV9lbmFibGUgPT0gMSkKKwkJCWVuYWJsZV9maXEoaW14X3BjbV9maXEpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWRlbF90aW1lcigmaXBydGQtPnRpbWVyKTsKKwkJaWYgKC0tZmlxX2VuYWJsZSA9PSAwKQorCQkJZGlzYWJsZV9maXEoaW14X3BjbV9maXEpOworCisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaW14X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBpcHJ0ZC0+b2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9pbXhfaGFyZHdhcmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1JFU1VNRSwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBJTVhfU1NJX0RNQUJVRl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTYgKiAxMDI0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjU1LAorCS5maWZvX3NpemUgPSAwLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkOworCWludCByZXQ7CisKKwlpcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKCppcHJ0ZCksIEdGUF9LRVJORUwpOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGlwcnRkOworCisJaW5pdF90aW1lcigmaXBydGQtPnRpbWVyKTsKKwlpcHJ0ZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXN1YnN0cmVhbTsKKwlpcHJ0ZC0+dGltZXIuZnVuY3Rpb24gPSBpbXhfc3NpX3RpbWVyX2NhbGxiYWNrOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzbmRfaW14X2hhcmR3YXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWRlbF90aW1lcl9zeW5jKCZpcHJ0ZC0+dGltZXIpOworCWtmcmVlKGlwcnRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGlteF9wY21fb3BzID0geworCS5vcGVuCQk9IHNuZF9pbXhfb3BlbiwKKwkuY2xvc2UJCT0gc25kX2lteF9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHNuZF9pbXhfcGNtX2h3X3BhcmFtcywKKwkucHJlcGFyZQk9IHNuZF9pbXhfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBzbmRfaW14X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gc25kX2lteF9wY21fcG9pbnRlciwKKwkubW1hcAkJPSBzbmRfaW14X3BjbV9tbWFwLAorfTsKKworc3RhdGljIGludCBpbXhfcGNtX2ZpcV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbXhfcGNtX25ldyhjYXJkLCBkYWksIHBjbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJCQlwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtOworCQlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisKKwkJaW14X3NzaV9maXFfdHhfYnVmZmVyID0gKHVuc2lnbmVkIGxvbmcpYnVmLT5hcmVhOworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0KKwkJCXBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsKKwkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJCWlteF9zc2lfZmlxX3J4X2J1ZmZlciA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+YXJlYTsKKwl9CisKKwlzZXRfZmlxX2hhbmRsZXIoJmlteF9zc2lfZmlxX3N0YXJ0LAorCQkmaW14X3NzaV9maXFfZW5kIC0gJmlteF9zc2lfZmlxX3N0YXJ0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybV9maXEgPSB7CisJLnBjbV9vcHMgCT0gJmlteF9wY21fb3BzLAorCS5wY21fbmV3CT0gaW14X3BjbV9maXFfbmV3LAorCS5wY21fZnJlZQk9IGlteF9wY21fZnJlZSwKK307CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtICppbXhfc3NpX2ZpcV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpCit7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBjbGFpbV9maXEoJmZoKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjbGFpbSBmaXE6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlteGNfc2V0X2lycV9maXEoc3NpLT5pcnEsIDEpOworCisJaW14X3BjbV9maXEgPSBzc2ktPmlycTsKKworCWlteF9zc2lfZmlxX2Jhc2UgPSAodW5zaWduZWQgbG9uZylzc2ktPmJhc2U7CisKKwlzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplID0gNDsKKwlzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplID0gNjsKKworCXJldHVybiAmaW14X3NvY19wbGF0Zm9ybV9maXE7Cit9CisKK3ZvaWQgaW14X3NzaV9maXFfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgaW14X3NzaSAqc3NpKQoreworCW14Y19zZXRfaXJxX2ZpcShzc2ktPmlycSwgMCk7CisJcmVsZWFzZV9maXEoJmZoKTsKK30KKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY0NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKQEAgLTAsMCArMSw3NTggQEAKKy8qCisgKiBpbXgtc3NpLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqIFRoZSBpLk1YIFNTSSBjb3JlIGhhcyBzb21lIG5hc3R5IGxpbWl0YXRpb25zIGluIEFDOTcgbW9kZS4gV2hpbGUgbW9zdAorICogc2FuZSBwcm9jZXNzb3IgdmVuZG9ycyBoYXZlIGEgRklGTyBwZXIgQUM5NyBzbG90LCB0aGUgaS5NWCBoYXMgb25seQorICogb25lIEZJRk8gd2hpY2ggY29tYmluZXMgYWxsIHZhbGlkIHJlY2VpdmUgc2xvdHMuIFdlIGNhbm5vdCBldmVuIHNlbGVjdAorICogd2hpY2ggc2xvdHMgd2Ugd2FudCB0byByZWNlaXZlLiBUaGUgV005NzEyIHdpdGggd2hpY2ggdGhpcyBkcml2ZXIKKyAqIHdhcyBkZXZlbG9wcGVkIHdpdGggYWx3YXlzIHNlbmRzIEdQSU8gc3RhdHVzIGRhdGEgaW4gc2xvdCAxMiB3aGljaAorICogd2UgcmVjZWl2ZSBpbiBvdXIgKFBDTS0pIGRhdGEgc3RyZWFtLiBUaGUgb25seSBjaGFuY2Ugd2UgaGF2ZSBpcyB0bworICogbWFudWFsbHkgc2tpcCB0aGlzIGRhdGEgaW4gdGhlIEZJUSBoYW5kbGVyLiBXaXRoIHNhbXBsaW5nIHJhdGVzIGRpZmZlcmVudAorICogZnJvbSA0ODAwMEh6IG5vdCBldmVyeSBmcmFtZSBoYXMgdmFsaWQgcmVjZWl2ZSBkYXRhLCBzbyB0aGUgcmF0aW8KKyAqIGJldHdlZW4gcGNtIGRhdGEgYW5kIEdQSU8gc3RhdHVzIGRhdGEgY2hhbmdlcy4gT3VyIEZJUSBoYW5kbGVyIGlzIG5vdAorICogYWJsZSB0byBoYW5kbGUgdGhpcywgaGVuY2UgdGhpcyBkcml2ZXIgb25seSB3b3JrcyB3aXRoIDQ4MDAwSHogc2FtcGxpbmcKKyAqIHJhdGUuCisgKiBSZWFkaW5nIGFuZCB3cml0aW5nIEFDOTcgcmVnaXN0ZXJzIGlzIGFub3RoZXIgY2hhbGxhbmdlLiBUaGUgY29yZQorICogcHJvdmlkZXMgdXMgc3RhdHVzIGJpdHMgd2hlbiB0aGUgcmVhZCByZWdpc3RlciBpcyB1cGRhdGVkIHdpdGggKmFub3RoZXIqCisgKiB2YWx1ZS4gV2hlbiB3ZSByZWFkIHRoZSBzYW1lIHJlZ2lzdGVyIHR3byB0aW1lcyAoYW5kIHRoZSByZWdpc3RlciBzdGlsbAorICogY29udGFpbnMgdGhlIHNhbWUgdmFsdWUpIHRoZXNlIHN0YXR1cyBiaXRzIGFyZSBub3Qgc2V0LiBXZSB3b3JrCisgKiBhcm91bmQgdGhpcyBieSBub3QgcG9sbGluZyB0aGVzZSBiaXRzIGJ1dCBvbmx5IHdhaXQgYSBmaXhlZCBkZWxheS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImlteC1zc2kuaCIKKworI2RlZmluZSBTU0lfU0FDTlRfREVGQVVMVCAoU1NJX1NBQ05UX0FDOTdFTiB8IFNTSV9TQUNOVF9GVikKKworLyoKKyAqIFNTSSBOZXR3b3JrIE1vZGUgb3IgVERNIHNsb3RzIGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwl1bnNpZ25lZCBpbnQgdHhfbWFzaywgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc2NjcjsKKworCXNjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXNjY3IgJj0gflNTSV9TVENDUl9EQ19NQVNLOworCXNjY3IgfD0gU1NJX1NUQ0NSX0RDKHNsb3RzIC0gMSk7CisJd3JpdGVsKHNjY3IsIHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKwlzY2NyICY9IH5TU0lfU1RDQ1JfRENfTUFTSzsKKwlzY2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJd3JpdGVsKHR4X21hc2ssIHNzaS0+YmFzZSArIFNTSV9TVE1TSyk7CisJd3JpdGVsKHJ4X21hc2ssIHNzaS0+YmFzZSArIFNTSV9TUk1TSyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBEQUkgZm9ybWF0IGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKiBOb3RlOiBXZSBkb24ndCB1c2UgdGhlIEkyUyBtb2RlcyBidXQgaW5zdGVhZCBtYW51YWxseSBjb25maWd1cmUgdGhlCisgKiBTU0kgZm9yIEkyUyBiZWNhdXNlIHRoZSBJMlMgbW9kZSBpcyBvbmx5IGEgcmVnaXN0ZXIgcHJlc2V0LgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBpbXhfc3NpICpzc2kgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdTMyIHN0cmNyID0gMCwgc2NyOworCisJc2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NDUikgJiB+KFNTSV9TQ1JfU1lOIHwgU1NJX1NDUl9ORVQpOworCisJLyogREFJIG1vZGUgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgbG93IDFjbGsgYmVmb3JlIGRhdGEgKi8KKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7CisJCXNjciB8PSBTU0lfU0NSX05FVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCB3aXRoIGRhdGEgKi8KKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVFhCSVQwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0w7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCAxY2xrIGJlZm9yZSBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0wgfCBTU0lfU1RDUl9URUZTOworCQlicmVhazsKKwl9CisKKwkvKiBEQUkgY2xvY2sgaW52ZXJzaW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0k7CisJCXN0cmNyICY9IH5TU0lfU1RDUl9UU0NLUDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJc3RyY3IgJj0gfihTU0lfU1RDUl9UU0NLUCB8IFNTSV9TVENSX1RGU0kpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlzdHJjciB8PSBTU0lfU1RDUl9URlNJIHwgU1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCXN0cmNyICY9IH5TU0lfU1RDUl9URlNJOworCQlzdHJjciB8PSBTU0lfU1RDUl9UU0NLUDsKKwkJYnJlYWs7CisJfQorCisJLyogREFJIGNsb2NrIG1hc3RlciBtYXNrcyAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE1hc3RlciBtb2RlIG5vdCBpbXBsZW1lbnRlZCwgbmVlZHMgaGFuZGxpbmcgb2YgY2xvY2tzLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdHJjciB8PSBTU0lfU1RDUl9URkVOMDsKKworCXdyaXRlbChzdHJjciwgc3NpLT5iYXNlICsgU1NJX1NUQ1IpOworCXdyaXRlbChzdHJjciwgc3NpLT5iYXNlICsgU1NJX1NSQ1IpOworCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgc3lzdGVtIGNsb2NrIGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzY3I7CisKKwlzY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBJTVhfU1NQX1NZU19DTEs6CisJCWlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19PVVQpCisJCQlzY3IgfD0gU1NJX1NDUl9TWVNfQ0xLX0VOOworCQllbHNlCisJCQlzY3IgJj0gflNTSV9TQ1JfU1lTX0NMS19FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHNjciwgc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBDbG9jayBkaXZpZGVycworICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzdGNjciwgc3JjY3I7CisKKwlzdGNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisJc3JjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIElNWF9TU0lfVFhfRElWXzI6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfVFhfRElWX1BTUjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl9QTToKKwkJc3RjY3IgJj0gfjB4ZmY7CisJCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOworCQlicmVhazsKKwljYXNlIElNWF9TU0lfUlhfRElWXzI6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfUlhfRElWX1BTUjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl9QTToKKwkJc3RjY3IgJj0gfjB4ZmY7CisJCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoc3RjY3IsIHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisJd3JpdGVsKHNyY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCksCisgKiBhbHRob3VnaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJ5IHVwcGVyIGxheWVycy4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiByZWcsIHNjY3I7CisKKwkvKiBUeC9SeCBjb25maWcgKi8KKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlyZWcgPSBTU0lfU1RDQ1I7CisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnNzaS0+ZG1hX3BhcmFtc190eDsKKwl9IGVsc2UgeworCQlyZWcgPSBTU0lfU1JDQ1I7CisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnNzaS0+ZG1hX3BhcmFtc19yeDsKKwl9CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgcmVnKSAmIH5TU0lfU1RDQ1JfV0xfTUFTSzsKKworCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgxNik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgyMCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCXNjY3IgfD0gU1NJX1NSQ0NSX1dMKDI0KTsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHNjY3IsIHNzaS0+YmFzZSArIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXhfc3NpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzaWVyX2JpdHMsIHNpZXI7CisJdW5zaWduZWQgaW50IHNjcjsKKworCXNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCXNpZXIgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0lFUik7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfRE1BKQorCQkJc2llcl9iaXRzID0gU1NJX1NJRVJfVERNQUU7CisJCWVsc2UKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1RJRSB8IFNTSV9TSUVSX1RGRTBfRU47CisJfSBlbHNlIHsKKwkJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1JETUFFOworCQllbHNlCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9SSUUgfCBTU0lfU0lFUl9SRkYwX0VOOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2NyIHw9IFNTSV9TQ1JfVEU7CisJCWVsc2UKKwkJCXNjciB8PSBTU0lfU0NSX1JFOworCQlzaWVyIHw9IHNpZXJfYml0czsKKworCQlpZiAoKytzc2ktPmVuYWJsZWQgPT0gMSkKKwkJCXNjciB8PSBTU0lfU0NSX1NTSUVOOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2NyICY9IH5TU0lfU0NSX1RFOworCQllbHNlCisJCQlzY3IgJj0gflNTSV9TQ1JfUkU7CisJCXNpZXIgJj0gfnNpZXJfYml0czsKKworCQlpZiAoLS1zc2ktPmVuYWJsZWQgPT0gMCkKKwkJCXNjciAmPSB+U1NJX1NDUl9TU0lFTjsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykpCisJCS8qIHJ4L3R4IGFyZSBhbHdheXMgZW5hYmxlZCB0byBhY2Nlc3MgYWM5NyByZWdpc3RlcnMgKi8KKwkJd3JpdGVsKHNjciwgc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoc2llciwgc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGlteF9zc2lfcGNtX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGlteF9zc2lfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBpbXhfc3NpX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfdGRtX3Nsb3QJPSBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3QsCisJLnRyaWdnZXIJPSBpbXhfc3NpX3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfZGFpID0geworCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKK307CisKK2ludCBzbmRfaW14X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWludCByZXQ7CisKKwlyZXQgPSBkbWFfbW1hcF9jb2hlcmVudChOVUxMLCB2bWEsIHJ1bnRpbWUtPmRtYV9hcmVhLAorCQkJcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CisKKwlwcl9kZWJ1ZygiJXM6IHJldDogJWQgJXAgMHglMDh4IDB4JTA4eFxuIiwgX19mdW5jX18sIHJldCwKKwkJCXJ1bnRpbWUtPmRtYV9hcmVhLAorCQkJcnVudGltZS0+ZG1hX2FkZHIsCisJCQlydW50aW1lLT5kbWFfYnl0ZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCXNpemVfdCBzaXplID0gSU1YX1NTSV9ETUFCVUZfU0laRTsKKworCWJ1Zi0+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CisJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CisJYnVmLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIHNpemUsCisJCQkJCSAgICZidWYtPmFkZHIsIEdGUF9LRVJORUwpOworCWlmICghYnVmLT5hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlidWYtPmJ5dGVzID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IGlteF9wY21fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK2ludCBpbXhfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCXN0cnVjdCBzbmRfcGNtICpwY20pCit7CisKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZpbXhfcGNtX2RtYW1hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlteF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmOworCWludCBzdHJlYW07CisKKwlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IDI7IHN0cmVhbSsrKSB7CisJCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwkJaWYgKCFzdWJzdHJlYW0pCisJCQljb250aW51ZTsKKworCQlidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCQlpZiAoIWJ1Zi0+YXJlYSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9mcmVlX3dyaXRlY29tYmluZShwY20tPmNhcmQtPmRldiwgYnVmLT5ieXRlcywKKwkJCQkgICAgICBidWYtPmFyZWEsIGJ1Zi0+YWRkcik7CisJCWJ1Zi0+YXJlYSA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtID0geworCS5uYW1lCQk9ICJpbXgtYXVkaW8iLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlteF9zb2NfcGxhdGZvcm0pOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGlteF9hYzk3X2RhaSA9IHsKKwkubmFtZSA9ICJBQzk3IiwKKwkuYWM5N19jb250cm9sID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKK307CisKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfdG9fYWM5NyhzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBpbXhfc3NpLT5iYXNlOworCisJd3JpdGVsKDB4MCwgYmFzZSArIFNTSV9TQ1IpOworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU1RDUik7CisJd3JpdGVsKDB4MCwgYmFzZSArIFNTSV9TUkNSKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVULCBiYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoU1NJX1NGQ1NSX1JGV00wKDgpIHwKKwkJU1NJX1NGQ1NSX1RGV00wKDgpIHwKKwkJU1NJX1NGQ1NSX1JGV00xKDgpIHwKKwkJU1NJX1NGQ1NSX1RGV00xKDgpLCBiYXNlICsgU1NJX1NGQ1NSKTsKKworCXdyaXRlbChTU0lfU1RDQ1JfV0woMTYpIHwgU1NJX1NUQ0NSX0RDKDEyKSwgYmFzZSArIFNTSV9TVENDUik7CisJd3JpdGVsKFNTSV9TVENDUl9XTCgxNikgfCBTU0lfU1RDQ1JfREMoMTIpLCBiYXNlICsgU1NJX1NSQ0NSKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUIHwgU1NJX1NDUl9TU0lFTiwgYmFzZSArIFNTSV9TQ1IpOworCXdyaXRlbChTU0lfU09SX1dBSVQoMyksIGJhc2UgKyBTU0lfU09SKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUIHwgU1NJX1NDUl9TU0lFTiB8CisJCQlTU0lfU0NSX1RFIHwgU1NJX1NDUl9SRSwKKwkJCWJhc2UgKyBTU0lfU0NSKTsKKworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCwgYmFzZSArIFNTSV9TQUNOVCk7CisJd3JpdGVsKDB4ZmYsIGJhc2UgKyBTU0lfU0FDQ0RJUyk7CisJd3JpdGVsKDB4MzAwLCBiYXNlICsgU1NJX1NBQ0NFTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14X3NzaSAqYWM5N19zc2k7CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgbHJlZzsKKwl1bnNpZ25lZCBpbnQgbHZhbDsKKworCWlmIChyZWcgPiAweDdmKQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiJXM6IDB4JTAyeCAweCUwNHhcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisKKwlscmVnID0gcmVnIDw8ICAxMjsKKwl3cml0ZWwobHJlZywgYmFzZSArIFNTSV9TQUNBREQpOworCisJbHZhbCA9IHZhbCA8PCA0OworCXdyaXRlbChsdmFsICwgYmFzZSArIFNTSV9TQUNEQVQpOworCisJd3JpdGVsKFNTSV9TQUNOVF9ERUZBVUxUIHwgU1NJX1NBQ05UX1dSLCBiYXNlICsgU1NJX1NBQ05UKTsKKwl1ZGVsYXkoMTAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlteF9zc2lfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKworCXVuc2lnbmVkIHNob3J0IHZhbCA9IC0xOworCXVuc2lnbmVkIGludCBscmVnOworCisJbHJlZyA9IChyZWcgJiAweDdmKSA8PCAgMTIgOworCXdyaXRlbChscmVnLCBiYXNlICsgU1NJX1NBQ0FERCk7CisJd3JpdGVsKFNTSV9TQUNOVF9ERUZBVUxUIHwgU1NJX1NBQ05UX1JELCBiYXNlICsgU1NJX1NBQ05UKTsKKworCXVkZWxheSgxMDApOworCisJdmFsID0gKHJlYWRsKGJhc2UgKyBTU0lfU0FDREFUKSA+PiA0KSAmIDB4ZmZmZjsKKworCXByX2RlYnVnKCIlczogMHglMDJ4IDB4JTA0eFxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfYWM5N19yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJc3RydWN0IGlteF9zc2kgKmlteF9zc2kgPSBhYzk3X3NzaTsKKworCWlmIChpbXhfc3NpLT5hYzk3X3Jlc2V0KQorCQlpbXhfc3NpLT5hYzk3X3Jlc2V0KGFjOTcpOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJc3RydWN0IGlteF9zc2kgKmlteF9zc2kgPSBhYzk3X3NzaTsKKworCWlmIChpbXhfc3NpLT5hYzk3X3dhcm1fcmVzZXQpCisJCWlteF9zc2ktPmFjOTdfd2FybV9yZXNldChhYzk3KTsKK30KKworc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgc29jX2FjOTdfb3BzID0geworCS5yZWFkCQk9IGlteF9zc2lfYWM5N19yZWFkLAorCS53cml0ZQkJPSBpbXhfc3NpX2FjOTdfd3JpdGUsCisJLnJlc2V0CQk9IGlteF9zc2lfYWM5N19yZXNldCwKKwkud2FybV9yZXNldAk9IGlteF9zc2lfYWM5N193YXJtX3Jlc2V0Cit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVsyXTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlteF9zc2lfcGNtX2RhaSk7CisKK3N0YXRpYyBpbnQgaW14X3NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBpbXhfc3NpICpzc2k7CisJc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm07CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IHZhbDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9ICZpbXhfc3NpX3BjbV9kYWlbcGRldi0+aWRdOworCisJaWYgKGRhaS0+aWQgPj0gQVJSQVlfU0laRShpbXhfc3NpX3BjbV9kYWkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNzaSA9IGt6YWxsb2Moc2l6ZW9mKCpzc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGRhdGEpIHsKKwkJc3NpLT5hYzk3X3Jlc2V0ID0gcGRhdGEtPmFjOTdfcmVzZXQ7CisJCXNzaS0+YWM5N193YXJtX3Jlc2V0ID0gcGRhdGEtPmFjOTdfd2FybV9yZXNldDsKKwkJc3NpLT5mbGFncyA9IHBkYXRhLT5mbGFnczsKKwl9CisKKwlzc2ktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlzc2ktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzc2ktPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihzc2ktPmNsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgdGhlIGNsb2NrOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZmFpbGVkX2NsazsKKwl9CisJY2xrX2VuYWJsZShzc2ktPmNsayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2dldF9yZXNvdXJjZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIERSVl9OQU1FKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9nZXRfcmVzb3VyY2U7CisJfQorCisJc3NpLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghc3NpLT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsZWRfaW9yZW1hcDsKKwl9CisKKwlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpIHsKKwkJaWYgKGFjOTdfc3NpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGZhaWxlZF9hYzk3OworCQl9CisJCWFjOTdfc3NpID0gc3NpOworCQlzZXR1cF9jaGFubmVsX3RvX2FjOTcoc3NpKTsKKwkJbWVtY3B5KGRhaSwgJmlteF9hYzk3X2RhaSwgc2l6ZW9mKGlteF9hYzk3X2RhaSkpOworCX0gZWxzZQorCQltZW1jcHkoZGFpLCAmaW14X3NzaV9kYWksIHNpemVvZihpbXhfc3NpX2RhaSkpOworCisJd3JpdGVsKDB4MCwgc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJc3NpLT5kbWFfcGFyYW1zX3J4LmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFNTSV9TUlgwOworCXNzaS0+ZG1hX3BhcmFtc190eC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTU0lfU1RYMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsICJ0eDAiKTsKKwlpZiAocmVzKQorCQlzc2ktPmRtYV9wYXJhbXNfdHguZG1hID0gcmVzLT5zdGFydDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsICJyeDAiKTsKKwlpZiAocmVzKQorCQlzc2ktPmRtYV9wYXJhbXNfcnguZG1hID0gcmVzLT5zdGFydDsKKworCWRhaS0+aWQgPSBwZGV2LT5pZDsKKwlkYWktPmRldiA9ICZwZGV2LT5kZXY7CisJZGFpLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpbXgtc3NpLiVkIiwgcGRldi0+aWQpOworCWRhaS0+cHJpdmF0ZV9kYXRhID0gc3NpOworCisJaWYgKChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpICYmCisJCQkhKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9BQzk3KSkgeworCQlzc2ktPmZsYWdzIHw9IElNWF9TU0lfRE1BOworCQlwbGF0Zm9ybSA9IGlteF9zc2lfZG1hX214Ml9pbml0KHBkZXYsIHNzaSk7CisJfSBlbHNlCisJCXBsYXRmb3JtID0gaW14X3NzaV9maXFfaW5pdChwZGV2LCBzc2kpOworCisJaW14X3NvY19wbGF0Zm9ybS5wY21fb3BzID0gcGxhdGZvcm0tPnBjbV9vcHM7CisJaW14X3NvY19wbGF0Zm9ybS5wY21fbmV3ID0gcGxhdGZvcm0tPnBjbV9uZXc7CisJaW14X3NvY19wbGF0Zm9ybS5wY21fZnJlZSA9IHBsYXRmb3JtLT5wY21fZnJlZTsKKworCXZhbCA9IFNTSV9TRkNTUl9URldNMChzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplKSB8CisJCVNTSV9TRkNTUl9SRldNMChzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplKTsKKwl3cml0ZWwodmFsLCBzc2ktPmJhc2UgKyBTU0lfU0ZDU1IpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoZGFpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyIERBSSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxlZF9yZWdpc3RlcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzc2kpOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZF9yZWdpc3RlcjoKK2ZhaWxlZF9hYzk3OgorCWlvdW5tYXAoc3NpLT5iYXNlKTsKK2ZhaWxlZF9pb3JlbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbGVkX2dldF9yZXNvdXJjZToKKwljbGtfZGlzYWJsZShzc2ktPmNsayk7CisJY2xrX3B1dChzc2ktPmNsayk7CitmYWlsZWRfY2xrOgorCWtmcmVlKHNzaSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhfc3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSAmaW14X3NzaV9wY21fZGFpW3BkZXYtPmlkXTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoZGFpKTsKKworCWlmIChzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykKKwkJYWM5N19zc2kgPSBOVUxMOworCisJaWYgKCEoc3NpLT5mbGFncyAmIElNWF9TU0lfRE1BKSkKKwkJaW14X3NzaV9maXFfZXhpdChwZGV2LCBzc2kpOworCisJaW91bm1hcChzc2ktPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWNsa19kaXNhYmxlKHNzaS0+Y2xrKTsKKwljbGtfcHV0KHNzaS0+Y2xrKTsKKwlrZnJlZShzc2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9zc2lfZHJpdmVyID0geworCS5wcm9iZSA9IGlteF9zc2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlteF9zc2lfcmVtb3ZlKSwKKworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfc3NpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzb2MgcGxhdGZvcm06ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14X3NzaV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZpbXhfc29jX3BsYXRmb3JtKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteF9zc2lfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXhfc3NpX2RyaXZlcik7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZpbXhfc29jX3BsYXRmb3JtKTsKK30KKworbW9kdWxlX2luaXQoaW14X3NzaV9pbml0KTsKK21vZHVsZV9leGl0KGlteF9zc2lfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWCBJMlMvYWM5NyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMjZlYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9JTVhfU1NJX0gKKyNkZWZpbmUgX0lNWF9TU0lfSAorCisjZGVmaW5lIFNTSV9TVFgwCTB4MDAKKyNkZWZpbmUgU1NJX1NUWDEJMHgwNAorI2RlZmluZSBTU0lfU1JYMAkweDA4CisjZGVmaW5lIFNTSV9TUlgxCTB4MGMKKworI2RlZmluZSBTU0lfU0NSCQkweDEwCisjZGVmaW5lIFNTSV9TQ1JfQ0xLX0lTVAkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NDUl9DTEtfSVNUX1NISUZUCTkKKyNkZWZpbmUgU1NJX1NDUl9UQ0hfRU4JCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TQ1JfU1lTX0NMS19FTgkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX05PUk0JKDAgPDwgNSkKKyNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9NU1RSCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfU0xBVkUJKDIgPDwgNSkKKyNkZWZpbmUgU1NJX0kyU19NT0RFX01BU0sJKDMgPDwgNSkKKyNkZWZpbmUgU1NJX1NDUl9TWU4JCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TQ1JfTkVUCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0NSX1JFCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0NSX1RFCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0NSX1NTSUVOCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TSVNSCTB4MTQKKyNkZWZpbmUgU1NJX1NJU1JfTUFTSwkJKCgxIDw8IDE5KSAtIDEpCisjZGVmaW5lIFNTSV9TSVNSX0NNREFVCQkoMSA8PCAxOCkKKyNkZWZpbmUgU1NJX1NJU1JfQ01ERFUJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU0lTUl9SWFQJCSgxIDw8IDE2KQorI2RlZmluZSBTU0lfU0lTUl9SRFIxCQkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NJU1JfUkRSMAkJKDEgPDwgMTQpCisjZGVmaW5lIFNTSV9TSVNSX1RERTEJCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU0lTUl9UREUwCQkoMSA8PCAxMikKKyNkZWZpbmUgU1NJX1NJU1JfUk9FMQkJKDEgPDwgMTEpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTAJCSgxIDw8IDEwKQorI2RlZmluZSBTU0lfU0lTUl9UVUUxCQkoMSA8PCA5KQorI2RlZmluZSBTU0lfU0lTUl9UVUUwCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU0lTUl9URlMJCSgxIDw8IDcpCisjZGVmaW5lIFNTSV9TSVNSX1JGUwkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NJU1JfVExTCQkoMSA8PCA1KQorI2RlZmluZSBTU0lfU0lTUl9STFMJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TSVNSX1JGRjEJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TSVNSX1JGRjAJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSVNSX1RGRTEJCSgxIDw8IDEpCisjZGVmaW5lIFNTSV9TSVNSX1RGRTAJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NJRVIJMHgxOAorI2RlZmluZSBTU0lfU0lFUl9SRE1BRQkJKDEgPDwgMjIpCisjZGVmaW5lIFNTSV9TSUVSX1JJRQkJKDEgPDwgMjEpCisjZGVmaW5lIFNTSV9TSUVSX1RETUFFCQkoMSA8PCAyMCkKKyNkZWZpbmUgU1NJX1NJRVJfVElFCQkoMSA8PCAxOSkKKyNkZWZpbmUgU1NJX1NJRVJfQ01EQVVfRU4JKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TSUVSX0NNRERVX0VOCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU0lFUl9SWFRfRU4JCSgxIDw8IDE2KQorI2RlZmluZSBTU0lfU0lFUl9SRFIxX0VOCSgxIDw8IDE1KQorI2RlZmluZSBTU0lfU0lFUl9SRFIwX0VOCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU0lFUl9UREUxX0VOCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU0lFUl9UREUwX0VOCSgxIDw8IDEyKQorI2RlZmluZSBTU0lfU0lFUl9ST0UxX0VOCSgxIDw8IDExKQorI2RlZmluZSBTU0lfU0lFUl9ST0UwX0VOCSgxIDw8IDEwKQorI2RlZmluZSBTU0lfU0lFUl9UVUUxX0VOCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TSUVSX1RVRTBfRU4JKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NJRVJfVEZTX0VOCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0lFUl9SRlNfRU4JCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TSUVSX1RMU19FTgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NJRVJfUkxTX0VOCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0lFUl9SRkYxX0VOCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TSUVSX1JGRjBfRU4JKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMV9FTgkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0lFUl9URkUwX0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NUQ1IJMHgxYworI2RlZmluZSBTU0lfU1RDUl9UWEJJVDAJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TVENSX1RGRU4xCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU1RDUl9URkVOMAkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX0ZJRk9fRU5BQkxFXzBfU0hJRlQgNworI2RlZmluZSBTU0lfU1RDUl9URkRJUgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NUQ1JfVFhESVIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TVENSX1RTSEZECQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU1RDUl9UU0NLUAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NUQ1JfVEZTSQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NUQ1JfVEZTTAkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NUQ1JfVEVGUwkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU1JDUgkweDIwCisjZGVmaW5lIFNTSV9TUkNSX1JYQklUMAkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NSQ1JfUkZFTjEJCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNSX1JGRU4wCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfRklGT19FTkFCTEVfMF9TSElGVCA3CisjZGVmaW5lIFNTSV9TUkNSX1JGRElSCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU1JDUl9SWERJUgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NSQ1JfUlNIRkQJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TUkNSX1JTQ0tQCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU1JDUl9SRlNJCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU1JDUl9SRlNMCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU1JDUl9SRUZTCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TUkNDUgkJMHgyOAorI2RlZmluZSBTU0lfU1JDQ1JfRElWMgkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TUkNDUl9QU1IJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU1JDQ1JfV0woeCkJCSgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQorI2RlZmluZSBTU0lfU1JDQ1JfREMoeCkJCSgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgU1NJX1NSQ0NSX1BNKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIFNTSV9TUkNDUl9XTF9NQVNLCSgweGYgPDwgMTMpCisjZGVmaW5lIFNTSV9TUkNDUl9EQ19NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTV9NQVNLCSgweGZmIDw8IDApCisKKyNkZWZpbmUgU1NJX1NUQ0NSCQkweDI0CisjZGVmaW5lIFNTSV9TVENDUl9ESVYyCQkoMSA8PCAxOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BTUgkJKDEgPDwgMTcpCisjZGVmaW5lIFNTSV9TVENDUl9XTCh4KQkJKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCisjZGVmaW5lIFNTSV9TVENDUl9EQyh4KQkJKCgoeCkgJiAweDFmKSA8PCA4KQorI2RlZmluZSBTU0lfU1RDQ1JfUE0oeCkJCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1dMX01BU0sJKDB4ZiA8PCAxMykKKyNkZWZpbmUgU1NJX1NUQ0NSX0RDX01BU0sJKDB4MWYgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNX01BU0sJKDB4ZmYgPDwgMCkKKworI2RlZmluZSBTU0lfU0ZDU1IJMHgyYworI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQxKHgpCSgoKHgpICYgMHhmKSA8PCAyOCkKKyNkZWZpbmUgU1NJX1JYX0ZJRk9fMV9DT1VOVF9TSElGVCAyOAorI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQxKHgpCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgU1NJX1RYX0ZJRk9fMV9DT1VOVF9TSElGVCAyNAorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTEoeCkJKCgoeCkgJiAweGYpIDw8IDIwKQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTEoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQwKHgpCSgoKHgpICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgU1NJX1JYX0ZJRk9fMF9DT1VOVF9TSElGVCAxMgorI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQwKHgpCSgoKHgpICYgMHhmKSA8PCAgOCkKKyNkZWZpbmUgU1NJX1RYX0ZJRk9fMF9DT1VOVF9TSElGVCA4CisjZGVmaW5lIFNTSV9TRkNTUl9SRldNMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDQpCisjZGVmaW5lIFNTSV9TRkNTUl9URldNMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDApCisjZGVmaW5lIFNTSV9TRkNTUl9SRldNMF9NQVNLCSgweGYgPDwgIDQpCisjZGVmaW5lIFNTSV9TRkNTUl9URldNMF9NQVNLCSgweGYgPDwgIDApCisKKyNkZWZpbmUgU1NJX1NUUgkJMHgzMAorI2RlZmluZSBTU0lfU1RSX1RFU1QJCSgxIDw8IDE1KQorI2RlZmluZSBTU0lfU1RSX1JDSzJUQ0sJCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU1RSX1JGUzJURlMJCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU1RSX1JYU1RBVEUoeCkJKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIFNTSV9TVFJfVFhEMlJYRAkJKDEgPDwgIDcpCisjZGVmaW5lIFNTSV9TVFJfVENLMlJDSwkJKDEgPDwgIDYpCisjZGVmaW5lIFNTSV9TVFJfVEZTMlJGUwkJKDEgPDwgIDUpCisjZGVmaW5lIFNTSV9TVFJfVFhTVEFURSh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKworI2RlZmluZSBTU0lfU09SCQkweDM0CisjZGVmaW5lIFNTSV9TT1JfQ0xLT0ZGCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU09SX1JYX0NMUgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NPUl9UWF9DTFIJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TT1JfSU5JVAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NPUl9XQUlUKHgpCQkoKCh4KSAmIDB4MykgPDwgMSkKKyNkZWZpbmUgU1NJX1NPUl9XQUlUX01BU0sJKDB4MyA8PCAxKQorI2RlZmluZSBTU0lfU09SX1NZTlJTVAkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0FDTlQJMHgzOAorI2RlZmluZSBTU0lfU0FDTlRfRlJESVYoeCkJKCgoeCkgJiAweDNmKSA8PCA1KQorI2RlZmluZSBTU0lfU0FDTlRfV1IJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TQUNOVF9SRAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NBQ05UX1RJRgkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NBQ05UX0ZWCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NBQ0FERAkweDNjCisjZGVmaW5lIFNTSV9TQUNEQVQJMHg0MAorI2RlZmluZSBTU0lfU0FUQUcJMHg0NAorI2RlZmluZSBTU0lfU1RNU0sJMHg0OAorI2RlZmluZSBTU0lfU1JNU0sJMHg0YworI2RlZmluZSBTU0lfU0FDQ1NUCTB4NTAKKyNkZWZpbmUgU1NJX1NBQ0NFTgkweDU0CisjZGVmaW5lIFNTSV9TQUNDRElTCTB4NTgKKworLyogU1NJIGNsb2NrIHNvdXJjZXMgKi8KKyNkZWZpbmUgSU1YX1NTUF9TWVNfQ0xLCQkwCisKKy8qIFNTSSBhdWRpbyBkaXZpZGVycyAqLworI2RlZmluZSBJTVhfU1NJX1RYX0RJVl8yCTAKKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUFNSCTEKKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUE0JMgorI2RlZmluZSBJTVhfU1NJX1JYX0RJVl8yCTMKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUFNSCTQKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUE0JNQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVsyXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtOworCisjZGVmaW5lIERSVl9OQU1FICJpbXgtc3NpIgorCitzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zIHsKKwlpbnQgZG1hOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisJaW50IGJ1cnN0c2l6ZTsKK307CisKK3N0cnVjdCBpbXhfc3NpIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphYzk3X2RldjsKKworCXN0cnVjdCBzbmRfc29jX2RldmljZSBpbXhfYWM5NzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisJaW50IGZpcV9lbmFibGU7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXZvaWQgKCphYzk3X3Jlc2V0KSAoc3RydWN0IHNuZF9hYzk3ICphYzk3KTsKKwl2b2lkICgqYWM5N193YXJtX3Jlc2V0KShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOworCisJc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcwlkbWFfcGFyYW1zX3J4OworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc190eDsKKworCWludCBlbmFibGVkOworfTsKKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZmlxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSk7Cit2b2lkIGlteF9zc2lfZmlxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGlteF9zc2kgKnNzaSk7CitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9kbWFfbXgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSk7CisKK2ludCBzbmRfaW14X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgaW14X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKTsKK3ZvaWQgaW14X3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pOworCisvKgorICogRG8gbm90IGNoYW5nZSB0aGlzIGFzIHRoZSBGSVEgaGFuZGxlciBkZXBlbmRzIG9uIHRoaXMgc2l6ZQorICovCisjZGVmaW5lIElNWF9TU0lfRE1BQlVGX1NJWkUJKDY0ICogMTAyNCkKKworI2RlZmluZSBETUFfUlhGSUZPX0JVUlNUICAgICAgMHg0CisjZGVmaW5lIERNQV9UWEZJRk9fQlVSU1QgICAgICAweDYKKworI2VuZGlmIC8qIF9JTVhfU1NJX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uYyBiL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmZmZjZDUuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg4ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5jIC0tIEFMU0EgU29DIGludGVyZmFjZSBmb3IgRnJlZXNjYWxlIGkuTVgxeCwgaS5NWDJ4IENQVXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogQmFzZWQgb24gbXhjLXBjbS5jIGJ5IExpYW0gR2lyZHdvb2QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KLQotI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIG14MV9teDJfcGNtX2hhcmR3YXJlID0gewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDMyICogMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gOCAqIDEwMjQsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgewotCWludCBkbWFfY2g7Ci0JaW50IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgcGVyaW9kOwotCXVuc2lnbmVkIGludCBwZXJpb2RzOwotCWludCB0eF9zcGluOwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7Ci0Jc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXM7Ci19OwotCi0KLS8qKgotICAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIGN1cnJlbnQgZG1hIHRyYW5zZmVyIGZvciBwbGF5YmFjawotICAqIGFuZCBjbGVhcnMgdGhlIGRtYSBwb2ludGVycy4KLSAgKgotICAqIEBwYXJhbQlzdWJzdHJlYW0JcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KLSAgKgotICAqLwotc3RhdGljIGludCBhdWRpb19zdG9wX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCXBydGQtPmFjdGl2ZSA9IDA7Ci0JcHJ0ZC0+cGVyaW9kID0gMDsKLQlwcnRkLT5wZXJpb2RzID0gMDsKLQotCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCi0KLQlpbXhfZG1hX2Rpc2FibGUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgYXVkaW8gYmxvY2sgbmVlZHMgdG8gYmUKLSAgKiB0cmFuc2ZlcnJlZCB0byB0aGUgY29kZWMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgYWRkcmVzcyBhbmQgdGhlIHNpemUKLSAgKiBvZiB0aGUgbmV3IGJsb2NrIGFuZCBzdGFydCBhIG5ldyBETUEgdHJhbnNmZXIuCi0gICoKLSAgKiBAcGFyYW0Jc3Vic3RyZWFtCXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyBpbnQgZG1hX25ld19wZXJpb2Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9ICBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQgPSAwOwotCWRtYV9hZGRyX3QgbWVtX2FkZHI7Ci0JdW5zaWduZWQgaW50IGRldl9hZGRyOwotCi0JaWYgKHBydGQtPmFjdGl2ZSkgewotCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCW9mZnNldCA9IGRtYV9zaXplICogcHJ0ZC0+cGVyaW9kOwotCi0JCXByX2RlYnVnKCIlczogcGVyaW9kICglZCkgb3V0IG9mICglZClcbiIsIF9fZnVuY19fLAotCQkJcHJ0ZC0+cGVyaW9kLAotCQkJcnVudGltZS0+cGVyaW9kcyk7Ci0JCXByX2RlYnVnKCJwZXJpb2Rfc2l6ZSAlZCBmcmFtZXNcbiBvZmZzZXQgJWQgYnl0ZXNcbiIsCi0JCQkodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAotCQkJb2Zmc2V0KTsKLQkJcHJfZGVidWcoImRtYV9zaXplICVkIGJ5dGVzXG4iLCBkbWFfc2l6ZSk7Ci0KLQkJc25kX0JVR19PTihkbWFfc2l6ZSA+IG14MV9teDJfcGNtX2hhcmR3YXJlLnBlcmlvZF9ieXRlc19tYXgpOwotCi0JCW1lbV9hZGRyID0gKGRtYV9hZGRyX3QpKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KTsKLQkJZGV2X2FkZHIgPSBwcnRkLT5kbWFfcGFyYW1zLT5wZXJfYWRkcmVzczsKLQkJcHJfZGVidWcoIiVzOiBtZW1fYWRkciBpcyAleFxuIGRldl9hZGRyIGlzICV4XG4iLAotCQkJCSBfX2Z1bmNfXywgbWVtX2FkZHIsIGRldl9hZGRyKTsKLQotCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NpbmdsZShwcnRkLT5kbWFfY2gsIG1lbV9hZGRyLAotCQkJCQlkbWFfc2l6ZSwgZGV2X2FkZHIsCi0JCQkJCXBydGQtPmRtYV9wYXJhbXMtPnRyYW5zZmVyX3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBjb25maWd1cmluZyBETUFcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlteF9kbWFfZW5hYmxlKHBydGQtPmRtYV9jaCk7Ci0KLQkJcHJfZGVidWcoIiVzOiB0cmFuc2ZlciBlbmFibGVkXG5tZW1fYWRkciA9ICV4XG4iLAotCQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpIG1lbV9hZGRyKTsKLQkJcHJfZGVidWcoImRldl9hZGRyID0gJXhcbmRtYV9zaXplID0gJWRcbiIsCi0JCQkodW5zaWduZWQgaW50KSBkZXZfYWRkciwgZG1hX3NpemUpOwotCi0JCXBydGQtPnR4X3NwaW4gPSAxOyAvKiBGR0EgbGl0dGxlIHRyaWNrIHRvIHJldHJpZXZlIERNQSBwb3MgKi8KLQkJcHJ0ZC0+cGVyaW9kKys7Ci0JCXBydGQtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOwotICAgIH0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICAqIFRoaXMgaXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZAotICAqIHdoZW4gYSBUWCB0cmFuc2ZlciBmaW5pc2hlcy4gVGhlIGNhbGwgb2NjdXJzCi0gICogaW4gaW50ZXJydXB0IGNvbnRleHQuCi0gICoKLSAgKiBAcGFyYW0JZGF0CXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9pcnEoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQ7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBwcmV2aW91c19wZXJpb2Q7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXN1YnN0cmVhbSA9IGRhdGE7Ci0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXByZXZpb3VzX3BlcmlvZCAgPSBwcnRkLT5wZXJpb2RzOwotCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHByZXZpb3VzX3BlcmlvZDsKLQotCXBydGQtPnR4X3NwaW4gPSAwOwotCXBydGQtPnBlcmlvZHMrKzsKLQlwcnRkLT5wZXJpb2RzICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0KLQlwcl9kZWJ1ZygiJXM6IGlycSBwZXIgJWQgb2Zmc2V0ICV4XG4iLCBfX2Z1bmNfXywgcHJ0ZC0+cGVyaW9kcywgb2Zmc2V0KTsKLQotCS8qCi0JICAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KLQkgICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKLQkgICovCi0JaWYgKHBydGQtPmFjdGl2ZSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwotCi0JLyoKLQkgICogVHJpZyBuZXh0IERNQSB0cmFuc2ZlcgotCSAgKi8KLQlkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotfQotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIHRvIGFsbG93IGF1ZGlvCi0gICogcGxheWJhY2sgb3BlcmF0aW9ucy4gSXQgaXMgY2FsbGVkIGJ5IEFMU0EgZnJhbWV3b3JrLgotICAqCi0gICogQHBhcmFtCXN1YnN0cmVhbQlwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLgotICAqCi0gICogQHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCi0gICovCi1zdGF0aWMgaW50Ci1zbmRfbXgxX214Ml9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSAgc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCXBydGQtPnBlcmlvZCA9IDA7Ci0JcHJ0ZC0+cGVyaW9kcyA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKLQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBmYWlsZWQgdG8gbWFsbG9jIHBjbSBwYWdlcyBcbiIsCi0JCV9fZnVuY19fLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXByX2RlYnVnKCIlczogc25kX2lteDFfbXgyX2F1ZGlvX2h3X3BhcmFtcyBydW50aW1lLT5kbWFfYWRkciAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9hZGRyKTsKLQlwcl9kZWJ1ZygiJXM6IHNuZF9pbXgxX214Ml9hdWRpb19od19wYXJhbXMgcnVudGltZS0+ZG1hX2FyZWEgMHgoJXgpXG4iLAotCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClydW50aW1lLT5kbWFfYXJlYSk7Ci0JcHJfZGVidWcoIiVzOiBzbmRfaW14MV9teDJfYXVkaW9faHdfcGFyYW1zIHJ1bnRpbWUtPmRtYV9ieXRlcyAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9ieXRlcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlpbXhfZG1hX2ZyZWUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCXBydGQtPnR4X3NwaW4gPSAwOwotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KLQkJcHJ0ZC0+YWN0aXZlID0gMTsKLQkJcHJfZGVidWcoIiVzOiBzdGFydGluZyBkbWFfbmV3X3BlcmlvZFxuIiwgX19mdW5jX18pOwotCQlyZXQgPSBkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KLQkJcHJfZGVidWcoIiVzOiBzdG9wcGluZyBkbWEgdHJhbnNmZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gYXVkaW9fc3RvcF9kbWEoc3Vic3RyZWFtKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1teDFfbXgyX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCi0JLyogdHhfc3BpbiB2YWx1ZSBpcyB1c2VkIGhlcmUgdG8gY2hlY2sgaWYgYSB0cmFuc2ZlciBpcyBhY3RpdmUgKi8KLQlpZiAocHJ0ZC0+dHhfc3BpbikgewotCQlvZmZzZXQgPSAocnVudGltZS0+cGVyaW9kX3NpemUgKiAocHJ0ZC0+cGVyaW9kcykpICsKLQkJCQkJCShydW50aW1lLT5wZXJpb2Rfc2l6ZSA+PiAxKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplID4+IDE7Ci0JfSBlbHNlIHsKLQkJb2Zmc2V0ID0gKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogKHBydGQtPnBlcmlvZHMpKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IDA7Ci0JfQotCXByX2RlYnVnKCIlczogcG9pbnRlciBvZmZzZXQgJXhcbiIsIF9fZnVuY19fLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7Ci0JaW50IHJldDsKLQotCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmbXgxX214Ml9wY21faGFyZHdhcmUpOwotCi0JcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKLQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChwcnRkID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKLQotCWlmICghZG1hX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcHJ0ZC0+ZG1hX3BhcmFtcyA9IGRtYV9kYXRhOwotCi0JcHJfZGVidWcoIiVzOiBSZXF1ZXN0aW5nIGRtYSBjaGFubmVsICglcylcbiIsIF9fZnVuY19fLAotCQkJCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSk7Ci0JcmV0ID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8ocHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSwgRE1BX1BSSU9fSElHSCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCByZXF1ZXN0aW5nIGRtYSBjaGFubmVsXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlwcnRkLT5kbWFfY2ggPSByZXQ7Ci0JaW14X2RtYV9jb25maWdfYnVyc3RsZW4ocHJ0ZC0+ZG1hX2NoLAotCQkJCXBydGQtPmRtYV9wYXJhbXMtPndhdGVybWFya19sZXZlbCk7Ci0KLQlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKHBydGQtPmRtYV9jaCwKLQkJCXBydGQtPmRtYV9wYXJhbXMtPnBlcl9jb25maWcsCi0JCQlwcnRkLT5kbWFfcGFyYW1zLT5tZW1fY29uZmlnLAotCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+ZXZlbnRfaWQsIDApOwotCi0JaWYgKHJldCkgewotCQlwcl9kZWJ1ZyhLRVJOX0VSUiAiRXJyb3IgJWQgY29uZmlndXJpbmcgZG1hIGNoYW5uZWwgJWRcbiIsCi0JCQlyZXQsIHBydGQtPmRtYV9jaCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBTZXR0aW5nIHR4IGRtYSBjYWxsYmFjayBmdW5jdGlvblxuIiwgX19mdW5jX18pOwotCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMocHJ0ZC0+ZG1hX2NoLAotCQkJCWF1ZGlvX2RtYV9pcnEsIE5VTEwsCi0JCQkJKHZvaWQgKilzdWJzdHJlYW0pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgc2V0dGluZyBkbWEgY2FsbGJhY2sgZnVuY3Rpb25cbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlrZnJlZShwcnRkKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKLQkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkJCSAgICAgcnVudGltZS0+ZG1hX2FkZHIsCi0JCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG14MV9teDJfcGNtX29wcyA9IHsKLQkub3BlbgkJPSBteDFfbXgyX3BjbV9vcGVuLAotCS5jbG9zZQkJPSBteDFfbXgyX3BjbV9jbG9zZSwKLQkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwk9IG14MV9teDJfcGNtX2h3X3BhcmFtcywKLQkuaHdfZnJlZQk9IG14MV9teDJfcGNtX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBzbmRfbXgxX214Ml9wcmVwYXJlLAotCS50cmlnZ2VyCT0gbXgxX214Ml9wY21fdHJpZ2dlciwKLQkucG9pbnRlcgk9IG14MV9teDJfcGNtX3BvaW50ZXIsCi0JLm1tYXAJCT0gbXgxX214Ml9wY21fbW1hcCwKLX07Ci0KLXN0YXRpYyB1NjQgbXgxX214Ml9wY21fZG1hbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKLQlzaXplX3Qgc2l6ZSA9IG14MV9teDJfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7Ci0JYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKLQlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKLQlidWYtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLQkvKiBSZXNlcnZlIHVuY2FjaGVkLWJ1ZmZlcmVkIG1lbW9yeSBhcmVhIGZvciBETUEgKi8KLQlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAotCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKLQotCXByX2RlYnVnKCIlczogcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcjogYXJlYT0lcCwgYWRkcj0lcCwgc2l6ZT0lZFxuIiwKLQkJX19mdW5jX18sICh2b2lkICopIGJ1Zi0+YXJlYSwgKHZvaWQgKikgYnVmLT5hZGRyLCBzaXplKTsKLQotCWlmICghYnVmLT5hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJ1Zi0+Ynl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7Ci0JaW50IHN0cmVhbTsKLQotCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKLQkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCQlpZiAoIXN1YnN0cmVhbSkKLQkJCWNvbnRpbnVlOwotCi0JCWJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7Ci0JCWlmICghYnVmLT5hcmVhKQotCQkJY29udGludWU7Ci0KLQkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAotCQkJCSAgICAgIGJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKLQkJYnVmLT5hcmVhID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCi0Jc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZteDFfbXgyX3BjbV9kbWFtYXNrOwotCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLQlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKLQkJcmV0ID0gbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCi0JCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBwbGF5YmFjayBidWZmZXJcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7Ci0JCXJldCA9IG14MV9teDJfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAotCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBjYXB0dXJlIGJ1ZmZlclxuIiwgX19mdW5jX18pOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotIG91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBteDFfbXgyX3NvY19wbGF0Zm9ybSA9IHsKLQkubmFtZQkJPSAibXgxX214Mi1hdWRpbyIsCi0JLnBjbV9vcHMgCT0gJm14MV9teDJfcGNtX29wcywKLQkucGNtX25ldwk9IG14MV9teDJfcGNtX25ldywKLQkucGNtX2ZyZWUJPSBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKG14MV9teDJfc29jX3BsYXRmb3JtKTsKLQotc3RhdGljIGludCBfX2luaXQgbXgxX214Ml9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQotewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZteDFfbXgyX3NvY19wbGF0Zm9ybSk7Ci19Ci1tb2R1bGVfaW5pdChteDFfbXgyX3NvY19wbGF0Zm9ybV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJm14MV9teDJfc29jX3BsYXRmb3JtKTsKLX0KLW1vZHVsZV9leGl0KG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBpLk1YMngsIGkuTVgxeCBQQ00gRE1BIG1vZHVsZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oIGIvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTUyODEwLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5oIDotIEFTb0MgcGxhdGZvcm0gaGVhZGVyIGZvciBGcmVlc2NhbGUgaS5NWDF4LCBpLk1YMngKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX01YMV9NWDJfUENNX0gKLSNkZWZpbmUgX01YMV9NWDJfUENNX0gKLQotLyogRE1BIGluZm9ybWF0aW9uIGZvciBteDFfbXgyIHBsYXRmb3JtcyAqLwotc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KLQl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfdHlwZTsJLyogUkVBRCBvciBXUklURSBETUEgdHJhbnNmZXIgKi8KLQlkbWFfYWRkcl90IHBlcl9hZGRyZXNzOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBTU0kgZmlmbyAqLwotCWludCBldmVudF9pZDsJCQkvKiBmaXhlZCBETUEgbnVtYmVyIGZvciBTU0kgZmlmbyAqLwotCWludCB3YXRlcm1hcmtfbGV2ZWw7CQkvKiBTU0kgZmlmbyB3YXRlcm1hcmsgbGV2ZWwgKi8KLQlpbnQgcGVyX2NvbmZpZzsJCQkvKiBETUEgQ29uZmlnIGZsYWdzIGZvciBwZXJpcGhlcmFsICovCi0JaW50IG1lbV9jb25maWc7CQkJLyogRE1BIENvbmZpZyBmbGFncyBmb3IgUkFNICovCi0gfTsKLQotLyogcGxhdGZvcm0gZGF0YSAqLwotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIG14MV9teDJfc29jX3BsYXRmb3JtOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkMmEyNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLyoKLSAqIG14Mjd2aXNfd204OTc0LmMgIC0tICBTb0MgYXVkaW8gZm9yIG14Mjd2aXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgotCi0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTc0LmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotCi0jZGVmaW5lIElHTk9SRURfQVJHIDAKLQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzOwotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbm5lY3RzIFNTSTEgKEhQQ1IxKSBhcyBzbGF2ZSB0bwotICAqIFNTSTEgZXh0ZXJuYWwgc2lnbmFscyAoUFBDUjEpCi0gICogQXMgc2xhdmUsIEhQQ1IxIG11c3Qgc2V0IFRGU0RJUiBhbmQgVENMS0RJUiBhcyBpbnB1dHMgZnJvbQotICAqIHBvcnQgNAotICAqLwotdm9pZCBhdWRtdXhfY29ubmVjdF8xXzQodm9pZCkKLXsKLQlwcl9kZWJ1ZygiQVVETVVYOiBub3JtYWwgb3BlcmF0aW9uIG1vZGVcbiIpOwotCS8qIFJlc2V0IEhQQ1IxIGFuZCBQUENSMSAqLwotCi0JREFNX0hQQ1IxID0gMHgwMDAwMDAwMDsKLQlEQU1fUFBDUjEgPSAweDAwMDAwMDAwOwotCi0JLyogc2V0IHRvIHN5bmNocm9ub3VzICovCi0JREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1NZTjsKLQlEQU1fUFBDUjEgfD0gQVVETVVYX1BQQ1JfU1lOOwotCi0KLQkvKiBzZXQgUnggc291cmNlcyAxIDwtLT4gNCAqLwotCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9SWERTRUwoMyk7IC8qIHBvcnQgNCAqLwotCURBTV9QUENSMSB8PSBBVURNVVhfUFBDUl9SWERTRUwoMCk7IC8qIHBvcnQgMSAqLwotCi0JLyogc2V0IFR4IGZyYW1lIGFuZCBDbG9jayBkaXJlY3Rpb24gYW5kIHNvdXJjZSAgNCAtLT4gMSBvdXRwdXQgKi8KLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZTRElSIHwgQVVETVVYX0hQQ1JfVENMS0RJUjsKLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZDU0VMKDMpOyAvKiBUeERTIGFuZCBUeENjbGsgZnJvbSBwb3J0IDQgKi8KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX2hpZmlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdW5zaWduZWQgaW50IHBsbF9vdXQgPSAwLCBiY2xrID0gMCwgZm10ID0gMCwgbWNsayA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKgotCSAqIFRoZSBXTTg5NzQgaXMgYmV0dGVyIGF0IGdlbmVyYXRpbmcgYWNjdXJhdGUgYXVkaW8gY2xvY2tzIHRoYW4gdGhlCi0JICogTVgyNyBTU0kgY29udHJvbGxlciwgc28gd2Ugd2lsbCB1c2UgaXQgYXMgbWFzdGVyIHdoZW4gd2UgY2FuLgotCSAqLwotCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJbWNsayA9IFdNODk3NF9NQ0xLRElWXzEyOwotCQlwbGxfb3V0ID0gMjQ1NzYwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzQ7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzI7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzE2OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjIwNTA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl84OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgNDQxMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl80OwotCQltY2xrID0gV004OTc0X01DTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQljYXNlIDg4MjAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBjb2RlY19kYWktPm9wcy0+c2V0X2ZtdChjb2RlY19kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX0lGIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfZm10KGNwdV9kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNwdSBEQUkgY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUHV0IERDIGZpZWxkIG9mIFNUQ0NSIHRvIDEgKG5vdCB6ZXJvKSAqLwotCXJldCA9IGNwdV9kYWktPm9wcy0+c2V0X3RkbV9zbG90KGNwdV9kYWksIDAsIDIpOwotCi0JLyogc2V0IHRoZSBTU0kgc3lzdGVtIGNsb2NrIGFzIGlucHV0ICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfc3lzY2xrKGNwdV9kYWksIElNWF9TU1BfU1lTX0NMSywgMCwKLQkJU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgc3lzdGVtIFNTSSBjbGtcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHNldCBjb2RlYyBCQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X0JDTEtESVYsIGJjbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIEJDTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JLyogY29kZWMgUExMIGlucHV0IGlzIDI1IE1IeiAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIElHTk9SRURfQVJHLAotCQkJCQkyNTAwMDAwMCwgcGxsX291dCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgUExMIGlucHV0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKnNldCBjb2RlYyBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X01DTEtESVYsIG1jbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIE1DTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Mjd2aXNfaGlmaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KLQlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCi0JCQkJICAgICAgIDAsIDApOwotfQotCi0vKgotICogbXgyN3ZpcyBXTTg5NzQgSGlGaSBEQUkgb3BzZXJhdGlvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbXgyN3Zpc19oaWZpX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gbXgyN3Zpc19oaWZpX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IG14Mjd2aXNfaGlmaV9od19mcmVlLAotfTsKLQotCi1zdGF0aWMgaW50IG14Mjd2aXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgPSBnZXRfc3NpX2NsaygwLCAmcGRldi0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbnQgZ2V0IHNzaSBjbG9ja1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlwdXRfc3NpX2NsaygwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG14Mjd2aXNfZGFpW10gPSB7Ci17IC8qIEhpZmkgUGxheWJhY2sqLwotCS5uYW1lID0gIldNODk3NCIsCi0JLnN0cmVhbV9uYW1lID0gIldNODk3NCBIaUZpIiwKLQkuY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTg5NzRfZGFpLAotCS5vcHMgPSAmbXgyN3Zpc19oaWZpX29wcywKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzID0gewotCS5uYW1lID0gIm14Mjd2aXMiLAotCS5wbGF0Zm9ybSA9ICZteDFfbXgyX3NvY19wbGF0Zm9ybSwKLQkucHJvYmUgPSBteDI3dmlzX3Byb2JlLAotCS5yZW1vdmUgPSBteDI3dmlzX3JlbW92ZSwKLQkuc3VzcGVuZF9wcmUgPSBteDI3dmlzX3N1c3BlbmQsCi0JLnJlc3VtZV9wb3N0ID0gbXgyN3Zpc19yZXN1bWUsCi0JLmRhaV9saW5rID0gbXgyN3Zpc19kYWksCi0JLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobXgyN3Zpc19kYWkpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBteDI3dmlzX3NuZF9kZXZkYXRhID0gewotCS5jYXJkID0gJm14Mjd2aXMsCi0JLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODk3NCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpteDI3dmlzX3NuZF9kZXZpY2U7Ci0KLS8qIFRlbXBvcmFsIGRlZmluaXRpb24gb2YgYm9hcmQgc3BlY2lmaWMgYmVoYXZpb3VyICovCi12b2lkIGdwaW9fc3NpX2FjdGl2ZShpbnQgc3NpX251bSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXVuc2lnbmVkIGludCBzc2kxX3BpbnNbXSA9IHsKLQkJUEMyMF9QRl9TU0kxX0ZTLAotCQlQQzIxX1BGX1NTSTFfUlhELAotCQlQQzIyX1BGX1NTSTFfVFhELAotCQlQQzIzX1BGX1NTSTFfQ0xLLAotCX07Ci0JdW5zaWduZWQgaW50IHNzaTJfcGluc1tdID0gewotCQlQQzI0X1BGX1NTSTJfRlMsCi0JCVBDMjVfUEZfU1NJMl9SWEQsCi0JCVBDMjZfUEZfU1NJMl9UWEQsCi0JCVBDMjdfUEZfU1NJMl9DTEssCi0JfTsKLQlpZiAoc3NpX251bSA9PSAwKQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTFfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTFfcGlucyksICJVU0IgT1RHIik7Ci0JZWxzZQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTJfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTJfcGlucyksICJVU0IgT1RHIik7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZXF1ZXN0aW5nIHNzaSAleCBwaW5zXG4iLCBzc2lfbnVtKTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBteDI3dmlzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JbXgyN3Zpc19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFteDI3dmlzX3NuZF9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEobXgyN3Zpc19zbmRfZGV2aWNlLCAmbXgyN3Zpc19zbmRfZGV2ZGF0YSk7Ci0JbXgyN3Zpc19zbmRfZGV2ZGF0YS5kZXYgPSAmbXgyN3Zpc19zbmRfZGV2aWNlLT5kZXY7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChteDI3dmlzX3NuZF9kZXZpY2UpOwotCi0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobXgyN3Zpc19zbmRfZGV2aWNlKTsKLQl9Ci0KLQkvKiBXTTg5NzQgdXNlcyBTU0kxIChIUENSMSkgdmlhIEFVRE1VWCBwb3J0IDQgZm9yIGF1ZGlvIChQUENSMSkgKi8KLQlncGlvX3NzaV9hY3RpdmUoMCk7Ci0JYXVkbXV4X2Nvbm5lY3RfMV80KCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXgyN3Zpc19leGl0KHZvaWQpCi17Ci0JLyogV2Ugc2hvdWxkIGNhbGwgc29tZSAic3NpX2dwaW9faW5hY3RpdmUoKSIgcHJvcGVybHkgKi8KLX0KLQotbW9kdWxlX2luaXQobXgyN3Zpc19pbml0KTsKLW1vZHVsZV9leGl0KG14Mjd2aXNfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiSmF2aWVyIE1hcnRpbiwgamF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTg5NzQgbXgyN3ZpcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkZWZlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKgotICogbXhjLXNzaS5jICAtLSAgU1NJIGRyaXZlciBmb3IgRnJlZXNjYWxlIElNWAotICoKLSAqIENvcHlyaWdodCAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQmFzZWQgb24gbXhjLWFsc2EtbWMxMzc4MyAoQykgMjAwNiBGcmVlc2NhbGUuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVE9ETzoKLSAqICAgTmVlZCB0byByZXdvcmsgU1NJIHJlZ2lzdGVyIGRlZnMgd2hlbiBuZXcgZGVmcyBnbyBpbnRvIG1haW5saW5lLgotICogICBBZGQgc3VwcG9ydCBmb3IgVERNIGFuZCBGSUZPIDEuCi0gKiAgIEFkZCBzdXBwb3J0IGZvciBpLm14M3ggRE1BIGludGVyZmFjZS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLQotI2RlZmluZSBTU0kxX1BPUlQJMAotI2RlZmluZSBTU0kyX1BPUlQJMQotCi1zdGF0aWMgaW50IHNzaV9hY3RpdmVbMl0gPSB7MCwgMH07Ci0KLS8qIERNQSBpbmZvcm1hdGlvbiBmb3IgbXgxX214MiBwbGF0Zm9ybXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX291dDAgPSB7Ci0JLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gb3V0IDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTVFgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9UWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQxID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIG91dCAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1RYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfVFgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9faW4wID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIGluIDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKLQkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNSWDAsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1JYMCwKLQkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX2luMSA9IHsKLQkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBpbiAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTUlgxLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9SWDEsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQwID0gewotCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIG91dCAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1RYMCwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfVFgwLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MSA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBvdXQgMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKLQkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNUWDEsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1RYMSwKLQkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX2luMCA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBpbiAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTUlgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9SWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19pbjEgPSB7Ci0JLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gaW4gMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1JYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfUlgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnNzaV9jbGswLCAqc3NpX2NsazE7Ci0KLWludCBnZXRfc3NpX2NsayhpbnQgc3NpLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3dpdGNoIChzc2kpIHsKLQljYXNlIDA6Ci0JCXNzaV9jbGswID0gY2xrX2dldChkZXYsICJzc2kxIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazApKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazApOwotCQlyZXR1cm4gMDsKLQljYXNlIDE6Ci0JCXNzaV9jbGsxID0gY2xrX2dldChkZXYsICJzc2kyIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazEpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazEpOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9zc2lfY2xrKTsKLQotdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKQotewotCXN3aXRjaCAoc3NpKSB7Ci0JY2FzZSAwOgotCQljbGtfcHV0KHNzaV9jbGswKTsKLQkJc3NpX2NsazAgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWNsa19wdXQoc3NpX2NsazEpOwotCQlzc2lfY2xrMSA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wocHV0X3NzaV9jbGspOwotCi0vKgotICogU1NJIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICovCi1zdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQotewotCXUzMiBzY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzY3IgPSBTU0kxX1NDUjsKLQkJcHJfZGVidWcoIiVzOiBTQ1IgZm9yIFNTSTEgaXMgJXhcbiIsIF9fZnVuY19fLCBzY3IpOwotCX0gZWxzZSB7Ci0JCXNjciA9IFNTSTJfU0NSOwotCQlwcl9kZWJ1ZygiJXM6IFNDUiBmb3IgU1NJMiBpcyAleFxuIiwgX19mdW5jX18sIHNjcik7Ci0JfQotCi0JaWYgKHNjciAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChjbGtfaWQpIHsKLQljYXNlIElNWF9TU1BfU1lTX0NMSzoKLQkJaWYgKGRpciA9PSBTTkRfU09DX0NMT0NLX09VVCkgewotCQkJc2NyIHw9IFNTSV9TQ1JfU1lTX0NMS19FTjsKLQkJCXByX2RlYnVnKCIlczogY2xrIG9mIGlzIG91dHB1dFxuIiwgX19mdW5jX18pOwotCQl9IGVsc2UgewotCQkJc2NyICY9IH5TU0lfU0NSX1NZU19DTEtfRU47Ci0JCQlwcl9kZWJ1ZygiJXM6IGNsayBvZiBpcyBpbnB1dFxuIiwgX19mdW5jX18pOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTFfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTFfU0NSID0gc2NyOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTJfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTJfU0NSID0gc2NyOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIENsb2NrIGRpdmlkZXJzCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JaW50IGRpdl9pZCwgaW50IGRpdikKLXsKLQl1MzIgc3RjY3IsIHNyY2NyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikKLQkJCXJldHVybiAwOwotCQlzcmNjciA9IFNTSTFfU1RDQ1I7Ci0JCXN0Y2NyID0gU1NJMV9TVENDUjsKLQl9IGVsc2UgewotCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKQotCQkJcmV0dXJuIDA7Ci0JCXNyY2NyID0gU1NJMl9TVENDUjsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSOwotCX0KLQotCXN3aXRjaCAoZGl2X2lkKSB7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9UWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9SWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENDUiA9IHN0Y2NyOwotCQlTU0kxX1NSQ0NSID0gc3JjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENDUiA9IHN0Y2NyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIE5ldHdvcmsgTW9kZSBvciBURE0gc2xvdHMgY29uZmlndXJhdGlvbi4KLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KLSAqLwotc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCi17Ci0JdTMyIHN0bXNrLCBzcm1zaywgc3RjY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJc3RjY3IgPSBTU0kxX1NUQ0NSOwotCX0gZWxzZSB7Ci0JCWlmIChTU0kyX1NDUiAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzdGNjciA9IFNTSTJfU1RDQ1I7Ci0JfQotCi0Jc3Rtc2sgPSBzcm1zayA9IG1hc2s7Ci0Jc3RjY3IgJj0gflNTSV9TVENDUl9EQ19NQVNLOwotCXN0Y2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVE1TSyA9IHN0bXNrOwotCQlTU0kxX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTFfU1JDQ1IgPSBTU0kxX1NUQ0NSID0gc3RjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVE1TSyA9IHN0bXNrOwotCQlTU0kyX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTJfU1JDQ1IgPSBTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQotICogU1NJIGZvciBJMlMuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCXVuc2lnbmVkIGludCBmbXQpCi17Ci0JdTMyIHN0Y3IgPSAwLCBzcmNyID0gMCwgc2NyOwotCi0JLyoKLQkgKiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkKLQkgKiBwcmV2aW91cyBzZXQgdmFsdWVzIGluIHN0Y3IKLQkgKi8KLQlzdGNyID0gU1NJMV9TVENSOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQllbHNlCi0JCXNjciA9IFNTSTJfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQotCWlmIChzY3IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIERBSSBtb2RlICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGxvdyAxY2xrIGJlZm9yZSBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTSSB8IFNTSV9TUkNSX1JFRlMgfCBTU0lfU1JDUl9SWEJJVDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVFhCSVQwOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JYQklUMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLwotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0w7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTTDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIDFjbGsgYmVmb3JlIGRhdGEgKi8KLQkJc3RjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVEVGUzsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRlNMIHwgU1NJX1NSQ1JfUkVGUzsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIGludmVyc2lvbiAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0k7Ci0JCXN0Y3IgJj0gflNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0k7Ci0JCXNyY3IgJj0gflNTSV9TUkNSX1JTQ0tQOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgotCQlzdGNyICY9IH4oU1NJX1NUQ1JfVFNDS1AgfCBTU0lfU1RDUl9URlNJKTsKLQkJc3JjciAmPSB+KFNTSV9TUkNSX1JTQ0tQIHwgU1NJX1NSQ1JfUkZTSSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0kgfCBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJc3RjciAmPSB+U1NJX1NUQ1JfVEZTSTsKLQkJc3RjciB8PSBTU0lfU1RDUl9UU0NLUDsKLQkJc3JjciAmPSB+U1NJX1NSQ1JfUkZTSTsKLQkJc3JjciB8PSBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIG1hc3RlciBtYXNrcyAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVIgfCBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkRJUiB8IFNTSV9TUkNSX1JYRElSOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVI7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZESVI7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKLQkJc3RjciB8PSBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SWERJUjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENSID0gc3RjcjsKLQkJU1NJMV9TUkNSID0gc3JjcjsKLQkJU1NJMV9TQ1IgPSBzY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENSID0gc3RjcjsKLQkJU1NJMl9TUkNSID0gc3JjcjsKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJLyogc2V0IHVwIFRYIERNQSBwYXJhbXMgKi8KLQkJc3dpdGNoIChjcHVfZGFpLT5pZCkgewotCQljYXNlIElNWF9EQUlfU1NJMDoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMToKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMzoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MTsKLQkJfQotCQlwcl9kZWJ1ZygiJXM6IChwbGF5YmFjaylcbiIsIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgdXAgUlggRE1BIHBhcmFtcyAqLwotCQlzd2l0Y2ggKGNwdV9kYWktPmlkKSB7Ci0JCWNhc2UgSU1YX0RBSV9TU0kwOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19pbjA7Ci0JCQlicmVhazsKLQkJY2FzZSBJTVhfREFJX1NTSTE6Ci0JCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMV9wY21fc3RlcmVvX2luMTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9faW4wOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kzOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19pbjE7Ci0JCX0KLQkJcHJfZGVidWcoIiVzOiAoY2FwdHVyZSlcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQkvKgotCSAqIHdlIGNhbnQgcmVhbGx5IGNoYW5nZSBhbnkgU1NJIHZhbHVlcyBhZnRlciBTU0kgaXMgZW5hYmxlZAotCSAqIG5lZWQgdG8gZml4IGluIHNvZnR3YXJlIGZvciBtYXggZmxleGliaWxpdHkgLSBscmcKLQkgKi8KLQlpZiAoY3B1X2RhaS0+YWN0aXZlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIHJlc2V0IHRoZSBTU0kgcG9ydCAtIFNlY3QgNDUuNC40ICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQotCQlpZiAoIXNzaV9jbGswKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMV9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTEgUmVzZXQgKi8KLQkJU1NJMV9TQ1IgPSAwOwotCi0JCVNTSTFfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoIXNzaV9jbGsxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMl9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTIgUmVzZXQgKi8KLQkJU1NJMl9TQ1IgPSAwOwotCi0JCVNTSTJfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3R4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHN0Y2NyLCBzdGNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzdGNjciA9IFNTSTFfU1RDQ1IgJiB+U1NJX1NUQ0NSX1dMX01BU0s7Ci0JCXN0Y3IgPSBTU0kxX1NUQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSICYgflNTSV9TVENDUl9XTF9NQVNLOwotCQlzdGNyID0gU1NJMl9TVENSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3RjciB8PSBTU0lfU1RDUl9URkVOMDsKLQllbHNlCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9URE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1RDUiA9IHN0Y3I7Ci0JCVNTSTFfU1RDQ1IgPSBzdGNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUQ1IgPSBzdGNyOwotCQlTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3J4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHNyY2NyLCBzcmNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzcmNjciA9IFNTSTFfU1JDQ1IgJiB+U1NJX1NSQ0NSX1dMX01BU0s7Ci0JCXNyY3IgPSBTU0kxX1NSQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3JjY3IgPSBTU0kyX1NSQ0NSICYgflNTSV9TUkNDUl9XTF9NQVNLOwotCQlzcmNyID0gU1NJMl9TUkNSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkVOMDsKLQllbHNlCi0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9SRE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1JDUiA9IHNyY3I7Ci0JCVNTSTFfU1JDQ1IgPSBzcmNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NSQ1IgPSBzcmNyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCksCi0gKiBhbHRob3VnaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJ5IHVwcGVyIGxheWVycy4KLSAqLwotaW50IGlteF9zc2lfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWludCByZXQ7Ci0KLQkvKiBjYW50IGNoYW5nZSBhbnkgcGFyYW1ldGVycyB3aGVuIFNTSSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKFNTSTJfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDb25maWd1cmUgYm90aCB0eCBhbmQgcnggcGFyYW1zIHdpdGggdGhlIHNhbWUgc2V0dGluZ3MuIFRoaXMgaXMKLQkgKiByZWFsbHkgYSBoYXJ3YXJlIHJlc3RyaWN0aW9uIGJlY2F1c2UgU1NJIG11c3QgYmUgZGlzYWJsZWQgdW50aWwKLQkgKiB3ZSBjYW4gY2hhbmdlIHRob3NlIHZhbHVlcy4gSWYgdGhlcmUgaXMgYW4gYWN0aXZlIGF1ZGlvIHN0cmVhbSBpbgotCSAqIG9uZSBkaXJlY3Rpb24sIGVuYWJsaW5nIHRoZSBvdGhlciBkaXJlY3Rpb24gd2l0aCBkaWZmZXJlbnQKLQkgKiBzZXR0aW5ncyB3b3VsZCBtZWFuIGRpc3R1cmJpbmcgdGhlIHJ1bm5pbmcgb25lLgotCSAqLwotCXJldCA9IGlteF9zc2lfaHdfdHhfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gaW14X3NzaV9od19yeF9wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOwotfQotCi1pbnQgaW14X3NzaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIEVuYWJsZSBjbGtzIGhlcmUgdG8gZm9sbG93IFNTSSByZWNvbW1lbmRlZCBpbml0IHNlcXVlbmNlICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJcmV0ID0gY2xrX2VuYWJsZShzc2lfY2xrMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZW5hYmxlIHNzaV9jbGswXG4iKTsKLQl9IGVsc2UgewotCQlyZXQgPSBjbGtfZW5hYmxlKHNzaV9jbGsxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbmFibGUgc3NpX2NsazFcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlteF9zc2lfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1MzIgc2NyOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSOwotCWVsc2UKLQkJc2NyID0gU1NJMl9TQ1I7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCXNjciB8PSBTU0lfU0NSX1RFIHwgU1NJX1NDUl9TU0lFTjsKLQkJZWxzZQotCQkJc2NyIHw9IFNTSV9TQ1JfUkUgfCBTU0lfU0NSX1NTSUVOOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQlzY3IgJj0gflNTSV9TQ1JfVEU7Ci0JCWVsc2UKLQkJCXNjciAmPSB+U1NJX1NDUl9SRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCVNTSTFfU0NSID0gc2NyOwotCWVsc2UKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaW14X3NzaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCS8qIHNodXRkb3duIFNTSSBpZiBuZWl0aGVyIFR4IG9yIFJ4IGlzIGFjdGl2ZSAqLwotCWlmICghY3B1X2RhaS0+YWN0aXZlKSB7Ci0KLQkJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fAotCQkJY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0KLQkJCWlmICgtLXNzaV9hY3RpdmVbU1NJMV9QT1JUXSA+IDEpCi0JCQkJcmV0dXJuOwotCi0JCQlTU0kxX1NDUiA9IDA7Ci0JCQljbGtfZGlzYWJsZShzc2lfY2xrMCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoLS1zc2lfYWN0aXZlW1NTSTJfUE9SVF0pCi0JCQkJcmV0dXJuOwotCQkJU1NJMl9TQ1IgPSAwOwotCQkJY2xrX2Rpc2FibGUoc3NpX2NsazEpOwotCQl9Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGlteF9zc2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0Jc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaW14X3NzaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgaW14X3NzaV9yZXN1bWUJTlVMTAotI2VuZGlmCi0KLSNkZWZpbmUgSU1YX1NTSV9SQVRFUyBcCi0JKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFwKLQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAotCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCi0JU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFwKLQlTTkRSVl9QQ01fUkFURV85NjAwMCkKLQotI2RlZmluZSBJTVhfU1NJX0JJVFMgXAotCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKLQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW14X3NzaV9wY21fZGFpX29wcyA9IHsKLQkuc3RhcnR1cCA9IGlteF9zc2lfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSBpbXhfc3NpX3NodXRkb3duLAotCS50cmlnZ2VyID0gaW14X3NzaV90cmlnZ2VyLAotCS5wcmVwYXJlID0gaW14X3NzaV9wcmVwYXJlLAotCS5od19wYXJhbXMgPSBpbXhfc3NpX2h3X3BhcmFtcywKLQkuc2V0X3N5c2NsayA9IGlteF9zc2lfc2V0X2RhaV9zeXNjbGssCi0JLnNldF9jbGtkaXYgPSBpbXhfc3NpX3NldF9kYWlfY2xrZGl2LAotCS5zZXRfZm10ID0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKLQkuc2V0X3RkbV9zbG90ID0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAotfTsKLQotc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVtdID0gewotewotCS5uYW1lID0gImlteC1pMnMtMS0wIiwKLQkuaWQgPSBJTVhfREFJX1NTSTAsCi0JLnN1c3BlbmQgPSBpbXhfc3NpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlteF9zc2lfcmVzdW1lLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTItMCIsCi0JLmlkID0gSU1YX0RBSV9TU0kxLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTEtMSIsCi0JLmlkID0gSU1YX0RBSV9TU0kyLAotCS5zdXNwZW5kID0gaW14X3NzaV9zdXNwZW5kLAotCS5yZXN1bWUgPSBpbXhfc3NpX3Jlc3VtZSwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi17Ci0JLm5hbWUgPSAiaW14LWkycy0yLTEiLAotCS5pZCA9IElNWF9EQUlfU1NJMywKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaW14X3NzaV9wY21fZGFpKTsKLQotc3RhdGljIGludCBfX2luaXQgaW14X3NzaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhpbXhfc3NpX3BjbV9kYWksCi0JCQkJQVJSQVlfU0laRShpbXhfc3NpX3BjbV9kYWkpKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlteF9zc2lfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKGlteF9zc2lfcGNtX2RhaSwKLQkJCQlBUlJBWV9TSVpFKGlteF9zc2lfcGNtX2RhaSkpOwotfQotCi1tb2R1bGVfaW5pdChpbXhfc3NpX2luaXQpOwotbW9kdWxlX2V4aXQoaW14X3NzaV9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIEFTb0MgSTJTIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmggYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYmRjOS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9JTVhfU1NJX0gKLSNkZWZpbmUgX0lNWF9TU0lfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKiBTU0kgcmVncyBkZWZpbml0aW9uIC0gTU9WRSB0byAvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoLyB3aGVuIHN0YWJsZSAqLwotI2RlZmluZSBTU0kxX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTFfQkFTRV9BRERSKQotI2RlZmluZSBTU0kyX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTJfQkFTRV9BRERSKQotCi0jZGVmaW5lIFNUWDAgICAweDAwCi0jZGVmaW5lIFNUWDEgICAweDA0Ci0jZGVmaW5lIFNSWDAgICAweDA4Ci0jZGVmaW5lIFNSWDEgICAweDBjCi0jZGVmaW5lIFNDUiAgICAweDEwCi0jZGVmaW5lIFNJU1IgICAweDE0Ci0jZGVmaW5lIFNJRVIgICAweDE4Ci0jZGVmaW5lIFNUQ1IgICAweDFjCi0jZGVmaW5lIFNSQ1IgICAweDIwCi0jZGVmaW5lIFNUQ0NSICAweDI0Ci0jZGVmaW5lIFNSQ0NSICAweDI4Ci0jZGVmaW5lIFNGQ1NSICAweDJjCi0jZGVmaW5lIFNUUiAgICAweDMwCi0jZGVmaW5lIFNPUiAgICAweDM0Ci0jZGVmaW5lIFNBQ05UICAweDM4Ci0jZGVmaW5lIFNBQ0FERCAweDNjCi0jZGVmaW5lIFNBQ0RBVCAweDQwCi0jZGVmaW5lIFNBVEFHICAweDQ0Ci0jZGVmaW5lIFNUTVNLICAweDQ4Ci0jZGVmaW5lIFNSTVNLICAweDRjCi0KLSNkZWZpbmUgU1NJMV9TVFgwCSgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgwKSkpCi0jZGVmaW5lIFNTSTFfU1RYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgxKSkpCi0jZGVmaW5lIFNTSTFfU1JYMCAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgwKSkpCi0jZGVmaW5lIFNTSTFfU1JYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgxKSkpCi0jZGVmaW5lIFNTSTFfU0NSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQ1IpKSkKLSNkZWZpbmUgU1NJMV9TSVNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJU1IpKSkKLSNkZWZpbmUgU1NJMV9TSUVSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJRVIpKSkKLSNkZWZpbmUgU1NJMV9TVENSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ1IpKSkKLSNkZWZpbmUgU1NJMV9TUkNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSQ1IpKSkKLSNkZWZpbmUgU1NJMV9TVENDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ0NSKSkpCi0jZGVmaW5lIFNTSTFfU1JDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUkNDUikpKQotI2RlZmluZSBTU0kxX1NGQ1NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0ZDU1IpKSkKLSNkZWZpbmUgU1NJMV9TVFIgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUUikpKQotI2RlZmluZSBTU0kxX1NPUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU09SKSkpCi0jZGVmaW5lIFNTSTFfU0FDTlQgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNOVCkpKQotI2RlZmluZSBTU0kxX1NBQ0FERCAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FDQUREKSkpCi0jZGVmaW5lIFNTSTFfU0FDREFUICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNEQVQpKSkKLSNkZWZpbmUgU1NJMV9TQVRBRyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBVEFHKSkpCi0jZGVmaW5lIFNTSTFfU1RNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVE1TSykpKQotI2RlZmluZSBTU0kxX1NSTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JNU0spKSkKLQotCi0jZGVmaW5lIFNTSTJfU1RYMAkoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMCkpKQotI2RlZmluZSBTU0kyX1NUWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMSkpKQotI2RlZmluZSBTU0kyX1NSWDAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMCkpKQotI2RlZmluZSBTU0kyX1NSWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMSkpKQotI2RlZmluZSBTU0kyX1NDUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0NSKSkpCi0jZGVmaW5lIFNTSTJfU0lTUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSVNSKSkpCi0jZGVmaW5lIFNTSTJfU0lFUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSUVSKSkpCi0jZGVmaW5lIFNTSTJfU1RDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENSKSkpCi0jZGVmaW5lIFNTSTJfU1JDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUkNSKSkpCi0jZGVmaW5lIFNTSTJfU1RDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENDUikpKQotI2RlZmluZSBTU0kyX1NSQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JDQ1IpKSkKLSNkZWZpbmUgU1NJMl9TRkNTUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNGQ1NSKSkpCi0jZGVmaW5lIFNTSTJfU1RSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVFIpKSkKLSNkZWZpbmUgU1NJMl9TT1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNPUikpKQotI2RlZmluZSBTU0kyX1NBQ05UICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDTlQpKSkKLSNkZWZpbmUgU1NJMl9TQUNBREQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBQ0FERCkpKQotI2RlZmluZSBTU0kyX1NBQ0RBVCAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDREFUKSkpCi0jZGVmaW5lIFNTSTJfU0FUQUcgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQVRBRykpKQotI2RlZmluZSBTU0kyX1NUTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RNU0spKSkKLSNkZWZpbmUgU1NJMl9TUk1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSTVNLKSkpCi0KLSNkZWZpbmUgU1NJX1NDUl9DTEtfSVNUICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0NSX1RDSF9FTiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TQ1JfU1lTX0NMS19FTiAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9OT1JNICAoMCA8PCA1KQotI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX01TVFIgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfU0xBVkUgKDIgPDwgNSkKLSNkZWZpbmUgU1NJX1NDUl9TWU4gICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU0NSX05FVCAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TQ1JfUkUgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NDUl9URSAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU0NSX1NTSUVOICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NJU1JfQ01EQVUgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgU1NJX1NJU1JfQ01ERFUgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgU1NJX1NJU1JfUlhUICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMSAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMCAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgU1NJX1NJU1JfVERFMSAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgU1NJX1NJU1JfVERFMCAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMSAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMCAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgU1NJX1NJU1JfVFVFMSAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0lTUl9UVUUwICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TSVNSX1RGUyAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NJU1JfUkZTICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU0lTUl9UTFMgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TSVNSX1JMUyAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NJU1JfUkZGMSAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU0lTUl9SRkYwICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TSVNSX1RGRTEgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NJU1JfVEZFMCAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TSUVSX1JETUFFICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIFNTSV9TSUVSX1JJRSAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIFNTSV9TSUVSX1RETUFFICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIFNTSV9TSUVSX1RJRSAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIFNTSV9TSUVSX0NNREFVX0VOICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TSUVSX0NNRERVX0VOICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIFNTSV9TSUVSX1JYVF9FTiAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjFfRU4gICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjBfRU4gICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTFfRU4gICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTBfRU4gICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTFfRU4gICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTBfRU4gICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIFNTSV9TSUVSX1RVRTFfRU4gICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgU1NJX1NJRVJfVFVFMF9FTiAgICAgICAoMSA8PCA4KQotI2RlZmluZSBTU0lfU0lFUl9URlNfRU4gICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIFNTSV9TSUVSX1JGU19FTiAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgU1NJX1NJRVJfVExTX0VOICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBTU0lfU0lFUl9STFNfRU4gICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TSUVSX1JGRjFfRU4gICAgICAgKDEgPDwgMykKLSNkZWZpbmUgU1NJX1NJRVJfUkZGMF9FTiAgICAgICAoMSA8PCAyKQotI2RlZmluZSBTU0lfU0lFUl9URkUxX0VOICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFNTSV9TSUVSX1RGRTBfRU4gICAgICAgKDEgPDwgMCkKLQotI2RlZmluZSBTU0lfU1RDUl9UWEJJVDAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TVENSX1RGRU4xICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NUQ1JfVEZFTjAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU1RDUl9URkRJUiAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TVENSX1RYRElSICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NUQ1JfVFNIRkQgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU1RDUl9UU0NLUCAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TVENSX1RGU0kgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NUQ1JfVEZTTCAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU1RDUl9URUZTICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NSQ1JfUlhCSVQwICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU1JDUl9SRkVOMSAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TUkNSX1JGRU4wICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NSQ1JfUkZESVIgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU1JDUl9SWERJUiAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TUkNSX1JTSEZEICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NSQ1JfUlNDS1AgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU1JDUl9SRlNJICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TUkNSX1JGU0wgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NSQ1JfUkVGUyAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TVENDUl9ESVYyICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TVENDUl9QU1IgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TVENDUl9XTCh4KSAgICAgICAgKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQyh4KSAgICAgICAgKCgoeCkgJiAweDFmKSA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE0oeCkgICAgICAgICgoKHgpICYgMHhmZikgPDwgMCkKLSNkZWZpbmUgU1NJX1NUQ0NSX1dMX01BU0sgICAgICAgICgweGYgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQ19NQVNLICAgICAgICAoMHgxZiA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE1fTUFTSyAgICAgICAgKDB4ZmYgPDwgMCkKLQotI2RlZmluZSBTU0lfU1JDQ1JfRElWMiAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBTU0lfU1JDQ1JfUFNSICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBTU0lfU1JDQ1JfV0woeCkgICAgICAgICgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfREMoeCkgICAgICAgICgoKHgpICYgMHgxZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNKHgpICAgICAgICAoKCh4KSAmIDB4ZmYpIDw8IDApCi0jZGVmaW5lIFNTSV9TUkNDUl9XTF9NQVNLICAgICAgICAoMHhmIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfRENfTUFTSyAgICAgICAgKDB4MWYgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNX01BU0sgICAgICAgICgweGZmIDw8IDApCi0KLQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI4KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI0KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDIwKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDE2KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8IDEyKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8ICA4KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICA0KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICAwKQotCi0jZGVmaW5lIFNTSV9TVFJfVEVTVCAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NUUl9SQ0syVENLICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBTU0lfU1RSX1JGUzJURlMgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVFJfUlhTVEFURSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NUUl9UWEQyUlhEICAgICAgICgxIDw8ICA3KQotI2RlZmluZSBTU0lfU1RSX1RDSzJSQ0sgICAgICAgKDEgPDwgIDYpCi0jZGVmaW5lIFNTSV9TVFJfVEZTMlJGUyAgICAgICAoMSA8PCAgNSkKLSNkZWZpbmUgU1NJX1NUUl9UWFNUQVRFKHgpICAgICgoKHgpICYgMHhmKSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TT1JfQ0xLT0ZGICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU09SX1JYX0NMUiAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NPUl9UWF9DTFIgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TT1JfSU5JVCAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU09SX1dBSVQoeCkgICAgICAgKCgoeCkgJiAweDMpIDw8IDEpCi0jZGVmaW5lIFNTSV9TT1JfU1lOUlNUICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TQUNOVF9GUkRJVih4KSAgICAoKCh4KSAmIDB4M2YpIDw8IDUpCi0jZGVmaW5lIFNTSV9TQUNOVF9XUiAgICAgICAgICAoeCA8PCA0KQotI2RlZmluZSBTU0lfU0FDTlRfUkQgICAgICAgICAgKHggPDwgMykKLSNkZWZpbmUgU1NJX1NBQ05UX1RJRiAgICAgICAgICh4IDw8IDIpCi0jZGVmaW5lIFNTSV9TQUNOVF9GViAgICAgICAgICAoeCA8PCAxKQotI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOICAgICAgKHggPDwgMCkKLQotLyogV2F0ZXJtYXJrcyBmb3IgRklGTydzICovCi0jZGVmaW5lIFRYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0jZGVmaW5lIFJYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0KLS8qIGkuTVggREFJIFNTUCBJRCdzICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMAkJCTAgLyogU1NJMSBGSUZPIDAgKi8KLSNkZWZpbmUgSU1YX0RBSV9TU0kxCQkJMSAvKiBTU0kxIEZJRk8gMSAqLwotI2RlZmluZSBJTVhfREFJX1NTSTIJCQkyIC8qIFNTSTIgRklGTyAwICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMwkJCTMgLyogU1NJMiBGSUZPIDEgKi8KLQotLyogU1NJIGNsb2NrIHNvdXJjZXMgKi8KLSNkZWZpbmUgSU1YX1NTUF9TWVNfQ0xLCQkwCi0KLS8qIFNTSSBhdWRpbyBkaXZpZGVycyAqLwotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl8yCQkJMAotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl9QU1IJCQkxCi0jZGVmaW5lIElNWF9TU0lfVFhfRElWX1BNCQkJMgotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl8yCQkJMwotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl9QU1IJCQk0Ci0jZGVmaW5lIElNWF9TU0lfUlhfRElWX1BNCQkJNQotCi0KLS8qIFNTSSBEaXYgMiAqLwotI2RlZmluZSBJTVhfU1NJX0RJVl8yX09GRgkJKH5TU0lfU1RDQ1JfRElWMikKLSNkZWZpbmUgSU1YX1NTSV9ESVZfMl9PTgkJU1NJX1NUQ0NSX0RJVjIKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbNF07Ci1leHRlcm4gaW50IGdldF9zc2lfY2xrKGludCBzc2ksIHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMDdkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHBoeWNvcmUtYWM5Ny5jICAtLSAgU29DIGF1ZGlvIGZvciBpbXhfcGh5Y29yZSBpbiBBQzk3IG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgorI2luY2x1ZGUgImlteC1zc2kuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmU7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaW14X3BoeWNvcmVfaGlmaV9vcHMgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaW14X3BoeWNvcmVfZGFpX2FjOTdbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJIaUZpIiwKKwkJLnN0cmVhbV9uYW1lCT0gIkhpRmkiLAorCQkuY29kZWNfZGFpCT0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0hJRkldLAorCQkub3BzCQk9ICZpbXhfcGh5Y29yZV9oaWZpX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmUgPSB7CisJLm5hbWUJCT0gIlBoeUNPUkUtYXVkaW8iLAorCS5wbGF0Zm9ybQk9ICZpbXhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9IGlteF9waHljb3JlX2RhaV9hYzk3LAorCS5udW1fbGlua3MJPSBBUlJBWV9TSVpFKGlteF9waHljb3JlX2RhaV9hYzk3KSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgaW14X3BoeWNvcmVfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmlteF9waHljb3JlLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTk3MTIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW14X3BoeWNvcmVfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3BoeWNvcmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGNtMDQzKCkgJiYgIW1hY2hpbmVfaXNfcGNhMTAwKCkpCisJCS8qIHJldHVybiBoYXBweS4gV2UgbWlnaHQgcnVuIG9uIGEgdG90YWxseSBkaWZmZXJlbnQgbWFjaGluZSAqLworCQlyZXR1cm4gMDsKKworCWlteF9waHljb3JlX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWlteF9waHljb3JlX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW14X3BoeWNvcmVfZGFpX2FjOTdbMF0uY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLCAmaW14X3BoeWNvcmVfc25kX2RldmRhdGEpOworCWlteF9waHljb3JlX3NuZF9kZXZkYXRhLmRldiA9ICZpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChpbXhfcGh5Y29yZV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGlteF9waHljb3JlX3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhfcGh5Y29yZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaW14X3BoeWNvcmVfc25kX2RldmljZSk7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW14X3BoeWNvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfcGh5Y29yZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaHlDT1JFIEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggNjE5NTJhYS4uZjExOTYzYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC02LDYgKzYsOSBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IE9NQVBfTUNCU1AKIAorY29uZmlnIFNORF9PTUFQX1NPQ19NQ1BETQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfT01BUF9TT0NfTjgxMAogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTm9raWEgTjgxMCIKIAlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAgJiYgSTJDCkBAIC05NCwxMiArOTcsMTQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIE9NQVAzIFBhbmRvcmEuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUiCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUDNfQkVBR0xFCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUgYW5kIERldmtpdDgwMDAiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DCisJZGVwZW5kcyBvbiAoTUFDSF9PTUFQM19CRUFHTEUgfHwgTUFDSF9ERVZLSVQ4MDAwKQogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgQmVhZ2xlYm9hcmQuCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZCBvcgorCSAgdGhlIGNsb25lIERldmtpdDgwMDAuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfWk9PTTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFpvb20yIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCAxOTI4M2U1Li4wYmMwMGNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtMSw5ICsxLDExIEBACiAjIE9NQVAgUGxhdGZvcm0gU3VwcG9ydAogc25kLXNvYy1vbWFwLW9ianMgOj0gb21hcC1wY20ubwogc25kLXNvYy1vbWFwLW1jYnNwLW9ianMgOj0gb21hcC1tY2JzcC5vCitzbmQtc29jLW9tYXAtbWNwZG0tb2JqcyA6PSBvbWFwLW1jcGRtLm8gbWNwZG0ubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DKSArPSBzbmQtc29jLW9tYXAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUCkgKz0gc25kLXNvYy1vbWFwLW1jYnNwLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTUNQRE0pICs9IHNuZC1zb2Mtb21hcC1tY3BkbS5vCiAKICMgT01BUCBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtbjgxMC1vYmpzIDo9IG44MTAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbWNwZG0uYyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4ZGY2YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBtY3BkbS5jICAtLSAgTWNQRE0gaW50ZXJmYWNlIGRyaXZlcgorICoKKyAqIEF1dGhvcjogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSAibWNwZG0uaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX21jcGRtICptY3BkbTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWNwZG1fd3JpdGUodTE2IHJlZywgdTMyIHZhbCkKK3sKKyAgICAgICBfX3Jhd193cml0ZWwodmFsLCBtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfbWNwZG1fcmVhZCh1MTYgcmVnKQoreworICAgICAgIHJldHVybiBfX3Jhd19yZWFkbChtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVnX2R1bXAodm9pZCkKK3sKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRU1RBVFVTX1JBVzogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUVNUQVRVU19SQVcpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFTVEFUVVM6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFFTkFCTEVfU0VUOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRRU5BQkxFX1NFVCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIklSUUVOQUJMRV9DTFI6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFFTkFCTEVfQ0xSKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRV0FLRV9FTjogMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRV0FLRV9FTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQUVOQUJMRV9TRVQ6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQUVOQUJMRV9TRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETUFFTkFCTEVfQ0xSOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE1BRU5BQkxFX0NMUikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQVdBS0VFTjogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQVdBS0VFTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkNUUkw6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRE5fREFUQTogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ROX0RBVEEpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJVUF9EQVRBOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9VUF9EQVRBKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRklGT19DVFJMX0ROOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfRE4pKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJGSUZPX0NUUkxfVVA6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfVVApKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETl9PRkZTRVQ6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9ETl9PRkZTRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Cit9CisKKy8qCisgKiBUYWtlcyB0aGUgTWNQRE0gbW9kdWxlIGluIGFuZCBvdXQgb2YgcmVzZXQgc3RhdGUuCisgKiBVcGxpbmsgYW5kIGRvd25saW5rIGNhbiBiZSByZXNldCBpbmRpdmlkdWFsbHkuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVzZXRfY2FwdHVyZShpbnQgcmVzZXQpCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAocmVzZXQpCisgICAgICAgICAgICAgICBjdHJsIHw9IFNXX1VQX1JTVDsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsICY9IH5TV19VUF9SU1Q7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0NUUkwsIGN0cmwpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKGludCByZXNldCkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChyZXNldCkKKyAgICAgICAgICAgICAgIGN0cmwgfD0gU1dfRE5fUlNUOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gflNXX0ROX1JTVDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBFbmFibGVzIHRoZSB0cmFuc2ZlciB0aHJvdWdoIHRoZSBQRE0gaW50ZXJmYWNlIHRvL2Zyb20gdGhlIFBob2VuaXgKKyAqIGNvZGVjIGJ5IGVuYWJsaW5nIHRoZSBjb3JyZXNwb25kaW5nIFVQIG9yIEROIGNoYW5uZWxzLgorICovCit2b2lkIG9tYXBfbWNwZG1fc3RhcnQoaW50IHN0cmVhbSkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChzdHJlYW0pCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT51cF9jaGFubmVsczsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBEaXNhYmxlcyB0aGUgdHJhbnNmZXIgdGhyb3VnaCB0aGUgUERNIGludGVyZmFjZSB0by9mcm9tIHRoZSBQaG9lbml4CisgKiBjb2RlYyBieSBkaXNhYmxpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVVAgb3IgRE4gY2hhbm5lbHMuCisgKi8KK3ZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAoc3RyZWFtKQorICAgICAgICAgICAgICAgY3RybCAmPSB+bWNwZG0tPnVwX2NoYW5uZWxzOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gfm1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBDb25maWd1cmVzIE1jUERNIHVwbGluayBmb3IgYXVkaW8gcmVjb3JkaW5nLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIXVwbGluaykKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IHVwbGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gdXBsaW5rLT5pcnFfbWFzayAmIE1DUERNX1VQTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9TRVQsIGlycV9tYXNrKTsKKworICAgICAgIC8qIENvbmZpZ3VyZSB1cGxpbmsgdGhyZXNob2xkICovCisgICAgICAgaWYgKHVwbGluay0+dGhyZXNob2xkID4gVVBfVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgdXBsaW5rLT50aHJlc2hvbGQgPSBVUF9USFJFU19NQVg7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0ZJRk9fQ1RSTF9VUCwgdXBsaW5rLT50aHJlc2hvbGQpOworCisgICAgICAgLyogQ29uZmlndXJlIERNQSBjb250cm9sbGVyICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfVVBfRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gdXBsaW5rLT5mb3JtYXQgJiBQRE1PVVRGT1JNQVQ7CisKKyAgICAgICAvKiBVcGxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSB1cGxpbmstPmNoYW5uZWxzICYgKFBETV9VUF9NQVNLIHwgUERNX1NUQVRVU19NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgTWNQRE0gZG93bmxpbmsgZm9yIGF1ZGlvIHBsYXliYWNrLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBkb3dubGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gZG93bmxpbmstPmlycV9tYXNrICYgTUNQRE1fRE9XTkxJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfU0VULCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBDb25maWd1cmUgdXBsaW5rIHRocmVzaG9sZCAqLworICAgICAgIGlmIChkb3dubGluay0+dGhyZXNob2xkID4gRE5fVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgZG93bmxpbmstPnRocmVzaG9sZCA9IEROX1RIUkVTX01BWDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRklGT19DVFJMX0ROLCBkb3dubGluay0+dGhyZXNob2xkKTsKKworICAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfRE5fRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gZG93bmxpbmstPmZvcm1hdCAmIFBETU9VVEZPUk1BVDsKKworICAgICAgIC8qIERvd25saW5rIGNoYW5uZWxzICovCisgICAgICAgbWNwZG0tPmRuX2NoYW5uZWxzID0gZG93bmxpbmstPmNoYW5uZWxzICYgKFBETV9ETl9NQVNLIHwgUERNX0NNRF9NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSB1cGxpbmsgY29uZmlndXJhdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluaykKK3sKKyAgICAgICBpbnQgaXJxX21hc2sgPSAwOworCisgICAgICAgaWYgKCF1cGxpbmspCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIC8qIERpc2FibGUgaXJxIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIGlycV9tYXNrIHw9IHVwbGluay0+aXJxX21hc2sgJiBNQ1BETV9VUExJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfQ0xSLCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBEaXNhYmxlIERNQSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0RNQUVOQUJMRV9DTFIsIERNQV9VUF9FTkFCTEUpOworCisgICAgICAgLyogQ2xlYXIgRG93bmxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSAwOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IE5VTEw7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSBkb3dubGluayBjb25maWd1cmF0aW9uLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgKi8KK2ludCBvbWFwX21jcGRtX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAvKiBEaXNhYmxlIGlycSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBpcnFfbWFzayB8PSBkb3dubGluay0+aXJxX21hc2sgJiBNQ1BETV9ET1dOTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9DTFIsIGlycV9tYXNrKTsKKworICAgICAgIC8qIERpc2FibGUgRE1BIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRE1BRU5BQkxFX0NMUiwgRE1BX0ROX0VOQUJMRSk7CisKKyAgICAgICAvKiBjbGVhciBEb3dubGluayBjaGFubmVscyAqLworICAgICAgIG1jcGRtLT5kbl9jaGFubmVscyA9IDA7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBOVUxMOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jcGRtX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1faXJxID0gZGV2X2lkOworICAgICAgIGludCBpcnFfc3RhdHVzOworCisgICAgICAgaXJxX3N0YXR1cyA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpOworCisgICAgICAgLyogQWNrbm93bGVkZ2UgaXJxIGV2ZW50ICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFTVEFUVVMsIGlycV9zdGF0dXMpOworCisgICAgICAgaWYgKGlycSAmIE1DUERNX0ROX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRX0VNUFRZKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRKSB7CisgICAgICAgICAgICAgICBkZXZfZGJnKG1jcGRtX2lycS0+ZGV2LCAiRE4gd3JpdGUgcmVxdWVzdFxuIik7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiVVAgRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihtY3BkbV9pcnEtPnVwbGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMCk7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9FTVBUWSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbV9pcnEtPmRldiwgIlVQIEZJRk8gZXJyb3IgJXhcbiIsIGlycV9zdGF0dXMpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4obWNwZG1faXJxLT51cGxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDApOworICAgICAgIH0KKworICAgICAgIGlmIChpcnEgJiBNQ1BETV9VUF9JUlEpIHsKKyAgICAgICAgICAgICAgIGRldl9kYmcobWNwZG1faXJxLT5kZXYsICJVUCB3cml0ZSByZXF1ZXN0XG4iKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBvbWFwX21jcGRtX3JlcXVlc3Qodm9pZCkKK3sKKyAgICAgICBpbnQgcmV0OworCisgICAgICAgY2xrX2VuYWJsZShtY3BkbS0+Y2xrKTsKKworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworCisgICAgICAgaWYgKCFtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGluIHVzZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorICAgICAgIG1jcGRtLT5mcmVlID0gMDsKKworICAgICAgIHNwaW5fdW5sb2NrKCZtY3BkbS0+bG9jayk7CisKKyAgICAgICAvKiBEaXNhYmxlIGxpbmVzIHdoaWxlIHJlcXVlc3QgaXMgb25nb2luZyAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgMHgwMCk7CisKKyAgICAgICByZXQgPSByZXF1ZXN0X2lycShtY3BkbS0+aXJxLCBvbWFwX21jcGRtX2lycV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICJNY1BETSIsICh2b2lkICopbWNwZG0pOworICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG0tPmRldiwgIlJlcXVlc3QgZm9yIE1jUERNIElSUSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICAgICBjbGtfZGlzYWJsZShtY3BkbS0+Y2xrKTsKKyAgICAgICByZXR1cm4gcmV0OworfQorCit2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKQoreworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworICAgICAgIGlmIChtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGFscmVhZHkgZnJlZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgIH0KKyAgICAgICBtY3BkbS0+ZnJlZSA9IDE7CisgICAgICAgc3Bpbl91bmxvY2soJm1jcGRtLT5sb2NrKTsKKworICAgICAgIGNsa19kaXNhYmxlKG1jcGRtLT5jbGspOworCisgICAgICAgZnJlZV9pcnEobWNwZG0tPmlycSwgKHZvaWQgKiltY3BkbSk7Cit9CisKKy8qIEVuYWJsZS9kaXNhYmxlIERDIG9mZnNldCBjYW5jZWxhdGlvbiBmb3IgdGhlIGFuYWxvZworICogaGVhZHNldCBwYXRoIChQRE0gY2hhbm5lbHMgMSBhbmQgMikuCisgKi8KK2ludCBvbWFwX21jcGRtX3NldF9vZmZzZXQoaW50IG9mZnNldDEsIGludCBvZmZzZXQyKQoreworICAgICAgIGludCBvZmZzZXQ7CisKKyAgICAgICBpZiAoKG9mZnNldDEgPiBETl9PRlNUX01BWCkgfHwgKG9mZnNldDIgPiBETl9PRlNUX01BWCkpCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIG9mZnNldCA9IChvZmZzZXQxIDw8IEROX09GU1RfUlgxKSB8IChvZmZzZXQyIDw8IEROX09GU1RfUlgyKTsKKworICAgICAgIC8qIG9mZnNldCBjYW5jZWxsYXRpb24gZm9yIGNoYW5uZWwgMSAqLworICAgICAgIGlmIChvZmZzZXQxKQorICAgICAgICAgICAgICAgb2Zmc2V0IHw9IEROX09GU1RfUlgxX0VOOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIG9mZnNldCAmPSB+RE5fT0ZTVF9SWDFfRU47CisKKyAgICAgICAvKiBvZmZzZXQgY2FuY2VsbGF0aW9uIGZvciBjaGFubmVsIDIgKi8KKyAgICAgICBpZiAob2Zmc2V0MikKKyAgICAgICAgICAgICAgIG9mZnNldCB8PSBETl9PRlNUX1JYMl9FTjsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBvZmZzZXQgJj0gfkROX09GU1RfUlgyX0VOOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETl9PRkZTRVQsIG9mZnNldCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb21hcF9tY3BkbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOworICAgICAgIGludCByZXQgPSAwOworCisgICAgICAgbWNwZG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY3BkbSksIEdGUF9LRVJORUwpOworICAgICAgIGlmICghbWNwZG0pIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgfQorCisgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKyAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHJlc291cmNlXG4iKTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyX3Jlc291cmNlOworICAgICAgIH0KKworICAgICAgIHNwaW5fbG9ja19pbml0KCZtY3BkbS0+bG9jayk7CisgICAgICAgbWNwZG0tPmZyZWUgPSAxOworICAgICAgIG1jcGRtLT5pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworICAgICAgIGlmICghbWNwZG0tPmlvX2Jhc2UpIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycl9yZXNvdXJjZTsKKyAgICAgICB9CisKKyAgICAgICBtY3BkbS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworICAgICAgIG1jcGRtLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZG1fY2siKTsKKyAgICAgICBpZiAoSVNfRVJSKG1jcGRtLT5jbGspKSB7CisgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKG1jcGRtLT5jbGspOworICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBwZG1fY2s6ICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgZ290byBlcnJfY2xrOworICAgICAgIH0KKworICAgICAgIG1jcGRtLT5kZXYgPSAmcGRldi0+ZGV2OworICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jcGRtKTsKKworICAgICAgIHJldHVybiAwOworCitlcnJfY2xrOgorICAgICAgIGlvdW5tYXAobWNwZG0tPmlvX2Jhc2UpOworZXJyX3Jlc291cmNlOgorICAgICAgIGtmcmVlKG1jcGRtKTsKK2V4aXQ6CisgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9tY3BkbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1fcHRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworICAgICAgIGNsa19wdXQobWNwZG1fcHRyLT5jbGspOworCisgICAgICAgaW91bm1hcChtY3BkbV9wdHItPmlvX2Jhc2UpOworCisgICAgICAgbWNwZG1fcHRyLT5jbGsgPSBOVUxMOworICAgICAgIG1jcGRtX3B0ci0+ZnJlZSA9IDA7CisgICAgICAgbWNwZG1fcHRyLT5kZXYgPSBOVUxMOworCisgICAgICAga2ZyZWUobWNwZG1fcHRyKTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX21jcGRtX2RyaXZlciA9IHsKKyAgICAgICAucHJvYmUgPSBvbWFwX21jcGRtX3Byb2JlLAorICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChvbWFwX21jcGRtX3JlbW92ZSksCisgICAgICAgLmRyaXZlciA9IHsKKyAgICAgICAgICAgICAgIC5uYW1lID0gIm9tYXAtbWNwZG0iLAorICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9tY3BkbV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbWNwZG1faW5pdCh2b2lkKQoreworICAgICAgIHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfbWNwZG1fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9tY3BkbV9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL21jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjMyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogbWNwZG0uaCAtLSBEZWZpbmVzIGZvciBNY1BETSBkcml2ZXIKKyAqCisgKiBBdXRob3I6IEpvcmdlIEVkdWFyZG8gQ2FuZGVsYXJpYSA8eDAxMDcyMDlAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworLyogTWNQRE0gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUNQRE1fUkVWSVNJT04gICAgICAgICAweDAwCisjZGVmaW5lIE1DUERNX1NZU0NPTkZJRyAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1DUERNX0lSUVNUQVRVU19SQVcgICAgMHgyNAorI2RlZmluZSBNQ1BETV9JUlFTVEFUVVMgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQ1BETV9JUlFFTkFCTEVfU0VUICAgIDB4MkMKKyNkZWZpbmUgTUNQRE1fSVJRRU5BQkxFX0NMUiAgICAweDMwCisjZGVmaW5lIE1DUERNX0lSUVdBS0VfRU4gICAgICAgMHgzNAorI2RlZmluZSBNQ1BETV9ETUFFTkFCTEVfU0VUICAgIDB4MzgKKyNkZWZpbmUgTUNQRE1fRE1BRU5BQkxFX0NMUiAgICAweDNDCisjZGVmaW5lIE1DUERNX0RNQVdBS0VFTiAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIE1DUERNX0NUUkwgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBNQ1BETV9ETl9EQVRBICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUNQRE1fVVBfREFUQSAgICAgICAgICAweDRDCisjZGVmaW5lIE1DUERNX0ZJRk9fQ1RSTF9ETiAgICAgMHg1MAorI2RlZmluZSBNQ1BETV9GSUZPX0NUUkxfVVAgICAgIDB4NTQKKyNkZWZpbmUgTUNQRE1fRE5fT0ZGU0VUICAgICAgICAgICAgICAgIDB4NTgKKworLyoKKyAqIE1DUERNX0lSUSBiaXQgZmllbGRzCisgKiBJUlFTVEFUVVNfUkFXLCBJUlFTVEFUVVMsIElSUUVOQUJMRV9TRVQsIElSUUVOQUJMRV9DTFIKKyAqLworCisjZGVmaW5lIE1DUERNX0ROX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBNQ1BETV9ETl9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTUNQRE1fRE5fSVJRX0FMTVNUX0VNUFRZICAgICAgICgxIDw8IDIpCisjZGVmaW5lIE1DUERNX0ROX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAzKQorCisjZGVmaW5lIE1DUERNX1VQX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBNQ1BETV9VUF9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgTUNQRE1fVVBfSVJRX0FMTVNUX0ZVTEwgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIE1DUERNX1VQX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAxMSkKKworI2RlZmluZSBNQ1BETV9ET1dOTElOS19JUlFfTUFTSyAgICAgICAgICAgICAgICAweDAwRgorI2RlZmluZSBNQ1BETV9VUExJTktfSVJRX01BU0sgICAgICAgICAgMHhGMDAKKworLyoKKyAqIE1DUERNX0RNQUVOQUJMRSBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETUFfRE5fRU5BQkxFICAgICAgICAgIDB4MQorI2RlZmluZSBETUFfVVBfRU5BQkxFICAgICAgICAgIDB4MgorCisvKgorICogTUNQRE1fQ1RSTCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBQRE1fVVAxX0VOICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQRE1fVVAyX0VOICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBQRE1fVVAzX0VOICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBQRE1fRE4xX0VOICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBQRE1fRE4yX0VOICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBQRE1fRE4zX0VOICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBQRE1fRE40X0VOICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBQRE1fRE41X0VOICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQRE1PVVRGT1JNQVQgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBDTURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFNUQVRVU19JTlQgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFNXX1VQX1JTVCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFNXX0ROX1JTVCAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBETV9VUF9NQVNLICAgICAgICAgICAgMHgwMDcKKyNkZWZpbmUgUERNX0ROX01BU0sgICAgICAgICAgICAweDBGOAorI2RlZmluZSBQRE1fQ01EX01BU0sgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFBETV9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAweDQwMAorCisKKyNkZWZpbmUgUERNT1VURk9STUFUX0xKVVNUICAgICAoMCA8PCA4KQorI2RlZmluZSBQRE1PVVRGT1JNQVRfUkpVU1QgICAgICgxIDw8IDgpCisKKy8qCisgKiBNQ1BETV9GSUZPX0NUUkwgYml0IGZpZWxkcworICovCisKKyNkZWZpbmUgVVBfVEhSRVNfTUFYICAgICAgICAgICAweEYKKyNkZWZpbmUgRE5fVEhSRVNfTUFYICAgICAgICAgICAweEYKKworLyoKKyAqIE1DUERNX0ROX09GRlNFVCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETl9PRlNUX1JYMV9FTiAgICAgICAgIDB4MDAwMQorI2RlZmluZSBETl9PRlNUX1JYMl9FTiAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIEROX09GU1RfUlgxICAgICAgICAgICAgMQorI2RlZmluZSBETl9PRlNUX1JYMiAgICAgICAgICAgIDkKKyNkZWZpbmUgRE5fT0ZTVF9NQVggICAgICAgICAgICAweDFGCisKKyNkZWZpbmUgTUNQRE1fVVBMSU5LICAgICAgICAgICAxCisjZGVmaW5lIE1DUERNX0RPV05MSU5LICAgICAgICAgMgorCitzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rIHsKKyAgICAgICBpbnQgaXJxX21hc2s7CisgICAgICAgaW50IHRocmVzaG9sZDsKKyAgICAgICBpbnQgZm9ybWF0OworICAgICAgIGludCBjaGFubmVsczsKK307CisKK3N0cnVjdCBvbWFwX21jcGRtX3BsYXRmb3JtX2RhdGEgeworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHUxNiBpcnE7Cit9OworCitzdHJ1Y3Qgb21hcF9tY3BkbSB7CisgICAgICAgc3RydWN0IGRldmljZSAqZGV2OworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHZvaWQgX19pb21lbSAqaW9fYmFzZTsKKyAgICAgICB1OCBmcmVlOworICAgICAgIGludCBpcnE7CisKKyAgICAgICBzcGlubG9ja190IGxvY2s7CisgICAgICAgc3RydWN0IG9tYXBfbWNwZG1fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisgICAgICAgc3RydWN0IGNsayAqY2xrOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluazsKKyAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBpcnFfY29tcGxldGlvbjsKKworICAgICAgIGludCBkbl9jaGFubmVsczsKKyAgICAgICBpbnQgdXBfY2hhbm5lbHM7Cit9OworCitleHRlcm4gdm9pZCBvbWFwX21jcGRtX3N0YXJ0KGludCBzdHJlYW0pOworZXh0ZXJuIHZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICp1cGxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICpkb3dubGluayk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fcmVxdWVzdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9zZXRfb2Zmc2V0KGludCBvZmZzZXQxLCBpbnQgb2Zmc2V0Mik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggNmJiYmQyYS4uZTgxNGE5NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtMzksNiArMzksMTQgQEAKIAogI2RlZmluZSBPTUFQX01DQlNQX1JBVEVTCShTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwKQogCisjZGVmaW5lIE9NQVBfTUNCU1BfU09DX1NJTkdMRV9TMTZfRVhUKHhuYW1lLCB4bWluLCB4bWF4LCBcCisJeGhhbmRsZXJfZ2V0LCB4aGFuZGxlcl9wdXQpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IG9tYXBfbWNic3Bfc3RfaW5mb192b2xzdywgXAorCS5nZXQgPSB4aGFuZGxlcl9nZXQsIC5wdXQgPSB4aGFuZGxlcl9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSAmKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCkgXAorCXsubWluID0geG1pbiwgLm1heCA9IHhtYXh9IH0KKwogc3RydWN0IG9tYXBfbWNic3BfZGF0YSB7CiAJdW5zaWduZWQgaW50CQkJYnVzX2lkOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcJcmVnczsKQEAgLTgyLDExICs5MCwxMSBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDFfbWNic3BfcG9ydFtdWzJdID0ge307CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIHN0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfZG1hX3JlcXNbXVsyXSA9IHsKIAl7IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlggfSwKIAl7IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlggfSwKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLCBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYIH0sCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYIH0sCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYIH0sCkBAIC0xMjQsNyArMTMyLDcgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDMwX21jYnNwX3BvcnRbXVsyXSA9IHt9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMzR4eF9tY2JzcF9wb3J0W11bMl0gPSB7CiAJeyBPTUFQMzRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKIAkgIE9NQVAzNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCkBAIC0yODcsNiArMjk1LDggQEAKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uZG1hX3JlcSA9IGRtYTsKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0ucG9ydF9hZGRyID0gcG9ydDsKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uc3luY19tb2RlID0gc3luY19tb2RlOworCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5kYXRhX3R5cGUgPQorCQkJCQkJCU9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CiAJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCiAJaWYgKG1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQpIHsKQEAgLTYzNyw2ICs2NDcsMTM2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKG9tYXBfbWNic3BfZGFpKTsKIAoraW50IG9tYXBfbWNic3Bfc3RfaW5mb192b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbWF4ID0gbWMtPm1heDsKKwlpbnQgbWluID0gbWMtPm1pbjsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gbWluOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1heDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBPTUFQX01DQlNQX1NUX1NFVF9DSEFOTkVMX1ZPTFVNRShpZCwgY2hhbm5lbCkJCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitvbWFwX21jYnNwIyNpZCMjX3NldF9zdF9jaCMjY2hhbm5lbCMjX3ZvbHVtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprYywJXAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1YykJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0JCQkJCVwKKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjLT5wcml2YXRlX3ZhbHVlOwkJXAorCWludCBtYXggPSBtYy0+bWF4OwkJCQkJCVwKKwlpbnQgbWluID0gbWMtPm1pbjsJCQkJCQlcCisJaW50IHZhbCA9IHVjLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpCQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBPTUFQIE1jQlNQIGltcGxlbWVudGF0aW9uIHVzZXMgaW5kZXggdmFsdWVzIDAuLjQgKi8JCVwKKwlyZXR1cm4gb21hcF9zdF9zZXRfY2hnYWluKChpZCktMSwgY2hhbm5lbCwgdmFsKTsJCVwKK30KKworI2RlZmluZSBPTUFQX01DQlNQX1NUX0dFVF9DSEFOTkVMX1ZPTFVNRShpZCwgY2hhbm5lbCkJCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitvbWFwX21jYnNwIyNpZCMjX2dldF9zdF9jaCMjY2hhbm5lbCMjX3ZvbHVtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprYywJXAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1YykJXAorewkJCQkJCQkJCVwKKwlzMTYgY2hnYWluOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG9tYXBfc3RfZ2V0X2NoZ2FpbigoaWQpLTEsIGNoYW5uZWwsICZjaGdhaW4pKQkJXAorCQlyZXR1cm4gLUVBR0FJTjsJCQkJCQlcCisJCQkJCQkJCQlcCisJdWMtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGdhaW47CQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQorCitPTUFQX01DQlNQX1NUX1NFVF9DSEFOTkVMX1ZPTFVNRSgyLCAwKQorT01BUF9NQ0JTUF9TVF9TRVRfQ0hBTk5FTF9WT0xVTUUoMiwgMSkKK09NQVBfTUNCU1BfU1RfU0VUX0NIQU5ORUxfVk9MVU1FKDMsIDApCitPTUFQX01DQlNQX1NUX1NFVF9DSEFOTkVMX1ZPTFVNRSgzLCAxKQorT01BUF9NQ0JTUF9TVF9HRVRfQ0hBTk5FTF9WT0xVTUUoMiwgMCkKK09NQVBfTUNCU1BfU1RfR0VUX0NIQU5ORUxfVk9MVU1FKDIsIDEpCitPTUFQX01DQlNQX1NUX0dFVF9DSEFOTkVMX1ZPTFVNRSgzLCAwKQorT01BUF9NQ0JTUF9TVF9HRVRfQ0hBTk5FTF9WT0xVTUUoMywgMSkKKworc3RhdGljIGludCBvbWFwX21jYnNwX3N0X3B1dF9tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdTggdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWx1ZSA9PSBvbWFwX3N0X2lzX2VuYWJsZWQobWMtPnJlZykpCisJCXJldHVybiAwOworCisJaWYgKHZhbHVlKQorCQlvbWFwX3N0X2VuYWJsZShtYy0+cmVnKTsKKwllbHNlCisJCW9tYXBfc3RfZGlzYWJsZShtYy0+cmVnKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNic3Bfc3RfZ2V0X21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gb21hcF9zdF9pc19lbmFibGVkKG1jLT5yZWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgb21hcF9tY2JzcDJfc3RfY29udHJvbHNbXSA9IHsKKwlTT0NfU0lOR0xFX0VYVCgiTWNCU1AyIFNpZGV0b25lIFN3aXRjaCIsIDEsIDAsIDEsIDAsCisJCQlvbWFwX21jYnNwX3N0X2dldF9tb2RlLCBvbWFwX21jYnNwX3N0X3B1dF9tb2RlKSwKKwlPTUFQX01DQlNQX1NPQ19TSU5HTEVfUzE2X0VYVCgiTWNCU1AyIFNpZGV0b25lIENoYW5uZWwgMCBWb2x1bWUiLAorCQkJCSAgICAgIC0zMjc2OCwgMzI3NjcsCisJCQkJICAgICAgb21hcF9tY2JzcDJfZ2V0X3N0X2NoMF92b2x1bWUsCisJCQkJICAgICAgb21hcF9tY2JzcDJfc2V0X3N0X2NoMF92b2x1bWUpLAorCU9NQVBfTUNCU1BfU09DX1NJTkdMRV9TMTZfRVhUKCJNY0JTUDIgU2lkZXRvbmUgQ2hhbm5lbCAxIFZvbHVtZSIsCisJCQkJICAgICAgLTMyNzY4LCAzMjc2NywKKwkJCQkgICAgICBvbWFwX21jYnNwMl9nZXRfc3RfY2gxX3ZvbHVtZSwKKwkJCQkgICAgICBvbWFwX21jYnNwMl9zZXRfc3RfY2gxX3ZvbHVtZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgb21hcF9tY2JzcDNfc3RfY29udHJvbHNbXSA9IHsKKwlTT0NfU0lOR0xFX0VYVCgiTWNCU1AzIFNpZGV0b25lIFN3aXRjaCIsIDIsIDAsIDEsIDAsCisJCQlvbWFwX21jYnNwX3N0X2dldF9tb2RlLCBvbWFwX21jYnNwX3N0X3B1dF9tb2RlKSwKKwlPTUFQX01DQlNQX1NPQ19TSU5HTEVfUzE2X0VYVCgiTWNCU1AzIFNpZGV0b25lIENoYW5uZWwgMCBWb2x1bWUiLAorCQkJCSAgICAgIC0zMjc2OCwgMzI3NjcsCisJCQkJICAgICAgb21hcF9tY2JzcDNfZ2V0X3N0X2NoMF92b2x1bWUsCisJCQkJICAgICAgb21hcF9tY2JzcDNfc2V0X3N0X2NoMF92b2x1bWUpLAorCU9NQVBfTUNCU1BfU09DX1NJTkdMRV9TMTZfRVhUKCJNY0JTUDMgU2lkZXRvbmUgQ2hhbm5lbCAxIFZvbHVtZSIsCisJCQkJICAgICAgLTMyNzY4LCAzMjc2NywKKwkJCQkgICAgICBvbWFwX21jYnNwM19nZXRfc3RfY2gxX3ZvbHVtZSwKKwkJCQkgICAgICBvbWFwX21jYnNwM19zZXRfc3RfY2gxX3ZvbHVtZSksCit9OworCitpbnQgb21hcF9tY2JzcF9zdF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgbWNic3BfaWQpCit7CisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKG1jYnNwX2lkKSB7CisJY2FzZSAxOiAvKiBNY0JTUCAyICovCisJCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgb21hcF9tY2JzcDJfc3RfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUob21hcF9tY2JzcDJfc3RfY29udHJvbHMpKTsKKwljYXNlIDI6IC8qIE1jQlNQIDMgKi8KKwkJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBvbWFwX21jYnNwM19zdF9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRShvbWFwX21jYnNwM19zdF9jb250cm9scykpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9tY2JzcF9zdF9hZGRfY29udHJvbHMpOworCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfb21hcF9tY2JzcF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhvbWFwX21jYnNwX2RhaSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAppbmRleCA2NDdkMmY5Li42YzM2M2U1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCkBAIC01MCwxMSArNTAsMTMgQEAKICN1bmRlZiAgTlVNX0xJTktTCiAjZGVmaW5lIE5VTV9MSU5LUwkzCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjdW5kZWYgIE5VTV9MSU5LUwogI2RlZmluZSBOVU1fTElOS1MJNQogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY2JzcF9kYWlbTlVNX0xJTktTXTsKIAoraW50IG9tYXBfbWNic3Bfc3RfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IG1jYnNwX2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMTllNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIG9tYXAtbWNwZG0uYyAgLS0gIE9NQVAgQUxTQSBTb0MgREFJIGRyaXZlciB1c2luZyBNY1BETSBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQXV0aG9yOiBNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPgorICogQ29udGFjdDogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiAgICAgICAgICBNYXJnYXJpdGEgT2xheWEgPG1hZ2kub2xheWFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorI2luY2x1ZGUgIm1jcGRtLmgiCisjaW5jbHVkZSAib21hcC1tY3BkbS5oIgorI2luY2x1ZGUgIm9tYXAtcGNtLmgiCisKK3N0cnVjdCBvbWFwX21jcGRtX2RhdGEgeworCXN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmxpbmtzOworCWludCBhY3RpdmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fbGluayBvbWFwX21jcGRtX2xpbmtzW10gPSB7CisJLyogZG93bmxpbmsgKi8KKwl7CisJCS5pcnFfbWFzayA9IE1DUERNX0ROX0lSUV9FTVBUWSB8IE1DUERNX0ROX0lSUV9GVUxMLAorCQkudGhyZXNob2xkID0gMSwKKwkJLmZvcm1hdCA9IFBETU9VVEZPUk1BVF9MSlVTVCwKKwl9LAorCS8qIHVwbGluayAqLworCXsKKwkJLmlycV9tYXNrID0gTUNQRE1fVVBfSVJRX0VNUFRZIHwgTUNQRE1fVVBfSVJRX0ZVTEwsCisJCS50aHJlc2hvbGQgPSAxLAorCQkuZm9ybWF0ID0gUERNT1VURk9STUFUX0xKVVNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fZGF0YSBtY3BkbV9kYXRhID0geworCS5saW5rcyA9IG9tYXBfbWNwZG1fbGlua3MsCisJLmFjdGl2ZSA9IDAsCit9OworCisvKgorICogU3RyZWFtIERNQSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgb21hcF9tY3BkbV9kYWlfZG1hX3BhcmFtc1tdID0geworCXsKKwkJLm5hbWUgPSAiQXVkaW8gcGxheWJhY2siLAorCQkuZG1hX3JlcSA9IE9NQVA0NFhYX0RNQV9NQ1BETV9ETCwKKwkJLmRhdGFfdHlwZSA9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCS5zeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX1BBQ0tFVCwKKwkJLnBhY2tldF9zaXplID0gMTYsCisJCS5wb3J0X2FkZHIgPSBPTUFQNDRYWF9NQ1BETV9MM19CQVNFICsgTUNQRE1fRE5fREFUQSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQXVkaW8gY2FwdHVyZSIsCisJCS5kbWFfcmVxID0gT01BUDQ0WFhfRE1BX01DUERNX1VQLAorCQkuZGF0YV90eXBlID0gT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJLnN5bmNfbW9kZSA9IE9NQVBfRE1BX1NZTkNfUEFDS0VULAorCQkucGFja2V0X3NpemUgPSAxNiwKKwkJLnBvcnRfYWRkciA9IE9NQVA0NFhYX01DUERNX0wzX0JBU0UgKyBNQ1BETV9VUF9EQVRBLAorCX0sCit9OworCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKKwkJZXJyID0gb21hcF9tY3BkbV9yZXF1ZXN0KCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX2RhaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJaWYgKCFjcHVfZGFpLT5hY3RpdmUpCisJCW9tYXBfbWNwZG1fZnJlZSgpOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIW1jcGRtX3ByaXYtPmFjdGl2ZSsrKQorCQkJb21hcF9tY3BkbV9zdGFydChzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoIS0tbWNwZG1fcHJpdi0+YWN0aXZlKQorCQkJb21hcF9tY3BkbV9zdG9wKHN0cmVhbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICptY3BkbV9saW5rcyA9IG1jcGRtX3ByaXYtPmxpbmtzOworCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKKwlpbnQgY2hhbm5lbHMsIGVyciwgbGlua19tYXNrID0gMDsKKworCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNwZG1fZGFpX2RtYV9wYXJhbXNbc3RyZWFtXTsKKworCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJc3dpdGNoIChjaGFubmVscykgeworCWNhc2UgNDoKKwkJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQkvKiB1cCB0byAyIGNoYW5uZWxzIGZvciBjYXB0dXJlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGlua19tYXNrIHw9IDEgPDwgMzsKKwljYXNlIDM6CisJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQkJLyogdXAgdG8gMiBjaGFubmVscyBmb3IgY2FwdHVyZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxpbmtfbWFzayB8PSAxIDw8IDI7CisJY2FzZSAyOgorCQlsaW5rX21hc2sgfD0gMSA8PCAxOworCWNhc2UgMToKKwkJbGlua19tYXNrIHw9IDEgPDwgMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQltY3BkbV9saW5rc1tzdHJlYW1dLmNoYW5uZWxzID0gbGlua19tYXNrIDw8IDM7CisJCWVyciA9IG9tYXBfbWNwZG1fcGxheWJhY2tfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfSBlbHNlIHsKKwkJbWNwZG1fbGlua3Nbc3RyZWFtXS5jaGFubmVscyA9IGxpbmtfbWFzayA8PCAwOworCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBvbWFwX21jcGRtX2RhdGEgKm1jcGRtX3ByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXBfbWNwZG1fbGluayAqbWNwZG1fbGlua3MgPSBtY3BkbV9wcml2LT5saW5rczsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVycjsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSAgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZXJyID0gb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZSgmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJZWxzZQorCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2UoJm1jcGRtX2xpbmtzW3N0cmVhbV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb21hcF9tY3BkbV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gb21hcF9tY3BkbV9kYWlfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBvbWFwX21jcGRtX2RhaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IG9tYXBfbWNwZG1fZGFpX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IG9tYXBfbWNwZG1fZGFpX2h3X2ZyZWUsCit9OworCisjZGVmaW5lIE9NQVBfTUNQRE1fUkFURVMJKFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisjZGVmaW5lIE9NQVBfTUNQRE1fRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jcGRtX2RhaSA9IHsKKwkubmFtZSA9ICJvbWFwLW1jcGRtIiwKKwkuaWQgPSAtMSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNCwKKwkJLnJhdGVzID0gT01BUF9NQ1BETV9SQVRFUywKKwkJLmZvcm1hdHMgPSBPTUFQX01DUERNX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBPTUFQX01DUERNX1JBVEVTLAorCQkuZm9ybWF0cyA9IE9NQVBfTUNQRE1fRk9STUFUUywKKwl9LAorCS5vcHMgPSAmb21hcF9tY3BkbV9kYWlfb3BzLAorCS5wcml2YXRlX2RhdGEgPSAmbWNwZG1fZGF0YSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX21jcGRtX2RhaSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9vbWFwX21jcGRtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9pbml0KHNuZF9vbWFwX21jcGRtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX29tYXBfbWNwZG1fZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9leGl0KHNuZF9vbWFwX21jcGRtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIFBETSBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiODBkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uaApAQCAtMCwwICsxLDI5IEBACisvKgorICogb21hcC1tY3BkbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQ29udGFjdDogTWlzYWVsIExvcGV6IENydXogPHgwMDUyNzI5QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19PTUFQX01DUERNX0hfXworI2RlZmluZSBfX09NQVBfTUNQRE1fSF9fCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY3BkbV9kYWk7CisKKyNlbmRpZgkvKiBFbmQgb2YgX19PTUFQX01DUERNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggOWRiMjc3MC4uODI1ZGIzOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0zNyw3ICszNyw4IEBACiAJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUsCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAJLnBlcmlvZF9ieXRlc19taW4JPSAzMiwKIAkucGVyaW9kX2J5dGVzX21heAk9IDY0ICogMTAyNCwKIAkucGVyaW9kc19taW4JCT0gMiwKQEAgLTE0OSw2ICsxNTAsNyBAQAogCXN0cnVjdCBvbWFwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgKmRtYV9kYXRhID0gcHJ0ZC0+ZG1hX2RhdGE7CiAJc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIGRtYV9wYXJhbXM7CisJaW50IGJ5dGVzOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMTU2LDExICsxNTgsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmZG1hX3BhcmFtcywgMCwgc2l6ZW9mKGRtYV9wYXJhbXMpKTsKLQkvKgotCSAqIE5vdGU6IFJlZ2FyZGxlc3Mgb2YgaW50ZXJmYWNlIGRhdGEgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgT01BUCBNY0JTUAotCSAqIG9yIEVBQyBibG9ja3MsIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5cyBmaXhlZCAxNi1iaXQvc2FtcGxlCi0JICovCi0JZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CisJZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IGRtYV9kYXRhLT5kYXRhX3R5cGU7CiAJZG1hX3BhcmFtcy50cmlnZ2VyCQkJPSBkbWFfZGF0YS0+ZG1hX3JlcTsKIAlkbWFfcGFyYW1zLnN5bmNfbW9kZQkJCT0gZG1hX2RhdGEtPnN5bmNfbW9kZTsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewpAQCAtMTcwLDYgKzE2OCw3IEBACiAJCWRtYV9wYXJhbXMuc3JjX3N0YXJ0CQk9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9wb3J0CQk9IE9NQVBfRE1BX1BPUlRfTVBVSTsKKwkJZG1hX3BhcmFtcy5kc3RfZmkJCT0gZG1hX2RhdGEtPnBhY2tldF9zaXplOwogCX0gZWxzZSB7CiAJCWRtYV9wYXJhbXMuc3JjX2Ftb2RlCQk9IE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5UOwogCQlkbWFfcGFyYW1zLmRzdF9hbW9kZQkJPSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQzsKQEAgLTE3Nyw2ICsxNzYsNyBAQAogCQlkbWFfcGFyYW1zLnNyY19zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBydW50aW1lLT5kbWFfYWRkcjsKIAkJZG1hX3BhcmFtcy5zcmNfcG9ydAkJPSBPTUFQX0RNQV9QT1JUX01QVUk7CisJCWRtYV9wYXJhbXMuc3JjX2ZpCQk9IGRtYV9kYXRhLT5wYWNrZXRfc2l6ZTsKIAl9CiAJLyoKIAkgKiBTZXQgRE1BIHRyYW5zZmVyIGZyYW1lIHNpemUgZXF1YWwgdG8gQUxTQSBwZXJpb2Qgc2l6ZSBhbmQgZnJhbWUKQEAgLTE4NCw3ICsxODQsOCBAQAogCSAqIHdlIGNhbiB0cmFuc2ZlciB0aGUgd2hvbGUgQUxTQSBidWZmZXIgd2l0aCBzaW5nbGUgRE1BIHRyYW5zZmVyIGJ1dAogCSAqIHN0aWxsIGNhbiBnZXQgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5hcnkKIAkgKi8KLQlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSAvIDI7CisJYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBieXRlcyA+PiBkbWFfZGF0YS0+ZGF0YV90eXBlOwogCWRtYV9wYXJhbXMuZnJhbWVfY291bnQJPSBydW50aW1lLT5wZXJpb2RzOwogCW9tYXBfc2V0X2RtYV9wYXJhbXMocHJ0ZC0+ZG1hX2NoLCAmZG1hX3BhcmFtcyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCmluZGV4IDM4YTgyMWQuLmIxOTk3NWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uaApAQCAtMjksOCArMjksMTAgQEAKIAljaGFyCQkqbmFtZTsJCS8qIHN0cmVhbSBpZGVudGlmaWVyICovCiAJaW50CQlkbWFfcmVxOwkvKiBETUEgcmVxdWVzdCBsaW5lICovCiAJdW5zaWduZWQgbG9uZwlwb3J0X2FkZHI7CS8qIHRyYW5zbWl0L3JlY2VpdmUgcmVnaXN0ZXIgKi8KLQlpbnQJCXN5bmNfbW9kZTsJLyogRE1BIHN5bmMgbW9kZSAqLwogCXZvaWQgKCpzZXRfdGhyZXNob2xkKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CisJaW50CQlkYXRhX3R5cGU7CS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCisJaW50CQlzeW5jX21vZGU7CS8qIERNQSBzeW5jIG1vZGUgKi8KKwlpbnQJCXBhY2tldF9zaXplOwkvKiBwYWNrZXQgc2l6ZSBvbmx5IGluIFBBQ0tFVCBtb2RlICovCiB9OwogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gb21hcF9zb2NfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jIGIvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYwppbmRleCBkODhhZDVjLi4yNDBlMDk3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMKQEAgLTExNywxMSArMTE3LDExIEBACiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc19vbWFwM19iZWFnbGUoKSkgewotCQlwcl9kZWJ1ZygiTm90IE9NQVAzIEJlYWdsZSFcbiIpOworCWlmICghKG1hY2hpbmVfaXNfb21hcDNfYmVhZ2xlKCkgfHwgbWFjaGluZV9pc19kZXZraXQ4MDAwKCkpKSB7CisJCXByX2RlYnVnKCJOb3QgT01BUDMgQmVhZ2xlIG9yIERldmtpdDgwMDAhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByX2luZm8oIk9NQVAzIEJlYWdsZSBTb0MgaW5pdFxuIik7CisJcHJfaW5mbygiT01BUDMgQmVhZ2xlL0RldmtpdDgwMDAgU29DIGluaXRcbiIpOwogCiAJb21hcDNiZWFnbGVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghb21hcDNiZWFnbGVfc25kX2RldmljZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCA2ODk4MGMxLi5kZTEwZjc2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNDAsNiArNDEsOCBAQAogCiAjZGVmaW5lIFBSRUZJWCAiQVNvQyBvbWFwM3BhbmRvcmE6ICIKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKm9tYXAzcGFuZG9yYV9kYWNfcmVnOworCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9jbW5faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgZm10KQogewpAQCAtMTA2LDE3ICsxMDksMzMgQEAKIAkJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKIH0KIAorc3RhdGljIGludCBvbWFwM3BhbmRvcmFfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwkvKgorCSAqIFRoZSBQQ00xNzczIERBQyBkYXRhc2hlZXQgcmVxdWlyZXMgMW1zIGRlbGF5IGJldHdlZW4gc3dpdGNoaW5nCisJICogVkNDIHBvd2VyIG9uL29mZiBhbmQgL1BEIHBpbiBoaWdoL2xvdworCSAqLworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCXJlZ3VsYXRvcl9lbmFibGUob21hcDNwYW5kb3JhX2RhY19yZWcpOworCQltZGVsYXkoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCX0gZWxzZSB7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDApOworCQltZGVsYXkoMSk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKG9tYXAzcGFuZG9yYV9kYWNfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewotCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQogCQlncGlvX3NldF92YWx1ZShPTUFQM19QQU5ET1JBX0FNUF9QT1dFUl9HUElPLCAxKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9BTVBfUE9XRVJfR1BJTywgMCk7Ci0JCW1kZWxheSgxKTsKLQkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMCk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAsNyArMTQ5LDkgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUNfRSgiUENNIERBQyIsICJIaUZpIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLAorCQkJICAgMCwgMCwgb21hcDNwYW5kb3JhX2RhY19ldmVudCwKKwkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKIAlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXBsaWZpZXIiLCBTTkRfU09DX05PUE0sCiAJCQkgICAwLCAwLCBOVUxMLCAwLCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQsCiAJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC0zMDYsOCArMzI3LDE4IEBACiAJCWdvdG8gZmFpbDI7CiAJfQogCisJb21hcDNwYW5kb3JhX2RhY19yZWcgPSByZWd1bGF0b3JfZ2V0KCZvbWFwM3BhbmRvcmFfc25kX2RldmljZS0+ZGV2LCAidmNjIik7CisJaWYgKElTX0VSUihvbWFwM3BhbmRvcmFfZGFjX3JlZykpIHsKKwkJcHJfZXJyKFBSRUZJWCAiRmFpbGVkIHRvIGdldCBEQUMgcmVndWxhdG9yIGZyb20gJXM6ICVsZFxuIiwKKwkJCWRldl9uYW1lKCZvbWFwM3BhbmRvcmFfc25kX2RldmljZS0+ZGV2KSwKKwkJCVBUUl9FUlIob21hcDNwYW5kb3JhX2RhY19yZWcpKTsKKwkJZ290byBmYWlsMzsKKwl9CisKIAlyZXR1cm4gMDsKIAorZmFpbDM6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChvbWFwM3BhbmRvcmFfc25kX2RldmljZSk7CiBmYWlsMjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIGZhaWwxOgpAQCAtMzIwLDYgKzM1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwM3BhbmRvcmFfc29jX2V4aXQodm9pZCkKIHsKKwlyZWd1bGF0b3JfcHV0KG9tYXAzcGFuZG9yYV9kYWNfcmVnKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihvbWFwM3BhbmRvcmFfc25kX2RldmljZSk7CiAJZ3Bpb19mcmVlKE9NQVAzX1BBTkRPUkFfQU1QX1BPV0VSX0dQSU8pOwogCWdwaW9fZnJlZShPTUFQM19QQU5ET1JBX0RBQ19QT1dFUl9HUElPKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggM2JkNzcxMi4uZTY5Mzk3ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTEzNSwxMCArMTM1LDExIEBACiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpCi0JCXJldHVybiAwOworCQljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAKIAlzc3Bfc2F2ZV9zdGF0ZSgmcHJpdi0+ZGV2LCAmcHJpdi0+c3RhdGUpOwogCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ2LDEyICsxNDcsMTMgQEAKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KIAljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJc3NwX3Jlc3RvcmVfc3RhdGUoJnByaXYtPmRldiwgJnByaXYtPnN0YXRlKTsKLQlzc3BfZW5hYmxlKCZwcml2LT5kZXYpOworCisJaWYgKGNwdV9kYWktPmFjdGl2ZSkKKwkJc3NwX2VuYWJsZSgmcHJpdi0+ZGV2KTsKKwllbHNlCisJCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYyBiL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYwppbmRleCBhY2ZjZTFjLi43ZTNmNDE2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKKysrIGIvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCkBAIC00MSw3ICs0MSw5IEBACiB9OwogCiAjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzExMjg5NiAweDIyCi0jZGVmaW5lCU1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCAweDIzCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCAweDIzCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzIyNTc5MiAweDMyCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCAweDMzCiAKIHN0YXRpYyB2b2lkIHNldF9tYXg5NDg1X2NsayhjaGFyIGNsaykKIHsKQEAgLTcxLDkgKzczLDE3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAotCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOworCS8qIHNldCBmcmVxIHRvIDAgdG8gZW5hYmxlIGFsbCBwb3NzaWJsZSBjb2RlYyBzYW1wbGUgcmF0ZXMgKi8KKwlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIDAsIDApOworfQogCi0JcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCAxMTI4OTYwMCwgMCk7CitzdGF0aWMgdm9pZCByYXVtZmVsZF9jczQyNzBfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKworCS8qIHNldCBmcmVxIHRvIDAgdG8gZW5hYmxlIGFsbCBwb3NzaWJsZSBjb2RlYyBzYW1wbGUgcmF0ZXMgKi8KKwlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgMCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgcmF1bWZlbGRfY3M0MjcwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTg2LDIwICs5NiwyNCBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTYwMDA6Ci0JY2FzZSA0ODAwMDoKLQljYXNlIDk2MDAwOgotCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKLQkJY2xrID0gMTIyODgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTEwMjU6Ci0JY2FzZSAyMjA1MDoKIAljYXNlIDQ0MTAwOgotCWNhc2UgODgyMDA6CiAJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOwogCQljbGsgPSAxMTI4OTYwMDsKIAkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCk7CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyKTsKKwkJY2xrID0gMjI1NzkyMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yNDU3NjApOworCQljbGsgPSAyNDU3NjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwKQEAgLTEyOCw3ICsxNDIsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIDAsIDEpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCBjbGssIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzcsNiArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyByYXVtZmVsZF9jczQyNzBfb3BzID0gewogCS5zdGFydHVwID0gcmF1bWZlbGRfY3M0MjcwX3N0YXJ0dXAsCisJLnNodXRkb3duID0gcmF1bWZlbGRfY3M0MjcwX3NodXRkb3duLAogCS5od19wYXJhbXMgPSByYXVtZmVsZF9jczQyNzBfaHdfcGFyYW1zLAogfTsKIApAQCAtMTgxLDIwICsxOTYsMjQgQEAKIAlpbnQgZm10LCByZXQgPSAwLCBjbGsgPSAwOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTYwMDA6Ci0JY2FzZSA0ODAwMDoKLQljYXNlIDk2MDAwOgotCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKLQkJY2xrID0gMTIyODgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTEwMjU6Ci0JY2FzZSAyMjA1MDoKIAljYXNlIDQ0MTAwOgotCWNhc2UgODgyMDA6CiAJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOwogCQljbGsgPSAxMTI4OTYwMDsKIAkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCk7CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyKTsKKwkJY2xrID0gMjI1NzkyMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yNDU3NjApOworCQljbGsgPSAyNDU3NjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkY7CkBAIC0yMTcsNyArMjM2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCAwLCAxKTsKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0VYVCwgY2xrLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKaW5kZXggYjQ4OWYxYWUxLi4xNWZlNTdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKQEAgLTI3LDEyICsyNywxMCBAQAogY29uZmlnIFNORF9TM0NfU09DX1BDTQogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfUzNDMjQ0M19TT0NfQUM5NworY29uZmlnIFNORF9TM0NfU09DX0FDOTcKIAl0cmlzdGF0ZQotCXNlbGVjdCBTM0MyNDEwX0RNQQotCXNlbGVjdCBBQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCi0JCisKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBORU8xOTczIC0gV004NzUzIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfTkVPMTk3M19HVEEwMQpAQCAtNzEsOCArNjksMTAgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzI0NDMKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQzCiAJICB3aXRoIHRoZSBXTTk3MTAuCkBAIC04MCw4ICs4MCwxMCBAQAogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIExOMjQ0MFNCQyAtIEFMQzY1MCIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGxuMjQ0MHNiYwogCSAgd2l0aCB0aGUgQUxDNjUwLgpAQCAtMTExLDMgKzExMywxMSBAQAogCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1NJTVRFQworCitjb25maWcgU05EX1NPQ19TTURLX1dNOTcxMworCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBTTURLIHdpdGggV005NzEzIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzY0MTAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MTMKKwlzZWxlY3QgU05EX1MzQ19TT0NfQUM5NworCWhlbHAKKwkgIFNhdCBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIFNNREsuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCmluZGV4IGI3NDQ2NTcuLmRmMDcxYTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCkBAIC0zLDEzICszLDEzIEBACiBzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDEyLWkycy1vYmpzIDo9IHMzYzI0MTItaTJzLm8KIHNuZC1zb2MtczNjNjR4eC1pMnMtb2JqcyA6PSBzM2M2NHh4LWkycy5vCi1zbmQtc29jLXMzYzI0NDMtYWM5Ny1vYmpzIDo9IHMzYzI0NDMtYWM5Ny5vCitzbmQtc29jLXMzYy1hYzk3LW9ianMgOj0gczNjLWFjOTcubwogc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCiBzbmQtc29jLXMzYy1wY20tb2JqcyA6PSBzM2MtcGNtLm8KIAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQykgKz0gc25kLXNvYy1zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjQ0M19TT0NfQUM5NykgKz0gc25kLXNvYy1zM2MyNDQzLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TM0NfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNDEyX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjQxMi1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjNjR4eC1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBzbmQtc29jLXMzYy1pMnMtdjIubwpAQCAtMjYsNiArMjYsNyBAQAogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy1oZXJtZXMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlY19oZXJtZXMubwogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLm8KIHNuZC1zb2Mtc21kazY0eHgtd204NTgwLW9ianMgOj0gc21kazY0eHhfd204NTgwLm8KK3NuZC1zb2Mtc21kay13bTk3MTMtb2JqcyA6PSBzbWRrX3dtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCkBAIC0zNyw0ICszOCw0IEBACiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQ19IRVJNRVMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfV004NTgwKSArPSBzbmQtc29jLXNtZGs2NHh4LXdtODU4MC5vCi0KK29iai0kKENPTkZJR19TTkRfU09DX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYwppbmRleCBkMDBkMzU5Li5mZmE5NTRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9sbjI0NDBzYmNfYWxjNjUwLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbG4yNDQwc2JjX2FsYzY1MC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgogI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBsbjI0NDBzYmM7CiAKQEAgLTMzLDcgKzMzLDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkuY3B1X2RhaSA9ICZzM2MyNDQzX2FjOTdfZGFpWzBdLAorCS5jcHVfZGFpID0gJnMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfUENNXSwKIAkuY29kZWNfZGFpID0gJmFjOTdfZGFpLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThlZDlkNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKQEAgLTAsMCArMSw1MTggQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBBQzk3IENvbnRyb2xsZXIgZHJpdmVyCisgKiAJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAorICogCUF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICogCUNyZWRpdHM6IEdyYWVtZSBHcmVnb3J5LCBTZWFuIENob2kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCisKKyNkZWZpbmUgQUNfQ01EX0FERFIoeCkgKHggPDwgMTYpCisjZGVmaW5lIEFDX0NNRF9EQVRBKHgpICh4ICYgMHhmZmZmKQorCitzdHJ1Y3QgczNjX2FjOTdfaW5mbyB7CisJdW5zaWduZWQgICAgICAgICAgIHN0YXRlOworCXN0cnVjdCBjbGsgICAgICAgICAqYWM5N19jbGs7CisJdm9pZCBfX2lvbWVtCSAgICpyZWdzOworCXN0cnVjdCBtdXRleCAgICAgICBsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uICBkb25lOworfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2FjOTdfaW5mbyBzM2NfYWM5NzsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lID0gIkFDOTcgUENNT3V0IgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUgPSAiQUM5NyBQQ01JbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzY19kbWFfY2xpZW50X21pY2luID0geworCS5uYW1lID0gIkFDOTcgTWljSW4iCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9vdXQgPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfb3V0LAorCS5kbWFfc2l6ZQk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9pbiA9IHsKKwkuY2xpZW50CQk9ICZzM2NfZG1hX2NsaWVudF9pbiwKKwkuZG1hX3NpemUJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2NfYWM5N19taWNfaW4gPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfbWljaW4sCisJLmRtYV9zaXplCT0gNCwKK307CisKK3N0YXRpYyB2b2lkIHMzY19hYzk3X2FjdGl2YXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgYWNfZ2xiY3RybCwgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9UUkFOU0ZFUkRBVEFFTkFCTEU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIGFjdGl2YXRlISIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgczNjX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXUzMiBhY19nbGJjdHJsLCBhY19jb2RlY19jbWQ7CisJdTMyIHN0YXQsIGFkZHIsIGRhdGE7CisKKwltdXRleF9sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3X2FjdGl2YXRlKGFjOTcpOworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kID0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQgfCBBQ19DTURfQUREUihyZWcpOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJdWRlbGF5KDUwKTsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnMzY19hYzk3LmRvbmUsIEhaKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJBQzk3OiBVbmFibGUgdG8gcmVhZCEiKTsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfU1RBVCk7CisJYWRkciA9IChzdGF0ID4+IDE2KSAmIDB4N2Y7CisJZGF0YSA9IChzdGF0ICYgMHhmZmZmKTsKKworCWlmIChhZGRyICE9IHJlZykKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCByZXAgYWRkciA9ICUwMnhcbiIsIHJlZywgYWRkcik7CisKKwltdXRleF91bmxvY2soJnMzY19hYzk3LmxvY2spOworCisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClkYXRhOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2NvZGVjX2NtZDsKKworCW11dGV4X2xvY2soJnMzY19hYzk3LmxvY2spOworCisJczNjX2FjOTdfYWN0aXZhdGUoYWM5Nyk7CisKKwlJTklUX0NPTVBMRVRJT04oczNjX2FjOTcuZG9uZSk7CisKKwlhY19jb2RlY19jbWQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKwlhY19jb2RlY19jbWQgPSBBQ19DTURfQUREUihyZWcpIHwgQUNfQ01EX0RBVEEodmFsKTsKKwl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKworCXVkZWxheSg1MCk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIHdyaXRlISIpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kIHw9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJbXV0ZXhfdW5sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgczNjX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfQ09MRFJFU0VULAorCQkJczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCXdyaXRlbCgwLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfV0FSTVJFU0VULCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworCisJd3JpdGVsKDAsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlzM2NfYWM5N19hY3RpdmF0ZShhYzk3KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHMzY19hYzk3X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2dsYnN0YXQ7CisKKwlhY19nbGJzdGF0ID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQlNUQVQpOworCisJaWYgKGFjX2dsYnN0YXQgJiBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFkpIHsKKworCQlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwkJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCQljb21wbGV0ZSgmczNjX2FjOTcuZG9uZSk7CisJfQorCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsIHw9ICgxPDwzMCk7IC8qIENsZWFyIGludGVycnVwdCAqLworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKKwkucmVhZCAgICAgICA9IHMzY19hYzk3X3JlYWQsCisJLndyaXRlICAgICAgPSBzM2NfYWM5N193cml0ZSwKKwkud2FybV9yZXNldCA9IHMzY19hYzk3X3dhcm1fcmVzZXQsCisJLnJlc2V0ICAgICAgPSBzM2NfYWM5N19jb2xkX3Jlc2V0LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CisKK3N0YXRpYyBpbnQgczNjX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjX2FjOTdfcGNtX291dDsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X3BjbV9pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJdTMyIGFjX2dsYmN0cmw7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKKwkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fTUFTSzsKKwllbHNlCisJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fTUFTSzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9ETUE7CisJCWVsc2UKKwkJCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9ETUE7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWJyZWFrOworCX0KKworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X21pY19pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X21pY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1MzIgYWNfZ2xiY3RybDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQorCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9NQVNLOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX01JQ0lOVE1fRE1BOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlicmVhazsKKwl9CisKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzY19hYzk3X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzY19hYzk3X2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2NfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjX2FjOTdfaHdfbWljX3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X21pY190cmlnZ2VyLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHMzY19hYzk3X2RhaVtdID0geworCVtTM0NfQUM5N19EQUlfUENNXSA9IHsKKwkJLm5hbWUgPQkiczNjLWFjOTciLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfUENNLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19kYWlfb3BzLAorCX0sCisJW1MzQ19BQzk3X0RBSV9NSUNdID0geworCQkubmFtZSA9ICJzM2MtYWM5Ny1taWMiLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfTUlDLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBNaWMgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19taWNfZGFpX29wcywKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hYzk3X2RhaSk7CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHMzY19hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzLCAqZG1hbWljX3JlcywgKmlycV9yZXM7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqYWM5N19wZGF0YTsKKwlpbnQgcmV0OworCisJYWM5N19wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghYWM5N19wZGF0YSB8fCAhYWM5N19wZGF0YS0+Y2ZnX2dwaW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2ZnX2dwaW8gY2FsbGJhY2sgbm90IHByb3ZpZGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCisJZG1hdHhfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwlpZiAoIWRtYXR4X3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctVFggZG1hIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlkbWFyeF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmICghZG1hcnhfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1SWCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYW1pY19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDIpOworCWlmICghZG1hbWljX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctTUlDIGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW1fcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgcmVnaXN0ZXIgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBQzk3IElSUSBub3QgcHJvdmlkZWQhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKG1lbV9yZXMpLCAiczNjLWFjOTciKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCByZWdpc3RlciByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXMzY19hYzk3X3BjbV9vdXQuY2hhbm5lbCA9IGRtYXR4X3Jlcy0+c3RhcnQ7CisJczNjX2FjOTdfcGNtX291dC5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfcGNtX2luLmNoYW5uZWwgPSBkbWFyeF9yZXMtPnN0YXJ0OworCXMzY19hYzk3X3BjbV9pbi5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfbWljX2luLmNoYW5uZWwgPSBkbWFtaWNfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19taWNfaW4uZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIFMzQ19BQzk3X01JQ19EQVRBOworCisJaW5pdF9jb21wbGV0aW9uKCZzM2NfYWM5Ny5kb25lKTsKKwltdXRleF9pbml0KCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3LnJlZ3MgPSBpb3JlbWFwKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKwlpZiAoczNjX2FjOTcucmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnIxOworCX0KKworCXMzY19hYzk3LmFjOTdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWM5NyIpOworCWlmIChJU19FUlIoczNjX2FjOTcuYWM5N19jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInMzYy1hYzk3IGZhaWxlZCB0byBnZXQgYWM5N19jbG9ja1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMjsKKwl9CisJY2xrX2VuYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpZiAoYWM5N19wZGF0YS0+Y2ZnX2dwaW8ocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBncGlvXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycV9yZXMtPnN0YXJ0LCBzM2NfYWM5N19pcnEsCisJCQkJCUlSUUZfRElTQUJMRUQsICJBQzk3IiwgTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0uZGV2ID0gJnBkZXYtPmRldjsKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX01JQ10uZGV2ID0gJnBkZXYtPmRldjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2NfYWM5N19kYWksIEFSUkFZX1NJWkUoczNjX2FjOTdfZGFpKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCisJcmV0dXJuIDA7CisKK2VycjU6CisJZnJlZV9pcnEoaXJxX3Jlcy0+c3RhcnQsIE5VTEwpOworZXJyNDoKK2VycjM6CisJY2xrX2Rpc2FibGUoczNjX2FjOTcuYWM5N19jbGspOworCWNsa19wdXQoczNjX2FjOTcuYWM5N19jbGspOworZXJyMjoKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworZXJyMToKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgczNjX2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqaXJxX3JlczsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzY19hYzk3X2RhaSwgQVJSQVlfU0laRShzM2NfYWM5N19kYWkpKTsKKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChpcnFfcmVzKQorCQlmcmVlX2lycShpcnFfcmVzLT5zdGFydCwgTlVMTCk7CisKKwljbGtfZGlzYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisJY2xrX3B1dChzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKG1lbV9yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2FjOTdfZHJpdmVyID0geworCS5wcm9iZSAgPSBzM2NfYWM5N19wcm9iZSwKKwkucmVtb3ZlID0gczNjX2FjOTdfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInMzYy1hYzk3IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzY19hYzk3X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NfYWM5N19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoczNjX2FjOTdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2NfYWM5N19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY19hYzk3X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzM2NfYWM5N19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoLCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIFNvQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4MTk4MwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKQEAgLTAsMCArMSwyMyBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaAorICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDIEFDOTcgQ29udHJvbGxlciBkcml2ZXIKKyAqIAlFdm9sdmVkIGZyb20gczNjMjQ0My1hYzk3LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKiAJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKiAJQ3JlZGl0czogR3JhZW1lIEdyZWdvcnksIFNlYW4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1MzQ19BQzk3X0hfCisjZGVmaW5lIF9fUzNDX0FDOTdfSF8KKworI2RlZmluZSBTM0NfQUM5N19EQUlfUENNIDAKKyNkZWZpbmUgUzNDX0FDOTdfREFJX01JQyAxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjX2FjOTdfZGFpW107CisKKyNlbmRpZiAvKiBfX1MzQ19BQzk3X0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMKaW5kZXggOWU2MWE3Yy4uYTk4ZjQwYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYwpAQCAtMjI5LDggKzIyOSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY20tPmxvY2ssIGZsYWdzKTsKIAotCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgXAotCQkJCVNDTEtfRElWPSVkIFNZTkNfRElWPSVkXG4iLAorCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgU0NMS19ESVY9JWQgU1lOQ19ESVY9JWRcbiIsCiAJCQkJY2xrX2dldF9yYXRlKGNsayksIHBjbS0+c2Nsa19wZXJfZnMsCiAJCQkJc2Nsa19kaXYsIHN5bmNfZGl2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5MWUzYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vKgotICogczNjMjQ0My1hYzk3LmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgotICoKLSAqIChjKSAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCBTZWFuIENob2kgPHNoNDI4LmNob2lAc2Ftc3VuZy5jb20+Ci0gKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0KLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjMjR4eC1hYzk3LmgiCi0KLXN0cnVjdCBzM2MyNHh4X2FjOTdfaW5mbyB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWdzOwotCXN0cnVjdCBjbGsJKmFjOTdfY2xrOwotfTsKLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9hYzk3X2luZm8gczNjMjR4eF9hYzk3OwotCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGFjOTdfY29tcGxldGlvbik7Ci1zdGF0aWMgdTMyIGNvZGVjX3JlYWR5Owotc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHMzYzI0NDNfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKLQl1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQl1MzIgc3RhdCwgYWRkciwgZGF0YTsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEIHwgQUNfQ01EX0FERFIocmVnKTsKLQl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0KLQl1ZGVsYXkoNTApOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFjOTdfY29tcGxldGlvbik7Ci0KLQlzdGF0ID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19TVEFUKTsKLQlhZGRyID0gKHN0YXQgPj4gMTYpICYgMHg3ZjsKLQlkYXRhID0gKHN0YXQgJiAweGZmZmYpOwotCi0JaWYgKGFkZHIgIT0gcmVnKQotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCIKLQkJCQkiIHJlcCBhZGRyID0gJTAyeFxuIiwgcmVnLCBhZGRyKTsKLQotCW11dGV4X3VubG9jaygmYWM5N19tdXRleCk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKLQl1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IEFDX0NNRF9BRERSKHJlZykgfCBBQ19DTURfREFUQSh2YWwpOwotCXdyaXRlbChhY19jb2RlY19jbWQsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQotCXVkZWxheSg1MCk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmYWM5N19jb21wbGV0aW9uKTsKLQotCWFjX2NvZGVjX2NtZCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQlhY19jb2RlY19jbWQgfD0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQ7Ci0Jd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCi0JbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKLQotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9XQVJNUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9DT0xEUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCA9IFMzQ19BQzk3X0dMQkNUUkxfQUNMSU5LT047Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1RSQU5TRkVSREFUQUVOQUJMRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BIHwKLQkJUzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX0RNQSB8IFMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9ETUE7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzM2MyNDQzX2FjOTdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiBhY19nbGJjdHJsOwotCi0Jc3RhdHVzID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJTVEFUKSAmIGNvZGVjX3JlYWR5OwotCi0JaWYgKHN0YXR1cykgewotCQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7Ci0JCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCQljb21wbGV0ZSgmYWM5N19jb21wbGV0aW9uKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBzb2NfYWM5N19vcHMgPSB7Ci0JLnJlYWQJPSBzM2MyNDQzX2FjOTdfcmVhZCwKLQkud3JpdGUJPSBzM2MyNDQzX2FjOTdfd3JpdGUsCi0JLndhcm1fcmVzZXQJPSBzM2MyNDQzX2FjOTdfd2FybV9yZXNldCwKLQkucmVzZXQJPSBzM2MyNDQzX2FjOTdfY29sZF9yZXNldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9vdXQgPSB7Ci0JLm5hbWUgPSAiQUM5NyBQQ00gU3RlcmVvIG91dCIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9pbiA9IHsKLQkubmFtZSA9ICJBQzk3IFBDTSBTdGVyZW8gaW4iCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNDQzX2RtYV9jbGllbnRfbWljaW4gPSB7Ci0JLm5hbWUgPSAiQUM5NyBNaWMgTW9ubyBpbiIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0ID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9vdXQsCi0JLmNoYW5uZWwJPSBETUFDSF9QQ01fT1VULAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X1BDTV9EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0NDNfYWM5N19wY21fc3RlcmVvX2luID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9pbiwKLQkuY2hhbm5lbAk9IERNQUNIX1BDTV9JTiwKLQkuZG1hX2FkZHIJPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19QQ01fREFUQSwKLQkuZG1hX3NpemUJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2MyNDQzX2FjOTdfbWljX21vbm9faW4gPSB7Ci0JLmNsaWVudAkJPSAmczNjMjQ0M19kbWFfY2xpZW50X21pY2luLAotCS5jaGFubmVsCT0gRE1BQ0hfTUlDX0lOLAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X01JQ19EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JaW50IHJldDsKLQl1MzIgYWNfZ2xiY3RybDsKLQotCXMzYzI0eHhfYWM5Ny5yZWdzID0gaW9yZW1hcChTM0MyNDQwX1BBX0FDOTcsIDB4MTAwKTsKLQlpZiAoczNjMjR4eF9hYzk3LnJlZ3MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXMzYzI0eHhfYWM5Ny5hYzk3X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImFjOTciKTsKLQlpZiAoczNjMjR4eF9hYzk3LmFjOTdfY2xrID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzM2MyNDQzLWFjOTcgZmFpbGVkIHRvIGdldCBhYzk3X2Nsb2NrXG4iKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQljbGtfZW5hYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0KLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMCwgUzNDMjQ0M19HUEUwX0FDX25SRVNFVCk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEsIFMzQzI0NDNfR1BFMV9BQ19TWU5DKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMiwgUzNDMjQ0M19HUEUyX0FDX0JJVENMSyk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTMsIFMzQzI0NDNfR1BFM19BQ19TREkpOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU0LCBTM0MyNDQzX0dQRTRfQUNfU0RPKTsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0NPTERSRVNFVDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gMDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfVFJBTlNGRVJEQVRBRU5BQkxFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1MzQzI0NHhfQUM5NywgczNjMjQ0M19hYzk3X2lycSwKLQkJSVJRRl9ESVNBQkxFRCwgIkFDOTciLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7Ci0JCWNsa19kaXNhYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0JCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlmcmVlX2lycShJUlFfUzNDMjQ0eF9BQzk3LCBOVUxMKTsKLQljbGtfZGlzYWJsZShzM2MyNHh4X2FjOTcuYWM5N19jbGspOwotCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQlpb3VubWFwKHMzYzI0eHhfYWM5Ny5yZWdzKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0OwotCWVsc2UKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9faW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0JaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQotCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQotCQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQllbHNlCi0JCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKLQkJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9NQVNLOwotCQllbHNlCi0JCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTU9VVFRNX01BU0s7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gLUVOT0RFVjsKLQllbHNlCi0JCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0NDNfYWM5N19taWNfbW9ub19pbjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKLQkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX01BU0s7Ci0JfQotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgczNjMjQ0M19BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfFwKLQkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKLQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X2RhaV9vcHMgPSB7Ci0JLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfdHJpZ2dlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19taWNfZGFpX29wcyA9IHsKLQkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsCi19OwotCi1zdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQ0M19hYzk3X2RhaVtdID0gewotewotCS5uYW1lID0gInMzYzI0NDMtYWM5NyIsCi0JLmlkID0gMCwKLQkuYWM5N19jb250cm9sID0gMSwKLQkucHJvYmUgPSBzM2MyNDQzX2FjOTdfcHJvYmUsCi0JLnJlbW92ZSA9IHMzYzI0NDNfYWM5N19yZW1vdmUsCi0JLnBsYXliYWNrID0gewotCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCi0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJBQzk3IENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X2RhaV9vcHMsCi19LAotewotCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCi0JLmlkID0gMSwKLQkuYWM5N19jb250cm9sID0gMSwKLQkuY2FwdHVyZSA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgTWljIENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDEsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X21pY19kYWlfb3BzLAotfSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2MyNDQzX2FjOTdfZGFpKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDNfYWM5N19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2MyNDQzX2FjOTdfZGFpLAotCQkJCSAgICAgQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfaW5pdChzM2MyNDQzX2FjOTdfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDQzX2FjOTdfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzYzI0NDNfYWM5N19kYWksCi0JCQkJQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfZXhpdChzM2MyNDQzX2FjOTdfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiR3JhZW1lIEdyZWdvcnkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIHMzYzI0NDMgY2hpcCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1hYzk3LmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2Zjk0MS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBzM2MyNHh4LWFjOTcuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCi0gKgotICogKGMpIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKLSAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFJldmlzaW9uIGhpc3RvcnkKLSAqICAgIDEwdGggTm92IDIwMDYgICBJbml0aWFsIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBTM0MyNFhYQUM5N19IXwotI2RlZmluZSBTM0MyNFhYQUM5N19IXwotCi0jZGVmaW5lIEFDX0NNRF9BRERSKHgpICh4IDw8IDE2KQotI2RlZmluZSBBQ19DTURfREFUQSh4KSAoeCAmIDB4ZmZmZikKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW107Ci0KLSNlbmRpZiAvKlMzQzI0WFhBQzk3X0hfKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IGNjN2VkYjUuLjkzZWQzYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMTUsMTYgKzE1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgpAQCAtMzgsNiArMzIsMTEgQEAKICNpbmNsdWRlICJzM2MtZG1hLmgiCiAjaW5jbHVkZSAiczNjNjR4eC1pMnMuaCIKIAorLyogVGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gbWF4aW11bSBvZiB0aGUgdG90YWwgbnVtYmVyCisgKiBvZiBJMlN2MyBjb250cm9sbGVycyB0aGF0IGFueSBzdXBwb3J0ZWQgU29DIGhhcy4KKyAqLworI2RlZmluZSBNQVhfSTJTVjMJMgorCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpAQCAtNDYsMzcgKzQ1LDEyIEBACiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFsyXSA9IHsKLQlbMF0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9PVVQsCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCi0JCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhELAotCQkuZG1hX3NpemUJPSA0LAotCX0sCi0JWzFdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfT1VULAotCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbTUFYX0kyU1YzXTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltNQVhfSTJTVjNdOworc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1tNQVhfSTJTVjNdOwogCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bMl0gPSB7Ci0JWzBdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfSU4sCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKLQkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQsCi0JCS5kbWFfc2l6ZQk9IDQsCi0JfSwKLQlbMV0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9JTiwKLQkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1JYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1syXTsKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbTUFYX0kyU1YzXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKQEAgLTE2OSw1NSArMTQzLDEzIEBACiAJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKIH07CiAKLXN0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJzM2M2NHh4LWkycyIsCi0JCS5pZAkJPSAwLAotCQkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCi0JCS5wbGF5YmFjayA9IHsKLQkJCS5jaGFubmVsc19taW4JPSAyLAotCQkJLmNoYW5uZWxzX21heAk9IDIsCi0JCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCX0sCi0JCS5jYXB0dXJlID0gewotCQkJIC5jaGFubmVsc19taW4JPSAyLAotCQkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkJIC5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJCSAuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCSB9LAotCQkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCi0JCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAotCX0sCi0JewotCQkubmFtZQkJPSAiczNjNjR4eC1pMnMiLAotCQkuaWQJCT0gMSwKLQkJLnByb2JlCQk9IHMzYzY0eHhfaTJzX3Byb2JlLAotCQkucGxheWJhY2sgPSB7Ci0JCQkuY2hhbm5lbHNfbWluCT0gMiwKLQkJCS5jaGFubmVsc19tYXgJPSAyLAotCQkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAotCQkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQl9LAotCQkuY2FwdHVyZSA9IHsKLQkJCSAuY2hhbm5lbHNfbWluCT0gMiwKLQkJCSAuY2hhbm5lbHNfbWF4CT0gMiwKLQkJCSAucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkgLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQkgfSwKLQkJLm9wcyA9ICZzM2M2NHh4X2kyc19kYWlfb3BzLAotCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKLQl9LAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7Ci0KIHN0YXRpYyBfX2RldmluaXQgaW50IHMzYzY0eHhfaWlzX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpOwogCWludCByZXQ7CiAKLQlpZiAocGRldi0+aWQgPj0gQVJSQVlfU0laRShzM2M2NHh4X2kycykpIHsKKwlpZiAocGRldi0+aWQgPj0gTUFYX0kyU1YzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjUsMTAgKzE1Nyw0MCBAQAogCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CiAJZGFpID0gJnMzYzY0eHhfaTJzX2RhaVtwZGV2LT5pZF07CiAJZGFpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhaS0+bmFtZSA9ICJzM2M2NHh4LWkycyI7CisJZGFpLT5pZCA9IHBkZXYtPmlkOworCWRhaS0+c3ltbWV0cmljX3JhdGVzID0gMTsKKwlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbiA9IDI7CisJZGFpLT5wbGF5YmFjay5jaGFubmVsc19tYXggPSAyOworCWRhaS0+cGxheWJhY2sucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUzsKKwlkYWktPnBsYXliYWNrLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4gPSAyOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19tYXggPSAyOworCWRhaS0+Y2FwdHVyZS5yYXRlcyA9IFMzQzY0WFhfSTJTX1JBVEVTOworCWRhaS0+Y2FwdHVyZS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUzsKKwlkYWktPnByb2JlID0gczNjNjR4eF9pMnNfcHJvYmU7CisJZGFpLT5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wczsKIAogCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CiAJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOwogCisJaWYgKHBkZXYtPmlkID09IDApIHsKKwkJaTJzLT5kbWFfY2FwdHVyZS0+Y2hhbm5lbCA9IERNQUNIX0kyUzBfSU47CisJCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9hZGRyID0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5jaGFubmVsID0gRE1BQ0hfSTJTMF9PVVQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhEOworCX0gZWxzZSB7CisJCWkycy0+ZG1hX2NhcHR1cmUtPmNoYW5uZWwgPSBETUFDSF9JMlMxX0lOOworCQlpMnMtPmRtYV9jYXB0dXJlLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhEOworCQlpMnMtPmRtYV9wbGF5YmFjay0+Y2hhbm5lbCA9IERNQUNIX0kyUzFfT1VUOworCQlpMnMtPmRtYV9wbGF5YmFjay0+ZG1hX2FkZHIgPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRDsKKwl9CisKKwlpMnMtPmRtYV9jYXB0dXJlLT5jbGllbnQgPSAmczNjNjR4eF9kbWFfY2xpZW50X2luOworCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9zaXplID0gNDsKKwlpMnMtPmRtYV9wbGF5YmFjay0+Y2xpZW50ID0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQ7CisJaTJzLT5kbWFfcGxheWJhY2stPmRtYV9zaXplID0gNDsKKwogCWkycy0+aWlzX2NjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhdWRpby1idXMiKTsKIAlpZiAoSVNfRVJSKGkycy0+aWlzX2NjbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jIGIvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKaW5kZXggMTJiNzgzYjEuLjM2MjI1ODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgogI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrMjQ0MzsKIApAQCAtMjksNyArMjksNyBAQAogewogCS5uYW1lID0gIkFDOTciLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpID0gJnMzYzI0NDNfYWM5N19kYWlbMF0sCisJLmNwdV9kYWkgPSAmczNjX2FjOTdfZGFpW1MzQ19BQzk3X0RBSV9QQ01dLAogCS5jb2RlY19kYWkgPSAmYWM5N19kYWksCiB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZmQzOWYzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvc21ka193bTk3MTMuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogc21ka193bTk3MTMuYyAgLS0gIFNvQyBhdWRpbyBmb3IgU01ESworICoKKyAqIENvcHlyaWdodCAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZC4KKyAqIEF1dGhvcjogSmFzd2luZGVyIFNpbmdoIEJyYXIgPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMy5oIgorI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrOworCisvKgorICogRGVmYXVsdCBDRkcgc3dpdGNoIHNldHRpbmdzIHRvIHVzZSB0aGlzIGRyaXZlcjoKKyAqCisgKiAgIFNNREs2NDEwOiBTZXQgQ0ZHMSAxLTMgT24sIENGRzIgMS00IE9mZgorICovCisKKy8qCisgUGxheWJhY2sgKEhlYWRQaG9uZSk6LQorCSQgYW1peGVyIHNzZXQgJ0hlYWRwaG9uZScgdW5tdXRlCisJJCBhbWl4ZXIgc3NldCAnUmlnaHQgSGVhZHBob25lIE91dCBNdXgnICdIZWFkcGhvbmUnCisJJCBhbWl4ZXIgc3NldCAnTGVmdCBIZWFkcGhvbmUgT3V0IE11eCcgJ0hlYWRwaG9uZScKKwkkIGFtaXhlciBzc2V0ICdSaWdodCBIUCBNaXhlciBQQ00nIHVubXV0ZQorCSQgYW1peGVyIHNzZXQgJ0xlZnQgSFAgTWl4ZXIgUENNJyB1bm11dGUKKworIENhcHR1cmUgKExpbmVJbik6LQorCSQgYW1peGVyIHNzZXQgJ1JpZ2h0IENhcHR1cmUgU291cmNlJyAnTGluZScKKwkkIGFtaXhlciBzc2V0ICdMZWZ0IENhcHR1cmUgU291cmNlJyAnTGluZScKKyovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzbWRrX2RhaSA9IHsKKwkubmFtZSA9ICJBQzk3IiwKKwkuc3RyZWFtX25hbWUgPSAiQUM5NyBQQ00iLAorCS5jcHVfZGFpID0gJnMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfUENNXSwKKwkuY29kZWNfZGFpID0gJndtOTcxM19kYWlbV005NzEzX0RBSV9BQzk3X0hJRkldLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kayA9IHsKKwkubmFtZSA9ICJTTURLIiwKKwkucGxhdGZvcm0gPSAmczNjMjR4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gJnNtZGtfZGFpLAorCS5udW1fbGlua3MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBzbWRrX3NuZF9hYzk3X2RldmRhdGEgPSB7CisJLmNhcmQgPSAmc21kaywKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzEzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGtfc25kX2FjOTdfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBzbWRrX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc21ka19zbmRfYWM5N19kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXNtZGtfc25kX2FjOTdfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNtZGtfc25kX2FjOTdfZGV2aWNlLAorCQkJICAgICAmc21ka19zbmRfYWM5N19kZXZkYXRhKTsKKwlzbWRrX3NuZF9hYzk3X2RldmRhdGEuZGV2ID0gJnNtZGtfc25kX2FjOTdfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNtZGtfc25kX2FjOTdfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNtZGtfc25kX2FjOTdfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbWRrX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzbWRrX3NuZF9hYzk3X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHNtZGtfaW5pdCk7Cittb2R1bGVfZXhpdChzbWRrX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkphc3dpbmRlciBTaW5naCBCcmFyLCBqYXNzaS5icmFyQHNhbXN1bmcuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNNREsrV005NzEzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCmluZGV4IDllNjk3NjUuLjEwNjY3NDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCkBAIC0yNiw2ICsyNiwxMyBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgRlNJIHNvdW5kIHN1cHBvcnQKIAorY29uZmlnIFNORF9TT0NfU0g0X1NJVQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiAoU1VQRVJIIHx8IEFSQ0hfU0hNT0JJTEUpICYmIEhBVkVfQ0xLCisJc2VsZWN0IERNQV9FTkdJTkUKKwlzZWxlY3QgRE1BREVWSUNFUworCXNlbGVjdCBTSF9ETUFFCisKICMjCiAjIyBCb2FyZHMKICMjCkBAIC00Nyw0ICs1NCwyMCBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIHNvdW5kIHN1cHBvcnQgZm9yIHRoZQogCSAgRlNJIC0gQUs0NjQyIHVuaXQKIAorY29uZmlnIFNORF9GU0lfREE3MjEwCisJYm9vbCAiRlNJLURBNzIxMCBzb3VuZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU05EX1NPQ19TSDRfRlNJCisJc2VsZWN0IFNORF9TT0NfREE3MjEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIHNvdW5kIHN1cHBvcnQgZm9yIHRoZQorCSAgRlNJIC0gREE3MjEwIHVuaXQKKworY29uZmlnIFNORF9TSVVfTUlHT1IKKwl0cmlzdGF0ZSAiU0lVIHNvdW5kIHN1cHBvcnQgb24gTWlnby1SIgorCWRlcGVuZHMgb24gU0hfTUlHT1IKKwlzZWxlY3QgU05EX1NPQ19TSDRfU0lVCisJc2VsZWN0IFNORF9TT0NfV004OTc4CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzb3VuZCBzdXBwb3J0IGZvciB0aGUgU0g3NzIyIE1pZ28tUiBib2FyZAorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUKaW5kZXggYTY5OTc4Ny4uOGE1YTE5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zaC9NYWtlZmlsZQpAQCAtNiwxMyArNiwxOSBAQAogc25kLXNvYy1oYWMtb2Jqcwk6PSBoYWMubwogc25kLXNvYy1zc2ktb2Jqcwk6PSBzc2kubwogc25kLXNvYy1mc2ktb2Jqcwk6PSBmc2kubworc25kLXNvYy1zaXUtb2Jqcwk6PSBzaXVfcGNtLm8gc2l1X2RhaS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TSDRfSEFDKQkrPSBzbmQtc29jLWhhYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TSDRfU1NJKQkrPSBzbmQtc29jLXNzaS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TSDRfRlNJKQkrPSBzbmQtc29jLWZzaS5vCitvYmotJChDT05GSUdfU05EX1NPQ19TSDRfU0lVKQkrPSBzbmQtc29jLXNpdS5vCiAKICMjIGJvYXJkcwogc25kLXNvYy1zaDc3NjAtYWM5Ny1vYmpzCTo9IHNoNzc2MC1hYzk3Lm8KIHNuZC1zb2MtZnNpLWFrNDY0Mi1vYmpzCQk6PSBmc2ktYWs0NjQyLm8KK3NuZC1zb2MtZnNpLWRhNzIxMC1vYmpzCQk6PSBmc2ktZGE3MjEwLm8KK3NuZC1zb2MtbWlnb3Itb2JqcwkJOj0gbWlnb3IubwogCiBvYmotJChDT05GSUdfU05EX1NINzc2MF9BQzk3KQkrPSBzbmQtc29jLXNoNzc2MC1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfRlNJX0FLNDY0MikJKz0gc25kLXNvYy1mc2ktYWs0NjQyLm8KK29iai0kKENPTkZJR19TTkRfRlNJX0RBNzIxMCkJKz0gc25kLXNvYy1mc2ktZGE3MjEwLm8KK29iai0kKENPTkZJR19TTkRfU0lVX01JR09SKQkrPSBzbmQtc29jLW1pZ29yLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjRkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBmc2ktZGE3MjEwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KKyNpbmNsdWRlICIuLi9jb2RlY3MvZGE3MjEwLmgiCisKK3N0YXRpYyBpbnQgZnNpX2RhNzIxMF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY19kYWlfc2V0X2ZtdCgmZGE3MjEwX2RhaSwKKwkJCQkgICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBmc2lfZGE3MjEwX2RhaSA9IHsKKwkubmFtZQkJPSAiREE3MjEwIiwKKwkuc3RyZWFtX25hbWUJPSAiREE3MjEwIiwKKwkuY3B1X2RhaQk9ICZmc2lfc29jX2RhaVsxXSwgLyogRlNJIEIgKi8KKwkuY29kZWNfZGFpCT0gJmRhNzIxMF9kYWksCisJLmluaXQJCT0gZnNpX2RhNzIxMF9pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZnNpX3NvY19jYXJkID0geworCS5uYW1lCQk9ICJGU0kiLAorCS5wbGF0Zm9ybQk9ICZmc2lfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9ICZmc2lfZGE3MjEwX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZnNpX2RhNzIxMF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZnNpX3NvY19jYXJkLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9kYTcyMTAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZnNpX2RhNzIxMF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBmc2lfZGE3MjEwX3NvdW5kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJZnNpX2RhNzIxMF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFmc2lfZGE3MjEwX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZnNpX2RhNzIxMF9zbmRfZGV2aWNlLCAmZnNpX2RhNzIxMF9zbmRfZGV2ZGF0YSk7CisJZnNpX2RhNzIxMF9zbmRfZGV2ZGF0YS5kZXYgPSAmZnNpX2RhNzIxMF9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChmc2lfZGE3MjEwX3NuZF9kZXZpY2UpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoZnNpX2RhNzIxMF9zbmRfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2lfZGE3MjEwX3NvdW5kX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihmc2lfZGE3MjEwX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChmc2lfZGE3MjEwX3NvdW5kX2luaXQpOworbW9kdWxlX2V4aXQoZnNpX2RhNzIxMF9zb3VuZF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEZTSSBEQTI3MTAiKTsKK01PRFVMRV9BVVRIT1IoIkt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCA0MjgxM2I4Li45OTNhYmI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC02Nyw2ICs2Nyw3IEBACiAvKiBET0ZGX1NUICovCiAjZGVmaW5lIEVSUl9PVkVSCTB4MDAwMDAwMTAKICNkZWZpbmUgRVJSX1VOREVSCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1RfRVJSCQkoRVJSX09WRVIgfCBFUlJfVU5ERVIpCiAKIC8qIENMS19SU1QgKi8KICNkZWZpbmUgQl9DTEsJCTB4MDAwMDAwMTAKQEAgLTkyLDYgKzkzLDcgQEAKIHN0cnVjdCBmc2lfcHJpdiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXI7CiAKIAlpbnQgZmlmb19tYXg7CiAJaW50IGNoYW47CkBAIC0xMDgsMTAgKzExMCw5IEBACiAJc3RydWN0IGZzaV9wcml2IGZzaWE7CiAJc3RydWN0IGZzaV9wcml2IGZzaWI7CiAJc3RydWN0IHNoX2ZzaV9wbGF0Zm9ybV9pbmZvICppbmZvOworCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIApAQCAtMTE5LDM1ICsxMjAsMzUgQEAKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IF9fZnNpX3JlZ193cml0ZSh1MzIgcmVnLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIF9fZnNpX3JlZ193cml0ZSh1MzIgcmVnLCB1MzIgZGF0YSkKIHsKIAkvKiB2YWxpZCBkYXRhIGFyZWEgaXMgMjRiaXQgKi8KIAlkYXRhICY9IDB4MDBmZmZmZmY7CiAKLQlyZXR1cm4gY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJX19yYXdfd3JpdGVsKGRhdGEsIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgX19mc2lfcmVnX3JlYWQodTMyIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwocmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwocmVnKTsKIH0KIAotc3RhdGljIGludCBfX2ZzaV9yZWdfbWFza19zZXQodTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgX19mc2lfcmVnX21hc2tfc2V0KHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKIAl1MzIgdmFsID0gX19mc2lfcmVnX3JlYWQocmVnKTsKIAogCXZhbCAmPSB+bWFzazsKIAl2YWwgfD0gZGF0YSAmIG1hc2s7CiAKLQlyZXR1cm4gX19mc2lfcmVnX3dyaXRlKHJlZywgdmFsKTsKKwlfX2ZzaV9yZWdfd3JpdGUocmVnLCB2YWwpOwogfQogCi1zdGF0aWMgaW50IGZzaV9yZWdfd3JpdGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX3JlZ193cml0ZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIGRhdGEpCiB7CiAJaWYgKHJlZyA+IFJFR19FTkQpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCi0JcmV0dXJuIF9fZnNpX3JlZ193cml0ZSgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBkYXRhKTsKKwlfX2ZzaV9yZWdfd3JpdGUoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgZGF0YSk7CiB9CiAKIHN0YXRpYyB1MzIgZnNpX3JlZ19yZWFkKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnKQpAQCAtMTU4LDM5ICsxNTksNTUgQEAKIAlyZXR1cm4gX19mc2lfcmVnX3JlYWQoKHUzMikoZnNpLT5iYXNlICsgcmVnKSk7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX3JlZ19tYXNrX3NldChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX3JlZ19tYXNrX3NldChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQogewogCWlmIChyZWcgPiBSRUdfRU5EKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CisJX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIG1hc2ssIGRhdGEpOwogfQogCi1zdGF0aWMgaW50IGZzaV9tYXN0ZXJfd3JpdGUodTMyIHJlZywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBmc2lfbWFzdGVyX3dyaXRlKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsIHUzMiByZWcsIHUzMiBkYXRhKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8CiAJICAgIChyZWcgPiBNUkVHX0VORCkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCi0JcmV0dXJuIF9fZnNpX3JlZ193cml0ZSgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBkYXRhKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisJX19mc2lfcmVnX3dyaXRlKCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZyksIGRhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdTMyIGZzaV9tYXN0ZXJfcmVhZCh1MzIgcmVnKQorc3RhdGljIHUzMiBmc2lfbWFzdGVyX3JlYWQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciwgdTMyIHJlZykKIHsKKwl1MzIgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8CiAJICAgIChyZWcgPiBNUkVHX0VORCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIF9fZnNpX3JlZ19yZWFkKCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZykpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBfX2ZzaV9yZWdfcmVhZCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX21hc3Rlcl9tYXNrX3NldCh1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBmc2lfbWFzdGVyX21hc2tfc2V0KHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsCisJCQkgICAgICAgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8CiAJICAgIChyZWcgPiBNUkVHX0VORCkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCi0JcmV0dXJuIF9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisJX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZyksIG1hc2ssIGRhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMDAsNDMgKzIxNywzNSBAQAogCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgZnNpX3ByaXYgKmZzaV9nZXQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgc3RydWN0IGZzaV9tYXN0ZXIgKmZzaV9nZXRfbWFzdGVyKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBOVUxMOwotCi0JaWYgKCFzdWJzdHJlYW0gfHwgIW1hc3RlcikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzd2l0Y2ggKHJ0ZC0+ZGFpLT5jcHVfZGFpLT5pZCkgewotCWNhc2UgMDoKLQkJZnNpID0gJm1hc3Rlci0+ZnNpYTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlmc2kgPSAmbWFzdGVyLT5mc2liOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZnNpOworCXJldHVybiBmc2ktPm1hc3RlcjsKIH0KIAogc3RhdGljIGludCBmc2lfaXNfcG9ydF9hKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewotCS8qIHJldHVybgotCSAqIDEgOiBwb3J0IGEKLQkgKiAwIDogcG9ydCBiCi0JICovCisJcmV0dXJuIGZzaS0+bWFzdGVyLT5iYXNlID09IGZzaS0+YmFzZTsKK30KIAotCWlmIChmc2kgPT0gJm1hc3Rlci0+ZnNpYSkKLQkJcmV0dXJuIDE7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpICpmc2lfZ2V0X2RhaShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKm1hY2hpbmUgPSBydGQtPmRhaTsKIAotCXJldHVybiAwOworCXJldHVybiAgbWFjaGluZS0+Y3B1X2RhaTsKK30KKworc3RhdGljIHN0cnVjdCBmc2lfcHJpdiAqZnNpX2dldF9wcml2KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gZnNpX2dldF9kYWkoc3Vic3RyZWFtKTsKKworCXJldHVybiBkYWktPnByaXZhdGVfZGF0YTsKIH0KIAogc3RhdGljIHUzMiBmc2lfZ2V0X2luZm9fZmxhZ3Moc3RydWN0IGZzaV9wcml2ICpmc2kpCiB7CiAJaW50IGlzX3BvcnRhID0gZnNpX2lzX3BvcnRfYShmc2kpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCiAJcmV0dXJuIGlzX3BvcnRhID8gbWFzdGVyLT5pbmZvLT5wb3J0YV9mbGFncyA6CiAJCW1hc3Rlci0+aW5mby0+cG9ydGJfZmxhZ3M7CkBAIC0zMTQsMjcgKzMyMywzMCBAQAogc3RhdGljIHZvaWQgZnNpX2lycV9lbmFibGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQogewogCXUzMiBkYXRhID0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgaXNfcGxheSk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CiAKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElNU0ssICBkYXRhLCBkYXRhKTsKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElFTVNLLCBkYXRhLCBkYXRhKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSU1TSywgIGRhdGEsIGRhdGEpOworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBJRU1TSywgZGF0YSwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfZGlzYWJsZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCiB7CiAJdTMyIGRhdGEgPSBmc2lfcG9ydF9hYl9pb19iaXQoZnNpLCBpc19wbGF5KTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAotCWZzaV9tYXN0ZXJfbWFza19zZXQoSU1TSywgIGRhdGEsIDApOwotCWZzaV9tYXN0ZXJfbWFza19zZXQoSUVNU0ssIGRhdGEsIDApOworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBJTVNLLCAgZGF0YSwgMCk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIElFTVNLLCBkYXRhLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2Nsa19jdHJsKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgZW5hYmxlKQogewogCXUzMiB2YWwgPSBmc2lfaXNfcG9ydF9hKGZzaSkgPyAoMSA8PCAwKSA6ICgxIDw8IDQpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCiAJaWYgKGVuYWJsZSkKLQkJZnNpX21hc3Rlcl9tYXNrX3NldChDTEtfUlNULCB2YWwsIHZhbCk7CisJCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBDTEtfUlNULCB2YWwsIHZhbCk7CiAJZWxzZQotCQlmc2lfbWFzdGVyX21hc2tfc2V0KENMS19SU1QsIHZhbCwgMCk7CisJCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBDTEtfUlNULCB2YWwsIDApOwogfQogCiBzdGF0aWMgdm9pZCBmc2lfaXJxX2luaXQoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQpAQCAtMzU1LDQzICszNjcsNDYgQEAKIAlmc2lfcmVnX21hc2tfc2V0KGZzaSwgY3RybCwgRklGT19DTFIsIEZJRk9fQ0xSKTsKIAogCS8qIGNsZWFyIGludGVycnVwdCBmYWN0b3IgKi8KLQlmc2lfbWFzdGVyX21hc2tfc2V0KElOVF9TVCwgZGF0YSwgMCk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChmc2lfZ2V0X21hc3Rlcihmc2kpLCBJTlRfU1QsIGRhdGEsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmc2lfc29mdF9hbGxfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIGZzaV9zb2Z0X2FsbF9yZXNldChzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyKQogewotCXUzMiBzdGF0dXMgPSBmc2lfbWFzdGVyX3JlYWQoU09GVF9SU1QpOworCXUzMiBzdGF0dXMgPSBmc2lfbWFzdGVyX3JlYWQobWFzdGVyLCBTT0ZUX1JTVCk7CiAKIAkvKiBwb3J0IEFCIHJlc2V0ICovCiAJc3RhdHVzICY9IDB4MDAwMDAwZmY7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIHNvZnQgcmVzZXQgKi8KIAlzdGF0dXMgJj0gMHgwMDAwMDBmMDsKLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMpOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBTT0ZUX1JTVCwgc3RhdHVzKTsKIAlzdGF0dXMgfD0gMHgwMDAwMDAwMTsKLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMpOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBTT0ZUX1JTVCwgc3RhdHVzKTsKIAltZGVsYXkoMTApOwogfQogCiAvKiBwbGF5YmFjayBpbnRlcnJ1cHQgKi8KLXN0YXRpYyBpbnQgZnNpX2RhdGFfcHVzaChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKK3N0YXRpYyBpbnQgZnNpX2RhdGFfcHVzaChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IHN0YXJ0dXApCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IE5VTEw7CisJdTMyIHN0YXR1czsKIAlpbnQgc2VuZDsKIAlpbnQgZmlmb19mcmVlOwogCWludCB3aWR0aDsKIAl1OCAqc3RhcnQ7Ci0JaW50IGk7CisJaW50IGksIG92ZXJfcGVyaW9kOwogCiAJaWYgKCFmc2kJCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0JCXx8CiAJICAgICFmc2ktPnN1YnN0cmVhbS0+cnVudGltZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlydW50aW1lID0gZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisJb3Zlcl9wZXJpb2QJPSAwOworCXN1YnN0cmVhbQk9IGZzaS0+c3Vic3RyZWFtOworCXJ1bnRpbWUJCT0gc3Vic3RyZWFtLT5ydW50aW1lOwogCiAJLyogRlNJIEZJRk8gaGFzIGxpbWl0LgogCSAqIFNvLCB0aGlzIGRyaXZlciBjYW4gbm90IHNlbmQgcGVyaW9kcyBkYXRhIGF0IGEgdGltZQpAQCAtMzk5LDcgKzQxNCw3IEBACiAJaWYgKGZzaS0+Ynl0ZV9vZmZzZXQgPj0KIAkgICAgZnNpLT5wZXJpb2RfbGVuICogKGZzaS0+cGVyaW9kcyArIDEpKSB7CiAKLQkJc3Vic3RyZWFtID0gZnNpLT5zdWJzdHJlYW07CisJCW92ZXJfcGVyaW9kID0gMTsKIAkJZnNpLT5wZXJpb2RzID0gKGZzaS0+cGVyaW9kcyArIDEpICUgcnVudGltZS0+cGVyaW9kczsKIAogCQlpZiAoMCA9PSBmc2ktPnBlcmlvZHMpCkBAIC00MzgsMzAgKzQ1Myw0NCBAQAogCiAJZnNpLT5ieXRlX29mZnNldCArPSBzZW5kICogd2lkdGg7CiAKKwlzdGF0dXMgPSBmc2lfcmVnX3JlYWQoZnNpLCBET0ZGX1NUKTsKKwlpZiAoIXN0YXJ0dXApIHsKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBmc2lfZ2V0X2RhaShzdWJzdHJlYW0pOworCisJCWlmIChzdGF0dXMgJiBFUlJfT1ZFUikKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJvdmVyIHJ1blxuIik7CisJCWlmIChzdGF0dXMgJiBFUlJfVU5ERVIpCisJCQlkZXZfZXJyKGRhaS0+ZGV2LCAidW5kZXIgcnVuXG4iKTsKKwl9CisJZnNpX3JlZ193cml0ZShmc2ksIERPRkZfU1QsIDApOworCiAJZnNpX2lycV9lbmFibGUoZnNpLCAxKTsKIAotCWlmIChzdWJzdHJlYW0pCisJaWYgKG92ZXJfcGVyaW9kKQogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmc2lfZGF0YV9wb3Aoc3RydWN0IGZzaV9wcml2ICpmc2kpCitzdGF0aWMgaW50IGZzaV9kYXRhX3BvcChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IHN0YXJ0dXApCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IE5VTEw7CisJdTMyIHN0YXR1czsKIAlpbnQgZnJlZTsKIAlpbnQgZmlmb19maWxsOwogCWludCB3aWR0aDsKIAl1OCAqc3RhcnQ7Ci0JaW50IGk7CisJaW50IGksIG92ZXJfcGVyaW9kOwogCiAJaWYgKCFmc2kJCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0JCXx8CiAJICAgICFmc2ktPnN1YnN0cmVhbS0+cnVudGltZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlydW50aW1lID0gZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisJb3Zlcl9wZXJpb2QJPSAwOworCXN1YnN0cmVhbQk9IGZzaS0+c3Vic3RyZWFtOworCXJ1bnRpbWUJCT0gc3Vic3RyZWFtLT5ydW50aW1lOwogCiAJLyogRlNJIEZJRk8gaGFzIGxpbWl0LgogCSAqIFNvLCB0aGlzIGRyaXZlciBjYW4gbm90IHNlbmQgcGVyaW9kcyBkYXRhIGF0IGEgdGltZQpAQCAtNDY5LDcgKzQ5OCw3IEBACiAJaWYgKGZzaS0+Ynl0ZV9vZmZzZXQgPj0KIAkgICAgZnNpLT5wZXJpb2RfbGVuICogKGZzaS0+cGVyaW9kcyArIDEpKSB7CiAKLQkJc3Vic3RyZWFtID0gZnNpLT5zdWJzdHJlYW07CisJCW92ZXJfcGVyaW9kID0gMTsKIAkJZnNpLT5wZXJpb2RzID0gKGZzaS0+cGVyaW9kcyArIDEpICUgcnVudGltZS0+cGVyaW9kczsKIAogCQlpZiAoMCA9PSBmc2ktPnBlcmlvZHMpCkBAIC01MDcsOSArNTM2LDIwIEBACiAKIAlmc2ktPmJ5dGVfb2Zmc2V0ICs9IGZpZm9fZmlsbCAqIHdpZHRoOwogCisJc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgRElGRl9TVCk7CisJaWYgKCFzdGFydHVwKSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gZnNpX2dldF9kYWkoc3Vic3RyZWFtKTsKKworCQlpZiAoc3RhdHVzICYgRVJSX09WRVIpCisJCQlkZXZfZXJyKGRhaS0+ZGV2LCAib3ZlciBydW5cbiIpOworCQlpZiAoc3RhdHVzICYgRVJSX1VOREVSKQorCQkJZGV2X2VycihkYWktPmRldiwgInVuZGVyIHJ1blxuIik7CisJfQorCWZzaV9yZWdfd3JpdGUoZnNpLCBESUZGX1NULCAwKTsKKwogCWZzaV9pcnFfZW5hYmxlKGZzaSwgMCk7CiAKLQlpZiAoc3Vic3RyZWFtKQorCWlmIChvdmVyX3BlcmlvZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCiAJcmV0dXJuIDA7CkBAIC01MTcsMjMgKzU1NywyNCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZnNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXUzMiBzdGF0dXMgPSBmc2lfbWFzdGVyX3JlYWQoU09GVF9SU1QpICYgfjB4MDAwMDAwMTA7Ci0JdTMyIGludF9zdCA9IGZzaV9tYXN0ZXJfcmVhZChJTlRfU1QpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBkYXRhOworCXUzMiBzdGF0dXMgPSBmc2lfbWFzdGVyX3JlYWQobWFzdGVyLCBTT0ZUX1JTVCkgJiB+MHgwMDAwMDAxMDsKKwl1MzIgaW50X3N0ID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgSU5UX1NUKTsKIAogCS8qIGNsZWFyIGlycSBzdGF0dXMgKi8KLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMpOwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyB8IDB4MDAwMDAwMTApOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyB8IDB4MDAwMDAwMTApOwogCiAJaWYgKGludF9zdCAmIElOVF9BX09VVCkKLQkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2lhKTsKKwkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2lhLCAwKTsKIAlpZiAoaW50X3N0ICYgSU5UX0JfT1VUKQotCQlmc2lfZGF0YV9wdXNoKCZtYXN0ZXItPmZzaWIpOworCQlmc2lfZGF0YV9wdXNoKCZtYXN0ZXItPmZzaWIsIDApOwogCWlmIChpbnRfc3QgJiBJTlRfQV9JTikKLQkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWEpOworCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYSwgMCk7CiAJaWYgKGludF9zdCAmIElOVF9CX0lOKQotCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYik7CisJCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2liLCAwKTsKIAotCWZzaV9tYXN0ZXJfd3JpdGUoSU5UX1NULCAweDAwMDAwMDApOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBJTlRfU1QsIDB4MDAwMDAwMCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01NDgsNyArNTg5LDcgQEAKIHN0YXRpYyBpbnQgZnNpX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAljb25zdCBjaGFyICptc2c7CiAJdTMyIGZsYWdzID0gZnNpX2dldF9pbmZvX2ZsYWdzKGZzaSk7CiAJdTMyIGZtdDsKQEAgLTY2Nyw3ICs3MDgsNyBAQAogc3RhdGljIHZvaWQgZnNpX2RhaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlpbnQgaXNfcGxheSA9IHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7CiAKIAlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKQEAgLTY3OSw3ICs3MjAsNyBAQAogc3RhdGljIGludCBmc2lfZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCiAJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXQoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXRfcHJpdihzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwogCWludCByZXQgPSAwOwpAQCAtNjg5LDcgKzczMCw3IEBACiAJCWZzaV9zdHJlYW1fcHVzaChmc2ksIHN1YnN0cmVhbSwKIAkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpLAogCQkJCWZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSkpOwotCQlyZXQgPSBpc19wbGF5ID8gZnNpX2RhdGFfcHVzaChmc2kpIDogZnNpX2RhdGFfcG9wKGZzaSk7CisJCXJldCA9IGlzX3BsYXkgPyBmc2lfZGF0YV9wdXNoKGZzaSwgMSkgOiBmc2lfZGF0YV9wb3AoZnNpLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKQEAgLTc2MCw3ICs4MDEsNyBAQAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGZzaV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlsb25nIGxvY2F0aW9uOwogCiAJbG9jYXRpb24gPSAoZnNpLT5ieXRlX29mZnNldCAtIDEpOwpAQCAtODcwLDEwICs5MTEsMTYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgZnNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWludCByZXQ7CiAKKwlpZiAoMCAhPSBwZGV2LT5pZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjdXJyZW50IGZzaSBzdXBwb3J0IGlkIDAgb25seSBub3dcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKCFyZXMgfHwgKGludClpcnEgPD0gMCkgewpAQCAtODk5LDE1ICs5NDYsMjAgQEAKIAltYXN0ZXItPmlycQkJPSBpcnE7CiAJbWFzdGVyLT5pbmZvCQk9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCW1hc3Rlci0+ZnNpYS5iYXNlCT0gbWFzdGVyLT5iYXNlOworCW1hc3Rlci0+ZnNpYS5tYXN0ZXIJPSBtYXN0ZXI7CiAJbWFzdGVyLT5mc2liLmJhc2UJPSBtYXN0ZXItPmJhc2UgKyAweDQwOworCW1hc3Rlci0+ZnNpYi5tYXN0ZXIJPSBtYXN0ZXI7CisJc3Bpbl9sb2NrX2luaXQoJm1hc3Rlci0+bG9jayk7CiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKIAogCWZzaV9zb2NfZGFpWzBdLmRldgkJPSAmcGRldi0+ZGV2OworCWZzaV9zb2NfZGFpWzBdLnByaXZhdGVfZGF0YQk9ICZtYXN0ZXItPmZzaWE7CiAJZnNpX3NvY19kYWlbMV0uZGV2CQk9ICZwZGV2LT5kZXY7CisJZnNpX3NvY19kYWlbMV0ucHJpdmF0ZV9kYXRhCT0gJm1hc3Rlci0+ZnNpYjsKIAotCWZzaV9zb2Z0X2FsbF9yZXNldCgpOworCWZzaV9zb2Z0X2FsbF9yZXNldChtYXN0ZXIpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCAmZnNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImZzaSIsIG1hc3Rlcik7CiAJaWYgKHJldCkgewpAQCAtOTM3LDYgKzk4OSwxMCBAQAogCiBzdGF0aWMgaW50IGZzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpX3NvY19kYWlbMF0ucHJpdmF0ZV9kYXRhKTsKKwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKGZzaV9zb2NfZGFpLCBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZmc2lfc29jX3BsYXRmb3JtKTsKIApAQCAtOTQ2LDcgKzEwMDIsMTIgQEAKIAogCWlvdW5tYXAobWFzdGVyLT5iYXNlKTsKIAlrZnJlZShtYXN0ZXIpOwotCW1hc3RlciA9IE5VTEw7CisKKwlmc2lfc29jX2RhaVswXS5kZXYJCT0gTlVMTDsKKwlmc2lfc29jX2RhaVswXS5wcml2YXRlX2RhdGEJPSBOVUxMOworCWZzaV9zb2NfZGFpWzFdLmRldgkJPSBOVUxMOworCWZzaV9zb2NfZGFpWzFdLnByaXZhdGVfZGF0YQk9IE5VTEw7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL21pZ29yLmMgYi9zb3VuZC9zb2Mvc2gvbWlnb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIzYTVjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL21pZ29yLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBBTFNBIFNvQyBkcml2ZXIgZm9yIE1pZ28tUgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKworI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODk3OC5oIgorI2luY2x1ZGUgInNpdS5oIgorCisvKiBEZWZhdWx0IDgwMDBIeiBzYW1wbGluZyBmcmVxdWVuY3kgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvZGVjX2ZyZXEgPSA4MDAwICogNTEyOworCitzdGF0aWMgdW5zaWduZWQgaW50IHVzZV9jb3VudDsKKworLyogRXh0ZXJuYWwgY2xvY2ssIHNvdXJjZWQgZnJvbSB0aGUgY29kZWMgYXQgdGhlIFNJVU1DS0IgcGluICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXVtY2tiX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNvZGVjX2ZyZXE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaXVtY2tiX2Nsa19vcHMgPSB7CisJLnJlY2FsYyA9IHNpdW1ja2JfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2l1bWNrYl9jbGsgPSB7CisJLm5hbWUJCT0gInNpdW1ja2JfY2xrIiwKKwkuaWQJCT0gLTEsCisJLm9wcwkJPSAmc2l1bWNrYl9jbGtfb3BzLAorCS5yYXRlCQk9IDAsIC8qIGluaXRpYWxpc2VkIGF0IHJ1bi10aW1lICovCit9OworCitzdGF0aWMgaW50IG1pZ29yX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTc4X1BMTCwgMTMwMDAwMDAsCisJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTg5NzhfT1BDTEtSQVRFLCByYXRlICogNTEyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQocnRkLT5kYWktPmNwdV9kYWksIFNORF9TT0NfREFJRk1UX05CX0lGIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY29kZWNfZnJlcSA9IHJhdGUgKiA1MTI7CisJLyoKKwkgKiBUaGlzIHByb3BhZ2F0ZXMgdGhlIHBhcmVudCBmcmVxdWVuY3kgY2hhbmdlIHRvIGNoaWxkcmVuIGFuZAorCSAqIHJlY2FsY3VsYXRlcyB0aGUgZnJlcXVlbmN5IHRhYmxlCisJICovCisJY2xrX3NldF9yYXRlKCZzaXVtY2tiX2NsaywgY29kZWNfZnJlcSk7CisJZGV2X2RiZyhjb2RlY19kYWktPmRldiwgIiVzOiBjb25maWd1cmUgJWx1SHpcbiIsIF9fZnVuY19fLCBjb2RlY19mcmVxKTsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsocnRkLT5kYWktPmNwdV9kYWksIFNJVV9DTEtCX0VYVCwKKwkJCQkgICAgIGNvZGVjX2ZyZXEgLyAyLCBTTkRfU09DX0NMT0NLX0lOKTsKKworCWlmICghcmV0KQorCQl1c2VfY291bnQrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWlnb3JfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCisJaWYgKHVzZV9jb3VudCkgeworCQl1c2VfY291bnQtLTsKKworCQlpZiAoIXVzZV9jb3VudCkKKwkJCXNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5NzhfUExMLCAwLAorCQkJCQkgICAgICAgU05EX1NPQ19DTE9DS19JTik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhjb2RlY19kYWktPmRldiwgIlVuYmFsYW5jZWQgaHdfZnJlZSFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIG1pZ29yX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IG1pZ29yX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IG1pZ29yX2h3X2ZyZWUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbWlnb3JfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJPbmJvYXJkIE1pY3JvcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJFeHRlcm5hbCBNaWNyb3Bob25lIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBIZWFkcGhvbmUgb3V0cHV0IGNvbm5lY3RlZCB0byBMSFAvUkhQLCBlbmFibGUgT1VUNCBmb3IgVk1JRCAqLworCXsgIkhlYWRwaG9uZSIsIE5VTEwsICAiT1VUNCBWTUlEIiB9LAorCXsgIk9VVDQgVk1JRCIsIE5VTEwsICAiTEhQIiB9LAorCXsgIk9VVDQgVk1JRCIsIE5VTEwsICAiUkhQIiB9LAorCisJLyogT24tYm9hcmQgbWljcm9waG9uZSAqLworCXsgIlJNSUNOIiwgTlVMTCwgIk1pYyBCaWFzIiB9LAorCXsgIlJNSUNQIiwgTlVMTCwgIk1pYyBCaWFzIiB9LAorCXsgIk1pYyBCaWFzIiwgTlVMTCwgIk9uYm9hcmQgTWljcm9waG9uZSIgfSwKKworCS8qIEV4dGVybmFsIG1pY3JvcGhvbmUgKi8KKwl7ICJMTUlDTiIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJMTUlDUCIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJNaWMgQmlhcyIsIE5VTEwsICJFeHRlcm5hbCBNaWNyb3Bob25lIiB9LAorfTsKKworc3RhdGljIGludCBtaWdvcl9kYWlfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgbWlnb3JfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRShtaWdvcl9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogbWlnb3IgZGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbWlnb3JfZGFpID0geworCS5uYW1lID0gIndtODk3OCIsCisJLnN0cmVhbV9uYW1lID0gIldNODk3OCIsCisJLmNwdV9kYWkgPSAmc2l1X2kyc19kYWksCisJLmNvZGVjX2RhaSA9ICZ3bTg5NzhfZGFpLAorCS5vcHMgPSAmbWlnb3JfZGFpX29wcywKKwkuaW5pdCA9IG1pZ29yX2RhaV9pbml0LAorfTsKKworLyogbWlnb3IgYXVkaW8gbWFjaGluZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2NfbWlnb3IgPSB7CisJLm5hbWUgPSAiTWlnby1SIiwKKwkucGxhdGZvcm0gPSAmc2l1X3BsYXRmb3JtLAorCS5kYWlfbGluayA9ICZtaWdvcl9kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCisvKiBtaWdvciBhdWRpbyBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgbWlnb3Jfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmc25kX3NvY19taWdvciwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204OTc4LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pZ29yX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG1pZ29yX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3JlZ2lzdGVyKCZzaXVtY2tiX2Nsayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBQb3J0IG51bWJlciB1c2VkIG9uIHRoaXMgbWFjaGluZTogcG9ydCBCICovCisJbWlnb3Jfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgMSk7CisJaWYgKCFtaWdvcl9zbmRfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXBkZXZhbGxvYzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShtaWdvcl9zbmRfZGV2aWNlLCAmbWlnb3Jfc25kX2RldmRhdGEpOworCisJbWlnb3Jfc25kX2RldmRhdGEuZGV2ID0gJm1pZ29yX3NuZF9kZXZpY2UtPmRldjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobWlnb3Jfc25kX2RldmljZSk7CisJaWYgKHJldCkKKwkJZ290byBlcGRldmFkZDsKKworCXJldHVybiAwOworCitlcGRldmFkZDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1pZ29yX3NuZF9kZXZpY2UpOworZXBkZXZhbGxvYzoKKwljbGtfdW5yZWdpc3Rlcigmc2l1bWNrYl9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtaWdvcl9leGl0KHZvaWQpCit7CisJY2xrX3VucmVnaXN0ZXIoJnNpdW1ja2JfY2xrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtaWdvcl9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQobWlnb3JfaW5pdCk7Cittb2R1bGVfZXhpdChtaWdvcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE1pZ29yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1LmggYi9zb3VuZC9zb2Mvc2gvc2l1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjMDRhYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9zaXUuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIHNpdS5oIC0gQUxTQSBTb0MgZHJpdmVyIGZvciBSZW5lc2FzIFNINzM0MywgU0g3NzIyIFNJVSBwZXJpcGhlcmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBTSVVfSAorI2RlZmluZSBTSVVfSAorCisvKiBDb21tb24ga2VybmVsIGFuZCB1c2VyLXNwYWNlIGZpcm13YXJlLWJ1aWxkaW5nIGRlZmluZXMgYW5kIHR5cGVzICovCisKKyNkZWZpbmUgWVJBTTBfU0laRQkJKDB4MDA0MCAvIDQpCQkvKiAxNiAqLworI2RlZmluZSBZUkFNMV9TSVpFCQkoMHgwMDgwIC8gNCkJCS8qIDMyICovCisjZGVmaW5lIFlSQU0yX1NJWkUJCSgweDAwNDAgLyA0KQkJLyogMTYgKi8KKyNkZWZpbmUgWVJBTTNfU0laRQkJKDB4MDA4MCAvIDQpCQkvKiAzMiAqLworI2RlZmluZSBZUkFNNF9TSVpFCQkoMHgwMDgwIC8gNCkJCS8qIDMyICovCisjZGVmaW5lIFlSQU1fREVGX1NJWkUJCShZUkFNMF9TSVpFICsgWVJBTTFfU0laRSArIFlSQU0yX1NJWkUgKyBcCisJCQkJIFlSQU0zX1NJWkUgKyBZUkFNNF9TSVpFKQorI2RlZmluZSBZUkFNX0ZJUl9TSVpFCQkoMHgwNDAwIC8gNCkJCS8qIDI1NiAqLworI2RlZmluZSBZUkFNX0lJUl9TSVpFCQkoMHgwMjAwIC8gNCkJCS8qIDEyOCAqLworCisjZGVmaW5lIFhSQU0wX1NJWkUJCSgweDA0MDAgLyA0KQkJLyogMjU2ICovCisjZGVmaW5lIFhSQU0xX1NJWkUJCSgweDAyMDAgLyA0KQkJLyogMTI4ICovCisjZGVmaW5lIFhSQU0yX1NJWkUJCSgweDAyMDAgLyA0KQkJLyogMTI4ICovCisKKy8qIFBSQU0gcHJvZ3JhbSBhcnJheSBzaXplICovCisjZGVmaW5lIFBSQU0wX1NJWkUJCSgweDAxMDAgLyA0KQkJLyogNjQgKi8KKyNkZWZpbmUgUFJBTTFfU0laRQkJKCgweDIwMDAgLSAweDAxMDApIC8gNCkJLyogMTk4NCAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHNpdV9zcGJfcGFyYW0geworCV9fdTMyCWFiMWE7CS8qIGlucHV0IEZJRk8gYWRkcmVzcyAqLworCV9fdTMyCWFiMGE7CS8qIG91dHB1dCBGSUZPIGFkZHJlc3MgKi8KKwlfX3UzMglkaXI7CS8qIDA9dGhlIGF0aGVyIGV4Y2VwdCBDUFVPVVRQVVQsIDE9Q1BVSU5QVVQgKi8KKwlfX3UzMglldmVudDsJLyogU1BCIHByb2dyYW0gc3RhcnRpbmcgY29uZGl0aW9ucyAqLworCV9fdTMyCXN0ZmlmbzsJLyogU1RGSUZPIHJlZ2lzdGVyIHNldHRpbmcgdmFsdWUgKi8KKwlfX3UzMgl0cmRhdDsJLyogVFJEQVQgcmVnaXN0ZXIgc2V0dGluZyB2YWx1ZSAqLworfTsKKworc3RydWN0IHNpdV9maXJtd2FyZSB7CisJX191MzIJCQl5cmFtX2Zpcl9jb2VmZltZUkFNX0ZJUl9TSVpFXTsKKwlfX3UzMgkJCXByYW0wW1BSQU0wX1NJWkVdOworCV9fdTMyCQkJcHJhbTFbUFJBTTFfU0laRV07CisJX191MzIJCQl5cmFtMFtZUkFNMF9TSVpFXTsKKwlfX3UzMgkJCXlyYW0xW1lSQU0xX1NJWkVdOworCV9fdTMyCQkJeXJhbTJbWVJBTTJfU0laRV07CisJX191MzIJCQl5cmFtM1tZUkFNM19TSVpFXTsKKwlfX3UzMgkJCXlyYW00W1lSQU00X1NJWkVdOworCV9fdTMyCQkJc3BicGFyX251bTsKKwlzdHJ1Y3Qgc2l1X3NwYl9wYXJhbQlzcGJwYXJbMzJdOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhaS5oPgorCisjZGVmaW5lIFNJVV9QRVJJT0RfQllURVNfTUFYCTgxOTIJCS8qIERNQSB0cmFuc2Zlci9wZXJpb2Qgc2l6ZSAqLworI2RlZmluZSBTSVVfUEVSSU9EX0JZVEVTX01JTgkyNTYJCS8qIERNQSB0cmFuc2Zlci9wZXJpb2Qgc2l6ZSAqLworI2RlZmluZSBTSVVfUEVSSU9EU19NQVgJCTY0CQkvKiBNYXggcGVyaW9kcyBpbiBidWZmZXIgKi8KKyNkZWZpbmUgU0lVX1BFUklPRFNfTUlOCQk0CQkvKiBNaW4gcGVyaW9kcyBpbiBidWZmZXIgKi8KKyNkZWZpbmUgU0lVX0JVRkZFUl9CWVRFU19NQVgJKFNJVV9QRVJJT0RfQllURVNfTUFYICogU0lVX1BFUklPRFNfTUFYKQorCisvKiBTSVUgcG9ydHM6IG9ubHkgb25lIGNhbiBiZSB1c2VkIGF0IGEgdGltZSAqLworZW51bSB7CisJU0lVX1BPUlRfQSwKKwlTSVVfUE9SVF9CLAorCVNJVV9QT1JUX05VTSwKK307CisKKy8qIFNJVSBjbG9jayBjb25maWd1cmF0aW9uICovCitlbnVtIHsKKwlTSVVfQ0xLQV9QTEwsCisJU0lVX0NMS0FfRVhULAorCVNJVV9DTEtCX1BMTCwKKwlTSVVfQ0xLQl9FWFQKK307CisKK3N0cnVjdCBzaXVfaW5mbyB7CisJaW50CQkJcG9ydF9pZDsKKwl1MzIgX19pb21lbQkJKnByYW07CisJdTMyIF9faW9tZW0JCSp4cmFtOworCXUzMiBfX2lvbWVtCQkqeXJhbTsKKwl1MzIgX19pb21lbQkJKnJlZzsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlCWZ3OworfTsKKworc3RydWN0IHNpdV9zdHJlYW0geworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdGFza2xldDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JKnN1YnN0cmVhbTsKKwlzbmRfcGNtX2Zvcm1hdF90CQlmb3JtYXQ7CisJc2l6ZV90CQkJCWJ1Zl9ieXRlczsKKwlzaXplX3QJCQkJcGVyaW9kX2J5dGVzOworCWludAkJCQljdXJfcGVyaW9kOwkvKiBQZXJpb2QgY3VycmVudGx5IGluIGRtYSAqLworCXUzMgkJCQl2b2x1bWU7CisJc25kX3BjbV9zZnJhbWVzX3QJCXhmZXJfY250OwkvKiBOdW1iZXIgb2YgZnJhbWVzICovCisJdTgJCQkJcndfZmxnOwkJLyogdHJhbnNmZXIgc3RhdHVzICovCisJLyogRE1BIHN0YXR1cyAqLworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuOwkJLyogRE1BIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKnR4X2Rlc2M7CisJZG1hX2Nvb2tpZV90CQkJY29va2llOworCXN0cnVjdCBzaF9kbWFlX3NsYXZlCQlwYXJhbTsKK307CisKK3N0cnVjdCBzaXVfcG9ydCB7CisJdW5zaWduZWQgbG9uZwkJcGxheV9jYXA7CS8qIFVzZWQgdG8gdHJhY2sgZnVsbCBkdXBsZXggKi8KKwlzdHJ1Y3Qgc25kX3BjbQkJKnBjbTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbQlwbGF5YmFjazsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbQljYXB0dXJlOworCXUzMgkJCXN0ZmlmbzsJCS8qIFNURklGTyB2YWx1ZSBmcm9tIGZpcm13YXJlICovCisJdTMyCQkJdHJkYXQ7CQkvKiBUUkRBVCB2YWx1ZSBmcm9tIGZpcm13YXJlICovCit9OworCitleHRlcm4gc3RydWN0IHNpdV9wb3J0ICpzaXVfcG9ydHNbU0lVX1BPUlRfTlVNXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2l1X3BvcnQgKnNpdV9wb3J0X2luZm8oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9CisJCXRvX3BsYXRmb3JtX2RldmljZShzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2KTsKKwlyZXR1cm4gc2l1X3BvcnRzW3BkZXYtPmlkXTsKK30KKworLyogUmVnaXN0ZXIgYWNjZXNzICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2l1X3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNpdV9yZWFkMzIodTMyIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGFkZHIpOworfQorCisvKiBTSVUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNJVV9JRkNUTAkoMHgwMDAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NSQ1RMCSgweDAwNCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0ZPUk0JKDB4MDA4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9DS0NUTAkoMHgwMGMgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1RSREFUCSgweDAxMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU1RGSUZPCSgweDAxNCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRFBBSwkoMHgwMWMgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0NLUkVWCSgweDAyMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRVZOVEMJKDB4MDI4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkNUTAkoMHgwNDAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCUFNFVAkoMHgwNDQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCRlNUUwkoMHgwNjggLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCRFZDQQkoMHgwNmMgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCRFZDQgkoMHgwNzAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCQUNUSVYJKDB4MDc0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFJQQkoMHgwOTAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQUlCCSgweDA5NCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BT0EJKDB4MDk4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFPQgkoMHgwOWMgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQU1MCSgweDBhMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU1BTVFMJKDB4MGNjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TUENUTAkoMHgwZDAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0JSR0FTRUwJKDB4MTAwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUlJBCSgweDEwNCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQlJHQlNFTAkoMHgxMDggLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0JSUkIJKDB4MTBjIC8gc2l6ZW9mKHUzMikpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBzaXVfcGxhdGZvcm07CitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHNpdV9pMnNfZGFpOworCitpbnQgc2l1X2luaXRfcG9ydChpbnQgcG9ydCwgc3RydWN0IHNpdV9wb3J0ICoqcG9ydF9pbmZvLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwordm9pZCBzaXVfZnJlZV9wb3J0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBTSVVfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9kYWkuYyBiL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MmQxOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qCisgKiBzaXVfZGFpLmMgLSBBTFNBIFNvQyBkcml2ZXIgZm9yIFJlbmVzYXMgU0g3MzQzLCBTSDc3MjIgU0lVIHBlcmlwaGVyYWwuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2FybG9zIE11bm96IDxjYXJsb3NAa2VuYXRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9zaXUuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisKKyNpbmNsdWRlICJzaXUuaCIKKworLyogQm9hcmQgc3BlY2lmaWNzICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQorIyBkZWZpbmUgU0lVX01BWF9WT0xVTUUJCTB4MTAwMAorI2Vsc2UKKyMgZGVmaW5lIFNJVV9NQVhfVk9MVU1FCQkweDdmZmYKKyNlbmRpZgorCisjZGVmaW5lIFBSQU1fU0laRQkweDIwMDAKKyNkZWZpbmUgWFJBTV9TSVpFCTB4ODAwCisjZGVmaW5lIFlSQU1fU0laRQkweDgwMAorCisjZGVmaW5lIFhSQU1fT0ZGU0VUCTB4NDAwMAorI2RlZmluZSBZUkFNX09GRlNFVAkweDYwMDAKKyNkZWZpbmUgUkVHX09GRlNFVAkweGMwMDAKKworI2RlZmluZSBQTEFZQkFDS19FTkFCTEVECTEKKyNkZWZpbmUgQ0FQVFVSRV9FTkFCTEVECQkyCisKKyNkZWZpbmUgVk9MVU1FX0NBUFRVUkUJCTAKKyNkZWZpbmUgVk9MVU1FX1BMQVlCQUNLCQkxCisjZGVmaW5lIERGTFRfVk9MVU1FX0xFVkVMCTB4MDgwMDA4MDAKKworLyoKKyAqIFNQRElGIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHBvcnQgQSBhbmQgb24gc29tZSBTSVUgaW1wbGVtZW50YXRpb25zIGl0IGlzIG9ubHkKKyAqIGF2YWlsYWJsZSBmb3IgaW5wdXQuIER1ZSB0byB0aGUgbGFjayBvZiBoYXJkd2FyZSB0byB0ZXN0IGl0LCBTUERJRiBpcyBsZWZ0CisgKiBkaXNhYmxlZCBpbiB0aGlzIGRyaXZlciB2ZXJzaW9uCisgKi8KK3N0cnVjdCBmb3JtYXRfZmxhZyB7CisJdTMyCWkyczsKKwl1MzIJcGNtOworCXUzMglzcGRpZjsKKwl1MzIJbWFzazsKK307CisKK3N0cnVjdCBwb3J0X2ZsYWcgeworCXN0cnVjdCBmb3JtYXRfZmxhZwlwbGF5YmFjazsKKwlzdHJ1Y3QgZm9ybWF0X2ZsYWcJY2FwdHVyZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG9ydF9mbGFnIHNpdV9mbGFnc1tTSVVfUE9SVF9OVU1dID0geworCVtTSVVfUE9SVF9BXSA9IHsKKwkJLnBsYXliYWNrID0geworCQkJLmkycwk9IDB4NTAwMDAwMDAsCisJCQkucGNtCT0gMHg0MDAwMDAwMCwKKwkJCS5zcGRpZgk9IDB4ODAwMDAwMDAsCS8qIG5vdCBvbiBhbGwgU0lVIHZlcnNpb25zICovCisJCQkubWFzawk9IDB4ZDAwMDAwMDAsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLmkycwk9IDB4MDUwMDAwMDAsCisJCQkucGNtCT0gMHgwNDAwMDAwMCwKKwkJCS5zcGRpZgk9IDB4MDgwMDAwMDAsCisJCQkubWFzawk9IDB4MGQwMDAwMDAsCisJCX0sCisJfSwKKwlbU0lVX1BPUlRfQl0gPSB7CisJCS5wbGF5YmFjayA9IHsKKwkJCS5pMnMJPSAweDAwNTAwMDAwLAorCQkJLnBjbQk9IDB4MDA0MDAwMDAsCisJCQkuc3BkaWYJPSAwLAkJLyogaW1wb3NzaWJsZSAtIHR1cm4gb2ZmICovCisJCQkubWFzawk9IDB4MDA1MDAwMDAsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLmkycwk9IDB4MDAwNTAwMDAsCisJCQkucGNtCT0gMHgwMDA0MDAwMCwKKwkJCS5zcGRpZgk9IDAsCQkvKiBpbXBvc3NpYmxlIC0gdHVybiBvZmYgKi8KKwkJCS5tYXNrCT0gMHgwMDA1MDAwMCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgc2l1X2RhaV9zdGFydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisKKwlkZXZfZGJnKHBvcnRfaW5mby0+cGNtLT5jYXJkLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogVHVybiBvbiBTSVUgY2xvY2sgKi8KKwlwbV9ydW50aW1lX2dldF9zeW5jKHNpdV9pMnNfZGFpLmRldik7CisKKwkvKiBJc3N1ZSBzb2Z0d2FyZSByZXNldCB0byBzaXUgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NSQ1RMLCAwKTsKKworCS8qIFdhaXQgZm9yIHRoZSByZXNldCB0byB0YWtlIGVmZmVjdCAqLworCXVkZWxheSgxKTsKKworCXBvcnRfaW5mby0+c3RmaWZvID0gMDsKKwlwb3J0X2luZm8tPnRyZGF0ID0gMDsKKworCS8qIHBvcnRBLCBwb3J0QiwgU0lVIG9wZXJhdGUgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NSQ1RMLCAweDMwMSk7CisKKwkvKiBwb3J0QT0yNTZmcywgcG9ydEI9MjU2ZnMgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0NLQ1RMLCAweDQwNDAwMDAwKTsKKworCS8qIHBvcnRBJ3MgQlJHIGRvZXMgbm90IGRpdmlkZSBTSVVDS0EgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0JSR0FTRUwsIDApOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQlJSQSwgMCk7CisKKwkvKiBwb3J0QidzIEJSRyBkaXZpZGVzIFNJVUNLQiBieSBoYWxmICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUkdCU0VMLCAxKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0JSUkIsIDApOworCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9JRkNUTCwgMHg0NDQ0MDAwMCk7CisKKwkvKiBwb3J0QTogMzIgYml0L2ZzLCBtYXN0ZXI7IHBvcnRCOiAzMiBiaXQvZnMsIG1hc3RlciAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0ZPUk0sIDB4MGMwYzAwMDApOworCisJLyoKKwkgKiBWb2x1bWUgbGV2ZWxzOiBsb29rcyBsaWtlIHRoZSBEU1AgZmlybXdhcmUgaW1wbGVtZW50cyB2b2x1bWUgY29udHJvbHMKKwkgKiBkaWZmZXJlbnRseSBmcm9tIHdoYXQncyBkZXNjcmliZWQgaW4gdGhlIGRhdGFzaGVldAorCSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JEVkNBLCBwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZSk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0IsIHBvcnRfaW5mby0+Y2FwdHVyZS52b2x1bWUpOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3N0b3Aodm9pZCkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisKKwkvKiBTSVUgc29mdHdhcmUgcmVzZXQgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NSQ1RMLCAwKTsKKworCS8qIFR1cm4gb2ZmIFNJVSBjbG9jayAqLworCXBtX3J1bnRpbWVfcHV0X3N5bmMoc2l1X2kyc19kYWkuZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zcGJBc2VsZWN0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlICpmdyA9ICZpbmZvLT5mdzsKKwl1MzIgKnlkZWYgPSBmdy0+eXJhbTA7CisJdTMyIGlkeDsKKworCS8qIHBhdGggQSB1c2UgKi8KKwlpZiAoIWluZm8tPnBvcnRfaWQpCisJCWlkeCA9IDE7CQkvKiBwb3J0QSAqLworCWVsc2UKKwkJaWR4ID0gMjsJCS8qIHBvcnRCICovCisKKwl5ZGVmWzBdID0gKGZ3LT5zcGJwYXJbaWR4XS5hYjFhIDw8IDE2KSB8CisJCShmdy0+c3BicGFyW2lkeF0uYWIwYSA8PCA4KSB8CisJCShmdy0+c3BicGFyW2lkeF0uZGlyIDw8IDcpIHwgMzsKKwl5ZGVmWzFdID0gZnctPnlyYW0wWzFdOwkvKiAweDAzMDAwMzAwICovCisJeWRlZlsyXSA9ICgxNiAvIDIpIDw8IDI0OworCXlkZWZbM10gPSBmdy0+eXJhbTBbM107CS8qIDAgKi8KKwl5ZGVmWzRdID0gZnctPnlyYW0wWzRdOwkvKiAwICovCisJeWRlZls3XSA9IGZ3LT5zcGJwYXJbaWR4XS5ldmVudDsKKwlwb3J0X2luZm8tPnN0ZmlmbyB8PSBmdy0+c3BicGFyW2lkeF0uc3RmaWZvOworCXBvcnRfaW5mby0+dHJkYXQgfD0gZnctPnNwYnBhcltpZHhdLnRyZGF0OworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NwYkJzZWxlY3Qoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfZmlybXdhcmUgKmZ3ID0gJmluZm8tPmZ3OworCXUzMiAqeWRlZiA9IGZ3LT55cmFtMDsKKwl1MzIgaWR4OworCisJLyogcGF0aCBCIHVzZSAqLworCWlmICghaW5mby0+cG9ydF9pZCkKKwkJaWR4ID0gNzsJCS8qIHBvcnRBICovCisJZWxzZQorCQlpZHggPSA4OwkJLyogcG9ydEIgKi8KKworCXlkZWZbNV0gPSAoZnctPnNwYnBhcltpZHhdLmFiMWEgPDwgMTYpIHwKKwkJKGZ3LT5zcGJwYXJbaWR4XS5hYjBhIDw8IDgpIHwgMTsKKwl5ZGVmWzZdID0gZnctPnNwYnBhcltpZHhdLmV2ZW50OworCXBvcnRfaW5mby0+c3RmaWZvIHw9IGZ3LT5zcGJwYXJbaWR4XS5zdGZpZm87CisJcG9ydF9pbmZvLT50cmRhdCB8PSBmdy0+c3BicGFyW2lkeF0udHJkYXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfb3BlbihzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJdTMyIHNyY3RsLCBpZmN0bDsKKworCXNyY3RsID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NSQ1RMKTsKKwlpZmN0bCA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9JRkNUTCk7CisKKwlzd2l0Y2ggKGluZm8tPnBvcnRfaWQpIHsKKwljYXNlIFNJVV9QT1JUX0E6CisJCS8qIHBvcnRBIG9wZXJhdGVzICovCisJCXNyY3RsIHw9IDB4MjAwOworCQlpZmN0bCAmPSB+MHhjMjsKKwkJYnJlYWs7CisJY2FzZSBTSVVfUE9SVF9COgorCQkvKiBwb3J0QiBvcGVyYXRlcyAqLworCQlzcmN0bCB8PSAweDEwMDsKKwkJaWZjdGwgJj0gfjB4MzE7CisJCWJyZWFrOworCX0KKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1JDVEwsIHNyY3RsKTsKKwkvKiBVbm11dGUgYW5kIGNvbmZpZ3VyZSBwb3J0QSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfSUZDVEwsIGlmY3RsKTsKK30KKworLyoKKyAqIEF0IHRoZSBtb21lbnQgb25seSBmaXhlZCBMZWZ0LXVwcGVyLCBMZWZ0LWxvd2VyLCBSaWdodC11cHBlciwgUmlnaHQtbG93ZXIKKyAqIHBhY2tpbmcgaXMgc3VwcG9ydGVkCisgKi8KK3N0YXRpYyB2b2lkIHNpdV9kYWlfcGNtZGF0YXBhY2soc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXUzMiBkcGFrOworCisJZHBhayA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9EUEFLKTsKKworCXN3aXRjaCAoaW5mby0+cG9ydF9pZCkgeworCWNhc2UgU0lVX1BPUlRfQToKKwkJZHBhayAmPSB+MHhjMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBTSVVfUE9SVF9COgorCQlkcGFrICY9IH4weDAwYzAwMDAwOworCQlicmVhazsKKwl9CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0RQQUssIGRwYWspOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfc3Bic3RhcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfZmlybXdhcmUgKmZ3ID0gJmluZm8tPmZ3OworCXUzMiAqeWRlZiA9IGZ3LT55cmFtMDsKKwlpbnQgY250OworCXUzMiBfX2lvbWVtICphZGQ7CisJdTMyICpwdHI7CisKKwkvKiBMb2FkIFNQQiBQcm9ncmFtIGluIFBSQU0gKi8KKwlwdHIgPSBmdy0+cHJhbTA7CisJYWRkID0gaW5mby0+cHJhbTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFBSQU0wX1NJWkU7IGNudCsrLCBhZGQrKywgcHRyKyspCisJCXNpdV93cml0ZTMyKGFkZCwgKnB0cik7CisKKwlwdHIgPSBmdy0+cHJhbTE7CisJYWRkID0gaW5mby0+cHJhbSArICgweDAxMDAgLyBzaXplb2YodTMyKSk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBQUkFNMV9TSVpFOyBjbnQrKywgYWRkKyssIHB0cisrKQorCQlzaXVfd3JpdGUzMihhZGQsICpwdHIpOworCisJLyogWFJBTSBpbml0aWFsaXphdGlvbiAqLworCWFkZCA9IGluZm8tPnhyYW07CisJZm9yIChjbnQgPSAwOyBjbnQgPCBYUkFNMF9TSVpFICsgWFJBTTFfU0laRSArIFhSQU0yX1NJWkU7IGNudCsrLCBhZGQrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCAwKTsKKworCS8qIFlSQU0gdmFyaWFibGUgYXJlYSBpbml0aWFsaXphdGlvbiAqLworCWFkZCA9IGluZm8tPnlyYW07CisJZm9yIChjbnQgPSAwOyBjbnQgPCBZUkFNX0RFRl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgeWRlZltjbnRdKTsKKworCS8qIFlSQU0gRklSIGNvZWZmaWNpZW50IGFyZWEgaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT55cmFtICsgKDB4MDIwMCAvIHNpemVvZih1MzIpKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFlSQU1fRklSX1NJWkU7IGNudCsrLCBhZGQrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCBmdy0+eXJhbV9maXJfY29lZmZbY250XSk7CisKKwkvKiBZUkFNIElJUiBjb2VmZmljaWVudCBhcmVhIGluaXRpYWxpemF0aW9uICovCisJYWRkID0gaW5mby0+eXJhbSArICgweDA2MDAgLyBzaXplb2YodTMyKSk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBZUkFNX0lJUl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgMCk7CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1RSREFULCBwb3J0X2luZm8tPnRyZGF0KTsKKwlwb3J0X2luZm8tPnRyZGF0ID0gMHgwOworCisKKwkvKiBTUEIgc3RhcnQgY29uZGl0aW9uOiBzb2Z0d2FyZSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JBQ1RJViwgMCk7CisJLyogU3RhcnQgU1BCICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkNUTCwgMHhjMDAwMDAwMCk7CisJLyogV2FpdCBmb3IgcHJvZ3JhbSB0byBoYWx0ICovCisJY250ID0gMHgxMDAwMDsKKwl3aGlsZSAoLS1jbnQgJiYgc2l1X3JlYWQzMihiYXNlICsgU0lVX1NCQ1RMKSAhPSAweDgwMDAwMDAwKQorCQljcHVfcmVsYXgoKTsKKworCWlmICghY250KQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU1BCIHByb2dyYW0gc3RhcnQgYWRkcmVzcyBzZXR0aW5nICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQlBTRVQsIDB4MDA0MDAwMDApOworCS8qIFNQQiBoYXJkd2FyZSBzdGFydChGSUZPQ1RMIHNvdXJjZSkgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQUNUSVYsIDB4YzAwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3Bic3RvcChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQUNUSVYsIDApOworCS8qIFNQQiBzdG9wICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkNUTCwgMCk7CisKKwlwb3J0X2luZm8tPnN0ZmlmbyA9IDA7Cit9CisKKy8qCQlBUEkgZnVuY3Rpb25zCQkqLworCisvKiBQbGF5YmFjayBhbmQgY2FwdHVyZSBoYXJkd2FyZSBwcm9wZXJ0aWVzIGFyZSBpZGVudGljYWwgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzaXVfZGFpX3BjbV9odyA9IHsKKwkuaW5mbwkJCT0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTYsCisJLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbgkJPSA4MDAwLAorCS5yYXRlX21heAkJPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDIsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gU0lVX0JVRkZFUl9CWVRFU19NQVgsCisJLnBlcmlvZF9ieXRlc19taW4JPSBTSVVfUEVSSU9EX0JZVEVTX01JTiwKKwkucGVyaW9kX2J5dGVzX21heAk9IFNJVV9QRVJJT0RfQllURVNfTUFYLAorCS5wZXJpb2RzX21pbgkJPSBTSVVfUEVSSU9EU19NSU4sCisJLnBlcmlvZHNfbWF4CQk9IFNJVV9QRVJJT0RTX01BWCwKK307CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9pbmZvX3ZvbHVtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc25kX2tjb250cm9sX2NoaXAoa2N0cmwpOworCisJZGV2X2RiZyhwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBTSVVfTUFYX1ZPTFVNRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfZ2V0X3ZvbHVtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc25kX2tjb250cm9sX2NoaXAoa2N0cmwpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnRfaW5mby0+cGNtLT5jYXJkLT5kZXY7CisJdTMyIHZvbDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoa2N0cmwtPnByaXZhdGVfdmFsdWUpIHsKKwljYXNlIFZPTFVNRV9QTEFZQkFDSzoKKwkJLyogUGxheWJhY2sgaXMgYWx3YXlzIG9uIHBvcnQgMCAqLworCQl2b2wgPSBwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZTsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2b2wgJiAweGZmZmY7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gdm9sID4+IDE2ICYgMHhmZmZmOworCQlicmVhazsKKwljYXNlIFZPTFVNRV9DQVBUVVJFOgorCQkvKiBDYXB0dXJlIGlzIGFsd2F5cyBvbiBwb3J0IDEgKi8KKwkJdm9sID0gcG9ydF9pbmZvLT5jYXB0dXJlLnZvbHVtZTsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2b2wgJiAweGZmZmY7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gdm9sID4+IDE2ICYgMHhmZmZmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzKCkgaW52YWxpZCBwcml2YXRlX3ZhbHVlPSVsZFxuIiwKKwkJCV9fZnVuY19fLCBrY3RybC0+cHJpdmF0ZV92YWx1ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfcHV0X3ZvbHVtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc25kX2tjb250cm9sX2NoaXAoa2N0cmwpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnRfaW5mby0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXUzMiBuZXdfdm9sOworCXUzMiBjdXJfdm9sOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgMCB8fAorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IFNJVV9NQVhfVk9MVU1FIHx8CisJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIDwgMCB8fAorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA+IFNJVV9NQVhfVk9MVU1FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ld192b2wgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSB8CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIDw8IDE2OworCisJLyogU2VlIGNvbW1lbnQgYWJvdmUgLSBEU1AgZmlybXdhcmUgaW1wbGVtZW50YXRpb24gKi8KKwlzd2l0Y2ggKGtjdHJsLT5wcml2YXRlX3ZhbHVlKSB7CisJY2FzZSBWT0xVTUVfUExBWUJBQ0s6CisJCS8qIFBsYXliYWNrIGlzIGFsd2F5cyBvbiBwb3J0IDAgKi8KKwkJY3VyX3ZvbCA9IHBvcnRfaW5mby0+cGxheWJhY2sudm9sdW1lOworCQlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCRFZDQSwgbmV3X3ZvbCk7CisJCXBvcnRfaW5mby0+cGxheWJhY2sudm9sdW1lID0gbmV3X3ZvbDsKKwkJYnJlYWs7CisJY2FzZSBWT0xVTUVfQ0FQVFVSRToKKwkJLyogQ2FwdHVyZSBpcyBhbHdheXMgb24gcG9ydCAxICovCisJCWN1cl92b2wgPSBwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lOworCQlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCRFZDQiwgbmV3X3ZvbCk7CisJCXBvcnRfaW5mby0+Y2FwdHVyZS52b2x1bWUgPSBuZXdfdm9sOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzKCkgaW52YWxpZCBwcml2YXRlX3ZhbHVlPSVsZFxuIiwKKwkJCV9fZnVuY19fLCBrY3RybC0+cHJpdmF0ZV92YWx1ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjdXJfdm9sICE9IG5ld192b2wpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwbGF5YmFja19jb250cm9scyA9IHsKKwkuaWZhY2UJCT0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCS5pbmRleAkJPSAwLAorCS5pbmZvCQk9IHNpdV9kYWlfaW5mb192b2x1bWUsCisJLmdldAkJPSBzaXVfZGFpX2dldF92b2x1bWUsCisJLnB1dAkJPSBzaXVfZGFpX3B1dF92b2x1bWUsCisJLnByaXZhdGVfdmFsdWUJPSBWT0xVTUVfUExBWUJBQ0ssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY2FwdHVyZV9jb250cm9scyA9IHsKKwkuaWZhY2UJCT0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0gIlBDTSBDYXB0dXJlIFZvbHVtZSIsCisJLmluZGV4CQk9IDAsCisJLmluZm8JCT0gc2l1X2RhaV9pbmZvX3ZvbHVtZSwKKwkuZ2V0CQk9IHNpdV9kYWlfZ2V0X3ZvbHVtZSwKKwkucHV0CQk9IHNpdV9kYWlfcHV0X3ZvbHVtZSwKKwkucHJpdmF0ZV92YWx1ZQk9IFZPTFVNRV9DQVBUVVJFLAorfTsKKworaW50IHNpdV9pbml0X3BvcnQoaW50IHBvcnQsIHN0cnVjdCBzaXVfcG9ydCAqKnBvcnRfaW5mbywgc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhcmQtPmRldjsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybDsKKwlpbnQgcmV0OworCisJKnBvcnRfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCoqcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEqcG9ydF9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQgIyVkQCVwXG4iLCBfX2Z1bmNfXywgcG9ydCwgKnBvcnRfaW5mbyk7CisKKwkoKnBvcnRfaW5mbyktPnBsYXliYWNrLnZvbHVtZSA9IERGTFRfVk9MVU1FX0xFVkVMOworCSgqcG9ydF9pbmZvKS0+Y2FwdHVyZS52b2x1bWUgPSBERkxUX1ZPTFVNRV9MRVZFTDsKKworCS8qCisJICogQWRkIG1peGVyIHN1cHBvcnQuIFRoZSBTUEIgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIHZvbHVtZS4gQm90aAorCSAqIHBvcnRzIHVzZSB0aGUgc2FtZSBTUEIuIFRoZXJlZm9yZSwgd2Ugb25seSByZWdpc3RlciBvbmUKKwkgKiBjb250cm9sIGluc3RhbmNlIHNpbmNlIGl0IHdpbGwgYmUgdXNlZCBieSBib3RoIGNoYW5uZWxzLgorCSAqIEluIGVycm9yIGNhc2Ugd2UgY29udGludWUgd2l0aG91dCBjb250cm9scy4KKwkgKi8KKwlrY3RybCA9IHNuZF9jdGxfbmV3MSgmcGxheWJhY2tfY29udHJvbHMsICpwb3J0X2luZm8pOworCXJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjdHJsKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsCisJCQkiZmFpbGVkIHRvIGFkZCBwbGF5YmFjayBjb250cm9scyAlcCBwb3J0PSVkIGVycj0lZFxuIiwKKwkJCWtjdHJsLCBwb3J0LCByZXQpOworCisJa2N0cmwgPSBzbmRfY3RsX25ldzEoJmNhcHR1cmVfY29udHJvbHMsICpwb3J0X2luZm8pOworCXJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjdHJsKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsCisJCQkiZmFpbGVkIHRvIGFkZCBjYXB0dXJlIGNvbnRyb2xzICVwIHBvcnQ9JWQgZXJyPSVkXG4iLAorCQkJa2N0cmwsIHBvcnQsIHJldCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaXVfZnJlZV9wb3J0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCWtmcmVlKHBvcnRfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzaXVfcG9ydAkqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzdWJzdHJlYW0pOworCWludCByZXQ7CisKKwlkZXZfZGJnKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsICIlczogcG9ydD0lZEAlcFxuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHBvcnRfaW5mbyk7CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnNpdV9kYWlfcGNtX2h3KTsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ0LCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJc2l1X2RhaV9zdGFydChwb3J0X2luZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X3BvcnQJKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKworCWRldl9kYmcoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgIiVzOiBwb3J0PSVkQCVwXG4iLCBfX2Z1bmNfXywKKwkJaW5mby0+cG9ydF9pZCwgcG9ydF9pbmZvKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlwb3J0X2luZm8tPnBsYXlfY2FwICY9IH5QTEFZQkFDS19FTkFCTEVEOworCWVsc2UKKwkJcG9ydF9pbmZvLT5wbGF5X2NhcCAmPSB+Q0FQVFVSRV9FTkFCTEVEOworCisJLyogU3RvcCB0aGUgc2l1IGlmIHRoZSBvdGhlciBzdHJlYW0gaXMgbm90IHVzaW5nIGl0ICovCisJaWYgKCFwb3J0X2luZm8tPnBsYXlfY2FwKSB7CisJCS8qIGR1cmluZyBzdG1yZWFkIG9yIHN0bXdyaXRlID8gKi8KKwkJQlVHX09OKHBvcnRfaW5mby0+cGxheWJhY2sucndfZmxnIHx8IHBvcnRfaW5mby0+Y2FwdHVyZS5yd19mbGcpOworCQlzaXVfZGFpX3NwYnN0b3AocG9ydF9pbmZvKTsKKwkJc2l1X2RhaV9zdG9wKCk7CisJfQorfQorCisvKiBQQ00gcGFydCBvZiBzaXVfZGFpX3BsYXliYWNrX3ByZXBhcmUoKSAvIHNpdV9kYWlfY2FwdHVyZV9wcmVwYXJlKCkgKi8KK3N0YXRpYyBpbnQgc2l1X2RhaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzdWJzdHJlYW0pOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCWludCBzZWxmLCByZXQ7CisKKwlkZXZfZGJnKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsCisJCSIlczogcG9ydCAlZCwgYWN0aXZlIHN0cmVhbXMgJWx4LCAlZCBjaGFubmVsc1xuIiwKKwkJX19mdW5jX18sIGluZm8tPnBvcnRfaWQsIHBvcnRfaW5mby0+cGxheV9jYXAsIHJ0LT5jaGFubmVscyk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlzZWxmID0gUExBWUJBQ0tfRU5BQkxFRDsKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCX0gZWxzZSB7CisJCXNlbGYgPSBDQVBUVVJFX0VOQUJMRUQ7CisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCX0KKworCS8qIFNldCB1cCB0aGUgc2l1IGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwlpZiAoIXBvcnRfaW5mby0+cGxheV9jYXApIHsKKwkJc2l1X3N0cmVhbS0+cndfZmxnID0gMDsJLyogc3RyZWFtLWRhdGEgdHJhbnNmZXIgZmxhZyAqLworCisJCXNpdV9kYWlfc3BiQXNlbGVjdChwb3J0X2luZm8pOworCQlzaXVfZGFpX3NwYkJzZWxlY3QocG9ydF9pbmZvKTsKKworCQlzaXVfZGFpX29wZW4oc2l1X3N0cmVhbSk7CisKKwkJc2l1X2RhaV9wY21kYXRhcGFjayhzaXVfc3RyZWFtKTsKKworCQlyZXQgPSBzaXVfZGFpX3NwYnN0YXJ0KHBvcnRfaW5mbyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsOworCX0KKworCXBvcnRfaW5mby0+cGxheV9jYXAgfD0gc2VsZjsKKworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU0lVIGNhbiBzZXQgYnVzIGZvcm1hdCB0byBJMlMgLyBQQ00gLyBTUERJRiBpbmRlcGVuZGVudGx5IGZvciBwbGF5YmFjayBhbmQKKyAqIGNhcHR1cmUsIGhvd2V2ZXIsIHRoZSBjdXJyZW50IEFQSSBzZXRzIHRoZSBidXMgZm9ybWF0IGdsb2JhbGx5IGZvciBhIERBSS4KKyAqLworc3RhdGljIGludCBzaXVfZGFpX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgaWZjdGw7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiJXM6IGZtdCAweCV4IG9uIHBvcnQgJWRcbiIsCisJCV9fZnVuY19fLCBmbXQsIGluZm8tPnBvcnRfaWQpOworCisJaWYgKGluZm8tPnBvcnRfaWQgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEhlcmUgc2VsZWN0IGJldHdlZW4gSTJTIC8gUENNIC8gU1BESUYgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlmY3RsID0gc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLnBsYXliYWNrLmkycyB8CisJCQlzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0uY2FwdHVyZS5pMnM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlpZmN0bCA9IHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5wbGF5YmFjay5wY20gfAorCQkJc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLmNhcHR1cmUucGNtOworCQlicmVhazsKKwkvKiBTUERJRiBkaXNhYmxlZCAtIHNlZSBjb21tZW50IGF0IHRoZSB0b3AgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZmN0bCB8PSB+KHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5wbGF5YmFjay5tYXNrIHwKKwkJICAgc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLmNhcHR1cmUubWFzaykgJgorCQlzaXVfcmVhZDMyKGJhc2UgKyBTSVVfSUZDVEwpOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfSUZDVEwsIGlmY3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGNsa19pZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBjbGsgKnNpdV9jbGssICpwYXJlbnRfY2xrOworCWNoYXIgKnNpdV9uYW1lLCAqcGFyZW50X25hbWU7CisJaW50IHJldDsKKworCWlmIChkaXIgIT0gU05EX1NPQ19DTE9DS19JTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiJXM6IHVzaW5nIGNsb2NrICVkXG4iLCBfX2Z1bmNfXywgY2xrX2lkKTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBTSVVfQ0xLQV9QTEw6CisJCXNpdV9uYW1lID0gInNpdWFfY2xrIjsKKwkJcGFyZW50X25hbWUgPSAicGxsX2NsayI7CisJCWJyZWFrOworCWNhc2UgU0lVX0NMS0FfRVhUOgorCQlzaXVfbmFtZSA9ICJzaXVhX2NsayI7CisJCXBhcmVudF9uYW1lID0gInNpdW1ja2FfY2xrIjsKKwkJYnJlYWs7CisJY2FzZSBTSVVfQ0xLQl9QTEw6CisJCXNpdV9uYW1lID0gInNpdWJfY2xrIjsKKwkJcGFyZW50X25hbWUgPSAicGxsX2NsayI7CisJCWJyZWFrOworCWNhc2UgU0lVX0NMS0JfRVhUOgorCQlzaXVfbmFtZSA9ICJzaXViX2NsayI7CisJCXBhcmVudF9uYW1lID0gInNpdW1ja2JfY2xrIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2l1X2NsayA9IGNsa19nZXQoc2l1X2kyc19kYWkuZGV2LCBzaXVfbmFtZSk7CisJaWYgKElTX0VSUihzaXVfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2l1X2Nsayk7CisKKwlwYXJlbnRfY2xrID0gY2xrX2dldChzaXVfaTJzX2RhaS5kZXYsIHBhcmVudF9uYW1lKTsKKwlpZiAoIUlTX0VSUihwYXJlbnRfY2xrKSkgeworCQlyZXQgPSBjbGtfc2V0X3BhcmVudChzaXVfY2xrLCBwYXJlbnRfY2xrKTsKKwkJaWYgKCFyZXQpCisJCQljbGtfc2V0X3JhdGUoc2l1X2NsaywgZnJlcSk7CisJCWNsa19wdXQocGFyZW50X2Nsayk7CisJfQorCisJY2xrX3B1dChzaXVfY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzaXVfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHNpdV9kYWlfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBzaXVfZGFpX3NodXRkb3duLAorCS5wcmVwYXJlCT0gc2l1X2RhaV9wcmVwYXJlLAorCS5zZXRfc3lzY2xrCT0gc2l1X2RhaV9zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gc2l1X2RhaV9zZXRfZm10LAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHNpdV9pMnNfZGFpID0geworCS5uYW1lID0gInNoLXNpdSIsCisJLmlkID0gMCwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTYsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJIH0sCisJLm9wcyA9ICZzaXVfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChzaXVfaTJzX2RhaSk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNpdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpyZWdpb247CisJc3RydWN0IHNpdV9pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJzaXVfc3BiLmJpbiIsICZwZGV2LT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJlcWZ3OworCisJLyoKKwkgKiBMb2FkZWQgZmlybXdhcmUgaXMgImNvbnN0IiAtIHJlYWQgb25seSwgYnV0IHdlIGhhdmUgdG8gbW9kaWZ5IGl0IGluCisJICogc25kX3NpdV9zaDczNDNfc3BiQXNlbGVjdCgpIGFuZCBzbmRfc2l1X3NoNzM0M19zcGJCc2VsZWN0KCkKKwkgKi8KKwltZW1jcHkoJmluZm8tPmZ3LCBmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOworCisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZWdldHJlczsKKwl9CisKKwlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCSAgICBwZGV2LT5uYW1lKTsKKwlpZiAoIXJlZ2lvbikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTSVUgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcmVxbWVtcmVnOworCX0KKworCXJldCA9IC1FTk9NRU07CisJaW5mby0+cHJhbSA9IGlvcmVtYXAocmVzLT5zdGFydCwgUFJBTV9TSVpFKTsKKwlpZiAoIWluZm8tPnByYW0pCisJCWdvdG8gZW1hcHByYW07CisJaW5mby0+eHJhbSA9IGlvcmVtYXAocmVzLT5zdGFydCArIFhSQU1fT0ZGU0VULCBYUkFNX1NJWkUpOworCWlmICghaW5mby0+eHJhbSkKKwkJZ290byBlbWFweHJhbTsKKwlpbmZvLT55cmFtID0gaW9yZW1hcChyZXMtPnN0YXJ0ICsgWVJBTV9PRkZTRVQsIFlSQU1fU0laRSk7CisJaWYgKCFpbmZvLT55cmFtKQorCQlnb3RvIGVtYXB5cmFtOworCWluZm8tPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCArIFJFR19PRkZTRVQsIHJlc291cmNlX3NpemUocmVzKSAtCisJCQkgICAgUkVHX09GRlNFVCk7CisJaWYgKCFpbmZvLT5yZWcpCisJCWdvdG8gZW1hcHJlZzsKKworCXNpdV9pMnNfZGFpLmRldiA9ICZwZGV2LT5kZXY7CisJc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhID0gaW5mbzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmc2l1X2kyc19kYWksIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVkYWlpbml0OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmc2l1X3BsYXRmb3JtKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlc29jcmVncDsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIHJldDsKKworZXNvY3JlZ3A6CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnNpdV9pMnNfZGFpLCAxKTsKK2VkYWlpbml0OgorCWlvdW5tYXAoaW5mby0+cmVnKTsKK2VtYXByZWc6CisJaW91bm1hcChpbmZvLT55cmFtKTsKK2VtYXB5cmFtOgorCWlvdW5tYXAoaW5mby0+eHJhbSk7CitlbWFweHJhbToKKwlpb3VubWFwKGluZm8tPnByYW0pOworZW1hcHByYW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitlcmVxbWVtcmVnOgorZWdldHJlczoKK2VyZXFmdzoKKwlrZnJlZShpbmZvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnNpdV9wbGF0Zm9ybSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnNpdV9pMnNfZGFpLCAxKTsKKworCWlvdW5tYXAoaW5mby0+cmVnKTsKKwlpb3VubWFwKGluZm8tPnlyYW0pOworCWlvdW5tYXAoaW5mby0+eHJhbSk7CisJaW91bm1hcChpbmZvLT5wcmFtKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWtmcmVlKGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNpdV9kcml2ZXIgPSB7CisJLmRyaXZlciAJPSB7CisJCS5uYW1lCT0gInNoX3NpdSIsCisJfSwKKwkucHJvYmUJCT0gc2l1X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2l1X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaXVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNpdV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2l1X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2l1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNpdV9pbml0KQorbW9kdWxlX2V4aXQoc2l1X2V4aXQpCisKK01PRFVMRV9BVVRIT1IoIkNhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNINzcyMiBTSVUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jIGIvc291bmQvc29jL3NoL3NpdV9wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVmYzMwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL3NpdV9wY20uYwpAQCAtMCwwICsxLDYxNiBAQAorLyoKKyAqIHNpdV9wY20uYyAtIEFMU0EgZHJpdmVyIGZvciBSZW5lc2FzIFNINzM0MywgU0g3NzIyIFNJVSBwZXJpcGhlcmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhaS5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorI2luY2x1ZGUgPGFzbS9zaXUuaD4KKworI2luY2x1ZGUgInNpdS5oIgorCisjZGVmaW5lIEdFVF9NQVhfUEVSSU9EUyhidWZfYnl0ZXMsIHBlcmlvZF9ieXRlcykgXAorCQkJCSgoYnVmX2J5dGVzKSAvIChwZXJpb2RfYnl0ZXMpKQorI2RlZmluZSBQRVJJT0RfT0ZGU0VUKGJ1Zl9hZGRyLCBwZXJpb2RfbnVtLCBwZXJpb2RfYnl0ZXMpIFwKKwkJCQkoKGJ1Zl9hZGRyKSArICgocGVyaW9kX251bSkgKiAocGVyaW9kX2J5dGVzKSkpCisKKyNkZWZpbmUgUldGX1NUTV9SRAkJMHgwMQkJLyogUmVhZCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBSV0ZfU1RNX1dUCQkweDAyCQkvKiBXcml0ZSBpbiBwcm9ncmVzcyAqLworCitzdHJ1Y3Qgc2l1X3BvcnQgKnNpdV9wb3J0c1tTSVVfUE9SVF9OVU1dOworCisvKiB0cmFuc2ZlcnNpemUgaXMgbnVtYmVyIG9mIHUzMiBkbWEgdHJhbnNmZXJzIHBlciBwZXJpb2QgKi8KK3N0YXRpYyBpbnQgc2l1X3BjbV9zdG13cml0ZV9zdG9wKHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCXUzMiBzdGZpZm87CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIG91dHB1dCBGSUZPIGRpc2FibGUgKi8KKwlzdGZpZm8gPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1RGSUZPKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NURklGTywgc3RmaWZvICYgfjB4MGMxODBjMTgpOworCXByX2RlYnVnKCIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJIHN0Zmlmbywgc3RmaWZvICYgfjB4MGMxODBjMTgpOworCisJLyogZHVyaW5nIHN0bXdyaXRlIGNsZWFyICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fc3Rtd3JpdGVfc3RhcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKworCWlmIChzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBDdXJyZW50IHBlcmlvZCBpbiBidWZmZXIgKi8KKwlwb3J0X2luZm8tPnBsYXliYWNrLmN1cl9wZXJpb2QgPSAwOworCisJLyogZHVyaW5nIHN0bXdyaXRlIGZsYWcgc2V0ICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gUldGX1NUTV9XVDsKKworCS8qIERNQSB0cmFuc2ZlciBzdGFydCAqLworCXRhc2tsZXRfc2NoZWR1bGUoJnNpdV9zdHJlYW0tPnRhc2tsZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kbWFfdHhfY29tcGxldGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gYXJnOworCisJaWYgKCFzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybjsKKworCS8qIFVwZGF0ZSBjb21wbGV0ZWQgcGVyaW9kIGNvdW50ICovCisJaWYgKCsrc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCA+PQorCSAgICBHRVRfTUFYX1BFUklPRFMoc2l1X3N0cmVhbS0+YnVmX2J5dGVzLAorCQkJICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcykpCisJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QgPSAwOworCisJcHJfZGVidWcoIiVzOiBkb25lIHBlcmlvZCAjJWQgKCV1LyV1IGJ5dGVzKSwgY29va2llICVkXG4iLAorCQlfX2Z1bmNfXywgc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCwKKwkJc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCAqIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcywKKwkJc2l1X3N0cmVhbS0+YnVmX2J5dGVzLCBzaXVfc3RyZWFtLT5jb29raWUpOworCisJdGFza2xldF9zY2hlZHVsZSgmc2l1X3N0cmVhbS0+dGFza2xldCk7CisKKwkvKiBOb3RpZnkgYWxzYTogYSBwZXJpb2QgaXMgZG9uZSAqLworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc2l1X3N0cmVhbS0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3dyX3NldChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbywKKwkJCSAgZG1hX2FkZHJfdCBidWZmLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHNpdV9zdHJlYW0tPnN1YnN0cmVhbTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwl1MzIgc3RmaWZvOworCisJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCXNnX3NldF9wYWdlKCZzZywgcGZuX3RvX3BhZ2UoUEZOX0RPV04oYnVmZikpLAorCQkgICAgc2l6ZSwgb2Zmc2V0X2luX3BhZ2UoYnVmZikpOworCXNnX2RtYV9hZGRyZXNzKCZzZykgPSBidWZmOworCisJZGVzYyA9IHNpdV9zdHJlYW0tPmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coc2l1X3N0cmVhbS0+Y2hhbiwKKwkJJnNnLCAxLCBETUFfVE9fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCWlmICghZGVzYykgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGRtYSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGVzYy0+Y2FsbGJhY2sgPSBzaXVfZG1hX3R4X2NvbXBsZXRlOworCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gc2l1X3N0cmVhbTsKKwljb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc3VibWl0IGEgZG1hIHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIGNvb2tpZTsKKwl9CisKKwlzaXVfc3RyZWFtLT50eF9kZXNjID0gZGVzYzsKKwlzaXVfc3RyZWFtLT5jb29raWUgPSBjb29raWU7CisKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzaXVfc3RyZWFtLT5jaGFuKTsKKworCS8qIG9ubHkgb3V0cHV0IEZJRk8gZW5hYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHN0ZmlmbyB8IChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MGMxODBjMTgpKTsKKwlkZXZfZGJnKGRldiwgIiVzOiBTVEZJRk8gJXggLT4gJXhcbiIsIF9fZnVuY19fLAorCQlzdGZpZm8sIHN0ZmlmbyB8IChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MGMxODBjMTgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fcmRfc2V0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvLAorCQkJICBkbWFfYWRkcl90IGJ1ZmYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW07CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTMyIHN0ZmlmbzsKKworCWRldl9kYmcoZGV2LCAiJXM6ICV1QCVsbHhcbiIsIF9fZnVuY19fLCBzaXplLCAodW5zaWduZWQgbG9uZyBsb25nKWJ1ZmYpOworCisJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCXNnX3NldF9wYWdlKCZzZywgcGZuX3RvX3BhZ2UoUEZOX0RPV04oYnVmZikpLAorCQkgICAgc2l6ZSwgb2Zmc2V0X2luX3BhZ2UoYnVmZikpOworCXNnX2RtYV9hZGRyZXNzKCZzZykgPSBidWZmOworCisJZGVzYyA9IHNpdV9zdHJlYW0tPmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coc2l1X3N0cmVhbS0+Y2hhbiwKKwkJJnNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisJaWYgKCFkZXNjKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGVzYy0+Y2FsbGJhY2sgPSBzaXVfZG1hX3R4X2NvbXBsZXRlOworCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gc2l1X3N0cmVhbTsKKwljb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc3VibWl0IGRtYSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIGNvb2tpZTsKKwl9CisKKwlzaXVfc3RyZWFtLT50eF9kZXNjID0gZGVzYzsKKwlzaXVfc3RyZWFtLT5jb29raWUgPSBjb29raWU7CisKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzaXVfc3RyZWFtLT5jaGFuKTsKKworCS8qIG9ubHkgaW5wdXQgRklGTyBlbmFibGUgKi8KKwlzdGZpZm8gPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1RGSUZPKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NURklGTywgc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTykgfAorCQkgICAgKHBvcnRfaW5mby0+c3RmaWZvICYgMHgxMzA3MTMwNykpOworCWRldl9kYmcoZGV2LCAiJXM6IFNURklGTyAleCAtPiAleFxuIiwgX19mdW5jX18sCisJCXN0Zmlmbywgc3RmaWZvIHwgKHBvcnRfaW5mby0+c3RmaWZvICYgMHgxMzA3MTMwNykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9pb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9IChzdHJ1Y3Qgc2l1X3N0cmVhbSAqKWRhdGE7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW07CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKworCWRldl9kYmcoZGV2LCAiJXM6IGZsYWdzICV4XG4iLCBfX2Z1bmNfXywgc2l1X3N0cmVhbS0+cndfZmxnKTsKKworCWlmICghc2l1X3N0cmVhbS0+cndfZmxnKSB7CisJCWRldl9kYmcoZGV2LCAiJXM6IHN0cmVhbSBpbmFjdGl2ZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgeworCQlkbWFfYWRkcl90IGJ1ZmY7CisJCXNpemVfdCBjb3VudDsKKwkJdTggKnZpcnQ7CisKKwkJYnVmZiA9IChkbWFfYWRkcl90KVBFUklPRF9PRkZTRVQocnQtPmRtYV9hZGRyLAorCQkJCQkJc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCwKKwkJCQkJCXNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJCXZpcnQgPSBQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYXJlYSwKKwkJCQkgICAgIHNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkJICAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCQljb3VudCA9IHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlczsKKworCQkvKiBETUEgdHJhbnNmZXIgc3RhcnQgKi8KKwkJc2l1X3BjbV9yZF9zZXQocG9ydF9pbmZvLCBidWZmLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJc2l1X3BjbV93cl9zZXQocG9ydF9pbmZvLAorCQkJICAgICAgIChkbWFfYWRkcl90KVBFUklPRF9PRkZTRVQocnQtPmRtYV9hZGRyLAorCQkJCQkJc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCwKKwkJCQkJCXNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyksCisJCQkgICAgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwl9Cit9CisKKy8qIENhcHR1cmUgKi8KK3N0YXRpYyBpbnQgc2l1X3BjbV9zdG1yZWFkX3N0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCWlmIChzaXVfc3RyZWFtLT54ZmVyX2NudCA+IDB4MTAwMDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIEN1cnJlbnQgcGVyaW9kIGluIGJ1ZmZlciAqLworCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QgPSAwOworCisJLyogZHVyaW5nIHN0bXJlYWQgZmxhZyBzZXQgKi8KKwlzaXVfc3RyZWFtLT5yd19mbGcgPSBSV0ZfU1RNX1JEOworCisJdGFza2xldF9zY2hlZHVsZSgmc2l1X3N0cmVhbS0+dGFza2xldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3N0bXJlYWRfc3RvcChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNpdV9zdHJlYW0tPnN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJdTMyIHN0ZmlmbzsKKworCWlmICghc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogaW5wdXQgRklGTyBkaXNhYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHN0ZmlmbyAmIH4weDEzMDcxMzA3KTsKKwlkZXZfZGJnKGRldiwgIiVzOiBTVEZJRk8gJXggLT4gJXhcbiIsIF9fZnVuY19fLAorCQlzdGZpZm8sIHN0ZmlmbyAmIH4weDEzMDcxMzA3KTsKKworCS8qIGR1cmluZyBzdG1yZWFkIGZsYWcgY2xlYXIgKi8KKwlzaXVfc3RyZWFtLT5yd19mbGcgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcywKKwkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZFxuIiwgX19mdW5jX18sIGluZm8tPnBvcnRfaWQpOworCisJcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHNzLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwgInNuZF9wY21fbGliX21hbGxvY19wYWdlcygpIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpdV9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X3BvcnQJKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwllbHNlCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZFxuIiwgX19mdW5jX18sIGluZm8tPnBvcnRfaWQpOworCisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3MpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW0gPSBzbGF2ZTsKKworCXByX2RlYnVnKCIlczogc2xhdmUgSUQgJWRcbiIsIF9fZnVuY19fLCBwYXJhbS0+c2xhdmVfaWQpOworCisJaWYgKHVubGlrZWx5KHBhcmFtLT5kbWFfZGV2ICE9IGNoYW4tPmRldmljZS0+ZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJY2hhbi0+cHJpdmF0ZSA9IHBhcmFtOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCS8qIFBsYXliYWNrIC8gQ2FwdHVyZSAqLworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCXUzMiBwb3J0ID0gaW5mby0+cG9ydF9pZDsKKwlzdHJ1Y3Qgc2l1X3BsYXRmb3JtICpwZGF0YSA9IHNpdV9pMnNfZGFpLmRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW07CisKKwlkbWFfY2FwX3plcm8obWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCWRldl9kYmcoZGV2LCAiJXMsIHBvcnQ9JWRAJXBcbiIsIF9fZnVuY19fLCBwb3J0LCBwb3J0X2luZm8pOworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJCXBhcmFtID0gJnNpdV9zdHJlYW0tPnBhcmFtOworCQlwYXJhbS0+c2xhdmVfaWQgPSBwb3J0ID8gU0hETUFfU0xBVkVfU0lVQl9UWCA6CisJCQlTSERNQV9TTEFWRV9TSVVBX1RYOworCX0gZWxzZSB7CisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCQlwYXJhbSA9ICZzaXVfc3RyZWFtLT5wYXJhbTsKKwkJcGFyYW0tPnNsYXZlX2lkID0gcG9ydCA/IFNIRE1BX1NMQVZFX1NJVUJfUlggOgorCQkJU0hETUFfU0xBVkVfU0lVQV9SWDsKKwl9CisKKwlwYXJhbS0+ZG1hX2RldiA9IHBkYXRhLT5kbWFfZGV2OworCS8qIEdldCBETUEgY2hhbm5lbCAqLworCXNpdV9zdHJlYW0tPmNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgcGFyYW0pOworCWlmICghc2l1X3N0cmVhbS0+Y2hhbikgeworCQlkZXZfZXJyKGRldiwgIkRNQSBjaGFubmVsIGFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc2l1X3N0cmVhbS0+c3Vic3RyZWFtID0gc3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZFxuIiwgX19mdW5jX18sIGluZm8tPnBvcnRfaWQpOworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCWVsc2UKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwlkbWFfcmVsZWFzZV9jaGFubmVsKHNpdV9zdHJlYW0tPmNoYW4pOworCXNpdV9zdHJlYW0tPmNoYW4gPSBOVUxMOworCisJc2l1X3N0cmVhbS0+c3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lIAkqcnQgPSBzcy0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKwlzbmRfcGNtX3NmcmFtZXNfdCB4ZmVyX2NudDsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwllbHNlCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJcnQgPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlzaXVfc3RyZWFtLT5idWZfYnl0ZXMgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3MpOworCXNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzcyk7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0PSVkLCAlZCBjaGFubmVscywgcGVyaW9kPSV1IGJ5dGVzXG4iLCBfX2Z1bmNfXywKKwkJaW5mby0+cG9ydF9pZCwgcnQtPmNoYW5uZWxzLCBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCisJLyogV2Ugb25seSBzdXBwb3J0IGJ1ZmZlcnMgdGhhdCBhcmUgbXVsdGlwbGVzIG9mIHRoZSBwZXJpb2QgKi8KKwlpZiAoc2l1X3N0cmVhbS0+YnVmX2J5dGVzICUgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKSB7CisJCWRldl9lcnIoZGV2LCAiJXMoKSAtIGJ1ZmZlcj0lZCBub3QgbXVsdGlwbGUgb2YgcGVyaW9kPSVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJICAgICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXhmZXJfY250ID0gYnl0ZXNfdG9fZnJhbWVzKHJ0LCBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCWlmICgheGZlcl9jbnQgfHwgeGZlcl9jbnQgPiAweDEwMDAwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJc2l1X3N0cmVhbS0+Zm9ybWF0ID0gcnQtPmZvcm1hdDsKKwlzaXVfc3RyZWFtLT54ZmVyX2NudCA9IHhmZXJfY250OworCisJZGV2X2RiZyhkZXYsICJwb3J0PSVkIGJ1Zj0lbHggYnVmX2J5dGVzPSVkIHBlcmlvZF9ieXRlcz0lZCAiCisJCSJmb3JtYXQ9JWQgY2hhbm5lbHM9JWQgeGZlcl9jbnQ9JWRcbiIsIGluZm8tPnBvcnRfaWQsCisJCSh1bnNpZ25lZCBsb25nKXJ0LT5kbWFfYWRkciwgc2l1X3N0cmVhbS0+YnVmX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMsCisJCXNpdV9zdHJlYW0tPmZvcm1hdCwgcnQtPmNoYW5uZWxzLCAoaW50KXhmZXJfY250KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzLCBpbnQgY21kKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZEAlcCwgY21kPSVkXG4iLCBfX2Z1bmNfXywKKwkJaW5mby0+cG9ydF9pZCwgcG9ydF9pbmZvLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJcmV0ID0gc2l1X3BjbV9zdG13cml0ZV9zdGFydChwb3J0X2luZm8pOworCQllbHNlCisJCQlyZXQgPSBzaXVfcGNtX3N0bXJlYWRfc3RhcnQocG9ydF9pbmZvKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKGRldiwgIiVzOiBzdGFydCBmYWlsZWQgb24gcG9ydD0lZFxuIiwKKwkJCQkgX19mdW5jX18sIGluZm8tPnBvcnRfaWQpOworCisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNpdV9wY21fc3Rtd3JpdGVfc3RvcChwb3J0X2luZm8pOworCQllbHNlCisJCQlzaXVfcGNtX3N0bXJlYWRfc3RvcChwb3J0X2luZm8pOworCQlyZXQgPSAwOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMoKSB1bnN1cHBvcnRlZCBjbWQ9JWRcbiIsIF9fZnVuY19fLCBjbWQpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTbyBmYXIgb25seSByZXNvbHV0aW9uIG9mIG9uZSBwZXJpb2QgaXMgc3VwcG9ydGVkLCBzdWJqZWN0IHRvIGV4dGVuZGluZyB0aGUKKyAqIGRtYW5naW5lIEFQSQorICovCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc2l1X3BjbV9wb2ludGVyX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHNzLT5ydW50aW1lOworCXNpemVfdCBwdHI7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCS8qCisJICogcHRyIGlzIHRoZSBvZmZzZXQgaW50byB0aGUgYnVmZmVyIHdoZXJlIHRoZSBkbWEgaXMgY3VycmVudGx5IGF0LiBXZQorCSAqIGNoZWNrIGlmIHRoZSBkbWEgYnVmZmVyIGhhcyBqdXN0IHdyYXBwZWQuCisJICovCisJcHRyID0gUEVSSU9EX09GRlNFVChydC0+ZG1hX2FkZHIsCisJCQkgICAgc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCwKKwkJCSAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpIC0gcnQtPmRtYV9hZGRyOworCisJZGV2X2RiZyhkZXYsCisJCSIlczogcG9ydD0lZCwgZXZlbnRzICV4LCBGU1RTICV4LCB4ZmVycmVkICV1LyV1LCBjb29raWUgJWRcbiIsCisJCV9fZnVuY19fLCBpbmZvLT5wb3J0X2lkLCBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfRVZOVEMpLAorCQlzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU0JGU1RTKSwgcHRyLCBzaXVfc3RyZWFtLT5idWZfYnl0ZXMsCisJCXNpdV9zdHJlYW0tPmNvb2tpZSk7CisKKwlpZiAocHRyID49IHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcykKKwkJcHRyID0gMDsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3MtPnJ1bnRpbWUsIHB0cik7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJLyogY2FyZC0+ZGV2ID09IHNvY2Rldi0+ZGV2LCBzZWUgc25kX3NvY19uZXdfcGNtcygpICovCisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoY2FyZC0+ZGV2KTsKKwlpbnQgcmV0OworCWludCBpOworCisJLyogcGRldi0+aWQgc2VsZWN0cyBiZXR3ZWVuIFNJVUEgYW5kIFNJVUIgKi8KKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID49IFNJVV9QT1JUX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvLT5wb3J0X2lkID0gcGRldi0+aWQ7CisKKwkvKgorCSAqIFdoaWxlIHRoZSBzaXUgaGFzIDIgcG9ydHMsIG9ubHkgb25lIHBvcnQgY2FuIGJlIG9uIGF0IGEgdGltZSAob25seSAxCisJICogU1BCKS4gU28gZmFyIGFsbCB0aGUgYm9hcmRzIHVzaW5nIHRoZSBzaXUgaGFkIG9ubHkgb25lIG9mIHRoZSBwb3J0cworCSAqIHdpcmVkIHRvIGEgY29kZWMuIFRvIHNpbXBsaWZ5IHRoaW5ncywgd2Ugb25seSByZWdpc3RlciBvbmUgcG9ydCB3aXRoCisJICogYWxzYS4gSW4gY2FzZSBib3RoIHBvcnRzIGFyZSBuZWVkZWQsIGl0IHNob3VsZCBiZSBjaGFuZ2VkIGhlcmUKKwkgKi8KKwlmb3IgKGkgPSBwZGV2LT5pZDsgaSA8IHBkZXYtPmlkICsgMTsgaSsrKSB7CisJCXN0cnVjdCBzaXVfcG9ydCAqKnBvcnRfaW5mbyA9ICZzaXVfcG9ydHNbaV07CisKKwkJcmV0ID0gc2l1X2luaXRfcG9ydChpLCBwb3J0X2luZm8sIGNhcmQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sCisJCQkJU05EUlZfRE1BX1RZUEVfREVWLCBOVUxMLAorCQkJCVNJVV9CVUZGRVJfQllURVNfTUFYLCBTSVVfQlVGRkVSX0JZVEVTX01BWCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwKKwkJCSAgICAgICAic25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCgpIGVycj0lZCIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCSgqcG9ydF9pbmZvKS0+cGNtID0gcGNtOworCisJCS8qIElPIHRhc2tsZXRzICovCisJCXRhc2tsZXRfaW5pdCgmKCpwb3J0X2luZm8pLT5wbGF5YmFjay50YXNrbGV0LCBzaXVfaW9fdGFza2xldCwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJigqcG9ydF9pbmZvKS0+cGxheWJhY2spOworCQl0YXNrbGV0X2luaXQoJigqcG9ydF9pbmZvKS0+Y2FwdHVyZS50YXNrbGV0LCBzaXVfaW9fdGFza2xldCwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJigqcG9ydF9pbmZvKS0+Y2FwdHVyZSk7CisJfQorCisJZGV2X2luZm8oY2FyZC0+ZGV2LCAiU3VwZXJIIFNJVSBkcml2ZXIgaW5pdGlhbGl6ZWQuXG4iKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlzaXVfZnJlZV9wb3J0KHNpdV9wb3J0c1twZGV2LT5pZF0pOworCWRldl9lcnIoY2FyZC0+ZGV2LCAiU0lVOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZS5cbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UocGNtLT5jYXJkLT5kZXYpOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRzW3BkZXYtPmlkXTsKKworCXRhc2tsZXRfa2lsbCgmcG9ydF9pbmZvLT5jYXB0dXJlLnRhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmcG9ydF9pbmZvLT5wbGF5YmFjay50YXNrbGV0KTsKKworCXNpdV9mcmVlX3BvcnQocG9ydF9pbmZvKTsKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKKworCWRldl9kYmcocGNtLT5jYXJkLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNpdV9wY21fb3BzID0geworCS5vcGVuCQk9IHNpdV9wY21fb3BlbiwKKwkuY2xvc2UJCT0gc2l1X3BjbV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHNpdV9wY21faHdfcGFyYW1zLAorCS5od19mcmVlCT0gc2l1X3BjbV9od19mcmVlLAorCS5wcmVwYXJlCT0gc2l1X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc2l1X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gc2l1X3BjbV9wb2ludGVyX2RtYSwKK307CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtIHNpdV9wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAic2l1LWF1ZGlvIiwKKwkucGNtX29wcyAJPSAmc2l1X3BjbV9vcHMsCisJLnBjbV9uZXcJPSBzaXVfcGNtX25ldywKKwkucGNtX2ZyZWUJPSBzaXVfcGNtX2ZyZWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc2l1X3BsYXRmb3JtKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwppbmRleCBkMjUwNWU4Li41ODY5ZGMzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKKysrIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCkBAIC0xNSw2ICsxNSw3NCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzRfMTJfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGNhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY180XzEyX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXU4IGRhdGFbMl07CisJaW50IHJldDsKKworCUJVR19PTihjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpOworCisJZGF0YVswXSA9IChyZWcgPDwgNCkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDBmKTsKKwlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7CisKKwlpZiAocmVnIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQljYWNoZVtyZWddID0gdmFsdWU7CisKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CisJaWYgKHJldCA9PSAyKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgc25kX3NvY180XzEyX3NwaV93cml0ZSh2b2lkICpjb250cm9sX2RhdGEsIGNvbnN0IGNoYXIgKmRhdGEsCisJCQkJIGludCBsZW4pCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggbXNnWzJdOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKworCW1zZ1swXSA9IGRhdGFbMV07CisJbXNnWzFdID0gZGF0YVswXTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisKKwl0LnR4X2J1ZiA9ICZtc2dbMF07CisJdC5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXNwaV9zeW5jKHNwaSwgJm0pOworCisJcmV0dXJuIGxlbjsKK30KKyNlbHNlCisjZGVmaW5lIHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY183XzlfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMzgsNiArMTA2LDEyIEBACiAKIAlpZiAocmVnIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplKQogCQljYWNoZVtyZWddID0gdmFsdWU7CisKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CiAJaWYgKHJldCA9PSAyKQogCQlyZXR1cm4gMDsKQEAgLTkxLDYgKzE2NSwxMSBAQAogCWlmIChyZWcgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCiAJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKIAorCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKwogCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikgPT0gMikKIAkJcmV0dXJuIDA7CiAJZWxzZQpAQCAtMTE5LDYgKzE5OCwxMSBAQAogCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSkKIAkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKIAorCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKwogCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMykKIAkJcmV0dXJuIDA7CiAJZWxzZQpAQCAtMTMxLDEwICsyMTUsMTQgQEAKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAogCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplIHx8Ci0JICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpCisJICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKKwkJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwotCWVsc2UKKwl9IGVsc2UgewogCQlyZXR1cm4gY2FjaGVbcmVnXTsKKwl9CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCkBAIC0xNzEsNiArMjU5LDExNCBAQAogI2RlZmluZSBzbmRfc29jXzhfMTZfcmVhZF9pMmMgTlVMTAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfMTZfOF9yZWFkX2kyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCSAgdW5zaWduZWQgaW50IHIpCit7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwl1MTYgcmVnID0gcjsKKwl1OCBkYXRhOworCWludCByZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwkvKiBXcml0ZSByZWdpc3RlciAqLworCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwl4ZmVyWzBdLmZsYWdzID0gMDsKKwl4ZmVyWzBdLmxlbiA9IDI7CisJeGZlclswXS5idWYgPSAodTggKikmcmVnOworCisJLyogUmVhZCBkYXRhICovCisJeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOworCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwl4ZmVyWzFdLmxlbiA9IDE7CisJeGZlclsxXS5idWYgPSAmZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKyNlbHNlCisjZGVmaW5lIHNuZF9zb2NfMTZfOF9yZWFkX2kyYyBOVUxMCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzhfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJcmVnICY9IDB4ZmY7CisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBzbmRfc29jXzE2Xzhfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJdTggZGF0YVszXTsKKwlpbnQgcmV0OworCisJQlVHX09OKGNvZGVjLT52b2xhdGlsZV9yZWdpc3Rlcik7CisKKwlkYXRhWzBdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisJZGF0YVsxXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsyXSA9IHZhbHVlOworCisJcmVnICY9IDB4ZmY7CisJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpOworCWlmIChyZXQgPT0gMykKKwkJcmV0dXJuIDA7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IHNuZF9zb2NfMTZfOF9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1szXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisJbXNnWzJdID0gZGF0YVsyXTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisKKwl0LnR4X2J1ZiA9ICZtc2dbMF07CisJdC5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXNwaV9zeW5jKHNwaSwgJm0pOworCisJcmV0dXJuIGxlbjsKK30KKyNlbHNlCisjZGVmaW5lIHNuZF9zb2NfMTZfOF9zcGlfd3JpdGUgTlVMTAorI2VuZGlmCisKKwogc3RhdGljIHN0cnVjdCB7CiAJaW50IGFkZHJfYml0czsKIAlpbnQgZGF0YV9iaXRzOwpAQCAtMTgwLDkgKzM3NiwxNCBAQAogCXVuc2lnbmVkIGludCAoKmkyY19yZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogfSBpb190eXBlc1tdID0gewogCXsKKwkJLmFkZHJfYml0cyA9IDQsIC5kYXRhX2JpdHMgPSAxMiwKKwkJLndyaXRlID0gc25kX3NvY180XzEyX3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfNF8xMl9yZWFkLAorCQkuc3BpX3dyaXRlID0gc25kX3NvY180XzEyX3NwaV93cml0ZSwKKwl9LAorCXsKIAkJLmFkZHJfYml0cyA9IDcsIC5kYXRhX2JpdHMgPSA5LAogCQkud3JpdGUgPSBzbmRfc29jXzdfOV93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzdfOV9yZWFkLAotCQkuc3BpX3dyaXRlID0gc25kX3NvY183Xzlfc3BpX3dyaXRlIAorCQkuc3BpX3dyaXRlID0gc25kX3NvY183Xzlfc3BpX3dyaXRlLAogCX0sCiAJewogCQkuYWRkcl9iaXRzID0gOCwgLmRhdGFfYml0cyA9IDgsCkBAIC0xOTMsNiArMzk0LDEyIEBACiAJCS53cml0ZSA9IHNuZF9zb2NfOF8xNl93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzhfMTZfcmVhZCwKIAkJLmkyY19yZWFkID0gc25kX3NvY184XzE2X3JlYWRfaTJjLAogCX0sCisJeworCQkuYWRkcl9iaXRzID0gMTYsIC5kYXRhX2JpdHMgPSA4LAorCQkud3JpdGUgPSBzbmRfc29jXzE2Xzhfd3JpdGUsIC5yZWFkID0gc25kX3NvY18xNl84X3JlYWQsCisJCS5pMmNfcmVhZCA9IHNuZF9zb2NfMTZfOF9yZWFkX2kyYywKKwkJLnNwaV93cml0ZSA9IHNuZF9zb2NfMTZfOF9zcGlfd3JpdGUsCisJfSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCAwYTY0NDBjLi5hMDNiYWM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTMwLDYgKzEzMCwyOSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY29kZWNfcmVnLCAwNDQ0LCBjb2RlY19yZWdfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHBtZG93bl90aW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBjYXJkLT5wbWRvd25fdGltZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBtZG93bl90aW1lX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCisJc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmY2FyZC0+cG1kb3duX3RpbWUpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG1kb3duX3RpbWUsIDA2NDQsIHBtZG93bl90aW1lX3Nob3csIHBtZG93bl90aW1lX3NldCk7CisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyBpbnQgY29kZWNfcmVnX29wZW5fZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTU0Miw3ICs1NjUsNyBAQAogCQkvKiBzdGFydCBkZWxheWVkIHBvcCB3cSBoZXJlIGZvciBwbGF5YmFjayBzdHJlYW1zICovCiAJCWNvZGVjX2RhaS0+cG9wX3dhaXQgPSAxOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNhcmQtPmRlbGF5ZWRfd29yaywKLQkJCW1zZWNzX3RvX2ppZmZpZXMocG1kb3duX3RpbWUpKTsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoY2FyZC0+cG1kb3duX3RpbWUpKTsKIAl9IGVsc2UgewogCQkvKiBjYXB0dXJlIHN0cmVhbXMgY2FuIGJlIHBvd2VyZWQgZG93biBub3cgKi8KIAkJc25kX3NvY19kYXBtX3N0cmVhbV9ldmVudChjb2RlYywKQEAgLTk0MCw2ICs5NjMsMTIgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPmRhaV9saW5rWzBdLmNwdV9kYWk7CiAKKwkvKiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBzb2MgZGV2aWNlIGZhaWxlZCwgdGhlcmUgaXMgbm8gY29kZWMKKwkgKiBhc3NvY2lhdGVkIHdpdGggaXQuIEp1c3QgYmFpbCBvdXQgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghY2FyZC0+Y29kZWMpCisJCXJldHVybiAwOworCiAJLyogQUM5NyBkZXZpY2VzIG1pZ2h0IGhhdmUgb3RoZXIgZHJpdmVycyBoYW5naW5nIG9mZiB0aGVtIHNvCiAJICogbmVlZCB0byByZXN1bWUgaW1tZWRpYXRlbHkuICBPdGhlciBkcml2ZXJzIGRvbid0IGhhdmUgdGhhdAogCSAqIHByb2JsZW0gYW5kIG1heSB0YWtlIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRpbWUgdG8gcmVzdW1lCkBAIC0xMDM5LDYgKzEwNjgsOCBAQAogCWRldl9kYmcoY2FyZC0+ZGV2LCAiQWxsIGNvbXBvbmVudHMgcHJlc2VudCwgaW5zdGFudGlhdGluZ1xuIik7CiAKIAkvKiBGb3VuZCBldmVyeXRoaW5nLCBicmluZyBpdCB1cCAqLworCWNhcmQtPnBtZG93bl90aW1lID0gcG1kb3duX3RpbWU7CisKIAlpZiAoY2FyZC0+cHJvYmUpIHsKIAkJcmV0ID0gY2FyZC0+cHJvYmUocGRldik7CiAJCWlmIChyZXQgPCAwKQpAQCAtMTEyMiw2ICsxMTUzLDEwIEBACiAJaWYgKHJldCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgZGFwbSBzeXNmcyBlbnRyaWVzXG4iKTsKIAorCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShjYXJkLT5zb2NkZXYtPmRldiwgJmRldl9hdHRyX3BtZG93bl90aW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXNvYzogZmFpbGVkIHRvIGFkZCBwbWRvd25fdGltZSBzeXNmc1xuIik7CisKIAlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoY2FyZC0+c29jZGV2LT5kZXYsICZkZXZfYXR0cl9jb2RlY19yZWcpOwogCWlmIChyZXQgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIHN5c2ZzIGZpbGVzXG4iKTsKQEAgLTEyNzYsOCArMTMxMSw4IEBACiAJY29kZWNfZGFpLT5jb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgY2xpZW50IGFuZCBpbnRlcmZhY2UgaHcgY2FwYWJpbGl0aWVzICovCi0Jc3ByaW50ZihuZXdfbmFtZSwgIiVzICVzLSVkIiwgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCBjb2RlY19kYWktPm5hbWUsCi0JCW51bSk7CisJc25wcmludGYobmV3X25hbWUsIHNpemVvZihuZXdfbmFtZSksICIlcyAlcy0lZCIsCisJCSBkYWlfbGluay0+c3RyZWFtX25hbWUsIGNvZGVjX2RhaS0+bmFtZSwgbnVtKTsKIAogCWlmIChjb2RlY19kYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikKIAkJcGxheWJhY2sgPSAxOwpAQCAtMTM2OCw2ICsxNDAzLDcgQEAKIAogCWNvZGVjLT5hYzk3LT5idXMtPm9wcyA9IG9wczsKIAljb2RlYy0+YWM5Ny0+bnVtID0gbnVtOworCWNvZGVjLT5kZXYgPSAmY29kZWMtPmFjOTctPmRldjsKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDI3LDkgKzE0NjMsOSBAQAogICoKICAqIFJldHVybnMgMSBmb3IgY2hhbmdlIGVsc2UgMC4KICAqLwotc3RhdGljIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzX2xvY2tlZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBpbnQgbWFzaywKLQkJCQl1bnNpZ25lZCBpbnQgdmFsdWUpCitpbnQgc25kX3NvY191cGRhdGVfYml0c19sb2NrZWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgaW50IG1hc2ssCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbHVlKQogewogCWludCBjaGFuZ2U7CiAKQEAgLTE0MzksNiArMTQ3NSw3IEBACiAKIAlyZXR1cm4gY2hhbmdlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY191cGRhdGVfYml0c19sb2NrZWQpOwogCiAvKioKICAqIHNuZF9zb2NfdGVzdF9iaXRzIC0gdGVzdCByZWdpc3RlciBmb3IgY2hhbmdlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDBkMjk0ZWYuLjZjMzM1MTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC00NCwxMyArNDQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi0vKiBkZWJ1ZyAqLwotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGR1bXBfZGFwbShjb2RlYywgYWN0aW9uKSBkYmdfZHVtcF9kYXBtKGNvZGVjLCBhY3Rpb24pCi0jZWxzZQotI2RlZmluZSBkdW1wX2RhcG0oY29kZWMsIGFjdGlvbikKLSNlbmRpZgotCiAvKiBkYXBtIHBvd2VyIHNlcXVlbmNlcyAtIG1ha2UgdGhpcyBwZXIgY29kZWMgaW4gdGhlIGZ1dHVyZSAqLwogc3RhdGljIGludCBkYXBtX3VwX3NlcVtdID0gewogCVtzbmRfc29jX2RhcG1fcHJlXSA9IDAsCkBAIC03MzksNiArNzMyLDggQEAKIAkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqYiwKIAkJCSAgICBpbnQgc29ydFtdKQogeworCWlmIChhLT5jb2RlYyAhPSBiLT5jb2RlYykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWEgLSAodW5zaWduZWQgbG9uZyliOwogCWlmIChzb3J0W2EtPmlkXSAhPSBzb3J0W2ItPmlkXSkKIAkJcmV0dXJuIHNvcnRbYS0+aWRdIC0gc29ydFtiLT5pZF07CiAJaWYgKGEtPnJlZyAhPSBiLT5yZWcpCkBAIC0xMDE3LDEzICsxMDEyLDI4IEBACiAJCQlzeXNfcG93ZXIgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1A6Ci0JCQlzeXNfcG93ZXIgPSBjb2RlYy0+Ymlhc19sZXZlbCAhPSBTTkRfU09DX0JJQVNfU1RBTkRCWTsKKwkJCXN3aXRjaCAoY29kZWMtPmJpYXNfbGV2ZWwpIHsKKwkJCQljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQkJCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJCQkJc3lzX3Bvd2VyID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3lzX3Bvd2VyID0gMTsKKwkJCQkJYnJlYWs7CisJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAJfQogCisJaWYgKHN5c19wb3dlciAmJiBjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsCisJCQkJCQkgIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcHJfZXJyKCJGYWlsZWQgdG8gdHVybiBvbiBiaWFzOiAlZFxuIiwgcmV0KTsKKwl9CisKIAkvKiBJZiB3ZSdyZSBjaGFuZ2luZyB0byBhbGwgb24gb3IgYWxsIG9mZiB0aGVuIHByZXBhcmUgKi8KIAlpZiAoKHN5c19wb3dlciAmJiBjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgfHwKIAkgICAgKCFzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKSkgewpAQCAtMTA0Nyw2ICsxMDU3LDE0IEBACiAJCQlwcl9lcnIoIkZhaWxlZCB0byBhcHBseSBzdGFuZGJ5IGJpYXM6ICVkXG4iLCByZXQpOwogCX0KIAorCS8qIElmIHdlJ3JlIGluIHN0YW5kYnkgYW5kIGNhbiBzdXBwb3J0IGJpYXMgb2ZmIHRoZW4gZG8gdGhhdCAqLworCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSAmJgorCSAgICBjb2RlYy0+aWRsZV9iaWFzX29mZikgeworCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc29jZGV2LCBTTkRfU09DX0JJQVNfT0ZGKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcHJfZXJyKCJGYWlsZWQgdG8gdHVybiBvZmYgYmlhczogJWRcbiIsIHJldCk7CisJfQorCiAJLyogSWYgd2UganVzdCBwb3dlcmVkIHVwIHRoZW4gbW92ZSB0byBhY3RpdmUgYmlhcyAqLwogCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfUFJFUEFSRSAmJiBzeXNfcG93ZXIpIHsKIAkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHNvY2RldiwKQEAgLTEwNjEsNjYgKzEwNzksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgREVCVUcKLXN0YXRpYyB2b2lkIGRiZ19kdW1wX2RhcG0oc3RydWN0IHNuZF9zb2NfY29kZWMqIGNvZGVjLCBjb25zdCBjaGFyICphY3Rpb24pCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwID0gTlVMTDsKLQlpbnQgaW4sIG91dDsKLQotCXByaW50aygiREFQTSAlcyAlc1xuIiwgY29kZWMtPm5hbWUsIGFjdGlvbik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7Ci0KLQkJLyogb25seSBkaXNwbGF5IHdpZGdldHMgdGhhdCBlZmZlY3Qgcm91dGluZyAqLwotCQlzd2l0Y2ggKHctPmlkKSB7Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3ByZToKLQkJY2FzZSBzbmRfc29jX2RhcG1fcG9zdDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fdm1pZDoKLQkJCWNvbnRpbnVlOwotCQljYXNlIHNuZF9zb2NfZGFwbV9tdXg6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3ZhbHVlX211eDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgotCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgotCQljYXNlIHNuZF9zb2NfZGFwbV9ocDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWljOgotCQljYXNlIHNuZF9zb2NfZGFwbV9zcGs6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2xpbmU6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21pY2JpYXM6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2RhYzoKLQkJY2FzZSBzbmRfc29jX2RhcG1fYWRjOgotCQljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3N1cHBseToKLQkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX2luOgotCQljYXNlIHNuZF9zb2NfZGFwbV9haWZfb3V0OgotCQkJaWYgKHctPm5hbWUpIHsKLQkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7Ci0JCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCQlwcmludGsoIiVzOiAlcyAgaW4gJWQgb3V0ICVkXG4iLCB3LT5uYW1lLAotCQkJCQl3LT5wb3dlciA/ICJPbiI6Ik9mZiIsaW4sIG91dCk7Ci0KLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ3LT5zb3VyY2VzLCBsaXN0X3NpbmspIHsKLQkJCQkJaWYgKHAtPmNvbm5lY3QpCi0JCQkJCQlwcmludGsoIiBpbiAgJXMgJXNcbiIsIHAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCi0JCQkJCQkJcC0+c291cmNlLT5uYW1lKTsKLQkJCQl9Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdy0+c2lua3MsIGxpc3Rfc291cmNlKSB7Ci0JCQkJCWlmIChwLT5jb25uZWN0KQotCQkJCQkJcHJpbnRrKCIgb3V0ICVzICVzXG4iLCBwLT5uYW1lID8gcC0+bmFtZSA6ICJzdGF0aWMiLAotCQkJCQkJCXAtPnNpbmstPm5hbWUpOwotCQkJCX0KLQkJCX0KLQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19ERUJVR19GUwogc3RhdGljIGludCBkYXBtX3dpZGdldF9wb3dlcl9vcGVuX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0xMTQ3LDkgKzExMDUsMTYgQEAKIAlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwogCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CiAKLQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzOiAlcyAgaW4gJWQgb3V0ICVkXG4iLAorCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXM6ICVzICBpbiAlZCBvdXQgJWQiLAogCQkgICAgICAgdy0+bmFtZSwgdy0+cG93ZXIgPyAiT24iIDogIk9mZiIsIGluLCBvdXQpOwogCisJaWYgKHctPnJlZyA+PSAwKQorCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJIiAtIFIlZCgweCV4KSBiaXQgJWQiLAorCQkJCXctPnJlZywgdy0+cmVnLCB3LT5zaGlmdCk7CisKKwlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsICJcbiIpOworCiAJaWYgKHctPnNuYW1lKQogCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsICIgc3RyZWFtICVzICVzXG4iLAogCQkJCXctPnNuYW1lLApAQCAtMTI0NSwxOCArMTIxMCwxNSBAQAogCQkJcGF0aC0+Y29ubmVjdCA9IDA7IC8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCiAJfQogCi0JaWYgKGZvdW5kKSB7CisJaWYgKGZvdW5kKQogCQlkYXBtX3Bvd2VyX3dpZGdldHMod2lkZ2V0LT5jb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwotCQlkdW1wX2RhcG0od2lkZ2V0LT5jb2RlYywgIm11eCBwb3dlciB1cGRhdGUiKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogdGVzdCBhbmQgdXBkYXRlIHRoZSBwb3dlciBzdGF0dXMgb2YgYSBtaXhlciBvciBzd2l0Y2ggd2lkZ2V0ICovCiBzdGF0aWMgaW50IGRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCi0JCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCByZWcsCi0JCQkJICAgaW50IHZhbF9tYXNrLCBpbnQgdmFsLCBpbnQgaW52ZXJ0KQorCQkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgY29ubmVjdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGg7CiAJaW50IGZvdW5kID0gMDsKQEAgLTEyNjYsOSArMTIyOCw2IEBACiAJICAgIHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX3N3aXRjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIXNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCkpCi0JCXJldHVybiAwOwotCiAJLyogZmluZCBkYXBtIHdpZGdldCBwYXRoIGFzc29jIHdpdGgga2NvbnRyb2wgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdGgsICZ3aWRnZXQtPmNvZGVjLT5kYXBtX3BhdGhzLCBsaXN0KSB7CiAJCWlmIChwYXRoLT5rY29udHJvbCAhPSBrY29udHJvbCkKQEAgLTEyNzYsMTkgKzEyMzUsMTIgQEAKIAogCQkvKiBmb3VuZCwgbm93IGNoZWNrIHR5cGUgKi8KIAkJZm91bmQgPSAxOwotCQlpZiAodmFsKQotCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KLQkJCXBhdGgtPmNvbm5lY3QgPSBpbnZlcnQgPyAwOjE7Ci0JCWVsc2UKLQkJCS8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCi0JCQlwYXRoLT5jb25uZWN0ID0gaW52ZXJ0ID8gMTowOworCQlwYXRoLT5jb25uZWN0ID0gY29ubmVjdDsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGZvdW5kKSB7CisJaWYgKGZvdW5kKQogCQlkYXBtX3Bvd2VyX3dpZGdldHMod2lkZ2V0LT5jb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwotCQlkdW1wX2RhcG0od2lkZ2V0LT5jb2RlYywgIm1peGVyIHBvd2VyIHVwZGF0ZSIpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTQwNCw5ICsxMzU2LDcgQEAKICAqLwogaW50IHNuZF9zb2NfZGFwbV9zeW5jKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgcmV0ID0gZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7Ci0JZHVtcF9kYXBtKGNvZGVjLCAic3luYyIpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3N5bmMpOwogCkBAIC0xNjg4LDYgKzE2MzgsNyBAQAogCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgZmxzKG1heCkpIC0gMTsKIAl1bnNpZ25lZCBpbnQgaW52ZXJ0ID0gbWMtPmludmVydDsKIAl1bnNpZ25lZCBpbnQgdmFsLCB2YWwyLCB2YWxfbWFzazsKKwlpbnQgY29ubmVjdDsKIAlpbnQgcmV0OwogCiAJdmFsID0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgbWFzayk7CkBAIC0xNzE0LDcgKzE2NjUsMTcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZGFwbV9taXhlcl91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgcmVnLCB2YWxfbWFzaywgdmFsLCBpbnZlcnQpOworCWlmIChzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpKSB7CisJCWlmICh2YWwpCisJCQkvKiBuZXcgY29ubmVjdGlvbiAqLworCQkJY29ubmVjdCA9IGludmVydCA/IDA6MTsKKwkJZWxzZQorCQkJLyogb2xkIGNvbm5lY3Rpb24gbXVzdCBiZSBwb3dlcmVkIGRvd24gKi8KKwkJCWNvbm5lY3QgPSBpbnZlcnQgPyAxOjA7CisKKwkJZGFwbV9taXhlcl91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY29ubmVjdCk7CisJfQorCiAJaWYgKHdpZGdldC0+ZXZlbnQpIHsKIAkJaWYgKHdpZGdldC0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1JFRykgewogCQkJcmV0ID0gd2lkZ2V0LT5ldmVudCh3aWRnZXQsIGtjb250cm9sLApAQCAtMjE1Miw3ICsyMTEzLDYgQEAKIAogCWRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgZXZlbnQpOwogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKLQlkdW1wX2RhcG0oY29kZWMsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL0tjb25maWcgYi9zb3VuZC91c2IvS2NvbmZpZwppbmRleCA3MzUyNWMwLi44YzI5MjU4MSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTIxLDYgKzIxLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWF1ZGlvLgogCitjb25maWcgU05EX1VTQl9VQTEwMQorCXRyaXN0YXRlICJFZGlyb2wgVUEtMTAxIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9SQVdNSURJCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkKKwkgIGludGVyZmFjZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLXVhMTAxLgorCiBjb25maWcgU05EX1VTQl9VU1gyWQogCXRyaXN0YXRlICJUYXNjYW0gVVMtMTIyLCBVUy0yMjQgYW5kIFVTLTQyOCBVU0IgZHJpdmVyIgogCWRlcGVuZHMgb24gWDg2IHx8IFBQQyB8fCBBTFBIQQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL01ha2VmaWxlIGIvc291bmQvdXNiL01ha2VmaWxlCmluZGV4IGFiYjI4OGIuLjViZjY0YWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9NYWtlZmlsZQorKysgYi9zb3VuZC91c2IvTWFrZWZpbGUKQEAgLTQsOSArNCwxMSBAQAogCiBzbmQtdXNiLWF1ZGlvLW9ianMgOj0gdXNiYXVkaW8ubyB1c2JtaXhlci5vCiBzbmQtdXNiLWxpYi1vYmpzIDo9IHVzYm1pZGkubworc25kLXVhMTAxLW9ianMgOj0gdWExMDEubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX1VTQl9BVURJTykgKz0gc25kLXVzYi1hdWRpby5vIHNuZC11c2ItbGliLm8KK29iai0kKENPTkZJR19TTkRfVVNCX1VBMTAxKSArPSBzbmQtdWExMDEubyBzbmQtdXNiLWxpYi5vCiBvYmotJChDT05GSUdfU05EX1VTQl9VU1gyWSkgKz0gc25kLXVzYi1saWIubwogb2JqLSQoQ09ORklHX1NORF9VU0JfVVMxMjJMKSArPSBzbmQtdXNiLWxpYi5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91YTEwMS5jIGIvc291bmQvdXNiL3VhMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0Y2NkZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi91YTEwMS5jCkBAIC0wLDAgKzEsMTQyMSBAQAorLyoKKyAqIEVkaXJvbCBVQS0xMDEgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSAidXNiYXVkaW8uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJFZGlyb2wgVUEtMTAxIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tFZGlyb2wsVUEtMTAxfX0iKTsKKworLyogSSB1c2UgbXkgVUEtMUEgZm9yIHRlc3RpbmcgYmVjYXVzZSBJIGRvbid0IGhhdmUgYSBVQS0xMDEgLi4uICovCisjZGVmaW5lIFVBMUFfSEFDSworCisvKgorICogU2hvdWxkIG5vdCBiZSBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIHNjaGVkdWxpbmcgZGVsYXkgb2YgdGhlIGhvc3QKKyAqIGNvbnRyb2xsZXIuICBTb21lIEludGVsIGNvbnRyb2xsZXJzIG5lZWQgbW9yZSB0aGFuIG9uZSBmcmFtZTsgYXMgbG9uZyBhcworICogdGhhdCBkcml2ZXIgZG9lc24ndCB0ZWxsIHVzIGFib3V0IHRoaXMsIHVzZSAxLjUgZnJhbWVzIGp1c3QgdG8gYmUgc3VyZS4KKyAqLworI2RlZmluZSBNSU5fUVVFVUVfTEVOR1RICTEyCisvKiBTb21ld2hhdCByYW5kb20uICovCisjZGVmaW5lIE1BWF9RVUVVRV9MRU5HVEgJMzAKKy8qCisgKiBUaGlzIG1hZ2ljIHZhbHVlIG9wdGltaXplcyBtZW1vcnkgdXNhZ2UgZWZmaWNpZW5jeSBmb3IgdGhlIFVBLTEwMSdzIHBhY2tldAorICogc2l6ZXMgYXQgYWxsIHNhbXBsZSByYXRlcywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3R1cGlkIGNhY2hlIHBvb2wgc2l6ZXMKKyAqIHRoYXQgdXNiX2J1ZmZlcl9hbGxvYygpIHVzZXMuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9RVUVVRV9MRU5HVEgJMjEKKworI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUJCTY3MiAvKiBoYXJkd2FyZSBzcGVjaWZpYyAqLworI2RlZmluZSBNQVhfTUVNT1JZX0JVRkZFUlMJRElWX1JPVU5EX1VQKE1BWF9RVUVVRV9MRU5HVEgsIFwKKwkJCQkJICAgICBQQUdFX1NJWkUgLyBNQVhfUEFDS0VUX1NJWkUpCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitzdGF0aWMgdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aCA9IDIxOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiY2FyZCBpbmRleCIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKK21vZHVsZV9wYXJhbShxdWV1ZV9sZW5ndGgsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhxdWV1ZV9sZW5ndGgsICJVU0IgcXVldWUgbGVuZ3RoIGluIG1pY3JvZnJhbWVzLCAiCisJCSBfX3N0cmluZ2lmeShNSU5fUVVFVUVfTEVOR1RIKSItIl9fc3RyaW5naWZ5KE1BWF9RVUVVRV9MRU5HVEgpKTsKKworZW51bSB7CisJSU5URl9QTEFZQkFDSywKKwlJTlRGX0NBUFRVUkUsCisJSU5URl9NSURJLAorCisJSU5URl9DT1VOVAorfTsKKworLyogYml0cyBpbiBzdHJ1Y3QgdWExMDE6OnN0YXRlcyAqLworZW51bSB7CisJVVNCX0NBUFRVUkVfUlVOTklORywKKwlVU0JfUExBWUJBQ0tfUlVOTklORywKKwlBTFNBX0NBUFRVUkVfT1BFTiwKKwlBTFNBX1BMQVlCQUNLX09QRU4sCisJQUxTQV9DQVBUVVJFX1JVTk5JTkcsCisJQUxTQV9QTEFZQkFDS19SVU5OSU5HLAorCUNBUFRVUkVfVVJCX0NPTVBMRVRFRCwKKwlQTEFZQkFDS19VUkJfQ09NUExFVEVELAorCURJU0NPTk5FQ1RFRCwKK307CisKK3N0cnVjdCB1YTEwMSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGZbSU5URl9DT1VOVF07CisJaW50IGNhcmRfaW5kZXg7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1pZGlfbGlzdDsKKwl1NjQgZm9ybWF0X2JpdDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgcGFja2V0c19wZXJfc2Vjb25kOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgbG9uZyBzdGF0ZXM7CisKKwkvKiBGSUZPIHRvIHN5bmNocm9uaXplIHBsYXliYWNrIHJhdGUgdG8gY2FwdHVyZSByYXRlICovCisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfc3RhcnQ7CisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfY291bnQ7CisJdTggcmF0ZV9mZWVkYmFja1tNQVhfUVVFVUVfTEVOR1RIXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVhZHlfcGxheWJhY2tfdXJiczsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcGxheWJhY2tfdGFza2xldDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBhbHNhX2NhcHR1cmVfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByYXRlX2ZlZWRiYWNrX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWxzYV9wbGF5YmFja193YWl0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0geworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwkJdW5zaWduZWQgaW50IHVzYl9waXBlOworCQl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CisJCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlczsKKwkJdW5zaWduZWQgaW50IG1heF9wYWNrZXRfYnl0ZXM7CisJCXVuc2lnbmVkIGludCBwZXJpb2RfcG9zOworCQl1bnNpZ25lZCBpbnQgYnVmZmVyX3BvczsKKwkJdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aDsKKwkJc3RydWN0IHVhMTAxX3VyYiB7CisJCQlzdHJ1Y3QgdXJiIHVyYjsKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGlzb19mcmFtZV9kZXNjWzFdOworCQkJc3RydWN0IGxpc3RfaGVhZCByZWFkeV9saXN0OworCQl9ICp1cmJzW01BWF9RVUVVRV9MRU5HVEhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IHNpemU7CisJCQl2b2lkICphZGRyOworCQkJZG1hX2FkZHJfdCBkbWE7CisJCX0gYnVmZmVyc1tNQVhfTUVNT1JZX0JVRkZFUlNdOworCX0gY2FwdHVyZSwgcGxheWJhY2s7CisKKwl1bnNpZ25lZCBpbnQgZnBzWzEwXTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfY291bnRlcjsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2aWNlc19tdXRleCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGRldmljZXNfdXNlZDsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXI7CisKK3N0YXRpYyB2b2lkIGFib3J0X2Fsc2FfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSk7CitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfZXJyb3Jfc3RyaW5nKGludCBlcnIpCit7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1FTk9ERVY6CisJCXJldHVybiAibm8gZGV2aWNlIjsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybiAiZW5kcG9pbnQgbm90IGVuYWJsZWQiOworCWNhc2UgLUVQSVBFOgorCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOworCWNhc2UgLUVOT1NQQzoKKwkJcmV0dXJuICJub3QgZW5vdWdoIGJhbmR3aWR0aCI7CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm4gImRldmljZSBkaXNhYmxlZCI7CisJY2FzZSAtRUhPU1RVTlJFQUNIOgorCQlyZXR1cm4gImRldmljZSBzdXNwZW5kZWQiOworCWNhc2UgLUVJTlZBTDoKKwljYXNlIC1FQUdBSU46CisJY2FzZSAtRUZCSUc6CisJY2FzZSAtRU1TR1NJWkU6CisJCXJldHVybiAiaW50ZXJuYWwgZXJyb3IiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYm9ydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKSB7CisJCXdha2VfdXAoJnVhLT5hbHNhX2NhcHR1cmVfd2FpdCk7CisJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWJvcnRfdXNiX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQl3YWtlX3VwKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVzYl91cmIpCit7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiID0gKHN0cnVjdCB1YTEwMV91cmIgKil1c2JfdXJiOworCXN0cnVjdCB1YTEwMSAqdWEgPSB1cmItPnVyYi5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkodXJiLT51cmIuc3RhdHVzID09IC1FTk9FTlQgfHwJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnVyYi5zdGF0dXMgPT0gLUVOT0RFViB8fAkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAkvKiB1bmxpbmtlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgewkvKiBkZXZpY2UgZGlzYWJsZWQgKi8KKwkJYWJvcnRfdXNiX3BsYXliYWNrKHVhKTsKKwkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQkvKiBhcHBlbmQgVVJCIHRvIEZJRk8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnVyYi0+cmVhZHlfbGlzdCwgJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnVhLT5wbGF5YmFja190YXNrbGV0KTsKKwkJdWEtPnBsYXliYWNrLnN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgLT0KKwkJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggLworCQkJCQkJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCisJdXJiLT5jb21wbGV0ZSA9IHBsYXliYWNrX3VyYl9jb21wbGV0ZTsKKwlwbGF5YmFja191cmJfY29tcGxldGUodXJiKTsKKworCXNldF9iaXQoUExBWUJBQ0tfVVJCX0NPTVBMRVRFRCwgJnVhLT5zdGF0ZXMpOworCXdha2VfdXAoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworfQorCisvKiBjb3B5IGRhdGEgZnJvbSB0aGUgQUxTQSByaW5nIGJ1ZmZlciBpbnRvIHRoZSBVUkIgYnVmZmVyICovCitzdGF0aWMgYm9vbCBjb3B5X3BsYXliYWNrX2RhdGEoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwljb25zdCB1OCAqc291cmNlOworCisJcnVudGltZSA9IHN0cmVhbS0+c3Vic3RyZWFtLT5ydW50aW1lOworCWZyYW1lX2J5dGVzID0gc3RyZWFtLT5mcmFtZV9ieXRlczsKKwlzb3VyY2UgPSBydW50aW1lLT5kbWFfYXJlYSArIHN0cmVhbS0+YnVmZmVyX3BvcyAqIGZyYW1lX2J5dGVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgKyBmcmFtZXMgPD0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBzb3VyY2UsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsIHNvdXJjZSwgZnJhbWVzMSAqIGZyYW1lX2J5dGVzKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsIChmcmFtZXMgLSBmcmFtZXMxKSAqIGZyYW1lX2J5dGVzKTsKKwl9CisKKwlzdHJlYW0tPmJ1ZmZlcl9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXN0cmVhbS0+YnVmZmVyX3BvcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlzdHJlYW0tPnBlcmlvZF9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPnBlcmlvZF9wb3MgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc3RyZWFtLT5wZXJpb2RfcG9zIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3dpdGhfd3JhcGFyb3VuZChzdHJ1Y3QgdWExMDEgKnVhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgYWRkKQoreworCSp2YWx1ZSArPSBhZGQ7CisJaWYgKCp2YWx1ZSA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkqdmFsdWUgLT0gdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aDsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVhMTAxICp1YSA9ICh2b2lkICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXM7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiOworCWJvb2wgZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTeW5jaHJvbml6aW5nIHRoZSBwbGF5YmFjayByYXRlIHRvIHRoZSBjYXB0dXJlIHJhdGUgaXMgZG9uZSBieSB1c2luZworCSAqIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHBhY2tldCBzaXplcyBmb3IgYm90aCBzdHJlYW1zLgorCSAqIFN1Ym1pdHRpbmcgYSBwbGF5YmFjayBVUkIgdGhlcmVmb3JlIHJlcXVpcmVzIGJvdGggYSByZWFkeSBVUkIgYW5kCisJICogdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FwdHVyZSBwYWNrZXQsIGkuZS4sIGJvdGggcGxheWJhY2sKKwkgKiBhbmQgY2FwdHVyZSBVUkJzIG11c3QgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gIFNpbmNlIHRoZSBVU0IgY29yZSBkb2VzCisJICogbm90IGd1YXJhbnRlZSB0aGF0IHBsYXliYWNrIGFuZCBjYXB0dXJlIGNvbXBsZXRlIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxsZWQgYWx0ZXJuYXRlbHksIHdlIHVzZSB0d28gRklGT3MgZm9yIHBhY2tldCBzaXplcyBhbmQgcmVhZCBVUkJzOworCSAqIHN1Ym1pdHRpbmcgcGxheWJhY2sgVVJCcyBpcyBwb3NzaWJsZSBhcyBsb25nIGFzIGJvdGggRklGT3MgYXJlCisJICogbm9uZW1wdHkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpKSB7CisJCS8qIHRha2UgcGFja2V0IHNpemUgb3V0IG9mIEZJRk8gKi8KKwkJZnJhbWVzID0gdWEtPnJhdGVfZmVlZGJhY2tbdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnRdOworCQlhZGRfd2l0aF93cmFwYXJvdW5kKHVhLCAmdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQsIDEpOworCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudC0tOworCisJCS8qIHRha2UgVVJCIG91dCBvZiBGSUZPICovCisJCXVyYiA9IGxpc3RfZmlyc3RfZW50cnkoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzLAorCQkJCSAgICAgICBzdHJ1Y3QgdWExMDFfdXJiLCByZWFkeV9saXN0KTsKKwkJbGlzdF9kZWwoJnVyYi0+cmVhZHlfbGlzdCk7CisKKwkJLyogZmlsbCBwYWNrZXQgd2l0aCBkYXRhIG9yIHNpbGVuY2UgKi8KKwkJdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoID0KKwkJCWZyYW1lcyAqIHVhLT5wbGF5YmFjay5mcmFtZV9ieXRlczsKKwkJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJZG9fcGVyaW9kX2VsYXBzZWQgfD0gY29weV9wbGF5YmFja19kYXRhKCZ1YS0+cGxheWJhY2ssCisJCQkJCQkJCSZ1cmItPnVyYiwKKwkJCQkJCQkJZnJhbWVzKTsKKwkJZWxzZQorCQkJbWVtc2V0KHVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlciwgMCwKKwkJCSAgICAgICB1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGgpOworCisJCS8qIGFuZCBvZmYgeW91IGdvIC4uLiAqLworCQllcnIgPSB1c2Jfc3VibWl0X3VyYigmdXJiLT51cmIsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCQlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCQkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJVU0IgcmVxdWVzdCBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuOworCQl9CisJCXVhLT5wbGF5YmFjay5zdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5ICs9IGZyYW1lczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQodWEtPnBsYXliYWNrLnN1YnN0cmVhbSk7Cit9CisKKy8qIGNvcHkgZGF0YSBmcm9tIHRoZSBVUkIgYnVmZmVyIGludG8gdGhlIEFMU0EgcmluZyBidWZmZXIgKi8KK3N0YXRpYyBib29sIGNvcHlfY2FwdHVyZV9kYXRhKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwl1OCAqZGVzdDsKKworCXJ1bnRpbWUgPSBzdHJlYW0tPnN1YnN0cmVhbS0+cnVudGltZTsKKwlmcmFtZV9ieXRlcyA9IHN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZGVzdCA9IHJ1bnRpbWUtPmRtYV9hcmVhICsgc3RyZWFtLT5idWZmZXJfcG9zICogZnJhbWVfYnl0ZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyArIGZyYW1lcyA8PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lczEgKiBmcmFtZV9ieXRlcyk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgKGZyYW1lcyAtIGZyYW1lczEpICogZnJhbWVfYnl0ZXMpOworCX0KKworCXN0cmVhbS0+YnVmZmVyX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJc3RyZWFtLT5idWZmZXJfcG9zIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXN0cmVhbS0+cGVyaW9kX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+cGVyaW9kX3BvcyA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzdHJlYW0tPnBlcmlvZF9wb3MgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNhcHR1cmVfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSA9ICZ1YS0+Y2FwdHVyZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXMsIHdyaXRlX3B0cjsKKwlib29sIGRvX3BlcmlvZF9lbGFwc2VkOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAkJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRU5PREVWIHx8CQkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CS8qIHVubGlua2VkICovCisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCS8qIGRldmljZSBkaXNhYmxlZCAqLworCQlnb3RvIHN0cmVhbV9zdG9wcGVkOworCisJaWYgKHVyYi0+c3RhdHVzID49IDAgJiYgdXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMgPj0gMCkKKwkJZnJhbWVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5hY3R1YWxfbGVuZ3RoIC8KKwkJCXN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZWxzZQorCQlmcmFtZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZnJhbWVzID4gMCAmJiB0ZXN0X2JpdChBTFNBX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlkb19wZXJpb2RfZWxhcHNlZCA9IGNvcHlfY2FwdHVyZV9kYXRhKHN0cmVhbSwgdXJiLCBmcmFtZXMpOworCWVsc2UKKwkJZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKworCWlmICh0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiVVNCIHJlcXVlc3QgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCWVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKKwkJCWdvdG8gc3RyZWFtX3N0b3BwZWQ7CisJCX0KKworCQkvKiBhcHBlbmQgcGFja2V0IHNpemUgdG8gRklGTyAqLworCQl3cml0ZV9wdHIgPSB1YS0+cmF0ZV9mZWVkYmFja19zdGFydDsKKwkJYWRkX3dpdGhfd3JhcGFyb3VuZCh1YSwgJndyaXRlX3B0ciwgdWEtPnJhdGVfZmVlZGJhY2tfY291bnQpOworCQl1YS0+cmF0ZV9mZWVkYmFja1t3cml0ZV9wdHJdID0gZnJhbWVzOworCQlpZiAodWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKSB7CisJCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudCsrOworCQkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID09CisJCQkJCQl1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJpbmcgYnVmZmVyIG92ZXJmbG93OyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgcGxheWJhY2sKKwkJCSAqIHN0cmVhbSBpcyBub3QgcnVubmluZy4gIFRocm93IGF3YXkgdGhlIG9sZGVzdCBlbnRyeSwKKwkJCSAqIHNvIHRoYXQgdGhlIHBsYXliYWNrIHN0cmVhbSwgd2hlbiBpdCBzdGFydHMsIHNlZXMKKwkJCSAqIHRoZSBtb3N0IHJlY2VudCBwYWNrZXQgc2l6ZXMuCisJCQkgKi8KKwkJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCX0KKwkJaWYgKHRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicykpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZ1YS0+cGxheWJhY2tfdGFza2xldCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkb19wZXJpb2RfZWxhcHNlZCkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJlYW0tPnN1YnN0cmVhbSk7CisKKwkvKiBmb3IgZGVidWdnaW5nOiBtZWFzdXJlIHRoZSBzYW1wbGUgcmF0ZSByZWxhdGl2ZSB0byB0aGUgVVNCIGNsb2NrICovCisJdWEtPmZwc1t1YS0+ZnJhbWVfY291bnRlcisrIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZF0gKz0gZnJhbWVzOworCWlmICh1YS0+ZnJhbWVfY291bnRlciA+PSBBUlJBWV9TSVpFKHVhLT5mcHMpICogdWEtPnBhY2tldHNfcGVyX3NlY29uZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwdHVyZSByYXRlOiIpOworCQlmb3IgKGZyYW1lcyA9IDA7IGZyYW1lcyA8IEFSUkFZX1NJWkUodWEtPmZwcyk7ICsrZnJhbWVzKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICV1IiwgdWEtPmZwc1tmcmFtZXNdKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJbWVtc2V0KHVhLT5mcHMsIDAsIHNpemVvZih1YS0+ZnBzKSk7CisJCXVhLT5mcmFtZV9jb3VudGVyID0gMDsKKwl9CisJcmV0dXJuOworCitzdHJlYW1fc3RvcHBlZDoKKwlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCWFib3J0X3VzYl9jYXB0dXJlKHVhKTsKKwlhYm9ydF9hbHNhX3BsYXliYWNrKHVhKTsKKwlhYm9ydF9hbHNhX2NhcHR1cmUodWEpOworfQorCitzdGF0aWMgdm9pZCBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHVyYi0+Y29udGV4dDsKKworCXVyYi0+Y29tcGxldGUgPSBjYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwljYXB0dXJlX3VyYl9jb21wbGV0ZSh1cmIpOworCisJc2V0X2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworfQorCitzdGF0aWMgaW50IHN1Ym1pdF9zdHJlYW1fdXJicyhzdHJ1Y3QgdWExMDEgKnVhLCBzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5xdWV1ZV9sZW5ndGg7ICsraSkgeworCQlpbnQgZXJyID0gdXNiX3N1Ym1pdF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgIlVTQiByZXF1ZXN0IGVycm9yICVkOiAlc1xuIiwKKwkJCQllcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX3N0cmVhbV91cmJzKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnF1ZXVlX2xlbmd0aDsgKytpKQorCQl1c2Jfa2lsbF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiKTsKK30KKworc3RhdGljIGludCBlbmFibGVfaXNvX2ludGVyZmFjZShzdHJ1Y3QgdWExMDEgKnVhLCB1bnNpZ25lZCBpbnQgaW50Zl9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCisJYWx0cyA9IHVhLT5pbnRmW2ludGZfaW5kZXhdLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoYWx0cy0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAxKSB7CisJCWludCBlcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1YS0+ZGV2LAorCQkJCQkgICAgYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwKKwkJCQkiY2Fubm90IGluaXRpYWxpemUgaW50ZXJmYWNlOyBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9pc29faW50ZXJmYWNlKHN0cnVjdCB1YTEwMSAqdWEsIHVuc2lnbmVkIGludCBpbnRmX2luZGV4KQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisKKwlhbHRzID0gdWEtPmludGZbaW50Zl9pbmRleF0tPmN1cl9hbHRzZXR0aW5nOworCWlmIChhbHRzLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDApIHsKKwkJaW50IGVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVhLT5kZXYsCisJCQkJCSAgICBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQlpZiAoZXJyIDwgMCAmJiAhdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCQlkZXZfd2FybigmdWEtPmRldi0+ZGV2LAorCQkJCSAiaW50ZXJmYWNlIHJlc2V0IGZhaWxlZDsgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCSBlcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9jYXB0dXJlKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY2xlYXJfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKworCWtpbGxfc3RyZWFtX3VyYnMoJnVhLT5jYXB0dXJlKTsKKworCWRpc2FibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWludCBlcnI7CisKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisKKwllcnIgPSBlbmFibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWNsZWFyX2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+Y2FwdHVyZS51cmJzWzBdLT51cmIuY29tcGxldGUgPSBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwl1YS0+cmF0ZV9mZWVkYmFja19zdGFydCA9IDA7CisJdWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPSAwOworCisJc2V0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJZXJyID0gc3VibWl0X3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlzdG9wX3VzYl9jYXB0dXJlKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9wbGF5YmFjayhzdHJ1Y3QgdWExMDEgKnVhKQoreworCWNsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCisJa2lsbF9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZGlzYWJsZV9pc29faW50ZXJmYWNlKHVhLCBJTlRGX1BMQVlCQUNLKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZnJhbWVzOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+cGxheWJhY2spOworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZXJyID0gZW5hYmxlX2lzb19pbnRlcmZhY2UodWEsIElOVEZfUExBWUJBQ0spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2xlYXJfYml0KFBMQVlCQUNLX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+cGxheWJhY2sudXJic1swXS0+dXJiLmNvbXBsZXRlID0KKwkJZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlOworCXNwaW5fbG9ja19pcnEoJnVhLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpOworCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCisJLyoKKwkgKiBXZSBzdWJtaXQgdGhlIGluaXRpYWwgVVJCcyBhbGwgYXQgb25jZSwgc28gd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUKKwkgKiBwYWNrZXQgc2l6ZSBGSUZPIHRvIGJlIGZ1bGwuCisJICovCisJd2FpdF9ldmVudCh1YS0+cmF0ZV9mZWVkYmFja193YWl0LAorCQkgICB1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoIHx8CisJCSAgICF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykgfHwKKwkJICAgdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoOyArK2kpIHsKKwkJLyogYWxsIGluaXRpYWwgVVJCcyBjb250YWluIHNpbGVuY2UgKi8KKwkJc3Bpbl9sb2NrX2lycSgmdWEtPmxvY2spOworCQlmcmFtZXMgPSB1YS0+cmF0ZV9mZWVkYmFja1t1YS0+cmF0ZV9mZWVkYmFja19zdGFydF07CisJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCXVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCQl1cmIgPSAmdWEtPnBsYXliYWNrLnVyYnNbaV0tPnVyYjsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPQorCQkJZnJhbWVzICogdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsCisJCSAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aCk7CisJfQorCisJc2V0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCWVyciA9IHN1Ym1pdF9zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjayk7CisJaWYgKGVyciA8IDApCisJCXN0b3BfdXNiX3BsYXliYWNrKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSkKK3sKKwlpZiAodGVzdF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJc25kX3BjbV9zdG9wKHVhLT5jYXB0dXJlLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlzbmRfcGNtX3N0b3AodWEtPnBsYXliYWNrLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgaW50IHNldF9zdHJlYW1faHcoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgdW5zaWduZWQgaW50IGNoYW5uZWxzKQoreworCWludCBlcnI7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmluZm8gPQorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZm9ybWF0cyA9IHVhLT5mb3JtYXRfYml0OworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZXMgPSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQodWEtPnJhdGUpOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZV9taW4gPSB1YS0+cmF0ZTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gdWEtPnJhdGU7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5jaGFubmVsc19taW4gPSBjaGFubmVsczsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGNoYW5uZWxzOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDQ1MDAwICogMTAyNDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19taW4gPSAxOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9IFVJTlRfTUFYOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19taW4gPSAyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19tYXggPSBVSU5UX01BWDsKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FLAorCQkJCQkgICAxNTAwMDAwIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZCwKKwkJCQkJICAgODE5MjAwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIDMyLCAyNCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPmNhcHR1cmUuc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWVyciA9IHNldF9zdHJlYW1faHcodWEsIHN1YnN0cmVhbSwgdWEtPmNhcHR1cmUuY2hhbm5lbHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZmlmb19zaXplID0KKwkJRElWX1JPVU5EX0NMT1NFU1QodWEtPnJhdGUsIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmZpZm9fc2l6ZTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJc2V0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPnBsYXliYWNrLnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwllcnIgPSBzZXRfc3RyZWFtX2h3KHVhLCBzdWJzdHJlYW0sIHVhLT5wbGF5YmFjay5jaGFubmVscyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5maWZvX3NpemUgPQorCQlESVZfUk9VTkRfQ0xPU0VTVCh1YS0+cmF0ZSAqIHVhLT5wbGF5YmFjay5xdWV1ZV9sZW5ndGgsCisJCQkJICB1YS0+cGFja2V0c19wZXJfc2Vjb25kKTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCF0ZXN0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpKQorCQkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJCWdvdG8gZXJyb3I7CisJfQorCXNldF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcyk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWNsZWFyX2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcykpCisJCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKSkKKwkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcHR1cmVfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgdWExMDFfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwllcnIgPSBzdGFydF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyoKKwkgKiBUaGUgRUhDSSBkcml2ZXIgc2NoZWR1bGVzIHRoZSBmaXJzdCBwYWNrZXQgb2YgYW4gaXNvIHN0cmVhbSBhdCAxMCBtcworCSAqIGluIHRoZSBmdXR1cmUsIGkuZS4sIG5vIGRhdGEgaXMgYWN0dWFsbHkgY2FwdHVyZWQgZm9yIHRoYXQgbG9uZy4KKwkgKiBUYWtlIHRoZSB3YWl0IGhlcmUgc28gdGhhdCB0aGUgc3RyZWFtIGlzIGtub3duIHRvIGJlIGFjdHVhbGx5CisJICogcnVubmluZyB3aGVuIHRoZSBzdGFydCB0cmlnZ2VyIGhhcyBiZWVuIGNhbGxlZC4KKwkgKi8KKwl3YWl0X2V2ZW50KHVhLT5hbHNhX2NhcHR1cmVfd2FpdCwKKwkJICAgdGVzdF9iaXQoQ0FQVFVSRV9VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSk7CisJaWYgKHRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FSU87CisKKwl1YS0+Y2FwdHVyZS5wZXJpb2RfcG9zID0gMDsKKwl1YS0+Y2FwdHVyZS5idWZmZXJfcG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc3RhcnRfdXNiX3BsYXliYWNrKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBzZWUgdGhlIGNvbW1lbnQgaW4gY2FwdHVyZV9wY21fcHJlcGFyZSgpICovCisJd2FpdF9ldmVudCh1YS0+YWxzYV9wbGF5YmFja193YWl0LAorCQkgICB0ZXN0X2JpdChQTEFZQkFDS19VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVJTzsKKworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSAwOworCXVhLT5wbGF5YmFjay5wZXJpb2RfcG9zID0gMDsKKwl1YS0+cGxheWJhY2suYnVmZmVyX3BvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQljbGVhcl9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3QgdWExMDFfcGNtX3BvaW50ZXIoc3RydWN0IHVhMTAxICp1YSwKKwkJCQkJCSAgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBvczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXBvcyA9IHN0cmVhbS0+YnVmZmVyX3BvczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBjYXB0dXJlX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vicy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHVhMTAxX3BjbV9wb2ludGVyKHVhLCAmdWEtPmNhcHR1cmUpOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgcGxheWJhY2tfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdWExMDFfcGNtX3BvaW50ZXIodWEsICZ1YS0+cGxheWJhY2spOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGNhcHR1cmVfcGNtX29wcyA9IHsKKwkub3BlbiA9IGNhcHR1cmVfcGNtX29wZW4sCisJLmNsb3NlID0gY2FwdHVyZV9wY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGNhcHR1cmVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gY2FwdHVyZV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IGNhcHR1cmVfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBjYXB0dXJlX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgcGxheWJhY2tfcGNtX29wcyA9IHsKKwkub3BlbiA9IHBsYXliYWNrX3BjbV9vcGVuLAorCS5jbG9zZSA9IHBsYXliYWNrX3BjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGxheWJhY2tfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSBwbGF5YmFja19wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHBsYXliYWNrX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqCitmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXU4ICpleHRyYTsKKwlpbnQgZXh0cmFsZW47CisKKwlpZiAoaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyAhPSAyKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBudW1fYWx0c2V0dGluZ1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWFsdCA9ICZpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF07CisJaWYgKGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJpbnZhbGlkIGJOdW1FbmRwb2ludHNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhbHQgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzFdOworCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBiTnVtRW5kcG9pbnRzXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXh0cmEgPSBhbHQtPmV4dHJhOworCWV4dHJhbGVuID0gYWx0LT5leHRyYWxlbjsKKwl3aGlsZSAoZXh0cmFsZW4gPj0gc2l6ZW9mKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIpKSB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpkZXNjOworCisJCWRlc2MgPSAoc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKilleHRyYTsKKwkJaWYgKGRlc2MtPmJMZW5ndGggPiBleHRyYWxlbikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJkZXNjcmlwdG9yIG92ZXJmbG93XG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChkZXNjLT5iTGVuZ3RoID09IFVBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRSgxKSAmJgorCQkgICAgZGVzYy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DU19JTlRFUkZBQ0UgJiYKKwkJICAgIGRlc2MtPmJEZXNjcmlwdG9yU3VidHlwZSA9PSBVQUNfRk9STUFUX1RZUEUpIHsKKwkJCWlmIChkZXNjLT5iRm9ybWF0VHlwZSAhPSBVQUNfRk9STUFUX1RZUEVfSV9QQ00gfHwKKwkJCSAgICBkZXNjLT5iU2FtRnJlcVR5cGUgIT0gMSkgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJCQkiaW52YWxpZCBmb3JtYXQgdHlwZVxuIik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gZGVzYzsKKwkJfQorCQlleHRyYWxlbiAtPSBkZXNjLT5iTGVuZ3RoOworCQlleHRyYSArPSBkZXNjLT5iTGVuZ3RoOworCX0KKwlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInNhbXBsZSBmb3JtYXQgZGVzY3JpcHRvciBub3QgZm91bmRcbiIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRldGVjdF91c2JfZm9ybWF0KHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY29uc3Qgc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXRfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQ7CisJdW5zaWduZWQgaW50IHJhdGUyOworCisJZm10X2NhcHR1cmUgPSBmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0pOworCWZtdF9wbGF5YmFjayA9IGZpbmRfZm9ybWF0X2Rlc2NyaXB0b3IodWEtPmludGZbSU5URl9QTEFZQkFDS10pOworCWlmICghZm10X2NhcHR1cmUgfHwgIWZtdF9wbGF5YmFjaykKKwkJcmV0dXJuIC1FTlhJTzsKKworCXN3aXRjaCAoZm10X2NhcHR1cmUtPmJTdWJmcmFtZVNpemUpIHsKKwljYXNlIDM6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFOworCQlicmVhazsKKwljYXNlIDQ6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgInNhbXBsZSB3aWR0aCBpcyBub3QgMjQgb3IgMzIgYml0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCWlmIChmbXRfY2FwdHVyZS0+YlN1YmZyYW1lU2l6ZSAhPSBmbXRfcGxheWJhY2stPmJTdWJmcmFtZVNpemUpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LAorCQkJInBsYXliYWNrL2NhcHR1cmUgc2FtcGxlIHdpZHRocyBkbyBub3QgbWF0Y2hcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChmbXRfY2FwdHVyZS0+YkJpdFJlc29sdXRpb24gIT0gMjQgfHwKKwkgICAgZm10X3BsYXliYWNrLT5iQml0UmVzb2x1dGlvbiAhPSAyNCkgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJzYW1wbGUgd2lkdGggaXMgbm90IDI0IGJpdHNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXVhLT5yYXRlID0gY29tYmluZV90cmlwbGUoZm10X2NhcHR1cmUtPnRTYW1GcmVxWzBdKTsKKwlyYXRlMiA9IGNvbWJpbmVfdHJpcGxlKGZtdF9wbGF5YmFjay0+dFNhbUZyZXFbMF0pOworCWlmICh1YS0+cmF0ZSAhPSByYXRlMikgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsCisJCQkicGxheWJhY2svY2FwdHVyZSByYXRlcyBkbyBub3QgbWF0Y2g6ICV1LyV1XG4iLAorCQkJcmF0ZTIsIHVhLT5yYXRlKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlzd2l0Y2ggKHVhLT5kZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXVhLT5wYWNrZXRzX3Blcl9zZWNvbmQgPSA4MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJ1bmtub3duIGRldmljZSBzcGVlZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJdWEtPmNhcHR1cmUuY2hhbm5lbHMgPSBmbXRfY2FwdHVyZS0+Yk5yQ2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gZm10X3BsYXliYWNrLT5iTnJDaGFubmVsczsKKwl1YS0+Y2FwdHVyZS5mcmFtZV9ieXRlcyA9CisJCWZtdF9jYXB0dXJlLT5iU3ViZnJhbWVTaXplICogdWEtPmNhcHR1cmUuY2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzID0KKwkJZm10X3BsYXliYWNrLT5iU3ViZnJhbWVTaXplICogdWEtPnBsYXliYWNrLmNoYW5uZWxzOworCisJZXBkID0gJnVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX2luKGVwZCkpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW52YWxpZCBjYXB0dXJlIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJdWEtPmNhcHR1cmUudXNiX3BpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gbGUxNl90b19jcHUoZXBkLT53TWF4UGFja2V0U2l6ZSk7CisKKwllcGQgPSAmdWEtPmludGZbSU5URl9QTEFZQkFDS10tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX291dChlcGQpKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludmFsaWQgcGxheWJhY2sgZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwl1YS0+cGxheWJhY2sudXNiX3BpcGUgPSB1c2Jfc25kaXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IGxlMTZfdG9fY3B1KGVwZC0+d01heFBhY2tldFNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UsIGk7CisJc2l6ZV90IHNpemU7CisKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IHF1ZXVlX2xlbmd0aDsKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IG1heChzdHJlYW0tPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAodW5zaWduZWQgaW50KU1JTl9RVUVVRV9MRU5HVEgpOworCXN0cmVhbS0+cXVldWVfbGVuZ3RoID0gbWluKHN0cmVhbS0+cXVldWVfbGVuZ3RoLAorCQkJCSAgICh1bnNpZ25lZCBpbnQpTUFYX1FVRVVFX0xFTkdUSCk7CisKKwkvKgorCSAqIFRoZSBjYWNoZSBwb29sIHNpemVzIHVzZWQgYnkgdXNiX2J1ZmZlcl9hbGxvYygpICgxMjgsIDUxMiwgMjA0OCkgYXJlCisJICogcXVpdGUgYmFkIHdoZW4gdXNlZCB3aXRoIHRoZSBwYWNrZXQgc2l6ZXMgb2YgdGhpcyBkZXZpY2UgKGUuZy4gMjgwLAorCSAqIDUyMCwgNjI0KS4gIFRoZXJlZm9yZSwgd2UgYWxsb2NhdGUgYW5kIHN1YmRpdmlkZSBlbnRpcmUgcGFnZXMsIHVzaW5nCisJICogYSBzbWFsbGVyIGJ1ZmZlciBvbmx5IGZvciB0aGUgbGFzdCBjaHVuay4KKwkgKi8KKwlyZW1haW5pbmdfcGFja2V0cyA9IHN0cmVhbS0+cXVldWVfbGVuZ3RoOworCXBhY2tldHNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBzdHJlYW0tPm1heF9wYWNrZXRfYnl0ZXM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytpKSB7CisJCXBhY2tldHMgPSBtaW4ocmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UpOworCQlzaXplID0gcGFja2V0cyAqIHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIgPQorCQkJdXNiX2J1ZmZlcl9hbGxvYyh1YS0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkgJnN0cmVhbS0+YnVmZmVyc1tpXS5kbWEpOworCQlpZiAoIXN0cmVhbS0+YnVmZmVyc1tpXS5hZGRyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cmVhbS0+YnVmZmVyc1tpXS5zaXplID0gc2l6ZTsKKwkJcmVtYWluaW5nX3BhY2tldHMgLT0gcGFja2V0czsKKwkJaWYgKCFyZW1haW5pbmdfcGFja2V0cykKKwkJCWJyZWFrOworCX0KKwlpZiAocmVtYWluaW5nX3BhY2tldHMpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAidG9vIG1hbnkgcGFja2V0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0cmVhbS0+YnVmZmVycyk7ICsraSkKKwkJdXNiX2J1ZmZlcl9mcmVlKHVhLT5kZXYsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLnNpemUsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmRtYSk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLAorCQkJICAgICB2b2lkICgqdXJiX2NvbXBsZXRlKShzdHJ1Y3QgdXJiICopKQoreworCXVuc2lnbmVkIG1heF9wYWNrZXRfc2l6ZSA9IHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwlzdHJ1Y3QgdWExMDFfdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGIsIHUgPSAwOworCisJZm9yIChiID0gMDsgYiA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytiKSB7CisJCXVuc2lnbmVkIGludCBzaXplID0gc3RyZWFtLT5idWZmZXJzW2JdLnNpemU7CisJCXU4ICphZGRyID0gc3RyZWFtLT5idWZmZXJzW2JdLmFkZHI7CisJCWRtYV9hZGRyX3QgZG1hID0gc3RyZWFtLT5idWZmZXJzW2JdLmRtYTsKKworCQl3aGlsZSAoc2l6ZSA+PSBtYXhfcGFja2V0X3NpemUpIHsKKwkJCWlmICh1ID49IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQkJCWdvdG8gYnVmc2l6ZV9lcnJvcjsKKwkJCXVyYiA9IGttYWxsb2Moc2l6ZW9mKCp1cmIpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJdXNiX2luaXRfdXJiKCZ1cmItPnVyYik7CisJCQl1cmItPnVyYi5kZXYgPSB1YS0+ZGV2OworCQkJdXJiLT51cmIucGlwZSA9IHN0cmVhbS0+dXNiX3BpcGU7CisJCQl1cmItPnVyYi50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8CisJCQkJCVVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXJiLT51cmIudHJhbnNmZXJfYnVmZmVyID0gYWRkcjsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2RtYSA9IGRtYTsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQl1cmItPnVyYi5udW1iZXJfb2ZfcGFja2V0cyA9IDE7CisJCQl1cmItPnVyYi5pbnRlcnZhbCA9IDE7CisJCQl1cmItPnVyYi5jb250ZXh0ID0gdWE7CisJCQl1cmItPnVyYi5jb21wbGV0ZSA9IHVyYl9jb21wbGV0ZTsKKwkJCXVyYi0+dXJiLmlzb19mcmFtZV9kZXNjWzBdLm9mZnNldCA9IDA7CisJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQlzdHJlYW0tPnVyYnNbdSsrXSA9IHVyYjsKKwkJCXNpemUgLT0gbWF4X3BhY2tldF9zaXplOworCQkJYWRkciArPSBtYXhfcGFja2V0X3NpemU7CisJCQlkbWEgKz0gbWF4X3BhY2tldF9zaXplOworCQl9CisJfQorCWlmICh1ID09IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQlyZXR1cm4gMDsKK2J1ZnNpemVfZXJyb3I6CisJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW50ZXJuYWwgYnVmZmVyIHNpemUgZXJyb3JcbiIpOworCXJldHVybiAtRU5YSU87Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+cXVldWVfbGVuZ3RoOyArK2kpCisJCWtmcmVlKHN0cmVhbS0+dXJic1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdXNiX3JlbGF0ZWRfcmVzb3VyY2VzKHN0cnVjdCB1YTEwMSAqdWEsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmcmVlX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisJZnJlZV9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKwlmcmVlX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWZyZWVfc3RyZWFtX2J1ZmZlcnModWEsICZ1YS0+cGxheWJhY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpCisJCWlmICh1YS0+aW50ZltpXSkgeworCQkJdXNiX3NldF9pbnRmZGF0YSh1YS0+aW50ZltpXSwgTlVMTCk7CisJCQlpZiAodWEtPmludGZbaV0gIT0gaW50ZXJmYWNlKQorCQkJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwKKwkJCQkJCQkgICAgIHVhLT5pbnRmW2ldKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCB1YTEwMV9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9kZXN0cm95KCZ1YS0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHVhMTAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2lkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8gbWlkaV9lcCA9IHsKKwkJLm91dF9jYWJsZXMgPSAweDAwMDEsCisJCS5pbl9jYWJsZXMgPSAweDAwMDEKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayBtaWRpX3F1aXJrID0geworCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJm1pZGlfZXAKKwl9OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdWExMDEgKnVhOworCXVuc2lnbmVkIGludCBjYXJkX2luZGV4LCBpOworCWNoYXIgdXNiX3BhdGhbMzJdOworCWludCBlcnI7CisKKwlpZiAoaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKKworCWZvciAoY2FyZF9pbmRleCA9IDA7IGNhcmRfaW5kZXggPCBTTkRSVl9DQVJEUzsgKytjYXJkX2luZGV4KQorCQlpZiAoZW5hYmxlW2NhcmRfaW5kZXhdICYmICEoZGV2aWNlc191c2VkICYgKDEgPDwgY2FyZF9pbmRleCkpKQorCQkJYnJlYWs7CisJaWYgKGNhcmRfaW5kZXggPj0gU05EUlZfQ0FSRFMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtjYXJkX2luZGV4XSwgaWRbY2FyZF9pbmRleF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKCp1YSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCQlyZXR1cm4gZXJyOworCX0KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSB1YTEwMV9jYXJkX2ZyZWU7CisJdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdWEtPmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwl1YS0+Y2FyZCA9IGNhcmQ7CisJdWEtPmNhcmRfaW5kZXggPSBjYXJkX2luZGV4OworCUlOSVRfTElTVF9IRUFEKCZ1YS0+bWlkaV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmdWEtPmxvY2spOworCW11dGV4X2luaXQoJnVhLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwl0YXNrbGV0X2luaXQoJnVhLT5wbGF5YmFja190YXNrbGV0LAorCQkgICAgIHBsYXliYWNrX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXVhKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmludGZbMl0gPSBpbnRlcmZhY2U7CisJCXVhLT5pbnRmWzBdID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIDEpOworCQl1YS0+aW50ZlsxXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAyKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMF0sIHVhKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMV0sIHVhKTsKKwl9IGVsc2UgeworI2VuZGlmCisJdWEtPmludGZbMF0gPSBpbnRlcmZhY2U7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpIHsKKwkJdWEtPmludGZbaV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgaSk7CisJCWlmICghdWEtPmludGZbaV0pIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVyZmFjZSAldSBub3QgZm91bmRcbiIsIGkpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQllcnIgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdWExMDFfZHJpdmVyLAorCQkJCQkJIHVhLT5pbnRmW2ldLCB1YSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQl1YS0+aW50ZltpXSA9IE5VTEw7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJfQorI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaW50ZXJmYWNlLT5kZXYpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmZvcm1hdF9iaXQgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKKwkJdWEtPnJhdGUgPSA0NDEwMDsKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gMjsKKwkJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gMjsKKwkJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+Y2FwdHVyZS51c2JfcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1YS0+ZGV2LCAyKTsKKwkJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIDEpOworCQl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gMTkyOworCQl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKKwl9IGVsc2UgeworI2VuZGlmCisJZXJyID0gZGV0ZWN0X3VzYl9mb3JtYXQodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlVBLTEwMSIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJVQS0xMDEiKTsKKwl1c2JfbWFrZV9wYXRoKHVhLT5kZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTsKKwlzbnByaW50Zih1YS0+Y2FyZC0+bG9uZ25hbWUsIHNpemVvZih1YS0+Y2FyZC0+bG9uZ25hbWUpLAorCQkgIkVESVJPTCBVQS0xMDEgKHNlcmlhbCAlcyksICV1IEh6IGF0ICVzLCAlcyBzcGVlZCIsCisJCSB1YS0+ZGV2LT5zZXJpYWwgPyB1YS0+ZGV2LT5zZXJpYWwgOiAiPyIsIHVhLT5yYXRlLCB1c2JfcGF0aCwKKwkJIHVhLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gImhpZ2giIDogImZ1bGwiKTsKKworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPnBsYXliYWNrKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IGFsbG9jX3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUsIGNhcHR1cmVfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKwllcnIgPSBhbGxvY19zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjaywgcGxheWJhY2tfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJVQS0xMDEiLCAwLCAxLCAxLCAmdWEtPnBjbSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisJdWEtPnBjbS0+cHJpdmF0ZV9kYXRhID0gdWE7CisJc3RyY3B5KHVhLT5wY20tPm5hbWUsICJVQS0xMDEiKTsKKwlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnBsYXliYWNrX3BjbV9vcHMpOworCXNuZF9wY21fc2V0X29wcyh1YS0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZjYXB0dXJlX3BjbV9vcHMpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKyNlbmRpZgorCWVyciA9IHNuZF91c2JtaWRpX2NyZWF0ZShjYXJkLCB1YS0+aW50ZltJTlRGX01JREldLAorCQkJCSAmdWEtPm1pZGlfbGlzdCwgJm1pZGlfcXVpcmspOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgdWEpOworCWRldmljZXNfdXNlZCB8PSAxIDw8IGNhcmRfaW5kZXg7CisKKwltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCXJldHVybiAwOworCitwcm9iZV9lcnJvcjoKKwlmcmVlX3VzYl9yZWxhdGVkX3Jlc291cmNlcyh1YSwgaW50ZXJmYWNlKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdWExMDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGxpc3RfaGVhZCAqbWlkaTsKKworCWlmICghdWEpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRldmljZXNfbXV0ZXgpOworCisJc2V0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IHVzZXJzcGFjZSBjYW5ub3QgY3JlYXRlIG5ldyByZXF1ZXN0cyAqLworCXNuZF9jYXJkX2Rpc2Nvbm5lY3QodWEtPmNhcmQpOworCisJLyogbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgVVNCIHJlcXVlc3RzICovCisJX19saXN0X2Zvcl9lYWNoKG1pZGksICZ1YS0+bWlkaV9saXN0KQorCQlzbmRfdXNibWlkaV9kaXNjb25uZWN0KG1pZGkpOworCWFib3J0X2Fsc2FfcGxheWJhY2sodWEpOworCWFib3J0X2Fsc2FfY2FwdHVyZSh1YSk7CisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCisJZnJlZV91c2JfcmVsYXRlZF9yZXNvdXJjZXModWEsIGludGVyZmFjZSk7CisKKwlkZXZpY2VzX3VzZWQgJj0gfigxIDw8IHVhLT5jYXJkX2luZGV4KTsKKworCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQodWEtPmNhcmQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVhMTAxX2lkc1tdID0geworI2lmZGVmIFVBMUFfSEFDSworCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAxOCkgfSwKKyNlbmRpZgorCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwOGQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVhMTAxX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic25kLXVhMTAxIiwKKwkuaWRfdGFibGUgPSB1YTEwMV9pZHMsCisJLnByb2JlID0gdWExMDFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1YTEwMV9kaXNjb25uZWN0LAorI2lmIDAKKwkuc3VzcGVuZCA9IHVhMTAxX3N1c3BlbmQsCisJLnJlc3VtZSA9IHVhMTAxX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3VhMTAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1YTEwMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3VhMTAxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdWExMDFfZHJpdmVyKTsKKwltdXRleF9kZXN0cm95KCZkZXZpY2VzX211dGV4KTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX3VhMTAxX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX3VhMTAxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCA5ZWRlZjQ2Li5jNTM5ZjdmZSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTQ0LDkgKzQ0LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTE3MCwxMSArMTcyLDEyIEBACiAJdW5zaWduZWQgaW50IGN1cnBhY2tzaXplOwkvKiBjdXJyZW50IHBhY2tldCBzaXplIGluIGJ5dGVzIChmb3IgY2FwdHVyZSkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyZnJhbWVzaXplOwkvKiBjdXJyZW50IHBhY2tldCBzaXplIGluIGZyYW1lcyAoZm9yIGNhcHR1cmUpICovCiAJdW5zaWduZWQgaW50IGZpbGxfbWF4OiAxOwkvKiBmaWxsIG1heCBwYWNrZXQgc2l6ZSBhbHdheXMgKi8KKwl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOwkvKiBhbGxvdyBzdWItZnJhbWUgYWxpZ25tZW50ICovCiAJdW5zaWduZWQgaW50IGZtdF90eXBlOwkJLyogVVNCIGF1ZGlvIGZvcm1hdCB0eXBlICgxLTMpICovCiAKIAl1bnNpZ25lZCBpbnQgcnVubmluZzogMTsJLyogcnVubmluZyBzdGF0dXMgKi8KIAotCXVuc2lnbmVkIGludCBod3B0cl9kb25lOwkJCS8qIHByb2Nlc3NlZCBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyICovCisJdW5zaWduZWQgaW50IGh3cHRyX2RvbmU7CS8qIHByb2Nlc3NlZCBieXRlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfZG9uZTsJCS8qIHByb2Nlc3NlZCBmcmFtZXMgc2luY2UgbGFzdCBwZXJpb2QgdXBkYXRlICovCiAJdW5zaWduZWQgbG9uZyBhY3RpdmVfbWFzazsJLyogYml0bWFzayBvZiBhY3RpdmUgdXJicyAqLwogCXVuc2lnbmVkIGxvbmcgdW5saW5rX21hc2s7CS8qIGJpdG1hc2sgb2YgdW5saW5rZWQgdXJicyAqLwpAQCAtMzQzLDcgKzM0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpjcDsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc3RyaWRlLCBsZW4sIG9sZHB0cjsKKwl1bnNpZ25lZCBpbnQgc3RyaWRlLCBmcmFtZXMsIGJ5dGVzLCBvbGRwdHI7CiAJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKIAogCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKQEAgLTM1NCwyOSArMzU3LDM5IEBACiAJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJmcmFtZSAlZCBhY3RpdmU6ICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CiAJCQkvLyBjb250aW51ZTsKIAkJfQotCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLyBzdHJpZGU7Ci0JCWlmICghIGxlbikKLQkJCWNvbnRpbnVlOworCQlieXRlcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJZnJhbWVzID0gYnl0ZXMgLyBzdHJpZGU7CisJCWlmICghc3Vicy0+dHhmcl9xdWlyaykKKwkJCWJ5dGVzID0gZnJhbWVzICogc3RyaWRlOworCQlpZiAoYnl0ZXMgJSAocnVudGltZS0+c2FtcGxlX2JpdHMgPj4gMykgIT0gMCkgeworI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQorCQkJaW50IG9sZGJ5dGVzID0gYnl0ZXM7CisjZW5kaWYKKwkJCWJ5dGVzID0gZnJhbWVzICogc3RyaWRlOworCQkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIkNvcnJlY3RlZCB1cmIgZGF0YSBsZW4uICVkLT4lZFxuIiwKKwkJCQkJCQlvbGRieXRlcywgYnl0ZXMpOworCQl9CiAJCS8qIHVwZGF0ZSB0aGUgY3VycmVudCBwb2ludGVyICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzLT5sb2NrLCBmbGFncyk7CiAJCW9sZHB0ciA9IHN1YnMtPmh3cHRyX2RvbmU7Ci0JCXN1YnMtPmh3cHRyX2RvbmUgKz0gbGVuOwotCQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCXN1YnMtPnRyYW5zZmVyX2RvbmUgKz0gbGVuOworCQlzdWJzLT5od3B0cl9kb25lICs9IGJ5dGVzOworCQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSkKKwkJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGU7CisJCWZyYW1lcyA9IChieXRlcyArIChvbGRwdHIgJSBzdHJpZGUpKSAvIHN0cmlkZTsKKwkJc3Vicy0+dHJhbnNmZXJfZG9uZSArPSBmcmFtZXM7CiAJCWlmIChzdWJzLT50cmFuc2Zlcl9kb25lID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CiAJCQlzdWJzLT50cmFuc2Zlcl9kb25lIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJcGVyaW9kX2VsYXBzZWQgPSAxOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKIAkJLyogY29weSBhIGRhdGEgY2h1bmsgKi8KLQkJaWYgKG9sZHB0ciArIGxlbiA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCQl1bnNpZ25lZCBpbnQgY250ID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBvbGRwdHI7Ci0JCQl1bnNpZ25lZCBpbnQgYmxlbiA9IGNudCAqIHN0cmlkZTsKLQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGJsZW4pOwotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBjcCArIGJsZW4sIGxlbiAqIHN0cmlkZSAtIGJsZW4pOworCQlpZiAob2xkcHRyICsgYnl0ZXMgPiBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSkgeworCQkJdW5zaWduZWQgaW50IGJ5dGVzMSA9CisJCQkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlIC0gb2xkcHRyOworCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyLCBjcCwgYnl0ZXMxKTsKKwkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgY3AgKyBieXRlczEsIGJ5dGVzIC0gYnl0ZXMxKTsKIAkJfSBlbHNlIHsKLQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGxlbiAqIHN0cmlkZSk7CisJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIsIGNwLCBieXRlcyk7CiAJCX0KIAl9CiAJaWYgKHBlcmlvZF9lbGFwc2VkKQpAQCAtNTYzLDM0ICs1NzYsMzQgQEAKIAkJCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLAogCQkJCXN0cnVjdCB1cmIgKnVyYikKIHsKLQlpbnQgaSwgc3RyaWRlLCBvZmZzOwotCXVuc2lnbmVkIGludCBjb3VudHM7CisJaW50IGksIHN0cmlkZTsKKwl1bnNpZ25lZCBpbnQgY291bnRzLCBmcmFtZXMsIGJ5dGVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKIAlzdHJ1Y3Qgc25kX3VyYl9jdHggKmN0eCA9IHVyYi0+Y29udGV4dDsKIAogCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKIAotCW9mZnMgPSAwOworCWZyYW1lcyA9IDA7CiAJdXJiLT5kZXYgPSBjdHgtPnN1YnMtPmRldjsgLyogd2UgbmVlZCB0byBzZXQgdGhpcyBhdCBlYWNoIHRpbWUgKi8KIAl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjdHgtPnBhY2tldHM7IGkrKykgewogCQljb3VudHMgPSBzbmRfdXNiX2F1ZGlvX25leHRfcGFja2V0X3NpemUoc3Vicyk7CiAJCS8qIHNldCB1cCBkZXNjcmlwdG9yICovCi0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmcyAqIHN0cmlkZTsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBmcmFtZXMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwotCQlvZmZzICs9IGNvdW50czsKKwkJZnJhbWVzICs9IGNvdW50czsKIAkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cysrOwogCQlzdWJzLT50cmFuc2Zlcl9kb25lICs9IGNvdW50czsKIAkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKIAkJCXN1YnMtPnRyYW5zZmVyX2RvbmUgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CiAJCQlwZXJpb2RfZWxhcHNlZCA9IDE7Ci0JCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVVNCX0ZPUk1BVF9UWVBFX0lJKSB7CisJCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVUFDX0ZPUk1BVF9UWVBFX0lJKSB7CiAJCQkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPiAwKSB7CiAJCQkJCS8qIEZJWE1FOiBmaWxsLW1heCBtb2RlIGlzIG5vdAogCQkJCQkgKiBzdXBwb3J0ZWQgeWV0ICovCi0JCQkJCW9mZnMgLT0gc3Vicy0+dHJhbnNmZXJfZG9uZTsKKwkJCQkJZnJhbWVzIC09IHN1YnMtPnRyYW5zZmVyX2RvbmU7CiAJCQkJCWNvdW50cyAtPSBzdWJzLT50cmFuc2Zlcl9kb25lOwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9CiAJCQkJCQljb3VudHMgKiBzdHJpZGU7CkBAIC02MDAsNyArNjEzLDcgQEAKIAkJCQlpZiAoaSA8IGN0eC0+cGFja2V0cykgewogCQkJCQkvKiBhZGQgYSB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KIAkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPQotCQkJCQkJb2ZmcyAqIHN0cmlkZTsKKwkJCQkJCWZyYW1lcyAqIHN0cmlkZTsKIAkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAwOwogCQkJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzKys7CiAJCQkJfQpAQCAtNjEwLDI2ICs2MjMsMjUgQEAKIAkJaWYgKHBlcmlvZF9lbGFwc2VkKSAvKiBmaW5pc2ggYXQgdGhlIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJYnJlYWs7CiAJfQotCWlmIChzdWJzLT5od3B0cl9kb25lICsgb2ZmcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJaWYgKHN1YnMtPmh3cHRyX2RvbmUgKyBieXRlcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKSB7CiAJCS8qIGVyciwgdGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeS4gKi8KLQkJdW5zaWduZWQgaW50IGxlbiA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3Vicy0+aHdwdHJfZG9uZTsKKwkJdW5zaWduZWQgaW50IGJ5dGVzMSA9CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSAtIHN1YnMtPmh3cHRyX2RvbmU7CiAJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSAqIHN0cmlkZSwKLQkJICAgICAgIGxlbiAqIHN0cmlkZSk7Ci0JCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIGxlbiAqIHN0cmlkZSwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkgICAgICAgKG9mZnMgLSBsZW4pICogc3RyaWRlKTsKKwkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSwgYnl0ZXMxKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYnl0ZXMxLAorCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsIGJ5dGVzIC0gYnl0ZXMxKTsKIAl9IGVsc2UgewogCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCSAgICAgICBydW50aW1lLT5kbWFfYXJlYSArIHN1YnMtPmh3cHRyX2RvbmUgKiBzdHJpZGUsCi0JCSAgICAgICBvZmZzICogc3RyaWRlKTsKKwkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSwgYnl0ZXMpOwogCX0KLQlzdWJzLT5od3B0cl9kb25lICs9IG9mZnM7Ci0JaWYgKHN1YnMtPmh3cHRyX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JcnVudGltZS0+ZGVsYXkgKz0gb2ZmczsKKwlzdWJzLT5od3B0cl9kb25lICs9IGJ5dGVzOworCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKQorCQlzdWJzLT5od3B0cl9kb25lIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlOworCXJ1bnRpbWUtPmRlbGF5ICs9IGZyYW1lczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzLT5sb2NrLCBmbGFncyk7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb2ZmcyAqIHN0cmlkZTsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKIAlpZiAocGVyaW9kX2VsYXBzZWQpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vicy0+cGNtX3N1YnN0cmVhbSk7CiAJcmV0dXJuIDA7CkBAIC03MzUsNDEgKzc0Nyw2IEBACiB9CiAKIAotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwotfQotCi0vKiBhbGxvY2F0ZSB2aXJ0dWFsIGJ1ZmZlcjsgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSAqLwotc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vicywgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPj0gc2l6ZSkKLQkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGxhcmdlIGVub3VnaCAqLwotCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwotCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZyZWUgdmlydHVhbCBidWZmZXI7IG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQotCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQlydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogLyoKICAqIHVubGluayBhY3RpdmUgdXJicy4KICAqLwpAQCAtOTM3LDE4ICs5MTQsMTggQEAKIAogCiAvKgotICogcmV0dXJuIHRoZSBjdXJyZW50IHBjbSBwb2ludGVyLiAganVzdCByZXR1cm4gdGhlIGh3cHRyX2RvbmUgdmFsdWUuCisgKiByZXR1cm4gdGhlIGN1cnJlbnQgcGNtIHBvaW50ZXIuICBqdXN0IGJhc2VkIG9uIHRoZSBod3B0cl9kb25lIHZhbHVlLgogICovCiBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3VzYl9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnM7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgaHdwdHJfZG9uZTsKKwl1bnNpZ25lZCBpbnQgaHdwdHJfZG9uZTsKIAkKIAlzdWJzID0gKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqKXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9jaygmc3Vicy0+bG9jayk7CiAJaHdwdHJfZG9uZSA9IHN1YnMtPmh3cHRyX2RvbmU7CiAJc3Bpbl91bmxvY2soJnN1YnMtPmxvY2spOwotCXJldHVybiBod3B0cl9kb25lOworCXJldHVybiBod3B0cl9kb25lIC8gKHN1YnN0cmVhbS0+cnVudGltZS0+ZnJhbWVfYml0cyA+PiAzKTsKIH0KIAogCkBAIC0xMTMwLDcgKzExMDcsNyBAQAogCQl1LT5wYWNrZXRzID0gKGkgKyAxKSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnMKIAkJCS0gaSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnM7CiAJCXUtPmJ1ZmZlcl9zaXplID0gbWF4c2l6ZSAqIHUtPnBhY2tldHM7Ci0JCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpCisJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkpCiAJCQl1LT5wYWNrZXRzKys7IC8qIGZvciB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KIAkJdS0+dXJiID0gdXNiX2FsbG9jX3VyYih1LT5wYWNrZXRzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1LT51cmIpCkBAIC0xMjA2LDcgKzExODMsNyBAQAogCQkJaWYgKGkgPj0gZnAtPm5yX3JhdGVzKQogCQkJCWNvbnRpbnVlOwogCQl9Ci0JCWF0dHIgPSBmcC0+ZXBfYXR0ciAmIEVQX0FUVFJfTUFTSzsKKwkJYXR0ciA9IGZwLT5lcF9hdHRyICYgVVNCX0VORFBPSU5UX1NZTkNUWVBFOwogCQlpZiAoISBmb3VuZCkgewogCQkJZm91bmQgPSBmcDsKIAkJCWN1cl9hdHRyID0gYXR0cjsKQEAgLTEyMTgsMTQgKzExOTUsMTQgQEAKIAkJICogTS1hdWRpbyBhdWRpb3BoaWxlIFVTQi4KIAkJICovCiAJCWlmIChhdHRyICE9IGN1cl9hdHRyKSB7Ci0JCQlpZiAoKGF0dHIgPT0gRVBfQVRUUl9BU1lOQyAmJgorCQkJaWYgKChhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAotCQkJICAgIChhdHRyID09IEVQX0FUVFJfQURBUFRJVkUgJiYKKwkJCSAgICAoYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSkKIAkJCQljb250aW51ZTsKLQkJCWlmICgoY3VyX2F0dHIgPT0gRVBfQVRUUl9BU1lOQyAmJgorCQkJaWYgKChjdXJfYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BU1lOQyAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgfHwKLQkJCSAgICAoY3VyX2F0dHIgPT0gRVBfQVRUUl9BREFQVElWRSAmJgorCQkJICAgIChjdXJfYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSkgewogCQkJCWZvdW5kID0gZnA7CiAJCQkJY3VyX2F0dHIgPSBhdHRyOwpAQCAtMTI1NSwxMSArMTIzMiwxMSBAQAogCiAJZXAgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7CiAJLyogaWYgZW5kcG9pbnQgaGFzIHBpdGNoIGNvbnRyb2wsIGVuYWJsZSBpdCAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBFUF9DU19BVFRSX1BJVENIX0NPTlRST0wpIHsKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTCkgewogCQlkYXRhWzBdID0gMTsKLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAxLCAxMDAwKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBlbmFibGUgUElUQ0hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBlcCk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMTI3OCwyMSArMTI1NSwyMSBAQAogCiAJZXAgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7CiAJLyogaWYgZW5kcG9pbnQgaGFzIHNhbXBsaW5nIHJhdGUgY29udHJvbCwgc2V0IGl0ICovCi0JaWYgKGZtdC0+YXR0cmlidXRlcyAmIEVQX0NTX0FUVFJfU0FNUExFX1JBVEUpIHsKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUpIHsKIAkJaW50IGNyYXRlOwogCQlkYXRhWzBdID0gcmF0ZTsKIAkJZGF0YVsxXSA9IHJhdGUgPj4gODsKIAkJZGF0YVsyXSA9IHJhdGUgPj4gMTY7Ci0JCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCisJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFVBQ19TRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9PVVQsCi0JCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JWQ6JWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIHJhdGUsIGVwKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDX0dFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAotCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKKwkJCQkJICAgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgZXApOwogCQkJcmV0dXJuIDA7IC8qIHNvbWUgZGV2aWNlcyBkb24ndCBzdXBwb3J0IHJlYWRpbmcgKi8KQEAgLTEzMDcsNiArMTI4NCw0NyBAQAogfQogCiAvKgorICogRm9yIEUtTXUgMDQwNFVTQi8wMjAyVVNCL1RyYWNrZXJQcmUgc2FtcGxlIHJhdGUgc2hvdWxkIGJlIHNldCBmb3IgZGV2aWNlLAorICogbm90IGZvciBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9mb3JtYXRfZW11X3F1aXJrKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKKwkJCQkgc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQpCit7CisJdW5zaWduZWQgY2hhciBlbXVfc2FtcGxlcmF0ZV9pZCA9IDA7CisKKwkvKiBXaGVuIGNhcHR1cmUgaXMgYWN0aXZlCisJICogc2FtcGxlIHJhdGUgc2hvdWxkbid0IGJlIGNoYW5nZWQKKwkgKiBieSBwbGF5YmFjayBzdWJzdHJlYW0KKwkgKi8KKwlpZiAoc3Vicy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHN1YnMtPnN0cmVhbS0+c3Vic3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uaW50ZXJmYWNlICE9IC0xKQorCQkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZm10LT5yYXRlX21pbikgeworCWNhc2UgNDgwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzQ4MDAwSFo7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzg4MjAwSFo7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzk2MDAwSFo7CisJCWJyZWFrOworCWNhc2UgMTc2NDAwOgorCQllbXVfc2FtcGxlcmF0ZV9pZCA9IEVNVV9RVUlSS19TUl8xNzY0MDBIWjsKKwkJYnJlYWs7CisJY2FzZSAxOTIwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzE5MjAwMEhaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbXVfc2FtcGxlcmF0ZV9pZCA9IEVNVV9RVUlSS19TUl80NDEwMEhaOworCQlicmVhazsKKwl9CisJc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdWJzLT5zdHJlYW0tPmNoaXAsIGVtdV9zYW1wbGVyYXRlX2lkKTsKK30KKworLyoKICAqIGZpbmQgYSBtYXRjaGluZyBmb3JtYXQgYW5kIHNldCB1cCB0aGUgaW50ZXJmYWNlCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2Zvcm1hdChzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZm10KQpAQCAtMTM2OSw5ICsxMzg3LDkgQEAKIAkgKiBkZXNjcmlwdG9ycyB3aGljaCBmb29sIHVzLiAgaWYgaXQgaGFzIG9ubHkgb25lIEVQLAogCSAqIGFzc3VtZSBpdCBhcyBhZGFwdGl2ZS1vdXQgb3Igc3luYy1pbi4KIAkgKi8KLQlhdHRyID0gZm10LT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLOwotCWlmICgoKGlzX3BsYXliYWNrICYmIGF0dHIgPT0gRVBfQVRUUl9BU1lOQykgfHwKLQkgICAgICghIGlzX3BsYXliYWNrICYmIGF0dHIgPT0gRVBfQVRUUl9BREFQVElWRSkpICYmCisJYXR0ciA9IGZtdC0+ZXBfYXR0ciAmIFVTQl9FTkRQT0lOVF9TWU5DVFlQRTsKKwlpZiAoKChpc19wbGF5YmFjayAmJiBhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DKSB8fAorCSAgICAgKCEgaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSkpICYmCiAJICAgIGFsdHNkLT5iTnVtRW5kcG9pbnRzID49IDIpIHsKIAkJLyogY2hlY2sgc3luYy1waXBlIGVuZHBvaW50ICovCiAJCS8qIC4uLiBhbmQgY2hlY2sgZGVzY3JpcHRvciBzaXplIGJlZm9yZSBhY2Nlc3NpbmcgYlN5bmNoQWRkcmVzcwpAQCAtMTQxMSw3ICsxNDI5LDcgQEAKIAl9CiAKIAkvKiBhbHdheXMgZmlsbCBtYXggcGFja2V0IHNpemUgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgRVBfQ1NfQVRUUl9GSUxMX01BWCkKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfRklMTF9NQVgpCiAJCXN1YnMtPmZpbGxfbWF4ID0gMTsKIAogCWlmICgoZXJyID0gaW5pdF91c2JfcGl0Y2goZGV2LCBzdWJzLT5pbnRlcmZhY2UsIGFsdHMsIGZtdCkpIDwgMCkKQEAgLTE0MTksNiArMTQzNywxNCBAQAogCiAJc3Vicy0+Y3VyX2F1ZGlvZm10ID0gZm10OwogCisJc3dpdGNoIChzdWJzLT5zdHJlYW0tPmNoaXAtPnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjAyKTogLyogRS1NdSAwMjAyIFVTQiAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjA0KTogLyogRS1NdSAwNDA0IFVTQiAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjBhKTogLyogRS1NdSBUcmFja2VyIFByZSAqLworCQlzZXRfZm9ybWF0X2VtdV9xdWlyayhzdWJzLCBmbXQpOworCQlicmVhazsKKwl9CisKICNpZiAwCiAJcHJpbnRrKEtFUk5fREVCVUcKIAkgICAgICAgInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCkBAIC0xNDQ5LDggKzE0NzUsOCBAQAogCXVuc2lnbmVkIGludCBjaGFubmVscywgcmF0ZSwgZm9ybWF0OwogCWludCByZXQsIGNoYW5nZWQ7CiAKLQlyZXQgPSBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKLQkJCQkJICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXQgPSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNTA3LDcgKzE1MzMsNyBAQAogCXN1YnMtPnBlcmlvZF9ieXRlcyA9IDA7CiAJaWYgKCFzdWJzLT5zdHJlYW0tPmNoaXAtPnNodXRkb3duKQogCQlyZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOwotCXJldHVybiBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOwogfQogCiAvKgpAQCAtMTg2MSw3ICsxODg3LDcgQEAKIAkJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA9IGZwLT5jaGFubmVsczsKIAkJaWYgKHJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA8IGZwLT5jaGFubmVscykKIAkJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGZwLT5jaGFubmVsczsKLQkJaWYgKGZwLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkgJiYgZnAtPmZyYW1lX3NpemUgPiAwKSB7CisJCWlmIChmcC0+Zm10X3R5cGUgPT0gVUFDX0ZPUk1BVF9UWVBFX0lJICYmIGZwLT5mcmFtZV9zaXplID4gMCkgewogCQkJLyogRklYTUU6IHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgYXVkaW8gZm9ybWF0cy4uLiAqLwogCQkJcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21pbiA9IHJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPQogCQkJCWZwLT5mcmFtZV9zaXplOwpAQCAtMTk3Myw3ICsxOTk5LDggQEAKIAkucHJlcGFyZSA9CXNuZF91c2JfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQlzbmRfdXNiX3BjbV9wbGF5YmFja190cmlnZ2VyLAogCS5wb2ludGVyID0Jc25kX3VzYl9wY21fcG9pbnRlciwKLQkucGFnZSA9CQlzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2UsCisJLnBhZ2UgPQkJc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9CQlzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF91c2JfY2FwdHVyZV9vcHMgPSB7CkBAIC0xOTg1LDcgKzIwMTIsOCBAQAogCS5wcmVwYXJlID0Jc25kX3VzYl9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXNuZF91c2JfcGNtX2NhcHR1cmVfdHJpZ2dlciwKIAkucG9pbnRlciA9CXNuZF91c2JfcGNtX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCkBAIC0yMDkzLDcgKzIxMjEsNyBAQAogI2luY2x1ZGUgInVzYnF1aXJrcy5oIgogICAgIHsgLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpLAogICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLSAgICAgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTCB9LAorICAgICAgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wgfSwKICAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMjEzMiw3ICsyMTYwLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEVuZHBvaW50OiAlZCAlcyAoJXMpXG4iLAogCQkJICAgIGZwLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSywKIAkJCSAgICBmcC0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOID8gIklOIiA6ICJPVVQiLAotCQkJICAgIHN5bmNfdHlwZXNbKGZwLT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLKSA+PiAyXSk7CisJCQkgICAgc3luY190eXBlc1soZnAtPmVwX2F0dHIgJiBVU0JfRU5EUE9JTlRfU1lOQ1RZUEUpID4+IDJdKTsKIAkJaWYgKGZwLT5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpIHsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBSYXRlczogJWQgLSAlZCAoY29udGludW91cylcbiIsCiAJCQkJICAgIGZwLT5yYXRlX21pbiwgZnAtPnJhdGVfbWF4KTsKQEAgLTIyMjcsNiArMjI1NSw3IEBACiAJc3Vicy0+c3RyZWFtID0gYXM7CiAJc3Vicy0+ZGlyZWN0aW9uID0gc3RyZWFtOwogCXN1YnMtPmRldiA9IGFzLT5jaGlwLT5kZXY7CisJc3Vicy0+dHhmcl9xdWlyayA9IGFzLT5jaGlwLT50eGZyX3F1aXJrOwogCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKSB7CiAJCXN1YnMtPm9wcyA9IGF1ZGlvX3VyYl9vcHNbc3RyZWFtXTsKIAl9IGVsc2UgewpAQCAtMjM5NCwyOSArMjQyMyw2OCBAQAogICogQGZvcm1hdDogdGhlIGZvcm1hdCB0YWcgKHdGb3JtYXRUYWcpCiAgKiBAZm10OiB0aGUgZm9ybWF0IHR5cGUgZGVzY3JpcHRvcgogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pX3R5cGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkJICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pX3R5cGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICAgICBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQkgICAgIGludCBwcm90b2NvbCkKIHsKLQlpbnQgcGNtX2Zvcm1hdDsKKwlpbnQgcGNtX2Zvcm1hdCwgaTsKIAlpbnQgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXM7CiAKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlzYW1wbGVfd2lkdGggPSBmbXQtPmJCaXRSZXNvbHV0aW9uOworCQlzYW1wbGVfYnl0ZXMgPSBmbXQtPmJTdWJmcmFtZVNpemU7CisJCWJyZWFrOworCX0KKworCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZXh0X2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCXNhbXBsZV93aWR0aCA9IGZtdC0+YkJpdFJlc29sdXRpb247CisJCXNhbXBsZV9ieXRlcyA9IGZtdC0+YlN1YnNsb3RTaXplOworCisJCS8qCisJCSAqIEZJWE1FCisJCSAqIFVTQiBhdWRpbyBjbGFzcyB2MiBkZXZpY2VzIHNwZWNpZnkgYSBiaXRtYXAgb2YgcG9zc2libGUKKwkJICogYXVkaW8gZm9ybWF0cyByYXRoZXIgdGhhbiBvbmUgZml4IHZhbHVlLiBGb3Igbm93LCB3ZSBqdXN0CisJCSAqIHBpY2sgb25lIG9mIHRoZW0gYW5kIHJlcG9ydCB0aGF0IGFzIHRoZSBvbmx5IHBvc3NpYmxlCisJCSAqIHZhbHVlIGZvciB0aGlzIHNldHRpbmcuCisJCSAqIFRoZSBiaXQgYWxsb2NhdGlvbiBtYXAgaXMgaW4gZmFjdCBjb21wYXRpYmxlIHRvIHRoZQorCQkgKiB3Rm9ybWF0VGFnIG9mIHRoZSB2MSBBUyBzdHJlYW1pbmcgZGVzY3JpcHRvcnMsIHdoaWNoIGlzIHdoeQorCQkgKiB3ZSBjYW4gc2ltcGx5IG1hcCB0aGUgbWF0cml4LgorCQkgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJaWYgKGZvcm1hdCAmICgxVUwgPDwgaSkpIHsKKwkJCQlmb3JtYXQgPSBpICsgMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBGSVhNRTogY29ycmVjdCBlbmRpYW5lc3MgYW5kIHNpZ24/ICovCiAJcGNtX2Zvcm1hdCA9IC0xOwotCXNhbXBsZV93aWR0aCA9IGZtdFs2XTsKLQlzYW1wbGVfYnl0ZXMgPSBmbXRbNV07CisKIAlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgMDogLyogc29tZSBkZXZpY2VzIGRvbid0IGRlZmluZSB0aGlzIGNvcnJlY3RseS4uLiAqLworCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfVU5ERUZJTkVEOiAvKiBzb21lIGRldmljZXMgZG9uJ3QgZGVmaW5lIHRoaXMgY29ycmVjdGx5Li4uICovCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiBmb3JtYXQgdHlwZSAwIGlzIGRldGVjdGVkLCBwcm9jZXNzZWQgYXMgUENNXG4iLAogCQkJICAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nKTsKIAkJLyogZmFsbC10aHJvdWdoICovCi0JY2FzZSBVU0JfQVVESU9fRk9STUFUX1BDTToKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX1BDTToKIAkJaWYgKHNhbXBsZV93aWR0aCA+IHNhbXBsZV9ieXRlcyAqIDgpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICIlZDoldTolZCA6IHNhbXBsZSBiaXR3aWR0aCAlZCBpbiBvdmVyIHNhbXBsZSBieXRlcyAlZFxuIiwKIAkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZywKIAkJCQkgICBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CiAJCX0KIAkJLyogY2hlY2sgdGhlIGZvcm1hdCBieXRlIHNpemUgKi8KLQkJc3dpdGNoIChmbXRbNV0pIHsKKwkJcHJpbnRrKCIgWFhYWFggU0FNUExFIEJZVEVTICVkXG4iLCBzYW1wbGVfYnl0ZXMpOworCQlzd2l0Y2ggKHNhbXBsZV9ieXRlcykgewogCQljYXNlIDE6CiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKIAkJCWJyZWFrOwpAQCAtMjQzNywxMiArMjUwNSwxMiBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bnN1cHBvcnRlZCBzYW1wbGUgYml0d2lkdGggJWQgaW4gJWQgYnl0ZXNcbiIsCi0JCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwKLQkJCQkgICBmcC0+YWx0c2V0dGluZywgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXMpOworCQkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLAorCQkJCSAgIHNhbXBsZV93aWR0aCwgc2FtcGxlX2J5dGVzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgVVNCX0FVRElPX0ZPUk1BVF9QQ004OgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfUENNODoKIAkJcGNtX2Zvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfVTg7CiAKIAkJLyogRGFsbGFzIERTNDIwMSB3b3JrYXJvdW5kOiBpdCBhZHZlcnRpc2VzIFU4IGZvcm1hdCwgYnV0IHJlYWxseQpAQCAtMjQ1MCwxMyArMjUxOCwxMyBAQAogCQlpZiAoY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0ZmEsIDB4NDIwMSkpCiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0lFRUVfRkxPQVQ6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9JRUVFX0ZMT0FUOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRTsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0FMQVc6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9BTEFXOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9BX0xBVzsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX01VX0xBVzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX01VTEFXOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NVV9MQVc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNDcwLDcgKzI1MzgsNyBAQAogCiAvKgogICogcGFyc2UgdGhlIGZvcm1hdCBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgdGhlIHBvc3NpYmxlIHNhbXBsZSByYXRlcwotICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlLgorICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlIChhdWRpbyBjbGFzcyB2MSkuCiAgKgogICogQGRldjogdXNiIGRldmljZQogICogQGZwOiBhdWRpb2Zvcm1hdCByZWNvcmQKQEAgLTI0NzgsMTMgKzI1NDYsMTMgQEAKICAqIEBvZmZzZXQ6IHRoZSBzdGFydCBvZmZzZXQgb2YgZGVzY3JpcHRvciBwb2ludGluZyB0aGUgcmF0ZSB0eXBlCiAgKiAgICAgICAgICAoNyBmb3IgdHlwZSBJIGFuZCBJSSwgOCBmb3IgdHlwZSBJSSkKICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkJICAgIHVuc2lnbmVkIGNoYXIgKmZtdCwgaW50IG9mZnNldCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YxKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBvZmZzZXQpCiB7CiAJaW50IG5yX3JhdGVzID0gZm10W29mZnNldF07CiAKIAlpZiAoZm10WzBdIDwgb2Zmc2V0ICsgMSArIDMgKiAobnJfcmF0ZXMgPyBucl9yYXRlcyA6IDIpKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBGT1JNQVRfVFlQRSBkZXNjXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjUzNSwxNCArMjYwMyw4NyBAQAogfQogCiAvKgorICogcGFyc2UgdGhlIGZvcm1hdCBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgdGhlIHBvc3NpYmxlIHNhbXBsZSByYXRlcworICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlIChhdWRpbyBjbGFzcyB2MikuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YyKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJCSAgICAgICBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OworCXVuc2lnbmVkIGNoYXIgdG1wWzJdLCAqZGF0YTsKKwlpbnQgaSwgbnJfcmF0ZXMsIGRhdGFfc2l6ZSwgcmV0ID0gMDsKKworCS8qIGdldCB0aGUgbnVtYmVyIG9mIHNhbXBsZSByYXRlcyBmaXJzdCBieSBvbmx5IGZldGNoaW5nIDIgYnl0ZXMgKi8KKwlyZXQgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDMl9DU19SQU5HRSwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJICAgICAgIDB4MDEwMCwgY2hpcC0+Y2xvY2tfaWQgPDwgOCwgdG1wLCBzaXplb2YodG1wKSwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmV0cmlldmUgbnVtYmVyIG9mIHNhbXBsZSByYXRlc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCW5yX3JhdGVzID0gKHRtcFsxXSA8PCA4KSB8IHRtcFswXTsKKwlkYXRhX3NpemUgPSAyICsgMTIgKiBucl9yYXRlczsKKwlkYXRhID0ga3phbGxvYyhkYXRhX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBub3cgZ2V0IHRoZSBmdWxsIGluZm9ybWF0aW9uICovCisJcmV0ID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIFVBQzJfQ1NfUkFOR0UsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKKwkJCSAgICAgICAweDAxMDAsIGNoaXAtPmNsb2NrX2lkIDw8IDgsIGRhdGEsIGRhdGFfc2l6ZSwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmV0cmlldmUgc2FtcGxlIHJhdGUgcmFuZ2VcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWZwLT5yYXRlX3RhYmxlID0ga21hbGxvYyhzaXplb2YoaW50KSAqIG5yX3JhdGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZwLT5yYXRlX3RhYmxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZnAtPm5yX3JhdGVzID0gMDsKKwlmcC0+cmF0ZV9taW4gPSBmcC0+cmF0ZV9tYXggPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yX3JhdGVzOyBpKyspIHsKKwkJaW50IHJhdGUgPSBjb21iaW5lX3F1YWQoJmRhdGFbMiArIDEyICogaV0pOworCisJCWZwLT5yYXRlX3RhYmxlW2ZwLT5ucl9yYXRlc10gPSByYXRlOworCQlpZiAoIWZwLT5yYXRlX21pbiB8fCByYXRlIDwgZnAtPnJhdGVfbWluKQorCQkJZnAtPnJhdGVfbWluID0gcmF0ZTsKKwkJaWYgKCFmcC0+cmF0ZV9tYXggfHwgcmF0ZSA+IGZwLT5yYXRlX21heCkKKwkJCWZwLT5yYXRlX21heCA9IHJhdGU7CisJCWZwLT5yYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7CisJCWZwLT5ucl9yYXRlcysrOworCX0KKworZXJyX2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIHBhcnNlIHRoZSBmb3JtYXQgdHlwZSBJIGFuZCBJSUkgZGVzY3JpcHRvcnMKICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfaShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQlpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKIHsKLQlpbnQgcGNtX2Zvcm1hdDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZCA9IGdldF9pZmFjZV9kZXNjKGlmYWNlKTsKKwlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqZm10ID0gX2ZtdDsKKwlpbnQgcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCWludCBwY21fZm9ybWF0LCByZXQ7CiAKLQlpZiAoZm10WzNdID09IFVTQl9GT1JNQVRfVFlQRV9JSUkpIHsKKwlpZiAoZm10LT5iRm9ybWF0VHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUlJKSB7CiAJCS8qIEZJWE1FOiB0aGUgZm9ybWF0IHR5cGUgaXMgcmVhbGx5IElFQ3h4eAogCQkgKiAgICAgICAgYnV0IHdlIGdpdmUgbm9ybWFsIFBDTSBmb3JtYXQgdG8gZ2V0IHRoZSBleGlzdGluZwogCQkgKiAgICAgICAgYXBwcyB3b3JraW5nLi4uCkBAIC0yNTYwLDM0ICsyNzAxLDU3IEBACiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU7CiAJCX0KIAl9IGVsc2UgewotCQlwY21fZm9ybWF0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShjaGlwLCBmcCwgZm9ybWF0LCBmbXQpOworCQlwY21fZm9ybWF0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHByb3RvY29sKTsKIAkJaWYgKHBjbV9mb3JtYXQgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KKwogCWZwLT5mb3JtYXQgPSBwY21fZm9ybWF0OwotCWZwLT5jaGFubmVscyA9IGZtdFs0XTsKKworCS8qIGdhdGhlciBwb3NzaWJsZSBzYW1wbGUgcmF0ZXMgKi8KKwkvKiBhdWRpbyBjbGFzcyB2MSByZXBvcnRzIHBvc3NpYmxlIHNhbXBsZSByYXRlcyBhcyBwYXJ0IG9mIHRoZQorCSAqIHByb3ByaWV0YXJ5IGNsYXNzIHNwZWNpZmljIGRlc2NyaXB0b3IuCisJICogYXVkaW8gY2xhc3MgdjIgdXNlcyBjbGFzcyBzcGVjaWZpYyBFUDAgcmFuZ2UgcmVxdWVzdHMgZm9yIHRoYXQuCisJICovCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgVUFDX1ZFUlNJT05fMToKKwkJZnAtPmNoYW5uZWxzID0gZm10LT5iTnJDaGFubmVsczsKKwkJcmV0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YxKGNoaXAsIGZwLCBfZm10LCA3KTsKKwkJYnJlYWs7CisJY2FzZSBVQUNfVkVSU0lPTl8yOgorCQkvKiBmcC0+Y2hhbm5lbHMgaXMgYWxyZWFkeSBzZXQgaW4gdGhpcyBjYXNlICovCisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCwgaWZhY2UpOworCQlicmVhazsKKwl9CisKIAlpZiAoZnAtPmNoYW5uZWxzIDwgMSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgY2hhbm5lbHMgJWRcbiIsCiAJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZywgZnAtPmNoYW5uZWxzKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzKGNoaXAsIGZwLCBmbXQsIDcpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKLSAqIHByYXNlIHRoZSBmb3JtYXQgdHlwZSBJSSBkZXNjcmlwdG9yCisgKiBwYXJzZSB0aGUgZm9ybWF0IHR5cGUgSUkgZGVzY3JpcHRvcgogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10KQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfaWkoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJIGludCBmb3JtYXQsIHZvaWQgKl9mbXQsCisJCQkJIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQogewotCWludCBicmF0ZSwgZnJhbWVzaXplOworCWludCBicmF0ZSwgZnJhbWVzaXplLCByZXQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhpZmFjZSk7CisJaW50IHByb3RvY29sID0gYWx0c2QtPmJJbnRlcmZhY2VQcm90b2NvbDsKKwogCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0FDMzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzM6CiAJCS8qIEZJWE1FOiB0aGVyZSBpcyBubyBBQzMgZm9ybWF0IGRlZmluZWQgeWV0ICovCiAJCS8vIGZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0FDMzsKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfVTg7IC8qIHRlbXBvcmFyaWx5IGhhY2sgdG8gcmVjZWl2ZSBieXRlIHN0cmVhbXMgKi8KIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX01QRUc6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSUlfTVBFRzoKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI1OTYsMjYgKzI3NjAsNDYgQEAKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CiAJfQorCiAJZnAtPmNoYW5uZWxzID0gMTsKLQlicmF0ZSA9IGNvbWJpbmVfd29yZCgmZm10WzRdKTsgCS8qIGZtdFs0LDVdIDogd01heEJpdFJhdGUgKGluIGticHMpICovCi0JZnJhbWVzaXplID0gY29tYmluZV93b3JkKCZmbXRbNl0pOyAvKiBmbXRbNiw3XTogd1NhbXBsZXNQZXJGcmFtZSAqLwotCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKLQlmcC0+ZnJhbWVfc2l6ZSA9IGZyYW1lc2l6ZTsKLQlyZXR1cm4gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzKGNoaXAsIGZwLCBmbXQsIDgpOyAvKiBmbXRbOC4uXSBzYW1wbGUgcmF0ZXMgKi8KKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19mb3JtYXRfdHlwZV9paV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlicmF0ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d01heEJpdFJhdGUpOworCQlmcmFtZXNpemUgPSBsZTE2X3RvX2NwdShmbXQtPndTYW1wbGVzUGVyRnJhbWUpOworCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZm91bmQgZm9ybWF0IElJIHdpdGggbWF4LmJpdHJhdGUgPSAlZCwgZnJhbWUgc2l6ZT0lZFxuIiwgYnJhdGUsIGZyYW1lc2l6ZSk7CisJCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoY2hpcCwgZnAsIF9mbXQsIDgpOyAvKiBmbXRbOC4uXSBzYW1wbGUgcmF0ZXMgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lpX2V4dF9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlicmF0ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d01heEJpdFJhdGUpOworCQlmcmFtZXNpemUgPSBsZTE2X3RvX2NwdShmbXQtPndTYW1wbGVzUGVyRnJhbWUpOworCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZm91bmQgZm9ybWF0IElJIHdpdGggbWF4LmJpdHJhdGUgPSAlZCwgZnJhbWUgc2l6ZT0lZFxuIiwgYnJhdGUsIGZyYW1lc2l6ZSk7CisJCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjIoY2hpcCwgZnAsIGlmYWNlKTsKKwkJYnJlYWs7CisJfQorCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0KHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJICAgICAgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgc3RyZWFtKQorCQkJICAgICAgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgc3RyZWFtLAorCQkJICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoZm10WzNdKSB7Ci0JY2FzZSBVU0JfRk9STUFUX1RZUEVfSToKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JSUk6Ci0JCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSToKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSUk6CisJCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgaWZhY2UpOwogCQlicmVhazsKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JSToKLQkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lpKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSUk6CisJCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIGlmYWNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogZm9ybWF0IHR5cGUgJWQgaXMgbm90IHN1cHBvcnRlZCB5ZXRcbiIsCkBAIC0yNjMzLDcgKzI4MTcsNyBAQAogCWlmIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDAwKSB8fAogCSAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAogCSAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDYxKSkgewotCQlpZiAoZm10WzNdID09IFVTQl9GT1JNQVRfVFlQRV9JICYmCisJCWlmIChmbXRbM10gPT0gVUFDX0ZPUk1BVF9UWVBFX0kgJiYKIAkJICAgIGZwLT5yYXRlcyAhPSBTTkRSVl9QQ01fUkFURV80ODAwMCAmJgogCQkgICAgZnAtPnJhdGVzICE9IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCQkJcmV0dXJuIC0xOwpAQCAtMjY2MiwxMCArMjg0NiwxMCBAQAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7CiAJaW50IGksIGFsdG5vLCBlcnIsIHN0cmVhbTsKLQlpbnQgZm9ybWF0OworCWludCBmb3JtYXQgPSAwLCBudW1fY2hhbm5lbHMgPSAwOwogCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgKmZtdCwgKmNzZXA7Ci0JaW50IG51bTsKKwlpbnQgbnVtLCBwcm90b2NvbDsKIAogCWRldiA9IGNoaXAtPmRldjsKIApAQCAtMjY4NCwxMCArMjg2OCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nW2ldOwogCQlhbHRzZCA9IGdldF9pZmFjZV9kZXNjKGFsdHMpOworCQlwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CiAJCS8qIHNraXAgaW52YWxpZCBvbmUgKi8KIAkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyAmJgogCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAotCQkgICAgKGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORyAmJgorCQkgICAgKGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPU1RSRUFNSU5HICYmCiAJCSAgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfVkVORE9SX1NQRUMpIHx8CiAJCSAgICBhbHRzZC0+Yk51bUVuZHBvaW50cyA8IDEgfHwKIAkJICAgIGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpID09IDApCkBAIC0yNzA4LDMwICsyODkzLDY1IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBnZXQgYXVkaW8gZm9ybWF0cyAqLwotCQlmbXQgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIEFTX0dFTkVSQUwpOwotCQlpZiAoIWZtdCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBBU19HRU5FUkFMIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLAotCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwotCQkJY29udGludWU7CisJCXN3aXRjaCAocHJvdG9jb2wpIHsKKwkJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCQlzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YxICphcyA9CisJCQkJc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoYWx0cy0+ZXh0cmEsIGFsdHMtPmV4dHJhbGVuLCBOVUxMLCBVQUNfQVNfR0VORVJBTCk7CisKKwkJCWlmICghYXMpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IFVBQ19BU19HRU5FUkFMIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGFzLT5iTGVuZ3RoIDwgc2l6ZW9mKCphcykpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0FTX0dFTkVSQUwgZGVzY1xuIiwKKwkJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvcm1hdCA9IGxlMTZfdG9fY3B1KGFzLT53Rm9ybWF0VGFnKTsgLyogcmVtZW1iZXIgdGhlIGZvcm1hdCB2YWx1ZSAqLworCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoZm10WzBdIDwgNykgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEFTX0dFTkVSQUwgZGVzY1xuIiwKLQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKLQkJCWNvbnRpbnVlOworCQljYXNlIFVBQ19WRVJTSU9OXzI6IHsKKwkJCXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjIgKmFzID0KKwkJCQlzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19BU19HRU5FUkFMKTsKKworCQkJaWYgKCFhcykgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogVUFDX0FTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoYXMtPmJMZW5ndGggPCBzaXplb2YoKmFzKSkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfQVNfR0VORVJBTCBkZXNjXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbnVtX2NoYW5uZWxzID0gYXMtPmJOckNoYW5uZWxzOworCQkJZm9ybWF0ID0gbGUzMl90b19jcHUoYXMtPmJtRm9ybWF0cyk7CisKKwkJCWJyZWFrOwogCQl9CiAKLQkJZm9ybWF0ID0gKGZtdFs2XSA8PCA4KSB8IGZtdFs1XTsgLyogcmVtZW1iZXIgdGhlIGZvcm1hdCB2YWx1ZSAqLworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiB1bmtub3duIGludGVyZmFjZSBwcm90b2NvbCAlMDR4XG4iLAorCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIHByb3RvY29sKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogZ2V0IGZvcm1hdCB0eXBlICovCi0JCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgRk9STUFUX1RZUEUpOworCQlmbXQgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19GT1JNQVRfVFlQRSk7CiAJCWlmICghZm10KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IG5vIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IG5vIFVBQ19GT1JNQVRfVFlQRSBkZXNjXG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGZtdFswXSA8IDgpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBGT1JNQVRfVFlQRSBkZXNjXG4iLAorCQlpZiAoKChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSAmJiAoZm10WzBdIDwgOCkpIHx8CisJCSAgICAoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzIpICYmIChmbXRbMF0gIT0gNikpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjc0NCw2ICsyOTY0LDcgQEAKIAkJaWYgKGZtdFs0XSA9PSAxICYmIGZtdFs1XSA9PSAyICYmIGFsdG5vID09IDIgJiYgbnVtID09IDMgJiYKIAkJICAgIGZwICYmIGZwLT5hbHRzZXR0aW5nID09IDEgJiYgZnAtPmNoYW5uZWxzID09IDEgJiYKIAkJICAgIGZwLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgJiYKKwkJICAgIHByb3RvY29sID09IFVBQ19WRVJTSU9OXzEgJiYKIAkJICAgIGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpID09CiAJCQkJCQkJZnAtPm1heHBhY2tzaXplICogMikKIAkJCWNvbnRpbnVlOwpAQCAtMjc1Miw3ICsyOTczLDcgQEAKIAkJLyogQ3JlYW13YXJlIE5vYWggaGFzIHRoaXMgZGVzY3JpcHRvciBhZnRlciB0aGUgMm5kIGVuZHBvaW50ICovCiAJCWlmICghY3NlcCAmJiBhbHRzZC0+Yk51bUVuZHBvaW50cyA+PSAyKQogCQkJY3NlcCA9IHNuZF91c2JfZmluZF9kZXNjKGFsdHMtPmVuZHBvaW50WzFdLmV4dHJhLCBhbHRzLT5lbmRwb2ludFsxXS5leHRyYWxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5UKTsKLQkJaWYgKCFjc2VwIHx8IGNzZXBbMF0gPCA3IHx8IGNzZXBbMl0gIT0gRVBfR0VORVJBTCkgeworCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBVQUNfRVBfR0VORVJBTCkgewogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiV1OiVkIDogbm8gb3IgaW52YWxpZCIKIAkJCQkgICAiIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3JcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CkBAIC0yNzcyLDYgKzI5OTMsOCBAQAogCQlmcC0+ZXBfYXR0ciA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+Ym1BdHRyaWJ1dGVzOwogCQlmcC0+ZGF0YWludGVydmFsID0gcGFyc2VfZGF0YWludGVydmFsKGNoaXAsIGFsdHMpOwogCQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKKwkJLyogbnVtX2NoYW5uZWxzIGlzIG9ubHkgc2V0IGZvciB2MiBpbnRlcmZhY2VzICovCisJCWZwLT5jaGFubmVscyA9IG51bV9jaGFubmVsczsKIAkJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCQlmcC0+bWF4cGFja3NpemUgPSAoKChmcC0+bWF4cGFja3NpemUgPj4gMTEpICYgMykgKyAxKQogCQkJCQkqIChmcC0+bWF4cGFja3NpemUgJiAweDdmZik7CkBAIC0yNzg0LDEyICszMDA3LDEyIEBACiAJCQkvKiBPcHRvcGxheSBzZXRzIHRoZSBzYW1wbGUgcmF0ZSBhdHRyaWJ1dGUgYWx0aG91Z2gKIAkJCSAqIGl0IHNlZW1zIG5vdCBzdXBwb3J0aW5nIGl0IGluIGZhY3QuCiAJCQkgKi8KLQkJCWZwLT5hdHRyaWJ1dGVzICY9IH5FUF9DU19BVFRSX1NBTVBMRV9SQVRFOworCQkJZnAtPmF0dHJpYnV0ZXMgJj0gflVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzMDIwKTogLyogQ3JlYXRpdmUgU0IgQXVkaWd5IDIgTlggKi8KIAkJY2FzZSBVU0JfSUQoMHgwNzYzLCAweDIwMDMpOiAvKiBNLUF1ZGlvIEF1ZGlvcGhpbGUgVVNCICovCiAJCQkvKiBkb2Vzbid0IHNldCB0aGUgc2FtcGxlIHJhdGUgYXR0cmlidXRlLCBidXQgc3VwcG9ydHMgaXQgKi8KLQkJCWZwLT5hdHRyaWJ1dGVzIHw9IEVQX0NTX0FUVFJfU0FNUExFX1JBVEU7CisJCQlmcC0+YXR0cmlidXRlcyB8PSBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9JRCgweDA0N2YsIDB4MGNhMSk6IC8qIHBsYW50cm9uaWNzIGhlYWRzZXQgKi8KIAkJY2FzZSBVU0JfSUQoMHgwNzdkLCAweDA3YWYpOiAvKiBHcmlmZmluIGlNaWMgKG5vdGUgdGhhdCB0aGVyZSBpcwpAQCAtMjc5OCwxNiArMzAyMSwxNiBAQAogCQkgKiBwbGFudHJvbmljcyBoZWFkc2V0IGFuZCBHcmlmZmluIGlNaWMgaGF2ZSBzZXQgYWRhcHRpdmUtaW4KIAkJICogYWx0aG91Z2ggaXQncyByZWFsbHkgbm90Li4uCiAJCSAqLwotCQkJZnAtPmVwX2F0dHIgJj0gfkVQX0FUVFJfTUFTSzsKKwkJCWZwLT5lcF9hdHRyICY9IH5VU0JfRU5EUE9JTlRfU1lOQ1RZUEU7CiAJCQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQkJZnAtPmVwX2F0dHIgfD0gRVBfQVRUUl9BREFQVElWRTsKKwkJCQlmcC0+ZXBfYXR0ciB8PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRTsKIAkJCWVsc2UKLQkJCQlmcC0+ZXBfYXR0ciB8PSBFUF9BVFRSX1NZTkM7CisJCQkJZnAtPmVwX2F0dHIgfD0gVVNCX0VORFBPSU5UX1NZTkNfU1lOQzsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogb2ssIGxldCdzIHBhcnNlIGZ1cnRoZXIuLi4gKi8KLQkJaWYgKHBhcnNlX2F1ZGlvX2Zvcm1hdChjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHN0cmVhbSkgPCAwKSB7CisJCWlmIChwYXJzZV9hdWRpb19mb3JtYXQoY2hpcCwgZnAsIGZvcm1hdCwgZm10LCBzdHJlYW0sIGFsdHMpIDwgMCkgewogCQkJa2ZyZWUoZnAtPnJhdGVfdGFibGUpOwogCQkJa2ZyZWUoZnApOwogCQkJY29udGludWU7CkBAIC0yODQ5LDYgKzMwNzIsNjUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc25kX3VzYl9jcmVhdGVfc3RyZWFtKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgY3RybGlmLCBpbnQgaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBpbnRlcmZhY2UpOworCisJaWYgKCFpZmFjZSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGRvZXMgbm90IGV4aXN0XG4iLAorCQkJICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChpZmFjZSkpIHsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDolZDolZDogc2tpcHBpbmcsIGFscmVhZHkgY2xhaW1lZFxuIiwKKwkJCQkJCWRldi0+ZGV2bnVtLCBjdHJsaWYsIGludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMF07CisJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKKwlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPIHx8CisJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgJiYKKwkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORykgeworCQlpbnQgZXJyID0gc25kX3VzYm1pZGlfY3JlYXRlKGNoaXAtPmNhcmQsIGlmYWNlLAorCQkJCQkgICAgICZjaGlwLT5taWRpX2xpc3QsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQ6IGNhbm5vdCBjcmVhdGUgc2VxdWVuY2VyIGRldmljZVxuIiwKKwkJCQkJCWRldi0+ZGV2bnVtLCBjdHJsaWYsIGludGVyZmFjZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPICYmCisJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwKKwkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcpIHsKKwkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIiVkOiV1OiVkOiBza2lwcGluZyBub24tc3VwcG9ydGVkIGludGVyZmFjZSAlZFxuIiwKKwkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlLCBhbHRzZC0+YkludGVyZmFjZUNsYXNzKTsKKwkJLyogc2tpcCBub24tc3VwcG9ydGVkIGNsYXNzZXMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0xPVykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJsb3cgc3BlZWQgYXVkaW8gc3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoISBwYXJzZV9hdWRpb19lbmRwb2ludHMoY2hpcCwgaW50ZXJmYWNlKSkgeworCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGludGVyZmFjZSwgMCk7IC8qIHJlc2V0IHRoZSBjdXJyZW50IGludGVyZmFjZSAqLworCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBwYXJzZSBhdWRpbyBjb250cm9sIGRlc2NyaXB0b3IgYW5kIGNyZWF0ZSBwY20vbWlkaSBzdHJlYW1zCiAgKi8KQEAgLTI4NTYsNjcgKzMxMzgsODEgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2U7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwotCXVuc2lnbmVkIGNoYXIgKnAxOwotCWludCBpLCBqOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOworCXZvaWQgKmNvbnRyb2xfaGVhZGVyOworCWludCBpLCBwcm90b2NvbDsKIAogCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLwogCWhvc3RfaWZhY2UgPSAmdXNiX2lmbnVtX3RvX2lmKGRldiwgY3RybGlmKS0+YWx0c2V0dGluZ1swXTsKLQlpZiAoIShwMSA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLCBob3N0X2lmYWNlLT5leHRyYWxlbiwgTlVMTCwgSEVBREVSKSkpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGZpbmQgSEVBREVSXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICghIHAxWzddIHx8IHAxWzBdIDwgOCArIHAxWzddKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImludmFsaWQgSEVBREVSXG4iKTsKKwljb250cm9sX2hlYWRlciA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLAorCQkJCQkJIGhvc3RfaWZhY2UtPmV4dHJhbGVuLAorCQkJCQkJIE5VTEwsIFVBQ19IRUFERVIpOworCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoaG9zdF9pZmFjZSk7CisJcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCisJaWYgKCFjb250cm9sX2hlYWRlcikgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZmluZCBVQUNfSEVBREVSXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyoKLQkgKiBwYXJzZSBhbGwgVVNCIGF1ZGlvIHN0cmVhbWluZyBpbnRlcmZhY2VzCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHAxWzddOyBpKyspIHsKLQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7Ci0JCWogPSBwMVs4ICsgaV07Ci0JCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgaik7Ci0JCWlmICghaWZhY2UpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogZG9lcyBub3QgZXhpc3RcbiIsCi0JCQkJICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmgxID0gY29udHJvbF9oZWFkZXI7CisKKwkJaWYgKCFoMS0+YkluQ29sbGVjdGlvbikgeworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gInNraXBwaW5nIGVtcHR5IGF1ZGlvIGludGVyZmFjZSAodjEpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICh1c2JfaW50ZXJmYWNlX2NsYWltZWQoaWZhY2UpKSB7Ci0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiVkOiVkOiBza2lwcGluZywgYWxyZWFkeSBjbGFpbWVkXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCWNvbnRpbnVlOworCisJCWlmIChoMS0+Ykxlbmd0aCA8IHNpemVvZigqaDEpICsgaDEtPmJJbkNvbGxlY3Rpb24pIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImludmFsaWQgVUFDX0hFQURFUiAodjEpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMF07Ci0JCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8gfHwKLQkJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgJiYKLQkJICAgIGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVVNCX1NVQkNMQVNTX01JRElfU1RSRUFNSU5HKSB7Ci0JCQlpbnQgZXJyID0gc25kX3VzYm1pZGlfY3JlYXRlKGNoaXAtPmNhcmQsIGlmYWNlLAotCQkJCQkJICAgICAmY2hpcC0+bWlkaV9saXN0LCBOVUxMKTsKLQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQ6IGNhbm5vdCBjcmVhdGUgc2VxdWVuY2VyIGRldmljZVxuIiwgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKLQkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBoMS0+YkluQ29sbGVjdGlvbjsgaSsrKQorCQkJc25kX3VzYl9jcmVhdGVfc3RyZWFtKGNoaXAsIGN0cmxpZiwgaDEtPmJhSW50ZXJmYWNlTnJbaV0pOworCisJCWJyZWFrOworCX0KKworCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Nsb2NrX3NvdXJjZV9kZXNjcmlwdG9yICpjczsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciAqYXNzb2MgPQorCQkJdXNiX2lmbnVtX3RvX2lmKGRldiwgY3RybGlmKS0+aW50Zl9hc3NvYzsKKworCQlpZiAoIWFzc29jKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBdWRpbyBjbGFzcyB2MiBpbnRlcmZhY2VzIG5lZWQgYW4gaW50ZXJmYWNlIGFzc29jaWF0aW9uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQVVESU8gJiYKLQkJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwKLQkJICAgIGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORykgewotCQkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIiVkOiV1OiVkOiBza2lwcGluZyBub24tc3VwcG9ydGVkIGludGVyZmFjZSAlZFxuIiwgZGV2LT5kZXZudW0sIGN0cmxpZiwgaiwgYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyk7Ci0JCQkvKiBza2lwIG5vbi1zdXBwb3J0ZWQgY2xhc3NlcyAqLwotCQkJY29udGludWU7CisKKwkJLyogRklYTUU6IGZvciBub3csIHdlIGV4cGVjdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2xvY2sgc291cmNlCisJCSAqIGRlc2NyaXB0b3IgYW5kIHdlIGFsd2F5cyB0YWtlIHRoZSBmaXJzdCBvbmUuCisJCSAqIFdlIHNob3VsZCBwcm9wZXJseSBzdXBwb3J0IGRldmljZXMgd2l0aCBtdWx0aXBsZSBjbG9jayBzb3VyY2VzLAorCQkgKiBjbG9jayBzZWxlY3RvcnMgYW5kIHNhbXBsZSByYXRlIGNvbnZlcnNpb24gdW5pdHMuICovCisKKwkJY3MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0X2lmYWNlLT5leHRyYSwgaG9zdF9pZmFjZS0+ZXh0cmFsZW4sCisJCQkJCQlOVUxMLCBVQUNfQ0xPQ0tfU09VUkNFKTsKKworCQlpZiAoIWNzKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTE9DS19TT1VSQ0UgZGVzY3JpcHRvciBub3QgZm91bmRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0xPVykgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAibG93IHNwZWVkIGF1ZGlvIHN0cmVhbWluZyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCWNvbnRpbnVlOworCisJCWNoaXAtPmNsb2NrX2lkID0gY3MtPmJDbG9ja0lEOworCisJCWZvciAoaSA9IDA7IGkgPCBhc3NvYy0+YkludGVyZmFjZUNvdW50OyBpKyspIHsKKwkJCWludCBpbnRmID0gYXNzb2MtPmJGaXJzdEludGVyZmFjZSArIGk7CisKKwkJCWlmIChpbnRmICE9IGN0cmxpZikKKwkJCQlzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oY2hpcCwgY3RybGlmLCBpbnRmKTsKIAkJfQotCQlpZiAoISBwYXJzZV9hdWRpb19lbmRwb2ludHMoY2hpcCwgaikpIHsKLQkJCXVzYl9zZXRfaW50ZXJmYWNlKGRldiwgaiwgMCk7IC8qIHJlc2V0IHRoZSBjdXJyZW50IGludGVyZmFjZSAqLwotCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xTCk7Ci0JCX0KKworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIHByb3RvY29sIHZlcnNpb24gMHglMDJ4XG4iLCBwcm90b2NvbCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzAwNyw3ICszMzAzLDcgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF1ZGlvZm9ybWF0IHVhX2Zvcm1hdCA9IHsKIAkJLmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRSwKIAkJLmNoYW5uZWxzID0gMiwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCisJCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAogCQkuYWx0c2V0dGluZyA9IDEsCiAJCS5hbHRzZXRfaWR4ID0gMSwKIAkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKQEAgLTMwOTksNyArMzM5NSw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMDBfZm9ybWF0ID0gewogCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVTQl9GT1JNQVRfVFlQRV9JLAorCQkuZm10X3R5cGUgPSBVQUNfRk9STUFUX1RZUEVfSSwKIAkJLmFsdHNldHRpbmcgPSAxLAogCQkuYWx0c2V0X2lkeCA9IDEsCiAJCS5hdHRyaWJ1dGVzID0gMCwKQEAgLTMxNDIsNTkgKzM0MzgsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQ3JlYXRlIGEgc3RyZWFtIGZvciBhbiBFZGlyb2wgVUEtMTAxIGludGVyZmFjZS4KLSAqIENvcHksIHBhc3RlIGFuZCBtb2RpZnkgZnJvbSBFZGlyb2wgVUEtMTAwMAotICovCi1zdGF0aWMgaW50IGNyZWF0ZV91YTEwMV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKLQkJCSAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQgdWExMDFfZm9ybWF0ID0gewotCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVTQl9GT1JNQVRfVFlQRV9JLAotCQkuYWx0c2V0dGluZyA9IDEsCi0JCS5hbHRzZXRfaWR4ID0gMSwKLQkJLmF0dHJpYnV0ZXMgPSAwLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCX07Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOwotCWludCBzdHJlYW0sIGVycjsKLQotCWlmIChpZmFjZS0+bnVtX2FsdHNldHRpbmcgIT0gMikKLQkJcmV0dXJuIC1FTlhJTzsKLQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nWzFdOwotCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JaWYgKGFsdHMtPmV4dHJhbGVuICE9IDE4IHx8IGFsdHMtPmV4dHJhWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UgfHwKLQkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWZwID0ga21lbWR1cCgmdWExMDFfZm9ybWF0LCBzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmcC0+Y2hhbm5lbHMgPSBhbHRzLT5leHRyYVsxMV07Ci0JZnAtPmlmYWNlID0gYWx0c2QtPmJJbnRlcmZhY2VOdW1iZXI7Ci0JZnAtPmVuZHBvaW50ID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5iRW5kcG9pbnRBZGRyZXNzOwotCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7Ci0JZnAtPmRhdGFpbnRlcnZhbCA9IHBhcnNlX2RhdGFpbnRlcnZhbChjaGlwLCBhbHRzKTsKLQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKLQlmcC0+cmF0ZV9tYXggPSBmcC0+cmF0ZV9taW4gPSBjb21iaW5lX3RyaXBsZSgmYWx0cy0+ZXh0cmFbMTVdKTsKLQotCXN0cmVhbSA9IChmcC0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKQotCQk/IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSA6IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7Ci0JZXJyID0gYWRkX2F1ZGlvX2VuZHBvaW50KGNoaXAsIHN0cmVhbSwgZnApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlKGZwKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogRklYTUU6IHBsYXliYWNrIG11c3QgYmUgc3luY2hyb25pemVkIHRvIGNhcHR1cmUgKi8KLQl1c2Jfc2V0X2ludGVyZmFjZShjaGlwLT5kZXYsIGZwLT5pZmFjZSwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc25kX3VzYl9jcmVhdGVfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCiAJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAogCQkJCWNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrICpxdWlyayk7CkBAIC0zMjMyLDYgKzM0NzUsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEFsbG93IGFsaWdubWVudCBvbiBhdWRpbyBzdWItc2xvdCAoY2hhbm5lbCBzYW1wbGVzKSByYXRoZXIgdGhhbgorICogb24gYXVkaW8gc2xvdHMgKGF1ZGlvIGZyYW1lcykKKyAqLworc3RhdGljIGludCBjcmVhdGVfYWxpZ25fdHJhbnNmZXJfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCit7CisJY2hpcC0+dHhmcl9xdWlyayA9IDE7CisJcmV0dXJuIDE7CS8qIENvbnRpbnVlIHdpdGggY3JlYXRpbmcgc3RyZWFtcyBhbmQgbWl4ZXIgKi8KK30KKwogCiAvKgogICogYm9vdCBxdWlya3MKQEAgLTMzMjcsNiArMzU4MiwzMiBAQAogfQogCiAvKgorICogVGhpcyBjYWxsIHdpbGwgcHV0IHRoZSBzeW50aCBpbiAiVVNCIHNlbmQiIG1vZGUsIGkuZSBpdCB3aWxsIHNlbmQgTUlESQorICogbWVzc2FnZXMgdGhyb3VnaCBVU0IgKHRoaXMgaXMgZGlzYWJsZWQgYXQgc3RhcnR1cCkuIFRoZSBzeW50aCB3aWxsCisgKiBhY2tub3dsZWRnZSBieSBzZW5kaW5nIGEgc3lzZXggb24gZW5kcG9pbnQgMHg4NSBhbmQgYnkgZGlzcGxheWluZyBhIFVTQgorICogc2lnbiBvbiBpdHMgTENELiBWYWx1ZXMgaGVyZSBhcmUgY2hvc2VuIGJhc2VkIG9uIHNuaWZmaW5nIFVTQiB0cmFmZmljCisgKiB1bmRlciBXaW5kb3dzLgorICovCitzdGF0aWMgaW50IHNuZF91c2JfYWNjZXNzbXVzaWNfYm9vdF9xdWlyayhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludCBlcnIsIGFjdHVhbF9sZW5ndGg7CisKKwkvKiAibWlkaSBzZW5kIiBlbmFibGUgKi8KKwlzdGF0aWMgY29uc3QgdTggc2VxW10gPSB7IDB4NGUsIDB4NzMsIDB4NTIsIDB4MDEgfTsKKworCXZvaWQgKmJ1ZiA9IGttZW1kdXAoc2VxLCBBUlJBWV9TSVpFKHNlcSksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSB1c2JfaW50ZXJydXB0X21zZyhkZXYsIHVzYl9zbmRpbnRwaXBlKGRldiwgMHgwNSksIGJ1ZiwKKwkJCUFSUkFZX1NJWkUoc2VxKSwgJmFjdHVhbF9sZW5ndGgsIDEwMDApOworCWtmcmVlKGJ1Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFNldHVwIHF1aXJrcwogICovCiAjZGVmaW5lIEFVRElPUEhJTEVfU0VUCQkJMHgwMSAvKiBpZiBzZXQsIHBhcnNlIGRldmljZV9zZXR1cCAqLwpAQCAtMzQwNiw4ICszNjg3LDggQEAKIAkJW1FVSVJLX0FVRElPX1NUQU5EQVJEX0lOVEVSRkFDRV0gPSBjcmVhdGVfc3RhbmRhcmRfYXVkaW9fcXVpcmssCiAJCVtRVUlSS19BVURJT19GSVhFRF9FTkRQT0lOVF0gPSBjcmVhdGVfZml4ZWRfc3RyZWFtX3F1aXJrLAogCQlbUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMF0gPSBjcmVhdGVfdWExMDAwX3F1aXJrLAotCQlbUVVJUktfQVVESU9fRURJUk9MX1VBMTAxXSA9IGNyZWF0ZV91YTEwMV9xdWlyaywKLQkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrCisJCVtRVUlSS19BVURJT19FRElST0xfVUFYWF0gPSBjcmVhdGVfdWF4eF9xdWlyaywKKwkJW1FVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSXSA9IGNyZWF0ZV9hbGlnbl90cmFuc2Zlcl9xdWlyawogCX07CiAKIAlpZiAocXVpcmstPnR5cGUgPCBRVUlSS19UWVBFX0NPVU5UKSB7CkBAIC0zNTk2LDcgKzM4NzcsNiBAQAogCWlmbnVtID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyktPmJJbnRlcmZhY2VOdW1iZXI7CiAJaWQgPSBVU0JfSUQobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKLQogCWlmIChxdWlyayAmJiBxdWlyay0+aWZudW0gPj0gMCAmJiBpZm51bSAhPSBxdWlyay0+aWZudW0pCiAJCWdvdG8gX19lcnJfdmFsOwogCkBAIC0zNjI0LDYgKzM5MDQsMTIgQEAKIAkJCWdvdG8gX19lcnJfdmFsOwogCX0KIAorCS8qIEFjY2VzcyBNdXNpYyBWaXJ1c1RJIERlc2t0b3AgKi8KKwlpZiAoaWQgPT0gVVNCX0lEKDB4MTMzZSwgMHgwODE1KSkgeworCQlpZiAoc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKGRldikgPCAwKQorCQkJZ290byBfX2Vycl92YWw7CisJfQorCiAJLyoKIAkgKiBmb3VuZCBhIGNvbmZpZy4gIG5vdyByZWdpc3RlciB0byBBTFNBCiAJICovCkBAIC0zNjYxLDYgKzM5NDcsNyBAQAogCQl9CiAJfQogCisJY2hpcC0+dHhmcl9xdWlyayA9IDA7CiAJZXJyID0gMTsgLyogY29udGludWUgKi8KIAlpZiAocXVpcmsgJiYgcXVpcmstPmlmbnVtICE9IFFVSVJLX05PX0lOVEVSRkFDRSkgewogCQkvKiBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZ3MgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggNDBiYTgxMS4uNmIwMTZkNCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTIxLDkzICsyMSw2IEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKLQotLyoKLSAqLwotCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCTB4MDEKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORwkweDAyCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJX1NUUkVBTUlORwkweDAzCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQwkweGZmCi0KLSNkZWZpbmUgSEVBREVSCQkJCTB4MDEKLSNkZWZpbmUgSU5QVVRfVEVSTUlOQUwJCQkweDAyCi0jZGVmaW5lIE9VVFBVVF9URVJNSU5BTAkJCTB4MDMKLSNkZWZpbmUgTUlYRVJfVU5JVAkJCTB4MDQKLSNkZWZpbmUgU0VMRUNUT1JfVU5JVAkJCTB4MDUKLSNkZWZpbmUgRkVBVFVSRV9VTklUCQkJMHgwNgotI2RlZmluZSBQUk9DRVNTSU5HX1VOSVQJCQkweDA3Ci0jZGVmaW5lIEVYVEVOU0lPTl9VTklUCQkJMHgwOAotCi0jZGVmaW5lIEFTX0dFTkVSQUwJCQkweDAxCi0jZGVmaW5lIEZPUk1BVF9UWVBFCQkJMHgwMgotI2RlZmluZSBGT1JNQVRfU1BFQ0lGSUMJCQkweDAzCi0KLSNkZWZpbmUgRVBfR0VORVJBTAkJCTB4MDEKLQotI2RlZmluZSBNU19HRU5FUkFMCQkJMHgwMQotI2RlZmluZSBNSURJX0lOX0pBQ0sJCQkweDAyCi0jZGVmaW5lIE1JRElfT1VUX0pBQ0sJCQkweDAzCi0KLS8qIGVuZHBvaW50IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRVBfQVRUUl9NQVNLCQkJMHgwYwotI2RlZmluZSBFUF9BVFRSX0FTWU5DCQkJMHgwNAotI2RlZmluZSBFUF9BVFRSX0FEQVBUSVZFCQkweDA4Ci0jZGVmaW5lIEVQX0FUVFJfU1lOQwkJCTB4MGMKLQotLyogY3MgZW5kcG9pbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFUF9DU19BVFRSX1NBTVBMRV9SQVRFCQkweDAxCi0jZGVmaW5lIEVQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCi0jZGVmaW5lIEVQX0NTX0FUVFJfRklMTF9NQVgJCTB4ODAKLQotLyogQXVkaW8gQ2xhc3Mgc3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLwotCi0jZGVmaW5lIFNFVF9DVVIgICAgMHgwMQotI2RlZmluZSBHRVRfQ1VSICAgIDB4ODEKLSNkZWZpbmUgU0VUX01JTiAgICAweDAyCi0jZGVmaW5lIEdFVF9NSU4gICAgMHg4MgotI2RlZmluZSBTRVRfTUFYICAgIDB4MDMKLSNkZWZpbmUgR0VUX01BWCAgICAweDgzCi0jZGVmaW5lIFNFVF9SRVMgICAgMHgwNAotI2RlZmluZSBHRVRfUkVTICAgIDB4ODQKLSNkZWZpbmUgU0VUX01FTSAgICAweDA1Ci0jZGVmaW5lIEdFVF9NRU0gICAgMHg4NQotI2RlZmluZSBHRVRfU1RBVCAgIDB4ZmYKLQotLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KLQotI2RlZmluZSBDT1BZX1BST1RFQ1RfQ09OVFJPTCAgICAgICAweDAxCi0KLS8qIEVuZHBvaW50IENvbnRyb2wgU2VsZWN0b3JzICovCi0KLSNkZWZpbmUgU0FNUExJTkdfRlJFUV9DT05UUk9MICAgICAgMHgwMQotI2RlZmluZSBQSVRDSF9DT05UUk9MICAgICAgICAgICAgICAweDAyCi0KLS8qIEZvcm1hdCBUeXBlcyAqLwotI2RlZmluZSBVU0JfRk9STUFUX1RZUEVfSQkweDAxCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JSQkweDAyCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JSUkJMHgwMwotCi0vKiB0eXBlIEkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9QQ00JMHgwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX1BDTTgJMHgwMgotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFRUVfRkxPQVQJMHgwMwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0FMQVcJMHgwNAotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX01VX0xBVwkweDA1Ci0KLS8qIHR5cGUgSUkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9NUEVHCTB4MTAwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0FDMwkweDEwMDIKLQotLyogdHlwZSBJSUkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X0FDMwkweDIwMDEKLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X01QRUcxX0xBWUVSMQkweDIwMDIKLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X01QRUcyX05PRVhUCTB4MjAwMwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfRVhUCTB4MjAwNAotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTEFZRVIxX0xTCTB4MjAwNQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTEFZRVIyM19MUwkweDIwMDYKLQotCiAvKiBtYXhpbXVtIG51bWJlciBvZiBlbmRwb2ludHMgcGVyIGludGVyZmFjZSAqLwogI2RlZmluZSBNSURJX01BWF9FTkRQT0lOVFMgMgogCkBAIC0xMjUsOSArMzgsMTMgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJdTMyIHVzYl9pZDsKIAlpbnQgc2h1dGRvd247CisJdW5zaWduZWQgaW50IHR4ZnJfcXVpcms6MTsgLyogU3ViZnJhbWUgYm91bmRhcmllcyBvbiB0cmFuc2ZlcnMgKi8KIAlpbnQgbnVtX2ludGVyZmFjZXM7CiAJaW50IG51bV9zdXNwZW5kZWRfaW50ZjsKIAorCS8qIGZvciBhdWRpbyBjbGFzcyB2MiAqLworCWludCBjbG9ja19pZDsKKwogCXN0cnVjdCBsaXN0X2hlYWQgcGNtX2xpc3Q7CS8qIGxpc3Qgb2YgcGNtIHN0cmVhbXMgKi8KIAlpbnQgcGNtX2RldnM7CiAKQEAgLTE1OSw4ICs3Niw4IEBACiAJUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFLAogCVFVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5ULAogCVFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAsCi0JUVVJUktfQVVESU9fRURJUk9MX1VBMTAxLAogCVFVSVJLX0FVRElPX0VESVJPTF9VQVhYLAorCVFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAogCiAJUVVJUktfVFlQRV9DT1VOVAogfTsKQEAgLTIwOSw2ICsxMjYsMTYgQEAKIC8qCiAgKi8KIAorLypFLW11IFVTQiBzYW1wbGVyYXRlIGNvbnRyb2wgcXVpcmsqLworZW51bSB7CisJRU1VX1FVSVJLX1NSXzQ0MTAwSFogPSAwLAorCUVNVV9RVUlSS19TUl80ODAwMEhaLAorCUVNVV9RVUlSS19TUl84ODIwMEhaLAorCUVNVV9RVUlSS19TUl85NjAwMEhaLAorCUVNVV9RVUlSS19TUl8xNzY0MDBIWiwKKwlFTVVfUVVJUktfU1JfMTkyMDAwSFoKK307CisKICNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKihzKSkgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCiAjZGVmaW5lIGNvbWJpbmVfdHJpcGxlKHMpICAoY29tYmluZV93b3JkKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzJdIDw8IDE2KSkKICNkZWZpbmUgY29tYmluZV9xdWFkKHMpICAgIChjb21iaW5lX3RyaXBsZShzKSB8ICgodW5zaWduZWQgaW50KShzKVszXSA8PCAyNCkpCkBAIC0yMzQsNiArMTYxLDkgQEAKIHZvaWQgc25kX3VzYm1pZGlfaW5wdXRfc3RhcnQoc3RydWN0IGxpc3RfaGVhZCogcCk7CiB2b2lkIHNuZF91c2JtaWRpX2Rpc2Nvbm5lY3Qoc3RydWN0IGxpc3RfaGVhZCAqcCk7CiAKK3ZvaWQgc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCXVuc2lnbmVkIGNoYXIgc2FtcGxlcmF0ZV9pZCk7CisKIC8qCiAgKiByZXRyaWV2ZSB1c2JfaW50ZXJmYWNlIGRlc2NyaXB0b3IgZnJvbSB0aGUgaG9zdCBpbnRlcmZhY2UKICAqIChjb25kaXRpb25hbCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGRlciBBUEkpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWlkaS5jIGIvc291bmQvdXNiL3VzYm1pZGkuYwppbmRleCA2ZTg5YjgzLi4yYzU5YWZkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWlkaS5jCisrKyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgpAQCAtMTE2MiwxMCArMTE2NCwyMiBAQAogCQlwaXBlID0gdXNiX3NuZGludHBpcGUodW1pZGktPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKIAllbHNlCiAJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodW1pZGktPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKLQlpZiAodW1pZGktPnVzYl9pZCA9PSBVU0JfSUQoMHgwYTkyLCAweDEwMjApKSAvKiBFU0kgTTRVICovCi0JCWVwLT5tYXhfdHJhbnNmZXIgPSA0OwotCWVsc2UKKwlzd2l0Y2ggKHVtaWRpLT51c2JfaWQpIHsKKwlkZWZhdWx0OgogCQllcC0+bWF4X3RyYW5zZmVyID0gdXNiX21heHBhY2tldCh1bWlkaS0+ZGV2LCBwaXBlLCAxKTsKKwkJYnJlYWs7CisJCS8qCisJCSAqIFZhcmlvdXMgY2hpcHMgZGVjbGFyZSBhIHBhY2tldCBzaXplIGxhcmdlciB0aGFuIDQgYnl0ZXMsIGJ1dAorCQkgKiBkbyBub3QgYWN0dWFsbHkgd29yayB3aXRoIGxhcmdlciBwYWNrZXRzOgorCQkgKi8KKwljYXNlIFVTQl9JRCgweDBhOTIsIDB4MTAyMCk6IC8qIEVTSSBNNFUgKi8KKwljYXNlIFVTQl9JRCgweDE0MzAsIDB4NDc0Yik6IC8qIFJlZE9jdGFuZSBHSCBNSURJIElOVEVSRkFDRSAqLworCWNhc2UgVVNCX0lEKDB4MTVjYSwgMHgwMTAxKTogLyogVGV4dGVjaCBVU0IgTWlkaSBDYWJsZSAqLworCWNhc2UgVVNCX0lEKDB4MTVjYSwgMHgxODA2KTogLyogVGV4dGVjaCBVU0IgTWlkaSBDYWJsZSAqLworCWNhc2UgVVNCX0lEKDB4MWE4NiwgMHg3NTJkKTogLyogUWluSGVuZyBDSDM0NSAiVVNCMi4wLU1JREkiICovCisJCWVwLT5tYXhfdHJhbnNmZXIgPSA0OworCQlicmVhazsKKwl9CiAJZm9yIChpID0gMDsgaSA8IE9VVFBVVF9VUkJTOyArK2kpIHsKIAkJYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1bWlkaS0+ZGV2LAogCQkJCQkgIGVwLT5tYXhfdHJhbnNmZXIsIEdGUF9LRVJORUwsCkBAIC0xNDA3LDYgKzE0MjEsMTIgQEAKIAlFWFRFUk5BTF9QT1JUKDB4MDg2YSwgMHgwMDAxLCA4LCAiJXMgQnJvYWRjYXN0IiksCiAJRVhURVJOQUxfUE9SVCgweDA4NmEsIDB4MDAwMiwgOCwgIiVzIEJyb2FkY2FzdCIpLAogCUVYVEVSTkFMX1BPUlQoMHgwODZhLCAweDAwMDMsIDQsICIlcyBCcm9hZGNhc3QiKSwKKwkvKiBBY2Nlc3MgTXVzaWMgVmlydXMgVEkgKi8KKwlFWFRFUk5BTF9QT1JUKDB4MTMzZSwgMHgwODE1LCAwLCAiJXMgTUlESSIpLAorCVBPUlRfSU5GTygweDEzM2UsIDB4MDgxNSwgMSwgIiVzIFN5bnRoIiwgMCwKKwkJU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dFTkVSSUMgfAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX0hBUkRXQVJFIHwKKwkJU05EUlZfU0VRX1BPUlRfVFlQRV9TWU5USEVTSVpFUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBvcnRfaW5mbyAqZmluZF9wb3J0X2luZm8oc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGksIGludCBudW1iZXIpCkBAIC0xNTIyLDcgKzE1NDIsNyBAQAogCWlmIChob3N0aWYtPmV4dHJhbGVuID49IDcgJiYKIAkgICAgbXNfaGVhZGVyLT5iTGVuZ3RoID49IDcgJiYKIAkgICAgbXNfaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0NTX0lOVEVSRkFDRSAmJgotCSAgICBtc19oZWFkZXItPmJEZXNjcmlwdG9yU3VidHlwZSA9PSBIRUFERVIpCisJICAgIG1zX2hlYWRlci0+YkRlc2NyaXB0b3JTdWJ0eXBlID09IFVBQ19IRUFERVIpCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiTUlESVN0cmVhbWluZyB2ZXJzaW9uICUwMnguJTAyeFxuIiwKIAkJCSAgICBtc19oZWFkZXItPmJjZE1TQ1sxXSwgbXNfaGVhZGVyLT5iY2RNU0NbMF0pOwogCWVsc2UKQEAgLTE1MzgsNyArMTU1OCw3IEBACiAJCWlmIChob3N0ZXAtPmV4dHJhbGVuIDwgNCB8fAogCQkgICAgbXNfZXAtPmJMZW5ndGggPCA0IHx8CiAJCSAgICBtc19lcC0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9DU19FTkRQT0lOVCB8fAotCQkgICAgbXNfZXAtPmJEZXNjcmlwdG9yU3VidHlwZSAhPSBNU19HRU5FUkFMKQorCQkgICAgbXNfZXAtPmJEZXNjcmlwdG9yU3VidHlwZSAhPSBVQUNfTVNfR0VORVJBTCkKIAkJCWNvbnRpbnVlOwogCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZXApKSB7CiAJCQlpZiAoZW5kcG9pbnRzW2VwaWR4XS5vdXRfZXApIHsKQEAgLTE3NTAsOSArMTc3MCw5IEBACiAJICAgICBjc19kZXNjIDwgaG9zdGlmLT5leHRyYSArIGhvc3RpZi0+ZXh0cmFsZW4gJiYgY3NfZGVzY1swXSA+PSAyOwogCSAgICAgY3NfZGVzYyArPSBjc19kZXNjWzBdKSB7CiAJCWlmIChjc19kZXNjWzFdID09IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWlmIChjc19kZXNjWzJdID09IE1JRElfSU5fSkFDSykKKwkJCWlmIChjc19kZXNjWzJdID09IFVBQ19NSURJX0lOX0pBQ0spCiAJCQkJZW5kcG9pbnQtPmluX2NhYmxlcyA9IChlbmRwb2ludC0+aW5fY2FibGVzIDw8IDEpIHwgMTsKLQkJCWVsc2UgaWYgKGNzX2Rlc2NbMl0gPT0gTUlESV9PVVRfSkFDSykKKwkJCWVsc2UgaWYgKGNzX2Rlc2NbMl0gPT0gVUFDX01JRElfT1VUX0pBQ0spCiAJCQkJZW5kcG9pbnQtPm91dF9jYWJsZXMgPSAoZW5kcG9pbnQtPm91dF9jYWJsZXMgPDwgMSkgfCAxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCBjOTk4MjIwLi44ZThmODcxYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CkBAIC02OSwxMyArNzEsMTYgQEAKIAl7IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIFRvc2hpYmEgU0IwNTAwICovCiB9OwogCisjZGVmaW5lIE1BWF9JRF9FTEVNUwkyNTYKKwogc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgewogCXN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwOwogCXVuc2lnbmVkIGludCBjdHJsaWY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGludCBpZ25vcmVfY3RsX2Vycm9yOwogCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqKmlkX2VsZW1zOyAvKiBhcnJheVsyNTZdLCBpbmRleGVkIGJ5IHVuaXQgaWQgKi8KKwkvKiBhcnJheVtNQVhfSURfRUxFTVNdLCBpbmRleGVkIGJ5IHVuaXQgaWQgKi8KKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqKmlkX2VsZW1zOwogCiAJLyogU291bmQgQmxhc3RlciByZW1vdGUgY29udHJvbCBzdHVmZiAqLwogCWNvbnN0IHN0cnVjdCByY19jb25maWcgKnJjX2NmZzsKQEAgLTEwNSw3ICsxMTAsNyBAQAogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJdW5zaWduZWQgaW50IGJ1ZmxlbjsKLQlERUNMQVJFX0JJVE1BUCh1bml0Yml0bWFwLCAyNTYpOworCURFQ0xBUkVfQklUTUFQKHVuaXRiaXRtYXAsIE1BWF9JRF9FTEVNUyk7CiAJc3RydWN0IHVzYl9hdWRpb190ZXJtIG90ZXJtOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAljb25zdCBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCAqc2VsZWN0b3JfbWFwOwpAQCAtMTIzLDYgKzEyOCw3IEBACiAJaW50IGNoYW5uZWxzOwogCWludCB2YWxfdHlwZTsKIAlpbnQgbWluLCBtYXgsIHJlczsKKwlpbnQgZEJtaW4sIGRCbWF4OwogCWludCBjYWNoZWQ7CiAJaW50IGNhY2hlX3ZhbFtNQVhfQ0hBTk5FTFNdOwogCXU4IGluaXRpYWxpemVkOwpAQCAtMTg2LDYgKzE5MiwyMSBAQAogCVVTQl9QUk9DX0RDUl9SRUxFQVNFID0gNiwKIH07CiAKKy8qRS1tdSAwMjAyKDA0MDQpIGVYdGVuc2lvbiBVbml0KFhVKSBjb250cm9sKi8KK2VudW0geworCVVTQl9YVV9DTE9DS19SQVRFIAkJPSAweGUzMDEsCisJVVNCX1hVX0NMT0NLX1NPVVJDRQkJPSAweGUzMDIsCisJVVNCX1hVX0RJR0lUQUxfSU9fU1RBVFVTCT0gMHhlMzAzLAorCVVTQl9YVV9ERVZJQ0VfT1BUSU9OUwkJPSAweGUzMDQsCisJVVNCX1hVX0RJUkVDVF9NT05JVE9SSU5HCT0gMHhlMzA1LAorCVVTQl9YVV9NRVRFUklORwkJCT0gMHhlMzA2Cit9OworZW51bSB7CisJVVNCX1hVX0NMT0NLX1NPVVJDRV9TRUxFQ1RPUiA9IDB4MDIsCS8qIGNsb2NrIHNvdXJjZSovCisJVVNCX1hVX0NMT0NLX1JBVEVfU0VMRUNUT1IgPSAweDAzLAkvKiBjbG9jayByYXRlICovCisJVVNCX1hVX0RJR0lUQUxfRk9STUFUX1NFTEVDVE9SID0gMHgwMSwJLyogdGhlIHNwZGlmIGZvcm1hdCAqLworCVVTQl9YVV9TT0ZUX0xJTUlUX1NFTEVDVE9SID0gMHgwMwkvKiBzb2Z0IGxpbWl0ZXIgKi8KK307CiAKIC8qCiAgKiBtYW51YWwgbWFwcGluZyBvZiBtaXhlciBuYW1lcwpAQCAtMTk0LDQyICsyMTUsNTAgQEAKICAqLwogI2luY2x1ZGUgInVzYm1peGVyX21hcHMuYyIKIAotLyogZ2V0IHRoZSBtYXBwZWQgbmFtZSBpZiB0aGUgdW5pdCBtYXRjaGVzICovCi1zdGF0aWMgaW50IGNoZWNrX21hcHBlZF9uYW1lKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sLCBjaGFyICpidWYsIGludCBidWZsZW4pCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqCitmaW5kX21hcChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkLCBpbnQgY29udHJvbCkKIHsKLQljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnAgPSBzdGF0ZS0+bWFwOwogCi0JaWYgKCEgc3RhdGUtPm1hcCkKLQkJcmV0dXJuIDA7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKIAogCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKLQkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiBwLT5uYW1lICYmCi0JCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQlidWZsZW4tLTsKLQkJCXJldHVybiBzdHJsY3B5KGJ1ZiwgcC0+bmFtZSwgYnVmbGVuKTsKLQkJfQorCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmCisJCSAgICAoIWNvbnRyb2wgfHwgIXAtPmNvbnRyb2wgfHwgY29udHJvbCA9PSBwLT5jb250cm9sKSkKKwkJCXJldHVybiBwOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogZ2V0IHRoZSBtYXBwZWQgbmFtZSBpZiB0aGUgdW5pdCBtYXRjaGVzICovCitzdGF0aWMgaW50CitjaGVja19tYXBwZWRfbmFtZShjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJaWYgKCFwIHx8ICFwLT5uYW1lKQorCQlyZXR1cm4gMDsKKworCWJ1Zmxlbi0tOworCXJldHVybiBzdHJsY3B5KGJ1ZiwgcC0+bmFtZSwgYnVmbGVuKTsKIH0KIAogLyogY2hlY2sgd2hldGhlciB0aGUgY29udHJvbCBzaG91bGQgYmUgaWdub3JlZCAqLwotc3RhdGljIGludCBjaGVja19pZ25vcmVkX2N0bChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkLCBpbnQgY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgaW50CitjaGVja19pZ25vcmVkX2N0bChjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwKQogewotCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnA7Ci0KLQlpZiAoISBzdGF0ZS0+bWFwKQorCWlmICghcCB8fCBwLT5uYW1lIHx8IHAtPmRCKQogCQlyZXR1cm4gMDsKLQlmb3IgKHAgPSBzdGF0ZS0+bWFwOyBwLT5pZDsgcCsrKSB7Ci0JCWlmIChwLT5pZCA9PSB1bml0aWQgJiYgISBwLT5uYW1lICYmCi0JCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQkvKgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwKLQkJCSAgICAgICB1bml0aWQsIGNvbnRyb2wpOwotCQkJKi8KLQkJCXJldHVybiAxOwotCQl9CisJcmV0dXJuIDE7Cit9CisKKy8qIGRCIG1hcHBpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19tYXBwZWRfZEIoY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcCwKKwkJCQkgICBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCkKK3sKKwlpZiAocCAmJiBwLT5kQikgeworCQljdmFsLT5kQm1pbiA9IHAtPmRCLT5taW47CisJCWN2YWwtPmRCbWF4ID0gcC0+ZEItPm1heDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIGdldCB0aGUgbWFwcGVkIHNlbGVjdG9yIHNvdXJjZSBuYW1lICovCkBAIC0yNTcsNyArMjg2LDcgQEAKIAlwID0gTlVMTDsKIAl3aGlsZSAoKHAgPSBzbmRfdXNiX2ZpbmRfZGVzYyhzdGF0ZS0+YnVmZmVyLCBzdGF0ZS0+YnVmbGVuLCBwLAogCQkJCSAgICAgIFVTQl9EVF9DU19JTlRFUkZBQ0UpKSAhPSBOVUxMKSB7Ci0JCWlmIChwWzBdID49IDQgJiYgcFsyXSA+PSBJTlBVVF9URVJNSU5BTCAmJiBwWzJdIDw9IEVYVEVOU0lPTl9VTklUICYmIHBbM10gPT0gdW5pdCkKKwkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IFVBQ19JTlBVVF9URVJNSU5BTCAmJiBwWzJdIDw9IFVBQ19FWFRFTlNJT05fVU5JVF9WMSAmJiBwWzNdID09IHVuaXQpCiAJCQlyZXR1cm4gcDsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0zNzgsMTQgKzQwNywxNCBAQAogCiBzdGF0aWMgaW50IGdldF9jdXJfY3RsX3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgdmFsaWR4LCBpbnQgKnZhbHVlKQogewotCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOworCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAogLyogY2hhbm5lbCA9IDA6IG1hc3RlciwgMSA9IGZpcnN0IGNoYW5uZWwgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3JhdyhzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKIAkJCQkgIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQogewotCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOworCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKQEAgLTQzOSwxNCArNDY4LDE0IEBACiAKIHN0YXRpYyBpbnQgc2V0X2N1cl9jdGxfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCB2YWxpZHgsIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKKwlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLAogCQkJICAgICBpbnQgaW5kZXgsIGludCB2YWx1ZSkKIHsKIAlpbnQgZXJyOwotCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAorCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX1NFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwKIAkJCSAgICB2YWx1ZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC00NjYsMjAgKzQ5NSw4IEBACiAKIAlpZiAoc2l6ZSA8IHNpemVvZihzY2FsZSkpCiAJCXJldHVybiAtRU5PTUVNOwotCS8qIFVTQiBkZXNjcmlwdGlvbnMgY29udGFpbiB0aGUgZEIgc2NhbGUgaW4gMS8yNTYgZEIgdW5pdAotCSAqIHdoaWxlIEFMU0EgVExWIGNvbnRhaW5zIGluIDEvMTAwIGRCIHVuaXQKLQkgKi8KLQlzY2FsZVsyXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5taW4pICogMTAwKSAvIDI1NjsKLQlzY2FsZVszXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5tYXgpICogMTAwKSAvIDI1NjsKLQlpZiAoc2NhbGVbM10gPD0gc2NhbGVbMl0pIHsKLQkJLyogc29tZXRoaW5nIGlzIHdyb25nOyBhc3N1bWUgaXQncyBlaXRoZXIgZnJvbS90byAwZEIgKi8KLQkJaWYgKHNjYWxlWzJdIDwgMCkKLQkJCXNjYWxlWzNdID0gMDsKLQkJZWxzZSBpZiAoc2NhbGVbMl0gPiAwKQotCQkJc2NhbGVbMl0gPSAwOwotCQllbHNlIC8qIHRvdGFsbHkgY3JhcCwgcmV0dXJuIGFuIGVycm9yICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJc2NhbGVbMl0gPSBjdmFsLT5kQm1pbjsKKwlzY2FsZVszXSA9IGN2YWwtPmRCbWF4OwogCWlmIChjb3B5X3RvX3VzZXIoX3Rsdiwgc2NhbGUsIHNpemVvZihzY2FsZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTU4OCwxMyArNjA1LDEzIEBACiAJCWlmICh0ZXJtX29ubHkpCiAJCQlyZXR1cm4gMDsKIAkJc3dpdGNoIChpdGVybS0+dHlwZSA+PiAxNikgewotCQljYXNlIFNFTEVDVE9SX1VOSVQ6CisJCWNhc2UgVUFDX1NFTEVDVE9SX1VOSVQ6CiAJCQlzdHJjcHkobmFtZSwgIlNlbGVjdG9yIik7IHJldHVybiA4OwotCQljYXNlIFBST0NFU1NJTkdfVU5JVDoKKwkJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgogCQkJc3RyY3B5KG5hbWUsICJQcm9jZXNzIFVuaXQiKTsgcmV0dXJuIDEyOwotCQljYXNlIEVYVEVOU0lPTl9VTklUOgorCQljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJCXN0cmNweShuYW1lLCAiRXh0IFVuaXQiKTsgcmV0dXJuIDg7Ci0JCWNhc2UgTUlYRVJfVU5JVDoKKwkJY2FzZSBVQUNfTUlYRVJfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiTWl4ZXIiKTsgcmV0dXJuIDU7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gc3ByaW50ZihuYW1lLCAiVW5pdCAlZCIsIGl0ZXJtLT5pZCk7CkBAIC02MzMsMjIgKzY1MCwyMiBAQAogCXdoaWxlICgocDEgPSBmaW5kX2F1ZGlvX2NvbnRyb2xfdW5pdChzdGF0ZSwgaWQpKSAhPSBOVUxMKSB7CiAJCXRlcm0tPmlkID0gaWQ7CiAJCXN3aXRjaCAocDFbMl0pIHsKLQkJY2FzZSBJTlBVVF9URVJNSU5BTDoKKwkJY2FzZSBVQUNfSU5QVVRfVEVSTUlOQUw6CiAJCQl0ZXJtLT50eXBlID0gY29tYmluZV93b3JkKHAxICsgNCk7CiAJCQl0ZXJtLT5jaGFubmVscyA9IHAxWzddOwogCQkJdGVybS0+Y2hjb25maWcgPSBjb21iaW5lX3dvcmQocDEgKyA4KTsKIAkJCXRlcm0tPm5hbWUgPSBwMVsxMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBGRUFUVVJFX1VOSVQ6CisJCWNhc2UgVUFDX0ZFQVRVUkVfVU5JVDoKIAkJCWlkID0gcDFbNF07CiAJCQlicmVhazsgLyogY29udGludWUgdG8gcGFyc2UgKi8KLQkJY2FzZSBNSVhFUl9VTklUOgorCQljYXNlIFVBQ19NSVhFUl9VTklUOgogCQkJdGVybS0+dHlwZSA9IHAxWzJdIDw8IDE2OyAvKiB2aXJ0dWFsIHR5cGUgKi8KIAkJCXRlcm0tPmNoYW5uZWxzID0gcDFbNSArIHAxWzRdXTsKIAkJCXRlcm0tPmNoY29uZmlnID0gY29tYmluZV93b3JkKHAxICsgNiArIHAxWzRdKTsKIAkJCXRlcm0tPm5hbWUgPSBwMVtwMVswXSAtIDFdOwogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgU0VMRUNUT1JfVU5JVDoKKwkJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJCS8qIGNhbGwgcmVjdXJzaXZlbHkgdG8gcmV0cmlldmUgdGhlIGNoYW5uZWwgaW5mbyAqLwogCQkJaWYgKGNoZWNrX2lucHV0X3Rlcm0oc3RhdGUsIHAxWzVdLCB0ZXJtKSA8IDApCiAJCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NTYsOCArNjczLDggQEAKIAkJCXRlcm0tPmlkID0gaWQ7CiAJCQl0ZXJtLT5uYW1lID0gcDFbOSArIHAxWzBdIC0gMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBQUk9DRVNTSU5HX1VOSVQ6Ci0JCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCWNhc2UgVUFDX1BST0NFU1NJTkdfVU5JVF9WMToKKwkJY2FzZSBVQUNfRVhURU5TSU9OX1VOSVRfVjE6CiAJCQlpZiAocDFbNl0gPT0gMSkgewogCQkJCWlkID0gcDFbN107CiAJCQkJYnJlYWs7IC8qIGNvbnRpbnVlIHRvIHBhcnNlICovCkBAIC03MjAsNiArNzM3LDcgQEAKIAljdmFsLT5taW4gPSBkZWZhdWx0X21pbjsKIAljdmFsLT5tYXggPSBjdmFsLT5taW4gKyAxOwogCWN2YWwtPnJlcyA9IDE7CisJY3ZhbC0+ZEJtaW4gPSBjdmFsLT5kQm1heCA9IDA7CiAKIAlpZiAoY3ZhbC0+dmFsX3R5cGUgPT0gVVNCX01JWEVSX0JPT0xFQU4gfHwKIAkgICAgY3ZhbC0+dmFsX3R5cGUgPT0gVVNCX01JWEVSX0lOVl9CT09MRUFOKSB7CkBAIC03MzQsMjMgKzc1MiwyMyBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCX0KLQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX01BWCwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sICZjdmFsLT5tYXgpIDwgMCB8fAotCQkgICAgZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfTUlOLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1pbikgPCAwKSB7CisJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUFYLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1heCkgPCAwIHx8CisJCSAgICBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUlOLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1pbikgPCAwKSB7CiAJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICIlZDolZDogY2Fubm90IGdldCBtaW4vbWF4IHZhbHVlcyBmb3IgY29udHJvbCAlZCAoaWQgJWQpXG4iLAogCQkJCSAgIGN2YWwtPmlkLCBjdmFsLT5taXhlci0+Y3RybGlmLCBjdmFsLT5jb250cm9sLCBjdmFsLT5pZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKSB7CisJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKSB7CiAJCQljdmFsLT5yZXMgPSAxOwogCQl9IGVsc2UgewogCQkJaW50IGxhc3RfdmFsaWRfcmVzID0gY3ZhbC0+cmVzOwogCiAJCQl3aGlsZSAoY3ZhbC0+cmVzID4gMSkgewotCQkJCWlmIChzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCBjdmFsLT5yZXMgLyAyKSA8IDApCisJCQkJaWYgKHNldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX1NFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCBjdmFsLT5yZXMgLyAyKSA8IDApCiAJCQkJCWJyZWFrOwogCQkJCWN2YWwtPnJlcyAvPSAyOwogCQkJfQotCQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sICZjdmFsLT5yZXMpIDwgMCkKKwkJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKQogCQkJCWN2YWwtPnJlcyA9IGxhc3RfdmFsaWRfcmVzOwogCQl9CiAJCWlmIChjdmFsLT5yZXMgPT0gMCkKQEAgLTc4Nyw2ICs4MDUsMjQgQEAKIAogCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CiAJfQorCisJLyogVVNCIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSBkQiBzY2FsZSBpbiAxLzI1NiBkQiB1bml0CisJICogd2hpbGUgQUxTQSBUTFYgY29udGFpbnMgaW4gMS8xMDAgZEIgdW5pdAorCSAqLworCWN2YWwtPmRCbWluID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1pbikgKiAxMDApIC8gMjU2OworCWN2YWwtPmRCbWF4ID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1heCkgKiAxMDApIC8gMjU2OworCWlmIChjdmFsLT5kQm1pbiA+IGN2YWwtPmRCbWF4KSB7CisJCS8qIHNvbWV0aGluZyBpcyB3cm9uZzsgYXNzdW1lIGl0J3MgZWl0aGVyIGZyb20vdG8gMGRCICovCisJCWlmIChjdmFsLT5kQm1pbiA8IDApCisJCQljdmFsLT5kQm1heCA9IDA7CisJCWVsc2UgaWYgKGN2YWwtPmRCbWluID4gMCkKKwkJCWN2YWwtPmRCbWluID0gMDsKKwkJaWYgKGN2YWwtPmRCbWluID4gY3ZhbC0+ZEJtYXgpIHsKKwkJCS8qIHRvdGFsbHkgY3JhcCwgcmV0dXJuIGFuIGVycm9yICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCkBAIC05MTIsNiArOTQ4LDcgQEAKIAlpbnQgbmFtZWlkID0gZGVzY1tkZXNjWzBdIC0gMV07CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAKIAljb250cm9sKys7IC8qIGNoYW5nZSBmcm9tIHplcm8tYmFzZWQgdG8gMS1iYXNlZCB2YWx1ZSAqLwogCkBAIC05MjAsNyArOTU3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCBjb250cm9sKSkKKwltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCBjb250cm9sKTsKKwlpZiAoY2hlY2tfaWdub3JlZF9jdGwobWFwKSkKIAkJcmV0dXJuOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC05NTQsMTAgKzk5MiwxMSBAQAogCX0KIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgY29udHJvbCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJbWFwcGVkX25hbWUgPSBsZW4gIT0gMDsKIAlpZiAoISBsZW4gJiYgbmFtZWlkKQotCQlsZW4gPSBzbmRfdXNiX2NvcHlfc3RyaW5nX2Rlc2Moc3RhdGUsIG5hbWVpZCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJbGVuID0gc25kX3VzYl9jb3B5X3N0cmluZ19kZXNjKHN0YXRlLCBuYW1laWQsCisJCQkJa2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAogCXN3aXRjaCAoY29udHJvbCkgewogCWNhc2UgVVNCX0ZFQVRVUkVfTVVURToKQEAgLTk5NSw2ICsxMDM0LDcgQEAKIAkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKIAkJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAogCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0s7CisJCQljaGVja19tYXBwZWRfZEIobWFwLCBjdmFsKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTA0OCwyOSArMTA4OCwzMCBAQAogICoKICAqIG1vc3Qgb2YgY29udHJvbGxzIGFyZSBkZWZpbmVkIGhlcmUuCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZmVhdHVyZV91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHVuc2lnbmVkIGNoYXIgKmZ0cikKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZmVhdHVyZV91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHZvaWQgKl9mdHIpCiB7CiAJaW50IGNoYW5uZWxzLCBpLCBqOwogCXN0cnVjdCB1c2JfYXVkaW9fdGVybSBpdGVybTsKIAl1bnNpZ25lZCBpbnQgbWFzdGVyX2JpdHMsIGZpcnN0X2NoX2JpdHM7CiAJaW50IGVyciwgY3NpemU7CisJc3RydWN0IHVhY19mZWF0dXJlX3VuaXRfZGVzY3JpcHRvciAqZnRyID0gX2Z0cjsKIAotCWlmIChmdHJbMF0gPCA3IHx8ICEgKGNzaXplID0gZnRyWzVdKSB8fCBmdHJbMF0gPCA3ICsgY3NpemUpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRkVBVFVSRV9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJaWYgKGZ0ci0+Ykxlbmd0aCA8IDcgfHwgISAoY3NpemUgPSBmdHItPmJDb250cm9sU2l6ZSkgfHwgZnRyLT5iTGVuZ3RoIDwgNyArIGNzaXplKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIFVBQ19GRUFUVVJFX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogcGFyc2UgdGhlIHNvdXJjZSB1bml0ICovCi0JaWYgKChlcnIgPSBwYXJzZV9hdWRpb191bml0KHN0YXRlLCBmdHJbNF0pKSA8IDApCisJaWYgKChlcnIgPSBwYXJzZV9hdWRpb191bml0KHN0YXRlLCBmdHItPmJTb3VyY2VJRCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCS8qIGRldGVybWluZSB0aGUgaW5wdXQgc291cmNlIHR5cGUgYW5kIG5hbWUgKi8KLQlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgZnRyWzRdLCAmaXRlcm0pIDwgMCkKKwlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgZnRyLT5iU291cmNlSUQsICZpdGVybSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNoYW5uZWxzID0gKGZ0clswXSAtIDcpIC8gY3NpemUgLSAxOworCWNoYW5uZWxzID0gKGZ0ci0+Ykxlbmd0aCAtIDcpIC8gY3NpemUgLSAxOwogCi0JbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiwgY3NpemUpOworCW1hc3Rlcl9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ci0+Y29udHJvbHMsIGNzaXplKTsKIAkvKiBtYXN0ZXIgY29uZmlndXJhdGlvbiBxdWlya3MgKi8KIAlzd2l0Y2ggKHN0YXRlLT5jaGlwLT51c2JfaWQpIHsKIAljYXNlIFVTQl9JRCgweDA4YmIsIDB4MjcwMik6CkBAIC0xMDgxLDIxICsxMTIyLDIxIEBACiAJCWJyZWFrOwogCX0KIAlpZiAoY2hhbm5lbHMgPiAwKQotCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSwgY3NpemUpOworCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ci0+Y29udHJvbHMgKyBjc2l6ZSwgY3NpemUpOwogCWVsc2UKIAkJZmlyc3RfY2hfYml0cyA9IDA7CiAJLyogY2hlY2sgYWxsIGNvbnRyb2wgdHlwZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgY2hfYml0cyA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgbWFzayA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2ICsgY3NpemUgKiAoaisxKSwgY3NpemUpOworCQkJdW5zaWduZWQgaW50IG1hc2sgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scyArIGNzaXplICogKGorMSksIGNzaXplKTsKIAkJCWlmIChtYXNrICYgKDEgPDwgaSkpCiAJCQkJY2hfYml0cyB8PSAoMSA8PCBqKTsKIAkJfQogCQlpZiAoY2hfYml0cyAmIDEpIC8qIHRoZSBmaXJzdCBjaGFubmVsIG11c3QgYmUgc2V0IChmb3IgZWFzZSBvZiBwcm9ncmFtbWluZykgKi8KLQkJCWJ1aWxkX2ZlYXR1cmVfY3RsKHN0YXRlLCBmdHIsIGNoX2JpdHMsIGksICZpdGVybSwgdW5pdGlkKTsKKwkJCWJ1aWxkX2ZlYXR1cmVfY3RsKHN0YXRlLCBfZnRyLCBjaF9iaXRzLCBpLCAmaXRlcm0sIHVuaXRpZCk7CiAJCWlmIChtYXN0ZXJfYml0cyAmICgxIDw8IGkpKQotCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIGZ0ciwgMCwgaSwgJml0ZXJtLCB1bml0aWQpOworCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIF9mdHIsIDAsIGksICZpdGVybSwgdW5pdGlkKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExMjIsOCArMTE2MywxMCBAQAogCXVuc2lnbmVkIGludCBudW1fb3V0cyA9IGRlc2NbNSArIGlucHV0X3BpbnNdOwogCXVuc2lnbmVkIGludCBpLCBsZW47CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAKLQlpZiAoY2hlY2tfaWdub3JlZF9jdGwoc3RhdGUsIHVuaXRpZCwgMCkpCisJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgMCk7CisJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCXJldHVybjsKIAogCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwpAQCAtMTE1Miw3ICsxMTk1LDcgQEAKIAl9CiAJa2N0bC0+cHJpdmF0ZV9mcmVlID0gdXNiX21peGVyX2VsZW1fZnJlZTsKIAotCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKHN0YXRlLCB1bml0aWQsIDAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJbGVuID0gY2hlY2tfbWFwcGVkX25hbWUobWFwLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCWlmICghIGxlbikKIAkJbGVuID0gZ2V0X3Rlcm1fbmFtZShzdGF0ZSwgaXRlcm0sIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSwgMCk7CiAJaWYgKCEgbGVuKQpAQCAtMTMzMCw3ICsxMzczLDMyIEBACiAJeyBVU0JfUFJPQ19EQ1IsICJEQ1IiLCBkY3JfcHJvY19pbmZvIH0sCiAJeyAwIH0sCiB9OwotCisvKgorICogcHJlZGVmaW5lZCBkYXRhIGZvciBleHRlbnNpb24gdW5pdHMKKyAqLworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIGNsb2NrX3JhdGVfeHVfaW5mb1tdID0geworICAgICAgIHsgVVNCX1hVX0NMT0NLX1JBVEVfU0VMRUNUT1IsICJTZWxlY3RvciIsIFVTQl9NSVhFUl9VOCwgMCB9LAorICAgICAgIHsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIGNsb2NrX3NvdXJjZV94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfQ0xPQ0tfU09VUkNFX1NFTEVDVE9SLCAiRXh0ZXJuYWwiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIHNwZGlmX2Zvcm1hdF94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfRElHSVRBTF9GT1JNQVRfU0VMRUNUT1IsICJTUERJRi9BQzMiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIHNvZnRfbGltaXRfeHVfaW5mb1tdID0geworCXsgVVNCX1hVX1NPRlRfTElNSVRfU0VMRUNUT1IsICIgIiwgVVNCX01JWEVSX0JPT0xFQU4gfSwKKwl7IDAgfQorfTsKK3N0YXRpYyBzdHJ1Y3QgcHJvY3VuaXRfaW5mbyBleHR1bml0c1tdID0geworCXsgVVNCX1hVX0NMT0NLX1JBVEUsICJDbG9jayByYXRlIiwgY2xvY2tfcmF0ZV94dV9pbmZvIH0sCisJeyBVU0JfWFVfQ0xPQ0tfU09VUkNFLCAiRGlnaXRhbEluIENMSyBzb3VyY2UiLCBjbG9ja19zb3VyY2VfeHVfaW5mbyB9LAorCXsgVVNCX1hVX0RJR0lUQUxfSU9fU1RBVFVTLCAiRGlnaXRhbE91dCBmb3JtYXQ6Iiwgc3BkaWZfZm9ybWF0X3h1X2luZm8gfSwKKwl7IFVTQl9YVV9ERVZJQ0VfT1BUSU9OUywgIkFuYWxvZ3VlSW4gU29mdCBMaW1pdCIsIHNvZnRfbGltaXRfeHVfaW5mbyB9LAorCXsgMCB9Cit9OwogLyoKICAqIGJ1aWxkIGEgcHJvY2Vzc2luZy9leHRlbnNpb24gdW5pdAogICovCkBAIC0xMzQyLDYgKzE0MTAsNyBAQAogCWludCBpLCBlcnIsIG5hbWVpZCwgdHlwZSwgbGVuOwogCXN0cnVjdCBwcm9jdW5pdF9pbmZvICppbmZvOwogCXN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvICp2YWxpbmZvOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAlzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gZGVmYXVsdF92YWx1ZV9pbmZvW10gPSB7CiAJCXsgMHgwMSwgIlN3aXRjaCIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCiAJCXsgMCB9CkBAIC0xMzcxLDcgKzE0NDAsOCBAQAogCQkvKiBGSVhNRTogYml0bWFwIG1pZ2h0IGJlIGxvbmdlciB0aGFuIDhiaXQgKi8KIAkJaWYgKCEgKGRzY1sxMiArIG51bV9pbnNdICYgKDEgPDwgKHZhbGluZm8tPmNvbnRyb2wgLSAxKSkpKQogCQkJY29udGludWU7Ci0JCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCB2YWxpbmZvLT5jb250cm9sKSkKKwkJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgdmFsaW5mby0+Y29udHJvbCk7CisJCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQkJY29udGludWU7CiAJCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwogCQlpZiAoISBjdmFsKSB7CkBAIC0xMzkxLDggKzE0NjEsMTggQEAKIAkJCWN2YWwtPm1heCA9IGRzY1sxNV07CiAJCQljdmFsLT5yZXMgPSAxOwogCQkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOwotCQl9IGVsc2UKLQkJCWdldF9taW5fbWF4KGN2YWwsIHZhbGluZm8tPm1pbl92YWx1ZSk7CisJCX0gZWxzZSB7CisJCQlpZiAodHlwZSA9PSBVU0JfWFVfQ0xPQ0tfUkFURSkgeworCQkJCS8qIEUtTXUgVVNCIDA0MDQvMDIwMi9UcmFja2VyUHJlCisJCQkJICogc2FtcGxlcmF0ZSBjb250cm9sIHF1aXJrCisJCQkJICovCisJCQkJY3ZhbC0+bWluID0gMDsKKwkJCQljdmFsLT5tYXggPSA1OworCQkJCWN2YWwtPnJlcyA9IDE7CisJCQkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOworCQkJfSBlbHNlCisJCQkJZ2V0X21pbl9tYXgoY3ZhbCwgdmFsaW5mby0+bWluX3ZhbHVlKTsKKwkJfQogCiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoJm1peGVyX3Byb2N1bml0X2N0bCwgY3ZhbCk7CiAJCWlmICghIGtjdGwpIHsKQEAgLTE0MDIsOCArMTQ4Miw5IEBACiAJCX0KIAkJa2N0bC0+cHJpdmF0ZV9mcmVlID0gdXNiX21peGVyX2VsZW1fZnJlZTsKIAotCQlpZiAoY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgY3ZhbC0+Y29udHJvbCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKSkKLQkJCTsKKwkJaWYgKGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwKKwkJCQkJCXNpemVvZihrY3RsLT5pZC5uYW1lKSkpCisJCQkvKiBub3RoaW5nICovIDsKIAkJZWxzZSBpZiAoaW5mby0+bmFtZSkKIAkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgaW5mby0+bmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAkJZWxzZSB7CkBAIC0xNDMzLDcgKzE1MTQsNyBAQAogCiBzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2V4dGVuc2lvbl91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHVuc2lnbmVkIGNoYXIgKmRlc2MpCiB7Ci0JcmV0dXJuIGJ1aWxkX2F1ZGlvX3Byb2N1bml0KHN0YXRlLCB1bml0aWQsIGRlc2MsIE5VTEwsICJFeHRlbnNpb24gVW5pdCIpOworCXJldHVybiBidWlsZF9hdWRpb19wcm9jdW5pdChzdGF0ZSwgdW5pdGlkLCBkZXNjLCBleHR1bml0cywgIkV4dGVuc2lvbiBVbml0Iik7CiB9CiAKIApAQCAtMTU0Miw2ICsxNjIzLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCWNoYXIgKipuYW1lbGlzdDsKIAogCWlmICghIG51bV9pbnMgfHwgZGVzY1swXSA8IDUgKyBudW1faW5zKSB7CkBAIC0xNTU3LDcgKzE2MzksOCBAQAogCWlmIChudW1faW5zID09IDEpIC8qIG9ubHkgb25lID8gbm9uc2Vuc2UhICovCiAJCXJldHVybiAwOwogCi0JaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIDApKQorCW1hcCA9IGZpbmRfbWFwKHN0YXRlLCB1bml0aWQsIDApOworCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQlyZXR1cm4gMDsKIAogCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwpAQCAtMTYxMiw3ICsxNjk1LDcgQEAKIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfc2VsZWN0b3JfZWxlbV9mcmVlOwogCiAJbmFtZWlkID0gZGVzY1tkZXNjWzBdIC0gMV07Ci0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgMCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJaWYgKGxlbikKIAkJOwogCWVsc2UgaWYgKG5hbWVpZCkKQEAgLTE2NTYsMTcgKzE3MzksMTcgQEAKIAl9CiAKIAlzd2l0Y2ggKHAxWzJdKSB7Ci0JY2FzZSBJTlBVVF9URVJNSU5BTDoKKwljYXNlIFVBQ19JTlBVVF9URVJNSU5BTDoKIAkJcmV0dXJuIDA7IC8qIE5PUCAqLwotCWNhc2UgTUlYRVJfVU5JVDoKKwljYXNlIFVBQ19NSVhFUl9VTklUOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fbWl4ZXJfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBTRUxFQ1RPUl9VTklUOgorCWNhc2UgVUFDX1NFTEVDVE9SX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19zZWxlY3Rvcl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIEZFQVRVUkVfVU5JVDoKKwljYXNlIFVBQ19GRUFUVVJFX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwotCWNhc2UgUFJPQ0VTU0lOR19VTklUOgorCWNhc2UgVUFDX1BST0NFU1NJTkdfVU5JVF9WMToKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX3Byb2Nlc3NpbmdfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBFWFRFTlNJT05fVU5JVDoKKwljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX2V4dGVuc2lvbl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogdW5leHBlY3RlZCB0eXBlIDB4JTAyeFxuIiwgdW5pdGlkLCBwMVsyXSk7CkBAIC0xNjk2LDExICsxNzc5LDExIEBACiAvKgogICogY3JlYXRlIG1peGVyIGNvbnRyb2xzCiAgKgotICogd2FsayB0aHJvdWdoIGFsbCBPVVRQVVRfVEVSTUlOQUwgZGVzY3JpcHRvcnMgdG8gc2VhcmNoIGZvciBtaXhlcnMKKyAqIHdhbGsgdGhyb3VnaCBhbGwgVUFDX09VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycwogICovCiBzdGF0aWMgaW50IHNuZF91c2JfbWl4ZXJfY29udHJvbHMoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQogewotCXVuc2lnbmVkIGNoYXIgKmRlc2M7CisJc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSAqZGVzYzsKIAlzdHJ1Y3QgbWl4ZXJfYnVpbGQgc3RhdGU7CiAJaW50IGVycjsKIAljb25zdCBzdHJ1Y3QgdXNibWl4X2N0bF9tYXAgKm1hcDsKQEAgLTE3MjQsMTQgKzE4MDcsMTQgQEAKIAl9CiAKIAlkZXNjID0gTlVMTDsKLQl3aGlsZSAoKGRlc2MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0aWYtPmV4dHJhLCBob3N0aWYtPmV4dHJhbGVuLCBkZXNjLCBPVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7Ci0JCWlmIChkZXNjWzBdIDwgOSkKKwl3aGlsZSAoKGRlc2MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0aWYtPmV4dHJhLCBob3N0aWYtPmV4dHJhbGVuLCBkZXNjLCBVQUNfT1VUUFVUX1RFUk1JTkFMKSkgIT0gTlVMTCkgeworCQlpZiAoZGVzYy0+Ykxlbmd0aCA8IDkpCiAJCQljb250aW51ZTsgLyogaW52YWxpZCBkZXNjcmlwdG9yPyAqLwotCQlzZXRfYml0KGRlc2NbM10sIHN0YXRlLnVuaXRiaXRtYXApOyAgLyogbWFyayB0ZXJtaW5hbCBJRCBhcyB2aXNpdGVkICovCi0JCXN0YXRlLm90ZXJtLmlkID0gZGVzY1szXTsKLQkJc3RhdGUub3Rlcm0udHlwZSA9IGNvbWJpbmVfd29yZCgmZGVzY1s0XSk7Ci0JCXN0YXRlLm90ZXJtLm5hbWUgPSBkZXNjWzhdOwotCQllcnIgPSBwYXJzZV9hdWRpb191bml0KCZzdGF0ZSwgZGVzY1s3XSk7CisJCXNldF9iaXQoZGVzYy0+YlRlcm1pbmFsSUQsIHN0YXRlLnVuaXRiaXRtYXApOyAgLyogbWFyayB0ZXJtaW5hbCBJRCBhcyB2aXNpdGVkICovCisJCXN0YXRlLm90ZXJtLmlkID0gZGVzYy0+YlRlcm1pbmFsSUQ7CisJCXN0YXRlLm90ZXJtLnR5cGUgPSBsZTE2X3RvX2NwdShkZXNjLT53VGVybWluYWxUeXBlKTsKKwkJc3RhdGUub3Rlcm0ubmFtZSA9IGRlc2MtPmlUZXJtaW5hbDsKKwkJZXJyID0gcGFyc2VfYXVkaW9fdW5pdCgmc3RhdGUsIGRlc2MtPmJTb3VyY2VJRCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNzQ4LDYgKzE4MzEsNDYgQEAKIAkJCSAgICAgICBpbmZvLT5lbGVtX2lkKTsKIH0KIAorc3RhdGljIHZvaWQgc25kX3VzYl9taXhlcl9kdW1wX2N2YWwoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgICBpbnQgdW5pdGlkLAorCQkJCSAgICBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCkKK3sKKwlzdGF0aWMgY2hhciAqdmFsX3R5cGVzW10gPSB7IkJPT0xFQU4iLCAiSU5WX0JPT0xFQU4iLAorCQkJCSAgICAiUzgiLCAiVTgiLCAiUzE2IiwgIlUxNiJ9OworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgVW5pdDogJWlcbiIsIHVuaXRpZCk7CisJaWYgKGN2YWwtPmVsZW1faWQpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBDb250cm9sOiBuYW1lPVwiJXNcIiwgaW5kZXg9JWlcbiIsCisJCQkJY3ZhbC0+ZWxlbV9pZC0+bmFtZSwgY3ZhbC0+ZWxlbV9pZC0+aW5kZXgpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBJbmZvOiBpZD0laSwgY29udHJvbD0laSwgY21hc2s9MHgleCwgIgorCQkJICAgICJjaGFubmVscz0laSwgdHlwZT1cIiVzXCJcbiIsIGN2YWwtPmlkLAorCQkJICAgIGN2YWwtPmNvbnRyb2wsIGN2YWwtPmNtYXNrLCBjdmFsLT5jaGFubmVscywKKwkJCSAgICB2YWxfdHlwZXNbY3ZhbC0+dmFsX3R5cGVdKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgICAgVm9sdW1lOiBtaW49JWksIG1heD0laSwgZEJtaW49JWksIGRCbWF4PSVpXG4iLAorCQkJICAgIGN2YWwtPm1pbiwgY3ZhbC0+bWF4LCBjdmFsLT5kQm1pbiwgY3ZhbC0+ZEJtYXgpOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwlpbnQgdW5pdGlkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtaXhlciwgJmNoaXAtPm1peGVyX2xpc3QsIGxpc3QpIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJIlVTQiBNaXhlcjogdXNiX2lkPTB4JTA4eCwgY3RybGlmPSVpLCBjdGxlcnI9JWlcbiIsCisJCQkJY2hpcC0+dXNiX2lkLCBtaXhlci0+Y3RybGlmLAorCQkJCW1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiQ2FyZDogJXNcbiIsIGNoaXAtPmNhcmQtPmxvbmduYW1lKTsKKwkJZm9yICh1bml0aWQgPSAwOyB1bml0aWQgPCBNQVhfSURfRUxFTVM7IHVuaXRpZCsrKSB7CisJCQlmb3IgKGN2YWwgPSBtaXhlci0+aWRfZWxlbXNbdW5pdGlkXTsgY3ZhbDsKKwkJCQkJCWN2YWwgPSBjdmFsLT5uZXh0X2lkX2VsZW0pCisJCQkJc25kX3VzYl9taXhlcl9kdW1wX2N2YWwoYnVmZmVyLCB1bml0aWQsIGN2YWwpOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX21lbW9yeV9jaGFuZ2Uoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAogCQkJCQlpbnQgdW5pdGlkKQogewpAQCAtMTkyNCw3ICsyMDQ3LDcgQEAKIAl9CiAJbWl4ZXItPnJjX3NldHVwX3BhY2tldC0+YlJlcXVlc3RUeXBlID0KIAkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdCA9IEdFVF9NRU07CisJbWl4ZXItPnJjX3NldHVwX3BhY2tldC0+YlJlcXVlc3QgPSBVQUNfR0VUX01FTTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53VmFsdWUgPSBjcHVfdG9fbGUxNigwKTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53SW5kZXggPSBjcHVfdG9fbGUxNigwKTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKQEAgLTIwNDcsNyArMjE3MCw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzOiAiLCBqYWNrc1tpXS5uYW1lKTsKIAkJZXJyID0gc25kX3VzYl9jdGxfbXNnKG1peGVyLT5jaGlwLT5kZXYsCiAJCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKG1peGVyLT5jaGlwLT5kZXYsIDApLAotCQkJCSAgICAgIEdFVF9NRU0sIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8CisJCQkJICAgICAgVUFDX0dFVF9NRU0sIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8CiAJCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwKIAkJCQkgICAgICBqYWNrc1tpXS51bml0aWQgPDwgOCwgYnVmLCAzLCAxMDApOwogCQlpZiAoZXJyID09IDMgJiYgKGJ1ZlswXSA9PSAzIHx8IGJ1ZlswXSA9PSA2KSkKQEAgLTIxMDksNiArMjIzMiwyNCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHNuZF9lbXV1c2Jfc2V0X3NhbXBsZXJhdGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBzYW1wbGVyYXRlX2lkKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwlpbnQgdW5pdGlkID0gMTI7IC8qIFNhbWxlUmF0ZSBFeHRlbnNpb25Vbml0IElEICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1peGVyLCAmY2hpcC0+bWl4ZXJfbGlzdCwgbGlzdCkgeworCQljdmFsID0gbWl4ZXItPmlkX2VsZW1zW3VuaXRpZF07CisJCWlmIChjdmFsKSB7CisJCQlzZXRfY3VyX2N0bF92YWx1ZShjdmFsLCBjdmFsLT5jb250cm9sIDw8IDgsCisJCQkJCSAgc2FtcGxlcmF0ZV9pZCk7CisJCQlzbmRfdXNiX21peGVyX25vdGlmeV9pZChtaXhlciwgdW5pdGlkKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKIGludCBzbmRfdXNiX2NyZWF0ZV9taXhlcihzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGN0cmxpZiwKIAkJCSBpbnQgaWdub3JlX2Vycm9yKQogewpAQCAtMjExNiw3ICsyMjU3LDkgQEAKIAkJLmRldl9mcmVlID0gc25kX3VzYl9taXhlcl9kZXZfZnJlZQogCX07CiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwotCWludCBlcnI7CisJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0X2lmYWNlOworCWludCBlcnIsIHByb3RvY29sOwogCiAJc3RyY3B5KGNoaXAtPmNhcmQtPm1peGVybmFtZSwgIlVTQiBNaXhlciIpOwogCkBAIC0yMTI2LDEyICsyMjY5LDIzIEBACiAJbWl4ZXItPmNoaXAgPSBjaGlwOwogCW1peGVyLT5jdHJsaWYgPSBjdHJsaWY7CiAJbWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPSBpZ25vcmVfZXJyb3I7Ci0JbWl4ZXItPmlkX2VsZW1zID0ga2NhbGxvYygyNTYsIHNpemVvZigqbWl4ZXItPmlkX2VsZW1zKSwgR0ZQX0tFUk5FTCk7CisJbWl4ZXItPmlkX2VsZW1zID0ga2NhbGxvYyhNQVhfSURfRUxFTVMsIHNpemVvZigqbWl4ZXItPmlkX2VsZW1zKSwKKwkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghbWl4ZXItPmlkX2VsZW1zKSB7CiAJCWtmcmVlKG1peGVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJaG9zdF9pZmFjZSA9ICZ1c2JfaWZudW1fdG9faWYoY2hpcC0+ZGV2LCBjdHJsaWYpLT5hbHRzZXR0aW5nWzBdOworCXByb3RvY29sID0gaG9zdF9pZmFjZS0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2w7CisKKwkvKiBGSVhNRSEgKi8KKwlpZiAocHJvdG9jb2wgIT0gVUFDX1ZFUlNJT05fMSkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAibWl4ZXIgaW50ZXJmYWNlIHByb3RvY29sIDB4JTAyeCBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkJCQkJcHJvdG9jb2wpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoKGVyciA9IHNuZF91c2JfbWl4ZXJfY29udHJvbHMobWl4ZXIpKSA8IDAgfHwKIAkgICAgKGVyciA9IHNuZF91c2JfbWl4ZXJfc3RhdHVzX2NyZWF0ZShtaXhlcikpIDwgMCkKIAkJZ290byBfZXJyb3I7CkBAIC0yMTQyLDggKzIyOTYsNiBAQAogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkgfHwKIAkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CiAJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkgewotCQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCiAJCWlmICgoZXJyID0gc25kX2F1ZGlneTJueF9jb250cm9sc19jcmVhdGUobWl4ZXIpKSA8IDApCiAJCQlnb3RvIF9lcnJvcjsKIAkJaWYgKCFzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAiYXVkaWd5Mm54IiwgJmVudHJ5KSkKQEAgLTIxNjEsNiArMjMxMywxMSBAQAogCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNoaXAtPmNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgbWl4ZXIsICZkZXZfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfZXJyb3I7CisKKwlpZiAobGlzdF9lbXB0eSgmY2hpcC0+bWl4ZXJfbGlzdCkgJiYKKwkgICAgIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJ1c2JtaXhlciIsICZlbnRyeSkpCisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgc25kX3VzYl9taXhlcl9wcm9jX3JlYWQpOworCiAJbGlzdF9hZGQoJm1peGVyLT5saXN0LCAmY2hpcC0+bWl4ZXJfbGlzdCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IDc3YzM1ODguLjc5ZTkwM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwpAQCAtMTksMTEgKzE5LDE2IEBACiAgKgogICovCiAKK3N0cnVjdCB1c2JtaXhfZEJfbWFwIHsKKwl1MzIgbWluOworCXUzMiBtYXg7Cit9OwogCiBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIHsKIAlpbnQgaWQ7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgY29udHJvbDsKKwlzdHJ1Y3QgdXNibWl4X2RCX21hcCAqZEI7CiB9OwogCiBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCB7CkBAIC03Miw3ICs3Nyw3IEBACiAJeyA4LCAiTGluZSBQbGF5YmFjayIgfSwgLyogRlUgKi8KIAkvKiA5OiBJVCBtaWMgKi8KIAl7IDEwLCAiTWljIFBsYXliYWNrIiB9LCAvKiBGVSAqLwotCXsgMTEsICJDYXB0dXJlIElucHV0IFNvdXJjZSIgfSwgLyogU1UgKi8KKwl7IDExLCAiQ2FwdHVyZSBTb3VyY2UiIH0sIC8qIFNVICovCiAJeyAxMiwgIkNhcHR1cmUiIH0sIC8qIEZVICovCiAJLyogMTM6IE9UIHBjbSBjYXB0dXJlICovCiAJLyogMTQ6IE1VICh3L28gY29udHJvbHMpICovCkBAIC0xMDIsNiArMTA3LDkgQEAKICAqIGUuZy4gbm8gTWFzdGVyIGFuZCBmYWtlIFBDTSB2b2x1bWUKICAqCQkJUGF2ZWwgTWloYXlsb3YgPGJpbkBiYXNoLmluZm8+CiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X2RCX21hcCBtcDNwbHVzX2RCXzEgPSB7LTQ3ODEsIDB9OwkvKiBqdXN0IGd1ZXNzICovCitzdGF0aWMgc3RydWN0IHVzYm1peF9kQl9tYXAgbXAzcGx1c19kQl8yID0gey0xNzgxLCA2MTh9OyAvKiBqdXN0IGd1ZXNzICovCisKIHN0YXRpYyBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIG1wM3BsdXNfbWFwW10gPSB7CiAJLyogMTogSVQgcGNtICovCiAJLyogMjogSVQgbWljICovCkBAIC0xMTAsMTYgKzExOCwxOSBAQAogCS8qIDU6IE9UIGRpZ2l0YWwgb3V0ICovCiAJLyogNjogT1Qgc3BlYWtlciAqLwogCS8qIDc6IE9UIHBjbSBjYXB0dXJlICovCi0JeyA4LCAiQ2FwdHVyZSBJbnB1dCBTb3VyY2UiIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlIFNvdXJjZSAqLworCXsgOCwgIkNhcHR1cmUgU291cmNlIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSBTb3VyY2UgKi8KIAkJLyogKE1pYywgSW5wdXQgMSA9IExpbmUgaW5wdXQsIElucHV0IDIgPSBPcHRpY2FsIGlucHV0KSAqLwogCXsgOSwgIk1hc3RlciBQbGF5YmFjayIgfSwgLyogRlUsIGRlZmF1bHQgU3BlYWtlciAxICovCiAJLyogeyAxMCwgIk1pYyBDYXB0dXJlIiwgMSB9LCAqLyAvKiBGVSwgTWljIENhcHR1cmUgKi8KLQkvKiB7IDEwLCAiTWljIENhcHR1cmUiLCAyIH0sICovIC8qIEZVLCBNaWMgQ2FwdHVyZSAqLworCXsgMTAsIC8qICJNaWMgQ2FwdHVyZSIsICovIE5VTEwsIDIsIC5kQiA9ICZtcDNwbHVzX2RCXzIgfSwKKwkJLyogRlUsIE1pYyBDYXB0dXJlICovCiAJeyAxMCwgIk1pYyBCb29zdCIsIDcgfSwgLyogRlUsIGRlZmF1bHQgQXV0byBHYWluIElucHV0ICovCi0JeyAxMSwgIkxpbmUgQ2FwdHVyZSIgfSwgLyogRlUsIGRlZmF1bHQgUENNIENhcHR1cmUgKi8KKwl7IDExLCAiTGluZSBDYXB0dXJlIiwgLmRCID0gJm1wM3BsdXNfZEJfMiB9LAorCQkvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSAqLwogCXsgMTIsICJEaWdpdGFsIEluIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gMSAqLwotCS8qIHsgMTMsICJNaWMgUGxheWJhY2siIH0sICovIC8qIEZVLCBkZWZhdWx0IE1pYyBQbGF5YmFjayAqLwotCXsgMTQsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBTcGVha2VyICovCisJeyAxMywgLyogIk1pYyBQbGF5YmFjayIsICovIC5kQiA9ICZtcDNwbHVzX2RCXzEgfSwKKwkJLyogRlUsIGRlZmF1bHQgTWljIFBsYXliYWNrICovCisJeyAxNCwgIkxpbmUgUGxheWJhY2siLCAuZEIgPSAmbXAzcGx1c19kQl8xIH0sIC8qIEZVLCBkZWZhdWx0IFNwZWFrZXIgKi8KIAkvKiAxNTogTVUgKi8KIAl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IGE4OTJiZGEuLmYwNmZhZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTkxLDcgKzkxLDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDg1MCwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTEwMCw3ICsxMDAsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGFlLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTA5LDcgKzEwOSw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4YzYsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhmMCwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTEyNyw3ICsxMjcsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGY1LAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTM2LDcgKzEzNiw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4ZjYsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAlVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTkwKSwKQEAgLTMwMSw3ICszMDEsNyBAQAogCQkJCQkuaWZhY2UgPSAxLAogCQkJCQkuYWx0c2V0dGluZyA9IDEsCiAJCQkJCS5hbHRzZXRfaWR4ID0gMSwKLQkJCQkJLmF0dHJpYnV0ZXMgPSBFUF9DU19BVFRSX0ZJTExfTUFYLAorCQkJCQkuYXR0cmlidXRlcyA9IFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYLAogCQkJCQkuZW5kcG9pbnQgPSAweDgxLAogCQkJCQkuZXBfYXR0ciA9IDB4MDUsCiAJCQkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCkBAIC0xMjY2LDM3ICsxMjY2LDYgQEAKIAkJfQogCX0KIH0sCi0vKiBSb2xhbmQgVUEtMTAxIGluIEhpZ2gtU3BlZWQgTW9kZSBvbmx5ICovCi17Ci0JVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCksCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7Ci0JCS52ZW5kb3JfbmFtZSA9ICJSb2xhbmQiLAotCQkucHJvZHVjdF9uYW1lID0gIlVBLTEwMSIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAotCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7Ci0JCQl7Ci0JCQkJLmlmbnVtID0gMCwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAxLAotCQkJCS50eXBlID0gUVVJUktfQVVESU9fRURJUk9MX1VBMTAxCi0JCQl9LAotCQkJewotCQkJCS5pZm51bSA9IDIsCi0JCQkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAotCQkJCS5kYXRhID0gJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludF9pbmZvKSB7Ci0JCQkJCS5vdXRfY2FibGVzID0gMHgwMDAxLAotCQkJCQkuaW5fY2FibGVzICA9IDB4MDAwMQotCQkJCX0KLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gLTEKLQkJCX0KLQkJfQotCX0KLX0sCiB7CiAJLyogaGFzIElEIDB4MDA4MSB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlICovCiAJVVNCX0RFVklDRSgweDA1ODIsIDB4MDA4MCksCkBAIC0yMDczLDYgKzIwNDIsMzMgQEAKIAl9CiB9LAogCisvKiBBY2Nlc3MgTXVzaWMgZGV2aWNlcyAqLworeworCS8qIFZpcnVzVEkgRGVza3RvcCAqLworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgxMzNlLCAweDA4MTUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAorCQkuZGF0YSA9ICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmtbXSkgeworCQkJeworCQkJCS5pZm51bSA9IDMsCisJCQkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAorCQkJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKKwkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDMsCisJCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAzCisJCQkJfQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSA0LAorCQkJCS50eXBlID0gUVVJUktfSUdOT1JFX0lOVEVSRkFDRQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAtMQorCQkJfQorCQl9CisJfQorfSwKKwogLyogKi8KIHsKIAkvKiBha2EuIFNlcmF0byBTY3JhdGNoIExpdmUgREogQm94ICovCkBAIC0yMTA1LDYgKzIxMDEsMTY1IEBACiAJfQogfSwKIAorLyogSGF1cHBhdWdlIEhWUi05NTBRIGFuZCBIVlItODUwICovCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMCksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAxKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDIpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMyksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjA0KSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDUpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzI1MCksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjMwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi04NTAiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCisKKy8qIERpZ2lkZXNpZ24gTWJveCAqLworeworCS8qIFRoYW5rcyB0byBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4gKi8KKwlVU0JfREVWSUNFKDB4MGRiYSwgMHgxMDAwKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiRGlnaWRlc2lnbiIsCisJCS5wcm9kdWN0X25hbWUgPSAiTUJveCIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAorCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKXsKKwkJCXsKKwkJCQkuaWZudW0gPSAwLAorCQkJCS50eXBlID0gUVVJUktfSUdOT1JFX0lOVEVSRkFDRSwKKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gMSwKKwkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5ULAorCQkJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQpIHsKKwkJCQkJLmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSwKKwkJCQkJLmNoYW5uZWxzID0gMiwKKwkJCQkJLmlmYWNlID0gMSwKKwkJCQkJLmFsdHNldHRpbmcgPSAxLAorCQkJCQkuYWx0c2V0X2lkeCA9IDEsCisJCQkJCS5hdHRyaWJ1dGVzID0gVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUsCisJCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJCS5lcF9hdHRyID0gMHgwMSwKKwkJCQkJLm1heHBhY2tzaXplID0gMHgxMzAsCisJCQkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJCQkJLnJhdGVfbWluID0gNDQxMDAsCisJCQkJCS5yYXRlX21heCA9IDQ4MDAwLAorCQkJCQkubnJfcmF0ZXMgPSAyLAorCQkJCQkucmF0ZV90YWJsZSA9ICh1bnNpZ25lZCBpbnRbXSkgeworCQkJCQkJNDQxMDAsIDQ4MDAwCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKworCX0KK30sCisKIHsKIAkvKgogCSAqIFNvbWUgVVNCIE1JREkgZGV2aWNlcyBkb24ndCBoYXZlIGFuIGF1ZGlvIGNvbnRyb2wgaW50ZXJmYWNlLApAQCAtMjExMyw3ICsyMjY4LDcgQEAKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CiAJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfTUlESV9TVFJFQU1JTkcsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewogCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAogCQkudHlwZSA9IFFVSVJLX01JRElfU1RBTkRBUkRfSU5URVJGQUNFCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggOTFiYjI5Ni4uNDRkZWIyMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTYsNiArMTYsOCBAQAogICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9od2RlcC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzE1LDkgKzMxNyw5IEBACiAJZGF0YVswXSA9IHJhdGU7CiAJZGF0YVsxXSA9IHJhdGUgPj4gODsKIAlkYXRhWzJdID0gcmF0ZSA+PiAxNjsKLQllcnIgPSB1czEyMmxfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLAorCWVyciA9IHVzMTIybF9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFVBQ19TRVRfQ1VSLAogCQkJICAgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9PVVQsCi0JCQkgICAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCk7CisJCQkgICAgIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAweCV4XG4iLAogCQkJICAgZGV2LT5kZXZudW0sIHJhdGUsIGVwKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZSBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQppbmRleCAxMjQ3NjBiLi5lMWQ2MGQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCkBAIC0xNCw2ICsxNCw3IEBACiBjb21tb24tY21kcy5oCiBwZXJmLmRhdGEKIHBlcmYuZGF0YS5vbGQKK3BlcmYtYXJjaGl2ZQogdGFncwogVEFHUwogY3Njb3BlKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUxNzRkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQKQEAgLTAsMCArMSwyMiBAQAorcGVyZi1hcmNoaXZlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1hcmNoaXZlIC0gQ3JlYXRlIGFyY2hpdmUgd2l0aCBvYmplY3QgZmlsZXMgd2l0aCBidWlsZC1pZHMgZm91bmQgaW4gcGVyZi5kYXRhIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBhcmNoaXZlJyBbZmlsZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgcnVucyBydW5zIHBlcmYtYnVpbGRpZC1saXN0IC0td2l0aC1oaXRzLCBhbmQgY29sbGVjdHMgdGhlIGZpbGVzCit3aXRoIHRoZSBidWlsZGlkcyBmb3VuZCBzbyB0aGF0IGFuYWxpc3lzIG9mIHBlcmYuZGF0YSBjb250ZW50cyBjYW4gYmUgcG9zc2libGUKK29uIGFub3RoZXIgbWFjaGluZS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLWJ1aWxkaWQtbGlzdFsxXSwgbGlua3BlcmY6cGVyZi1yZXBvcnRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiYzNiNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKQEAgLTAsMCArMSwzMyBAQAorcGVyZi1idWlsZGlkLWNhY2hlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1idWlsZGlkLWNhY2hlIC0gTWFuYWdlIGJ1aWxkLWlkIGNhY2hlLgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGJ1aWxkaWQtbGlzdCA8b3B0aW9ucz4nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIG1hbmFnZXMgdGhlIGJ1aWxkLWlkIGNhY2hlLiBJdCBjYW4gYWRkIGFuZCByZW1vdmUgZmlsZXMgdG8gdGhlCitjYWNoZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYXMgd2VsbCBwdXJnZSBvbGRlciBlbnRyaWVzLCBzZXQgdXBwZXIgbGltaXRzCitmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBldGMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYWRkPTo6CisgICAgICAgIEFkZCBzcGVjaWZpZWQgZmlsZSB0byB0aGUgY2FjaGUuCistcjo6CistLXJlbW92ZT06OgorICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorLXY6OgorLS12ZXJib3NlOjoKKwlCZSBtb3JlIHZlcmJvc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtcmVwb3J0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKaW5kZXggMjUwZTM5MS4uMmRlMzQwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dApAQCAtMTUsNiArMTUsOCBAQAogJ3BlcmYgcHJvYmUnIFtvcHRpb25zXSAtLWRlbD0nW0dST1VQOl1FVkVOVCcgWy4uLl0KIG9yCiAncGVyZiBwcm9iZScgLS1saXN0CitvcgorJ3BlcmYgcHJvYmUnIC0tbGluZT0nRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ3LDExIEBACiAtLWxpc3Q6OgogCUxpc3QgdXAgY3VycmVudCBwcm9iZSBldmVudHMuCiAKKy1MOjoKKy0tbGluZT06OgorCVNob3cgc291cmNlIGNvZGUgbGluZXMgd2hpY2ggY2FuIGJlIHByb2JlZC4gVGhpcyBuZWVkcyBhbiBhcmd1bWVudAorCXdoaWNoIHNwZWNpZmllcyBhIHJhbmdlIG9mIHRoZSBzb3VyY2UgY29kZS4KKwogUFJPQkUgU1lOVEFYCiAtLS0tLS0tLS0tLS0KIFByb2JlIHBvaW50cyBhcmUgZGVmaW5lZCBieSBmb2xsb3dpbmcgc3ludGF4LgpAQCAtNTYsNiArNjMsMTkgQEAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhIHByb2JlIHBvaW50IGJ5IHRoZSBzb3VyY2UgbGluZSBudW1iZXIgYnkgdXNpbmcgJ1NSQzpBTE4nIHN5bnRheCwgd2hlcmUgJ1NSQycgaXMgdGhlIHNvdXJjZSBmaWxlIHBhdGggYW5kICdBTE4nIGlzIHRoZSBsaW5lIG51bWJlci4KICdBUkcnIHNwZWNpZmllcyB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHJvYmUgcG9pbnQuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuCiAKK0xJTkUgU1lOVEFYCistLS0tLS0tLS0tLQorTGluZSByYW5nZSBpcyBkZXNjcmlwdGVkIGJ5IGZvbGxvd2luZyBzeW50YXguCisKKyAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIgorCitGVU5DIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gbmFtZSBvZiBzaG93aW5nIGxpbmVzLiAnUkxOJyBpcyB0aGUgc3RhcnQgbGluZQorbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkgbGluZSwgYW5kICdSTE4yJyBpcyB0aGUgZW5kIGxpbmUgbnVtYmVyLiBBcyBzYW1lIGFzCitwcm9iZSBzeW50YXgsICdTUkMnIG1lYW5zIHRoZSBzb3VyY2UgZmlsZSBwYXRoLCAnQUxOJyBpcyBzdGFydCBsaW5lIG51bWJlciwKK2FuZCAnQUxOMicgaXMgZW5kIGxpbmUgbnVtYmVyIGluIHRoZSBmaWxlLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgaG93CittYW55IGxpbmVzIHRvIHNob3cgYnkgdXNpbmcgJ05VTScuCitTbywgInNvdXJjZS5jOjEwMC0xMjAiIHNob3dzIGxpbmVzIGJldHdlZW4gMTAwdGggdG8gbDIwdGggaW4gc291cmNlLmMgZmlsZS4gQW5kICJmdW5jOjEwKzIwIiBzaG93cyAyMCBsaW5lcyBmcm9tIDEwdGggbGluZSBvZiBmdW5jIGZ1bmN0aW9uLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtwZXJmOnBlcmYtdHJhY2VbMV0sIGxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAppbmRleCA0YTdkNTU4Li43ODViOWZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKQEAgLTc0LDcgKzc0LDcgQEAKIAogLXMgPHN5bWJvbD46OgogLS1zeW0tYW5ub3RhdGU9PHN5bWJvbD46OgotICAgICAgICBBbm5vdGF0ZSB0aGlzIHN5bWJvbC4gIFJlcXVpcmVzIC1rIG9wdGlvbi4KKyAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuCiAKIC12OjoKIC0tdmVyYm9zZTo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CmluZGV4IGM1ZjU1ZjQuLmQ3MjljZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CkBAIC04LDcgKzgsNyBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0ncGVyZiB0cmFjZScgWy1zIFtsYW5nXTpzY3JpcHRbLmV4dF0gXQorJ3BlcmYgdHJhY2UnIFstcyBbUGVybF06c2NyaXB0Wy5wbF0gXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXB5dGhvbi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDFhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0CkBAIC0wLDAgKzEsNjI1IEBACitwZXJmLXRyYWNlLXB5dGhvbigxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtdHJhY2UtcHl0aG9uIC0gUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggYSBQeXRob24gc2NyaXB0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdHJhY2UnIFstcyBbUHl0aG9uXTpzY3JpcHRbLnB5XSBdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHBlcmYgdHJhY2Ugb3B0aW9uIGlzIHVzZWQgdG8gcHJvY2VzcyBwZXJmIHRyYWNlIGRhdGEgdXNpbmcgcGVyZidzCitidWlsdC1pbiBQeXRob24gaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUHl0aG9uIHNjcmlwdCwgaWYgYW55LgorCitBIFFVSUNLIEVYQU1QTEUKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gc2hvd3MgdGhlIHByb2Nlc3MsIHN0YXJ0IHRvIGZpbmlzaCwgb2YgY3JlYXRpbmcgYSB3b3JraW5nCitQeXRob24gc2NyaXB0IHRoYXQgYWdncmVnYXRlcyBhbmQgZXh0cmFjdHMgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gYQorcmF3IHBlcmYgdHJhY2Ugc3RyZWFtLiAgWW91IGNhbiBhdm9pZCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMKK2RvY3VtZW50IGlmIGFuIGV4YW1wbGUgaXMgZW5vdWdoIGZvciB5b3U7IHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudAorcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIGVhY2ggc3RlcCBhbmQgbGlzdHMgdGhlIGxpYnJhcnkgZnVuY3Rpb25zCithdmFpbGFibGUgdG8gc2NyaXB0IHdyaXRlcnMuCisKK1RoaXMgZXhhbXBsZSBhY3R1YWxseSBkZXRhaWxzIHRoZSBzdGVwcyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlCisnc3lzY2FsbC1jb3VudHMnIHNjcmlwdCB5b3Ugc2VlIHdoZW4geW91IGxpc3QgdGhlIGF2YWlsYWJsZSBwZXJmIHRyYWNlCitzY3JpcHRzIHZpYSAncGVyZiB0cmFjZSAtbCcuICBBcyBzdWNoLCB0aGlzIHNjcmlwdCBhbHNvIHNob3dzIGhvdyB0bworaW50ZWdyYXRlIHlvdXIgc2NyaXB0IGludG8gdGhlIGxpc3Qgb2YgZ2VuZXJhbC1wdXJwb3NlICdwZXJmIHRyYWNlJworc2NyaXB0cyBsaXN0ZWQgYnkgdGhhdCBjb21tYW5kLgorCitUaGUgc3lzY2FsbC1jb3VudHMgc2NyaXB0IGlzIGEgc2ltcGxlIHNjcmlwdCwgYnV0IGRlbW9uc3RyYXRlcyBhbGwgdGhlCitiYXNpYyBpZGVhcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgdXNlZnVsIHNjcmlwdC4gIEhlcmUncyBhbiBleGFtcGxlCitvZiBpdHMgb3V0cHV0IChzeXNjYWxsIG5hbWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgdGhleSB3aWxsIGFwcGVhcgorYXMgbnVtYmVycyk6CisKKy0tLS0KK3N5c2NhbGwgZXZlbnRzOgorCitldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorc3lzX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1NTA2Nworc3lzX2dldGRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA3Mgorc3lzX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAzNworc3lzX3N3YXBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2OQorc3lzX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyMworc3lzX3NjaGVkX3NldHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyNgorc3lzX29wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMQorc3lzX25ld2ZzdGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNgorc3lzX21tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNworc3lzX211bm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNgorc3lzX2Z1dGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MQorc3lzX3NlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgorc3lzX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NAorc3lzX3NldGl0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorc3lzX3dyaXRldiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorc3lzX2xzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworc3lzX3J0X3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorc3lzX3dhaXQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX2lvY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX3NldF9yb2J1c3RfbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2FjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorLS0tLQorCitCYXNpY2FsbHkgb3VyIHRhc2sgaXMgdG8ga2VlcCBhIHBlci1zeXNjYWxsIHRhbGx5IHRoYXQgZ2V0cyB1cGRhdGVkCitldmVyeSB0aW1lIGEgc3lzdGVtIGNhbGwgb2NjdXJzIGluIHRoZSBzeXN0ZW0uICBPdXIgc2NyaXB0IHdpbGwgZG8KK3RoYXQsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5Cit0aGF0IHNjcmlwdC4gIFRoZW9yZXRpY2FsbHksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB3YXlzIHdlIGNvdWxkIGRvCit0aGF0OgorCistIHdlIGNvdWxkIGVuYWJsZSBldmVyeSBldmVudCB1bmRlciB0aGUgdHJhY2luZy9ldmVudHMvc3lzY2FsbHMKKyAgZGlyZWN0b3J5LCBidXQgdGhpcyBpcyBvdmVyIDYwMCBzeXNjYWxscywgd2VsbCBiZXlvbmQgdGhlIG51bWJlcgorICBhbGxvd2FibGUgYnkgcGVyZi4gIFRoZXNlIGluZGl2aWR1YWwgc3lzY2FsbCBldmVudHMgd2lsbCBob3dldmVyIGJlCisgIHVzZWZ1bCBpZiB3ZSB3YW50IHRvIGxhdGVyIHVzZSB0aGUgZ3VpZGFuY2Ugd2UgZ2V0IGZyb20gdGhlCisgIGdlbmVyYWwtcHVycG9zZSBzY3JpcHRzIHRvIGRyaWxsIGRvd24gYW5kIGdldCBtb3JlIGRldGFpbCBhYm91dAorICBpbmRpdmlkdWFsIHN5c2NhbGxzIG9mIGludGVyZXN0LgorCistIHdlIGNhbiBlbmFibGUgdGhlIHN5c19lbnRlciBhbmQvb3Igc3lzX2V4aXQgc3lzY2FsbHMgZm91bmQgdW5kZXIKKyAgdHJhY2luZy9ldmVudHMvcmF3X3N5c2NhbGxzLiAgVGhlc2UgYXJlIGNhbGxlZCBmb3IgYWxsIHN5c2NhbGxzOyB0aGUKKyAgJ2lkJyBmaWVsZCBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGluZGl2aWR1YWwgc3lzY2FsbAorICBudW1iZXJzLgorCitGb3IgdGhpcyBzY3JpcHQsIHdlIG9ubHkgbmVlZCB0byBrbm93IHRoYXQgYSBzeXNjYWxsIHdhcyBlbnRlcmVkOyB3ZQorZG9uJ3QgY2FyZSBob3cgaXQgZXhpdGVkLCBzbyB3ZSdsbCB1c2UgJ3BlcmYgcmVjb3JkJyB0byByZWNvcmQgb25seQordGhlIHN5c19lbnRlciBldmVudHM6CisKKy0tLS0KKyMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCisKK15DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KK1sgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA1Ni41NDUgTUIgcGVyZi5kYXRhICh+MjQ3MDUwMyBzYW1wbGVzKSBdCistLS0tCisKK1RoZSBvcHRpb25zIGJhc2ljYWxseSBzYXkgdG8gY29sbGVjdCBkYXRhIGZvciBldmVyeSBzeXNjYWxsIGV2ZW50CitzeXN0ZW0td2lkZSBhbmQgbXVsdGlwbGV4IHRoZSBwZXItY3B1IG91dHB1dCBpbnRvIGEgc2luZ2xlIHN0cmVhbS4KK1RoYXQgc2luZ2xlIHN0cmVhbSB3aWxsIGJlIHJlY29yZGVkIGluIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK2NhbGxlZCBwZXJmLmRhdGEuCisKK09uY2Ugd2UgaGF2ZSBhIHBlcmYuZGF0YSBmaWxlIGNvbnRhaW5pbmcgb3VyIGRhdGEsIHdlIGNhbiB1c2UgdGhlIC1nCisncGVyZiB0cmFjZScgb3B0aW9uIHRvIGdlbmVyYXRlIGEgUHl0aG9uIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiBhCitjYWxsYmFjayBoYW5kbGVyIGZvciBlYWNoIGV2ZW50IHR5cGUgZm91bmQgaW4gdGhlIHBlcmYuZGF0YSB0cmFjZQorc3RyZWFtIChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNUQVJURVIgU0NSSVBUUyBzZWN0aW9uKS4KKworLS0tLQorIyBwZXJmIHRyYWNlIC1nIHB5dGhvbgorZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6IHBlcmYtdHJhY2UucHkKKworVGhlIG91dHB1dCBmaWxlIGNyZWF0ZWQgYWxzbyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbmFtZWQKK3BlcmYtdHJhY2UucHkuICBIZXJlJ3MgdGhlIGZpbGUgaW4gaXRzIGVudGlyZXR5OgorCisjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKworIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCisjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCisjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KKyMgYmUgcmV0cmlldmVkIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gY29tbW9uXyooY29udGV4dCkuCisjIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAiaW4gdHJhY2VfYmVnaW4iCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJcHJpbnQgImlkPSVkLCBhcmdzPSVzXG4iICUgXAorCQkoaWQsIGFyZ3MpLAorCitkZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKKwkJcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCitkZWYgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6CisJcHJpbnQgIiUtMjBzICU1dSAlMDV1LiUwOXUgJTh1ICUtMjBzICIgJSBcCisJKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksCistLS0tCisKK0F0IHRoZSB0b3AgaXMgYSBjb21tZW50IGJsb2NrIGZvbGxvd2VkIGJ5IHNvbWUgaW1wb3J0IHN0YXRlbWVudHMgYW5kIGEKK3BhdGggYXBwZW5kIHdoaWNoIGV2ZXJ5IHBlcmYgdHJhY2Ugc2NyaXB0IHNob3VsZCBpbmNsdWRlLgorCitGb2xsb3dpbmcgdGhhdCBhcmUgYSBjb3VwbGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgdHJhY2VfYmVnaW4oKSBhbmQKK3RyYWNlX2VuZCgpLCB3aGljaCBhcmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlCitzY3JpcHQgcmVzcGVjdGl2ZWx5IChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNDUklQVF9MQVlPVVQgc2VjdGlvbgorYmVsb3cpLgorCitGb2xsb3dpbmcgdGhvc2UgYXJlIHRoZSAnZXZlbnQgaGFuZGxlcicgZnVuY3Rpb25zIGdlbmVyYXRlZCBvbmUgZm9yCitldmVyeSBldmVudCBpbiB0aGUgJ3BlcmYgcmVjb3JkJyBvdXRwdXQuICBUaGUgaGFuZGxlciBmdW5jdGlvbnMgdGFrZQordGhlIGZvcm0gc3Vic3lzdGVtX19ldmVudF9uYW1lLCBhbmQgY29udGFpbiBuYW1lZCBwYXJhbWV0ZXJzLCBvbmUgZm9yCitlYWNoIGZpZWxkIGluIHRoZSBldmVudDsgaW4gdGhpcyBjYXNlLCB0aGVyZSdzIG9ubHkgb25lIGV2ZW50LAorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoKS4gIChzZWUgdGhlIEVWRU5UIEhBTkRMRVJTIHNlY3Rpb24gYmVsb3cgZm9yCittb3JlIGluZm8gb24gZXZlbnQgaGFuZGxlcnMpLgorCitUaGUgZmluYWwgY291cGxlIG9mIGZ1bmN0aW9ucyBhcmUsIGxpa2UgdGhlIGJlZ2luIGFuZCBlbmQgZnVuY3Rpb25zLAorZ2VuZXJhdGVkIGZvciBldmVyeSBzY3JpcHQuICBUaGUgZmlyc3QsIHRyYWNlX3VuaGFuZGxlZCgpLCBpcyBjYWxsZWQKK2V2ZXJ5IHRpbWUgdGhlIHNjcmlwdCBmaW5kcyBhbiBldmVudCBpbiB0aGUgcGVyZi5kYXRhIGZpbGUgdGhhdAorZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBldmVudCBoYW5kbGVyIGluIHRoZSBzY3JpcHQuICBUaGlzIGNvdWxkCittZWFuIGVpdGhlciB0aGF0IHRoZSByZWNvcmQgc3RlcCByZWNvcmRlZCBldmVudCB0eXBlcyB0aGF0IGl0IHdhc24ndAorcmVhbGx5IGludGVyZXN0ZWQgaW4sIG9yIHRoZSBzY3JpcHQgd2FzIHJ1biBhZ2FpbnN0IGEgdHJhY2UgZmlsZSB0aGF0Citkb2Vzbid0IGNvcnJlc3BvbmQgdG8gdGhlIHNjcmlwdC4KKworVGhlIHNjcmlwdCBnZW5lcmF0ZWQgYnkgLWcgb3B0aW9uIG9wdGlvbiBzaW1wbHkgcHJpbnRzIGEgbGluZSBmb3IgZWFjaAorZXZlbnQgZm91bmQgaW4gdGhlIHRyYWNlIHN0cmVhbSBpLmUuIGl0IGJhc2ljYWxseSBqdXN0IGR1bXBzIHRoZSBldmVudAorYW5kIGl0cyBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN0ZG91dC4gIFRoZSBwcmludF9oZWFkZXIoKSBmdW5jdGlvbiBpcworc2ltcGx5IGEgdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGZvciB0aGF0IHB1cnBvc2UuICBMZXQncyByZW5hbWUgdGhlCitzY3JpcHQgYW5kIHJ1biBpdCB0byBzZWUgdGhlIGRlZmF1bHQgb3V0cHV0OgorCistLS0tCisjIG12IHBlcmYtdHJhY2UucHkgc3lzY2FsbC1jb3VudHMucHkKKyMgcGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weQorCityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1ODIwODMgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1OTU3NjQgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc2MjA4NjAgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3MTA0NzggICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTc4LCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzE5MjA0ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0xNDIsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NTU0NDUgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NzU2MDEgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3ODE4MjAgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CisuCisuCisuCistLS0tCisKK09mIGNvdXJzZSwgZm9yIHRoaXMgc2NyaXB0LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBwcmludGluZyBldmVyeQordHJhY2UgZXZlbnQsIGJ1dCByYXRoZXIgYWdncmVnYXRpbmcgaXQgaW4gYSB1c2VmdWwgd2F5LiAgU28gd2UnbGwgZ2V0CityaWQgb2YgZXZlcnl0aGluZyB0byBkbyB3aXRoIHByaW50aW5nIGFzIHdlbGwgYXMgdGhlIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV91bmhhbmRsZWQoKSBmdW5jdGlvbnMsIHdoaWNoIHdlIHdvbid0IGJlIHVzaW5nLiAgVGhhdCBsZWF2ZXMgdXMKK3dpdGggdGhpcyBtaW5pbWFsaXN0aWMgc2tlbGV0b246CisKKy0tLS0KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50ICJpbiB0cmFjZV9lbmQiCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKy0tLS0KKworSW4gdHJhY2VfZW5kKCksIHdlJ2xsIHNpbXBseSBwcmludCB0aGUgcmVzdWx0cywgYnV0IGZpcnN0IHdlIG5lZWQgdG8KK2dlbmVyYXRlIHNvbWUgcmVzdWx0cyB0byBwcmludC4gIFRvIGRvIHRoYXQgd2UgbmVlZCB0byBoYXZlIG91cgorc3lzX2VudGVyKCkgaGFuZGxlciBkbyB0aGUgbmVjZXNzYXJ5IHRhbGx5aW5nIHVudGlsIGFsbCBldmVudHMgaGF2ZQorYmVlbiBjb3VudGVkLiAgQSBoYXNoIHRhYmxlIGluZGV4ZWQgYnkgc3lzY2FsbCBpZCBpcyBhIGdvb2Qgd2F5IHRvCitzdG9yZSB0aGF0IGluZm9ybWF0aW9uOyBldmVyeSB0aW1lIHRoZSBzeXNfZW50ZXIoKSBoYW5kbGVyIGlzIGNhbGxlZCwKK3dlIHNpbXBseSBpbmNyZW1lbnQgYSBjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhhdCBoYXNoIGVudHJ5IGluZGV4ZWQgYnkKK3RoYXQgc3lzY2FsbCBpZDoKKworLS0tLQorICBzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworICB0cnk6CisgICAgc3lzY2FsbHNbaWRdICs9IDEKKyAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICBzeXNjYWxsc1tpZF0gPSAxCistLS0tCisKK1RoZSBzeXNjYWxscyAnYXV0b2RpY3QnIG9iamVjdCBpcyBhIHNwZWNpYWwga2luZCBvZiBQeXRob24gZGljdGlvbmFyeQorKGltcGxlbWVudGVkIGluIENvcmUucHkpIHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcworaW4gUHl0aG9uIGkuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2gKK3ZhbHVlcyB3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUKK2xldmVscyBpZiB0aGV5IGRvbid0IGV4aXN0IGUuZyBzeXNjYWxsc1tjb21tXVtwaWRdW2lkXSA9IDEgd2lsbCBjcmVhdGUKK3RoZSBpbnRlcm1lZGlhdGUgaGFzaCBsZXZlbHMgYW5kIGZpbmFsbHkgYXNzaWduIHRoZSB2YWx1ZSAxIHRvIHRoZQoraGFzaCBlbnRyeSBmb3IgJ2lkJyAoYmVjYXVzZSB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQgaXNuJ3QgYSBoYXNoCitvYmplY3QgaXRzZWxmLCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBhc3NpZ25lZCBpbiB0aGUgVHlwZUVycm9yCitleGNlcHRpb24uICBXZWxsLCB0aGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgaW4gUHl0aG9uIGJ1dAordGhhdCdzIHdoYXQgd29ya3MgZm9yIG5vdykuCisKK1B1dHRpbmcgdGhhdCBjb2RlIGludG8gdGhlIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKCkgaGFuZGxlciwgd2UKK2VmZmVjdGl2ZWx5IGVuZCB1cCB3aXRoIGEgc2luZ2xlLWxldmVsIGRpY3Rpb25hcnkga2V5ZWQgb24gc3lzY2FsbCBpZAorYW5kIGhhdmluZyB0aGUgY291bnRzIHdlJ3ZlIHRhbGxpZWQgYXMgdmFsdWVzLgorCitUaGUgcHJpbnRfc3lzY2FsbF90b3RhbHMoKSBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBlbnRyaWVzIGluIHRoZQorZGljdGlvbmFyeSBhbmQgZGlzcGxheXMgYSBsaW5lIGZvciBlYWNoIGVudHJ5IGNvbnRhaW5pbmcgdGhlIHN5c2NhbGwKK25hbWUgKHRoZSBkaWN0b25hcnkga2V5cyBjb250YWluIHRoZSBzeXNjYWxsIGlkcywgd2hpY2ggYXJlIHBhc3NlZCB0bwordGhlIFV0aWwgZnVuY3Rpb24gc3lzY2FsbF9uYW1lKCksIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIHJhdyBzeXNjYWxsCitudW1iZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN5c2NhbGwgbmFtZSBzdHJpbmdzKS4gIFRoZSBvdXRwdXQgaXMKK2Rpc3BsYXllZCBhZnRlciBhbGwgdGhlIGV2ZW50cyBpbiB0aGUgdHJhY2UgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYnkKK2NhbGxpbmcgdGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gZnJvbSB0aGUgdHJhY2VfZW5kKCkKK2hhbmRsZXIgY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc2NyaXB0IHByb2Nlc3NpbmcuCisKK1RoZSBmaW5hbCBzY3JpcHQgcHJvZHVjaW5nIHRoZSBvdXRwdXQgc2hvd24gYWJvdmUgaXMgc2hvd24gaW4gaXRzCitlbnRpcmV0eSBiZWxvdyAoc3lzY2FsbF9uYW1lKCkgaGVscGVyIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLCB5b3UgY2FuCitvbmx5IGRlYWwgd2l0aCBpZCdzIGZvciBub3cpOgorCistLS0tCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCitmcm9tIFV0aWwgaW1wb3J0ICoKKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludF9zeXNjYWxsX3RvdGFscygpCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKwl0cnk6CisJCXN5c2NhbGxzW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbaWRdID0gMQorCitkZWYgcHJpbnRfc3lzY2FsbF90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBpZCwgdmFsIGluIHNvcnRlZChzeXNjYWxscy5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksIFwKKwkJCQkgIHJldmVyc2UgPSBUcnVlKToKKwkgICAgcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKHN5c2NhbGxfbmFtZShpZCksIHZhbCksCistLS0tCisKK1RoZSBzY3JpcHQgY2FuIGJlIHJ1biBqdXN0IGFzIGJlZm9yZToKKworICAjIHBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkKKworU28gdGhvc2UgYXJlIHRoZSBlc3NlbnRpYWwgc3RlcHMgaW4gd3JpdGluZyBhbmQgcnVubmluZyBhIHNjcmlwdC4gIFRoZQorcHJvY2VzcyBjYW4gYmUgZ2VuZXJhbGl6ZWQgdG8gYW55IHRyYWNlcG9pbnQgb3Igc2V0IG9mIHRyYWNlcG9pbnRzCit5b3UncmUgaW50ZXJlc3RlZCBpbiAtIGJhc2ljYWxseSBmaW5kIHRoZSB0cmFjZXBvaW50KHMpIHlvdSdyZQoraW50ZXJlc3RlZCBpbiBieSBsb29raW5nIGF0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBldmVudHMgc2hvd24gYnkKKydwZXJmIGxpc3QnIGFuZC9vciBsb29rIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZXZlbnRzIGZvcgorZGV0YWlsZWQgZXZlbnQgYW5kIGZpZWxkIGluZm8sIHJlY29yZCB0aGUgY29ycmVzcG9uZGluZyB0cmFjZSBkYXRhCit1c2luZyAncGVyZiByZWNvcmQnLCBwYXNzaW5nIGl0IHRoZSBsaXN0IG9mIGludGVyZXN0aW5nIGV2ZW50cywKK2dlbmVyYXRlIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHRyYWNlIC1nIHB5dGhvbicgYW5kIG1vZGlmeSB0aGUKK2NvZGUgdG8gYWdncmVnYXRlIGFuZCBkaXNwbGF5IGl0IGZvciB5b3VyIHBhcnRpY3VsYXIgbmVlZHMuCisKK0FmdGVyIHlvdSd2ZSBkb25lIHRoYXQgeW91IG1heSBlbmQgdXAgd2l0aCBhIGdlbmVyYWwtcHVycG9zZSBzY3JpcHQKK3RoYXQgeW91IHdhbnQgdG8ga2VlcCBhcm91bmQgYW5kIGhhdmUgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlLiAgQnkKK3dyaXRpbmcgYSBjb3VwbGUgb2YgdmVyeSBzaW1wbGUgc2hlbGwgc2NyaXB0cyBhbmQgcHV0dGluZyB0aGVtIGluIHRoZQorcmlnaHQgcGxhY2UsIHlvdSBjYW4gaGF2ZSB5b3VyIHNjcmlwdCBsaXN0ZWQgYWxvbmdzaWRlIHRoZSBvdGhlcgorc2NyaXB0cyBsaXN0ZWQgYnkgdGhlICdwZXJmIHRyYWNlIC1sJyBjb21tYW5kIGUuZy46CisKKy0tLS0KK3Jvb3RAdHJvcGljYW5hOn4jIHBlcmYgdHJhY2UgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorLS0tLQorCitBIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHlvdSBhbHNvIHRoZW4gY2FwdHVyZSB0aGUKK3Byb2JhYmx5IGxlbmd0aHkgJ3BlcmYgcmVjb3JkJyBjb21tYW5kIG5lZWRlZCB0byByZWNvcmQgdGhlIGV2ZW50cyBmb3IKK3RoZSBzY3JpcHQuCisKK1RvIGhhdmUgdGhlIHNjcmlwdCBhcHBlYXIgYXMgYSAnYnVpbHQtaW4nIHNjcmlwdCwgeW91IHdyaXRlIHR3byBzaW1wbGUKK3NjcmlwdHMsIG9uZSBmb3IgcmVjb3JkaW5nIGFuZCBvbmUgZm9yICdyZXBvcnRpbmcnLgorCitUaGUgJ3JlY29yZCcgc2NyaXB0IGlzIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzIHlvdXIKK3NjcmlwdCwgYnV0IHdpdGggLXJlY29yZCBhcHBlbmRlZC4gIFRoZSBzaGVsbCBzY3JpcHQgc2hvdWxkIGJlIHB1dAoraW50byB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCitJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZSAncGVyZiByZWNvcmQnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yCit5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKKworIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgorLS0tLQorCitUaGUgJ3JlcG9ydCcgc2NyaXB0IGlzIGFsc28gYSBzaGVsbCBzY3JpcHQgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgYXMKK3lvdXIgc2NyaXB0LCBidXQgd2l0aCAtcmVwb3J0IGFwcGVuZGVkLiAgSXQgc2hvdWxkIGFsc28gYmUgbG9jYXRlZCBpbgordGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeS4gIEluIHRoYXQgc2NyaXB0LCB5b3Ugd3JpdGUgdGhlCisncGVyZiB0cmFjZSAtcycgY29tbWFuZC1saW5lIG5lZWRlZCBmb3IgcnVubmluZyB5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKKworIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHN5c2NhbGwgY291bnRzCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKKy0tLS0KKworTm90ZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBpbiB0aGUgc2hlbGwgc2NyaXB0CitpcyBpbiB0aGUgbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IC0gdGhpcyBpcyB3aGVyZQordGhlIHNjcmlwdCB3aWxsIGJlIGNvcGllZCBieSAnbWFrZSBpbnN0YWxsJyB3aGVuIHlvdSBpbnN0YWxsIHBlcmYuCitGb3IgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHlvdXIgc2NyaXB0IHRoZXJlLCB5b3VyIHNjcmlwdCBuZWVkcwordG8gYmUgbG9jYXRlZCBpbiB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbAorc291cmNlIHRyZWU6CisKKy0tLS0KKyMgbHMgLWFsIGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbgorCityb290QHRyb3BpY2FuYTovaG9tZS90cnovc3JjL3RpcCMgbHMgLWFsIHRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KK3RvdGFsIDMyCitkcnd4ci14ci14IDQgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MzAgLgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IC4uCitkcnd4ci14ci14IDIgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MjkgYmluCistcnctci0tci0tIDEgdHJ6IHRyeiAyNTQ4IDIwMTAtMDEtMjYgMjI6MjkgY2hlY2stcGVyZi10cmFjZS5weQorZHJ3eHIteHIteCAzIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjQ5IFBlcmYtVHJhY2UtVXRpbAorLXJ3LXItLXItLSAxIHRyeiB0cnogMTQ2MiAyMDEwLTAxLTI2IDIyOjMwIHN5c2NhbGwtY291bnRzLnB5CistLS0tCisKK09uY2UgeW91J3ZlIGRvbmUgdGhhdCAoZG9uJ3QgZm9yZ2V0IHRvIGRvIGEgbmV3ICdtYWtlIGluc3RhbGwnLAorb3RoZXJ3aXNlIHlvdXIgc2NyaXB0IHdvbid0IHNob3cgdXAgYXQgcnVuLXRpbWUpLCAncGVyZiB0cmFjZSAtbCcKK3Nob3VsZCBzaG93IGEgbmV3IGVudHJ5IGZvciB5b3VyIHNjcmlwdDoKKworLS0tLQorcm9vdEB0cm9waWNhbmE6fiMgcGVyZiB0cmFjZSAtbAorTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czoKKyAgd29ya3F1ZXVlLXN0YXRzICAgICAgICAgICAgICAgICAgICAgIHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKKyAgd2FrZXVwLWxhdGVuY3kgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5CisgIHJ3LWJ5LWZpbGUgPGNvbW0+ICAgICAgICAgICAgICAgICAgICByL3cgYWN0aXZpdHkgZm9yIGEgcHJvZ3JhbSwgYnkgZmlsZQorICBydy1ieS1waWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgci93IGFjdGl2aXR5CisgIHN5c2NhbGwtY291bnRzICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cworLS0tLQorCitZb3UgY2FuIG5vdyBwZXJmb3JtIHRoZSByZWNvcmQgc3RlcCB2aWEgJ3BlcmYgdHJhY2UgcmVjb3JkJzoKKworICAjIHBlcmYgdHJhY2UgcmVjb3JkIHN5c2NhbGwtY291bnRzCisKK2FuZCBkaXNwbGF5IHRoZSBvdXRwdXQgdXNpbmcgJ3BlcmYgdHJhY2UgcmVwb3J0JzoKKworICAjIHBlcmYgdHJhY2UgcmVwb3J0IHN5c2NhbGwtY291bnRzCisKK1NUQVJURVIgU0NSSVBUUworLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcXVpY2tseSBnZXQgc3RhcnRlZCB3cml0aW5nIGEgc2NyaXB0IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mCit0cmFjZSBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBza2VsZXRvbiBzY3JpcHQgdXNpbmcgJ3BlcmYgdHJhY2UgLWcKK3B5dGhvbicgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgorVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKK3RoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKK2ZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgorCitZb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgorfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiBmb3IgdHlwaWNhbCBleGFtcGxlcyBzaG93aW5nIGhvdyB0bworZG8gYmFzaWMgdGhpbmdzIGxpa2UgYWdncmVnYXRlIGV2ZW50IGRhdGEsIHByaW50IHJlc3VsdHMsIGV0Yy4gIEFsc28sCit0aGUgY2hlY2stcGVyZi10cmFjZS5weSBzY3JpcHQsIHdoaWxlIG5vdCBpbnRlcmVzdGluZyBmb3IgaXRzIHJlc3VsdHMsCithdHRlbXB0cyB0byBleGVyY2lzZSBhbGwgb2YgdGhlIG1haW4gc2NyaXB0aW5nIGZlYXR1cmVzLgorCitFVkVOVCBIQU5ETEVSUworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBwZXJmIHRyYWNlIGlzIGludm9rZWQgdXNpbmcgYSB0cmFjZSBzY3JpcHQsIGEgdXNlci1kZWZpbmVkCisnaGFuZGxlciBmdW5jdGlvbicgaXMgY2FsbGVkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZS4gIElmIHRoZXJlJ3MKK25vIGhhbmRsZXIgZnVuY3Rpb24gZGVmaW5lZCBmb3IgYSBnaXZlbiBldmVudCB0eXBlLCB0aGUgZXZlbnQgaXMKK2lnbm9yZWQgKG9yIHBhc3NlZCB0byBhICd0cmFjZV9oYW5kbGVkJyBmdW5jdGlvbiwgc2VlIGJlbG93KSBhbmQgdGhlCituZXh0IGV2ZW50IGlzIHByb2Nlc3NlZC4KKworTW9zdCBvZiB0aGUgZXZlbnQncyBmaWVsZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlCitoYW5kbGVyIGZ1bmN0aW9uOyBzb21lIG9mIHRoZSBsZXNzIGNvbW1vbiBvbmVzIGFyZW4ndCAtIHRob3NlIGFyZQorYXZhaWxhYmxlIGFzIGNhbGxzIGJhY2sgaW50byB0aGUgcGVyZiBleGVjdXRhYmxlIChzZWUgYmVsb3cpLgorCitBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHBlcmYgcmVjb3JkIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkCithbGwgc2NoZWRfd2FrZXVwIGV2ZW50cyBpbiB0aGUgc3lzdGVtOgorCisgIyBwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHNjaGVkOnNjaGVkX3dha2V1cAorCitUcmFjZXMgbWVhbnQgdG8gYmUgcHJvY2Vzc2VkIHVzaW5nIGEgc2NyaXB0IHNob3VsZCBiZSByZWNvcmRlZCB3aXRoCit0aGUgYWJvdmUgb3B0aW9uczogLWMgMSBzYXlzIHRvIHNhbXBsZSBldmVyeSBldmVudCwgLWEgdG8gZW5hYmxlCitzeXN0ZW0td2lkZSBjb2xsZWN0aW9uLCAtTSB0byBtdWx0aXBsZXggdGhlIG91dHB1dCwgYW5kIC1SIHRvIGNvbGxlY3QKK3JhdyBzYW1wbGVzLgorCitUaGUgZm9ybWF0IGZpbGUgZm9yIHRoZSBzY2hlZF93YWtlcCBldmVudCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisoc2VlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQpOgorCistLS0tCisgZm9ybWF0OgorICAgICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CisKKyAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CisgICAgICAgIGZpZWxkOmludCBwcmlvOworICAgICAgICBmaWVsZDppbnQgc3VjY2VzczsKKyAgICAgICAgZmllbGQ6aW50IHRhcmdldF9jcHU7CistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGlzIGV2ZW50IHdvdWxkIGJlIGRlZmluZWQgYXM6CisKKy0tLS0KK2RlZiBzY2hlZF9fc2NoZWRfd2FrZXVwKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLAorICAgICAgIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgY29tbSwgcGlkLCBwcmlvLCBzdWNjZXNzLCB0YXJnZXRfY3B1KToKKyAgICAgICBwYXNzCistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIHRha2VzIHRoZSBmb3JtIHN1YnN5c3RlbV9fZXZlbnRfbmFtZS4KKworVGhlIGNvbW1vbl8qIGFyZ3VtZW50cyBpbiB0aGUgaGFuZGxlcidzIGFyZ3VtZW50IGxpc3QgYXJlIHRoZSBzZXQgb2YKK2FyZ3VtZW50cyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzOyBzb21lIG9mIHRoZSBmaWVsZHMgY29ycmVzcG9uZAordG8gdGhlIGNvbW1vbl8qIGZpZWxkcyBpbiB0aGUgZm9ybWF0IGZpbGUsIGJ1dCBzb21lIGFyZSBzeW50aGVzaXplZCwKK2FuZCBzb21lIG9mIHRoZSBjb21tb25fKiBmaWVsZHMgYXJlbid0IGNvbW1vbiBlbm91Z2ggdG8gdG8gYmUgcGFzc2VkCit0byBldmVyeSBldmVudCBhcyBhcmd1bWVudHMgYnV0IGFyZSBhdmFpbGFibGUgYXMgbGlicmFyeSBmdW5jdGlvbnMuCisKK0hlcmUncyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggb2YgdGhlIGludmFyaWFudCBldmVudCBhcmdzOgorCisgZXZlbnRfbmFtZSAJICAJICAgIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0ZXh0CisgY29udGV4dAkJICAgIGFuIG9wYXF1ZSAnY29va2llJyB1c2VkIGluIGNhbGxzIGJhY2sgaW50byBwZXJmCisgY29tbW9uX2NwdQkJICAgIHRoZSBjcHUgdGhlIGV2ZW50IG9jY3VycmVkIG9uCisgY29tbW9uX3NlY3MJCSAgICB0aGUgc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKKyBjb21tb25fbnNlY3MJCSAgICB0aGUgbnNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX3BpZAkJICAgIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQgdGFzaworIGNvbW1vbl9jb21tCQkgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcworCitBbGwgb2YgdGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGV2ZW50J3MgZm9ybWF0IGZpbGUgaGF2ZQorY291bnRlcnBhcnRzIGFzIGhhbmRsZXIgZnVuY3Rpb24gYXJndW1lbnRzIG9mIHRoZSBzYW1lIG5hbWUsIGFzIGNhbiBiZQorc2VlbiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KKworVGhlIGFib3ZlIHByb3ZpZGVzIHRoZSBiYXNpY3MgbmVlZGVkIHRvIGRpcmVjdGx5IGFjY2VzcyBldmVyeSBmaWVsZCBvZgorZXZlcnkgZXZlbnQgaW4gYSB0cmFjZSwgd2hpY2ggY292ZXJzIDkwJSBvZiB3aGF0IHlvdSBuZWVkIHRvIGtub3cgdG8KK3dyaXRlIGEgdXNlZnVsIHRyYWNlIHNjcmlwdC4gIFRoZSBzZWN0aW9ucyBiZWxvdyBjb3ZlciB0aGUgcmVzdC4KKworU0NSSVBUIExBWU9VVAorLS0tLS0tLS0tLS0tLQorCitFdmVyeSBwZXJmIHRyYWNlIFB5dGhvbiBzY3JpcHQgc2hvdWxkIHN0YXJ0IGJ5IHNldHRpbmcgdXAgYSBQeXRob24KK21vZHVsZSBzZWFyY2ggcGF0aCBhbmQgJ2ltcG9ydCdpbmcgYSBmZXcgc3VwcG9ydCBtb2R1bGVzIChzZWUgbW9kdWxlCitkZXNjcmlwdGlvbnMgYmVsb3cpOgorCistLS0tCisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworCisgc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJICAgICAgJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCisgZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyBmcm9tIENvcmUgaW1wb3J0ICoKKy0tLS0KKworVGhlIHJlc3Qgb2YgdGhlIHNjcmlwdCBjYW4gY29udGFpbiBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgc3VwcG9ydAorZnVuY3Rpb25zIGluIGFueSBvcmRlci4KKworQXNpZGUgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZGlzY3Vzc2VkIGFib3ZlLCBldmVyeSBzY3JpcHQKK2NhbiBpbXBsZW1lbnQgYSBzZXQgb2Ygb3B0aW9uYWwgZnVuY3Rpb25zOgorCisqdHJhY2VfYmVnaW4qLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYmVmb3JlIGFueSBldmVudCBpcyBwcm9jZXNzZWQgYW5kCitnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIHNldHVwIHRhc2tzOgorCistLS0tCitkZWYgdHJhY2VfYmVnaW46CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCisgcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKKyBhcyBkaXNwbGF5IHJlc3VsdHM6CisKKy0tLS0KK2RlZiB0cmFjZV9lbmQ6CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfdW5oYW5kbGVkKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGZvciBhbnkgZXZlbnQgdGhhdAorIGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZXhwbGljaXRseSBkZWZpbmVkIGZvciBpdC4gIFRoZSBzdGFuZGFyZCBzZXQKKyBvZiBjb21tb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW50byBpdDoKKworLS0tLQorZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICAgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgcGFzcworLS0tLQorCitUaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQorYnVpbHQtaW4gcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMuCisKK0FWQUlMQUJMRSBNT0RVTEVTIEFORCBGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgYXZhaWxhYmxlCit2aWEgdGhlIHZhcmlvdXMgcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAordmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICdmcm9tIFhYWFgKK2ltcG9ydCcgbGluZSB0byB5b3VyIHBlcmYgdHJhY2Ugc2NyaXB0LgorCitDb3JlLnB5IE1vZHVsZQorfn5+fn5+fn5+fn5+fn4KKworVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KKworVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQorc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncworYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKK2ZpbGVzOgorCisgIGZsYWdfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIGZsYWcgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisgIHN5bWJvbF9zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvIGZpZWxkX3ZhbHVlIGZvciB0aGUgc3ltYm9saWMgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisKK1RoZSAqYXV0b2RpY3QqIGZ1bmN0aW9uIHJldHVybnMgYSBzcGVjaWFsIHNwZWNpYWwga2luZCBvZiBQeXRob24KK2RpY3Rpb25hcnkgdGhhdCBpbXBsZW1lbnRzIFBlcmwncyAnYXV0b3ZpdmlmeWluZycgaGFzaGVzIGluIFB5dGhvbgoraS5lLiB3aXRoIGF1dG92aXZpZnlpbmcgaGFzaGVzLCB5b3UgY2FuIGFzc2lnbiBuZXN0ZWQgaGFzaCB2YWx1ZXMKK3dpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSB0cm91YmxlIG9mIGNyZWF0aW5nIGludGVybWVkaWF0ZSBsZXZlbHMgaWYKK3RoZXkgZG9uJ3QgZXhpc3QuCisKKyAgYXV0b2RpY3QoKSAtIHJldHVybnMgYW4gYXV0b3ZpdmlmeWluZyBkaWN0aW9uYXJ5IGluc3RhbmNlCisKKworcGVyZl90cmFjZV9jb250ZXh0IE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTb21lIG9mIHRoZSAnY29tbW9uJyBmaWVsZHMgaW4gdGhlIGV2ZW50IGZvcm1hdCBmaWxlIGFyZW4ndCBhbGwgdGhhdAorY29tbW9uLCBidXQgbmVlZCB0byBiZSBtYWRlIGFjY2Vzc2libGUgdG8gdXNlciBzY3JpcHRzIG5vbmV0aGVsZXNzLgorCitwZXJmX3RyYWNlX2NvbnRleHQgZGVmaW5lcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bworYWNjZXNzIHRoaXMgZGF0YSBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBldmVudC4gIEVhY2ggb2YgdGhlc2UKK2Z1bmN0aW9ucyBleHBlY3RzIGEgY29udGV4dCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCitjb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAorYXJndW1lbnQuCisKKyBjb21tb25fcGMoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9wcmVlbXB0IGNvdW50IGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9mbGFncyhjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2ZsYWdzIGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKworVXRpbC5weSBNb2R1bGUKK35+fn5+fn5+fn5+fn5+CisKK1ZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2U6CisKKyAgbnNlY3Moc2VjcywgbnNlY3MpIC0gcmV0dXJucyB0b3RhbCBuc2VjcyBnaXZlbiBzZWNzL25zZWNzIHBhaXIKKyAgbnNlY3Nfc2Vjcyhuc2VjcykgLSByZXR1cm5zIHdob2xlIHNlY3MgcG9ydGlvbiBnaXZlbiBuc2VjcworICBuc2Vjc19uc2Vjcyhuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcworICBuc2Vjc19zdHIobnNlY3MpIC0gcmV0dXJucyBwcmludGFibGUgc3RyaW5nIGluIHRoZSBmb3JtIHNlY3MubnNlY3MKKyAgYXZnKHRvdGFsLCBuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmluZGV4IDYwZTU5MDAuLjg4NzkyOTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKQEAgLTE5LDYgKzE5LDExIEBACiAgICdwZXJmIHRyYWNlJyB0byBzZWUgYSBkZXRhaWxlZCB0cmFjZSBvZiB0aGUgd29ya2xvYWQgdGhhdCB3YXMKICAgcmVjb3JkZWQuCiAKKyAgWW91IGNhbiBhbHNvIHJ1biBhIHNldCBvZiBwcmUtY2FubmVkIHNjcmlwdHMgdGhhdCBhZ2dyZWdhdGUgYW5kCisgIHN1bW1hcml6ZSB0aGUgcmF3IHRyYWNlIGRhdGEgaW4gdmFyaW91cyB3YXlzICh0aGUgbGlzdCBvZiBzY3JpcHRzIGlzCisgIGF2YWlsYWJsZSB2aWEgJ3BlcmYgdHJhY2UgLWwnKS4gIFRoZSBmb2xsb3dpbmcgdmFyaWFudHMgYWxsb3cgeW91IHRvCisgIHJlY29yZCBhbmQgcnVuIHRob3NlIHNjcmlwdHM6CisKICAgJ3BlcmYgdHJhY2UgcmVjb3JkIDxzY3JpcHQ+JyB0byByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZCBmb3IgJ3BlcmYKICAgdHJhY2UgcmVwb3J0Jy4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mCiAgICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZQpAQCAtMzEsNiArMzYsOSBAQAogICByZWNvcmQgPHNjcmlwdD4nIGlzIHVzZWQgYW5kIHNob3VsZCBiZSBwcmVzZW50IGZvciB0aGlzIGNvbW1hbmQgdG8KICAgc3VjY2VlZC4KIAorICBTZWUgdGhlICdTRUUgQUxTTycgc2VjdGlvbiBmb3IgbGlua3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMKKyAgaW5mb3JtYXRpb24gb24gaG93IHRvIHdyaXRlIGFuZCBydW4geW91ciBvd24gdHJhY2Ugc2NyaXB0cy4KKwogT1BUSU9OUwogLS0tLS0tLQogLUQ6OgpAQCAtNDUsOSArNTMsMTEgQEAKIC0tbGlzdD06OgogICAgICAgICBEaXNwbGF5IGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0cy4KIAotLXM6OgorLXMgWydsYW5nJ106OgogLS1zY3JpcHQ9OjoKICAgICAgICAgUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggdGhlIGdpdmVuIHNjcmlwdCAoW2xhbmddOnNjcmlwdFsuZXh0XSkuCisJSWYgdGhlIHN0cmluZyAnbGFuZycgaXMgc3BlY2lmaWVkIGluIHBsYWNlIG9mIGEgc2NyaXB0IG5hbWUsIGEKKyAgICAgICAgbGlzdCBvZiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuCiAKIC1nOjoKIC0tZ2VuLXNjcmlwdD06OgpAQCAtNTYsNCArNjYsNSBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0sCitsaW5rcGVyZjpwZXJmLXRyYWNlLXB5dGhvblsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0CmluZGV4IDY5YzgzMjUuLjBlZWIyNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1QZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgc3Vic3lzdGVtCitQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGEgbmV3IGtlcm5lbC1iYXNlZCBzdWJzeXN0ZW0KIHRoYXQgcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgYWxsIHRoaW5ncyBwZXJmb3JtYW5jZSBhbmFseXNpcy4gSXQKIGNvdmVycyBoYXJkd2FyZSBsZXZlbCAoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcwogYW5kIHNvZnR3YXJlIGZlYXR1cmVzIChzb2Z0d2FyZSBjb3VudGVycywgdHJhY2Vwb2ludHMpIGFzIHdlbGwuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyZTdmYTNhLi41NGE1YjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTI4NiwxMSArMjg2LDcgQEAKIFNDUklQVF9TSCA9CiBURVNUX1BST0dSQU1TID0KIAotIwotIyBObyBzY3JpcHRzIHJpZ2h0IG5vdzoKLSMKLQotIyBTQ1JJUFRfU0ggKz0gcGVyZi1hbS5zaAorU0NSSVBUX1NIICs9IHBlcmYtYXJjaGl2ZS5zaAogCiAjCiAjIE5vIFBlcmwgc2NyaXB0cyByaWdodCBub3c6CkBAIC0zMTUsOSArMzExLDYgQEAKICMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgogIyBidWlsdGluLSRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KICMKLSMgTm9uZSByaWdodCBub3c6Ci0jCi0jIEJVSUxUX0lOUyArPSBwZXJmLWluaXQgJFgKIAogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIHBlcmZleGVjZGlyCiBBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCkBAIC0zNDAsNiArMzMzLDcgQEAKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L2xpc3QuaAorTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9oYXNoLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvc3RyaW5naWZ5LmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0zNjMsMTIgKzM1NywxNCBAQAogTElCX0ggKz0gcGVyZi5oCiBMSUJfSCArPSB1dGlsL2NhY2hlLmgKIExJQl9IICs9IHV0aWwvY2FsbGNoYWluLmgKK0xJQl9IICs9IHV0aWwvYnVpbGQtaWQuaAogTElCX0ggKz0gdXRpbC9kZWJ1Zy5oCiBMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAogTElCX0ggKz0gdXRpbC9ldmVudC5oCiBMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKIExJQl9IICs9IHV0aWwvdHlwZXMuaAogTElCX0ggKz0gdXRpbC9sZXZlbnNodGVpbi5oCitMSUJfSCArPSB1dGlsL21hcC5oCiBMSUJfSCArPSB1dGlsL3BhcnNlLW9wdGlvbnMuaAogTElCX0ggKz0gdXRpbC9wYXJzZS1ldmVudHMuaAogTElCX0ggKz0gdXRpbC9xdW90ZS5oCkBAIC0zODksMTIgKzM4NSwxMiBAQAogTElCX0ggKz0gdXRpbC9oaXN0LmgKIExJQl9IICs9IHV0aWwvdGhyZWFkLmgKIExJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQuaAotTElCX0ggKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZmluZGVyLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZXZlbnQuaAogCiBMSUJfT0JKUyArPSB1dGlsL2Fic3BhdGgubwogTElCX09CSlMgKz0gdXRpbC9hbGlhcy5vCitMSUJfT0JKUyArPSB1dGlsL2J1aWxkLWlkLm8KIExJQl9PQkpTICs9IHV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9IHV0aWwvY3R5cGUubwogTElCX09CSlMgKz0gdXRpbC9kZWJ1Z2ZzLm8KQEAgLTQzMSwxMiArNDI3LDEyIEBACiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LWluZm8ubwotTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8KK0xJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLm8KIExJQl9PQkpTICs9IHV0aWwvc3ZnaGVscGVyLm8KIExJQl9PQkpTICs9IHV0aWwvc29ydC5vCiBMSUJfT0JKUyArPSB1dGlsL2hpc3QubwotTElCX09CSlMgKz0gdXRpbC9kYXRhX21hcC5vCiBMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWV2ZW50Lm8KK0xJQl9PQkpTICs9IHV0aWwvdXRpbC5vCiAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWFubm90YXRlLm8KIApAQCAtNDUxLDYgKzQ0Nyw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJ1aWxkaWQtbGlzdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idWlsZGlkLWNhY2hlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxpc3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVjb3JkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcG9ydC5vCkBAIC00NjAsNiArNDU3LDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRyYWNlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXByb2JlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWttZW0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbG9jay5vCiAKIFBFUkZMSUJTID0gJChMSUJfRklMRSkKIApAQCAtNTIwLDkgKzUxOCwyMyBAQAogCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBFUkwKIGVsc2UKIAlBTExfTERGTEFHUyArPSAkKFBFUkxfRU1CRURfTERPUFRTKQorCUxJQl9PQkpTICs9IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vCiAJTElCX09CSlMgKz0gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KIGVuZGlmCiAKK2lmbmRlZiBOT19MSUJQWVRIT04KK1BZVEhPTl9FTUJFRF9MRE9QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWxkZmxhZ3MgMj4vZGV2L251bGxgCitQWVRIT05fRU1CRURfQ0NPUFRTID0gYHB5dGhvbi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCitlbmRpZgorCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8UHl0aG9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBQeV9Jbml0aWFsaXplKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtbyAvZGV2L251bGwgJChQWVRIT05fRU1CRURfTERPUFRTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBZVEhPTgorZWxzZQorCUFMTF9MREZMQUdTICs9ICQoUFlUSE9OX0VNQkVEX0xET1BUUykKKwlMSUJfT0JKUyArPSB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vCisJTElCX09CSlMgKz0gc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubworZW5kaWYKKwogaWZkZWYgTk9fREVNQU5HTEUKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERU1BTkdMRQogZWxzZQpAQCAtODk0LDEyICs5MDYsMTggQEAKIHV0aWwvZmluZF9uZXh0X2JpdC5vOiAuLi8uLi9saWIvZmluZF9uZXh0X2JpdC5jIFBFUkYtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2ZpbmRfbmV4dF9iaXQubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CiAKLXV0aWwvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAordXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubyAtYyAkKEFMTF9DRkxBR1MpICQoUEVSTF9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CiAKIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vOiBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW5lc3RlZC1leHRlcm5zICQ8CiAKK3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CisKK3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm86IHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tbmVzdGVkLWV4dGVybnMgJDwKKwogcGVyZi0lJFg6ICUubyAkKFBFUkZMSUJTKQogCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCkBAIC0xMDA5LDkgKzEwMjcsMTYgQEAKIAkkKElOU1RBTEwpIHBlcmYkWCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIHBlcmYtYXJjaGl2ZSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlLyogLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvKi5wbCAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvYmluJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcHl0aG9uL2JpbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi8qLnB5IC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9iaW4nCisKIGlmZGVmIEJVSUxUX0lOUwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpICQoQlVJTFRfSU5TKSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDU5M2ZmMjUwLi41ZWM1ZGU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTMsMzIgKzUzLDIwIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7CiAKLXN0YXRpYyBpbnQgc3ltYm9sX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX191c2VkLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCitzdGF0aWMgaW50IHN5bV9fYWxsb2NfaGlzdChzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCWlmIChzeW1faGlzdF9maWx0ZXIgPT0gTlVMTCB8fAotCSAgICBzdHJjbXAoc3ltLT5uYW1lLCBzeW1faGlzdF9maWx0ZXIpID09IDApIHsKLQkJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7Ci0JCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKwotCQkJCSAgKHN5bS0+ZW5kIC0gc3ltLT5zdGFydCkgKiBzaXplb2YodTY0KSk7CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHNlbGYpOworCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKworCQkJICAoc2VsZi0+ZW5kIC0gc2VsZi0+c3RhcnQpICogc2l6ZW9mKHU2NCkpOwogCi0JCXByaXYtPmhpc3QgPSBtYWxsb2Moc2l6ZSk7Ci0JCWlmIChwcml2LT5oaXN0KQotCQkJbWVtc2V0KHByaXYtPmhpc3QsIDAsIHNpemUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBmaWx0ZXIgaXQgb3V0LCBhcyB3ZSBkb24ndCB3YW50IHRvIGdvIHRocnUgc3ltYm9scwotCSAqIHdlJ3JlIG5vdCBpbnRlcmVzdGVkLCBhbmQgaWYgYSBEU08gZW5kcyB1cCB3aXRoIG5vIHN5bWJvbHMsIGRlbGV0ZSBpdCB0b28sCi0JICogYnV0IHJpZ2h0IG5vdyB0aGUga2VybmVsIGxvYWRpbmcgcm91dGluZXMgaW4gc3ltYm9sLmMgYmFpbCBvdXQgaWYgbm8gc3ltYm9scwotCSAqIGFyZSBmb3VuZCwgZml4IGl0IGxhdGVyLgotCSAqLwotCXJldHVybiAwOworCXByaXYtPmhpc3QgPSB6YWxsb2Moc2l6ZSk7CisJcmV0dXJuIHByaXYtPmhpc3QgPT0gTlVMTCA/IC0xIDogMDsKIH0KIAogLyoKICAqIGNvbGxlY3QgaGlzdG9ncmFtIGNvdW50cwogICovCi1zdGF0aWMgdm9pZCBoaXN0X2hpdChzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBpcCkKK3N0YXRpYyBpbnQgYW5ub3RhdGVfX2hpc3RfaGl0KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGlwKQogewogCXVuc2lnbmVkIGludCBzeW1fc2l6ZSwgb2Zmc2V0OwogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CkBAIC04OCw4MyArNzYsMTI3IEBACiAJaGUtPmNvdW50Kys7CiAKIAlpZiAoIXN5bSB8fCAhaGUtPm1hcCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCXByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKLQlpZiAoIXByaXYtPmhpc3QpCi0JCXJldHVybjsKKwlpZiAocHJpdi0+aGlzdCA9PSBOVUxMICYmIHN5bV9fYWxsb2NfaGlzdChzeW0pIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzeW1fc2l6ZSA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAlvZmZzZXQgPSBpcCAtIHN5bS0+c3RhcnQ7CiAKLQlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsICIlczogaXA9JUx4XG4iLCBfX2Z1bmNfXywKLQkJCWhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CisJcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CiAKIAlpZiAob2Zmc2V0ID49IHN5bV9zaXplKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaCA9IHByaXYtPmhpc3Q7CiAJaC0+c3VtKys7CiAJaC0+aXBbb2Zmc2V0XSsrOwogCi0JaWYgKHZlcmJvc2UgPj0gMykKLQkJcHJpbnRmKCIlcCAlczogY291bnQrKyBbaXA6ICVwLCAlMDhMeF0gPT4gJUxkXG4iLAotCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyloZS0+c3ltLT5zdGFydCwKLQkJCWhlLT5zeW0tPm5hbWUsCi0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWlwLCBpcCAtIGhlLT5zeW0tPnN0YXJ0LAotCQkJaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlI0x4ICVzOiBjb3VudCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBoZS0+c3ltLT5zdGFydCwKKwkJICBoZS0+c3ltLT5uYW1lLCBpcCwgaXAgLSBoZS0+c3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHU2NCBjb3VudCkKIHsKIAlib29sIGhpdDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIE5VTEwsCi0JCQkJCQkJICAgICAgIGNvdW50LCAmaGl0KTsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisKKwlpZiAoc3ltX2hpc3RfZmlsdGVyICE9IE5VTEwgJiYKKwkgICAgKGFsLT5zeW0gPT0gTlVMTCB8fCBzdHJjbXAoc3ltX2hpc3RfZmlsdGVyLCBhbC0+c3ltLT5uYW1lKSAhPSAwKSkgeworCQkvKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzeW1ib2wgbmFtZWQgc3ltX2hpc3RfZmlsdGVyICovCisJCWlmIChhbC0+c3ltICE9IE5VTEwpIHsKKwkJCXJiX2VyYXNlKCZhbC0+c3ltLT5yYl9ub2RlLAorCQkJCSAmYWwtPm1hcC0+ZHNvLT5zeW1ib2xzW2FsLT5tYXAtPnR5cGVdKTsKKwkJCXN5bWJvbF9fZGVsZXRlKGFsLT5zeW0pOworCQl9CisJCXJldHVybiAwOworCX0KKworCWhlID0gX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlbGYsIGFsLCBOVUxMLCBjb3VudCwgJmhpdCk7CiAJaWYgKGhlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpc3RfaGl0KGhlLCBhbC0+YWRkcik7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gYW5ub3RhdGVfX2hpc3RfaGl0KGhlLCBhbC0+YWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgeworCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCSAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIWFsLmZpbHRlcmVkICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCAxKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgotCQkJCSJza2lwcGluZyBldmVudFxuIik7CisJCXByX3dhcm5pbmcoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgorCQkJICAgInNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgbGVuKQorc3RydWN0IG9iamR1bXBfbGluZSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXM2NAkJIG9mZnNldDsKKwljaGFyCQkgKmxpbmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXNlbGYtPmxpbmUgPSBsaW5lOworCX0KKworCXJldHVybiBzZWxmOworfQorCitzdGF0aWMgdm9pZCBvYmpkdW1wX2xpbmVfX2ZyZWUoc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZikKK3sKKwlmcmVlKHNlbGYtPmxpbmUpOworCWZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIG9iamR1bXBfX2FkZF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBvYmpkdW1wX2xpbmUgKmxpbmUpCit7CisJbGlzdF9hZGRfdGFpbCgmbGluZS0+bm9kZSwgaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX19nZXRfbmV4dF9pcF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICAgICBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MpCit7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsIGhlYWQsIG5vZGUpCisJCWlmIChwb3MtPm9mZnNldCA+PSAwKQorCQkJcmV0dXJuIHBvczsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CisJc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lOwogCWNoYXIgKmxpbmUgPSBOVUxMLCAqdG1wLCAqdG1wMjsKLQlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOwotCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc2l6ZV90IGxpbmVfbGVuOwotCXU2NCBzdGFydDsKLQlzNjQgbGluZV9pcDsKLQlpbnQgcmV0OworCXM2NCBsaW5lX2lwLCBvZmZzZXQgPSAtMTsKIAljaGFyICpjOwogCiAJaWYgKGdldGxpbmUoJmxpbmUsICZsaW5lX2xlbiwgZmlsZSkgPCAwKQogCQlyZXR1cm4gLTE7CisKIAlpZiAoIWxpbmUpCiAJCXJldHVybiAtMTsKIApAQCAtMTczLDggKzIwNSw2IEBACiAJCSpjID0gMDsKIAogCWxpbmVfaXAgPSAtMTsKLQlvZmZzZXQgPSAwOwotCXJldCA9IC0yOwogCiAJLyoKIAkgKiBTdHJpcCBsZWFkaW5nIHNwYWNlczoKQEAgLTE5NSw5ICsyMjUsMzAgQEAKIAkJCWxpbmVfaXAgPSAtMTsKIAl9CiAKLQlzdGFydCA9IGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIHN5bS0+c3RhcnQpOwotCiAJaWYgKGxpbmVfaXAgIT0gLTEpIHsKKwkJdTY0IHN0YXJ0ID0gbWFwX19yaXBfMm9iamR1bXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CisJCW9mZnNldCA9IGxpbmVfaXAgLSBzdGFydDsKKwl9CisKKwlvYmpkdW1wX2xpbmUgPSBvYmpkdW1wX2xpbmVfX25ldyhvZmZzZXQsIGxpbmUpOworCWlmIChvYmpkdW1wX2xpbmUgPT0gTlVMTCkgeworCQlmcmVlKGxpbmUpOworCQlyZXR1cm4gLTE7CisJfQorCW9iamR1bXBfX2FkZF9saW5lKGhlYWQsIG9iamR1bXBfbGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvYmpkdW1wX2xpbmVfX3ByaW50KHN0cnVjdCBvYmpkdW1wX2xpbmUgKnNlbGYsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBsZW4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOworCisJaWYgKHNlbGYtPm9mZnNldCAhPSAtMSkgewogCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IGhpdHMgPSAwOwogCQlkb3VibGUgcGVyY2VudCA9IDAuMDsKQEAgLTIwNSwxNSArMjU2LDIyIEBACiAJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOwogCQlzdHJ1Y3Qgc3ltX2V4dCAqc3ltX2V4dCA9IHByaXYtPmV4dDsKIAkJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKKwkJczY0IG9mZnNldCA9IHNlbGYtPm9mZnNldDsKKwkJc3RydWN0IG9iamR1bXBfbGluZSAqbmV4dCA9IG9iamR1bXBfX2dldF9uZXh0X2lwX2xpbmUoaGVhZCwgc2VsZik7CiAKLQkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OwotCQlpZiAob2Zmc2V0IDwgbGVuKQotCQkJaGl0cyA9IGgtPmlwW29mZnNldF07CisJCXdoaWxlIChvZmZzZXQgPCAoczY0KWxlbiAmJgorCQkgICAgICAgKG5leHQgPT0gTlVMTCB8fCBvZmZzZXQgPCBuZXh0LT5vZmZzZXQpKSB7CisJCQlpZiAoc3ltX2V4dCkgeworCQkJCWlmIChwYXRoID09IE5VTEwpCisJCQkJCXBhdGggPSBzeW1fZXh0W29mZnNldF0ucGF0aDsKKwkJCQlwZXJjZW50ICs9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OworCQkJfSBlbHNlCisJCQkJaGl0cyArPSBoLT5pcFtvZmZzZXRdOwogCi0JCWlmIChvZmZzZXQgPCBsZW4gJiYgc3ltX2V4dCkgewotCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOwotCQkJcGVyY2VudCA9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OwotCQl9IGVsc2UgaWYgKGgtPnN1bSkKKwkJCSsrb2Zmc2V0OworCQl9CisKKwkJaWYgKHN5bV9leHQgPT0gTlVMTCAmJiBoLT5zdW0pCiAJCQlwZXJjZW50ID0gMTAwLjAgKiBoaXRzIC8gaC0+c3VtOwogCiAJCWNvbG9yID0gZ2V0X3BlcmNlbnRfY29sb3IocGVyY2VudCk7CkBAIC0yMzQsMTIgKzI5MiwxMiBAQAogCiAJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAlNy4yZiIsIHBlcmNlbnQpOwogCQlwcmludGYoIiA6CSIpOwotCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIGxpbmUpOworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIHNlbGYtPmxpbmUpOwogCX0gZWxzZSB7Ci0JCWlmICghKmxpbmUpCisJCWlmICghKnNlbGYtPmxpbmUpCiAJCQlwcmludGYoIiAgICAgICAgIDpcbiIpOwogCQllbHNlCi0JCQlwcmludGYoIiAgICAgICAgIDoJJXNcbiIsIGxpbmUpOworCQkJcHJpbnRmKCIgICAgICAgICA6CSVzXG4iLCBzZWxmLT5saW5lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM2NSw2ICs0MjMsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhpc3RfZW50cnlfX3ByaW50X2hpdHMoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc2VsZi0+c3ltOworCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOworCXN0cnVjdCBzeW1faGlzdCAqaCA9IHByaXYtPmhpc3Q7CisJdTY0IGxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydCwgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47ICsrb2Zmc2V0KQorCQlpZiAoaC0+aXBbb2Zmc2V0XSAhPSAwKQorCQkJcHJpbnRmKCIlKkx4OiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAorCQkJICAgICAgIHN5bS0+c3RhcnQgKyBvZmZzZXQsIGgtPmlwW29mZnNldF0pOworCXByaW50ZigiJSpzOiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLCAiaC0+c3VtIiwgaC0+c3VtKTsKK30KKwogc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgbWFwICptYXAgPSBoZS0+bWFwOwpAQCAtMzc0LDE1ICs0NDYsMTUgQEAKIAl1NjQgbGVuOwogCWNoYXIgY29tbWFuZFtQQVRIX01BWCoyXTsKIAlGSUxFICpmaWxlOworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MsICpuOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSVMeCwgZW5kPSVMeFxuIiwKLQkJCV9fZnVuY19fLCBmaWxlbmFtZSwgc3ltLT5uYW1lLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CisJcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lI0x4LCBlbmQ9JSNMeFxuIiwgX19mdW5jX18sCisJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCisJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIAogCWlmIChmdWxsX3BhdGhzKQogCQlkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CkBAIC00MDUsNyArNDc3LDggQEAKIAkJICAgICAgIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNwcmludGYoY29tbWFuZCwgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4IC0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAlc3xncmVwIC12ICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+c3RhcnQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwKIAkJZmlsZW5hbWUsIGZpbGVuYW1lKTsKIAogCWlmICh2ZXJib3NlID49IDMpCkBAIC00MTYsMTEgKzQ4OSwyMSBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJaWYgKHBhcnNlX2xpbmUoZmlsZSwgaGUsIGxlbikgPCAwKQorCQlpZiAocGFyc2VfbGluZShmaWxlLCBoZSwgJmhlYWQpIDwgMCkKIAkJCWJyZWFrOwogCX0KIAogCXBjbG9zZShmaWxlKTsKKworCWlmICh2ZXJib3NlKQorCQloaXN0X2VudHJ5X19wcmludF9oaXRzKGhlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZoZWFkLCBub2RlKSB7CisJCW9iamR1bXBfbGluZV9fcHJpbnQocG9zLCAmaGVhZCwgaGUsIGxlbik7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlvYmpkdW1wX2xpbmVfX2ZyZWUocG9zKTsKKwl9CisKIAlpZiAocHJpbnRfbGluZSkKIAkJZnJlZV9zb3VyY2VfbGluZShoZSwgbGVuKTsKIH0KQEAgLTQ1MSwxMCArNTM0LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfYW5ub3RhdGUodm9pZCkKQEAgLTU0Miw5ICs2MjUsOCBAQAogCXNldHVwX3BhZ2VyKCk7CiAKIAlpZiAoZmllbGRfc2VwICYmICpmaWVsZF9zZXAgPT0gJy4nKSB7Ci0JCWZwdXRzKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iLAotCQkJCXN0ZGVycik7Ci0JCWV4aXQoMTI5KTsKKwkJcHJfZXJyKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBfX2NtZF9hbm5vdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhMDVmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBidWlsdGluLWJ1aWxkaWQtY2FjaGUuYworICoKKyAqIEJ1aWx0aW4gYnVpbGRpZC1jYWNoZSBjb21tYW5kOiBNYW5hZ2VzIGJ1aWxkLWlkIGNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3N0cmxpc3QuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqYWRkX25hbWVfbGlzdF9zdHIsICpyZW1vdmVfbmFtZV9saXN0X3N0cjsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsZGlkX2NhY2hlX3VzYWdlW10gPSB7CisJInBlcmYgYnVpbGRpZC1jYWNoZSBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gYnVpbGRpZF9jYWNoZV9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnYScsICJhZGQiLCAmYWRkX25hbWVfbGlzdF9zdHIsCisJCSAgICJmaWxlIGxpc3QiLCAiZmlsZShzKSB0byBhZGQiKSwKKwlPUFRfU1RSSU5HKCdyJywgInJlbW92ZSIsICZyZW1vdmVfbmFtZV9saXN0X3N0ciwgImZpbGUgbGlzdCIsCisJCSAgICAiZmlsZShzKSB0byByZW1vdmUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsICJiZSBtb3JlIHZlcmJvc2UiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhzYnVpbGRfaWQsIGRlYnVnZGlyLCBmaWxlbmFtZSwgZmFsc2UpOworCWlmICh2ZXJib3NlKQorCQlwcl9pbmZvKCJBZGRpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUgX191c2VkLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpciBfX3VzZWQpCit7CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhzYnVpbGRfaWQsIGRlYnVnZGlyKTsKKwlpZiAodmVyYm9zZSkKKwkJcHJfaW5mbygiUmVtb3ZpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fY21kX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RybGlzdCAqbGlzdDsKKwlzdHJ1Y3Qgc3RyX25vZGUgKnBvczsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAoYWRkX25hbWVfbGlzdF9zdHIpIHsKKwkJbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCBhZGRfbmFtZV9saXN0X3N0cik7CisJCWlmIChsaXN0KSB7CisJCQlzdHJsaXN0X19mb3JfZWFjaChwb3MsIGxpc3QpCisJCQkJaWYgKGJ1aWxkX2lkX2NhY2hlX19hZGRfZmlsZShwb3MtPnMsIGRlYnVnZGlyKSkgeworCQkJCQlpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisJCQkJCQlwcl9kZWJ1ZygiJXMgYWxyZWFkeSBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCBhZGQgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJaWYgKHJlbW92ZV9uYW1lX2xpc3Rfc3RyKSB7CisJCWxpc3QgPSBzdHJsaXN0X19uZXcodHJ1ZSwgcmVtb3ZlX25hbWVfbGlzdF9zdHIpOworCQlpZiAobGlzdCkgeworCQkJc3RybGlzdF9fZm9yX2VhY2gocG9zLCBsaXN0KQorCQkJCWlmIChidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUocG9zLT5zLCBkZWJ1Z2RpcikpIHsKKwkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJCQkJcHJfZGVidWcoIiVzIHdhc24ndCBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCByZW1vdmUgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbGRpZF9jYWNoZV9vcHRpb25zLAorCQkJICAgICBidWlsZGlkX2NhY2hlX3VzYWdlLCAwKTsKKworCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKKworCXNldHVwX3BhZ2VyKCk7CisJcmV0dXJuIF9fY21kX2J1aWxkaWRfY2FjaGUoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCAxZTk5YWM4Li5kMDY3NWMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2J1aWxkLWlkLmgiCiAjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKQEAgLTE2LDYgKzE3LDcgQEAKIAogc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIHN0YXRpYyBpbnQgZm9yY2U7CitzdGF0aWMgYm9vbCB3aXRoX2hpdHM7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbGRpZF9saXN0X3VzYWdlW10gPSB7CiAJInBlcmYgYnVpbGRpZC1saXN0IFs8b3B0aW9ucz5dIiwKQEAgLTIzLDYgKzI1LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTignSCcsICJ3aXRoLWhpdHMiLCAmd2l0aF9oaXRzLCAiU2hvdyBvbmx5IERTT3Mgd2l0aCBoaXRzIiksCiAJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsCiAJCSAgICAiaW5wdXQgZmlsZSBuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmZm9yY2UsICJkb24ndCBjb21wbGFpbiwgZG8gaXQiKSwKQEAgLTMxLDI2ICszNCw2IEBACiAJT1BUX0VORCgpCiB9OwogCi1zdGF0aWMgaW50IHBlcmZfZmlsZV9zZWN0aW9uX19wcm9jZXNzX2J1aWxkaWRzKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKLQkJCQkJICAgICAgIGludCBmZWF0LCBpbnQgZmQpCi17Ci0JaWYgKGZlYXQgIT0gSEVBREVSX0JVSUxEX0lEKQotCQlyZXR1cm4gMDsKLQotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7Ci0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBidWlsZGlkcyFcbiIsCi0JCQkgICBzZWxmLT5vZmZzZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhmZCwgc2VsZi0+b2Zmc2V0LCBzZWxmLT5zaXplKSkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVhZCBidWlsZGlkcyFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9saXN0KHZvaWQpCiB7CiAJaW50IGVyciA9IC0xOwpAQCAtNjAsMTAgKzQzLDEwIEBACiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoJnNlc3Npb24tPmhlYWRlciwgc2Vzc2lvbi0+ZmQsCi0JCQkJICAgICAgICAgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMpOwotCWlmIChlcnIgPj0gMCkKLQkJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCk7CisJaWYgKHdpdGhfaGl0cykKKwkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworCisJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCwgd2l0aF9oaXRzKTsKIAogCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCBiZDcxYjhjLi4xOGIzZjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTQyLDggKzQyLDggQEAKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9IHsgLnBlcmlvZCA9IDEsIH07CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKIAlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKQEAgLTUxLDEyICs1MSwxMiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGFsLmZpbHRlcmVkKQorCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JaWYgKGFsLnN5bSAmJiBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5wZXJpb2QpKSB7CisJaWYgKHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLnBlcmlvZCkpIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NiwxMiArNjYsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50ID0gZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKLQkucHJvY2Vzc19jb21tX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2V4aXRfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCi0JLnByb2Nlc3NfZm9ya19ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19sb3N0X2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19sb3N0LAorCS5zYW1wbGUJPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5leGl0CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmxvc3QJPSBldmVudF9fcHJvY2Vzc19sb3N0LAogfTsKIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19pbnNlcnRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpyb290LApAQCAtODIsMjkgKzgyLDE5IEBACiAJc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7CiAKIAl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlpbnQgY21wOwogCQlwYXJlbnQgPSAqcDsKIAkJaXRlciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKLQkJaWYgKGNtcCA+IDApCisJCWlmIChoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wIDwgMCkKKwkJZWxzZQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQljbXAgPSBzdHJjbXAoaGUtPnN5bS0+bmFtZSwgaXRlci0+c3ltLT5uYW1lKTsKLQkJCWlmIChjbXAgPiAwKQotCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJCWVsc2UKLQkJCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQl9CiAJfQogCiAJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfaGlzdF9lbnRyaWVzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3NpdGlvbiA9IDE7CiAJc3RydWN0IHJiX3Jvb3QgdG1wID0gUkJfUk9PVDsKQEAgLTEyMiwyOSArMTEyLDI4IEBACiAJc2VsZi0+aGlzdHMgPSB0bXA7CiB9CiAKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fc2V0X2hpc3RfZW50cmllc19wb3NpdGlvbnMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2VsZiwgc2VsZi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlwZXJmX3Nlc3Npb25fX3Jlc29ydF9oaXN0X2VudHJpZXMoc2VsZik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSAqCi1wZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQorcGVyZl9zZXNzaW9uX19maW5kX2hpc3RfZW50cnkoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCSAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHNlbGYtPmhpc3RzLnJiX25vZGU7CiAKIAl3aGlsZSAobikgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlciA9IHJiX2VudHJ5KG4sIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJaW50IGNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKKwkJaW50NjRfdCBjbXAgPSBoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpOwogCi0JCWlmIChjbXAgPiAwKQorCQlpZiAoY21wIDwgMCkKIAkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPCAwKQorCQllbHNlIGlmIChjbXAgPiAwKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCWNtcCA9IHN0cmNtcChoZS0+c3ltLT5uYW1lLCBpdGVyLT5zeW0tPm5hbWUpOwotCQkJaWYgKGNtcCA+IDApCi0JCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCQllbHNlIGlmIChjbXAgPCAwKQotCQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gaXRlcjsKLQkJfQorCQllbHNlIAorCQkJcmV0dXJuIGl0ZXI7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0xNTUsMTEgKzE0NCw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm5kOwogCi0JcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShvbGRfc2Vzc2lvbik7Ci0KIAlmb3IgKG5kID0gcmJfZmlyc3QoJm5ld19zZXNzaW9uLT5oaXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKG9sZF9zZXNzaW9uLCBwb3MpOworCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeShvbGRfc2Vzc2lvbiwgcG9zKTsKIAl9CiB9CiAKQEAgLTE3Nyw5ICsxNjQsMTIgQEAKIAkJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uW2ldLCAmZXZlbnRfb3BzKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKLQkJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25baV0sIHNlc3Npb25baV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CiAJfQogCisJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25bMV0sIHNlc3Npb25bMV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CisJaWYgKHNob3dfZGlzcGxhY2VtZW50KQorCQlwZXJmX3Nlc3Npb25fX3NldF9oaXN0X2VudHJpZXNfcG9zaXRpb25zKHNlc3Npb25bMF0pOworCiAJcGVyZl9zZXNzaW9uX19tYXRjaF9oaXN0cyhzZXNzaW9uWzBdLCBzZXNzaW9uWzFdKTsKIAlwZXJmX3Nlc3Npb25fX2ZwcmludGZfaGlzdHMoc2Vzc2lvblsxXSwgc2Vzc2lvblswXSwKIAkJCQkgICAgc2hvd19kaXNwbGFjZW1lbnQsIHN0ZG91dCk7CkBAIC0yMDQsNyArMTk0LDcgQEAKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAogCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCiAJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCi0JT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZldmVudF9vcHMuZnVsbF9wYXRocywKKwlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCiAJCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9TVFJJTkcoJ2QnLCAiZHNvcyIsICZzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc29bLGRzby4uLl0iLAogCQkgICAib25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MiKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCmluZGV4IDlmODEwYjEuLjIxNWI1ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwpAQCAtMjg2LDggKzI4Niw3IEBACiAKIAlwdXRzKCIgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToiKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fY21kcyk7IGkrKykgewotCQlwcmludGYoIiAgICVzICAgIiwgY29tbW9uX2NtZHNbaV0ubmFtZSk7Ci0JCW1wdXRfY2hhcignICcsIGxvbmdlc3QgLSBzdHJsZW4oY29tbW9uX2NtZHNbaV0ubmFtZSkpOworCQlwcmludGYoIiAgICUtKnMgICAiLCBsb25nZXN0LCBjb21tb25fY21kc1tpXS5uYW1lKTsKIAkJcHV0cyhjb21tb25fY21kc1tpXS5oZWxwKTsKIAl9CiB9CkBAIC0zMTQsOCArMzEzLDYgQEAKIAkJcmV0dXJuICJwZXJmIjsKIAllbHNlIGlmICghcHJlZml4Y21wKHBlcmZfY21kLCAicGVyZiIpKQogCQlyZXR1cm4gcGVyZl9jbWQ7Ci0JZWxzZSBpZiAoaXNfcGVyZl9jb21tYW5kKHBlcmZfY21kKSkKLQkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogCWVsc2UKIAkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggOTNjNjdiZi4uOTI0YTk1MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC05MiwyMyArOTIsMTggQEAKIAlpZiAoIWRpcjEpCiAJCXJldHVybjsKIAotCXdoaWxlICh0cnVlKSB7Ci0JCWRlbnQxID0gcmVhZGRpcihkaXIxKTsKLQkJaWYgKCFkZW50MSkKLQkJCWJyZWFrOwotCi0JCWlmIChzc2NhbmYoZGVudDEtPmRfbmFtZSwgIm5vZGUldSIsICZtZW0pIDwgMSkKKwl3aGlsZSAoKGRlbnQxID0gcmVhZGRpcihkaXIxKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudDEtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHNzY2FuZihkZW50MS0+ZF9uYW1lLCAibm9kZSV1IiwgJm1lbSkgPCAxKQogCQkJY29udGludWU7CiAKIAkJc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgUEFUSF9TWVNfTk9ERSwgZGVudDEtPmRfbmFtZSk7CiAJCWRpcjIgPSBvcGVuZGlyKGJ1Zik7CiAJCWlmICghZGlyMikKIAkJCWNvbnRpbnVlOwotCQl3aGlsZSAodHJ1ZSkgewotCQkJZGVudDIgPSByZWFkZGlyKGRpcjIpOwotCQkJaWYgKCFkZW50MikKLQkJCQlicmVhazsKLQkJCWlmIChzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQorCQl3aGlsZSAoKGRlbnQyID0gcmVhZGRpcihkaXIyKSkgIT0gTlVMTCkgeworCQkJaWYgKGRlbnQyLT5kX3R5cGUgIT0gRFRfTE5LIHx8CisJCQkgICAgc3NjYW5mKGRlbnQyLT5kX25hbWUsICJjcHUldSIsICZjcHUpIDwgMSkKIAkJCQljb250aW51ZTsKIAkJCWNwdW5vZGVfbWFwW2NwdV0gPSBtZW07CiAJCX0KQEAgLTMyMSwxMSArMzE2LDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CkBAIC0zNDIsMjIgKzMzNCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCi0JCQkid2l0aG91dCAtUj8iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuc2FtcGxlCT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAogfTsKIAogc3RhdGljIGRvdWJsZSBmcmFnbWVudGF0aW9uKHVuc2lnbmVkIGxvbmcgbl9yZXEsIHVuc2lnbmVkIGxvbmcgbl9hbGxvYykKQEAgLTM5MCw3ICszNjksNyBAQAogCQlpZiAoaXNfY2FsbGVyKSB7CiAJCQlhZGRyID0gZGF0YS0+Y2FsbF9zaXRlOwogCQkJaWYgKCFyYXdfaXApCi0JCQkJc3ltID0gbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbigmc2Vzc2lvbi0+a21hcHMsIHNlc3Npb24sIGFkZHIsIE5VTEwpOworCQkJCXN5bSA9IG1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oJnNlc3Npb24tPmttYXBzLCBhZGRyLCBOVUxMKTsKIAkJfSBlbHNlCiAJCQlhZGRyID0gZGF0YS0+cHRyOwogCkBAIC01MDQsMTEgKzQ4MywxNCBAQAogCiBzdGF0aWMgaW50IF9fY21kX2ttZW0odm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAia21lbSByZWNvcmQiKSkKKwkJZ290byBvdXRfZGVsZXRlOworCiAJc2V0dXBfcGFnZXIoKTsKIAllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChlcnIgIT0gMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWFiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCkBAIC0wLDAgKzEsNjc4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBlcmYuaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKworI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKworI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCisvKiBiYXNlZCBvbiBrZXJuZWwvbG9ja2RlcC5jICovCisjZGVmaW5lIExPQ0tIQVNIX0JJVFMJCTEyCisjZGVmaW5lIExPQ0tIQVNIX1NJWkUJCSgxVUwgPDwgTE9DS0hBU0hfQklUUykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbG9ja2hhc2hfdGFibGVbTE9DS0hBU0hfU0laRV07CisKKyNkZWZpbmUgX19sb2NraGFzaGZuKGtleSkJaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKWtleSwgTE9DS0hBU0hfQklUUykKKyNkZWZpbmUgbG9ja2hhc2hlbnRyeShrZXkpCShsb2NraGFzaF90YWJsZSArIF9fbG9ja2hhc2hmbigoa2V5KSkpCisKKyNkZWZpbmUgTE9DS19TVEFURV9VTkxPQ0tFRAkwCSAgICAgICAvKiBpbml0aWFsIHN0YXRlICovCisjZGVmaW5lIExPQ0tfU1RBVEVfTE9DS0VECTEKKworc3RydWN0IGxvY2tfc3RhdCB7CisJc3RydWN0IGxpc3RfaGVhZAloYXNoX2VudHJ5OworCXN0cnVjdCByYl9ub2RlCQlyYjsJCS8qIHVzZWQgZm9yIHNvcnRpbmcgKi8KKworCS8qCisJICogRklYTUU6IHJhd19maWVsZF92YWx1ZSgpIHJldHVybnMgdW5zaWduZWQgbG9uZyBsb25nLAorCSAqIHNvIGFkZHJlc3Mgb2YgbG9ja2RlcF9tYXAgc2hvdWxkIGJlIGRlYWxlZCBhcyA2NGJpdC4KKwkgKiBJcyB0aGVyZSBtb3JlIGJldHRlciBzb2x1dGlvbj8KKwkgKi8KKwl2b2lkCQkJKmFkZHI7CQkvKiBhZGRyZXNzIG9mIGxvY2tkZXBfbWFwLCB1c2VkIGFzIElEICovCisJY2hhcgkJCSpuYW1lOwkJLyogZm9yIHN0cmNweSgpLCB3ZSBjYW5ub3QgdXNlIGNvbnN0ICovCisKKwlpbnQJCQlzdGF0ZTsKKwl1NjQJCQlwcmV2X2V2ZW50X3RpbWU7IC8qIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBldmVudCAqLworCisJdW5zaWduZWQgaW50CQlucl9hY3F1aXJlZDsKKwl1bnNpZ25lZCBpbnQJCW5yX2FjcXVpcmU7CisJdW5zaWduZWQgaW50CQlucl9jb250ZW5kZWQ7CisJdW5zaWduZWQgaW50CQlucl9yZWxlYXNlOworCisJLyogdGhlc2UgdGltZXMgYXJlIGluIG5hbm8gc2VjLiAqLworCXU2NAkJCXdhaXRfdGltZV90b3RhbDsKKwl1NjQJCQl3YWl0X3RpbWVfbWluOworCXU2NAkJCXdhaXRfdGltZV9tYXg7Cit9OworCisvKiBidWlsZCBzaW1wbGUga2V5IGZ1bmN0aW9uIG9uZSBpcyBiaWdnZXIgdGhhbiB0d28gKi8KKyNkZWZpbmUgU0lOR0xFX0tFWShtZW1iZXIpCQkJCQkJXAorCXN0YXRpYyBpbnQgbG9ja19zdGF0X2tleV8gIyMgbWVtYmVyKHN0cnVjdCBsb2NrX3N0YXQgKm9uZSwJXAorCQkJCQkgc3RydWN0IGxvY2tfc3RhdCAqdHdvKQkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIG9uZS0+bWVtYmVyID4gdHdvLT5tZW1iZXI7CQkJXAorCX0KKworU0lOR0xFX0tFWShucl9hY3F1aXJlZCkKK1NJTkdMRV9LRVkobnJfY29udGVuZGVkKQorU0lOR0xFX0tFWSh3YWl0X3RpbWVfdG90YWwpCitTSU5HTEVfS0VZKHdhaXRfdGltZV9taW4pCitTSU5HTEVfS0VZKHdhaXRfdGltZV9tYXgpCisKK3N0cnVjdCBsb2NrX2tleSB7CisJLyoKKwkgKiBuYW1lOiB0aGUgdmFsdWUgZm9yIHNwZWNpZnkgYnkgdXNlcgorCSAqIHRoaXMgc2hvdWxkIGJlIHNpbXBsZXIgdGhhbiByYXcgbmFtZSBvZiBtZW1iZXIKKwkgKiBlLmcuIG5yX2FjcXVpcmVkIC0+IGFjcXVpcmVkLCB3YWl0X3RpbWVfdG90YWwgLT4gd2FpdF90b3RhbAorCSAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCWludAkJCSgqa2V5KShzdHJ1Y3QgbG9ja19zdGF0Kiwgc3RydWN0IGxvY2tfc3RhdCopOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIJCSpzb3J0X2tleSA9ICJhY3F1aXJlZCI7CisKK3N0YXRpYyBpbnQJCQkoKmNvbXBhcmUpKHN0cnVjdCBsb2NrX3N0YXQgKiwgc3RydWN0IGxvY2tfc3RhdCAqKTsKKworc3RhdGljIHN0cnVjdCByYl9yb290CQlyZXN1bHQ7CS8qIHBsYWNlIHRvIHN0b3JlIHNvcnRlZCBkYXRhICovCisKKyNkZWZpbmUgREVGX0tFWV9MT0NLKG5hbWUsIGZuX3N1ZmZpeCkJXAorCXsgI25hbWUsIGxvY2tfc3RhdF9rZXlfICMjIGZuX3N1ZmZpeCB9CitzdHJ1Y3QgbG9ja19rZXkga2V5c1tdID0geworCURFRl9LRVlfTE9DSyhhY3F1aXJlZCwgbnJfYWNxdWlyZWQpLAorCURFRl9LRVlfTE9DSyhjb250ZW5kZWQsIG5yX2NvbnRlbmRlZCksCisJREVGX0tFWV9MT0NLKHdhaXRfdG90YWwsIHdhaXRfdGltZV90b3RhbCksCisJREVGX0tFWV9MT0NLKHdhaXRfbWluLCB3YWl0X3RpbWVfbWluKSwKKwlERUZfS0VZX0xPQ0sod2FpdF9tYXgsIHdhaXRfdGltZV9tYXgpLAorCisJLyogZXh0cmEgY29tcGFyaXNvbnMgbXVjaCBjb21wbGljYXRlZCBzaG91bGQgYmUgaGVyZSAqLworCisJeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9rZXkodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGtleXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmICghc3RyY21wKGtleXNbaV0ubmFtZSwgc29ydF9rZXkpKSB7CisJCQljb21wYXJlID0ga2V5c1tpXS5rZXk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkaWUoIlVua25vd24gY29tcGFyZSBrZXk6JXNcbiIsIHNvcnRfa2V5KTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3RvX3Jlc3VsdChzdHJ1Y3QgbG9ja19zdGF0ICpzdCwKKwkJCSAgICAgaW50ICgqYmlnZ2VyKShzdHJ1Y3QgbG9ja19zdGF0ICosIHN0cnVjdCBsb2NrX3N0YXQgKikpCit7CisJc3RydWN0IHJiX25vZGUgKipyYiA9ICZyZXN1bHQucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpwOworCisJd2hpbGUgKCpyYikgeworCQlwID0gY29udGFpbmVyX29mKCpyYiwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworCQlwYXJlbnQgPSAqcmI7CisKKwkJaWYgKGJpZ2dlcihzdCwgcCkpCisJCQlyYiA9ICYoKnJiKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcmIgPSAmKCpyYiktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgmc3QtPnJiLCBwYXJlbnQsIHJiKTsKKwlyYl9pbnNlcnRfY29sb3IoJnN0LT5yYiwgJnJlc3VsdCk7Cit9CisKKy8qIHJldHVybnMgbGVmdCBtb3N0IGVsZW1lbnQgb2YgcmVzdWx0LCBhbmQgZXJhc2UgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19zdGF0ICpwb3BfZnJvbV9yZXN1bHQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJlc3VsdC5yYl9ub2RlOworCisJaWYgKCFub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChub2RlLT5yYl9sZWZ0KQorCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKworCXJiX2VyYXNlKG5vZGUsICZyZXN1bHQpOworCXJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfc3RhdCAqbG9ja19zdGF0X2ZpbmRuZXcodm9pZCAqYWRkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGxvY2toYXNoZW50cnkoYWRkcik7CisJc3RydWN0IGxvY2tfc3RhdCAqcmV0LCAqbmV3OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXQsIGVudHJ5LCBoYXNoX2VudHJ5KSB7CisJCWlmIChyZXQtPmFkZHIgPT0gYWRkcikKKwkJCXJldHVybiByZXQ7CisJfQorCisJbmV3ID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgbG9ja19zdGF0KSk7CisJaWYgKCFuZXcpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCisJbmV3LT5hZGRyID0gYWRkcjsKKwluZXctPm5hbWUgPSB6YWxsb2Moc2l6ZW9mKGNoYXIpICogc3RybGVuKG5hbWUpICsgMSk7CisJaWYgKCFuZXctPm5hbWUpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCXN0cmNweShuZXctPm5hbWUsIG5hbWUpOworCisJLyogTE9DS19TVEFURV9VTkxPQ0tFRCA9PSAwIGlzbid0IGd1YXJhbnRlZWQgZm9yZXZlciAqLworCW5ldy0+c3RhdGUgPSBMT0NLX1NUQVRFX1VOTE9DS0VEOworCW5ldy0+d2FpdF90aW1lX21pbiA9IFVMTE9OR19NQVg7CisKKwlsaXN0X2FkZCgmbmV3LT5oYXNoX2VudHJ5LCBlbnRyeSk7CisJcmV0dXJuIG5ldzsKKworYWxsb2NfZmFpbGVkOgorCWRpZSgibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKK30KKworc3RhdGljIGNoYXIJCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworCitzdGF0aWMgaW50CQkJcHJvZmlsZV9jcHUgPSAtMTsKKworc3RydWN0IHJhd19ldmVudF9zYW1wbGUgeworCXUzMgkJCXNpemU7CisJY2hhcgkJCWRhdGFbMF07Cit9OworCitzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciB7CisJdm9pZCAoKmFjcXVpcmVfZXZlbnQpKHN0cnVjdCB0cmFjZV9hY3F1aXJlX2V2ZW50ICosCisJCQkgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgIGludCBjcHUsCisJCQkgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCphY3F1aXJlZF9ldmVudCkoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICosCisJCQkgICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICAgaW50IGNwdSwKKwkJCSAgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqY29udGVuZGVkX2V2ZW50KShzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICosCisJCQkJc3RydWN0IGV2ZW50ICosCisJCQkJaW50IGNwdSwKKwkJCQl1NjQgdGltZXN0YW1wLAorCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqcmVsZWFzZV9ldmVudCkoc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgKiwKKwkJCSAgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICAgaW50IGNwdSwKKwkJCSAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworfTsKKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgKmFjcXVpcmVfZXZlbnQsCisJCQlzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJaW50IGNwdSBfX3VzZWQsCisJCQl1NjQgdGltZXN0YW1wLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZV9ldmVudC0+YWRkciwgYWNxdWlyZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfYWNxdWlyZWRfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICphY3F1aXJlZF9ldmVudCwKKwkJCSBzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJIGludCBjcHUgX191c2VkLAorCQkJIHU2NCB0aW1lc3RhbXAsCisJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZWRfZXZlbnQtPmFkZHIsIGFjcXVpcmVkX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlzdC0+c3RhdGUgPSBMT0NLX1NUQVRFX0xPQ0tFRDsKKwkJc3QtPm5yX2FjcXVpcmVkKys7CisJCWJyZWFrOworCWNhc2UgTE9DS19TVEFURV9MT0NLRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2NvbnRlbmRlZF9ldmVudChzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICpjb250ZW5kZWRfZXZlbnQsCisJCQkgIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQkgIGludCBjcHUgX191c2VkLAorCQkJICB1NjQgdGltZXN0YW1wLAorCQkJICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhjb250ZW5kZWRfZXZlbnQtPmFkZHIsIGNvbnRlbmRlZF9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPm5yX2NvbnRlbmRlZCsrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCWJyZWFrOworCX0KKworCXN0LT5wcmV2X2V2ZW50X3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfbG9ja19yZWxlYXNlX2V2ZW50KHN0cnVjdCB0cmFjZV9yZWxlYXNlX2V2ZW50ICpyZWxlYXNlX2V2ZW50LAorCQkJc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKKwkJCWludCBjcHUgX191c2VkLAorCQkJdTY0IHRpbWVzdGFtcCwKKwkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisJdTY0IGhvbGRfdGltZTsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcocmVsZWFzZV9ldmVudC0+YWRkciwgcmVsZWFzZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPnN0YXRlID0gTE9DS19TVEFURV9VTkxPQ0tFRDsKKwkJaG9sZF90aW1lID0gdGltZXN0YW1wIC0gc3QtPnByZXZfZXZlbnRfdGltZTsKKworCQlpZiAodGltZXN0YW1wIDwgc3QtPnByZXZfZXZlbnRfdGltZSkgeworCQkJLyogdGVycmlibHksIHRoaXMgY2FuIGhhcHBlbi4uLiAqLworCQkJZ290byBlbmQ7CisJCX0KKworCQlpZiAoc3QtPndhaXRfdGltZV9taW4gPiBob2xkX3RpbWUpCisJCQlzdC0+d2FpdF90aW1lX21pbiA9IGhvbGRfdGltZTsKKwkJaWYgKHN0LT53YWl0X3RpbWVfbWF4IDwgaG9sZF90aW1lKQorCQkJc3QtPndhaXRfdGltZV9tYXggPSBob2xkX3RpbWU7CisJCXN0LT53YWl0X3RpbWVfdG90YWwgKz0gaG9sZF90aW1lOworCisJCXN0LT5ucl9yZWxlYXNlKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCitlbmQ6CisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworLyogbG9jayBvcmllbnRlZCBoYW5kbGVycyAqLworLyogVE9ETzogaGFuZGxlcnMgZm9yIENQVSBvcmllbnRlZCwgdGhyZWFkIG9yaWVudGVkICovCitzdGF0aWMgc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciByZXBvcnRfbG9ja19vcHMgID0geworCS5hY3F1aXJlX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQsCisJLmFjcXVpcmVkX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVkX2V2ZW50LAorCS5jb250ZW5kZWRfZXZlbnQJPSByZXBvcnRfbG9ja19jb250ZW5kZWRfZXZlbnQsCisJLnJlbGVhc2VfZXZlbnQJCT0gcmVwb3J0X2xvY2tfcmVsZWFzZV9ldmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyICp0cmFjZV9oYW5kbGVyOworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgYWNxdWlyZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZhY3F1aXJlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlhY3F1aXJlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCgmYWNxdWlyZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgYWNxdWlyZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmYWNxdWlyZWRfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWFjcXVpcmVkX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZWRfZXZlbnQoJmFjcXVpcmVkX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2NvbnRlbmRlZF9ldmVudCBjb250ZW5kZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmY29udGVuZGVkX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwljb250ZW5kZWRfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5jb250ZW5kZWRfZXZlbnQoJmNvbnRlbmRlZF9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX3JlbGVhc2VfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgcmVsZWFzZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZyZWxlYXNlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlyZWxlYXNlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+cmVsZWFzZV9ldmVudCgmcmVsZWFzZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19yYXdfZXZlbnQodm9pZCAqZGF0YSwgaW50IGNwdSwKKwkJICB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwlpbnQgdHlwZTsKKworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfYWNxdWlyZSIpKQorCQlwcm9jZXNzX2xvY2tfYWNxdWlyZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2FjcXVpcmVkIikpCisJCXByb2Nlc3NfbG9ja19hY3F1aXJlZF9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2NvbnRlbmRlZCIpKQorCQlwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfcmVsZWFzZSIpKQorCQlwcm9jZXNzX2xvY2tfcmVsZWFzZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOworCisJYnplcm8oJmRhdGEsIHNpemVvZihzdHJ1Y3Qgc2FtcGxlX2RhdGEpKTsKKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOworCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBkYXRhLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCWlmIChwcm9maWxlX2NwdSAhPSAtMSAmJiBwcm9maWxlX2NwdSAhPSAoaW50KSBkYXRhLmNwdSkKKwkJcmV0dXJuIDA7CisKKwlwcm9jZXNzX3Jhd19ldmVudChkYXRhLnJhd19kYXRhLCBkYXRhLmNwdSwgZGF0YS50aW1lLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IHZhcmlvdXMgd2F5IHRvIHByaW50LCBjb2xvcmluZywgbmFubyBvciBtaWxsaSBzZWMgKi8KK3N0YXRpYyB2b2lkIHByaW50X3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCWNoYXIgY3V0X25hbWVbMjBdOworCisJcHJpbnRmKCIlMThzICIsICJJRCIpOworCXByaW50ZigiJTIwcyAiLCAiTmFtZSIpOworCXByaW50ZigiJTEwcyAiLCAiYWNxdWlyZWQiKTsKKwlwcmludGYoIiUxMHMgIiwgImNvbnRlbmRlZCIpOworCisJcHJpbnRmKCIlMTVzICIsICJ0b3RhbCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1heCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1pbiB3YWl0IChucykiKTsKKworCXByaW50ZigiXG5cbiIpOworCisJd2hpbGUgKChzdCA9IHBvcF9mcm9tX3Jlc3VsdCgpKSkgeworCQliemVybyhjdXRfbmFtZSwgMjApOworCisJCXByaW50ZigiJXAgIiwgc3QtPmFkZHIpOworCisJCWlmIChzdHJsZW4oc3QtPm5hbWUpIDwgMTYpIHsKKwkJCS8qIG91dHB1dCByYXcgbmFtZSAqLworCQkJcHJpbnRmKCIlMjBzICIsIHN0LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXN0cm5jcHkoY3V0X25hbWUsIHN0LT5uYW1lLCAxNik7CisJCQljdXRfbmFtZVsxNl0gPSAnLic7CisJCQljdXRfbmFtZVsxN10gPSAnLic7CisJCQljdXRfbmFtZVsxOF0gPSAnLic7CisJCQljdXRfbmFtZVsxOV0gPSAnXDAnOworCQkJLyogY3V0IG9mZiBuYW1lIGZvciBzYXZpbmcgb3V0cHV0IHN0eWxlICovCisJCQlwcmludGYoIiUyMHMgIiwgY3V0X25hbWUpOworCQl9CisKKwkJcHJpbnRmKCIlMTB1ICIsIHN0LT5ucl9hY3F1aXJlZCk7CisJCXByaW50ZigiJTEwdSAiLCBzdC0+bnJfY29udGVuZGVkKTsKKworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKKwkJcHJpbnRmKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9tYXgpOworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KKwkJICAgICAgIDAgOiBzdC0+d2FpdF90aW1lX21pbik7CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9DS0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3QsICZsb2NraGFzaF90YWJsZVtpXSwgaGFzaF9lbnRyeSkgeworCQkJcHJpbnRmKCIlcDogJXNcbiIsIHN0LT5hZGRyLCBzdC0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZW9wcyA9IHsKKwkuc2FtcGxlCQkJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQkJCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOworCitzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCit7CisJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoIXNlc3Npb24pCisJCWRpZSgiSW5pdGlhbGl6aW5nIHBlcmYgc2Vzc2lvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmVvcHMpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3Jlc3VsdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0LCAmbG9ja2hhc2hfdGFibGVbaV0sIGhhc2hfZW50cnkpIHsKKwkJCWluc2VydF90b19yZXN1bHQoc3QsIGNvbXBhcmUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2NtZF9yZXBvcnQodm9pZCkKK3sKKwlzZXR1cF9wYWdlcigpOworCXNlbGVjdF9rZXkoKTsKKwlyZWFkX2V2ZW50cygpOworCXNvcnRfcmVzdWx0KCk7CisJcHJpbnRfcmVzdWx0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwb3J0X3VzYWdlW10gPSB7CisJInBlcmYgbG9jayByZXBvcnQgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlcG9ydF9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnaycsICJrZXkiLCAmc29ydF9rZXksICJhY3F1aXJlZCIsCisJCSAgICAia2V5IGZvciBzb3J0aW5nIiksCisJLyogVE9ETzogdHlwZSAqLworCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2NrX3VzYWdlW10gPSB7CisJInBlcmYgbG9jayBbPG9wdGlvbnM+XSB7cmVjb3JkfHRyYWNlfHJlcG9ydH0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvY2tfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLCAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLCAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItbSIsICIxMDI0IiwKKwkiLWMiLCAiMSIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlOnIiLAorCSItZSIsICJsb2NrOmxvY2tfYWNxdWlyZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19jb250ZW5kZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19yZWxlYXNlOnIiLAorfTsKKworc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKKwljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisKKwlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CisJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOworCisJZm9yIChqID0gMTsgaiA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaisrLCBpKyspCisJCXJlY19hcmd2W2ldID0gYXJndltqXTsKKworCUJVR19PTihpICE9IHJlY19hcmdjKTsKKworCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKK30KKworaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN5bWJvbF9faW5pdCgpOworCWZvciAoaSA9IDA7IGkgPCBMT0NLSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKGxvY2toYXNoX3RhYmxlICsgaSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBsb2NrX29wdGlvbnMsIGxvY2tfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CisKKwlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJfSBlbHNlIGlmICghc3RybmNtcChhcmd2WzBdLCAicmVwb3J0IiwgNikpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBvcnRfbG9ja19vcHM7CisJCWlmIChhcmdjKSB7CisJCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LAorCQkJCQkgICAgIHJlcG9ydF9vcHRpb25zLCByZXBvcnRfdXNhZ2UsIDApOworCQkJaWYgKGFyZ2MpCisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcG9ydF91c2FnZSwgcmVwb3J0X29wdGlvbnMpOworCQl9CisJCV9fY21kX3JlcG9ydCgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkgeworCQkvKiBBbGlhc2VkIHRvICdwZXJmIHRyYWNlJyAqLworCQlyZXR1cm4gY21kX3RyYWNlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJtYXAiKSkgeworCQkvKiByZWN5Y2xpbmcgcmVwb3J0X2xvY2tfb3BzICovCisJCXRyYWNlX2hhbmRsZXIgPSAmcmVwb3J0X2xvY2tfb3BzOworCQlzZXR1cF9wYWdlcigpOworCQlyZWFkX2V2ZW50cygpOworCQlkdW1wX21hcCgpOworCX0gZWxzZSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhsb2NrX3VzYWdlLCBsb2NrX29wdGlvbnMpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwppbmRleCBjMWU2Nzc0Li5hZDQ3YmQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgInV0aWwvZGVidWdmcy5oIgogI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKLSNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgkvKiBGb3IgZGVidWdmc19wYXRoICovCiAjaW5jbHVkZSAidXRpbC9wcm9iZS1maW5kZXIuaCIKQEAgLTU1LDExICs1NCwxMyBAQAogCWJvb2wgbmVlZF9kd2FyZjsKIAlib29sIGxpc3RfZXZlbnRzOwogCWJvb2wgZm9yY2VfYWRkOworCWJvb2wgc2hvd19saW5lczsKIAlpbnQgbnJfcHJvYmU7CiAJc3RydWN0IHByb2JlX3BvaW50IHByb2Jlc1tNQVhfUFJPQkVTXTsKIAlzdHJ1Y3Qgc3RybGlzdCAqZGVsbGlzdDsKLQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwc2Vzc2lvbjsKLQlzdHJ1Y3QgbWFwICprbWFwOworCXN0cnVjdCBtYXBfZ3JvdXBzIGttYXBfZ3JvdXBzOworCXN0cnVjdCBtYXAgKmttYXBzW01BUF9fTlJfVFlQRVNdOworCXN0cnVjdCBsaW5lX3JhbmdlIGxpbmVfcmFuZ2U7CiB9IHNlc3Npb247CiAKIApAQCAtMTIwLDggKzEyMSw4IEBACiBzdGF0aWMgdm9pZCBldmFsdWF0ZV9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzeW0gPSBtYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc2Vzc2lvbi5rbWFwLCBwcC0+ZnVuY3Rpb24sCi0JCQkJICAgICAgIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpOworCXN5bSA9IG1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzZXNzaW9uLmttYXBzW01BUF9fRlVOQ1RJT05dLAorCQkJCSAgICAgICBwcC0+ZnVuY3Rpb24sIE5VTEwpOwogCWlmICghc3ltKQogCQlkaWUoIktlcm5lbCBzeW1ib2wgXCclc1wnIG5vdCBmb3VuZCAtIHByb2JlIG5vdCBhZGRlZC4iLAogCQkgICAgcHAtPmZ1bmN0aW9uKTsKQEAgLTEzMCwxMiArMTMxLDIzIEBACiAjaWZuZGVmIE5PX0xJQkRXQVJGCiBzdGF0aWMgaW50IG9wZW5fdm1saW51eCh2b2lkKQogewotCWlmIChtYXBfX2xvYWQoc2Vzc2lvbi5rbWFwLCBzZXNzaW9uLnBzZXNzaW9uLCBOVUxMKSA8IDApIHsKKwlpZiAobWFwX19sb2FkKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sIE5VTEwpIDwgMCkgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQga2VybmVsIG1hcC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLCBzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lKTsKLQlyZXR1cm4gb3BlbihzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7CisJcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLAorCQkgc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUpOworCXJldHVybiBvcGVuKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0tPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7Cit9CisKK3N0YXRpYyBpbnQgb3B0X3Nob3dfbGluZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCSAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmIChzdHIpCisJCXBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhzdHIsICZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLmxpbmVfcmFuZ2UubGluZV9saXN0KTsKKwlzZXNzaW9uLnNob3dfbGluZXMgPSB0cnVlOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTE0NCw2ICsxNTYsNyBAQAogCSJwZXJmIHByb2JlIFs8b3B0aW9ucz5dIC0tYWRkICdQUk9CRURFRicgWy0tYWRkICdQUk9CRURFRicgLi4uXSIsCiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gLS1kZWwgJ1tHUk9VUDpdRVZFTlQnIC4uLiIsCiAJInBlcmYgcHJvYmUgLS1saXN0IiwKKwkicGVyZiBwcm9iZSAtLWxpbmUgJ0xJTkVERVNDJyIsCiAJTlVMTAogfTsKIApAQCAtMTgyLDkgKzE5NSwzMSBAQAogCQlvcHRfYWRkX3Byb2JlX2V2ZW50KSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZzZXNzaW9uLmZvcmNlX2FkZCwgImZvcmNpYmx5IGFkZCBldmVudHMiCiAJCSAgICAiIHdpdGggZXhpc3RpbmcgbmFtZSIpLAorI2lmbmRlZiBOT19MSUJEV0FSRgorCU9QVF9DQUxMQkFDSygnTCcsICJsaW5lIiwgTlVMTCwKKwkJICAgICAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIiwKKwkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCisjZW5kaWYKIAlPUFRfRU5EKCkKIH07CiAKKy8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KK3N0YXRpYyB2b2lkIGluaXRfdm1saW51eCh2b2lkKQoreworCXN5bWJvbF9jb25mLnNvcnRfYnlfbmFtZSA9IHRydWU7CisJaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQorCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKwllbHNlCisJCXByX2RlYnVnKCJVc2Ugdm1saW51eDogJXNcbiIsIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOworCisJbWFwX2dyb3Vwc19faW5pdCgmc2Vzc2lvbi5rbWFwX2dyb3Vwcyk7CisJaWYgKG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2Vzc2lvbi5rbWFwX2dyb3VwcywKKwkJCQkJICAgc2Vzc2lvbi5rbWFwcykgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjcmVhdGUga2VybmVsIG1hcHMuIik7Cit9CisKIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCWludCBpLCByZXQ7CkBAIC0yMDMsNyArMjM4LDggQEAKIAkJcGFyc2VfcHJvYmVfZXZlbnRfYXJndihhcmdjLCBhcmd2KTsKIAl9CiAKLQlpZiAoKCFzZXNzaW9uLm5yX3Byb2JlICYmICFzZXNzaW9uLmRlbGxpc3QgJiYgIXNlc3Npb24ubGlzdF9ldmVudHMpKQorCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cyAmJgorCSAgICAgIXNlc3Npb24uc2hvd19saW5lcykpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoZGVidWdmc192YWxpZF9tb3VudHBvaW50KGRlYnVnZnNfcGF0aCkgPCAwKQpAQCAtMjE1LDEwICsyNTEsMzQgQEAKIAkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CiAJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwogCQl9CisJCWlmIChzZXNzaW9uLnNob3dfbGluZXMpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWxpbmUuXG4iKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CisJCX0KIAkJc2hvd19wZXJmX3Byb2JlX2V2ZW50cygpOwogCQlyZXR1cm4gMDsKIAl9CiAKKyNpZm5kZWYgTk9fTElCRFdBUkYKKwlpZiAoc2Vzc2lvbi5zaG93X2xpbmVzKSB7CisJCWlmIChzZXNzaW9uLm5yX3Byb2JlICE9IDAgfHwgc2Vzc2lvbi5kZWxsaXN0KSB7CisJCQlwcl93YXJuaW5nKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saW5lIHdpdGgiCisJCQkJICAgIiAtLWFkZC8tLWRlbC5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCQlpbml0X3ZtbGludXgoKTsKKwkJZmQgPSBvcGVuX3ZtbGludXgoKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZSgiQ291bGQgbm90IG9wZW4gZGVidWdpbmZvIGZpbGUuIik7CisJCXJldCA9IGZpbmRfbGluZV9yYW5nZShmZCwgJnNlc3Npb24ubGluZV9yYW5nZSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWRpZSgiU291cmNlIGxpbmUgaXMgbm90IGZvdW5kLlxuIik7CisJCWNsb3NlKGZkKTsKKwkJc2hvd19saW5lX3JhbmdlKCZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCWlmIChzZXNzaW9uLmRlbGxpc3QpIHsKIAkJZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc2Vzc2lvbi5kZWxsaXN0KTsKIAkJc3RybGlzdF9fZGVsZXRlKHNlc3Npb24uZGVsbGlzdCk7CkBAIC0yMjYsMjAgKzI4Niw4IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHN5bWJvbCBtYXBzIGZvciB2bWxpbnV4ICovCi0Jc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lID0gdHJ1ZTsKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCi0JCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOwotCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCi0JCWRpZSgiRmFpbGVkIHRvIGluaXQgc3ltYm9sIG1hcC4iKTsKLQlzZXNzaW9uLnBzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoTlVMTCwgT19XUk9OTFksIGZhbHNlKTsKLQlpZiAoc2Vzc2lvbi5wc2Vzc2lvbiA9PSBOVUxMKQotCQlkaWUoIkZhaWxlZCB0byBpbml0IHBlcmZfc2Vzc2lvbi4iKTsKLQlzZXNzaW9uLmttYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24ucHNlc3Npb24tPmttYXBzLAotCQkJCQkJTUFQX19GVU5DVElPTiwKLQkJCQkJCSJba2VybmVsLmthbGxzeW1zXSIpOwotCWlmICghc2Vzc2lvbi5rbWFwKQotCQlkaWUoIkNvdWxkIG5vdCBmaW5kIGtlcm5lbCBtYXAuXG4iKTsKKwkvKiBBZGQgcHJvYmVzICovCisJaW5pdF92bWxpbnV4KCk7CiAKIAlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKQogI2lmZGVmIE5PX0xJQkRXQVJGCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggMjY1NDI1My4uNzcxNTMzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNSwxMCArNSwxMyBAQAogICogKG9yIGEgQ1BVLCBvciBhIFBJRCkgaW50byB0aGUgcGVyZi5kYXRhIG91dHB1dCBmaWxlIC0gZm9yCiAgKiBsYXRlciBhbmFseXNpcyB2aWEgcGVyZiByZXBvcnQuCiAgKi8KKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgImJ1aWx0aW4uaCIKIAogI2luY2x1ZGUgInBlcmYuaCIKIAorI2luY2x1ZGUgInV0aWwvYnVpbGQtaWQuaCIKICNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgpAQCAtNjIsNiArNjUsNyBAQAogc3RhdGljIGludAkJCW5yX2NwdQkJCQk9ICAgICAgMDsKIAogc3RhdGljIGludAkJCWZpbGVfbmV3CQkJPSAgICAgIDE7CitzdGF0aWMgb2ZmX3QJCQlwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0OwogCiBzdGF0aWMgc3RydWN0IHBlcmZfc2Vzc2lvbgkqc2Vzc2lvbjsKIApAQCAtMTExLDIyICsxMTUsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX2V2ZW50KGV2ZW50X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0JLyoKLQkqIEFkZCBpdCB0byB0aGUgbGlzdCBvZiBEU09zLCBzbyB0aGF0IHdoZW4gd2UgZmluaXNoIHRoaXMKLQkgKiByZWNvcmQgc2Vzc2lvbiB3ZSBjYW4gcGljayB0aGUgYXZhaWxhYmxlIGJ1aWxkLWlkcy4KLQkgKi8KLQlpZiAoYnVmLT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9NTUFQKQotCQlkc29zX19maW5kbmV3KGJ1Zi0+bW1hcC5maWxlbmFtZSk7Ci0KLQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKLX0KLQogc3RhdGljIGludCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KGV2ZW50X3QgKmV2ZW50LAogCQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiBfX3VzZWQpCiB7Ci0Jd3JpdGVfZXZlbnQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CisJd3JpdGVfb3V0cHV0KGV2ZW50LCBldmVudC0+aGVhZGVyLnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgsMTQgKzE3MCwxNCBAQAogCQlzaXplID0gbWQtPm1hc2sgKyAxIC0gKG9sZCAmIG1kLT5tYXNrKTsKIAkJb2xkICs9IHNpemU7CiAKLQkJd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwkJd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CiAJfQogCiAJYnVmID0gJmRhdGFbb2xkICYgbWQtPm1hc2tdOwogCXNpemUgPSBoZWFkIC0gb2xkOwogCW9sZCArPSBzaXplOwogCi0Jd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKIAogCW1kLT5wcmV2ID0gb2xkOwogCW1tYXBfd3JpdGVfdGFpbChtZCwgb2xkKTsKQEAgLTM5NSwxMCArMzg3LDIxIEBACiAJbnJfY3B1Kys7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY2Vzc19idWlsZGlkcyh2b2lkKQoreworCXU2NCBzaXplID0gbHNlZWsob3V0cHV0LCAwLCBTRUVLX0NVUik7CisKKwlzZXNzaW9uLT5mZCA9IG91dHB1dDsKKwlyZXR1cm4gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sIHBvc3RfcHJvY2Vzc2luZ19vZmZzZXQsCisJCQkJCSAgICAgIHNpemUgLSBwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0LAorCQkJCQkgICAgICBzaXplLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworfQorCiBzdGF0aWMgdm9pZCBhdGV4aXRfaGVhZGVyKHZvaWQpCiB7CiAJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSBieXRlc193cml0dGVuOwogCisJcHJvY2Vzc19idWlsZGlkcygpOwogCXBlcmZfaGVhZGVyX193cml0ZSgmc2Vzc2lvbi0+aGVhZGVyLCBvdXRwdXQsIHRydWUpOwogfQogCkBAIC01NTEsOCArNTU0LDIzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQgPSBsc2VlayhvdXRwdXQsIDAsIFNFRUtfQ1VSKTsKKworCWVyciA9IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCisJCQkJCSAgICBzZXNzaW9uLCAiX3RleHQiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKCFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCSBzZXNzaW9uKTsKIAllbHNlCiAJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwgc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggODYwZjFlZS4uY2ZjNjU1ZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTM0LDYgKzM0LDggQEAKIHN0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogCiBzdGF0aWMgaW50CQlmb3JjZTsKK3N0YXRpYyBib29sCQloaWRlX3VucmVzb2x2ZWQ7CitzdGF0aWMgYm9vbAkJZG9udF91c2VfY2FsbGNoYWluczsKIAogc3RhdGljIGludAkJc2hvd190aHJlYWRzOwogc3RhdGljIHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzCXNob3dfdGhyZWFkc192YWx1ZXM7CkBAIC05MSwxMSArOTMsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgewogCQl1bnNpZ25lZCBpbnQgaTsKQEAgLTEyMSw3ICsxMjAsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGFsLmZpbHRlcmVkKQorCWlmIChhbC5maWx0ZXJlZCB8fCAoaGlkZV91bnJlc29sdmVkICYmIGFsLnN5bSA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIGRhdGEuY2FsbGNoYWluLCBkYXRhLnBlcmlvZCkpIHsKQEAgLTE1NiwxNCArMTU1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19zZXR1cF9zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkgeworCWlmICghKHNlbGYtPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkgewogCQlpZiAoc29ydF9faGFzX3BhcmVudCkgewogCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtLXNvcnQgcGFyZW50LCBidXQgbm8iCiAJCQkJCSIgY2FsbGNoYWluIGRhdGEuIERpZCB5b3UgY2FsbCIKIAkJCQkJIiBwZXJmIHJlY29yZCB3aXRob3V0IC1nP1xuIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgewogCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtZyBidXQgbm8gY2FsbGNoYWluIGRhdGEuIgpAQCAtMTcxLDEyICsxNzAsMTMgQEAKIAkJCQkJIiAtZz9cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JfSBlbHNlIGlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSAhPSBDSEFJTl9OT05FICYmICFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CisJfSBlbHNlIGlmICghZG9udF91c2VfY2FsbGNoYWlucyAmJiBjYWxsY2hhaW5fcGFyYW0ubW9kZSAhPSBDSEFJTl9OT05FICYmCisJCSAgICFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CiAJCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKIAkJCWlmIChyZWdpc3Rlcl9jYWxsY2hhaW5fcGFyYW0oJmNhbGxjaGFpbl9wYXJhbSkgPCAwKSB7CiAJCQkJZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWdpc3RlciBjYWxsY2hhaW4iCiAJCQkJCQkiIHBhcmFtc1xuIik7Ci0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCX0KIApAQCAtMTg0LDIwICsxODQsMTggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCi0JLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfZXhpdF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCi0JLnByb2Nlc3NfZm9ya19ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCi0JLnByb2Nlc3NfbG9zdF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCi0JLnByb2Nlc3NfcmVhZF9ldmVudAk9IHByb2Nlc3NfcmVhZF9ldmVudCwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuc2FtcGxlCT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLm1tYXAJPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkuZXhpdAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5sb3N0CT0gZXZlbnRfX3Byb2Nlc3NfbG9zdCwKKwkucmVhZAk9IHByb2Nlc3NfcmVhZF9ldmVudCwKIH07CiAKLQogc3RhdGljIGludCBfX2NtZF9yZXBvcnQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CiAKIAlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlKTsKQEAgLTIwNyw2ICsyMDUsMTAgQEAKIAlpZiAoc2hvd190aHJlYWRzKQogCQlwZXJmX3JlYWRfdmFsdWVzX2luaXQoJnNob3dfdGhyZWFkc192YWx1ZXMpOwogCisJcmV0ID0gcGVyZl9zZXNzaW9uX19zZXR1cF9zYW1wbGVfdHlwZShzZXNzaW9uKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbGV0ZTsKQEAgLTI0MywxMSArMjQ1LDE5IEBACiAKIHN0YXRpYyBpbnQKIHBhcnNlX2NhbGxjaGFpbl9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwgY29uc3QgY2hhciAqYXJnLAotCQkgICAgaW50IHVuc2V0IF9fdXNlZCkKKwkJICAgIGludCB1bnNldCkKIHsKIAljaGFyICp0b2s7CiAJY2hhciAqZW5kcHRyOwogCisJLyoKKwkgKiAtLW5vLWNhbGwtZ3JhcGgKKwkgKi8KKwlpZiAodW5zZXQpIHsKKwkJZG9udF91c2VfY2FsbGNoYWlucyA9IHRydWU7CisJCXJldHVybiAwOworCX0KKwogCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOwogCiAJaWYgKCFhcmcpCkBAIC0zMTksNyArMzI5LDcgQEAKIAkJICAgInByZXR0eSBwcmludGluZyBzdHlsZSBrZXk6IG5vcm1hbCByYXciKSwKIAlPUFRfU1RSSU5HKCdzJywgInNvcnQiLCAmc29ydF9vcmRlciwgImtleVssa2V5Mi4uLl0iLAogCQkgICAic29ydCBieSBrZXkocyk6IHBpZCwgY29tbSwgZHNvLCBzeW1ib2wsIHBhcmVudCIpLAotCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmZXZlbnRfb3BzLmZ1bGxfcGF0aHMsCisJT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZzeW1ib2xfY29uZi5mdWxsX3BhdGhzLAogCQkgICAgIkRvbid0IHNob3J0ZW4gdGhlIHBhdGhuYW1lcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjd2QiKSwKIAlPUFRfU1RSSU5HKCdwJywgInBhcmVudCIsICZwYXJlbnRfcGF0dGVybiwgInJlZ2V4IiwKIAkJICAgInJlZ2V4IGZpbHRlciB0byBpZGVudGlmeSBwYXJlbnQsIHNlZTogJy0tc29ydCBwYXJlbnQnIiksCkBAIC0zNDAsNiArMzUwLDggQEAKIAlPUFRfU1RSSU5HKCd0JywgImZpZWxkLXNlcGFyYXRvciIsICZzeW1ib2xfY29uZi5maWVsZF9zZXAsICJzZXBhcmF0b3IiLAogCQkgICAic2VwYXJhdG9yIGZvciBjb2x1bW5zLCBubyBzcGFjZXMgd2lsbCBiZSBhZGRlZCBiZXR3ZWVuICIKIAkJICAgImNvbHVtbnMgJy4nIGlzIHJlc2VydmVkLiIpLAorCU9QVF9CT09MRUFOKCdVJywgImhpZGUtdW5yZXNvbHZlZCIsICZoaWRlX3VucmVzb2x2ZWQsCisJCSAgICAiT25seSBkaXNwbGF5IGVudHJpZXMgcmVzb2x2ZWQgdG8gYSBzeW1ib2wiKSwKIAlPUFRfRU5EKCkKIH07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggODAyMDlkZi4uNGY1YTAzZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTE2MjEsMTEgKzE2MjEsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBkYXRhLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CkBAIC0xNjUzLDMzICsxNjUwLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLAotCQkJIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgotCQkJIndpdGhvdXQgLVI/Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfbG9zdF9ldmVudAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuc2FtcGxlCT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5sb3N0CT0gcHJvY2Vzc19sb3N0X2V2ZW50LAogfTsKIAogc3RhdGljIGludCByZWFkX2V2ZW50cyh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CisJaWYgKHBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAicmVjb3JkIC1SIikpCisJCWVyciA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CisKIAlwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZXNzaW9uKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggYzcwZDcyMC4uZThjODVkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKICNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCiAKICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC03OSw2ICs4MCw4IEBACiAKIHN0YXRpYyBpbnQJCQlldmVudF9zY2FsZWRbTUFYX0NPVU5URVJTXTsKIAorc3RhdGljIHZvbGF0aWxlIGludCBkb25lID0gMDsKKwogc3RydWN0IHN0YXRzCiB7CiAJZG91YmxlIG4sIG1lYW4sIE0yOwpAQCAtMjQ3LDYxICsyNTAsNjQgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdDAsIHQxOwogCWludCBzdGF0dXMgPSAwOwogCWludCBjb3VudGVyOwotCWludCBwaWQ7CisJaW50IHBpZCA9IHRhcmdldF9waWQ7CiAJaW50IGNoaWxkX3JlYWR5X3BpcGVbMl0sIGdvX3BpcGVbMl07CisJY29uc3QgYm9vbCBmb3JrcyA9ICh0YXJnZXRfcGlkID09IC0xICYmIGFyZ2MgPiAwKTsKIAljaGFyIGJ1ZjsKIAogCWlmICghc3lzdGVtX3dpZGUpCiAJCW5yX2NwdXMgPSAxOwogCi0JaWYgKHBpcGUoY2hpbGRfcmVhZHlfcGlwZSkgPCAwIHx8IHBpcGUoZ29fcGlwZSkgPCAwKSB7CisJaWYgKGZvcmtzICYmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkpIHsKIAkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHBpcGVzIik7CiAJCWV4aXQoMSk7CiAJfQogCi0JaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKLQkJcGVycm9yKCJmYWlsZWQgdG8gZm9yayIpOworCWlmIChmb3JrcykgeworCQlpZiAoKHBpZCA9IGZvcmsoKSkgPCAwKQorCQkJcGVycm9yKCJmYWlsZWQgdG8gZm9yayIpOwogCi0JaWYgKCFwaWQpIHsKLQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7Ci0JCWNsb3NlKGdvX3BpcGVbMV0pOwotCQlmY250bChnb19waXBlWzBdLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKwkJaWYgKCFwaWQpIHsKKwkJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMF0pOworCQkJY2xvc2UoZ29fcGlwZVsxXSk7CisJCQlmY250bChnb19waXBlWzBdLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKworCQkJLyoKKwkJCSAqIERvIGEgZHVtbXkgZXhlY3ZwIHRvIGdldCB0aGUgUExUIGVudHJ5IHJlc29sdmVkLAorCQkJICogc28gd2UgYXZvaWQgdGhlIHJlc29sdmVyIG92ZXJoZWFkIG9uIHRoZSByZWFsCisJCQkgKiBleGVjdnAgY2FsbC4KKwkJCSAqLworCQkJZXhlY3ZwKCIiLCAoY2hhciAqKilhcmd2KTsKKworCQkJLyoKKwkJCSAqIFRlbGwgdGhlIHBhcmVudCB3ZSdyZSByZWFkeSB0byBnbworCQkJICovCisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzFdKTsKKworCQkJLyoKKwkJCSAqIFdhaXQgdW50aWwgdGhlIHBhcmVudCB0ZWxscyB1cyB0byBnby4KKwkJCSAqLworCQkJaWYgKHJlYWQoZ29fcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCisJCQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7CisKKwkJCWV4ZWN2cChhcmd2WzBdLCAoY2hhciAqKilhcmd2KTsKKworCQkJcGVycm9yKGFyZ3ZbMF0pOworCQkJZXhpdCgtMSk7CisJCX0KKworCQljaGlsZF9waWQgPSBwaWQ7CiAKIAkJLyoKLQkJICogRG8gYSBkdW1teSBleGVjdnAgdG8gZ2V0IHRoZSBQTFQgZW50cnkgcmVzb2x2ZWQsCi0JCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAotCQkgKiBleGVjdnAgY2FsbC4KLQkJICovCi0JCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgcGFyZW50IHdlJ3JlIHJlYWR5IHRvIGdvCisJCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgogCQkgKi8KIAkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7Ci0KLQkJLyoKLQkJICogV2FpdCB1bnRpbCB0aGUgcGFyZW50IHRlbGxzIHVzIHRvIGdvLgotCQkgKi8KLQkJaWYgKHJlYWQoZ29fcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCisJCWNsb3NlKGdvX3BpcGVbMF0pOworCQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkKIAkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOwotCi0JCWV4ZWN2cChhcmd2WzBdLCAoY2hhciAqKilhcmd2KTsKLQotCQlwZXJyb3IoYXJndlswXSk7Ci0JCWV4aXQoLTEpOworCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKIAl9CiAKLQljaGlsZF9waWQgPSBwaWQ7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgotCSAqLwotCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOwotCWNsb3NlKGdvX3BpcGVbMF0pOwotCWlmIChyZWFkKGNoaWxkX3JlYWR5X3BpcGVbMF0sICZidWYsIDEpID09IC0xKQotCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIHBpcGUiKTsKLQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKLQogCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBucl9jb3VudGVyczsgY291bnRlcisrKQogCQljcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoY291bnRlciwgcGlkKTsKIApAQCAtMzEwLDggKzMxNiwxMiBAQAogCSAqLwogCXQwID0gcmRjbG9jaygpOwogCi0JY2xvc2UoZ29fcGlwZVsxXSk7Ci0Jd2FpdCgmc3RhdHVzKTsKKwlpZiAoZm9ya3MpIHsKKwkJY2xvc2UoZ29fcGlwZVsxXSk7CisJCXdhaXQoJnN0YXR1cyk7CisJfSBlbHNlIHsKKwkJd2hpbGUoIWRvbmUpOworCX0KIAogCXQxID0gcmRjbG9jaygpOwogCkBAIC00MTcsMTAgKzQyNywxMyBAQAogCWZmbHVzaChzdGRvdXQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yIFwnJXMiLCBhcmd2WzBdKTsKLQotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0JCWZwcmludGYoc3RkZXJyLCAiICVzIiwgYXJndltpXSk7CisJZnByaW50ZihzdGRlcnIsICIgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgIik7CisJaWYodGFyZ2V0X3BpZCA9PSAtMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlwnJXMiLCBhcmd2WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICVzIiwgYXJndltpXSk7CisJfWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJ0YXNrIHBpZCBcJyVkIiwgdGFyZ2V0X3BpZCk7CiAKIAlmcHJpbnRmKHN0ZGVyciwgIlwnIik7CiAJaWYgKHJ1bl9jb3VudCA+IDEpCkBAIC00NDUsNiArNDU4LDkgQEAKIAogc3RhdGljIHZvaWQgc2tpcF9zaWduYWwoaW50IHNpZ25vKQogeworCWlmKHRhcmdldF9waWQgIT0gLTEpCisJCWRvbmUgPSAxOworCiAJc2lnbnIgPSBzaWdubzsKIH0KIApAQCAtNDYxLDcgKzQ3Nyw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RhdF91c2FnZVtdID0gewotCSJwZXJmIHN0YXQgWzxvcHRpb25zPl0gPGNvbW1hbmQ+IiwKKwkicGVyZiBzdGF0IFs8b3B0aW9ucz5dIFs8Y29tbWFuZD5dIiwKIAlOVUxMCiB9OwogCkBAIC00OTIsNyArNTA4LDcgQEAKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHN0YXRfdXNhZ2UsCiAJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwotCWlmICghYXJnYykKKwlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCWlmIChydW5fY291bnQgPD0gMCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDNmOGJiY2YuLjBkNGQ4ZmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTEwMjksMzMgKzEwMjksMjQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKLQkJZnByaW50ZihzdGRlcnIsICJObyB0cmFjZSBzYW1wbGVzIGZvdW5kIGluIHRoZSBmaWxlLlxuIgotCQkJCSJIYXZlIHlvdSB1c2VkICdwZXJmIHRpbWVjaGFydCByZWNvcmQnIHRvIHJlY29yZCBpdD9cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBwcm9jZXNzX2NvbW1fZXZlbnQsCi0JLnByb2Nlc3NfZm9ya19ldmVudAk9IHByb2Nlc3NfZm9ya19ldmVudCwKLQkucHJvY2Vzc19leGl0X2V2ZW50CT0gcHJvY2Vzc19leGl0X2V2ZW50LAotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuY29tbQk9IHByb2Nlc3NfY29tbV9ldmVudCwKKwkuZm9yawk9IHByb2Nlc3NfZm9ya19ldmVudCwKKwkuZXhpdAk9IHByb2Nlc3NfZXhpdF9ldmVudCwKKwkuc2FtcGxlCT0gcXVldWVfc2FtcGxlX2V2ZW50LAogfTsKIAogc3RhdGljIGludCBfX2NtZF90aW1lY2hhcnQodm9pZCkKIHsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDApOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmICghcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJ0aW1lY2hhcnQgcmVjb3JkIikpCisJCWdvdG8gb3V0X2RlbGV0ZTsKKwogCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGVsZXRlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDRiOTFkOGMuLjMxZjJlNTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTk0LDYgKzk0LDcgQEAKIAogc3RhdGljIGNoYXIJCQkqc3ltX2ZpbHRlcgkJCT0gICBOVUxMOwogc3RydWN0IHN5bV9lbnRyeQkJKnN5bV9maWx0ZXJfZW50cnkJCT0gICBOVUxMOworc3RydWN0IHN5bV9lbnRyeQkJKnN5bV9maWx0ZXJfZW50cnlfc2NoZWQJCT0gICBOVUxMOwogc3RhdGljIGludAkJCXN5bV9wY250X2ZpbHRlcgkJCT0gICAgICA1Owogc3RhdGljIGludAkJCXN5bV9jb3VudGVyCQkJPSAgICAgIDA7CiBzdGF0aWMgaW50CQkJZGlzcGxheV93ZWlnaHRlZAkJPSAgICAgLTE7CkBAIC0yMDEsMTAgKzIwMiw5IEBACiAJbGVuID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwogCiAJc3ByaW50Zihjb21tYW5kLAotCQkib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggIgotCQkJICItLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgJXMiLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCi0JCW1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPmVuZCksIHBhdGgpOworCQkib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9JSMwKkx4IC0tc3RvcC1hZGRyZXNzPSUjMCpMeCAtZFMgJXMiLAorCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKKwkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIAogCWZpbGUgPSBwb3Blbihjb21tYW5kLCAiciIpOwogCWlmICghZmlsZSkKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXdoaWxlICghZmVvZihmaWxlKSkgewogCQlzdHJ1Y3Qgc291cmNlX2xpbmUgKnNyYzsKIAkJc2l6ZV90IGR1bW15ID0gMDsKLQkJY2hhciAqYzsKKwkJY2hhciAqYywgKnNlcDsKIAogCQlzcmMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb3VyY2VfbGluZSkpOwogCQlhc3NlcnQoc3JjICE9IE5VTEwpOwpAQCAtMjM0LDE0ICsyMzQsMTEgQEAKIAkJKnNvdXJjZS0+bGluZXNfdGFpbCA9IHNyYzsKIAkJc291cmNlLT5saW5lc190YWlsID0gJnNyYy0+bmV4dDsKIAotCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbOF0gPT0gJzonKSB7Ci0JCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgTlVMTCwgMTYpOwotCQkJc3JjLT5laXAgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3JjLT5laXApOwotCQl9Ci0JCWlmIChzdHJsZW4oc3JjLT5saW5lKT44ICYmIHNyYy0+bGluZVsxNl0gPT0gJzonKSB7Ci0JCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgTlVMTCwgMTYpOwotCQkJc3JjLT5laXAgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3JjLT5laXApOwotCQl9CisJCXNyYy0+ZWlwID0gc3RydG91bGwoc3JjLT5saW5lLCAmc2VwLCAxNik7CisJCWlmICgqc2VwID09ICc6JykKKwkJCXNyYy0+ZWlwID0gbWFwX19vYmpkdW1wXzJpcChtYXAsIHNyYy0+ZWlwKTsKKwkJZWxzZSAvKiB0aGlzIGxpbmUgaGFzIG5vIGlwIGluZm8gKGUuZy4gc291cmNlIGxpbmUpICovCisJCQlzcmMtPmVpcCA9IDA7CiAJfQogCXBjbG9zZShmaWxlKTsKIG91dF9hc3NpZ246CkBAIC0yNzYsNiArMjczLDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJZm9yIChsaW5lID0gc3ltZS0+c3JjLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKKwkJLyogc2tpcCBsaW5lcyB3aXRob3V0IElQIGluZm8gKi8KKwkJaWYgKGxpbmUtPmVpcCA9PSAwKQorCQkJY29udGludWU7CiAJCWlmIChsaW5lLT5laXAgPT0gaXApIHsKIAkJCWxpbmUtPmNvdW50W2NvdW50ZXJdKys7CiAJCQlicmVhazsKQEAgLTI4NywxNyArMjg3LDIwIEBACiAJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNyYy0+bG9jayk7CiB9CiAKKyNkZWZpbmUgUEFUVEVSTl9MRU4JCShCSVRTX1BFUl9MT05HIC8gNCArIDIpCisKIHN0YXRpYyB2b2lkIGxvb2t1cF9zeW1fc291cmNlKHN0cnVjdCBzeW1fZW50cnkgKnN5bWUpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltYm9sID0gc3ltX2VudHJ5X19zeW1ib2woc3ltZSk7CiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwotCWNoYXIgcGF0dGVybltQQVRIX01BWF07CisJY2hhciBwYXR0ZXJuW1BBVFRFUk5fTEVOICsgMV07CiAKLQlzcHJpbnRmKHBhdHRlcm4sICI8JXM+OiIsIHN5bWJvbC0+bmFtZSk7CisJc3ByaW50ZihwYXR0ZXJuLCAiJTAqTHggPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAorCQltYXBfX3JpcF8yb2JqZHVtcChzeW1lLT5tYXAsIHN5bWJvbC0+c3RhcnQpKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAlmb3IgKGxpbmUgPSBzeW1lLT5zcmMtPmxpbmVzOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dCkgewotCQlpZiAoc3Ryc3RyKGxpbmUtPmxpbmUsIHBhdHRlcm4pKSB7CisJCWlmIChtZW1jbXAobGluZS0+bGluZSwgcGF0dGVybiwgUEFUVEVSTl9MRU4pID09IDApIHsKIAkJCXN5bWUtPnNyYy0+c291cmNlID0gbGluZTsKIAkJCWJyZWFrOwogCQl9CkBAIC02NjcsNyArNjcwLDcgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiU29ycnksICVzIGlzIG5vdCBhY3RpdmUuXG4iLCBzeW1fZmlsdGVyKTsKKwkJZnByaW50ZihzdGRlcnIsICJTb3JyeSwgJXMgaXMgbm90IGFjdGl2ZS5cbiIsIGJ1Zik7CiAJCXNsZWVwKDEpOwogCQlyZXR1cm47CiAJfSBlbHNlCkBAIC02OTUsMTEgKzY5OCw5IEBACiAKIAlmcHJpbnRmKHN0ZG91dCwgIlx0W2ZdICAgICBwcm9maWxlIGRpc3BsYXkgZmlsdGVyIChjb3VudCkuICAgIFx0KCVkKVxuIiwgY291bnRfZmlsdGVyKTsKIAotCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpIHsKLQkJZnByaW50ZihzdGRvdXQsICJcdFtGXSAgICAgYW5ub3RhdGUgZGlzcGxheSBmaWx0ZXIgKHBlcmNlbnQpLiBcdCglZCUlKVxuIiwgc3ltX3BjbnRfZmlsdGVyKTsKLQkJZnByaW50ZihzdGRvdXQsICJcdFtzXSAgICAgYW5ub3RhdGUgc3ltYm9sLiAgICAgICAgICAgICAgICAgICBcdCglcylcbiIsIG5hbWU/OiAiTlVMTCIpOwotCQlmcHJpbnRmKHN0ZG91dCwgIlx0W1NdICAgICBzdG9wIGFubm90YXRpb24uXG4iKTsKLQl9CisJZnByaW50ZihzdGRvdXQsICJcdFtGXSAgICAgYW5ub3RhdGUgZGlzcGxheSBmaWx0ZXIgKHBlcmNlbnQpLiBcdCglZCUlKVxuIiwgc3ltX3BjbnRfZmlsdGVyKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0W3NdICAgICBhbm5vdGF0ZSBzeW1ib2wuICAgICAgICAgICAgICAgICAgIFx0KCVzKVxuIiwgbmFtZT86ICJOVUxMIik7CisJZnByaW50ZihzdGRvdXQsICJcdFtTXSAgICAgc3RvcCBhbm5vdGF0aW9uLlxuIik7CiAKIAlpZiAobnJfY291bnRlcnMgPiAxKQogCQlmcHJpbnRmKHN0ZG91dCwgIlx0W3ddICAgICB0b2dnbGUgZGlzcGxheSB3ZWlnaHRlZC9jb3VudFtFXXIuIFx0KCVkKVxuIiwgZGlzcGxheV93ZWlnaHRlZCA/IDEgOiAwKTsKQEAgLTcyNSwxNCArNzI2LDEzIEBACiAJCWNhc2UgJ1EnOgogCQljYXNlICdLJzoKIAkJY2FzZSAnVSc6CisJCWNhc2UgJ0YnOgorCQljYXNlICdzJzoKKwkJY2FzZSAnUyc6CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAnRSc6CiAJCWNhc2UgJ3cnOgogCQkJcmV0dXJuIG5yX2NvdW50ZXJzID4gMSA/IDEgOiAwOwotCQljYXNlICdGJzoKLQkJY2FzZSAncyc6Ci0JCWNhc2UgJ1MnOgotCQkJcmV0dXJuIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA/IDEgOiAwOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpAQCAtOTEwLDggKzkxMCwxMiBAQAogCXN5bWUgPSBzeW1ib2xfX3ByaXYoc3ltKTsKIAlzeW1lLT5tYXAgPSBtYXA7CiAJc3ltZS0+c3JjID0gTlVMTDsKLQlpZiAoIXN5bV9maWx0ZXJfZW50cnkgJiYgc3ltX2ZpbHRlciAmJiAhc3RyY21wKG5hbWUsIHN5bV9maWx0ZXIpKQotCQlzeW1fZmlsdGVyX2VudHJ5ID0gc3ltZTsKKworCWlmICghc3ltX2ZpbHRlcl9lbnRyeSAmJiBzeW1fZmlsdGVyICYmICFzdHJjbXAobmFtZSwgc3ltX2ZpbHRlcikpIHsKKwkJLyogc2NoZWR1bGUgaW5pdGlhbCBzeW1fZmlsdGVyX2VudHJ5IHNldHVwICovCisJCXN5bV9maWx0ZXJfZW50cnlfc2NoZWQgPSBzeW1lOworCQlzeW1fZmlsdGVyID0gTlVMTDsKKwl9CiAKIAlmb3IgKGkgPSAwOyBza2lwX3N5bWJvbHNbaV07IGkrKykgewogCQlpZiAoIXN0cmNtcChza2lwX3N5bWJvbHNbaV0sIG5hbWUpKSB7CkBAIC05MzQsOCArOTM4LDExIEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJdTggb3JpZ2luID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIAorCSsrc2FtcGxlczsKKwogCXN3aXRjaCAob3JpZ2luKSB7CiAJY2FzZSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI6CisJCSsrdXNlcnNwYWNlX3NhbXBsZXM7CiAJCWlmIChoaWRlX3VzZXJfc3ltYm9scykKIAkJCXJldHVybjsKIAkJYnJlYWs7CkBAIC05NDgsOSArOTU1LDM4IEBACiAJfQogCiAJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShzZWxmLCBzZXNzaW9uLCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCB8fAotCSAgICBhbC5zeW0gPT0gTlVMTCB8fCBhbC5maWx0ZXJlZCkKKwkgICAgYWwuZmlsdGVyZWQpCiAJCXJldHVybjsKIAorCWlmIChhbC5zeW0gPT0gTlVMTCkgeworCQkvKgorCQkgKiBBcyB3ZSBkbyBsYXp5IGxvYWRpbmcgb2Ygc3ltdGFicyB3ZSBvbmx5IHdpbGwga25vdyBpZiB0aGUKKwkJICogc3BlY2lmaWVkIHZtbGludXggZmlsZSBpcyBpbnZhbGlkIHdoZW4gd2UgYWN0dWFsbHkgaGF2ZSBhCisJCSAqIGhpdCBpbiBrZXJuZWwgc3BhY2UgYW5kIHRoZW4gdHJ5IHRvIGxvYWQgaXQuIFNvIGlmIHdlIGdldAorCQkgKiBoZXJlIGFuZCB0aGVyZSBhcmUgX25vXyBzeW1ib2xzIGluIHRoZSBEU08gYmFja2luZyB0aGUKKwkJICoga2VybmVsIG1hcCwgYmFpbCBvdXQuCisJCSAqCisJCSAqIFdlIG1heSBuZXZlciBnZXQgaGVyZSwgZm9yIGluc3RhbmNlLCBpZiB3ZSB1c2UgLUsvCisJCSAqIC0taGlkZS1rZXJuZWwtc3ltYm9scywgZXZlbiBpZiB0aGUgdXNlciBzcGVjaWZpZXMgYW4KKwkJICogaW52YWxpZCAtLXZtbGludXggOy0pCisJCSAqLworCQlpZiAoYWwubWFwID09IHNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXSAmJgorCQkgICAgUkJfRU1QVFlfUk9PVCgmYWwubWFwLT5kc28tPnN5bWJvbHNbTUFQX19GVU5DVElPTl0pKSB7CisJCQlwcl9lcnIoIlRoZSAlcyBmaWxlIGNhbid0IGJlIHVzZWRcbiIsCisJCQkgICAgICAgc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJLyogbGV0J3Mgc2VlLCB3aGV0aGVyIHdlIG5lZWQgdG8gaW5zdGFsbCBpbml0aWFsIHN5bV9maWx0ZXJfZW50cnkgKi8KKwlpZiAoc3ltX2ZpbHRlcl9lbnRyeV9zY2hlZCkgeworCQlzeW1fZmlsdGVyX2VudHJ5ID0gc3ltX2ZpbHRlcl9lbnRyeV9zY2hlZDsKKwkJc3ltX2ZpbHRlcl9lbnRyeV9zY2hlZCA9IE5VTEw7CisJCXBhcnNlX3NvdXJjZShzeW1fZmlsdGVyX2VudHJ5KTsKKwl9CisKIAlzeW1lID0gc3ltYm9sX19wcml2KGFsLnN5bSk7CiAJaWYgKCFzeW1lLT5za2lwKSB7CiAJCXN5bWUtPmNvdW50W2NvdW50ZXJdKys7CkBAIC05NjAsOSArOTk2LDYgQEAKIAkJaWYgKGxpc3RfZW1wdHkoJnN5bWUtPm5vZGUpIHx8ICFzeW1lLT5ub2RlLm5leHQpCiAJCQlfX2xpc3RfaW5zZXJ0X2FjdGl2ZV9zeW0oc3ltZSk7CiAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhY3RpdmVfc3ltYm9sc19sb2NrKTsKLQkJaWYgKG9yaWdpbiA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpCi0JCQkrK3VzZXJzcGFjZV9zYW1wbGVzOwotCQkrK3NhbXBsZXM7CiAJfQogfQogCkBAIC05NzUsNiArMTAwOCwxMCBAQAogCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKIAkJZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudCwgc2Vzc2lvbik7CiAJCWJyZWFrOworCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6CisJCWV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnQsIHNlc3Npb24pOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjQ0LDcgKzEyODEsNyBAQAogCU9QVF9CT09MRUFOKCdpJywgImluaGVyaXQiLCAmaW5oZXJpdCwKIAkJICAgICJjaGlsZCB0YXNrcyBpbmhlcml0IGNvdW50ZXJzIiksCiAJT1BUX1NUUklORygncycsICJzeW0tYW5ub3RhdGUiLCAmc3ltX2ZpbHRlciwgInN5bWJvbCBuYW1lIiwKLQkJICAgICJzeW1ib2wgdG8gYW5ub3RhdGUgLSByZXF1aXJlcyAtayBvcHRpb24iKSwKKwkJICAgICJzeW1ib2wgdG8gYW5ub3RhdGUiKSwKIAlPUFRfQk9PTEVBTigneicsICJ6ZXJvIiwgJnplcm8sCiAJCSAgICAiemVybyBoaXN0b3J5IGFjcm9zcyB1cGRhdGVzIiksCiAJT1BUX0lOVEVHRVIoJ0YnLCAiZnJlcSIsICZmcmVxLApAQCAtMTI4MCwxNiArMTMxNywxNCBAQAogCiAJc3ltYm9sX2NvbmYucHJpdl9zaXplID0gKHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSArCiAJCQkJIChucl9jb3VudGVycyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCi0JCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOworCisJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCk7CiAJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGRlbGF5X3NlY3MgPCAxKQogCQlkZWxheV9zZWNzID0gMTsKIAotCXBhcnNlX3NvdXJjZShzeW1fZmlsdGVyX2VudHJ5KTsKLQogCS8qCiAJICogVXNlciBzcGVjaWZpZWQgY291bnQgb3ZlcnJpZGVzIGRlZmF1bHQgZnJlcXVlbmN5LgogCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCA1NzRhMjE1Li41ZGI2ODdmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtNDQsNiArNDQsNyBAQAogCXBlcmZfc2V0X2FyZ3ZfZXhlY19wYXRoKHBlcmZfZXhlY19wYXRoKCkpOwogCiAJc2V0dXBfcGVybF9zY3JpcHRpbmcoKTsKKwlzZXR1cF9weXRob25fc2NyaXB0aW5nKCk7CiAKIAlzY3JpcHRpbmdfb3BzID0gJmRlZmF1bHRfc2NyaXB0aW5nX29wczsKIH0KQEAgLTc1LDExICs3Niw4IEBACiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCi0JCWV2ZW50LT5oZWFkZXIubWlzYywKLQkJZGF0YS5waWQsIGRhdGEudGlkLAotCQkodm9pZCAqKShsb25nKWRhdGEuaXAsCi0JCShsb25nIGxvbmcpZGF0YS5wZXJpb2QpOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGRhdGEucGlkLCBkYXRhLnRpZCwgZGF0YS5pcCwgZGF0YS5wZXJpb2QpOwogCiAJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIGV2ZW50LT5pcC5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewpAQCAtMTAzLDIyICsxMDEsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLAotCQkJIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgotCQkJIndpdGhvdXQgLVI/Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfdHJhY2Uoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKQEAgLTIzNSw5ICsyMjAsOSBAQAogCWNvbnN0IGNoYXIgKnNjcmlwdCwgKmV4dDsKIAlpbnQgbGVuOwogCi0JaWYgKHN0cmNtcChzdHIsICJsaXN0IikgPT0gMCkgeworCWlmIChzdHJjbXAoc3RyLCAibGFuZyIpID09IDApIHsKIAkJbGlzdF9hdmFpbGFibGVfbGFuZ3VhZ2VzKCk7Ci0JCXJldHVybiAwOworCQlleGl0KDApOwogCX0KIAogCXNjcmlwdCA9IHN0cmNocihzdHIsICc6Jyk7CkBAIC01MzEsNiArNTE2LDggQEAKIAkJICAgICBwYXJzZV9zY3JpcHRuYW1lKSwKIAlPUFRfU1RSSU5HKCdnJywgImdlbi1zY3JpcHQiLCAmZ2VuZXJhdGVfc2NyaXB0X2xhbmcsICJsYW5nIiwKIAkJICAgImdlbmVyYXRlIHBlcmYtdHJhY2UueHggc2NyaXB0IGluIHNwZWNpZmllZCBsYW5ndWFnZSIpLAorCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLAogCiAJT1BUX0VORCgpCiB9OwpAQCAtNTkyLDYgKzU3OSw5IEBACiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAicmVjb3JkIC1SIikpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGdlbmVyYXRlX3NjcmlwdF9sYW5nKSB7CiAJCXN0cnVjdCBzdGF0IHBlcmZfc3RhdDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLmggYi90b29scy9wZXJmL2J1aWx0aW4uaAppbmRleCAxODAzNWIxLi4xMGZlNDllIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4uaAorKysgYi90b29scy9wZXJmL2J1aWx0aW4uaApAQCAtMTYsNiArMTYsNyBAQAogCiBleHRlcm4gaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9iZW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9idWlsZGlkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2J1aWxkaWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtMzAsNSArMzEsNiBAQAogZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9wcm9iZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9rbWVtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2xvY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dCBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAppbmRleCA3MWRjN2MzLi45YWZjZmYyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKKysrIGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CkBAIC0zLDcgKzMsOSBAQAogIyBjb21tYW5kIG5hbWUJCQljYXRlZ29yeSBbZGVwcmVjYXRlZF0gW2NvbW1vbl0KICMKIHBlcmYtYW5ub3RhdGUJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1hcmNoaXZlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtYmVuY2gJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1idWlsZGlkLWNhY2hlCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1idWlsZGlkLWxpc3QJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWRpZmYJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1saXN0CQkJbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dCBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAppbmRleCA4ZDBkZTUxLi5iZDBiYjFiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2Rlc2lnbi50eHQKKysrIGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogCSAqLwogCVBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJPSAwLAogCVBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQk9IDEsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCT0gMiwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVMJCT0gMiwKIAlQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFUwkJPSAzLAogCVBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUwk9IDQsCi0JUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTCT0gNSwKKwlQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCT0gNSwKIAlQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMJCT0gNiwKIH07CiAKQEAgLTEzMSw4ICsxMzEsOCBAQAogICovCiBlbnVtIHN3X2V2ZW50X2lkcyB7CiAJUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0sJCT0gMCwKLQlQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJCT0gMSwKLQlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCQk9IDIsCisJUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLCT0gMSwKKwlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCT0gMiwKIAlQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJPSAzLAogCVBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJPSA0LAogCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOCT0gNSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoIGIvdG9vbHMvcGVyZi9wZXJmLWFyY2hpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmYmUyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9iYXNoCisjIHBlcmYgYXJjaGl2ZQorIyBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKworUEVSRl9EQVRBPXBlcmYuZGF0YQoraWYgWyAkIyAtbmUgMCBdIDsgdGhlbgorCVBFUkZfREFUQT0kMQorZmkKKworREVCVUdESVI9fi8uZGVidWcvCitCVUlMRElEUz0kKG1rdGVtcCAvdG1wL3BlcmYtYXJjaGl2ZS1idWlsZGlkcy5YWFhYWFgpCisKK3BlcmYgYnVpbGRpZC1saXN0IC1pICRQRVJGX0RBVEEgLS13aXRoLWhpdHMgPiAkQlVJTERJRFMKK2lmIFsgISAtcyAkQlVJTERJRFMgXSA7IHRoZW4KKwllY2hvICJwZXJmIGFyY2hpdmU6IG5vIGJ1aWxkLWlkcyBmb3VuZCIKKwlybSAtZiAkQlVJTERJRFMKKwlleGl0IDEKK2ZpCisKK01BTklGRVNUPSQobWt0ZW1wIC90bXAvcGVyZi1hcmNoaXZlLW1hbmlmZXN0LlhYWFhYWCkKKworY3V0IC1kICcgJyAtZiAxICRCVUlMRElEUyB8IFwKK3doaWxlIHJlYWQgYnVpbGRfaWQgOyBkbworCWxpbmtuYW1lPSRERUJVR0RJUi5idWlsZC1pZC8ke2J1aWxkX2lkOjA6Mn0vJHtidWlsZF9pZDoyfQorCWZpbGVuYW1lPSQocmVhZGxpbmsgLWYgJGxpbmtuYW1lKQorCWVjaG8gJHtsaW5rbmFtZSMkREVCVUdESVJ9ID4+ICRNQU5JRkVTVAorCWVjaG8gJHtmaWxlbmFtZSMkREVCVUdESVJ9ID4+ICRNQU5JRkVTVAorZG9uZQorCit0YXIgY2ZqICRQRVJGX0RBVEEudGFyLmJ6MiAtQyAkREVCVUdESVIgLVQgJE1BTklGRVNUCitybSAtZiAkTUFOSUZFU1QgJEJVSUxESURTCitleGl0IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5jIGIvdG9vbHMvcGVyZi9wZXJmLmMKaW5kZXggODczZTU1Zi4uNTdjYjEwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmMKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmMKQEAgLTQ4LDcgKzQ4LDggQEAKIAlyZXR1cm4gYy52YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkgeworc3RhdGljIHZvaWQgY29tbWl0X3BhZ2VyX2Nob2ljZSh2b2lkKQorewogCXN3aXRjaCAodXNlX3BhZ2VyKSB7CiAJY2FzZSAwOgogCQlzZXRlbnYoIlBFUkZfUEFHRVIiLCAiY2F0IiwgMSk7CkBAIC03MCw3ICs3MSw3IEBACiAJCSAidHJhY2luZy9ldmVudHMiKTsKIH0KIAotc3RhdGljIGludCBoYW5kbGVfb3B0aW9ucyhjb25zdCBjaGFyKioqIGFyZ3YsIGludCogYXJnYywgaW50KiBlbnZjaGFuZ2VkKQorc3RhdGljIGludCBoYW5kbGVfb3B0aW9ucyhjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqYXJnYywgaW50ICplbnZjaGFuZ2VkKQogewogCWludCBoYW5kbGVkID0gMDsKIApAQCAtMTA5LDcgKzExMCw3IEBACiAJCQkJKmVudmNoYW5nZWQgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1wZXJmLWRpciIpKSB7CiAJCQlpZiAoKmFyZ2MgPCAyKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tcGVyZi1kaXIuXG4iICk7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tcGVyZi1kaXIuXG4iKTsKIAkJCQl1c2FnZShwZXJmX3VzYWdlX3N0cmluZyk7CiAJCQl9CiAJCQlzZXRlbnYoUEVSRl9ESVJfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOwpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCQkJKmVudmNoYW5nZWQgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS13b3JrLXRyZWUiKSkgewogCQkJaWYgKCphcmdjIDwgMikgewotCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZS5cbiIgKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWUuXG4iKTsKIAkJCQl1c2FnZShwZXJmX3VzYWdlX3N0cmluZyk7CiAJCQl9CiAJCQlzZXRlbnYoUEVSRl9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOwpAQCAtMTY4LDcgKzE2OSw3IEBACiB7CiAJaW50IGVudmNoYW5nZWQgPSAwLCByZXQgPSAwLCBzYXZlZF9lcnJubyA9IGVycm5vOwogCWludCBjb3VudCwgb3B0aW9uX2NvdW50OwotCWNvbnN0IGNoYXIqKiBuZXdfYXJndjsKKwljb25zdCBjaGFyICoqbmV3X2FyZ3Y7CiAJY29uc3QgY2hhciAqYWxpYXNfY29tbWFuZDsKIAljaGFyICphbGlhc19zdHJpbmc7CiAKQEAgLTIxMCwxMSArMjExLDExIEBACiAJCWlmICghc3RyY21wKGFsaWFzX2NvbW1hbmQsIG5ld19hcmd2WzBdKSkKIAkJCWRpZSgicmVjdXJzaXZlIGFsaWFzOiAlcyIsIGFsaWFzX2NvbW1hbmQpOwogCi0JCW5ld19hcmd2ID0gcmVhbGxvYyhuZXdfYXJndiwgc2l6ZW9mKGNoYXIqKSAqCisJCW5ld19hcmd2ID0gcmVhbGxvYyhuZXdfYXJndiwgc2l6ZW9mKGNoYXIgKikgKgogCQkJCSAgICAoY291bnQgKyAqYXJnY3AgKyAxKSk7CiAJCS8qIGluc2VydCBhZnRlciBjb21tYW5kIG5hbWUgKi8KLQkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIqKSAqICphcmdjcCk7Ci0JCW5ld19hcmd2W2NvdW50KyphcmdjcF0gPSBOVUxMOworCQltZW1jcHkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCBzaXplb2YoY2hhciAqKSAqICphcmdjcCk7CisJCW5ld19hcmd2W2NvdW50ICsgKmFyZ2NwXSA9IE5VTEw7CiAKIAkJKmFyZ3YgPSBuZXdfYXJndjsKIAkJKmFyZ2NwICs9IGNvdW50IC0gMTsKQEAgLTI4NSw2ICsyODYsNyBAQAogewogCWNvbnN0IGNoYXIgKmNtZCA9IGFyZ3ZbMF07CiAJc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJCXsgImJ1aWxkaWQtY2FjaGUiLCBjbWRfYnVpbGRpZF9jYWNoZSwgMCB9LAogCQl7ICJidWlsZGlkLWxpc3QiLCBjbWRfYnVpbGRpZF9saXN0LCAwIH0sCiAJCXsgImRpZmYiLAljbWRfZGlmZiwJMCB9LAogCQl7ICJoZWxwIiwJY21kX2hlbHAsCTAgfSwKQEAgLTMwMSw2ICszMDMsNyBAQAogCQl7ICJzY2hlZCIsCWNtZF9zY2hlZCwJMCB9LAogCQl7ICJwcm9iZSIsCWNtZF9wcm9iZSwJMCB9LAogCQl7ICJrbWVtIiwJY21kX2ttZW0sCTAgfSwKKwkJeyAibG9jayIsCWNtZF9sb2NrLAkwIH0sCiAJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciBleHRbXSA9IFNUUklQX0VYVEVOU0lPTjsKQEAgLTM4OCw3ICszOTEsNyBAQAogLyogbWluaSAvcHJvYy9tb3VudHMgcGFyc2VyOiBzZWFyY2hpbmcgZm9yICJeYmxhaCAvbW91bnQvcG9pbnQgZGVidWdmcyIgKi8KIHN0YXRpYyB2b2lkIGdldF9kZWJ1Z2ZzX21udHB0KHZvaWQpCiB7Ci0JY29uc3QgY2hhciAqcGF0aCA9IGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCk7CisJY29uc3QgY2hhciAqcGF0aCA9IGRlYnVnZnNfbW91bnQoTlVMTCk7CiAKIAlpZiAocGF0aCkKIAkJc3RybmNweShkZWJ1Z2ZzX21udHB0LCBwYXRoLCBzaXplb2YoZGVidWdmc19tbnRwdCkpOwpAQCAtNDQ5LDggKzQ1Miw4IEBACiAJc2V0dXBfcGF0aCgpOwogCiAJd2hpbGUgKDEpIHsKLQkJc3RhdGljIGludCBkb25lX2hlbHAgPSAwOwotCQlzdGF0aWMgaW50IHdhc19hbGlhcyA9IDA7CisJCXN0YXRpYyBpbnQgZG9uZV9oZWxwOworCQlzdGF0aWMgaW50IHdhc19hbGlhczsKIAogCQl3YXNfYWxpYXMgPSBydW5fYXJndigmYXJnYywgJmFyZ3YpOwogCQlpZiAoZXJybm8gIT0gRU5PRU5UKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKaW5kZXggYWY3OGQ5YS4uMDFhNjRhZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYworKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCkBAIC0zMSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJFWFRFUk4uaCIKICNpbmNsdWRlICJwZXJsLmgiCiAjaW5jbHVkZSAiWFNVQi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LmgiCiAKICNpZm5kZWYgUEVSTF9VTlVTRURfVkFSCiAjICBkZWZpbmUgUEVSTF9VTlVTRURfVkFSKHZhcikgaWYgKDApIHZhciA9IHZhcgogI2VuZGlmCiAKLSNsaW5lIDQxICJDb250ZXh0LmMiCisjbGluZSA0MiAiQ29udGV4dC5jIgogCiBYUyhYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fcGMpOyAvKiBwcm90b3R5cGUgdG8gcGFzcyAtV21pc3NpbmctcHJvdG90eXBlcyAqLwogWFMoWFNfUGVyZl9fVHJhY2VfX0NvbnRleHRfY29tbW9uX3BjKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC54cwppbmRleCBmYjc4MDA2Li41NDljZjA0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC54cworKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC54cwpAQCAtMjIsNyArMjIsOCBAQAogI2luY2x1ZGUgIkVYVEVSTi5oIgogI2luY2x1ZGUgInBlcmwuaCIKICNpbmNsdWRlICJYU1VCLmgiCi0jaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC1wZXJsLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQuaCIKIAogTU9EVUxFID0gUGVyZjo6VHJhY2U6OkNvbnRleHQJCVBBQ0tBR0UgPSBQZXJmOjpUcmFjZTo6Q29udGV4dAogUFJPVE9UWVBFUzogRU5BQkxFCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9VdGlsLnBtCmluZGV4IDA1MmYxMzIuLmY4NjljNDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9VdGlsLnBtCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9VdGlsLnBtCkBAIC00NCw3ICs0NCw3IEBACiBzdWIgbnNlY3NfbnNlY3MgewogICAgIG15ICgkbnNlY3MpID0gQF87CiAKLSAgICByZXR1cm4gJG5zZWNzIC0gbnNlY3Nfc2VjcygkbnNlY3MpOworICAgIHJldHVybiAkbnNlY3MgJSAkTlNFQ1NfUEVSX1NFQzsKIH0KIAogc3ViIG5zZWNzX3N0ciB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQKaW5kZXggYzdlYzVkZS4uZTZjYjE0NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlY29yZApAQCAtMSw3ICsxLDIgQEAKICMhL2Jpbi9iYXNoCi1wZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIGttZW06a21hbGxvYyAtZSBpcnE6c29mdGlycV9lbnRyeQotCi0KLQotCi0KK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUga21lbTprbWFsbG9jIC1lIGlycTpzb2Z0aXJxX2VudHJ5IC1lIGttZW06a2ZyZWUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlcG9ydApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjNGEwMy4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIGRlc2NyaXB0aW9uOiB1c2VsZXNzIGJ1dCBleGhhdXN0aXZlIHRlc3Qgc2NyaXB0Ci1wZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsL2NoZWNrLXBlcmYtdHJhY2UucGwKLQotCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4ODVkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjNjYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlN2UyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvZmFpbGVkLXN5c2NhbGxzLnBsCkBAIC0wLDAgKzEsMzggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIGZhaWxlZCBzeXN0ZW0gY2FsbCB0b3RhbHMKKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK3VzZSBsaWIgIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIGxpYiAiLi9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBQZXJmOjpUcmFjZTo6Q29yZTsKK3VzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKK3VzZSBQZXJmOjpUcmFjZTo6VXRpbDsKKworbXkgJWZhaWxlZF9zeXNjYWxsczsKKworc3ViIHJhd19zeXNjYWxsczo6c3lzX2V4aXQKK3sKKwlteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSAgICAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSAgICAkaWQsICRyZXQpID0gQF87CisKKwlpZiAoJHJldCA8IDApIHsKKwkgICAgJGZhaWxlZF9zeXNjYWxsc3skY29tbW9uX2NvbW19Kys7CisJfQorfQorCitzdWIgdHJhY2VfZW5kCit7CisgICAgcHJpbnRmKCJcbmZhaWxlZCBzeXNjYWxscyBieSBjb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJS0yMHMgICUxMHNcbiIsICJjb21tIiwgIiMgZXJyb3JzIik7CisgICAgcHJpbnRmKCIlLTIwcyAgJTZzICAlMTBzXG4iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkY29tbSAoc29ydCB7JGZhaWxlZF9zeXNjYWxsc3skYn0gPD0+ICRmYWlsZWRfc3lzY2FsbHN7JGF9fQorCQkgICAgICBrZXlzICVmYWlsZWRfc3lzY2FsbHMpIHsKKwkgICAgcHJpbnRmKCIlLTIwcyAgJTEwc1xuIiwgJGNvbW0sICRmYWlsZWRfc3lzY2FsbHN7JGNvbW19KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3MDg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29udGV4dC5jLiAgUHl0aG9uIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgorCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpOworCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fcGMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9wYyhzY3JpcHRpbmdfY29udGV4dCk7CisKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHJldHZhbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncyhQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSBQeU9iamVjdCAqYXJncykKK3sKKwlzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKwlQeU9iamVjdCAqY29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNvbnRleHQpKQorCQlyZXR1cm4gTlVMTDsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gUHlDT2JqZWN0X0FzVm9pZFB0cihjb250ZXh0KTsKKwlyZXR2YWwgPSBjb21tb25fZmxhZ3Moc2NyaXB0aW5nX2NvbnRleHQpOworCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCByZXR2YWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fbG9ja19kZXB0aChQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSAgICAgIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9sb2NrX2RlcHRoKHNjcmlwdGluZ19jb250ZXh0KTsKKworCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgcmV0dmFsKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIENvbnRleHRNZXRob2RzW10gPSB7CisJeyAiY29tbW9uX3BjIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9wYywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIHByZWVtcHQgY291bnQgZXZlbnQgZmllbGQgdmFsdWUuIn0sCisJeyAiY29tbW9uX2ZsYWdzIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIGZsYWdzIGV2ZW50IGZpZWxkIHZhbHVlLiJ9LAorCXsgImNvbW1vbl9sb2NrX2RlcHRoIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9sb2NrX2RlcHRoLAorCSAgTUVUSF9WQVJBUkdTLAkiR2V0IHRoZSBjb21tb24gbG9jayBkZXB0aCBldmVudCBmaWVsZCB2YWx1ZS4ifSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpCit7CisJKHZvaWQpIFB5X0luaXRNb2R1bGUoInBlcmZfdHJhY2VfY29udGV4dCIsIENvbnRleHRNZXRob2RzKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzQ2NGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMgQ29yZS5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgdHJhY2UsIGNvcmUgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBieSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitkZWYgYXV0b2RpY3QoKToKKyAgICByZXR1cm4gZGVmYXVsdGRpY3QoYXV0b2RpY3QpCisKK2ZsYWdfZmllbGRzID0gYXV0b2RpY3QoKQorc3ltYm9saWNfZmllbGRzID0gYXV0b2RpY3QoKQorCitkZWYgZGVmaW5lX2ZsYWdfZmllbGQoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZGVsaW0pOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddID0gZGVsaW0KKworZGVmIGRlZmluZV9mbGFnX3ZhbHVlKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIHZhbHVlLCBmaWVsZF9zdHIpOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVt2YWx1ZV0gPSBmaWVsZF9zdHIKKworZGVmIGRlZmluZV9zeW1ib2xpY19maWVsZChldmVudF9uYW1lLCBmaWVsZF9uYW1lKToKKyAgICAjIG5vdGhpbmcgdG8gZG8sIHJlYWxseQorICAgIHBhc3MKKworZGVmIGRlZmluZV9zeW1ib2xpY192YWx1ZShldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSwgZmllbGRfc3RyKToKKyAgICBzeW1ib2xpY19maWVsZHNbZXZlbnRfbmFtZV1bZmllbGRfbmFtZV1bJ3ZhbHVlcyddW3ZhbHVlXSA9IGZpZWxkX3N0cgorCitkZWYgZmxhZ19zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgdmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisKKyAgICBpZiBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKwlwcmludF9kZWxpbSA9IDAKKyAgICAgICAga2V5cyA9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXS5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGlkeCBpbiBrZXlzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorICAgICAgICAgICAgICAgIHN0cmluZyArPSBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorICAgICAgICAgICAgICAgIGlmIHByaW50X2RlbGltIGFuZCBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsnZGVsaW0nXToKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgIiArIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddICsgIiAiCisgICAgICAgICAgICAgICAgc3RyaW5nICs9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgcHJpbnRfZGVsaW0gPSAxCisgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZworCitkZWYgc3ltYm9sX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSk6CisgICAgc3RyaW5nID0gIiIKKworICAgIGlmIHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKyAgICAgICAga2V5cyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ10ua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGZvciBpZHggaW4ga2V5czoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBhbmQgbm90IGlkeDoKKwkJc3RyaW5nID0gc3ltYm9saWNfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgYnJlYWsKKwkgICAgaWYgKHZhbHVlID09IGlkeCk6CisJCXN0cmluZyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3RyaW5nCisKK3RyYWNlX2ZsYWdzID0geyAweDAwOiAiTk9ORSIsIFwKKyAgICAgICAgICAgICAgICAgICAgMHgwMTogIklSUVNfT0ZGIiwgXAorICAgICAgICAgICAgICAgICAgICAweDAyOiAiSVJRU19OT1NVUFBPUlQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDQ6ICJORUVEX1JFU0NIRUQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDg6ICJIQVJESVJRIiwgXAorICAgICAgICAgICAgICAgICAgICAweDEwOiAiU09GVElSUSIgfQorCitkZWYgdHJhY2VfZmxhZ19zdHIodmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisgICAgcHJpbnRfZGVsaW0gPSAwCisKKyAgICBrZXlzID0gdHJhY2VfZmxhZ3Mua2V5cygpCisKKyAgICBmb3IgaWR4IGluIGtleXM6CisJaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorCSAgICBzdHJpbmcgKz0gIk5PTkUiCisJICAgIGJyZWFrCisKKwlpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorCSAgICBpZiBwcmludF9kZWxpbToKKwkJc3RyaW5nICs9ICIgfCAiOworCSAgICBzdHJpbmcgKz0gdHJhY2VfZmxhZ3NbaWR4XQorCSAgICBwcmludF9kZWxpbSA9IDEKKwkgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKQEAgLTAsMCArMSwyNSBAQAorIyBVdGlsLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgbWlzY2VsbGFuZW91cyB1dGlsaXR5IGNvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24uCisKK05TRUNTX1BFUl9TRUMgICAgPSAxMDAwMDAwMDAwCisKK2RlZiBhdmcodG90YWwsIG4pOgorICAgIHJldHVybiB0b3RhbCAvIG4KKworZGVmIG5zZWNzKHNlY3MsIG5zZWNzKToKKyAgICByZXR1cm4gc2VjcyAqIE5TRUNTX1BFUl9TRUMgKyBuc2VjcworCitkZWYgbnNlY3Nfc2Vjcyhuc2Vjcyk6CisgICAgcmV0dXJuIG5zZWNzIC8gTlNFQ1NfUEVSX1NFQworCitkZWYgbnNlY3NfbnNlY3MobnNlY3MpOgorICAgIHJldHVybiBuc2VjcyAlIE5TRUNTX1BFUl9TRUMKKworZGVmIG5zZWNzX3N0cihuc2Vjcyk6CisgICAgc3RyID0gIiU1dS4lMDl1IiAlIChuc2Vjc19zZWNzKG5zZWNzKSwgbnNlY3NfbnNlY3MobnNlY3MpKSwKKyAgICByZXR1cm4gc3RyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2V4aXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwYzBhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVwb3J0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIGZhaWxlZCBzeXNjYWxscywgYnkgcGlkCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQucHkgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YThjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVjb3JkCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNDRkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMsIGJ5IHBpZAorIyBhcmdzOiBbY29tbV0KK3BlcmYgdHJhY2UgLXMgfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlY29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE4YzUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjZhYTYxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHN5c2NhbGwgY291bnRzCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5ICQxCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2NoZWNrLXBlcmYtdHJhY2UucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2NoZWNrLXBlcmYtdHJhY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0ZDkzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weQpAQCAtMCwwICsxLDgzIEBACisjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgorIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIFRoaXMgc2NyaXB0IHRlc3RzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBmbGFnIGFuZCBzeW1ib2wKKyMgc3RyaW5ncywgY29tbW9uX3h4eCgpIGNhbGxzIGJhY2sgaW50byBwZXJmLCBiZWdpbiwgZW5kLCB1bmhhbmRsZWQKKyMgZXZlbnRzLCBldGMuICBCYXNpY2FsbHksIGlmIHRoaXMgc2NyaXB0IHJ1bnMgc3VjY2Vzc2Z1bGx5IGFuZAorIyBkaXNwbGF5cyBleHBlY3RlZCByZXN1bHRzLCBQeXRob24gc2NyaXB0aW5nIHN1cHBvcnQgc2hvdWxkIGJlIG9rLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIENvcmUgaW1wb3J0ICoKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCisKK3VuaGFuZGxlZCA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcHJpbnQgInRyYWNlX2JlZ2luIgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorICAgICAgICBwcmludF91bmhhbmRsZWQoKQorCitkZWYgaXJxX19zb2Z0aXJxX2VudHJ5KGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJdmVjKToKKwkJcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKworICAgICAgICAgICAgICAgIHByaW50X3VuY29tbW9uKGNvbnRleHQpCisKKwkJcHJpbnQgInZlYz0lc1xuIiAlIFwKKwkJKHN5bWJvbF9zdHIoImlycV9fc29mdGlycV9lbnRyeSIsICJ2ZWMiLCB2ZWMpKSwKKworZGVmIGttZW1fX2ttYWxsb2MoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywKKwlnZnBfZmxhZ3MpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisgICAgICAgICAgICAgICAgcHJpbnRfdW5jb21tb24oY29udGV4dCkKKworCQlwcmludCAiY2FsbF9zaXRlPSV1LCBwdHI9JXUsIGJ5dGVzX3JlcT0ldSwgIiBcCisJCSJieXRlc19hbGxvYz0ldSwgZ2ZwX2ZsYWdzPSVzXG4iICUgXAorCQkoY2FsbF9zaXRlLCBwdHIsIGJ5dGVzX3JlcSwgYnl0ZXNfYWxsb2MsCisKKwkJZmxhZ19zdHIoImttZW1fX2ttYWxsb2MiLCAiZ2ZwX2ZsYWdzIiwgZ2ZwX2ZsYWdzKSksCisKK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOgorICAgIHRyeToKKyAgICAgICAgdW5oYW5kbGVkW2V2ZW50X25hbWVdICs9IDEKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICB1bmhhbmRsZWRbZXZlbnRfbmFtZV0gPSAxCisKK2RlZiBwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY3B1LCBzZWNzLCBuc2VjcywgcGlkLCBjb21tKToKKwlwcmludCAiJS0yMHMgJTV1ICUwNXUuJTA5dSAlOHUgJS0yMHMgIiAlIFwKKwkoZXZlbnRfbmFtZSwgY3B1LCBzZWNzLCBuc2VjcywgcGlkLCBjb21tKSwKKworIyBwcmludCB0cmFjZSBmaWVsZHMgbm90IGluY2x1ZGVkIGluIGhhbmRsZXIgYXJncworZGVmIHByaW50X3VuY29tbW9uKGNvbnRleHQpOgorICAgIHByaW50ICJjb21tb25fcHJlZW1wdF9jb3VudD0lZCwgY29tbW9uX2ZsYWdzPSVzLCBjb21tb25fbG9ja19kZXB0aD0lZCwgIiBcCisgICAgICAgICUgKGNvbW1vbl9wYyhjb250ZXh0KSwgdHJhY2VfZmxhZ19zdHIoY29tbW9uX2ZsYWdzKGNvbnRleHQpKSwgXAorICAgICAgICAgICAgICAgY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dCkpCisKK2RlZiBwcmludF91bmhhbmRsZWQoKToKKyAgICBrZXlzID0gdW5oYW5kbGVkLmtleXMoKQorICAgIGlmIG5vdCBrZXlzOgorICAgICAgICByZXR1cm4KKworICAgIHByaW50ICJcbnVuaGFuZGxlZCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgZXZlbnRfbmFtZSBpbiBrZXlzOgorCXByaW50ICIlLTQwcyAgJTEwZFxuIiAlIChldmVudF9uYW1lLCB1bmhhbmRsZWRbZXZlbnRfbmFtZV0pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMDIyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weQpAQCAtMCwwICsxLDY4IEBACisjIGZhaWxlZCBzeXN0ZW0gY2FsbCBjb3VudHMsIGJ5IHBpZAorIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIGZhaWxlZCBzeXN0ZW0gY2FsbCB0b3RhbHMsIGJyb2tlbiBkb3duIGJ5IHBpZC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW1dXG4iOworCitmb3JfY29tbSA9IE5vbmUKKworaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJc3lzLmV4aXQodXNhZ2UpCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorCWZvcl9jb21tID0gc3lzLmFyZ3ZbMV0KKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X2Vycm9yX3RvdGFscygpCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19leGl0KGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIHJldCk6CisJaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJCWlmIGNvbW1vbl9jb21tICE9IGZvcl9jb21tOgorCQkJcmV0dXJuCisKKwlpZiByZXQgPCAwOgorCQl0cnk6CisJCQlzeXNjYWxsc1tjb21tb25fY29tbV1bY29tbW9uX3BpZF1baWRdW3JldF0gKz0gMQorCQlleGNlcHQgVHlwZUVycm9yOgorCQkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXVtyZXRdID0gMQorCitkZWYgcHJpbnRfZXJyb3JfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXJyb3JzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBlcnJvcnM6XG5cbiIsCisKKyAgICBwcmludCAiJS0zMHMgICUxMHNcbiIgJSAoImNvbW0gW3BpZF0iLCAiY291bnQiKSwKKyAgICBwcmludCAiJS0zMHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tIiksCisKKyAgICBjb21tX2tleXMgPSBzeXNjYWxscy5rZXlzKCkKKyAgICBmb3IgY29tbSBpbiBjb21tX2tleXM6CisJICAgIHBpZF9rZXlzID0gc3lzY2FsbHNbY29tbV0ua2V5cygpCisJICAgIGZvciBwaWQgaW4gcGlkX2tleXM6CisJCSAgICBwcmludCAiXG4lcyBbJWRdXG4iICUgKGNvbW0sIHBpZCksCisJCSAgICBpZF9rZXlzID0gc3lzY2FsbHNbY29tbV1bcGlkXS5rZXlzKCkKKwkJICAgIGZvciBpZCBpbiBpZF9rZXlzOgorCQkJICAgIHByaW50ICIgIHN5c2NhbGw6ICUtMTZkXG4iICUgKGlkKSwKKwkJCSAgICByZXRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dW3BpZF1baWRdLmtleXMoKQorCQkJICAgIGZvciByZXQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0uaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCAgcmV2ZXJzZSA9IFRydWUpOgorCQkJCSAgICBwcmludCAiICAgIGVyciA9ICUtMjBkICAlMTBkXG4iICUgKHJldCwgdmFsKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3MjJkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5CkBAIC0wLDAgKzEsNjQgQEAKKyMgc3lzdGVtIGNhbGwgY291bnRzLCBieSBwaWQKKyMgKGMpIDIwMTAsIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorIworIyBEaXNwbGF5cyBzeXN0ZW0td2lkZSBzeXN0ZW0gY2FsbCB0b3RhbHMsIGJyb2tlbiBkb3duIGJ5IHN5c2NhbGwuCisjIElmIGEgW2NvbW1dIGFyZyBpcyBzcGVjaWZpZWQsIG9ubHkgc3lzY2FsbHMgY2FsbGVkIGJ5IFtjb21tXSBhcmUgZGlzcGxheWVkLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCisKK3VzYWdlID0gInBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5IFtjb21tXVxuIjsKKworZm9yX2NvbW0gPSBOb25lCisKK2lmIGxlbihzeXMuYXJndikgPiAyOgorCXN5cy5leGl0KHVzYWdlKQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMToKKwlmb3JfY29tbSA9IHN5cy5hcmd2WzFdCisKK3N5c2NhbGxzID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwYXNzCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludF9zeXNjYWxsX3RvdGFscygpCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKwlpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkJaWYgY29tbW9uX2NvbW0gIT0gZm9yX2NvbW06CisJCQlyZXR1cm4KKwl0cnk6CisJCXN5c2NhbGxzW2NvbW1vbl9jb21tXVtjb21tb25fcGlkXVtpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2NvbW1vbl9jb21tXVtjb21tb25fcGlkXVtpZF0gPSAxCisKK2RlZiBwcmludF9zeXNjYWxsX3RvdGFscygpOgorICAgIGlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50cyBmb3IgJXM6XG5cbiIgJSAoZm9yX2NvbW0pLAorICAgIGVsc2U6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGJ5IGNvbW0vcGlkOlxuXG4iLAorCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCJjb21tIFtwaWRdL3N5c2NhbGxzIiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0iKSwKKworICAgIGNvbW1fa2V5cyA9IHN5c2NhbGxzLmtleXMoKQorICAgIGZvciBjb21tIGluIGNvbW1fa2V5czoKKwkgICAgcGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXS5rZXlzKCkKKwkgICAgZm9yIHBpZCBpbiBwaWRfa2V5czoKKwkJICAgIHByaW50ICJcbiVzIFslZF1cbiIgJSAoY29tbSwgcGlkKSwKKwkJICAgIGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXVtwaWRdLmtleXMoKQorCQkgICAgZm9yIGlkLCB2YWwgaW4gc29ydGVkKHN5c2NhbGxzW2NvbW1dW3BpZF0uaXRlcml0ZW1zKCksIFwKKwkJCQkgIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCAgcmV2ZXJzZSA9IFRydWUpOgorCQkJICAgIHByaW50ICIgICUtMzhkICAlMTBkXG4iICUgKGlkLCB2YWwpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3N2U4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKQEAgLTAsMCArMSw1OCBAQAorIyBzeXN0ZW0gY2FsbCBjb3VudHMKKyMgKGMpIDIwMTAsIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorIworIyBEaXNwbGF5cyBzeXN0ZW0td2lkZSBzeXN0ZW0gY2FsbCB0b3RhbHMsIGJyb2tlbiBkb3duIGJ5IHN5c2NhbGwuCisjIElmIGEgW2NvbW1dIGFyZyBpcyBzcGVjaWZpZWQsIG9ubHkgc3lzY2FsbHMgY2FsbGVkIGJ5IFtjb21tXSBhcmUgZGlzcGxheWVkLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCisKK3VzYWdlID0gInBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkgW2NvbW1dXG4iOworCitmb3JfY29tbSA9IE5vbmUKKworaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJc3lzLmV4aXQodXNhZ2UpCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorCWZvcl9jb21tID0gc3lzLmFyZ3ZbMV0KKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X3N5c2NhbGxfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCWlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCQlpZiBjb21tb25fY29tbSAhPSBmb3JfY29tbToKKwkJCXJldHVybgorCXRyeToKKwkJc3lzY2FsbHNbaWRdICs9IDEKKwlleGNlcHQgVHlwZUVycm9yOgorCQlzeXNjYWxsc1tpZF0gPSAxCisKK2RlZiBwcmludF9zeXNjYWxsX3RvdGFscygpOgorICAgIGlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50cyBmb3IgJXM6XG5cbiIgJSAoZm9yX2NvbW0pLAorICAgIGVsc2U6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzOlxuXG4iLAorCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCJldmVudCIsICJjb3VudCIpLAorICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLSIpLAorCisgICAgZm9yIGlkLCB2YWwgaW4gc29ydGVkKHN5c2NhbGxzLml0ZXJpdGVtcygpLCBrZXkgPSBsYW1iZGEoaywgdik6ICh2LCBrKSwgXAorCQkJCSAgcmV2ZXJzZSA9IFRydWUpOgorCSAgICBwcmludCAiJS00MGQgICUxMGRcbiIgJSAoaWQsIHZhbCksCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTA0YjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogYnVpbGQtaWQuYworICoKKyAqIGJ1aWxkLWlkIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsZC1pZC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK3N0YXRpYyBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKwl1OCBjcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIGV2ZW50LT5pcC5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMKSB7CisJCXByX2VycigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCisJCQlldmVudC0+aGVhZGVyLnR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgc2Vzc2lvbiwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKKwkJCSAgICAgIGV2ZW50LT5pcC5pcCwgJmFsKTsKKworCWlmIChhbC5tYXAgIT0gTlVMTCkKKwkJYWwubWFwLT5kc28tPmhpdCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBlcmZfZXZlbnRfb3BzIGJ1aWxkX2lkX19tYXJrX2Rzb19oaXRfb3BzID0geworCS5zYW1wbGUJPSBidWlsZF9pZF9fbWFya19kc29faGl0LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCit9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmggYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk4MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIFBFUkZfQlVJTERfSURfSF8KKyNkZWZpbmUgUEVSRl9CVUlMRF9JRF9IXyAxCisKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisKK2V4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1N2I4My4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0jaW5jbHVkZSAic3ltYm9sLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAidGhyZWFkLmgiCi0jaW5jbHVkZSAic2Vzc2lvbi5oIgotCi1zdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCi0JCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKLXsKLQlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMoc3RydWN0IHBlcmZfZXZlbnRfb3BzICpoYW5kbGVyKQotewotCWlmICghaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3Nfc2FtcGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19tbWFwX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2NvbW1fZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfZm9ya19ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19mb3JrX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19leGl0X2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2xvc3RfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfcmVhZF9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19yZWFkX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc190aHJvdHRsZV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc190aHJvdHRsZV9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfdW50aHJvdHRsZV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqZXZlbnRfX25hbWVbXSA9IHsKLQlbMF0JCQkgPSAiVE9UQUwiLAotCVtQRVJGX1JFQ09SRF9NTUFQXQkgPSAiTU1BUCIsCi0JW1BFUkZfUkVDT1JEX0xPU1RdCSA9ICJMT1NUIiwKLQlbUEVSRl9SRUNPUkRfQ09NTV0JID0gIkNPTU0iLAotCVtQRVJGX1JFQ09SRF9FWElUXQkgPSAiRVhJVCIsCi0JW1BFUkZfUkVDT1JEX1RIUk9UVExFXQkgPSAiVEhST1RUTEUiLAotCVtQRVJGX1JFQ09SRF9VTlRIUk9UVExFXSA9ICJVTlRIUk9UVExFIiwKLQlbUEVSRl9SRUNPUkRfRk9SS10JID0gIkZPUksiLAotCVtQRVJGX1JFQ09SRF9SRUFEXQkgPSAiUkVBRCIsCi0JW1BFUkZfUkVDT1JEX1NBTVBMRV0JID0gIlNBTVBMRSIsCi19OwotCi11bnNpZ25lZCBsb25nIGV2ZW50X190b3RhbFtQRVJGX1JFQ09SRF9NQVhdOwotCi12b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUEVSRl9SRUNPUkRfTUFYOyArK2kpCi0JCXByX2luZm8oIiUxMHMgZXZlbnRzOiAlMTBsZFxuIiwKLQkJCWV2ZW50X19uYW1lW2ldLCBldmVudF9fdG90YWxbaV0pOwotfQotCi1zdGF0aWMgaW50IHByb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCi0JCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKLXsKLQl0cmFjZV9ldmVudChldmVudCk7Ci0KLQlpZiAoZXZlbnQtPmhlYWRlci50eXBlIDwgUEVSRl9SRUNPUkRfTUFYKSB7Ci0JCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF8lcyIsCi0JCQkgICAgKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkgICAgKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJCSAgICBldmVudF9fbmFtZVtldmVudC0+aGVhZGVyLnR5cGVdKTsKLQkJKytldmVudF9fdG90YWxbMF07Ci0JCSsrZXZlbnRfX3RvdGFsW2V2ZW50LT5oZWFkZXIudHlwZV07Ci0JfQotCi0Jc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19tbWFwX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX0NPTU06Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfY29tbV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfbG9zdF9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3JlYWRfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfVEhST1RUTEU6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfdGhyb3R0bGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQlkZWZhdWx0OgotCQlvcHMtPnRvdGFsX3Vua25vd24rKzsKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotaW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhpbnQgaW5wdXQsIHU2NCBvZmZzZXQsIHU2NCBzaXplKQotewotCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiZXY7Ci0JY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0JdTY0IGxpbWl0ID0gb2Zmc2V0ICsgc2l6ZTsKLQlpbnQgZXJyID0gLTE7Ci0KLQl3aGlsZSAob2Zmc2V0IDwgbGltaXQpIHsKLQkJc3RydWN0IGRzbyAqZHNvOwotCQlzc2l6ZV90IGxlbjsKLQotCQlpZiAocmVhZChpbnB1dCwgJmJldiwgc2l6ZW9mKGJldikpICE9IHNpemVvZihiZXYpKQotCQkJZ290byBvdXQ7Ci0KLQkJbGVuID0gYmV2LmhlYWRlci5zaXplIC0gc2l6ZW9mKGJldik7Ci0JCWlmIChyZWFkKGlucHV0LCBmaWxlbmFtZSwgbGVuKSAhPSBsZW4pCi0JCQlnb3RvIG91dDsKLQotCQlkc28gPSBkc29zX19maW5kbmV3KGZpbGVuYW1lKTsKLQkJaWYgKGRzbyAhPSBOVUxMKQotCQkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCAmYmV2LmJ1aWxkX2lkKTsKLQotCQlvZmZzZXQgKz0gYmV2LmhlYWRlci5zaXplOwotCX0KLQllcnIgPSAwOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdGhyZWFkICpwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlbGYsIDApOwotCi0JaWYgKCF0aHJlYWQgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKLQkJcHJfZXJyKCJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKLQkJdGhyZWFkID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gdGhyZWFkOwotfQotCi1pbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAotCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKLXsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwotCXNpemVfdAlwYWdlX3NpemU7Ci0JZXZlbnRfdCAqZXZlbnQ7Ci0JdWludDMyX3Qgc2l6ZTsKLQljaGFyICpidWY7Ci0KLQlpZiAocGVyZl9zZXNzaW9uX19yZWdpc3Rlcl9pZGxlX3RocmVhZChzZWxmKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBlcmZfZXZlbnRfb3BzX19maWxsX2RlZmF1bHRzKG9wcyk7Ci0KLQlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwotCi0JaGVhZCA9IHNlbGYtPmhlYWRlci5kYXRhX29mZnNldDsKLQlzZWxmLT5zYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZSgmc2VsZi0+aGVhZGVyKTsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKG9wcy0+c2FtcGxlX3R5cGVfY2hlY2sgJiYgb3BzLT5zYW1wbGVfdHlwZV9jaGVjayhzZWxmKSA8IDApCi0JCWdvdG8gb3V0X2VycjsKLQotCWlmICghb3BzLT5mdWxsX3BhdGhzKSB7Ci0JCWNoYXIgYmZbUEFUSF9NQVhdOwotCi0JCWlmIChnZXRjd2QoYmYsIHNpemVvZihiZikpID09IE5VTEwpIHsKLQkJCWVyciA9IC1lcnJubzsKLW91dF9nZXRjd2RfZXJyOgotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuIik7Ci0JCQlnb3RvIG91dF9lcnI7Ci0JCX0KLQkJc2VsZi0+Y3dkID0gc3RyZHVwKGJmKTsKLQkJaWYgKHNlbGYtPmN3ZCA9PSBOVUxMKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfZ2V0Y3dkX2VycjsKLQkJfQotCQlzZWxmLT5jd2RsZW4gPSBzdHJsZW4oc2VsZi0+Y3dkKTsKLQl9Ci0KLQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQlvZmZzZXQgKz0gc2hpZnQ7Ci0JaGVhZCAtPSBzaGlmdDsKLQotcmVtYXA6Ci0JYnVmID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdywgUFJPVF9SRUFELAotCQkgICBNQVBfU0hBUkVELCBzZWxmLT5mZCwgb2Zmc2V0KTsKLQlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gbW1hcCBmaWxlXG4iKTsKLQkJZXJyID0gLWVycm5vOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCi1tb3JlOgotCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KLQlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdykgewotCQlpbnQgbXVubWFwX3JldDsKLQotCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQotCQltdW5tYXBfcmV0ID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpOwotCQlhc3NlcnQobXVubWFwX3JldCA9PSAwKTsKLQotCQlvZmZzZXQgKz0gc2hpZnQ7Ci0JCWhlYWQgLT0gc2hpZnQ7Ci0JCWdvdG8gcmVtYXA7Ci0JfQotCi0Jc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKLQotCWR1bXBfcHJpbnRmKCJcbiVwIFslcF06IGV2ZW50OiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZylldmVudC0+aGVhZGVyLnNpemUsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOwotCi0JaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQsIHNlbGYsIG9wcywgb2Zmc2V0LCBoZWFkKSA8IDApIHsKLQotCQlkdW1wX3ByaW50ZigiJXAgWyVwXTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCi0JCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOwotCi0JCS8qCi0JCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCi0JCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgotCQkgKi8KLQotCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQotCQkJaGVhZCAmPSB+N1VMTDsKLQotCQlzaXplID0gODsKLQl9Ci0KLQloZWFkICs9IHNpemU7Ci0KLQlpZiAob2Zmc2V0ICsgaGVhZCA+PSBzZWxmLT5oZWFkZXIuZGF0YV9vZmZzZXQgKyBzZWxmLT5oZWFkZXIuZGF0YV9zaXplKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAob2Zmc2V0ICsgaGVhZCA8IHNlbGYtPnNpemUpCi0JCWdvdG8gbW9yZTsKLQotZG9uZToKLQllcnIgPSAwOwotb3V0X2VycjoKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwppbmRleCAyOGQ1MjBkLi4wOTA1NjAwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGVidWcuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWcuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAKIGludCB2ZXJib3NlID0gMDsKIGludCBkdW1wX3RyYWNlID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCmluZGV4IDA2YjczZWUuLmE4OGZlZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYwpAQCAtMTA2LDE2ICsxMDYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogbW91bnQgdGhlIGRlYnVnZnMgc29tZXdoZXJlICovCisvKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgaWYgaXQncyBub3QgbW91bnRlZCAqLwogCi1pbnQgZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KQorY2hhciAqZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KQogewotCWNoYXIgbW91bnRjbWRbMTI4XTsKLQogCS8qIHNlZSBpZiBpdCdzIGFscmVhZHkgbW91bnRlZCAqLwogCWlmIChkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCgpKSB7CiAJCWRlYnVnZnNfcHJlbW91bnRlZCA9IDE7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZGVidWdmc19tb3VudHBvaW50OwogCX0KIAogCS8qIGlmIG5vdCBtb3VudGVkIGFuZCBubyBhcmd1bWVudCAqLwpAQCAtMTI3LDEzICsxMjUsMTQgQEAKIAkJCW1vdW50cG9pbnQgPSAiL3N5cy9rZXJuZWwvZGVidWciOwogCX0KIAorCWlmIChtb3VudChOVUxMLCBtb3VudHBvaW50LCAiZGVidWdmcyIsIDAsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKiBzYXZlIHRoZSBtb3VudHBvaW50ICovCiAJc3RybmNweShkZWJ1Z2ZzX21vdW50cG9pbnQsIG1vdW50cG9pbnQsIHNpemVvZihkZWJ1Z2ZzX21vdW50cG9pbnQpKTsKKwlkZWJ1Z2ZzX2ZvdW5kID0gMTsKIAotCS8qIG1vdW50IGl0ICovCi0Jc25wcmludGYobW91bnRjbWQsIHNpemVvZihtb3VudGNtZCksCi0JCSAiL2Jpbi9tb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgJXMiLCBtb3VudHBvaW50KTsKLQlyZXR1cm4gc3lzdGVtKG1vdW50Y21kKTsKKwlyZXR1cm4gZGVidWdmc19tb3VudHBvaW50OwogfQogCiAvKiB1bW91bnQgdGhlIGRlYnVnZnMgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmggYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCmluZGV4IDNjZDE0ZjkuLjgzYTAyODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaApAQCAtMTUsNyArMTUsNyBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmRlYnVnZnNfZmluZF9tb3VudHBvaW50KHZvaWQpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoY29uc3QgY2hhciAqZGVidWdmcyk7CiBleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfZW50cnkoY29uc3QgY2hhciAqcGF0aCk7Ci1leHRlcm4gaW50IGRlYnVnZnNfbW91bnQoY29uc3QgY2hhciAqbW91bnRwb2ludCk7CitleHRlcm4gY2hhciAqZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KTsKIGV4dGVybiBpbnQgZGVidWdmc191bW91bnQodm9pZCk7CiBleHRlcm4gaW50IGRlYnVnZnNfd3JpdGUoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKnZhbHVlKTsKIGV4dGVybiBpbnQgZGVidWdmc19yZWFkKGNvbnN0IGNoYXIgKmVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggOGE5ZTZiYS4uNzA1ZWM2MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTgsOCArOCw3IEBACiAjaW5jbHVkZSAidGhyZWFkLmgiCiAKIHN0YXRpYyBwaWRfdCBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZF90IHBpZCwgaW50IGZ1bGwsCi0JCQkJICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCisJCQkJICAgIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlldmVudF90IGV2OwpAQCAtOTEsOCArOTAsNyBAQAogfQogCiBzdGF0aWMgaW50IGV2ZW50X19zeW50aGVzaXplX21tYXBfZXZlbnRzKHBpZF90IHBpZCwgcGlkX3QgdGdpZCwKLQkJCQkJIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAorCQkJCQkgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKQEAgLTExMiw3ICsxMTAsMTAgQEAKIAl3aGlsZSAoMSkgewogCQljaGFyIGJmW0JVRlNJWl0sICpwYmYgPSBiZjsKIAkJZXZlbnRfdCBldiA9IHsKLQkJCS5oZWFkZXIgPSB7IC50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCB9LAorCQkJLmhlYWRlciA9IHsKKwkJCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCisJCQkJLm1pc2MgPSAwLCAvKiBKdXN0IGxpa2UgdGhlIGtlcm5lbCwgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJCSB9LAogCQl9OwogCQlpbnQgbjsKIAkJc2l6ZV90IHNpemU7CkBAIC0xNTYsOSArMTU3LDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLAotCQkJICAgICBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAoraW50IGV2ZW50X19zeW50aGVzaXplX21vZHVsZXMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPmttYXBzLm1hcHNbTUFQX19GVU5DVElPTl0pOworCSAgICAgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJZXZlbnRfdCBldjsKKwkJc2l6ZV90IHNpemU7CisJCXN0cnVjdCBtYXAgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKworCQlpZiAocG9zLT5kc28tPmtlcm5lbCkKKwkJCWNvbnRpbnVlOworCisJCXNpemUgPSBBTElHTihwb3MtPmRzby0+bG9uZ19uYW1lX2xlbiArIDEsIHNpemVvZih1NjQpKTsKKwkJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisJCWV2Lm1tYXAuaGVhZGVyLm1pc2MgPSAxOyAvKiBrZXJuZWwgdXNlcyAwIGZvciB1c2VyIHNwYWNlIG1hcHMsIHNlZSBrZXJuZWwvcGVyZl9ldmVudC5jIF9fcGVyZl9ldmVudF9tbWFwICovCisJCWV2Lm1tYXAuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQOworCQlldi5tbWFwLmhlYWRlci5zaXplID0gKHNpemVvZihldi5tbWFwKSAtCisJCQkJICAgICAgICAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCQlldi5tbWFwLnN0YXJ0ID0gcG9zLT5zdGFydDsKKwkJZXYubW1hcC5sZW4gICA9IHBvcy0+ZW5kIC0gcG9zLT5zdGFydDsKKworCQltZW1jcHkoZXYubW1hcC5maWxlbmFtZSwgcG9zLT5kc28tPmxvbmdfbmFtZSwKKwkJICAgICAgIHBvcy0+ZHNvLT5sb25nX25hbWVfbGVuICsgMSk7CisJCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlwaWRfdCB0Z2lkID0gZXZlbnRfX3N5bnRoZXNpemVfY29tbShwaWQsIDEsIHByb2Nlc3MsIHNlc3Npb24pOwpAQCAtMTY3LDggKzE5Nyw3IEBACiAJcmV0dXJuIGV2ZW50X19zeW50aGVzaXplX21tYXBfZXZlbnRzKHBpZCwgdGdpZCwgcHJvY2Vzcywgc2Vzc2lvbik7CiB9CiAKLXZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJRElSICpwcm9jOwpAQCAtMTg5LDYgKzIxOCw1OSBAQAogCWNsb3NlZGlyKHByb2MpOwogfQogCitzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1NjQJICAgc3RhcnQ7Cit9OworCitzdGF0aWMgaW50IGZpbmRfc3ltYm9sX2NiKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwgY2hhciB0eXBlLCB1NjQgc3RhcnQpCit7CisJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgKmFyZ3MgPSBhcmc7CisKKwkvKgorCSAqIE11c3QgYmUgYSBmdW5jdGlvbiBvciBhdCBsZWFzdCBhbiBhbGlhcywgYXMgaW4gUEFSSVNDNjQsIHdoZXJlICJfdGV4dCIgaXMKKwkgKiBhbiAnQScgdG8gdGhlIHNhbWUgYWRkcmVzcyBhcyAiX3N0ZXh0Ii4KKwkgKi8KKwlpZiAoIShzeW1ib2xfdHlwZV9faXNfYSh0eXBlLCBNQVBfX0ZVTkNUSU9OKSB8fAorCSAgICAgIHR5cGUgPT0gJ0EnKSB8fCBzdHJjbXAobmFtZSwgYXJncy0+bmFtZSkpCisJCXJldHVybiAwOworCisJYXJncy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gMTsKK30KKworaW50IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSkKK3sKKwlzaXplX3Qgc2l6ZTsKKwlldmVudF90IGV2ID0geworCQkuaGVhZGVyID0geworCQkJLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQLAorCQkJLm1pc2MgPSAxLCAvKiBrZXJuZWwgdXNlcyAwIGZvciB1c2VyIHNwYWNlIG1hcHMsIHNlZSBrZXJuZWwvcGVyZl9ldmVudC5jIF9fcGVyZl9ldmVudF9tbWFwICovCisJCX0sCisJfTsKKwkvKgorCSAqIFdlIHNob3VsZCBnZXQgdGhpcyBmcm9tIC9zeXMva2VybmVsL3NlY3Rpb25zLy50ZXh0LCBidXQgdGlsbCB0aGF0IGlzCisJICogYXZhaWxhYmxlIHVzZSB0aGlzLCBhbmQgYWZ0ZXIgaXQgaXMgdXNlIHRoaXMgYXMgYSBmYWxsYmFjayBmb3Igb2xkZXIKKwkgKiBrZXJuZWxzLgorCSAqLworCXN0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzIGFyZ3MgPSB7IC5uYW1lID0gc3ltYm9sX25hbWUsIH07CisKKwlpZiAoa2FsbHN5bXNfX3BhcnNlKCIvcHJvYy9rYWxsc3ltcyIsICZhcmdzLCBmaW5kX3N5bWJvbF9jYikgPD0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzaXplID0gc25wcmludGYoZXYubW1hcC5maWxlbmFtZSwgc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpLAorCQkJIltrZXJuZWwua2FsbHN5bXMuJXNdIiwgc3ltYm9sX25hbWUpICsgMTsKKwlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOworCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0gKHNpemVvZihldi5tbWFwLmZpbGVuYW1lKSAtIHNpemUpKTsKKwlldi5tbWFwLnBnb2ZmID0gYXJncy5zdGFydDsKKwlldi5tbWFwLnN0YXJ0ID0gc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5zdGFydDsKKwlldi5tbWFwLmxlbiAgID0gc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgLSBldi5tbWFwLnN0YXJ0IDsKKworCXJldHVybiBwcm9jZXNzKCZldiwgc2Vzc2lvbik7Cit9CisKIHN0YXRpYyB2b2lkIHRocmVhZF9fY29tbV9hZGp1c3Qoc3RydWN0IHRocmVhZCAqc2VsZikKIHsKIAljaGFyICpjb21tID0gc2VsZi0+Y29tbTsKQEAgLTI0MCwyMiArMzIyLDg4IEBACiAKIGludCBldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPm1tYXAucGlkKTsKLQlzdHJ1Y3QgbWFwICptYXAgPSBtYXBfX25ldygmc2VsZi0+bW1hcCwgTUFQX19GVU5DVElPTiwKLQkJCQkgICBzZXNzaW9uLT5jd2QsIHNlc3Npb24tPmN3ZGxlbik7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBtYXAgKm1hcDsKIAotCWR1bXBfcHJpbnRmKCIgJWQvJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAotCQkgICAgc2VsZi0+bW1hcC5waWQsIHNlbGYtPm1tYXAudGlkLAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnN0YXJ0LAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLmxlbiwKLQkJICAgICh2b2lkICopKGxvbmcpc2VsZi0+bW1hcC5wZ29mZiwKLQkJICAgIHNlbGYtPm1tYXAuZmlsZW5hbWUpOworCWR1bXBfcHJpbnRmKCIgJWQvJWQ6IFslI0x4KCUjTHgpIEAgJSNMeF06ICVzXG4iLAorCQkgICAgc2VsZi0+bW1hcC5waWQsIHNlbGYtPm1tYXAudGlkLCBzZWxmLT5tbWFwLnN0YXJ0LAorCQkgICAgc2VsZi0+bW1hcC5sZW4sIHNlbGYtPm1tYXAucGdvZmYsIHNlbGYtPm1tYXAuZmlsZW5hbWUpOworCisJaWYgKHNlbGYtPm1tYXAucGlkID09IDApIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIga21tYXBfcHJlZml4W10gPSAiW2tlcm5lbC5rYWxsc3ltcy4iOworCisJCWlmIChzZWxmLT5tbWFwLmZpbGVuYW1lWzBdID09ICcvJykgeworCQkJY2hhciBzaG9ydF9tb2R1bGVfbmFtZVsxMDI0XTsKKwkJCWNoYXIgKm5hbWUgPSBzdHJyY2hyKHNlbGYtPm1tYXAuZmlsZW5hbWUsICcvJyksICpkb3Q7CisKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJKytuYW1lOyAvKiBza2lwIC8gKi8KKwkJCWRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKwkJCWlmIChkb3QgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQlzbnByaW50ZihzaG9ydF9tb2R1bGVfbmFtZSwgc2l6ZW9mKHNob3J0X21vZHVsZV9uYW1lKSwKKwkJCQkgIlslLipzXSIsIChpbnQpKGRvdCAtIG5hbWUpLCBuYW1lKTsKKwkJCXN0cnhmcmNoYXIoc2hvcnRfbW9kdWxlX25hbWUsICctJywgJ18nKTsKKworCQkJbWFwID0gcGVyZl9zZXNzaW9uX19uZXdfbW9kdWxlX21hcChzZXNzaW9uLAorCQkJCQkJCSAgIHNlbGYtPm1tYXAuc3RhcnQsCisJCQkJCQkJICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisJCQlpZiAobWFwID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJbmFtZSA9IHN0cmR1cChzaG9ydF9tb2R1bGVfbmFtZSk7CisJCQlpZiAobmFtZSA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCW1hcC0+ZHNvLT5zaG9ydF9uYW1lID0gbmFtZTsKKwkJCW1hcC0+ZW5kID0gbWFwLT5zdGFydCArIHNlbGYtPm1tYXAubGVuOworCQl9IGVsc2UgaWYgKG1lbWNtcChzZWxmLT5tbWFwLmZpbGVuYW1lLCBrbW1hcF9wcmVmaXgsCisJCQkJc2l6ZW9mKGttbWFwX3ByZWZpeCkgLSAxKSA9PSAwKSB7CisJCQljb25zdCBjaGFyICpzeW1ib2xfbmFtZSA9IChzZWxmLT5tbWFwLmZpbGVuYW1lICsKKwkJCQkJCSAgIHNpemVvZihrbW1hcF9wcmVmaXgpIC0gMSk7CisJCQkvKgorCQkJICogU2hvdWxkIGJlIHRoZXJlIGFscmVhZHksIGZyb20gdGhlIGJ1aWxkLWlkIHRhYmxlIGluCisJCQkgKiB0aGUgaGVhZGVyLgorCQkJICovCisJCQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBfX2Rzb3NfX2ZpbmRuZXcoJmRzb3NfX2tlcm5lbCwKKwkJCQkJCQkgICAgICJba2VybmVsLmthbGxzeW1zXSIpOworCQkJaWYgKGtlcm5lbCA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCWtlcm5lbC0+a2VybmVsID0gMTsKKwkJCWlmIChfX3BlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHNlc3Npb24sIGtlcm5lbCkgPCAwKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCXNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+c3RhcnQgPSBzZWxmLT5tbWFwLnN0YXJ0OworCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgICA9IHNlbGYtPm1tYXAuc3RhcnQgKyBzZWxmLT5tbWFwLmxlbjsKKwkJCS8qCisJCQkgKiBCZSBhIGJpdCBwYXJhbm9pZCBoZXJlLCBzb21lIHBlcmYuZGF0YSBmaWxlIGNhbWUgd2l0aAorCQkJICogYSB6ZXJvIHNpemVkIHN5bnRoZXNpemVkIE1NQVAgZXZlbnQgZm9yIHRoZSBrZXJuZWwuCisJCQkgKi8KKwkJCWlmIChzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCA9PSAwKQorCQkJCXNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID0gfjBVTDsKKworCQkJcGVyZl9zZXNzaW9uX19zZXRfa2FsbHN5bXNfcmVmX3JlbG9jX3N5bShzZXNzaW9uLCBzeW1ib2xfbmFtZSwKKwkJCQkJCQkJIHNlbGYtPm1tYXAucGdvZmYpOworCQl9CisJCXJldHVybiAwOworCX0KKworCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5tbWFwLnBpZCk7CisJbWFwID0gbWFwX19uZXcoJnNlbGYtPm1tYXAsIE1BUF9fRlVOQ1RJT04sCisJCSAgICAgICBzZXNzaW9uLT5jd2QsIHNlc3Npb24tPmN3ZGxlbik7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwgbWFwID09IE5VTEwpCi0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKLQllbHNlCi0JCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisJCWdvdG8gb3V0X3Byb2JsZW07CiAKKwl0aHJlYWRfX2luc2VydF9tYXAodGhyZWFkLCBtYXApOworCXJldHVybiAwOworCitvdXRfcHJvYmxlbToKKwlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX01NQVAsIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NCwxMSArNDMyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqc2VsZiwKLQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAotCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCi0JCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAotCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLAorCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKKwkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCisJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CiAJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gJnNlbGYtPm1nOwogCkBAIC0zMDMsNyArNDUwLDYgQEAKIAllbHNlIHsKIAkJYWwtPmxldmVsID0gJ0gnOwogCQlhbC0+bWFwID0gTlVMTDsKLQkJYWwtPnN5bSA9IE5VTEw7CiAJCXJldHVybjsKIAl9CiB0cnlfYWdhaW46CkBAIC0zMjIsMTEgKzQ2OCwyMSBAQAogCQkJbWcgPSAmc2Vzc2lvbi0+a21hcHM7CiAJCQlnb3RvIHRyeV9hZ2FpbjsKIAkJfQotCQlhbC0+c3ltID0gTlVMTDsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlhbC0+YWRkciA9IGFsLT5tYXAtPm1hcF9pcChhbC0+bWFwLCBhbC0+YWRkcik7Ci0JCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIHNlc3Npb24sIGFsLT5hZGRyLCBmaWx0ZXIpOwotCX0KK30KKwordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAorCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCisJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3sKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc2VsZiwgc2Vzc2lvbiwgY3B1bW9kZSwgdHlwZSwgYWRkciwgYWwpOworCWlmIChhbC0+bWFwICE9IE5VTEwpCisJCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIGFsLT5hZGRyLCBmaWx0ZXIpOworCWVsc2UKKwkJYWwtPnN5bSA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGRzb19fY2FsY19jb2xfd2lkdGgoc3RydWN0IGRzbyAqc2VsZikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggNjkwYTk2ZC4uNTBhNzEzMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTEsMTAgKzEsMTAgQEAKICNpZm5kZWYgX19QRVJGX1JFQ09SRF9ICiAjZGVmaW5lIF9fUEVSRl9SRUNPUkRfSAogCisjaW5jbHVkZSA8bGltaXRzLmg+CisKICNpbmNsdWRlICIuLi9wZXJmLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlICJtYXAuaCIKIAogLyoKICAqIFBFUkZfU0FNUExFX0lQIHwgUEVSRl9TQU1QTEVfVElEIHwgKgpAQCAtMTAxLDc0ICsxMDEsMTkgQEAKIAogdm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwogCi1lbnVtIG1hcF90eXBlIHsKLQlNQVBfX0ZVTkNUSU9OID0gMCwKLQlNQVBfX1ZBUklBQkxFLAotfTsKLQotI2RlZmluZSBNQVBfX05SX1RZUEVTIChNQVBfX1ZBUklBQkxFICsgMSkKLQotc3RydWN0IG1hcCB7Ci0JdW5pb24gewotCQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOwotCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JfTsKLQl1NjQJCQlzdGFydDsKLQl1NjQJCQllbmQ7Ci0JZW51bSBtYXBfdHlwZQkJdHlwZTsKLQl1NjQJCQlwZ29mZjsKLQl1NjQJCQkoKm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOwotCXU2NAkJCSgqdW5tYXBfaXApKHN0cnVjdCBtYXAgKiwgdTY0KTsKLQlzdHJ1Y3QgZHNvCQkqZHNvOwotfTsKLQotc3RhdGljIGlubGluZSB1NjQgbWFwX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwIC0gbWFwLT5zdGFydCArIG1hcC0+cGdvZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IG1hcF9fdW5tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwICsgbWFwLT5zdGFydCAtIG1hcC0+cGdvZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IGlkZW50aXR5X19tYXBfaXAoc3RydWN0IG1hcCAqbWFwIF9fdXNlZCwgdTY0IGlwKQotewotCXJldHVybiBpcDsKLX0KLQotc3RydWN0IHN5bWJvbDsKLQotdHlwZWRlZiBpbnQgKCpzeW1ib2xfZmlsdGVyX3QpKHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKLQotdm9pZCBtYXBfX2luaXQoc3RydWN0IG1hcCAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAotCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBwZ29mZiwgc3RydWN0IGRzbyAqZHNvKTsKLXN0cnVjdCBtYXAgKm1hcF9fbmV3KHN0cnVjdCBtbWFwX2V2ZW50ICpldmVudCwgZW51bSBtYXBfdHlwZSwKLQkJICAgICBjaGFyICpjd2QsIGludCBjd2RsZW4pOwotdm9pZCBtYXBfX2RlbGV0ZShzdHJ1Y3QgbWFwICpzZWxmKTsKLXN0cnVjdCBtYXAgKm1hcF9fY2xvbmUoc3RydWN0IG1hcCAqc2VsZik7Ci1pbnQgbWFwX19vdmVybGFwKHN0cnVjdCBtYXAgKmwsIHN0cnVjdCBtYXAgKnIpOwotc2l6ZV90IG1hcF9fZnByaW50ZihzdHJ1Y3QgbWFwICpzZWxmLCBGSUxFICpmcCk7Ci0KIHN0cnVjdCBwZXJmX3Nlc3Npb247CiAKLWludCBtYXBfX2xvYWQoc3RydWN0IG1hcCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQl1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1zdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci12b2lkIG1hcF9fZml4dXBfc3RhcnQoc3RydWN0IG1hcCAqc2VsZik7Ci12b2lkIG1hcF9fZml4dXBfZW5kKHN0cnVjdCBtYXAgKnNlbGYpOwordHlwZWRlZiBpbnQgKCpldmVudF9faGFuZGxlcl90KShldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKLWludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLAotCQkJICAgICBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAoraW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Ci12b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAordm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fc3ludGhlc2l6ZV9rZXJuZWxfbW1hcChldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgY29uc3QgY2hhciAqc3ltYm9sX25hbWUpOworaW50IGV2ZW50X19zeW50aGVzaXplX21vZHVsZXMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIGludCBldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19wcm9jZXNzX2xvc3QoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKaW5kZXggOGEwYmNhNS4uNmM5YWExNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwpAQCAtMSw4ICsxLDEyIEBACisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxieXRlc3dhcC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImhlYWRlci5oIgpAQCAtMTA1LDI0ICsxMDksMjggQEAKIHN0YXRpYyBpbnQgZXZlbnRfY291bnQ7CiBzdGF0aWMgc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSAqZXZlbnRzOwogCi12b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSkKK2ludCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaWYgKHN0cmxlbihuYW1lKSA+IE1BWF9FVkVOVF9OQU1FKQogCQlwcl93YXJuaW5nKCJFdmVudCAlcyB3aWxsIGJlIHRydW5jYXRlZFxuIiwgbmFtZSk7CiAKIAlpZiAoIWV2ZW50cykgewogCQlldmVudHMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpKTsKLQkJaWYgKCFldmVudHMpCi0JCQlkaWUoIm5vbWVtIik7CisJCWlmIChldmVudHMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCX0gZWxzZSB7Ci0JCWV2ZW50cyA9IHJlYWxsb2MoZXZlbnRzLCAoZXZlbnRfY291bnQgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKSk7Ci0JCWlmICghZXZlbnRzKQotCQkJZGllKCJub21lbSIpOworCQlzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlICpuZXZlbnRzOworCisJCW5ldmVudHMgPSByZWFsbG9jKGV2ZW50cywgKGV2ZW50X2NvdW50ICsgMSkgKiBzaXplb2YoKmV2ZW50cykpOworCQlpZiAobmV2ZW50cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWV2ZW50cyA9IG5ldmVudHM7CiAJfQogCW1lbXNldCgmZXZlbnRzW2V2ZW50X2NvdW50XSwgMCwgc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpKTsKIAlldmVudHNbZXZlbnRfY291bnRdLmV2ZW50X2lkID0gaWQ7CiAJc3RybmNweShldmVudHNbZXZlbnRfY291bnRdLm5hbWUsIG5hbWUsIE1BWF9FVkVOVF9OQU1FIC0gMSk7CiAJZXZlbnRfY291bnQrKzsKKwlyZXR1cm4gMDsKIH0KIAogY2hhciAqcGVyZl9oZWFkZXJfX2ZpbmRfZXZlbnQodTY0IGlkKQpAQCAtMTY5LDMxICsxNzcsNDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50IGZkKQotewotI2RlZmluZSBOQU1FX0FMSUdOCTY0Ci0Jc3RydWN0IGRzbyAqcG9zOwotCXN0YXRpYyBjb25zdCBjaGFyIHplcm9fYnVmW05BTUVfQUxJR05dOworI2RlZmluZSBOQU1FX0FMSUdOIDY0CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkgeworc3RhdGljIGludCB3cml0ZV9wYWRkZWQoaW50IGZkLCBjb25zdCB2b2lkICpiZiwgc2l6ZV90IGNvdW50LAorCQkJc2l6ZV90IGNvdW50X2FsaWduZWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgemVyb19idWZbTkFNRV9BTElHTl07CisJaW50IGVyciA9IGRvX3dyaXRlKGZkLCBiZiwgY291bnQpOworCisJaWYgKCFlcnIpCisJCWVyciA9IGRvX3dyaXRlKGZkLCB6ZXJvX2J1ZiwgY291bnRfYWxpZ25lZCAtIGNvdW50KTsKKworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkJXAorCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQkJXAorCQkJY29udGludWU7CQlcCisJCWVsc2UKKworc3RhdGljIGludCBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdTE2IG1pc2MsIGludCBmZCkKK3sKKwlzdHJ1Y3QgZHNvICpwb3M7CisKKwlkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkgewogCQlpbnQgZXJyOwogCQlzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgYjsKIAkJc2l6ZV90IGxlbjsKIAotCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQorCQlpZiAoIXBvcy0+aGl0KQogCQkJY29udGludWU7CiAJCWxlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7CiAJCWxlbiA9IEFMSUdOKGxlbiwgTkFNRV9BTElHTik7CiAJCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKIAkJbWVtY3B5KCZiLmJ1aWxkX2lkLCBwb3MtPmJ1aWxkX2lkLCBzaXplb2YocG9zLT5idWlsZF9pZCkpOworCQliLmhlYWRlci5taXNjID0gbWlzYzsKIAkJYi5oZWFkZXIuc2l6ZSA9IHNpemVvZihiKSArIGxlbjsKIAkJZXJyID0gZG9fd3JpdGUoZmQsICZiLCBzaXplb2YoYikpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWVyciA9IGRvX3dyaXRlKGZkLCBwb3MtPmxvbmdfbmFtZSwgcG9zLT5sb25nX25hbWVfbGVuICsgMSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gZG9fd3JpdGUoZmQsIHplcm9fYnVmLCBsZW4gLSBwb3MtPmxvbmdfbmFtZV9sZW4gLSAxKTsKKwkJZXJyID0gd3JpdGVfcGFkZGVkKGZkLCBwb3MtPmxvbmdfbmFtZSwKKwkJCQkgICBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxLCBsZW4pOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjAzLDEyICsyMjgsMTQzIEBACiAKIHN0YXRpYyBpbnQgZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShpbnQgZmQpCiB7Ci0JaW50IGVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmZHNvc19fa2VybmVsLCBmZCk7CisJaW50IGVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmZHNvc19fa2VybmVsLAorCQkJCQkgICAgICBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCwgZmQpOwogCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX191c2VyLCBmZCk7CisJCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmZHNvc19fdXNlciwKKwkJCQkJCSAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLCBmZCk7CiAJcmV0dXJuIGVycjsKIH0KIAoraW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSBtYWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSBtYWxsb2Moc2l6ZSksICp0YXJnZXRuYW1lOworCWludCBsZW4sIGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCWxlbiA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplLCAiJXMlcyVzIiwKKwkJICAgICAgIGRlYnVnZGlyLCBpc19rYWxsc3ltcyA/ICIvIiA6ICIiLCBuYW1lKTsKKwlpZiAobWtkaXJfcChmaWxlbmFtZSwgMDc1NSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihmaWxlbmFtZSArIGxlbiwgc2l6ZW9mKGZpbGVuYW1lKSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGZpbGVuYW1lLCBGX09LKSkgeworCQlpZiAoaXNfa2FsbHN5bXMpIHsKKwkJCSBpZiAoY29weWZpbGUoIi9wcm9jL2thbGxzeW1zIiwgZmlsZW5hbWUpKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCX0gZWxzZSBpZiAobGluayhuYW1lLCBmaWxlbmFtZSkgJiYgY29weWZpbGUobmFtZSwgZmlsZW5hbWUpKQorCQkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlsZW4gPSBzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzIiwKKwkJICAgICAgIGRlYnVnZGlyLCBzYnVpbGRfaWQpOworCisJaWYgKGFjY2VzcyhsaW5rbmFtZSwgWF9PSykgJiYgbWtkaXJfcChsaW5rbmFtZSwgMDc1NSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihsaW5rbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCArIDIpOworCXRhcmdldG5hbWUgPSBmaWxlbmFtZSArIHN0cmxlbihkZWJ1Z2RpcikgLSA1OworCW1lbWNweSh0YXJnZXRuYW1lLCAiLi4vLi4iLCA1KTsKKworCWlmIChzeW1saW5rKHRhcmdldG5hbWUsIGxpbmtuYW1lKSA9PSAwKQorCQllcnIgPSAwOworb3V0X2ZyZWU6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShsaW5rbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2IoY29uc3QgdTggKmJ1aWxkX2lkLCBzaXplX3QgYnVpbGRfaWRfc2l6ZSwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkJIGJvb2wgaXNfa2FsbHN5bXMpCit7CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBidWlsZF9pZF9zaXplLCBzYnVpbGRfaWQpOworCisJcmV0dXJuIGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhzYnVpbGRfaWQsIGRlYnVnZGlyLCBuYW1lLCBpc19rYWxsc3ltcyk7Cit9CisKK2ludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOworCWNoYXIgKmZpbGVuYW1lID0gbWFsbG9jKHNpemUpLAorCSAgICAgKmxpbmtuYW1lID0gbWFsbG9jKHNpemUpOworCWludCBlcnIgPSAtMTsKKworCWlmIChmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIHNidWlsZF9pZCArIDIpOworCisJaWYgKGFjY2VzcyhsaW5rbmFtZSwgRl9PSykpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAocmVhZGxpbmsobGlua25hbWUsIGZpbGVuYW1lLCBzaXplKSA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAodW5saW5rKGxpbmtuYW1lKSkKKwkJZ290byBvdXRfZnJlZTsKKworCS8qCisJICogU2luY2UgdGhlIGxpbmsgaXMgcmVsYXRpdmUsIHdlIG11c3QgbWFrZSBpdCBhYnNvbHV0ZToKKwkgKi8KKwlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIGZpbGVuYW1lKTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJZXJyID0gMDsKK291dF9mcmVlOgorCWZyZWUoZmlsZW5hbWUpOworCWZyZWUobGlua25hbWUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHNvX19jYWNoZV9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwlib29sIGlzX2thbGxzeW1zID0gc2VsZi0+a2VybmVsICYmIHNlbGYtPmxvbmdfbmFtZVswXSAhPSAnLyc7CisKKwlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9iKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLAorCQkJCSAgICAgc2VsZi0+bG9uZ19uYW1lLCBkZWJ1Z2RpciwgaXNfa2FsbHN5bXMpOworfQorCitzdGF0aWMgaW50IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCXN0cnVjdCBkc28gKnBvczsKKwlpbnQgZXJyID0gMDsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKQorCQlpZiAoZHNvX19jYWNoZV9idWlsZF9pZChwb3MsIGRlYnVnZGlyKSkKKwkJCWVyciA9IC0xOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkc29zX19jYWNoZV9idWlsZF9pZHModm9pZCkKK3sKKwlpbnQgZXJyX2tlcm5lbCwgZXJyX3VzZXI7CisJY2hhciBkZWJ1Z2RpcltQQVRIX01BWF07CisKKwlzbnByaW50ZihkZWJ1Z2Rpciwgc2l6ZW9mKGRlYnVnZGlyKSwgIiVzLyVzIiwgZ2V0ZW52KCJIT01FIiksCisJCSBERUJVR19DQUNIRV9ESVIpOworCisJaWYgKG1rZGlyKGRlYnVnZGlyLCAwNzU1KSAhPSAwICYmIGVycm5vICE9IEVFWElTVCkKKwkJcmV0dXJuIC0xOworCisJZXJyX2tlcm5lbCA9IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwsIGRlYnVnZGlyKTsKKwllcnJfdXNlciAgID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJmRzb3NfX3VzZXIsIGRlYnVnZGlyKTsKKwlyZXR1cm4gZXJyX2tlcm5lbCB8fCBlcnJfdXNlciA/IC0xIDogMDsKK30KKwogc3RhdGljIGludCBwZXJmX2hlYWRlcl9fYWRkc193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCkKIHsKIAlpbnQgbnJfc2VjdGlvbnM7CkBAIC0yMTcsNyArMzczLDcgQEAKIAl1NjQgc2VjX3N0YXJ0OwogCWludCBpZHggPSAwLCBlcnI7CiAKLQlpZiAoZHNvc19fcmVhZF9idWlsZF9pZHMoKSkKKwlpZiAoZHNvc19fcmVhZF9idWlsZF9pZHModHJ1ZSkpCiAJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChzZWxmLCBIRUFERVJfQlVJTERfSUQpOwogCiAJbnJfc2VjdGlvbnMgPSBiaXRtYXBfd2VpZ2h0KHNlbGYtPmFkZHNfZmVhdHVyZXMsIEhFQURFUl9GRUFUX0JJVFMpOwpAQCAtMjU3LDcgKzQxMyw5IEBACiAJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIGJ1aWxkaWQgdGFibGVcbiIpOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQotCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLSBidWlsZGlkX3NlYy0+b2Zmc2V0OworCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLQorCQkJCQkgIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7CisJCWRzb3NfX2NhY2hlX2J1aWxkX2lkcygpOwogCX0KIAogCWxzZWVrKGZkLCBzZWNfc3RhcnQsIFNFRUtfU0VUKTsKQEAgLTM2MCwzMCArNTE4LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBkb19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAl3aGlsZSAoc2l6ZSkgewogCQlpbnQgcmV0ID0gcmVhZChmZCwgYnVmLCBzaXplKTsKIAotCQlpZiAocmV0IDwgMCkKLQkJCWRpZSgiZmFpbGVkIHRvIHJlYWQiKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJZGllKCJmYWlsZWQgdG8gcmVhZDogbWlzc2luZyBkYXRhIik7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiAtMTsKIAogCQlzaXplIC09IHJldDsKIAkJYnVmICs9IHJldDsKIAl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX2hlYWRlcl9fZ2V0YnVmZmVyNjQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAorCQkJCSAgICBpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJaWYgKGRvX3JlYWQoZmQsIGJ1Ziwgc2l6ZSkpCisJCXJldHVybiAtMTsKKworCWlmIChzZWxmLT5uZWVkc19zd2FwKQorCQltZW1fYnN3YXBfNjQoYnVmLCBzaXplKTsKKworCXJldHVybiAwOwogfQogCiBpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCiAJCQkJICBpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJCQkgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSkKIHsKIAlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKmZlYXRfc2VjOwogCWludCBucl9zZWN0aW9uczsKIAlpbnQgc2VjX3NpemU7CiAJaW50IGlkeCA9IDA7Ci0JaW50IGVyciA9IDAsIGZlYXQgPSAxOworCWludCBlcnIgPSAtMSwgZmVhdCA9IDE7CiAKIAlucl9zZWN0aW9ucyA9IGJpdG1hcF93ZWlnaHQoc2VsZi0+YWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CiAJaWYgKCFucl9zZWN0aW9ucykKQEAgLTM5NywzMyArNTY4LDQ1IEBACiAKIAlsc2VlayhmZCwgc2VsZi0+ZGF0YV9vZmZzZXQgKyBzZWxmLT5kYXRhX3NpemUsIFNFRUtfU0VUKTsKIAotCWRvX3JlYWQoZmQsIGZlYXRfc2VjLCBzZWNfc2l6ZSk7CisJaWYgKHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzZWxmLCBmZCwgZmVhdF9zZWMsIHNlY19zaXplKSkKKwkJZ290byBvdXRfZnJlZTsKIAorCWVyciA9IDA7CiAJd2hpbGUgKGlkeCA8IG5yX3NlY3Rpb25zICYmIGZlYXQgPCBIRUFERVJfTEFTVF9GRUFUVVJFKSB7CiAJCWlmIChwZXJmX2hlYWRlcl9faGFzX2ZlYXQoc2VsZiwgZmVhdCkpIHsKIAkJCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VjID0gJmZlYXRfc2VjW2lkeCsrXTsKIAotCQkJZXJyID0gcHJvY2VzcyhzZWMsIGZlYXQsIGZkKTsKKwkJCWVyciA9IHByb2Nlc3Moc2VjLCBzZWxmLCBmZWF0LCBmZCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJfQogCQkrK2ZlYXQ7CiAJfQotCitvdXRfZnJlZToKIAlmcmVlKGZlYXRfc2VjKTsKIAlyZXR1cm4gZXJyOwotfTsKK30KIAogaW50IHBlcmZfZmlsZV9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgKnNlbGYsCiAJCQkgICBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLCBpbnQgZmQpCiB7CiAJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQlkb19yZWFkKGZkLCBzZWxmLCBzaXplb2YoKnNlbGYpKTsKIAotCWlmIChzZWxmLT5tYWdpYyAgICAgIT0gUEVSRl9NQUdJQyB8fAotCSAgICBzZWxmLT5hdHRyX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBwZXJmX2ZpbGVfYXR0cikpCisJaWYgKGRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpIHx8CisJICAgIG1lbWNtcCgmc2VsZi0+bWFnaWMsIF9fcGVyZl9tYWdpYywgc2l6ZW9mKHNlbGYtPm1hZ2ljKSkpCiAJCXJldHVybiAtMTsKIAorCWlmIChzZWxmLT5hdHRyX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBwZXJmX2ZpbGVfYXR0cikpIHsKKwkJdTY0IGF0dHJfc2l6ZSA9IGJzd2FwXzY0KHNlbGYtPmF0dHJfc2l6ZSk7CisKKwkJaWYgKGF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkKKwkJCXJldHVybiAtMTsKKworCQltZW1fYnN3YXBfNjQoc2VsZiwgb2Zmc2V0b2Yoc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIsCisJCQkJCSAgICBhZGRzX2ZlYXR1cmVzKSk7CisJCXBoLT5uZWVkc19zd2FwID0gdHJ1ZTsKKwl9CisKIAlpZiAoc2VsZi0+c2l6ZSAhPSBzaXplb2YoKnNlbGYpKSB7CiAJCS8qIFN1cHBvcnQgdGhlIHByZXZpb3VzIGZvcm1hdCAqLwogCQlpZiAoc2VsZi0+c2l6ZSA9PSBvZmZzZXRvZih0eXBlb2YoKnNlbGYpLCBhZGRzX2ZlYXR1cmVzKSkKQEAgLTQzMywxOSArNjE2LDMxIEBACiAJfQogCiAJbWVtY3B5KCZwaC0+YWRkc19mZWF0dXJlcywgJnNlbGYtPmFkZHNfZmVhdHVyZXMsCi0JICAgICAgIHNpemVvZihzZWxmLT5hZGRzX2ZlYXR1cmVzKSk7CisJICAgICAgIHNpemVvZihwaC0+YWRkc19mZWF0dXJlcykpOworCS8qCisJICogRklYTUU6IGhhY2sgdGhhdCBhc3N1bWVzIHRoYXQgaWYgd2UgbmVlZCBzd2FwIHRoZSBwZXJmLmRhdGEgZmlsZQorCSAqIG1heSBiZSBjb21pbmcgZnJvbSBhbiBhcmNoIHdpdGggYSBkaWZmZXJlbnQgd29yZC1zaXplLCBlcmdvIGRpZmZlcmVudAorCSAqIERFRklORV9CSVRNQVAgZm9ybWF0LCBpbnZlc3RpZ2F0ZSBtb3JlIGxhdGVyLCBidXQgZm9yIG5vdyBpdHMgbW9zdGx5CisJICogc2FmZSB0byBhc3N1bWUgdGhhdCB3ZSBoYXZlIGEgYnVpbGQtaWQgc2VjdGlvbi4gVHJhY2UgZmlsZXMgcHJvYmFibHkKKwkgKiBoYXZlIHNldmVyYWwgb3RoZXIgaXNzdWVzIGluIHRoaXMgcmVhbG0gYW55d2F5Li4uCisJICovCisJaWYgKHBoLT5uZWVkc19zd2FwKSB7CisJCW1lbXNldCgmcGgtPmFkZHNfZmVhdHVyZXMsIDAsIHNpemVvZihwaC0+YWRkc19mZWF0dXJlcykpOworCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQocGgsIEhFQURFUl9CVUlMRF9JRCk7CisJfQogCiAJcGgtPmV2ZW50X29mZnNldCA9IHNlbGYtPmV2ZW50X3R5cGVzLm9mZnNldDsKLQlwaC0+ZXZlbnRfc2l6ZQkgPSBzZWxmLT5ldmVudF90eXBlcy5zaXplOwotCXBoLT5kYXRhX29mZnNldAkgPSBzZWxmLT5kYXRhLm9mZnNldDsKKwlwaC0+ZXZlbnRfc2l6ZSAgID0gc2VsZi0+ZXZlbnRfdHlwZXMuc2l6ZTsKKwlwaC0+ZGF0YV9vZmZzZXQgID0gc2VsZi0+ZGF0YS5vZmZzZXQ7CiAJcGgtPmRhdGFfc2l6ZQkgPSBzZWxmLT5kYXRhLnNpemU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3Moc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCSAgICAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsCiAJCQkJICAgICAgaW50IGZlYXQsIGludCBmZCkKIHsKLQlpZiAobHNlZWsoZmQsIHNlbGYtPm9mZnNldCwgU0VFS19TRVQpIDwgMCkgeworCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7CiAJCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJUxkIG9mZnNldCBmb3IgZmVhdHVyZSAlZCwgIgogCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOwogCQlyZXR1cm4gMDsKQEAgLTQ1Nyw3ICs2NTIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSEVBREVSX0JVSUxEX0lEOgotCQlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKQorCQlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKHBoLCBmZCwgc2VsZi0+b2Zmc2V0LCBzZWxmLT5zaXplKSkKIAkJCXByX2RlYnVnKCJGYWlsZWQgdG8gcmVhZCBidWlsZGlkcywgY29udGludWluZy4uLlxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00NjksNyArNjY0LDcgQEAKIAogaW50IHBlcmZfaGVhZGVyX19yZWFkKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQogewotCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIGZfaGVhZGVyOworCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyCWZfaGVhZGVyOwogCXN0cnVjdCBwZXJmX2ZpbGVfYXR0cglmX2F0dHI7CiAJdTY0CQkJZl9pZDsKIAlpbnQgbnJfYXR0cnMsIG5yX2lkcywgaSwgajsKQEAgLTQ4Niw3ICs2ODEsOSBAQAogCQlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqYXR0cjsKIAkJb2ZmX3QgdG1wOwogCi0JCWRvX3JlYWQoZmQsICZmX2F0dHIsIHNpemVvZihmX2F0dHIpKTsKKwkJaWYgKHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzZWxmLCBmZCwgJmZfYXR0ciwgc2l6ZW9mKGZfYXR0cikpKQorCQkJZ290byBvdXRfZXJybm87CisKIAkJdG1wID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIAogCQlhdHRyID0gcGVyZl9oZWFkZXJfYXR0cl9fbmV3KCZmX2F0dHIuYXR0cik7CkBAIC00OTcsNyArNjk0LDggQEAKIAkJbHNlZWsoZmQsIGZfYXR0ci5pZHMub2Zmc2V0LCBTRUVLX1NFVCk7CiAKIAkJZm9yIChqID0gMDsgaiA8IG5yX2lkczsgaisrKSB7Ci0JCQlkb19yZWFkKGZkLCAmZl9pZCwgc2l6ZW9mKGZfaWQpKTsKKwkJCWlmIChwZXJmX2hlYWRlcl9fZ2V0YnVmZmVyNjQoc2VsZiwgZmQsICZmX2lkLCBzaXplb2YoZl9pZCkpKQorCQkJCWdvdG8gb3V0X2Vycm5vOwogCiAJCQlpZiAocGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKGF0dHIsIGZfaWQpIDwgMCkgewogCQkJCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShhdHRyKTsKQEAgLTUxNyw3ICs3MTUsOSBAQAogCQlldmVudHMgPSBtYWxsb2MoZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CiAJCWlmIChldmVudHMgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlkb19yZWFkKGZkLCBldmVudHMsIGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUpOworCQlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCBldmVudHMsCisJCQkJCSAgICAgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSkpCisJCQlnb3RvIG91dF9lcnJubzsKIAkJZXZlbnRfY291bnQgPSAgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSAvIHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKTsKIAl9CiAKQEAgLTUyNyw2ICs3MjcsOCBAQAogCiAJc2VsZi0+ZnJvemVuID0gMTsKIAlyZXR1cm4gMDsKK291dF9lcnJubzoKKwlyZXR1cm4gLWVycm5vOwogfQogCiB1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCmluZGV4IGQxMThkMDUuLjgyYTZhZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCkBAIC01Miw2ICs1Myw3IEBACiAJdTY0CQkJZGF0YV9zaXplOwogCXU2NAkJCWV2ZW50X29mZnNldDsKIAl1NjQJCQlldmVudF9zaXplOworCWJvb2wJCQluZWVkc19zd2FwOwogCURFQ0xBUkVfQklUTUFQKGFkZHNfZmVhdHVyZXMsIEhFQURFUl9GRUFUX0JJVFMpOwogfTsKIApAQCAtNjQsNyArNjYsNyBAQAogaW50IHBlcmZfaGVhZGVyX19hZGRfYXR0cihzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCiAJCQkgIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyKTsKIAotdm9pZCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CiBjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpOwogCiBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwpAQCAtODAsNiArODIsMTEgQEAKIAogaW50IHBlcmZfaGVhZGVyX19wcm9jZXNzX3NlY3Rpb25zKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkLAogCQkJCSAgaW50ICgqcHJvY2Vzcykoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCQkJIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsCiAJCQkJCQkgaW50IGZlYXQsIGludCBmZCkpOwogCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMpOworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKTsKKwogI2VuZGlmIC8qIF9fUEVSRl9IRUFERVJfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvaGFzaC5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWY1NzMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmgKQEAgLTAsMCArMSw1IEBACisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9saW51eC9oYXNoLmgiCisKKyNpZm5kZWYgUEVSRl9IQVNIX0gKKyNkZWZpbmUgUEVSRl9IQVNIX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgva2VybmVsLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCAyMWMwMjc0Li5mMjYxMTY1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTAxLDUgKzEwMSw2IEBACiAJZXByaW50ZihuLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfZGVidWcyKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMiwgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIHByX2RlYnVnMyhmbXQsIC4uLikgcHJfZGVidWdOKDMsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9kZWJ1ZzQoZm10LCAuLi4pIHByX2RlYnVnTig0LCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmMgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKaW5kZXggYzRkNTVhMC4uZTUwOWNkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwpAQCAtNSw2ICs1LDExIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJkZWJ1Zy5oIgogCitjb25zdCBjaGFyICptYXBfdHlwZV9fbmFtZVtNQVBfX05SX1RZUEVTXSA9IHsKKwlbTUFQX19GVU5DVElPTl0gPSAiRnVuY3Rpb25zIiwKKwlbTUFQX19WQVJJQUJMRV0gPSAiVmFyaWFibGVzIiwKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Fub25fbWVtb3J5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXJldHVybiBzdHJjbXAoZmlsZW5hbWUsICIvL2Fub24iKSA9PSAwOwpAQCAtNjgsOCArNzMsMTMgQEAKIAkJbWFwX19pbml0KHNlbGYsIHR5cGUsIGV2ZW50LT5zdGFydCwgZXZlbnQtPnN0YXJ0ICsgZXZlbnQtPmxlbiwKIAkJCSAgZXZlbnQtPnBnb2ZmLCBkc28pOwogCi0JCWlmIChzZWxmLT5kc28gPT0gdmRzbyB8fCBhbm9uKQorCQlpZiAoYW5vbikgeworc2V0X2lkZW50aXR5OgogCQkJc2VsZi0+bWFwX2lwID0gc2VsZi0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOworCQl9IGVsc2UgaWYgKHN0cmNtcChmaWxlbmFtZSwgIlt2ZHNvXSIpID09IDApIHsKKwkJCWRzb19fc2V0X2xvYWRlZChkc28sIHNlbGYtPnR5cGUpOworCQkJZ290byBzZXRfaWRlbnRpdHk7CisJCX0KIAl9CiAJcmV0dXJuIHNlbGY7CiBvdXRfZGVsZXRlOgpAQCAtMTA0LDggKzExNCw3IEBACiAKICNkZWZpbmUgRFNPX19ERUxFVEVEICIoZGVsZXRlZCkiCiAKLWludCBtYXBfX2xvYWQoc3RydWN0IG1hcCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoraW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBzZWxmLT5kc28tPmxvbmdfbmFtZTsKIAlpbnQgbnI7CkBAIC0xMTMsNyArMTIyLDcgQEAKIAlpZiAoZHNvX19sb2FkZWQoc2VsZi0+ZHNvLCBzZWxmLT50eXBlKSkKIAkJcmV0dXJuIDA7CiAKLQluciA9IGRzb19fbG9hZChzZWxmLT5kc28sIHNlbGYsIHNlc3Npb24sIGZpbHRlcik7CisJbnIgPSBkc29fX2xvYWQoc2VsZi0+ZHNvLCBzZWxmLCBmaWx0ZXIpOwogCWlmIChuciA8IDApIHsKIAkJaWYgKHNlbGYtPmRzby0+aGFzX2J1aWxkX2lkKSB7CiAJCQljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwpAQCAtMTQ0LDI0ICsxNTMsMjkgQEAKIAogCQlyZXR1cm4gLTE7CiAJfQorCS8qCisJICogT25seSBhcHBsaWVzIHRvIHRoZSBrZXJuZWwsIGFzIGl0cyBzeW10YWJzIGFyZW4ndCByZWxhdGl2ZSBsaWtlIHRoZQorCSAqIG1vZHVsZSBvbmVzLgorCSAqLworCWlmIChzZWxmLT5kc28tPmtlcm5lbCkKKwkJbWFwX19yZWxvY192bWxpbnV4KHNlbGYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQl1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwgdTY0IGFkZHIsCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAobWFwX19sb2FkKHNlbGYsIHNlc3Npb24sIGZpbHRlcikgPCAwKQorCWlmIChtYXBfX2xvYWQoc2VsZiwgZmlsdGVyKSA8IDApCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGRzb19fZmluZF9zeW1ib2woc2VsZi0+ZHNvLCBzZWxmLT50eXBlLCBhZGRyKTsKIH0KIAogc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBtYXAgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7Ci0JaWYgKG1hcF9fbG9hZChzZWxmLCBzZXNzaW9uLCBmaWx0ZXIpIDwgMCkKKwlpZiAobWFwX19sb2FkKHNlbGYsIGZpbHRlcikgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICghZHNvX19zb3J0ZWRfYnlfbmFtZShzZWxmLT5kc28sIHNlbGYtPnR5cGUpKQpAQCAtMjAxLDMgKzIxNSwyMyBAQAogCXJldHVybiBmcHJpbnRmKGZwLCAiICVMeC0lTHggJUx4ICVzXG4iLAogCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+cGdvZmYsIHNlbGYtPmRzby0+bmFtZSk7CiB9CisKKy8qCisgKiBvYmpkdW1wIHdhbnRzL3JlcG9ydHMgYWJzb2x1dGUgSVBzIGZvciBFVF9FWEVDLCBhbmQgUklQcyBmb3IgRVRfRFlOLgorICogbWFwLT5kc28tPmFkanVzdF9zeW1ib2xzPT0xIGZvciBFVF9FWEVDLWxpa2UgY2FzZXMuCisgKi8KK3U2NCBtYXBfX3JpcF8yb2JqZHVtcChzdHJ1Y3QgbWFwICptYXAsIHU2NCByaXApCit7CisJdTY0IGFkZHIgPSBtYXAtPmRzby0+YWRqdXN0X3N5bWJvbHMgPworCQkJbWFwLT51bm1hcF9pcChtYXAsIHJpcCkgOgkvKiBSSVAgLT4gSVAgKi8KKwkJCXJpcDsKKwlyZXR1cm4gYWRkcjsKK30KKwordTY0IG1hcF9fb2JqZHVtcF8yaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgYWRkcikKK3sKKwl1NjQgaXAgPSBtYXAtPmRzby0+YWRqdXN0X3N5bWJvbHMgPworCQkJYWRkciA6CisJCQltYXAtPnVubWFwX2lwKG1hcCwgYWRkcik7CS8qIFJJUCAtPiBJUCAqLworCXJldHVybiBpcDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU2MzY4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX19QRVJGX01BUF9ICisjZGVmaW5lIF9fUEVSRl9NQVBfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSBtYXBfdHlwZSB7CisJTUFQX19GVU5DVElPTiA9IDAsCisJTUFQX19WQVJJQUJMRSwKK307CisKKyNkZWZpbmUgTUFQX19OUl9UWVBFUyAoTUFQX19WQVJJQUJMRSArIDEpCisKK2V4dGVybiBjb25zdCBjaGFyICptYXBfdHlwZV9fbmFtZVtNQVBfX05SX1RZUEVTXTsKKworc3RydWN0IGRzbzsKK3N0cnVjdCByZWZfcmVsb2Nfc3ltOworc3RydWN0IG1hcF9ncm91cHM7CisKK3N0cnVjdCBtYXAgeworCXVuaW9uIHsKKwkJc3RydWN0IHJiX25vZGUJcmJfbm9kZTsKKwkJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCX07CisJdTY0CQkJc3RhcnQ7CisJdTY0CQkJZW5kOworCWVudW0gbWFwX3R5cGUJCXR5cGU7CisJdTY0CQkJcGdvZmY7CisKKwkvKiBpcCAtPiBkc28gcmlwICovCisJdTY0CQkJKCptYXBfaXApKHN0cnVjdCBtYXAgKiwgdTY0KTsKKwkvKiBkc28gcmlwIC0+IGlwICovCisJdTY0CQkJKCp1bm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOworCisJc3RydWN0IGRzbwkJKmRzbzsKK307CisKK3N0cnVjdCBrbWFwIHsKKwlzdHJ1Y3QgcmVmX3JlbG9jX3N5bQkqcmVmX3JlbG9jX3N5bTsKKwlzdHJ1Y3QgbWFwX2dyb3Vwcwkqa21hcHM7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWFwICptYXBfX2ttYXAoc3RydWN0IG1hcCAqc2VsZikKK3sKKwlyZXR1cm4gKHN0cnVjdCBrbWFwICopKHNlbGYgKyAxKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgbWFwX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwIC0gbWFwLT5zdGFydCArIG1hcC0+cGdvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG1hcF9fdW5tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwICsgbWFwLT5zdGFydCAtIG1hcC0+cGdvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGlkZW50aXR5X19tYXBfaXAoc3RydWN0IG1hcCAqbWFwIF9fdXNlZCwgdTY0IGlwKQoreworCXJldHVybiBpcDsKK30KKworCisvKiByaXAvaXAgPC0+IGFkZHIgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYG9iamR1bXAgLS1zdGFydC1hZGRyZXNzPWAgKi8KK3U2NCBtYXBfX3JpcF8yb2JqZHVtcChzdHJ1Y3QgbWFwICptYXAsIHU2NCByaXApOwordTY0IG1hcF9fb2JqZHVtcF8yaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgYWRkcik7CisKK3N0cnVjdCBzeW1ib2w7CitzdHJ1Y3QgbW1hcF9ldmVudDsKKwordHlwZWRlZiBpbnQgKCpzeW1ib2xfZmlsdGVyX3QpKHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKKwordm9pZCBtYXBfX2luaXQoc3RydWN0IG1hcCAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAorCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBwZ29mZiwgc3RydWN0IGRzbyAqZHNvKTsKK3N0cnVjdCBtYXAgKm1hcF9fbmV3KHN0cnVjdCBtbWFwX2V2ZW50ICpldmVudCwgZW51bSBtYXBfdHlwZSwKKwkJICAgICBjaGFyICpjd2QsIGludCBjd2RsZW4pOwordm9pZCBtYXBfX2RlbGV0ZShzdHJ1Y3QgbWFwICpzZWxmKTsKK3N0cnVjdCBtYXAgKm1hcF9fY2xvbmUoc3RydWN0IG1hcCAqc2VsZik7CitpbnQgbWFwX19vdmVybGFwKHN0cnVjdCBtYXAgKmwsIHN0cnVjdCBtYXAgKnIpOworc2l6ZV90IG1hcF9fZnByaW50ZihzdHJ1Y3QgbWFwICpzZWxmLCBGSUxFICpmcCk7CisKK2ludCBtYXBfX2xvYWQoc3RydWN0IG1hcCAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXAgKnNlbGYsCisJCQkJdTY0IGFkZHIsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBtYXAgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwordm9pZCBtYXBfX2ZpeHVwX3N0YXJ0KHN0cnVjdCBtYXAgKnNlbGYpOwordm9pZCBtYXBfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwICpzZWxmKTsKKwordm9pZCBtYXBfX3JlbG9jX3ZtbGludXgoc3RydWN0IG1hcCAqc2VsZik7CisKKyNlbmRpZiAvKiBfX1BFUkZfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCBlNWJjMGZiLi4wNWQwYzVjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC00NTAsNyArNDUwLDggQEAKIC8qIHN5cyArICc6JyArIGV2ZW50ICsgJzonICsgZmxhZ3MqLwogI2RlZmluZSBNQVhfRVZPUFRfTEVOCShNQVhfRVZFTlRfTEVOR1RIICogMiArIDIgKyAxMjgpCiBzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKLXBhcnNlX3N1YnN5c3RlbV90cmFjZXBvaW50X2V2ZW50KGNoYXIgKnN5c19uYW1lLCBjaGFyICpmbGFncykKK3BhcnNlX211bHRpcGxlX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsIGNvbnN0IGNoYXIgKmV2dF9leHAsCisJCQkJY2hhciAqZmxhZ3MpCiB7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKIAlzdHJ1Y3QgZGlyZW50ICpldnRfZW50OwpAQCAtNDc0LDYgKzQ3NSw5IEBACiAJCSAgICB8fCAhc3RyY21wKGV2dF9lbnQtPmRfbmFtZSwgImZpbHRlciIpKQogCQkJY29udGludWU7CiAKKwkJaWYgKCFzdHJnbG9ibWF0Y2goZXZ0X2VudC0+ZF9uYW1lLCBldnRfZXhwKSkKKwkJCWNvbnRpbnVlOworCiAJCWxlbiA9IHNucHJpbnRmKGV2ZW50X29wdCwgTUFYX0VWT1BUX0xFTiwgIiVzOiVzJXMlcyIsIHN5c19uYW1lLAogCQkJICAgICAgIGV2dF9lbnQtPmRfbmFtZSwgZmxhZ3MgPyAiOiIgOiAiIiwKIAkJCSAgICAgICBmbGFncyA/OiAiIik7CkBAIC01MjIsOSArNTI2LDEwIEBACiAJaWYgKGV2dF9sZW5ndGggPj0gTUFYX0VWRU5UX0xFTkdUSCkKIAkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAKLQlpZiAoIXN0cmNtcChldnRfbmFtZSwgIioiKSkgeworCWlmIChzdHJwYnJrKGV2dF9uYW1lLCAiKj8iKSkgewogCQkqc3RycCA9IGV2dF9uYW1lICsgZXZ0X2xlbmd0aDsKLQkJcmV0dXJuIHBhcnNlX3N1YnN5c3RlbV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBmbGFncyk7CisJCXJldHVybiBwYXJzZV9tdWx0aXBsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKKwkJCQkJCSAgICAgICBmbGFncyk7CiAJfSBlbHNlCiAJCXJldHVybiBwYXJzZV9zaW5nbGVfdHJhY2Vwb2ludF9ldmVudChzeXNfbmFtZSwgZXZ0X25hbWUsCiAJCQkJCQkgICAgIGV2dF9sZW5ndGgsIGZsYWdzLApAQCAtNzUzLDExICs3NTgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBzdG9yZV9ldmVudF90eXBlKGNvbnN0IGNoYXIgKm9yZ25hbWUpCitzdGF0aWMgaW50IHN0b3JlX2V2ZW50X3R5cGUoY29uc3QgY2hhciAqb3JnbmFtZSkKIHsKIAljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXSwgKmM7CiAJRklMRSAqZmlsZTsKLQlpbnQgaWQ7CisJaW50IGlkLCBuOwogCiAJc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7CiAJc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKQEAgLTc2OSwxMSArNzc0LDE0IEBACiAKIAlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAJaWYgKCFmaWxlKQotCQlyZXR1cm47Ci0JaWYgKGZzY2FuZihmaWxlLCAiJWkiLCAmaWQpIDwgMSkKLQkJZGllKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSUQiKTsKKwkJcmV0dXJuIDA7CisJbiA9IGZzY2FuZihmaWxlLCAiJWkiLCAmaWQpOwogCWZjbG9zZShmaWxlKTsKLQlwZXJmX2hlYWRlcl9fcHVzaF9ldmVudChpZCwgb3JnbmFtZSk7CisJaWYgKG4gPCAxKSB7CisJCXByX2VycigiY2Fubm90IHN0b3JlIGV2ZW50IElEXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudChpZCwgb3JnbmFtZSk7CiB9CiAKIGludCBwYXJzZV9ldmVudHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQpAQCAtNzgyLDcgKzc5MCw4IEBACiAJZW51bSBldmVudF9yZXN1bHQgcmV0OwogCiAJaWYgKHN0cmNocihzdHIsICc6JykpCi0JCXN0b3JlX2V2ZW50X3R5cGUoc3RyKTsKKwkJaWYgKHN0b3JlX2V2ZW50X3R5cGUoc3RyKSA8IDApCisJCQlyZXR1cm4gLTE7CiAKIAlmb3IgKDs7KSB7CiAJCWlmIChucl9jb3VudGVycyA9PSBNQVhfQ09VTlRFUlMpCkBAIC04MzUsMTEgKzg0NCwxMiBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbXSA9IHsKLQkiIiwKIAkiSGFyZHdhcmUgZXZlbnQiLAogCSJTb2Z0d2FyZSBldmVudCIsCiAJIlRyYWNlcG9pbnQgZXZlbnQiLAogCSJIYXJkd2FyZSBjYWNoZSBldmVudCIsCisJIlJhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yIiwKKwkiSGFyZHdhcmUgYnJlYWtwb2ludCIsCiB9OwogCiAvKgpAQCAtODcyLDcgKzg4Miw3IEBACiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKIAkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKLQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9UUkFDRVBPSU5UKzFdKTsKKwkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9UUkFDRVBPSU5UXSk7CiAJCX0KIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJfQpAQCAtODkyLDkgKzkwMiw3IEBACiAJcHJpbnRmKCJMaXN0IG9mIHByZS1kZWZpbmVkIGV2ZW50cyAodG8gYmUgdXNlZCBpbiAtZSk6XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2ZW50X3N5bWJvbHMpOyBpKyssIHN5bXMrKykgewotCQl0eXBlID0gc3ltcy0+dHlwZSArIDE7Ci0JCWlmICh0eXBlID49IEFSUkFZX1NJWkUoZXZlbnRfdHlwZV9kZXNjcmlwdG9ycykpCi0JCQl0eXBlID0gMDsKKwkJdHlwZSA9IHN5bXMtPnR5cGU7CiAKIAkJaWYgKHR5cGUgIT0gcHJldl90eXBlKQogCQkJcHJpbnRmKCJcbiIpOwpAQCAtOTE5LDE3ICs5MjcsMTkgQEAKIAkJCWZvciAoaSA9IDA7IGkgPCBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVg7IGkrKykgewogCQkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAogCQkJCQlldmVudF9jYWNoZV9uYW1lKHR5cGUsIG9wLCBpKSwKLQkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1s0XSk7CisJCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX0hXX0NBQ0hFXSk7CiAJCQl9CiAJCX0KIAl9CiAKIAlwcmludGYoIlxuIik7Ci0JcHJpbnRmKCIgICUtNDJzIFtyYXcgaGFyZHdhcmUgZXZlbnQgZGVzY3JpcHRvcl1cbiIsCi0JCSJyTk5OIik7CisJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCisJCSJyTk5OIiwgZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfUkFXXSk7CiAJcHJpbnRmKCJcbiIpOwogCi0JcHJpbnRmKCIgICUtNDJzIFtoYXJkd2FyZSBicmVha3BvaW50XVxuIiwgIm1lbTo8YWRkcj5bOmFjY2Vzc10iKTsKKwlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwKKwkJCSJtZW06PGFkZHI+WzphY2Nlc3NdIiwKKwkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX0JSRUFLUE9JTlRdKTsKIAlwcmludGYoIlxuIik7CiAKIAlwcmludF90cmFjZXBvaW50X2V2ZW50cygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCBmZGUxN2IwLi44ZjA1Njg4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN0cmxpc3QuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIgIC8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KICNpbmNsdWRlICJwcm9iZS1ldmVudC5oIgogCkBAIC02Miw2ICs2NCw0MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgcGFyc2VfbGluZV9yYW5nZV9kZXNjKGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IGxpbmVfcmFuZ2UgKmxyKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwljaGFyICp0bXA7CisJLyoKKwkgKiA8U3ludGF4PgorCSAqIFNSQzpTTE5bK05VTXwtRUxOXQorCSAqIEZVTkNbOlNMTlsrTlVNfC1FTE5dXQorCSAqLworCXB0ciA9IHN0cmNocihhcmcsICc6Jyk7CisJaWYgKHB0cikgeworCQlsci0+c3RhcnQgPSAodW5zaWduZWQgaW50KXN0cnRvdWwocHRyICsgMSwgJnRtcCwgMCk7CisJCWlmICgqdG1wID09ICcrJykKKwkJCWxyLT5lbmQgPSBsci0+c3RhcnQgKyAodW5zaWduZWQgaW50KXN0cnRvdWwodG1wICsgMSwKKwkJCQkJCQkJICAgICZ0bXAsIDApOworCQllbHNlIGlmICgqdG1wID09ICctJykKKwkJCWxyLT5lbmQgPSAodW5zaWduZWQgaW50KXN0cnRvdWwodG1wICsgMSwgJnRtcCwgMCk7CisJCWVsc2UKKwkJCWxyLT5lbmQgPSAwOworCQlwcl9kZWJ1ZygiTGluZSByYW5nZSBpcyAldSB0byAldVxuIiwgbHItPnN0YXJ0LCBsci0+ZW5kKTsKKwkJaWYgKGxyLT5lbmQgJiYgbHItPnN0YXJ0ID4gbHItPmVuZCkKKwkJCXNlbWFudGljX2Vycm9yKCJTdGFydCBsaW5lIG11c3QgYmUgc21hbGxlciIKKwkJCQkgICAgICAgIiB0aGFuIGVuZCBsaW5lLiIpOworCQlpZiAoKnRtcCAhPSAnXDAnKQorCQkJc2VtYW50aWNfZXJyb3IoIlRhaWxpbmcgd2l0aCBpbnZhbGlkIGNoYXJhY3RlciAnJWQnLiIsCisJCQkJICAgICAgICp0bXApOworCQl0bXAgPSBzdHJuZHVwKGFyZywgKHB0ciAtIGFyZykpOworCX0gZWxzZQorCQl0bXAgPSBzdHJkdXAoYXJnKTsKKworCWlmIChzdHJjaHIodG1wLCAnLicpKQorCQlsci0+ZmlsZSA9IHRtcDsKKwllbHNlCisJCWxyLT5mdW5jdGlvbiA9IHRtcDsKK30KKwogLyogQ2hlY2sgdGhlIG5hbWUgaXMgZ29vZCBmb3IgZXZlbnQvZ3JvdXAgKi8KIHN0YXRpYyBib29sIGNoZWNrX2V2ZW50X25hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTM3MCw3ICs0MDgsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChlcnJubyA9PSBFTk9FTlQpCiAJCQlkaWUoImtwcm9iZV9ldmVudHMgZmlsZSBkb2VzIG5vdCBleGlzdCAtIgotCQkJICAgICIgcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfS1BST0JFX1RSQUNFUi4iKTsKKwkJCSAgICAiIHBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0tQUk9CRV9FVkVOVC4iKTsKIAkJZWxzZQogCQkJZGllKCJDb3VsZCBub3Qgb3BlbiBrcHJvYmVfZXZlbnRzIGZpbGU6ICVzIiwKIAkJCSAgICBzdHJlcnJvcihlcnJubykpOwpAQCAtNDU3LDYgKzQ5NSw4IEBACiAJc3RydWN0IHN0cmxpc3QgKnJhd2xpc3Q7CiAJc3RydWN0IHN0cl9ub2RlICplbnQ7CiAKKwlzZXR1cF9wYWdlcigpOworCiAJbWVtc2V0KCZwcCwgMCwgc2l6ZW9mKHBwKSk7CiAJZmQgPSBvcGVuX2twcm9iZV9ldmVudHMoT19SRE9OTFksIDApOwogCXJhd2xpc3QgPSBnZXRfdHJhY2Vfa3Byb2JlX2V2ZW50X3Jhd2xpc3QoZmQpOwpAQCAtNjc4LDMgKzcxOCw2NiBAQAogCWNsb3NlKGZkKTsKIH0KIAorI2RlZmluZSBMSU5FQlVGX1NJWkUgMjU2CisKK3N0YXRpYyB2b2lkIHNob3dfb25lX2xpbmUoRklMRSAqZnAsIHVuc2lnbmVkIGludCBsLCBib29sIHNraXAsIGJvb2wgc2hvd19udW0pCit7CisJY2hhciBidWZbTElORUJVRl9TSVpFXTsKKwljb25zdCBjaGFyICpjb2xvciA9IFBFUkZfQ09MT1JfQkxVRTsKKworCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisJaWYgKCFza2lwKSB7CisJCWlmIChzaG93X251bSkKKwkJCWZwcmludGYoc3Rkb3V0LCAiJTd1ICAlcyIsIGwsIGJ1Zik7CisJCWVsc2UKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAgICAgICAgICVzIiwgYnVmKTsKKwl9CisKKwl3aGlsZSAoc3RybGVuKGJ1ZikgPT0gTElORUJVRl9TSVpFIC0gMSAmJgorCSAgICAgICBidWZbTElORUJVRl9TSVpFIC0gMl0gIT0gJ1xuJykgeworCQlpZiAoZmdldHMoYnVmLCBMSU5FQlVGX1NJWkUsIGZwKSA9PSBOVUxMKQorCQkJZ290byBlcnJvcjsKKwkJaWYgKCFza2lwKSB7CisJCQlpZiAoc2hvd19udW0pCisJCQkJZnByaW50ZihzdGRvdXQsICIlcyIsIGJ1Zik7CisJCQllbHNlCisJCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiJXMiLCBidWYpOworCQl9CisJfQorCXJldHVybjsKK2Vycm9yOgorCWlmIChmZW9mKGZwKSkKKwkJZGllKCJTb3VyY2UgZmlsZSBpcyBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQuIik7CisJZWxzZQorCQlkaWUoIkZpbGUgcmVhZCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworfQorCit2b2lkIHNob3dfbGluZV9yYW5nZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJdW5zaWduZWQgaW50IGwgPSAxOworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCUZJTEUgKmZwOworCisJc2V0dXBfcGFnZXIoKTsKKworCWlmIChsci0+ZnVuY3Rpb24pCisJCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPmZ1bmN0aW9uLAorCQkJbHItPnN0YXJ0IC0gbHItPm9mZnNldCk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZG91dCwgIjwlczolZD5cbiIsIGxyLT5maWxlLCBsci0+c3RhcnQpOworCisJZnAgPSBmb3Blbihsci0+cGF0aCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkKKwkJZGllKCJGYWlsZWQgdG8gb3BlbiAlczogJXMiLCBsci0+cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkvKiBTa2lwIHRvIHN0YXJ0aW5nIGxpbmUgbnVtYmVyICovCisJd2hpbGUgKGwgPCBsci0+c3RhcnQpCisJCXNob3dfb25lX2xpbmUoZnAsIGwrKywgdHJ1ZSwgZmFsc2UpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsbiwgJmxyLT5saW5lX2xpc3QsIGxpc3QpIHsKKwkJd2hpbGUgKGxuLT5saW5lID4gbCkKKwkJCXNob3dfb25lX2xpbmUoZnAsIChsKyspIC0gbHItPm9mZnNldCwgZmFsc2UsIGZhbHNlKTsKKwkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgdHJ1ZSk7CisJfQorCWZjbG9zZShmcCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCmluZGV4IDdmMWQ0OTkuLjcxMTI4N2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgInByb2JlLWZpbmRlci5oIgogI2luY2x1ZGUgInN0cmxpc3QuaCIKIAorZXh0ZXJuIHZvaWQgcGFyc2VfbGluZV9yYW5nZV9kZXNjKGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IGxpbmVfcmFuZ2UgKmxyKTsKIGV4dGVybiB2b2lkIHBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwLAogCQkJCSAgIGJvb2wgKm5lZWRfZHdhcmYpOwogZXh0ZXJuIGludCBzeW50aGVzaXplX3BlcmZfcHJvYmVfcG9pbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CkBAIC0xNSw2ICsxNiw3IEBACiAJCQkJICAgIGJvb2wgZm9yY2VfYWRkKTsKIGV4dGVybiB2b2lkIGRlbF90cmFjZV9rcHJvYmVfZXZlbnRzKHN0cnVjdCBzdHJsaXN0ICpkZWxsaXN0KTsKIGV4dGVybiB2b2lkIHNob3dfcGVyZl9wcm9iZV9ldmVudHModm9pZCk7CitleHRlcm4gdm9pZCBzaG93X2xpbmVfcmFuZ2Uoc3RydWN0IGxpbmVfcmFuZ2UgKmxyKTsKIAogLyogTWF4aW11bSBpbmRleCBudW1iZXIgb2YgZXZlbnQtbmFtZSBwb3N0Zml4ICovCiAjZGVmaW5lIE1BWF9FVkVOVF9JTkRFWAkxMDI0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKaW5kZXggNGI4NTJjMC4uMWIyMTI0ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtMTQwLDYgKzE0MCwzMSBAQAogCXJldHVybiBmb3VuZDsKIH0KIAorc3RhdGljIGludCBjdV9nZXRfZmlsZW5hbWUoRHdhcmZfRGllIGN1X2RpZSwgRHdhcmZfVW5zaWduZWQgZm5vLCBjaGFyICoqYnVmKQoreworCUR3YXJmX1NpZ25lZCBjbnQsIGk7CisJY2hhciAqKnNyY3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWJ1ZiB8fCAhZm5vKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGR3YXJmX3NyY2ZpbGVzKGN1X2RpZSwgJnNyY3MsICZjbnQsICZfX2R3X2Vycm9yKTsKKwlpZiAocmV0ID09IERXX0RMVl9PSykgeworCQlpZiAoKER3YXJmX1Vuc2lnbmVkKWNudCA+IGZubyAtIDEpIHsKKwkJCSpidWYgPSBzdHJkdXAoc3Jjc1tmbm8gLSAxXSk7CisJCQlyZXQgPSAwOworCQkJcHJfZGVidWcoImZvdW5kIGZpbGVuYW1lOiAlc1xuIiwgKmJ1Zik7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVOT0VOVDsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBzcmNzW2ldLCBEV19ETEFfU1RSSU5HKTsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBzcmNzLCBEV19ETEFfTElTVCk7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisJcmV0dXJuIHJldDsKK30KKwogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwogc3RhdGljIGludCBkaWVfY29tcGFyZV9uYW1lKER3YXJmX0RpZSBkd19kaWUsIGNvbnN0IGNoYXIgKnRuYW1lKQogewpAQCAtNDAyLDExICs0MjcsMTEgQEAKIAl9IGVsc2UgaWYgKG9wID09IERXX09QX3JlZ3gpIHsKIAkJcmVnbiA9IGxvYy0+bHJfbnVtYmVyOwogCX0gZWxzZQotCQlkaWUoIkR3YXJmX09QICVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLCBvcCk7CisJCWRpZSgiRHdhcmZfT1AgJWQgaXMgbm90IHN1cHBvcnRlZC4iLCBvcCk7CiAKIAlyZWdzID0gZ2V0X2FyY2hfcmVnc3RyKHJlZ24pOwogCWlmICghcmVncykKLQkJZGllKCIlbGxkIGV4Y2VlZHMgbWF4IHJlZ2lzdGVyIG51bWJlci5cbiIsIHJlZ24pOworCQlkaWUoIiVsbGQgZXhjZWVkcyBtYXggcmVnaXN0ZXIgbnVtYmVyLiIsIHJlZ24pOwogCiAJaWYgKGRlcmVmKQogCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLApAQCAtNDM4LDcgKzQ2Myw3IEBACiAJcmV0dXJuIDsKIGVycm9yOgogCWRpZSgiRmFpbGVkIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mICVzIGF0IHRoaXMgYWRkcmVzcy5cbiIKLQkgICAgIiBQZXJoYXBzLCBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LlxuIiwgcGYtPnZhcik7CisJICAgICIgUGVyaGFwcywgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4iLCBwZi0+dmFyKTsKIH0KIAogc3RhdGljIGludCB2YXJpYWJsZV9jYWxsYmFjayhzdHJ1Y3QgZGllX2xpbmsgKmRsaW5rLCB2b2lkICpkYXRhKQpAQCAtNDc2LDcgKzUwMSw3IEBACiAJLyogU2VhcmNoIGNoaWxkIGRpZSBmb3IgbG9jYWwgdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzLiAqLwogCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihzcF9kaWUsIHZhcmlhYmxlX2NhbGxiYWNrLCBwZik7CiAJaWYgKCFyZXQpCi0JCWRpZSgiRmFpbGVkIHRvIGZpbmQgJyVzJyBpbiB0aGlzIGZ1bmN0aW9uLlxuIiwgcGYtPnZhcik7CisJCWRpZSgiRmFpbGVkIHRvIGZpbmQgJyVzJyBpbiB0aGlzIGZ1bmN0aW9uLiIsIHBmLT52YXIpOwogfQogCiAvKiBHZXQgYSBmcmFtZSBiYXNlIG9uIHRoZSBhZGRyZXNzICovCkBAIC01NjcsNyArNTkyLDcgQEAKIH0KIAogLyogRmluZCBwcm9iZSBwb2ludCBmcm9tIGl0cyBsaW5lIG51bWJlciAqLwotc3RhdGljIHZvaWQgZmluZF9ieV9saW5lKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHZvaWQgZmluZF9wcm9iZV9wb2ludF9ieV9saW5lKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCUR3YXJmX1NpZ25lZCBjbnQsIGksIGNsbTsKIAlEd2FyZl9MaW5lICpsaW5lczsKQEAgLTYwMiw3ICs2MjcsNyBAQAogCQlyZXQgPSBzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4ocGYtPmN1X2RpZSwKIAkJCQkJICAgICAgIHByb2JlYWRkcl9jYWxsYmFjaywgcGYpOwogCQlpZiAocmV0ID09IDApCi0JCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy5cbiIpOworCQkJZGllKCJQcm9iZSBwb2ludCBpcyBub3QgZm91bmQgaW4gc3VicHJvZ3JhbXMuIik7CiAJCS8qIENvbnRpbnVpbmcsIGJlY2F1c2UgdGFyZ2V0IGxpbmUgbWlnaHQgYmUgaW5saW5lZC4gKi8KIAl9CiAJZHdhcmZfc3JjbGluZXNfZGVhbGxvYyhfX2R3X2RlYnVnLCBsaW5lcywgY250KTsKQEAgLTYyNiw3ICs2NTEsNyBAQAogCQkJCXBmLT5mbm8gPSBkaWVfZ2V0X2RlY2xfZmlsZShkbGluay0+ZGllKTsKIAkJCQlwZi0+bG5vID0gZGllX2dldF9kZWNsX2xpbmUoZGxpbmstPmRpZSkKIAkJCQkJICsgcHAtPmxpbmU7Ci0JCQkJZmluZF9ieV9saW5lKHBmKTsKKwkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUocGYpOwogCQkJCXJldHVybiAxOwogCQkJfQogCQkJaWYgKGRpZV9pbmxpbmVkX3N1YnByb2dyYW0oZGxpbmstPmRpZSkpIHsKQEAgLTY2MSw3ICs2ODYsNyBAQAogCQkJCSAgICAhZGllX2lubGluZWRfc3VicHJvZ3JhbShsay0+ZGllKSkKIAkJCQkJZ290byBmb3VuZDsKIAkJCX0KLQkJCWRpZSgiRmFpbGVkIHRvIGZpbmQgcmVhbCBzdWJwcm9ncmFtLlxuIik7CisJCQlkaWUoIkZhaWxlZCB0byBmaW5kIHJlYWwgc3VicHJvZ3JhbS4iKTsKIGZvdW5kOgogCQkJLyogR2V0IG9mZnNldCBmcm9tIHN1YnByb2dyYW0gKi8KIAkJCXJldCA9IGRpZV93aXRoaW5fc3VicHJvZ3JhbShsay0+ZGllLCBwZi0+YWRkciwgJm9mZnMpOwpAQCAtNjczLDcgKzY5OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmRfYnlfZnVuYyhzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3N0YXRpYyB2b2lkIGZpbmRfcHJvYmVfcG9pbnRfYnlfZnVuYyhzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKIHsKIAlzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4ocGYtPmN1X2RpZSwgcHJvYmVmdW5jX2NhbGxiYWNrLCBwZik7CiB9CkBAIC03MTQsMTAgKzczOSwxMCBAQAogCQkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCiAJCQkJcGYuY3VfYmFzZSA9IDA7CiAJCQlpZiAocHAtPmZ1bmN0aW9uKQotCQkJCWZpbmRfYnlfZnVuYygmcGYpOworCQkJCWZpbmRfcHJvYmVfcG9pbnRfYnlfZnVuYygmcGYpOwogCQkJZWxzZSB7CiAJCQkJcGYubG5vID0gcHAtPmxpbmU7Ci0JCQkJZmluZF9ieV9saW5lKCZwZik7CisJCQkJZmluZF9wcm9iZV9wb2ludF9ieV9saW5lKCZwZik7CiAJCQl9CiAJCX0KIAkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBwZi5jdV9kaWUsIERXX0RMQV9ESUUpOwpAQCAtNzI4LDMgKzc1MywxNTkgQEAKIAlyZXR1cm4gcHAtPmZvdW5kOwogfQogCisKK3N0YXRpYyB2b2lkIGxpbmVfcmFuZ2VfYWRkX2xpbmUoc3RydWN0IGxpbmVfcmFuZ2UgKmxyLCB1bnNpZ25lZCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgbGluZV9ub2RlICpsbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJLyogUmV2ZXJzZSBzZWFyY2gsIGJlY2F1c2UgbmV3IGxpbmUgd2lsbCBiZSB0aGUgbGFzdCBvbmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UobG4sICZsci0+bGluZV9saXN0LCBsaXN0KSB7CisJCWlmIChsbi0+bGluZSA8IGxpbmUpIHsKKwkJCXAgPSAmbG4tPmxpc3Q7CisJCQlnb3RvIGZvdW5kOworCQl9IGVsc2UgaWYgKGxuLT5saW5lID09IGxpbmUpCS8qIEFscmVhZHkgZXhpc3QgKi8KKwkJCXJldHVybiA7CisJfQorCS8qIExpc3QgaXMgZW1wdHksIG9yIHRoZSBzbWFsbGVzdCBlbnRyeSAqLworCXAgPSAmbHItPmxpbmVfbGlzdDsKK2ZvdW5kOgorCXByX2RlYnVnKCJEZWJ1ZzogYWRkIGEgbGluZSAldVxuIiwgbGluZSk7CisJbG4gPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaW5lX25vZGUpKTsKKwlESUVfSUYobG4gPT0gTlVMTCk7CisJbG4tPmxpbmUgPSBsaW5lOworCUlOSVRfTElTVF9IRUFEKCZsbi0+bGlzdCk7CisJbGlzdF9hZGQoJmxuLT5saXN0LCBwKTsKK30KKworLyogRmluZCBsaW5lIHJhbmdlIGZyb20gaXRzIGxpbmUgbnVtYmVyICovCitzdGF0aWMgdm9pZCBmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZShzdHJ1Y3QgbGluZV9maW5kZXIgKmxmKQoreworCUR3YXJmX1NpZ25lZCBjbnQsIGk7CisJRHdhcmZfTGluZSAqbGluZXM7CisJRHdhcmZfVW5zaWduZWQgbGluZW5vID0gMDsKKwlEd2FyZl9VbnNpZ25lZCBmbm87CisJRHdhcmZfQWRkciBhZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl9zcmNsaW5lcyhsZi0+Y3VfZGllLCAmbGluZXMsICZjbnQsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJcmV0ID0gZHdhcmZfbGluZV9zcmNmaWxlbm8obGluZXNbaV0sICZmbm8sICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlpZiAoZm5vICE9IGxmLT5mbm8pCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkd2FyZl9saW5lbm8obGluZXNbaV0sICZsaW5lbm8sICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlpZiAobGYtPmxub19zID4gbGluZW5vIHx8IGxmLT5sbm9fZSA8IGxpbmVubykKKwkJCWNvbnRpbnVlOworCisJCS8qIEZpbHRlciBsaW5lIGluIHRoZSBmdW5jdGlvbiBhZGRyZXNzIHJhbmdlICovCisJCWlmIChsZi0+YWRkcl9zICYmIGxmLT5hZGRyX2UpIHsKKwkJCXJldCA9IGR3YXJmX2xpbmVhZGRyKGxpbmVzW2ldLCAmYWRkciwgJl9fZHdfZXJyb3IpOworCQkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQkJaWYgKGxmLT5hZGRyX3MgPiBhZGRyIHx8IGxmLT5hZGRyX2UgPD0gYWRkcikKKwkJCQljb250aW51ZTsKKwkJfQorCQlsaW5lX3JhbmdlX2FkZF9saW5lKGxmLT5sciwgKHVuc2lnbmVkIGludClsaW5lbm8pOworCX0KKwlkd2FyZl9zcmNsaW5lc19kZWFsbG9jKF9fZHdfZGVidWcsIGxpbmVzLCBjbnQpOworCWlmICghbGlzdF9lbXB0eSgmbGYtPmxyLT5saW5lX2xpc3QpKQorCQlsZi0+Zm91bmQgPSAxOworfQorCisvKiBTZWFyY2ggZnVuY3Rpb24gZnJvbSBmdW5jdGlvbiBuYW1lICovCitzdGF0aWMgaW50IGxpbmVmdW5jX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxpbmVfZmluZGVyICpsZiA9IChzdHJ1Y3QgbGluZV9maW5kZXIgKilkYXRhOworCXN0cnVjdCBsaW5lX3JhbmdlICpsciA9IGxmLT5scjsKKwlEd2FyZl9IYWxmIHRhZzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfdGFnKGRsaW5rLT5kaWUsICZ0YWcsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHRhZyA9PSBEV19UQUdfc3VicHJvZ3JhbSAmJgorCSAgICBkaWVfY29tcGFyZV9uYW1lKGRsaW5rLT5kaWUsIGxyLT5mdW5jdGlvbikgPT0gMCkgeworCQkvKiBHZXQgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhpcyBmdW5jdGlvbiAqLworCQlyZXQgPSBkd2FyZl9oaWdocGMoZGxpbmstPmRpZSwgJmxmLT5hZGRyX2UsICZfX2R3X2Vycm9yKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfT0spCisJCQlyZXQgPSBkd2FyZl9sb3dwYyhkbGluay0+ZGllLCAmbGYtPmFkZHJfcywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKSB7CisJCQlsZi0+YWRkcl9zID0gMDsKKwkJCWxmLT5hZGRyX2UgPSAwOworCQl9CisKKwkJbGYtPmZubyA9IGRpZV9nZXRfZGVjbF9maWxlKGRsaW5rLT5kaWUpOworCQlsci0+b2Zmc2V0ID0gZGllX2dldF9kZWNsX2xpbmUoZGxpbmstPmRpZSk7OworCQlsZi0+bG5vX3MgPSBsci0+b2Zmc2V0ICsgbHItPnN0YXJ0OworCQlpZiAoIWxyLT5lbmQpCisJCQlsZi0+bG5vX2UgPSAoRHdhcmZfVW5zaWduZWQpLTE7CisJCWVsc2UKKwkJCWxmLT5sbm9fZSA9IGxyLT5vZmZzZXQgKyBsci0+ZW5kOworCQlsci0+c3RhcnQgPSBsZi0+bG5vX3M7CisJCWxyLT5lbmQgPSBsZi0+bG5vX2U7CisJCWZpbmRfbGluZV9yYW5nZV9ieV9saW5lKGxmKTsKKwkJLyogSWYgd2UgZmluZCBhIHRhcmdldCBmdW5jdGlvbiwgdGhpcyBzaG91bGQgYmUgZW5kLiAqLworCQlsZi0+Zm91bmQgPSAxOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9mdW5jKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCit7CisJc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKGxmLT5jdV9kaWUsIGxpbmVmdW5jX2NhbGxiYWNrLCBsZik7Cit9CisKK2ludCBmaW5kX2xpbmVfcmFuZ2UoaW50IGZkLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJRHdhcmZfSGFsZiBhZGRyX3NpemUgPSAwOworCUR3YXJmX1Vuc2lnbmVkIG5leHRfY3VoID0gMDsKKwlpbnQgcmV0OworCXN0cnVjdCBsaW5lX2ZpbmRlciBsZiA9IHsubHIgPSBscn07CisKKwlyZXQgPSBkd2FyZl9pbml0KGZkLCBEV19ETENfUkVBRCwgMCwgMCwgJl9fZHdfZGVidWcsICZfX2R3X2Vycm9yKTsKKwlpZiAocmV0ICE9IERXX0RMVl9PSykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwl3aGlsZSAoIWxmLmZvdW5kKSB7CisJCS8qIFNlYXJjaCBDVSAoQ29tcGlsYXRpb24gVW5pdCkgKi8KKwkJcmV0ID0gZHdhcmZfbmV4dF9jdV9oZWFkZXIoX19kd19kZWJ1ZywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSZhZGRyX3NpemUsICZuZXh0X2N1aCwgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKQorCQkJYnJlYWs7CisKKwkJLyogR2V0IHRoZSBESUUoRGVidWdnaW5nIEluZm9ybWF0aW9uIEVudHJ5KSBvZiB0aGlzIENVICovCisJCXJldCA9IGR3YXJmX3NpYmxpbmdvZihfX2R3X2RlYnVnLCAwLCAmbGYuY3VfZGllLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCQkvKiBDaGVjayBpZiB0YXJnZXQgZmlsZSBpcyBpbmNsdWRlZC4gKi8KKwkJaWYgKGxyLT5maWxlKQorCQkJbGYuZm5vID0gY3VfZmluZF9maWxlbm8obGYuY3VfZGllLCBsci0+ZmlsZSk7CisKKwkJaWYgKCFsci0+ZmlsZSB8fCBsZi5mbm8pIHsKKwkJCWlmIChsci0+ZnVuY3Rpb24pCisJCQkJZmluZF9saW5lX3JhbmdlX2J5X2Z1bmMoJmxmKTsKKwkJCWVsc2UgeworCQkJCWxmLmxub19zID0gbHItPnN0YXJ0OworCQkJCWlmICghbHItPmVuZCkKKwkJCQkJbGYubG5vX2UgPSAoRHdhcmZfVW5zaWduZWQpLTE7CisJCQkJZWxzZQorCQkJCQlsZi5sbm9fZSA9IGxyLT5lbmQ7CisJCQkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUoJmxmKTsKKwkJCX0KKwkJCS8qIEdldCB0aGUgcmVhbCBmaWxlIHBhdGggKi8KKwkJCWlmIChsZi5mb3VuZCkKKwkJCQljdV9nZXRfZmlsZW5hbWUobGYuY3VfZGllLCBsZi5mbm8sICZsci0+cGF0aCk7CisJCX0KKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsZi5jdV9kaWUsIERXX0RMQV9ESUUpOworCX0KKwlyZXQgPSBkd2FyZl9maW5pc2goX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlyZXR1cm4gbGYuZm91bmQ7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAppbmRleCBhNDA4NmFhZC4uOTcyYjM4NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1BST0JFX0ZJTkRFUl9ICiAjZGVmaW5lIF9QUk9CRV9GSU5ERVJfSAogCisjaW5jbHVkZSAidXRpbC5oIgorCiAjZGVmaW5lIE1BWF9QQVRIX0xFTgkJIDI1NgogI2RlZmluZSBNQVhfUFJPQkVfQlVGRkVSCTEwMjQKICNkZWZpbmUgTUFYX1BST0JFUwkJIDEyOApAQCAtMzIsOCArMzQsMjYgQEAKIAljaGFyCQkJKnByb2Jlc1tNQVhfUFJPQkVTXTsJLyogT3V0cHV0IGJ1ZmZlcnMgKHdpbGwgYmUgYWxsb2NhdGVkKSovCiB9OwogCisvKiBMaW5lIG51bWJlciBjb250YWluZXIgKi8KK3N0cnVjdCBsaW5lX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1bnNpZ25lZCBpbnQJCWxpbmU7Cit9OworCisvKiBMaW5lIHJhbmdlICovCitzdHJ1Y3QgbGluZV9yYW5nZSB7CisJY2hhcgkJCSpmaWxlOwkJCS8qIEZpbGUgbmFtZSAqLworCWNoYXIJCQkqZnVuY3Rpb247CQkvKiBGdW5jdGlvbiBuYW1lICovCisJdW5zaWduZWQgaW50CQlzdGFydDsJCQkvKiBTdGFydCBsaW5lIG51bWJlciAqLworCXVuc2lnbmVkIGludAkJZW5kOwkJCS8qIEVuZCBsaW5lIG51bWJlciAqLworCXVuc2lnbmVkIGludAkJb2Zmc2V0OwkJCS8qIFN0YXJ0IGxpbmUgb2Zmc2V0ICovCisJY2hhcgkJCSpwYXRoOwkJCS8qIFJlYWwgcGF0aCBuYW1lICovCisJc3RydWN0IGxpc3RfaGVhZAlsaW5lX2xpc3Q7CQkvKiBWaXNpYmxlIGxpbmVzICovCit9OworCiAjaWZuZGVmIE5PX0xJQkRXQVJGCiBleHRlcm4gaW50IGZpbmRfcHJvYmVwb2ludChpbnQgZmQsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApOworZXh0ZXJuIGludCBmaW5kX2xpbmVfcmFuZ2UoaW50IGZkLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogCiAvKiBXb3JrYXJvdW5kIGZvciB1bmRlZmluZWQgX01JUFNfU1pMT05HIGJ1ZyBpbiBsaWJkd2FyZi5oOiAqLwogI2lmbmRlZiBfTUlQU19TWkxPTkcKQEAgLTYwLDYgKzgwLDE5IEBACiAJY2hhcgkJCSpidWY7CQkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCiAJaW50CQkJbGVuOwkJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCiB9OworCitzdHJ1Y3QgbGluZV9maW5kZXIgeworCXN0cnVjdCBsaW5lX3JhbmdlCSpscjsJCQkvKiBUYXJnZXQgbGluZSByYW5nZSAqLworCisJRHdhcmZfVW5zaWduZWQJCWZubzsJCQkvKiBGaWxlIG51bWJlciAqLworCUR3YXJmX1Vuc2lnbmVkCQlsbm9fczsJCQkvKiBTdGFydCBsaW5lIG51bWJlciAqLworCUR3YXJmX1Vuc2lnbmVkCQlsbm9fZTsJCQkvKiBFbmQgbGluZSBudW1iZXIgKi8KKwlEd2FyZl9BZGRyCQlhZGRyX3M7CQkJLyogU3RhcnQgYWRkcmVzcyAqLworCUR3YXJmX0FkZHIJCWFkZHJfZTsJCQkvKiBFbmQgYWRkcmVzcyAqLworCUR3YXJmX0RpZQkJY3VfZGllOwkJCS8qIEN1cnJlbnQgQ1UgKi8KKwlpbnQJCQlmb3VuZDsKK307CisKICNlbmRpZiAvKiBOT19MSUJEV0FSRiAqLwogCiAjZW5kaWYgLypfUFJPQkVfRklOREVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzYzNzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCkBAIC0wLDAgKzEsNTY4IEBACisvKgorICogdHJhY2UtZXZlbnQtcGVybC4gIEZlZWQgcGVyZiB0cmFjZSBldmVudHMgdG8gYW4gZW1iZWRkZWQgUGVybCBpbnRlcnByZXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwuaCIKKyNpbmNsdWRlICIuLi90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSA8RVhURVJOLmg+CisjaW5jbHVkZSA8cGVybC5oPgorCit2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKK3ZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Cit0eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKKwordm9pZCB4c19pbml0KHBUSFgpOworCit2b2lkIHhzX2luaXQocFRIWCkKK3sKKwljb25zdCBjaGFyICpmaWxlID0gX19GSUxFX187CisJZFhTVUJfU1lTOworCisJbmV3WFMoIlBlcmY6OlRyYWNlOjpDb250ZXh0Ojpib290c3RyYXAiLCBib290X1BlcmZfX1RyYWNlX19Db250ZXh0LAorCSAgICAgIGZpbGUpOworCW5ld1hTKCJEeW5hTG9hZGVyOjpib290X0R5bmFMb2FkZXIiLCBib290X0R5bmFMb2FkZXIsIGZpbGUpOworfQorCitJTlRFUlAgbXlfcGVybDsKKworI2RlZmluZSBGVFJBQ0VfTUFYX0VWRU5UCQkJCVwKKwkoKDEgPDwgKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4KSkgLSAxKQorCitzdHJ1Y3QgZXZlbnQgKmV2ZW50c1tGVFJBQ0VfTUFYX0VWRU5UXTsKKworZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CisKK3N0YXRpYyBjaGFyICpjdXJfZmllbGRfbmFtZTsKK3N0YXRpYyBpbnQgemVyb19mbGFnX2F0b207CisKK3N0YXRpYyB2b2lkIGRlZmluZV9zeW1ib2xpY192YWx1ZShjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX3ZhbHVlLAorCQkJCSAgY29uc3QgY2hhciAqZmllbGRfc3RyKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwlkU1A7CisKKwl2YWx1ZSA9IGV2YWxfZmxhZyhmaWVsZF92YWx1ZSk7CisKKwlFTlRFUjsKKwlTQVZFVE1QUzsKKwlQVVNITUFSSyhTUCk7CisKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGV2X25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9uYW1lLCAwKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYodmFsdWUpKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9zdHIsIDApKSk7CisKKwlQVVRCQUNLOworCWlmIChnZXRfY3YoIm1haW46OmRlZmluZV9zeW1ib2xpY192YWx1ZSIsIDApKQorCQljYWxsX3B2KCJtYWluOjpkZWZpbmVfc3ltYm9saWNfdmFsdWUiLCBHX1NDQUxBUik7CisJU1BBR0FJTjsKKwlQVVRCQUNLOworCUZSRUVUTVBTOworCUxFQVZFOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfc3ltYm9saWNfdmFsdWVzKHN0cnVjdCBwcmludF9mbGFnX3N5bSAqZmllbGQsCisJCQkJICAgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCQkgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworCWRlZmluZV9zeW1ib2xpY192YWx1ZShldl9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZC0+dmFsdWUsIGZpZWxkLT5zdHIpOworCWlmIChmaWVsZC0+bmV4dCkKKwkJZGVmaW5lX3N5bWJvbGljX3ZhbHVlcyhmaWVsZC0+bmV4dCwgZXZfbmFtZSwgZmllbGRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9zeW1ib2xpY19maWVsZChjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSAgY29uc3QgY2hhciAqZmllbGRfbmFtZSkKK3sKKwlkU1A7CisKKwlFTlRFUjsKKwlTQVZFVE1QUzsKKwlQVVNITUFSSyhTUCk7CisKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGV2X25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9uYW1lLCAwKSkpOworCisJUFVUQkFDSzsKKwlpZiAoZ2V0X2N2KCJtYWluOjpkZWZpbmVfc3ltYm9saWNfZmllbGQiLCAwKSkKKwkJY2FsbF9wdigibWFpbjo6ZGVmaW5lX3N5bWJvbGljX2ZpZWxkIiwgR19TQ0FMQVIpOworCVNQQUdBSU47CisJUFVUQkFDSzsKKwlGUkVFVE1QUzsKKwlMRUFWRTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2ZsYWdfdmFsdWUoY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmaWVsZF92YWx1ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZpZWxkX3N0cikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJZFNQOworCisJdmFsdWUgPSBldmFsX2ZsYWcoZmllbGRfdmFsdWUpOworCisJRU5URVI7CisJU0FWRVRNUFM7CisJUFVTSE1BUksoU1ApOworCisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihldl9uYW1lLCAwKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfbmFtZSwgMCkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KHZhbHVlKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfc3RyLCAwKSkpOworCisJUFVUQkFDSzsKKwlpZiAoZ2V0X2N2KCJtYWluOjpkZWZpbmVfZmxhZ192YWx1ZSIsIDApKQorCQljYWxsX3B2KCJtYWluOjpkZWZpbmVfZmxhZ192YWx1ZSIsIEdfU0NBTEFSKTsKKwlTUEFHQUlOOworCVBVVEJBQ0s7CisJRlJFRVRNUFM7CisJTEVBVkU7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9mbGFnX3ZhbHVlcyhzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZpZWxkLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSkKK3sKKwlkZWZpbmVfZmxhZ192YWx1ZShldl9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZC0+dmFsdWUsIGZpZWxkLT5zdHIpOworCWlmIChmaWVsZC0+bmV4dCkKKwkJZGVmaW5lX2ZsYWdfdmFsdWVzKGZpZWxkLT5uZXh0LCBldl9uYW1lLCBmaWVsZF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2ZsYWdfZmllbGQoY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpkZWxpbSkKK3sKKwlkU1A7CisKKwlFTlRFUjsKKwlTQVZFVE1QUzsKKwlQVVNITUFSSyhTUCk7CisKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGV2X25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9uYW1lLCAwKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZGVsaW0sIDApKSk7CisKKwlQVVRCQUNLOworCWlmIChnZXRfY3YoIm1haW46OmRlZmluZV9mbGFnX2ZpZWxkIiwgMCkpCisJCWNhbGxfcHYoIm1haW46OmRlZmluZV9mbGFnX2ZpZWxkIiwgR19TQ0FMQVIpOworCVNQQUdBSU47CisJUFVUQkFDSzsKKwlGUkVFVE1QUzsKKwlMRUFWRTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2V2ZW50X3N5bWJvbHMoc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCQkgc3RydWN0IHByaW50X2FyZyAqYXJncykKK3sKKwlzd2l0Y2ggKGFyZ3MtPnR5cGUpIHsKKwljYXNlIFBSSU5UX05VTEw6CisJCWJyZWFrOworCWNhc2UgUFJJTlRfQVRPTToKKwkJZGVmaW5lX2ZsYWdfdmFsdWUoZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsICIwIiwKKwkJCQkgIGFyZ3MtPmF0b20uYXRvbSk7CisJCXplcm9fZmxhZ19hdG9tID0gMDsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GSUVMRDoKKwkJaWYgKGN1cl9maWVsZF9uYW1lKQorCQkJZnJlZShjdXJfZmllbGRfbmFtZSk7CisJCWN1cl9maWVsZF9uYW1lID0gc3RyZHVwKGFyZ3MtPmZpZWxkLm5hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZMQUdTOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+ZmxhZ3MuZmllbGQpOworCQlkZWZpbmVfZmxhZ19maWVsZChldl9uYW1lLCBjdXJfZmllbGRfbmFtZSwgYXJncy0+ZmxhZ3MuZGVsaW0pOworCQlkZWZpbmVfZmxhZ192YWx1ZXMoYXJncy0+ZmxhZ3MuZmxhZ3MsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TWU1CT0w6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5zeW1ib2wuZmllbGQpOworCQlkZWZpbmVfc3ltYm9saWNfZmllbGQoZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUpOworCQlkZWZpbmVfc3ltYm9saWNfdmFsdWVzKGFyZ3MtPnN5bWJvbC5zeW1ib2xzLCBldl9uYW1lLAorCQkJCSAgICAgICBjdXJfZmllbGRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfU1RSSU5HOgorCQlicmVhazsKKwljYXNlIFBSSU5UX1RZUEU6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT50eXBlY2FzdC5pdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9PUDoKKwkJaWYgKHN0cmNtcChhcmdzLT5vcC5vcCwgIjoiKSA9PSAwKQorCQkJemVyb19mbGFnX2F0b20gPSAxOworCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AubGVmdCk7CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5vcC5yaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHdlIHNob3VsZCB3YXJuLi4uICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJncy0+bmV4dCkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqZmluZF9jYWNoZV9ldmVudChpbnQgdHlwZSkKK3sKKwlzdGF0aWMgY2hhciBldl9uYW1lWzI1Nl07CisJc3RydWN0IGV2ZW50ICpldmVudDsKKworCWlmIChldmVudHNbdHlwZV0pCisJCXJldHVybiBldmVudHNbdHlwZV07CisKKwlldmVudHNbdHlwZV0gPSBldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcHJpbnRmKGV2X25hbWUsICIlczo6JXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisKKwlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHZvaWQgcGVybF9wcm9jZXNzX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgaW50IHNpemUgX191bnVzZWQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCBjaGFyICpjb21tKQoreworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCXN0YXRpYyBjaGFyIGhhbmRsZXJbMjU2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgcywgbnM7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwlpbnQgdHlwZTsKKwlpbnQgcGlkOworCisJZFNQOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCisJZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KHR5cGUpOworCWlmICghZXZlbnQpCisJCWRpZSgidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkIiwgdHlwZSk7CisKKwlwaWQgPSB0cmFjZV9wYXJzZV9jb21tb25fcGlkKGRhdGEpOworCisJc3ByaW50ZihoYW5kbGVyLCAiJXM6OiVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOworCisJcyA9IG5zZWNzIC8gTlNFQ1NfUEVSX1NFQzsKKwlucyA9IG5zZWNzIC0gcyAqIE5TRUNTX1BFUl9TRUM7CisKKwlzY3JpcHRpbmdfY29udGV4dC0+ZXZlbnRfZGF0YSA9IGRhdGE7CisKKwlFTlRFUjsKKwlTQVZFVE1QUzsKKwlQVVNITUFSSyhTUCk7CisKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGhhbmRsZXIsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihQVFIySVYoc2NyaXB0aW5nX2NvbnRleHQpKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYoY3B1KSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYocykpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KG5zKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYocGlkKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoY29tbSwgMCkpKTsKKworCS8qIGNvbW1vbiBmaWVsZHMgb3RoZXIgdGhhbiBwaWQgY2FuIGJlIGFjY2Vzc2VkIHZpYSB4c3ViIGZucyAqLworCisJZm9yIChmaWVsZCA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmaWVsZDsgZmllbGQgPSBmaWVsZC0+bmV4dCkgeworCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HKSB7CisJCQlpbnQgb2Zmc2V0OworCQkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX0RZTkFNSUMpIHsKKwkJCQlvZmZzZXQgPSAqKGludCAqKShkYXRhICsgZmllbGQtPm9mZnNldCk7CisJCQkJb2Zmc2V0ICY9IDB4ZmZmZjsKKwkJCX0gZWxzZQorCQkJCW9mZnNldCA9IGZpZWxkLT5vZmZzZXQ7CisJCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KChjaGFyICopZGF0YSArIG9mZnNldCwgMCkpKTsKKwkJfSBlbHNlIHsgLyogRklFTERfSVNfTlVNRVJJQyAqLworCQkJdmFsID0gcmVhZF9zaXplKGRhdGEgKyBmaWVsZC0+b2Zmc2V0LCBmaWVsZC0+c2l6ZSk7CisJCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU0lHTkVEKSB7CisJCQkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zpdih2YWwpKSk7CisJCQl9IGVsc2UgeworCQkJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYodmFsKSkpOworCQkJfQorCQl9CisJfQorCisJUFVUQkFDSzsKKworCWlmIChnZXRfY3YoaGFuZGxlciwgMCkpCisJCWNhbGxfcHYoaGFuZGxlciwgR19TQ0FMQVIpOworCWVsc2UgaWYgKGdldF9jdigibWFpbjo6dHJhY2VfdW5oYW5kbGVkIiwgMCkpIHsKKwkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihoYW5kbGVyLCAwKSkpOworCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KFBUUjJJVihzY3JpcHRpbmdfY29udGV4dCkpKSk7CisJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYoY3B1KSkpOworCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KG5zZWNzKSkpOworCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHBpZCkpKTsKKwkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihjb21tLCAwKSkpOworCQljYWxsX3B2KCJtYWluOjp0cmFjZV91bmhhbmRsZWQiLCBHX1NDQUxBUik7CisJfQorCVNQQUdBSU47CisJUFVUQkFDSzsKKwlGUkVFVE1QUzsKKwlMRUFWRTsKK30KKworc3RhdGljIHZvaWQgcnVuX3N0YXJ0X3N1Yih2b2lkKQoreworCWRTUDsgLyogYWNjZXNzIHRvIFBlcmwgc3RhY2sgKi8KKwlQVVNITUFSSyhTUCk7CisKKwlpZiAoZ2V0X2N2KCJtYWluOjp0cmFjZV9iZWdpbiIsIDApKQorCQljYWxsX3B2KCJtYWluOjp0cmFjZV9iZWdpbiIsIEdfRElTQ0FSRCB8IEdfTk9BUkdTKTsKK30KKworLyoKKyAqIFN0YXJ0IHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CisJaW50IGksIGVyciA9IDA7CisKKwljb21tYW5kX2xpbmUgPSBtYWxsb2MoKGFyZ2MgKyAyKSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwljb21tYW5kX2xpbmVbMF0gPSAiIjsKKwljb21tYW5kX2xpbmVbMV0gPSBzY3JpcHQ7CisJZm9yIChpID0gMjsgaSA8IGFyZ2MgKyAyOyBpKyspCisJCWNvbW1hbmRfbGluZVtpXSA9IGFyZ3ZbaSAtIDJdOworCisJbXlfcGVybCA9IHBlcmxfYWxsb2MoKTsKKwlwZXJsX2NvbnN0cnVjdChteV9wZXJsKTsKKworCWlmIChwZXJsX3BhcnNlKG15X3BlcmwsIHhzX2luaXQsIGFyZ2MgKyAyLCAoY2hhciAqKiljb21tYW5kX2xpbmUsCisJCSAgICAgICAoY2hhciAqKilOVUxMKSkgeworCQllcnIgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAocGVybF9ydW4obXlfcGVybCkpIHsKKwkJZXJyID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKFN2VFJVRShFUlJTVikpIHsKKwkJZXJyID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcnVuX3N0YXJ0X3N1YigpOworCisJZnJlZShjb21tYW5kX2xpbmUpOworCWZwcmludGYoc3RkZXJyLCAicGVyZiB0cmFjZSBzdGFydGVkIHdpdGggUGVybCBzY3JpcHQgJXNcblxuIiwgc2NyaXB0KTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXBlcmxfZnJlZShteV9wZXJsKTsKKwlmcmVlKGNvbW1hbmRfbGluZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3RvcCB0cmFjZSBzY3JpcHQKKyAqLworc3RhdGljIGludCBwZXJsX3N0b3Bfc2NyaXB0KHZvaWQpCit7CisJZFNQOyAvKiBhY2Nlc3MgdG8gUGVybCBzdGFjayAqLworCVBVU0hNQVJLKFNQKTsKKworCWlmIChnZXRfY3YoIm1haW46OnRyYWNlX2VuZCIsIDApKQorCQljYWxsX3B2KCJtYWluOjp0cmFjZV9lbmQiLCBHX0RJU0NBUkQgfCBHX05PQVJHUyk7CisKKwlwZXJsX2Rlc3RydWN0KG15X3BlcmwpOworCXBlcmxfZnJlZShteV9wZXJsKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG5wZXJmIHRyYWNlIFBlcmwgc2NyaXB0IHN0b3BwZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9nZW5lcmF0ZV9zY3JpcHQoY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmOworCWNoYXIgZm5hbWVbUEFUSF9NQVhdOworCWludCBub3RfZmlyc3QsIGNvdW50OworCUZJTEUgKm9mcDsKKworCXNwcmludGYoZm5hbWUsICIlcy5wbCIsIG91dGZpbGUpOworCW9mcCA9IGZvcGVuKGZuYW1lLCAidyIpOworCWlmIChvZnAgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gJXNcbiIsIGZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZwcmludGYob2ZwLCAiIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCAiCisJCSJnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBwZXJsXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwiCisJCSIgTGljZW5zZSB2ZXJzaW9uIDJcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgVGhlIGNvbW1vbl8qIGV2ZW50IGhhbmRsZXIgZmllbGRzIGFyZSB0aGUgbW9zdCB1c2VmdWwgIgorCQkiZmllbGRzIGNvbW1vbiB0b1xuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgYWxsIGV2ZW50cy4gIFRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byAiCisJCSJ0aGUgJ2NvbW1vbl8qJyBmaWVsZHNcbiIpOworCisJZnByaW50ZihvZnAsICIjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyAiCisJCSJoYW5kbGVyIHBhcmFtcyBjYW5cbiIpOworCisJZnByaW50ZihvZnAsICIjIGJlIHJldHJpZXZlZCB1c2luZyBQZXJsIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSAiCisJCSJjb21tb25fKigkY29udGV4dCkuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBTZWUgQ29udGV4dC5wbSBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlICIKKwkJImZ1bmN0aW9ucy5cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgInVzZSBsaWIgXCIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC8iCisJCSJQZXJmLVRyYWNlLVV0aWwvbGliXCI7XG4iKTsKKworCWZwcmludGYob2ZwLCAidXNlIGxpYiBcIi4vUGVyZi1UcmFjZS1VdGlsL2xpYlwiO1xuIik7CisJZnByaW50ZihvZnAsICJ1c2UgUGVyZjo6VHJhY2U6OkNvcmU7XG4iKTsKKwlmcHJpbnRmKG9mcCwgInVzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDtcbiIpOworCWZwcmludGYob2ZwLCAidXNlIFBlcmY6OlRyYWNlOjpVdGlsO1xuXG4iKTsKKworCWZwcmludGYob2ZwLCAic3ViIHRyYWNlX2JlZ2luXG57XG5cdCMgb3B0aW9uYWxcbn1cblxuIik7CisJZnByaW50ZihvZnAsICJzdWIgdHJhY2VfZW5kXG57XG5cdCMgb3B0aW9uYWxcbn1cblxuIik7CisKKwl3aGlsZSAoKGV2ZW50ID0gdHJhY2VfZmluZF9uZXh0X2V2ZW50KGV2ZW50KSkpIHsKKwkJZnByaW50ZihvZnAsICJzdWIgJXM6OiVzXG57XG4iLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisJCWZwcmludGYob2ZwLCAiXHRteSAoIik7CisKKwkJZnByaW50ZihvZnAsICIkZXZlbnRfbmFtZSwgIik7CisJCWZwcmludGYob2ZwLCAiJGNvbnRleHQsICIpOworCQlmcHJpbnRmKG9mcCwgIiRjb21tb25fY3B1LCAiKTsKKwkJZnByaW50ZihvZnAsICIkY29tbW9uX3NlY3MsICIpOworCQlmcHJpbnRmKG9mcCwgIiRjb21tb25fbnNlY3MsXG4iKTsKKwkJZnByaW50ZihvZnAsICJcdCAgICAkY29tbW9uX3BpZCwgIik7CisJCWZwcmludGYob2ZwLCAiJGNvbW1vbl9jb21tLFxuXHQgICAgIik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdCAgICAiKTsKKworCQkJZnByaW50ZihvZnAsICIkJXMiLCBmLT5uYW1lKTsKKwkJfQorCQlmcHJpbnRmKG9mcCwgIikgPSBAXztcblxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdHByaW50X2hlYWRlcigkZXZlbnRfbmFtZSwgJGNvbW1vbl9jcHUsICIKKwkJCSIkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsXG5cdCAgICAgICAgICAgICAiCisJCQkiJGNvbW1vbl9waWQsICRjb21tb25fY29tbSk7XG5cbiIpOworCisJCWZwcmludGYob2ZwLCAiXHRwcmludGYoXCIiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCQkJaWYgKGNvdW50ICYmIGNvdW50ICUgNCA9PSAwKSB7CisJCQkJZnByaW50ZihvZnAsICJcIi5cblx0ICAgICAgIFwiIik7CisJCQl9CisJCQljb3VudCsrOworCisJCQlmcHJpbnRmKG9mcCwgIiVzPSIsIGYtPm5hbWUpOworCQkJaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19TWU1CT0xJQykKKwkJCQlmcHJpbnRmKG9mcCwgIiUlcyIpOworCQkJZWxzZSBpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpCisJCQkJZnByaW50ZihvZnAsICIlJWQiKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKG9mcCwgIiUldSIpOworCQl9CisKKwkJZnByaW50ZihvZnAsICJcXG5cIixcblx0ICAgICAgICIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdCAgICAgICAiKTsKKworCQkJaWYgKGYtPmZsYWdzICYgRklFTERfSVNfRkxBRykgeworCQkJCWlmICgoY291bnQgLSAxKSAlIDUgIT0gMCkgeworCQkJCQlmcHJpbnRmKG9mcCwgIlxuXHQgICAgICAgIik7CisJCQkJCWNvdW50ID0gNDsKKwkJCQl9CisJCQkJZnByaW50ZihvZnAsICJmbGFnX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXM6OiVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJCVzKSIsIGYtPm5hbWUsCisJCQkJCWYtPm5hbWUpOworCQkJfSBlbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKSB7CisJCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7CisJCQkJCWZwcmludGYob2ZwLCAiXG5cdCAgICAgICAiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgInN5bWJvbF9zdHIoXCIiKTsKKwkJCQlmcHJpbnRmKG9mcCwgIiVzOjolc1wiLCAiLCBldmVudC0+c3lzdGVtLAorCQkJCQlldmVudC0+bmFtZSk7CisJCQkJZnByaW50ZihvZnAsICJcIiVzXCIsICQlcykiLCBmLT5uYW1lLAorCQkJCQlmLT5uYW1lKTsKKwkJCX0gZWxzZQorCQkJCWZwcmludGYob2ZwLCAiJCVzIiwgZi0+bmFtZSk7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIik7XG4iKTsKKwkJZnByaW50ZihvZnAsICJ9XG5cbiIpOworCX0KKworCWZwcmludGYob2ZwLCAic3ViIHRyYWNlX3VuaGFuZGxlZFxue1xuXHRteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAiCisJCSIkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLFxuXHQgICAgIgorCQkiJGNvbW1vbl9waWQsICRjb21tb25fY29tbSkgPSBAXztcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIlx0cHJpbnRfaGVhZGVyKCRldmVudF9uYW1lLCAkY29tbW9uX2NwdSwgIgorCQkiJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLFxuXHQgICAgICAgICAgICAgJGNvbW1vbl9waWQsICIKKwkJIiRjb21tb25fY29tbSk7XG59XG5cbiIpOworCisJZnByaW50ZihvZnAsICJzdWIgcHJpbnRfaGVhZGVyXG57XG4iCisJCSJcdG15ICgkZXZlbnRfbmFtZSwgJGNwdSwgJHNlY3MsICRuc2VjcywgJHBpZCwgJGNvbW0pID0gQF87XG5cbiIKKwkJIlx0cHJpbnRmKFwiJSUtMjBzICUlNXUgJSUwNXUuJSUwOXUgJSU4dSAlJS0yMHMgXCIsXG5cdCAgICAgICAiCisJCSIkZXZlbnRfbmFtZSwgJGNwdSwgJHNlY3MsICRuc2VjcywgJHBpZCwgJGNvbW0pO1xufSIpOworCisJZmNsb3NlKG9mcCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRlZCBQZXJsIHNjcmlwdDogJXNcbiIsIGZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ19vcHMgPSB7CisJLm5hbWUgPSAiUGVybCIsCisJLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0LAorCS5zdG9wX3NjcmlwdCA9IHBlcmxfc3RvcF9zY3JpcHQsCisJLnByb2Nlc3NfZXZlbnQgPSBwZXJsX3Byb2Nlc3NfZXZlbnQsCisJLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0LAorfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E0MTRiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpAQCAtMCwwICsxLDU3MyBAQAorLyoKKyAqIHRyYWNlLWV2ZW50LXB5dGhvbi4gIEZlZWQgdHJhY2UgZXZlbnRzIHRvIGFuIGVtYmVkZGVkIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICIuLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC5oIgorI2luY2x1ZGUgIi4uL3RyYWNlLWV2ZW50LmgiCisKK1B5TU9ESU5JVF9GVU5DIGluaXRwZXJmX3RyYWNlX2NvbnRleHQodm9pZCk7CisKKyNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCisJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKKworc3RydWN0IGV2ZW50ICpldmVudHNbRlRSQUNFX01BWF9FVkVOVF07CisKKyNkZWZpbmUgTUFYX0ZJRUxEUwk2NAorI2RlZmluZSBOX0NPTU1PTl9GSUVMRFMJNworCitleHRlcm4gc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKworc3RhdGljIGNoYXIgKmN1cl9maWVsZF9uYW1lOworc3RhdGljIGludCB6ZXJvX2ZsYWdfYXRvbTsKKworc3RhdGljIFB5T2JqZWN0ICptYWluX21vZHVsZSwgKm1haW5fZGljdDsKKworc3RhdGljIHZvaWQgaGFuZGxlcl9jYWxsX2RpZShjb25zdCBjaGFyICpoYW5kbGVyX25hbWUpCit7CisJUHlFcnJfUHJpbnQoKTsKKwlQeV9GYXRhbEVycm9yKCJwcm9ibGVtIGluIFB5dGhvbiB0cmFjZSBldmVudCBoYW5kbGVyIik7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV92YWx1ZShlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX3ZhbHVlLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX3N0cikKK3sKKwljb25zdCBjaGFyICpoYW5kbGVyX25hbWUgPSAiZGVmaW5lX2ZsYWdfdmFsdWUiOworCVB5T2JqZWN0ICpoYW5kbGVyLCAqdCwgKnJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbiA9IDA7CisKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9TWU1CT0wpCisJCWhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfc3ltYm9saWNfdmFsdWUiOworCisJdCA9IFB5VHVwbGVfTmV3KDQpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJdmFsdWUgPSBldmFsX2ZsYWcoZmllbGRfdmFsdWUpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhldl9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmaWVsZF9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsdWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX3N0cikpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV92YWx1ZXMoZW51bSBwcmludF9hcmdfdHlwZSBmaWVsZF90eXBlLAorCQkJICBzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZpZWxkLAorCQkJICBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJICBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworCWRlZmluZV92YWx1ZShmaWVsZF90eXBlLCBldl9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZC0+dmFsdWUsCisJCSAgICAgZmllbGQtPnN0cik7CisKKwlpZiAoZmllbGQtPm5leHQpCisJCWRlZmluZV92YWx1ZXMoZmllbGRfdHlwZSwgZmllbGQtPm5leHQsIGV2X25hbWUsIGZpZWxkX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZmllbGQoZW51bSBwcmludF9hcmdfdHlwZSBmaWVsZF90eXBlLAorCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpkZWxpbSkKK3sKKwljb25zdCBjaGFyICpoYW5kbGVyX25hbWUgPSAiZGVmaW5lX2ZsYWdfZmllbGQiOworCVB5T2JqZWN0ICpoYW5kbGVyLCAqdCwgKnJldHZhbDsKKwl1bnNpZ25lZCBuID0gMDsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX1NZTUJPTCkKKwkJaGFuZGxlcl9uYW1lID0gImRlZmluZV9zeW1ib2xpY19maWVsZCI7CisKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9GTEFHUykKKwkJdCA9IFB5VHVwbGVfTmV3KDMpOworCWVsc2UKKwkJdCA9IFB5VHVwbGVfTmV3KDIpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhldl9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmaWVsZF9uYW1lKSk7CisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfRkxBR1MpCisJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZGVsaW0pKTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsIGhhbmRsZXJfbmFtZSk7CisJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIHQpOworCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQloYW5kbGVyX2NhbGxfZGllKGhhbmRsZXJfbmFtZSk7CisJfQorCisJUHlfREVDUkVGKHQpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZXZlbnRfc3ltYm9scyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSBzdHJ1Y3QgcHJpbnRfYXJnICphcmdzKQoreworCXN3aXRjaCAoYXJncy0+dHlwZSkgeworCWNhc2UgUFJJTlRfTlVMTDoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9BVE9NOgorCQlkZWZpbmVfdmFsdWUoUFJJTlRfRkxBR1MsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCAiMCIsCisJCQkgICAgIGFyZ3MtPmF0b20uYXRvbSk7CisJCXplcm9fZmxhZ19hdG9tID0gMDsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GSUVMRDoKKwkJaWYgKGN1cl9maWVsZF9uYW1lKQorCQkJZnJlZShjdXJfZmllbGRfbmFtZSk7CisJCWN1cl9maWVsZF9uYW1lID0gc3RyZHVwKGFyZ3MtPmZpZWxkLm5hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZMQUdTOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+ZmxhZ3MuZmllbGQpOworCQlkZWZpbmVfZmllbGQoUFJJTlRfRkxBR1MsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLAorCQkJICAgICBhcmdzLT5mbGFncy5kZWxpbSk7CisJCWRlZmluZV92YWx1ZXMoUFJJTlRfRkxBR1MsIGFyZ3MtPmZsYWdzLmZsYWdzLCBldl9uYW1lLAorCQkJICAgICAgY3VyX2ZpZWxkX25hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NZTUJPTDoKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPnN5bWJvbC5maWVsZCk7CisJCWRlZmluZV9maWVsZChQUklOVF9TWU1CT0wsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCBOVUxMKTsKKwkJZGVmaW5lX3ZhbHVlcyhQUklOVF9TWU1CT0wsIGFyZ3MtPnN5bWJvbC5zeW1ib2xzLCBldl9uYW1lLAorCQkJICAgICAgY3VyX2ZpZWxkX25hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NUUklORzoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9UWVBFOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+dHlwZWNhc3QuaXRlbSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfT1A6CisJCWlmIChzdHJjbXAoYXJncy0+b3Aub3AsICI6IikgPT0gMCkKKwkJCXplcm9fZmxhZ19hdG9tID0gMTsKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm9wLmxlZnQpOworCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AucmlnaHQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB3ZSBzaG91bGQgd2Fybi4uLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ3MtPm5leHQpCisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5uZXh0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnQgKmZpbmRfY2FjaGVfZXZlbnQoaW50IHR5cGUpCit7CisJc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisKKwlpZiAoZXZlbnRzW3R5cGVdKQorCQlyZXR1cm4gZXZlbnRzW3R5cGVdOworCisJZXZlbnRzW3R5cGVdID0gZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOworCWlmICghZXZlbnQpCisJCXJldHVybiBOVUxMOworCisJc3ByaW50Zihldl9uYW1lLCAiJXNfXyVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOworCisJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHB5dGhvbl9wcm9jZXNzX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsCisJCQkJIGludCBzaXplIF9fdW51c2VkLAorCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsIGNoYXIgKmNvbW0pCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWwsICpjb250ZXh0LCAqdDsKKwlzdGF0aWMgY2hhciBoYW5kbGVyX25hbWVbMjU2XTsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgcywgbnM7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBuID0gMDsKKwlpbnQgdHlwZTsKKwlpbnQgcGlkOworCisJdCA9IFB5VHVwbGVfTmV3KE1BWF9GSUVMRFMpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCisJZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KHR5cGUpOworCWlmICghZXZlbnQpCisJCWRpZSgidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkIiwgdHlwZSk7CisKKwlwaWQgPSB0cmFjZV9wYXJzZV9jb21tb25fcGlkKGRhdGEpOworCisJc3ByaW50ZihoYW5kbGVyX25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisKKwlzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOworCW5zID0gbnNlY3MgLSBzICogTlNFQ1NfUEVSX1NFQzsKKworCXNjcmlwdGluZ19jb250ZXh0LT5ldmVudF9kYXRhID0gZGF0YTsKKworCWNvbnRleHQgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoc2NyaXB0aW5nX2NvbnRleHQsIE5VTEwpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhoYW5kbGVyX25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLAorCQkJUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHNjcmlwdGluZ19jb250ZXh0LCBOVUxMKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcoY3B1KSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcocykpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKG5zKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcocGlkKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhjb21tKSk7CisKKwlmb3IgKGZpZWxkID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGZpZWxkOyBmaWVsZCA9IGZpZWxkLT5uZXh0KSB7CisJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcpIHsKKwkJCWludCBvZmZzZXQ7CisJCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfRFlOQU1JQykgeworCQkJCW9mZnNldCA9ICooaW50ICopKGRhdGEgKyBmaWVsZC0+b2Zmc2V0KTsKKwkJCQlvZmZzZXQgJj0gMHhmZmZmOworCQkJfSBlbHNlCisJCQkJb2Zmc2V0ID0gZmllbGQtPm9mZnNldDsKKwkJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssCisJCQkJUHlTdHJpbmdfRnJvbVN0cmluZygoY2hhciAqKWRhdGEgKyBvZmZzZXQpKTsKKwkJfSBlbHNlIHsgLyogRklFTERfSVNfTlVNRVJJQyAqLworCQkJdmFsID0gcmVhZF9zaXplKGRhdGEgKyBmaWVsZC0+b2Zmc2V0LCBmaWVsZC0+c2l6ZSk7CisJCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU0lHTkVEKSB7CisJCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsKSk7CisJCQl9IGVsc2UgeworCQkJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHZhbCkpOworCQkJfQorCQl9CisJfQorCisJaWYgKF9QeVR1cGxlX1Jlc2l6ZSgmdCwgbikgPT0gLTEpCisJCVB5X0ZhdGFsRXJyb3IoImVycm9yIHJlc2l6aW5nIFB5dGhvbiB0dXBsZSIpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9IGVsc2UgeworCQloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCAidHJhY2VfdW5oYW5kbGVkIik7CisJCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJCWlmIChfUHlUdXBsZV9SZXNpemUoJnQsIE5fQ09NTU9OX0ZJRUxEUykgPT0gLTEpCisJCQkJUHlfRmF0YWxFcnJvcigiZXJyb3IgcmVzaXppbmcgUHl0aG9uIHR1cGxlIik7CisKKwkJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfdW5oYW5kbGVkIik7CisJCX0KKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3N0YXJ0X3N1Yih2b2lkKQoreworCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsOworCWludCBlcnIgPSAwOworCisJbWFpbl9tb2R1bGUgPSBQeUltcG9ydF9BZGRNb2R1bGUoIl9fbWFpbl9fIik7CisJaWYgKG1haW5fbW9kdWxlID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlQeV9JTkNSRUYobWFpbl9tb2R1bGUpOworCisJbWFpbl9kaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtYWluX21vZHVsZSk7CisJaWYgKG1haW5fZGljdCA9PSBOVUxMKSB7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKwlQeV9JTkNSRUYobWFpbl9kaWN0KTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsICJ0cmFjZV9iZWdpbiIpOworCWlmIChoYW5kbGVyID09IE5VTEwgfHwgIVB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpCisJCWdvdG8gb3V0OworCisJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCBOVUxMKTsKKwlpZiAocmV0dmFsID09IE5VTEwpCisJCWhhbmRsZXJfY2FsbF9kaWUoInRyYWNlX2JlZ2luIik7CisKKwlQeV9ERUNSRUYocmV0dmFsKTsKKwlyZXR1cm4gZXJyOworZXJyb3I6CisJUHlfWERFQ1JFRihtYWluX2RpY3QpOworCVB5X1hERUNSRUYobWFpbl9tb2R1bGUpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTdGFydCB0cmFjZSBzY3JpcHQKKyAqLworc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CisJY2hhciBidWZbUEFUSF9NQVhdOworCWludCBpLCBlcnIgPSAwOworCUZJTEUgKmZwOworCisJY29tbWFuZF9saW5lID0gbWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJY29tbWFuZF9saW5lWzBdID0gc2NyaXB0OworCWZvciAoaSA9IDE7IGkgPCBhcmdjICsgMTsgaSsrKQorCQljb21tYW5kX2xpbmVbaV0gPSBhcmd2W2kgLSAxXTsKKworCVB5X0luaXRpYWxpemUoKTsKKworCWluaXRwZXJmX3RyYWNlX2NvbnRleHQoKTsKKworCVB5U3lzX1NldEFyZ3YoYXJnYyArIDEsIChjaGFyICoqKWNvbW1hbmRfbGluZSk7CisKKwlmcCA9IGZvcGVuKHNjcmlwdCwgInIiKTsKKwlpZiAoIWZwKSB7CisJCXNwcmludGYoYnVmLCAiQ2FuJ3Qgb3BlbiBweXRob24gc2NyaXB0IFwiJXNcIiIsIHNjcmlwdCk7CisJCXBlcnJvcihidWYpOworCQllcnIgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBQeVJ1bl9TaW1wbGVGaWxlKGZwLCBzY3JpcHQpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBydW5uaW5nIHB5dGhvbiBzY3JpcHQgJXNcbiIsIHNjcmlwdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcnVuX3N0YXJ0X3N1YigpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBzdGFydGluZyBweXRob24gc2NyaXB0ICVzXG4iLCBzY3JpcHQpOworCQlnb3RvIGVycm9yOworCX0KKworCWZyZWUoY29tbWFuZF9saW5lKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBlcmYgdHJhY2Ugc3RhcnRlZCB3aXRoIFB5dGhvbiBzY3JpcHQgJXNcblxuIiwKKwkJc2NyaXB0KTsKKworCXJldHVybiBlcnI7CitlcnJvcjoKKwlQeV9GaW5hbGl6ZSgpOworCWZyZWUoY29tbWFuZF9saW5lKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTdG9wIHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHB5dGhvbl9zdG9wX3NjcmlwdCh2b2lkKQoreworCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsOworCWludCBlcnIgPSAwOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgInRyYWNlX2VuZCIpOworCWlmIChoYW5kbGVyID09IE5VTEwgfHwgIVB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpCisJCWdvdG8gb3V0OworCisJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCBOVUxMKTsKKwlpZiAocmV0dmFsID09IE5VTEwpCisJCWhhbmRsZXJfY2FsbF9kaWUoInRyYWNlX2VuZCIpOworCWVsc2UKKwkJUHlfREVDUkVGKHJldHZhbCk7CitvdXQ6CisJUHlfWERFQ1JFRihtYWluX2RpY3QpOworCVB5X1hERUNSRUYobWFpbl9tb2R1bGUpOworCVB5X0ZpbmFsaXplKCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxucGVyZiB0cmFjZSBQeXRob24gc2NyaXB0IHN0b3BwZWRcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBweXRob25fZ2VuZXJhdGVfc2NyaXB0KGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJc3RydWN0IGV2ZW50ICpldmVudCA9IE5VTEw7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZjsKKwljaGFyIGZuYW1lW1BBVEhfTUFYXTsKKwlpbnQgbm90X2ZpcnN0LCBjb3VudDsKKwlGSUxFICpvZnA7CisKKwlzcHJpbnRmKGZuYW1lLCAiJXMucHkiLCBvdXRmaWxlKTsKKwlvZnAgPSBmb3BlbihmbmFtZSwgInciKTsKKwlpZiAob2ZwID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBvcGVuICVzXG4iLCBmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJZnByaW50ZihvZnAsICIjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsICIKKwkJImdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIgorCQkiIExpY2Vuc2UgdmVyc2lvbiAyXG5cbiIpOworCisJZnByaW50ZihvZnAsICIjIFRoZSBjb21tb25fKiBldmVudCBoYW5kbGVyIGZpZWxkcyBhcmUgdGhlIG1vc3QgdXNlZnVsICIKKwkJImZpZWxkcyBjb21tb24gdG9cbiIpOworCisJZnByaW50ZihvZnAsICIjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gIgorCQkidGhlICdjb21tb25fKicgZmllbGRzXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBpbiB0aGUgZm9ybWF0IGZpbGVzLiAgVGhvc2UgZmllbGRzIG5vdCBhdmFpbGFibGUgYXMgIgorCQkiaGFuZGxlciBwYXJhbXMgY2FuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBiZSByZXRyaWV2ZWQgdXNpbmcgUHl0aG9uIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSAiCisJCSJjb21tb25fKihjb250ZXh0KS5cbiIpOworCisJZnByaW50ZihvZnAsICIjIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3QgIgorCQkib2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy5cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImltcG9ydCBvc1xuIik7CisJZnByaW50ZihvZnAsICJpbXBvcnQgc3lzXG5cbiIpOworCisJZnByaW50ZihvZnAsICJzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFxcXG4iKTsKKwlmcHJpbnRmKG9mcCwgIlx0Jy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKVxuIik7CisJZnByaW50ZihvZnAsICJcbmZyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqXG4iKTsKKwlmcHJpbnRmKG9mcCwgImZyb20gQ29yZSBpbXBvcnQgKlxuXG5cbiIpOworCisJZnByaW50ZihvZnAsICJkZWYgdHJhY2VfYmVnaW4oKTpcbiIpOworCWZwcmludGYob2ZwLCAiXHRwcmludCBcImluIHRyYWNlX2JlZ2luXCJcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV9lbmQoKTpcbiIpOworCWZwcmludGYob2ZwLCAiXHRwcmludCBcImluIHRyYWNlX2VuZFwiXG5cbiIpOworCisJd2hpbGUgKChldmVudCA9IHRyYWNlX2ZpbmRfbmV4dF9ldmVudChldmVudCkpKSB7CisJCWZwcmludGYob2ZwLCAiZGVmICVzX18lcygiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisJCWZwcmludGYob2ZwLCAiZXZlbnRfbmFtZSwgIik7CisJCWZwcmludGYob2ZwLCAiY29udGV4dCwgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX2NwdSxcbiIpOworCQlmcHJpbnRmKG9mcCwgIlx0Y29tbW9uX3NlY3MsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbW1vbl9uc2VjcywgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX3BpZCwgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX2NvbW0sXG5cdCIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisJCQlpZiAoKytjb3VudCAlIDUgPT0gMCkKKwkJCQlmcHJpbnRmKG9mcCwgIlxuXHQiKTsKKworCQkJZnByaW50ZihvZnAsICIlcyIsIGYtPm5hbWUpOworCQl9CisJCWZwcmludGYob2ZwLCAiKTpcbiIpOworCisJCWZwcmludGYob2ZwLCAiXHRcdHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCAiCisJCQkiY29tbW9uX3NlY3MsIGNvbW1vbl9uc2Vjcyxcblx0XHRcdCIKKwkJCSJjb21tb25fcGlkLCBjb21tb25fY29tbSlcblxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdFx0cHJpbnQgXCIiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCQkJaWYgKGNvdW50ICYmIGNvdW50ICUgMyA9PSAwKSB7CisJCQkJZnByaW50ZihvZnAsICJcIiBcXFxuXHRcdFwiIik7CisJCQl9CisJCQljb3VudCsrOworCisJCQlmcHJpbnRmKG9mcCwgIiVzPSIsIGYtPm5hbWUpOworCQkJaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19TWU1CT0xJQykKKwkJCQlmcHJpbnRmKG9mcCwgIiUlcyIpOworCQkJZWxzZSBpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpCisJCQkJZnByaW50ZihvZnAsICIlJWQiKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKG9mcCwgIiUldSIpOworCQl9CisKKwkJZnByaW50ZihvZnAsICJcXG5cIiAlJSBcXFxuXHRcdCgiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCisJCQlpZiAoKytjb3VudCAlIDUgPT0gMCkKKwkJCQlmcHJpbnRmKG9mcCwgIlxuXHRcdCIpOworCisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHKSB7CisJCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7CisJCQkJCWZwcmludGYob2ZwLCAiXG5cdFx0Iik7CisJCQkJCWNvdW50ID0gNDsKKwkJCQl9CisJCQkJZnByaW50ZihvZnAsICJmbGFnX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXNfXyVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJXMpIiwgZi0+bmFtZSwKKwkJCQkJZi0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1lNQk9MSUMpIHsKKwkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKKwkJCQkJZnByaW50ZihvZnAsICJcblx0XHQiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgInN5bWJvbF9zdHIoXCIiKTsKKwkJCQlmcHJpbnRmKG9mcCwgIiVzX18lc1wiLCAiLCBldmVudC0+c3lzdGVtLAorCQkJCQlldmVudC0+bmFtZSk7CisJCQkJZnByaW50ZihvZnAsICJcIiVzXCIsICVzKSIsIGYtPm5hbWUsCisJCQkJCWYtPm5hbWUpOworCQkJfSBlbHNlCisJCQkJZnByaW50ZihvZnAsICIlcyIsIGYtPm5hbWUpOworCQl9CisKKwkJZnByaW50ZihvZnAsICIpLFxuXG4iKTsKKwl9CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgIgorCQkiY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2Vjcyxcblx0XHQiCisJCSJjb21tb25fcGlkLCBjb21tb25fY29tbSk6XG4iKTsKKworCWZwcmludGYob2ZwLCAiXHRcdHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCAiCisJCSJjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdGNvbW1vbl9waWQsICIKKwkJImNvbW1vbl9jb21tKVxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiZGVmIHByaW50X2hlYWRlcigiCisJCSJldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOlxuIgorCQkiXHRwcmludCBcIiUlLTIwcyAlJTV1ICUlMDV1LiUlMDl1ICUlOHUgJSUtMjBzIFwiICUlIFxcXG5cdCIKKwkJIihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLFxuIik7CisKKwlmY2xvc2Uob2ZwKTsKKworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6ICVzXG4iLCBmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcHl0aG9uX3NjcmlwdGluZ19vcHMgPSB7CisJLm5hbWUgPSAiUHl0aG9uIiwKKwkuc3RhcnRfc2NyaXB0ID0gcHl0aG9uX3N0YXJ0X3NjcmlwdCwKKwkuc3RvcF9zY3JpcHQgPSBweXRob25fc3RvcF9zY3JpcHQsCisJLnByb2Nlc3NfZXZlbnQgPSBweXRob25fcHJvY2Vzc19ldmVudCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcHl0aG9uX2dlbmVyYXRlX3NjcmlwdCwKK307CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwppbmRleCBjZTNhNmM4Li4wZGU3MjU4ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0xLDUgKzEsOCBAQAorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKKyNpbmNsdWRlIDxieXRlc3dhcC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCkBAIC00OSw2ICs1MiwxMSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlyZXR1cm4gbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywgc2VsZi0+dm1saW51eF9tYXBzKTsKK30KKwogc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlKQogewogCXNpemVfdCBsZW4gPSBmaWxlbmFtZSA/IHN0cmxlbihmaWxlbmFtZSkgKyAxIDogMDsKQEAgLTY2LDEzICs3NCwyMiBAQAogCXNlbGYtPm1tYXBfd2luZG93ID0gMzI7CiAJc2VsZi0+Y3dkID0gTlVMTDsKIAlzZWxmLT5jd2RsZW4gPSAwOworCXNlbGYtPnVua25vd25fZXZlbnRzID0gMDsKIAltYXBfZ3JvdXBzX19pbml0KCZzZWxmLT5rbWFwcyk7CiAKLQlpZiAocGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZikgPCAwKQotCQlnb3RvIG91dF9kZWxldGU7CisJaWYgKG1vZGUgPT0gT19SRE9OTFkpIHsKKwkJaWYgKHBlcmZfc2Vzc2lvbl9fb3BlbihzZWxmLCBmb3JjZSkgPCAwKQorCQkJZ290byBvdXRfZGVsZXRlOworCX0gZWxzZSBpZiAobW9kZSA9PSBPX1dST05MWSkgeworCQkvKgorCQkgKiBJbiBPX1JET05MWSBtb2RlIHRoaXMgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiByZWFkaW5nIHRoZQorCQkgKiBrZXJuZWwgTU1BUCBldmVudCwgaW4gZXZlbnRfX3Byb2Nlc3NfbW1hcCgpLgorCQkgKi8KKwkJaWYgKHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHNlbGYpIDwgMCkKKwkJCWdvdG8gb3V0X2RlbGV0ZTsKKwl9CiAKLQlpZiAobW9kZSA9PSBPX1JET05MWSAmJiBwZXJmX3Nlc3Npb25fX29wZW4oc2VsZiwgZm9yY2UpIDwgMCkKLQkJZ290byBvdXRfZGVsZXRlOworCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwogb3V0OgogCXJldHVybiBzZWxmOwogb3V0X2ZyZWU6CkBAIC0xNDgsMyArMTY1LDQwOSBAQAogCiAJcmV0dXJuIHN5bXM7CiB9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19ldmVudF9zdHViKGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQoreworCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCit7CisJaWYgKGhhbmRsZXItPnNhbXBsZSA9PSBOVUxMKQorCQloYW5kbGVyLT5zYW1wbGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPm1tYXAgPT0gTlVMTCkKKwkJaGFuZGxlci0+bW1hcCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+Y29tbSA9PSBOVUxMKQorCQloYW5kbGVyLT5jb21tID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5mb3JrID09IE5VTEwpCisJCWhhbmRsZXItPmZvcmsgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmV4aXQgPT0gTlVMTCkKKwkJaGFuZGxlci0+ZXhpdCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+bG9zdCA9PSBOVUxMKQorCQloYW5kbGVyLT5sb3N0ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5yZWFkID09IE5VTEwpCisJCWhhbmRsZXItPnJlYWQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPnRocm90dGxlID09IE5VTEwpCisJCWhhbmRsZXItPnRocm90dGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT51bnRocm90dGxlID09IE5VTEwpCisJCWhhbmRsZXItPnVudGhyb3R0bGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0geworCVswXQkJCSA9ICJUT1RBTCIsCisJW1BFUkZfUkVDT1JEX01NQVBdCSA9ICJNTUFQIiwKKwlbUEVSRl9SRUNPUkRfTE9TVF0JID0gIkxPU1QiLAorCVtQRVJGX1JFQ09SRF9DT01NXQkgPSAiQ09NTSIsCisJW1BFUkZfUkVDT1JEX0VYSVRdCSA9ICJFWElUIiwKKwlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICJUSFJPVFRMRSIsCisJW1BFUkZfUkVDT1JEX1VOVEhST1RUTEVdID0gIlVOVEhST1RUTEUiLAorCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAiRk9SSyIsCisJW1BFUkZfUkVDT1JEX1JFQURdCSA9ICJSRUFEIiwKKwlbUEVSRl9SRUNPUkRfU0FNUExFXQkgPSAiU0FNUExFIiwKK307CisKK3Vuc2lnbmVkIGxvbmcgZXZlbnRfX3RvdGFsW1BFUkZfUkVDT1JEX01BWF07CisKK3ZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9NQVg7ICsraSkKKwkJcHJfaW5mbygiJTEwcyBldmVudHM6ICUxMGxkXG4iLAorCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7Cit9CisKK3ZvaWQgbWVtX2Jzd2FwXzY0KHZvaWQgKnNyYywgaW50IGJ5dGVfc2l6ZSkKK3sKKwl1NjQgKm0gPSBzcmM7CisKKwl3aGlsZSAoYnl0ZV9zaXplID4gMCkgeworCQkqbSA9IGJzd2FwXzY0KCptKTsKKwkJYnl0ZV9zaXplIC09IHNpemVvZih1NjQpOworCQkrK207CisJfQorfQorCitzdGF0aWMgdm9pZCBldmVudF9fYWxsNjRfc3dhcChldmVudF90ICpzZWxmKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGRyID0gJnNlbGYtPmhlYWRlcjsKKwltZW1fYnN3YXBfNjQoaGRyICsgMSwgc2VsZi0+aGVhZGVyLnNpemUgLSBzaXplb2YoKmhkcikpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fY29tbV9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+Y29tbS5waWQgPSBic3dhcF8zMihzZWxmLT5jb21tLnBpZCk7CisJc2VsZi0+Y29tbS50aWQgPSBic3dhcF8zMihzZWxmLT5jb21tLnRpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19tbWFwX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5tbWFwLnBpZAkgPSBic3dhcF8zMihzZWxmLT5tbWFwLnBpZCk7CisJc2VsZi0+bW1hcC50aWQJID0gYnN3YXBfMzIoc2VsZi0+bW1hcC50aWQpOworCXNlbGYtPm1tYXAuc3RhcnQgPSBic3dhcF82NChzZWxmLT5tbWFwLnN0YXJ0KTsKKwlzZWxmLT5tbWFwLmxlbgkgPSBic3dhcF82NChzZWxmLT5tbWFwLmxlbik7CisJc2VsZi0+bW1hcC5wZ29mZiA9IGJzd2FwXzY0KHNlbGYtPm1tYXAucGdvZmYpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fdGFza19zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+Zm9yay5waWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnBpZCk7CisJc2VsZi0+Zm9yay50aWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnRpZCk7CisJc2VsZi0+Zm9yay5wcGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5wcGlkKTsKKwlzZWxmLT5mb3JrLnB0aWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnB0aWQpOworCXNlbGYtPmZvcmsudGltZQk9IGJzd2FwXzY0KHNlbGYtPmZvcmsudGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19yZWFkX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5yZWFkLnBpZAkJPSBic3dhcF8zMihzZWxmLT5yZWFkLnBpZCk7CisJc2VsZi0+cmVhZC50aWQJCT0gYnN3YXBfMzIoc2VsZi0+cmVhZC50aWQpOworCXNlbGYtPnJlYWQudmFsdWUJPSBic3dhcF82NChzZWxmLT5yZWFkLnZhbHVlKTsKKwlzZWxmLT5yZWFkLnRpbWVfZW5hYmxlZAk9IGJzd2FwXzY0KHNlbGYtPnJlYWQudGltZV9lbmFibGVkKTsKKwlzZWxmLT5yZWFkLnRpbWVfcnVubmluZwk9IGJzd2FwXzY0KHNlbGYtPnJlYWQudGltZV9ydW5uaW5nKTsKKwlzZWxmLT5yZWFkLmlkCQk9IGJzd2FwXzY0KHNlbGYtPnJlYWQuaWQpOworfQorCit0eXBlZGVmIHZvaWQgKCpldmVudF9fc3dhcF9vcCkoZXZlbnRfdCAqc2VsZik7CisKK3N0YXRpYyBldmVudF9fc3dhcF9vcCBldmVudF9fc3dhcF9vcHNbXSA9IHsKKwlbUEVSRl9SRUNPUkRfTU1BUF0gICA9IGV2ZW50X19tbWFwX3N3YXAsCisJW1BFUkZfUkVDT1JEX0NPTU1dICAgPSBldmVudF9fY29tbV9zd2FwLAorCVtQRVJGX1JFQ09SRF9GT1JLXSAgID0gZXZlbnRfX3Rhc2tfc3dhcCwKKwlbUEVSRl9SRUNPUkRfRVhJVF0gICA9IGV2ZW50X190YXNrX3N3YXAsCisJW1BFUkZfUkVDT1JEX0xPU1RdICAgPSBldmVudF9fYWxsNjRfc3dhcCwKKwlbUEVSRl9SRUNPUkRfUkVBRF0gICA9IGV2ZW50X19yZWFkX3N3YXAsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0gPSBldmVudF9fYWxsNjRfc3dhcCwKKwlbUEVSRl9SRUNPUkRfTUFYXSAgICA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgICAgICBldmVudF90ICpldmVudCwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkJICAgICAgIHU2NCBvZmZzZXQsIHU2NCBoZWFkKQoreworCXRyYWNlX2V2ZW50KGV2ZW50KTsKKworCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9NQVgpIHsKKwkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IFBFUkZfUkVDT1JEXyVzIiwKKwkJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCisJCQkgICAgZXZlbnRfX25hbWVbZXZlbnQtPmhlYWRlci50eXBlXSk7CisJCSsrZXZlbnRfX3RvdGFsWzBdOworCQkrK2V2ZW50X190b3RhbFtldmVudC0+aGVhZGVyLnR5cGVdOworCX0KKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCAmJiBldmVudF9fc3dhcF9vcHNbZXZlbnQtPmhlYWRlci50eXBlXSkKKwkJZXZlbnRfX3N3YXBfb3BzW2V2ZW50LT5oZWFkZXIudHlwZV0oZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKKwkJcmV0dXJuIG9wcy0+c2FtcGxlKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CisJCXJldHVybiBvcHMtPm1tYXAoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKKwkJcmV0dXJuIG9wcy0+Y29tbShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCQlyZXR1cm4gb3BzLT5mb3JrKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6CisJCXJldHVybiBvcHMtPmV4aXQoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKKwkJcmV0dXJuIG9wcy0+bG9zdChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgorCQlyZXR1cm4gb3BzLT5yZWFkKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgorCQlyZXR1cm4gb3BzLT50aHJvdHRsZShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgorCQlyZXR1cm4gb3BzLT51bnRocm90dGxlKGV2ZW50LCBzZWxmKTsKKwlkZWZhdWx0OgorCQlzZWxmLT51bmtub3duX2V2ZW50cysrOworCQlyZXR1cm4gLTE7CisJfQorfQorCit2b2lkIHBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKnNlbGYpCit7CisJc2VsZi0+dHlwZSA9IGJzd2FwXzMyKHNlbGYtPnR5cGUpOworCXNlbGYtPm1pc2MgPSBic3dhcF8xNihzZWxmLT5taXNjKTsKKwlzZWxmLT5zaXplID0gYnN3YXBfMTYoc2VsZi0+c2l6ZSk7Cit9CisKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAorCQkJCWludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCit7CisJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwl1NjQgbGltaXQgPSBvZmZzZXQgKyBzaXplOworCWludCBlcnIgPSAtMTsKKworCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgeworCQlzdHJ1Y3QgZHNvICpkc287CisJCXNzaXplX3QgbGVuOworCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmRzb3NfX3VzZXI7CisKKwkJaWYgKHJlYWQoaW5wdXQsICZiZXYsIHNpemVvZihiZXYpKSAhPSBzaXplb2YoYmV2KSkKKwkJCWdvdG8gb3V0OworCisJCWlmIChzZWxmLT5uZWVkc19zd2FwKQorCQkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZiZXYuaGVhZGVyKTsKKworCQlsZW4gPSBiZXYuaGVhZGVyLnNpemUgLSBzaXplb2YoYmV2KTsKKwkJaWYgKHJlYWQoaW5wdXQsIGZpbGVuYW1lLCBsZW4pICE9IGxlbikKKwkJCWdvdG8gb3V0OworCisJCWlmIChiZXYuaGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkKKwkJCWhlYWQgPSAmZHNvc19fa2VybmVsOworCisJCWRzbyA9IF9fZHNvc19fZmluZG5ldyhoZWFkLCBmaWxlbmFtZSk7CisJCWlmIChkc28gIT0gTlVMTCkgeworCQkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCAmYmV2LmJ1aWxkX2lkKTsKKwkJCWlmIChoZWFkID09ICZkc29zX19rZXJuZWwgJiYgZmlsZW5hbWVbMF0gPT0gJ1snKQorCQkJCWRzby0+a2VybmVsID0gMTsKKwkJfQorCisJCW9mZnNldCArPSBiZXYuaGVhZGVyLnNpemU7CisJfQorCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2VsZiwgMCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKKwkJdGhyZWFkID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gdGhyZWFkOworfQorCitpbnQgX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgdTY0IGRhdGFfb2Zmc2V0LCB1NjQgZGF0YV9zaXplLAorCQkJCSAgIHU2NCBmaWxlX3NpemUsIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQoreworCWludCBlcnIsIG1tYXBfcHJvdCwgbW1hcF9mbGFnczsKKwl1NjQgaGVhZCwgc2hpZnQ7CisJdTY0IG9mZnNldCA9IDA7CisJc2l6ZV90CXBhZ2Vfc2l6ZTsKKwlldmVudF90ICpldmVudDsKKwl1aW50MzJfdCBzaXplOworCWNoYXIgKmJ1ZjsKKworCXBlcmZfZXZlbnRfb3BzX19maWxsX2RlZmF1bHRzKG9wcyk7CisKKwlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisKKwloZWFkID0gZGF0YV9vZmZzZXQ7CisJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisJb2Zmc2V0ICs9IHNoaWZ0OworCWhlYWQgLT0gc2hpZnQ7CisKKwltbWFwX3Byb3QgID0gUFJPVF9SRUFEOworCW1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEOworCisJaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKSB7CisJCW1tYXBfcHJvdCAgfD0gUFJPVF9XUklURTsKKwkJbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOworCX0KK3JlbWFwOgorCWJ1ZiA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3csIG1tYXBfcHJvdCwKKwkJICAgbW1hcF9mbGFncywgc2VsZi0+ZmQsIG9mZnNldCk7CisJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXByX2VycigiZmFpbGVkIHRvIG1tYXAgZmlsZVxuIik7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBvdXRfZXJyOworCX0KKworbW9yZToKKwlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOworCisJaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKQorCQlwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoJmV2ZW50LT5oZWFkZXIpOworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisJaWYgKHNpemUgPT0gMCkKKwkJc2l6ZSA9IDg7CisKKwlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdykgeworCQlpbnQgbXVubWFwX3JldDsKKworCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKworCQltdW5tYXBfcmV0ID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpOworCQlhc3NlcnQobXVubWFwX3JldCA9PSAwKTsKKworCQlvZmZzZXQgKz0gc2hpZnQ7CisJCWhlYWQgLT0gc2hpZnQ7CisJCWdvdG8gcmVtYXA7CisJfQorCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKworCWR1bXBfcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwKKwkJICAgIG9mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKKworCWlmIChzaXplID09IDAgfHwKKwkgICAgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHNlbGYsIGV2ZW50LCBvcHMsIG9mZnNldCwgaGVhZCkgPCAwKSB7CisJCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKKwkJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCisJCQkgICAgZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJLyoKKwkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKKwkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCisJCSAqLworCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQorCQkJaGVhZCAmPSB+N1VMTDsKKworCQlzaXplID0gODsKKwl9CisKKwloZWFkICs9IHNpemU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA+PSBkYXRhX29mZnNldCArIGRhdGFfc2l6ZSkKKwkJZ290byBkb25lOworCisJaWYgKG9mZnNldCArIGhlYWQgPCBmaWxlX3NpemUpCisJCWdvdG8gbW9yZTsKK2RvbmU6CisJZXJyID0gMDsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpCit7CisJaW50IGVycjsKKworCWlmIChwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHNlbGYpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFzeW1ib2xfY29uZi5mdWxsX3BhdGhzKSB7CisJCWNoYXIgYmZbUEFUSF9NQVhdOworCisJCWlmIChnZXRjd2QoYmYsIHNpemVvZihiZikpID09IE5VTEwpIHsKKwkJCWVyciA9IC1lcnJubzsKK291dF9nZXRjd2RfZXJyOgorCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJc2VsZi0+Y3dkID0gc3RyZHVwKGJmKTsKKwkJaWYgKHNlbGYtPmN3ZCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZ2V0Y3dkX2VycjsKKwkJfQorCQlzZWxmLT5jd2RsZW4gPSBzdHJsZW4oc2VsZi0+Y3dkKTsKKwl9CisKKwllcnIgPSBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2VsZiwgc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0LAorCQkJCQkgICAgIHNlbGYtPmhlYWRlci5kYXRhX3NpemUsCisJCQkJCSAgICAgc2VsZi0+c2l6ZSwgb3BzKTsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworYm9vbCBwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY29uc3QgY2hhciAqbXNnKQoreworCWlmICghKHNlbGYtPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgeworCQlwcl9lcnIoIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgJ3BlcmYgJXMnP1xuIiwgbXNnKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitpbnQgcGVyZl9zZXNzaW9uX19zZXRfa2FsbHN5bXNfcmVmX3JlbG9jX3N5bShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lLAorCQkJCQkgICAgIHU2NCBhZGRyKQoreworCWNoYXIgKmJyYWNrZXQ7CisJZW51bSBtYXBfdHlwZSBpOworCisJc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lID0gc3RyZHVwKHN5bWJvbF9uYW1lKTsKKwlpZiAoc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYnJhY2tldCA9IHN0cmNocihzZWxmLT5yZWZfcmVsb2Nfc3ltLm5hbWUsICddJyk7CisJaWYgKGJyYWNrZXQpCisJCSpicmFja2V0ID0gJ1wwJzsKKworCXNlbGYtPnJlZl9yZWxvY19zeW0uYWRkciA9IGFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKSB7CisJCXN0cnVjdCBrbWFwICprbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1tpXSk7CisJCWttYXAtPnJlZl9yZWxvY19zeW0gPSAmc2VsZi0+cmVmX3JlbG9jX3N5bTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBtYXBfX3JlbG9jX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyAoczY0KW1hcC0+cGdvZmY7Cit9CisKK3N0YXRpYyB1NjQgbWFwX19yZWxvY191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgLSAoczY0KW1hcC0+cGdvZmY7Cit9CisKK3ZvaWQgbWFwX19yZWxvY192bWxpbnV4KHN0cnVjdCBtYXAgKnNlbGYpCit7CisJc3RydWN0IGttYXAgKmttYXAgPSBtYXBfX2ttYXAoc2VsZik7CisJczY0IHJlbG9jOworCisJaWYgKCFrbWFwLT5yZWZfcmVsb2Nfc3ltIHx8ICFrbWFwLT5yZWZfcmVsb2Nfc3ltLT51bnJlbG9jYXRlZF9hZGRyKQorCQlyZXR1cm47CisKKwlyZWxvYyA9IChrbWFwLT5yZWZfcmVsb2Nfc3ltLT51bnJlbG9jYXRlZF9hZGRyIC0KKwkJIGttYXAtPnJlZl9yZWxvY19zeW0tPmFkZHIpOworCisJaWYgKCFyZWxvYykKKwkJcmV0dXJuOworCisJc2VsZi0+bWFwX2lwICAgPSBtYXBfX3JlbG9jX21hcF9pcDsKKwlzZWxmLT51bm1hcF9pcCA9IG1hcF9fcmVsb2NfdW5tYXBfaXA7CisJc2VsZi0+cGdvZmYgICAgPSByZWxvYzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmggYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCmluZGV4IDMyZWFhMWIuLjMxOTUwZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaApAQCAtMywxMyArMywxMyBAQAogCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJoZWFkZXIuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCIKIAogc3RydWN0IGlwX2NhbGxjaGFpbjsKIHN0cnVjdCB0aHJlYWQ7Ci1zdHJ1Y3Qgc3ltYm9sOwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXIJaGVhZGVyOwpAQCAtMTgsMTAgKzE4LDEzIEBACiAJc3RydWN0IG1hcF9ncm91cHMJa21hcHM7CiAJc3RydWN0IHJiX3Jvb3QJCXRocmVhZHM7CiAJc3RydWN0IHRocmVhZAkJKmxhc3RfbWF0Y2g7CisJc3RydWN0IG1hcAkJKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgZXZlbnRzX3N0YXRzCWV2ZW50c19zdGF0czsKIAl1bnNpZ25lZCBsb25nCQlldmVudF90b3RhbFtQRVJGX1JFQ09SRF9NQVhdOworCXVuc2lnbmVkIGxvbmcJCXVua25vd25fZXZlbnRzOwogCXN0cnVjdCByYl9yb290CQloaXN0czsKIAl1NjQJCQlzYW1wbGVfdHlwZTsKKwlzdHJ1Y3QgcmVmX3JlbG9jX3N5bQlyZWZfcmVsb2Nfc3ltOwogCWludAkJCWZkOwogCWludAkJCWN3ZGxlbjsKIAljaGFyCQkJKmN3ZDsKQEAgLTMxLDIzICszNCwyNSBAQAogdHlwZWRlZiBpbnQgKCpldmVudF9vcCkoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIHN0cnVjdCBwZXJmX2V2ZW50X29wcyB7Ci0JZXZlbnRfb3AJcHJvY2Vzc19zYW1wbGVfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19tbWFwX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfY29tbV9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2ZvcmtfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19leGl0X2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfbG9zdF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX3JlYWRfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc190aHJvdHRsZV9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQ7Ci0JaW50CQkoKnNhbXBsZV90eXBlX2NoZWNrKShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLQl1bnNpZ25lZCBsb25nCXRvdGFsX3Vua25vd247Ci0JYm9vbAkJZnVsbF9wYXRoczsKKwlldmVudF9vcCBzYW1wbGUsCisJCSBtbWFwLAorCQkgY29tbSwKKwkJIGZvcmssCisJCSBleGl0LAorCQkgbG9zdCwKKwkJIHJlYWQsCisJCSB0aHJvdHRsZSwKKwkJIHVudGhyb3R0bGU7CiB9OwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsIGJvb2wgZm9yY2UpOwogdm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKIAordm9pZCBwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpzZWxmKTsKKworaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwgdTY0IHNpemUsCisJCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpOwogaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKIAkJCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpldmVudF9vcHMpOwogCkBAIC01Niw2ICs2MSwyOCBAQAogCQkJCQkJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCiAJCQkJCQlzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50KTsKIAotaW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhpbnQgaW5wdXQsIHU2NCBvZmZzZXQsIHU2NCBmaWxlX3NpemUpOworYm9vbCBwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY29uc3QgY2hhciAqbXNnKTsKIAoraW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBpbnB1dCwKKwkJCQl1NjQgb2Zmc2V0LCB1NjQgZmlsZV9zaXplKTsKKworaW50IHBlcmZfc2Vzc2lvbl9fc2V0X2thbGxzeW1zX3JlZl9yZWxvY19zeW0oc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSwKKwkJCQkJICAgICB1NjQgYWRkcik7CisKK3ZvaWQgbWVtX2Jzd2FwXzY0KHZvaWQgKnNyYywgaW50IGJ5dGVfc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJCXN0cnVjdCBkc28gKmtlcm5lbCkKK3sKKwlyZXR1cm4gX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLAorCQkJCQkJc2VsZi0+dm1saW51eF9tYXBzLCBrZXJuZWwpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXAgKgorCXBlcmZfc2Vzc2lvbl9fbmV3X21vZHVsZV9tYXAoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICAgIHU2NCBzdGFydCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJcmV0dXJuIG1hcF9ncm91cHNfX25ld19tb2R1bGUoJnNlbGYtPmttYXBzLCBzdGFydCwgZmlsZW5hbWUpOworfQogI2VuZGlmIC8qIF9fUEVSRl9TRVNTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCA1MzUyZDdkLi5jMzk3ZDRmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCkBAIC0yMjcsMTYgKzIyNyw3MyBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBHbG9iIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyAqLworLyogQ2hhcmFjdGVyIGNsYXNzIG1hdGNoaW5nICovCitzdGF0aWMgYm9vbCBfX21hdGNoX2NoYXJjbGFzcyhjb25zdCBjaGFyICpwYXQsIGNoYXIgYywgY29uc3QgY2hhciAqKm5wYXQpCit7CisJYm9vbCBjb21wbGVtZW50ID0gZmFsc2UsIHJldCA9IHRydWU7CisKKwlpZiAoKnBhdCA9PSAnIScpIHsKKwkJY29tcGxlbWVudCA9IHRydWU7CisJCXBhdCsrOworCX0KKwlpZiAoKnBhdCsrID09IGMpCS8qIEZpcnN0IGNoYXJhY3RlciBpcyBzcGVjaWFsICovCisJCWdvdG8gZW5kOworCisJd2hpbGUgKCpwYXQgJiYgKnBhdCAhPSAnXScpIHsJLyogTWF0Y2hpbmcgKi8KKwkJaWYgKCpwYXQgPT0gJy0nICYmICoocGF0ICsgMSkgIT0gJ10nKSB7CS8qIFJhbmdlICovCisJCQlpZiAoKihwYXQgLSAxKSA8PSBjICYmIGMgPD0gKihwYXQgKyAxKSkKKwkJCQlnb3RvIGVuZDsKKwkJCWlmICgqKHBhdCAtIDEpID4gKihwYXQgKyAxKSkKKwkJCQlnb3RvIGVycm9yOworCQkJcGF0ICs9IDI7CisJCX0gZWxzZSBpZiAoKnBhdCsrID09IGMpCisJCQlnb3RvIGVuZDsKKwl9CisJaWYgKCEqcGF0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGZhbHNlOworCitlbmQ6CisJd2hpbGUgKCpwYXQgJiYgKnBhdCAhPSAnXScpCS8qIFNlYXJjaGluZyBjbG9zaW5nICovCisJCXBhdCsrOworCWlmICghKnBhdCkKKwkJZ290byBlcnJvcjsKKwkqbnBhdCA9IHBhdCArIDE7CisJcmV0dXJuIGNvbXBsZW1lbnQgPyAhcmV0IDogcmV0OworCitlcnJvcjoKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogc3RyZ2xvYm1hdGNoIC0gZ2xvYiBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcKKyAqIEBzdHI6IHRoZSB0YXJnZXQgc3RyaW5nIHRvIG1hdGNoCisgKiBAcGF0OiB0aGUgcGF0dGVybiBzdHJpbmcgdG8gbWF0Y2gKKyAqCisgKiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgQHN0ciBtYXRjaGVzIEBwYXQuIEBwYXQgY2FuIGluY2x1ZGVzIHdpbGRjYXJkcworICogKCcqJywnPycpIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcyAoW0NIQVJTXSwgY29tcGxlbWVudGF0aW9uIGFuZCByYW5nZXMgYXJlCisgKiBhbHNvIHN1cHBvcnRlZCkuIEFsc28sIHRoaXMgc3VwcG9ydHMgZXNjYXBlIGNoYXJhY3RlciAoJ1wnKSB0byB1c2Ugc3BlY2lhbAorICogY2hhcmFjdGVycyBhcyBub3JtYWwgY2hhcmFjdGVyLgorICoKKyAqIE5vdGU6IGlmIEBwYXQgc3ludGF4IGlzIGJyb2tlbiwgdGhpcyBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAqLwogYm9vbCBzdHJnbG9ibWF0Y2goY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCiB7CiAJd2hpbGUgKCpzdHIgJiYgKnBhdCAmJiAqcGF0ICE9ICcqJykgewotCQlpZiAoKnBhdCA9PSAnPycpIHsKKwkJaWYgKCpwYXQgPT0gJz8nKSB7CS8qIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgKi8KIAkJCXN0cisrOwogCQkJcGF0Kys7Ci0JCX0gZWxzZQotCQkJaWYgKCpzdHIrKyAhPSAqcGF0KyspCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgqcGF0ID09ICdbJykJLyogQ2hhcmFjdGVyIGNsYXNzZXMvUmFuZ2VzICovCisJCQlpZiAoX19tYXRjaF9jaGFyY2xhc3MocGF0ICsgMSwgKnN0ciwgJnBhdCkpIHsKKwkJCQlzdHIrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZQogCQkJCXJldHVybiBmYWxzZTsKKwkJZWxzZSBpZiAoKnBhdCA9PSAnXFwnKSAvKiBFc2NhcGVkIGNoYXIgbWF0Y2ggYXMgbm9ybWFsIGNoYXIgKi8KKwkJCXBhdCsrOworCQlpZiAoKnN0cisrICE9ICpwYXQrKykKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogQ2hlY2sgd2lsZCBjYXJkICovCiAJaWYgKCpwYXQgPT0gJyonKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggYWI5Mjc2My4uMzIzYzBhZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgotI2luY2x1ZGUgInNlc3Npb24uaCIKICNpbmNsdWRlICJzb3J0LmgiCiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCkBAIC0yMiw2ICsyMSw3IEBACiBlbnVtIGRzb19vcmlnaW4gewogCURTT19fT1JJR19LRVJORUwgPSAwLAogCURTT19fT1JJR19KQVZBX0pJVCwKKwlEU09fX09SSUdfQlVJTERfSURfQ0FDSEUsCiAJRFNPX19PUklHX0ZFRE9SQSwKIAlEU09fX09SSUdfVUJVTlRVLAogCURTT19fT1JJR19CVUlMRElELApAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkc28gKmRzbyk7CiBzdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcyKHU2NCBzdGFydCwgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiBzdGF0aWMgaW50IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsKIHN0YXRpYyBjaGFyICoqdm1saW51eF9wYXRoOwogCkBAIC01MywxNyArNTMsMTIgQEAKIAlyZXR1cm4gc2VsZi0+c29ydGVkX2J5X25hbWUgJiAoMSA8PCB0eXBlKTsKIH0KIAotc3RhdGljIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKLXsKLQlzZWxmLT5sb2FkZWQgfD0gKDEgPDwgdHlwZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRzb19fc2V0X3NvcnRlZF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzZWxmLT5zb3J0ZWRfYnlfbmFtZSB8PSAoMSA8PCB0eXBlKTsKIH0KIAotc3RhdGljIGJvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKK2Jvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKIHsKIAlzd2l0Y2ggKG1hcF90eXBlKSB7CiAJY2FzZSBNQVBfX0ZVTkNUSU9OOgpAQCAtMTQyLDE0ICsxMzcsMTQgQEAKIAlzZWxmLT5zdGFydCA9IHN0YXJ0OwogCXNlbGYtPmVuZCAgID0gbGVuID8gc3RhcnQgKyBsZW4gLSAxIDogc3RhcnQ7CiAKLQlwcl9kZWJ1ZzMoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKKwlwcl9kZWJ1ZzQoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKIAogCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAogCXJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQordm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewogCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemUpOwogfQpAQCAtMTYwLDcgKzE1NSw3IEBACiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGNoYXIgKm5hbWUpCit2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQogewogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzAsNyBAQAogCiBzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSArIHN0cmxlbihuYW1lKSArIDEpOworCXN0cnVjdCBkc28gKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSArIHN0cmxlbihuYW1lKSArIDEpOwogCiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQlpbnQgaTsKQEAgLTM0NCwxMCArMzM5LDEwIEBACiAJCQkJICAgICAmc2VsZi0+c3ltYm9sc1t0eXBlXSk7CiB9CiAKLWludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKQogewogCWNoYXIgKmJpZCA9IGJmOwotCXU4ICpyYXcgPSBzZWxmOworCWNvbnN0IHU4ICpyYXcgPSBzZWxmOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CkBAIC0zNzIsNiArMzY3LDEwIEBACiAJc3RydWN0IHJiX25vZGUgKm5kOwogCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgc2VsZi0+c2hvcnRfbmFtZSk7CiAKKwlpZiAoc2VsZi0+c2hvcnRfbmFtZSAhPSBzZWxmLT5sb25nX25hbWUpCisJCXJldCArPSBmcHJpbnRmKGZwLCAiJXMsICIsIHNlbGYtPmxvbmdfbmFtZSk7CisJcmV0ICs9IGZwcmludGYoZnAsICIlcywgJXNsb2FkZWQsICIsIG1hcF90eXBlX19uYW1lW3R5cGVdLAorCQkgICAgICAgc2VsZi0+bG9hZGVkID8gIiIgOiAiTk9UICIpOwogCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChzZWxmLCBmcCk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIpXG4iKTsKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bWJvbHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewpAQCAtMzgyLDI0ICszODEsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogTG9hZHMgdGhlIGZ1bmN0aW9uIGVudHJpZXMgaW4gL3Byb2Mva2FsbHN5bXMgaW50byBrZXJuZWxfbWFwLT5kc28sCi0gKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KLSAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgotICovCi1zdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoraW50IGthbGxzeW1zX19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYXJnLAorCQkgICAgaW50ICgqcHJvY2Vzc19zeW1ib2wpKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgICAgY2hhciB0eXBlLCB1NjQgc3RhcnQpKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwotCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXTsKLQlGSUxFICpmaWxlID0gZm9wZW4oIi9wcm9jL2thbGxzeW1zIiwgInIiKTsKKwlpbnQgZXJyID0gMDsKKwlGSUxFICpmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCXU2NCBzdGFydDsKLQkJc3RydWN0IHN5bWJvbCAqc3ltOwogCQlpbnQgbGluZV9sZW4sIGxlbjsKIAkJY2hhciBzeW1ib2xfdHlwZTsKIAkJY2hhciAqc3ltYm9sX25hbWU7CkBAIC00MjAsNDMgKzQxNSw3MiBAQAogCQkJY29udGludWU7CiAKIAkJc3ltYm9sX3R5cGUgPSB0b3VwcGVyKGxpbmVbbGVuXSk7Ci0JCWlmICghc3ltYm9sX3R5cGVfX2lzX2Eoc3ltYm9sX3R5cGUsIG1hcC0+dHlwZSkpCi0JCQljb250aW51ZTsKLQogCQlzeW1ib2xfbmFtZSA9IGxpbmUgKyBsZW4gKyAyOwotCQkvKgotCQkgKiBXaWxsIGZpeCB1cCB0aGUgZW5kIGxhdGVyLCB3aGVuIHdlIGhhdmUgYWxsIHN5bWJvbHMgc29ydGVkLgotCQkgKi8KLQkJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIDAsIHN5bWJvbF9uYW1lKTsKIAotCQlpZiAoc3ltID09IE5VTEwpCi0JCQlnb3RvIG91dF9kZWxldGVfbGluZTsKLQkJLyoKLQkJICogV2Ugd2lsbCBwYXNzIHRoZSBzeW1ib2xzIHRvIHRoZSBmaWx0ZXIgbGF0ZXIsIGluCi0JCSAqIG1hcF9fc3BsaXRfa2FsbHN5bXMsIHdoZW4gd2UgaGF2ZSBzcGxpdCB0aGUgbWFwcyBwZXIgbW9kdWxlCi0JCSAqLwotCQlzeW1ib2xzX19pbnNlcnQocm9vdCwgc3ltKTsKKwkJZXJyID0gcHJvY2Vzc19zeW1ib2woYXJnLCBzeW1ib2xfbmFtZSwgc3ltYm9sX3R5cGUsIHN0YXJ0KTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOwogCX0KIAogCWZyZWUobGluZSk7CiAJZmNsb3NlKGZpbGUpOworCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsKLQotb3V0X2RlbGV0ZV9saW5lOgotCWZyZWUobGluZSk7CiBvdXRfZmFpbHVyZToKIAlyZXR1cm4gLTE7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgeworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc287Cit9OworCitzdGF0aWMgaW50IG1hcF9fcHJvY2Vzc19rYWxsc3ltX3N5bWJvbCh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzICphID0gYXJnOworCXN0cnVjdCByYl9yb290ICpyb290ID0gJmEtPmRzby0+c3ltYm9sc1thLT5tYXAtPnR5cGVdOworCisJaWYgKCFzeW1ib2xfdHlwZV9faXNfYSh0eXBlLCBhLT5tYXAtPnR5cGUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KKwkgKi8KKwlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwgbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCS8qCisJICogV2Ugd2lsbCBwYXNzIHRoZSBzeW1ib2xzIHRvIHRoZSBmaWx0ZXIgbGF0ZXIsIGluCisJICogbWFwX19zcGxpdF9rYWxsc3ltcywgd2hlbiB3ZSBoYXZlIHNwbGl0IHRoZSBtYXBzIHBlciBtb2R1bGUKKwkgKi8KKwlzeW1ib2xzX19pbnNlcnQocm9vdCwgc3ltKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvYWRzIHRoZSBmdW5jdGlvbiBlbnRyaWVzIGluIC9wcm9jL2thbGxzeW1zIGludG8ga2VybmVsX21hcC0+ZHNvLAorICogc28gdGhhdCB3ZSBjYW4gaW4gdGhlIG5leHQgc3RlcCBzZXQgdGhlIHN5bWJvbCAtPmVuZCBhZGRyZXNzIGFuZCB0aGVuCisgKiBjYWxsIGtlcm5lbF9tYXBzX19zcGxpdF9rYWxsc3ltcy4KKyAqLworc3RhdGljIGludCBkc29fX2xvYWRfYWxsX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgc3RydWN0IG1hcCAqbWFwKQoreworCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgYXJncyA9IHsgLm1hcCA9IG1hcCwgLmRzbyA9IHNlbGYsIH07CisJcmV0dXJuIGthbGxzeW1zX19wYXJzZShmaWxlbmFtZSwgJmFyZ3MsIG1hcF9fcHJvY2Vzc19rYWxsc3ltX3N5bWJvbCk7Cit9CisKIC8qCiAgKiBTcGxpdCB0aGUgc3ltYm9scyBpbnRvIG1hcHMsIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdmVybGFwcywgaS5lLiB0aGUKICAqIGtlcm5lbCByYW5nZSBpcyBicm9rZW4gaW4gc2V2ZXJhbCBtYXBzLCBuYW1lZCBba2VybmVsXS5OLCBhcyB3ZSBkb24ndCBoYXZlCiAgKiB0aGUgb3JpZ2luYWwgRUxGIHNlY3Rpb24gbmFtZXMgdm1saW51eCBoYXZlLgogICovCiBzdGF0aWMgaW50IGRzb19fc3BsaXRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCisJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKKwlzdHJ1Y3QgbWFwX2dyb3VwcyAqa21hcHMgPSBtYXBfX2ttYXAobWFwKS0+a21hcHM7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CiAJc3RydWN0IHN5bWJvbCAqcG9zOwogCWludCBjb3VudCA9IDA7CkBAIC00NzcsMTMgKzUwMSwxNyBAQAogCiAJCQkqbW9kdWxlKysgPSAnXDAnOwogCi0JCQlpZiAoc3RyY21wKHNlbGYtPm5hbWUsIG1vZHVsZSkpIHsKLQkJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi0+a21hcHMsIG1hcC0+dHlwZSwgbW9kdWxlKTsKKwkJCWlmIChzdHJjbXAoY3Vycl9tYXAtPmRzby0+c2hvcnRfbmFtZSwgbW9kdWxlKSkgeworCQkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKGttYXBzLCBtYXAtPnR5cGUsIG1vZHVsZSk7CiAJCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQkJcHJfZGVidWcoIi9wcm9jL3trYWxsc3ltcyxtb2R1bGVzfSAiCi0JCQkJCSAgICAgICAgICJpbmNvbnNpc3RlbmN5IVxuIik7CisJCQkJCSAgICAgICAgICJpbmNvbnNpc3RlbmN5IHdoaWxlIGxvb2tpbmcgIgorCQkJCQkJICJmb3IgXCIlc1wiIG1vZHVsZSFcbiIsIG1vZHVsZSk7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CisKKwkJCQlpZiAoY3Vycl9tYXAtPmRzby0+bG9hZGVkKQorCQkJCQlnb3RvIGRpc2NhcmRfc3ltYm9sOwogCQkJfQogCQkJLyoKIAkJCSAqIFNvIHRoYXQgd2UgbG9vayBqdXN0IGxpa2Ugd2UgZ2V0IGZyb20gLmtvIGZpbGVzLApAQCAtNTAzLDEzICs1MzEsMTMgQEAKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWN1cnJfbWFwID0gbWFwX19uZXcyKHBvcy0+c3RhcnQsIGRzbywgbWFwLT50eXBlKTsKLQkJCWlmIChtYXAgPT0gTlVMTCkgeworCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQlkc29fX2RlbGV0ZShkc28pOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAogCQkJY3Vycl9tYXAtPm1hcF9pcCA9IGN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7Ci0JCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlc3Npb24tPmttYXBzLCBjdXJyX21hcCk7CisJCQltYXBfZ3JvdXBzX19pbnNlcnQoa21hcHMsIGN1cnJfbWFwKTsKIAkJCSsra2VybmVsX3JhbmdlOwogCQl9CiAKQEAgLTUyOCwxNyArNTU2LDE2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0KLXN0YXRpYyBpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIG1hcCkgPCAwKQorCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIGZpbGVuYW1lLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOwogCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7CiAKLQlyZXR1cm4gZHNvX19zcGxpdF9rYWxsc3ltcyhzZWxmLCBtYXAsIHNlc3Npb24sIGZpbHRlcik7CisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBmaWx0ZXIpOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9wZXJmX21hcChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCkBAIC04NjQsMTAgKzg5MSwxMCBAQAogCX0KIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsCi0JCQkgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGtlcm5lbCwgaW50IGttb2R1bGUpCitzdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGludCBmZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGttb2R1bGUpCiB7CisJc3RydWN0IGttYXAgKmttYXAgPSBzZWxmLT5rZXJuZWwgPyBtYXBfX2ttYXAobWFwKSA6IE5VTEw7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CiAJc3RydWN0IGRzbyAqY3Vycl9kc28gPSBzZWxmOwogCXNpemVfdCBkc29fbmFtZV9sZW4gPSBzdHJsZW4oc2VsZi0+c2hvcnRfbmFtZSk7CkBAIC05MjQsNyArOTUxLDcgQEAKIAlucl9zeW1zID0gc2hkci5zaF9zaXplIC8gc2hkci5zaF9lbnRzaXplOwogCiAJbWVtc2V0KCZzeW0sIDAsIHNpemVvZihzeW0pKTsKLQlpZiAoIWtlcm5lbCkgeworCWlmICghc2VsZi0+a2VybmVsKSB7CiAJCXNlbGYtPmFkanVzdF9zeW1ib2xzID0gKGVoZHIuZV90eXBlID09IEVUX0VYRUMgfHwKIAkJCQllbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLAogCQkJCQkJICAgICAiLmdudS5wcmVsaW5rX3VuZG8iLApAQCAtOTMzLDExICs5NjAsMTUgQEAKIAogCWVsZl9zeW10YWJfX2Zvcl9lYWNoX3N5bWJvbChzeW1zLCBucl9zeW1zLCBpZHgsIHN5bSkgewogCQlzdHJ1Y3Qgc3ltYm9sICpmOwotCQljb25zdCBjaGFyICplbGZfbmFtZTsKKwkJY29uc3QgY2hhciAqZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwogCQljaGFyICpkZW1hbmdsZWQgPSBOVUxMOwogCQlpbnQgaXNfbGFiZWwgPSBlbGZfc3ltX19pc19sYWJlbCgmc3ltKTsKIAkJY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lOwogCisJCWlmIChrbWFwICYmIGttYXAtPnJlZl9yZWxvY19zeW0gJiYga21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSAmJgorCQkgICAgc3RyY21wKGVsZl9uYW1lLCBrbWFwLT5yZWZfcmVsb2Nfc3ltLT5uYW1lKSA9PSAwKQorCQkJa21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkciA9IHN5bS5zdF92YWx1ZTsKKwogCQlpZiAoIWlzX2xhYmVsICYmICFlbGZfc3ltX19pc19hKCZzeW0sIG1hcC0+dHlwZSkpCiAJCQljb250aW51ZTsKIApAQCAtOTUwLDEwICs5ODEsOSBAQAogCQlpZiAoaXNfbGFiZWwgJiYgIWVsZl9zZWNfX2lzX2EoJnNoZHIsIHNlY3N0cnMsIG1hcC0+dHlwZSkpCiAJCQljb250aW51ZTsKIAotCQllbGZfbmFtZSA9IGVsZl9zeW1fX25hbWUoJnN5bSwgc3ltc3Rycyk7CiAJCXNlY3Rpb25fbmFtZSA9IGVsZl9zZWNfX25hbWUoJnNoZHIsIHNlY3N0cnMpOwogCi0JCWlmIChrZXJuZWwgfHwga21vZHVsZSkgeworCQlpZiAoc2VsZi0+a2VybmVsIHx8IGttb2R1bGUpIHsKIAkJCWNoYXIgZHNvX25hbWVbUEFUSF9NQVhdOwogCiAJCQlpZiAoc3RyY21wKHNlY3Rpb25fbmFtZSwKQEAgLTk2OSw3ICs5OTksNyBAQAogCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksCiAJCQkJICIlcyVzIiwgc2VsZi0+c2hvcnRfbmFtZSwgc2VjdGlvbl9uYW1lKTsKIAotCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24tPmttYXBzLCBtYXAtPnR5cGUsIGRzb19uYW1lKTsKKwkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKGttYXAtPmttYXBzLCBtYXAtPnR5cGUsIGRzb19uYW1lKTsKIAkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJdTY0IHN0YXJ0ID0gc3ltLnN0X3ZhbHVlOwogCkBAIC05ODAsNyArMTAxMCw3IEBACiAJCQkJaWYgKGN1cnJfZHNvID09IE5VTEwpCiAJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CiAJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAotCQkJCQkJICAgICBNQVBfX0ZVTkNUSU9OKTsKKwkJCQkJCSAgICAgbWFwLT50eXBlKTsKIAkJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCQlkc29fX2RlbGV0ZShjdXJyX2Rzbyk7CiAJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CkBAIC05ODgsOCArMTAxOCw5IEBACiAJCQkJY3Vycl9tYXAtPm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAkJCQljdXJyX2Rzby0+b3JpZ2luID0gRFNPX19PUklHX0tFUk5FTDsKLQkJCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlc3Npb24tPmttYXBzLCBjdXJyX21hcCk7CisJCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXAtPmttYXBzLCBjdXJyX21hcCk7CiAJCQkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGN1cnJfZHNvKTsKKwkJCQlkc29fX3NldF9sb2FkZWQoY3Vycl9kc28sIG1hcC0+dHlwZSk7CiAJCQl9IGVsc2UKIAkJCQljdXJyX2RzbyA9IGN1cnJfbWFwLT5kc287CiAKQEAgLTk5Nyw5ICsxMDI4LDEwIEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlwcl9kZWJ1ZzIoImFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlTHggc2hfYWRkcjogIgotCQkJCSAgIiVMeCBzaF9vZmZzZXQ6ICVMeFxuIiwgKHU2NClzeW0uc3RfdmFsdWUsCi0JCQkJICAodTY0KXNoZHIuc2hfYWRkciwgKHU2NClzaGRyLnNoX29mZnNldCk7CisJCQlwcl9kZWJ1ZzQoIiVzOiBhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJSNMeCAiCisJCQkJICAic2hfYWRkcjogJSNMeCBzaF9vZmZzZXQ6ICUjTHhcbiIsIF9fZnVuY19fLAorCQkJCSAgKHU2NClzeW0uc3RfdmFsdWUsICh1NjQpc2hkci5zaF9hZGRyLAorCQkJCSAgKHU2NClzaGRyLnNoX29mZnNldCk7CiAJCQlzeW0uc3RfdmFsdWUgLT0gc2hkci5zaF9hZGRyIC0gc2hkci5zaF9vZmZzZXQ7CiAJCX0KIAkJLyoKQEAgLTEwMjcsOCArMTA1OSwxNiBAQAogCS8qCiAJICogRm9yIG1pc2Fubm90YXRlZCwgemVyb2VkLCBBU00gZnVuY3Rpb24gc2l6ZXMuCiAJICovCi0JaWYgKG5yID4gMCkKKwlpZiAobnIgPiAwKSB7CiAJCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKKwkJaWYgKGttYXApIHsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIGZpeHVwIHRoaXMgaGVyZSB0b28gYmVjYXVzZSB3ZSBjcmVhdGUgbmV3CisJCQkgKiBtYXBzIGhlcmUsIGZvciB0aGluZ3MgbGlrZSB2c3lzY2FsbCBzZWN0aW9ucy4KKwkJCSAqLworCQkJX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoa21hcC0+a21hcHMsIG1hcC0+dHlwZSk7CisJCX0KKwl9CiAJZXJyID0gbnI7CiBvdXRfZWxmX2VuZDoKIAllbGZfZW5kKGVsZik7CkBAIC0xMDQxLDI1ICsxMDgxLDI4IEBACiAJcmV0dXJuIG1lbWNtcChzZWxmLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDA7CiB9CiAKLXN0YXRpYyBib29sIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBib29sIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB3aXRoX2hpdHMpCiB7CiAJYm9vbCBoYXZlX2J1aWxkX2lkID0gZmFsc2U7CiAJc3RydWN0IGRzbyAqcG9zOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJaWYgKHdpdGhfaGl0cyAmJiAhcG9zLT5oaXQpCisJCQljb250aW51ZTsKIAkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHBvcy0+bG9uZ19uYW1lLCBwb3MtPmJ1aWxkX2lkLAogCQkJCQkgICAgc2l6ZW9mKHBvcy0+YnVpbGRfaWQpKSA+IDApIHsKIAkJCWhhdmVfYnVpbGRfaWQJICA9IHRydWU7CiAJCQlwb3MtPmhhc19idWlsZF9pZCA9IHRydWU7CiAJCX0KKwl9CiAKIAlyZXR1cm4gaGF2ZV9idWlsZF9pZDsKIH0KIAotYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKQorYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyhib29sIHdpdGhfaGl0cykKIHsKLQlib29sIGtidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCksCi0JICAgICB1YnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX191c2VyKTsKKwlib29sIGtidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCwgd2l0aF9oaXRzKSwKKwkgICAgIHVidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX3VzZXIsIHdpdGhfaGl0cyk7CiAJcmV0dXJuIGtidWlsZGlkcyB8fCB1YnVpbGRpZHM7CiB9CiAKQEAgLTExOTEsNiArMTIzNCw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgb3JpZ2luW10gPSB7CiAJCVtEU09fX09SSUdfS0VSTkVMXSA9ICAgJ2snLAogCQlbRFNPX19PUklHX0pBVkFfSklUXSA9ICdqJywKKwkJW0RTT19fT1JJR19CVUlMRF9JRF9DQUNIRV0gPSAnQicsCiAJCVtEU09fX09SSUdfRkVET1JBXSA9ICAgJ2YnLAogCQlbRFNPX19PUklHX1VCVU5UVV0gPSAgICd1JywKIAkJW0RTT19fT1JJR19CVUlMRElEXSA9ICAnYicsCkBAIC0xMjAzLDE5ICsxMjQ3LDE5IEBACiAJcmV0dXJuIG9yaWdpbltzZWxmLT5vcmlnaW5dOwogfQogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoraW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IHNpemUgPSBQQVRIX01BWDsKIAljaGFyICpuYW1lOwogCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CiAJaW50IHJldCA9IC0xOwogCWludCBmZDsKIAogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwogCiAJaWYgKHNlbGYtPmtlcm5lbCkKLQkJcmV0dXJuIGRzb19fbG9hZF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgc2Vzc2lvbiwgZmlsdGVyKTsKKwkJcmV0dXJuIGRzb19fbG9hZF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgZmlsdGVyKTsKIAogCW5hbWUgPSBtYWxsb2Moc2l6ZSk7CiAJaWYgKCFuYW1lKQpAQCAtMTIzMCw4ICsxMjc0LDE2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0ZFRE9SQSAtIDE7CisJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOwogCisJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJCQkgIGJ1aWxkX2lkX2hleCk7CisJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcy8lcy8uYnVpbGQtaWQvJS4ycy8lcyIsCisJCQkgZ2V0ZW52KCJIT01FIiksIERFQlVHX0NBQ0hFX0RJUiwKKwkJCSBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQlnb3RvIG9wZW5fZmlsZTsKKwl9CiBtb3JlOgogCWRvIHsKIAkJc2VsZi0+b3JpZ2luKys7CkBAIC0xMjQ3LDggKzEyOTksNiBAQAogCQljYXNlIERTT19fT1JJR19CVUlMRElEOgogCQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNlbGYtPmxvbmdfbmFtZSwgYnVpbGRfaWQsCiAJCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkpIHsKLQkJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwotCiAJCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCiAJCQkJCQkgIGJ1aWxkX2lkX2hleCk7CiAJCQkJc25wcmludGYobmFtZSwgc2l6ZSwKQEAgLTEyNzYsMTEgKzEzMjYsMTEgQEAKIAkJCWlmICghZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBidWlsZF9pZCkpCiAJCQkJZ290byBtb3JlOwogCQl9Ci0KK29wZW5fZmlsZToKIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAl9IHdoaWxlIChmZCA8IDApOwogCi0JcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIE5VTEwsIG5hbWUsIGZkLCBmaWx0ZXIsIDAsIDApOworCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBuYW1lLCBmZCwgZmlsdGVyLCAwKTsKIAljbG9zZShmZCk7CiAKIAkvKgpAQCAtMTMwOSwxNCArMTM1OSwzNCBAQAogCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBtYXAgKm1hcCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKIAotCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5uYW1lLCBuYW1lKSA9PSAwKQorCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5zaG9ydF9uYW1lLCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIG1hcDsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNoYXIgKmRpcm5hbWUpCitzdGF0aWMgaW50IGRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZikKK3sKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwkvKgorCSAqIGtlcm5lbCBtb2R1bGUgc2hvcnQgbmFtZXMgYXJlIG9mIHRoZSBmb3JtICJbbW9kdWxlXSIgYW5kCisJICogd2UgbmVlZCBqdXN0ICJtb2R1bGUiIGhlcmUuCisJICovCisJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPnNob3J0X25hbWUgKyAxOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAiL3N5cy9tb2R1bGUvJS4qcy9ub3Rlcy8ubm90ZS5nbnUuYnVpbGQtaWQiLAorCQkgKGludClzdHJsZW4obmFtZSAtIDEpLCBuYW1lKTsKKworCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgc2VsZi0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDApCisJCXNlbGYtPmhhc19idWlsZF9pZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgY2hhciAqZGlybmFtZSkKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwogCURJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKQEAgLTEzMzYsNyArMTQwNiw3IEBACiAKIAkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwKIAkJCQkgZGlybmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCWlmIChwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIHBhdGgpIDwgMCkKKwkJCWlmIChtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVsc2UgewogCQkJY2hhciAqZG90ID0gc3RycmNocihkZW50LT5kX25hbWUsICcuJyksCkBAIC0xMzUwLDcgKzE0MjAsNyBAQAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCiAJCQlzdHJ4ZnJjaGFyKGRzb19uYW1lLCAnLScsICdfJyk7Ci0JCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlbGYtPmttYXBzLCBNQVBfX0ZVTkNUSU9OLCBkc29fbmFtZSk7CisJCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc2VsZiwgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOwogCQkJaWYgKG1hcCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMzYxLDYgKzE0MzEsNyBAQAogCQkJaWYgKGxvbmdfbmFtZSA9PSBOVUxMKQogCQkJCWdvdG8gZmFpbHVyZTsKIAkJCWRzb19fc2V0X2xvbmdfbmFtZShtYXAtPmRzbywgbG9uZ19uYW1lKTsKKwkJCWRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQobWFwLT5kc28pOwogCQl9CiAJfQogCkBAIC0xMzcwLDcgKzE0NDEsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGgoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAlzdHJ1Y3QgdXRzbmFtZSB1dHM7CiAJY2hhciBtb2R1bGVzX3BhdGhbUEFUSF9NQVhdOwpAQCAtMTM4MSw3ICsxNDUyLDcgQEAKIAlzbnByaW50Zihtb2R1bGVzX3BhdGgsIHNpemVvZihtb2R1bGVzX3BhdGgpLCAiL2xpYi9tb2R1bGVzLyVzL2tlcm5lbCIsCiAJCSB1dHMucmVsZWFzZSk7CiAKLQlyZXR1cm4gcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBtb2R1bGVzX3BhdGgpOworCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBtb2R1bGVzX3BhdGgpOwogfQogCiAvKgpAQCAtMTM5MSw4ICsxNDYyLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXN0cnVjdCBtYXAgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7Ci0KKwlzdHJ1Y3QgbWFwICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikgKworCQkJCSAgKGRzby0+a2VybmVsID8gc2l6ZW9mKHN0cnVjdCBrbWFwKSA6IDApKTsKIAlpZiAoc2VsZiAhPSBOVUxMKSB7CiAJCS8qCiAJCSAqIC0+ZW5kIHdpbGwgYmUgZmlsbGVkIGFmdGVyIHdlIGxvYWQgYWxsIHRoZSBzeW1ib2xzCkBAIC0xNDAzLDcgKzE0NzQsMjUgQEAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9tb2R1bGVfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgdTY0IHN0YXJ0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJmRzb3NfX2tlcm5lbCwgZmlsZW5hbWUpOworCisJaWYgKGRzbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1hcCA9IG1hcF9fbmV3MihzdGFydCwgZHNvLCBNQVBfX0ZVTkNUSU9OKTsKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS01PRFVMRTsKKwltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgbWFwKTsKKwlyZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9tb2R1bGVzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwpAQCAtMTQxNiw3ICsxNTA1LDYgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJY2hhciBuYW1lW1BBVEhfTUFYXTsKIAkJdTY0IHN0YXJ0OwotCQlzdHJ1Y3QgZHNvICpkc287CiAJCWNoYXIgKnNlcDsKIAkJaW50IGxpbmVfbGVuOwogCkBAIC0xNDQyLDMyICsxNTMwLDE2IEBACiAJCSpzZXAgPSAnXDAnOwogCiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIlslc10iLCBsaW5lKTsKLQkJZHNvID0gZHNvX19uZXcobmFtZSk7Ci0KLQkJaWYgKGRzbyA9PSBOVUxMKQorCQltYXAgPSBtYXBfZ3JvdXBzX19uZXdfbW9kdWxlKHNlbGYsIHN0YXJ0LCBuYW1lKTsKKwkJaWYgKG1hcCA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0KLQkJbWFwID0gbWFwX19uZXcyKHN0YXJ0LCBkc28sIE1BUF9fRlVOQ1RJT04pOwotCQlpZiAobWFwID09IE5VTEwpIHsKLQkJCWRzb19fZGVsZXRlKGRzbyk7Ci0JCQlnb3RvIG91dF9kZWxldGVfbGluZTsKLQkJfQotCi0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiL3N5cy9tb2R1bGUvJXMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwgbGluZSk7Ci0JCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZChuYW1lLCBkc28tPmJ1aWxkX2lkLAotCQkJCQkgc2l6ZW9mKGRzby0+YnVpbGRfaWQpKSA9PSAwKQotCQkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwotCi0JCWRzby0+b3JpZ2luID0gRFNPX19PUklHX0tNT0RVTEU7Ci0JCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIG1hcCk7Ci0JCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBkc28pOworCQlkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKG1hcC0+ZHNvKTsKIAl9CiAKIAlmcmVlKGxpbmUpOwogCWZjbG9zZShmaWxlKTsKIAotCXJldHVybiBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CisJcmV0dXJuIG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMTQ3Niw3ICsxNTQ4LDYgQEAKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfdm1saW51eChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVyciA9IC0xLCBmZDsKQEAgLTE1MTAsNTEgKzE1ODEsMTI0IEBACiAJCXJldHVybiAtMTsKIAogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwotCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDEsIDApOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCB2bWxpbnV4LCBmZCwgZmlsdGVyLCAwKTsKIAljbG9zZShmZCk7CiAKKwlpZiAoZXJyID4gMCkKKwkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLCB2bWxpbnV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBkc29fX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAorCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7ICsraSkgeworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHZtbGludXhfcGF0aFtpXSwgZmlsdGVyKTsKKwkJaWYgKGVyciA+IDApIHsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzdHJkdXAodm1saW51eF9wYXRoW2ldKSk7CisJCQlicmVhazsKKwkJfQorCX0KKwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyOwotCWJvb2wgaXNfa2FsbHN5bXM7CisJY29uc3QgY2hhciAqa2FsbHN5bXNfZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgKmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSA9IE5VTEw7CisJLyoKKwkgKiBTdGVwIDE6IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHZtbGludXggZmlsZW5hbWUsIHVzZSBpdCBhbmQgb25seQorCSAqIGl0LCByZXBvcnRpbmcgZXJyb3JzIHRvIHRoZSB1c2VyIGlmIGl0IGNhbm5vdCBiZSB1c2VkLgorCSAqCisJICogRm9yIGluc3RhbmNlLCB0cnkgdG8gYW5hbHlzZSBhbiBBUk0gcGVyZi5kYXRhIGZpbGUgX3dpdGhvdXRfIGEKKwkgKiBidWlsZC1pZCwgb3IgaWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZSB3cm9uZyBwYXRoIHRvIHRoZSByaWdodAorCSAqIHZtbGludXggZmlsZSwgb2J2aW91c2x5IHdlIGNhbid0IGZhbGxiYWNrIHRvIGFub3RoZXIgdm1saW51eCAoYQorCSAqIHg4Nl84NiBvbmUsIG9uIHRoZSBtYWNoaW5lIHdoZXJlIGFuYWx5c2lzIGlzIGJlaW5nIHBlcmZvcm1lZCwgc2F5KSwKKwkgKiBvciB3b3JzZSwgL3Byb2Mva2FsbHN5bXMuCisJICoKKwkgKiBJZiB0aGUgc3BlY2lmaWVkIGZpbGUgX2hhc18gYSBidWlsZC1pZCBhbmQgdGhlcmUgaXMgYSBidWlsZC1pZAorCSAqIHNlY3Rpb24gaW4gdGhlIHBlcmYuZGF0YSBmaWxlLCB3ZSB3aWxsIHN0aWxsIGRvIHRoZSBleHBlY3RlZAorCSAqIHZhbGlkYXRpb24gaW4gZHNvX19sb2FkX3ZtbGludXggYW5kIHdpbGwgYmFpbCBvdXQgaWYgdGhleSBkb24ndAorCSAqIG1hdGNoLgorCSAqLworCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgIT0gTlVMTCkgeworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsCisJCQkJCXN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwgZmlsdGVyKTsKKwkJZ290byBvdXRfdHJ5X2ZpeHVwOworCX0KIAogCWlmICh2bWxpbnV4X3BhdGggIT0gTlVMTCkgewotCQlpbnQgaTsKLQkJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKLQkJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMpOwotCQlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKLQkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgc2Vzc2lvbiwKLQkJCQkJCXZtbGludXhfcGF0aFtpXSwgZmlsdGVyKTsKLQkJCWlmIChlcnIgPiAwKSB7Ci0JCQkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLAotCQkJCQkgdm1saW51eF9wYXRoW2ldKTsKLQkJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwKLQkJCQkJCSAgIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKLQkJCQlnb3RvIG91dF9maXh1cDsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXhfcGF0aChzZWxmLCBtYXAsIGZpbHRlcik7CisJCWlmIChlcnIgPiAwKQorCQkJZ290byBvdXRfZml4dXA7CisJfQorCisJLyoKKwkgKiBTYXkgdGhlIGtlcm5lbCBEU08gd2FzIGNyZWF0ZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBidWlsZC1pZCBoZWFkZXIgdGFibGUsCisJICogd2UgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgcnVubmluZyBrZXJuZWwsCisJICogdXNpbmcgaXQgaWYgaXQgaXMuCisJICovCisJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCQl1OCBrYWxsc3ltc19idWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwkJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2FsbHN5bXNfYnVpbGRfaWQsCisJCQkJCSBzaXplb2Yoa2FsbHN5bXNfYnVpbGRfaWQpKSA9PSAwKSB7CisJCQlpZiAoZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBrYWxsc3ltc19idWlsZF9pZCkpIHsKKwkJCQlrYWxsc3ltc19maWxlbmFtZSA9ICIvcHJvYy9rYWxsc3ltcyI7CisJCQkJZ290byBkb19rYWxsc3ltczsKIAkJCX0KIAkJfQorCQkvKgorCQkgKiBOb3cgbG9vayBpZiB3ZSBoYXZlIGl0IG9uIHRoZSBidWlsZC1pZCBjYWNoZSBpbgorCQkgKiAkSE9NRS8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10uCisJCSAqLworCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJCQkgIHNidWlsZF9pZCk7CisKKwkJaWYgKGFzcHJpbnRmKCZrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUsCisJCQkgICAgICIlcy8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10vJXMiLAorCQkJICAgICBnZXRlbnYoIkhPTUUiKSwgc2J1aWxkX2lkKSA9PSAtMSkgeworCQkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3Iga2FsbHN5bXMgZmlsZSBsb29rdXBcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2FsbHN5bXNfZmlsZW5hbWUgPSBrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWU7CisKKwkJaWYgKGFjY2VzcyhrYWxsc3ltc19maWxlbmFtZSwgRl9PSykpIHsKKwkJCXByX2VycigiTm8ga2FsbHN5bXMgb3Igdm1saW51eCB3aXRoIGJ1aWxkLWlkICVzICIKKwkJCSAgICAgICAid2FzIGZvdW5kXG4iLCBzYnVpbGRfaWQpOworCQkJZnJlZShrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTGFzdCByZXNvcnQsIGlmIHdlIGRvbid0IGhhdmUgYSBidWlsZC1pZCBhbmQgY291bGRuJ3QgZmluZAorCQkgKiBhbnkgdm1saW51eCBmaWxlLCB0cnkgdGhlIHJ1bm5pbmcga2VybmVsIGthbGxzeW1zIHRhYmxlLgorCQkgKi8KKwkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOwogCX0KIAotCWlzX2thbGxzeW1zID0gc2VsZi0+bG9uZ19uYW1lWzBdID09ICdbJzsKLQlpZiAoaXNfa2FsbHN5bXMpCi0JCWdvdG8gZG9fa2FsbHN5bXM7Ci0KLQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHNlc3Npb24sIHNlbGYtPmxvbmdfbmFtZSwgZmlsdGVyKTsKLQlpZiAoZXJyIDw9IDApIHsKLQkJcHJfaW5mbygiVGhlIGZpbGUgJXMgY2Fubm90IGJlIHVzZWQsICIKLQkJCSJ0cnlpbmcgdG8gdXNlIC9wcm9jL2thbGxzeW1zLi4uIiwgc2VsZi0+bG9uZ19uYW1lKTsKIGRvX2thbGxzeW1zOgotCQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOwotCQlpZiAoZXJyID4gMCAmJiAhaXNfa2FsbHN5bXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKCJba2VybmVsLmthbGxzeW1zXSIpKTsKLQl9CisJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIGthbGxzeW1zX2ZpbGVuYW1lLCBtYXAsIGZpbHRlcik7CisJaWYgKGVyciA+IDApCisJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwga2FsbHN5bXNfZmlsZW5hbWUpOworCWZyZWUoa2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lKTsKIAorb3V0X3RyeV9maXh1cDoKIAlpZiAoZXJyID4gMCkgewogb3V0X2ZpeHVwOgorCQlpZiAoa2FsbHN5bXNfZmlsZW5hbWUgIT0gTlVMTCkKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzdHJkdXAoIltrZXJuZWwua2FsbHN5bXNdIikpOwogCQltYXBfX2ZpeHVwX3N0YXJ0KG1hcCk7CiAJCW1hcF9fZml4dXBfZW5kKG1hcCk7CiAJfQpAQCAtMTU2NCw3ICsxNzA4LDYgQEAKIAogTElTVF9IRUFEKGRzb3NfX3VzZXIpOwogTElTVF9IRUFEKGRzb3NfX2tlcm5lbCk7Ci1zdHJ1Y3QgZHNvICp2ZHNvOwogCiBzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKQogewpAQCAtMTU3NiwxOSArMTcxOSwxOSBAQAogCXN0cnVjdCBkc28gKnBvczsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQotCQlpZiAoc3RyY21wKHBvcy0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKHN0cmNtcChwb3MtPmxvbmdfbmFtZSwgbmFtZSkgPT0gMCkKIAkJCXJldHVybiBwb3M7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBkc28gKl9fZHNvc19fZmluZG5ldyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKmRzbyA9IGRzb3NfX2ZpbmQoJmRzb3NfX3VzZXIsIG5hbWUpOworCXN0cnVjdCBkc28gKmRzbyA9IGRzb3NfX2ZpbmQoaGVhZCwgbmFtZSk7CiAKIAlpZiAoIWRzbykgewogCQlkc28gPSBkc29fX25ldyhuYW1lKTsKIAkJaWYgKGRzbyAhPSBOVUxMKSB7Ci0JCQlkc29zX19hZGQoJmRzb3NfX3VzZXIsIGRzbyk7CisJCQlkc29zX19hZGQoaGVhZCwgZHNvKTsKIAkJCWRzb19fc2V0X2Jhc2VuYW1lKGRzbyk7CiAJCX0KIAl9CkBAIC0xNjEzLDc1ICsxNzU2LDc4IEBACiAJX19kc29zX19mcHJpbnRmKCZkc29zX191c2VyLCBmcCk7CiB9CiAKLXN0YXRpYyBzaXplX3QgX19kc29zX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgRklMRSAqZnApCitzdGF0aWMgc2l6ZV90IF9fZHNvc19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIEZJTEUgKmZwLAorCQkJCSAgICAgIGJvb2wgd2l0aF9oaXRzKQogewogCXN0cnVjdCBkc28gKnBvczsKIAlzaXplX3QgcmV0ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CisJCWlmICh3aXRoX2hpdHMgJiYgIXBvcy0+aGl0KQorCQkJY29udGludWU7CiAJCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChwb3MsIGZwKTsKIAkJcmV0ICs9IGZwcmludGYoZnAsICIgJXNcbiIsIHBvcy0+bG9uZ19uYW1lKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCkKK3NpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQogewotCXJldHVybiAoX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX2tlcm5lbCwgZnApICsKLQkJX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX3VzZXIsIGZwKSk7CisJcmV0dXJuIChfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fa2VybmVsLCBmcCwgd2l0aF9oaXRzKSArCisJCV9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX191c2VyLCBmcCwgd2l0aF9oaXRzKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19jcmVhdGVfa2VybmVsKCBjb25zdCBjaGFyICp2bWxpbnV4KQorc3RydWN0IGRzbyAqZHNvX19uZXdfa2VybmVsKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXcodm1saW51eCA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKKwlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKIAotCWlmIChrZXJuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlrZXJuZWwtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOwotCWtlcm5lbC0+a2VybmVsCSAgID0gMTsKLQotCXZkc28gPSBkc29fX25ldygiW3Zkc29dIik7Ci0JaWYgKHZkc28gPT0gTlVMTCkKLQkJZ290byBvdXRfZGVsZXRlX2tlcm5lbF9kc287Ci0JZHNvX19zZXRfbG9hZGVkKHZkc28sIE1BUF9fRlVOQ1RJT04pOwotCi0JaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIGtlcm5lbC0+YnVpbGRfaWQsCi0JCQkJIHNpemVvZihrZXJuZWwtPmJ1aWxkX2lkKSkgPT0gMCkKLQkJa2VybmVsLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwotCi0JZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGtlcm5lbCk7Ci0JZHNvc19fYWRkKCZkc29zX191c2VyLCB2ZHNvKTsKLQotCXJldHVybiBrZXJuZWw7Ci0KLW91dF9kZWxldGVfa2VybmVsX2RzbzoKLQlkc29fX2RlbGV0ZShrZXJuZWwpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCkKLXsKLQlzdHJ1Y3QgbWFwICpmdW5jdGlvbnMsICp2YXJpYWJsZXM7Ci0Jc3RydWN0IGRzbyAqa2VybmVsID0gZHNvc19fY3JlYXRlX2tlcm5lbCh2bWxpbnV4KTsKLQotCWlmIChrZXJuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JZnVuY3Rpb25zID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgTUFQX19GVU5DVElPTik7Ci0JaWYgKGZ1bmN0aW9ucyA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQl2YXJpYWJsZXMgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX1ZBUklBQkxFKTsKLQlpZiAodmFyaWFibGVzID09IE5VTEwpIHsKLQkJbWFwX19kZWxldGUoZnVuY3Rpb25zKTsKLQkJcmV0dXJuIC0xOworCWlmIChzZWxmICE9IE5VTEwpIHsKKwkJc2VsZi0+c2hvcnRfbmFtZSA9ICJba2VybmVsXSI7CisJCXNlbGYtPmtlcm5lbAkgPSAxOwogCX0KIAotCWZ1bmN0aW9ucy0+bWFwX2lwID0gZnVuY3Rpb25zLT51bm1hcF9pcCA9Ci0JCXZhcmlhYmxlcy0+bWFwX2lwID0gdmFyaWFibGVzLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7Ci0JbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIGZ1bmN0aW9ucyk7Ci0JbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIHZhcmlhYmxlcyk7CisJcmV0dXJuIHNlbGY7Cit9CisKK3ZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYpCit7CisJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIHNlbGYtPmJ1aWxkX2lkLAorCQkJCSBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwKQorCQlzZWxmLT5oYXNfYnVpbGRfaWQgPSB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGRzbyAqZHNvc19fY3JlYXRlX2tlcm5lbChjb25zdCBjaGFyICp2bWxpbnV4KQoreworCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb19fbmV3X2tlcm5lbCh2bWxpbnV4KTsKKworCWlmIChrZXJuZWwgIT0gTlVMTCkgeworCQlkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoa2VybmVsKTsKKwkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGtlcm5lbCk7CisJfQorCisJcmV0dXJuIGtlcm5lbDsKK30KKworaW50IF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdLAorCQkJCSAgICAgc3RydWN0IGRzbyAqa2VybmVsKQoreworCWVudW0gbWFwX3R5cGUgdHlwZTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKKwkJc3RydWN0IGttYXAgKmttYXA7CisKKwkJdm1saW51eF9tYXBzW3R5cGVdID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgdHlwZSk7CisJCWlmICh2bWxpbnV4X21hcHNbdHlwZV0gPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQl2bWxpbnV4X21hcHNbdHlwZV0tPm1hcF9pcCA9CisJCQl2bWxpbnV4X21hcHNbdHlwZV0tPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKKworCQlrbWFwID0gbWFwX19rbWFwKHZtbGludXhfbWFwc1t0eXBlXSk7CisJCWttYXAtPmttYXBzID0gc2VsZjsKKwkJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIHZtbGludXhfbWFwc1t0eXBlXSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzkxLDE5ICsxOTM3LDIyIEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK2ludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdKQogewotCWlmIChtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLAotCQkJCQkgICBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpIDwgMCkKKwlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29zX19jcmVhdGVfa2VybmVsKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisKKwlpZiAoa2VybmVsID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCWlmIChzeW1ib2xfY29uZi51c2VfbW9kdWxlcyAmJgotCSAgICBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9tb2R1bGVfbWFwcyhzZWxmKSA8IDApCi0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbG9hZCBsaXN0IG9mIG1vZHVsZXMgZm9yIHNlc3Npb24gJXMsICIKLQkJCSAiY29udGludWluZy4uLlxuIiwgc2VsZi0+ZmlsZW5hbWUpOworCWlmIChfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCB2bWxpbnV4X21hcHMsIGtlcm5lbCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3ltYm9sX2NvbmYudXNlX21vZHVsZXMgJiYgbWFwX2dyb3Vwc19fY3JlYXRlX21vZHVsZXMoc2VsZikgPCAwKQorCQlwcl9kZWJ1ZygiUHJvYmxlbXMgY3JlYXRpbmcgbW9kdWxlIG1hcHMsIGNvbnRpbnVpbmcgYW55d2F5Li4uXG4iKTsKIAkvKgogCSAqIE5vdyB0aGF0IHdlIGhhdmUgYWxsIHRoZSBtYXBzIGNyZWF0ZWQsIGp1c3Qgc2V0IHRoZSAtPmVuZCBvZiB0aGVtOgogCSAqLwotCW1hcF9ncm91cHNfX2ZpeHVwX2VuZCgmc2VsZi0+a21hcHMpOworCW1hcF9ncm91cHNfX2ZpeHVwX2VuZChzZWxmKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCA4YWRlZDIzLi4yODBkYWRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgImV2ZW50LmgiCiAKKyNkZWZpbmUgREVCVUdfQ0FDSEVfRElSICIuZGVidWciCisKICNpZmRlZiBIQVZFX0NQTFVTX0RFTUFOR0xFCiBleHRlcm4gY2hhciAqY3BsdXNfZGVtYW5nbGUoY29uc3QgY2hhciAqLCBpbnQpOwogCkBAIC00OSw2ICs1MSw4IEBACiAJY2hhcgkJbmFtZVswXTsKIH07CiAKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZik7CisKIHN0cnVjdCBzdHJsaXN0OwogCiBzdHJ1Y3Qgc3ltYm9sX2NvbmYgewpAQCAtNTgsNyArNjIsOCBAQAogCQkJc29ydF9ieV9uYW1lLAogCQkJc2hvd19ucl9zYW1wbGVzLAogCQkJdXNlX2NhbGxjaGFpbiwKLQkJCWV4Y2x1ZGVfb3RoZXI7CisJCQlleGNsdWRlX290aGVyLAorCQkJZnVsbF9wYXRoczsKIAljb25zdCBjaGFyCSp2bWxpbnV4X25hbWUsCiAJCQkqZmllbGRfc2VwOwogCWNoYXIgICAgICAgICAgICAqZHNvX2xpc3Rfc3RyLApAQCAtNzcsNiArODIsMTIgQEAKIAlyZXR1cm4gKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemU7CiB9CiAKK3N0cnVjdCByZWZfcmVsb2Nfc3ltIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXU2NAkJYWRkcjsKKwl1NjQJCXVucmVsb2NhdGVkX2FkZHI7Cit9OworCiBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiB7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCXN0cnVjdCBtYXAgICAgKm1hcDsKQEAgLTk0LDYgKzEwNSw3IEBACiAJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKIAl1OAkJIGhhc19idWlsZF9pZDoxOwogCXU4CQkga2VybmVsOjE7CisJdTgJCSBoaXQ6MTsKIAl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CiAJdTgJCSBzb3J0ZWRfYnlfbmFtZTsKIAl1OAkJIGxvYWRlZDsKQEAgLTEwNSwzNyArMTE3LDU1IEBACiB9OwogCiBzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqc2VsZik7CiAKIGJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIGJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3sKKwlzZWxmLT5sb2FkZWQgfD0gKDEgPDwgdHlwZSk7Cit9CisKIHZvaWQgZHNvX19zb3J0X2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAotc3RydWN0IHBlcmZfc2Vzc2lvbjsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKIAotc3RydWN0IGRzbyAqZHNvc19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKTsKLWludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworc3RydWN0IGRzbyAqX19kc29zX19maW5kbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gX19kc29zX19maW5kbmV3KCZkc29zX191c2VyLCBuYW1lKTsKK30KKworaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgbWFwICptYXAsCisJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIHZvaWQgZHNvc19fZnByaW50ZihGSUxFICpmcCk7Ci1zaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwKTsKK3NpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKIAogc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKTsKIHNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGNoYXIgKm5hbWUpOwogdm9pZCBkc29fX3NldF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCB2b2lkICpidWlsZF9pZCk7Cit2b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmKTsKIHN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAogCQkJCQljb25zdCBjaGFyICpuYW1lKTsKIAogaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwogaW50IHN5c2ZzX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwotYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKTsKLWludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpOworYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyhib29sIHdpdGhfaGl0cyk7CitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2ludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKKwkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQpKTsKIAogaW50IHN5bWJvbF9faW5pdCh2b2lkKTsKLWludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKK2Jvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSk7CiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKLWV4dGVybiBzdHJ1Y3QgZHNvICp2ZHNvOwogI2VuZGlmIC8qIF9fUEVSRl9TWU1CT0wgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwppbmRleCA0YTA4ZGNmLi4yMWI5MjE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCkBAIC0zMSwxMiArMzEsNDEgQEAKIAlyZXR1cm4gc2VsZjsKIH0KIAorc3RhdGljIHZvaWQgbWFwX2dyb3Vwc19fZmx1c2goc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCit7CisJaW50IHR5cGU7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFQX19OUl9UWVBFUzsgdHlwZSsrKSB7CisJCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPm1hcHNbdHlwZV07CisJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qocm9vdCk7CisKKwkJd2hpbGUgKG5leHQpIHsKKwkJCXN0cnVjdCBtYXAgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7CisJCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCByb290KTsKKwkJCS8qCisJCQkgKiBXZSBtYXkgaGF2ZSByZWZlcmVuY2VzIHRvIHRoaXMgbWFwLCBmb3IKKwkJCSAqIGluc3RhbmNlIGluIHNvbWUgaGlzdF9lbnRyeSBpbnN0YW5jZXMsIHNvCisJCQkgKiBqdXN0IG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGxpc3QuCisJCQkgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnBvcy0+bm9kZSwgJnNlbGYtPnJlbW92ZWRfbWFwc1twb3MtPnR5cGVdKTsKKwkJfQorCX0KK30KKwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSkKIHsKKwlpbnQgZXJyOworCiAJaWYgKHNlbGYtPmNvbW0pCiAJCWZyZWUoc2VsZi0+Y29tbSk7CiAJc2VsZi0+Y29tbSA9IHN0cmR1cChjb21tKTsKLQlyZXR1cm4gc2VsZi0+Y29tbSA/IDAgOiAtRU5PTUVNOworCWVyciA9IHNlbGYtPmNvbW0gPT0gTlVMTCA/IC1FTk9NRU0gOiAwOworCWlmICghZXJyKSB7CisJCXNlbGYtPmNvbW1fc2V0ID0gdHJ1ZTsKKwkJbWFwX2dyb3Vwc19fZmx1c2goJnNlbGYtPm1nKTsKKwl9CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHRocmVhZF9fY29tbV9sZW4oc3RydWN0IHRocmVhZCAqc2VsZikKQEAgLTUwLDExICs3OSw2IEBACiAJcmV0dXJuIHNlbGYtPmNvbW1fbGVuOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqbWFwX3R5cGVfX25hbWVbTUFQX19OUl9UWVBFU10gPSB7Ci0JW01BUF9fRlVOQ1RJT05dID0gIkZ1bmN0aW9ucyIsCi0JW01BUF9fVkFSSUFCTEVdID0gIlZhcmlhYmxlcyIsCi19OwotCiBzdGF0aWMgc2l6ZV90IF9fbWFwX2dyb3Vwc19fZnByaW50Zl9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAogCQkJCQkgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKIHsKQEAgLTI1NSwxMSArMjc5LDE0IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoc2VsZi0+Y29tbSkKLQkJZnJlZShzZWxmLT5jb21tKTsKLQlzZWxmLT5jb21tID0gc3RyZHVwKHBhcmVudC0+Y29tbSk7Ci0JaWYgKCFzZWxmLT5jb21tKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocGFyZW50LT5jb21tX3NldCkgeworCQlpZiAoc2VsZi0+Y29tbSkKKwkJCWZyZWUoc2VsZi0+Y29tbSk7CisJCXNlbGYtPmNvbW0gPSBzdHJkdXAocGFyZW50LT5jb21tKTsKKwkJaWYgKCFzZWxmLT5jb21tKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNlbGYtPmNvbW1fc2V0ID0gdHJ1ZTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQogCQlpZiAobWFwX2dyb3Vwc19fY2xvbmUoJnNlbGYtPm1nLCAmcGFyZW50LT5tZywgaSkgPCAwKQpAQCAtMjgyLDE0ICszMDksMTMgQEAKIH0KIAogc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCi0JCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJICAgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJc3RydWN0IG1hcCAqbWFwID0gbWFwX2dyb3Vwc19fZmluZChzZWxmLCB0eXBlLCBhZGRyKTsKIAogCWlmIChtYXAgIT0gTlVMTCkKLQkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBzZXNzaW9uLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOworCQlyZXR1cm4gbWFwX19maW5kX3N5bWJvbChtYXAsIG1hcC0+bWFwX2lwKG1hcCwgYWRkciksIGZpbHRlcik7CiAKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAppbmRleCBjMjA2ZjcyLi4wYTI4ZjM5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCkBAIC0xNSw2ICsxNSw3IEBACiAJc3RydWN0IG1hcF9ncm91cHMJbWc7CiAJcGlkX3QJCQlwaWQ7CiAJY2hhcgkJCXNob3J0bmFtZVszXTsKKwlib29sCQkJY29tbV9zZXQ7CiAJY2hhcgkJCSpjb21tOwogCWludAkJCWNvbW1fbGVuOwogfTsKQEAgLTQ4LDIzICs0OSwzNiBAQAogCXJldHVybiBzZWxmID8gbWFwX2dyb3Vwc19fZmluZCgmc2VsZi0+bWcsIHR5cGUsIGFkZHIpIDogTlVMTDsKIH0KIAordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCSAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCisJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKKwogdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCiAJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCiAJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiBzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkgICAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqCi1tYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJICB1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkJCSAgICAgICB1NjQgYWRkciwKKwkJCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCXJldHVybiBtYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzZWxmLCBzZXNzaW9uLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOworCXJldHVybiBtYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzZWxmLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOwogfQogCiBzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10sCisJCQkJICAgICBzdHJ1Y3QgZHNvICprZXJuZWwpOworaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10pOworCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19uZXdfbW9kdWxlKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCB1NjQgc3RhcnQsCisJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogI2VuZGlmCS8qIF9fUEVSRl9USFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKaW5kZXggY2FjZTM1NS4uNWVhODk3MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KICNkZWZpbmUgX0dOVV9TT1VSQ0UKICNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxtbnRlbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzcsNiArMzgsNyBAQAogCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgogI2luY2x1ZGUgInRyYWNlLWV2ZW50LmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgogCiAjZGVmaW5lIFZFUlNJT04gIjAuNSIKIApAQCAtMTAxLDMyICsxMDMsMTIgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZGVidWdmcyh2b2lkKQogewotCXN0YXRpYyBjaGFyIGRlYnVnZnNbTUFYX1BBVEgrMV07Ci0Jc3RhdGljIGludCBkZWJ1Z2ZzX2ZvdW5kOwotCWNoYXIgdHlwZVsxMDBdOwotCUZJTEUgKmZwOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX21vdW50KE5VTEwpOwogCi0JaWYgKGRlYnVnZnNfZm91bmQpCi0JCXJldHVybiBkZWJ1Z2ZzOworCWlmICghcGF0aCkKKwkJZGllKCJZb3VyIGtlcm5lbCBub3Qgc3VwcG9ydCBkZWJ1Z2ZzIGZpbGVzeXN0ZW0iKTsKIAotCWlmICgoZnAgPSBmb3BlbigiL3Byb2MvbW91bnRzIiwiciIpKSA9PSBOVUxMKQotCQlkaWUoIkNhbid0IG9wZW4gL3Byb2MvbW91bnRzIGZvciByZWFkIik7Ci0KLQl3aGlsZSAoZnNjYW5mKGZwLCAiJSpzICUiCi0JCSAgICAgIFNUUihNQVhfUEFUSCkKLQkJICAgICAgInMgJTk5cyAlKnMgJSpkICUqZFxuIiwKLQkJICAgICAgZGVidWdmcywgdHlwZSkgPT0gMikgewotCQlpZiAoc3RyY21wKHR5cGUsICJkZWJ1Z2ZzIikgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlmY2xvc2UoZnApOwotCi0JaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpICE9IDApCi0JCWRpZSgiZGVidWdmcyBub3QgbW91bnRlZCwgcGxlYXNlIG1vdW50Iik7Ci0KLQlkZWJ1Z2ZzX2ZvdW5kID0gMTsKLQotCXJldHVybiBkZWJ1Z2ZzOworCXJldHVybiBwYXRoOwogfQogCiAvKgpAQCAtMjcxLDYgKzI1Myw4IEBACiAJd3JpdGVfb3JfZGllKCJoZWFkZXJfcGFnZSIsIDEyKTsKIAl3cml0ZV9vcl9kaWUoJnNpemUsIDgpOwogCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGVfZmQoZmQpOworCWNsb3NlKGZkKTsKKwogCWlmIChzaXplICE9IGNoZWNrX3NpemUpCiAJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyBzaXplPSVsbGQgcmVhZD0lbGxkIiwKIAkJICAgIHBhdGgsIHNpemUsIGNoZWNrX3NpemUpOwpAQCAtMjg5LDYgKzI3Myw3IEBACiAJaWYgKHNpemUgIT0gY2hlY2tfc2l6ZSkKIAkJZGllKCJ3cm9uZyBzaXplIGZvciAnJXMnIiwgcGF0aCk7CiAJcHV0X3RyYWNpbmdfZmlsZShwYXRoKTsKKwljbG9zZShmZCk7CiB9CiAKIHN0YXRpYyBib29sIG5hbWVfaW5fdHBfbGlzdChjaGFyICpzeXMsIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcykKQEAgLTMxNyw3ICszMDIsOCBAQAogCQlkaWUoImNhbid0IHJlYWQgZGlyZWN0b3J5ICclcyciLCBzeXMpOwogCiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgICFuYW1lX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQogCQkJY29udGludWU7CkBAIC0zMzQsNyArMzIwLDggQEAKIAogCXJld2luZGRpcihkaXIpOwogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICAhbmFtZV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzUzLDYgKzM0MCw3IEBACiAKIAkJZnJlZShmb3JtYXQpOwogCX0KKwljbG9zZWRpcihkaXIpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2Z0cmFjZV9maWxlcyhzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMpCkBAIC0zOTQsMjYgKzM4MiwyMSBAQAogCQlkaWUoImNhbid0IHJlYWQgZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKIAogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiZnRyYWNlIikgPT0gMCB8fAogCQkgICAgIXN5c3RlbV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwotCQlzeXMgPSBtYWxsb2Nfb3JfZGllKHN0cmxlbihwYXRoKSArIHN0cmxlbihkZW50LT5kX25hbWUpICsgMik7Ci0JCXNwcmludGYoc3lzLCAiJXMvJXMiLCBwYXRoLCBkZW50LT5kX25hbWUpOwotCQlyZXQgPSBzdGF0KHN5cywgJnN0KTsKLQkJZnJlZShzeXMpOwotCQlpZiAocmV0IDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvdW50Kys7CisJCWNvdW50Kys7CiAJfQogCiAJd3JpdGVfb3JfZGllKCZjb3VudCwgNCk7CiAKIAlyZXdpbmRkaXIoZGlyKTsKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgImZ0cmFjZSIpID09IDAgfHwKIAkJICAgICFzeXN0ZW1faW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCkBAIC00MjIsMTQgKzQwNSwxMyBAQAogCQlzcHJpbnRmKHN5cywgIiVzLyVzIiwgcGF0aCwgZGVudC0+ZF9uYW1lKTsKIAkJcmV0ID0gc3RhdChzeXMsICZzdCk7CiAJCWlmIChyZXQgPj0gMCkgewotCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLQkJCQl3cml0ZV9vcl9kaWUoZGVudC0+ZF9uYW1lLCBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEpOwotCQkJCWNvcHlfZXZlbnRfc3lzdGVtKHN5cywgdHBzKTsKLQkJCX0KKwkJCXdyaXRlX29yX2RpZShkZW50LT5kX25hbWUsIHN0cmxlbihkZW50LT5kX25hbWUpICsgMSk7CisJCQljb3B5X2V2ZW50X3N5c3RlbShzeXMsIHRwcyk7CiAJCX0KIAkJZnJlZShzeXMpOwogCX0KIAorCWNsb3NlZGlyKGRpcik7CiAJcHV0X3RyYWNpbmdfZmlsZShwYXRoKTsKIH0KIApAQCAtNTMzLDcgKzUxNSw3IEBACiAJd3JpdGVfb3JfZGllKGJ1ZiwgMSk7CiAKIAkvKiBzYXZlIHBhZ2Vfc2l6ZSAqLwotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwogCXdyaXRlX29yX2RpZSgmcGFnZV9zaXplLCA0KTsKIAogCXJlYWRfaGVhZGVyX2ZpbGVzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCmluZGV4IGM1YzMyYmUuLjliM2MyMGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCkBAIC0xOTI1LDYgKzE5MjUsMTUgQEAKIAlpZiAoIWZpZWxkKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcpIHsKKwkJaW50IG9mZnNldDsKKworCQlvZmZzZXQgPSAqKGludCAqKShkYXRhICsgZmllbGQtPm9mZnNldCk7CisJCW9mZnNldCAmPSAweGZmZmY7CisKKwkJcmV0dXJuIGRhdGEgKyBvZmZzZXQ7CisJfQorCiAJcmV0dXJuIGRhdGEgKyBmaWVsZC0+b2Zmc2V0OwogfQogCkBAIC0zMjc3LDMgKzMyODYsMTggQEAKIAljcHVzID0gbnJfY3B1czsKIAlsb25nX3NpemUgPSBsb25nX3N6OwogfQorCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX3BjKGNvbnRleHQtPmV2ZW50X2RhdGEpOworfQorCitpbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX2ZsYWdzKGNvbnRleHQtPmV2ZW50X2RhdGEpOworfQorCitpbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBwYXJzZV9jb21tb25fbG9ja19kZXB0aChjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDZkNzZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjEgKzAsMCBAQAotLyoKLSAqIHRyYWNlLWV2ZW50LXBlcmwuICBGZWVkIHBlcmYgdHJhY2UgZXZlbnRzIHRvIGFuIGVtYmVkZGVkIFBlcmwgaW50ZXJwcmV0ZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKLSNpbmNsdWRlICJ0cmFjZS1ldmVudC1wZXJsLmgiCi0KLXZvaWQgeHNfaW5pdChwVEhYKTsKLQotdm9pZCB4c19pbml0KHBUSFgpCi17Ci0JY29uc3QgY2hhciAqZmlsZSA9IF9fRklMRV9fOwotCWRYU1VCX1NZUzsKLQotCW5ld1hTKCJQZXJmOjpUcmFjZTo6Q29udGV4dDo6Ym9vdHN0cmFwIiwgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dCwKLQkgICAgICBmaWxlKTsKLQluZXdYUygiRHluYUxvYWRlcjo6Ym9vdF9EeW5hTG9hZGVyIiwgYm9vdF9EeW5hTG9hZGVyLCBmaWxlKTsKLX0KLQotSU5URVJQIG15X3Blcmw7Ci0KLSNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCi0JKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKLQotc3RydWN0IGV2ZW50ICpldmVudHNbRlRSQUNFX01BWF9FVkVOVF07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OwotCi1zdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7Ci1zdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOwotCi1zdGF0aWMgdm9pZCBkZWZpbmVfc3ltYm9saWNfdmFsdWUoY29uc3QgY2hhciAqZXZfbmFtZSwKLQkJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCi0JCQkJICBjb25zdCBjaGFyICpmaWVsZF92YWx1ZSwKLQkJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX3N0cikKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7Ci0JZFNQOwotCi0JdmFsdWUgPSBldmFsX2ZsYWcoZmllbGRfdmFsdWUpOwotCi0JRU5URVI7Ci0JU0FWRVRNUFM7Ci0JUFVTSE1BUksoU1ApOwotCi0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihldl9uYW1lLCAwKSkpOwotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfbmFtZSwgMCkpKTsKLQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KHZhbHVlKSkpOwotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfc3RyLCAwKSkpOwotCi0JUFVUQkFDSzsKLQlpZiAoZ2V0X2N2KCJtYWluOjpkZWZpbmVfc3ltYm9saWNfdmFsdWUiLCAwKSkKLQkJY2FsbF9wdigibWFpbjo6ZGVmaW5lX3N5bWJvbGljX3ZhbHVlIiwgR19TQ0FMQVIpOwotCVNQQUdBSU47Ci0JUFVUQkFDSzsKLQlGUkVFVE1QUzsKLQlMRUFWRTsKLX0KLQotc3RhdGljIHZvaWQgZGVmaW5lX3N5bWJvbGljX3ZhbHVlcyhzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZpZWxkLAotCQkJCSAgIGNvbnN0IGNoYXIgKmV2X25hbWUsCi0JCQkJICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSkKLXsKLQlkZWZpbmVfc3ltYm9saWNfdmFsdWUoZXZfbmFtZSwgZmllbGRfbmFtZSwgZmllbGQtPnZhbHVlLCBmaWVsZC0+c3RyKTsKLQlpZiAoZmllbGQtPm5leHQpCi0JCWRlZmluZV9zeW1ib2xpY192YWx1ZXMoZmllbGQtPm5leHQsIGV2X25hbWUsIGZpZWxkX25hbWUpOwotfQotCi1zdGF0aWMgdm9pZCBkZWZpbmVfc3ltYm9saWNfZmllbGQoY29uc3QgY2hhciAqZXZfbmFtZSwKLQkJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUpCi17Ci0JZFNQOwotCi0JRU5URVI7Ci0JU0FWRVRNUFM7Ci0JUFVTSE1BUksoU1ApOwotCi0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihldl9uYW1lLCAwKSkpOwotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfbmFtZSwgMCkpKTsKLQotCVBVVEJBQ0s7Ci0JaWYgKGdldF9jdigibWFpbjo6ZGVmaW5lX3N5bWJvbGljX2ZpZWxkIiwgMCkpCi0JCWNhbGxfcHYoIm1haW46OmRlZmluZV9zeW1ib2xpY19maWVsZCIsIEdfU0NBTEFSKTsKLQlTUEFHQUlOOwotCVBVVEJBQ0s7Ci0JRlJFRVRNUFM7Ci0JTEVBVkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlZmluZV9mbGFnX3ZhbHVlKGNvbnN0IGNoYXIgKmV2X25hbWUsCi0JCQkgICAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAotCQkJICAgICAgY29uc3QgY2hhciAqZmllbGRfdmFsdWUsCi0JCQkgICAgICBjb25zdCBjaGFyICpmaWVsZF9zdHIpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwotCWRTUDsKLQotCXZhbHVlID0gZXZhbF9mbGFnKGZpZWxkX3ZhbHVlKTsKLQotCUVOVEVSOwotCVNBVkVUTVBTOwotCVBVU0hNQVJLKFNQKTsKLQotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZXZfbmFtZSwgMCkpKTsKLQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX25hbWUsIDApKSk7Ci0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dih2YWx1ZSkpKTsKLQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX3N0ciwgMCkpKTsKLQotCVBVVEJBQ0s7Ci0JaWYgKGdldF9jdigibWFpbjo6ZGVmaW5lX2ZsYWdfdmFsdWUiLCAwKSkKLQkJY2FsbF9wdigibWFpbjo6ZGVmaW5lX2ZsYWdfdmFsdWUiLCBHX1NDQUxBUik7Ci0JU1BBR0FJTjsKLQlQVVRCQUNLOwotCUZSRUVUTVBTOwotCUxFQVZFOwotfQotCi1zdGF0aWMgdm9pZCBkZWZpbmVfZmxhZ192YWx1ZXMoc3RydWN0IHByaW50X2ZsYWdfc3ltICpmaWVsZCwKLQkJCSAgICAgICBjb25zdCBjaGFyICpldl9uYW1lLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUpCi17Ci0JZGVmaW5lX2ZsYWdfdmFsdWUoZXZfbmFtZSwgZmllbGRfbmFtZSwgZmllbGQtPnZhbHVlLCBmaWVsZC0+c3RyKTsKLQlpZiAoZmllbGQtPm5leHQpCi0JCWRlZmluZV9mbGFnX3ZhbHVlcyhmaWVsZC0+bmV4dCwgZXZfbmFtZSwgZmllbGRfbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlZmluZV9mbGFnX2ZpZWxkKGNvbnN0IGNoYXIgKmV2X25hbWUsCi0JCQkgICAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAotCQkJICAgICAgY29uc3QgY2hhciAqZGVsaW0pCi17Ci0JZFNQOwotCi0JRU5URVI7Ci0JU0FWRVRNUFM7Ci0JUFVTSE1BUksoU1ApOwotCi0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihldl9uYW1lLCAwKSkpOwotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZmllbGRfbmFtZSwgMCkpKTsKLQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGRlbGltLCAwKSkpOwotCi0JUFVUQkFDSzsKLQlpZiAoZ2V0X2N2KCJtYWluOjpkZWZpbmVfZmxhZ19maWVsZCIsIDApKQotCQljYWxsX3B2KCJtYWluOjpkZWZpbmVfZmxhZ19maWVsZCIsIEdfU0NBTEFSKTsKLQlTUEFHQUlOOwotCVBVVEJBQ0s7Ci0JRlJFRVRNUFM7Ci0JTEVBVkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlZmluZV9ldmVudF9zeW1ib2xzKHN0cnVjdCBldmVudCAqZXZlbnQsCi0JCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCi0JCQkJIHN0cnVjdCBwcmludF9hcmcgKmFyZ3MpCi17Ci0Jc3dpdGNoIChhcmdzLT50eXBlKSB7Ci0JY2FzZSBQUklOVF9OVUxMOgotCQlicmVhazsKLQljYXNlIFBSSU5UX0FUT006Ci0JCWRlZmluZV9mbGFnX3ZhbHVlKGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCAiMCIsCi0JCQkJICBhcmdzLT5hdG9tLmF0b20pOwotCQl6ZXJvX2ZsYWdfYXRvbSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgUFJJTlRfRklFTEQ6Ci0JCWlmIChjdXJfZmllbGRfbmFtZSkKLQkJCWZyZWUoY3VyX2ZpZWxkX25hbWUpOwotCQljdXJfZmllbGRfbmFtZSA9IHN0cmR1cChhcmdzLT5maWVsZC5uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUklOVF9GTEFHUzoKLQkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPmZsYWdzLmZpZWxkKTsKLQkJZGVmaW5lX2ZsYWdfZmllbGQoZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsIGFyZ3MtPmZsYWdzLmRlbGltKTsKLQkJZGVmaW5lX2ZsYWdfdmFsdWVzKGFyZ3MtPmZsYWdzLmZsYWdzLCBldl9uYW1lLCBjdXJfZmllbGRfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJJTlRfU1lNQk9MOgotCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+c3ltYm9sLmZpZWxkKTsKLQkJZGVmaW5lX3N5bWJvbGljX2ZpZWxkKGV2X25hbWUsIGN1cl9maWVsZF9uYW1lKTsKLQkJZGVmaW5lX3N5bWJvbGljX3ZhbHVlcyhhcmdzLT5zeW1ib2wuc3ltYm9scywgZXZfbmFtZSwKLQkJCQkgICAgICAgY3VyX2ZpZWxkX25hbWUpOwotCQlicmVhazsKLQljYXNlIFBSSU5UX1NUUklORzoKLQkJYnJlYWs7Ci0JY2FzZSBQUklOVF9UWVBFOgotCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+dHlwZWNhc3QuaXRlbSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJJTlRfT1A6Ci0JCWlmIChzdHJjbXAoYXJncy0+b3Aub3AsICI6IikgPT0gMCkKLQkJCXplcm9fZmxhZ19hdG9tID0gMTsKLQkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm9wLmxlZnQpOwotCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AucmlnaHQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiB3ZSBzaG91bGQgd2Fybi4uLiAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGFyZ3MtPm5leHQpCi0JCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5uZXh0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnQgKmZpbmRfY2FjaGVfZXZlbnQoaW50IHR5cGUpCi17Ci0Jc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOwotCXN0cnVjdCBldmVudCAqZXZlbnQ7Ci0KLQlpZiAoZXZlbnRzW3R5cGVdKQotCQlyZXR1cm4gZXZlbnRzW3R5cGVdOwotCi0JZXZlbnRzW3R5cGVdID0gZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOwotCWlmICghZXZlbnQpCi0JCXJldHVybiBOVUxMOwotCi0Jc3ByaW50Zihldl9uYW1lLCAiJXM6OiVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOwotCi0JZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7Ci0KLQlyZXR1cm4gZXZlbnQ7Ci19Ci0KLWludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBwYzsKLQotCXBjID0gcGFyc2VfY29tbW9uX3BjKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIHBjOwotfQotCi1pbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKLXsKLQlpbnQgZmxhZ3M7Ci0KLQlmbGFncyA9IHBhcnNlX2NvbW1vbl9mbGFncyhjb250ZXh0LT5ldmVudF9kYXRhKTsKLQotCXJldHVybiBmbGFnczsKLX0KLQotaW50IGNvbW1vbl9sb2NrX2RlcHRoKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKLXsKLQlpbnQgbG9ja19kZXB0aDsKLQotCWxvY2tfZGVwdGggPSBwYXJzZV9jb21tb25fbG9ja19kZXB0aChjb250ZXh0LT5ldmVudF9kYXRhKTsKLQotCXJldHVybiBsb2NrX2RlcHRoOwotfQotCi1zdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfZXZlbnQoaW50IGNwdSwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICBpbnQgc2l6ZSBfX3VudXNlZCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsIGNoYXIgKmNvbW0pCi17Ci0Jc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7Ci0Jc3RhdGljIGNoYXIgaGFuZGxlclsyNTZdOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Ci0JdW5zaWduZWQgbG9uZyBzLCBuczsKLQlzdHJ1Y3QgZXZlbnQgKmV2ZW50OwotCWludCB0eXBlOwotCWludCBwaWQ7Ci0KLQlkU1A7Ci0KLQl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUoZGF0YSk7Ci0KLQlldmVudCA9IGZpbmRfY2FjaGVfZXZlbnQodHlwZSk7Ci0JaWYgKCFldmVudCkKLQkJZGllKCJ1ZyEgbm8gZXZlbnQgZm91bmQgZm9yIHR5cGUgJWQiLCB0eXBlKTsKLQotCXBpZCA9IHRyYWNlX3BhcnNlX2NvbW1vbl9waWQoZGF0YSk7Ci0KLQlzcHJpbnRmKGhhbmRsZXIsICIlczo6JXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7Ci0KLQlzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOwotCW5zID0gbnNlY3MgLSBzICogTlNFQ1NfUEVSX1NFQzsKLQotCXNjcmlwdGluZ19jb250ZXh0LT5ldmVudF9kYXRhID0gZGF0YTsKLQotCUVOVEVSOwotCVNBVkVUTVBTOwotCVBVU0hNQVJLKFNQKTsKLQotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoaGFuZGxlciwgMCkpKTsKLQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KFBUUjJJVihzY3JpcHRpbmdfY29udGV4dCkpKSk7Ci0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dihjcHUpKSk7Ci0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dihzKSkpOwotCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYobnMpKSk7Ci0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihwaWQpKSk7Ci0JWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zwdihjb21tLCAwKSkpOwotCi0JLyogY29tbW9uIGZpZWxkcyBvdGhlciB0aGFuIHBpZCBjYW4gYmUgYWNjZXNzZWQgdmlhIHhzdWIgZm5zICovCi0KLQlmb3IgKGZpZWxkID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGZpZWxkOyBmaWVsZCA9IGZpZWxkLT5uZXh0KSB7Ci0JCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcpIHsKLQkJCWludCBvZmZzZXQ7Ci0JCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfRFlOQU1JQykgewotCQkJCW9mZnNldCA9ICooaW50ICopKGRhdGEgKyBmaWVsZC0+b2Zmc2V0KTsKLQkJCQlvZmZzZXQgJj0gMHhmZmZmOwotCQkJfSBlbHNlCi0JCQkJb2Zmc2V0ID0gZmllbGQtPm9mZnNldDsKLQkJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoKGNoYXIgKilkYXRhICsgb2Zmc2V0LCAwKSkpOwotCQl9IGVsc2UgeyAvKiBGSUVMRF9JU19OVU1FUklDICovCi0JCQl2YWwgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKLQkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpIHsKLQkJCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHZhbCkpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dih2YWwpKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlQVVRCQUNLOwotCi0JaWYgKGdldF9jdihoYW5kbGVyLCAwKSkKLQkJY2FsbF9wdihoYW5kbGVyLCBHX1NDQUxBUik7Ci0JZWxzZSBpZiAoZ2V0X2N2KCJtYWluOjp0cmFjZV91bmhhbmRsZWQiLCAwKSkgewotCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGhhbmRsZXIsIDApKSk7Ci0JCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoUFRSMklWKHNjcmlwdGluZ19jb250ZXh0KSkpKTsKLQkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dihjcHUpKSk7Ci0JCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYobnNlY3MpKSk7Ci0JCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYocGlkKSkpOwotCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGNvbW0sIDApKSk7Ci0JCWNhbGxfcHYoIm1haW46OnRyYWNlX3VuaGFuZGxlZCIsIEdfU0NBTEFSKTsKLQl9Ci0JU1BBR0FJTjsKLQlQVVRCQUNLOwotCUZSRUVUTVBTOwotCUxFQVZFOwotfQotCi1zdGF0aWMgdm9pZCBydW5fc3RhcnRfc3ViKHZvaWQpCi17Ci0JZFNQOyAvKiBhY2Nlc3MgdG8gUGVybCBzdGFjayAqLwotCVBVU0hNQVJLKFNQKTsKLQotCWlmIChnZXRfY3YoIm1haW46OnRyYWNlX2JlZ2luIiwgMCkpCi0JCWNhbGxfcHYoIm1haW46OnRyYWNlX2JlZ2luIiwgR19ESVNDQVJEIHwgR19OT0FSR1MpOwotfQotCi0vKgotICogU3RhcnQgdHJhY2Ugc2NyaXB0Ci0gKi8KLXN0YXRpYyBpbnQgcGVybF9zdGFydF9zY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci0JY29uc3QgY2hhciAqKmNvbW1hbmRfbGluZTsKLQlpbnQgaSwgZXJyID0gMDsKLQotCWNvbW1hbmRfbGluZSA9IG1hbGxvYygoYXJnYyArIDIpICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOwotCWNvbW1hbmRfbGluZVswXSA9ICIiOwotCWNvbW1hbmRfbGluZVsxXSA9IHNjcmlwdDsKLQlmb3IgKGkgPSAyOyBpIDwgYXJnYyArIDI7IGkrKykKLQkJY29tbWFuZF9saW5lW2ldID0gYXJndltpIC0gMl07Ci0KLQlteV9wZXJsID0gcGVybF9hbGxvYygpOwotCXBlcmxfY29uc3RydWN0KG15X3BlcmwpOwotCi0JaWYgKHBlcmxfcGFyc2UobXlfcGVybCwgeHNfaW5pdCwgYXJnYyArIDIsIChjaGFyICoqKWNvbW1hbmRfbGluZSwKLQkJICAgICAgIChjaGFyICoqKU5VTEwpKSB7Ci0JCWVyciA9IC0xOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChwZXJsX3J1bihteV9wZXJsKSkgewotCQllcnIgPSAtMTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoU3ZUUlVFKEVSUlNWKSkgewotCQllcnIgPSAtMTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlydW5fc3RhcnRfc3ViKCk7Ci0KLQlmcmVlKGNvbW1hbmRfbGluZSk7Ci0JZnByaW50ZihzdGRlcnIsICJwZXJmIHRyYWNlIHN0YXJ0ZWQgd2l0aCBQZXJsIHNjcmlwdCAlc1xuXG4iLCBzY3JpcHQpOwotCXJldHVybiAwOwotZXJyb3I6Ci0JcGVybF9mcmVlKG15X3BlcmwpOwotCWZyZWUoY29tbWFuZF9saW5lKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTdG9wIHRyYWNlIHNjcmlwdAotICovCi1zdGF0aWMgaW50IHBlcmxfc3RvcF9zY3JpcHQodm9pZCkKLXsKLQlkU1A7IC8qIGFjY2VzcyB0byBQZXJsIHN0YWNrICovCi0JUFVTSE1BUksoU1ApOwotCi0JaWYgKGdldF9jdigibWFpbjo6dHJhY2VfZW5kIiwgMCkpCi0JCWNhbGxfcHYoIm1haW46OnRyYWNlX2VuZCIsIEdfRElTQ0FSRCB8IEdfTk9BUkdTKTsKLQotCXBlcmxfZGVzdHJ1Y3QobXlfcGVybCk7Ci0JcGVybF9mcmVlKG15X3BlcmwpOwotCi0JZnByaW50ZihzdGRlcnIsICJcbnBlcmYgdHJhY2UgUGVybCBzY3JpcHQgc3RvcHBlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdChjb25zdCBjaGFyICpvdXRmaWxlKQotewotCXN0cnVjdCBldmVudCAqZXZlbnQgPSBOVUxMOwotCXN0cnVjdCBmb3JtYXRfZmllbGQgKmY7Ci0JY2hhciBmbmFtZVtQQVRIX01BWF07Ci0JaW50IG5vdF9maXJzdCwgY291bnQ7Ci0JRklMRSAqb2ZwOwotCi0Jc3ByaW50ZihmbmFtZSwgIiVzLnBsIiwgb3V0ZmlsZSk7Ci0Jb2ZwID0gZm9wZW4oZm5hbWUsICJ3Iik7Ci0JaWYgKG9mcCA9PSBOVUxMKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZnByaW50ZihvZnAsICIjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsICIKLQkJImdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHBlcmxcbiIpOwotCi0JZnByaW50ZihvZnAsICIjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCIKLQkJIiBMaWNlbnNlIHZlcnNpb24gMlxuXG4iKTsKLQotCWZwcmludGYob2ZwLCAiIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCAiCi0JCSJmaWVsZHMgY29tbW9uIHRvXG4iKTsKLQotCWZwcmludGYob2ZwLCAiIyBhbGwgZXZlbnRzLiAgVGhleSBkb24ndCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvICIKLQkJInRoZSAnY29tbW9uXyonIGZpZWxkc1xuIik7Ci0KLQlmcHJpbnRmKG9mcCwgIiMgaW4gdGhlIGZvcm1hdCBmaWxlcy4gIFRob3NlIGZpZWxkcyBub3QgYXZhaWxhYmxlIGFzICIKLQkJImhhbmRsZXIgcGFyYW1zIGNhblxuIik7Ci0KLQlmcHJpbnRmKG9mcCwgIiMgYmUgcmV0cmlldmVkIHVzaW5nIFBlcmwgZnVuY3Rpb25zIG9mIHRoZSBmb3JtICIKLQkJImNvbW1vbl8qKCRjb250ZXh0KS5cbiIpOwotCi0JZnByaW50ZihvZnAsICIjIFNlZSBDb250ZXh0LnBtIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgIgotCQkiZnVuY3Rpb25zLlxuXG4iKTsKLQotCWZwcmludGYob2ZwLCAidXNlIGxpYiBcIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsLyIKLQkJIlBlcmYtVHJhY2UtVXRpbC9saWJcIjtcbiIpOwotCi0JZnByaW50ZihvZnAsICJ1c2UgbGliIFwiLi9QZXJmLVRyYWNlLVV0aWwvbGliXCI7XG4iKTsKLQlmcHJpbnRmKG9mcCwgInVzZSBQZXJmOjpUcmFjZTo6Q29yZTtcbiIpOwotCWZwcmludGYob2ZwLCAidXNlIFBlcmY6OlRyYWNlOjpDb250ZXh0O1xuIik7Ci0JZnByaW50ZihvZnAsICJ1c2UgUGVyZjo6VHJhY2U6OlV0aWw7XG5cbiIpOwotCi0JZnByaW50ZihvZnAsICJzdWIgdHJhY2VfYmVnaW5cbntcblx0IyBvcHRpb25hbFxufVxuXG4iKTsKLQlmcHJpbnRmKG9mcCwgInN1YiB0cmFjZV9lbmRcbntcblx0IyBvcHRpb25hbFxufVxuXG4iKTsKLQotCXdoaWxlICgoZXZlbnQgPSB0cmFjZV9maW5kX25leHRfZXZlbnQoZXZlbnQpKSkgewotCQlmcHJpbnRmKG9mcCwgInN1YiAlczo6JXNcbntcbiIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKLQkJZnByaW50ZihvZnAsICJcdG15ICgiKTsKLQotCQlmcHJpbnRmKG9mcCwgIiRldmVudF9uYW1lLCAiKTsKLQkJZnByaW50ZihvZnAsICIkY29udGV4dCwgIik7Ci0JCWZwcmludGYob2ZwLCAiJGNvbW1vbl9jcHUsICIpOwotCQlmcHJpbnRmKG9mcCwgIiRjb21tb25fc2VjcywgIik7Ci0JCWZwcmludGYob2ZwLCAiJGNvbW1vbl9uc2VjcyxcbiIpOwotCQlmcHJpbnRmKG9mcCwgIlx0ICAgICRjb21tb25fcGlkLCAiKTsKLQkJZnByaW50ZihvZnAsICIkY29tbW9uX2NvbW0sXG5cdCAgICAiKTsKLQotCQlub3RfZmlyc3QgPSAwOwotCQljb3VudCA9IDA7Ci0KLQkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7Ci0JCQlpZiAobm90X2ZpcnN0KyspCi0JCQkJZnByaW50ZihvZnAsICIsICIpOwotCQkJaWYgKCsrY291bnQgJSA1ID09IDApCi0JCQkJZnByaW50ZihvZnAsICJcblx0ICAgICIpOwotCi0JCQlmcHJpbnRmKG9mcCwgIiQlcyIsIGYtPm5hbWUpOwotCQl9Ci0JCWZwcmludGYob2ZwLCAiKSA9IEBfO1xuXG4iKTsKLQotCQlmcHJpbnRmKG9mcCwgIlx0cHJpbnRfaGVhZGVyKCRldmVudF9uYW1lLCAkY29tbW9uX2NwdSwgIgotCQkJIiRjb21tb25fc2VjcywgJGNvbW1vbl9uc2Vjcyxcblx0ICAgICAgICAgICAgICIKLQkJCSIkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKTtcblxuIik7Ci0KLQkJZnByaW50ZihvZnAsICJcdHByaW50ZihcIiIpOwotCi0JCW5vdF9maXJzdCA9IDA7Ci0JCWNvdW50ID0gMDsKLQotCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKLQkJCWlmIChub3RfZmlyc3QrKykKLQkJCQlmcHJpbnRmKG9mcCwgIiwgIik7Ci0JCQlpZiAoY291bnQgJiYgY291bnQgJSA0ID09IDApIHsKLQkJCQlmcHJpbnRmKG9mcCwgIlwiLlxuXHQgICAgICAgXCIiKTsKLQkJCX0KLQkJCWNvdW50Kys7Ci0KLQkJCWZwcmludGYob2ZwLCAiJXM9IiwgZi0+bmFtZSk7Ci0JCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcgfHwKLQkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcgfHwKLQkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKQotCQkJCWZwcmludGYob2ZwLCAiJSVzIik7Ci0JCQllbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkKLQkJCQlmcHJpbnRmKG9mcCwgIiUlZCIpOwotCQkJZWxzZQotCQkJCWZwcmludGYob2ZwLCAiJSV1Iik7Ci0JCX0KLQotCQlmcHJpbnRmKG9mcCwgIlxcblwiLFxuXHQgICAgICAgIik7Ci0KLQkJbm90X2ZpcnN0ID0gMDsKLQkJY291bnQgPSAwOwotCi0JCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgewotCQkJaWYgKG5vdF9maXJzdCsrKQotCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKLQotCQkJaWYgKCsrY291bnQgJSA1ID09IDApCi0JCQkJZnByaW50ZihvZnAsICJcblx0ICAgICAgICIpOwotCi0JCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHKSB7Ci0JCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7Ci0JCQkJCWZwcmludGYob2ZwLCAiXG5cdCAgICAgICAiKTsKLQkJCQkJY291bnQgPSA0OwotCQkJCX0KLQkJCQlmcHJpbnRmKG9mcCwgImZsYWdfc3RyKFwiIik7Ci0JCQkJZnByaW50ZihvZnAsICIlczo6JXNcIiwgIiwgZXZlbnQtPnN5c3RlbSwKLQkJCQkJZXZlbnQtPm5hbWUpOwotCQkJCWZwcmludGYob2ZwLCAiXCIlc1wiLCAkJXMpIiwgZi0+bmFtZSwKLQkJCQkJZi0+bmFtZSk7Ci0JCQl9IGVsc2UgaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1lNQk9MSUMpIHsKLQkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKLQkJCQkJZnByaW50ZihvZnAsICJcblx0ICAgICAgICIpOwotCQkJCQljb3VudCA9IDQ7Ci0JCQkJfQotCQkJCWZwcmludGYob2ZwLCAic3ltYm9sX3N0cihcIiIpOwotCQkJCWZwcmludGYob2ZwLCAiJXM6OiVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCi0JCQkJCWV2ZW50LT5uYW1lKTsKLQkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJCVzKSIsIGYtPm5hbWUsCi0JCQkJCWYtPm5hbWUpOwotCQkJfSBlbHNlCi0JCQkJZnByaW50ZihvZnAsICIkJXMiLCBmLT5uYW1lKTsKLQkJfQotCi0JCWZwcmludGYob2ZwLCAiKTtcbiIpOwotCQlmcHJpbnRmKG9mcCwgIn1cblxuIik7Ci0JfQotCi0JZnByaW50ZihvZnAsICJzdWIgdHJhY2VfdW5oYW5kbGVkXG57XG5cdG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICIKLQkJIiRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsXG5cdCAgICAiCi0JCSIkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfO1xuXG4iKTsKLQotCWZwcmludGYob2ZwLCAiXHRwcmludF9oZWFkZXIoJGV2ZW50X25hbWUsICRjb21tb25fY3B1LCAiCi0JCSIkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsXG5cdCAgICAgICAgICAgICAkY29tbW9uX3BpZCwgIgotCQkiJGNvbW1vbl9jb21tKTtcbn1cblxuIik7Ci0KLQlmcHJpbnRmKG9mcCwgInN1YiBwcmludF9oZWFkZXJcbntcbiIKLQkJIlx0bXkgKCRldmVudF9uYW1lLCAkY3B1LCAkc2VjcywgJG5zZWNzLCAkcGlkLCAkY29tbSkgPSBAXztcblxuIgotCQkiXHRwcmludGYoXCIlJS0yMHMgJSU1dSAlJTA1dS4lJTA5dSAlJTh1ICUlLTIwcyBcIixcblx0ICAgICAgICIKLQkJIiRldmVudF9uYW1lLCAkY3B1LCAkc2VjcywgJG5zZWNzLCAkcGlkLCAkY29tbSk7XG59Iik7Ci0KLQlmY2xvc2Uob2ZwKTsKLQotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGVkIFBlcmwgc2NyaXB0OiAlc1xuIiwgZm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wcyA9IHsKLQkubmFtZSA9ICJQZXJsIiwKLQkuc3RhcnRfc2NyaXB0ID0gcGVybF9zdGFydF9zY3JpcHQsCi0JLnN0b3Bfc2NyaXB0ID0gcGVybF9zdG9wX3NjcmlwdCwKLQkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudCwKLQkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCi19OwotCi1zdGF0aWMgdm9pZCBwcmludF91bnN1cHBvcnRlZF9tc2codm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgotCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCi0JCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCi0JCSJcbiAgIyB5dW0gaW5zdGFsbCBwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpIgotCQkiXG4gIGV0Yy5cbiIpOwotfQotCi1zdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKLQkJCQkJIGludCBhcmdjIF9fdW51c2VkLAotCQkJCQkgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCi17Ci0JcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVybF9zdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKLQkJCQkJICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKLQkJCQkJICAgaW50IHNpemUgX191bnVzZWQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKLQkJCQkJICAgY2hhciAqY29tbSBfX3VudXNlZCkKLXsKLX0KLQotc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQotewotCXByaW50X3Vuc3VwcG9ydGVkX21zZygpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7Ci0JLm5hbWUgPSAiUGVybCIsCi0JLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAotCS5zdG9wX3NjcmlwdCA9IHBlcmxfc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCi0JLnByb2Nlc3NfZXZlbnQgPSBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCi0JLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCi17Ci0JaW50IGVycjsKLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOwotCWlmIChlcnIpCi0JCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7Ci0KLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKLQlpZiAoZXJyKQotCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKLQotCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKLX0KLQotI2lmZGVmIE5PX0xJQlBFUkwKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKLXsKLQlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKLX0KLSNlbHNlCi12b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCi17Ci0JcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhmYjI2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jaWZuZGVmIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0gKLSNkZWZpbmUgX19QRVJGX1RSQUNFX0VWRU5UX1BFUkxfSAotI2lmZGVmIE5PX0xJQlBFUkwKLXR5cGVkZWYgaW50IElOVEVSUDsKLSNkZWZpbmUgZFNQCi0jZGVmaW5lIEVOVEVSCi0jZGVmaW5lIFNBVkVUTVBTCi0jZGVmaW5lIFBVVEJBQ0sKLSNkZWZpbmUgU1BBR0FJTgotI2RlZmluZSBGUkVFVE1QUwotI2RlZmluZSBMRUFWRQotI2RlZmluZSBTUAotI2RlZmluZSBFUlJTVgotI2RlZmluZSBHX1NDQUxBUgkJKDApCi0jZGVmaW5lIEdfRElTQ0FSRAkJKDApCi0jZGVmaW5lIEdfTk9BUkdTCQkoMCkKLSNkZWZpbmUgUFVTSE1BUksoYSkKLSNkZWZpbmUgU3ZUUlVFKGEpCQkoMCkKLSNkZWZpbmUgWFBVU0hzKHMpCi0jZGVmaW5lIHN2XzJtb3J0YWwoYSkKLSNkZWZpbmUgbmV3U1ZwdihhLGIpCi0jZGVmaW5lIG5ld1NWdXYoYSkKLSNkZWZpbmUgbmV3U1ZpdihhKQotI2RlZmluZSBnZXRfY3YoYSxiKQkJKDApCi0jZGVmaW5lIGNhbGxfcHYoYSxiKQkJKDApCi0jZGVmaW5lIHBlcmxfYWxsb2MoKQkJKDApCi0jZGVmaW5lIHBlcmxfY29uc3RydWN0KGEpCSgwKQotI2RlZmluZSBwZXJsX3BhcnNlKGEsYixjLGQsZSkJKDApCi0jZGVmaW5lIHBlcmxfcnVuKGEpCQkoMCkKLSNkZWZpbmUgcGVybF9kZXN0cnVjdChhKQkoMCkKLSNkZWZpbmUgcGVybF9mcmVlKGEpCQkoMCkKLSNkZWZpbmUgcFRIWAkJCXZvaWQKLSNkZWZpbmUgQ1YJCQl2b2lkCi0jZGVmaW5lIGRYU1VCX1NZUwotI2RlZmluZSBwVEhYXwotc3RhdGljIGlubGluZSB2b2lkIG5ld1hTKGNvbnN0IGNoYXIgKmEsIHZvaWQgKmIsIGNvbnN0IGNoYXIgKmMpIHt9Ci1zdGF0aWMgdm9pZCBib290X1BlcmZfX1RyYWNlX19Db250ZXh0KHBUSFhfIENWICpjdikge30KLXN0YXRpYyB2b2lkIGJvb3RfRHluYUxvYWRlcihwVEhYXyBDViAqY3YpIHt9Ci0jZWxzZQotI2luY2x1ZGUgPEVYVEVSTi5oPgotI2luY2x1ZGUgPHBlcmwuaD4KLXZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpOwotdm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KTsKLXR5cGVkZWYgUGVybEludGVycHJldGVyICogSU5URVJQOwotI2VuZGlmCi0KLXN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCB7Ci0Jdm9pZCAqZXZlbnRfZGF0YTsKLX07Ci0KLWludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLWludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLWludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwotCi0jZW5kaWYgLyogX19QRVJGX1RSQUNFX0VWRU5UX1BFUkxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKaW5kZXggMTc0NDQyMi4uN2NkMTE5MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKgogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqLwotI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CiAKICNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtODMsNyArODMsNyBAQAogCWNoYXIgKnN0ciA9IE5VTEw7CiAJaW50IHNpemUgPSAwOwogCWludCBpOwotCWludCByOworCW9mZl90IHI7CiAKIAlmb3IgKDs7KSB7CiAJCXIgPSByZWFkKGlucHV0X2ZkLCBidWYsIEJVRlNJWik7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCS8qIG1vdmUgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KIAlyID0gbHNlZWsoaW5wdXRfZmQsIC0ociAtIGkpLCBTRUVLX0NVUik7Ci0JaWYgKHIgPCAwKQorCWlmIChyID09IChvZmZfdCktMSkKIAkJZGllKCJsc2VlayIpOwogCiAJaWYgKHN0cikgewpAQCAtMjgyLDggKzI4Miw4IEBACiAKIHN0YXRpYyB2b2lkIGdldF9uZXh0X3BhZ2UoaW50IGNwdSkKIHsKLQlvZmY2NF90IHNhdmVfc2VlazsKLQlvZmY2NF90IHJldDsKKwlvZmZfdCBzYXZlX3NlZWs7CisJb2ZmX3QgcmV0OwogCiAJaWYgKCFjcHVfZGF0YVtjcHVdLnBhZ2UpCiAJCXJldHVybjsKQEAgLTI5OCwxNyArMjk4LDE3IEBACiAJCXVwZGF0ZV9jcHVfZGF0YV9pbmRleChjcHUpOwogCiAJCS8qIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIG1heSBleHBlY3QgdGhlIHBvaW50ZXIgdG8gbm90IG1vdmUgKi8KLQkJc2F2ZV9zZWVrID0gbHNlZWs2NChpbnB1dF9mZCwgMCwgU0VFS19DVVIpOworCQlzYXZlX3NlZWsgPSBsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpOwogCi0JCXJldCA9IGxzZWVrNjQoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ub2Zmc2V0LCBTRUVLX1NFVCk7Ci0JCWlmIChyZXQgPCAwKQorCQlyZXQgPSBsc2VlayhpbnB1dF9mZCwgY3B1X2RhdGFbY3B1XS5vZmZzZXQsIFNFRUtfU0VUKTsKKwkJaWYgKHJldCA9PSAob2ZmX3QpLTEpCiAJCQlkaWUoImZhaWxlZCB0byBsc2VlayIpOwogCQlyZXQgPSByZWFkKGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLnBhZ2UsIHBhZ2Vfc2l6ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZGllKCJmYWlsZWQgdG8gcmVhZCBwYWdlIik7CiAKIAkJLyogcmVzZXQgdGhlIGZpbGUgcG9pbnRlciBiYWNrICovCi0JCWxzZWVrNjQoaW5wdXRfZmQsIHNhdmVfc2VlaywgU0VFS19TRVQpOworCQlsc2VlayhpbnB1dF9mZCwgc2F2ZV9zZWVrLCBTRUVLX1NFVCk7CiAKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE5ODNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogdHJhY2UtZXZlbnQtc2NyaXB0aW5nLiAgU2NyaXB0aW5nIGVuZ2luZSBjb21tb24gYW5kIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorCitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCitzdGF0aWMgaW50IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKKwkJCQkgICAgICB2b2lkICpkYXRhIF9fdW51c2VkLAorCQkJCSAgICAgIGludCBzaXplIF9fdW51c2VkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKKwkJCQkgICAgICBjaGFyICpjb21tIF9fdW51c2VkKQoreworfQorCitzdGF0aWMgdm9pZCBwcmludF9weXRob25fdW5zdXBwb3J0ZWRfbXNnKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJQeXRob24gc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgorCQkiICBJbnN0YWxsIGxpYnB5dGhvbiBhbmQgcmVidWlsZCBwZXJmIHRvIGVuYWJsZSBpdC5cbiIKKwkJIkZvciBleGFtcGxlOlxuICAjIGFwdC1nZXQgaW5zdGFsbCBweXRob24tZGV2ICh1YnVudHUpIgorCQkiXG4gICMgeXVtIGluc3RhbGwgcHl0aG9uLWRldmVsIChGZWRvcmEpIgorCQkiXG4gIGV0Yy5cbiIpOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqc2NyaXB0IF9fdW51c2VkLAorCQkJCQkgICBpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQkJICAgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCit7CisJcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqb3V0ZmlsZSBfX3VudXNlZCkKK3sKKwlwcmludF9weXRob25fdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHB5dGhvbl9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzID0geworCS5uYW1lID0gIlB5dGhvbiIsCisJLnN0YXJ0X3NjcmlwdCA9IHB5dGhvbl9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnN0b3Bfc2NyaXB0ID0gc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnByb2Nlc3NfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkLAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBweXRob25fZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZyhzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqc2NyaXB0aW5nX29wcykKK3sKKwlpbnQgZXJyOworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJQeXRob24iLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIFB5dGhvbiBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicHkiLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHB5IHNjcmlwdCBleHRlbnNpb24iKTsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKK30KKworI2lmZGVmIE5PX0xJQlBZVEhPTgordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZygmcHl0aG9uX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMpOworfQorI2Vsc2UKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHB5dGhvbl9zY3JpcHRpbmdfb3BzOworCit2b2lkIHNldHVwX3B5dGhvbl9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9weXRob25fc2NyaXB0aW5nKCZweXRob25fc2NyaXB0aW5nX29wcyk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJpbnRfcGVybF91bnN1cHBvcnRlZF9tc2codm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgorCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCisJCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCisJCSJcbiAgIyB5dW0gaW5zdGFsbCAncGVybChFeHRVdGlsczo6RW1iZWQpJyAoRmVkb3JhKSIKKwkJIlxuICBldGMuXG4iKTsKK30KKworc3RhdGljIGludCBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCisJCQkJCSBpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQkJIGNvbnN0IGNoYXIgKiphcmd2IF9fdW51c2VkKQoreworCXByaW50X3BlcmxfdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqb3V0ZmlsZSBfX3VudXNlZCkKK3sKKwlwcmludF9wZXJsX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7CisJLm5hbWUgPSAiUGVybCIsCisJLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5zdG9wX3NjcmlwdCA9IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5wcm9jZXNzX2V2ZW50ID0gcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQsCit9OworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9wZXJsX3NjcmlwdGluZyhzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqc2NyaXB0aW5nX29wcykKK3sKKwlpbnQgZXJyOworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJQZXJsIiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBQZXJsIHNjcmlwdCBleHRlbnNpb24iKTsKKworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJwbCIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgcGwgc2NyaXB0IGV4dGVuc2lvbiIpOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCkpOworfQorCisjaWZkZWYgTk9fTElCUEVSTAordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKCZwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMpOworfQorI2Vsc2UKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wczsKKwordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKCZwZXJsX3NjcmlwdGluZ19vcHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCmluZGV4IDZhZDQwNTYuLmMzMjY5YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCkBAIC0yNzksNyArMjc5LDE1IEBACiAKIGludCBzY3JpcHRfc3BlY19yZWdpc3Rlcihjb25zdCBjaGFyICpzcGVjLCBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqb3BzKTsKIAotZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wczsKIHZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCk7Cit2b2lkIHNldHVwX3B5dGhvbl9zY3JpcHRpbmcodm9pZCk7CisKK3N0cnVjdCBzY3JpcHRpbmdfY29udGV4dCB7CisJdm9pZCAqZXZlbnRfZGF0YTsKK307CisKK2ludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKK2ludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKK2ludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwogCiAjZW5kaWYgLyogX19QRVJGX1RSQUNFX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5jIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWI4OTBmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuYwpAQCAtMCwwICsxLDk0IEBACisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKK2ludCBta2Rpcl9wKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCWludCBlcnI7CisJY2hhciAqZCA9IHBhdGg7CisKKwlpZiAoKmQgIT0gJy8nKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKCorK2QgPT0gJy8nKTsKKworCXdoaWxlICgoZCA9IHN0cmNocihkLCAnLycpKSkgeworCQkqZCA9ICdcMCc7CisJCWVyciA9IHN0YXQocGF0aCwgJnN0KSAmJiBta2RpcihwYXRoLCBtb2RlKTsKKwkJKmQrKyA9ICcvJzsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwkJd2hpbGUgKCpkID09ICcvJykKKwkJCSsrZDsKKwl9CisJcmV0dXJuIChzdGF0KHBhdGgsICZzdCkgJiYgbWtkaXIocGF0aCwgbW9kZSkpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHNsb3dfY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCit7CisJaW50IGVyciA9IDA7CisJY2hhciAqbGluZSA9IE5VTEw7CisJc2l6ZV90IG47CisJRklMRSAqZnJvbV9mcCA9IGZvcGVuKGZyb20sICJyIiksICp0b19mcDsKKworCWlmIChmcm9tX2ZwID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJdG9fZnAgPSBmb3Blbih0bywgInciKTsKKwlpZiAodG9fZnAgPT0gTlVMTCkKKwkJZ290byBvdXRfZmNsb3NlX2Zyb207CisKKwl3aGlsZSAoZ2V0bGluZSgmbGluZSwgJm4sIGZyb21fZnApID4gMCkKKwkJaWYgKGZwdXRzKGxpbmUsIHRvX2ZwKSA9PSBFT0YpCisJCQlnb3RvIG91dF9mY2xvc2VfdG87CisJZXJyID0gMDsKK291dF9mY2xvc2VfdG86CisJZmNsb3NlKHRvX2ZwKTsKKwlmcmVlKGxpbmUpOworb3V0X2ZjbG9zZV9mcm9tOgorCWZjbG9zZShmcm9tX2ZwKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCit7CisJaW50IGZyb21mZCwgdG9mZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl2b2lkICphZGRyOworCWludCBlcnIgPSAtMTsKKworCWlmIChzdGF0KGZyb20sICZzdCkpCisJCWdvdG8gb3V0OworCisJaWYgKHN0LnN0X3NpemUgPT0gMCkgLyogL3Byb2M/IGRvIGl0IHNsb3dseS4uLiAqLworCQlyZXR1cm4gc2xvd19jb3B5ZmlsZShmcm9tLCB0byk7CisKKwlmcm9tZmQgPSBvcGVuKGZyb20sIE9fUkRPTkxZKTsKKwlpZiAoZnJvbWZkIDwgMCkKKwkJZ290byBvdXQ7CisKKwl0b2ZkID0gY3JlYXQodG8sIDA3NTUpOworCWlmICh0b2ZkIDwgMCkKKwkJZ290byBvdXRfY2xvc2VfZnJvbTsKKworCWFkZHIgPSBtbWFwKE5VTEwsIHN0LnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZyb21mZCwgMCk7CisJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBvdXRfY2xvc2VfdG87CisKKwlpZiAod3JpdGUodG9mZCwgYWRkciwgc3Quc3Rfc2l6ZSkgPT0gc3Quc3Rfc2l6ZSkKKwkJZXJyID0gMDsKKworCW11bm1hcChhZGRyLCBzdC5zdF9zaXplKTsKK291dF9jbG9zZV90bzoKKwljbG9zZSh0b2ZkKTsKKwlpZiAoZXJyKQorCQl1bmxpbmsodG8pOworb3V0X2Nsb3NlX2Zyb206CisJY2xvc2UoZnJvbWZkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKaW5kZXggYzY3M2Q4OC4uMGY1YjJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCkBAIC00MDMsNCArNDAzLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKK2ludCBta2Rpcl9wKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKTsKK2ludCBjb3B5ZmlsZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0byk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCmluZGV4IDFjMTVlMzkuLmNmYTU1ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYworKysgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKQEAgLTE2OSw2ICsxNjksNyBAQAogCQkJCWNvdW50ZXJ3aWR0aFtqXSwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCWZwcmludGYoZnAsICJcbiIpOwogCX0KKwlmcmVlKGNvdW50ZXJ3aWR0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfcmVhZF92YWx1ZXNfX2Rpc3BsYXlfcmF3KEZJTEUgKmZwLAo=